ZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL2FyIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vYXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjcwN2I2MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL2FyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL2FzIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vYXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjcyMzczMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL2FzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL2MrKyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL2MrKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kY2MyYWIyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vYysrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL2crKyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL2crKwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kY2MyYWIyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vZysrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL2djYyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL2djYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zODM1MGJjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vZ2NjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL2dmb3J0cmFuIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vZ2ZvcnRyYW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJjMzA4YwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL2dmb3J0cmFuCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL2xkIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vbGQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjllNDYwMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL2xkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL2xkLmJmZCBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL2xkLmJmZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOWU0NjAwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vbGQuYmZkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL25tIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vbm0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjNjN2RiNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL25tCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL29iamNvcHkgYi9hYXJjaDY0LW5vbmUtZWxmL2Jpbi9vYmpjb3B5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlYWQ5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2Jpbi9vYmpjb3B5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL29iamR1bXAgYi9hYXJjaDY0LW5vbmUtZWxmL2Jpbi9vYmpkdW1wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE5MjgyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2Jpbi9vYmpkdW1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL3JhbmxpYiBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL3JhbmxpYgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTFlZDMwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vcmFubGliCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvYmluL3N0cmlwIGIvYWFyY2g2NC1ub25lLWVsZi9iaW4vc3RyaXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTcyMzY4NgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvYmluL3N0cmlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9fYW5zaS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL19hbnNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1OTdiMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9fYW5zaS5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKiBQcm92aWRlIHN1cHBvcnQgZm9yIGJvdGggQU5TSSBhbmQgbm9uLUFOU0kgZW52aXJvbm1lbnRzLiAgKi8KKworLyogU29tZSBBTlNJIGVudmlyb25tZW50cyBhcmUgImJyb2tlbiIgaW4gdGhlIHNlbnNlIHRoYXQgX19TVERDX18gY2Fubm90IGJlCisgICByZWxpZWQgdXBvbiB0byBoYXZlIGl0J3MgaW50ZW5kZWQgbWVhbmluZy4gIFRoZXJlZm9yZSB3ZSBtdXN0IHVzZSBvdXIgb3duCisgICBjb25jb2N0aW9uOiBfSEFWRV9TVERDLiAgQWx3YXlzIHVzZSBfSEFWRV9TVERDIGluc3RlYWQgb2YgX19TVERDX18gaW4gbmV3bGliCisgICBzb3VyY2VzIQorCisgICBUbyBnZXQgYSBzdHJpY3QgQU5TSSBDIGVudmlyb25tZW50LCBkZWZpbmUgbWFjcm8gX19TVFJJQ1RfQU5TSV9fLiAgVGhpcyB3aWxsCisgICAiY29tbWVudCBvdXQiIHRoZSBub24tQU5TSSBwYXJ0cyBvZiB0aGUgQU5TSSBoZWFkZXIgZmlsZXMgKG5vbi1BTlNJIGhlYWRlcgorICAgZmlsZXMgYXJlbid0IGFmZmVjdGVkKS4gICovCisKKyNpZm5kZWYJX0FOU0lERUNMX0hfCisjZGVmaW5lCV9BTlNJREVDTF9IXworCisjaW5jbHVkZSA8bmV3bGliLmg+CisjaW5jbHVkZSA8c3lzL2NvbmZpZy5oPgorCisvKiBGaXJzdCB0cnkgdG8gZmlndXJlIG91dCB3aGV0aGVyIHdlIHJlYWxseSBhcmUgaW4gYW4gQU5TSSBDIGVudmlyb25tZW50LiAgKi8KKy8qIEZJWE1FOiBUaGlzIHByb2JhYmx5IG5lZWRzIHNvbWUgd29yay4gIFBlcmhhcHMgc3lzL2NvbmZpZy5oIGNhbiBiZQorICAgcHJldmFpbGVkIHVwb24gdG8gZ2l2ZSB1cyBhIGNsdWUuICAqLworCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUgX0hBVkVfU1REQworI2VuZGlmCisKKy8qICBJU08gQysrLiAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisjaWYgIShkZWZpbmVkKF9CRUdJTl9TVERfQykgJiYgZGVmaW5lZChfRU5EX1NURF9DKSkKKyNpZmRlZiBfSEFWRV9TVERfQ1hYCisjZGVmaW5lIF9CRUdJTl9TVERfQyBuYW1lc3BhY2Ugc3RkIHsgZXh0ZXJuICJDIiB7CisjZGVmaW5lIF9FTkRfU1REX0MgIH0gfQorI2Vsc2UKKyNkZWZpbmUgX0JFR0lOX1NURF9DIGV4dGVybiAiQyIgeworI2RlZmluZSBfRU5EX1NURF9DICB9CisjZW5kaWYKKyNpZiBfX0dOVUNfUFJFUkVRICgzLCAzKQorI2RlZmluZSBfTk9USFJPVyBfX2F0dHJpYnV0ZV9fICgobm90aHJvdykpCisjZWxzZQorI2RlZmluZSBfTk9USFJPVyB0aHJvdygpCisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgX0JFR0lOX1NURF9DCisjZGVmaW5lIF9FTkRfU1REX0MKKyNkZWZpbmUgX05PVEhST1cKKyNlbmRpZgorCisjaWZkZWYgX0hBVkVfU1REQworI2RlZmluZQlfUFRSCQl2b2lkICoKKyNkZWZpbmUJX0FORAkJLAorI2RlZmluZQlfTk9BUkdTCQl2b2lkCisjZGVmaW5lCV9DT05TVAkJY29uc3QKKyNkZWZpbmUJX1ZPTEFUSUxFCXZvbGF0aWxlCisjZGVmaW5lCV9TSUdORUQJCXNpZ25lZAorI2RlZmluZQlfRE9UUwkJLCAuLi4KKyNkZWZpbmUgX1ZPSUQgdm9pZAorI2lmZGVmIF9fQ1lHV0lOX18KKyNkZWZpbmUJX0VYRlVOX05PVEhST1cobmFtZSwgcHJvdG8pCV9fY2RlY2wgbmFtZSBwcm90byBfTk9USFJPVworI2RlZmluZQlfRVhGVU4obmFtZSwgcHJvdG8pCQlfX2NkZWNsIG5hbWUgcHJvdG8KKyNkZWZpbmUJX0VYUEFSTShuYW1lLCBwcm90bykJCSgqIF9fY2RlY2wgbmFtZSkgcHJvdG8KKyNkZWZpbmUJX0VYRk5QVFIobmFtZSwgcHJvdG8pCQkoX19jZGVjbCAqIG5hbWUpIHByb3RvCisjZWxzZQorI2RlZmluZQlfRVhGVU5fTk9USFJPVyhuYW1lLCBwcm90bykJbmFtZSBwcm90byBfTk9USFJPVworI2RlZmluZQlfRVhGVU4obmFtZSwgcHJvdG8pCQluYW1lIHByb3RvCisjZGVmaW5lIF9FWFBBUk0obmFtZSwgcHJvdG8pCQkoKiBuYW1lKSBwcm90bworI2RlZmluZSBfRVhGTlBUUihuYW1lLCBwcm90bykJCSgqIG5hbWUpIHByb3RvCisjZW5kaWYKKyNkZWZpbmUJX0RFRlVOKG5hbWUsIGFyZ2xpc3QsIGFyZ3MpCW5hbWUoYXJncykKKyNkZWZpbmUJX0RFRlVOX1ZPSUQobmFtZSkJCW5hbWUoX05PQVJHUykKKyNkZWZpbmUgX0NBU1RfVk9JRCAodm9pZCkKKyNpZm5kZWYgX0xPTkdfRE9VQkxFCisjZGVmaW5lIF9MT05HX0RPVUJMRSBsb25nIGRvdWJsZQorI2VuZGlmCisjaWZuZGVmIF9MT05HX0xPTkdfVFlQRQorI2RlZmluZSBfTE9OR19MT05HX1RZUEUgbG9uZyBsb25nCisjZW5kaWYKKyNpZm5kZWYgX1BBUkFNUworI2RlZmluZSBfUEFSQU1TKHBhcmFtbGlzdCkJCXBhcmFtbGlzdAorI2VuZGlmCisjZWxzZQkKKyNkZWZpbmUJX1BUUgkJY2hhciAqCisjZGVmaW5lCV9BTkQJCTsKKyNkZWZpbmUJX05PQVJHUworI2RlZmluZQlfQ09OU1QKKyNkZWZpbmUJX1ZPTEFUSUxFCisjZGVmaW5lCV9TSUdORUQKKyNkZWZpbmUJX0RPVFMKKyNkZWZpbmUgX1ZPSUQgdm9pZAorI2RlZmluZQlfRVhGVU4obmFtZSwgcHJvdG8pCQluYW1lKCkKKyNkZWZpbmUJX0VYRlVOX05PVEhST1cobmFtZSwgcHJvdG8pCW5hbWUoKQorI2RlZmluZQlfREVGVU4obmFtZSwgYXJnbGlzdCwgYXJncykJbmFtZSBhcmdsaXN0IGFyZ3M7CisjZGVmaW5lCV9ERUZVTl9WT0lEKG5hbWUpCQluYW1lKCkKKyNkZWZpbmUgX0NBU1RfVk9JRAorI2RlZmluZSBfTE9OR19ET1VCTEUgZG91YmxlCisjZGVmaW5lIF9MT05HX0xPTkdfVFlQRSBsb25nCisjaWZuZGVmIF9QQVJBTVMKKyNkZWZpbmUgX1BBUkFNUyhwYXJhbWxpc3QpCQkoKQorI2VuZGlmCisjZW5kaWYKKworLyogU3VwcG9ydCBnY2MncyBfX2F0dHJpYnV0ZV9fIGZhY2lsaXR5LiAgKi8KKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9BVFRSSUJVVEUoYXR0cnMpIF9fYXR0cmlidXRlX18gKGF0dHJzKQorI2Vsc2UKKyNkZWZpbmUgX0FUVFJJQlVURShhdHRycykKKyNlbmRpZgorCisvKiAgVGhlIHRyYWRpdGlvbmFsIG1lYW5pbmcgb2YgJ2V4dGVybiBpbmxpbmUnIGZvciBHQ0MgaXMgbm90CisgIHRvIGVtaXQgdGhlIGZ1bmN0aW9uIGJvZHkgdW5sZXNzIHRoZSBhZGRyZXNzIGlzIGV4cGxpY2l0bHkKKyAgdGFrZW4uICBIb3dldmVyIHRoaXMgYmVoYXZpb3VyIGlzIGNoYW5naW5nIHRvIG1hdGNoIHRoZSBDOTkKKyAgc3RhbmRhcmQsIHdoaWNoIHVzZXMgJ2V4dGVybiBpbmxpbmUnIHRvIGluZGljYXRlIHRoYXQgdGhlCisgIGZ1bmN0aW9uIGJvZHkgKm11c3QqIGJlIGVtaXR0ZWQuICBMaWtld2lzZSwgYSBmdW5jdGlvbiBkZWNsYXJlZAorICB3aXRob3V0IGVpdGhlciAnZXh0ZXJuJyBvciAnc3RhdGljJyBkZWZhdWx0cyB0byBleHRlcm4gbGlua2FnZQorICAoQzk5IDYuMi4ycDUpLCBhbmQgdGhlIGNvbXBpbGVyIG1heSBjaG9vc2Ugd2hldGhlciB0byB1c2UgdGhlCisgIGlubGluZSB2ZXJzaW9uIG9yIGNhbGwgdGhlIGV4dGVybiBsaW5rYWdlIHZlcnNpb24gKDYuNy40cDYpLgorICBJZiB3ZSBhcmUgdXNpbmcgR0NDLCBidXQgZG8gbm90IGhhdmUgdGhlIG5ldyBiZWhhdmlvdXIsIHdlIG5lZWQKKyAgdG8gdXNlIGV4dGVybiBpbmxpbmU7IGlmIHdlIGFyZSB1c2luZyBhIG5ldyBHQ0Mgd2l0aCB0aGUKKyAgQzk5LWNvbXBhdGlibGUgYmVoYXZpb3VyLCBvciBhIG5vbi1HQ0MgY29tcGlsZXIgKHdoaWNoIHdlIHdpbGwKKyAgaGF2ZSB0byBob3BlIGlzIEM5OSwgc2luY2UgdGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIGFjaGlldmUgdGhlCisgIGVmZmVjdCBvZiBvbWl0dGluZyB0aGUgZnVuY3Rpb24gaWYgaXQgaXNuJ3QgcmVmZXJlbmNlZCkgd2UgdXNlCisgICdzdGF0aWMgaW5saW5lJywgd2hpY2ggYzk5IGRlZmluZXMgdG8gbWVhbiBtb3JlLW9yLWxlc3MgdGhlIHNhbWUKKyAgYXMgdGhlIEdudSBDICdleHRlcm4gaW5saW5lJy4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19HTlVDX1NURENfSU5MSU5FX18pCisvKiBXZSdyZSB1c2luZyBHQ0MsIGJ1dCB3aXRob3V0IHRoZSBuZXcgQzk5LWNvbXBhdGlibGUgYmVoYXZpb3VyLiAgKi8KKyNkZWZpbmUgX0VMSURBQkxFX0lOTElORSBleHRlcm4gX19pbmxpbmVfXyBfQVRUUklCVVRFICgoX19hbHdheXNfaW5saW5lX18pKQorI2Vsc2UKKy8qIFdlJ3JlIHVzaW5nIEdDQyBpbiBDOTkgbW9kZSwgb3IgYW4gdW5rbm93biBjb21waWxlciB3aGljaAorICB3ZSBqdXN0IGhhdmUgdG8gaG9wZSBvYmV5cyB0aGUgQzk5IHNlbWFudGljcyBvZiBpbmxpbmUuICAqLworI2RlZmluZSBfRUxJREFCTEVfSU5MSU5FIHN0YXRpYyBfX2lubGluZV9fCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVEgKDMsIDEpCisjZGVmaW5lIF9OT0lOTElORQkJX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXykpCisjZGVmaW5lIF9OT0lOTElORV9TVEFUSUMJX05PSU5MSU5FIHN0YXRpYworI2Vsc2UKKy8qIE9uIG5vbi1HTlUgY29tcGlsZXJzIGFuZCBHQ0MgcHJpb3IgdG8gdmVyc2lvbiAzLjEgdGhlIGNvbXBpbGVyIGNhbid0IGJlCisgICB0cnVzdGVkIG5vdCB0byBpbmxpbmUgaWYgaXQgaXMgc3RhdGljLiAqLworI2RlZmluZSBfTk9JTkxJTkUKKyNkZWZpbmUgX05PSU5MSU5FX1NUQVRJQworI2VuZGlmCisKKyNlbmRpZiAvKiBfQU5TSURFQ0xfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9fc3lzbGlzdC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL19zeXNsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcxNjQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9fc3lzbGlzdC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIGludGVybmFsIHVzZSBvbmx5IC0tIG1hcHBpbmcgb2YgInN5c3RlbSBjYWxscyIgZm9yIGxpYnJhcmllcyB0aGF0IGxvc2UKKyAgIGFuZCBvbmx5IHByb3ZpZGUgQyBuYW1lcywgc28gdGhhdCB3ZSBlbmQgdXAgaW4gdmlvbGF0aW9uIG9mIEFOU0kgKi8KKyNpZm5kZWYgX19TWVNMSVNUX0gKKyNkZWZpbmUgX19TWVNMSVNUX0gKKworI2lmZGVmIE1JU1NJTkdfU1lTQ0FMTF9OQU1FUworI2RlZmluZSBfY2xvc2UgY2xvc2UKKyNkZWZpbmUgX2V4ZWN2ZSBleGVjdmUKKyNkZWZpbmUgX2ZjbnRsIGZjbnRsCisjZGVmaW5lIF9mb3JrIGZvcmsKKyNkZWZpbmUgX2ZzdGF0IGZzdGF0CisjZGVmaW5lIF9nZXRwaWQgZ2V0cGlkCisjZGVmaW5lIF9nZXR0aW1lb2ZkYXkgZ2V0dGltZW9mZGF5CisjZGVmaW5lIF9pc2F0dHkgaXNhdHR5CisjZGVmaW5lIF9raWxsIGtpbGwKKyNkZWZpbmUgX2xpbmsgbGluaworI2RlZmluZSBfbHNlZWsgbHNlZWsKKyNkZWZpbmUgX21rZGlyIG1rZGlyCisjZGVmaW5lIF9vcGVuIG9wZW4KKyNkZWZpbmUgX3JlYWQgcmVhZAorI2RlZmluZSBfc2JyayBzYnJrCisjZGVmaW5lIF9zdGF0IHN0YXQKKyNkZWZpbmUgX3RpbWVzIHRpbWVzCisjZGVmaW5lIF91bmxpbmsgdW5saW5rCisjZGVmaW5lIF93YWl0IHdhaXQKKyNkZWZpbmUgX3dyaXRlIHdyaXRlCisjZW5kaWYgLyogTUlTU0lOR19TWVNDQUxMX05BTUVTICovCisKKyNpZiBkZWZpbmVkIE1JU1NJTkdfU1lTQ0FMTF9OQU1FUyB8fCAhZGVmaW5lZCBIQVZFX09QRU5ESVIKKy8qIElmIHRoZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgaXMgbWlzc2luZyBvcGVuZGlyLCByZWFkZGlyLCBhbmQKKyAgIGNsb3NlZGlyLCB0aGVyZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgaW4KKyAgIGxpYmMvcG9zaXggdGhhdCBpcyBpbXBsZW1lbnRlZCB1c2luZyBvcGVuLCBnZXRkZW50cywgYW5kIGNsb3NlLiAKKyAgIE5vdGUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY3VycmVudGx5IG5vdCBpbiB0aGUgbGliYy9zeXNjYWxscworICAgZGlyZWN0b3J5LiAgKi8KKyNkZWZpbmUgX29wZW5kaXIgb3BlbmRpcgorI2RlZmluZSBfcmVhZGRpciByZWFkZGlyCisjZGVmaW5lIF9jbG9zZWRpciBjbG9zZWRpcgorI2VuZGlmIC8qIE1JU1NJTkdfU1lTQ0FMTF9OQU1FUyB8fCAhSEFWRV9PUEVORElSICovCisKKyNlbmRpZiAvKiAhX19TWVNMSVNUX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYWxsb2NhLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYWxsb2NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhMGZkOQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9hbGxvY2EuaApAQCAtMCwwICsxLDIxIEBACisvKiBsaWJjL2luY2x1ZGUvYWxsb2NhLmggLSBBbGxvY2F0ZSBtZW1vcnkgb24gc3RhY2sgKi8KKworLyogV3JpdHRlbiAyMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciAqLworLyogUmVhcnJhbmdlZCBmb3IgZ2VuZXJhbCBpbmNsdXNpb24gYnkgc3RkbGliLmguCisgICAyMDAxLCBDb3Jpbm5hIFZpbnNjaGVuIDx2aW5zY2hlbkByZWRoYXQuY29tPiAqLworCisjaWZuZGVmIF9ORVdMSUJfQUxMT0NBX0gKKyNkZWZpbmUgX05FV0xJQl9BTExPQ0FfSAorCisjaW5jbHVkZSAiX2Fuc2kuaCIKKyNpbmNsdWRlIDxzeXMvcmVlbnQuaD4KKworI3VuZGVmIGFsbG9jYQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgYWxsb2NhKHNpemUpIF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZSkKKyNlbHNlCit2b2lkICogX0VYRlVOKGFsbG9jYSwoc2l6ZV90KSk7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYXIuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9hci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMmU0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYXIuaApAQCAtMCwwICsxLDY5IEBACisvKgkkTmV0QlNEOiBhci5oLHYgMS40IDE5OTQvMTAvMjYgMDA6NTU6NDMgY2dkIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogSHVnaCBTbWl0aCBhdCBUaGUgVW5pdmVyc2l0eSBvZiBHdWVscGguCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpYXIuaAk4LjIgKEJlcmtlbGV5KSAxLzIxLzk0CisgKi8KKworI2lmbmRlZiBfQVJfSF8KKyNkZWZpbmUJX0FSX0hfCisKKy8qIFByZS00QlNEIGFyY2hpdmVzIGhhZCB0aGVzZSBtYWdpYyBudW1iZXJzIGluIHRoZW0uICovCisjZGVmaW5lCU9BUk1BRzEJMDE3NzU1NQorI2RlZmluZQlPQVJNQUcyCTAxNzc1NDUKKworI2RlZmluZQlBUk1BRwkJIiE8YXJjaD5cbiIJLyogYXIgIm1hZ2ljIG51bWJlciIgKi8KKyNkZWZpbmUJU0FSTUFHCQk4CQkvKiBzdHJsZW4oQVJNQUcpOyAqLworCisjZGVmaW5lCUFSX0VGTVQxCSIjMS8iCQkvKiBleHRlbmRlZCBmb3JtYXQgIzEgKi8KKworc3RydWN0IGFyX2hkciB7CisJY2hhciBhcl9uYW1lWzE2XTsJCS8qIG5hbWUgKi8KKwljaGFyIGFyX2RhdGVbMTJdOwkJLyogbW9kaWZpY2F0aW9uIHRpbWUgKi8KKwljaGFyIGFyX3VpZFs2XTsJCQkvKiB1c2VyIGlkICovCisJY2hhciBhcl9naWRbNl07CQkJLyogZ3JvdXAgaWQgKi8KKwljaGFyIGFyX21vZGVbOF07CQkvKiBvY3RhbCBmaWxlIHBlcm1pc3Npb25zICovCisJY2hhciBhcl9zaXplWzEwXTsJCS8qIHNpemUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUJQVJGTUFHCSJgXG4iCisJY2hhciBhcl9mbWFnWzJdOwkJLyogY29uc2lzdGVuY3kgY2hlY2sgKi8KK307CisKKyNlbmRpZiAvKiAhX0FSX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYXJnei5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2FyZ3ouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM5YWRiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2FyZ3ouaApAQCAtMCwwICsxLDMzIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgIFJlZCBIYXQsIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisgKiBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfQVJHWl9IXworI2RlZmluZSBfQVJHWl9IXworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgIl9hbnNpLmgiCisKK19CRUdJTl9TVERfQworCisvKiBUaGUgbmV3bGliIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBhc3N1bWVzIHRoYXQgc2l6ZW9mKGNoYXIpID09IDEuICovCitlcnJvcl90IGFyZ3pfY3JlYXRlIChjaGFyICpjb25zdCBhcmd2W10sIGNoYXIgKiphcmd6LCBzaXplX3QgKmFyZ3pfbGVuKTsKK2Vycm9yX3QgYXJnel9jcmVhdGVfc2VwIChjb25zdCBjaGFyICpzdHJpbmcsIGludCBzZXAsIGNoYXIgKiphcmd6LCBzaXplX3QgKmFyZ3pfbGVuKTsKK3NpemVfdCBhcmd6X2NvdW50IChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgYXJnel9sZW4pOwordm9pZCBhcmd6X2V4dHJhY3QgKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwgY2hhciAqKmFyZ3YpOwordm9pZCBhcmd6X3N0cmluZ2lmeSAoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLCBpbnQgc2VwKTsKK2Vycm9yX3QgYXJnel9hZGQgKGNoYXIgKiphcmd6LCBzaXplX3QgKmFyZ3pfbGVuLCBjb25zdCBjaGFyICpzdHIpOworZXJyb3JfdCBhcmd6X2FkZF9zZXAgKGNoYXIgKiphcmd6LCBzaXplX3QgKmFyZ3pfbGVuLCBjb25zdCBjaGFyICpzdHIsIGludCBzZXApOworZXJyb3JfdCBhcmd6X2FwcGVuZCAoY2hhciAqKmFyZ3osIHNpemVfdCAqYXJnel9sZW4sIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOworZXJyb3JfdCBhcmd6X2RlbGV0ZSAoY2hhciAqKmFyZ3osIHNpemVfdCAqYXJnel9sZW4sIGNoYXIgKmVudHJ5KTsKK2Vycm9yX3QgYXJnel9pbnNlcnQgKGNoYXIgKiphcmd6LCBzaXplX3QgKmFyZ3pfbGVuLCBjaGFyICpiZWZvcmUsIGNvbnN0IGNoYXIgKmVudHJ5KTsKK2NoYXIgKiBhcmd6X25leHQgKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwgY29uc3QgY2hhciAqZW50cnkpOworZXJyb3JfdCBhcmd6X3JlcGxhY2UgKGNoYXIgKiphcmd6LCBzaXplX3QgKmFyZ3pfbGVuLCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKndpdGgsIHVuc2lnbmVkICpyZXBsYWNlX2NvdW50KTsKKworX0VORF9TVERfQworCisjZW5kaWYgLyogX0FSR1pfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9hc3NlcnQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9hc3NlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWJiMDQwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2Fzc2VydC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisJYXNzZXJ0LmgKKyovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgIl9hbnNpLmgiCisKKyN1bmRlZiBhc3NlcnQKKworI2lmZGVmIE5ERUJVRyAgICAgICAgICAgLyogcmVxdWlyZWQgYnkgQU5TSSBzdGFuZGFyZCAqLworIyBkZWZpbmUgYXNzZXJ0KF9fZSkgKCh2b2lkKTApCisjZWxzZQorIyBkZWZpbmUgYXNzZXJ0KF9fZSkgKChfX2UpID8gKHZvaWQpMCA6IF9fYXNzZXJ0X2Z1bmMgKF9fRklMRV9fLCBfX0xJTkVfXywgXAorCQkJCQkJICAgICAgIF9fQVNTRVJUX0ZVTkMsICNfX2UpKQorCisjIGlmbmRlZiBfX0FTU0VSVF9GVU5DCisgIC8qIFVzZSBnKysncyBkZW1hbmdsZWQgbmFtZXMgaW4gQysrLiAgKi8KKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBfX0dOVUNfXworIyAgIGRlZmluZSBfX0FTU0VSVF9GVU5DIF9fUFJFVFRZX0ZVTkNUSU9OX18KKworICAvKiBDOTkgcmVxdWlyZXMgdGhlIHVzZSBvZiBfX2Z1bmNfXy4gICovCisjICBlbGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorIyAgIGRlZmluZSBfX0FTU0VSVF9GVU5DIF9fZnVuY19fCisKKyAgLyogT2xkZXIgdmVyc2lvbnMgb2YgZ2NjIGRvbid0IGhhdmUgX19mdW5jX18gYnV0IGNhbiB1c2UgX19GVU5DVElPTl9fLiAgKi8KKyMgIGVsaWYgX19HTlVDX18gPj0gMgorIyAgIGRlZmluZSBfX0FTU0VSVF9GVU5DIF9fRlVOQ1RJT05fXworCisgIC8qIGZhaWxlZCB0byBkZXRlY3QgX19mdW5jX18gc3VwcG9ydC4gICovCisjICBlbHNlCisjICAgZGVmaW5lIF9fQVNTRVJUX0ZVTkMgKChjaGFyICopIDApCisjICBlbmRpZgorIyBlbmRpZiAvKiAhX19BU1NFUlRfRlVOQyAqLworI2VuZGlmIC8qICFOREVCVUcgKi8KKwordm9pZCBfRVhGVU4oX19hc3NlcnQsIChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQorCSAgICBfQVRUUklCVVRFICgoX19ub3JldHVybl9fKSkpOwordm9pZCBfRVhGVU4oX19hc3NlcnRfZnVuYywgKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikKKwkgICAgX0FUVFJJQlVURSAoKF9fbm9yZXR1cm5fXykpKTsKKworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCAmJiAhZGVmaW5lZCBfX2NwbHVzcGx1cworIyBkZWZpbmUgc3RhdGljX2Fzc2VydCBfU3RhdGljX2Fzc2VydAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9hdG9taWNfd29yZC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvYXRvbWljX3dvcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjgzN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvYXRvbWljX3dvcmQuaApAQCAtMCwwICsxLDQ3IEBACisvLyBMb3ctbGV2ZWwgdHlwZSBmb3IgYXRvbWljIG9wZXJhdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGF0b21pY193b3JkLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0FUT01JQ19XT1JEX0gKKyNkZWZpbmUgX0dMSUJDWFhfQVRPTUlDX1dPUkRfSAkxCisKK3R5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKKworLy8gRGVmaW5lIHRoZXNlIHR3byBtYWNyb3MgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIG1lbW9yeSBiYXJyaWVyIGZvciB0aGUgdGFyZ2V0LgorLy8gVGhlIGNvbW1lbnRlZCBvdXQgdmVyc2lvbnMgYmVsb3cgYXJlIHRoZSBkZWZhdWx0cy4KKy8vIFNlZSBpYTY0L2F0b21pY193b3JkLmggZm9yIGFuIGFsdGVybmF0aXZlIGFwcHJvYWNoLgorCisvLyBUaGlzIG9uZSBwcmV2ZW50cyBsb2FkcyBmcm9tIGJlaW5nIGhvaXN0ZWQgYWNyb3NzIHRoZSBiYXJyaWVyOworLy8gaW4gb3RoZXIgd29yZHMsIHRoaXMgaXMgYSBMb2FkLUxvYWQgYWNxdWlyZSBiYXJyaWVyLgorLy8gVGhpcyBpcyBuZWNlc3NhcnkgaWZmIFRBUkdFVF9SRUxBWEVEX09SREVSSU5HIGlzIGRlZmluZWQgaW4gdG0uaC4gIAorLy8gI2RlZmluZSBfR0xJQkNYWF9SRUFEX01FTV9CQVJSSUVSIF9fYXNtIF9fdm9sYXRpbGUgKCIiOjo6Im1lbW9yeSIpCisKKy8vIFRoaXMgb25lIHByZXZlbnRzIHN0b3JlcyBmcm9tIGJlaW5nIHN1bmsgYWNyb3NzIHRoZSBiYXJyaWVyOyBpbiBvdGhlcgorLy8gd29yZHMsIGEgU3RvcmUtU3RvcmUgcmVsZWFzZSBiYXJyaWVyLgorLy8gI2RlZmluZSBfR0xJQkNYWF9XUklURV9NRU1fQkFSUklFUiBfX2FzbSBfX3ZvbGF0aWxlICgiIjo6OiJtZW1vcnkiKQorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9iYXNpY19maWxlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9iYXNpY19maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlOGM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL2Jhc2ljX2ZpbGUuaApAQCAtMCwwICsxLDExMCBAQAorLy8gV3JhcHBlciBvZiBDLWxhbmd1YWdlIEZJTEUgc3RydWN0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy44ICBGaWxlLWJhc2VkIHN0cmVhbXMKKy8vCisKKy8qKiBAZmlsZSBiaXRzL2Jhc2ljX2ZpbGUuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2lvc30KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0JBU0lDX0ZJTEVfU1RESU9fSAorI2RlZmluZSBfR0xJQkNYWF9CQVNJQ19GSUxFX1NURElPX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvYysraW8uaD4gIC8vIGZvciBfX2NfbG9jayBhbmQgX19jX2ZpbGUKKyNpbmNsdWRlIDxpb3M+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBHZW5lcmljIGRlY2xhcmF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgX19iYXNpY19maWxlOyAKKworICAvLyBTcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIF9fYmFzaWNfZmlsZTxjaGFyPgorICAgIHsKKyAgICAgIC8vIFVuZGVybHlpbmcgZGF0YSBzb3VyY2Uvc2luay4KKyAgICAgIF9fY19maWxlKiAJX01fY2ZpbGU7CisKKyAgICAgIC8vIFRydWUgaWZmIHdlIG9wZW5lZCBfTV9jZmlsZSwgYW5kIHRodXMgbXVzdCBjbG9zZSBpdCBvdXJzZWx2ZXMuCisgICAgICBib29sIAkJX01fY2ZpbGVfY3JlYXRlZDsKKworICAgIHB1YmxpYzoKKyAgICAgIF9fYmFzaWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCkgdGhyb3cgKCk7CisKKyAgICAgIF9fYmFzaWNfZmlsZSogCisgICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50IF9fcHJvdCA9IDA2NjQpOworCisgICAgICBfX2Jhc2ljX2ZpbGUqCisgICAgICBzeXNfb3BlbihfX2NfZmlsZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUpOworCisgICAgICBfX2Jhc2ljX2ZpbGUqCisgICAgICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkgdGhyb3cgKCk7CisKKyAgICAgIF9fYmFzaWNfZmlsZSogCisgICAgICBjbG9zZSgpOyAKKworICAgICAgX0dMSUJDWFhfUFVSRSBib29sIAorICAgICAgaXNfb3BlbigpIGNvbnN0IHRocm93ICgpOworCisgICAgICBfR0xJQkNYWF9QVVJFIGludCAKKyAgICAgIGZkKCkgdGhyb3cgKCk7CisKKyAgICAgIF9HTElCQ1hYX1BVUkUgX19jX2ZpbGUqCisgICAgICBmaWxlKCkgdGhyb3cgKCk7CisKKyAgICAgIH5fX2Jhc2ljX2ZpbGUoKTsKKworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIHhzcHV0bihjb25zdCBjaGFyKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKKworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIHhzcHV0bl8yKGNvbnN0IGNoYXIqIF9fczEsIHN0cmVhbXNpemUgX19uMSwKKwkgICAgICAgY29uc3QgY2hhciogX19zMiwgc3RyZWFtc2l6ZSBfX24yKTsKKworICAgICAgc3RyZWFtc2l6ZSAKKyAgICAgIHhzZ2V0bihjaGFyKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKKworICAgICAgc3RyZWFtb2ZmCisgICAgICBzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXkpIHRocm93ICgpOworCisgICAgICBpbnQgCisgICAgICBzeW5jKCk7CisKKyAgICAgIHN0cmVhbXNpemUKKyAgICAgIHNob3dtYW55YygpOworICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvYysrYWxsb2NhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jKythbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDcwYmNjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvYysrYWxsb2NhdG9yLmgKQEAgLTAsMCArMSw1NSBAQAorLy8gQmFzZSB0byBzdGQ6OmFsbG9jYXRvciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9jKythbGxvY2F0b3IuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le21lbW9yeX0KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0NYWF9BTExPQ0FUT1JfSAorI2RlZmluZSBfR0xJQkNYWF9DWFhfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8ZXh0L25ld19hbGxvY2F0b3IuaD4KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKK25hbWVzcGFjZSBzdGQKK3sKKyAgLyoqCisgICAqICBAYnJpZWYgIEFuIGFsaWFzIHRvIHRoZSBiYXNlIGNsYXNzIGZvciBzdGQ6OmFsbG9jYXRvci4KKyAgICogIEBpbmdyb3VwIGFsbG9jYXRvcnMKKyAgICoKKyAgICogIFVzZWQgdG8gc2V0IHRoZSBzdGQ6OmFsbG9jYXRvciBiYXNlIGNsYXNzIHRvCisgICAqICBfX2dudV9jeHg6Om5ld19hbGxvY2F0b3IuCisgICAqCisgICAqICBAdHBhcmFtICBfVHAgIFR5cGUgb2YgYWxsb2NhdGVkIG9iamVjdC4KKyAgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdXNpbmcgX19hbGxvY2F0b3JfYmFzZSA9IF9fZ251X2N4eDo6bmV3X2FsbG9jYXRvcjxfVHA+OworfQorI2Vsc2UKKy8vIERlZmluZSBuZXdfYWxsb2NhdG9yIGFzIHRoZSBiYXNlIGNsYXNzIHRvIHN0ZDo6YWxsb2NhdG9yLgorIyBkZWZpbmUgX19hbGxvY2F0b3JfYmFzZSAgX19nbnVfY3h4OjpuZXdfYWxsb2NhdG9yCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jKytjb25maWcuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL2MrK2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZGEyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jKytjb25maWcuaApAQCAtMCwwICsxLDE2NjYgQEAKKy8vIFByZWRlZmluZWQgc3ltYm9scyBhbmQgbWFjcm9zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2MrK2NvbmZpZy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7aW9zZndkfQorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQ1hYX0NPTkZJR19ICisjZGVmaW5lIF9HTElCQ1hYX0NYWF9DT05GSUdfSCAxCisKKy8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIEMrKyBsaWJyYXJ5IGluIGNvbXByZXNzZWQgSVNPIGRhdGUgZm9ybWF0LgorI2RlZmluZSBfX0dMSUJDWFhfXyAyMDEzMTExMQorCisvLyBNYWNyb3MgZm9yIHZhcmlvdXMgYXR0cmlidXRlcy4KKy8vICAgX0dMSUJDWFhfUFVSRQorLy8gICBfR0xJQkNYWF9DT05TVAorLy8gICBfR0xJQkNYWF9OT1JFVFVSTgorLy8gICBfR0xJQkNYWF9OT1RIUk9XCisvLyAgIF9HTElCQ1hYX1ZJU0lCSUxJVFkKKyNpZm5kZWYgX0dMSUJDWFhfUFVSRQorIyBkZWZpbmUgX0dMSUJDWFhfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfQ09OU1QKKyMgZGVmaW5lIF9HTElCQ1hYX0NPTlNUIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKQorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfTk9SRVRVUk4KKyMgZGVmaW5lIF9HTElCQ1hYX05PUkVUVVJOIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorI2VuZGlmCisKKy8vIFNlZSBiZWxvdyBmb3IgQysrCisjaWZuZGVmIF9HTElCQ1hYX05PVEhST1cKKyMgaWZuZGVmIF9fY3BsdXNwbHVzCisjICBkZWZpbmUgX0dMSUJDWFhfTk9USFJPVyBfX2F0dHJpYnV0ZV9fKChfX25vdGhyb3dfXykpCisjIGVuZGlmCisjZW5kaWYKKworLy8gTWFjcm9zIGZvciB2aXNpYmlsaXR5IGF0dHJpYnV0ZXMuCisvLyAgIF9HTElCQ1hYX0hBVkVfQVRUUklCVVRFX1ZJU0lCSUxJVFkKKy8vICAgX0dMSUJDWFhfVklTSUJJTElUWQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9BVFRSSUJVVEVfVklTSUJJTElUWSAxCisKKyNpZiBfR0xJQkNYWF9IQVZFX0FUVFJJQlVURV9WSVNJQklMSVRZCisjIGRlZmluZSBfR0xJQkNYWF9WSVNJQklMSVRZKFYpIF9fYXR0cmlidXRlX18gKChfX3Zpc2liaWxpdHlfXyAoI1YpKSkKKyNlbHNlCisvLyBJZiB0aGlzIGlzIG5vdCBzdXBwbGllZCBieSB0aGUgT1Mtc3BlY2lmaWMgb3IgQ1BVLXNwZWNpZmljCisvLyBoZWFkZXJzIGluY2x1ZGVkIGJlbG93LCBpdCB3aWxsIGJlIGRlZmluZWQgdG8gYW4gZW1wdHkgZGVmYXVsdC4KKyMgZGVmaW5lIF9HTElCQ1hYX1ZJU0lCSUxJVFkoVikgX0dMSUJDWFhfUFNFVURPX1ZJU0lCSUxJVFkoVikKKyNlbmRpZgorCisvLyBNYWNyb3MgZm9yIGRlcHJlY2F0ZWQgYXR0cmlidXRlcy4KKy8vICAgX0dMSUJDWFhfVVNFX0RFUFJFQ0FURUQKKy8vICAgX0dMSUJDWFhfREVQUkVDQVRFRAorI2lmbmRlZiBfR0xJQkNYWF9VU0VfREVQUkVDQVRFRAorIyBkZWZpbmUgX0dMSUJDWFhfVVNFX0RFUFJFQ0FURUQgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fREVQUkVDQVRFRCkgJiYgKF9fY3BsdXNwbHVzID49IDIwMTEwM0wpCisjIGRlZmluZSBfR0xJQkNYWF9ERVBSRUNBVEVEIF9fYXR0cmlidXRlX18gKChfX2RlcHJlY2F0ZWRfXykpCisjZWxzZQorIyBkZWZpbmUgX0dMSUJDWFhfREVQUkVDQVRFRAorI2VuZGlmCisKKy8vIE1hY3JvcyBmb3IgQUJJIHRhZyBhdHRyaWJ1dGVzLgorI2lmbmRlZiBfR0xJQkNYWF9BQklfVEFHX0NYWDExCisjIGRlZmluZSBfR0xJQkNYWF9BQklfVEFHX0NYWDExIF9fYXR0cmlidXRlICgoX19hYmlfdGFnX18gKCJjeHgxMSIpKSkKKyNlbmRpZgorCisKKyNpZiBfX2NwbHVzcGx1cworCisvLyBNYWNybyBmb3IgY29uc3RleHByLCB0byBzdXBwb3J0IGluIG1peGVkIDAzLzB4IG1vZGUuCisjaWZuZGVmIF9HTElCQ1hYX0NPTlNURVhQUgorIyBpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjICBkZWZpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGNvbnN0ZXhwcgorIyAgZGVmaW5lIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgY29uc3RleHByCisjIGVsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9DT05TVEVYUFIKKyMgIGRlZmluZSBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGNvbnN0CisjIGVuZGlmCisjZW5kaWYKKworLy8gTWFjcm8gZm9yIG5vZXhjZXB0LCB0byBzdXBwb3J0IGluIG1peGVkIDAzLzB4IG1vZGUuCisjaWZuZGVmIF9HTElCQ1hYX05PRVhDRVBUCisjIGlmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgIGRlZmluZSBfR0xJQkNYWF9OT0VYQ0VQVCBub2V4Y2VwdAorIyAgZGVmaW5lIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCBub2V4Y2VwdAorIyAgZGVmaW5lIF9HTElCQ1hYX1RIUk9XKF9FWEMpCisjIGVsc2UKKyMgIGRlZmluZSBfR0xJQkNYWF9OT0VYQ0VQVAorIyAgZGVmaW5lIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB0aHJvdygpCisjICBkZWZpbmUgX0dMSUJDWFhfVEhST1coX0VYQykgdGhyb3coX0VYQykKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX05PVEhST1cKKyMgZGVmaW5lIF9HTElCQ1hYX05PVEhST1cgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9USFJPV19PUl9BQk9SVAorIyBpZiBfX0VYQ0VQVElPTlMKKyMgIGRlZmluZSBfR0xJQkNYWF9USFJPV19PUl9BQk9SVChfRVhDKSAodGhyb3cgKF9FWEMpKQorIyBlbHNlCisjICBkZWZpbmUgX0dMSUJDWFhfVEhST1dfT1JfQUJPUlQoX0VYQykgKF9fYnVpbHRpbl9hYm9ydCgpKQorIyBlbmRpZgorI2VuZGlmCisKKy8vIE1hY3JvIGZvciBleHRlcm4gdGVtcGxhdGUsIGllIGNvbnRyb2xpbmcgdGVtcGxhdGUgbGlua2FnZSB2aWEgdXNlCisvLyBvZiBleHRlcm4ga2V5d29yZCBvbiB0ZW1wbGF0ZSBkZWNsYXJhdGlvbi4gQXMgZG9jdW1lbnRlZCBpbiB0aGUgZysrCisvLyBtYW51YWwsIGl0IGluaGliaXRzIGFsbCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBhbmQgaXMgdXNlZAorLy8gdGhyb3VnaG91dCB0aGUgbGlicmFyeSB0byBhdm9pZCBtdWx0aXBsZSB3ZWFrIGRlZmluaXRpb25zIGZvcgorLy8gcmVxdWlyZWQgdHlwZXMgdGhhdCBhcmUgYWxyZWFkeSBleHBsaWNpdGx5IGluc3RhbnRpYXRlZCBpbiB0aGUKKy8vIGxpYnJhcnkgYmluYXJ5LiBUaGlzIHN1YnN0YW50aWFsbHkgcmVkdWNlcyB0aGUgYmluYXJ5IHNpemUgb2YKKy8vIHJlc3VsdGluZyBleGVjdXRhYmxlcy4KKy8vIFNwZWNpYWwgY2FzZTogX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFID09IC0xIGRpc2FsbG93cyBleHRlcm4KKy8vIHRlbXBsYXRlcyBvbmx5IGluIGJhc2ljX3N0cmluZywgdGh1cyBhY3RpdmF0aW5nIGl0cyBkZWJ1Zy1tb2RlCisvLyBjaGVja3MgZXZlbiBhdCAtTzAuCisjIGRlZmluZSBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUgMQorCisvKgorICBPdXRsaW5lIG9mIGxpYnN0ZGMrKyBuYW1lc3BhY2VzLgorCisgIG5hbWVzcGFjZSBzdGQKKyAgeworICAgIG5hbWVzcGFjZSBfX2RlYnVnIHsgfQorICAgIG5hbWVzcGFjZSBfX3BhcmFsbGVsIHsgfQorICAgIG5hbWVzcGFjZSBfX3Byb2ZpbGUgeyB9CisgICAgbmFtZXNwYWNlIF9fY3h4MTk5OCB7IH0KKworICAgIG5hbWVzcGFjZSBfX2RldGFpbCB7IH0KKworICAgIG5hbWVzcGFjZSByZWxfb3BzIHsgfQorCisgICAgbmFtZXNwYWNlIHRyMQorICAgIHsKKyAgICAgIG5hbWVzcGFjZSBwbGFjZWhvbGRlcnMgeyB9CisgICAgICBuYW1lc3BhY2UgcmVnZXhfY29uc3RhbnRzIHsgfQorICAgICAgbmFtZXNwYWNlIF9fZGV0YWlsIHsgfQorICAgIH0KKworICAgIG5hbWVzcGFjZSB0cjIgeyB9CisgICAgCisgICAgbmFtZXNwYWNlIGRlY2ltYWwgeyB9CisKKyAgICBuYW1lc3BhY2UgY2hyb25vIHsgfQorICAgIG5hbWVzcGFjZSBwbGFjZWhvbGRlcnMgeyB9CisgICAgbmFtZXNwYWNlIHJlZ2V4X2NvbnN0YW50cyB7IH0KKyAgICBuYW1lc3BhY2UgdGhpc190aHJlYWQgeyB9CisgIH0KKworICBuYW1lc3BhY2UgYWJpIHsgfQorCisgIG5hbWVzcGFjZSBfX2dudV9jeHgKKyAgeworICAgIG5hbWVzcGFjZSBfX2RldGFpbCB7IH0KKyAgfQorCisgIEZvciBmdWxsIGRldGFpbHMgc2VlOgorICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbGF0ZXN0LWRveHlnZW4vbmFtZXNwYWNlcy5odG1sCisqLworbmFtZXNwYWNlIHN0ZAoreworICB0eXBlZGVmIF9fU0laRV9UWVBFX18gCXNpemVfdDsKKyAgdHlwZWRlZiBfX1BUUkRJRkZfVFlQRV9fCXB0cmRpZmZfdDsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdHlwZWRlZiBkZWNsdHlwZShudWxscHRyKQludWxscHRyX3Q7CisjZW5kaWYKK30KKworCisvLyBEZWZpbmVkIGlmIGlubGluZSBuYW1lc3BhY2VzIGFyZSB1c2VkIGZvciB2ZXJzaW9uaW5nLgorIyBkZWZpbmUgX0dMSUJDWFhfSU5MSU5FX1ZFUlNJT04gMCAKKworLy8gSW5saW5lIG5hbWVzcGFjZSBmb3Igc3ltYm9sIHZlcnNpb25pbmcuCisjaWYgX0dMSUJDWFhfSU5MSU5FX1ZFUlNJT04KKworbmFtZXNwYWNlIHN0ZAoreworICBpbmxpbmUgbmFtZXNwYWNlIF9fNyB7IH0KKworICBuYW1lc3BhY2UgcmVsX29wcyB7IGlubGluZSBuYW1lc3BhY2UgX183IHsgfSB9CisKKyAgbmFtZXNwYWNlIHRyMQorICB7CisgICAgaW5saW5lIG5hbWVzcGFjZSBfXzcgeyB9CisgICAgbmFtZXNwYWNlIHBsYWNlaG9sZGVycyB7IGlubGluZSBuYW1lc3BhY2UgX183IHsgfSB9CisgICAgbmFtZXNwYWNlIHJlZ2V4X2NvbnN0YW50cyB7IGlubGluZSBuYW1lc3BhY2UgX183IHsgfSB9CisgICAgbmFtZXNwYWNlIF9fZGV0YWlsIHsgaW5saW5lIG5hbWVzcGFjZSBfXzcgeyB9IH0KKyAgfQorCisgIG5hbWVzcGFjZSB0cjIKKyAgeyBpbmxpbmUgbmFtZXNwYWNlIF9fNyB7IH0gfQorCisgIG5hbWVzcGFjZSBkZWNpbWFsIHsgaW5saW5lIG5hbWVzcGFjZSBfXzcgeyB9IH0KKworICBuYW1lc3BhY2UgY2hyb25vIHsgaW5saW5lIG5hbWVzcGFjZSBfXzcgeyB9IH0KKyAgbmFtZXNwYWNlIHBsYWNlaG9sZGVycyB7IGlubGluZSBuYW1lc3BhY2UgX183IHsgfSB9CisgIG5hbWVzcGFjZSByZWdleF9jb25zdGFudHMgeyBpbmxpbmUgbmFtZXNwYWNlIF9fNyB7IH0gfQorICBuYW1lc3BhY2UgdGhpc190aHJlYWQgeyBpbmxpbmUgbmFtZXNwYWNlIF9fNyB7IH0gfQorCisgIG5hbWVzcGFjZSBfX2RldGFpbCB7IGlubGluZSBuYW1lc3BhY2UgX183IHsgfSB9Cit9CisKK25hbWVzcGFjZSBfX2dudV9jeHgKK3sKKyAgaW5saW5lIG5hbWVzcGFjZSBfXzcgeyB9CisgIG5hbWVzcGFjZSBfX2RldGFpbCB7IGlubGluZSBuYW1lc3BhY2UgX183IHsgfSB9Cit9CisjIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTiBuYW1lc3BhY2UgX183IHsKKyMgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTiB9CisjZWxzZQorIyBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyMgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorI2VuZGlmCisKKworLy8gSW5saW5lIG5hbWVzcGFjZXMgZm9yIHNwZWNpYWwgbW9kZXM6IGRlYnVnLCBwYXJhbGxlbCwgcHJvZmlsZS4KKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0RFQlVHKSB8fCBkZWZpbmVkKF9HTElCQ1hYX1BBUkFMTEVMKSBcCisgICAgfHwgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFKQorbmFtZXNwYWNlIHN0ZAoreworICAvLyBOb24taW5saW5lIG5hbWVzcGFjZSBmb3IgY29tcG9uZW50cyByZXBsYWNlZCBieSBhbHRlcm5hdGVzIGluIGFjdGl2ZSBtb2RlLgorICBuYW1lc3BhY2UgX19jeHgxOTk4CisgIHsKKyNpZiBfR0xJQkNYWF9JTkxJTkVfVkVSU0lPTgorIGlubGluZSBuYW1lc3BhY2UgX183IHsgfQorI2VuZGlmCisgIH0KKworICAvLyBJbmxpbmUgbmFtZXNwYWNlIGZvciBkZWJ1ZyBtb2RlLgorIyBpZmRlZiBfR0xJQkNYWF9ERUJVRworICBpbmxpbmUgbmFtZXNwYWNlIF9fZGVidWcgeyB9CisjIGVuZGlmCisKKyAgLy8gSW5saW5lIG5hbWVzcGFjZXMgZm9yIHBhcmFsbGVsIG1vZGUuCisjIGlmZGVmIF9HTElCQ1hYX1BBUkFMTEVMCisgIGlubGluZSBuYW1lc3BhY2UgX19wYXJhbGxlbCB7IH0KKyMgZW5kaWYKKworICAvLyBJbmxpbmUgbmFtZXNwYWNlcyBmb3IgcHJvZmlsZSBtb2RlCisjIGlmZGVmIF9HTElCQ1hYX1BST0ZJTEUKKyAgaW5saW5lIG5hbWVzcGFjZSBfX3Byb2ZpbGUgeyB9CisjIGVuZGlmCit9CisKKy8vIENoZWNrIGZvciBpbnZhbGlkIHVzYWdlIGFuZCB1bnN1cHBvcnRlZCBtaXhlZC1tb2RlIHVzZS4KKyMgaWYgZGVmaW5lZChfR0xJQkNYWF9ERUJVRykgJiYgZGVmaW5lZChfR0xJQkNYWF9QQVJBTExFTCkKKyMgIGVycm9yIGlsbGVnYWwgdXNlIG9mIG11bHRpcGxlIGlubGluZWQgbmFtZXNwYWNlcworIyBlbmRpZgorIyBpZiBkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEUpICYmIGRlZmluZWQoX0dMSUJDWFhfREVCVUcpCisjICBlcnJvciBpbGxlZ2FsIHVzZSBvZiBtdWx0aXBsZSBpbmxpbmVkIG5hbWVzcGFjZXMKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFKSAmJiBkZWZpbmVkKF9HTElCQ1hYX1BBUkFMTEVMKQorIyAgZXJyb3IgaWxsZWdhbCB1c2Ugb2YgbXVsdGlwbGUgaW5saW5lZCBuYW1lc3BhY2VzCisjIGVuZGlmCisKKy8vIENoZWNrIGZvciBpbnZhbGlkIHVzZSBkdWUgdG8gbGFjayBmb3Igd2VhayBzeW1ib2xzLgorIyBpZiBfX05PX0lOTElORV9fICYmICFfX0dYWF9XRUFLX18KKyMgIHdhcm5pbmcgY3VycmVudGx5IHVzaW5nIGlubGluZWQgbmFtZXNwYWNlIG1vZGUgd2hpY2ggbWF5IGZhaWwgXAorICAgd2l0aG91dCBpbmxpbmluZyBkdWUgdG8gbGFjayBvZiB3ZWFrIHN5bWJvbHMKKyMgZW5kaWYKKyNlbmRpZgorCisvLyBNYWNyb3MgZm9yIG5hbWVzcGFjZSBzY29wZS4gRWl0aGVyIG5hbWVzcGFjZSBzdGQ6OiBvciB0aGUgbmFtZQorLy8gb2Ygc29tZSBuZXN0ZWQgbmFtZXNwYWNlIHdpdGhpbiBpdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhY3RpdmUgbW9kZS4KKy8vIF9HTElCQ1hYX1NURF9BCisvLyBfR0xJQkNYWF9TVERfQworLy8KKy8vIE1hY3JvcyBmb3Igb3BlbmluZy9jbG9zaW5nIGNvbmRpdGlvbmFsIG5hbWVzcGFjZXMuCisvLyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTworLy8gX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCisvLyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisvLyBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorI2lmIGRlZmluZWQoX0dMSUJDWFhfREVCVUcpIHx8IGRlZmluZWQoX0dMSUJDWFhfUFJPRklMRSkKKyMgZGVmaW5lIF9HTElCQ1hYX1NURF9DIF9fY3h4MTk5OAorIyBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUiBcCisJIG5hbWVzcGFjZSBfR0xJQkNYWF9TVERfQyB7IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisjIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUiBcCisJIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTiB9CisjIHVuZGVmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorIyBkZWZpbmUgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFIC0xCisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1BBUkFMTEVMCisjIGRlZmluZSBfR0xJQkNYWF9TVERfQSBfX2N4eDE5OTgKKyMgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPIFwKKwkgbmFtZXNwYWNlIF9HTElCQ1hYX1NURF9BIHsgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyMgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQUxHTyBcCisJIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTiB9CisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9TVERfQQorIyBkZWZpbmUgX0dMSUJDWFhfU1REX0Egc3RkCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9TVERfQworIyBkZWZpbmUgX0dMSUJDWFhfU1REX0Mgc3RkCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTworIyBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQUxHTworIyBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisjIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorIyBkZWZpbmUgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKKyNlbmRpZgorCisvLyBHTElCQ1hYX0FCSSBEZXByZWNhdGVkCisvLyBEZWZpbmUgaWYgY29tcGF0aWJpbGl0eSBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIC1tbG9uZy1kb3VibGUtNjQuCisjdW5kZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisKKy8vIElubGluZSBuYW1lc3BhY2UgZm9yIGxvbmcgZG91YmxlIDEyOCBtb2RlLgorI2lmIGRlZmluZWQgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUICYmIGRlZmluZWQgX19MT05HX0RPVUJMRV8xMjhfXworbmFtZXNwYWNlIHN0ZAoreworICBpbmxpbmUgbmFtZXNwYWNlIF9fZ251X2N4eF9sZGJsMTI4IHsgfQorfQorIyBkZWZpbmUgX0dMSUJDWFhfTkFNRVNQQUNFX0xEQkwgX19nbnVfY3h4X2xkYmwxMjg6OgorIyBkZWZpbmUgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0xEQkwgbmFtZXNwYWNlIF9fZ251X2N4eF9sZGJsMTI4IHsKKyMgZGVmaW5lIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfTERCTCB9CisjZWxzZQorIyBkZWZpbmUgX0dMSUJDWFhfTkFNRVNQQUNFX0xEQkwKKyMgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9MREJMCisjIGRlZmluZSBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0xEQkwKKyNlbmRpZgorCisvLyBBc3NlcnQuCisjaWYgIWRlZmluZWQoX0dMSUJDWFhfREVCVUcpICYmICFkZWZpbmVkKF9HTElCQ1hYX1BBUkFMTEVMKQorIyBkZWZpbmUgX19nbGliY3h4X2Fzc2VydChfQ29uZGl0aW9uKQorI2Vsc2UKK25hbWVzcGFjZSBzdGQKK3sKKyAgLy8gQXZvaWQgdGhlIHVzZSBvZiBhc3NlcnQsIGJlY2F1c2Ugd2UncmUgdHJ5aW5nIHRvIGtlZXAgdGhlIDxjYXNzZXJ0PgorICAvLyBpbmNsdWRlIG91dCBvZiB0aGUgbWl4LgorICBpbmxpbmUgdm9pZAorICBfX3JlcGxhY2VtZW50X2Fzc2VydChjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUsCisJCSAgICAgICBjb25zdCBjaGFyKiBfX2Z1bmN0aW9uLCBjb25zdCBjaGFyKiBfX2NvbmRpdGlvbikKKyAgeworICAgIF9fYnVpbHRpbl9wcmludGYoIiVzOiVkOiAlczogQXNzZXJ0aW9uICclcycgZmFpbGVkLlxuIiwgX19maWxlLCBfX2xpbmUsCisJCSAgICAgX19mdW5jdGlvbiwgX19jb25kaXRpb24pOworICAgIF9fYnVpbHRpbl9hYm9ydCgpOworICB9Cit9CisjZGVmaW5lIF9fZ2xpYmN4eF9hc3NlcnQoX0NvbmRpdGlvbikJCQkJICAgCSBcCisgIGRvIAkJCQkJCQkJCSBcCisgIHsJCQkJCQkJICAgICAgCQkgXAorICAgIGlmICghIChfQ29uZGl0aW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0ZDo6X19yZXBsYWNlbWVudF9hc3NlcnQoX19GSUxFX18sIF9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBcCisJCQkJI19Db25kaXRpb24pOwkJCQkgXAorICB9IHdoaWxlIChmYWxzZSkKKyNlbmRpZgorCisvLyBNYWNyb3MgZm9yIHJhY2UgZGV0ZWN0b3JzLgorLy8gX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQkVGT1JFKEEpIGFuZAorLy8gX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQUZURVIoQSkgc2hvdWxkIGJlIHVzZWQgdG8gZXhwbGFpbgorLy8gYXRvbWljIChsb2NrLWZyZWUpIHN5bmNocm9uaXphdGlvbiB0byByYWNlIGRldGVjdG9yczoKKy8vIHRoZSByYWNlIGRldGVjdG9yIHdpbGwgaW5mZXIgYSBoYXBwZW5zLWJlZm9yZSBhcmMgZnJvbSB0aGUgZm9ybWVyIHRvIHRoZQorLy8gbGF0dGVyIHdoZW4gdGhleSBzaGFyZSB0aGUgc2FtZSBhcmd1bWVudCBwb2ludGVyLgorLy8KKy8vIFRoZSBtb3N0IGZyZXF1ZW50IHVzZSBjYXNlIGZvciB0aGVzZSBtYWNyb3MgKGFuZCB0aGUgb25seSBjYXNlIGluIHRoZQorLy8gY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSkgaXMgYXRvbWljIHJlZmVyZW5jZSBjb3VudGluZzoKKy8vICAgdm9pZCBfTV9yZW1vdmVfcmVmZXJlbmNlKCkKKy8vICAgeworLy8gICAgIF9HTElCQ1hYX1NZTkNIUk9OSVpBVElPTl9IQVBQRU5TX0JFRk9SRSgmdGhpcy0+X01fcmVmY291bnQpOworLy8gICAgIGlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmdGhpcy0+X01fcmVmY291bnQsIC0xKSA8PSAwKQorLy8gICAgICAgeworLy8gICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19BRlRFUigmdGhpcy0+X01fcmVmY291bnQpOworLy8gICAgICAgICBfTV9kZXN0cm95KF9fYSk7CisvLyAgICAgICB9CisvLyAgIH0KKy8vIFRoZSBhbm5vdGF0aW9ucyBpbiB0aGlzIGV4YW1wbGUgdGVsbCB0aGUgcmFjZSBkZXRlY3RvciB0aGF0IGFsbCBtZW1vcnkKKy8vIGFjY2Vzc2VzIG9jY3VycmVkIHdoZW4gdGhlIHJlZmNvdW50IHdhcyBwb3NpdGl2ZSBkbyBub3QgcmFjZSB3aXRoCisvLyBtZW1vcnkgYWNjZXNzZXMgd2hpY2ggb2NjdXJyZWQgYWZ0ZXIgdGhlIHJlZmNvdW50IGJlY2FtZSB6ZXJvLgorI2lmbmRlZiBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19CRUZPUkUKKyMgZGVmaW5lICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19CRUZPUkUoQSkKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19BRlRFUgorIyBkZWZpbmUgIF9HTElCQ1hYX1NZTkNIUk9OSVpBVElPTl9IQVBQRU5TX0FGVEVSKEEpCisjZW5kaWYKKworLy8gTWFjcm9zIGZvciBDIGxpbmthZ2U6IGRlZmluZSBleHRlcm4gIkMiIGxpbmthZ2Ugb25seSB3aGVuIHVzaW5nIEMrKy4KKyMgZGVmaW5lIF9HTElCQ1hYX0JFR0lOX0VYVEVSTl9DIGV4dGVybiAiQyIgeworIyBkZWZpbmUgX0dMSUJDWFhfRU5EX0VYVEVSTl9DIH0KKworI2Vsc2UgLy8gIV9fY3BsdXNwbHVzCisjIGRlZmluZSBfR0xJQkNYWF9CRUdJTl9FWFRFUk5fQworIyBkZWZpbmUgX0dMSUJDWFhfRU5EX0VYVEVSTl9DCisjZW5kaWYKKworCisvLyBGaXJzdCBpbmNsdWRlcy4KKworLy8gUGljayB1cCBhbnkgT1Mtc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisjaW5jbHVkZSA8Yml0cy9vc19kZWZpbmVzLmg+CisKKy8vIFBpY2sgdXAgYW55IENQVS1zcGVjaWZpYyBkZWZpbml0aW9ucy4KKyNpbmNsdWRlIDxiaXRzL2NwdV9kZWZpbmVzLmg+CisKKy8vIElmIHBsYXRmb3JtIHVzZXMgbmVpdGhlciB2aXNpYmlsaXR5IG5vciBwc3VlZG8tdmlzaWJpbGl0eSwKKy8vIHNwZWNpZnkgZW1wdHkgZGVmYXVsdCBmb3IgbmFtZXNwYWNlIGFubm90YXRpb24gbWFjcm9zLgorI2lmbmRlZiBfR0xJQkNYWF9QU0VVRE9fVklTSUJJTElUWQorIyBkZWZpbmUgX0dMSUJDWFhfUFNFVURPX1ZJU0lCSUxJVFkoVikKKyNlbmRpZgorCisvLyBDZXJ0YWluIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRoYXQgYXJlIG1lYW50IHRvIGJlIG92ZXJyaWRhYmxlIGZyb20KKy8vIHVzZXIgY29kZSBhcmUgZGVjb3JhdGVkIHdpdGggdGhpcyBtYWNyby4gIEZvciBzb21lIHRhcmdldHMsIHRoaXMKKy8vIG1hY3JvIGNhdXNlcyB0aGVzZSBkZWZpbml0aW9ucyB0byBiZSB3ZWFrLgorI2lmbmRlZiBfR0xJQkNYWF9XRUFLX0RFRklOSVRJT04KKyMgZGVmaW5lIF9HTElCQ1hYX1dFQUtfREVGSU5JVElPTgorI2VuZGlmCisKKworLy8gVGhlIHJlbWFpbmRlciBvZiB0aGUgcHJld3JpdHRlbiBjb25maWcgaXMgYXV0b21hdGljOyBhbGwgdGhlCisvLyB1c2VyIGhvb2tzIGFyZSBsaXN0ZWQgYWJvdmUuCisKKy8vIENyZWF0ZSBhIGJvb2xlYW4gZmxhZyB0byBiZSB1c2VkIHRvIGRldGVybWluZSBpZiAtLWZhc3QtbWF0aCBpcyBzZXQuCisjaWZkZWYgX19GQVNUX01BVEhfXworIyBkZWZpbmUgX0dMSUJDWFhfRkFTVF9NQVRIIDEKKyNlbHNlCisjIGRlZmluZSBfR0xJQkNYWF9GQVNUX01BVEggMAorI2VuZGlmCisKKy8vIFRoaXMgbWFya3Mgc3RyaW5nIGxpdGVyYWxzIGluIGhlYWRlciBmaWxlcyB0byBiZSBleHRyYWN0ZWQgZm9yIGV2ZW50dWFsCisvLyB0cmFuc2xhdGlvbi4gIEl0IGlzIHByaW1hcmlseSB1c2VkIGZvciBtZXNzYWdlcyBpbiB0aHJvd24gZXhjZXB0aW9uczsgc2VlCisvLyBzcmMvZnVuY3RleGNlcHQuY2MuICBXZSB1c2UgX19OIGJlY2F1c2UgdGhlIG1vcmUgdHJhZGl0aW9uYWwgX04gaXMgdXNlZAorLy8gZm9yIHNvbWV0aGluZyBlbHNlIHVuZGVyIGNlcnRhaW4gT1NlcyAoc2VlIEJBRE5BTUVTKS4KKyNkZWZpbmUgX19OKG1zZ2lkKSAgICAgKG1zZ2lkKQorCisvLyBGb3IgZXhhbXBsZSwgPHdpbmRvd3MuaD4gaXMga25vd24gdG8gI2RlZmluZSBtaW4gYW5kIG1heCBhcyBtYWNyb3MuLi4KKyN1bmRlZiBtaW4KKyN1bmRlZiBtYXgKKworLy8gRW5kIG9mIHByZXdyaXR0ZW4gY29uZmlnOyB0aGUgc2V0dGluZ3MgZGlzY292ZXJlZCBhdCBjb25maWd1cmUgdGltZSBmb2xsb3cuCisvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhY29zZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfQUNPU0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjb3NsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0FDT1NMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXNpbmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0FTSU5GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhc2lubCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9BU0lOTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdGFyZ2V0IGFzc2VtYmxlciBzdXBwb3J0cyAuc3ltdmVyIGRpcmVjdGl2ZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9BU19TWU1WRVJfRElSRUNUSVZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGFuMmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0FUQU4yRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXRhbjJsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0FUQU4yTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0YW5mJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9BVEFORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXRhbmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfQVRBTkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdF9xdWlja19leGl0JyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0FUX1FVSUNLX0VYSVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHRhcmdldCBhc3NlbWJsZXIgc3VwcG9ydHMgdGhyZWFkLWxvY2FsIHN0b3JhZ2UuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9DQ19UTFMgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjZWlsZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfQ0VJTEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNlaWxsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0NFSUxMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y29tcGxleC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9DT01QTEVYX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNvc2YnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0NPU0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNvc2hmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9DT1NIRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY29zaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfQ09TSEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb3NsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0NPU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0RMRkNOX0ggKi8KKworLyogRGVmaW5lIGlmIEVCQURNU0cgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VCQURNU0cgMQorCisvKiBEZWZpbmUgaWYgRUNBTkNFTEVEIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FQ0FOQ0VMRUQgMQorCisvKiBEZWZpbmUgaWYgRUNISUxEIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FQ0hJTEQgMQorCisvKiBEZWZpbmUgaWYgRUlEUk0gZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VJRFJNIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlbmRpYW4uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9FTkRJQU5fSCAqLworCisvKiBEZWZpbmUgaWYgRU5PREFUQSBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRU5PREFUQSAxCisKKy8qIERlZmluZSBpZiBFTk9MSU5LIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FTk9MSU5LIDEKKworLyogRGVmaW5lIGlmIEVOT1NQQyBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRU5PU1BDIDEKKworLyogRGVmaW5lIGlmIEVOT1NSIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FTk9TUiAxCisKKy8qIERlZmluZSBpZiBFTk9TVFIgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VOT1NUUiAxCisKKy8qIERlZmluZSBpZiBFTk9UUkVDT1ZFUkFCTEUgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VOT1RSRUNPVkVSQUJMRSAxCisKKy8qIERlZmluZSBpZiBFTk9UU1VQIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FTk9UU1VQIDEKKworLyogRGVmaW5lIGlmIEVPVkVSRkxPVyBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRU9WRVJGTE9XIDEKKworLyogRGVmaW5lIGlmIEVPV05FUkRFQUQgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VPV05FUkRFQUQgMQorCisvKiBEZWZpbmUgaWYgRVBFUk0gZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VQRVJNIDEKKworLyogRGVmaW5lIGlmIEVQUk9UTyBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRVBST1RPIDEKKworLyogRGVmaW5lIGlmIEVUSU1FIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FVElNRSAxCisKKy8qIERlZmluZSBpZiBFVElNRURPVVQgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0VUSU1FRE9VVCAxCisKKy8qIERlZmluZSBpZiBFVFhUQlNZIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FVFhUQlNZIDEKKworLyogRGVmaW5lIGlmIEVXT1VMREJMT0NLIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9FV09VTERCTE9DSyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXhlY2luZm8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9FWEVDSU5GT19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhwZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRVhQRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhwbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9FWFBMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmFic2YnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0ZBQlNGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmYWJzbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GQUJTTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZlbnYuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GRU5WX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmaW5pdGUnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfRklOSVRFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmluaXRlZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GSU5JVEVGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmluaXRlbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GSU5JVEVMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmxvYXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRkxPQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmxvb3JmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9GTE9PUkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZsb29ybCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GTE9PUkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmbW9kZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfRk1PREYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZtb2RsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0ZNT0RMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnBjbGFzcycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GUENMQVNTICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZnAuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GUF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnJleHBmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9GUkVYUEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZyZXhwbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9GUkVYUEwgKi8KKworLyogRGVmaW5lIGlmIF9VbndpbmRfR2V0SVBJbmZvIGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9HRVRJUElORk8gMQorCisvKiBEZWZpbmUgaWYgZ2V0cyBpcyBhdmFpbGFibGUgaW4gPHN0ZGlvLmg+LiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0dFVFMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9IWVBPVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaHlwb3RmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0hZUE9URiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9IWVBPVEwgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0lDT05WIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZWVlZnAuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfSUVFRUZQX0ggMQorCisvKiBEZWZpbmUgaWYgaW50NjRfdCBpcyBhdmFpbGFibGUgaW4gPHN0ZGludC5oPi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9JTlQ2NF9UIDEKKworLyogRGVmaW5lIGlmIGludDY0X3QgaXMgYSBsb25nLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX0lOVDY0X1RfTE9ORyAxCisKKy8qIERlZmluZSBpZiBpbnQ2NF90IGlzIGEgbG9uZyBsb25nLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfSU5UNjRfVF9MT05HX0xPTkcgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9JTlRUWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc2luZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9JU0lORiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlzaW5mZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9JU0lORkYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc2luZmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfSVNJTkZMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNuYW4nIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfSVNOQU4gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc25hbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfSVNOQU5GICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNuYW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0lTTkFOTCAqLworCisvKiBEZWZpbmVkIGlmIGlzd2JsYW5rIGV4aXN0cy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9JU1dCTEFOSyAxCisKKy8qIERlZmluZSBpZiBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MQ19NRVNTQUdFUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGRleHBmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MREVYUEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxkZXhwbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9MREVYUEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJpbnRsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTElCSU5UTF9IICovCisKKy8qIE9ubHkgdXNlZCBpbiBidWlsZCBkaXJlY3RvcnkgdGVzdHN1aXRlX2hvb2tzLmguICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9MSU1JVF9BUyAqLworCisvKiBPbmx5IHVzZWQgaW4gYnVpbGQgZGlyZWN0b3J5IHRlc3RzdWl0ZV9ob29rcy5oLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTElNSVRfREFUQSAqLworCisvKiBPbmx5IHVzZWQgaW4gYnVpbGQgZGlyZWN0b3J5IHRlc3RzdWl0ZV9ob29rcy5oLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTElNSVRfRlNJWkUgKi8KKworLyogT25seSB1c2VkIGluIGJ1aWxkIGRpcmVjdG9yeSB0ZXN0c3VpdGVfaG9va3MuaC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0xJTUlUX1JTUyAqLworCisvKiBPbmx5IHVzZWQgaW4gYnVpbGQgZGlyZWN0b3J5IHRlc3RzdWl0ZV9ob29rcy5oLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTElNSVRfVk1FTSAqLworCisvKiBEZWZpbmUgaWYgZnV0ZXggc3lzY2FsbCBpcyBhdmFpbGFibGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9MSU5VWF9GVVRFWCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxvY2FsZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MT0NBTEVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9nMTBmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MT0cxMEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvZzEwbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9MT0cxMEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2dmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9MT0dGIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2dsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX0xPR0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWNoaW5lL2VuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9NQUNISU5FX0VORElBTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtYWNoaW5lL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX01BQ0hJTkVfUEFSQU1fSCAxCisKKy8qIERlZmluZSBpZiBtYnN0YXRlX3QgZXhpc3RzIGluIHdjaGFyLmguICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfTUJTVEFURV9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9NRU1PUllfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1vZGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTU9ERiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1vZGZmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9NT0RGRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW9kZmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfTU9ERkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuYW4uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9OQU5fSCAqLworCisvKiBEZWZpbmUgaWYgcG9sbCBpcyBhdmFpbGFibGUgaW4gPHBvbGwuaD4uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9QT0xMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG93ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfUE9XRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG93bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9QT1dMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcWZwY2xhc3MnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfUUZQQ0xBU1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBxdWlja19leGl0JyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1FVSUNLX0VYSVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlbnYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU0VURU5WICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2luY29zJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NJTkNPUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpbmNvc2YnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU0lOQ09TRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpbmNvc2wnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU0lOQ09TTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpbmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NJTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpbmhmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5IRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2luaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU0lOSEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NJTkwgKi8KKworLyogRGVmaW5lZCBpZiBzbGVlcCBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU0xFRVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNxcnRmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TUVJURiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3FydGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU1FSVEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRhbGlnbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TVERBTElHTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRib29sLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NUREJPT0xfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgaWYgc3RyZXJyb3JfbCBpcyBhdmFpbGFibGUgaW4gPHN0cmluZy5oPi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NUUkVSUk9SX0wgKi8KKworLyogRGVmaW5lIGlmIHN0cmVycm9yX3IgaXMgYXZhaWxhYmxlIGluIDxzdHJpbmcuaD4uICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1RSRVJST1JfUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TVFJJTkdfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG9mJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TVFJUT0YgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvbGQnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU1RSVE9MRCAqLworCisvKiBEZWZpbmUgaWYgc3RyeGZybV9sIGlzIGF2YWlsYWJsZSBpbiA8c3RyaW5nLmg+LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU1RSWEZSTV9MICovCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSB0YXJnZXQgcnVudGltZSBsaW5rZXIgc3VwcG9ydHMgYmluZGluZyB0aGUgc2FtZSBzeW1ib2wKKyAgIHRvIGRpZmZlcmVudCB2ZXJzaW9ucy4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NZTVZFUl9TWU1CT0xfUkVOQU1JTkdfUlVOVElNRV9TVVBQT1JUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGlvLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU1lTX0ZJTElPX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9TWVNfSU9DVExfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pcGMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9TWVNfSVBDX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaXNhX2RlZnMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9TWVNfSVNBX0RFRlNfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tYWNoaW5lLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU1lTX01BQ0hJTkVfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TWVNfUEFSQU1fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NZU19SRVNPVVJDRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBzdWl0YWJsZSA8c3lzL3NkdC5oPiBoZWFkZXIgZmlsZSAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU1lTX1NEVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NZU19TRU1fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zeXNpbmZvLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU1lTX1NZU0lORk9fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NZU19USU1FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1NZU19VSU9fSCAqLworCisvKiBEZWZpbmUgaWYgU19JRlJFRyBpcyBhdmFpbGFibGUgaW4gPHN5cy9zdGF0Lmg+LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfU19JRlJFRyAqLworCisvKiBEZWZpbmUgaWYgU19JRlJFRyBpcyBhdmFpbGFibGUgaW4gPHN5cy9zdGF0Lmg+LiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1NfSVNSRUcgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRhbmYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1RBTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRhbmhmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFWRV9UQU5IRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGFuaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfVEFOSEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0YW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1RBTkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0Z21hdGguaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfVEdNQVRIX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIHRocmVhZC1sb2NhbCBzdG9yYWdlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfVExTICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1VOSVNURF9IIDEKKworLyogRGVmaW5lZCBpZiB1c2xlZXAgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1VTTEVFUCAxCisKKy8qIERlZmluZWQgaWYgdmZ3c2NhbmYgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1ZGV1NDQU5GIDEKKworLyogRGVmaW5lZCBpZiB2c3dzY2FuZiBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfVlNXU0NBTkYgMQorCisvKiBEZWZpbmVkIGlmIHZ3c2NhbmYgZXhpc3RzLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1ZXU0NBTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdjaGFyLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9IQVZFX1dDSEFSX0ggMQorCisvKiBEZWZpbmVkIGlmIHdjc3RvZiBleGlzdHMuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfV0NTVE9GIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3Y3R5cGUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX0hBVkVfV0NUWVBFX0ggMQorCisvKiBEZWZpbmVkIGlmIFNsZWVwIGV4aXN0cy4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX1dJTjMyX1NMRUVQICovCisKKy8qIERlZmluZSBpZiB3cml0ZXYgaXMgYXZhaWxhYmxlIGluIDxzeXMvdWlvLmg+LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfV1JJVEVWICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Fjb3NmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19BQ09TRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9hY29zbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQUNPU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfYXNpbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0FTSU5GICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2FzaW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19BU0lOTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9hdGFuMmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0FUQU4yRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9hdGFuMmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0FUQU4yTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9hdGFuZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQVRBTkYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfYXRhbmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0FUQU5MICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2NlaWxmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19DRUlMRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9jZWlsbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQ0VJTEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfY29zZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQ09TRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9jb3NoZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fQ09TSEYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfY29zaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0NPU0hMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Nvc2wnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0NPU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZXhwZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRVhQRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9leHBsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19FWFBMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2ZhYnNmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19GQUJTRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9mYWJzbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRkFCU0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZmluaXRlJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19GSU5JVEUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZmluaXRlZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRklOSVRFRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9maW5pdGVsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19GSU5JVEVMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Zsb29yZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRkxPT1JGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Zsb29ybCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRkxPT1JMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2Ztb2RmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19GTU9ERiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9mbW9kbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRk1PREwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZnBjbGFzcycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fRlBDTEFTUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9mcmV4cGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0ZSRVhQRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9mcmV4cGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0ZSRVhQTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9oeXBvdCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fSFlQT1QgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfaHlwb3RmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19IWVBPVEYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfaHlwb3RsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19IWVBPVEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfaXNpbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0lTSU5GICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2lzaW5mZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fSVNJTkZGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2lzaW5mbCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fSVNJTkZMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2lzbmFuJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19JU05BTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9pc25hbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0lTTkFORiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9pc25hbmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0lTTkFOTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sZGV4cGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xERVhQRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sZGV4cGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xERVhQTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sb2cxMGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xPRzEwRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sb2cxMGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xPRzEwTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9sb2dmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19MT0dGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2xvZ2wnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX0xPR0wgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfbW9kZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fTU9ERiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9tb2RmZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fTU9ERkYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfbW9kZmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX01PREZMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3Bvd2YnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1BPV0YgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfcG93bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fUE9XTCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9xZnBjbGFzcycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fUUZQQ0xBU1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfc2luY29zJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TSU5DT1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfc2luY29zZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fU0lOQ09TRiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zaW5jb3NsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TSU5DT1NMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3NpbmYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1NJTkYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfc2luaGYnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1NJTkhGICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3NpbmhsJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TSU5ITCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zaW5sJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TSU5MICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3NxcnRmJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9IQVZFX19TUVJURiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9zcXJ0bCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fU1FSVEwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfdGFuZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fVEFORiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF90YW5oZicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFWRV9fVEFOSEYgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfdGFuaGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1RBTkhMICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3RhbmwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX1RBTkwgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfX2N4YV90aHJlYWRfYXRleGl0X2ltcGwnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX0hBVkVfX19DWEFfVEhSRUFEX0FURVhJVF9JTVBMICovCisKKy8qIERlZmluZSBhcyBjb25zdCBpZiB0aGUgZGVjbGFyYXRpb24gb2YgaWNvbnYoKSBuZWVkcyBjb25zdC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9JQ09OVl9DT05TVCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorICAgKi8KKyNkZWZpbmUgTFRfT0JKRElSICIubGlicy8iCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworLyogI3VuZGVmIF9HTElCQ1hYX1BBQ0tBR0UgKi8KKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjZGVmaW5lIF9HTElCQ1hYX1BBQ0tBR0VfQlVHUkVQT1JUICIiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfUEFDS0FHRV9OQU1FICJwYWNrYWdlLXVudXNlZCIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBfR0xJQkNYWF9QQUNLQUdFX1NUUklORyAicGFja2FnZS11bnVzZWQgdmVyc2lvbi11bnVzZWQiCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfUEFDS0FHRV9UQVJOQU1FICJsaWJzdGRjKysiCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIF9HTElCQ1hYX1BBQ0tBR0VfVVJMICIiCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIF9HTElCQ1hYX1BBQ0tBR0VfX0dMSUJDWFhfVkVSU0lPTiAidmVyc2lvbi11bnVzZWQiCisKKy8qIFRoZSBzaXplIG9mIGBjaGFyJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogI3VuZGVmIFNJWkVPRl9DSEFSICovCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjdW5kZWYgU0laRU9GX0lOVCAqLworCisvKiBUaGUgc2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qICN1bmRlZiBTSVpFT0ZfTE9ORyAqLworCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjdW5kZWYgU0laRU9GX1NIT1JUICovCisKKy8qIFRoZSBzaXplIG9mIGB2b2lkIConLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjdW5kZWYgU0laRU9GX1ZPSURfUCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworLyogI3VuZGVmIF9HTElCQ1hYX1ZFUlNJT04gKi8KKworLyogRGVmaW5lIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBDKysxMSBhdG9taWNzLiAqLworI2RlZmluZSBfR0xJQkNYWF9BVE9NSUNfQlVJTFRJTlMgMQorCisvKiBEZWZpbmUgdG8gdXNlIGNvbmNlcHQgY2hlY2tpbmcgY29kZSBmcm9tIHRoZSBib29zdCBsaWJyYXJpZXMuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfQ09OQ0VQVF9DSEVDS1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYSBmdWxseSBkeW5hbWljIGJhc2ljX3N0cmluZyBpcyB3YW50ZWQsIDAgdG8gZGlzYWJsZSwKKyAgIHVuZGVmaW5lZCBmb3IgcGxhdGZvcm0gZGVmYXVsdHMgKi8KKyNkZWZpbmUgX0dMSUJDWFhfRlVMTFlfRFlOQU1JQ19TVFJJTkcgMAorCisvKiBEZWZpbmUgaWYgZ3RocmVhZHMgbGlicmFyeSBpcyBhdmFpbGFibGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfSEFTX0dUSFJFQURTICovCisKKy8qIERlZmluZSB0byAxIGlmIGEgZnVsbCBob3N0ZWQgbGlicmFyeSBpcyBidWlsdCwgb3IgMCBpZiBmcmVlc3RhbmRpbmcuICovCisjZGVmaW5lIF9HTElCQ1hYX0hPU1RFRCAxCisKKy8qIERlZmluZSBpZiBjb21wYXRpYmlsaXR5IHNob3VsZCBiZSBwcm92aWRlZCBmb3IgLW1sb25nLWRvdWJsZS02NC4gKi8KKworLyogRGVmaW5lIGlmIHB0cmRpZmZfdCBpcyBpbnQuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfUFRSRElGRl9UX0lTX0lOVCAqLworCisvKiBEZWZpbmUgaWYgdXNpbmcgc2V0cmxpbWl0IHRvIHNldCByZXNvdXJjZSBsaW1pdHMgZHVyaW5nICJtYWtlIGNoZWNrIiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1JFU19MSU1JVFMgKi8KKworLyogRGVmaW5lIGlmIHNpemVfdCBpcyB1bnNpZ25lZCBpbnQuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfU0laRV9UX0lTX1VJTlQgKi8KKworLyogRGVmaW5lIGlmIHRoZSBjb21waWxlciBpcyBjb25maWd1cmVkIGZvciBzZXRqbXAvbG9uZ2ptcCBleGNlcHRpb25zLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1NKTEpfRVhDRVBUSU9OUyAqLworCisvKiBEZWZpbmUgdG8gdGhlIHZhbHVlIG9mIHRoZSBFT0YgaW50ZWdlciBjb25zdGFudC4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfU1RESU9fRU9GIC0xCisKKy8qIERlZmluZSB0byB0aGUgdmFsdWUgb2YgdGhlIFNFRUtfQ1VSIGludGVnZXIgY29uc3RhbnQuICovCisjZGVmaW5lIF9HTElCQ1hYX1NURElPX1NFRUtfQ1VSIDEKKworLyogRGVmaW5lIHRvIHRoZSB2YWx1ZSBvZiB0aGUgU0VFS19FTkQgaW50ZWdlciBjb25zdGFudC4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfU1RESU9fU0VFS19FTkQgMgorCisvKiBEZWZpbmUgdG8gdXNlIHN5bWJvbCB2ZXJzaW9uaW5nIGluIHRoZSBzaGFyZWQgbGlicmFyeS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9TWU1WRVIgKi8KKworLyogRGVmaW5lIHRvIHVzZSBkYXJ3aW4gdmVyc2lvbmluZyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfU1lNVkVSX0RBUldJTiAqLworCisvKiBEZWZpbmUgdG8gdXNlIEdOVSB2ZXJzaW9uaW5nIGluIHRoZSBzaGFyZWQgbGlicmFyeS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9TWU1WRVJfR05VICovCisKKy8qIERlZmluZSB0byB1c2UgR05VIG5hbWVzcGFjZSB2ZXJzaW9uaW5nIGluIHRoZSBzaGFyZWQgbGlicmFyeS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9TWU1WRVJfR05VX05BTUVTUEFDRSAqLworCisvKiBEZWZpbmUgdG8gdXNlIFN1biB2ZXJzaW9uaW5nIGluIHRoZSBzaGFyZWQgbGlicmFyeS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9TWU1WRVJfU1VOICovCisKKy8qIERlZmluZSBpZiBDOTkgZnVuY3Rpb25zIG9yIG1hY3JvcyBmcm9tIDx3Y2hhci5oPiwgPG1hdGguaD4sIDxjb21wbGV4Lmg+LAorICAgPHN0ZGlvLmg+LCBhbmQgPHN0ZGxpYi5oPiBjYW4gYmUgdXNlZCBvciBleHBvc2VkLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9DOTkgKi8KKworLyogRGVmaW5lIGlmIEM5OSBmdW5jdGlvbnMgaW4gPGNvbXBsZXguaD4gc2hvdWxkIGJlIHVzZWQgaW4gPGNvbXBsZXg+LiBVc2luZworICAgY29tcGlsZXIgYnVpbHRpbnMgZm9yIHRoZXNlIGZ1bmN0aW9ucyByZXF1aXJlcyBjb3JyZXNwb25kaW5nIEM5OSBsaWJyYXJ5CisgICBmdW5jdGlvbnMgdG8gYmUgcHJlc2VudC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVggKi8KKworLyogRGVmaW5lIGlmIEM5OSBmdW5jdGlvbnMgaW4gPGNvbXBsZXguaD4gc2hvdWxkIGJlIHVzZWQgaW4gPHRyMS9jb21wbGV4Pi4KKyAgIFVzaW5nIGNvbXBpbGVyIGJ1aWx0aW5zIGZvciB0aGVzZSBmdW5jdGlvbnMgcmVxdWlyZXMgY29ycmVzcG9uZGluZyBDOTkKKyAgIGxpYnJhcnkgZnVuY3Rpb25zIHRvIGJlIHByZXNlbnQuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMSAqLworCisvKiBEZWZpbmUgaWYgQzk5IGZ1bmN0aW9ucyBpbiA8Y3R5cGUuaD4gc2hvdWxkIGJlIGltcG9ydGVkIGluIDx0cjEvY2N0eXBlPiBpbgorICAgbmFtZXNwYWNlIHN0ZDo6dHIxLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfQzk5X0NUWVBFX1RSMSAxCisKKy8qIERlZmluZSBpZiBDOTkgZnVuY3Rpb25zIGluIDxmZW52Lmg+IHNob3VsZCBiZSBpbXBvcnRlZCBpbiA8dHIxL2NmZW52PiBpbgorICAgbmFtZXNwYWNlIHN0ZDo6dHIxLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9DOTlfRkVOVl9UUjEgKi8KKworLyogRGVmaW5lIGlmIEM5OSBmdW5jdGlvbnMgaW4gPGludHR5cGVzLmg+IHNob3VsZCBiZSBpbXBvcnRlZCBpbgorICAgPHRyMS9jaW50dHlwZXM+IGluIG5hbWVzcGFjZSBzdGQ6OnRyMS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfVVNFX0M5OV9JTlRUWVBFU19UUjEgMQorCisvKiBEZWZpbmUgaWYgd2NoYXJfdCBDOTkgZnVuY3Rpb25zIGluIDxpbnR0eXBlcy5oPiBzaG91bGQgYmUgaW1wb3J0ZWQgaW4KKyAgIDx0cjEvY2ludHR5cGVzPiBpbiBuYW1lc3BhY2Ugc3RkOjp0cjEuICovCisjZGVmaW5lIF9HTElCQ1hYX1VTRV9DOTlfSU5UVFlQRVNfV0NIQVJfVF9UUjEgMQorCisvKiBEZWZpbmUgaWYgQzk5IGZ1bmN0aW9ucyBvciBtYWNyb3MgaW4gPG1hdGguaD4gc2hvdWxkIGJlIGltcG9ydGVkIGluIDxjbWF0aD4KKyAgIGluIG5hbWVzcGFjZSBzdGQuICovCisjZGVmaW5lIF9HTElCQ1hYX1VTRV9DOTlfTUFUSCAxCisKKy8qIERlZmluZSBpZiBDOTkgZnVuY3Rpb25zIG9yIG1hY3JvcyBpbiA8bWF0aC5oPiBzaG91bGQgYmUgaW1wb3J0ZWQgaW4KKyAgIDx0cjEvY21hdGg+IGluIG5hbWVzcGFjZSBzdGQ6OnRyMS4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxICovCisKKy8qIERlZmluZSBpZiBDOTkgdHlwZXMgaW4gPHN0ZGludC5oPiBzaG91bGQgYmUgaW1wb3J0ZWQgaW4gPHRyMS9jc3RkaW50PiBpbgorICAgbmFtZXNwYWNlIHN0ZDo6dHIxLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEgMQorCisvKiBEZWZpbmVkIGlmIGNsb2NrX2dldHRpbWUgaGFzIG1vbm90b25pYyBjbG9jayBzdXBwb3J0LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9DTE9DS19NT05PVE9OSUMgKi8KKworLyogRGVmaW5lZCBpZiBjbG9ja19nZXR0aW1lIHN5c2NhbGwgaGFzIG1vbm90b25pYyBhbmQgcmVhbHRpbWUgY2xvY2sgc3VwcG9ydC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfQ0xPQ0tfR0VUVElNRV9TWVNDQUxMICovCisKKy8qIERlZmluZWQgaWYgY2xvY2tfZ2V0dGltZSBoYXMgcmVhbHRpbWUgY2xvY2sgc3VwcG9ydC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfQ0xPQ0tfUkVBTFRJTUUgKi8KKworLyogRGVmaW5lIGlmIElTTy9JRUMgVFIgMjQ3MzMgZGVjaW1hbCBmbG9hdGluZyBwb2ludCB0eXBlcyBhcmUgc3VwcG9ydGVkIG9uCisgICB0aGlzIGhvc3QuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfVVNFX0RFQ0lNQUxfRkxPQVQgKi8KKworLyogRGVmaW5lIGlmIF9fZmxvYXQxMjggaXMgc3VwcG9ydGVkIG9uIHRoaXMgaG9zdC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfRkxPQVQxMjggKi8KKworLyogRGVmaW5lZCBpZiBnZXR0aW1lb2ZkYXkgaXMgYXZhaWxhYmxlLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfR0VUVElNRU9GREFZIDEKKworLyogRGVmaW5lIGlmIGdldF9ucHJvY3MgaXMgYXZhaWxhYmxlIGluIDxzeXMvc3lzaW5mby5oPi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfR0VUX05QUk9DUyAqLworCisvKiBEZWZpbmUgaWYgX19pbnQxMjggaXMgc3VwcG9ydGVkIG9uIHRoaXMgaG9zdC4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfVVNFX0lOVDEyOCAxCisKKy8qIERlZmluZSBpZiBMRlMgc3VwcG9ydCBpcyBhdmFpbGFibGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfVVNFX0xGUyAqLworCisvKiBEZWZpbmUgaWYgY29kZSBzcGVjaWFsaXplZCBmb3IgbG9uZyBsb25nIHNob3VsZCBiZSB1c2VkLiAqLworI2RlZmluZSBfR0xJQkNYWF9VU0VfTE9OR19MT05HIDEKKworLyogRGVmaW5lZCBpZiBuYW5vc2xlZXAgaXMgYXZhaWxhYmxlLiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9OQU5PU0xFRVAgKi8KKworLyogRGVmaW5lIGlmIE5MUyB0cmFuc2xhdGlvbnMgYXJlIHRvIGJlIHVzZWQuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfVVNFX05MUyAqLworCisvKiBEZWZpbmUgaWYgcHRocmVhZHNfbnVtX3Byb2Nlc3NvcnNfbnAgaXMgYXZhaWxhYmxlIGluIDxwdGhyZWFkLmg+LiAqLworLyogI3VuZGVmIF9HTElCQ1hYX1VTRV9QVEhSRUFEU19OVU1fUFJPQ0VTU09SU19OUCAqLworCisvKiBEZWZpbmUgaWYgL2Rldi9yYW5kb20gYW5kIC9kZXYvdXJhbmRvbSBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmFuZG9tX2RldmljZQorICAgb2YgVFIxIChDaGFwdGVyIDUuMSkuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfVVNFX1JBTkRPTV9UUjEgKi8KKworLyogRGVmaW5lZCBpZiBzY2hlZF95aWVsZCBpcyBhdmFpbGFibGUuICovCisvKiAjdW5kZWYgX0dMSUJDWFhfVVNFX1NDSEVEX1lJRUxEICovCisKKy8qIERlZmluZSBpZiBfU0NfTlBST0NFU1NPUlNfT05MTiBpcyBhdmFpbGFibGUgaW4gPHVuaXN0ZC5oPi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfU0NfTlBST0NFU1NPUlNfT05MTiAqLworCisvKiBEZWZpbmUgaWYgX1NDX05QUk9DX09OTE4gaXMgYXZhaWxhYmxlIGluIDx1bmlzdGQuaD4uICovCisvKiAjdW5kZWYgX0dMSUJDWFhfVVNFX1NDX05QUk9DX09OTE4gKi8KKworLyogRGVmaW5lIGlmIHN5c2N0bCgpLCBDVExfSFcgYW5kIEhXX05DUFUgYXJlIGF2YWlsYWJsZSBpbiA8c3lzL3N5c2N0bC5oPi4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9VU0VfU1lTQ1RMX0hXX05DUFUgKi8KKworLyogRGVmaW5lIGlmIGNvZGUgc3BlY2lhbGl6ZWQgZm9yIHdjaGFyX3Qgc2hvdWxkIGJlIHVzZWQuICovCisjZGVmaW5lIF9HTElCQ1hYX1VTRV9XQ0hBUl9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYSB2ZXJib3NlIGxpYnJhcnkgaXMgYnVpbHQsIG9yIDAgb3RoZXJ3aXNlLiAqLworI2RlZmluZSBfR0xJQkNYWF9WRVJCT1NFIDEKKworLyogRGVmaW5lZCBpZiBhcyBjYW4gaGFuZGxlIHJkcmFuZC4gKi8KKy8qICN1bmRlZiBfR0xJQkNYWF9YODZfUkRSQU5EICovCisKKy8qIERlZmluZSB0byAxIGlmIG11dGV4X3RpbWVkbG9jayBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIF9HVEhSRUFEX1VTRV9NVVRFWF9USU1FRExPQ0sgMQorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fQUNPU0YpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9BQ09TRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQUNPU0YgMQorIyBkZWZpbmUgYWNvc2YgX2Fjb3NmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0FDT1NMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQUNPU0wpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0FDT1NMIDEKKyMgZGVmaW5lIGFjb3NsIF9hY29zbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19BU0lORikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0FTSU5GKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9BU0lORiAxCisjIGRlZmluZSBhc2luZiBfYXNpbmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fQVNJTkwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9BU0lOTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQVNJTkwgMQorIyBkZWZpbmUgYXNpbmwgX2FzaW5sCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0FUQU4yRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0FUQU4yRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQVRBTjJGIDEKKyMgZGVmaW5lIGF0YW4yZiBfYXRhbjJmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0FUQU4yTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0FUQU4yTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQVRBTjJMIDEKKyMgZGVmaW5lIGF0YW4ybCBfYXRhbjJsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0FUQU5GKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQVRBTkYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0FUQU5GIDEKKyMgZGVmaW5lIGF0YW5mIF9hdGFuZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19BVEFOTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0FUQU5MKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9BVEFOTCAxCisjIGRlZmluZSBhdGFubCBfYXRhbmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fQ0VJTEYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9DRUlMRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQ0VJTEYgMQorIyBkZWZpbmUgY2VpbGYgX2NlaWxmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0NFSUxMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQ0VJTEwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0NFSUxMIDEKKyMgZGVmaW5lIGNlaWxsIF9jZWlsbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19DT1NGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQ09TRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfQ09TRiAxCisjIGRlZmluZSBjb3NmIF9jb3NmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0NPU0hGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfQ09TSEYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0NPU0hGIDEKKyMgZGVmaW5lIGNvc2hmIF9jb3NoZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19DT1NITCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0NPU0hMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9DT1NITCAxCisjIGRlZmluZSBjb3NobCBfY29zaGwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fQ09TTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0NPU0wpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0NPU0wgMQorIyBkZWZpbmUgY29zbCBfY29zbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19FWFBGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRVhQRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRVhQRiAxCisjIGRlZmluZSBleHBmIF9leHBmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0VYUEwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9FWFBMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9FWFBMIDEKKyMgZGVmaW5lIGV4cGwgX2V4cGwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fRkFCU0YpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9GQUJTRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRkFCU0YgMQorIyBkZWZpbmUgZmFic2YgX2ZhYnNmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZBQlNMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRkFCU0wpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0ZBQlNMIDEKKyMgZGVmaW5lIGZhYnNsIF9mYWJzbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19GSU5JVEUpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9GSU5JVEUpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0ZJTklURSAxCisjIGRlZmluZSBmaW5pdGUgX2Zpbml0ZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19GSU5JVEVGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRklOSVRFRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRklOSVRFRiAxCisjIGRlZmluZSBmaW5pdGVmIF9maW5pdGVmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZJTklURUwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9GSU5JVEVMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9GSU5JVEVMIDEKKyMgZGVmaW5lIGZpbml0ZWwgX2Zpbml0ZWwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fRkxPT1JGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRkxPT1JGKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9GTE9PUkYgMQorIyBkZWZpbmUgZmxvb3JmIF9mbG9vcmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fRkxPT1JMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRkxPT1JMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9GTE9PUkwgMQorIyBkZWZpbmUgZmxvb3JsIF9mbG9vcmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fRk1PREYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9GTU9ERikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRk1PREYgMQorIyBkZWZpbmUgZm1vZGYgX2Ztb2RmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZNT0RMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRk1PREwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0ZNT0RMIDEKKyMgZGVmaW5lIGZtb2RsIF9mbW9kbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19GUENMQVNTKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfRlBDTEFTUykKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRlBDTEFTUyAxCisjIGRlZmluZSBmcGNsYXNzIF9mcGNsYXNzCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZSRVhQRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0ZSRVhQRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRlJFWFBGIDEKKyMgZGVmaW5lIGZyZXhwZiBfZnJleHBmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0ZSRVhQTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0ZSRVhQTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfRlJFWFBMIDEKKyMgZGVmaW5lIGZyZXhwbCBfZnJleHBsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0hZUE9UKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfSFlQT1QpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0hZUE9UIDEKKyMgZGVmaW5lIGh5cG90IF9oeXBvdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19IWVBPVEYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9IWVBPVEYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0hZUE9URiAxCisjIGRlZmluZSBoeXBvdGYgX2h5cG90ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19IWVBPVEwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9IWVBPVEwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0hZUE9UTCAxCisjIGRlZmluZSBoeXBvdGwgX2h5cG90bAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19JU0lORikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0lTSU5GKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9JU0lORiAxCisjIGRlZmluZSBpc2luZiBfaXNpbmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fSVNJTkZGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfSVNJTkZGKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9JU0lORkYgMQorIyBkZWZpbmUgaXNpbmZmIF9pc2luZmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fSVNJTkZMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfSVNJTkZMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9JU0lORkwgMQorIyBkZWZpbmUgaXNpbmZsIF9pc2luZmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fSVNOQU4pICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9JU05BTikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfSVNOQU4gMQorIyBkZWZpbmUgaXNuYW4gX2lzbmFuCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0lTTkFORikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0lTTkFORikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfSVNOQU5GIDEKKyMgZGVmaW5lIGlzbmFuZiBfaXNuYW5mCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0lTTkFOTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0lTTkFOTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfSVNOQU5MIDEKKyMgZGVmaW5lIGlzbmFubCBfaXNuYW5sCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xERVhQRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xERVhQRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTERFWFBGIDEKKyMgZGVmaW5lIGxkZXhwZiBfbGRleHBmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xERVhQTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xERVhQTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTERFWFBMIDEKKyMgZGVmaW5lIGxkZXhwbCBfbGRleHBsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xPRzEwRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xPRzEwRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTE9HMTBGIDEKKyMgZGVmaW5lIGxvZzEwZiBfbG9nMTBmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xPRzEwTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xPRzEwTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTE9HMTBMIDEKKyMgZGVmaW5lIGxvZzEwbCBfbG9nMTBsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX0xPR0YpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9MT0dGKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9MT0dGIDEKKyMgZGVmaW5lIGxvZ2YgX2xvZ2YKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fTE9HTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX0xPR0wpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX0xPR0wgMQorIyBkZWZpbmUgbG9nbCBfbG9nbAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19NT0RGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfTU9ERikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfTU9ERiAxCisjIGRlZmluZSBtb2RmIF9tb2RmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX01PREZGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfTU9ERkYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX01PREZGIDEKKyMgZGVmaW5lIG1vZGZmIF9tb2RmZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19NT0RGTCkgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX01PREZMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9NT0RGTCAxCisjIGRlZmluZSBtb2RmbCBfbW9kZmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fUE9XRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX1BPV0YpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1BPV0YgMQorIyBkZWZpbmUgcG93ZiBfcG93ZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19QT1dMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfUE9XTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfUE9XTCAxCisjIGRlZmluZSBwb3dsIF9wb3dsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1FGUENMQVNTKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfUUZQQ0xBU1MpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1FGUENMQVNTIDEKKyMgZGVmaW5lIHFmcGNsYXNzIF9xZnBjbGFzcworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TSU5DT1MpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TSU5DT1MpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1NJTkNPUyAxCisjIGRlZmluZSBzaW5jb3MgX3NpbmNvcworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TSU5DT1NGKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfU0lOQ09TRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfU0lOQ09TRiAxCisjIGRlZmluZSBzaW5jb3NmIF9zaW5jb3NmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1NJTkNPU0wpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TSU5DT1NMKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5DT1NMIDEKKyMgZGVmaW5lIHNpbmNvc2wgX3NpbmNvc2wKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fU0lORikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX1NJTkYpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1NJTkYgMQorIyBkZWZpbmUgc2luZiBfc2luZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TSU5IRikgJiYgISBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX1NJTkhGKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5IRiAxCisjIGRlZmluZSBzaW5oZiBfc2luaGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fU0lOSEwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TSU5ITCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfU0lOSEwgMQorIyBkZWZpbmUgc2luaGwgX3NpbmhsCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1NJTkwpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TSU5MKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9TSU5MIDEKKyMgZGVmaW5lIHNpbmwgX3NpbmwKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fU1FSVEYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TUVJURikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1FSVEYgMQorIyBkZWZpbmUgc3FydGYgX3NxcnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1NRUlRMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfU1FSVEwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1NRUlRMIDEKKyMgZGVmaW5lIHNxcnRsIF9zcXJ0bAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TVFJUT0YpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9TVFJUT0YpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1NUUlRPRiAxCisjIGRlZmluZSBzdHJ0b2YgX3N0cnRvZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19TVFJUT0xEKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfU1RSVE9MRCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfU1RSVE9MRCAxCisjIGRlZmluZSBzdHJ0b2xkIF9zdHJ0b2xkCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1RBTkYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9UQU5GKQorIyBkZWZpbmUgX0dMSUJDWFhfSEFWRV9UQU5GIDEKKyMgZGVmaW5lIHRhbmYgX3RhbmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9fVEFOSEYpICYmICEgZGVmaW5lZCAoX0dMSUJDWFhfSEFWRV9UQU5IRikKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfVEFOSEYgMQorIyBkZWZpbmUgdGFuaGYgX3RhbmhmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfX1RBTkhMKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfVEFOSEwpCisjIGRlZmluZSBfR0xJQkNYWF9IQVZFX1RBTkhMIDEKKyMgZGVmaW5lIHRhbmhsIF90YW5obAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfR0xJQkNYWF9IQVZFX19UQU5MKSAmJiAhIGRlZmluZWQgKF9HTElCQ1hYX0hBVkVfVEFOTCkKKyMgZGVmaW5lIF9HTElCQ1hYX0hBVkVfVEFOTCAxCisjIGRlZmluZSB0YW5sIF90YW5sCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NYWF9DT05GSUdfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvYysraW8uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL2MrK2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4YzE4NgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL2MrK2lvLmgKQEAgLTAsMCArMSw1MCBAQAorLy8gVW5kZXJseWluZyBpbyBsaWJyYXJ5IGRldGFpbHMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYysraW8uaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2lvc30KKyAqLworCisvLyBjX2lvX3N0ZGlvLmggLSBEZWZpbmVzIGZvciB1c2luZyAiQyIgc3RkaW8uaAorCisjaWZuZGVmIF9HTElCQ1hYX0NYWF9JT19ICisjZGVmaW5lIF9HTElCQ1hYX0NYWF9JT19IIDEKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CisKKyAgLy8gZm9yIGJhc2ljX2ZpbGUuaAorICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jKytsb2NhbGUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL2MrK2xvY2FsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZmQ5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jKytsb2NhbGUuaApAQCAtMCwwICsxLDkyIEBACisvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2MrK2xvY2FsZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1hYX0xPQ0FMRV9ICisjZGVmaW5lIF9HTElCQ1hYX0NYWF9MT0NBTEVfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGNsb2NhbGU+CisKKyNkZWZpbmUgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKworICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCisgIC8vIGZhbGwgYmFjayB0byB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzCisgIC8vIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4KKyAgaW5saW5lIGludAorICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmLCBjaGFyKiBfX291dCwgCisJCSAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLAorCQkgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICB7CisgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19OVU1FUklDLCAwKTsKKyAgICBjaGFyKiBfX3NhdiA9IDA7CisgICAgaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19vbGQsICJDIikpCisgICAgICB7CisJY29uc3Qgc2l6ZV90IF9fbGVuID0gX19idWlsdGluX3N0cmxlbihfX29sZCkgKyAxOworCV9fc2F2ID0gbmV3IGNoYXJbX19sZW5dOworCV9fYnVpbHRpbl9tZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xlbik7CisJc3RkOjpzZXRsb2NhbGUoTENfTlVNRVJJQywgIkMiKTsKKyAgICAgIH0KKworICAgIF9fYnVpbHRpbl92YV9saXN0IF9fYXJnczsKKyAgICBfX2J1aWx0aW5fdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5CisgICAgY29uc3QgaW50IF9fcmV0ID0gX19idWlsdGluX3ZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKyNlbHNlCisgICAgY29uc3QgaW50IF9fcmV0ID0gX19idWlsdGluX3ZzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX19hcmdzKTsKKyNlbmRpZgorCisgICAgX19idWlsdGluX3ZhX2VuZChfX2FyZ3MpOworCisgICAgaWYgKF9fc2F2KQorICAgICAgeworCXN0ZDo6c2V0bG9jYWxlKExDX05VTUVSSUMsIF9fc2F2KTsKKwlkZWxldGUgW10gX19zYXY7CisgICAgICB9CisgICAgcmV0dXJuIF9fcmV0OworICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jcHVfZGVmaW5lcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvY3B1X2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTgxZDNmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvY3B1X2RlZmluZXMuaApAQCAtMCwwICsxLDMzIEBACisvLyBTcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgZ2VuZXJpYyBwbGF0Zm9ybXMgIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2NwdV9kZWZpbmVzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtpb3Nmd2R9CisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9DUFVfREVGSU5FUworI2RlZmluZSBfR0xJQkNYWF9DUFVfREVGSU5FUyAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvY3R5cGVfYmFzZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvY3R5cGVfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNDQ5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jdHlwZV9iYXNlLmgKQEAgLTAsMCArMSw2MCBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKy8vCisgIAorLy8gSW5mb3JtYXRpb24gYXMgZ2xlYW5lZCBmcm9tIC91c3IvaW5jbHVkZS9jdHlwZS5oLCBmb3Igc29sYXJpczIuNS4xCisKKy8vIFN1cHBvcnQgZm9yIFNvbGFyaXMgMi41LjEKKyAgCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8vIEBicmllZiAgQmFzZSBjbGFzcyBmb3IgY3R5cGUuCisgIHN0cnVjdCBjdHlwZV9iYXNlCisgIHsKKyAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworCisgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorICAgIHR5cGVkZWYgY2hhciAJCW1hc2s7CisgICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgICAgCT0gX1U7CisgICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgCT0gX0w7CisgICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgCT0gX1UgfCBfTDsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCAJPSBfTjsKKyAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgCT0gX1ggfCBfTjsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSAJPSBfUzsKKyAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCAJPSBfUCB8IF9VIHwgX0wgfCBfTiB8IF9COworICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoIAk9IF9QIHwgX1UgfCBfTCB8IF9OOworICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsIAk9IF9DOworICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0IAk9IF9QOworICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtIAk9IF9VIHwgX0wgfCBfTjsKKyAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvY3R5cGVfaW5saW5lLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jdHlwZV9pbmxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGJjNjNjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvY3R5cGVfaW5saW5lLmgKQEAgLTAsMCArMSw3NCBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvY3R5cGVfaW5saW5lLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtsb2NhbGV9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKy8vCisKKy8vIGN0eXBlIGJpdHMgdG8gYmUgaW5saW5lZCBnbyBoZXJlLiBOb24taW5saW5hYmxlIChpZSB2aXJ0dWFsIGRvXyopCisvLyBmdW5jdGlvbnMgZ28gaW4gY3R5cGUuY2MKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIGJvb2wKKyAgY3R5cGU8Y2hhcj46OgorICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CisgIHsgcmV0dXJuIF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CisKKyAgY29uc3QgY2hhcioKKyAgY3R5cGU8Y2hhcj46OgorICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKKyAgeworICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKKyAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KyspXTsKKyAgICByZXR1cm4gX19oaWdoOworICB9CisKKyAgY29uc3QgY2hhcioKKyAgY3R5cGU8Y2hhcj46OgorICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAorICB7CisgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoICYmICF0aGlzLT5pcyhfX20sICpfX2xvdykpCisgICAgICArK19fbG93OworICAgIHJldHVybiBfX2xvdzsKKyAgfQorCisgIGNvbnN0IGNoYXIqCisgIGN0eXBlPGNoYXI+OjoKKyAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CisgIHsKKyAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgdGhpcy0+aXMoX19tLCAqX19sb3cpICE9IDApCisgICAgICArK19fbG93OworICAgIHJldHVybiBfX2xvdzsKKyAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jeHhhYmlfdHdlYWtzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9jeHhhYmlfdHdlYWtzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4OTUzOQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL2N4eGFiaV90d2Vha3MuaApAQCAtMCwwICsxLDU5IEBACisvLyBDb250cm9sIHZhcmlvdXMgdGFyZ2V0IHNwZWNpZmljIEFCSSB0d2Vha3MuICBHZW5lcmljIHZlcnNpb24uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2N4eGFiaV90d2Vha3MuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2N4eGFiaS5ofQorICovCisKKyNpZm5kZWYgX0NYWEFCSV9UV0VBS1NfSAorI2RlZmluZSBfQ1hYQUJJX1RXRUFLU19IIDEKKworI2lmZGVmIF9fY3BsdXNwbHVzCituYW1lc3BhY2UgX19jeHhhYml2MQoreworICBleHRlcm4gIkMiIAorICB7CisjZW5kaWYKKworICAvLyBUaGUgZ2VuZXJpYyBBQkkgdXNlcyB0aGUgZmlyc3QgYnl0ZSBvZiBhIDY0LWJpdCBndWFyZCB2YXJpYWJsZS4KKyNkZWZpbmUgX0dMSUJDWFhfR1VBUkRfVEVTVCh4KSAoKihjaGFyICopICh4KSAhPSAwKQorI2RlZmluZSBfR0xJQkNYWF9HVUFSRF9TRVQoeCkgKihjaGFyICopICh4KSA9IDEKKyNkZWZpbmUgX0dMSUJDWFhfR1VBUkRfQklUIF9fZ3VhcmRfdGVzdF9iaXQgKDAsIDEpCisjZGVmaW5lIF9HTElCQ1hYX0dVQVJEX1BFTkRJTkdfQklUIF9fZ3VhcmRfdGVzdF9iaXQgKDEsIDEpCisjZGVmaW5lIF9HTElCQ1hYX0dVQVJEX1dBSVRJTkdfQklUIF9fZ3VhcmRfdGVzdF9iaXQgKDIsIDEpCisgIF9fZXh0ZW5zaW9uX18gdHlwZWRlZiBpbnQgX19ndWFyZCBfX2F0dHJpYnV0ZV9fKChtb2RlIChfX0RJX18pKSk7CisKKyAgLy8gX19jeGFfdmVjX2N0b3IgaGFzIHZvaWQgcmV0dXJuIHR5cGUuCisgIHR5cGVkZWYgdm9pZCBfX2N4YV92ZWNfY3Rvcl9yZXR1cm5fdHlwZTsKKyNkZWZpbmUgX0dMSUJDWFhfQ1hBX1ZFQ19DVE9SX1JFVFVSTih4KSByZXR1cm4KKyAgLy8gQ29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBkbyBub3QgcmV0dXJuIGEgdmFsdWUuCisgIHR5cGVkZWYgdm9pZCBfX2N4YV9jZHRvcl9yZXR1cm5fdHlwZTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgIH0KK30gLy8gbmFtZXNwYWNlIF9fY3h4YWJpdjEKKyNlbmRpZgorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9lcnJvcl9jb25zdGFudHMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL2Vycm9yX2NvbnN0YW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNmQ4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9lcnJvcl9jb25zdGFudHMuaApAQCAtMCwwICsxLDE3OCBAQAorLy8gU3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIGdlbmVyaWMgcGxhdGZvcm1zICAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9lcnJvcl9jb25zdGFudHMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3N5c3RlbV9lcnJvcn0KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0VSUk9SX0NPTlNUQU5UUworI2RlZmluZSBfR0xJQkNYWF9FUlJPUl9DT05TVEFOVFMgMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxjZXJybm8+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICBlbnVtIGNsYXNzIGVycmMKKyAgICB7CisgICAgICBhZGRyZXNzX2ZhbWlseV9ub3Rfc3VwcG9ydGVkID0gCQlFQUZOT1NVUFBPUlQsCisgICAgICBhZGRyZXNzX2luX3VzZSA9IAkJCQlFQUREUklOVVNFLAorICAgICAgYWRkcmVzc19ub3RfYXZhaWxhYmxlID0gCQkJRUFERFJOT1RBVkFJTCwKKyAgICAgIGFscmVhZHlfY29ubmVjdGVkID0gCQkJRUlTQ09OTiwKKyAgICAgIGFyZ3VtZW50X2xpc3RfdG9vX2xvbmcgPSAJCQlFMkJJRywKKyAgICAgIGFyZ3VtZW50X291dF9vZl9kb21haW4gPSAJCQlFRE9NLAorICAgICAgYmFkX2FkZHJlc3MgPSAJCQkJRUZBVUxULAorICAgICAgYmFkX2ZpbGVfZGVzY3JpcHRvciA9IAkJCUVCQURGLAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FQkFETVNHCisgICAgICBiYWRfbWVzc2FnZSA9IAkJCQlFQkFETVNHLAorI2VuZGlmCisKKyAgICAgIGJyb2tlbl9waXBlID0gCQkJCUVQSVBFLAorICAgICAgY29ubmVjdGlvbl9hYm9ydGVkID0gCQkJRUNPTk5BQk9SVEVELAorICAgICAgY29ubmVjdGlvbl9hbHJlYWR5X2luX3Byb2dyZXNzID0gCQlFQUxSRUFEWSwKKyAgICAgIGNvbm5lY3Rpb25fcmVmdXNlZCA9IAkJCUVDT05OUkVGVVNFRCwKKyAgICAgIGNvbm5lY3Rpb25fcmVzZXQgPSAJCQlFQ09OTlJFU0VULAorICAgICAgY3Jvc3NfZGV2aWNlX2xpbmsgPSAJCQlFWERFViwKKyAgICAgIGRlc3RpbmF0aW9uX2FkZHJlc3NfcmVxdWlyZWQgPSAJCUVERVNUQUREUlJFUSwKKyAgICAgIGRldmljZV9vcl9yZXNvdXJjZV9idXN5ID0gCQlFQlVTWSwKKyAgICAgIGRpcmVjdG9yeV9ub3RfZW1wdHkgPSAJCQlFTk9URU1QVFksCisgICAgICBleGVjdXRhYmxlX2Zvcm1hdF9lcnJvciA9IAkJRU5PRVhFQywKKyAgICAgIGZpbGVfZXhpc3RzID0gCSAgICAgICAJCQlFRVhJU1QsCisgICAgICBmaWxlX3Rvb19sYXJnZSA9IAkJCQlFRkJJRywKKyAgICAgIGZpbGVuYW1lX3Rvb19sb25nID0gCQkJRU5BTUVUT09MT05HLAorICAgICAgZnVuY3Rpb25fbm90X3N1cHBvcnRlZCA9IAkJCUVOT1NZUywKKyAgICAgIGhvc3RfdW5yZWFjaGFibGUgPSAJCQlFSE9TVFVOUkVBQ0gsCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VJRFJNCisgICAgICBpZGVudGlmaWVyX3JlbW92ZWQgPSAJCQlFSURSTSwKKyNlbmRpZgorCisgICAgICBpbGxlZ2FsX2J5dGVfc2VxdWVuY2UgPSAJCQlFSUxTRVEsCisgICAgICBpbmFwcHJvcHJpYXRlX2lvX2NvbnRyb2xfb3BlcmF0aW9uID0gCUVOT1RUWSwKKyAgICAgIGludGVycnVwdGVkID0gCQkJCUVJTlRSLAorICAgICAgaW52YWxpZF9hcmd1bWVudCA9IAkJCUVJTlZBTCwKKyAgICAgIGludmFsaWRfc2VlayA9IAkJCQlFU1BJUEUsCisgICAgICBpb19lcnJvciA9IAkJCQlFSU8sCisgICAgICBpc19hX2RpcmVjdG9yeSA9IAkJCQlFSVNESVIsCisgICAgICBtZXNzYWdlX3NpemUgPSAJCQkJRU1TR1NJWkUsCisgICAgICBuZXR3b3JrX2Rvd24gPSAJCQkJRU5FVERPV04sCisgICAgICBuZXR3b3JrX3Jlc2V0ID0gCQkJCUVORVRSRVNFVCwKKyAgICAgIG5ldHdvcmtfdW5yZWFjaGFibGUgPSAJCQlFTkVUVU5SRUFDSCwKKyAgICAgIG5vX2J1ZmZlcl9zcGFjZSA9IAkJCUVOT0JVRlMsCisgICAgICBub19jaGlsZF9wcm9jZXNzID0gCQkJRUNISUxELAorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FTk9MSU5LCisgICAgICBub19saW5rID0gCQkJCUVOT0xJTkssCisjZW5kaWYKKworICAgICAgbm9fbG9ja19hdmFpbGFibGUgPSAJCQlFTk9MQ0ssCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VOT0RBVEEKKyAgICAgIG5vX21lc3NhZ2VfYXZhaWxhYmxlID0gCQkJRU5PREFUQSwgCisjZW5kaWYKKworICAgICAgbm9fbWVzc2FnZSA9IAkJCQlFTk9NU0csIAorICAgICAgbm9fcHJvdG9jb2xfb3B0aW9uID0gCQkJRU5PUFJPVE9PUFQsCisgICAgICBub19zcGFjZV9vbl9kZXZpY2UgPSAJCQlFTk9TUEMsCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VOT1NSCisgICAgICBub19zdHJlYW1fcmVzb3VyY2VzID0gCQkJRU5PU1IsCisjZW5kaWYKKworICAgICAgbm9fc3VjaF9kZXZpY2Vfb3JfYWRkcmVzcyA9IAkJRU5YSU8sCisgICAgICBub19zdWNoX2RldmljZSA9IAkJCQlFTk9ERVYsCisgICAgICBub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5ID0gCQlFTk9FTlQsCisgICAgICBub19zdWNoX3Byb2Nlc3MgPSAJCQlFU1JDSCwKKyAgICAgIG5vdF9hX2RpcmVjdG9yeSA9IAkJCUVOT1RESVIsCisgICAgICBub3RfYV9zb2NrZXQgPSAJCQkJRU5PVFNPQ0ssCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VOT1NUUgorICAgICAgbm90X2Ffc3RyZWFtID0gCQkJCUVOT1NUUiwKKyNlbmRpZgorCisgICAgICBub3RfY29ubmVjdGVkID0gCQkJCUVOT1RDT05OLAorICAgICAgbm90X2Vub3VnaF9tZW1vcnkgPSAJCQlFTk9NRU0sCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VOT1RTVVAKKyAgICAgIG5vdF9zdXBwb3J0ZWQgPSAJCQkJRU5PVFNVUCwKKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FQ0FOQ0VMRUQKKyAgICAgIG9wZXJhdGlvbl9jYW5jZWxlZCA9IAkJCUVDQU5DRUxFRCwKKyNlbmRpZgorCisgICAgICBvcGVyYXRpb25faW5fcHJvZ3Jlc3MgPSAJCQlFSU5QUk9HUkVTUywKKyAgICAgIG9wZXJhdGlvbl9ub3RfcGVybWl0dGVkID0gCQlFUEVSTSwKKyAgICAgIG9wZXJhdGlvbl9ub3Rfc3VwcG9ydGVkID0gCQlFT1BOT1RTVVBQLAorICAgICAgb3BlcmF0aW9uX3dvdWxkX2Jsb2NrID0gCQkJRVdPVUxEQkxPQ0ssCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VPV05FUkRFQUQKKyAgICAgIG93bmVyX2RlYWQgPSAJCQkJRU9XTkVSREVBRCwKKyNlbmRpZgorCisgICAgICBwZXJtaXNzaW9uX2RlbmllZCA9IAkJCUVBQ0NFUywKKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfRVBST1RPCisgICAgICBwcm90b2NvbF9lcnJvciA9IAkJCQlFUFJPVE8sCisjZW5kaWYKKworICAgICAgcHJvdG9jb2xfbm90X3N1cHBvcnRlZCA9IAkJCUVQUk9UT05PU1VQUE9SVCwKKyAgICAgIHJlYWRfb25seV9maWxlX3N5c3RlbSA9IAkJCUVST0ZTLAorICAgICAgcmVzb3VyY2VfZGVhZGxvY2tfd291bGRfb2NjdXIgPSAJCUVERUFETEssCisgICAgICByZXNvdXJjZV91bmF2YWlsYWJsZV90cnlfYWdhaW4gPSAJCUVBR0FJTiwKKyAgICAgIHJlc3VsdF9vdXRfb2ZfcmFuZ2UgPSAJCQlFUkFOR0UsCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VOT1RSRUNPVkVSQUJMRQorICAgICAgc3RhdGVfbm90X3JlY292ZXJhYmxlID0gCQkJRU5PVFJFQ09WRVJBQkxFLAorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX0VUSU1FCisgICAgICBzdHJlYW1fdGltZW91dCA9IAkJCQlFVElNRSwKKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9FVFhUQlNZCisgICAgICB0ZXh0X2ZpbGVfYnVzeSA9IAkJCQlFVFhUQlNZLAorI2VuZGlmCisKKyAgICAgIHRpbWVkX291dCA9IAkJCQlFVElNRURPVVQsCisgICAgICB0b29fbWFueV9maWxlc19vcGVuX2luX3N5c3RlbSA9IAkJRU5GSUxFLAorICAgICAgdG9vX21hbnlfZmlsZXNfb3BlbiA9IAkJCUVNRklMRSwKKyAgICAgIHRvb19tYW55X2xpbmtzID0gCQkJCUVNTElOSywKKyAgICAgIHRvb19tYW55X3N5bWJvbGljX2xpbmtfbGV2ZWxzID0gCQlFTE9PUCwKKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfRU9WRVJGTE9XCisgICAgICB2YWx1ZV90b29fbGFyZ2UgPSAJCQlFT1ZFUkZMT1csCisjZW5kaWYKKworICAgICAgd3JvbmdfcHJvdG9jb2xfdHlwZSA9IAkJCUVQUk9UT1RZUEUKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvZXh0YysrLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9leHRjKysuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGE5ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvZXh0YysrLmgKQEAgLTAsMCArMSw3MSBAQAorLy8gQysrIGluY2x1ZGVzIHVzZWQgZm9yIHByZWNvbXBpbGluZyBleHRlbnNpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHRjKysuaAorICogIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZmlsZSBmb3IgYSBwcmVjb21waWxlZCBoZWFkZXIuCisgKi8KKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorI2luY2x1ZGUgPGJpdHMvc3RkdHIxYysrLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGV4dC9hbGdvcml0aG0+CisjaW5jbHVkZSA8ZXh0L2FycmF5X2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGV4dC9hdG9taWNpdHkuaD4KKyNpbmNsdWRlIDxleHQvYml0bWFwX2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGV4dC9jYXN0Lmg+CisjaW5jbHVkZSA8ZXh0L2NvbmN1cnJlbmNlLmg+CisjaW5jbHVkZSA8ZXh0L2RlYnVnX2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGV4dC9leHRwdHJfYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8ZXh0L2Z1bmN0aW9uYWw+CisjaW5jbHVkZSA8ZXh0L2l0ZXJhdG9yPgorI2luY2x1ZGUgPGV4dC9tYWxsb2NfYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8ZXh0L21lbW9yeT4KKyNpbmNsdWRlIDxleHQvbXRfYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8ZXh0L25ld19hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxleHQvbnVtZXJpYz4KKyNpbmNsdWRlIDxleHQvcG9kX2NoYXJfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L3BvaW50ZXIuaD4KKyNpbmNsdWRlIDxleHQvcG9vbF9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxleHQvcmJfdHJlZT4KKyNpbmNsdWRlIDxleHQvcm9wZT4KKyNpbmNsdWRlIDxleHQvc2xpc3Q+CisjaW5jbHVkZSA8ZXh0L3N0ZGlvX2ZpbGVidWYuaD4KKyNpbmNsdWRlIDxleHQvc3RkaW9fc3luY19maWxlYnVmLmg+CisjaW5jbHVkZSA8ZXh0L3Rocm93X2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGV4dC90eXBlbGlzdC5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC92c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3ByaW9yaXR5X3F1ZXVlLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZXhjZXB0aW9uLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvaGFzaF9wb2xpY3kuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9saXN0X3VwZGF0ZV9wb2xpY3kuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RyaWVfcG9saWN5LmhwcD4KKworI2lmZGVmIF9HTElCQ1hYX0hBVkVfSUNPTlYKKyAjaW5jbHVkZSA8ZXh0L2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmg+CisgI2luY2x1ZGUgPGV4dC9lbmNfZmlsZWJ1Zi5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9ndGhyLWRlZmF1bHQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL2d0aHItZGVmYXVsdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTU3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9ndGhyLWRlZmF1bHQuaApAQCAtMCwwICsxLDI5OCBAQAorLyogVGhyZWFkcyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBsaWJnY2MyIGFuZCBsaWJvYmpjLiAgKi8KKy8qIENvbXBpbGUgdGhpcyBvbmUgd2l0aCBnY2MuICAqLworLyogQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMSUJDWFhfR0NDX0dUSFJfU0lOR0xFX0gKKyNkZWZpbmUgX0dMSUJDWFhfR0NDX0dUSFJfU0lOR0xFX0gKKworLyogSnVzdCBwcm92aWRlIGNvbXBhdGliaWxpdHkgZm9yIG11dGV4IGhhbmRsaW5nLiAgKi8KKwordHlwZWRlZiBpbnQgX19ndGhyZWFkX2tleV90OwordHlwZWRlZiBpbnQgX19ndGhyZWFkX29uY2VfdDsKK3R5cGVkZWYgaW50IF9fZ3RocmVhZF9tdXRleF90OwordHlwZWRlZiBpbnQgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90OworCisjZGVmaW5lIF9fR1RIUkVBRF9PTkNFX0lOSVQgMAorI2RlZmluZSBfX0dUSFJFQURfTVVURVhfSU5JVCAwCisjZGVmaW5lIF9fR1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9OKG14KQorI2RlZmluZSBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQgMAorCisjZGVmaW5lIF9HTElCQ1hYX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorCisjaWZkZWYgX0xJQk9CSkMKKworLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UgZm9yIGEgc2luZ2xlIHRocmVhZCAqLworc3RhdGljIHZvaWQgKnRocmVhZF9sb2NhbF9zdG9yYWdlID0gTlVMTDsKKworLyogQmFja2VuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KKworLyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkcyBzdWJzeXN0ZW0uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2luaXRfdGhyZWFkX3N5c3RlbSAodm9pZCkKK3sKKyAgLyogTm8gdGhyZWFkIHN1cHBvcnQgYXZhaWxhYmxlICovCisgIHJldHVybiAtMTsKK30KKworLyogQ2xvc2UgdGhlIHRocmVhZHMgc3Vic3lzdGVtLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19jbG9zZV90aHJlYWRfc3lzdGVtICh2b2lkKQoreworICAvKiBObyB0aHJlYWQgc3VwcG9ydCBhdmFpbGFibGUgKi8KKyAgcmV0dXJuIC0xOworfQorCisvKiBCYWNrZW5kIHRocmVhZCBmdW5jdGlvbnMgKi8KKworLyogQ3JlYXRlIGEgbmV3IHRocmVhZCBvZiBleGVjdXRpb24uICAqLworc3RhdGljIGlubGluZSBvYmpjX3RocmVhZF90CitfX2d0aHJlYWRfb2JqY190aHJlYWRfZGV0YWNoICh2b2lkICgqIGZ1bmMpKHZvaWQgKiksIHZvaWQgKiBhcmcgX0dMSUJDWFhfVU5VU0VEKQoreworICAvKiBObyB0aHJlYWQgc3VwcG9ydCBhdmFpbGFibGUgKi8KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFNldCB0aGUgY3VycmVudCB0aHJlYWQncyBwcmlvcml0eS4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfdGhyZWFkX3NldF9wcmlvcml0eSAoaW50IHByaW9yaXR5IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgLyogTm8gdGhyZWFkIHN1cHBvcnQgYXZhaWxhYmxlICovCisgIHJldHVybiAtMTsKK30KKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHRocmVhZCdzIHByaW9yaXR5LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfZ2V0X3ByaW9yaXR5ICh2b2lkKQoreworICByZXR1cm4gT0JKQ19USFJFQURfSU5URVJBQ1RJVkVfUFJJT1JJVFk7Cit9CisKKy8qIFlpZWxkIG91ciBwcm9jZXNzIHRpbWUgdG8gYW5vdGhlciB0aHJlYWQuICAqLworc3RhdGljIGlubGluZSB2b2lkCitfX2d0aHJlYWRfb2JqY190aHJlYWRfeWllbGQgKHZvaWQpCit7CisgIHJldHVybjsKK30KKworLyogVGVybWluYXRlIHRoZSBjdXJyZW50IHRocmVhZC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfdGhyZWFkX2V4aXQgKHZvaWQpCit7CisgIC8qIE5vIHRocmVhZCBzdXBwb3J0IGF2YWlsYWJsZSAqLworICAvKiBTaG91bGQgd2UgcmVhbGx5IGV4aXQgdGhlIHByb2dyYW0gKi8KKyAgLyogZXhpdCAoJl9fb2JqY190aHJlYWRfZXhpdF9zdGF0dXMpOyAqLworICByZXR1cm4gLTE7Cit9CisKKy8qIFJldHVybnMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCB1bmlxdWVseSBkZXNjcmliZXMgYSB0aHJlYWQuICAqLworc3RhdGljIGlubGluZSBvYmpjX3RocmVhZF90CitfX2d0aHJlYWRfb2JqY190aHJlYWRfaWQgKHZvaWQpCit7CisgIC8qIE5vIHRocmVhZCBzdXBwb3J0LCB1c2UgMS4gICovCisgIHJldHVybiAob2JqY190aHJlYWRfdCkgMTsKK30KKworLyogU2V0cyB0aGUgdGhyZWFkJ3MgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfc2V0X2RhdGEgKHZvaWQgKnZhbHVlKQoreworICB0aHJlYWRfbG9jYWxfc3RvcmFnZSA9IHZhbHVlOworICByZXR1cm4gMDsKK30KKworLyogUmV0dXJucyB0aGUgdGhyZWFkJ3MgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitfX2d0aHJlYWRfb2JqY190aHJlYWRfZ2V0X2RhdGEgKHZvaWQpCit7CisgIHJldHVybiB0aHJlYWRfbG9jYWxfc3RvcmFnZTsKK30KKworLyogQmFja2VuZCBtdXRleCBmdW5jdGlvbnMgKi8KKworLyogQWxsb2NhdGUgYSBtdXRleC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfYWxsb2NhdGUgKG9iamNfbXV0ZXhfdCBtdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBEZWFsbG9jYXRlIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X2RlYWxsb2NhdGUgKG9iamNfbXV0ZXhfdCBtdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBHcmFiIGEgbG9jayBvbiBhIG11dGV4LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF9sb2NrIChvYmpjX211dGV4X3QgbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICAvKiBUaGVyZSBjYW4gb25seSBiZSBvbmUgdGhyZWFkLCBzbyB3ZSBhbHdheXMgZ2V0IHRoZSBsb2NrICovCisgIHJldHVybiAwOworfQorCisvKiBUcnkgdG8gZ3JhYiBhIGxvY2sgb24gYSBtdXRleC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfdHJ5bG9jayAob2JqY19tdXRleF90IG11dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgLyogVGhlcmUgY2FuIG9ubHkgYmUgb25lIHRocmVhZCwgc28gd2UgYWx3YXlzIGdldCB0aGUgbG9jayAqLworICByZXR1cm4gMDsKK30KKworLyogVW5sb2NrIHRoZSBtdXRleCAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X3VubG9jayAob2JqY19tdXRleF90IG11dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEJhY2tlbmQgY29uZGl0aW9uIG11dGV4IGZ1bmN0aW9ucyAqLworCisvKiBBbGxvY2F0ZSBhIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX2FsbG9jYXRlIChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBEZWFsbG9jYXRlIGEgY29uZGl0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19jb25kaXRpb25fZGVhbGxvY2F0ZSAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24gX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworLyogV2FpdCBvbiB0aGUgY29uZGl0aW9uICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX3dhaXQgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uIF9HTElCQ1hYX1VOVVNFRCwKKwkJCSAgICAgICBvYmpjX211dGV4X3QgbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworLyogV2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19jb25kaXRpb25fYnJvYWRjYXN0IChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBXYWtlIHVwIG9uZSB0aHJlYWQgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX3NpZ25hbCAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24gX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworI2Vsc2UgLyogX0xJQk9CSkMgKi8KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqX19vbmNlIF9HTElCQ1hYX1VOVVNFRCwgdm9pZCAoKl9fZnVuYykgKHZvaWQpIF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9HTElCQ1hYX1VOVVNFRAorX19ndGhyZWFkX2tleV9jcmVhdGUgKF9fZ3RocmVhZF9rZXlfdCAqX19rZXkgX0dMSUJDWFhfVU5VU0VELCB2b2lkICgqX19mdW5jKSAodm9pZCAqKSBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9HTElCQ1hYX1VOVVNFRAorX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBfX2tleSBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3QgX19rZXkgX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IF9fa2V5IF9HTElCQ1hYX1VOVVNFRCwgY29uc3Qgdm9pZCAqX192IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfZGVzdHJveSAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgcmV0dXJuIF9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfZGVzdHJveSAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyZWFkX211dGV4X2Rlc3Ryb3kgKF9fbXV0ZXgpOworfQorCisjZW5kaWYgLyogX0xJQk9CSkMgKi8KKworI3VuZGVmIF9HTElCQ1hYX1VOVVNFRAorCisjZW5kaWYgLyogISBfR0xJQkNYWF9HQ0NfR1RIUl9TSU5HTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvZ3Roci1wb3NpeC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvZ3Roci1wb3NpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzFiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9ndGhyLXBvc2l4LmgKQEAgLTAsMCArMSw4ODkgQEAKKy8qIFRocmVhZHMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgbGliZ2NjMiBhbmQgbGlib2JqYy4gICovCisvKiBDb21waWxlIHRoaXMgb25lIHdpdGggZ2NjLiAgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9HTElCQ1hYX0dDQ19HVEhSX1BPU0lYX0gKKyNkZWZpbmUgX0dMSUJDWFhfR0NDX0dUSFJfUE9TSVhfSAorCisvKiBQT1NJWCB0aHJlYWRzIHNwZWNpZmljIGRlZmluaXRpb25zLgorICAgRWFzeSwgc2luY2UgdGhlIGludGVyZmFjZSBpcyBqdXN0IG9uZS10by1vbmUgbWFwcGluZy4gICovCisKKyNkZWZpbmUgX19HVEhSRUFEUyAxCisjZGVmaW5lIF9fR1RIUkVBRFNfQ1hYMFggMQorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaWYgKChkZWZpbmVkKF9MSUJPQkpDKSB8fCBkZWZpbmVkKF9MSUJPQkpDX1dFQUspKSBcCisgICAgIHx8ICFkZWZpbmVkKF9HVEhSRUFEX1VTRV9NVVRFWF9USU1FRExPQ0spKQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaWYgZGVmaW5lZChfUE9TSVhfVElNRU9VVFMpICYmIF9QT1NJWF9USU1FT1VUUyA+PSAwCisjICBkZWZpbmUgX0dUSFJFQURfVVNFX01VVEVYX1RJTUVETE9DSyAxCisjIGVsc2UKKyMgIGRlZmluZSBfR1RIUkVBRF9VU0VfTVVURVhfVElNRURMT0NLIDAKKyMgZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHB0aHJlYWRfdCBfX2d0aHJlYWRfdDsKK3R5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7Cit0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7Cit0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsKK3R5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdDsKK3R5cGVkZWYgcHRocmVhZF9jb25kX3QgX19ndGhyZWFkX2NvbmRfdDsKK3R5cGVkZWYgc3RydWN0IHRpbWVzcGVjIF9fZ3RocmVhZF90aW1lX3Q7CisKKy8qIFBPU0lYIGxpa2UgY29uZGl0aW9uYWwgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQuICBQbGVhc2UgbG9vayBhdCBjb21tZW50cworICAgaW4gZ3Roci5oIGZvciBkZXRhaWxzLiAqLworI2RlZmluZSBfX0dUSFJFQURfSEFTX0NPTkQJMQorCisjZGVmaW5lIF9fR1RIUkVBRF9NVVRFWF9JTklUIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKKyNkZWZpbmUgX19HVEhSRUFEX01VVEVYX0lOSVRfRlVOQ1RJT04gX19ndGhyZWFkX211dGV4X2luaXRfZnVuY3Rpb24KKyNkZWZpbmUgX19HVEhSRUFEX09OQ0VfSU5JVCBQVEhSRUFEX09OQ0VfSU5JVAorI2lmIGRlZmluZWQoUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIpCisjZGVmaW5lIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVCBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUgorI2VsaWYgZGVmaW5lZChQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUl9OUCkKKyNkZWZpbmUgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSX05QCisjZWxzZQorI2RlZmluZSBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRfRlVOQ1RJT04gX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9pbml0X2Z1bmN0aW9uCisjZW5kaWYKKyNkZWZpbmUgX19HVEhSRUFEX0NPTkRfSU5JVCBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIKKyNkZWZpbmUgX19HVEhSRUFEX1RJTUVfSU5JVCB7MCwwfQorCisjaWZkZWYgX0dUSFJFQURfVVNFX01VVEVYX0lOSVRfRlVOQworIyB1bmRlZiBfX0dUSFJFQURfTVVURVhfSU5JVAorI2VuZGlmCisjaWZkZWYgX0dUSFJFQURfVVNFX1JFQ1VSU0lWRV9NVVRFWF9JTklUX0ZVTkMKKyMgdW5kZWYgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUCisjIHVuZGVmIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9GVU5DVElPTgorIyBkZWZpbmUgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX0ZVTkNUSU9OIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfaW5pdF9mdW5jdGlvbgorI2VuZGlmCisjaWZkZWYgX0dUSFJFQURfVVNFX0NPTkRfSU5JVF9GVU5DCisjIHVuZGVmIF9fR1RIUkVBRF9DT05EX0lOSVQKKyMgZGVmaW5lIF9fR1RIUkVBRF9DT05EX0lOSVRfRlVOQ1RJT04gX19ndGhyZWFkX2NvbmRfaW5pdF9mdW5jdGlvbgorI2VuZGlmCisKKyNpZiBfX0dYWF9XRUFLX18gJiYgX0dMSUJDWFhfR1RIUkVBRF9VU0VfV0VBSworIyBpZm5kZWYgX19ndGhyd19wcmFnbWEKKyMgIGRlZmluZSBfX2d0aHJ3X3ByYWdtYShwcmFnbWEpCisjIGVuZGlmCisjIGRlZmluZSBfX2d0aHJ3MihuYW1lLG5hbWUyLHR5cGUpIFwKKyAgc3RhdGljIF9fdHlwZW9mKHR5cGUpIG5hbWUgX19hdHRyaWJ1dGVfXyAoKF9fd2Vha3JlZl9fKCNuYW1lMikpKTsgXAorICBfX2d0aHJ3X3ByYWdtYSh3ZWFrIHR5cGUpCisjIGRlZmluZSBfX2d0aHJ3XyhuYW1lKSBfX2d0aHJ3XyAjIyBuYW1lCisjZWxzZQorIyBkZWZpbmUgX19ndGhydzIobmFtZSxuYW1lMix0eXBlKQorIyBkZWZpbmUgX19ndGhyd18obmFtZSkgbmFtZQorI2VuZGlmCisKKy8qIFR5cGljYWxseSwgX19ndGhyd19mb28gaXMgYSB3ZWFrIHJlZmVyZW5jZSB0byBzeW1ib2wgZm9vLiAgKi8KKyNkZWZpbmUgX19ndGhydyhuYW1lKSBfX2d0aHJ3MihfX2d0aHJ3XyAjIyBuYW1lLG5hbWUsbmFtZSkKKworX19ndGhydyhwdGhyZWFkX29uY2UpCitfX2d0aHJ3KHB0aHJlYWRfZ2V0c3BlY2lmaWMpCitfX2d0aHJ3KHB0aHJlYWRfc2V0c3BlY2lmaWMpCisKK19fZ3RocncocHRocmVhZF9jcmVhdGUpCitfX2d0aHJ3KHB0aHJlYWRfam9pbikKK19fZ3RocncocHRocmVhZF9lcXVhbCkKK19fZ3RocncocHRocmVhZF9zZWxmKQorX19ndGhydyhwdGhyZWFkX2RldGFjaCkKKyNpZm5kZWYgX19CSU9OSUNfXworX19ndGhydyhwdGhyZWFkX2NhbmNlbCkKKyNlbmRpZgorX19ndGhydyhzY2hlZF95aWVsZCkKKworX19ndGhydyhwdGhyZWFkX211dGV4X2xvY2spCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaykKKyNpZiBfR1RIUkVBRF9VU0VfTVVURVhfVElNRURMT0NLCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKQorI2VuZGlmCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhfdW5sb2NrKQorX19ndGhydyhwdGhyZWFkX211dGV4X2luaXQpCitfX2d0aHJ3KHB0aHJlYWRfbXV0ZXhfZGVzdHJveSkKKworX19ndGhydyhwdGhyZWFkX2NvbmRfaW5pdCkKK19fZ3RocncocHRocmVhZF9jb25kX2Jyb2FkY2FzdCkKK19fZ3RocncocHRocmVhZF9jb25kX3NpZ25hbCkKK19fZ3RocncocHRocmVhZF9jb25kX3dhaXQpCitfX2d0aHJ3KHB0aHJlYWRfY29uZF90aW1lZHdhaXQpCitfX2d0aHJ3KHB0aHJlYWRfY29uZF9kZXN0cm95KQorCitfX2d0aHJ3KHB0aHJlYWRfa2V5X2NyZWF0ZSkKK19fZ3RocncocHRocmVhZF9rZXlfZGVsZXRlKQorX19ndGhydyhwdGhyZWFkX211dGV4YXR0cl9pbml0KQorX19ndGhydyhwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKQorX19ndGhydyhwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KQorCisKKyNpZiBkZWZpbmVkKF9MSUJPQkpDKSB8fCBkZWZpbmVkKF9MSUJPQkpDX1dFQUspCisvKiBPYmplY3RpdmUtQy4gICovCitfX2d0aHJ3KHB0aHJlYWRfZXhpdCkKKyNpZmRlZiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORworI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORworX19ndGhydyhzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQorX19ndGhydyhzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQorI2VuZGlmIC8qIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyAqLworI2VuZGlmIC8qIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HICovCitfX2d0aHJ3KHB0aHJlYWRfYXR0cl9kZXN0cm95KQorX19ndGhydyhwdGhyZWFkX2F0dHJfaW5pdCkKK19fZ3RocncocHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKQorI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORworX19ndGhydyhwdGhyZWFkX2dldHNjaGVkcGFyYW0pCitfX2d0aHJ3KHB0aHJlYWRfc2V0c2NoZWRwYXJhbSkKKyNlbmRpZiAvKiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcgKi8KKyNlbmRpZiAvKiBfTElCT0JKQyB8fCBfTElCT0JKQ19XRUFLICovCisKKyNpZiBfX0dYWF9XRUFLX18gJiYgX0dMSUJDWFhfR1RIUkVBRF9VU0VfV0VBSworCisvKiBPbiBTb2xhcmlzIDIuNiB1cCB0byA5LCB0aGUgbGliYyBleHBvc2VzIGEgUE9TSVggdGhyZWFkcyBpbnRlcmZhY2UgZXZlbiBpZgorICAgLXB0aHJlYWRzIGlzIG5vdCBzcGVjaWZpZWQuICBUaGUgZnVuY3Rpb25zIGFyZSBkdW1taWVzIGFuZCBtb3N0IHJldHVybiBhbgorICAgZXJyb3IgdmFsdWUuICBIb3dldmVyIHB0aHJlYWRfb25jZSByZXR1cm5zIDAgd2l0aG91dCBpbnZva2luZyB0aGUgcm91dGluZQorICAgaXQgaXMgcGFzc2VkIHNvIHdlIGNhbm5vdCBwcmV0ZW5kIHRoYXQgdGhlIGludGVyZmFjZSBpcyBhY3RpdmUgaWYgLXB0aHJlYWRzCisgICBpcyBub3Qgc3BlY2lmaWVkLiAgT24gU29sYXJpcyAyLjUuMSwgdGhlIGludGVyZmFjZSBpcyBub3QgZXhwb3NlZCBhdCBhbGwgc28KKyAgIHdlIG5lZWQgdG8gcGxheSB0aGUgdXN1YWwgZ2FtZSB3aXRoIHdlYWsgc3ltYm9scy4gIE9uIFNvbGFyaXMgMTAgYW5kIHVwLCBhCisgICB3b3JraW5nIGludGVyZmFjZSBpcyBhbHdheXMgZXhwb3NlZC4gIE9uIEZyZWVCU0QgNiBhbmQgbGF0ZXIsIGxpYmMgYWxzbworICAgZXhwb3NlcyBhIGR1bW15IFBPU0lYIHRocmVhZHMgaW50ZXJmYWNlLCBzaW1pbGFyIHRvIHdoYXQgU29sYXJpcyAyLjYgdXAKKyAgIHRvIDkgZG9lcy4gIEZyZWVCU0QgPj0gNzAwMDE0IGV2ZW4gcHJvdmlkZXMgYSBwdGhyZWFkX2NhbmNlbCBzdHViIGluIGxpYmMsCisgICB3aGljaCBtZWFucyB0aGUgYWx0ZXJuYXRlIF9fZ3RocmVhZF9hY3RpdmVfcCBiZWxvdyBjYW5ub3QgYmUgdXNlZCB0aGVyZS4gICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCAoZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfX3N2cjRfXykpCisKK3N0YXRpYyB2b2xhdGlsZSBpbnQgX19ndGhyZWFkX2FjdGl2ZSA9IC0xOworCitzdGF0aWMgdm9pZAorX19ndGhyZWFkX3RyaWdnZXIgKHZvaWQpCit7CisgIF9fZ3RocmVhZF9hY3RpdmUgPSAxOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQoreworICBzdGF0aWMgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9hY3RpdmVfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworICBzdGF0aWMgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX2FjdGl2ZV9vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisKKyAgLyogQXZvaWQgcmVhZGluZyBfX2d0aHJlYWRfYWN0aXZlIHR3aWNlIG9uIHRoZSBtYWluIGNvZGUgcGF0aC4gICovCisgIGludCBfX2d0aHJlYWRfYWN0aXZlX2xhdGVzdF92YWx1ZSA9IF9fZ3RocmVhZF9hY3RpdmU7CisKKyAgLyogVGhpcyB0ZXN0IGlzIG5vdCBwcm90ZWN0ZWQgdG8gYXZvaWQgdGFraW5nIGEgbG9jayBvbiB0aGUgbWFpbiBjb2RlCisgICAgIHBhdGggc28gZXZlcnkgdXBkYXRlIG9mIF9fZ3RocmVhZF9hY3RpdmUgaW4gYSB0aHJlYWRlZCBwcm9ncmFtIG11c3QKKyAgICAgYmUgYXRvbWljIHdpdGggcmVnYXJkIHRvIHRoZSByZXN1bHQgb2YgdGhlIHRlc3QuICAqLworICBpZiAoX19idWlsdGluX2V4cGVjdCAoX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgPCAwLCAwKSkKKyAgICB7CisgICAgICBpZiAoX19ndGhyd18ocHRocmVhZF9vbmNlKSkKKwl7CisJICAvKiBJZiB0aGlzIHJlYWxseSBpcyBhIHRocmVhZGVkIHByb2dyYW0sIHRoZW4gd2UgbXVzdCBlbnN1cmUgdGhhdAorCSAgICAgX19ndGhyZWFkX2FjdGl2ZSBoYXMgYmVlbiBzZXQgdG8gMSBiZWZvcmUgZXhpdGluZyB0aGlzIGJsb2NrLiAgKi8KKwkgIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfbG9jaykgKCZfX2d0aHJlYWRfYWN0aXZlX211dGV4KTsKKwkgIF9fZ3RocndfKHB0aHJlYWRfb25jZSkgKCZfX2d0aHJlYWRfYWN0aXZlX29uY2UsIF9fZ3RocmVhZF90cmlnZ2VyKTsKKwkgIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKSAoJl9fZ3RocmVhZF9hY3RpdmVfbXV0ZXgpOworCX0KKworICAgICAgLyogTWFrZSBzdXJlIHdlJ2xsIG5ldmVyIGVudGVyIHRoaXMgYmxvY2sgYWdhaW4uICAqLworICAgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmUgPCAwKQorCV9fZ3RocmVhZF9hY3RpdmUgPSAwOworCisgICAgICBfX2d0aHJlYWRfYWN0aXZlX2xhdGVzdF92YWx1ZSA9IF9fZ3RocmVhZF9hY3RpdmU7CisgICAgfQorCisgIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX2xhdGVzdF92YWx1ZSAhPSAwOworfQorCisjZWxzZSAvKiBuZWl0aGVyIEZyZWVCU0Qgbm9yIFNvbGFyaXMgKi8KKworLyogRm9yIGEgcHJvZ3JhbSB0byBiZSBtdWx0aS10aHJlYWRlZCB0aGUgb25seSB0aGluZyB0aGF0IGl0IGNlcnRhaW5seSBtdXN0CisgICBiZSB1c2luZyBpcyBwdGhyZWFkX2NyZWF0ZS4gIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBvdGhlciBsaWJyYXJpZXMgdGhhdAorICAgaW50ZXJjZXB0IHB0aHJlYWRfY3JlYXRlIHdpdGggdGhlaXIgb3duIGRlZmluaXRpb25zIHRvIHdyYXAgcHRocmVhZHMKKyAgIGZ1bmN0aW9uYWxpdHkgZm9yIHNvbWUgcHVycG9zZS4gIEluIHRob3NlIGNhc2VzLCBwdGhyZWFkX2NyZWF0ZSBiZWluZworICAgZGVmaW5lZCBtaWdodCBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGxpYnB0aHJlYWQgaXMgYWN0dWFsbHkgbGlua2VkCisgICBpbi4KKworICAgRm9yIHRoZSBHTlUgQyBsaWJyYXJ5LCB3ZSBjYW4gdXNlIGEga25vd24gaW50ZXJuYWwgbmFtZS4gIFRoaXMgaXMgYWx3YXlzCisgICBhdmFpbGFibGUgaW4gdGhlIEFCSSwgYnV0IG5vIG90aGVyIGxpYnJhcnkgd291bGQgZGVmaW5lIGl0LiAgVGhhdCBpcworICAgaWRlYWwsIHNpbmNlIGFueSBwdWJsaWMgcHRocmVhZCBmdW5jdGlvbiBtaWdodCBiZSBpbnRlcmNlcHRlZCBqdXN0IGFzCisgICBwdGhyZWFkX2NyZWF0ZSBtaWdodCBiZS4gIF9fcHRocmVhZF9rZXlfY3JlYXRlIGlzIGFuICJpbnRlcm5hbCIKKyAgIGltcGxlbWVudGF0aW9uIHN5bWJvbCwgYnV0IGl0IGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBleHBvcnRlZCBBQkkuICBBbHNvLAorICAgaXQncyBhbW9uZyB0aGUgc3ltYm9scyB0aGF0IHRoZSBzdGF0aWMgbGlicHRocmVhZC5hIGFsd2F5cyBsaW5rcyBpbgorICAgd2hlbmV2ZXIgcHRocmVhZF9jcmVhdGUgaXMgdXNlZCwgc28gdGhlcmUgaXMgbm8gZGFuZ2VyIG9mIGEgZmFsc2UKKyAgIG5lZ2F0aXZlIHJlc3VsdCBpbiBhbnkgc3RhdGljYWxseS1saW5rZWQsIG11bHRpLXRocmVhZGVkIHByb2dyYW0uCisKKyAgIEZvciBvdGhlcnMsIHdlIGNob29zZSBwdGhyZWFkX2NhbmNlbCBhcyBhIGZ1bmN0aW9uIHRoYXQgc2VlbXMgdW5saWtlbHkKKyAgIHRvIGJlIHJlZGVmaW5lZCBieSBhbiBpbnRlcmNlcHRvciBsaWJyYXJ5LiAgVGhlIGJpb25pYyAoQW5kcm9pZCkgQworICAgbGlicmFyeSBkb2VzIG5vdCBwcm92aWRlIHB0aHJlYWRfY2FuY2VsLCBzbyB3ZSBkbyB1c2UgcHRocmVhZF9jcmVhdGUKKyAgIHRoZXJlIChhbmQgaW50ZXJjZXB0b3IgbGlicmFyaWVzIGxvc2UpLiAgKi8KKworI2lmZGVmIF9fR0xJQkNfXworX19ndGhydzIoX19ndGhyd18oX19wdGhyZWFkX2tleV9jcmVhdGUpLAorCSBfX3B0aHJlYWRfa2V5X2NyZWF0ZSwKKwkgcHRocmVhZF9rZXlfY3JlYXRlKQorIyBkZWZpbmUgR1RIUl9BQ1RJVkVfUFJPWFkJX19ndGhyd18oX19wdGhyZWFkX2tleV9jcmVhdGUpCisjZWxpZiBkZWZpbmVkIChfX0JJT05JQ19fKQorIyBkZWZpbmUgR1RIUl9BQ1RJVkVfUFJPWFkJX19ndGhyd18ocHRocmVhZF9jcmVhdGUpCisjZWxzZQorIyBkZWZpbmUgR1RIUl9BQ1RJVkVfUFJPWFkJX19ndGhyd18ocHRocmVhZF9jYW5jZWwpCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKK3sKKyAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRyCisgICAgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopICZHVEhSX0FDVElWRV9QUk9YWTsKKyAgcmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7Cit9CisKKyNlbmRpZiAvKiBGcmVlQlNEIG9yIFNvbGFyaXMgKi8KKworI2Vsc2UgLyogbm90IF9fR1hYX1dFQUtfXyAqLworCisvKiBTaW1pbGFyIHRvIFNvbGFyaXMsIEhQLVVYIDExIGZvciBQQS1SSVNDIHByb3ZpZGVzIHN0dWJzIGZvciBwdGhyZWFkCisgICBjYWxscyBpbiBzaGFyZWQgZmxhdm9ycyBvZiB0aGUgSFAtVVggQyBsaWJyYXJ5LiAgTW9zdCBvZiB0aGUgc3R1YnMKKyAgIGhhdmUgbm8gZnVuY3Rpb25hbGl0eS4gIFRoZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gdGhlICJsaWJjIGN1bXVsYXRpdmUKKyAgIHBhdGNoIiBmb3IgZWFjaCBzdWJ2ZXJzaW9uIG9mIEhQLVVYIDExLiAgVGhlcmUgYXJlIHR3byBzcGVjaWFsIGludGVyZmFjZXMKKyAgIHByb3ZpZGVkIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB0byBhIHNoYXJlZCBwdGhyZWFkCisgICBsaWJyYXJ5IG9yIG5vdC4gIEhvd2V2ZXIsIHRoZXNlIGludGVyZmFjZXMgYXJlbid0IGF2YWlsYWJsZSBpbiBlYXJseQorICAgbGlicHRocmVhZCBsaWJyYXJpZXMuICBXZSBhbHNvIG5lZWQgYSB0ZXN0IHRoYXQgd29ya3MgZm9yIGFyY2hpdmUKKyAgIGxpYnJhcmllcy4gIFdlIGNhbid0IHVzZSBwdGhyZWFkX29uY2UgYXMgc29tZSBsaWJjIHZlcnNpb25zIGNhbGwgdGhlCisgICBpbml0IGZ1bmN0aW9uLiAgV2UgYWxzbyBjYW4ndCB1c2UgcHRocmVhZF9jcmVhdGUgb3IgcHRocmVhZF9hdHRyX2luaXQKKyAgIGFzIHRoZXNlIGNyZWF0ZSBhIHRocmVhZCBhbmQgdGhlcmVieSBwcmV2ZW50IGNoYW5naW5nIHRoZSBkZWZhdWx0IHN0YWNrCisgICBzaXplLiAgVGhlIGZ1bmN0aW9uIHB0aHJlYWRfZGVmYXVsdF9zdGFja3NpemVfbnAgaXMgYXZhaWxhYmxlIGluIGJvdGgKKyAgIHRoZSBhcmNoaXZlIGFuZCBzaGFyZWQgdmVyc2lvbnMgb2YgbGlicHRocmVhZC4gICBJdCBjYW4gYmUgdXNlZCB0bworICAgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IHB0aHJlYWQgc3RhY2sgc2l6ZS4gIFRoZXJlIGlzIGEgc3R1YiBpbiBzb21lCisgICBzaGFyZWQgbGliYyB2ZXJzaW9ucyB3aGljaCByZXR1cm5zIGEgemVybyBzaXplIGlmIHB0aHJlYWRzIGFyZSBub3QKKyAgIGFjdGl2ZS4gIFdlIHByb3ZpZGUgYW4gZXF1aXZhbGVudCBzdHViIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBsaWJjCisgICBkb2Vzbid0IHByb3ZpZGUgb25lLiAgKi8KKworI2lmIGRlZmluZWQoX19ocHBhX18pICYmIGRlZmluZWQoX19ocHV4X18pCisKK3N0YXRpYyB2b2xhdGlsZSBpbnQgX19ndGhyZWFkX2FjdGl2ZSA9IC0xOworCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQoreworICAvKiBBdm9pZCByZWFkaW5nIF9fZ3RocmVhZF9hY3RpdmUgdHdpY2Ugb24gdGhlIG1haW4gY29kZSBwYXRoLiAgKi8KKyAgaW50IF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlID0gX19ndGhyZWFkX2FjdGl2ZTsKKyAgc2l6ZV90IF9fczsKKworICBpZiAoX19idWlsdGluX2V4cGVjdCAoX19ndGhyZWFkX2FjdGl2ZV9sYXRlc3RfdmFsdWUgPCAwLCAwKSkKKyAgICB7CisgICAgICBwdGhyZWFkX2RlZmF1bHRfc3RhY2tzaXplX25wICgwLCAmX19zKTsKKyAgICAgIF9fZ3RocmVhZF9hY3RpdmUgPSBfX3MgPyAxIDogMDsKKyAgICAgIF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlID0gX19ndGhyZWFkX2FjdGl2ZTsKKyAgICB9CisKKyAgcmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfbGF0ZXN0X3ZhbHVlICE9IDA7Cit9CisKKyNlbHNlIC8qIG5vdCBocHBhLWhwdXggKi8KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKK3sKKyAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiBocHBhLWhwdXggKi8KKworI2VuZGlmIC8qIF9fR1hYX1dFQUtfXyAqLworCisjaWZkZWYgX0xJQk9CSkMKKworLyogVGhpcyBpcyB0aGUgY29uZmlnLmggZmlsZSBpbiBsaWJvYmpjLyAqLworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZkZWYgSEFWRV9TQ0hFRF9ICisjIGluY2x1ZGUgPHNjaGVkLmg+CisjZW5kaWYKKworLyogS2V5IHN0cnVjdHVyZSBmb3IgbWFpbnRhaW5pbmcgdGhyZWFkIHNwZWNpZmljIHN0b3JhZ2UgKi8KK3N0YXRpYyBwdGhyZWFkX2tleV90IF9vYmpjX3RocmVhZF9zdG9yYWdlOworc3RhdGljIHB0aHJlYWRfYXR0cl90IF9vYmpjX3RocmVhZF9hdHRyaWJzOworCisvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZSBmb3IgYSBzaW5nbGUgdGhyZWFkICovCitzdGF0aWMgdm9pZCAqdGhyZWFkX2xvY2FsX3N0b3JhZ2UgPSBOVUxMOworCisvKiBCYWNrZW5kIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqLworCisvKiBJbml0aWFsaXplIHRoZSB0aHJlYWRzIHN1YnN5c3RlbS4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfaW5pdF90aHJlYWRfc3lzdGVtICh2b2lkKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHsKKyAgICAgIC8qIEluaXRpYWxpemUgdGhlIHRocmVhZCBzdG9yYWdlIGtleS4gICovCisgICAgICBpZiAoX19ndGhyd18ocHRocmVhZF9rZXlfY3JlYXRlKSAoJl9vYmpjX3RocmVhZF9zdG9yYWdlLCBOVUxMKSA9PSAwKQorCXsKKwkgIC8qIFRoZSBub3JtYWwgZGVmYXVsdCBkZXRhY2ggc3RhdGUgZm9yIHRocmVhZHMgaXMKKwkgICAqIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIHdoaWNoIGNhdXNlcyB0aHJlYWRzIHRvIG5vdCBkaWUKKwkgICAqIHdoZW4geW91IHRoaW5rIHRoZXkgc2hvdWxkLiAgKi8KKwkgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX2F0dHJfaW5pdCkgKCZfb2JqY190aHJlYWRfYXR0cmlicykgPT0gMAorCSAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSkgKCZfb2JqY190aHJlYWRfYXR0cmlicywKKwkJCQkJICAgICAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpID09IDApCisJICAgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgcmV0dXJuIC0xOworfQorCisvKiBDbG9zZSB0aGUgdGhyZWFkcyBzdWJzeXN0ZW0uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2Nsb3NlX3RocmVhZF9zeXN0ZW0gKHZvaWQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkKKyAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfa2V5X2RlbGV0ZSkgKF9vYmpjX3RocmVhZF9zdG9yYWdlKSA9PSAwCisgICAgICAmJiBfX2d0aHJ3XyhwdGhyZWFkX2F0dHJfZGVzdHJveSkgKCZfb2JqY190aHJlYWRfYXR0cmlicykgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gLTE7Cit9CisKKy8qIEJhY2tlbmQgdGhyZWFkIGZ1bmN0aW9ucyAqLworCisvKiBDcmVhdGUgYSBuZXcgdGhyZWFkIG9mIGV4ZWN1dGlvbi4gICovCitzdGF0aWMgaW5saW5lIG9iamNfdGhyZWFkX3QKK19fZ3RocmVhZF9vYmpjX3RocmVhZF9kZXRhY2ggKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCit7CisgIG9iamNfdGhyZWFkX3QgdGhyZWFkX2lkOworICBwdGhyZWFkX3QgbmV3X3RocmVhZF9oYW5kbGU7CisKKyAgaWYgKCFfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCEoX19ndGhyd18ocHRocmVhZF9jcmVhdGUpICgmbmV3X3RocmVhZF9oYW5kbGUsICZfb2JqY190aHJlYWRfYXR0cmlicywKKwkJCQkgICh2b2lkICopIGZ1bmMsIGFyZykpKQorICAgIHRocmVhZF9pZCA9IChvYmpjX3RocmVhZF90KSBuZXdfdGhyZWFkX2hhbmRsZTsKKyAgZWxzZQorICAgIHRocmVhZF9pZCA9IE5VTEw7CisKKyAgcmV0dXJuIHRocmVhZF9pZDsKK30KKworLyogU2V0IHRoZSBjdXJyZW50IHRocmVhZCdzIHByaW9yaXR5LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfc2V0X3ByaW9yaXR5IChpbnQgcHJpb3JpdHkpCit7CisgIGlmICghX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiAtMTsKKyAgZWxzZQorICAgIHsKKyNpZmRlZiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORworI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORworICAgICAgcHRocmVhZF90IHRocmVhZF9pZCA9IF9fZ3RocndfKHB0aHJlYWRfc2VsZikgKCk7CisgICAgICBpbnQgcG9saWN5OworICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtczsKKyAgICAgIGludCBwcmlvcml0eV9taW4sIHByaW9yaXR5X21heDsKKworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSkgKHRocmVhZF9pZCwgJnBvbGljeSwgJnBhcmFtcykgPT0gMCkKKwl7CisJICBpZiAoKHByaW9yaXR5X21heCA9IF9fZ3RocndfKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpIChwb2xpY3kpKSA9PSAtMSkKKwkgICAgcmV0dXJuIC0xOworCisJICBpZiAoKHByaW9yaXR5X21pbiA9IF9fZ3RocndfKHNjaGVkX2dldF9wcmlvcml0eV9taW4pIChwb2xpY3kpKSA9PSAtMSkKKwkgICAgcmV0dXJuIC0xOworCisJICBpZiAocHJpb3JpdHkgPiBwcmlvcml0eV9tYXgpCisJICAgIHByaW9yaXR5ID0gcHJpb3JpdHlfbWF4OworCSAgZWxzZSBpZiAocHJpb3JpdHkgPCBwcmlvcml0eV9taW4pCisJICAgIHByaW9yaXR5ID0gcHJpb3JpdHlfbWluOworCSAgcGFyYW1zLnNjaGVkX3ByaW9yaXR5ID0gcHJpb3JpdHk7CisKKwkgIC8qCisJICAgKiBUaGUgc29sYXJpcyA3IGFuZCBzZXZlcmFsIG90aGVyIG1hbiBwYWdlcyBpbmNvcnJlY3RseSBzdGF0ZSB0aGF0CisJICAgKiB0aGlzIHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gcG9saWN5IGJ1dCBwdGhyZWFkLmggaXMgdW5pdmVyc2FsbHkKKwkgICAqIGF0IG9kZHMgd2l0aCB0aGlzLgorCSAgICovCisJICBpZiAoX19ndGhyd18ocHRocmVhZF9zZXRzY2hlZHBhcmFtKSAodGhyZWFkX2lkLCBwb2xpY3ksICZwYXJhbXMpID09IDApCisJICAgIHJldHVybiAwOworCX0KKyNlbmRpZiAvKiBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcgKi8KKyNlbmRpZiAvKiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORyAqLworICAgICAgcmV0dXJuIC0xOworICAgIH0KK30KKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHRocmVhZCdzIHByaW9yaXR5LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfZ2V0X3ByaW9yaXR5ICh2b2lkKQoreworI2lmZGVmIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCisjaWZkZWYgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgaW50IHBvbGljeTsKKyAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbXM7CisKKyAgICAgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX2dldHNjaGVkcGFyYW0pIChfX2d0aHJ3XyhwdGhyZWFkX3NlbGYpICgpLCAmcG9saWN5LCAmcGFyYW1zKSA9PSAwKQorCXJldHVybiBwYXJhbXMuc2NoZWRfcHJpb3JpdHk7CisgICAgICBlbHNlCisJcmV0dXJuIC0xOworICAgIH0KKyAgZWxzZQorI2VuZGlmIC8qIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyAqLworI2VuZGlmIC8qIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HICovCisgICAgcmV0dXJuIE9CSkNfVEhSRUFEX0lOVEVSQUNUSVZFX1BSSU9SSVRZOworfQorCisvKiBZaWVsZCBvdXIgcHJvY2VzcyB0aW1lIHRvIGFub3RoZXIgdGhyZWFkLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19ndGhyZWFkX29iamNfdGhyZWFkX3lpZWxkICh2b2lkKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIF9fZ3RocndfKHNjaGVkX3lpZWxkKSAoKTsKK30KKworLyogVGVybWluYXRlIHRoZSBjdXJyZW50IHRocmVhZC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfdGhyZWFkX2V4aXQgKHZvaWQpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgLyogZXhpdCB0aGUgdGhyZWFkICovCisgICAgX19ndGhyd18ocHRocmVhZF9leGl0KSAoJl9fb2JqY190aHJlYWRfZXhpdF9zdGF0dXMpOworCisgIC8qIEZhaWxlZCBpZiB3ZSByZWFjaGVkIGhlcmUgKi8KKyAgcmV0dXJuIC0xOworfQorCisvKiBSZXR1cm5zIGFuIGludGVnZXIgdmFsdWUgd2hpY2ggdW5pcXVlbHkgZGVzY3JpYmVzIGEgdGhyZWFkLiAgKi8KK3N0YXRpYyBpbmxpbmUgb2JqY190aHJlYWRfdAorX19ndGhyZWFkX29iamNfdGhyZWFkX2lkICh2b2lkKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiAob2JqY190aHJlYWRfdCkgX19ndGhyd18ocHRocmVhZF9zZWxmKSAoKTsKKyAgZWxzZQorICAgIHJldHVybiAob2JqY190aHJlYWRfdCkgMTsKK30KKworLyogU2V0cyB0aGUgdGhyZWFkJ3MgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfc2V0X2RhdGEgKHZvaWQgKnZhbHVlKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX3NldHNwZWNpZmljKSAoX29iamNfdGhyZWFkX3N0b3JhZ2UsIHZhbHVlKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIHRocmVhZF9sb2NhbF9zdG9yYWdlID0gdmFsdWU7CisgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8qIFJldHVybnMgdGhlIHRocmVhZCdzIGxvY2FsIHN0b3JhZ2UgcG9pbnRlci4gICovCitzdGF0aWMgaW5saW5lIHZvaWQgKgorX19ndGhyZWFkX29iamNfdGhyZWFkX2dldF9kYXRhICh2b2lkKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2dldHNwZWNpZmljKSAoX29iamNfdGhyZWFkX3N0b3JhZ2UpOworICBlbHNlCisgICAgcmV0dXJuIHRocmVhZF9sb2NhbF9zdG9yYWdlOworfQorCisvKiBCYWNrZW5kIG11dGV4IGZ1bmN0aW9ucyAqLworCisvKiBBbGxvY2F0ZSBhIG11dGV4LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF9hbGxvY2F0ZSAob2JqY19tdXRleF90IG11dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHsKKyAgICAgIG11dGV4LT5iYWNrZW5kID0gb2JqY19tYWxsb2MgKHNpemVvZiAocHRocmVhZF9tdXRleF90KSk7CisKKyAgICAgIGlmIChfX2d0aHJ3XyhwdGhyZWFkX211dGV4X2luaXQpICgocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kLCBOVUxMKSkKKwl7CisJICBvYmpjX2ZyZWUgKG11dGV4LT5iYWNrZW5kKTsKKwkgIG11dGV4LT5iYWNrZW5kID0gTlVMTDsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBEZWFsbG9jYXRlIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X2RlYWxsb2NhdGUgKG9iamNfbXV0ZXhfdCBtdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICB7CisgICAgICBpbnQgY291bnQ7CisKKyAgICAgIC8qCisgICAgICAgKiBQb3NpeCBUaHJlYWRzIHNwZWNpZmljYWxseSByZXF1aXJlIHRoYXQgdGhlIHRocmVhZCBiZSB1bmxvY2tlZAorICAgICAgICogZm9yIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSkgdG8gd29yay4KKyAgICAgICAqLworCisgICAgICBkbworCXsKKwkgIGNvdW50ID0gX19ndGhyd18ocHRocmVhZF9tdXRleF91bmxvY2spICgocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kKTsKKwkgIGlmIChjb3VudCA8IDApCisJICAgIHJldHVybiAtMTsKKwl9CisgICAgICB3aGlsZSAoY291bnQpOworCisgICAgICBpZiAoX19ndGhyd18ocHRocmVhZF9tdXRleF9kZXN0cm95KSAoKHB0aHJlYWRfbXV0ZXhfdCAqKSBtdXRleC0+YmFja2VuZCkpCisJcmV0dXJuIC0xOworCisgICAgICBvYmpjX2ZyZWUgKG11dGV4LT5iYWNrZW5kKTsKKyAgICAgIG11dGV4LT5iYWNrZW5kID0gTlVMTDsKKyAgICB9CisgIHJldHVybiAwOworfQorCisvKiBHcmFiIGEgbG9jayBvbiBhIG11dGV4LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF9sb2NrIChvYmpjX211dGV4X3QgbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkKKyAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfbG9jaykgKChwdGhyZWFkX211dGV4X3QgKikgbXV0ZXgtPmJhY2tlbmQpICE9IDApCisgICAgeworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogVHJ5IHRvIGdyYWIgYSBsb2NrIG9uIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X3RyeWxvY2sgKG9iamNfbXV0ZXhfdCBtdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKQorICAgICAgJiYgX19ndGhyd18ocHRocmVhZF9tdXRleF90cnlsb2NrKSAoKHB0aHJlYWRfbXV0ZXhfdCAqKSBtdXRleC0+YmFja2VuZCkgIT0gMCkKKyAgICB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBVbmxvY2sgdGhlIG11dGV4ICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfdW5sb2NrIChvYmpjX211dGV4X3QgbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkKKyAgICAgICYmIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKSAoKHB0aHJlYWRfbXV0ZXhfdCAqKSBtdXRleC0+YmFja2VuZCkgIT0gMCkKKyAgICB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBCYWNrZW5kIGNvbmRpdGlvbiBtdXRleCBmdW5jdGlvbnMgKi8KKworLyogQWxsb2NhdGUgYSBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9hbGxvY2F0ZSAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgY29uZGl0aW9uLT5iYWNrZW5kID0gb2JqY19tYWxsb2MgKHNpemVvZiAocHRocmVhZF9jb25kX3QpKTsKKworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfY29uZF9pbml0KSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCwgTlVMTCkpCisJeworCSAgb2JqY19mcmVlIChjb25kaXRpb24tPmJhY2tlbmQpOworCSAgY29uZGl0aW9uLT5iYWNrZW5kID0gTlVMTDsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBEZWFsbG9jYXRlIGEgY29uZGl0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19jb25kaXRpb25fZGVhbGxvY2F0ZSAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24pCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgeworICAgICAgaWYgKF9fZ3RocndfKHB0aHJlYWRfY29uZF9kZXN0cm95KSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCkpCisJcmV0dXJuIC0xOworCisgICAgICBvYmpjX2ZyZWUgKGNvbmRpdGlvbi0+YmFja2VuZCk7CisgICAgICBjb25kaXRpb24tPmJhY2tlbmQgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFdhaXQgb24gdGhlIGNvbmRpdGlvbiAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl93YWl0IChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiwgb2JqY19tdXRleF90IG11dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfd2FpdCkgKChwdGhyZWFkX2NvbmRfdCAqKSBjb25kaXRpb24tPmJhY2tlbmQsCisJCQkgICAgICAocHRocmVhZF9tdXRleF90ICopIG11dGV4LT5iYWNrZW5kKTsKKyAgZWxzZQorICAgIHJldHVybiAwOworfQorCisvKiBXYWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9icm9hZGNhc3QgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworLyogV2FrZSB1cCBvbmUgdGhyZWFkIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2NvbmRpdGlvbl9zaWduYWwgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfc2lnbmFsKSAoKHB0aHJlYWRfY29uZF90ICopIGNvbmRpdGlvbi0+YmFja2VuZCk7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworI2Vsc2UgLyogX0xJQk9CSkMgKi8KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9jcmVhdGUgKF9fZ3RocmVhZF90ICpfX3RocmVhZGlkLCB2b2lkICooKl9fZnVuYykgKHZvaWQqKSwKKwkJICB2b2lkICpfX2FyZ3MpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NyZWF0ZSkgKF9fdGhyZWFkaWQsIE5VTEwsIF9fZnVuYywgX19hcmdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9qb2luIChfX2d0aHJlYWRfdCBfX3RocmVhZGlkLCB2b2lkICoqX192YWx1ZV9wdHIpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2pvaW4pIChfX3RocmVhZGlkLCBfX3ZhbHVlX3B0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfZGV0YWNoIChfX2d0aHJlYWRfdCBfX3RocmVhZGlkKQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9kZXRhY2gpIChfX3RocmVhZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9lcXVhbCAoX19ndGhyZWFkX3QgX190MSwgX19ndGhyZWFkX3QgX190MikKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfZXF1YWwpIChfX3QxLCBfX3QyKTsKK30KKworc3RhdGljIGlubGluZSBfX2d0aHJlYWRfdAorX19ndGhyZWFkX3NlbGYgKHZvaWQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX3NlbGYpICgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3lpZWxkICh2b2lkKQoreworICByZXR1cm4gX19ndGhyd18oc2NoZWRfeWllbGQpICgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKl9fb25jZSwgdm9pZCAoKl9fZnVuYykgKHZvaWQpKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX29uY2UpIChfX29uY2UsIF9fZnVuYyk7CisgIGVsc2UKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICpfX2tleSwgdm9pZCAoKl9fZHRvcikgKHZvaWQgKikpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2tleV9jcmVhdGUpIChfX2tleSwgX19kdG9yKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3QgX19rZXkpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2tleV9kZWxldGUpIChfX2tleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBfX2tleSkKK3sKKyAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfZ2V0c3BlY2lmaWMpIChfX2tleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBfX2tleSwgY29uc3Qgdm9pZCAqX19wdHIpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX3NldHNwZWNpZmljKSAoX19rZXksIF9fcHRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX2d0aHJlYWRfbXV0ZXhfaW5pdF9mdW5jdGlvbiAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgX19ndGhyd18ocHRocmVhZF9tdXRleF9pbml0KSAoX19tdXRleCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfZGVzdHJveSAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfZGVzdHJveSkgKF9fbXV0ZXgpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfbG9jaykgKF9fbXV0ZXgpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCisgICAgcmV0dXJuIF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaykgKF9fbXV0ZXgpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBfR1RIUkVBRF9VU0VfTVVURVhfVElNRURMT0NLCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X3RpbWVkbG9jayAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCisJCQkgICBjb25zdCBfX2d0aHJlYWRfdGltZV90ICpfX2Fic190aW1lb3V0KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X3RpbWVkbG9jaykgKF9fbXV0ZXgsIF9fYWJzX3RpbWVvdXQpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4KQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX211dGV4X3VubG9jaykgKF9fbXV0ZXgpOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiAhZGVmaW5lZCggUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJfTlApIFwKKyAgfHwgZGVmaW5lZChfR1RIUkVBRF9VU0VfUkVDVVJTSVZFX01VVEVYX0lOSVRfRlVOQykKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2luaXRfZnVuY3Rpb24gKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKKyAgICB7CisgICAgICBwdGhyZWFkX211dGV4YXR0cl90IF9fYXR0cjsKKyAgICAgIGludCBfX3I7CisKKyAgICAgIF9fciA9IF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQpICgmX19hdHRyKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9fZ3RocndfKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUpICgmX19hdHRyLAorCQkJCQkJICAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX19ndGhyd18ocHRocmVhZF9tdXRleF9pbml0KSAoX19tdXRleCwgJl9fYXR0cik7CisgICAgICBpZiAoIV9fcikKKwlfX3IgPSBfX2d0aHJ3XyhwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KSAoJl9fYXR0cik7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfbG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyZWFkX211dGV4X2xvY2sgKF9fbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19tdXRleCk7Cit9CisKKyNpZiBfR1RIUkVBRF9VU0VfTVVURVhfVElNRURMT0NLCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90aW1lZGxvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCwKKwkJCQkgICAgIGNvbnN0IF9fZ3RocmVhZF90aW1lX3QgKl9fYWJzX3RpbWVvdXQpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChfX211dGV4LCBfX2Fic190aW1lb3V0KTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgcmV0dXJuIF9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9kZXN0cm95IChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfZGVzdHJveSAoX19tdXRleCk7Cit9CisKKyNpZmRlZiBfR1RIUkVBRF9VU0VfQ09ORF9JTklUX0ZVTkMKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19ndGhyZWFkX2NvbmRfaW5pdF9mdW5jdGlvbiAoX19ndGhyZWFkX2NvbmRfdCAqX19jb25kKQoreworICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQorICAgIF9fZ3RocndfKHB0aHJlYWRfY29uZF9pbml0KSAoX19jb25kLCBOVUxMKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2NvbmRfYnJvYWRjYXN0IChfX2d0aHJlYWRfY29uZF90ICpfX2NvbmQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KSAoX19jb25kKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9jb25kX3NpZ25hbCAoX19ndGhyZWFkX2NvbmRfdCAqX19jb25kKQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9jb25kX3NpZ25hbCkgKF9fY29uZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfY29uZF93YWl0IChfX2d0aHJlYWRfY29uZF90ICpfX2NvbmQsIF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9jb25kX3dhaXQpIChfX2NvbmQsIF9fbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX2NvbmRfdGltZWR3YWl0IChfX2d0aHJlYWRfY29uZF90ICpfX2NvbmQsIF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4LAorCQkJICBjb25zdCBfX2d0aHJlYWRfdGltZV90ICpfX2Fic190aW1lb3V0KQoreworICByZXR1cm4gX19ndGhyd18ocHRocmVhZF9jb25kX3RpbWVkd2FpdCkgKF9fY29uZCwgX19tdXRleCwgX19hYnNfdGltZW91dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfY29uZF93YWl0X3JlY3Vyc2l2ZSAoX19ndGhyZWFkX2NvbmRfdCAqX19jb25kLAorCQkJICAgICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgcmV0dXJuIF9fZ3RocmVhZF9jb25kX3dhaXQgKF9fY29uZCwgX19tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfY29uZF9kZXN0cm95IChfX2d0aHJlYWRfY29uZF90KiBfX2NvbmQpCit7CisgIHJldHVybiBfX2d0aHJ3XyhwdGhyZWFkX2NvbmRfZGVzdHJveSkgKF9fY29uZCk7Cit9CisKKyNlbmRpZiAvKiBfTElCT0JKQyAqLworCisjZW5kaWYgLyogISBfR0xJQkNYWF9HQ0NfR1RIUl9QT1NJWF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9ndGhyLXNpbmdsZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvZ3Roci1zaW5nbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU1NzVlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvZ3Roci1zaW5nbGUuaApAQCAtMCwwICsxLDI5OCBAQAorLyogVGhyZWFkcyBjb21wYXRpYmlsaXR5IHJvdXRpbmVzIGZvciBsaWJnY2MyIGFuZCBsaWJvYmpjLiAgKi8KKy8qIENvbXBpbGUgdGhpcyBvbmUgd2l0aCBnY2MuICAqLworLyogQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0dMSUJDWFhfR0NDX0dUSFJfU0lOR0xFX0gKKyNkZWZpbmUgX0dMSUJDWFhfR0NDX0dUSFJfU0lOR0xFX0gKKworLyogSnVzdCBwcm92aWRlIGNvbXBhdGliaWxpdHkgZm9yIG11dGV4IGhhbmRsaW5nLiAgKi8KKwordHlwZWRlZiBpbnQgX19ndGhyZWFkX2tleV90OwordHlwZWRlZiBpbnQgX19ndGhyZWFkX29uY2VfdDsKK3R5cGVkZWYgaW50IF9fZ3RocmVhZF9tdXRleF90OwordHlwZWRlZiBpbnQgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90OworCisjZGVmaW5lIF9fR1RIUkVBRF9PTkNFX0lOSVQgMAorI2RlZmluZSBfX0dUSFJFQURfTVVURVhfSU5JVCAwCisjZGVmaW5lIF9fR1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9OKG14KQorI2RlZmluZSBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQgMAorCisjZGVmaW5lIF9HTElCQ1hYX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorCisjaWZkZWYgX0xJQk9CSkMKKworLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UgZm9yIGEgc2luZ2xlIHRocmVhZCAqLworc3RhdGljIHZvaWQgKnRocmVhZF9sb2NhbF9zdG9yYWdlID0gTlVMTDsKKworLyogQmFja2VuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KKworLyogSW5pdGlhbGl6ZSB0aGUgdGhyZWFkcyBzdWJzeXN0ZW0uICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX2luaXRfdGhyZWFkX3N5c3RlbSAodm9pZCkKK3sKKyAgLyogTm8gdGhyZWFkIHN1cHBvcnQgYXZhaWxhYmxlICovCisgIHJldHVybiAtMTsKK30KKworLyogQ2xvc2UgdGhlIHRocmVhZHMgc3Vic3lzdGVtLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19jbG9zZV90aHJlYWRfc3lzdGVtICh2b2lkKQoreworICAvKiBObyB0aHJlYWQgc3VwcG9ydCBhdmFpbGFibGUgKi8KKyAgcmV0dXJuIC0xOworfQorCisvKiBCYWNrZW5kIHRocmVhZCBmdW5jdGlvbnMgKi8KKworLyogQ3JlYXRlIGEgbmV3IHRocmVhZCBvZiBleGVjdXRpb24uICAqLworc3RhdGljIGlubGluZSBvYmpjX3RocmVhZF90CitfX2d0aHJlYWRfb2JqY190aHJlYWRfZGV0YWNoICh2b2lkICgqIGZ1bmMpKHZvaWQgKiksIHZvaWQgKiBhcmcgX0dMSUJDWFhfVU5VU0VEKQoreworICAvKiBObyB0aHJlYWQgc3VwcG9ydCBhdmFpbGFibGUgKi8KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFNldCB0aGUgY3VycmVudCB0aHJlYWQncyBwcmlvcml0eS4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfdGhyZWFkX3NldF9wcmlvcml0eSAoaW50IHByaW9yaXR5IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgLyogTm8gdGhyZWFkIHN1cHBvcnQgYXZhaWxhYmxlICovCisgIHJldHVybiAtMTsKK30KKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHRocmVhZCdzIHByaW9yaXR5LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfZ2V0X3ByaW9yaXR5ICh2b2lkKQoreworICByZXR1cm4gT0JKQ19USFJFQURfSU5URVJBQ1RJVkVfUFJJT1JJVFk7Cit9CisKKy8qIFlpZWxkIG91ciBwcm9jZXNzIHRpbWUgdG8gYW5vdGhlciB0aHJlYWQuICAqLworc3RhdGljIGlubGluZSB2b2lkCitfX2d0aHJlYWRfb2JqY190aHJlYWRfeWllbGQgKHZvaWQpCit7CisgIHJldHVybjsKK30KKworLyogVGVybWluYXRlIHRoZSBjdXJyZW50IHRocmVhZC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfdGhyZWFkX2V4aXQgKHZvaWQpCit7CisgIC8qIE5vIHRocmVhZCBzdXBwb3J0IGF2YWlsYWJsZSAqLworICAvKiBTaG91bGQgd2UgcmVhbGx5IGV4aXQgdGhlIHByb2dyYW0gKi8KKyAgLyogZXhpdCAoJl9fb2JqY190aHJlYWRfZXhpdF9zdGF0dXMpOyAqLworICByZXR1cm4gLTE7Cit9CisKKy8qIFJldHVybnMgYW4gaW50ZWdlciB2YWx1ZSB3aGljaCB1bmlxdWVseSBkZXNjcmliZXMgYSB0aHJlYWQuICAqLworc3RhdGljIGlubGluZSBvYmpjX3RocmVhZF90CitfX2d0aHJlYWRfb2JqY190aHJlYWRfaWQgKHZvaWQpCit7CisgIC8qIE5vIHRocmVhZCBzdXBwb3J0LCB1c2UgMS4gICovCisgIHJldHVybiAob2JqY190aHJlYWRfdCkgMTsKK30KKworLyogU2V0cyB0aGUgdGhyZWFkJ3MgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY190aHJlYWRfc2V0X2RhdGEgKHZvaWQgKnZhbHVlKQoreworICB0aHJlYWRfbG9jYWxfc3RvcmFnZSA9IHZhbHVlOworICByZXR1cm4gMDsKK30KKworLyogUmV0dXJucyB0aGUgdGhyZWFkJ3MgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitfX2d0aHJlYWRfb2JqY190aHJlYWRfZ2V0X2RhdGEgKHZvaWQpCit7CisgIHJldHVybiB0aHJlYWRfbG9jYWxfc3RvcmFnZTsKK30KKworLyogQmFja2VuZCBtdXRleCBmdW5jdGlvbnMgKi8KKworLyogQWxsb2NhdGUgYSBtdXRleC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfYWxsb2NhdGUgKG9iamNfbXV0ZXhfdCBtdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBEZWFsbG9jYXRlIGEgbXV0ZXguICAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X2RlYWxsb2NhdGUgKG9iamNfbXV0ZXhfdCBtdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBHcmFiIGEgbG9jayBvbiBhIG11dGV4LiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19tdXRleF9sb2NrIChvYmpjX211dGV4X3QgbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICAvKiBUaGVyZSBjYW4gb25seSBiZSBvbmUgdGhyZWFkLCBzbyB3ZSBhbHdheXMgZ2V0IHRoZSBsb2NrICovCisgIHJldHVybiAwOworfQorCisvKiBUcnkgdG8gZ3JhYiBhIGxvY2sgb24gYSBtdXRleC4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfbXV0ZXhfdHJ5bG9jayAob2JqY19tdXRleF90IG11dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgLyogVGhlcmUgY2FuIG9ubHkgYmUgb25lIHRocmVhZCwgc28gd2UgYWx3YXlzIGdldCB0aGUgbG9jayAqLworICByZXR1cm4gMDsKK30KKworLyogVW5sb2NrIHRoZSBtdXRleCAqLworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9vYmpjX211dGV4X3VubG9jayAob2JqY19tdXRleF90IG11dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEJhY2tlbmQgY29uZGl0aW9uIG11dGV4IGZ1bmN0aW9ucyAqLworCisvKiBBbGxvY2F0ZSBhIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX2FsbG9jYXRlIChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBEZWFsbG9jYXRlIGEgY29uZGl0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19jb25kaXRpb25fZGVhbGxvY2F0ZSAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24gX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworLyogV2FpdCBvbiB0aGUgY29uZGl0aW9uICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX3dhaXQgKG9iamNfY29uZGl0aW9uX3QgY29uZGl0aW9uIF9HTElCQ1hYX1VOVVNFRCwKKwkJCSAgICAgICBvYmpjX211dGV4X3QgbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworLyogV2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb2JqY19jb25kaXRpb25fYnJvYWRjYXN0IChvYmpjX2NvbmRpdGlvbl90IGNvbmRpdGlvbiBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCisvKiBXYWtlIHVwIG9uZSB0aHJlYWQgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gICovCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX29iamNfY29uZGl0aW9uX3NpZ25hbCAob2JqY19jb25kaXRpb25fdCBjb25kaXRpb24gX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworI2Vsc2UgLyogX0xJQk9CSkMgKi8KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqX19vbmNlIF9HTElCQ1hYX1VOVVNFRCwgdm9pZCAoKl9fZnVuYykgKHZvaWQpIF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9HTElCQ1hYX1VOVVNFRAorX19ndGhyZWFkX2tleV9jcmVhdGUgKF9fZ3RocmVhZF9rZXlfdCAqX19rZXkgX0dMSUJDWFhfVU5VU0VELCB2b2lkICgqX19mdW5jKSAodm9pZCAqKSBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9HTElCQ1hYX1VOVVNFRAorX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBfX2tleSBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3QgX19rZXkgX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IF9fa2V5IF9HTElCQ1hYX1VOVVNFRCwgY29uc3Qgdm9pZCAqX192IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfZGVzdHJveSAoX19ndGhyZWFkX211dGV4X3QgKl9fbXV0ZXggX0dMSUJDWFhfVU5VU0VEKQoreworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICpfX211dGV4IF9HTElCQ1hYX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCBfR0xJQkNYWF9VTlVTRUQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqX19tdXRleCkKK3sKKyAgcmV0dXJuIF9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKl9fbXV0ZXgpCit7CisgIHJldHVybiBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK19fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfZGVzdHJveSAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICpfX211dGV4KQoreworICByZXR1cm4gX19ndGhyZWFkX211dGV4X2Rlc3Ryb3kgKF9fbXV0ZXgpOworfQorCisjZW5kaWYgLyogX0xJQk9CSkMgKi8KKworI3VuZGVmIF9HTElCQ1hYX1VOVVNFRAorCisjZW5kaWYgLyogISBfR0xJQkNYWF9HQ0NfR1RIUl9TSU5HTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvZ3Roci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvZ3Roci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzM5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9ndGhyLmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qIFRocmVhZHMgY29tcGF0aWJpbGl0eSByb3V0aW5lcyBmb3IgbGliZ2NjMi4gICovCisvKiBDb21waWxlIHRoaXMgb25lIHdpdGggZ2NjLiAgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9HTElCQ1hYX0dDQ19HVEhSX0gKKyNkZWZpbmUgX0dMSUJDWFhfR0NDX0dUSFJfSAorCisjaWZuZGVmIF9HTElCQ1hYX0hJREVfRVhQT1JUUworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisjZW5kaWYKKworLyogSWYgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHdpdGggdGhyZWFkcyBzdXBwb3J0LCBpdCBtdXN0CisgICAgICAgI2RlZmluZSBfX0dUSFJFQURTIDEKKyAgIHRvIGluZGljYXRlIHRoYXQgdGhyZWFkcyBzdXBwb3J0IGlzIHByZXNlbnQuICBBbHNvIGl0IGhhcyBkZWZpbmUKKyAgIGZ1bmN0aW9uCisgICAgIGludCBfX2d0aHJlYWRfYWN0aXZlX3AgKCkKKyAgIHRoYXQgcmV0dXJucyAxIGlmIHRocmVhZCBzeXN0ZW0gaXMgYWN0aXZlLCAwIGlmIG5vdC4KKworICAgVGhlIHRocmVhZHMgaW50ZXJmYWNlIG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgdHlwZXM6CisgICAgIF9fZ3RocmVhZF9rZXlfdAorICAgICBfX2d0aHJlYWRfb25jZV90CisgICAgIF9fZ3RocmVhZF9tdXRleF90CisgICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdAorCisgICBUaGUgdGhyZWFkcyBpbnRlcmZhY2UgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3M6CisKKyAgICAgX19HVEhSRUFEX09OQ0VfSU5JVAorICAgICAJCXRvIGluaXRpYWxpemUgX19ndGhyZWFkX29uY2VfdAorICAgICBfX0dUSFJFQURfTVVURVhfSU5JVAorICAgICAJCXRvIGluaXRpYWxpemUgX19ndGhyZWFkX211dGV4X3QgdG8gZ2V0IGEgZmFzdAorCQlub24tcmVjdXJzaXZlIG11dGV4LgorICAgICBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTgorCQl0byBpbml0aWFsaXplIF9fZ3RocmVhZF9tdXRleF90IHRvIGdldCBhIGZhc3QKKwkJbm9uLXJlY3Vyc2l2ZSBtdXRleC4KKwkJRGVmaW5lIHRoaXMgdG8gYSBmdW5jdGlvbiB3aGljaCBsb29rcyBsaWtlIHRoaXM6CisJCSAgdm9pZCBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTiAoX19ndGhyZWFkX211dGV4X3QgKikKKyAgICAgCQlTb21lIHN5c3RlbXMgY2FuJ3QgaW5pdGlhbGl6ZSBhIG11dGV4IHdpdGhvdXQgYQorCQlmdW5jdGlvbiBjYWxsLiAgRG9uJ3QgZGVmaW5lIF9fR1RIUkVBRF9NVVRFWF9JTklUIGluIHRoaXMgY2FzZS4KKyAgICAgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUCisgICAgIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9GVU5DVElPTgorICAgICAJCWFzIGFib3ZlLCBidXQgZm9yIGEgcmVjdXJzaXZlIG11dGV4LgorCisgICBUaGUgdGhyZWFkcyBpbnRlcmZhY2UgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBzdGF0aWMgZnVuY3Rpb25zOgorCisgICAgIGludCBfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICgpKQorCisgICAgIGludCBfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXlwLCB2b2lkICgqZHRvcikgKHZvaWQgKikpCisgICAgIGludCBfX2d0aHJlYWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKKworICAgICB2b2lkICpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCisgICAgIGludCBfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKKworICAgICBpbnQgX19ndGhyZWFkX211dGV4X2Rlc3Ryb3kgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCk7CisgICAgIGludCBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2Rlc3Ryb3kgKF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCAqbXV0ZXgpOworCisgICAgIGludCBfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KTsKKyAgICAgaW50IF9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworICAgICBpbnQgX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KTsKKworICAgICBpbnQgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKm11dGV4KTsKKyAgICAgaW50IF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICptdXRleCk7CisgICAgIGludCBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3VubG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICptdXRleCk7CisKKyAgIFRoZSBmb2xsb3dpbmcgYXJlIHN1cHBvcnRlZCBpbiBQT1NJWCB0aHJlYWRzIG9ubHkuIFRoZXkgYXJlIHJlcXVpcmVkIHRvCisgICBmaXggYSBkZWFkbG9jayBpbiBzdGF0aWMgaW5pdGlhbGl6YXRpb24gaW5zaWRlIGxpYnN1cGMrKy4gVGhlIGhlYWRlciBmaWxlCisgICBndGhyLXBvc2l4LmggZGVmaW5lcyBhIHN5bWJvbCBfX0dUSFJFQURfSEFTX0NPTkQgdG8gc2lnbmlmeSB0aGF0IHRoZXNlIGV4dHJhCisgICBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLgorCisgICBUeXBlczoKKyAgICAgX19ndGhyZWFkX2NvbmRfdAorCisgICBNYWNyb3M6CisgICAgIF9fR1RIUkVBRF9DT05EX0lOSVQKKyAgICAgX19HVEhSRUFEX0NPTkRfSU5JVF9GVU5DVElPTgorCisgICBJbnRlcmZhY2U6CisgICAgIGludCBfX2d0aHJlYWRfY29uZF9icm9hZGNhc3QgKF9fZ3RocmVhZF9jb25kX3QgKmNvbmQpOworICAgICBpbnQgX19ndGhyZWFkX2NvbmRfd2FpdCAoX19ndGhyZWFkX2NvbmRfdCAqY29uZCwgX19ndGhyZWFkX211dGV4X3QgKm11dGV4KTsKKyAgICAgaW50IF9fZ3RocmVhZF9jb25kX3dhaXRfcmVjdXJzaXZlIChfX2d0aHJlYWRfY29uZF90ICpjb25kLAorCQkJCQlfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKm11dGV4KTsKKworICAgQWxsIGZ1bmN0aW9ucyByZXR1cm5pbmcgaW50IHNob3VsZCByZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIHRoZSBlcnJvcgorICAgbnVtYmVyLiAgSWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCAtMSBpcyByZXR1cm5lZC4KKworICAgSWYgdGhlIGZvbGxvd2luZyBhcmUgYWxzbyBkZWZpbmVkLCB5b3Ugc2hvdWxkCisgICAgICNkZWZpbmUgX19HVEhSRUFEU19DWFgwWCAxCisgICB0byBlbmFibGUgdGhlIGMrKzB4IHRocmVhZCBsaWJyYXJ5LgorCisgICBUeXBlczoKKyAgICAgX19ndGhyZWFkX3QKKyAgICAgX19ndGhyZWFkX3RpbWVfdAorCisgICBJbnRlcmZhY2U6CisgICAgIGludCBfX2d0aHJlYWRfY3JlYXRlIChfX2d0aHJlYWRfdCAqdGhyZWFkLCB2b2lkICooKmZ1bmMpICh2b2lkKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmdzKTsKKyAgICAgaW50IF9fZ3RocmVhZF9qb2luIChfX2d0aHJlYWRfdCB0aHJlYWQsIHZvaWQgKip2YWx1ZV9wdHIpOworICAgICBpbnQgX19ndGhyZWFkX2RldGFjaCAoX19ndGhyZWFkX3QgdGhyZWFkKTsKKyAgICAgaW50IF9fZ3RocmVhZF9lcXVhbCAoX19ndGhyZWFkX3QgdDEsIF9fZ3RocmVhZF90IHQyKTsKKyAgICAgX19ndGhyZWFkX3QgX19ndGhyZWFkX3NlbGYgKHZvaWQpOworICAgICBpbnQgX19ndGhyZWFkX3lpZWxkICh2b2lkKTsKKworICAgICBpbnQgX19ndGhyZWFkX211dGV4X3RpbWVkbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2d0aHJlYWRfdGltZV90ICphYnNfdGltZW91dCk7CisgICAgIGludCBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3RpbWVkbG9jayAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90ICptLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19ndGhyZWFkX3RpbWVfdCAqYWJzX3RpbWUpOworCisgICAgIGludCBfX2d0aHJlYWRfY29uZF9zaWduYWwgKF9fZ3RocmVhZF9jb25kX3QgKmNvbmQpOworICAgICBpbnQgX19ndGhyZWFkX2NvbmRfdGltZWR3YWl0IChfX2d0aHJlYWRfY29uZF90ICpjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZ3RocmVhZF90aW1lX3QgKmFic190aW1lb3V0KTsKKworKi8KKworI2lmIF9fR1hYX1dFQUtfXworLyogVGhlIHBlLWNvZmYgd2VhayBzdXBwb3J0IGlzbid0IGZ1bGx5IGNvbXBhdGlibGUgdG8gRUxGJ3Mgd2Vhay4KKyAgIEZvciBzdGF0aWMgbGlicmFyaWVzIGl0IG1pZ2h0IHdvdWxkIHdvcmssIGJ1dCBhcyB3ZSBuZWVkIHRvIGRlYWwKKyAgIHdpdGggc2hhcmVkIHZlcnNpb25zIHRvbywgd2UgZGlzYWJsZSBpdCBmb3IgbWluZ3ctdGFyZ2V0cy4gICovCisjaWZkZWYgX19NSU5HVzMyX18KKyN1bmRlZiBfR0xJQkNYWF9HVEhSRUFEX1VTRV9XRUFLCisjZGVmaW5lIF9HTElCQ1hYX0dUSFJFQURfVVNFX1dFQUsgMAorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfR1RIUkVBRF9VU0VfV0VBSworI2RlZmluZSBfR0xJQkNYWF9HVEhSRUFEX1VTRV9XRUFLIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8Yml0cy9ndGhyLWRlZmF1bHQuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9ISURFX0VYUE9SVFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisjZW5kaWYKKworI2VuZGlmIC8qICEgX0dMSUJDWFhfR0NDX0dUSFJfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTQ2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgKQEAgLTAsMCArMSw5MiBAQAorLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBnZW5lcmljIHZlcnNpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvbWVzc2FnZXNfbWVtYmVycy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjcuMS4yICBtZXNzYWdlcyB2aXJ0dWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpCisgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19nZXRfY19sb2NhbGUoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSwgY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpIAorICAgICA6IGZhY2V0KF9fcmVmcykKKyAgICAgeyBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2dldF9jX2xvY2FsZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywgCisJCQkgICBjb25zdCBjaGFyKikgY29uc3QKKyAgICB7IHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyB9CisKKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKyAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cgCisgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAorICAgIHsgcmV0dXJuIDA7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6c3RyaW5nX3R5cGUgIAorICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgCisJCQkgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKKyAgICB7IHJldHVybiBfX2RmYXVsdDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICB2b2lkICAgIAorICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0IAorICAgIHsgfQorCisgICAvLyBtZXNzYWdlc19ieW5hbWUKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpIAorICAgICB7IAorCWlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgIkMiKSAhPSAwCisJICAgICYmIF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorCSAgeworCSAgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKwkgICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOyAKKwkgIH0KKyAgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9vcHRfcmFuZG9tLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9vcHRfcmFuZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjOTE1NQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL29wdF9yYW5kb20uaApAQCAtMCwwICsxLDM4IEBACisvLyBPcHRpbWl6YXRpb25zIGZvciByYW5kb20gbnVtYmVyIGhhbmRsaW5nLCBnZW5lcmljIHZlcnNpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvb3B0X3JhbmRvbS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7cmFuZG9tfQorICovCisKKyNpZm5kZWYgX0JJVFNfT1BUX1JBTkRPTV9ICisjZGVmaW5lIF9CSVRTX09QVF9SQU5ET01fSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworCisKKworI2VuZGlmIC8vIF9CSVRTX09QVF9SQU5ET01fSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvb3NfZGVmaW5lcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvb3NfZGVmaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTBiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9vc19kZWZpbmVzLmgKQEAgLTAsMCArMSw1MiBAQAorLy8gU3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIG5ld2xpYiAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvb3NfZGVmaW5lcy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7aW9zZndkfQorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfT1NfREVGSU5FUworI2RlZmluZSBfR0xJQkNYWF9PU19ERUZJTkVTIDEKKworLy8gU3lzdGVtLXNwZWNpZmljICNkZWZpbmUsIHR5cGVkZWZzLCBjb3JyZWN0aW9ucywgZXRjLCBnbyBoZXJlLiAgVGhpcworLy8gZmlsZSB3aWxsIGNvbWUgYmVmb3JlIGFsbCBvdGhlcnMuCisKKyNpZmRlZiBfX0NZR1dJTl9fCisjZGVmaW5lIF9HTElCQ1hYX0dUSFJFQURfVVNFX1dFQUsgMAorCisjaWYgZGVmaW5lZCAoX0dMSUJDWFhfRExMKQorI2RlZmluZSBfR0xJQkNYWF9QU0VVRE9fVklTSUJJTElUWV9kZWZhdWx0IF9fYXR0cmlidXRlX18gKChfX2RsbGltcG9ydF9fKSkKKyNlbHNlCisjZGVmaW5lIF9HTElCQ1hYX1BTRVVET19WSVNJQklMSVRZX2RlZmF1bHQKKyNlbmRpZgorI2RlZmluZSBfR0xJQkNYWF9QU0VVRE9fVklTSUJJTElUWV9oaWRkZW4KKworI2RlZmluZSBfR0xJQkNYWF9QU0VVRE9fVklTSUJJTElUWShWKSBfR0xJQkNYWF9QU0VVRE9fVklTSUJJTElUWV8gIyMgVgorCisvLyBTZWUgbGlic3RkYysrLzIwODA2LgorI2RlZmluZSBfR0xJQkNYWF9IQVZFX0RPU19CQVNFRF9GSUxFU1lTVEVNIDEKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL3N0ZGMrKy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hYXJjaDY0LW5vbmUtZWxmL2JpdHMvc3RkYysrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1Mzc3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL3N0ZGMrKy5oCkBAIC0wLDAgKzEsMTE3IEBACisvLyBDKysgaW5jbHVkZXMgdXNlZCBmb3IgcHJlY29tcGlsaW5nIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBzdGRjKysuaAorICogIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZmlsZSBmb3IgYSBwcmVjb21waWxlZCBoZWFkZXIuCisgKi8KKworLy8gMTcuNC4xLjIgSGVhZGVycworCisvLyBDCisjaWZuZGVmIF9HTElCQ1hYX05PX0FTU0VSVAorI2luY2x1ZGUgPGNhc3NlcnQ+CisjZW5kaWYKKyNpbmNsdWRlIDxjY3R5cGU+CisjaW5jbHVkZSA8Y2Vycm5vPgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNsdWRlIDxjaXNvNjQ2PgorI2luY2x1ZGUgPGNsaW1pdHM+CisjaW5jbHVkZSA8Y2xvY2FsZT4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxjc2V0am1wPgorI2luY2x1ZGUgPGNzaWduYWw+CisjaW5jbHVkZSA8Y3N0ZGFyZz4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8Y3RpbWU+CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8Y2NvbXBsZXg+CisjaW5jbHVkZSA8Y2ZlbnY+CisjaW5jbHVkZSA8Y2ludHR5cGVzPgorI2luY2x1ZGUgPGNzdGRhbGlnbj4KKyNpbmNsdWRlIDxjc3RkYm9vbD4KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPGN0Z21hdGg+CisjaW5jbHVkZSA8Y3djaGFyPgorI2luY2x1ZGUgPGN3Y3R5cGU+CisjZW5kaWYKKworLy8gQysrCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGJpdHNldD4KKyNpbmNsdWRlIDxjb21wbGV4PgorI2luY2x1ZGUgPGRlcXVlPgorI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8aW9tYW5pcD4KKyNpbmNsdWRlIDxpb3M+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGlzdHJlYW0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPG51bWVyaWM+CisjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDxxdWV1ZT4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdGFjaz4KKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisjaW5jbHVkZSA8c3RyZWFtYnVmPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx0eXBlaW5mbz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZhbGFycmF5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxhdG9taWM+CisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxmb3J3YXJkX2xpc3Q+CisjaW5jbHVkZSA8ZnV0dXJlPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8cmFuZG9tPgorI2luY2x1ZGUgPHJhdGlvPgorI2luY2x1ZGUgPHJlZ2V4PgorI2luY2x1ZGUgPHNjb3BlZF9hbGxvY2F0b3I+CisjaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgorI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx0eXBlaW5kZXg+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9zdGR0cjFjKysuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL3N0ZHRyMWMrKy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYmYxMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy9zdGR0cjFjKysuaApAQCAtMCwwICsxLDUzIEBACisvLyBDKysgaW5jbHVkZXMgdXNlZCBmb3IgcHJlY29tcGlsaW5nIFRSMSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgc3RkdHIxYysrLmgKKyAqICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGZpbGUgZm9yIGEgcHJlY29tcGlsZWQgaGVhZGVyLgorICovCisKKyNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgorCisjaW5jbHVkZSA8dHIxL2FycmF5PgorI2luY2x1ZGUgPHRyMS9jY3R5cGU+CisjaW5jbHVkZSA8dHIxL2NmZW52PgorI2luY2x1ZGUgPHRyMS9jZmxvYXQ+CisjaW5jbHVkZSA8dHIxL2NpbnR0eXBlcz4KKyNpbmNsdWRlIDx0cjEvY2xpbWl0cz4KKyNpbmNsdWRlIDx0cjEvY21hdGg+CisjaW5jbHVkZSA8dHIxL2NvbXBsZXg+CisjaW5jbHVkZSA8dHIxL2NzdGRhcmc+CisjaW5jbHVkZSA8dHIxL2NzdGRib29sPgorI2luY2x1ZGUgPHRyMS9jc3RkaW50PgorI2luY2x1ZGUgPHRyMS9jc3RkaW8+CisjaW5jbHVkZSA8dHIxL2NzdGRsaWI+CisjaW5jbHVkZSA8dHIxL2N0Z21hdGg+CisjaW5jbHVkZSA8dHIxL2N0aW1lPgorI2luY2x1ZGUgPHRyMS9jd2NoYXI+CisjaW5jbHVkZSA8dHIxL2N3Y3R5cGU+CisjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+CisjaW5jbHVkZSA8dHIxL3JhbmRvbT4KKyNpbmNsdWRlIDx0cjEvdHVwbGU+CisjaW5jbHVkZSA8dHIxL3Vub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dHIxL3Vub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dHIxL3V0aWxpdHk+CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy90aW1lX21lbWJlcnMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9iaXRzL3RpbWVfbWVtYmVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTk4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvYml0cy90aW1lX21lbWJlcnMuaApAQCAtMCwwICsxLDkyIEBACisvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBnZW5lcmljIHZlcnNpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvdGltZV9tZW1iZXJzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtsb2NhbGV9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4zLjIgLSB0aW1lX3B1dCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykgCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApCisgICAgeyAKKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbmFtZSgpOworICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMpIAorICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShfX2NhY2hlKQorICAgIHsgCisgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9TX2dldF9jX25hbWUoKTsKKyAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgCisJCQkJICAgICBzaXplX3QgX19yZWZzKSAKKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoMCkKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX3N0cmNtcChfX3MsIF9TX2dldF9jX25hbWUoKSkgIT0gMCkKKwl7CisJICBjb25zdCBzaXplX3QgX19sZW4gPSBfX2J1aWx0aW5fc3RybGVuKF9fcykgKyAxOworCSAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisJICBfX2J1aWx0aW5fbWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKwkgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisJfQorICAgICAgZWxzZQorCV9NX25hbWVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbmFtZSgpOworCisgICAgICBfX3RyeQorCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKwkgICAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1bmN0KCkKKyAgICB7IAorICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisgICAgICBkZWxldGUgX01fZGF0YTsKKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsgCisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvZXh0L29wdF9yYW5kb20uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWFyY2g2NC1ub25lLWVsZi9leHQvb3B0X3JhbmRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZjQ3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FhcmNoNjQtbm9uZS1lbGYvZXh0L29wdF9yYW5kb20uaApAQCAtMCwwICsxLDM4IEBACisvLyBPcHRpbWl6YXRpb25zIGZvciByYW5kb20gbnVtYmVyIGV4dGVuc2lvbnMsIGdlbmVyaWMgdmVyc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L29wdF9yYW5kb20uaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2V4dC9yYW5kb219CisgKi8KKworI2lmbmRlZiBfRVhUX09QVF9SQU5ET01fSAorI2RlZmluZSBfRVhUX09QVF9SQU5ET01fSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworCisKKworI2VuZGlmIC8vIF9FWFRfT1BUX1JBTkRPTV9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FsZ29yaXRobSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYWxnb3JpdGhtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNWRkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FsZ29yaXRobQpAQCAtMCwwICsxLDY4IEBACisvLyA8YWxnb3JpdGhtPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS9hbGdvcml0aG0KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQUxHT1JJVEhNCisjZGVmaW5lIF9HTElCQ1hYX0FMR09SSVRITSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHV0aWxpdHk+IC8vIFVLLTMwMC4KKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ28uaD4KKworI2lmZGVmIF9HTElCQ1hYX1BBUkFMTEVMCisjIGluY2x1ZGUgPHBhcmFsbGVsL2FsZ29yaXRobT4KKyNlbmRpZgorCisjZW5kaWYgLyogX0dMSUJDWFhfQUxHT1JJVEhNICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2FycmF5IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hcnJheQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJhNzFjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hcnJheQpAQCAtMCwwICsxLDMzMyBAQAorLy8gPGFycmF5PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9hcnJheQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9BUlJBWQorI2RlZmluZSBfR0xJQkNYWF9BUlJBWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL3JhbmdlX2FjY2Vzcy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9DT05UQUlORVIKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBzdHJ1Y3QgX19hcnJheV90cmFpdHMKKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCBfVHlwZVtfTm1dOworCisgICAgICBzdGF0aWMgY29uc3RleHByIF9UcCYKKyAgICAgIF9TX3JlZihjb25zdCBfVHlwZSYgX190LCBzdGQ6OnNpemVfdCBfX24pIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9UcCY+KF9fdFtfX25dKTsgfQorICAgIH07CisKKyB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICBzdHJ1Y3QgX19hcnJheV90cmFpdHM8X1RwLCAwPgorICAgeworICAgICBzdHJ1Y3QgX1R5cGUgeyB9OworCisgICAgIHN0YXRpYyBjb25zdGV4cHIgX1RwJgorICAgICBfU19yZWYoY29uc3QgX1R5cGUmLCBzdGQ6OnNpemVfdCkgbm9leGNlcHQKKyAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PF9UcCo+KG51bGxwdHIpOyB9CisgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIGZvciBzdG9yaW5nIGEgZml4ZWQgc2l6ZSBzZXF1ZW5jZSBvZiBlbGVtZW50cy4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NiI+cmV2ZXJzaWJsZSBjb250YWluZXI8L2E+LCBhbmQgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjciPnNlcXVlbmNlPC9hPi4KKyAgICoKKyAgICogIFNldHMgc3VwcG9ydCByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4KKyAgICoKKyAgICogIEB0cGFyYW0gIFRwICBUeXBlIG9mIGVsZW1lbnQuIFJlcXVpcmVkIHRvIGJlIGEgY29tcGxldGUgdHlwZS4KKyAgICogIEB0cGFyYW0gIE4gIE51bWJlciBvZiBlbGVtZW50cy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgc3RydWN0IGFycmF5CisgICAgeworICAgICAgdHlwZWRlZiBfVHAgCSAgICAJCQkgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKgkJCSAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgICAJICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAgICAgICAgICAgICAJICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiAgICAgICAgICAJCSAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKgkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAgICAgICAgICAgICAgICAgICAgCSAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgCSAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPgkgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgLy8gU3VwcG9ydCBmb3IgemVyby1zaXplZCBhcnJheXMgbWFuZGF0b3J5LgorICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfQzo6X19hcnJheV90cmFpdHM8X1RwLCBfTm0+IF9BVF9UeXBlOworICAgICAgdHlwZW5hbWUgX0FUX1R5cGU6Ol9UeXBlICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VsZW1zOworCisgICAgICAvLyBObyBleHBsaWNpdCBjb25zdHJ1Y3QvY29weS9kZXN0cm95IGZvciBhZ2dyZWdhdGUgdHlwZS4KKworICAgICAgLy8gRFIgNzc2LgorICAgICAgdm9pZAorICAgICAgZmlsbChjb25zdCB2YWx1ZV90eXBlJiBfX3UpCisgICAgICB7IHN0ZDo6ZmlsbF9uKGJlZ2luKCksIHNpemUoKSwgX191KTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGFycmF5JiBfX290aGVyKQorICAgICAgbm9leGNlcHQobm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X1RwJj4oKSwgc3RkOjpkZWNsdmFsPF9UcCY+KCkpKSkKKyAgICAgIHsgc3RkOjpzd2FwX3JhbmdlcyhiZWdpbigpLCBlbmQoKSwgX19vdGhlci5iZWdpbigpKTsgfQorCisgICAgICAvLyBJdGVyYXRvcnMuCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoZGF0YSgpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoZGF0YSgpKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKGRhdGEoKSArIF9ObSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihkYXRhKCkgKyBfTm0pOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IgCisgICAgICByYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAKKyAgICAgIHJiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yIAorICAgICAgcmVuZCgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCisgICAgICByZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihkYXRhKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKGRhdGEoKSArIF9ObSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAKKyAgICAgIGNyZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgLy8gQ2FwYWNpdHkuCisgICAgICBjb25zdGV4cHIgc2l6ZV90eXBlIAorICAgICAgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9ObTsgfQorCisgICAgICBjb25zdGV4cHIgc2l6ZV90eXBlIAorICAgICAgbWF4X3NpemUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfTm07IH0KKworICAgICAgY29uc3RleHByIGJvb2wgCisgICAgICBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CisKKyAgICAgIC8vIEVsZW1lbnQgYWNjZXNzLgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiBfQVRfVHlwZTo6X1NfcmVmKF9NX2VsZW1zLCBfX24pOyB9CisKKyAgICAgIGNvbnN0ZXhwciBjb25zdF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIF9fbik7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBhdChzaXplX3R5cGUgX19uKQorICAgICAgeworCWlmIChfX24gPj0gX05tKQorCSAgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX04oImFycmF5OjphdCIpKTsKKwlyZXR1cm4gX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgX19uKTsKKyAgICAgIH0KKworICAgICAgY29uc3RleHByIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwkvLyBSZXN1bHQgb2YgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBtdXN0IGJlIGFuIGx2YWx1ZSBzbyB1c2UKKwkvLyBib29sZWFuID8gbHZhbHVlIDogKHRocm93LWV4cHIsIGx2YWx1ZSkKKwlyZXR1cm4gX19uIDwgX05tID8gX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgX19uKQorCSAgOiAoc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX04oImFycmF5OjphdCIpKSwKKwkgICAgIF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIDApKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlIAorICAgICAgZnJvbnQoKQorICAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KKworICAgICAgY29uc3RleHByIGNvbnN0X3JlZmVyZW5jZSAKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIDApOyB9CisKKyAgICAgIHJlZmVyZW5jZSAKKyAgICAgIGJhY2soKQorICAgICAgeyByZXR1cm4gX05tID8gKihlbmQoKSAtIDEpIDogKmVuZCgpOyB9CisKKyAgICAgIGNvbnN0ZXhwciBjb25zdF9yZWZlcmVuY2UgCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsgCisJcmV0dXJuIF9ObSA/IF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIF9ObSAtIDEpIAorIAkgICAgICAgICAgIDogX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgMCk7CisgICAgICB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGRhdGEoKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfQVRfVHlwZTo6X1NfcmVmKF9NX2VsZW1zLCAwKSk7IH0KKworICAgICAgY29uc3RfcG9pbnRlcgorICAgICAgZGF0YSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIDApKTsgfQorICAgIH07CisKKyAgLy8gQXJyYXkgY29tcGFyaXNvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSBib29sIAorICAgIG9wZXJhdG9yPT0oY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICB7IHJldHVybiBzdGQ6OmVxdWFsKF9fb25lLmJlZ2luKCksIF9fb25lLmVuZCgpLCBfX3R3by5iZWdpbigpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuICEoX19vbmUgPT0gX190d28pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX2EsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19iKQorICAgIHsgCisgICAgICByZXR1cm4gc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX2EuYmVnaW4oKSwgX19hLmVuZCgpLAorCQkJCQkgIF9fYi5iZWdpbigpLCBfX2IuZW5kKCkpOyAKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICB7IHJldHVybiBfX3R3byA8IF9fb25lOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gIShfX29uZSA+IF9fdHdvKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuICEoX19vbmUgPCBfX3R3byk7IH0KKworICAvLyBTcGVjaWFsaXplZCBhbGdvcml0aG1zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICBub2V4Y2VwdChub2V4Y2VwdChfX29uZS5zd2FwKF9fdHdvKSkpCisgICAgeyBfX29uZS5zd2FwKF9fdHdvKTsgfQorCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGNvbnN0ZXhwciBfVHAmCisgICAgZ2V0KGFycmF5PF9UcCwgX05tPiYgX19hcnIpIG5vZXhjZXB0CisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChfSW50IDwgX05tLCAiaW5kZXggaXMgb3V0IG9mIGJvdW5kcyIpOworICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9DOjpfX2FycmF5X3RyYWl0czxfVHAsIF9ObT46OgorCV9TX3JlZihfX2Fyci5fTV9lbGVtcywgX0ludCk7CisgICAgfQorCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGNvbnN0ZXhwciBfVHAmJgorICAgIGdldChhcnJheTxfVHAsIF9ObT4mJiBfX2Fycikgbm9leGNlcHQKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9JbnQgPCBfTm0sICJpbmRleCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICByZXR1cm4gc3RkOjptb3ZlKGdldDxfSW50PihfX2FycikpOworICAgIH0KKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSW50LCB0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBjb25zdGV4cHIgY29uc3QgX1RwJgorICAgIGdldChjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fYXJyKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoX0ludCA8IF9ObSwgImluZGV4IGlzIG91dCBvZiBib3VuZHMiKTsKKyAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQzo6X19hcnJheV90cmFpdHM8X1RwLCBfTm0+OjoKKwlfU19yZWYoX19hcnIuX01fZWxlbXMsIF9JbnQpOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gVHVwbGUgaW50ZXJmYWNlIHRvIGNsYXNzIHRlbXBsYXRlIGFycmF5LgorCisgIC8vLyB0dXBsZV9zaXplCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gCisgICAgY2xhc3MgdHVwbGVfc2l6ZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBzdHJ1Y3QgdHVwbGVfc2l6ZTxfR0xJQkNYWF9TVERfQzo6YXJyYXk8X1RwLCBfTm0+PgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBfTm0+IHsgfTsKKworICAvLy8gdHVwbGVfZWxlbWVudAorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSW50LCB0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgdHVwbGVfZWxlbWVudDsKKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSW50LCB0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBzdHJ1Y3QgdHVwbGVfZWxlbWVudDxfSW50LCBfR0xJQkNYWF9TVERfQzo6YXJyYXk8X1RwLCBfTm0+PgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoX0ludCA8IF9ObSwgImluZGV4IGlzIG91dCBvZiBib3VuZHMiKTsKKyAgICAgIHR5cGVkZWYgX1RwIHR5cGU7CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjIGluY2x1ZGUgPGRlYnVnL2FycmF5PgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9QUk9GSUxFCisjIGluY2x1ZGUgPHByb2ZpbGUvYXJyYXk+CisjZW5kaWYKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9BUlJBWQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hdG9taWMgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2F0b21pYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTNmNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9hdG9taWMKQEAgLTAsMCArMSwxMTIyIEBACisvLyAtKi0gQysrIC0qLSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2F0b21pYworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworLy8gQmFzZWQgb24gIkMrKyBBdG9taWMgVHlwZXMgYW5kIE9wZXJhdGlvbnMiIGJ5IEhhbnMgQm9laG0gYW5kIExhd3JlbmNlIENyb3dsLgorLy8gaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNy9uMjQyNy5odG1sCisKKyNpZm5kZWYgX0dMSUJDWFhfQVRPTUlDCisjZGVmaW5lIF9HTElCQ1hYX0FUT01JQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Yml0cy9hdG9taWNfYmFzZS5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIGF0b21pY3MKKyAgICogQHsKKyAgICovCisKKyAgLy8vIGF0b21pY19ib29sCisgIC8vIE5COiBObyBvcGVyYXRvcnMgb3IgZmV0Y2gtb3BlcmF0aW9ucyBmb3IgdGhpcyB0eXBlLgorICBzdHJ1Y3QgYXRvbWljX2Jvb2wKKyAgeworICBwcml2YXRlOgorICAgIF9fYXRvbWljX2Jhc2U8Ym9vbD4JX01fYmFzZTsKKworICBwdWJsaWM6CisgICAgYXRvbWljX2Jvb2woKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgfmF0b21pY19ib29sKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgIGF0b21pY19ib29sKGNvbnN0IGF0b21pY19ib29sJikgPSBkZWxldGU7CisgICAgYXRvbWljX2Jvb2wmIG9wZXJhdG9yPShjb25zdCBhdG9taWNfYm9vbCYpID0gZGVsZXRlOworICAgIGF0b21pY19ib29sJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljX2Jvb2wmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgIGNvbnN0ZXhwciBhdG9taWNfYm9vbChib29sIF9faSkgbm9leGNlcHQgOiBfTV9iYXNlKF9faSkgeyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3I9KGJvb2wgX19pKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX2Jhc2Uub3BlcmF0b3I9KF9faSk7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcj0oYm9vbCBfX2kpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX01fYmFzZS5vcGVyYXRvcj0oX19pKTsgfQorCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gX01fYmFzZS5sb2FkKCk7IH0KKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB2b2xhdGlsZSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX2Jhc2UubG9hZCgpOyB9CisKKyAgICBib29sCisgICAgaXNfbG9ja19mcmVlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01fYmFzZS5pc19sb2NrX2ZyZWUoKTsgfQorCisgICAgYm9vbAorICAgIGlzX2xvY2tfZnJlZSgpIGNvbnN0IHZvbGF0aWxlIG5vZXhjZXB0IHsgcmV0dXJuIF9NX2Jhc2UuaXNfbG9ja19mcmVlKCk7IH0KKworICAgIHZvaWQKKyAgICBzdG9yZShib29sIF9faSwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgIHsgX01fYmFzZS5zdG9yZShfX2ksIF9fbSk7IH0KKworICAgIHZvaWQKKyAgICBzdG9yZShib29sIF9faSwgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgIHsgX01fYmFzZS5zdG9yZShfX2ksIF9fbSk7IH0KKworICAgIGJvb2wKKyAgICBsb2FkKG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3Qgbm9leGNlcHQKKyAgICB7IHJldHVybiBfTV9iYXNlLmxvYWQoX19tKTsgfQorCisgICAgYm9vbAorICAgIGxvYWQobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCB2b2xhdGlsZSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX2Jhc2UubG9hZChfX20pOyB9CisKKyAgICBib29sCisgICAgZXhjaGFuZ2UoYm9vbCBfX2ksIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfTV9iYXNlLmV4Y2hhbmdlKF9faSwgX19tKTsgfQorCisgICAgYm9vbAorICAgIGV4Y2hhbmdlKGJvb2wgX19pLAorCSAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX2Jhc2UuZXhjaGFuZ2UoX19pLCBfX20pOyB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKGJvb2wmIF9faTEsIGJvb2wgX19pMiwgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkgIG1lbW9yeV9vcmRlciBfX20yKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX2Jhc2UuY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKGJvb2wmIF9faTEsIGJvb2wgX19pMiwgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkgIG1lbW9yeV9vcmRlciBfX20yKSB2b2xhdGlsZSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX2Jhc2UuY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKGJvb2wmIF9faTEsIGJvb2wgX19pMiwKKwkJCSAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX2Jhc2UuY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faTEsIF9faTIsIF9fbSk7IH0KKworICAgIGJvb2wKKyAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoYm9vbCYgX19pMSwgYm9vbCBfX2kyLAorCQkgICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICB7IHJldHVybiBfTV9iYXNlLmNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfX2kxLCBfX2kyLCBfX20pOyB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYm9vbCYgX19pMSwgYm9vbCBfX2kyLCBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tMikgbm9leGNlcHQKKyAgICB7IHJldHVybiBfTV9iYXNlLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYm9vbCYgX19pMSwgYm9vbCBfX2kyLCBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tMikgdm9sYXRpbGUgbm9leGNlcHQKKyAgICB7IHJldHVybiBfTV9iYXNlLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgICBib29sCisgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYm9vbCYgX19pMSwgYm9vbCBfX2kyLAorCQkJICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfTV9iYXNlLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faTEsIF9faTIsIF9fbSk7IH0KKworICAgIGJvb2wKKyAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhib29sJiBfX2kxLCBib29sIF9faTIsCisJCSAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX01fYmFzZS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2kxLCBfX2kyLCBfX20pOyB9CisgIH07CisKKworICAvKioKKyAgICogIEBicmllZiBHZW5lcmljIGF0b21pYyB0eXBlLCBwcmltYXJ5IGNsYXNzIHRlbXBsYXRlLgorICAgKgorICAgKiAgQHRwYXJhbSBfVHAgIFR5cGUgdG8gYmUgbWFkZSBhdG9taWMsIG11c3QgYmUgdHJpdmFsbHkgY29weWFibGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGF0b21pYworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgX1RwIF9NX2k7CisKKyAgICBwdWJsaWM6CisgICAgICBhdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgY29uc3RleHByIGF0b21pYyhfVHAgX19pKSBub2V4Y2VwdCA6IF9NX2koX19pKSB7IH0KKworICAgICAgb3BlcmF0b3IgX1RwKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGxvYWQoKTsgfQorCisgICAgICBvcGVyYXRvciBfVHAoKSBjb25zdCB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gbG9hZCgpOyB9CisKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3I9KF9UcCBfX2kpIG5vZXhjZXB0IAorICAgICAgeyBzdG9yZShfX2kpOyByZXR1cm4gX19pOyB9CisKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3I9KF9UcCBfX2kpIHZvbGF0aWxlIG5vZXhjZXB0IAorICAgICAgeyBzdG9yZShfX2kpOyByZXR1cm4gX19pOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGlzX2xvY2tfZnJlZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19pc19sb2NrX2ZyZWUoc2l6ZW9mKF9NX2kpLCBudWxscHRyKTsgfQorCisgICAgICBib29sCisgICAgICBpc19sb2NrX2ZyZWUoKSBjb25zdCB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZihfTV9pKSwgbnVsbHB0cik7IH0KKworICAgICAgdm9pZAorICAgICAgc3RvcmUoX1RwIF9faSwgbWVtb3J5X29yZGVyIF9tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7IF9fYXRvbWljX3N0b3JlKCZfTV9pLCAmX19pLCBfbSk7IH0KKworICAgICAgdm9pZAorICAgICAgc3RvcmUoX1RwIF9faSwgbWVtb3J5X29yZGVyIF9tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IF9fYXRvbWljX3N0b3JlKCZfTV9pLCAmX19pLCBfbSk7IH0KKworICAgICAgX1RwCisgICAgICBsb2FkKG1lbW9yeV9vcmRlciBfbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCBub2V4Y2VwdAorICAgICAgeyAKKyAgICAgICAgX1RwIHRtcDsKKwlfX2F0b21pY19sb2FkKCZfTV9pLCAmdG1wLCBfbSk7IAorCXJldHVybiB0bXA7CisgICAgICB9CisKKyAgICAgIF9UcAorICAgICAgbG9hZChtZW1vcnlfb3JkZXIgX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3Qgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgCisgICAgICAgIF9UcCB0bXA7CisJX19hdG9taWNfbG9hZCgmX01faSwgJnRtcCwgX20pOyAKKwlyZXR1cm4gdG1wOworICAgICAgfQorCisgICAgICBfVHAKKyAgICAgIGV4Y2hhbmdlKF9UcCBfX2ksIG1lbW9yeV9vcmRlciBfbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeyAKKyAgICAgICAgX1RwIHRtcDsKKwlfX2F0b21pY19leGNoYW5nZSgmX01faSwgJl9faSwgJnRtcCwgX20pOyAKKwlyZXR1cm4gdG1wOworICAgICAgfQorCisgICAgICBfVHAKKyAgICAgIGV4Y2hhbmdlKF9UcCBfX2ksIAorCSAgICAgICBtZW1vcnlfb3JkZXIgX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgCisgICAgICAgIF9UcCB0bXA7CisJX19hdG9taWNfZXhjaGFuZ2UoJl9NX2ksICZfX2ksICZ0bXAsIF9tKTsgCisJcmV0dXJuIHRtcDsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9UcCYgX19lLCBfVHAgX19pLCBtZW1vcnlfb3JkZXIgX19zLCAKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19mKSBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKCZfTV9pLCAmX19lLCAmX19pLCB0cnVlLCBfX3MsIF9fZik7IAorICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX1RwJiBfX2UsIF9UcCBfX2ksIG1lbW9yeV9vcmRlciBfX3MsIAorCQkJICAgIG1lbW9yeV9vcmRlciBfX2YpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7CisJcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoJl9NX2ksICZfX2UsICZfX2ksIHRydWUsIF9fcywgX19mKTsgCisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfVHAmIF9fZSwgX1RwIF9faSwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19lLCBfX2ksIF9fbSwgX19tKTsgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX1RwJiBfX2UsIF9UcCBfX2ksCisJCSAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29tcGFyZV9leGNoYW5nZV93ZWFrKF9fZSwgX19pLCBfX20sIF9fbSk7IH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoX1RwJiBfX2UsIF9UcCBfX2ksIG1lbW9yeV9vcmRlciBfX3MsIAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fZikgbm9leGNlcHQKKyAgICAgIHsKKwlyZXR1cm4gX19hdG9taWNfY29tcGFyZV9leGNoYW5nZSgmX01faSwgJl9fZSwgJl9faSwgZmFsc2UsIF9fcywgX19mKTsgCisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9UcCYgX19lLCBfVHAgX19pLCBtZW1vcnlfb3JkZXIgX19zLCAKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX2YpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7CisJcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoJl9NX2ksICZfX2UsICZfX2ksIGZhbHNlLCBfX3MsIF9fZik7IAorICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfVHAmIF9fZSwgX1RwIF9faSwKKwkJCSAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2UsIF9faSwgX19tLCBfX20pOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9UcCYgX19lLCBfVHAgX19pLAorCQkgICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9fZSwgX19pLCBfX20sIF9fbSk7IH0KKyAgICB9OworCisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHBvaW50ZXIgdHlwZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYXRvbWljPF9UcCo+CisgICAgeworICAgICAgdHlwZWRlZiBfVHAqIAkJCV9fcG9pbnRlcl90eXBlOworICAgICAgdHlwZWRlZiBfX2F0b21pY19iYXNlPF9UcCo+CV9fYmFzZV90eXBlOworICAgICAgX19iYXNlX3R5cGUJCQlfTV9iOworCisgICAgICBhdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgY29uc3RleHByIGF0b21pYyhfX3BvaW50ZXJfdHlwZSBfX3ApIG5vZXhjZXB0IDogX01fYihfX3ApIHsgfQorCisgICAgICBvcGVyYXRvciBfX3BvaW50ZXJfdHlwZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX3BvaW50ZXJfdHlwZShfTV9iKTsgfQorCisgICAgICBvcGVyYXRvciBfX3BvaW50ZXJfdHlwZSgpIGNvbnN0IHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX3BvaW50ZXJfdHlwZShfTV9iKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgb3BlcmF0b3I9KF9fcG9pbnRlcl90eXBlIF9fcCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2Iub3BlcmF0b3I9KF9fcCk7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIG9wZXJhdG9yPShfX3BvaW50ZXJfdHlwZSBfX3ApIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLm9wZXJhdG9yPShfX3ApOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvcisrKGludCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2IrKzsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgb3BlcmF0b3IrKyhpbnQpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iKys7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIG9wZXJhdG9yLS0oaW50KSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fYi0tOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvci0tKGludCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2ItLTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgb3BlcmF0b3IrKygpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiArK19NX2I7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIG9wZXJhdG9yKysoKSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gKytfTV9iOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvci0tKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIC0tX01fYjsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgb3BlcmF0b3ItLSgpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiAtLV9NX2I7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIG9wZXJhdG9yKz0ocHRyZGlmZl90IF9fZCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2Iub3BlcmF0b3IrPShfX2QpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvcis9KHB0cmRpZmZfdCBfX2QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLm9wZXJhdG9yKz0oX19kKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgb3BlcmF0b3ItPShwdHJkaWZmX3QgX19kKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fYi5vcGVyYXRvci09KF9fZCk7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIG9wZXJhdG9yLT0ocHRyZGlmZl90IF9fZCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2Iub3BlcmF0b3ItPShfX2QpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGlzX2xvY2tfZnJlZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmlzX2xvY2tfZnJlZSgpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGlzX2xvY2tfZnJlZSgpIGNvbnN0IHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmlzX2xvY2tfZnJlZSgpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN0b3JlKF9fcG9pbnRlcl90eXBlIF9fcCwKKwkgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fYi5zdG9yZShfX3AsIF9fbSk7IH0KKworICAgICAgdm9pZAorICAgICAgc3RvcmUoX19wb2ludGVyX3R5cGUgX19wLAorCSAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLnN0b3JlKF9fcCwgX19tKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgbG9hZChtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmxvYWQoX19tKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgbG9hZChtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmxvYWQoX19tKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgZXhjaGFuZ2UoX19wb2ludGVyX3R5cGUgX19wLAorCSAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmV4Y2hhbmdlKF9fcCwgX19tKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgZXhjaGFuZ2UoX19wb2ludGVyX3R5cGUgX19wLAorCSAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmV4Y2hhbmdlKF9fcCwgX19tKTsgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19wb2ludGVyX3R5cGUmIF9fcDEsIF9fcG9pbnRlcl90eXBlIF9fcDIsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbTEsIG1lbW9yeV9vcmRlciBfX20yKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fYi5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX3AxLCBfX3AyLCBfX20xLCBfX20yKTsgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19wb2ludGVyX3R5cGUmIF9fcDEsIF9fcG9pbnRlcl90eXBlIF9fcDIsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkgICAgbWVtb3J5X29yZGVyIF9fbTIpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9fcDEsIF9fcDIsIF9fbTEsIF9fbTIpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfX3BvaW50ZXJfdHlwZSYgX19wMSwgX19wb2ludGVyX3R5cGUgX19wMiwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7CisJcmV0dXJuIGNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfX3AxLCBfX3AyLCBfX20sCisJCQkJICAgICBfX2NtcGV4Y2hfZmFpbHVyZV9vcmRlcihfX20pKTsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9fcG9pbnRlcl90eXBlJiBfX3AxLCBfX3BvaW50ZXJfdHlwZSBfX3AyLAorCQkgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19wMSwgX19wMiwgX19tLAorCQkJCSAgICAgX19jbXBleGNoX2ZhaWx1cmVfb3JkZXIoX19tKSk7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9fcG9pbnRlcl90eXBlJiBfX3AxLCBfX3BvaW50ZXJfdHlwZSBfX3AyLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbTEsIG1lbW9yeV9vcmRlciBfX20yKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fYi5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX3AxLCBfX3AyLCBfX20xLCBfX20yKTsgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX3BvaW50ZXJfdHlwZSYgX19wMSwgX19wb2ludGVyX3R5cGUgX19wMiwKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX20xLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbTIpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9fcDEsIF9fcDIsIF9fbTEsIF9fbTIpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9fcG9pbnRlcl90eXBlJiBfX3AxLCBfX3BvaW50ZXJfdHlwZSBfX3AyLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBfTV9iLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9fcDEsIF9fcDIsIF9fbSwKKwkJCQkJICAgIF9fY21wZXhjaF9mYWlsdXJlX29yZGVyKF9fbSkpOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX3BvaW50ZXJfdHlwZSYgX19wMSwgX19wb2ludGVyX3R5cGUgX19wMiwKKwkJICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsKKwlyZXR1cm4gX01fYi5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX3AxLCBfX3AyLCBfX20sCisJCQkJCSAgICBfX2NtcGV4Y2hfZmFpbHVyZV9vcmRlcihfX20pKTsKKyAgICAgIH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGZldGNoX2FkZChwdHJkaWZmX3QgX19kLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmZldGNoX2FkZChfX2QsIF9fbSk7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGZldGNoX2FkZChwdHJkaWZmX3QgX19kLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmZldGNoX2FkZChfX2QsIF9fbSk7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGZldGNoX3N1YihwdHJkaWZmX3QgX19kLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmZldGNoX3N1YihfX2QsIF9fbSk7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGZldGNoX3N1YihwdHJkaWZmX3QgX19kLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iLmZldGNoX3N1YihfX2QsIF9fbSk7IH0KKyAgICB9OworCisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBib29sLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzxib29sPiA6IHB1YmxpYyBhdG9taWNfYm9vbAorICAgIHsKKyAgICAgIHR5cGVkZWYgYm9vbCAJCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY19ib29sIAkJX19iYXNlX3R5cGU7CisKKyAgICAgIGF0b21pYygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBjb25zdGV4cHIgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIG5vZXhjZXB0IDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGNoYXIuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPGNoYXI+IDogcHVibGljIGF0b21pY19jaGFyCisgICAgeworICAgICAgdHlwZWRlZiBjaGFyIAkJCV9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHR5cGVkZWYgYXRvbWljX2NoYXIgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGNvbnN0ZXhwciBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgbm9leGNlcHQgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3Igc2lnbmVkIGNoYXIuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPHNpZ25lZCBjaGFyPiA6IHB1YmxpYyBhdG9taWNfc2NoYXIKKyAgICB7CisgICAgICB0eXBlZGVmIHNpZ25lZCBjaGFyIAkJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfc2NoYXIgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgbm9leGNlcHQ9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgY29uc3RleHByIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSBub2V4Y2VwdCA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBjaGFyLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzx1bnNpZ25lZCBjaGFyPiA6IHB1YmxpYyBhdG9taWNfdWNoYXIKKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY191Y2hhciAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSBub2V4Y2VwdD0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBjb25zdGV4cHIgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIG5vZXhjZXB0IDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHNob3J0LgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzxzaG9ydD4gOiBwdWJsaWMgYXRvbWljX3Nob3J0CisgICAgeworICAgICAgdHlwZWRlZiBzaG9ydCAJCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY19zaG9ydCAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgY29uc3RleHByIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSBub2V4Y2VwdCA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBzaG9ydC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8dW5zaWduZWQgc2hvcnQ+IDogcHVibGljIGF0b21pY191c2hvcnQKKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IAkgICAgICAJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfdXNob3J0IAkJX19iYXNlX3R5cGU7CisKKyAgICAgIGF0b21pYygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBjb25zdGV4cHIgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIG5vZXhjZXB0IDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGludC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8aW50PiA6IGF0b21pY19pbnQKKyAgICB7CisgICAgICB0eXBlZGVmIGludCAJCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY19pbnQgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGNvbnN0ZXhwciBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgbm9leGNlcHQgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgdW5zaWduZWQgaW50LgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzx1bnNpZ25lZCBpbnQ+IDogcHVibGljIGF0b21pY191aW50CisgICAgeworICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQJCV9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHR5cGVkZWYgYXRvbWljX3VpbnQgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGNvbnN0ZXhwciBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgbm9leGNlcHQgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgbG9uZy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8bG9uZz4gOiBwdWJsaWMgYXRvbWljX2xvbmcKKyAgICB7CisgICAgICB0eXBlZGVmIGxvbmcgCQkJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfbG9uZyAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgY29uc3RleHByIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSBub2V4Y2VwdCA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBsb25nLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGF0b21pYzx1bnNpZ25lZCBsb25nPiA6IHB1YmxpYyBhdG9taWNfdWxvbmcKKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY191bG9uZyAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgY29uc3RleHByIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSBub2V4Y2VwdCA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBsb25nIGxvbmcuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPGxvbmcgbG9uZz4gOiBwdWJsaWMgYXRvbWljX2xsb25nCisgICAgeworICAgICAgdHlwZWRlZiBsb25nIGxvbmcgCQlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY19sbG9uZyAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgY29uc3RleHByIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSBub2V4Y2VwdCA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBsb25nIGxvbmcuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPHVuc2lnbmVkIGxvbmcgbG9uZz4gOiBwdWJsaWMgYXRvbWljX3VsbG9uZworICAgIHsKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICAgICAgIAlfX2ludGVncmFsX3R5cGU7CisgICAgICB0eXBlZGVmIGF0b21pY191bGxvbmcgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGNvbnN0ZXhwciBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgbm9leGNlcHQgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3Igd2NoYXJfdC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8d2NoYXJfdD4gOiBwdWJsaWMgYXRvbWljX3djaGFyX3QKKyAgICB7CisgICAgICB0eXBlZGVmIHdjaGFyX3QgCQkJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfd2NoYXJfdCAJCV9fYmFzZV90eXBlOworCisgICAgICBhdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+YXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgYXRvbWljKGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgICAgY29uc3RleHByIGF0b21pYyhfX2ludGVncmFsX3R5cGUgX19pKSBub2V4Y2VwdCA6IF9fYmFzZV90eXBlKF9faSkgeyB9CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvciBfX2ludGVncmFsX3R5cGU7CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3I9OworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBjaGFyMTZfdC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBhdG9taWM8Y2hhcjE2X3Q+IDogcHVibGljIGF0b21pY19jaGFyMTZfdAorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhcjE2X3QgCQkJX19pbnRlZ3JhbF90eXBlOworICAgICAgdHlwZWRlZiBhdG9taWNfY2hhcjE2X3QgCQlfX2Jhc2VfdHlwZTsKKworICAgICAgYXRvbWljKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgICAgfmF0b21pYygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIGF0b21pYyhjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpID0gZGVsZXRlOworICAgICAgYXRvbWljJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIGNvbnN0ZXhwciBhdG9taWMoX19pbnRlZ3JhbF90eXBlIF9faSkgbm9leGNlcHQgOiBfX2Jhc2VfdHlwZShfX2kpIHsgfQorCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6b3BlcmF0b3IgX19pbnRlZ3JhbF90eXBlOworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yPTsKKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgY2hhcjMyX3QuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgYXRvbWljPGNoYXIzMl90PiA6IHB1YmxpYyBhdG9taWNfY2hhcjMyX3QKKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXIzMl90IAkJCV9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHR5cGVkZWYgYXRvbWljX2NoYXIzMl90IAkJX19iYXNlX3R5cGU7CisKKyAgICAgIGF0b21pYygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIH5hdG9taWMoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICBhdG9taWMoY29uc3QgYXRvbWljJikgPSBkZWxldGU7CisgICAgICBhdG9taWMmIG9wZXJhdG9yPShjb25zdCBhdG9taWMmKSA9IGRlbGV0ZTsKKyAgICAgIGF0b21pYyYgb3BlcmF0b3I9KGNvbnN0IGF0b21pYyYpIHZvbGF0aWxlID0gZGVsZXRlOworCisgICAgICBjb25zdGV4cHIgYXRvbWljKF9faW50ZWdyYWxfdHlwZSBfX2kpIG5vZXhjZXB0IDogX19iYXNlX3R5cGUoX19pKSB7IH0KKworICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Om9wZXJhdG9yIF9faW50ZWdyYWxfdHlwZTsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjpvcGVyYXRvcj07CisgICAgfTsKKworCisgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb25zLCBhdG9taWNfZmxhZyBvcGVyYXRpb25zLgorICBpbmxpbmUgYm9vbAorICBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQoYXRvbWljX2ZsYWcqIF9fYSwKKwkJCQkgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgeyByZXR1cm4gX19hLT50ZXN0X2FuZF9zZXQoX19tKTsgfQorCisgIGlubGluZSBib29sCisgIGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyogX19hLAorCQkJCSAgICBtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICB7IHJldHVybiBfX2EtPnRlc3RfYW5kX3NldChfX20pOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoYXRvbWljX2ZsYWcqIF9fYSwgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgeyBfX2EtPmNsZWFyKF9fbSk7IH0KKworICBpbmxpbmUgdm9pZAorICBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyogX19hLAorCQkJICAgICBtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICB7IF9fYS0+Y2xlYXIoX19tKTsgfQorCisgIGlubGluZSBib29sCisgIGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldChhdG9taWNfZmxhZyogX19hKSBub2V4Y2VwdAorICB7IHJldHVybiBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQoX19hLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICBpbmxpbmUgYm9vbAorICBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQodm9sYXRpbGUgYXRvbWljX2ZsYWcqIF9fYSkgbm9leGNlcHQKKyAgeyByZXR1cm4gYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KF9fYSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgYXRvbWljX2ZsYWdfY2xlYXIoYXRvbWljX2ZsYWcqIF9fYSkgbm9leGNlcHQKKyAgeyBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChfX2EsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIGlubGluZSB2b2lkCisgIGF0b21pY19mbGFnX2NsZWFyKHZvbGF0aWxlIGF0b21pY19mbGFnKiBfX2EpIG5vZXhjZXB0CisgIHsgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19hLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworCisgIC8vIEZ1bmN0aW9uIHRlbXBsYXRlcyBnZW5lcmFsbHkgYXBwbGljYWJsZSB0byBhdG9taWMgdHlwZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBhdG9taWNfaXNfbG9ja19mcmVlKGNvbnN0IGF0b21pYzxfSVRwPiogX19hKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS0+aXNfbG9ja19mcmVlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBib29sCisgICAgYXRvbWljX2lzX2xvY2tfZnJlZShjb25zdCB2b2xhdGlsZSBhdG9taWM8X0lUcD4qIF9fYSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmlzX2xvY2tfZnJlZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGF0b21pY19pbml0KGF0b21pYzxfSVRwPiogX19hLCBfSVRwIF9faSkgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGF0b21pY19pbml0KHZvbGF0aWxlIGF0b21pYzxfSVRwPiogX19hLCBfSVRwIF9faSkgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGF0b21pY19zdG9yZV9leHBsaWNpdChhdG9taWM8X0lUcD4qIF9fYSwgX0lUcCBfX2ksCisJCQkgIG1lbW9yeV9vcmRlciBfX20pIG5vZXhjZXB0CisgICAgeyBfX2EtPnN0b3JlKF9faSwgX19tKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICBtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICAgIHsgX19hLT5zdG9yZShfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2xvYWRfZXhwbGljaXQoY29uc3QgYXRvbWljPF9JVHA+KiBfX2EsIG1lbW9yeV9vcmRlciBfX20pIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5sb2FkKF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2xvYWRfZXhwbGljaXQoY29uc3Qgdm9sYXRpbGUgYXRvbWljPF9JVHA+KiBfX2EsCisJCQkgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmxvYWQoX19tKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAKKyAgICBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoYXRvbWljPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICBtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS0+ZXhjaGFuZ2UoX19pLCBfX20pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWM8X0lUcD4qIF9fYSwgX0lUcCBfX2ksCisJCQkgICAgIG1lbW9yeV9vcmRlciBfX20pIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5leGNoYW5nZShfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBib29sCisgICAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChhdG9taWM8X0lUcD4qIF9fYSwKKwkJCQkJICBfSVRwKiBfX2kxLCBfSVRwIF9faTIsCisJCQkJCSAgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkJCSAgbWVtb3J5X29yZGVyIF9fbTIpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5jb21wYXJlX2V4Y2hhbmdlX3dlYWsoKl9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljPF9JVHA+KiBfX2EsCisJCQkJCSAgX0lUcCogX19pMSwgX0lUcCBfX2kyLAorCQkJCQkgIG1lbW9yeV9vcmRlciBfX20xLAorCQkJCQkgIG1lbW9yeV9vcmRlciBfX20yKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS0+Y29tcGFyZV9leGNoYW5nZV93ZWFrKCpfX2kxLCBfX2kyLCBfX20xLCBfX20yKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQoYXRvbWljPF9JVHA+KiBfX2EsCisJCQkJCSAgICBfSVRwKiBfX2kxLCBfSVRwIF9faTIsCisJCQkJCSAgICBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCQkJICAgIG1lbW9yeV9vcmRlciBfX20yKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS0+Y29tcGFyZV9leGNoYW5nZV9zdHJvbmcoKl9faTEsIF9faTIsIF9fbTEsIF9fbTIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCh2b2xhdGlsZSBhdG9taWM8X0lUcD4qIF9fYSwKKwkJCQkJICAgIF9JVHAqIF9faTEsIF9JVHAgX19pMiwKKwkJCQkJICAgIG1lbW9yeV9vcmRlciBfX20xLAorCQkJCQkgICAgbWVtb3J5X29yZGVyIF9fbTIpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygqX19pMSwgX19pMiwgX19tMSwgX19tMik7IH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBhdG9taWNfc3RvcmUoYXRvbWljPF9JVHA+KiBfX2EsIF9JVHAgX19pKSBub2V4Y2VwdAorICAgIHsgYXRvbWljX3N0b3JlX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSB2b2lkCisgICAgYXRvbWljX3N0b3JlKHZvbGF0aWxlIGF0b21pYzxfSVRwPiogX19hLCBfSVRwIF9faSkgbm9leGNlcHQKKyAgICB7IGF0b21pY19zdG9yZV9leHBsaWNpdChfX2EsIF9faSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19sb2FkKGNvbnN0IGF0b21pYzxfSVRwPiogX19hKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGF0b21pY19sb2FkX2V4cGxpY2l0KF9fYSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19sb2FkKGNvbnN0IHZvbGF0aWxlIGF0b21pYzxfSVRwPiogX19hKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGF0b21pY19sb2FkX2V4cGxpY2l0KF9fYSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19leGNoYW5nZShhdG9taWM8X0lUcD4qIF9fYSwgX0lUcCBfX2kpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2V4Y2hhbmdlKHZvbGF0aWxlIGF0b21pYzxfSVRwPiogX19hLCBfSVRwIF9faSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoX19hLCBfX2ksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKGF0b21pYzxfSVRwPiogX19hLAorCQkJCSBfSVRwKiBfX2kxLCBfSVRwIF9faTIpIG5vZXhjZXB0CisgICAgeworICAgICAgcmV0dXJuIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQoX19hLCBfX2kxLCBfX2kyLAorCQkJCQkJICAgbWVtb3J5X29yZGVyX3NlcV9jc3QsCisJCQkJCQkgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKHZvbGF0aWxlIGF0b21pYzxfSVRwPiogX19hLAorCQkJCSBfSVRwKiBfX2kxLCBfSVRwIF9faTIpIG5vZXhjZXB0CisgICAgeworICAgICAgcmV0dXJuIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQoX19hLCBfX2kxLCBfX2kyLAorCQkJCQkJICAgbWVtb3J5X29yZGVyX3NlcV9jc3QsCisJCQkJCQkgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoYXRvbWljPF9JVHA+KiBfX2EsCisJCQkJICAgX0lUcCogX19pMSwgX0lUcCBfX2kyKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHJldHVybiBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQoX19hLCBfX2kxLCBfX2kyLAorCQkJCQkJICAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCwKKwkJCQkJCSAgICAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBib29sCisgICAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKHZvbGF0aWxlIGF0b21pYzxfSVRwPiogX19hLAorCQkJCSAgIF9JVHAqIF9faTEsIF9JVHAgX19pMikgbm9leGNlcHQKKyAgICB7CisgICAgICByZXR1cm4gYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KF9fYSwgX19pMSwgX19pMiwKKwkJCQkJCSAgICAgbWVtb3J5X29yZGVyX3NlcV9jc3QsCisJCQkJCQkgICAgIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKyAgICB9CisKKyAgLy8gRnVuY3Rpb24gdGVtcGxhdGVzIGZvciBhdG9taWNfaW50ZWdyYWwgb3BlcmF0aW9ucyBvbmx5LCB1c2luZworICAvLyBfX2F0b21pY19iYXNlLiBUZW1wbGF0ZSBhcmd1bWVudCBzaG91bGQgYmUgY29uc3RyaWN0ZWQgdG8KKyAgLy8gaW50ZXJncmFsIHR5cGVzIGFzIHNwZWNpZmllZCBpbiB0aGUgc3RhbmRhcmQsIGV4Y2x1ZGluZyBhZGRyZXNzCisgIC8vIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmZldGNoX2FkZChfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmZldGNoX2FkZChfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmZldGNoX3N1YihfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmZldGNoX3N1YihfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmZldGNoX2FuZChfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCh2b2xhdGlsZSBfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmZldGNoX2FuZChfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2ksCisJCQkgICAgIG1lbW9yeV9vcmRlciBfX20pIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9vcihfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KHZvbGF0aWxlIF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2ksCisJCQkgICAgIG1lbW9yeV9vcmRlciBfX20pIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9vcihfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmZldGNoX3hvcihfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdCh2b2xhdGlsZSBfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EtPmZldGNoX3hvcihfX2ksIF9fbSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX2FkZChfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQoX19hLCBfX2ksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAKKyAgICBhdG9taWNfZmV0Y2hfYWRkKHZvbGF0aWxlIF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChfX2EsIF9faSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19mZXRjaF9zdWIoX19hdG9taWNfYmFzZTxfSVRwPiogX19hLCBfSVRwIF9faSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX3N1Yih2b2xhdGlsZSBfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQoX19hLCBfX2ksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAKKyAgICBhdG9taWNfZmV0Y2hfYW5kKF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChfX2EsIF9faSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lUcD4KKyAgICBpbmxpbmUgX0lUcAorICAgIGF0b21pY19mZXRjaF9hbmQodm9sYXRpbGUgX19hdG9taWNfYmFzZTxfSVRwPiogX19hLCBfSVRwIF9faSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX29yKF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX29yKHZvbGF0aWxlIF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KF9fYSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSVRwPgorICAgIGlubGluZSBfSVRwCisgICAgYXRvbWljX2ZldGNoX3hvcihfX2F0b21pY19iYXNlPF9JVHA+KiBfX2EsIF9JVHAgX19pKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQoX19hLCBfX2ksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAKKyAgICBhdG9taWNfZmV0Y2hfeG9yKHZvbGF0aWxlIF9fYXRvbWljX2Jhc2U8X0lUcD4qIF9fYSwgX0lUcCBfX2kpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChfX2EsIF9faSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKworICAvLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9ucyBmb3IgcG9pbnRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAqCisgICAgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChhdG9taWM8X0lUcCo+KiBfX2EsIHB0cmRpZmZfdCBfX2QsCisJCQkgICAgICBtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfYWRkKF9fZCwgX19tKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAqCisgICAgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWM8X0lUcCo+KiBfX2EsIHB0cmRpZmZfdCBfX2QsCisJCQkgICAgICBtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfYWRkKF9fZCwgX19tKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAqCisgICAgYXRvbWljX2ZldGNoX2FkZCh2b2xhdGlsZSBhdG9taWM8X0lUcCo+KiBfX2EsIHB0cmRpZmZfdCBfX2QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9hZGQoX19kKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAqCisgICAgYXRvbWljX2ZldGNoX2FkZChhdG9taWM8X0lUcCo+KiBfX2EsIHB0cmRpZmZfdCBfX2QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9hZGQoX19kKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAqCisgICAgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWM8X0lUcCo+KiBfX2EsCisJCQkgICAgICBwdHJkaWZmX3QgX19kLCBtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfc3ViKF9fZCwgX19tKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAqCisgICAgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChhdG9taWM8X0lUcCo+KiBfX2EsIHB0cmRpZmZfdCBfX2QsCisJCQkgICAgICBtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS0+ZmV0Y2hfc3ViKF9fZCwgX19tKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAqCisgICAgYXRvbWljX2ZldGNoX3N1Yih2b2xhdGlsZSBhdG9taWM8X0lUcCo+KiBfX2EsIHB0cmRpZmZfdCBfX2QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9zdWIoX19kKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgaW5saW5lIF9JVHAqCisgICAgYXRvbWljX2ZldGNoX3N1YihhdG9taWM8X0lUcCo+KiBfX2EsIHB0cmRpZmZfdCBfX2QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLT5mZXRjaF9zdWIoX19kKTsgfQorICAvLyBAfSBncm91cCBhdG9taWNzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JhY2t3YXJkL2F1dG9fcHRyLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JhY2t3YXJkL2F1dG9fcHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjOWQyZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvYXV0b19wdHIuaApAQCAtMCwwICsxLDMyOSBAQAorLy8gYXV0b19wdHIgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJhY2t3YXJkL2F1dG9fcHRyLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttZW1vcnl9CisgKi8KKworI2lmbmRlZiBfQkFDS1dBUkRfQVVUT19QVFJfSAorI2RlZmluZSBfQkFDS1dBUkRfQVVUT19QVFJfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEEgd3JhcHBlciBjbGFzcyB0byBwcm92aWRlIGF1dG9fcHRyIHdpdGggcmVmZXJlbmNlIHNlbWFudGljcy4KKyAgICogIEZvciBleGFtcGxlLCBhbiBhdXRvX3B0ciBjYW4gYmUgYXNzaWduZWQgKG9yIGNvbnN0cnVjdGVkIGZyb20pCisgICAqICB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBhdXRvX3B0ciBieSB2YWx1ZS4KKyAgICoKKyAgICogIEFsbCB0aGUgYXV0b19wdHJfcmVmIHN0dWZmIHNob3VsZCBoYXBwZW4gYmVoaW5kIHRoZSBzY2VuZXMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgIHN0cnVjdCBhdXRvX3B0cl9yZWYKKyAgICB7CisgICAgICBfVHAxKiBfTV9wdHI7CisgICAgICAKKyAgICAgIGV4cGxpY2l0CisgICAgICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKTogX01fcHRyKF9fcCkgeyB9CisgICAgfSBfR0xJQkNYWF9ERVBSRUNBVEVEOworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgc2ltcGxlIHNtYXJ0IHBvaW50ZXIgcHJvdmlkaW5nIHN0cmljdCBvd25lcnNoaXAgc2VtYW50aWNzLgorICAgKgorICAgKiAgVGhlIFN0YW5kYXJkIHNheXM6CisgICAqICA8cHJlPgorICAgKiAgQW4gQGMgYXV0b19wdHIgb3ducyB0aGUgb2JqZWN0IGl0IGhvbGRzIGEgcG9pbnRlciB0by4gIENvcHlpbmcKKyAgICogIGFuIEBjIGF1dG9fcHRyIGNvcGllcyB0aGUgcG9pbnRlciBhbmQgdHJhbnNmZXJzIG93bmVyc2hpcCB0byB0aGUKKyAgICogIGRlc3RpbmF0aW9uLiAgSWYgbW9yZSB0aGFuIG9uZSBAYyBhdXRvX3B0ciBvd25zIHRoZSBzYW1lIG9iamVjdAorICAgKiAgYXQgdGhlIHNhbWUgdGltZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHByb2dyYW0gaXMgdW5kZWZpbmVkLgorICAgKgorICAgKiAgVGhlIHVzZXMgb2YgQGMgYXV0b19wdHIgaW5jbHVkZSBwcm92aWRpbmcgdGVtcG9yYXJ5CisgICAqICBleGNlcHRpb24tc2FmZXR5IGZvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5LCBwYXNzaW5nCisgICAqICBvd25lcnNoaXAgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSB0byBhIGZ1bmN0aW9uLCBhbmQKKyAgICogIHJldHVybmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGZyb20gYSBmdW5jdGlvbi4gIEBjCisgICAqICBhdXRvX3B0ciBkb2VzIG5vdCBtZWV0IHRoZSBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZQorICAgKiAgcmVxdWlyZW1lbnRzIGZvciBTdGFuZGFyZCBMaWJyYXJ5IDxhCisgICAqICBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiBlbGVtZW50cyBhbmQgdGh1cworICAgKiAgaW5zdGFudGlhdGluZyBhIFN0YW5kYXJkIExpYnJhcnkgY29udGFpbmVyIHdpdGggYW4gQGMgYXV0b19wdHIKKyAgICogIHJlc3VsdHMgaW4gdW5kZWZpbmVkIGJlaGF2aW9yLgorICAgKiAgPC9wcmU+CisgICAqICBRdW90ZWQgZnJvbSBbMjAuNC41XS8zLgorICAgKgorICAgKiAgR29vZCBleGFtcGxlcyBvZiB3aGF0IGNhbiBhbmQgY2Fubm90IGJlIGRvbmUgd2l0aCBhdXRvX3B0ciBjYW4KKyAgICogIGJlIGZvdW5kIGluIHRoZSBsaWJzdGRjKysgdGVzdHN1aXRlLgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgKiAgMTI3LiAgYXV0b19wdHI8PiBjb252ZXJzaW9uIGlzc3VlcworICAgKiAgVGhlc2UgcmVzb2x1dGlvbnMgaGF2ZSBhbGwgYmVlbiBpbmNvcnBvcmF0ZWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgYXV0b19wdHIKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIF9UcCogX01fcHRyOworICAgICAgCisgICAgcHVibGljOgorICAgICAgLy8vIFRoZSBwb2ludGVkLXRvIHR5cGUuCisgICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQW4gJWF1dG9fcHRyIGlzIHVzdWFsbHkgY29uc3RydWN0ZWQgZnJvbSBhIHJhdyBwb2ludGVyLgorICAgICAgICogIEBwYXJhbSAgX19wICBBIHBvaW50ZXIgKGRlZmF1bHRzIHRvIE5VTEwpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9iamVjdCBub3cgQGUgb3ducyB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgQGEgX19wLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQW4gJWF1dG9fcHRyIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGFub3RoZXIgJWF1dG9fcHRyLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbm90aGVyICVhdXRvX3B0ciBvZiB0aGUgc2FtZSB0eXBlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9iamVjdCBub3cgQGUgb3ducyB0aGUgb2JqZWN0IHByZXZpb3VzbHkgb3duZWQgYnkgQGEgX19hLAorICAgICAgICogIHdoaWNoIGhhcyBnaXZlbiB1cCBvd25lcnNoaXAuCisgICAgICAgKi8KKyAgICAgIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQW4gJWF1dG9fcHRyIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGFub3RoZXIgJWF1dG9fcHRyLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbm90aGVyICVhdXRvX3B0ciBvZiBhIGRpZmZlcmVudCBidXQgcmVsYXRlZCB0eXBlLgorICAgICAgICoKKyAgICAgICAqICBBIHBvaW50ZXItdG8tVHAxIG11c3QgYmUgY29udmVydGlibGUgdG8gYQorICAgICAgICogIHBvaW50ZXItdG8tVHAvZWxlbWVudF90eXBlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9iamVjdCBub3cgQGUgb3ducyB0aGUgb2JqZWN0IHByZXZpb3VzbHkgb3duZWQgYnkgQGEgX19hLAorICAgICAgICogIHdoaWNoIGhhcyBnaXZlbiB1cCBvd25lcnNoaXAuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJWF1dG9fcHRyIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFub3RoZXIgJWF1dG9fcHRyIG9mIHRoZSBzYW1lIHR5cGUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb2JqZWN0IG5vdyBAZSBvd25zIHRoZSBvYmplY3QgcHJldmlvdXNseSBvd25lZCBieSBAYSBfX2EsCisgICAgICAgKiAgd2hpY2ggaGFzIGdpdmVuIHVwIG93bmVyc2hpcC4gIFRoZSBvYmplY3QgdGhhdCB0aGlzIG9uZSBAZQorICAgICAgICogIHVzZWQgdG8gb3duIGFuZCB0cmFjayBoYXMgYmVlbiBkZWxldGVkLgorICAgICAgICovCisgICAgICBhdXRvX3B0ciYKKyAgICAgIG9wZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpCisgICAgICB7CisJcmVzZXQoX19hLnJlbGVhc2UoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVhdXRvX3B0ciBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbm90aGVyICVhdXRvX3B0ciBvZiBhIGRpZmZlcmVudCBidXQgcmVsYXRlZCB0eXBlLgorICAgICAgICoKKyAgICAgICAqICBBIHBvaW50ZXItdG8tVHAxIG11c3QgYmUgY29udmVydGlibGUgdG8gYSBwb2ludGVyLXRvLVRwL2VsZW1lbnRfdHlwZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvYmplY3Qgbm93IEBlIG93bnMgdGhlIG9iamVjdCBwcmV2aW91c2x5IG93bmVkIGJ5IEBhIF9fYSwKKyAgICAgICAqICB3aGljaCBoYXMgZ2l2ZW4gdXAgb3duZXJzaGlwLiAgVGhlIG9iamVjdCB0aGF0IHRoaXMgb25lIEBlCisgICAgICAgKiAgdXNlZCB0byBvd24gYW5kIHRyYWNrIGhhcyBiZWVuIGRlbGV0ZWQuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGF1dG9fcHRyJgorICAgICAgICBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQorICAgICAgICB7CisJICByZXNldChfX2EucmVsZWFzZSgpKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogIFdoZW4gdGhlICVhdXRvX3B0ciBnb2VzIG91dCBvZiBzY29wZSwgdGhlIG9iamVjdCBpdCBvd25zIGlzCisgICAgICAgKiAgZGVsZXRlZC4gIElmIGl0IG5vIGxvbmdlciBvd25zIGFueXRoaW5nIChpLmUuLCBAYyBnZXQoKSBpcworICAgICAgICogIEBjIE5VTEwpLCB0aGVuIHRoaXMgaGFzIG5vIGVmZmVjdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIEMrKyBzdGFuZGFyZCBzYXlzIHRoZXJlIGlzIHN1cHBvc2VkIHRvIGJlIGFuIGVtcHR5IHRocm93CisgICAgICAgKiAgc3BlY2lmaWNhdGlvbiBoZXJlLCBidXQgb21pdHRpbmcgaXQgaXMgc3RhbmRhcmQgY29uZm9ybWluZy4gIEl0cworICAgICAgICogIHByZXNlbmNlIGNhbiBiZSBkZXRlY3RlZCBvbmx5IGlmIF9UcDo6fl9UcCgpIHRocm93cywgYnV0IHRoaXMgaXMKKyAgICAgICAqICBwcm9oaWJpdGVkLiAgWzE3LjQuMy42XS8yCisgICAgICAgKi8KKyAgICAgIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNtYXJ0IHBvaW50ZXIgZGVyZWZlcmVuY2luZy4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhpcyAlYXV0b19wdHIgbm8gbG9uZ2VyIG93bnMgYW55dGhpbmcsIHRoZW4gdGhpcworICAgICAgICogIG9wZXJhdGlvbiB3aWxsIGNyYXNoLiAgKEZvciBhIHNtYXJ0IHBvaW50ZXIsIDxlbT5ubyBsb25nZXIgb3ducworICAgICAgICogIGFueXRoaW5nPC9lbT4gaXMgdGhlIHNhbWUgYXMgYmVpbmcgYSBudWxsIHBvaW50ZXIsIGFuZCB5b3Uga25vdworICAgICAgICogIHdoYXQgaGFwcGVucyB3aGVuIHlvdSBkZXJlZmVyZW5jZSBvbmUgb2YgdGhvc2UuLi4pCisgICAgICAgKi8KKyAgICAgIGVsZW1lbnRfdHlwZSYKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3B0ciAhPSAwKTsKKwlyZXR1cm4gKl9NX3B0cjsgCisgICAgICB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU21hcnQgcG9pbnRlciBkZXJlZmVyZW5jaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHJldHVybnMgdGhlIHBvaW50ZXIgaXRzZWxmLCB3aGljaCB0aGUgbGFuZ3VhZ2UgdGhlbiB3aWxsCisgICAgICAgKiAgYXV0b21hdGljYWxseSBjYXVzZSB0byBiZSBkZXJlZmVyZW5jZWQuCisgICAgICAgKi8KKyAgICAgIGVsZW1lbnRfdHlwZSoKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9wdHIgIT0gMCk7CisJcmV0dXJuIF9NX3B0cjsgCisgICAgICB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnlwYXNzaW5nIHRoZSBzbWFydCBwb2ludGVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSByYXcgcG9pbnRlciBiZWluZyBtYW5hZ2VkLgorICAgICAgICoKKyAgICAgICAqICBZb3UgY2FuIGdldCBhIGNvcHkgb2YgdGhlIHBvaW50ZXIgdGhhdCB0aGlzIG9iamVjdCBvd25zLCBmb3IKKyAgICAgICAqICBzaXR1YXRpb25zIHN1Y2ggYXMgcGFzc2luZyB0byBhIGZ1bmN0aW9uIHdoaWNoIG9ubHkgYWNjZXB0cworICAgICAgICogIGEgcmF3IHBvaW50ZXIuCisgICAgICAgKgorICAgICAgICogIEBub3RlICBUaGlzICVhdXRvX3B0ciBzdGlsbCBvd25zIHRoZSBtZW1vcnkuCisgICAgICAgKi8KKyAgICAgIGVsZW1lbnRfdHlwZSoKKyAgICAgIGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnlwYXNzaW5nIHRoZSBzbWFydCBwb2ludGVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSByYXcgcG9pbnRlciBiZWluZyBtYW5hZ2VkLgorICAgICAgICoKKyAgICAgICAqICBZb3UgY2FuIGdldCBhIGNvcHkgb2YgdGhlIHBvaW50ZXIgdGhhdCB0aGlzIG9iamVjdCBvd25zLCBmb3IKKyAgICAgICAqICBzaXR1YXRpb25zIHN1Y2ggYXMgcGFzc2luZyB0byBhIGZ1bmN0aW9uIHdoaWNoIG9ubHkgYWNjZXB0cworICAgICAgICogIGEgcmF3IHBvaW50ZXIuCisgICAgICAgKgorICAgICAgICogIEBub3RlICBUaGlzICVhdXRvX3B0ciBubyBsb25nZXIgb3ducyB0aGUgbWVtb3J5LiAgV2hlbiB0aGlzIG9iamVjdAorICAgICAgICogIGdvZXMgb3V0IG9mIHNjb3BlLCBub3RoaW5nIHdpbGwgaGFwcGVuLgorICAgICAgICovCisgICAgICBlbGVtZW50X3R5cGUqCisgICAgICByZWxlYXNlKCkgdGhyb3coKQorICAgICAgeworCWVsZW1lbnRfdHlwZSogX190bXAgPSBfTV9wdHI7CisJX01fcHRyID0gMDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRm9yY2libHkgZGVsZXRlcyB0aGUgbWFuYWdlZCBvYmplY3QuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIEEgcG9pbnRlciAoZGVmYXVsdHMgdG8gTlVMTCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb2JqZWN0IG5vdyBAZSBvd25zIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSBAYSBfX3AuICBUaGUKKyAgICAgICAqICBwcmV2aW91cyBvYmplY3QgaGFzIGJlZW4gZGVsZXRlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCisgICAgICB7CisJaWYgKF9fcCAhPSBfTV9wdHIpCisJICB7CisJICAgIGRlbGV0ZSBfTV9wdHI7CisJICAgIF9NX3B0ciA9IF9fcDsKKwkgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgLyoqIAorICAgICAgICogIEBicmllZiAgQXV0b21hdGljIGNvbnZlcnNpb25zCisgICAgICAgKgorICAgICAgICogIFRoZXNlIG9wZXJhdGlvbnMgY29udmVydCBhbiAlYXV0b19wdHIgaW50byBhbmQgZnJvbSBhbiBhdXRvX3B0cl9yZWYKKyAgICAgICAqICBhdXRvbWF0aWNhbGx5IGFzIG5lZWRlZC4gIFRoaXMgYWxsb3dzIGNvbnN0cnVjdHMgc3VjaCBhcworICAgICAgICogIEBjb2RlCisgICAgICAgKiAgICBhdXRvX3B0cjxEZXJpdmVkPiAgZnVuY19yZXR1cm5pbmdfYXV0b19wdHIoLi4uLi4pOworICAgICAgICogICAgLi4uCisgICAgICAgKiAgICBhdXRvX3B0cjxCYXNlPiBwdHIgPSBmdW5jX3JldHVybmluZ19hdXRvX3B0ciguLi4uLik7CisgICAgICAgKiAgQGVuZGNvZGUKKyAgICAgICAqLworICAgICAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKKyAgICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikgeyB9CisgICAgICAKKyAgICAgIGF1dG9fcHRyJgorICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCisgICAgICB7CisJaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKKwkgIHsKKwkgICAgZGVsZXRlIF9NX3B0cjsKKwkgICAgX01fcHRyID0gX19yZWYuX01fcHRyOworCSAgfQorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkKKyAgICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQorICAgIH0gX0dMSUJDWFhfREVQUkVDQVRFRDsKKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIDU0MS4gc2hhcmVkX3B0ciB0ZW1wbGF0ZSBhc3NpZ25tZW50IGFuZCB2b2lkCisgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBhdXRvX3B0cjx2b2lkPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHZvaWQgZWxlbWVudF90eXBlOworICAgIH0gX0dMSUJDWFhfREVQUkVDQVRFRDsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McD4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIF9fc2hhcmVkX2NvdW50PF9McD46Ol9fc2hhcmVkX2NvdW50KHN0ZDo6YXV0b19wdHI8X1RwPiYmIF9fcikKKyAgICA6IF9NX3BpKG5ldyBfU3BfY291bnRlZF9wdHI8X1RwKiwgX0xwPihfX3IuZ2V0KCkpKQorICAgIHsgX19yLnJlbGVhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICBpbmxpbmUKKyAgICBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+OjpfX3NoYXJlZF9wdHIoc3RkOjphdXRvX3B0cjxfVHAxPiYmIF9fcikKKyAgICA6IF9NX3B0cihfX3IuZ2V0KCkpLCBfTV9yZWZjb3VudCgpCisgICAgeworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwMSosIF9UcCo+KQorICAgICAgc3RhdGljX2Fzc2VydCggc2l6ZW9mKF9UcDEpID4gMCwgImluY29tcGxldGUgdHlwZSIgKTsKKyAgICAgIF9UcDEqIF9fdG1wID0gX19yLmdldCgpOworICAgICAgX01fcmVmY291bnQgPSBfX3NoYXJlZF9jb3VudDxfTHA+KHN0ZDo6bW92ZShfX3IpKTsKKyAgICAgIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNfaGVscGVyKF9NX3JlZmNvdW50LCBfX3RtcCwgX190bXApOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgaW5saW5lCisgICAgc2hhcmVkX3B0cjxfVHA+OjpzaGFyZWRfcHRyKHN0ZDo6YXV0b19wdHI8X1RwMT4mJiBfX3IpCisgICAgOiBfX3NoYXJlZF9wdHI8X1RwPihzdGQ6Om1vdmUoX19yKSkgeyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHA+CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWU+CisgICAgaW5saW5lCisgICAgdW5pcXVlX3B0cjxfVHAsIF9EcD46OnVuaXF1ZV9wdHIoYXV0b19wdHI8X1VwPiYmIF9fdSkgbm9leGNlcHQKKyAgICA6IF9NX3QoX191LnJlbGVhc2UoKSwgZGVsZXRlcl90eXBlKCkpIHsgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9CQUNLV0FSRF9BVVRPX1BUUl9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvYmFja3dhcmRfd2FybmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4N2Q1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaApAQCAtMCwwICsxLDYwIEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYmFja3dhcmQvYmFja3dhcmRfd2FybmluZy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7aW9zZndkfQorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0JBQ0tXQVJEX1dBUk5JTkdfSAorI2RlZmluZSBfQkFDS1dBUkRfQkFDS1dBUkRfV0FSTklOR19IIDEKKworI2lmZGVmIF9fREVQUkVDQVRFRAorI3dhcm5pbmcgXAorICBUaGlzIGZpbGUgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIGRlcHJlY2F0ZWQgb3IgYW50aXF1YXRlZCBoZWFkZXIgd2hpY2ggXAorICBtYXkgYmUgcmVtb3ZlZCB3aXRob3V0IGZ1cnRoZXIgbm90aWNlIGF0IGEgZnV0dXJlIGRhdGUuIFBsZWFzZSB1c2UgYSBcCisgIG5vbi1kZXByZWNhdGVkIGludGVyZmFjZSB3aXRoIGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSBpbnN0ZWFkLiBGb3IgYSBcCisgIGxpc3Rpbmcgb2YgcmVwbGFjZW1lbnQgaGVhZGVycyBhbmQgaW50ZXJmYWNlcywgY29uc3VsdCB0aGUgZmlsZSBcCisgIGJhY2t3YXJkX3dhcm5pbmcuaC4gVG8gZGlzYWJsZSB0aGlzIHdhcm5pbmcgdXNlIC1Xbm8tZGVwcmVjYXRlZC4KKworLyoKKyAgQSBsaXN0IG9mIHZhbGlkIHJlcGxhY2VtZW50cyBpcyBhcyBmb2xsb3dzOgorCisgIFVzZToJCQkJCUluc3RlYWQgb2Y6CisgIDxzc3RyZWFtPiwgYmFzaWNfc3RyaW5nYnVmCSAgIAk8c3Ryc3RyZWFtPiwgc3Ryc3RyZWFtYnVmCisgIDxzc3RyZWFtPiwgYmFzaWNfaXN0cmluZ3N0cmVhbQk8c3Ryc3RyZWFtPiwgaXN0cnN0cmVhbQorICA8c3N0cmVhbT4sIGJhc2ljX29zdHJpbmdzdHJlYW0JPHN0cnN0cmVhbT4sIG9zdHJzdHJlYW0KKyAgPHNzdHJlYW0+LCBiYXNpY19zdHJpbmdzdHJlYW0JCTxzdHJzdHJlYW0+LCBzdHJzdHJlYW0KKyAgPHVub3JkZXJlZF9zZXQ+LCB1bm9yZGVyZWRfc2V0ICAgICAJPGV4dC9oYXNoX3NldD4sIGhhc2hfc2V0CisgIDx1bm9yZGVyZWRfc2V0PiwgdW5vcmRlcmVkX211bHRpc2V0CTxleHQvaGFzaF9zZXQ+LCBoYXNoX211bHRpc2V0CisgIDx1bm9yZGVyZWRfbWFwPiwgdW5vcmRlcmVkX21hcAk8ZXh0L2hhc2hfbWFwPiwgaGFzaF9tYXAKKyAgPHVub3JkZXJlZF9tYXA+LCB1bm9yZGVyZWRfbXVsdGltYXAJPGV4dC9oYXNoX21hcD4sIGhhc2hfbXVsdGltYXAKKyAgPGZ1bmN0aW9uYWw+LCBiaW5kCQkJPGZ1bmN0aW9uYWw+LCBiaW5kZXIxc3QKKyAgPGZ1bmN0aW9uYWw+LCBiaW5kCQkJPGZ1bmN0aW9uYWw+LCBiaW5kZXIybmQKKyAgPGZ1bmN0aW9uYWw+LCBiaW5kCQkJPGZ1bmN0aW9uYWw+LCBiaW5kMXN0CisgIDxmdW5jdGlvbmFsPiwgYmluZAkJCTxmdW5jdGlvbmFsPiwgYmluZDJuZAorICA8bWVtb3J5PiwgdW5pcXVlX3B0ciAgICAgICAJCTxtZW1vcnk+LCBhdXRvX3B0cgorKi8KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iYWNrd2FyZC9iaW5kZXJzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JhY2t3YXJkL2JpbmRlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmJlMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iYWNrd2FyZC9iaW5kZXJzLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8vIEZ1bmN0b3IgaW1wbGVtZW50YXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTgKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiYWNrd2FyZC9iaW5kZXJzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtmdW5jdGlvbmFsfQorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0JJTkRFUlNfSAorI2RlZmluZSBfQkFDS1dBUkRfQklOREVSU19IIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIDIwLjMuNiBiaW5kZXJzCisgIC8qKiBAZGVmZ3JvdXAgYmluZGVycyBCaW5kZXIgQ2xhc3NlcworICAgKiBAaW5ncm91cCBmdW5jdG9ycworICAgKgorICAgKiAgQmluZGVycyB0dXJuIGZ1bmN0aW9ucy9mdW5jdG9ycyB3aXRoIHR3byBhcmd1bWVudHMgaW50byBmdW5jdG9ycworICAgKiAgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCwgc3RvcmluZyBhbiBhcmd1bWVudCB0byBiZSBhcHBsaWVkIGxhdGVyLgorICAgKiAgRm9yIGV4YW1wbGUsIGEgdmFyaWFibGUgQGMgQiBvZiB0eXBlIEBjIGJpbmRlcjFzdCBpcyBjb25zdHJ1Y3RlZAorICAgKiAgZnJvbSBhIGZ1bmN0b3IgQGMgZiBhbmQgYW4gYXJndW1lbnQgQGMgeC4gTGF0ZXIsIEIncyBAYworICAgKiAgb3BlcmF0b3IoKSBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCBAYyB5LiBUaGUgcmV0dXJuCisgICAqICB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgQGMgZih4LHkpLiBAYyBCIGNhbiBiZSBAYSBjYWxsZWQgd2l0aAorICAgKiAgdmFyaW91cyBhcmd1bWVudHMgKHkxLCB5MiwgLi4uKSBhbmQgd2lsbCBpbiB0dXJuIGNhbGwgQGMKKyAgICogIGYoeCx5MSksIEBjIGYoeCx5MiksIC4uLgorICAgKgorICAgKiAgVGhlIGZ1bmN0aW9uIEBjIGJpbmQxc3QgaXMgcHJvdmlkZWQgdG8gc2F2ZSBzb21lIHR5cGluZy4gSXQgdGFrZXMgdGhlCisgICAqICBmdW5jdGlvbiBhbmQgYW4gYXJndW1lbnQgYXMgcGFyYW1ldGVycywgYW5kIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YKKyAgICogIEBjIGJpbmRlcjFzdC4KKyAgICoKKyAgICogIFRoZSB0eXBlIEBjIGJpbmRlcjJuZCBhbmQgaXRzIGNyZWF0b3IgZnVuY3Rpb24gQGMgYmluZDJuZCBkbyB0aGUgc2FtZQorICAgKiAgdGhpbmcsIGJ1dCB0aGUgc3RvcmVkIGFyZ3VtZW50IGlzIHBhc3NlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciBpbnN0ZWFkCisgICAqICBvZiB0aGUgZmlyc3QsIGUuZy4sIEBjIGJpbmQybmQoc3RkOjptaW51czxmbG9hdD4oKSwxLjMpIHdpbGwgY3JlYXRlIGEKKyAgICogIGZ1bmN0b3Igd2hvc2UgQGMgb3BlcmF0b3IoKSBhY2NlcHRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBzdWJ0cmFjdHMKKyAgICogIDEuMyBmcm9tIGl0LCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiAoSWYgQGMgYmluZDFzdCBoYWQgYmVlbiB1c2VkLAorICAgKiAgdGhlIGZ1bmN0b3Igd291bGQgcGVyZm9ybSA8ZW0+MS4zIC0geDwvZW0+IGluc3RlYWQuCisgICAqCisgICAqICBDcmVhdG9yLXdyYXBwZXIgZnVuY3Rpb25zIGxpa2UgQGMgYmluZDFzdCBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbgorICAgKiAgY2FsbGluZyBhbGdvcml0aG1zLiBUaGVpciByZXR1cm4gdmFsdWVzIHdpbGwgYmUgdGVtcG9yYXJ5IG9iamVjdHMuCisgICAqICAoVGhlIGdvYWwgaXMgdG8gbm90IHJlcXVpcmUgeW91IHRvIHR5cGUgbmFtZXMgbGlrZQorICAgKiAgQGMgc3RkOjpiaW5kZXIxc3Q8c3RkOjpwbHVzPGludD4+IGZvciBkZWNsYXJpbmcgYSB2YXJpYWJsZSB0byBob2xkIHRoZQorICAgKiAgcmV0dXJuIHZhbHVlIGZyb20gQGMgYmluZDFzdChzdGQ6OnBsdXM8aW50PigpLDUpLgorICAgKgorICAgKiAgVGhlc2UgYmVjb21lIG1vcmUgdXNlZnVsIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgY29tcG9zaXRpb24gZnVuY3Rpb25zLgorICAgKgorICAgKiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIGluIEMrKzExIGFuZCBjYW4gYmUgcmVwbGFjZWQgYnkKKyAgICogIEBjIHN0ZDo6YmluZCAob3IgQGMgc3RkOjp0cjE6OmJpbmQpIHdoaWNoIGlzIG1vcmUgcG93ZXJmdWwgYW5kIGZsZXhpYmxlLAorICAgKiAgc3VwcG9ydGluZyBmdW5jdGlvbnMgd2l0aCBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIFVzZXMgb2YgQGMgYmluZDFzdAorICAgKiAgY2FuIGJlIHJlcGxhY2VkIGJ5IEBjIHN0ZDo6YmluZChmLCB4LCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEpIGFuZAorICAgKiAgQGMgYmluZDJuZCBieSBAYyBzdGQ6OmJpbmQoZiwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCB4KS4KKyAgICogIEB7CisgICAqLworICAvLy8gT25lIG9mIHRoZSBAbGluayBiaW5kZXJzIGJpbmRlciBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3BlcmF0aW9uPgorICAgIGNsYXNzIGJpbmRlcjFzdAorICAgIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAorCQkJICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfT3BlcmF0aW9uIG9wOworICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKKworICAgIHB1YmxpYzoKKyAgICAgIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCisJCWNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKKyAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7IH0KKworICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDEwOS4gIE1pc3NpbmcgYmluZGVycyBmb3Igbm9uLWNvbnN0IHNlcXVlbmNlIGVsZW1lbnRzCisgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gb3AodmFsdWUsIF9feCk7IH0KKyAgICB9IF9HTElCQ1hYX0RFUFJFQ0FURUQ7CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgYmluZGVycyBiaW5kZXIgZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX09wZXJhdGlvbiwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KKyAgICBiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOworICAgICAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOworICAgIH0KKworICAvLy8gT25lIG9mIHRoZSBAbGluayBiaW5kZXJzIGJpbmRlciBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3BlcmF0aW9uPgorICAgIGNsYXNzIGJpbmRlcjJuZAorICAgIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCisJCQkgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9PcGVyYXRpb24gb3A7CisgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKKworICAgIHB1YmxpYzoKKyAgICAgIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCisJCWNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCisgICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkgeyB9CisKKyAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG9wKF9feCwgdmFsdWUpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDEwOS4gIE1pc3NpbmcgYmluZGVycyBmb3Igbm9uLWNvbnN0IHNlcXVlbmNlIGVsZW1lbnRzCisgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBvcChfX3gsIHZhbHVlKTsgfQorICAgIH0gX0dMSUJDWFhfREVQUkVDQVRFRDsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBiaW5kZXJzIGJpbmRlciBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3BlcmF0aW9uLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgorICAgIGJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOworICAgICAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOworICAgIH0gCisgIC8qKiBAfSAgKi8KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0JBQ0tXQVJEX0JJTkRFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iYWNrd2FyZC9oYXNoX2Z1bi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iYWNrd2FyZC9oYXNoX2Z1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMWNhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JhY2t3YXJkL2hhc2hfZnVuLmgKQEAgLTAsMCArMSwxNzAgQEAKKy8vICdzdHJ1Y3QgaGFzaCcgZnJvbSBTR0kgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk4CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKi8KKworLyoqIEBmaWxlIGJhY2t3YXJkL2hhc2hfZnVuLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLgorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0hBU0hfRlVOX0gKKyNkZWZpbmUgX0JBQ0tXQVJEX0hBU0hfRlVOX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXk+CisgICAgc3RydWN0IGhhc2ggeyB9OworCisgIGlubGluZSBzaXplX3QKKyAgX19zdGxfaGFzaF9zdHJpbmcoY29uc3QgY2hhciogX19zKQorICB7CisgICAgdW5zaWduZWQgbG9uZyBfX2ggPSAwOworICAgIGZvciAoIDsgKl9fczsgKytfX3MpCisgICAgICBfX2ggPSA1ICogX19oICsgKl9fczsKKyAgICByZXR1cm4gc2l6ZV90KF9faCk7CisgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8Y2hhcio+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fc3RsX2hhc2hfc3RyaW5nKF9fcyk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxjb25zdCBjaGFyKj4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgY2hhciogX19zKSBjb25zdAorICAgICAgeyByZXR1cm4gX19zdGxfaGFzaF9zdHJpbmcoX19zKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPGNoYXI+CisgICAgeyAKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjaGFyIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHVuc2lnbmVkIGNoYXI+CisgICAgeyAKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKSh1bnNpZ25lZCBjaGFyIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHNpZ25lZCBjaGFyPgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKSh1bnNpZ25lZCBjaGFyIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHNob3J0PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShzaG9ydCBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDx1bnNpZ25lZCBzaG9ydD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkodW5zaWduZWQgc2hvcnQgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX194OyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8aW50PgorICAgIHsgCisgICAgICBzaXplX3QgCisgICAgICBvcGVyYXRvcigpKGludCBfX3gpIGNvbnN0IAorICAgICAgeyByZXR1cm4gX194OyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8dW5zaWduZWQgaW50PgorICAgIHsgCisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkodW5zaWduZWQgaW50IF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPGxvbmc+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGxvbmcgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX194OyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8dW5zaWduZWQgbG9uZz4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkodW5zaWduZWQgbG9uZyBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iYWNrd2FyZC9oYXNoX21hcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvaGFzaF9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyODcxYQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvaGFzaF9tYXAKQEAgLTAsMCArMSw1OTkgQEAKKy8vIEhhc2hpbmcgbWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgYmFja3dhcmQvaGFzaF9tYXAKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLgorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0hBU0hfTUFQCisjZGVmaW5lIF9CQUNLV0FSRF9IQVNIX01BUCAxCisKKyNpZm5kZWYgX0dMSUJDWFhfUEVSTUlUX0JBQ0tXQVJEX0hBU0gKKyNpbmNsdWRlICJiYWNrd2FyZF93YXJuaW5nLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8YmFja3dhcmQvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB1c2luZyBzdGQ6OmVxdWFsX3RvOworICB1c2luZyBzdGQ6OmFsbG9jYXRvcjsKKyAgdXNpbmcgc3RkOjpwYWlyOworICB1c2luZyBzdGQ6Ol9TZWxlY3Qxc3Q7CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuID0gaGFzaDxfS2V5PiwKKwkgICBjbGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfS2V5PiwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGhhc2hfbWFwCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxwYWlyPGNvbnN0IF9LZXksIF9UcD4sX0tleSwgX0hhc2hGbiwKKwkJCV9TZWxlY3Qxc3Q8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sCisJCQlfRXF1YWxLZXksIF9BbGxvYz4gX0h0OworCisgICAgICBfSHQgX01faHQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQorCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgaGFzaF9tYXAoKQorICAgICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKyAgCisgICAgICBleHBsaWNpdAorICAgICAgaGFzaF9tYXAoc2l6ZV90eXBlIF9fbikKKyAgICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9tYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7fQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisJOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24pCisJOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSBjb25zdCBoYXNoZXImIF9faGYpCisJOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5zaXplKCk7IH0KKyAgICAgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgpOyB9CisgICAgICAKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KKyAgCisgICAgICB2b2lkCisgICAgICBzd2FwKGhhc2hfbWFwJiBfX2hzKQorICAgICAgeyBfTV9odC5zd2FwKF9faHMuX01faHQpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUssIGNsYXNzIF9BbD4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PSAoY29uc3QgaGFzaF9tYXA8X0sxLCBfVDEsIF9IRiwgX0VxSywgX0FsPiYsCisJCSAgICBjb25zdCBoYXNoX21hcDxfSzEsIF9UMSwgX0hGLCBfRXFLLCBfQWw+Jik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X3VuaXF1ZShfX29iaik7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7IHJldHVybiBfTV9odC5pbnNlcnRfdW5pcXVlX25vcmVzaXplKF9fb2JqKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBfVHAmCisgICAgICBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmRfb3JfaW5zZXJ0KHZhbHVlX3R5cGUoX19rZXksIF9UcCgpKSkuc2Vjb25kOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAge3JldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KKworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19pdCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19pdCk7IH0KKworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpCisgICAgICB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IF9NX2h0LmNsZWFyKCk7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpCisgICAgICB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfYnVja2V0X2NvdW50KCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVsZW1zX2luX2J1Y2tldChfX24pOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKKwkgICAgICAgY29uc3QgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMikKKyAgICB7IHJldHVybiBfX2htMS5fTV9odCA9PSBfX2htMi5fTV9odDsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0xLAorCSAgICAgICBjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgcmV0dXJuICEoX19obTEgPT0gX19obTIpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTEsCisJIGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCisgICAgeyBfX2htMS5zd2FwKF9faG0yKTsgfQorCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLAorCSAgIGNsYXNzIF9IYXNoRm4gPSBoYXNoPF9LZXk+LAorCSAgIGNsYXNzIF9FcXVhbEtleSA9IGVxdWFsX3RvPF9LZXk+LAorCSAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBoYXNoX211bHRpbWFwCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfS2V5LCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9IYXNoRm4sIHNpemVfdCwgX0tleSwgX1VuYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMyhfRXF1YWxLZXksIF9LZXksIF9LZXksIF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0KQorCQorICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxwYWlyPGNvbnN0IF9LZXksIF9UcD4sIF9LZXksIF9IYXNoRm4sCisJCQlfU2VsZWN0MXN0PHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LCBfRXF1YWxLZXksIF9BbGxvYz4KKyAgICAgICAgICBfSHQ7CisKKyAgICAgIF9IdCBfTV9odDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBoYXNoZXIKKyAgICAgIGhhc2hfZnVuY3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9CisKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICBoYXNoX211bHRpbWFwKCkKKyAgICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBoYXNoX211bHRpbWFwKHNpemVfdHlwZSBfX24pCisgICAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX211bHRpbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9tdWx0aW1hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7fQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKwk6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24pCisJOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYpCisJOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQorCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoaGFzaF9tdWx0aW1hcCYgX19ocykKKyAgICAgIHsgX01faHQuc3dhcChfX2hzLl9NX2h0KTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLLCBjbGFzcyBfQWw+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aW1hcDxfSzEsIF9UMSwgX0hGLCBfRXFLLCBfQWw+JiwKKwkJICAgY29uc3QgaGFzaF9tdWx0aW1hcDxfSzEsIF9UMSwgX0hGLCBfRXFLLCBfQWw+Jik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsKF9fb2JqKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZixfX2wpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7IHJldHVybiBfTV9odC5pbnNlcnRfZXF1YWxfbm9yZXNpemUoX19vYmopOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0b3IgX19sKQorICAgICAgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV9odC5jbGVhcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KQorICAgICAgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9CisgICAgICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0xLAorCSAgICAgICBjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgcmV0dXJuIF9faG0xLl9NX2h0ID09IF9faG0yLl9NX2h0OyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0xLAorCSAgICAgICBjb25zdCBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hGLCBfRXFLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgcmV0dXJuICEoX19obTEgPT0gX19obTIpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKKwkgaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgX19obTEuc3dhcChfX2htMik7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gU3BlY2lhbGl6YXRpb24gb2YgaW5zZXJ0X2l0ZXJhdG9yIHNvIHRoYXQgaXQgd2lsbCB3b3JrIGZvciBoYXNoX21hcAorICAvLyBhbmQgaGFzaF9tdWx0aW1hcC4KKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCAgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yPF9fZ251X2N4eDo6aGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCAKKwkJCQkJICAgICAgX0VxS2V5LCBfQWxsb2M+ID4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Omhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxS2V5LCBfQWxsb2M+CisgICAgICAgIF9Db250YWluZXI7CisgICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisgICAgICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICAKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcikKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+aW5zZXJ0KF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sICBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3I8X19nbnVfY3h4OjpoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwKKwkJCQkJCSAgIF9FcUtleSwgX0FsbG9jPiA+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxS2V5LCBfQWxsb2M+CisgICAgICAgIF9Db250YWluZXI7CisgICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CisgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworICAgICAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPmluc2VydChfX3ZhbHVlKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iYWNrd2FyZC9oYXNoX3NldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvaGFzaF9zZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4ZTg0NwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvaGFzaF9zZXQKQEAgLTAsMCArMSw1NjcgQEAKKy8vIEhhc2hpbmcgc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgYmFja3dhcmQvaGFzaF9zZXQKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLgorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX0hBU0hfU0VUCisjZGVmaW5lIF9CQUNLV0FSRF9IQVNIX1NFVCAxCisKKyNpZm5kZWYgX0dMSUJDWFhfUEVSTUlUX0JBQ0tXQVJEX0hBU0gKKyNpbmNsdWRlICJiYWNrd2FyZF93YXJuaW5nLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8YmFja3dhcmQvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB1c2luZyBzdGQ6OmVxdWFsX3RvOworICB1c2luZyBzdGQ6OmFsbG9jYXRvcjsKKyAgdXNpbmcgc3RkOjpwYWlyOworICB1c2luZyBzdGQ6Ol9JZGVudGl0eTsKKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuICA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfVmFsdWU+LAorCSAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBjbGFzcyBoYXNoX3NldAorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1ZhbHVlLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9IYXNoRmNuLCBzaXplX3QsIF9WYWx1ZSwgX1VuYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMyhfRXF1YWxLZXksIF9WYWx1ZSwgX1ZhbHVlLCBfQmluYXJ5UHJlZGljYXRlQ29uY2VwdCkKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsdWUsIF9WYWx1ZSwgX0hhc2hGY24sIF9JZGVudGl0eTxfVmFsdWU+LAorCQkJX0VxdWFsS2V5LCBfQWxsb2M+IF9IdDsKKyAgICAgIF9IdCBfTV9odDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6aGFzaGVyIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfZXF1YWwga2V5X2VxdWFsOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIAorICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmhhc2hfZnVuY3QoKTsgfQorCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5rZXlfZXEoKTsgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgaGFzaF9zZXQoKQorICAgICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgZXhwbGljaXQKKyAgICAgIGhhc2hfc2V0KHNpemVfdHlwZSBfX24pCisgICAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX3NldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkge30KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorCTogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uKQorCTogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgY29uc3QgaGFzaGVyJiBfX2hmKQorCTogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQorICAgICAgCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoaGFzaF9zZXQmIF9faHMpCisgICAgICB7IF9NX2h0LnN3YXAoX19ocy5fTV9odCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLLCBjbGFzcyBfQWw+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9zZXQ8X1ZhbCwgX0hGLCBfRXFLLCBfQWw+JiwKKwkJICAgY29uc3QgaGFzaF9zZXQ8X1ZhbCwgX0hGLCBfRXFLLCBfQWw+Jik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5iZWdpbigpOyB9CisgICAgICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW5kKCk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlwYWlyPHR5cGVuYW1lIF9IdDo6aXRlcmF0b3IsIGJvb2w+IF9fcCA9IF9NX2h0Lmluc2VydF91bmlxdWUoX19vYmopOworCXJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9fcC5maXJzdCwgX19wLnNlY29uZCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworCXBhaXI8dHlwZW5hbWUgX0h0OjppdGVyYXRvciwgYm9vbD4gX19wCisJICA9IF9NX2h0Lmluc2VydF91bmlxdWVfbm9yZXNpemUoX19vYmopOworCXJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHtyZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZiwgaXRlcmF0b3IgX19sKQorICAgICAgeyBfTV9odC5lcmFzZShfX2YsIF9fbCk7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV9odC5jbGVhcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KQorICAgICAgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9CisgICAgICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCisJICAgICAgIGNvbnN0IGhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCisgICAgeyByZXR1cm4gX19oczEuX01faHQgPT0gX19oczIuX01faHQ7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKKwkgICAgICAgY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKKyAgICB7IHJldHVybiAhKF9faHMxID09IF9faHMyKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoaGFzaF9zZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCisJIGhhc2hfc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgX19oczEuc3dhcChfX2hzMik7IH0KKworCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaEZjbiA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfRXF1YWxLZXkgPSBlcXVhbF90bzxfVmFsdWU+LAorCSAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBjbGFzcyBoYXNoX211bHRpc2V0CisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVmFsdWUsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczMoX0hhc2hGY24sIHNpemVfdCwgX1ZhbHVlLCBfVW5hcnlGdW5jdGlvbkNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9FcXVhbEtleSwgX1ZhbHVlLCBfVmFsdWUsIF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0KQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfSGFzaEZjbiwgX0lkZW50aXR5PF9WYWx1ZT4sCisJCQlfRXF1YWxLZXksIF9BbGxvYz4gX0h0OworICAgICAgX0h0IF9NX2h0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV90eXBlIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBoYXNoZXIKKyAgICAgIGhhc2hfZnVuY3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9CisgICAgICAKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9CisgICAgICAKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICBoYXNoX211bHRpc2V0KCkKKyAgICAgIDogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24pCisgICAgICA6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKyAgICAgIAorICAgICAgaGFzaF9tdWx0aXNldChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7fQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKwk6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24pCisJOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYpCisJOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuc2l6ZSgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X3NpemUoKTsgfQorCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbXB0eSgpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoaGFzaF9tdWx0aXNldCYgaHMpCisgICAgICB7IF9NX2h0LnN3YXAoaHMuX01faHQpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9IRiwgY2xhc3MgX0VxSywgY2xhc3MgX0FsPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hGLCBfRXFLLCBfQWw+JiwKKwkJICAgY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSEYsIF9FcUssIF9BbD4mKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKyAgICAgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsKF9fb2JqKTsgfQorICAKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLF9fbCk7IH0KKyAgCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeyByZXR1cm4gX01faHQuaW5zZXJ0X2VxdWFsX25vcmVzaXplKF9fb2JqKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5maW5kKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmNvdW50KF9fa2V5KTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVxdWFsX3JhbmdlKF9fa2V5KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IF9NX2h0LmVyYXNlKF9faXQpOyB9CisgIAorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpCisgICAgICB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgX01faHQuY2xlYXIoKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9faGludCkKKyAgICAgIHsgX01faHQucmVzaXplKF9faGludCk7IH0KKyAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5idWNrZXRfY291bnQoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQubWF4X2J1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZWxlbXNfaW5fYnVja2V0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbGVtc19pbl9idWNrZXQoX19uKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSAgICAgICBjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgcmV0dXJuIF9faHMxLl9NX2h0ID09IF9faHMyLl9NX2h0OyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSAgICAgICBjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgcmV0dXJuICEoX19oczEgPT0gX19oczIpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSBoYXNoX211bHRpc2V0PF9WYWwsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgX19oczEuc3dhcChfX2hzMik7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gU3BlY2lhbGl6YXRpb24gb2YgaW5zZXJ0X2l0ZXJhdG9yIHNvIHRoYXQgaXQgd2lsbCB3b3JrIGZvciBoYXNoX3NldAorICAvLyBhbmQgaGFzaF9tdWx0aXNldC4KKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yPF9fZ251X2N4eDo6aGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwKKwkJCQkJICAgICAgX0VxdWFsS2V5LCBfQWxsb2M+ID4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Omhhc2hfc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBfQ29udGFpbmVyOworICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworICAgICAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPmluc2VydChfX3ZhbHVlKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgICAgCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcjxfX2dudV9jeHg6Omhhc2hfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaEZjbiwKKwkJCQkJCSAgIF9FcXVhbEtleSwgX0FsbG9jPiA+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpoYXNoX211bHRpc2V0PF9WYWx1ZSwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBfQ29udGFpbmVyOworICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOworICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisgICAgICAKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5pbnNlcnQoX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iYWNrd2FyZC9oYXNodGFibGUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvaGFzaHRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkZjY3MwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvaGFzaHRhYmxlLmgKQEAgLTAsMCArMSwxMTY3IEBACisvLyBIYXNodGFibGUgaW1wbGVtZW50YXRpb24gdXNlZCBieSBjb250YWluZXJzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICovCisKKy8qKiBAZmlsZSBiYWNrd2FyZC9oYXNodGFibGUuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfQkFDS1dBUkRfSEFTSFRBQkxFX0gKKyNkZWZpbmUgX0JBQ0tXQVJEX0hBU0hUQUJMRV9IIDEKKworLy8gSGFzaHRhYmxlIGNsYXNzLCB1c2VkIHRvIGltcGxlbWVudCB0aGUgaGFzaGVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMKKy8vIGhhc2hfc2V0LCBoYXNoX21hcCwgaGFzaF9tdWx0aXNldCwgYW5kIGhhc2hfbXVsdGltYXAuCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8YmFja3dhcmQvaGFzaF9mdW4uaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworICB1c2luZyBzdGQ6OnB0cmRpZmZfdDsKKyAgdXNpbmcgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZzsKKyAgdXNpbmcgc3RkOjppbnB1dF9pdGVyYXRvcl90YWc7CisgIHVzaW5nIHN0ZDo6X0NvbnN0cnVjdDsKKyAgdXNpbmcgc3RkOjpfRGVzdHJveTsKKyAgdXNpbmcgc3RkOjpkaXN0YW5jZTsKKyAgdXNpbmcgc3RkOjp2ZWN0b3I7CisgIHVzaW5nIHN0ZDo6cGFpcjsKKyAgdXNpbmcgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWw+CisgICAgc3RydWN0IF9IYXNodGFibGVfbm9kZQorICAgIHsKKyAgICAgIF9IYXNodGFibGVfbm9kZSogX01fbmV4dDsKKyAgICAgIF9WYWwgX01fdmFsOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FeHRyYWN0S2V5LCAKKwkgICBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9WYWw+ID4KKyAgICBjbGFzcyBoYXNodGFibGU7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hhc2hGY24sCisJICAgY2xhc3MgX0V4dHJhY3RLZXksIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfSGFzaHRhYmxlX2l0ZXJhdG9yOworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLAorCSAgIGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSGFzaEZjbiwKKwkgICBjbGFzcyBfRXh0cmFjdEtleSwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9IYXNodGFibGVfaXRlcmF0b3IKKyAgICB7CisgICAgICB0eXBlZGVmIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBfSGFzaHRhYmxlOworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLAorCQkJCSAgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwKKwkJCQkJX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZV9ub2RlPF9WYWw+IF9Ob2RlOworICAgICAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBfVmFsJiByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9WYWwqIHBvaW50ZXI7CisgICAgICAKKyAgICAgIF9Ob2RlKiBfTV9jdXI7CisgICAgICBfSGFzaHRhYmxlKiBfTV9odDsKKworICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcihfTm9kZSogX19uLCBfSGFzaHRhYmxlKiBfX3RhYikKKyAgICAgIDogX01fY3VyKF9fbiksIF9NX2h0KF9fdGFiKSB7IH0KKworICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcigpIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9jdXItPl9NX3ZhbDsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpOworCisgICAgICBpdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpOworCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VyID09IF9faXQuX01fY3VyOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIF9faXQpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9jdXIgIT0gX19pdC5fTV9jdXI7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLAorCSAgIGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcgorICAgIHsKKyAgICAgIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwgX0VxdWFsS2V5LCBfQWxsb2M+CisgICAgICAgIF9IYXNodGFibGU7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCxfS2V5LF9IYXNoRmNuLAorCQkJCSAgX0V4dHJhY3RLZXksX0VxdWFsS2V5LF9BbGxvYz4KKyAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hhc2hGY24sCisJCQkJCV9FeHRyYWN0S2V5LCBfRXF1YWxLZXksIF9BbGxvYz4KKyAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGVfbm9kZTxfVmFsPiBfTm9kZTsKKworICAgICAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCBfVmFsJiByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IF9WYWwqIHBvaW50ZXI7CisgICAgICAKKyAgICAgIGNvbnN0IF9Ob2RlKiBfTV9jdXI7CisgICAgICBjb25zdCBfSGFzaHRhYmxlKiBfTV9odDsKKworICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcihjb25zdCBfTm9kZSogX19uLCBjb25zdCBfSGFzaHRhYmxlKiBfX3RhYikKKyAgICAgIDogX01fY3VyKF9fbiksIF9NX2h0KF9fdGFiKSB7IH0KKworICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcigpIHsgfQorCisgICAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KQorICAgICAgOiBfTV9jdXIoX19pdC5fTV9jdXIpLCBfTV9odChfX2l0Ll9NX2h0KSB7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VyLT5fTV92YWw7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKTsKKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KTsKKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgX19pdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1ciA9PSBfX2l0Ll9NX2N1cjsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2l0KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VyICE9IF9faXQuX01fY3VyOyB9CisgICAgfTsKKworICAvLyBOb3RlOiBhc3N1bWVzIGxvbmcgaXMgYXQgbGVhc3QgMzIgYml0cy4KKyAgZW51bSB7IF9TX251bV9wcmltZXMgPSAyOSB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmltZVR5cGU+CisgICAgc3RydWN0IF9IYXNodGFibGVfcHJpbWVfbGlzdAorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBfUHJpbWVUeXBlICBfX3N0bF9wcmltZV9saXN0W19TX251bV9wcmltZXNdOworCisgICAgICBzdGF0aWMgY29uc3QgX1ByaW1lVHlwZSoKKyAgICAgIF9TX2dldF9wcmltZV9saXN0KCk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJpbWVUeXBlPiBjb25zdCBfUHJpbWVUeXBlCisgIF9IYXNodGFibGVfcHJpbWVfbGlzdDxfUHJpbWVUeXBlPjo6X19zdGxfcHJpbWVfbGlzdFtfU19udW1fcHJpbWVzXSA9CisgICAgeworICAgICAgNXVsLCAgICAgICAgICA1M3VsLCAgICAgICAgIDk3dWwsICAgICAgICAgMTkzdWwsICAgICAgIDM4OXVsLAorICAgICAgNzY5dWwsICAgICAgICAxNTQzdWwsICAgICAgIDMwNzl1bCwgICAgICAgNjE1MXVsLCAgICAgIDEyMjg5dWwsCisgICAgICAyNDU5M3VsLCAgICAgIDQ5MTU3dWwsICAgICAgOTgzMTd1bCwgICAgICAxOTY2MTN1bCwgICAgMzkzMjQxdWwsCisgICAgICA3ODY0MzN1bCwgICAgIDE1NzI4Njl1bCwgICAgMzE0NTczOXVsLCAgICA2MjkxNDY5dWwsICAgMTI1ODI5MTd1bCwKKyAgICAgIDI1MTY1ODQzdWwsICAgNTAzMzE2NTN1bCwgICAxMDA2NjMzMTl1bCwgIDIwMTMyNjYxMXVsLCA0MDI2NTMxODl1bCwKKyAgICAgIDgwNTMwNjQ1N3VsLCAgMTYxMDYxMjc0MXVsLCAzMjIxMjI1NDczdWwsIDQyOTQ5NjcyOTF1bAorICAgIH07CisKKyB0ZW1wbGF0ZTxjbGFzcyBfUHJpbWVUeXBlPiBpbmxpbmUgY29uc3QgX1ByaW1lVHlwZSoKKyBfSGFzaHRhYmxlX3ByaW1lX2xpc3Q8X1ByaW1lVHlwZT46Ol9TX2dldF9wcmltZV9saXN0KCkKKyB7CisgICByZXR1cm4gX19zdGxfcHJpbWVfbGlzdDsKKyB9CisKKyAgaW5saW5lIHVuc2lnbmVkIGxvbmcKKyAgX19zdGxfbmV4dF9wcmltZSh1bnNpZ25lZCBsb25nIF9fbikKKyAgeworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcqIF9fZmlyc3QgPSBfSGFzaHRhYmxlX3ByaW1lX2xpc3Q8dW5zaWduZWQgbG9uZz46Ol9TX2dldF9wcmltZV9saXN0KCk7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyogX19sYXN0ID0gX19maXJzdCArIChpbnQpX1NfbnVtX3ByaW1lczsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nKiBwb3MgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKKyAgICByZXR1cm4gcG9zID09IF9fbGFzdCA/ICooX19sYXN0IC0gMSkgOiAqcG9zOworICB9CisKKyAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBvcGVyYXRvcj09LiAgCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LAorCSAgIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICBjbGFzcyBoYXNodGFibGU7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsCisJICAgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDEsCisJICAgICAgIGNvbnN0IGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPiYgX19odDIpOworCisgIC8vIEhhc2h0YWJsZXMgaGFuZGxlIGFsbG9jYXRvcnMgYSBiaXQgZGlmZmVyZW50bHkgdGhhbiBvdGhlcgorICAvLyBjb250YWluZXJzIGRvLiAgSWYgd2UncmUgdXNpbmcgc3RhbmRhcmQtY29uZm9ybWluZyBhbGxvY2F0b3JzLCB0aGVuCisgIC8vIGEgaGFzaHRhYmxlIHVuY29uZGl0aW9uYWxseSBoYXMgYSBtZW1iZXIgdmFyaWFibGUgdG8gaG9sZCBpdHMKKyAgLy8gYWxsb2NhdG9yLCBldmVuIGlmIGl0IHNvIGhhcHBlbnMgdGhhdCBhbGwgaW5zdGFuY2VzIG9mIHRoZQorICAvLyBhbGxvY2F0b3IgdHlwZSBhcmUgaWRlbnRpY2FsLiAgVGhpcyBpcyBiZWNhdXNlLCBmb3IgaGFzaHRhYmxlcywKKyAgLy8gdGhpcyBleHRyYSBzdG9yYWdlIGlzIG5lZ2xpZ2libGUuICBBZGRpdGlvbmFsbHksIGEgYmFzZSBjbGFzcworICAvLyB3b3VsZG4ndCBzZXJ2ZSBhbnkgb3RoZXIgcHVycG9zZXM7IGl0IHdvdWxkbid0LCBmb3IgZXhhbXBsZSwKKyAgLy8gc2ltcGxpZnkgdGhlIGV4Y2VwdGlvbi1oYW5kbGluZyBjb2RlLiAgCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IYXNoRmNuLAorCSAgIGNsYXNzIF9FeHRyYWN0S2V5LCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBoYXNodGFibGUKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfS2V5IGtleV90eXBlOworICAgICAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9IYXNoRmNuIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgX0VxdWFsS2V5IGtleV9lcXVhbDsKKworICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oYXNoOyB9CisKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2VxdWFsczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZV9ub2RlPF9WYWw+IF9Ob2RlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDx2YWx1ZV90eXBlPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7CisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X05vZGU+OjpvdGhlciBfTm9kZV9BbGxvYzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X05vZGUqPjo6b3RoZXIgX05vZGVwdHJfQWxsb2M7CisgICAgICB0eXBlZGVmIHZlY3RvcjxfTm9kZSosIF9Ob2RlcHRyX0FsbG9jPiBfVmVjdG9yX3R5cGU7CisKKyAgICAgIF9Ob2RlX0FsbG9jIF9NX25vZGVfYWxsb2NhdG9yOworCisgICAgICBfTm9kZSoKKyAgICAgIF9NX2dldF9ub2RlKCkKKyAgICAgIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3B1dF9ub2RlKF9Ob2RlKiBfX3ApCisgICAgICB7IF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGhhc2hlciAgICAgICAgICAgICAgICBfTV9oYXNoOworICAgICAga2V5X2VxdWFsICAgICAgICAgICAgIF9NX2VxdWFsczsKKyAgICAgIF9FeHRyYWN0S2V5ICAgICAgICAgICBfTV9nZXRfa2V5OworICAgICAgX1ZlY3Rvcl90eXBlICAgICAgICAgIF9NX2J1Y2tldHM7CisgICAgICBzaXplX3R5cGUgICAgICAgICAgICAgX01fbnVtX2VsZW1lbnRzOworICAgICAgCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IYXNoRmNuLCBfRXh0cmFjdEtleSwKKwkJCQkgIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksCisJCQkJCV9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgZnJpZW5kIHN0cnVjdAorICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksIF9FcXVhbEtleSwgX0FsbG9jPjsKKworICAgICAgZnJpZW5kIHN0cnVjdAorICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSGFzaEZjbiwgX0V4dHJhY3RLZXksCisJCQkJX0VxdWFsS2V5LCBfQWxsb2M+OworCisgICAgcHVibGljOgorICAgICAgaGFzaHRhYmxlKHNpemVfdHlwZSBfX24sIGNvbnN0IF9IYXNoRmNuJiBfX2hmLAorCQljb25zdCBfRXF1YWxLZXkmIF9fZXFsLCBjb25zdCBfRXh0cmFjdEtleSYgX19leHQsCisJCWNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oYXNoKF9faGYpLCBfTV9lcXVhbHMoX19lcWwpLAorCV9NX2dldF9rZXkoX19leHQpLCBfTV9idWNrZXRzKF9fYSksIF9NX251bV9lbGVtZW50cygwKQorICAgICAgeyBfTV9pbml0aWFsaXplX2J1Y2tldHMoX19uKTsgfQorCisgICAgICBoYXNodGFibGUoc2l6ZV90eXBlIF9fbiwgY29uc3QgX0hhc2hGY24mIF9faGYsCisJCWNvbnN0IF9FcXVhbEtleSYgX19lcWwsCisJCWNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oYXNoKF9faGYpLCBfTV9lcXVhbHMoX19lcWwpLAorCV9NX2dldF9rZXkoX0V4dHJhY3RLZXkoKSksIF9NX2J1Y2tldHMoX19hKSwgX01fbnVtX2VsZW1lbnRzKDApCisgICAgICB7IF9NX2luaXRpYWxpemVfYnVja2V0cyhfX24pOyB9CisKKyAgICAgIGhhc2h0YWJsZShjb25zdCBoYXNodGFibGUmIF9faHQpCisgICAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9faHQuZ2V0X2FsbG9jYXRvcigpKSwgX01faGFzaChfX2h0Ll9NX2hhc2gpLAorICAgICAgX01fZXF1YWxzKF9faHQuX01fZXF1YWxzKSwgX01fZ2V0X2tleShfX2h0Ll9NX2dldF9rZXkpLAorICAgICAgX01fYnVja2V0cyhfX2h0LmdldF9hbGxvY2F0b3IoKSksIF9NX251bV9lbGVtZW50cygwKQorICAgICAgeyBfTV9jb3B5X2Zyb20oX19odCk7IH0KKworICAgICAgaGFzaHRhYmxlJgorICAgICAgb3BlcmF0b3I9IChjb25zdCBoYXNodGFibGUmIF9faHQpCisgICAgICB7CisJaWYgKCZfX2h0ICE9IHRoaXMpCisJICB7CisJICAgIGNsZWFyKCk7CisJICAgIF9NX2hhc2ggPSBfX2h0Ll9NX2hhc2g7CisJICAgIF9NX2VxdWFscyA9IF9faHQuX01fZXF1YWxzOworCSAgICBfTV9nZXRfa2V5ID0gX19odC5fTV9nZXRfa2V5OworCSAgICBfTV9jb3B5X2Zyb20oX19odCk7CisJICB9CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB+aGFzaHRhYmxlKCkKKyAgICAgIHsgY2xlYXIoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbnVtX2VsZW1lbnRzOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQorCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBzaXplKCkgPT0gMDsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGhhc2h0YWJsZSYgX19odCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01faGFzaCwgX19odC5fTV9oYXNoKTsKKwlzdGQ6OnN3YXAoX01fZXF1YWxzLCBfX2h0Ll9NX2VxdWFscyk7CisJc3RkOjpzd2FwKF9NX2dldF9rZXksIF9faHQuX01fZ2V0X2tleSk7CisJX01fYnVja2V0cy5zd2FwKF9faHQuX01fYnVja2V0cyk7CisJc3RkOjpzd2FwKF9NX251bV9lbGVtZW50cywgX19odC5fTV9udW1fZWxlbWVudHMpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeworCWZvciAoc2l6ZV90eXBlIF9fbiA9IDA7IF9fbiA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbikKKwkgIGlmIChfTV9idWNrZXRzW19fbl0pCisJICAgIHJldHVybiBpdGVyYXRvcihfTV9idWNrZXRzW19fbl0sIHRoaXMpOworCXJldHVybiBlbmQoKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcigwLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeworCWZvciAoc2l6ZV90eXBlIF9fbiA9IDA7IF9fbiA8IF9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbikKKwkgIGlmIChfTV9idWNrZXRzW19fbl0pCisJICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9idWNrZXRzW19fbl0sIHRoaXMpOworCXJldHVybiBlbmQoKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigwLCB0aGlzKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVmwsIGNsYXNzIF9LeSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwKKwkJY2xhc3MgX0FsPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2h0YWJsZTxfVmwsIF9LeSwgX0hGLCBfRXgsIF9FcSwgX0FsPiYsCisJCSAgIGNvbnN0IGhhc2h0YWJsZTxfVmwsIF9LeSwgX0hGLCBfRXgsIF9FcSwgX0FsPiYpOworCisgICAgcHVibGljOgorICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYnVja2V0cy5zaXplKCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9IYXNodGFibGVfcHJpbWVfbGlzdDx1bnNpZ25lZCBsb25nPjo6CisgICAgICAgICAgICAgICBfU19nZXRfcHJpbWVfbGlzdCgpWyhpbnQpX1NfbnVtX3ByaW1lcyAtIDFdOworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19idWNrZXQpIGNvbnN0CisgICAgICB7CisJc2l6ZV90eXBlIF9fcmVzdWx0ID0gMDsKKwlmb3IgKF9Ob2RlKiBfX24gPSBfTV9idWNrZXRzW19fYnVja2V0XTsgX19uOyBfX24gPSBfX24tPl9NX25leHQpCisJICBfX3Jlc3VsdCArPSAxOworCXJldHVybiBfX3Jlc3VsdDsKKyAgICAgIH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7CisJcmVzaXplKF9NX251bV9lbGVtZW50cyArIDEpOworCXJldHVybiBpbnNlcnRfdW5pcXVlX25vcmVzaXplKF9fb2JqKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlyZXNpemUoX01fbnVtX2VsZW1lbnRzICsgMSk7CisJcmV0dXJuIGluc2VydF9lcXVhbF9ub3Jlc2l6ZShfX29iaik7CisgICAgICB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnRfdW5pcXVlX25vcmVzaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9lcXVhbF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaik7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisgICAgICAgIHsgaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2YpKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisgICAgICAgIHsgaW5zZXJ0X2VxdWFsKF9fZiwgX19sLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZikpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCSAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgICAgeworCSAgZm9yICggOyBfX2YgIT0gX19sOyArK19fZikKKwkgICAgaW5zZXJ0X3VuaXF1ZSgqX19mKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydF9lcXVhbChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwKKwkJICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCisgICAgICAgIHsKKwkgIGZvciAoIDsgX19mICE9IF9fbDsgKytfX2YpCisJICAgIGluc2VydF9lcXVhbCgqX19mKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0X3VuaXF1ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX2wsCisJCSAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgICAgICB7CisJICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19mLCBfX2wpOworCSAgcmVzaXplKF9NX251bV9lbGVtZW50cyArIF9fbik7CisJICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZikKKwkgICAgaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZSgqX19mKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0X2VxdWFsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fbCwKKwkJICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgICAgeworCSAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZiwgX19sKTsKKwkgIHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyBfX24pOworCSAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2YpCisJICAgIGluc2VydF9lcXVhbF9ub3Jlc2l6ZSgqX19mKTsKKwl9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgZmluZF9vcl9pbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopOworCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7CisJc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW1fa2V5KF9fa2V5KTsKKwlfTm9kZSogX19maXJzdDsKKwlmb3IgKF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07CisJICAgICBfX2ZpcnN0ICYmICFfTV9lcXVhbHMoX01fZ2V0X2tleShfX2ZpcnN0LT5fTV92YWwpLCBfX2tleSk7CisJICAgICBfX2ZpcnN0ID0gX19maXJzdC0+X01fbmV4dCkKKwkgIHsgfQorCXJldHVybiBpdGVyYXRvcihfX2ZpcnN0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeworCXNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7CisJY29uc3QgX05vZGUqIF9fZmlyc3Q7CisJZm9yIChfX2ZpcnN0ID0gX01fYnVja2V0c1tfX25dOworCSAgICAgX19maXJzdCAmJiAhX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpOworCSAgICAgX19maXJzdCA9IF9fZmlyc3QtPl9NX25leHQpCisJICB7IH0KKwlyZXR1cm4gY29uc3RfaXRlcmF0b3IoX19maXJzdCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeworCWNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7CisJc2l6ZV90eXBlIF9fcmVzdWx0ID0gMDsKKwkKKwlmb3IgKGNvbnN0IF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19uXTsgX19jdXI7CisJICAgICBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0KQorCSAgaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfX2tleSkpCisJICAgICsrX19yZXN1bHQ7CisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSk7CisKKyAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdDsKKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpOworICAgICAgCisgICAgICB2b2lkCisgICAgICBlcmFzZShjb25zdCBpdGVyYXRvciYgX19pdCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2l0KTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX251bV9lbGVtZW50c19oaW50KTsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgIHByaXZhdGU6CisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX25leHRfc2l6ZShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX19zdGxfbmV4dF9wcmltZShfX24pOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfYnVja2V0cyhzaXplX3R5cGUgX19uKQorICAgICAgeworCWNvbnN0IHNpemVfdHlwZSBfX25fYnVja2V0cyA9IF9NX25leHRfc2l6ZShfX24pOworCV9NX2J1Y2tldHMucmVzZXJ2ZShfX25fYnVja2V0cyk7CisJX01fYnVja2V0cy5pbnNlcnQoX01fYnVja2V0cy5lbmQoKSwgX19uX2J1Y2tldHMsIChfTm9kZSopIDApOworCV9NX251bV9lbGVtZW50cyA9IDA7CisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fYmt0X251bV9rZXkoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYmt0X251bV9rZXkoX19rZXksIF9NX2J1Y2tldHMuc2l6ZSgpKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX2JrdF9udW0oY29uc3QgdmFsdWVfdHlwZSYgX19vYmopIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ia3RfbnVtX2tleShfTV9nZXRfa2V5KF9fb2JqKSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9ia3RfbnVtX2tleShjb25zdCBrZXlfdHlwZSYgX19rZXksIHNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oYXNoKF9fa2V5KSAlIF9fbjsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX2JrdF9udW0oY29uc3QgdmFsdWVfdHlwZSYgX19vYmosIHNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ia3RfbnVtX2tleShfTV9nZXRfa2V5KF9fb2JqKSwgX19uKTsgfQorCisgICAgICBfTm9kZSoKKyAgICAgIF9NX25ld19ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworCV9Ob2RlKiBfX24gPSBfTV9nZXRfbm9kZSgpOworCV9fbi0+X01fbmV4dCA9IDA7CisJX190cnkKKwkgIHsKKwkgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpLmNvbnN0cnVjdCgmX19uLT5fTV92YWwsIF9fb2JqKTsKKwkgICAgcmV0dXJuIF9fbjsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX01fcHV0X25vZGUoX19uKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlbGV0ZV9ub2RlKF9Ob2RlKiBfX24pCisgICAgICB7CisJdGhpcy0+Z2V0X2FsbG9jYXRvcigpLmRlc3Ryb3koJl9fbi0+X01fdmFsKTsKKwlfTV9wdXRfbm9kZShfX24pOworICAgICAgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZV9idWNrZXQoY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fZmlyc3QsIF9Ob2RlKiBfX2xhc3QpOworCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZV9idWNrZXQoY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fbGFzdCk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NvcHlfZnJvbShjb25zdCBoYXNodGFibGUmIF9faHQpOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFzcyBfRXFLLAorCSAgICBjbGFzcyBfQWxsPgorICAgIF9IYXNodGFibGVfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPiYKKyAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD46OgorICAgIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgIGNvbnN0IF9Ob2RlKiBfX29sZCA9IF9NX2N1cjsKKyAgICAgIF9NX2N1ciA9IF9NX2N1ci0+X01fbmV4dDsKKyAgICAgIGlmICghX01fY3VyKQorCXsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldCA9IF9NX2h0LT5fTV9ia3RfbnVtKF9fb2xkLT5fTV92YWwpOworCSAgd2hpbGUgKCFfTV9jdXIgJiYgKytfX2J1Y2tldCA8IF9NX2h0LT5fTV9idWNrZXRzLnNpemUoKSkKKwkgICAgX01fY3VyID0gX01faHQtPl9NX2J1Y2tldHNbX19idWNrZXRdOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXhLLCBjbGFzcyBfRXFLLAorCSAgICBjbGFzcyBfQWxsPgorICAgIGlubGluZSBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD4KKyAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWwsIF9LZXksIF9IRiwgX0V4SywgX0VxSywgX0FsbD46OgorICAgIG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisgICAgICArKyp0aGlzOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeEssIGNsYXNzIF9FcUssCisJICAgIGNsYXNzIF9BbGw+CisgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjxfVmFsLCBfS2V5LCBfSEYsIF9FeEssIF9FcUssIF9BbGw+JgorICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPjo6CisgICAgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgY29uc3QgX05vZGUqIF9fb2xkID0gX01fY3VyOworICAgICAgX01fY3VyID0gX01fY3VyLT5fTV9uZXh0OworICAgICAgaWYgKCFfTV9jdXIpCisJeworCSAgc2l6ZV90eXBlIF9fYnVja2V0ID0gX01faHQtPl9NX2JrdF9udW0oX19vbGQtPl9NX3ZhbCk7CisJICB3aGlsZSAoIV9NX2N1ciAmJiArK19fYnVja2V0IDwgX01faHQtPl9NX2J1Y2tldHMuc2l6ZSgpKQorCSAgICBfTV9jdXIgPSBfTV9odC0+X01fYnVja2V0c1tfX2J1Y2tldF07CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeEssIGNsYXNzIF9FcUssCisJICAgIGNsYXNzIF9BbGw+CisgICAgaW5saW5lIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPgorICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3I8X1ZhbCwgX0tleSwgX0hGLCBfRXhLLCBfRXFLLCBfQWxsPjo6CisgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKKyAgICAgICsrKnRoaXM7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+JiBfX2h0MSwKKwkgICAgICAgY29uc3QgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+JiBfX2h0MikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6X05vZGUgX05vZGU7CisKKyAgICAgIGlmIChfX2h0MS5fTV9idWNrZXRzLnNpemUoKSAhPSBfX2h0Mi5fTV9idWNrZXRzLnNpemUoKSkKKwlyZXR1cm4gZmFsc2U7CisKKyAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fbiA8IF9faHQxLl9NX2J1Y2tldHMuc2l6ZSgpOyArK19fbikKKwl7CisJICBfTm9kZSogX19jdXIxID0gX19odDEuX01fYnVja2V0c1tfX25dOworCSAgX05vZGUqIF9fY3VyMiA9IF9faHQyLl9NX2J1Y2tldHNbX19uXTsKKwkgIC8vIENoZWNrIHNhbWUgbGVuZ3RoIG9mIGxpc3RzCisJICBmb3IgKDsgX19jdXIxICYmIF9fY3VyMjsKKwkgICAgICAgX19jdXIxID0gX19jdXIxLT5fTV9uZXh0LCBfX2N1cjIgPSBfX2N1cjItPl9NX25leHQpCisJICAgIHsgfSAKKwkgIGlmIChfX2N1cjEgfHwgX19jdXIyKQorCSAgICByZXR1cm4gZmFsc2U7CisJICAvLyBOb3cgY2hlY2sgb25lJ3MgZWxlbWVudHMgYXJlIGluIHRoZSBvdGhlcgorCSAgZm9yIChfX2N1cjEgPSBfX2h0MS5fTV9idWNrZXRzW19fbl0gOyBfX2N1cjE7CisJICAgICAgIF9fY3VyMSA9IF9fY3VyMS0+X01fbmV4dCkKKwkgICAgeworCSAgICAgIGJvb2wgX2ZvdW5kX19jdXIxID0gZmFsc2U7CisJICAgICAgZm9yIChfX2N1cjIgPSBfX2h0Mi5fTV9idWNrZXRzW19fbl07CisJCSAgIF9fY3VyMjsgX19jdXIyID0gX19jdXIyLT5fTV9uZXh0KQorCQl7CisJCSAgaWYgKF9fY3VyMS0+X01fdmFsID09IF9fY3VyMi0+X01fdmFsKQorCQkgICAgeworCQkgICAgICBfZm91bmRfX2N1cjEgPSB0cnVlOworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICAgIGlmICghX2ZvdW5kX19jdXIxKQorCQlyZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+JiBfX2h0MSwKKwkgICAgICAgY29uc3QgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+JiBfX2h0MikKKyAgICB7IHJldHVybiAhKF9faHQxID09IF9faHQyKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4dHJhY3QsIGNsYXNzIF9FcUtleSwKKwkgICAgY2xhc3MgX0FsbD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4dHJhY3QsIF9FcUtleSwgX0FsbD4mIF9faHQxLAorCSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXh0cmFjdCwgX0VxS2V5LCBfQWxsPiYgX19odDIpCisgICAgeyBfX2h0MS5zd2FwKF9faHQyKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgcGFpcjx0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46Oml0ZXJhdG9yLCBib29sPgorICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6CisgICAgaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bShfX29iaik7CisgICAgICBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKKyAgICAgIAorICAgICAgZm9yIChfTm9kZSogX19jdXIgPSBfX2ZpcnN0OyBfX2N1cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKKwlpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9NX2dldF9rZXkoX19vYmopKSkKKwkgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX2N1ciwgdGhpcyksIGZhbHNlKTsKKyAgICAgIAorICAgICAgX05vZGUqIF9fdG1wID0gX01fbmV3X25vZGUoX19vYmopOworICAgICAgX190bXAtPl9NX25leHQgPSBfX2ZpcnN0OworICAgICAgX01fYnVja2V0c1tfX25dID0gX190bXA7CisgICAgICArK19NX251bV9lbGVtZW50czsKKyAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3RtcCwgdGhpcyksIHRydWUpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHR5cGVuYW1lIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6aXRlcmF0b3IKKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIGluc2VydF9lcXVhbF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fYmt0X251bShfX29iaik7CisgICAgICBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKKyAgICAgIAorICAgICAgZm9yIChfTm9kZSogX19jdXIgPSBfX2ZpcnN0OyBfX2N1cjsgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKKwlpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19jdXItPl9NX3ZhbCksIF9NX2dldF9rZXkoX19vYmopKSkKKwkgIHsKKwkgICAgX05vZGUqIF9fdG1wID0gX01fbmV3X25vZGUoX19vYmopOworCSAgICBfX3RtcC0+X01fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCSAgICBfX2N1ci0+X01fbmV4dCA9IF9fdG1wOworCSAgICArK19NX251bV9lbGVtZW50czsKKwkgICAgcmV0dXJuIGl0ZXJhdG9yKF9fdG1wLCB0aGlzKTsKKwkgIH0KKworICAgICAgX05vZGUqIF9fdG1wID0gX01fbmV3X25vZGUoX19vYmopOworICAgICAgX190bXAtPl9NX25leHQgPSBfX2ZpcnN0OworICAgICAgX01fYnVja2V0c1tfX25dID0gX190bXA7CisgICAgICArK19NX251bV9lbGVtZW50czsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3RtcCwgdGhpcyk7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjpyZWZlcmVuY2UKKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIGZpbmRfb3JfaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgIHsKKyAgICAgIHJlc2l6ZShfTV9udW1fZWxlbWVudHMgKyAxKTsKKworICAgICAgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19vYmopOworICAgICAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fbl07CisgICAgICAKKyAgICAgIGZvciAoX05vZGUqIF9fY3VyID0gX19maXJzdDsgX19jdXI7IF9fY3VyID0gX19jdXItPl9NX25leHQpCisJaWYgKF9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfTV9nZXRfa2V5KF9fb2JqKSkpCisJICByZXR1cm4gX19jdXItPl9NX3ZhbDsKKyAgICAgIAorICAgICAgX05vZGUqIF9fdG1wID0gX01fbmV3X25vZGUoX19vYmopOworICAgICAgX190bXAtPl9NX25leHQgPSBfX2ZpcnN0OworICAgICAgX01fYnVja2V0c1tfX25dID0gX190bXA7CisgICAgICArK19NX251bV9lbGVtZW50czsKKyAgICAgIHJldHVybiBfX3RtcC0+X01fdmFsOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHBhaXI8dHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjppdGVyYXRvciwKKwkgdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjppdGVyYXRvcj4KKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICB7CisgICAgICB0eXBlZGVmIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBfUGlpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW1fa2V5KF9fa2V5KTsKKworICAgICAgZm9yIChfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsgX19maXJzdDsKKwkgICBfX2ZpcnN0ID0gX19maXJzdC0+X01fbmV4dCkKKwlpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpKQorCSAgeworCSAgICBmb3IgKF9Ob2RlKiBfX2N1ciA9IF9fZmlyc3QtPl9NX25leHQ7IF9fY3VyOworCQkgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKKwkgICAgICBpZiAoIV9NX2VxdWFscyhfTV9nZXRfa2V5KF9fY3VyLT5fTV92YWwpLCBfX2tleSkpCisJCXJldHVybiBfUGlpKGl0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLCBpdGVyYXRvcihfX2N1ciwgdGhpcykpOworCSAgICBmb3IgKHNpemVfdHlwZSBfX20gPSBfX24gKyAxOyBfX20gPCBfTV9idWNrZXRzLnNpemUoKTsgKytfX20pCisJICAgICAgaWYgKF9NX2J1Y2tldHNbX19tXSkKKwkJcmV0dXJuIF9QaWkoaXRlcmF0b3IoX19maXJzdCwgdGhpcyksCisJCQkgICAgaXRlcmF0b3IoX01fYnVja2V0c1tfX21dLCB0aGlzKSk7CisJICAgIHJldHVybiBfUGlpKGl0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLCBlbmQoKSk7CisJICB9CisgICAgICByZXR1cm4gX1BpaShlbmQoKSwgZW5kKCkpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHBhaXI8dHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+Ojpjb25zdF9pdGVyYXRvciwKKwkgdHlwZW5hbWUgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+Ojpjb25zdF9pdGVyYXRvcj4KKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfUGlpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW1fa2V5KF9fa2V5KTsKKworICAgICAgZm9yIChjb25zdCBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsgX19maXJzdDsKKwkgICBfX2ZpcnN0ID0gX19maXJzdC0+X01fbmV4dCkKKwl7CisJICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpKQorCSAgICB7CisJICAgICAgZm9yIChjb25zdCBfTm9kZSogX19jdXIgPSBfX2ZpcnN0LT5fTV9uZXh0OyBfX2N1cjsKKwkJICAgX19jdXIgPSBfX2N1ci0+X01fbmV4dCkKKwkJaWYgKCFfTV9lcXVhbHMoX01fZ2V0X2tleShfX2N1ci0+X01fdmFsKSwgX19rZXkpKQorCQkgIHJldHVybiBfUGlpKGNvbnN0X2l0ZXJhdG9yKF9fZmlyc3QsIHRoaXMpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX19jdXIsIHRoaXMpKTsKKwkgICAgICBmb3IgKHNpemVfdHlwZSBfX20gPSBfX24gKyAxOyBfX20gPCBfTV9idWNrZXRzLnNpemUoKTsgKytfX20pCisJCWlmIChfTV9idWNrZXRzW19fbV0pCisJCSAgcmV0dXJuIF9QaWkoY29uc3RfaXRlcmF0b3IoX19maXJzdCwgdGhpcyksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfTV9idWNrZXRzW19fbV0sIHRoaXMpKTsKKwkgICAgICByZXR1cm4gX1BpaShjb25zdF9pdGVyYXRvcihfX2ZpcnN0LCB0aGlzKSwgZW5kKCkpOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9QaWkoZW5kKCksIGVuZCgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICB0eXBlbmFtZSBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OnNpemVfdHlwZQorICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6CisgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfTV9ia3RfbnVtX2tleShfX2tleSk7CisgICAgICBfTm9kZSogX19maXJzdCA9IF9NX2J1Y2tldHNbX19uXTsKKyAgICAgIF9Ob2RlKiBfX3NhdmVkX3Nsb3QgPSAwOworICAgICAgc2l6ZV90eXBlIF9fZXJhc2VkID0gMDsKKworICAgICAgaWYgKF9fZmlyc3QpCisJeworCSAgX05vZGUqIF9fY3VyID0gX19maXJzdDsKKwkgIF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgIHdoaWxlIChfX25leHQpCisJICAgIHsKKwkgICAgICBpZiAoX01fZXF1YWxzKF9NX2dldF9rZXkoX19uZXh0LT5fTV92YWwpLCBfX2tleSkpCisJCXsKKwkJICBpZiAoJl9NX2dldF9rZXkoX19uZXh0LT5fTV92YWwpICE9ICZfX2tleSkKKwkJICAgIHsKKwkJICAgICAgX19jdXItPl9NX25leHQgPSBfX25leHQtPl9NX25leHQ7CisJCSAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fbmV4dCk7CisJCSAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCQkgICAgICArK19fZXJhc2VkOworCQkgICAgICAtLV9NX251bV9lbGVtZW50czsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIF9fc2F2ZWRfc2xvdCA9IF9fY3VyOworCQkgICAgICBfX2N1ciA9IF9fbmV4dDsKKwkJICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBfX2N1ciA9IF9fbmV4dDsKKwkJICBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkJfQorCSAgICB9CisJICBib29sIF9fZGVsZXRlX2ZpcnN0ID0gX01fZXF1YWxzKF9NX2dldF9rZXkoX19maXJzdC0+X01fdmFsKSwgX19rZXkpOworCSAgaWYgKF9fc2F2ZWRfc2xvdCkKKwkgICAgeworCSAgICAgIF9fbmV4dCA9IF9fc2F2ZWRfc2xvdC0+X01fbmV4dDsKKwkgICAgICBfX3NhdmVkX3Nsb3QtPl9NX25leHQgPSBfX25leHQtPl9NX25leHQ7CisJICAgICAgX01fZGVsZXRlX25vZGUoX19uZXh0KTsKKwkgICAgICArK19fZXJhc2VkOworCSAgICAgIC0tX01fbnVtX2VsZW1lbnRzOworCSAgICB9CisJICBpZiAoX19kZWxldGVfZmlyc3QpCisJICAgIHsKKwkgICAgICBfTV9idWNrZXRzW19fbl0gPSBfX2ZpcnN0LT5fTV9uZXh0OworCSAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fZmlyc3QpOworCSAgICAgICsrX19lcmFzZWQ7CisJICAgICAgLS1fTV9udW1fZWxlbWVudHM7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19lcmFzZWQ7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgdm9pZCBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIGVyYXNlKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KQorICAgIHsKKyAgICAgIF9Ob2RlKiBfX3AgPSBfX2l0Ll9NX2N1cjsKKyAgICAgIGlmIChfX3ApCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9NX2JrdF9udW0oX19wLT5fTV92YWwpOworCSAgX05vZGUqIF9fY3VyID0gX01fYnVja2V0c1tfX25dOworCSAgCisJICBpZiAoX19jdXIgPT0gX19wKQorCSAgICB7CisJICAgICAgX01fYnVja2V0c1tfX25dID0gX19jdXItPl9NX25leHQ7CisJICAgICAgX01fZGVsZXRlX25vZGUoX19jdXIpOworCSAgICAgIC0tX01fbnVtX2VsZW1lbnRzOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfTm9kZSogX19uZXh0ID0gX19jdXItPl9NX25leHQ7CisJICAgICAgd2hpbGUgKF9fbmV4dCkKKwkJeworCQkgIGlmIChfX25leHQgPT0gX19wKQorCQkgICAgeworCQkgICAgICBfX2N1ci0+X01fbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKKwkJICAgICAgX01fZGVsZXRlX25vZGUoX19uZXh0KTsKKwkJICAgICAgLS1fTV9udW1fZWxlbWVudHM7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgX19jdXIgPSBfX25leHQ7CisJCSAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWwsIGNsYXNzIF9LZXksIGNsYXNzIF9IRiwgY2xhc3MgX0V4LCBjbGFzcyBfRXEsIGNsYXNzIF9BbGw+CisgICAgdm9pZAorICAgIGhhc2h0YWJsZTxfVmFsLCBfS2V5LCBfSEYsIF9FeCwgX0VxLCBfQWxsPjo6CisgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX2ZfYnVja2V0ID0gX19maXJzdC5fTV9jdXIgPyBfTV9ia3RfbnVtKF9fZmlyc3QuX01fY3VyLT5fTV92YWwpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfTV9idWNrZXRzLnNpemUoKTsKKworICAgICAgc2l6ZV90eXBlIF9fbF9idWNrZXQgPSBfX2xhc3QuX01fY3VyID8gX01fYmt0X251bShfX2xhc3QuX01fY3VyLT5fTV92YWwpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9NX2J1Y2tldHMuc2l6ZSgpOworCisgICAgICBpZiAoX19maXJzdC5fTV9jdXIgPT0gX19sYXN0Ll9NX2N1cikKKwlyZXR1cm47CisgICAgICBlbHNlIGlmIChfX2ZfYnVja2V0ID09IF9fbF9idWNrZXQpCisJX01fZXJhc2VfYnVja2V0KF9fZl9idWNrZXQsIF9fZmlyc3QuX01fY3VyLCBfX2xhc3QuX01fY3VyKTsKKyAgICAgIGVsc2UKKwl7CisJICBfTV9lcmFzZV9idWNrZXQoX19mX2J1Y2tldCwgX19maXJzdC5fTV9jdXIsIDApOworCSAgZm9yIChzaXplX3R5cGUgX19uID0gX19mX2J1Y2tldCArIDE7IF9fbiA8IF9fbF9idWNrZXQ7ICsrX19uKQorCSAgICBfTV9lcmFzZV9idWNrZXQoX19uLCAwKTsKKwkgIGlmIChfX2xfYnVja2V0ICE9IF9NX2J1Y2tldHMuc2l6ZSgpKQorCSAgICBfTV9lcmFzZV9idWNrZXQoX19sX2J1Y2tldCwgX19sYXN0Ll9NX2N1cik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIGlubGluZSB2b2lkCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgZXJhc2UoaXRlcmF0b3IoY29uc3RfY2FzdDxfTm9kZSo+KF9fZmlyc3QuX01fY3VyKSwKKwkJICAgICBjb25zdF9jYXN0PGhhc2h0YWJsZSo+KF9fZmlyc3QuX01faHQpKSwKKwkgICAgaXRlcmF0b3IoY29uc3RfY2FzdDxfTm9kZSo+KF9fbGFzdC5fTV9jdXIpLAorCQkgICAgIGNvbnN0X2Nhc3Q8aGFzaHRhYmxlKj4oX19sYXN0Ll9NX2h0KSkpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIGlubGluZSB2b2lkCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBlcmFzZShjb25zdCBjb25zdF9pdGVyYXRvciYgX19pdCkKKyAgICB7IGVyYXNlKGl0ZXJhdG9yKGNvbnN0X2Nhc3Q8X05vZGUqPihfX2l0Ll9NX2N1ciksCisJCSAgICAgY29uc3RfY2FzdDxoYXNodGFibGUqPihfX2l0Ll9NX2h0KSkpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICB2b2lkCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICByZXNpemUoc2l6ZV90eXBlIF9fbnVtX2VsZW1lbnRzX2hpbnQpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX24gPSBfTV9idWNrZXRzLnNpemUoKTsKKyAgICAgIGlmIChfX251bV9lbGVtZW50c19oaW50ID4gX19vbGRfbikKKwl7CisJICBjb25zdCBzaXplX3R5cGUgX19uID0gX01fbmV4dF9zaXplKF9fbnVtX2VsZW1lbnRzX2hpbnQpOworCSAgaWYgKF9fbiA+IF9fb2xkX24pCisJICAgIHsKKwkgICAgICBfVmVjdG9yX3R5cGUgX190bXAoX19uLCAoX05vZGUqKSgwKSwgX01fYnVja2V0cy5nZXRfYWxsb2NhdG9yKCkpOworCSAgICAgIF9fdHJ5CisJCXsKKwkJICBmb3IgKHNpemVfdHlwZSBfX2J1Y2tldCA9IDA7IF9fYnVja2V0IDwgX19vbGRfbjsgKytfX2J1Y2tldCkKKwkJICAgIHsKKwkJICAgICAgX05vZGUqIF9fZmlyc3QgPSBfTV9idWNrZXRzW19fYnVja2V0XTsKKwkJICAgICAgd2hpbGUgKF9fZmlyc3QpCisJCQl7CisJCQkgIHNpemVfdHlwZSBfX25ld19idWNrZXQgPSBfTV9ia3RfbnVtKF9fZmlyc3QtPl9NX3ZhbCwKKwkJCQkJCQkgICAgICBfX24pOworCQkJICBfTV9idWNrZXRzW19fYnVja2V0XSA9IF9fZmlyc3QtPl9NX25leHQ7CisJCQkgIF9fZmlyc3QtPl9NX25leHQgPSBfX3RtcFtfX25ld19idWNrZXRdOworCQkJICBfX3RtcFtfX25ld19idWNrZXRdID0gX19maXJzdDsKKwkJCSAgX19maXJzdCA9IF9NX2J1Y2tldHNbX19idWNrZXRdOworCQkJfQorCQkgICAgfQorCQkgIF9NX2J1Y2tldHMuc3dhcChfX3RtcCk7CisJCX0KKwkgICAgICBfX2NhdGNoKC4uLikKKwkJeworCQkgIGZvciAoc2l6ZV90eXBlIF9fYnVja2V0ID0gMDsgX19idWNrZXQgPCBfX3RtcC5zaXplKCk7CisJCSAgICAgICArK19fYnVja2V0KQorCQkgICAgeworCQkgICAgICB3aGlsZSAoX190bXBbX19idWNrZXRdKQorCQkJeworCQkJICBfTm9kZSogX19uZXh0ID0gX190bXBbX19idWNrZXRdLT5fTV9uZXh0OworCQkJICBfTV9kZWxldGVfbm9kZShfX3RtcFtfX2J1Y2tldF0pOworCQkJICBfX3RtcFtfX2J1Y2tldF0gPSBfX25leHQ7CisJCQl9CisJCSAgICB9CisJCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICB2b2lkCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBfTV9lcmFzZV9idWNrZXQoY29uc3Qgc2l6ZV90eXBlIF9fbiwgX05vZGUqIF9fZmlyc3QsIF9Ob2RlKiBfX2xhc3QpCisgICAgeworICAgICAgX05vZGUqIF9fY3VyID0gX01fYnVja2V0c1tfX25dOworICAgICAgaWYgKF9fY3VyID09IF9fZmlyc3QpCisJX01fZXJhc2VfYnVja2V0KF9fbiwgX19sYXN0KTsKKyAgICAgIGVsc2UKKwl7CisJICBfTm9kZSogX19uZXh0OworCSAgZm9yIChfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgICAgICAgX19uZXh0ICE9IF9fZmlyc3Q7CisJICAgICAgIF9fY3VyID0gX19uZXh0LCBfX25leHQgPSBfX2N1ci0+X01fbmV4dCkKKwkgICAgOworCSAgd2hpbGUgKF9fbmV4dCAhPSBfX2xhc3QpCisJICAgIHsKKwkgICAgICBfX2N1ci0+X01fbmV4dCA9IF9fbmV4dC0+X01fbmV4dDsKKwkgICAgICBfTV9kZWxldGVfbm9kZShfX25leHQpOworCSAgICAgIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCSAgICAgIC0tX01fbnVtX2VsZW1lbnRzOworCSAgICB9CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHZvaWQKKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIF9NX2VyYXNlX2J1Y2tldChjb25zdCBzaXplX3R5cGUgX19uLCBfTm9kZSogX19sYXN0KQorICAgIHsKKyAgICAgIF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19uXTsKKyAgICAgIHdoaWxlIChfX2N1ciAhPSBfX2xhc3QpCisJeworCSAgX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCSAgX01fZGVsZXRlX25vZGUoX19jdXIpOworCSAgX19jdXIgPSBfX25leHQ7CisJICBfTV9idWNrZXRzW19fbl0gPSBfX2N1cjsKKwkgIC0tX01fbnVtX2VsZW1lbnRzOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0tleSwgY2xhc3MgX0hGLCBjbGFzcyBfRXgsIGNsYXNzIF9FcSwgY2xhc3MgX0FsbD4KKyAgICB2b2lkCisgICAgaGFzaHRhYmxlPF9WYWwsIF9LZXksIF9IRiwgX0V4LCBfRXEsIF9BbGw+OjoKKyAgICBjbGVhcigpCisgICAgeworICAgICAgaWYgKF9NX251bV9lbGVtZW50cyA9PSAwKQorCXJldHVybjsKKworICAgICAgZm9yIChzaXplX3R5cGUgX19pID0gMDsgX19pIDwgX01fYnVja2V0cy5zaXplKCk7ICsrX19pKQorCXsKKwkgIF9Ob2RlKiBfX2N1ciA9IF9NX2J1Y2tldHNbX19pXTsKKwkgIHdoaWxlIChfX2N1ciAhPSAwKQorCSAgICB7CisJICAgICAgX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCSAgICAgIF9NX2RlbGV0ZV9ub2RlKF9fY3VyKTsKKwkgICAgICBfX2N1ciA9IF9fbmV4dDsKKwkgICAgfQorCSAgX01fYnVja2V0c1tfX2ldID0gMDsKKwl9CisgICAgICBfTV9udW1fZWxlbWVudHMgPSAwOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfS2V5LCBjbGFzcyBfSEYsIGNsYXNzIF9FeCwgY2xhc3MgX0VxLCBjbGFzcyBfQWxsPgorICAgIHZvaWQKKyAgICBoYXNodGFibGU8X1ZhbCwgX0tleSwgX0hGLCBfRXgsIF9FcSwgX0FsbD46OgorICAgIF9NX2NvcHlfZnJvbShjb25zdCBoYXNodGFibGUmIF9faHQpCisgICAgeworICAgICAgX01fYnVja2V0cy5jbGVhcigpOworICAgICAgX01fYnVja2V0cy5yZXNlcnZlKF9faHQuX01fYnVja2V0cy5zaXplKCkpOworICAgICAgX01fYnVja2V0cy5pbnNlcnQoX01fYnVja2V0cy5lbmQoKSwgX19odC5fTV9idWNrZXRzLnNpemUoKSwgKF9Ob2RlKikgMCk7CisgICAgICBfX3RyeQorCXsKKwkgIGZvciAoc2l6ZV90eXBlIF9faSA9IDA7IF9faSA8IF9faHQuX01fYnVja2V0cy5zaXplKCk7ICsrX19pKSB7CisJICAgIGNvbnN0IF9Ob2RlKiBfX2N1ciA9IF9faHQuX01fYnVja2V0c1tfX2ldOworCSAgICBpZiAoX19jdXIpCisJICAgICAgeworCQlfTm9kZSogX19sb2NhbF9jb3B5ID0gX01fbmV3X25vZGUoX19jdXItPl9NX3ZhbCk7CisJCV9NX2J1Y2tldHNbX19pXSA9IF9fbG9jYWxfY29weTsKKwkJCisJCWZvciAoX05vZGUqIF9fbmV4dCA9IF9fY3VyLT5fTV9uZXh0OworCQkgICAgIF9fbmV4dDsKKwkJICAgICBfX2N1ciA9IF9fbmV4dCwgX19uZXh0ID0gX19jdXItPl9NX25leHQpCisJCSAgeworCQkgICAgX19sb2NhbF9jb3B5LT5fTV9uZXh0ID0gX01fbmV3X25vZGUoX19uZXh0LT5fTV92YWwpOworCQkgICAgX19sb2NhbF9jb3B5ID0gX19sb2NhbF9jb3B5LT5fTV9uZXh0OworCQkgIH0KKwkgICAgICB9CisJICB9CisJICBfTV9udW1fZWxlbWVudHMgPSBfX2h0Ll9NX251bV9lbGVtZW50czsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBjbGVhcigpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvc3Ryc3RyZWFtIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iYWNrd2FyZC9zdHJzdHJlYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2NWJlMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYmFja3dhcmQvc3Ryc3RyZWFtCkBAIC0wLDAgKzEsMTg0IEBACisvLyBCYWNrd2FyZC1jb21wYXQgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk4CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvLyBXQVJOSU5HOiBUaGUgY2xhc3NlcyBkZWZpbmVkIGluIHRoaXMgaGVhZGVyIGFyZSBERVBSRUNBVEVELiAgVGhpcworLy8gaGVhZGVyIGlzIGRlZmluZWQgaW4gc2VjdGlvbiBELjcuMSBvZiB0aGUgQysrIHN0YW5kYXJkLCBhbmQgaXQKKy8vIE1BWSBCRSBSRU1PVkVEIGluIGEgZnV0dXJlIHN0YW5kYXJkIHJldmlzaW9uLiAgT25lIHNob3VsZCB1c2UgdGhlCisvLyBoZWFkZXIgPHNzdHJlYW0+IGluc3RlYWQuCisKKy8qKiBAZmlsZSBiYWNrd2FyZC9zdHJzdHJlYW0KKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtzc3RyZWFtfQorICovCisKKyNpZm5kZWYgX0JBQ0tXQVJEX1NUUlNUUkVBTQorI2RlZmluZSBfQkFDS1dBUkRfU1RSU1RSRUFNCisKKyNpbmNsdWRlICJiYWNrd2FyZF93YXJuaW5nLmgiCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGlvcz4KKyNpbmNsdWRlIDxpc3RyZWFtPgorI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gQ2xhc3Mgc3Ryc3RyZWFtYnVmLCBhIHN0cmVhbWJ1ZiBjbGFzcyB0aGF0IG1hbmFnZXMgYW4gYXJyYXkgb2YgY2hhci4KKyAgLy8gTm90ZSB0aGF0IHRoaXMgY2xhc3MgaXMgbm90IGEgdGVtcGxhdGUuCisgIGNsYXNzIHN0cnN0cmVhbWJ1ZiA6IHB1YmxpYyBiYXNpY19zdHJlYW1idWY8Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPgorICB7CisgIHB1YmxpYzoKKyAgICAvLyBUeXBlcy4KKyAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+ICAgICAgICAgICAgICBfVHJhaXRzOworICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXIsIF9UcmFpdHM+IF9CYXNlOworCisgIHB1YmxpYzoKKyAgICAvLyBDb25zdHJ1Y3RvciwgZGVzdHJ1Y3RvcgorICAgIGV4cGxpY2l0IHN0cnN0cmVhbWJ1ZihzdHJlYW1zaXplIF9faW5pdGlhbF9jYXBhY2l0eSA9IDApOworICAgIHN0cnN0cmVhbWJ1Zih2b2lkKiAoKl9fYWxsb2MpKHNpemVfdCksIHZvaWQgKCpfX2ZyZWUpKHZvaWQqKSk7CisKKyAgICBzdHJzdHJlYW1idWYoY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uLCBjaGFyKiBfX3B1dCA9IDApIHRocm93ICgpOworICAgIHN0cnN0cmVhbWJ1ZihzaWduZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uLCBzaWduZWQgY2hhciogX19wdXQgPSAwKSB0aHJvdyAoKTsKKyAgICBzdHJzdHJlYW1idWYodW5zaWduZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uLCB1bnNpZ25lZCBjaGFyKiBfX3B1dD0wKSB0aHJvdyAoKTsKKworICAgIHN0cnN0cmVhbWJ1Zihjb25zdCBjaGFyKiBfX2dldCwgc3RyZWFtc2l6ZSBfX24pIHRocm93ICgpOworICAgIHN0cnN0cmVhbWJ1Zihjb25zdCBzaWduZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uKSB0aHJvdyAoKTsKKyAgICBzdHJzdHJlYW1idWYoY29uc3QgdW5zaWduZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uKSB0aHJvdyAoKTsKKworICAgIHZpcnR1YWwgfnN0cnN0cmVhbWJ1ZigpOworCisgIHB1YmxpYzoKKyAgICB2b2lkIGZyZWV6ZShib29sID0gdHJ1ZSkgdGhyb3cgKCk7CisgICAgY2hhciogc3RyKCkgdGhyb3cgKCk7CisgICAgX0dMSUJDWFhfUFVSRSBpbnQgcGNvdW50KCkgY29uc3QgdGhyb3cgKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgaW50X3R5cGUgb3ZlcmZsb3coaW50X3R5cGUgX19jICA9IF9UcmFpdHM6OmVvZigpKTsKKyAgICB2aXJ0dWFsIGludF90eXBlIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7CisgICAgdmlydHVhbCBpbnRfdHlwZSB1bmRlcmZsb3coKTsKKyAgICB2aXJ0dWFsIF9CYXNlKiBzZXRidWYoY2hhciogX19idWYsIHN0cmVhbXNpemUgX19uKTsKKyAgICB2aXJ0dWFsIHBvc190eXBlIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyLAorCQkJICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlCisJCQkgICAgID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CisgICAgdmlydHVhbCBwb3NfdHlwZSBzZWVrcG9zKHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlCisJCQkgICAgID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJzdHJlYW1idWYmCisgICAgb3BlcmF0b3I9KGNvbnN0IHN0cnN0cmVhbWJ1ZiYpOworCisgICAgc3Ryc3RyZWFtYnVmKGNvbnN0IHN0cnN0cmVhbWJ1ZiYpOworCisgICAgLy8gRHluYW1pYyBhbGxvY2F0aW9uLCBwb3NzaWJseSB1c2luZyBfTV9hbGxvY19mdW4gYW5kIF9NX2ZyZWVfZnVuLgorICAgIGNoYXIqIF9NX2FsbG9jKHNpemVfdCk7CisgICAgdm9pZCAgX01fZnJlZShjaGFyKik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBpbiBjb25zdHJ1Y3RvcnMuCisgICAgdm9pZCBfTV9zZXR1cChjaGFyKiBfX2dldCwgY2hhciogX19wdXQsIHN0cmVhbXNpemUgX19uKSB0aHJvdyAoKTsKKworICBwcml2YXRlOgorICAgIC8vIERhdGEgbWVtYmVycy4KKyAgICB2b2lkKiAoKl9NX2FsbG9jX2Z1bikoc2l6ZV90KTsKKyAgICB2b2lkICAoKl9NX2ZyZWVfZnVuKSh2b2lkKik7CisKKyAgICBib29sIF9NX2R5bmFtaWMgIDogMTsKKyAgICBib29sIF9NX2Zyb3plbiAgIDogMTsKKyAgICBib29sIF9NX2NvbnN0YW50IDogMTsKKyAgfTsKKworICAvLyBDbGFzcyBpc3Ryc3RyZWFtLCBhbiBpc3RyZWFtIHRoYXQgbWFuYWdlcyBhIHN0cnN0cmVhbWJ1Zi4KKyAgY2xhc3MgaXN0cnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPGNoYXI+CisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IGlzdHJzdHJlYW0oY2hhciopOworICAgIGV4cGxpY2l0IGlzdHJzdHJlYW0oY29uc3QgY2hhciopOworICAgIGlzdHJzdHJlYW0oY2hhciogLCBzdHJlYW1zaXplKTsKKyAgICBpc3Ryc3RyZWFtKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKKyAgICB2aXJ0dWFsIH5pc3Ryc3RyZWFtKCk7CisKKyAgICBfR0xJQkNYWF9DT05TVCBzdHJzdHJlYW1idWYqIHJkYnVmKCkgY29uc3QgdGhyb3cgKCk7CisgICAgY2hhciogc3RyKCkgdGhyb3cgKCk7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJzdHJlYW1idWYgX01fYnVmOworICB9OworCisgIC8vIENsYXNzIG9zdHJzdHJlYW0KKyAgY2xhc3Mgb3N0cnN0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3RyZWFtPGNoYXI+CisgIHsKKyAgcHVibGljOgorICAgIG9zdHJzdHJlYW0oKTsKKyAgICBvc3Ryc3RyZWFtKGNoYXIqLCBpbnQsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjpvdXQpOworICAgIHZpcnR1YWwgfm9zdHJzdHJlYW0oKTsKKworICAgIF9HTElCQ1hYX0NPTlNUIHN0cnN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB0aHJvdyAoKTsKKyAgICB2b2lkIGZyZWV6ZShib29sID0gdHJ1ZSkgdGhyb3coKTsKKyAgICBjaGFyKiBzdHIoKSB0aHJvdyAoKTsKKyAgICBfR0xJQkNYWF9QVVJFIGludCBwY291bnQoKSBjb25zdCB0aHJvdyAoKTsKKworICBwcml2YXRlOgorICAgIHN0cnN0cmVhbWJ1ZiBfTV9idWY7CisgIH07CisKKyAgLy8gQ2xhc3Mgc3Ryc3RyZWFtCisgIGNsYXNzIHN0cnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbTxjaGFyPgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5cGU7CisgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGUgaW50X3R5cGU7CisgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPjo6cG9zX3R5cGUgcG9zX3R5cGU7CisgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPjo6b2ZmX3R5cGUgb2ZmX3R5cGU7CisKKyAgICBzdHJzdHJlYW0oKTsKKyAgICBzdHJzdHJlYW0oY2hhciosIGludCwgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CisgICAgdmlydHVhbCB+c3Ryc3RyZWFtKCk7CisKKyAgICBfR0xJQkNYWF9DT05TVCBzdHJzdHJlYW1idWYqIHJkYnVmKCkgY29uc3QgdGhyb3cgKCk7CisgICAgdm9pZCBmcmVlemUoYm9vbCA9IHRydWUpIHRocm93ICgpOworICAgIF9HTElCQ1hYX1BVUkUgaW50IHBjb3VudCgpIGNvbnN0IHRocm93ICgpOworICAgIGNoYXIqIHN0cigpIHRocm93ICgpOworCisgIHByaXZhdGU6CisgICAgc3Ryc3RyZWFtYnVmIF9NX2J1ZjsKKyAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9hbGdvcml0aG1md2QuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9hbGdvcml0aG1md2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjMyMWIyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2FsZ29yaXRobWZ3ZC5oCkBAIC0wLDAgKzEsODI2IEBACisvLyA8YWxnb3JpdGhtPiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYWxnb3JpdGhtZndkLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXthbGdvcml0aG19CisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9BTEdPUklUSE1GV0RfSAorI2RlZmluZSBfR0xJQkNYWF9BTEdPUklUSE1GV0RfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcGFpci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaD4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoKKyAgICBhZGphY2VudF9maW5kCisgICAgYWxsX29mIChDKysweCkKKyAgICBhbnlfb2YgKEMrKzB4KQorICAgIGJpbmFyeV9zZWFyY2gKKyAgICBjb3B5CisgICAgY29weV9iYWNrd2FyZAorICAgIGNvcHlfaWYgKEMrKzB4KQorICAgIGNvcHlfbiAoQysrMHgpCisgICAgY291bnQKKyAgICBjb3VudF9pZgorICAgIGVxdWFsCisgICAgZXF1YWxfcmFuZ2UKKyAgICBmaWxsCisgICAgZmlsbF9uCisgICAgZmluZAorICAgIGZpbmRfZW5kCisgICAgZmluZF9maXJzdF9vZgorICAgIGZpbmRfaWYKKyAgICBmaW5kX2lmX25vdCAoQysrMHgpCisgICAgZm9yX2VhY2gKKyAgICBnZW5lcmF0ZQorICAgIGdlbmVyYXRlX24KKyAgICBpbmNsdWRlcworICAgIGlucGxhY2VfbWVyZ2UKKyAgICBpc19oZWFwIChDKysweCkKKyAgICBpc19oZWFwX3VudGlsIChDKysweCkKKyAgICBpc19wYXJ0aXRpb25lZCAoQysrMHgpCisgICAgaXNfc29ydGVkIChDKysweCkKKyAgICBpc19zb3J0ZWRfdW50aWwgKEMrKzB4KQorICAgIGl0ZXJfc3dhcAorICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlCisgICAgbG93ZXJfYm91bmQKKyAgICBtYWtlX2hlYXAKKyAgICBtYXgKKyAgICBtYXhfZWxlbWVudAorICAgIG1lcmdlCisgICAgbWluCisgICAgbWluX2VsZW1lbnQKKyAgICBtaW5tYXggKEMrKzB4KQorICAgIG1pbm1heF9lbGVtZW50IChDKysweCkKKyAgICBtaXNtYXRjaAorICAgIG5leHRfcGVybXV0YXRpb24KKyAgICBub25lX29mIChDKysweCkKKyAgICBudGhfZWxlbWVudAorICAgIHBhcnRpYWxfc29ydAorICAgIHBhcnRpYWxfc29ydF9jb3B5CisgICAgcGFydGl0aW9uCisgICAgcGFydGl0aW9uX2NvcHkgKEMrKzB4KQorICAgIHBhcnRpdGlvbl9wb2ludCAoQysrMHgpCisgICAgcG9wX2hlYXAKKyAgICBwcmV2X3Blcm11dGF0aW9uCisgICAgcHVzaF9oZWFwCisgICAgcmFuZG9tX3NodWZmbGUKKyAgICByZW1vdmUKKyAgICByZW1vdmVfY29weQorICAgIHJlbW92ZV9jb3B5X2lmCisgICAgcmVtb3ZlX2lmCisgICAgcmVwbGFjZQorICAgIHJlcGxhY2VfY29weQorICAgIHJlcGxhY2VfY29weV9pZgorICAgIHJlcGxhY2VfaWYKKyAgICByZXZlcnNlCisgICAgcmV2ZXJzZV9jb3B5CisgICAgcm90YXRlCisgICAgcm90YXRlX2NvcHkKKyAgICBzZWFyY2gKKyAgICBzZWFyY2hfbgorICAgIHNldF9kaWZmZXJlbmNlCisgICAgc2V0X2ludGVyc2VjdGlvbgorICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZQorICAgIHNldF91bmlvbgorICAgIHNodWZmbGUgKEMrKzB4KQorICAgIHNvcnQKKyAgICBzb3J0X2hlYXAKKyAgICBzdGFibGVfcGFydGl0aW9uCisgICAgc3RhYmxlX3NvcnQKKyAgICBzd2FwCisgICAgc3dhcF9yYW5nZXMKKyAgICB0cmFuc2Zvcm0KKyAgICB1bmlxdWUKKyAgICB1bmlxdWVfY29weQorICAgIHVwcGVyX2JvdW5kCisgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBhbGdvcml0aG1zIEFsZ29yaXRobXMKKyAgICoKKyAgICogQ29tcG9uZW50cyBmb3IgcGVyZm9ybWluZyBhbGdvcml0aG1pYyBvcGVyYXRpb25zLiBJbmNsdWRlcworICAgKiBub24tbW9kaWZ5aW5nIHNlcXVlbmNlLCBtb2RpZnlpbmcgKG11dGF0aW5nKSBzZXF1ZW5jZSwgc29ydGluZywKKyAgICogc2VhcmNoaW5nLCBtZXJnZSwgcGFydGl0aW9uLCBoZWFwLCBzZXQsIG1pbmltYSwgbWF4aW1hLCBhbmQKKyAgICogcGVybXV0YXRpb24gb3BlcmF0aW9ucy4KKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBtdXRhdGluZ19hbGdvcml0aG1zIE11dGF0aW5nCisgICAqIEBpbmdyb3VwIGFsZ29yaXRobXMKKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcyBOb24tTXV0YXRpbmcKKyAgICogQGluZ3JvdXAgYWxnb3JpdGhtcworICAgKi8KKworICAvKioKKyAgICogQGRlZmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcyBTb3J0aW5nCisgICAqIEBpbmdyb3VwIGFsZ29yaXRobXMKKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBzZXRfYWxnb3JpdGhtcyBTZXQgT3BlcmF0aW9uCisgICAqIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKgorICAgKiBUaGVzZSBhbGdvcml0aG1zIGFyZSBjb21tb24gc2V0IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHNlcXVlbmNlcworICAgKiB0aGF0IGFyZSBhbHJlYWR5IHNvcnRlZC4gVGhlIG51bWJlciBvZiBjb21wYXJpc29ucyB3aWxsIGJlCisgICAqIGxpbmVhci4KKyAgICovCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMgQmluYXJ5IFNlYXJjaAorICAgKiBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICoKKyAgICogVGhlc2UgYWxnb3JpdGhtcyBhcmUgdmFyaWF0aW9ucyBvZiBhIGNsYXNzaWMgYmluYXJ5IHNlYXJjaCwgYW5kCisgICAqIGFsbCBhc3N1bWUgdGhhdCB0aGUgc2VxdWVuY2UgYmVpbmcgc2VhcmNoZWQgaXMgYWxyZWFkeSBzb3J0ZWQuCisgICAqIAorICAgKiBUaGUgbnVtYmVyIG9mIGNvbXBhcmlzb25zIHdpbGwgYmUgbG9nYXJpdGhtaWMgKGFuZCBhcyBmZXcgYXMKKyAgICogcG9zc2libGUpLiAgVGhlIG51bWJlciBvZiBzdGVwcyB0aHJvdWdoIHRoZSBzZXF1ZW5jZSB3aWxsIGJlCisgICAqIGxvZ2FyaXRobWljIGZvciByYW5kb20tYWNjZXNzIGl0ZXJhdG9ycyAoZS5nLiwgcG9pbnRlcnMpLCBhbmQKKyAgICogbGluZWFyIG90aGVyd2lzZS4KKyAgICogCisgICAqIFRoZSBMV0cgaGFzIHBhc3NlZCBEZWZlY3QgUmVwb3J0IDI3MCwgd2hpY2ggbm90ZXM6IDxlbT5UaGUKKyAgICogcHJvcG9zZWQgcmVzb2x1dGlvbiByZWludGVycHJldHMgYmluYXJ5IHNlYXJjaC4gSW5zdGVhZCBvZgorICAgKiB0aGlua2luZyBhYm91dCBzZWFyY2hpbmcgZm9yIGEgdmFsdWUgaW4gYSBzb3J0ZWQgcmFuZ2UsIHdlIHZpZXcKKyAgICogdGhhdCBhcyBhbiBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIG9mIGEgbW9yZSBnZW5lcmFsIGFsZ29yaXRobToKKyAgICogc2VhcmNoaW5nIGZvciB0aGUgcGFydGl0aW9uIHBvaW50IGluIGEgcGFydGl0aW9uZWQgcmFuZ2UuICBXZQorICAgKiBhbHNvIGFkZCBhIGd1YXJhbnRlZSB0aGF0IHRoZSBvbGQgd29yZGluZyBkaWQgbm90OiB3ZSBlbnN1cmUgdGhhdAorICAgKiB0aGUgdXBwZXIgYm91bmQgaXMgbm8gZWFybGllciB0aGFuIHRoZSBsb3dlciBib3VuZCwgdGhhdCB0aGUgcGFpcgorICAgKiByZXR1cm5lZCBieSBlcXVhbF9yYW5nZSBpcyBhIHZhbGlkIHJhbmdlLCBhbmQgdGhhdCB0aGUgZmlyc3QgcGFydAorICAgKiBvZiB0aGF0IHBhaXIgaXMgdGhlIGxvd2VyIGJvdW5kLjwvZW0+CisgICAqCisgICAqIFRoZSBhY3R1YWwgZWZmZWN0IG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBpcyB0aGF0IGEgY29tcGFyaXNvbgorICAgKiBmdW5jdG9yIHBhc3NlZCBieSB0aGUgdXNlciBkb2Vzbid0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gaW5kdWNlIGEKKyAgICogc3RyaWN0IHdlYWsgb3JkZXJpbmcgcmVsYXRpb24uICBSYXRoZXIsIGl0IHBhcnRpdGlvbnMgdGhlIHJhbmdlLgorICAgKi8KKworICAvLyBhZGphY2VudF9maW5kCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBib29sCisgICAgYWxsX29mKF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgYm9vbAorICAgIGFueV9vZihfSUl0ZXIsIF9JSXRlciwgX1ByZWRpY2F0ZSk7CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBib29sIAorICAgIGJpbmFyeV9zZWFyY2goX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBib29sIAorICAgIGJpbmFyeV9zZWFyY2goX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIgCisgICAgY29weShfSUl0ZXIsIF9JSXRlciwgX09JdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXIxLCB0eXBlbmFtZSBfQkl0ZXIyPgorICAgIF9CSXRlcjIKKyAgICBjb3B5X2JhY2t3YXJkKF9CSXRlcjEsIF9CSXRlcjEsIF9CSXRlcjIpOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT0l0ZXIKKyAgICBjb3B5X2lmKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICBjb3B5X24oX0lJdGVyLCBfU2l6ZSwgX09JdGVyKTsKKyNlbmRpZgorCisgIC8vIGNvdW50CisgIC8vIGNvdW50X2lmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgcGFpcjxfRkl0ZXIsIF9GSXRlcj4KKyAgICBlcXVhbF9yYW5nZShfRkl0ZXIsIF9GSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHBhaXI8X0ZJdGVyLCBfRkl0ZXI+CisgICAgZXF1YWxfcmFuZ2UoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkIAorICAgIGZpbGwoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICBfT0l0ZXIKKyAgICBmaWxsX24oX09JdGVyLCBfU2l6ZSwgY29uc3QgX1RwJik7CisKKyAgLy8gZmluZAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcjEsIHR5cGVuYW1lIF9GSXRlcjI+CisgICAgX0ZJdGVyMQorICAgIGZpbmRfZW5kKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcjEsIHR5cGVuYW1lIF9GSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZJdGVyMQorICAgIGZpbmRfZW5kKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIsIF9CaW5hcnlQcmVkaWNhdGUpOworCisgIC8vIGZpbmRfZmlyc3Rfb2YKKyAgLy8gZmluZF9pZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0lJdGVyCisgICAgZmluZF9pZl9ub3QoX0lJdGVyLCBfSUl0ZXIsIF9QcmVkaWNhdGUpOworI2VuZGlmCisKKyAgLy8gZm9yX2VhY2gKKyAgLy8gZ2VuZXJhdGUKKyAgLy8gZ2VuZXJhdGVfbgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjI+CisgICAgYm9vbCAKKyAgICBpbmNsdWRlcyhfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBib29sIAorICAgIGluY2x1ZGVzKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXI+CisgICAgdm9pZCAKKyAgICBpbnBsYWNlX21lcmdlKF9CSXRlciwgX0JJdGVyLCBfQkl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZCAKKyAgICBpbnBsYWNlX21lcmdlKF9CSXRlciwgX0JJdGVyLCBfQkl0ZXIsIF9Db21wYXJlKTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICBib29sIAorICAgIGlzX2hlYXAoX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgYm9vbCAKKyAgICBpc19oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIF9SQUl0ZXIgCisgICAgaXNfaGVhcF91bnRpbChfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyIAorICAgIGlzX2hlYXBfdW50aWwoX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBib29sCisgICAgaXNfcGFydGl0aW9uZWQoX0lJdGVyLCBfSUl0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcjEsIHR5cGVuYW1lIF9GSXRlcjI+CisgICAgYm9vbAorICAgIGlzX3Blcm11dGF0aW9uKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcjEsIHR5cGVuYW1lIF9GSXRlcjIsCisJICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBib29sCisgICAgaXNfcGVybXV0YXRpb24oX0ZJdGVyMSwgX0ZJdGVyMSwgX0ZJdGVyMiwgX0JpbmFyeVByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIGJvb2wgCisgICAgaXNfc29ydGVkKF9GSXRlciwgX0ZJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wgCisgICAgaXNfc29ydGVkKF9GSXRlciwgX0ZJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlciAKKyAgICBpc19zb3J0ZWRfdW50aWwoX0ZJdGVyLCBfRkl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0ZJdGVyIAorICAgIGlzX3NvcnRlZF91bnRpbChfRkl0ZXIsIF9GSXRlciwgX0NvbXBhcmUpOworI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICB2b2lkIAorICAgIGl0ZXJfc3dhcChfRkl0ZXIxLCBfRkl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfRkl0ZXIgCisgICAgbG93ZXJfYm91bmQoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIgCisgICAgbG93ZXJfYm91bmQoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIHZvaWQgCisgICAgbWFrZV9oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQgCisgICAgbWFrZV9oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIGNvbnN0IF9UcCYgCisgICAgbWF4KGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgY29uc3QgX1RwJiAKKyAgICBtYXgoY29uc3QgX1RwJiwgY29uc3QgX1RwJiwgX0NvbXBhcmUpOworCisgIC8vIG1heF9lbGVtZW50CisgIC8vIG1lcmdlCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBjb25zdCBfVHAmIAorICAgIG1pbihjb25zdCBfVHAmLCBjb25zdCBfVHAmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNvbnN0IF9UcCYgCisgICAgbWluKGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworICAvLyBtaW5fZWxlbWVudAorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgcGFpcjxjb25zdCBfVHAmLCBjb25zdCBfVHAmPiAKKyAgICBtaW5tYXgoY29uc3QgX1RwJiwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBwYWlyPGNvbnN0IF9UcCYsIGNvbnN0IF9UcCY+CisgICAgbWlubWF4KGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXI+CisgICAgcGFpcjxfRkl0ZXIsIF9GSXRlcj4KKyAgICBtaW5tYXhfZWxlbWVudChfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBwYWlyPF9GSXRlciwgX0ZJdGVyPgorICAgIG1pbm1heF9lbGVtZW50KF9GSXRlciwgX0ZJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIG1pbihpbml0aWFsaXplcl9saXN0PF9UcD4pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1RwCisgICAgbWluKGluaXRpYWxpemVyX2xpc3Q8X1RwPiwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBtYXgoaW5pdGlhbGl6ZXJfbGlzdDxfVHA+KTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9UcAorICAgIG1heChpbml0aWFsaXplcl9saXN0PF9UcD4sIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgcGFpcjxfVHAsIF9UcD4KKyAgICBtaW5tYXgoaW5pdGlhbGl6ZXJfbGlzdDxfVHA+KTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHBhaXI8X1RwLCBfVHA+CisgICAgbWlubWF4KGluaXRpYWxpemVyX2xpc3Q8X1RwPiwgX0NvbXBhcmUpOworI2VuZGlmCisKKyAgLy8gbWlzbWF0Y2gKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXI+CisgICAgYm9vbCAKKyAgICBuZXh0X3Blcm11dGF0aW9uKF9CSXRlciwgX0JJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wgCisgICAgbmV4dF9wZXJtdXRhdGlvbihfQkl0ZXIsIF9CSXRlciwgX0NvbXBhcmUpOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgYm9vbAorICAgIG5vbmVfb2YoX0lJdGVyLCBfSUl0ZXIsIF9QcmVkaWNhdGUpOworI2VuZGlmCisKKyAgLy8gbnRoX2VsZW1lbnQKKyAgLy8gcGFydGlhbF9zb3J0CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUkFJdGVyPgorICAgIF9SQUl0ZXIKKyAgICBwYXJ0aWFsX3NvcnRfY29weShfSUl0ZXIsIF9JSXRlciwgX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyCisgICAgcGFydGlhbF9zb3J0X2NvcHkoX0lJdGVyLCBfSUl0ZXIsIF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICAvLyBwYXJ0aXRpb24KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIxLAorCSAgIHR5cGVuYW1lIF9PSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgcGFpcjxfT0l0ZXIxLCBfT0l0ZXIyPgorICAgIHBhcnRpdGlvbl9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIxLCBfT0l0ZXIyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0ZJdGVyCisgICAgcGFydGl0aW9uX3BvaW50KF9GSXRlciwgX0ZJdGVyLCBfUHJlZGljYXRlKTsKKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZCAKKyAgICBwb3BfaGVhcChfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkIAorICAgIHBvcF9oZWFwKF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXI+CisgICAgYm9vbCAKKyAgICBwcmV2X3Blcm11dGF0aW9uKF9CSXRlciwgX0JJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wgCisgICAgcHJldl9wZXJtdXRhdGlvbihfQkl0ZXIsIF9CSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZCAKKyAgICBwdXNoX2hlYXAoX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZCAKKyAgICBwdXNoX2hlYXAoX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUpOworCisgIC8vIHJhbmRvbV9zaHVmZmxlCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgX0ZJdGVyIAorICAgIHJlbW92ZShfRkl0ZXIsIF9GSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9GSXRlciAKKyAgICByZW1vdmVfaWYoX0ZJdGVyLCBfRkl0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgX09JdGVyIAorICAgIHJlbW92ZV9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9PSXRlciAKKyAgICByZW1vdmVfY29weV9pZihfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfUHJlZGljYXRlKTsKKworICAvLyByZXBsYWNlCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfT0l0ZXIgCisgICAgcmVwbGFjZV9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KKyAgICBfT0l0ZXIgCisgICAgcmVwbGFjZV9jb3B5X2lmKF9JdGVyLCBfSXRlciwgX09JdGVyLCBfUHJlZGljYXRlLCBjb25zdCBfVHAmKTsKKworICAvLyByZXBsYWNlX2lmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyPgorICAgIHZvaWQgCisgICAgcmV2ZXJzZShfQkl0ZXIsIF9CSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIHJldmVyc2VfY29weShfQkl0ZXIsIF9CSXRlciwgX09JdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXI+CisgICAgdm9pZCAKKyAgICByb3RhdGUoX0ZJdGVyLCBfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIHJvdGF0ZV9jb3B5KF9GSXRlciwgX0ZJdGVyLCBfRkl0ZXIsIF9PSXRlcik7CisKKyAgLy8gc2VhcmNoCisgIC8vIHNlYXJjaF9uCisgIC8vIHNldF9kaWZmZXJlbmNlCisgIC8vIHNldF9pbnRlcnNlY3Rpb24KKyAgLy8gc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlCisgIC8vIHNldF91bmlvbgorCisjaWYgKF9fY3BsdXNwbHVzID49IDIwMTEwM0wpICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfVUdlbmVyYXRvcj4KKyAgICB2b2lkCisgICAgc2h1ZmZsZShfUkFJdGVyLCBfUkFJdGVyLCBfVUdlbmVyYXRvciYmKTsKKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZCAKKyAgICBzb3J0X2hlYXAoX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZCAKKyAgICBzb3J0X2hlYXAoX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfQkl0ZXIgCisgICAgc3RhYmxlX3BhcnRpdGlvbihfQkl0ZXIsIF9CSXRlciwgX1ByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICB2b2lkIAorICAgIHN3YXAoX1RwJiwgX1RwJikKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgbm9leGNlcHQoX19hbmRfPGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UcD4sCisJICAgICAgICAgICAgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8X1RwPj46OnZhbHVlKQorI2VuZGlmCisgICAgOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc2l6ZV90IF9ObT4KKyAgICB2b2lkCisgICAgc3dhcChfVHAgKCZfX2EpW19ObV0sIF9UcCAoJl9fYilbX05tXSkKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgbm9leGNlcHQobm9leGNlcHQoc3dhcCgqX19hLCAqX19iKSkpCisjZW5kaWYKKyAgICA7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICBfRkl0ZXIyIAorICAgIHN3YXBfcmFuZ2VzKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIpOworCisgIC8vIHRyYW5zZm9ybQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcj4KKyAgICBfRkl0ZXIgCisgICAgdW5pcXVlKF9GSXRlciwgX0ZJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZJdGVyIAorICAgIHVuaXF1ZShfRkl0ZXIsIF9GSXRlciwgX0JpbmFyeVByZWRpY2F0ZSk7CisKKyAgLy8gdW5pcXVlX2NvcHkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfRkl0ZXIgCisgICAgdXBwZXJfYm91bmQoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIgCisgICAgdXBwZXJfYm91bmQoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYsIF9Db21wYXJlKTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlciAKKyAgICBhZGphY2VudF9maW5kKF9GSXRlciwgX0ZJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZJdGVyIAorICAgIGFkamFjZW50X2ZpbmQoX0ZJdGVyLCBfRkl0ZXIsIF9CaW5hcnlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudChfSUl0ZXIsIF9JSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudF9pZihfSUl0ZXIsIF9JSXRlciwgX1ByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMj4KKyAgICBib29sIAorICAgIGVxdWFsKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgYm9vbCAKKyAgICBlcXVhbChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfQmluYXJ5UHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfSUl0ZXIgCisgICAgZmluZChfSUl0ZXIsIF9JSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICBfRkl0ZXIxCisgICAgZmluZF9maXJzdF9vZihfRkl0ZXIxLCBfRkl0ZXIxLCBfRkl0ZXIyLCBfRkl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIxLCB0eXBlbmFtZSBfRkl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9GSXRlcjEKKyAgICBmaW5kX2ZpcnN0X29mKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIsIF9CaW5hcnlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfSUl0ZXIKKyAgICBmaW5kX2lmKF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9GdW5jdD4KKyAgICBfRnVuY3QgCisgICAgZm9yX2VhY2goX0lJdGVyLCBfSUl0ZXIsIF9GdW5jdCk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIHZvaWQgCisgICAgZ2VuZXJhdGUoX0ZJdGVyLCBfRkl0ZXIsIF9HZW5lcmF0b3IpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CisgICAgX09JdGVyCisgICAgZ2VuZXJhdGVfbihfT0l0ZXIsIF9TaXplLCBfR2VuZXJhdG9yKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIGJvb2wgCisgICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgYm9vbCAKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlciAKKyAgICBtYXhfZWxlbWVudChfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIgCisgICAgbWF4X2VsZW1lbnQoX0ZJdGVyLCBfRkl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIG1lcmdlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyLCAKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfT0l0ZXIgCisgICAgbWVyZ2UoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlciAKKyAgICBtaW5fZWxlbWVudChfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIgCisgICAgbWluX2VsZW1lbnQoX0ZJdGVyLCBfRkl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIHBhaXI8X0lJdGVyMSwgX0lJdGVyMj4KKyAgICBtaXNtYXRjaChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIHBhaXI8X0lJdGVyMSwgX0lJdGVyMj4KKyAgICBtaXNtYXRjaChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfQmluYXJ5UHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIHZvaWQgCisgICAgbnRoX2VsZW1lbnQoX1JBSXRlciwgX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZCAKKyAgICBudGhfZWxlbWVudChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICB2b2lkIAorICAgIHBhcnRpYWxfc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkIAorICAgIHBhcnRpYWxfc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9CSXRlciAKKyAgICBwYXJ0aXRpb24oX0JJdGVyLCBfQkl0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZCAKKyAgICByYW5kb21fc2h1ZmZsZShfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIHZvaWQgCisgICAgcmFuZG9tX3NodWZmbGUoX1JBSXRlciwgX1JBSXRlciwKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJCSAgIF9HZW5lcmF0b3ImJik7CisjZWxzZQorCQkgICBfR2VuZXJhdG9yJik7CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkIAorICAgIHJlcGxhY2UoX0ZJdGVyLCBfRkl0ZXIsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQgCisgICAgcmVwbGFjZV9pZihfRkl0ZXIsIF9GSXRlciwgX1ByZWRpY2F0ZSwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICBfRkl0ZXIxIAorICAgIHNlYXJjaChfRkl0ZXIxLCBfRkl0ZXIxLCBfRkl0ZXIyLCBfRkl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIxLCB0eXBlbmFtZSBfRkl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9GSXRlcjEgCisgICAgc2VhcmNoKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIsIF9CaW5hcnlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICBfRkl0ZXIgCisgICAgc2VhcmNoX24oX0ZJdGVyLCBfRkl0ZXIsIF9TaXplLCBjb25zdCBfVHAmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHAsIAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZJdGVyIAorICAgIHNlYXJjaF9uKF9GSXRlciwgX0ZJdGVyLCBfU2l6ZSwgY29uc3QgX1RwJiwgX0JpbmFyeVByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyPgorICAgIF9PSXRlciAKKyAgICBzZXRfZGlmZmVyZW5jZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwgCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX09JdGVyIAorICAgIHNldF9kaWZmZXJlbmNlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIgCisgICAgc2V0X2ludGVyc2VjdGlvbihfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfT0l0ZXIgCisgICAgc2V0X2ludGVyc2VjdGlvbihfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyLCAKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfT0l0ZXIKKyAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgCisJCQkgICAgIF9PSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIgCisgICAgc2V0X3VuaW9uKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PSXRlciAKKyAgICBzZXRfdW5pb24oX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICB2b2lkIAorICAgIHNvcnQoX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZCAKKyAgICBzb3J0KF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIHZvaWQgCisgICAgc3RhYmxlX3NvcnQoX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZCAKKyAgICBzdGFibGVfc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KKyAgICBfT0l0ZXIgCisgICAgdHJhbnNmb3JtKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9VbmFyeU9wZXJhdGlvbik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyLCAKKwkgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgorICAgIF9PSXRlciAKKyAgICB0cmFuc2Zvcm0oX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX09JdGVyLCBfQmluYXJ5T3BlcmF0aW9uKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIgCisgICAgdW5pcXVlX2NvcHkoX0lJdGVyLCBfSUl0ZXIsIF9PSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX09JdGVyIAorICAgIHVuaXF1ZV9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9CaW5hcnlQcmVkaWNhdGUpOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjaWZkZWYgX0dMSUJDWFhfUEFSQUxMRUwKKyMgaW5jbHVkZSA8cGFyYWxsZWwvYWxnb3JpdGhtZndkLmg+CisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9hbGxvY190cmFpdHMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9hbGxvY190cmFpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2VhMTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2FsbG9jX3RyYWl0cy5oCkBAIC0wLDAgKzEsNTY2IEBACisvLyBBbGxvY2F0b3IgdHJhaXRzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2FsbG9jX3RyYWl0cy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7bWVtb3J5fQorICovCisKKyNpZm5kZWYgX0FMTE9DX1RSQUlUU19ICisjZGVmaW5lIF9BTExPQ19UUkFJVFNfSCAxCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKKyNpbmNsdWRlIDxiaXRzL21lbW9yeWZ3ZC5oPgorI2luY2x1ZGUgPGJpdHMvcHRyX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC9udW1lcmljX3RyYWl0cy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX19hbGxvY3RyX3JlYmluZF9oZWxwZXIKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyLCB0eXBlbmFtZSBfVHAyPgorCXN0YXRpYyBjb25zdGV4cHIgYm9vbAorICAgICAgIAlfU19jaGsodHlwZW5hbWUgX0FsbG9jMjo6dGVtcGxhdGUgcmViaW5kPF9UcDI+OjpvdGhlciopCisJeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbAorICAgICAgIAlfU19jaGsoLi4uKQorICAgICAgIAl7IHJldHVybiBmYWxzZTsgfQorCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZSA9IF9TX2NoazxfQWxsb2MsIF9UcD4obnVsbHB0cik7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdCBib29sIF9fYWxsb2N0cl9yZWJpbmRfaGVscGVyPF9BbGxvYywgX1RwPjo6X192YWx1ZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgYm9vbCA9IF9fYWxsb2N0cl9yZWJpbmRfaGVscGVyPF9BbGxvYywgX1RwPjo6X192YWx1ZT4KKyAgICBzdHJ1Y3QgX19hbGxvY3RyX3JlYmluZDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hbGxvY3RyX3JlYmluZDxfQWxsb2MsIF9UcCwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4gY2xhc3MgX0FsbG9jLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgICB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX2FsbG9jdHJfcmViaW5kPF9BbGxvYzxfVXAsIF9BcmdzLi4uPiwgX1RwLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9BbGxvYzxfVHAsIF9BcmdzLi4uPiBfX3R5cGU7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmICBVbmlmb3JtIGludGVyZmFjZSB0byBhbGwgYWxsb2NhdG9yIHR5cGVzLgorICAgKiBAaW5ncm91cCBhbGxvY2F0b3JzCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgYWxsb2NhdG9yX3RyYWl0cworICAgIHsKKyAgICAgIC8vLyBUaGUgYWxsb2NhdG9yIHR5cGUKKyAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOworICAgICAgLy8vIFRoZSBhbGxvY2F0ZWQgdHlwZQorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworI2RlZmluZSBfR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShfTlRZUEUsIF9BTFQpIFwKKyAgcHJpdmF0ZTogXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IFwKKyAgICBzdGF0aWMgdHlwZW5hbWUgX1RwOjpfTlRZUEUgX1NfIyNfTlRZUEUjI19oZWxwZXIoX1RwKik7IFwKKyAgc3RhdGljIF9BTFQgX1NfIyNfTlRZUEUjI19oZWxwZXIoLi4uKTsgXAorICAgIHR5cGVkZWYgZGVjbHR5cGUoX1NfIyNfTlRZUEUjI19oZWxwZXIoKF9BbGxvYyopMCkpIF9fIyNfTlRZUEU7IFwKKyAgcHVibGljOgorCitfR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShwb2ludGVyLCB2YWx1ZV90eXBlKikKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgICBUaGUgYWxsb2NhdG9yJ3MgcG9pbnRlciB0eXBlLgorICAgICAgICoKKyAgICAgICAqIEBjIEFsbG9jOjpwb2ludGVyIGlmIHRoYXQgdHlwZSBleGlzdHMsIG90aGVyd2lzZSBAYyB2YWx1ZV90eXBlKgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX19wb2ludGVyIHBvaW50ZXI7CisKK19HTElCQ1hYX0FMTE9DX1RSX05FU1RFRF9UWVBFKGNvbnN0X3BvaW50ZXIsCisgIHR5cGVuYW1lIHBvaW50ZXJfdHJhaXRzPHBvaW50ZXI+Ojp0ZW1wbGF0ZSByZWJpbmQ8Y29uc3QgdmFsdWVfdHlwZT4pCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmICAgVGhlIGFsbG9jYXRvcidzIGNvbnN0IHBvaW50ZXIgdHlwZS4KKyAgICAgICAqCisgICAgICAgKiBAYyBBbGxvYzo6Y29uc3RfcG9pbnRlciBpZiB0aGF0IHR5cGUgZXhpc3RzLCBvdGhlcndpc2UKKyAgICAgICAqIDx0dD4gcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OnJlYmluZDxjb25zdCB2YWx1ZV90eXBlPiA8L3R0PgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX19jb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisKK19HTElCQ1hYX0FMTE9DX1RSX05FU1RFRF9UWVBFKHZvaWRfcG9pbnRlciwKKyAgdHlwZW5hbWUgcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OnRlbXBsYXRlIHJlYmluZDx2b2lkPikKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgICBUaGUgYWxsb2NhdG9yJ3Mgdm9pZCBwb2ludGVyIHR5cGUuCisgICAgICAgKgorICAgICAgICogQGMgQWxsb2M6OnZvaWRfcG9pbnRlciBpZiB0aGF0IHR5cGUgZXhpc3RzLCBvdGhlcndpc2UKKyAgICAgICAqIDx0dD4gcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OnJlYmluZDx2b2lkPiA8L3R0PgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX192b2lkX3BvaW50ZXIgdm9pZF9wb2ludGVyOworCitfR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShjb25zdF92b2lkX3BvaW50ZXIsCisgIHR5cGVuYW1lIHBvaW50ZXJfdHJhaXRzPHBvaW50ZXI+Ojp0ZW1wbGF0ZSByZWJpbmQ8Y29uc3Qgdm9pZD4pCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmICAgVGhlIGFsbG9jYXRvcidzIGNvbnN0IHZvaWQgcG9pbnRlciB0eXBlLgorICAgICAgICoKKyAgICAgICAqIEBjIEFsbG9jOjpjb25zdF92b2lkX3BvaW50ZXIgaWYgdGhhdCB0eXBlIGV4aXN0cywgb3RoZXJ3aXNlCisgICAgICAgKiA8dHQ+IHBvaW50ZXJfdHJhaXRzPHBvaW50ZXI+OjpyZWJpbmQ8Y29uc3Qgdm9pZD4gPC90dD4KKyAgICAgICovCisgICAgICB0eXBlZGVmIF9fY29uc3Rfdm9pZF9wb2ludGVyIGNvbnN0X3ZvaWRfcG9pbnRlcjsKKworX0dMSUJDWFhfQUxMT0NfVFJfTkVTVEVEX1RZUEUoZGlmZmVyZW5jZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OmRpZmZlcmVuY2VfdHlwZSkKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgICBUaGUgYWxsb2NhdG9yJ3MgZGlmZmVyZW5jZSB0eXBlCisgICAgICAgKgorICAgICAgICogQGMgQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBpZiB0aGF0IHR5cGUgZXhpc3RzLCBvdGhlcndpc2UKKyAgICAgICAqIDx0dD4gcG9pbnRlcl90cmFpdHM8cG9pbnRlcj46OmRpZmZlcmVuY2VfdHlwZSA8L3R0PgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX19kaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCitfR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShzaXplX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBtYWtlX3Vuc2lnbmVkPGRpZmZlcmVuY2VfdHlwZT46OnR5cGUpCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmICAgVGhlIGFsbG9jYXRvcidzIHNpemUgdHlwZQorICAgICAgICoKKyAgICAgICAqIEBjIEFsbG9jOjpzaXplX3R5cGUgaWYgdGhhdCB0eXBlIGV4aXN0cywgb3RoZXJ3aXNlCisgICAgICAgKiA8dHQ+IG1ha2VfdW5zaWduZWQ8ZGlmZmVyZW5jZV90eXBlPjo6dHlwZSA8L3R0PgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX19zaXplX3R5cGUgc2l6ZV90eXBlOworCitfR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShwcm9wYWdhdGVfb25fY29udGFpbmVyX2NvcHlfYXNzaWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlX3R5cGUpCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmICAgSG93IHRoZSBhbGxvY2F0b3IgaXMgcHJvcGFnYXRlZCBvbiBjb3B5IGFzc2lnbm1lbnQKKyAgICAgICAqCisgICAgICAgKiBAYyBBbGxvYzo6cHJvcGFnYXRlX29uX2NvbnRhaW5lcl9jb3B5X2Fzc2lnbm1lbnQgaWYgdGhhdCB0eXBlIGV4aXN0cywKKyAgICAgICAqIG90aGVyd2lzZSBAYyBmYWxzZV90eXBlCisgICAgICAqLworICAgICAgdHlwZWRlZiBfX3Byb3BhZ2F0ZV9vbl9jb250YWluZXJfY29weV9hc3NpZ25tZW50CisgICAgICAgCXByb3BhZ2F0ZV9vbl9jb250YWluZXJfY29weV9hc3NpZ25tZW50OworCitfR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlX3R5cGUpCisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmICAgSG93IHRoZSBhbGxvY2F0b3IgaXMgcHJvcGFnYXRlZCBvbiBtb3ZlIGFzc2lnbm1lbnQKKyAgICAgICAqCisgICAgICAgKiBAYyBBbGxvYzo6cHJvcGFnYXRlX29uX2NvbnRhaW5lcl9tb3ZlX2Fzc2lnbm1lbnQgaWYgdGhhdCB0eXBlIGV4aXN0cywKKyAgICAgICAqIG90aGVyd2lzZSBAYyBmYWxzZV90eXBlCisgICAgICAqLworICAgICAgdHlwZWRlZiBfX3Byb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50CisgICAgICAgCXByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50OworCitfR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRShwcm9wYWdhdGVfb25fY29udGFpbmVyX3N3YXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZV90eXBlKQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiAgIEhvdyB0aGUgYWxsb2NhdG9yIGlzIHByb3BhZ2F0ZWQgb24gc3dhcAorICAgICAgICoKKyAgICAgICAqIEBjIEFsbG9jOjpwcm9wYWdhdGVfb25fY29udGFpbmVyX3N3YXAgaWYgdGhhdCB0eXBlIGV4aXN0cywKKyAgICAgICAqIG90aGVyd2lzZSBAYyBmYWxzZV90eXBlCisgICAgICAqLworICAgICAgdHlwZWRlZiBfX3Byb3BhZ2F0ZV9vbl9jb250YWluZXJfc3dhcCBwcm9wYWdhdGVfb25fY29udGFpbmVyX3N3YXA7CisKKyN1bmRlZiBfR0xJQkNYWF9BTExPQ19UUl9ORVNURURfVFlQRQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHVzaW5nIHJlYmluZF9hbGxvYyA9IHR5cGVuYW1lIF9fYWxsb2N0cl9yZWJpbmQ8X0FsbG9jLCBfVHA+OjpfX3R5cGU7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHVzaW5nIHJlYmluZF90cmFpdHMgPSBhbGxvY2F0b3JfdHJhaXRzPHJlYmluZF9hbGxvYzxfVHA+PjsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorCXN0cnVjdCBfX2FsbG9jYXRlX2hlbHBlcgorCXsKKwkgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzMsCisJICAgIHR5cGVuYW1lID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9BbGxvYzMqPigpLT5hbGxvY2F0ZSgKKwkJICBzdGQ6OmRlY2x2YWw8c2l6ZV90eXBlPigpLAorCQkgIHN0ZDo6ZGVjbHZhbDxjb25zdF92b2lkX3BvaW50ZXI+KCkpKT4KKwkgICAgc3RhdGljIHRydWVfdHlwZSBfX3Rlc3QoaW50KTsKKworCSAgdGVtcGxhdGU8dHlwZW5hbWU+CisJICAgIHN0YXRpYyBmYWxzZV90eXBlIF9fdGVzdCguLi4pOworCisJICB0eXBlZGVmIGRlY2x0eXBlKF9fdGVzdDxfQWxsb2M+KDApKSB0eXBlOworCSAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0eXBlOjp2YWx1ZTsKKwl9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorCXN0YXRpYyB0eXBlbmFtZQorICAgICAgIAllbmFibGVfaWY8X19hbGxvY2F0ZV9oZWxwZXI8X0FsbG9jMj46OnZhbHVlLCBwb2ludGVyPjo6dHlwZQorICAgICAgIAlfU19hbGxvY2F0ZShfQWxsb2MyJiBfX2EsIHNpemVfdHlwZSBfX24sIGNvbnN0X3ZvaWRfcG9pbnRlciBfX2hpbnQpCisJeyByZXR1cm4gX19hLmFsbG9jYXRlKF9fbiwgX19oaW50KTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorCXN0YXRpYyB0eXBlbmFtZQorICAgICAgIAllbmFibGVfaWY8IV9fYWxsb2NhdGVfaGVscGVyPF9BbGxvYzI+Ojp2YWx1ZSwgcG9pbnRlcj46OnR5cGUKKyAgICAgICAJX1NfYWxsb2NhdGUoX0FsbG9jMiYgX19hLCBzaXplX3R5cGUgX19uLCAuLi4pCisJeyByZXR1cm4gX19hLmFsbG9jYXRlKF9fbik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlzdHJ1Y3QgX19jb25zdHJ1Y3RfaGVscGVyCisJeworCSAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMiwKKwkgICAgdHlwZW5hbWUgPSBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X0FsbG9jMio+KCktPmNvbnN0cnVjdCgKKwkJICBzdGQ6OmRlY2x2YWw8X1RwKj4oKSwgc3RkOjpkZWNsdmFsPF9BcmdzPigpLi4uKSk+CisJICAgIHN0YXRpYyB0cnVlX3R5cGUgX190ZXN0KGludCk7CisKKwkgIHRlbXBsYXRlPHR5cGVuYW1lPgorCSAgICBzdGF0aWMgZmFsc2VfdHlwZSBfX3Rlc3QoLi4uKTsKKworCSAgdHlwZWRlZiBkZWNsdHlwZShfX3Rlc3Q8X0FsbG9jPigwKSkgdHlwZTsKKwkgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHlwZTo6dmFsdWU7CisJfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGF0aWMgdHlwZW5hbWUKKyAgICAgICAJZW5hYmxlX2lmPF9fY29uc3RydWN0X2hlbHBlcjxfVHAsIF9BcmdzLi4uPjo6dmFsdWUsIHZvaWQ+Ojp0eXBlCisgICAgICAgCV9TX2NvbnN0cnVjdChfQWxsb2MmIF9fYSwgX1RwKiBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsgX19hLmNvbnN0cnVjdChfX3AsIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGF0aWMgdHlwZW5hbWUKKwllbmFibGVfaWY8X19hbmRfPF9fbm90XzxfX2NvbnN0cnVjdF9oZWxwZXI8X1RwLCBfQXJncy4uLj4+LAorCQkJIGlzX2NvbnN0cnVjdGlibGU8X1RwLCBfQXJncy4uLj4+Ojp2YWx1ZSwgdm9pZD46OnR5cGUKKyAgICAgICAJX1NfY29uc3RydWN0KF9BbGxvYyYsIF9UcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKKwl7IDo6bmV3KCh2b2lkKilfX3ApIF9UcChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKwlzdHJ1Y3QgX19kZXN0cm95X2hlbHBlcgorCXsKKwkgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzIsCisJICAgIHR5cGVuYW1lID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9BbGxvYzIqPigpLT5kZXN0cm95KAorCQkgIHN0ZDo6ZGVjbHZhbDxfVHAqPigpKSk+CisJICAgIHN0YXRpYyB0cnVlX3R5cGUgX190ZXN0KGludCk7CisKKwkgIHRlbXBsYXRlPHR5cGVuYW1lPgorCSAgICBzdGF0aWMgZmFsc2VfdHlwZSBfX3Rlc3QoLi4uKTsKKworCSAgdHlwZWRlZiBkZWNsdHlwZShfX3Rlc3Q8X0FsbG9jPigwKSkgdHlwZTsKKwkgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHlwZTo6dmFsdWU7CisJfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorCXN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19kZXN0cm95X2hlbHBlcjxfVHA+Ojp2YWx1ZSwgdm9pZD46OnR5cGUKKyAgICAgICAJX1NfZGVzdHJveShfQWxsb2MmIF9fYSwgX1RwKiBfX3ApCisJeyBfX2EuZGVzdHJveShfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKwlzdGF0aWMgdHlwZW5hbWUgZW5hYmxlX2lmPCFfX2Rlc3Ryb3lfaGVscGVyPF9UcD46OnZhbHVlLCB2b2lkPjo6dHlwZQorICAgICAgIAlfU19kZXN0cm95KF9BbGxvYyYsIF9UcCogX19wKQorCXsgX19wLT5+X1RwKCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KKwlzdHJ1Y3QgX19tYXhzaXplX2hlbHBlcgorCXsKKwkgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzMsCisJICAgIHR5cGVuYW1lID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9BbGxvYzMqPigpLT5tYXhfc2l6ZSgpKT4KKwkgICAgc3RhdGljIHRydWVfdHlwZSBfX3Rlc3QoaW50KTsKKworCSAgdGVtcGxhdGU8dHlwZW5hbWU+CisJICAgIHN0YXRpYyBmYWxzZV90eXBlIF9fdGVzdCguLi4pOworCisJICB0eXBlZGVmIGRlY2x0eXBlKF9fdGVzdDxfQWxsb2MyPigwKSkgdHlwZTsKKwkgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHlwZTo6dmFsdWU7CisJfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KKwlzdGF0aWMgdHlwZW5hbWUKKyAgICAgICAJZW5hYmxlX2lmPF9fbWF4c2l6ZV9oZWxwZXI8X0FsbG9jMj46OnZhbHVlLCBzaXplX3R5cGU+Ojp0eXBlCisgICAgICAgCV9TX21heF9zaXplKF9BbGxvYzImIF9fYSkKKwl7IHJldHVybiBfX2EubWF4X3NpemUoKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorCXN0YXRpYyB0eXBlbmFtZQorICAgICAgIAllbmFibGVfaWY8IV9fbWF4c2l6ZV9oZWxwZXI8X0FsbG9jMj46OnZhbHVlLCBzaXplX3R5cGU+Ojp0eXBlCisJX1NfbWF4X3NpemUoX0FsbG9jMiYpCisJeyByZXR1cm4gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHNpemVfdHlwZT46Ol9fbWF4OyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzI+CisJc3RydWN0IF9fc2VsZWN0X2hlbHBlcgorCXsKKwkgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzMsIHR5cGVuYW1lCisJICAgID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9BbGxvYzMqPigpCisJCS0+c2VsZWN0X29uX2NvbnRhaW5lcl9jb3B5X2NvbnN0cnVjdGlvbigpKT4KKwkgICAgc3RhdGljIHRydWVfdHlwZSBfX3Rlc3QoaW50KTsKKworCSAgdGVtcGxhdGU8dHlwZW5hbWU+CisJICAgIHN0YXRpYyBmYWxzZV90eXBlIF9fdGVzdCguLi4pOworCisJICB0eXBlZGVmIGRlY2x0eXBlKF9fdGVzdDxfQWxsb2MyPigwKSkgdHlwZTsKKwkgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHlwZTo6dmFsdWU7CisJfTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYzI+CisJc3RhdGljIHR5cGVuYW1lCisgICAgICAgCWVuYWJsZV9pZjxfX3NlbGVjdF9oZWxwZXI8X0FsbG9jMj46OnZhbHVlLCBfQWxsb2MyPjo6dHlwZQorICAgICAgIAlfU19zZWxlY3QoX0FsbG9jMiYgX19hKQorCXsgcmV0dXJuIF9fYS5zZWxlY3Rfb25fY29udGFpbmVyX2NvcHlfY29uc3RydWN0aW9uKCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KKwlzdGF0aWMgdHlwZW5hbWUKKyAgICAgICAJZW5hYmxlX2lmPCFfX3NlbGVjdF9oZWxwZXI8X0FsbG9jMj46OnZhbHVlLCBfQWxsb2MyPjo6dHlwZQorICAgICAgIAlfU19zZWxlY3QoX0FsbG9jMiYgX19hKQorCXsgcmV0dXJuIF9fYTsgfQorCisgICAgcHVibGljOgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFsbG9jYXRlIG1lbW9yeS4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19uICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWxsb2NhdGUgc3BhY2UgZm9yLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyBhLmFsbG9jYXRlKG4pCisgICAgICAqLworICAgICAgc3RhdGljIHBvaW50ZXIKKyAgICAgIGFsbG9jYXRlKF9BbGxvYyYgX19hLCBzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gX19hLmFsbG9jYXRlKF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBbGxvY2F0ZSBtZW1vcnkuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFsbG9jYXRlIHNwYWNlIGZvci4KKyAgICAgICAqICBAcGFyYW0gIF9faGludCBBaWQgdG8gbG9jYWxpdHkuCisgICAgICAgKiAgQHJldHVybiBNZW1vcnkgb2Ygc3VpdGFibGUgc2l6ZSBhbmQgYWxpZ25tZW50IGZvciBAYSBuIG9iamVjdHMKKyAgICAgICAqICAgICAgICAgIG9mIHR5cGUgQGMgdmFsdWVfdHlwZQorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIDx0dD4gYS5hbGxvY2F0ZShuLCBoaW50KSA8L3R0PiBpZiB0aGF0IGV4cHJlc3Npb24gaXMKKyAgICAgICAqICB3ZWxsLWZvcm1lZCwgb3RoZXJ3aXNlIHJldHVybnMgQGMgYS5hbGxvY2F0ZShuKQorICAgICAgKi8KKyAgICAgIHN0YXRpYyBwb2ludGVyCisgICAgICBhbGxvY2F0ZShfQWxsb2MmIF9fYSwgc2l6ZV90eXBlIF9fbiwgY29uc3Rfdm9pZF9wb2ludGVyIF9faGludCkKKyAgICAgIHsgcmV0dXJuIF9TX2FsbG9jYXRlKF9fYSwgX19uLCBfX2hpbnQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVhbGxvY2F0ZSBtZW1vcnkuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fcCAgUG9pbnRlciB0byB0aGUgbWVtb3J5IHRvIGRlYWxsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtICBfX24gIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBzcGFjZSB3YXMgYWxsb2NhdGVkIGZvci4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgPHR0PiBhLmRlYWxsb2NhdGUocCwgbikgPC90dD4KKyAgICAgICovCisgICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9BbGxvYyYgX19hLCBwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgX19hLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IGFuIG9iamVjdCBvZiB0eXBlIEBhIF9UcAorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIFBvaW50ZXIgdG8gbWVtb3J5IG9mIHN1aXRhYmxlIHNpemUgYW5kIGFsaWdubWVudCBmb3IgVHAKKyAgICAgICAqICBAcGFyYW0gIF9fYXJncyBDb25zdHJ1Y3RvciBhcmd1bWVudHMuCisgICAgICAgKgorICAgICAgICogIENhbGxzIDx0dD4gX19hLmNvbnN0cnVjdChfX3AsIHN0ZDo6Zm9yd2FyZDxBcmdzPihfX2FyZ3MpLi4uKSA8L3R0PgorICAgICAgICogIGlmIHRoYXQgZXhwcmVzc2lvbiBpcyB3ZWxsLWZvcm1lZCwgb3RoZXJ3aXNlIHVzZXMgcGxhY2VtZW50LW5ldworICAgICAgICogIHRvIGNvbnN0cnVjdCBhbiBvYmplY3Qgb2YgdHlwZSBAYSBfVHAgYXQgbG9jYXRpb24gQGEgX19wIGZyb20gdGhlCisgICAgICAgKiAgYXJndW1lbnRzIEBhIF9fYXJncy4uLgorICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJc3RhdGljIGF1dG8gY29uc3RydWN0KF9BbGxvYyYgX19hLCBfVHAqIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJLT4gZGVjbHR5cGUoX1NfY29uc3RydWN0KF9fYSwgX19wLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pKQorCXsgX1NfY29uc3RydWN0KF9fYSwgX19wLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVzdHJveSBhbiBvYmplY3Qgb2YgdHlwZSBAYSBfVHAKKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19wICBQb2ludGVyIHRvIHRoZSBvYmplY3QgdG8gZGVzdHJveQorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyBfX2EuZGVzdHJveShfX3ApIGlmIHRoYXQgZXhwcmVzc2lvbiBpcyB3ZWxsLWZvcm1lZCwKKyAgICAgICAqICBvdGhlcndpc2UgY2FsbHMgQGMgX19wLT5+X1RwKCkKKyAgICAgICovCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorCXN0YXRpYyB2b2lkIGRlc3Ryb3koX0FsbG9jJiBfX2EsIF9UcCogX19wKQorCXsgX1NfZGVzdHJveShfX2EsIF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgYWxsb2NhdGlvbiBzaXplCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvci4KKyAgICAgICAqICBAcmV0dXJuIEBjIF9fYS5tYXhfc2l6ZSgpIG9yIEBjIG51bWVyaWNfbGltaXRzPHNpemVfdHlwZT46Om1heCgpCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgQGMgX19hLm1heF9zaXplKCkgaWYgdGhhdCBleHByZXNzaW9uIGlzIHdlbGwtZm9ybWVkLAorICAgICAgICogIG90aGVyd2lzZSByZXR1cm5zIEBjIG51bWVyaWNfbGltaXRzPHNpemVfdHlwZT46Om1heCgpCisgICAgICAqLworICAgICAgc3RhdGljIHNpemVfdHlwZSBtYXhfc2l6ZShjb25zdCBfQWxsb2MmIF9fYSkKKyAgICAgIHsgcmV0dXJuIF9TX21heF9zaXplKF9fYSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPYnRhaW4gYW4gYWxsb2NhdG9yIHRvIHVzZSB3aGVuIGNvcHlpbmcgYSBjb250YWluZXIuCisgICAgICAgKiAgQHBhcmFtICBfX3JocyAgQW4gYWxsb2NhdG9yLgorICAgICAgICogIEByZXR1cm4gQGMgX19yaHMuc2VsZWN0X29uX2NvbnRhaW5lcl9jb3B5X2NvbnN0cnVjdGlvbigpIG9yIEBhIF9fcmhzCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgQGMgX19yaHMuc2VsZWN0X29uX2NvbnRhaW5lcl9jb3B5X2NvbnN0cnVjdGlvbigpIGlmIHRoYXQKKyAgICAgICAqICBleHByZXNzaW9uIGlzIHdlbGwtZm9ybWVkLCBvdGhlcndpc2UgcmV0dXJucyBAYSBfX3JocworICAgICAgKi8KKyAgICAgIHN0YXRpYyBfQWxsb2MKKyAgICAgIHNlbGVjdF9vbl9jb250YWluZXJfY29weV9jb25zdHJ1Y3Rpb24oY29uc3QgX0FsbG9jJiBfX3JocykKKyAgICAgIHsgcmV0dXJuIF9TX3NlbGVjdChfX3Jocyk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KKyAgICBjb25zdCBib29sIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPjo6X19hbGxvY2F0ZV9oZWxwZXI8X0FsbG9jMj46OnZhbHVlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBjb25zdCBib29sCisgICAgYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+OjpfX2NvbnN0cnVjdF9oZWxwZXI8X1RwLCBfQXJncy4uLj46OnZhbHVlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0IGJvb2wgYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+OjpfX2Rlc3Ryb3lfaGVscGVyPF9UcD46OnZhbHVlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMj4KKyAgICBjb25zdCBib29sIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPjo6X19tYXhzaXplX2hlbHBlcjxfQWxsb2MyPjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MyPgorICAgIGNvbnN0IGJvb2wgYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+OjpfX3NlbGVjdF9oZWxwZXI8X0FsbG9jMj46OnZhbHVlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fZG9fYWxsb2Nfb25fY29weShfQWxsb2MmIF9fb25lLCBjb25zdCBfQWxsb2MmIF9fdHdvLCB0cnVlX3R5cGUpCisgICAgeyBfX29uZSA9IF9fdHdvOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgX19kb19hbGxvY19vbl9jb3B5KF9BbGxvYyYsIGNvbnN0IF9BbGxvYyYsIGZhbHNlX3R5cGUpCisgICAgeyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkIF9fYWxsb2Nfb25fY29weShfQWxsb2MmIF9fb25lLCBjb25zdCBfQWxsb2MmIF9fdHdvKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+IF9fdHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0czo6cHJvcGFnYXRlX29uX2NvbnRhaW5lcl9jb3B5X2Fzc2lnbm1lbnQgX19wb2NjYTsKKyAgICAgIF9fZG9fYWxsb2Nfb25fY29weShfX29uZSwgX190d28sIF9fcG9jY2EoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgX0FsbG9jIF9fYWxsb2Nfb25fY29weShjb25zdCBfQWxsb2MmIF9fYSkKKyAgICB7CisgICAgICB0eXBlZGVmIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPiBfX3RyYWl0czsKKyAgICAgIHJldHVybiBfX3RyYWl0czo6c2VsZWN0X29uX2NvbnRhaW5lcl9jb3B5X2NvbnN0cnVjdGlvbihfX2EpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQgX19kb19hbGxvY19vbl9tb3ZlKF9BbGxvYyYgX19vbmUsIF9BbGxvYyYgX190d28sIHRydWVfdHlwZSkKKyAgICB7IF9fb25lID0gc3RkOjptb3ZlKF9fdHdvKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZCBfX2RvX2FsbG9jX29uX21vdmUoX0FsbG9jJiwgX0FsbG9jJiwgZmFsc2VfdHlwZSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQgX19hbGxvY19vbl9tb3ZlKF9BbGxvYyYgX19vbmUsIF9BbGxvYyYgX190d28pCisgICAgeworICAgICAgdHlwZWRlZiBhbGxvY2F0b3JfdHJhaXRzPF9BbGxvYz4gX190cmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzOjpwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudCBfX3BvY21hOworICAgICAgX19kb19hbGxvY19vbl9tb3ZlKF9fb25lLCBfX3R3bywgX19wb2NtYSgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkIF9fZG9fYWxsb2Nfb25fc3dhcChfQWxsb2MmIF9fb25lLCBfQWxsb2MmIF9fdHdvLCB0cnVlX3R5cGUpCisgICAgeworICAgICAgdXNpbmcgc3RkOjpzd2FwOworICAgICAgc3dhcChfX29uZSwgX190d28pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQgX19kb19hbGxvY19vbl9zd2FwKF9BbGxvYyYsIF9BbGxvYyYsIGZhbHNlX3R5cGUpCisgICAgeyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkIF9fYWxsb2Nfb25fc3dhcChfQWxsb2MmIF9fb25lLCBfQWxsb2MmIF9fdHdvKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+IF9fdHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0czo6cHJvcGFnYXRlX29uX2NvbnRhaW5lcl9zd2FwIF9fcG9jczsKKyAgICAgIF9fZG9fYWxsb2Nfb25fc3dhcChfX29uZSwgX190d28sIF9fcG9jcygpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIF9faXNfY29weV9pbnNlcnRhYmxlX2ltcGwKKyAgICB7CisgICAgICB0eXBlZGVmIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPiBfVHJhaXRzOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAsIHR5cGVuYW1lCisJICAgICAgID0gZGVjbHR5cGUoX1RyYWl0czo6Y29uc3RydWN0KHN0ZDo6ZGVjbHZhbDxfQWxsb2MmPigpLAorCQkJCQkgICAgIHN0ZDo6ZGVjbHZhbDxfVXAqPigpLAorCQkJCQkgICAgIHN0ZDo6ZGVjbHZhbDxjb25zdCBfVXAmPigpKSk+CisJc3RhdGljIHRydWVfdHlwZQorCV9NX3NlbGVjdChpbnQpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisJc3RhdGljIGZhbHNlX3R5cGUKKwlfTV9zZWxlY3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgZGVjbHR5cGUoX01fc2VsZWN0PHR5cGVuYW1lIF9BbGxvYzo6dmFsdWVfdHlwZT4oMCkpIHR5cGU7CisgICAgfTsKKworICAvLyB0cnVlIGlmIF9BbGxvYzo6dmFsdWVfdHlwZSBpcyBDb3B5SW5zZXJ0YWJsZSBpbnRvIGNvbnRhaW5lcnMgdXNpbmcgX0FsbG9jCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX19pc19jb3B5X2luc2VydGFibGUKKyAgICA6IF9faXNfY29weV9pbnNlcnRhYmxlX2ltcGw8X0FsbG9jPjo6dHlwZQorICAgIHsgfTsKKworICAvLyBzdGQ6OmFsbG9jYXRvcjxfVHA+IGp1c3QgcmVxdWlyZXMgQ29weUNvbnN0cnVjdGlibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2NvcHlfaW5zZXJ0YWJsZTxhbGxvY2F0b3I8X1RwPj4KKyAgICA6IGlzX2NvcHlfY29uc3RydWN0aWJsZTxfVHA+CisgICAgeyB9OworCisgIC8vIFVzZWQgdG8gYWxsb3cgY29weSBjb25zdHJ1Y3Rpb24gb2YgdW5vcmRlcmVkIGNvbnRhaW5lcnMKKyAgdGVtcGxhdGU8Ym9vbD4gc3RydWN0IF9fYWxsb3dfY29weV9jb25zIHsgfTsKKworICAvLyBVc2VkIHRvIGRlbGV0ZSBjb3B5IGNvbnN0cnVjdG9yIG9mIHVub3JkZXJlZCBjb250YWluZXJzCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19hbGxvd19jb3B5X2NvbnM8ZmFsc2U+CisgICAgeworICAgICAgX19hbGxvd19jb3B5X2NvbnMoKSA9IGRlZmF1bHQ7CisgICAgICBfX2FsbG93X2NvcHlfY29ucyhjb25zdCBfX2FsbG93X2NvcHlfY29ucyYpID0gZGVsZXRlOworICAgICAgX19hbGxvd19jb3B5X2NvbnMoX19hbGxvd19jb3B5X2NvbnMmJikgPSBkZWZhdWx0OworICAgICAgX19hbGxvd19jb3B5X2NvbnMmIG9wZXJhdG9yPShjb25zdCBfX2FsbG93X2NvcHlfY29ucyYpID0gZGVmYXVsdDsKKyAgICAgIF9fYWxsb3dfY29weV9jb25zJiBvcGVyYXRvcj0oX19hbGxvd19jb3B5X2NvbnMmJikgPSBkZWZhdWx0OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHVzaW5nIF9fY2hlY2tfY29weV9jb25zdHJ1Y3RpYmxlCisgICAgICA9IF9fYWxsb3dfY29weV9jb25zPF9faXNfY29weV9pbnNlcnRhYmxlPF9BbGxvYz46OnZhbHVlPjsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9hbGxvY2F0b3IuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGRmMjQyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2FsbG9jYXRvci5oCkBAIC0wLDAgKzEsMjIxIEBACisvLyBBbGxvY2F0b3JzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvYWxsb2NhdG9yLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttZW1vcnl9CisgKi8KKworI2lmbmRlZiBfQUxMT0NBVE9SX0gKKyNkZWZpbmUgX0FMTE9DQVRPUl9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrYWxsb2NhdG9yLmg+IC8vIERlZmluZSB0aGUgYmFzZSBjbGFzcyB0byBzdGQ6OmFsbG9jYXRvci4KKyNpbmNsdWRlIDxiaXRzL21lbW9yeWZ3ZC5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYWRkdG9ncm91cCBhbGxvY2F0b3JzCisgICAqICBAeworICAgKi8KKworICAvLy8gYWxsb2NhdG9yPHZvaWQ+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHN0cnVjdCByZWJpbmQKKyAgICAgICAgeyB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxMDMuIHN0ZDo6YWxsb2NhdG9yIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50CisgICAgICB0eXBlZGVmIHRydWVfdHlwZSBwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudDsKKyNlbmRpZgorICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiAgVGhlIEBhIHN0YW5kYXJkIGFsbG9jYXRvciwgYXMgcGVyIFsyMC40XS4KKyAgICoKKyAgICogIFNlZSBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDA0Y2gxMS5odG1sCisgICAqICBmb3IgZnVydGhlciBkZXRhaWxzLgorICAgKgorICAgKiAgQHRwYXJhbSAgX1RwICBUeXBlIG9mIGFsbG9jYXRlZCBvYmplY3QuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgYWxsb2NhdG9yOiBwdWJsaWMgX19hbGxvY2F0b3JfYmFzZTxfVHA+CisgICAgeworICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc3RydWN0IHJlYmluZAorICAgICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjEwMy4gc3RkOjphbGxvY2F0b3IgcHJvcGFnYXRlX29uX2NvbnRhaW5lcl9tb3ZlX2Fzc2lnbm1lbnQKKyAgICAgIHR5cGVkZWYgdHJ1ZV90eXBlIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50OworI2VuZGlmCisKKyAgICAgIGFsbG9jYXRvcigpIHRocm93KCkgeyB9CisKKyAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImIF9fYSkgdGhyb3coKQorICAgICAgOiBfX2FsbG9jYXRvcl9iYXNlPF9UcD4oX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkgeyB9CisKKyAgICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHsgfQorCisgICAgICAvLyBJbmhlcml0IGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1RwPiYsIGNvbnN0IGFsbG9jYXRvcjxfVHA+JikKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1RwPiYsIGNvbnN0IGFsbG9jYXRvcjxfVHA+JikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCisgIC8vLyBAfSBncm91cCBhbGxvY2F0b3IKKworICAvLyBJbmhpYml0IGltcGxpY2l0IGluc3RhbnRpYXRpb25zIGZvciByZXF1aXJlZCBpbnN0YW50aWF0aW9ucywKKyAgLy8gd2hpY2ggYXJlIGRlZmluZWQgdmlhIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIGVsc2V3aGVyZS4KKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsKKyNlbmRpZgorCisgIC8vIFVuZGVmaW5lLgorI3VuZGVmIF9fYWxsb2NhdG9yX2Jhc2UKKworICAvLyBUbyBpbXBsZW1lbnQgT3B0aW9uIDMgb2YgRFIgNDMxLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIGJvb2wgPSBfX2lzX2VtcHR5KF9BbGxvYyk+CisgICAgc3RydWN0IF9fYWxsb2Nfc3dhcAorICAgIHsgc3RhdGljIHZvaWQgX1NfZG9faXQoX0FsbG9jJiwgX0FsbG9jJikgeyB9IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBfX2FsbG9jX3N3YXA8X0FsbG9jLCBmYWxzZT4KKyAgICB7CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfZG9faXQoX0FsbG9jJiBfX29uZSwgX0FsbG9jJiBfX3R3bykKKyAgICAgIHsKKwkvLyBQcmVjb25kaXRpb246IHN3YXBwYWJsZSBhbGxvY2F0b3JzLgorCWlmIChfX29uZSAhPSBfX3R3bykKKwkgIHN3YXAoX19vbmUsIF9fdHdvKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8vIE9wdGltaXplIGZvciBzdGF0ZWxlc3MgYWxsb2NhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCBib29sID0gX19pc19lbXB0eShfQWxsb2MpPgorICAgIHN0cnVjdCBfX2FsbG9jX25lcQorICAgIHsKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfU19kb19pdChjb25zdCBfQWxsb2MmLCBjb25zdCBfQWxsb2MmKQorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX19hbGxvY19uZXE8X0FsbG9jLCBmYWxzZT4KKyAgICB7CisgICAgICBzdGF0aWMgYm9vbAorICAgICAgX1NfZG9faXQoY29uc3QgX0FsbG9jJiBfX29uZSwgY29uc3QgX0FsbG9jJiBfX3R3bykKKyAgICAgIHsgcmV0dXJuIF9fb25lICE9IF9fdHdvOyB9CisgICAgfTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sCisgICAgPSBfX29yXzxpc19jb3B5X2NvbnN0cnVjdGlibGU8dHlwZW5hbWUgX1RwOjp2YWx1ZV90eXBlPiwKKyAgICAgICAgICAgIGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHR5cGVuYW1lIF9UcDo6dmFsdWVfdHlwZT4+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19zaHJpbmtfdG9fZml0X2F1eAorICAgIHsgc3RhdGljIGJvb2wgX1NfZG9faXQoX1RwJikgeyByZXR1cm4gZmFsc2U7IH0gfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fc2hyaW5rX3RvX2ZpdF9hdXg8X1RwLCB0cnVlPgorICAgIHsKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfU19kb19pdChfVHAmIF9fYykKKyAgICAgIHsKKwlfX3RyeQorCSAgeworCSAgICBfVHAoX19tYWtlX21vdmVfaWZfbm9leGNlcHRfaXRlcmF0b3IoX19jLmJlZ2luKCkpLAorCQlfX21ha2VfbW92ZV9pZl9ub2V4Y2VwdF9pdGVyYXRvcihfX2MuZW5kKCkpLAorCQlfX2MuZ2V0X2FsbG9jYXRvcigpKS5zd2FwKF9fYyk7CisJICAgIHJldHVybiB0cnVlOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgIH0KKyAgICB9OworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2F0b21pY19iYXNlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYXRvbWljX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDlmZThiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2F0b21pY19iYXNlLmgKQEAgLTAsMCArMSw4ODggQEAKKy8vIC0qLSBDKysgLSotIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYXRvbWljX2Jhc2UuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2F0b21pY30KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0FUT01JQ19CQVNFX0gKKyNkZWZpbmUgX0dMSUJDWFhfQVRPTUlDX0JBU0VfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGJpdHMvYXRvbWljX2xvY2tmcmVlX2RlZmluZXMuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgYXRvbWljcyBBdG9taWNzCisgICAqCisgICAqIENvbXBvbmVudHMgZm9yIHBlcmZvcm1pbmcgYXRvbWljIG9wZXJhdGlvbnMuCisgICAqIEB7CisgICAqLworCisgIC8vLyBFbnVtZXJhdGlvbiBmb3IgbWVtb3J5X29yZGVyCisgIHR5cGVkZWYgZW51bSBtZW1vcnlfb3JkZXIKKyAgICB7CisgICAgICBtZW1vcnlfb3JkZXJfcmVsYXhlZCwKKyAgICAgIG1lbW9yeV9vcmRlcl9jb25zdW1lLAorICAgICAgbWVtb3J5X29yZGVyX2FjcXVpcmUsCisgICAgICBtZW1vcnlfb3JkZXJfcmVsZWFzZSwKKyAgICAgIG1lbW9yeV9vcmRlcl9hY3FfcmVsLAorICAgICAgbWVtb3J5X29yZGVyX3NlcV9jc3QKKyAgICB9IG1lbW9yeV9vcmRlcjsKKworICBlbnVtIF9fbWVtb3J5X29yZGVyX21vZGlmaWVyCisgICAgeworICAgICAgX19tZW1vcnlfb3JkZXJfbWFzayAgICAgICAgICA9IDB4MGZmZmYsCisgICAgICBfX21lbW9yeV9vcmRlcl9tb2RpZmllcl9tYXNrID0gMHhmZmZmMDAwMCwKKyAgICAgIF9fbWVtb3J5X29yZGVyX2hsZV9hY3F1aXJlICAgPSAweDEwMDAwLAorICAgICAgX19tZW1vcnlfb3JkZXJfaGxlX3JlbGVhc2UgICA9IDB4MjAwMDAKKyAgICB9OworCisgIGNvbnN0ZXhwciBtZW1vcnlfb3JkZXIKKyAgb3BlcmF0b3J8KG1lbW9yeV9vcmRlciBfX20sIF9fbWVtb3J5X29yZGVyX21vZGlmaWVyIF9fbW9kKQorICB7CisgICAgcmV0dXJuIG1lbW9yeV9vcmRlcihfX20gfCBpbnQoX19tb2QpKTsKKyAgfQorCisgIGNvbnN0ZXhwciBtZW1vcnlfb3JkZXIKKyAgb3BlcmF0b3ImKG1lbW9yeV9vcmRlciBfX20sIF9fbWVtb3J5X29yZGVyX21vZGlmaWVyIF9fbW9kKQorICB7CisgICAgcmV0dXJuIG1lbW9yeV9vcmRlcihfX20gJiBpbnQoX19tb2QpKTsKKyAgfQorCisgIC8vIERyb3AgcmVsZWFzZSBvcmRlcmluZyBhcyBwZXIgW2F0b21pY3MudHlwZXMub3BlcmF0aW9ucy5yZXFdLzIxCisgIGNvbnN0ZXhwciBtZW1vcnlfb3JkZXIKKyAgX19jbXBleGNoX2ZhaWx1cmVfb3JkZXIyKG1lbW9yeV9vcmRlciBfX20pIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gX19tID09IG1lbW9yeV9vcmRlcl9hY3FfcmVsID8gbWVtb3J5X29yZGVyX2FjcXVpcmUKKyAgICAgIDogX19tID09IG1lbW9yeV9vcmRlcl9yZWxlYXNlID8gbWVtb3J5X29yZGVyX3JlbGF4ZWQgOiBfX207CisgIH0KKworICBjb25zdGV4cHIgbWVtb3J5X29yZGVyCisgIF9fY21wZXhjaF9mYWlsdXJlX29yZGVyKG1lbW9yeV9vcmRlciBfX20pIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gbWVtb3J5X29yZGVyKF9fY21wZXhjaF9mYWlsdXJlX29yZGVyMihfX20gJiBfX21lbW9yeV9vcmRlcl9tYXNrKQorICAgICAgfCAoX19tICYgX19tZW1vcnlfb3JkZXJfbW9kaWZpZXJfbWFzaykpOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICB7IF9fYXRvbWljX3RocmVhZF9mZW5jZShfX20pOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgYXRvbWljX3NpZ25hbF9mZW5jZShtZW1vcnlfb3JkZXIgX19tKSBub2V4Y2VwdAorICB7IF9fYXRvbWljX3NpZ25hbF9mZW5jZShfX20pOyB9CisKKyAgLy8vIGtpbGxfZGVwZW5kZW5jeQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIGtpbGxfZGVwZW5kZW5jeShfVHAgX195KSBub2V4Y2VwdAorICAgIHsKKyAgICAgIF9UcCBfX3JldChfX3kpOworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworCisgIC8vIEJhc2UgdHlwZXMgZm9yIGF0b21pY3MuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUcD4KKyAgICBzdHJ1Y3QgX19hdG9taWNfYmFzZTsKKworICAvLy8gYXRvbWljX2NoYXIKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGNoYXI+ICAJICAgICAgIAkJYXRvbWljX2NoYXI7CisKKyAgLy8vIGF0b21pY19zY2hhcgorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8c2lnbmVkIGNoYXI+CSAgICAgCWF0b21pY19zY2hhcjsKKworICAvLy8gYXRvbWljX3VjaGFyCisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1bnNpZ25lZCBjaGFyPgkJYXRvbWljX3VjaGFyOworCisgIC8vLyBhdG9taWNfc2hvcnQKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPHNob3J0PgkJCWF0b21pY19zaG9ydDsKKworICAvLy8gYXRvbWljX3VzaG9ydAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8dW5zaWduZWQgc2hvcnQ+CSAJYXRvbWljX3VzaG9ydDsKKworICAvLy8gYXRvbWljX2ludAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8aW50PiAgCSAgICAgICAJCWF0b21pY19pbnQ7CisKKyAgLy8vIGF0b21pY191aW50CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1bnNpZ25lZCBpbnQ+CSAgICAgCWF0b21pY191aW50OworCisgIC8vLyBhdG9taWNfbG9uZworICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8bG9uZz4gIAkgICAgICAgCQlhdG9taWNfbG9uZzsKKworICAvLy8gYXRvbWljX3Vsb25nCisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1bnNpZ25lZCBsb25nPgkJYXRvbWljX3Vsb25nOworCisgIC8vLyBhdG9taWNfbGxvbmcKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGxvbmcgbG9uZz4gIAkJYXRvbWljX2xsb25nOworCisgIC8vLyBhdG9taWNfdWxsb25nCisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1bnNpZ25lZCBsb25nIGxvbmc+IAlhdG9taWNfdWxsb25nOworCisgIC8vLyBhdG9taWNfd2NoYXJfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8d2NoYXJfdD4gIAkJYXRvbWljX3djaGFyX3Q7CisKKyAgLy8vIGF0b21pY19jaGFyMTZfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8Y2hhcjE2X3Q+ICAJCWF0b21pY19jaGFyMTZfdDsKKworICAvLy8gYXRvbWljX2NoYXIzMl90CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTxjaGFyMzJfdD4gIAkJYXRvbWljX2NoYXIzMl90OworCisgIC8vLyBhdG9taWNfY2hhcjMyX3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGNoYXIzMl90PiAgCQlhdG9taWNfY2hhcjMyX3Q7CisKKworICAvLy8gYXRvbWljX2ludF9sZWFzdDhfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8aW50X2xlYXN0OF90PiAgCQlhdG9taWNfaW50X2xlYXN0OF90OworCisgIC8vLyBhdG9taWNfdWludF9sZWFzdDhfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8dWludF9sZWFzdDhfdD4JICAgICAgIAlhdG9taWNfdWludF9sZWFzdDhfdDsKKworICAvLy8gYXRvbWljX2ludF9sZWFzdDE2X3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGludF9sZWFzdDE2X3Q+CSAgICAgICAJYXRvbWljX2ludF9sZWFzdDE2X3Q7CisKKyAgLy8vIGF0b21pY191aW50X2xlYXN0MTZfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8dWludF9sZWFzdDE2X3Q+CSAgICAgICAJYXRvbWljX3VpbnRfbGVhc3QxNl90OworCisgIC8vLyBhdG9taWNfaW50X2xlYXN0MzJfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8aW50X2xlYXN0MzJfdD4JICAgICAgIAlhdG9taWNfaW50X2xlYXN0MzJfdDsKKworICAvLy8gYXRvbWljX3VpbnRfbGVhc3QzMl90CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1aW50X2xlYXN0MzJfdD4JICAgICAgIAlhdG9taWNfdWludF9sZWFzdDMyX3Q7CisKKyAgLy8vIGF0b21pY19pbnRfbGVhc3Q2NF90CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTxpbnRfbGVhc3Q2NF90PgkgICAgICAgCWF0b21pY19pbnRfbGVhc3Q2NF90OworCisgIC8vLyBhdG9taWNfdWludF9sZWFzdDY0X3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPHVpbnRfbGVhc3Q2NF90PgkgICAgICAgCWF0b21pY191aW50X2xlYXN0NjRfdDsKKworCisgIC8vLyBhdG9taWNfaW50X2Zhc3Q4X3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGludF9mYXN0OF90PiAgCQlhdG9taWNfaW50X2Zhc3Q4X3Q7CisKKyAgLy8vIGF0b21pY191aW50X2Zhc3Q4X3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPHVpbnRfZmFzdDhfdD4JICAgICAgCWF0b21pY191aW50X2Zhc3Q4X3Q7CisKKyAgLy8vIGF0b21pY19pbnRfZmFzdDE2X3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGludF9mYXN0MTZfdD4JICAgICAgCWF0b21pY19pbnRfZmFzdDE2X3Q7CisKKyAgLy8vIGF0b21pY191aW50X2Zhc3QxNl90CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1aW50X2Zhc3QxNl90PgkgICAgICAJYXRvbWljX3VpbnRfZmFzdDE2X3Q7CisKKyAgLy8vIGF0b21pY19pbnRfZmFzdDMyX3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGludF9mYXN0MzJfdD4JICAgICAgCWF0b21pY19pbnRfZmFzdDMyX3Q7CisKKyAgLy8vIGF0b21pY191aW50X2Zhc3QzMl90CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1aW50X2Zhc3QzMl90PgkgICAgICAJYXRvbWljX3VpbnRfZmFzdDMyX3Q7CisKKyAgLy8vIGF0b21pY19pbnRfZmFzdDY0X3QKKyAgdHlwZWRlZiBfX2F0b21pY19iYXNlPGludF9mYXN0NjRfdD4JICAgICAgCWF0b21pY19pbnRfZmFzdDY0X3Q7CisKKyAgLy8vIGF0b21pY191aW50X2Zhc3Q2NF90CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTx1aW50X2Zhc3Q2NF90PgkgICAgICAJYXRvbWljX3VpbnRfZmFzdDY0X3Q7CisKKworICAvLy8gYXRvbWljX2ludHB0cl90CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTxpbnRwdHJfdD4gIAkgICAgICAgCWF0b21pY19pbnRwdHJfdDsKKworICAvLy8gYXRvbWljX3VpbnRwdHJfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8dWludHB0cl90PiAgCSAgICAgICAJYXRvbWljX3VpbnRwdHJfdDsKKworICAvLy8gYXRvbWljX3NpemVfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8c2l6ZV90PgkgCSAgICAgICAJYXRvbWljX3NpemVfdDsKKworICAvLy8gYXRvbWljX2ludG1heF90CisgIHR5cGVkZWYgX19hdG9taWNfYmFzZTxpbnRtYXhfdD4gIAkgICAgICAgCWF0b21pY19pbnRtYXhfdDsKKworICAvLy8gYXRvbWljX3VpbnRtYXhfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8dWludG1heF90PiAgCSAgICAgICAJYXRvbWljX3VpbnRtYXhfdDsKKworICAvLy8gYXRvbWljX3B0cmRpZmZfdAorICB0eXBlZGVmIF9fYXRvbWljX2Jhc2U8cHRyZGlmZl90PiAgCSAgICAgICAJYXRvbWljX3B0cmRpZmZfdDsKKworCisjZGVmaW5lIEFUT01JQ19WQVJfSU5JVChfVkkpIHsgX1ZJIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGF0b21pYzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGF0b21pYzxfVHAqPjsKKworICAgIC8qIFRoZSB0YXJnZXQncyAic2V0IiB2YWx1ZSBmb3IgdGVzdC1hbmQtc2V0IG1heSBub3QgYmUgZXhhY3RseSAxLiAgKi8KKyNpZiBfX0dDQ19BVE9NSUNfVEVTVF9BTkRfU0VUX1RSVUVWQUwgPT0gMQorICAgIHR5cGVkZWYgYm9vbCBfX2F0b21pY19mbGFnX2RhdGFfdHlwZTsKKyNlbHNlCisgICAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fYXRvbWljX2ZsYWdfZGF0YV90eXBlOworI2VuZGlmCisKKyAgLyoqCisgICAqICBAYnJpZWYgQmFzZSB0eXBlIGZvciBhdG9taWNfZmxhZy4KKyAgICoKKyAgICogIEJhc2UgdHlwZSBpcyBQT0Qgd2l0aCBkYXRhLCBhbGxvd2luZyBhdG9taWNfZmxhZyB0byBkZXJpdmUgZnJvbQorICAgKiAgaXQgYW5kIG1lZXQgdGhlIHN0YW5kYXJkIGxheW91dCB0eXBlIHJlcXVpcmVtZW50LiBJbiBhZGRpdGlvbiB0bworICAgKiAgY29tcGF0aWJpbHR5IHdpdGggYSBDIGludGVyZmFjZSwgdGhpcyBhbGxvd3MgZGlmZmVyZW50CisgICAqICBpbXBsZW1lbnRhdGlvbnMgb2YgYXRvbWljX2ZsYWcgdG8gdXNlIHRoZSBzYW1lIGF0b21pYyBvcGVyYXRpb24KKyAgICogIGZ1bmN0aW9ucywgdmlhIGEgc3RhbmRhcmQgY29udmVyc2lvbiB0byB0aGUgX19hdG9taWNfZmxhZ19iYXNlCisgICAqICBhcmd1bWVudC4KKyAgKi8KKyAgX0dMSUJDWFhfQkVHSU5fRVhURVJOX0MKKworICBzdHJ1Y3QgX19hdG9taWNfZmxhZ19iYXNlCisgIHsKKyAgICBfX2F0b21pY19mbGFnX2RhdGFfdHlwZSBfTV9pOworICB9OworCisgIF9HTElCQ1hYX0VORF9FWFRFUk5fQworCisjZGVmaW5lIEFUT01JQ19GTEFHX0lOSVQgeyAwIH0KKworICAvLy8gYXRvbWljX2ZsYWcKKyAgc3RydWN0IGF0b21pY19mbGFnIDogcHVibGljIF9fYXRvbWljX2ZsYWdfYmFzZQorICB7CisgICAgYXRvbWljX2ZsYWcoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgfmF0b21pY19mbGFnKCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgIGF0b21pY19mbGFnKGNvbnN0IGF0b21pY19mbGFnJikgPSBkZWxldGU7CisgICAgYXRvbWljX2ZsYWcmIG9wZXJhdG9yPShjb25zdCBhdG9taWNfZmxhZyYpID0gZGVsZXRlOworICAgIGF0b21pY19mbGFnJiBvcGVyYXRvcj0oY29uc3QgYXRvbWljX2ZsYWcmKSB2b2xhdGlsZSA9IGRlbGV0ZTsKKworICAgIC8vIENvbnZlcnNpb24gdG8gQVRPTUlDX0ZMQUdfSU5JVC4KKyAgICBjb25zdGV4cHIgYXRvbWljX2ZsYWcoYm9vbCBfX2kpIG5vZXhjZXB0CisgICAgICA6IF9fYXRvbWljX2ZsYWdfYmFzZXsgX1NfaW5pdChfX2kpIH0KKyAgICB7IH0KKworICAgIGJvb2wKKyAgICB0ZXN0X2FuZF9zZXQobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHJldHVybiBfX2F0b21pY190ZXN0X2FuZF9zZXQgKCZfTV9pLCBfX20pOworICAgIH0KKworICAgIGJvb2wKKyAgICB0ZXN0X2FuZF9zZXQobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHJldHVybiBfX2F0b21pY190ZXN0X2FuZF9zZXQgKCZfTV9pLCBfX20pOworICAgIH0KKworICAgIHZvaWQKKyAgICBjbGVhcihtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgeworICAgICAgbWVtb3J5X29yZGVyIF9fYiA9IF9fbSAmIF9fbWVtb3J5X29yZGVyX21hc2s7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfY29uc3VtZSk7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisKKyAgICAgIF9fYXRvbWljX2NsZWFyICgmX01faSwgX19tKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgY2xlYXIobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgIHsKKyAgICAgIG1lbW9yeV9vcmRlciBfX2IgPSBfX20gJiBfX21lbW9yeV9vcmRlcl9tYXNrOworICAgICAgX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2NvbnN1bWUpOworICAgICAgX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgICAgX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCisgICAgICBfX2F0b21pY19jbGVhciAoJl9NX2ksIF9fbSk7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciBfX2F0b21pY19mbGFnX2RhdGFfdHlwZQorICAgIF9TX2luaXQoYm9vbCBfX2kpCisgICAgeyByZXR1cm4gX19pID8gX19HQ0NfQVRPTUlDX1RFU1RfQU5EX1NFVF9UUlVFVkFMIDogMDsgfQorICB9OworCisKKyAgLy8vIEJhc2UgY2xhc3MgZm9yIGF0b21pYyBpbnRlZ3JhbHMuCisgIC8vCisgIC8vIEZvciBlYWNoIG9mIHRoZSBpbnRlZ3JhbCB0eXBlcywgZGVmaW5lIGF0b21pY19baW50ZWdyYWwgdHlwZV0gc3RydWN0CisgIC8vCisgIC8vIGF0b21pY19ib29sICAgICBib29sCisgIC8vIGF0b21pY19jaGFyICAgICBjaGFyCisgIC8vIGF0b21pY19zY2hhciAgICBzaWduZWQgY2hhcgorICAvLyBhdG9taWNfdWNoYXIgICAgdW5zaWduZWQgY2hhcgorICAvLyBhdG9taWNfc2hvcnQgICAgc2hvcnQKKyAgLy8gYXRvbWljX3VzaG9ydCAgIHVuc2lnbmVkIHNob3J0CisgIC8vIGF0b21pY19pbnQgICAgICBpbnQKKyAgLy8gYXRvbWljX3VpbnQgICAgIHVuc2lnbmVkIGludAorICAvLyBhdG9taWNfbG9uZyAgICAgbG9uZworICAvLyBhdG9taWNfdWxvbmcgICAgdW5zaWduZWQgbG9uZworICAvLyBhdG9taWNfbGxvbmcgICAgbG9uZyBsb25nCisgIC8vIGF0b21pY191bGxvbmcgICB1bnNpZ25lZCBsb25nIGxvbmcKKyAgLy8gYXRvbWljX2NoYXIxNl90IGNoYXIxNl90CisgIC8vIGF0b21pY19jaGFyMzJfdCBjaGFyMzJfdAorICAvLyBhdG9taWNfd2NoYXJfdCAgd2NoYXJfdAorICAvLworICAvLyBOQjogQXNzdW1pbmcgX0lUcCBpcyBhbiBpbnRlZ3JhbCBzY2FsYXIgdHlwZSB0aGF0IGlzIDEsIDIsIDQsIG9yCisgIC8vIDggYnl0ZXMsIHNpbmNlIHRoYXQgaXMgd2hhdCBHQ0MgYnVpbHQtaW4gZnVuY3Rpb25zIGZvciBhdG9taWMKKyAgLy8gbWVtb3J5IGFjY2VzcyBleHBlY3QuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JVHA+CisgICAgc3RydWN0IF9fYXRvbWljX2Jhc2UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX0lUcCAJX19pbnRfdHlwZTsKKworICAgICAgX19pbnRfdHlwZSAJX01faTsKKworICAgIHB1YmxpYzoKKyAgICAgIF9fYXRvbWljX2Jhc2UoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+X19hdG9taWNfYmFzZSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIF9fYXRvbWljX2Jhc2UoY29uc3QgX19hdG9taWNfYmFzZSYpID0gZGVsZXRlOworICAgICAgX19hdG9taWNfYmFzZSYgb3BlcmF0b3I9KGNvbnN0IF9fYXRvbWljX2Jhc2UmKSA9IGRlbGV0ZTsKKyAgICAgIF9fYXRvbWljX2Jhc2UmIG9wZXJhdG9yPShjb25zdCBfX2F0b21pY19iYXNlJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIC8vIFJlcXVpcmVzIF9faW50X3R5cGUgY29udmVydGlibGUgdG8gX01faS4KKyAgICAgIGNvbnN0ZXhwciBfX2F0b21pY19iYXNlKF9faW50X3R5cGUgX19pKSBub2V4Y2VwdCA6IF9NX2kgKF9faSkgeyB9CisKKyAgICAgIG9wZXJhdG9yIF9faW50X3R5cGUoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gbG9hZCgpOyB9CisKKyAgICAgIG9wZXJhdG9yIF9faW50X3R5cGUoKSBjb25zdCB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gbG9hZCgpOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yPShfX2ludF90eXBlIF9faSkgbm9leGNlcHQKKyAgICAgIHsKKwlzdG9yZShfX2kpOworCXJldHVybiBfX2k7CisgICAgICB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yPShfX2ludF90eXBlIF9faSkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsKKwlzdG9yZShfX2kpOworCXJldHVybiBfX2k7CisgICAgICB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yKysoaW50KSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gZmV0Y2hfYWRkKDEpOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yKysoaW50KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gZmV0Y2hfYWRkKDEpOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yLS0oaW50KSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gZmV0Y2hfc3ViKDEpOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yLS0oaW50KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gZmV0Y2hfc3ViKDEpOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yKysoKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfYWRkX2ZldGNoKCZfTV9pLCAxLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgb3BlcmF0b3IrKygpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19hZGRfZmV0Y2goJl9NX2ksIDEsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgICAgICBfX2ludF90eXBlCisgICAgICBvcGVyYXRvci0tKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaCgmX01faSwgMSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yLS0oKSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfc3ViX2ZldGNoKCZfTV9pLCAxLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgb3BlcmF0b3IrPShfX2ludF90eXBlIF9faSkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2FkZF9mZXRjaCgmX01faSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgb3BlcmF0b3IrPShfX2ludF90eXBlIF9faSkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2FkZF9mZXRjaCgmX01faSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgb3BlcmF0b3ItPShfX2ludF90eXBlIF9faSkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaCgmX01faSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgb3BlcmF0b3ItPShfX2ludF90eXBlIF9faSkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaCgmX01faSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgb3BlcmF0b3ImPShfX2ludF90eXBlIF9faSkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2FuZF9mZXRjaCgmX01faSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgb3BlcmF0b3ImPShfX2ludF90eXBlIF9faSkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2FuZF9mZXRjaCgmX01faSwgX19pLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgb3BlcmF0b3J8PShfX2ludF90eXBlIF9faSkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX29yX2ZldGNoKCZfTV9pLCBfX2ksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsgfQorCisgICAgICBfX2ludF90eXBlCisgICAgICBvcGVyYXRvcnw9KF9faW50X3R5cGUgX19pKSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfb3JfZmV0Y2goJl9NX2ksIF9faSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yXj0oX19pbnRfdHlwZSBfX2kpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY194b3JfZmV0Y2goJl9NX2ksIF9faSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIG9wZXJhdG9yXj0oX19pbnRfdHlwZSBfX2kpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY194b3JfZmV0Y2goJl9NX2ksIF9faSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGlzX2xvY2tfZnJlZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19pc19sb2NrX2ZyZWUoc2l6ZW9mKF9NX2kpLCBudWxscHRyKTsgfQorCisgICAgICBib29sCisgICAgICBpc19sb2NrX2ZyZWUoKSBjb25zdCB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZihfTV9pKSwgbnVsbHB0cik7IH0KKworICAgICAgdm9pZAorICAgICAgc3RvcmUoX19pbnRfdHlwZSBfX2ksIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgbWVtb3J5X29yZGVyIF9fYiA9IF9fbSAmIF9fbWVtb3J5X29yZGVyX21hc2s7CisJX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2FjcXVpcmUpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfY29uc3VtZSk7CisKKwlfX2F0b21pY19zdG9yZV9uKCZfTV9pLCBfX2ksIF9fbSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN0b3JlKF9faW50X3R5cGUgX19pLAorCSAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIG1lbW9yeV9vcmRlciBfX2IgPSBfX20gJiBfX21lbW9yeV9vcmRlcl9tYXNrOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iICE9IG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisJX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2NvbnN1bWUpOworCisJX19hdG9taWNfc3RvcmVfbigmX01faSwgX19pLCBfX20pOworICAgICAgfQorCisgICAgICBfX2ludF90eXBlCisgICAgICBsb2FkKG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICBtZW1vcnlfb3JkZXIgX19iID0gX19tICYgX19tZW1vcnlfb3JkZXJfbWFzazsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisJX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCisJcmV0dXJuIF9fYXRvbWljX2xvYWRfbigmX01faSwgX19tKTsKKyAgICAgIH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgbG9hZChtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIG1lbW9yeV9vcmRlciBfX2IgPSBfX20gJiBfX21lbW9yeV9vcmRlcl9tYXNrOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisKKwlyZXR1cm4gX19hdG9taWNfbG9hZF9uKCZfTV9pLCBfX20pOworICAgICAgfQorCisgICAgICBfX2ludF90eXBlCisgICAgICBleGNoYW5nZShfX2ludF90eXBlIF9faSwKKwkgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBfX2F0b21pY19leGNoYW5nZV9uKCZfTV9pLCBfX2ksIF9fbSk7CisgICAgICB9CisKKworICAgICAgX19pbnRfdHlwZQorICAgICAgZXhjaGFuZ2UoX19pbnRfdHlwZSBfX2ksCisJICAgICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsKKwlyZXR1cm4gX19hdG9taWNfZXhjaGFuZ2VfbigmX01faSwgX19pLCBfX20pOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pbnRfdHlwZSYgX19pMSwgX19pbnRfdHlwZSBfX2kyLAorCQkJICAgIG1lbW9yeV9vcmRlciBfX20xLCBtZW1vcnlfb3JkZXIgX19tMikgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICBtZW1vcnlfb3JkZXIgX19iMiA9IF9fbTIgJiBfX21lbW9yeV9vcmRlcl9tYXNrOworICAgICAgIG1lbW9yeV9vcmRlciBfX2IxID0gX19tMSAmIF9fbWVtb3J5X29yZGVyX21hc2s7CisJX19nbGliY3h4X2Fzc2VydChfX2IyICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYjIgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iMiA8PSBfX2IxKTsKKworCXJldHVybiBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJl9NX2ksICZfX2kxLCBfX2kyLCAxLCBfX20xLCBfX20yKTsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faW50X3R5cGUmIF9faTEsIF9faW50X3R5cGUgX19pMiwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tMikgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICBtZW1vcnlfb3JkZXIgX19iMiA9IF9fbTIgJiBfX21lbW9yeV9vcmRlcl9tYXNrOworICAgICAgIG1lbW9yeV9vcmRlciBfX2IxID0gX19tMSAmIF9fbWVtb3J5X29yZGVyX21hc2s7CisJX19nbGliY3h4X2Fzc2VydChfX2IyICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYjIgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iMiA8PSBfX2IxKTsKKworCXJldHVybiBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJl9NX2ksICZfX2kxLCBfX2kyLCAxLCBfX20xLCBfX20yKTsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faW50X3R5cGUmIF9faTEsIF9faW50X3R5cGUgX19pMiwKKwkJCSAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7CisJcmV0dXJuIGNvbXBhcmVfZXhjaGFuZ2Vfd2VhayhfX2kxLCBfX2kyLCBfX20sCisJCQkJICAgICBfX2NtcGV4Y2hfZmFpbHVyZV9vcmRlcihfX20pKTsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV93ZWFrKF9faW50X3R5cGUmIF9faTEsIF9faW50X3R5cGUgX19pMiwKKwkJICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3dlYWsoX19pMSwgX19pMiwgX19tLAorCQkJCSAgICAgX19jbXBleGNoX2ZhaWx1cmVfb3JkZXIoX19tKSk7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faW50X3R5cGUmIF9faTEsIF9faW50X3R5cGUgX19pMiwKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX20xLCBtZW1vcnlfb3JkZXIgX19tMikgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgbWVtb3J5X29yZGVyIF9fYjIgPSBfX20yICYgX19tZW1vcnlfb3JkZXJfbWFzazsKKyAgICAgICAgbWVtb3J5X29yZGVyIF9fYjEgPSBfX20xICYgX19tZW1vcnlfb3JkZXJfbWFzazsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYjIgIT0gbWVtb3J5X29yZGVyX3JlbGVhc2UpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iMiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisJX19nbGliY3h4X2Fzc2VydChfX2IyIDw9IF9fYjEpOworCisJcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmX01faSwgJl9faTEsIF9faTIsIDAsIF9fbTEsIF9fbTIpOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2ludF90eXBlJiBfX2kxLCBfX2ludF90eXBlIF9faTIsCisJCQkgICAgICBtZW1vcnlfb3JkZXIgX19tMSwKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX20yKSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBtZW1vcnlfb3JkZXIgX19iMiA9IF9fbTIgJiBfX21lbW9yeV9vcmRlcl9tYXNrOworICAgICAgICBtZW1vcnlfb3JkZXIgX19iMSA9IF9fbTEgJiBfX21lbW9yeV9vcmRlcl9tYXNrOworCisJX19nbGliY3h4X2Fzc2VydChfX2IyICE9IG1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYjIgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iMiA8PSBfX2IxKTsKKworCXJldHVybiBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJl9NX2ksICZfX2kxLCBfX2kyLCAwLCBfX20xLCBfX20yKTsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoX19pbnRfdHlwZSYgX19pMSwgX19pbnRfdHlwZSBfX2kyLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2kxLCBfX2kyLCBfX20sCisJCQkJICAgICAgIF9fY21wZXhjaF9mYWlsdXJlX29yZGVyKF9fbSkpOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX2ludF90eXBlJiBfX2kxLCBfX2ludF90eXBlIF9faTIsCisJCSBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7CisJcmV0dXJuIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9faTEsIF9faTIsIF9fbSwKKwkJCQkgICAgICAgX19jbXBleGNoX2ZhaWx1cmVfb3JkZXIoX19tKSk7CisgICAgICB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIGZldGNoX2FkZChfX2ludF90eXBlIF9faSwKKwkJbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfZmV0Y2hfYWRkKCZfTV9pLCBfX2ksIF9fbSk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgZmV0Y2hfYWRkKF9faW50X3R5cGUgX19pLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoJl9NX2ksIF9faSwgX19tKTsgfQorCisgICAgICBfX2ludF90eXBlCisgICAgICBmZXRjaF9zdWIoX19pbnRfdHlwZSBfX2ksCisJCW1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3N1YigmX01faSwgX19pLCBfX20pOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIGZldGNoX3N1YihfX2ludF90eXBlIF9faSwKKwkJbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKCZfTV9pLCBfX2ksIF9fbSk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgZmV0Y2hfYW5kKF9faW50X3R5cGUgX19pLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19mZXRjaF9hbmQoJl9NX2ksIF9faSwgX19tKTsgfQorCisgICAgICBfX2ludF90eXBlCisgICAgICBmZXRjaF9hbmQoX19pbnRfdHlwZSBfX2ksCisJCW1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FuZCgmX01faSwgX19pLCBfX20pOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIGZldGNoX29yKF9faW50X3R5cGUgX19pLAorCSAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19mZXRjaF9vcigmX01faSwgX19pLCBfX20pOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIGZldGNoX29yKF9faW50X3R5cGUgX19pLAorCSAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19mZXRjaF9vcigmX01faSwgX19pLCBfX20pOyB9CisKKyAgICAgIF9faW50X3R5cGUKKyAgICAgIGZldGNoX3hvcihfX2ludF90eXBlIF9faSwKKwkJbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfZmV0Y2hfeG9yKCZfTV9pLCBfX2ksIF9fbSk7IH0KKworICAgICAgX19pbnRfdHlwZQorICAgICAgZmV0Y2hfeG9yKF9faW50X3R5cGUgX19pLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19mZXRjaF94b3IoJl9NX2ksIF9faSwgX19tKTsgfQorICAgIH07CisKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiBmb3IgcG9pbnRlciB0eXBlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1BUcD4KKyAgICBzdHJ1Y3QgX19hdG9taWNfYmFzZTxfUFRwKj4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX1BUcCogCV9fcG9pbnRlcl90eXBlOworCisgICAgICBfX3BvaW50ZXJfdHlwZSAJX01fcDsKKworICAgICAgLy8gRmFjdG9yZWQgb3V0IHRvIGZhY2lsaXRhdGUgZXhwbGljaXQgc3BlY2lhbGl6YXRpb24uCisgICAgICBjb25zdGV4cHIgcHRyZGlmZl90CisgICAgICBfTV90eXBlX3NpemUocHRyZGlmZl90IF9fZCkgeyByZXR1cm4gX19kICogc2l6ZW9mKF9QVHApOyB9CisKKyAgICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QKKyAgICAgIF9NX3R5cGVfc2l6ZShwdHJkaWZmX3QgX19kKSB2b2xhdGlsZSB7IHJldHVybiBfX2QgKiBzaXplb2YoX1BUcCk7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIF9fYXRvbWljX2Jhc2UoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+X19hdG9taWNfYmFzZSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIF9fYXRvbWljX2Jhc2UoY29uc3QgX19hdG9taWNfYmFzZSYpID0gZGVsZXRlOworICAgICAgX19hdG9taWNfYmFzZSYgb3BlcmF0b3I9KGNvbnN0IF9fYXRvbWljX2Jhc2UmKSA9IGRlbGV0ZTsKKyAgICAgIF9fYXRvbWljX2Jhc2UmIG9wZXJhdG9yPShjb25zdCBfX2F0b21pY19iYXNlJikgdm9sYXRpbGUgPSBkZWxldGU7CisKKyAgICAgIC8vIFJlcXVpcmVzIF9fcG9pbnRlcl90eXBlIGNvbnZlcnRpYmxlIHRvIF9NX3AuCisgICAgICBjb25zdGV4cHIgX19hdG9taWNfYmFzZShfX3BvaW50ZXJfdHlwZSBfX3ApIG5vZXhjZXB0IDogX01fcCAoX19wKSB7IH0KKworICAgICAgb3BlcmF0b3IgX19wb2ludGVyX3R5cGUoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gbG9hZCgpOyB9CisKKyAgICAgIG9wZXJhdG9yIF9fcG9pbnRlcl90eXBlKCkgY29uc3Qgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGxvYWQoKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgb3BlcmF0b3I9KF9fcG9pbnRlcl90eXBlIF9fcCkgbm9leGNlcHQKKyAgICAgIHsKKwlzdG9yZShfX3ApOworCXJldHVybiBfX3A7CisgICAgICB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvcj0oX19wb2ludGVyX3R5cGUgX19wKSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeworCXN0b3JlKF9fcCk7CisJcmV0dXJuIF9fcDsKKyAgICAgIH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIG9wZXJhdG9yKysoaW50KSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gZmV0Y2hfYWRkKDEpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvcisrKGludCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGZldGNoX2FkZCgxKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgb3BlcmF0b3ItLShpbnQpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBmZXRjaF9zdWIoMSk7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIG9wZXJhdG9yLS0oaW50KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gZmV0Y2hfc3ViKDEpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvcisrKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2FkZF9mZXRjaCgmX01fcCwgX01fdHlwZV9zaXplKDEpLAorCQkJCSAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvcisrKCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2FkZF9mZXRjaCgmX01fcCwgX01fdHlwZV9zaXplKDEpLAorCQkJCSAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvci0tKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaCgmX01fcCwgX01fdHlwZV9zaXplKDEpLAorCQkJCSAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvci0tKCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX3N1Yl9mZXRjaCgmX01fcCwgX01fdHlwZV9zaXplKDEpLAorCQkJCSAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvcis9KHB0cmRpZmZfdCBfX2QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19hZGRfZmV0Y2goJl9NX3AsIF9NX3R5cGVfc2l6ZShfX2QpLAorCQkJCSAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvcis9KHB0cmRpZmZfdCBfX2QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19hZGRfZmV0Y2goJl9NX3AsIF9NX3R5cGVfc2l6ZShfX2QpLAorCQkJCSAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvci09KHB0cmRpZmZfdCBfX2QpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19zdWJfZmV0Y2goJl9NX3AsIF9NX3R5cGVfc2l6ZShfX2QpLAorCQkJCSAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBvcGVyYXRvci09KHB0cmRpZmZfdCBfX2QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19zdWJfZmV0Y2goJl9NX3AsIF9NX3R5cGVfc2l6ZShfX2QpLAorCQkJCSAgbWVtb3J5X29yZGVyX3NlcV9jc3QpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGlzX2xvY2tfZnJlZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19pc19sb2NrX2ZyZWUoX01fdHlwZV9zaXplKDEpLCBudWxscHRyKTsgfQorCisgICAgICBib29sCisgICAgICBpc19sb2NrX2ZyZWUoKSBjb25zdCB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfaXNfbG9ja19mcmVlKF9NX3R5cGVfc2l6ZSgxKSwgbnVsbHB0cik7IH0KKworICAgICAgdm9pZAorICAgICAgc3RvcmUoX19wb2ludGVyX3R5cGUgX19wLAorCSAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIG1lbW9yeV9vcmRlciBfX2IgPSBfX20gJiBfX21lbW9yeV9vcmRlcl9tYXNrOworCisJX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2FjcXVpcmUpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iICE9IG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfY29uc3VtZSk7CisKKwlfX2F0b21pY19zdG9yZV9uKCZfTV9wLCBfX3AsIF9fbSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN0b3JlKF9fcG9pbnRlcl90eXBlIF9fcCwKKwkgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBtZW1vcnlfb3JkZXIgX19iID0gX19tICYgX19tZW1vcnlfb3JkZXJfbWFzazsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisJX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iICE9IG1lbW9yeV9vcmRlcl9jb25zdW1lKTsKKworCV9fYXRvbWljX3N0b3JlX24oJl9NX3AsIF9fcCwgX19tKTsKKyAgICAgIH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGxvYWQobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCBub2V4Y2VwdAorICAgICAgeworICAgICAgICBtZW1vcnlfb3JkZXIgX19iID0gX19tICYgX19tZW1vcnlfb3JkZXJfbWFzazsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisJX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCisJcmV0dXJuIF9fYXRvbWljX2xvYWRfbigmX01fcCwgX19tKTsKKyAgICAgIH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGxvYWQobWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBtZW1vcnlfb3JkZXIgX19iID0gX19tICYgX19tZW1vcnlfb3JkZXJfbWFzazsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYiAhPSBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisJX19nbGliY3h4X2Fzc2VydChfX2IgIT0gbWVtb3J5X29yZGVyX2FjcV9yZWwpOworCisJcmV0dXJuIF9fYXRvbWljX2xvYWRfbigmX01fcCwgX19tKTsKKyAgICAgIH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGV4Y2hhbmdlKF9fcG9pbnRlcl90eXBlIF9fcCwKKwkgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBfX2F0b21pY19leGNoYW5nZV9uKCZfTV9wLCBfX3AsIF9fbSk7CisgICAgICB9CisKKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGV4Y2hhbmdlKF9fcG9pbnRlcl90eXBlIF9fcCwKKwkgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSB2b2xhdGlsZSBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBfX2F0b21pY19leGNoYW5nZV9uKCZfTV9wLCBfX3AsIF9fbSk7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIGNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKF9fcG9pbnRlcl90eXBlJiBfX3AxLCBfX3BvaW50ZXJfdHlwZSBfX3AyLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbTEsCisJCQkgICAgICBtZW1vcnlfb3JkZXIgX19tMikgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgbWVtb3J5X29yZGVyIF9fYjIgPSBfX20yICYgX19tZW1vcnlfb3JkZXJfbWFzazsKKyAgICAgICAgbWVtb3J5X29yZGVyIF9fYjEgPSBfX20xICYgX19tZW1vcnlfb3JkZXJfbWFzazsKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYjIgIT0gbWVtb3J5X29yZGVyX3JlbGVhc2UpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iMiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisJX19nbGliY3h4X2Fzc2VydChfX2IyIDw9IF9fYjEpOworCisJcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmX01fcCwgJl9fcDEsIF9fcDIsIDAsIF9fbTEsIF9fbTIpOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBjb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhfX3BvaW50ZXJfdHlwZSYgX19wMSwgX19wb2ludGVyX3R5cGUgX19wMiwKKwkJCSAgICAgIG1lbW9yeV9vcmRlciBfX20xLAorCQkJICAgICAgbWVtb3J5X29yZGVyIF9fbTIpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIG1lbW9yeV9vcmRlciBfX2IyID0gX19tMiAmIF9fbWVtb3J5X29yZGVyX21hc2s7CisgICAgICAgIG1lbW9yeV9vcmRlciBfX2IxID0gX19tMSAmIF9fbWVtb3J5X29yZGVyX21hc2s7CisKKwlfX2dsaWJjeHhfYXNzZXJ0KF9fYjIgIT0gbWVtb3J5X29yZGVyX3JlbGVhc2UpOworCV9fZ2xpYmN4eF9hc3NlcnQoX19iMiAhPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCk7CisJX19nbGliY3h4X2Fzc2VydChfX2IyIDw9IF9fYjEpOworCisJcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmX01fcCwgJl9fcDEsIF9fcDIsIDAsIF9fbTEsIF9fbTIpOworICAgICAgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgZmV0Y2hfYWRkKHB0cmRpZmZfdCBfX2QsCisJCW1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZCgmX01fcCwgX01fdHlwZV9zaXplKF9fZCksIF9fbSk7IH0KKworICAgICAgX19wb2ludGVyX3R5cGUKKyAgICAgIGZldGNoX2FkZChwdHJkaWZmX3QgX19kLAorCQltZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIHZvbGF0aWxlIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoJl9NX3AsIF9NX3R5cGVfc2l6ZShfX2QpLCBfX20pOyB9CisKKyAgICAgIF9fcG9pbnRlcl90eXBlCisgICAgICBmZXRjaF9zdWIocHRyZGlmZl90IF9fZCwKKwkJbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKCZfTV9wLCBfTV90eXBlX3NpemUoX19kKSwgX19tKTsgfQorCisgICAgICBfX3BvaW50ZXJfdHlwZQorICAgICAgZmV0Y2hfc3ViKHB0cmRpZmZfdCBfX2QsCisJCW1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgdm9sYXRpbGUgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYXRvbWljX2ZldGNoX3N1YigmX01fcCwgX01fdHlwZV9zaXplKF9fZCksIF9fbSk7IH0KKyAgICB9OworCisgIC8vIEB9IGdyb3VwIGF0b21pY3MKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYXRvbWljX2xvY2tmcmVlX2RlZmluZXMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9hdG9taWNfbG9ja2ZyZWVfZGVmaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwODkwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYXRvbWljX2xvY2tmcmVlX2RlZmluZXMuaApAQCAtMCwwICsxLDYzIEBACisvLyAtKi0gQysrIC0qLSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2F0b21pY19sb2NrZnJlZV9kZWZpbmVzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXthdG9taWN9CisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9BVE9NSUNfTE9DS19GUkVFX0gKKyNkZWZpbmUgX0dMSUJDWFhfQVRPTUlDX0xPQ0tfRlJFRV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisvKioKKyAqIEBhZGR0b2dyb3VwIGF0b21pY3MKKyAqIEB7CisgKi8KKworLyoqCisgKiBMb2NrLWZyZWUgcHJvcGVydHkuCisgKgorICogMCBpbmRpY2F0ZXMgdGhhdCB0aGUgdHlwZXMgYXJlIG5ldmVyIGxvY2stZnJlZS4KKyAqIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHR5cGVzIGFyZSBzb21ldGltZXMgbG9jay1mcmVlLgorICogMiBpbmRpY2F0ZXMgdGhhdCB0aGUgdHlwZXMgYXJlIGFsd2F5cyBsb2NrLWZyZWUuCisgKi8KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNkZWZpbmUgQVRPTUlDX0JPT0xfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfQk9PTF9MT0NLX0ZSRUUKKyNkZWZpbmUgQVRPTUlDX0NIQVJfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfQ0hBUl9MT0NLX0ZSRUUKKyNkZWZpbmUgQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCV9fR0NDX0FUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRQorI2RlZmluZSBBVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFCV9fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUKKyNkZWZpbmUgQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFCisjZGVmaW5lIEFUT01JQ19TSE9SVF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUKKyNkZWZpbmUgQVRPTUlDX0lOVF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19JTlRfTE9DS19GUkVFCisjZGVmaW5lIEFUT01JQ19MT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xPTkdfTE9DS19GUkVFCisjZGVmaW5lIEFUT01JQ19MTE9OR19MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUgQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFCV9fR0NDX0FUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRQorI2VuZGlmCisKKy8vIEB9IGdyb3VwIGF0b21pY3MKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYmFzaWNfaW9zLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYmFzaWNfaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyNTgwMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9iYXNpY19pb3MuaApAQCAtMCwwICsxLDQ3NyBAQAorLy8gSW9zdHJlYW1zIGJhc2UgY2xhc3NlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9iYXNpY19pb3MuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2lvc30KKyAqLworCisjaWZuZGVmIF9CQVNJQ19JT1NfSAorI2RlZmluZSBfQkFTSUNfSU9TX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2xvY2FsZWZ3ZC5oPgorI2luY2x1ZGUgPGJpdHMvbG9jYWxlX2NsYXNzZXMuaD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZV9mYWNldHMuaD4KKyNpbmNsdWRlIDxiaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGlubGluZSBjb25zdCBfRmFjZXQmCisgICAgX19jaGVja19mYWNldChjb25zdCBfRmFjZXQqIF9fZikKKyAgICB7CisgICAgICBpZiAoIV9fZikKKwlfX3Rocm93X2JhZF9jYXN0KCk7CisgICAgICByZXR1cm4gKl9fZjsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgVGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9zLCB2aXJ0dWFsIGJhc2UgY2xhc3MgZm9yIGFsbAorICAgKiAgc3RyZWFtIGNsYXNzZXMuIAorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIEB0cGFyYW0gX0NoYXJUICBUeXBlIG9mIGNoYXJhY3RlciBzdHJlYW0uCisgICAqICBAdHBhcmFtIF9UcmFpdHMgIFRyYWl0cyBmb3IgY2hhcmFjdGVyIHR5cGUsIGRlZmF1bHRzIHRvCisgICAqICAgICAgICAgICAgICAgICAgIGNoYXJfdHJhaXRzPF9DaGFyVD4uCisgICAqCisgICAqICBNb3N0IG9mIHRoZSBtZW1iZXIgZnVuY3Rpb25zIGNhbGxlZCBkaXNwYXRjaGVkIG9uIHN0cmVhbSBvYmplY3RzCisgICAqICAoZS5nLiwgQGMgc3RkOjpjb3V0LmZvbyhiYXIpOykgYXJlIGNvbnNvbGlkYXRlZCBpbiB0aGlzIGNsYXNzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgYmFzaWNfaW9zIDogcHVibGljIGlvc19iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIFRoZXNlIGFyZSBzdGFuZGFyZCB0eXBlcy4gIFRoZXkgcGVybWl0IGEgc3RhbmRhcmRpemVkIHdheSBvZgorICAgICAgICogIHJlZmVycmluZyB0byBuYW1lcyBvZiAob3IgbmFtZXMgZGVwZW5kZW50IG9uKSB0aGUgdGVtcGxhdGUKKyAgICAgICAqICBwYXJhbWV0ZXJzLCB3aGljaCBhcmUgc3BlY2lmaWMgdG8gdGhlIGltcGxlbWVudGF0aW9uLgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX0NoYXJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSAgICAgICAgICAgICBpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgICAgICAgICAgICAgcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlICAgICAgICAgICAgIG9mZl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgVGhlc2UgYXJlIG5vbi1zdGFuZGFyZCB0eXBlcy4KKyAgICAgICovCisgICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGVfdHlwZTsKKyAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiA+CisJCQkJCQkgICAgIF9fbnVtX3B1dF90eXBlOworICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+ID4KKwkJCQkJCSAgICAgX19udW1fZ2V0X3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIC8vIERhdGEgbWVtYmVyczoKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qICAgICAgICAgICAgICAgIF9NX3RpZTsKKyAgICAgIG11dGFibGUgY2hhcl90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZmlsbDsKKyAgICAgIG11dGFibGUgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZmlsbF9pbml0OworICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qICAgICAgICAgICAgICBfTV9zdHJlYW1idWY7CisKKyAgICAgIC8vIENhY2hlZCB1c2VfZmFjZXQ8Y3R5cGU+LCB3aGljaCBpcyBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUgaW5mby4KKyAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fY3R5cGU7CisgICAgICAvLyBGb3Igb3N0cmVhbS4KKyAgICAgIGNvbnN0IF9fbnVtX3B1dF90eXBlKiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fbnVtX3B1dDsKKyAgICAgIC8vIEZvciBpc3RyZWFtLgorICAgICAgY29uc3QgX19udW1fZ2V0X3R5cGUqICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9udW1fZ2V0OworCisgICAgcHVibGljOgorICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgcXVpY2stYW5kLWVhc3kgc3RhdHVzIGNoZWNrLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGFsbG93cyB5b3UgdG8gd3JpdGUgY29uc3RydWN0cyBzdWNoIGFzCisgICAgICAgKiAgPGNvZGU+aWYgKCFhX3N0cmVhbSkgLi4uPC9jb2RlPiBhbmQgPGNvZGU+d2hpbGUgKGFfc3RyZWFtKSAuLi48L2NvZGU+CisgICAgICAqLworICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybnMgdGhlIGVycm9yIHN0YXRlIG9mIHRoZSBzdHJlYW0gYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIEEgYml0IHBhdHRlcm4gKHdlbGwsIGlzbid0IGV2ZXJ5dGhpbmc/KQorICAgICAgICoKKyAgICAgICAqICBTZWUgc3RkOjppb3NfYmFzZTo6aW9zdGF0ZSBmb3IgdGhlIHBvc3NpYmxlIGJpdCB2YWx1ZXMuICBNb3N0CisgICAgICAgKiAgdXNlcnMgd2lsbCBjYWxsIG9uZSBvZiB0aGUgaW50ZXJwcmV0aW5nIHdyYXBwZXJzLCBlLmcuLCBnb29kKCkuCisgICAgICAqLworICAgICAgaW9zdGF0ZQorICAgICAgcmRzdGF0ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBbUmVdc2V0cyB0aGUgZXJyb3Igc3RhdGUuCisgICAgICAgKiAgQHBhcmFtICBfX3N0YXRlICBUaGUgbmV3IHN0YXRlIGZsYWcocykgdG8gc2V0LgorICAgICAgICoKKyAgICAgICAqICBTZWUgc3RkOjppb3NfYmFzZTo6aW9zdGF0ZSBmb3IgdGhlIHBvc3NpYmxlIGJpdCB2YWx1ZXMuICBNb3N0CisgICAgICAgKiAgdXNlcnMgd2lsbCBub3QgbmVlZCB0byBwYXNzIGFuIGFyZ3VtZW50LgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldHMgYWRkaXRpb25hbCBmbGFncyBpbiB0aGUgZXJyb3Igc3RhdGUuCisgICAgICAgKiAgQHBhcmFtICBfX3N0YXRlICBUaGUgYWRkaXRpb25hbCBzdGF0ZSBmbGFnKHMpIHRvIHNldC4KKyAgICAgICAqCisgICAgICAgKiAgU2VlIHN0ZDo6aW9zX2Jhc2U6Omlvc3RhdGUgZm9yIHRoZSBwb3NzaWJsZSBiaXQgdmFsdWVzLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKKyAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KKworICAgICAgLy8gRmxpcCB0aGUgaW50ZXJuYWwgc3RhdGUgb24gZm9yIHRoZSBwcm9wZXIgc3RhdGUgYml0cywgdGhlbiByZQorICAgICAgLy8gdGhyb3dzIHRoZSBwcm9wYWdhdGVkIGV4Y2VwdGlvbiBpZiBiaXQgYWxzbyBzZXQgaW4KKyAgICAgIC8vIGV4Y2VwdGlvbnMoKS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKKyAgICAgIHsKKwkvLyAyNy42LjEuMi4xIENvbW1vbiByZXF1aXJlbWVudHMuCisJLy8gVHVybiB0aGlzIG9uIHdpdGhvdXQgY2F1c2luZyBhbiBpb3M6OmZhaWx1cmUgdG8gYmUgdGhyb3duLgorCV9NX3N0cmVhbWJ1Zl9zdGF0ZSB8PSBfX3N0YXRlOworCWlmICh0aGlzLT5leGNlcHRpb25zKCkgJiBfX3N0YXRlKQorCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmFzdCBlcnJvciBjaGVja2luZy4KKyAgICAgICAqICBAcmV0dXJuICBUcnVlIGlmIG5vIGVycm9yIGZsYWdzIGFyZSBzZXQuCisgICAgICAgKgorICAgICAgICogIEEgd3JhcHBlciBhcm91bmQgcmRzdGF0ZS4KKyAgICAgICovCisgICAgICBib29sCisgICAgICBnb29kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3RhdGUoKSA9PSAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmFzdCBlcnJvciBjaGVja2luZy4KKyAgICAgICAqICBAcmV0dXJuICBUcnVlIGlmIHRoZSBlb2ZiaXQgaXMgc2V0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgb3RoZXIgaW9zdGF0ZSBmbGFncyBtYXkgYWxzbyBiZSBzZXQuCisgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW9mKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGYXN0IGVycm9yIGNoZWNraW5nLgorICAgICAgICogIEByZXR1cm4gIFRydWUgaWYgZWl0aGVyIHRoZSBiYWRiaXQgb3IgdGhlIGZhaWxiaXQgaXMgc2V0LgorICAgICAgICoKKyAgICAgICAqICBDaGVja2luZyB0aGUgYmFkYml0IGluIGZhaWwoKSBpcyBoaXN0b3JpY2FsIHByYWN0aWNlLgorICAgICAgICogIE5vdGUgdGhhdCBvdGhlciBpb3N0YXRlIGZsYWdzIG1heSBhbHNvIGJlIHNldC4KKyAgICAgICovCisgICAgICBib29sCisgICAgICBmYWlsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkpICE9IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGYXN0IGVycm9yIGNoZWNraW5nLgorICAgICAgICogIEByZXR1cm4gIFRydWUgaWYgdGhlIGJhZGJpdCBpcyBzZXQuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCBvdGhlciBpb3N0YXRlIGZsYWdzIG1heSBhbHNvIGJlIHNldC4KKyAgICAgICovCisgICAgICBib29sCisgICAgICBiYWQoKSBjb25zdAorICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRocm93aW5nIGV4Y2VwdGlvbnMgb24gZXJyb3JzLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGV4Y2VwdGlvbnMgbWFzay4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjaGFuZ2VzIG5vdGhpbmcgaW4gdGhlIHN0cmVhbS4gIFNlZSB0aGUgb25lLWFyZ3VtZW50IHZlcnNpb24KKyAgICAgICAqICBvZiBleGNlcHRpb25zKGlvc3RhdGUpIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgKi8KKyAgICAgIGlvc3RhdGUKKyAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhyb3dpbmcgZXhjZXB0aW9ucyBvbiBlcnJvcnMuCisgICAgICAgKiAgQHBhcmFtICBfX2V4Y2VwdCAgVGhlIG5ldyBleGNlcHRpb25zIG1hc2suCisgICAgICAgKgorICAgICAgICogIEJ5IGRlZmF1bHQsIGVycm9yIGZsYWdzIGFyZSBzZXQgc2lsZW50bHkuICBZb3UgY2FuIHNldCBhbgorICAgICAgICogIGV4Y2VwdGlvbnMgbWFzayBmb3IgZWFjaCBzdHJlYW07IGlmIGEgYml0IGluIHRoZSBtYXNrIGJlY29tZXMgc2V0CisgICAgICAgKiAgaW4gdGhlIGVycm9yIGZsYWdzLCB0aGVuIGFuIGV4Y2VwdGlvbiBvZiB0eXBlCisgICAgICAgKiAgc3RkOjppb3NfYmFzZTo6ZmFpbHVyZSBpcyB0aHJvd24uCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBlcnJvciBmbGFnIGlzIGFscmVhZHkgc2V0IHdoZW4gdGhlIGV4Y2VwdGlvbnMgbWFzayBpcworICAgICAgICogIGFkZGVkLCB0aGUgZXhjZXB0aW9uIGlzIGltbWVkaWF0ZWx5IHRocm93bi4gIFRyeSBydW5uaW5nIHRoZQorICAgICAgICogIGZvbGxvd2luZyB1bmRlciBHQ0MgMy4xIG9yIGxhdGVyOgorICAgICAgICogIEBjb2RlCisgICAgICAgKiAgI2luY2x1ZGUgPGlvc3RyZWFtPgorICAgICAgICogICNpbmNsdWRlIDxmc3RyZWFtPgorICAgICAgICogICNpbmNsdWRlIDxleGNlcHRpb24+CisgICAgICAgKgorICAgICAgICogIGludCBtYWluKCkKKyAgICAgICAqICB7CisgICAgICAgKiAgICAgIHN0ZDo6c2V0X3Rlcm1pbmF0ZSAoX19nbnVfY3h4OjpfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIpOworICAgICAgICoKKyAgICAgICAqICAgICAgc3RkOjppZnN0cmVhbSBmICgiL2V0Yy9tb3RkIik7CisgICAgICAgKgorICAgICAgICogICAgICBzdGQ6OmNlcnIgPDwgIlNldHRpbmcgYmFkYml0XG4iOworICAgICAgICogICAgICBmLnNldHN0YXRlIChzdGQ6Omlvc19iYXNlOjpiYWRiaXQpOworICAgICAgICoKKyAgICAgICAqICAgICAgc3RkOjpjZXJyIDw8ICJTZXR0aW5nIGV4Y2VwdGlvbiBtYXNrXG4iOworICAgICAgICogICAgICBmLmV4Y2VwdGlvbnMgKHN0ZDo6aW9zX2Jhc2U6OmJhZGJpdCk7CisgICAgICAgKiAgfQorICAgICAgICogIEBlbmRjb2RlCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQorICAgICAgeworICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKKyAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKKyAgICAgIH0KKworICAgICAgLy8gQ29uc3RydWN0b3IvZGVzdHJ1Y3RvcjoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoZSBwYXJhbWV0ZXIgaXMgcGFzc2VkIGJ5IGRlcml2ZWQgc3RyZWFtcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQorICAgICAgOiBpb3NfYmFzZSgpLCBfTV90aWUoMCksIF9NX2ZpbGwoKSwgX01fZmlsbF9pbml0KGZhbHNlKSwgX01fc3RyZWFtYnVmKDApLAorCV9NX2N0eXBlKDApLCBfTV9udW1fcHV0KDApLCBfTV9udW1fZ2V0KDApCisgICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGRlc3RydWN0b3IgZG9lcyBub3RoaW5nLiAgTW9yZSBzcGVjaWZpY2FsbHksIGl0IGRvZXMgbm90CisgICAgICAgKiAgZGVzdHJveSB0aGUgc3RyZWFtYnVmIGhlbGQgYnkgcmRidWYoKS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsCisgICAgICB+YmFzaWNfaW9zKCkgeyB9CisKKyAgICAgIC8vIE1lbWJlcnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZldGNoZXMgdGhlIGN1cnJlbnQgQGUgdGllZCBzdHJlYW0uCisgICAgICAgKiAgQHJldHVybiAgQSBwb2ludGVyIHRvIHRoZSB0aWVkIHN0cmVhbSwgb3IgTlVMTCBpZiB0aGUgc3RyZWFtIGlzCisgICAgICAgKiAgICAgICAgICAgbm90IHRpZWQuCisgICAgICAgKgorICAgICAgICogIEEgc3RyZWFtIG1heSBiZSBAZSB0aWVkIChvciBzeW5jaHJvbml6ZWQpIHRvIGEgc2Vjb25kIG91dHB1dAorICAgICAgICogIHN0cmVhbS4gIFdoZW4gdGhpcyBzdHJlYW0gcGVyZm9ybXMgYW55IEkvTywgdGhlIHRpZWQgc3RyZWFtIGlzCisgICAgICAgKiAgZmlyc3QgZmx1c2hlZC4gIEZvciBleGFtcGxlLCBAYyBzdGQ6OmNpbiBpcyB0aWVkIHRvIEBjIHN0ZDo6Y291dC4KKyAgICAgICovCisgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCisgICAgICB0aWUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdGllOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGllcyB0aGlzIHN0cmVhbSB0byBhbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgX190aWVzdHIgIFRoZSBvdXRwdXQgc3RyZWFtLgorICAgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91c2x5IHRpZWQgb3V0cHV0IHN0cmVhbSwgb3IgTlVMTCBpZiB0aGUgc3RyZWFtCisgICAgICAgKiAgICAgICAgICAgd2FzIG5vdCB0aWVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHNldHMgdXAgYSBuZXcgdGllOyBzZWUgdGllKCkgZm9yIG1vcmUuCisgICAgICAqLworICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgorICAgICAgdGllKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCisgICAgICB7CisgICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7CisgICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOworICAgICAgICByZXR1cm4gX19vbGQ7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzaW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY3VycmVudCBzdHJlYW0gYnVmZmVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIHN0cmVhbS4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKKyAgICAgIHJkYnVmKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENoYW5naW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fc2IgIFRoZSBuZXcgc3RyZWFtIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgcHJldmlvdXMgc3RyZWFtIGJ1ZmZlci4KKyAgICAgICAqCisgICAgICAgKiAgQXNzb2NpYXRlcyBhIG5ldyBidWZmZXIgd2l0aCB0aGUgY3VycmVudCBzdHJlYW0sIGFuZCBjbGVhcnMgdGhlCisgICAgICAgKiAgZXJyb3Igc3RhdGUuCisgICAgICAgKgorICAgICAgICogIER1ZSB0byBoaXN0b3JpY2FsIGFjY2lkZW50cyB3aGljaCB0aGUgTFdHIHJlZnVzZXMgdG8gY29ycmVjdCwgdGhlCisgICAgICAgKiAgSS9PIGxpYnJhcnkgc3VmZmVycyBmcm9tIGEgZGVzaWduIGVycm9yOiAgdGhpcyBmdW5jdGlvbiBpcyBoaWRkZW4KKyAgICAgICAqICBpbiBkZXJpdmVkIGNsYXNzZXMgYnkgb3ZlcnJpZGVzIG9mIHRoZSB6ZXJvLWFyZ3VtZW50IEBjIHJkYnVmKCksCisgICAgICAgKiAgd2hpY2ggaXMgbm9uLXZpcnR1YWwgZm9yIGh5c3RlcmljYWwgcmFpc2lucy4gIEFzIGEgcmVzdWx0LCB5b3UKKyAgICAgICAqICBtdXN0IHVzZSBleHBsaWNpdCBxdWFsaWZpY2F0aW9ucyB0byBhY2Nlc3MgdGhpcyBmdW5jdGlvbiB2aWEgYW55CisgICAgICAgKiAgZGVyaXZlZCBjbGFzcy4gIEZvciBleGFtcGxlOgorICAgICAgICoKKyAgICAgICAqICBAY29kZQorICAgICAgICogIHN0ZDo6ZnN0cmVhbSAgICAgZm9vOyAgICAgICAgIC8vIG9yIHNvbWUgb3RoZXIgZGVyaXZlZCB0eXBlCisgICAgICAgKiAgc3RkOjpzdHJlYW1idWYqICBwID0gLi4uLi47CisgICAgICAgKgorICAgICAgICogIGZvby5pb3M6OnJkYnVmKHApOyAgICAgICAgICAgIC8vIGlvcyA9PSBiYXNpY19pb3M8Y2hhcj4KKyAgICAgICAqICBAZW5kY29kZQorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgorICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvcGllcyBmaWVsZHMgb2YgX19yaHMgaW50byB0aGlzLgorICAgICAgICogIEBwYXJhbSAgX19yaHMgIFRoZSBzb3VyY2UgdmFsdWVzIGZvciB0aGUgY29waWVzLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIGZpZWxkcyBvZiBfX3JocyBhcmUgY29waWVkIGludG8gdGhpcyBvYmplY3QgZXhjZXB0IHRoYXQgcmRidWYoKQorICAgICAgICogIGFuZCByZHN0YXRlKCkgcmVtYWluIHVuY2hhbmdlZC4gIEFsbCB2YWx1ZXMgaW4gdGhlIHB3b3JkIGFuZCBpd29yZAorICAgICAgICogIGFycmF5cyBhcmUgY29waWVkLiAgQmVmb3JlIGNvcHlpbmcsIGVhY2ggY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoCisgICAgICAgKiAgZXJhc2VfZXZlbnQuICBBZnRlciBjb3B5aW5nLCBlYWNoIChuZXcpIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aAorICAgICAgICogIGNvcHlmbXRfZXZlbnQuICBUaGUgZmluYWwgc3RlcCBpcyB0byBjb3B5IGV4Y2VwdGlvbnMoKS4KKyAgICAgICovCisgICAgICBiYXNpY19pb3MmCisgICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHJpZXZlcyB0aGUgQGEgZW1wdHkgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGZpbGwgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBJdCBkZWZhdWx0cyB0byBhIHNwYWNlICgnICcpIGluIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIGZpbGwoKSBjb25zdAorICAgICAgeworCWlmICghX01fZmlsbF9pbml0KQorCSAgeworCSAgICBfTV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsKKwkgICAgX01fZmlsbF9pbml0ID0gdHJ1ZTsKKwkgIH0KKwlyZXR1cm4gX01fZmlsbDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXRzIGEgbmV3IEBhIGVtcHR5IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gIF9fY2ggIFRoZSBuZXcgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91cyBmaWxsIGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGZpbGwgY2hhcmFjdGVyIGlzIHVzZWQgdG8gZmlsbCBvdXQgc3BhY2Ugd2hlbiBQKyBjaGFyYWN0ZXJzCisgICAgICAgKiAgaGF2ZSBiZWVuIHJlcXVlc3RlZCAoZS5nLiwgdmlhIHNldHcpLCBRIGNoYXJhY3RlcnMgYXJlIGFjdHVhbGx5CisgICAgICAgKiAgdXNlZCwgYW5kIFE8UC4gIEl0IGRlZmF1bHRzIHRvIGEgc3BhY2UgKCcgJykgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLgorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZQorICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkKKyAgICAgIHsKKwljaGFyX3R5cGUgX19vbGQgPSB0aGlzLT5maWxsKCk7CisJX01fZmlsbCA9IF9fY2g7CisJcmV0dXJuIF9fb2xkOworICAgICAgfQorCisgICAgICAvLyBMb2NhbGVzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNb3ZlcyB0byBhIG5ldyBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBfX2xvYyAgVGhlIG5ldyBsb2NhbGUuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIGxvY2FsZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgaW9zX2Jhc2U6OmltYnVlKGxvYyksIGFuZCBpZiBhIHN0cmVhbSBidWZmZXIgaXMgYXNzb2NpYXRlZAorICAgICAgICogIHdpdGggdGhpcyBzdHJlYW0sIGNhbGxzIHRoYXQgYnVmZmVyJ3MgQGMgcHViaW1idWUobG9jKS4KKyAgICAgICAqCisgICAgICAgKiAgQWRkaXRpb25hbCBsMTBuIG5vdGVzIGFyZSBhdAorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvbG9jYWxpemF0aW9uLmh0bWwKKyAgICAgICovCisgICAgICBsb2NhbGUKKyAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNxdWVlemVzIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIFRoZSBjaGFyYWN0ZXIgdG8gbmFycm93LgorICAgICAgICogIEBwYXJhbSAgX19kZmF1bHQgIFRoZSBjaGFyYWN0ZXIgdG8gbmFycm93LgorICAgICAgICogIEByZXR1cm4gIFRoZSBuYXJyb3dlZCBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIE1hcHMgYSBjaGFyYWN0ZXIgb2YgQGMgY2hhcl90eXBlIHRvIGEgY2hhcmFjdGVyIG9mIEBjIGNoYXIsCisgICAgICAgKiAgaWYgcG9zc2libGUuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgdGhlIHJlc3VsdCBvZgorICAgICAgICogIEBjb2RlCisgICAgICAgKiAgICBzdGQ6OnVzZV9mYWNldDxjdHlwZTxjaGFyX3R5cGU+ID4oZ2V0bG9jKCkpLm5hcnJvdyhjLGRmYXVsdCkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICoKKyAgICAgICAqICBBZGRpdGlvbmFsIGwxMG4gbm90ZXMgYXJlIGF0CisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9sb2NhbGl6YXRpb24uaHRtbAorICAgICAgKi8KKyAgICAgIGNoYXIKKyAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorICAgICAgeyByZXR1cm4gX19jaGVja19mYWNldChfTV9jdHlwZSkubmFycm93KF9fYywgX19kZmF1bHQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW5zIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIFRoZSBjaGFyYWN0ZXIgdG8gd2lkZW4uCisgICAgICAgKiAgQHJldHVybiAgVGhlIHdpZGVuZWQgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBNYXBzIGEgY2hhcmFjdGVyIG9mIEBjIGNoYXIgdG8gYSBjaGFyYWN0ZXIgb2YgQGMgY2hhcl90eXBlLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIHRoZSByZXN1bHQgb2YKKyAgICAgICAqICBAY29kZQorICAgICAgICogICAgc3RkOjp1c2VfZmFjZXQ8Y3R5cGU8Y2hhcl90eXBlPiA+KGdldGxvYygpKS53aWRlbihjKQorICAgICAgICogIEBlbmRjb2RlCisgICAgICAgKgorICAgICAgICogIEFkZGl0aW9uYWwgbDEwbiBub3RlcyBhcmUgYXQKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2xvY2FsaXphdGlvbi5odG1sCisgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fY2hlY2tfZmFjZXQoX01fY3R5cGUpLndpZGVuKF9fYyk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vIDI3LjQuNS4xICBiYXNpY19pb3MgY29uc3RydWN0b3JzCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEVtcHR5LgorICAgICAgICoKKyAgICAgICAqICBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBkb2VzIG5vdGhpbmcgYW5kIGlzIG5vdCBub3JtYWxseQorICAgICAgICogIGFjY2Vzc2libGUgdG8gdXNlcnMuCisgICAgICAqLworICAgICAgYmFzaWNfaW9zKCkKKyAgICAgIDogaW9zX2Jhc2UoKSwgX01fdGllKDApLCBfTV9maWxsKGNoYXJfdHlwZSgpKSwgX01fZmlsbF9pbml0KGZhbHNlKSwgCisJX01fc3RyZWFtYnVmKDApLCBfTV9jdHlwZSgwKSwgX01fbnVtX3B1dCgwKSwgX01fbnVtX2dldCgwKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWxsIHNldHVwIGlzIHBlcmZvcm1lZCBoZXJlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBwdWJsaWMgY29uc3RydWN0b3IuICBJdCBpcyBub3QgdmlydHVhbCBhbmQKKyAgICAgICAqICBjYW5ub3QgYmUgcmVkZWZpbmVkLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOworCisgICAgICB2b2lkCisgICAgICBfTV9jYWNoZV9sb2NhbGUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjaW5jbHVkZSA8Yml0cy9iYXNpY19pb3MudGNjPgorCisjZW5kaWYgLyogX0JBU0lDX0lPU19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYmFzaWNfaW9zLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9iYXNpY19pb3MudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNDVhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYmFzaWNfaW9zLnRjYwpAQCAtMCwwICsxLDE4OCBAQAorLy8gYmFzaWNfaW9zIG1lbWJlciBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYmFzaWNfaW9zLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2lvc30KKyAqLworCisjaWZuZGVmIF9CQVNJQ19JT1NfVENDCisjZGVmaW5lIF9CQVNJQ19JT1NfVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHZvaWQKKyAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQorICAgIHsKKyAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQorCV9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7CisgICAgICBlbHNlCisJICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0OworICAgICAgaWYgKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIHRoaXMtPnJkc3RhdGUoKSkKKwlfX3Rocm93X2lvc19mYWlsdXJlKF9fTigiYmFzaWNfaW9zOjpjbGVhciIpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgorICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKKyAgICB7CisgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CisgICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOworICAgICAgdGhpcy0+Y2xlYXIoKTsKKyAgICAgIHJldHVybiBfX29sZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjkyLiBlZmZlY3RzIG9mIGEuY29weWZtdCAoYSkKKyAgICAgIGlmICh0aGlzICE9ICZfX3JocykKKwl7CisJICAvLyBQZXIgMjcuMS4xLCBkbyBub3QgY2FsbCBpbWJ1ZSwgeWV0IG11c3QgdHJhc2ggYWxsIGNhY2hlcworCSAgLy8gYXNzb2NpYXRlZCB3aXRoIGltYnVlKCkKKworCSAgLy8gQWxsb2MgYW55IG5ldyB3b3JkIGFycmF5IGZpcnN0LCBzbyBpZiBpdCBmYWlscyB3ZSBoYXZlICJyb2xsYmFjayIuCisJICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMuX01fd29yZF9zaXplIDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPworCSAgICAgICAgICAgICAgICAgICAgIF9NX2xvY2FsX3dvcmQgOiBuZXcgX1dvcmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CisKKwkgIC8vIEJ1bXAgcmVmcyBiZWZvcmUgZG9pbmcgY2FsbGJhY2tzLCBmb3Igc2FmZXR5LgorCSAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBfX3Jocy5fTV9jYWxsYmFja3M7CisJICBpZiAoX19jYikKKwkgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOworCSAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZlbnQpOworCSAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKKwkgICAgeworCSAgICAgIGRlbGV0ZSBbXSBfTV93b3JkOworCSAgICAgIF9NX3dvcmQgPSAwOworCSAgICB9CisJICBfTV9kaXNwb3NlX2NhbGxiYWNrcygpOworCisJICAvLyBOQjogRG9uJ3Qgd2FudCBhbnkgYWRkZWQgZHVyaW5nIGFib3ZlLgorCSAgX01fY2FsbGJhY2tzID0gX19jYjsKKwkgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6ZTsgKytfX2kpCisJICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRbX19pXTsKKwkgIF9NX3dvcmQgPSBfX3dvcmRzOworCSAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOworCisJICB0aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsKKwkgIHRoaXMtPndpZHRoKF9fcmhzLndpZHRoKCkpOworCSAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKKwkgIHRoaXMtPnRpZShfX3Jocy50aWUoKSk7CisJICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7CisJICBfTV9pb3NfbG9jYWxlID0gX19yaHMuZ2V0bG9jKCk7CisJICBfTV9jYWNoZV9sb2NhbGUoX01faW9zX2xvY2FsZSk7CisKKwkgIF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRfZXZlbnQpOworCisJICAvLyBUaGUgbmV4dCBpcyByZXF1aXJlZCB0byBiZSB0aGUgbGFzdCBhc3NpZ25tZW50LgorCSAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgLy8gTG9jYWxlczoKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGxvY2FsZQorICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsKKyAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7CisgICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOworICAgICAgX01fY2FjaGVfbG9jYWxlKF9fbG9jKTsKKyAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApCisJdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19sb2MpOworICAgICAgcmV0dXJuIF9fb2xkOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQorICAgIHsKKyAgICAgIC8vIE5COiBUaGlzIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgb2JqZWN0LgorICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKKworICAgICAgLy8gQ2FjaGUgbG9jYWxlIGRhdGEgYW5kIHNwZWNpZmljIGZhY2V0cyB1c2VkIGJ5IGlvc3RyZWFtcy4KKyAgICAgIF9NX2NhY2hlX2xvY2FsZShfTV9pb3NfbG9jYWxlKTsKKworICAgICAgLy8gTkI6IFRoZSAyNy40LjQuMSBQb3N0Y29uZGl0aW9ucyBUYWJsZSBzcGVjaWZpZXMgcmVxdWlyZW1lbnRzCisgICAgICAvLyBhZnRlciBiYXNpY19pb3M6OmluaXQoKSBoYXMgYmVlbiBjYWxsZWQuIEFzIHBhcnQgb2YgdGhpcywKKyAgICAgIC8vIGZpbGwoKSBtdXN0IHJldHVybiB3aWRlbignICcpIGFueSB0aW1lIGFmdGVyIGluaXQoKSBoYXMgYmVlbgorICAgICAgLy8gY2FsbGVkLCB3aGljaCBuZWVkcyBhbiBpbWJ1ZWQgY3R5cGUgZmFjZXQgb2YgY2hhcl90eXBlIHRvCisgICAgICAvLyByZXR1cm4gd2l0aG91dCB0aHJvd2luZyBhbiBleGNlcHRpb24uIFVuZm9ydHVuYXRlbHksCisgICAgICAvLyBjdHlwZTxjaGFyX3R5cGU+IGlzIG5vdCBuZWNlc3NhcmlseSBhIHJlcXVpcmVkIGZhY2V0LCBzbworICAgICAgLy8gc3RyZWFtcyB3aXRoIGNoYXJfdHlwZSAhPSBbY2hhciwgd2NoYXJfdF0gd2lsbCBub3QgaGF2ZSBpdCBieQorICAgICAgLy8gZGVmYXVsdC4gQmVjYXVzZSBvZiB0aGlzLCB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgX01fZmlsbCBpcworICAgICAgLy8gY29uc3RydWN0ZWQgb24gdGhlIGZpcnN0IGNhbGwgb2YgZmlsbCgpLiBUaGF0IHdheSwKKyAgICAgIC8vIHVuZm9ybWF0dGVkIGlucHV0IGFuZCBvdXRwdXQgd2l0aCBub24tcmVxdWlyZWQgYmFzaWNfaW9zCisgICAgICAvLyBpbnN0YW50aWF0aW9ucyBpcyBwb3NzaWJsZSBldmVuIHdpdGhvdXQgaW1idWluZyB0aGUgZXhwZWN0ZWQKKyAgICAgIC8vIGN0eXBlPGNoYXJfdHlwZT4gZmFjZXQuCisgICAgICBfTV9maWxsID0gX0NoYXJUKCk7CisgICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsKKworICAgICAgX01fdGllID0gMDsKKyAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CisgICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOworICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB2b2lkCisgICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Ol9NX2NhY2hlX2xvY2FsZShjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KGhhc19mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSwgdHJ1ZSkpCisJX01fY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpOworICAgICAgZWxzZQorCV9NX2N0eXBlID0gMDsKKworICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoaGFzX2ZhY2V0PF9fbnVtX3B1dF90eXBlPihfX2xvYyksIHRydWUpKQorCV9NX251bV9wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtX3B1dF90eXBlPihfX2xvYyk7CisgICAgICBlbHNlCisJX01fbnVtX3B1dCA9IDA7CisKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KGhhc19mYWNldDxfX251bV9nZXRfdHlwZT4oX19sb2MpLCB0cnVlKSkKKwlfTV9udW1fZ2V0ID0gJnVzZV9mYWNldDxfX251bV9nZXRfdHlwZT4oX19sb2MpOworICAgICAgZWxzZQorCV9NX251bV9nZXQgPSAwOworICAgIH0KKworICAvLyBJbmhpYml0IGltcGxpY2l0IGluc3RhbnRpYXRpb25zIGZvciByZXF1aXJlZCBpbnN0YW50aWF0aW9ucywKKyAgLy8gd2hpY2ggYXJlIGRlZmluZWQgdmlhIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIGVsc2V3aGVyZS4KKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8d2NoYXJfdD47CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9iYXNpY19zdHJpbmcuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9iYXNpY19zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2JkOWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2Jhc2ljX3N0cmluZy5oCkBAIC0wLDAgKzEsMzExMSBAQAorLy8gQ29tcG9uZW50cyBmb3IgbWFuaXB1bGF0aW5nIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2Jhc2ljX3N0cmluZy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7c3RyaW5nfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMSBTdHJpbmdzIGxpYnJhcnkKKy8vCisKKyNpZm5kZWYgX0JBU0lDX1NUUklOR19ICisjZGVmaW5lIF9CQVNJQ19TVFJJTkdfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGV4dC9hdG9taWNpdHkuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBjbGFzcyBiYXNpY19zdHJpbmcgYmFzaWNfc3RyaW5nLmggPHN0cmluZz4KKyAgICogIEBicmllZiAgTWFuYWdpbmcgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgYW5kIGNoYXJhY3Rlci1saWtlIG9iamVjdHMuCisgICAqCisgICAqICBAaW5ncm91cCBzdHJpbmdzCisgICAqICBAaW5ncm91cCBzZXF1ZW5jZXMKKyAgICoKKyAgICogIEB0cGFyYW0gX0NoYXJUICBUeXBlIG9mIGNoYXJhY3RlcgorICAgKiAgQHRwYXJhbSBfVHJhaXRzICBUcmFpdHMgZm9yIGNoYXJhY3RlciB0eXBlLCBkZWZhdWx0cyB0bworICAgKiAgICAgICAgICAgICAgICAgICBjaGFyX3RyYWl0czxfQ2hhclQ+LgorICAgKiAgQHRwYXJhbSBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8X0NoYXJUPi4KKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjYiPnJldmVyc2libGUgY29udGFpbmVyPC9hPiwgYW5kIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY3Ij5zZXF1ZW5jZTwvYT4uICBPZiB0aGUKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY4Ij5vcHRpb25hbCBzZXF1ZW5jZSByZXF1aXJlbWVudHM8L2E+LCBvbmx5CisgICAqICBAYyBwdXNoX2JhY2ssIEBjIGF0LCBhbmQgQGMgJWFycmF5IGFjY2VzcyBhcmUgc3VwcG9ydGVkLgorICAgKgorICAgKiAgQGRvY3RvZG8KKyAgICoKKyAgICoKKyAgICogIERvY3VtZW50YXRpb24/ICBXaGF0J3MgdGhhdD8KKyAgICogIE5hdGhhbiBNeWVycyA8bmNtQGNhbnRyaXAub3JnPi4KKyAgICoKKyAgICogIEEgc3RyaW5nIGxvb2tzIGxpa2UgdGhpczoKKyAgICoKKyAgICogIEBjb2RlCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfUmVwXQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9sZW5ndGgKKyAgICogICBbYmFzaWNfc3RyaW5nPGNoYXJfdHlwZT5dICAgICAgICAgICAgX01fY2FwYWNpdHkKKyAgICogICBfTV9kYXRhcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgX01fcmVmY291bnQKKyAgICogICBfTV9wIC0tLS0tLS0tLS0tLS0tLS0+ICAgICAgICAgICAgICAgdW5uYW1lZCBhcnJheSBvZiBjaGFyX3R5cGUKKyAgICogIEBlbmRjb2RlCisgICAqCisgICAqICBXaGVyZSB0aGUgX01fcCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLCBhbmQKKyAgICogIHlvdSBjYXN0IGl0IHRvIGEgcG9pbnRlci10by1fUmVwIGFuZCBzdWJ0cmFjdCAxIHRvIGdldCBhCisgICAqICBwb2ludGVyIHRvIHRoZSBoZWFkZXIuCisgICAqCisgICAqICBUaGlzIGFwcHJvYWNoIGhhcyB0aGUgZW5vcm1vdXMgYWR2YW50YWdlIHRoYXQgYSBzdHJpbmcgb2JqZWN0CisgICAqICByZXF1aXJlcyBvbmx5IG9uZSBhbGxvY2F0aW9uLiAgQWxsIHRoZSB1Z2xpbmVzcyBpcyBjb25maW5lZAorICAgKiAgd2l0aGluIGEgc2luZ2xlICVwYWlyIG9mIGlubGluZSBmdW5jdGlvbnMsIHdoaWNoIGVhY2ggY29tcGlsZSB0bworICAgKiAgYSBzaW5nbGUgQGEgYWRkIGluc3RydWN0aW9uOiBfUmVwOjpfTV9kYXRhKCksIGFuZAorICAgKiAgc3RyaW5nOjpfTV9yZXAoKTsgYW5kIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdoaWNoIGdldHMgYQorICAgKiAgYmxvY2sgb2YgcmF3IGJ5dGVzIGFuZCB3aXRoIHJvb20gZW5vdWdoIGFuZCBjb25zdHJ1Y3RzIGEgX1JlcAorICAgKiAgb2JqZWN0IGF0IHRoZSBmcm9udC4KKyAgICoKKyAgICogIFRoZSByZWFzb24geW91IHdhbnQgX01fZGF0YSBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVyICVhcnJheSBhbmQKKyAgICogIG5vdCB0aGUgX1JlcCBpcyBzbyB0aGF0IHRoZSBkZWJ1Z2dlciBjYW4gc2VlIHRoZSBzdHJpbmcKKyAgICogIGNvbnRlbnRzLiAoUHJvYmFibHkgd2Ugc2hvdWxkIGFkZCBhIG5vbi1pbmxpbmUgbWVtYmVyIHRvIGdldAorICAgKiAgdGhlIF9SZXAgZm9yIHRoZSBkZWJ1Z2dlciB0byB1c2UsIHNvIHVzZXJzIGNhbiBjaGVjayB0aGUgYWN0dWFsCisgICAqICBzdHJpbmcgbGVuZ3RoLikKKyAgICoKKyAgICogIE5vdGUgdGhhdCB0aGUgX1JlcCBvYmplY3QgaXMgYSBQT0Qgc28gdGhhdCB5b3UgY2FuIGhhdmUgYQorICAgKiAgc3RhdGljIDxlbT5lbXB0eSBzdHJpbmc8L2VtPiBfUmVwIG9iamVjdCBhbHJlYWR5IEBhIGNvbnN0cnVjdGVkIGJlZm9yZQorICAgKiAgc3RhdGljIGNvbnN0cnVjdG9ycyBoYXZlIHJ1bi4gIFRoZSByZWZlcmVuY2UtY291bnQgZW5jb2RpbmcgaXMKKyAgICogIGNob3NlbiBzbyB0aGF0IGEgMCBpbmRpY2F0ZXMgb25lIHJlZmVyZW5jZSwgc28geW91IG5ldmVyIHRyeSB0bworICAgKiAgZGVzdHJveSB0aGUgZW1wdHktc3RyaW5nIF9SZXAgb2JqZWN0LgorICAgKgorICAgKiAgQWxsIGJ1dCB0aGUgbGFzdCBwYXJhZ3JhcGggaXMgY29uc2lkZXJlZCBwcmV0dHkgY29udmVudGlvbmFsCisgICAqICBmb3IgYSBDKysgc3RyaW5nIGltcGxlbWVudGF0aW9uLgorICAqLworICAvLyAyMS4zICBUZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmcKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgYmFzaWNfc3RyaW5nCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfQ2hhclQ+OjpvdGhlciBfQ2hhclRfYWxsb2NfdHlwZTsKKworICAgICAgLy8gVHlwZXM6CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCQkgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZQkJICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYwkJCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhclRfYWxsb2NfdHlwZTo6c2l6ZV90eXBlCSAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpyZWZlcmVuY2UJICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnBvaW50ZXIJICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyCSAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+CWNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4JCSAgICByZXZlcnNlX2l0ZXJhdG9yOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIF9SZXA6IHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAgLy8gICBJbnZhcmlhbnRzOgorICAgICAgLy8gICAxLiBTdHJpbmcgcmVhbGx5IGNvbnRhaW5zIF9NX2xlbmd0aCArIDEgY2hhcmFjdGVyczogZHVlIHRvIDIxLjMuNAorICAgICAgLy8gICAgICBtdXN0IGJlIGtlcHQgbnVsbC10ZXJtaW5hdGVkLgorICAgICAgLy8gICAyLiBfTV9jYXBhY2l0eSA+PSBfTV9sZW5ndGgKKyAgICAgIC8vICAgICAgQWxsb2NhdGVkIG1lbW9yeSBpcyBhbHdheXMgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKS4KKyAgICAgIC8vICAgMy4gX01fcmVmY291bnQgaGFzIHRocmVlIHN0YXRlczoKKyAgICAgIC8vICAgICAgLTE6IGxlYWtlZCwgb25lIHJlZmVyZW5jZSwgbm8gcmVmLWNvcGllcyBhbGxvd2VkLCBub24tY29uc3QuCisgICAgICAvLyAgICAgICAwOiBvbmUgcmVmZXJlbmNlLCBub24tY29uc3QuCisgICAgICAvLyAgICAgbj4wOiBuICsgMSByZWZlcmVuY2VzLCBvcGVyYXRpb25zIHJlcXVpcmUgYSBsb2NrLCBjb25zdC4KKyAgICAgIC8vICAgNC4gQWxsIGZpZWxkcz09MCBpcyBhbiBlbXB0eSBzdHJpbmcsIGdpdmVuIHRoZSBleHRyYSBzdG9yYWdlCisgICAgICAvLyAgICAgIGJleW9uZC10aGUtZW5kIGZvciBhIG51bGwgdGVybWluYXRvcjsgdGh1cywgdGhlIHNoYXJlZAorICAgICAgLy8gICAgICBlbXB0eSBzdHJpbmcgcmVwcmVzZW50YXRpb24gbmVlZHMgbm8gY29uc3RydWN0b3IuCisKKyAgICAgIHN0cnVjdCBfUmVwX2Jhc2UKKyAgICAgIHsKKwlzaXplX3R5cGUJCV9NX2xlbmd0aDsKKwlzaXplX3R5cGUJCV9NX2NhcGFjaXR5OworCV9BdG9taWNfd29yZAkJX01fcmVmY291bnQ7CisgICAgICB9OworCisgICAgICBzdHJ1Y3QgX1JlcCA6IF9SZXBfYmFzZQorICAgICAgeworCS8vIFR5cGVzOgorCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CisKKwkvLyAoUHVibGljKSBEYXRhIG1lbWJlcnM6CisKKwkvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5kaXZpZHVhbCBjaGFyX3R5cGUgZWxlbWVudHMgb2YgYW4KKwkvLyBpbmRpdmlkdWFsIHN0cmluZyBpcyBkZXRlcm1pbmVkIGJ5IF9TX21heF9zaXplLiBUaGlzIGlzIHRoZQorCS8vIHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSBtYXhfc2l6ZSgpLiAgKFdoZXJlYXMgbnBvcworCS8vIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGUgYWxsb2NhdG9yIGNhbiBhbGxvY2F0ZS4pCisJLy8gSWYgb25lIHdhcyB0byBkaXZ2eSB1cCB0aGUgdGhlb3JldGljYWwgbGFyZ2VzdCBzaXplIHN0cmluZywKKwkvLyB3aXRoIGEgdGVybWluYXRpbmcgY2hhcmFjdGVyIGFuZCBtIF9DaGFyVCBlbGVtZW50cywgaXQnZAorCS8vIGxvb2sgbGlrZSB0aGlzOgorCS8vIG5wb3MgPSBzaXplb2YoX1JlcCkgKyAobSAqIHNpemVvZihfQ2hhclQpKSArIHNpemVvZihfQ2hhclQpCisJLy8gU29sdmluZyBmb3IgbToKKwkvLyBtID0gKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoQ2hhclQpKSAtIDEKKwkvLyBJbiBhZGRpdGlvbiwgdGhpcyBpbXBsZW1lbnRhdGlvbiBxdWFydGVycyB0aGlzIGFtb3VudC4KKwlzdGF0aWMgY29uc3Qgc2l6ZV90eXBlCV9TX21heF9zaXplOworCXN0YXRpYyBjb25zdCBfQ2hhclQJX1NfdGVybWluYWw7CisKKwkvLyBUaGUgZm9sbG93aW5nIHN0b3JhZ2UgaXMgaW5pdCdkIHRvIDAgYnkgdGhlIGxpbmtlciwgcmVzdWx0aW5nCisgICAgICAgIC8vIChjYXJlZnVsbHkpIGluIGFuIGVtcHR5IHN0cmluZyB3aXRoIG9uZSByZWZlcmVuY2UuCisgICAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbXTsKKworICAgICAgICBzdGF0aWMgX1JlcCYKKyAgICAgICAgX1NfZW1wdHlfcmVwKCkKKyAgICAgICAgeyAKKwkgIC8vIE5COiBNaWxkIGhhY2sgdG8gYXZvaWQgc3RyaWN0LWFsaWFzaW5nIHdhcm5pbmdzLiAgTm90ZSB0aGF0CisJICAvLyBfU19lbXB0eV9yZXBfc3RvcmFnZSBpcyBuZXZlciBtb2RpZmllZCBhbmQgdGhlIHB1bm5pbmcgc2hvdWxkCisJICAvLyBiZSByZWFzb25hYmx5IHNhZmUgaW4gdGhpcyBjYXNlLgorCSAgdm9pZCogX19wID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJl9TX2VtcHR5X3JlcF9zdG9yYWdlKTsKKwkgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oX19wKTsKKwl9CisKKyAgICAgICAgYm9vbAorCV9NX2lzX2xlYWtlZCgpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX3JlZmNvdW50IDwgMDsgfQorCisgICAgICAgIGJvb2wKKwlfTV9pc19zaGFyZWQoKSBjb25zdAorICAgICAgICB7IHJldHVybiB0aGlzLT5fTV9yZWZjb3VudCA+IDA7IH0KKworICAgICAgICB2b2lkCisJX01fc2V0X2xlYWtlZCgpCisgICAgICAgIHsgdGhpcy0+X01fcmVmY291bnQgPSAtMTsgfQorCisgICAgICAgIHZvaWQKKwlfTV9zZXRfc2hhcmFibGUoKQorICAgICAgICB7IHRoaXMtPl9NX3JlZmNvdW50ID0gMDsgfQorCisJdm9pZAorCV9NX3NldF9sZW5ndGhfYW5kX3NoYXJhYmxlKHNpemVfdHlwZSBfX24pCisJeworI2lmIF9HTElCQ1hYX0ZVTExZX0RZTkFNSUNfU1RSSU5HID09IDAKKwkgIGlmIChfX2J1aWx0aW5fZXhwZWN0KHRoaXMgIT0gJl9TX2VtcHR5X3JlcCgpLCBmYWxzZSkpCisjZW5kaWYKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldF9zaGFyYWJsZSgpOyAgLy8gT25lIHJlZmVyZW5jZS4KKwkgICAgICB0aGlzLT5fTV9sZW5ndGggPSBfX247CisJICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbih0aGlzLT5fTV9yZWZkYXRhKClbX19uXSwgX1NfdGVybWluYWwpOworCSAgICAgIC8vIGdycnIuIChwZXIgMjEuMy40KQorCSAgICAgIC8vIFlvdSBjYW5ub3QgbGVhdmUgdGhvc2UgTFdHIHBlb3BsZSBhbG9uZSBmb3IgYSBzZWNvbmQuCisJICAgIH0KKwl9CisKKwlfQ2hhclQqCisJX01fcmVmZGF0YSgpIHRocm93KCkKKwl7IHJldHVybiByZWludGVycHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQorCisJX0NoYXJUKgorCV9NX2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKKwl7CisJICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikKKwkgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7CisJfQorCisJLy8gQ3JlYXRlICYgRGVzdHJveQorCXN0YXRpYyBfUmVwKgorCV9TX2NyZWF0ZShzaXplX3R5cGUsIHNpemVfdHlwZSwgY29uc3QgX0FsbG9jJik7CisKKwl2b2lkCisJX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKKwl7CisjaWYgX0dMSUJDWFhfRlVMTFlfRFlOQU1JQ19TVFJJTkcgPT0gMAorCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QodGhpcyAhPSAmX1NfZW1wdHlfcmVwKCksIGZhbHNlKSkKKyNlbmRpZgorCSAgICB7CisJICAgICAgLy8gQmUgcmFjZS1kZXRlY3Rvci1mcmllbmRseS4gIEZvciBtb3JlIGluZm8gc2VlIGJpdHMvYysrY29uZmlnLgorCSAgICAgIF9HTElCQ1hYX1NZTkNIUk9OSVpBVElPTl9IQVBQRU5TX0JFRk9SRSgmdGhpcy0+X01fcmVmY291bnQpOworCSAgICAgIGlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmdGhpcy0+X01fcmVmY291bnQsCisJCQkJCQkJIC0xKSA8PSAwKQorCQl7CisJCSAgX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQUZURVIoJnRoaXMtPl9NX3JlZmNvdW50KTsKKwkJICBfTV9kZXN0cm95KF9fYSk7CisJCX0KKwkgICAgfQorCX0gIC8vIFhYWCBNVAorCisJdm9pZAorCV9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKKworCV9DaGFyVCoKKwlfTV9yZWZjb3B5KCkgdGhyb3coKQorCXsKKyNpZiBfR0xJQkNYWF9GVUxMWV9EWU5BTUlDX1NUUklORyA9PSAwCisJICBpZiAoX19idWlsdGluX2V4cGVjdCh0aGlzICE9ICZfU19lbXB0eV9yZXAoKSwgZmFsc2UpKQorI2VuZGlmCisgICAgICAgICAgICBfX2dudV9jeHg6Ol9fYXRvbWljX2FkZF9kaXNwYXRjaCgmdGhpcy0+X01fcmVmY291bnQsIDEpOworCSAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKKwl9ICAvLyBYWFggTVQKKworCV9DaGFyVCoKKwlfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKKyAgICAgIH07CisKKyAgICAgIC8vIFVzZSBlbXB0eS1iYXNlIG9wdGltaXphdGlvbjogaHR0cDovL3d3dy5jYW50cmlwLm9yZy9lbXB0eW9wdC5odG1sCisgICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCisgICAgICB7CisJX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9BbGxvYyYgX19hKQorCTogX0FsbG9jKF9fYSksIF9NX3AoX19kYXQpIHsgfQorCisJX0NoYXJUKiBfTV9wOyAvLyBUaGUgYWN0dWFsIGRhdGEuCisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgLy8gRGF0YSBNZW1iZXJzIChwdWJsaWMpOgorICAgICAgLy8gTkI6IFRoaXMgaXMgYW4gdW5zaWduZWQgdHlwZSwgYW5kIHRodXMgcmVwcmVzZW50cyB0aGUgbWF4aW11bQorICAgICAgLy8gc2l6ZSB0aGF0IHRoZSBhbGxvY2F0b3IgY2FuIGhvbGQuCisgICAgICAvLy8gIFZhbHVlIHJldHVybmVkIGJ5IHZhcmlvdXMgbWVtYmVyIGZ1bmN0aW9ucyB3aGVuIHRoZXkgZmFpbC4KKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUJbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIERhdGEgTWVtYmVycyAocHJpdmF0ZSk6CisgICAgICBtdXRhYmxlIF9BbGxvY19oaWRlcglfTV9kYXRhcGx1czsKKworICAgICAgX0NoYXJUKgorICAgICAgX01fZGF0YSgpIGNvbnN0CisgICAgICB7IHJldHVybiAgX01fZGF0YXBsdXMuX01fcDsgfQorCisgICAgICBfQ2hhclQqCisgICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQorICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9CisKKyAgICAgIF9SZXAqCisgICAgICBfTV9yZXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KKworICAgICAgLy8gRm9yIHRoZSBpbnRlcm5hbCB1c2Ugd2UgaGF2ZSBmdW5jdGlvbnMgc2ltaWxhciB0byBgYmVnaW4nL2BlbmQnCisgICAgICAvLyBidXQgdGhleSBkbyBub3QgY2FsbCBfTV9sZWFrLgorICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2liZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fbGVhaygpICAgIC8vIGZvciB1c2UgaW4gYmVnaW4oKSAmIG5vbi1jb25zdCBvcFtdCisgICAgICB7CisJaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCisJICBfTV9sZWFrX2hhcmQoKTsKKyAgICAgIH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MsIGNvbnN0IGNoYXIqIF9fcykgY29uc3QKKyAgICAgIHsKKwlpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oX19zKSk7CisJcmV0dXJuIF9fcG9zOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jaGVja19sZW5ndGgoc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBjb25zdCBjaGFyKiBfX3MpIGNvbnN0CisgICAgICB7CisJaWYgKHRoaXMtPm1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPCBfX24yKQorCSAgX190aHJvd19sZW5ndGhfZXJyb3IoX19OKF9fcykpOworICAgICAgfQorCisgICAgICAvLyBOQjogX01fbGltaXQgZG9lc24ndCBjaGVjayBmb3IgYSBiYWQgX19wb3MgdmFsdWUuCisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX2xpbWl0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAorICAgICAgeworCWNvbnN0IGJvb2wgX190ZXN0b2ZmID0gIF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CisJcmV0dXJuIF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CisgICAgICB9CisKKyAgICAgIC8vIFRydWUgaWYgX1JlcCBhbmQgc291cmNlIGRvIG5vdCBvdmVybGFwLgorICAgICAgYm9vbAorICAgICAgX01fZGlzanVuY3QoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIChsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCisJCXx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9fcykpOworICAgICAgfQorCisgICAgICAvLyBXaGVuIF9fbiA9IDEgd2F5IGZhc3RlciB0aGFuIHRoZSBnZW5lcmFsIG11bHRpY2hhcgorICAgICAgLy8gdHJhaXRzX3R5cGU6OmNvcHkvbW92ZS9hc3NpZ24uCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX01fY29weShfQ2hhclQqIF9fZCwgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7CisJaWYgKF9fbiA9PSAxKQorCSAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19kLCAqX19zKTsKKwllbHNlCisJICB0cmFpdHNfdHlwZTo6Y29weShfX2QsIF9fcywgX19uKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9NX21vdmUoX0NoYXJUKiBfX2QsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCWlmIChfX24gPT0gMSkKKwkgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fZCwgKl9fcyk7CisJZWxzZQorCSAgdHJhaXRzX3R5cGU6Om1vdmUoX19kLCBfX3MsIF9fbik7CSAgCisgICAgICB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfTV9hc3NpZ24oX0NoYXJUKiBfX2QsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7CisJaWYgKF9fbiA9PSAxKQorCSAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19kLCBfX2MpOworCWVsc2UKKwkgIHRyYWl0c190eXBlOjphc3NpZ24oX19kLCBfX24sIF9fYyk7CSAgCisgICAgICB9CisKKyAgICAgIC8vIF9TX2NvcHlfY2hhcnMgaXMgYSBzZXBhcmF0ZSB0ZW1wbGF0ZSB0byBwZXJtaXQgc3BlY2lhbGl6YXRpb24KKyAgICAgIC8vIHRvIG9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgcG9pbnRlcnMgYXMgaXRlcmF0b3JzLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfSXRlcmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCisgICAgICAgIHsKKwkgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCisJICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOyAvLyBUaGVzZSB0eXBlcyBhcmUgb2ZmLgorCX0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCisgICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQorICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCisgICAgICB7IF9NX2NvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQorICAgICAgeyBfTV9jb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CisKKyAgICAgIHN0YXRpYyBpbnQKKyAgICAgIF9TX2NvbXBhcmUoc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yKQorICAgICAgeworCWNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2QgPSBkaWZmZXJlbmNlX3R5cGUoX19uMSAtIF9fbjIpOworCisJaWYgKF9fZCA+IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21heCkKKwkgIHJldHVybiBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8aW50Pjo6X19tYXg7CisJZWxzZSBpZiAoX19kIDwgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGludD46Ol9fbWluKQorCSAgcmV0dXJuIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21pbjsKKwllbHNlCisJICByZXR1cm4gaW50KF9fZCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOworCisgICAgICB2b2lkCisgICAgICBfTV9sZWFrX2hhcmQoKTsKKworICAgICAgc3RhdGljIF9SZXAmCisgICAgICBfU19lbXB0eV9yZXAoKQorICAgICAgeyByZXR1cm4gX1JlcDo6X1NfZW1wdHlfcmVwKCk7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICAvLyBOQjogV2Ugb3ZlcmxvYWQgY3RvcnMgaW4gc29tZSBjYXNlcyBpbnN0ZWFkIG9mIHVzaW5nIGRlZmF1bHQKKyAgICAgIC8vIGFyZ3VtZW50cywgcGVyIDE3LjQuNC40IHBhcmEuIDIgaXRlbSAyLgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlZmF1bHQgY29uc3RydWN0b3IgY3JlYXRlcyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZygpCisjaWYgX0dMSUJDWFhfRlVMTFlfRFlOQU1JQ19TVFJJTkcgPT0gMAorICAgICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZkYXRhKCksIF9BbGxvYygpKSB7IH0KKyNlbHNlCisgICAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCksIF9BbGxvYygpKSwgX0FsbG9jKCkpeyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgYW4gZW1wdHkgc3RyaW5nIHVzaW5nIGFsbG9jYXRvciBAYSBhLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgICAgLy8gTkI6IHBlciBMV0cgaXNzdWUgNDIsIHNlbWFudGljcyBkaWZmZXJlbnQgZnJvbSBJUzoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyB3aXRoIGNvcHkgb2YgdmFsdWUgb2YgQGEgc3RyLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyBhcyBjb3B5IG9mIGEgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIGNvcHkgZnJvbS4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29weSAoZGVmYXVsdCByZW1haW5kZXIpLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAorCQkgICBzaXplX3R5cGUgX19uID0gbnBvcyk7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgY29weSBvZiBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byBjb3B5IGZyb20uCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFsbG9jYXRvciB0byB1c2UuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCisJCSAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIGluaXRpYWxpemVkIGJ5IGEgY2hhcmFjdGVyICVhcnJheS4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgU291cmNlIGNoYXJhY3RlciAlYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFsbG9jYXRvciB0byB1c2UgKGRlZmF1bHQgaXMgZGVmYXVsdCBhbGxvY2F0b3IpLgorICAgICAgICoKKyAgICAgICAqICBOQjogQGEgX19zIG11c3QgaGF2ZSBhdCBsZWFzdCBAYSBfX24gY2hhcmFjdGVycywgJmFwb3M7XFwwJmFwb3M7CisgICAgICAgKiAgaGFzIG5vIHNwZWNpYWwgbWVhbmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAorCQkgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyBhcyBjb3B5IG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFNvdXJjZSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQWxsb2NhdG9yIHRvIHVzZSAoZGVmYXVsdCBpcyBkZWZhdWx0IGFsbG9jYXRvcikuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIENoYXJhY3RlciB0byB1c2UuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFsbG9jYXRvciB0byB1c2UgKGRlZmF1bHQgaXMgZGVmYXVsdCBhbGxvY2F0b3IpLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1vdmUgY29uc3RydWN0IHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCBzdHJpbmcgY29udGFpbnMgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIF9fc3RyLgorICAgICAgICogIEBhIF9fc3RyIGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCBzdHJpbmcuCisgICAgICAgKiovCisgICAgICBiYXNpY19zdHJpbmcoYmFzaWNfc3RyaW5nJiYgX19zdHIpIG5vZXhjZXB0CisgICAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX2RhdGFwbHVzKQorICAgICAgeworI2lmIF9HTElCQ1hYX0ZVTExZX0RZTkFNSUNfU1RSSU5HID09IDAKKwlfX3N0ci5fTV9kYXRhKF9TX2VtcHR5X3JlcCgpLl9NX3JlZmRhdGEoKSk7CisjZWxzZQorCV9fc3RyLl9NX2RhdGEoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgZ2V0X2FsbG9jYXRvcigpKSk7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIGZyb20gYW4gaW5pdGlhbGl6ZXIgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdCBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbGxvY2F0b3IgdG8gdXNlIChkZWZhdWx0IGlzIGRlZmF1bHQgYWxsb2NhdG9yKS4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nKGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOworI2VuZGlmIC8vIEMrKzExCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyBhcyBjb3B5IG9mIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBfX2JlZyAgU3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBfX2VuZCAgRW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbGxvY2F0b3IgdG8gdXNlIChkZWZhdWx0IGlzIGRlZmF1bHQgYWxsb2NhdG9yKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCisJCSAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVzdHJveSB0aGUgc3RyaW5nIGluc3RhbmNlLgorICAgICAgICovCisgICAgICB+YmFzaWNfc3RyaW5nKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbiB0aGUgdmFsdWUgb2YgQGEgc3RyIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSAKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0cik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb3B5IGNvbnRlbnRzIG9mIEBhIHMgaW50byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgU291cmNlIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBzdHJpbmcgb2YgbGVuZ3RoIDEuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIFNvdXJjZSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIEFzc2lnbmluZyB0byBhIGNoYXJhY3RlciBtYWtlcyB0aGlzIHN0cmluZyBsZW5ndGggMSBhbmQKKyAgICAgICAqICAoKnRoaXMpWzBdID09IEBhIGMuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSAKKyAgICAgIHsgCisJdGhpcy0+YXNzaWduKDEsIF9fYyk7IAorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTW92ZSBhc3NpZ24gdGhlIHZhbHVlIG9mIEBhIHN0ciB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgc3RyIGFyZSBtb3ZlZCBpbnRvIHRoaXMgc3RyaW5nICh3aXRob3V0IGNvcHlpbmcpLgorICAgICAgICogIEBhIHN0ciBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgc3RyaW5nLgorICAgICAgICoqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgb3BlcmF0b3I9KGJhc2ljX3N0cmluZyYmIF9fc3RyKQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCXRoaXMtPnN3YXAoX19zdHIpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gc3RyaW5nIGNvbnN0cnVjdGVkIGZyb20gaW5pdGlhbGl6ZXIgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7CisJdGhpcy0+YXNzaWduKF9fbC5iZWdpbigpLCBfX2wuc2l6ZSgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYgLy8gQysrMTEKKworICAgICAgLy8gSXRlcmF0b3JzOgorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbgorICAgICAgICogIHRoZSAlc3RyaW5nLiAgVW5zaGFyZXMgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfTV9sZWFrKCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgVW5zaGFyZXMgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJX01fbGVhaygpOworCXJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlCisgICAgICAgKiAgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBsYXN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50CisgICAgICAgKiAgb3JkZXIuICBVbnNoYXJlcyB0aGUgc3RyaW5nLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gb25lIGJlZm9yZSB0aGUKKyAgICAgICAqICBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24gaXMgZG9uZSBpbiByZXZlcnNlCisgICAgICAgKiAgZWxlbWVudCBvcmRlci4gIFVuc2hhcmVzIHRoZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogIHRvIG9uZSBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgJXN0cmluZy4gIEl0ZXJhdGlvbgorICAgICAgICogIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01fZGF0YSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlCisgICAgICAgKiAgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogIHRvIG9uZSBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgJXN0cmluZy4gIEl0ZXJhdGlvbgorICAgICAgICogIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENhcGFjaXR5OgorICAgICAgLy8vICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLCBub3QgaW5jbHVkaW5nIGFueQorICAgICAgLy8vICBudWxsLXRlcm1pbmF0aW9uLgorICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLCBub3QgaW5jbHVkaW5nIGFueQorICAgICAgLy8vICBudWxsLXRlcm1pbmF0aW9uLgorICAgICAgc2l6ZV90eXBlCisgICAgICBsZW5ndGgoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIHNpemUoKSBvZiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSAlc3RyaW5nLgorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlc2l6ZXMgdGhlICVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhlICVzdHJpbmcgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKiAgQHBhcmFtICBfX2MgIENoYXJhY3RlciB0byBmaWxsIGFueSBuZXcgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCAlcmVzaXplIHRoZSAlc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAqICBudW1iZXIgb2YgY2hhcmFjdGVycy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZQorICAgICAgICogICVzdHJpbmcncyBjdXJyZW50IHNpemUgdGhlICVzdHJpbmcgaXMgdHJ1bmNhdGVkLCBvdGhlcndpc2UKKyAgICAgICAqICB0aGUgJXN0cmluZyBpcyBleHRlbmRlZCBhbmQgbmV3IGVsZW1lbnRzIGFyZSAlc2V0IHRvIEBhIF9fYy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlc2l6ZXMgdGhlICVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhlICVzdHJpbmcgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZXNpemUgdGhlICVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBsZW5ndGguICBJZgorICAgICAgICogIHRoZSBuZXcgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlICVzdHJpbmcncyBjdXJyZW50IHNpemUgdGhlICVzdHJpbmcKKyAgICAgICAqICBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSB0aGUgJXN0cmluZyBpcyBleHRlbmRlZCBhbmQgbmV3IGNoYXJhY3RlcnMKKyAgICAgICAqICBhcmUgZGVmYXVsdC1jb25zdHJ1Y3RlZC4gIEZvciBiYXNpYyB0eXBlcyBzdWNoIGFzIGNoYXIsIHRoaXMgbWVhbnMKKyAgICAgICAqICBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pCisgICAgICB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8vICBBIG5vbi1iaW5kaW5nIHJlcXVlc3QgdG8gcmVkdWNlIGNhcGFjaXR5KCkgdG8gc2l6ZSgpLgorICAgICAgdm9pZAorICAgICAgc2hyaW5rX3RvX2ZpdCgpCisgICAgICB7CisJaWYgKGNhcGFjaXR5KCkgPiBzaXplKCkpCisJICB7CisJICAgIF9fdHJ5CisJICAgICAgeyByZXNlcnZlKDApOyB9CisJICAgIF9fY2F0Y2goLi4uKQorCSAgICAgIHsgfQorCSAgfQorICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdGhlICVzdHJpbmcgY2FuIGhvbGQKKyAgICAgICAqICBiZWZvcmUgbmVlZGluZyB0byBhbGxvY2F0ZSBtb3JlIG1lbW9yeS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjYXBhY2l0eSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBdHRlbXB0IHRvIHByZWFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAqICAgICAgICAgIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX3Jlc19hcmcgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIEBhIF9fcmVzX2FyZyBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gcmVzZXJ2ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUKKyAgICAgICAqICAlc3RyaW5nIHRvIGhvbGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycy4gIElmIHRoZQorICAgICAgICogIG51bWJlciByZXF1ZXN0ZWQgaXMgbW9yZSB0aGFuIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcworICAgICAgICogIHRocm93bi4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoYXQgaWYgb3B0aW1hbCBjb2RlIGlzIGEKKyAgICAgICAqICBuZWNlc3NpdHkgYW5kIHRoZSB1c2VyIGNhbiBkZXRlcm1pbmUgdGhlIHN0cmluZyBsZW5ndGggdGhhdCB3aWxsIGJlCisgICAgICAgKiAgcmVxdWlyZWQsIHRoZSB1c2VyIGNhbiByZXNlcnZlIHRoZSBtZW1vcnkgaW4gJWFkdmFuY2UsIGFuZCB0aHVzCisgICAgICAgKiAgcHJldmVudCBhIHBvc3NpYmxlIHJlYWxsb2NhdGlvbiBvZiBtZW1vcnkgYW5kIGNvcHlpbmcgb2YgJXN0cmluZworICAgICAgICogIGRhdGEuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOworCisgICAgICAvKioKKyAgICAgICAqICBFcmFzZXMgdGhlIHN0cmluZywgbWFraW5nIGl0IGVtcHR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgdHJ1ZSBpZiB0aGUgJXN0cmluZyBpcyBlbXB0eS4gIEVxdWl2YWxlbnQgdG8gCisgICAgICAgKiAgPGNvZGU+KnRoaXMgPT0gIiI8L2NvZGU+LgorICAgICAgICovCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQorCisgICAgICAvLyBFbGVtZW50IGFjY2VzczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3Vic2NyaXB0IGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgdG8gYWNjZXNzLgorICAgICAgICogIEByZXR1cm4gIFJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byB0aGUgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdG9yIGFsbG93cyBmb3IgZWFzeSwgYXJyYXktc3R5bGUsIGRhdGEgYWNjZXNzLgorICAgICAgICogIE5vdGUgdGhhdCBkYXRhIGFjY2VzcyB3aXRoIHRoaXMgb3BlcmF0b3IgaXMgdW5jaGVja2VkIGFuZAorICAgICAgICogIG91dF9vZl9yYW5nZSBsb29rdXBzIGFyZSBub3QgZGVmaW5lZC4gKEZvciBjaGVja2VkIGxvb2t1cHMKKyAgICAgICAqICBzZWUgYXQoKS4pCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX3BvcyA8PSBzaXplKCkpOworCXJldHVybiBfTV9kYXRhKClbX19wb3NdOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN1YnNjcmlwdCBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAlc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIFRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHRvIGFjY2Vzcy4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdG9yIGFsbG93cyBmb3IgZWFzeSwgYXJyYXktc3R5bGUsIGRhdGEgYWNjZXNzLgorICAgICAgICogIE5vdGUgdGhhdCBkYXRhIGFjY2VzcyB3aXRoIHRoaXMgb3BlcmF0b3IgaXMgdW5jaGVja2VkIGFuZAorICAgICAgICogIG91dF9vZl9yYW5nZSBsb29rdXBzIGFyZSBub3QgZGVmaW5lZC4gKEZvciBjaGVja2VkIGxvb2t1cHMKKyAgICAgICAqICBzZWUgYXQoKS4pICBVbnNoYXJlcyB0aGUgc3RyaW5nLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQorICAgICAgeworICAgICAgICAvLyBhbGxvdyBwb3MgPT0gc2l6ZSgpIGFzIHYzIGV4dGVuc2lvbjoKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX19wb3MgPD0gc2l6ZSgpKTsKKyAgICAgICAgLy8gYnV0IGJlIHN0cmljdCBpbiBwZWRhbnRpYyBtb2RlOgorCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfX3BvcyA8IHNpemUoKSk7CisJX01fbGVhaygpOworCXJldHVybiBfTV9kYXRhKClbX19wb3NdOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fbiBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB0byBhY2Nlc3MuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdCkgcmVmZXJlbmNlIHRvIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgbiBpcyBhbiBpbnZhbGlkIGluZGV4LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGZvciBzYWZlciBkYXRhIGFjY2Vzcy4gIFRoZSBwYXJhbWV0ZXIgaXMKKyAgICAgICAqICBmaXJzdCBjaGVja2VkIHRoYXQgaXQgaXMgaW4gdGhlIHJhbmdlIG9mIHRoZSBzdHJpbmcuICBUaGUgZnVuY3Rpb24KKyAgICAgICAqICB0aHJvd3Mgb3V0X29mX3JhbmdlIGlmIHRoZSBjaGVjayBmYWlscy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeworCWlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJiYXNpY19zdHJpbmc6OmF0IikpOworCXJldHVybiBfTV9kYXRhKClbX19uXTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAlc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX24gVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgdG8gYWNjZXNzLgorICAgICAgICogIEByZXR1cm4gIFJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgbiBpcyBhbiBpbnZhbGlkIGluZGV4LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGZvciBzYWZlciBkYXRhIGFjY2Vzcy4gIFRoZSBwYXJhbWV0ZXIgaXMKKyAgICAgICAqICBmaXJzdCBjaGVja2VkIHRoYXQgaXQgaXMgaW4gdGhlIHJhbmdlIG9mIHRoZSBzdHJpbmcuICBUaGUgZnVuY3Rpb24KKyAgICAgICAqICB0aHJvd3Mgb3V0X29mX3JhbmdlIGlmIHRoZSBjaGVjayBmYWlscy4gIFN1Y2Nlc3MgcmVzdWx0cyBpbgorICAgICAgICogIHVuc2hhcmluZyB0aGUgc3RyaW5nLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX24pCisgICAgICB7CisJaWYgKF9fbiA+PSBzaXplKCkpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImJhc2ljX3N0cmluZzo6YXQiKSk7CisJX01fbGVhaygpOworCXJldHVybiBfTV9kYXRhKClbX19uXTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsgcmV0dXJuIG9wZXJhdG9yW10oMCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG9wZXJhdG9yW10oMCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXN0cmluZy4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBiYWNrKCkKKyAgICAgIHsgcmV0dXJuIG9wZXJhdG9yW10odGhpcy0+c2l6ZSgpIC0gMSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUKKyAgICAgICAqICBsYXN0IGVsZW1lbnQgb2YgdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYmFjaygpIGNvbnN0CisgICAgICB7IHJldHVybiBvcGVyYXRvcltdKHRoaXMtPnNpemUoKSAtIDEpOyB9CisjZW5kaWYKKworICAgICAgLy8gTW9kaWZpZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBzdHJpbmcgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBUaGUgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBUaGUgQyBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyYWN0ZXIgdG8gYXBwZW5kLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKQorICAgICAgeyAKKwl0aGlzLT5wdXNoX2JhY2soX19jKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhbiBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBiZSBhcHBlbmRlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yKz0oaW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX2wuYmVnaW4oKSwgX19sLnNpemUoKSk7IH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIHN0cmluZyB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBzdHIgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBfX24gIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgQGEgX19wb3MgaXMgbm90IGEgdmFsaWQgaW5kZXguCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBAYSBfX24gY2hhcmFjdGVycyBmcm9tIEBhIF9fc3RyCisgICAgICAgKiAgc3RhcnRpbmcgYXQgQGEgX19wb3MgdG8gdGhpcyBzdHJpbmcuICBJZiBAYSBfX24gaXMgaXMgbGFyZ2VyCisgICAgICAgKiAgdGhhbiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjaGFyYWN0ZXJzIGluIEBhIF9fc3RyLCB0aGUKKyAgICAgICAqICByZW1haW5kZXIgb2YgQGEgX19zdHIgaXMgYXBwZW5kZWQuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFRoZSBDIHN0cmluZyB0byBhcHBlbmQuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIG11bHRpcGxlIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhcmFjdGVyIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEFwcGVuZHMgX19uIGNvcGllcyBvZiBfX2MgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19sICBUaGUgaW5pdGlhbGl6ZXJfbGlzdCBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFwcGVuZChpbml0aWFsaXplcl9saXN0PF9DaGFyVD4gX19sKQorICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fbC5iZWdpbigpLCBfX2wuc2l6ZSgpKTsgfQorI2VuZGlmIC8vIEMrKzExCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19maXJzdCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBhcHBlbmQuCisgICAgICAgKiAgQHBhcmFtIF9fbGFzdCAgSXRlcmF0b3IgbWFya2luZyB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEFwcGVuZHMgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW19fZmlyc3QsX19sYXN0KSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIHNpbmdsZSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGFwcGVuZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCisgICAgICB7IAorCWNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IDEgKyB0aGlzLT5zaXplKCk7CisJaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisJICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKKwl0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVt0aGlzLT5zaXplKCldLCBfX2MpOworCV9NX3JlcCgpLT5fTV9zZXRfbGVuZ3RoX2FuZF9zaGFyYWJsZShfX2xlbik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGNvbnRlbnRzIG9mIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gY29udGVudHMgb2YgYW5vdGhlciBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3N0ciAgU291cmNlIHN0cmluZyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhpcyBzdHJpbmcgdG8gdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIF9fc3RyLgorICAgICAgICogIEBhIF9fc3RyIGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFzc2lnbihiYXNpY19zdHJpbmcmJiBfX3N0cikKKyAgICAgIHsKKwl0aGlzLT5zd2FwKF9fc3RyKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYgLy8gQysrMTEKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gYSBzdWJzdHJpbmcgb2YgYSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBUaGUgc3RyaW5nIHRvIHVzZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3RyLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSBpZiBAYSBwb3MgaXMgbm90IGEgdmFsaWQgaW5kZXguCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGlzIHN0cmluZyB0byB0aGUgc3Vic3RyaW5nIG9mIEBhIF9fc3RyCisgICAgICAgKiAgY29uc2lzdGluZyBvZiBAYSBfX24gY2hhcmFjdGVycyBhdCBAYSBfX3Bvcy4gIElmIEBhIF9fbiBpcworICAgICAgICogIGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNoYXJhY3RlcnMgaW4gQGEKKyAgICAgICAqICBfX3N0ciwgdGhlIHJlbWFpbmRlciBvZiBAYSBfX3N0ciBpcyB1c2VkLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyLl9NX2RhdGEoKQorCQkJICAgICsgX19zdHIuX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OmFzc2lnbiIpLAorCQkJICAgIF9fc3RyLl9NX2xpbWl0KF9fcG9zLCBfX24pKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBhIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFRoZSBDIHN0cmluZyB0byB1c2UuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIHN0cmluZyB0byB0aGUgZmlyc3QgQGEgX19uCisgICAgICAgKiAgY2hhcmFjdGVycyBvZiBAYSBfX3MuICBJZiBAYSBfX24gaXMgaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZgorICAgICAgICogIGF2YWlsYWJsZSBjaGFyYWN0ZXJzIGluIEBhIF9fcywgdGhlIHJlbWFpbmRlciBvZiBAYSBfX3MgaXMgdXNlZC4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gY29udGVudHMgb2YgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBUaGUgQyBzdHJpbmcgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB2YWx1ZSBvZiB0aGlzIHN0cmluZyB0byB0aGUgdmFsdWUgb2YgQGEgX19zLgorICAgICAgICogIFRoZSBkYXRhIGlzIGNvcGllZCwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jZSBvbiBAYSBfX3Mgb25jZSB0aGUKKyAgICAgICAqICBmdW5jdGlvbiByZXR1cm5zLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5hc3NpZ24oX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBtdWx0aXBsZSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX24gIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhcmFjdGVyIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBzdHJpbmcgdG8gQGEgX19uIGNvcGllcyBvZgorICAgICAgICogIGNoYXJhY3RlciBAYSBfX2MuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoc2l6ZV90eXBlKDApLCB0aGlzLT5zaXplKCksIF9fbiwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBhIHJhbmdlIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fZmlyc3QgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBfX2xhc3QgIEl0ZXJhdG9yIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBTZXRzIHZhbHVlIG9mIHN0cmluZyB0byBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbX19maXJzdCxfX2xhc3QpLgorICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBiYXNpY19zdHJpbmcmCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gYW4gaW5pdGlhbGl6ZXJfbGlzdCBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX2wgIFRoZSBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMgdG8gYXNzaWduLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5zaXplKCkpOyB9CisjZW5kaWYgLy8gQysrMTEKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19wICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydAorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyYWN0ZXIgdG8gaW5zZXJ0LgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIEBhIF9fbiBjb3BpZXMgb2YgY2hhcmFjdGVyIEBhIF9fYyBzdGFydGluZyBhdCB0aGUKKyAgICAgICAqICBwb3NpdGlvbiByZWZlcmVuY2VkIGJ5IGl0ZXJhdG9yIEBhIF9fcC4gIElmIGFkZGluZworICAgICAgICogIGNoYXJhY3RlcnMgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QKKyAgICAgICAqICBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7CXRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSByYW5nZSBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX3AgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGxvY2F0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fYmVnICBTdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19lbmQgIEVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyBjaGFyYWN0ZXJzIGluIHJhbmdlIFtfX2JlZyxfX2VuZCkuICBJZiBhZGRpbmcKKyAgICAgICAqICBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZCBtYXhfc2l6ZSgpLAorICAgICAgICogIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0CisgICAgICAgKiAgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCisgICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYW4gaW5pdGlhbGl6ZXJfbGlzdCBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX3AgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGxvY2F0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fcCA+PSBfTV9pYmVnaW4oKSAmJiBfX3AgPD0gX01faWVuZCgpKTsKKwl0aGlzLT5pbnNlcnQoX19wIC0gX01faWJlZ2luKCksIF9fbC5iZWdpbigpLCBfX2wuc2l6ZSgpKTsKKyAgICAgIH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCB2YWx1ZSBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MxICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgVGhlIHN0cmluZyB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIHZhbHVlIG9mIEBhIF9fc3RyIHN0YXJ0aW5nIGF0IEBhIF9fcG9zMS4gIElmIGFkZGluZworICAgICAgICogIGNoYXJhY3RlcnMgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QKKyAgICAgICAqICBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQorICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIHNpemVfdHlwZSgwKSwgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MxICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgVGhlIHN0cmluZyB0byBpbnNlcnQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMiAgU3RhcnQgb2YgY2hhcmFjdGVycyBpbiBzdHIgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zMSA+IHNpemUoKSBvcgorICAgICAgICogIEBhIF9fcG9zMiA+IEBhIHN0ci5zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGF0IEBhIHBvczEsIGluc2VydCBAYSBfX24gY2hhcmFjdGVyIG9mIEBhIF9fc3RyCisgICAgICAgKiAgYmVnaW5uaW5nIHdpdGggQGEgX19wb3MyLiAgSWYgYWRkaW5nIGNoYXJhY3RlcnMgY2F1c2VzIHRoZQorICAgICAgICogIGxlbmd0aCB0byBleGNlZWQgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIElmIEBhCisgICAgICAgKiAgX19wb3MxIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMgc3RyaW5nIG9yIEBhIF9fcG9zMiBpcworICAgICAgICogIGJleW9uZCB0aGUgZW5kIG9mIEBhIF9fc3RyLCBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgVGhlCisgICAgICAgKiAgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCisJICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIuX01fZGF0YSgpCisJCQkgICAgKyBfX3N0ci5fTV9jaGVjayhfX3BvczIsICJiYXNpY19zdHJpbmc6Omluc2VydCIpLAorCQkJICAgIF9fc3RyLl9NX2xpbWl0KF9fcG9zMiwgX19uKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGxvY2F0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19uICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIHRoZSBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgc3RhcnRpbmcgYXQgQGEKKyAgICAgICAqICBfX3Bvcy4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZAorICAgICAgICogIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQKKyAgICAgICAqICBlbmQoKSwgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nCisgICAgICAgKiAgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGxvY2F0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydHMgdGhlIGZpcnN0IEBhIG4gY2hhcmFjdGVycyBvZiBAYSBfX3Mgc3RhcnRpbmcgYXQgQGEgX19wb3MuICBJZgorICAgICAgICogIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZCBtYXhfc2l6ZSgpLAorICAgICAgICogIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgZW5kKCksIG91dF9vZl9yYW5nZSBpcworICAgICAgICogIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzCisgICAgICAgKiAgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IG11bHRpcGxlIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydAorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyYWN0ZXIgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIEBhIF9fbiBjb3BpZXMgb2YgY2hhcmFjdGVyIEBhIF9fYyBzdGFydGluZyBhdCBpbmRleAorICAgICAgICogIEBhIF9fcG9zLiAgSWYgYWRkaW5nIGNoYXJhY3RlcnMgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkCisgICAgICAgKiAgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIElmIEBhIF9fcG9zID4gbGVuZ3RoKCksCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QKKyAgICAgICAqICBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7IHJldHVybiBfTV9yZXBsYWNlX2F1eChfTV9jaGVjayhfX3BvcywgImJhc2ljX3N0cmluZzo6aW5zZXJ0IiksCisJCQkgICAgICBzaXplX3R5cGUoMCksIF9fbiwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBvbmUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX3AgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHBvc2l0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbmV3bHkgaW5zZXJ0ZWQgY2hhci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyBjaGFyYWN0ZXIgQGEgX19jIGF0IHBvc2l0aW9uIHJlZmVyZW5jZWQgYnkgQGEgX19wLgorICAgICAgICogIElmIGFkZGluZyBjaGFyYWN0ZXIgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIElmIEBhIF9fcCBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndAorICAgICAgICogIGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fcCA+PSBfTV9pYmVnaW4oKSAmJiBfX3AgPD0gX01faWVuZCgpKTsKKwljb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKKwlfTV9yZXBsYWNlX2F1eChfX3Bvcywgc2l6ZV90eXBlKDApLCBzaXplX3R5cGUoMSksIF9fYyk7CisJX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKKwlyZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgX19wb3MpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlbW92ZSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byByZW1vdmUgKGRlZmF1bHQgcmVtYWluZGVyKS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgQGEgX19uIGNoYXJhY3RlcnMgZnJvbSB0aGlzIHN0cmluZyBzdGFydGluZyBhdCBAYQorICAgICAgICogIF9fcG9zLiAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIHJlZHVjZWQgYnkgQGEgX19uLiAgSWYKKyAgICAgICAqICB0aGVyZSBhcmUgPCBAYSBfX24gY2hhcmFjdGVycyB0byByZW1vdmUsIHRoZSByZW1haW5kZXIgb2YKKyAgICAgICAqICB0aGUgc3RyaW5nIGlzIHRydW5jYXRlZC4gIElmIEBhIF9fcCBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndAorICAgICAgICogIGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCisgICAgICB7IAorCV9NX211dGF0ZShfTV9jaGVjayhfX3BvcywgImJhc2ljX3N0cmluZzo6ZXJhc2UiKSwKKwkJICBfTV9saW1pdChfX3BvcywgX19uKSwgc2l6ZV90eXBlKDApKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIG9uZSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zaXRpb24gIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBjaGFyYWN0ZXIgdG8gcmVtb3ZlLgorICAgICAgICogIEByZXR1cm4gIGl0ZXJhdG9yIHJlZmVyZW5jaW5nIHNhbWUgbG9jYXRpb24gYWZ0ZXIgcmVtb3ZhbC4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVyIGF0IEBhIF9fcG9zaXRpb24gZnJvbSB0aGlzIHN0cmluZy4gVGhlIHZhbHVlCisgICAgICAgKiAgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fcG9zaXRpb24gPj0gX01faWJlZ2luKCkKKwkJCQkgJiYgX19wb3NpdGlvbiA8IF9NX2llbmQoKSk7CisJY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOworCV9NX211dGF0ZShfX3Bvcywgc2l6ZV90eXBlKDEpLCBzaXplX3R5cGUoMCkpOworCV9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIF9fcG9zKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX2ZpcnN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHJlbW92ZS4KKyAgICAgICAqICBAcGFyYW0gX19sYXN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBvZiBmaXJzdCBhZnRlciByZW1vdmFsLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgZnJvbSB0aGlzIHN0cmluZy4KKyAgICAgICAqICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CisgCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgdGhlIGxhc3QgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBUaGUgc3RyaW5nIG11c3QgYmUgbm9uLWVtcHR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3BfYmFjaygpCisgICAgICB7IGVyYXNlKHNpemUoKS0xLCAxKTsgfQorI2VuZGlmIC8vIEMrKzExCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSBjaGFyYWN0ZXJzIHdpdGggdmFsdWUgZnJvbSBhbm90aGVyIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlcGxhY2VkLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtfX3BvcyxfX3BvcytfX24pIGZyb20KKyAgICAgICAqICB0aGlzIHN0cmluZy4gIEluIHBsYWNlLCB0aGUgdmFsdWUgb2YgQGEgX19zdHIgaXMgaW5zZXJ0ZWQuCisgICAgICAgKiAgSWYgQGEgX19wb3MgaXMgYmV5b25kIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uCisgICAgICAgKiAgSWYgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yCisgICAgICAgKiAgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4KKyAgICAgICAqICBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIGZyb20gYW5vdGhlciBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMSAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbjEgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlcGxhY2VkLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MyICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3RyIHRvIHVzZS4KKyAgICAgICAqICBAcGFyYW0gX19uMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzdHIgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvczEgPiBzaXplKCkgb3IgQGEgX19wb3MyID4KKyAgICAgICAqICBfX3N0ci5zaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtfX3BvczEsX19wb3MxICsgbikgZnJvbSB0aGlzCisgICAgICAgKiAgc3RyaW5nLiAgSW4gcGxhY2UsIHRoZSB2YWx1ZSBvZiBAYSBfX3N0ciBpcyBpbnNlcnRlZC4gIElmIEBhIF9fcG9zIGlzCisgICAgICAgKiAgYmV5b25kIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uICBJZiB0aGUgbGVuZ3RoIG9mIHRoZQorICAgICAgICogIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlCisgICAgICAgKiAgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQorICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsIF9fc3RyLl9NX2RhdGEoKQorCQkJICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiwgImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpLAorCQkJICAgICBfX3N0ci5fTV9saW1pdChfX3BvczIsIF9fbjIpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIG9mIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVwbGFjZWQuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX24yICBOdW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIEBhIHMgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MxID4gc2l6ZSgpLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbX19wb3MsX19wb3MgKyBfX24xKQorICAgICAgICogIGZyb20gdGhpcyBzdHJpbmcuICBJbiBwbGFjZSwgdGhlIGZpcnN0IEBhIF9fbjIgY2hhcmFjdGVycyBvZgorICAgICAgICogIEBhIF9fcyBhcmUgaW5zZXJ0ZWQsIG9yIGFsbCBvZiBAYSBfX3MgaWYgQGEgX19uMiBpcyB0b28gbGFyZ2UuICBJZgorICAgICAgICogIEBhIF9fcG9zIGlzIGJleW9uZCBlbmQgb2Ygc3RyaW5nLCBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgSWYKKyAgICAgICAqICB0aGUgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcworICAgICAgICogIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yCisgICAgICAgKiAgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJICAgICAgc2l6ZV90eXBlIF9fbjIpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVwbGFjZWQuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBwb3MgPiBzaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtfX3BvcyxfX3BvcyArIF9fbjEpCisgICAgICAgKiAgZnJvbSB0aGlzIHN0cmluZy4gIEluIHBsYWNlLCB0aGUgY2hhcmFjdGVycyBvZiBAYSBfX3MgYXJlCisgICAgICAgKiAgaW5zZXJ0ZWQuICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywgb3V0X29mX3JhbmdlCisgICAgICAgKiAgaXMgdGhyb3duLiAgSWYgdGhlIGxlbmd0aCBvZiByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLAorICAgICAgICogIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0CisgICAgICAgKiAgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uMSwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIG11bHRpcGxlIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVwbGFjZWQuCisgICAgICAgKiAgQHBhcmFtIF9fbjIgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19jICBDaGFyYWN0ZXIgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyA+IHNpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW3Bvcyxwb3MgKyBuMSkgZnJvbSB0aGlzCisgICAgICAgKiAgc3RyaW5nLiAgSW4gcGxhY2UsIEBhIF9fbjIgY29waWVzIG9mIEBhIF9fYyBhcmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgSWYgQGEgX19wb3MgaXMgYmV5b25kIGVuZCBvZiBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uCisgICAgICAgKiAgSWYgdGhlIGxlbmd0aCBvZiByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMKKyAgICAgICAqICB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvcgorICAgICAgICogIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKSwKKwkJCSAgICAgIF9NX2xpbWl0KF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3aXRoIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19pMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdmFsdWUgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW19faTEsX19pMikuICBJbiBwbGFjZSwKKyAgICAgICAqICB0aGUgdmFsdWUgb2YgQGEgX19zdHIgaXMgaW5zZXJ0ZWQuICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdAorICAgICAgICogIGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZgorICAgICAgICogIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9faTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9faTIgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGVuZCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHZhbHVlIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIHMgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW19faTEsX19pMikuICBJbiBwbGFjZSwKKyAgICAgICAqICB0aGUgZmlyc3QgQGEgX19uIGNoYXJhY3RlcnMgb2YgQGEgX19zIGFyZSBpbnNlcnRlZC4gIElmIHRoZQorICAgICAgICogIGxlbmd0aCBvZiByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLgorICAgICAgICogIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzCisgICAgICAgKiAgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9NX2liZWdpbigpIDw9IF9faTEgJiYgX19pMSA8PSBfX2kyCisJCQkJICYmIF9faTIgPD0gX01faWVuZCgpKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9faTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9faTIgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGVuZCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHZhbHVlIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtfX2kxLF9faTIpLiAgSW4gcGxhY2UsCisgICAgICAgKiAgdGhlIGNoYXJhY3RlcnMgb2YgQGEgX19zIGFyZSBpbnNlcnRlZC4gIElmIHRoZSBsZW5ndGggb2YKKyAgICAgICAqICByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlCisgICAgICAgKiAgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3aXRoIG11bHRpcGxlIGNoYXJhY3RlcnMKKyAgICAgICAqICBAcGFyYW0gX19pMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbX19pMSxfX2kyKS4gIEluIHBsYWNlLAorICAgICAgICogIEBhIF9fbiBjb3BpZXMgb2YgQGEgX19jIGFyZSBpbnNlcnRlZC4gIElmIHRoZSBsZW5ndGggb2YKKyAgICAgICAqICByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlCisgICAgICAgKiAgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJcmV0dXJuIF9NX3JlcGxhY2VfYXV4KF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fbiwgX19jKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIHJhbmdlIG9mIGNoYXJhY3RlcnMgd2l0aCByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19pMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fazEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19rMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtfX2kxLF9faTIpLiAgSW4gcGxhY2UsCisgICAgICAgKiAgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW19fazEsX19rMikgYXJlIGluc2VydGVkLiAgSWYgdGhlCisgICAgICAgKiAgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uCisgICAgICAgKiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMKKyAgICAgICAqICB0aHJvd24uCisgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAorCQlfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQorICAgICAgICB7CisJICBfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX01faWJlZ2luKCkgPD0gX19pMSAmJiBfX2kxIDw9IF9faTIKKwkJCQkgICAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19rMSwgX19rMik7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIHJldHVybiBfTV9yZXBsYWNlX2Rpc3BhdGNoKF9faTEsIF9faTIsIF9fazEsIF9fazIsIF9JbnRlZ3JhbCgpKTsKKwl9CisKKyAgICAgIC8vIFNwZWNpYWxpemF0aW9ucyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIHBvaW50ZXIgYW5kIGl0ZXJhdG9yOgorICAgICAgLy8gdXNlZnVsIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB0ZW1wb3JhcnkgYnVmZmVyaW5nIGluIF9NX3JlcGxhY2UuCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fazEsIF9fazIpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCisJCQkgICAgIF9fazEsIF9fazIgLSBfX2sxKTsKKyAgICAgIH0KKworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fazEsIF9fazIpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCisJCQkgICAgIF9fazEsIF9fazIgLSBfX2sxKTsKKyAgICAgIH0KKworICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fazEsIF9fazIpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCisJCQkgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CisgICAgICB9CisKKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKKwkgICAgICBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fazEsIF9fazIpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCisJCQkgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CisgICAgICB9CisgICAgICAKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3aXRoIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtIF9faTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9faTIgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGVuZCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX2wgIFRoZSBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW19faTEsX19pMikuICBJbiBwbGFjZSwKKyAgICAgICAqICBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbX19rMSxfX2syKSBhcmUgaW5zZXJ0ZWQuICBJZiB0aGUKKyAgICAgICAqICBsZW5ndGggb2YgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4KKyAgICAgICAqICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcworICAgICAgICogIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcmIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKKwkJCSAgICBpbml0aWFsaXplcl9saXN0PF9DaGFyVD4gX19sKQorICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmIC8vIEMrKzExCisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CisJYmFzaWNfc3RyaW5nJgorCV9NX3JlcGxhY2VfZGlzcGF0Y2goaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ludGVnZXIgX19uLAorCQkJICAgIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKKyAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19uLCBfX3ZhbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisJYmFzaWNfc3RyaW5nJgorCV9NX3JlcGxhY2VfZGlzcGF0Y2goaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKKwkJCSAgICBfSW5wdXRJdGVyYXRvciBfX2syLCBfX2ZhbHNlX3R5cGUpOworCisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICBfTV9yZXBsYWNlX2F1eChzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsCisJCSAgICAgX0NoYXJUIF9fYyk7CisKKyAgICAgIGJhc2ljX3N0cmluZyYKKyAgICAgIF9NX3JlcGxhY2Vfc2FmZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJCSAgICAgIHNpemVfdHlwZSBfX24yKTsKKworICAgICAgLy8gX1NfY29uc3RydWN0X2F1eCBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgMjEuMy4xIHBhcmEgMTUgd2hpY2gKKyAgICAgIC8vIHJlcXVpcmVzIHNwZWNpYWwgYmVoYXZpb3VyIGlmIF9Jbkl0ZXIgaXMgYW4gaW50ZWdyYWwgdHlwZQorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcmF0b3I+CisgICAgICAgIHN0YXRpYyBfQ2hhclQqCisgICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlcmF0b3IgX19iZWcsIF9Jbkl0ZXJhdG9yIF9fZW5kLAorCQkJIGNvbnN0IF9BbGxvYyYgX19hLCBfX2ZhbHNlX3R5cGUpCisJeworICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKKyAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOworCX0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CisgICAgICAgIHN0YXRpYyBfQ2hhclQqCisgICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0ludGVnZXIgX19iZWcsIF9JbnRlZ2VyIF9fZW5kLAorCQkJIGNvbnN0IF9BbGxvYyYgX19hLCBfX3RydWVfdHlwZSkKKyAgICAgICAgeyByZXR1cm4gX1NfY29uc3RydWN0X2F1eF8yKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAorCQkJCSAgICBfX2VuZCwgX19hKTsgfQorCisgICAgICBzdGF0aWMgX0NoYXJUKgorICAgICAgX1NfY29uc3RydWN0X2F1eF8yKHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgICB7IHJldHVybiBfU19jb25zdHJ1Y3QoX19yZXEsIF9fYywgX19hKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCisJeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5JdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOworICAgICAgICB9CisKKyAgICAgIC8vIEZvciBJbnB1dCBJdGVyYXRvcnMsIHVzZWQgaW4gaXN0cmVhbWJ1Zl9pdGVyYXRvcnMsIGV0Yy4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgX0NoYXJUKgorICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCisJCSAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIC8vIEZvciBmb3J3YXJkX2l0ZXJhdG9ycyB1cCB0byByYW5kb21fYWNjZXNzX2l0ZXJhdG9ycywgdXNlZCBmb3IKKyAgICAgIC8vIHN0cmluZzo6aXRlcmF0b3IsIF9DaGFyVCosIGV0Yy4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJdGVyYXRvciBfX2JlZywgX0Z3ZEl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkJICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIHN0YXRpYyBfQ2hhclQqCisgICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29weSBzdWJzdHJpbmcgaW50byBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB0byBjb3B5IHZhbHVlIGludG8uCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29weS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byBjb3B5LgorICAgICAgICogIEByZXR1cm4gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IGNvcGllZAorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIF9fcG9zID4gc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBDb3BpZXMgdXAgdG8gQGEgX19uIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MgaW50byB0aGUKKyAgICAgICAqICBDIHN0cmluZyBAYSBfX3MuICBJZiBAYSBfX3BvcyBpcyAlZ3JlYXRlciB0aGFuIHNpemUoKSwKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3dhcCBjb250ZW50cyB3aXRoIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFN0cmluZyB0byBzd2FwIHdpdGguCisgICAgICAgKgorICAgICAgICogIEV4Y2hhbmdlcyB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJpbmcgd2l0aCB0aGF0IG9mIEBhIF9fcyBpbiBjb25zdGFudAorICAgICAgICogIHRpbWUuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChiYXNpY19zdHJpbmcmIF9fcyk7CisKKyAgICAgIC8vIFN0cmluZyBvcGVyYXRpb25zOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gY29uc3QgcG9pbnRlciB0byBudWxsLXRlcm1pbmF0ZWQgY29udGVudHMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSBoYW5kbGUgdG8gaW50ZXJuYWwgZGF0YS4gIERvIG5vdCBtb2RpZnkgb3IgZGlyZSB0aGluZ3MgbWF5CisgICAgICAgKiAgaGFwcGVuLgorICAgICAgKi8KKyAgICAgIGNvbnN0IF9DaGFyVCoKKyAgICAgIGNfc3RyKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBjb25zdCBwb2ludGVyIHRvIGNvbnRlbnRzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgaGFuZGxlIHRvIGludGVybmFsIGRhdGEuICBEbyBub3QgbW9kaWZ5IG9yIGRpcmUgdGhpbmdzIG1heQorICAgICAgICogIGhhcHBlbi4KKyAgICAgICovCisgICAgICBjb25zdCBfQ2hhclQqCisgICAgICBkYXRhKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBjb3B5IG9mIGFsbG9jYXRvciB1c2VkIHRvIGNvbnN0cnVjdCB0aGlzIHN0cmluZy4KKyAgICAgICovCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV9kYXRhcGx1czsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20uCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBAYSBzIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgdGhlIGZpcnN0IEBhCisgICAgICAgKiAgX19uIGNoYXJhY3RlcnMgaW4gQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIHZhbHVlIG9mIEBhIF9fc3RyIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdAorICAgICAgICogIGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisJX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgdGhlIHZhbHVlIG9mIEBhCisgICAgICAgKiAgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZQorICAgICAgICogIGl0IGJlZ2lucy4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgQGEgX19jIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcworICAgICAgICogIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIHZhbHVlIG9mIEBhCisgICAgICAgKiAgX19zdHIgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlCisgICAgICAgKiAgaXQgYmVnaW5zLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorCV9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20uCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgdGhlIGZpcnN0IEBhCisgICAgICAgKiAgX19uIGNoYXJhY3RlcnMgaW4gQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc3RhcnQgc2VhcmNoIGF0IChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIHRoZSB2YWx1ZSBvZgorICAgICAgICogIEBhIF9fcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXgKKyAgICAgICAqICB3aGVyZSBpdCBiZWdpbnMuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tIChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgQGEgX19jIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcworICAgICAgICogIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG9mIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBjaGFyYWN0ZXJzIG9mIEBhIF9fc3RyIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisJX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2YgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgU3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20uCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3Igb25lIG9mIHRoZQorICAgICAgICogIGZpcnN0IEBhIF9fbiBjaGFyYWN0ZXJzIG9mIEBhIF9fcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZgorICAgICAgICogIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsCisgICAgICAgKiAgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG9mIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBjaGFyYWN0ZXJzIG9mIEBhIF9fcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucworICAgICAgICogIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gX19jICBDaGFyYWN0ZXIgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAqICBAYSBfX2Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4CisgICAgICAgKiAgd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IGVxdWl2YWxlbnQgdG8gZmluZChfX2MsIF9fcG9zKS4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2Ygc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBjaGFyYWN0ZXJzIG9mIEBhIF9fc3RyIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKKwlfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2YgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBzZWFyY2ggZm9yLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYKKyAgICAgICAqICBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLAorICAgICAgICogIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2YgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tIChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3Igb25lIG9mIHRoZQorICAgICAgICogIGNoYXJhY3RlcnMgb2YgQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIEBhIF9fYyB3aXRoaW4KKyAgICAgICAqICB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMKKyAgICAgICAqICBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiBlcXVpdmFsZW50IHRvIHJmaW5kKF9fYywgX19wb3MpLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgYSBjaGFyYWN0ZXIgbm90IGNvbnRhaW5lZAorICAgICAgICogIGluIEBhIF9fc3RyIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdAorICAgICAgICogIHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKwlfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbS4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIF9fcyB0byBjb25zaWRlci4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBhIGNoYXJhY3RlciBub3QKKyAgICAgICAqICBjb250YWluZWQgaW4gdGhlIGZpcnN0IEBhIF9fbiBjaGFyYWN0ZXJzIG9mIEBhIF9fcyB3aXRoaW4KKyAgICAgICAqICB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMKKyAgICAgICAqICBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKKwkJCXNpemVfdHlwZSBfX24pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBhIGNoYXJhY3RlciBub3QKKyAgICAgICAqICBjb250YWluZWQgaW4gQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBkaWZmZXJlbnQgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBhIGNoYXJhY3RlcgorICAgICAgICogIG90aGVyIHRoYW4gQGEgX19jIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZQorICAgICAgICogIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKwlfR0xJQkNYWF9OT0VYQ0VQVDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyCisgICAgICAgKiAgbm90IGNvbnRhaW5lZCBpbiBAYSBfX3N0ciB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwKKyAgICAgICAqICByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMKKyAgICAgICAqICBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorCV9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBjb25zaWRlci4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGJhY2t3YXJkIGZvciBhIGNoYXJhY3RlciBub3QKKyAgICAgICAqICBjb250YWluZWQgaW4gdGhlIGZpcnN0IEBhIF9fbiBjaGFyYWN0ZXJzIG9mIEBhIF9fcyB3aXRoaW4gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwKKyAgICAgICAqICByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCisJCSAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyCisgICAgICAgKiAgbm90IGNvbnRhaW5lZCBpbiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsCisgICAgICAgKiAgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgZGlmZmVyZW50IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gX19jICBDaGFyYWN0ZXIgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyIG90aGVyIHRoYW4KKyAgICAgICAqICBAYSBfX2Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcworICAgICAgICogIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisJX0dMSUJDWFhfTk9FWENFUFQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgR2V0IGEgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIChkZWZhdWx0IDApLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHN1YnN0cmluZyAoZGVmYXVsdCByZW1haW5kZXIpLgorICAgICAgICogIEByZXR1cm4gIFRoZSBuZXcgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIF9fcG9zID4gc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBDb25zdHJ1Y3QgYW5kIHJldHVybiBhIG5ldyBzdHJpbmcgdXNpbmcgdGhlIEBhIF9fbgorICAgICAgICogIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MuICBJZiB0aGUgc3RyaW5nIGlzIHRvbworICAgICAgICogIHNob3J0LCB1c2UgdGhlIHJlbWFpbmRlciBvZiB0aGUgY2hhcmFjdGVycy4gIElmIEBhIF9fcG9zIGlzCisgICAgICAgKiAgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHN0cmluZywgb3V0X29mX3JhbmdlIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJpbmcKKyAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywKKwkJCSAgICBfTV9jaGVjayhfX3BvcywgImJhc2ljX3N0cmluZzo6c3Vic3RyIiksIF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHRvIGEgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoaXMgc3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlIEBhCisgICAgICAgKiAgX19zdHIsIDAgaWYgdGhlaXIgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhpcworICAgICAgICogIHN0cmluZyBpcyBvcmRlcmVkIGFmdGVyIEBhIF9fc3RyLiAgRGV0ZXJtaW5lcyB0aGUgZWZmZWN0aXZlCisgICAgICAgKiAgbGVuZ3RoIHJsZW4gb2YgdGhlIHN0cmluZ3MgdG8gY29tcGFyZSBhcyB0aGUgc21hbGxlc3Qgb2YKKyAgICAgICAqICBzaXplKCkgYW5kIHN0ci5zaXplKCkuICBUaGUgZnVuY3Rpb24gdGhlbiBjb21wYXJlcyB0aGUgdHdvCisgICAgICAgKiAgc3RyaW5ncyBieSBjYWxsaW5nIHRyYWl0czo6Y29tcGFyZShkYXRhKCksIHN0ci5kYXRhKCkscmxlbikuCisgICAgICAgKiAgSWYgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyBub256ZXJvIHJldHVybnMgaXQsCisgICAgICAgKiAgb3RoZXJ3aXNlIHRoZSBzaG9ydGVyIG9uZSBpcyBvcmRlcmVkIGZpcnN0LgorICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAorICAgICAgeworCWNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisJY29uc3Qgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CisJY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19zaXplLCBfX29zaXplKTsKKworCWludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOworCWlmICghX19yKQorCSAgX19yID0gX1NfY29tcGFyZShfX3NpemUsIF9fb3NpemUpOworCXJldHVybiBfX3I7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSBzdWJzdHJpbmcgdG8gYSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgSW50ZWdlciA8IDAsIDAsIG9yID4gMC4KKyAgICAgICAqCisgICAgICAgKiAgRm9ybSB0aGUgc3Vic3RyaW5nIG9mIHRoaXMgc3RyaW5nIGZyb20gdGhlIEBhIF9fbiBjaGFyYWN0ZXJzCisgICAgICAgKiAgc3RhcnRpbmcgYXQgQGEgX19wb3MuICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoZQorICAgICAgICogIHN1YnN0cmluZyBpcyBvcmRlcmVkIGJlZm9yZSBAYSBfX3N0ciwgMCBpZiB0aGVpciB2YWx1ZXMgYXJlCisgICAgICAgKiAgZXF1aXZhbGVudCwgb3IgPiAwIGlmIHRoZSBzdWJzdHJpbmcgaXMgb3JkZXJlZCBhZnRlciBAYQorICAgICAgICogIF9fc3RyLiAgRGV0ZXJtaW5lcyB0aGUgZWZmZWN0aXZlIGxlbmd0aCBybGVuIG9mIHRoZSBzdHJpbmdzCisgICAgICAgKiAgdG8gY29tcGFyZSBhcyB0aGUgc21hbGxlc3Qgb2YgdGhlIGxlbmd0aCBvZiB0aGUgc3Vic3RyaW5nCisgICAgICAgKiAgYW5kIEBhIF9fc3RyLnNpemUoKS4gIFRoZSBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28KKyAgICAgICAqICBzdHJpbmdzIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoc3Vic3RyaW5nLmRhdGEoKSxzdHIuZGF0YSgpLHJsZW4pLiAgSWYgdGhlCisgICAgICAgKiAgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwgb3RoZXJ3aXNlCisgICAgICAgKiAgdGhlIHNob3J0ZXIgb25lIGlzIG9yZGVyZWQgZmlyc3QuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSBzdWJzdHJpbmcgdG8gYSBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMSAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MyICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3Vic3RyaW5nIG9mIHN0ci4KKyAgICAgICAqICBAcGFyYW0gX19uMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nIG9mIHN0ci4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBGb3JtIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgZnJvbSB0aGUgQGEgX19uMQorICAgICAgICogIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MxLiAgRm9ybSB0aGUgc3Vic3RyaW5nIG9mIEBhCisgICAgICAgKiAgX19zdHIgZnJvbSB0aGUgQGEgX19uMiBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IEBhIF9fcG9zMi4KKyAgICAgICAqICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoaXMgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlCisgICAgICAgKiAgdGhlIHN1YnN0cmluZyBvZiBAYSBfX3N0ciwgMCBpZiB0aGVpciB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsCisgICAgICAgKiAgb3IgPiAwIGlmIHRoaXMgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYWZ0ZXIgdGhlIHN1YnN0cmluZyBvZgorICAgICAgICogIEBhIF9fc3RyLiAgRGV0ZXJtaW5lcyB0aGUgZWZmZWN0aXZlIGxlbmd0aCBybGVuIG9mIHRoZQorICAgICAgICogIHN0cmluZ3MgdG8gY29tcGFyZSBhcyB0aGUgc21hbGxlc3Qgb2YgdGhlIGxlbmd0aHMgb2YgdGhlCisgICAgICAgKiAgc3Vic3RyaW5ncy4gIFRoZSBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28gc3RyaW5ncyBieQorICAgICAgICogIGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoc3Vic3RyaW5nLmRhdGEoKSxzdHIuc3Vic3RyKHBvczIsbjIpLmRhdGEoKSxybGVuKS4KKyAgICAgICAqICBJZiB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIG5vbnplcm8gcmV0dXJucyBpdCwKKyAgICAgICAqICBvdGhlcndpc2UgdGhlIHNob3J0ZXIgb25lIGlzIG9yZGVyZWQgZmlyc3QuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHRvIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEByZXR1cm4gIEludGVnZXIgPCAwLCAwLCBvciA+IDAuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYW4gaW50ZWdlciA8IDAgaWYgdGhpcyBzdHJpbmcgaXMgb3JkZXJlZCBiZWZvcmUgQGEgX19zLCAwIGlmCisgICAgICAgKiAgdGhlaXIgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhpcyBzdHJpbmcgaXMgb3JkZXJlZCBhZnRlcgorICAgICAgICogIEBhIF9fcy4gIERldGVybWluZXMgdGhlIGVmZmVjdGl2ZSBsZW5ndGggcmxlbiBvZiB0aGUgc3RyaW5ncyB0bworICAgICAgICogIGNvbXBhcmUgYXMgdGhlIHNtYWxsZXN0IG9mIHNpemUoKSBhbmQgdGhlIGxlbmd0aCBvZiBhIHN0cmluZworICAgICAgICogIGNvbnN0cnVjdGVkIGZyb20gQGEgX19zLiAgVGhlIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3byBzdHJpbmdzCisgICAgICAgKiAgYnkgY2FsbGluZyB0cmFpdHM6OmNvbXBhcmUoZGF0YSgpLHMscmxlbikuICBJZiB0aGUgcmVzdWx0IG9mIHRoZQorICAgICAgICogIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LCBvdGhlcndpc2UgdGhlIHNob3J0ZXIgb25lIGlzCisgICAgICAgKiAgb3JkZXJlZCBmaXJzdC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA1IFN0cmluZzo6Y29tcGFyZSBzcGVjaWZpY2F0aW9uIHF1ZXN0aW9uYWJsZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHN1YnN0cmluZyB0byBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBGb3JtIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgZnJvbSB0aGUgQGEgX19uMQorICAgICAgICogIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgcG9zLiAgUmV0dXJucyBhbiBpbnRlZ2VyIDwgMCBpZgorICAgICAgICogIHRoZSBzdWJzdHJpbmcgaXMgb3JkZXJlZCBiZWZvcmUgQGEgX19zLCAwIGlmIHRoZWlyIHZhbHVlcworICAgICAgICogIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhlIHN1YnN0cmluZyBpcyBvcmRlcmVkIGFmdGVyIEBhCisgICAgICAgKiAgX19zLiAgRGV0ZXJtaW5lcyB0aGUgZWZmZWN0aXZlIGxlbmd0aCBybGVuIG9mIHRoZSBzdHJpbmdzIHRvCisgICAgICAgKiAgY29tcGFyZSBhcyB0aGUgc21hbGxlc3Qgb2YgdGhlIGxlbmd0aCBvZiB0aGUgc3Vic3RyaW5nIGFuZAorICAgICAgICogIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcgY29uc3RydWN0ZWQgZnJvbSBAYSBfX3MuICBUaGUKKyAgICAgICAqICBmdW5jdGlvbiB0aGVuIGNvbXBhcmVzIHRoZSB0d28gc3RyaW5nIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoc3Vic3RyaW5nLmRhdGEoKSxfX3MscmxlbikuICBJZiB0aGUgcmVzdWx0IG9mCisgICAgICAgKiAgdGhlIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LCBvdGhlcndpc2UgdGhlIHNob3J0ZXIKKyAgICAgICAqICBvbmUgaXMgb3JkZXJlZCBmaXJzdC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbXBhcmUgc3Vic3RyaW5nIGFnYWluc3QgYSBjaGFyYWN0ZXIgJWFycmF5LgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIGNoYXJhY3RlciAlYXJyYXkgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBfX24yICBOdW1iZXIgb2YgY2hhcmFjdGVycyBvZiBzLgorICAgICAgICogIEByZXR1cm4gIEludGVnZXIgPCAwLCAwLCBvciA+IDAuCisgICAgICAgKgorICAgICAgICogIEZvcm0gdGhlIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyBmcm9tIHRoZSBAYSBfX24xCisgICAgICAgKiAgY2hhcmFjdGVycyBzdGFydGluZyBhdCBAYSBfX3Bvcy4gIEZvcm0gYSBzdHJpbmcgZnJvbSB0aGUKKyAgICAgICAqICBmaXJzdCBAYSBfX24yIGNoYXJhY3RlcnMgb2YgQGEgX19zLiAgUmV0dXJucyBhbiBpbnRlZ2VyIDwgMAorICAgICAgICogIGlmIHRoaXMgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlIHRoZSBzdHJpbmcgZnJvbSBAYSBfX3MsCisgICAgICAgKiAgMCBpZiB0aGVpciB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIG9yID4gMCBpZiB0aGlzIHN1YnN0cmluZworICAgICAgICogIGlzIG9yZGVyZWQgYWZ0ZXIgdGhlIHN0cmluZyBmcm9tIEBhIF9fcy4gIERldGVybWluZXMgdGhlCisgICAgICAgKiAgZWZmZWN0aXZlIGxlbmd0aCBybGVuIG9mIHRoZSBzdHJpbmdzIHRvIGNvbXBhcmUgYXMgdGhlCisgICAgICAgKiAgc21hbGxlc3Qgb2YgdGhlIGxlbmd0aCBvZiB0aGUgc3Vic3RyaW5nIGFuZCBAYSBfX24yLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhlbiBjb21wYXJlcyB0aGUgdHdvIHN0cmluZ3MgYnkgY2FsbGluZworICAgICAgICogIHRyYWl0czo6Y29tcGFyZShzdWJzdHJpbmcuZGF0YSgpLHMscmxlbikuICBJZiB0aGUgcmVzdWx0IG9mCisgICAgICAgKiAgdGhlIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LCBvdGhlcndpc2UgdGhlIHNob3J0ZXIKKyAgICAgICAqICBvbmUgaXMgb3JkZXJlZCBmaXJzdC4KKyAgICAgICAqCisgICAgICAgKiAgTkI6IHMgbXVzdCBoYXZlIGF0IGxlYXN0IG4yIGNoYXJhY3RlcnMsICZhcG9zO1xcMCZhcG9zOyBoYXMKKyAgICAgICAqICBubyBzcGVjaWFsIG1lYW5pbmcuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKKyAgfTsKKworICAvLyBvcGVyYXRvcisKKyAgLyoqCisgICAqICBAYnJpZWYgIENvbmNhdGVuYXRlIHR3byBzdHJpbmdzLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIExhc3Qgc3RyaW5nLgorICAgKiAgQHJldHVybiAgTmV3IHN0cmluZyB3aXRoIHZhbHVlIG9mIEBhIF9fbGhzIGZvbGxvd2VkIGJ5IEBhIF9fcmhzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7CisgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CisgICAgICByZXR1cm4gX19zdHI7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBDIHN0cmluZyBhbmQgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIExhc3Qgc3RyaW5nLgorICAgKiAgQHJldHVybiAgTmV3IHN0cmluZyB3aXRoIHZhbHVlIG9mIEBhIF9fbGhzIGZvbGxvd2VkIGJ5IEBhIF9fcmhzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KKyAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBjaGFyYWN0ZXIgYW5kIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCBAYSBfX2xocyBmb2xsb3dlZCBieSBAYSBfX3Jocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CisgICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKKworICAvKioKKyAgICogIEBicmllZiAgQ29uY2F0ZW5hdGUgc3RyaW5nIGFuZCBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCBAYSBfX2xocyBmb2xsb3dlZCBieSBAYSBfX3Jocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7CisgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CisgICAgICByZXR1cm4gX19zdHI7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBzdHJpbmcgYW5kIGNoYXJhY3Rlci4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCBAYSBfX2xocyBmb2xsb3dlZCBieSBAYSBfX3Jocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CV9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkJX19zaXplX3R5cGU7CisgICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOworICAgICAgcmV0dXJuIF9fc3RyOworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYmIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIHN0ZDo6bW92ZShfX2xocy5hcHBlbmQoX19yaHMpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mJiBfX3JocykKKyAgICB7IHJldHVybiBzdGQ6Om1vdmUoX19yaHMuaW5zZXJ0KDAsIF9fbGhzKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiYgX19saHMsCisJICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYmIF9fcmhzKQorICAgIHsKKyAgICAgIGNvbnN0IGF1dG8gX19zaXplID0gX19saHMuc2l6ZSgpICsgX19yaHMuc2l6ZSgpOworICAgICAgY29uc3QgYm9vbCBfX2NvbmQgPSAoX19zaXplID4gX19saHMuY2FwYWNpdHkoKQorCQkJICAgJiYgX19zaXplIDw9IF9fcmhzLmNhcGFjaXR5KCkpOworICAgICAgcmV0dXJuIF9fY29uZCA/IHN0ZDo6bW92ZShfX3Jocy5pbnNlcnQoMCwgX19saHMpKQorCSAgICAgICAgICAgIDogc3RkOjptb3ZlKF9fbGhzLmFwcGVuZChfX3JocykpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mJiBfX3JocykKKyAgICB7IHJldHVybiBzdGQ6Om1vdmUoX19yaHMuaW5zZXJ0KDAsIF9fbGhzKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsCisJICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYmIF9fcmhzKQorICAgIHsgcmV0dXJuIHN0ZDo6bW92ZShfX3Jocy5pbnNlcnQoMCwgMSwgX19saHMpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mJiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIHN0ZDo6bW92ZShfX2xocy5hcHBlbmQoX19yaHMpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mJiBfX2xocywKKwkgICAgICBfQ2hhclQgX19yaHMpCisgICAgeyByZXR1cm4gc3RkOjptb3ZlKF9fbGhzLmFwcGVuZCgxLCBfX3JocykpOyB9CisjZW5kaWYKKworICAvLyBvcGVyYXRvciA9PQorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBlcXVpdmFsZW5jZSBvZiB0d28gc3RyaW5ncy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocy5jb21wYXJlKEBhIF9fcmhzKSA9PSAwLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZQorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsIGJvb2w+OjpfX3R5cGUKKyAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fcmhzKQorICAgIHsgcmV0dXJuIChfX2xocy5zaXplKCkgPT0gX19yaHMuc2l6ZSgpCisJICAgICAgJiYgIXN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPjo6Y29tcGFyZShfX2xocy5kYXRhKCksIF9fcmhzLmRhdGEoKSwKKwkJCQkJCSAgICBfX2xocy5zaXplKCkpKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGVxdWl2YWxlbmNlIG9mIEMgc3RyaW5nIGFuZCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fcmhzLmNvbXBhcmUoQGEgX19saHMpID09IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGVxdWl2YWxlbmNlIG9mIHN0cmluZyBhbmQgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzLmNvbXBhcmUoQGEgX19yaHMpID09IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQorCisgIC8vIG9wZXJhdG9yICE9CisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGRpZmZlcmVuY2Ugb2YgdHdvIHN0cmluZ3MuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMuY29tcGFyZShAYSBfX3JocykgIT0gMC4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBkaWZmZXJlbmNlIG9mIEMgc3RyaW5nIGFuZCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fcmhzLmNvbXBhcmUoQGEgX19saHMpICE9IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBkaWZmZXJlbmNlIG9mIHN0cmluZyBhbmQgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzLmNvbXBhcmUoQGEgX19yaHMpICE9IDAuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvLyBvcGVyYXRvciA8CisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBwcmVjZWRlcyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgcHJlY2VkZXMgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgcHJlY2VkZXMgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIHByZWNlZGVzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCisJICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBDIHN0cmluZyBwcmVjZWRlcyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIHByZWNlZGVzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KKworICAvLyBvcGVyYXRvciA+CisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBmb2xsb3dzIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBmb2xsb3dzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgc3RyaW5nIGZvbGxvd3MgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGZvbGxvd3MgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIEMgc3RyaW5nIGZvbGxvd3Mgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBmb2xsb3dzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KKworICAvLyBvcGVyYXRvciA8PQorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZG9lc24ndCBmb2xsb3cgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFNlY29uZCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGRvZXNuJ3QgZm9sbG93IEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgc3RyaW5nIGRvZXNuJ3QgZm9sbG93IEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBTdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIEMgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBkb2Vzbid0IGZvbGxvdyBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgQyBzdHJpbmcgZG9lc24ndCBmb2xsb3cgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBkb2Vzbid0IGZvbGxvdyBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CisKKyAgLy8gb3BlcmF0b3IgPj0KKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgc3RyaW5nIGRvZXNuJ3QgcHJlY2VkZSBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgZG9lc24ndCBwcmVjZWRlIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgc3RyaW5nIGRvZXNuJ3QgcHJlY2VkZSBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgU3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgZG9lc24ndCBwcmVjZWRlIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBDIHN0cmluZyBkb2Vzbid0IHByZWNlZGUgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBkb2Vzbid0IHByZWNlZGUgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgU3dhcCBjb250ZW50cyBvZiB0d28gc3RyaW5ncy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKgorICAgKiAgRXhjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBAYSBfX2xocyBhbmQgQGEgX19yaHMgaW4gY29uc3RhbnQgdGltZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKKwkgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZWFkIHN0cmVhbSBpbnRvIGEgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9faXMgIElucHV0IHN0cmVhbS4KKyAgICogIEBwYXJhbSBfX3N0ciAgQnVmZmVyIHRvIHN0b3JlIGludG8uCisgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogIFN0b3JlcyBjaGFyYWN0ZXJzIGZyb20gQGEgX19pcyBpbnRvIEBhIF9fc3RyIHVudGlsIHdoaXRlc3BhY2UgaXMKKyAgICogIGZvdW5kLCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXMgZW5jb3VudGVyZWQsIG9yIHN0ci5tYXhfc2l6ZSgpCisgICAqICBpcyByZWFjaGVkLiAgSWYgaXMud2lkdGgoKSBpcyBub24temVybywgdGhhdCBpcyB0aGUgbGltaXQgb24gdGhlCisgICAqICBudW1iZXIgb2YgY2hhcmFjdGVycyBzdG9yZWQgaW50byBAYSBfX3N0ci4gIEFueSBwcmV2aW91cworICAgKiAgY29udGVudHMgb2YgQGEgX19zdHIgYXJlIGVyYXNlZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOworCisgIHRlbXBsYXRlPD4KKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYgX19pcywgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3N0cik7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFdyaXRlIHN0cmluZyB0byBhIHN0cmVhbS4KKyAgICogIEBwYXJhbSBfX29zICBPdXRwdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdG8gd3JpdGUgb3V0LgorICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgorICAgKgorICAgKiAgT3V0cHV0IGNoYXJhY3RlcnMgb2YgQGEgX19zdHIgaW50byBvcyBmb2xsb3dpbmcgdGhlIHNhbWUgcnVsZXMgYXMgZm9yCisgICAqICB3cml0aW5nIGEgQyBzdHJpbmcuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA1ODYuIHN0cmluZyBpbnNlcnRlciBub3QgYSBmb3JtYXR0ZWQgZnVuY3Rpb24KKyAgICAgIHJldHVybiBfX29zdHJlYW1faW5zZXJ0KF9fb3MsIF9fc3RyLmRhdGEoKSwgX19zdHIuc2l6ZSgpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJlYWQgYSBsaW5lIGZyb20gc3RyZWFtIGludG8gYSBzdHJpbmcuCisgICAqICBAcGFyYW0gX19pcyAgSW5wdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtIF9fc3RyICBCdWZmZXIgdG8gc3RvcmUgaW50by4KKyAgICogIEBwYXJhbSBfX2RlbGltICBDaGFyYWN0ZXIgbWFya2luZyBlbmQgb2YgbGluZS4KKyAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGUgaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiAgU3RvcmVzIGNoYXJhY3RlcnMgZnJvbSBAYSBfX2lzIGludG8gQGEgX19zdHIgdW50aWwgQGEgX19kZWxpbSBpcworICAgKiAgZm91bmQsIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBpcyBlbmNvdW50ZXJlZCwgb3Igc3RyLm1heF9zaXplKCkKKyAgICogIGlzIHJlYWNoZWQuICBBbnkgcHJldmlvdXMgY29udGVudHMgb2YgQGEgX19zdHIgYXJlIGVyYXNlZC4gIElmCisgICAqICBAYSBfX2RlbGltIGlzIGVuY291bnRlcmVkLCBpdCBpcyBleHRyYWN0ZWQgYnV0IG5vdCBzdG9yZWQgaW50bworICAgKiAgQGEgX19zdHIuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJlYWQgYSBsaW5lIGZyb20gc3RyZWFtIGludG8gYSBzdHJpbmcuCisgICAqICBAcGFyYW0gX19pcyAgSW5wdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtIF9fc3RyICBCdWZmZXIgdG8gc3RvcmUgaW50by4KKyAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGUgaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiAgU3RvcmVzIGNoYXJhY3RlcnMgZnJvbSBpcyBpbnRvIEBhIF9fc3RyIHVudGlsICZhcG9zO1xuJmFwb3M7IGlzCisgICAqICBmb3VuZCwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGlzIGVuY291bnRlcmVkLCBvciBzdHIubWF4X3NpemUoKQorICAgKiAgaXMgcmVhY2hlZC4gIEFueSBwcmV2aW91cyBjb250ZW50cyBvZiBAYSBfX3N0ciBhcmUgZXJhc2VkLiAgSWYKKyAgICogIGVuZCBvZiBsaW5lIGlzIGVuY291bnRlcmVkLCBpdCBpcyBleHRyYWN0ZWQgYnV0IG5vdCBzdG9yZWQgaW50bworICAgKiAgQGEgX19zdHIuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKKyAgICB7IHJldHVybiBnZXRsaW5lKF9faXMsIF9fc3RyLCBfX2lzLndpZGVuKCdcbicpKTsgfQorCisgIHRlbXBsYXRlPD4KKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYgX19pbiwgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3N0ciwKKwkgICAgY2hhciBfX2RlbGltKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYgX19pbiwgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+JiBfX3N0ciwKKwkgICAgd2NoYXJfdCBfX2RlbGltKTsKKyNlbmRpZiAgCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2lmICgoX19jcGx1c3BsdXMgPj0gMjAxMTAzTCkgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5KSBcCisgICAgICYmICFkZWZpbmVkKF9HTElCQ1hYX0hBVkVfQlJPS0VOX1ZTV1BSSU5URikpCisKKyNpbmNsdWRlIDxleHQvc3RyaW5nX2NvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyAyMS40IE51bWVyaWMgQ29udmVyc2lvbnMgW3N0cmluZy5jb252ZXJzaW9uc10uCisgIGlubGluZSBpbnQKKyAgc3RvaShjb25zdCBzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYTxsb25nLCBpbnQ+KCZzdGQ6OnN0cnRvbCwgInN0b2kiLCBfX3N0ci5jX3N0cigpLAorCQkJCQlfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSBsb25nCisgIHN0b2woY29uc3Qgc3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9sLCAic3RvbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIHVuc2lnbmVkIGxvbmcKKyAgc3RvdWwoY29uc3Qgc3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG91bCwgInN0b3VsIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIHN0b2xsKGNvbnN0IHN0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6OnN0cnRvbGwsICJzdG9sbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZworICBzdG91bGwoY29uc3Qgc3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG91bGwsICJzdG91bGwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIC8vIE5COiBzdHJ0b2YgdnMgc3RydG9kLgorICBpbmxpbmUgZmxvYXQKKyAgc3RvZihjb25zdCBzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9mLCAic3RvZiIsIF9fc3RyLmNfc3RyKCksIF9faWR4KTsgfQorCisgIGlubGluZSBkb3VibGUKKyAgc3RvZChjb25zdCBzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9kLCAic3RvZCIsIF9fc3RyLmNfc3RyKCksIF9faWR4KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzdG9sZChjb25zdCBzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9sZCwgInN0b2xkIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyAgLy8gTkI6ICh2KXNucHJpbnRmIHZzIHNwcmludGYuCisKKyAgLy8gRFIgMTI2MS4KKyAgaW5saW5lIHN0cmluZworICB0b19zdHJpbmcoaW50IF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwgNCAqIHNpemVvZihpbnQpLAorCQkJCQkgICAiJWQiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgc3RyaW5nCisgIHRvX3N0cmluZyh1bnNpZ25lZCBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8c3RyaW5nPigmc3RkOjp2c25wcmludGYsCisJCQkJCSAgIDQgKiBzaXplb2YodW5zaWduZWQpLAorCQkJCQkgICAiJXUiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgc3RyaW5nCisgIHRvX3N0cmluZyhsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwgNCAqIHNpemVvZihsb25nKSwKKwkJCQkJICAgIiVsZCIsIF9fdmFsKTsgfQorCisgIGlubGluZSBzdHJpbmcKKyAgdG9fc3RyaW5nKHVuc2lnbmVkIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLAorCQkJCQkgICA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAiJWx1IiwgX192YWwpOyB9CisKKyAgaW5saW5lIHN0cmluZworICB0b19zdHJpbmcobG9uZyBsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwKKwkJCQkJICAgNCAqIHNpemVvZihsb25nIGxvbmcpLAorCQkJCQkgICAiJWxsZCIsIF9fdmFsKTsgfQorCisgIGlubGluZSBzdHJpbmcKKyAgdG9fc3RyaW5nKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8c3RyaW5nPigmc3RkOjp2c25wcmludGYsCisJCQkJCSAgIDQgKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSwKKwkJCQkJICAgIiVsbHUiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgc3RyaW5nCisgIHRvX3N0cmluZyhmbG9hdCBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPSAKKyAgICAgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxmbG9hdD46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8c3RyaW5nPigmc3RkOjp2c25wcmludGYsIF9fbiwKKwkJCQkJICAgIiVmIiwgX192YWwpOworICB9CisKKyAgaW5saW5lIHN0cmluZworICB0b19zdHJpbmcoZG91YmxlIF9fdmFsKQorICB7CisgICAgY29uc3QgaW50IF9fbiA9IAorICAgICAgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGRvdWJsZT46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8c3RyaW5nPigmc3RkOjp2c25wcmludGYsIF9fbiwKKwkJCQkJICAgIiVmIiwgX192YWwpOworICB9CisKKyAgaW5saW5lIHN0cmluZworICB0b19zdHJpbmcobG9uZyBkb3VibGUgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0gCisgICAgICBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8bG9uZyBkb3VibGU+OjpfX21heF9leHBvbmVudDEwICsgMjA7CisgICAgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLCBfX24sCisJCQkJCSAgICIlTGYiLCBfX3ZhbCk7CisgIH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGlubGluZSBpbnQgCisgIHN0b2koY29uc3Qgd3N0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hPGxvbmcsIGludD4oJnN0ZDo6d2NzdG9sLCAic3RvaSIsIF9fc3RyLmNfc3RyKCksCisJCQkJCV9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIGxvbmcgCisgIHN0b2woY29uc3Qgd3N0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvbCwgInN0b2wiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSB1bnNpZ25lZCBsb25nCisgIHN0b3VsKGNvbnN0IHdzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjp3Y3N0b3VsLCAic3RvdWwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSBsb25nIGxvbmcKKyAgc3RvbGwoY29uc3Qgd3N0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvbGwsICJzdG9sbCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZworICBzdG91bGwoY29uc3Qgd3N0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvdWxsLCAic3RvdWxsIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICAvLyBOQjogd2NzdG9mIHZzIHdjc3RvZC4KKyAgaW5saW5lIGZsb2F0CisgIHN0b2YoY29uc3Qgd3N0cmluZyYgX19zdHIsIHNpemVfdCogX19pZHggPSAwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjp3Y3N0b2YsICJzdG9mIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyAgaW5saW5lIGRvdWJsZQorICBzdG9kKGNvbnN0IHdzdHJpbmcmIF9fc3RyLCBzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6d2NzdG9kLCAic3RvZCIsIF9fc3RyLmNfc3RyKCksIF9faWR4KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzdG9sZChjb25zdCB3c3RyaW5nJiBfX3N0ciwgc2l6ZV90KiBfX2lkeCA9IDApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvbGQsICJzdG9sZCIsIF9fc3RyLmNfc3RyKCksIF9faWR4KTsgfQorCisgIC8vIERSIDEyNjEuCisgIGlubGluZSB3c3RyaW5nCisgIHRvX3dzdHJpbmcoaW50IF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzx3c3RyaW5nPigmc3RkOjp2c3dwcmludGYsIDQgKiBzaXplb2YoaW50KSwKKwkJCQkJICAgIEwiJWQiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgd3N0cmluZworICB0b193c3RyaW5nKHVuc2lnbmVkIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzx3c3RyaW5nPigmc3RkOjp2c3dwcmludGYsCisJCQkJCSAgICA0ICogc2l6ZW9mKHVuc2lnbmVkKSwKKwkJCQkJICAgIEwiJXUiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgd3N0cmluZworICB0b193c3RyaW5nKGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHdzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwgNCAqIHNpemVvZihsb25nKSwKKwkJCQkJICAgIEwiJWxkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIHdzdHJpbmcKKyAgdG9fd3N0cmluZyh1bnNpZ25lZCBsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzx3c3RyaW5nPigmc3RkOjp2c3dwcmludGYsCisJCQkJCSAgICA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgTCIlbHUiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgd3N0cmluZworICB0b193c3RyaW5nKGxvbmcgbG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8d3N0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLAorCQkJCQkgICAgNCAqIHNpemVvZihsb25nIGxvbmcpLAorCQkJCQkgICAgTCIlbGxkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIHdzdHJpbmcKKyAgdG9fd3N0cmluZyh1bnNpZ25lZCBsb25nIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHdzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwKKwkJCQkJICAgIDQgKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSwKKwkJCQkJICAgIEwiJWxsdSIsIF9fdmFsKTsgfQorCisgIGlubGluZSB3c3RyaW5nCisgIHRvX3dzdHJpbmcoZmxvYXQgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0KKyAgICAgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxmbG9hdD46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8d3N0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLCBfX24sCisJCQkJCSAgICBMIiVmIiwgX192YWwpOworICB9CisKKyAgaW5saW5lIHdzdHJpbmcKKyAgdG9fd3N0cmluZyhkb3VibGUgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0KKyAgICAgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxkb3VibGU+OjpfX21heF9leHBvbmVudDEwICsgMjA7CisgICAgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPHdzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwgX19uLAorCQkJCQkgICAgTCIlZiIsIF9fdmFsKTsKKyAgfQorCisgIGlubGluZSB3c3RyaW5nCisgIHRvX3dzdHJpbmcobG9uZyBkb3VibGUgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0KKyAgICAgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxsb25nIGRvdWJsZT46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8d3N0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLCBfX24sCisJCQkJCSAgICBMIiVMZiIsIF9fdmFsKTsKKyAgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIEMrKzExICYmIF9HTElCQ1hYX1VTRV9DOTkgLi4uICovCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKKyNpbmNsdWRlIDxiaXRzL2Z1bmN0aW9uYWxfaGFzaC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gRFIgMTE4Mi4KKworI2lmbmRlZiBfR0xJQkNYWF9DT01QQVRJQklMSVRZX0NYWDBYCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIHN0cmluZy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHN0cmluZz4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIHN0cmluZz4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3Qgc3RyaW5nJiBfX3MpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX19zLmRhdGEoKSwgX19zLmxlbmd0aCgpKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2Zhc3RfaGFzaDxoYXNoPHN0cmluZz4+IDogc3RkOjpmYWxzZV90eXBlCisgICAgeyB9OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3Igd3N0cmluZy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHdzdHJpbmc+CisgICAgOiBwdWJsaWMgX19oYXNoX2Jhc2U8c2l6ZV90LCB3c3RyaW5nPgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCB3c3RyaW5nJiBfX3MpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX19zLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MubGVuZ3RoKCkgKiBzaXplb2Yod2NoYXJfdCkpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfZmFzdF9oYXNoPGhhc2g8d3N0cmluZz4+IDogc3RkOjpmYWxzZV90eXBlCisgICAgeyB9OworI2VuZGlmCisjZW5kaWYgLyogX0dMSUJDWFhfQ09NUEFUSUJJTElUWV9DWFgwWCAqLworCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIHUxNnN0cmluZy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHUxNnN0cmluZz4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIHUxNnN0cmluZz4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdTE2c3RyaW5nJiBfX3MpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX19zLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MubGVuZ3RoKCkgKiBzaXplb2YoY2hhcjE2X3QpKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2Zhc3RfaGFzaDxoYXNoPHUxNnN0cmluZz4+IDogc3RkOjpmYWxzZV90eXBlCisgICAgeyB9OworCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIHUzMnN0cmluZy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHUzMnN0cmluZz4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIHUzMnN0cmluZz4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdTMyc3RyaW5nJiBfX3MpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX19zLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MubGVuZ3RoKCkgKiBzaXplb2YoY2hhcjMyX3QpKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2Zhc3RfaGFzaDxoYXNoPHUzMnN0cmluZz4+IDogc3RkOjpmYWxzZV90eXBlCisgICAgeyB9OworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvKiBfQkFTSUNfU1RSSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9iYXNpY19zdHJpbmcudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2Jhc2ljX3N0cmluZy50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3ZWI3NAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9iYXNpY19zdHJpbmcudGNjCkBAIC0wLDAgKzEsMTE2NiBAQAorLy8gQ29tcG9uZW50cyBmb3IgbWFuaXB1bGF0aW5nIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2Jhc2ljX3N0cmluZy50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtzdHJpbmd9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIxICBTdHJpbmdzIGxpYnJhcnkKKy8vCisKKy8vIFdyaXR0ZW4gYnkgSmFzb24gTWVycmlsbCBiYXNlZCB1cG9uIHRoZSBzcGVjaWZpY2F0aW9uIGJ5IFRha2Fub3JpIEFkYWNoaQorLy8gaW4gQU5TSSBYM0oxNi85NC0wMDEzUjIuICBSZXdyaXR0ZW4gYnkgTmF0aGFuIE15ZXJzIHRvIElTTy0xNDg4Mi4KKworI2lmbmRlZiBfQkFTSUNfU1RSSU5HX1RDQworI2RlZmluZSBfQkFTSUNfU1RSSU5HX1RDQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvY3h4YWJpX2ZvcmNlZC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXBfYmFzZSkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjb25zdCBfQ2hhclQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7CisKKyAgLy8gTGlua2VyIHNldHMgX1NfZW1wdHlfcmVwX3N0b3JhZ2UgdG8gYWxsIDBzIChvbmUgcmVmZXJlbmNlLCBlbXB0eSBzdHJpbmcpCisgIC8vIGF0IHN0YXRpYyBpbml0IHRpbWUgKGJlZm9yZSBzdGF0aWMgY3RvcnMgYXJlIHJ1bikuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWworICAgIChzaXplb2YoX1JlcF9iYXNlKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKSAvCisgICAgICBzaXplb2Yoc2l6ZV90eXBlKV07CisKKyAgLy8gTkI6IFRoaXMgaXMgdGhlIHNwZWNpYWwgY2FzZSBmb3IgSW5wdXQgSXRlcmF0b3JzLCB1c2VkIGluCisgIC8vIGlzdHJlYW1idWZfaXRlcmF0b3JzLCBldGMuCisgIC8vIElucHV0IEl0ZXJhdG9ycyBoYXZlIGEgY29zdCBzdHJ1Y3R1cmUgdmVyeSBkaWZmZXJlbnQgZnJvbQorICAvLyBwb2ludGVycywgY2FsbGluZyBmb3IgYSBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgIF9DaGFyVCoKKyAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCisJCSAgIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKyNpZiBfR0xJQkNYWF9GVUxMWV9EWU5BTUlDX1NUUklORyA9PSAwCisJaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKKwkgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZkYXRhKCk7CisjZW5kaWYKKwkvLyBBdm9pZCByZWFsbG9jYXRpb24gZm9yIGNvbW1vbiBjYXNlLgorCV9DaGFyVCBfX2J1ZlsxMjhdOworCXNpemVfdHlwZSBfX2xlbiA9IDA7CisJd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9fbGVuIDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQorCSAgeworCSAgICBfX2J1ZltfX2xlbisrXSA9ICpfX2JlZzsKKwkgICAgKytfX2JlZzsKKwkgIH0KKwlfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4sIHNpemVfdHlwZSgwKSwgX19hKTsKKwlfTV9jb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19sZW4pOworCV9fdHJ5CisJICB7CisJICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKKwkgICAgICB7CisJCWlmIChfX2xlbiA9PSBfX3ItPl9NX2NhcGFjaXR5KQorCQkgIHsKKwkJICAgIC8vIEFsbG9jYXRlIG1vcmUgc3BhY2UuCisJCSAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2xlbiwgX19hKTsKKwkJICAgIF9NX2NvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CisJCSAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKKwkJICAgIF9fciA9IF9fYW5vdGhlcjsKKwkJICB9CisJCV9fci0+X01fcmVmZGF0YSgpW19fbGVuKytdID0gKl9fYmVnOworCQkrK19fYmVnOworCSAgICAgIH0KKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorCV9fci0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19sZW4pOworCXJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisgICAgICBfQ2hhclQqCisgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyYXRvciBfX2JlZywgX0luSXRlcmF0b3IgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAorCQkgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKyNpZiBfR0xJQkNYWF9GVUxMWV9EWU5BTUlDX1NUUklORyA9PSAwCisJaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKKwkgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZkYXRhKCk7CisjZW5kaWYKKwkvLyBOQjogTm90IHJlcXVpcmVkLCBidXQgY29uc2lkZXJlZCBiZXN0IHByYWN0aWNlLgorCWlmIChfX2dudV9jeHg6Ol9faXNfbnVsbF9wb2ludGVyKF9fYmVnKSAmJiBfX2JlZyAhPSBfX2VuZCkKKwkgIF9fdGhyb3dfbG9naWNfZXJyb3IoX19OKCJiYXNpY19zdHJpbmc6Ol9TX2NvbnN0cnVjdCBudWxsIG5vdCB2YWxpZCIpKTsKKworCWNvbnN0IHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFuY2UoX19iZWcsCisJCQkJCQkJCSAgICAgIF9fZW5kKSk7CisJLy8gQ2hlY2sgZm9yIG91dF9vZl9yYW5nZSBhbmQgbGVuZ3RoX2Vycm9yIGV4Y2VwdGlvbnMuCisJX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgc2l6ZV90eXBlKDApLCBfX2EpOworCV9fdHJ5CisJICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorCV9fci0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19kbmV3KTsKKwlyZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX0NoYXJUKgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICB7CisjaWYgX0dMSUJDWFhfRlVMTFlfRFlOQU1JQ19TVFJJTkcgPT0gMAorICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKKwlyZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmZGF0YSgpOworI2VuZGlmCisgICAgICAvLyBDaGVjayBmb3Igb3V0X29mX3JhbmdlIGFuZCBsZW5ndGhfZXJyb3IgZXhjZXB0aW9ucy4KKyAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX24sIHNpemVfdHlwZSgwKSwgX19hKTsKKyAgICAgIGlmIChfX24pCisJX01fYXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CisKKyAgICAgIF9fci0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19uKTsKKyAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKKwkJCQkJICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAorCQkgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpCisgICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2EpLCBfX2EpCisgICAgeyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9kYXRhKCkKKwkJCSAgICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zLAorCQkJCQkJImJhc2ljX3N0cmluZzo6YmFzaWNfc3RyaW5nIiksCisJCQkgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19zdHIuX01fbGltaXQoX19wb3MsIF9fbikKKwkJCSAgICAgICArIF9fcG9zLCBfQWxsb2MoKSksIF9BbGxvYygpKQorICAgIHsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCisJCSBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9kYXRhKCkKKwkJCSAgICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zLAorCQkJCQkJImJhc2ljX3N0cmluZzo6YmFzaWNfc3RyaW5nIiksCisJCQkgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19zdHIuX01fbGltaXQoX19wb3MsIF9fbikKKwkJCSAgICAgICArIF9fcG9zLCBfX2EpLCBfX2EpCisgICAgeyB9CisKKyAgLy8gVEJEOiBEUEcgYW5ub3RhdGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIF9fbiwgX19hKSwgX19hKQorICAgIHsgfQorCisgIC8vIFRCRDogRFBHIGFubm90YXRlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykgOgorCQkJICAgICAgIF9fcyArIG5wb3MsIF9fYSksIF9fYSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKKyAgICB7IH0KKworICAvLyBUQkQ6IERQRyBhbm5vdGF0ZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKKyAgICB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYmFzaWNfc3RyaW5nKGluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fYSksIF9fYSkKKyAgICB7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCisgICAgeworICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQorCXsKKwkgIC8vIFhYWCBNVAorCSAgY29uc3QgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOworCSAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKKwkgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CisJICBfTV9kYXRhKF9fdG1wKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIF9NX2NoZWNrX2xlbmd0aCh0aGlzLT5zaXplKCksIF9fbiwgImJhc2ljX3N0cmluZzo6YXNzaWduIik7CisgICAgICBpZiAoX01fZGlzanVuY3QoX19zKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisJcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShzaXplX3R5cGUoMCksIHRoaXMtPnNpemUoKSwgX19zLCBfX24pOworICAgICAgZWxzZQorCXsKKwkgIC8vIFdvcmsgaW4tcGxhY2UuCisJICBjb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3MgLSBfTV9kYXRhKCk7CisJICBpZiAoX19wb3MgPj0gX19uKQorCSAgICBfTV9jb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOworCSAgZWxzZSBpZiAoX19wb3MpCisJICAgIF9NX21vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CisJICBfTV9yZXAoKS0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19uKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIGlmIChfX24pCisJeworCSAgX01fY2hlY2tfbGVuZ3RoKHNpemVfdHlwZSgwKSwgX19uLCAiYmFzaWNfc3RyaW5nOjphcHBlbmQiKTsJICAKKwkgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKKwkgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQorCSAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKKwkgIF9NX2Fzc2lnbihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9fbiwgX19jKTsKKwkgIF9NX3JlcCgpLT5fTV9zZXRfbGVuZ3RoX2FuZF9zaGFyYWJsZShfX2xlbik7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBpZiAoX19uKQorCXsKKwkgIF9NX2NoZWNrX2xlbmd0aChzaXplX3R5cGUoMCksIF9fbiwgImJhc2ljX3N0cmluZzo6YXBwZW5kIik7CisJICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CisJICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKKwkgICAgeworCSAgICAgIGlmIChfTV9kaXNqdW5jdChfX3MpKQorCQl0aGlzLT5yZXNlcnZlKF9fbGVuKTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBjb25zdCBzaXplX3R5cGUgX19vZmYgPSBfX3MgLSBfTV9kYXRhKCk7CisJCSAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CisJCSAgX19zID0gX01fZGF0YSgpICsgX19vZmY7CisJCX0KKwkgICAgfQorCSAgX01fY29weShfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9fcywgX19uKTsKKwkgIF9NX3JlcCgpLT5fTV9zZXRfbGVuZ3RoX2FuZF9zaGFyYWJsZShfX2xlbik7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7CisgICAgICBpZiAoX19zaXplKQorCXsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsKKwkgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQorCSAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKKwkgIF9NX2NvcHkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3N0ci5fTV9kYXRhKCksIF9fc2l6ZSk7CisJICBfTV9yZXAoKS0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19sZW4pOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9ICAgIAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfX3N0ci5fTV9jaGVjayhfX3BvcywgImJhc2ljX3N0cmluZzo6YXBwZW5kIik7CisgICAgICBfX24gPSBfX3N0ci5fTV9saW1pdChfX3BvcywgX19uKTsKKyAgICAgIGlmIChfX24pCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOworCSAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisJICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOworCSAgX01fY29weShfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zLCBfX24pOworCSAgX01fcmVwKCktPl9NX3NldF9sZW5ndGhfYW5kX3NoYXJhYmxlKF9fbGVuKTsJICAKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKKyAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgICB7CisgICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgIF9NX2NoZWNrKF9fcG9zLCAiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKKyAgICAgICBfTV9jaGVja19sZW5ndGgoc2l6ZV90eXBlKDApLCBfX24sICJiYXNpY19zdHJpbmc6Omluc2VydCIpOworICAgICAgIGlmIChfTV9kaXNqdW5jdChfX3MpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKKyAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX19wb3MsIHNpemVfdHlwZSgwKSwgX19zLCBfX24pOworICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgLy8gV29yayBpbi1wbGFjZS4KKyAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOworICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CisgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOworICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOworICAgICAgICAgICBpZiAoX19zICArIF9fbiA8PSBfX3ApCisgICAgICAgICAgICAgX01fY29weShfX3AsIF9fcywgX19uKTsKKyAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKKyAgICAgICAgICAgICBfTV9jb3B5KF9fcCwgX19zICsgX19uLCBfX24pOworICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworCSAgICAgICBjb25zdCBzaXplX3R5cGUgX19ubGVmdCA9IF9fcCAtIF9fczsKKyAgICAgICAgICAgICAgIF9NX2NvcHkoX19wLCBfX3MsIF9fbmxlZnQpOworICAgICAgICAgICAgICAgX01fY29weShfX3AgKyBfX25sZWZ0LCBfX3AgKyBfX24sIF9fbiAtIF9fbmxlZnQpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgfQorICAgICB9CisKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICB7CisgICAgICAgX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fZmlyc3QgPj0gX01faWJlZ2luKCkgJiYgX19maXJzdCA8PSBfX2xhc3QKKwkJCQkmJiBfX2xhc3QgPD0gX01faWVuZCgpKTsKKworICAgICAgIC8vIE5COiBUaGlzIGlzbid0IGp1c3QgYW4gb3B0aW1pemF0aW9uIChiYWlsIG91dCBlYXJseSB3aGVuCisgICAgICAgLy8gdGhlcmUgaXMgbm90aGluZyB0byBkbywgcmVhbGx5KSwgaXQncyBhbHNvIGEgY29ycmVjdG5lc3MKKyAgICAgICAvLyBpc3N1ZSB2cyBNVCwgc2VlIGxpYnN0ZGMrKy80MDUxOC4KKyAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gX19sYXN0IC0gX19maXJzdDsKKyAgICAgICBpZiAoX19zaXplKQorCSB7CisJICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19maXJzdCAtIF9NX2liZWdpbigpOworCSAgIF9NX211dGF0ZShfX3BvcywgX19zaXplLCBzaXplX3R5cGUoMCkpOworCSAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CisJICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIF9fcG9zKTsKKwkgfQorICAgICAgIGVsc2UKKwkgcmV0dXJuIF9fZmlyc3Q7CisgICAgIH0KKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCisgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICAgc2l6ZV90eXBlIF9fbjIpCisgICAgIHsKKyAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbjIpOworICAgICAgIF9NX2NoZWNrKF9fcG9zLCAiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CisgICAgICAgX19uMSA9IF9NX2xpbWl0KF9fcG9zLCBfX24xKTsKKyAgICAgICBfTV9jaGVja19sZW5ndGgoX19uMSwgX19uMiwgImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOworICAgICAgIGJvb2wgX19sZWZ0OworICAgICAgIGlmIChfTV9kaXNqdW5jdChfX3MpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKKyAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX19wb3MsIF9fbjEsIF9fcywgX19uMik7CisgICAgICAgZWxzZSBpZiAoKF9fbGVmdCA9IF9fcyArIF9fbjIgPD0gX01fZGF0YSgpICsgX19wb3MpCisJCXx8IF9NX2RhdGEoKSArIF9fcG9zICsgX19uMSA8PSBfX3MpCisJIHsKKwkgICAvLyBXb3JrIGluLXBsYWNlOiBub24tb3ZlcmxhcHBpbmcgY2FzZS4KKwkgICBzaXplX3R5cGUgX19vZmYgPSBfX3MgLSBfTV9kYXRhKCk7CisJICAgX19sZWZ0ID8gX19vZmYgOiAoX19vZmYgKz0gX19uMiAtIF9fbjEpOworCSAgIF9NX211dGF0ZShfX3BvcywgX19uMSwgX19uMik7CisJICAgX01fY29weShfTV9kYXRhKCkgKyBfX3BvcywgX01fZGF0YSgpICsgX19vZmYsIF9fbjIpOworCSAgIHJldHVybiAqdGhpczsKKwkgfQorICAgICAgIGVsc2UKKwkgeworCSAgIC8vIFRvZG86IG92ZXJsYXBwaW5nIGNhc2UuCisJICAgY29uc3QgYmFzaWNfc3RyaW5nIF9fdG1wKF9fcywgX19uMik7CisJICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfX3BvcywgX19uMSwgX190bXAuX01fZGF0YSgpLCBfX24yKTsKKwkgfQorICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgorICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93ICgpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwX2Jhc2UpICsKKwkgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLT5fTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CisgICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX2xlYWtfaGFyZCgpCisgICAgeworI2lmIF9HTElCQ1hYX0ZVTExZX0RZTkFNSUNfU1RSSU5HID09IDAKKyAgICAgIGlmIChfTV9yZXAoKSA9PSAmX1NfZW1wdHlfcmVwKCkpCisJcmV0dXJuOworI2VuZGlmCisgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQorCV9NX211dGF0ZSgwLCAwLCAwKTsKKyAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CisKKyAgICAgIGlmIChfX25ld19zaXplID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisJeworCSAgLy8gTXVzdCByZWFsbG9jYXRlLgorCSAgY29uc3QgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOworCSAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIHRoaXMtPmNhcGFjaXR5KCksIF9fYSk7CisKKwkgIGlmIChfX3BvcykKKwkgICAgX01fY29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CisJICBpZiAoX19ob3dfbXVjaCkKKwkgICAgX01fY29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAorCQkgICAgX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjEsIF9faG93X211Y2gpOworCisJICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOworCSAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7CisJfQorICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQorCXsKKwkgIC8vIFdvcmsgaW4tcGxhY2UuCisJICBfTV9tb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLAorCQkgIF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xLCBfX2hvd19tdWNoKTsKKwl9CisgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlbmd0aF9hbmRfc2hhcmFibGUoX19uZXdfc2l6ZSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICByZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKKyAgICB7CisgICAgICBpZiAoX19yZXMgIT0gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCisgICAgICAgIHsKKwkgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBzaHJpbmsgYmVsb3cgdGhlIGN1cnJlbnQgc2l6ZQorCSAgaWYgKF9fcmVzIDwgdGhpcy0+c2l6ZSgpKQorCSAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsKKwkgIGNvbnN0IGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKKwkgIF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CisJICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOworCSAgX01fZGF0YShfX3RtcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIHN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCisgICAgeworICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKKwlfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CisgICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKKwlfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOworICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQorCXsKKwkgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CisJICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOworCSAgX19zLl9NX2RhdGEoX190bXApOworCX0KKyAgICAgIC8vIFRoZSBjb2RlIGJlbG93IGNhbiB1c3VhbGx5IGJlIG9wdGltaXplZCBhd2F5LgorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwKKwkJCQkgICAgX19zLmdldF9hbGxvY2F0b3IoKSk7CisJICBjb25zdCBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKKwkJCQkgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKKwkgICp0aGlzID0gX190bXAyOworCSAgX19zID0gX190bXAxOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKKyAgICBfU19jcmVhdGUoc2l6ZV90eXBlIF9fY2FwYWNpdHksIHNpemVfdHlwZSBfX29sZF9jYXBhY2l0eSwKKwkgICAgICBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gODMuICBTdHJpbmc6Om5wb3MgdnMuIHN0cmluZzo6bWF4X3NpemUoKQorICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKKwlfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIikpOworCisgICAgICAvLyBUaGUgc3RhbmRhcmQgcGxhY2VzIG5vIHJlc3RyaWN0aW9uIG9uIGFsbG9jYXRpbmcgbW9yZSBtZW1vcnkKKyAgICAgIC8vIHRoYW4gaXMgc3RyaWN0bHkgbmVlZGVkIHdpdGhpbiB0aGlzIGxheWVyIGF0IHRoZSBtb21lbnQgb3IgYXMKKyAgICAgIC8vIHJlcXVlc3RlZCBieSBhbiBleHBsaWNpdCBhcHBsaWNhdGlvbiBjYWxsIHRvIHJlc2VydmUoKS4KKworICAgICAgLy8gTWFueSBtYWxsb2MgaW1wbGVtZW50YXRpb25zIHBlcmZvcm0gcXVpdGUgcG9vcmx5IHdoZW4gYW4KKyAgICAgIC8vIGFwcGxpY2F0aW9uIGF0dGVtcHRzIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiBhIHN0ZXB3aXNlIGZhc2hpb24KKyAgICAgIC8vIGdyb3dpbmcgZWFjaCBhbGxvY2F0aW9uIHNpemUgYnkgb25seSAxIGNoYXIuICBBZGRpdGlvbmFsbHksCisgICAgICAvLyBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gYWxsb2NhdGUgbGVzcyBsaW5lYXIgbWVtb3J5IHRoYW4gdGhlCisgICAgICAvLyBuYXR1cmFsIGJsb2NraW5nIHNpemUgb2YgdGhlIG1hbGxvYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIHdvdWxkIG5lZWQgYSBzb21ld2hhdCBsb3ctbGV2ZWwgY2FsY3VsYXRpb24KKyAgICAgIC8vIHdpdGggdHVuZWQgcGFyYW1ldGVycyB0byBnZXQgdGhpcyBwZXJmZWN0IGZvciBhbnkgcGFydGljdWxhcgorICAgICAgLy8gbWFsbG9jIGltcGxlbWVudGF0aW9uLiAgRm9ydHVuYXRlbHksIGdlbmVyYWxpemF0aW9ucyBhYm91dAorICAgICAgLy8gY29tbW9uIGZlYXR1cmVzIHNlZW4gYW1vbmcgaW1wbGVtZW50YXRpb25zIHNlZW1zIHRvIHN1ZmZpY2UuCisKKyAgICAgIC8vIF9fcGFnZXNpemUgbmVlZCBub3QgbWF0Y2ggdGhlIGFjdHVhbCBWTSBwYWdlIHNpemUgZm9yIGdvb2QKKyAgICAgIC8vIHJlc3VsdHMgaW4gcHJhY3RpY2UsIHRodXMgd2UgcGljayBhIGNvbW1vbiB2YWx1ZSBvbiB0aGUgbG93CisgICAgICAvLyBzaWRlLiAgX19tYWxsb2NfaGVhZGVyX3NpemUgaXMgYW4gZXN0aW1hdGUgb2YgdGhlIGFtb3VudCBvZgorICAgICAgLy8gb3ZlcmhlYWQgcGVyIG1lbW9yeSBhbGxvY2F0aW9uIChpbiBwcmFjdGljZSBzZWVuIE4gKiBzaXplb2YKKyAgICAgIC8vICh2b2lkKikgd2hlcmUgTiBpcyAwLCAyIG9yIDQpLiAgQWNjb3JkaW5nIHRvIGZvbGtsb3JlLAorICAgICAgLy8gcGlja2luZyB0aGlzIHZhbHVlIG9uIHRoZSBoaWdoIHNpZGUgaXMgYmV0dGVyIHRoYW4KKyAgICAgIC8vIGxvdy1iYWxsaW5nIGl0IChlc3BlY2lhbGx5IHdoZW4gdGhpcyBhbGdvcml0aG0gaXMgdXNlZCB3aXRoCisgICAgICAvLyBtYWxsb2MgaW1wbGVtZW50YXRpb25zIHRoYXQgYWxsb2NhdGUgbWVtb3J5IGJsb2NrcyByb3VuZGVkIHVwCisgICAgICAvLyB0byBhIHNpemUgd2hpY2ggaXMgYSBwb3dlciBvZiAyKS4KKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2Yodm9pZCopOworCisgICAgICAvLyBUaGUgYmVsb3cgaW1wbGVtZW50cyBhbiBleHBvbmVudGlhbCBncm93dGggcG9saWN5LCBuZWNlc3NhcnkgdG8KKyAgICAgIC8vIG1lZXQgYW1vcnRpemVkIGxpbmVhciB0aW1lIHJlcXVpcmVtZW50cyBvZiB0aGUgbGlicmFyeTogc2VlCisgICAgICAvLyBodHRwOi8vZ2NjLmdudS5vcmcvbWwvbGlic3RkYysrLzIwMDEtMDcvbXNnMDAwODUuaHRtbC4KKyAgICAgIC8vIEl0J3MgYWN0aXZlIGZvciBhbGxvY2F0aW9ucyByZXF1aXJpbmcgYW4gYW1vdW50IG9mIG1lbW9yeSBhYm92ZQorICAgICAgLy8gc3lzdGVtIHBhZ2VzaXplLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZQorICAgICAgLy8gc3RhbmRhcmQ6IGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwMS0wNy9tc2cwMDEzMC5odG1sCisgICAgICBpZiAoX19jYXBhY2l0eSA+IF9fb2xkX2NhcGFjaXR5ICYmIF9fY2FwYWNpdHkgPCAyICogX19vbGRfY2FwYWNpdHkpCisJX19jYXBhY2l0eSA9IDIgKiBfX29sZF9jYXBhY2l0eTsKKworICAgICAgLy8gTkI6IE5lZWQgYW4gYXJyYXkgb2YgY2hhcl90eXBlW19fY2FwYWNpdHldLCBwbHVzIGEgdGVybWluYXRpbmcKKyAgICAgIC8vIG51bGwgY2hhcl90eXBlKCkgZWxlbWVudCwgcGx1cyBlbm91Z2ggZm9yIHRoZSBfUmVwIGRhdGEgc3RydWN0dXJlLgorICAgICAgLy8gV2hldy4gU2VlbWluZ2x5IHNvIG5lZWR5LCB5ZXQgc28gZWxlbWVudGFsLgorICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fYWRqX3NpemUgPSBfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZTsKKyAgICAgIGlmIChfX2Fkal9zaXplID4gX19wYWdlc2l6ZSAmJiBfX2NhcGFjaXR5ID4gX19vbGRfY2FwYWNpdHkpCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fZXh0cmEgPSBfX3BhZ2VzaXplIC0gX19hZGpfc2l6ZSAlIF9fcGFnZXNpemU7CisJICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsKKwkgIC8vIE5ldmVyIGFsbG9jYXRlIGEgc3RyaW5nIGJpZ2dlciB0aGFuIF9TX21heF9zaXplLgorCSAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKKwkgICAgX19jYXBhY2l0eSA9IF9TX21heF9zaXplOworCSAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOworCX0KKworICAgICAgLy8gTkI6IE1pZ2h0IHRocm93LCBidXQgbm8gd29ycmllcyBhYm91dCBhIGxlYWssIG1hdGU6IF9SZXAoKQorICAgICAgLy8gZG9lcyBub3QgdGhyb3cuCisgICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOworICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOworICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7CisgICAgICAvLyBBQkkgY29tcGF0aWJpbGl0eSAtIDMuNC54IHNldCBpbiBfU19jcmVhdGUgYm90aAorICAgICAgLy8gX01fcmVmY291bnQgYW5kIF9NX2xlbmd0aC4gIEFsbCBjYWxsZXJzIG9mIF9TX2NyZWF0ZQorICAgICAgLy8gaW4gYmFzaWNfc3RyaW5nLnRjYyB0aGVuIHNldCBqdXN0IF9NX2xlbmd0aC4KKyAgICAgIC8vIEluIDQuMC54IGFuZCBsYXRlciBib3RoIF9NX3JlZmNvdW50IGFuZCBfTV9sZW5ndGgKKyAgICAgIC8vIGFyZSBpbml0aWFsaXplZCBpbiB0aGUgY2FsbGVycywgdW5mb3J0dW5hdGVseSB3ZSBjYW4KKyAgICAgIC8vIGhhdmUgMy40LnggY29tcGlsZWQgY29kZSB3aXRoIF9TX2NyZWF0ZSBjYWxsZXJzIGlubGluZWQKKyAgICAgIC8vIGNhbGxpbmcgNC4wLngrIF9TX2NyZWF0ZS4KKyAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CisgICAgICByZXR1cm4gX19wOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfQ2hhclQqCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CisgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCisgICAgeworICAgICAgLy8gUmVxdWVzdGVkIGNhcGFjaXR5IG9mIHRoZSBjbG9uZS4KKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSB0aGlzLT5fTV9sZW5ndGggKyBfX3JlczsKKyAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIHRoaXMtPl9NX2NhcGFjaXR5LAorCQkJCSAgX19hbGxvYyk7CisgICAgICBpZiAodGhpcy0+X01fbGVuZ3RoKQorCV9NX2NvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgdGhpcy0+X01fbGVuZ3RoKTsKKworICAgICAgX19yLT5fTV9zZXRfbGVuZ3RoX2FuZF9zaGFyYWJsZSh0aGlzLT5fTV9sZW5ndGgpOworICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIF9NX2NoZWNrX2xlbmd0aChfX3NpemUsIF9fbiwgImJhc2ljX3N0cmluZzo6cmVzaXplIik7CisgICAgICBpZiAoX19zaXplIDwgX19uKQorCXRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CisgICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCisJdGhpcy0+ZXJhc2UoX19uKTsKKyAgICAgIC8vIGVsc2Ugbm90aGluZyAoaW4gcGFydGljdWxhciwgYXZvaWQgY2FsbGluZyBfTV9tdXRhdGUoKSB1bm5lY2Vzc2FyaWx5LikKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgICBfTV9yZXBsYWNlX2Rpc3BhdGNoKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCisJCQkgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIF9fZmFsc2VfdHlwZSkKKyAgICAgIHsKKwljb25zdCBiYXNpY19zdHJpbmcgX19zKF9fazEsIF9fazIpOworCWNvbnN0IHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CisJX01fY2hlY2tfbGVuZ3RoKF9fbjEsIF9fcy5zaXplKCksICJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2VfZGlzcGF0Y2giKTsKKwlyZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19uMSwgX19zLl9NX2RhdGEoKSwKKwkJCSAgICAgICBfX3Muc2l6ZSgpKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX3JlcGxhY2VfYXV4KHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwKKwkJICAgX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBfTV9jaGVja19sZW5ndGgoX19uMSwgX19uMiwgImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZV9hdXgiKTsKKyAgICAgIF9NX211dGF0ZShfX3BvczEsIF9fbjEsIF9fbjIpOworICAgICAgaWYgKF9fbjIpCisJX01fYXNzaWduKF9NX2RhdGEoKSArIF9fcG9zMSwgX19uMiwgX19jKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9yZXBsYWNlX3NhZmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCQkgICAgc2l6ZV90eXBlIF9fbjIpCisgICAgeworICAgICAgX01fbXV0YXRlKF9fcG9zMSwgX19uMSwgX19uMik7CisgICAgICBpZiAoX19uMikKKwlfTV9jb3B5KF9NX2RhdGEoKSArIF9fcG9zMSwgX19zLCBfX24yKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19saHMpOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkgIF9fc2l6ZV90eXBlOworICAgICAgY29uc3QgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOworICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKKyAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOworICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xlbik7CisgICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOworICAgICAgcmV0dXJuIF9fc3RyOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkgIF9fc2l6ZV90eXBlOworICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOworICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOworICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CisgICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOworICAgICAgcmV0dXJuIF9fc3RyOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgeworICAgICAgX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OmNvcHkiKTsKKyAgICAgIF9fbiA9IF9NX2xpbWl0KF9fcG9zLCBfX24pOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgaWYgKF9fbikKKwlfTV9jb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CisgICAgICAvLyAyMS4zLjUuNyBwYXIgMzogZG8gbm90IGFwcGVuZCBudWxsLiAgKGdvb2QuKQorICAgICAgcmV0dXJuIF9fbjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKKworICAgICAgaWYgKF9fbiA9PSAwKQorCXJldHVybiBfX3BvcyA8PSBfX3NpemUgPyBfX3BvcyA6IG5wb3M7CisKKyAgICAgIGlmIChfX24gPD0gX19zaXplKQorCXsKKwkgIGZvciAoOyBfX3BvcyA8PSBfX3NpemUgLSBfX247ICsrX19wb3MpCisJICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX19kYXRhW19fcG9zXSwgX19zWzBdKQorCQkmJiB0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcyArIDEsCisJCQkJCV9fcyArIDEsIF9fbiAtIDEpID09IDApCisJICAgICAgcmV0dXJuIF9fcG9zOworCX0KKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKKwl7CisJICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsKKwkgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKKwkgIGlmIChfX3ApCisJICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOworCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCisJeworCSAgX19wb3MgPSBzdGQ6Om1pbihzaXplX3R5cGUoX19zaXplIC0gX19uKSwgX19wb3MpOworCSAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKKwkJcmV0dXJuIF9fcG9zOworCSAgICB9CisJICB3aGlsZSAoX19wb3MtLSA+IDApOworCX0KKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeworICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIGlmIChfX3NpemUpCisJeworCSAgaWYgKC0tX19zaXplID4gX19wb3MpCisJICAgIF9fc2l6ZSA9IF9fcG9zOworCSAgZm9yICgrK19fc2l6ZTsgX19zaXplLS0gPiAwOyApCisJICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCisJICAgICAgcmV0dXJuIF9fc2l6ZTsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCisJeworCSAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CisJICBpZiAoX19wKQorCSAgICByZXR1cm4gX19wb3M7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBpZiAoX19zaXplICYmIF9fbikKKwl7CisJICBpZiAoLS1fX3NpemUgPiBfX3BvcykKKwkgICAgX19zaXplID0gX19wb3M7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCisJCXJldHVybiBfX3NpemU7CisJICAgIH0KKwkgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBmb3IgKDsgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCisJaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fcG9zXSkpCisJICByZXR1cm4gX19wb3M7CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIGZvciAoOyBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKKwlpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19wb3NdLCBfX2MpKQorCSAgcmV0dXJuIF9fcG9zOworICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fc2l6ZSkKKwl7CisJICBpZiAoLS1fX3NpemUgPiBfX3BvcykKKwkgICAgX19zaXplID0gX19wb3M7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQorCQlyZXR1cm4gX19zaXplOworCSAgICB9CisJICB3aGlsZSAoX19zaXplLS0pOworCX0KKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fc2l6ZSkKKwl7CisJICBpZiAoLS1fX3NpemUgPiBfX3BvcykKKwkgICAgX19zaXplID0gX19wb3M7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCisJCXJldHVybiBfX3NpemU7CisJICAgIH0KKwkgIHdoaWxlIChfX3NpemUtLSk7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGludAorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAorICAgIHsKKyAgICAgIF9NX2NoZWNrKF9fcG9zLCAiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CisgICAgICBfX24gPSBfTV9saW1pdChfX3BvcywgX19uKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19uLCBfX29zaXplKTsKKyAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7CisgICAgICBpZiAoIV9fcikKKwlfX3IgPSBfU19jb21wYXJlKF9fbiwgX19vc2l6ZSk7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbnQKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCSAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QKKyAgICB7CisgICAgICBfTV9jaGVjayhfX3BvczEsICJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKKyAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiwgImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOworICAgICAgX19uMSA9IF9NX2xpbWl0KF9fcG9zMSwgX19uMSk7CisgICAgICBfX24yID0gX19zdHIuX01fbGltaXQoX19wb3MyLCBfX24yKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbjEsIF9fbjIpOworICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKKwkJCQkgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX1NfY29tcGFyZShfX24xLCBfX24yKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGludAorICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19zaXplLCBfX29zaXplKTsKKyAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX1NfY29tcGFyZShfX3NpemUsIF9fb3NpemUpOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW50CisgICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworICAgICAgX01fY2hlY2soX19wb3MsICJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKKyAgICAgIF9fbjEgPSBfTV9saW1pdChfX3BvcywgX19uMSk7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbjEsIF9fb3NpemUpOworICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IF9TX2NvbXBhcmUoX19uMSwgX19vc2l6ZSk7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbnQKKyAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24yKTsKKyAgICAgIF9NX2NoZWNrKF9fcG9zLCAiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CisgICAgICBfX24xID0gX01fbGltaXQoX19wb3MsIF9fbjEpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19uMSwgX19uMik7CisgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOworICAgICAgaWYgKCFfX3IpCisJX19yID0gX1NfY29tcGFyZShfX24xLCBfX24yKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIC8vIDIxLjMuNy45IGJhc2ljX3N0cmluZzo6Z2V0bGluZSBhbmQgb3BlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKKwkgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4JCV9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CV9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICAgICAgIF9faW9zX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZQkJX19pbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlCQlfX3NpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPgkJCQlfX2N0eXBlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY3R5cGVfdHlwZTo6Y3R5cGVfYmFzZSAgICAgICAgIF9fY3R5cGVfYmFzZTsKKworICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOworICAgICAgdHlwZW5hbWUgX19pb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IF9faW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICAvLyBBdm9pZCByZWFsbG9jYXRpb24gZm9yIGNvbW1vbiBjYXNlLgorCSAgICAgIF9fc3RyLmVyYXNlKCk7CisJICAgICAgX0NoYXJUIF9fYnVmWzEyOF07CisJICAgICAgX19zaXplX3R5cGUgX19sZW4gPSAwOwkgICAgICAKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKKwkgICAgICBjb25zdCBfX3NpemVfdHlwZSBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX3N0ci5tYXhfc2l6ZSgpOworCSAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdCA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOworCSAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKKwkgICAgICBfX2ludF90eXBlIF9fYyA9IF9faW4ucmRidWYoKS0+c2dldGMoKTsKKworCSAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbgorCQkgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorCQkgICAgICYmICFfX2N0LmlzKF9fY3R5cGVfYmFzZTo6c3BhY2UsCisJCQkJIF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpKSkKKwkJeworCQkgIGlmIChfX2xlbiA9PSBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCisJCSAgICB7CisJCSAgICAgIF9fc3RyLmFwcGVuZChfX2J1Ziwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKTsKKwkJICAgICAgX19sZW4gPSAwOworCQkgICAgfQorCQkgIF9fYnVmW19fbGVuKytdID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgKytfX2V4dHJhY3RlZDsKKwkJICBfX2MgPSBfX2luLnJkYnVmKCktPnNuZXh0YygpOworCQl9CisJICAgICAgX19zdHIuYXBwZW5kKF9fYnVmLCBfX2xlbik7CisKKwkgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgICBfX2luLndpZHRoKDApOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICBfX2luLl9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAgIC8vIDkxLiBEZXNjcmlwdGlvbiBvZiBvcGVyYXRvcj4+IGFuZCBnZXRsaW5lKCkgZm9yIHN0cmluZzw+CisJICAgICAgLy8gbWlnaHQgY2F1c2UgZW5kbGVzcyBsb29wCisJICAgICAgX19pbi5fTV9zZXRzdGF0ZShfX2lvc19iYXNlOjpiYWRiaXQpOworCSAgICB9CisJfQorICAgICAgLy8gMjExLiAgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc3RyaW5nJikgZG9lc24ndCBzZXQgZmFpbGJpdAorICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKKwlfX2VyciB8PSBfX2lvc19iYXNlOjpmYWlsYml0OworICAgICAgaWYgKF9fZXJyKQorCV9faW4uc2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuIF9faW47CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKKwkgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CQlfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPglfX3N0cmluZ190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgICAgICBfX2lvc19iYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUJCV9faW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkJX19zaXplX3R5cGU7CisKKyAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CisgICAgICB0eXBlbmFtZSBfX2lvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gX19pb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX19zdHIuZXJhc2UoKTsKKwkgICAgICBjb25zdCBfX2ludF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7CisJICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOworCSAgICAgIF9faW50X3R5cGUgX19jID0gX19pbi5yZGJ1ZigpLT5zZ2V0YygpOworCisJICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uCisJCSAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCisJCSAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQorCQl7CisJCSAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgKytfX2V4dHJhY3RlZDsKKwkJICBfX2MgPSBfX2luLnJkYnVmKCktPnNuZXh0YygpOworCQl9CisKKwkgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgICBlbHNlIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKKwkJeworCQkgICsrX19leHRyYWN0ZWQ7CQkgIAorCQkgIF9faW4ucmRidWYoKS0+c2J1bXBjKCk7CisJCX0KKwkgICAgICBlbHNlCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIF9faW4uX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gOTEuIERlc2NyaXB0aW9uIG9mIG9wZXJhdG9yPj4gYW5kIGdldGxpbmUoKSBmb3Igc3RyaW5nPD4KKwkgICAgICAvLyBtaWdodCBjYXVzZSBlbmRsZXNzIGxvb3AKKwkgICAgICBfX2luLl9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgIH0KKwl9CisgICAgICBpZiAoIV9fZXh0cmFjdGVkKQorCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJX19pbi5zZXRzdGF0ZShfX2Vycik7CisgICAgICByZXR1cm4gX19pbjsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFID4gMAorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyPiYsIGNvbnN0IHN0cmluZyYpOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYsIGNoYXIpOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7CisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JiwgY29uc3Qgd3N0cmluZyYpOworICBleHRlcm4gdGVtcGxhdGUKKyAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmLCB3Y2hhcl90KTsKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKKyAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9ib29zdF9jb25jZXB0X2NoZWNrLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYm9vc3RfY29uY2VwdF9jaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2I4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvYm9vc3RfY29uY2VwdF9jaGVjay5oCkBAIC0wLDAgKzEsNzkwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyAoQykgQ29weXJpZ2h0IEplcmVteSBTaWVrIDIwMDAuIFBlcm1pc3Npb24gdG8gY29weSwgdXNlLCBtb2RpZnksCisvLyBzZWxsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCBwcm92aWRlZCB0aGlzCisvLyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcy4gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZAorLy8gImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSwgYW5kIHdpdGggbm8gY2xhaW0gYXMKKy8vIHRvIGl0cyBzdWl0YWJpbGl0eSBmb3IgYW55IHB1cnBvc2UuCisvLworCisvKiogQGZpbGUgYml0cy9ib29zdF9jb25jZXB0X2NoZWNrLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtpdGVyYXRvcn0KKyAqLworCisvLyBHQ0MgTm90ZTogIGJhc2VkIG9uIHZlcnNpb24gMS4xMi4wIG9mIHRoZSBCb29zdCBsaWJyYXJ5LgorCisjaWZuZGVmIF9CT09TVF9DT05DRVBUX0NIRUNLX0gKKyNkZWZpbmUgX0JPT1NUX0NPTkNFUFRfQ0hFQ0tfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oPiAgICAvLyBmb3IgdHJhaXRzIGFuZCB0YWdzCisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworI2RlZmluZSBfSXNVbnVzZWQgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorCisvLyBXaGVuIHRoZSBDLUMgY29kZSBpcyBpbiB1c2UsIHdlIHdvdWxkIGxpa2UgdGhpcyBmdW5jdGlvbiB0byBkbyBhcyBsaXR0bGUKKy8vIGFzIHBvc3NpYmxlIGF0IHJ1bnRpbWUsIHVzZSBhcyBmZXcgcmVzb3VyY2VzIGFzIHBvc3NpYmxlLCBhbmQgaG9wZWZ1bGx5CisvLyBiZSBlbGlkZWQgb3V0IG9mIGV4aXN0ZW5jZS4uLiBobW1tLgordGVtcGxhdGUgPGNsYXNzIF9Db25jZXB0PgoraW5saW5lIHZvaWQgX19mdW5jdGlvbl9yZXF1aXJlcygpCit7CisgIHZvaWQgKF9Db25jZXB0OjoqX194KSgpIF9Jc1VudXNlZCA9ICZfQ29uY2VwdDo6X19jb25zdHJhaW50czsKK30KKworLy8gTm8gZGVmaW5pdGlvbjogaWYgdGhpcyBpcyByZWZlcmVuY2VkLCB0aGVyZSdzIGEgcHJvYmxlbSB3aXRoCisvLyB0aGUgaW5zdGFudGlhdGluZyB0eXBlIG5vdCBiZWluZyBvbmUgb2YgdGhlIHJlcXVpcmVkIGludGVnZXIgdHlwZXMuCisvLyBVbmZvcnR1bmF0ZWx5LCB0aGlzIHJlc3VsdHMgaW4gYSBsaW5rLXRpbWUgZXJyb3IsIG5vdCBhIGNvbXBpbGUtdGltZSBlcnJvci4KK3ZvaWQgX19lcnJvcl90eXBlX211c3RfYmVfYW5faW50ZWdlcl90eXBlKCk7Cit2b2lkIF9fZXJyb3JfdHlwZV9tdXN0X2JlX2FuX3Vuc2lnbmVkX2ludGVnZXJfdHlwZSgpOwordm9pZCBfX2Vycm9yX3R5cGVfbXVzdF9iZV9hX3NpZ25lZF9pbnRlZ2VyX3R5cGUoKTsKKworLy8gPz8/IFNob3VsZCB0aGUgImNvbmNlcHRfY2hlY2tpbmcqIiBzdHJ1Y3RzIGJlZ2luIHdpdGggbW9yZSB0aGFuIF8gPworI2RlZmluZSBfR0xJQkNYWF9DTEFTU19SRVFVSVJFUyhfdHlwZV92YXIsIF9ucywgX2NvbmNlcHQpIFwKKyAgdHlwZWRlZiB2b2lkIChfbnM6Ol9jb25jZXB0IDxfdHlwZV92YXI+OjoqIF9mdW5jIyNfdHlwZV92YXIjI19jb25jZXB0KSgpOyBcCisgIHRlbXBsYXRlIDxfZnVuYyMjX3R5cGVfdmFyIyNfY29uY2VwdCBfVHAxPiBcCisgIHN0cnVjdCBfY29uY2VwdF9jaGVja2luZyMjX3R5cGVfdmFyIyNfY29uY2VwdCB7IH07IFwKKyAgdHlwZWRlZiBfY29uY2VwdF9jaGVja2luZyMjX3R5cGVfdmFyIyNfY29uY2VwdDwgXAorICAgICZfbnM6Ol9jb25jZXB0IDxfdHlwZV92YXI+OjpfX2NvbnN0cmFpbnRzPiBcCisgICAgX2NvbmNlcHRfY2hlY2tpbmdfdHlwZWRlZiMjX3R5cGVfdmFyIyNfY29uY2VwdAorCisjZGVmaW5lIF9HTElCQ1hYX0NMQVNTX1JFUVVJUkVTMihfdHlwZV92YXIxLCBfdHlwZV92YXIyLCBfbnMsIF9jb25jZXB0KSBcCisgIHR5cGVkZWYgdm9pZCAoX25zOjpfY29uY2VwdCA8X3R5cGVfdmFyMSxfdHlwZV92YXIyPjo6KiBfZnVuYyMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX2NvbmNlcHQpKCk7IFwKKyAgdGVtcGxhdGUgPF9mdW5jIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfY29uY2VwdCBfVHAxPiBcCisgIHN0cnVjdCBfY29uY2VwdF9jaGVja2luZyMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX2NvbmNlcHQgeyB9OyBcCisgIHR5cGVkZWYgX2NvbmNlcHRfY2hlY2tpbmcjI190eXBlX3ZhcjEjI190eXBlX3ZhcjIjI19jb25jZXB0PCBcCisgICAgJl9uczo6X2NvbmNlcHQgPF90eXBlX3ZhcjEsX3R5cGVfdmFyMj46Ol9fY29uc3RyYWludHM+IFwKKyAgICBfY29uY2VwdF9jaGVja2luZ190eXBlZGVmIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfY29uY2VwdAorCisjZGVmaW5lIF9HTElCQ1hYX0NMQVNTX1JFUVVJUkVTMyhfdHlwZV92YXIxLCBfdHlwZV92YXIyLCBfdHlwZV92YXIzLCBfbnMsIF9jb25jZXB0KSBcCisgIHR5cGVkZWYgdm9pZCAoX25zOjpfY29uY2VwdCA8X3R5cGVfdmFyMSxfdHlwZV92YXIyLF90eXBlX3ZhcjM+OjoqIF9mdW5jIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfdHlwZV92YXIzIyNfY29uY2VwdCkoKTsgXAorICB0ZW1wbGF0ZSA8X2Z1bmMjI190eXBlX3ZhcjEjI190eXBlX3ZhcjIjI190eXBlX3ZhcjMjI19jb25jZXB0IF9UcDE+IFwKKyAgc3RydWN0IF9jb25jZXB0X2NoZWNraW5nIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfdHlwZV92YXIzIyNfY29uY2VwdCB7IH07IFwKKyAgdHlwZWRlZiBfY29uY2VwdF9jaGVja2luZyMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX3R5cGVfdmFyMyMjX2NvbmNlcHQ8IFwKKyAgICAmX25zOjpfY29uY2VwdCA8X3R5cGVfdmFyMSxfdHlwZV92YXIyLF90eXBlX3ZhcjM+OjpfX2NvbnN0cmFpbnRzPiAgXAorICBfY29uY2VwdF9jaGVja2luZ190eXBlZGVmIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfdHlwZV92YXIzIyNfY29uY2VwdAorCisjZGVmaW5lIF9HTElCQ1hYX0NMQVNTX1JFUVVJUkVTNChfdHlwZV92YXIxLCBfdHlwZV92YXIyLCBfdHlwZV92YXIzLCBfdHlwZV92YXI0LCBfbnMsIF9jb25jZXB0KSBcCisgIHR5cGVkZWYgdm9pZCAoX25zOjpfY29uY2VwdCA8X3R5cGVfdmFyMSxfdHlwZV92YXIyLF90eXBlX3ZhcjMsX3R5cGVfdmFyND46OiogX2Z1bmMjI190eXBlX3ZhcjEjI190eXBlX3ZhcjIjI190eXBlX3ZhcjMjI190eXBlX3ZhcjQjI19jb25jZXB0KSgpOyBcCisgIHRlbXBsYXRlIDxfZnVuYyMjX3R5cGVfdmFyMSMjX3R5cGVfdmFyMiMjX3R5cGVfdmFyMyMjX3R5cGVfdmFyNCMjX2NvbmNlcHQgX1RwMT4gXAorICBzdHJ1Y3QgX2NvbmNlcHRfY2hlY2tpbmcjI190eXBlX3ZhcjEjI190eXBlX3ZhcjIjI190eXBlX3ZhcjMjI190eXBlX3ZhcjQjI19jb25jZXB0IHsgfTsgXAorICB0eXBlZGVmIF9jb25jZXB0X2NoZWNraW5nIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfdHlwZV92YXIzIyNfdHlwZV92YXI0IyNfY29uY2VwdDwgXAorICAmX25zOjpfY29uY2VwdCA8X3R5cGVfdmFyMSxfdHlwZV92YXIyLF90eXBlX3ZhcjMsX3R5cGVfdmFyND46Ol9fY29uc3RyYWludHM+IFwKKyAgICBfY29uY2VwdF9jaGVja2luZ190eXBlZGVmIyNfdHlwZV92YXIxIyNfdHlwZV92YXIyIyNfdHlwZV92YXIzIyNfdHlwZV92YXI0IyNfY29uY2VwdAorCisKK3RlbXBsYXRlIDxjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgorc3RydWN0IF9BdXhfcmVxdWlyZV9zYW1lIHsgfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfQXV4X3JlcXVpcmVfc2FtZTxfVHAsX1RwPiB7IHR5cGVkZWYgX1RwIF9UeXBlOyB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgorICBzdHJ1Y3QgX1NhbWVUeXBlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQXV4X3JlcXVpcmVfc2FtZTxfVHAxLCBfVHAyPjo6X1R5cGUgX1JlcXVpcmVkOworICAgIH0KKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX0ludGVnZXJDb25jZXB0IHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Vycm9yX3R5cGVfbXVzdF9iZV9hbl9pbnRlZ2VyX3R5cGUoKTsKKyAgICB9CisgIH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfSW50ZWdlckNvbmNlcHQ8c2hvcnQ+IHsgdm9pZCBfX2NvbnN0cmFpbnRzKCkge30gfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9JbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBzaG9ydD4geyB2b2lkIF9fY29uc3RyYWludHMoKXt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfSW50ZWdlckNvbmNlcHQ8aW50PiB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfSW50ZWdlckNvbmNlcHQ8dW5zaWduZWQgaW50PiB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfSW50ZWdlckNvbmNlcHQ8bG9uZz4geyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX0ludGVnZXJDb25jZXB0PHVuc2lnbmVkIGxvbmc+IHsgdm9pZCBfX2NvbnN0cmFpbnRzKCkge30gfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9JbnRlZ2VyQ29uY2VwdDxsb25nIGxvbmc+IHsgdm9pZCBfX2NvbnN0cmFpbnRzKCkge30gfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9JbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBsb25nIGxvbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9TaWduZWRJbnRlZ2VyQ29uY2VwdCB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19lcnJvcl90eXBlX211c3RfYmVfYV9zaWduZWRfaW50ZWdlcl90eXBlKCk7CisgICAgfQorICB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX1NpZ25lZEludGVnZXJDb25jZXB0PHNob3J0PiB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfU2lnbmVkSW50ZWdlckNvbmNlcHQ8aW50PiB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfU2lnbmVkSW50ZWdlckNvbmNlcHQ8bG9uZz4geyB2b2lkIF9fY29uc3RyYWludHMoKSB7fSB9OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgX1NpZ25lZEludGVnZXJDb25jZXB0PGxvbmcgbG9uZz4geyB2b2lkIF9fY29uc3RyYWludHMoKXt9fTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX1Vuc2lnbmVkSW50ZWdlckNvbmNlcHQgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZXJyb3JfdHlwZV9tdXN0X2JlX2FuX3Vuc2lnbmVkX2ludGVnZXJfdHlwZSgpOworICAgIH0KKyAgfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9VbnNpZ25lZEludGVnZXJDb25jZXB0PHVuc2lnbmVkIHNob3J0PgorICAgIHsgdm9pZCBfX2NvbnN0cmFpbnRzKCkge30gfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9VbnNpZ25lZEludGVnZXJDb25jZXB0PHVuc2lnbmVkIGludD4KKyAgICB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisgIHRlbXBsYXRlIDw+IHN0cnVjdCBfVW5zaWduZWRJbnRlZ2VyQ29uY2VwdDx1bnNpZ25lZCBsb25nPgorICAgIHsgdm9pZCBfX2NvbnN0cmFpbnRzKCkge30gfTsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IF9VbnNpZ25lZEludGVnZXJDb25jZXB0PHVuc2lnbmVkIGxvbmcgbG9uZz4KKyAgICB7IHZvaWQgX19jb25zdHJhaW50cygpIHt9IH07CisKKyAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgLy8gQmFzaWMgQ29uY2VwdHMKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX0RlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX1RwIF9fYSBfSXNVbnVzZWQ7ICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZGVmYXVsdCBjb25zdHJ1Y3RvcgorICAgIH0KKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX0Fzc2lnbmFibGVDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2EgPSBfX2E7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBhc3NpZ25tZW50IG9wZXJhdG9yCisgICAgICBfX2NvbnN0X2NvbnN0cmFpbnRzKF9fYSk7CisgICAgfQorICAgIHZvaWQgX19jb25zdF9jb25zdHJhaW50cyhjb25zdCBfVHAmIF9fYikgeworICAgICAgX19hID0gX19iOyAgICAgICAgICAgICAgICAgICAvLyBjb25zdCByZXF1aXJlZCBmb3IgYXJndW1lbnQgdG8gYXNzaWdubWVudAorICAgIH0KKyAgICBfVHAgX19hOworICAgIC8vIHBvc3NpYmx5IHNob3VsZCBiZSAiVHAqIGE7IiBhbmQgdGhlbiBkZXJlZmVyZW5jZSAiYSIgaW4gY29uc3RyYWludAorICAgIC8vIGZ1bmN0aW9ucz8gIHByZXNlbnQgd2F5IHdvdWxkIHJlcXVpcmUgYSBkZWZhdWx0IGN0b3IsIGkgdGhpbmsuLi4KKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX0NvcHlDb25zdHJ1Y3RpYmxlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX1RwIF9fYShfX2IpOyAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgY29weSBjb25zdHJ1Y3RvcgorICAgICAgX1RwKiBfX3B0ciBfSXNVbnVzZWQgPSAmX19hOyAgICAgIC8vIHJlcXVpcmUgYWRkcmVzcyBvZiBvcGVyYXRvcgorICAgICAgX19jb25zdF9jb25zdHJhaW50cyhfX2EpOworICAgIH0KKyAgICB2b2lkIF9fY29uc3RfY29uc3RyYWludHMoY29uc3QgX1RwJiBfX2EpIHsKKyAgICAgIF9UcCBfX2MgX0lzVW51c2VkKF9fYSk7ICAgICAgICAgICAvLyByZXF1aXJlIGNvbnN0IGNvcHkgY29uc3RydWN0b3IKKyAgICAgIGNvbnN0IF9UcCogX19wdHIgX0lzVW51c2VkID0gJl9fYTsgLy8gcmVxdWlyZSBjb25zdCBhZGRyZXNzIG9mIG9wZXJhdG9yCisgICAgfQorICAgIF9UcCBfX2I7CisgIH07CisKKyAgLy8gVGhlIFNHSSBTVEwgdmVyc2lvbiBvZiBBc3NpZ25hYmxlIHJlcXVpcmVzIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPQorICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX1NHSUFzc2lnbmFibGVDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfVHAgX19iIF9Jc1VudXNlZChfX2EpOworICAgICAgX19hID0gX19hOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgYXNzaWdubWVudCBvcGVyYXRvcgorICAgICAgX19jb25zdF9jb25zdHJhaW50cyhfX2EpOworICAgIH0KKyAgICB2b2lkIF9fY29uc3RfY29uc3RyYWludHMoY29uc3QgX1RwJiBfX2IpIHsKKyAgICAgIF9UcCBfX2MgX0lzVW51c2VkKF9fYik7CisgICAgICBfX2EgPSBfX2I7ICAgICAgICAgICAgICAvLyBjb25zdCByZXF1aXJlZCBmb3IgYXJndW1lbnQgdG8gYXNzaWdubWVudAorICAgIH0KKyAgICBfVHAgX19hOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfRnJvbSwgY2xhc3MgX1RvPgorICBzdHJ1Y3QgX0NvbnZlcnRpYmxlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX1RvIF9feSBfSXNVbnVzZWQgPSBfX3g7CisgICAgfQorICAgIF9Gcm9tIF9feDsKKyAgfTsKKworICAvLyBUaGUgQysrIHN0YW5kYXJkIHJlcXVpcmVtZW50cyBmb3IgbWFueSBjb25jZXB0cyB0YWxrIGFib3V0IHJldHVybgorICAvLyB0eXBlcyB0aGF0IG11c3QgYmUgImNvbnZlcnRpYmxlIHRvIGJvb2wiLiAgVGhlIHByb2JsZW0gd2l0aCB0aGlzCisgIC8vIHJlcXVpcmVtZW50IGlzIHRoYXQgaXQgbGVhdmVzIHRoZSBkb29yIG9wZW4gZm9yIGV2aWwgcHJveGllcyB0aGF0CisgIC8vIGRlZmluZSB0aGluZ3MgbGlrZSBvcGVyYXRvcnx8IHdpdGggc3RyYW5nZSByZXR1cm4gdHlwZXMuICBUd28KKyAgLy8gcG9zc2libGUgc29sdXRpb25zIGFyZToKKyAgLy8gMSkgcmVxdWlyZSB0aGUgcmV0dXJuIHR5cGUgdG8gYmUgZXhhY3RseSBib29sCisgIC8vIDIpIHN0YXkgd2l0aCBjb252ZXJ0aWJsZSB0byBib29sLCBhbmQgYWxzbworICAvLyAgICBzcGVjaWZ5IHN0dWZmIGFib3V0IGFsbCB0aGUgbG9naWNhbCBvcGVyYXRvcnMuCisgIC8vIEZvciBub3cgd2UganVzdCB0ZXN0IGZvciBjb252ZXJ0aWJsZSB0byBib29sLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICB2b2lkIF9fYXV4X3JlcXVpcmVfYm9vbGVhbl9leHByKGNvbnN0IF9UcCYgX190KSB7CisgICAgYm9vbCBfX3ggX0lzVW51c2VkID0gX190OworICB9CisKKy8vIEZJWE1FCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHN0cnVjdCBfRXF1YWxpdHlDb21wYXJhYmxlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19hdXhfcmVxdWlyZV9ib29sZWFuX2V4cHIoX19hID09IF9fYik7CisgICAgfQorICAgIF9UcCBfX2EsIF9fYjsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fYXV4X3JlcXVpcmVfYm9vbGVhbl9leHByKF9fYSA8IF9fYik7CisgICAgfQorICAgIF9UcCBfX2EsIF9fYjsKKyAgfTsKKworICAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gU0dJIFNUTCdzIExlc3NUaGFuQ29tcGFyYWJsZS4KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9Db21wYXJhYmxlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19hdXhfcmVxdWlyZV9ib29sZWFuX2V4cHIoX19hIDwgX19iKTsKKyAgICAgIF9fYXV4X3JlcXVpcmVfYm9vbGVhbl9leHByKF9fYSA+IF9fYik7CisgICAgICBfX2F1eF9yZXF1aXJlX2Jvb2xlYW5fZXhwcihfX2EgPD0gX19iKTsKKyAgICAgIF9fYXV4X3JlcXVpcmVfYm9vbGVhbl9leHByKF9fYSA+PSBfX2IpOworICAgIH0KKyAgICBfVHAgX19hLCBfX2I7CisgIH07CisKKyNkZWZpbmUgX0dMSUJDWFhfREVGSU5FX0JJTkFSWV9QUkVESUNBVEVfT1BfQ09OU1RSQUlOVChfT1AsX05BTUUpIFwKKyAgdGVtcGxhdGUgPGNsYXNzIF9GaXJzdCwgY2xhc3MgX1NlY29uZD4gXAorICBzdHJ1Y3QgX05BTUUgeyBcCisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeyAodm9pZClfX2NvbnN0cmFpbnRzXygpOyB9IFwKKyAgICBib29sIF9fY29uc3RyYWludHNfKCkgeyAgXAorICAgICAgcmV0dXJuICBfX2EgX09QIF9fYjsgXAorICAgIH0gXAorICAgIF9GaXJzdCBfX2E7IFwKKyAgICBfU2Vjb25kIF9fYjsgXAorICB9CisKKyNkZWZpbmUgX0dMSUJDWFhfREVGSU5FX0JJTkFSWV9PUEVSQVRPUl9DT05TVFJBSU5UKF9PUCxfTkFNRSkgXAorICB0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPiBcCisgIHN0cnVjdCBfTkFNRSB7IFwKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7ICh2b2lkKV9fY29uc3RyYWludHNfKCk7IH0gXAorICAgIF9SZXQgX19jb25zdHJhaW50c18oKSB7ICBcCisgICAgICByZXR1cm4gX19hIF9PUCBfX2I7IFwKKyAgICB9IFwKKyAgICBfRmlyc3QgX19hOyBcCisgICAgX1NlY29uZCBfX2I7IFwKKyAgfQorCisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQoPT0sIF9FcXVhbE9wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQoIT0sIF9Ob3RFcXVhbE9wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQoPCwgX0xlc3NUaGFuT3BDb25jZXB0KTsKKyAgX0dMSUJDWFhfREVGSU5FX0JJTkFSWV9QUkVESUNBVEVfT1BfQ09OU1RSQUlOVCg8PSwgX0xlc3NFcXVhbE9wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQoPiwgX0dyZWF0ZXJUaGFuT3BDb25jZXB0KTsKKyAgX0dMSUJDWFhfREVGSU5FX0JJTkFSWV9QUkVESUNBVEVfT1BfQ09OU1RSQUlOVCg+PSwgX0dyZWF0ZXJFcXVhbE9wQ29uY2VwdCk7CisKKyAgX0dMSUJDWFhfREVGSU5FX0JJTkFSWV9PUEVSQVRPUl9DT05TVFJBSU5UKCssIF9QbHVzT3BDb25jZXB0KTsKKyAgX0dMSUJDWFhfREVGSU5FX0JJTkFSWV9PUEVSQVRPUl9DT05TVFJBSU5UKCosIF9UaW1lc09wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfT1BFUkFUT1JfQ09OU1RSQUlOVCgvLCBfRGl2aWRlT3BDb25jZXB0KTsKKyAgX0dMSUJDWFhfREVGSU5FX0JJTkFSWV9PUEVSQVRPUl9DT05TVFJBSU5UKC0sIF9TdWJ0cmFjdE9wQ29uY2VwdCk7CisgIF9HTElCQ1hYX0RFRklORV9CSU5BUllfT1BFUkFUT1JfQ09OU1RSQUlOVCglLCBfTW9kT3BDb25jZXB0KTsKKworI3VuZGVmIF9HTElCQ1hYX0RFRklORV9CSU5BUllfUFJFRElDQVRFX09QX0NPTlNUUkFJTlQKKyN1bmRlZiBfR0xJQkNYWF9ERUZJTkVfQklOQVJZX09QRVJBVE9SX0NPTlNUUkFJTlQKKworICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAvLyBGdW5jdGlvbiBPYmplY3QgQ29uY2VwdHMKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9SZXR1cm4+CisgIHN0cnVjdCBfR2VuZXJhdG9yQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgY29uc3QgX1JldHVybiYgX19yIF9Jc1VudXNlZCA9IF9fZigpOy8vIHJlcXVpcmUgb3BlcmF0b3IoKSBtZW1iZXIgZnVuY3Rpb24KKyAgICB9CisgICAgX0Z1bmMgX19mOworICB9OworCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9GdW5jPgorICBzdHJ1Y3QgX0dlbmVyYXRvckNvbmNlcHQ8X0Z1bmMsdm9pZD4KKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIG9wZXJhdG9yKCkgbWVtYmVyIGZ1bmN0aW9uCisgICAgfQorICAgIF9GdW5jIF9fZjsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9SZXR1cm4sIGNsYXNzIF9Bcmc+CisgIHN0cnVjdCBfVW5hcnlGdW5jdGlvbkNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fciA9IF9fZihfX2FyZyk7ICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBvcGVyYXRvcigpCisgICAgfQorICAgIF9GdW5jIF9fZjsKKyAgICBfQXJnIF9fYXJnOworICAgIF9SZXR1cm4gX19yOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX0FyZz4KKyAgc3RydWN0IF9VbmFyeUZ1bmN0aW9uQ29uY2VwdDxfRnVuYywgdm9pZCwgX0FyZz4geworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZihfX2FyZyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIG9wZXJhdG9yKCkKKyAgICB9CisgICAgX0Z1bmMgX19mOworICAgIF9BcmcgX19hcmc7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9GdW5jLCBjbGFzcyBfUmV0dXJuLCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+CisgIHN0cnVjdCBfQmluYXJ5RnVuY3Rpb25Db25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX3IgPSBfX2YoX19maXJzdCwgX19zZWNvbmQpOyAgICAgLy8gcmVxdWlyZSBvcGVyYXRvcigpCisgICAgfQorICAgIF9GdW5jIF9fZjsKKyAgICBfRmlyc3QgX19maXJzdDsKKyAgICBfU2Vjb25kIF9fc2Vjb25kOworICAgIF9SZXR1cm4gX19yOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPgorICBzdHJ1Y3QgX0JpbmFyeUZ1bmN0aW9uQ29uY2VwdDxfRnVuYywgdm9pZCwgX0ZpcnN0LCBfU2Vjb25kPgorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mKF9fZmlyc3QsIF9fc2Vjb25kKTsgICAgICAgICAgIC8vIHJlcXVpcmUgb3BlcmF0b3IoKQorICAgIH0KKyAgICBfRnVuYyBfX2Y7CisgICAgX0ZpcnN0IF9fZmlyc3Q7CisgICAgX1NlY29uZCBfX3NlY29uZDsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0Z1bmMsIGNsYXNzIF9Bcmc+CisgIHN0cnVjdCBfVW5hcnlQcmVkaWNhdGVDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2F1eF9yZXF1aXJlX2Jvb2xlYW5fZXhwcihfX2YoX19hcmcpKTsgLy8gcmVxdWlyZSBvcCgpIHJldHVybmluZyBib29sCisgICAgfQorICAgIF9GdW5jIF9fZjsKKyAgICBfQXJnIF9fYXJnOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfRnVuYywgY2xhc3MgX0ZpcnN0LCBjbGFzcyBfU2Vjb25kPgorICBzdHJ1Y3QgX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fYXV4X3JlcXVpcmVfYm9vbGVhbl9leHByKF9fZihfX2EsIF9fYikpOyAvLyByZXF1aXJlIG9wKCkgcmV0dXJuaW5nIGJvb2wKKyAgICB9CisgICAgX0Z1bmMgX19mOworICAgIF9GaXJzdCBfX2E7CisgICAgX1NlY29uZCBfX2I7CisgIH07CisKKyAgLy8gdXNlIHRoaXMgd2hlbiBmdW5jdG9yIGlzIHVzZWQgaW5zaWRlIGEgY29udGFpbmVyIGNsYXNzIGxpa2Ugc3RkOjpzZXQKKyAgdGVtcGxhdGUgPGNsYXNzIF9GdW5jLCBjbGFzcyBfRmlyc3QsIGNsYXNzIF9TZWNvbmQ+CisgIHN0cnVjdCBfQ29uc3RfQmluYXJ5UHJlZGljYXRlQ29uY2VwdCB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19jb25zdF9jb25zdHJhaW50cyhfX2YpOworICAgIH0KKyAgICB2b2lkIF9fY29uc3RfY29uc3RyYWludHMoY29uc3QgX0Z1bmMmIF9fZnVuKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9GdW5jLCBfRmlyc3QsIF9TZWNvbmQ+ID4oKTsKKyAgICAgIC8vIG9wZXJhdG9yKCkgbXVzdCBiZSBhIGNvbnN0IG1lbWJlciBmdW5jdGlvbgorICAgICAgX19hdXhfcmVxdWlyZV9ib29sZWFuX2V4cHIoX19mdW4oX19hLCBfX2IpKTsKKyAgICB9CisgICAgX0Z1bmMgX19mOworICAgIF9GaXJzdCBfX2E7CisgICAgX1NlY29uZCBfX2I7CisgIH07CisKKyAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgLy8gSXRlcmF0b3IgQ29uY2VwdHMKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX1RyaXZpYWxJdGVyYXRvckNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKy8vICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9EZWZhdWx0Q29uc3RydWN0aWJsZUNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfQXNzaWduYWJsZUNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfRXF1YWxpdHlDb21wYXJhYmxlQ29uY2VwdDxfVHA+ID4oKTsKKy8vICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfVHA+Ojp2YWx1ZV90eXBlIF9WOworICAgICAgKHZvaWQpKl9faTsgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZGVyZWZlcmVuY2Ugb3BlcmF0b3IKKyAgICB9CisgICAgX1RwIF9faTsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX011dGFibGVfVHJpdmlhbEl0ZXJhdG9yQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX1RyaXZpYWxJdGVyYXRvckNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICAqX19pID0gKl9fajsgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBkZXJlZmVyZW5jZSBhbmQgYXNzaWdubWVudAorICAgIH0KKyAgICBfVHAgX19pLCBfX2o7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9JbnB1dEl0ZXJhdG9yQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX1RyaXZpYWxJdGVyYXRvckNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICAvLyByZXF1aXJlIGl0ZXJhdG9yX3RyYWl0cyB0eXBlZGVmJ3MKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmOworLy8gICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfU2lnbmVkSW50ZWdlckNvbmNlcHQ8X0RpZmY+ID4oKTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6cmVmZXJlbmNlIF9SZWY7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9UcD46OnBvaW50ZXIgX1B0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfVHA+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0OworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0NvbnZlcnRpYmxlQ29uY2VwdDwKKyAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6aXRlcmF0b3JfY2F0ZWdvcnksCisgICAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnPiA+KCk7CisgICAgICArK19faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwcmVpbmNyZW1lbnQgb3BlcmF0b3IKKyAgICAgIF9faSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIHBvc3RpbmNyZW1lbnQgb3BlcmF0b3IKKyAgICB9CisgICAgX1RwIF9faTsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVmFsdWVUPgorICBzdHJ1Y3QgX091dHB1dEl0ZXJhdG9yQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0Fzc2lnbmFibGVDb25jZXB0PF9UcD4gPigpOworICAgICAgKytfX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgcHJlaW5jcmVtZW50IG9wZXJhdG9yCisgICAgICBfX2krKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwb3N0aW5jcmVtZW50IG9wZXJhdG9yCisgICAgICAqX19pKysgPSBfX3Q7ICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwb3N0aW5jcmVtZW50IGFuZCBhc3NpZ25tZW50CisgICAgfQorICAgIF9UcCBfX2k7CisgICAgX1ZhbHVlVCBfX3Q7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgc3RydWN0IF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfRGVmYXVsdENvbnN0cnVjdGlibGVDb25jZXB0PF9UcD4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0NvbnZlcnRpYmxlQ29uY2VwdDwKKyAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6aXRlcmF0b3JfY2F0ZWdvcnksCisgICAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc+ID4oKTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6cmVmZXJlbmNlIF9SZWY7CisgICAgICBfUmVmIF9fciBfSXNVbnVzZWQgPSAqX19pOworICAgIH0KKyAgICBfVHAgX19pOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHN0cnVjdCBfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfVHA+ID4oKTsKKyAgICAgICpfX2krKyA9ICpfX2k7ICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIHBvc3RpbmNyZW1lbnQgYW5kIGFzc2lnbm1lbnQKKyAgICB9CisgICAgX1RwIF9faTsKKyAgfTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9UcD4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0NvbnZlcnRpYmxlQ29uY2VwdDwKKyAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1RwPjo6aXRlcmF0b3JfY2F0ZWdvcnksCisgICAgICAgIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWc+ID4oKTsKKyAgICAgIC0tX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIHByZWRlY3JlbWVudCBvcGVyYXRvcgorICAgICAgX19pLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgcG9zdGRlY3JlbWVudCBvcGVyYXRvcgorICAgIH0KKyAgICBfVHAgX19pOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHN0cnVjdCBfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfVHA+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICAqX19pLS0gPSAqX19pOyAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZSBwb3N0ZGVjcmVtZW50IGFuZCBhc3NpZ25tZW50CisgICAgfQorICAgIF9UcCBfX2k7CisgIH07CisKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBzdHJ1Y3QgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfQ29tcGFyYWJsZUNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfQ29udmVydGlibGVDb25jZXB0PAorICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfVHA+OjppdGVyYXRvcl9jYXRlZ29yeSwKKyAgICAgICAgc3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz4gPigpOworICAgICAgLy8gPz8/IFdlIGRvbid0IHVzZSBfUmVmLCBhcmUgd2UganVzdCBjaGVja2luZyBmb3IgInJlZmVyZW5jZWFiaWxpdHkiPworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfVHA+OjpyZWZlcmVuY2UgX1JlZjsKKworICAgICAgX19pICs9IF9fbjsgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgYXNzaWdubWVudCBhZGRpdGlvbiBvcGVyYXRvcgorICAgICAgX19pID0gX19pICsgX19uOyBfX2kgPSBfX24gKyBfX2k7IC8vIHJlcXVpcmUgYWRkaXRpb24gd2l0aCBkaWZmZXJlbmNlIHR5cGUKKyAgICAgIF9faSAtPSBfX247ICAgICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIGFzc2lnbm1lbnQgc3VidHJhY3Rpb24gb3AKKyAgICAgIF9faSA9IF9faSAtIF9fbjsgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlIHN1YnRyYWN0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGRpZmZlcmVuY2UgdHlwZQorICAgICAgX19uID0gX19pIC0gX19qOyAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZGlmZmVyZW5jZSBvcGVyYXRvcgorICAgICAgKHZvaWQpX19pW19fbl07ICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZWxlbWVudCBhY2Nlc3Mgb3BlcmF0b3IKKyAgICB9CisgICAgX1RwIF9fYSwgX19iOworICAgIF9UcCBfX2ksIF9fajsKKyAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfVHA+OjpkaWZmZXJlbmNlX3R5cGUgX19uOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHN0cnVjdCBfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQKKyAgeworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8X1RwPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PF9UcD4gPigpOworICAgICAgX19pW19fbl0gPSAqX19pOyAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgZWxlbWVudCBhY2Nlc3MgYW5kIGFzc2lnbm1lbnQKKyAgICB9CisgICAgX1RwIF9faTsKKyAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfVHA+OjpkaWZmZXJlbmNlX3R5cGUgX19uOworICB9OworCisgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIC8vIENvbnRhaW5lciBDb25jZXB0cworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgorICBzdHJ1Y3QgX0NvbnRhaW5lckNvbmNlcHQKKyAgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSBfVmFsdWVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6c2l6ZV90eXBlIF9TaXplX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX0NvbnN0X3JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3BvaW50ZXIgX0NvbnN0X3BvaW50ZXI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9pdGVyYXRvciBfQ29uc3RfaXRlcmF0b3I7CisKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0NvbnN0X2l0ZXJhdG9yPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfQXNzaWduYWJsZUNvbmNlcHQ8X0NvbnRhaW5lcj4gPigpOworICAgICAgY29uc3QgX0NvbnRhaW5lciBfX2M7CisgICAgICBfX2kgPSBfX2MuYmVnaW4oKTsKKyAgICAgIF9faSA9IF9fYy5lbmQoKTsKKyAgICAgIF9fbiA9IF9fYy5zaXplKCk7CisgICAgICBfX24gPSBfX2MubWF4X3NpemUoKTsKKyAgICAgIF9fYiA9IF9fYy5lbXB0eSgpOworICAgIH0KKyAgICBib29sIF9fYjsKKyAgICBfQ29uc3RfaXRlcmF0b3IgX19pOworICAgIF9TaXplX3R5cGUgX19uOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgorICBzdHJ1Y3QgX011dGFibGVfQ29udGFpbmVyQ29uY2VwdAorICB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlIF9WYWx1ZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6cmVmZXJlbmNlIF9SZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfSXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjpwb2ludGVyIF9Qb2ludGVyOworCisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0NvbnRhaW5lckNvbmNlcHQ8X0NvbnRhaW5lcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0Fzc2lnbmFibGVDb25jZXB0PF9WYWx1ZV90eXBlPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0l0ZXJhdG9yPiA+KCk7CisKKyAgICAgIF9faSA9IF9fYy5iZWdpbigpOworICAgICAgX19pID0gX19jLmVuZCgpOworICAgICAgX19jLnN3YXAoX19jMik7CisgICAgfQorICAgIF9JdGVyYXRvciBfX2k7CisgICAgX0NvbnRhaW5lciBfX2MsIF9fYzI7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkQ29udGFpbmVyPgorICBzdHJ1Y3QgX0ZvcndhcmRDb250YWluZXJDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfQ29udGFpbmVyQ29uY2VwdDxfRm9yd2FyZENvbnRhaW5lcj4gPigpOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRm9yd2FyZENvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3IgX0NvbnN0X2l0ZXJhdG9yOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0NvbnN0X2l0ZXJhdG9yPiA+KCk7CisgICAgfQorICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZENvbnRhaW5lcj4KKyAgc3RydWN0IF9NdXRhYmxlX0ZvcndhcmRDb250YWluZXJDb25jZXB0CisgIHsKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfRm9yd2FyZENvbnRhaW5lckNvbmNlcHQ8X0ZvcndhcmRDb250YWluZXI+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9NdXRhYmxlX0NvbnRhaW5lckNvbmNlcHQ8X0ZvcndhcmRDb250YWluZXI+ID4oKTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0ZvcndhcmRDb250YWluZXI6Oml0ZXJhdG9yIF9JdGVyYXRvcjsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0l0ZXJhdG9yPiA+KCk7CisgICAgfQorICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfUmV2ZXJzaWJsZUNvbnRhaW5lcj4KKyAgc3RydWN0IF9SZXZlcnNpYmxlQ29udGFpbmVyQ29uY2VwdAorICB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmV2ZXJzaWJsZUNvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3IgX0NvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JldmVyc2libGVDb250YWluZXI6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIF9Db25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0ZvcndhcmRDb250YWluZXJDb25jZXB0PF9SZXZlcnNpYmxlQ29udGFpbmVyPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPCBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfQ29uc3RfaXRlcmF0b3I+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8CisgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PF9Db25zdF9yZXZlcnNlX2l0ZXJhdG9yPiA+KCk7CisKKyAgICAgIGNvbnN0IF9SZXZlcnNpYmxlQ29udGFpbmVyIF9fYzsKKyAgICAgIF9Db25zdF9yZXZlcnNlX2l0ZXJhdG9yIF9faSA9IF9fYy5yYmVnaW4oKTsKKyAgICAgIF9faSA9IF9fYy5yZW5kKCk7CisgICAgfQorICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfUmV2ZXJzaWJsZUNvbnRhaW5lcj4KKyAgc3RydWN0IF9NdXRhYmxlX1JldmVyc2libGVDb250YWluZXJDb25jZXB0CisgIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXZlcnNpYmxlQ29udGFpbmVyOjppdGVyYXRvciBfSXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmV2ZXJzaWJsZUNvbnRhaW5lcjo6cmV2ZXJzZV9pdGVyYXRvciBfUmV2ZXJzZV9pdGVyYXRvcjsKKworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8X1JldmVyc2libGVDb250YWluZXJDb25jZXB0PF9SZXZlcnNpYmxlQ29udGFpbmVyPiA+KCk7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPAorICAgICAgICBfTXV0YWJsZV9Gb3J3YXJkQ29udGFpbmVyQ29uY2VwdDxfUmV2ZXJzaWJsZUNvbnRhaW5lcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczxfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PF9JdGVyYXRvcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwKKyAgICAgICAgX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfUmV2ZXJzZV9pdGVyYXRvcj4gPigpOworCisgICAgICBfUmV2ZXJzZV9pdGVyYXRvciBfX2kgPSBfX2MucmJlZ2luKCk7CisgICAgICBfX2kgPSBfX2MucmVuZCgpOworICAgIH0KKyAgICBfUmV2ZXJzaWJsZUNvbnRhaW5lciBfX2M7CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NDb250YWluZXI+CisgIHN0cnVjdCBfUmFuZG9tQWNjZXNzQ29udGFpbmVyQ29uY2VwdAorICB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpzaXplX3R5cGUgX1NpemVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NDb250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfQ29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3IgX0NvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgX0NvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICB2b2lkIF9fY29uc3RyYWludHMoKSB7CisgICAgICBfX2Z1bmN0aW9uX3JlcXVpcmVzPAorICAgICAgICBfUmV2ZXJzaWJsZUNvbnRhaW5lckNvbmNlcHQ8X1JhbmRvbUFjY2Vzc0NvbnRhaW5lcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDxfQ29uc3RfaXRlcmF0b3I+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8CisgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8X0NvbnN0X3JldmVyc2VfaXRlcmF0b3I+ID4oKTsKKworICAgICAgY29uc3QgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lciBfX2M7CisgICAgICBfQ29uc3RfcmVmZXJlbmNlIF9fciBfSXNVbnVzZWQgPSBfX2NbX19uXTsKKyAgICB9CisgICAgX1NpemVfdHlwZSBfX247CisgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NDb250YWluZXI+CisgIHN0cnVjdCBfTXV0YWJsZV9SYW5kb21BY2Nlc3NDb250YWluZXJDb25jZXB0CisgIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NDb250YWluZXI6OnNpemVfdHlwZSBfU2l6ZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lcjo6cmVmZXJlbmNlIF9SZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzQ29udGFpbmVyOjppdGVyYXRvciBfSXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzQ29udGFpbmVyOjpyZXZlcnNlX2l0ZXJhdG9yIF9SZXZlcnNlX2l0ZXJhdG9yOworCisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwKKyAgICAgICAgX1JhbmRvbUFjY2Vzc0NvbnRhaW5lckNvbmNlcHQ8X1JhbmRvbUFjY2Vzc0NvbnRhaW5lcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwKKyAgICAgICAgX011dGFibGVfUmV2ZXJzaWJsZUNvbnRhaW5lckNvbmNlcHQ8X1JhbmRvbUFjY2Vzc0NvbnRhaW5lcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PF9JdGVyYXRvcj4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwKKyAgICAgICAgX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PF9SZXZlcnNlX2l0ZXJhdG9yPiA+KCk7CisKKyAgICAgIF9SZWZlcmVuY2UgX19yIF9Jc1VudXNlZCA9IF9fY1tfX2ldOworICAgIH0KKyAgICBfU2l6ZV90eXBlIF9faTsKKyAgICBfUmFuZG9tQWNjZXNzQ29udGFpbmVyIF9fYzsKKyAgfTsKKworICAvLyBBIFNlcXVlbmNlIGlzIGluaGVyZW50bHkgbXV0YWJsZQorICB0ZW1wbGF0ZSA8Y2xhc3MgX1NlcXVlbmNlPgorICBzdHJ1Y3QgX1NlcXVlbmNlQ29uY2VwdAorICB7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnJlZmVyZW5jZSBfUmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgX0NvbnN0X3JlZmVyZW5jZTsKKworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIC8vIE1hdHQgQXVzdGVybidzIGJvb2sgcHV0cyBEZWZhdWx0Q29uc3RydWN0aWJsZSBoZXJlLCB0aGUgQysrCisgICAgICAvLyBzdGFuZGFyZCBwbGFjZXMgaXQgaW4gQ29udGFpbmVyCisgICAgICAvLyAgICBmdW5jdGlvbl9yZXF1aXJlczwgRGVmYXVsdENvbnN0cnVjdGlibGU8U2VxdWVuY2U+ID4oKTsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9NdXRhYmxlX0ZvcndhcmRDb250YWluZXJDb25jZXB0PF9TZXF1ZW5jZT4gPigpOworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX0RlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdDxfU2VxdWVuY2U+ID4oKTsKKworICAgICAgX1NlcXVlbmNlCisJX19jIF9Jc1VudXNlZChfX24sIF9fdCksCisgICAgICAgIF9fYzIgX0lzVW51c2VkKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIF9fYy5pbnNlcnQoX19wLCBfX3QpOworICAgICAgX19jLmluc2VydChfX3AsIF9fbiwgX190KTsKKyAgICAgIF9fYy5pbnNlcnQoX19wLCBfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfX2MuZXJhc2UoX19wKTsKKyAgICAgIF9fYy5lcmFzZShfX3AsIF9fcSk7CisKKyAgICAgIF9SZWZlcmVuY2UgX19yIF9Jc1VudXNlZCA9IF9fYy5mcm9udCgpOworCisgICAgICBfX2NvbnN0X2NvbnN0cmFpbnRzKF9fYyk7CisgICAgfQorICAgIHZvaWQgX19jb25zdF9jb25zdHJhaW50cyhjb25zdCBfU2VxdWVuY2UmIF9fYykgeworICAgICAgX0NvbnN0X3JlZmVyZW5jZSBfX3IgX0lzVW51c2VkID0gX19jLmZyb250KCk7CisgICAgfQorICAgIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSBfX3Q7CisgICAgdHlwZW5hbWUgX1NlcXVlbmNlOjpzaXplX3R5cGUgX19uOworICAgIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSAqX19maXJzdCwgKl9fbGFzdDsKKyAgICB0eXBlbmFtZSBfU2VxdWVuY2U6Oml0ZXJhdG9yIF9fcCwgX19xOworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfRnJvbnRJbnNlcnRpb25TZXF1ZW5jZT4KKyAgc3RydWN0IF9Gcm9udEluc2VydGlvblNlcXVlbmNlQ29uY2VwdAorICB7CisgICAgdm9pZCBfX2NvbnN0cmFpbnRzKCkgeworICAgICAgX19mdW5jdGlvbl9yZXF1aXJlczwgX1NlcXVlbmNlQ29uY2VwdDxfRnJvbnRJbnNlcnRpb25TZXF1ZW5jZT4gPigpOworCisgICAgICBfX2MucHVzaF9mcm9udChfX3QpOworICAgICAgX19jLnBvcF9mcm9udCgpOworICAgIH0KKyAgICBfRnJvbnRJbnNlcnRpb25TZXF1ZW5jZSBfX2M7CisgICAgdHlwZW5hbWUgX0Zyb250SW5zZXJ0aW9uU2VxdWVuY2U6OnZhbHVlX3R5cGUgX190OworICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfQmFja0luc2VydGlvblNlcXVlbmNlPgorICBzdHJ1Y3QgX0JhY2tJbnNlcnRpb25TZXF1ZW5jZUNvbmNlcHQKKyAgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0JhY2tJbnNlcnRpb25TZXF1ZW5jZTo6cmVmZXJlbmNlIF9SZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFja0luc2VydGlvblNlcXVlbmNlOjpjb25zdF9yZWZlcmVuY2UgX0NvbnN0X3JlZmVyZW5jZTsKKworICAgIHZvaWQgX19jb25zdHJhaW50cygpIHsKKyAgICAgIF9fZnVuY3Rpb25fcmVxdWlyZXM8IF9TZXF1ZW5jZUNvbmNlcHQ8X0JhY2tJbnNlcnRpb25TZXF1ZW5jZT4gPigpOworCisgICAgICBfX2MucHVzaF9iYWNrKF9fdCk7CisgICAgICBfX2MucG9wX2JhY2soKTsKKyAgICAgIF9SZWZlcmVuY2UgX19yIF9Jc1VudXNlZCA9IF9fYy5iYWNrKCk7CisgICAgfQorICAgIHZvaWQgX19jb25zdF9jb25zdHJhaW50cyhjb25zdCBfQmFja0luc2VydGlvblNlcXVlbmNlJiBfX2MpIHsKKyAgICAgIF9Db25zdF9yZWZlcmVuY2UgX19yIF9Jc1VudXNlZCA9IF9fYy5iYWNrKCk7CisgICAgfTsKKyAgICBfQmFja0luc2VydGlvblNlcXVlbmNlIF9fYzsKKyAgICB0eXBlbmFtZSBfQmFja0luc2VydGlvblNlcXVlbmNlOjp2YWx1ZV90eXBlIF9fdDsKKyAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjdW5kZWYgX0lzVW51c2VkCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9CT09TVF9DT05DRVBUX0NIRUNLCisKKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2MrKzB4X3dhcm5pbmcuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jKysweF93YXJuaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3YjM3NAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jKysweF93YXJuaW5nLmgKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvYysrMHhfd2FybmluZy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7aW9zZndkfQorICovCisKKyNpZm5kZWYgX0NYWDBYX1dBUk5JTkdfSAorI2RlZmluZSBfQ1hYMFhfV0FSTklOR19IIDEKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorI2Vycm9yIFRoaXMgZmlsZSByZXF1aXJlcyBjb21waWxlciBhbmQgbGlicmFyeSBzdXBwb3J0IGZvciB0aGUgXAorSVNPIEMrKyAyMDExIHN0YW5kYXJkLiBUaGlzIHN1cHBvcnQgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbCwgYW5kIG11c3QgYmUgXAorZW5hYmxlZCB3aXRoIHRoZSAtc3RkPWMrKzExIG9yIC1zdGQ9Z251KysxMSBjb21waWxlciBvcHRpb25zLgorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2NoYXJfdHJhaXRzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvY2hhcl90cmFpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjkzNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2NoYXJfdHJhaXRzLmgKQEAgLTAsMCArMSw1NzMgQEAKKy8vIENoYXJhY3RlciBUcmFpdHMgZm9yIHVzZSBieSBzdGFuZGFyZCBzdHJpbmcgYW5kIGlvc3RyZWFtIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2NoYXJfdHJhaXRzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtzdHJpbmd9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIxICBTdHJpbmdzIGxpYnJhcnkKKy8vCisKKyNpZm5kZWYgX0NIQVJfVFJBSVRTX0gKKyNkZWZpbmUgX0NIQVJfVFJBSVRTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPiAgLy8gc3RkOjpjb3B5LCBzdGQ6OmZpbGxfbgorI2luY2x1ZGUgPGJpdHMvcG9zdHlwZXMuaD4gICAgICAvLyBGb3Igc3RyZWFtcG9zCisjaW5jbHVkZSA8Y3djaGFyPiAgICAgICAgICAgICAgIC8vIEZvciBXRU9GLCB3bWVtbW92ZSwgd21lbXNldCwgZXRjLgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYnJpZWYgIE1hcHBpbmcgZnJvbSBjaGFyYWN0ZXIgdHlwZSB0byBhc3NvY2lhdGVkIHR5cGVzLgorICAgKgorICAgKiAgQG5vdGUgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhlIGdlbmVyaWMgdmVyc2lvbgorICAgKiAgb2YgY2hhcl90cmFpdHMuICBJdCBkZWZpbmVzIGludF90eXBlLCBvZmZfdHlwZSwgcG9zX3R5cGUsIGFuZAorICAgKiAgc3RhdGVfdHlwZS4gIEJ5IGRlZmF1bHQgdGhlc2UgYXJlIHVuc2lnbmVkIGxvbmcsIHN0cmVhbW9mZiwKKyAgICogIHN0cmVhbXBvcywgYW5kIG1ic3RhdGVfdC4gIFVzZXJzIHdobyBuZWVkIGEgZGlmZmVyZW50IHNldCBvZgorICAgKiAgdHlwZXMsIGJ1dCB3aG8gZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb25zIG9mIGFueSBmdW5jdGlvbgorICAgKiAgZGVmaW5lZCBpbiBjaGFyX3RyYWl0cywgY2FuIHNwZWNpYWxpemUgX19nbnVfY3h4OjpfQ2hhcl90eXBlcworICAgKiAgd2hpbGUgbGVhdmluZyBfX2dudV9jeHg6OmNoYXJfdHJhaXRzIGFsb25lLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IF9DaGFyX3R5cGVzCisgICAgeworICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6c3RyZWFtcG9zICBwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpzdHJlYW1vZmYgIG9mZl90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6Om1ic3RhdGVfdCAgc3RhdGVfdHlwZTsKKyAgICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEJhc2UgY2xhc3MgdXNlZCB0byBpbXBsZW1lbnQgc3RkOjpjaGFyX3RyYWl0cy4KKyAgICoKKyAgICogIEBub3RlIEZvciBhbnkgZ2l2ZW4gYWN0dWFsIGNoYXJhY3RlciB0eXBlLCB0aGlzIGRlZmluaXRpb24gaXMKKyAgICogIHByb2JhYmx5IHdyb25nLiAgKE1vc3Qgb2YgdGhlIG1lbWJlciBmdW5jdGlvbnMgYXJlIGxpa2VseSB0byBiZQorICAgKiAgcmlnaHQsIGJ1dCB0aGUgaW50X3R5cGUgYW5kIHN0YXRlX3R5cGUgdHlwZWRlZnMsIGFuZCB0aGUgZW9mKCkKKyAgICogIG1lbWJlciBmdW5jdGlvbiwgYXJlIGxpa2VseSB0byBiZSB3cm9uZy4pICBUaGUgcmVhc29uIHRoaXMgY2xhc3MKKyAgICogIGV4aXN0cyBpcyBzbyB1c2VycyBjYW4gc3BlY2lhbGl6ZSBpdC4gIENsYXNzZXMgaW4gbmFtZXNwYWNlIHN0ZAorICAgKiAgbWF5IG5vdCBiZSBzcGVjaWFsaXplZCBmb3IgZnVuZGFtZW50YWwgdHlwZXMsIGJ1dCBjbGFzc2VzIGluCisgICAqICBuYW1lc3BhY2UgX19nbnVfY3h4IG1heSBiZS4KKyAgICoKKyAgICogIFNlZSBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDA1Y2gxM3MwMy5odG1sCisgICAqICBmb3IgYWR2aWNlIG9uIGhvdyB0byBtYWtlIHVzZSBvZiB0aGlzIGNsYXNzIGZvciBAYSB1bnVzdWFsIGNoYXJhY3RlcgorICAgKiAgdHlwZXMuIEFsc28sIGNoZWNrIG91dCBpbmNsdWRlL2V4dC9wb2RfY2hhcl90cmFpdHMuaC4gIAorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBjaGFyX3RyYWl0cworICAgIHsKKyAgICAgIHR5cGVkZWYgX0NoYXJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhcl90eXBlczxfQ2hhclQ+OjppbnRfdHlwZSAgICBpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJfdHlwZXM8X0NoYXJUPjo6cG9zX3R5cGUgICAgcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyX3R5cGVzPF9DaGFyVD46Om9mZl90eXBlICAgIG9mZl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhcl90eXBlczxfQ2hhclQ+OjpzdGF0ZV90eXBlICBzdGF0ZV90eXBlOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyBfX2MxID0gX19jMjsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCisgICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQorCisgICAgICBzdGF0aWMgaW50CisgICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzdGQ6OnNpemVfdCBfX24pOworCisgICAgICBzdGF0aWMgc3RkOjpzaXplX3QKKyAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcyk7CisKKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCisgICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdGQ6OnNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHN0ZDo6c2l6ZV90IF9fbik7CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzdGQ6OnNpemVfdCBfX24pOworCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzdGQ6OnNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGNoYXJfdHlwZQorICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBpbnRfdHlwZQorICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oX19jKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKKyAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGludF90eXBlCisgICAgICBlb2YoKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KF9HTElCQ1hYX1NURElPX0VPRik7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBpbnRfdHlwZQorICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQorICAgICAgeyByZXR1cm4gIWVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gX19jIDogdG9faW50X3R5cGUoY2hhcl90eXBlKCkpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW50CisgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6CisgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc3RkOjpzaXplX3QgX19uKQorICAgIHsKKyAgICAgIGZvciAoc3RkOjpzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwlpZiAobHQoX19zMVtfX2ldLCBfX3MyW19faV0pKQorCSAgcmV0dXJuIC0xOworCWVsc2UgaWYgKGx0KF9fczJbX19pXSwgX19zMVtfX2ldKSkKKwkgIHJldHVybiAxOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdGQ6OnNpemVfdAorICAgIGNoYXJfdHJhaXRzPF9DaGFyVD46OgorICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcCkKKyAgICB7CisgICAgICBzdGQ6OnNpemVfdCBfX2kgPSAwOworICAgICAgd2hpbGUgKCFlcShfX3BbX19pXSwgY2hhcl90eXBlKCkpKQorICAgICAgICArK19faTsKKyAgICAgIHJldHVybiBfX2k7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBjb25zdCB0eXBlbmFtZSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpjaGFyX3R5cGUqCisgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6CisgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RkOjpzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKKyAgICB7CisgICAgICBmb3IgKHN0ZDo6c2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisgICAgICAgIGlmIChlcShfX3NbX19pXSwgX19hKSkKKyAgICAgICAgICByZXR1cm4gX19zICsgX19pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFtZSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpjaGFyX3R5cGUqCisgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6CisgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc3RkOjpzaXplX3QgX19uKQorICAgIHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fbWVtbW92ZShfX3MxLCBfX3MyLAorCQkJCQkJICAgIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFtZSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpjaGFyX3R5cGUqCisgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6CisgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc3RkOjpzaXplX3QgX19uKQorICAgIHsKKyAgICAgIC8vIE5COiBJbmxpbmUgc3RkOjpjb3B5IHNvIG5vIHJlY3Vyc2l2ZSBkZXBlbmRlbmNpZXMuCisgICAgICBzdGQ6OmNvcHkoX19zMiwgX19zMiArIF9fbiwgX19zMSk7CisgICAgICByZXR1cm4gX19zMTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIGNoYXJfdHJhaXRzPF9DaGFyVD46OmNoYXJfdHlwZSoKKyAgICBjaGFyX3RyYWl0czxfQ2hhclQ+OjoKKyAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHN0ZDo6c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKKyAgICB7CisgICAgICAvLyBOQjogSW5saW5lIHN0ZDo6ZmlsbF9uIHNvIG5vIHJlY3Vyc2l2ZSBkZXBlbmRlbmNpZXMuCisgICAgICBzdGQ6OmZpbGxfbihfX3MsIF9fbiwgX19hKTsKKyAgICAgIHJldHVybiBfX3M7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyAyMS4xCisgIC8qKgorICAgKiAgQGJyaWVmICBCYXNpcyBmb3IgZXhwbGljaXQgdHJhaXRzIHNwZWNpYWxpemF0aW9ucy4KKyAgICoKKyAgICogIEBub3RlICBGb3IgYW55IGdpdmVuIGFjdHVhbCBjaGFyYWN0ZXIgdHlwZSwgdGhpcyBkZWZpbml0aW9uIGlzCisgICAqICBwcm9iYWJseSB3cm9uZy4gIFNpbmNlIHRoaXMgaXMganVzdCBhIHRoaW4gd3JhcHBlciBhcm91bmQKKyAgICogIF9fZ251X2N4eDo6Y2hhcl90cmFpdHMsIGl0IGlzIHBvc3NpYmxlIHRvIGFjaGlldmUgYSBtb3JlCisgICAqICBhcHByb3ByaWF0ZSBkZWZpbml0aW9uIGJ5IHNwZWNpYWxpemluZyBfX2dudV9jeHg6OmNoYXJfdHJhaXRzLgorICAgKgorICAgKiAgU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDVjaDEzczAzLmh0bWwKKyAgICogIGZvciBhZHZpY2Ugb24gaG93IHRvIG1ha2UgdXNlIG9mIHRoaXMgY2xhc3MgZm9yIEBhIHVudXN1YWwgY2hhcmFjdGVyCisgICAqICB0eXBlcy4gQWxzbywgY2hlY2sgb3V0IGluY2x1ZGUvZXh0L3BvZF9jaGFyX3RyYWl0cy5oLgorICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CisgICAgc3RydWN0IGNoYXJfdHJhaXRzIDogcHVibGljIF9fZ251X2N4eDo6Y2hhcl90cmFpdHM8X0NoYXJUPgorICAgIHsgfTsKKworCisgIC8vLyAyMS4xLjMuMSAgY2hhcl90cmFpdHMgc3BlY2lhbGl6YXRpb25zCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXIgICAgICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgaW50ICAgICAgICAgICAgICAgaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHN0cmVhbXBvcyAgICAgICAgIHBvc190eXBlOworICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgICAgICAgICBvZmZfdHlwZTsKKyAgICAgIHR5cGVkZWYgbWJzdGF0ZV90ICAgICAgICAgc3RhdGVfdHlwZTsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgX19jMSA9IF9fYzI7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBib29sCisgICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KKworICAgICAgc3RhdGljIGludAorICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9tZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCisgICAgICB7IHJldHVybiBfX2J1aWx0aW5fc3RybGVuKF9fcyk7IH0KKworICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4oX19idWlsdGluX21lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fbWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9tZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9tZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgY2hhcl90eXBlCisgICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQorCisgICAgICAvLyBUbyBrZWVwIGJvdGggdGhlIGJ5dGUgMHhmZiBhbmQgdGhlIGVvZiBzeW1ib2wgMHhmZmZmZmZmZgorICAgICAgLy8gZnJvbSBlbmRpbmcgdXAgYXMgMHhmZmZmZmZmZi4KKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgaW50X3R5cGUKKyAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgaW50X3R5cGUKKyAgICAgIGVvZigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oX0dMSUJDWFhfU1RESU9fRU9GKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGludF90eXBlCisgICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7IH0KKyAgfTsKKworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgLy8vIDIxLjEuMy4yICBjaGFyX3RyYWl0cyBzcGVjaWFsaXphdGlvbnMKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PgorICAgIHsKKyAgICAgIHR5cGVkZWYgd2NoYXJfdCAgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB3aW50X3QgICAgICAgICAgICBpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmICAgICAgICAgb2ZmX3R5cGU7CisgICAgICB0eXBlZGVmIHdzdHJlYW1wb3MgICAgICAgIHBvc190eXBlOworICAgICAgdHlwZWRlZiBtYnN0YXRlX3QgICAgICAgICBzdGF0ZV90eXBlOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyBfX2MxID0gX19jMjsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQorCisgICAgICBzdGF0aWMgaW50CisgICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeyByZXR1cm4gd21lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CisKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKKyAgICAgIHsgcmV0dXJuIHdjc2xlbihfX3MpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCisgICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKKyAgICAgIHsgcmV0dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24pOyB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24pOyB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCisgICAgICB7IHJldHVybiB3bWVtc2V0KF9fcywgX19hLCBfX24pOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgY2hhcl90eXBlCisgICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgaW50X3R5cGUKKyAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGludF90eXBlCisgICAgICBlb2YoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KFdFT0YpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgaW50X3R5cGUKKyAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQorICB9OworI2VuZGlmIC8vX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjaWYgKChfX2NwbHVzcGx1cyA+PSAyMDExMDNMKSBcCisgICAgICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKSkKKworI2luY2x1ZGUgPGNzdGRpbnQ+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXIxNl90PgorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhcjE2X3QgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB1aW50X2xlYXN0MTZfdCAgICBpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmICAgICAgICAgb2ZmX3R5cGU7CisgICAgICB0eXBlZGVmIHUxNnN0cmVhbXBvcyAgICAgIHBvc190eXBlOworICAgICAgdHlwZWRlZiBtYnN0YXRlX3QgICAgICAgICBzdGF0ZV90eXBlOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKSBub2V4Y2VwdAorICAgICAgeyBfX2MxID0gX19jMjsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wKKyAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbAorICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQorCisgICAgICBzdGF0aWMgaW50CisgICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJICBpZiAobHQoX19zMVtfX2ldLCBfX3MyW19faV0pKQorCSAgICByZXR1cm4gLTE7CisJICBlbHNlIGlmIChsdChfX3MyW19faV0sIF9fczFbX19pXSkpCisJICAgIHJldHVybiAxOworCXJldHVybiAwOworICAgICAgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCisgICAgICB7CisJc2l6ZV90IF9faSA9IDA7CisJd2hpbGUgKCFlcShfX3NbX19pXSwgY2hhcl90eXBlKCkpKQorCSAgKytfX2k7CisJcmV0dXJuIF9faTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJICBpZiAoZXEoX19zW19faV0sIF9fYSkpCisJICAgIHJldHVybiBfX3MgKyBfX2k7CisJcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeworCXJldHVybiAoc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4KKwkJKF9fYnVpbHRpbl9tZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKSkpOworICAgICAgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsKKwlyZXR1cm4gKHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+CisJCShfX2J1aWx0aW5fbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKSkpOworICAgICAgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJICBhc3NpZ24oX19zW19faV0sIF9fYSk7CisJcmV0dXJuIF9fczsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyX3R5cGUKKyAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnRfdHlwZQorICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbAorICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50X3R5cGUKKyAgICAgIGVvZigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50X3R5cGUKKyAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyMzJfdD4KKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXIzMl90ICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdWludF9sZWFzdDMyX3QgICAgaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHN0cmVhbW9mZiAgICAgICAgIG9mZl90eXBlOworICAgICAgdHlwZWRlZiB1MzJzdHJlYW1wb3MgICAgICBwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgbWJzdGF0ZV90ICAgICAgICAgc3RhdGVfdHlwZTsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikgbm9leGNlcHQKKyAgICAgIHsgX19jMSA9IF9fYzI7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sCisgICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wKKyAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KKworICAgICAgc3RhdGljIGludAorICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCSAgaWYgKGx0KF9fczFbX19pXSwgX19zMltfX2ldKSkKKwkgICAgcmV0dXJuIC0xOworCSAgZWxzZSBpZiAobHQoX19zMltfX2ldLCBfX3MxW19faV0pKQorCSAgICByZXR1cm4gMTsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgc3RhdGljIHNpemVfdAorICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQorICAgICAgeworCXNpemVfdCBfX2kgPSAwOworCXdoaWxlICghZXEoX19zW19faV0sIGNoYXJfdHlwZSgpKSkKKwkgICsrX19pOworCXJldHVybiBfX2k7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCisgICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCSAgaWYgKGVxKF9fc1tfX2ldLCBfX2EpKQorCSAgICByZXR1cm4gX19zICsgX19pOworCXJldHVybiAwOworICAgICAgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsKKwlyZXR1cm4gKHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+CisJCShfX2J1aWx0aW5fbWVtbW92ZShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSkpKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7IAorCXJldHVybiAoc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4KKwkJKF9fYnVpbHRpbl9tZW1jcHkoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpKSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCisgICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwkgIGFzc2lnbihfX3NbX19pXSwgX19hKTsKKwlyZXR1cm4gX19zOworICAgICAgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGNoYXJfdHlwZQorICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGludF90eXBlCisgICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sCisgICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnRfdHlwZQorICAgICAgZW9mKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnRfdHlwZQorICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyAwIDogX19jOyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgCisKKyNlbmRpZiAvLyBfQ0hBUl9UUkFJVFNfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2NvZGVjdnQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jb2RlY3Z0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jb2RlY3Z0LmgKQEAgLTAsMCArMSw1MDcgQEAKKy8vIExvY2FsZSBzdXBwb3J0IChjb2RlY3Z0KSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9jb2RlY3Z0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtsb2NhbGV9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisKKyNpZm5kZWYgX0NPREVDVlRfSAorI2RlZmluZSBfQ09ERUNWVF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8vIEVtcHR5IGJhc2UgY2xhc3MgZm9yIGNvZGVjdnQgZmFjZXQgWzIyLjIuMS41XS4KKyAgY2xhc3MgY29kZWN2dF9iYXNlCisgIHsKKyAgcHVibGljOgorICAgIGVudW0gcmVzdWx0CisgICAgeworICAgICAgb2ssCisgICAgICBwYXJ0aWFsLAorICAgICAgZXJyb3IsCisgICAgICBub2NvbnYKKyAgICB9OworICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb21tb24gYmFzZSBmb3IgY29kZWN2dCBmdW5jdGlvbnMuCisgICAqCisgICAqICBUaGlzIHRlbXBsYXRlIGNsYXNzIHByb3ZpZGVzIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgcHVibGljIGZ1bmN0aW9ucworICAgKiAgdGhhdCBmb3J3YXJkIHRvIHRoZSBwcm90ZWN0ZWQgdmlydHVhbCBmdW5jdGlvbnMuCisgICAqCisgICAqICBUaGlzIHRlbXBsYXRlIGFsc28gcHJvdmlkZXMgYWJzdHJhY3Qgc3R1YnMgZm9yIHRoZSBwcm90ZWN0ZWQgdmlydHVhbAorICAgKiAgZnVuY3Rpb25zLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CisgICAgY2xhc3MgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UKKyAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAlyZXN1bHQ7CisgICAgICB0eXBlZGVmIF9JbnRlcm5UCQkJaW50ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIF9FeHRlcm5UCQkJZXh0ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIF9TdGF0ZVQJCQlzdGF0ZV90eXBlOworCisgICAgICAvLyAyMi4yLjEuNS4xIGNvZGVjdnQgbWVtYmVycworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGZyb20gaW50ZXJuYWwgdG8gZXh0ZXJuYWwgY2hhcmFjdGVyIHNldC4KKyAgICAgICAqCisgICAgICAgKiAgQ29udmVydHMgaW5wdXQgc3RyaW5nIG9mIGludGVybl90eXBlIHRvIG91dHB1dCBzdHJpbmcgb2YKKyAgICAgICAqICBleHRlcm5fdHlwZS4gIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHdjc3J0b21icy4gIEl0IGRvZXMgdGhpcyBieQorICAgICAgICogIGNhbGxpbmcgY29kZWN2dDo6ZG9fb3V0LgorICAgICAgICoKKyAgICAgICAqICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjaGFyYWN0ZXIgc2V0cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUKKyAgICAgICAqICBmYWNldCdzIGxvY2FsZSwgaW50ZXJuYWwgYW5kIGV4dGVybmFsIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgY2hhcmFjdGVycyBpbiBbZnJvbSxmcm9tX2VuZCkgYXJlIGNvbnZlcnRlZCBhbmQgd3JpdHRlbiB0bworICAgICAgICogIFt0byx0b19lbmQpLiAgZnJvbV9uZXh0IGFuZCB0b19uZXh0IGFyZSBzZXQgdG8gcG9pbnQgdG8gdGhlCisgICAgICAgKiAgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgY29udmVydGVkIGNoYXJhY3RlciwKKyAgICAgICAqICByZXNwZWN0aXZlbHkuICBJZiB0aGUgcmVzdWx0IG5lZWRlZCBubyBjb252ZXJzaW9uLCBmcm9tX25leHQgYW5kCisgICAgICAgKiAgdG9fbmV4dCBhcmUgbm90IGFmZmVjdGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGUgQGEgc3RhdGUgYXJndW1lbnQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGlmIHRoZSBpbnB1dCBpcyBhdCB0aGUKKyAgICAgICAqICBiZWdpbm5pbmcgYW5kIGNhcnJpZWQgZnJvbSBhIHByZXZpb3VzIGNhbGwgaWYgY29udGludWluZworICAgICAgICogIGNvbnZlcnNpb24uICBUaGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBhYm91dCBob3cgQGEgc3RhdGUgaXMgdXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHJlc3VsdCByZXR1cm5lZCBpcyBhIG1lbWJlciBvZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdC4gIElmCisgICAgICAgKiAgYWxsIHRoZSBpbnB1dCBpcyBjb252ZXJ0ZWQsIHJldHVybnMgY29kZWN2dF9iYXNlOjpvay4gIElmIG5vCisgICAgICAgKiAgY29udmVyc2lvbiBpcyBuZWNlc3NhcnksIHJldHVybnMgY29kZWN2dF9iYXNlOjpub2NvbnYuICBJZgorICAgICAgICogIHRoZSBpbnB1dCBlbmRzIGVhcmx5IG9yIHRoZXJlIGlzIGluc3VmZmljaWVudCBzcGFjZSBpbiB0aGUKKyAgICAgICAqICBvdXRwdXQsIHJldHVybnMgY29kZWN2dF9iYXNlOjpwYXJ0aWFsLiAgT3RoZXJ3aXNlIHRoZQorICAgICAgICogIGNvbnZlcnNpb24gZmFpbGVkIGFuZCBjb2RlY3Z0X2Jhc2U6OmVycm9yIGlzIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fc3RhdGUgIFBlcnNpc3RlbnQgY29udmVyc2lvbiBzdGF0ZSBkYXRhLgorICAgICAgICogIEBwYXJhbSAgX19mcm9tICBTdGFydCBvZiBpbnB1dC4KKyAgICAgICAqICBAcGFyYW0gIF9fZnJvbV9lbmQgIEVuZCBvZiBpbnB1dC4KKyAgICAgICAqICBAcGFyYW0gIF9fZnJvbV9uZXh0ICBSZXR1cm5zIHN0YXJ0IG9mIHVuY29udmVydGVkIGRhdGEuCisgICAgICAgKiAgQHBhcmFtICBfX3RvICBTdGFydCBvZiBvdXRwdXQgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX190b19lbmQgIEVuZCBvZiBvdXRwdXQgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX190b19uZXh0ICBSZXR1cm5zIHN0YXJ0IG9mIHVudXNlZCBvdXRwdXQgYXJlYS4KKyAgICAgICAqICBAcmV0dXJuICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdC4KKyAgICAgICovCisgICAgICByZXN1bHQKKyAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorCSAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorCSAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAorCQkJICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlc2V0IGNvbnZlcnNpb24gc3RhdGUuCisgICAgICAgKgorICAgICAgICogIFdyaXRlcyBjaGFyYWN0ZXJzIHRvIG91dHB1dCB0aGF0IHdvdWxkIHJlc3RvcmUgQGEgc3RhdGUgdG8gaW5pdGlhbAorICAgICAgICogIGNvbmRpdGlvbnMuICBUaGUgaWRlYSBpcyB0aGF0IGlmIGEgcGFydGlhbCBjb252ZXJzaW9uIG9jY3VycywgdGhlbgorICAgICAgICogIHRoZSBjb252ZXJ0aW5nIHRoZSBjaGFyYWN0ZXJzIHdyaXR0ZW4gYnkgdGhpcyBmdW5jdGlvbiB3b3VsZCBsZWF2ZQorICAgICAgICogIHRoZSBzdGF0ZSBpbiBpbml0aWFsIGNvbmRpdGlvbnMsIHJhdGhlciB0aGFuIHBhcnRpYWwgY29udmVyc2lvbgorICAgICAgICogIHN0YXRlLiAgSXQgZG9lcyB0aGlzIGJ5IGNhbGxpbmcgY29kZWN2dDo6ZG9fdW5zaGlmdCgpLgorICAgICAgICoKKyAgICAgICAqICBGb3IgZXhhbXBsZSwgaWYgNCBleHRlcm5hbCBjaGFyYWN0ZXJzIGFsd2F5cyBjb252ZXJ0ZWQgdG8gMSBpbnRlcm5hbAorICAgICAgICogIGNoYXJhY3RlciwgYW5kIGlucHV0IHRvIGluKCkgaGFkIDYgZXh0ZXJuYWwgY2hhcmFjdGVycyB3aXRoIHN0YXRlCisgICAgICAgKiAgc2F2ZWQsIHRoaXMgZnVuY3Rpb24gd291bGQgd3JpdGUgdHdvIGNoYXJhY3RlcnMgdG8gdGhlIG91dHB1dCBhbmQKKyAgICAgICAqICBzZXQgdGhlIHN0YXRlIHRvIGluaXRpYWxpemVkIGNvbmRpdGlvbnMuCisgICAgICAgKgorICAgICAgICogIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGNoYXJhY3RlciBzZXRzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZQorICAgICAgICogIGZhY2V0J3MgbG9jYWxlLCBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSByZXN1bHQgcmV0dXJuZWQgaXMgYSBtZW1iZXIgb2YgY29kZWN2dF9iYXNlOjpyZXN1bHQuICBJZiB0aGUKKyAgICAgICAqICBzdGF0ZSBjb3VsZCBiZSByZXNldCBhbmQgZGF0YSB3cml0dGVuLCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6b2suICBJZgorICAgICAgICogIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6bm9jb252LiAgSWYgdGhlCisgICAgICAgKiAgb3V0cHV0IGhhcyBpbnN1ZmZpY2llbnQgc3BhY2UsIHJldHVybnMgY29kZWN2dF9iYXNlOjpwYXJ0aWFsLgorICAgICAgICogIE90aGVyd2lzZSB0aGUgcmVzZXQgZmFpbGVkIGFuZCBjb2RlY3Z0X2Jhc2U6OmVycm9yIGlzIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fc3RhdGUgIFBlcnNpc3RlbnQgY29udmVyc2lvbiBzdGF0ZSBkYXRhLgorICAgICAgICogIEBwYXJhbSAgX190byAgU3RhcnQgb2Ygb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fdG9fZW5kICBFbmQgb2Ygb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fdG9fbmV4dCAgUmV0dXJucyBzdGFydCBvZiB1bnVzZWQgb3V0cHV0IGFyZWEuCisgICAgICAgKiAgQHJldHVybiAgY29kZWN2dF9iYXNlOjpyZXN1bHQuCisgICAgICAqLworICAgICAgcmVzdWx0CisgICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisJICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgZnJvbSBleHRlcm5hbCB0byBpbnRlcm5hbCBjaGFyYWN0ZXIgc2V0LgorICAgICAgICoKKyAgICAgICAqICBDb252ZXJ0cyBpbnB1dCBzdHJpbmcgb2YgZXh0ZXJuX3R5cGUgdG8gb3V0cHV0IHN0cmluZyBvZgorICAgICAgICogIGludGVybl90eXBlLiAgVGhpcyBpcyBhbmFsb2dvdXMgdG8gbWJzcnRvd2NzLiAgSXQgZG9lcyB0aGlzIGJ5CisgICAgICAgKiAgY2FsbGluZyBjb2RlY3Z0Ojpkb19pbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gY2hhcmFjdGVyIHNldHMgYXJlIGRldGVybWluZWQgYnkgdGhlCisgICAgICAgKiAgZmFjZXQncyBsb2NhbGUsIGludGVybmFsIGFuZCBleHRlcm5hbCB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNoYXJhY3RlcnMgaW4gW2Zyb20sZnJvbV9lbmQpIGFyZSBjb252ZXJ0ZWQgYW5kIHdyaXR0ZW4gdG8KKyAgICAgICAqICBbdG8sdG9fZW5kKS4gIGZyb21fbmV4dCBhbmQgdG9fbmV4dCBhcmUgc2V0IHRvIHBvaW50IHRvIHRoZQorICAgICAgICogIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IGNvbnZlcnRlZCBjaGFyYWN0ZXIsCisgICAgICAgKiAgcmVzcGVjdGl2ZWx5LiAgSWYgdGhlIHJlc3VsdCBuZWVkZWQgbm8gY29udmVyc2lvbiwgZnJvbV9uZXh0IGFuZAorICAgICAgICogIHRvX25leHQgYXJlIG5vdCBhZmZlY3RlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIEBhIHN0YXRlIGFyZ3VtZW50IHNob3VsZCBiZSBpbml0aWFsaXplZCBpZiB0aGUgaW5wdXQgaXMgYXQgdGhlCisgICAgICAgKiAgYmVnaW5uaW5nIGFuZCBjYXJyaWVkIGZyb20gYSBwcmV2aW91cyBjYWxsIGlmIGNvbnRpbnVpbmcKKyAgICAgICAqICBjb252ZXJzaW9uLiAgVGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgYWJvdXQgaG93IEBhIHN0YXRlIGlzIHVzZWQuCisgICAgICAgKgorICAgICAgICogIFRoZSByZXN1bHQgcmV0dXJuZWQgaXMgYSBtZW1iZXIgb2YgY29kZWN2dF9iYXNlOjpyZXN1bHQuICBJZgorICAgICAgICogIGFsbCB0aGUgaW5wdXQgaXMgY29udmVydGVkLCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6b2suICBJZiBubworICAgICAgICogIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6bm9jb252LiAgSWYKKyAgICAgICAqICB0aGUgaW5wdXQgZW5kcyBlYXJseSBvciB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgc3BhY2UgaW4gdGhlCisgICAgICAgKiAgb3V0cHV0LCByZXR1cm5zIGNvZGVjdnRfYmFzZTo6cGFydGlhbC4gIE90aGVyd2lzZSB0aGUKKyAgICAgICAqICBjb252ZXJzaW9uIGZhaWxlZCBhbmQgY29kZWN2dF9iYXNlOjplcnJvciBpcyByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3N0YXRlICBQZXJzaXN0ZW50IGNvbnZlcnNpb24gc3RhdGUgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIF9fZnJvbSAgU3RhcnQgb2YgaW5wdXQuCisgICAgICAgKiAgQHBhcmFtICBfX2Zyb21fZW5kICBFbmQgb2YgaW5wdXQuCisgICAgICAgKiAgQHBhcmFtICBfX2Zyb21fbmV4dCAgUmV0dXJucyBzdGFydCBvZiB1bmNvbnZlcnRlZCBkYXRhLgorICAgICAgICogIEBwYXJhbSAgX190byAgU3RhcnQgb2Ygb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fdG9fZW5kICBFbmQgb2Ygb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fdG9fbmV4dCAgUmV0dXJucyBzdGFydCBvZiB1bnVzZWQgb3V0cHV0IGFyZWEuCisgICAgICAgKiAgQHJldHVybiAgY29kZWN2dF9iYXNlOjpyZXN1bHQuCisgICAgICAqLworICAgICAgcmVzdWx0CisgICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorCSBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKwkgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCisJCQkgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKKyAgICAgIH0KKworICAgICAgaW50CisgICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KKworICAgICAgYm9vbAorICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYoKTsgfQorCisgICAgICBpbnQKKyAgICAgIGxlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorCSAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CisKKyAgICAgIGludAorICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgZXhwbGljaXQKKyAgICAgIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KKworICAgICAgdmlydHVhbAorICAgICAgfl9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCBmcm9tIGludGVybmFsIHRvIGV4dGVybmFsIGNoYXJhY3RlciBzZXQuCisgICAgICAgKgorICAgICAgICogIENvbnZlcnRzIGlucHV0IHN0cmluZyBvZiBpbnRlcm5fdHlwZSB0byBvdXRwdXQgc3RyaW5nIG9mCisgICAgICAgKiAgZXh0ZXJuX3R5cGUuICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZQorICAgICAgICogIHRoZSB2YWx1ZSByZXR1cm5lZC4gIEBzZWUgb3V0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKKwkgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAorCQkgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOworCisgICAgICB2aXJ0dWFsIHJlc3VsdAorICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisJICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOworCisgICAgICB2aXJ0dWFsIGJvb2wKKyAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKKworICAgICAgdmlydHVhbCBpbnQKKyAgICAgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKwkJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKKworICAgICAgdmlydHVhbCBpbnQKKyAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKKyAgICB9OworCisKKworICAvKioKKyAgICogIEBicmllZiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBjb2RlY3Z0LgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKgorICAgKiAgTkI6IEdlbmVyaWMsIG1vc3RseSB1c2VsZXNzIGltcGxlbWVudGF0aW9uLgorICAgKgorICAqLworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgorICAgIGNsYXNzIGNvZGVjdnQKKyAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAlyZXN1bHQ7CisgICAgICB0eXBlZGVmIF9JbnRlcm5UCQkJaW50ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIF9FeHRlcm5UCQkJZXh0ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIF9TdGF0ZVQJCQlzdGF0ZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX19jX2xvY2FsZQkJCV9NX2NfbG9jYWxlX2NvZGVjdnQ7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICBleHBsaWNpdAorICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKKyAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPiAoX19yZWZzKSwKKwlfTV9jX2xvY2FsZV9jb2RlY3Z0KDApCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGNvZGVjdnQoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5jb2RlY3Z0KCkgeyB9CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKKwkgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCisJCSBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisJICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorCSAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CisKKyAgICAgIHZpcnR1YWwgYm9vbAorICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19sZW5ndGgoc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisJCWNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKKworICAgICAgdmlydHVhbCBpbnQKKyAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgorICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKKworICAvLy8gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+CisgICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgY2hhcgkJCWludGVybl90eXBlOworICAgICAgdHlwZWRlZiBjaGFyCQkJZXh0ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIG1ic3RhdGVfdAkJCXN0YXRlX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfX2NfbG9jYWxlCQkJX01fY19sb2NhbGVfY29kZWN2dDsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOworCisgICAgICBleHBsaWNpdAorICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBjb2RlY3Z0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2aXJ0dWFsCisgICAgICB+Y29kZWN2dCgpOworCisgICAgICB2aXJ0dWFsIHJlc3VsdAorICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisJICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisJICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAorCQkgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOworCisgICAgICB2aXJ0dWFsIGJvb2wKKyAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorCQljb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKKyAgfTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIC8vLyBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KKyAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiB3Y2hhcl90CQkJaW50ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIGNoYXIJCQlleHRlcm5fdHlwZTsKKyAgICAgIHR5cGVkZWYgbWJzdGF0ZV90CQkJc3RhdGVfdHlwZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9fY19sb2NhbGUJCQlfTV9jX2xvY2FsZV9jb2RlY3Z0OworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgICBleHBsaWNpdAorICAgICAgY29kZWN2dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfmNvZGVjdnQoKTsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorCSAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorCSAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIHJlc3VsdAorICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLAorCQkgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKwkJIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCisJICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwKKwkgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorCSAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OworCisgICAgICB2aXJ0dWFsCisgICAgICBpbnQgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOworCisgICAgICB2aXJ0dWFsCisgICAgICBib29sIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOworCisgICAgICB2aXJ0dWFsCisgICAgICBpbnQgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorCQkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CisgICAgfTsKKyNlbmRpZiAvL19HTElCQ1hYX1VTRV9XQ0hBUl9UCisKKyAgLy8vIGNsYXNzIGNvZGVjdnRfYnluYW1lIFsyMi4yLjEuNl0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KKyAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpCisgICAgICB7CisJaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiQyIpICE9IDAKKwkgICAgJiYgX19idWlsdGluX3N0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisJICB7CisJICAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY29kZWN2dCk7CisJICAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jb2RlY3Z0LCBfX3MpOworCSAgfQorICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CisgICAgfTsKKworICAvLyBJbmhpYml0IGltcGxpY2l0IGluc3RhbnRpYXRpb25zIGZvciByZXF1aXJlZCBpbnN0YW50aWF0aW9ucywKKyAgLy8gd2hpY2ggYXJlIGRlZmluZWQgdmlhIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIGVsc2V3aGVyZS4KKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+JgorICAgIHVzZV9mYWNldDxjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+JgorICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOworI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8vIF9DT0RFQ1ZUX0gKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jb25jZXB0X2NoZWNrLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvY29uY2VwdF9jaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWZkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvY29uY2VwdF9jaGVjay5oCkBAIC0wLDAgKzEsODAgQEAKKy8vIENvbmNlcHQtY2hlY2tpbmcgY29udHJvbCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9jb25jZXB0X2NoZWNrLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtpdGVyYXRvcn0KKyAqLworCisjaWZuZGVmIF9DT05DRVBUX0NIRUNLX0gKKyNkZWZpbmUgX0NPTkNFUFRfQ0hFQ0tfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKKy8vIEFsbCBwbGFjZXMgaW4gbGlic3RkYysrLXYzIHdoZXJlIHRoZXNlIGFyZSB1c2VkLCBvciAvbWlnaHQvIGJlIHVzZWQsIG9yCisvLyBkb24ndCBuZWVkIHRvIGJlIHVzZWQsIG9yIHBlcmhhcHMgL3Nob3VsZC8gYmUgdXNlZCwgYXJlIGNvbW1lbnRlZCB3aXRoCisvLyAiY29uY2VwdCByZXF1aXJlbWVudHMiIChhbmQgbWF5YmUgc29tZSBtb3JlIHRleHQpLiAgU28gZ3JlcCBsaWtlIGNyYXp5CisvLyBpZiB5b3UncmUgbG9va2luZyBmb3IgYWRkaXRpb25hbCBwbGFjZXMgdG8gdXNlIHRoZXNlLgorCisvLyBDb25jZXB0LWNoZWNraW5nIGNvZGUgaXMgb2ZmIGJ5IGRlZmF1bHQgdW5sZXNzIHVzZXJzIHR1cm4gaXQgb24gdmlhCisvLyBjb25maWd1cmUgb3B0aW9ucyBvciBlZGl0aW5nIGMrK2NvbmZpZy5oLgorCisjaWZuZGVmIF9HTElCQ1hYX0NPTkNFUFRfQ0hFQ0tTCisKKyNkZWZpbmUgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKC4uLikKKyNkZWZpbmUgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9hLF9iKQorI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9hLF9iLF9jKQorI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9hLF9iLF9jLF9kKQorI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXM0KF9hLF9iLF9jLF9kLF9lKQorCisjZWxzZSAvLyB0aGUgY2hlY2tzIGFyZSBvbgorCisjaW5jbHVkZSA8Yml0cy9ib29zdF9jb25jZXB0X2NoZWNrLmg+CisKKy8vIE5vdGUgdGhhdCB0aGUgb2J2aW91cyBhbmQgZWxlZ2FudCBhcHByb2FjaCBvZgorLy8KKy8vI2RlZmluZSBnbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKEMpIGRlYnVnOjpmdW5jdGlvbl9yZXF1aXJlczwgZGVidWc6OkMgPigpCisvLworLy8gd29uJ3Qgd29yayBkdWUgdG8gY29uY2VwdCB0ZW1wbGF0ZXMgd2l0aCBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwgZS5nLiwKKy8vIEJpbmFyeVByZWRpY2F0ZUNvbmNlcHQuICBUaGUgcHJlcHJvY2Vzc29yIHRyaWVzIHRvIHNwbGl0IHRoaW5ncyB1cCBvbgorLy8gdGhlIGNvbW1hcyBpbiB0aGUgdGVtcGxhdGUgYXJndW1lbnQgbGlzdC4gIFdlIGNhbid0IHVzZSBhbiBpbm5lciBwYWlyIG9mCisvLyBwYXJlbnRoZXNpcyB0byBoaWRlIHRoZSBjb21tYXMsIGJlY2F1c2UgImRlYnVnOjooVGVtcDxGb28sQmFyPikiIGlzbid0CisvLyBhIHZhbGlkIGluc3RhbnRpYXRpb24gcGF0dGVybi4gIFRodXMsIHdlIHN0ZWFsIGEgZmVhdHVyZSBmcm9tIEM5OS4KKworI2RlZmluZSBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9fZ251X2N4eDo6X19mdW5jdGlvbl9yZXF1aXJlczwgX19nbnVfY3h4OjpfX1ZBX0FSR1NfXyA+KCk7CisjZGVmaW5lIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfYSxfQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX0dMSUJDWFhfQ0xBU1NfUkVRVUlSRVMoX2EsIF9fZ251X2N4eCwgX0MpOworI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9hLF9iLF9DKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9HTElCQ1hYX0NMQVNTX1JFUVVJUkVTMihfYSwgX2IsIF9fZ251X2N4eCwgX0MpOworI2RlZmluZSBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9hLF9iLF9jLF9DKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9HTElCQ1hYX0NMQVNTX1JFUVVJUkVTMyhfYSwgX2IsIF9jLCBfX2dudV9jeHgsIF9DKTsKKyNkZWZpbmUgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzNChfYSxfYixfYyxfZCxfQykgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfR0xJQkNYWF9DTEFTU19SRVFVSVJFUzQoX2EsIF9iLCBfYywgX2QsIF9fZ251X2N4eCwgX0MpOworCisjZW5kaWYgLy8gZW5hYmxlL2Rpc2FibGUKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NPTkNFUFRfQ0hFQ0sKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jcHBfdHlwZV90cmFpdHMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jcHBfdHlwZV90cmFpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzAzYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2NwcF90eXBlX3RyYWl0cy5oCkBAIC0wLDAgKzEsNDI0IEBACisvLyBUaGUgIC0qLSBDKysgLSotIHR5cGUgdHJhaXRzIGNsYXNzZXMgZm9yIGludGVybmFsIHVzZSBpbiBsaWJzdGRjKysKKworLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvY3BwX3R5cGVfdHJhaXRzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtleHQvdHlwZV90cmFpdHN9CisgKi8KKworLy8gV3JpdHRlbiBieSBHYWJyaWVsIERvcyBSZWlzIDxkb3NyZWlzQGNtbGEuZW5zLWNhY2hhbi5mcj4KKworI2lmbmRlZiBfQ1BQX1RZUEVfVFJBSVRTX0gKKyNkZWZpbmUgX0NQUF9UWVBFX1RSQUlUU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworLy8KKy8vIFRoaXMgZmlsZSBwcm92aWRlcyBzb21lIGNvbXBpbGUtdGltZSBpbmZvcm1hdGlvbiBhYm91dCB2YXJpb3VzIHR5cGVzLgorLy8gVGhlc2UgcmVwcmVzZW50YXRpb25zIHdlcmUgZGVzaWduZWQsIG9uIHB1cnBvc2UsIHRvIGJlIGNvbnN0YW50LWV4cHJlc3Npb25zCisvLyBhbmQgbm90IHR5cGVzIGFzIGZvdW5kIGluIDxiaXRzL3R5cGVfdHJhaXRzLmg+LiAgSW4gcGFydGljdWxhciwgdGhleQorLy8gY2FuIGJlIHVzZWQgaW4gY29udHJvbCBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3B0aW1pemVyIGhvcGVmdWxseSB3aWxsIGRvCisvLyB0aGUgb2J2aW91cyB0aGluZy4KKy8vCisvLyBXaHkgaW50ZWdyYWwgZXhwcmVzc2lvbnMsIGFuZCBub3QgZnVuY3Rpb25zIG5vciB0eXBlcz8KKy8vIEZpcnN0bHksIHRoZXNlIGNvbXBpbGUtdGltZSBlbnRpdGllcyBhcmUgdXNlZCBhcyB0ZW1wbGF0ZS1hcmd1bWVudHMKKy8vIHNvIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMgd29uJ3Qgd29yazogIFdlIG5lZWQgY29tcGlsZS10aW1lIGVudGl0aWVzLgorLy8gV2UncmUgbGVmdCB3aXRoIHR5cGVzIGFuZCBjb25zdGFudCAgaW50ZWdyYWwgZXhwcmVzc2lvbnMuCisvLyBTZWNvbmRseSwgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiBlYXNlIG9mIHVzZSwgdHlwZS1iYXNlZCBjb21waWxlLXRpbWUKKy8vIGluZm9ybWF0aW9uIGlzIC1ub3QtICp0aGF0KiBjb252ZW5pZW50LiAgT24gaGFzIHRvIHdyaXRlIGxvdHMgb2YKKy8vIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGFuZCB0byBob3BlIHRoYXQgdGhlIGNvbXBpbGVyIHdpbGwgc2VsZWN0IHRoZSByaWdodAorLy8gb25lLiBBcyBhIG5ldCBlZmZlY3QsIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBpc24ndCB2ZXJ5IGNsZWFyIGF0IGZpcnN0CisvLyBnbGFuY2UuCisvLyBUaGlyZGx5LCBwYXJ0aWFsIG9yZGVyaW5nIGFuZCBvdmVybG9hZCByZXNvbHV0aW9uIChvZiBmdW5jdGlvbiB0ZW1wbGF0ZXMpCisvLyBpcyBoaWdobHkgY29zdGx5IGluIHRlcm1zIG9mIGNvbXBpbGVyLXJlc291cmNlLiAgSXQgaXMgYSBHb29kIFRoaW5nIHRvCisvLyBrZWVwIHRoZXNlIHJlc291cmNlIGNvbnN1bXB0aW9uIGFzIGxlYXN0IGFzIHBvc3NpYmxlLgorLy8KKy8vIFNlZSB2YWxhcnJheV9hcnJheS5oIGZvciBhIGNhc2UgdXNlLgorLy8KKy8vIC0tIEdhYnkgKGRvc3JlaXNAY21sYS5lbnMtY2FjaGFuLmZyKSAyMDAwLTAzLTA2LgorLy8KKy8vIFVwZGF0ZSAyMDA1OiB0eXBlcyBhcmUgYWxzbyBwcm92aWRlZCBhbmQgPGJpdHMvdHlwZV90cmFpdHMuaD4gaGFzIGJlZW4KKy8vIHJlbW92ZWQuCisvLworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIGhhY2ssIHNob3VsZCByZWFsbHkgaW5jbHVkZSB0aGlzIGZyb20gc29tZXdoZXJlLgorbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgc3RydWN0IF9fdHJ1ZV90eXBlIHsgfTsKKyAgc3RydWN0IF9fZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8Ym9vbD4KKyAgICBzdHJ1Y3QgX190cnV0aF90eXBlCisgICAgeyB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3RydXRoX3R5cGU8dHJ1ZT4KKyAgICB7IHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOyB9OworCisgIC8vIE4uQi4gVGhlIGNvbnZlcnNpb25zIHRvIGJvb2wgYXJlIG5lZWRlZCBkdWUgdG8gdGhlIGlzc3VlCisgIC8vIGV4cGxhaW5lZCBpbiBjKysvMTk0MDQuCisgIHRlbXBsYXRlPGNsYXNzIF9TcCwgY2xhc3MgX1RwPgorICAgIHN0cnVjdCBfX3RyYWl0b3IKKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IGJvb2woX1NwOjpfX3ZhbHVlKSB8fCBib29sKF9UcDo6X192YWx1ZSkgfTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cnV0aF90eXBlPF9fdmFsdWU+OjpfX3R5cGUgX190eXBlOworICAgIH07CisKKyAgLy8gQ29tcGFyZSBmb3IgZXF1YWxpdHkgb2YgdHlwZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19hcmVfc2FtZQorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FyZV9zYW1lPF9UcCwgX1RwPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLyBIb2xkcyBpZiB0aGUgdGVtcGxhdGUtYXJndW1lbnQgaXMgYSB2b2lkIHR5cGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc192b2lkCisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAwIH07CisgICAgICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfdm9pZDx2b2lkPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLworICAvLyBJbnRlZ2VyIHR5cGVzCisgIC8vCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyCisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAwIH07CisgICAgICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLyBUaGlydGVlbiBzcGVjaWFsaXphdGlvbnMgKHllcyB0aGVyZSBhcmUgZWxldmVuIHN0YW5kYXJkIGludGVnZXIKKyAgLy8gdHlwZXM7IDxlbT5sb25nIGxvbmc8L2VtPiBhbmQgPGVtPnVuc2lnbmVkIGxvbmcgbG9uZzwvZW0+IGFyZQorICAvLyBzdXBwb3J0ZWQgYXMgZXh0ZW5zaW9ucykKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Ym9vbD4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Y2hhcj4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8c2lnbmVkIGNoYXI+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHdjaGFyX3Q+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworIyBlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjxjaGFyMTZfdD4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Y2hhcjMyX3Q+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworI2VuZGlmCisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8c2hvcnQ+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjxpbnQ+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHVuc2lnbmVkIGludD4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8bG9uZz4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8bG9uZyBsb25nPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vCisgIC8vIEZsb2F0aW5nIHBvaW50IHR5cGVzCisgIC8vCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19mbG9hdGluZworICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgLy8gdGhyZWUgc3BlY2lhbGl6YXRpb25zIChmbG9hdCwgZG91YmxlIGFuZCAnbG9uZyBkb3VibGUnKQorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfZmxvYXRpbmc8ZmxvYXQ+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19mbG9hdGluZzxkb3VibGU+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19mbG9hdGluZzxsb25nIGRvdWJsZT4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgLy8KKyAgLy8gUG9pbnRlciB0eXBlcworICAvLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfcG9pbnRlcgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3BvaW50ZXI8X1RwKj4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgLy8KKyAgLy8gTm9ybWFsIGl0ZXJhdG9yIHR5cGUKKyAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX25vcm1hbF9pdGVyYXRvcgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIHN0cnVjdCBfX2lzX25vcm1hbF9pdGVyYXRvcjwgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsCisJCQkJCQkJICAgICAgX0NvbnRhaW5lcj4gPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLworICAvLyBBbiBhcml0aG1ldGljIHR5cGUgaXMgYW4gaW50ZWdlciB0eXBlIG9yIGEgZmxvYXRpbmcgcG9pbnQgdHlwZQorICAvLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfYXJpdGhtZXRpYworICAgIDogcHVibGljIF9fdHJhaXRvcjxfX2lzX2ludGVnZXI8X1RwPiwgX19pc19mbG9hdGluZzxfVHA+ID4KKyAgICB7IH07CisKKyAgLy8KKyAgLy8gQSBmdW5kYW1lbnRhbCB0eXBlIGlzIGB2b2lkJyBvciBhbmQgYXJpdGhtZXRpYyB0eXBlCisgIC8vCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19mdW5kYW1lbnRhbAorICAgIDogcHVibGljIF9fdHJhaXRvcjxfX2lzX3ZvaWQ8X1RwPiwgX19pc19hcml0aG1ldGljPF9UcD4gPgorICAgIHsgfTsKKworICAvLworICAvLyBBIHNjYWxhciB0eXBlIGlzIGFuIGFyaXRobWV0aWMgdHlwZSBvciBhIHBvaW50ZXIgdHlwZQorICAvLyAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3NjYWxhcgorICAgIDogcHVibGljIF9fdHJhaXRvcjxfX2lzX2FyaXRobWV0aWM8X1RwPiwgX19pc19wb2ludGVyPF9UcD4gPgorICAgIHsgfTsKKworICAvLworICAvLyBGb3IgdXNlIGluIHN0ZDo6Y29weSBhbmQgc3RkOjpmaW5kIG92ZXJsb2FkcyBmb3Igc3RyZWFtYnVmIGl0ZXJhdG9ycy4KKyAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2NoYXIKKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDAgfTsKKyAgICAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19jaGFyPGNoYXI+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2NoYXI8d2NoYXJfdD4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfYnl0ZQorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2J5dGU8Y2hhcj4KKyAgICB7CisgICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKKyAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2J5dGU8c2lnbmVkIGNoYXI+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19ieXRlPHVuc2lnbmVkIGNoYXI+CisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CisgICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vCisgIC8vIE1vdmUgaXRlcmF0b3IgdHlwZQorICAvLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbW92ZV9pdGVyYXRvcgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OworICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOworICAgIH07CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBjbGFzcyBtb3ZlX2l0ZXJhdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBzdHJ1Y3QgX19pc19tb3ZlX2l0ZXJhdG9yPCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4gPgorICAgIHsKKyAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OworICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CisgICAgfTsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvL19DUFBfVFlQRV9UUkFJVFNfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2N4eGFiaV9mb3JjZWQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jeHhhYmlfZm9yY2VkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhNjU4MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9jeHhhYmlfZm9yY2VkLmgKQEAgLTAsMCArMSw2MCBAQAorLy8gY3h4YWJpLmggc3Vic2V0IGZvciBjYW5jZWxsYXRpb24gLSotIEMrKyAtKi0KKyAgCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisvLworLy8gR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vIAorLy8gR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vIAorLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvY3h4YWJpX2ZvcmNlZC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7Y3h4YWJpLmh9CisgKi8KKworI2lmbmRlZiBfQ1hYQUJJX0ZPUkNFRF9ICisjZGVmaW5lIF9DWFhBQklfRk9SQ0VEX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorCisjaWZkZWYgX19jcGx1c3BsdXMKK25hbWVzcGFjZSBfX2N4eGFiaXYxCit7ICAKKyAgLyoqIAorICAgKiAgQGJyaWVmIFRocm93biBhcyBwYXJ0IG9mIGZvcmNlZCB1bndpbmRpbmcuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqCisgICAqICBBIG1hZ2ljIHBsYWNlaG9sZGVyIGNsYXNzIHRoYXQgY2FuIGJlIGNhdWdodCBieSByZWZlcmVuY2UgdG8KKyAgICogIHJlY29nbml6ZSBmb3JjZWQgdW53aW5kaW5nLgorICAgKi8KKyAgY2xhc3MgX19mb3JjZWRfdW53aW5kCisgIHsKKyAgICB2aXJ0dWFsIH5fX2ZvcmNlZF91bndpbmQoKSB0aHJvdygpOworCisgICAgLy8gUHJldmVudCBjYXRjaCBieSB2YWx1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgX19wdXJlX2R1bW15KCkgPSAwOyAKKyAgfTsKK30KKyNlbmRpZiAvLyBfX2NwbHVzcGx1cworCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorCisjZW5kaWYgLy8gX19DWFhBQklfRk9SQ0VEX0ggCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZGVxdWUudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2RlcXVlLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWM1ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2RlcXVlLnRjYwpAQCAtMCwwICsxLDEwNjggQEAKKy8vIERlcXVlIGltcGxlbWVudGF0aW9uIChvdXQgb2YgbGluZSkgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiaXRzL2RlcXVlLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2RlcXVlfQorICovCisKKyNpZm5kZWYgX0RFUVVFX1RDQworI2RlZmluZSBfREVRVUVfVENDIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9kZWZhdWx0X2luaXRpYWxpemUoKQorICAgIHsKKyAgICAgIF9NYXBfcG9pbnRlciBfX2N1cjsKKyAgICAgIF9fdHJ5CisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKF9fY3VyID0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlOworCSAgICAgICBfX2N1ciA8IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGU7CisJICAgICAgICsrX19jdXIpCisgICAgICAgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9kZWZhdWx0X2EoKl9fY3VyLCAqX19jdXIgKyBfU19idWZmZXJfc2l6ZSgpLAorCQkJCQkgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2RlZmF1bHRfYSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9maXJzdCwKKwkJCQkJIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1ciwKKwkJCQkJIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisgICAgICAgIH0KKyAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICB7CisgICAgICAgICAgc3RkOjpfRGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBpdGVyYXRvcigqX19jdXIsIF9fY3VyKSwKKwkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgZGVxdWU8X1RwLCBfQWxsb2M+JgorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3I9KGNvbnN0IGRlcXVlJiBfX3gpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOworICAgICAgaWYgKCZfX3ggIT0gdGhpcykKKwl7CisJICBpZiAoX19sZW4gPj0gX194LnNpemUoKSkKKwkgICAgX01fZXJhc2VfYXRfZW5kKHN0ZDo6Y29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLAorCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fbWlkID0gX194LmJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19sZW4pOworCSAgICAgIHN0ZDo6Y29weShfX3guYmVnaW4oKSwgX19taWQsIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOworCSAgICAgIGluc2VydCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwgX19taWQsIF9feC5lbmQoKSk7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHZvaWQKKyAgICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgICBlbXBsYWNlX2Zyb250KF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgeworCWlmICh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciAhPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2ZpcnN0KQorCSAgeworCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciAtIDEsCisJCQkJICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgIC0tdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXI7CisJICB9CisJZWxzZQorCSAgX01fcHVzaF9mcm9udF9hdXgoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHZvaWQKKyAgICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgICBlbXBsYWNlX2JhY2soX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cgorCSAgICAhPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW1wbC5jb25zdHJ1Y3QodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyLAorCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgICArK3RoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1cjsKKwkgIH0KKwllbHNlCisJICBfTV9wdXNoX2JhY2tfYXV4KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICB7CisgICAgICBpZiAoX19wb3NpdGlvbi5fTV9jdXIgPT0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIpCisJeworCSAgcHVzaF9mcm9udChfX3gpOworCSAgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7CisJfQorICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9jdXIgPT0gdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyKQorCXsKKwkgIHB1c2hfYmFjayhfX3gpOworCSAgaXRlcmF0b3IgX190bXAgPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwkgIC0tX190bXA7CisJICByZXR1cm4gX190bXA7CisJfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgICAgZW1wbGFjZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKwlpZiAoX19wb3NpdGlvbi5fTV9jdXIgPT0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIpCisJICB7CisJICAgIGVtcGxhY2VfZnJvbnQoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgICAgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7CisJICB9CisJZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9jdXIgPT0gdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyKQorCSAgeworCSAgICBlbXBsYWNlX2JhY2soc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgICAgaXRlcmF0b3IgX190bXAgPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwkgICAgLS1fX3RtcDsKKwkgICAgcmV0dXJuIF9fdG1wOworCSAgfQorCWVsc2UKKwkgIHJldHVybiBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICB7CisgICAgICBpdGVyYXRvciBfX25leHQgPSBfX3Bvc2l0aW9uOworICAgICAgKytfX25leHQ7CisgICAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19pbmRleCkgPCAoc2l6ZSgpID4+IDEpKQorCXsKKwkgIGlmIChfX3Bvc2l0aW9uICE9IGJlZ2luKCkpCisJICAgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKGJlZ2luKCksIF9fcG9zaXRpb24sIF9fbmV4dCk7CisJICBwb3BfZnJvbnQoKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKF9fbmV4dCAhPSBlbmQoKSkKKwkgICAgX0dMSUJDWFhfTU9WRTMoX19uZXh0LCBlbmQoKSwgX19wb3NpdGlvbik7CisJICBwb3BfYmFjaygpOworCX0KKyAgICAgIHJldHVybiBiZWdpbigpICsgX19pbmRleDsKKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGRlcXVlPF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fZmlyc3Q7CisgICAgICBlbHNlIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQorCXsKKwkgIGNsZWFyKCk7CisJICByZXR1cm4gZW5kKCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OworCSAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYmVmb3JlID0gX19maXJzdCAtIGJlZ2luKCk7CisJICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2VsZW1zX2JlZm9yZSkgPD0gKHNpemUoKSAtIF9fbikgLyAyKQorCSAgICB7CisJICAgICAgaWYgKF9fZmlyc3QgIT0gYmVnaW4oKSkKKwkJX0dMSUJDWFhfTU9WRV9CQUNLV0FSRDMoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0KTsKKwkgICAgICBfTV9lcmFzZV9hdF9iZWdpbihiZWdpbigpICsgX19uKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKF9fbGFzdCAhPSBlbmQoKSkKKwkJX0dMSUJDWFhfTU9WRTMoX19sYXN0LCBlbmQoKSwgX19maXJzdCk7CisJICAgICAgX01fZXJhc2VfYXRfZW5kKGVuZCgpIC0gX19uKTsKKwkgICAgfQorCSAgcmV0dXJuIGJlZ2luKCkgKyBfX2VsZW1zX2JlZm9yZTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKyAgICAgICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOworICAgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKKyAgICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKKyAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorICAgICAgICAgIF9NX2VyYXNlX2F0X2VuZChfX2N1cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgeworICAgICAgaWYgKF9fcG9zLl9NX2N1ciA9PSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1cikKKwl7CisJICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX2EoX19uZXdfc3RhcnQsIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQkJCSAgX194LCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX25ld19zdGFydDsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X3N0YXJ0Ll9NX25vZGUsCisJCQkgICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKF9fcG9zLl9NX2N1ciA9PSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIpCisJeworCSAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgIF9fbmV3X2ZpbmlzaCwgX194LAorCQkJCQkgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgX01fZGVzdHJveV9ub2Rlcyh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9ub2RlICsgMSwKKwkJCSAgICAgICBfX25ld19maW5pc2guX01fbm9kZSArIDEpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgICAgZWxzZQorICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zLCBfX24sIF9feCk7CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgX01fZGVmYXVsdF9hcHBlbmQoc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBpZiAoX19uKQorCXsKKwkgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOworCSAgX190cnkKKwkgICAgeworCSAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2RlZmF1bHRfYSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICAgICBfX25ld19maW5pc2gsCisJCQkJCSAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBfTV9kZXN0cm95X25vZGVzKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxLAorCQkJICAgICAgIF9fbmV3X2ZpbmlzaC5fTV9ub2RlICsgMSk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBib29sCisgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9zaHJpbmtfdG9fZml0KCkKKyAgICB7CisgICAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19mcm9udF9jYXBhY2l0eQorCT0gKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyIC0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9maXJzdCk7CisgICAgICBpZiAoX19mcm9udF9jYXBhY2l0eSA9PSAwKQorCXJldHVybiBmYWxzZTsKKworICAgICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fYmFja19jYXBhY2l0eQorCT0gKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2xhc3QgLSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIpOworICAgICAgaWYgKF9fZnJvbnRfY2FwYWNpdHkgKyBfX2JhY2tfY2FwYWNpdHkgPCBfU19idWZmZXJfc2l6ZSgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19zaHJpbmtfdG9fZml0X2F1eDxkZXF1ZT46Ol9TX2RvX2l0KCp0aGlzKTsKKyAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgX01fZmlsbF9pbml0aWFsaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgeworICAgICAgX01hcF9wb2ludGVyIF9fY3VyOworICAgICAgX190cnkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoX19jdXIgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGU7CisJICAgICAgIF9fY3VyIDwgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZTsKKwkgICAgICAgKytfX2N1cikKKyAgICAgICAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2ZpbGxfYSgqX19jdXIsICpfX2N1ciArIF9TX2J1ZmZlcl9zaXplKCksCisJCQkJCV9fdmFsdWUsIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisgICAgICAgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2ZpcnN0LAorCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2N1ciwKKwkJCQkgICAgICBfX3ZhbHVlLCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgICB9CisgICAgICBfX2NhdGNoKC4uLikKKyAgICAgICAgeworICAgICAgICAgIHN0ZDo6X0Rlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydCwgaXRlcmF0b3IoKl9fY3VyLCBfX2N1ciksCisJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgICAgICB9CisgICAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgICAgeworICAgICAgICB0aGlzLT5fTV9pbml0aWFsaXplX21hcCgwKTsKKyAgICAgICAgX190cnkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJICAgICAgZW1wbGFjZV9iYWNrKCpfX2ZpcnN0KTsKKyNlbHNlCisgICAgICAgICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CisjZW5kaWYKKyAgICAgICAgICB9CisgICAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgICAgdGhpcy0+X01faW5pdGlhbGl6ZV9tYXAoX19uKTsKKworICAgICAgICBfTWFwX3BvaW50ZXIgX19jdXJfbm9kZTsKKyAgICAgICAgX190cnkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmb3IgKF9fY3VyX25vZGUgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGU7CisgICAgICAgICAgICAgICAgIF9fY3VyX25vZGUgPCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9ub2RlOworICAgICAgICAgICAgICAgICArK19fY3VyX25vZGUpCisJICAgICAgeworCQlfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKKwkJc3RkOjphZHZhbmNlKF9fbWlkLCBfU19idWZmZXJfc2l6ZSgpKTsKKwkJc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9fZmlyc3QsIF9fbWlkLCAqX19jdXJfbm9kZSwKKwkJCQkJICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCV9fZmlyc3QgPSBfX21pZDsKKwkgICAgICB9CisgICAgICAgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX19maXJzdCwgX19sYXN0LAorCQkJCQl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9maXJzdCwKKwkJCQkJX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKyAgICAgICAgICB9CisgICAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6X0Rlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCSAgaXRlcmF0b3IoKl9fY3VyX25vZGUsIF9fY3VyX25vZGUpLAorCQkJICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICAgICAgfQorICAgICAgfQorCisgIC8vIENhbGxlZCBvbmx5IGlmIF9NX2ltcGwuX01fZmluaXNoLl9NX2N1ciA9PSBfTV9pbXBsLl9NX2ZpbmlzaC5fTV9sYXN0IC0gMS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX3B1c2hfYmFja19hdXgoX0FyZ3MmJi4uLiBfX2FyZ3MpCisjZWxzZQorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX3B1c2hfYmFja19hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQorI2VuZGlmCisgICAgICB7CisJX01fcmVzZXJ2ZV9tYXBfYXRfYmFjaygpOworCSoodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIDEpID0gdGhpcy0+X01fYWxsb2NhdGVfbm9kZSgpOworCV9fdHJ5CisJICB7CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIsCisJCQkJICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisjZWxzZQorCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIsIF9fdCk7CisjZW5kaWYKKwkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fc2V0X25vZGUodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZQorCQkJCQkJKyAxKTsKKwkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fZmlyc3Q7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxKSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorCisgIC8vIENhbGxlZCBvbmx5IGlmIF9NX2ltcGwuX01fc3RhcnQuX01fY3VyID09IF9NX2ltcGwuX01fc3RhcnQuX01fZmlyc3QuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHZvaWQKKyAgICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9wdXNoX2Zyb250X2F1eChfQXJncyYmLi4uIF9fYXJncykKKyNlbHNlCisgICAgICB2b2lkCisgICAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgICAgX01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQorI2VuZGlmCisgICAgICB7CisJX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQoKTsKKwkqKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fbm9kZSAtIDEpID0gdGhpcy0+X01fYWxsb2NhdGVfbm9kZSgpOworCV9fdHJ5CisJICB7CisJICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fc2V0X25vZGUodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlCisJCQkJCSAgICAgICAtIDEpOworCSAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fbGFzdCAtIDE7CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciwKKwkJCQkgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyNlbHNlCisJICAgIHRoaXMtPl9NX2ltcGwuY29uc3RydWN0KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyLCBfX3QpOworI2VuZGlmCisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgICsrdGhpcy0+X01faW1wbC5fTV9zdGFydDsKKwkgICAgX01fZGVhbGxvY2F0ZV9ub2RlKCoodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlIC0gMSkpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKworICAvLyBDYWxsZWQgb25seSBpZiBfTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIgPT0gX01faW1wbC5fTV9maW5pc2guX01fZmlyc3QuCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgX01fcG9wX2JhY2tfYXV4KCkKKyAgICB7CisgICAgICBfTV9kZWFsbG9jYXRlX25vZGUodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fZmlyc3QpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fc2V0X25vZGUodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSAtIDEpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbGFzdCAtIDE7CisgICAgICB0aGlzLT5fTV9pbXBsLmRlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyKTsKKyAgICB9CisKKyAgLy8gQ2FsbGVkIG9ubHkgaWYgX01faW1wbC5fTV9zdGFydC5fTV9jdXIgPT0gX01faW1wbC5fTV9zdGFydC5fTV9sYXN0IC0gMS4KKyAgLy8gTm90ZSB0aGF0IGlmIHRoZSBkZXF1ZSBoYXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQgKGEgcHJlY29uZGl0aW9uIGZvciB0aGlzCisgIC8vIG1lbWJlciBmdW5jdGlvbiksIGFuZCBpZgorICAvLyAgIF9NX2ltcGwuX01fc3RhcnQuX01fY3VyID09IF9NX2ltcGwuX01fc3RhcnQuX01fbGFzdCwKKyAgLy8gdGhlbiB0aGUgZGVxdWUgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBub2Rlcy4KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9wb3BfZnJvbnRfYXV4KCkKKyAgICB7CisgICAgICB0aGlzLT5fTV9pbXBsLmRlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIpOworICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fZmlyc3QpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9zZXRfbm9kZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUgKyAxKTsKKyAgICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyID0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9maXJzdDsKKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9yYW5nZV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgICAgeyBzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBzdGQ6Omluc2VydGVyKCp0aGlzLCBfX3BvcykpOyB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX3JhbmdlX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICAgIGlmIChfX3Bvcy5fTV9jdXIgPT0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIpCisJICB7CisJICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOworCSAgICBfX3RyeQorCSAgICAgIHsKKwkJc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfc3RhcnQsCisJCQkJCSAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQl0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CisJICAgICAgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7CisJCV9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwKKwkJCQkgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlKTsKKwkJX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgICAgfQorCSAgfQorICAgICAgICBlbHNlIGlmIChfX3Bvcy5fTV9jdXIgPT0gdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyKQorCSAgeworCSAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soX19uKTsKKwkgICAgX190cnkKKwkgICAgICB7CisJCXN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0LCBfX2xhc3QsCisJCQkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19uZXdfZmluaXNoOworCSAgICAgIH0KKwkgICAgX19jYXRjaCguLi4pCisJICAgICAgeworCQlfTV9kZXN0cm95X25vZGVzKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxLAorCQkJCSBfX25ld19maW5pc2guX01fbm9kZSArIDEpOworCQlfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgICB9CisJICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgeworCXZhbHVlX3R5cGUgX194X2NvcHkoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgLy8gWFhYIGNvcHkKKyNlbHNlCisgICAgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwl2YWx1ZV90eXBlIF9feF9jb3B5ID0gX194OyAvLyBYWFggY29weQorI2VuZGlmCisJZGlmZmVyZW5jZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7CisJaWYgKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19pbmRleCkgPCBzaXplKCkgLyAyKQorCSAgeworCSAgICBwdXNoX2Zyb250KF9HTElCQ1hYX01PVkUoZnJvbnQoKSkpOworCSAgICBpdGVyYXRvciBfX2Zyb250MSA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7CisJICAgICsrX19mcm9udDE7CisJICAgIGl0ZXJhdG9yIF9fZnJvbnQyID0gX19mcm9udDE7CisJICAgICsrX19mcm9udDI7CisJICAgIF9fcG9zID0gdGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9faW5kZXg7CisJICAgIGl0ZXJhdG9yIF9fcG9zMSA9IF9fcG9zOworCSAgICArK19fcG9zMTsKKwkgICAgX0dMSUJDWFhfTU9WRTMoX19mcm9udDIsIF9fcG9zMSwgX19mcm9udDEpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgcHVzaF9iYWNrKF9HTElCQ1hYX01PVkUoYmFjaygpKSk7CisJICAgIGl0ZXJhdG9yIF9fYmFjazEgPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwkgICAgLS1fX2JhY2sxOworCSAgICBpdGVyYXRvciBfX2JhY2syID0gX19iYWNrMTsKKwkgICAgLS1fX2JhY2syOworCSAgICBfX3BvcyA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX2luZGV4OworCSAgICBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7CisJICB9CisJKl9fcG9zID0gX0dMSUJDWFhfTU9WRShfX3hfY29weSk7CisJcmV0dXJuIF9fcG9zOworICAgICAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgeworICAgICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYmVmb3JlID0gX19wb3MgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgpOworICAgICAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKKyAgICAgIGlmIChfX2VsZW1zX2JlZm9yZSA8IGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCAvIDIpKQorCXsKKwkgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOworCSAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworCSAgX19wb3MgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ICsgX19lbGVtc19iZWZvcmU7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgaWYgKF9fZWxlbXNfYmVmb3JlID49IGRpZmZlcmVuY2VfdHlwZShfX24pKQorCQl7CisJCSAgaXRlcmF0b3IgX19zdGFydF9uID0gKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQKKwkJCQkJKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQkJCSAgICAgIF9fc3RhcnRfbiwgX19uZXdfc3RhcnQsCisJCQkJCSAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCQkgIF9HTElCQ1hYX01PVkUzKF9fc3RhcnRfbiwgX19wb3MsIF9fb2xkX3N0YXJ0KTsKKwkJICBzdGQ6OmZpbGwoX19wb3MgLSBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX19wb3MsIF9feF9jb3B5KTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfZmlsbCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJIF9fcG9zLCBfX25ld19zdGFydCwKKwkJCQkJCSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJIF9feF9jb3B5LAorCQkJCQkJIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCQkgIHN0ZDo6ZmlsbChfX29sZF9zdGFydCwgX19wb3MsIF9feF9jb3B5KTsKKwkJfQorCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwKKwkJCSAgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOworCSAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7CisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc19hZnRlciA9CisJICAgIGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zX2JlZm9yZTsKKwkgIF9fcG9zID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSBfX2VsZW1zX2FmdGVyOworCSAgX190cnkKKwkgICAgeworCSAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikpCisJCXsKKwkJICBpdGVyYXRvciBfX2ZpbmlzaF9uID0gKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoCisJCQkJCSAtIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EoX19maW5pc2hfbiwKKwkJCQkJICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19uZXdfZmluaXNoOworCQkgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fcG9zLCBfX2ZpbmlzaF9uLCBfX29sZF9maW5pc2gpOworCQkgIHN0ZDo6ZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194X2NvcHkpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9tb3ZlKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkJIF9fcG9zICsgZGlmZmVyZW5jZV90eXBlKF9fbiksCisJCQkJCQkgX194X2NvcHksIF9fcG9zLAorCQkJCQkJIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkJIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CisJCSAgc3RkOjpmaWxsKF9fcG9zLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKKwkJfQorCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9NX2Rlc3Ryb3lfbm9kZXModGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIDEsCisJCQkgICAgICAgX19uZXdfZmluaXNoLl9NX25vZGUgKyAxKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsCisgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pCisgICAgICB7CisgICAgICAgIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zYmVmb3JlID0gX19wb3MgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworICAgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW5ndGggPSBzaXplKCk7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fZWxlbXNiZWZvcmUpIDwgX19sZW5ndGggLyAyKQorCSAgeworCSAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsKKwkgICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OworCSAgICBfX3BvcyA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX2VsZW1zYmVmb3JlOworCSAgICBfX3RyeQorCSAgICAgIHsKKwkJaWYgKF9fZWxlbXNiZWZvcmUgPj0gZGlmZmVyZW5jZV90eXBlKF9fbikpCisJCSAgeworCQkgICAgaXRlcmF0b3IgX19zdGFydF9uID0gKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQKKwkJCQkJICArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkJICAgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJX19zdGFydF9uLCBfX25ld19zdGFydCwKKwkJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CisJCSAgICBfR0xJQkNYWF9NT1ZFMyhfX3N0YXJ0X24sIF9fcG9zLCBfX29sZF9zdGFydCk7CisJCSAgICBzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3BvcyAtIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKKwkJICAgIHN0ZDo6YWR2YW5jZShfX21pZCwgZGlmZmVyZW5jZV90eXBlKF9fbikgLSBfX2VsZW1zYmVmb3JlKTsKKwkJICAgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfY29weSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCQkJICAgX19wb3MsIF9fZmlyc3QsIF9fbWlkLAorCQkJCQkJICAgX19uZXdfc3RhcnQsCisJCQkJCQkgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCQkgICAgc3RkOjpjb3B5KF9fbWlkLCBfX2xhc3QsIF9fb2xkX3N0YXJ0KTsKKwkJICB9CisJICAgICAgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7CisJCV9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwKKwkJCQkgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlKTsKKwkJX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgICAgfQorCSAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2JhY2soX19uKTsKKyAgICAgICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKyAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc2FmdGVyID0KKyAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zYmVmb3JlOworICAgICAgICAgIF9fcG9zID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSBfX2VsZW1zYWZ0ZXI7CisgICAgICAgICAgX190cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKF9fZWxlbXNhZnRlciA+IGRpZmZlcmVuY2VfdHlwZShfX24pKQorCQl7CisJCSAgaXRlcmF0b3IgX19maW5pc2hfbiA9ICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaAorCQkJCQkgLSBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fZmluaXNoX24sCisJCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKKwkJICBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfX3BvcywgX19maW5pc2hfbiwgX19vbGRfZmluaXNoKTsKKwkJICBzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvcyk7CisJCX0KKyAgICAgICAgICAgICAgZWxzZQorCQl7CisJCSAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CisJCSAgc3RkOjphZHZhbmNlKF9fbWlkLCBfX2VsZW1zYWZ0ZXIpOworCQkgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfbW92ZShfX21pZCwgX19sYXN0LCBfX3BvcywKKwkJCQkJCSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJCSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJCSBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19uZXdfZmluaXNoOworCQkgIHN0ZDo6Y29weShfX2ZpcnN0LCBfX21pZCwgX19wb3MpOworCQl9CisgICAgICAgICAgICB9CisgICAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9NX2Rlc3Ryb3lfbm9kZXModGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIDEsCisJCQkgICAgICAgX19uZXdfZmluaXNoLl9NX25vZGUgKyAxKTsKKyAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgIHZvaWQKKyAgICAgZGVxdWU8X1RwLCBfQWxsb2M+OjoKKyAgICAgX01fZGVzdHJveV9kYXRhX2F1eChpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgIHsKKyAgICAgICBmb3IgKF9NYXBfcG9pbnRlciBfX25vZGUgPSBfX2ZpcnN0Ll9NX25vZGUgKyAxOworCSAgICBfX25vZGUgPCBfX2xhc3QuX01fbm9kZTsgKytfX25vZGUpCisJIHN0ZDo6X0Rlc3Ryb3koKl9fbm9kZSwgKl9fbm9kZSArIF9TX2J1ZmZlcl9zaXplKCksCisJCSAgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCisgICAgICAgaWYgKF9fZmlyc3QuX01fbm9kZSAhPSBfX2xhc3QuX01fbm9kZSkKKwkgeworCSAgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdC5fTV9jdXIsIF9fZmlyc3QuX01fbGFzdCwKKwkJCSBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgIHN0ZDo6X0Rlc3Ryb3koX19sYXN0Ll9NX2ZpcnN0LCBfX2xhc3QuX01fY3VyLAorCQkJIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJIH0KKyAgICAgICBlbHNlCisJIHN0ZDo6X0Rlc3Ryb3koX19maXJzdC5fTV9jdXIsIF9fbGFzdC5fTV9jdXIsCisJCSAgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX25ld19lbGVtZW50c19hdF9mcm9udChzaXplX3R5cGUgX19uZXdfZWxlbXMpCisgICAgeworICAgICAgaWYgKHRoaXMtPm1heF9zaXplKCkgLSB0aGlzLT5zaXplKCkgPCBfX25ld19lbGVtcykKKwlfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oImRlcXVlOjpfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQiKSk7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19ub2RlcyA9ICgoX19uZXdfZWxlbXMgKyBfU19idWZmZXJfc2l6ZSgpIC0gMSkKKwkJCQkgICAgIC8gX1NfYnVmZmVyX3NpemUoKSk7CisgICAgICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udChfX25ld19ub2Rlcyk7CisgICAgICBzaXplX3R5cGUgX19pOworICAgICAgX190cnkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoX19pID0gMTsgX19pIDw9IF9fbmV3X25vZGVzOyArK19faSkKKyAgICAgICAgICAgICoodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlIC0gX19pKSA9IHRoaXMtPl9NX2FsbG9jYXRlX25vZGUoKTsKKyAgICAgICAgfQorICAgICAgX19jYXRjaCguLi4pCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKHNpemVfdHlwZSBfX2ogPSAxOyBfX2ogPCBfX2k7ICsrX19qKQorICAgICAgICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKCoodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlIC0gX19qKSk7CisgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICAgIH0KKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBkZXF1ZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX25ld19lbGVtZW50c19hdF9iYWNrKHNpemVfdHlwZSBfX25ld19lbGVtcykKKyAgICB7CisgICAgICBpZiAodGhpcy0+bWF4X3NpemUoKSAtIHRoaXMtPnNpemUoKSA8IF9fbmV3X2VsZW1zKQorCV9fdGhyb3dfbGVuZ3RoX2Vycm9yKF9fTigiZGVxdWU6Ol9NX25ld19lbGVtZW50c19hdF9iYWNrIikpOworCisgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfbm9kZXMgPSAoKF9fbmV3X2VsZW1zICsgX1NfYnVmZmVyX3NpemUoKSAtIDEpCisJCQkJICAgICAvIF9TX2J1ZmZlcl9zaXplKCkpOworICAgICAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjayhfX25ld19ub2Rlcyk7CisgICAgICBzaXplX3R5cGUgX19pOworICAgICAgX190cnkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoX19pID0gMTsgX19pIDw9IF9fbmV3X25vZGVzOyArK19faSkKKyAgICAgICAgICAgICoodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIF9faSkgPSB0aGlzLT5fTV9hbGxvY2F0ZV9ub2RlKCk7CisgICAgICAgIH0KKyAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMTsgX19qIDwgX19pOyArK19faikKKyAgICAgICAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyBfX2opKTsKKyAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICAgICAgfQorICAgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGRlcXVlPF9UcCwgX0FsbG9jPjo6CisgICAgX01fcmVhbGxvY2F0ZV9tYXAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkLCBib29sIF9fYWRkX2F0X2Zyb250KQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9udW1fbm9kZXMKKwk9IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUgKyAxOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X251bV9ub2RlcyA9IF9fb2xkX251bV9ub2RlcyArIF9fbm9kZXNfdG9fYWRkOworCisgICAgICBfTWFwX3BvaW50ZXIgX19uZXdfbnN0YXJ0OworICAgICAgaWYgKHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKQorCXsKKwkgIF9fbmV3X25zdGFydCA9IHRoaXMtPl9NX2ltcGwuX01fbWFwICsgKHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUKKwkJCQkJIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKKwkgICAgICAgICAgICAgICAgICsgKF9fYWRkX2F0X2Zyb250ID8gX19ub2Rlc190b19hZGQgOiAwKTsKKwkgIGlmIChfX25ld19uc3RhcnQgPCB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUpCisJICAgIHN0ZDo6Y29weSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUsCisJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxLAorCQkgICAgICBfX25ld19uc3RhcnQpOworCSAgZWxzZQorCSAgICBzdGQ6OmNvcHlfYmFja3dhcmQodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlLAorCQkJICAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxLAorCQkJICAgICAgIF9fbmV3X25zdGFydCArIF9fb2xkX251bV9ub2Rlcyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHNpemVfdHlwZSBfX25ld19tYXBfc2l6ZSA9IHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc3RkOjptYXgodGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSwKKwkJCQkJCV9fbm9kZXNfdG9fYWRkKSArIDI7CisKKwkgIF9NYXBfcG9pbnRlciBfX25ld19tYXAgPSB0aGlzLT5fTV9hbGxvY2F0ZV9tYXAoX19uZXdfbWFwX3NpemUpOworCSAgX19uZXdfbnN0YXJ0ID0gX19uZXdfbWFwICsgKF9fbmV3X21hcF9zaXplIC0gX19uZXdfbnVtX25vZGVzKSAvIDIKKwkgICAgICAgICAgICAgICAgICsgKF9fYWRkX2F0X2Zyb250ID8gX19ub2Rlc190b19hZGQgOiAwKTsKKwkgIHN0ZDo6Y29weSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUsCisJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9ub2RlICsgMSwKKwkJICAgIF9fbmV3X25zdGFydCk7CisJICBfTV9kZWFsbG9jYXRlX21hcCh0aGlzLT5fTV9pbXBsLl9NX21hcCwgdGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSk7CisKKwkgIHRoaXMtPl9NX2ltcGwuX01fbWFwID0gX19uZXdfbWFwOworCSAgdGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSA9IF9fbmV3X21hcF9zaXplOworCX0KKworICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9zZXRfbm9kZShfX25ld19uc3RhcnQpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19vbGRfbnVtX25vZGVzIC0gMSk7CisgICAgfQorCisgIC8vIE92ZXJsb2FkIGZvciBkZXF1ZTo6aXRlcmF0b3JzLCBleHBsb2l0aW5nIHRoZSAic2VnbWVudGVkLWl0ZXJhdG9yCisgIC8vIG9wdGltaXphdGlvbiIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgZmlsbChjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiYgX19maXJzdCwKKwkgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4mIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj46Ol9TZWxmIF9TZWxmOworCisgICAgICBmb3IgKHR5cGVuYW1lIF9TZWxmOjpfTWFwX3BvaW50ZXIgX19ub2RlID0gX19maXJzdC5fTV9ub2RlICsgMTsKKyAgICAgICAgICAgX19ub2RlIDwgX19sYXN0Ll9NX25vZGU7ICsrX19ub2RlKQorCXN0ZDo6ZmlsbCgqX19ub2RlLCAqX19ub2RlICsgX1NlbGY6Ol9TX2J1ZmZlcl9zaXplKCksIF9fdmFsdWUpOworCisgICAgICBpZiAoX19maXJzdC5fTV9ub2RlICE9IF9fbGFzdC5fTV9ub2RlKQorCXsKKwkgIHN0ZDo6ZmlsbChfX2ZpcnN0Ll9NX2N1ciwgX19maXJzdC5fTV9sYXN0LCBfX3ZhbHVlKTsKKwkgIHN0ZDo6ZmlsbChfX2xhc3QuX01fZmlyc3QsIF9fbGFzdC5fTV9jdXIsIF9fdmFsdWUpOworCX0KKyAgICAgIGVsc2UKKwlzdGQ6OmZpbGwoX19maXJzdC5fTV9jdXIsIF9fbGFzdC5fTV9jdXIsIF9fdmFsdWUpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBjb3B5KF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fZmlyc3QsCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fbGFzdCwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPjo6X1NlbGYgX1NlbGY7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZWxmOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICBkaWZmZXJlbmNlX3R5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgICAgd2hpbGUgKF9fbGVuID4gMCkKKwl7CisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19jbGVuCisJICAgID0gc3RkOjptaW4oX19sZW4sIHN0ZDo6bWluKF9fZmlyc3QuX01fbGFzdCAtIF9fZmlyc3QuX01fY3VyLAorCQkJCSAgICAgICBfX3Jlc3VsdC5fTV9sYXN0IC0gX19yZXN1bHQuX01fY3VyKSk7CisJICBzdGQ6OmNvcHkoX19maXJzdC5fTV9jdXIsIF9fZmlyc3QuX01fY3VyICsgX19jbGVuLCBfX3Jlc3VsdC5fTV9jdXIpOworCSAgX19maXJzdCArPSBfX2NsZW47CisJICBfX3Jlc3VsdCArPSBfX2NsZW47CisJICBfX2xlbiAtPSBfX2NsZW47CisJfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBjb3B5X2JhY2t3YXJkKF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IF9fZmlyc3QsCisJCSAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gX19sYXN0LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj46Ol9TZWxmIF9TZWxmOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VsZjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKKyAgICAgIHdoaWxlIChfX2xlbiA+IDApCisJeworCSAgZGlmZmVyZW5jZV90eXBlIF9fbGxlbiA9IF9fbGFzdC5fTV9jdXIgLSBfX2xhc3QuX01fZmlyc3Q7CisJICBfVHAqIF9fbGVuZCA9IF9fbGFzdC5fTV9jdXI7CisKKwkgIGRpZmZlcmVuY2VfdHlwZSBfX3JsZW4gPSBfX3Jlc3VsdC5fTV9jdXIgLSBfX3Jlc3VsdC5fTV9maXJzdDsKKwkgIF9UcCogX19yZW5kID0gX19yZXN1bHQuX01fY3VyOworCisJICBpZiAoIV9fbGxlbikKKwkgICAgeworCSAgICAgIF9fbGxlbiA9IF9TZWxmOjpfU19idWZmZXJfc2l6ZSgpOworCSAgICAgIF9fbGVuZCA9ICooX19sYXN0Ll9NX25vZGUgLSAxKSArIF9fbGxlbjsKKwkgICAgfQorCSAgaWYgKCFfX3JsZW4pCisJICAgIHsKKwkgICAgICBfX3JsZW4gPSBfU2VsZjo6X1NfYnVmZmVyX3NpemUoKTsKKwkgICAgICBfX3JlbmQgPSAqKF9fcmVzdWx0Ll9NX25vZGUgLSAxKSArIF9fcmxlbjsKKwkgICAgfQorCisJICBjb25zdCBkaWZmZXJlbmNlX3R5cGUgX19jbGVuID0gc3RkOjptaW4oX19sZW4sCisJCQkJCQkgIHN0ZDo6bWluKF9fbGxlbiwgX19ybGVuKSk7CisJICBzdGQ6OmNvcHlfYmFja3dhcmQoX19sZW5kIC0gX19jbGVuLCBfX2xlbmQsIF9fcmVuZCk7CisJICBfX2xhc3QgLT0gX19jbGVuOworCSAgX19yZXN1bHQgLT0gX19jbGVuOworCSAgX19sZW4gLT0gX19jbGVuOworCX0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPgorICAgIG1vdmUoX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gX19maXJzdCwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gX19sYXN0LAorCSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX3Jlc3VsdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+OjpfU2VsZiBfU2VsZjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlbGY6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICB3aGlsZSAoX19sZW4gPiAwKQorCXsKKwkgIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2NsZW4KKwkgICAgPSBzdGQ6Om1pbihfX2xlbiwgc3RkOjptaW4oX19maXJzdC5fTV9sYXN0IC0gX19maXJzdC5fTV9jdXIsCisJCQkJICAgICAgIF9fcmVzdWx0Ll9NX2xhc3QgLSBfX3Jlc3VsdC5fTV9jdXIpKTsKKwkgIHN0ZDo6bW92ZShfX2ZpcnN0Ll9NX2N1ciwgX19maXJzdC5fTV9jdXIgKyBfX2NsZW4sIF9fcmVzdWx0Ll9NX2N1cik7CisJICBfX2ZpcnN0ICs9IF9fY2xlbjsKKwkgIF9fcmVzdWx0ICs9IF9fY2xlbjsKKwkgIF9fbGVuIC09IF9fY2xlbjsKKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPgorICAgIG1vdmVfYmFja3dhcmQoX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gX19maXJzdCwKKwkJICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBfX2xhc3QsCisJCSAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPjo6X1NlbGYgX1NlbGY7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZWxmOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICBkaWZmZXJlbmNlX3R5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgICAgd2hpbGUgKF9fbGVuID4gMCkKKwl7CisJICBkaWZmZXJlbmNlX3R5cGUgX19sbGVuID0gX19sYXN0Ll9NX2N1ciAtIF9fbGFzdC5fTV9maXJzdDsKKwkgIF9UcCogX19sZW5kID0gX19sYXN0Ll9NX2N1cjsKKworCSAgZGlmZmVyZW5jZV90eXBlIF9fcmxlbiA9IF9fcmVzdWx0Ll9NX2N1ciAtIF9fcmVzdWx0Ll9NX2ZpcnN0OworCSAgX1RwKiBfX3JlbmQgPSBfX3Jlc3VsdC5fTV9jdXI7CisKKwkgIGlmICghX19sbGVuKQorCSAgICB7CisJICAgICAgX19sbGVuID0gX1NlbGY6Ol9TX2J1ZmZlcl9zaXplKCk7CisJICAgICAgX19sZW5kID0gKihfX2xhc3QuX01fbm9kZSAtIDEpICsgX19sbGVuOworCSAgICB9CisJICBpZiAoIV9fcmxlbikKKwkgICAgeworCSAgICAgIF9fcmxlbiA9IF9TZWxmOjpfU19idWZmZXJfc2l6ZSgpOworCSAgICAgIF9fcmVuZCA9ICooX19yZXN1bHQuX01fbm9kZSAtIDEpICsgX19ybGVuOworCSAgICB9CisKKwkgIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2NsZW4gPSBzdGQ6Om1pbihfX2xlbiwKKwkJCQkJCSAgc3RkOjptaW4oX19sbGVuLCBfX3JsZW4pKTsKKwkgIHN0ZDo6bW92ZV9iYWNrd2FyZChfX2xlbmQgLSBfX2NsZW4sIF9fbGVuZCwgX19yZW5kKTsKKwkgIF9fbGFzdCAtPSBfX2NsZW47CisJICBfX3Jlc3VsdCAtPSBfX2NsZW47CisJICBfX2xlbiAtPSBfX2NsZW47CisJfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2V4Y2VwdGlvbl9kZWZpbmVzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZXhjZXB0aW9uX2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDJhMmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2V4Y2VwdGlvbl9kZWZpbmVzLmgKQEAgLTAsMCArMSw0NSBAQAorLy8gLWZuby1leGNlcHRpb25zIFN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvZXhjZXB0aW9uX2RlZmluZXMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2V4Y2VwdGlvbn0KKyAqLworCisjaWZuZGVmIF9FWENFUFRJT05fREVGSU5FU19ICisjZGVmaW5lIF9FWENFUFRJT05fREVGSU5FU19IIDEKKworI2lmbmRlZiBfX0VYQ0VQVElPTlMKKy8vIElmZiAtZm5vLWV4Y2VwdGlvbnMsIHRyYW5zZm9ybSBlcnJvciBoYW5kbGluZyBjb2RlIHRvIHdvcmsgd2l0aG91dCBpdC4KKyMgZGVmaW5lIF9fdHJ5ICAgICAgaWYgKHRydWUpCisjIGRlZmluZSBfX2NhdGNoKFgpIGlmIChmYWxzZSkKKyMgZGVmaW5lIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluCisjZWxzZQorLy8gRWxzZSBwcm9jZWVkIG5vcm1hbGx5LgorIyBkZWZpbmUgX190cnkgICAgICB0cnkKKyMgZGVmaW5lIF9fY2F0Y2goWCkgY2F0Y2goWCkKKyMgZGVmaW5lIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluIHRocm93CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZXhjZXB0aW9uX3B0ci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2V4Y2VwdGlvbl9wdHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmY4Zjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2V4Y2VwdGlvbl9wdHIuaApAQCAtMCwwICsxLDE5OCBAQAorLy8gRXhjZXB0aW9uIEhhbmRsaW5nIHN1cHBvcnQgaGVhZGVyIChleGNlcHRpb25fcHRyIGNsYXNzKSBmb3IgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorLy8KKy8vIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLyAKKy8vIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLyAKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2V4Y2VwdGlvbl9wdHIuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2V4Y2VwdGlvbn0KKyAqLworCisjaWZuZGVmIF9FWENFUFRJT05fUFRSX0gKKyNkZWZpbmUgX0VYQ0VQVElPTl9QVFJfSAorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9leGNlcHRpb25fZGVmaW5lcy5oPgorCisjaWYgQVRPTUlDX0lOVF9MT0NLX0ZSRUUgPCAyCisjICBlcnJvciBUaGlzIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgZXhjZXB0aW9uIHByb3BhZ2F0aW9uLgorI2VuZGlmCisKK2V4dGVybiAiQysrIiB7CisKK25hbWVzcGFjZSBzdGQgCit7CisgIGNsYXNzIHR5cGVfaW5mbzsKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgZXhjZXB0aW9ucworICAgKiBAeworICAgKi8KKyAgbmFtZXNwYWNlIF9fZXhjZXB0aW9uX3B0cgorICB7CisgICAgY2xhc3MgZXhjZXB0aW9uX3B0cjsKKyAgfQorCisgIHVzaW5nIF9fZXhjZXB0aW9uX3B0cjo6ZXhjZXB0aW9uX3B0cjsKKworICAvKiogT2J0YWluIGFuIGV4Y2VwdGlvbl9wdHIgdG8gdGhlIGN1cnJlbnRseSBoYW5kbGVkIGV4Y2VwdGlvbi4gSWYgdGhlcmUKKyAgICogIGlzIG5vbmUsIG9yIHRoZSBjdXJyZW50bHkgaGFuZGxlZCBleGNlcHRpb24gaXMgZm9yZWlnbiwgcmV0dXJuIHRoZSBudWxsCisgICAqICB2YWx1ZS4KKyAgICovCisgIGV4Y2VwdGlvbl9wdHIgY3VycmVudF9leGNlcHRpb24oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyAgLy8vIFRocm93IHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgZXhjZXB0aW9uX3B0ci4KKyAgdm9pZCByZXRocm93X2V4Y2VwdGlvbihleGNlcHRpb25fcHRyKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKyAgbmFtZXNwYWNlIF9fZXhjZXB0aW9uX3B0cgorICB7CisgICAgLyoqCisgICAgICogIEBicmllZiBBbiBvcGFxdWUgcG9pbnRlciB0byBhbiBhcmJpdHJhcnkgZXhjZXB0aW9uLgorICAgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAgICovCisgICAgY2xhc3MgZXhjZXB0aW9uX3B0cgorICAgIHsKKyAgICAgIHZvaWQqIF9NX2V4Y2VwdGlvbl9vYmplY3Q7CisKKyAgICAgIGV4cGxpY2l0IGV4Y2VwdGlvbl9wdHIodm9pZCogX19lKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyAgICAgIHZvaWQgX01fYWRkcmVmKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworICAgICAgdm9pZCBfTV9yZWxlYXNlKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworCisgICAgICB2b2lkICpfTV9nZXQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVCBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKKworICAgICAgZnJpZW5kIGV4Y2VwdGlvbl9wdHIgc3RkOjpjdXJyZW50X2V4Y2VwdGlvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgICAgIGZyaWVuZCB2b2lkIHN0ZDo6cmV0aHJvd19leGNlcHRpb24oZXhjZXB0aW9uX3B0cik7CisKKyAgICBwdWJsaWM6CisgICAgICBleGNlcHRpb25fcHRyKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworCisgICAgICBleGNlcHRpb25fcHRyKGNvbnN0IGV4Y2VwdGlvbl9wdHImKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBleGNlcHRpb25fcHRyKG51bGxwdHJfdCkgbm9leGNlcHQKKyAgICAgIDogX01fZXhjZXB0aW9uX29iamVjdCgwKQorICAgICAgeyB9CisKKyAgICAgIGV4Y2VwdGlvbl9wdHIoZXhjZXB0aW9uX3B0ciYmIF9fbykgbm9leGNlcHQKKyAgICAgIDogX01fZXhjZXB0aW9uX29iamVjdChfX28uX01fZXhjZXB0aW9uX29iamVjdCkKKyAgICAgIHsgX19vLl9NX2V4Y2VwdGlvbl9vYmplY3QgPSAwOyB9CisjZW5kaWYKKworI2lmIChfX2NwbHVzcGx1cyA8IDIwMTEwM0wpIHx8IGRlZmluZWQgKF9HTElCQ1hYX0VIX1BUUl9DT01QQVQpCisgICAgICB0eXBlZGVmIHZvaWQgKGV4Y2VwdGlvbl9wdHI6OipfX3NhZmVfYm9vbCkoKTsKKworICAgICAgLy8gRm9yIGNvbnN0cnVjdGlvbiBmcm9tIG51bGxwdHIgb3IgMC4KKyAgICAgIGV4Y2VwdGlvbl9wdHIoX19zYWZlX2Jvb2wpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyNlbmRpZgorCisgICAgICBleGNlcHRpb25fcHRyJiAKKyAgICAgIG9wZXJhdG9yPShjb25zdCBleGNlcHRpb25fcHRyJikgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgZXhjZXB0aW9uX3B0ciYgCisgICAgICBvcGVyYXRvcj0oZXhjZXB0aW9uX3B0ciYmIF9fbykgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgZXhjZXB0aW9uX3B0cihzdGF0aWNfY2FzdDxleGNlcHRpb25fcHRyJiY+KF9fbykpLnN3YXAoKnRoaXMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgfmV4Y2VwdGlvbl9wdHIoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyAgICAgIHZvaWQgCisgICAgICBzd2FwKGV4Y2VwdGlvbl9wdHImKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyNpZmRlZiBfR0xJQkNYWF9FSF9QVFJfQ09NUEFUCisgICAgICAvLyBSZXRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIENYWEFCSV8xLjMuCisgICAgICB2b2lkIF9NX3NhZmVfYm9vbF9kdW1teSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorCV9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKyAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisJX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CisgICAgICBvcGVyYXRvciBfX3NhZmVfYm9vbCgpIGNvbnN0IF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leGNlcHRpb25fb2JqZWN0OyB9CisjZW5kaWYKKworICAgICAgZnJpZW5kIGJvb2wgCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGV4Y2VwdGlvbl9wdHImLCBjb25zdCBleGNlcHRpb25fcHRyJikKKwlfR0xJQkNYWF9VU0VfTk9FWENFUFQgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CisKKyAgICAgIGNvbnN0IGNsYXNzIHN0ZDo6dHlwZV9pbmZvKgorICAgICAgX19jeGFfZXhjZXB0aW9uX3R5cGUoKSBjb25zdCBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKwlfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKKyAgICB9OworCisgICAgYm9vbCAKKyAgICBvcGVyYXRvcj09KGNvbnN0IGV4Y2VwdGlvbl9wdHImLCBjb25zdCBleGNlcHRpb25fcHRyJikKKyAgICAgIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKKworICAgIGJvb2wgCisgICAgb3BlcmF0b3IhPShjb25zdCBleGNlcHRpb25fcHRyJiwgY29uc3QgZXhjZXB0aW9uX3B0ciYpCisgICAgICBfR0xJQkNYWF9VU0VfTk9FWENFUFQgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoZXhjZXB0aW9uX3B0ciYgX19saHMsIGV4Y2VwdGlvbl9wdHImIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworICB9IC8vIG5hbWVzcGFjZSBfX2V4Y2VwdGlvbl9wdHIKKworCisgIC8vLyBPYnRhaW4gYW4gZXhjZXB0aW9uX3B0ciBwb2ludGluZyB0byBhIGNvcHkgb2YgdGhlIHN1cHBsaWVkIG9iamVjdC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V4PgorICAgIGV4Y2VwdGlvbl9wdHIgCisgICAgY29weV9leGNlcHRpb24oX0V4IF9fZXgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgIHsKKyAgICAgIF9fdHJ5CisJeworI2lmZGVmIF9fRVhDRVBUSU9OUworCSAgdGhyb3cgX19leDsKKyNlbmRpZgorCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHJldHVybiBjdXJyZW50X2V4Y2VwdGlvbigpOworCX0KKyAgICB9CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyAxMTMwLiBjb3B5X2V4Y2VwdGlvbiBuYW1lIG1pc2xlYWRpbmcKKyAgLy8vIE9idGFpbiBhbiBleGNlcHRpb25fcHRyIHBvaW50aW5nIHRvIGEgY29weSBvZiB0aGUgc3VwcGxpZWQgb2JqZWN0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXg+CisgICAgZXhjZXB0aW9uX3B0ciAKKyAgICBtYWtlX2V4Y2VwdGlvbl9wdHIoX0V4IF9fZXgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIHN0ZDo6Y29weV9leGNlcHRpb248X0V4PihfX2V4KTsgfQorCisgIC8vIEB9IGdyb3VwIGV4Y2VwdGlvbnMKK30gLy8gbmFtZXNwYWNlIHN0ZAorCit9IC8vIGV4dGVybiAiQysrIgorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9mb3J3YXJkX2xpc3QuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9mb3J3YXJkX2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDhkNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2ZvcndhcmRfbGlzdC5oCkBAIC0wLDAgKzEsMTQwMiBAQAorLy8gPGZvcndhcmRfbGlzdC5oPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9mb3J3YXJkX2xpc3QuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2ZvcndhcmRfbGlzdH0KKyAqLworCisjaWZuZGVmIF9GT1JXQVJEX0xJU1RfSAorI2RlZmluZSBfRk9SV0FSRF9MSVNUX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgaGVscGVyIGJhc2ljIG5vZGUgY2xhc3MgZm9yICVmb3J3YXJkX2xpc3QuCisgICAqICAgICAgICAgIFRoaXMgaXMganVzdCBhIGxpbmtlZCBsaXN0IHdpdGggbm90aGluZyBpbnNpZGUgaXQuCisgICAqICAgICAgICAgIFRoZXJlIGFyZSBwdXJlbHkgbGlzdCBzaHVmZmxpbmcgdXRpbGl0eSBtZXRob2RzIGhlcmUuCisgICAqLworICBzdHJ1Y3QgX0Z3ZF9saXN0X25vZGVfYmFzZQorICB7CisgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSgpID0gZGVmYXVsdDsKKworICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9NX25leHQgPSBudWxscHRyOworCisgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSoKKyAgICBfTV90cmFuc2Zlcl9hZnRlcihfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2JlZ2luLAorCQkgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2VuZCkKKyAgICB7CisgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2tlZXAgPSBfX2JlZ2luLT5fTV9uZXh0OworICAgICAgaWYgKF9fZW5kKQorCXsKKwkgIF9fYmVnaW4tPl9NX25leHQgPSBfX2VuZC0+X01fbmV4dDsKKwkgIF9fZW5kLT5fTV9uZXh0ID0gX01fbmV4dDsKKwl9CisgICAgICBlbHNlCisJX19iZWdpbi0+X01fbmV4dCA9IDA7CisgICAgICBfTV9uZXh0ID0gX19rZWVwOworICAgICAgcmV0dXJuIF9fZW5kOworICAgIH0KKworICAgIHZvaWQKKyAgICBfTV9yZXZlcnNlX2FmdGVyKCkgbm9leGNlcHQKKyAgICB7CisgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX3RhaWwgPSBfTV9uZXh0OworICAgICAgaWYgKCFfX3RhaWwpCisJcmV0dXJuOworICAgICAgd2hpbGUgKF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fdGVtcCA9IF9fdGFpbC0+X01fbmV4dCkKKwl7CisJICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2tlZXAgPSBfTV9uZXh0OworCSAgX01fbmV4dCA9IF9fdGVtcDsKKwkgIF9fdGFpbC0+X01fbmV4dCA9IF9fdGVtcC0+X01fbmV4dDsKKwkgIF9NX25leHQtPl9NX25leHQgPSBfX2tlZXA7CisJfQorICAgIH0KKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgQSBoZWxwZXIgbm9kZSBjbGFzcyBmb3IgJWZvcndhcmRfbGlzdC4KKyAgICogICAgICAgICAgVGhpcyBpcyBqdXN0IGEgbGlua2VkIGxpc3Qgd2l0aCB1bmluaXRpYWxpemVkIHN0b3JhZ2UgZm9yIGEKKyAgICogICAgICAgICAgZGF0YSB2YWx1ZSBpbiBlYWNoIG5vZGUuCisgICAqICAgICAgICAgIFRoZXJlIGlzIGEgc29ydGluZyB1dGlsaXR5IG1ldGhvZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Z3ZF9saXN0X25vZGUKKyAgICA6IHB1YmxpYyBfRndkX2xpc3Rfbm9kZV9iYXNlCisgICAgeworICAgICAgX0Z3ZF9saXN0X25vZGUoKSA9IGRlZmF1bHQ7CisKKyAgICAgIHR5cGVuYW1lIGFsaWduZWRfc3RvcmFnZTxzaXplb2YoX1RwKSwgYWxpZ25tZW50X29mPF9UcD46OnZhbHVlPjo6dHlwZQorCV9NX3N0b3JhZ2U7CisKKyAgICAgIF9UcCoKKyAgICAgIF9NX3ZhbHB0cigpIG5vZXhjZXB0CisgICAgICB7CisJcmV0dXJuIHN0YXRpY19jYXN0PF9UcCo+KHN0YXRpY19jYXN0PHZvaWQqPigmX01fc3RvcmFnZSkpOworICAgICAgfQorCisgICAgICBjb25zdCBfVHAqCisgICAgICBfTV92YWxwdHIoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeworCXJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfVHAqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oJl9NX3N0b3JhZ2UpKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiAgIEBicmllZiBBIGZvcndhcmRfbGlzdDo6aXRlcmF0b3IuCisgICAqIAorICAgKiAgIEFsbCB0aGUgZnVuY3Rpb25zIGFyZSBvcCBvdmVybG9hZHMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9Gd2RfbGlzdF9pdGVyYXRvcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0Z3ZF9saXN0X2l0ZXJhdG9yPF9UcD4gICAgICAgICAgICBfU2VsZjsKKyAgICAgIHR5cGVkZWYgX0Z3ZF9saXN0X25vZGU8X1RwPiAgICAgICAgICAgICAgICBfTm9kZTsKKworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfRndkX2xpc3RfaXRlcmF0b3IoKQorICAgICAgOiBfTV9ub2RlKCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfRndkX2xpc3RfaXRlcmF0b3IoX0Z3ZF9saXN0X25vZGVfYmFzZSogX19uKSAKKyAgICAgIDogX01fbm9kZShfX24pIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X05vZGUqPih0aGlzLT5fTV9ub2RlKS0+X01fdmFscHRyKCk7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfTm9kZSo+KHRoaXMtPl9NX25vZGUpLT5fTV92YWxwdHIoKTsgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisgICAgICAgIF9TZWxmIF9fdG1wKCp0aGlzKTsKKyAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7CisgICAgICAgIHJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ub2RlICE9IF9feC5fTV9ub2RlOyB9CisKKyAgICAgIF9TZWxmCisgICAgICBfTV9uZXh0KCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgaWYgKF9NX25vZGUpCisgICAgICAgICAgcmV0dXJuIF9Gd2RfbGlzdF9pdGVyYXRvcihfTV9ub2RlLT5fTV9uZXh0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBfRndkX2xpc3RfaXRlcmF0b3IoMCk7CisgICAgICB9CisKKyAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CisgICAgfTsKKworICAvKioKKyAgICogICBAYnJpZWYgQSBmb3J3YXJkX2xpc3Q6OmNvbnN0X2l0ZXJhdG9yLgorICAgKiAKKyAgICogICBBbGwgdGhlIGZ1bmN0aW9ucyBhcmUgb3Agb3ZlcmxvYWRzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3IKKyAgICB7CisgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9jb25zdF9pdGVyYXRvcjxfVHA+ICAgICAgX1NlbGY7CisgICAgICB0eXBlZGVmIGNvbnN0IF9Gd2RfbGlzdF9ub2RlPF9UcD4gICAgICAgICAgX05vZGU7CisgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgX0Z3ZF9saXN0X2NvbnN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX01fbm9kZSgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX0Z3ZF9saXN0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fbikgCisgICAgICA6IF9NX25vZGUoX19uKSB7IH0KKworICAgICAgX0Z3ZF9saXN0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0ZXIpCisgICAgICA6IF9NX25vZGUoX19pdGVyLl9NX25vZGUpIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X05vZGUqPih0aGlzLT5fTV9ub2RlKS0+X01fdmFscHRyKCk7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfTm9kZSo+KHRoaXMtPl9NX25vZGUpLT5fTV92YWxwdHIoKTsgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisgICAgICAgIF9TZWxmIF9fdG1wKCp0aGlzKTsKKyAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7CisgICAgICAgIHJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ub2RlICE9IF9feC5fTV9ub2RlOyB9CisKKyAgICAgIF9TZWxmCisgICAgICBfTV9uZXh0KCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPl9NX25vZGUpCisgICAgICAgICAgcmV0dXJuIF9Gd2RfbGlzdF9jb25zdF9pdGVyYXRvcihfTV9ub2RlLT5fTV9uZXh0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3IoMCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0IF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgRm9yd2FyZCBsaXN0IGl0ZXJhdG9yIGVxdWFsaXR5IGNvbXBhcmlzb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9Gd2RfbGlzdF9pdGVyYXRvcjxfVHA+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3I8X1RwPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEZvcndhcmQgbGlzdCBpdGVyYXRvciBpbmVxdWFsaXR5IGNvbXBhcmlzb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9Gd2RfbGlzdF9pdGVyYXRvcjxfVHA+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3I8X1RwPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEJhc2UgY2xhc3MgZm9yICVmb3J3YXJkX2xpc3QuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX0Z3ZF9saXN0X2Jhc2UKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fYWxsb2NfdHJhaXRzPF9BbGxvYz4gX0FsbG9jX3RyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyCisgICAgICAgIF9UcF9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM6OnRlbXBsYXRlCisgICAgICAgIHJlYmluZDxfRndkX2xpc3Rfbm9kZTxfVHA+Pjo6b3RoZXIgX05vZGVfYWxsb2NfdHlwZTsKKworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fYWxsb2NfdHJhaXRzPF9Ob2RlX2FsbG9jX3R5cGU+IF9Ob2RlX2FsbG9jX3RyYWl0czsKKworICAgICAgc3RydWN0IF9Gd2RfbGlzdF9pbXBsIAorICAgICAgOiBwdWJsaWMgX05vZGVfYWxsb2NfdHlwZQorICAgICAgeworICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlIF9NX2hlYWQ7CisKKyAgICAgICAgX0Z3ZF9saXN0X2ltcGwoKQorICAgICAgICA6IF9Ob2RlX2FsbG9jX3R5cGUoKSwgX01faGVhZCgpCisgICAgICAgIHsgfQorCisgICAgICAgIF9Gd2RfbGlzdF9pbXBsKGNvbnN0IF9Ob2RlX2FsbG9jX3R5cGUmIF9fYSkKKyAgICAgICAgOiBfTm9kZV9hbGxvY190eXBlKF9fYSksIF9NX2hlYWQoKQorICAgICAgICB7IH0KKworICAgICAgICBfRndkX2xpc3RfaW1wbChfTm9kZV9hbGxvY190eXBlJiYgX19hKQorCTogX05vZGVfYWxsb2NfdHlwZShzdGQ6Om1vdmUoX19hKSksIF9NX2hlYWQoKQorICAgICAgICB7IH0KKyAgICAgIH07CisKKyAgICAgIF9Gd2RfbGlzdF9pbXBsIF9NX2ltcGw7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX0Z3ZF9saXN0X2NvbnN0X2l0ZXJhdG9yPF9UcD4gICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfRndkX2xpc3Rfbm9kZTxfVHA+ICAgICAgICAgICAgICAgICAgICAgX05vZGU7CisKKyAgICAgIF9Ob2RlX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PF9Ob2RlX2FsbG9jX3R5cGUqPigmdGhpcy0+X01faW1wbCk7IH0KKworICAgICAgY29uc3QgX05vZGVfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX05vZGVfYWxsb2NfdHlwZSo+KCZ0aGlzLT5fTV9pbXBsKTsgfQorCisgICAgICBfRndkX2xpc3RfYmFzZSgpCisgICAgICA6IF9NX2ltcGwoKSB7IH0KKworICAgICAgX0Z3ZF9saXN0X2Jhc2UoY29uc3QgX05vZGVfYWxsb2NfdHlwZSYgX19hKQorICAgICAgOiBfTV9pbXBsKF9fYSkgeyB9CisKKyAgICAgIF9Gd2RfbGlzdF9iYXNlKF9Gd2RfbGlzdF9iYXNlJiYgX19sc3QsIGNvbnN0IF9Ob2RlX2FsbG9jX3R5cGUmIF9fYSk7CisKKyAgICAgIF9Gd2RfbGlzdF9iYXNlKF9Gd2RfbGlzdF9iYXNlJiYgX19sc3QpCisgICAgICA6IF9NX2ltcGwoc3RkOjptb3ZlKF9fbHN0Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKSkKKyAgICAgIHsKKwl0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCA9IF9fbHN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0OworCV9fbHN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0ID0gMDsKKyAgICAgIH0KKworICAgICAgfl9Gd2RfbGlzdF9iYXNlKCkKKyAgICAgIHsgX01fZXJhc2VfYWZ0ZXIoJl9NX2ltcGwuX01faGVhZCwgMCk7IH0KKworICAgIHByb3RlY3RlZDoKKworICAgICAgX05vZGUqCisgICAgICBfTV9nZXRfbm9kZSgpCisgICAgICB7IHJldHVybiBfTm9kZV9hbGxvY190cmFpdHM6OmFsbG9jYXRlKF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLCAxKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgX05vZGUqCisgICAgICAgIF9NX2NyZWF0ZV9ub2RlKF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7CisgICAgICAgICAgX05vZGUqIF9fbm9kZSA9IHRoaXMtPl9NX2dldF9ub2RlKCk7CisgICAgICAgICAgX190cnkKKyAgICAgICAgICAgIHsKKwkgICAgICBfVHBfYWxsb2NfdHlwZSBfX2EoX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOworCSAgICAgIHR5cGVkZWYgYWxsb2NhdG9yX3RyYWl0czxfVHBfYWxsb2NfdHlwZT4gX0FsbG9jX3RyYWl0czsKKwkgICAgICA6Om5ldyAoKHZvaWQqKV9fbm9kZSkgX05vZGUoKTsKKwkgICAgICBfQWxsb2NfdHJhaXRzOjpjb25zdHJ1Y3QoX19hLCBfX25vZGUtPl9NX3ZhbHB0cigpLAorCQkJCSAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgICAgICAgICAgfQorICAgICAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0aGlzLT5fTV9wdXRfbm9kZShfX25vZGUpOworICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX19ub2RlOworICAgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKgorICAgICAgICBfTV9pbnNlcnRfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKTsKKworICAgICAgdm9pZAorICAgICAgX01fcHV0X25vZGUoX05vZGUqIF9fcCkKKyAgICAgIHsgX05vZGVfYWxsb2NfdHJhaXRzOjpkZWFsbG9jYXRlKF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLCBfX3AsIDEpOyB9CisKKyAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqCisgICAgICBfTV9lcmFzZV9hZnRlcihfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX3Bvcyk7CisKKyAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqCisgICAgICBfTV9lcmFzZV9hZnRlcihfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX3BvcywgCisgICAgICAgICAgICAgICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2xhc3QpOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgd2l0aCBsaW5lYXIgdGltZSBhY2Nlc3MgdG8gZWxlbWVudHMsCisgICAqICBhbmQgZml4ZWQgdGltZSBpbnNlcnRpb24vZGVsZXRpb24gYXQgYW55IHBvaW50IGluIHRoZSBzZXF1ZW5jZS4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgQHRwYXJhbSBfVHAgIFR5cGUgb2YgZWxlbWVudC4KKyAgICogIEB0cGFyYW0gX0FsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPF9UcD4uCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY3Ij5zZXF1ZW5jZTwvYT4sIGluY2x1ZGluZyB0aGUKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY4Ij5vcHRpb25hbCBzZXF1ZW5jZSByZXF1aXJlbWVudHM8L2E+IHdpdGggdGhlCisgICAqICAlZXhjZXB0aW9uIG9mIEBjIGF0IGFuZCBAYyBvcGVyYXRvcltdLgorICAgKgorICAgKiAgVGhpcyBpcyBhIEBlIHNpbmdseSBAZSBsaW5rZWQgJWxpc3QuICBUcmF2ZXJzYWwgdXAgdGhlCisgICAqICAlbGlzdCByZXF1aXJlcyBsaW5lYXIgdGltZSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgZWxlbWVudHMgKG9yCisgICAqICBAZSBub2RlcykgaXMgZG9uZSBpbiBjb25zdGFudCB0aW1lLCByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZQorICAgKiAgY2hhbmdlIHRha2VzIHBsYWNlLiAgVW5saWtlIHN0ZDo6dmVjdG9yIGFuZCBzdGQ6OmRlcXVlLAorICAgKiAgcmFuZG9tLWFjY2VzcyBpdGVyYXRvcnMgYXJlIG5vdCBwcm92aWRlZCwgc28gc3Vic2NyaXB0aW5nICggQGMKKyAgICogIFtdICkgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLiAgRm9yIGFsZ29yaXRobXMgd2hpY2ggb25seSBuZWVkCisgICAqICBzZXF1ZW50aWFsIGFjY2VzcywgdGhpcyBsYWNrIG1ha2VzIG5vIGRpZmZlcmVuY2UuCisgICAqCisgICAqICBBbHNvIHVubGlrZSB0aGUgb3RoZXIgc3RhbmRhcmQgY29udGFpbmVycywgc3RkOjpmb3J3YXJkX2xpc3QgcHJvdmlkZXMKKyAgICogIHNwZWNpYWxpemVkIGFsZ29yaXRobXMgJXVuaXF1ZSB0byBsaW5rZWQgbGlzdHMsIHN1Y2ggYXMKKyAgICogIHNwbGljaW5nLCBzb3J0aW5nLCBhbmQgaW4tcGxhY2UgcmV2ZXJzYWwuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBmb3J3YXJkX2xpc3QgOiBwcml2YXRlIF9Gd2RfbGlzdF9iYXNlPF9UcCwgX0FsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfRndkX2xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gICAgICAgICAgICAgICAgICBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX0Z3ZF9saXN0X25vZGU8X1RwPiAgICAgICAgICAgICAgICAgICAgICAgICAgX05vZGU7CisgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9ub2RlX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgIF9Ob2RlX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpfVHBfYWxsb2NfdHlwZSAgICAgICAgICAgICAgIF9UcF9hbGxvY190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6X05vZGVfYWxsb2NfdHlwZSAgICAgICAgICAgICBfTm9kZV9hbGxvY190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6X05vZGVfYWxsb2NfdHJhaXRzICAgICAgICAgICBfTm9kZV9hbGxvY190cmFpdHM7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19hbGxvY190cmFpdHM8X1RwX2FsbG9jX3R5cGU+ICAgIF9BbGxvY190cmFpdHM7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlczoKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czo6cG9pbnRlciAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czo6Y29uc3RfcG9pbnRlciAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czo6cmVmZXJlbmNlICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzOjpjb25zdF9yZWZlcmVuY2UgICAgICBjb25zdF9yZWZlcmVuY2U7CisgCisgICAgICB0eXBlZGVmIF9Gd2RfbGlzdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfRndkX2xpc3RfY29uc3RfaXRlcmF0b3I8X1RwPiAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworCisgICAgICAvLyAyMy4zLjQuMiBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENyZWF0ZXMgYSAlZm9yd2FyZF9saXN0IHdpdGggbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2FsICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgZm9yd2FyZF9saXN0KGNvbnN0IF9BbGxvYyYgX19hbCA9IF9BbGxvYygpKQorICAgICAgOiBfQmFzZShfTm9kZV9hbGxvY190eXBlKF9fYWwpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29weSBjb25zdHJ1Y3RvciB3aXRoIGFsbG9jYXRvciBhcmd1bWVudC4KKyAgICAgICAqICBAcGFyYW0gIF9fbGlzdCAgSW5wdXQgbGlzdCB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgX19hbCAgICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3QoY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QsIGNvbnN0IF9BbGxvYyYgX19hbCkKKyAgICAgIDogX0Jhc2UoX05vZGVfYWxsb2NfdHlwZShfX2FsKSkKKyAgICAgIHsgX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2xpc3QuYmVnaW4oKSwgX19saXN0LmVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1vdmUgY29uc3RydWN0b3Igd2l0aCBhbGxvY2F0b3IgYXJndW1lbnQuCisgICAgICAgKiAgQHBhcmFtICBfX2xpc3QgIElucHV0IGxpc3QgdG8gbW92ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fYWwgICAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZm9yd2FyZF9saXN0KGZvcndhcmRfbGlzdCYmIF9fbGlzdCwgY29uc3QgX0FsbG9jJiBfX2FsKQorICAgICAgbm9leGNlcHQoX05vZGVfYWxsb2NfdHJhaXRzOjpfU19hbHdheXNfZXF1YWwoKSkKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9fbGlzdCksIF9Ob2RlX2FsbG9jX3R5cGUoX19hbCkpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWZvcndhcmRfbGlzdCB3aXRoIGRlZmF1bHQgY29uc3RydWN0ZWQgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX24gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gaW5pdGlhbGx5IGNyZWF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjb25zdHJ1Y3RvciBjcmVhdGVzIHRoZSAlZm9yd2FyZF9saXN0IHdpdGggQGEgX19uIGRlZmF1bHQKKyAgICAgICAqICBjb25zdHJ1Y3RlZCBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGZvcndhcmRfbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYWwgPSBfQWxsb2MoKSkKKyAgICAgIDogX0Jhc2UoX05vZGVfYWxsb2NfdHlwZShfX2FsKSkKKyAgICAgIHsgX01fZGVmYXVsdF9pbml0aWFsaXplKF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWZvcndhcmRfbGlzdCB3aXRoIGNvcGllcyBvZiBhbiBleGVtcGxhciBlbGVtZW50LgorICAgICAgICogIEBwYXJhbSAgX19uICAgICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICogIEBwYXJhbSAgX192YWx1ZSAgQW4gZWxlbWVudCB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgX19hbCAgICAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjb25zdHJ1Y3RvciBmaWxscyB0aGUgJWZvcndhcmRfbGlzdCB3aXRoIEBhIF9fbiBjb3BpZXMgb2YKKyAgICAgICAqICBAYSBfX3ZhbHVlLgorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hbCA9IF9BbGxvYygpKQorICAgICAgOiBfQmFzZShfTm9kZV9hbGxvY190eXBlKF9fYWwpKQorICAgICAgeyBfTV9maWxsX2luaXRpYWxpemUoX19uLCBfX3ZhbHVlKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVmb3J3YXJkX2xpc3QgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fYWwgICAgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVmb3J3YXJkX2xpc3QgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICBbQGEgX19maXJzdCxAYSBfX2xhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiAod2hlcmUgTiBpcworICAgICAgICogIGRpc3RhbmNlKEBhIF9fZmlyc3QsQGEgX19sYXN0KSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorICAgICAgICBmb3J3YXJkX2xpc3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2FsID0gX0FsbG9jKCkpCisJOiBfQmFzZShfTm9kZV9hbGxvY190eXBlKF9fYWwpKQorICAgICAgICB7IF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSAlZm9yd2FyZF9saXN0IGNvcHkgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xpc3QgIEEgJWZvcndhcmRfbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgICAgIHR5cGVzLgorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3QoY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QpCisgICAgICA6IF9CYXNlKF9Ob2RlX2FsbG9jX3RyYWl0czo6X1Nfc2VsZWN0X29uX2NvcHkoCisgICAgICAgICAgICAgICAgX19saXN0Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKSkKKyAgICAgIHsgX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2xpc3QuYmVnaW4oKSwgX19saXN0LmVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSAlZm9yd2FyZF9saXN0IG1vdmUgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xpc3QgIEEgJWZvcndhcmRfbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgICAgIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlZm9yd2FyZF9saXN0IGNvbnRhaW5zIHRoZSBleGFjdCBjb250ZW50cyBvZiBAYQorICAgICAgICogIF9fbGlzdC4gVGhlIGNvbnRlbnRzIG9mIEBhIF9fbGlzdCBhcmUgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkCisgICAgICAgKiAgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqLworICAgICAgZm9yd2FyZF9saXN0KGZvcndhcmRfbGlzdCYmIF9fbGlzdCkgbm9leGNlcHQKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9fbGlzdCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVmb3J3YXJkX2xpc3QgZnJvbSBhbiBpbml0aWFsaXplcl9saXN0CisgICAgICAgKiAgQHBhcmFtICBfX2lsICBBbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlX3R5cGUuCisgICAgICAgKiAgQHBhcmFtICBfX2FsICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlZm9yd2FyZF9saXN0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGluIHRoZSBpbml0aWFsaXplcl9saXN0IEBhIF9faWwuICBUaGlzIGlzIGxpbmVhciBpbiBfX2lsLnNpemUoKS4KKyAgICAgICAqLworICAgICAgZm9yd2FyZF9saXN0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHA+IF9faWwsCisgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2FsID0gX0FsbG9jKCkpCisgICAgICA6IF9CYXNlKF9Ob2RlX2FsbG9jX3R5cGUoX19hbCkpCisgICAgICB7IF9NX3JhbmdlX2luaXRpYWxpemUoX19pbC5iZWdpbigpLCBfX2lsLmVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSBmb3J3YXJkX2xpc3QgZHRvci4KKyAgICAgICAqLworICAgICAgfmZvcndhcmRfbGlzdCgpIG5vZXhjZXB0CisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgJWZvcndhcmRfbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19saXN0ICBBICVmb3J3YXJkX2xpc3Qgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvcgorICAgICAgICogICAgICAgICAgICAgICAgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgZWxlbWVudHMgb2YgQGEgX19saXN0IGFyZSBjb3BpZWQsIGJ1dCB1bmxpa2UgdGhlIGNvcHkKKyAgICAgICAqICBjb25zdHJ1Y3RvciwgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgZm9yd2FyZF9saXN0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IGZvcndhcmRfbGlzdCYgX19saXN0KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgJWZvcndhcmRfbGlzdCBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xpc3QgIEEgJWZvcndhcmRfbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgICB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIF9fbGlzdCBhcmUgbW92ZWQgaW50byB0aGlzICVmb3J3YXJkX2xpc3QKKyAgICAgICAqICAod2l0aG91dCBjb3B5aW5nLCBpZiB0aGUgYWxsb2NhdG9ycyBwZXJtaXQgaXQpLgorICAgICAgICogIEBhIF9fbGlzdCBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgJWZvcndhcmRfbGlzdAorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3QmCisgICAgICBvcGVyYXRvcj0oZm9yd2FyZF9saXN0JiYgX19saXN0KQorICAgICAgbm9leGNlcHQoX05vZGVfYWxsb2NfdHJhaXRzOjpfU19ub3Rocm93X21vdmUoKSkKKyAgICAgIHsKKyAgICAgICAgY29uc3RleHByIGJvb2wgX19tb3ZlX3N0b3JhZ2UgPQorICAgICAgICAgIF9Ob2RlX2FsbG9jX3RyYWl0czo6X1NfcHJvcGFnYXRlX29uX21vdmVfYXNzaWduKCkKKyAgICAgICAgICB8fCBfTm9kZV9hbGxvY190cmFpdHM6Ol9TX2Fsd2F5c19lcXVhbCgpOworICAgICAgICBfTV9tb3ZlX2Fzc2lnbihzdGQ6Om1vdmUoX19saXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19tb3ZlX3N0b3JhZ2U+KCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgJWZvcndhcmRfbGlzdCBpbml0aWFsaXplciBsaXN0IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2lsICBBbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlX3R5cGUuCisgICAgICAgKgorICAgICAgICogIFJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSAlZm9yd2FyZF9saXN0IHdpdGggY29waWVzIG9mIHRoZQorICAgICAgICogIGVsZW1lbnRzIGluIHRoZSBpbml0aWFsaXplcl9saXN0IEBhIF9faWwuICBUaGlzIGlzIGxpbmVhciBpbgorICAgICAgICogIF9faWwuc2l6ZSgpLgorICAgICAgICovCisgICAgICBmb3J3YXJkX2xpc3QmCisgICAgICBvcGVyYXRvcj0oc3RkOjppbml0aWFsaXplcl9saXN0PF9UcD4gX19pbCkKKyAgICAgIHsKKyAgICAgICAgYXNzaWduKF9faWwpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIHJhbmdlIHRvIGEgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAlZm9yd2FyZF9saXN0IHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGluIHRoZSByYW5nZSBbQGEgX19maXJzdCxAYSBfX2xhc3QpLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAlZm9yd2FyZF9saXN0IGFuZAorICAgICAgICogIHRoYXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGUgcmVzdWx0aW5nICVmb3J3YXJkX2xpc3QgaXMgdGhlCisgICAgICAgKiAgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFzc2lnbmVkLiAgT2xkIGRhdGEgaXMgbG9zdC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisJdm9pZAorICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICB0eXBlZGVmIGlzX2Fzc2lnbmFibGU8X1RwLCBkZWNsdHlwZSgqX19maXJzdCk+IF9fYXNzaWduYWJsZTsKKwkgIF9NX2Fzc2lnbihfX2ZpcnN0LCBfX2xhc3QsIF9fYXNzaWduYWJsZSgpKTsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIGdpdmVuIHZhbHVlIHRvIGEgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGFzc2lnbmVkLgorICAgICAgICogIEBwYXJhbSAgX192YWwgIFZhbHVlIHRvIGJlIGFzc2lnbmVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJWZvcndhcmRfbGlzdCB3aXRoIEBhIF9fbiBjb3BpZXMgb2YgdGhlCisgICAgICAgKiAgZ2l2ZW4gdmFsdWUuICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZQorICAgICAgICogICVmb3J3YXJkX2xpc3QsIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgJWZvcndhcmRfbGlzdCBoYXMgX19uCisgICAgICAgKiAgZWxlbWVudHMuICBPbGQgZGF0YSBpcyBsb3N0LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICAgIHsgX01fYXNzaWduX24oX19uLCBfX3ZhbCwgaXNfY29weV9hc3NpZ25hYmxlPF9UcD4oKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ25zIGFuIGluaXRpYWxpemVyX2xpc3QgdG8gYSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgX19pbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdCBvZiB2YWx1ZV90eXBlLgorICAgICAgICoKKyAgICAgICAqICBSZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0aGUgJWZvcndhcmRfbGlzdCB3aXRoIGNvcGllcyBvZiB0aGUKKyAgICAgICAqICBlbGVtZW50cyBpbiB0aGUgaW5pdGlhbGl6ZXJfbGlzdCBAYSBfX2lsLiAgVGhpcyBpcyBsaW5lYXIgaW4KKyAgICAgICAqICBpbC5zaXplKCkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lsKQorICAgICAgeyBhc3NpZ24oX19pbC5iZWdpbigpLCBfX2lsLmVuZCgpKTsgfQorCisgICAgICAvLy8gR2V0IGEgY29weSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gb2JqZWN0LgorICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUodGhpcy0+X01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIC8vIDIzLjMuNC4zIGl0ZXJhdG9yczoKKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgaW4gdGhlICVmb3J3YXJkX2xpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVmb3JlX2JlZ2luKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKCZ0aGlzLT5fTV9pbXBsLl9NX2hlYWQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBiZWZvcmUgdGhlCisgICAgICAgKiAgZmlyc3QgZWxlbWVudCBpbiB0aGUgJWZvcndhcmRfbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZm9yZV9iZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigmdGhpcy0+X01faW1wbC5fTV9oZWFkKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgZWxlbWVudAorICAgICAgICogIGluIHRoZSAlZm9yd2FyZF9saXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01faGVhZC5fTV9uZXh0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJWZvcndhcmRfbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01faGVhZC5fTV9uZXh0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVmb3J3YXJkX2xpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoMCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVmb3J3YXJkX2xpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoMCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGZpcnN0IGVsZW1lbnQgaW4gdGhlICVmb3J3YXJkX2xpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBiZWZvcmUgdGhlCisgICAgICAgKiAgZmlyc3QgZWxlbWVudCBpbiB0aGUgJWZvcndhcmRfbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWZvcmVfYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoJnRoaXMtPl9NX2ltcGwuX01faGVhZCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0CisgICAgICAgKiAgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJWZvcndhcmRfbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluCisgICAgICAgKiAgb3JkaW5hcnkgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoMCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSAlZm9yd2FyZF9saXN0IGlzIGVtcHR5LiAgKFRodXMgYmVnaW4oKSB3b3VsZAorICAgICAgICogIGVxdWFsIGVuZCgpLikKKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQgPT0gMDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG51bWJlciBvZiBlbGVtZW50cyBvZiAlZm9yd2FyZF9saXN0LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jX3RyYWl0czo6bWF4X3NpemUodGhpcy0+X01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIC8vIDIzLjMuNC40IGVsZW1lbnQgYWNjZXNzOgorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBmcm9udCgpCisgICAgICB7CisgICAgICAgIF9Ob2RlKiBfX2Zyb250ID0gc3RhdGljX2Nhc3Q8X05vZGUqPih0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCk7CisgICAgICAgIHJldHVybiAqX19mcm9udC0+X01fdmFscHRyKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7CisgICAgICAgIF9Ob2RlKiBfX2Zyb250ID0gc3RhdGljX2Nhc3Q8X05vZGUqPih0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCk7CisgICAgICAgIHJldHVybiAqX19mcm9udC0+X01fdmFscHRyKCk7CisgICAgICB9CisKKyAgICAgIC8vIDIzLjMuNC41IG1vZGnvrIFlcnM6CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0cyBvYmplY3QgaW4gJWZvcndhcmRfbGlzdCBhdCB0aGUgZnJvbnQgb2YgdGhlCisgICAgICAgKiAgICAgICAgICBsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYW4gb2JqZWN0IG9mIHR5cGUgVHAgY29uc3RydWN0ZWQKKyAgICAgICAqICB3aXRoIFRwKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0CisgICAgICAgKiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlZm9yd2FyZF9saXN0IHRoaXMgb3BlcmF0aW9uIGNhbgorICAgICAgICogIGJlIGRvbmUgaW4gY29uc3RhbnQgdGltZSwgYW5kIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzCisgICAgICAgKiAgYW5kIHJlZmVyZW5jZXMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGVtcGxhY2VfZnJvbnQoX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICAgIHsgdGhpcy0+X01faW5zZXJ0X2FmdGVyKGNiZWZvcmVfYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFkZCBkYXRhIHRvIHRoZSBmcm9udCBvZiB0aGUgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fdmFsICBEYXRhIHRvIGJlIGFkZGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbgorICAgICAgICogIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSAlZm9yd2FyZF9saXN0IGFuZCBhc3NpZ25zIHRoZSBnaXZlbgorICAgICAgICogIGRhdGEgdG8gaXQuICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVmb3J3YXJkX2xpc3QgdGhpcyBvcGVyYXRpb24KKyAgICAgICAqICBjYW4gYmUgZG9uZSBpbiBjb25zdGFudCB0aW1lLCBhbmQgZG9lcyBub3QgaW52YWxpZGF0ZSBpdGVyYXRvcnMKKyAgICAgICAqICBhbmQgcmVmZXJlbmNlcy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcHVzaF9mcm9udChjb25zdCBfVHAmIF9fdmFsKQorICAgICAgeyB0aGlzLT5fTV9pbnNlcnRfYWZ0ZXIoY2JlZm9yZV9iZWdpbigpLCBfX3ZhbCk7IH0KKworICAgICAgLyoqCisgICAgICAgKgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwdXNoX2Zyb250KF9UcCYmIF9fdmFsKQorICAgICAgeyB0aGlzLT5fTV9pbnNlcnRfYWZ0ZXIoY2JlZm9yZV9iZWdpbigpLCBzdGQ6Om1vdmUoX192YWwpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgZmlyc3QgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgc3RhY2sgb3BlcmF0aW9uLiAgSXQgc2hyaW5rcyB0aGUgJWZvcndhcmRfbGlzdAorICAgICAgICogIGJ5IG9uZS4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWZvcndhcmRfbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4KKyAgICAgICAqICBiZSBkb25lIGluIGNvbnN0YW50IHRpbWUsIGFuZCBvbmx5IGludmFsaWRhdGVzIGl0ZXJhdG9ycy9yZWZlcmVuY2VzCisgICAgICAgKiAgdG8gdGhlIGVsZW1lbnQgYmVpbmcgcmVtb3ZlZC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IG5vIGRhdGEgaXMgcmV0dXJuZWQsIGFuZCBpZiB0aGUgZmlyc3QgZWxlbWVudCdzIGRhdGEKKyAgICAgICAqICBpcyBuZWVkZWQsIGl0IHNob3VsZCBiZSByZXRyaWV2ZWQgYmVmb3JlIHBvcF9mcm9udCgpIGlzCisgICAgICAgKiAgY2FsbGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3BfZnJvbnQoKQorICAgICAgeyB0aGlzLT5fTV9lcmFzZV9hZnRlcigmdGhpcy0+X01faW1wbC5fTV9oZWFkKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdHMgb2JqZWN0IGluICVmb3J3YXJkX2xpc3QgYWZ0ZXIgdGhlIHNwZWNpZmllZAorICAgICAgICogICAgICAgICAgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgQSBjb25zdF9pdGVyYXRvciBpbnRvIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYW4gb2JqZWN0IG9mIHR5cGUgVCBjb25zdHJ1Y3RlZAorICAgICAgICogIHdpdGggVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIGFmdGVyIHRoZSBzcGVjaWZpZWQKKyAgICAgICAqICBsb2NhdGlvbi4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWZvcndhcmRfbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4KKyAgICAgICAqICBiZSBkb25lIGluIGNvbnN0YW50IHRpbWUsIGFuZCBkb2VzIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycworICAgICAgICogIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgZW1wbGFjZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2luc2VydF9hZnRlcihfX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBnaXZlbiB2YWx1ZSBpbnRvICVmb3J3YXJkX2xpc3QgYWZ0ZXIgc3BlY2lmaWVkCisgICAgICAgKiAgICAgICAgICBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgX192YWwgIERhdGEgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgYSBjb3B5IG9mIHRoZSBnaXZlbiB2YWx1ZSBhZnRlcgorICAgICAgICogIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVmb3J3YXJkX2xpc3QgdGhpcworICAgICAgICogIG9wZXJhdGlvbiBjYW4gYmUgZG9uZSBpbiBjb25zdGFudCB0aW1lLCBhbmQgZG9lcyBub3QKKyAgICAgICAqICBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2luc2VydF9hZnRlcihfX3BvcywgX192YWwpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9UcCYmIF9fdmFsKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IodGhpcy0+X01faW5zZXJ0X2FmdGVyKF9fcG9zLCBzdGQ6Om1vdmUoX192YWwpKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGEgbnVtYmVyIG9mIGNvcGllcyBvZiBnaXZlbiBkYXRhIGludG8gdGhlCisgICAgICAgKiAgICAgICAgICAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEFuIGl0ZXJhdG9yIGludG8gdGhlICVmb3J3YXJkX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBlbGVtZW50cyB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIF9fdmFsICBEYXRhIHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBsYXN0IGluc2VydGVkIGNvcHkgb2YKKyAgICAgICAqICAgICAgICAgICBAYSB2YWwgb3IgQGEgcG9zIGlmIEBhIG4gPT0gMC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhIHNwZWNpZmllZCBudW1iZXIgb2YgY29waWVzIG9mIHRoZQorICAgICAgICogIGdpdmVuIGRhdGEgYWZ0ZXIgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBAYSBwb3MuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0aW9uIGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc2VydGVkIGFuZAorICAgICAgICogIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGEgcmFuZ2UgaW50byB0aGUgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbGFzdCBpbnNlcnRlZCBlbGVtZW50IG9yCisgICAgICAgKiAgICAgICAgICAgQGEgX19wb3MgaWYgQGEgX19maXJzdCA9PSBAYSBfX2xhc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgY29waWVzIG9mIHRoZSBkYXRhIGluIHRoZSByYW5nZQorICAgICAgICogIFtAYSBfX2ZpcnN0LEBhIF9fbGFzdCkgaW50byB0aGUgJWZvcndhcmRfbGlzdCBhZnRlciB0aGUKKyAgICAgICAqICBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgQGEgX19wb3MuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0aW9uIGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc2VydGVkIGFuZAorICAgICAgICogIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgaW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLAorICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIHRoZSBjb250ZW50cyBvZiBhbiBpbml0aWFsaXplcl9saXN0IGludG8KKyAgICAgICAqICAgICAgICAgICVmb3J3YXJkX2xpc3QgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgX19pbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdCBvZiB2YWx1ZV90eXBlLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBsYXN0IGluc2VydGVkIGVsZW1lbnQKKyAgICAgICAqICAgICAgICAgICBvciBAYSBfX3BvcyBpZiBAYSBfX2lsIGlzIGVtcHR5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGNvcGllcyBvZiB0aGUgZGF0YSBpbiB0aGUKKyAgICAgICAqICBpbml0aWFsaXplcl9saXN0IEBhIF9faWwgaW50byB0aGUgJWZvcndhcmRfbGlzdCBiZWZvcmUgdGhlIGxvY2F0aW9uCisgICAgICAgKiAgc3BlY2lmaWVkIGJ5IEBhIF9fcG9zLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdGlvbiBpcyBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbnNlcnRlZCBhbmQKKyAgICAgICAqICBkb2VzIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3Bvcywgc3RkOjppbml0aWFsaXplcl9saXN0PF9UcD4gX19pbCkKKyAgICAgIHsgcmV0dXJuIGluc2VydF9hZnRlcihfX3BvcywgX19pbC5iZWdpbigpLCBfX2lsLmVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSB0aGUgaXRlcmF0b3IgZm9sbG93aW5nCisgICAgICAgKiAgICAgICAgICBAYyBwb3MuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgSXRlcmF0b3IgcG9pbnRpbmcgYmVmb3JlIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IGZvbGxvd2luZyB0aGUgb25lCisgICAgICAgKiAgICAgICAgICAgdGhhdCB3YXMgZXJhc2VkLCBvciBlbmQoKSBpZiBubyBzdWNoIGVsZW1lbnQgZXhpc3RzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgZXJhc2UgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZAorICAgICAgICogIHRodXMgc2hvcnRlbiB0aGUgJWZvcndhcmRfbGlzdCBieSBvbmUuCisgICAgICAgKgorICAgICAgICogIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWZvcndhcmRfbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4gYmUgZG9uZQorICAgICAgICogIGluIGNvbnN0YW50IHRpbWUsIGFuZCBvbmx5IGludmFsaWRhdGVzIGl0ZXJhdG9ycy9yZWZlcmVuY2VzIHRvCisgICAgICAgKiAgdGhlIGVsZW1lbnQgYmVpbmcgcmVtb3ZlZC4gIFRoZSB1c2VyIGlzIGFsc28gY2F1dGlvbmVkIHRoYXQKKyAgICAgICAqICB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudAorICAgICAgICogIGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbgorICAgICAgICogIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MpCisgICAgICB7IHJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9lcmFzZV9hZnRlcihjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPgorCQkJCQkgICAgIChfX3Bvcy5fTV9ub2RlKSkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGEgcmFuZ2Ugb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgSXRlcmF0b3IgcG9pbnRpbmcgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgZXJhc2VkLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50IHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuICBAIF9fbGFzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGVyYXNlIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UKKyAgICAgICAqICBAYSAoX19wb3MsX19sYXN0KSBhbmQgc2hvcnRlbiB0aGUgJWZvcndhcmRfbGlzdCBhY2NvcmRpbmdseS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvcGVyYXRpb24gaXMgbGluZWFyIHRpbWUgaW4gdGhlIHNpemUgb2YgdGhlIHJhbmdlIGFuZCBvbmx5CisgICAgICAgKiAgaW52YWxpZGF0ZXMgaXRlcmF0b3JzL3JlZmVyZW5jZXMgdG8gdGhlIGVsZW1lbnQgYmVpbmcgcmVtb3ZlZC4KKyAgICAgICAqICBUaGUgdXNlciBpcyBhbHNvIGNhdXRpb25lZCB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlCisgICAgICAgKiAgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlCisgICAgICAgKiAgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyCisgICAgICAgKiAgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9lcmFzZV9hZnRlcihjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPgorCQkJCQkgICAgIChfX3Bvcy5fTV9ub2RlKSwKKwkJCQkJICAgICBjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPgorCQkJCQkgICAgIChfX2xhc3QuX01fbm9kZSkpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICVmb3J3YXJkX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2xpc3QgIEEgJWZvcndhcmRfbGlzdCBvZiB0aGUgc2FtZSBlbGVtZW50IGFuZCBhbGxvY2F0b3IKKyAgICAgICAqICAgICAgICAgICAgICAgICAgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZXhjaGFuZ2VzIHRoZSBlbGVtZW50cyBiZXR3ZWVuIHR3byBsaXN0cyBpbiBjb25zdGFudAorICAgICAgICogIHRpbWUuICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzdGQ6OnN3YXAoKSBmdW5jdGlvbiBpcworICAgICAgICogIHNwZWNpYWxpemVkIHN1Y2ggdGhhdCBzdGQ6OnN3YXAobDEsbDIpIHdpbGwgZmVlZCB0byB0aGlzCisgICAgICAgKiAgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoZm9yd2FyZF9saXN0JiBfX2xpc3QpCisgICAgICBub2V4Y2VwdChfTm9kZV9hbGxvY190cmFpdHM6Ol9TX25vdGhyb3dfc3dhcCgpKQorICAgICAgeworICAgICAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQsCisJCSAgX19saXN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0KTsKKwlfTm9kZV9hbGxvY190cmFpdHM6Ol9TX29uX3N3YXAodGhpcy0+X01fZ2V0X05vZGVfYWxsb2NhdG9yKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xpc3QuX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgUmVzaXplcyB0aGUgJWZvcndhcmRfbGlzdCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZgorICAgICAgICogICAgICAgICBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gX19zeiBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICVmb3J3YXJkX2xpc3Qgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCAlcmVzaXplIHRoZSAlZm9yd2FyZF9saXN0IHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMuICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAqICAlZm9yd2FyZF9saXN0J3MgY3VycmVudCBudW1iZXIgb2YgZWxlbWVudHMgdGhlICVmb3J3YXJkX2xpc3QKKyAgICAgICAqICBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSB0aGUgJWZvcndhcmRfbGlzdCBpcyBleHRlbmRlZCBhbmQgdGhlCisgICAgICAgKiAgbmV3IGVsZW1lbnRzIGFyZSBkZWZhdWx0IGNvbnN0cnVjdGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fc3opOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgUmVzaXplcyB0aGUgJWZvcndhcmRfbGlzdCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZgorICAgICAgICogICAgICAgICBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gX19zeiBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICVmb3J3YXJkX2xpc3Qgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKiAgQHBhcmFtIF9fdmFsIERhdGEgd2l0aCB3aGljaCBuZXcgZWxlbWVudHMgc2hvdWxkIGJlIHBvcHVsYXRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsICVyZXNpemUgdGhlICVmb3J3YXJkX2xpc3QgdG8gdGhlIHNwZWNpZmllZAorICAgICAgICogIG51bWJlciBvZiBlbGVtZW50cy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZQorICAgICAgICogICVmb3J3YXJkX2xpc3QncyBjdXJyZW50IG51bWJlciBvZiBlbGVtZW50cyB0aGUgJWZvcndhcmRfbGlzdAorICAgICAgICogIGlzIHRydW5jYXRlZCwgb3RoZXJ3aXNlIHRoZSAlZm9yd2FyZF9saXN0IGlzIGV4dGVuZGVkIGFuZCBuZXcKKyAgICAgICAqICBlbGVtZW50cyBhcmUgcG9wdWxhdGVkIHdpdGggZ2l2ZW4gZGF0YS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRXJhc2VzIGFsbCB0aGUgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzCisgICAgICAgKiAgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUKKyAgICAgICAqICBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuCisgICAgICAgKiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBub2V4Y2VwdAorICAgICAgeyB0aGlzLT5fTV9lcmFzZV9hZnRlcigmdGhpcy0+X01faW1wbC5fTV9oZWFkLCAwKTsgfQorCisgICAgICAvLyAyMy4zLjQuNiBmb3J3YXJkX2xpc3Qgb3BlcmF0aW9uczoKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgY29udGVudHMgb2YgYW5vdGhlciAlZm9yd2FyZF9saXN0LgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBlbGVtZW50IHRvIGluc2VydCBhZnRlci4KKyAgICAgICAqICBAcGFyYW0gIF9fbGlzdCAgU291cmNlIGxpc3QuCisgICAgICAgKgorICAgICAgICogIFRoZSBlbGVtZW50cyBvZiBAYSBsaXN0IGFyZSBpbnNlcnRlZCBpbiBjb25zdGFudCB0aW1lIGFmdGVyCisgICAgICAgKiAgdGhlIGVsZW1lbnQgcmVmZXJlbmNlZCBieSBAYSBwb3MuICBAYSBsaXN0IGJlY29tZXMgYW4gZW1wdHkKKyAgICAgICAqICBsaXN0LgorICAgICAgICoKKyAgICAgICAqICBSZXF1aXJlcyB0aGlzICE9IEBhIHguCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgZm9yd2FyZF9saXN0JiYgX19saXN0KQorICAgICAgeworCWlmICghX19saXN0LmVtcHR5KCkpCisJICBfTV9zcGxpY2VfYWZ0ZXIoX19wb3MsIF9fbGlzdC5iZWZvcmVfYmVnaW4oKSwgX19saXN0LmVuZCgpKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3BsaWNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBmb3J3YXJkX2xpc3QmIF9fbGlzdCkKKyAgICAgIHsgc3BsaWNlX2FmdGVyKF9fcG9zLCBzdGQ6Om1vdmUoX19saXN0KSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgZWxlbWVudCBmcm9tIGFub3RoZXIgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBpbnNlcnQgYWZ0ZXIuCisgICAgICAgKiAgQHBhcmFtICBfX2xpc3QgIFNvdXJjZSBsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19pICAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGVsZW1lbnQgYmVmb3JlIHRoZSBlbGVtZW50CisgICAgICAgKiAgICAgICAgICAgICAgICB0byBtb3ZlLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBlbGVtZW50IGluIGxpc3QgQGEgbGlzdCByZWZlcmVuY2VkIGJ5IEBhIGkgYW5kCisgICAgICAgKiAgaW5zZXJ0cyBpdCBpbnRvIHRoZSBjdXJyZW50IGxpc3QgYWZ0ZXIgQGEgcG9zLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzcGxpY2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIGZvcndhcmRfbGlzdCYmIF9fbGlzdCwKKyAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvciBfX2kpOworCisgICAgICB2b2lkCisgICAgICBzcGxpY2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIGZvcndhcmRfbGlzdCYgX19saXN0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faSkKKyAgICAgIHsgc3BsaWNlX2FmdGVyKF9fcG9zLCBzdGQ6Om1vdmUoX19saXN0KSwgX19pKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCByYW5nZSBmcm9tIGFub3RoZXIgJWZvcndhcmRfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBpbnNlcnQgYWZ0ZXIuCisgICAgICAgKiAgQHBhcmFtICBfX2xpc3QgIFNvdXJjZSBsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19iZWZvcmUgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGJlZm9yZSB0aGUgc3RhcnQgb2YgcmFuZ2UKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICBpbiBsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZW5kIG9mIHJhbmdlIGluIGxpc3QuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgZWxlbWVudHMgaW4gdGhlIHJhbmdlIChfX2JlZm9yZSxfX2xhc3QpIGFuZCBpbnNlcnRzIHRoZW0KKyAgICAgICAqICBhZnRlciBAYSBfX3BvcyBpbiBjb25zdGFudCB0aW1lLgorICAgICAgICoKKyAgICAgICAqICBVbmRlZmluZWQgaWYgQGEgX19wb3MgaXMgaW4gKF9fYmVmb3JlLF9fbGFzdCkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgZm9yd2FyZF9saXN0JiYsCisgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgX19iZWZvcmUsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgX01fc3BsaWNlX2FmdGVyKF9fcG9zLCBfX2JlZm9yZSwgX19sYXN0KTsgfQorCisgICAgICB2b2lkCisgICAgICBzcGxpY2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIGZvcndhcmRfbGlzdCYsCisgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3IgX19iZWZvcmUsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgX01fc3BsaWNlX2FmdGVyKF9fcG9zLCBfX2JlZm9yZSwgX19sYXN0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBhbGwgZWxlbWVudHMgZXF1YWwgdG8gdmFsdWUuCisgICAgICAgKiAgQHBhcmFtICBfX3ZhbCAgVGhlIHZhbHVlIHRvIHJlbW92ZS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyBldmVyeSBlbGVtZW50IGluIHRoZSBsaXN0IGVxdWFsIHRvIEBhIF9fdmFsLgorICAgICAgICogIFJlbWFpbmluZyBlbGVtZW50cyBzdGF5IGluIGxpc3Qgb3JkZXIuICBOb3RlIHRoYXQgdGhpcworICAgICAgICogIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzCisgICAgICAgKiAgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QKKyAgICAgICAqICB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgYWxsIGVsZW1lbnRzIHNhdGlzZnlpbmcgYSBwcmVkaWNhdGUuCisgICAgICAgKiAgQHBhcmFtICBfX3ByZWQgIFVuYXJ5IHByZWRpY2F0ZSBmdW5jdGlvbiBvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgZXZlcnkgZWxlbWVudCBpbiB0aGUgbGlzdCBmb3Igd2hpY2ggdGhlIHByZWRpY2F0ZQorICAgICAgICogIHJldHVybnMgdHJ1ZS4gIFJlbWFpbmluZyBlbGVtZW50cyBzdGF5IGluIGxpc3Qgb3JkZXIuICBOb3RlCisgICAgICAgKiAgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlCisgICAgICAgKiAgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcworICAgICAgICogIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkPgorICAgICAgICB2b2lkCisgICAgICAgIHJlbW92ZV9pZihfUHJlZCBfX3ByZWQpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIEZvciBlYWNoIGNvbnNlY3V0aXZlIHNldCBvZiBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIHZhbHVlLAorICAgICAgICogIHJlbW92ZSBhbGwgYnV0IHRoZSBmaXJzdCBvbmUuICBSZW1haW5pbmcgZWxlbWVudHMgc3RheSBpbgorICAgICAgICogIGxpc3Qgb3JkZXIuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUKKyAgICAgICAqICBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLAorICAgICAgICogIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcKKyAgICAgICAqICB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICB1bmlxdWUoKQorICAgICAgeyB1bmlxdWUoc3RkOjplcXVhbF90bzxfVHA+KCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGNvbnNlY3V0aXZlIGVsZW1lbnRzIHNhdGlzZnlpbmcgYSBwcmVkaWNhdGUuCisgICAgICAgKiAgQHBhcmFtICBfX2JpbmFyeV9wcmVkICBCaW5hcnkgcHJlZGljYXRlIGZ1bmN0aW9uIG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIGVhY2ggY29uc2VjdXRpdmUgc2V0IG9mIGVsZW1lbnRzIFtmaXJzdCxsYXN0KSB0aGF0CisgICAgICAgKiAgc2F0aXNmeSBwcmVkaWNhdGUoZmlyc3QsaSkgd2hlcmUgaSBpcyBhbiBpdGVyYXRvciBpbgorICAgICAgICogIFtmaXJzdCxsYXN0KSwgcmVtb3ZlIGFsbCBidXQgdGhlIGZpcnN0IG9uZS4gIFJlbWFpbmluZworICAgICAgICogIGVsZW1lbnRzIHN0YXkgaW4gbGlzdCBvcmRlci4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkKKyAgICAgICAqICBlcmFzZXMgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUKKyAgICAgICAqICBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuCisgICAgICAgKiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpblByZWQ+CisgICAgICAgIHZvaWQKKyAgICAgICAgdW5pcXVlKF9CaW5QcmVkIF9fYmluYXJ5X3ByZWQpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1lcmdlIHNvcnRlZCBsaXN0cy4KKyAgICAgICAqICBAcGFyYW0gIF9fbGlzdCAgU29ydGVkIGxpc3QgdG8gbWVyZ2UuCisgICAgICAgKgorICAgICAgICogIEFzc3VtZXMgdGhhdCBib3RoIEBhIGxpc3QgYW5kIHRoaXMgbGlzdCBhcmUgc29ydGVkIGFjY29yZGluZyB0bworICAgICAgICogIG9wZXJhdG9yPCgpLiAgTWVyZ2VzIGVsZW1lbnRzIG9mIEBhIF9fbGlzdCBpbnRvIHRoaXMgbGlzdCBpbgorICAgICAgICogIHNvcnRlZCBvcmRlciwgbGVhdmluZyBAYSBfX2xpc3QgZW1wdHkgd2hlbiBjb21wbGV0ZS4gIEVsZW1lbnRzIGluCisgICAgICAgKiAgdGhpcyBsaXN0IHByZWNlZGUgZWxlbWVudHMgaW4gQGEgX19saXN0IHRoYXQgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBtZXJnZShmb3J3YXJkX2xpc3QmJiBfX2xpc3QpCisgICAgICB7IG1lcmdlKHN0ZDo6bW92ZShfX2xpc3QpLCBzdGQ6Omxlc3M8X1RwPigpKTsgfQorCisgICAgICB2b2lkCisgICAgICBtZXJnZShmb3J3YXJkX2xpc3QmIF9fbGlzdCkKKyAgICAgIHsgbWVyZ2Uoc3RkOjptb3ZlKF9fbGlzdCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWVyZ2Ugc29ydGVkIGxpc3RzIGFjY29yZGluZyB0byBjb21wYXJpc29uIGZ1bmN0aW9uLgorICAgICAgICogIEBwYXJhbSAgX19saXN0ICBTb3J0ZWQgbGlzdCB0byBtZXJnZS4KKyAgICAgICAqICBAcGFyYW0gIF9fY29tcCBDb21wYXJpc29uIGZ1bmN0aW9uIGRlZmluaW5nIHNvcnQgb3JkZXIuCisgICAgICAgKgorICAgICAgICogIEFzc3VtZXMgdGhhdCBib3RoIEBhIF9fbGlzdCBhbmQgdGhpcyBsaXN0IGFyZSBzb3J0ZWQgYWNjb3JkaW5nIHRvCisgICAgICAgKiAgY29tcC4gIE1lcmdlcyBlbGVtZW50cyBvZiBAYSBfX2xpc3QgaW50byB0aGlzIGxpc3QKKyAgICAgICAqICBpbiBzb3J0ZWQgb3JkZXIsIGxlYXZpbmcgQGEgX19saXN0IGVtcHR5IHdoZW4gY29tcGxldGUuICBFbGVtZW50cworICAgICAgICogIGluIHRoaXMgbGlzdCBwcmVjZWRlIGVsZW1lbnRzIGluIEBhIF9fbGlzdCB0aGF0IGFyZSBlcXVpdmFsZW50CisgICAgICAgKiAgYWNjb3JkaW5nIHRvIGNvbXAoKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXA+CisgICAgICAgIHZvaWQKKyAgICAgICAgbWVyZ2UoZm9yd2FyZF9saXN0JiYgX19saXN0LCBfQ29tcCBfX2NvbXApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcD4KKyAgICAgICAgdm9pZAorICAgICAgICBtZXJnZShmb3J3YXJkX2xpc3QmIF9fbGlzdCwgX0NvbXAgX19jb21wKQorICAgICAgICB7IG1lcmdlKHN0ZDo6bW92ZShfX2xpc3QpLCBfX2NvbXApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU29ydCB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QuCisgICAgICAgKgorICAgICAgICogIFNvcnRzIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgaW4gTmxvZ04gdGltZS4gIEVxdWl2YWxlbnQKKyAgICAgICAqICBlbGVtZW50cyByZW1haW4gaW4gbGlzdCBvcmRlci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc29ydCgpCisgICAgICB7IHNvcnQoc3RkOjpsZXNzPF9UcD4oKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTb3J0IHRoZSBmb3J3YXJkX2xpc3QgdXNpbmcgYSBjb21wYXJpc29uIGZ1bmN0aW9uLgorICAgICAgICoKKyAgICAgICAqICBTb3J0cyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGluIE5sb2dOIHRpbWUuICBFcXVpdmFsZW50CisgICAgICAgKiAgZWxlbWVudHMgcmVtYWluIGluIGxpc3Qgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wPgorICAgICAgICB2b2lkCisgICAgICAgIHNvcnQoX0NvbXAgX19jb21wKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXZlcnNlIHRoZSBlbGVtZW50cyBpbiBsaXN0LgorICAgICAgICoKKyAgICAgICAqICBSZXZlcnNlIHRoZSBvcmRlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBpbiBsaW5lYXIgdGltZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmV2ZXJzZSgpIG5vZXhjZXB0CisgICAgICB7IHRoaXMtPl9NX2ltcGwuX01faGVhZC5fTV9yZXZlcnNlX2FmdGVyKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGNvbnN0cnVjdG9yIHRvIGltcGxlbWVudCBbMjMuMy40LjJdLzkKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IGZvcndhcmRfbGlzdChuLHYsYSksIGFuZCB0aGUgcmFuZ2UgY29uc3RydWN0b3Igd2hlbiBpdAorICAgICAgLy8gdHVybnMgb3V0IHRvIGJlIHRoZSBzYW1lIHRoaW5nLgorICAgICAgdm9pZAorICAgICAgX01fZmlsbF9pbml0aWFsaXplKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUpOworCisgICAgICAvLyBDYWxsZWQgYnkgc3BsaWNlX2FmdGVyIGFuZCBpbnNlcnRfYWZ0ZXIuCisgICAgICBpdGVyYXRvcgorICAgICAgX01fc3BsaWNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBjb25zdF9pdGVyYXRvciBfX2JlZm9yZSwKKwkJICAgICAgY29uc3RfaXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IGZvcndhcmRfbGlzdChuKS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlZmF1bHRfaW5pdGlhbGl6ZShzaXplX3R5cGUgX19uKTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IHJlc2l6ZShzeikuCisgICAgICB2b2lkCisgICAgICBfTV9kZWZhdWx0X2luc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIC8vIENhbGxlZCBieSBvcGVyYXRvcj0oZm9yd2FyZF9saXN0JiYpCisgICAgICB2b2lkCisgICAgICBfTV9tb3ZlX2Fzc2lnbihmb3J3YXJkX2xpc3QmJiBfX2xpc3QsIHN0ZDo6dHJ1ZV90eXBlKSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBjbGVhcigpOworICAgICAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQsCisgICAgICAgICAgICAgICAgICBfX2xpc3QuX01faW1wbC5fTV9oZWFkLl9NX25leHQpOworICAgICAgICBzdGQ6Ol9fYWxsb2Nfb25fbW92ZSh0aGlzLT5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19saXN0Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKTsKKyAgICAgIH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IG9wZXJhdG9yPShmb3J3YXJkX2xpc3QmJikKKyAgICAgIHZvaWQKKyAgICAgIF9NX21vdmVfYXNzaWduKGZvcndhcmRfbGlzdCYmIF9fbGlzdCwgc3RkOjpmYWxzZV90eXBlKQorICAgICAgeworICAgICAgICBpZiAoX19saXN0Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpID09IHRoaXMtPl9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKQorICAgICAgICAgIF9NX21vdmVfYXNzaWduKHN0ZDo6bW92ZShfX2xpc3QpLCBzdGQ6OnRydWVfdHlwZSgpKTsKKyAgICAgICAgZWxzZQorCSAgLy8gVGhlIHJ2YWx1ZSdzIGFsbG9jYXRvciBjYW5ub3QgYmUgbW92ZWQsIG9yIGlzIG5vdCBlcXVhbCwKKwkgIC8vIHNvIHdlIG5lZWQgdG8gaW5kaXZpZHVhbGx5IG1vdmUgZWFjaCBlbGVtZW50LgorCSAgdGhpcy0+YXNzaWduKHN0ZDo6X19tYWtlX21vdmVfaWZfbm9leGNlcHRfaXRlcmF0b3IoX19saXN0LmJlZ2luKCkpLAorCQkgICAgICAgc3RkOjpfX21ha2VfbW92ZV9pZl9ub2V4Y2VwdF9pdGVyYXRvcihfX2xpc3QuZW5kKCkpKTsKKyAgICAgIH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IGFzc2lnbihfSW5wdXRJdGVyYXRvciwgX0lucHV0SXRlcmF0b3IpIGlmIF9UcCBpcworICAgICAgLy8gQ29weUFzc2lnbmFibGUuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl2b2lkCisgICAgICAgIF9NX2Fzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIHRydWVfdHlwZSkKKwl7CisJICBhdXRvIF9fcHJldiA9IGJlZm9yZV9iZWdpbigpOworCSAgYXV0byBfX2N1cnIgPSBiZWdpbigpOworCSAgYXV0byBfX2VuZCA9IGVuZCgpOworCSAgd2hpbGUgKF9fY3VyciAhPSBfX2VuZCAmJiBfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgICAgeworCSAgICAgICpfX2N1cnIgPSAqX19maXJzdDsKKwkgICAgICArK19fcHJldjsKKwkgICAgICArK19fY3VycjsKKwkgICAgICArK19fZmlyc3Q7CisJICAgIH0KKwkgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgICAgaW5zZXJ0X2FmdGVyKF9fcHJldiwgX19maXJzdCwgX19sYXN0KTsKKwkgIGVsc2UgaWYgKF9fY3VyciAhPSBfX2VuZCkKKwkgICAgZXJhc2VfYWZ0ZXIoX19wcmV2LCBfX2VuZCk7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IGFzc2lnbihfSW5wdXRJdGVyYXRvciwgX0lucHV0SXRlcmF0b3IpIGlmIF9UcCBpcyBub3QKKyAgICAgIC8vIENvcHlBc3NpZ25hYmxlLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdm9pZAorICAgICAgICBfTV9hc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBmYWxzZV90eXBlKQorCXsKKwkgIGNsZWFyKCk7CisJICBpbnNlcnRfYWZ0ZXIoY2JlZm9yZV9iZWdpbigpLCBfX2ZpcnN0LCBfX2xhc3QpOworCX0KKworICAgICAgLy8gQ2FsbGVkIGJ5IGFzc2lnbihzaXplX3R5cGUsIGNvbnN0IF9UcCYpIGlmIFRwIGlzIENvcHlBc3NpZ25hYmxlCisgICAgICB2b2lkCisgICAgICBfTV9hc3NpZ25fbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsLCB0cnVlX3R5cGUpCisgICAgICB7CisJYXV0byBfX3ByZXYgPSBiZWZvcmVfYmVnaW4oKTsKKwlhdXRvIF9fY3VyciA9IGJlZ2luKCk7CisJYXV0byBfX2VuZCA9IGVuZCgpOworCXdoaWxlIChfX2N1cnIgIT0gX19lbmQgJiYgX19uID4gMCkKKwkgIHsKKwkgICAgKl9fY3VyciA9IF9fdmFsOworCSAgICArK19fcHJldjsKKwkgICAgKytfX2N1cnI7CisJICAgIC0tX19uOworCSAgfQorCWlmIChfX24gPiAwKQorCSAgaW5zZXJ0X2FmdGVyKF9fcHJldiwgX19uLCBfX3ZhbCk7CisJZWxzZSBpZiAoX19jdXJyICE9IF9fZW5kKQorCSAgZXJhc2VfYWZ0ZXIoX19wcmV2LCBfX2VuZCk7CisgICAgICB9CisKKyAgICAgIC8vIENhbGxlZCBieSBhc3NpZ24oc2l6ZV90eXBlLCBjb25zdCBfVHAmKSBpZiBUcCBpcyBub24tQ29weUFzc2lnbmFibGUKKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbl9uKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwsIGZhbHNlX3R5cGUpCisgICAgICB7CisJY2xlYXIoKTsKKwlpbnNlcnRfYWZ0ZXIoY2JlZm9yZV9iZWdpbigpLCBfX24sIF9fdmFsKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBGb3J3YXJkIGxpc3QgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgX19seCAgQSAlZm9yd2FyZF9saXN0CisgICAqICBAcGFyYW0gIF9fbHkgIEEgJWZvcndhcmRfbGlzdCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIF9fbHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiB0aGUgZWxlbWVudHMgb2YgdGhlIGZvcndhcmQgbGlzdHMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIAorICAgKiAgZWxlbWVudHMgb2YgdGhlIGZvcndhcmQgbGlzdHMuICBEZXF1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudAorICAgKiAgaWYgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb21wYXJlIGVxdWFsLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBGb3J3YXJkIGxpc3Qgb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIF9fbHggIEEgJWZvcndhcmRfbGlzdC4KKyAgICogIEBwYXJhbSAgX19seSAgQSAlZm9yd2FyZF9saXN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgX19seC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIEBhIF9fbHggaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIEBhIF9fbHkuCisgICAqCisgICAqICBUaGlzIGlzIGEgdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIG51bWJlciBvZiAKKyAgICogIGVsZW1lbnRzIG9mIHRoZSBmb3J3YXJkIGxpc3RzLiAgVGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZQorICAgKiAgd2l0aCBAYyA8LgorICAgKgorICAgKiAgU2VlIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKSBmb3IgaG93IHRoZSBkZXRlcm1pbmF0aW9uIGlzIG1hZGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x4LAorICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x5KQorICAgIHsgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX19seC5jYmVnaW4oKSwgX19seC5jZW5kKCksCisJCQkJCSAgX19seS5jYmVnaW4oKSwgX19seS5jZW5kKCkpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPT0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x5KQorICAgIHsgcmV0dXJuICEoX19seCA9PSBfX2x5KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiAoX19seSA8IF9fbHgpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeyByZXR1cm4gIShfX2x4IDwgX19seSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x4LAorICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiAhKF9fbHkgPCBfX2x4KTsgfQorCisgIC8vLyBTZWUgc3RkOjpmb3J3YXJkX2xpc3Q6OnN3YXAoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisJIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeyBfX2x4LnN3YXAoX19seSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gX0ZPUldBUkRfTElTVF9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZm9yd2FyZF9saXN0LnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9mb3J3YXJkX2xpc3QudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2U4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZm9yd2FyZF9saXN0LnRjYwpAQCAtMCwwICsxLDUxMSBAQAorLy8gPGZvcndhcmRfbGlzdC50Y2M+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2ZvcndhcmRfbGlzdC50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtmb3J3YXJkX2xpc3R9CisgKi8KKworI2lmbmRlZiBfRk9SV0FSRF9MSVNUX1RDQworI2RlZmluZSBfRk9SV0FSRF9MSVNUX1RDQyAxCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9Gd2RfbGlzdF9iYXNlPF9UcCwgX0FsbG9jPjo6CisgICAgX0Z3ZF9saXN0X2Jhc2UoX0Z3ZF9saXN0X2Jhc2UmJiBfX2xzdCwgY29uc3QgX05vZGVfYWxsb2NfdHlwZSYgX19hKQorICAgIDogX01faW1wbChfX2EpCisgICAgeworICAgICAgaWYgKF9fbHN0Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpID09IF9fYSkKKwl7CisJICB0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCA9IF9fbHN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0OworCSAgX19sc3QuX01faW1wbC5fTV9oZWFkLl9NX25leHQgPSAwOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHRoaXMtPl9NX2ltcGwuX01faGVhZC5fTV9uZXh0ID0gMDsKKyAgICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX3RvID0gJnRoaXMtPl9NX2ltcGwuX01faGVhZDsKKyAgICAgICAgICBfTm9kZSogX19jdXJyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX2xzdC5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCk7CisKKyAgICAgICAgICB3aGlsZSAoX19jdXJyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX3RvLT5fTV9uZXh0ID0KKyAgICAgICAgICAgICAgICBfTV9jcmVhdGVfbm9kZShzdGQ6Om1vdmVfaWZfbm9leGNlcHQoKl9fY3Vyci0+X01fdmFscHRyKCkpKTsKKyAgICAgICAgICAgICAgX190byA9IF9fdG8tPl9NX25leHQ7CisgICAgICAgICAgICAgIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXJyLT5fTV9uZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIF9Gd2RfbGlzdF9ub2RlX2Jhc2UqCisgICAgICBfRndkX2xpc3RfYmFzZTxfVHAsIF9BbGxvYz46OgorICAgICAgX01faW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSogX190bworCSAgPSBjb25zdF9jYXN0PF9Gd2RfbGlzdF9ub2RlX2Jhc2UqPihfX3Bvcy5fTV9ub2RlKTsKKwlfTm9kZSogX190aGluZyA9IF9NX2NyZWF0ZV9ub2RlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICAgIF9fdGhpbmctPl9NX25leHQgPSBfX3RvLT5fTV9uZXh0OworICAgICAgICBfX3RvLT5fTV9uZXh0ID0gX190aGluZzsKKyAgICAgICAgcmV0dXJuIF9fdG8tPl9NX25leHQ7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSoKKyAgICBfRndkX2xpc3RfYmFzZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2VyYXNlX2FmdGVyKF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fcG9zKQorICAgIHsKKyAgICAgIF9Ob2RlKiBfX2N1cnIgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcG9zLT5fTV9uZXh0KTsKKyAgICAgIF9fcG9zLT5fTV9uZXh0ID0gX19jdXJyLT5fTV9uZXh0OworICAgICAgX1RwX2FsbG9jX3R5cGUgX19hKF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKTsKKyAgICAgIGFsbG9jYXRvcl90cmFpdHM8X1RwX2FsbG9jX3R5cGU+OjpkZXN0cm95KF9fYSwgX19jdXJyLT5fTV92YWxwdHIoKSk7CisgICAgICBfX2N1cnItPn5fTm9kZSgpOworICAgICAgX01fcHV0X25vZGUoX19jdXJyKTsKKyAgICAgIHJldHVybiBfX3Bvcy0+X01fbmV4dDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX0Z3ZF9saXN0X25vZGVfYmFzZSoKKyAgICBfRndkX2xpc3RfYmFzZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2VyYXNlX2FmdGVyKF9Gd2RfbGlzdF9ub2RlX2Jhc2UqIF9fcG9zLCAKKyAgICAgICAgICAgICAgICAgICBfRndkX2xpc3Rfbm9kZV9iYXNlKiBfX2xhc3QpCisgICAgeworICAgICAgX05vZGUqIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19wb3MtPl9NX25leHQpOworICAgICAgd2hpbGUgKF9fY3VyciAhPSBfX2xhc3QpCisgICAgICAgIHsKKyAgICAgICAgICBfTm9kZSogX190ZW1wID0gX19jdXJyOworICAgICAgICAgIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXJyLT5fTV9uZXh0KTsKKwkgIF9UcF9hbGxvY190eXBlIF9fYShfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSk7CisJICBhbGxvY2F0b3JfdHJhaXRzPF9UcF9hbGxvY190eXBlPjo6ZGVzdHJveShfX2EsIF9fdGVtcC0+X01fdmFscHRyKCkpOworCSAgX190ZW1wLT5+X05vZGUoKTsKKyAgICAgICAgICBfTV9wdXRfbm9kZShfX3RlbXApOworICAgICAgICB9CisgICAgICBfX3Bvcy0+X01fbmV4dCA9IF9fbGFzdDsKKyAgICAgIHJldHVybiBfX2xhc3Q7CisgICAgfQorCisgIC8vIENhbGxlZCBieSB0aGUgcmFuZ2UgY29uc3RydWN0b3IgdG8gaW1wbGVtZW50IFsyMy4zLjQuMl0vOQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisgICAgICAgIF9Ob2RlX2Jhc2UqIF9fdG8gPSAmdGhpcy0+X01faW1wbC5fTV9oZWFkOworICAgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBfX3RvLT5fTV9uZXh0ID0gdGhpcy0+X01fY3JlYXRlX25vZGUoKl9fZmlyc3QpOworICAgICAgICAgICAgX190byA9IF9fdG8tPl9NX25leHQ7CisgICAgICAgICAgfQorICAgICAgfQorCisgIC8vIENhbGxlZCBieSBmb3J3YXJkX2xpc3Qobix2LGEpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgX01fZmlsbF9pbml0aWFsaXplKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgeworICAgICAgX05vZGVfYmFzZSogX190byA9ICZ0aGlzLT5fTV9pbXBsLl9NX2hlYWQ7CisgICAgICBmb3IgKDsgX19uOyAtLV9fbikKKyAgICAgICAgeworICAgICAgICAgIF9fdG8tPl9NX25leHQgPSB0aGlzLT5fTV9jcmVhdGVfbm9kZShfX3ZhbHVlKTsKKyAgICAgICAgICBfX3RvID0gX190by0+X01fbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgX01fZGVmYXVsdF9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX05vZGVfYmFzZSogX190byA9ICZ0aGlzLT5fTV9pbXBsLl9NX2hlYWQ7CisgICAgICBmb3IgKDsgX19uOyAtLV9fbikKKyAgICAgICAgeworICAgICAgICAgIF9fdG8tPl9NX25leHQgPSB0aGlzLT5fTV9jcmVhdGVfbm9kZSgpOworICAgICAgICAgIF9fdG8gPSBfX3RvLT5fTV9uZXh0OworICAgICAgICB9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mCisgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3I9KGNvbnN0IGZvcndhcmRfbGlzdCYgX19saXN0KQorICAgIHsKKyAgICAgIGlmICgmX19saXN0ICE9IHRoaXMpCisgICAgICAgIHsKKwkgIGlmIChfTm9kZV9hbGxvY190cmFpdHM6Ol9TX3Byb3BhZ2F0ZV9vbl9jb3B5X2Fzc2lnbigpKQorCSAgICB7CisgICAgICAgICAgICAgIGF1dG8mIF9fdGhpc19hbGxvYyA9IHRoaXMtPl9NX2dldF9Ob2RlX2FsbG9jYXRvcigpOworICAgICAgICAgICAgICBhdXRvJiBfX3RoYXRfYWxsb2MgPSBfX2xpc3QuX01fZ2V0X05vZGVfYWxsb2NhdG9yKCk7CisgICAgICAgICAgICAgIGlmICghX05vZGVfYWxsb2NfdHJhaXRzOjpfU19hbHdheXNfZXF1YWwoKQorCSAgICAgICAgICAmJiBfX3RoaXNfYWxsb2MgIT0gX190aGF0X2FsbG9jKQorCSAgICAgICAgeworCQkgIC8vIHJlcGxhY2VtZW50IGFsbG9jYXRvciBjYW5ub3QgZnJlZSBleGlzdGluZyBzdG9yYWdlCisJCSAgY2xlYXIoKTsKKwkJfQorCSAgICAgIHN0ZDo6X19hbGxvY19vbl9jb3B5KF9fdGhpc19hbGxvYywgX190aGF0X2FsbG9jKTsKKyAgICAgICAgICAgIH0KKwkgIGFzc2lnbihfX2xpc3QuY2JlZ2luKCksIF9fbGlzdC5jZW5kKCkpOworICAgICAgICB9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9kZWZhdWx0X2luc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBfX3NhdmVkX3BvcyA9IF9fcG9zOworICAgICAgX190cnkKKwl7CisJICBmb3IgKDsgX19uOyAtLV9fbikKKwkgICAgX19wb3MgPSBlbXBsYWNlX2FmdGVyKF9fcG9zKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBlcmFzZV9hZnRlcihfX3NhdmVkX3BvcywgKytfX3Bvcyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICByZXNpemUoc2l6ZV90eXBlIF9fc3opCisgICAgeworICAgICAgaXRlcmF0b3IgX19rID0gYmVmb3JlX2JlZ2luKCk7CisKKyAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CisgICAgICB3aGlsZSAoX19rLl9NX25leHQoKSAhPSBlbmQoKSAmJiBfX2xlbiA8IF9fc3opCisgICAgICAgIHsKKyAgICAgICAgICArK19fazsKKyAgICAgICAgICArK19fbGVuOworICAgICAgICB9CisgICAgICBpZiAoX19sZW4gPT0gX19zeikKKyAgICAgICAgZXJhc2VfYWZ0ZXIoX19rLCBlbmQoKSk7CisgICAgICBlbHNlCisJX01fZGVmYXVsdF9pbnNlcnRfYWZ0ZXIoX19rLCBfX3N6IC0gX19sZW4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX2sgPSBiZWZvcmVfYmVnaW4oKTsKKworICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKKyAgICAgIHdoaWxlIChfX2suX01fbmV4dCgpICE9IGVuZCgpICYmIF9fbGVuIDwgX19zeikKKyAgICAgICAgeworICAgICAgICAgICsrX19rOworICAgICAgICAgICsrX19sZW47CisgICAgICAgIH0KKyAgICAgIGlmIChfX2xlbiA9PSBfX3N6KQorICAgICAgICBlcmFzZV9hZnRlcihfX2ssIGVuZCgpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgaW5zZXJ0X2FmdGVyKF9faywgX19zeiAtIF9fbGVuLCBfX3ZhbCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgX01fc3BsaWNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLAorCQkgICAgY29uc3RfaXRlcmF0b3IgX19iZWZvcmUsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBfTm9kZV9iYXNlKiBfX3RtcCA9IGNvbnN0X2Nhc3Q8X05vZGVfYmFzZSo+KF9fcG9zLl9NX25vZGUpOworICAgICAgX05vZGVfYmFzZSogX19iID0gY29uc3RfY2FzdDxfTm9kZV9iYXNlKj4oX19iZWZvcmUuX01fbm9kZSk7CisgICAgICBfTm9kZV9iYXNlKiBfX2VuZCA9IF9fYjsKKworICAgICAgd2hpbGUgKF9fZW5kICYmIF9fZW5kLT5fTV9uZXh0ICE9IF9fbGFzdC5fTV9ub2RlKQorCV9fZW5kID0gX19lbmQtPl9NX25leHQ7CisKKyAgICAgIGlmIChfX2IgIT0gX19lbmQpCisJcmV0dXJuIGl0ZXJhdG9yKF9fdG1wLT5fTV90cmFuc2Zlcl9hZnRlcihfX2IsIF9fZW5kKSk7ICAgICAgCisgICAgICBlbHNlCisJcmV0dXJuIGl0ZXJhdG9yKF9fdG1wKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIHNwbGljZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgZm9yd2FyZF9saXN0JiYsCisJCSBjb25zdF9pdGVyYXRvciBfX2kpCisgICAgeworICAgICAgY29uc3RfaXRlcmF0b3IgX19qID0gX19pOworICAgICAgKytfX2o7CisKKyAgICAgIGlmIChfX3BvcyA9PSBfX2kgfHwgX19wb3MgPT0gX19qKQorCXJldHVybjsKKworICAgICAgX05vZGVfYmFzZSogX190bXAgPSBjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPihfX3Bvcy5fTV9ub2RlKTsKKyAgICAgIF9fdG1wLT5fTV90cmFuc2Zlcl9hZnRlcihjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPihfX2kuX01fbm9kZSksCisJCQkgICAgICAgY29uc3RfY2FzdDxfTm9kZV9iYXNlKj4oX19qLl9NX25vZGUpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBpbnNlcnRfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpCisgICAgeworICAgICAgaWYgKF9fbikKKwl7CisJICBmb3J3YXJkX2xpc3QgX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKKwkgIHJldHVybiBfTV9zcGxpY2VfYWZ0ZXIoX19wb3MsIF9fdG1wLmJlZm9yZV9iZWdpbigpLCBfX3RtcC5lbmQoKSk7CisJfQorICAgICAgZWxzZQorCXJldHVybiBpdGVyYXRvcihjb25zdF9jYXN0PF9Ob2RlX2Jhc2UqPihfX3Bvcy5fTV9ub2RlKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZT4KKyAgICAgIHR5cGVuYW1lIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIGluc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywKKwkJICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCWZvcndhcmRfbGlzdCBfX3RtcChfX2ZpcnN0LCBfX2xhc3QsIGdldF9hbGxvY2F0b3IoKSk7CisJaWYgKCFfX3RtcC5lbXB0eSgpKQorCSAgcmV0dXJuIF9NX3NwbGljZV9hZnRlcihfX3BvcywgX190bXAuYmVmb3JlX2JlZ2luKCksIF9fdG1wLmVuZCgpKTsKKwllbHNlCisJICByZXR1cm4gaXRlcmF0b3IoY29uc3RfY2FzdDxfTm9kZV9iYXNlKj4oX19wb3MuX01fbm9kZSkpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICBfTm9kZSogX19jdXJyID0gc3RhdGljX2Nhc3Q8X05vZGUqPigmdGhpcy0+X01faW1wbC5fTV9oZWFkKTsKKyAgICAgIF9Ob2RlKiBfX2V4dHJhID0gMDsKKworICAgICAgd2hpbGUgKF9Ob2RlKiBfX3RtcCA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXJyLT5fTV9uZXh0KSkKKyAgICAgICAgeworICAgICAgICAgIGlmICgqX190bXAtPl9NX3ZhbHB0cigpID09IF9fdmFsKQorCSAgICB7CisJICAgICAgaWYgKF9fdG1wLT5fTV92YWxwdHIoKSAhPSBzdGQ6Ol9fYWRkcmVzc29mKF9fdmFsKSkKKwkJeworCQkgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3Vycik7CisJCSAgY29udGludWU7CisJCX0KKwkgICAgICBlbHNlCisJCV9fZXh0cmEgPSBfX2N1cnI7CisJICAgIH0KKwkgIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXJyLT5fTV9uZXh0KTsKKyAgICAgICAgfQorCisgICAgICBpZiAoX19leHRyYSkKKwl0aGlzLT5fTV9lcmFzZV9hZnRlcihfX2V4dHJhKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWQ+CisgICAgICB2b2lkCisgICAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIHJlbW92ZV9pZihfUHJlZCBfX3ByZWQpCisgICAgICB7CisJX05vZGUqIF9fY3VyciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oJnRoaXMtPl9NX2ltcGwuX01faGVhZCk7CisgICAgICAgIHdoaWxlIChfTm9kZSogX190bXAgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fY3Vyci0+X01fbmV4dCkpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKF9fcHJlZCgqX190bXAtPl9NX3ZhbHB0cigpKSkKKyAgICAgICAgICAgICAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19jdXJyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgX19jdXJyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX2N1cnItPl9NX25leHQpOworICAgICAgICAgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmluUHJlZD4KKyAgICAgIHZvaWQKKyAgICAgIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz46OgorICAgICAgdW5pcXVlKF9CaW5QcmVkIF9fYmluYXJ5X3ByZWQpCisgICAgICB7CisgICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOworICAgICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKKyAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKyAgICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKKyAgICAgICAgICAgIGVyYXNlX2FmdGVyKF9fZmlyc3QpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CisgICAgICAgICAgX19uZXh0ID0gX19maXJzdDsKKyAgICAgICAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wPgorICAgICAgdm9pZAorICAgICAgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPjo6CisgICAgICBtZXJnZShmb3J3YXJkX2xpc3QmJiBfX2xpc3QsIF9Db21wIF9fY29tcCkKKyAgICAgIHsKKyAgICAgICAgX05vZGVfYmFzZSogX19ub2RlID0gJnRoaXMtPl9NX2ltcGwuX01faGVhZDsKKyAgICAgICAgd2hpbGUgKF9fbm9kZS0+X01fbmV4dCAmJiBfX2xpc3QuX01faW1wbC5fTV9oZWFkLl9NX25leHQpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKF9fY29tcCgqc3RhdGljX2Nhc3Q8X05vZGUqPgorICAgICAgICAgICAgICAgICAgICAgICAoX19saXN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0KS0+X01fdmFscHRyKCksCisgICAgICAgICAgICAgICAgICAgICAgICpzdGF0aWNfY2FzdDxfTm9kZSo+CisgICAgICAgICAgICAgICAgICAgICAgIChfX25vZGUtPl9NX25leHQpLT5fTV92YWxwdHIoKSkpCisgICAgICAgICAgICAgIF9fbm9kZS0+X01fdHJhbnNmZXJfYWZ0ZXIoJl9fbGlzdC5fTV9pbXBsLl9NX2hlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19saXN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0KTsKKyAgICAgICAgICAgIF9fbm9kZSA9IF9fbm9kZS0+X01fbmV4dDsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChfX2xpc3QuX01faW1wbC5fTV9oZWFkLl9NX25leHQpCisgICAgICAgICAgeworICAgICAgICAgICAgX19ub2RlLT5fTV9uZXh0ID0gX19saXN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0OworICAgICAgICAgICAgX19saXN0Ll9NX2ltcGwuX01faGVhZC5fTV9uZXh0ID0gMDsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeworICAgICAgLy8gIFdlIGRvbid0IGhhdmUgc2l6ZSgpIHNvIHdlIG5lZWQgdG8gd2FsayB0aHJvdWdoIGJvdGggbGlzdHMKKyAgICAgIC8vICBtYWtpbmcgc3VyZSBib3RoIGl0ZXJhdG9ycyBhcmUgdmFsaWQuCisgICAgICBhdXRvIF9faXggPSBfX2x4LmNiZWdpbigpOworICAgICAgYXV0byBfX2l5ID0gX19seS5jYmVnaW4oKTsKKyAgICAgIHdoaWxlIChfX2l4ICE9IF9fbHguY2VuZCgpICYmIF9faXkgIT0gX19seS5jZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKl9faXggIT0gKl9faXkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgKytfX2l4OworICAgICAgICAgICsrX19peTsKKyAgICAgICAgfQorICAgICAgaWYgKF9faXggPT0gX19seC5jZW5kKCkgJiYgX19peSA9PSBfX2x5LmNlbmQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXA+CisgICAgICB2b2lkCisgICAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIHNvcnQoX0NvbXAgX19jb21wKQorICAgICAgeworICAgICAgICAvLyBJZiBgbmV4dCcgaXMgMCwgcmV0dXJuIGltbWVkaWF0ZWx5LgorICAgICAgICBfTm9kZSogX19saXN0ID0gc3RhdGljX2Nhc3Q8X05vZGUqPih0aGlzLT5fTV9pbXBsLl9NX2hlYWQuX01fbmV4dCk7CisgICAgICAgIGlmICghX19saXN0KQorICAgICAgICAgIHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBsb25nIF9faW5zaXplID0gMTsKKworICAgICAgICB3aGlsZSAoMSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBfTm9kZSogX19wID0gX19saXN0OworICAgICAgICAgICAgX19saXN0ID0gMDsKKyAgICAgICAgICAgIF9Ob2RlKiBfX3RhaWwgPSAwOworCisgICAgICAgICAgICAvLyBDb3VudCBudW1iZXIgb2YgbWVyZ2VzIHdlIGRvIGluIHRoaXMgcGFzcy4KKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19ubWVyZ2VzID0gMDsKKworICAgICAgICAgICAgd2hpbGUgKF9fcCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICsrX19ubWVyZ2VzOworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGV4aXN0cyBhIG1lcmdlIHRvIGJlIGRvbmUuCisgICAgICAgICAgICAgICAgLy8gU3RlcCBgaW5zaXplJyBwbGFjZXMgYWxvbmcgZnJvbSBwLgorICAgICAgICAgICAgICAgIF9Ob2RlKiBfX3EgPSBfX3A7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3BzaXplID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgX19pID0gMDsgX19pIDwgX19pbnNpemU7ICsrX19pKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICArK19fcHNpemU7CisgICAgICAgICAgICAgICAgICAgIF9fcSA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19xLT5fTV9uZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFfX3EpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiBxIGhhc24ndCBmYWxsZW4gb2ZmIGVuZCwgd2UgaGF2ZSB0d28gbGlzdHMgdG8gbWVyZ2UuCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3FzaXplID0gX19pbnNpemU7CisKKyAgICAgICAgICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0d28gbGlzdHM7IG1lcmdlIHRoZW0uCisgICAgICAgICAgICAgICAgd2hpbGUgKF9fcHNpemUgPiAwIHx8IChfX3FzaXplID4gMCAmJiBfX3EpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBEZWNpZGUgd2hldGhlciBuZXh0IG5vZGUgb2YgbWVyZ2UgY29tZXMgZnJvbSBwIG9yIHEuCisgICAgICAgICAgICAgICAgICAgIF9Ob2RlKiBfX2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChfX3BzaXplID09IDApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcCBpcyBlbXB0eTsgZSBtdXN0IGNvbWUgZnJvbSBxLgorICAgICAgICAgICAgICAgICAgICAgICAgX19lID0gX19xOworICAgICAgICAgICAgICAgICAgICAgICAgX19xID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX3EtPl9NX25leHQpOworICAgICAgICAgICAgICAgICAgICAgICAgLS1fX3FzaXplOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19xc2l6ZSA9PSAwIHx8ICFfX3EpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gcSBpcyBlbXB0eTsgZSBtdXN0IGNvbWUgZnJvbSBwLgorICAgICAgICAgICAgICAgICAgICAgICAgX19lID0gX19wOworICAgICAgICAgICAgICAgICAgICAgICAgX19wID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX3AtPl9NX25leHQpOworICAgICAgICAgICAgICAgICAgICAgICAgLS1fX3BzaXplOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX3AtPl9NX3ZhbHB0cigpLCAqX19xLT5fTV92YWxwdHIoKSkpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3Qgbm9kZSBvZiBwIGlzIGxvd2VyOyBlIG11c3QgY29tZSBmcm9tIHAuCisgICAgICAgICAgICAgICAgICAgICAgICBfX2UgPSBfX3A7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3AgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcC0+X01fbmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAtLV9fcHNpemU7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3Qgbm9kZSBvZiBxIGlzIGxvd2VyOyBlIG11c3QgY29tZSBmcm9tIHEuCisgICAgICAgICAgICAgICAgICAgICAgICBfX2UgPSBfX3E7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3EgPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcS0+X01fbmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAtLV9fcXNpemU7CisgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV4dCBub2RlIHRvIHRoZSBtZXJnZWQgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKF9fdGFpbCkKKyAgICAgICAgICAgICAgICAgICAgICBfX3RhaWwtPl9NX25leHQgPSBfX2U7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBfX2xpc3QgPSBfX2U7CisgICAgICAgICAgICAgICAgICAgIF9fdGFpbCA9IF9fZTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyBwIGhhcyBzdGVwcGVkIGBpbnNpemUnIHBsYWNlcyBhbG9uZywgYW5kIHEgaGFzIHRvby4KKyAgICAgICAgICAgICAgICBfX3AgPSBfX3E7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9fdGFpbC0+X01fbmV4dCA9IDA7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZG9uZSBvbmx5IG9uZSBtZXJnZSwgd2UncmUgZmluaXNoZWQuCisgICAgICAgICAgICAvLyBBbGxvdyBmb3Igbm1lcmdlcyA9PSAwLCB0aGUgZW1wdHkgbGlzdCBjYXNlLgorICAgICAgICAgICAgaWYgKF9fbm1lcmdlcyA8PSAxKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy0+X01faW1wbC5fTV9oZWFkLl9NX25leHQgPSBfX2xpc3Q7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSByZXBlYXQsIG1lcmdpbmcgbGlzdHMgdHdpY2UgdGhlIHNpemUuCisgICAgICAgICAgICBfX2luc2l6ZSAqPSAyOworICAgICAgICAgIH0KKyAgICAgIH0KKyAKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQ09OVEFJTkVSCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8qIF9GT1JXQVJEX0xJU1RfVENDICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9mc3RyZWFtLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9mc3RyZWFtLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODNhNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2ZzdHJlYW0udGNjCkBAIC0wLDAgKzEsOTgyIEBACisvLyBGaWxlIGJhc2VkIHN0cmVhbXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvZnN0cmVhbS50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtmc3RyZWFtfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy44ICBGaWxlLWJhc2VkIHN0cmVhbXMKKy8vCisKKyNpZm5kZWYgX0ZTVFJFQU1fVENDCisjZGVmaW5lIF9GU1RSRUFNX1RDQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvY3h4YWJpX2ZvcmNlZC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHZvaWQKKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpCisgICAgeworICAgICAgLy8gQWxsb2NhdGUgaW50ZXJuYWwgYnVmZmVyIG9ubHkgaWYgb25lIGRvZXNuJ3QgYWxyZWFkeSBleGlzdAorICAgICAgLy8gKGVpdGhlciBhbGxvY2F0ZWQgb3IgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdmlhIHNldGJ1ZikuCisgICAgICBpZiAoIV9NX2J1Zl9hbGxvY2F0ZWQgJiYgIV9NX2J1ZikKKwl7CisJICBfTV9idWYgPSBuZXcgY2hhcl90eXBlW19NX2J1Zl9zaXplXTsKKwkgIF9NX2J1Zl9hbGxvY2F0ZWQgPSB0cnVlOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHZvaWQKKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCkgdGhyb3coKQorICAgIHsKKyAgICAgIGlmIChfTV9idWZfYWxsb2NhdGVkKQorCXsKKwkgIGRlbGV0ZSBbXSBfTV9idWY7CisJICBfTV9idWYgPSAwOworCSAgX01fYnVmX2FsbG9jYXRlZCA9IGZhbHNlOworCX0KKyAgICAgIGRlbGV0ZSBbXSBfTV9leHRfYnVmOworICAgICAgX01fZXh0X2J1ZiA9IDA7CisgICAgICBfTV9leHRfYnVmX3NpemUgPSAwOworICAgICAgX01fZXh0X25leHQgPSAwOworICAgICAgX01fZXh0X2VuZCA9IDA7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGJhc2ljX2ZpbGVidWYoKSA6IF9fc3RyZWFtYnVmX3R5cGUoKSwgX01fbG9jaygpLCBfTV9maWxlKCZfTV9sb2NrKSwKKyAgICBfTV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX3N0YXRlX2JlZygpLCBfTV9zdGF0ZV9jdXIoKSwKKyAgICBfTV9zdGF0ZV9sYXN0KCksIF9NX2J1ZigwKSwgX01fYnVmX3NpemUoQlVGU0laKSwKKyAgICBfTV9idWZfYWxsb2NhdGVkKGZhbHNlKSwgX01fcmVhZGluZyhmYWxzZSksIF9NX3dyaXRpbmcoZmFsc2UpLCBfTV9wYmFjaygpLCAKKyAgICBfTV9wYmFja19jdXJfc2F2ZSgwKSwgX01fcGJhY2tfZW5kX3NhdmUoMCksIF9NX3BiYWNrX2luaXQoZmFsc2UpLAorICAgIF9NX2NvZGVjdnQoMCksIF9NX2V4dF9idWYoMCksIF9NX2V4dF9idWZfc2l6ZSgwKSwgX01fZXh0X25leHQoMCksCisgICAgX01fZXh0X2VuZCgwKQorICAgIHsKKyAgICAgIGlmIChoYXNfZmFjZXQ8X19jb2RlY3Z0X3R5cGU+KHRoaXMtPl9NX2J1Zl9sb2NhbGUpKQorCV9NX2NvZGVjdnQgPSAmdXNlX2ZhY2V0PF9fY29kZWN2dF90eXBlPih0aGlzLT5fTV9idWZfbG9jYWxlKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19maWxlYnVmX3R5cGUqCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKKyAgICB7CisgICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSAwOworICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkpCisJeworCSAgX01fZmlsZS5vcGVuKF9fcywgX19tb2RlKTsKKwkgIGlmICh0aGlzLT5pc19vcGVuKCkpCisJICAgIHsKKwkgICAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsKKwkgICAgICBfTV9tb2RlID0gX19tb2RlOworCisJICAgICAgLy8gU2V0dXAgaW5pdGlhbCBidWZmZXIgdG8gJ3VuY29tbWl0dGVkJyBtb2RlLgorCSAgICAgIF9NX3JlYWRpbmcgPSBmYWxzZTsKKwkgICAgICBfTV93cml0aW5nID0gZmFsc2U7CisJICAgICAgX01fc2V0X2J1ZmZlcigtMSk7CisKKwkgICAgICAvLyBSZXNldCB0byBpbml0aWFsIHN0YXRlLgorCSAgICAgIF9NX3N0YXRlX2xhc3QgPSBfTV9zdGF0ZV9jdXIgPSBfTV9zdGF0ZV9iZWc7CisKKwkgICAgICAvLyAyNy44LjEuMyw0CisJICAgICAgaWYgKChfX21vZGUgJiBpb3NfYmFzZTo6YXRlKQorCQkgICYmIHRoaXMtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmVuZCwgX19tb2RlKQorCQkgID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCisJCXRoaXMtPmNsb3NlKCk7CisJICAgICAgZWxzZQorCQlfX3JldCA9IHRoaXM7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgY2xvc2UoKQorICAgIHsKKyAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpKQorCXJldHVybiAwOworCisgICAgICBib29sIF9fdGVzdGZhaWwgPSBmYWxzZTsKKyAgICAgIHsKKwkvLyBOQjogRG8gdGhpcyBoZXJlIHNvIHRoYXQgcmUtb3BlbmVkIGZpbGVidWZzIHdpbGwgYmUgY29vbC4uLgorCXN0cnVjdCBfX2Nsb3NlX3NlbnRyeQorCXsKKwkgIGJhc2ljX2ZpbGVidWYgKl9fZmI7CisJICBfX2Nsb3NlX3NlbnRyeSAoYmFzaWNfZmlsZWJ1ZiAqX19mYmkpOiBfX2ZiKF9fZmJpKSB7IH0KKwkgIH5fX2Nsb3NlX3NlbnRyeSAoKQorCSAgeworCSAgICBfX2ZiLT5fTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOworCSAgICBfX2ZiLT5fTV9wYmFja19pbml0ID0gZmFsc2U7CisJICAgIF9fZmItPl9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7CisJICAgIF9fZmItPl9NX3JlYWRpbmcgPSBmYWxzZTsKKwkgICAgX19mYi0+X01fd3JpdGluZyA9IGZhbHNlOworCSAgICBfX2ZiLT5fTV9zZXRfYnVmZmVyKC0xKTsKKwkgICAgX19mYi0+X01fc3RhdGVfbGFzdCA9IF9fZmItPl9NX3N0YXRlX2N1ciA9IF9fZmItPl9NX3N0YXRlX2JlZzsKKwkgIH0KKwl9IF9fY3MgKHRoaXMpOworCisJX190cnkKKwkgIHsKKwkgICAgaWYgKCFfTV90ZXJtaW5hdGVfb3V0cHV0KCkpCisJICAgICAgX190ZXN0ZmFpbCA9IHRydWU7CisJICB9CisJX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgeworCSAgICBfTV9maWxlLmNsb3NlKCk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeyBfX3Rlc3RmYWlsID0gdHJ1ZTsgfQorICAgICAgfQorCisgICAgICBpZiAoIV9NX2ZpbGUuY2xvc2UoKSkKKwlfX3Rlc3RmYWlsID0gdHJ1ZTsKKworICAgICAgaWYgKF9fdGVzdGZhaWwpCisJcmV0dXJuIDA7CisgICAgICBlbHNlCisJcmV0dXJuIHRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdHJlYW1zaXplCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzaG93bWFueWMoKQorICAgIHsKKyAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAtMTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOworICAgICAgaWYgKF9fdGVzdGluICYmIHRoaXMtPmlzX29wZW4oKSkKKwl7CisJICAvLyBGb3IgYSBzdGF0ZWZ1bCBlbmNvZGluZyAoLTEpIHRoZSBwZW5kaW5nIHNlcXVlbmNlIG1pZ2h0IGJlIGp1c3QKKwkgIC8vIHNoaWZ0IGFuZCB1bnNoaWZ0IHByZWZpeGVzIHdpdGggbm8gYWN0dWFsIGNoYXJhY3Rlci4KKwkgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKKworI2lmIF9HTElCQ1hYX0hBVkVfRE9TX0JBU0VEX0ZJTEVTWVNURU0KKwkgIC8vIEFib3V0IHRoaXMgd29ya2Fyb3VuZCwgc2VlIGxpYnN0ZGMrKy8yMDgwNi4KKwkgIGNvbnN0IGJvb2wgX190ZXN0YmluYXJ5ID0gX01fbW9kZSAmIGlvc19iYXNlOjpiaW5hcnk7CisJICBpZiAoX19jaGVja19mYWNldChfTV9jb2RlY3Z0KS5lbmNvZGluZygpID49IDAKKwkgICAgICAmJiBfX3Rlc3RiaW5hcnkpCisjZWxzZQorCSAgaWYgKF9fY2hlY2tfZmFjZXQoX01fY29kZWN2dCkuZW5jb2RpbmcoKSA+PSAwKQorI2VuZGlmCisJICAgIF9fcmV0ICs9IF9NX2ZpbGUuc2hvd21hbnljKCkgLyBfTV9jb2RlY3Z0LT5tYXhfbGVuZ3RoKCk7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgdW5kZXJmbG93KCkKKyAgICB7CisgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOworICAgICAgaWYgKF9fdGVzdGluKQorCXsKKwkgIGlmIChfTV93cml0aW5nKQorCSAgICB7CisJICAgICAgaWYgKG92ZXJmbG93KCkgPT0gdHJhaXRzX3R5cGU6OmVvZigpKQorCQlyZXR1cm4gX19yZXQ7CisJICAgICAgX01fc2V0X2J1ZmZlcigtMSk7CisJICAgICAgX01fd3JpdGluZyA9IGZhbHNlOworCSAgICB9CisJICAvLyBDaGVjayBmb3IgcGJhY2sgbWFkbmVzcywgYW5kIGlmIHNvIHN3aXRjaCBiYWNrIHRvIHRoZQorCSAgLy8gbm9ybWFsIGJ1ZmZlcnMgYW5kIGpldCBvdXR0YSBoZXJlIGJlZm9yZSBleHBlbnNpdmUKKwkgIC8vIGZpbGVvcHMgaGFwcGVuLi4uCisJICBfTV9kZXN0cm95X3BiYWNrKCk7CisKKwkgIGlmICh0aGlzLT5ncHRyKCkgPCB0aGlzLT5lZ3B0cigpKQorCSAgICByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOworCisJICAvLyBHZXQgYW5kIGNvbnZlcnQgaW5wdXQgc2VxdWVuY2UuCisJICBjb25zdCBzaXplX3QgX19idWZsZW4gPSBfTV9idWZfc2l6ZSA+IDEgPyBfTV9idWZfc2l6ZSAtIDEgOiAxOworCisJICAvLyBXaWxsIGJlIHNldCB0byB0cnVlIGlmIDo6cmVhZCgpIHJldHVybnMgMCBpbmRpY2F0aW5nIEVPRi4KKwkgIGJvb2wgX19nb3RfZW9mID0gZmFsc2U7CisJICAvLyBOdW1iZXIgb2YgaW50ZXJuYWwgY2hhcmFjdGVycyBwcm9kdWNlZC4KKwkgIHN0cmVhbXNpemUgX19pbGVuID0gMDsKKwkgIGNvZGVjdnRfYmFzZTo6cmVzdWx0IF9fciA9IGNvZGVjdnRfYmFzZTo6b2s7CisJICBpZiAoX19jaGVja19mYWNldChfTV9jb2RlY3Z0KS5hbHdheXNfbm9jb252KCkpCisJICAgIHsKKwkgICAgICBfX2lsZW4gPSBfTV9maWxlLnhzZ2V0bihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzLT5lYmFjaygpKSwKKwkJCQkgICAgICBfX2J1Zmxlbik7CisJICAgICAgaWYgKF9faWxlbiA9PSAwKQorCQlfX2dvdF9lb2YgPSB0cnVlOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKyAgICAgICAgICAgICAgLy8gV29yc3QtY2FzZSBudW1iZXIgb2YgZXh0ZXJuYWwgYnl0ZXMuCisJICAgICAgLy8gWFhYIE5vdCBkb25lIGVuY29kaW5nKCkgPT0gLTEuCisJICAgICAgY29uc3QgaW50IF9fZW5jID0gX01fY29kZWN2dC0+ZW5jb2RpbmcoKTsKKwkgICAgICBzdHJlYW1zaXplIF9fYmxlbjsgLy8gTWluaW11bSBidWZmZXIgc2l6ZS4KKwkgICAgICBzdHJlYW1zaXplIF9fcmxlbjsgLy8gTnVtYmVyIG9mIGNoYXJzIHRvIHJlYWQuCisJICAgICAgaWYgKF9fZW5jID4gMCkKKwkJX19ibGVuID0gX19ybGVuID0gX19idWZsZW4gKiBfX2VuYzsKKwkgICAgICBlbHNlCisJCXsKKwkJICBfX2JsZW4gPSBfX2J1ZmxlbiArIF9NX2NvZGVjdnQtPm1heF9sZW5ndGgoKSAtIDE7CisJCSAgX19ybGVuID0gX19idWZsZW47CisJCX0KKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fcmVtYWluZGVyID0gX01fZXh0X2VuZCAtIF9NX2V4dF9uZXh0OworCSAgICAgIF9fcmxlbiA9IF9fcmxlbiA+IF9fcmVtYWluZGVyID8gX19ybGVuIC0gX19yZW1haW5kZXIgOiAwOworCisJICAgICAgLy8gQW4gaW1idWUgaW4gJ3JlYWQnIG1vZGUgaW1wbGllcyBmaXJzdCBjb252ZXJ0aW5nIHRoZSBleHRlcm5hbAorCSAgICAgIC8vIGNoYXJzIGFscmVhZHkgcHJlc2VudC4KKwkgICAgICBpZiAoX01fcmVhZGluZyAmJiB0aGlzLT5lZ3B0cigpID09IHRoaXMtPmViYWNrKCkgJiYgX19yZW1haW5kZXIpCisJCV9fcmxlbiA9IDA7CisKKwkgICAgICAvLyBBbGxvY2F0ZSBidWZmZXIgaWYgbmVjZXNzYXJ5IGFuZCBtb3ZlIHVuY29udmVydGVkCisJICAgICAgLy8gYnl0ZXMgdG8gZnJvbnQuCisJICAgICAgaWYgKF9NX2V4dF9idWZfc2l6ZSA8IF9fYmxlbikKKwkJeworCQkgIGNoYXIqIF9fYnVmID0gbmV3IGNoYXJbX19ibGVuXTsKKwkJICBpZiAoX19yZW1haW5kZXIpCisJCSAgICBfX2J1aWx0aW5fbWVtY3B5KF9fYnVmLCBfTV9leHRfbmV4dCwgX19yZW1haW5kZXIpOworCisJCSAgZGVsZXRlIFtdIF9NX2V4dF9idWY7CisJCSAgX01fZXh0X2J1ZiA9IF9fYnVmOworCQkgIF9NX2V4dF9idWZfc2l6ZSA9IF9fYmxlbjsKKwkJfQorCSAgICAgIGVsc2UgaWYgKF9fcmVtYWluZGVyKQorCQlfX2J1aWx0aW5fbWVtbW92ZShfTV9leHRfYnVmLCBfTV9leHRfbmV4dCwgX19yZW1haW5kZXIpOworCisJICAgICAgX01fZXh0X25leHQgPSBfTV9leHRfYnVmOworCSAgICAgIF9NX2V4dF9lbmQgPSBfTV9leHRfYnVmICsgX19yZW1haW5kZXI7CisJICAgICAgX01fc3RhdGVfbGFzdCA9IF9NX3N0YXRlX2N1cjsKKworCSAgICAgIGRvCisJCXsKKwkJICBpZiAoX19ybGVuID4gMCkKKwkJICAgIHsKKwkJICAgICAgLy8gU2FuaXR5IGNoZWNrIQorCQkgICAgICAvLyBUaGlzIG1heSBmYWlsIGlmIHRoZSByZXR1cm4gdmFsdWUgb2YKKwkJICAgICAgLy8gY29kZWN2dDo6bWF4X2xlbmd0aCgpIGlzIGJvZ3VzLgorCQkgICAgICBpZiAoX01fZXh0X2VuZCAtIF9NX2V4dF9idWYgKyBfX3JsZW4gPiBfTV9leHRfYnVmX3NpemUpCisJCQl7CisJCQkgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoX19OKCJiYXNpY19maWxlYnVmOjp1bmRlcmZsb3cgIgorCQkJCQkgICAgICAiY29kZWN2dDo6bWF4X2xlbmd0aCgpICIKKwkJCQkJICAgICAgImlzIG5vdCB2YWxpZCIpKTsKKwkJCX0KKwkJICAgICAgc3RyZWFtc2l6ZSBfX2VsZW4gPSBfTV9maWxlLnhzZ2V0bihfTV9leHRfZW5kLCBfX3JsZW4pOworCQkgICAgICBpZiAoX19lbGVuID09IDApCisJCQlfX2dvdF9lb2YgPSB0cnVlOworCQkgICAgICBlbHNlIGlmIChfX2VsZW4gPT0gLTEpCisJCQlicmVhazsKKwkJICAgICAgX01fZXh0X2VuZCArPSBfX2VsZW47CisJCSAgICB9CisKKwkJICBjaGFyX3R5cGUqIF9faWVuZCA9IHRoaXMtPmViYWNrKCk7CisJCSAgaWYgKF9NX2V4dF9uZXh0IDwgX01fZXh0X2VuZCkKKwkJICAgIF9fciA9IF9NX2NvZGVjdnQtPmluKF9NX3N0YXRlX2N1ciwgX01fZXh0X25leHQsCisJCQkJCSBfTV9leHRfZW5kLCBfTV9leHRfbmV4dCwKKwkJCQkJIHRoaXMtPmViYWNrKCksCisJCQkJCSB0aGlzLT5lYmFjaygpICsgX19idWZsZW4sIF9faWVuZCk7CisJCSAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6Om5vY29udikKKwkJICAgIHsKKwkJICAgICAgc2l6ZV90IF9fYXZhaWwgPSBfTV9leHRfZW5kIC0gX01fZXh0X2J1ZjsKKwkJICAgICAgX19pbGVuID0gc3RkOjptaW4oX19hdmFpbCwgX19idWZsZW4pOworCQkgICAgICB0cmFpdHNfdHlwZTo6Y29weSh0aGlzLT5lYmFjaygpLAorCQkJCQlyZWludGVycHJldF9jYXN0PGNoYXJfdHlwZSo+CisJCQkJCShfTV9leHRfYnVmKSwgX19pbGVuKTsKKwkJICAgICAgX01fZXh0X25leHQgPSBfTV9leHRfYnVmICsgX19pbGVuOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIF9faWxlbiA9IF9faWVuZCAtIHRoaXMtPmViYWNrKCk7CisKKwkJICAvLyBfTV9jb2RlY3Z0LT5pbiBtYXkgcmV0dXJuIGVycm9yIHdoaWxlIF9faWxlbiA+IDA6IHRoaXMgaXMKKwkJICAvLyBvaywgYW5kIGFjdHVhbGx5IG9jY3VycyBpbiBjYXNlIG9mIG1peGVkIGVuY29kaW5ncyAoZS5nLiwKKwkJICAvLyBYTUwgZmlsZXMpLgorCQkgIGlmIChfX3IgPT0gY29kZWN2dF9iYXNlOjplcnJvcikKKwkJICAgIGJyZWFrOworCisJCSAgX19ybGVuID0gMTsKKwkJfQorCSAgICAgIHdoaWxlIChfX2lsZW4gPT0gMCAmJiAhX19nb3RfZW9mKTsKKwkgICAgfQorCisJICBpZiAoX19pbGVuID4gMCkKKwkgICAgeworCSAgICAgIF9NX3NldF9idWZmZXIoX19pbGVuKTsKKwkgICAgICBfTV9yZWFkaW5nID0gdHJ1ZTsKKwkgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoX19nb3RfZW9mKQorCSAgICB7CisJICAgICAgLy8gSWYgdGhlIGFjdHVhbCBlbmQgb2YgZmlsZSBpcyByZWFjaGVkLCBzZXQgJ3VuY29tbWl0dGVkJworCSAgICAgIC8vIG1vZGUsIHRodXMgYWxsb3dpbmcgYW4gaW1tZWRpYXRlIHdyaXRlIHdpdGhvdXQgYW4KKwkgICAgICAvLyBpbnRlcnZlbmluZyBzZWVrLgorCSAgICAgIF9NX3NldF9idWZmZXIoLTEpOworCSAgICAgIF9NX3JlYWRpbmcgPSBmYWxzZTsKKwkgICAgICAvLyBIb3dldmVyLCByZWFjaGluZyBpdCB3aGlsZSBsb29waW5nIG9uIHBhcnRpYWwgbWVhbnMgdGhhdAorCSAgICAgIC8vIHRoZSBmaWxlIGhhcyBnb3QgYW4gaW5jb21wbGV0ZSBjaGFyYWN0ZXIuCisJICAgICAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCisJCV9fdGhyb3dfaW9zX2ZhaWx1cmUoX19OKCJiYXNpY19maWxlYnVmOjp1bmRlcmZsb3cgIgorCQkJCSAgICAiaW5jb21wbGV0ZSBjaGFyYWN0ZXIgaW4gZmlsZSIpKTsKKwkgICAgfQorCSAgZWxzZSBpZiAoX19yID09IGNvZGVjdnRfYmFzZTo6ZXJyb3IpCisJICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoX19OKCJiYXNpY19maWxlYnVmOjp1bmRlcmZsb3cgIgorCQkJCSJpbnZhbGlkIGJ5dGUgc2VxdWVuY2UgaW4gZmlsZSIpKTsKKwkgIGVsc2UKKwkgICAgX190aHJvd19pb3NfZmFpbHVyZShfX04oImJhc2ljX2ZpbGVidWY6OnVuZGVyZmxvdyAiCisJCQkJImVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKSk7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgcGJhY2tmYWlsKGludF90eXBlIF9faSkKKyAgICB7CisgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOworICAgICAgaWYgKF9fdGVzdGluKQorCXsKKwkgIGlmIChfTV93cml0aW5nKQorCSAgICB7CisJICAgICAgaWYgKG92ZXJmbG93KCkgPT0gdHJhaXRzX3R5cGU6OmVvZigpKQorCQlyZXR1cm4gX19yZXQ7CisJICAgICAgX01fc2V0X2J1ZmZlcigtMSk7CisJICAgICAgX01fd3JpdGluZyA9IGZhbHNlOworCSAgICB9CisJICAvLyBSZW1lbWJlciB3aGV0aGVyIHRoZSBwYmFjayBidWZmZXIgaXMgYWN0aXZlLCBvdGhlcndpc2UgYmVsb3cKKwkgIC8vIHdlIG1heSB0cnkgdG8gc3RvcmUgaW4gaXQgYSBzZWNvbmQgY2hhciAobGlic3RkYysrLzk3NjEpLgorCSAgY29uc3QgYm9vbCBfX3Rlc3RwYiA9IF9NX3BiYWNrX2luaXQ7CisJICBjb25zdCBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2ksIF9fcmV0KTsKKwkgIGludF90eXBlIF9fdG1wOworCSAgaWYgKHRoaXMtPmViYWNrKCkgPCB0aGlzLT5ncHRyKCkpCisJICAgIHsKKwkgICAgICB0aGlzLT5nYnVtcCgtMSk7CisJICAgICAgX190bXAgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CisJICAgIH0KKwkgIGVsc2UgaWYgKHRoaXMtPnNlZWtvZmYoLTEsIGlvc19iYXNlOjpjdXIpICE9IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCisJICAgIHsKKwkgICAgICBfX3RtcCA9IHRoaXMtPnVuZGVyZmxvdygpOworCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX190bXAsIF9fcmV0KSkKKwkJcmV0dXJuIF9fcmV0OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIsIG5lZWQgdG8gbWFrZSBhCisJICAgICAgLy8gcHV0YmFjayBwb3NpdGlvbiBhdmFpbGFibGUuICBCdXQgdGhlIHNlZWsgbWF5IGZhaWwKKwkgICAgICAvLyAoZi5pLiwgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpbGUsIHNlZQorCSAgICAgIC8vIGxpYnN0ZGMrKy85NDM5KSBhbmQgaW4gdGhhdCBjYXNlIHdlIHJldHVybgorCSAgICAgIC8vIHRyYWl0c190eXBlOjplb2YoKS4KKwkgICAgICByZXR1cm4gX19yZXQ7CisJICAgIH0KKworCSAgLy8gVHJ5IHRvIHB1dCBiYWNrIF9faSBpbnRvIGlucHV0IHNlcXVlbmNlIGluIG9uZSBvZiB0aHJlZSB3YXlzLgorCSAgLy8gT3JkZXIgdGhlc2UgdGVzdHMgZG9uZSBpbiBpcyB1bnNwZWNpZmllZCBieSB0aGUgc3RhbmRhcmQuCisJICBpZiAoIV9fdGVzdGVvZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19pLCBfX3RtcCkpCisJICAgIF9fcmV0ID0gX19pOworCSAgZWxzZSBpZiAoX190ZXN0ZW9mKQorCSAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9faSk7CisJICBlbHNlIGlmICghX190ZXN0cGIpCisJICAgIHsKKwkgICAgICBfTV9jcmVhdGVfcGJhY2soKTsKKwkgICAgICBfTV9yZWFkaW5nID0gdHJ1ZTsKKwkgICAgICAqdGhpcy0+Z3B0cigpID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2kpOworCSAgICAgIF9fcmV0ID0gX19pOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jKQorICAgIHsKKyAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOworICAgICAgY29uc3QgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX3JldCk7CisgICAgICBjb25zdCBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OworICAgICAgaWYgKF9fdGVzdG91dCkKKwl7CisgICAgICAgICAgaWYgKF9NX3JlYWRpbmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9NX2Rlc3Ryb3lfcGJhY2soKTsKKyAgICAgICAgICAgICAgY29uc3QgaW50IF9fZ3B0cl9vZmYgPSBfTV9nZXRfZXh0X3BvcyhfTV9zdGF0ZV9sYXN0KTsKKyAgICAgICAgICAgICAgaWYgKF9NX3NlZWsoX19ncHRyX29mZiwgaW9zX2Jhc2U6OmN1ciwgX01fc3RhdGVfbGFzdCkKKyAgICAgICAgICAgICAgICAgID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIF9fcmV0OworICAgICAgICAgICAgfQorCSAgaWYgKHRoaXMtPnBiYXNlKCkgPCB0aGlzLT5wcHRyKCkpCisJICAgIHsKKwkgICAgICAvLyBJZiBhcHByb3ByaWF0ZSwgYXBwZW5kIHRoZSBvdmVyZmxvdyBjaGFyLgorCSAgICAgIGlmICghX190ZXN0ZW9mKQorCQl7CisJCSAgKnRoaXMtPnBwdHIoKSA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKKwkJICB0aGlzLT5wYnVtcCgxKTsKKwkJfQorCisJICAgICAgLy8gQ29udmVydCBwZW5kaW5nIHNlcXVlbmNlIHRvIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uLAorCSAgICAgIC8vIGFuZCBvdXRwdXQuCisJICAgICAgaWYgKF9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwodGhpcy0+cGJhc2UoKSwKKwkJCQkJIHRoaXMtPnBwdHIoKSAtIHRoaXMtPnBiYXNlKCkpKQorCQl7CisJCSAgX01fc2V0X2J1ZmZlcigwKTsKKwkJICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoX01fYnVmX3NpemUgPiAxKQorCSAgICB7CisJICAgICAgLy8gT3ZlcmZsb3cgaW4gJ3VuY29tbWl0dGVkJyBtb2RlOiBzZXQgX01fd3JpdGluZywgc2V0CisJICAgICAgLy8gdGhlIGJ1ZmZlciB0byB0aGUgaW5pdGlhbCAnd3JpdGUnIG1vZGUsIGFuZCBwdXQgX19jCisJICAgICAgLy8gaW50byB0aGUgYnVmZmVyLgorCSAgICAgIF9NX3NldF9idWZmZXIoMCk7CisJICAgICAgX01fd3JpdGluZyA9IHRydWU7CisJICAgICAgaWYgKCFfX3Rlc3Rlb2YpCisJCXsKKwkJICAqdGhpcy0+cHB0cigpID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworCQkgIHRoaXMtPnBidW1wKDEpOworCQl9CisJICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvLyBVbmJ1ZmZlcmVkLgorCSAgICAgIGNoYXJfdHlwZSBfX2NvbnYgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CisJICAgICAgaWYgKF9fdGVzdGVvZiB8fCBfTV9jb252ZXJ0X3RvX2V4dGVybmFsKCZfX2NvbnYsIDEpKQorCQl7CisJCSAgX01fd3JpdGluZyA9IHRydWU7CisJCSAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBib29sCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFsKF9DaGFyVCogX19pYnVmLCBzdHJlYW1zaXplIF9faWxlbikKKyAgICB7CisgICAgICAvLyBTaXplcyBvZiBleHRlcm5hbCBhbmQgcGVuZGluZyBvdXRwdXQuCisgICAgICBzdHJlYW1zaXplIF9fZWxlbjsKKyAgICAgIHN0cmVhbXNpemUgX19wbGVuOworICAgICAgaWYgKF9fY2hlY2tfZmFjZXQoX01fY29kZWN2dCkuYWx3YXlzX25vY29udigpKQorCXsKKwkgIF9fZWxlbiA9IF9NX2ZpbGUueHNwdXRuKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9faWJ1ZiksIF9faWxlbik7CisJICBfX3BsZW4gPSBfX2lsZW47CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8vIFdvcnN0LWNhc2UgbnVtYmVyIG9mIGV4dGVybmFsIGJ5dGVzIG5lZWRlZC4KKwkgIC8vIFhYWCBOb3QgZG9uZSBlbmNvZGluZygpID09IC0xLgorCSAgc3RyZWFtc2l6ZSBfX2JsZW4gPSBfX2lsZW4gKiBfTV9jb2RlY3Z0LT5tYXhfbGVuZ3RoKCk7CisJICBjaGFyKiBfX2J1ZiA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fYmxlbikpOworCisJICBjaGFyKiBfX2JlbmQ7CisJICBjb25zdCBjaGFyX3R5cGUqIF9faWVuZDsKKwkgIGNvZGVjdnRfYmFzZTo6cmVzdWx0IF9fcjsKKwkgIF9fciA9IF9NX2NvZGVjdnQtPm91dChfTV9zdGF0ZV9jdXIsIF9faWJ1ZiwgX19pYnVmICsgX19pbGVuLAorCQkJCV9faWVuZCwgX19idWYsIF9fYnVmICsgX19ibGVuLCBfX2JlbmQpOworCisJICBpZiAoX19yID09IGNvZGVjdnRfYmFzZTo6b2sgfHwgX19yID09IGNvZGVjdnRfYmFzZTo6cGFydGlhbCkKKwkgICAgX19ibGVuID0gX19iZW5kIC0gX19idWY7CisJICBlbHNlIGlmIChfX3IgPT0gY29kZWN2dF9iYXNlOjpub2NvbnYpCisJICAgIHsKKwkgICAgICAvLyBTYW1lIGFzIHRoZSBhbHdheXNfbm9jb252IGNhc2UgYWJvdmUuCisJICAgICAgX19idWYgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2lidWYpOworCSAgICAgIF9fYmxlbiA9IF9faWxlbjsKKwkgICAgfQorCSAgZWxzZQorCSAgICBfX3Rocm93X2lvc19mYWlsdXJlKF9fTigiYmFzaWNfZmlsZWJ1Zjo6X01fY29udmVydF90b19leHRlcm5hbCAiCisJCQkJICAgICJjb252ZXJzaW9uIGVycm9yIikpOworICAKKwkgIF9fZWxlbiA9IF9NX2ZpbGUueHNwdXRuKF9fYnVmLCBfX2JsZW4pOworCSAgX19wbGVuID0gX19ibGVuOworCisJICAvLyBUcnkgb25jZSBtb3JlIGZvciBwYXJ0aWFsIGNvbnZlcnNpb25zLgorCSAgaWYgKF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwgJiYgX19lbGVuID09IF9fcGxlbikKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19pcmVzdW1lID0gX19pZW5kOworCSAgICAgIHN0cmVhbXNpemUgX19ybGVuID0gdGhpcy0+cHB0cigpIC0gX19pZW5kOworCSAgICAgIF9fciA9IF9NX2NvZGVjdnQtPm91dChfTV9zdGF0ZV9jdXIsIF9faXJlc3VtZSwKKwkJCQkgICAgX19pcmVzdW1lICsgX19ybGVuLCBfX2llbmQsIF9fYnVmLAorCQkJCSAgICBfX2J1ZiArIF9fYmxlbiwgX19iZW5kKTsKKwkgICAgICBpZiAoX19yICE9IGNvZGVjdnRfYmFzZTo6ZXJyb3IpCisJCXsKKwkJICBfX3JsZW4gPSBfX2JlbmQgLSBfX2J1ZjsKKwkJICBfX2VsZW4gPSBfTV9maWxlLnhzcHV0bihfX2J1ZiwgX19ybGVuKTsKKwkJICBfX3BsZW4gPSBfX3JsZW47CisJCX0KKwkgICAgICBlbHNlCisJCV9fdGhyb3dfaW9zX2ZhaWx1cmUoX19OKCJiYXNpY19maWxlYnVmOjpfTV9jb252ZXJ0X3RvX2V4dGVybmFsICIKKwkJCQkJImNvbnZlcnNpb24gZXJyb3IiKSk7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19lbGVuID09IF9fcGxlbjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cmVhbXNpemUKKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgeworICAgICAgLy8gQ2xlYXIgb3V0IHBiYWNrIGJ1ZmZlciBiZWZvcmUgZ29pbmcgb24gdG8gdGhlIHJlYWwgZGVhbC4uLgorICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CisgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKKwl7CisJICBpZiAoX19uID4gMCAmJiB0aGlzLT5ncHRyKCkgPT0gdGhpcy0+ZWJhY2soKSkKKwkgICAgeworCSAgICAgICpfX3MrKyA9ICp0aGlzLT5ncHRyKCk7IC8vIGVtdWxhdGUgbm9uLXVuZGVyZmxvd2luZyBzYnVtcGMKKwkgICAgICB0aGlzLT5nYnVtcCgxKTsKKwkgICAgICBfX3JldCA9IDE7CisJICAgICAgLS1fX247CisJICAgIH0KKwkgIF9NX2Rlc3Ryb3lfcGJhY2soKTsKKwl9CisgICAgICBlbHNlIGlmIChfTV93cml0aW5nKQorCXsKKyAJICBpZiAob3ZlcmZsb3coKSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCkpCisgCSAgICByZXR1cm4gX19yZXQ7CisgCSAgX01fc2V0X2J1ZmZlcigtMSk7CisgCSAgX01fd3JpdGluZyA9IGZhbHNlOworIAl9CisgCisgICAgICAvLyBPcHRpbWl6YXRpb24gaW4gdGhlIGFsd2F5c19ub2NvbnYoKSBjYXNlLCB0byBiZSBnZW5lcmFsaXplZCBpbiB0aGUKKyAgICAgIC8vIGZ1dHVyZTogd2hlbiBfX24gPiBfX2J1ZmxlbiB3ZSByZWFkIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcgdGhlCisgICAgICAvLyBidWZmZXIgcmVwZWF0ZWRseS4KKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOworICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX2J1ZmxlbiA9IF9NX2J1Zl9zaXplID4gMSA/IF9NX2J1Zl9zaXplIC0gMSA6IDE7CisgCisgICAgICBpZiAoX19uID4gX19idWZsZW4gJiYgX19jaGVja19mYWNldChfTV9jb2RlY3Z0KS5hbHdheXNfbm9jb252KCkKKyAJICAgJiYgX190ZXN0aW4pCisgCSB7CisgCSAgIC8vIEZpcnN0LCBjb3B5IHRoZSBjaGFycyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGJ1ZmZlci4KKyAJICAgY29uc3Qgc3RyZWFtc2l6ZSBfX2F2YWlsID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKKyAJICAgaWYgKF9fYXZhaWwgIT0gMCkKKyAJICAgICB7CisJICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgdGhpcy0+Z3B0cigpLCBfX2F2YWlsKTsKKyAJICAgICAgIF9fcyArPSBfX2F2YWlsOworCSAgICAgICB0aGlzLT5zZXRnKHRoaXMtPmViYWNrKCksIHRoaXMtPmdwdHIoKSArIF9fYXZhaWwsCisJCQkgIHRoaXMtPmVncHRyKCkpOworCSAgICAgICBfX3JldCArPSBfX2F2YWlsOworCSAgICAgICBfX24gLT0gX19hdmFpbDsKKyAJICAgICB9CisgCisgCSAgIC8vIE5lZWQgdG8gbG9vcCBpbiBjYXNlIG9mIHNob3J0IHJlYWRzIChyZWxhdGl2ZWx5IGNvbW1vbgorIAkgICAvLyB3aXRoIHBpcGVzKS4KKyAJICAgc3RyZWFtc2l6ZSBfX2xlbjsKKyAJICAgZm9yICg7OykKKyAJICAgICB7CisgCSAgICAgICBfX2xlbiA9IF9NX2ZpbGUueHNnZXRuKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcyksCisgCQkJCSAgICAgIF9fbik7CisgCSAgICAgICBpZiAoX19sZW4gPT0gLTEpCisgCQkgX190aHJvd19pb3NfZmFpbHVyZShfX04oImJhc2ljX2ZpbGVidWY6OnhzZ2V0biAiCisgCQkJCQkgImVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKSk7CisgCSAgICAgICBpZiAoX19sZW4gPT0gMCkKKyAJCSBicmVhazsKKyAKKyAJICAgICAgIF9fbiAtPSBfX2xlbjsKKyAJICAgICAgIF9fcmV0ICs9IF9fbGVuOworIAkgICAgICAgaWYgKF9fbiA9PSAwKQorIAkJIGJyZWFrOworIAorIAkgICAgICAgX19zICs9IF9fbGVuOworIAkgICAgIH0KKyAKKyAJICAgaWYgKF9fbiA9PSAwKQorIAkgICAgIHsKKyAJICAgICAgIF9NX3NldF9idWZmZXIoMCk7CisgCSAgICAgICBfTV9yZWFkaW5nID0gdHJ1ZTsKKyAJICAgICB9CisgCSAgIGVsc2UgaWYgKF9fbGVuID09IDApCisgCSAgICAgeworIAkgICAgICAgLy8gSWYgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZCwgc2V0ICd1bmNvbW1pdHRlZCcKKyAJICAgICAgIC8vIG1vZGUsIHRodXMgYWxsb3dpbmcgYW4gaW1tZWRpYXRlIHdyaXRlIHdpdGhvdXQKKyAJICAgICAgIC8vIGFuIGludGVydmVuaW5nIHNlZWsuCisgCSAgICAgICBfTV9zZXRfYnVmZmVyKC0xKTsKKyAJICAgICAgIF9NX3JlYWRpbmcgPSBmYWxzZTsKKyAJICAgICB9CisgCSB9CisgICAgICBlbHNlCisgCSBfX3JldCArPSBfX3N0cmVhbWJ1Zl90eXBlOjp4c2dldG4oX19zLCBfX24pOworIAorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RyZWFtc2l6ZQorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgeHNwdXRuKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKKyAgICAgIC8vIE9wdGltaXphdGlvbiBpbiB0aGUgYWx3YXlzX25vY29udigpIGNhc2UsIHRvIGJlIGdlbmVyYWxpemVkIGluIHRoZQorICAgICAgLy8gZnV0dXJlOiB3aGVuIF9fbiBpcyBzdWZmaWNpZW50bHkgbGFyZ2Ugd2Ugd3JpdGUgZGlyZWN0bHkgaW5zdGVhZCBvZgorICAgICAgLy8gdXNpbmcgdGhlIGJ1ZmZlci4KKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CisgICAgICBpZiAoX19jaGVja19mYWNldChfTV9jb2RlY3Z0KS5hbHdheXNfbm9jb252KCkKKyAJICAgJiYgX190ZXN0b3V0ICYmICFfTV9yZWFkaW5nKQorCXsKKwkgIC8vIE1lYXN1cmVtZW50IHdvdWxkIHJldmVhbCB0aGUgYmVzdCBjaG9pY2UuCisJICBjb25zdCBzdHJlYW1zaXplIF9fY2h1bmsgPSAxdWwgPDwgMTA7CisJICBzdHJlYW1zaXplIF9fYnVmYXZhaWwgPSB0aGlzLT5lcHB0cigpIC0gdGhpcy0+cHB0cigpOworCisJICAvLyBEb24ndCBtaXN0YWtlICd1bmNvbW1pdHRlZCcgbW9kZSBidWZmZXJlZCB3aXRoIHVuYnVmZmVyZWQuCisJICBpZiAoIV9NX3dyaXRpbmcgJiYgX01fYnVmX3NpemUgPiAxKQorCSAgICBfX2J1ZmF2YWlsID0gX01fYnVmX3NpemUgLSAxOworCisJICBjb25zdCBzdHJlYW1zaXplIF9fbGltaXQgPSBzdGQ6Om1pbihfX2NodW5rLCBfX2J1ZmF2YWlsKTsKKwkgIGlmIChfX24gPj0gX19saW1pdCkKKwkgICAgeworCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19idWZmaWxsID0gdGhpcy0+cHB0cigpIC0gdGhpcy0+cGJhc2UoKTsKKwkgICAgICBjb25zdCBjaGFyKiBfX2J1ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHRoaXMtPnBiYXNlKCkpOworCSAgICAgIF9fcmV0ID0gX01fZmlsZS54c3B1dG5fMihfX2J1ZiwgX19idWZmaWxsLAorCQkJCSAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpLAorCQkJCSAgICAgICBfX24pOworCSAgICAgIGlmIChfX3JldCA9PSBfX2J1ZmZpbGwgKyBfX24pCisJCXsKKwkJICBfTV9zZXRfYnVmZmVyKDApOworCQkgIF9NX3dyaXRpbmcgPSB0cnVlOworCQl9CisJICAgICAgaWYgKF9fcmV0ID4gX19idWZmaWxsKQorCQlfX3JldCAtPSBfX2J1ZmZpbGw7CisJICAgICAgZWxzZQorCQlfX3JldCA9IDA7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgX19yZXQgPSBfX3N0cmVhbWJ1Zl90eXBlOjp4c3B1dG4oX19zLCBfX24pOworCX0KKyAgICAgICBlbHNlCisJIF9fcmV0ID0gX19zdHJlYW1idWZfdHlwZTo6eHNwdXRuKF9fcywgX19uKTsKKyAgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fc3RyZWFtYnVmX3R5cGUqCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpKQorCXsKKwkgIGlmIChfX3MgPT0gMCAmJiBfX24gPT0gMCkKKwkgICAgX01fYnVmX3NpemUgPSAxOworCSAgZWxzZSBpZiAoX19zICYmIF9fbiA+IDApCisJICAgIHsKKwkgICAgICAvLyBUaGlzIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3IsIGFuZCBhc3N1bWVzIHRoYXQKKwkgICAgICAvLyBhbiBleHRlcm5hbCBjaGFyX3R5cGUgYXJyYXkgb2YgbGVuZ3RoIF9fbiBleGlzdHMgYW5kIGhhcworCSAgICAgIC8vIGJlZW4gcHJlLWFsbG9jYXRlZC4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHRoaW5ncyB3aWxsCisJICAgICAgLy8gcXVpY2tseSBibG93IHVwLiBXaGVuIF9fbiA+IDEsIF9fbiAtIDEgcG9zaXRpb25zIHdpbGwgYmUKKwkgICAgICAvLyB1c2VkIGZvciB0aGUgZ2V0IGFyZWEsIF9fbiAtIDEgZm9yIHRoZSBwdXQgYXJlYSBhbmQgMQorCSAgICAgIC8vIHBvc2l0aW9uIHRvIGhvc3QgdGhlIG92ZXJmbG93IGNoYXIgb2YgYSBmdWxsIHB1dCBhcmVhLgorCSAgICAgIC8vIFdoZW4gX19uID09IDEsIDEgcG9zaXRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGUgZ2V0IGFyZWEKKwkgICAgICAvLyBhbmQgMCBmb3IgdGhlIHB1dCBhcmVhLCBhcyBpbiB0aGUgdW5idWZmZXJlZCBjYXNlIGFib3ZlLgorCSAgICAgIF9NX2J1ZiA9IF9fczsKKwkgICAgICBfTV9idWZfc2l6ZSA9IF9fbjsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworCisgIC8vIEFjY29yZGluZyB0byAyNy44LjEuNCBwMTEgLSAxMywgc2Vla29mZiBzaG91bGQgaWdub3JlIHRoZSBsYXN0CisgIC8vIGFyZ3VtZW50IChvZiB0eXBlIG9wZW5tb2RlKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKKyAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUpCisgICAgeworICAgICAgaW50IF9fd2lkdGggPSAwOworICAgICAgaWYgKF9NX2NvZGVjdnQpCisJX193aWR0aCA9IF9NX2NvZGVjdnQtPmVuY29kaW5nKCk7CisgICAgICBpZiAoX193aWR0aCA8IDApCisJX193aWR0aCA9IDA7CisKKyAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0ZmFpbCA9IF9fb2ZmICE9IDAgJiYgX193aWR0aCA8PSAwOworICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSAmJiAhX190ZXN0ZmFpbCkKKwl7CisJICAvLyB0ZWxsZyBhbmQgdGVsbHAgcXVlcmllcyBkbyBub3QgYWZmZWN0IGFueSBzdGF0ZSwgdW5sZXNzCisJICAvLyAhIGFsd2F5c19ub2NvbnYgYW5kIHRoZSBwdXQgc2VxdWVuY2UgaXMgbm90IGVtcHR5LgorCSAgLy8gSW4gdGhhdCBjYXNlLCBkZXRlcm1pbmluZyB0aGUgcG9zaXRpb24gcmVxdWlyZXMgY29udmVydGluZyB0aGUKKwkgIC8vIHB1dCBzZXF1ZW5jZS4gVGhhdCBkb2Vzbid0IHVzZSBleHRfYnVmLCBzbyByZXF1aXJlcyBhIGZsdXNoLgorCSAgYm9vbCBfX25vX21vdmVtZW50ID0gX193YXkgPT0gaW9zX2Jhc2U6OmN1ciAmJiBfX29mZiA9PSAwCisJICAgICYmICghX01fd3JpdGluZyB8fCBfTV9jb2RlY3Z0LT5hbHdheXNfbm9jb252KCkpOworCisJICAvLyBEaXRjaCBhbnkgcGJhY2sgYnVmZmVycyB0byBhdm9pZCBjb25mdXNpb24uCisJICBpZiAoIV9fbm9fbW92ZW1lbnQpCisJICAgIF9NX2Rlc3Ryb3lfcGJhY2soKTsKKworCSAgLy8gQ29ycmVjdCBzdGF0ZSBhdCBkZXN0aW5hdGlvbi4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIGNvcnJlY3QKKwkgIC8vIHN0YXRlIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiBkdXJpbmcgb3V0cHV0LCBiZWNhdXNlCisJICAvLyBjb2RlY3Z0Ojp1bnNoaWZ0KCkgcmV0dXJucyB0aGUgc3RhdGUgdG8gdGhlIGluaXRpYWwgc3RhdGUuCisJICAvLyBUaGlzIGlzIGFsc28gdGhlIGNvcnJlY3Qgc3RhdGUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBiZWNhdXNlCisJICAvLyBhbiB1bnNoaWZ0IHNlcXVlbmNlIHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbiBhdCB0aGUgZW5kLgorCSAgX19zdGF0ZV90eXBlIF9fc3RhdGUgPSBfTV9zdGF0ZV9iZWc7CisJICBvZmZfdHlwZSBfX2NvbXB1dGVkX29mZiA9IF9fb2ZmICogX193aWR0aDsKKwkgIGlmIChfTV9yZWFkaW5nICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCisJICAgIHsKKwkgICAgICBfX3N0YXRlID0gX01fc3RhdGVfbGFzdDsKKwkgICAgICBfX2NvbXB1dGVkX29mZiArPSBfTV9nZXRfZXh0X3BvcyhfX3N0YXRlKTsKKwkgICAgfQorCSAgaWYgKCFfX25vX21vdmVtZW50KQorCSAgICBfX3JldCA9IF9NX3NlZWsoX19jb21wdXRlZF9vZmYsIF9fd2F5LCBfX3N0YXRlKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChfTV93cml0aW5nKQorCQlfX2NvbXB1dGVkX29mZiA9IHRoaXMtPnBwdHIoKSAtIHRoaXMtPnBiYXNlKCk7CisJICAgICAgCisgCSAgICAgIG9mZl90eXBlIF9fZmlsZV9vZmYgPSBfTV9maWxlLnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1cik7CisgCSAgICAgIGlmIChfX2ZpbGVfb2ZmICE9IG9mZl90eXBlKC0xKSkKKwkJeworCQkgIF9fcmV0ID0gX19maWxlX29mZiArIF9fY29tcHV0ZWRfb2ZmOworCQkgIF9fcmV0LnN0YXRlKF9fc3RhdGUpOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gMTcxLiBTdHJhbmdlIHNlZWtwb3MoKSBzZW1hbnRpY3MgZHVlIHRvIGpvaW50IHBvc2l0aW9uCisgIC8vIEFjY29yZGluZyB0byB0aGUgcmVzb2x1dGlvbiBvZiBEUiAxNzEsIHNlZWtwb3Mgc2hvdWxkIGlnbm9yZSB0aGUgbGFzdAorICAvLyBhcmd1bWVudCAob2YgdHlwZSBvcGVubW9kZSkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUpCisgICAgeworICAgICAgcG9zX3R5cGUgX19yZXQgPSAgcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsKKyAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpCisJeworCSAgLy8gRGl0Y2ggYW55IHBiYWNrIGJ1ZmZlcnMgdG8gYXZvaWQgY29uZnVzaW9uLgorCSAgX01fZGVzdHJveV9wYmFjaygpOworCSAgX19yZXQgPSBfTV9zZWVrKG9mZl90eXBlKF9fcG9zKSwgaW9zX2Jhc2U6OmJlZywgX19wb3Muc3RhdGUoKSk7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgX01fc2VlayhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIF9fc3RhdGVfdHlwZSBfX3N0YXRlKQorICAgIHsKKyAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsKKyAgICAgIGlmIChfTV90ZXJtaW5hdGVfb3V0cHV0KCkpCisJeworCSAgb2ZmX3R5cGUgX19maWxlX29mZiA9IF9NX2ZpbGUuc2Vla29mZihfX29mZiwgX193YXkpOworCSAgaWYgKF9fZmlsZV9vZmYgIT0gb2ZmX3R5cGUoLTEpKQorCSAgICB7CisJICAgICAgX01fcmVhZGluZyA9IGZhbHNlOworCSAgICAgIF9NX3dyaXRpbmcgPSBmYWxzZTsKKwkgICAgICBfTV9leHRfbmV4dCA9IF9NX2V4dF9lbmQgPSBfTV9leHRfYnVmOworCSAgICAgIF9NX3NldF9idWZmZXIoLTEpOworCSAgICAgIF9NX3N0YXRlX2N1ciA9IF9fc3RhdGU7CisJICAgICAgX19yZXQgPSBfX2ZpbGVfb2ZmOworCSAgICAgIF9fcmV0LnN0YXRlKF9NX3N0YXRlX2N1cik7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGVuZCBvZiB0aGUgZXh0IGJ1ZmZlciB0byB0aGUgcG9pbnQKKyAgLy8gY29ycmVzcG9uZGluZyB0byBncHRyKCkuIFRoaXMgaXMgYSBuZWdhdGl2ZSB2YWx1ZS4gVXBkYXRlcyBfX3N0YXRlCisgIC8vIGZyb20gZWJhY2soKSBjb3JyZXNwb25kZW5jZSB0byBncHRyKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbnQgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBfTV9nZXRfZXh0X3BvcyhfX3N0YXRlX3R5cGUmIF9fc3RhdGUpCisgICAgeworICAgICAgaWYgKF9NX2NvZGVjdnQtPmFsd2F5c19ub2NvbnYoKSkKKyAgICAgICAgcmV0dXJuIHRoaXMtPmdwdHIoKSAtIHRoaXMtPmVncHRyKCk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvLyBDYWxjdWxhdGUgb2Zmc2V0IGZyb20gX01fZXh0X2J1ZiB0aGF0IGNvcnJlc3BvbmRzIHRvCisgICAgICAgICAgLy8gZ3B0cigpLiBQcmVjb25kaXRpb246IF9fc3RhdGUgPT0gX01fc3RhdGVfbGFzdCwgd2hpY2gKKyAgICAgICAgICAvLyBjb3JyZXNwb25kcyB0byBlYmFjaygpLgorICAgICAgICAgIGNvbnN0IGludCBfX2dwdHJfb2ZmID0KKyAgICAgICAgICAgIF9NX2NvZGVjdnQtPmxlbmd0aChfX3N0YXRlLCBfTV9leHRfYnVmLCBfTV9leHRfbmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5ncHRyKCkgLSB0aGlzLT5lYmFjaygpKTsKKyAgICAgICAgICByZXR1cm4gX01fZXh0X2J1ZiArIF9fZ3B0cl9vZmYgLSBfTV9leHRfZW5kOworICAgICAgICB9CisgICAgfQorICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYm9vbAorICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgX01fdGVybWluYXRlX291dHB1dCgpCisgICAgeworICAgICAgLy8gUGFydCBvbmU6IHVwZGF0ZSB0aGUgb3V0cHV0IHNlcXVlbmNlLgorICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CisgICAgICBpZiAodGhpcy0+cGJhc2UoKSA8IHRoaXMtPnBwdHIoKSkKKwl7CisJICBjb25zdCBpbnRfdHlwZSBfX3RtcCA9IHRoaXMtPm92ZXJmbG93KCk7CisJICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fdG1wLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQorCSAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOworCX0KKworICAgICAgLy8gUGFydCB0d286IG91dHB1dCB1bnNoaWZ0IHNlcXVlbmNlLgorICAgICAgaWYgKF9NX3dyaXRpbmcgJiYgIV9fY2hlY2tfZmFjZXQoX01fY29kZWN2dCkuYWx3YXlzX25vY29udigpCisJICAmJiBfX3Rlc3R2YWxpZCkKKwl7CisJICAvLyBOb3RlOiB0aGlzIHZhbHVlIGlzIGFyYml0cmFyeSwgc2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvCisJICAvLyBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgdW5zaGlmdCBzZXF1ZW5jZSBmcm9tIGNvZGVjdnQsCisJICAvLyB3aXRob3V0IGNhbGxpbmcgdW5zaGlmdC4KKwkgIGNvbnN0IHNpemVfdCBfX2JsZW4gPSAxMjg7CisJICBjaGFyIF9fYnVmW19fYmxlbl07CisJICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBfX3I7CisJICBzdHJlYW1zaXplIF9faWxlbiA9IDA7CisKKwkgIGRvCisJICAgIHsKKwkgICAgICBjaGFyKiBfX25leHQ7CisJICAgICAgX19yID0gX01fY29kZWN2dC0+dW5zaGlmdChfTV9zdGF0ZV9jdXIsIF9fYnVmLAorCQkJCQlfX2J1ZiArIF9fYmxlbiwgX19uZXh0KTsKKwkgICAgICBpZiAoX19yID09IGNvZGVjdnRfYmFzZTo6ZXJyb3IpCisJCV9fdGVzdHZhbGlkID0gZmFsc2U7CisJICAgICAgZWxzZSBpZiAoX19yID09IGNvZGVjdnRfYmFzZTo6b2sgfHwKKwkJICAgICAgIF9fciA9PSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWwpCisJCXsKKwkJICBfX2lsZW4gPSBfX25leHQgLSBfX2J1ZjsKKwkJICBpZiAoX19pbGVuID4gMCkKKwkJICAgIHsKKwkJICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX2VsZW4gPSBfTV9maWxlLnhzcHV0bihfX2J1ZiwgX19pbGVuKTsKKwkJICAgICAgaWYgKF9fZWxlbiAhPSBfX2lsZW4pCisJCQlfX3Rlc3R2YWxpZCA9IGZhbHNlOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgIHdoaWxlIChfX3IgPT0gY29kZWN2dF9iYXNlOjpwYXJ0aWFsICYmIF9faWxlbiA+IDAgJiYgX190ZXN0dmFsaWQpOworCisJICBpZiAoX190ZXN0dmFsaWQpCisJICAgIHsKKwkgICAgICAvLyBUaGlzIHNlY29uZCBjYWxsIHRvIG92ZXJmbG93KCkgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkLAorCSAgICAgIC8vIGJ1dCBpdCdzIG5vdCBjbGVhciB3aHkgaXQncyBuZWVkZWQsIHNpbmNlIHRoZSBvdXRwdXQgYnVmZmVyCisJICAgICAgLy8gc2hvdWxkIGJlIGVtcHR5IGJ5IHRoaXMgcG9pbnQgKGl0IHNob3VsZCBoYXZlIGJlZW4gZW1wdGllZAorCSAgICAgIC8vIGluIHRoZSBmaXJzdCBjYWxsIHRvIG92ZXJmbG93KCkpLgorCSAgICAgIGNvbnN0IGludF90eXBlIF9fdG1wID0gdGhpcy0+b3ZlcmZsb3coKTsKKwkgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fdG1wLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQorCQlfX3Rlc3R2YWxpZCA9IGZhbHNlOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fdGVzdHZhbGlkOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW50CisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzeW5jKCkKKyAgICB7CisgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgYnVmZmVyIHJlc3luY3MgaXRzIGlkZWEgb2YKKyAgICAgIC8vIHRoZSBmaWxlIHBvc2l0aW9uIHdpdGggdGhlIGV4dGVybmFsIGZpbGUuCisgICAgICBpbnQgX19yZXQgPSAwOworICAgICAgaWYgKHRoaXMtPnBiYXNlKCkgPCB0aGlzLT5wcHRyKCkpCisJeworCSAgY29uc3QgaW50X3R5cGUgX190bXAgPSB0aGlzLT5vdmVyZmxvdygpOworCSAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3RtcCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKKwkgICAgX19yZXQgPSAtMTsKKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB2b2lkCisgICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsKKyAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOworCisgICAgICBjb25zdCBfX2NvZGVjdnRfdHlwZSogX01fY29kZWN2dF90bXAgPSAwOworICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoaGFzX2ZhY2V0PF9fY29kZWN2dF90eXBlPihfX2xvYyksIHRydWUpKQorCV9NX2NvZGVjdnRfdG1wID0gJnVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX19sb2MpOworCisgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQorCXsKKwkgIC8vIGVuY29kaW5nKCkgPT0gLTEgaXMgb2sgb25seSBhdCB0aGUgYmVnaW5uaW5nLgorCSAgaWYgKChfTV9yZWFkaW5nIHx8IF9NX3dyaXRpbmcpCisJICAgICAgJiYgX19jaGVja19mYWNldChfTV9jb2RlY3Z0KS5lbmNvZGluZygpID09IC0xKQorCSAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOworCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKF9NX3JlYWRpbmcpCisJCXsKKwkJICBpZiAoX19jaGVja19mYWNldChfTV9jb2RlY3Z0KS5hbHdheXNfbm9jb252KCkpCisJCSAgICB7CisJCSAgICAgIGlmIChfTV9jb2RlY3Z0X3RtcAorCQkJICAmJiAhX19jaGVja19mYWNldChfTV9jb2RlY3Z0X3RtcCkuYWx3YXlzX25vY29udigpKQorCQkJX190ZXN0dmFsaWQgPSB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIF9NX21vZGUpCisJCQkgICAgICAgICAgICAgICE9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICAvLyBFeHRlcm5hbCBwb3NpdGlvbiBjb3JyZXNwb25kaW5nIHRvIGdwdHIoKS4KKwkJICAgICAgX01fZXh0X25leHQgPSBfTV9leHRfYnVmCisJCQkrIF9NX2NvZGVjdnQtPmxlbmd0aChfTV9zdGF0ZV9sYXN0LCBfTV9leHRfYnVmLAorCQkJCQkgICAgIF9NX2V4dF9uZXh0LAorCQkJCQkgICAgIHRoaXMtPmdwdHIoKSAtIHRoaXMtPmViYWNrKCkpOworCQkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fcmVtYWluZGVyID0gX01fZXh0X2VuZCAtIF9NX2V4dF9uZXh0OworCQkgICAgICBpZiAoX19yZW1haW5kZXIpCisJCQlfX2J1aWx0aW5fbWVtbW92ZShfTV9leHRfYnVmLCBfTV9leHRfbmV4dCwgX19yZW1haW5kZXIpOworCisJCSAgICAgIF9NX2V4dF9uZXh0ID0gX01fZXh0X2J1ZjsKKwkJICAgICAgX01fZXh0X2VuZCA9IF9NX2V4dF9idWYgKyBfX3JlbWFpbmRlcjsKKwkJICAgICAgX01fc2V0X2J1ZmZlcigtMSk7CisJCSAgICAgIF9NX3N0YXRlX2xhc3QgPSBfTV9zdGF0ZV9jdXIgPSBfTV9zdGF0ZV9iZWc7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmIChfTV93cml0aW5nICYmIChfX3Rlc3R2YWxpZCA9IF9NX3Rlcm1pbmF0ZV9vdXRwdXQoKSkpCisJCV9NX3NldF9idWZmZXIoLTEpOworCSAgICB9CisJfQorCisgICAgICBpZiAoX190ZXN0dmFsaWQpCisJX01fY29kZWN2dCA9IF9NX2NvZGVjdnRfdG1wOworICAgICAgZWxzZQorCV9NX2NvZGVjdnQgPSAwOworICAgIH0KKworICAvLyBJbmhpYml0IGltcGxpY2l0IGluc3RhbnRpYXRpb25zIGZvciByZXF1aXJlZCBpbnN0YW50aWF0aW9ucywKKyAgLy8gd2hpY2ggYXJlIGRlZmluZWQgdmlhIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIGVsc2V3aGVyZS4KKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZpbGVidWY8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pZnN0cmVhbTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29mc3RyZWFtPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZnN0cmVhbTxjaGFyPjsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19maWxlYnVmPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vZnN0cmVhbTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD47CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9mdW5jdGV4Y2VwdC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2Z1bmN0ZXhjZXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxNDA1OAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9mdW5jdGV4Y2VwdC5oCkBAIC0wLDAgKzEsMTA2IEBACisvLyBGdW5jdGlvbi1CYXNlZCBFeGNlcHRpb24gU3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9mdW5jdGV4Y2VwdC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7ZXhjZXB0aW9ufQorICoKKyAqICBUaGlzIGhlYWRlciBwcm92aWRlcyBzdXBwb3J0IGZvciAtZm5vLWV4Y2VwdGlvbnMuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDE5LjEgIEV4Y2VwdGlvbiBjbGFzc2VzCisvLworCisjaWZuZGVmIF9GVU5DVEVYQ0VQVF9ICisjZGVmaW5lIF9GVU5DVEVYQ0VQVF9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9leGNlcHRpb25fZGVmaW5lcy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gSGVscGVyIGZvciBleGNlcHRpb24gb2JqZWN0cyBpbiA8ZXhjZXB0PgorICB2b2lkCisgIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICAvLyBIZWxwZXIgZm9yIGV4Y2VwdGlvbiBvYmplY3RzIGluIDxuZXc+CisgIHZvaWQKKyAgX190aHJvd19iYWRfYWxsb2Modm9pZCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgLy8gSGVscGVyIGZvciBleGNlcHRpb24gb2JqZWN0cyBpbiA8dHlwZWluZm8+CisgIHZvaWQKKyAgX190aHJvd19iYWRfY2FzdCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICAvLyBIZWxwZXJzIGZvciBleGNlcHRpb24gb2JqZWN0cyBpbiA8c3RkZXhjZXB0PgorICB2b2lkCisgIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciopIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCisgIHZvaWQKKyAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciopIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCisgIHZvaWQKKyAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKikgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgdm9pZAorICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciopIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCisgIHZvaWQKKyAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciopIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCisgIC8vIEhlbHBlcnMgZm9yIGV4Y2VwdGlvbiBvYmplY3RzIGluIDxpb3M+CisgIHZvaWQKKyAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKikgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKyAgdm9pZAorICBfX3Rocm93X3N5c3RlbV9lcnJvcihpbnQpIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworCisgIHZvaWQKKyAgX190aHJvd19mdXR1cmVfZXJyb3IoaW50KSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICAvLyBIZWxwZXJzIGZvciBleGNlcHRpb24gb2JqZWN0cyBpbiA8ZnVuY3Rpb25hbD4KKyAgdm9pZAorICBfX3Rocm93X2JhZF9mdW5jdGlvbl9jYWxsKCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZnVuY3Rpb25hbF9oYXNoLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZnVuY3Rpb25hbF9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyOTIzNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9mdW5jdGlvbmFsX2hhc2guaApAQCAtMCwwICsxLDIxMiBAQAorLy8gZnVuY3Rpb25hbF9oYXNoLmggaGVhZGVyIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2Z1bmN0aW9uYWxfaGFzaC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7ZnVuY3Rpb25hbH0KKyAqLworCisjaWZuZGVmIF9GVU5DVElPTkFMX0hBU0hfSAorI2RlZmluZSBfRlVOQ1RJT05BTF9IQVNIX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2hhc2hfYnl0ZXMuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKiBAZGVmZ3JvdXAgaGFzaGVzIEhhc2hlcworICAgKiAgQGluZ3JvdXAgZnVuY3RvcnMKKyAgICoKKyAgICogICBIYXNoaW5nIGZ1bmN0b3JzIHRha2luZyBhIHZhcmlhYmxlIHR5cGUgYW5kIHJldHVybmluZyBhIEBjIHN0ZDo6c2l6ZV90LgorICAgKgorICAgKiAgQHsKKyAgICovCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX0FyZz4KKyAgICBzdHJ1Y3QgX19oYXNoX2Jhc2UKKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXN1bHQgICAgIHJlc3VsdF90eXBlOworICAgICAgdHlwZWRlZiBfQXJnICAgICAgYXJndW1lbnRfdHlwZTsKKyAgICB9OworCisgIC8vLyBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIGhhc2guCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzaDsKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbnMgZm9yIHBvaW50ZXIgdHlwZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzaDxfVHAqPiA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIF9UcCo+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KF9fcCk7IH0KKyAgICB9OworCisgIC8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBmb3IgaW50ZWdlciB0eXBlcy4KKyNkZWZpbmUgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChfVHApIAlcCisgIHRlbXBsYXRlPD4JCQkJCQlcCisgICAgc3RydWN0IGhhc2g8X1RwPiA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIF9UcD4gIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBvcGVyYXRvcigpKF9UcCBfX3ZhbCkgY29uc3Qgbm9leGNlcHQgICAgICAgICAgICAgIFwKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oX192YWwpOyB9ICAgICAgICAgICAgXAorICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBib29sLgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGJvb2wpCisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBjaGFyLgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGNoYXIpCisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBzaWduZWQgY2hhci4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChzaWduZWQgY2hhcikKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHVuc2lnbmVkIGNoYXIuCisgIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2godW5zaWduZWQgY2hhcikKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHdjaGFyX3QuCisgIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2god2NoYXJfdCkKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGNoYXIxNl90LgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGNoYXIxNl90KQorCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgY2hhcjMyX3QuCisgIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2goY2hhcjMyX3QpCisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBzaG9ydC4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChzaG9ydCkKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIGludC4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChpbnQpCisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBsb25nLgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGxvbmcpCisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBsb25nIGxvbmcuCisgIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2gobG9uZyBsb25nKQorCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgdW5zaWduZWQgc2hvcnQuCisgIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2godW5zaWduZWQgc2hvcnQpCisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciB1bnNpZ25lZCBpbnQuCisgIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2godW5zaWduZWQgaW50KQorCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgdW5zaWduZWQgbG9uZy4KKyAgX0N4eF9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaCh1bnNpZ25lZCBsb25nKQorCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3IgdW5zaWduZWQgbG9uZyBsb25nLgorICBfQ3h4X2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHVuc2lnbmVkIGxvbmcgbG9uZykKKworI3VuZGVmIF9DeHhfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2gKKworICBzdHJ1Y3QgX0hhc2hfaW1wbAorICB7CisgICAgc3RhdGljIHNpemVfdAorICAgIGhhc2goY29uc3Qgdm9pZCogX19wdHIsIHNpemVfdCBfX2NsZW5ndGgsCisJIHNpemVfdCBfX3NlZWQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KDB4YzcwZjY5MDdVTCkpCisgICAgeyByZXR1cm4gX0hhc2hfYnl0ZXMoX19wdHIsIF9fY2xlbmd0aCwgX19zZWVkKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgc3RhdGljIHNpemVfdAorICAgICAgaGFzaChjb25zdCBfVHAmIF9fdmFsKQorICAgICAgeyByZXR1cm4gaGFzaCgmX192YWwsIHNpemVvZihfX3ZhbCkpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBfX2hhc2hfY29tYmluZShjb25zdCBfVHAmIF9fdmFsLCBzaXplX3QgX19oYXNoKQorICAgICAgeyByZXR1cm4gaGFzaCgmX192YWwsIHNpemVvZihfX3ZhbCksIF9faGFzaCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX0Zudl9oYXNoX2ltcGwKKyAgeworICAgIHN0YXRpYyBzaXplX3QKKyAgICBoYXNoKGNvbnN0IHZvaWQqIF9fcHRyLCBzaXplX3QgX19jbGVuZ3RoLAorCSBzaXplX3QgX19zZWVkID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigyMTY2MTM2MjYxVUwpKQorICAgIHsgcmV0dXJuIF9GbnZfaGFzaF9ieXRlcyhfX3B0ciwgX19jbGVuZ3RoLCBfX3NlZWQpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBoYXNoKGNvbnN0IF9UcCYgX192YWwpCisgICAgICB7IHJldHVybiBoYXNoKCZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIF9faGFzaF9jb21iaW5lKGNvbnN0IF9UcCYgX192YWwsIHNpemVfdCBfX2hhc2gpCisgICAgICB7IHJldHVybiBoYXNoKCZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSwgX19oYXNoKTsgfQorICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgZmxvYXQuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxmbG9hdD4gOiBwdWJsaWMgX19oYXNoX2Jhc2U8c2l6ZV90LCBmbG9hdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoZmxvYXQgX192YWwpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7CisJLy8gMCBhbmQgLTAgYm90aCBoYXNoIHRvIHplcm8uCisJcmV0dXJuIF9fdmFsICE9IDAuMGYgPyBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX192YWwpIDogMDsKKyAgICAgIH0KKyAgICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgZG91YmxlLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8ZG91YmxlPiA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIGRvdWJsZT4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoZG91YmxlIF9fdmFsKSBjb25zdCBub2V4Y2VwdAorICAgICAgeworCS8vIDAgYW5kIC0wIGJvdGggaGFzaCB0byB6ZXJvLgorCXJldHVybiBfX3ZhbCAhPSAwLjAgPyBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX192YWwpIDogMDsKKyAgICAgIH0KKyAgICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgbG9uZyBkb3VibGUuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxsb25nIGRvdWJsZT4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIGxvbmcgZG91YmxlPgorICAgIHsKKyAgICAgIF9HTElCQ1hYX1BVUkUgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGxvbmcgZG91YmxlIF9fdmFsKSBjb25zdCBub2V4Y2VwdDsKKyAgICB9OworCisgIC8vIEB9IGdyb3VwIGhhc2hlcworCisgIC8vIEhpbnQgYWJvdXQgcGVyZm9ybWFuY2Ugb2YgaGFzaCBmdW5jdG9yLiBJZiBub3QgZmFzdCB0aGUgaGFzaCBiYXNlZAorICAvLyBjb250YWluZXJzIHdpbGwgY2FjaGUgdGhlIGhhc2ggY29kZS4KKyAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byBjb25zaWRlciB0aGF0IGhhc2hlciBhcmUgZmFzdCB1bmxlc3Mgc3BlY2lmaWVkCisgIC8vIG90aGVyd2lzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0hhc2g+CisgICAgc3RydWN0IF9faXNfZmFzdF9oYXNoIDogcHVibGljIHN0ZDo6dHJ1ZV90eXBlCisgICAgeyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19mYXN0X2hhc2g8aGFzaDxsb25nIGRvdWJsZT4+IDogcHVibGljIHN0ZDo6ZmFsc2VfdHlwZQorICAgIHsgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gX0ZVTkNUSU9OQUxfSEFTSF9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZ3NsaWNlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZ3NsaWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1ZWNmZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9nc2xpY2UuaApAQCAtMCwwICsxLDE4NSBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gZ3NsaWNlIGNsYXNzLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9nc2xpY2UuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3ZhbGFycmF5fQorICovCisKKy8vIFdyaXR0ZW4gYnkgR2FicmllbCBEb3MgUmVpcyA8R2FicmllbC5Eb3MtUmVpc0BEUFRNYXRocy5FTlMtQ2FjaGFuLkZyPgorCisjaWZuZGVmIF9HU0xJQ0VfSAorI2RlZmluZSBfR1NMSUNFX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgbnVtZXJpY19hcnJheXMKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqICBAYnJpZWYgIENsYXNzIGRlZmluaW5nIG11bHRpLWRpbWVuc2lvbmFsIHN1YnNldCBvZiBhbiBhcnJheS4KKyAgICoKKyAgICogIFRoZSBzbGljZSBjbGFzcyByZXByZXNlbnRzIGEgbXVsdGktZGltZW5zaW9uYWwgc3Vic2V0IG9mIGFuIGFycmF5LAorICAgKiAgc3BlY2lmaWVkIGJ5IHRocmVlIHBhcmFtZXRlciBzZXRzOiBzdGFydCBvZmZzZXQsIHNpemUgYXJyYXksIGFuZCBzdHJpZGUKKyAgICogIGFycmF5LiAgVGhlIHN0YXJ0IG9mZnNldCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5CisgICAqICB0aGF0IGlzIHBhcnQgb2YgdGhlIHN1YnNldC4gIFRoZSBzaXplIGFuZCBzdHJpZGUgYXJyYXkgZGVzY3JpYmUgZWFjaAorICAgKiAgZGltZW5zaW9uIG9mIHRoZSBzbGljZS4gIFNpemUgaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGF0CisgICAqICBkaW1lbnNpb24sIGFuZCBzdHJpZGUgaXMgdGhlIGRpc3RhbmNlIGluIHRoZSBhcnJheSBiZXR3ZWVuIHN1Y2Nlc3NpdmUKKyAgICogIGVsZW1lbnRzIGluIHRoYXQgZGltZW5zaW9uLiAgRWFjaCBkaW1lbnNpb24ncyBzaXplIGFuZCBzdHJpZGUgaXMgdGFrZW4KKyAgICogIHRvIGJlZ2luIGF0IGFuIGFycmF5IGVsZW1lbnQgZGVzY3JpYmVkIGJ5IHRoZSBwcmV2aW91cyBkaW1lbnNpb24uICBUaGUKKyAgICogIHNpemUgYXJyYXkgYW5kIHN0cmlkZSBhcnJheSBtdXN0IGJlIHRoZSBzYW1lIHNpemUuCisgICAqCisgICAqICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgb2Zmc2V0PT0zLCBzdHJpZGVbMF09PTExLCBzaXplWzFdPT0zLAorICAgKiAgc3RyaWRlWzFdPT0zLCB0aGVuIHNsaWNlWzAsMF09PWFycmF5WzNdLCBzbGljZVswLDFdPT1hcnJheVs2XSwKKyAgICogIHNsaWNlWzAsMl09PWFycmF5WzldLCBzbGljZVsxLDBdPT1hcnJheVsxNF0sIHNsaWNlWzEsMV09PWFycmF5WzE3XSwKKyAgICogIHNsaWNlWzEsMl09PWFycmF5WzIwXS4KKyAgICovCisgIGNsYXNzIGdzbGljZQorICB7CisgIHB1YmxpYzoKKyAgICAvLy8gIENvbnN0cnVjdCBhbiBlbXB0eSBzbGljZS4KKyAgICBnc2xpY2UoKTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBhIHNsaWNlLgorICAgICAqCisgICAgICogIENvbnN0cnVjdHMgYSBzbGljZSB3aXRoIGFzIG1hbnkgZGltZW5zaW9ucyBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBAYSBsCisgICAgICogIGFuZCBAYSBzIGFycmF5cy4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIF9fbyAgT2Zmc2V0IGluIGFycmF5IG9mIGZpcnN0IGVsZW1lbnQuCisgICAgICogIEBwYXJhbSAgX19sICBBcnJheSBvZiBkaW1lbnNpb24gbGVuZ3Rocy4KKyAgICAgKiAgQHBhcmFtICBfX3MgIEFycmF5IG9mIGRpbWVuc2lvbiBzdHJpZGVzIGJldHdlZW4gYXJyYXkgZWxlbWVudHMuCisgICAgICovCisgICAgZ3NsaWNlKHNpemVfdCBfX28sIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9fbCwgCisJICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19zKTsKKworICAgIC8vIFhYWDogdGhlIElTIHNheXMgdGhlIGNvcHktY3RvciBhbmQgY29weS1hc3NpZ25tZW50IG9wZXJhdG9ycyBhcmUKKyAgICAvLyAgICAgIHN5bnRoZXNpemVkIGJ5IHRoZSBjb21waWxlciBidXQgdGhleSBhcmUganVzdCB1bnN1aXRhYmxlCisgICAgLy8gICAgICBmb3IgYSByZWYtY291bnRlZCBzZW1hbnRpYworICAgIC8vLyAgQ29weSBjb25zdHJ1Y3Rvci4KKyAgICBnc2xpY2UoY29uc3QgZ3NsaWNlJik7CisKKyAgICAvLy8gIERlc3RydWN0b3IuCisgICAgfmdzbGljZSgpOworCisgICAgLy8gWFhYOiBTZWUgdGhlIG5vdGUgYWJvdmUuCisgICAgLy8vICBBc3NpZ25tZW50IG9wZXJhdG9yLgorICAgIGdzbGljZSYgb3BlcmF0b3I9KGNvbnN0IGdzbGljZSYpOworCisgICAgLy8vICBSZXR1cm4gYXJyYXkgb2Zmc2V0IG9mIGZpcnN0IHNsaWNlIGVsZW1lbnQuCisgICAgc2l6ZV90ICAgICAgICAgICBzdGFydCgpIGNvbnN0OworCisgICAgLy8vICBSZXR1cm4gYXJyYXkgb2Ygc2l6ZXMgb2Ygc2xpY2UgZGltZW5zaW9ucy4KKyAgICB2YWxhcnJheTxzaXplX3Q+IHNpemUoKSBjb25zdDsKKyAgICAKKyAgICAvLy8gIFJldHVybiBhcnJheSBvZiBhcnJheSBzdHJpZGVzIGZvciBlYWNoIGRpbWVuc2lvbi4KKyAgICB2YWxhcnJheTxzaXplX3Q+IHN0cmlkZSgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgc3RydWN0IF9JbmRleGVyCisgICAgeworICAgICAgc2l6ZV90IF9NX2NvdW50OworICAgICAgc2l6ZV90IF9NX3N0YXJ0OworICAgICAgdmFsYXJyYXk8c2l6ZV90PiBfTV9zaXplOworICAgICAgdmFsYXJyYXk8c2l6ZV90PiBfTV9zdHJpZGU7CisgICAgICB2YWxhcnJheTxzaXplX3Q+IF9NX2luZGV4OyAvLyBMaW5lYXIgYXJyYXkgb2YgcmVmZXJlbmNlZCBpbmRpY2VzCisKKyAgICAgIF9JbmRleGVyKCkKKyAgICAgIDogX01fY291bnQoMSksIF9NX3N0YXJ0KDApLCBfTV9zaXplKCksIF9NX3N0cmlkZSgpLCBfTV9pbmRleCgpIHt9CisKKyAgICAgIF9JbmRleGVyKHNpemVfdCwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYsCisJICAgICAgIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKTsKKworICAgICAgdm9pZAorICAgICAgX01faW5jcmVtZW50X3VzZSgpCisgICAgICB7ICsrX01fY291bnQ7IH0KKyAgICAgIAorICAgICAgc2l6ZV90CisgICAgICBfTV9kZWNyZW1lbnRfdXNlKCkKKyAgICAgIHsgcmV0dXJuIC0tX01fY291bnQ7IH0KKyAgICB9OworCisgICAgX0luZGV4ZXIqIF9NX2luZGV4OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBmcmllbmQgY2xhc3MgdmFsYXJyYXk7CisgIH07CisKKyAgaW5saW5lIHNpemVfdAorICBnc2xpY2U6OnN0YXJ0KCkgY29uc3QKKyAgeyByZXR1cm4gX01faW5kZXggPyBfTV9pbmRleC0+X01fc3RhcnQgOiAwOyB9CisKKyAgaW5saW5lIHZhbGFycmF5PHNpemVfdD4KKyAgZ3NsaWNlOjpzaXplKCkgY29uc3QKKyAgeyByZXR1cm4gX01faW5kZXggPyBfTV9pbmRleC0+X01fc2l6ZSA6IHZhbGFycmF5PHNpemVfdD4oKTsgfQorCisgIGlubGluZSB2YWxhcnJheTxzaXplX3Q+CisgIGdzbGljZTo6c3RyaWRlKCkgY29uc3QKKyAgeyByZXR1cm4gX01faW5kZXggPyBfTV9pbmRleC0+X01fc3RyaWRlIDogdmFsYXJyYXk8c2l6ZV90PigpOyB9CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyA1NDMuIHZhbGFycmF5IHNsaWNlIGRlZmF1bHQgY29uc3RydWN0b3IKKyAgaW5saW5lCisgIGdzbGljZTo6Z3NsaWNlKCkKKyAgOiBfTV9pbmRleChuZXcgZ3NsaWNlOjpfSW5kZXhlcigpKSB7fQorCisgIGlubGluZQorICBnc2xpY2U6OmdzbGljZShzaXplX3QgX19vLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2wsCisJCSBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX3MpCisgIDogX01faW5kZXgobmV3IGdzbGljZTo6X0luZGV4ZXIoX19vLCBfX2wsIF9fcykpIHt9CisKKyAgaW5saW5lCisgIGdzbGljZTo6Z3NsaWNlKGNvbnN0IGdzbGljZSYgX19nKQorICA6IF9NX2luZGV4KF9fZy5fTV9pbmRleCkKKyAgeyBpZiAoX01faW5kZXgpIF9NX2luZGV4LT5fTV9pbmNyZW1lbnRfdXNlKCk7IH0KKworICBpbmxpbmUKKyAgZ3NsaWNlOjp+Z3NsaWNlKCkKKyAgeworICAgIGlmIChfTV9pbmRleCAmJiBfTV9pbmRleC0+X01fZGVjcmVtZW50X3VzZSgpID09IDApCisgICAgICBkZWxldGUgX01faW5kZXg7CisgIH0KKworICBpbmxpbmUgZ3NsaWNlJgorICBnc2xpY2U6Om9wZXJhdG9yPShjb25zdCBnc2xpY2UmIF9fZykKKyAgeworICAgIGlmIChfX2cuX01faW5kZXgpCisgICAgICBfX2cuX01faW5kZXgtPl9NX2luY3JlbWVudF91c2UoKTsKKyAgICBpZiAoX01faW5kZXggJiYgX01faW5kZXgtPl9NX2RlY3JlbWVudF91c2UoKSA9PSAwKQorICAgICAgZGVsZXRlIF9NX2luZGV4OworICAgIF9NX2luZGV4ID0gX19nLl9NX2luZGV4OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vIEB9IGdyb3VwIG51bWVyaWNfYXJyYXlzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9HU0xJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2dzbGljZV9hcnJheS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2dzbGljZV9hcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjE4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvZ3NsaWNlX2FycmF5LmgKQEAgLTAsMCArMSwyMTggQEAKKy8vIFRoZSB0ZW1wbGF0ZSBhbmQgaW5saW5lcyBmb3IgdGhlIC0qLSBDKysgLSotIGdzbGljZV9hcnJheSBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvZ3NsaWNlX2FycmF5LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt2YWxhcnJheX0KKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfR1NMSUNFX0FSUkFZX0gKKyNkZWZpbmUgX0dTTElDRV9BUlJBWV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIG51bWVyaWNfYXJyYXlzCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiAgQGJyaWVmICBSZWZlcmVuY2UgdG8gbXVsdGktZGltZW5zaW9uYWwgc3Vic2V0IG9mIGFuIGFycmF5LgorICAgKgorICAgKiAgQSBnc2xpY2VfYXJyYXkgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGFjdHVhbCBlbGVtZW50cyBvZiBhbiBhcnJheQorICAgKiAgc3BlY2lmaWVkIGJ5IGEgZ3NsaWNlLiAgVGhlIHdheSB0byBnZXQgYSBnc2xpY2VfYXJyYXkgaXMgdG8gY2FsbAorICAgKiAgb3BlcmF0b3JbXShnc2xpY2UpIG9uIGEgdmFsYXJyYXkuICBUaGUgcmV0dXJuZWQgZ3NsaWNlX2FycmF5IHRoZW4KKyAgICogIHBlcm1pdHMgY2Fycnlpbmcgb3BlcmF0aW9ucyBvdXQgb24gdGhlIHJlZmVyZW5jZWQgc3Vic2V0IG9mIGVsZW1lbnRzIGluCisgICAqICB0aGUgb3JpZ2luYWwgdmFsYXJyYXkuICBGb3IgZXhhbXBsZSwgb3BlcmF0b3IrPSh2YWxhcnJheSkgd2lsbCBhZGQKKyAgICogIHZhbHVlcyB0byB0aGUgc3Vic2V0IG9mIGVsZW1lbnRzIGluIHRoZSB1bmRlcmx5aW5nIHZhbGFycmF5IHRoaXMKKyAgICogIGdzbGljZV9hcnJheSByZWZlcnMgdG8uCisgICAqCisgICAqICBAcGFyYW0gIFRwICBFbGVtZW50IHR5cGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgZ3NsaWNlX2FycmF5CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI1My4gdmFsYXJyYXkgaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWxtb3N0IGVudGlyZWx5IHVzZWxlc3MKKworICAgICAgLy8vICBDb3B5IGNvbnN0cnVjdG9yLiAgQm90aCBzbGljZXMgcmVmZXIgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBhcnJheS4KKyAgICAgIGdzbGljZV9hcnJheShjb25zdCBnc2xpY2VfYXJyYXkmKTsKKworICAgICAgLy8vICBBc3NpZ25tZW50IG9wZXJhdG9yLiAgQXNzaWducyBzbGljZSBlbGVtZW50cyB0byBjb3JyZXNwb25kaW5nCisgICAgICAvLy8gIGVsZW1lbnRzIG9mIEBhIGEuCisgICAgICBnc2xpY2VfYXJyYXkmIG9wZXJhdG9yPShjb25zdCBnc2xpY2VfYXJyYXkmKTsKKworICAgICAgLy8vICBBc3NpZ24gc2xpY2UgZWxlbWVudHMgdG8gY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBNdWx0aXBseSBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yKj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBEaXZpZGUgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvci89KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTW9kdWxvIHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3IlPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFkZCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgdG8gc2xpY2UgZWxlbWVudHMuCisgICAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBTdWJ0cmFjdCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgZnJvbSBzbGljZSBlbGVtZW50cy4KKyAgICAgIHZvaWQgb3BlcmF0b3ItPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExvZ2ljYWwgeG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcl49KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTG9naWNhbCBhbmQgc2xpY2UgZWxlbWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yJj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMb2dpY2FsIG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcnw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTGVmdCBzaGlmdCBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgUmlnaHQgc2hpZnQgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFzc2lnbiBhbGwgc2xpY2UgZWxlbWVudHMgdG8gQGEgdC4KKyAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UcCYpIGNvbnN0OworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yKj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvci89KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICAgIHZvaWQgb3BlcmF0b3IlPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvci09KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICAgIHZvaWQgb3BlcmF0b3JePShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yJj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcnw9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgX0FycmF5PF9UcD4gICAgX01fYXJyYXk7CisgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfTV9pbmRleDsKKworICAgICAgZnJpZW5kIGNsYXNzIHZhbGFycmF5PF9UcD47CisKKyAgICAgIGdzbGljZV9hcnJheShfQXJyYXk8X1RwPiwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpOworCisgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKKyAgICAgIGdzbGljZV9hcnJheSgpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIGdzbGljZV9hcnJheTxfVHA+Ojpnc2xpY2VfYXJyYXkoX0FycmF5PF9UcD4gX19hLAorCQkJCSAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpCisgICAgOiBfTV9hcnJheShfX2EpLCBfTV9pbmRleChfX2kpIHt9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIGdzbGljZV9hcnJheTxfVHA+Ojpnc2xpY2VfYXJyYXkoY29uc3QgZ3NsaWNlX2FycmF5PF9UcD4mIF9fYSkKKyAgICA6IF9NX2FycmF5KF9fYS5fTV9hcnJheSksIF9NX2luZGV4KF9fYS5fTV9pbmRleCkge30KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGdzbGljZV9hcnJheTxfVHA+JgorICAgIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgZ3NsaWNlX2FycmF5PF9UcD4mIF9fYSkKKyAgICB7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPihfX2EuX01fYXJyYXkpLAorCQkJICAgX0FycmF5PHNpemVfdD4oX19hLl9NX2luZGV4KSwgX01faW5kZXguc2l6ZSgpLAorCQkJICAgX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgeworICAgICAgc3RkOjpfX3ZhbGFycmF5X2ZpbGwoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwKKwkJCSAgIF9NX2luZGV4LnNpemUoKSwgX190KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0CisgICAgeworICAgICAgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4oX192KSwgX192LnNpemUoKSwKKwkJCSAgIF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgIGlubGluZSB2b2lkCisgICAgICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkgY29uc3QKKyAgICAgIHsKKwlzdGQ6Ol9fdmFsYXJyYXlfY29weSAoX19lLCBfTV9pbmRleC5zaXplKCksIF9NX2FycmF5LAorCQkJICAgICAgX0FycmF5PHNpemVfdD4oX01faW5kZXgpKTsKKyAgICAgIH0KKworI3VuZGVmIF9ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IKKyNkZWZpbmUgX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUihfT3AsIF9OYW1lKQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCQkJCQlcCisgICAgaW5saW5lIHZvaWQJCQkJCQkJCVwKKyAgICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwJXAorCQkJICAgICAgIF9BcnJheTxfVHA+KF9fdiksIF9fdi5zaXplKCkpOwkJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4JCQkJICAgICAgICAgICAgICAgIFwKKyAgICAgIGlubGluZSB2b2lkCQkJCQkJCVwKKyAgICAgIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciBfT3AjIz0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkgY29uc3RcCisgICAgICB7CQkJCQkJCQkJXAorCV9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsXAorCQkJCSBfTV9pbmRleC5zaXplKCkpOwkJCVwKKyAgICAgIH0KKworX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigqLCBfX211bHRpcGxpZXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKC8sIF9fZGl2aWRlcykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoJSwgX19tb2R1bHVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigrLCBfX3BsdXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKC0sIF9fbWludXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKF4sIF9fYml0d2lzZV94b3IpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCYsIF9fYml0d2lzZV9hbmQpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKHwsIF9fYml0d2lzZV9vcikKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoPDwsIF9fc2hpZnRfbGVmdCkKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoPj4sIF9fc2hpZnRfcmlnaHQpCisKKyN1bmRlZiBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SCisKKyAgLy8gQH0gZ3JvdXAgbnVtZXJpY19hcnJheXMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0dTTElDRV9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvaGFzaF9ieXRlcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2hhc2hfYnl0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2U0ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2hhc2hfYnl0ZXMuaApAQCAtMCwwICsxLDU5IEBACisvLyBEZWNsYXJhdGlvbnMgZm9yIGhhc2ggZnVuY3Rpb25zLiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9oYXNoX2J5dGVzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtmdW5jdGlvbmFsfQorICovCisKKyNpZm5kZWYgX0hBU0hfQllURVNfSAorI2RlZmluZSBfSEFTSF9CWVRFU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworbmFtZXNwYWNlIHN0ZAoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBIYXNoIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIGZvciB0aGUgbm9udHJpdmlhbCBzcGVjaWFsaXphdGlvbi4KKyAgLy8gQWxsIG9mIHRoZW0gYXJlIGJhc2VkIG9uIGEgcHJpbWl0aXZlIHRoYXQgaGFzaGVzIGEgcG9pbnRlciB0byBhCisgIC8vIGJ5dGUgYXJyYXkuIFRoZSBhY3R1YWwgaGFzaCBhbGdvcml0aG0gaXMgbm90IGd1YXJhbnRlZWQgdG8gc3RheQorICAvLyB0aGUgc2FtZSBmcm9tIHJlbGVhc2UgdG8gcmVsZWFzZSAtLSBpdCBtYXkgYmUgdXBkYXRlZCBvciB0dW5lZCB0bworICAvLyBpbXByb3ZlIGhhc2ggcXVhbGl0eSBvciBzcGVlZC4KKyAgc2l6ZV90CisgIF9IYXNoX2J5dGVzKGNvbnN0IHZvaWQqIF9fcHRyLCBzaXplX3QgX19sZW4sIHNpemVfdCBfX3NlZWQpOworCisgIC8vIEEgc2ltaWxhciBoYXNoIHByaW1pdGl2ZSwgdXNpbmcgdGhlIEZOViBoYXNoIGFsZ29yaXRobS4gVGhpcworICAvLyBhbGdvcml0aG0gaXMgZ3VhcmFudGVlZCB0byBzdGF5IHRoZSBzYW1lIGZyb20gcmVsZWFzZSB0byByZWxlYXNlLgorICAvLyAoYWx0aG91Z2ggaXQgbWlnaHQgbm90IHByb2R1Y2UgdGhlIHNhbWUgdmFsdWVzIG9uIGRpZmZlcmVudAorICAvLyBtYWNoaW5lcy4pCisgIHNpemVfdAorICBfRm52X2hhc2hfYnl0ZXMoY29uc3Qgdm9pZCogX19wdHIsIHNpemVfdCBfX2xlbiwgc2l6ZV90IF9fc2VlZCk7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvaGFzaHRhYmxlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvaGFzaHRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2ZTliYgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9oYXNodGFibGUuaApAQCAtMCwwICsxLDE4MjMgQEAKKy8vIGhhc2h0YWJsZS5oIGhlYWRlciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9oYXNodGFibGUuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3Vub3JkZXJlZF9tYXAsIHVub3JkZXJlZF9zZXR9CisgKi8KKworI2lmbmRlZiBfSEFTSFRBQkxFX0gKKyNkZWZpbmUgX0hBU0hUQUJMRV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9oYXNodGFibGVfcG9saWN5Lmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoPgorICAgIHVzaW5nIF9fY2FjaGVfZGVmYXVsdAorICAgICAgPSAgX19ub3RfPF9fYW5kXzwvLyBEbyBub3QgY2FjaGUgZm9yIGZhc3QgaGFzaGVyLgorCQkgICAgICAgX19pc19mYXN0X2hhc2g8X0hhc2g+LAorCQkgICAgICAgLy8gTWFuZGF0b3J5IHRvIG1ha2UgbG9jYWxfaXRlcmF0b3IgZGVmYXVsdAorCQkgICAgICAgLy8gY29uc3RydWN0aWJsZSBhbmQgYXNzaWduYWJsZS4KKwkJICAgICAgIGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxfSGFzaD4sCisJCSAgICAgICBpc19jb3B5X2Fzc2lnbmFibGU8X0hhc2g+LAorCQkgICAgICAgLy8gTWFuZGF0b3J5IHRvIGhhdmUgZXJhc2Ugbm90IHRocm93aW5nLgorCQkgICAgICAgX19kZXRhaWw6Ol9faXNfbm9leGNlcHRfaGFzaDxfVHAsIF9IYXNoPj4+OworCisgIC8qKgorICAgKiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBfSGFzaHRhYmxlLgorICAgKgorICAgKiAgQGluZ3JvdXAgaGFzaHRhYmxlLWRldGFpbAorICAgKgorICAgKiAgQHRwYXJhbSBfVmFsdWUgIENvcHlDb25zdHJ1Y3RpYmxlIHR5cGUuCisgICAqCisgICAqICBAdHBhcmFtIF9LZXkgICAgQ29weUNvbnN0cnVjdGlibGUgdHlwZS4KKyAgICoKKyAgICogIEB0cGFyYW0gX0FsbG9jICBBbiBhbGxvY2F0b3IgdHlwZQorICAgKiAgKFtsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50c10pIHdob3NlIF9BbGxvYzo6dmFsdWVfdHlwZSBpcworICAgKiAgX1ZhbHVlLiAgQXMgYSBjb25mb3JtaW5nIGV4dGVuc2lvbiwgd2UgYWxsb3cgZm9yCisgICAqICBfQWxsb2M6OnZhbHVlX3R5cGUgIT0gX1ZhbHVlLgorICAgKgorICAgKiAgQHRwYXJhbSBfRXh0cmFjdEtleSAgRnVuY3Rpb24gb2JqZWN0IHRoYXQgdGFrZXMgYW4gb2JqZWN0IG9mIHR5cGUKKyAgICogIF9WYWx1ZSBhbmQgcmV0dXJucyBhIHZhbHVlIG9mIHR5cGUgX0tleS4KKyAgICoKKyAgICogIEB0cGFyYW0gX0VxdWFsICBGdW5jdGlvbiBvYmplY3QgdGhhdCB0YWtlcyB0d28gb2JqZWN0cyBvZiB0eXBlIGsKKyAgICogIGFuZCByZXR1cm5zIGEgYm9vbC1saWtlIHZhbHVlIHRoYXQgaXMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMKKyAgICogIGFyZSBjb25zaWRlcmVkIGVxdWFsLgorICAgKgorICAgKiAgQHRwYXJhbSBfSDEgIFRoZSBoYXNoIGZ1bmN0aW9uLiBBIHVuYXJ5IGZ1bmN0aW9uIG9iamVjdCB3aXRoCisgICAqICBhcmd1bWVudCB0eXBlIF9LZXkgYW5kIHJlc3VsdCB0eXBlIHNpemVfdC4gUmV0dXJuIHZhbHVlcyBzaG91bGQKKyAgICogIGJlIGRpc3RyaWJ1dGVkIG92ZXIgdGhlIGVudGlyZSByYW5nZSBbMCwgbnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6Om1heCgpXS4KKyAgICoKKyAgICogIEB0cGFyYW0gX0gyICBUaGUgcmFuZ2UtaGFzaGluZyBmdW5jdGlvbiAoaW4gdGhlIHRlcm1pbm9sb2d5IG9mCisgICAqICBUYXZvcmkgYW5kIERyZWl6aW4pLiAgQSBiaW5hcnkgZnVuY3Rpb24gb2JqZWN0IHdob3NlIGFyZ3VtZW50CisgICAqICB0eXBlcyBhbmQgcmVzdWx0IHR5cGUgYXJlIGFsbCBzaXplX3QuICBHaXZlbiBhcmd1bWVudHMgciBhbmQgTiwKKyAgICogIHRoZSByZXR1cm4gdmFsdWUgaXMgaW4gdGhlIHJhbmdlIFswLCBOKS4KKyAgICoKKyAgICogIEB0cGFyYW0gX0hhc2ggIFRoZSByYW5nZWQgaGFzaCBmdW5jdGlvbiAoVGF2b3JpIGFuZCBEcmVpemluKS4gQQorICAgKiAgYmluYXJ5IGZ1bmN0aW9uIHdob3NlIGFyZ3VtZW50IHR5cGVzIGFyZSBfS2V5IGFuZCBzaXplX3QgYW5kCisgICAqICB3aG9zZSByZXN1bHQgdHlwZSBpcyBzaXplX3QuICBHaXZlbiBhcmd1bWVudHMgayBhbmQgTiwgdGhlCisgICAqICByZXR1cm4gdmFsdWUgaXMgaW4gdGhlIHJhbmdlIFswLCBOKS4gIERlZmF1bHQ6IGhhc2goaywgTikgPQorICAgKiAgaDIoaDEoayksIE4pLiAgSWYgX0hhc2ggaXMgYW55dGhpbmcgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCwgX0gxCisgICAqICBhbmQgX0gyIGFyZSBpZ25vcmVkLgorICAgKgorICAgKiAgQHRwYXJhbSBfUmVoYXNoUG9saWN5ICBQb2xpY3kgY2xhc3Mgd2l0aCB0aHJlZSBtZW1iZXJzLCBhbGwgb2YKKyAgICogIHdoaWNoIGdvdmVybiB0aGUgYnVja2V0IGNvdW50LiBfTV9uZXh0X2JrdChuKSByZXR1cm5zIGEgYnVja2V0CisgICAqICBjb3VudCBubyBzbWFsbGVyIHRoYW4gbi4gIF9NX2JrdF9mb3JfZWxlbWVudHMobikgcmV0dXJucyBhCisgICAqICBidWNrZXQgY291bnQgYXBwcm9wcmlhdGUgZm9yIGFuIGVsZW1lbnQgY291bnQgb2Ygbi4KKyAgICogIF9NX25lZWRfcmVoYXNoKG5fYmt0LCBuX2VsdCwgbl9pbnMpIGRldGVybWluZXMgd2hldGhlciwgaWYgdGhlCisgICAqICBjdXJyZW50IGJ1Y2tldCBjb3VudCBpcyBuX2JrdCBhbmQgdGhlIGN1cnJlbnQgZWxlbWVudCBjb3VudCBpcworICAgKiAgbl9lbHQsIHdlIG5lZWQgdG8gaW5jcmVhc2UgdGhlIGJ1Y2tldCBjb3VudC4gIElmIHNvLCByZXR1cm5zCisgICAqICBtYWtlX3BhaXIodHJ1ZSwgbiksIHdoZXJlIG4gaXMgdGhlIG5ldyBidWNrZXQgY291bnQuICBJZiBub3QsCisgICAqICByZXR1cm5zIG1ha2VfcGFpcihmYWxzZSwgPGFueXRoaW5nPikKKyAgICoKKyAgICogIEB0cGFyYW0gX1RyYWl0cyAgQ29tcGlsZS10aW1lIGNsYXNzIHdpdGggdGhyZWUgYm9vbGVhbgorICAgKiAgc3RkOjppbnRlZ3JhbF9jb25zdGFudCBtZW1iZXJzOiAgX19jYWNoZV9oYXNoX2NvZGUsIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorICAgKiAgIF9fdW5pcXVlX2tleXMuCisgICAqCisgICAqICBFYWNoIF9IYXNodGFibGUgZGF0YSBzdHJ1Y3R1cmUgaGFzOgorICAgKgorICAgKiAgLSBfQnVja2V0W10gICAgICAgX01fYnVja2V0cworICAgKiAgLSBfSGFzaF9ub2RlX2Jhc2UgX01fYmJlZ2luCisgICAqICAtIHNpemVfdHlwZSAgICAgICBfTV9idWNrZXRfY291bnQKKyAgICogIC0gc2l6ZV90eXBlICAgICAgIF9NX2VsZW1lbnRfY291bnQKKyAgICoKKyAgICogIHdpdGggX0J1Y2tldCBiZWluZyBfSGFzaF9ub2RlKiBhbmQgX0hhc2hfbm9kZSBjb250YWluaW5nOgorICAgKgorICAgKiAgLSBfSGFzaF9ub2RlKiAgIF9NX25leHQKKyAgICogIC0gVHAgICAgICAgICAgICBfTV92YWx1ZQorICAgKiAgLSBzaXplX3QgICAgICAgIF9NX2hhc2hfY29kZSBpZiBjYWNoZV9oYXNoX2NvZGUgaXMgdHJ1ZQorICAgKgorICAgKiAgSW4gdGVybXMgb2YgU3RhbmRhcmQgY29udGFpbmVycyB0aGUgaGFzaHRhYmxlIGlzIGxpa2UgdGhlIGFnZ3JlZ2F0aW9uIG9mOgorICAgKgorICAgKiAgLSBzdGQ6OmZvcndhcmRfbGlzdDxfTm9kZT4gY29udGFpbmluZyB0aGUgZWxlbWVudHMKKyAgICogIC0gc3RkOjp2ZWN0b3I8c3RkOjpmb3J3YXJkX2xpc3Q8X05vZGU+OjppdGVyYXRvcj4gcmVwcmVzZW50aW5nIHRoZSBidWNrZXRzCisgICAqCisgICAqICBUaGUgbm9uLWVtcHR5IGJ1Y2tldHMgY29udGFpbiB0aGUgbm9kZSBiZWZvcmUgdGhlIGZpcnN0IG5vZGUgaW4gdGhlCisgICAqICBidWNrZXQuIFRoaXMgZGVzaWduIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBzb21ldGhpbmcgbGlrZSBhCisgICAqICBzdGQ6OmZvcndhcmRfbGlzdDo6aW5zZXJ0X2FmdGVyIG9uIGNvbnRhaW5lciBpbnNlcnRpb24gYW5kCisgICAqICBzdGQ6OmZvcndhcmRfbGlzdDo6ZXJhc2VfYWZ0ZXIgb24gY29udGFpbmVyIGVyYXNlCisgICAqICBjYWxscy4gX01fYmVmb3JlX2JlZ2luIGlzIGVxdWl2YWxlbnQgdG8KKyAgICogIHN0ZDo6Zm9yd2FyZF9saXN0OjpiZWZvcmVfYmVnaW4uIEVtcHR5IGJ1Y2tldHMgY29udGFpbgorICAgKiAgbnVsbHB0ci4gIE5vdGUgdGhhdCBvbmUgb2YgdGhlIG5vbi1lbXB0eSBidWNrZXRzIGNvbnRhaW5zCisgICAqICAmX01fYmVmb3JlX2JlZ2luIHdoaWNoIGlzIG5vdCBhIGRlcmVmZXJlbmNlYWJsZSBub2RlIHNvIHRoZQorICAgKiAgbm9kZSBwb2ludGVyIGluIGEgYnVja2V0IHNoYWxsIG5ldmVyIGJlIGRlcmVmZXJlbmNlZCwgb25seSBpdHMKKyAgICogIG5leHQgbm9kZSBjYW4gYmUuCisgICAqCisgICAqICBXYWxraW5nIHRocm91Z2ggYSBidWNrZXQncyBub2RlcyByZXF1aXJlcyBhIGNoZWNrIG9uIHRoZSBoYXNoIGNvZGUgdG8KKyAgICogIHNlZSBpZiBlYWNoIG5vZGUgaXMgc3RpbGwgaW4gdGhlIGJ1Y2tldC4gU3VjaCBhIGRlc2lnbiBhc3N1bWVzIGEKKyAgICogIHF1aXRlIGVmZmljaWVudCBoYXNoIGZ1bmN0b3IgYW5kIGlzIG9uZSBvZiB0aGUgcmVhc29ucyBpdCBpcworICAgKiAgaGlnaGx5IGFkdmlzYWJsZSB0byBzZXQgX19jYWNoZV9oYXNoX2NvZGUgdG8gdHJ1ZS4KKyAgICoKKyAgICogIFRoZSBjb250YWluZXIgaXRlcmF0b3JzIGFyZSBzaW1wbHkgYnVpbHQgZnJvbSBub2Rlcy4gVGhpcyB3YXkKKyAgICogIGluY3JlbWVudGluZyB0aGUgaXRlcmF0b3IgaXMgcGVyZmVjdGx5IGVmZmljaWVudCBpbmRlcGVuZGVudCBvZgorICAgKiAgaG93IG1hbnkgZW1wdHkgYnVja2V0cyB0aGVyZSBhcmUgaW4gdGhlIGNvbnRhaW5lci4KKyAgICoKKyAgICogIE9uIGluc2VydCB3ZSBjb21wdXRlIHRoZSBlbGVtZW50J3MgaGFzaCBjb2RlIGFuZCB1c2UgaXQgdG8gZmluZCB0aGUKKyAgICogIGJ1Y2tldCBpbmRleC4gSWYgdGhlIGVsZW1lbnQgbXVzdCBiZSBpbnNlcnRlZCBpbiBhbiBlbXB0eSBidWNrZXQKKyAgICogIHdlIGFkZCBpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzaW5nbHkgbGlua2VkIGxpc3QgYW5kIG1ha2UgdGhlCisgICAqICBidWNrZXQgcG9pbnQgdG8gX01fYmVmb3JlX2JlZ2luLiBUaGUgYnVja2V0IHRoYXQgdXNlZCB0byBwb2ludCB0bworICAgKiAgX01fYmVmb3JlX2JlZ2luLCBpZiBhbnksIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8gaXRzIG5ldyBiZWZvcmUKKyAgICogIGJlZ2luIG5vZGUuCisgICAqCisgICAqICBPbiBlcmFzZSwgdGhlIHNpbXBsZSBpdGVyYXRvciBkZXNpZ24gcmVxdWlyZXMgdXNpbmcgdGhlIGhhc2gKKyAgICogIGZ1bmN0b3IgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgYnVja2V0IHRvIHVwZGF0ZS4gRm9yIHRoaXMKKyAgICogIHJlYXNvbiwgd2hlbiBfX2NhY2hlX2hhc2hfY29kZSBpcyBzZXQgdG8gZmFsc2UgdGhlIGhhc2ggZnVuY3RvciBtdXN0CisgICAqICBub3QgdGhyb3cgYW5kIHRoaXMgaXMgZW5mb3JjZWQgYnkgYSBzdGF0aWMgYXNzZXJ0aW9uLgorICAgKgorICAgKiAgRnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBieSBkZWNvbXBvc2l0aW9uIGludG8gYmFzZSBjbGFzc2VzLAorICAgKiAgd2hlcmUgdGhlIGRlcml2ZWQgX0hhc2h0YWJsZSBjbGFzcyBpcyB1c2VkIGluIF9NYXBfYmFzZSwKKyAgICogIF9JbnNlcnQsIF9SZWhhc2hfYmFzZSwgYW5kIF9FcXVhbGl0eSBiYXNlIGNsYXNzZXMgdG8gYWNjZXNzIHRoZQorICAgKiAgInRoaXMiIHBvaW50ZXIuIF9IYXNodGFibGVfYmFzZSBpcyB1c2VkIGluIHRoZSBiYXNlIGNsYXNzZXMgYXMgYQorICAgKiAgbm9uLXJlY3Vyc2l2ZSwgZnVsbHktY29tcGxldGVkLXR5cGUgc28gdGhhdCBkZXRhaWxlZCBuZXN0ZWQgdHlwZQorICAgKiAgaW5mb3JtYXRpb24sIHN1Y2ggYXMgaXRlcmF0b3IgdHlwZSBhbmQgbm9kZSB0eXBlLCBjYW4gYmUKKyAgICogIHVzZWQuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgIkN1cmlvdXNseSBSZWN1cnJpbmcgVGVtcGxhdGUKKyAgICogIFBhdHRlcm4iIChDUlRQKSB0ZWNobmlxdWUsIGJ1dCB1c2VzIGEgcmVjb25zdHJ1Y3RlZCwgbm90CisgICAqICBleHBsaWNpdGx5IHBhc3NlZCwgdGVtcGxhdGUgcGF0dGVybi4KKyAgICoKKyAgICogIEJhc2UgY2xhc3MgdGVtcGxhdGVzIGFyZTogCisgICAqICAgIC0gX19kZXRhaWw6Ol9IYXNodGFibGVfYmFzZQorICAgKiAgICAtIF9fZGV0YWlsOjpfTWFwX2Jhc2UKKyAgICogICAgLSBfX2RldGFpbDo6X0luc2VydAorICAgKiAgICAtIF9fZGV0YWlsOjpfUmVoYXNoX2Jhc2UKKyAgICogICAgLSBfX2RldGFpbDo6X0VxdWFsaXR5CisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIF9IYXNodGFibGUKKyAgICA6IHB1YmxpYyBfX2RldGFpbDo6X0hhc2h0YWJsZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCQkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfVHJhaXRzPiwKKyAgICAgIHB1YmxpYyBfX2RldGFpbDo6X01hcF9iYXNlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJCSBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+LAorICAgICAgcHVibGljIF9fZGV0YWlsOjpfSW5zZXJ0PF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz4sCisgICAgICBwdWJsaWMgX19kZXRhaWw6Ol9SZWhhc2hfYmFzZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCQkgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPiwKKyAgICAgIHB1YmxpYyBfX2RldGFpbDo6X0VxdWFsaXR5PF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJCSBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiBfRXF1YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2VxdWFsOworCisgICAgICAvLyBtYXBwZWRfdHlwZSwgaWYgcHJlc2VudCwgY29tZXMgZnJvbSBfTWFwX2Jhc2UuCisgICAgICAvLyBoYXNoZXIsIGlmIHByZXNlbnQsIGNvbWVzIGZyb20gX0hhc2hfY29kZV9iYXNlL19IYXNodGFibGVfYmFzZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyCQkgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgIHByaXZhdGU6CisgICAgICB1c2luZyBfX3JlaGFzaF90eXBlID0gX1JlaGFzaFBvbGljeTsKKyAgICAgIHVzaW5nIF9fcmVoYXNoX3N0YXRlID0gdHlwZW5hbWUgX19yZWhhc2hfdHlwZTo6X1N0YXRlOworCisgICAgICB1c2luZyBfX3RyYWl0c190eXBlID0gX1RyYWl0czsKKyAgICAgIHVzaW5nIF9faGFzaF9jYWNoZWQgPSB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpfX2hhc2hfY2FjaGVkOworICAgICAgdXNpbmcgX19jb25zdGFudF9pdGVyYXRvcnMgPSB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpfX2NvbnN0YW50X2l0ZXJhdG9yczsKKyAgICAgIHVzaW5nIF9fdW5pcXVlX2tleXMgPSB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpfX3VuaXF1ZV9rZXlzOworCisgICAgICB1c2luZyBfX2tleV9leHRyYWN0ID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKKwkJCQkJICAgICBfX2NvbnN0YW50X2l0ZXJhdG9yczo6dmFsdWUsCisJCQkJICAgICAgIAkgICAgIF9fZGV0YWlsOjpfSWRlbnRpdHksCisJCQkJCSAgICAgX19kZXRhaWw6Ol9TZWxlY3Qxc3Q+Ojp0eXBlOworCisgICAgICB1c2luZyBfX2hhc2h0YWJsZV9iYXNlID0gX19kZXRhaWw6OgorCQkJICAgICAgIF9IYXNodGFibGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LAorCQkJCQkgICAgICBfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwgX1RyYWl0cz47CisKKyAgICAgIHVzaW5nIF9faGFzaF9jb2RlX2Jhc2UgPSAgdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6X19oYXNoX2NvZGVfYmFzZTsKKyAgICAgIHVzaW5nIF9faGFzaF9jb2RlID0gIHR5cGVuYW1lIF9faGFzaHRhYmxlX2Jhc2U6Ol9faGFzaF9jb2RlOworICAgICAgdXNpbmcgX19ub2RlX3R5cGUgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpfX25vZGVfdHlwZTsKKyAgICAgIHVzaW5nIF9fbm9kZV9iYXNlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6X19ub2RlX2Jhc2U7CisgICAgICB1c2luZyBfX2J1Y2tldF90eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6X19idWNrZXRfdHlwZTsKKyAgICAgIHVzaW5nIF9faXJldHVybl90eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6X19pcmV0dXJuX3R5cGU7CisgICAgICB1c2luZyBfX2ljb252X3R5cGUgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpfX2ljb252X3R5cGU7CisKKyAgICAgIHVzaW5nIF9fbWFwX2Jhc2UgPSBfX2RldGFpbDo6X01hcF9iYXNlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwKKwkJCQkJICAgICBfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwKKwkJCQkJICAgICBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjsKKworICAgICAgdXNpbmcgX19yZWhhc2hfYmFzZSA9IF9fZGV0YWlsOjpfUmVoYXNoX2Jhc2U8X0tleSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkJCQkgICBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJCQkJICAgX0gxLCBfSDIsIF9IYXNoLAorCQkJCQkJICAgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz47CisKKyAgICAgIHVzaW5nIF9fZXFfYmFzZSA9IF9fZGV0YWlsOjpfRXF1YWxpdHk8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LAorCQkJCQkgICAgX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsCisJCQkJCSAgICBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjsKKworICAgICAgLy8gTWV0YXByb2dyYW1taW5nIGZvciBwaWNraW5nIGFwYXJ0IGhhc2ggY2FjaGluZy4KKyAgICAgIHVzaW5nIF9faGFzaF9ub2V4Y2VwdCA9IF9fZGV0YWlsOjpfX2lzX25vZXhjZXB0X2hhc2g8X0tleSwgX0gxPjsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbmQ+CisJdXNpbmcgX19pZl9oYXNoX2NhY2hlZCA9IF9fb3JfPF9fbm90XzxfX2hhc2hfY2FjaGVkPiwgX0NvbmQ+OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29uZD4KKwl1c2luZyBfX2lmX2hhc2hfbm90X2NhY2hlZCA9IF9fb3JfPF9faGFzaF9jYWNoZWQsIF9Db25kPjsKKworICAgICAgLy8gQ29tcGlsZS10aW1lIGRpYWdub3N0aWNzLgorCisgICAgICAvLyBXaGVuIGhhc2ggY29kZXMgYXJlIG5vdCBjYWNoZWQgdGhlIGhhc2ggZnVuY3RvciBzaGFsbCBub3QKKyAgICAgIC8vIHRocm93IGJlY2F1c2UgaXQgaXMgdXNlZCBpbiBtZXRob2RzIChlcmFzZSwgc3dhcC4uLikgdGhhdAorICAgICAgLy8gc2hhbGwgbm90IHRocm93LgorICAgICAgc3RhdGljX2Fzc2VydChfX2lmX2hhc2hfbm90X2NhY2hlZDxfX2hhc2hfbm9leGNlcHQ+Ojp2YWx1ZSwKKwkJICAgICJDYWNoZSB0aGUgaGFzaCBjb2RlIgorCQkgICAgIiBvciBxdWFsaWZ5IHlvdXIgaGFzaCBmdW5jdG9yIHdpdGggbm9leGNlcHQiKTsKKworICAgICAgLy8gRm9sbG93aW5nIHR3byBzdGF0aWMgYXNzZXJ0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIGd1YXJhbnRlZQorICAgICAgLy8gdGhhdCBsb2NhbF9pdGVyYXRvciB3aWxsIGJlIGRlZmF1bHQgY29uc3RydWN0aWJsZS4KKworICAgICAgLy8gV2hlbiBoYXNoIGNvZGVzIGFyZSBjYWNoZWQgbG9jYWwgaXRlcmF0b3IgaW5oZXJpdHMgZnJvbSBIMiBmdW5jdG9yCisgICAgICAvLyB3aGljaCBtdXN0IHRoZW4gYmUgZGVmYXVsdCBjb25zdHJ1Y3RpYmxlLgorICAgICAgc3RhdGljX2Fzc2VydChfX2lmX2hhc2hfY2FjaGVkPGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxfSDI+Pjo6dmFsdWUsCisJCSAgICAiRnVuY3RvciB1c2VkIHRvIG1hcCBoYXNoIGNvZGUgdG8gYnVja2V0IGluZGV4IgorCQkgICAgIiBtdXN0IGJlIGRlZmF1bHQgY29uc3RydWN0aWJsZSIpOworCisgICAgICAvLyBXaGVuIGhhc2ggY29kZXMgYXJlIG5vdCBjYWNoZWQgbG9jYWwgaXRlcmF0b3IgaW5oZXJpdHMgZnJvbQorICAgICAgLy8gX19oYXNoX2NvZGVfYmFzZSBhYm92ZSB0byBjb21wdXRlIG5vZGUgYnVja2V0IGluZGV4IHNvIGl0IGhhcyB0byBiZQorICAgICAgLy8gZGVmYXVsdCBjb25zdHJ1Y3RpYmxlLgorICAgICAgc3RhdGljX2Fzc2VydChfX2lmX2hhc2hfbm90X2NhY2hlZDwKKwkJICAgIGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTwKKwkJICAgICAgLy8gV2UgdXNlIF9IYXNodGFibGVfZWJvX2hlbHBlciB0byBhY2Nlc3MgdGhlIHByb3RlY3RlZAorCQkgICAgICAvLyBkZWZhdWx0IGNvbnN0cnVjdG9yLgorCQkgICAgICBfX2RldGFpbDo6X0hhc2h0YWJsZV9lYm9faGVscGVyPDAsIF9faGFzaF9jb2RlX2Jhc2U+Pj46OnZhbHVlLAorCQkgICAgIkNhY2hlIHRoZSBoYXNoIGNvZGUgb3IgbWFrZSBmdW5jdG9ycyBpbnZvbHZlZCBpbiBoYXNoIGNvZGUiCisJCSAgICAiIGFuZCBidWNrZXQgaW5kZXggY29tcHV0YXRpb24gZGVmYXVsdCBjb25zdHJ1Y3RpYmxlIik7CisKKyAgICAgIC8vIFdoZW4gaGFzaCBjb2RlcyBhcmUgbm90IGNhY2hlZCBsb2NhbCBpdGVyYXRvciBpbmhlcml0cyBmcm9tCisgICAgICAvLyBfX2hhc2hfY29kZV9iYXNlIGFib3ZlIHRvIGNvbXB1dGUgbm9kZSBidWNrZXQgaW5kZXggc28gaXQgaGFzIHRvIGJlCisgICAgICAvLyBhc3NpZ25hYmxlLgorICAgICAgc3RhdGljX2Fzc2VydChfX2lmX2hhc2hfbm90X2NhY2hlZDwKKwkJICAgICAgaXNfY29weV9hc3NpZ25hYmxlPF9faGFzaF9jb2RlX2Jhc2U+Pjo6dmFsdWUsCisJCSAgICAiQ2FjaGUgdGhlIGhhc2ggY29kZSBvciBtYWtlIGZ1bmN0b3JzIGludm9sdmVkIGluIGhhc2ggY29kZSIKKwkJICAgICIgYW5kIGJ1Y2tldCBpbmRleCBjb21wdXRhdGlvbiBjb3B5IGFzc2lnbmFibGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXlhLCB0eXBlbmFtZSBfVmFsdWVhLCB0eXBlbmFtZSBfQWxsb2NhLAorCSAgICAgICB0eXBlbmFtZSBfRXh0cmFjdEtleWEsIHR5cGVuYW1lIF9FcXVhbGEsCisJICAgICAgIHR5cGVuYW1lIF9IMWEsIHR5cGVuYW1lIF9IMmEsIHR5cGVuYW1lIF9IYXNoYSwKKwkgICAgICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeWEsIHR5cGVuYW1lIF9UcmFpdHNhLAorCSAgICAgICBib29sIF9VbmlxdWVfa2V5c2E+CisJZnJpZW5kIHN0cnVjdCBfX2RldGFpbDo6X01hcF9iYXNlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5YSwgdHlwZW5hbWUgX1ZhbHVlYSwgdHlwZW5hbWUgX0FsbG9jYSwKKwkgICAgICAgdHlwZW5hbWUgX0V4dHJhY3RLZXlhLCB0eXBlbmFtZSBfRXF1YWxhLAorCSAgICAgICB0eXBlbmFtZSBfSDFhLCB0eXBlbmFtZSBfSDJhLCB0eXBlbmFtZSBfSGFzaGEsCisJICAgICAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3lhLCB0eXBlbmFtZSBfVHJhaXRzYT4KKwlmcmllbmQgc3RydWN0IF9fZGV0YWlsOjpfSW5zZXJ0X2Jhc2U7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXlhLCB0eXBlbmFtZSBfVmFsdWVhLCB0eXBlbmFtZSBfQWxsb2NhLAorCSAgICAgICB0eXBlbmFtZSBfRXh0cmFjdEtleWEsIHR5cGVuYW1lIF9FcXVhbGEsCisJICAgICAgIHR5cGVuYW1lIF9IMWEsIHR5cGVuYW1lIF9IMmEsIHR5cGVuYW1lIF9IYXNoYSwKKwkgICAgICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeWEsIHR5cGVuYW1lIF9UcmFpdHNhLAorCSAgICAgICBib29sIF9Db25zdGFudF9pdGVyYXRvcnNhLCBib29sIF9VbmlxdWVfa2V5c2E+CisJZnJpZW5kIHN0cnVjdCBfX2RldGFpbDo6X0luc2VydDsKKworICAgICAgdXNpbmcgc2l6ZV90eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6c2l6ZV90eXBlOworICAgICAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6ZGlmZmVyZW5jZV90eXBlOworCisgICAgICB1c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIF9faGFzaHRhYmxlX2Jhc2U6Oml0ZXJhdG9yOworICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpjb25zdF9pdGVyYXRvcjsKKworICAgICAgdXNpbmcgbG9jYWxfaXRlcmF0b3IgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpsb2NhbF9pdGVyYXRvcjsKKyAgICAgIHVzaW5nIGNvbnN0X2xvY2FsX2l0ZXJhdG9yID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6CisJCQkJICAgY29uc3RfbG9jYWxfaXRlcmF0b3I7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfX25vZGVfdHlwZT46Om90aGVyCisJCQkJCQkJX05vZGVfYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9fYnVja2V0X3R5cGU+OjpvdGhlcgorCQkJCQkJCV9CdWNrZXRfYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHVzaW5nIF9fYmVmb3JlX2JlZ2luID0gX19kZXRhaWw6Ol9CZWZvcmVfYmVnaW48X05vZGVfYWxsb2NhdG9yX3R5cGU+OworCisgICAgICBfX2J1Y2tldF90eXBlKgkJX01fYnVja2V0czsKKyAgICAgIHNpemVfdHlwZQkJCV9NX2J1Y2tldF9jb3VudDsKKyAgICAgIF9fYmVmb3JlX2JlZ2luCQlfTV9iYmVnaW47CisgICAgICBzaXplX3R5cGUJCQlfTV9lbGVtZW50X2NvdW50OworICAgICAgX1JlaGFzaFBvbGljeQkJX01fcmVoYXNoX3BvbGljeTsKKworICAgICAgX05vZGVfYWxsb2NhdG9yX3R5cGUmCisgICAgICBfTV9ub2RlX2FsbG9jYXRvcigpCisgICAgICB7IHJldHVybiBfTV9iYmVnaW47IH0KKworICAgICAgY29uc3QgX05vZGVfYWxsb2NhdG9yX3R5cGUmCisgICAgICBfTV9ub2RlX2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9iYmVnaW47IH0KKworICAgICAgX19ub2RlX2Jhc2UmCisgICAgICBfTV9iZWZvcmVfYmVnaW4oKQorICAgICAgeyByZXR1cm4gX01fYmJlZ2luLl9NX25vZGU7IH0KKworICAgICAgY29uc3QgX19ub2RlX2Jhc2UmCisgICAgICBfTV9iZWZvcmVfYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYmJlZ2luLl9NX25vZGU7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJX19ub2RlX3R5cGUqCisJX01fYWxsb2NhdGVfbm9kZShfQXJncyYmLi4uIF9fYXJncyk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfX25vZGVfdHlwZSogX19uKTsKKworICAgICAgLy8gRGVhbGxvY2F0ZSB0aGUgbGlua2VkIGxpc3Qgb2Ygbm9kZXMgcG9pbnRlZCB0byBieSBfX24KKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZXMoX19ub2RlX3R5cGUqIF9fbik7CisKKyAgICAgIF9fYnVja2V0X3R5cGUqCisgICAgICBfTV9hbGxvY2F0ZV9idWNrZXRzKHNpemVfdHlwZSBfX24pOworCisgICAgICB2b2lkCisgICAgICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX19idWNrZXRfdHlwZSosIHNpemVfdHlwZSBfX24pOworCisgICAgICAvLyBHZXRzIGJ1Y2tldCBiZWdpbiwgZGVhbHMgd2l0aCB0aGUgZmFjdCB0aGF0IG5vbi1lbXB0eSBidWNrZXRzIGNvbnRhaW4KKyAgICAgIC8vIHRoZWlyIGJlZm9yZSBiZWdpbiBub2RlLgorICAgICAgX19ub2RlX3R5cGUqCisgICAgICBfTV9idWNrZXRfYmVnaW4oc2l6ZV90eXBlIF9fYmt0KSBjb25zdDsKKworICAgICAgX19ub2RlX3R5cGUqCisgICAgICBfTV9iZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfX25vZGVfdHlwZSo+KF9NX2JlZm9yZV9iZWdpbigpLl9NX254dCk7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9yLCBkZXN0cnVjdG9yLCBhc3NpZ25tZW50LCBzd2FwCisgICAgICBfSGFzaHRhYmxlKHNpemVfdHlwZSBfX2J1Y2tldF9oaW50LAorCQkgY29uc3QgX0gxJiwgY29uc3QgX0gyJiwgY29uc3QgX0hhc2gmLAorCQkgY29uc3QgX0VxdWFsJiwgY29uc3QgX0V4dHJhY3RLZXkmLAorCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJX0hhc2h0YWJsZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgIHNpemVfdHlwZSBfX2J1Y2tldF9oaW50LAorCQkgICBjb25zdCBfSDEmLCBjb25zdCBfSDImLCBjb25zdCBfSGFzaCYsCisJCSAgIGNvbnN0IF9FcXVhbCYsIGNvbnN0IF9FeHRyYWN0S2V5JiwKKwkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmKTsKKworICAgICAgX0hhc2h0YWJsZShjb25zdCBfSGFzaHRhYmxlJik7CisKKyAgICAgIF9IYXNodGFibGUoX0hhc2h0YWJsZSYmKTsKKworICAgICAgLy8gVXNlIGRlbGVnYXRpbmcgY29uc3RydWN0b3JzLgorICAgICAgZXhwbGljaXQKKyAgICAgIF9IYXNodGFibGUoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgY29uc3QgX0gxJiBfX2hmID0gX0gxKCksCisJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0hhc2h0YWJsZShfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkJICAgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoKCksIF9fZXFsLAorCQkgICBfX2tleV9leHRyYWN0KCksIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwlfSGFzaHRhYmxlKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorCQkgICBzaXplX3R5cGUgX19uID0gMCwKKwkJICAgY29uc3QgX0gxJiBfX2hmID0gX0gxKCksCisJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfSGFzaHRhYmxlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkJICAgICBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwgX19lcWwsCisJCSAgICAgX19rZXlfZXh0cmFjdCgpLCBfX2EpCisJeyB9CisKKyAgICAgIF9IYXNodGFibGUoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCSBzaXplX3R5cGUgX19uID0gMCwKKwkJIGNvbnN0IF9IMSYgX19oZiA9IF9IMSgpLAorCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9IYXNodGFibGUoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgX19uLCBfX2hmLAorCQkgICBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJCSAgIF9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCgpLCBfX2VxbCwKKwkJICAgX19rZXlfZXh0cmFjdCgpLCBfX2EpCisgICAgICB7IH0KKworICAgICAgX0hhc2h0YWJsZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfSGFzaHRhYmxlJiBfX2h0KQorICAgICAgeworCV9IYXNodGFibGUgX190bXAoX19odCk7CisJdGhpcy0+c3dhcChfX3RtcCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfSGFzaHRhYmxlJgorICAgICAgb3BlcmF0b3I9KF9IYXNodGFibGUmJiBfX2h0KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9faHQpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX0hhc2h0YWJsZSYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIH5fSGFzaHRhYmxlKCkgbm9leGNlcHQ7CisKKyAgICAgIHZvaWQgc3dhcChfSGFzaHRhYmxlJik7CisKKyAgICAgIC8vIEJhc2ljIGNvbnRhaW5lciBvcGVyYXRpb25zCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX01fYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2JlZ2luKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IobnVsbHB0cik7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihudWxscHRyKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2JlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKG51bGxwdHIpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9lbGVtZW50X2NvdW50OyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKF9NX25vZGVfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IoKS5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIC8vIE9ic2VydmVycworICAgICAga2V5X2VxdWFsCisgICAgICBrZXlfZXEoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZXEoKTsgfQorCisgICAgICAvLyBoYXNoX2Z1bmN0aW9uLCBpZiBwcmVzZW50LCBjb21lcyBmcm9tIF9IYXNoX2NvZGVfYmFzZS4KKworICAgICAgLy8gQnVja2V0IG9wZXJhdGlvbnMKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2J1Y2tldF9jb3VudDsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9idWNrZXRfY291bnQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gbWF4X3NpemUoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9zaXplKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6OmRpc3RhbmNlKGJlZ2luKF9fbiksIGVuZChfX24pKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYnVja2V0X2luZGV4KF9faywgdGhpcy0+X01faGFzaF9jb2RlKF9faykpOyB9CisKKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKQorICAgICAgeworCXJldHVybiBsb2NhbF9pdGVyYXRvcigqdGhpcywgX01fYnVja2V0X2JlZ2luKF9fbiksCisJCQkgICAgICBfX24sIF9NX2J1Y2tldF9jb3VudCk7CisgICAgICB9CisKKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBlbmQoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIGxvY2FsX2l0ZXJhdG9yKCp0aGlzLCBudWxscHRyLCBfX24sIF9NX2J1Y2tldF9jb3VudCk7IH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGJlZ2luKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJcmV0dXJuIGNvbnN0X2xvY2FsX2l0ZXJhdG9yKCp0aGlzLCBfTV9idWNrZXRfYmVnaW4oX19uKSwKKwkJCQkgICAgX19uLCBfTV9idWNrZXRfY291bnQpOworICAgICAgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9sb2NhbF9pdGVyYXRvcigqdGhpcywgbnVsbHB0ciwgX19uLCBfTV9idWNrZXRfY291bnQpOyB9CisKKyAgICAgIC8vIERSIDY5MS4KKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBjYmVnaW4oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoKnRoaXMsIF9NX2J1Y2tldF9iZWdpbihfX24pLAorCQkJCSAgICBfX24sIF9NX2J1Y2tldF9jb3VudCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBjZW5kKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9sb2NhbF9pdGVyYXRvcigqdGhpcywgbnVsbHB0ciwgX19uLCBfTV9idWNrZXRfY291bnQpOyB9CisKKyAgICAgIGZsb2F0CisgICAgICBsb2FkX2ZhY3RvcigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7CisJcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzaXplKCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJ1Y2tldF9jb3VudCgpKTsKKyAgICAgIH0KKworICAgICAgLy8gbWF4X2xvYWRfZmFjdG9yLCBpZiBwcmVzZW50LCBjb21lcyBmcm9tIF9SZWhhc2hfYmFzZS4KKworICAgICAgLy8gR2VuZXJhbGl6YXRpb24gb2YgbWF4X2xvYWRfZmFjdG9yLiAgRXh0ZW5zaW9uLCBub3QgZm91bmQgaW4KKyAgICAgIC8vIFRSMS4gIE9ubHkgdXNlZnVsIGlmIF9SZWhhc2hQb2xpY3kgaXMgc29tZXRoaW5nIG90aGVyIHRoYW4KKyAgICAgIC8vIHRoZSBkZWZhdWx0LgorICAgICAgY29uc3QgX1JlaGFzaFBvbGljeSYKKyAgICAgIF9fcmVoYXNoX3BvbGljeSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yZWhhc2hfcG9saWN5OyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9fcmVoYXNoX3BvbGljeShjb25zdCBfUmVoYXNoUG9saWN5Jik7CisKKyAgICAgIC8vIExvb2t1cC4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2spOworCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdDsKKworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdDsKKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spOworCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBCdWNrZXQgaW5kZXggY29tcHV0YXRpb24gaGVscGVycy4KKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fYnVja2V0X2luZGV4KF9fbm9kZV90eXBlKiBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfX2hhc2hfY29kZV9iYXNlOjpfTV9idWNrZXRfaW5kZXgoX19uLCBfTV9idWNrZXRfY291bnQpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IGtleV90eXBlJiBfX2ssIF9faGFzaF9jb2RlIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9faGFzaF9jb2RlX2Jhc2U6Ol9NX2J1Y2tldF9pbmRleChfX2ssIF9fYywgX01fYnVja2V0X2NvdW50KTsgfQorCisgICAgICAvLyBGaW5kIGFuZCBpbnNlcnQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgdHlwZXMKKyAgICAgIC8vIEZpbmQgdGhlIG5vZGUgYmVmb3JlIHRoZSBvbmUgbWF0Y2hpbmcgdGhlIGNyaXRlcmlhLgorICAgICAgX19ub2RlX2Jhc2UqCisgICAgICBfTV9maW5kX2JlZm9yZV9ub2RlKHNpemVfdHlwZSwgY29uc3Qga2V5X3R5cGUmLCBfX2hhc2hfY29kZSkgY29uc3Q7CisKKyAgICAgIF9fbm9kZV90eXBlKgorICAgICAgX01fZmluZF9ub2RlKHNpemVfdHlwZSBfX2JrdCwgY29uc3Qga2V5X3R5cGUmIF9fa2V5LAorCQkgICBfX2hhc2hfY29kZSBfX2MpIGNvbnN0CisgICAgICB7CisJX19ub2RlX2Jhc2UqIF9fYmVmb3JlX24gPSBfTV9maW5kX2JlZm9yZV9ub2RlKF9fYmt0LCBfX2tleSwgX19jKTsKKwlpZiAoX19iZWZvcmVfbikKKwkgIHJldHVybiBzdGF0aWNfY2FzdDxfX25vZGVfdHlwZSo+KF9fYmVmb3JlX24tPl9NX254dCk7CisJcmV0dXJuIG51bGxwdHI7CisgICAgICB9CisKKyAgICAgIC8vIEluc2VydCBhIG5vZGUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGJ1Y2tldC4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luc2VydF9idWNrZXRfYmVnaW4oc2l6ZV90eXBlLCBfX25vZGVfdHlwZSopOworCisgICAgICAvLyBSZW1vdmUgdGhlIGJ1Y2tldCBmaXJzdCBub2RlCisgICAgICB2b2lkCisgICAgICBfTV9yZW1vdmVfYnVja2V0X2JlZ2luKHNpemVfdHlwZSBfX2JrdCwgX19ub2RlX3R5cGUqIF9fbmV4dF9uLAorCQkJICAgICBzaXplX3R5cGUgX19uZXh0X2JrdCk7CisKKyAgICAgIC8vIEdldCB0aGUgbm9kZSBiZWZvcmUgX19uIGluIHRoZSBidWNrZXQgX19ia3QKKyAgICAgIF9fbm9kZV9iYXNlKgorICAgICAgX01fZ2V0X3ByZXZpb3VzX25vZGUoc2l6ZV90eXBlIF9fYmt0LCBfX25vZGVfYmFzZSogX19uKTsKKworICAgICAgLy8gSW5zZXJ0IG5vZGUgd2l0aCBoYXNoIGNvZGUgX19jb2RlLCBpbiBidWNrZXQgYmt0IGlmIG5vIHJlaGFzaCAoYXNzdW1lcworICAgICAgLy8gbm8gZWxlbWVudCB3aXRoIGl0cyBrZXkgYWxyZWFkeSBwcmVzZW50KS4gVGFrZSBvd25lcnNoaXAgb2YgdGhlIG5vZGUsCisgICAgICAvLyBkZWFsbG9jYXRlIGl0IG9uIGV4Y2VwdGlvbi4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfdW5pcXVlX25vZGUoc2l6ZV90eXBlIF9fYmt0LCBfX2hhc2hfY29kZSBfX2NvZGUsCisJCQkgICAgX19ub2RlX3R5cGUqIF9fbik7CisKKyAgICAgIC8vIEluc2VydCBub2RlIHdpdGggaGFzaCBjb2RlIF9fY29kZS4gVGFrZSBvd25lcnNoaXAgb2YgdGhlIG5vZGUsCisgICAgICAvLyBkZWFsbG9jYXRlIGl0IG9uIGV4Y2VwdGlvbi4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfbXVsdGlfbm9kZShfX2hhc2hfY29kZSBfX2NvZGUsIF9fbm9kZV90eXBlKiBfX24pOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisJX01fZW1wbGFjZShzdGQ6OnRydWVfdHlwZSwgX0FyZ3MmJi4uLiBfX2FyZ3MpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCV9NX2VtcGxhY2Uoc3RkOjpmYWxzZV90eXBlLCBfQXJncyYmLi4uIF9fYXJncyk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisJc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorCV9NX2luc2VydChfQXJnJiYsIHN0ZDo6dHJ1ZV90eXBlKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKwlpdGVyYXRvcgorCV9NX2luc2VydChfQXJnJiYsIHN0ZDo6ZmFsc2VfdHlwZSk7CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fZXJhc2Uoc3RkOjp0cnVlX3R5cGUsIGNvbnN0IGtleV90eXBlJik7CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fZXJhc2Uoc3RkOjpmYWxzZV90eXBlLCBjb25zdCBrZXlfdHlwZSYpOworCisgICAgICBpdGVyYXRvcgorICAgICAgX01fZXJhc2Uoc2l6ZV90eXBlIF9fYmt0LCBfX25vZGVfYmFzZSogX19wcmV2X24sIF9fbm9kZV90eXBlKiBfX24pOworCisgICAgcHVibGljOgorICAgICAgLy8gRW1wbGFjZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJX19pcmV0dXJuX3R5cGUKKwllbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsgcmV0dXJuIF9NX2VtcGxhY2UoX191bmlxdWVfa2V5cygpLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9oaW50KGNvbnN0X2l0ZXJhdG9yLCBfQXJncyYmLi4uIF9fYXJncykKKwl7IHJldHVybiBfX2ljb252X3R5cGUoKShlbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikpOyB9CisKKyAgICAgIC8vIEluc2VydCBtZW1iZXIgZnVuY3Rpb25zIHZpYSBpbmhlcml0YW5jZS4KKworICAgICAgLy8gRXJhc2UKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvcik7CisKKyAgICAgIC8vIExXRyAyMDU5LgorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IHJldHVybiBlcmFzZShjb25zdF9pdGVyYXRvcihfX2l0KSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rKQorICAgICAgeyByZXR1cm4gX01fZXJhc2UoX191bmlxdWVfa2V5cygpLCBfX2spOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3IpOworCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIG5vZXhjZXB0OworCisgICAgICAvLyBTZXQgbnVtYmVyIG9mIGJ1Y2tldHMgdG8gYmUgYXBwcm9wcmlhdGUgZm9yIGNvbnRhaW5lciBvZiBuIGVsZW1lbnQuCisgICAgICB2b2lkIHJlaGFzaChzaXplX3R5cGUgX19uKTsKKworICAgICAgLy8gRFIgMTE4OS4KKyAgICAgIC8vIHJlc2VydmUsIGlmIHByZXNlbnQsIGNvbWVzIGZyb20gX1JlaGFzaF9iYXNlLgorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIEhlbHBlciByZWhhc2ggbWV0aG9kIHVzZWQgd2hlbiBrZXlzIGFyZSB1bmlxdWUuCisgICAgICB2b2lkIF9NX3JlaGFzaF9hdXgoc2l6ZV90eXBlIF9fbiwgc3RkOjp0cnVlX3R5cGUpOworCisgICAgICAvLyBIZWxwZXIgcmVoYXNoIG1ldGhvZCB1c2VkIHdoZW4ga2V5cyBjYW4gYmUgbm9uLXVuaXF1ZS4KKyAgICAgIHZvaWQgX01fcmVoYXNoX2F1eChzaXplX3R5cGUgX19uLCBzdGQ6OmZhbHNlX3R5cGUpOworCisgICAgICAvLyBVbmNvbmRpdGlvbmFsbHkgY2hhbmdlIHNpemUgb2YgYnVja2V0IGFycmF5IHRvIG4sIHJlc3RvcmUKKyAgICAgIC8vIGhhc2ggcG9saWN5IHN0YXRlIHRvIF9fc3RhdGUgb24gZXhjZXB0aW9uLgorICAgICAgdm9pZCBfTV9yZWhhc2goc2l6ZV90eXBlIF9fbiwgY29uc3QgX19yZWhhc2hfc3RhdGUmIF9fc3RhdGUpOworICAgIH07CisKKworICAvLyBEZWZpbml0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZSBfSGFzaHRhYmxlJ3Mgb3V0LW9mLWxpbmUgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQkgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46Ol9fbm9kZV90eXBlKgorICAgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgICAgX01fYWxsb2NhdGVfbm9kZShfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKwlfX25vZGVfdHlwZSogX19uID0gX01fbm9kZV9hbGxvY2F0b3IoKS5hbGxvY2F0ZSgxKTsKKwlfX3RyeQorCSAgeworCSAgICBfTV9ub2RlX2FsbG9jYXRvcigpLmNvbnN0cnVjdChfX24sIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgIHJldHVybiBfX247CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX25vZGVfYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShfX24sIDEpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICBfTV9kZWFsbG9jYXRlX25vZGUoX19ub2RlX3R5cGUqIF9fbikKKyAgICB7CisgICAgICBfTV9ub2RlX2FsbG9jYXRvcigpLmRlc3Ryb3koX19uKTsKKyAgICAgIF9NX25vZGVfYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShfX24sIDEpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICBfTV9kZWFsbG9jYXRlX25vZGVzKF9fbm9kZV90eXBlKiBfX24pCisgICAgeworICAgICAgd2hpbGUgKF9fbikKKwl7CisJICBfX25vZGVfdHlwZSogX190bXAgPSBfX247CisJICBfX24gPSBfX24tPl9NX25leHQoKTsKKwkgIF9NX2RlYWxsb2NhdGVfbm9kZShfX3RtcCk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjpfX2J1Y2tldF90eXBlKgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIF9NX2FsbG9jYXRlX2J1Y2tldHMoc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfQnVja2V0X2FsbG9jYXRvcl90eXBlIF9fYWxsb2MoX01fbm9kZV9hbGxvY2F0b3IoKSk7CisKKyAgICAgIF9fYnVja2V0X3R5cGUqIF9fcCA9IF9fYWxsb2MuYWxsb2NhdGUoX19uKTsKKyAgICAgIF9fYnVpbHRpbl9tZW1zZXQoX19wLCAwLCBfX24gKiBzaXplb2YoX19idWNrZXRfdHlwZSkpOworICAgICAgcmV0dXJuIF9fcDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9fYnVja2V0X3R5cGUqIF9fcCwgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfQnVja2V0X2FsbG9jYXRvcl90eXBlIF9fYWxsb2MoX01fbm9kZV9hbGxvY2F0b3IoKSk7CisgICAgICBfX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LAorCQkJX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfVHJhaXRzPjo6X19ub2RlX3R5cGUqCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgX01fYnVja2V0X2JlZ2luKHNpemVfdHlwZSBfX2JrdCkgY29uc3QKKyAgICB7CisgICAgICBfX25vZGVfYmFzZSogX19uID0gX01fYnVja2V0c1tfX2JrdF07CisgICAgICByZXR1cm4gX19uID8gc3RhdGljX2Nhc3Q8X19ub2RlX3R5cGUqPihfX24tPl9NX254dCkgOiBudWxscHRyOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIF9IYXNodGFibGUoc2l6ZV90eXBlIF9fYnVja2V0X2hpbnQsCisJICAgICAgIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLCBjb25zdCBfSGFzaCYgX19oLAorCSAgICAgICBjb25zdCBfRXF1YWwmIF9fZXEsIGNvbnN0IF9FeHRyYWN0S2V5JiBfX2V4aywKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICA6IF9faGFzaHRhYmxlX2Jhc2UoX19leGssIF9faDEsIF9faDIsIF9faCwgX19lcSksCisgICAgICBfX21hcF9iYXNlKCksCisgICAgICBfX3JlaGFzaF9iYXNlKCksCisgICAgICBfTV9idWNrZXRfY291bnQoMCksCisgICAgICBfTV9iYmVnaW4oX19hKSwKKyAgICAgIF9NX2VsZW1lbnRfY291bnQoMCksCisgICAgICBfTV9yZWhhc2hfcG9saWN5KCkKKyAgICB7CisgICAgICBfTV9idWNrZXRfY291bnQgPSBfTV9yZWhhc2hfcG9saWN5Ll9NX25leHRfYmt0KF9fYnVja2V0X2hpbnQpOworICAgICAgX01fYnVja2V0cyA9IF9NX2FsbG9jYXRlX2J1Y2tldHMoX01fYnVja2V0X2NvdW50KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCSBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICAgIF9IYXNodGFibGUoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCSBzaXplX3R5cGUgX19idWNrZXRfaGludCwKKwkJIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLCBjb25zdCBfSGFzaCYgX19oLAorCQkgY29uc3QgX0VxdWFsJiBfX2VxLCBjb25zdCBfRXh0cmFjdEtleSYgX19leGssCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfX2hhc2h0YWJsZV9iYXNlKF9fZXhrLCBfX2gxLCBfX2gyLCBfX2gsIF9fZXEpLAorCV9fbWFwX2Jhc2UoKSwKKwlfX3JlaGFzaF9iYXNlKCksCisJX01fYnVja2V0X2NvdW50KDApLAorCV9NX2JiZWdpbihfX2EpLAorCV9NX2VsZW1lbnRfY291bnQoMCksCisJX01fcmVoYXNoX3BvbGljeSgpCisgICAgICB7CisJYXV0byBfX25iX2VsZW1zID0gX19kZXRhaWw6Ol9fZGlzdGFuY2VfZncoX19mLCBfX2wpOworCV9NX2J1Y2tldF9jb3VudCA9CisJICBfTV9yZWhhc2hfcG9saWN5Ll9NX25leHRfYmt0KAorCSAgICBzdGQ6Om1heChfTV9yZWhhc2hfcG9saWN5Ll9NX2JrdF9mb3JfZWxlbWVudHMoX19uYl9lbGVtcyksCisJCSAgICAgX19idWNrZXRfaGludCkpOworCisJX01fYnVja2V0cyA9IF9NX2FsbG9jYXRlX2J1Y2tldHMoX01fYnVja2V0X2NvdW50KTsKKwlfX3RyeQorCSAgeworCSAgICBmb3IgKDsgX19mICE9IF9fbDsgKytfX2YpCisJICAgICAgdGhpcy0+aW5zZXJ0KCpfX2YpOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBjbGVhcigpOworCSAgICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX01fYnVja2V0cywgX01fYnVja2V0X2NvdW50KTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICBfSGFzaHRhYmxlKGNvbnN0IF9IYXNodGFibGUmIF9faHQpCisgICAgOiBfX2hhc2h0YWJsZV9iYXNlKF9faHQpLAorICAgICAgX19tYXBfYmFzZShfX2h0KSwKKyAgICAgIF9fcmVoYXNoX2Jhc2UoX19odCksCisgICAgICBfTV9idWNrZXRfY291bnQoX19odC5fTV9idWNrZXRfY291bnQpLAorICAgICAgX01fYmJlZ2luKF9faHQuX01fYmJlZ2luKSwKKyAgICAgIF9NX2VsZW1lbnRfY291bnQoX19odC5fTV9lbGVtZW50X2NvdW50KSwKKyAgICAgIF9NX3JlaGFzaF9wb2xpY3koX19odC5fTV9yZWhhc2hfcG9saWN5KQorICAgIHsKKyAgICAgIF9NX2J1Y2tldHMgPSBfTV9hbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldF9jb3VudCk7CisgICAgICBfX3RyeQorCXsKKwkgIGlmICghX19odC5fTV9iZWZvcmVfYmVnaW4oKS5fTV9ueHQpCisJICAgIHJldHVybjsKKworCSAgLy8gRmlyc3QgZGVhbCB3aXRoIHRoZSBzcGVjaWFsIGZpcnN0IG5vZGUgcG9pbnRlZCB0byBieQorCSAgLy8gX01fYmVmb3JlX2JlZ2luLgorCSAgY29uc3QgX19ub2RlX3R5cGUqIF9faHRfbiA9IF9faHQuX01fYmVnaW4oKTsKKwkgIF9fbm9kZV90eXBlKiBfX3RoaXNfbiA9IF9NX2FsbG9jYXRlX25vZGUoX19odF9uLT5fTV92KTsKKwkgIHRoaXMtPl9NX2NvcHlfY29kZShfX3RoaXNfbiwgX19odF9uKTsKKwkgIF9NX2JlZm9yZV9iZWdpbigpLl9NX254dCA9IF9fdGhpc19uOworCSAgX01fYnVja2V0c1tfTV9idWNrZXRfaW5kZXgoX190aGlzX24pXSA9ICZfTV9iZWZvcmVfYmVnaW4oKTsKKworCSAgLy8gVGhlbiBkZWFsIHdpdGggb3RoZXIgbm9kZXMuCisJICBfX25vZGVfYmFzZSogX19wcmV2X24gPSBfX3RoaXNfbjsKKwkgIGZvciAoX19odF9uID0gX19odF9uLT5fTV9uZXh0KCk7IF9faHRfbjsgX19odF9uID0gX19odF9uLT5fTV9uZXh0KCkpCisJICAgIHsKKwkgICAgICBfX3RoaXNfbiA9IF9NX2FsbG9jYXRlX25vZGUoX19odF9uLT5fTV92KTsKKwkgICAgICBfX3ByZXZfbi0+X01fbnh0ID0gX190aGlzX247CisJICAgICAgdGhpcy0+X01fY29weV9jb2RlKF9fdGhpc19uLCBfX2h0X24pOworCSAgICAgIHNpemVfdHlwZSBfX2JrdCA9IF9NX2J1Y2tldF9pbmRleChfX3RoaXNfbik7CisJICAgICAgaWYgKCFfTV9idWNrZXRzW19fYmt0XSkKKwkJX01fYnVja2V0c1tfX2JrdF0gPSBfX3ByZXZfbjsKKwkgICAgICBfX3ByZXZfbiA9IF9fdGhpc19uOworCSAgICB9CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgY2xlYXIoKTsKKwkgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRzLCBfTV9idWNrZXRfY291bnQpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIF9IYXNodGFibGUoX0hhc2h0YWJsZSYmIF9faHQpCisgICAgOiBfX2hhc2h0YWJsZV9iYXNlKF9faHQpLAorICAgICAgX19tYXBfYmFzZShfX2h0KSwKKyAgICAgIF9fcmVoYXNoX2Jhc2UoX19odCksCisgICAgICBfTV9idWNrZXRzKF9faHQuX01fYnVja2V0cyksCisgICAgICBfTV9idWNrZXRfY291bnQoX19odC5fTV9idWNrZXRfY291bnQpLAorICAgICAgX01fYmJlZ2luKHN0ZDo6bW92ZShfX2h0Ll9NX2JiZWdpbikpLAorICAgICAgX01fZWxlbWVudF9jb3VudChfX2h0Ll9NX2VsZW1lbnRfY291bnQpLAorICAgICAgX01fcmVoYXNoX3BvbGljeShfX2h0Ll9NX3JlaGFzaF9wb2xpY3kpCisgICAgeworICAgICAgLy8gVXBkYXRlLCBpZiBuZWNlc3NhcnksIGJ1Y2tldCBwb2ludGluZyB0byBiZWZvcmUgYmVnaW4gdGhhdCBoYXNuJ3QgbW92ZWQuCisgICAgICBpZiAoX01fYmVnaW4oKSkKKwlfTV9idWNrZXRzW19NX2J1Y2tldF9pbmRleChfTV9iZWdpbigpKV0gPSAmX01fYmVmb3JlX2JlZ2luKCk7CisgICAgICBfX2h0Ll9NX3JlaGFzaF9wb2xpY3kgPSBfUmVoYXNoUG9saWN5KCk7CisgICAgICBfX2h0Ll9NX2J1Y2tldF9jb3VudCA9IF9faHQuX01fcmVoYXNoX3BvbGljeS5fTV9uZXh0X2JrdCgwKTsKKyAgICAgIF9faHQuX01fYnVja2V0cyA9IF9faHQuX01fYWxsb2NhdGVfYnVja2V0cyhfX2h0Ll9NX2J1Y2tldF9jb3VudCk7CisgICAgICBfX2h0Ll9NX2JlZm9yZV9iZWdpbigpLl9NX254dCA9IG51bGxwdHI7CisgICAgICBfX2h0Ll9NX2VsZW1lbnRfY291bnQgPSAwOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIH5fSGFzaHRhYmxlKCkgbm9leGNlcHQKKyAgICB7CisgICAgICBjbGVhcigpOworICAgICAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIHN3YXAoX0hhc2h0YWJsZSYgX194KQorICAgIHsKKyAgICAgIC8vIFRoZSBvbmx5IGJhc2UgY2xhc3Mgd2l0aCBtZW1iZXIgdmFyaWFibGVzIGlzIGhhc2hfY29kZV9iYXNlLgorICAgICAgLy8gV2UgZGVmaW5lIF9IYXNoX2NvZGVfYmFzZTo6X01fc3dhcCBiZWNhdXNlIGRpZmZlcmVudAorICAgICAgLy8gc3BlY2lhbGl6YXRpb25zIGhhdmUgZGlmZmVyZW50IG1lbWJlcnMuCisgICAgICB0aGlzLT5fTV9zd2FwKF9feCk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxsb2NhdG9ycy4KKyAgICAgIHN0ZDo6X19hbGxvY19zd2FwPF9Ob2RlX2FsbG9jYXRvcl90eXBlPjo6X1NfZG9faXQoX01fbm9kZV9hbGxvY2F0b3IoKSwKKwkJCQkJCQlfX3guX01fbm9kZV9hbGxvY2F0b3IoKSk7CisKKyAgICAgIHN0ZDo6c3dhcChfTV9yZWhhc2hfcG9saWN5LCBfX3guX01fcmVoYXNoX3BvbGljeSk7CisgICAgICBzdGQ6OnN3YXAoX01fYnVja2V0cywgX194Ll9NX2J1Y2tldHMpOworICAgICAgc3RkOjpzd2FwKF9NX2J1Y2tldF9jb3VudCwgX194Ll9NX2J1Y2tldF9jb3VudCk7CisgICAgICBzdGQ6OnN3YXAoX01fYmVmb3JlX2JlZ2luKCkuX01fbnh0LCBfX3guX01fYmVmb3JlX2JlZ2luKCkuX01fbnh0KTsKKyAgICAgIHN0ZDo6c3dhcChfTV9lbGVtZW50X2NvdW50LCBfX3guX01fZWxlbWVudF9jb3VudCk7CisKKyAgICAgIC8vIEZpeCBidWNrZXRzIGNvbnRhaW5pbmcgdGhlIF9NX2JlZm9yZV9iZWdpbiBwb2ludGVycyB0aGF0CisgICAgICAvLyBjYW4ndCBiZSBzd2FwcGVkLgorICAgICAgaWYgKF9NX2JlZ2luKCkpCisJX01fYnVja2V0c1tfTV9idWNrZXRfaW5kZXgoX01fYmVnaW4oKSldID0gJl9NX2JlZm9yZV9iZWdpbigpOworICAgICAgaWYgKF9feC5fTV9iZWdpbigpKQorCV9feC5fTV9idWNrZXRzW19feC5fTV9idWNrZXRfaW5kZXgoX194Ll9NX2JlZ2luKCkpXQorCSAgPSAmKF9feC5fTV9iZWZvcmVfYmVnaW4oKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIF9fcmVoYXNoX3BvbGljeShjb25zdCBfUmVoYXNoUG9saWN5JiBfX3BvbCkKKyAgICB7CisgICAgICBzaXplX3R5cGUgX19uX2JrdCA9IF9fcG9sLl9NX2JrdF9mb3JfZWxlbWVudHMoX01fZWxlbWVudF9jb3VudCk7CisgICAgICBfX25fYmt0ID0gX19wb2wuX01fbmV4dF9ia3QoX19uX2JrdCk7CisgICAgICBpZiAoX19uX2JrdCAhPSBfTV9idWNrZXRfY291bnQpCisJX01fcmVoYXNoKF9fbl9ia3QsIF9NX3JlaGFzaF9wb2xpY3kuX01fc3RhdGUoKSk7CisgICAgICBfTV9yZWhhc2hfcG9saWN5ID0gX19wb2w7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9UcmFpdHM+OjppdGVyYXRvcgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICB7CisgICAgICBfX2hhc2hfY29kZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IF9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSk7CisgICAgICBfX25vZGVfdHlwZSogX19wID0gX01fZmluZF9ub2RlKF9fbiwgX19rLCBfX2NvZGUpOworICAgICAgcmV0dXJuIF9fcCA/IGl0ZXJhdG9yKF9fcCkgOiB0aGlzLT5lbmQoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX1RyYWl0cz46OmNvbnN0X2l0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIF9faGFzaF9jb2RlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gX01fYnVja2V0X2luZGV4KF9faywgX19jb2RlKTsKKyAgICAgIF9fbm9kZV90eXBlKiBfX3AgPSBfTV9maW5kX25vZGUoX19uLCBfX2ssIF9fY29kZSk7CisgICAgICByZXR1cm4gX19wID8gY29uc3RfaXRlcmF0b3IoX19wKSA6IHRoaXMtPmVuZCgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfVHJhaXRzPjo6c2l6ZV90eXBlCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3QKKyAgICB7CisgICAgICBfX2hhc2hfY29kZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IF9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSk7CisgICAgICBfX25vZGVfdHlwZSogX19wID0gX01fYnVja2V0X2JlZ2luKF9fbik7CisgICAgICBpZiAoIV9fcCkKKwlyZXR1cm4gMDsKKworICAgICAgc3RkOjpzaXplX3QgX19yZXN1bHQgPSAwOworICAgICAgZm9yICg7OyBfX3AgPSBfX3AtPl9NX25leHQoKSkKKwl7CisJICBpZiAodGhpcy0+X01fZXF1YWxzKF9faywgX19jb2RlLCBfX3ApKQorCSAgICArK19fcmVzdWx0OworCSAgZWxzZSBpZiAoX19yZXN1bHQpCisJICAgIC8vIEFsbCBlcXVpdmFsZW50IHZhbHVlcyBhcmUgbmV4dCB0byBlYWNoIG90aGVyLCBpZiB3ZQorCSAgICAvLyBmb3VuZCBhIG5vbi1lcXVpdmFsZW50IHZhbHVlIGFmdGVyIGFuIGVxdWl2YWxlbnQgb25lIGl0CisJICAgIC8vIG1lYW5zIHRoYXQgd2Ugd29uJ3QgZmluZCBhbnkgbW9yZSBlcXVpdmFsZW50IHZhbHVlcy4KKwkgICAgYnJlYWs7CisJICBpZiAoIV9fcC0+X01fbnh0IHx8IF9NX2J1Y2tldF9pbmRleChfX3AtPl9NX25leHQoKSkgIT0gX19uKQorCSAgICBicmVhazsKKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpwYWlyPHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkJICBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsCisJCQkJICBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJCSAgX1RyYWl0cz46Oml0ZXJhdG9yLAorCSAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkJICBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsCisJCQkJICBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJCSAgX1RyYWl0cz46Oml0ZXJhdG9yPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgeworICAgICAgX19oYXNoX2NvZGUgX19jb2RlID0gdGhpcy0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzdGQ6OnNpemVfdCBfX24gPSBfTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUpOworICAgICAgX19ub2RlX3R5cGUqIF9fcCA9IF9NX2ZpbmRfbm9kZShfX24sIF9faywgX19jb2RlKTsKKworICAgICAgaWYgKF9fcCkKKwl7CisJICBfX25vZGVfdHlwZSogX19wMSA9IF9fcC0+X01fbmV4dCgpOworCSAgd2hpbGUgKF9fcDEgJiYgX01fYnVja2V0X2luZGV4KF9fcDEpID09IF9fbgorCQkgJiYgdGhpcy0+X01fZXF1YWxzKF9faywgX19jb2RlLCBfX3AxKSkKKwkgICAgX19wMSA9IF9fcDEtPl9NX25leHQoKTsKKworCSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcCksIGl0ZXJhdG9yKF9fcDEpKTsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHRoaXMtPmVuZCgpLCB0aGlzLT5lbmQoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpwYWlyPHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkJICBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsCisJCQkJICBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJCSAgX1RyYWl0cz46OmNvbnN0X2l0ZXJhdG9yLAorCSAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkJICBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsCisJCQkJICBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJCSAgX1RyYWl0cz46OmNvbnN0X2l0ZXJhdG9yPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgeworICAgICAgX19oYXNoX2NvZGUgX19jb2RlID0gdGhpcy0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzdGQ6OnNpemVfdCBfX24gPSBfTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUpOworICAgICAgX19ub2RlX3R5cGUqIF9fcCA9IF9NX2ZpbmRfbm9kZShfX24sIF9faywgX19jb2RlKTsKKworICAgICAgaWYgKF9fcCkKKwl7CisJICBfX25vZGVfdHlwZSogX19wMSA9IF9fcC0+X01fbmV4dCgpOworCSAgd2hpbGUgKF9fcDEgJiYgX01fYnVja2V0X2luZGV4KF9fcDEpID09IF9fbgorCQkgJiYgdGhpcy0+X01fZXF1YWxzKF9faywgX19jb2RlLCBfX3AxKSkKKwkgICAgX19wMSA9IF9fcDEtPl9NX25leHQoKTsKKworCSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcCksIGNvbnN0X2l0ZXJhdG9yKF9fcDEpKTsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHRoaXMtPmVuZCgpLCB0aGlzLT5lbmQoKSk7CisgICAgfQorCisgIC8vIEZpbmQgdGhlIG5vZGUgd2hvc2Uga2V5IGNvbXBhcmVzIGVxdWFsIHRvIGsgaW4gdGhlIGJ1Y2tldCBuLgorICAvLyBSZXR1cm4gbnVsbHB0ciBpZiBubyBub2RlIGlzIGZvdW5kLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LAorCQkJX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfVHJhaXRzPjo6X19ub2RlX2Jhc2UqCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgX01fZmluZF9iZWZvcmVfbm9kZShzaXplX3R5cGUgX19uLCBjb25zdCBrZXlfdHlwZSYgX19rLAorCQkJX19oYXNoX2NvZGUgX19jb2RlKSBjb25zdAorICAgIHsKKyAgICAgIF9fbm9kZV9iYXNlKiBfX3ByZXZfcCA9IF9NX2J1Y2tldHNbX19uXTsKKyAgICAgIGlmICghX19wcmV2X3ApCisJcmV0dXJuIG51bGxwdHI7CisgICAgICBfX25vZGVfdHlwZSogX19wID0gc3RhdGljX2Nhc3Q8X19ub2RlX3R5cGUqPihfX3ByZXZfcC0+X01fbnh0KTsKKyAgICAgIGZvciAoOzsgX19wID0gX19wLT5fTV9uZXh0KCkpCisJeworCSAgaWYgKHRoaXMtPl9NX2VxdWFscyhfX2ssIF9fY29kZSwgX19wKSkKKwkgICAgcmV0dXJuIF9fcHJldl9wOworCSAgaWYgKCFfX3AtPl9NX254dCB8fCBfTV9idWNrZXRfaW5kZXgoX19wLT5fTV9uZXh0KCkpICE9IF9fbikKKwkgICAgYnJlYWs7CisJICBfX3ByZXZfcCA9IF9fcDsKKwl9CisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgX01faW5zZXJ0X2J1Y2tldF9iZWdpbihzaXplX3R5cGUgX19ia3QsIF9fbm9kZV90eXBlKiBfX25vZGUpCisgICAgeworICAgICAgaWYgKF9NX2J1Y2tldHNbX19ia3RdKQorCXsKKwkgIC8vIEJ1Y2tldCBpcyBub3QgZW1wdHksIHdlIGp1c3QgbmVlZCB0byBpbnNlcnQgdGhlIG5ldyBub2RlCisJICAvLyBhZnRlciB0aGUgYnVja2V0IGJlZm9yZSBiZWdpbi4KKwkgIF9fbm9kZS0+X01fbnh0ID0gX01fYnVja2V0c1tfX2JrdF0tPl9NX254dDsKKwkgIF9NX2J1Y2tldHNbX19ia3RdLT5fTV9ueHQgPSBfX25vZGU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8vIFRoZSBidWNrZXQgaXMgZW1wdHksIHRoZSBuZXcgbm9kZSBpcyBpbnNlcnRlZCBhdCB0aGUKKwkgIC8vIGJlZ2lubmluZyBvZiB0aGUgc2luZ2x5LWxpbmtlZCBsaXN0IGFuZCB0aGUgYnVja2V0IHdpbGwKKwkgIC8vIGNvbnRhaW4gX01fYmVmb3JlX2JlZ2luIHBvaW50ZXIuCisJICBfX25vZGUtPl9NX254dCA9IF9NX2JlZm9yZV9iZWdpbigpLl9NX254dDsKKwkgIF9NX2JlZm9yZV9iZWdpbigpLl9NX254dCA9IF9fbm9kZTsKKwkgIGlmIChfX25vZGUtPl9NX254dCkKKwkgICAgLy8gV2UgbXVzdCB1cGRhdGUgZm9ybWVyIGJlZ2luIGJ1Y2tldCB0aGF0IGlzIHBvaW50aW5nIHRvCisJICAgIC8vIF9NX2JlZm9yZV9iZWdpbi4KKwkgICAgX01fYnVja2V0c1tfTV9idWNrZXRfaW5kZXgoX19ub2RlLT5fTV9uZXh0KCkpXSA9IF9fbm9kZTsKKwkgIF9NX2J1Y2tldHNbX19ia3RdID0gJl9NX2JlZm9yZV9iZWdpbigpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgX01fcmVtb3ZlX2J1Y2tldF9iZWdpbihzaXplX3R5cGUgX19ia3QsIF9fbm9kZV90eXBlKiBfX25leHQsCisJCQkgICBzaXplX3R5cGUgX19uZXh0X2JrdCkKKyAgICB7CisgICAgICBpZiAoIV9fbmV4dCB8fCBfX25leHRfYmt0ICE9IF9fYmt0KQorCXsKKwkgIC8vIEJ1Y2tldCBpcyBub3cgZW1wdHkKKwkgIC8vIEZpcnN0IHVwZGF0ZSBuZXh0IGJ1Y2tldCBpZiBhbnkKKwkgIGlmIChfX25leHQpCisJICAgIF9NX2J1Y2tldHNbX19uZXh0X2JrdF0gPSBfTV9idWNrZXRzW19fYmt0XTsKKworCSAgLy8gU2Vjb25kIHVwZGF0ZSBiZWZvcmUgYmVnaW4gbm9kZSBpZiBuZWNlc3NhcnkKKwkgIGlmICgmX01fYmVmb3JlX2JlZ2luKCkgPT0gX01fYnVja2V0c1tfX2JrdF0pCisJICAgIF9NX2JlZm9yZV9iZWdpbigpLl9NX254dCA9IF9fbmV4dDsKKwkgIF9NX2J1Y2tldHNbX19ia3RdID0gbnVsbHB0cjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksCisJCQlfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9UcmFpdHM+OjpfX25vZGVfYmFzZSoKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICBfTV9nZXRfcHJldmlvdXNfbm9kZShzaXplX3R5cGUgX19ia3QsIF9fbm9kZV9iYXNlKiBfX24pCisgICAgeworICAgICAgX19ub2RlX2Jhc2UqIF9fcHJldl9uID0gX01fYnVja2V0c1tfX2JrdF07CisgICAgICB3aGlsZSAoX19wcmV2X24tPl9NX254dCAhPSBfX24pCisJX19wcmV2X24gPSBfX3ByZXZfbi0+X01fbnh0OworICAgICAgcmV0dXJuIF9fcHJldl9uOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgc3RkOjpwYWlyPHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkJICAgIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwKKwkJCQkgICAgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCQkgICAgX1RyYWl0cz46Oml0ZXJhdG9yLCBib29sPgorICAgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgICAgX01fZW1wbGFjZShzdGQ6OnRydWVfdHlwZSwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJLy8gRmlyc3QgYnVpbGQgdGhlIG5vZGUgdG8gZ2V0IGFjY2VzcyB0byB0aGUgaGFzaCBjb2RlCisJX19ub2RlX3R5cGUqIF9fbm9kZSA9IF9NX2FsbG9jYXRlX25vZGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwljb25zdCBrZXlfdHlwZSYgX19rID0gdGhpcy0+X01fZXh0cmFjdCgpKF9fbm9kZS0+X01fdik7CisJX19oYXNoX2NvZGUgX19jb2RlOworCV9fdHJ5CisJICB7CisJICAgIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfTV9kZWFsbG9jYXRlX25vZGUoX19ub2RlKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisKKwlzaXplX3R5cGUgX19ia3QgPSBfTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUpOworCWlmIChfX25vZGVfdHlwZSogX19wID0gX01fZmluZF9ub2RlKF9fYmt0LCBfX2ssIF9fY29kZSkpCisJICB7CisJICAgIC8vIFRoZXJlIGlzIGFscmVhZHkgYW4gZXF1aXZhbGVudCBub2RlLCBubyBpbnNlcnRpb24KKwkgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9fbm9kZSk7CisJICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3ApLCBmYWxzZSk7CisJICB9CisKKwkvLyBJbnNlcnQgdGhlIG5vZGUKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoX01faW5zZXJ0X3VuaXF1ZV9ub2RlKF9fYmt0LCBfX2NvZGUsIF9fbm9kZSksCisJCQkgICAgICB0cnVlKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCSAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJICBfVHJhaXRzPjo6aXRlcmF0b3IKKyAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCSBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICAgIF9NX2VtcGxhY2Uoc3RkOjpmYWxzZV90eXBlLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKwkvLyBGaXJzdCBidWlsZCB0aGUgbm9kZSB0byBnZXQgaXRzIGhhc2ggY29kZS4KKwlfX25vZGVfdHlwZSogX19ub2RlID0gX01fYWxsb2NhdGVfbm9kZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCisJX19oYXNoX2NvZGUgX19jb2RlOworCV9fdHJ5CisJICB7CisJICAgIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZSh0aGlzLT5fTV9leHRyYWN0KCkoX19ub2RlLT5fTV92KSk7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfX25vZGUpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKworCXJldHVybiBfTV9pbnNlcnRfbXVsdGlfbm9kZShfX2NvZGUsIF9fbm9kZSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX1RyYWl0cz46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgX01faW5zZXJ0X3VuaXF1ZV9ub2RlKHNpemVfdHlwZSBfX2JrdCwgX19oYXNoX2NvZGUgX19jb2RlLAorCQkJICBfX25vZGVfdHlwZSogX19ub2RlKQorICAgIHsKKyAgICAgIGNvbnN0IF9fcmVoYXNoX3N0YXRlJiBfX3NhdmVkX3N0YXRlID0gX01fcmVoYXNoX3BvbGljeS5fTV9zdGF0ZSgpOworICAgICAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PiBfX2RvX3JlaGFzaAorCT0gX01fcmVoYXNoX3BvbGljeS5fTV9uZWVkX3JlaGFzaChfTV9idWNrZXRfY291bnQsIF9NX2VsZW1lbnRfY291bnQsIDEpOworCisgICAgICBfX3RyeQorCXsKKwkgIGlmIChfX2RvX3JlaGFzaC5maXJzdCkKKwkgICAgeworCSAgICAgIF9NX3JlaGFzaChfX2RvX3JlaGFzaC5zZWNvbmQsIF9fc2F2ZWRfc3RhdGUpOworCSAgICAgIF9fYmt0ID0gX01fYnVja2V0X2luZGV4KHRoaXMtPl9NX2V4dHJhY3QoKShfX25vZGUtPl9NX3YpLCBfX2NvZGUpOworCSAgICB9CisKKwkgIHRoaXMtPl9NX3N0b3JlX2NvZGUoX19ub2RlLCBfX2NvZGUpOworCisJICAvLyBBbHdheXMgaW5zZXJ0IGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgYnVja2V0LgorCSAgX01faW5zZXJ0X2J1Y2tldF9iZWdpbihfX2JrdCwgX19ub2RlKTsKKwkgICsrX01fZWxlbWVudF9jb3VudDsKKwkgIHJldHVybiBpdGVyYXRvcihfX25vZGUpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9NX2RlYWxsb2NhdGVfbm9kZShfX25vZGUpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICAvLyBJbnNlcnQgbm9kZSwgaW4gYnVja2V0IGJrdCBpZiBubyByZWhhc2ggKGFzc3VtZXMgbm8gZWxlbWVudCB3aXRoIGl0cyBrZXkKKyAgLy8gYWxyZWFkeSBwcmVzZW50KS4gVGFrZSBvd25lcnNoaXAgb2YgdGhlIG5vZGUsIGRlYWxsb2NhdGUgaXQgb24gZXhjZXB0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfVHJhaXRzPjo6aXRlcmF0b3IKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICBfTV9pbnNlcnRfbXVsdGlfbm9kZShfX2hhc2hfY29kZSBfX2NvZGUsIF9fbm9kZV90eXBlKiBfX25vZGUpCisgICAgeworICAgICAgY29uc3QgX19yZWhhc2hfc3RhdGUmIF9fc2F2ZWRfc3RhdGUgPSBfTV9yZWhhc2hfcG9saWN5Ll9NX3N0YXRlKCk7CisgICAgICBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+IF9fZG9fcmVoYXNoCisJPSBfTV9yZWhhc2hfcG9saWN5Ll9NX25lZWRfcmVoYXNoKF9NX2J1Y2tldF9jb3VudCwgX01fZWxlbWVudF9jb3VudCwgMSk7CisKKyAgICAgIF9fdHJ5CisJeworCSAgaWYgKF9fZG9fcmVoYXNoLmZpcnN0KQorCSAgICBfTV9yZWhhc2goX19kb19yZWhhc2guc2Vjb25kLCBfX3NhdmVkX3N0YXRlKTsKKworCSAgdGhpcy0+X01fc3RvcmVfY29kZShfX25vZGUsIF9fY29kZSk7CisJICBjb25zdCBrZXlfdHlwZSYgX19rID0gdGhpcy0+X01fZXh0cmFjdCgpKF9fbm9kZS0+X01fdik7CisJICBzaXplX3R5cGUgX19ia3QgPSBfTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUpOworCisJICAvLyBGaW5kIHRoZSBub2RlIGJlZm9yZSBhbiBlcXVpdmFsZW50IG9uZS4KKwkgIF9fbm9kZV9iYXNlKiBfX3ByZXYgPSBfTV9maW5kX2JlZm9yZV9ub2RlKF9fYmt0LCBfX2ssIF9fY29kZSk7CisJICBpZiAoX19wcmV2KQorCSAgICB7CisJICAgICAgLy8gSW5zZXJ0IGFmdGVyIHRoZSBub2RlIGJlZm9yZSB0aGUgZXF1aXZhbGVudCBvbmUuCisJICAgICAgX19ub2RlLT5fTV9ueHQgPSBfX3ByZXYtPl9NX254dDsKKwkgICAgICBfX3ByZXYtPl9NX254dCA9IF9fbm9kZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICAvLyBUaGUgaW5zZXJ0ZWQgbm9kZSBoYXMgbm8gZXF1aXZhbGVudCBpbiB0aGUKKwkgICAgLy8gaGFzaHRhYmxlLiBXZSBtdXN0IGluc2VydCB0aGUgbmV3IG5vZGUgYXQgdGhlCisJICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgYnVja2V0IHRvIHByZXNlcnZlIGVxdWl2YWxlbnQKKwkgICAgLy8gZWxlbWVudHMnIHJlbGF0aXZlIHBvc2l0aW9ucy4KKwkgICAgX01faW5zZXJ0X2J1Y2tldF9iZWdpbihfX2JrdCwgX19ub2RlKTsKKwkgICsrX01fZWxlbWVudF9jb3VudDsKKwkgIHJldHVybiBpdGVyYXRvcihfX25vZGUpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9NX2RlYWxsb2NhdGVfbm9kZShfX25vZGUpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICAvLyBJbnNlcnQgdiBpZiBubyBlbGVtZW50IHdpdGggaXRzIGtleSBpcyBhbHJlYWR5IHByZXNlbnQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICAgIHN0ZDo6cGFpcjx0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLAorCQkJCSAgICBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsCisJCQkJICAgIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQkJICAgIF9UcmFpdHM+OjppdGVyYXRvciwgYm9vbD4KKyAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCSBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICAgIF9NX2luc2VydChfQXJnJiYgX192LCBzdGQ6OnRydWVfdHlwZSkKKyAgICAgIHsKKwljb25zdCBrZXlfdHlwZSYgX19rID0gdGhpcy0+X01fZXh0cmFjdCgpKF9fdik7CisJX19oYXNoX2NvZGUgX19jb2RlID0gdGhpcy0+X01faGFzaF9jb2RlKF9fayk7CisJc2l6ZV90eXBlIF9fYmt0ID0gX01fYnVja2V0X2luZGV4KF9faywgX19jb2RlKTsKKworCV9fbm9kZV90eXBlKiBfX24gPSBfTV9maW5kX25vZGUoX19ia3QsIF9faywgX19jb2RlKTsKKwlpZiAoX19uKQorCSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fbiksIGZhbHNlKTsKKworCV9fbiA9IF9NX2FsbG9jYXRlX25vZGUoc3RkOjpmb3J3YXJkPF9Bcmc+KF9fdikpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihfTV9pbnNlcnRfdW5pcXVlX25vZGUoX19ia3QsIF9fY29kZSwgX19uKSwgdHJ1ZSk7CisgICAgICB9CisKKyAgLy8gSW5zZXJ0IHYgdW5jb25kaXRpb25hbGx5LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQkgIF9UcmFpdHM+OjppdGVyYXRvcgorICAgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgICAgX01faW5zZXJ0KF9BcmcmJiBfX3YsIHN0ZDo6ZmFsc2VfdHlwZSkKKyAgICAgIHsKKwkvLyBGaXJzdCBjb21wdXRlIHRoZSBoYXNoIGNvZGUgc28gdGhhdCB3ZSBkb24ndCBkbyBhbnl0aGluZyBpZiBpdAorCS8vIHRocm93cy4KKwlfX2hhc2hfY29kZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUodGhpcy0+X01fZXh0cmFjdCgpKF9fdikpOworCisJLy8gU2Vjb25kIGFsbG9jYXRlIG5ldyBub2RlIHNvIHRoYXQgd2UgZG9uJ3QgcmVoYXNoIGlmIGl0IHRocm93cy4KKwlfX25vZGVfdHlwZSogX19ub2RlID0gX01fYWxsb2NhdGVfbm9kZShzdGQ6OmZvcndhcmQ8X0FyZz4oX192KSk7CisKKwlyZXR1cm4gX01faW5zZXJ0X211bHRpX25vZGUoX19jb2RlLCBfX25vZGUpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9UcmFpdHM+OjppdGVyYXRvcgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9faXQpCisgICAgeworICAgICAgX19ub2RlX3R5cGUqIF9fbiA9IF9faXQuX01fY3VyOworICAgICAgc3RkOjpzaXplX3QgX19ia3QgPSBfTV9idWNrZXRfaW5kZXgoX19uKTsKKworICAgICAgLy8gTG9vayBmb3IgcHJldmlvdXMgbm9kZSB0byB1bmxpbmsgaXQgZnJvbSB0aGUgZXJhc2VkIG9uZSwgdGhpcworICAgICAgLy8gaXMgd2h5IHdlIG5lZWQgYnVja2V0cyB0byBjb250YWluIHRoZSBiZWZvcmUgYmVnaW4gdG8gbWFrZQorICAgICAgLy8gdGhpcyBzZWFyY2ggZmFzdC4KKyAgICAgIF9fbm9kZV9iYXNlKiBfX3ByZXZfbiA9IF9NX2dldF9wcmV2aW91c19ub2RlKF9fYmt0LCBfX24pOworICAgICAgcmV0dXJuIF9NX2VyYXNlKF9fYmt0LCBfX3ByZXZfbiwgX19uKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX1RyYWl0cz46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgX01fZXJhc2Uoc2l6ZV90eXBlIF9fYmt0LCBfX25vZGVfYmFzZSogX19wcmV2X24sIF9fbm9kZV90eXBlKiBfX24pCisgICAgeworICAgICAgaWYgKF9fcHJldl9uID09IF9NX2J1Y2tldHNbX19ia3RdKQorCV9NX3JlbW92ZV9idWNrZXRfYmVnaW4oX19ia3QsIF9fbi0+X01fbmV4dCgpLAorCSAgIF9fbi0+X01fbnh0ID8gX01fYnVja2V0X2luZGV4KF9fbi0+X01fbmV4dCgpKSA6IDApOworICAgICAgZWxzZSBpZiAoX19uLT5fTV9ueHQpCisJeworCSAgc2l6ZV90eXBlIF9fbmV4dF9ia3QgPSBfTV9idWNrZXRfaW5kZXgoX19uLT5fTV9uZXh0KCkpOworCSAgaWYgKF9fbmV4dF9ia3QgIT0gX19ia3QpCisJICAgIF9NX2J1Y2tldHNbX19uZXh0X2JrdF0gPSBfX3ByZXZfbjsKKwl9CisKKyAgICAgIF9fcHJldl9uLT5fTV9ueHQgPSBfX24tPl9NX254dDsKKyAgICAgIGl0ZXJhdG9yIF9fcmVzdWx0KF9fbi0+X01fbmV4dCgpKTsKKyAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfX24pOworICAgICAgLS1fTV9lbGVtZW50X2NvdW50OworCisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9UcmFpdHM+OjpzaXplX3R5cGUKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICBfTV9lcmFzZShzdGQ6OnRydWVfdHlwZSwgY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICB7CisgICAgICBfX2hhc2hfY29kZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fYmt0ID0gX01fYnVja2V0X2luZGV4KF9faywgX19jb2RlKTsKKworICAgICAgLy8gTG9vayBmb3IgdGhlIG5vZGUgYmVmb3JlIHRoZSBmaXJzdCBtYXRjaGluZyBub2RlLgorICAgICAgX19ub2RlX2Jhc2UqIF9fcHJldl9uID0gX01fZmluZF9iZWZvcmVfbm9kZShfX2JrdCwgX19rLCBfX2NvZGUpOworICAgICAgaWYgKCFfX3ByZXZfbikKKwlyZXR1cm4gMDsKKworICAgICAgLy8gV2UgZm91bmQgYSBtYXRjaGluZyBub2RlLCBlcmFzZSBpdC4KKyAgICAgIF9fbm9kZV90eXBlKiBfX24gPSBzdGF0aWNfY2FzdDxfX25vZGVfdHlwZSo+KF9fcHJldl9uLT5fTV9ueHQpOworICAgICAgX01fZXJhc2UoX19ia3QsIF9fcHJldl9uLCBfX24pOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9UcmFpdHM+OjpzaXplX3R5cGUKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICBfTV9lcmFzZShzdGQ6OmZhbHNlX3R5cGUsIGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgeworICAgICAgX19oYXNoX2NvZGUgX19jb2RlID0gdGhpcy0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzdGQ6OnNpemVfdCBfX2JrdCA9IF9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSk7CisKKyAgICAgIC8vIExvb2sgZm9yIHRoZSBub2RlIGJlZm9yZSB0aGUgZmlyc3QgbWF0Y2hpbmcgbm9kZS4KKyAgICAgIF9fbm9kZV9iYXNlKiBfX3ByZXZfbiA9IF9NX2ZpbmRfYmVmb3JlX25vZGUoX19ia3QsIF9faywgX19jb2RlKTsKKyAgICAgIGlmICghX19wcmV2X24pCisJcmV0dXJuIDA7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDUyNi4gSXMgaXQgdW5kZWZpbmVkIGlmIGEgZnVuY3Rpb24gaW4gdGhlIHN0YW5kYXJkIGNoYW5nZXMKKyAgICAgIC8vIGluIHBhcmFtZXRlcnM/CisgICAgICAvLyBXZSB1c2Ugb25lIGxvb3AgdG8gZmluZCBhbGwgbWF0Y2hpbmcgbm9kZXMgYW5kIGFub3RoZXIgdG8gZGVhbGxvY2F0ZQorICAgICAgLy8gdGhlbSBzbyB0aGF0IHRoZSBrZXkgc3RheXMgdmFsaWQgZHVyaW5nIHRoZSBmaXJzdCBsb29wLiBJdCBtaWdodCBiZQorICAgICAgLy8gaW52YWxpZGF0ZWQgaW5kaXJlY3RseSB3aGVuIGRlc3Ryb3lpbmcgbm9kZXMuCisgICAgICBfX25vZGVfdHlwZSogX19uID0gc3RhdGljX2Nhc3Q8X19ub2RlX3R5cGUqPihfX3ByZXZfbi0+X01fbnh0KTsKKyAgICAgIF9fbm9kZV90eXBlKiBfX25fbGFzdCA9IF9fbjsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbl9sYXN0X2JrdCA9IF9fYmt0OworICAgICAgZG8KKwl7CisJICBfX25fbGFzdCA9IF9fbl9sYXN0LT5fTV9uZXh0KCk7CisJICBpZiAoIV9fbl9sYXN0KQorCSAgICBicmVhazsKKwkgIF9fbl9sYXN0X2JrdCA9IF9NX2J1Y2tldF9pbmRleChfX25fbGFzdCk7CisJfQorICAgICAgd2hpbGUgKF9fbl9sYXN0X2JrdCA9PSBfX2JrdCAmJiB0aGlzLT5fTV9lcXVhbHMoX19rLCBfX2NvZGUsIF9fbl9sYXN0KSk7CisKKyAgICAgIC8vIERlYWxsb2NhdGUgbm9kZXMuCisgICAgICBzaXplX3R5cGUgX19yZXN1bHQgPSAwOworICAgICAgZG8KKwl7CisJICBfX25vZGVfdHlwZSogX19wID0gX19uLT5fTV9uZXh0KCk7CisJICBfTV9kZWFsbG9jYXRlX25vZGUoX19uKTsKKwkgIF9fbiA9IF9fcDsKKwkgICsrX19yZXN1bHQ7CisJICAtLV9NX2VsZW1lbnRfY291bnQ7CisJfQorICAgICAgd2hpbGUgKF9fbiAhPSBfX25fbGFzdCk7CisKKyAgICAgIGlmIChfX3ByZXZfbiA9PSBfTV9idWNrZXRzW19fYmt0XSkKKwlfTV9yZW1vdmVfYnVja2V0X2JlZ2luKF9fYmt0LCBfX25fbGFzdCwgX19uX2xhc3RfYmt0KTsKKyAgICAgIGVsc2UgaWYgKF9fbl9sYXN0ICYmIF9fbl9sYXN0X2JrdCAhPSBfX2JrdCkKKwlfTV9idWNrZXRzW19fbl9sYXN0X2JrdF0gPSBfX3ByZXZfbjsKKyAgICAgIF9fcHJldl9uLT5fTV9ueHQgPSBfX25fbGFzdDsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX1RyYWl0cz46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6CisgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIF9fbm9kZV90eXBlKiBfX24gPSBfX2ZpcnN0Ll9NX2N1cjsKKyAgICAgIF9fbm9kZV90eXBlKiBfX2xhc3RfbiA9IF9fbGFzdC5fTV9jdXI7CisgICAgICBpZiAoX19uID09IF9fbGFzdF9uKQorCXJldHVybiBpdGVyYXRvcihfX24pOworCisgICAgICBzdGQ6OnNpemVfdCBfX2JrdCA9IF9NX2J1Y2tldF9pbmRleChfX24pOworCisgICAgICBfX25vZGVfYmFzZSogX19wcmV2X24gPSBfTV9nZXRfcHJldmlvdXNfbm9kZShfX2JrdCwgX19uKTsKKyAgICAgIGJvb2wgX19pc19idWNrZXRfYmVnaW4gPSBfX24gPT0gX01fYnVja2V0X2JlZ2luKF9fYmt0KTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbl9ia3QgPSBfX2JrdDsKKyAgICAgIGZvciAoOzspCisJeworCSAgZG8KKwkgICAgeworCSAgICAgIF9fbm9kZV90eXBlKiBfX3RtcCA9IF9fbjsKKwkgICAgICBfX24gPSBfX24tPl9NX25leHQoKTsKKwkgICAgICBfTV9kZWFsbG9jYXRlX25vZGUoX190bXApOworCSAgICAgIC0tX01fZWxlbWVudF9jb3VudDsKKwkgICAgICBpZiAoIV9fbikKKwkJYnJlYWs7CisJICAgICAgX19uX2JrdCA9IF9NX2J1Y2tldF9pbmRleChfX24pOworCSAgICB9CisJICB3aGlsZSAoX19uICE9IF9fbGFzdF9uICYmIF9fbl9ia3QgPT0gX19ia3QpOworCSAgaWYgKF9faXNfYnVja2V0X2JlZ2luKQorCSAgICBfTV9yZW1vdmVfYnVja2V0X2JlZ2luKF9fYmt0LCBfX24sIF9fbl9ia3QpOworCSAgaWYgKF9fbiA9PSBfX2xhc3RfbikKKwkgICAgYnJlYWs7CisJICBfX2lzX2J1Y2tldF9iZWdpbiA9IHRydWU7CisJICBfX2JrdCA9IF9fbl9ia3Q7CisJfQorCisgICAgICBpZiAoX19uICYmIChfX25fYmt0ICE9IF9fYmt0IHx8IF9faXNfYnVja2V0X2JlZ2luKSkKKwlfTV9idWNrZXRzW19fbl9ia3RdID0gX19wcmV2X247CisgICAgICBfX3ByZXZfbi0+X01fbnh0ID0gX19uOworICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9fbik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIGNsZWFyKCkgbm9leGNlcHQKKyAgICB7CisgICAgICBfTV9kZWFsbG9jYXRlX25vZGVzKF9NX2JlZ2luKCkpOworICAgICAgX19idWlsdGluX21lbXNldChfTV9idWNrZXRzLCAwLCBfTV9idWNrZXRfY291bnQgKiBzaXplb2YoX19idWNrZXRfdHlwZSkpOworICAgICAgX01fZWxlbWVudF9jb3VudCA9IDA7CisgICAgICBfTV9iZWZvcmVfYmVnaW4oKS5fTV9ueHQgPSBudWxscHRyOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICByZWhhc2goc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBjb25zdCBfX3JlaGFzaF9zdGF0ZSYgX19zYXZlZF9zdGF0ZSA9IF9NX3JlaGFzaF9wb2xpY3kuX01fc3RhdGUoKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fYnVja2V0cworCT0gc3RkOjptYXgoX01fcmVoYXNoX3BvbGljeS5fTV9ia3RfZm9yX2VsZW1lbnRzKF9NX2VsZW1lbnRfY291bnQgKyAxKSwKKwkJICAgX19uKTsKKyAgICAgIF9fYnVja2V0cyA9IF9NX3JlaGFzaF9wb2xpY3kuX01fbmV4dF9ia3QoX19idWNrZXRzKTsKKworICAgICAgaWYgKF9fYnVja2V0cyAhPSBfTV9idWNrZXRfY291bnQpCisJX01fcmVoYXNoKF9fYnVja2V0cywgX19zYXZlZF9zdGF0ZSk7CisgICAgICBlbHNlCisJLy8gTm8gcmVoYXNoLCByZXN0b3JlIHByZXZpb3VzIHN0YXRlIHRvIGtlZXAgYSBjb25zaXN0ZW50IHN0YXRlLgorCV9NX3JlaGFzaF9wb2xpY3kuX01fcmVzZXQoX19zYXZlZF9zdGF0ZSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIF9NX3JlaGFzaChzaXplX3R5cGUgX19uLCBjb25zdCBfX3JlaGFzaF9zdGF0ZSYgX19zdGF0ZSkKKyAgICB7CisgICAgICBfX3RyeQorCXsKKwkgIF9NX3JlaGFzaF9hdXgoX19uLCBfX3VuaXF1ZV9rZXlzKCkpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIC8vIEEgZmFpbHVyZSBoZXJlIG1lYW5zIHRoYXQgYnVja2V0cyBhbGxvY2F0aW9uIGZhaWxlZC4gIFdlIG9ubHkKKwkgIC8vIGhhdmUgdG8gcmVzdG9yZSBoYXNoIHBvbGljeSBwcmV2aW91cyBzdGF0ZS4KKwkgIF9NX3JlaGFzaF9wb2xpY3kuX01fcmVzZXQoX19zdGF0ZSk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIC8vIFJlaGFzaCB3aGVuIHRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgZWxlbWVudHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgIF9NX3JlaGFzaF9hdXgoc2l6ZV90eXBlIF9fbiwgc3RkOjp0cnVlX3R5cGUpCisgICAgeworICAgICAgX19idWNrZXRfdHlwZSogX19uZXdfYnVja2V0cyA9IF9NX2FsbG9jYXRlX2J1Y2tldHMoX19uKTsKKyAgICAgIF9fbm9kZV90eXBlKiBfX3AgPSBfTV9iZWdpbigpOworICAgICAgX01fYmVmb3JlX2JlZ2luKCkuX01fbnh0ID0gbnVsbHB0cjsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fYmJlZ2luX2JrdCA9IDA7CisgICAgICB3aGlsZSAoX19wKQorCXsKKwkgIF9fbm9kZV90eXBlKiBfX25leHQgPSBfX3AtPl9NX25leHQoKTsKKwkgIHN0ZDo6c2l6ZV90IF9fYmt0ID0gX19oYXNoX2NvZGVfYmFzZTo6X01fYnVja2V0X2luZGV4KF9fcCwgX19uKTsKKwkgIGlmICghX19uZXdfYnVja2V0c1tfX2JrdF0pCisJICAgIHsKKwkgICAgICBfX3AtPl9NX254dCA9IF9NX2JlZm9yZV9iZWdpbigpLl9NX254dDsKKwkgICAgICBfTV9iZWZvcmVfYmVnaW4oKS5fTV9ueHQgPSBfX3A7CisJICAgICAgX19uZXdfYnVja2V0c1tfX2JrdF0gPSAmX01fYmVmb3JlX2JlZ2luKCk7CisJICAgICAgaWYgKF9fcC0+X01fbnh0KQorCQlfX25ld19idWNrZXRzW19fYmJlZ2luX2JrdF0gPSBfX3A7CisJICAgICAgX19iYmVnaW5fYmt0ID0gX19ia3Q7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9fcC0+X01fbnh0ID0gX19uZXdfYnVja2V0c1tfX2JrdF0tPl9NX254dDsKKwkgICAgICBfX25ld19idWNrZXRzW19fYmt0XS0+X01fbnh0ID0gX19wOworCSAgICB9CisJICBfX3AgPSBfX25leHQ7CisJfQorICAgICAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgICBfTV9idWNrZXRfY291bnQgPSBfX247CisgICAgICBfTV9idWNrZXRzID0gX19uZXdfYnVja2V0czsKKyAgICB9CisKKyAgLy8gUmVoYXNoIHdoZW4gdGhlcmUgY2FuIGJlIGVxdWl2YWxlbnQgZWxlbWVudHMsIHByZXNlcnZlIHRoZWlyIHJlbGF0aXZlCisgIC8vIG9yZGVyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICBfTV9yZWhhc2hfYXV4KHNpemVfdHlwZSBfX24sIHN0ZDo6ZmFsc2VfdHlwZSkKKyAgICB7CisgICAgICBfX2J1Y2tldF90eXBlKiBfX25ld19idWNrZXRzID0gX01fYWxsb2NhdGVfYnVja2V0cyhfX24pOworCisgICAgICBfX25vZGVfdHlwZSogX19wID0gX01fYmVnaW4oKTsKKyAgICAgIF9NX2JlZm9yZV9iZWdpbigpLl9NX254dCA9IG51bGxwdHI7CisgICAgICBzdGQ6OnNpemVfdCBfX2JiZWdpbl9ia3QgPSAwOworICAgICAgc3RkOjpzaXplX3QgX19wcmV2X2JrdCA9IDA7CisgICAgICBfX25vZGVfdHlwZSogX19wcmV2X3AgPSBudWxscHRyOworICAgICAgYm9vbCBfX2NoZWNrX2J1Y2tldCA9IGZhbHNlOworCisgICAgICB3aGlsZSAoX19wKQorCXsKKwkgIF9fbm9kZV90eXBlKiBfX25leHQgPSBfX3AtPl9NX25leHQoKTsKKwkgIHN0ZDo6c2l6ZV90IF9fYmt0ID0gX19oYXNoX2NvZGVfYmFzZTo6X01fYnVja2V0X2luZGV4KF9fcCwgX19uKTsKKworCSAgaWYgKF9fcHJldl9wICYmIF9fcHJldl9ia3QgPT0gX19ia3QpCisJICAgIHsKKwkgICAgICAvLyBQcmV2aW91cyBpbnNlcnQgd2FzIGFscmVhZHkgaW4gdGhpcyBidWNrZXQsIHdlIGluc2VydCBhZnRlcgorCSAgICAgIC8vIHRoZSBwcmV2aW91c2x5IGluc2VydGVkIG9uZSB0byBwcmVzZXJ2ZSBlcXVpdmFsZW50IGVsZW1lbnRzCisJICAgICAgLy8gcmVsYXRpdmUgb3JkZXIuCisJICAgICAgX19wLT5fTV9ueHQgPSBfX3ByZXZfcC0+X01fbnh0OworCSAgICAgIF9fcHJldl9wLT5fTV9ueHQgPSBfX3A7CisKKwkgICAgICAvLyBJbnNlcnRpbmcgYWZ0ZXIgYSBub2RlIGluIGEgYnVja2V0IHJlcXVpcmUgdG8gY2hlY2sgdGhhdCB3ZQorCSAgICAgIC8vIGhhdmVuJ3QgY2hhbmdlIHRoZSBidWNrZXQgbGFzdCBub2RlLCBpbiB0aGlzIGNhc2UgbmV4dAorCSAgICAgIC8vIGJ1Y2tldCBjb250YWluaW5nIGl0cyBiZWZvcmUgYmVnaW4gbm9kZSBtdXN0IGJlIHVwZGF0ZWQuIFdlCisJICAgICAgLy8gc2NoZWR1bGUgYSBjaGVjayBhcyBzb29uIGFzIHdlIG1vdmUgb3V0IG9mIHRoZSBzZXF1ZW5jZSBvZgorCSAgICAgIC8vIGVxdWl2YWxlbnQgbm9kZXMgdG8gbGltaXQgdGhlIG51bWJlciBvZiBjaGVja3MuCisJICAgICAgX19jaGVja19idWNrZXQgPSB0cnVlOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAoX19jaGVja19idWNrZXQpCisJCXsKKwkJICAvLyBDaGVjayBpZiB3ZSBzaGFsbCB1cGRhdGUgdGhlIG5leHQgYnVja2V0IGJlY2F1c2Ugb2YKKwkJICAvLyBpbnNlcnRpb25zIGludG8gX19wcmV2X2JrdCBidWNrZXQuCisJCSAgaWYgKF9fcHJldl9wLT5fTV9ueHQpCisJCSAgICB7CisJCSAgICAgIHN0ZDo6c2l6ZV90IF9fbmV4dF9ia3QKKwkJCT0gX19oYXNoX2NvZGVfYmFzZTo6X01fYnVja2V0X2luZGV4KF9fcHJldl9wLT5fTV9uZXh0KCksCisJCQkJCQkJICAgIF9fbik7CisJCSAgICAgIGlmIChfX25leHRfYmt0ICE9IF9fcHJldl9ia3QpCisJCQlfX25ld19idWNrZXRzW19fbmV4dF9ia3RdID0gX19wcmV2X3A7CisJCSAgICB9CisJCSAgX19jaGVja19idWNrZXQgPSBmYWxzZTsKKwkJfQorCisJICAgICAgaWYgKCFfX25ld19idWNrZXRzW19fYmt0XSkKKwkJeworCQkgIF9fcC0+X01fbnh0ID0gX01fYmVmb3JlX2JlZ2luKCkuX01fbnh0OworCQkgIF9NX2JlZm9yZV9iZWdpbigpLl9NX254dCA9IF9fcDsKKwkJICBfX25ld19idWNrZXRzW19fYmt0XSA9ICZfTV9iZWZvcmVfYmVnaW4oKTsKKwkJICBpZiAoX19wLT5fTV9ueHQpCisJCSAgICBfX25ld19idWNrZXRzW19fYmJlZ2luX2JrdF0gPSBfX3A7CisJCSAgX19iYmVnaW5fYmt0ID0gX19ia3Q7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBfX3AtPl9NX254dCA9IF9fbmV3X2J1Y2tldHNbX19ia3RdLT5fTV9ueHQ7CisJCSAgX19uZXdfYnVja2V0c1tfX2JrdF0tPl9NX254dCA9IF9fcDsKKwkJfQorCSAgICB9CisJICBfX3ByZXZfcCA9IF9fcDsKKwkgIF9fcHJldl9ia3QgPSBfX2JrdDsKKwkgIF9fcCA9IF9fbmV4dDsKKwl9CisKKyAgICAgIGlmIChfX2NoZWNrX2J1Y2tldCAmJiBfX3ByZXZfcC0+X01fbnh0KQorCXsKKwkgIHN0ZDo6c2l6ZV90IF9fbmV4dF9ia3QKKwkgICAgPSBfX2hhc2hfY29kZV9iYXNlOjpfTV9idWNrZXRfaW5kZXgoX19wcmV2X3AtPl9NX25leHQoKSwgX19uKTsKKwkgIGlmIChfX25leHRfYmt0ICE9IF9fcHJldl9ia3QpCisJICAgIF9fbmV3X2J1Y2tldHNbX19uZXh0X2JrdF0gPSBfX3ByZXZfcDsKKwl9CisKKyAgICAgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRzLCBfTV9idWNrZXRfY291bnQpOworICAgICAgX01fYnVja2V0X2NvdW50ID0gX19uOworICAgICAgX01fYnVja2V0cyA9IF9fbmV3X2J1Y2tldHM7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gX0hBU0hUQUJMRV9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvaGFzaHRhYmxlX3BvbGljeS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2hhc2h0YWJsZV9wb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjliODQzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2hhc2h0YWJsZV9wb2xpY3kuaApAQCAtMCwwICsxLDE2NzAgQEAKKy8vIEludGVybmFsIHBvbGljeSBoZWFkZXIgZm9yIHVub3JkZXJlZF9zZXQgYW5kIHVub3JkZXJlZF9tYXAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvaGFzaHRhYmxlX3BvbGljeS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqICBAaGVhZGVybmFtZXt1bm9yZGVyZWRfbWFwLHVub3JkZXJlZF9zZXR9CisgKi8KKworI2lmbmRlZiBfSEFTSFRBQkxFX1BPTElDWV9ICisjZGVmaW5lIF9IQVNIVEFCTEVfUE9MSUNZX0ggMQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBfSGFzaHRhYmxlOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKworbmFtZXNwYWNlIF9fZGV0YWlsCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiAgQGRlZmdyb3VwIGhhc2h0YWJsZS1kZXRhaWwgQmFzZSBhbmQgSW1wbGVtZW50YXRpb24gQ2xhc3NlcworICAgKiAgQGluZ3JvdXAgdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcnMKKyAgICogIEB7CisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RydWN0IF9IYXNodGFibGVfYmFzZTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb246IHJldHVybiBkaXN0YW5jZShmaXJzdCwgbGFzdCkgZm9yIGZvcndhcmQKKyAgLy8gaXRlcmF0b3JzLCBvciAwIGZvciBpbnB1dCBpdGVyYXRvcnMuCisgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgX19kaXN0YW5jZV9mdyhfSXRlcmF0b3IgX19maXJzdCwgX0l0ZXJhdG9yIF9fbGFzdCwKKwkJICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiAwOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX2Rpc3RhbmNlX2Z3KF9JdGVyYXRvciBfX2ZpcnN0LCBfSXRlcmF0b3IgX19sYXN0LAorCQkgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgeyByZXR1cm4gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX2Rpc3RhbmNlX2Z3KF9JdGVyYXRvciBfX2ZpcnN0LCBfSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKKyAgICAgIHJldHVybiBfX2Rpc3RhbmNlX2Z3KF9fZmlyc3QsIF9fbGFzdCwgX1RhZygpKTsKKyAgICB9CisKKyAgLy8gSGVscGVyIHR5cGUgdXNlZCB0byBkZXRlY3Qgd2hldGhlciB0aGUgaGFzaCBmdW5jdG9yIGlzIG5vZXhjZXB0LgorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0hhc2g+CisgICAgc3RydWN0IF9faXNfbm9leGNlcHRfaGFzaCA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwKKwlub2V4Y2VwdChkZWNsdmFsPGNvbnN0IF9IYXNoJj4oKShkZWNsdmFsPGNvbnN0IF9LZXkmPigpKSk+CisgICAgeyB9OworCisgIHN0cnVjdCBfSWRlbnRpdHkKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCYmCisgICAgICBvcGVyYXRvcigpKF9UcCYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxfVHA+KF9feCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX1NlbGVjdDFzdAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgYXV0bworICAgICAgb3BlcmF0b3IoKShfVHAmJiBfX3gpIGNvbnN0CisgICAgICAtPiBkZWNsdHlwZShzdGQ6OmdldDwwPihzdGQ6OmZvcndhcmQ8X1RwPihfX3gpKSkKKyAgICAgIHsgcmV0dXJuIHN0ZDo6Z2V0PDA+KHN0ZDo6Zm9yd2FyZDxfVHA+KF9feCkpOyB9CisgIH07CisKKyAgLy8gQXV4aWxpYXJ5IHR5cGVzIHVzZWQgZm9yIGFsbCBpbnN0YW50aWF0aW9ucyBvZiBfSGFzaHRhYmxlIG5vZGVzCisgIC8vIGFuZCBpdGVyYXRvcnMuCisKKyAgLyoqCisgICAqICBzdHJ1Y3QgX0hhc2h0YWJsZV90cmFpdHMKKyAgICoKKyAgICogIEltcG9ydGFudCB0cmFpdHMgZm9yIGhhc2ggdGFibGVzLgorICAgKgorICAgKiAgQHRwYXJhbSBfQ2FjaGVfaGFzaF9jb2RlICBCb29sZWFuIHZhbHVlLiBUcnVlIGlmIHRoZSB2YWx1ZSBvZgorICAgKiAgdGhlIGhhc2ggZnVuY3Rpb24gaXMgc3RvcmVkIGFsb25nIHdpdGggdGhlIHZhbHVlLiBUaGlzIGlzIGEKKyAgICogIHRpbWUtc3BhY2UgdHJhZGVvZmYuICBTdG9yaW5nIGl0IG1heSBpbXByb3ZlIGxvb2t1cCBzcGVlZCBieQorICAgKiAgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSBuZWVkIHRvIGNhbGwgdGhlIF9FcXVhbAorICAgKiAgZnVuY3Rpb24uCisgICAqCisgICAqICBAdHBhcmFtIF9Db25zdGFudF9pdGVyYXRvcnMgIEJvb2xlYW4gdmFsdWUuIFRydWUgaWYgaXRlcmF0b3IgYW5kCisgICAqICBjb25zdF9pdGVyYXRvciBhcmUgYm90aCBjb25zdGFudCBpdGVyYXRvciB0eXBlcy4gVGhpcyBpcyB0cnVlCisgICAqICBmb3IgdW5vcmRlcmVkX3NldCBhbmQgdW5vcmRlcmVkX211bHRpc2V0LCBmYWxzZSBmb3IKKyAgICogIHVub3JkZXJlZF9tYXAgYW5kIHVub3JkZXJlZF9tdWx0aW1hcC4KKyAgICoKKyAgICogIEB0cGFyYW0gX1VuaXF1ZV9rZXlzICBCb29sZWFuIHZhbHVlLiBUcnVlIGlmIHRoZSByZXR1cm4gdmFsdWUKKyAgICogIG9mIF9IYXNodGFibGU6OmNvdW50KGspIGlzIGFsd2F5cyBhdCBtb3N0IG9uZSwgZmFsc2UgaWYgaXQgbWF5CisgICAqICBiZSBhbiBhcmJpdHJhcnkgbnVtYmVyLiBUaGlzIGlzIHRydWUgZm9yIHVub3JkZXJlZF9zZXQgYW5kCisgICAqICB1bm9yZGVyZWRfbWFwLCBmYWxzZSBmb3IgdW5vcmRlcmVkX211bHRpc2V0IGFuZAorICAgKiAgdW5vcmRlcmVkX211bHRpbWFwLgorICAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfQ2FjaGVfaGFzaF9jb2RlLCBib29sIF9Db25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX1VuaXF1ZV9rZXlzPgorICAgIHN0cnVjdCBfSGFzaHRhYmxlX3RyYWl0cworICAgIHsKKyAgICAgIHRlbXBsYXRlPGJvb2wgX0NvbmQ+CisJdXNpbmcgX19ib29sX2NvbnN0YW50ID0gaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX0NvbmQ+OworCisgICAgICB1c2luZyBfX2hhc2hfY2FjaGVkID0gX19ib29sX2NvbnN0YW50PF9DYWNoZV9oYXNoX2NvZGU+OworICAgICAgdXNpbmcgX19jb25zdGFudF9pdGVyYXRvcnMgPSBfX2Jvb2xfY29uc3RhbnQ8X0NvbnN0YW50X2l0ZXJhdG9ycz47CisgICAgICB1c2luZyBfX3VuaXF1ZV9rZXlzID0gX19ib29sX2NvbnN0YW50PF9VbmlxdWVfa2V5cz47CisgICAgfTsKKworICAvKioKKyAgICogIHN0cnVjdCBfSGFzaF9ub2RlX2Jhc2UKKyAgICoKKyAgICogIE5vZGVzLCB1c2VkIHRvIHdyYXAgZWxlbWVudHMgc3RvcmVkIGluIHRoZSBoYXNoIHRhYmxlLiAgQSBwb2xpY3kKKyAgICogIHRlbXBsYXRlIHBhcmFtZXRlciBvZiBjbGFzcyB0ZW1wbGF0ZSBfSGFzaHRhYmxlIGNvbnRyb2xzIHdoZXRoZXIKKyAgICogIG5vZGVzIGFsc28gc3RvcmUgYSBoYXNoIGNvZGUuIEluIHNvbWUgY2FzZXMgKGUuZy4gc3RyaW5ncykgdGhpcworICAgKiAgbWF5IGJlIGEgcGVyZm9ybWFuY2Ugd2luLgorICAgKi8KKyAgc3RydWN0IF9IYXNoX25vZGVfYmFzZQorICB7CisgICAgX0hhc2hfbm9kZV9iYXNlKiBfTV9ueHQ7CisKKyAgICBfSGFzaF9ub2RlX2Jhc2UoKSA6IF9NX254dCgpIHsgfQorCisgICAgX0hhc2hfbm9kZV9iYXNlKF9IYXNoX25vZGVfYmFzZSogX19uZXh0KSA6IF9NX254dChfX25leHQpIHsgfQorICB9OworCisgIC8qKgorICAgKiAgUHJpbWFyeSB0ZW1wbGF0ZSBzdHJ1Y3QgX0hhc2hfbm9kZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfQ2FjaGVfaGFzaF9jb2RlPgorICAgIHN0cnVjdCBfSGFzaF9ub2RlOworCisgIC8qKgorICAgKiAgU3BlY2lhbGl6YXRpb24gZm9yIG5vZGVzIHdpdGggY2FjaGVzLCBzdHJ1Y3QgX0hhc2hfbm9kZS4KKyAgICoKKyAgICogIEJhc2UgY2xhc3MgaXMgX19kZXRhaWw6Ol9IYXNoX25vZGVfYmFzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBzdHJ1Y3QgX0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+IDogX0hhc2hfbm9kZV9iYXNlCisgICAgeworICAgICAgX1ZhbHVlICAgICAgIF9NX3Y7CisgICAgICBzdGQ6OnNpemVfdCAgX01faGFzaF9jb2RlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlfSGFzaF9ub2RlKF9BcmdzJiYuLi4gX19hcmdzKQorCTogX01fdihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLCBfTV9oYXNoX2NvZGUoKSB7IH0KKworICAgICAgX0hhc2hfbm9kZSoKKyAgICAgIF9NX25leHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxfSGFzaF9ub2RlKj4oX01fbnh0KTsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBTcGVjaWFsaXphdGlvbiBmb3Igbm9kZXMgd2l0aG91dCBjYWNoZXMsIHN0cnVjdCBfSGFzaF9ub2RlLgorICAgKgorICAgKiAgQmFzZSBjbGFzcyBpcyBfX2RldGFpbDo6X0hhc2hfbm9kZV9iYXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIHN0cnVjdCBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+IDogX0hhc2hfbm9kZV9iYXNlCisgICAgeworICAgICAgX1ZhbHVlICAgICAgIF9NX3Y7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCV9IYXNoX25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfTV92KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikgeyB9CisKKyAgICAgIF9IYXNoX25vZGUqCisgICAgICBfTV9uZXh0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X0hhc2hfbm9kZSo+KF9NX254dCk7IH0KKyAgICB9OworCisgIC8vLyBCYXNlIGNsYXNzIGZvciBub2RlIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9DYWNoZV9oYXNoX2NvZGU+CisgICAgc3RydWN0IF9Ob2RlX2l0ZXJhdG9yX2Jhc2UKKyAgICB7CisgICAgICB1c2luZyBfX25vZGVfdHlwZSA9IF9IYXNoX25vZGU8X1ZhbHVlLCBfQ2FjaGVfaGFzaF9jb2RlPjsKKworICAgICAgX19ub2RlX3R5cGUqICBfTV9jdXI7CisKKyAgICAgIF9Ob2RlX2l0ZXJhdG9yX2Jhc2UoX19ub2RlX3R5cGUqIF9fcCkKKyAgICAgIDogX01fY3VyKF9fcCkgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luY3IoKQorICAgICAgeyBfTV9jdXIgPSBfTV9jdXItPl9NX25leHQoKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9DYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfQ2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSAgICAgICBjb25zdCBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX0NhY2hlX2hhc2hfY29kZSA+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2N1ciA9PSBfX3kuX01fY3VyOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9DYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfQ2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSAgICAgICBjb25zdCBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX0NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fY3VyICE9IF9feS5fTV9jdXI7IH0KKworICAvLy8gTm9kZSBpdGVyYXRvcnMsIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgaGFzaHRhYmxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX05vZGVfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlID0gX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+OworICAgICAgdXNpbmcgX19ub2RlX3R5cGUgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19ub2RlX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgICAgICAgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCQkJY29uc3QgX1ZhbHVlKiwgX1ZhbHVlKj46OnR5cGU7CisKKyAgICAgIHVzaW5nIHJlZmVyZW5jZSA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCQkgIGNvbnN0IF9WYWx1ZSYsIF9WYWx1ZSY+Ojp0eXBlOworCisgICAgICBfTm9kZV9pdGVyYXRvcigpCisgICAgICA6IF9fYmFzZV90eXBlKDApIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX05vZGVfaXRlcmF0b3IoX19ub2RlX3R5cGUqIF9fcCkKKyAgICAgIDogX19iYXNlX3R5cGUoX19wKSB7IH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fY3VyLT5fTV92OyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZih0aGlzLT5fTV9jdXItPl9NX3YpOyB9CisKKyAgICAgIF9Ob2RlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJdGhpcy0+X01faW5jcigpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX05vZGVfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCV9Ob2RlX2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorICAgIH07CisKKyAgLy8vIE5vZGUgY29uc3RfaXRlcmF0b3JzLCB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGhhc2h0YWJsZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY29uc3RhbnRfaXRlcmF0b3JzLCBib29sIF9fY2FjaGU+CisgICAgc3RydWN0IF9Ob2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZSA9IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPjsKKyAgICAgIHVzaW5nIF9fbm9kZV90eXBlID0gdHlwZW5hbWUgX19iYXNlX3R5cGU6Ol9fbm9kZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICB0eXBlZGVmIGNvbnN0IF9WYWx1ZSogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1ZhbHVlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX19iYXNlX3R5cGUoMCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfTm9kZV9jb25zdF9pdGVyYXRvcihfX25vZGVfdHlwZSogX19wKQorICAgICAgOiBfX2Jhc2VfdHlwZShfX3ApIHsgfQorCisgICAgICBfTm9kZV9jb25zdF9pdGVyYXRvcihjb25zdCBfTm9kZV9pdGVyYXRvcjxfVmFsdWUsIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJICAgX19jYWNoZT4mIF9feCkKKyAgICAgIDogX19iYXNlX3R5cGUoX194Ll9NX2N1cikgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1ci0+X01fdjsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YodGhpcy0+X01fY3VyLT5fTV92KTsgfQorCisgICAgICBfTm9kZV9jb25zdF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlfTm9kZV9jb25zdF9pdGVyYXRvciBfX3RtcCgqdGhpcyk7CisJdGhpcy0+X01faW5jcigpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKyAgICB9OworCisgIC8vIE1hbnkgb2YgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZSdzIHRlbXBsYXRlIHBhcmFtZXRlcnMgYXJlIHBvbGljeQorICAvLyBjbGFzc2VzLiAgVGhlc2UgYXJlIGRlZmF1bHRzIGZvciB0aGUgcG9saWNpZXMuCisKKyAgLy8vIERlZmF1bHQgcmFuZ2UgaGFzaGluZyBmdW5jdGlvbjogdXNlIGRpdmlzaW9uIHRvIGZvbGQgYSBsYXJnZSBudW1iZXIKKyAgLy8vIGludG8gdGhlIHJhbmdlIFswLCBOKS4KKyAgc3RydWN0IF9Nb2RfcmFuZ2VfaGFzaGluZworICB7CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBmaXJzdF9hcmd1bWVudF90eXBlOworICAgIHR5cGVkZWYgc3RkOjpzaXplX3Qgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCByZXN1bHRfdHlwZTsKKworICAgIHJlc3VsdF90eXBlCisgICAgb3BlcmF0b3IoKShmaXJzdF9hcmd1bWVudF90eXBlIF9fbnVtLCBzZWNvbmRfYXJndW1lbnRfdHlwZSBfX2RlbikgY29uc3QKKyAgICB7IHJldHVybiBfX251bSAlIF9fZGVuOyB9CisgIH07CisKKyAgLy8vIERlZmF1bHQgcmFuZ2VkIGhhc2ggZnVuY3Rpb24gSC4gIEluIHByaW5jaXBsZSBpdCBzaG91bGQgYmUgYQorICAvLy8gZnVuY3Rpb24gb2JqZWN0IGNvbXBvc2VkIGZyb20gb2JqZWN0cyBvZiB0eXBlIEgxIGFuZCBIMiBzdWNoIHRoYXQKKyAgLy8vIGgoaywgTikgPSBoMihoMShrKSwgTiksIGJ1dCB0aGF0IHdvdWxkIG1lYW4gbWFraW5nIGV4dHJhIGNvcGllcyBvZgorICAvLy8gaDEgYW5kIGgyLiAgU28gaW5zdGVhZCB3ZSdsbCBqdXN0IHVzZSBhIHRhZyB0byB0ZWxsIGNsYXNzIHRlbXBsYXRlCisgIC8vLyBoYXNodGFibGUgdG8gZG8gdGhhdCBjb21wb3NpdGlvbi4KKyAgc3RydWN0IF9EZWZhdWx0X3JhbmdlZF9oYXNoIHsgfTsKKworICAvLy8gRGVmYXVsdCB2YWx1ZSBmb3IgcmVoYXNoIHBvbGljeS4gIEJ1Y2tldCBzaXplIGlzICh1c3VhbGx5KSB0aGUKKyAgLy8vIHNtYWxsZXN0IHByaW1lIHRoYXQga2VlcHMgdGhlIGxvYWQgZmFjdG9yIHNtYWxsIGVub3VnaC4KKyAgc3RydWN0IF9QcmltZV9yZWhhc2hfcG9saWN5CisgIHsKKyAgICBfUHJpbWVfcmVoYXNoX3BvbGljeShmbG9hdCBfX3ogPSAxLjApCisgICAgOiBfTV9tYXhfbG9hZF9mYWN0b3IoX196KSwgX01fbmV4dF9yZXNpemUoMCkgeyB9CisKKyAgICBmbG9hdAorICAgIG1heF9sb2FkX2ZhY3RvcigpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gX01fbWF4X2xvYWRfZmFjdG9yOyB9CisKKyAgICAvLyBSZXR1cm4gYSBidWNrZXQgc2l6ZSBubyBzbWFsbGVyIHRoYW4gbi4KKyAgICBzdGQ6OnNpemVfdAorICAgIF9NX25leHRfYmt0KHN0ZDo6c2l6ZV90IF9fbikgY29uc3Q7CisKKyAgICAvLyBSZXR1cm4gYSBidWNrZXQgY291bnQgYXBwcm9wcmlhdGUgZm9yIG4gZWxlbWVudHMKKyAgICBzdGQ6OnNpemVfdAorICAgIF9NX2JrdF9mb3JfZWxlbWVudHMoc3RkOjpzaXplX3QgX19uKSBjb25zdAorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9jZWlsKF9fbiAvIChsb25nIGRvdWJsZSlfTV9tYXhfbG9hZF9mYWN0b3IpOyB9CisKKyAgICAvLyBfX25fYmt0IGlzIGN1cnJlbnQgYnVja2V0IGNvdW50LCBfX25fZWx0IGlzIGN1cnJlbnQgZWxlbWVudCBjb3VudCwKKyAgICAvLyBhbmQgX19uX2lucyBpcyBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgaW5zZXJ0ZWQuICBEbyB3ZSBuZWVkIHRvCisgICAgLy8gaW5jcmVhc2UgYnVja2V0IGNvdW50PyAgSWYgc28sIHJldHVybiBtYWtlX3BhaXIodHJ1ZSwgbiksIHdoZXJlIG4KKyAgICAvLyBpcyB0aGUgbmV3IGJ1Y2tldCBjb3VudC4gIElmIG5vdCwgcmV0dXJuIG1ha2VfcGFpcihmYWxzZSwgMCkuCisgICAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PgorICAgIF9NX25lZWRfcmVoYXNoKHN0ZDo6c2l6ZV90IF9fbl9ia3QsIHN0ZDo6c2l6ZV90IF9fbl9lbHQsCisJCSAgIHN0ZDo6c2l6ZV90IF9fbl9pbnMpIGNvbnN0OworCisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBfU3RhdGU7CisKKyAgICBfU3RhdGUKKyAgICBfTV9zdGF0ZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fbmV4dF9yZXNpemU7IH0KKworICAgIHZvaWQKKyAgICBfTV9yZXNldChfU3RhdGUgX19zdGF0ZSkKKyAgICB7IF9NX25leHRfcmVzaXplID0gX19zdGF0ZTsgfQorCisgICAgZW51bSB7IF9TX25fcHJpbWVzID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICE9IDggPyAyNTYgOiAyNTYgKyA0OCB9OworCisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IF9TX2dyb3d0aF9mYWN0b3IgPSAyOworCisgICAgZmxvYXQgICAgICAgICAgICAgICAgX01fbWF4X2xvYWRfZmFjdG9yOworICAgIG11dGFibGUgc3RkOjpzaXplX3QgIF9NX25leHRfcmVzaXplOworICB9OworCisgIC8vIEJhc2UgY2xhc3NlcyBmb3Igc3RkOjpfSGFzaHRhYmxlLiAgV2UgZGVmaW5lIHRoZXNlIGJhc2UgY2xhc3NlcworICAvLyBiZWNhdXNlIGluIHNvbWUgY2FzZXMgd2Ugd2FudCB0byBkbyBkaWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbgorICAvLyB0aGUgdmFsdWUgb2YgYSBwb2xpY3kgY2xhc3MuICBJbiBzb21lIGNhc2VzIHRoZSBwb2xpY3kgY2xhc3MKKyAgLy8gYWZmZWN0cyB3aGljaCBtZW1iZXIgZnVuY3Rpb25zIGFuZCBuZXN0ZWQgdHlwZWRlZnMgYXJlIGRlZmluZWQ7CisgIC8vIHdlIGhhbmRsZSB0aGF0IGJ5IHNwZWNpYWxpemluZyBiYXNlIGNsYXNzIHRlbXBsYXRlcy4gIFNldmVyYWwgb2YKKyAgLy8gdGhlIGJhc2UgY2xhc3MgdGVtcGxhdGVzIG5lZWQgdG8gYWNjZXNzIG90aGVyIG1lbWJlcnMgb2YgY2xhc3MKKyAgLy8gdGVtcGxhdGUgX0hhc2h0YWJsZSwgc28gd2UgdXNlIGEgdmFyaWFudCBvZiB0aGUgIkN1cmlvdXNseQorICAvLyBSZWN1cnJpbmcgVGVtcGxhdGUgUGF0dGVybiIgKENSVFApIHRlY2huaXF1ZS4KKworICAvKioKKyAgICogIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgX01hcF9iYXNlLgorICAgKgorICAgKiAgSWYgdGhlIGhhc2h0YWJsZSBoYXMgYSB2YWx1ZSB0eXBlIG9mIHRoZSBmb3JtIHBhaXI8VDEsIFQyPiBhbmQgYQorICAgKiAga2V5IGV4dHJhY3Rpb24gcG9saWN5IChfRXh0cmFjdEtleSkgdGhhdCByZXR1cm5zIHRoZSBmaXJzdCBwYXJ0CisgICAqICBvZiB0aGUgcGFpciwgdGhlIGhhc2h0YWJsZSBnZXRzIGEgbWFwcGVkX3R5cGUgdHlwZWRlZi4gIElmIGl0CisgICAqICBzYXRpc2ZpZXMgdGhvc2UgY3JpdGVyaWEgYW5kIGFsc28gaGFzIHVuaXF1ZSBrZXlzLCB0aGVuIGl0IGFsc28KKyAgICogIGdldHMgYW4gb3BlcmF0b3JbXS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHMsCisJICAgYm9vbCBfVW5pcXVlX2tleXMgPSBfVHJhaXRzOjpfX3VuaXF1ZV9rZXlzOjp2YWx1ZT4KKyAgICBzdHJ1Y3QgX01hcF9iYXNlIHsgfTsKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiwgX191bmlxdWVfa2V5cyBzZXQgdG8gZmFsc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdHJ1Y3QgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBfQWxsb2MsIF9TZWxlY3Qxc3QsIF9FcXVhbCwKKwkJICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHMsIGZhbHNlPgorICAgIHsKKyAgICAgIHVzaW5nIG1hcHBlZF90eXBlID0gdHlwZW5hbWUgc3RkOjp0dXBsZV9lbGVtZW50PDEsIF9QYWlyPjo6dHlwZTsKKyAgICB9OworCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uLCBfX3VuaXF1ZV9rZXlzIHNldCB0byB0cnVlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RydWN0IF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgX0FsbG9jLCBfU2VsZWN0MXN0LCBfRXF1YWwsCisJCSAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzLCB0cnVlPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdXNpbmcgX19oYXNodGFibGVfYmFzZSA9IF9fZGV0YWlsOjpfSGFzaHRhYmxlX2Jhc2U8X0tleSwgX1BhaXIsCisJCQkJCQkJIF9TZWxlY3Qxc3QsCisJCQkJCQkJX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsCisJCQkJCQkJICBfVHJhaXRzPjsKKworICAgICAgdXNpbmcgX19oYXNodGFibGUgPSBfSGFzaHRhYmxlPF9LZXksIF9QYWlyLCBfQWxsb2MsCisJCQkJICAgICBfU2VsZWN0MXN0LCBfRXF1YWwsCisJCQkJICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OworCisgICAgICB1c2luZyBfX2hhc2hfY29kZSA9IHR5cGVuYW1lIF9faGFzaHRhYmxlX2Jhc2U6Ol9faGFzaF9jb2RlOworICAgICAgdXNpbmcgX19ub2RlX3R5cGUgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpfX25vZGVfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHVzaW5nIGtleV90eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6a2V5X3R5cGU7CisgICAgICB1c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIF9faGFzaHRhYmxlX2Jhc2U6Oml0ZXJhdG9yOworICAgICAgdXNpbmcgbWFwcGVkX3R5cGUgPSB0eXBlbmFtZSBzdGQ6OnR1cGxlX2VsZW1lbnQ8MSwgX1BhaXI+Ojp0eXBlOworCisgICAgICBtYXBwZWRfdHlwZSYKKyAgICAgIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9fayk7CisKKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgb3BlcmF0b3JbXShrZXlfdHlwZSYmIF9fayk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDc2MS4gdW5vcmRlcmVkX21hcCBuZWVkcyBhbiBhdCgpIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgYXQoY29uc3Qga2V5X3R5cGUmIF9fayk7CisKKyAgICAgIGNvbnN0IG1hcHBlZF90eXBlJgorICAgICAgYXQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBfQWxsb2MsIF9TZWxlY3Qxc3QsIF9FcXVhbCwKKwkJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cywgdHJ1ZT4KKwkJICAgICAgIDo6bWFwcGVkX3R5cGUmCisgICAgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBfQWxsb2MsIF9TZWxlY3Qxc3QsIF9FcXVhbCwKKwkgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHMsIHRydWU+OjoKKyAgICBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgeworICAgICAgX19oYXNodGFibGUqIF9faCA9IHN0YXRpY19jYXN0PF9faGFzaHRhYmxlKj4odGhpcyk7CisgICAgICBfX2hhc2hfY29kZSBfX2NvZGUgPSBfX2gtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gX19oLT5fTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUpOworICAgICAgX19ub2RlX3R5cGUqIF9fcCA9IF9faC0+X01fZmluZF9ub2RlKF9fbiwgX19rLCBfX2NvZGUpOworCisgICAgICBpZiAoIV9fcCkKKwl7CisJICBfX3AgPSBfX2gtPl9NX2FsbG9jYXRlX25vZGUoc3RkOjpwaWVjZXdpc2VfY29uc3RydWN0LAorCQkJCSAgICAgIHN0ZDo6dHVwbGU8Y29uc3Qga2V5X3R5cGUmPihfX2spLAorCQkJCSAgICAgIHN0ZDo6dHVwbGU8PigpKTsKKwkgIHJldHVybiBfX2gtPl9NX2luc2VydF91bmlxdWVfbm9kZShfX24sIF9fY29kZSwgX19wKS0+c2Vjb25kOworCX0KKworICAgICAgcmV0dXJuIChfX3AtPl9NX3YpLnNlY29uZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHR5cGVuYW1lIF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgX0FsbG9jLCBfU2VsZWN0MXN0LCBfRXF1YWwsCisJCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHMsIHRydWU+CisJCSAgICAgICA6Om1hcHBlZF90eXBlJgorICAgIF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgX0FsbG9jLCBfU2VsZWN0MXN0LCBfRXF1YWwsCisJICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzLCB0cnVlPjo6CisgICAgb3BlcmF0b3JbXShrZXlfdHlwZSYmIF9faykKKyAgICB7CisgICAgICBfX2hhc2h0YWJsZSogX19oID0gc3RhdGljX2Nhc3Q8X19oYXNodGFibGUqPih0aGlzKTsKKyAgICAgIF9faGFzaF9jb2RlIF9fY29kZSA9IF9faC0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzdGQ6OnNpemVfdCBfX24gPSBfX2gtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSk7CisgICAgICBfX25vZGVfdHlwZSogX19wID0gX19oLT5fTV9maW5kX25vZGUoX19uLCBfX2ssIF9fY29kZSk7CisKKyAgICAgIGlmICghX19wKQorCXsKKwkgIF9fcCA9IF9faC0+X01fYWxsb2NhdGVfbm9kZShzdGQ6OnBpZWNld2lzZV9jb25zdHJ1Y3QsCisJCQkJICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6bW92ZShfX2spKSwKKwkJCQkgICAgICBzdGQ6OnR1cGxlPD4oKSk7CisJICByZXR1cm4gX19oLT5fTV9pbnNlcnRfdW5pcXVlX25vZGUoX19uLCBfX2NvZGUsIF9fcCktPnNlY29uZDsKKwl9CisKKyAgICAgIHJldHVybiAoX19wLT5fTV92KS5zZWNvbmQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBfTWFwX2Jhc2U8X0tleSwgX1BhaXIsIF9BbGxvYywgX1NlbGVjdDFzdCwgX0VxdWFsLAorCQkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzLCB0cnVlPgorCQkgICAgICAgOjptYXBwZWRfdHlwZSYKKyAgICBfTWFwX2Jhc2U8X0tleSwgX1BhaXIsIF9BbGxvYywgX1NlbGVjdDFzdCwgX0VxdWFsLAorCSAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cywgdHJ1ZT46OgorICAgIGF0KGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgeworICAgICAgX19oYXNodGFibGUqIF9faCA9IHN0YXRpY19jYXN0PF9faGFzaHRhYmxlKj4odGhpcyk7CisgICAgICBfX2hhc2hfY29kZSBfX2NvZGUgPSBfX2gtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gX19oLT5fTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUpOworICAgICAgX19ub2RlX3R5cGUqIF9fcCA9IF9faC0+X01fZmluZF9ub2RlKF9fbiwgX19rLCBfX2NvZGUpOworCisgICAgICBpZiAoIV9fcCkKKwlfX3Rocm93X291dF9vZl9yYW5nZShfX04oIl9NYXBfYmFzZTo6YXQiKSk7CisgICAgICByZXR1cm4gKF9fcC0+X01fdikuc2Vjb25kOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY29uc3QgdHlwZW5hbWUgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBfQWxsb2MsIF9TZWxlY3Qxc3QsCisJCQkgICAgIF9FcXVhbCwgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJICAgICBfVHJhaXRzLCB0cnVlPjo6bWFwcGVkX3R5cGUmCisgICAgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBfQWxsb2MsIF9TZWxlY3Qxc3QsIF9FcXVhbCwKKwkgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHMsIHRydWU+OjoKKyAgICBhdChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IF9faGFzaHRhYmxlKiBfX2ggPSBzdGF0aWNfY2FzdDxjb25zdCBfX2hhc2h0YWJsZSo+KHRoaXMpOworICAgICAgX19oYXNoX2NvZGUgX19jb2RlID0gX19oLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IF9faC0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlKTsKKyAgICAgIF9fbm9kZV90eXBlKiBfX3AgPSBfX2gtPl9NX2ZpbmRfbm9kZShfX24sIF9faywgX19jb2RlKTsKKworICAgICAgaWYgKCFfX3ApCisJX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJfTWFwX2Jhc2U6OmF0IikpOworICAgICAgcmV0dXJuIChfX3AtPl9NX3YpLnNlY29uZDsKKyAgICB9CisKKyAgLyoqCisgICAqICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIF9JbnNlcnRfYmFzZS4KKyAgICoKKyAgICogIGluc2VydCBtZW1iZXIgZnVuY3Rpb25zIGFwcHJvcHJpYXRlIHRvIGFsbCBfSGFzaHRhYmxlcy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RydWN0IF9JbnNlcnRfYmFzZQorICAgIHsKKyAgICAgIHVzaW5nIF9faGFzaHRhYmxlID0gX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksCisJCQkJICAgICBfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwKKwkJCQkgICAgIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OworCisgICAgICB1c2luZyBfX2hhc2h0YWJsZV9iYXNlID0gX0hhc2h0YWJsZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksCisJCQkJCSAgICAgICBfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwKKwkJCQkJICAgICAgIF9UcmFpdHM+OworCisgICAgICB1c2luZyB2YWx1ZV90eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6dmFsdWVfdHlwZTsKKyAgICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6aXRlcmF0b3I7CisgICAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9ICB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpjb25zdF9pdGVyYXRvcjsKKyAgICAgIHVzaW5nIHNpemVfdHlwZSA9IHR5cGVuYW1lIF9faGFzaHRhYmxlX2Jhc2U6OnNpemVfdHlwZTsKKworICAgICAgdXNpbmcgX191bmlxdWVfa2V5cyA9IHR5cGVuYW1lIF9faGFzaHRhYmxlX2Jhc2U6Ol9fdW5pcXVlX2tleXM7CisgICAgICB1c2luZyBfX2lyZXR1cm5fdHlwZSA9IHR5cGVuYW1lIF9faGFzaHRhYmxlX2Jhc2U6Ol9faXJldHVybl90eXBlOworICAgICAgdXNpbmcgX19pY29udl90eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYmFzZTo6X19pY29udl90eXBlOworCisgICAgICBfX2hhc2h0YWJsZSYKKyAgICAgIF9NX2Nvbmp1cmVfaGFzaHRhYmxlKCkKKyAgICAgIHsgcmV0dXJuICooc3RhdGljX2Nhc3Q8X19oYXNodGFibGUqPih0aGlzKSk7IH0KKworICAgICAgX19pcmV0dXJuX3R5cGUKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgICB7CisJX19oYXNodGFibGUmIF9faCA9IF9NX2Nvbmp1cmVfaGFzaHRhYmxlKCk7CisJcmV0dXJuIF9faC5fTV9pbnNlcnQoX192LCBfX3VuaXF1ZV9rZXlzKCkpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yLCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgICB7IHJldHVybiBfX2ljb252X3R5cGUoKShpbnNlcnQoX192KSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5pbnNlcnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdm9pZAorCWluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9JbnNlcnRfYmFzZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLCBfSDIsIF9IYXNoLAorCQkgICAgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwl1c2luZyBfX3JlaGFzaF90eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGU6Ol9fcmVoYXNoX3R5cGU7CisJdXNpbmcgX19yZWhhc2hfc3RhdGUgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZTo6X19yZWhhc2hfc3RhdGU7CisJdXNpbmcgcGFpcl90eXBlID0gc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PjsKKworCXNpemVfdHlwZSBfX25fZWx0ID0gX19kZXRhaWw6Ol9fZGlzdGFuY2VfZncoX19maXJzdCwgX19sYXN0KTsKKworCV9faGFzaHRhYmxlJiBfX2ggPSBfTV9jb25qdXJlX2hhc2h0YWJsZSgpOworCV9fcmVoYXNoX3R5cGUmIF9fcmVoYXNoID0gX19oLl9NX3JlaGFzaF9wb2xpY3k7CisJY29uc3QgX19yZWhhc2hfc3RhdGUmIF9fc2F2ZWRfc3RhdGUgPSBfX3JlaGFzaC5fTV9zdGF0ZSgpOworCXBhaXJfdHlwZSBfX2RvX3JlaGFzaCA9IF9fcmVoYXNoLl9NX25lZWRfcmVoYXNoKF9faC5fTV9idWNrZXRfY291bnQsCisJCQkJCQkJX19oLl9NX2VsZW1lbnRfY291bnQsCisJCQkJCQkJX19uX2VsdCk7CisKKwlpZiAoX19kb19yZWhhc2guZmlyc3QpCisJICBfX2guX01fcmVoYXNoKF9fZG9fcmVoYXNoLnNlY29uZCwgX19zYXZlZF9zdGF0ZSk7CisKKwlmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgIF9faC5fTV9pbnNlcnQoKl9fZmlyc3QsIF9fdW5pcXVlX2tleXMoKSk7CisgICAgICB9CisKKyAgLyoqCisgICAqICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIF9JbnNlcnQuCisgICAqCisgICAqICBTZWxlY3QgaW5zZXJ0IG1lbWJlciBmdW5jdGlvbnMgYXBwcm9wcmlhdGUgdG8gX0hhc2h0YWJsZSBwb2xpY3kgY2hvaWNlcy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHMsCisJICAgYm9vbCBfQ29uc3RhbnRfaXRlcmF0b3JzID0gX1RyYWl0czo6X19jb25zdGFudF9pdGVyYXRvcnM6OnZhbHVlLAorCSAgIGJvb2wgX1VuaXF1ZV9rZXlzID0gX1RyYWl0czo6X191bmlxdWVfa2V5czo6dmFsdWU+CisgICAgc3RydWN0IF9JbnNlcnQ7CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cnVjdCBfSW5zZXJ0PF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsCisJCSAgIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHMsIHRydWUsIHRydWU+CisgICAgOiBwdWJsaWMgX0luc2VydF9iYXNlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPgorICAgIHsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlID0gX0luc2VydF9iYXNlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwKKwkJCQkJX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsCisJCQkJCV9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OworICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjp2YWx1ZV90eXBlOworICAgICAgdXNpbmcgaXRlcmF0b3IgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6aXRlcmF0b3I7CisgICAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9ICB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHVzaW5nIF9fdW5pcXVlX2tleXMgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X191bmlxdWVfa2V5czsKKyAgICAgIHVzaW5nIF9faGFzaHRhYmxlID0gdHlwZW5hbWUgX19iYXNlX3R5cGU6Ol9faGFzaHRhYmxlOworCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6aW5zZXJ0OworCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQodmFsdWVfdHlwZSYmIF9fdikKKyAgICAgIHsKKwlfX2hhc2h0YWJsZSYgX19oID0gdGhpcy0+X01fY29uanVyZV9oYXNodGFibGUoKTsKKwlyZXR1cm4gX19oLl9NX2luc2VydChzdGQ6Om1vdmUoX192KSwgX191bmlxdWVfa2V5cygpKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciwgdmFsdWVfdHlwZSYmIF9fdikKKyAgICAgIHsgcmV0dXJuIGluc2VydChzdGQ6Om1vdmUoX192KSkuZmlyc3Q7IH0KKyAgICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdHJ1Y3QgX0luc2VydDxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLCBfSDIsIF9IYXNoLAorCQkgICBfUmVoYXNoUG9saWN5LCBfVHJhaXRzLCB0cnVlLCBmYWxzZT4KKyAgICA6IHB1YmxpYyBfSW5zZXJ0X2Jhc2U8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQkgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+CisgICAgeworICAgICAgdXNpbmcgX19iYXNlX3R5cGUgPSBfSW5zZXJ0X2Jhc2U8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LAorCQkJCQlfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwKKwkJCQkJX1JlaGFzaFBvbGljeSwgX1RyYWl0cz47CisgICAgICB1c2luZyB2YWx1ZV90eXBlID0gdHlwZW5hbWUgX19iYXNlX3R5cGU6OnZhbHVlX3R5cGU7CisgICAgICB1c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjppdGVyYXRvcjsKKyAgICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gIHR5cGVuYW1lIF9fYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvcjsKKworICAgICAgdXNpbmcgX191bmlxdWVfa2V5cyA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjpfX3VuaXF1ZV9rZXlzOworICAgICAgdXNpbmcgX19oYXNodGFibGUgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19oYXNodGFibGU7CisKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlOjppbnNlcnQ7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQodmFsdWVfdHlwZSYmIF9fdikKKyAgICAgIHsKKwlfX2hhc2h0YWJsZSYgX19oID0gdGhpcy0+X01fY29uanVyZV9oYXNodGFibGUoKTsKKwlyZXR1cm4gX19oLl9NX2luc2VydChzdGQ6Om1vdmUoX192KSwgX191bmlxdWVfa2V5cygpKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciwgdmFsdWVfdHlwZSYmIF9fdikKKyAgICAgIHsgcmV0dXJuIGluc2VydChzdGQ6Om1vdmUoX192KSk7IH0KKyAgICAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHMsIGJvb2wgX1VuaXF1ZV9rZXlzPgorICAgIHN0cnVjdCBfSW5zZXJ0PF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsCisJCSAgIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHMsIGZhbHNlLCBfVW5pcXVlX2tleXM+CisgICAgOiBwdWJsaWMgX0luc2VydF9iYXNlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPgorICAgIHsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlID0gX0luc2VydF9iYXNlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwKKwkJCQkgICAgICAgX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsCisJCQkJICAgICAgIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OworICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjp2YWx1ZV90eXBlOworICAgICAgdXNpbmcgaXRlcmF0b3IgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6aXRlcmF0b3I7CisgICAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9ICB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHVzaW5nIF9fdW5pcXVlX2tleXMgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X191bmlxdWVfa2V5czsKKyAgICAgIHVzaW5nIF9faGFzaHRhYmxlID0gdHlwZW5hbWUgX19iYXNlX3R5cGU6Ol9faGFzaHRhYmxlOworICAgICAgdXNpbmcgX19pcmV0dXJuX3R5cGUgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19pcmV0dXJuX3R5cGU7CisgICAgICB1c2luZyBfX2ljb252X3R5cGUgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19pY29udl90eXBlOworCisgICAgICB1c2luZyBfX2Jhc2VfdHlwZTo6aW5zZXJ0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpcj4KKwl1c2luZyBfX2lzX2NvbnMgPSBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwgX1BhaXImJj47CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyPgorCXVzaW5nIF9JRmNvbnMgPSBzdGQ6OmVuYWJsZV9pZjxfX2lzX2NvbnM8X1BhaXI+Ojp2YWx1ZT47CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyPgorCXVzaW5nIF9JRmNvbnNwID0gdHlwZW5hbWUgX0lGY29uczxfUGFpcj46OnR5cGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IF9JRmNvbnNwPF9QYWlyPj4KKwlfX2lyZXR1cm5fdHlwZQorCWluc2VydChfUGFpciYmIF9fdikKKwl7CisJICBfX2hhc2h0YWJsZSYgX19oID0gdGhpcy0+X01fY29uanVyZV9oYXNodGFibGUoKTsKKwkgIHJldHVybiBfX2guX01fZW1wbGFjZShfX3VuaXF1ZV9rZXlzKCksIHN0ZDo6Zm9yd2FyZDxfUGFpcj4oX192KSk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSBfSUZjb25zcDxfUGFpcj4+CisJaXRlcmF0b3IKKwlpbnNlcnQoY29uc3RfaXRlcmF0b3IsIF9QYWlyJiYgX192KQorCXsgcmV0dXJuIF9faWNvbnZfdHlwZSgpKGluc2VydChzdGQ6OmZvcndhcmQ8X1BhaXI+KF9fdikpKTsgfQorICAgfTsKKworICAvKioKKyAgICogIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgIF9SZWhhc2hfYmFzZS4KKyAgICoKKyAgICogIEdpdmUgaGFzaHRhYmxlIHRoZSBtYXhfbG9hZF9mYWN0b3IgZnVuY3Rpb25zIGFuZCByZXNlcnZlIGlmZiB0aGUKKyAgICogIHJlaGFzaCBwb2xpY3kgaXMgX1ByaW1lX3JlaGFzaF9wb2xpY3kuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RydWN0IF9SZWhhc2hfYmFzZTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cnVjdCBfUmVoYXNoX2Jhc2U8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9QcmltZV9yZWhhc2hfcG9saWN5LCBfVHJhaXRzPgorICAgIHsKKyAgICAgIHVzaW5nIF9faGFzaHRhYmxlID0gX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksCisJCQkJICAgICBfRXF1YWwsIF9IMSwgX0gyLCBfSGFzaCwKKwkJCQkgICAgIF9QcmltZV9yZWhhc2hfcG9saWN5LCBfVHJhaXRzPjsKKworICAgICAgZmxvYXQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7CisJY29uc3QgX19oYXNodGFibGUqIF9fdGhpcyA9IHN0YXRpY19jYXN0PGNvbnN0IF9faGFzaHRhYmxlKj4odGhpcyk7CisJcmV0dXJuIF9fdGhpcy0+X19yZWhhc2hfcG9saWN5KCkubWF4X2xvYWRfZmFjdG9yKCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcihmbG9hdCBfX3opCisgICAgICB7CisJX19oYXNodGFibGUqIF9fdGhpcyA9IHN0YXRpY19jYXN0PF9faGFzaHRhYmxlKj4odGhpcyk7CisJX190aGlzLT5fX3JlaGFzaF9wb2xpY3koX1ByaW1lX3JlaGFzaF9wb2xpY3koX196KSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2VydmUoc3RkOjpzaXplX3QgX19uKQorICAgICAgeworCV9faGFzaHRhYmxlKiBfX3RoaXMgPSBzdGF0aWNfY2FzdDxfX2hhc2h0YWJsZSo+KHRoaXMpOworCV9fdGhpcy0+cmVoYXNoKF9fYnVpbHRpbl9jZWlsKF9fbiAvIG1heF9sb2FkX2ZhY3RvcigpKSk7CisgICAgICB9CisgICAgfTsKKworICAvKioKKyAgICogIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZV9lYm9faGVscGVyLgorICAgKgorICAgKiAgSGVscGVyIGNsYXNzIHVzaW5nIEVCTyB3aGVuIGl0IGlzIG5vdCBmb3JiaWRkZW4sIHR5cGUgaXMgbm90CisgICAqICBmaW5hbCwgYW5kIHdoZW4gaXQgd29ydGggaXQsIHR5cGUgaXMgZW1wdHkuCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX05tLCB0eXBlbmFtZSBfVHAsCisJICAgYm9vbCBfX3VzZV9lYm8gPSAhX19pc19maW5hbChfVHApICYmIF9faXNfZW1wdHkoX1RwKT4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9lYm9faGVscGVyOworCisgIC8vLyBTcGVjaWFsaXphdGlvbiB1c2luZyBFQk8uCisgIHRlbXBsYXRlPGludCBfTm0sIHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9lYm9faGVscGVyPF9ObSwgX1RwLCB0cnVlPgorICAgIDogcHJpdmF0ZSBfVHAKKyAgICB7CisgICAgICBfSGFzaHRhYmxlX2Vib19oZWxwZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgIF9IYXNodGFibGVfZWJvX2hlbHBlcihjb25zdCBfVHAmIF9fdHApIDogX1RwKF9fdHApCisgICAgICB7IH0KKworICAgICAgc3RhdGljIGNvbnN0IF9UcCYKKyAgICAgIF9TX2NnZXQoY29uc3QgX0hhc2h0YWJsZV9lYm9faGVscGVyJiBfX2Vib2gpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfVHAmPihfX2Vib2gpOyB9CisKKyAgICAgIHN0YXRpYyBfVHAmCisgICAgICBfU19nZXQoX0hhc2h0YWJsZV9lYm9faGVscGVyJiBfX2Vib2gpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHAmPihfX2Vib2gpOyB9CisgICAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24gbm90IHVzaW5nIEVCTy4KKyAgdGVtcGxhdGU8aW50IF9ObSwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfSGFzaHRhYmxlX2Vib19oZWxwZXI8X05tLCBfVHAsIGZhbHNlPgorICAgIHsKKyAgICAgIF9IYXNodGFibGVfZWJvX2hlbHBlcigpID0gZGVmYXVsdDsKKworICAgICAgX0hhc2h0YWJsZV9lYm9faGVscGVyKGNvbnN0IF9UcCYgX190cCkgOiBfTV90cChfX3RwKQorICAgICAgeyB9CisKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAmCisgICAgICBfU19jZ2V0KGNvbnN0IF9IYXNodGFibGVfZWJvX2hlbHBlciYgX19lYm9oKQorICAgICAgeyByZXR1cm4gX19lYm9oLl9NX3RwOyB9CisKKyAgICAgIHN0YXRpYyBfVHAmCisgICAgICBfU19nZXQoX0hhc2h0YWJsZV9lYm9faGVscGVyJiBfX2Vib2gpCisgICAgICB7IHJldHVybiBfX2Vib2guX01fdHA7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfVHAgX01fdHA7CisgICAgfTsKKworICAvKioKKyAgICogIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgX0xvY2FsX2l0ZXJhdG9yX2Jhc2UuCisgICAqCisgICAqICBCYXNlIGNsYXNzIGZvciBsb2NhbCBpdGVyYXRvcnMsIHVzZWQgdG8gaXRlcmF0ZSB3aXRoaW4gYSBidWNrZXQKKyAgICogIGJ1dCBub3QgYmV0d2VlbiBidWNrZXRzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICBzdHJ1Y3QgX0xvY2FsX2l0ZXJhdG9yX2Jhc2U7CisKKyAgLyoqCisgICAqICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIF9IYXNoX2NvZGVfYmFzZS4KKyAgICoKKyAgICogIEVuY2Fwc3VsYXRlcyB0d28gcG9saWN5IGlzc3VlcyB0aGF0IGFyZW4ndCBxdWl0ZSBvcnRob2dvbmFsLgorICAgKiAgICgxKSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nIGEgcmFuZ2VkIGhhc2ggZnVuY3Rpb24gYW5kIHVzaW5nCisgICAqICAgICAgIHRoZSBjb21iaW5hdGlvbiBvZiBhIGhhc2ggZnVuY3Rpb24gYW5kIGEgcmFuZ2UtaGFzaGluZyBmdW5jdGlvbi4KKyAgICogICAgICAgSW4gdGhlIGZvcm1lciBjYXNlIHdlIGRvbid0IGhhdmUgc3VjaCB0aGluZ3MgYXMgaGFzaCBjb2Rlcywgc28KKyAgICogICAgICAgd2UgaGF2ZSBhIGR1bW15IHR5cGUgYXMgcGxhY2Vob2xkZXIuCisgICAqICAgKDIpIFdoZXRoZXIgb3Igbm90IHdlIGNhY2hlIGhhc2ggY29kZXMuICBDYWNoaW5nIGhhc2ggY29kZXMgaXMKKyAgICogICAgICAgbWVhbmluZ2xlc3MgaWYgd2UgaGF2ZSBhIHJhbmdlZCBoYXNoIGZ1bmN0aW9uLgorICAgKgorICAgKiAgV2UgYWxzbyBwdXQgdGhlIGtleSBleHRyYWN0aW9uIG9iamVjdHMgaGVyZSwgZm9yIGNvbnZlbmllbmNlLgorICAgKiAgRWFjaCBzcGVjaWFsaXphdGlvbiBkZXJpdmVzIGZyb20gb25lIG9yIG1vcmUgb2YgdGhlIHRlbXBsYXRlCisgICAqICBwYXJhbWV0ZXJzIHRvIGJlbmVmaXQgZnJvbSBFYm8uIFRoaXMgaXMgaW1wb3J0YW50IGFzIHRoaXMgdHlwZQorICAgKiAgaXMgaW5oZXJpdGVkIGluIHNvbWUgY2FzZXMgYnkgdGhlIF9Mb2NhbF9pdGVyYXRvcl9iYXNlIHR5cGUgdXNlZAorICAgKiAgdG8gaW1wbGVtZW50IGxvY2FsX2l0ZXJhdG9yIGFuZCBjb25zdF9sb2NhbF9pdGVyYXRvci4gQXMgd2l0aAorICAgKiAgYW55IGl0ZXJhdG9yIHR5cGUgd2UgcHJlZmVyIHRvIG1ha2UgaXQgYXMgc21hbGwgYXMgcG9zc2libGUuCisgICAqCisgICAqICBQcmltYXJ5IHRlbXBsYXRlIGlzIHVudXNlZCBleGNlcHQgYXMgYSBob29rIGZvciBzcGVjaWFsaXphdGlvbnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIHN0cnVjdCBfSGFzaF9jb2RlX2Jhc2U7CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uOiByYW5nZWQgaGFzaCBmdW5jdGlvbiwgbm8gY2FjaGluZyBoYXNoIGNvZGVzLiAgSDEKKyAgLy8vIGFuZCBIMiBhcmUgcHJvdmlkZWQgYnV0IGlnbm9yZWQuICBXZSBkZWZpbmUgYSBkdW1teSBoYXNoIGNvZGUgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2g+CisgICAgc3RydWN0IF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfSDEsIF9IMiwgX0hhc2gsIGZhbHNlPgorICAgIDogcHJpdmF0ZSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MCwgX0V4dHJhY3RLZXk+LAorICAgICAgcHJpdmF0ZSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MSwgX0hhc2g+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB1c2luZyBfX2Vib19leHRyYWN0X2tleSA9IF9IYXNodGFibGVfZWJvX2hlbHBlcjwwLCBfRXh0cmFjdEtleT47CisgICAgICB1c2luZyBfX2Vib19oYXNoID0gX0hhc2h0YWJsZV9lYm9faGVscGVyPDEsIF9IYXNoPjsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdm9pZCogCQkJCQlfX2hhc2hfY29kZTsKKyAgICAgIHR5cGVkZWYgX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPgkJCV9fbm9kZV90eXBlOworCisgICAgICAvLyBXZSBuZWVkIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGZvciB0aGUgbG9jYWwgaXRlcmF0b3JzLgorICAgICAgX0hhc2hfY29kZV9iYXNlKCkgPSBkZWZhdWx0OworCisgICAgICBfSGFzaF9jb2RlX2Jhc2UoY29uc3QgX0V4dHJhY3RLZXkmIF9fZXgsIGNvbnN0IF9IMSYsIGNvbnN0IF9IMiYsCisJCSAgICAgIGNvbnN0IF9IYXNoJiBfX2gpCisgICAgICA6IF9fZWJvX2V4dHJhY3Rfa2V5KF9fZXgpLCBfX2Vib19oYXNoKF9faCkgeyB9CisKKyAgICAgIF9faGFzaF9jb2RlCisgICAgICBfTV9oYXNoX2NvZGUoY29uc3QgX0tleSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0ZDo6c2l6ZV90CisgICAgICBfTV9idWNrZXRfaW5kZXgoY29uc3QgX0tleSYgX19rLCBfX2hhc2hfY29kZSwgc3RkOjpzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmFuZ2VkX2hhc2goKShfX2ssIF9fbik7IH0KKworICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBfX25vZGVfdHlwZSogX19wLCBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yYW5nZWRfaGFzaCgpKF9NX2V4dHJhY3QoKShfX3AtPl9NX3YpLCBfX24pOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N0b3JlX2NvZGUoX19ub2RlX3R5cGUqLCBfX2hhc2hfY29kZSkgY29uc3QKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jb3B5X2NvZGUoX19ub2RlX3R5cGUqLCBjb25zdCBfX25vZGVfdHlwZSopIGNvbnN0CisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3dhcChfSGFzaF9jb2RlX2Jhc2UmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZXh0cmFjdCgpLCBfX3guX01fZXh0cmFjdCgpKTsKKwlzdGQ6OnN3YXAoX01fcmFuZ2VkX2hhc2goKSwgX194Ll9NX3JhbmdlZF9oYXNoKCkpOworICAgICAgfQorCisgICAgICBjb25zdCBfRXh0cmFjdEtleSYKKyAgICAgIF9NX2V4dHJhY3QoKSBjb25zdCB7IHJldHVybiBfX2Vib19leHRyYWN0X2tleTo6X1NfY2dldCgqdGhpcyk7IH0KKworICAgICAgX0V4dHJhY3RLZXkmCisgICAgICBfTV9leHRyYWN0KCkgeyByZXR1cm4gX19lYm9fZXh0cmFjdF9rZXk6Ol9TX2dldCgqdGhpcyk7IH0KKworICAgICAgY29uc3QgX0hhc2gmCisgICAgICBfTV9yYW5nZWRfaGFzaCgpIGNvbnN0IHsgcmV0dXJuIF9fZWJvX2hhc2g6Ol9TX2NnZXQoKnRoaXMpOyB9CisKKyAgICAgIF9IYXNoJgorICAgICAgX01fcmFuZ2VkX2hhc2goKSB7IHJldHVybiBfX2Vib19oYXNoOjpfU19nZXQoKnRoaXMpOyB9CisgICAgfTsKKworICAvLyBObyBzcGVjaWFsaXphdGlvbiBmb3IgcmFuZ2VkIGhhc2ggZnVuY3Rpb24gd2hpbGUgY2FjaGluZyBoYXNoIGNvZGVzLgorICAvLyBUaGF0IGNvbWJpbmF0aW9uIGlzIG1lYW5pbmdsZXNzLCBhbmQgdHJ5aW5nIHRvIGRvIGl0IGlzIGFuIGVycm9yLgorCisgIC8vLyBTcGVjaWFsaXphdGlvbjogcmFuZ2VkIGhhc2ggZnVuY3Rpb24sIGNhY2hlIGhhc2ggY29kZXMuICBUaGlzCisgIC8vLyBjb21iaW5hdGlvbiBpcyBtZWFuaW5nbGVzcywgc28gd2UgcHJvdmlkZSBvbmx5IGEgZGVjbGFyYXRpb24KKyAgLy8vIGFuZCBubyBkZWZpbml0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaD4KKyAgICBzdHJ1Y3QgX0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9IMSwgX0gyLCBfSGFzaCwgdHJ1ZT47CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uOiBoYXNoIGZ1bmN0aW9uIGFuZCByYW5nZS1oYXNoaW5nIGZ1bmN0aW9uLCBubworICAvLy8gY2FjaGluZyBvZiBoYXNoIGNvZGVzLgorICAvLy8gUHJvdmlkZXMgdHlwZWRlZiBhbmQgYWNjZXNzb3IgcmVxdWlyZWQgYnkgQysrIDExLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyPgorICAgIHN0cnVjdCBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0gxLCBfSDIsCisJCQkgICBfRGVmYXVsdF9yYW5nZWRfaGFzaCwgZmFsc2U+CisgICAgOiBwcml2YXRlIF9IYXNodGFibGVfZWJvX2hlbHBlcjwwLCBfRXh0cmFjdEtleT4sCisgICAgICBwcml2YXRlIF9IYXNodGFibGVfZWJvX2hlbHBlcjwxLCBfSDE+LAorICAgICAgcHJpdmF0ZSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MiwgX0gyPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdXNpbmcgX19lYm9fZXh0cmFjdF9rZXkgPSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MCwgX0V4dHJhY3RLZXk+OworICAgICAgdXNpbmcgX19lYm9faDEgPSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MSwgX0gxPjsKKyAgICAgIHVzaW5nIF9fZWJvX2gyID0gX0hhc2h0YWJsZV9lYm9faGVscGVyPDIsIF9IMj47CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9IMSAJCQkJCWhhc2hlcjsKKworICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0aW9uKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gxKCk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgCQkJCV9faGFzaF9jb2RlOworICAgICAgdHlwZWRlZiBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+CQkJX19ub2RlX3R5cGU7CisKKyAgICAgIC8vIFdlIG5lZWQgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoZSBsb2NhbCBpdGVyYXRvcnMuCisgICAgICBfSGFzaF9jb2RlX2Jhc2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgIF9IYXNoX2NvZGVfYmFzZShjb25zdCBfRXh0cmFjdEtleSYgX19leCwKKwkJICAgICAgY29uc3QgX0gxJiBfX2gxLCBjb25zdCBfSDImIF9faDIsCisJCSAgICAgIGNvbnN0IF9EZWZhdWx0X3JhbmdlZF9oYXNoJikKKyAgICAgIDogX19lYm9fZXh0cmFjdF9rZXkoX19leCksIF9fZWJvX2gxKF9faDEpLCBfX2Vib19oMihfX2gyKSB7IH0KKworICAgICAgX19oYXNoX2NvZGUKKyAgICAgIF9NX2hhc2hfY29kZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMSgpKF9fayk7IH0KKworICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBfS2V5JiwgX19oYXNoX2NvZGUgX19jLCBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMigpKF9fYywgX19uKTsgfQorCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9fbm9kZV90eXBlKiBfX3AsCisJCSAgICAgIHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gyKCkoX01faDEoKShfTV9leHRyYWN0KCkoX19wLT5fTV92KSksIF9fbik7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3RvcmVfY29kZShfX25vZGVfdHlwZSosIF9faGFzaF9jb2RlKSBjb25zdAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NvcHlfY29kZShfX25vZGVfdHlwZSosIGNvbnN0IF9fbm9kZV90eXBlKikgY29uc3QKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zd2FwKF9IYXNoX2NvZGVfYmFzZSYgX194KQorICAgICAgeworCXN0ZDo6c3dhcChfTV9leHRyYWN0KCksIF9feC5fTV9leHRyYWN0KCkpOworCXN0ZDo6c3dhcChfTV9oMSgpLCBfX3guX01faDEoKSk7CisJc3RkOjpzd2FwKF9NX2gyKCksIF9feC5fTV9oMigpKTsKKyAgICAgIH0KKworICAgICAgY29uc3QgX0V4dHJhY3RLZXkmCisgICAgICBfTV9leHRyYWN0KCkgY29uc3QgeyByZXR1cm4gX19lYm9fZXh0cmFjdF9rZXk6Ol9TX2NnZXQoKnRoaXMpOyB9CisKKyAgICAgIF9FeHRyYWN0S2V5JgorICAgICAgX01fZXh0cmFjdCgpIHsgcmV0dXJuIF9fZWJvX2V4dHJhY3Rfa2V5OjpfU19nZXQoKnRoaXMpOyB9CisKKyAgICAgIGNvbnN0IF9IMSYKKyAgICAgIF9NX2gxKCkgY29uc3QgeyByZXR1cm4gX19lYm9faDE6Ol9TX2NnZXQoKnRoaXMpOyB9CisKKyAgICAgIF9IMSYKKyAgICAgIF9NX2gxKCkgeyByZXR1cm4gX19lYm9faDE6Ol9TX2dldCgqdGhpcyk7IH0KKworICAgICAgY29uc3QgX0gyJgorICAgICAgX01faDIoKSBjb25zdCB7IHJldHVybiBfX2Vib19oMjo6X1NfY2dldCgqdGhpcyk7IH0KKworICAgICAgX0gyJgorICAgICAgX01faDIoKSB7IHJldHVybiBfX2Vib19oMjo6X1NfZ2V0KCp0aGlzKTsgfQorICAgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uOiBoYXNoIGZ1bmN0aW9uIGFuZCByYW5nZS1oYXNoaW5nIGZ1bmN0aW9uLAorICAvLy8gY2FjaGluZyBoYXNoIGNvZGVzLiAgSCBpcyBwcm92aWRlZCBidXQgaWdub3JlZC4gIFByb3ZpZGVzCisgIC8vLyB0eXBlZGVmIGFuZCBhY2Nlc3NvciByZXF1aXJlZCBieSBDKysgMTEuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0V4dHJhY3RLZXksCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDI+CisgICAgc3RydWN0IF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfSDEsIF9IMiwKKwkJCSAgIF9EZWZhdWx0X3JhbmdlZF9oYXNoLCB0cnVlPgorICAgIDogcHJpdmF0ZSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MCwgX0V4dHJhY3RLZXk+LAorICAgICAgcHJpdmF0ZSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MSwgX0gxPiwKKyAgICAgIHByaXZhdGUgX0hhc2h0YWJsZV9lYm9faGVscGVyPDIsIF9IMj4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIC8vIEdpdmVzIGFjY2VzcyB0byBfTV9oMigpIHRvIHRoZSBsb2NhbCBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgX0xvY2FsX2l0ZXJhdG9yX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0gxLCBfSDIsCisJCQkJCSBfRGVmYXVsdF9yYW5nZWRfaGFzaCwgdHJ1ZT47CisKKyAgICAgIHVzaW5nIF9fZWJvX2V4dHJhY3Rfa2V5ID0gX0hhc2h0YWJsZV9lYm9faGVscGVyPDAsIF9FeHRyYWN0S2V5PjsKKyAgICAgIHVzaW5nIF9fZWJvX2gxID0gX0hhc2h0YWJsZV9lYm9faGVscGVyPDEsIF9IMT47CisgICAgICB1c2luZyBfX2Vib19oMiA9IF9IYXNodGFibGVfZWJvX2hlbHBlcjwyLCBfSDI+OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfSDEgCQkJCQloYXNoZXI7CisKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdGlvbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMSgpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90IAkJCQlfX2hhc2hfY29kZTsKKyAgICAgIHR5cGVkZWYgX0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+CQkJX19ub2RlX3R5cGU7CisKKyAgICAgIF9IYXNoX2NvZGVfYmFzZShjb25zdCBfRXh0cmFjdEtleSYgX19leCwKKwkJICAgICAgY29uc3QgX0gxJiBfX2gxLCBjb25zdCBfSDImIF9faDIsCisJCSAgICAgIGNvbnN0IF9EZWZhdWx0X3JhbmdlZF9oYXNoJikKKyAgICAgIDogX19lYm9fZXh0cmFjdF9rZXkoX19leCksIF9fZWJvX2gxKF9faDEpLCBfX2Vib19oMihfX2gyKSB7IH0KKworICAgICAgX19oYXNoX2NvZGUKKyAgICAgIF9NX2hhc2hfY29kZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMSgpKF9fayk7IH0KKworICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBfS2V5JiwgX19oYXNoX2NvZGUgX19jLAorCQkgICAgICBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMigpKF9fYywgX19uKTsgfQorCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9fbm9kZV90eXBlKiBfX3AsIHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gyKCkoX19wLT5fTV9oYXNoX2NvZGUsIF9fbik7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3RvcmVfY29kZShfX25vZGVfdHlwZSogX19uLCBfX2hhc2hfY29kZSBfX2MpIGNvbnN0CisgICAgICB7IF9fbi0+X01faGFzaF9jb2RlID0gX19jOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NvcHlfY29kZShfX25vZGVfdHlwZSogX190bywgY29uc3QgX19ub2RlX3R5cGUqIF9fZnJvbSkgY29uc3QKKyAgICAgIHsgX190by0+X01faGFzaF9jb2RlID0gX19mcm9tLT5fTV9oYXNoX2NvZGU7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3dhcChfSGFzaF9jb2RlX2Jhc2UmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZXh0cmFjdCgpLCBfX3guX01fZXh0cmFjdCgpKTsKKwlzdGQ6OnN3YXAoX01faDEoKSwgX194Ll9NX2gxKCkpOworCXN0ZDo6c3dhcChfTV9oMigpLCBfX3guX01faDIoKSk7CisgICAgICB9CisKKyAgICAgIGNvbnN0IF9FeHRyYWN0S2V5JgorICAgICAgX01fZXh0cmFjdCgpIGNvbnN0IHsgcmV0dXJuIF9fZWJvX2V4dHJhY3Rfa2V5OjpfU19jZ2V0KCp0aGlzKTsgfQorCisgICAgICBfRXh0cmFjdEtleSYKKyAgICAgIF9NX2V4dHJhY3QoKSB7IHJldHVybiBfX2Vib19leHRyYWN0X2tleTo6X1NfZ2V0KCp0aGlzKTsgfQorCisgICAgICBjb25zdCBfSDEmCisgICAgICBfTV9oMSgpIGNvbnN0IHsgcmV0dXJuIF9fZWJvX2gxOjpfU19jZ2V0KCp0aGlzKTsgfQorCisgICAgICBfSDEmCisgICAgICBfTV9oMSgpIHsgcmV0dXJuIF9fZWJvX2gxOjpfU19nZXQoKnRoaXMpOyB9CisKKyAgICAgIGNvbnN0IF9IMiYKKyAgICAgIF9NX2gyKCkgY29uc3QgeyByZXR1cm4gX19lYm9faDI6Ol9TX2NnZXQoKnRoaXMpOyB9CisKKyAgICAgIF9IMiYKKyAgICAgIF9NX2gyKCkgeyByZXR1cm4gX19lYm9faDI6Ol9TX2dldCgqdGhpcyk7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBfRXF1YWxfaGVscGVyLgorICAgKgorICAgKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0V4dHJhY3RLZXksCisJICAgIHR5cGVuYW1lIF9FcXVhbCwgdHlwZW5hbWUgX0hhc2hDb2RlVHlwZSwKKwkgICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KKyAgc3RydWN0IF9FcXVhbF9oZWxwZXI7CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAgIHR5cGVuYW1lIF9FcXVhbCwgdHlwZW5hbWUgX0hhc2hDb2RlVHlwZT4KKyAgc3RydWN0IF9FcXVhbF9oZWxwZXI8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSGFzaENvZGVUeXBlLCB0cnVlPgorICB7CisgICAgc3RhdGljIGJvb2wKKyAgICBfU19lcXVhbHMoY29uc3QgX0VxdWFsJiBfX2VxLCBjb25zdCBfRXh0cmFjdEtleSYgX19leHRyYWN0LAorCSAgICAgIGNvbnN0IF9LZXkmIF9faywgX0hhc2hDb2RlVHlwZSBfX2MsIF9IYXNoX25vZGU8X1ZhbHVlLCB0cnVlPiogX19uKQorICAgIHsgcmV0dXJuIF9fYyA9PSBfX24tPl9NX2hhc2hfY29kZSAmJiBfX2VxKF9faywgX19leHRyYWN0KF9fbi0+X01fdikpOyB9CisgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAgIHR5cGVuYW1lIF9FcXVhbCwgdHlwZW5hbWUgX0hhc2hDb2RlVHlwZT4KKyAgc3RydWN0IF9FcXVhbF9oZWxwZXI8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSGFzaENvZGVUeXBlLCBmYWxzZT4KKyAgeworICAgIHN0YXRpYyBib29sCisgICAgX1NfZXF1YWxzKGNvbnN0IF9FcXVhbCYgX19lcSwgY29uc3QgX0V4dHJhY3RLZXkmIF9fZXh0cmFjdCwKKwkgICAgICBjb25zdCBfS2V5JiBfX2ssIF9IYXNoQ29kZVR5cGUsIF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qIF9fbikKKyAgICB7IHJldHVybiBfX2VxKF9faywgX19leHRyYWN0KF9fbi0+X01fdikpOyB9CisgIH07CisKKworICAvLy8gU3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0V4dHJhY3RLZXksCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoPgorICAgIHN0cnVjdCBfTG9jYWxfaXRlcmF0b3JfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LAorCQkJCV9IMSwgX0gyLCBfSGFzaCwgdHJ1ZT4KKyAgICA6IHByaXZhdGUgX0hhc2h0YWJsZV9lYm9faGVscGVyPDAsIF9IMj4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdXNpbmcgX19iYXNlX3R5cGUgPSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MCwgX0gyPjsKKyAgICAgIHVzaW5nIF9faGFzaF9jb2RlX2Jhc2UgPSBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwKKwkJCQkJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgdHJ1ZT47CisKKyAgICBwdWJsaWM6CisgICAgICBfTG9jYWxfaXRlcmF0b3JfYmFzZSgpID0gZGVmYXVsdDsKKyAgICAgIF9Mb2NhbF9pdGVyYXRvcl9iYXNlKGNvbnN0IF9faGFzaF9jb2RlX2Jhc2UmIF9fYmFzZSwKKwkJCSAgIF9IYXNoX25vZGU8X1ZhbHVlLCB0cnVlPiogX19wLAorCQkJICAgc3RkOjpzaXplX3QgX19ia3QsIHN0ZDo6c2l6ZV90IF9fYmt0X2NvdW50KQorICAgICAgOiBfX2Jhc2VfdHlwZShfX2Jhc2UuX01faDIoKSksCisJX01fY3VyKF9fcCksIF9NX2J1Y2tldChfX2JrdCksIF9NX2J1Y2tldF9jb3VudChfX2JrdF9jb3VudCkgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luY3IoKQorICAgICAgeworCV9NX2N1ciA9IF9NX2N1ci0+X01fbmV4dCgpOworCWlmIChfTV9jdXIpCisJICB7CisJICAgIHN0ZDo6c2l6ZV90IF9fYmt0CisJICAgICAgPSBfX2Jhc2VfdHlwZTo6X1NfZ2V0KCp0aGlzKShfTV9jdXItPl9NX2hhc2hfY29kZSwKKwkJCQkJICAgX01fYnVja2V0X2NvdW50KTsKKwkgICAgaWYgKF9fYmt0ICE9IF9NX2J1Y2tldCkKKwkgICAgICBfTV9jdXIgPSBudWxscHRyOworCSAgfQorICAgICAgfQorCisgICAgICBfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qICBfTV9jdXI7CisgICAgICBzdGQ6OnNpemVfdCBfTV9idWNrZXQ7CisgICAgICBzdGQ6OnNpemVfdCBfTV9idWNrZXRfY291bnQ7CisgICAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0V4dHJhY3RLZXksCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoPgorICAgIHN0cnVjdCBfTG9jYWxfaXRlcmF0b3JfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LAorCQkJCV9IMSwgX0gyLCBfSGFzaCwgZmFsc2U+CisgICAgOiBwcml2YXRlIF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LAorCQkJICAgICAgX0gxLCBfSDIsIF9IYXNoLCBmYWxzZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdXNpbmcgX19oYXNoX2NvZGVfYmFzZSA9IF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LAorCQkJCQkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBmYWxzZT47CisKKyAgICBwdWJsaWM6CisgICAgICBfTG9jYWxfaXRlcmF0b3JfYmFzZSgpID0gZGVmYXVsdDsKKyAgICAgIF9Mb2NhbF9pdGVyYXRvcl9iYXNlKGNvbnN0IF9faGFzaF9jb2RlX2Jhc2UmIF9fYmFzZSwKKwkJCSAgIF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qIF9fcCwKKwkJCSAgIHN0ZDo6c2l6ZV90IF9fYmt0LCBzdGQ6OnNpemVfdCBfX2JrdF9jb3VudCkKKwk6IF9faGFzaF9jb2RlX2Jhc2UoX19iYXNlKSwKKwkgIF9NX2N1cihfX3ApLCBfTV9idWNrZXQoX19ia3QpLCBfTV9idWNrZXRfY291bnQoX19ia3RfY291bnQpIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9pbmNyKCkKKyAgICAgIHsKKwlfTV9jdXIgPSBfTV9jdXItPl9NX25leHQoKTsKKwlpZiAoX01fY3VyKQorCSAgeworCSAgICBzdGQ6OnNpemVfdCBfX2JrdCA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfTV9jdXIsIF9NX2J1Y2tldF9jb3VudCk7CisJICAgIGlmIChfX2JrdCAhPSBfTV9idWNrZXQpCisJICAgICAgX01fY3VyID0gbnVsbHB0cjsKKwkgIH0KKyAgICAgIH0KKworICAgICAgX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiogIF9NX2N1cjsKKyAgICAgIHN0ZDo6c2l6ZV90IF9NX2J1Y2tldDsKKyAgICAgIHN0ZDo6c2l6ZV90IF9NX2J1Y2tldF9jb3VudDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0V4dHJhY3RLZXksCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCBib29sIF9fY2FjaGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9Mb2NhbF9pdGVyYXRvcl9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksCisJCQkJCSAgX0gxLCBfSDIsIF9IYXNoLCBfX2NhY2hlPiYgX194LAorCSAgICAgICBjb25zdCBfTG9jYWxfaXRlcmF0b3JfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LAorCQkJCQkgIF9IMSwgX0gyLCBfSGFzaCwgX19jYWNoZT4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fY3VyID09IF9feS5fTV9jdXI7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgYm9vbCBfX2NhY2hlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfTG9jYWxfaXRlcmF0b3JfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LAorCQkJCQkgIF9IMSwgX0gyLCBfSGFzaCwgX19jYWNoZT4mIF9feCwKKwkgICAgICAgY29uc3QgX0xvY2FsX2l0ZXJhdG9yX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwKKwkJCQkJICBfSDEsIF9IMiwgX0hhc2gsIF9fY2FjaGU+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2N1ciAhPSBfX3kuX01fY3VyOyB9CisKKyAgLy8vIGxvY2FsIGl0ZXJhdG9ycworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwKKwkgICBib29sIF9fY29uc3RhbnRfaXRlcmF0b3JzLCBib29sIF9fY2FjaGU+CisgICAgc3RydWN0IF9Mb2NhbF9pdGVyYXRvcgorICAgIDogcHVibGljIF9Mb2NhbF9pdGVyYXRvcl9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksCisJCQkJICBfSDEsIF9IMiwgX0hhc2gsIF9fY2FjaGU+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZSA9IF9Mb2NhbF9pdGVyYXRvcl9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksCisJCQkJCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9fY2FjaGU+OworICAgICAgdXNpbmcgX19oYXNoX2NvZGVfYmFzZSA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjpfX2hhc2hfY29kZV9iYXNlOworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCQljb25zdCBfVmFsdWUqLCBfVmFsdWUqPjo6dHlwZQorCQkJCQkJICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCWNvbnN0IF9WYWx1ZSYsIF9WYWx1ZSY+Ojp0eXBlCisJCQkJCQkgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgX0xvY2FsX2l0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgICBfTG9jYWxfaXRlcmF0b3IoY29uc3QgX19oYXNoX2NvZGVfYmFzZSYgX19iYXNlLAorCQkgICAgICBfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qIF9fcCwKKwkJICAgICAgc3RkOjpzaXplX3QgX19ia3QsIHN0ZDo6c2l6ZV90IF9fYmt0X2NvdW50KQorCTogX19iYXNlX3R5cGUoX19iYXNlLCBfX3AsIF9fYmt0LCBfX2JrdF9jb3VudCkKKyAgICAgIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9jdXItPl9NX3Y7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKHRoaXMtPl9NX2N1ci0+X01fdik7IH0KKworICAgICAgX0xvY2FsX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJdGhpcy0+X01faW5jcigpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX0xvY2FsX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlfTG9jYWxfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworICAvLy8gbG9jYWwgY29uc3RfaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0V4dHJhY3RLZXksCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX0xvY2FsX2NvbnN0X2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgX0xvY2FsX2l0ZXJhdG9yX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwKKwkJCQkgIF9IMSwgX0gyLCBfSGFzaCwgX19jYWNoZT4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlID0gX0xvY2FsX2l0ZXJhdG9yX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwKKwkJCQkJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX19jYWNoZT47CisgICAgICB1c2luZyBfX2hhc2hfY29kZV9iYXNlID0gdHlwZW5hbWUgX19iYXNlX3R5cGU6Ol9faGFzaF9jb2RlX2Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1ZhbHVlKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCBfVmFsdWUmICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgICAgICAgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIF9Mb2NhbF9jb25zdF9pdGVyYXRvcigpID0gZGVmYXVsdDsKKworICAgICAgX0xvY2FsX2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9faGFzaF9jb2RlX2Jhc2UmIF9fYmFzZSwKKwkJCSAgICBfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qIF9fcCwKKwkJCSAgICBzdGQ6OnNpemVfdCBfX2JrdCwgc3RkOjpzaXplX3QgX19ia3RfY291bnQpCisJOiBfX2Jhc2VfdHlwZShfX2Jhc2UsIF9fcCwgX19ia3QsIF9fYmt0X2NvdW50KQorICAgICAgeyB9CisKKyAgICAgIF9Mb2NhbF9jb25zdF9pdGVyYXRvcihjb25zdCBfTG9jYWxfaXRlcmF0b3I8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwKKwkJCQkJCSAgX0gxLCBfSDIsIF9IYXNoLAorCQkJCQkJICBfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCQkJCSAgX19jYWNoZT4mIF9feCkKKwk6IF9fYmFzZV90eXBlKF9feCkKKyAgICAgIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9jdXItPl9NX3Y7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKHRoaXMtPl9NX2N1ci0+X01fdik7IH0KKworICAgICAgX0xvY2FsX2NvbnN0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJdGhpcy0+X01faW5jcigpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX0xvY2FsX2NvbnN0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlfTG9jYWxfY29uc3RfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworICAvKioKKyAgICogIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZV9iYXNlLgorICAgKgorICAgKiAgSGVscGVyIGNsYXNzIGFkZGluZyBtYW5hZ2VtZW50IG9mIF9FcXVhbCBmdW5jdG9yIHRvCisgICAqICBfSGFzaF9jb2RlX2Jhc2UgdHlwZS4KKyAgICoKKyAgICogIEJhc2UgY2xhc3MgdGVtcGxhdGVzIGFyZToKKyAgICogICAgLSBfX2RldGFpbDo6X0hhc2hfY29kZV9iYXNlCisgICAqICAgIC0gX19kZXRhaWw6Ol9IYXNodGFibGVfZWJvX2hlbHBlcgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfVHJhaXRzPgorICBzdHJ1Y3QgX0hhc2h0YWJsZV9iYXNlCisgIDogcHVibGljIF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfSDEsIF9IMiwgX0hhc2gsCisJCQkgICBfVHJhaXRzOjpfX2hhc2hfY2FjaGVkOjp2YWx1ZT4sCisgICAgcHJpdmF0ZSBfSGFzaHRhYmxlX2Vib19oZWxwZXI8MCwgX0VxdWFsPgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIF9LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfdHlwZTsKKyAgICB0eXBlZGVmIF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgIHR5cGVkZWYgX0VxdWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9lcXVhbDsKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgdXNpbmcgX190cmFpdHNfdHlwZSA9IF9UcmFpdHM7CisgICAgdXNpbmcgX19oYXNoX2NhY2hlZCA9IHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6Ol9faGFzaF9jYWNoZWQ7CisgICAgdXNpbmcgX19jb25zdGFudF9pdGVyYXRvcnMgPSB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpfX2NvbnN0YW50X2l0ZXJhdG9yczsKKyAgICB1c2luZyBfX3VuaXF1ZV9rZXlzID0gdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6X191bmlxdWVfa2V5czsKKworICAgIHVzaW5nIF9faGFzaF9jb2RlX2Jhc2UgPSBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwKKwkJCQkJICAgICBfSDEsIF9IMiwgX0hhc2gsCisJCQkJCSAgICAgX19oYXNoX2NhY2hlZDo6dmFsdWU+OworCisgICAgdXNpbmcgX19oYXNoX2NvZGUgPSB0eXBlbmFtZSBfX2hhc2hfY29kZV9iYXNlOjpfX2hhc2hfY29kZTsKKyAgICB1c2luZyBfX25vZGVfdHlwZSA9IHR5cGVuYW1lIF9faGFzaF9jb2RlX2Jhc2U6Ol9fbm9kZV90eXBlOworCisgICAgdXNpbmcgaXRlcmF0b3IgPSBfX2RldGFpbDo6X05vZGVfaXRlcmF0b3I8dmFsdWVfdHlwZSwKKwkJCQkJICAgICAgX19jb25zdGFudF9pdGVyYXRvcnM6OnZhbHVlLAorCQkJCQkgICAgICBfX2hhc2hfY2FjaGVkOjp2YWx1ZT47CisKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IF9fZGV0YWlsOjpfTm9kZV9jb25zdF9pdGVyYXRvcjx2YWx1ZV90eXBlLAorCQkJCQkJICAgX19jb25zdGFudF9pdGVyYXRvcnM6OnZhbHVlLAorCQkJCQkJICAgX19oYXNoX2NhY2hlZDo6dmFsdWU+OworCisgICAgdXNpbmcgbG9jYWxfaXRlcmF0b3IgPSBfX2RldGFpbDo6X0xvY2FsX2l0ZXJhdG9yPGtleV90eXBlLCB2YWx1ZV90eXBlLAorCQkJCQkJICBfRXh0cmFjdEtleSwgX0gxLCBfSDIsIF9IYXNoLAorCQkJCQkJICBfX2NvbnN0YW50X2l0ZXJhdG9yczo6dmFsdWUsCisJCQkJCQkgICAgIF9faGFzaF9jYWNoZWQ6OnZhbHVlPjsKKworICAgIHVzaW5nIGNvbnN0X2xvY2FsX2l0ZXJhdG9yID0gX19kZXRhaWw6Ol9Mb2NhbF9jb25zdF9pdGVyYXRvcjxrZXlfdHlwZSwKKwkJCQkJCQkJIHZhbHVlX3R5cGUsCisJCQkJCV9FeHRyYWN0S2V5LCBfSDEsIF9IMiwgX0hhc2gsCisJCQkJCV9fY29uc3RhbnRfaXRlcmF0b3JzOjp2YWx1ZSwKKwkJCQkJX19oYXNoX2NhY2hlZDo6dmFsdWU+OworCisgICAgdXNpbmcgX19pcmV0dXJuX3R5cGUgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fdW5pcXVlX2tleXM6OnZhbHVlLAorCQkJCQkJICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+LAorCQkJCQkJICAgICBpdGVyYXRvcj46OnR5cGU7CisKKyAgICB1c2luZyBfX2ljb252X3R5cGUgPSB0eXBlbmFtZSAgc3RkOjpjb25kaXRpb25hbDxfX3VuaXF1ZV9rZXlzOjp2YWx1ZSwKKwkJCQkJCSAgICBfU2VsZWN0MXN0LCBfSWRlbnRpdHkKKwkJCQkJCSAgICA+Ojp0eXBlOworICBwcml2YXRlOgorICAgIHVzaW5nIF9FcXVhbEVCTyA9IF9IYXNodGFibGVfZWJvX2hlbHBlcjwwLCBfRXF1YWw+OworICAgIHVzaW5nIF9FcXVhbEhlbHBlciA9ICBfRXF1YWxfaGVscGVyPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCQkJX19oYXNoX2NvZGUsIF9faGFzaF9jYWNoZWQ6OnZhbHVlPjsKKworICBwcm90ZWN0ZWQ6CisgICAgdXNpbmcgX19ub2RlX2Jhc2UgPSBfX2RldGFpbDo6X0hhc2hfbm9kZV9iYXNlOworICAgIHVzaW5nIF9fYnVja2V0X3R5cGUgPSBfX25vZGVfYmFzZSo7CisKKyAgICBfSGFzaHRhYmxlX2Jhc2UoY29uc3QgX0V4dHJhY3RLZXkmIF9fZXgsIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLAorCQkgICAgY29uc3QgX0hhc2gmIF9faGFzaCwgY29uc3QgX0VxdWFsJiBfX2VxKQorICAgIDogX19oYXNoX2NvZGVfYmFzZShfX2V4LCBfX2gxLCBfX2gyLCBfX2hhc2gpLCBfRXF1YWxFQk8oX19lcSkKKyAgICB7IH0KKworICAgIGJvb2wKKyAgICBfTV9lcXVhbHMoY29uc3QgX0tleSYgX19rLCBfX2hhc2hfY29kZSBfX2MsIF9fbm9kZV90eXBlKiBfX24pIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIF9FcXVhbEhlbHBlcjo6X1NfZXF1YWxzKF9NX2VxKCksIHRoaXMtPl9NX2V4dHJhY3QoKSwKKwkJCQkgICAgIF9faywgX19jLCBfX24pOworICAgIH0KKworICAgIHZvaWQKKyAgICBfTV9zd2FwKF9IYXNodGFibGVfYmFzZSYgX194KQorICAgIHsKKyAgICAgIF9faGFzaF9jb2RlX2Jhc2U6Ol9NX3N3YXAoX194KTsKKyAgICAgIHN0ZDo6c3dhcChfTV9lcSgpLCBfX3guX01fZXEoKSk7CisgICAgfQorCisgICAgY29uc3QgX0VxdWFsJgorICAgIF9NX2VxKCkgY29uc3QgeyByZXR1cm4gX0VxdWFsRUJPOjpfU19jZ2V0KCp0aGlzKTsgfQorCisgICAgX0VxdWFsJgorICAgIF9NX2VxKCkgeyByZXR1cm4gX0VxdWFsRUJPOjpfU19nZXQoKnRoaXMpOyB9CisgIH07CisKKyAgLyoqCisgICAqICBzdHJ1Y3QgX0VxdWFsaXR5X2Jhc2UuCisgICAqCisgICAqICBDb21tb24gdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgY2xhc3MgX0VxdWFsaXR5LgorICAgKi8KKyAgc3RydWN0IF9FcXVhbGl0eV9iYXNlCisgIHsKKyAgcHJvdGVjdGVkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VaXRlcmF0b3I+CisgICAgICBzdGF0aWMgYm9vbAorICAgICAgX1NfaXNfcGVybXV0YXRpb24oX1VpdGVyYXRvciwgX1VpdGVyYXRvciwgX1VpdGVyYXRvcik7CisgIH07CisKKyAgLy8gU2VlIHN0ZDo6aXNfcGVybXV0YXRpb24gaW4gTjMwNjguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VaXRlcmF0b3I+CisgICAgYm9vbAorICAgIF9FcXVhbGl0eV9iYXNlOjoKKyAgICBfU19pc19wZXJtdXRhdGlvbihfVWl0ZXJhdG9yIF9fZmlyc3QxLCBfVWl0ZXJhdG9yIF9fbGFzdDEsCisJCSAgICAgIF9VaXRlcmF0b3IgX19maXJzdDIpCisgICAgeworICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCisJaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCisJICBicmVhazsKKworICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCisJcmV0dXJuIHRydWU7CisKKyAgICAgIF9VaXRlcmF0b3IgX19sYXN0MiA9IF9fZmlyc3QyOworICAgICAgc3RkOjphZHZhbmNlKF9fbGFzdDIsIHN0ZDo6ZGlzdGFuY2UoX19maXJzdDEsIF9fbGFzdDEpKTsKKworICAgICAgZm9yIChfVWl0ZXJhdG9yIF9faXQxID0gX19maXJzdDE7IF9faXQxICE9IF9fbGFzdDE7ICsrX19pdDEpCisJeworCSAgX1VpdGVyYXRvciBfX3RtcCA9ICBfX2ZpcnN0MTsKKwkgIHdoaWxlIChfX3RtcCAhPSBfX2l0MSAmJiAhYm9vbCgqX190bXAgPT0gKl9faXQxKSkKKwkgICAgKytfX3RtcDsKKworCSAgLy8gV2UndmUgc2VlbiB0aGlzIG9uZSBiZWZvcmUuCisJICBpZiAoX190bXAgIT0gX19pdDEpCisJICAgIGNvbnRpbnVlOworCisJICBzdGQ6OnB0cmRpZmZfdCBfX24yID0gMDsKKwkgIGZvciAoX190bXAgPSBfX2ZpcnN0MjsgX190bXAgIT0gX19sYXN0MjsgKytfX3RtcCkKKwkgICAgaWYgKCpfX3RtcCA9PSAqX19pdDEpCisJICAgICAgKytfX24yOworCisJICBpZiAoIV9fbjIpCisJICAgIHJldHVybiBmYWxzZTsKKworCSAgc3RkOjpwdHJkaWZmX3QgX19uMSA9IDA7CisJICBmb3IgKF9fdG1wID0gX19pdDE7IF9fdG1wICE9IF9fbGFzdDE7ICsrX190bXApCisJICAgIGlmICgqX190bXAgPT0gKl9faXQxKQorCSAgICAgICsrX19uMTsKKworCSAgaWYgKF9fbjEgIT0gX19uMikKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAvKioKKyAgICogIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgIF9FcXVhbGl0eS4KKyAgICoKKyAgICogIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyBlcXVhbGl0eSBjb21wYXJpc29uIGZvciB1bm9yZGVyZWQKKyAgICogIGNvbnRhaW5lcnMsIHBlciBOMzA2OCwgYnkgSm9obiBMYWtvcyBhbmQgUGFibG8gSGFscGVybi4KKyAgICogIEFsZ29yaXRobWljYWxseSwgd2UgZm9sbG93IGNsb3NlbHkgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbnMKKyAgICogIHRoZXJlaW4uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LCB0eXBlbmFtZSBfVHJhaXRzLAorCSAgIGJvb2wgX1VuaXF1ZV9rZXlzID0gX1RyYWl0czo6X191bmlxdWVfa2V5czo6dmFsdWU+CisgICAgc3RydWN0IF9FcXVhbGl0eTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RydWN0IF9FcXVhbGl0eTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHMsIHRydWU+CisgICAgeworICAgICAgdXNpbmcgX19oYXNodGFibGUgPSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJCSAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjsKKworICAgICAgYm9vbAorICAgICAgX01fZXF1YWwoY29uc3QgX19oYXNodGFibGUmKSBjb25zdDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYm9vbAorICAgIF9FcXVhbGl0eTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHMsIHRydWU+OjoKKyAgICBfTV9lcXVhbChjb25zdCBfX2hhc2h0YWJsZSYgX19vdGhlcikgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBfX2hhc2h0YWJsZSogX190aGlzID0gc3RhdGljX2Nhc3Q8Y29uc3QgX19oYXNodGFibGUqPih0aGlzKTsKKworICAgICAgaWYgKF9fdGhpcy0+c2l6ZSgpICE9IF9fb3RoZXIuc2l6ZSgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgZm9yIChhdXRvIF9faXR4ID0gX190aGlzLT5iZWdpbigpOyBfX2l0eCAhPSBfX3RoaXMtPmVuZCgpOyArK19faXR4KQorCXsKKwkgIGNvbnN0IGF1dG8gX19pdHkgPSBfX290aGVyLmZpbmQoX0V4dHJhY3RLZXkoKSgqX19pdHgpKTsKKwkgIGlmIChfX2l0eSA9PSBfX290aGVyLmVuZCgpIHx8ICFib29sKCpfX2l0eSA9PSAqX19pdHgpKQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIC8vLyBTcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdHJ1Y3QgX0VxdWFsaXR5PF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cywgZmFsc2U+CisgICAgOiBwdWJsaWMgX0VxdWFsaXR5X2Jhc2UKKyAgICB7CisgICAgICB1c2luZyBfX2hhc2h0YWJsZSA9IF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQkJICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OworCisgICAgICBib29sCisgICAgICBfTV9lcXVhbChjb25zdCBfX2hhc2h0YWJsZSYpIGNvbnN0OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBib29sCisgICAgX0VxdWFsaXR5PF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cywgZmFsc2U+OjoKKyAgICBfTV9lcXVhbChjb25zdCBfX2hhc2h0YWJsZSYgX19vdGhlcikgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBfX2hhc2h0YWJsZSogX190aGlzID0gc3RhdGljX2Nhc3Q8Y29uc3QgX19oYXNodGFibGUqPih0aGlzKTsKKworICAgICAgaWYgKF9fdGhpcy0+c2l6ZSgpICE9IF9fb3RoZXIuc2l6ZSgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgZm9yIChhdXRvIF9faXR4ID0gX190aGlzLT5iZWdpbigpOyBfX2l0eCAhPSBfX3RoaXMtPmVuZCgpOykKKwl7CisJICBjb25zdCBhdXRvIF9feHJhbmdlID0gX190aGlzLT5lcXVhbF9yYW5nZShfRXh0cmFjdEtleSgpKCpfX2l0eCkpOworCSAgY29uc3QgYXV0byBfX3lyYW5nZSA9IF9fb3RoZXIuZXF1YWxfcmFuZ2UoX0V4dHJhY3RLZXkoKSgqX19pdHgpKTsKKworCSAgaWYgKHN0ZDo6ZGlzdGFuY2UoX194cmFuZ2UuZmlyc3QsIF9feHJhbmdlLnNlY29uZCkKKwkgICAgICAhPSBzdGQ6OmRpc3RhbmNlKF9feXJhbmdlLmZpcnN0LCBfX3lyYW5nZS5zZWNvbmQpKQorCSAgICByZXR1cm4gZmFsc2U7CisKKwkgIGlmICghX1NfaXNfcGVybXV0YXRpb24oX194cmFuZ2UuZmlyc3QsIF9feHJhbmdlLnNlY29uZCwKKwkJCQkgX195cmFuZ2UuZmlyc3QpKQorCSAgICByZXR1cm4gZmFsc2U7CisKKwkgIF9faXR4ID0gX194cmFuZ2Uuc2Vjb25kOworCX0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAvKioKKyAgICogVGhpcyB0eXBlIGlzIHRvIGNvbWJpbmUgYSBfSGFzaF9ub2RlX2Jhc2UgaW5zdGFuY2Ugd2l0aCBhbiBhbGxvY2F0b3IKKyAgICogaW5zdGFuY2UgdGhyb3VnaCBpbmhlcml0YW5jZSB0byBiZW5lZml0IGZyb20gRUJPIHdoZW4gcG9zc2libGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTm9kZUFsbG9jPgorICAgIHN0cnVjdCBfQmVmb3JlX2JlZ2luIDogcHVibGljIF9Ob2RlQWxsb2MKKyAgICB7CisgICAgICBfSGFzaF9ub2RlX2Jhc2UgX01fbm9kZTsKKworICAgICAgX0JlZm9yZV9iZWdpbihjb25zdCBfQmVmb3JlX2JlZ2luJikgPSBkZWZhdWx0OworICAgICAgX0JlZm9yZV9iZWdpbihfQmVmb3JlX2JlZ2luJiYpID0gZGVmYXVsdDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorCV9CZWZvcmVfYmVnaW4oX0FsbG9jJiYgX19hKQorCSAgOiBfTm9kZUFsbG9jKHN0ZDo6Zm9yd2FyZDxfQWxsb2M+KF9fYSkpCisJeyB9CisgICAgfTsKKworIC8vQH0gaGFzaHRhYmxlLWRldGFpbAorX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvLyBfSEFTSFRBQkxFX1BPTElDWV9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvaW5kaXJlY3RfYXJyYXkuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9pbmRpcmVjdF9hcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjg0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvaW5kaXJlY3RfYXJyYXkuaApAQCAtMCwwICsxLDIxMiBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gaW5kaXJlY3RfYXJyYXkgY2xhc3MuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2luZGlyZWN0X2FycmF5LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt2YWxhcnJheX0KKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfSU5ESVJFQ1RfQVJSQVlfSAorI2RlZmluZSBfSU5ESVJFQ1RfQVJSQVlfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBudW1lcmljX2FycmF5cworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogIEBicmllZiAgUmVmZXJlbmNlIHRvIGFyYml0cmFyeSBzdWJzZXQgb2YgYW4gYXJyYXkuCisgICAqCisgICAqICBBbiBpbmRpcmVjdF9hcnJheSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGVsZW1lbnRzIG9mIGFuIGFycmF5CisgICAqICBzcGVjaWZpZWQgYnkgYW4gb3JkZXJlZCBhcnJheSBvZiBpbmRpY2VzLiAgVGhlIHdheSB0byBnZXQgYW4KKyAgICogIGluZGlyZWN0X2FycmF5IGlzIHRvIGNhbGwgb3BlcmF0b3JbXSh2YWxhcnJheTxzaXplX3Q+KSBvbiBhIHZhbGFycmF5LgorICAgKiAgVGhlIHJldHVybmVkIGluZGlyZWN0X2FycmF5IHRoZW4gcGVybWl0cyBjYXJyeWluZyBvcGVyYXRpb25zIG91dCBvbiB0aGUKKyAgICogIHJlZmVyZW5jZWQgc3Vic2V0IG9mIGVsZW1lbnRzIGluIHRoZSBvcmlnaW5hbCB2YWxhcnJheS4KKyAgICoKKyAgICogIEZvciBleGFtcGxlLCBpZiBhbiBpbmRpcmVjdF9hcnJheSBpcyBvYnRhaW5lZCB1c2luZyB0aGUgYXJyYXkgKDQsMiwwKSBhcworICAgKiAgYW4gYXJndW1lbnQsIGFuZCB0aGVuIGFzc2lnbmVkIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgKDEsMiwzKSwgdGhlbiB0aGUKKyAgICogIHVuZGVybHlpbmcgYXJyYXkgd2lsbCBoYXZlIGFycmF5WzBdPT0zLCBhcnJheVsyXT09MiwgYW5kIGFycmF5WzRdPT0xLgorICAgKgorICAgKiAgQHBhcmFtICBUcCAgRWxlbWVudCB0eXBlLgorICAgKi8KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICBjbGFzcyBpbmRpcmVjdF9hcnJheQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNTMuIHZhbGFycmF5IGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsbW9zdCBlbnRpcmVseSB1c2VsZXNzCisKKyAgICAgIC8vLyAgQ29weSBjb25zdHJ1Y3Rvci4gIEJvdGggc2xpY2VzIHJlZmVyIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgYXJyYXkuCisgICAgICBpbmRpcmVjdF9hcnJheShjb25zdCBpbmRpcmVjdF9hcnJheSYpOworCisgICAgICAvLy8gIEFzc2lnbm1lbnQgb3BlcmF0b3IuICBBc3NpZ25zIGVsZW1lbnRzIHRvIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMKKyAgICAgIC8vLyAgb2YgQGEgYS4KKyAgICAgIGluZGlyZWN0X2FycmF5JiBvcGVyYXRvcj0oY29uc3QgaW5kaXJlY3RfYXJyYXkmKTsKKworICAgICAgLy8vICBBc3NpZ24gc2xpY2UgZWxlbWVudHMgdG8gY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBNdWx0aXBseSBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yKj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBEaXZpZGUgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvci89KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTW9kdWxvIHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3IlPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFkZCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgdG8gc2xpY2UgZWxlbWVudHMuCisgICAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBTdWJ0cmFjdCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgZnJvbSBzbGljZSBlbGVtZW50cy4KKyAgICAgIHZvaWQgb3BlcmF0b3ItPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExvZ2ljYWwgeG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcl49KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTG9naWNhbCBhbmQgc2xpY2UgZWxlbWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yJj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMb2dpY2FsIG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcnw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTGVmdCBzaGlmdCBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgUmlnaHQgc2hpZnQgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFzc2lnbiBhbGwgc2xpY2UgZWxlbWVudHMgdG8gQGEgdC4KKyAgICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBfVHAmKSBjb25zdDsKKyAgICAgIC8vICAgIH5pbmRpcmVjdF9hcnJheSgpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgIHZvaWQgb3BlcmF0b3IqPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgdm9pZCBvcGVyYXRvci89KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICB2b2lkIG9wZXJhdG9yJT0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgIHZvaWQgb3BlcmF0b3IrPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgdm9pZCBvcGVyYXRvci09KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICB2b2lkIG9wZXJhdG9yXj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgIHZvaWQgb3BlcmF0b3ImPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgdm9pZCBvcGVyYXRvcnw9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICB2b2lkIG9wZXJhdG9yPj49KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAvLy8gIENvcHkgY29uc3RydWN0b3IuICBCb3RoIHNsaWNlcyByZWZlciB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGFycmF5LgorICAgICAgaW5kaXJlY3RfYXJyYXkoX0FycmF5PF9UcD4sIHNpemVfdCwgX0FycmF5PHNpemVfdD4pOworCisgICAgICBmcmllbmQgY2xhc3MgdmFsYXJyYXk8X1RwPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBnc2xpY2VfYXJyYXk8X1RwPjsKKworICAgICAgY29uc3Qgc2l6ZV90CSBfTV9zejsKKyAgICAgIGNvbnN0IF9BcnJheTxzaXplX3Q+IF9NX2luZGV4OworICAgICAgY29uc3QgX0FycmF5PF9UcD4JIF9NX2FycmF5OworCisgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKKyAgICAgIGluZGlyZWN0X2FycmF5KCk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6aW5kaXJlY3RfYXJyYXkoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYgX19hKQorICAgIDogX01fc3ooX19hLl9NX3N6KSwgX01faW5kZXgoX19hLl9NX2luZGV4KSwgX01fYXJyYXkoX19hLl9NX2FycmF5KSB7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjppbmRpcmVjdF9hcnJheShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MsCisJCQkJCV9BcnJheTxzaXplX3Q+IF9faSkKKyAgICA6IF9NX3N6KF9fcyksIF9NX2luZGV4KF9faSksIF9NX2FycmF5KF9fYSkge30KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGluZGlyZWN0X2FycmF5PF9UcD4mCisgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGluZGlyZWN0X2FycmF5PF9UcD4mIF9fYSkKKyAgICB7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2EuX01fYXJyYXksIF9NX3N6LCBfX2EuX01faW5kZXgsIF9NX2FycmF5LAorCQkJICAgX01faW5kZXgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfZmlsbChfTV9hcnJheSwgX01faW5kZXgsIF9NX3N6LCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+KF9fdiksIF9NX3N6LCBfTV9hcnJheSwgX01faW5kZXgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkgY29uc3QKKyAgICAgIHsgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19lLCBfTV9zeiwgX01fYXJyYXksIF9NX2luZGV4KTsgfQorCisjdW5kZWYgX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUgorI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKF9PcCwgX05hbWUpCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgkJCQkJCVwKKyAgICBpbmxpbmUgdm9pZAkJCQkJCQkJXAorICAgIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIF9PcCMjPShjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0XAorICAgIHsJCQkJCQkJCQlcCisgICAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8X1RwPihfX3YpLCBfTV9zeik7IFwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CQkJCSAgICAgICAgICAgICAgICBcCisgICAgICBpbmxpbmUgdm9pZAkJCQkJCQlcCisgICAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciBfT3AjIz0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0XAorICAgICAgewkJCQkJCQkJCVwKKwlfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsJXAorICAgICAgfQorCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCosIF9fbXVsdGlwbGllcykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoLywgX19kaXZpZGVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUiglLCBfX21vZHVsdXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCssIF9fcGx1cykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoLSwgX19taW51cykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoXiwgX19iaXR3aXNlX3hvcikKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoJiwgX19iaXR3aXNlX2FuZCkKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IofCwgX19iaXR3aXNlX29yKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUig8PCwgX19zaGlmdF9sZWZ0KQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUig+PiwgX19zaGlmdF9yaWdodCkKKworI3VuZGVmIF9ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IKKworICAvLyBAfSBncm91cCBudW1lcmljX2FycmF5cworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfSU5ESVJFQ1RfQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2lvc19iYXNlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvaW9zX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjdiOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2lvc19iYXNlLmgKQEAgLTAsMCArMSw5NzUgQEAKKy8vIElvc3RyZWFtcyBiYXNlIGNsYXNzZXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvaW9zX2Jhc2UuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2lvc30KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNCAgSW9zdHJlYW1zIGJhc2UgY2xhc3NlcworLy8KKworI2lmbmRlZiBfSU9TX0JBU0VfSAorI2RlZmluZSBfSU9TX0JBU0VfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGV4dC9hdG9taWNpdHkuaD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZWZ3ZC5oPgorI2luY2x1ZGUgPGJpdHMvbG9jYWxlX2NsYXNzZXMuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgb2YgYml0bWFzayB0eXBlcyBhcmUgZW51bXMsIG5vdCBpbnRzLAorICAvLyBhcyBwZXJtaXR0ZWQgKGJ1dCBub3QgcmVxdWlyZWQpIGluIHRoZSBzdGFuZGFyZCwgaW4gb3JkZXIgdG8gcHJvdmlkZQorICAvLyBiZXR0ZXIgdHlwZSBzYWZldHkgaW4gaW9zdHJlYW0gY2FsbHMuICBBIHNpZGUgZWZmZWN0IGlzIHRoYXQKKyAgLy8gZXhwcmVzc2lvbnMgaW52b2x2aW5nIHRoZW0gYXJlIG5vIGxvbmdlciBjb21waWxlLXRpbWUgY29uc3RhbnRzLgorICBlbnVtIF9Jb3NfRm10ZmxhZ3MgCisgICAgeyAKKyAgICAgIF9TX2Jvb2xhbHBoYSAJPSAxTCA8PCAwLAorICAgICAgX1NfZGVjIAkJPSAxTCA8PCAxLAorICAgICAgX1NfZml4ZWQgCQk9IDFMIDw8IDIsCisgICAgICBfU19oZXggCQk9IDFMIDw8IDMsCisgICAgICBfU19pbnRlcm5hbCAJPSAxTCA8PCA0LAorICAgICAgX1NfbGVmdCAJCT0gMUwgPDwgNSwKKyAgICAgIF9TX29jdCAJCT0gMUwgPDwgNiwKKyAgICAgIF9TX3JpZ2h0IAkJPSAxTCA8PCA3LAorICAgICAgX1Nfc2NpZW50aWZpYyAJPSAxTCA8PCA4LAorICAgICAgX1Nfc2hvd2Jhc2UgCT0gMUwgPDwgOSwKKyAgICAgIF9TX3Nob3dwb2ludCAJPSAxTCA8PCAxMCwKKyAgICAgIF9TX3Nob3dwb3MgCT0gMUwgPDwgMTEsCisgICAgICBfU19za2lwd3MgCT0gMUwgPDwgMTIsCisgICAgICBfU191bml0YnVmIAk9IDFMIDw8IDEzLAorICAgICAgX1NfdXBwZXJjYXNlIAk9IDFMIDw8IDE0LAorICAgICAgX1NfYWRqdXN0ZmllbGQgCT0gX1NfbGVmdCB8IF9TX3JpZ2h0IHwgX1NfaW50ZXJuYWwsCisgICAgICBfU19iYXNlZmllbGQgCT0gX1NfZGVjIHwgX1Nfb2N0IHwgX1NfaGV4LAorICAgICAgX1NfZmxvYXRmaWVsZCAJPSBfU19zY2llbnRpZmljIHwgX1NfZml4ZWQsCisgICAgICBfU19pb3NfZm10ZmxhZ3NfZW5kID0gMUwgPDwgMTYgCisgICAgfTsKKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIF9Jb3NfRm10ZmxhZ3MKKyAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKKyAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBfSW9zX0ZtdGZsYWdzCisgIG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCisgIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgX0lvc19GbXRmbGFncworICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQorICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIF9Jb3NfRm10ZmxhZ3MKKyAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQorICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CisKKyAgaW5saW5lIGNvbnN0IF9Jb3NfRm10ZmxhZ3MmCisgIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CisKKyAgaW5saW5lIGNvbnN0IF9Jb3NfRm10ZmxhZ3MmCisgIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CisKKyAgaW5saW5lIGNvbnN0IF9Jb3NfRm10ZmxhZ3MmCisgIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CisKKworICBlbnVtIF9Jb3NfT3Blbm1vZGUgCisgICAgeyAKKyAgICAgIF9TX2FwcCAJCT0gMUwgPDwgMCwKKyAgICAgIF9TX2F0ZSAJCT0gMUwgPDwgMSwKKyAgICAgIF9TX2JpbiAJCT0gMUwgPDwgMiwKKyAgICAgIF9TX2luIAkJPSAxTCA8PCAzLAorICAgICAgX1Nfb3V0IAkJPSAxTCA8PCA0LAorICAgICAgX1NfdHJ1bmMgCQk9IDFMIDw8IDUsCisgICAgICBfU19pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYgCisgICAgfTsKKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIF9Jb3NfT3Blbm1vZGUKKyAgb3BlcmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBfSW9zX09wZW5tb2RlCisgIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCisgIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgX0lvc19PcGVubW9kZQorICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQorICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIF9Jb3NfT3Blbm1vZGUKKyAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQorICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CisKKyAgaW5saW5lIGNvbnN0IF9Jb3NfT3Blbm1vZGUmCisgIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CisKKyAgaW5saW5lIGNvbnN0IF9Jb3NfT3Blbm1vZGUmCisgIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CisKKyAgaW5saW5lIGNvbnN0IF9Jb3NfT3Blbm1vZGUmCisgIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CisKKworICBlbnVtIF9Jb3NfSW9zdGF0ZQorICAgIHsgCisgICAgICBfU19nb29kYml0IAkJPSAwLAorICAgICAgX1NfYmFkYml0IAkJPSAxTCA8PCAwLAorICAgICAgX1NfZW9mYml0IAkJPSAxTCA8PCAxLAorICAgICAgX1NfZmFpbGJpdAkJPSAxTCA8PCAyLAorICAgICAgX1NfaW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgCisgICAgfTsKKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIF9Jb3NfSW9zdGF0ZQorICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKKyAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIF9Jb3NfSW9zdGF0ZQorICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKKyAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIF9Jb3NfSW9zdGF0ZQorICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKKyAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIF9Jb3NfSW9zdGF0ZQorICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKKyAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CisKKyAgaW5saW5lIGNvbnN0IF9Jb3NfSW9zdGF0ZSYKKyAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CisKKyAgaW5saW5lIGNvbnN0IF9Jb3NfSW9zdGF0ZSYKKyAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKKyAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CisKKyAgaW5saW5lIGNvbnN0ICBfSW9zX0lvc3RhdGUmCisgIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCisgIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQorCisKKyAgZW51bSBfSW9zX1NlZWtkaXIgCisgICAgeyAKKyAgICAgIF9TX2JlZyA9IDAsCisgICAgICBfU19jdXIgPSBfR0xJQkNYWF9TVERJT19TRUVLX0NVUiwKKyAgICAgIF9TX2VuZCA9IF9HTElCQ1hYX1NURElPX1NFRUtfRU5ELAorICAgICAgX1NfaW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgCisgICAgfTsKKworICAvLyAyNy40LjIgIENsYXNzIGlvc19iYXNlCisgIC8qKgorICAgKiAgQGJyaWVmICBUaGUgYmFzZSBvZiB0aGUgSS9PIGNsYXNzIGhpZXJhcmNoeS4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBUaGlzIGNsYXNzIGRlZmluZXMgZXZlcnl0aGluZyB0aGF0IGNhbiBiZSBkZWZpbmVkIGFib3V0IEkvTyB0aGF0IGRvZXMKKyAgICogIG5vdCBkZXBlbmQgb24gdGhlIHR5cGUgb2YgY2hhcmFjdGVycyBiZWluZyBpbnB1dCBvciBvdXRwdXQuICBNb3N0CisgICAqICBwZW9wbGUgd2lsbCBvbmx5IHNlZSBAYyBpb3NfYmFzZSB3aGVuIHRoZXkgbmVlZCB0byBzcGVjaWZ5IHRoZSBmdWxsCisgICAqICBuYW1lIG9mIHRoZSB2YXJpb3VzIEkvTyBmbGFncyAoZS5nLiwgdGhlIG9wZW5tb2RlcykuCisgICovCisgIGNsYXNzIGlvc19iYXNlCisgIHsKKyAgcHVibGljOgorCisgICAgLyoqIAorICAgICAqICBAYnJpZWYgVGhlc2UgYXJlIHRocm93biB0byBpbmRpY2F0ZSBwcm9ibGVtcyB3aXRoIGlvLgorICAgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAgICoKKyAgICAgKiAgMjcuNC4yLjEuMSAgQ2xhc3MgaW9zX2Jhc2U6OmZhaWx1cmUKKyAgICAgKi8KKyAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0OC4gIFVzZSBvZiBub24tZXhpc3RlbnQgZXhjZXB0aW9uIGNvbnN0cnVjdG9yCisgICAgICBleHBsaWNpdAorICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOworCisgICAgICAvLyBUaGlzIGRlY2xhcmF0aW9uIGlzIG5vdCB1c2VsZXNzOgorICAgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTQuMy4yL2djYy9WYWd1ZS1MaW5rYWdlLmh0bWwKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsKKworICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgorICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgc3RyaW5nIF9NX21zZzsKKyAgICB9OworCisgICAgLy8gMjcuNC4yLjEuMiAgVHlwZSBpb3NfYmFzZTo6Zm10ZmxhZ3MKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmIFRoaXMgaXMgYSBiaXRtYXNrIHR5cGUuCisgICAgICoKKyAgICAgKiAgQGMgQGEgX0lvc19GbXRmbGFncyBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLCBidXQgaXQgaXMgdmFsaWQgdG8KKyAgICAgKiAgcGVyZm9ybSBiaXR3aXNlIG9wZXJhdGlvbnMgb24gdGhlc2UgdmFsdWVzIGFuZCBleHBlY3QgdGhlIFJpZ2h0CisgICAgICogIFRoaW5nIHRvIGhhcHBlbi4gIERlZmluZWQgb2JqZWN0cyBvZiB0eXBlIGZtdGZsYWdzIGFyZToKKyAgICAgKiAgLSBib29sYWxwaGEKKyAgICAgKiAgLSBkZWMKKyAgICAgKiAgLSBmaXhlZAorICAgICAqICAtIGhleAorICAgICAqICAtIGludGVybmFsCisgICAgICogIC0gbGVmdAorICAgICAqICAtIG9jdAorICAgICAqICAtIHJpZ2h0CisgICAgICogIC0gc2NpZW50aWZpYworICAgICAqICAtIHNob3diYXNlCisgICAgICogIC0gc2hvd3BvaW50CisgICAgICogIC0gc2hvd3BvcworICAgICAqICAtIHNraXB3cworICAgICAqICAtIHVuaXRidWYKKyAgICAgKiAgLSB1cHBlcmNhc2UKKyAgICAgKiAgLSBhZGp1c3RmaWVsZAorICAgICAqICAtIGJhc2VmaWVsZAorICAgICAqICAtIGZsb2F0ZmllbGQKKyAgICAqLworICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKKworICAgIC8vLyBJbnNlcnQvZXh0cmFjdCBAYyBib29sIGluIGFscGhhYmV0aWMgcmF0aGVyIHRoYW4gbnVtZXJpYyBmb3JtYXQuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9ICAgX1NfYm9vbGFscGhhOworCisgICAgLy8vIENvbnZlcnRzIGludGVnZXIgaW5wdXQgb3IgZ2VuZXJhdGVzIGludGVnZXIgb3V0cHV0IGluIGRlY2ltYWwgYmFzZS4KKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gICAgICAgICBfU19kZWM7CisKKyAgICAvLy8gR2VuZXJhdGUgZmxvYXRpbmctcG9pbnQgb3V0cHV0IGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9ICAgICAgIF9TX2ZpeGVkOworCisgICAgLy8vIENvbnZlcnRzIGludGVnZXIgaW5wdXQgb3IgZ2VuZXJhdGVzIGludGVnZXIgb3V0cHV0IGluIGhleGFkZWNpbWFsIGJhc2UuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGhleCA9ICAgICAgICAgX1NfaGV4OworCisgICAgLy8vIEFkZHMgZmlsbCBjaGFyYWN0ZXJzIGF0IGEgZGVzaWduYXRlZCBpbnRlcm5hbCBwb2ludCBpbiBjZXJ0YWluCisgICAgLy8vIGdlbmVyYXRlZCBvdXRwdXQsIG9yIGlkZW50aWNhbCB0byBAYyByaWdodCBpZiBubyBzdWNoIHBvaW50IGlzCisgICAgLy8vIGRlc2lnbmF0ZWQuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gICAgX1NfaW50ZXJuYWw7CisKKyAgICAvLy8gQWRkcyBmaWxsIGNoYXJhY3RlcnMgb24gdGhlIHJpZ2h0IChmaW5hbCBwb3NpdGlvbnMpIG9mIGNlcnRhaW4KKyAgICAvLy8gZ2VuZXJhdGVkIG91dHB1dC4gIChJLmUuLCB0aGUgdGhpbmcgeW91IHByaW50IGlzIGZsdXNoIGxlZnQuKQorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gICAgICAgIF9TX2xlZnQ7CisKKyAgICAvLy8gQ29udmVydHMgaW50ZWdlciBpbnB1dCBvciBnZW5lcmF0ZXMgaW50ZWdlciBvdXRwdXQgaW4gb2N0YWwgYmFzZS4KKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gICAgICAgICBfU19vY3Q7CisKKyAgICAvLy8gQWRkcyBmaWxsIGNoYXJhY3RlcnMgb24gdGhlIGxlZnQgKGluaXRpYWwgcG9zaXRpb25zKSBvZiBjZXJ0YWluCisgICAgLy8vIGdlbmVyYXRlZCBvdXRwdXQuICAoSS5lLiwgdGhlIHRoaW5nIHlvdSBwcmludCBpcyBmbHVzaCByaWdodC4pCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gICAgICAgX1NfcmlnaHQ7CisKKyAgICAvLy8gR2VuZXJhdGVzIGZsb2F0aW5nLXBvaW50IG91dHB1dCBpbiBzY2llbnRpZmljIG5vdGF0aW9uLgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmljID0gIF9TX3NjaWVudGlmaWM7CisKKyAgICAvLy8gR2VuZXJhdGVzIGEgcHJlZml4IGluZGljYXRpbmcgdGhlIG51bWVyaWMgYmFzZSBvZiBnZW5lcmF0ZWQgaW50ZWdlcgorICAgIC8vLyBvdXRwdXQuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gICAgX1Nfc2hvd2Jhc2U7CisKKyAgICAvLy8gR2VuZXJhdGVzIGEgZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIgdW5jb25kaXRpb25hbGx5IGluIGdlbmVyYXRlZAorICAgIC8vLyBmbG9hdGluZy1wb2ludCBvdXRwdXQuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9ICAgX1Nfc2hvd3BvaW50OworCisgICAgLy8vIEdlbmVyYXRlcyBhICsgc2lnbiBpbiBub24tbmVnYXRpdmUgZ2VuZXJhdGVkIG51bWVyaWMgb3V0cHV0LgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gICAgIF9TX3Nob3dwb3M7CisKKyAgICAvLy8gU2tpcHMgbGVhZGluZyB3aGl0ZSBzcGFjZSBiZWZvcmUgY2VydGFpbiBpbnB1dCBvcGVyYXRpb25zLgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSAgICAgIF9TX3NraXB3czsKKworICAgIC8vLyBGbHVzaGVzIG91dHB1dCBhZnRlciBlYWNoIG91dHB1dCBvcGVyYXRpb24uCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSAgICAgX1NfdW5pdGJ1ZjsKKworICAgIC8vLyBSZXBsYWNlcyBjZXJ0YWluIGxvd2VyY2FzZSBsZXR0ZXJzIHdpdGggdGhlaXIgdXBwZXJjYXNlIGVxdWl2YWxlbnRzCisgICAgLy8vIGluIGdlbmVyYXRlZCBvdXRwdXQuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9ICAgX1NfdXBwZXJjYXNlOworCisgICAgLy8vIEEgbWFzayBvZiBsZWZ0fHJpZ2h0fGludGVybmFsLiAgVXNlZnVsIGZvciB0aGUgMi1hcmcgZm9ybSBvZiBAYyBzZXRmLgorICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IF9TX2FkanVzdGZpZWxkOworCisgICAgLy8vIEEgbWFzayBvZiBkZWN8b2N0fGhleC4gIFVzZWZ1bCBmb3IgdGhlIDItYXJnIGZvcm0gb2YgQGMgc2V0Zi4KKyAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gICBfU19iYXNlZmllbGQ7CisKKyAgICAvLy8gQSBtYXNrIG9mIHNjaWVudGlmaWN8Zml4ZWQuICBVc2VmdWwgZm9yIHRoZSAyLWFyZyBmb3JtIG9mIEBjIHNldGYuCisgICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSAgX1NfZmxvYXRmaWVsZDsKKworICAgIC8vIDI3LjQuMi4xLjMgIFR5cGUgaW9zX2Jhc2U6Omlvc3RhdGUKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmIFRoaXMgaXMgYSBiaXRtYXNrIHR5cGUuCisgICAgICoKKyAgICAgKiAgQGMgQGEgX0lvc19Jb3N0YXRlIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQsIGJ1dCBpdCBpcyB2YWxpZCB0bworICAgICAqICBwZXJmb3JtIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiB0aGVzZSB2YWx1ZXMgYW5kIGV4cGVjdCB0aGUgUmlnaHQKKyAgICAgKiAgVGhpbmcgdG8gaGFwcGVuLiAgRGVmaW5lZCBvYmplY3RzIG9mIHR5cGUgaW9zdGF0ZSBhcmU6CisgICAgICogIC0gYmFkYml0CisgICAgICogIC0gZW9mYml0CisgICAgICogIC0gZmFpbGJpdAorICAgICAqICAtIGdvb2RiaXQKKyAgICAqLworICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7CisKKyAgICAvLy8gSW5kaWNhdGVzIGEgbG9zcyBvZiBpbnRlZ3JpdHkgaW4gYW4gaW5wdXQgb3Igb3V0cHV0IHNlcXVlbmNlIChzdWNoCisgICAgLy8vIGFzIGFuIGlycmVjb3ZlcmFibGUgcmVhZCBlcnJvciBmcm9tIGEgZmlsZSkuCisgICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0JX1NfYmFkYml0OworCisgICAgLy8vIEluZGljYXRlcyB0aGF0IGFuIGlucHV0IG9wZXJhdGlvbiByZWFjaGVkIHRoZSBlbmQgb2YgYW4gaW5wdXQgc2VxdWVuY2UuCisgICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0JX1NfZW9mYml0OworCisgICAgLy8vIEluZGljYXRlcyB0aGF0IGFuIGlucHV0IG9wZXJhdGlvbiBmYWlsZWQgdG8gcmVhZCB0aGUgZXhwZWN0ZWQKKyAgICAvLy8gY2hhcmFjdGVycywgb3IgdGhhdCBhbiBvdXRwdXQgb3BlcmF0aW9uIGZhaWxlZCB0byBnZW5lcmF0ZSB0aGUKKyAgICAvLy8gZGVzaXJlZCBjaGFyYWN0ZXJzLgorICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPQlfU19mYWlsYml0OworCisgICAgLy8vIEluZGljYXRlcyBhbGwgaXMgd2VsbC4KKyAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0JX1NfZ29vZGJpdDsKKworICAgIC8vIDI3LjQuMi4xLjQgIFR5cGUgaW9zX2Jhc2U6Om9wZW5tb2RlCisgICAgLyoqCisgICAgICogIEBicmllZiBUaGlzIGlzIGEgYml0bWFzayB0eXBlLgorICAgICAqCisgICAgICogIEBjIEBhIF9Jb3NfT3Blbm1vZGUgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCwgYnV0IGl0IGlzIHZhbGlkIHRvCisgICAgICogIHBlcmZvcm0gYml0d2lzZSBvcGVyYXRpb25zIG9uIHRoZXNlIHZhbHVlcyBhbmQgZXhwZWN0IHRoZSBSaWdodAorICAgICAqICBUaGluZyB0byBoYXBwZW4uICBEZWZpbmVkIG9iamVjdHMgb2YgdHlwZSBvcGVubW9kZSBhcmU6CisgICAgICogIC0gYXBwCisgICAgICogIC0gYXRlCisgICAgICogIC0gYmluYXJ5CisgICAgICogIC0gaW4KKyAgICAgKiAgLSBvdXQKKyAgICAgKiAgLSB0cnVuYworICAgICovCisgICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOworCisgICAgLy8vIFNlZWsgdG8gZW5kIGJlZm9yZSBlYWNoIHdyaXRlLgorICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPQkJX1NfYXBwOworCisgICAgLy8vIE9wZW4gYW5kIHNlZWsgdG8gZW5kIGltbWVkaWF0ZWx5IGFmdGVyIG9wZW5pbmcuCisgICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9CQlfU19hdGU7CisKKyAgICAvLy8gUGVyZm9ybSBpbnB1dCBhbmQgb3V0cHV0IGluIGJpbmFyeSBtb2RlIChhcyBvcHBvc2VkIHRvIHRleHQgbW9kZSkuCisgICAgLy8vIFRoaXMgaXMgcHJvYmFibHkgbm90IHdoYXQgeW91IHRoaW5rIGl0IGlzOyBzZWUKKyAgICAvLy8gaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQxMWNoMjdzMDIuaHRtbAorICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkgPQlfU19iaW47CisKKyAgICAvLy8gT3BlbiBmb3IgaW5wdXQuICBEZWZhdWx0IGZvciBAYyBpZnN0cmVhbSBhbmQgZnN0cmVhbS4KKyAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPQkJX1NfaW47CisKKyAgICAvLy8gT3BlbiBmb3Igb3V0cHV0LiAgRGVmYXVsdCBmb3IgQGMgb2ZzdHJlYW0gYW5kIGZzdHJlYW0uCisgICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9CQlfU19vdXQ7CisKKyAgICAvLy8gT3BlbiBmb3IgaW5wdXQuICBEZWZhdWx0IGZvciBAYyBvZnN0cmVhbS4KKyAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPQlfU190cnVuYzsKKworICAgIC8vIDI3LjQuMi4xLjUgIFR5cGUgaW9zX2Jhc2U6OnNlZWtkaXIKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmIFRoaXMgaXMgYW4gZW51bWVyYXRlZCB0eXBlLgorICAgICAqCisgICAgICogIEBjIEBhIF9Jb3NfU2Vla2RpciBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLiAgRGVmaW5lZCB2YWx1ZXMKKyAgICAgKiAgb2YgdHlwZSBzZWVrZGlyIGFyZToKKyAgICAgKiAgLSBiZWcKKyAgICAgKiAgLSBjdXIsIGVxdWl2YWxlbnQgdG8gQGMgU0VFS19DVVIgaW4gdGhlIEMgc3RhbmRhcmQgbGlicmFyeS4KKyAgICAgKiAgLSBlbmQsIGVxdWl2YWxlbnQgdG8gQGMgU0VFS19FTkQgaW4gdGhlIEMgc3RhbmRhcmQgbGlicmFyeS4KKyAgICAqLworICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7CisKKyAgICAvLy8gUmVxdWVzdCBhIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLgorICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9CQlfU19iZWc7CisKKyAgICAvLy8gUmVxdWVzdCBhIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIHRoZSBzZXF1ZW5jZS4KKyAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPQkJX1NfY3VyOworCisgICAgLy8vIFJlcXVlc3QgYSBzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgc2VxdWVuY2UuCisgICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0JCV9TX2VuZDsKKworICAgIC8vIEFubmV4IEQuNgorICAgIHR5cGVkZWYgaW50IGlvX3N0YXRlOworICAgIHR5cGVkZWYgaW50IG9wZW5fbW9kZTsKKyAgICB0eXBlZGVmIGludCBzZWVrX2RpcjsKKworICAgIHR5cGVkZWYgc3RkOjpzdHJlYW1wb3Mgc3RyZWFtcG9zOworICAgIHR5cGVkZWYgc3RkOjpzdHJlYW1vZmYgc3RyZWFtb2ZmOworCisgICAgLy8gQ2FsbGJhY2tzOworICAgIC8qKgorICAgICAqICBAYnJpZWYgIFRoZSBzZXQgb2YgZXZlbnRzIHRoYXQgbWF5IGJlIHBhc3NlZCB0byBhbiBldmVudCBjYWxsYmFjay4KKyAgICAgKgorICAgICAqICBlcmFzZV9ldmVudCBpcyB1c2VkIGR1cmluZyB+aW9zKCkgYW5kIGNvcHlmbXQoKS4gIGltYnVlX2V2ZW50IGlzIHVzZWQKKyAgICAgKiAgZHVyaW5nIGltYnVlKCkuICBjb3B5Zm10X2V2ZW50IGlzIHVzZWQgZHVyaW5nIGNvcHlmbXQoKS4KKyAgICAqLworICAgIGVudW0gZXZlbnQKKyAgICB7CisgICAgICBlcmFzZV9ldmVudCwKKyAgICAgIGltYnVlX2V2ZW50LAorICAgICAgY29weWZtdF9ldmVudAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBUaGUgdHlwZSBvZiBhbiBldmVudCBjYWxsYmFjayBmdW5jdGlvbi4KKyAgICAgKiAgQHBhcmFtICBfX2UgIE9uZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZXZlbnQgZW51bS4KKyAgICAgKiAgQHBhcmFtICBfX2IgIFJlZmVyZW5jZSB0byB0aGUgaW9zX2Jhc2Ugb2JqZWN0LgorICAgICAqICBAcGFyYW0gIF9faSAgVGhlIGludGVnZXIgcHJvdmlkZWQgd2hlbiB0aGUgY2FsbGJhY2sgd2FzIHJlZ2lzdGVyZWQuCisgICAgICoKKyAgICAgKiAgRXZlbnQgY2FsbGJhY2tzIGFyZSB1c2VyIGRlZmluZWQgZnVuY3Rpb25zIHRoYXQgZ2V0IGNhbGxlZCBkdXJpbmcKKyAgICAgKiAgc2V2ZXJhbCBpb3NfYmFzZSBhbmQgYmFzaWNfaW9zIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGltYnVlKCksCisgICAgICogIGNvcHlmbXQoKSwgYW5kIH5pb3MoKS4KKyAgICAqLworICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQgX19lLCBpb3NfYmFzZSYgX19iLCBpbnQgX19pKTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIEFkZCB0aGUgY2FsbGJhY2sgX19mbiB3aXRoIHBhcmFtZXRlciBfX2luZGV4LgorICAgICAqICBAcGFyYW0gIF9fZm4gIFRoZSBmdW5jdGlvbiB0byBhZGQuCisgICAgICogIEBwYXJhbSAgX19pbmRleCAgVGhlIGludGVnZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24gd2hlbiBpbnZva2VkLgorICAgICAqCisgICAgICogIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIGFzIGFuIGV2ZW50IGNhbGxiYWNrIHdpdGggYW4gaW50ZWdlciBwYXJhbWV0ZXIgdG8KKyAgICAgKiAgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB3aGVuIGludm9rZWQuICBNdWx0aXBsZSBjb3BpZXMgb2YgdGhlCisgICAgICogIGZ1bmN0aW9uIGFyZSBhbGxvd2VkLiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIGNhbGxiYWNrcywgdGhleSBhcmUKKyAgICAgKiAgaW52b2tlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHJlZ2lzdGVyZWQuCisgICAgKi8KKyAgICB2b2lkCisgICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOworCisgIHByb3RlY3RlZDoKKyAgICBzdHJlYW1zaXplCQlfTV9wcmVjaXNpb247CisgICAgc3RyZWFtc2l6ZQkJX01fd2lkdGg7CisgICAgZm10ZmxhZ3MJCV9NX2ZsYWdzOworICAgIGlvc3RhdGUJCV9NX2V4Y2VwdGlvbjsKKyAgICBpb3N0YXRlCQlfTV9zdHJlYW1idWZfc3RhdGU7CisKKyAgICAvLyAyNy40LjIuNiAgTWVtYmVycyBmb3IgY2FsbGJhY2tzCisgICAgLy8gMjcuNC4yLjYgIGlvc19iYXNlIGNhbGxiYWNrcworICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAorICAgIHsKKyAgICAgIC8vIERhdGEgTWVtYmVycworICAgICAgX0NhbGxiYWNrX2xpc3QqCQlfTV9uZXh0OworICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrCV9NX2ZuOworICAgICAgaW50CQkJX01faW5kZXg7CisgICAgICBfQXRvbWljX3dvcmQJCV9NX3JlZmNvdW50OyAgLy8gMCBtZWFucyBvbmUgcmVmZXJlbmNlLgorCisgICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsCisJCSAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCisgICAgICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7IF9fZ251X2N4eDo6X19hdG9taWNfYWRkX2Rpc3BhdGNoKCZfTV9yZWZjb3VudCwgMSk7IH0KKworICAgICAgLy8gMCA9PiBPSyB0byBkZWxldGUuCisgICAgICBpbnQKKyAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSAKKyAgICAgIHsKKyAgICAgICAgLy8gQmUgcmFjZS1kZXRlY3Rvci1mcmllbmRseS4gIEZvciBtb3JlIGluZm8gc2VlIGJpdHMvYysrY29uZmlnLgorICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19CRUZPUkUoJl9NX3JlZmNvdW50KTsKKyAgICAgICAgaW50IF9fcmVzID0gX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGRfZGlzcGF0Y2goJl9NX3JlZmNvdW50LCAtMSk7CisgICAgICAgIGlmIChfX3JlcyA9PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIF9HTElCQ1hYX1NZTkNIUk9OSVpBVElPTl9IQVBQRU5TX0FGVEVSKCZfTV9yZWZjb3VudCk7CisgICAgICAgICAgfQorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisgICAgfTsKKworICAgICBfQ2FsbGJhY2tfbGlzdCoJX01fY2FsbGJhY2tzOworCisgICAgdm9pZAorICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7CisKKyAgICB2b2lkCisgICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCkgdGhyb3coKTsKKworICAgIC8vIDI3LjQuMi41ICBNZW1iZXJzIGZvciBpd29yZC9wd29yZCBzdG9yYWdlCisgICAgc3RydWN0IF9Xb3JkcworICAgIHsKKyAgICAgIHZvaWQqCV9NX3B3b3JkOworICAgICAgbG9uZwlfTV9pd29yZDsKKyAgICAgIF9Xb3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQorICAgIH07CisKKyAgICAvLyBPbmx5IGZvciBmYWlsZWQgaXdvcmQvcHdvcmQgY2FsbHMuCisgICAgX1dvcmRzCQlfTV93b3JkX3plcm87CisKKyAgICAvLyBHdWFyYW50ZWVkIHN0b3JhZ2UuCisgICAgLy8gVGhlIGZpcnN0IDUgaXdvcmQgYW5kIHB3b3JkIHNsb3RzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLgorICAgIGVudW0geyBfU19sb2NhbF93b3JkX3NpemUgPSA4IH07CisgICAgX1dvcmRzCQlfTV9sb2NhbF93b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CisKKyAgICAvLyBBbGxvY2F0ZWQgc3RvcmFnZS4KKyAgICBpbnQJCQlfTV93b3JkX3NpemU7CisgICAgX1dvcmRzKgkJX01fd29yZDsKKworICAgIF9Xb3JkcyYKKyAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4LCBib29sIF9faXdvcmQpOworCisgICAgLy8gTWVtYmVycyBmb3IgbG9jYWxlIGFuZCBsb2NhbGUgY2FjaGluZy4KKyAgICBsb2NhbGUJCV9NX2lvc19sb2NhbGU7CisKKyAgICB2b2lkCisgICAgX01faW5pdCgpIHRocm93KCk7CisKKyAgcHVibGljOgorCisgICAgLy8gMjcuNC4yLjEuNiAgQ2xhc3MgaW9zX2Jhc2U6OkluaXQKKyAgICAvLyBVc2VkIHRvIGluaXRpYWxpemUgc3RhbmRhcmQgc3RyZWFtcy4gSW4gdGhlb3J5LCBnKysgY291bGQgdXNlCisgICAgLy8gLWZpbml0LXByaW9yaXR5IHRvIG9yZGVyIHRoaXMgc3R1ZmYgY29ycmVjdGx5IHdpdGhvdXQgZ29pbmcKKyAgICAvLyB0aHJvdWdoIHRoZXNlIG1hY2hpbmF0aW9ucy4KKyAgICBjbGFzcyBJbml0CisgICAgeworICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOworICAgIHB1YmxpYzoKKyAgICAgIEluaXQoKTsKKyAgICAgIH5Jbml0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgc3RhdGljIF9BdG9taWNfd29yZAlfU19yZWZjb3VudDsKKyAgICAgIHN0YXRpYyBib29sCQlfU19zeW5jZWRfd2l0aF9zdGRpbzsKKyAgICB9OworCisgICAgLy8gWzI3LjQuMi4yXSBmbXRmbGFncyBzdGF0ZSBmdW5jdGlvbnMKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBBY2Nlc3MgdG8gZm9ybWF0IGZsYWdzLgorICAgICAqICBAcmV0dXJuICBUaGUgZm9ybWF0IGNvbnRyb2wgZmxhZ3MgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dC4KKyAgICAqLworICAgIGZtdGZsYWdzCisgICAgZmxhZ3MoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2ZsYWdzOyB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBTZXR0aW5nIG5ldyBmb3JtYXQgZmxhZ3MgYWxsIGF0IG9uY2UuCisgICAgICogIEBwYXJhbSAgX19mbXRmbCAgVGhlIG5ldyBmbGFncyB0byBzZXQuCisgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91cyBmb3JtYXQgY29udHJvbCBmbGFncy4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIG92ZXJ3cml0ZXMgYWxsIHRoZSBmb3JtYXQgZmxhZ3Mgd2l0aCBAYSBfX2ZtdGZsLgorICAgICovCisgICAgZm10ZmxhZ3MKKyAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQorICAgIHsKKyAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CisgICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CisgICAgICByZXR1cm4gX19vbGQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiAgU2V0dGluZyBuZXcgZm9ybWF0IGZsYWdzLgorICAgICAqICBAcGFyYW0gIF9fZm10ZmwgIEFkZGl0aW9uYWwgZmxhZ3MgdG8gc2V0LgorICAgICAqICBAcmV0dXJuICBUaGUgcHJldmlvdXMgZm9ybWF0IGNvbnRyb2wgZmxhZ3MuCisgICAgICoKKyAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIGFkZGl0aW9uYWwgZmxhZ3MgaW4gZm9ybWF0IGNvbnRyb2wuICBGbGFncyB0aGF0CisgICAgICogIHdlcmUgcHJldmlvdXNseSBzZXQgcmVtYWluIHNldC4KKyAgICAqLworICAgIGZtdGZsYWdzCisgICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQorICAgIHsKKyAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CisgICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOworICAgICAgcmV0dXJuIF9fb2xkOworICAgIH0KKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIFNldHRpbmcgbmV3IGZvcm1hdCBmbGFncy4KKyAgICAgKiAgQHBhcmFtICBfX2ZtdGZsICBBZGRpdGlvbmFsIGZsYWdzIHRvIHNldC4KKyAgICAgKiAgQHBhcmFtICBfX21hc2sgIFRoZSBmbGFncyBtYXNrIGZvciBAYSBmbXRmbC4KKyAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIGZvcm1hdCBjb250cm9sIGZsYWdzLgorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gY2xlYXJzIEBhIG1hc2sgaW4gdGhlIGZvcm1hdCBmbGFncywgdGhlbiBzZXRzCisgICAgICogIEBhIGZtdGZsIEBjICYgQGEgbWFzay4gIEFuIGV4YW1wbGUgbWFzayBpcyBAYyBpb3NfYmFzZTo6YWRqdXN0ZmllbGQuCisgICAgKi8KKyAgICBmbXRmbGFncworICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNrKQorICAgIHsKKyAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CisgICAgICBfTV9mbGFncyAmPSB+X19tYXNrOworICAgICAgX01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOworICAgICAgcmV0dXJuIF9fb2xkOworICAgIH0KKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIENsZWFyaW5nIGZvcm1hdCBmbGFncy4KKyAgICAgKiAgQHBhcmFtICBfX21hc2sgIFRoZSBmbGFncyB0byB1bnNldC4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIGNsZWFycyBAYSBfX21hc2sgaW4gdGhlIGZvcm1hdCBmbGFncy4KKyAgICAqLworICAgIHZvaWQKKyAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKQorICAgIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiAgRmxhZ3MgYWNjZXNzLgorICAgICAqICBAcmV0dXJuICBUaGUgcHJlY2lzaW9uIHRvIGdlbmVyYXRlIG9uIGNlcnRhaW4gb3V0cHV0IG9wZXJhdGlvbnMuCisgICAgICoKKyAgICAgKiAgQmUgY2FyZWZ1bCBpZiB5b3UgdHJ5IHRvIGdpdmUgYSBkZWZpbml0aW9uIG9mIEBhIHByZWNpc2lvbiBoZXJlOyBzZWUKKyAgICAgKiAgRFIgMTg5LgorICAgICovCisgICAgc3RyZWFtc2l6ZQorICAgIHByZWNpc2lvbigpIGNvbnN0CisgICAgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDaGFuZ2luZyBmbGFncy4KKyAgICAgKiAgQHBhcmFtICBfX3ByZWMgIFRoZSBuZXcgcHJlY2lzaW9uIHZhbHVlLgorICAgICAqICBAcmV0dXJuICBUaGUgcHJldmlvdXMgdmFsdWUgb2YgcHJlY2lzaW9uKCkuCisgICAgKi8KKyAgICBzdHJlYW1zaXplCisgICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQorICAgIHsKKyAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247CisgICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7CisgICAgICByZXR1cm4gX19vbGQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiAgRmxhZ3MgYWNjZXNzLgorICAgICAqICBAcmV0dXJuICBUaGUgbWluaW11bSBmaWVsZCB3aWR0aCB0byBnZW5lcmF0ZSBvbiBvdXRwdXQgb3BlcmF0aW9ucy4KKyAgICAgKgorICAgICAqICA8ZW0+TWluaW11bSBmaWVsZCB3aWR0aDwvZW0+IHJlZmVycyB0byB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAgKi8KKyAgICBzdHJlYW1zaXplCisgICAgd2lkdGgoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3dpZHRoOyB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDaGFuZ2luZyBmbGFncy4KKyAgICAgKiAgQHBhcmFtICBfX3dpZGUgIFRoZSBuZXcgd2lkdGggdmFsdWUuCisgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91cyB2YWx1ZSBvZiB3aWR0aCgpLgorICAgICovCisgICAgc3RyZWFtc2l6ZQorICAgIHdpZHRoKHN0cmVhbXNpemUgX193aWRlKQorICAgIHsKKyAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKKyAgICAgIF9NX3dpZHRoID0gX193aWRlOworICAgICAgcmV0dXJuIF9fb2xkOworICAgIH0KKworICAgIC8vIFsyNy40LjIuNF0gaW9zX2Jhc2Ugc3RhdGljIG1lbWJlcnMKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBJbnRlcmFjdGlvbiB3aXRoIHRoZSBzdGFuZGFyZCBDIEkvTyBvYmplY3RzLgorICAgICAqICBAcGFyYW0gIF9fc3luYyAgV2hldGhlciB0byBzeW5jaHJvbml6ZSBvciBub3QuCisgICAgICogIEByZXR1cm4gIFRydWUgaWYgdGhlIHN0YW5kYXJkIHN0cmVhbXMgd2VyZSBwcmV2aW91c2x5IHN5bmNocm9uaXplZC4KKyAgICAgKgorICAgICAqICBUaGUgc3luY2hyb25pemF0aW9uIHJlZmVycmVkIHRvIGlzIEBlIG9ubHkgdGhhdCBiZXR3ZWVuIHRoZSBzdGFuZGFyZAorICAgICAqICBDIGZhY2lsaXRpZXMgKGUuZy4sIHN0ZG91dCkgYW5kIHRoZSBzdGFuZGFyZCBDKysgb2JqZWN0cyAoZS5nLiwKKyAgICAgKiAgY291dCkuICBVc2VyLWRlY2xhcmVkIHN0cmVhbXMgYXJlIHVuYWZmZWN0ZWQuICBTZWUKKyAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQxMWNoMjhzMDIuaHRtbAorICAgICovCisgICAgc3RhdGljIGJvb2wKKyAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKKworICAgIC8vIFsyNy40LjIuM10gaW9zX2Jhc2UgbG9jYWxlIGZ1bmN0aW9ucworICAgIC8qKgorICAgICAqICBAYnJpZWYgIFNldHRpbmcgYSBuZXcgbG9jYWxlLgorICAgICAqICBAcGFyYW0gIF9fbG9jICBUaGUgbmV3IGxvY2FsZS4KKyAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIGxvY2FsZS4KKyAgICAgKgorICAgICAqICBTZXRzIHRoZSBuZXcgbG9jYWxlIGZvciB0aGlzIHN0cmVhbSwgYW5kIHRoZW4gaW52b2tlcyBlYWNoIGNhbGxiYWNrCisgICAgICogIHdpdGggaW1idWVfZXZlbnQuCisgICAgKi8KKyAgICBsb2NhbGUKKyAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOworCisgICAgLyoqCisgICAgICogIEBicmllZiAgTG9jYWxlIGFjY2VzcworICAgICAqICBAcmV0dXJuICBBIGNvcHkgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLgorICAgICAqCisgICAgICogIElmIEBjIGltYnVlKGxvYykgaGFzIHByZXZpb3VzbHkgYmVlbiBjYWxsZWQsIHRoZW4gdGhpcyBmdW5jdGlvbgorICAgICAqICByZXR1cm5zIEBjIGxvYy4gIE90aGVyd2lzZSwgaXQgcmV0dXJucyBhIGNvcHkgb2YgQGMgc3RkOjpsb2NhbGUoKSwKKyAgICAgKiAgdGhlIGdsb2JhbCBDKysgbG9jYWxlLgorICAgICovCisgICAgbG9jYWxlCisgICAgZ2V0bG9jKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBMb2NhbGUgYWNjZXNzCisgICAgICogIEByZXR1cm4gIEEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgICAgKgorICAgICAqICBMaWtlIGdldGxvYyBhYm92ZSwgYnV0IHJldHVybnMgYSByZWZlcmVuY2UgaW5zdGVhZCBvZgorICAgICAqICBnZW5lcmF0aW5nIGEgY29weS4KKyAgICAqLworICAgIGNvbnN0IGxvY2FsZSYKKyAgICBfTV9nZXRsb2MoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7IH0KKworICAgIC8vIFsyNy40LjIuNV0gaW9zX2Jhc2Ugc3RvcmFnZSBmdW5jdGlvbnMKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBBY2Nlc3MgdG8gdW5pcXVlIGluZGljZXMuCisgICAgICogIEByZXR1cm4gIEFuIGludGVnZXIgZGlmZmVyZW50IGZyb20gYWxsIHByZXZpb3VzIGNhbGxzLgorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHVuaXF1ZSBpbnRlZ2VyIGV2ZXJ5IHRpbWUgaXQgaXMgY2FsbGVkLiAgSXQKKyAgICAgKiAgY2FuIGJlIHVzZWQgZm9yIGFueSBwdXJwb3NlLCBidXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGJlIGEgdW5pcXVlCisgICAgICogIGluZGV4IGZvciB0aGUgaXdvcmQgYW5kIHB3b3JkIGZ1bmN0aW9ucy4gIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGFuCisgICAgICogIGFwcGxpY2F0aW9uIGNhbGxzIHhhbGxvYyBpbiBvcmRlciB0byBvYnRhaW4gYW4gaW5kZXggaW4gdGhlIGl3b3JkIGFuZAorICAgICAqICBwd29yZCBhcnJheXMgdGhhdCBjYW4gYmUgdXNlZCB3aXRob3V0IGZlYXIgb2YgY29uZmxpY3QuCisgICAgICoKKyAgICAgKiAgVGhlIGltcGxlbWVudGF0aW9uIG1haW50YWlucyBhIHN0YXRpYyB2YXJpYWJsZSB0aGF0IGlzIGluY3JlbWVudGVkIGFuZAorICAgICAqICByZXR1cm5lZCBvbiBlYWNoIGludm9jYXRpb24uICB4YWxsb2MgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gaW5kZXgKKyAgICAgKiAgdGhhdCBpcyBzYWZlIHRvIHVzZSBpbiB0aGUgaXdvcmQgYW5kIHB3b3JkIGFycmF5cy4KKyAgICAqLworICAgIHN0YXRpYyBpbnQKKyAgICB4YWxsb2MoKSB0aHJvdygpOworCisgICAgLyoqCisgICAgICogIEBicmllZiAgQWNjZXNzIHRvIGludGVnZXIgYXJyYXkuCisgICAgICogIEBwYXJhbSAgX19peCAgSW5kZXggaW50byB0aGUgYXJyYXkuCisgICAgICogIEByZXR1cm4gIEEgcmVmZXJlbmNlIHRvIGFuIGludGVnZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleC4KKyAgICAgKgorICAgICAqICBUaGUgaXdvcmQgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIGFuIGFycmF5IG9mIGludGVnZXJzIHRoYXQgY2FuIGJlCisgICAgICogIHVzZWQgZm9yIGFueSBwdXJwb3NlLiAgVGhlIGFycmF5IGdyb3dzIGFzIHJlcXVpcmVkIHRvIGhvbGQgdGhlCisgICAgICogIHN1cHBsaWVkIGluZGV4LiAgQWxsIGludGVnZXJzIGluIHRoZSBhcnJheSBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KKyAgICAgKgorICAgICAqICBUaGUgaW1wbGVtZW50YXRpb24gcmVzZXJ2ZXMgc2V2ZXJhbCBpbmRpY2VzLiAgWW91IHNob3VsZCB1c2UgeGFsbG9jIHRvCisgICAgICogIG9idGFpbiBhbiBpbmRleCB0aGF0IGlzIHNhZmUgdG8gdXNlLiAgQWxzbyBub3RlIHRoYXQgc2luY2UgdGhlIGFycmF5CisgICAgICogIGNhbiBncm93IGR5bmFtaWNhbGx5LCBpdCBpcyBub3Qgc2FmZSB0byBob2xkIG9udG8gdGhlIHJlZmVyZW5jZS4KKyAgICAqLworICAgIGxvbmcmCisgICAgaXdvcmQoaW50IF9faXgpCisgICAgeworICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKKwkJCT8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCwgdHJ1ZSk7CisgICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOworICAgIH0KKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIEFjY2VzcyB0byB2b2lkIHBvaW50ZXIgYXJyYXkuCisgICAgICogIEBwYXJhbSAgX19peCAgSW5kZXggaW50byB0aGUgYXJyYXkuCisgICAgICogIEByZXR1cm4gIEEgcmVmZXJlbmNlIHRvIGEgdm9pZCogYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleC4KKyAgICAgKgorICAgICAqICBUaGUgcHdvcmQgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRoYXQgY2FuIGJlCisgICAgICogIHVzZWQgZm9yIGFueSBwdXJwb3NlLiAgVGhlIGFycmF5IGdyb3dzIGFzIHJlcXVpcmVkIHRvIGhvbGQgdGhlCisgICAgICogIHN1cHBsaWVkIGluZGV4LiAgQWxsIHBvaW50ZXJzIGluIHRoZSBhcnJheSBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KKyAgICAgKgorICAgICAqICBUaGUgaW1wbGVtZW50YXRpb24gcmVzZXJ2ZXMgc2V2ZXJhbCBpbmRpY2VzLiAgWW91IHNob3VsZCB1c2UgeGFsbG9jIHRvCisgICAgICogIG9idGFpbiBhbiBpbmRleCB0aGF0IGlzIHNhZmUgdG8gdXNlLiAgQWxzbyBub3RlIHRoYXQgc2luY2UgdGhlIGFycmF5CisgICAgICogIGNhbiBncm93IGR5bmFtaWNhbGx5LCBpdCBpcyBub3Qgc2FmZSB0byBob2xkIG9udG8gdGhlIHJlZmVyZW5jZS4KKyAgICAqLworICAgIHZvaWQqJgorICAgIHB3b3JkKGludCBfX2l4KQorICAgIHsKKyAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCisJCQk/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgsIGZhbHNlKTsKKyAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7CisgICAgfQorCisgICAgLy8gRGVzdHJ1Y3RvcgorICAgIC8qKgorICAgICAqICBJbnZva2VzIGVhY2ggY2FsbGJhY2sgd2l0aCBlcmFzZV9ldmVudC4gIERlc3Ryb3lzIGxvY2FsIHN0b3JhZ2UuCisgICAgICoKKyAgICAgKiAgTm90ZSB0aGF0IHRoZSBpb3NfYmFzZSBvYmplY3QgZm9yIHRoZSBzdGFuZGFyZCBzdHJlYW1zIG5ldmVyIGdldHMKKyAgICAgKiAgZGVzdHJveWVkLiAgQXMgYSByZXN1bHQsIGFueSBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzdGFuZGFyZAorICAgICAqICBzdHJlYW1zIHdpbGwgbm90IGdldCBpbnZva2VkIHdpdGggZXJhc2VfZXZlbnQgKHVubGVzcyBjb3B5Zm10IGlzCisgICAgICogIHVzZWQpLgorICAgICovCisgICAgdmlydHVhbCB+aW9zX2Jhc2UoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgaW9zX2Jhc2UoKSB0aHJvdyAoKTsKKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIDUwLiAgQ29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBvZiBpb3NfYmFzZQorICBwcml2YXRlOgorICAgIGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CisKKyAgICBpb3NfYmFzZSYKKyAgICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsKKyAgfTsKKworICAvLyBbMjcuNC41LjFdIGZtdGZsYWdzIG1hbmlwdWxhdG9ycworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvcykuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cykuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOworICAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKKyAgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vIFsyNy40LjUuMl0gYWRqdXN0ZmllbGQgbWFuaXB1bGF0b3JzCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOworICAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8gWzI3LjQuNS4zXSBiYXNlZmllbGQgbWFuaXB1bGF0b3JzCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCkuCisgIGlubGluZSBpb3NfYmFzZSYKKyAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKKyAgICByZXR1cm4gX19iYXNlOworICB9CisKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKKyAgeworICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworICAvLy8gQ2FsbHMgYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpLgorICBpbmxpbmUgaW9zX2Jhc2UmCisgIG9jdChpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vIFsyNy40LjUuNF0gZmxvYXRmaWVsZCBtYW5pcHVsYXRvcnMKKyAgLy8vIENhbGxzIGJhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQorICB7CisgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CisgICAgcmV0dXJuIF9fYmFzZTsKKyAgfQorCisgIC8vLyBDYWxscyBiYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKS4KKyAgaW5saW5lIGlvc19iYXNlJgorICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCisgIHsKKyAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOworICAgIHJldHVybiBfX2Jhc2U7CisgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0lPU19CQVNFX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9pc3RyZWFtLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9pc3RyZWFtLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTA3MzAxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2lzdHJlYW0udGNjCkBAIC0wLDAgKzEsMTA5MiBAQAorLy8gaXN0cmVhbSBjbGFzc2VzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2lzdHJlYW0udGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7aXN0cmVhbX0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNi4xICBJbnB1dCBzdHJlYW1zCisvLworCisjaWZuZGVmIF9JU1RSRUFNX1RDQworI2RlZmluZSBfSVNUUkVBTV9UQ0MgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2N4eGFiaV9mb3JjZWQuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CisgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcCkgOiBfTV9vayhmYWxzZSkKKyAgICB7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgaWYgKF9faW4uZ29vZCgpKQorCXsKKwkgIGlmIChfX2luLnRpZSgpKQorCSAgICBfX2luLnRpZSgpLT5mbHVzaCgpOworCSAgaWYgKCFfX25vc2tpcCAmJiBib29sKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQorCSAgICB7CisJICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKwkgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOworCSAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKKworCSAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdCA9IF9fY2hlY2tfZmFjZXQoX19pbi5fTV9jdHlwZSk7CisJICAgICAgd2hpbGUgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKKwkJICAgICAmJiBfX2N0LmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCAKKwkJCQl0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpKQorCQlfX2MgPSBfX3NiLT5zbmV4dGMoKTsKKworCSAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgICAgICAvLyAxOTUuIFNob3VsZCBiYXNpY19pc3RyZWFtOjpzZW50cnkncyBjb25zdHJ1Y3RvciBldmVyCisJICAgICAgLy8gc2V0IGVvZmJpdD8KKwkgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworCSAgICB9CisJfQorCisgICAgICBpZiAoX19pbi5nb29kKCkgJiYgX19lcnIgPT0gaW9zX2Jhc2U6Omdvb2RiaXQpCisJX01fb2sgPSB0cnVlOworICAgICAgZWxzZQorCXsKKwkgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCSAgX19pbi5zZXRzdGF0ZShfX2Vycik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KKyAgICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgICBfTV9leHRyYWN0KF9WYWx1ZVQmIF9fdikKKyAgICAgIHsKKwlzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CisJaWYgKF9fY2VyYikKKwkgIHsKKwkgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgICAgX190cnkKKwkgICAgICB7CisJCWNvbnN0IF9fbnVtX2dldF90eXBlJiBfX25nID0gX19jaGVja19mYWNldCh0aGlzLT5fTV9udW1fZ2V0KTsKKwkJX19uZy5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX192KTsKKwkgICAgICB9CisJICAgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgICB7CisJCXRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCQlfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgICB9CisJICAgIF9fY2F0Y2goLi4uKQorCSAgICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgICAgaWYgKF9fZXJyKQorCSAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwkgIH0KKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxMTguIGJhc2ljX2lzdHJlYW0gdXNlcyBub25leGlzdGVudCBudW1fZ2V0IG1lbWJlciBmdW5jdGlvbnMuCisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgbG9uZyBfX2w7CisJICAgICAgY29uc3QgX19udW1fZ2V0X3R5cGUmIF9fbmcgPSBfX2NoZWNrX2ZhY2V0KHRoaXMtPl9NX251bV9nZXQpOworCSAgICAgIF9fbmcuZ2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CisKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gNjk2LiBpc3RyZWFtOjpvcGVyYXRvcj4+KGludCYpIGJyb2tlbi4KKwkgICAgICBpZiAoX19sIDwgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHNob3J0Pjo6X19taW4pCisJCXsKKwkJICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkJICBfX24gPSBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8c2hvcnQ+OjpfX21pbjsKKwkJfQorCSAgICAgIGVsc2UgaWYgKF9fbCA+IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxzaG9ydD46Ol9fbWF4KQorCQl7CisJCSAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJCSAgX19uID0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHNob3J0Pjo6X19tYXg7CisJCX0KKwkgICAgICBlbHNlCisJCV9fbiA9IHNob3J0KF9fbCk7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCSAgaWYgKF9fZXJyKQorCSAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgb3BlcmF0b3I+PihpbnQmIF9fbikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxMTguIGJhc2ljX2lzdHJlYW0gdXNlcyBub25leGlzdGVudCBudW1fZ2V0IG1lbWJlciBmdW5jdGlvbnMuCisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgbG9uZyBfX2w7CisJICAgICAgY29uc3QgX19udW1fZ2V0X3R5cGUmIF9fbmcgPSBfX2NoZWNrX2ZhY2V0KHRoaXMtPl9NX251bV9nZXQpOworCSAgICAgIF9fbmcuZ2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CisKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gNjk2LiBpc3RyZWFtOjpvcGVyYXRvcj4+KGludCYpIGJyb2tlbi4KKwkgICAgICBpZiAoX19sIDwgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGludD46Ol9fbWluKQorCQl7CisJCSAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJCSAgX19uID0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGludD46Ol9fbWluOworCQl9CisJICAgICAgZWxzZSBpZiAoX19sID4gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGludD46Ol9fbWF4KQorCQl7CisJCSAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CSAgICAgIAorCQkgIF9fbiA9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21heDsKKwkJfQorCSAgICAgIGVsc2UKKwkJX19uID0gaW50KF9fbCk7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCSAgaWYgKF9fZXJyKQorCSAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQorICAgIHsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CisgICAgICBpZiAoX19jZXJiICYmIF9fc2JvdXQpCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIGJvb2wgX19pbmVvZjsKKwkgICAgICBpZiAoIV9fY29weV9zdHJlYW1idWZzX2VvZih0aGlzLT5yZGJ1ZigpLCBfX3Nib3V0LCBfX2luZW9mKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgICAgaWYgKF9faW5lb2YpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOyB9CisJfQorICAgICAgZWxzZSBpZiAoIV9fc2JvdXQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgZ2V0KHZvaWQpCisgICAgeworICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKKwkgICAgICAvLyAyNy42LjEuMSBwYXJhZ3JhcGggMworCSAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQorCQlfTV9nY291bnQgPSAxOworCSAgICAgIGVsc2UKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJfQorICAgICAgaWYgKCFfTV9nY291bnQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuIF9fYzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIGdldChjaGFyX3R5cGUmIF9fYykKKyAgICB7CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgY29uc3QgaW50X3R5cGUgX19jYiA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOworCSAgICAgIC8vIDI3LjYuMS4xIHBhcmFncmFwaCAzCisJICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jYiwgdHJhaXRzX3R5cGU6OmVvZigpKSkKKwkJeworCQkgIF9NX2djb3VudCA9IDE7CisJCSAgX19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2NiKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJfQorICAgICAgaWYgKCFfTV9nY291bnQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCisgICAgeworICAgICAgX01fZ2NvdW50ID0gMDsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOworCSAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworCSAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOworCSAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisKKwkgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgorCQkgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKKwkJICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQorCQl7CisJCSAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworCQkgICsrX01fZ2NvdW50OworCQkgIF9fYyA9IF9fc2ItPnNuZXh0YygpOworCQl9CisJICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJfQorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjQzLiBnZXQgYW5kIGdldGxpbmUgd2hlbiBzZW50cnkgcmVwb3J0cyBmYWlsdXJlLgorICAgICAgaWYgKF9fbiA+IDApCisJKl9fcyA9IGNoYXJfdHlwZSgpOworICAgICAgaWYgKCFfTV9nY291bnQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQorICAgIHsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKKwkgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKwkgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3RoaXNfc2IgPSB0aGlzLT5yZGJ1ZigpOworCSAgICAgIGludF90eXBlIF9fYyA9IF9fdGhpc19zYi0+c2dldGMoKTsKKwkgICAgICBjaGFyX3R5cGUgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKKworCSAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCisJCSAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKQorCQkgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQorCQl7CisJCSAgKytfTV9nY291bnQ7CisJCSAgX19jID0gX190aGlzX3NiLT5zbmV4dGMoKTsKKwkJICBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworCQl9CisJICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJfQorICAgICAgaWYgKCFfTV9nY291bnQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQorICAgIHsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorICAgICAgICB7CisgICAgICAgICAgX190cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CisgICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKKyAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKKworICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgorICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CisgICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKKyAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKyAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygpOworICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisgICAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgICAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisgICAgICAgIH0KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI0My4gZ2V0IGFuZCBnZXRsaW5lIHdoZW4gc2VudHJ5IHJlcG9ydHMgZmFpbHVyZS4KKyAgICAgIGlmIChfX24gPiAwKQorCSpfX3MgPSBjaGFyX3R5cGUoKTsKKyAgICAgIGlmICghX01fZ2NvdW50KQorICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgIGlmIChfX2VycikKKyAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAvLyBXZSBwcm92aWRlIHRocmVlIG92ZXJsb2Fkcywgc2luY2UgdGhlIGZpcnN0IHR3byBhcmUgbXVjaCBzaW1wbGVyCisgIC8vIHRoYW4gdGhlIGdlbmVyYWwgY2FzZS4gQWxzbywgdGhlIGxhdHRlciB0d28gY2FuIHRodXMgYWRvcHQgdGhlCisgIC8vIHNhbWUgImJhdGNoeSIgc3RyYXRlZ3kgdXNlZCBieSBnZXRsaW5lIGFib3ZlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgaWdub3JlKHZvaWQpCisgICAgeworICAgICAgX01fZ2NvdW50ID0gMDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworCSAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOworCisJICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zYnVtcGMoKSwgX19lb2YpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworCSAgICAgIGVsc2UKKwkJX01fZ2NvdW50ID0gMTsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24pCisgICAgeworICAgICAgX01fZ2NvdW50ID0gMDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQorICAgICAgICB7CisgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgICAgICBfX3RyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CisgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisKKwkgICAgICAvLyBOLkIuIE9uIExGUy1lbmFibGVkIHBsYXRmb3JtcyBzdHJlYW1zaXplIGlzIHN0aWxsIDMyIGJpdHMKKwkgICAgICAvLyB3aWRlOiBpZiB3ZSB3YW50IHRvIGltcGxlbWVudCB0aGUgc3RhbmRhcmQgbWFuZGF0ZWQgYmVoYXZpb3IKKwkgICAgICAvLyBmb3IgbiA9PSBtYXgoKSAoc2VlIDI3LjYuMS4zLzI0KSB3ZSBhcmUgYXQgcmlzayBvZiBzaWduZWQKKwkgICAgICAvLyBpbnRlZ2VyIG92ZXJmbG93OiB0aHVzIHRoZXNlIGNvbnRvcnRpb25zLiBBbHNvIG5vdGUgdGhhdCwKKwkgICAgICAvLyBieSBkZWZpbml0aW9uLCB3aGVuIG1vcmUgdGhhbiAyRyBjaGFycyBhcmUgYWN0dWFsbHkgaWdub3JlZCwKKwkgICAgICAvLyBfTV9nY291bnQgKHRoZSByZXR1cm4gdmFsdWUgb2YgZ2NvdW50LCB0aGF0IGlzKSBjYW5ub3QgYmUKKwkgICAgICAvLyByZWFsbHkgY29ycmVjdCwgYmVpbmcgdW5hdm9pZGFibHkgdG9vIHNtYWxsLgorCSAgICAgIGJvb2wgX19sYXJnZV9pZ25vcmUgPSBmYWxzZTsKKwkgICAgICB3aGlsZSAodHJ1ZSkKKwkJeworCQkgIHdoaWxlIChfTV9nY291bnQgPCBfX24KKwkJCSAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQorCQkgICAgeworCQkgICAgICArK19NX2djb3VudDsKKwkJICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CisJCSAgICB9CisJCSAgaWYgKF9fbiA9PSBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8c3RyZWFtc2l6ZT46Ol9fbWF4CisJCSAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCSAgICB7CisJCSAgICAgIF9NX2djb3VudCA9CisJCQlfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8c3RyZWFtc2l6ZT46Ol9fbWluOworCQkgICAgICBfX2xhcmdlX2lnbm9yZSA9IHRydWU7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgYnJlYWs7CisJCX0KKworCSAgICAgIGlmIChfX2xhcmdlX2lnbm9yZSkKKwkJX01fZ2NvdW50ID0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHN0cmVhbXNpemU+OjpfX21heDsKKworCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgICAgICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisgICAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgICAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisgICAgICAgICAgaWYgKF9fZXJyKQorICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgICB9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCisgICAgeworICAgICAgX01fZ2NvdW50ID0gMDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQorICAgICAgICB7CisgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgICAgICBfX3RyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CisgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisKKwkgICAgICAvLyBTZWUgY29tbWVudCBhYm92ZS4KKwkgICAgICBib29sIF9fbGFyZ2VfaWdub3JlID0gZmFsc2U7CisJICAgICAgd2hpbGUgKHRydWUpCisJCXsKKwkJICB3aGlsZSAoX01fZ2NvdW50IDwgX19uCisJCQkgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorCQkJICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKKwkJICAgIHsKKwkJICAgICAgKytfTV9nY291bnQ7CisJCSAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOworCQkgICAgfQorCQkgIGlmIChfX24gPT0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPHN0cmVhbXNpemU+OjpfX21heAorCQkgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCisJCSAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKKwkJICAgIHsKKwkJICAgICAgX01fZ2NvdW50ID0KKwkJCV9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxzdHJlYW1zaXplPjo6X19taW47CisJCSAgICAgIF9fbGFyZ2VfaWdub3JlID0gdHJ1ZTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBicmVhazsKKwkJfQorCisJICAgICAgaWYgKF9fbGFyZ2VfaWdub3JlKQorCQlfTV9nY291bnQgPSBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8c3RyZWFtc2l6ZT46Ol9fbWF4OworCisgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgICBlbHNlIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkKKwkJeworCQkgIGlmIChfTV9nY291bnQKKwkJICAgICAgPCBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8c3RyZWFtc2l6ZT46Ol9fbWF4KQorCQkgICAgKytfTV9nY291bnQ7CisJCSAgX19zYi0+c2J1bXBjKCk7CisJCX0KKyAgICAgICAgICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisgICAgICAgICAgX19jYXRjaCguLi4pCisgICAgICAgICAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisgICAgICAgICAgaWYgKF9fZXJyKQorICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworICAgICAgICB9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBwZWVrKHZvaWQpCisgICAgeworICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOworICAgICAgX01fZ2NvdW50ID0gMDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNnZXRjKCk7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCSAgaWYgKF9fZXJyKQorCSAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisJfQorICAgICAgcmV0dXJuIF9fYzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIF9NX2djb3VudCA9IDA7CisgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbik7CisJICAgICAgaWYgKF9NX2djb3VudCAhPSBfX24pCisJCV9fZXJyIHw9IChpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cmVhbXNpemUKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgLy8gQ2Fubm90IGNvbXBhcmUgaW50X3R5cGUgd2l0aCBzdHJlYW1zaXplIGdlbmVyaWNhbGx5LgorCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOworCSAgICAgIGlmIChfX251bSA+IDApCisJCV9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgc3RkOjptaW4oX19udW0sIF9fbikpOworCSAgICAgIGVsc2UgaWYgKF9fbnVtID09IC0xKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiBfTV9nY291bnQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNjAuIFdoYXQgaXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24/CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgLy8gQ2xlYXIgZW9mYml0IHBlciBOMzE2OC4KKyAgICAgIHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSAmIH5pb3NfYmFzZTo6ZW9mYml0KTsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworCSAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOworCSAgICAgIGlmICghX19zYgorCQkgIHx8IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zcHV0YmFja2MoX19jKSwgX19lb2YpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6YmFkYml0OworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHVuZ2V0KHZvaWQpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNjAuIFdoYXQgaXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24/CisgICAgICBfTV9nY291bnQgPSAwOworICAgICAgLy8gQ2xlYXIgZW9mYml0IHBlciBOMzE2OC4KKyAgICAgIHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUoKSAmIH5pb3NfYmFzZTo6ZW9mYml0KTsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworCSAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOworCSAgICAgIGlmICghX19zYgorCQkgIHx8IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmJhZGJpdDsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbnQKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHN5bmModm9pZCkKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUjYwLiAgRG8gbm90IGNoYW5nZSBfTV9nY291bnQuCisgICAgICBpbnQgX19yZXQgPSAtMTsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOworCSAgICAgIGlmIChfX3NiKQorCQl7CisJCSAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKKwkJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpiYWRiaXQ7CisJCSAgZWxzZQorCQkgICAgX19yZXQgPSAwOworCQl9CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCSAgaWYgKF9fZXJyKQorCSAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgdGVsbGcodm9pZCkKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUjYwLiAgRG8gbm90IGNoYW5nZSBfTV9nY291bnQuCisgICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCisJCV9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLAorCQkJCQkJICBpb3NfYmFzZTo6aW4pOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzZWVrZyhwb3NfdHlwZSBfX3BvcykKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUjYwLiAgRG8gbm90IGNoYW5nZSBfTV9nY291bnQuCisgICAgICAvLyBDbGVhciBlb2ZiaXQgcGVyIE4zMTY4LgorICAgICAgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpICYgfmlvc19iYXNlOjplb2ZiaXQpOworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCisJCXsKKwkJICAvLyAxMzYuICBzZWVrcCwgc2Vla2cgc2V0dGluZyB3cm9uZyBzdHJlYW1zPworCQkgIGNvbnN0IHBvc190eXBlIF9fcCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsCisJCQkJCQkJCSBpb3NfYmFzZTo6aW4pOworCQkgIAorCQkgIC8vIDEyOS4gIE5lZWQgZXJyb3IgaW5kaWNhdGlvbiBmcm9tIHNlZWtwKCkgYW5kIHNlZWtnKCkKKwkJICBpZiAoX19wID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCisJCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkJfQorCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwkgIGlmIChfX2VycikKKwkgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHNlZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUjYwLiAgRG8gbm90IGNoYW5nZSBfTV9nY291bnQuCisgICAgICAvLyBDbGVhciBlb2ZiaXQgcGVyIE4zMTY4LgorICAgICAgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpICYgfmlvc19iYXNlOjplb2ZiaXQpOworICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCisJCXsKKwkJICAvLyAxMzYuICBzZWVrcCwgc2Vla2cgc2V0dGluZyB3cm9uZyBzdHJlYW1zPworCQkgIGNvbnN0IHBvc190eXBlIF9fcCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAorCQkJCQkJCQkgaW9zX2Jhc2U6OmluKTsKKwkgICAgICAKKwkJICAvLyAxMjkuICBOZWVkIGVycm9yIGluZGljYXRpb24gZnJvbSBzZWVrcCgpIGFuZCBzZWVrZygpCisJCSAgaWYgKF9fcCA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQorCQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJCX0KKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIC8vIDI3LjYuMS4yLjMgQ2hhcmFjdGVyIGV4dHJhY3Rpb24gdGVtcGxhdGVzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CQlfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlICAgICAgICAgX19pbnRfdHlwZTsKKworICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IF9faW50X3R5cGUgX19jYiA9IF9faW4ucmRidWYoKS0+c2J1bXBjKCk7CisJICAgICAgaWYgKCFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2NiLCBfVHJhaXRzOjplb2YoKSkpCisJCV9fYyA9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2NiKTsKKwkgICAgICBlbHNlCisJCV9fZXJyIHw9IChpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICBfX2luLl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyBfX2luLl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIF9faW4uc2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiBfX2luOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKKyAgICB7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgkJX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlCQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4JCQkJX19jdHlwZV90eXBlOworCisgICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CisgICAgICBpZiAoX19jZXJiKQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICAvLyBGaWd1cmUgb3V0IGhvdyBtYW55IGNoYXJhY3RlcnMgdG8gZXh0cmFjdC4KKwkgICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOworCSAgICAgIGlmIChfX251bSA8PSAwKQorCQlfX251bSA9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxzdHJlYW1zaXplPjo6X19tYXg7CisKKwkgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3QgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKKworCSAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CisJICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKKwkgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOworCisJICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAxCisJCSAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCisJCSAgICAgJiYgIV9fY3QuaXMoY3R5cGVfYmFzZTo6c3BhY2UsCisJCQkJIF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpKSkKKwkJeworCQkgICpfX3MrKyA9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOworCQkgICsrX19leHRyYWN0ZWQ7CisJCSAgX19jID0gX19zYi0+c25leHRjKCk7CisJCX0KKwkgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gNjguICBFeHRyYWN0b3JzIGZvciBjaGFyKiBzaG91bGQgc3RvcmUgbnVsbCBhdCBlbmQKKwkgICAgICAqX19zID0gY2hhcl90eXBlKCk7CisJICAgICAgX19pbi53aWR0aCgwKTsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgX19pbi5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgX19pbi5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKyAgICAgIGlmICghX19leHRyYWN0ZWQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgICBpZiAoX19lcnIpCisJX19pbi5zZXRzdGF0ZShfX2Vycik7CisgICAgICByZXR1cm4gX19pbjsKKyAgICB9CisKKyAgLy8gMjcuNi4xLjQgU3RhbmRhcmQgYmFzaWNfaXN0cmVhbSBtYW5pcHVsYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4pCisgICAgeworICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4JCV9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUJCV9faW50X3R5cGU7CisgICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4JCQkJX19jdHlwZV90eXBlOworCisgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3QgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKKyAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKKyAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CisgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisKKyAgICAgIHdoaWxlICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKKwkgICAgICYmIF9fY3QuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpKSkKKwlfX2MgPSBfX3NiLT5zbmV4dGMoKTsKKworICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKKyAgICAgIHJldHVybiBfX2luOworICAgIH0KKworICAvLyBJbmhpYml0IGltcGxpY2l0IGluc3RhbnRpYXRpb25zIGZvciByZXF1aXJlZCBpbnN0YW50aWF0aW9ucywKKyAgLy8gd2hpY2ggYXJlIGRlZmluZWQgdmlhIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIGVsc2V3aGVyZS4KKyNpZiBfR0xJQkNYWF9FWFRFUk5fVEVNUExBVEUKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyKik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXIqKTsKKworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBzaG9ydCYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBpbnQmKTsgIAorICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdChsb25nJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBpc3RyZWFtOjpfTV9leHRyYWN0KHVuc2lnbmVkIGxvbmcmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIGlzdHJlYW06Ol9NX2V4dHJhY3QoYm9vbCYpOworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIGlzdHJlYW06Ol9NX2V4dHJhY3QobG9uZyBsb25nJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBpc3RyZWFtOjpfTV9leHRyYWN0KHVuc2lnbmVkIGxvbmcgbG9uZyYpOworI2VuZGlmCisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBpc3RyZWFtOjpfTV9leHRyYWN0KGZsb2F0Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBpc3RyZWFtOjpfTV9leHRyYWN0KGRvdWJsZSYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdChsb25nIGRvdWJsZSYpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgaXN0cmVhbTo6X01fZXh0cmFjdCh2b2lkKiYpOworCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3N0cmVhbTxjaGFyPjsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIHdzKHdpc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOworCisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd2lzdHJlYW06Ol9NX2V4dHJhY3QodW5zaWduZWQgc2hvcnQmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBpbnQmKTsgIAorICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIHdpc3RyZWFtOjpfTV9leHRyYWN0KGxvbmcmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBsb25nJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd2lzdHJlYW06Ol9NX2V4dHJhY3QoYm9vbCYpOworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdChsb25nIGxvbmcmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdCh1bnNpZ25lZCBsb25nIGxvbmcmKTsKKyNlbmRpZgorICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIHdpc3RyZWFtOjpfTV9leHRyYWN0KGZsb2F0Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd2lzdHJlYW06Ol9NX2V4dHJhY3QoZG91YmxlJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd2lzdHJlYW06Ol9NX2V4dHJhY3QobG9uZyBkb3VibGUmKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiB3aXN0cmVhbTo6X01fZXh0cmFjdCh2b2lkKiYpOworCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PjsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xpc3QudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xpc3QudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTZhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbGlzdC50Y2MKQEAgLTAsMCArMSw0NjkgQEAKKy8vIExpc3QgaW1wbGVtZW50YXRpb24gKG91dCBvZiBsaW5lKSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgYml0cy9saXN0LnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xpc3R9CisgKi8KKworI2lmbmRlZiBfTElTVF9UQ0MKKyNkZWZpbmUgX0xJU1RfVENDIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9jbGVhcigpCisgICAgeworICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gIF9Ob2RlOworICAgICAgX05vZGUqIF9fY3VyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9pbXBsLl9NX25vZGUuX01fbmV4dCk7CisgICAgICB3aGlsZSAoX19jdXIgIT0gJl9NX2ltcGwuX01fbm9kZSkKKwl7CisJICBfTm9kZSogX190bXAgPSBfX2N1cjsKKwkgIF9fY3VyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfX2N1ci0+X01fbmV4dCk7CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCSAgX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkuZGVzdHJveShfX3RtcCk7CisjZWxzZQorCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpLmRlc3Ryb3koc3RkOjpfX2FkZHJlc3NvZihfX3RtcC0+X01fZGF0YSkpOworI2VuZGlmCisJICBfTV9wdXRfbm9kZShfX3RtcCk7CisJfQorICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB0eXBlbmFtZSBsaXN0PF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIGVtcGxhY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJX05vZGUqIF9fdG1wID0gX01fY3JlYXRlX25vZGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwlfX3RtcC0+X01faG9vayhfX3Bvc2l0aW9uLl9NX25vZGUpOworCXJldHVybiBpdGVyYXRvcihfX3RtcCk7CisgICAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBsaXN0PF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICB7CisgICAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOworICAgICAgX190bXAtPl9NX2hvb2soX19wb3NpdGlvbi5fTV9ub2RlKTsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3RtcCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIGxpc3Q8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9fcmV0ID0gaXRlcmF0b3IoX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0KTsKKyAgICAgIF9NX2VyYXNlKF9fcG9zaXRpb24pOworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9kZWZhdWx0X2FwcGVuZChzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX2kgPSAwOworICAgICAgX190cnkKKwl7CisJICBmb3IgKDsgX19pIDwgX19uOyArK19faSkKKwkgICAgZW1wbGFjZV9iYWNrKCk7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgZm9yICg7IF9faTsgLS1fX2kpCisJICAgIHBvcF9iYWNrKCk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CisgICAgICBzaXplX3R5cGUgX19sZW4gPSAwOworICAgICAgZm9yICg7IF9faSAhPSBlbmQoKSAmJiBfX2xlbiA8IF9fbmV3X3NpemU7ICsrX19pLCArK19fbGVuKQorICAgICAgICA7CisgICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKKyAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBfX2kgPT0gZW5kKCkKKwlfTV9kZWZhdWx0X2FwcGVuZChfX25ld19zaXplIC0gX19sZW4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CisgICAgICBzaXplX3R5cGUgX19sZW4gPSAwOworICAgICAgZm9yICg7IF9faSAhPSBlbmQoKSAmJiBfX2xlbiA8IF9fbmV3X3NpemU7ICsrX19pLCArK19fbGVuKQorICAgICAgICA7CisgICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKKyAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBfX2kgPT0gZW5kKCkKKyAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7CisgICAgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIHZhbHVlX3R5cGUgX194KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CisgICAgICBzaXplX3R5cGUgX19sZW4gPSAwOworICAgICAgZm9yICg7IF9faSAhPSBlbmQoKSAmJiBfX2xlbiA8IF9fbmV3X3NpemU7ICsrX19pLCArK19fbGVuKQorICAgICAgICA7CisgICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKKyAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBfX2kgPT0gZW5kKCkKKyAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7CisgICAgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgbGlzdDxfVHAsIF9BbGxvYz4mCisgICAgbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIG9wZXJhdG9yPShjb25zdCBsaXN0JiBfX3gpCisgICAgeworICAgICAgaWYgKHRoaXMgIT0gJl9feCkKKwl7CisJICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CisJICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CisJICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOworCSAgY29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKKwkgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CisJICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDIpCisJICAgICpfX2ZpcnN0MSA9ICpfX2ZpcnN0MjsKKwkgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQorCSAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CisJICBlbHNlCisJICAgIGluc2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CisgICAgICBmb3IgKDsgX19pICE9IGVuZCgpICYmIF9fbiA+IDA7ICsrX19pLCAtLV9fbikKKyAgICAgICAgKl9faSA9IF9fdmFsOworICAgICAgaWYgKF9fbiA+IDApCisgICAgICAgIGluc2VydChlbmQoKSwgX19uLCBfX3ZhbCk7CisgICAgICBlbHNlCisgICAgICAgIGVyYXNlKF9faSwgZW5kKCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdDIsCisJCQkgX19mYWxzZV90eXBlKQorICAgICAgeworICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CisgICAgICAgIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKKyAgICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKKwkgICAgICsrX19maXJzdDEsICsrX19maXJzdDIpCisgICAgICAgICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOworICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKKyAgICAgICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgcmVtb3ZlKGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgeworICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CisgICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKKyAgICAgIGl0ZXJhdG9yIF9fZXh0cmEgPSBfX2xhc3Q7CisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJeworCSAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKwkgICsrX19uZXh0OworCSAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gNTI2LiBJcyBpdCB1bmRlZmluZWQgaWYgYSBmdW5jdGlvbiBpbiB0aGUgc3RhbmRhcmQgY2hhbmdlcworCSAgICAgIC8vIGluIHBhcmFtZXRlcnM/CisJICAgICAgaWYgKHN0ZDo6X19hZGRyZXNzb2YoKl9fZmlyc3QpICE9IHN0ZDo6X19hZGRyZXNzb2YoX192YWx1ZSkpCisJCV9NX2VyYXNlKF9fZmlyc3QpOworCSAgICAgIGVsc2UKKwkJX19leHRyYSA9IF9fZmlyc3Q7CisJICAgIH0KKwkgIF9fZmlyc3QgPSBfX25leHQ7CisJfQorICAgICAgaWYgKF9fZXh0cmEgIT0gX19sYXN0KQorCV9NX2VyYXNlKF9fZXh0cmEpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgbGlzdDxfVHAsIF9BbGxvYz46OgorICAgIHVuaXF1ZSgpCisgICAgeworICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CisgICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm47CisgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKKwl7CisJICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKKwkgICAgX01fZXJhc2UoX19uZXh0KTsKKwkgIGVsc2UKKwkgICAgX19maXJzdCA9IF9fbmV4dDsKKwkgIF9fbmV4dCA9IF9fZmlyc3Q7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgbGlzdDxfVHAsIF9BbGxvYz46OgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBtZXJnZShsaXN0JiYgX194KQorI2Vsc2UKKyAgICBtZXJnZShsaXN0JiBfX3gpCisjZW5kaWYKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAzMDAuIGxpc3Q6Om1lcmdlKCkgc3BlY2lmaWNhdGlvbiBpbmNvbXBsZXRlCisgICAgICBpZiAodGhpcyAhPSAmX194KQorCXsKKwkgIF9NX2NoZWNrX2VxdWFsX2FsbG9jYXRvcnMoX194KTsgCisKKwkgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKKwkgIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKKwkgIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CisJICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOworCSAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwkgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICAgICB7CisJCWl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOworCQlfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKKwkJX19maXJzdDIgPSBfX25leHQ7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgKytfX2ZpcnN0MTsKKwkgIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKQorCSAgICBfTV90cmFuc2ZlcihfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KKyAgICAgIHZvaWQKKyAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBtZXJnZShsaXN0JiYgX194LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKKyNlbHNlCisgICAgICBtZXJnZShsaXN0JiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQorI2VuZGlmCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDMwMC4gbGlzdDo6bWVyZ2UoKSBzcGVjaWZpY2F0aW9uIGluY29tcGxldGUKKwlpZiAodGhpcyAhPSAmX194KQorCSAgeworCSAgICBfTV9jaGVja19lcXVhbF9hbGxvY2F0b3JzKF9feCk7CisKKwkgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOworCSAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CisJICAgIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CisJICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CisJICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJCXsKKwkJICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0MjsKKwkJICBfTV90cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKKwkJICBfX2ZpcnN0MiA9IF9fbmV4dDsKKwkJfQorCSAgICAgIGVsc2UKKwkJKytfX2ZpcnN0MTsKKwkgICAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpCisJICAgICAgX01fdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgc29ydCgpCisgICAgeworICAgICAgLy8gRG8gbm90aGluZyBpZiB0aGUgbGlzdCBoYXMgbGVuZ3RoIDAgb3IgMS4KKyAgICAgIGlmICh0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fbmV4dCAhPSAmdGhpcy0+X01faW1wbC5fTV9ub2RlCisJICAmJiB0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fbmV4dC0+X01fbmV4dCAhPSAmdGhpcy0+X01faW1wbC5fTV9ub2RlKQorICAgICAgeworICAgICAgICBsaXN0IF9fY2Fycnk7CisgICAgICAgIGxpc3QgX190bXBbNjRdOworICAgICAgICBsaXN0ICogX19maWxsID0gJl9fdG1wWzBdOworICAgICAgICBsaXN0ICogX19jb3VudGVyOworCisgICAgICAgIGRvCisJICB7CisJICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOworCisJICAgIGZvcihfX2NvdW50ZXIgPSAmX190bXBbMF07CisJCV9fY291bnRlciAhPSBfX2ZpbGwgJiYgIV9fY291bnRlci0+ZW1wdHkoKTsKKwkJKytfX2NvdW50ZXIpCisJICAgICAgeworCQlfX2NvdW50ZXItPm1lcmdlKF9fY2FycnkpOworCQlfX2NhcnJ5LnN3YXAoKl9fY291bnRlcik7CisJICAgICAgfQorCSAgICBfX2NhcnJ5LnN3YXAoKl9fY291bnRlcik7CisJICAgIGlmIChfX2NvdW50ZXIgPT0gX19maWxsKQorCSAgICAgICsrX19maWxsOworCSAgfQorCXdoaWxlICggIWVtcHR5KCkgKTsKKworICAgICAgICBmb3IgKF9fY291bnRlciA9ICZfX3RtcFsxXTsgX19jb3VudGVyICE9IF9fZmlsbDsgKytfX2NvdW50ZXIpCisgICAgICAgICAgX19jb3VudGVyLT5tZXJnZSgqKF9fY291bnRlciAtIDEpKTsKKyAgICAgICAgc3dhcCggKihfX2ZpbGwgLSAxKSApOworICAgICAgfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICAgIHZvaWQKKyAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKKyAgICAgIHsKKyAgICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CisgICAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOworICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICB7CisJICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisJICAgICsrX19uZXh0OworCSAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgICBfTV9lcmFzZShfX2ZpcnN0KTsKKwkgICAgX19maXJzdCA9IF9fbmV4dDsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICAgIHZvaWQKKyAgICAgIGxpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgICB7CisgICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOworICAgICAgICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKKyAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgcmV0dXJuOworICAgICAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQorCSAgeworCSAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCisJICAgICAgX01fZXJhc2UoX19uZXh0KTsKKwkgICAgZWxzZQorCSAgICAgIF9fZmlyc3QgPSBfX25leHQ7CisJICAgIF9fbmV4dCA9IF9fZmlyc3Q7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICB2b2lkCisgICAgICBsaXN0PF9UcCwgX0FsbG9jPjo6CisgICAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQorICAgICAgeworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGxpc3QgaGFzIGxlbmd0aCAwIG9yIDEuCisJaWYgKHRoaXMtPl9NX2ltcGwuX01fbm9kZS5fTV9uZXh0ICE9ICZ0aGlzLT5fTV9pbXBsLl9NX25vZGUKKwkgICAgJiYgdGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX25leHQtPl9NX25leHQgIT0gJnRoaXMtPl9NX2ltcGwuX01fbm9kZSkKKwkgIHsKKwkgICAgbGlzdCBfX2NhcnJ5OworCSAgICBsaXN0IF9fdG1wWzY0XTsKKwkgICAgbGlzdCAqIF9fZmlsbCA9ICZfX3RtcFswXTsKKwkgICAgbGlzdCAqIF9fY291bnRlcjsKKworCSAgICBkbworCSAgICAgIHsKKwkJX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhpcywgYmVnaW4oKSk7CisKKwkJZm9yKF9fY291bnRlciA9ICZfX3RtcFswXTsKKwkJICAgIF9fY291bnRlciAhPSBfX2ZpbGwgJiYgIV9fY291bnRlci0+ZW1wdHkoKTsKKwkJICAgICsrX19jb3VudGVyKQorCQkgIHsKKwkJICAgIF9fY291bnRlci0+bWVyZ2UoX19jYXJyeSwgX19jb21wKTsKKwkJICAgIF9fY2Fycnkuc3dhcCgqX19jb3VudGVyKTsKKwkJICB9CisJCV9fY2Fycnkuc3dhcCgqX19jb3VudGVyKTsKKwkJaWYgKF9fY291bnRlciA9PSBfX2ZpbGwpCisJCSAgKytfX2ZpbGw7CisJICAgICAgfQorCSAgICB3aGlsZSAoICFlbXB0eSgpICk7CisKKwkgICAgZm9yIChfX2NvdW50ZXIgPSAmX190bXBbMV07IF9fY291bnRlciAhPSBfX2ZpbGw7ICsrX19jb3VudGVyKQorCSAgICAgIF9fY291bnRlci0+bWVyZ2UoKihfX2NvdW50ZXIgLSAxKSwgX19jb21wKTsKKwkgICAgc3dhcCgqKF9fZmlsbCAtIDEpKTsKKwkgIH0KKyAgICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX0xJU1RfVENDICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9sb2NhbGVfY2xhc3Nlcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xvY2FsZV9jbGFzc2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdkZTdlNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9sb2NhbGVfY2xhc3Nlcy5oCkBAIC0wLDAgKzEsNzg5IEBACisvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9sb2NhbGVfY2xhc3Nlcy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisvLworCisjaWZuZGVmIF9MT0NBTEVfQ0xBU1NFU19ICisjZGVmaW5lIF9MT0NBTEVfQ0xBU1NFU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gMjIuMS4xIENsYXNzIGxvY2FsZQorICAvKioKKyAgICogIEBicmllZiAgQ29udGFpbmVyIGNsYXNzIGZvciBsb2NhbGl6YXRpb24gZnVuY3Rpb25hbGl0eS4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoZSBsb2NhbGUgY2xhc3MgaXMgZmlyc3QgYSBjbGFzcyB3cmFwcGVyIGZvciBDIGxpYnJhcnkgbG9jYWxlcy4gIEl0IGlzCisgICAqICBhbHNvIGFuIGV4dGVuc2libGUgY29udGFpbmVyIGZvciB1c2VyLWRlZmluZWQgbG9jYWxpemF0aW9uLiAgQSBsb2NhbGUgaXMKKyAgICogIGEgY29sbGVjdGlvbiBvZiBmYWNldHMgdGhhdCBpbXBsZW1lbnQgdmFyaW91cyBsb2NhbGl6YXRpb24gZmVhdHVyZXMgc3VjaAorICAgKiAgYXMgbW9uZXksIHRpbWUsIGFuZCBudW1iZXIgcHJpbnRpbmcuCisgICAqCisgICAqICBDb25zdHJ1Y3RpbmcgQysrIGxvY2FsZXMgZG9lcyBub3QgY2hhbmdlIHRoZSBDIGxpYnJhcnkgbG9jYWxlLgorICAgKgorICAgKiAgVGhpcyBsaWJyYXJ5IHN1cHBvcnRzIGVmZmljaWVudCBjb25zdHJ1Y3Rpb24gYW5kIGNvcHlpbmcgb2YgbG9jYWxlcworICAgKiAgdGhyb3VnaCBhIHJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbG9jYWxlIGNsYXNzLgorICAqLworICBjbGFzcyBsb2NhbGUKKyAgeworICBwdWJsaWM6CisgICAgLy8gVHlwZXM6CisgICAgLy8vIERlZmluaXRpb24gb2YgbG9jYWxlOjpjYXRlZ29yeS4KKyAgICB0eXBlZGVmIGludAljYXRlZ29yeTsKKworICAgIC8vIEZvcndhcmQgZGVjbHMgYW5kIGZyaWVuZHM6CisgICAgY2xhc3MgZmFjZXQ7CisgICAgY2xhc3MgaWQ7CisgICAgY2xhc3MgX0ltcGw7CisKKyAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CisgICAgZnJpZW5kIGNsYXNzIF9JbXBsOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKKyAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DYWNoZT4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgX191c2VfY2FjaGU7CisKKyAgICAvL0B7CisgICAgLyoqCisgICAgICogIEBicmllZiAgQ2F0ZWdvcnkgdmFsdWVzLgorICAgICAqCisgICAgICogIFRoZSBzdGFuZGFyZCBjYXRlZ29yeSB2YWx1ZXMgYXJlIG5vbmUsIGN0eXBlLCBudW1lcmljLCBjb2xsYXRlLCB0aW1lLAorICAgICAqICBtb25ldGFyeSwgYW5kIG1lc3NhZ2VzLiAgVGhleSBmb3JtIGEgYml0bWFzayB0aGF0IHN1cHBvcnRzIHVuaW9uIGFuZAorICAgICAqICBpbnRlcnNlY3Rpb24uICBUaGUgY2F0ZWdvcnkgYWxsIGlzIHRoZSB1bmlvbiBvZiB0aGVzZSB2YWx1ZXMuCisgICAgICoKKyAgICAgKiAgTkI6IE9yZGVyIG11c3QgbWF0Y2ggX1NfZmFjZXRfY2F0ZWdvcmllcyBkZWZpbml0aW9uIGluIGxvY2FsZS5jYworICAgICovCisgICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUJCT0gMDsKKyAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUJCT0gMUwgPDwgMDsKKyAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYwk9IDFMIDw8IDE7CisgICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUJPSAxTCA8PCAyOworICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lCQk9IDFMIDw8IDM7CisgICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5CT0gMUwgPDwgNDsKKyAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMJPSAxTCA8PCA1OworICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwJCT0gKGN0eXBlIHwgbnVtZXJpYyB8IGNvbGxhdGUgfAorCQkJCQkgICB0aW1lICB8IG1vbmV0YXJ5IHwgbWVzc2FnZXMpOworICAgIC8vQH0KKworICAgIC8vIENvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAqCisgICAgICogIENvbnN0cnVjdHMgYSBjb3B5IG9mIHRoZSBnbG9iYWwgbG9jYWxlLiAgSWYgbm8gbG9jYWxlIGhhcyBiZWVuCisgICAgICogIGV4cGxpY2l0bHkgc2V0LCB0aGlzIGlzIHRoZSBDIGxvY2FsZS4KKyAgICAqLworICAgIGxvY2FsZSgpIHRocm93KCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb3B5IGNvbnN0cnVjdG9yLgorICAgICAqCisgICAgICogIENvbnN0cnVjdHMgYSBjb3B5IG9mIEBhIG90aGVyLgorICAgICAqCisgICAgICogIEBwYXJhbSAgX19vdGhlciAgVGhlIGxvY2FsZSB0byBjb3B5LgorICAgICovCisgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIE5hbWVkIGxvY2FsZSBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqICBDb25zdHJ1Y3RzIGEgY29weSBvZiB0aGUgbmFtZWQgQyBsaWJyYXJ5IGxvY2FsZS4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIF9fcyAgTmFtZSBvZiB0aGUgbG9jYWxlIHRvIGNvbnN0cnVjdC4KKyAgICAgKiAgQHRocm93ICBzdGQ6OnJ1bnRpbWVfZXJyb3IgaWYgX19zIGlzIG51bGwgb3IgYW4gdW5kZWZpbmVkIGxvY2FsZS4KKyAgICAqLworICAgIGV4cGxpY2l0CisgICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fcyk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgbG9jYWxlIHdpdGggZmFjZXRzIGZyb20gYW5vdGhlciBsb2NhbGUuCisgICAgICoKKyAgICAgKiAgQ29uc3RydWN0cyBhIGNvcHkgb2YgdGhlIGxvY2FsZSBAYSBiYXNlLiAgVGhlIGZhY2V0cyBzcGVjaWZpZWQgYnkgQGEKKyAgICAgKiAgY2F0IGFyZSByZXBsYWNlZCB3aXRoIHRob3NlIGZyb20gdGhlIGxvY2FsZSBuYW1lZCBieSBAYSBzLiAgSWYgYmFzZSBpcworICAgICAqICBuYW1lZCwgdGhpcyBsb2NhbGUgaW5zdGFuY2Ugd2lsbCBhbHNvIGJlIG5hbWVkLgorICAgICAqCisgICAgICogIEBwYXJhbSAgX19iYXNlICBUaGUgbG9jYWxlIHRvIGNvcHkuCisgICAgICogIEBwYXJhbSAgX19zICBOYW1lIG9mIHRoZSBsb2NhbGUgdG8gdXNlIGZhY2V0cyBmcm9tLgorICAgICAqICBAcGFyYW0gIF9fY2F0ICBTZXQgb2YgY2F0ZWdvcmllcyBkZWZpbmluZyB0aGUgZmFjZXRzIHRvIHVzZSBmcm9tIF9fcy4KKyAgICAgKiAgQHRocm93ICBzdGQ6OnJ1bnRpbWVfZXJyb3IgaWYgX19zIGlzIG51bGwgb3IgYW4gdW5kZWZpbmVkIGxvY2FsZS4KKyAgICAqLworICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgbG9jYWxlIHdpdGggZmFjZXRzIGZyb20gYW5vdGhlciBsb2NhbGUuCisgICAgICoKKyAgICAgKiAgQ29uc3RydWN0cyBhIGNvcHkgb2YgdGhlIGxvY2FsZSBAYSBiYXNlLiAgVGhlIGZhY2V0cyBzcGVjaWZpZWQgYnkgQGEKKyAgICAgKiAgY2F0IGFyZSByZXBsYWNlZCB3aXRoIHRob3NlIGZyb20gdGhlIGxvY2FsZSBAYSBhZGQuICBJZiBAYSBiYXNlIGFuZCBAYQorICAgICAqICBhZGQgYXJlIG5hbWVkLCB0aGlzIGxvY2FsZSBpbnN0YW5jZSB3aWxsIGFsc28gYmUgbmFtZWQuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBfX2Jhc2UgIFRoZSBsb2NhbGUgdG8gY29weS4KKyAgICAgKiAgQHBhcmFtICBfX2FkZCAgVGhlIGxvY2FsZSB0byB1c2UgZmFjZXRzIGZyb20uCisgICAgICogIEBwYXJhbSAgX19jYXQgIFNldCBvZiBjYXRlZ29yaWVzIGRlZmluaW5nIHRoZSBmYWNldHMgdG8gdXNlIGZyb20gYWRkLgorICAgICovCisgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgbG9jYWxlIHdpdGggYW5vdGhlciBmYWNldC4KKyAgICAgKgorICAgICAqICBDb25zdHJ1Y3RzIGEgY29weSBvZiB0aGUgbG9jYWxlIEBhIF9fb3RoZXIuICBUaGUgZmFjZXQgQGEgX19mCisgICAgICogIGlzIGFkZGVkIHRvIEBhIF9fb3RoZXIsIHJlcGxhY2luZyBhbiBleGlzdGluZyBmYWNldCBvZiB0eXBlCisgICAgICogIEZhY2V0IGlmIHRoZXJlIGlzIG9uZS4gIElmIEBhIF9fZiBpcyBudWxsLCB0aGlzIGxvY2FsZSBpcyBhCisgICAgICogIGNvcHkgb2YgQGEgX19vdGhlci4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIF9fb3RoZXIgIFRoZSBsb2NhbGUgdG8gY29weS4KKyAgICAgKiAgQHBhcmFtICBfX2YgIFRoZSBmYWNldCB0byBhZGQgaW4uCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7CisKKyAgICAvLy8gTG9jYWxlIGRlc3RydWN0b3IuCisgICAgfmxvY2FsZSgpIHRocm93KCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBBc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAqCisgICAgICogIFNldCB0aGlzIGxvY2FsZSB0byBiZSBhIGNvcHkgb2YgQGEgb3RoZXIuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBfX290aGVyICBUaGUgbG9jYWxlIHRvIGNvcHkuCisgICAgICogIEByZXR1cm4gIEEgcmVmZXJlbmNlIHRvIHRoaXMgbG9jYWxlLgorICAgICovCisgICAgY29uc3QgbG9jYWxlJgorICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgbG9jYWxlIHdpdGggYW5vdGhlciBmYWNldC4KKyAgICAgKgorICAgICAqICBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIGEgbmV3IGNvcHkgb2YgdGhpcyBsb2NhbGUuICBBZGRzIG9yIHJlcGxhY2VzIGFuCisgICAgICogIGV4aXN0aW5nIGZhY2V0IG9mIHR5cGUgRmFjZXQgZnJvbSB0aGUgbG9jYWxlIEBhIG90aGVyIGludG8gdGhlIG5ldworICAgICAqICBsb2NhbGUuCisgICAgICoKKyAgICAgKiAgQHRwYXJhbSAgX0ZhY2V0ICBUaGUgZmFjZXQgdHlwZSB0byBjb3B5IGZyb20gb3RoZXIKKyAgICAgKiAgQHBhcmFtICBfX290aGVyICBUaGUgbG9jYWxlIHRvIGNvcHkgZnJvbS4KKyAgICAgKiAgQHJldHVybiAgTmV3bHkgY29uc3RydWN0ZWQgbG9jYWxlLgorICAgICAqICBAdGhyb3cgIHN0ZDo6cnVudGltZV9lcnJvciBpZiBfX290aGVyIGhhcyBubyBmYWNldCBvZiB0eXBlIF9GYWNldC4KKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KKyAgICAgIGxvY2FsZQorICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OworCisgICAgLy8gTG9jYWxlIG9wZXJhdGlvbnM6CisgICAgLyoqCisgICAgICogIEBicmllZiAgUmV0dXJuIGxvY2FsZSBuYW1lLgorICAgICAqICBAcmV0dXJuICBMb2NhbGUgbmFtZSBvciAiKiIgaWYgdW5uYW1lZC4KKyAgICAqLworICAgIHN0cmluZworICAgIG5hbWUoKSBjb25zdDsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIExvY2FsZSBlcXVhbGl0eS4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIF9fb3RoZXIgIFRoZSBsb2NhbGUgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAqICBAcmV0dXJuICBUcnVlIGlmIG90aGVyIGFuZCB0aGlzIHJlZmVyIHRvIHRoZSBzYW1lIGxvY2FsZSBpbnN0YW5jZSwgYXJlCisgICAgICoJCSBjb3BpZXMsIG9yIGhhdmUgdGhlIHNhbWUgbmFtZS4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICAqLworICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3coKTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIExvY2FsZSBpbmVxdWFsaXR5LgorICAgICAqCisgICAgICogIEBwYXJhbSAgX19vdGhlciAgVGhlIGxvY2FsZSB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICogIEByZXR1cm4gICEgKCp0aGlzID09IF9fb3RoZXIpCisgICAgKi8KKyAgICBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93KCkKKyAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb21wYXJlIHR3byBzdHJpbmdzIGFjY29yZGluZyB0byBjb2xsYXRlLgorICAgICAqCisgICAgICogIFRlbXBsYXRlIG9wZXJhdG9yIHRvIGNvbXBhcmUgdHdvIHN0cmluZ3MgdXNpbmcgdGhlIGNvbXBhcmUgZnVuY3Rpb24gb2YKKyAgICAgKiAgdGhlIGNvbGxhdGUgZmFjZXQgaW4gdGhpcyBsb2NhbGUuICBPbmUgdXNlIGlzIHRvIHByb3ZpZGUgdGhlIGxvY2FsZSB0bworICAgICAqICB0aGUgc29ydCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCBhIHZlY3RvciB2IG9mIHN0cmluZ3MgY291bGQgYmUgc29ydGVkCisgICAgICogIGFjY29yZGluZyB0byBsb2NhbGUgbG9jIGJ5IGRvaW5nOgorICAgICAqICBAY29kZQorICAgICAqICBzdGQ6OnNvcnQodi5iZWdpbigpLCB2LmVuZCgpLCBsb2MpOworICAgICAqICBAZW5kY29kZQorICAgICAqCisgICAgICogIEBwYXJhbSAgX19zMSAgRmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmUuCisgICAgICogIEBwYXJhbSAgX19zMiAgU2Vjb25kIHN0cmluZyB0byBjb21wYXJlLgorICAgICAqICBAcmV0dXJuICBUcnVlIGlmIGNvbGxhdGU8X0NoYXI+IGZhY2V0IGNvbXBhcmVzIF9fczEgPCBfX3MyLCBlbHNlIGZhbHNlLgorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAorCQkgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKKworICAgIC8vIEdsb2JhbCBsb2NhbGUgb2JqZWN0czoKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBTZXQgZ2xvYmFsIGxvY2FsZQorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZ2xvYmFsIGxvY2FsZSB0byB0aGUgYXJndW1lbnQgYW5kIHJldHVybnMgYQorICAgICAqICBjb3B5IG9mIHRoZSBwcmV2aW91cyBnbG9iYWwgbG9jYWxlLiAgSWYgdGhlIGFyZ3VtZW50IGhhcyBhIG5hbWUsIGl0CisgICAgICogIHdpbGwgYWxzbyBjYWxsIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgbG9jLm5hbWUoKSkuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBfX2xvYyAgVGhlIG5ldyBsb2NhbGUgdG8gbWFrZSBnbG9iYWwuCisgICAgICogIEByZXR1cm4gIENvcHkgb2YgdGhlIG9sZCBnbG9iYWwgbG9jYWxlLgorICAgICovCisgICAgc3RhdGljIGxvY2FsZQorICAgIGdsb2JhbChjb25zdCBsb2NhbGUmIF9fbG9jKTsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgIFJldHVybiByZWZlcmVuY2UgdG8gdGhlIEMgbG9jYWxlLgorICAgICovCisgICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKKyAgICBjbGFzc2ljKCk7CisKKyAgcHJpdmF0ZToKKyAgICAvLyBUaGUgKHNoYXJlZCkgaW1wbGVtZW50YXRpb24KKyAgICBfSW1wbCoJCV9NX2ltcGw7CisKKyAgICAvLyBUaGUgIkMiIHJlZmVyZW5jZSBsb2NhbGUKKyAgICBzdGF0aWMgX0ltcGwqICAgICAgIF9TX2NsYXNzaWM7CisKKyAgICAvLyBDdXJyZW50IGdsb2JhbCBsb2NhbGUKKyAgICBzdGF0aWMgX0ltcGwqCV9TX2dsb2JhbDsKKworICAgIC8vIE5hbWVzIG9mIHVuZGVybHlpbmcgbG9jYWxlIGNhdGVnb3JpZXMuCisgICAgLy8gTkI6IGxvY2FsZTo6Z2xvYmFsKCkgaGFzIHRvIGtub3cgaG93IHRvIG1vZGlmeSBhbGwgdGhlCisgICAgLy8gdW5kZXJseWluZyBjYXRlZ29yaWVzLCBub3QganVzdCB0aGUgb25lcyByZXF1aXJlZCBieSB0aGUgQysrCisgICAgLy8gc3RhbmRhcmQuCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBfU19jYXRlZ29yaWVzOworCisgICAgLy8gTnVtYmVyIG9mIHN0YW5kYXJkIGNhdGVnb3JpZXMuIEZvciBDKyssIHRoZXNlIGNhdGVnb3JpZXMgYXJlCisgICAgLy8gY29sbGF0ZSwgY3R5cGUsIG1vbmV0YXJ5LCBudW1lcmljLCB0aW1lLCBhbmQgbWVzc2FnZXMuIFRoZXNlCisgICAgLy8gZGlyZWN0bHkgY29ycmVzcG9uZCB0byBJU08gQzk5IG1hY3JvcyBMQ19DT0xMQVRFLCBMQ19DVFlQRSwKKyAgICAvLyBMQ19NT05FVEFSWSwgTENfTlVNRVJJQywgYW5kIExDX1RJTUUuIEluIGFkZGl0aW9uLCBQT1NJWCAoSUVFRQorICAgIC8vIDEwMDMuMS0yMDAxKSBzcGVjaWZpZXMgTENfTUVTU0FHRVMuCisgICAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIGNhdGVnb3JpZXMsIHRoZSB1bmRlcmx5aW5nCisgICAgLy8gb3BlcmF0aW5nIHN5c3RlbSBpcyBhbGxvd2VkIHRvIGRlZmluZSBleHRyYSBMQ18qCisgICAgLy8gbWFjcm9zLiBGb3IgR05VIHN5c3RlbXMsIHRoZSBmb2xsb3dpbmcgYXJlIGFsc28gdmFsaWQ6CisgICAgLy8gTENfUEFQRVIsIExDX05BTUUsIExDX0FERFJFU1MsIExDX1RFTEVQSE9ORSwgTENfTUVBU1VSRU1FTlQsCisgICAgLy8gYW5kIExDX0lERU5USUZJQ0FUSU9OLgorICAgIGVudW0geyBfU19jYXRlZ29yaWVzX3NpemUgPSA2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgfTsKKworI2lmZGVmIF9fR1RIUkVBRFMKKyAgICBzdGF0aWMgX19ndGhyZWFkX29uY2VfdCBfU19vbmNlOworI2VuZGlmCisKKyAgICBleHBsaWNpdAorICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CisKKyAgICBzdGF0aWMgdm9pZAorICAgIF9TX2luaXRpYWxpemUoKTsKKworICAgIHN0YXRpYyB2b2lkCisgICAgX1NfaW5pdGlhbGl6ZV9vbmNlKCkgdGhyb3coKTsKKworICAgIHN0YXRpYyBjYXRlZ29yeQorICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CisKKyAgICB2b2lkCisgICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKKyAgfTsKKworCisgIC8vIDIyLjEuMS4xLjIgIENsYXNzIGxvY2FsZTo6ZmFjZXQKKyAgLyoqCisgICAqICBAYnJpZWYgIExvY2FsaXphdGlvbiBmdW5jdGlvbmFsaXR5IGJhc2UgY2xhc3MuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGUgZmFjZXQgY2xhc3MgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGEgbG9jYWxpemF0aW9uIGZlYXR1cmUsIHN1Y2ggYXMKKyAgICogIG1vbmV5LCB0aW1lLCBhbmQgbnVtYmVyIHByaW50aW5nLiAgSXQgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGZhY2V0cworICAgKiAgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50LgorICAgKgorICAgKiAgRmFjZXRzIG1heSBub3QgYmUgY29waWVkIG9yIGFzc2lnbmVkLgorICAqLworICBjbGFzcyBsb2NhbGU6OmZhY2V0CisgIHsKKyAgcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgbG9jYWxlOworICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOworCisgICAgbXV0YWJsZSBfQXRvbWljX3dvcmQJCV9NX3JlZmNvdW50OworCisgICAgLy8gQ29udGFpbnMgZGF0YSBmcm9tIHRoZSB1bmRlcmx5aW5nICJDIiBsaWJyYXJ5IGZvciB0aGUgY2xhc3NpYyBsb2NhbGUuCisgICAgc3RhdGljIF9fY19sb2NhbGUgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGU7CisKKyAgICAvLyBTdHJpbmcgbGl0ZXJhbCBmb3IgdGhlIG5hbWUgb2YgdGhlIGNsYXNzaWMgbG9jYWxlLgorICAgIHN0YXRpYyBjb25zdCBjaGFyCQkJX1NfY19uYW1lWzJdOworCisjaWZkZWYgX19HVEhSRUFEUworICAgIHN0YXRpYyBfX2d0aHJlYWRfb25jZV90CQlfU19vbmNlOworI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZAorICAgIF9TX2luaXRpYWxpemVfb25jZSgpOworCisgIHByb3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBGYWNldCBjb25zdHJ1Y3Rvci4KKyAgICAgKgorICAgICAqICBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQuICBJZiByZWZzIGlzIDAsIHRoZQorICAgICAqICBmYWNldCBpcyBkZXN0cm95ZWQgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2luZyBsb2NhbGUgaXMgZGVzdHJveWVkLgorICAgICAqICBPdGhlcndpc2UgdGhlIGZhY2V0IHdpbGwgbmV2ZXIgYmUgZGVzdHJveWVkLgorICAgICAqCisgICAgICogIEBwYXJhbSBfX3JlZnMgIFRoZSBpbml0aWFsIHZhbHVlIGZvciByZWZlcmVuY2UgY291bnQuCisgICAgKi8KKyAgICBleHBsaWNpdAorICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpIDogX01fcmVmY291bnQoX19yZWZzID8gMSA6IDApCisgICAgeyB9CisKKyAgICAvLy8gRmFjZXQgZGVzdHJ1Y3Rvci4KKyAgICB2aXJ0dWFsCisgICAgfmZhY2V0KCk7CisKKyAgICBzdGF0aWMgdm9pZAorICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKwkJICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSAwKTsKKworICAgIHN0YXRpYyBfX2NfbG9jYWxlCisgICAgX1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKSB0aHJvdygpOworCisgICAgc3RhdGljIHZvaWQKKyAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CisKKyAgICBzdGF0aWMgX19jX2xvY2FsZQorICAgIF9TX2xjX2N0eXBlX2NfbG9jYWxlKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MpOworCisgICAgLy8gUmV0dXJucyBkYXRhIGZyb20gdGhlIHVuZGVybHlpbmcgIkMiIGxpYnJhcnkgZGF0YSBmb3IgdGhlCisgICAgLy8gY2xhc3NpYyBsb2NhbGUuCisgICAgc3RhdGljIF9fY19sb2NhbGUKKyAgICBfU19nZXRfY19sb2NhbGUoKTsKKworICAgIF9HTElCQ1hYX0NPTlNUIHN0YXRpYyBjb25zdCBjaGFyKgorICAgIF9TX2dldF9jX25hbWUoKSB0aHJvdygpOworCisgIHByaXZhdGU6CisgICAgdm9pZAorICAgIF9NX2FkZF9yZWZlcmVuY2UoKSBjb25zdCB0aHJvdygpCisgICAgeyBfX2dudV9jeHg6Ol9fYXRvbWljX2FkZF9kaXNwYXRjaCgmX01fcmVmY291bnQsIDEpOyB9CisKKyAgICB2b2lkCisgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIGNvbnN0IHRocm93KCkKKyAgICB7CisgICAgICAvLyBCZSByYWNlLWRldGVjdG9yLWZyaWVuZGx5LiAgRm9yIG1vcmUgaW5mbyBzZWUgYml0cy9jKytjb25maWcuCisgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19CRUZPUkUoJl9NX3JlZmNvdW50KTsKKyAgICAgIGlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fcmVmY291bnQsIC0xKSA9PSAxKQorCXsKKyAgICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19BRlRFUigmX01fcmVmY291bnQpOworCSAgX190cnkKKwkgICAgeyBkZWxldGUgdGhpczsgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgfQorCX0KKyAgICB9CisKKyAgICBmYWNldChjb25zdCBmYWNldCYpOyAgLy8gTm90IGRlZmluZWQuCisKKyAgICBmYWNldCYKKyAgICBvcGVyYXRvcj0oY29uc3QgZmFjZXQmKTsgIC8vIE5vdCBkZWZpbmVkLgorICB9OworCisKKyAgLy8gMjIuMS4xLjEuMyBDbGFzcyBsb2NhbGU6OmlkCisgIC8qKgorICAgKiAgQGJyaWVmICBGYWNldCBJRCBjbGFzcy4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoZSBJRCBjbGFzcyBwcm92aWRlcyBmYWNldHMgd2l0aCBhbiBpbmRleCB1c2VkIHRvIGlkZW50aWZ5IHRoZW0uCisgICAqICBFdmVyeSBmYWNldCBjbGFzcyBtdXN0IGRlZmluZSBhIHB1YmxpYyBzdGF0aWMgbWVtYmVyIGxvY2FsZTo6aWQsIG9yIGJlCisgICAqICBkZXJpdmVkIGZyb20gYSBmYWNldCB0aGF0IHByb3ZpZGVzIHRoaXMgbWVtYmVyLCBvdGhlcndpc2UgdGhlIGZhY2V0CisgICAqICBjYW5ub3QgYmUgdXNlZCBpbiBhIGxvY2FsZS4gIFRoZSBsb2NhbGU6OmlkIGVuc3VyZXMgdGhhdCBlYWNoIGNsYXNzCisgICAqICB0eXBlIGdldHMgYSB1bmlxdWUgaWRlbnRpZmllci4KKyAgKi8KKyAgY2xhc3MgbG9jYWxlOjppZAorICB7CisgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKKyAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KKyAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCisgICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgICBmcmllbmQgYm9vbAorICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CisKKyAgICAvLyBOQjogVGhlcmUgaXMgbm8gYWNjZXNzb3IgZm9yIF9NX2luZGV4IGJlY2F1c2UgaXQgbWF5IGJlIHVzZWQKKyAgICAvLyBiZWZvcmUgdGhlIGNvbnN0cnVjdG9yIGlzIHJ1bjsgdGhlIGVmZmVjdCBvZiBjYWxsaW5nIGEgbWVtYmVyCisgICAgLy8gZnVuY3Rpb24gKGV2ZW4gYW4gaW5saW5lKSB3b3VsZCBiZSB1bmRlZmluZWQuCisgICAgbXV0YWJsZSBzaXplX3QJCV9NX2luZGV4OworCisgICAgLy8gTGFzdCBpZCBudW1iZXIgYXNzaWduZWQuCisgICAgc3RhdGljIF9BdG9taWNfd29yZAkJX1NfcmVmY291bnQ7CisKKyAgICB2b2lkCisgICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7ICAvLyBOb3QgZGVmaW5lZC4KKworICAgIGlkKGNvbnN0IGlkJik7ICAvLyBOb3QgZGVmaW5lZC4KKworICBwdWJsaWM6CisgICAgLy8gTkI6IFRoaXMgY2xhc3MgaXMgYWx3YXlzIGEgc3RhdGljIGRhdGEgbWVtYmVyLCBhbmQgdGh1cyBjYW4gYmUKKyAgICAvLyBjb3VudGVkIG9uIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuCisgICAgLy8vIENvbnN0cnVjdG9yLgorICAgIGlkKCkgeyB9CisKKyAgICBzaXplX3QKKyAgICBfTV9pZCgpIGNvbnN0IHRocm93KCk7CisgIH07CisKKworICAvLyBJbXBsZW1lbnRhdGlvbiBvYmplY3QgZm9yIGxvY2FsZS4KKyAgY2xhc3MgbG9jYWxlOjpfSW1wbAorICB7CisgIHB1YmxpYzoKKyAgICAvLyBGcmllbmRzLgorICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CisgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgICBmcmllbmQgYm9vbAorICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgorICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhY2hlPgorICAgICAgZnJpZW5kIHN0cnVjdCBfX3VzZV9jYWNoZTsKKworICBwcml2YXRlOgorICAgIC8vIERhdGEgTWVtYmVycy4KKyAgICBfQXRvbWljX3dvcmQJCQlfTV9yZWZjb3VudDsKKyAgICBjb25zdCBmYWNldCoqCQkJX01fZmFjZXRzOworICAgIHNpemVfdAkJCQlfTV9mYWNldHNfc2l6ZTsKKyAgICBjb25zdCBmYWNldCoqCQkJX01fY2FjaGVzOworICAgIGNoYXIqKgkJCQlfTV9uYW1lczsKKyAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QJX1NfaWRfY3R5cGVbXTsKKyAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QJX1NfaWRfbnVtZXJpY1tdOworICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdAlfU19pZF9jb2xsYXRlW107CisgICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0CV9TX2lkX3RpbWVbXTsKKyAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QJX1NfaWRfbW9uZXRhcnlbXTsKKyAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QJX1NfaWRfbWVzc2FnZXNbXTsKKyAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsKKworICAgIHZvaWQKKyAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQorICAgIHsgX19nbnVfY3h4OjpfX2F0b21pY19hZGRfZGlzcGF0Y2goJl9NX3JlZmNvdW50LCAxKTsgfQorCisgICAgdm9pZAorICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCisgICAgeworICAgICAgLy8gQmUgcmFjZS1kZXRlY3Rvci1mcmllbmRseS4gIEZvciBtb3JlIGluZm8gc2VlIGJpdHMvYysrY29uZmlnLgorICAgICAgX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQkVGT1JFKCZfTV9yZWZjb3VudCk7CisgICAgICBpZiAoX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGRfZGlzcGF0Y2goJl9NX3JlZmNvdW50LCAtMSkgPT0gMSkKKwl7CisgICAgICAgICAgX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQUZURVIoJl9NX3JlZmNvdW50KTsKKwkgIF9fdHJ5CisJICAgIHsgZGVsZXRlIHRoaXM7IH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IH0KKwl9CisgICAgfQorCisgICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOworICAgIF9JbXBsKGNvbnN0IGNoYXIqLCBzaXplX3QpOworICAgIF9JbXBsKHNpemVfdCkgdGhyb3coKTsKKworICAgfl9JbXBsKCkgdGhyb3coKTsKKworICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7ICAvLyBOb3QgZGVmaW5lZC4KKworICAgIHZvaWQKKyAgICBvcGVyYXRvcj0oY29uc3QgX0ltcGwmKTsgIC8vIE5vdCBkZWZpbmVkLgorCisgICAgYm9vbAorICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCisgICAgeworICAgICAgYm9vbCBfX3JldCA9IHRydWU7CisgICAgICBpZiAoX01fbmFtZXNbMV0pCisJLy8gV2UgbXVzdCBhY3R1YWxseSBjb21wYXJlIGFsbCB0aGUgX01fbmFtZXM6IGNhbiBiZSBhbGwgZXF1YWwhCisJZm9yIChzaXplX3QgX19pID0gMDsgX19yZXQgJiYgX19pIDwgX1NfY2F0ZWdvcmllc19zaXplIC0gMTsgKytfX2kpCisJICBfX3JldCA9IF9fYnVpbHRpbl9zdHJjbXAoX01fbmFtZXNbX19pXSwgX01fbmFtZXNbX19pICsgMV0pID09IDA7CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgICAgdm9pZAorICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsKKworICAgIHZvaWQKKyAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKKworICAgIHZvaWQKKyAgICBfTV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOworCisgICAgdm9pZAorICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGNvbnN0IGZhY2V0Kik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgICB2b2lkCisgICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19mYWNldCkKKyAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KKworICAgIHZvaWQKKyAgICBfTV9pbnN0YWxsX2NhY2hlKGNvbnN0IGZhY2V0Kiwgc2l6ZV90KTsKKyAgfTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmICBGYWNldCBmb3IgbG9jYWxpemVkIHN0cmluZyBjb21wYXJpc29uLgorICAgKgorICAgKiAgVGhpcyBmYWNldCBlbmNhcHN1bGF0ZXMgdGhlIGNvZGUgdG8gY29tcGFyZSBzdHJpbmdzIGluIGEgbG9jYWxpemVkCisgICAqICBtYW5uZXIuCisgICAqCisgICAqICBUaGUgY29sbGF0ZSB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBwcm92aWRlCisgICAqICB0aGUgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZSBjYWxsIHRvCisgICAqICB0aGUgdmlydHVhbCBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaG9va3MgZm9yCisgICAqICBkZXZlbG9wZXJzIHRvIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20gdGhlCisgICAqICBjb2xsYXRlIGZhY2V0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcworICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+CXN0cmluZ190eXBlOworICAgICAgLy9AfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gVW5kZXJseWluZyAiQyIgbGlicmFyeSBsb2NhbGUgaW5mb3JtYXRpb24gc2F2ZWQgZnJvbQorICAgICAgLy8gaW5pdGlhbGl6YXRpb24sIG5lZWRlZCBieSBjb2xsYXRlX2J5bmFtZSBhcyB3ZWxsLgorICAgICAgX19jX2xvY2FsZQkJCV9NX2NfbG9jYWxlX2NvbGxhdGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gTnVtcHVuY3QgZmFjZXQgaWQuCisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX3JlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkKKyAgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY29sbGF0ZShfU19nZXRfY19sb2NhbGUoKSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEludGVybmFsIGNvbnN0cnVjdG9yLiBOb3QgZm9yIGdlbmVyYWwgdXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgY29uc3RydWN0b3IgZm9yIHVzZSBieSB0aGUgbGlicmFyeSBpdHNlbGYgdG8gc2V0IHVwIG5ldworICAgICAgICogIGxvY2FsZXMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2Nsb2MgIFRoZSBDIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gX19yZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9jb2xsYXRlKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHR3byBzdHJpbmdzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYnkgY2FsbGluZworICAgICAgICogIGNvbGxhdGU6OmRvX2NvbXBhcmUoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8xICBTdGFydCBvZiBzdHJpbmcgMS4KKyAgICAgICAqICBAcGFyYW0gX19oaTEgIEVuZCBvZiBzdHJpbmcgMS4KKyAgICAgICAqICBAcGFyYW0gX19sbzIgIFN0YXJ0IG9mIHN0cmluZyAyLgorICAgICAgICogIEBwYXJhbSBfX2hpMiAgRW5kIG9mIHN0cmluZyAyLgorICAgICAgICogIEByZXR1cm4gIDEgaWYgc3RyaW5nMSA+IHN0cmluZzIsIC0xIGlmIHN0cmluZzEgPCBzdHJpbmcyLCBlbHNlIDAuCisgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCisJICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVHJhbnNmb3JtIHN0cmluZyB0byBjb21wYXJhYmxlIGZvcm0uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGZvciBzdHJ4ZnJtIGZ1bmN0aW9uYWxpdHkuICBJdCB0YWtlcyB0aGUKKyAgICAgICAqICBpbnB1dCBzdHJpbmcgYW5kIHJldHVybnMgYSBtb2RpZmllZCBzdHJpbmcgdGhhdCBjYW4gYmUgZGlyZWN0bHkKKyAgICAgICAqICBjb21wYXJlZCB0byBvdGhlciB0cmFuc2Zvcm1lZCBzdHJpbmdzLiAgSW4gdGhlIEMgbG9jYWxlLCB0aGlzCisgICAgICAgKiAgZnVuY3Rpb24ganVzdCByZXR1cm5zIGEgY29weSBvZiB0aGUgaW5wdXQgc3RyaW5nLiAgSW4gc29tZSBvdGhlcgorICAgICAgICogIGxvY2FsZXMsIGl0IG1heSByZXBsYWNlIHR3byBjaGFycyB3aXRoIG9uZSwgY2hhbmdlIGEgY2hhciBmb3IKKyAgICAgICAqICBhbm90aGVyLCBldGMuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZyBjb2xsYXRlOjpkb190cmFuc2Zvcm0oKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFN0YXJ0IG9mIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgRW5kIG9mIHN0cmluZy4KKyAgICAgICAqICBAcmV0dXJuICBUcmFuc2Zvcm1lZCBzdHJpbmdfdHlwZS4KKyAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNmb3JtKF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGhhc2ggb2YgYSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgYW5kIHJldHVybnMgYSBoYXNoIG9uIHRoZSBpbnB1dCBzdHJpbmcuICBJdAorICAgICAgICogIGRvZXMgc28gYnkgcmV0dXJuaW5nIGNvbGxhdGU6OmRvX2hhc2goKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFN0YXJ0IG9mIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgRW5kIG9mIHN0cmluZy4KKyAgICAgICAqICBAcmV0dXJuICBIYXNoIHZhbHVlLgorICAgICAgKi8KKyAgICAgIGxvbmcKKyAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8vIFVzZWQgdG8gYWJzdHJhY3Qgb3V0IF9DaGFyVCBiaXRzIGluIHZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucywgYmVsb3cuCisgICAgICBpbnQKKyAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikgY29uc3QgdGhyb3coKTsKKworICAgICAgc2l6ZV90CisgICAgICBfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdCB0aHJvdygpOworCisgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbAorICAgICAgfmNvbGxhdGUoKQorICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSB0d28gc3RyaW5ncy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlCisgICAgICAgKiAgcmV0dXJuZWQuICBAc2VlIGNvbXBhcmUoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8xICBTdGFydCBvZiBzdHJpbmcgMS4KKyAgICAgICAqICBAcGFyYW0gX19oaTEgIEVuZCBvZiBzdHJpbmcgMS4KKyAgICAgICAqICBAcGFyYW0gX19sbzIgIFN0YXJ0IG9mIHN0cmluZyAyLgorICAgICAgICogIEBwYXJhbSBfX2hpMiAgRW5kIG9mIHN0cmluZyAyLgorICAgICAgICogIEByZXR1cm4gIDEgaWYgc3RyaW5nMSA+IHN0cmluZzIsIC0xIGlmIHN0cmluZzEgPCBzdHJpbmcyLCBlbHNlIDAuCisgICAgICAqLworICAgICAgdmlydHVhbCBpbnQKKyAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKKwkJIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRyYW5zZm9ybSBzdHJpbmcgdG8gY29tcGFyYWJsZSBmb3JtLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUKKyAgICAgICAqICByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFN0YXJ0LgorICAgICAgICogIEBwYXJhbSBfX2hpICBFbmQuCisgICAgICAgKiAgQHJldHVybiAgdHJhbnNmb3JtZWQgc3RyaW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKKyAgICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGhhc2ggb2YgYSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgYW5kIHJldHVybnMgYSBoYXNoIG9uIHRoZSBpbnB1dCBzdHJpbmcuICBUaGlzCisgICAgICAgKiAgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFN0YXJ0IG9mIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgRW5kIG9mIHN0cmluZy4KKyAgICAgICAqICBAcmV0dXJuICBIYXNoIHZhbHVlLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgbG9uZworICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOworCisgIC8vIFNwZWNpYWxpemF0aW9ucy4KKyAgdGVtcGxhdGU8PgorICAgIGludAorICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdCB0aHJvdygpOworCisgIHRlbXBsYXRlPD4KKyAgICBzaXplX3QKKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpIGNvbnN0IHRocm93KCk7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgaW50CisgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0IHRocm93KCk7CisKKyAgdGVtcGxhdGU8PgorICAgIHNpemVfdAorICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCkgY29uc3QgdGhyb3coKTsKKyNlbmRpZgorCisgIC8vLyBjbGFzcyBjb2xsYXRlX2J5bmFtZSBbMjIuMi40LjJdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUICAgICAgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGNvbGxhdGU8X0NoYXJUPihfX3JlZnMpCisgICAgICB7CisJaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiQyIpICE9IDAKKwkgICAgJiYgX19idWlsdGluX3N0cmNtcChfX3MsICJQT1NJWCIpICE9IDApCisJICB7CisJICAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY29sbGF0ZSk7CisJICAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jb2xsYXRlLCBfX3MpOworCSAgfQorICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjIGluY2x1ZGUgPGJpdHMvbG9jYWxlX2NsYXNzZXMudGNjPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9sb2NhbGVfY2xhc3Nlcy50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbG9jYWxlX2NsYXNzZXMudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNGQyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbG9jYWxlX2NsYXNzZXMudGNjCkBAIC0wLDAgKzEsMjk4IEBACisvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9sb2NhbGVfY2xhc3Nlcy50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtsb2NhbGV9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKy8vCisKKyNpZm5kZWYgX0xPQ0FMRV9DTEFTU0VTX1RDQworI2RlZmluZSBfTE9DQUxFX0NMQVNTRVNfVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGxvY2FsZTo6CisgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCisgICAgeworICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsKKworICAgICAgX190cnkKKwl7IF9NX2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7IH0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9NX2ltcGwtPl9NX3JlbW92ZV9yZWZlcmVuY2UoKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICAgIGRlbGV0ZSBbXSBfTV9pbXBsLT5fTV9uYW1lc1swXTsKKyAgICAgIF9NX2ltcGwtPl9NX25hbWVzWzBdID0gMDsgICAvLyBVbm5hbWVkLgorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgbG9jYWxlCisgICAgbG9jYWxlOjoKKyAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QKKyAgICB7CisgICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOworICAgICAgX190cnkKKwl7CisJICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfX3RtcC0+X01fcmVtb3ZlX3JlZmVyZW5jZSgpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJvb2wKKyAgICBsb2NhbGU6OgorICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOworICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOworICAgICAgcmV0dXJuIChfX2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBfX3MxLmxlbmd0aCgpLAorCQkJCV9fczIuZGF0YSgpLCBfX3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBmYWNldC4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIGhhc19mYWNldCB0ZXN0cyB0aGUgbG9jYWxlIGFyZ3VtZW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGZhY2V0IHR5cGUKKyAgICogIHByb3ZpZGVkIGFzIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICBGYWNldHMgZGVyaXZlZCBmcm9tIHRoZSBmYWNldAorICAgKiAgcGFyYW1ldGVyIHdpbGwgYWxzbyByZXR1cm4gdHJ1ZS4KKyAgICoKKyAgICogIEB0cGFyYW0gIF9GYWNldCAgVGhlIGZhY2V0IHR5cGUgdG8gdGVzdCB0aGUgcHJlc2VuY2Ugb2YuCisgICAqICBAcGFyYW0gIF9fbG9jICBUaGUgbG9jYWxlIHRvIHRlc3QuCisgICAqICBAcmV0dXJuICB0cnVlIGlmIEBwIF9fbG9jIGNvbnRhaW5zIGEgZmFjZXQgb2YgdHlwZSBfRmFjZXQsIGVsc2UgZmFsc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KKyAgICBib29sCisgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOworICAgICAgY29uc3QgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOworICAgICAgcmV0dXJuIChfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZQorI2lmZGVmIF9fR1hYX1JUVEkKKwkgICAgICAmJiBkeW5hbWljX2Nhc3Q8Y29uc3QgX0ZhY2V0Kj4oX19mYWNldHNbX19pXSkpOworI2Vsc2UKKyAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0Kj4oX19mYWNldHNbX19pXSkpOworI2VuZGlmCisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gYSBmYWNldC4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIHVzZV9mYWNldCBsb29rcyBmb3IgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gYSBmYWNldCBvZiB0eXBlIEZhY2V0CisgICAqICB3aGVyZSBGYWNldCBpcyB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyLiAgSWYgaGFzX2ZhY2V0KGxvY2FsZSkgaXMgdHJ1ZSwKKyAgICogIHRoZXJlIGlzIGEgc3VpdGFibGUgZmFjZXQgdG8gcmV0dXJuLiAgSXQgdGhyb3dzIHN0ZDo6YmFkX2Nhc3QgaWYgdGhlCisgICAqICBsb2NhbGUgZG9lc24ndCBjb250YWluIGEgZmFjZXQgb2YgdHlwZSBGYWNldC4KKyAgICoKKyAgICogIEB0cGFyYW0gIF9GYWNldCAgVGhlIGZhY2V0IHR5cGUgdG8gYWNjZXNzLgorICAgKiAgQHBhcmFtICBfX2xvYyAgVGhlIGxvY2FsZSB0byB1c2UuCisgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gZmFjZXQgb2YgdHlwZSBGYWNldC4KKyAgICogIEB0aHJvdyAgc3RkOjpiYWRfY2FzdCBpZiBAcCBfX2xvYyBkb2Vzbid0IGNvbnRhaW4gYSBmYWNldCBvZiB0eXBlIF9GYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGNvbnN0IF9GYWNldCYKKyAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOworICAgICAgY29uc3QgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOworICAgICAgaWYgKF9faSA+PSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSB8fCAhX19mYWNldHNbX19pXSkKKyAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOworI2lmZGVmIF9fR1hYX1JUVEkKKyAgICAgIHJldHVybiBkeW5hbWljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOworI2Vsc2UKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNldHNbX19pXSk7CisjZW5kaWYKKyAgICB9CisKKworICAvLyBHZW5lcmljIHZlcnNpb24gZG9lcyBub3RoaW5nLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW50CisgICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0IHRocm93ICgpCisgICAgeyByZXR1cm4gMDsgfQorCisgIC8vIEdlbmVyaWMgdmVyc2lvbiBkb2VzIG5vdGhpbmcuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzaXplX3QKKyAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0IHRocm93ICgpCisgICAgeyByZXR1cm4gMDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbnQKKyAgICBjb2xsYXRlPF9DaGFyVD46OgorICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKKwkgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKKyAgICB7CisgICAgICAvLyBzdHJjb2xsIGFzc3VtZXMgemVyby10ZXJtaW5hdGVkIHN0cmluZ3Mgc28gd2UgbWFrZSBhIGNvcHkKKyAgICAgIC8vIGFuZCB0aGVuIHB1dCBhIHplcm8gYXQgdGhlIGVuZC4KKyAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CisgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3R3byhfX2xvMiwgX19oaTIpOworCisgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IF9fb25lLmNfc3RyKCk7CisgICAgICBjb25zdCBfQ2hhclQqIF9fcGVuZCA9IF9fb25lLmRhdGEoKSArIF9fb25lLmxlbmd0aCgpOworICAgICAgY29uc3QgX0NoYXJUKiBfX3EgPSBfX3R3by5jX3N0cigpOworICAgICAgY29uc3QgX0NoYXJUKiBfX3FlbmQgPSBfX3R3by5kYXRhKCkgKyBfX3R3by5sZW5ndGgoKTsKKworICAgICAgLy8gc3RyY29sbCBzdG9wcyB3aGVuIGl0IHNlZXMgYSBudWwgY2hhcmFjdGVyIHNvIHdlIGJyZWFrCisgICAgICAvLyB0aGUgc3RyaW5ncyBpbnRvIHplcm8tdGVybWluYXRlZCBzdWJzdHJpbmdzIGFuZCBwYXNzIHRob3NlCisgICAgICAvLyB0byBzdHJjb2xsLgorICAgICAgZm9yICg7OykKKwl7CisJICBjb25zdCBpbnQgX19yZXMgPSBfTV9jb21wYXJlKF9fcCwgX19xKTsKKwkgIGlmIChfX3JlcykKKwkgICAgcmV0dXJuIF9fcmVzOworCisJICBfX3AgKz0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fcCk7CisJICBfX3EgKz0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fcSk7CisJICBpZiAoX19wID09IF9fcGVuZCAmJiBfX3EgPT0gX19xZW5kKQorCSAgICByZXR1cm4gMDsKKwkgIGVsc2UgaWYgKF9fcCA9PSBfX3BlbmQpCisJICAgIHJldHVybiAtMTsKKwkgIGVsc2UgaWYgKF9fcSA9PSBfX3FlbmQpCisJICAgIHJldHVybiAxOworCisJICBfX3ArKzsKKwkgIF9fcSsrOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIGNvbGxhdGU8X0NoYXJUPjo6c3RyaW5nX3R5cGUKKyAgICBjb2xsYXRlPF9DaGFyVD46OgorICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKKyAgICB7CisgICAgICBzdHJpbmdfdHlwZSBfX3JldDsKKworICAgICAgLy8gc3RyeGZybSBhc3N1bWVzIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIHNvIHdlIG1ha2UgYSBjb3B5CisgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N0cihfX2xvLCBfX2hpKTsKKworICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSBfX3N0ci5jX3N0cigpOworICAgICAgY29uc3QgX0NoYXJUKiBfX3BlbmQgPSBfX3N0ci5kYXRhKCkgKyBfX3N0ci5sZW5ndGgoKTsKKworICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xvKSAqIDI7CisKKyAgICAgIF9DaGFyVCogX19jID0gbmV3IF9DaGFyVFtfX2xlbl07CisKKyAgICAgIF9fdHJ5CisJeworCSAgLy8gc3RyeGZybSBzdG9wcyB3aGVuIGl0IHNlZXMgYSBudWwgY2hhcmFjdGVyIHNvIHdlIGJyZWFrCisJICAvLyB0aGUgc3RyaW5nIGludG8gemVyby10ZXJtaW5hdGVkIHN1YnN0cmluZ3MgYW5kIHBhc3MgdGhvc2UKKwkgIC8vIHRvIHN0cnhmcm0uCisJICBmb3IgKDs7KQorCSAgICB7CisJICAgICAgLy8gRmlyc3QgdHJ5IGEgYnVmZmVyIHBlcmhhcHMgYmlnIGVub3VnaC4KKwkgICAgICBzaXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX3AsIF9fbGVuKTsKKwkgICAgICAvLyBJZiB0aGUgYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLCB0cnkgYWdhaW4gd2l0aCB0aGUKKwkgICAgICAvLyBjb3JyZWN0IHNpemUuCisJICAgICAgaWYgKF9fcmVzID49IF9fbGVuKQorCQl7CisJCSAgX19sZW4gPSBfX3JlcyArIDE7CisJCSAgZGVsZXRlIFtdIF9fYywgX19jID0gMDsKKwkJICBfX2MgPSBuZXcgX0NoYXJUW19fbGVuXTsKKwkJICBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fcCwgX19sZW4pOworCQl9CisKKwkgICAgICBfX3JldC5hcHBlbmQoX19jLCBfX3Jlcyk7CisJICAgICAgX19wICs9IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChfX3ApOworCSAgICAgIGlmIChfX3AgPT0gX19wZW5kKQorCQlicmVhazsKKworCSAgICAgIF9fcCsrOworCSAgICAgIF9fcmV0LnB1c2hfYmFjayhfQ2hhclQoKSk7CisJICAgIH0KKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBkZWxldGUgW10gX19jOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorCisgICAgICBkZWxldGUgW10gX19jOworCisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBsb25nCisgICAgY29sbGF0ZTxfQ2hhclQ+OjoKKyAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwgPSAwOworICAgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fbG8pCisJX192YWwgPQorCSAgKl9fbG8gKyAoKF9fdmFsIDw8IDcpCisJCSAgIHwgKF9fdmFsID4+IChfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8dW5zaWduZWQgbG9uZz46OgorCQkJCV9fZGlnaXRzIC0gNykpKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nPihfX3ZhbCk7CisgICAgfQorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD47CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgY29sbGF0ZTx3Y2hhcl90PiYKKyAgICB1c2VfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xvY2FsZV9mYWNldHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2ZjYWMyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xvY2FsZV9mYWNldHMuaApAQCAtMCwwICsxLDI2MTAgQEAKKy8vIExvY2FsZSBzdXBwb3J0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2xvY2FsZV9mYWNldHMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMSAgTG9jYWxlcworLy8KKworI2lmbmRlZiBfTE9DQUxFX0ZBQ0VUU19ICisjZGVmaW5lIF9MT0NBTEVfRkFDRVRTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjd2N0eXBlPgkvLyBGb3Igd2N0eXBlX3QKKyNpbmNsdWRlIDxjY3R5cGU+CisjaW5jbHVkZSA8Yml0cy9jdHlwZV9iYXNlLmg+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGJpdHMvaW9zX2Jhc2UuaD4gIC8vIEZvciBpb3NfYmFzZSwgaW9zX2Jhc2U6Omlvc3RhdGUKKyNpbmNsdWRlIDxzdHJlYW1idWY+CisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvbnVtZXJpY190cmFpdHMuaD4KKyNpbmNsdWRlIDxiaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gTkI6IERvbid0IGluc3RhbnRpYXRlIHJlcXVpcmVkIHdjaGFyX3QgZmFjZXRzIGlmIG5vIHdjaGFyX3Qgc3VwcG9ydC4KKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorIyBkZWZpbmUgIF9HTElCQ1hYX05VTV9GQUNFVFMgMjgKKyNlbHNlCisjIGRlZmluZSAgX0dMSUJDWFhfTlVNX0ZBQ0VUUyAxNAorI2VuZGlmCisKKyAgLy8gQ29udmVydCBzdHJpbmcgdG8gbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UcCBhbmQgc3RvcmUgcmVzdWx0cy4KKyAgLy8gTkI6IFRoaXMgaXMgc3BlY2lhbGl6ZWQgZm9yIGFsbCByZXF1aXJlZCB0eXBlcywgdGhlcmUgaXMgbm8KKyAgLy8gZ2VuZXJpYyBkZWZpbml0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqLCBfVHAmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCisJCSAgIGNvbnN0IF9fY19sb2NhbGUmKSB0aHJvdygpOworCisgIC8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBmb3IgcmVxdWlyZWQgdHlwZXMuCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciosIGZsb2F0JiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAorCQkgICBjb25zdCBfX2NfbG9jYWxlJikgdGhyb3coKTsKKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqLCBkb3VibGUmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCisJCSAgIGNvbnN0IF9fY19sb2NhbGUmKSB0aHJvdygpOworCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciosIGxvbmcgZG91YmxlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAorCQkgICBjb25zdCBfX2NfbG9jYWxlJikgdGhyb3coKTsKKworICAvLyBOQjogX19wYWQgaXMgYSBzdHJ1Y3QsIHJhdGhlciB0aGFuIGEgZnVuY3Rpb24sIHNvIGl0IGNhbiBiZQorICAvLyBwYXJ0aWFsbHktc3BlY2lhbGl6ZWQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdHJ1Y3QgX19wYWQKKyAgICB7CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywKKwkgICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBzdHJlYW1zaXplIF9fbmV3bGVuLCBzdHJlYW1zaXplIF9fb2xkbGVuKTsKKyAgICB9OworCisgIC8vIFVzZWQgYnkgYm90aCBudW1lcmljIGFuZCBtb25ldGFyeSBmYWNldHMuCisgIC8vIEluc2VydHMgImdyb3VwIHNlcGFyYXRvciIgY2hhcmFjdGVycyBpbnRvIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMuCisgIC8vIEl0J3MgcmVjdXJzaXZlLCBvbmUgaXRlcmF0aW9uIHBlciBncm91cC4gIEl0IG1vdmVzIHRoZSBjaGFyYWN0ZXJzCisgIC8vIGluIHRoZSBidWZmZXIgdGhpcyB3YXk6ICJ4eHh4MTIzNDUiIC0+ICIxMiwzNDV4eHgiLiAgQ2FsbCB0aGlzCisgIC8vIG9ubHkgd2l0aCBfX2dzaXplICE9IDAuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfQ2hhclQqCisgICAgX19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX3NlcCwKKwkJICAgY29uc3QgY2hhciogX19nYmVnLCBzaXplX3QgX19nc2l6ZSwKKwkJICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9fbGFzdCk7CisKKyAgLy8gVGhpcyB0ZW1wbGF0ZSBwZXJtaXRzIHNwZWNpYWxpemluZyBmYWNldCBvdXRwdXQgY29kZSBmb3IKKyAgLy8gb3N0cmVhbWJ1Zl9pdGVyYXRvci4gIEZvciBvc3RyZWFtYnVmX2l0ZXJhdG9yLCBzcHV0biBpcworICAvLyBzaWduaWZpY2FudGx5IG1vcmUgZWZmaWNpZW50IHRoYW4gaW5jcmVtZW50aW5nIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZQorICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPgorICAgIF9fd3JpdGUob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcywgY29uc3QgX0NoYXJUKiBfX3dzLCBpbnQgX19sZW4pCisgICAgeworICAgICAgX19zLl9NX3B1dChfX3dzLCBfX2xlbik7CisgICAgICByZXR1cm4gX19zOworICAgIH0KKworICAvLyBUaGlzIGlzIHRoZSB1bnNwZWNpYWxpemVkIGZvcm0gb2YgdGhlIHRlbXBsYXRlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIGlubGluZQorICAgIF9PdXRJdGVyCisgICAgX193cml0ZShfT3V0SXRlciBfX3MsIGNvbnN0IF9DaGFyVCogX193cywgaW50IF9fbGVuKQorICAgIHsKKyAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyBfX2orKywgKytfX3MpCisJKl9fcyA9IF9fd3NbX19qXTsKKyAgICAgIHJldHVybiBfX3M7CisgICAgfQorCisKKyAgLy8gMjIuMi4xLjEgIFRlbXBsYXRlIGNsYXNzIGN0eXBlCisgIC8vIEluY2x1ZGUgaG9zdCBhbmQgY29uZmlndXJhdGlvbiBzcGVjaWZpYyBjdHlwZSBlbnVtcyBmb3IgY3R5cGVfYmFzZS4KKworICAvKioKKyAgICogIEBicmllZiAgQ29tbW9uIGJhc2UgZm9yIGN0eXBlIGZhY2V0CisgICAqCisgICAqICBUaGlzIHRlbXBsYXRlIGNsYXNzIHByb3ZpZGVzIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgcHVibGljIGZ1bmN0aW9ucworICAgKiAgdGhhdCBmb3J3YXJkIHRvIHRoZSBwcm90ZWN0ZWQgdmlydHVhbCBmdW5jdGlvbnMuCisgICAqCisgICAqICBUaGlzIHRlbXBsYXRlIGFsc28gcHJvdmlkZXMgYWJzdHJhY3Qgc3R1YnMgZm9yIHRoZSBwcm90ZWN0ZWQgdmlydHVhbAorICAgKiAgZnVuY3Rpb25zLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgX19jdHlwZV9hYnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlwZV9iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy8vIFR5cGVkZWYgZm9yIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIKKyAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUZXN0IGNoYXJfdHlwZSBjbGFzc2lmaWNhdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaW5kcyBhIG1hc2sgTSBmb3IgQGEgX19jIGFuZCBjb21wYXJlcyBpdCB0bworICAgICAgICogIG1hc2sgQGEgX19tLiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcgdGhlIHZhbHVlIG9mCisgICAgICAgKiAgY3R5cGU8Y2hhcl90eXBlPjo6ZG9faXMoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJfdHlwZSB0byBjb21wYXJlIHRoZSBtYXNrIG9mLgorICAgICAgICogIEBwYXJhbSBfX20gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICAoTSAmIF9fbSkgIT0gMC4KKyAgICAgICovCisgICAgICBib29sCisgICAgICBpcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIG1hc2sgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIG1hc2sgZm9yIGVhY2ggY2hhcl90eXBlIGluIHRoZSByYW5nZSBbbG8saGkpCisgICAgICAgKiAgYW5kIHN1Y2Nlc3NpdmVseSB3cml0ZXMgaXQgdG8gdmVjLiAgdmVjIG11c3QgaGF2ZSBhcyBtYW55IGVsZW1lbnRzCisgICAgICAgKiAgYXMgdGhlIGNoYXIgYXJyYXkuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZyB0aGUgdmFsdWUgb2YKKyAgICAgICAqICBjdHlwZTxjaGFyX3R5cGU+Ojpkb19pcygpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19sbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9fdmVjICBQb2ludGVyIHRvIGFuIGFycmF5IG9mIG1hc2sgc3RvcmFnZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgY2hhcl90eXBlIG1hdGNoaW5nIGEgbWFzaworICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhbmQgcmV0dXJucyB0aGUgZmlyc3QgY2hhcl90eXBlIGMgaW4KKyAgICAgICAqICBbbG8saGkpIGZvciB3aGljaCBpcyhtLGMpIGlzIHRydWUuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIGN0eXBlPGNoYXJfdHlwZT46OmRvX3NjYW5faXMoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbSAgVGhlIG1hc2sgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBQb2ludGVyIHRvIG1hdGNoaW5nIGNoYXJfdHlwZSBpZiBmb3VuZCwgZWxzZSBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBjaGFyX3R5cGUgbm90IG1hdGNoaW5nIGEgbWFzaworICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhbmQgcmV0dXJucyB0aGUgZmlyc3QgY2hhcl90eXBlIGMgaW4KKyAgICAgICAqICBbbG8saGkpIGZvciB3aGljaCBpcyhtLGMpIGlzIGZhbHNlLiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcKKyAgICAgICAqICBjdHlwZTxjaGFyX3R5cGU+Ojpkb19zY2FuX25vdCgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19tICBUaGUgbWFzayB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gZmlyc3QgY2hhciBpbiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgUG9pbnRlciB0byBub24tbWF0Y2hpbmcgY2hhciBpZiBmb3VuZCwgZWxzZSBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgYXJndW1lbnQgdG8gdXBwZXJjYXNlIGlmIHBvc3NpYmxlLgorICAgICAgICogIElmIG5vdCBwb3NzaWJsZSAoZm9yIGV4YW1wbGUsICcyJyksIHJldHVybnMgdGhlIGFyZ3VtZW50LiAgSXQgZG9lcworICAgICAgICogIHNvIGJ5IHJldHVybmluZyBjdHlwZTxjaGFyX3R5cGU+Ojpkb190b3VwcGVyKCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyX3R5cGUgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgdXBwZXJjYXNlIGNoYXJfdHlwZSBpZiBjb252ZXJ0aWJsZSwgZWxzZSBAYSBfX2MuCisgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICB0b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBlYWNoIGNoYXJfdHlwZSBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGVsZW1lbnRzIHJlbWFpbiB1bnRvdWNoZWQuICBJdCBkb2VzIHNvCisgICAgICAgKiAgYnkgcmV0dXJuaW5nIGN0eXBlPGNoYXJfdHlwZT46OiBkb190b3VwcGVyKGxvLCBoaSkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byBsb3dlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGFyZ3VtZW50IHRvIGxvd2VyY2FzZSBpZiBwb3NzaWJsZS4gIElmCisgICAgICAgKiAgbm90IHBvc3NpYmxlIChmb3IgZXhhbXBsZSwgJzInKSwgcmV0dXJucyB0aGUgYXJndW1lbnQuICBJdCBkb2VzIHNvCisgICAgICAgKiAgYnkgcmV0dXJuaW5nIGN0eXBlPGNoYXJfdHlwZT46OmRvX3RvbG93ZXIoYykuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyX3R5cGUgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbG93ZXJjYXNlIGNoYXJfdHlwZSBpZiBjb252ZXJ0aWJsZSwgZWxzZSBAYSBfX2MuCisgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fYyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBlYWNoIGNoYXJfdHlwZSBpbiB0aGUgcmFuZ2UgW19fbG8sX19oaSkgdG8KKyAgICAgICAqICBsb3dlcmNhc2UgaWYgcG9zc2libGUuICBPdGhlciBlbGVtZW50cyByZW1haW4gdW50b3VjaGVkLiAgSXQgZG9lcyBzbworICAgICAgICogIGJ5IHJldHVybmluZyBjdHlwZTxjaGFyX3R5cGU+OjogZG9fdG9sb3dlcihfX2xvLCBfX2hpKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgY29uc3QgY2hhcl90eXBlKgorICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBXaWRlbiBjaGFyIHRvIGNoYXJfdHlwZQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIGFyZ3VtZW50IHRvIGNoYXJfdHlwZSB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcKKyAgICAgICAqICBjdHlwZTxjaGFyX3R5cGU+Ojpkb193aWRlbihjKS4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhciB0byBjb252ZXJ0LgorICAgICAgICogIEByZXR1cm4gIFRoZSBjb252ZXJ0ZWQgY2hhcl90eXBlLgorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZQorICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW4gYXJyYXkgdG8gY2hhcl90eXBlCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgZWFjaCBjaGFyIGluIHRoZSBpbnB1dCB0byBjaGFyX3R5cGUgdXNpbmcgdGhlCisgICAgICAgKiAgc2ltcGxlc3QgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nCisgICAgICAgKiAgY3R5cGU8Y2hhcl90eXBlPjo6ZG9fd2lkZW4oYykuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX3RvICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIGNvbnN0IGNoYXIqCisgICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyBjaGFyX3R5cGUgdG8gY2hhcgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyX3R5cGUgdG8gY2hhciB1c2luZyB0aGUgc2ltcGxlc3QKKyAgICAgICAqICByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIGRmYXVsdCBpcworICAgICAgICogIHJldHVybmVkIGluc3RlYWQuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIGN0eXBlPGNoYXJfdHlwZT46OmRvX25hcnJvdyhfX2MpLgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyX3R5cGUgdG8gY29udmVydC4KKyAgICAgICAqICBAcGFyYW0gX19kZmF1bHQgIENoYXIgdG8gcmV0dXJuIGlmIGNvbnZlcnNpb24gZmFpbHMuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGNvbnZlcnRlZCBjaGFyLgorICAgICAgKi8KKyAgICAgIGNoYXIKKyAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTmFycm93IGFycmF5IHRvIGNoYXIgYXJyYXkKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBlYWNoIGNoYXJfdHlwZSBpbiB0aGUgaW5wdXQgdG8gY2hhciB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uIGFuZCB3cml0ZXMgdGhlIHJlc3VsdHMgdG8gdGhlCisgICAgICAgKiAgZGVzdGluYXRpb24gYXJyYXkuICBGb3IgYW55IGNoYXJfdHlwZSBpbiB0aGUgaW5wdXQgdGhhdCBjYW5ub3QgYmUKKyAgICAgICAqICBjb252ZXJ0ZWQsIEBhIGRmYXVsdCBpcyB1c2VkIGluc3RlYWQuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIGN0eXBlPGNoYXJfdHlwZT46OmRvX25hcnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190bykuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2RmYXVsdCAgQ2hhciB0byB1c2UgaWYgY29udmVyc2lvbiBmYWlscy4KKyAgICAgICAqICBAcGFyYW0gX190byAgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gYXJyYXkuCisgICAgICAgKiAgQHJldHVybiAgQGEgX19oaS4KKyAgICAgICovCisgICAgICBjb25zdCBjaGFyX3R5cGUqCisgICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCisJICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX190bykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBmYWNldChfX3JlZnMpIHsgfQorCisgICAgICB2aXJ0dWFsCisgICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGVzdCBjaGFyX3R5cGUgY2xhc3NpZmljYXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBtYXNrIE0gZm9yIEBhIGMgYW5kIGNvbXBhcmVzIGl0IHRvIG1hc2sgQGEgbS4KKyAgICAgICAqCisgICAgICAgKiAgZG9faXMoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgY2xhc3NpZnlpbmcuICBkb19pcygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyX3R5cGUgdG8gZmluZCB0aGUgbWFzayBvZi4KKyAgICAgICAqICBAcGFyYW0gX19tICBUaGUgbWFzayB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHJldHVybiAgKE0gJiBfX20pICE9IDAuCisgICAgICAqLworICAgICAgdmlydHVhbCBib29sCisgICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIG1hc2sgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIG1hc2sgZm9yIGVhY2ggY2hhcl90eXBlIGluIHRoZSByYW5nZSBbbG8saGkpCisgICAgICAgKiAgYW5kIHN1Y2Nlc3NpdmVseSB3cml0ZXMgaXQgdG8gdmVjLiAgdmVjIG11c3QgaGF2ZSBhcyBtYW55IGVsZW1lbnRzCisgICAgICAgKiAgYXMgdGhlIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBkb19pcygpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBjbGFzc2lmeWluZy4gIGRvX2lzKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX3ZlYyAgUG9pbnRlciB0byBhbiBhcnJheSBvZiBtYXNrIHN0b3JhZ2UuCisgICAgICAgKiAgQHJldHVybiAgQGEgX19oaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAorCSAgICBtYXNrKiBfX3ZlYykgY29uc3QgPSAwOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgY2hhcl90eXBlIG1hdGNoaW5nIG1hc2sKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgYW5kIHJldHVybnMgdGhlIGZpcnN0IGNoYXJfdHlwZSBjIGluCisgICAgICAgKiAgW19fbG8sX19oaSkgZm9yIHdoaWNoIGlzKF9fbSxjKSBpcyB0cnVlLgorICAgICAgICoKKyAgICAgICAqICBkb19zY2FuX2lzKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIG1hdGNoIHNlYXJjaGluZy4gIGRvX2lzKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbSAgVGhlIG1hc2sgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBQb2ludGVyIHRvIGEgbWF0Y2hpbmcgY2hhcl90eXBlIGlmIGZvdW5kLCBlbHNlIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCisJCSBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGNoYXJfdHlwZSBub3QgbWF0Y2hpbmcgbWFzaworICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgY2hhcl90eXBlIGMgb2YgW2xvLGhpKSBmb3Igd2hpY2ggaXMobSxjKSBpcyBmYWxzZS4KKyAgICAgICAqCisgICAgICAgKiAgZG9fc2Nhbl9pcygpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBtYXRjaCBzZWFyY2hpbmcuICBkb19pcygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX20gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gX19sbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgUG9pbnRlciB0byBhIG5vbi1tYXRjaGluZyBjaGFyX3R5cGUgaWYgZm91bmQsIGVsc2UgQGEgX19oaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCisJCSAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byB1cHBlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2hhcl90eXBlIGFyZ3VtZW50IHRvIHVwcGVyY2FzZQorICAgICAgICogIGlmIHBvc3NpYmxlLiAgSWYgbm90IHBvc3NpYmxlIChmb3IgZXhhbXBsZSwgJzInKSwgcmV0dXJucyB0aGUKKyAgICAgICAqICBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fdG91cHBlcigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICB1cHBlcmNhc2luZy4gIGRvX3RvdXBwZXIoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvcgorICAgICAgICogIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhcl90eXBlIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHVwcGVyY2FzZSBjaGFyX3R5cGUgaWYgY29udmVydGlibGUsIGVsc2UgQGEgX19jLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY2hhcl90eXBlCisgICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhcl90eXBlIGluIHRoZSByYW5nZSBbX19sbyxfX2hpKQorICAgICAgICogIHRvIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGVsZW1lbnRzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvdXBwZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgdXBwZXJjYXNpbmcuICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byBsb3dlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgYXJndW1lbnQgdG8gbG93ZXJjYXNlIGlmCisgICAgICAgKiAgcG9zc2libGUuICBJZiBub3QgcG9zc2libGUgKGZvciBleGFtcGxlLCAnMicpLCByZXR1cm5zIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fdG9sb3dlcigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBsb3dlcmNhc2luZy4gIGRvX3RvbG93ZXIoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvcgorICAgICAgICogIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhcl90eXBlIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGxvd2VyY2FzZSBjaGFyX3R5cGUgaWYgY29udmVydGlibGUsIGVsc2UgQGEgX19jLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY2hhcl90eXBlCisgICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhcl90eXBlIGluIHRoZSByYW5nZSBbX19sbyxfX2hpKQorICAgICAgICogIHRvIGxvd2VyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGVsZW1lbnRzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvbG93ZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbG93ZXJjYXNpbmcuICBkb190b2xvd2VyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW4gY2hhcgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gY29udmVydHMgdGhlIGNoYXIgdG8gY2hhcl90eXBlIHVzaW5nIHRoZQorICAgICAgICogIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24uCisgICAgICAgKgorICAgICAgICogIGRvX3dpZGVuKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHdpZGVuaW5nLiAgZG9fd2lkZW4oKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGNvbnZlcnRlZCBjaGFyX3R5cGUKKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0ID0gMDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBXaWRlbiBjaGFyIGFycmF5CisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgZWFjaCBjaGFyIGluIHRoZSBpbnB1dCB0byBjaGFyX3R5cGUgdXNpbmcgdGhlCisgICAgICAgKiAgc2ltcGxlc3QgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgZG9fd2lkZW4oKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgd2lkZW5pbmcuICBkb193aWRlbigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX3RvICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKKyAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QgPSAwOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyBjaGFyX3R5cGUgdG8gY2hhcgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gY29udmVydHMgdGhlIGFyZ3VtZW50IHRvIGNoYXIgdXNpbmcgdGhlCisgICAgICAgKiAgc2ltcGxlc3QgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCBkZmF1bHQKKyAgICAgICAqICBpcyByZXR1cm5lZCBpbnN0ZWFkLgorICAgICAgICoKKyAgICAgICAqICBkb19uYXJyb3coKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbmFycm93aW5nLiAgZG9fbmFycm93KCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhcl90eXBlIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHBhcmFtIF9fZGZhdWx0ICBDaGFyIHRvIHJldHVybiBpZiBjb252ZXJzaW9uIGZhaWxzLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjb252ZXJ0ZWQgY2hhci4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXIKKyAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTmFycm93IGNoYXJfdHlwZSBhcnJheSB0byBjaGFyCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyBlYWNoIGNoYXJfdHlwZSBpbiB0aGUgcmFuZ2UKKyAgICAgICAqICBbX19sbyxfX2hpKSB0byBjaGFyIHVzaW5nIHRoZSBzaW1wbGVzdCByZWFzb25hYmxlCisgICAgICAgKiAgdHJhbnNmb3JtYXRpb24gYW5kIHdyaXRlcyB0aGUgcmVzdWx0cyB0byB0aGUgZGVzdGluYXRpb24KKyAgICAgICAqICBhcnJheS4gIEZvciBhbnkgZWxlbWVudCBpbiB0aGUgaW5wdXQgdGhhdCBjYW5ub3QgYmUKKyAgICAgICAqICBjb252ZXJ0ZWQsIEBhIF9fZGZhdWx0IGlzIHVzZWQgaW5zdGVhZC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fbmFycm93KCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIG5hcnJvd2luZy4gIGRvX25hcnJvdygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2RmYXVsdCAgQ2hhciB0byB1c2UgaWYgY29udmVyc2lvbiBmYWlscy4KKyAgICAgICAqICBAcGFyYW0gX190byAgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gYXJyYXkuCisgICAgICAgKiAgQHJldHVybiAgQGEgX19oaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKKyAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKKwkJY2hhciBfX2RmYXVsdCwgY2hhciogX190bykgY29uc3QgPSAwOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgY3R5cGUgZmFjZXQuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIHRlbXBsYXRlIGNsYXNzIGRlZmluZXMgY2xhc3NpZmljYXRpb24gYW5kIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvcgorICAgKiAgY2hhcmFjdGVyIHNldHMuICBJdCB3cmFwcyBjY3R5cGUgZnVuY3Rpb25hbGl0eS4gIEN0eXBlIGdldHMgdXNlZCBieQorICAgKiAgc3RyZWFtcyBmb3IgbWFueSBJL08gb3BlcmF0aW9ucy4KKyAgICoKKyAgICogIFRoaXMgdGVtcGxhdGUgcHJvdmlkZXMgdGhlIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0aGUgZGV2ZWxvcGVyCisgICAqICB3aWxsIGhhdmUgdG8gcmVwbGFjZSBpbiBhIGRlcml2ZWQgY2xhc3Mgb3Igc3BlY2lhbGl6YXRpb24gdG8gbWFrZSBhCisgICAqICB3b3JraW5nIGZhY2V0LiAgVGhlIHB1YmxpYyBmdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdGhlbSBhcmUgZGVmaW5lZCBpbgorICAgKiAgX19jdHlwZV9hYnN0cmFjdF9iYXNlLCB0byBhbGxvdyBmb3IgaW1wbGVtZW50YXRpb24gZmxleGliaWxpdHkuICBTZWUKKyAgICogIGN0eXBlPHdjaGFyX3Q+IGZvciBhbiBleGFtcGxlLiAgVGhlIGZ1bmN0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbgorICAgKiAgX19jdHlwZV9hYnN0cmFjdF9iYXNlLgorICAgKgorICAgKiAgTm90ZTogaW1wbGVtZW50YXRpb25zIGFyZSBwcm92aWRlZCBmb3IgYWxsIHRoZSBwcm90ZWN0ZWQgdmlydHVhbAorICAgKiAgZnVuY3Rpb25zLCBidXQgd2lsbCBsaWtlbHkgbm90IGJlIHVzZWZ1bC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+OjptYXNrIG1hc2s7CisKKyAgICAgIC8vLyBUaGUgZmFjZXQgaWQgZm9yIGN0eXBlPGNoYXJfdHlwZT4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQkJaWQ7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQorCisgICBwcm90ZWN0ZWQ6CisgICAgICB2aXJ0dWFsCisgICAgICB+Y3R5cGUoKTsKKworICAgICAgdmlydHVhbCBib29sCisgICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKKworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKKwkJICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKKworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKKworICAgICAgdmlydHVhbCBjaGFyX3R5cGUKKyAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgY2hhcl90eXBlCisgICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKKyAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKKworICAgICAgdmlydHVhbCBjaGFyCisgICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKKworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCisJCWNoYXIgX19kZmF1bHQsIGNoYXIqIF9fdG8pIGNvbnN0OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGxvY2FsZTo6aWQgY3R5cGU8X0NoYXJUPjo6aWQ7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRoZSBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbi4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoaXMgY2xhc3MgZGVmaW5lcyBjbGFzc2lmaWNhdGlvbiBhbmQgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yCisgICAqICB0aGUgY2hhciB0eXBlLiAgSXQgZ2V0cyB1c2VkIGJ5IGNoYXIgc3RyZWFtcyBmb3IgbWFueSBJL08KKyAgICogIG9wZXJhdGlvbnMuICBUaGUgY2hhciBzcGVjaWFsaXphdGlvbiBwcm92aWRlcyBhIG51bWJlciBvZgorICAgKiAgb3B0aW1pemF0aW9ucyBhcyB3ZWxsLgorICAqLworICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICAvLy8gVHlwZWRlZiBmb3IgdGhlIHRlbXBsYXRlIHBhcmFtZXRlciBjaGFyLgorICAgICAgdHlwZWRlZiBjaGFyCQljaGFyX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBEYXRhIE1lbWJlcnM6CisgICAgICBfX2NfbG9jYWxlCQlfTV9jX2xvY2FsZV9jdHlwZTsKKyAgICAgIGJvb2wJCQlfTV9kZWw7CisgICAgICBfX3RvX3R5cGUJCQlfTV90b3VwcGVyOworICAgICAgX190b190eXBlCQkJX01fdG9sb3dlcjsKKyAgICAgIGNvbnN0IG1hc2sqCQlfTV90YWJsZTsKKyAgICAgIG11dGFibGUgY2hhcgkJX01fd2lkZW5fb2s7CisgICAgICBtdXRhYmxlIGNoYXIJCV9NX3dpZGVuWzEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSldOworICAgICAgbXV0YWJsZSBjaGFyCQlfTV9uYXJyb3dbMSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KC0xKV07CisgICAgICBtdXRhYmxlIGNoYXIJCV9NX25hcnJvd19vazsJLy8gMCB1bmluaXRpYWxpemVkLCAxIGluaXQsCisJCQkJCQkvLyAyIG1lbWNweSBjYW4ndCBiZSB1c2VkCisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gVGhlIGZhY2V0IGlkIGZvciBjdHlwZTxjaGFyPgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQgICAgICAgIGlkOworICAgICAgLy8vIFRoZSBzaXplIG9mIHRoZSBtYXNrIHRhYmxlLiAgSXQgaXMgU0NIQVJfTUFYICsgMS4KKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgICAgICB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KC0xKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX190YWJsZSBJZiBub24temVybywgdGFibGUgaXMgdXNlZCBhcyB0aGUgcGVyLWNoYXIgbWFzay4KKyAgICAgICAqICAgICAgICAgICAgICAgRWxzZSBjbGFzc2ljX3RhYmxlKCkgaXMgdXNlZC4KKyAgICAgICAqICBAcGFyYW0gX19kZWwgICBJZiB0cnVlLCBwYXNzZXMgb3duZXJzaGlwIG9mIHRhYmxlIHRvIHRoaXMgZmFjZXQuCisgICAgICAgKiAgQHBhcmFtIF9fcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgc3RhdGljIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBpbml0aWFsIEMgbG9jYWxlIGZhY2V0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jbG9jICBIYW5kbGUgdG8gQyBsb2NhbGUgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gX190YWJsZSBJZiBub24temVybywgdGFibGUgaXMgdXNlZCBhcyB0aGUgcGVyLWNoYXIgbWFzay4KKyAgICAgICAqICBAcGFyYW0gX19kZWwgICBJZiB0cnVlLCBwYXNzZXMgb3duZXJzaGlwIG9mIHRhYmxlIHRvIHRoaXMgZmFjZXQuCisgICAgICAgKiAgQHBhcmFtIF9fcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKKwkgICAgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRlc3QgY2hhciBjbGFzc2lmaWNhdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb21wYXJlcyB0aGUgbWFzayB0YWJsZVtjXSB0byBAYSBfX20uCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyIHRvIGNvbXBhcmUgdGhlIG1hc2sgb2YuCisgICAgICAgKiAgQHBhcmFtIF9fbSAgVGhlIG1hc2sgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEByZXR1cm4gIFRydWUgaWYgX19tICYgdGFibGVbX19jXSBpcyB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAqLworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGEgbWFzayBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgbWFzayBmb3IgZWFjaCBjaGFyIGluIHRoZSByYW5nZSBbbG8sIGhpKSBhbmQKKyAgICAgICAqICBzdWNjZXNzaXZlbHkgd3JpdGVzIGl0IHRvIHZlYy4gIHZlYyBtdXN0IGhhdmUgYXMgbWFueSBlbGVtZW50cyBhcworICAgICAgICogIHRoZSBjaGFyIGFycmF5LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19sbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9fdmVjICBQb2ludGVyIHRvIGFuIGFycmF5IG9mIG1hc2sgc3RvcmFnZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIGlubGluZSBjb25zdCBjaGFyKgorICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgY2hhciBtYXRjaGluZyBhIG1hc2sKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgYW5kIHJldHVybnMgdGhlIGZpcnN0IGNoYXIgaW4gW2xvLGhpKSBmb3IKKyAgICAgICAqICB3aGljaCBpcyhtLGNoYXIpIGlzIHRydWUuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX20gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gX19sbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgUG9pbnRlciB0byBhIG1hdGNoaW5nIGNoYXIgaWYgZm91bmQsIGVsc2UgQGEgX19oaS4KKyAgICAgICovCisgICAgICBpbmxpbmUgY29uc3QgY2hhcioKKyAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgY2hhciBub3QgbWF0Y2hpbmcgYSBtYXNrCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcgorICAgICAgICogIGluIFtfX2xvLF9faGkpIGZvciB3aGljaCBpcyhtLGNoYXIpIGlzIGZhbHNlLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19tICBUaGUgbWFzayB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIFBvaW50ZXIgdG8gYSBub24tbWF0Y2hpbmcgY2hhciBpZiBmb3VuZCwgZWxzZSBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIGlubGluZSBjb25zdCBjaGFyKgorICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgdG8gdXBwZXJjYXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIGFyZ3VtZW50IHRvIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4KKyAgICAgICAqICBJZiBub3QgcG9zc2libGUgKGZvciBleGFtcGxlLCAnMicpLCByZXR1cm5zIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgdG91cHBlcigpIGFjdHMgYXMgaWYgaXQgcmV0dXJucyBjdHlwZTxjaGFyPjo6ZG9fdG91cHBlcihjKS4KKyAgICAgICAqICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHVwcGVyY2FzZSBjaGFyIGlmIGNvbnZlcnRpYmxlLCBlbHNlIEBhIF9fYy4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgYXJyYXkgdG8gdXBwZXJjYXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW19fbG8sX19oaSkgdG8gdXBwZXJjYXNlCisgICAgICAgKiAgaWYgcG9zc2libGUuICBPdGhlciBjaGFycyByZW1haW4gdW50b3VjaGVkLgorICAgICAgICoKKyAgICAgICAqICB0b3VwcGVyKCkgYWN0cyBhcyBpZiBpdCByZXR1cm5zIGN0eXBlPGNoYXI+OjogZG9fdG91cHBlcihfX2xvLCBfX2hpKS4KKyAgICAgICAqICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIGZpcnN0IGNoYXIgaW4gcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgY29uc3QgY2hhcl90eXBlKgorICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2hhciBhcmd1bWVudCB0byBsb3dlcmNhc2UgaWYgcG9zc2libGUuCisgICAgICAgKiAgSWYgbm90IHBvc3NpYmxlIChmb3IgZXhhbXBsZSwgJzInKSwgcmV0dXJucyB0aGUgYXJndW1lbnQuCisgICAgICAgKgorICAgICAgICogIHRvbG93ZXIoKSBhY3RzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIoX19jKS4KKyAgICAgICAqICBkb190b2xvd2VyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGxvd2VyY2FzZSBjaGFyIGlmIGNvbnZlcnRpYmxlLCBlbHNlIEBhIF9fYy4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgYXJyYXkgdG8gbG93ZXJjYXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0byBsb3dlcmNhc2UKKyAgICAgICAqICBpZiBwb3NzaWJsZS4gIE90aGVyIGNoYXJzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIHRvbG93ZXIoKSBhY3RzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OiBkb190b2xvd2VyKF9fbG8sIF9faGkpLgorICAgICAgICogIGRvX3RvbG93ZXIoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gZmlyc3QgY2hhciBpbiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgQGEgX19oaS4KKyAgICAgICovCisgICAgICBjb25zdCBjaGFyX3R5cGUqCisgICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBfX2hpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFdpZGVuIGNoYXIKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2hhciB0byBjaGFyX3R5cGUgdXNpbmcgdGhlIHNpbXBsZXN0CisgICAgICAgKiAgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIEZvciBhbiB1bmRlcml2ZWQgY3R5cGU8Y2hhcj4gZmFjZXQsIHRoZQorICAgICAgICogIGFyZ3VtZW50IHdpbGwgYmUgcmV0dXJuZWQgdW5jaGFuZ2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OmRvX3dpZGVuKGMpLgorICAgICAgICogIGRvX3dpZGVuKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXIgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY29udmVydGVkIGNoYXJhY3Rlci4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdAorICAgICAgeworCWlmIChfTV93aWRlbl9vaykKKwkgIHJldHVybiBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXTsKKwl0aGlzLT5fTV93aWRlbl9pbml0KCk7CisJcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW4gY2hhciBhcnJheQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgaW5wdXQgdG8gY2hhciB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTxjaGFyPgorICAgICAgICogIGZhY2V0LCB0aGUgYXJndW1lbnQgd2lsbCBiZSBjb3BpZWQgdW5jaGFuZ2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OmRvX3dpZGVuKGMpLgorICAgICAgICogIGRvX3dpZGVuKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gZmlyc3QgY2hhciBpbiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9fdG8gIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGFycmF5LgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgY29uc3QgY2hhcioKKyAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKKyAgICAgIHsKKwlpZiAoX01fd2lkZW5fb2sgPT0gMSkKKwkgIHsKKwkgICAgX19idWlsdGluX21lbWNweShfX3RvLCBfX2xvLCBfX2hpIC0gX19sbyk7CisJICAgIHJldHVybiBfX2hpOworCSAgfQorCWlmICghX01fd2lkZW5fb2spCisJICBfTV93aWRlbl9pbml0KCk7CisJcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fbG8sIF9faGksIF9fdG8pOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyBjaGFyCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGNoYXIgdG8gY2hhciB1c2luZyB0aGUgc2ltcGxlc3QKKyAgICAgICAqICByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIGRmYXVsdCBpcworICAgICAgICogIHJldHVybmVkIGluc3RlYWQuICBGb3IgYW4gdW5kZXJpdmVkIGN0eXBlPGNoYXI+IGZhY2V0LCBAYSBjCisgICAgICAgKiAgd2lsbCBiZSByZXR1cm5lZCB1bmNoYW5nZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd29ya3MgYXMgaWYgaXQgcmV0dXJucyBjdHlwZTxjaGFyPjo6ZG9fbmFycm93KGMpLgorICAgICAgICogIGRvX25hcnJvdygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHBhcmFtIF9fZGZhdWx0ICBDaGFyIHRvIHJldHVybiBpZiBjb252ZXJzaW9uIGZhaWxzLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjb252ZXJ0ZWQgY2hhcmFjdGVyLgorICAgICAgKi8KKyAgICAgIGNoYXIKKyAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorICAgICAgeworCWlmIChfTV9uYXJyb3dbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0pCisJICByZXR1cm4gX01fbmFycm93W3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOworCWNvbnN0IGNoYXIgX190ID0gZG9fbmFycm93KF9fYywgX19kZmF1bHQpOworCWlmIChfX3QgIT0gX19kZmF1bHQpCisJICBfTV9uYXJyb3dbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0gPSBfX3Q7CisJcmV0dXJuIF9fdDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOYXJyb3cgY2hhciBhcnJheQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgaW5wdXQgdG8gY2hhciB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uIGFuZCB3cml0ZXMgdGhlIHJlc3VsdHMgdG8gdGhlCisgICAgICAgKiAgZGVzdGluYXRpb24gYXJyYXkuICBGb3IgYW55IGNoYXIgaW4gdGhlIGlucHV0IHRoYXQgY2Fubm90IGJlCisgICAgICAgKiAgY29udmVydGVkLCBAYSBkZmF1bHQgaXMgdXNlZCBpbnN0ZWFkLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTxjaGFyPgorICAgICAgICogIGZhY2V0LCB0aGUgYXJndW1lbnQgd2lsbCBiZSBjb3BpZWQgdW5jaGFuZ2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGFzIGlmIGl0IHJldHVybnMgY3R5cGU8Y2hhcj46OmRvX25hcnJvdyhsbywgaGksCisgICAgICAgKiAgZGZhdWx0LCB0bykuICBkb19uYXJyb3coKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19kZmF1bHQgIENoYXIgdG8gdXNlIGlmIGNvbnZlcnNpb24gZmFpbHMuCisgICAgICAgKiAgQHBhcmFtIF9fdG8gIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGFycmF5LgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgY29uc3QgY2hhcl90eXBlKgorICAgICAgbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAorCSAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX190bykgY29uc3QKKyAgICAgIHsKKwlpZiAoX19idWlsdGluX2V4cGVjdChfTV9uYXJyb3dfb2sgPT0gMSwgdHJ1ZSkpCisJICB7CisJICAgIF9fYnVpbHRpbl9tZW1jcHkoX190bywgX19sbywgX19oaSAtIF9fbG8pOworCSAgICByZXR1cm4gX19oaTsKKwkgIH0KKwlpZiAoIV9NX25hcnJvd19vaykKKwkgIF9NX25hcnJvd19pbml0KCk7CisJcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDY5NS4gY3R5cGU8Y2hhcj46OmNsYXNzaWNfdGFibGUoKSBub3QgYWNjZXNzaWJsZS4KKyAgICAgIC8vLyBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbWFzayB0YWJsZSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsIG9yCisgICAgICAvLy8gdGhlIGRlZmF1bHQgZnJvbSBjbGFzc2ljX3RhYmxlKCkgaWYgbm9uZSB3YXMgcHJvdmlkZWQuCisgICAgICBjb25zdCBtYXNrKgorICAgICAgdGFibGUoKSBjb25zdCB0aHJvdygpCisgICAgICB7IHJldHVybiBfTV90YWJsZTsgfQorCisgICAgICAvLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIEMgbG9jYWxlIG1hc2sgdGFibGUuCisgICAgICBzdGF0aWMgY29uc3QgbWFzayoKKyAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOworICAgIHByb3RlY3RlZDoKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZXN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgdGFibGUoKSBpZiBAYSBkZWwgd2FzIHRydWUgaW4gdGhlCisgICAgICAgKiAgY29uc3RydWN0b3IuCisgICAgICAqLworICAgICAgdmlydHVhbAorICAgICAgfmN0eXBlKCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byB1cHBlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2hhciBhcmd1bWVudCB0byB1cHBlcmNhc2UgaWYKKyAgICAgICAqICBwb3NzaWJsZS4gIElmIG5vdCBwb3NzaWJsZSAoZm9yIGV4YW1wbGUsICcyJyksIHJldHVybnMgdGhlIGFyZ3VtZW50LgorICAgICAgICoKKyAgICAgICAqICBkb190b3VwcGVyKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHVwcGVyY2FzaW5nLiAgZG9fdG91cHBlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yCisgICAgICAgKiAgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHVwcGVyY2FzZSBjaGFyIGlmIGNvbnZlcnRpYmxlLCBlbHNlIEBhIF9fYy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGNoYXJzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvdXBwZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgdXBwZXJjYXNpbmcuICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIGFyZ3VtZW50IHRvIGxvd2VyY2FzZSBpZgorICAgICAgICogIHBvc3NpYmxlLiAgSWYgbm90IHBvc3NpYmxlIChmb3IgZXhhbXBsZSwgJzInKSwgcmV0dXJucyB0aGUgYXJndW1lbnQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvbG93ZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbG93ZXJjYXNpbmcuICBkb190b2xvd2VyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXIgdG8gY29udmVydC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbG93ZXJjYXNlIGNoYXIgaWYgY29udmVydGlibGUsIGVsc2UgQGEgX19jLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY2hhcl90eXBlCisgICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnZlcnQgYXJyYXkgdG8gbG93ZXJjYXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gY29udmVydHMgZWFjaCBjaGFyIGluIHRoZSByYW5nZSBbbG8saGkpIHRvCisgICAgICAgKiAgbG93ZXJjYXNlIGlmIHBvc3NpYmxlLiAgT3RoZXIgY2hhcnMgcmVtYWluIHVudG91Y2hlZC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fdG9sb3dlcigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBsb3dlcmNhc2luZy4gIGRvX3RvbG93ZXIoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvcgorICAgICAgICogIHRoZSBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19sbyAgUG9pbnRlciB0byBmaXJzdCBjaGFyIGluIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW4gY2hhcgorICAgICAgICoKKyAgICAgICAqICBUaGlzIHZpcnR1YWwgZnVuY3Rpb24gY29udmVydHMgdGhlIGNoYXIgdG8gY2hhciB1c2luZyB0aGUgc2ltcGxlc3QKKyAgICAgICAqICByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTxjaGFyPiBmYWNldCwgdGhlCisgICAgICAgKiAgYXJndW1lbnQgd2lsbCBiZSByZXR1cm5lZCB1bmNoYW5nZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3dpZGVuKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHdpZGVuaW5nLiAgZG9fd2lkZW4oKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSBjaGFyIHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGNvbnZlcnRlZCBjaGFyYWN0ZXIuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyX3R5cGUKKyAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorICAgICAgeyByZXR1cm4gX19jOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV2lkZW4gY2hhciBhcnJheQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0byBjaGFyIHVzaW5nCisgICAgICAgKiAgdGhlIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24uICBGb3IgYW4gdW5kZXJpdmVkCisgICAgICAgKiAgY3R5cGU8Y2hhcj4gZmFjZXQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGNvcGllZCB1bmNoYW5nZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3dpZGVuKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHdpZGVuaW5nLiAgZG9fd2lkZW4oKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX190byAgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gYXJyYXkuCisgICAgICAgKiAgQHJldHVybiAgQGEgX19oaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCisgICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CisgICAgICB7CisJX19idWlsdGluX21lbWNweShfX3RvLCBfX2xvLCBfX2hpIC0gX19sbyk7CisJcmV0dXJuIF9faGk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTmFycm93IGNoYXIKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIHRvIGNoYXIgdXNpbmcgdGhlIHNpbXBsZXN0CisgICAgICAgKiAgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCBkZmF1bHQgaXMKKyAgICAgICAqICByZXR1cm5lZCBpbnN0ZWFkLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTxjaGFyPiBmYWNldCwgQGEgYyB3aWxsIGJlCisgICAgICAgKiAgcmV0dXJuZWQgdW5jaGFuZ2VkLgorICAgICAgICoKKyAgICAgICAqICBkb19uYXJyb3coKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbmFycm93aW5nLiAgZG9fbmFycm93KCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhciB0byBjb252ZXJ0LgorICAgICAgICogIEBwYXJhbSBfX2RmYXVsdCAgQ2hhciB0byByZXR1cm4gaWYgY29udmVyc2lvbiBmYWlscy4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY29udmVydGVkIGNoYXIuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyCisgICAgICBkb19uYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fYzsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyBjaGFyIGFycmF5IHRvIGNoYXIgYXJyYXkKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIGNoYXIgdXNpbmcgdGhlIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24gYW5kIHdyaXRlcyB0aGUKKyAgICAgICAqICByZXN1bHRzIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4gIEZvciBhbnkgY2hhciBpbiB0aGUgaW5wdXQgdGhhdAorICAgICAgICogIGNhbm5vdCBiZSBjb252ZXJ0ZWQsIEBhIGRmYXVsdCBpcyB1c2VkIGluc3RlYWQuICBGb3IgYW4gdW5kZXJpdmVkCisgICAgICAgKiAgY3R5cGU8Y2hhcj4gZmFjZXQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGNvcGllZCB1bmNoYW5nZWQuCisgICAgICAgKgorICAgICAgICogIGRvX25hcnJvdygpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBuYXJyb3dpbmcuICBkb19uYXJyb3coKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19kZmF1bHQgIENoYXIgdG8gdXNlIGlmIGNvbnZlcnNpb24gZmFpbHMuCisgICAgICAgKiAgQHBhcmFtIF9fdG8gIFBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIGFycmF5LgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCisJCWNoYXIgX19kZmF1bHQsIGNoYXIqIF9fdG8pIGNvbnN0CisgICAgICB7CisJX19idWlsdGluX21lbWNweShfX3RvLCBfX2xvLCBfX2hpIC0gX19sbyk7CisJcmV0dXJuIF9faGk7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZCBfTV9uYXJyb3dfaW5pdCgpIGNvbnN0OworICAgICAgdm9pZCBfTV93aWRlbl9pbml0KCkgY29uc3Q7CisgICAgfTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIC8qKgorICAgKiAgQGJyaWVmICBUaGUgY3R5cGU8d2NoYXJfdD4gc3BlY2lhbGl6YXRpb24uCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGNsYXNzIGRlZmluZXMgY2xhc3NpZmljYXRpb24gYW5kIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvciB0aGUKKyAgICogIHdjaGFyX3QgdHlwZS4gIEl0IGdldHMgdXNlZCBieSB3Y2hhcl90IHN0cmVhbXMgZm9yIG1hbnkgSS9PIG9wZXJhdGlvbnMuCisgICAqICBUaGUgd2NoYXJfdCBzcGVjaWFsaXphdGlvbiBwcm92aWRlcyBhIG51bWJlciBvZiBvcHRpbWl6YXRpb25zIGFzIHdlbGwuCisgICAqCisgICAqICBjdHlwZTx3Y2hhcl90PiBpbmhlcml0cyBpdHMgcHVibGljIG1ldGhvZHMgZnJvbQorICAgKiAgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+LgorICAqLworICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy8vIFR5cGVkZWYgZm9yIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgd2NoYXJfdC4KKyAgICAgIHR5cGVkZWYgd2NoYXJfdAkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB3Y3R5cGVfdAkJX193bWFza190eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX19jX2xvY2FsZQkJX01fY19sb2NhbGVfY3R5cGU7CisKKyAgICAgIC8vIFByZS1jb21wdXRlZCBuYXJyb3dlZCBhbmQgd2lkZW5lZCBjaGFycy4KKyAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgX01fbmFycm93X29rOworICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICBfTV9uYXJyb3dbMTI4XTsKKyAgICAgIHdpbnRfdCAgICAgICAgICAgICAgICAgICAgX01fd2lkZW5bMSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KC0xKV07CisKKyAgICAgIC8vIFByZS1jb21wdXRlZCBlbGVtZW50cyBmb3IgZG9faXMuCisgICAgICBtYXNrICAgICAgICAgICAgICAgICAgICAgIF9NX2JpdFsxNl07CisgICAgICBfX3dtYXNrX3R5cGUgICAgICAgICAgICAgIF9NX3dtYXNrWzE2XTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIERhdGEgTWVtYmVyczoKKyAgICAgIC8vLyBUaGUgZmFjZXQgaWQgZm9yIGN0eXBlPHdjaGFyX3Q+CisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJaWQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgc3RhdGljIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBpbml0aWFsIEMgbG9jYWxlIGZhY2V0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jbG9jICBIYW5kbGUgdG8gQyBsb2NhbGUgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gX19yZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfX3dtYXNrX3R5cGUKKyAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0IHRocm93KCk7CisKKyAgICAgIC8vLyBEZXN0cnVjdG9yCisgICAgICB2aXJ0dWFsCisgICAgICB+Y3R5cGUoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUZXN0IHdjaGFyX3QgY2xhc3NpZmljYXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBtYXNrIE0gZm9yIEBhIGMgYW5kIGNvbXBhcmVzIGl0IHRvIG1hc2sgQGEgbS4KKyAgICAgICAqCisgICAgICAgKiAgZG9faXMoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgY2xhc3NpZnlpbmcuICBkb19pcygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSB3Y2hhcl90IHRvIGZpbmQgdGhlIG1hc2sgb2YuCisgICAgICAgKiAgQHBhcmFtIF9fbSAgVGhlIG1hc2sgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEByZXR1cm4gIChNICYgX19tKSAhPSAwLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgYm9vbAorICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIG1hc2sgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIG1hc2sgZm9yIGVhY2ggd2NoYXJfdCBpbiB0aGUgcmFuZ2UgW2xvLGhpKQorICAgICAgICogIGFuZCBzdWNjZXNzaXZlbHkgd3JpdGVzIGl0IHRvIHZlYy4gIHZlYyBtdXN0IGhhdmUgYXMgbWFueSBlbGVtZW50cworICAgICAgICogIGFzIHRoZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgZG9faXMoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgY2xhc3NpZnlpbmcuICBkb19pcygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIHN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX192ZWMgIFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgbWFzayBzdG9yYWdlLgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgd2NoYXJfdCBtYXRjaGluZyBtYXNrCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGFuZCByZXR1cm5zIHRoZSBmaXJzdCB3Y2hhcl90IGMgaW4KKyAgICAgICAqICBbX19sbyxfX2hpKSBmb3Igd2hpY2ggaXMoX19tLGMpIGlzIHRydWUuCisgICAgICAgKgorICAgICAgICogIGRvX3NjYW5faXMoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbWF0Y2ggc2VhcmNoaW5nLiAgZG9faXMoKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19tICBUaGUgbWFzayB0byBjb21wYXJlIGFnYWluc3QuCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIFBvaW50ZXIgdG8gYSBtYXRjaGluZyB3Y2hhcl90IGlmIGZvdW5kLCBlbHNlIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCB3Y2hhcl90IG5vdCBtYXRjaGluZyBtYXNrCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QKKyAgICAgICAqICB3Y2hhcl90IGMgb2YgW19fbG8sX19oaSkgZm9yIHdoaWNoIGlzKF9fbSxjKSBpcyBmYWxzZS4KKyAgICAgICAqCisgICAgICAgKiAgZG9fc2Nhbl9pcygpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICBtYXRjaCBzZWFyY2hpbmcuICBkb19pcygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yIHRoZQorICAgICAgICogIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX20gIFRoZSBtYXNrIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gX19sbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHJldHVybiAgUG9pbnRlciB0byBhIG5vbi1tYXRjaGluZyB3Y2hhcl90IGlmIGZvdW5kLCBlbHNlIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAorCQkgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29udmVydCB0byB1cHBlcmNhc2UuCisgICAgICAgKgorICAgICAgICogIFRoaXMgdmlydHVhbCBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgd2NoYXJfdCBhcmd1bWVudCB0byB1cHBlcmNhc2UgaWYKKyAgICAgICAqICBwb3NzaWJsZS4gIElmIG5vdCBwb3NzaWJsZSAoZm9yIGV4YW1wbGUsICcyJyksIHJldHVybnMgdGhlIGFyZ3VtZW50LgorICAgICAgICoKKyAgICAgICAqICBkb190b3VwcGVyKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHVwcGVyY2FzaW5nLiAgZG9fdG91cHBlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yCisgICAgICAgKiAgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSB3Y2hhcl90IHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHVwcGVyY2FzZSB3Y2hhcl90IGlmIGNvbnZlcnRpYmxlLCBlbHNlIEBhIF9fYy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggd2NoYXJfdCBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIHVwcGVyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGVsZW1lbnRzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvdXBwZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgdXBwZXJjYXNpbmcuICBkb190b3VwcGVyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBhcmd1bWVudCB0byBsb3dlcmNhc2UgaWYKKyAgICAgICAqICBwb3NzaWJsZS4gIElmIG5vdCBwb3NzaWJsZSAoZm9yIGV4YW1wbGUsICcyJyksIHJldHVybnMgdGhlIGFyZ3VtZW50LgorICAgICAgICoKKyAgICAgICAqICBkb190b2xvd2VyKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIGxvd2VyY2FzaW5nLiAgZG9fdG9sb3dlcigpIG11c3QgYWx3YXlzIHJldHVybiB0aGUgc2FtZSByZXN1bHQgZm9yCisgICAgICAgKiAgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2MgIFRoZSB3Y2hhcl90IHRvIGNvbnZlcnQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGxvd2VyY2FzZSB3Y2hhcl90IGlmIGNvbnZlcnRpYmxlLCBlbHNlIEBhIF9fYy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb252ZXJ0IGFycmF5IHRvIGxvd2VyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggd2NoYXJfdCBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIGxvd2VyY2FzZSBpZiBwb3NzaWJsZS4gIE90aGVyIGVsZW1lbnRzIHJlbWFpbiB1bnRvdWNoZWQuCisgICAgICAgKgorICAgICAgICogIGRvX3RvbG93ZXIoKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbG93ZXJjYXNpbmcuICBkb190b2xvd2VyKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IKKyAgICAgICAqICB0aGUgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fbG8gIFBvaW50ZXIgdG8gc3RhcnQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9faGkgIFBvaW50ZXIgdG8gZW5kIG9mIHJhbmdlLgorICAgICAgICogIEByZXR1cm4gIEBhIF9faGkuCisgICAgICAqLworICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCisgICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBXaWRlbiBjaGFyIHRvIHdjaGFyX3QKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBjaGFyIHRvIHdjaGFyX3QgdXNpbmcgdGhlCisgICAgICAgKiAgc2ltcGxlc3QgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbi4gIEZvciBhbiB1bmRlcml2ZWQgY3R5cGU8d2NoYXJfdD4KKyAgICAgICAqICBmYWNldCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgY2FzdCB0byB3Y2hhcl90LgorICAgICAgICoKKyAgICAgICAqICBkb193aWRlbigpIGlzIGEgaG9vayBmb3IgYSBkZXJpdmVkIGZhY2V0IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YKKyAgICAgICAqICB3aWRlbmluZy4gIGRvX3dpZGVuKCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhciB0byBjb252ZXJ0LgorICAgICAgICogIEByZXR1cm4gIFRoZSBjb252ZXJ0ZWQgd2NoYXJfdC4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFdpZGVuIGNoYXIgYXJyYXkgdG8gd2NoYXJfdCBhcnJheQorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggY2hhciBpbiB0aGUgaW5wdXQgdG8gd2NoYXJfdCB1c2luZyB0aGUKKyAgICAgICAqICBzaW1wbGVzdCByZWFzb25hYmxlIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGFuIHVuZGVyaXZlZCBjdHlwZTx3Y2hhcl90PgorICAgICAgICogIGZhY2V0LCB0aGUgYXJndW1lbnQgd2lsbCBiZSBjb3BpZWQsIGNhc3RpbmcgZWFjaCBlbGVtZW50IHRvIHdjaGFyX3QuCisgICAgICAgKgorICAgICAgICogIGRvX3dpZGVuKCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZgorICAgICAgICogIHdpZGVuaW5nLiAgZG9fd2lkZW4oKSBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGZvciB0aGUKKyAgICAgICAqICBzYW1lIGlucHV0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50IGZvciBjb2RlcGFnZSBjb252ZXJzaW9ucy4gIFNlZQorICAgICAgICogIGNvZGVjdnQgZm9yIHRoYXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2xvICBQb2ludGVyIHRvIHN0YXJ0IHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2hpICBQb2ludGVyIHRvIGVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX190byAgUG9pbnRlciB0byB0aGUgZGVzdGluYXRpb24gYXJyYXkuCisgICAgICAgKiAgQHJldHVybiAgQGEgX19oaS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCisgICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyB3Y2hhcl90IHRvIGNoYXIKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBhcmd1bWVudCB0byBjaGFyIHVzaW5nCisgICAgICAgKiAgdGhlIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24uICBJZiB0aGUgY29udmVyc2lvbgorICAgICAgICogIGZhaWxzLCBkZmF1bHQgaXMgcmV0dXJuZWQgaW5zdGVhZC4gIEZvciBhbiB1bmRlcml2ZWQKKyAgICAgICAqICBjdHlwZTx3Y2hhcl90PiBmYWNldCwgQGEgYyB3aWxsIGJlIGNhc3QgdG8gY2hhciBhbmQKKyAgICAgICAqICByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgZG9fbmFycm93KCkgaXMgYSBob29rIGZvciBhIGRlcml2ZWQgZmFjZXQgdG8gY2hhbmdlIHRoZQorICAgICAgICogIGJlaGF2aW9yIG9mIG5hcnJvd2luZy4gIGRvX25hcnJvdygpIG11c3QgYWx3YXlzIHJldHVybiB0aGUKKyAgICAgICAqICBzYW1lIHJlc3VsdCBmb3IgdGhlIHNhbWUgaW5wdXQuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQgZm9yIGNvZGVwYWdlIGNvbnZlcnNpb25zLiAgU2VlCisgICAgICAgKiAgY29kZWN2dCBmb3IgdGhhdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIHdjaGFyX3QgdG8gY29udmVydC4KKyAgICAgICAqICBAcGFyYW0gX19kZmF1bHQgIENoYXIgdG8gcmV0dXJuIGlmIGNvbnZlcnNpb24gZmFpbHMuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGNvbnZlcnRlZCBjaGFyLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY2hhcgorICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE5hcnJvdyB3Y2hhcl90IGFycmF5IHRvIGNoYXIgYXJyYXkKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIGNvbnZlcnRzIGVhY2ggd2NoYXJfdCBpbiB0aGUgcmFuZ2UgW2xvLGhpKSB0bworICAgICAgICogIGNoYXIgdXNpbmcgdGhlIHNpbXBsZXN0IHJlYXNvbmFibGUgdHJhbnNmb3JtYXRpb24gYW5kIHdyaXRlcyB0aGUKKyAgICAgICAqICByZXN1bHRzIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4gIEZvciBhbnkgd2NoYXJfdCBpbiB0aGUgaW5wdXQgdGhhdAorICAgICAgICogIGNhbm5vdCBiZSBjb252ZXJ0ZWQsIEBhIGRmYXVsdCBpcyB1c2VkIGluc3RlYWQuICBGb3IgYW4gdW5kZXJpdmVkCisgICAgICAgKiAgY3R5cGU8d2NoYXJfdD4gZmFjZXQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGNvcGllZCwgY2FzdGluZyBlYWNoCisgICAgICAgKiAgZWxlbWVudCB0byBjaGFyLgorICAgICAgICoKKyAgICAgICAqICBkb19uYXJyb3coKSBpcyBhIGhvb2sgZm9yIGEgZGVyaXZlZCBmYWNldCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mCisgICAgICAgKiAgbmFycm93aW5nLiAgZG9fbmFycm93KCkgbXVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBmb3IgdGhlCisgICAgICAgKiAgc2FtZSBpbnB1dC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZTogdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCBmb3IgY29kZXBhZ2UgY29udmVyc2lvbnMuICBTZWUKKyAgICAgICAqICBjb2RlY3Z0IGZvciB0aGF0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19sbyAgUG9pbnRlciB0byBzdGFydCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gX19oaSAgUG9pbnRlciB0byBlbmQgb2YgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtIF9fZGZhdWx0ICBDaGFyIHRvIHVzZSBpZiBjb252ZXJzaW9uIGZhaWxzLgorICAgICAgICogIEBwYXJhbSBfX3RvICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBhcnJheS4KKyAgICAgICAqICBAcmV0dXJuICBAYSBfX2hpLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgorICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAorCQljaGFyIF9fZGZhdWx0LCBjaGFyKiBfX3RvKSBjb25zdDsKKworICAgICAgLy8gRm9yIHVzZSBhdCBjb25zdHJ1Y3Rpb24gdGltZSBvbmx5LgorICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZV9jdHlwZSgpIHRocm93KCk7CisgICAgfTsKKyNlbmRpZiAvL19HTElCQ1hYX1VTRV9XQ0hBUl9UCisKKyAgLy8vIGNsYXNzIGN0eXBlX2J5bmFtZSBbMjIuMi4xLjJdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTxfQ2hhclQ+OjptYXNrICBtYXNrOworCisgICAgICBleHBsaWNpdAorICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfTsKKyAgICB9OworCisgIC8vLyAyMi4yLjEuNCAgQ2xhc3MgY3R5cGVfYnluYW1lIHNwZWNpYWxpemF0aW9ucy4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIGN0eXBlX2J5bmFtZTxjaGFyPiA6IHB1YmxpYyBjdHlwZTxjaGFyPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfmN0eXBlX2J5bmFtZSgpOworICAgIH07CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgY3R5cGVfYnluYW1lPHdjaGFyX3Q+IDogcHVibGljIGN0eXBlPHdjaGFyX3Q+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0CisgICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2aXJ0dWFsCisgICAgICB+Y3R5cGVfYnluYW1lKCk7CisgICAgfTsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKy8vIEluY2x1ZGUgaG9zdCBhbmQgY29uZmlndXJhdGlvbiBzcGVjaWZpYyBjdHlwZSBpbmxpbmVzLgorI2luY2x1ZGUgPGJpdHMvY3R5cGVfaW5saW5lLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyAyMi4yLjIgIFRoZSBudW1lcmljIGNhdGVnb3J5LgorICBjbGFzcyBfX251bV9iYXNlCisgIHsKKyAgcHVibGljOgorICAgIC8vIE5COiBDb2RlIGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIF9TX2F0b21zX291dCBlbGVtZW50cy4KKyAgICAvLyBCZWxvdyBhcmUgdGhlIGluZGljZXMgaW50byBfU19hdG9tc19vdXQuCisgICAgZW51bQorICAgICAgeworCV9TX29taW51cywKKwlfU19vcGx1cywKKwlfU19veCwKKwlfU19vWCwKKwlfU19vZGlnaXRzLAorCV9TX29kaWdpdHNfZW5kID0gX1Nfb2RpZ2l0cyArIDE2LAorCV9TX291ZGlnaXRzID0gX1Nfb2RpZ2l0c19lbmQsCisJX1Nfb3VkaWdpdHNfZW5kID0gX1Nfb3VkaWdpdHMgKyAxNiwKKwlfU19vZSA9IF9TX29kaWdpdHMgKyAxNCwgIC8vIEZvciBzY2llbnRpZmljIG5vdGF0aW9uLCAnZScKKwlfU19vRSA9IF9TX291ZGlnaXRzICsgMTQsIC8vIEZvciBzY2llbnRpZmljIG5vdGF0aW9uLCAnRScKKwlfU19vZW5kID0gX1Nfb3VkaWdpdHNfZW5kCisgICAgICB9OworCisgICAgLy8gQSBsaXN0IG9mIHZhbGlkIG51bWVyaWMgbGl0ZXJhbHMgZm9yIG91dHB1dC4gIFRoaXMgYXJyYXkKKyAgICAvLyBjb250YWlucyBjaGFycyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdGhlIGN1cnJlbnQgbG9jYWxlJ3MKKyAgICAvLyBjdHlwZTxfQ2hhclQ+LndpZGVuKCkgYW5kIHRoZW4gdXNlZCB0byByZW5kZXIgbnVtYmVycy4KKyAgICAvLyBGb3IgdGhlIHN0YW5kYXJkICJDIiBsb2NhbGUsIHRoaXMgaXMKKyAgICAvLyAiLSt4WDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5QUJDREVGIi4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogX1NfYXRvbXNfb3V0OworCisgICAgLy8gU3RyaW5nIGxpdGVyYWwgb2YgYWNjZXB0YWJsZSAobmFycm93KSBpbnB1dCwgZm9yIG51bV9nZXQuCisgICAgLy8gIi0reFgwMTIzNDU2Nzg5YWJjZGVmQUJDREVGIgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfU19hdG9tc19pbjsKKworICAgIGVudW0KKyAgICB7CisgICAgICBfU19pbWludXMsCisgICAgICBfU19pcGx1cywKKyAgICAgIF9TX2l4LAorICAgICAgX1NfaVgsCisgICAgICBfU19pemVybywKKyAgICAgIF9TX2llID0gX1NfaXplcm8gKyAxNCwKKyAgICAgIF9TX2lFID0gX1NfaXplcm8gKyAyMCwKKyAgICAgIF9TX2llbmQgPSAyNgorICAgIH07CisKKyAgICAvLyBudW1fcHV0CisgICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgc2NhbmYgZm9ybWF0IGZvciBmbG9hdGluZyBwb2ludCB0eXBlcy4KKyAgICBzdGF0aWMgdm9pZAorICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kKSB0aHJvdygpOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgX19udW1wdW5jdF9jYWNoZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CisgICAgeworICAgICAgY29uc3QgY2hhcioJCQlfTV9ncm91cGluZzsKKyAgICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9ncm91cGluZ19zaXplOworICAgICAgYm9vbAkJCQlfTV91c2VfZ3JvdXBpbmc7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fdHJ1ZW5hbWU7CisgICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fdHJ1ZW5hbWVfc2l6ZTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9mYWxzZW5hbWU7CisgICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZmFsc2VuYW1lX3NpemU7CisgICAgICBfQ2hhclQJCQkJX01fZGVjaW1hbF9wb2ludDsKKyAgICAgIF9DaGFyVAkJCQlfTV90aG91c2FuZHNfc2VwOworCisgICAgICAvLyBBIGxpc3Qgb2YgdmFsaWQgbnVtZXJpYyBsaXRlcmFscyBmb3Igb3V0cHV0OiBpbiB0aGUgc3RhbmRhcmQKKyAgICAgIC8vICJDIiBsb2NhbGUsIHRoaXMgaXMgIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RFRiIuCisgICAgICAvLyBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBjaGFycyBhZnRlciBoYXZpbmcgYmVlbiBwYXNzZWQKKyAgICAgIC8vIHRocm91Z2ggdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY3R5cGU8X0NoYXJUPi53aWRlbigpLgorICAgICAgX0NoYXJUCQkJCV9NX2F0b21zX291dFtfX251bV9iYXNlOjpfU19vZW5kXTsKKworICAgICAgLy8gQSBsaXN0IG9mIHZhbGlkIG51bWVyaWMgbGl0ZXJhbHMgZm9yIGlucHV0OiBpbiB0aGUgc3RhbmRhcmQKKyAgICAgIC8vICJDIiBsb2NhbGUsIHRoaXMgaXMgIi0reFgwMTIzNDU2Nzg5YWJjZGVmQUJDREVGIgorICAgICAgLy8gVGhpcyBhcnJheSBjb250YWlucyB0aGUgY2hhcnMgYWZ0ZXIgaGF2aW5nIGJlZW4gcGFzc2VkCisgICAgICAvLyB0aHJvdWdoIHRoZSBjdXJyZW50IGxvY2FsZSdzIGN0eXBlPF9DaGFyVD4ud2lkZW4oKS4KKyAgICAgIF9DaGFyVAkJCQlfTV9hdG9tc19pbltfX251bV9iYXNlOjpfU19pZW5kXTsKKworICAgICAgYm9vbAkJCQlfTV9hbGxvY2F0ZWQ7CisKKyAgICAgIF9fbnVtcHVuY3RfY2FjaGUoc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2dyb3VwaW5nKDApLCBfTV9ncm91cGluZ19zaXplKDApLAorCV9NX3VzZV9ncm91cGluZyhmYWxzZSksCisJX01fdHJ1ZW5hbWUoMCksIF9NX3RydWVuYW1lX3NpemUoMCksIF9NX2ZhbHNlbmFtZSgwKSwKKwlfTV9mYWxzZW5hbWVfc2l6ZSgwKSwgX01fZGVjaW1hbF9wb2ludChfQ2hhclQoKSksCisJX01fdGhvdXNhbmRzX3NlcChfQ2hhclQoKSksIF9NX2FsbG9jYXRlZChmYWxzZSkKKwl7IH0KKworICAgICAgfl9fbnVtcHVuY3RfY2FjaGUoKTsKKworICAgICAgdm9pZAorICAgICAgX01fY2FjaGUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CisKKyAgICBwcml2YXRlOgorICAgICAgX19udW1wdW5jdF9jYWNoZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX251bXB1bmN0X2NhY2hlJik7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX251bXB1bmN0X2NhY2hlKGNvbnN0IF9fbnVtcHVuY3RfY2FjaGUmKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD46On5fX251bXB1bmN0X2NhY2hlKCkKKyAgICB7CisgICAgICBpZiAoX01fYWxsb2NhdGVkKQorCXsKKwkgIGRlbGV0ZSBbXSBfTV9ncm91cGluZzsKKwkgIGRlbGV0ZSBbXSBfTV90cnVlbmFtZTsKKwkgIGRlbGV0ZSBbXSBfTV9mYWxzZW5hbWU7CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBudW1wdW5jdC4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoaXMgZmFjZXQgc3RvcmVzIHNldmVyYWwgcGllY2VzIG9mIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gcHJpbnRpbmcgYW5kCisgICAqICBzY2FubmluZyBudW1iZXJzLCBzdWNoIGFzIHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4gIEl0IHRha2VzIGEKKyAgICogIHRlbXBsYXRlIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBjaGFyIHR5cGUuICBUaGUgbnVtcHVuY3QgZmFjZXQgaXMKKyAgICogIHVzZWQgYnkgc3RyZWFtcyBmb3IgbWFueSBJL08gb3BlcmF0aW9ucyBpbnZvbHZpbmcgbnVtYmVycy4KKyAgICoKKyAgICogIFRoZSBudW1wdW5jdCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZQorICAgKiAgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZSBjYWxsIHRvIHRoZSB2aXJ0dWFsCisgICAqICBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaG9va3MgZm9yIGRldmVsb3BlcnMgdG8KKyAgICogIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20gYSBudW1wdW5jdCBmYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWZzCisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4Jc3RyaW5nX3R5cGU7CisgICAgICAvL0B9CisgICAgICB0eXBlZGVmIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiAgX19jYWNoZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX19jYWNoZV90eXBlKgkJCV9NX2RhdGE7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gTnVtcHVuY3QgZmFjZXQgaWQuCisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bXB1bmN0IGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcmVmcyAgUmVmY291bnQgdG8gcGFzcyB0byB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApCisgICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEludGVybmFsIGNvbnN0cnVjdG9yLiAgTm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgdGhlIGxpYnJhcnkgaXRzZWxmIHRvIHNldCB1cCB0aGUKKyAgICAgICAqICBwcmVkZWZpbmVkIGxvY2FsZSBmYWNldHMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19jYWNoZSAgX19udW1wdW5jdF9jYWNoZSBvYmplY3QuCisgICAgICAgKiAgQHBhcmFtICBfX3JlZnMgIFJlZmNvdW50IHRvIHBhc3MgdG8gdGhlIGJhc2UgY2xhc3MuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBudW1wdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpCisgICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEludGVybmFsIGNvbnN0cnVjdG9yLiAgTm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgdGhlIGxpYnJhcnkgaXRzZWxmIHRvIHNldCB1cCBuZXcKKyAgICAgICAqICBsb2NhbGVzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fY2xvYyAgVGhlIEMgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgX19yZWZzICBSZWZjb3VudCB0byBwYXNzIHRvIHRoZSBiYXNlIGNsYXNzLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApCisgICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY2hhcl90eXBlIHRvIHVzZSBhcyBhIGRlY2ltYWwgcG9pbnQuICBJdAorICAgICAgICogIGRvZXMgc28gYnkgcmV0dXJuaW5nIHJldHVybmluZworICAgICAgICogIG51bXB1bmN0PGNoYXJfdHlwZT46OmRvX2RlY2ltYWxfcG9pbnQoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgY2hhcl90eXBlIHJlcHJlc2VudGluZyBhIGRlY2ltYWwgcG9pbnQuCisgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiB0aG91c2FuZHMgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY2hhcl90eXBlIHRvIHVzZSBhcyBhIHRob3VzYW5kcworICAgICAgICogIHNlcGFyYXRvci4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nIHJldHVybmluZworICAgICAgICogIG51bXB1bmN0PGNoYXJfdHlwZT46OmRvX3Rob3VzYW5kc19zZXAoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgY2hhcl90eXBlIHJlcHJlc2VudGluZyBhIHRob3VzYW5kcyBzZXBhcmF0b3IuCisgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBncm91cGluZyBzcGVjaWZpY2F0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGdyb3VwaW5ncyBmb3IgdGhlCisgICAgICAgKiAgaW50ZWdlciBwYXJ0IG9mIGEgbnVtYmVyLiAgR3JvdXBpbmdzIGluZGljYXRlIHdoZXJlIHRob3VzYW5kcworICAgICAgICogIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGluc2VydGVkIGluIHRoZSBpbnRlZ2VyIHBhcnQgb2YgYSBudW1iZXIuCisgICAgICAgKgorICAgICAgICogIEVhY2ggY2hhciBpbiB0aGUgcmV0dXJuIHN0cmluZyBpcyBpbnRlcnByZXQgYXMgYW4gaW50ZWdlcgorICAgICAgICogIHJhdGhlciB0aGFuIGEgY2hhcmFjdGVyLiAgVGhlc2UgbnVtYmVycyByZXByZXNlbnQgdGhlIG51bWJlcgorICAgICAgICogIG9mIGRpZ2l0cyBpbiBhIGdyb3VwLiAgVGhlIGZpcnN0IGNoYXIgaW4gdGhlIHN0cmluZworICAgICAgICogIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50CisgICAgICAgKiAgZ3JvdXAuICBJZiBhIGNoYXIgaXMgbmVnYXRpdmUsIGl0IGluZGljYXRlcyBhbiB1bmxpbWl0ZWQKKyAgICAgICAqICBudW1iZXIgb2YgZGlnaXRzIGZvciB0aGUgZ3JvdXAuICBJZiBtb3JlIGNoYXJzIGZyb20gdGhlCisgICAgICAgKiAgc3RyaW5nIGFyZSByZXF1aXJlZCB0byBncm91cCBhIG51bWJlciwgdGhlIGxhc3QgY2hhciBpcyB1c2VkCisgICAgICAgKiAgcmVwZWF0ZWRseS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBncm91cGluZygpIHJldHVybnMgIlwwMDNcMDAyIiBhbmQgaXMKKyAgICAgICAqICBhcHBsaWVkIHRvIHRoZSBudW1iZXIgMTIzNDU2Nzg5LCB0aGlzIGNvcnJlc3BvbmRzIHRvCisgICAgICAgKiAgMTIsMzQsNTYsNzg5LiAgTm90ZSB0aGF0IGlmIHRoZSBzdHJpbmcgd2FzICIzMiIsIHRoaXMgd291bGQKKyAgICAgICAqICBwdXQgbW9yZSB0aGFuIDUwIGRpZ2l0cyBpbnRvIHRoZSBsZWFzdCBzaWduaWZpY2FudCBncm91cCBpZgorICAgICAgICogIHRoZSBjaGFyYWN0ZXIgc2V0IGlzIEFTQ0lJLgorICAgICAgICoKKyAgICAgICAqICBUaGUgc3RyaW5nIGlzIHJldHVybmVkIGJ5IGNhbGxpbmcKKyAgICAgICAqICBudW1wdW5jdDxjaGFyX3R5cGU+Ojpkb19ncm91cGluZygpLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBzdHJpbmcgcmVwcmVzZW50aW5nIGdyb3VwaW5nIHNwZWNpZmljYXRpb24uCisgICAgICAqLworICAgICAgc3RyaW5nCisgICAgICBncm91cGluZygpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBib29sIHRydWUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZ190eXBlIGNvbnRhaW5pbmcgdGhlIHRleHQKKyAgICAgICAqICByZXByZXNlbnRhdGlvbiBmb3IgdHJ1ZSBib29sIHZhcmlhYmxlcy4gIEl0IGRvZXMgc28gYnkgY2FsbGluZworICAgICAgICogIG51bXB1bmN0PGNoYXJfdHlwZT46OmRvX3RydWVuYW1lKCkuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBwcmludGVkIGZvcm0gb2YgdHJ1ZS4KKyAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgdHJ1ZW5hbWUoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYm9vbCBmYWxzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nX3R5cGUgY29udGFpbmluZyB0aGUgdGV4dAorICAgICAgICogIHJlcHJlc2VudGF0aW9uIGZvciBmYWxzZSBib29sIHZhcmlhYmxlcy4gIEl0IGRvZXMgc28gYnkgY2FsbGluZworICAgICAgICogIG51bXB1bmN0PGNoYXJfdHlwZT46OmRvX2ZhbHNlbmFtZSgpLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBzdHJpbmdfdHlwZSByZXByZXNlbnRpbmcgcHJpbnRlZCBmb3JtIG9mIGZhbHNlLgorICAgICAgKi8KKyAgICAgIHN0cmluZ190eXBlCisgICAgICBmYWxzZW5hbWUoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbAorICAgICAgfm51bXB1bmN0KCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgY2hhcl90eXBlIHRvIHVzZSBhcyBhIGRlY2ltYWwgcG9pbnQuICBUaGlzIGZ1bmN0aW9uIGlzIGEKKyAgICAgICAqICBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgY2hhcl90eXBlIHJlcHJlc2VudGluZyBhIGRlY2ltYWwgcG9pbnQuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyX3R5cGUKKyAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiB0aG91c2FuZHMgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhIGNoYXJfdHlwZSB0byB1c2UgYXMgYSB0aG91c2FuZHMgc2VwYXJhdG9yLiAgVGhpcyBmdW5jdGlvbgorICAgICAgICogIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIGNoYXJfdHlwZSByZXByZXNlbnRpbmcgYSB0aG91c2FuZHMgc2VwYXJhdG9yLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY2hhcl90eXBlCisgICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXA7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gZ3JvdXBpbmcgc3BlY2lmaWNhdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgZ3JvdXBpbmdzIGZvciB0aGUgaW50ZWdlciBwYXJ0IG9mIGEKKyAgICAgICAqICBudW1iZXIuICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUKKyAgICAgICAqICB2YWx1ZSByZXR1cm5lZC4gIEBzZWUgZ3JvdXBpbmcoKSBmb3IgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgU3RyaW5nIHJlcHJlc2VudGluZyBncm91cGluZyBzcGVjaWZpY2F0aW9uLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyaW5nCisgICAgICBkb19ncm91cGluZygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9ncm91cGluZzsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYm9vbCB0cnVlLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgc3RyaW5nX3R5cGUgY29udGFpbmluZyB0aGUgdGV4dCByZXByZXNlbnRhdGlvbiBmb3IgdHJ1ZQorICAgICAgICogIGJvb2wgdmFyaWFibGVzLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0bworICAgICAgICogIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBwcmludGVkIGZvcm0gb2YgdHJ1ZS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCisgICAgICBkb190cnVlbmFtZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV90cnVlbmFtZTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYm9vbCBmYWxzZS4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhIHN0cmluZ190eXBlIGNvbnRhaW5pbmcgdGhlIHRleHQgcmVwcmVzZW50YXRpb24gZm9yIGZhbHNlCisgICAgICAgKiAgYm9vbCB2YXJpYWJsZXMuICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvCisgICAgICAgKiAgY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgc3RyaW5nX3R5cGUgcmVwcmVzZW50aW5nIHByaW50ZWQgZm9ybSBvZiBmYWxzZS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCisgICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fZmFsc2VuYW1lOyB9CisKKyAgICAgIC8vIEZvciB1c2UgYXQgY29uc3RydWN0aW9uIHRpbWUgb25seS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSAwKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOworCisgIHRlbXBsYXRlPD4KKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBudW1wdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgbnVtcHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpOworCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOworI2VuZGlmCisKKyAgLy8vIGNsYXNzIG51bXB1bmN0X2J5bmFtZSBbMjIuMi4zLjJdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+CXN0cmluZ190eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQorICAgICAgeworCWlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgIkMiKSAhPSAwCisJICAgICYmIF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorCSAgeworCSAgICBfX2NfbG9jYWxlIF9fdG1wOworCSAgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUoX190bXAsIF9fcyk7CisJICAgIHRoaXMtPl9NX2luaXRpYWxpemVfbnVtcHVuY3QoX190bXApOworCSAgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKF9fdG1wKTsKKwkgIH0KKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5udW1wdW5jdF9ieW5hbWUoKSB7IH0KKyAgICB9OworCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfTERCTAorCisgIC8qKgorICAgKiAgQGJyaWVmICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIG51bV9nZXQuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byBwYXJzZSBhbmQgcmV0dXJuIGEgbnVtYmVyCisgICAqICBmcm9tIGEgc3RyaW5nLiAgSXQgaXMgdXNlZCBieSB0aGUgaXN0cmVhbSBudW1lcmljIGV4dHJhY3Rpb24KKyAgICogIG9wZXJhdG9ycy4KKyAgICoKKyAgICogIFRoZSBudW1fZ2V0IHRlbXBsYXRlIHVzZXMgcHJvdGVjdGVkIHZpcnR1YWwgZnVuY3Rpb25zIHRvIHByb3ZpZGUgdGhlCisgICAqICBhY3R1YWwgcmVzdWx0cy4gIFRoZSBwdWJsaWMgYWNjZXNzb3JzIGZvcndhcmQgdGhlIGNhbGwgdG8gdGhlIHZpcnR1YWwKKyAgICogIGZ1bmN0aW9ucy4gIFRoZXNlIHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBob29rcyBmb3IgZGV2ZWxvcGVycyB0bworICAgKiAgaW1wbGVtZW50IHRoZSBiZWhhdmlvciB0aGV5IHJlcXVpcmUgZnJvbSB0aGUgbnVtX2dldCBmYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfSW5JdGVyCQkJaXRlcl90eXBlOworICAgICAgLy9AfQorCisgICAgICAvLy8gTnVtcHVuY3QgZmFjZXQgaWQuCisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX3JlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBmYWNldChfX3JlZnMpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bWVyaWMgcGFyc2luZy4KKyAgICAgICAqCisgICAgICAgKiAgUGFyc2VzIHRoZSBpbnB1dCBzdHJlYW0gaW50byB0aGUgYm9vbCBAYSB2LiAgSXQgZG9lcyBzbyBieSBjYWxsaW5nCisgICAgICAgKiAgbnVtX2dldDo6ZG9fZ2V0KCkuCisgICAgICAgKgorICAgICAgICogIElmIGlvc19iYXNlOjpib29sYWxwaGEgaXMgc2V0LCBhdHRlbXB0cyB0byByZWFkCisgICAgICAgKiAgY3R5cGU8Q2hhclQ+Ojp0cnVlbmFtZSgpIG9yIGN0eXBlPENoYXJUPjo6ZmFsc2VuYW1lKCkuICBTZXRzCisgICAgICAgKiAgQGEgdiB0byB0cnVlIG9yIGZhbHNlIGlmIHN1Y2Nlc3NmdWwuICBTZXRzIGVyciB0bworICAgICAgICogIGlvc19iYXNlOjpmYWlsYml0IGlmIHJlYWRpbmcgdGhlIHN0cmluZyBmYWlscy4gIFNldHMgZXJyIHRvCisgICAgICAgKiAgaW9zX2Jhc2U6OmVvZmJpdCBpZiB0aGUgc3RyZWFtIGlzIGVtcHRpZWQuCisgICAgICAgKgorICAgICAgICogIElmIGlvc19iYXNlOjpib29sYWxwaGEgaXMgbm90IHNldCwgcHJvY2VlZHMgYXMgd2l0aCByZWFkaW5nIGEgbG9uZywKKyAgICAgICAqICBleGNlcHQgaWYgdGhlIHZhbHVlIGlzIDEsIHNldHMgQGEgdiB0byB0cnVlLCBpZiB0aGUgdmFsdWUgaXMgMCwgc2V0cworICAgICAgICogIEBhIHYgdG8gZmFsc2UsIGFuZCBvdGhlcndpc2Ugc2V0IGVyciB0byBpb3NfYmFzZTo6ZmFpbGJpdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2luICBTdGFydCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBfX2VuZCAgRW5kIG9mIGlucHV0IHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgX19lcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fdiAgVmFsdWUgdG8gZm9ybWF0IGFuZCBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgcmVhZGluZy4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bWVyaWMgcGFyc2luZy4KKyAgICAgICAqCisgICAgICAgKiAgUGFyc2VzIHRoZSBpbnB1dCBzdHJlYW0gaW50byB0aGUgaW50ZWdyYWwgdmFyaWFibGUgQGEgdi4gIEl0IGRvZXMgc28KKyAgICAgICAqICBieSBjYWxsaW5nIG51bV9nZXQ6OmRvX2dldCgpLgorICAgICAgICoKKyAgICAgICAqICBQYXJzaW5nIGlzIGFmZmVjdGVkIGJ5IHRoZSBmbGFnIHNldHRpbmdzIGluIEBhIGlvLgorICAgICAgICoKKyAgICAgICAqICBUaGUgYmFzaWMgcGFyc2UgaXMgYWZmZWN0ZWQgYnkgdGhlIHZhbHVlIG9mIGlvLmZsYWdzKCkgJgorICAgICAgICogIGlvc19iYXNlOjpiYXNlZmllbGQuICBJZiBlcXVhbCB0byBpb3NfYmFzZTo6b2N0LCBwYXJzZXMgbGlrZSB0aGUKKyAgICAgICAqICBzY2FuZiAlbyBzcGVjaWZpZXIuICBFbHNlIGlmIGVxdWFsIHRvIGlvc19iYXNlOjpoZXgsIHBhcnNlcyBsaWtlICVYCisgICAgICAgKiAgc3BlY2lmaWVyLiAgRWxzZSBpZiBiYXNlZmllbGQgZXF1YWwgdG8gMCwgcGFyc2VzIGxpa2UgdGhlICVpCisgICAgICAgKiAgc3BlY2lmaWVyLiAgT3RoZXJ3aXNlLCBwYXJzZXMgbGlrZSAlZCBmb3Igc2lnbmVkIGFuZCAldSBmb3IgdW5zaWduZWQKKyAgICAgICAqICB0eXBlcy4gIFRoZSBtYXRjaGluZyB0eXBlIGxlbmd0aCBtb2RpZmllciBpcyBhbHNvIHVzZWQuCisgICAgICAgKgorICAgICAgICogIERpZ2l0IGdyb3VwaW5nIGlzIGludGVycHJldGVkIGFjY29yZGluZyB0bworICAgICAgICogIG51bXB1bmN0Ojpncm91cGluZygpIGFuZCBudW1wdW5jdDo6dGhvdXNhbmRzX3NlcCgpLiAgSWYgdGhlCisgICAgICAgKiAgcGF0dGVybiBvZiBkaWdpdCBncm91cHMgaXNuJ3QgY29uc2lzdGVudCwgc2V0cyBlcnIgdG8KKyAgICAgICAqICBpb3NfYmFzZTo6ZmFpbGJpdC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgcGFyc2luZyB0aGUgc3RyaW5nIHlpZWxkcyBhIHZhbGlkIHZhbHVlIGZvciBAYSB2LCBAYSB2IGlzIHNldC4KKyAgICAgICAqICBPdGhlcndpc2UsIHNldHMgZXJyIHRvIGlvc19iYXNlOjpmYWlsYml0IGFuZCBsZWF2ZXMgQGEgdiB1bmFsdGVyZWQuCisgICAgICAgKiAgU2V0cyBlcnIgdG8gaW9zX2Jhc2U6OmVvZmJpdCBpZiB0aGUgc3RyZWFtIGlzIGVtcHRpZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19pbiAgU3RhcnQgb2YgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgX19lbmQgIEVuZCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgbG9jYWxlIGFuZCBmbGFncy4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3YgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHJlYWRpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKworICAgICAgaXRlcl90eXBlCisgICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgICBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSAgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKworICAgICAgaXRlcl90eXBlCisgICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSAgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKyNlbmRpZgorICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bWVyaWMgcGFyc2luZy4KKyAgICAgICAqCisgICAgICAgKiAgUGFyc2VzIHRoZSBpbnB1dCBzdHJlYW0gaW50byB0aGUgaW50ZWdyYWwgdmFyaWFibGUgQGEgdi4gIEl0IGRvZXMgc28KKyAgICAgICAqICBieSBjYWxsaW5nIG51bV9nZXQ6OmRvX2dldCgpLgorICAgICAgICoKKyAgICAgICAqICBUaGUgaW5wdXQgY2hhcmFjdGVycyBhcmUgcGFyc2VkIGxpa2UgdGhlIHNjYW5mICVnIHNwZWNpZmllci4gIFRoZQorICAgICAgICogIG1hdGNoaW5nIHR5cGUgbGVuZ3RoIG1vZGlmaWVyIGlzIGFsc28gdXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyIHVzZWQgaXMgbnVtcHVuY3Q6OmRlY2ltYWxfcG9pbnQoKS4KKyAgICAgICAqICBEaWdpdCBncm91cGluZyBpcyBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8KKyAgICAgICAqICBudW1wdW5jdDo6Z3JvdXBpbmcoKSBhbmQgbnVtcHVuY3Q6OnRob3VzYW5kc19zZXAoKS4gIElmIHRoZQorICAgICAgICogIHBhdHRlcm4gb2YgZGlnaXQgZ3JvdXBzIGlzbid0IGNvbnNpc3RlbnQsIHNldHMgZXJyIHRvCisgICAgICAgKiAgaW9zX2Jhc2U6OmZhaWxiaXQuCisgICAgICAgKgorICAgICAgICogIElmIHBhcnNpbmcgdGhlIHN0cmluZyB5aWVsZHMgYSB2YWxpZCB2YWx1ZSBmb3IgQGEgdiwgQGEgdiBpcyBzZXQuCisgICAgICAgKiAgT3RoZXJ3aXNlLCBzZXRzIGVyciB0byBpb3NfYmFzZTo6ZmFpbGJpdCBhbmQgbGVhdmVzIEBhIHYgdW5hbHRlcmVkLgorICAgICAgICogIFNldHMgZXJyIHRvIGlvc19iYXNlOjplb2ZiaXQgaWYgdGhlIHN0cmVhbSBpcyBlbXB0aWVkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9faW4gIFN0YXJ0IG9mIGlucHV0IHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIF9fZW5kICBFbmQgb2YgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgX19pbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBfX2VyciAgRXJyb3IgZmxhZ3MgdG8gc2V0LgorICAgICAgICogIEBwYXJhbSAgX192ICBWYWx1ZSB0byBmb3JtYXQgYW5kIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciByZWFkaW5nLgorICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bWVyaWMgcGFyc2luZy4KKyAgICAgICAqCisgICAgICAgKiAgUGFyc2VzIHRoZSBpbnB1dCBzdHJlYW0gaW50byB0aGUgcG9pbnRlciB2YXJpYWJsZSBAYSB2LiAgSXQgZG9lcyBzbworICAgICAgICogIGJ5IGNhbGxpbmcgbnVtX2dldDo6ZG9fZ2V0KCkuCisgICAgICAgKgorICAgICAgICogIFRoZSBpbnB1dCBjaGFyYWN0ZXJzIGFyZSBwYXJzZWQgbGlrZSB0aGUgc2NhbmYgJXAgc3BlY2lmaWVyLgorICAgICAgICoKKyAgICAgICAqICBEaWdpdCBncm91cGluZyBpcyBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8KKyAgICAgICAqICBudW1wdW5jdDo6Z3JvdXBpbmcoKSBhbmQgbnVtcHVuY3Q6OnRob3VzYW5kc19zZXAoKS4gIElmIHRoZQorICAgICAgICogIHBhdHRlcm4gb2YgZGlnaXQgZ3JvdXBzIGlzbid0IGNvbnNpc3RlbnQsIHNldHMgZXJyIHRvCisgICAgICAgKiAgaW9zX2Jhc2U6OmZhaWxiaXQuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZGlnaXQgZ3JvdXBpbmcgZWZmZWN0IGZvciBwb2ludGVycyBpcyBhIGJpdCBhbWJpZ3VvdXMKKyAgICAgICAqICBpbiB0aGUgc3RhbmRhcmQgYW5kIHNob3VsZG4ndCBiZSByZWxpZWQgb24uICBTZWUgRFIgMzQ0LgorICAgICAgICoKKyAgICAgICAqICBJZiBwYXJzaW5nIHRoZSBzdHJpbmcgeWllbGRzIGEgdmFsaWQgdmFsdWUgZm9yIEBhIHYsIEBhIHYgaXMgc2V0LgorICAgICAgICogIE90aGVyd2lzZSwgc2V0cyBlcnIgdG8gaW9zX2Jhc2U6OmZhaWxiaXQgYW5kIGxlYXZlcyBAYSB2IHVuYWx0ZXJlZC4KKyAgICAgICAqICBTZXRzIGVyciB0byBpb3NfYmFzZTo6ZW9mYml0IGlmIHRoZSBzdHJlYW0gaXMgZW1wdGllZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2luICBTdGFydCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBfX2VuZCAgRW5kIG9mIGlucHV0IHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgX19lcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fdiAgVmFsdWUgdG8gZm9ybWF0IGFuZCBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgcmVhZGluZy4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbCB+bnVtX2dldCgpIHsgfQorCisgICAgICBpdGVyX3R5cGUKKyAgICAgIF9NX2V4dHJhY3RfZmxvYXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAorCQkgICAgICAgc3RyaW5nJikgY29uc3Q7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisJaXRlcl90eXBlCisJX01fZXh0cmFjdF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAorCQkgICAgICAgX1ZhbHVlVCYpIGNvbnN0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyPgorICAgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUMj46Ol9fdmFsdWUsIGludD46Ol9fdHlwZQorCV9NX2ZpbmQoY29uc3QgX0NoYXJUMiosIHNpemVfdCBfX2xlbiwgX0NoYXJUMiBfX2MpIGNvbnN0CisJeworCSAgaW50IF9fcmV0ID0gLTE7CisJICBpZiAoX19sZW4gPD0gMTApCisJICAgIHsKKwkgICAgICBpZiAoX19jID49IF9DaGFyVDIoJzAnKSAmJiBfX2MgPCBfQ2hhclQyKF9DaGFyVDIoJzAnKSArIF9fbGVuKSkKKwkJX19yZXQgPSBfX2MgLSBfQ2hhclQyKCcwJyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChfX2MgPj0gX0NoYXJUMignMCcpICYmIF9fYyA8PSBfQ2hhclQyKCc5JykpCisJCV9fcmV0ID0gX19jIC0gX0NoYXJUMignMCcpOworCSAgICAgIGVsc2UgaWYgKF9fYyA+PSBfQ2hhclQyKCdhJykgJiYgX19jIDw9IF9DaGFyVDIoJ2YnKSkKKwkJX19yZXQgPSAxMCArIChfX2MgLSBfQ2hhclQyKCdhJykpOworCSAgICAgIGVsc2UgaWYgKF9fYyA+PSBfQ2hhclQyKCdBJykgJiYgX19jIDw9IF9DaGFyVDIoJ0YnKSkKKwkJX19yZXQgPSAxMCArIChfX2MgLSBfQ2hhclQyKCdBJykpOworCSAgICB9CisJICByZXR1cm4gX19yZXQ7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyPgorICAgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwhX19pc19jaGFyPF9DaGFyVDI+OjpfX3ZhbHVlLAorCQkJCSAgICAgIGludD46Ol9fdHlwZQorCV9NX2ZpbmQoY29uc3QgX0NoYXJUMiogX196ZXJvLCBzaXplX3QgX19sZW4sIF9DaGFyVDIgX19jKSBjb25zdAorCXsKKwkgIGludCBfX3JldCA9IC0xOworCSAgY29uc3QgY2hhcl90eXBlKiBfX3EgPSBjaGFyX3RyYWl0czxfQ2hhclQyPjo6ZmluZChfX3plcm8sIF9fbGVuLCBfX2MpOworCSAgaWYgKF9fcSkKKwkgICAgeworCSAgICAgIF9fcmV0ID0gX19xIC0gX196ZXJvOworCSAgICAgIGlmIChfX3JldCA+IDE1KQorCQlfX3JldCAtPSA2OworCSAgICB9CisJICByZXR1cm4gX19yZXQ7CisJfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bWVyaWMgcGFyc2luZy4KKyAgICAgICAqCisgICAgICAgKiAgUGFyc2VzIHRoZSBpbnB1dCBzdHJlYW0gaW50byB0aGUgdmFyaWFibGUgQGEgdi4gIFRoaXMgZnVuY3Rpb24gaXMgYQorICAgICAgICogIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLiAgQHNlZSBnZXQoKQorICAgICAgICogIGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19iZWcgIFN0YXJ0IG9mIGlucHV0IHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIF9fZW5kICBFbmQgb2YgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgX19pbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBfX2VyciAgRXJyb3IgZmxhZ3MgdG8gc2V0LgorICAgICAgICogIEBwYXJhbSAgX192ICBWYWx1ZSB0byBmb3JtYXQgYW5kIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciByZWFkaW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfTE9OR19MT05HCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KKyNlbmRpZgorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgZmxvYXQmKSBjb25zdDsKKworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCisJICAgICBkb3VibGUmKSBjb25zdDsKKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBfX2RvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCisJICAgICAgIGRvdWJsZSYpIGNvbnN0OworI2Vsc2UKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAorCSAgICAgbG9uZyBkb3VibGUmKSBjb25zdDsKKyNlbmRpZgorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgdm9pZComKSBjb25zdDsKKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAorCSAgICAgbG9uZyBkb3VibGUmKSBjb25zdDsKKyNlbmRpZgorICAgICAgLy9AfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKKworCisgIC8qKgorICAgKiAgQGJyaWVmICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIG51bV9wdXQuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgc3RyaW5nLiAgSXQgaXMKKyAgICogIHVzZWQgYnkgdGhlIG9zdHJlYW0gbnVtZXJpYyBpbnNlcnRpb24gb3BlcmF0b3JzLgorICAgKgorICAgKiAgVGhlIG51bV9wdXQgdGVtcGxhdGUgdXNlcyBwcm90ZWN0ZWQgdmlydHVhbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSB0aGUKKyAgICogIGFjdHVhbCByZXN1bHRzLiAgVGhlIHB1YmxpYyBhY2Nlc3NvcnMgZm9yd2FyZCB0aGUgY2FsbCB0byB0aGUgdmlydHVhbAorICAgKiAgZnVuY3Rpb25zLiAgVGhlc2UgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvCisgICAqICBpbXBsZW1lbnQgdGhlIGJlaGF2aW9yIHRoZXkgcmVxdWlyZSBmcm9tIHRoZSBudW1fcHV0IGZhY2V0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9PdXRJdGVyCQlpdGVyX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIC8vLyBOdW1wdW5jdCBmYWNldCBpZC4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19yZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogZmFjZXQoX19yZWZzKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOdW1lcmljIGZvcm1hdHRpbmcuCisgICAgICAgKgorICAgICAgICogIEZvcm1hdHMgdGhlIGJvb2xlYW4gQGEgdiBhbmQgaW5zZXJ0cyBpdCBpbnRvIGEgc3RyZWFtLiAgSXQgZG9lcyBzbworICAgICAgICogIGJ5IGNhbGxpbmcgbnVtX3B1dDo6ZG9fcHV0KCkuCisgICAgICAgKgorICAgICAgICogIElmIGlvc19iYXNlOjpib29sYWxwaGEgaXMgc2V0LCB3cml0ZXMgY3R5cGU8Q2hhclQ+Ojp0cnVlbmFtZSgpIG9yCisgICAgICAgKiAgY3R5cGU8Q2hhclQ+OjpmYWxzZW5hbWUoKS4gIE90aGVyd2lzZSBmb3JtYXRzIEBhIHYgYXMgYW4gaW50LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgU3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgX19pbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpbGwgIENoYXJfdHlwZSB0byB1c2UgZm9yIGZpbGxpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3YgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHdyaXRpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3YpOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTnVtZXJpYyBmb3JtYXR0aW5nLgorICAgICAgICoKKyAgICAgICAqICBGb3JtYXRzIHRoZSBpbnRlZ3JhbCB2YWx1ZSBAYSB2IGFuZCBpbnNlcnRzIGl0IGludG8gYQorICAgICAgICogIHN0cmVhbS4gIEl0IGRvZXMgc28gYnkgY2FsbGluZyBudW1fcHV0Ojpkb19wdXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgRm9ybWF0dGluZyBpcyBhZmZlY3RlZCBieSB0aGUgZmxhZyBzZXR0aW5ncyBpbiBAYSBpby4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGJhc2ljIGZvcm1hdCBpcyBhZmZlY3RlZCBieSB0aGUgdmFsdWUgb2YgaW8uZmxhZ3MoKSAmCisgICAgICAgKiAgaW9zX2Jhc2U6OmJhc2VmaWVsZC4gIElmIGVxdWFsIHRvIGlvc19iYXNlOjpvY3QsIGZvcm1hdHMgbGlrZSB0aGUKKyAgICAgICAqICBwcmludGYgJW8gc3BlY2lmaWVyLiAgRWxzZSBpZiBlcXVhbCB0byBpb3NfYmFzZTo6aGV4LCBmb3JtYXRzIGxpa2UKKyAgICAgICAqICAleCBvciAlWCB3aXRoIGlvc19iYXNlOjp1cHBlcmNhc2UgdW5zZXQgb3Igc2V0IHJlc3BlY3RpdmVseS4KKyAgICAgICAqICBPdGhlcndpc2UsIGZvcm1hdHMgbGlrZSAlZCwgJWxkLCAlbGxkIGZvciBzaWduZWQgYW5kICV1LCAlbHUsICVsbHUKKyAgICAgICAqICBmb3IgdW5zaWduZWQgdmFsdWVzLiAgTm90ZSB0aGF0IGlmIGJvdGggb2N0IGFuZCBoZXggYXJlIHNldCwgbmVpdGhlcgorICAgICAgICogIHdpbGwgdGFrZSBlZmZlY3QuCisgICAgICAgKgorICAgICAgICogIElmIGlvc19iYXNlOjpzaG93cG9zIGlzIHNldCwgJysnIGlzIG91dHB1dCBiZWZvcmUgcG9zaXRpdmUgdmFsdWVzLgorICAgICAgICogIElmIGlvc19iYXNlOjpzaG93YmFzZSBpcyBzZXQsICcwJyBwcmVjZWRlcyBvY3RhbCB2YWx1ZXMgKGV4Y2VwdCAwKQorICAgICAgICogIGFuZCAnMFt4WF0nIHByZWNlZGVzIGhleCB2YWx1ZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3RlciB1c2VkIGlzIG51bXB1bmN0OjpkZWNpbWFsX3BvaW50KCkuCisgICAgICAgKiAgVGhvdXNhbmRzIHNlcGFyYXRvcnMgYXJlIGluc2VydGVkIGFjY29yZGluZyB0bworICAgICAgICogIG51bXB1bmN0Ojpncm91cGluZygpIGFuZCBudW1wdW5jdDo6dGhvdXNhbmRzX3NlcCgpLgorICAgICAgICoKKyAgICAgICAqICBJZiBpby53aWR0aCgpIGlzIG5vbi16ZXJvLCBlbm91Z2ggQGEgZmlsbCBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCB0bworICAgICAgICogIG1ha2UgdGhlIHJlc3VsdCBhdCBsZWFzdCB0aGF0IHdpZGUuICBJZgorICAgICAgICogIChpby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKSA9PSBpb3NfYmFzZTo6bGVmdCwgcmVzdWx0IGlzCisgICAgICAgKiAgcGFkZGVkIGF0IHRoZSBlbmQuICBJZiBpb3NfYmFzZTo6aW50ZXJuYWwsIHRoZW4gcGFkZGluZyBvY2N1cnMKKyAgICAgICAqICBpbW1lZGlhdGVseSBhZnRlciBlaXRoZXIgYSAnKycgb3IgJy0nIG9yIGFmdGVyICcweCcgb3IgJzBYJy4KKyAgICAgICAqICBPdGhlcndpc2UsIHBhZGRpbmcgb2NjdXJzIGF0IHRoZSBiZWdpbm5pbmcuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19zICBTdHJlYW0gdG8gd3JpdGUgdG8uCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgbG9jYWxlIGFuZCBmbGFncy4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlsbCAgQ2hhcl90eXBlIHRvIHVzZSBmb3IgZmlsbGluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fdiAgVmFsdWUgdG8gZm9ybWF0IGFuZCBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KKworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9fZmlsbCwgX192KTsgfQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX0xPTkdfTE9ORworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KKworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3YpOyB9CisjZW5kaWYKKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBOdW1lcmljIGZvcm1hdHRpbmcuCisgICAgICAgKgorICAgICAgICogIEZvcm1hdHMgdGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlIEBhIHYgYW5kIGluc2VydHMgaXQgaW50byBhIHN0cmVhbS4KKyAgICAgICAqICBJdCBkb2VzIHNvIGJ5IGNhbGxpbmcgbnVtX3B1dDo6ZG9fcHV0KCkuCisgICAgICAgKgorICAgICAgICogIEZvcm1hdHRpbmcgaXMgYWZmZWN0ZWQgYnkgdGhlIGZsYWcgc2V0dGluZ3MgaW4gQGEgaW8uCisgICAgICAgKgorICAgICAgICogIFRoZSBiYXNpYyBmb3JtYXQgaXMgYWZmZWN0ZWQgYnkgdGhlIHZhbHVlIG9mIGlvLmZsYWdzKCkgJgorICAgICAgICogIGlvc19iYXNlOjpmbG9hdGZpZWxkLiAgSWYgZXF1YWwgdG8gaW9zX2Jhc2U6OmZpeGVkLCBmb3JtYXRzIGxpa2UgdGhlCisgICAgICAgKiAgcHJpbnRmICVmIHNwZWNpZmllci4gIEVsc2UgaWYgZXF1YWwgdG8gaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGZvcm1hdHMKKyAgICAgICAqICBsaWtlICVlIG9yICVFIHdpdGggaW9zX2Jhc2U6OnVwcGVyY2FzZSB1bnNldCBvciBzZXQgcmVzcGVjdGl2ZWx5LgorICAgICAgICogIE90aGVyd2lzZSwgZm9ybWF0cyBsaWtlICVnIG9yICVHIGRlcGVuZGluZyBvbiB1cHBlcmNhc2UuICBOb3RlIHRoYXQKKyAgICAgICAqICBpZiBib3RoIGZpeGVkIGFuZCBzY2llbnRpZmljIGFyZSBzZXQsIHRoZSBlZmZlY3Qgd2lsbCBhbHNvIGJlIGxpa2UKKyAgICAgICAqICAlZyBvciAlRy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG91dHB1dCBwcmVjaXNpb24gaXMgZ2l2ZW4gYnkgaW8ucHJlY2lzaW9uKCkuICBUaGlzIHByZWNpc2lvbiBpcworICAgICAgICogIGNhcHBlZCBhdCBudW1lcmljX2xpbWl0czo6ZGlnaXRzMTAgKyAyIChkaWZmZXJlbnQgZm9yIGRvdWJsZSBhbmQKKyAgICAgICAqICBsb25nIGRvdWJsZSkuICBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgNi4KKyAgICAgICAqCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OnNob3dwb3MgaXMgc2V0LCAnKycgaXMgb3V0cHV0IGJlZm9yZSBwb3NpdGl2ZSB2YWx1ZXMuCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OnNob3dwb2ludCBpcyBzZXQsIGEgZGVjaW1hbCBwb2ludCB3aWxsIGFsd2F5cyBiZQorICAgICAgICogIG91dHB1dC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyIHVzZWQgaXMgbnVtcHVuY3Q6OmRlY2ltYWxfcG9pbnQoKS4KKyAgICAgICAqICBUaG91c2FuZHMgc2VwYXJhdG9ycyBhcmUgaW5zZXJ0ZWQgYWNjb3JkaW5nIHRvCisgICAgICAgKiAgbnVtcHVuY3Q6Omdyb3VwaW5nKCkgYW5kIG51bXB1bmN0Ojp0aG91c2FuZHNfc2VwKCkuCisgICAgICAgKgorICAgICAgICogIElmIGlvLndpZHRoKCkgaXMgbm9uLXplcm8sIGVub3VnaCBAYSBmaWxsIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIHRvCisgICAgICAgKiAgbWFrZSB0aGUgcmVzdWx0IGF0IGxlYXN0IHRoYXQgd2lkZS4gIElmCisgICAgICAgKiAgKGlvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpID09IGlvc19iYXNlOjpsZWZ0LCByZXN1bHQgaXMKKyAgICAgICAqICBwYWRkZWQgYXQgdGhlIGVuZC4gIElmIGlvc19iYXNlOjppbnRlcm5hbCwgdGhlbiBwYWRkaW5nIG9jY3VycworICAgICAgICogIGltbWVkaWF0ZWx5IGFmdGVyIGVpdGhlciBhICcrJyBvciAnLScgb3IgYWZ0ZXIgJzB4JyBvciAnMFgnLgorICAgICAgICogIE90aGVyd2lzZSwgcGFkZGluZyBvY2N1cnMgYXQgdGhlIGJlZ2lubmluZy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFN0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgX19maWxsICBDaGFyX3R5cGUgdG8gdXNlIGZvciBmaWxsaW5nLgorICAgICAgICogIEBwYXJhbSAgX192ICBWYWx1ZSB0byBmb3JtYXQgYW5kIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciB3cml0aW5nLgorICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3YpOyB9CisKKyAgICAgIGl0ZXJfdHlwZQorICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAorCSAgbG9uZyBkb3VibGUgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3YpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTnVtZXJpYyBmb3JtYXR0aW5nLgorICAgICAgICoKKyAgICAgICAqICBGb3JtYXRzIHRoZSBwb2ludGVyIHZhbHVlIEBhIHYgYW5kIGluc2VydHMgaXQgaW50byBhIHN0cmVhbS4gIEl0CisgICAgICAgKiAgZG9lcyBzbyBieSBjYWxsaW5nIG51bV9wdXQ6OmRvX3B1dCgpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgQGEgdiBhcyBhbiB1bnNpZ25lZCBsb25nIHdpdGggaW9zX2Jhc2U6OmhleAorICAgICAgICogIGFuZCBpb3NfYmFzZTo6c2hvd2Jhc2Ugc2V0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgU3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgX19pbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpbGwgIENoYXJfdHlwZSB0byB1c2UgZm9yIGZpbGxpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3YgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHdyaXRpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisJaXRlcl90eXBlCisJX01faW5zZXJ0X2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJCQljaGFyIF9fbW9kLCBfVmFsdWVUIF9fdikgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2dyb3VwX2Zsb2F0KGNvbnN0IGNoYXIqIF9fZ3JvdXBpbmcsIHNpemVfdCBfX2dyb3VwaW5nX3NpemUsCisJCSAgICAgY2hhcl90eXBlIF9fc2VwLCBjb25zdCBjaGFyX3R5cGUqIF9fcCwgY2hhcl90eXBlKiBfX25ldywKKwkJICAgICBjaGFyX3R5cGUqIF9fY3MsIGludCYgX19sZW4pIGNvbnN0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgorCWl0ZXJfdHlwZQorCV9NX2luc2VydF9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkJICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBfTV9ncm91cF9pbnQoY29uc3QgY2hhciogX19ncm91cGluZywgc2l6ZV90IF9fZ3JvdXBpbmdfc2l6ZSwKKwkJICAgY2hhcl90eXBlIF9fc2VwLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlKiBfX25ldywKKwkJICAgY2hhcl90eXBlKiBfX2NzLCBpbnQmIF9fbGVuKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgX01fcGFkKGNoYXJfdHlwZSBfX2ZpbGwsIHN0cmVhbXNpemUgX193LCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGNoYXJfdHlwZSogX19uZXcsIGNvbnN0IGNoYXJfdHlwZSogX19jcywgaW50JiBfX2xlbikgY29uc3Q7CisKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbAorICAgICAgfm51bV9wdXQoKSB7IH07CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTnVtZXJpYyBmb3JtYXR0aW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGVzZSBmdW5jdGlvbnMgZG8gdGhlIHdvcmsgb2YgZm9ybWF0dGluZyBudW1lcmljIHZhbHVlcyBhbmQKKyAgICAgICAqICBpbnNlcnRpbmcgdGhlbSBpbnRvIGEgc3RyZWFtLiBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZAorICAgICAgICogIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFN0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgX19maWxsICBDaGFyX3R5cGUgdG8gdXNlIGZvciBmaWxsaW5nLgorICAgICAgICogIEBwYXJhbSAgX192ICBWYWx1ZSB0byBmb3JtYXQgYW5kIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciB3cml0aW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdDsKKworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9pbnNlcnRfaW50KF9fcywgX19pbywgX19maWxsLCBfX3YpOyB9CisKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICAgICBsb25nIGxvbmcgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faW5zZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgX192KTsgfQorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAorCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdik7IH0KKyNlbmRpZgorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUsIGRvdWJsZSkgY29uc3Q7CisKKyAgICAgIC8vIFhYWCBHTElCQ1hYX0FCSSBEZXByZWNhdGVkCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgX19kb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSwgZG91YmxlKSBjb25zdDsKKyNlbHNlCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUsIGxvbmcgZG91YmxlKSBjb25zdDsKKyNlbmRpZgorCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUsIGNvbnN0IHZvaWQqKSBjb25zdDsKKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSwgbG9uZyBkb3VibGUpIGNvbnN0OworI2VuZGlmCisgICAgICAvL0B9CisgICAgfTsKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBsb2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0xEQkwKKworICAvLyBTdWJjbGF1c2UgY29udmVuaWVuY2UgaW50ZXJmYWNlcywgaW5saW5lcy4KKyAgLy8gTkI6IFRoZXNlIGFyZSBpbmxpbmUgYmVjYXVzZSwgd2hlbiB1c2VkIGluIGEgbG9vcCwgc29tZSBjb21waWxlcnMKKyAgLy8gY2FuIGhvaXN0IHRoZSBib2R5IG91dCBvZiB0aGUgbG9vcDsgdGhlbiBpdCdzIGp1c3QgYXMgZmFzdCBhcyB0aGUKKyAgLy8gQyBpcyooKSBmdW5jdGlvbi4KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc3NwYWNlKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxwaGEsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc3B1bmN0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OnhkaWdpdCwgX19jKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBib29sCisgICAgaXN4ZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBfX2MpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KKworICAvLy8gQ29udmVuaWVuY2UgaW50ZXJmYWNlIHRvIGN0eXBlLnRvdXBwZXIoX19jKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBfQ2hhclQKKyAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CisKKyAgLy8vIENvbnZlbmllbmNlIGludGVyZmFjZSB0byBjdHlwZS50b2xvd2VyKF9fYykuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbmxpbmUgX0NoYXJUCisgICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQorICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjIGluY2x1ZGUgPGJpdHMvbG9jYWxlX2ZhY2V0cy50Y2M+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1Y2JhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MKQEAgLTAsMCArMSwxMzYwIEBACisvLyBMb2NhbGUgc3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9sb2NhbGVfZmFjZXRzLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0KKyAqLworCisjaWZuZGVmIF9MT0NBTEVfRkFDRVRTX1RDQworI2RlZmluZSBfTE9DQUxFX0ZBQ0VUU19UQ0MgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBSb3V0aW5lIHRvIGFjY2VzcyBhIGNhY2hlIGZvciB0aGUgZmFjZXQuICBJZiB0aGUgY2FjaGUgZGlkbid0CisgIC8vIGV4aXN0IGJlZm9yZSwgaXQgZ2V0cyBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CisgICAgc3RydWN0IF9fdXNlX2NhY2hlCisgICAgeworICAgICAgY29uc3QgX0ZhY2V0KgorICAgICAgb3BlcmF0b3IoKSAoY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3Q7CisgICAgfTsKKworICAvLyBTcGVjaWFsaXphdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgX191c2VfY2FjaGU8X19udW1wdW5jdF9jYWNoZTxfQ2hhclQ+ID4KKyAgICB7CisgICAgICBjb25zdCBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD4qCisgICAgICBvcGVyYXRvcigpIChjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAorICAgICAgeworCWNvbnN0IHNpemVfdCBfX2kgPSBudW1wdW5jdDxfQ2hhclQ+OjppZC5fTV9pZCgpOworCWNvbnN0IGxvY2FsZTo6ZmFjZXQqKiBfX2NhY2hlcyA9IF9fbG9jLl9NX2ltcGwtPl9NX2NhY2hlczsKKwlpZiAoIV9fY2FjaGVzW19faV0pCisJICB7CisJICAgIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiogX190bXAgPSAwOworCSAgICBfX3RyeQorCSAgICAgIHsKKwkJX190bXAgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxfQ2hhclQ+OworCQlfX3RtcC0+X01fY2FjaGUoX19sb2MpOworCSAgICAgIH0KKwkgICAgX19jYXRjaCguLi4pCisJICAgICAgeworCQlkZWxldGUgX190bXA7CisJCV9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICAgIH0KKwkgICAgX19sb2MuX01faW1wbC0+X01faW5zdGFsbF9jYWNoZShfX3RtcCwgX19pKTsKKwkgIH0KKwlyZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX19udW1wdW5jdF9jYWNoZTxfQ2hhclQ+Kj4oX19jYWNoZXNbX19pXSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgdm9pZAorICAgIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPjo6X01fY2FjaGUoY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICB7CisgICAgICBfTV9hbGxvY2F0ZWQgPSB0cnVlOworCisgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisKKyAgICAgIGNoYXIqIF9fZ3JvdXBpbmcgPSAwOworICAgICAgX0NoYXJUKiBfX3RydWVuYW1lID0gMDsKKyAgICAgIF9DaGFyVCogX19mYWxzZW5hbWUgPSAwOworICAgICAgX190cnkKKwl7CisJICBfTV9ncm91cGluZ19zaXplID0gX19ucC5ncm91cGluZygpLnNpemUoKTsKKwkgIF9fZ3JvdXBpbmcgPSBuZXcgY2hhcltfTV9ncm91cGluZ19zaXplXTsKKwkgIF9fbnAuZ3JvdXBpbmcoKS5jb3B5KF9fZ3JvdXBpbmcsIF9NX2dyb3VwaW5nX3NpemUpOworCSAgX01fZ3JvdXBpbmcgPSBfX2dyb3VwaW5nOworCSAgX01fdXNlX2dyb3VwaW5nID0gKF9NX2dyb3VwaW5nX3NpemUKKwkJCSAgICAgJiYgc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KF9NX2dyb3VwaW5nWzBdKSA+IDAKKwkJCSAgICAgJiYgKF9NX2dyb3VwaW5nWzBdCisJCQkJICE9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxjaGFyPjo6X19tYXgpKTsKKworCSAgX01fdHJ1ZW5hbWVfc2l6ZSA9IF9fbnAudHJ1ZW5hbWUoKS5zaXplKCk7CisJICBfX3RydWVuYW1lID0gbmV3IF9DaGFyVFtfTV90cnVlbmFtZV9zaXplXTsKKwkgIF9fbnAudHJ1ZW5hbWUoKS5jb3B5KF9fdHJ1ZW5hbWUsIF9NX3RydWVuYW1lX3NpemUpOworCSAgX01fdHJ1ZW5hbWUgPSBfX3RydWVuYW1lOworCisJICBfTV9mYWxzZW5hbWVfc2l6ZSA9IF9fbnAuZmFsc2VuYW1lKCkuc2l6ZSgpOworCSAgX19mYWxzZW5hbWUgPSBuZXcgX0NoYXJUW19NX2ZhbHNlbmFtZV9zaXplXTsKKwkgIF9fbnAuZmFsc2VuYW1lKCkuY29weShfX2ZhbHNlbmFtZSwgX01fZmFsc2VuYW1lX3NpemUpOworCSAgX01fZmFsc2VuYW1lID0gX19mYWxzZW5hbWU7CisKKwkgIF9NX2RlY2ltYWxfcG9pbnQgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKKwkgIF9NX3Rob3VzYW5kc19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKKworCSAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCSAgX19jdC53aWRlbihfX251bV9iYXNlOjpfU19hdG9tc19vdXQsCisJCSAgICAgX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0CisJCSAgICAgKyBfX251bV9iYXNlOjpfU19vZW5kLCBfTV9hdG9tc19vdXQpOworCSAgX19jdC53aWRlbihfX251bV9iYXNlOjpfU19hdG9tc19pbiwKKwkJICAgICBfX251bV9iYXNlOjpfU19hdG9tc19pbgorCQkgICAgICsgX19udW1fYmFzZTo6X1NfaWVuZCwgX01fYXRvbXNfaW4pOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIGRlbGV0ZSBbXSBfX2dyb3VwaW5nOworCSAgZGVsZXRlIFtdIF9fdHJ1ZW5hbWU7CisJICBkZWxldGUgW10gX19mYWxzZW5hbWU7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIC8vIFVzZWQgYnkgYm90aCBudW1lcmljIGFuZCBtb25ldGFyeSBmYWNldHMuCisgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBfX2dyb3VwaW5nX3RtcCBzdHJpbmcgY29uc3RydWN0ZWQgaW4KKyAgLy8gbW9uZXlfZ2V0IG9yIG51bV9nZXQgbWF0Y2hlcyB0aGUgY2Fub25pY2FsIGdyb3VwaW5nIGZvciBhIGdpdmVuCisgIC8vIGxvY2FsZS4KKyAgLy8gX19ncm91cGluZ190bXAgaXMgcGFyc2VkIEwgdG8gUgorICAvLyAxLDIyMiw0NDQgPT0gX19ncm91cGluZ190bXAgb2YgIlwxXDNcMyIKKyAgLy8gX19ncm91cGluZyBpcyBwYXJzZWQgUiB0byBMCisgIC8vIDEsMjIyLDQ0NCA9PSBfX2dyb3VwaW5nIG9mICJcMyIgPT0gIlwzXDNcMyIKKyAgX0dMSUJDWFhfUFVSRSBib29sCisgIF9fdmVyaWZ5X2dyb3VwaW5nKGNvbnN0IGNoYXIqIF9fZ3JvdXBpbmcsIHNpemVfdCBfX2dyb3VwaW5nX3NpemUsCisJCSAgICBjb25zdCBzdHJpbmcmIF9fZ3JvdXBpbmdfdG1wKSB0aHJvdyAoKTsKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0xEQkwKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgX01fZXh0cmFjdF9mbG9hdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPgkJCV9fdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiAgICAgICAgICAgICAgICAgIF9fY2FjaGVfdHlwZTsKKyAgICAgIF9fdXNlX2NhY2hlPF9fY2FjaGVfdHlwZT4gX191YzsKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgX19jYWNoZV90eXBlKiBfX2xjID0gX191YyhfX2xvYyk7CisgICAgICBjb25zdCBfQ2hhclQqIF9fbGl0ID0gX19sYy0+X01fYXRvbXNfaW47CisgICAgICBjaGFyX3R5cGUgX19jID0gY2hhcl90eXBlKCk7CisKKyAgICAgIC8vIFRydWUgaWYgX19iZWcgYmVjb21lcyBlcXVhbCB0byBfX2VuZC4KKyAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19iZWcgPT0gX19lbmQ7CisKKyAgICAgIC8vIEZpcnN0IGNoZWNrIGZvciBzaWduLgorICAgICAgaWYgKCFfX3Rlc3Rlb2YpCisJeworCSAgX19jID0gKl9fYmVnOworCSAgY29uc3QgYm9vbCBfX3BsdXMgPSBfX2MgPT0gX19saXRbX19udW1fYmFzZTo6X1NfaXBsdXNdOworCSAgaWYgKChfX3BsdXMgfHwgX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2ltaW51c10pCisJICAgICAgJiYgIShfX2xjLT5fTV91c2VfZ3JvdXBpbmcgJiYgX19jID09IF9fbGMtPl9NX3Rob3VzYW5kc19zZXApCisJICAgICAgJiYgIShfX2MgPT0gX19sYy0+X01fZGVjaW1hbF9wb2ludCkpCisJICAgIHsKKwkgICAgICBfX3h0cmMgKz0gX19wbHVzID8gJysnIDogJy0nOworCSAgICAgIGlmICgrK19fYmVnICE9IF9fZW5kKQorCQlfX2MgPSAqX19iZWc7CisJICAgICAgZWxzZQorCQlfX3Rlc3Rlb2YgPSB0cnVlOworCSAgICB9CisJfQorCisgICAgICAvLyBOZXh0LCBsb29rIGZvciBsZWFkaW5nIHplcm9zLgorICAgICAgYm9vbCBfX2ZvdW5kX21hbnRpc3NhID0gZmFsc2U7CisgICAgICBpbnQgX19zZXBfcG9zID0gMDsKKyAgICAgIHdoaWxlICghX190ZXN0ZW9mKQorCXsKKwkgIGlmICgoX19sYy0+X01fdXNlX2dyb3VwaW5nICYmIF9fYyA9PSBfX2xjLT5fTV90aG91c2FuZHNfc2VwKQorCSAgICAgIHx8IF9fYyA9PSBfX2xjLT5fTV9kZWNpbWFsX3BvaW50KQorCSAgICBicmVhazsKKwkgIGVsc2UgaWYgKF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pemVyb10pCisJICAgIHsKKwkgICAgICBpZiAoIV9fZm91bmRfbWFudGlzc2EpCisJCXsKKwkJICBfX3h0cmMgKz0gJzAnOworCQkgIF9fZm91bmRfbWFudGlzc2EgPSB0cnVlOworCQl9CisJICAgICAgKytfX3NlcF9wb3M7CisKKwkgICAgICBpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkJX19jID0gKl9fYmVnOworCSAgICAgIGVsc2UKKwkJX190ZXN0ZW9mID0gdHJ1ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIC8vIE9ubHkgbmVlZCBhY2NlcHRhYmxlIGRpZ2l0cyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4KKyAgICAgIGJvb2wgX19mb3VuZF9kZWMgPSBmYWxzZTsKKyAgICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsKKyAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOworICAgICAgaWYgKF9fbGMtPl9NX3VzZV9ncm91cGluZykKKwlfX2ZvdW5kX2dyb3VwaW5nLnJlc2VydmUoMzIpOworICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xpdF96ZXJvID0gX19saXQgKyBfX251bV9iYXNlOjpfU19pemVybzsKKworICAgICAgaWYgKCFfX2xjLT5fTV9hbGxvY2F0ZWQpCisJLy8gIkMiIGxvY2FsZQorCXdoaWxlICghX190ZXN0ZW9mKQorCSAgeworCSAgICBjb25zdCBpbnQgX19kaWdpdCA9IF9NX2ZpbmQoX19saXRfemVybywgMTAsIF9fYyk7CisJICAgIGlmIChfX2RpZ2l0ICE9IC0xKQorCSAgICAgIHsKKwkJX194dHJjICs9ICcwJyArIF9fZGlnaXQ7CisJCV9fZm91bmRfbWFudGlzc2EgPSB0cnVlOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoX19jID09IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQKKwkJICAgICAmJiAhX19mb3VuZF9kZWMgJiYgIV9fZm91bmRfc2NpKQorCSAgICAgIHsKKwkJX194dHJjICs9ICcuJzsKKwkJX19mb3VuZF9kZWMgPSB0cnVlOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoKF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pZV0gCisJCSAgICAgIHx8IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pRV0pCisJCSAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9fZm91bmRfbWFudGlzc2EpCisJICAgICAgeworCQkvLyBTY2llbnRpZmljIG5vdGF0aW9uLgorCQlfX3h0cmMgKz0gJ2UnOworCQlfX2ZvdW5kX3NjaSA9IHRydWU7CisJCQorCQkvLyBSZW1vdmUgb3B0aW9uYWwgcGx1cyBvciBtaW51cyBzaWduLCBpZiB0aGV5IGV4aXN0LgorCQlpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkJICB7CisJCSAgICBfX2MgPSAqX19iZWc7CisJCSAgICBjb25zdCBib29sIF9fcGx1cyA9IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pcGx1c107CisJCSAgICBpZiAoX19wbHVzIHx8IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pbWludXNdKQorCQkgICAgICBfX3h0cmMgKz0gX19wbHVzID8gJysnIDogJy0nOworCQkgICAgZWxzZQorCQkgICAgICBjb250aW51ZTsKKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICBfX3Rlc3Rlb2YgPSB0cnVlOworCQkgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGJyZWFrOworCisJICAgIGlmICgrK19fYmVnICE9IF9fZW5kKQorCSAgICAgIF9fYyA9ICpfX2JlZzsKKwkgICAgZWxzZQorCSAgICAgIF9fdGVzdGVvZiA9IHRydWU7CisJICB9CisgICAgICBlbHNlCisJd2hpbGUgKCFfX3Rlc3Rlb2YpCisJICB7CisJICAgIC8vIEFjY29yZGluZyB0byAyMi4yLjIuMS4yLCBwOC05LCBmaXJzdCBsb29rIGZvciB0aG91c2FuZHNfc2VwCisJICAgIC8vIGFuZCBkZWNpbWFsX3BvaW50LgorCSAgICBpZiAoX19sYy0+X01fdXNlX2dyb3VwaW5nICYmIF9fYyA9PSBfX2xjLT5fTV90aG91c2FuZHNfc2VwKQorCSAgICAgIHsKKwkJaWYgKCFfX2ZvdW5kX2RlYyAmJiAhX19mb3VuZF9zY2kpCisJCSAgeworCQkgICAgLy8gTkI6IFRob3VzYW5kcyBzZXBhcmF0b3IgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZworCQkgICAgLy8gaXMgYSBuby1ubywgYXMgaXMgdHdvIGNvbnNlY3V0aXZlIHRob3VzYW5kcyBzZXBhcmF0b3JzLgorCQkgICAgaWYgKF9fc2VwX3BvcykKKwkJICAgICAgeworCQkJX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOworCQkJX19zZXBfcG9zID0gMDsKKwkJICAgICAgfQorCQkgICAgZWxzZQorCQkgICAgICB7CisJCQkvLyBOQjogX19jb252ZXJ0X3RvX3Ygd2lsbCBub3QgYXNzaWduIF9fdiBhbmQgd2lsbAorCQkJLy8gc2V0IHRoZSBmYWlsYml0LgorCQkJX194dHJjLmNsZWFyKCk7CisJCQlicmVhazsKKwkJICAgICAgfQorCQkgIH0KKwkJZWxzZQorCQkgIGJyZWFrOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoX19jID09IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQpCisJICAgICAgeworCQlpZiAoIV9fZm91bmRfZGVjICYmICFfX2ZvdW5kX3NjaSkKKwkJICB7CisJCSAgICAvLyBJZiBubyBncm91cGluZyBjaGFycyBhcmUgc2Vlbiwgbm8gZ3JvdXBpbmcgY2hlY2sKKwkJICAgIC8vIGlzIGFwcGxpZWQuIFRoZXJlZm9yZSBfX2ZvdW5kX2dyb3VwaW5nIGlzIGFkanVzdGVkCisJCSAgICAvLyBvbmx5IGlmIGRlY2ltYWxfcG9pbnQgY29tZXMgYWZ0ZXIgc29tZSB0aG91c2FuZHNfc2VwLgorCQkgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQorCQkgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CisJCSAgICBfX3h0cmMgKz0gJy4nOworCQkgICAgX19mb3VuZF9kZWMgPSB0cnVlOworCQkgIH0KKwkJZWxzZQorCQkgIGJyZWFrOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJY29uc3QgY2hhcl90eXBlKiBfX3EgPQorCQkgIF9fdHJhaXRzX3R5cGU6OmZpbmQoX19saXRfemVybywgMTAsIF9fYyk7CisJCWlmIChfX3EpCisJCSAgeworCQkgICAgX194dHJjICs9ICcwJyArIChfX3EgLSBfX2xpdF96ZXJvKTsKKwkJICAgIF9fZm91bmRfbWFudGlzc2EgPSB0cnVlOworCQkgICAgKytfX3NlcF9wb3M7CisJCSAgfQorCQllbHNlIGlmICgoX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2llXSAKKwkJCSAgfHwgX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2lFXSkKKwkJCSAmJiAhX19mb3VuZF9zY2kgJiYgX19mb3VuZF9tYW50aXNzYSkKKwkJICB7CisJCSAgICAvLyBTY2llbnRpZmljIG5vdGF0aW9uLgorCQkgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpICYmICFfX2ZvdW5kX2RlYykKKwkJICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOworCQkgICAgX194dHJjICs9ICdlJzsKKwkJICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKKwkJICAgIAorCQkgICAgLy8gUmVtb3ZlIG9wdGlvbmFsIHBsdXMgb3IgbWludXMgc2lnbiwgaWYgdGhleSBleGlzdC4KKwkJICAgIGlmICgrK19fYmVnICE9IF9fZW5kKQorCQkgICAgICB7CisJCQlfX2MgPSAqX19iZWc7CisJCQljb25zdCBib29sIF9fcGx1cyA9IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pcGx1c107CisJCQlpZiAoKF9fcGx1cyB8fCBfX2MgPT0gX19saXRbX19udW1fYmFzZTo6X1NfaW1pbnVzXSkKKwkJCSAgICAmJiAhKF9fbGMtPl9NX3VzZV9ncm91cGluZworCQkJCSAmJiBfX2MgPT0gX19sYy0+X01fdGhvdXNhbmRzX3NlcCkKKwkJCSAgICAmJiAhKF9fYyA9PSBfX2xjLT5fTV9kZWNpbWFsX3BvaW50KSkKKwkJICAgICAgX194dHJjICs9IF9fcGx1cyA/ICcrJyA6ICctJzsKKwkJCWVsc2UKKwkJCSAgY29udGludWU7CisJCSAgICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgeworCQkJX190ZXN0ZW9mID0gdHJ1ZTsKKwkJCWJyZWFrOworCQkgICAgICB9CisJCSAgfQorCQllbHNlCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICAKKwkgICAgaWYgKCsrX19iZWcgIT0gX19lbmQpCisJICAgICAgX19jID0gKl9fYmVnOworCSAgICBlbHNlCisJICAgICAgX190ZXN0ZW9mID0gdHJ1ZTsKKwkgIH0KKworICAgICAgLy8gRGlnaXQgZ3JvdXBpbmcgaXMgY2hlY2tlZC4gSWYgZ3JvdXBpbmcgYW5kIGZvdW5kX2dyb3VwaW5nIGRvbid0CisgICAgICAvLyBtYXRjaCwgdGhlbiBnZXQgdmVyeSB2ZXJ5IHVwc2V0LCBhbmQgc2V0IGZhaWxiaXQuCisgICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBBZGQgdGhlIGVuZGluZyBncm91cGluZyBpZiBhIGRlY2ltYWwgb3IgJ2UnLydFJyB3YXNuJ3QgZm91bmQuCisJICBpZiAoIV9fZm91bmRfZGVjICYmICFfX2ZvdW5kX3NjaSkKKwkgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOworCisgICAgICAgICAgaWYgKCFzdGQ6Ol9fdmVyaWZ5X2dyb3VwaW5nKF9fbGMtPl9NX2dyb3VwaW5nLCAKKwkJCQkgICAgICBfX2xjLT5fTV9ncm91cGluZ19zaXplLAorCQkJCSAgICAgIF9fZm91bmRfZ3JvdXBpbmcpKQorCSAgICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisgICAgICBfSW5JdGVyCisgICAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgICAgX01fZXh0cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBfVmFsdWVUJiBfX3YpIGNvbnN0CisgICAgICB7CisgICAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPgkJCSAgICAgX190cmFpdHNfdHlwZTsKKwl1c2luZyBfX2dudV9jeHg6Ol9fYWRkX3Vuc2lnbmVkOworCXR5cGVkZWYgdHlwZW5hbWUgX19hZGRfdW5zaWduZWQ8X1ZhbHVlVD46Ol9fdHlwZSBfX3Vuc2lnbmVkX3R5cGU7CisJdHlwZWRlZiBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD4gICAgICAgICAgICAgICAgICAgICBfX2NhY2hlX3R5cGU7CisJX191c2VfY2FjaGU8X19jYWNoZV90eXBlPiBfX3VjOworCWNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCWNvbnN0IF9fY2FjaGVfdHlwZSogX19sYyA9IF9fdWMoX19sb2MpOworCWNvbnN0IF9DaGFyVCogX19saXQgPSBfX2xjLT5fTV9hdG9tc19pbjsKKwljaGFyX3R5cGUgX19jID0gY2hhcl90eXBlKCk7CisKKwkvLyBOQjogSWZmIF9fYmFzZWZpZWxkID09IDAsIF9fYmFzZSBjYW4gY2hhbmdlIGJhc2VkIG9uIGNvbnRlbnRzLgorCWNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKKwljb25zdCBib29sIF9fb2N0ID0gX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdDsKKwlpbnQgX19iYXNlID0gX19vY3QgPyA4IDogKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXggPyAxNiA6IDEwKTsKKworCS8vIFRydWUgaWYgX19iZWcgYmVjb21lcyBlcXVhbCB0byBfX2VuZC4KKwlib29sIF9fdGVzdGVvZiA9IF9fYmVnID09IF9fZW5kOworCisJLy8gRmlyc3QgY2hlY2sgZm9yIHNpZ24uCisJYm9vbCBfX25lZ2F0aXZlID0gZmFsc2U7CisJaWYgKCFfX3Rlc3Rlb2YpCisJICB7CisJICAgIF9fYyA9ICpfX2JlZzsKKwkgICAgX19uZWdhdGl2ZSA9IF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19pbWludXNdOworCSAgICBpZiAoKF9fbmVnYXRpdmUgfHwgX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2lwbHVzXSkKKwkJJiYgIShfX2xjLT5fTV91c2VfZ3JvdXBpbmcgJiYgX19jID09IF9fbGMtPl9NX3Rob3VzYW5kc19zZXApCisJCSYmICEoX19jID09IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQpKQorCSAgICAgIHsKKwkJaWYgKCsrX19iZWcgIT0gX19lbmQpCisJCSAgX19jID0gKl9fYmVnOworCQllbHNlCisJCSAgX190ZXN0ZW9mID0gdHJ1ZTsKKwkgICAgICB9CisJICB9CisKKwkvLyBOZXh0LCBsb29rIGZvciBsZWFkaW5nIHplcm9zIGFuZCBjaGVjayByZXF1aXJlZCBkaWdpdHMKKwkvLyBmb3IgYmFzZSBmb3JtYXRzLgorCWJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CisJaW50IF9fc2VwX3BvcyA9IDA7CisJd2hpbGUgKCFfX3Rlc3Rlb2YpCisJICB7CisJICAgIGlmICgoX19sYy0+X01fdXNlX2dyb3VwaW5nICYmIF9fYyA9PSBfX2xjLT5fTV90aG91c2FuZHNfc2VwKQorCQl8fCBfX2MgPT0gX19sYy0+X01fZGVjaW1hbF9wb2ludCkKKwkgICAgICBicmVhazsKKwkgICAgZWxzZSBpZiAoX19jID09IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX2l6ZXJvXSAKKwkJICAgICAmJiAoIV9fZm91bmRfemVybyB8fCBfX2Jhc2UgPT0gMTApKQorCSAgICAgIHsKKwkJX19mb3VuZF96ZXJvID0gdHJ1ZTsKKwkJKytfX3NlcF9wb3M7CisJCWlmIChfX2Jhc2VmaWVsZCA9PSAwKQorCQkgIF9fYmFzZSA9IDg7CisJCWlmIChfX2Jhc2UgPT0gOCkKKwkJICBfX3NlcF9wb3MgPSAwOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoX19mb3VuZF96ZXJvCisJCSAgICAgJiYgKF9fYyA9PSBfX2xpdFtfX251bV9iYXNlOjpfU19peF0KKwkJCSB8fCBfX2MgPT0gX19saXRbX19udW1fYmFzZTo6X1NfaVhdKSkKKwkgICAgICB7CisJCWlmIChfX2Jhc2VmaWVsZCA9PSAwKQorCQkgIF9fYmFzZSA9IDE2OworCQlpZiAoX19iYXNlID09IDE2KQorCQkgIHsKKwkJICAgIF9fZm91bmRfemVybyA9IGZhbHNlOworCQkgICAgX19zZXBfcG9zID0gMDsKKwkJICB9CisJCWVsc2UKKwkJICBicmVhazsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICBicmVhazsKKworCSAgICBpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkgICAgICB7CisJCV9fYyA9ICpfX2JlZzsKKwkJaWYgKCFfX2ZvdW5kX3plcm8pCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgX190ZXN0ZW9mID0gdHJ1ZTsKKwkgIH0KKwkKKwkvLyBBdCB0aGlzIHBvaW50LCBiYXNlIGlzIGRldGVybWluZWQuIElmIG5vdCBoZXgsIG9ubHkgYWxsb3cKKwkvLyBiYXNlIGRpZ2l0cyBhcyB2YWxpZCBpbnB1dC4KKwljb25zdCBzaXplX3QgX19sZW4gPSAoX19iYXNlID09IDE2ID8gX19udW1fYmFzZTo6X1NfaWVuZAorCQkJICAgICAgLSBfX251bV9iYXNlOjpfU19pemVybyA6IF9fYmFzZSk7CisKKwkvLyBFeHRyYWN0LgorCXN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOworCWlmIChfX2xjLT5fTV91c2VfZ3JvdXBpbmcpCisJICBfX2ZvdW5kX2dyb3VwaW5nLnJlc2VydmUoMzIpOworCWJvb2wgX190ZXN0ZmFpbCA9IGZhbHNlOworCWJvb2wgX190ZXN0b3ZlcmZsb3cgPSBmYWxzZTsKKwljb25zdCBfX3Vuc2lnbmVkX3R5cGUgX19tYXggPQorCSAgKF9fbmVnYXRpdmUgJiYgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9WYWx1ZVQ+OjpfX2lzX3NpZ25lZCkKKwkgID8gLV9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19taW4KKwkgIDogX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9WYWx1ZVQ+OjpfX21heDsKKwljb25zdCBfX3Vuc2lnbmVkX3R5cGUgX19zbWF4ID0gX19tYXggLyBfX2Jhc2U7CisJX191bnNpZ25lZF90eXBlIF9fcmVzdWx0ID0gMDsKKwlpbnQgX19kaWdpdCA9IDA7CisJY29uc3QgY2hhcl90eXBlKiBfX2xpdF96ZXJvID0gX19saXQgKyBfX251bV9iYXNlOjpfU19pemVybzsKKworCWlmICghX19sYy0+X01fYWxsb2NhdGVkKQorCSAgLy8gIkMiIGxvY2FsZQorCSAgd2hpbGUgKCFfX3Rlc3Rlb2YpCisJICAgIHsKKwkgICAgICBfX2RpZ2l0ID0gX01fZmluZChfX2xpdF96ZXJvLCBfX2xlbiwgX19jKTsKKwkgICAgICBpZiAoX19kaWdpdCA9PSAtMSkKKwkJYnJlYWs7CisJICAgICAgCisJICAgICAgaWYgKF9fcmVzdWx0ID4gX19zbWF4KQorCQlfX3Rlc3RvdmVyZmxvdyA9IHRydWU7CisJICAgICAgZWxzZQorCQl7CisJCSAgX19yZXN1bHQgKj0gX19iYXNlOworCQkgIF9fdGVzdG92ZXJmbG93IHw9IF9fcmVzdWx0ID4gX19tYXggLSBfX2RpZ2l0OworCQkgIF9fcmVzdWx0ICs9IF9fZGlnaXQ7CisJCSAgKytfX3NlcF9wb3M7CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkJX19jID0gKl9fYmVnOworCSAgICAgIGVsc2UKKwkJX190ZXN0ZW9mID0gdHJ1ZTsKKwkgICAgfQorCWVsc2UKKwkgIHdoaWxlICghX190ZXN0ZW9mKQorCSAgICB7CisJICAgICAgLy8gQWNjb3JkaW5nIHRvIDIyLjIuMi4xLjIsIHA4LTksIGZpcnN0IGxvb2sgZm9yIHRob3VzYW5kc19zZXAKKwkgICAgICAvLyBhbmQgZGVjaW1hbF9wb2ludC4KKwkgICAgICBpZiAoX19sYy0+X01fdXNlX2dyb3VwaW5nICYmIF9fYyA9PSBfX2xjLT5fTV90aG91c2FuZHNfc2VwKQorCQl7CisJCSAgLy8gTkI6IFRob3VzYW5kcyBzZXBhcmF0b3IgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZworCQkgIC8vIGlzIGEgbm8tbm8sIGFzIGlzIHR3byBjb25zZWN1dGl2ZSB0aG91c2FuZHMgc2VwYXJhdG9ycy4KKwkJICBpZiAoX19zZXBfcG9zKQorCQkgICAgeworCQkgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CisJCSAgICAgIF9fc2VwX3BvcyA9IDA7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeworCQkgICAgICBfX3Rlc3RmYWlsID0gdHJ1ZTsKKwkJICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlIGlmIChfX2MgPT0gX19sYy0+X01fZGVjaW1hbF9wb2ludCkKKwkJYnJlYWs7CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uc3QgY2hhcl90eXBlKiBfX3EgPQorCQkgICAgX190cmFpdHNfdHlwZTo6ZmluZChfX2xpdF96ZXJvLCBfX2xlbiwgX19jKTsKKwkJICBpZiAoIV9fcSkKKwkJICAgIGJyZWFrOworCQkgIAorCQkgIF9fZGlnaXQgPSBfX3EgLSBfX2xpdF96ZXJvOworCQkgIGlmIChfX2RpZ2l0ID4gMTUpCisJCSAgICBfX2RpZ2l0IC09IDY7CisJCSAgaWYgKF9fcmVzdWx0ID4gX19zbWF4KQorCQkgICAgX190ZXN0b3ZlcmZsb3cgPSB0cnVlOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgX19yZXN1bHQgKj0gX19iYXNlOworCQkgICAgICBfX3Rlc3RvdmVyZmxvdyB8PSBfX3Jlc3VsdCA+IF9fbWF4IC0gX19kaWdpdDsKKwkJICAgICAgX19yZXN1bHQgKz0gX19kaWdpdDsKKwkJICAgICAgKytfX3NlcF9wb3M7CisJCSAgICB9CisJCX0KKwkgICAgICAKKwkgICAgICBpZiAoKytfX2JlZyAhPSBfX2VuZCkKKwkJX19jID0gKl9fYmVnOworCSAgICAgIGVsc2UKKwkJX190ZXN0ZW9mID0gdHJ1ZTsKKwkgICAgfQorCQorCS8vIERpZ2l0IGdyb3VwaW5nIGlzIGNoZWNrZWQuIElmIGdyb3VwaW5nIGFuZCBmb3VuZF9ncm91cGluZyBkb24ndAorCS8vIG1hdGNoLCB0aGVuIGdldCB2ZXJ5IHZlcnkgdXBzZXQsIGFuZCBzZXQgZmFpbGJpdC4KKwlpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCisJICB7CisJICAgIC8vIEFkZCB0aGUgZW5kaW5nIGdyb3VwaW5nLgorCSAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CisKKwkgICAgaWYgKCFzdGQ6Ol9fdmVyaWZ5X2dyb3VwaW5nKF9fbGMtPl9NX2dyb3VwaW5nLAorCQkJCQlfX2xjLT5fTV9ncm91cGluZ19zaXplLAorCQkJCQlfX2ZvdW5kX2dyb3VwaW5nKSkKKwkgICAgICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCSAgfQorCisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDIzLiBOdW1fZ2V0IG92ZXJmbG93IHJlc3VsdC4KKwlpZiAoKCFfX3NlcF9wb3MgJiYgIV9fZm91bmRfemVybyAmJiAhX19mb3VuZF9ncm91cGluZy5zaXplKCkpCisJICAgIHx8IF9fdGVzdGZhaWwpCisJICB7CisJICAgIF9fdiA9IDA7CisJICAgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICB9CisJZWxzZSBpZiAoX190ZXN0b3ZlcmZsb3cpCisJICB7CisJICAgIGlmIChfX25lZ2F0aXZlCisJCSYmIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19pc19zaWduZWQpCisJICAgICAgX192ID0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9WYWx1ZVQ+OjpfX21pbjsKKwkgICAgZWxzZQorCSAgICAgIF9fdiA9IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19tYXg7CisJICAgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICB9CisJZWxzZQorCSAgX192ID0gX19uZWdhdGl2ZSA/IC1fX3Jlc3VsdCA6IF9fcmVzdWx0OworCisJaWYgKF9fdGVzdGVvZikKKwkgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJcmV0dXJuIF9fYmVnOworICAgICAgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gMTcuICBCYWQgYm9vbCBwYXJzaW5nCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKKyAgICB7CisgICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkKKyAgICAgICAgeworCSAgLy8gUGFyc2UgYm9vbCB2YWx1ZXMgYXMgbG9uZy4KKyAgICAgICAgICAvLyBOQjogV2UgY2FuJ3QganVzdCBjYWxsIGRvX2dldChsb25nKSBoZXJlLCBhcyBpdCBtaWdodAorICAgICAgICAgIC8vIHJlZmVyIHRvIGEgZGVyaXZlZCBjbGFzcy4KKwkgIGxvbmcgX19sID0gLTE7CisgICAgICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX2wpOworCSAgaWYgKF9fbCA9PSAwIHx8IF9fbCA9PSAxKQorCSAgICBfX3YgPSBib29sKF9fbCk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gMjMuIE51bV9nZXQgb3ZlcmZsb3cgcmVzdWx0LgorCSAgICAgIF9fdiA9IHRydWU7CisJICAgICAgX19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisJICAvLyBQYXJzZSBib29sIHZhbHVlcyBhcyBhbHBoYW51bWVyaWMuCisJICB0eXBlZGVmIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiAgX19jYWNoZV90eXBlOworCSAgX191c2VfY2FjaGU8X19jYWNoZV90eXBlPiBfX3VjOworCSAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisJICBjb25zdCBfX2NhY2hlX3R5cGUqIF9fbGMgPSBfX3VjKF9fbG9jKTsKKworCSAgYm9vbCBfX3Rlc3RmID0gdHJ1ZTsKKwkgIGJvb2wgX190ZXN0dCA9IHRydWU7CisJICBib29sIF9fZG9uZWYgPSBfX2xjLT5fTV9mYWxzZW5hbWVfc2l6ZSA9PSAwOworCSAgYm9vbCBfX2RvbmV0ID0gX19sYy0+X01fdHJ1ZW5hbWVfc2l6ZSA9PSAwOworCSAgYm9vbCBfX3Rlc3Rlb2YgPSBmYWxzZTsKKwkgIHNpemVfdCBfX24gPSAwOworCSAgd2hpbGUgKCFfX2RvbmVmIHx8ICFfX2RvbmV0KQorCSAgICB7CisJICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCQl7CisJCSAgX190ZXN0ZW9mID0gdHJ1ZTsKKwkJICBicmVhazsKKwkJfQorCisJICAgICAgY29uc3QgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKKworCSAgICAgIGlmICghX19kb25lZikKKwkJX190ZXN0ZiA9IF9fYyA9PSBfX2xjLT5fTV9mYWxzZW5hbWVbX19uXTsKKworCSAgICAgIGlmICghX190ZXN0ZiAmJiBfX2RvbmV0KQorCQlicmVhazsKKworCSAgICAgIGlmICghX19kb25ldCkKKwkJX190ZXN0dCA9IF9fYyA9PSBfX2xjLT5fTV90cnVlbmFtZVtfX25dOworCisJICAgICAgaWYgKCFfX3Rlc3R0ICYmIF9fZG9uZWYpCisJCWJyZWFrOworCisJICAgICAgaWYgKCFfX3Rlc3R0ICYmICFfX3Rlc3RmKQorCQlicmVhazsKKworCSAgICAgICsrX19uOworCSAgICAgICsrX19iZWc7CisKKwkgICAgICBfX2RvbmVmID0gIV9fdGVzdGYgfHwgX19uID49IF9fbGMtPl9NX2ZhbHNlbmFtZV9zaXplOworCSAgICAgIF9fZG9uZXQgPSAhX190ZXN0dCB8fCBfX24gPj0gX19sYy0+X01fdHJ1ZW5hbWVfc2l6ZTsKKwkgICAgfQorCSAgaWYgKF9fdGVzdGYgJiYgX19uID09IF9fbGMtPl9NX2ZhbHNlbmFtZV9zaXplICYmIF9fbikKKwkgICAgeworCSAgICAgIF9fdiA9IGZhbHNlOworCSAgICAgIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX2xjLT5fTV90cnVlbmFtZV9zaXplKQorCQlfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICAgIGVsc2UKKwkJX19lcnIgPSBfX3Rlc3Rlb2YgPyBpb3NfYmFzZTo6ZW9mYml0IDogaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9fdGVzdHQgJiYgX19uID09IF9fbGMtPl9NX3RydWVuYW1lX3NpemUgJiYgX19uKQorCSAgICB7CisJICAgICAgX192ID0gdHJ1ZTsKKwkgICAgICBfX2VyciA9IF9fdGVzdGVvZiA/IGlvc19iYXNlOjplb2ZiaXQgOiBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAgIC8vIDIzLiBOdW1fZ2V0IG92ZXJmbG93IHJlc3VsdC4KKwkgICAgICBfX3YgPSBmYWxzZTsKKwkgICAgICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCSAgICAgIGlmIChfX3Rlc3Rlb2YpCisJCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKKyAgICB7CisgICAgICBzdHJpbmcgX194dHJjOworICAgICAgX194dHJjLnJlc2VydmUoMzIpOworICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CisgICAgICBzdGQ6Ol9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19nZXRfY19sb2NhbGUoKSk7CisgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CisgICAgeworICAgICAgc3RyaW5nIF9feHRyYzsKKyAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKKyAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOworICAgICAgc3RkOjpfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfZ2V0X2NfbG9jYWxlKCkpOworICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBfX2RvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAorICAgIHsKKyAgICAgIHN0cmluZyBfX3h0cmM7CisgICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CisgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKKyAgICAgIHN0ZDo6X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2dldF9jX2xvY2FsZSgpKTsKKyAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKKwlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworICAgICAgcmV0dXJuIF9fYmVnOworICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CisgICAgeworICAgICAgc3RyaW5nIF9feHRyYzsKKyAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKKyAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOworICAgICAgc3RkOjpfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfZ2V0X2NfbG9jYWxlKCkpOworICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CisgICAgeworICAgICAgLy8gUHJlcGFyZSBmb3IgaGV4IGZvcm1hdHRlZCBpbnB1dC4KKyAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzICAgICAgICBmbXRmbGFnczsKKyAgICAgIGNvbnN0IGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOworICAgICAgX19pby5mbGFncygoX19mbXQgJiB+aW9zX2Jhc2U6OmJhc2VmaWVsZCkgfCBpb3NfYmFzZTo6aGV4KTsKKworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwoc2l6ZW9mKHZvaWQqKQorCQkJCQkgICAgIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSksCisJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nPjo6X190eXBlIF9VSW50UHRyVHlwZTsgICAgICAgCisKKyAgICAgIF9VSW50UHRyVHlwZSBfX3VsOworICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3VsKTsKKworICAgICAgLy8gUmVzZXQgZnJvbSBoZXggZm9ybWF0dGVkIGlucHV0LgorICAgICAgX19pby5mbGFncyhfX2ZtdCk7CisKKyAgICAgIF9fdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fdWwpOworICAgICAgcmV0dXJuIF9fYmVnOworICAgIH0KKworICAvLyBGb3IgdXNlIGJ5IGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IHR5cGVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuCisgIC8vIGNvbnZlcnRlZCBpbnRvIGEgY2hhcl90eXBlIHN0cmluZy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICB2b2lkCisgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgX01fcGFkKF9DaGFyVCBfX2ZpbGwsIHN0cmVhbXNpemUgX193LCBpb3NfYmFzZSYgX19pbywKKwkgICBfQ2hhclQqIF9fbmV3LCBjb25zdCBfQ2hhclQqIF9fY3MsIGludCYgX19sZW4pIGNvbnN0CisgICAgeworICAgICAgLy8gWzIyLjIuMi4yLjJdIFN0YWdlIDMuCisgICAgICAvLyBJZiBuZWNlc3NhcnksIHBhZC4KKyAgICAgIF9fcGFkPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+OjpfU19wYWQoX19pbywgX19maWxsLCBfX25ldywKKwkJCQkJCSAgX19jcywgX193LCBfX2xlbik7CisgICAgICBfX2xlbiA9IHN0YXRpY19jYXN0PGludD4oX193KTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfTERCTAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1ZhbHVlVD4KKyAgICBpbnQKKyAgICBfX2ludF90b19jaGFyKF9DaGFyVCogX19idWZlbmQsIF9WYWx1ZVQgX192LCBjb25zdCBfQ2hhclQqIF9fbGl0LAorCQkgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzLCBib29sIF9fZGVjKQorICAgIHsKKyAgICAgIF9DaGFyVCogX19idWYgPSBfX2J1ZmVuZDsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fZGVjLCB0cnVlKSkKKwl7CisJICAvLyBEZWNpbWFsLgorCSAgZG8KKwkgICAgeworCSAgICAgICotLV9fYnVmID0gX19saXRbKF9fdiAlIDEwKSArIF9fbnVtX2Jhc2U6Ol9TX29kaWdpdHNdOworCSAgICAgIF9fdiAvPSAxMDsKKwkgICAgfQorCSAgd2hpbGUgKF9fdiAhPSAwKTsKKwl9CisgICAgICBlbHNlIGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpiYXNlZmllbGQpID09IGlvc19iYXNlOjpvY3QpCisJeworCSAgLy8gT2N0YWwuCisJICBkbworCSAgICB7CisJICAgICAgKi0tX19idWYgPSBfX2xpdFsoX192ICYgMHg3KSArIF9fbnVtX2Jhc2U6Ol9TX29kaWdpdHNdOworCSAgICAgIF9fdiA+Pj0gMzsKKwkgICAgfQorCSAgd2hpbGUgKF9fdiAhPSAwKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLy8gSGV4LgorCSAgY29uc3QgYm9vbCBfX3VwcGVyY2FzZSA9IF9fZmxhZ3MgJiBpb3NfYmFzZTo6dXBwZXJjYXNlOworCSAgY29uc3QgaW50IF9fY2FzZV9vZmZzZXQgPSBfX3VwcGVyY2FzZSA/IF9fbnVtX2Jhc2U6Ol9TX291ZGlnaXRzCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19udW1fYmFzZTo6X1Nfb2RpZ2l0czsKKwkgIGRvCisJICAgIHsKKwkgICAgICAqLS1fX2J1ZiA9IF9fbGl0WyhfX3YgJiAweGYpICsgX19jYXNlX29mZnNldF07CisJICAgICAgX192ID4+PSA0OworCSAgICB9CisJICB3aGlsZSAoX192ICE9IDApOworCX0KKyAgICAgIHJldHVybiBfX2J1ZmVuZCAtIF9fYnVmOworICAgIH0KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0xEQkwKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIHZvaWQKKyAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBfTV9ncm91cF9pbnQoY29uc3QgY2hhciogX19ncm91cGluZywgc2l6ZV90IF9fZ3JvdXBpbmdfc2l6ZSwgX0NoYXJUIF9fc2VwLAorCQkgaW9zX2Jhc2UmLCBfQ2hhclQqIF9fbmV3LCBfQ2hhclQqIF9fY3MsIGludCYgX19sZW4pIGNvbnN0CisgICAgeworICAgICAgX0NoYXJUKiBfX3AgPSBzdGQ6Ol9fYWRkX2dyb3VwaW5nKF9fbmV3LCBfX3NlcCwgX19ncm91cGluZywKKwkJCQkJX19ncm91cGluZ19zaXplLCBfX2NzLCBfX2NzICsgX19sZW4pOworICAgICAgX19sZW4gPSBfX3AgLSBfX25ldzsKKyAgICB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisgICAgICBfT3V0SXRlcgorICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgICBfTV9pbnNlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCisJCSAgICBfVmFsdWVUIF9fdikgY29uc3QKKyAgICAgIHsKKwl1c2luZyBfX2dudV9jeHg6Ol9fYWRkX3Vuc2lnbmVkOworCXR5cGVkZWYgdHlwZW5hbWUgX19hZGRfdW5zaWduZWQ8X1ZhbHVlVD46Ol9fdHlwZSBfX3Vuc2lnbmVkX3R5cGU7CisJdHlwZWRlZiBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD4JICAgICAgICAgICAgIF9fY2FjaGVfdHlwZTsKKwlfX3VzZV9jYWNoZTxfX2NhY2hlX3R5cGU+IF9fdWM7CisJY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisJY29uc3QgX19jYWNoZV90eXBlKiBfX2xjID0gX191YyhfX2xvYyk7CisJY29uc3QgX0NoYXJUKiBfX2xpdCA9IF9fbGMtPl9NX2F0b21zX291dDsKKwljb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKKworCS8vIExvbmcgZW5vdWdoIHRvIGhvbGQgaGV4LCBkZWMsIGFuZCBvY3RhbCByZXByZXNlbnRhdGlvbnMuCisJY29uc3QgaW50IF9faWxlbiA9IDUgKiBzaXplb2YoX1ZhbHVlVCk7CisJX0NoYXJUKiBfX2NzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCSAgICAgKiBfX2lsZW4pKTsKKworCS8vIFsyMi4yLjIuMi4yXSBTdGFnZSAxLCBudW1lcmljIGNvbnZlcnNpb24gdG8gY2hhcmFjdGVyLgorCS8vIFJlc3VsdCBpcyByZXR1cm5lZCByaWdodC1qdXN0aWZpZWQgaW4gdGhlIGJ1ZmZlci4KKwljb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2ZsYWdzICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKKwljb25zdCBib29sIF9fZGVjID0gKF9fYmFzZWZpZWxkICE9IGlvc19iYXNlOjpvY3QKKwkJCSAgICAmJiBfX2Jhc2VmaWVsZCAhPSBpb3NfYmFzZTo6aGV4KTsKKwljb25zdCBfX3Vuc2lnbmVkX3R5cGUgX191ID0gKChfX3YgPiAwIHx8ICFfX2RlYykKKwkJCQkgICAgID8gX191bnNpZ25lZF90eXBlKF9fdikKKwkJCQkgICAgIDogLV9fdW5zaWduZWRfdHlwZShfX3YpKTsKKyAJaW50IF9fbGVuID0gX19pbnRfdG9fY2hhcihfX2NzICsgX19pbGVuLCBfX3UsIF9fbGl0LCBfX2ZsYWdzLCBfX2RlYyk7CisJX19jcyArPSBfX2lsZW4gLSBfX2xlbjsKKworCS8vIEFkZCBncm91cGluZywgaWYgbmVjZXNzYXJ5LgorCWlmIChfX2xjLT5fTV91c2VfZ3JvdXBpbmcpCisJICB7CisJICAgIC8vIEdyb3VwaW5nIGNhbiBhZGQgKGFsbW9zdCkgYXMgbWFueSBzZXBhcmF0b3JzIGFzIHRoZSBudW1iZXIKKwkgICAgLy8gb2YgZGlnaXRzICsgc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIG51bWVyaWMgYmFzZSBvciBzaWduLgorCSAgICBfQ2hhclQqIF9fY3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCQkgICogKF9fbGVuICsgMSkKKwkJCQkJCQkJICAqIDIpKTsKKwkgICAgX01fZ3JvdXBfaW50KF9fbGMtPl9NX2dyb3VwaW5nLCBfX2xjLT5fTV9ncm91cGluZ19zaXplLAorCQkJIF9fbGMtPl9NX3Rob3VzYW5kc19zZXAsIF9faW8sIF9fY3MyICsgMiwgX19jcywgX19sZW4pOworCSAgICBfX2NzID0gX19jczIgKyAyOworCSAgfQorCisJLy8gQ29tcGxldGUgU3RhZ2UgMSwgcHJlcGVuZCBudW1lcmljIGJhc2Ugb3Igc2lnbi4KKwlpZiAoX19idWlsdGluX2V4cGVjdChfX2RlYywgdHJ1ZSkpCisJICB7CisJICAgIC8vIERlY2ltYWwuCisJICAgIGlmIChfX3YgPj0gMCkKKwkgICAgICB7CisJCWlmIChib29sKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd3BvcykKKwkJICAgICYmIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19pc19zaWduZWQpCisJCSAgKi0tX19jcyA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX29wbHVzXSwgKytfX2xlbjsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICAqLS1fX2NzID0gX19saXRbX19udW1fYmFzZTo6X1Nfb21pbnVzXSwgKytfX2xlbjsKKwkgIH0KKwllbHNlIGlmIChib29sKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpICYmIF9fdikKKwkgIHsKKwkgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpCisJICAgICAgKi0tX19jcyA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX29kaWdpdHNdLCArK19fbGVuOworCSAgICBlbHNlCisJICAgICAgeworCQkvLyAneCcgb3IgJ1gnCisJCWNvbnN0IGJvb2wgX191cHBlcmNhc2UgPSBfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZTsKKwkJKi0tX19jcyA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX294ICsgX191cHBlcmNhc2VdOworCQkvLyAnMCcKKwkJKi0tX19jcyA9IF9fbGl0W19fbnVtX2Jhc2U6Ol9TX29kaWdpdHNdOworCQlfX2xlbiArPSAyOworCSAgICAgIH0KKwkgIH0KKworCS8vIFBhZC4KKwljb25zdCBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKKwlpZiAoX193ID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19sZW4pKQorCSAgeworCSAgICBfQ2hhclQqIF9fY3MzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCQkgICogX193KSk7CisJICAgIF9NX3BhZChfX2ZpbGwsIF9fdywgX19pbywgX19jczMsIF9fY3MsIF9fbGVuKTsKKwkgICAgX19jcyA9IF9fY3MzOworCSAgfQorCV9faW8ud2lkdGgoMCk7CisKKwkvLyBbMjIuMi4yLjIuMl0gU3RhZ2UgNC4KKwkvLyBXcml0ZSByZXN1bHRpbmcsIGZ1bGx5LWZvcm1hdHRlZCBzdHJpbmcgdG8gb3V0cHV0IGl0ZXJhdG9yLgorCXJldHVybiBzdGQ6Ol9fd3JpdGUoX19zLCBfX2NzLCBfX2xlbik7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICB2b2lkCisgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgX01fZ3JvdXBfZmxvYXQoY29uc3QgY2hhciogX19ncm91cGluZywgc2l6ZV90IF9fZ3JvdXBpbmdfc2l6ZSwKKwkJICAgX0NoYXJUIF9fc2VwLCBjb25zdCBfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX25ldywKKwkJICAgX0NoYXJUKiBfX2NzLCBpbnQmIF9fbGVuKSBjb25zdAorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI4Mi4gV2hhdCB0eXBlcyBkb2VzIG51bXB1bmN0IGdyb3VwaW5nIHJlZmVyIHRvPworICAgICAgLy8gQWRkIGdyb3VwaW5nLCBpZiBuZWNlc3NhcnkuCisgICAgICBjb25zdCBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX2NzIDogX19sZW47CisgICAgICBfQ2hhclQqIF9fcDIgPSBzdGQ6Ol9fYWRkX2dyb3VwaW5nKF9fbmV3LCBfX3NlcCwgX19ncm91cGluZywKKwkJCQkJIF9fZ3JvdXBpbmdfc2l6ZSwKKwkJCQkJIF9fY3MsIF9fY3MgKyBfX2RlY2xlbik7CisKKyAgICAgIC8vIFRhY2sgb24gZGVjaW1hbCBwYXJ0LgorICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9fbmV3OworICAgICAgaWYgKF9fcCkKKwl7CisJICBjaGFyX3RyYWl0czxfQ2hhclQ+Ojpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CisJICBfX25ld2xlbiArPSBfX2xlbiAtIF9fZGVjbGVuOworCX0KKyAgICAgIF9fbGVuID0gX19uZXdsZW47CisgICAgfQorCisgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSB1c2VzIHZzbnByaW50ZiAob3IgdnNwcmludGYoKSwgd2hlbgorICAvLyBfR0xJQkNYWF9VU0VfQzk5IGlzIG5vdCBkZWZpbmVkKSB0byBjb252ZXJ0IGZsb2F0aW5nIHBvaW50IHZhbHVlcworICAvLyBmb3IgaW5zZXJ0aW9uIGludG8gYSBzdHJlYW0uICBBbiBvcHRpbWl6YXRpb24gd291bGQgYmUgdG8gcmVwbGFjZQorICAvLyB0aGVtIHdpdGggY29kZSB0aGF0IHdvcmtzIGRpcmVjdGx5IG9uIGEgd2lkZSBidWZmZXIgYW5kIHRoZW4gdXNlCisgIC8vIF9fcGFkIHRvIGRvIHRoZSBwYWRkaW5nLiAgSXQgd291bGQgYmUgZ29vZCB0byByZXBsYWNlIHRoZW0gYW55d2F5CisgIC8vIHRvIGdhaW4gYmFjayB0aGUgZWZmaWNpZW5jeSB0aGF0IEMrKyBwcm92aWRlcyBieSBrbm93aW5nIHVwIGZyb250CisgIC8vIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZXMgdG8gaW5zZXJ0LiAgQWxzbywgc3ByaW50ZiBpcyBkYW5nZXJvdXMKKyAgLy8gc2luY2UgbWF5IGxlYWQgdG8gYWNjaWRlbnRhbCBidWZmZXIgb3ZlcnJ1bnMuICBUaGlzCisgIC8vIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhlIEMrKyBzdGFuZGFyZCBmYWlybHkgZGlyZWN0bHkgYXMKKyAgLy8gb3V0bGluZWQgaW4gMjIuMi4yLjIgW2xpYi5sb2NhbGUubnVtLnB1dF0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgorICAgICAgX091dEl0ZXIKKyAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgICAgX01faW5zZXJ0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCisJCSAgICAgICBfVmFsdWVUIF9fdikgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIF9fbnVtcHVuY3RfY2FjaGU8X0NoYXJUPiAgICAgICAgICAgICAgICBfX2NhY2hlX3R5cGU7CisJX191c2VfY2FjaGU8X19jYWNoZV90eXBlPiBfX3VjOworCWNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCWNvbnN0IF9fY2FjaGVfdHlwZSogX19sYyA9IF9fdWMoX19sb2MpOworCisJLy8gVXNlIGRlZmF1bHQgcHJlY2lzaW9uIGlmIG91dCBvZiByYW5nZS4KKwljb25zdCBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCkgPCAwID8gNiA6IF9faW8ucHJlY2lzaW9uKCk7CisKKwljb25zdCBpbnQgX19tYXhfZGlnaXRzID0KKwkgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19kaWdpdHMxMDsKKworCS8vIFsyMi4yLjIuMi4yXSBTdGFnZSAxLCBudW1lcmljIGNvbnZlcnNpb24gdG8gY2hhcmFjdGVyLgorCWludCBfX2xlbjsKKwkvLyBMb25nIGVub3VnaCBmb3IgdGhlIG1heCBmb3JtYXQgc3BlYy4KKwljaGFyIF9fZmJ1ZlsxNl07CisJX19udW1fYmFzZTo6X1NfZm9ybWF0X2Zsb2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OQorCS8vIEZpcnN0IHRyeSBhIGJ1ZmZlciBwZXJoYXBzIGJpZyBlbm91Z2ggKG1vc3QgcHJvYmFibHkgc3VmZmljaWVudAorCS8vIGZvciBub24taW9zX2Jhc2U6OmZpeGVkIG91dHB1dHMpCisJaW50IF9fY3Nfc2l6ZSA9IF9fbWF4X2RpZ2l0cyAqIDM7CisJY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOworCV9fbGVuID0gc3RkOjpfX2NvbnZlcnRfZnJvbV92KF9TX2dldF9jX2xvY2FsZSgpLCBfX2NzLCBfX2NzX3NpemUsCisJCQkJICAgICAgX19mYnVmLCBfX3ByZWMsIF9fdik7CisKKwkvLyBJZiB0aGUgYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLCB0cnkgYWdhaW4gd2l0aCB0aGUgY29ycmVjdCBzaXplLgorCWlmIChfX2xlbiA+PSBfX2NzX3NpemUpCisJICB7CisJICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKKwkgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOworCSAgICBfX2xlbiA9IHN0ZDo6X19jb252ZXJ0X2Zyb21fdihfU19nZXRfY19sb2NhbGUoKSwgX19jcywgX19jc19zaXplLAorCQkJCQkgIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOworCSAgfQorI2Vsc2UKKwkvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgbG9uZyBpb3NfYmFzZTo6Zml4ZWQgb3V0cHV0cworCWNvbnN0IGJvb2wgX19maXhlZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpmaXhlZDsKKwljb25zdCBpbnQgX19tYXhfZXhwID0KKwkgIF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUPjo6X19tYXhfZXhwb25lbnQxMDsKKworCS8vIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQgc3RyaW5nIGlzIGNvbXB1dGVkIGFzIGZvbGxvd3MuCisJLy8gaW9zX2Jhc2U6OmZpeGVkIG91dHB1dHMgbWF5IG5lZWQgdXAgdG8gX19tYXhfZXhwICsgMSBjaGFycworCS8vIGZvciB0aGUgaW50ZWdlciBwYXJ0ICsgX19wcmVjIGNoYXJzIGZvciB0aGUgZnJhY3Rpb25hbCBwYXJ0CisJLy8gKyAzIGNoYXJzIGZvciBzaWduLCBkZWNpbWFsIHBvaW50LCAnXDAnLiBPbiB0aGUgb3RoZXIgaGFuZCwKKwkvLyBmb3Igbm9uLWZpeGVkIG91dHB1dHMgX19tYXhfZGlnaXRzICogMiArIF9fcHJlYyBjaGFycyBhcmUKKwkvLyBsYXJnZWx5IHN1ZmZpY2llbnQuCisJY29uc3QgaW50IF9fY3Nfc2l6ZSA9IF9fZml4ZWQgPyBfX21heF9leHAgKyBfX3ByZWMgKyA0CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21heF9kaWdpdHMgKiAyICsgX19wcmVjOworCWNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKKwlfX2xlbiA9IHN0ZDo6X19jb252ZXJ0X2Zyb21fdihfU19nZXRfY19sb2NhbGUoKSwgX19jcywgMCwgX19mYnVmLCAKKwkJCQkgICAgICBfX3ByZWMsIF9fdik7CisjZW5kaWYKKworCS8vIFsyMi4yLjIuMi4yXSBTdGFnZSAyLCBjb252ZXJ0IHRvIGNoYXJfdHlwZSwgdXNpbmcgY29ycmVjdAorCS8vIG51bXB1bmN0LmRlY2ltYWxfcG9pbnQoKSB2YWx1ZXMgZm9yICcuJyBhbmQgYWRkaW5nIGdyb3VwaW5nLgorCWNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKwkKKwlfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCisJCQkJCQkJICAgICAqIF9fbGVuKSk7CisJX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOworCQorCS8vIFJlcGxhY2UgZGVjaW1hbCBwb2ludC4KKwlfQ2hhclQqIF9fd3AgPSAwOworCWNvbnN0IGNoYXIqIF9fcCA9IGNoYXJfdHJhaXRzPGNoYXI+OjpmaW5kKF9fY3MsIF9fbGVuLCAnLicpOworCWlmIChfX3ApCisJICB7CisJICAgIF9fd3AgPSBfX3dzICsgKF9fcCAtIF9fY3MpOworCSAgICAqX193cCA9IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQ7CisJICB9CisJCisJLy8gQWRkIGdyb3VwaW5nLCBpZiBuZWNlc3NhcnkuCisJLy8gTi5CLiBNYWtlIHN1cmUgdG8gbm90IGdyb3VwIHRoaW5ncyBsaWtlIDJlMjAsIGkuZS4sIG5vIGRlY2ltYWwKKwkvLyBwb2ludCwgc2NpZW50aWZpYyBub3RhdGlvbi4KKwlpZiAoX19sYy0+X01fdXNlX2dyb3VwaW5nCisJICAgICYmIChfX3dwIHx8IF9fbGVuIDwgMyB8fCAoX19jc1sxXSA8PSAnOScgJiYgX19jc1syXSA8PSAnOScKKwkJCQkgICAgICAmJiBfX2NzWzFdID49ICcwJyAmJiBfX2NzWzJdID49ICcwJykpKQorCSAgeworCSAgICAvLyBHcm91cGluZyBjYW4gYWRkIChhbG1vc3QpIGFzIG1hbnkgc2VwYXJhdG9ycyBhcyB0aGUKKwkgICAgLy8gbnVtYmVyIG9mIGRpZ2l0cywgYnV0IG5vIG1vcmUuCisJICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCisJCQkJCQkJCSAgKiBfX2xlbiAqIDIpKTsKKwkgICAgCisJICAgIHN0cmVhbXNpemUgX19vZmYgPSAwOworCSAgICBpZiAoX19jc1swXSA9PSAnLScgfHwgX19jc1swXSA9PSAnKycpCisJICAgICAgeworCQlfX29mZiA9IDE7CisJCV9fd3MyWzBdID0gX193c1swXTsKKwkJX19sZW4gLT0gMTsKKwkgICAgICB9CisJICAgIAorCSAgICBfTV9ncm91cF9mbG9hdChfX2xjLT5fTV9ncm91cGluZywgX19sYy0+X01fZ3JvdXBpbmdfc2l6ZSwKKwkJCSAgIF9fbGMtPl9NX3Rob3VzYW5kc19zZXAsIF9fd3AsIF9fd3MyICsgX19vZmYsCisJCQkgICBfX3dzICsgX19vZmYsIF9fbGVuKTsKKwkgICAgX19sZW4gKz0gX19vZmY7CisJICAgIAorCSAgICBfX3dzID0gX193czI7CisJICB9CisKKwkvLyBQYWQuCisJY29uc3Qgc3RyZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CisJaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKKwkgIHsKKwkgICAgX0NoYXJUKiBfX3dzMyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKKwkJCQkJCQkJICAqIF9fdykpOworCSAgICBfTV9wYWQoX19maWxsLCBfX3csIF9faW8sIF9fd3MzLCBfX3dzLCBfX2xlbik7CisJICAgIF9fd3MgPSBfX3dzMzsKKwkgIH0KKwlfX2lvLndpZHRoKDApOworCQorCS8vIFsyMi4yLjIuMi4yXSBTdGFnZSA0LgorCS8vIFdyaXRlIHJlc3VsdGluZywgZnVsbHktZm9ybWF0dGVkIHN0cmluZyB0byBvdXRwdXQgaXRlcmF0b3IuCisJcmV0dXJuIHN0ZDo6X193cml0ZShfX3MsIF9fd3MsIF9fbGVuKTsKKyAgICAgIH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgX091dEl0ZXIKKyAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOworICAgICAgaWYgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IGxvbmcgX19sID0gX192OworICAgICAgICAgIF9fcyA9IF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgdHlwZWRlZiBfX251bXB1bmN0X2NhY2hlPF9DaGFyVD4gICAgICAgICAgICAgIF9fY2FjaGVfdHlwZTsKKwkgIF9fdXNlX2NhY2hlPF9fY2FjaGVfdHlwZT4gX191YzsKKwkgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCSAgY29uc3QgX19jYWNoZV90eXBlKiBfX2xjID0gX191YyhfX2xvYyk7CisKKwkgIGNvbnN0IF9DaGFyVCogX19uYW1lID0gX192ID8gX19sYy0+X01fdHJ1ZW5hbWUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19sYy0+X01fZmFsc2VuYW1lOworCSAgaW50IF9fbGVuID0gX192ID8gX19sYy0+X01fdHJ1ZW5hbWVfc2l6ZQorCSAgICAgICAgICAgICAgICAgIDogX19sYy0+X01fZmFsc2VuYW1lX3NpemU7CisKKwkgIGNvbnN0IHN0cmVhbXNpemUgX193ID0gX19pby53aWR0aCgpOworCSAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKKwkgICAgeworCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19wbGVuID0gX193IC0gX19sZW47CisJICAgICAgX0NoYXJUKiBfX3BzCisJCT0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCSogX19wbGVuKSk7CisKKwkgICAgICBjaGFyX3RyYWl0czxfQ2hhclQ+Ojphc3NpZ24oX19wcywgX19wbGVuLCBfX2ZpbGwpOworCSAgICAgIF9faW8ud2lkdGgoMCk7CisKKwkgICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpID09IGlvc19iYXNlOjpsZWZ0KQorCQl7CisJCSAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19uYW1lLCBfX2xlbik7CisJCSAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19wcywgX19wbGVuKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIF9fcyA9IHN0ZDo6X193cml0ZShfX3MsIF9fcHMsIF9fcGxlbik7CisJCSAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19uYW1lLCBfX2xlbik7CisJCX0KKwkgICAgICByZXR1cm4gX19zOworCSAgICB9CisJICBfX2lvLndpZHRoKDApOworCSAgX19zID0gc3RkOjpfX3dyaXRlKF9fcywgX19uYW1lLCBfX2xlbik7CisJfQorICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKKyAgICB7IHJldHVybiBfTV9pbnNlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwgX192KTsgfQorCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgX091dEl0ZXIKKyAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBfX2RvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKKyAgICB7IHJldHVybiBfTV9pbnNlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwgX192KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CisgICAgeyByZXR1cm4gX01faW5zZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIF9PdXRJdGVyCisgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAorICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CisgICAgICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpiYXNlZmllbGQKKwkJCQkJIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CisgICAgICBfX2lvLmZsYWdzKChfX2ZsYWdzICYgX19mbXQpIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKKworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwoc2l6ZW9mKGNvbnN0IHZvaWQqKQorCQkJCQkgICAgIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSksCisJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nPjo6X190eXBlIF9VSW50UHRyVHlwZTsgICAgICAgCisKKyAgICAgIF9fcyA9IF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsCisJCQkgIHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPihfX3YpKTsKKyAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19zOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9MREJMCisKKyAgLy8gQ29uc3RydWN0IGNvcnJlY3RseSBwYWRkZWQgc3RyaW5nLCBhcyBwZXIgMjIuMi4yLjIuMgorICAvLyBBc3N1bWVzCisgIC8vIF9fbmV3bGVuID4gX19vbGRsZW4KKyAgLy8gX19uZXdzIGlzIGFsbG9jYXRlZCBmb3IgX19uZXdsZW4gc2l6ZQorCisgIC8vIE5COiBPZiB0aGUgdHdvIHBhcmFtZXRlcnMsIF9DaGFyVCBjYW4gYmUgZGVkdWNlZCBmcm9tIHRoZQorICAvLyBmdW5jdGlvbiBhcmd1bWVudHMuIFRoZSBvdGhlciAoX1RyYWl0cykgaGFzIHRvIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgdm9pZAorICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwKKwkJCQkgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCisJCQkJICAgc3RyZWFtc2l6ZSBfX25ld2xlbiwgc3RyZWFtc2l6ZSBfX29sZGxlbikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgX19wbGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX25ld2xlbiAtIF9fb2xkbGVuKTsKKyAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKKworICAgICAgLy8gUGFkZGluZyBsYXN0LgorICAgICAgaWYgKF9fYWRqdXN0ID09IGlvc19iYXNlOjpsZWZ0KQorCXsKKwkgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX29sZHMsIF9fb2xkbGVuKTsKKwkgIF9UcmFpdHM6OmFzc2lnbihfX25ld3MgKyBfX29sZGxlbiwgX19wbGVuLCBfX2ZpbGwpOworCSAgcmV0dXJuOworCX0KKworICAgICAgc2l6ZV90IF9fbW9kID0gMDsKKyAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCisJeworCSAgLy8gUGFkIGFmdGVyIHRoZSBzaWduLCBpZiB0aGVyZSBpcyBvbmUuCisJICAvLyBQYWQgYWZ0ZXIgMFt4WF0sIGlmIHRoZXJlIGlzIG9uZS4KKwkgIC8vIFdobyBjYW1lIHVwIHdpdGggdGhlc2UgcnVsZXMsIGFueXdheT8gSmVlemUuCisgICAgICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisJICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisKKwkgIGlmIChfX2N0eXBlLndpZGVuKCctJykgPT0gX19vbGRzWzBdCisJICAgICAgfHwgX19jdHlwZS53aWRlbignKycpID09IF9fb2xkc1swXSkKKwkgICAgeworCSAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKKwkgICAgICBfX21vZCA9IDE7CisJICAgICAgKytfX25ld3M7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9fY3R5cGUud2lkZW4oJzAnKSA9PSBfX29sZHNbMF0KKwkJICAgJiYgX19vbGRsZW4gPiAxCisJCSAgICYmIChfX2N0eXBlLndpZGVuKCd4JykgPT0gX19vbGRzWzFdCisJCSAgICAgICB8fCBfX2N0eXBlLndpZGVuKCdYJykgPT0gX19vbGRzWzFdKSkKKwkgICAgeworCSAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKKwkgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CisJICAgICAgX19tb2QgPSAyOworCSAgICAgIF9fbmV3cyArPSAyOworCSAgICB9CisJICAvLyBlbHNlIFBhZGRpbmcgZmlyc3QuCisJfQorICAgICAgX1RyYWl0czo6YXNzaWduKF9fbmV3cywgX19wbGVuLCBfX2ZpbGwpOworICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBfX3BsZW4sIF9fb2xkcyArIF9fbW9kLCBfX29sZGxlbiAtIF9fbW9kKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIF9DaGFyVCoKKyAgICBfX2FkZF9ncm91cGluZyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAorCQkgICBjb25zdCBjaGFyKiBfX2diZWcsIHNpemVfdCBfX2dzaXplLAorCQkgICBjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQorICAgIHsKKyAgICAgIHNpemVfdCBfX2lkeCA9IDA7CisgICAgICBzaXplX3QgX19jdHIgPSAwOworCisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fZ2JlZ1tfX2lkeF0KKwkgICAgICYmIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPihfX2diZWdbX19pZHhdKSA+IDAKKwkgICAgICYmIF9fZ2JlZ1tfX2lkeF0gIT0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGNoYXI+OjpfX21heCkKKwl7CisJICBfX2xhc3QgLT0gX19nYmVnW19faWR4XTsKKwkgIF9faWR4IDwgX19nc2l6ZSAtIDEgPyArK19faWR4IDogKytfX2N0cjsKKwl9CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkqX19zKysgPSAqX19maXJzdCsrOworCisgICAgICB3aGlsZSAoX19jdHItLSkKKwl7CisJICAqX19zKysgPSBfX3NlcDsJICAKKwkgIGZvciAoY2hhciBfX2kgPSBfX2diZWdbX19pZHhdOyBfX2kgPiAwOyAtLV9faSkKKwkgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKKwl9CisKKyAgICAgIHdoaWxlIChfX2lkeC0tKQorCXsKKwkgICpfX3MrKyA9IF9fc2VwOwkgIAorCSAgZm9yIChjaGFyIF9faSA9IF9fZ2JlZ1tfX2lkeF07IF9faSA+IDA7IC0tX19pKQorCSAgICAqX19zKysgPSAqX19maXJzdCsrOworCX0KKworICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX05BTUVTUEFDRV9MREJMIG51bV9nZXQ8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfR0xJQkNYWF9OQU1FU1BBQ0VfTERCTCBudW1fcHV0PGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IGN0eXBlPGNoYXI+JgorICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+JgorICAgIHVzZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgorICAgIHVzZV9mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX05BTUVTUEFDRV9MREJMIG51bV9nZXQ8d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfR0xJQkNYWF9OQU1FU1BBQ0VfTERCTCBudW1fcHV0PHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPHdjaGFyX3Q+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IGN0eXBlPHdjaGFyX3Q+JgorICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+JgorICAgIHVzZV9mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBudW1fZ2V0PHdjaGFyX3Q+JgorICAgIHVzZV9mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9sb2NhbGVfZmFjZXRzX25vbmlvLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYjFkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby5oCkBAIC0wLDAgKzEsMTkwNSBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvbG9jYWxlX2ZhY2V0c19ub25pby5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisvLworCisjaWZuZGVmIF9MT0NBTEVfRkFDRVRTX05PTklPX0gKKyNkZWZpbmUgX0xPQ0FMRV9GQUNFVFNfTk9OSU9fSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGN0aW1lPgkvLyBGb3Igc3RydWN0IHRtCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBicmllZiAgVGltZSBmb3JtYXQgb3JkZXJpbmcgZGF0YS4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gZW51bSByZXByZXNlbnRpbmcgZGlmZmVyZW50IG9yZGVyaW5ncyBvZgorICAgKiAgdGltZTogZGF5LCBtb250aCwgYW5kIHllYXIuCisgICovCisgIGNsYXNzIHRpbWVfYmFzZQorICB7CisgIHB1YmxpYzoKKyAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0gfTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IF9fdGltZXB1bmN0X2NhY2hlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQKKyAgICB7CisgICAgICAvLyBMaXN0IG9mIGFsbCBrbm93biB0aW1lem9uZXMsIHdpdGggR01UIGZpcnN0LgorICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCoJCV9TX3RpbWV6b25lc1sxNF07CisKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9kYXRlX2Zvcm1hdDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9kYXRlX2VyYV9mb3JtYXQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fdGltZV9mb3JtYXQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fdGltZV9lcmFfZm9ybWF0OworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2RhdGVfdGltZV9mb3JtYXQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYW07CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fcG07CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYW1fcG1fZm9ybWF0OworCisgICAgICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2RheTE7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fZGF5MjsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9kYXkzOworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2RheTQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fZGF5NTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9kYXk2OworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX2RheTc7CisKKyAgICAgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTE7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTI7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTM7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTQ7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTU7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTY7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fYWRheTc7CisKKyAgICAgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbW9udGgwMTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9tb250aDAyOworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX21vbnRoMDM7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbW9udGgwNDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9tb250aDA1OworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX21vbnRoMDY7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbW9udGgwNzsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9tb250aDA4OworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX21vbnRoMDk7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fbW9udGgxMDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9tb250aDExOworICAgICAgY29uc3QgX0NoYXJUKgkJCV9NX21vbnRoMTI7CisKKyAgICAgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwMTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwMjsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwMzsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwNDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwNTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwNjsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwNzsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwODsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgwOTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgxMDsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgxMTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9hbW9udGgxMjsKKworICAgICAgYm9vbAkJCQlfTV9hbGxvY2F0ZWQ7CisKKyAgICAgIF9fdGltZXB1bmN0X2NhY2hlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGZhY2V0KF9fcmVmcyksCisgICAgICBfTV9kYXRlX2Zvcm1hdCgwKSwgX01fZGF0ZV9lcmFfZm9ybWF0KDApLCBfTV90aW1lX2Zvcm1hdCgwKSwKKyAgICAgIF9NX3RpbWVfZXJhX2Zvcm1hdCgwKSwgX01fZGF0ZV90aW1lX2Zvcm1hdCgwKSwKKyAgICAgIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0KDApLCBfTV9hbSgwKSwgX01fcG0oMCksCisgICAgICBfTV9hbV9wbV9mb3JtYXQoMCksIF9NX2RheTEoMCksIF9NX2RheTIoMCksIF9NX2RheTMoMCksCisgICAgICBfTV9kYXk0KDApLCBfTV9kYXk1KDApLCBfTV9kYXk2KDApLCBfTV9kYXk3KDApLAorICAgICAgX01fYWRheTEoMCksIF9NX2FkYXkyKDApLCBfTV9hZGF5MygwKSwgX01fYWRheTQoMCksCisgICAgICBfTV9hZGF5NSgwKSwgX01fYWRheTYoMCksIF9NX2FkYXk3KDApLCBfTV9tb250aDAxKDApLAorICAgICAgX01fbW9udGgwMigwKSwgX01fbW9udGgwMygwKSwgX01fbW9udGgwNCgwKSwgX01fbW9udGgwNSgwKSwKKyAgICAgIF9NX21vbnRoMDYoMCksIF9NX21vbnRoMDcoMCksIF9NX21vbnRoMDgoMCksIF9NX21vbnRoMDkoMCksCisgICAgICBfTV9tb250aDEwKDApLCBfTV9tb250aDExKDApLCBfTV9tb250aDEyKDApLCBfTV9hbW9udGgwMSgwKSwKKyAgICAgIF9NX2Ftb250aDAyKDApLCBfTV9hbW9udGgwMygwKSwgX01fYW1vbnRoMDQoMCksCisgICAgICBfTV9hbW9udGgwNSgwKSwgX01fYW1vbnRoMDYoMCksIF9NX2Ftb250aDA3KDApLAorICAgICAgX01fYW1vbnRoMDgoMCksIF9NX2Ftb250aDA5KDApLCBfTV9hbW9udGgxMCgwKSwKKyAgICAgIF9NX2Ftb250aDExKDApLCBfTV9hbW9udGgxMigwKSwgX01fYWxsb2NhdGVkKGZhbHNlKQorICAgICAgeyB9CisKKyAgICAgIH5fX3RpbWVwdW5jdF9jYWNoZSgpOworCisgICAgICB2b2lkCisgICAgICBfTV9jYWNoZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKKworICAgIHByaXZhdGU6CisgICAgICBfX3RpbWVwdW5jdF9jYWNoZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX3RpbWVwdW5jdF9jYWNoZSYpOworICAgICAgCisgICAgICBleHBsaWNpdAorICAgICAgX190aW1lcHVuY3RfY2FjaGUoY29uc3QgX190aW1lcHVuY3RfY2FjaGUmKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX3RpbWVwdW5jdF9jYWNoZTxfQ2hhclQ+Ojp+X190aW1lcHVuY3RfY2FjaGUoKQorICAgIHsKKyAgICAgIGlmIChfTV9hbGxvY2F0ZWQpCisJeworCSAgLy8gVW51c2VkLgorCX0KKyAgICB9CisKKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorICB0ZW1wbGF0ZTw+CisgICAgY29uc3QgY2hhcioKKyAgICBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICBjb25zdCB3Y2hhcl90KgorICAgIF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OjpfU190aW1lem9uZXNbMTRdOworI2VuZGlmCisKKyAgLy8gR2VuZXJpYy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNvbnN0IF9DaGFyVCogX190aW1lcHVuY3RfY2FjaGU8X0NoYXJUPjo6X1NfdGltZXpvbmVzWzE0XTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJX19jaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+CV9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIF9fdGltZXB1bmN0X2NhY2hlPF9DaGFyVD4JX19jYWNoZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgX19jYWNoZV90eXBlKgkJCV9NX2RhdGE7CisgICAgICBfX2NfbG9jYWxlCQkJX01fY19sb2NhbGVfdGltZXB1bmN0OworICAgICAgY29uc3QgY2hhcioJCQlfTV9uYW1lX3RpbWVwdW5jdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBOdW1wdW5jdCBmYWNldCBpZC4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQkJaWQ7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3RpbWVwdW5jdChfX2NhY2hlX3R5cGUqIF9fY2FjaGUsIHNpemVfdCBfX3JlZnMgPSAwKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnRlcm5hbCBjb25zdHJ1Y3Rvci4gTm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgdGhlIGxpYnJhcnkgaXRzZWxmIHRvIHNldCB1cCBuZXcKKyAgICAgICAqICBsb2NhbGVzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jbG9jICBUaGUgQyBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIG5hbWUgb2YgYSBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtIHJlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgX190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgICAvLyBGSVhNRTogZm9yIGVycm9yIGNoZWNraW5nIHB1cnBvc2VzIF9NX3B1dCBzaG91bGQgcmV0dXJuIHRoZSByZXR1cm4KKyAgICAgIC8vIHZhbHVlIG9mIHN0cmZ0aW1lL3djc2Z0aW1lLgorICAgICAgdm9pZAorICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCisJICAgICBjb25zdCB0bSogX190bSkgY29uc3QgdGhyb3cgKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2RhdGUpIGNvbnN0CisgICAgICB7CisJLy8gQWx3YXlzIGhhdmUgZGVmYXVsdCBmaXJzdC4KKwlfX2RhdGVbMF0gPSBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdDsKKwlfX2RhdGVbMV0gPSBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQ7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0CisgICAgICB7CisJLy8gQWx3YXlzIGhhdmUgZGVmYXVsdCBmaXJzdC4KKwlfX3RpbWVbMF0gPSBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdDsKKwlfX3RpbWVbMV0gPSBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQ7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RhdGVfdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fZHQpIGNvbnN0CisgICAgICB7CisJLy8gQWx3YXlzIGhhdmUgZGVmYXVsdCBmaXJzdC4KKwlfX2R0WzBdID0gX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdDsKKwlfX2R0WzFdID0gX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2FtX3BtX2Zvcm1hdChjb25zdCBfQ2hhclQqIF9fYW1wbSkgY29uc3QKKyAgICAgIHsgX19hbXBtID0gX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0OyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2FtX3BtKGNvbnN0IF9DaGFyVCoqIF9fYW1wbSkgY29uc3QKKyAgICAgIHsKKwlfX2FtcG1bMF0gPSBfTV9kYXRhLT5fTV9hbTsKKwlfX2FtcG1bMV0gPSBfTV9kYXRhLT5fTV9wbTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CisgICAgICB7CisJX19kYXlzWzBdID0gX01fZGF0YS0+X01fZGF5MTsKKwlfX2RheXNbMV0gPSBfTV9kYXRhLT5fTV9kYXkyOworCV9fZGF5c1syXSA9IF9NX2RhdGEtPl9NX2RheTM7CisJX19kYXlzWzNdID0gX01fZGF0YS0+X01fZGF5NDsKKwlfX2RheXNbNF0gPSBfTV9kYXRhLT5fTV9kYXk1OworCV9fZGF5c1s1XSA9IF9NX2RhdGEtPl9NX2RheTY7CisJX19kYXlzWzZdID0gX01fZGF0YS0+X01fZGF5NzsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CisgICAgICB7CisJX19kYXlzWzBdID0gX01fZGF0YS0+X01fYWRheTE7CisJX19kYXlzWzFdID0gX01fZGF0YS0+X01fYWRheTI7CisJX19kYXlzWzJdID0gX01fZGF0YS0+X01fYWRheTM7CisJX19kYXlzWzNdID0gX01fZGF0YS0+X01fYWRheTQ7CisJX19kYXlzWzRdID0gX01fZGF0YS0+X01fYWRheTU7CisJX19kYXlzWzVdID0gX01fZGF0YS0+X01fYWRheTY7CisJX19kYXlzWzZdID0gX01fZGF0YS0+X01fYWRheTc7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKKyAgICAgIHsKKwlfX21vbnRoc1swXSA9IF9NX2RhdGEtPl9NX21vbnRoMDE7CisJX19tb250aHNbMV0gPSBfTV9kYXRhLT5fTV9tb250aDAyOworCV9fbW9udGhzWzJdID0gX01fZGF0YS0+X01fbW9udGgwMzsKKwlfX21vbnRoc1szXSA9IF9NX2RhdGEtPl9NX21vbnRoMDQ7CisJX19tb250aHNbNF0gPSBfTV9kYXRhLT5fTV9tb250aDA1OworCV9fbW9udGhzWzVdID0gX01fZGF0YS0+X01fbW9udGgwNjsKKwlfX21vbnRoc1s2XSA9IF9NX2RhdGEtPl9NX21vbnRoMDc7CisJX19tb250aHNbN10gPSBfTV9kYXRhLT5fTV9tb250aDA4OworCV9fbW9udGhzWzhdID0gX01fZGF0YS0+X01fbW9udGgwOTsKKwlfX21vbnRoc1s5XSA9IF9NX2RhdGEtPl9NX21vbnRoMTA7CisJX19tb250aHNbMTBdID0gX01fZGF0YS0+X01fbW9udGgxMTsKKwlfX21vbnRoc1sxMV0gPSBfTV9kYXRhLT5fTV9tb250aDEyOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9tb250aHNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CisgICAgICB7CisJX19tb250aHNbMF0gPSBfTV9kYXRhLT5fTV9hbW9udGgwMTsKKwlfX21vbnRoc1sxXSA9IF9NX2RhdGEtPl9NX2Ftb250aDAyOworCV9fbW9udGhzWzJdID0gX01fZGF0YS0+X01fYW1vbnRoMDM7CisJX19tb250aHNbM10gPSBfTV9kYXRhLT5fTV9hbW9udGgwNDsKKwlfX21vbnRoc1s0XSA9IF9NX2RhdGEtPl9NX2Ftb250aDA1OworCV9fbW9udGhzWzVdID0gX01fZGF0YS0+X01fYW1vbnRoMDY7CisJX19tb250aHNbNl0gPSBfTV9kYXRhLT5fTV9hbW9udGgwNzsKKwlfX21vbnRoc1s3XSA9IF9NX2RhdGEtPl9NX2Ftb250aDA4OworCV9fbW9udGhzWzhdID0gX01fZGF0YS0+X01fYW1vbnRoMDk7CisJX19tb250aHNbOV0gPSBfTV9kYXRhLT5fTV9hbW9udGgxMDsKKwlfX21vbnRoc1sxMF0gPSBfTV9kYXRhLT5fTV9hbW9udGgxMTsKKwlfX21vbnRoc1sxMV0gPSBfTV9kYXRhLT5fTV9hbW9udGgxMjsKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5fX3RpbWVwdW5jdCgpOworCisgICAgICAvLyBGb3IgdXNlIGF0IGNvbnN0cnVjdGlvbiB0aW1lIG9ubHkuCisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IDApOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGxvY2FsZTo6aWQgX190aW1lcHVuY3Q8X0NoYXJUPjo6aWQ7CisKKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0KGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0IHRocm93ICgpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOworCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX3B1dCh3Y2hhcl90Kiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90KiwKKwkJCQkgY29uc3QgdG0qKSBjb25zdCB0aHJvdyAoKTsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyAgLy8gSW5jbHVkZSBob3N0IGFuZCBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRpbWVwdW5jdCBmdW5jdGlvbnMuCisgICNpbmNsdWRlIDxiaXRzL3RpbWVfbWVtYmVycy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgdGltZV9nZXQuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byBwYXJzZSBhbmQgcmV0dXJuIGEgZGF0ZSBvcgorICAgKiAgdGltZSBmcm9tIGEgc3RyaW5nLiAgSXQgaXMgdXNlZCBieSB0aGUgaXN0cmVhbSBudW1lcmljCisgICAqICBleHRyYWN0aW9uIG9wZXJhdG9ycy4KKyAgICoKKyAgICogIFRoZSB0aW1lX2dldCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIHRoZQorICAgKiAgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZSBjYWxsIHRvIHRoZSB2aXJ0dWFsCisgICAqICBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUgaG9va3MgZm9yIGRldmVsb3BlcnMgdG8KKyAgICogIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20gdGhlIHRpbWVfZ2V0IGZhY2V0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfSW5JdGVyCQkJaXRlcl90eXBlOworICAgICAgLy9AfQorICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglfX3N0cmluZ190eXBlOworCisgICAgICAvLy8gTnVtcHVuY3QgZmFjZXQgaWQuCisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX3JlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGZhY2V0IChfX3JlZnMpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBwcmVmZXJyZWQgb3JkZXIgb2YgbW9udGgsIGRheSwgYW5kIHllYXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbnVtIGZyb20gdGltZWJhc2U6OmRhdGVvcmRlciBnaXZpbmcgdGhlCisgICAgICAgKiAgcHJlZmVycmVkIG9yZGVyaW5nIGlmIHRoZSBmb3JtYXQgQGEgeCBnaXZlbiB0byB0aW1lX3B1dDo6cHV0KCkgb25seQorICAgICAgICogIHVzZXMgbW9udGgsIGRheSwgYW5kIHllYXIuICBJZiB0aGUgZm9ybWF0IEBhIHggZm9yIHRoZSBhc3NvY2lhdGVkCisgICAgICAgKiAgbG9jYWxlIHVzZXMgb3RoZXIgZmllbGRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAgICAgICAqICB0aW1lYmFzZTo6ZGF0ZW9yZGVyOjpub29yZGVyLgorICAgICAgICoKKyAgICAgICAqICBOT1RFOiBUaGUgbGlicmFyeSBhbHdheXMgcmV0dXJucyBub29yZGVyIGF0IHRoZSBtb21lbnQuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEEgbWVtYmVyIG9mIHRpbWViYXNlOjpkYXRlb3JkZXIuCisgICAgICAqLworICAgICAgZGF0ZW9yZGVyCisgICAgICBkYXRlX29yZGVyKCkgIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19kYXRlX29yZGVyKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCB0aW1lIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgYSB0aW1lIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IEBhIFggYW5kIHB1dHMgdGhlCisgICAgICAgKiAgcmVzdWx0cyBpbnRvIGEgdXNlci1zdXBwbGllZCBzdHJ1Y3QgdG0uICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGJ5CisgICAgICAgKiAgY2FsbGluZyB0aW1lX2dldDo6ZG9fZ2V0X3RpbWUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlcmUgaXMgYSB2YWxpZCB0aW1lIHN0cmluZyBhY2NvcmRpbmcgdG8gZm9ybWF0IEBhIFgsIEBhIHRtIHdpbGwKKyAgICAgICAqICBiZSBmaWxsZWQgaW4gYWNjb3JkaW5nbHkgYW5kIHRoZSByZXR1cm5lZCBpdGVyYXRvciB3aWxsIHBvaW50IHRvIHRoZQorICAgICAgICogIGZpcnN0IGNoYXJhY3RlciBiZXlvbmQgdGhlIHRpbWUgc3RyaW5nLiAgSWYgYW4gZXJyb3Igb2NjdXJzIGJlZm9yZQorICAgICAgICogIHRoZSBlbmQsIGVyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdC4gIElmIHBhcnNpbmcgcmVhZHMgYWxsIHRoZQorICAgICAgICogIGNoYXJhY3RlcnMsIGVyciB8PSBpb3NfYmFzZTo6ZW9mYml0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fYmVnICBTdGFydCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2VuZCAgRW5kIG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiB0aGUgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgX19lcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fdG0gIFBvaW50ZXIgdG8gc3RydWN0IHRtIHRvIGZpbGwgaW4uCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgdG8gZmlyc3QgY2hhciBiZXlvbmQgdGltZSBzdHJpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pICBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3RpbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCBkYXRlIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgYSBkYXRlIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IEBhIHggYW5kIHB1dHMgdGhlCisgICAgICAgKiAgcmVzdWx0cyBpbnRvIGEgdXNlci1zdXBwbGllZCBzdHJ1Y3QgdG0uICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGJ5CisgICAgICAgKiAgY2FsbGluZyB0aW1lX2dldDo6ZG9fZ2V0X2RhdGUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlcmUgaXMgYSB2YWxpZCBkYXRlIHN0cmluZyBhY2NvcmRpbmcgdG8gZm9ybWF0IEBhIHgsIEBhIHRtIHdpbGwKKyAgICAgICAqICBiZSBmaWxsZWQgaW4gYWNjb3JkaW5nbHkgYW5kIHRoZSByZXR1cm5lZCBpdGVyYXRvciB3aWxsIHBvaW50IHRvIHRoZQorICAgICAgICogIGZpcnN0IGNoYXJhY3RlciBiZXlvbmQgdGhlIGRhdGUgc3RyaW5nLiAgSWYgYW4gZXJyb3Igb2NjdXJzIGJlZm9yZQorICAgICAgICogIHRoZSBlbmQsIGVyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdC4gIElmIHBhcnNpbmcgcmVhZHMgYWxsIHRoZQorICAgICAgICogIGNoYXJhY3RlcnMsIGVyciB8PSBpb3NfYmFzZTo6ZW9mYml0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fYmVnICBTdGFydCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2VuZCAgRW5kIG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiB0aGUgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgX19lcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fdG0gIFBvaW50ZXIgdG8gc3RydWN0IHRtIHRvIGZpbGwgaW4uCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgdG8gZmlyc3QgY2hhciBiZXlvbmQgZGF0ZSBzdHJpbmcuCisgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pICBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCB3ZWVrZGF5IHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwYXJzZXMgYSB3ZWVrZGF5IG5hbWUgYW5kIHB1dHMgdGhlIHJlc3VsdHMgaW50byBhCisgICAgICAgKiAgdXNlci1zdXBwbGllZCBzdHJ1Y3QgdG0uICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0aW1lX2dldDo6ZG9fZ2V0X3dlZWtkYXkoKS4KKyAgICAgICAqCisgICAgICAgKiAgUGFyc2luZyBzdGFydHMgYnkgcGFyc2luZyBhbiBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUuICBJZiBhIHZhbGlkCisgICAgICAgKiAgYWJicmV2aWF0aW9uIGlzIGZvbGxvd2VkIGJ5IGEgY2hhcmFjdGVyIHRoYXQgd291bGQgbGVhZCB0byB0aGUgZnVsbAorICAgICAgICogIHdlZWtkYXkgbmFtZSwgcGFyc2luZyBjb250aW51ZXMgdW50aWwgdGhlIGZ1bGwgbmFtZSBpcyBmb3VuZCBvciBhbgorICAgICAgICogIGVycm9yIG9jY3Vycy4gIE90aGVyd2lzZSBwYXJzaW5nIGZpbmlzaGVzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgKiAgYWJicmV2aWF0ZWQgbmFtZS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYW4gZXJyb3Igb2NjdXJzIGJlZm9yZSB0aGUgZW5kLCBlcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQuICBJZgorICAgICAgICogIHBhcnNpbmcgcmVhZHMgYWxsIHRoZSBjaGFyYWN0ZXJzLCBlcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2JlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgX19lbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3RtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIHdlZWtkYXkgbmFtZS4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCBtb250aCBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgbW9udGggbmFtZSBhbmQgcHV0cyB0aGUgcmVzdWx0cyBpbnRvIGEKKyAgICAgICAqICB1c2VyLXN1cHBsaWVkIHN0cnVjdCB0bS4gIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgYnkgY2FsbGluZworICAgICAgICogIHRpbWVfZ2V0Ojpkb19nZXRfbW9udGhuYW1lKCkuCisgICAgICAgKgorICAgICAgICogIFBhcnNpbmcgc3RhcnRzIGJ5IHBhcnNpbmcgYW4gYWJicmV2aWF0ZWQgbW9udGggbmFtZS4gIElmIGEgdmFsaWQKKyAgICAgICAqICBhYmJyZXZpYXRpb24gaXMgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgdGhhdCB3b3VsZCBsZWFkIHRvIHRoZSBmdWxsCisgICAgICAgKiAgbW9udGggbmFtZSwgcGFyc2luZyBjb250aW51ZXMgdW50aWwgdGhlIGZ1bGwgbmFtZSBpcyBmb3VuZCBvciBhbgorICAgICAgICogIGVycm9yIG9jY3Vycy4gIE90aGVyd2lzZSBwYXJzaW5nIGZpbmlzaGVzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgKiAgYWJicmV2aWF0ZWQgbmFtZS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYW4gZXJyb3Igb2NjdXJzIGJlZm9yZSB0aGUgZW5kLCBlcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQuICBJZgorICAgICAgICogIHBhcnNpbmcgcmVhZHMgYWxsIHRoZSBjaGFyYWN0ZXJzLCBlcnIgfD0KKyAgICAgICAqICBpb3NfYmFzZTo6ZW9mYml0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fYmVnICBTdGFydCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2VuZCAgRW5kIG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiB0aGUgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgX19lcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fdG0gIFBvaW50ZXIgdG8gc3RydWN0IHRtIHRvIGZpbGwgaW4uCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgdG8gZmlyc3QgY2hhciBiZXlvbmQgbW9udGggbmFtZS4KKyAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCQkgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9tb250aG5hbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCB5ZWFyIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyB1cCB0byA0IGNoYXJhY3RlcnMgdG8gcGFyc2UgYSB5ZWFyIHN0cmluZyBhbmQKKyAgICAgICAqICBwdXRzIHRoZSByZXN1bHRzIGludG8gYSB1c2VyLXN1cHBsaWVkIHN0cnVjdCB0bS4gIFRoZSByZXN1bHQgaXMKKyAgICAgICAqICByZXR1cm5lZCBieSBjYWxsaW5nIHRpbWVfZ2V0Ojpkb19nZXRfeWVhcigpLgorICAgICAgICoKKyAgICAgICAqICA0IGNvbnNlY3V0aXZlIGRpZ2l0cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYSBmdWxsIHllYXIuICBJZiB0aGVyZSBhcmUKKyAgICAgICAqICBleGFjdGx5IDIgY29uc2VjdXRpdmUgZGlnaXRzLCB0aGUgbGlicmFyeSBpbnRlcnByZXRzIHRoaXMgYXMgdGhlCisgICAgICAgKiAgbnVtYmVyIG9mIHllYXJzIHNpbmNlIDE5MDAuCisgICAgICAgKgorICAgICAgICogIElmIGFuIGVycm9yIG9jY3VycyBiZWZvcmUgdGhlIGVuZCwgZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0LiAgSWYKKyAgICAgICAqICBwYXJzaW5nIHJlYWRzIGFsbCB0aGUgY2hhcmFjdGVycywgZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19iZWcgIFN0YXJ0IG9mIHN0cmluZyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZW5kICBFbmQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgX19pbyAgU291cmNlIG9mIHRoZSBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBfX2VyciAgRXJyb3IgZmxhZ3MgdG8gc2V0LgorICAgICAgICogIEBwYXJhbSAgX190bSAgUG9pbnRlciB0byBzdHJ1Y3QgdG0gdG8gZmlsbCBpbi4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciB0byBmaXJzdCBjaGFyIGJleW9uZCB5ZWFyLgorICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbAorICAgICAgfnRpbWVfZ2V0KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIHByZWZlcnJlZCBvcmRlciBvZiBtb250aCwgZGF5LCBhbmQgeWVhci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVudW0gZnJvbSB0aW1lYmFzZTo6ZGF0ZW9yZGVyIGdpdmluZyB0aGUKKyAgICAgICAqICBwcmVmZXJyZWQgb3JkZXJpbmcgaWYgdGhlIGZvcm1hdCBAYSB4IGdpdmVuIHRvIHRpbWVfcHV0OjpwdXQoKSBvbmx5CisgICAgICAgKiAgdXNlcyBtb250aCwgZGF5LCBhbmQgeWVhci4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkCisgICAgICAgKiAgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBBIG1lbWJlciBvZiB0aW1lYmFzZTo6ZGF0ZW9yZGVyLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCisgICAgICBkb19kYXRlX29yZGVyKCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUGFyc2UgaW5wdXQgdGltZSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgdGltZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBAYSB4IGFuZCBwdXRzIHRoZQorICAgICAgICogIHJlc3VsdHMgaW50byBhIHVzZXItc3VwcGxpZWQgc3RydWN0IHRtLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yCisgICAgICAgKiAgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdldF90aW1lKCkgZm9yCisgICAgICAgKiAgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2JlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgX19lbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3RtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIHRpbWUgc3RyaW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUGFyc2UgaW5wdXQgZGF0ZSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgZGF0ZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBAYSBYIGFuZCBwdXRzIHRoZQorICAgICAgICogIHJlc3VsdHMgaW50byBhIHVzZXItc3VwcGxpZWQgc3RydWN0IHRtLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yCisgICAgICAgKiAgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdldF9kYXRlKCkgZm9yCisgICAgICAgKiAgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2JlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgX19lbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3RtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIGRhdGUgc3RyaW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUGFyc2UgaW5wdXQgd2Vla2RheSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgd2Vla2RheSBuYW1lIGFuZCBwdXRzIHRoZSByZXN1bHRzIGludG8gYQorICAgICAgICogIHVzZXItc3VwcGxpZWQgc3RydWN0IHRtLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdldF93ZWVrZGF5KCkgZm9yCisgICAgICAgKiAgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2JlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgX19lbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3RtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIHdlZWtkYXkgbmFtZS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKKwkJICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQYXJzZSBpbnB1dCBtb250aCBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGEgbW9udGggbmFtZSBhbmQgcHV0cyB0aGUgcmVzdWx0cyBpbnRvIGEKKyAgICAgICAqICB1c2VyLXN1cHBsaWVkIHN0cnVjdCB0bS4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkCisgICAgICAgKiAgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLiAgQHNlZSBnZXRfbW9udGhuYW1lKCkgZm9yCisgICAgICAgKiAgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2JlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgX19lbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3RtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIG1vbnRoIG5hbWUuCisgICAgICAqLworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKKwkJICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFBhcnNlIGlucHV0IHllYXIgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJlYWRzIHVwIHRvIDQgY2hhcmFjdGVycyB0byBwYXJzZSBhIHllYXIgc3RyaW5nIGFuZAorICAgICAgICogIHB1dHMgdGhlIHJlc3VsdHMgaW50byBhIHVzZXItc3VwcGxpZWQgc3RydWN0IHRtLiAgVGhpcyBmdW5jdGlvbiBpcyBhCisgICAgICAgKiAgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlCisgICAgICAgKiAgZ2V0X3llYXIoKSBmb3IgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2JlZyAgU3RhcnQgb2Ygc3RyaW5nIHRvIHBhcnNlLgorICAgICAgICogIEBwYXJhbSAgX19lbmQgIEVuZCBvZiBzdHJpbmcgdG8gcGFyc2UuCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgdGhlIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmbGFncyB0byBzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3RtICBQb2ludGVyIHRvIHN0cnVjdCB0bSB0byBmaWxsIGluLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHRvIGZpcnN0IGNoYXIgYmV5b25kIHllYXIuCisgICAgICAqLworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKKworICAgICAgLy8gRXh0cmFjdCBudW1lcmljIGNvbXBvbmVudCBvZiBsZW5ndGggX19sZW4uCisgICAgICBpdGVyX3R5cGUKKyAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAorCQkgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCisJCSAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CisKKyAgICAgIC8vIEV4dHJhY3QgYW55IHVuaXF1ZSBhcnJheSBvZiBzdHJpbmcgbGl0ZXJhbHMgaW4gYSBjb25zdCBfQ2hhclQqIGFycmF5LgorICAgICAgaXRlcl90eXBlCisgICAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGludCYgX19tZW1iZXIsCisJCSAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAorCQkgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKKworICAgICAgLy8gRXh0cmFjdCBkYXkgb3IgbW9udGggbmFtZSBpbiBhIGNvbnN0IF9DaGFyVCogYXJyYXkuCisgICAgICBpdGVyX3R5cGUKKyAgICAgIF9NX2V4dHJhY3Rfd2RheV9vcl9tb250aChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW50JiBfX21lbWJlciwKKwkJCSAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKKwkJCSAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKKworICAgICAgLy8gRXh0cmFjdCBvbiBhIGNvbXBvbmVudC1ieS1jb21wb25lbnQgYmFzaXMsIHZpYSBfX2Zvcm1hdCBhcmd1bWVudC4KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJCSAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAorCQkJICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CisKKyAgLy8vIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSBbMjIuMi41LjJdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0luSXRlcgkJCWl0ZXJfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlIHRpbWVfcHV0LgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKgorICAgKiAgVGhpcyBmYWNldCBlbmNhcHN1bGF0ZXMgdGhlIGNvZGUgdG8gZm9ybWF0IGFuZCBvdXRwdXQgZGF0ZXMgYW5kIHRpbWVzCisgICAqICBhY2NvcmRpbmcgdG8gZm9ybWF0cyB1c2VkIGJ5IHN0cmZ0aW1lKCkuCisgICAqCisgICAqICBUaGUgdGltZV9wdXQgdGVtcGxhdGUgdXNlcyBwcm90ZWN0ZWQgdmlydHVhbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSB0aGUKKyAgICogIGFjdHVhbCByZXN1bHRzLiAgVGhlIHB1YmxpYyBhY2Nlc3NvcnMgZm9yd2FyZCB0aGUgY2FsbCB0byB0aGUgdmlydHVhbAorICAgKiAgZnVuY3Rpb25zLiAgVGhlc2UgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvCisgICAqICBpbXBsZW1lbnQgdGhlIGJlaGF2aW9yIHRoZXkgcmVxdWlyZSBmcm9tIHRoZSB0aW1lX3B1dCBmYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcworICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9PdXRJdGVyCQkJaXRlcl90eXBlOworICAgICAgLy9AfQorCisgICAgICAvLy8gTnVtcHVuY3QgZmFjZXQgaWQuCisgICAgICBzdGF0aWMgbG9jYWxlOjppZAkJCWlkOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIHBlcmZvcm1zIGluaXRpYWxpemF0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX3JlZnMgIFBhc3NlZCB0byB0aGUgYmFzZSBmYWNldCBjbGFzcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGZhY2V0KF9fcmVmcykgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRm9ybWF0IGFuZCBvdXRwdXQgYSB0aW1lIG9yIGRhdGUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyB0aGUgZGF0YSBpbiBzdHJ1Y3QgdG0gYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICogIHByb3ZpZGVkIGZvcm1hdCBzdHJpbmcuICBUaGUgZm9ybWF0IHN0cmluZyBpcyBpbnRlcnByZXRlZCBhcyBieQorICAgICAgICogIHN0cmZ0aW1lKCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgc3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgX19pbyAgU291cmNlIG9mIGxvY2FsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlsbCAgY2hhcl90eXBlIHRvIHVzZSBmb3IgcGFkZGluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fdG0gIFN0cnVjdCB0bSB3aXRoIGRhdGUgYW5kIHRpbWUgaW5mbyB0byBmb3JtYXQuCisgICAgICAgKiAgQHBhcmFtICBfX2JlZyAgU3RhcnQgb2YgZm9ybWF0IHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fZW5kICBFbmQgb2YgZm9ybWF0IHN0cmluZy4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciB3cml0aW5nLgorICAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9fdG0sCisJICBjb25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGb3JtYXQgYW5kIG91dHB1dCBhIHRpbWUgb3IgZGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmb3JtYXRzIHRoZSBkYXRhIGluIHN0cnVjdCB0bSBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgKiAgcHJvdmlkZWQgZm9ybWF0IGNoYXIgYW5kIG9wdGlvbmFsIG1vZGlmaWVyLiAgVGhlIGZvcm1hdCBhbmQgbW9kaWZpZXIKKyAgICAgICAqICBhcmUgaW50ZXJwcmV0ZWQgYXMgYnkgc3RyZnRpbWUoKS4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nCisgICAgICAgKiAgdGltZV9wdXQ6OmRvX3B1dCgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgVGhlIHN0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpbGwgIGNoYXJfdHlwZSB0byB1c2UgZm9yIHBhZGRpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3RtICBTdHJ1Y3QgdG0gd2l0aCBkYXRlIGFuZCB0aW1lIGluZm8gdG8gZm9ybWF0LgorICAgICAgICogIEBwYXJhbSAgX19mb3JtYXQgIEZvcm1hdCBjaGFyLgorICAgICAgICogIEBwYXJhbSAgX19tb2QgIE9wdGlvbmFsIG1vZGlmaWVyIGNoYXIuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICBjb25zdCB0bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21vZCk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbAorICAgICAgfnRpbWVfcHV0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZvcm1hdCBhbmQgb3V0cHV0IGEgdGltZSBvciBkYXRlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgdGhlIGRhdGEgaW4gc3RydWN0IHRtIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAqICBwcm92aWRlZCBmb3JtYXQgY2hhciBhbmQgb3B0aW9uYWwgbW9kaWZpZXIuICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vaworICAgICAgICogIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4gIEBzZWUgcHV0KCkgZm9yCisgICAgICAgKiAgbW9yZSBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgVGhlIHN0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpbGwgIGNoYXJfdHlwZSB0byB1c2UgZm9yIHBhZGRpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3RtICBTdHJ1Y3QgdG0gd2l0aCBkYXRlIGFuZCB0aW1lIGluZm8gdG8gZm9ybWF0LgorICAgICAgICogIEBwYXJhbSAgX19mb3JtYXQgIEZvcm1hdCBjaGFyLgorICAgICAgICogIEBwYXJhbSAgX19tb2QgIE9wdGlvbmFsIG1vZGlmaWVyIGNoYXIuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICAqLworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9fdG0sCisJICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CisKKyAgLy8vIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSBbMjIuMi41LjRdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfT3V0SXRlcgkJCWl0ZXJfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHRpbWVfcHV0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+KF9fcmVmcykKKyAgICAgIHsgfTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZpcnR1YWwKKyAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KKyAgICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIE1vbmV5IGZvcm1hdCBvcmRlcmluZyBkYXRhLgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKgorICAgKiAgVGhpcyBjbGFzcyBjb250YWlucyBhbiBvcmRlcmVkIGFycmF5IG9mIDQgZmllbGRzIHRvIHJlcHJlc2VudCB0aGUKKyAgICogIHBhdHRlcm4gZm9yIGZvcm1hdHRpbmcgYSBtb25leSBhbW91bnQuICBFYWNoIGZpZWxkIG1heSBjb250YWluIG9uZSBlbnRyeQorICAgKiAgZnJvbSB0aGUgcGFydCBlbnVtLiAgc3ltYm9sLCBzaWduLCBhbmQgdmFsdWUgbXVzdCBiZSBwcmVzZW50IGFuZCB0aGUKKyAgICogIHJlbWFpbmluZyBmaWVsZCBtdXN0IGNvbnRhaW4gZWl0aGVyIG5vbmUgb3Igc3BhY2UuICBAc2VlCisgICAqICBtb25leXB1bmN0Ojpwb3NfZm9ybWF0KCkgYW5kIG1vbmV5cHVuY3Q6Om5lZ19mb3JtYXQoKSBmb3IgZGV0YWlscyBvZiBob3cKKyAgICogIHRoZXNlIGZpZWxkcyBhcmUgaW50ZXJwcmV0ZWQuCisgICovCisgIGNsYXNzIG1vbmV5X2Jhc2UKKyAgeworICBwdWJsaWM6CisgICAgZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKKyAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CisKKyAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRlcm47CisKKyAgICBlbnVtCisgICAgeworICAgICAgX1NfbWludXMsCisgICAgICBfU196ZXJvLAorICAgICAgX1NfZW5kID0gMTEKKyAgICB9OworCisgICAgLy8gU3RyaW5nIGxpdGVyYWwgb2YgYWNjZXB0YWJsZSAobmFycm93KSBpbnB1dC9vdXRwdXQsIGZvcgorICAgIC8vIG1vbmV5X2dldC9tb25leV9wdXQuICItMDEyMzQ1Njc4OSIKKyAgICBzdGF0aWMgY29uc3QgY2hhciogX1NfYXRvbXM7CisKKyAgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKyAgICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisgICAgX0dMSUJDWFhfQ09OU1Qgc3RhdGljIHBhdHRlcm4KKyAgICBfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pIHRocm93ICgpOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KKyAgICBzdHJ1Y3QgX19tb25leXB1bmN0X2NhY2hlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQKKyAgICB7CisgICAgICBjb25zdCBjaGFyKgkJCV9NX2dyb3VwaW5nOworICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2dyb3VwaW5nX3NpemU7CisgICAgICBib29sCQkJCV9NX3VzZV9ncm91cGluZzsKKyAgICAgIF9DaGFyVAkJCQlfTV9kZWNpbWFsX3BvaW50OworICAgICAgX0NoYXJUCQkJCV9NX3Rob3VzYW5kc19zZXA7CisgICAgICBjb25zdCBfQ2hhclQqCQkJX01fY3Vycl9zeW1ib2w7CisgICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fY3Vycl9zeW1ib2xfc2l6ZTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9wb3NpdGl2ZV9zaWduOworICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX3Bvc2l0aXZlX3NpZ25fc2l6ZTsKKyAgICAgIGNvbnN0IF9DaGFyVCoJCQlfTV9uZWdhdGl2ZV9zaWduOworICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX25lZ2F0aXZlX3NpZ25fc2l6ZTsKKyAgICAgIGludAkJCQlfTV9mcmFjX2RpZ2l0czsKKyAgICAgIG1vbmV5X2Jhc2U6OnBhdHRlcm4JCV9NX3Bvc19mb3JtYXQ7CisgICAgICBtb25leV9iYXNlOjpwYXR0ZXJuCSAgICAgICAgX01fbmVnX2Zvcm1hdDsKKworICAgICAgLy8gQSBsaXN0IG9mIHZhbGlkIG51bWVyaWMgbGl0ZXJhbHMgZm9yIGlucHV0IGFuZCBvdXRwdXQ6IGluIHRoZSBzdGFuZGFyZAorICAgICAgLy8gIkMiIGxvY2FsZSwgdGhpcyBpcyAiLTAxMjM0NTY3ODkiLiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBjaGFycyBhZnRlcgorICAgICAgLy8gaGF2aW5nIGJlZW4gcGFzc2VkIHRocm91Z2ggdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY3R5cGU8X0NoYXJUPi53aWRlbigpLgorICAgICAgX0NoYXJUCQkJCV9NX2F0b21zW21vbmV5X2Jhc2U6Ol9TX2VuZF07CisKKyAgICAgIGJvb2wJCQkJX01fYWxsb2NhdGVkOworCisgICAgICBfX21vbmV5cHVuY3RfY2FjaGUoc2l6ZV90IF9fcmVmcyA9IDApIDogZmFjZXQoX19yZWZzKSwKKyAgICAgIF9NX2dyb3VwaW5nKDApLCBfTV9ncm91cGluZ19zaXplKDApLCBfTV91c2VfZ3JvdXBpbmcoZmFsc2UpLAorICAgICAgX01fZGVjaW1hbF9wb2ludChfQ2hhclQoKSksIF9NX3Rob3VzYW5kc19zZXAoX0NoYXJUKCkpLAorICAgICAgX01fY3Vycl9zeW1ib2woMCksIF9NX2N1cnJfc3ltYm9sX3NpemUoMCksCisgICAgICBfTV9wb3NpdGl2ZV9zaWduKDApLCBfTV9wb3NpdGl2ZV9zaWduX3NpemUoMCksCisgICAgICBfTV9uZWdhdGl2ZV9zaWduKDApLCBfTV9uZWdhdGl2ZV9zaWduX3NpemUoMCksCisgICAgICBfTV9mcmFjX2RpZ2l0cygwKSwKKyAgICAgIF9NX3Bvc19mb3JtYXQobW9uZXlfYmFzZTo6cGF0dGVybigpKSwKKyAgICAgIF9NX25lZ19mb3JtYXQobW9uZXlfYmFzZTo6cGF0dGVybigpKSwgX01fYWxsb2NhdGVkKGZhbHNlKQorICAgICAgeyB9CisKKyAgICAgIH5fX21vbmV5cHVuY3RfY2FjaGUoKTsKKworICAgICAgdm9pZAorICAgICAgX01fY2FjaGUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CisKKyAgICBwcml2YXRlOgorICAgICAgX19tb25leXB1bmN0X2NhY2hlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fbW9uZXlwdW5jdF9jYWNoZSYpOworICAgICAgCisgICAgICBleHBsaWNpdAorICAgICAgX19tb25leXB1bmN0X2NhY2hlKGNvbnN0IF9fbW9uZXlwdW5jdF9jYWNoZSYpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgorICAgIF9fbW9uZXlwdW5jdF9jYWNoZTxfQ2hhclQsIF9JbnRsPjo6fl9fbW9uZXlwdW5jdF9jYWNoZSgpCisgICAgeworICAgICAgaWYgKF9NX2FsbG9jYXRlZCkKKwl7CisJICBkZWxldGUgW10gX01fZ3JvdXBpbmc7CisJICBkZWxldGUgW10gX01fY3Vycl9zeW1ib2w7CisJICBkZWxldGUgW10gX01fcG9zaXRpdmVfc2lnbjsKKwkgIGRlbGV0ZSBbXSBfTV9uZWdhdGl2ZV9zaWduOworCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgbW9uZXlwdW5jdC4KKyAgICogIEBpbmdyb3VwIGxvY2FsZXMKKyAgICoKKyAgICogIFRoaXMgZmFjZXQgZW5jYXBzdWxhdGVzIHRoZSBwdW5jdHVhdGlvbiwgZ3JvdXBpbmcgYW5kIG90aGVyIGZvcm1hdHRpbmcKKyAgICogIGZlYXR1cmVzIG9mIG1vbmV5IGFtb3VudCBzdHJpbmcgcmVwcmVzZW50YXRpb25zLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CisgICAgY2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglzdHJpbmdfdHlwZTsKKyAgICAgIC8vQH0KKyAgICAgIHR5cGVkZWYgX19tb25leXB1bmN0X2NhY2hlPF9DaGFyVCwgX0ludGw+ICAgICBfX2NhY2hlX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX19jYWNoZV90eXBlKgkJCV9NX2RhdGE7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gVGhpcyB2YWx1ZSBpcyBwcm92aWRlZCBieSB0aGUgc3RhbmRhcmQsIGJ1dCBubyByZWFzb24gZm9yIGl0cworICAgICAgLy8vIGV4aXN0ZW5jZS4KKyAgICAgIHN0YXRpYyBjb25zdCBib29sCQkJaW50bCA9IF9JbnRsOworICAgICAgLy8vIE51bXB1bmN0IGZhY2V0IGlkLgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19yZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoMCkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25zdHJ1Y3Rvci4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fY2FjaGUgIENhY2hlIGZvciBvcHRpbWl6YXRpb24uCisgICAgICAgKiAgQHBhcmFtIF9fcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtb25leXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnRlcm5hbCBjb25zdHJ1Y3Rvci4gTm90IGZvciBnZW5lcmFsIHVzZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgdGhlIGxpYnJhcnkgaXRzZWxmIHRvIHNldCB1cCBuZXcKKyAgICAgICAqICBsb2NhbGVzLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19jbG9jICBUaGUgQyBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIG5hbWUgb2YgYSBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtIF9fcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQorICAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApCisgICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MsIF9fcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNoYXJfdHlwZSB0byB1c2UgYXMgYSBkZWNpbWFsIHBvaW50LiAgSXQKKyAgICAgICAqICBkb2VzIHNvIGJ5IHJldHVybmluZyByZXR1cm5pbmcKKyAgICAgICAqICBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX2RlY2ltYWxfcG9pbnQoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgY2hhcl90eXBlIHJlcHJlc2VudGluZyBhIGRlY2ltYWwgcG9pbnQuCisgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiB0aG91c2FuZHMgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY2hhcl90eXBlIHRvIHVzZSBhcyBhIHRob3VzYW5kcworICAgICAgICogIHNlcGFyYXRvci4gIEl0IGRvZXMgc28gYnkgcmV0dXJuaW5nIHJldHVybmluZworICAgICAgICogIG1vbmV5cHVuY3Q8Y2hhcl90eXBlPjo6ZG9fdGhvdXNhbmRzX3NlcCgpLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBjaGFyX3R5cGUgcmVwcmVzZW50aW5nIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4KKyAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGdyb3VwaW5nIHNwZWNpZmljYXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgZ3JvdXBpbmdzIGZvciB0aGUKKyAgICAgICAqICBpbnRlZ2VyIHBhcnQgb2YgYW4gYW1vdW50LiAgR3JvdXBpbmdzIGluZGljYXRlIHdoZXJlIHRob3VzYW5kcworICAgICAgICogIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBFYWNoIGNoYXIgaW4gdGhlIHJldHVybiBzdHJpbmcgaXMgaW50ZXJwcmV0IGFzIGFuIGludGVnZXIgcmF0aGVyCisgICAgICAgKiAgdGhhbiBhIGNoYXJhY3Rlci4gIFRoZXNlIG51bWJlcnMgcmVwcmVzZW50IHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIGEKKyAgICAgICAqICBncm91cC4gIFRoZSBmaXJzdCBjaGFyIGluIHRoZSBzdHJpbmcgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGRpZ2l0cworICAgICAgICogIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBncm91cC4gIElmIGEgY2hhciBpcyBuZWdhdGl2ZSwgaXQgaW5kaWNhdGVzCisgICAgICAgKiAgYW4gdW5saW1pdGVkIG51bWJlciBvZiBkaWdpdHMgZm9yIHRoZSBncm91cC4gIElmIG1vcmUgY2hhcnMgZnJvbSB0aGUKKyAgICAgICAqICBzdHJpbmcgYXJlIHJlcXVpcmVkIHRvIGdyb3VwIGEgbnVtYmVyLCB0aGUgbGFzdCBjaGFyIGlzIHVzZWQKKyAgICAgICAqICByZXBlYXRlZGx5LgorICAgICAgICoKKyAgICAgICAqICBGb3IgZXhhbXBsZSwgaWYgdGhlIGdyb3VwaW5nKCkgcmV0dXJucyA8Y29kZT5cMDAzXDAwMjwvY29kZT4KKyAgICAgICAqICBhbmQgaXMgYXBwbGllZCB0byB0aGUgbnVtYmVyIDEyMzQ1Njc4OSwgdGhpcyBjb3JyZXNwb25kcyB0bworICAgICAgICogIDEyLDM0LDU2LDc4OS4gIE5vdGUgdGhhdCBpZiB0aGUgc3RyaW5nIHdhcyA8Y29kZT4zMjwvY29kZT4sIHRoaXMgd291bGQKKyAgICAgICAqICBwdXQgbW9yZSB0aGFuIDUwIGRpZ2l0cyBpbnRvIHRoZSBsZWFzdCBzaWduaWZpY2FudCBncm91cCBpZgorICAgICAgICogIHRoZSBjaGFyYWN0ZXIgc2V0IGlzIEFTQ0lJLgorICAgICAgICoKKyAgICAgICAqICBUaGUgc3RyaW5nIGlzIHJldHVybmVkIGJ5IGNhbGxpbmcKKyAgICAgICAqICBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX2dyb3VwaW5nKCkuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIHN0cmluZyByZXByZXNlbnRpbmcgZ3JvdXBpbmcgc3BlY2lmaWNhdGlvbi4KKyAgICAgICovCisgICAgICBzdHJpbmcKKyAgICAgIGdyb3VwaW5nKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gY3VycmVuY3kgc3ltYm9sIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nX3R5cGUgdG8gdXNlIGFzIGEgY3VycmVuY3kgc3ltYm9sLiAgSXQKKyAgICAgICAqICBkb2VzIHNvIGJ5IHJldHVybmluZyByZXR1cm5pbmcKKyAgICAgICAqICBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX2N1cnJfc3ltYm9sKCkuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBhIGN1cnJlbmN5IHN5bWJvbC4KKyAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBwb3NpdGl2ZSBzaWduIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nX3R5cGUgdG8gdXNlIGFzIGEgc2lnbiBmb3IgcG9zaXRpdmUKKyAgICAgICAqICBhbW91bnRzLiAgSXQgZG9lcyBzbyBieSByZXR1cm5pbmcgcmV0dXJuaW5nCisgICAgICAgKiAgbW9uZXlwdW5jdDxjaGFyX3R5cGU+Ojpkb19wb3NpdGl2ZV9zaWduKCkuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSByZXR1cm4gdmFsdWUgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIsIHRoZSBmaXJzdAorICAgICAgICogIGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgcG9zX2Zvcm1hdCgpIGFuZCB0aGUKKyAgICAgICAqICByZW1haW5kZXIgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBhIHBvc2l0aXZlIHNpZ24uCisgICAgICAqLworICAgICAgc3RyaW5nX3R5cGUKKyAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIG5lZ2F0aXZlIHNpZ24gc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmdfdHlwZSB0byB1c2UgYXMgYSBzaWduIGZvciBuZWdhdGl2ZQorICAgICAgICogIGFtb3VudHMuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZyByZXR1cm5pbmcKKyAgICAgICAqICBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX25lZ2F0aXZlX3NpZ24oKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIHJldHVybiB2YWx1ZSBjb250YWlucyBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciwgdGhlIGZpcnN0CisgICAgICAgKiAgY2hhcmFjdGVyIGFwcGVhcnMgaW4gdGhlIHBvc2l0aW9uIGluZGljYXRlZCBieSBuZWdfZm9ybWF0KCkgYW5kIHRoZQorICAgICAgICogIHJlbWFpbmRlciBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgZm9ybWF0dGVkIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgc3RyaW5nX3R5cGUgcmVwcmVzZW50aW5nIGEgbmVnYXRpdmUgc2lnbi4KKyAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gbnVtYmVyIG9mIGRpZ2l0cyBpbiBmcmFjdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBleGFjdCBudW1iZXIgb2YgZGlnaXRzIHRoYXQgbWFrZSB1cCB0aGUKKyAgICAgICAqICBmcmFjdGlvbmFsIHBhcnQgb2YgYSBtb25leSBhbW91bnQuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIHJldHVybmluZyBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX2ZyYWNfZGlnaXRzKCkuCisgICAgICAgKgorICAgICAgICogIFRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgYSBtb25leSBhbW91bnQgaXMgb3B0aW9uYWwuICBCdXQgaWYgaXQgaXMKKyAgICAgICAqICBwcmVzZW50LCB0aGVyZSBtdXN0IGJlIGZyYWNfZGlnaXRzKCkgZGlnaXRzLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBOdW1iZXIgb2YgZGlnaXRzIGluIGFtb3VudCBmcmFjdGlvbi4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gcGF0dGVybiBmb3IgbW9uZXkgdmFsdWVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwYXR0ZXJuIGRlc2NyaWJpbmcgdGhlIGZvcm1hdHRpbmcgb2YgYQorICAgICAgICogIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIHZhbHVlZCBtb25leSBhbW91bnQuICBJdCBkb2VzIHNvIGJ5IHJldHVybmluZworICAgICAgICogIHJldHVybmluZyBtb25leXB1bmN0PGNoYXJfdHlwZT46OmRvX3Bvc19mb3JtYXQoKSBvcgorICAgICAgICogIG1vbmV5cHVuY3Q8Y2hhcl90eXBlPjo6ZG9fbmVnX2Zvcm1hdCgpLgorICAgICAgICoKKyAgICAgICAqICBUaGUgcGF0dGVybiBoYXMgNCBmaWVsZHMgZGVzY3JpYmluZyB0aGUgb3JkZXJpbmcgb2Ygc3ltYm9sLCBzaWduLAorICAgICAgICogIHZhbHVlLCBhbmQgbm9uZSBvciBzcGFjZS4gIFRoZXJlIG11c3QgYmUgb25lIG9mIGVhY2ggaW4gdGhlIHBhdHRlcm4uCisgICAgICAgKiAgVGhlIG5vbmUgYW5kIHNwYWNlIGVudW1zIG1heSBub3QgYXBwZWFyIGluIHRoZSBmaXJzdCBmaWVsZCBhbmQgc3BhY2UKKyAgICAgICAqICBtYXkgbm90IGFwcGVhciBpbiB0aGUgZmluYWwgZmllbGQuCisgICAgICAgKgorICAgICAgICogIFRoZSBwYXJ0cyBvZiBhIG1vbmV5IHN0cmluZyBtdXN0IGFwcGVhciBpbiB0aGUgb3JkZXIgaW5kaWNhdGVkIGJ5CisgICAgICAgKiAgdGhlIGZpZWxkcyBvZiB0aGUgcGF0dGVybi4gIFRoZSBzeW1ib2wgZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlCisgICAgICAgKiAgdmFsdWUgb2YgY3Vycl9zeW1ib2woKSBtYXkgYmUgcHJlc2VudC4gIFRoZSBzaWduIGZpZWxkIGluZGljYXRlcworICAgICAgICogIHRoYXQgdGhlIHZhbHVlIG9mIHBvc2l0aXZlX3NpZ24oKSBvciBuZWdhdGl2ZV9zaWduKCkgbXVzdCBiZQorICAgICAgICogIHByZXNlbnQuICBUaGUgdmFsdWUgZmllbGQgaW5kaWNhdGVzIHRoYXQgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZQorICAgICAgICogIG1vbmV5IGFtb3VudCBpcyBwcmVzZW50LiAgbm9uZSBpbmRpY2F0ZXMgMCBvciBtb3JlIHdoaXRlc3BhY2UKKyAgICAgICAqICBjaGFyYWN0ZXJzLCBleGNlcHQgYXQgdGhlIGVuZCwgd2hlcmUgaXQgcGVybWl0cyBubyB3aGl0ZXNwYWNlLgorICAgICAgICogIHNwYWNlIGluZGljYXRlcyB0aGF0IDEgb3IgbW9yZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgbXVzdCBiZQorICAgICAgICogIHByZXNlbnQuCisgICAgICAgKgorICAgICAgICogIEZvciBleGFtcGxlLCBmb3IgdGhlIFVTIGxvY2FsZSBhbmQgcG9zX2Zvcm1hdCgpIHBhdHRlcm4KKyAgICAgICAqICB7c3ltYm9sLHNpZ24sdmFsdWUsbm9uZX0sIGN1cnJfc3ltYm9sKCkgPT0gJmFwb3M7JCZhcG9zOworICAgICAgICogIHBvc2l0aXZlX3NpZ24oKSA9PSAmYXBvczsrJmFwb3M7LCBhbmQgdmFsdWUgMTAuMDEsIGFuZAorICAgICAgICogIG9wdGlvbnMgc2V0IHRvIGZvcmNlIHRoZSBzeW1ib2wsIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyBpcworICAgICAgICogIDxjb2RlPiQrMTAuMDE8L2NvZGU+LgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBQYXR0ZXJuIGZvciBtb25leSB2YWx1ZXMuCisgICAgICAqLworICAgICAgcGF0dGVybgorICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KKworICAgICAgcGF0dGVybgorICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KKyAgICAgIC8vQH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBEZXN0cnVjdG9yLgorICAgICAgdmlydHVhbAorICAgICAgfm1vbmV5cHVuY3QoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBjaGFyX3R5cGUgdG8gdXNlIGFzIGEgZGVjaW1hbCBwb2ludC4gIFRoaXMgZnVuY3Rpb24gaXMgYQorICAgICAgICogIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBAYSBjaGFyX3R5cGUgcmVwcmVzZW50aW5nIGEgZGVjaW1hbCBwb2ludC4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGNoYXJfdHlwZQorICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50OyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIHRob3VzYW5kcyBzZXBhcmF0b3IgY2hhcmFjdGVyLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgY2hhcl90eXBlIHRvIHVzZSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3IuICBUaGlzIGZ1bmN0aW9uCisgICAgICAgKiAgaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZSB2YWx1ZSByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgY2hhcl90eXBlIHJlcHJlc2VudGluZyBhIHRob3VzYW5kcyBzZXBhcmF0b3IuCisgICAgICAqLworICAgICAgdmlydHVhbCBjaGFyX3R5cGUKKyAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBncm91cGluZyBzcGVjaWZpY2F0aW9uLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyBncm91cGluZ3MgZm9yIHRoZSBpbnRlZ2VyIHBhcnQgb2YgYQorICAgICAgICogIG51bWJlci4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZQorICAgICAgICogIHZhbHVlIHJldHVybmVkLiAgQHNlZSBncm91cGluZygpIGZvciBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBTdHJpbmcgcmVwcmVzZW50aW5nIGdyb3VwaW5nIHNwZWNpZmljYXRpb24uCisgICAgICAqLworICAgICAgdmlydHVhbCBzdHJpbmcKKyAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEtPl9NX2dyb3VwaW5nOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGN1cnJlbmN5IHN5bWJvbCBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZ190eXBlIHRvIHVzZSBhcyBhIGN1cnJlbmN5IHN5bWJvbC4KKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUKKyAgICAgICAqICByZXR1cm5lZC4gIEBzZWUgY3Vycl9zeW1ib2woKSBmb3IgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQGEgc3RyaW5nX3R5cGUgcmVwcmVzZW50aW5nIGEgY3VycmVuY3kgc3ltYm9sLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKKyAgICAgIGRvX2N1cnJfc3ltYm9sKCkgICBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gcG9zaXRpdmUgc2lnbiBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZ190eXBlIHRvIHVzZSBhcyBhIHNpZ24gZm9yIHBvc2l0aXZlCisgICAgICAgKiAgYW1vdW50cy4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZQorICAgICAgICogIHZhbHVlIHJldHVybmVkLiAgQHNlZSBwb3NpdGl2ZV9zaWduKCkgZm9yIGRldGFpbHMuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEBhIHN0cmluZ190eXBlIHJlcHJlc2VudGluZyBhIHBvc2l0aXZlIHNpZ24uCisgICAgICAqLworICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQorICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIG5lZ2F0aXZlIHNpZ24gc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmdfdHlwZSB0byB1c2UgYXMgYSBzaWduIGZvciBuZWdhdGl2ZQorICAgICAgICogIGFtb3VudHMuICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUKKyAgICAgICAqICB2YWx1ZSByZXR1cm5lZC4gIEBzZWUgbmVnYXRpdmVfc2lnbigpIGZvciBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBAYSBzdHJpbmdfdHlwZSByZXByZXNlbnRpbmcgYSBuZWdhdGl2ZSBzaWduLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKKyAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBudW1iZXIgb2YgZGlnaXRzIGluIGZyYWN0aW9uLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGV4YWN0IG51bWJlciBvZiBkaWdpdHMgdGhhdCBtYWtlIHVwIHRoZQorICAgICAgICogIGZyYWN0aW9uYWwgcGFydCBvZiBhIG1vbmV5IGFtb3VudC4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvcgorICAgICAgICogIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLiAgQHNlZSBmcmFjX2RpZ2l0cygpCisgICAgICAgKiAgZm9yIGRldGFpbHMuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIE51bWJlciBvZiBkaWdpdHMgaW4gYW1vdW50IGZyYWN0aW9uLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0czsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBwYXR0ZXJuIGZvciBtb25leSB2YWx1ZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBhdHRlcm4gZGVzY3JpYmluZyB0aGUgZm9ybWF0dGluZyBvZiBhCisgICAgICAgKiAgcG9zaXRpdmUgdmFsdWVkIG1vbmV5IGFtb3VudC4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkCisgICAgICAgKiAgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlIHJldHVybmVkLiAgQHNlZSBwb3NfZm9ybWF0KCkgZm9yCisgICAgICAgKiAgZGV0YWlscy4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgUGF0dGVybiBmb3IgbW9uZXkgdmFsdWVzLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgcGF0dGVybgorICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0OyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIHBhdHRlcm4gZm9yIG1vbmV5IHZhbHVlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcGF0dGVybiBkZXNjcmliaW5nIHRoZSBmb3JtYXR0aW5nIG9mIGEKKyAgICAgICAqICBuZWdhdGl2ZSB2YWx1ZWQgbW9uZXkgYW1vdW50LiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuICBAc2VlIG5lZ19mb3JtYXQoKSBmb3IKKyAgICAgICAqICBkZXRhaWxzLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBQYXR0ZXJuIGZvciBtb25leSB2YWx1ZXMuCisgICAgICAqLworICAgICAgdmlydHVhbCBwYXR0ZXJuCisgICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQ7IH0KKworICAgICAgLy8gRm9yIHVzZSBhdCBjb25zdHJ1Y3Rpb24gdGltZSBvbmx5LgorICAgICAgIHZvaWQKKyAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSAwLAorCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSA9IDApOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgorICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aWQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgorICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCk7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOworCisgIHRlbXBsYXRlPD4KKyAgICB2b2lkCisgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsKKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCk7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwKKwkJCQkJCQljb25zdCBjaGFyKik7CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCisJCQkJCQkJIGNvbnN0IGNoYXIqKTsKKyNlbmRpZgorCisgIC8vLyBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSBbMjIuMi42LjRdLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CisgICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9DaGFyVAkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4Jc3RyaW5nX3R5cGU7CisKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCisgICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQorICAgICAgeworCWlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgIkMiKSAhPSAwCisJICAgICYmIF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorCSAgeworCSAgICBfX2NfbG9jYWxlIF9fdG1wOworCSAgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUoX190bXAsIF9fcyk7CisJICAgIHRoaXMtPl9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX3RtcCk7CisJICAgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUoX190bXApOworCSAgfQorICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkgeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CisgICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0xEQkwKKworICAvKioKKyAgICogIEBicmllZiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBtb25leV9nZXQuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byBwYXJzZSBhbmQgcmV0dXJuIGEgbW9uZXRhcnkKKyAgICogIGFtb3VudCBmcm9tIGEgc3RyaW5nLgorICAgKgorICAgKiAgVGhlIG1vbmV5X2dldCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0bworICAgKiAgcHJvdmlkZSB0aGUgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZQorICAgKiAgY2FsbCB0byB0aGUgdmlydHVhbCBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUKKyAgICogIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20KKyAgICogIHRoZSBtb25leV9nZXQgZmFjZXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfSW5JdGVyCQkJaXRlcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglzdHJpbmdfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy8vIE51bXB1bmN0IGZhY2V0IGlkLgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19yZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBmYWNldChfX3JlZnMpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlYWQgYW5kIHBhcnNlIGEgbW9uZXRhcnkgdmFsdWUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmVhZHMgY2hhcmFjdGVycyBmcm9tIEBhIF9fcywgaW50ZXJwcmV0cyB0aGVtIGFzIGEKKyAgICAgICAqICBtb25ldGFyeSB2YWx1ZSBhY2NvcmRpbmcgdG8gbW9uZXlwdW5jdCBhbmQgY3R5cGUgZmFjZXRzIHJldHJpZXZlZAorICAgICAgICogIGZyb20gaW8uZ2V0bG9jKCksIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgaW4gQGEgdW5pdHMgYXMgYW4gaW50ZWdyYWwKKyAgICAgICAqICB2YWx1ZSBtb25leXB1bmN0OjpmcmFjX2RpZ2l0cygpICogdGhlIGFjdHVhbCBhbW91bnQuICBGb3IgZXhhbXBsZSwKKyAgICAgICAqICB0aGUgc3RyaW5nICQxMC4wMSBpbiBhIFVTIGxvY2FsZSB3b3VsZCBzdG9yZSAxMDAxIGluIEBhIHVuaXRzLgorICAgICAgICoKKyAgICAgICAqICBBbnkgY2hhcmFjdGVycyBub3QgcGFydCBvZiBhIHZhbGlkIG1vbmV5IGFtb3VudCBhcmUgbm90IGNvbnN1bWVkLgorICAgICAgICoKKyAgICAgICAqICBJZiBhIG1vbmV5IHZhbHVlIGNhbm5vdCBiZSBwYXJzZWQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLCBzZXRzCisgICAgICAgKiAgZXJyPShlcnJ8aW8uZmFpbGJpdCkuICBJZiB0aGUgc3RyZWFtIGlzIGNvbnN1bWVkIGJlZm9yZSBmaW5pc2hpbmcKKyAgICAgICAqICBwYXJzaW5nLCAgc2V0cyBlcnI9KGVycnxpby5mYWlsYml0fGlvLmVvZmJpdCkuICBAYSB1bml0cyBpcworICAgICAgICogIHVuY2hhbmdlZCBpZiBwYXJzaW5nIGZhaWxzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHJldHVybmluZyB0aGUgcmVzdWx0IG9mIGRvX2dldCgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgU3RhcnQgb2YgY2hhcmFjdGVycyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZW5kICBFbmQgb2YgY2hhcmFjdGVycyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIF9faW50bCAgUGFyYW1ldGVyIHRvIHVzZV9mYWNldDxtb25leXB1bmN0PENoYXJULGludGw+ID4uCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgZmFjZXRzIGFuZCBpbyBzdGF0ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmaWVsZCB0byBzZXQgaWYgcGFyc2luZyBmYWlscy4KKyAgICAgICAqICBAcGFyYW0gIF9fdW5pdHMgIFBsYWNlIHRvIHN0b3JlIHJlc3VsdCBvZiBwYXJzaW5nLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGZpcnN0IGNoYXJhY3RlciBiZXlvbmQgdmFsaWQgbW9uZXkKKyAgICAgICAqCSAgIGFtb3VudC4KKyAgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCisJICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVhZCBhbmQgcGFyc2UgYSBtb25ldGFyeSB2YWx1ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyBjaGFyYWN0ZXJzIGZyb20gQGEgX19zLCBpbnRlcnByZXRzIHRoZW0gYXMKKyAgICAgICAqICBhIG1vbmV0YXJ5IHZhbHVlIGFjY29yZGluZyB0byBtb25leXB1bmN0IGFuZCBjdHlwZSBmYWNldHMKKyAgICAgICAqICByZXRyaWV2ZWQgZnJvbSBpby5nZXRsb2MoKSwgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBpbiBAYQorICAgICAgICogIGRpZ2l0cy4gIEZvciBleGFtcGxlLCB0aGUgc3RyaW5nICQxMC4wMSBpbiBhIFVTIGxvY2FsZSB3b3VsZAorICAgICAgICogIHN0b3JlIDxjb2RlPjEwMDE8L2NvZGU+IGluIEBhIGRpZ2l0cy4KKyAgICAgICAqCisgICAgICAgKiAgQW55IGNoYXJhY3RlcnMgbm90IHBhcnQgb2YgYSB2YWxpZCBtb25leSBhbW91bnQgYXJlIG5vdCBjb25zdW1lZC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYSBtb25leSB2YWx1ZSBjYW5ub3QgYmUgcGFyc2VkIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgc2V0cworICAgICAgICogIGVycj0oZXJyfGlvLmZhaWxiaXQpLiAgSWYgdGhlIHN0cmVhbSBpcyBjb25zdW1lZCBiZWZvcmUgZmluaXNoaW5nCisgICAgICAgKiAgcGFyc2luZywgIHNldHMgZXJyPShlcnJ8aW8uZmFpbGJpdHxpby5lb2ZiaXQpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHJldHVybmluZyB0aGUgcmVzdWx0IG9mIGRvX2dldCgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgU3RhcnQgb2YgY2hhcmFjdGVycyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZW5kICBFbmQgb2YgY2hhcmFjdGVycyB0byBwYXJzZS4KKyAgICAgICAqICBAcGFyYW0gIF9faW50bCAgUGFyYW1ldGVyIHRvIHVzZV9mYWNldDxtb25leXB1bmN0PENoYXJULGludGw+ID4uCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgZmFjZXRzIGFuZCBpbyBzdGF0ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZXJyICBFcnJvciBmaWVsZCB0byBzZXQgaWYgcGFyc2luZyBmYWlscy4KKyAgICAgICAqICBAcGFyYW0gIF9fZGlnaXRzICBQbGFjZSB0byBzdG9yZSByZXN1bHQgb2YgcGFyc2luZy4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyBmaXJzdCBjaGFyYWN0ZXIgYmV5b25kIHZhbGlkIG1vbmV5CisgICAgICAgKgkgICBhbW91bnQuCisgICAgICAgKi8KKyAgICAgIGl0ZXJfdHlwZQorICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAorCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19kaWdpdHMpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5tb25leV9nZXQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZWFkIGFuZCBwYXJzZSBhIG1vbmV0YXJ5IHZhbHVlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGFuZCBwYXJzZXMgY2hhcmFjdGVycyByZXByZXNlbnRpbmcgYSBtb25ldGFyeQorICAgICAgICogIHZhbHVlLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlCisgICAgICAgKiAgdmFsdWUgcmV0dXJuZWQuICBAc2VlIGdldCgpIGZvciBkZXRhaWxzLgorICAgICAgICovCisgICAgICAvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorI2lmIGRlZmluZWQgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUICYmIGRlZmluZWQgX19MT05HX0RPVUJMRV8xMjhfXworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIF9fZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAorCSAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX191bml0cykgY29uc3Q7CisjZWxzZQorICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVhZCBhbmQgcGFyc2UgYSBtb25ldGFyeSB2YWx1ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyBhbmQgcGFyc2VzIGNoYXJhY3RlcnMgcmVwcmVzZW50aW5nIGEgbW9uZXRhcnkKKyAgICAgICAqICB2YWx1ZS4gIFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIGZvciBkZXJpdmVkIGNsYXNzZXMgdG8gY2hhbmdlIHRoZQorICAgICAgICogIHZhbHVlIHJldHVybmVkLiAgQHNlZSBnZXQoKSBmb3IgZGV0YWlscy4KKyAgICAgICAqLworICAgICAgdmlydHVhbCBpdGVyX3R5cGUKKyAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCisJICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTxib29sIF9JbnRsPgorICAgICAgICBpdGVyX3R5cGUKKyAgICAgICAgX01fZXh0cmFjdChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCQkgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX19kaWdpdHMpIGNvbnN0OyAgICAgCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgbW9uZXlfcHV0LgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKgorICAgKiAgVGhpcyBmYWNldCBlbmNhcHN1bGF0ZXMgdGhlIGNvZGUgdG8gZm9ybWF0IGFuZCBvdXRwdXQgYSBtb25ldGFyeQorICAgKiAgYW1vdW50LgorICAgKgorICAgKiAgVGhlIG1vbmV5X3B1dCB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0bworICAgKiAgcHJvdmlkZSB0aGUgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZQorICAgKiAgY2FsbCB0byB0aGUgdmlydHVhbCBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUKKyAgICogIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20KKyAgICogIHRoZSBtb25leV9wdXQgZmFjZXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcworICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9PdXRJdGVyCQkJaXRlcl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPglzdHJpbmdfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy8vIE51bXB1bmN0IGZhY2V0IGlkLgorICAgICAgc3RhdGljIGxvY2FsZTo6aWQJCQlpZDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RvciBwZXJmb3JtcyBpbml0aWFsaXphdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19yZWZzICBQYXNzZWQgdG8gdGhlIGJhc2UgZmFjZXQgY2xhc3MuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBmYWNldChfX3JlZnMpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZvcm1hdCBhbmQgb3V0cHV0IGEgbW9uZXRhcnkgdmFsdWUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyBAYSB1bml0cyBhcyBhIG1vbmV0YXJ5IHZhbHVlIGFjY29yZGluZyB0bworICAgICAgICogIG1vbmV5cHVuY3QgYW5kIGN0eXBlIGZhY2V0cyByZXRyaWV2ZWQgZnJvbSBpby5nZXRsb2MoKSwgYW5kIHdyaXRlcworICAgICAgICogIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVycyB0byBAYSBfX3MuICBGb3IgZXhhbXBsZSwgdGhlIHZhbHVlIDEwMDEgaW4gYQorICAgICAgICogIFVTIGxvY2FsZSB3b3VsZCB3cml0ZSA8Y29kZT4kMTAuMDE8L2NvZGU+IHRvIEBhIF9fcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3b3JrcyBieSByZXR1cm5pbmcgdGhlIHJlc3VsdCBvZiBkb19wdXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uCisgICAgICAgKiAgQHBhcmFtICBfX2ludGwgIFBhcmFtZXRlciB0byB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxDaGFyVCxpbnRsPiA+LgorICAgICAgICogIEBwYXJhbSAgX19pbyAgU291cmNlIG9mIGZhY2V0cyBhbmQgaW8gc3RhdGUuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpbGwgIGNoYXJfdHlwZSB0byB1c2UgZm9yIHBhZGRpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3VuaXRzICBQbGFjZSB0byBzdG9yZSByZXN1bHQgb2YgcGFyc2luZy4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciB3cml0aW5nLgorICAgICAgICovCisgICAgICBpdGVyX3R5cGUKKyAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCisJICBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fdW5pdHMpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRm9ybWF0IGFuZCBvdXRwdXQgYSBtb25ldGFyeSB2YWx1ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmb3JtYXRzIEBhIGRpZ2l0cyBhcyBhIG1vbmV0YXJ5IHZhbHVlCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIG1vbmV5cHVuY3QgYW5kIGN0eXBlIGZhY2V0cyByZXRyaWV2ZWQgZnJvbQorICAgICAgICogIGlvLmdldGxvYygpLCBhbmQgd3JpdGVzIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVycyB0byBAYSBfX3MuCisgICAgICAgKiAgRm9yIGV4YW1wbGUsIHRoZSBzdHJpbmcgPGNvZGU+MTAwMTwvY29kZT4gaW4gYSBVUyBsb2NhbGUKKyAgICAgICAqICB3b3VsZCB3cml0ZSA8Y29kZT4kMTAuMDE8L2NvZGU+IHRvIEBhIF9fcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3b3JrcyBieSByZXR1cm5pbmcgdGhlIHJlc3VsdCBvZiBkb19wdXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uCisgICAgICAgKiAgQHBhcmFtICBfX2ludGwgIFBhcmFtZXRlciB0byB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxDaGFyVCxpbnRsPiA+LgorICAgICAgICogIEBwYXJhbSAgX19pbyAgU291cmNlIG9mIGZhY2V0cyBhbmQgaW8gc3RhdGUuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpbGwgIGNoYXJfdHlwZSB0byB1c2UgZm9yIHBhZGRpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX2RpZ2l0cyAgUGxhY2UgdG8gc3RvcmUgcmVzdWx0IG9mIHBhcnNpbmcuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICAqLworICAgICAgaXRlcl90eXBlCisgICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAorCSAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8vIERlc3RydWN0b3IuCisgICAgICB2aXJ0dWFsCisgICAgICB+bW9uZXlfcHV0KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRm9ybWF0IGFuZCBvdXRwdXQgYSBtb25ldGFyeSB2YWx1ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmb3JtYXRzIEBhIHVuaXRzIGFzIGEgbW9uZXRhcnkgdmFsdWUgYWNjb3JkaW5nIHRvCisgICAgICAgKiAgbW9uZXlwdW5jdCBhbmQgY3R5cGUgZmFjZXRzIHJldHJpZXZlZCBmcm9tIGlvLmdldGxvYygpLCBhbmQgd3JpdGVzCisgICAgICAgKiAgdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXJzIHRvIEBhIF9fcy4gIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgMTAwMSBpbiBhCisgICAgICAgKiAgVVMgbG9jYWxlIHdvdWxkIHdyaXRlIDxjb2RlPiQxMC4wMTwvY29kZT4gdG8gQGEgX19zLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayBmb3IgZGVyaXZlZCBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUKKyAgICAgICAqICByZXR1cm5lZC4gIEBzZWUgcHV0KCkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgc3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgX19pbnRsICBQYXJhbWV0ZXIgdG8gdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Q2hhclQsaW50bD4gPi4KKyAgICAgICAqICBAcGFyYW0gIF9faW8gIFNvdXJjZSBvZiBmYWNldHMgYW5kIGlvIHN0YXRlLgorICAgICAgICogIEBwYXJhbSAgX19maWxsICBjaGFyX3R5cGUgdG8gdXNlIGZvciBwYWRkaW5nLgorICAgICAgICogIEBwYXJhbSAgX191bml0cyAgUGxhY2UgdG8gc3RvcmUgcmVzdWx0IG9mIHBhcnNpbmcuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgYWZ0ZXIgd3JpdGluZy4KKyAgICAgICAqLworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgICAgIHZpcnR1YWwgaXRlcl90eXBlCisgICAgICBfX2RvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJICAgICAgIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsKKyNlbHNlCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRm9ybWF0IGFuZCBvdXRwdXQgYSBtb25ldGFyeSB2YWx1ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmb3JtYXRzIEBhIGRpZ2l0cyBhcyBhIG1vbmV0YXJ5IHZhbHVlCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIG1vbmV5cHVuY3QgYW5kIGN0eXBlIGZhY2V0cyByZXRyaWV2ZWQgZnJvbQorICAgICAgICogIGlvLmdldGxvYygpLCBhbmQgd3JpdGVzIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVycyB0byBAYSBfX3MuCisgICAgICAgKiAgRm9yIGV4YW1wbGUsIHRoZSBzdHJpbmcgPGNvZGU+MTAwMTwvY29kZT4gaW4gYSBVUyBsb2NhbGUKKyAgICAgICAqICB3b3VsZCB3cml0ZSA8Y29kZT4kMTAuMDE8L2NvZGU+IHRvIEBhIF9fcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQgY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHZhbHVlCisgICAgICAgKiAgcmV0dXJuZWQuICBAc2VlIHB1dCgpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgVGhlIHN0cmVhbSB0byB3cml0ZSB0by4KKyAgICAgICAqICBAcGFyYW0gIF9faW50bCAgUGFyYW1ldGVyIHRvIHVzZV9mYWNldDxtb25leXB1bmN0PENoYXJULGludGw+ID4uCisgICAgICAgKiAgQHBhcmFtICBfX2lvICBTb3VyY2Ugb2YgZmFjZXRzIGFuZCBpbyBzdGF0ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlsbCAgY2hhcl90eXBlIHRvIHVzZSBmb3IgcGFkZGluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fZGlnaXRzICBQbGFjZSB0byBzdG9yZSByZXN1bHQgb2YgcGFyc2luZy4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBhZnRlciB3cml0aW5nLgorICAgICAgICovCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CisKKyAgICAgIC8vIFhYWCBHTElCQ1hYX0FCSSBEZXByZWNhdGVkCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQorICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPGJvb2wgX0ludGw+CisgICAgICAgIGl0ZXJfdHlwZQorICAgICAgICBfTV9pbnNlcnQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCisJCSAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0xEQkwKKworICAvKioKKyAgICogIEBicmllZiAgTWVzc2FnZXMgZmFjZXQgYmFzZSBjbGFzcyBwcm92aWRpbmcgY2F0YWxvZyB0eXBlZGVmLgorICAgKiAgQGluZ3JvdXAgbG9jYWxlcworICAgKi8KKyAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKKyAgeworICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CisgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgbWVzc2FnZXMuCisgICAqICBAaW5ncm91cCBsb2NhbGVzCisgICAqCisgICAqICBUaGlzIGZhY2V0IGVuY2Fwc3VsYXRlcyB0aGUgY29kZSB0byByZXRyaWV2ZSBtZXNzYWdlcyBmcm9tCisgICAqICBtZXNzYWdlIGNhdGFsb2dzLiAgVGhlIG9ubHkgdGhpbmcgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQgZm9yIHRoaXMgZmFjZXQKKyAgICogIGlzIHRoZSBpbnRlcmZhY2UuICBBbGwgdW5kZXJseWluZyBmdW5jdGlvbmFsaXR5IGlzCisgICAqICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAgKgorICAgKiAgVGhpcyBsaWJyYXJ5IGN1cnJlbnRseSBpbXBsZW1lbnRzIDMgdmVyc2lvbnMgb2YgdGhlIG1lc3NhZ2UgZmFjZXQuICBUaGUKKyAgICogIGZpcnN0IHZlcnNpb24gKGdudSkgaXMgYSB3cmFwcGVyIGFyb3VuZCBnZXR0ZXh0LCBwcm92aWRlZCBieSBsaWJpbnRsLgorICAgKiAgVGhlIHNlY29uZCB2ZXJzaW9uIChpZWVlKSBpcyBhIHdyYXBwZXIgYXJvdW5kIGNhdGdldHMuICBUaGUgZmluYWwKKyAgICogIHZlcnNpb24gKGRlZmF1bHQpIGRvZXMgbm8gYWN0dWFsIHRyYW5zbGF0aW9uLiAgVGhlc2UgaW1wbGVtZW50YXRpb25zIGFyZQorICAgKiAgb25seSBwcm92aWRlZCBmb3IgY2hhciBhbmQgd2NoYXJfdCBpbnN0YW50aWF0aW9ucy4KKyAgICoKKyAgICogIFRoZSBtZXNzYWdlcyB0ZW1wbGF0ZSB1c2VzIHByb3RlY3RlZCB2aXJ0dWFsIGZ1bmN0aW9ucyB0bworICAgKiAgcHJvdmlkZSB0aGUgYWN0dWFsIHJlc3VsdHMuICBUaGUgcHVibGljIGFjY2Vzc29ycyBmb3J3YXJkIHRoZQorICAgKiAgY2FsbCB0byB0aGUgdmlydHVhbCBmdW5jdGlvbnMuICBUaGVzZSB2aXJ0dWFsIGZ1bmN0aW9ucyBhcmUKKyAgICogIGhvb2tzIGZvciBkZXZlbG9wZXJzIHRvIGltcGxlbWVudCB0aGUgYmVoYXZpb3IgdGhleSByZXF1aXJlIGZyb20KKyAgICogIHRoZSBtZXNzYWdlcyBmYWNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcworICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+CXN0cmluZ190eXBlOworICAgICAgLy9AfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gVW5kZXJseWluZyAiQyIgbGlicmFyeSBsb2NhbGUgaW5mb3JtYXRpb24gc2F2ZWQgZnJvbQorICAgICAgLy8gaW5pdGlhbGl6YXRpb24sIG5lZWRlZCBieSBtZXNzYWdlc19ieW5hbWUgYXMgd2VsbC4KKyAgICAgIF9fY19sb2NhbGUJCQlfTV9jX2xvY2FsZV9tZXNzYWdlczsKKyAgICAgIGNvbnN0IGNoYXIqCQkJX01fbmFtZV9tZXNzYWdlczsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBOdW1wdW5jdCBmYWNldCBpZC4KKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkCQkJaWQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0b3IgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtIF9fcmVmcyAgUGFzc2VkIHRvIHRoZSBiYXNlIGZhY2V0IGNsYXNzLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZzID0gMCk7CisKKyAgICAgIC8vIE5vbi1zdGFuZGFyZC4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW50ZXJuYWwgY29uc3RydWN0b3IuICBOb3QgZm9yIGdlbmVyYWwgdXNlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgY29uc3RydWN0b3IgZm9yIHVzZSBieSB0aGUgbGlicmFyeSBpdHNlbGYgdG8gc2V0IHVwIG5ldworICAgICAgICogIGxvY2FsZXMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19jbG9jICBUaGUgQyBsb2NhbGUuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBuYW1lIG9mIGEgbG9jYWxlLgorICAgICAgICogIEBwYXJhbSAgX19yZWZzICBSZWZjb3VudCB0byBwYXNzIHRvIHRoZSBiYXNlIGNsYXNzLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgICAvKgorICAgICAgICogIEBicmllZiAgT3BlbiBhIG1lc3NhZ2UgY2F0YWxvZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBvcGVucyBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBhIG1lc3NhZ2UgY2F0YWxvZyBieQorICAgICAgICogIHJldHVybmluZyBkb19vcGVuKF9fcywgX19sb2MpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgVGhlIGNhdGFsb2cgdG8gb3Blbi4KKyAgICAgICAqICBAcGFyYW0gIF9fbG9jICBMb2NhbGUgdG8gdXNlIGZvciBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb25zLgorICAgICAgICogIEByZXR1cm4gIEhhbmRsZSB0byB0aGUgY2F0YWxvZyBvciB2YWx1ZSA8IDAgaWYgb3BlbiBmYWlscy4KKyAgICAgICovCisgICAgICBjYXRhbG9nCisgICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQorCisgICAgICAvLyBOb24tc3RhbmRhcmQgYW5kIHVub3J0aG9kb3gsIHlldCBlZmZlY3RpdmUuCisgICAgICAvKgorICAgICAgICogIEBicmllZiAgT3BlbiBhIG1lc3NhZ2UgY2F0YWxvZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBub24tc3RhbmRhcmQgZnVuY3Rpb24gb3BlbnMgYW5kIHJldHVybnMgYSBoYW5kbGUgdG8gYSBtZXNzYWdlCisgICAgICAgKiAgY2F0YWxvZyBieSByZXR1cm5pbmcgZG9fb3BlbihzLCBsb2MpLiAgVGhlIHRoaXJkIGFyZ3VtZW50IHByb3ZpZGVzIGEKKyAgICAgICAqICBtZXNzYWdlIGNhdGFsb2cgcm9vdCBkaXJlY3RvcnkgZm9yIGdudSBnZXR0ZXh0IGFuZCBpcyBpZ25vcmVkCisgICAgICAgKiAgb3RoZXJ3aXNlLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcyAgVGhlIGNhdGFsb2cgdG8gb3Blbi4KKyAgICAgICAqICBAcGFyYW0gIF9fbG9jICBMb2NhbGUgdG8gdXNlIGZvciBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb25zLgorICAgICAgICogIEBwYXJhbSAgX19kaXIgIE1lc3NhZ2UgY2F0YWxvZyByb290IGRpcmVjdG9yeS4KKyAgICAgICAqICBAcmV0dXJuICBIYW5kbGUgdG8gdGhlIGNhdGFsb2cgb3IgdmFsdWUgPCAwIGlmIG9wZW4gZmFpbHMuCisgICAgICAqLworICAgICAgY2F0YWxvZworICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7CisKKyAgICAgIC8qCisgICAgICAgKiAgQGJyaWVmICBMb29rIHVwIGEgc3RyaW5nIGluIGEgbWVzc2FnZSBjYXRhbG9nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyBhbmQgcmV0dXJucyBhIG1lc3NhZ2UgZnJvbSBhIGNhdGFsb2cgYnkKKyAgICAgICAqICByZXR1cm5pbmcgZG9fZ2V0KGMsIHNldCwgbXNnaWQsIHMpLgorICAgICAgICoKKyAgICAgICAqICBGb3IgZ251LCBAYSBfX3NldCBhbmQgQGEgbXNnaWQgYXJlIGlnbm9yZWQuICBSZXR1cm5zIGdldHRleHQocykuCisgICAgICAgKiAgRm9yIGRlZmF1bHQsIHJldHVybnMgcy4gRm9yIGllZWUsIHJldHVybnMgY2F0Z2V0cyhjLHNldCxtc2dpZCxzKS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2MgIFRoZSBjYXRhbG9nIHRvIGFjY2Vzcy4KKyAgICAgICAqICBAcGFyYW0gIF9fc2V0ICBJbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAgICAgICogIEBwYXJhbSAgX19tc2dpZCAgSW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgRGVmYXVsdCByZXR1cm4gdmFsdWUgaWYgcmV0cmlldmFsIGZhaWxzLgorICAgICAgICogIEByZXR1cm4gIFJldHJpZXZlZCBtZXNzYWdlIG9yIEBhIF9fcyBpZiBnZXQgZmFpbHMuCisgICAgICAqLworICAgICAgc3RyaW5nX3R5cGUKKyAgICAgIGdldChjYXRhbG9nIF9fYywgaW50IF9fc2V0LCBpbnQgX19tc2dpZCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CisKKyAgICAgIC8qCisgICAgICAgKiAgQGJyaWVmICBDbG9zZSBhIG1lc3NhZ2UgY2F0YWxvZy4KKyAgICAgICAqCisgICAgICAgKiAgQ2xvc2VzIGNhdGFsb2cgQGEgYyBieSBjYWxsaW5nIGRvX2Nsb3NlKGMpLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fYyAgVGhlIGNhdGFsb2cgdG8gY2xvc2UuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5tZXNzYWdlcygpOworCisgICAgICAvKgorICAgICAgICogIEBicmllZiAgT3BlbiBhIG1lc3NhZ2UgY2F0YWxvZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBvcGVucyBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBhIG1lc3NhZ2UgY2F0YWxvZyBpbiBhbgorICAgICAgICogIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWFubmVyLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgY2F0YWxvZyB0byBvcGVuLgorICAgICAgICogIEBwYXJhbSAgX19sb2MgIExvY2FsZSB0byB1c2UgZm9yIGNoYXJhY3RlciBzZXQgY29udmVyc2lvbnMuCisgICAgICAgKiAgQHJldHVybiAgSGFuZGxlIHRvIHRoZSBvcGVuZWQgY2F0YWxvZywgdmFsdWUgPCAwIGlmIG9wZW4gZmFpbGVkLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgY2F0YWxvZworICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsKKworICAgICAgLyoKKyAgICAgICAqICBAYnJpZWYgIExvb2sgdXAgYSBzdHJpbmcgaW4gYSBtZXNzYWdlIGNhdGFsb2cuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIGFuZCByZXR1cm5zIGEgbWVzc2FnZSBmcm9tIGEgY2F0YWxvZyBpbiBhbgorICAgICAgICogIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWFubmVyLiAgVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgZm9yIGRlcml2ZWQKKyAgICAgICAqICBjbGFzc2VzIHRvIGNoYW5nZSB0aGUgdmFsdWUgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIEZvciBnbnUsIEBhIF9fc2V0IGFuZCBAYSBfX21zZ2lkIGFyZSBpZ25vcmVkLiAgUmV0dXJucyBnZXR0ZXh0KHMpLgorICAgICAgICogIEZvciBkZWZhdWx0LCByZXR1cm5zIHMuIEZvciBpZWVlLCByZXR1cm5zIGNhdGdldHMoYyxzZXQsbXNnaWQscykuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19jICBUaGUgY2F0YWxvZyB0byBhY2Nlc3MuCisgICAgICAgKiAgQHBhcmFtICBfX3NldCAgSW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAgICAgICAqICBAcGFyYW0gIF9fbXNnaWQgIEltcGxlbWVudGF0aW9uLWRlZmluZWQuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIERlZmF1bHQgcmV0dXJuIHZhbHVlIGlmIHJldHJpZXZhbCBmYWlscy4KKyAgICAgICAqICBAcmV0dXJuICBSZXRyaWV2ZWQgbWVzc2FnZSBvciBAYSBfX3MgaWYgZ2V0IGZhaWxzLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKKyAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdDsKKworICAgICAgLyoKKyAgICAgICAqICBAYnJpZWYgIENsb3NlIGEgbWVzc2FnZSBjYXRhbG9nLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fYyAgVGhlIGNhdGFsb2cgdG8gY2xvc2UuCisgICAgICAqLworICAgICAgdmlydHVhbCB2b2lkCisgICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdDsKKworICAgICAgLy8gUmV0dXJucyBhIGxvY2FsZSBhbmQgY29kZXNldC1jb252ZXJ0ZWQgc3RyaW5nLCBnaXZlbiBhIGNoYXIqIG1lc3NhZ2UuCisgICAgICBjaGFyKgorICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKKyAgICAgIHsKKwkvLyBYWFgKKwlyZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CisgICAgICB9CisKKyAgICAgIC8vIFJldHVybnMgYSBsb2NhbGUgYW5kIGNvZGVzZXQtY29udmVydGVkIHN0cmluZywgZ2l2ZW4gYSBjaGFyKiBtZXNzYWdlLgorICAgICAgc3RyaW5nX3R5cGUKKyAgICAgIF9NX2NvbnZlcnRfZnJvbV9jaGFyKGNoYXIqKSBjb25zdAorICAgICAgeworCS8vIFhYWAorCXJldHVybiBzdHJpbmdfdHlwZSgpOworICAgICAgfQorICAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46OmlkOworCisgIC8vLyBTcGVjaWFsaXphdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLgorICB0ZW1wbGF0ZTw+CisgICAgc3RyaW5nCisgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikgY29uc3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgd3N0cmluZworICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHdzdHJpbmcmKSBjb25zdDsKKyNlbmRpZgorCisgICAvLy8gY2xhc3MgbWVzc2FnZXNfYnluYW1lIFsyMi4yLjcuMl0uCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lIDogcHVibGljIG1lc3NhZ2VzPF9DaGFyVD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ2hhclQJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+CXN0cmluZ190eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgbWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbAorICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpCisgICAgICB7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKy8vIEluY2x1ZGUgaG9zdCBhbmQgY29uZmlndXJhdGlvbiBzcGVjaWZpYyBtZXNzYWdlcyBmdW5jdGlvbnMuCisjaW5jbHVkZSA8Yml0cy9tZXNzYWdlc19tZW1iZXJzLmg+CisKKy8vIDIyLjIuMS41ICBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisjaW5jbHVkZSA8Yml0cy9jb2RlY3Z0Lmg+CisKKyNpbmNsdWRlIDxiaXRzL2xvY2FsZV9mYWNldHNfbm9uaW8udGNjPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9sb2NhbGVfZmFjZXRzX25vbmlvLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9sb2NhbGVfZmFjZXRzX25vbmlvLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJkODNlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xvY2FsZV9mYWNldHNfbm9uaW8udGNjCkBAIC0wLDAgKzEsMTM3MyBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvbG9jYWxlX2ZhY2V0c19ub25pby50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtsb2NhbGV9CisgKi8KKworI2lmbmRlZiBfTE9DQUxFX0ZBQ0VUU19OT05JT19UQ0MKKyNkZWZpbmUgX0xPQ0FMRV9GQUNFVFNfTk9OSU9fVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgorICAgIHN0cnVjdCBfX3VzZV9jYWNoZTxfX21vbmV5cHVuY3RfY2FjaGU8X0NoYXJULCBfSW50bD4gPgorICAgIHsKKyAgICAgIGNvbnN0IF9fbW9uZXlwdW5jdF9jYWNoZTxfQ2hhclQsIF9JbnRsPioKKyAgICAgIG9wZXJhdG9yKCkgKGNvbnN0IGxvY2FsZSYgX19sb2MpIGNvbnN0CisgICAgICB7CisJY29uc3Qgc2l6ZV90IF9faSA9IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkLl9NX2lkKCk7CisJY29uc3QgbG9jYWxlOjpmYWNldCoqIF9fY2FjaGVzID0gX19sb2MuX01faW1wbC0+X01fY2FjaGVzOworCWlmICghX19jYWNoZXNbX19pXSkKKwkgIHsKKwkgICAgX19tb25leXB1bmN0X2NhY2hlPF9DaGFyVCwgX0ludGw+KiBfX3RtcCA9IDA7CisJICAgIF9fdHJ5CisJICAgICAgeworCQlfX3RtcCA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8X0NoYXJULCBfSW50bD47CisJCV9fdG1wLT5fTV9jYWNoZShfX2xvYyk7CisJICAgICAgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7CisJCWRlbGV0ZSBfX3RtcDsKKwkJX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgICAgfQorCSAgICBfX2xvYy5fTV9pbXBsLT5fTV9pbnN0YWxsX2NhY2hlKF9fdG1wLCBfX2kpOworCSAgfQorCXJldHVybiBzdGF0aWNfY2FzdDwKKwkgIGNvbnN0IF9fbW9uZXlwdW5jdF9jYWNoZTxfQ2hhclQsIF9JbnRsPio+KF9fY2FjaGVzW19faV0pOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgorICAgIHZvaWQKKyAgICBfX21vbmV5cHVuY3RfY2FjaGU8X0NoYXJULCBfSW50bD46Ol9NX2NhY2hlKGNvbnN0IGxvY2FsZSYgX19sb2MpCisgICAgeworICAgICAgX01fYWxsb2NhdGVkID0gdHJ1ZTsKKworICAgICAgY29uc3QgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPiYgX19tcCA9CisJdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4gPihfX2xvYyk7CisKKyAgICAgIF9NX2RlY2ltYWxfcG9pbnQgPSBfX21wLmRlY2ltYWxfcG9pbnQoKTsKKyAgICAgIF9NX3Rob3VzYW5kc19zZXAgPSBfX21wLnRob3VzYW5kc19zZXAoKTsKKyAgICAgIF9NX2ZyYWNfZGlnaXRzID0gX19tcC5mcmFjX2RpZ2l0cygpOworCisgICAgICBjaGFyKiBfX2dyb3VwaW5nID0gMDsKKyAgICAgIF9DaGFyVCogX19jdXJyX3N5bWJvbCA9IDA7CisgICAgICBfQ2hhclQqIF9fcG9zaXRpdmVfc2lnbiA9IDA7CisgICAgICBfQ2hhclQqIF9fbmVnYXRpdmVfc2lnbiA9IDA7ICAgICAKKyAgICAgIF9fdHJ5CisJeworCSAgX01fZ3JvdXBpbmdfc2l6ZSA9IF9fbXAuZ3JvdXBpbmcoKS5zaXplKCk7CisJICBfX2dyb3VwaW5nID0gbmV3IGNoYXJbX01fZ3JvdXBpbmdfc2l6ZV07CisJICBfX21wLmdyb3VwaW5nKCkuY29weShfX2dyb3VwaW5nLCBfTV9ncm91cGluZ19zaXplKTsKKwkgIF9NX2dyb3VwaW5nID0gX19ncm91cGluZzsKKwkgIF9NX3VzZV9ncm91cGluZyA9IChfTV9ncm91cGluZ19zaXplCisJCQkgICAgICYmIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPihfTV9ncm91cGluZ1swXSkgPiAwCisJCQkgICAgICYmIChfTV9ncm91cGluZ1swXQorCQkJCSAhPSBfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8Y2hhcj46Ol9fbWF4KSk7CisKKwkgIF9NX2N1cnJfc3ltYm9sX3NpemUgPSBfX21wLmN1cnJfc3ltYm9sKCkuc2l6ZSgpOworCSAgX19jdXJyX3N5bWJvbCA9IG5ldyBfQ2hhclRbX01fY3Vycl9zeW1ib2xfc2l6ZV07CisJICBfX21wLmN1cnJfc3ltYm9sKCkuY29weShfX2N1cnJfc3ltYm9sLCBfTV9jdXJyX3N5bWJvbF9zaXplKTsKKwkgIF9NX2N1cnJfc3ltYm9sID0gX19jdXJyX3N5bWJvbDsKKworCSAgX01fcG9zaXRpdmVfc2lnbl9zaXplID0gX19tcC5wb3NpdGl2ZV9zaWduKCkuc2l6ZSgpOworCSAgX19wb3NpdGl2ZV9zaWduID0gbmV3IF9DaGFyVFtfTV9wb3NpdGl2ZV9zaWduX3NpemVdOworCSAgX19tcC5wb3NpdGl2ZV9zaWduKCkuY29weShfX3Bvc2l0aXZlX3NpZ24sIF9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSk7CisJICBfTV9wb3NpdGl2ZV9zaWduID0gX19wb3NpdGl2ZV9zaWduOworCisJICBfTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBfX21wLm5lZ2F0aXZlX3NpZ24oKS5zaXplKCk7CisJICBfX25lZ2F0aXZlX3NpZ24gPSBuZXcgX0NoYXJUW19NX25lZ2F0aXZlX3NpZ25fc2l6ZV07CisJICBfX21wLm5lZ2F0aXZlX3NpZ24oKS5jb3B5KF9fbmVnYXRpdmVfc2lnbiwgX01fbmVnYXRpdmVfc2lnbl9zaXplKTsKKwkgIF9NX25lZ2F0aXZlX3NpZ24gPSBfX25lZ2F0aXZlX3NpZ247CisKKwkgIF9NX3Bvc19mb3JtYXQgPSBfX21wLnBvc19mb3JtYXQoKTsKKwkgIF9NX25lZ19mb3JtYXQgPSBfX21wLm5lZ19mb3JtYXQoKTsKKworCSAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCSAgX19jdC53aWRlbihtb25leV9iYXNlOjpfU19hdG9tcywKKwkJICAgICBtb25leV9iYXNlOjpfU19hdG9tcyArIG1vbmV5X2Jhc2U6Ol9TX2VuZCwgX01fYXRvbXMpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIGRlbGV0ZSBbXSBfX2dyb3VwaW5nOworCSAgZGVsZXRlIFtdIF9fY3Vycl9zeW1ib2w7CisJICBkZWxldGUgW10gX19wb3NpdGl2ZV9zaWduOworCSAgZGVsZXRlIFtdIF9fbmVnYXRpdmVfc2lnbjsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9MREJMCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIHRlbXBsYXRlPGJvb2wgX0ludGw+CisgICAgICBfSW5JdGVyCisgICAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgICBfTV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3VuaXRzKSBjb25zdAorICAgICAgeworCXR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPgkJCSAgX190cmFpdHNfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUJICAgICAgICAgIHNpemVfdHlwZTsJCisJdHlwZWRlZiBtb25leV9iYXNlOjpwYXJ0CQkJICBwYXJ0OworCXR5cGVkZWYgX19tb25leXB1bmN0X2NhY2hlPF9DaGFyVCwgX0ludGw+ICAgICAgICAgX19jYWNoZV90eXBlOworCQorCWNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCWNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKworCV9fdXNlX2NhY2hlPF9fY2FjaGVfdHlwZT4gX191YzsKKwljb25zdCBfX2NhY2hlX3R5cGUqIF9fbGMgPSBfX3VjKF9fbG9jKTsKKwljb25zdCBjaGFyX3R5cGUqIF9fbGl0ID0gX19sYy0+X01fYXRvbXM7CisKKwkvLyBEZWR1Y2VkIHNpZ24uCisJYm9vbCBfX25lZ2F0aXZlID0gZmFsc2U7CisJLy8gU2lnbiBzaXplLgorCXNpemVfdHlwZSBfX3NpZ25fc2l6ZSA9IDA7CisJLy8gVHJ1ZSBpZiBzaWduIGlzIG1hbmRhdG9yeS4KKwljb25zdCBib29sIF9fbWFuZGF0b3J5X3NpZ24gPSAoX19sYy0+X01fcG9zaXRpdmVfc2lnbl9zaXplCisJCQkJICAgICAgICYmIF9fbGMtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSk7CisJLy8gU3RyaW5nIG9mIGdyb3VwaW5nIGluZm8gZnJvbSB0aG91c2FuZHNfc2VwIHBsdWNrZWQgZnJvbSBfX3VuaXRzLgorCXN0cmluZyBfX2dyb3VwaW5nX3RtcDsKKwlpZiAoX19sYy0+X01fdXNlX2dyb3VwaW5nKQorCSAgX19ncm91cGluZ190bXAucmVzZXJ2ZSgzMik7CisJLy8gTGFzdCBwb3NpdGlvbiBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQuCisJaW50IF9fbGFzdF9wb3MgPSAwOworCS8vIFNlcGFyYXRvciBwb3NpdGlvbnMsIHRoZW4sIHBvc3NpYmx5LCBmcmFjdGlvbmFsIGRpZ2l0cy4KKwlpbnQgX19uID0gMDsKKwkvLyBJZiBpbnB1dCBpdGVyYXRvciBpcyBpbiBhIHZhbGlkIHN0YXRlLgorCWJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOworCS8vIEZsYWcgbWFya2luZyB3aGVuIGEgZGVjaW1hbCBwb2ludCBpcyBmb3VuZC4KKwlib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFsc2U7CisKKwkvLyBUaGUgdGVudGF0aXZlIHJldHVybmVkIHN0cmluZyBpcyBzdG9yZWQgaGVyZS4KKwlzdHJpbmcgX19yZXM7CisJX19yZXMucmVzZXJ2ZSgzMik7CisKKwljb25zdCBjaGFyX3R5cGUqIF9fbGl0X3plcm8gPSBfX2xpdCArIG1vbmV5X2Jhc2U6Ol9TX3plcm87CisJY29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3AgPSBfX2xjLT5fTV9uZWdfZm9ybWF0OworCWZvciAoaW50IF9faSA9IDA7IF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQorCSAgeworCSAgICBjb25zdCBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbX19pXSk7CisJICAgIHN3aXRjaCAoX193aGljaCkKKwkgICAgICB7CisJICAgICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CisJCS8vIEFjY29yZGluZyB0byAyMi4yLjYuMS4yLCBwMiwgc3ltYm9sIGlzIHJlcXVpcmVkCisJCS8vIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpLCBvdGhlcndpc2UKKwkJLy8gaXMgb3B0aW9uYWwgYW5kIGNvbnN1bWVkIG9ubHkgaWYgb3RoZXIgY2hhcmFjdGVycworCQkvLyBhcmUgbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBmb3JtYXQuCisJCWlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UgfHwgX19zaWduX3NpemUgPiAxCisJCSAgICB8fCBfX2kgPT0gMAorCQkgICAgfHwgKF9faSA9PSAxICYmIChfX21hbmRhdG9yeV9zaWduCisJCQkJICAgICB8fCAoc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkWzBdKQorCQkJCQkgPT0gbW9uZXlfYmFzZTo6c2lnbikKKwkJCQkgICAgIHx8IChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbMl0pCisJCQkJCSA9PSBtb25leV9iYXNlOjpzcGFjZSkpKQorCQkgICAgfHwgKF9faSA9PSAyICYmICgoc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkWzNdKQorCQkJCSAgICAgID09IG1vbmV5X2Jhc2U6OnZhbHVlKQorCQkJCSAgICAgfHwgKF9fbWFuZGF0b3J5X3NpZ24KKwkJCQkJICYmIChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pCisJCQkJCSAgICAgPT0gbW9uZXlfYmFzZTo6c2lnbikpKSkpCisJCSAgeworCQkgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19sYy0+X01fY3Vycl9zeW1ib2xfc2l6ZTsKKwkJICAgIHNpemVfdHlwZSBfX2ogPSAwOworCQkgICAgZm9yICg7IF9fYmVnICE9IF9fZW5kICYmIF9faiA8IF9fbGVuCisJCQkgICAmJiAqX19iZWcgPT0gX19sYy0+X01fY3Vycl9zeW1ib2xbX19qXTsKKwkJCSArK19fYmVnLCArK19faik7CisJCSAgICBpZiAoX19qICE9IF9fbGVuCisJCQkmJiAoX19qIHx8IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkpCisJCSAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CisJCSAgfQorCQlicmVhazsKKwkgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNpZ246CisJCS8vIFNpZ24gbWlnaHQgbm90IGV4aXN0LCBvciBiZSBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciBsb25nLgorCQlpZiAoX19sYy0+X01fcG9zaXRpdmVfc2lnbl9zaXplICYmIF9fYmVnICE9IF9fZW5kCisJCSAgICAmJiAqX19iZWcgPT0gX19sYy0+X01fcG9zaXRpdmVfc2lnblswXSkKKwkJICB7CisJCSAgICBfX3NpZ25fc2l6ZSA9IF9fbGMtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZTsKKwkJICAgICsrX19iZWc7CisJCSAgfQorCQllbHNlIGlmIChfX2xjLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgJiYgX19iZWcgIT0gX19lbmQKKwkJCSAmJiAqX19iZWcgPT0gX19sYy0+X01fbmVnYXRpdmVfc2lnblswXSkKKwkJICB7CisJCSAgICBfX25lZ2F0aXZlID0gdHJ1ZTsKKwkJICAgIF9fc2lnbl9zaXplID0gX19sYy0+X01fbmVnYXRpdmVfc2lnbl9zaXplOworCQkgICAgKytfX2JlZzsKKwkJICB9CisJCWVsc2UgaWYgKF9fbGMtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZQorCQkJICYmICFfX2xjLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUpCisJCSAgLy8gIi4uLiBpZiBubyBzaWduIGlzIGRldGVjdGVkLCB0aGUgcmVzdWx0IGlzIGdpdmVuIHRoZSBzaWduCisJCSAgLy8gdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc291cmNlIG9mIHRoZSBlbXB0eSBzdHJpbmciCisJCSAgX19uZWdhdGl2ZSA9IHRydWU7CisJCWVsc2UgaWYgKF9fbWFuZGF0b3J5X3NpZ24pCisJCSAgX190ZXN0dmFsaWQgPSBmYWxzZTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBtb25leV9iYXNlOjp2YWx1ZToKKwkJLy8gRXh0cmFjdCBkaWdpdHMsIHJlbW92ZSBhbmQgc3Rhc2ggYXdheSB0aGUKKwkJLy8gZ3JvdXBpbmcgb2YgZm91bmQgdGhvdXNhbmRzIHNlcGFyYXRvcnMuCisJCWZvciAoOyBfX2JlZyAhPSBfX2VuZDsgKytfX2JlZykKKwkJICB7CisJCSAgICBjb25zdCBjaGFyX3R5cGUgX19jID0gKl9fYmVnOworCQkgICAgY29uc3QgY2hhcl90eXBlKiBfX3EgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fbGl0X3plcm8sIAorCQkJCQkJCSAgICAgICAxMCwgX19jKTsKKwkJICAgIGlmIChfX3EgIT0gMCkKKwkJICAgICAgeworCQkJX19yZXMgKz0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19xIC0gX19saXRdOworCQkJKytfX247CisJCSAgICAgIH0KKwkJICAgIGVsc2UgaWYgKF9fYyA9PSBfX2xjLT5fTV9kZWNpbWFsX3BvaW50IAorCQkJICAgICAmJiAhX190ZXN0ZGVjZm91bmQpCisJCSAgICAgIHsKKwkJCWlmIChfX2xjLT5fTV9mcmFjX2RpZ2l0cyA8PSAwKQorCQkJICBicmVhazsKKworCQkJX19sYXN0X3BvcyA9IF9fbjsKKwkJCV9fbiA9IDA7CisJCQlfX3Rlc3RkZWNmb3VuZCA9IHRydWU7CisJCSAgICAgIH0KKwkJICAgIGVsc2UgaWYgKF9fbGMtPl9NX3VzZV9ncm91cGluZworCQkJICAgICAmJiBfX2MgPT0gX19sYy0+X01fdGhvdXNhbmRzX3NlcAorCQkJICAgICAmJiAhX190ZXN0ZGVjZm91bmQpCisJCSAgICAgIHsKKwkJCWlmIChfX24pCisJCQkgIHsKKwkJCSAgICAvLyBNYXJrIHBvc2l0aW9uIGZvciBsYXRlciBhbmFseXNpcy4KKwkJCSAgICBfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxjaGFyPihfX24pOworCQkJICAgIF9fbiA9IDA7CisJCQkgIH0KKwkJCWVsc2UKKwkJCSAgeworCQkJICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CisJCQkgICAgYnJlYWs7CisJCQkgIH0KKwkJICAgICAgfQorCQkgICAgZWxzZQorCQkgICAgICBicmVhazsKKwkJICB9CisJCWlmIChfX3Jlcy5lbXB0eSgpKQorCQkgIF9fdGVzdHZhbGlkID0gZmFsc2U7CisJCWJyZWFrOworCSAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CisJCS8vIEF0IGxlYXN0IG9uZSBzcGFjZSBpcyByZXF1aXJlZC4KKwkJaWYgKF9fYmVnICE9IF9fZW5kICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsICpfX2JlZykpCisJCSAgKytfX2JlZzsKKwkJZWxzZQorCQkgIF9fdGVzdHZhbGlkID0gZmFsc2U7CisJICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgorCQkvLyBPbmx5IGlmIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLgorCQlpZiAoX19pICE9IDMpCisJCSAgZm9yICg7IF9fYmVnICE9IF9fZW5kCisJCQkgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgKl9fYmVnKTsgKytfX2JlZyk7CisJCWJyZWFrOworCSAgICAgIH0KKwkgIH0KKworCS8vIE5lZWQgdG8gZ2V0IHRoZSByZXN0IG9mIHRoZSBzaWduIGNoYXJhY3RlcnMsIGlmIHRoZXkgZXhpc3QuCisJaWYgKF9fc2lnbl9zaXplID4gMSAmJiBfX3Rlc3R2YWxpZCkKKwkgIHsKKwkgICAgY29uc3QgY2hhcl90eXBlKiBfX3NpZ24gPSBfX25lZ2F0aXZlID8gX19sYy0+X01fbmVnYXRpdmVfc2lnbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX2xjLT5fTV9wb3NpdGl2ZV9zaWduOworCSAgICBzaXplX3R5cGUgX19pID0gMTsKKwkgICAgZm9yICg7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IF9fc2lnbl9zaXplCisJCSAgICYmICpfX2JlZyA9PSBfX3NpZ25bX19pXTsgKytfX2JlZywgKytfX2kpOworCSAgICAKKwkgICAgaWYgKF9faSAhPSBfX3NpZ25fc2l6ZSkKKwkgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOworCSAgfQorCisJaWYgKF9fdGVzdHZhbGlkKQorCSAgeworCSAgICAvLyBTdHJpcCBsZWFkaW5nIHplcm9zLgorCSAgICBpZiAoX19yZXMuc2l6ZSgpID4gMSkKKwkgICAgICB7CisJCWNvbnN0IHNpemVfdHlwZSBfX2ZpcnN0ID0gX19yZXMuZmluZF9maXJzdF9ub3Rfb2YoJzAnKTsKKwkJY29uc3QgYm9vbCBfX29ubHlfemVyb3MgPSBfX2ZpcnN0ID09IHN0cmluZzo6bnBvczsKKwkJaWYgKF9fZmlyc3QpCisJCSAgX19yZXMuZXJhc2UoMCwgX19vbmx5X3plcm9zID8gX19yZXMuc2l6ZSgpIC0gMSA6IF9fZmlyc3QpOworCSAgICAgIH0KKworCSAgICAvLyAyMi4yLjYuMS4yLCBwNAorCSAgICBpZiAoX19uZWdhdGl2ZSAmJiBfX3Jlc1swXSAhPSAnMCcpCisJICAgICAgX19yZXMuaW5zZXJ0KF9fcmVzLmJlZ2luKCksICctJyk7CisJICAgIAorCSAgICAvLyBUZXN0IGZvciBncm91cGluZyBmaWRlbGl0eS4KKwkgICAgaWYgKF9fZ3JvdXBpbmdfdG1wLnNpemUoKSkKKwkgICAgICB7CisJCS8vIEFkZCB0aGUgZW5kaW5nIGdyb3VwaW5nLgorCQlfX2dyb3VwaW5nX3RtcCArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3Rlc3RkZWNmb3VuZCA/IF9fbGFzdF9wb3MKKwkJCQkJCSAgICAgICAgICAgICAgICAgICA6IF9fbik7CisJCWlmICghc3RkOjpfX3ZlcmlmeV9ncm91cGluZyhfX2xjLT5fTV9ncm91cGluZywKKwkJCQkJICAgIF9fbGMtPl9NX2dyb3VwaW5nX3NpemUsCisJCQkJCSAgICBfX2dyb3VwaW5nX3RtcCkpCisJCSAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgICAgfQorCSAgICAKKwkgICAgLy8gSWZmIG5vdCBlbm91Z2ggZGlnaXRzIHdlcmUgc3VwcGxpZWQgYWZ0ZXIgdGhlIGRlY2ltYWwtcG9pbnQuCisJICAgIGlmIChfX3Rlc3RkZWNmb3VuZCAmJiBfX24gIT0gX19sYy0+X01fZnJhY19kaWdpdHMpCisJICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKKwkgIH0KKworCS8vIElmZiB2YWxpZCBzZXF1ZW5jZSBpcyBub3QgcmVjb2duaXplZC4KKwlpZiAoIV9fdGVzdHZhbGlkKQorCSAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJZWxzZQorCSAgX191bml0cy5zd2FwKF9fcmVzKTsKKwkKKwkvLyBJZmYgbm8gbW9yZSBjaGFyYWN0ZXJzIGFyZSBhdmFpbGFibGUuCisJaWYgKF9fYmVnID09IF9fZW5kKQorCSAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwlyZXR1cm4gX19iZWc7CisgICAgICB9CisKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVCAmJiBkZWZpbmVkIF9fTE9OR19ET1VCTEVfMTI4X18KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgX19kb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKKwkgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3VuaXRzKSBjb25zdAorICAgIHsKKyAgICAgIHN0cmluZyBfX3N0cjsKKyAgICAgIF9fYmVnID0gX19pbnRsID8gX01fZXh0cmFjdDx0cnVlPihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3N0cikKKyAgICAgICAgICAgICAgICAgICAgIDogX01fZXh0cmFjdDxmYWxzZT4oX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX19zdHIpOworICAgICAgc3RkOjpfX2NvbnZlcnRfdG9fdihfX3N0ci5jX3N0cigpLCBfX3VuaXRzLCBfX2VyciwgX1NfZ2V0X2NfbG9jYWxlKCkpOworICAgICAgcmV0dXJuIF9fYmVnOworICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAorCSAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CisgICAgeworICAgICAgc3RyaW5nIF9fc3RyOworICAgICAgX19iZWcgPSBfX2ludGwgPyBfTV9leHRyYWN0PHRydWU+KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fc3RyKQorCSAgICAgICAgICAgICA6IF9NX2V4dHJhY3Q8ZmFsc2U+KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fc3RyKTsKKyAgICAgIHN0ZDo6X19jb252ZXJ0X3RvX3YoX19zdHIuY19zdHIoKSwgX191bml0cywgX19lcnIsIF9TX2dldF9jX2xvY2FsZSgpKTsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCisJICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmc6OnNpemVfdHlwZSAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisKKyAgICAgIHN0cmluZyBfX3N0cjsKKyAgICAgIF9fYmVnID0gX19pbnRsID8gX01fZXh0cmFjdDx0cnVlPihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3N0cikKKwkgICAgICAgICAgICAgOiBfTV9leHRyYWN0PGZhbHNlPihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3N0cik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX3N0ci5zaXplKCk7CisgICAgICBpZiAoX19sZW4pCisJeworCSAgX19kaWdpdHMucmVzaXplKF9fbGVuKTsKKwkgIF9fY3R5cGUud2lkZW4oX19zdHIuZGF0YSgpLCBfX3N0ci5kYXRhKCkgKyBfX2xlbiwgJl9fZGlnaXRzWzBdKTsKKwl9CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgdGVtcGxhdGU8Ym9vbCBfSW50bD4KKyAgICAgIF9PdXRJdGVyCisgICAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgICAgX01faW5zZXJ0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAorCQljb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlCSAgICAgICAgICBzaXplX3R5cGU7CisJdHlwZWRlZiBtb25leV9iYXNlOjpwYXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0OworCXR5cGVkZWYgX19tb25leXB1bmN0X2NhY2hlPF9DaGFyVCwgX0ludGw+ICAgICAgICAgX19jYWNoZV90eXBlOworICAgICAgCisJY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisJY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCisJX191c2VfY2FjaGU8X19jYWNoZV90eXBlPiBfX3VjOworCWNvbnN0IF9fY2FjaGVfdHlwZSogX19sYyA9IF9fdWMoX19sb2MpOworCWNvbnN0IGNoYXJfdHlwZSogX19saXQgPSBfX2xjLT5fTV9hdG9tczsKKworCS8vIERldGVybWluZSBpZiBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBmb3JtYXRzIGFyZSB0byBiZSB1c2VkLCBhbmQKKwkvLyBkaXNjYXJkIGxlYWRpbmcgbmVnYXRpdmVfc2lnbiBpZiBpdCBpcyBwcmVzZW50LgorCWNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX2RpZ2l0cy5kYXRhKCk7CisKKwltb25leV9iYXNlOjpwYXR0ZXJuIF9fcDsKKwljb25zdCBjaGFyX3R5cGUqIF9fc2lnbjsKKwlzaXplX3R5cGUgX19zaWduX3NpemU7CisJaWYgKCEoKl9fYmVnID09IF9fbGl0W21vbmV5X2Jhc2U6Ol9TX21pbnVzXSkpCisJICB7CisJICAgIF9fcCA9IF9fbGMtPl9NX3Bvc19mb3JtYXQ7CisJICAgIF9fc2lnbiA9IF9fbGMtPl9NX3Bvc2l0aXZlX3NpZ247CisJICAgIF9fc2lnbl9zaXplID0gX19sYy0+X01fcG9zaXRpdmVfc2lnbl9zaXplOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgX19wID0gX19sYy0+X01fbmVnX2Zvcm1hdDsKKwkgICAgX19zaWduID0gX19sYy0+X01fbmVnYXRpdmVfc2lnbjsKKwkgICAgX19zaWduX3NpemUgPSBfX2xjLT5fTV9uZWdhdGl2ZV9zaWduX3NpemU7CisJICAgIGlmIChfX2RpZ2l0cy5zaXplKCkpCisJICAgICAgKytfX2JlZzsKKwkgIH0KKyAgICAgICAKKwkvLyBMb29rIGZvciB2YWxpZCBudW1iZXJzIGluIHRoZSBjdHlwZSBmYWNldCB3aXRoaW4gaW5wdXQgZGlnaXRzLgorCXNpemVfdHlwZSBfX2xlbiA9IF9fY3R5cGUuc2Nhbl9ub3QoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYmVnLAorCQkJCQkgICBfX2JlZyArIF9fZGlnaXRzLnNpemUoKSkgLSBfX2JlZzsKKwlpZiAoX19sZW4pCisJICB7CisJICAgIC8vIEFzc3VtZSB2YWxpZCBpbnB1dCwgYW5kIGF0dGVtcHQgdG8gZm9ybWF0LgorCSAgICAvLyBCcmVhayBkb3duIGlucHV0IG51bWJlcnMgaW50byBiYXNlIGNvbXBvbmVudHMsIGFzIGZvbGxvd3M6CisJICAgIC8vICAgZmluYWxfdmFsdWUgPSBncm91cGVkIHVuaXRzICsgKGRlY2ltYWwgcG9pbnQpICsgKGRpZ2l0cykKKwkgICAgc3RyaW5nX3R5cGUgX192YWx1ZTsKKwkgICAgX192YWx1ZS5yZXNlcnZlKDIgKiBfX2xlbik7CisKKwkgICAgLy8gQWRkIHRob3VzYW5kcyBzZXBhcmF0b3JzIHRvIG5vbi1kZWNpbWFsIGRpZ2l0cywgcGVyCisJICAgIC8vIGdyb3VwaW5nIHJ1bGVzLgorCSAgICBsb25nIF9fcGFkZGVjID0gX19sZW4gLSBfX2xjLT5fTV9mcmFjX2RpZ2l0czsKKwkgICAgaWYgKF9fcGFkZGVjID4gMCkKKyAgCSAgICAgIHsKKwkJaWYgKF9fbGMtPl9NX2ZyYWNfZGlnaXRzIDwgMCkKKwkJICBfX3BhZGRlYyA9IF9fbGVuOworICAJCWlmIChfX2xjLT5fTV9ncm91cGluZ19zaXplKQorICAJCSAgeworCQkgICAgX192YWx1ZS5hc3NpZ24oMiAqIF9fcGFkZGVjLCBjaGFyX3R5cGUoKSk7CisgCQkgICAgX0NoYXJUKiBfX3ZlbmQgPSAKKwkJICAgICAgc3RkOjpfX2FkZF9ncm91cGluZygmX192YWx1ZVswXSwgX19sYy0+X01fdGhvdXNhbmRzX3NlcCwKKwkJCQkJICBfX2xjLT5fTV9ncm91cGluZywKKwkJCQkJICBfX2xjLT5fTV9ncm91cGluZ19zaXplLAorCQkJCQkgIF9fYmVnLCBfX2JlZyArIF9fcGFkZGVjKTsKKwkJICAgIF9fdmFsdWUuZXJhc2UoX192ZW5kIC0gJl9fdmFsdWVbMF0pOworICAJCSAgfQorICAJCWVsc2UKKwkJICBfX3ZhbHVlLmFzc2lnbihfX2JlZywgX19wYWRkZWMpOworCSAgICAgIH0KKworCSAgICAvLyBEZWFsIHdpdGggZGVjaW1hbCBwb2ludCwgZGVjaW1hbCBkaWdpdHMuCisJICAgIGlmIChfX2xjLT5fTV9mcmFjX2RpZ2l0cyA+IDApCisJICAgICAgeworCQlfX3ZhbHVlICs9IF9fbGMtPl9NX2RlY2ltYWxfcG9pbnQ7CisJCWlmIChfX3BhZGRlYyA+PSAwKQorCQkgIF9fdmFsdWUuYXBwZW5kKF9fYmVnICsgX19wYWRkZWMsIF9fbGMtPl9NX2ZyYWNfZGlnaXRzKTsKKwkJZWxzZQorCQkgIHsKKwkJICAgIC8vIEhhdmUgdG8gcGFkIHplcm9zIGluIHRoZSBkZWNpbWFsIHBvc2l0aW9uLgorCQkgICAgX192YWx1ZS5hcHBlbmQoLV9fcGFkZGVjLCBfX2xpdFttb25leV9iYXNlOjpfU196ZXJvXSk7CisJCSAgICBfX3ZhbHVlLmFwcGVuZChfX2JlZywgX19sZW4pOworCQkgIH0KKyAgCSAgICAgIH0KKyAgCisJICAgIC8vIENhbGN1bGF0ZSBsZW5ndGggb2YgcmVzdWx0aW5nIHN0cmluZy4KKwkgICAgY29uc3QgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOworCSAgICBfX2xlbiA9IF9fdmFsdWUuc2l6ZSgpICsgX19zaWduX3NpemU7CisJICAgIF9fbGVuICs9ICgoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQorCQkgICAgICA/IF9fbGMtPl9NX2N1cnJfc3ltYm9sX3NpemUgOiAwKTsKKworCSAgICBzdHJpbmdfdHlwZSBfX3JlczsKKwkgICAgX19yZXMucmVzZXJ2ZSgyICogX19sZW4pOworCSAgICAKKwkgICAgY29uc3Qgc2l6ZV90eXBlIF9fd2lkdGggPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW8ud2lkdGgoKSk7ICAKKwkgICAgY29uc3QgYm9vbCBfX3Rlc3RpcGFkID0gKF9fZiA9PSBpb3NfYmFzZTo6aW50ZXJuYWwKKwkJCQkgICAgICYmIF9fbGVuIDwgX193aWR0aCk7CisJICAgIC8vIEZpdCBmb3JtYXR0ZWQgZGlnaXRzIGludG8gdGhlIHJlcXVpcmVkIHBhdHRlcm4uCisJICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQorCSAgICAgIHsKKwkJY29uc3QgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOworCQlzd2l0Y2ggKF9fd2hpY2gpCisJCSAgeworCQkgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgorCQkgICAgaWYgKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKKwkJICAgICAgX19yZXMuYXBwZW5kKF9fbGMtPl9NX2N1cnJfc3ltYm9sLAorCQkJCSAgIF9fbGMtPl9NX2N1cnJfc3ltYm9sX3NpemUpOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBtb25leV9iYXNlOjpzaWduOgorCQkgICAgLy8gU2lnbiBtaWdodCBub3QgZXhpc3QsIG9yIGJlIG1vcmUgdGhhbiBvbmUKKwkJICAgIC8vIGNoYXJhY3RlciBsb25nLiBJbiB0aGF0IGNhc2UsIGFkZCBpbiB0aGUgcmVzdAorCQkgICAgLy8gYmVsb3cuCisJCSAgICBpZiAoX19zaWduX3NpemUpCisJCSAgICAgIF9fcmVzICs9IF9fc2lnblswXTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CisJCSAgICBfX3JlcyArPSBfX3ZhbHVlOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKKwkJICAgIC8vIEF0IGxlYXN0IG9uZSBzcGFjZSBpcyByZXF1aXJlZCwgYnV0IGlmIGludGVybmFsCisJCSAgICAvLyBmb3JtYXR0aW5nIGlzIHJlcXVpcmVkLCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCisJCSAgICAvLyBmaWxsIHNwYWNlcyB3aWxsIGJlIG5lY2Vzc2FyeS4KKwkJICAgIGlmIChfX3Rlc3RpcGFkKQorCQkgICAgICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOworCQkgICAgZWxzZQorCQkgICAgICBfX3JlcyArPSBfX2ZpbGw7CisJCSAgICBicmVhazsKKwkJICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6CisJCSAgICBpZiAoX190ZXN0aXBhZCkKKwkJICAgICAgX19yZXMuYXBwZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKKwkJICAgIGJyZWFrOworCQkgIH0KKwkgICAgICB9CisJICAgIAorCSAgICAvLyBTcGVjaWFsIGNhc2Ugb2YgbXVsdGktcGFydCBzaWduIHBhcnRzLgorCSAgICBpZiAoX19zaWduX3NpemUgPiAxKQorCSAgICAgIF9fcmVzLmFwcGVuZChfX3NpZ24gKyAxLCBfX3NpZ25fc2l6ZSAtIDEpOworCSAgICAKKwkgICAgLy8gUGFkLCBpZiBzdGlsbCBuZWNlc3NhcnkuCisJICAgIF9fbGVuID0gX19yZXMuc2l6ZSgpOworCSAgICBpZiAoX193aWR0aCA+IF9fbGVuKQorCSAgICAgIHsKKwkJaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKKwkJICAvLyBBZnRlci4KKwkJICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOworCQllbHNlCisJCSAgLy8gQmVmb3JlLgorCQkgIF9fcmVzLmluc2VydCgwLCBfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CisJCV9fbGVuID0gX193aWR0aDsKKwkgICAgICB9CisJICAgIAorCSAgICAvLyBXcml0ZSByZXN1bHRpbmcsIGZ1bGx5LWZvcm1hdHRlZCBzdHJpbmcgdG8gb3V0cHV0IGl0ZXJhdG9yLgorCSAgICBfX3MgPSBzdGQ6Ol9fd3JpdGUoX19zLCBfX3Jlcy5kYXRhKCksIF9fbGVuKTsKKwkgIH0KKwlfX2lvLndpZHRoKDApOworCXJldHVybiBfX3M7ICAgIAorICAgICAgfQorCisjaWYgZGVmaW5lZCBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQgJiYgZGVmaW5lZCBfX0xPTkdfRE9VQkxFXzEyOF9fCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CisgICAgX091dEl0ZXIKKyAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgIF9fZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICAgIGRvdWJsZSBfX3VuaXRzKSBjb25zdAorICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCAobG9uZyBkb3VibGUpIF9fdW5pdHMpOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgorICAgIF9PdXRJdGVyCisgICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAorCSAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKKyAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5CisgICAgICAvLyBGaXJzdCB0cnkgYSBidWZmZXIgcGVyaGFwcyBiaWcgZW5vdWdoLgorICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0OworICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzI4LiBCYWQgc3ByaW50ZiBmb3JtYXQgbW9kaWZpZXIgaW4gbW9uZXlfcHV0PD46OmRvX3B1dCgpCisgICAgICBpbnQgX19sZW4gPSBzdGQ6Ol9fY29udmVydF9mcm9tX3YoX1NfZ2V0X2NfbG9jYWxlKCksIF9fY3MsIF9fY3Nfc2l6ZSwKKwkJCQkJIiUuKkxmIiwgMCwgX191bml0cyk7CisgICAgICAvLyBJZiB0aGUgYnVmZmVyIHdhcyBub3QgbGFyZ2UgZW5vdWdoLCB0cnkgYWdhaW4gd2l0aCB0aGUgY29ycmVjdCBzaXplLgorICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKKwl7CisJICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CisJICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CisJICBfX2xlbiA9IHN0ZDo6X19jb252ZXJ0X2Zyb21fdihfU19nZXRfY19sb2NhbGUoKSwgX19jcywgX19jc19zaXplLAorCQkJCQkiJS4qTGYiLCAwLCBfX3VuaXRzKTsKKwl9CisjZWxzZQorICAgICAgLy8gbWF4X2V4cG9uZW50MTAgKyAxIGZvciB0aGUgaW50ZWdlciBwYXJ0LCArIDIgZm9yIHNpZ24gYW5kICdcMCcuCisgICAgICBjb25zdCBpbnQgX19jc19zaXplID0KKwlfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8bG9uZyBkb3VibGU+OjpfX21heF9leHBvbmVudDEwICsgMzsKKyAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKKyAgICAgIGludCBfX2xlbiA9IHN0ZDo6X19jb252ZXJ0X2Zyb21fdihfU19nZXRfY19sb2NhbGUoKSwgX19jcywgMCwgIiUuKkxmIiwgCisJCQkJCTAsIF9fdW5pdHMpOworI2VuZGlmCisgICAgICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX2xlbiwgY2hhcl90eXBlKCkpOworICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sICZfX2RpZ2l0c1swXSk7CisgICAgICByZXR1cm4gX19pbnRsID8gX01faW5zZXJ0PHRydWU+KF9fcywgX19pbywgX19maWxsLCBfX2RpZ2l0cykKKwkgICAgICAgICAgICA6IF9NX2luc2VydDxmYWxzZT4oX19zLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CisgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKKwkgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CisgICAgeyByZXR1cm4gX19pbnRsID8gX01faW5zZXJ0PHRydWU+KF9fcywgX19pbywgX19maWxsLCBfX2RpZ2l0cykKKwkgICAgICAgICAgICA6IF9NX2luc2VydDxmYWxzZT4oX19zLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0xEQkwKKworICAvLyBOQjogTm90IGVzcGVjaWFsbHkgdXNlZnVsLiBXaXRob3V0IGFuIGlvc19iYXNlIG9iamVjdCBvciBzb21lCisgIC8vIGtpbmQgb2YgbG9jYWxlIHJlZmVyZW5jZSwgd2UgYXJlIGxlZnQgY2xhd2luZyBhdCB0aGUgYWlyIHdoZXJlCisgIC8vIHRoZSBzaWRlIG9mIHRoZSBtb3VudGFpbiB1c2VkIHRvIGJlLi4uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICB0aW1lX2Jhc2U6OmRhdGVvcmRlcgorICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAorICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6bm9fb3JkZXI7IH0KKworICAvLyBFeHBhbmQgYSBzdHJmdGltZSBmb3JtYXQgc3RyaW5nIGFuZCBwYXJzZSBpdC4gIEUuZy4sIGRvX2dldF9kYXRlKCkgbWF5CisgIC8vIHBhc3MgJW0vJWQvJVkgPT4gZXh0cmFjdGVkIGNoYXJhY3RlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkJCSAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSwKKwkJCSAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBsb2NhbGUmIF9fbG9jID0gX19pby5fTV9nZXRsb2MoKTsKKyAgICAgIGNvbnN0IF9fdGltZXB1bmN0PF9DaGFyVD4mIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKKyAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChfX2Zvcm1hdCk7CisKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fdG1wZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICBzaXplX3QgX19pID0gMDsKKyAgICAgIGZvciAoOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbiAmJiAhX190bXBlcnI7ICsrX19pKQorCXsKKwkgIGlmIChfX2N0eXBlLm5hcnJvdyhfX2Zvcm1hdFtfX2ldLCAwKSA9PSAnJScpCisJICAgIHsKKwkgICAgICAvLyBWZXJpZnkgdmFsaWQgZm9ybWF0dGluZyBjb2RlLCBhdHRlbXB0IHRvIGV4dHJhY3QuCisJICAgICAgY2hhciBfX2MgPSBfX2N0eXBlLm5hcnJvdyhfX2Zvcm1hdFsrK19faV0sIDApOworCSAgICAgIGludCBfX21lbSA9IDA7CisJICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKKwkJX19jID0gX19jdHlwZS5uYXJyb3coX19mb3JtYXRbKytfX2ldLCAwKTsKKwkgICAgICBzd2l0Y2ggKF9fYykKKwkJeworCQkgIGNvbnN0IGNoYXIqIF9fY3M7CisJCSAgX0NoYXJUIF9fd2NzWzEwXTsKKwkJY2FzZSAnYSc6CisJCSAgLy8gQWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lIFt0bV93ZGF5XQorCQkgIGNvbnN0IGNoYXJfdHlwZSogIF9fZGF5czFbN107CisJCSAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5czEpOworCQkgIF9fYmVnID0gX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwKKwkJCQkJICA3LCBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ0EnOgorCQkgIC8vIFdlZWtkYXkgbmFtZSBbdG1fd2RheV0uCisJCSAgY29uc3QgY2hhcl90eXBlKiAgX19kYXlzMls3XTsKKwkJICBfX3RwLl9NX2RheXMoX19kYXlzMik7CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLAorCQkJCQkgIDcsIF9faW8sIF9fdG1wZXJyKTsKKwkJICBicmVhazsKKwkJY2FzZSAnaCc6CisJCWNhc2UgJ2InOgorCQkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWUgW3RtX21vbl0KKwkJICBjb25zdCBjaGFyX3R5cGUqICBfX21vbnRoczFbMTJdOworCQkgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzMSk7CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tb24sIAorCQkJCQkgIF9fbW9udGhzMSwgMTIsIF9faW8sIF9fdG1wZXJyKTsKKwkJICBicmVhazsKKwkJY2FzZSAnQic6CisJCSAgLy8gTW9udGggbmFtZSBbdG1fbW9uXS4KKwkJICBjb25zdCBjaGFyX3R5cGUqICBfX21vbnRoczJbMTJdOworCQkgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzMik7CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tb24sIAorCQkJCQkgIF9fbW9udGhzMiwgMTIsIF9faW8sIF9fdG1wZXJyKTsKKwkJICBicmVhazsKKwkJY2FzZSAnYyc6CisJCSAgLy8gRGVmYXVsdCB0aW1lIGFuZCBkYXRlIHJlcHJlc2VudGF0aW9uLgorCQkgIGNvbnN0IGNoYXJfdHlwZSogIF9fZHRbMl07CisJCSAgX190cC5fTV9kYXRlX3RpbWVfZm9ybWF0cyhfX2R0KTsKKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fdG1wZXJyLCAKKwkJCQkJCV9fdG0sIF9fZHRbMF0pOworCQkgIGJyZWFrOworCQljYXNlICdkJzoKKwkJICAvLyBEYXkgWzAxLCAzMV0uIFt0bV9tZGF5XQorCQkgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKKwkJCQkJIF9faW8sIF9fdG1wZXJyKTsKKwkJICBicmVhazsKKwkJY2FzZSAnZSc6CisJCSAgLy8gRGF5IFsxLCAzMV0sIHdpdGggc2luZ2xlIGRpZ2l0cyBwcmVjZWRlZCBieQorCQkgIC8vIHNwYWNlLiBbdG1fbWRheV0KKwkJICBpZiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgKl9fYmVnKSkKKwkJICAgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oKytfX2JlZywgX19lbmQsIF9fdG0tPnRtX21kYXksIDEsIDksCisJCQkJCSAgIDEsIF9faW8sIF9fdG1wZXJyKTsKKwkJICBlbHNlCisJCSAgICBfX2JlZyA9IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMTAsIDMxLAorCQkJCQkgICAyLCBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ0QnOgorCQkgIC8vIEVxdWl2YWxlbnQgdG8gJW0vJWQvJXkuW3RtX21vbiwgdG1fbWRheSwgdG1feWVhcl0KKwkJICBfX2NzID0gIiVtLyVkLyV5IjsKKwkJICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX3RtcGVyciwgCisJCQkJCQlfX3RtLCBfX3djcyk7CisJCSAgYnJlYWs7CisJCWNhc2UgJ0gnOgorCQkgIC8vIEhvdXIgWzAwLCAyM10uIFt0bV9ob3VyXQorCQkgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwKKwkJCQkJIF9faW8sIF9fdG1wZXJyKTsKKwkJICBicmVhazsKKwkJY2FzZSAnSSc6CisJCSAgLy8gSG91ciBbMDEsIDEyXS4gW3RtX2hvdXJdCisJCSAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAorCQkJCQkgX19pbywgX190bXBlcnIpOworCQkgIGJyZWFrOworCQljYXNlICdtJzoKKwkJICAvLyBNb250aCBbMDEsIDEyXS4gW3RtX21vbl0KKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDEsIDEyLCAyLCAKKwkJCQkJIF9faW8sIF9fdG1wZXJyKTsKKwkJICBpZiAoIV9fdG1wZXJyKQorCQkgICAgX190bS0+dG1fbW9uID0gX19tZW0gLSAxOworCQkgIGJyZWFrOworCQljYXNlICdNJzoKKwkJICAvLyBNaW51dGUgWzAwLCA1OV0uIFt0bV9taW5dCisJCSAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21pbiwgMCwgNTksIDIsCisJCQkJCSBfX2lvLCBfX3RtcGVycik7CisJCSAgYnJlYWs7CisJCWNhc2UgJ24nOgorCQkgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcbicpCisJCSAgICArK19fYmVnOworCQkgIGVsc2UKKwkJICAgIF9fdG1wZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCQkgIGJyZWFrOworCQljYXNlICdSJzoKKwkJICAvLyBFcXVpdmFsZW50IHRvICglSDolTSkuCisJCSAgX19jcyA9ICIlSDolTSI7CisJCSAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgNiwgX193Y3MpOworCQkgIF9fYmVnID0gX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX190bXBlcnIsIAorCQkJCQkJX190bSwgX193Y3MpOworCQkgIGJyZWFrOworCQljYXNlICdTJzoKKwkJICAvLyBTZWNvbmRzLiBbdG1fc2VjXQorCQkgIC8vIFswMCwgNjBdIGluIEM5OSAob25lIGxlYXAtc2Vjb25kKSwgWzAwLCA2MV0gaW4gQzg5LgorI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTkKKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fc2VjLCAwLCA2MCwgMiwKKyNlbHNlCisJCSAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3NlYywgMCwgNjEsIDIsCisjZW5kaWYKKwkJCQkJIF9faW8sIF9fdG1wZXJyKTsKKwkJICBicmVhazsKKwkJY2FzZSAndCc6CisJCSAgaWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1x0JykKKwkJICAgICsrX19iZWc7CisJCSAgZWxzZQorCQkgICAgX190bXBlcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJCSAgYnJlYWs7CisJCWNhc2UgJ1QnOgorCQkgIC8vIEVxdWl2YWxlbnQgdG8gKCVIOiVNOiVTKS4KKwkJICBfX2NzID0gIiVIOiVNOiVTIjsKKwkJICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX3RtcGVyciwgCisJCQkJCQlfX3RtLCBfX3djcyk7CisJCSAgYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkgIC8vIExvY2FsZSdzIGRhdGUuCisJCSAgY29uc3QgY2hhcl90eXBlKiAgX19kYXRlc1syXTsKKwkJICBfX3RwLl9NX2RhdGVfZm9ybWF0cyhfX2RhdGVzKTsKKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fdG1wZXJyLCAKKwkJCQkJCV9fdG0sIF9fZGF0ZXNbMF0pOworCQkgIGJyZWFrOworCQljYXNlICdYJzoKKwkJICAvLyBMb2NhbGUncyB0aW1lLgorCQkgIGNvbnN0IGNoYXJfdHlwZSogIF9fdGltZXNbMl07CisJCSAgX190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7CisJCSAgX19iZWcgPSBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX3RtcGVyciwgCisJCQkJCQlfX3RtLCBfX3RpbWVzWzBdKTsKKwkJICBicmVhazsKKwkJY2FzZSAneSc6CisJCWNhc2UgJ0MnOiAvLyBDOTkKKwkJICAvLyBUd28gZGlnaXQgeWVhci4KKwkJY2FzZSAnWSc6CisJCSAgLy8gWWVhciBbMTkwMCkuCisJCSAgLy8gTkI6IFdlIHBhcnNlIGVpdGhlciB0d28gZGlnaXRzLCBpbXBsaWNpdGx5IHllYXJzIHNpbmNlCisJCSAgLy8gMTkwMCwgb3IgNCBkaWdpdHMsIGZ1bGwgeWVhci4gIEluIGJvdGggY2FzZXMgd2UgY2FuIAorCQkgIC8vIHJlY29uc3RydWN0IFt0bV95ZWFyXS4gIFNlZSBhbHNvIGxpYnN0ZGMrKy8yNjcwMS4KKwkJICBfX2JlZyA9IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDAsIDk5OTksIDQsCisJCQkJCSBfX2lvLCBfX3RtcGVycik7CisJCSAgaWYgKCFfX3RtcGVycikKKwkJICAgIF9fdG0tPnRtX3llYXIgPSBfX21lbSA8IDAgPyBfX21lbSArIDEwMCA6IF9fbWVtIC0gMTkwMDsKKwkJICBicmVhazsKKwkJY2FzZSAnWic6CisJCSAgLy8gVGltZXpvbmUgaW5mby4KKwkJICBpZiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgKl9fYmVnKSkKKwkJICAgIHsKKwkJICAgICAgaW50IF9fdG1wOworCQkgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wLAorCQkJCSAgICAgICBfX3RpbWVwdW5jdF9jYWNoZTxfQ2hhclQ+OjpfU190aW1lem9uZXMsCisJCQkJCSAgICAgIDE0LCBfX2lvLCBfX3RtcGVycik7CisKKwkJICAgICAgLy8gR01UIHJlcXVpcmVzIHNwZWNpYWwgZWZmb3J0LgorCQkgICAgICBpZiAoX19iZWcgIT0gX19lbmQgJiYgIV9fdG1wZXJyICYmIF9fdG1wID09IDAKKwkJCSAgJiYgKCpfX2JlZyA9PSBfX2N0eXBlLndpZGVuKCctJykKKwkJCSAgICAgIHx8ICpfX2JlZyA9PSBfX2N0eXBlLndpZGVuKCcrJykpKQorCQkJeworCQkJICBfX2JlZyA9IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAorCQkJCQkJIF9faW8sIF9fdG1wZXJyKTsKKwkJCSAgX19iZWcgPSBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCA1OSwgMiwKKwkJCQkJCSBfX2lvLCBfX3RtcGVycik7CisJCQl9CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgX190bXBlcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJCSAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgLy8gTm90IHJlY29nbml6ZWQuCisJCSAgX190bXBlcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gVmVyaWZ5IGZvcm1hdCBhbmQgaW5wdXQgbWF0Y2gsIGV4dHJhY3QgYW5kIGRpc2NhcmQuCisJICAgICAgaWYgKF9fZm9ybWF0W19faV0gPT0gKl9fYmVnKQorCQkrK19fYmVnOworCSAgICAgIGVsc2UKKwkJX190bXBlcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChfX3RtcGVyciB8fCBfX2kgIT0gX19sZW4pCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgIAorICAgICAgcmV0dXJuIF9fYmVnOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAorCQkgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVuLAorCQkgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCisgICAgICAvLyBBcy1pcyB3b3JrcyBmb3IgX19sZW4gPSAxLCAyLCA0LCB0aGUgdmFsdWVzIGFjdHVhbGx5IHVzZWQuCisgICAgICBpbnQgX19tdWx0ID0gX19sZW4gPT0gMiA/IDEwIDogKF9fbGVuID09IDQgPyAxMDAwIDogMSk7CisKKyAgICAgICsrX19taW47CisgICAgICBzaXplX3QgX19pID0gMDsKKyAgICAgIGludCBfX3ZhbHVlID0gMDsKKyAgICAgIGZvciAoOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbjsgKytfX2JlZywgKytfX2kpCisJeworCSAgY29uc3QgY2hhciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsICcqJyk7CisJICBpZiAoX19jID49ICcwJyAmJiBfX2MgPD0gJzknKQorCSAgICB7CisJICAgICAgX192YWx1ZSA9IF9fdmFsdWUgKiAxMCArIChfX2MgLSAnMCcpOworCSAgICAgIGNvbnN0IGludCBfX3ZhbHVlYyA9IF9fdmFsdWUgKiBfX211bHQ7CisJICAgICAgaWYgKF9fdmFsdWVjID4gX19tYXggfHwgX192YWx1ZWMgKyBfX211bHQgPCBfX21pbikKKwkJYnJlYWs7CisJICAgICAgX19tdWx0IC89IDEwOworCSAgICB9CisJICBlbHNlCisJICAgIGJyZWFrOworCX0KKyAgICAgIGlmIChfX2kgPT0gX19sZW4pCisJX19tZW1iZXIgPSBfX3ZhbHVlOworICAgICAgLy8gU3BlY2lhbCBlbmNvZGluZyBmb3IgZG9fZ2V0X3llYXIsICd5JywgYW5kICdZJyBhYm92ZS4KKyAgICAgIGVsc2UgaWYgKF9fbGVuID09IDQgJiYgX19pID09IDIpCisJX19tZW1iZXIgPSBfX3ZhbHVlIC0gMTAwOworICAgICAgZWxzZQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIC8vIEFzc3VtcHRpb25zOgorICAvLyBBbGwgZWxlbWVudHMgaW4gX19uYW1lcyBhcmUgdW5pcXVlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgorICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW50JiBfX21lbWJlciwKKwkJICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAorCQkgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4JCV9fdHJhaXRzX3R5cGU7CisgICAgICBjb25zdCBsb2NhbGUmIF9fbG9jID0gX19pby5fTV9nZXRsb2MoKTsKKyAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKworICAgICAgaW50KiBfX21hdGNoZXMgPSBzdGF0aWNfY2FzdDxpbnQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihpbnQpCisJCQkJCQkJICAqIF9faW5kZXhsZW4pKTsKKyAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKKyAgICAgIHNpemVfdCBfX3BvcyA9IDA7CisgICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsKKyAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOworCisgICAgICAvLyBMb29rIGZvciBpbml0aWFsIG1hdGNoZXMuCisgICAgICAvLyBOQjogU29tZSBvZiB0aGUgbG9jYWxlIGRhdGEgaXMgaW4gdGhlIGZvcm0gb2YgYWxsIGxvd2VyY2FzZQorICAgICAgLy8gbmFtZXMsIGFuZCBzb21lIGlzIGluIHRoZSBmb3JtIG9mIGluaXRpYWxseS1jYXBpdGFsaXplZAorICAgICAgLy8gbmFtZXMuIExvb2sgZm9yIGJvdGguCisgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCisJeworCSAgY29uc3QgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKKwkgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQorCSAgICBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0KKwkJfHwgX19jID09IF9fY3R5cGUudG91cHBlcihfX25hbWVzW19faTFdWzBdKSkKKwkgICAgICBfX21hdGNoZXNbX19ubWF0Y2hlcysrXSA9IF9faTE7CisJfQorCisgICAgICB3aGlsZSAoX19ubWF0Y2hlcyA+IDEpCisJeworCSAgLy8gRmluZCBzbWFsbGVzdCBtYXRjaGluZyBzdHJpbmcuCisJICBzaXplX3QgX19taW5sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lc1tfX21hdGNoZXNbMF1dKTsKKwkgIGZvciAoc2l6ZV90IF9faTIgPSAxOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQorCSAgICBfX21pbmxlbiA9IHN0ZDo6bWluKF9fbWlubGVuLAorCQkJICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOworCSAgKytfX2JlZywgKytfX3BvczsKKwkgIGlmIChfX3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQorCSAgICBmb3IgKHNpemVfdCBfX2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7KQorCSAgICAgIHsKKwkJX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19pM11dOworCQlpZiAoIShfX25hbWVbX19wb3NdID09ICpfX2JlZykpCisJCSAgX19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107CisJCWVsc2UKKwkJICArK19faTM7CisJICAgICAgfQorCSAgZWxzZQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGlmIChfX25tYXRjaGVzID09IDEpCisJeworCSAgLy8gTWFrZSBzdXJlIGZvdW5kIG5hbWUgaXMgY29tcGxldGVseSBleHRyYWN0ZWQuCisJICArK19fYmVnLCArK19fcG9zOworCSAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOworCSAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CisJICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09ICpfX2JlZykKKwkgICAgKytfX2JlZywgKytfX3BvczsKKworCSAgaWYgKF9fbGVuID09IF9fcG9zKQorCSAgICBfX21lbWJlciA9IF9fbWF0Y2hlc1swXTsKKwkgIGVsc2UKKwkgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKKwl9CisgICAgICBlbHNlCisJX190ZXN0dmFsaWQgPSBmYWxzZTsKKyAgICAgIGlmICghX190ZXN0dmFsaWQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBfTV9leHRyYWN0X3dkYXlfb3JfbW9udGgoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGludCYgX19tZW1iZXIsCisJCQkgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAorCQkJICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPgkJX190cmFpdHNfdHlwZTsKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworCisgICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2EoMiAqIHNpemVvZihpbnQpCisJCQkJCQkJICAqIF9faW5kZXhsZW4pKTsKKyAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKKyAgICAgIHNpemVfdCogX19tYXRjaGVzX2xlbmd0aHMgPSAwOworICAgICAgc2l6ZV90IF9fcG9zID0gMDsKKworICAgICAgaWYgKF9fYmVnICE9IF9fZW5kKQorCXsKKwkgIGNvbnN0IGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CisJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCAyICogX19pbmRleGxlbjsgKytfX2kpCisJICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2ldWzBdCisJCXx8IF9fYyA9PSBfX2N0eXBlLnRvdXBwZXIoX19uYW1lc1tfX2ldWzBdKSkKKwkgICAgICBfX21hdGNoZXNbX19ubWF0Y2hlcysrXSA9IF9faTsKKwl9CisKKyAgICAgIGlmIChfX25tYXRjaGVzKQorCXsKKwkgICsrX19iZWcsICsrX19wb3M7CisKKwkgIF9fbWF0Y2hlc19sZW5ndGhzCisJICAgID0gc3RhdGljX2Nhc3Q8c2l6ZV90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yoc2l6ZV90KQorCQkJCQkJICAgICogX19ubWF0Y2hlcykpOworCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19ubWF0Y2hlczsgKytfX2kpCisJICAgIF9fbWF0Y2hlc19sZW5ndGhzW19faV0KKwkgICAgICA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWVzW19fbWF0Y2hlc1tfX2ldXSk7CisJfQorCisgICAgICBmb3IgKDsgX19iZWcgIT0gX19lbmQ7ICsrX19iZWcsICsrX19wb3MpCisJeworCSAgc2l6ZV90IF9fbnNraXBwZWQgPSAwOworCSAgY29uc3QgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbm1hdGNoZXM7KQorCSAgICB7CisJICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2ldXTsKKwkgICAgICBpZiAoX19wb3MgPj0gX19tYXRjaGVzX2xlbmd0aHNbX19pXSkKKwkJKytfX25za2lwcGVkLCArK19faTsKKwkgICAgICBlbHNlIGlmICghKF9fbmFtZVtfX3Bvc10gPT0gX19jKSkKKwkJeworCQkgIC0tX19ubWF0Y2hlczsKKwkJICBfX21hdGNoZXNbX19pXSA9IF9fbWF0Y2hlc1tfX25tYXRjaGVzXTsKKwkJICBfX21hdGNoZXNfbGVuZ3Roc1tfX2ldID0gX19tYXRjaGVzX2xlbmd0aHNbX19ubWF0Y2hlc107CisJCX0KKwkgICAgICBlbHNlCisJCSsrX19pOworCSAgICB9CisJICBpZiAoX19uc2tpcHBlZCA9PSBfX25tYXRjaGVzKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIGlmICgoX19ubWF0Y2hlcyA9PSAxICYmIF9fbWF0Y2hlc19sZW5ndGhzWzBdID09IF9fcG9zKQorCSAgfHwgKF9fbm1hdGNoZXMgPT0gMiAmJiAoX19tYXRjaGVzX2xlbmd0aHNbMF0gPT0gX19wb3MKKwkJCQkgIHx8IF9fbWF0Y2hlc19sZW5ndGhzWzFdID09IF9fcG9zKSkpCisJX19tZW1iZXIgPSAoX19tYXRjaGVzWzBdID49IF9faW5kZXhsZW4KKwkJICAgID8gX19tYXRjaGVzWzBdIC0gX19pbmRleGxlbiA6IF9fbWF0Y2hlc1swXSk7CisgICAgICBlbHNlCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCWlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgeworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUqICBfX3RpbWVzWzJdOworICAgICAgX190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7CisgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCAKKwkJCQkgICAgX190bSwgX190aW1lc1swXSk7CisgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCWlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgeworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUqICBfX2RhdGVzWzJdOworICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CisgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCAKKwkJCQkgICAgX190bSwgX19kYXRlc1swXSk7CisgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCisJCSAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+CQlfX3RyYWl0c190eXBlOworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1sxNF07CisgICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlzKTsKKyAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMgKyA3KTsKKyAgICAgIGludCBfX3RtcHdkYXk7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX3RtcGVyciA9IGlvc19iYXNlOjpnb29kYml0OworCisgICAgICBfX2JlZyA9IF9NX2V4dHJhY3Rfd2RheV9vcl9tb250aChfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LAorCQkJCSAgICAgICBfX2lvLCBfX3RtcGVycik7CisgICAgICBpZiAoIV9fdG1wZXJyKQorCV9fdG0tPnRtX3dkYXkgPSBfX3RtcHdkYXk7CisgICAgICBlbHNlCisJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisKKyAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKKwlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworICAgICAgcmV0dXJuIF9fYmVnOworICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgorICAgIF9Jbkl0ZXIKKyAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKKyAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLAorICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+CQlfX3RyYWl0c190eXBlOworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjb25zdCBfX3RpbWVwdW5jdDxfQ2hhclQ+JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUqICBfX21vbnRoc1syNF07CisgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7CisgICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRocyArIDEyKTsKKyAgICAgIGludCBfX3RtcG1vbjsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fdG1wZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisKKyAgICAgIF9fYmVnID0gX01fZXh0cmFjdF93ZGF5X29yX21vbnRoKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwKKwkJCQkgICAgICAgX19pbywgX190bXBlcnIpOworICAgICAgaWYgKCFfX3RtcGVycikKKwlfX3RtLT50bV9tb24gPSBfX3RtcG1vbjsKKyAgICAgIGVsc2UKKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKworICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCV9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CisgICAgICByZXR1cm4gX19iZWc7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KKyAgICBfSW5JdGVyCisgICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAorCQlpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOworICAgICAgaW50IF9fdG1weWVhcjsKKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fdG1wZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisKKyAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcHllYXIsIDAsIDk5OTksIDQsCisJCQkgICAgIF9faW8sIF9fdG1wZXJyKTsKKyAgICAgIGlmICghX190bXBlcnIpCisJX190bS0+dG1feWVhciA9IF9fdG1weWVhciA8IDAgPyBfX3RtcHllYXIgKyAxMDAgOiBfX3RtcHllYXIgLSAxOTAwOworICAgICAgZWxzZQorCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworCisgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAorCWNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CisgICAgeworICAgICAgY29uc3QgbG9jYWxlJiBfX2xvYyA9IF9faW8uX01fZ2V0bG9jKCk7CisgICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CisgICAgICBmb3IgKDsgX19iZWcgIT0gX19lbmQ7ICsrX19iZWcpCisJaWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgIT0gJyUnKQorCSAgeworCSAgICAqX19zID0gKl9fYmVnOworCSAgICArK19fczsKKwkgIH0KKwllbHNlIGlmICgrK19fYmVnICE9IF9fZW5kKQorCSAgeworCSAgICBjaGFyIF9fZm9ybWF0OworCSAgICBjaGFyIF9fbW9kID0gMDsKKwkgICAgY29uc3QgY2hhciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOworCSAgICBpZiAoX19jICE9ICdFJyAmJiBfX2MgIT0gJ08nKQorCSAgICAgIF9fZm9ybWF0ID0gX19jOworCSAgICBlbHNlIGlmICgrK19fYmVnICE9IF9fZW5kKQorCSAgICAgIHsKKwkJX19tb2QgPSBfX2M7CisJCV9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICBicmVhazsKKwkgICAgX19zID0gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOworCSAgfQorCWVsc2UKKwkgIGJyZWFrOworICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKKyAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCisJICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBsb2NhbGUmIF9fbG9jID0gX19pby5fTV9nZXRsb2MoKTsKKyAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKKyAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKKworICAgICAgLy8gTkI6IFRoaXMgc2l6ZSBpcyBhcmJpdHJhcnkuIFNob3VsZCB0aGlzIGJlIGEgZGF0YSBtZW1iZXIsCisgICAgICAvLyBpbml0aWFsaXplZCBhdCBjb25zdHJ1Y3Rpb24/CisgICAgICBjb25zdCBzaXplX3QgX19tYXhsZW4gPSAxMjg7CisgICAgICBjaGFyX3R5cGUgX19yZXNbX19tYXhsZW5dOworCisgICAgICAvLyBOQjogSW4gSUVFIDEwMDMuMS0yMDB4LCBhbmQgcGVyaGFwcyBvdGhlciBsb2NhbGUgbW9kZWxzLCBpdAorICAgICAgLy8gaXMgcG9zc2libGUgdGhhdCB0aGUgZm9ybWF0IGNoYXJhY3RlciB3aWxsIGJlIGxvbmdlciB0aGFuIG9uZQorICAgICAgLy8gY2hhcmFjdGVyLiBQb3NzaWJpbGl0aWVzIGluY2x1ZGUgJ0UnIG9yICdPJyBmb2xsb3dlZCBieSBhCisgICAgICAvLyBmb3JtYXQgY2hhcmFjdGVyOiBpZiBfX21vZCBpcyBub3QgdGhlIGRlZmF1bHQgYXJndW1lbnQsIGFzc3VtZQorICAgICAgLy8gaXQncyBhIHZhbGlkIG1vZGlmaWVyLgorICAgICAgY2hhcl90eXBlIF9fZm10WzRdOworICAgICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7CisgICAgICBpZiAoIV9fbW9kKQorCXsKKwkgIF9fZm10WzFdID0gX19mb3JtYXQ7CisJICBfX2ZtdFsyXSA9IGNoYXJfdHlwZSgpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfX2ZtdFsxXSA9IF9fbW9kOworCSAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKKwkgIF9fZm10WzNdID0gY2hhcl90eXBlKCk7CisJfQorCisgICAgICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10LCBfX3RtKTsKKworICAgICAgLy8gV3JpdGUgcmVzdWx0aW5nLCBmdWxseS1mb3JtYXR0ZWQgc3RyaW5nIHRvIG91dHB1dCBpdGVyYXRvci4KKyAgICAgIHJldHVybiBzdGQ6Ol9fd3JpdGUoX19zLCBfX3JlcywgY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKSk7CisgICAgfQorCisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX05BTUVTUEFDRV9MREJMIG1vbmV5X2dldDxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX05BTUVTUEFDRV9MREJMIG1vbmV5X3B1dDxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNoYXI+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4mCisgICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYKKyAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBtb25leV9wdXQ8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG1vbmV5X2dldDxjaGFyPiYKKyAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgdGltZV9nZXQ8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mCisgICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxzZT47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0cnVlPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX05BTUVTUEFDRV9MREJMIG1vbmV5X2dldDx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9HTElCQ1hYX05BTUVTUEFDRV9MREJMIG1vbmV5X3B1dDx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCisgICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiYKKyAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBjb25zdCBtb25leV9wdXQ8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKKyAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgX190aW1lcHVuY3Q8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgdGltZV9wdXQ8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgY29uc3QgbWVzc2FnZXM8d2NoYXJfdD4mCisgICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKKworICBleHRlcm4gdGVtcGxhdGUKKyAgICBib29sCisgICAgaGFzX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgYm9vbAorICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOworCisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIGJvb2wKKyAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xvY2FsZWZ3ZC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL2xvY2FsZWZ3ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDZkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbG9jYWxlZndkLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8vIDxsb2NhbGU+IEZvcndhcmQgZGVjbGFyYXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2xvY2FsZWZ3ZC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4xICBMb2NhbGVzCisvLworCisjaWZuZGVmIF9MT0NBTEVfRldEX0gKKyNkZWZpbmUgX0xPQ0FMRV9GV0RfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGUuaD4gIC8vIERlZmluZXMgX19jX2xvY2FsZSwgY29uZmlnLXNwZWNpZmljIGluY2x1ZGUKKyNpbmNsdWRlIDxpb3Nmd2Q+ICAgICAgICAgICAgLy8gRm9yIG9zdHJlYW1idWZfaXRlcmF0b3IsIGlzdHJlYW1idWZfaXRlcmF0b3IKKyNpbmNsdWRlIDxjY3R5cGU+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKiogCisgICAqICBAZGVmZ3JvdXAgbG9jYWxlcyBMb2NhbGVzCisgICAqCisgICAqICBDbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIGludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb24uCisgICAqLworCisgIC8vIDIyLjEuMSBMb2NhbGUKKyAgY2xhc3MgbG9jYWxlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KKyAgICBib29sCisgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgorICAgIGNvbnN0IF9GYWNldCYKKyAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CisKKyAgLy8gMjIuMS4zIENvbnZlbmllbmNlIGludGVyZmFjZXMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc3ByaW50KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGJvb2wKKyAgICBpc3hkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBib29sCisgICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfQ2hhclQKKyAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIF9DaGFyVAorICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKKworICAvLyAyMi4yLjEgYW5kIDIyLjIuMS4zIGN0eXBlCisgIGNsYXNzIGN0eXBlX2Jhc2U7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBjbGFzcyBjdHlwZTsKKyAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPHdjaGFyX3Q+OworI2VuZGlmCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBjbGFzcyBjdHlwZV9ieW5hbWU7CisgIC8vIE5COiBTcGVjaWFsaXplZCBmb3IgY2hhciBhbmQgd2NoYXJfdCBpbiBsb2NhbGVfZmFjZXRzLmguCisKKyAgY2xhc3MgY29kZWN2dF9iYXNlOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CisgICAgY2xhc3MgY29kZWN2dDsKKyAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CisjZW5kaWYKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgorICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOworCisgIC8vIDIyLjIuMiBhbmQgMjIuMi4zIG51bWVyaWMKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9MREJMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgbnVtX2dldDsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgbnVtX3B1dDsKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfTERCTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKKworICAvLyAyMi4yLjQgY29sbGF0aW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBjbGFzcyBjb2xsYXRlOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCisgICAgY29sbGF0ZV9ieW5hbWU7CisKKyAgLy8gMjIuMi41IGRhdGUgYW5kIHRpbWUKKyAgY2xhc3MgdGltZV9iYXNlOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyB0aW1lX2dldDsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgdGltZV9nZXRfYnluYW1lOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyB0aW1lX3B1dDsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOworCisgIC8vIDIyLjIuNiBtb25leQorICBjbGFzcyBtb25leV9iYXNlOworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0xEQkwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgbW9uZXlfZ2V0OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyBtb25leV9wdXQ7CitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0xEQkwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CisgICAgY2xhc3MgbW9uZXlwdW5jdDsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CisgICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU7CisKKyAgLy8gMjIuMi43IG1lc3NhZ2UgcmV0cmlldmFsCisgIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBjbGFzcyBtZXNzYWdlczsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbWFza19hcnJheS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL21hc2tfYXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2JlYThhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL21hc2tfYXJyYXkuaApAQCAtMCwwICsxLDIwOCBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gbWFza19hcnJheSBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvbWFza19hcnJheS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dmFsYXJyYXl9CisgKi8KKworLy8gV3JpdHRlbiBieSBHYWJyaWVsIERvcyBSZWlzIDxHYWJyaWVsLkRvcy1SZWlzQERQVE1hdGhzLkVOUy1DYWNoYW4uRnI+CisKKyNpZm5kZWYgX01BU0tfQVJSQVlfSAorI2RlZmluZSBfTUFTS19BUlJBWV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIG51bWVyaWNfYXJyYXlzCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiAgQGJyaWVmICBSZWZlcmVuY2UgdG8gc2VsZWN0ZWQgc3Vic2V0IG9mIGFuIGFycmF5LgorICAgKgorICAgKiAgQSBtYXNrX2FycmF5IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3R1YWwgZWxlbWVudHMgb2YgYW4gYXJyYXkgc3BlY2lmaWVkCisgICAqICBieSBhIGJpdG1hc2sgaW4gdGhlIGZvcm0gb2YgYW4gYXJyYXkgb2YgYm9vbC4gIFRoZSB3YXkgdG8gZ2V0IGEKKyAgICogIG1hc2tfYXJyYXkgaXMgdG8gY2FsbCBvcGVyYXRvcltdKHZhbGFycmF5PGJvb2w+KSBvbiBhIHZhbGFycmF5LiAgVGhlCisgICAqICByZXR1cm5lZCBtYXNrX2FycmF5IHRoZW4gcGVybWl0cyBjYXJyeWluZyBvcGVyYXRpb25zIG91dCBvbiB0aGUKKyAgICogIHJlZmVyZW5jZWQgc3Vic2V0IG9mIGVsZW1lbnRzIGluIHRoZSBvcmlnaW5hbCB2YWxhcnJheS4KKyAgICoKKyAgICogIEZvciBleGFtcGxlLCBpZiBhIG1hc2tfYXJyYXkgaXMgb2J0YWluZWQgdXNpbmcgdGhlIGFycmF5IChmYWxzZSwgdHJ1ZSwKKyAgICogIGZhbHNlLCB0cnVlKSBhcyBhbiBhcmd1bWVudCwgdGhlIG1hc2sgYXJyYXkgaGFzIHR3byBlbGVtZW50cyByZWZlcnJpbmcKKyAgICogIHRvIGFycmF5WzFdIGFuZCBhcnJheVszXSBpbiB0aGUgdW5kZXJseWluZyBhcnJheS4KKyAgICoKKyAgICogIEBwYXJhbSAgVHAgIEVsZW1lbnQgdHlwZS4KKyAgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgICAgY2xhc3MgbWFza19hcnJheQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNTMuIHZhbGFycmF5IGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsbW9zdCBlbnRpcmVseSB1c2VsZXNzCisKKyAgICAgIC8vLyAgQ29weSBjb25zdHJ1Y3Rvci4gIEJvdGggc2xpY2VzIHJlZmVyIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgYXJyYXkuCisgICAgICBtYXNrX2FycmF5IChjb25zdCBtYXNrX2FycmF5Jik7CisgICAgICAKKyAgICAgIC8vLyAgQXNzaWdubWVudCBvcGVyYXRvci4gIEFzc2lnbnMgZWxlbWVudHMgdG8gY29ycmVzcG9uZGluZyBlbGVtZW50cworICAgICAgLy8vICBvZiBAYSBhLgorICAgICAgbWFza19hcnJheSYgb3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXkmKTsKKworICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBNdWx0aXBseSBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yKj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBEaXZpZGUgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvci89KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTW9kdWxvIHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3IlPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFkZCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgdG8gc2xpY2UgZWxlbWVudHMuCisgICAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBTdWJ0cmFjdCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgZnJvbSBzbGljZSBlbGVtZW50cy4KKyAgICAgIHZvaWQgb3BlcmF0b3ItPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExvZ2ljYWwgeG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcl49KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTG9naWNhbCBhbmQgc2xpY2UgZWxlbWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yJj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMb2dpY2FsIG9yIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcnw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTGVmdCBzaGlmdCBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgUmlnaHQgc2hpZnQgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIEFzc2lnbiBhbGwgc2xpY2UgZWxlbWVudHMgdG8gQGEgdC4KKyAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UcCYpIGNvbnN0OworCisgICAgICAgIC8vICAgICAgICB+bWFza19hcnJheSAoKTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yKj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yLz0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yJT0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yLT0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yXj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yJj0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yfD0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICBtYXNrX2FycmF5KF9BcnJheTxfVHA+LCBzaXplX3QsIF9BcnJheTxib29sPik7CisgICAgICBmcmllbmQgY2xhc3MgdmFsYXJyYXk8X1RwPjsKKworICAgICAgY29uc3Qgc2l6ZV90ICAgICAgIF9NX3N6OworICAgICAgY29uc3QgX0FycmF5PGJvb2w+IF9NX21hc2s7CisgICAgICBjb25zdCBfQXJyYXk8X1RwPiAgX01fYXJyYXk7CisKKyAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZAorICAgICAgbWFza19hcnJheSgpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBtYXNrX2FycmF5PF9UcD46Om1hc2tfYXJyYXkoY29uc3QgbWFza19hcnJheTxfVHA+JiBhKQorICAgIDogX01fc3ooYS5fTV9zeiksIF9NX21hc2soYS5fTV9tYXNrKSwgX01fYXJyYXkoYS5fTV9hcnJheSkge30KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgbWFza19hcnJheTxfVHA+OjptYXNrX2FycmF5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgX0FycmF5PGJvb2w+IF9fbSkKKyAgICA6IF9NX3N6KF9fcyksIF9NX21hc2soX19tKSwgX01fYXJyYXkoX19hKSB7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgbWFza19hcnJheTxfVHA+JgorICAgIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYgX19hKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5KF9fYS5fTV9hcnJheSwgX19hLl9NX21hc2ssCisJCQkgICBfTV9zeiwgX01fYXJyYXksIF9NX21hc2spOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9maWxsKF9NX2FycmF5LCBfTV9zeiwgX01fbWFzaywgX190KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+KF9fdiksIF9fdi5zaXplKCksIF9NX2FycmF5LCBfTV9tYXNrKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfRXg+CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX0V4cHI8X0V4LCBfVHA+JiBfX2UpIGNvbnN0CisgICAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9fZSwgX19lLnNpemUoKSwgX01fYXJyYXksIF9NX21hc2spOyB9CisKKyN1bmRlZiBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SCisjZGVmaW5lIF9ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoX09wLCBfTmFtZSkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB2b2lkCQkJCQkJCQlcCisgICAgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciBfT3AjIz0oY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdAlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfTV9hcnJheSwgX01fbWFzaywJCQlcCisJCQkgICAgICAgX0FycmF5PF9UcD4oX192KSwgX192LnNpemUoKSk7CQlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgkJCSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlubGluZSB2b2lkCQkJCQkJCVwKKyAgICAgIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkgY29uc3RcCisgICAgICB7CQkJCQkJCQkJXAorCV9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfTV9hcnJheSwgX01fbWFzaywgX19lLCBfX2Uuc2l6ZSgpKTsgICBcCisgICAgICB9CisKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoKiwgX19tdWx0aXBsaWVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigvLCBfX2RpdmlkZXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCUsIF9fbW9kdWx1cykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoKywgX19wbHVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigtLCBfX21pbnVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUiheLCBfX2JpdHdpc2VfeG9yKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigmLCBfX2JpdHdpc2VfYW5kKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUih8LCBfX2JpdHdpc2Vfb3IpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKDw8LCBfX3NoaWZ0X2xlZnQpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKD4+LCBfX3NoaWZ0X3JpZ2h0KQorCisjdW5kZWYgX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUgorCisgIC8vIEB9IGdyb3VwIG51bWVyaWNfYXJyYXlzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9NQVNLX0FSUkFZX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9tZW1vcnlmd2QuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9tZW1vcnlmd2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzg1OTcwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL21lbW9yeWZ3ZC5oCkBAIC0wLDAgKzEsNzggQEAKKy8vIDxtZW1vcnk+IEZvcndhcmQgZGVjbGFyYXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvbWVtb3J5ZndkLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttZW1vcnl9CisgKi8KKworI2lmbmRlZiBfTUVNT1JZRldEX0gKKyNkZWZpbmUgX01FTU9SWUZXRF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgYWxsb2NhdG9ycyBBbGxvY2F0b3JzCisgICAqIEBpbmdyb3VwIG1lbW9yeQorICAgKgorICAgKiBDbGFzc2VzIGVuY2Fwc3VsYXRpbmcgbWVtb3J5IG9wZXJhdGlvbnMuCisgICAqCisgICAqIEB7CisgICAqLworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIGNsYXNzIGFsbG9jYXRvcjsKKworICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+OworCisgIC8vLyBEZWNsYXJlIHVzZXNfYWxsb2NhdG9yIHNvIGl0IGNhbiBiZSBzcGVjaWFsaXplZCBpbiBcPHF1ZXVlXD4gZXRjLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgc3RydWN0IHVzZXNfYWxsb2NhdG9yOworCisgIC8vLyBAfSBncm91cCBtZW1vcnkKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbW92ZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL21vdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjZjNjFmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL21vdmUuaApAQCAtMCwwICsxLDE5OCBAQAorLy8gTW92ZSwgZm9yd2FyZCBhbmQgaWRlbnRpdHkgZm9yIEMrKzB4ICsgc3dhcCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9tb3ZlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt1dGlsaXR5fQorICovCisKKyNpZm5kZWYgX01PVkVfSAorI2RlZmluZSBfTU9WRV9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBVc2VkLCBpbiBDKyswMyBtb2RlIHRvbywgYnkgYWxsb2NhdG9ycywgZXRjLgorICAvKioKKyAgICogIEBicmllZiBTYW1lIGFzIEMrKzExIHN0ZDo6YWRkcmVzc29mCisgICAqICBAaW5ncm91cCB1dGlsaXRpZXMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwKgorICAgIF9fYWRkcmVzc29mKF9UcCYgX19yKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PF9UcCo+CisJKCZjb25zdF9jYXN0PGNoYXImPihyZWludGVycHJldF9jYXN0PGNvbnN0IHZvbGF0aWxlIGNoYXImPihfX3IpKSk7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIEJyaW5ncyBpbiBzdGQ6OmRlY2x2YWwgdG9vLgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYWRkdG9ncm91cCB1dGlsaXRpZXMKKyAgICogIEB7CisgICAqLworCisgIC8qKgorICAgKiAgQGJyaWVmICBGb3J3YXJkIGFuIGx2YWx1ZS4KKyAgICogIEByZXR1cm4gVGhlIHBhcmFtZXRlciBjYXN0IHRvIHRoZSBzcGVjaWZpZWQgdHlwZS4KKyAgICoKKyAgICogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbXBsZW1lbnQgInBlcmZlY3QgZm9yd2FyZGluZyIuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIF9UcCYmCisgICAgZm9yd2FyZCh0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1RwPjo6dHlwZSYgX190KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcCYmPihfX3QpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEZvcndhcmQgYW4gcnZhbHVlLgorICAgKiAgQHJldHVybiBUaGUgcGFyYW1ldGVyIGNhc3QgdG8gdGhlIHNwZWNpZmllZCB0eXBlLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGltcGxlbWVudCAicGVyZmVjdCBmb3J3YXJkaW5nIi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgX1RwJiYKKyAgICBmb3J3YXJkKHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlJiYgX190KSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfbHZhbHVlX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZSwgInRlbXBsYXRlIGFyZ3VtZW50IgorCQkgICAgIiBzdWJzdGl0dXRpbmcgX1RwIGlzIGFuIGx2YWx1ZSByZWZlcmVuY2UgdHlwZSIpOworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UcCYmPihfX3QpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgQ29udmVydCBhIHZhbHVlIHRvIGFuIHJ2YWx1ZS4KKyAgICogIEBwYXJhbSAgX190ICBBIHRoaW5nIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHJldHVybiBUaGUgcGFyYW1ldGVyIGNhc3QgdG8gYW4gcnZhbHVlLXJlZmVyZW5jZSB0byBhbGxvdyBtb3ZpbmcgaXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UcD46OnR5cGUmJgorICAgIG1vdmUoX1RwJiYgX190KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlJiY+KF9fdCk7IH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19tb3ZlX2lmX25vZXhjZXB0X2NvbmQKKyAgICA6IHB1YmxpYyBfX2FuZF88X19ub3RfPGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UcD4+LAorICAgICAgICAgICAgICAgICAgICBpc19jb3B5X2NvbnN0cnVjdGlibGU8X1RwPj46OnR5cGUgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25kaXRpb25hbGx5IGNvbnZlcnQgYSB2YWx1ZSB0byBhbiBydmFsdWUuCisgICAqICBAcGFyYW0gIF9feCAgQSB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gVGhlIHBhcmFtZXRlciwgcG9zc2libHkgY2FzdCB0byBhbiBydmFsdWUtcmVmZXJlbmNlLgorICAgKgorICAgKiAgU2FtZSBhcyBzdGQ6Om1vdmUgdW5sZXNzIHRoZSB0eXBlJ3MgbW92ZSBjb25zdHJ1Y3RvciBjb3VsZCB0aHJvdyBhbmQgdGhlCisgICAqICB0eXBlIGlzIGNvcHlhYmxlLCBpbiB3aGljaCBjYXNlIGFuIGx2YWx1ZS1yZWZlcmVuY2UgaXMgcmV0dXJuZWQgaW5zdGVhZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29uc3RleHByIHR5cGVuYW1lCisgICAgY29uZGl0aW9uYWw8X19tb3ZlX2lmX25vZXhjZXB0X2NvbmQ8X1RwPjo6dmFsdWUsIGNvbnN0IF9UcCYsIF9UcCYmPjo6dHlwZQorICAgIG1vdmVfaWZfbm9leGNlcHQoX1RwJiBfX3gpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gc3RkOjptb3ZlKF9feCk7IH0KKworICAvLyBkZWNsdmFsLCBmcm9tIHR5cGVfdHJhaXRzLgorCisgIC8qKgorICAgKiAgQGJyaWVmIFJldHVybnMgdGhlIGFjdHVhbCBhZGRyZXNzIG9mIHRoZSBvYmplY3Qgb3IgZnVuY3Rpb24KKyAgICogICAgICAgICByZWZlcmVuY2VkIGJ5IHIsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIGFuIG92ZXJsb2FkZWQKKyAgICogICAgICAgICBvcGVyYXRvciYuCisgICAqICBAcGFyYW0gIF9fciAgUmVmZXJlbmNlIHRvIGFuIG9iamVjdCBvciBmdW5jdGlvbi4KKyAgICogIEByZXR1cm4gICBUaGUgYWN0dWFsIGFkZHJlc3MuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwKgorICAgIGFkZHJlc3NvZihfVHAmIF9fcikgbm9leGNlcHQKKyAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKF9fcik7IH0KKworICAvLy8gQH0gZ3JvdXAgdXRpbGl0aWVzCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNkZWZpbmUgX0dMSUJDWFhfTU9WRShfX3ZhbCkgc3RkOjptb3ZlKF9fdmFsKQorI2RlZmluZSBfR0xJQkNYWF9GT1JXQVJEKF9UcCwgX192YWwpIHN0ZDo6Zm9yd2FyZDxfVHA+KF9fdmFsKQorI2Vsc2UKKyNkZWZpbmUgX0dMSUJDWFhfTU9WRShfX3ZhbCkgKF9fdmFsKQorI2RlZmluZSBfR0xJQkNYWF9GT1JXQVJEKF9UcCwgX192YWwpIChfX3ZhbCkKKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYWRkdG9ncm91cCB1dGlsaXRpZXMKKyAgICogIEB7CisgICAqLworCisgIC8qKgorICAgKiAgQGJyaWVmIFN3YXBzIHR3byB2YWx1ZXMuCisgICAqICBAcGFyYW0gIF9fYSAgQSB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgX19iICBBbm90aGVyIHRoaW5nIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHJldHVybiAgIE5vdGhpbmcuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBub2V4Y2VwdChfX2FuZF88aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1RwPiwKKwkgICAgICAgICAgICBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfVHA+Pjo6dmFsdWUpCisjZW5kaWYKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9TR0lBc3NpZ25hYmxlQ29uY2VwdDxfVHA+KQorCisgICAgICBfVHAgX190bXAgPSBfR0xJQkNYWF9NT1ZFKF9fYSk7CisgICAgICBfX2EgPSBfR0xJQkNYWF9NT1ZFKF9fYik7CisgICAgICBfX2IgPSBfR0xJQkNYWF9NT1ZFKF9fdG1wKTsKKyAgICB9CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBEUiA4MDkuIHN0ZDo6c3dhcCBzaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgYXJyYXkgdHlwZXMuCisgIC8vLyBTd2FwIHRoZSBjb250ZW50cyBvZiB0d28gYXJyYXlzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHNpemVfdCBfTm0+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKF9UcCAoJl9fYSlbX05tXSwgX1RwICgmX19iKVtfTm1dKQorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBub2V4Y2VwdChub2V4Y2VwdChzd2FwKCpfX2EsICpfX2IpKSkKKyNlbmRpZgorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fbiA8IF9ObTsgKytfX24pCisJc3dhcChfX2FbX19uXSwgX19iW19fbl0pOworICAgIH0KKworICAvLy8gQH0gZ3JvdXAgdXRpbGl0aWVzCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfTU9WRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvbmVzdGVkX2V4Y2VwdGlvbi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL25lc3RlZF9leGNlcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWE1ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL25lc3RlZF9leGNlcHRpb24uaApAQCAtMCwwICsxLDE2NiBAQAorLy8gTmVzdGVkIEV4Y2VwdGlvbiBzdXBwb3J0IGhlYWRlciAobmVzdGVkX2V4Y2VwdGlvbiBjbGFzcykgZm9yIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL25lc3RlZF9leGNlcHRpb24uaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2V4Y2VwdGlvbn0KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX05FU1RFRF9FWENFUFRJT05fSAorI2RlZmluZSBfR0xJQkNYWF9ORVNURURfRVhDRVBUSU9OX0ggMQorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisjaWYgQVRPTUlDX0lOVF9MT0NLX0ZSRUUgPCAyCisjICBlcnJvciBUaGlzIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgZXhjZXB0aW9uIHByb3BhZ2F0aW9uLgorI2VuZGlmCisKK2V4dGVybiAiQysrIiB7CisKK25hbWVzcGFjZSBzdGQKK3sKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIGV4Y2VwdGlvbnMKKyAgICogQHsKKyAgICovCisKKyAgLy8vIEV4Y2VwdGlvbiBjbGFzcyB3aXRoIGV4Y2VwdGlvbl9wdHIgZGF0YSBtZW1iZXIuCisgIGNsYXNzIG5lc3RlZF9leGNlcHRpb24KKyAgeworICAgIGV4Y2VwdGlvbl9wdHIgX01fcHRyOworCisgIHB1YmxpYzoKKyAgICBuZXN0ZWRfZXhjZXB0aW9uKCkgbm9leGNlcHQgOiBfTV9wdHIoY3VycmVudF9leGNlcHRpb24oKSkgeyB9CisKKyAgICBuZXN0ZWRfZXhjZXB0aW9uKGNvbnN0IG5lc3RlZF9leGNlcHRpb24mKSA9IGRlZmF1bHQ7CisKKyAgICBuZXN0ZWRfZXhjZXB0aW9uJiBvcGVyYXRvcj0oY29uc3QgbmVzdGVkX2V4Y2VwdGlvbiYpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgfm5lc3RlZF9leGNlcHRpb24oKSBub2V4Y2VwdDsKKworICAgIHZvaWQKKyAgICByZXRocm93X25lc3RlZCgpIGNvbnN0IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorICAgIHsgcmV0aHJvd19leGNlcHRpb24oX01fcHRyKTsgfQorCisgICAgZXhjZXB0aW9uX3B0cgorICAgIG5lc3RlZF9wdHIoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3B0cjsgfQorICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeGNlcHQ+CisgICAgc3RydWN0IF9OZXN0ZWRfZXhjZXB0aW9uIDogcHVibGljIF9FeGNlcHQsIHB1YmxpYyBuZXN0ZWRfZXhjZXB0aW9uCisgICAgeworICAgICAgZXhwbGljaXQgX05lc3RlZF9leGNlcHRpb24oX0V4Y2VwdCYmIF9fZXgpCisgICAgICA6IF9FeGNlcHQoc3RhdGljX2Nhc3Q8X0V4Y2VwdCYmPihfX2V4KSkKKyAgICAgIHsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V4PgorICAgIHN0cnVjdCBfX2dldF9uZXN0ZWRfaGVscGVyCisgICAgeworICAgICAgc3RhdGljIGNvbnN0IG5lc3RlZF9leGNlcHRpb24qCisgICAgICBfU19nZXQoY29uc3QgX0V4JiBfX2V4KQorICAgICAgeyByZXR1cm4gZHluYW1pY19jYXN0PGNvbnN0IG5lc3RlZF9leGNlcHRpb24qPigmX19leCk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICBzdHJ1Y3QgX19nZXRfbmVzdGVkX2hlbHBlcjxfRXgqPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBuZXN0ZWRfZXhjZXB0aW9uKgorICAgICAgX1NfZ2V0KGNvbnN0IF9FeCogX19leCkKKyAgICAgIHsgcmV0dXJuIGR5bmFtaWNfY2FzdDxjb25zdCBuZXN0ZWRfZXhjZXB0aW9uKj4oX19leCk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICBpbmxpbmUgY29uc3QgbmVzdGVkX2V4Y2VwdGlvbioKKyAgICBfX2dldF9uZXN0ZWRfZXhjZXB0aW9uKGNvbnN0IF9FeCYgX19leCkKKyAgICB7IHJldHVybiBfX2dldF9uZXN0ZWRfaGVscGVyPF9FeD46Ol9TX2dldChfX2V4KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICB2b2lkCisgICAgX190aHJvd193aXRoX25lc3RlZChfRXgmJiwgY29uc3QgbmVzdGVkX2V4Y2VwdGlvbiogPSAwKQorICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXg+CisgICAgdm9pZAorICAgIF9fdGhyb3dfd2l0aF9uZXN0ZWQoX0V4JiYsIC4uLikgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOworCisgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCwgYnV0IGlzIG5lZWRlZCB0byBhdm9pZCBhIHdhcm5pbmcKKyAgLy8gYWJvdXQgYW1iaWd1b3VzIGJhc2UgY2xhc3NlcyB3aGVuIGluc3RhbnRpYXRpbmcgdGhyb3dfd2l0aF9uZXN0ZWQ8X0V4PigpCisgIC8vIHdpdGggYSB0eXBlIHRoYXQgaGFzIGFuIGFjY2Vzc2libGUgbmVzdGVkX2V4Y2VwdGlvbiBiYXNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXg+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3Rocm93X3dpdGhfbmVzdGVkKF9FeCYmIF9fZXgsIGNvbnN0IG5lc3RlZF9leGNlcHRpb24qKQorICAgIHsgdGhyb3cgX19leDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdGhyb3dfd2l0aF9uZXN0ZWQoX0V4JiYgX19leCwgLi4uKQorICAgIHsgdGhyb3cgX05lc3RlZF9leGNlcHRpb248X0V4PihzdGF0aWNfY2FzdDxfRXgmJj4oX19leCkpOyB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXg+CisgICAgdm9pZAorICAgIHRocm93X3dpdGhfbmVzdGVkKF9FeCBfX2V4KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKyAgLy8vIElmIEBwIF9fZXggaXMgZGVyaXZlZCBmcm9tIG5lc3RlZF9leGNlcHRpb24sIEBwIF9fZXguIAorICAvLy8gRWxzZSwgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBvYmplY3QgZGVyaXZlZCBmcm9tIGJvdGguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FeD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHRocm93X3dpdGhfbmVzdGVkKF9FeCBfX2V4KQorICAgIHsKKyAgICAgIGlmIChfX2dldF9uZXN0ZWRfZXhjZXB0aW9uKF9fZXgpKQorICAgICAgICB0aHJvdyBfX2V4OworICAgICAgX190aHJvd193aXRoX25lc3RlZChzdGF0aWNfY2FzdDxfRXgmJj4oX19leCksICZfX2V4KTsKKyAgICB9CisKKyAgLy8vIElmIEBwIF9fZXggaXMgZGVyaXZlZCBmcm9tIG5lc3RlZF9leGNlcHRpb24sIEBwIF9fZXgucmV0aHJvd19uZXN0ZWQoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0V4PgorICAgIGlubGluZSB2b2lkCisgICAgcmV0aHJvd19pZl9uZXN0ZWQoY29uc3QgX0V4JiBfX2V4KQorICAgIHsKKyAgICAgIGlmIChjb25zdCBuZXN0ZWRfZXhjZXB0aW9uKiBfX25lc3RlZCA9IF9fZ2V0X25lc3RlZF9leGNlcHRpb24oX19leCkpCisgICAgICAgIF9fbmVzdGVkLT5yZXRocm93X25lc3RlZCgpOworICAgIH0KKworICAvLy8gT3ZlcmxvYWQsIFNlZSBOMjYxOQorICBpbmxpbmUgdm9pZAorICByZXRocm93X2lmX25lc3RlZChjb25zdCBuZXN0ZWRfZXhjZXB0aW9uJiBfX2V4KQorICB7IF9fZXgucmV0aHJvd19uZXN0ZWQoKTsgfQorCisgIC8vIEB9IGdyb3VwIGV4Y2VwdGlvbnMKK30gLy8gbmFtZXNwYWNlIHN0ZAorCit9IC8vIGV4dGVybiAiQysrIgorCisjZW5kaWYgLy8gQysrMTEKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKworI2VuZGlmIC8vIF9HTElCQ1hYX05FU1RFRF9FWENFUFRJT05fSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL29zdHJlYW0udGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL29zdHJlYW0udGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDRhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvb3N0cmVhbS50Y2MKQEAgLTAsMCArMSw0MDcgQEAKKy8vIG9zdHJlYW0gY2xhc3NlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9vc3RyZWFtLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le29zdHJlYW19CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjYuMiAgT3V0cHV0IHN0cmVhbXMKKy8vCisKKyNpZm5kZWYgX09TVFJFQU1fVENDCisjZGVmaW5lIF9PU1RSRUFNX1RDQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvY3h4YWJpX2ZvcmNlZC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKKyAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQorICAgIDogX01fb2soZmFsc2UpLCBfTV9vcyhfX29zKQorICAgIHsKKyAgICAgIC8vIFhYWCBNVAorICAgICAgaWYgKF9fb3MudGllKCkgJiYgX19vcy5nb29kKCkpCisJX19vcy50aWUoKS0+Zmx1c2goKTsKKworICAgICAgaWYgKF9fb3MuZ29vZCgpKQorCV9NX29rID0gdHJ1ZTsKKyAgICAgIGVsc2UKKwlfX29zLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgorICAgICAgX01faW5zZXJ0KF9WYWx1ZVQgX192KQorICAgICAgeworCXNlbnRyeSBfX2NlcmIoKnRoaXMpOworCWlmIChfX2NlcmIpCisJICB7CisJICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisJICAgIF9fdHJ5CisJICAgICAgeworCQljb25zdCBfX251bV9wdXRfdHlwZSYgX19ucCA9IF9fY2hlY2tfZmFjZXQodGhpcy0+X01fbnVtX3B1dCk7CisJCWlmIChfX25wLnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX192KS5mYWlsZWQoKSkKKwkJICBfX2VyciB8PSBpb3NfYmFzZTo6YmFkYml0OworCSAgICAgIH0KKwkgICAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICAgIHsKKwkJdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CQkKKwkJX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgICAgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICAgIGlmIChfX2VycikKKwkgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisJICB9CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxMTcuIGJhc2ljX29zdHJlYW0gdXNlcyBub25leGlzdGVudCBudW1fcHV0IG1lbWJlciBmdW5jdGlvbnMuCisgICAgICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKKyAgICAgIGlmIChfX2ZtdCA9PSBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ID09IGlvc19iYXNlOjpoZXgpCisJcmV0dXJuIF9NX2luc2VydChzdGF0aWNfY2FzdDxsb25nPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOworICAgICAgZWxzZQorCXJldHVybiBfTV9pbnNlcnQoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBvcGVyYXRvcjw8KGludCBfX24pCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTE3LiBiYXNpY19vc3RyZWFtIHVzZXMgbm9uZXhpc3RlbnQgbnVtX3B1dCBtZW1iZXIgZnVuY3Rpb25zLgorICAgICAgY29uc3QgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CisgICAgICBpZiAoX19mbXQgPT0gaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCA9PSBpb3NfYmFzZTo6aGV4KQorCXJldHVybiBfTV9pbnNlcnQoc3RhdGljX2Nhc3Q8bG9uZz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CisgICAgICBlbHNlCisJcmV0dXJuIF9NX2luc2VydChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKKyAgICB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCisgICAgeworICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOworICAgICAgaWYgKF9fY2VyYiAmJiBfX3NiaW4pCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIGlmICghX19jb3B5X3N0cmVhbWJ1ZnMoX19zYmluLCB0aGlzLT5yZGJ1ZigpKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwkJCisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsgfQorCX0KKyAgICAgIGVsc2UgaWYgKCFfX3NiaW4pCisJX19lcnIgfD0gaW9zX2Jhc2U6OmJhZGJpdDsKKyAgICAgIGlmIChfX2VycikKKwl0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBwdXQoY2hhcl90eXBlIF9fYykKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiA2MC4gV2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj8KKyAgICAgIC8vIGJhc2ljX29zdHJlYW06OnB1dChjaGFyX3R5cGUpIGlzIGFuIHVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbi4KKyAgICAgIC8vIERSIDYzLiBFeGNlcHRpb24taGFuZGxpbmcgcG9saWN5IGZvciB1bmZvcm1hdHRlZCBvdXRwdXQuCisgICAgICAvLyBVbmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zIHNob3VsZCBjYXRjaCBleGNlcHRpb25zIHRocm93bgorICAgICAgLy8gZnJvbSBzdHJlYW1idWYgbWVtYmVycy4KKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IGludF90eXBlIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dGMoX19jKTsKKwkgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0LCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6YmFkYml0OworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsJCQorCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCSAgaWYgKF9fZXJyKQorCSAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CisgICAgd3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDYwLiBXaGF0IGlzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uPworICAgICAgLy8gYmFzaWNfb3N0cmVhbTo6d3JpdGUoY29uc3QgY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkgaXMgYW4KKyAgICAgIC8vIHVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbi4KKyAgICAgIC8vIERSIDYzLiBFeGNlcHRpb24taGFuZGxpbmcgcG9saWN5IGZvciB1bmZvcm1hdHRlZCBvdXRwdXQuCisgICAgICAvLyBVbmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zIHNob3VsZCBjYXRjaCBleGNlcHRpb25zIHRocm93bgorICAgICAgLy8gZnJvbSBzdHJlYW1idWYgbWVtYmVycy4KKyAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7IF9NX3dyaXRlKF9fcywgX19uKTsgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CQkKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBmbHVzaCgpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgNjAuIFdoYXQgaXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24/CisgICAgICAvLyBiYXNpY19vc3RyZWFtOjpmbHVzaCgpIGlzICpub3QqIGFuIHVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbi4KKyAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICBfX3RyeQorCXsKKwkgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmJhZGJpdDsKKwl9CisgICAgICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJeworCSAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CQkKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKyAgICAgIGlmIChfX2VycikKKwl0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICB0eXBlbmFtZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICB0ZWxscCgpCisgICAgeworICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CisgICAgICBfX3RyeQorCXsKKwkgIGlmICghdGhpcy0+ZmFpbCgpKQorCSAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CisJfQorICAgICAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCXsKKwkgIHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwkJCisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7IHRoaXMtPl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzZWVrcChwb3NfdHlwZSBfX3BvcykKKyAgICB7CisgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworICAgICAgX190cnkKKwl7CisJICBpZiAoIXRoaXMtPmZhaWwoKSkKKwkgICAgeworCSAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgICAgICAvLyAxMzYuICBzZWVrcCwgc2Vla2cgc2V0dGluZyB3cm9uZyBzdHJlYW1zPworCSAgICAgIGNvbnN0IHBvc190eXBlIF9fcCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsCisJCQkJCQkJICAgICBpb3NfYmFzZTo6b3V0KTsKKworCSAgICAgIC8vIDEyOS4gTmVlZCBlcnJvciBpbmRpY2F0aW9uIGZyb20gc2Vla3AoKSBhbmQgc2Vla2coKQorCSAgICAgIGlmIChfX3AgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgIH0KKwl9CisgICAgICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJeworCSAgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CQkKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsgdGhpcy0+X01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKyAgICAgIGlmIChfX2VycikKKwl0aGlzLT5zZXRzdGF0ZShfX2Vycik7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCisgICAgeworICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIF9fdHJ5CisJeworCSAgaWYgKCF0aGlzLT5mYWlsKCkpCisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gMTM2LiAgc2Vla3AsIHNlZWtnIHNldHRpbmcgd3Jvbmcgc3RyZWFtcz8KKwkgICAgICBjb25zdCBwb3NfdHlwZSBfX3AgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2RpciwKKwkJCQkJCQkgICAgIGlvc19iYXNlOjpvdXQpOworCisJICAgICAgLy8gMTI5LiBOZWVkIGVycm9yIGluZGljYXRpb24gZnJvbSBzZWVrcCgpIGFuZCBzZWVrZygpCisJICAgICAgaWYgKF9fcCA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwkgICAgfQorCX0KKyAgICAgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwl7CisJICB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsJCQorCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeyB0aGlzLT5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorICAgICAgaWYgKF9fZXJyKQorCXRoaXMtPnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKKyAgICB7CisgICAgICBpZiAoIV9fcykKKwlfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKyAgICAgIGVsc2UKKwl7CisJICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAvLyAxNjcuICBJbXByb3BlciB1c2Ugb2YgdHJhaXRzX3R5cGU6Omxlbmd0aCgpCisJICBjb25zdCBzaXplX3QgX19jbGVuID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChfX3MpOworCSAgX190cnkKKwkgICAgeworCSAgICAgIHN0cnVjdCBfX3B0cl9ndWFyZAorCSAgICAgIHsKKwkJX0NoYXJUICpfX3A7CisJCV9fcHRyX2d1YXJkIChfQ2hhclQgKl9faXApOiBfX3AoX19pcCkgeyB9CisJCX5fX3B0cl9ndWFyZCgpIHsgZGVsZXRlW10gX19wOyB9CisJCV9DaGFyVCogX19nZXQoKSB7IHJldHVybiBfX3A7IH0KKwkgICAgICB9IF9fcGcgKG5ldyBfQ2hhclRbX19jbGVuXSk7CisKKwkgICAgICBfQ2hhclQgKl9fd3MgPSBfX3BnLl9fZ2V0KCk7CisJICAgICAgZm9yIChzaXplX3QgIF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCisJCV9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKKwkgICAgICBfX29zdHJlYW1faW5zZXJ0KF9fb3V0LCBfX3dzLCBfX2NsZW4pOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICBfX291dC5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgX19vdXQuX01fc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwl9CisgICAgICByZXR1cm4gX19vdXQ7CisgICAgfQorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjaGFyKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY2hhciopOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hhciopOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2lnbmVkIGNoYXIqKTsKKworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KHVuc2lnbmVkIGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KGJvb2wpOworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9zdHJlYW06Ol9NX2luc2VydChsb25nIGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KHVuc2lnbmVkIGxvbmcgbG9uZyk7CisjZW5kaWYKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9zdHJlYW06Ol9NX2luc2VydChkb3VibGUpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3N0cmVhbTo6X01faW5zZXJ0KGxvbmcgZG91YmxlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9zdHJlYW06Ol9NX2luc2VydChjb25zdCB2b2lkKik7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRsKHdvc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kcyh3b3N0cmVhbSYpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGZsdXNoKHdvc3RyZWFtJik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIHdjaGFyX3QpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjaGFyKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjaGFyKik7CisKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiB3b3N0cmVhbTo6X01faW5zZXJ0KGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIHdvc3RyZWFtOjpfTV9pbnNlcnQodW5zaWduZWQgbG9uZyk7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgd29zdHJlYW06Ol9NX2luc2VydChib29sKTsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfTE9OR19MT05HCisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgd29zdHJlYW06Ol9NX2luc2VydChsb25nIGxvbmcpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIHdvc3RyZWFtOjpfTV9pbnNlcnQodW5zaWduZWQgbG9uZyBsb25nKTsKKyNlbmRpZgorICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIHdvc3RyZWFtOjpfTV9pbnNlcnQoZG91YmxlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiB3b3N0cmVhbTo6X01faW5zZXJ0KGxvbmcgZG91YmxlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiB3b3N0cmVhbTo6X01faW5zZXJ0KGNvbnN0IHZvaWQqKTsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL29zdHJlYW1faW5zZXJ0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvb3N0cmVhbV9pbnNlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmEwOWZiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL29zdHJlYW1faW5zZXJ0LmgKQEAgLTAsMCArMSwxMjkgQEAKKy8vIEhlbHBlcnMgZm9yIG9zdHJlYW0gaW5zZXJ0ZXJzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL29zdHJlYW1faW5zZXJ0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtvc3RyZWFtfQorICovCisKKyNpZm5kZWYgX09TVFJFQU1fSU5TRVJUX0gKKyNkZWZpbmUgX09TVFJFQU1fSU5TRVJUX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8Yml0cy9jeHhhYmlfZm9yY2VkLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX29zdHJlYW1fd3JpdGUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKKwkJICAgIGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgICAgICBfX29zdHJlYW1fdHlwZTsgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19wdXQgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CisgICAgICBpZiAoX19wdXQgIT0gX19uKQorCV9fb3V0LnNldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fb3N0cmVhbV9maWxsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIHN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICAgICAgIF9fb3N0cmVhbV90eXBlOyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgX0NoYXJUIF9fYyA9IF9fb3V0LmZpbGwoKTsKKyAgICAgIGZvciAoOyBfX24gPiAwOyAtLV9fbikKKwl7CisJICBjb25zdCB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX3B1dCA9IF9fb3V0LnJkYnVmKCktPnNwdXRjKF9fYyk7CisJICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19wdXQsIF9UcmFpdHM6OmVvZigpKSkKKwkgICAgeworCSAgICAgIF9fb3V0LnNldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgX19vc3RyZWFtX2luc2VydChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAorCQkgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICB7CisgICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgICAgICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKKwkgICAgICBpZiAoX193ID4gX19uKQorCQl7CisJCSAgY29uc3QgYm9vbCBfX2xlZnQgPSAoKF9fb3V0LmZsYWdzKCkKKwkJCQkJJiBfX2lvc19iYXNlOjphZGp1c3RmaWVsZCkKKwkJCQkgICAgICAgPT0gX19pb3NfYmFzZTo6bGVmdCk7CisJCSAgaWYgKCFfX2xlZnQpCisJCSAgICBfX29zdHJlYW1fZmlsbChfX291dCwgX193IC0gX19uKTsKKwkJICBpZiAoX19vdXQuZ29vZCgpKQorCQkgICAgX19vc3RyZWFtX3dyaXRlKF9fb3V0LCBfX3MsIF9fbik7CisJCSAgaWYgKF9fbGVmdCAmJiBfX291dC5nb29kKCkpCisJCSAgICBfX29zdHJlYW1fZmlsbChfX291dCwgX193IC0gX19uKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJX19vc3RyZWFtX3dyaXRlKF9fb3V0LCBfX3MsIF9fbik7CisJICAgICAgX19vdXQud2lkdGgoMCk7CisJICAgIH0KKwkgIF9fY2F0Y2goX19jeHhhYml2MTo6X19mb3JjZWRfdW53aW5kJikKKwkgICAgeworCSAgICAgIF9fb3V0Ll9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IF9fb3V0Ll9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7IH0KKwl9CisgICAgICByZXR1cm4gX19vdXQ7CisgICAgfQorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgX19vc3RyZWFtX2luc2VydChvc3RyZWFtJiwgY29uc3QgY2hhciosIHN0cmVhbXNpemUpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBfX29zdHJlYW1faW5zZXJ0KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCosCisJCQkJCSAgICAgc3RyZWFtc2l6ZSk7CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX09TVFJFQU1fSU5TRVJUX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9wb3N0eXBlcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3Bvc3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4ZGZlMQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9wb3N0eXBlcy5oCkBAIC0wLDAgKzEsMjQyIEBACisvLyBQb3NpdGlvbiB0eXBlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9wb3N0eXBlcy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7aW9zZndkfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy40LjEgLSBUeXBlcworLy8gSVNPIEMrKyAxNDg4MjogMjcuNC4zIC0gVGVtcGxhdGUgY2xhc3MgZnBvcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9QT1NUWVBFU19ICisjZGVmaW5lIF9HTElCQ1hYX1BPU1RZUEVTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjd2NoYXI+IC8vIEZvciBtYnN0YXRlX3QKKworLy8gWFhYIElmIDxzdGRpbnQuaD4gaXMgcmVhbGx5IG5lZWRlZCwgbWFrZSBzdXJlIHRvIGRlZmluZSB0aGUgbWFjcm9zCisvLyBiZWZvcmUgaW5jbHVkaW5nIGl0LCBpbiBvcmRlciBub3QgdG8gYnJlYWsgPHRyMS9jc3RkaW50PiAoYW5kIDxjc3RkaW50PgorLy8gaW4gQysrMHgpLiAgUmVjb25zaWRlciBhbGwgdGhpcyBhcyBzb29uIGFzIHBvc3NpYmxlLi4uCisjaWYgKGRlZmluZWQoX0dMSUJDWFhfSEFWRV9JTlQ2NF9UKSAmJiAhZGVmaW5lZChfR0xJQkNYWF9IQVZFX0lOVDY0X1RfTE9ORykgXAorICAgICAmJiAhZGVmaW5lZChfR0xJQkNYWF9IQVZFX0lOVDY0X1RfTE9OR19MT05HKSkKKworI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjIGRlZmluZSBfVU5ERUZfX1NURENfTElNSVRfTUFDUk9TCisjIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCisjZW5kaWYKKyNpZm5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyBkZWZpbmUgX1VOREVGX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW50Lmg+IC8vIEZvciBpbnQ2NF90CisjaWZkZWYgX1VOREVGX19TVERDX0xJTUlUX01BQ1JPUworIyB1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjIHVuZGVmIF9VTkRFRl9fU1REQ19MSU1JVF9NQUNST1MKKyNlbmRpZgorI2lmZGVmIF9VTkRFRl9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgdW5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyB1bmRlZiBfVU5ERUZfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjZW5kaWYKKworI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBUaGUgdHlwZXMgc3RyZWFtb2ZmLCBzdHJlYW1wb3MgYW5kIHdzdHJlYW1wb3MgYW5kIHRoZSBjbGFzcworICAvLyB0ZW1wbGF0ZSBmcG9zPD4gYXJlIGRlc2NyaWJlZCBpbiBjbGF1c2VzIDIxLjEuMiwgMjEuMS4zLCAyNy4xLjIsCisgIC8vIDI3LjIsIDI3LjQuMSwgMjcuNC4zIGFuZCBELjYuIERlc3BpdGUgYWxsIHRoaXMgdmVyYmlhZ2UsIHRoZQorICAvLyBiZWhhdmlvdXIgb2YgdGhlc2UgdHlwZXMgaXMgbW9zdGx5IGltcGxlbWVudGF0aW9uIGRlZmluZWQgb3IKKyAgLy8gdW5zcGVjaWZpZWQuIFRoZSBiZWhhdmlvdXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBhcyBub3RlZAorICAvLyBiZWxvdy4KKworICAvKioKKyAgICogIEBicmllZiAgVHlwZSB1c2VkIGJ5IGZwb3MsIGNoYXJfdHJhaXRzPGNoYXI+LCBhbmQgY2hhcl90cmFpdHM8d2NoYXJfdD4uCisgICAqCisgICAqICBJbiBjbGF1c2VzIDIxLjEuMy4xIGFuZCAyNy40LjEgc3RyZWFtb2ZmIGlzIGRlc2NyaWJlZCBhcyBhbgorICAgKiAgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLgorICAgKiAgTm90ZTogSW4gdmVyc2lvbnMgb2YgR0NDIHVwIHRvIGFuZCBpbmNsdWRpbmcgR0NDIDMuMywgc3RyZWFtb2ZmCisgICAqICB3YXMgdHlwZWRlZiBsb25nLgorICAqLyAgCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9JTlQ2NF9UX0xPTkcKKyAgdHlwZWRlZiBsb25nICAgICAgICAgIHN0cmVhbW9mZjsKKyNlbGlmIGRlZmluZWQoX0dMSUJDWFhfSEFWRV9JTlQ2NF9UX0xPTkdfTE9ORykKKyAgdHlwZWRlZiBsb25nIGxvbmcgICAgIHN0cmVhbW9mZjsKKyNlbGlmIGRlZmluZWQoX0dMSUJDWFhfSEFWRV9JTlQ2NF9UKSAKKyAgdHlwZWRlZiBpbnQ2NF90ICAgICAgIHN0cmVhbW9mZjsKKyNlbHNlCisgIHR5cGVkZWYgbG9uZyBsb25nICAgICBzdHJlYW1vZmY7CisjZW5kaWYKKworICAvLy8gSW50ZWdyYWwgdHlwZSBmb3IgSS9PIG9wZXJhdGlvbiBjb3VudHMgYW5kIGJ1ZmZlciBzaXplcy4KKyAgdHlwZWRlZiBwdHJkaWZmX3QJc3RyZWFtc2l6ZTsgLy8gU2lnbmVkIGludGVncmFsIHR5cGUKKworICAvKioKKyAgICogIEBicmllZiAgQ2xhc3MgcmVwcmVzZW50aW5nIHN0cmVhbSBwb3NpdGlvbnMuCisgICAqCisgICAqICBUaGUgc3RhbmRhcmQgcGxhY2VzIG5vIHJlcXVpcmVtZW50cyB1cG9uIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgU3RhdGVULgorICAgKiAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBTdGF0ZVQgbXVzdCBiZSBEZWZhdWx0Q29uc3RydWN0aWJsZSwKKyAgICogIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlLiAgVGhlIHN0YW5kYXJkIG9ubHkgcmVxdWlyZXMgdGhhdCBmcG9zCisgICAqICBzaG91bGQgY29udGFpbiBhIG1lbWJlciBvZiB0eXBlIFN0YXRlVC4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBpdCBhbHNvCisgICAqICBjb250YWlucyBhbiBvZmZzZXQgc3RvcmVkIGFzIGEgc2lnbmVkIGludGVnZXIuCisgICAqCisgICAqICBAcGFyYW0gIFN0YXRlVCAgVHlwZSBwYXNzZWQgdG8gYW5kIHJldHVybmVkIGZyb20gc3RhdGUoKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CisgICAgY2xhc3MgZnBvcworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgc3RyZWFtb2ZmCSAgICAgICAgICAgICAgICBfTV9vZmY7CisgICAgICBfU3RhdGVUCQkJX01fc3RhdGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBUaGUgc3RhbmRhcmQgZG9lc24ndCByZXF1aXJlIHRoYXQgZnBvcyBvYmplY3RzIGNhbiBiZSBkZWZhdWx0CisgICAgICAvLyBjb25zdHJ1Y3RlZC4gVGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIGRlZmF1bHQKKyAgICAgIC8vIGNvbnN0cnVjdG9yIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIG9mZnNldCB0byAwIGFuZCBkZWZhdWx0CisgICAgICAvLyBjb25zdHJ1Y3RzIHRoZSBzdGF0ZS4KKyAgICAgIGZwb3MoKQorICAgICAgOiBfTV9vZmYoMCksIF9NX3N0YXRlKCkgeyB9CisKKyAgICAgIC8vIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGZwb3Mgb2JqZWN0cyBjYW4gYmUgY29uc3RydWN0ZWQKKyAgICAgIC8vIGZyb20gc3RyZWFtb2ZmIG9iamVjdHMgdXNpbmcgdGhlIGNvbnN0cnVjdG9yIHN5bnRheCwgYW5kCisgICAgICAvLyBmYWlscyB0byBnaXZlIGFueSBtZWFuaW5nZnVsIHNlbWFudGljcy4gSW4gdGhpcworICAgICAgLy8gaW1wbGVtZW50YXRpb24gaW1wbGljaXQgY29udmVyc2lvbiBpcyBhbHNvIGFsbG93ZWQsIGFuZCB0aGlzCisgICAgICAvLyBjb25zdHJ1Y3RvciBzdG9yZXMgdGhlIHN0cmVhbW9mZiBhcyB0aGUgb2Zmc2V0IGFuZCBkZWZhdWx0CisgICAgICAvLyBjb25zdHJ1Y3RzIHRoZSBzdGF0ZS4KKyAgICAgIC8vLyBDb25zdHJ1Y3QgcG9zaXRpb24gZnJvbSBvZmZzZXQuCisgICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZikKKyAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01fc3RhdGUoKSB7IH0KKworICAgICAgLy8vIENvbnZlcnQgdG8gc3RyZWFtb2ZmLgorICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CisKKyAgICAgIC8vLyBSZW1lbWJlciB0aGUgdmFsdWUgb2YgQGEgc3QuCisgICAgICB2b2lkCisgICAgICBzdGF0ZShfU3RhdGVUIF9fc3QpCisgICAgICB7IF9NX3N0YXRlID0gX19zdDsgfQorCisgICAgICAvLy8gUmV0dXJuIHRoZSBsYXN0IHNldCB2YWx1ZSBvZiBAYSBzdC4KKyAgICAgIF9TdGF0ZVQKKyAgICAgIHN0YXRlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N0YXRlOyB9CisKKyAgICAgIC8vIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IHRoaXMgb3BlcmF0b3IgbXVzdCBiZSBkZWZpbmVkLCBidXQKKyAgICAgIC8vIGdpdmVzIG5vIHNlbWFudGljcy4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBpdCBqdXN0IGFkZHMgaXRzCisgICAgICAvLyBhcmd1bWVudCB0byB0aGUgc3RvcmVkIG9mZnNldCBhbmQgcmV0dXJucyAqdGhpcy4KKyAgICAgIC8vLyBBZGQgb2Zmc2V0IHRvIHRoaXMgcG9zaXRpb24uCisgICAgICBmcG9zJgorICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpCisgICAgICB7CisJX01fb2ZmICs9IF9fb2ZmOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gVGhlIHN0YW5kYXJkIHJlcXVpcmVzIHRoYXQgdGhpcyBvcGVyYXRvciBtdXN0IGJlIGRlZmluZWQsIGJ1dAorICAgICAgLy8gZ2l2ZXMgbm8gc2VtYW50aWNzLiBJbiB0aGlzIGltcGxlbWVudGF0aW9uIGl0IGp1c3Qgc3VidHJhY3RzCisgICAgICAvLyBpdHMgYXJndW1lbnQgZnJvbSB0aGUgc3RvcmVkIG9mZnNldCBhbmQgcmV0dXJucyAqdGhpcy4KKyAgICAgIC8vLyBTdWJ0cmFjdCBvZmZzZXQgZnJvbSB0aGlzIHBvc2l0aW9uLgorICAgICAgZnBvcyYKKyAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKQorICAgICAgeworCV9NX29mZiAtPSBfX29mZjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IHRoaXMgb3BlcmF0b3IgbXVzdCBiZSBkZWZpbmVkLCBidXQKKyAgICAgIC8vIGRlZmluZXMgaXRzIHNlbWFudGljcyBvbmx5IGluIHRlcm1zIG9mIG9wZXJhdG9yLS4gSW4gdGhpcworICAgICAgLy8gaW1wbGVtZW50YXRpb24gaXQgY29uc3RydWN0cyBhIGNvcHkgb2YgKnRoaXMsIGFkZHMgdGhlCisgICAgICAvLyBhcmd1bWVudCB0byB0aGF0IGNvcHkgdXNpbmcgb3BlcmF0b3IrPSBhbmQgdGhlbiByZXR1cm5zIHRoZQorICAgICAgLy8gY29weS4KKyAgICAgIC8vLyBBZGQgcG9zaXRpb24gYW5kIG9mZnNldC4KKyAgICAgIGZwb3MKKyAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpIGNvbnN0CisgICAgICB7CisJZnBvcyBfX3BvcygqdGhpcyk7CisJX19wb3MgKz0gX19vZmY7CisJcmV0dXJuIF9fcG9zOworICAgICAgfQorCisgICAgICAvLyBUaGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCB0aGlzIG9wZXJhdG9yIG11c3QgYmUgZGVmaW5lZCwgYnV0CisgICAgICAvLyBkZWZpbmVzIGl0cyBzZW1hbnRpY3Mgb25seSBpbiB0ZXJtcyBvZiBvcGVyYXRvcisuIEluIHRoaXMKKyAgICAgIC8vIGltcGxlbWVudGF0aW9uIGl0IGNvbnN0cnVjdHMgYSBjb3B5IG9mICp0aGlzLCBzdWJ0cmFjdHMgdGhlCisgICAgICAvLyBhcmd1bWVudCBmcm9tIHRoYXQgY29weSB1c2luZyBvcGVyYXRvci09IGFuZCB0aGVuIHJldHVybnMgdGhlCisgICAgICAvLyBjb3B5LgorICAgICAgLy8vIFN1YnRyYWN0IG9mZnNldCBmcm9tIHBvc2l0aW9uLgorICAgICAgZnBvcworICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikgY29uc3QKKyAgICAgIHsKKwlmcG9zIF9fcG9zKCp0aGlzKTsKKwlfX3BvcyAtPSBfX29mZjsKKwlyZXR1cm4gX19wb3M7CisgICAgICB9CisKKyAgICAgIC8vIFRoZSBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IHRoaXMgb3BlcmF0b3IgbXVzdCBiZSBkZWZpbmVkLCBidXQKKyAgICAgIC8vIGRlZmluZXMgaXRzIHNlbWFudGljcyBvbmx5IGluIHRlcm1zIG9mIG9wZXJhdG9yKy4gSW4gdGhpcworICAgICAgLy8gaW1wbGVtZW50YXRpb24gaXQgcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvZmZzZXQKKyAgICAgIC8vIHN0b3JlZCBpbiAqdGhpcyBhbmQgaW4gdGhlIGFyZ3VtZW50LgorICAgICAgLy8vIFN1YnRyYWN0IHBvc2l0aW9uIHRvIHJldHVybiBvZmZzZXQuCisgICAgICBzdHJlYW1vZmYKKyAgICAgIG9wZXJhdG9yLShjb25zdCBmcG9zJiBfX290aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fb2ZmIC0gX19vdGhlci5fTV9vZmY7IH0KKyAgICB9OworCisgIC8vIFRoZSBzdGFuZGFyZCBvbmx5IHJlcXVpcmVzIHRoYXQgb3BlcmF0b3I9PSBtdXN0IGJlIGFuCisgIC8vIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiBJbiB0aGlzIGltcGxlbWVudGF0aW9uIHR3byBmcG9zPFN0YXRlVD4KKyAgLy8gb2JqZWN0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZXF1aXZhbGVuY2UgY2xhc3MgaWYgdGhlIGNvbnRhaW5lZAorICAvLyBvZmZzZXRzIGNvbXBhcmUgZXF1YWwuCisgIC8vLyBUZXN0IGlmIGVxdWl2YWxlbnQgdG8gYW5vdGhlciBwb3NpdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvczxfU3RhdGVUPiYgX19saHMsIGNvbnN0IGZwb3M8X1N0YXRlVD4mIF9fcmhzKQorICAgIHsgcmV0dXJuIHN0cmVhbW9mZihfX2xocykgPT0gc3RyZWFtb2ZmKF9fcmhzKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3M8X1N0YXRlVD4mIF9fbGhzLCBjb25zdCBmcG9zPF9TdGF0ZVQ+JiBfX3JocykKKyAgICB7IHJldHVybiBzdHJlYW1vZmYoX19saHMpICE9IHN0cmVhbW9mZihfX3Jocyk7IH0KKworICAvLyBDbGF1c2VzIDIxLjEuMy4xIGFuZCAyMS4xLjMuMiBkZXNjcmliZSBzdHJlYW1wb3MgYW5kIHdzdHJlYW1wb3MKKyAgLy8gYXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlcywgYnV0IGNsYXVzZSAyNy4yIHJlcXVpcmVzIHRoYXQKKyAgLy8gdGhleSBtdXN0IGJvdGggYmUgdHlwZWRlZnMgZm9yIGZwb3M8bWJzdGF0ZV90PgorICAvLy8gRmlsZSBwb3NpdGlvbiBmb3IgY2hhciBzdHJlYW1zLgorICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CisgIC8vLyBGaWxlIHBvc2l0aW9uIGZvciB3Y2hhcl90IHN0cmVhbXMuCisgIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIC8vLyBGaWxlIHBvc2l0aW9uIGZvciBjaGFyMTZfdCBzdHJlYW1zLgorICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB1MTZzdHJlYW1wb3M7CisgIC8vLyBGaWxlIHBvc2l0aW9uIGZvciBjaGFyMzJfdCBzdHJlYW1zLgorICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB1MzJzdHJlYW1wb3M7CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9wdHJfdHJhaXRzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcHRyX3RyYWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhODVmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcHRyX3RyYWl0cy5oCkBAIC0wLDAgKzEsMTgyIEBACisvLyBQb2ludGVyIFRyYWl0cyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9wdHJfdHJhaXRzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttZW1vcnl9CisgKi8KKworI2lmbmRlZiBfUFRSX1RSQUlUU19ICisjZGVmaW5lIF9QVFJfVFJBSVRTX0ggMQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIEZvciBfR0xJQkNYWF9IQVNfTkVTVEVEX1RZUEUKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCitfR0xJQkNYWF9IQVNfTkVTVEVEX1RZUEUoZWxlbWVudF90eXBlKQorX0dMSUJDWFhfSEFTX05FU1RFRF9UWVBFKGRpZmZlcmVuY2VfdHlwZSkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSBfX2hhc19lbGVtZW50X3R5cGU8X1RwPjo6dmFsdWU+CisgICAgc3RydWN0IF9fcHRydHJfZWx0X3R5cGU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX3B0cnRyX2VsdF90eXBlPF9UcCwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcDo6ZWxlbWVudF90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4gY2xhc3MgX1NvbWVQdHIsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX3B0cnRyX2VsdF90eXBlPF9Tb21lUHRyPF9UcCwgX0FyZ3MuLi4+LCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSBfX2hhc19kaWZmZXJlbmNlX3R5cGU8X1RwPjo6dmFsdWU+CisgICAgc3RydWN0IF9fcHRydHJfZGlmZl90eXBlCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHA6OmRpZmZlcmVuY2VfdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fcHRydHJfZGlmZl90eXBlPF9UcCwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0ciwgdHlwZW5hbWUgX1VwPgorICAgIGNsYXNzIF9fcHRydHJfcmViaW5kX2hlbHBlcgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QdHIyLCB0eXBlbmFtZSBfVXAyPgorCXN0YXRpYyBjb25zdGV4cHIgYm9vbAorICAgICAgIAlfU19jaGsodHlwZW5hbWUgX1B0cjI6OnRlbXBsYXRlIHJlYmluZDxfVXAyPiopCisgICAgICAgCXsgcmV0dXJuIHRydWU7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wKKyAgICAgICAJX1NfY2hrKC4uLikKKyAgICAgICAJeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWUgPSBfU19jaGs8X1B0ciwgX1VwPihudWxscHRyKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QdHIsIHR5cGVuYW1lIF9VcD4KKyAgICBjb25zdCBib29sIF9fcHRydHJfcmViaW5kX2hlbHBlcjxfUHRyLCBfVXA+OjpfX3ZhbHVlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwLAorICAgICAgICAgICBib29sID0gX19wdHJ0cl9yZWJpbmRfaGVscGVyPF9UcCwgX1VwPjo6X192YWx1ZT4KKyAgICBzdHJ1Y3QgX19wdHJ0cl9yZWJpbmQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IF9fcHRydHJfcmViaW5kPF9UcCwgX1VwLCB0cnVlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwOjp0ZW1wbGF0ZSByZWJpbmQ8X1VwPiBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUuLi4+IGNsYXNzIF9Tb21lUHRyLCB0eXBlbmFtZSBfVXAsCisgICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX3B0cnRyX3JlYmluZDxfU29tZVB0cjxfVHAsIF9BcmdzLi4uPiwgX1VwLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Tb21lUHRyPF9VcCwgX0FyZ3MuLi4+IF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgPSB0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT4KKyAgICBzdHJ1Y3QgX19wdHJ0cl9ub3Rfdm9pZAorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19wdHJ0cl9ub3Rfdm9pZDxfVHAsIHZvaWQ+CisgICAgeworICAgICAgc3RydWN0IF9fdHlwZSB7IH07CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHRyPgorICAgIGNsYXNzIF9fcHRydHJfcG9pbnRlcl90bworICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19wdHJ0cl9lbHRfdHlwZTxfUHRyPjo6X190eXBlICAgX19vcmlnX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcHRydHJfbm90X3ZvaWQ8X19vcmlnX3R5cGU+OjpfX3R5cGUgX19lbGVtZW50X3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgX1B0ciBwb2ludGVyX3RvKF9fZWxlbWVudF90eXBlJiBfX2UpCisgICAgICB7IHJldHVybiBfUHRyOjpwb2ludGVyX3RvKF9fZSk7IH0KKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgIFVuaWZvcm0gaW50ZXJmYWNlIHRvIGFsbCBwb2ludGVyLWxpa2UgdHlwZXMKKyAgICogQGluZ3JvdXAgcG9pbnRlcl9hYnN0cmFjdGlvbnMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0cj4KKyAgICBzdHJ1Y3QgcG9pbnRlcl90cmFpdHMgOiBfX3B0cnRyX3BvaW50ZXJfdG88X1B0cj4KKyAgICB7CisgICAgICAvLy8gVGhlIHBvaW50ZXIgdHlwZQorICAgICAgdHlwZWRlZiBfUHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgLy8vIFRoZSB0eXBlIHBvaW50ZWQgdG8KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19wdHJ0cl9lbHRfdHlwZTxfUHRyPjo6X190eXBlICAgZWxlbWVudF90eXBlOworICAgICAgLy8vIFR5cGUgdXNlZCB0byByZXByZXNlbnQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcG9pbnRlcnMKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19wdHJ0cl9kaWZmX3R5cGU8X1B0cj46Ol9fdHlwZSAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHVzaW5nIHJlYmluZCA9IHR5cGVuYW1lIF9fcHRydHJfcmViaW5kPF9QdHIsIF9VcD46Ol9fdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIGJ1aWx0LWluIHBvaW50ZXJzLgorICAgKiBAaW5ncm91cCBwb2ludGVyX2Fic3RyYWN0aW9ucworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHBvaW50ZXJfdHJhaXRzPF9UcCo+CisgICAgeworICAgICAgLy8vIFRoZSBwb2ludGVyIHR5cGUKKyAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOworICAgICAgLy8vIFRoZSB0eXBlIHBvaW50ZWQgdG8KKyAgICAgIHR5cGVkZWYgX1RwICBlbGVtZW50X3R5cGU7CisgICAgICAvLy8gVHlwZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBwb2ludGVycworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHVzaW5nIHJlYmluZCA9IF9VcCo7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgT2J0YWluIGEgcG9pbnRlciB0byBhbiBvYmplY3QKKyAgICAgICAqICBAcGFyYW0gIF9fciAgQSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IG9mIHR5cGUgQGMgZWxlbWVudF90eXBlCisgICAgICAgKiAgQHJldHVybiBAYyBhZGRyZXNzb2YoX19yKQorICAgICAgKi8KKyAgICAgIHN0YXRpYyBwb2ludGVyCisgICAgICBwb2ludGVyX3RvKHR5cGVuYW1lIF9fcHRydHJfbm90X3ZvaWQ8ZWxlbWVudF90eXBlPjo6X190eXBlJiBfX3IpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6OmFkZHJlc3NvZihfX3IpOyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JhbmRvbS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JhbmRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzN2QyZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmFuZG9tLmgKQEAgLTAsMCArMSw2MDY5IEBACisvLyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiBAZmlsZSBiaXRzL3JhbmRvbS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7cmFuZG9tfQorICovCisKKyNpZm5kZWYgX1JBTkRPTV9ICisjZGVmaW5lIF9SQU5ET01fSCAxCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBbMjYuNF0gUmFuZG9tIG51bWJlciBnZW5lcmF0aW9uCisKKyAgLyoqCisgICAqIEBkZWZncm91cCByYW5kb20gUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisgICAqIEBpbmdyb3VwIG51bWVyaWNzCisgICAqCisgICAqIEEgZmFjaWxpdHkgZm9yIGdlbmVyYXRpbmcgcmFuZG9tIG51bWJlcnMgb24gc2VsZWN0ZWQgZGlzdHJpYnV0aW9ucy4KKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiBBIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBjb252ZXJ0aW5nIHRoZSBvdXRwdXQgb2YgYSAoaW50ZWdyYWwpCisgICAqIHVuaWZvcm0gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgdG8gYSBmbG9hdG5nIHBvaW50IHJlc3VsdCBpbiB0aGUgcmFuZ2UKKyAgICogWzAtMSkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHNpemVfdCBfX2JpdHMsCisJICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgX1JlYWxUeXBlCisgICAgZ2VuZXJhdGVfY2Fub25pY2FsKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX2cpOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKgorICAgKiBJbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICAgKi8KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKyAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywKKwkgICAgIGJvb2wgPSBfX3cgPCBzdGF0aWNfY2FzdDxzaXplX3Q+CisJCQkgIChzdGQ6Om51bWVyaWNfbGltaXRzPF9VSW50VHlwZT46OmRpZ2l0cyk+CisgICAgICBzdHJ1Y3QgX1NoaWZ0CisgICAgICB7IHN0YXRpYyBjb25zdCBfVUludFR5cGUgX192YWx1ZSA9IDA7IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3c+CisgICAgICBzdHJ1Y3QgX1NoaWZ0PF9VSW50VHlwZSwgX193LCB0cnVlPgorICAgICAgeyBzdGF0aWMgY29uc3QgX1VJbnRUeXBlIF9fdmFsdWUgPSBfVUludFR5cGUoMSkgPDwgX193OyB9OworCisgICAgdGVtcGxhdGU8aW50IF9fcywKKwkgICAgIGludCBfX3doaWNoID0gKChfX3MgPD0gX19DSEFSX0JJVF9fICogc2l6ZW9mIChpbnQpKQorCQkJICAgICsgKF9fcyA8PSBfX0NIQVJfQklUX18gKiBzaXplb2YgKGxvbmcpKQorCQkJICAgICsgKF9fcyA8PSBfX0NIQVJfQklUX18gKiBzaXplb2YgKGxvbmcgbG9uZykpCisJCQkgICAgLyogYXNzdW1lIGxvbmcgbG9uZyBubyBiaWdnZXIgdGhhbiBfX2ludDEyOCAqLworCQkJICAgICsgKF9fcyA8PSAxMjgpKT4KKyAgICAgIHN0cnVjdCBfU2VsZWN0X3VpbnRfbGVhc3RfdAorICAgICAgeworCXN0YXRpY19hc3NlcnQoX193aGljaCA8IDAsIC8qIG5lZWRzIHRvIGJlIGRlcGVuZGVudCAqLworCQkgICAgICAic29ycnksIHdvdWxkIGJlIHRvbyBtdWNoIHRyb3VibGUgZm9yIGEgc2xvdyByZXN1bHQiKTsKKyAgICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgX19zPgorICAgICAgc3RydWN0IF9TZWxlY3RfdWludF9sZWFzdF90PF9fcywgND4KKyAgICAgIHsgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdHlwZTsgfTsKKworICAgIHRlbXBsYXRlPGludCBfX3M+CisgICAgICBzdHJ1Y3QgX1NlbGVjdF91aW50X2xlYXN0X3Q8X19zLCAzPgorICAgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdHlwZTsgfTsKKworICAgIHRlbXBsYXRlPGludCBfX3M+CisgICAgICBzdHJ1Y3QgX1NlbGVjdF91aW50X2xlYXN0X3Q8X19zLCAyPgorICAgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB0eXBlOyB9OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX0lOVDEyOAorICAgIHRlbXBsYXRlPGludCBfX3M+CisgICAgICBzdHJ1Y3QgX1NlbGVjdF91aW50X2xlYXN0X3Q8X19zLCAxPgorICAgICAgeyB0eXBlZGVmIHVuc2lnbmVkIF9faW50MTI4IHR5cGU7IH07CisjZW5kaWYKKworICAgIC8vIEFzc3VtZSBhICE9IDAsIGEgPCBtLCBjIDwgbSwgeCA8IG0uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX19tLCBfVHAgX19hLCBfVHAgX19jLAorCSAgICAgYm9vbCBfX2JpZ19lbm91Z2ggPSAoIShfX20gJiAoX19tIC0gMSkpCisJCQkJICB8fCAoX1RwKC0xKSAtIF9fYykgLyBfX2EgPj0gX19tIC0gMSksCisgICAgICAgICAgICAgYm9vbCBfX3NjaHJhZ2Vfb2sgPSBfX20gJSBfX2EgPCBfX20gLyBfX2E+CisgICAgICBzdHJ1Y3QgX01vZAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX1NlbGVjdF91aW50X2xlYXN0X3Q8c3RkOjpfX2xnKF9fYSkKKwkJCQkJICAgICAgKyBzdGQ6Ol9fbGcoX19tKSArIDI+Ojp0eXBlIF9UcDI7CisJc3RhdGljIF9UcAorCV9fY2FsYyhfVHAgX194KQorCXsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oKF9UcDIoX19hKSAqIF9feCArIF9fYykgJSBfX20pOyB9CisgICAgICB9OworCisgICAgLy8gU2NocmFnZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9UcCBfX20sIF9UcCBfX2EsIF9UcCBfX2M+CisgICAgICBzdHJ1Y3QgX01vZDxfVHAsIF9fbSwgX19hLCBfX2MsIGZhbHNlLCB0cnVlPgorICAgICAgeworCXN0YXRpYyBfVHAKKwlfX2NhbGMoX1RwIF9feCk7CisgICAgICB9OworCisgICAgLy8gU3BlY2lhbCBjYXNlczoKKyAgICAvLyAtIGZvciBtID09IDJebiBvciBtID09IDAsIHVuc2lnbmVkIGludGVnZXIgb3ZlcmZsb3cgaXMgc2FmZS4KKyAgICAvLyAtIGEgKiAobSAtIDEpICsgYyBmaXRzIGluIF9UcCwgdGhlcmUgaXMgbm8gb3ZlcmZsb3cuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX19tLCBfVHAgX19hLCBfVHAgX19jLCBib29sIF9fcz4KKyAgICAgIHN0cnVjdCBfTW9kPF9UcCwgX19tLCBfX2EsIF9fYywgdHJ1ZSwgX19zPgorICAgICAgeworCXN0YXRpYyBfVHAKKwlfX2NhbGMoX1RwIF9feCkKKwl7CisJICBfVHAgX19yZXMgPSBfX2EgKiBfX3ggKyBfX2M7CisJICBpZiAoX19tKQorCSAgICBfX3JlcyAlPSBfX207CisJICByZXR1cm4gX19yZXM7CisJfQorICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX1RwIF9fbSwgX1RwIF9fYSA9IDEsIF9UcCBfX2MgPSAwPgorICAgICAgaW5saW5lIF9UcAorICAgICAgX19tb2QoX1RwIF9feCkKKyAgICAgIHsgcmV0dXJuIF9Nb2Q8X1RwLCBfX20sIF9fYSwgX19jPjo6X19jYWxjKF9feCk7IH0KKworICAgIC8qIERldGVybWluZSB3aGV0aGVyIG51bWJlciBpcyBhIHBvd2VyIG9mIDIuICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGlubGluZSBib29sCisgICAgICBfUG93ZXJfb2ZfMihfVHAgX194KQorICAgICAgeworCXJldHVybiAoKF9feCAtIDEpICYgX194KSA9PSAwOworICAgICAgfTsKKworICAgIC8qCisgICAgICogQW4gYWRhcHRvciBjbGFzcyBmb3IgY29udmVydGluZyB0aGUgb3V0cHV0IG9mIGFueSBHZW5lcmF0b3IgaW50bworICAgICAqIHRoZSBpbnB1dCBmb3IgYSBzcGVjaWZpYyBEaXN0cmlidXRpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0VuZ2luZSwgdHlwZW5hbWUgX0RJbnB1dFR5cGU+CisgICAgICBzdHJ1Y3QgX0FkYXB0b3IKKyAgICAgIHsKKworICAgICAgcHVibGljOgorCV9BZGFwdG9yKF9FbmdpbmUmIF9fZykKKwk6IF9NX2coX19nKSB7IH0KKworCV9ESW5wdXRUeXBlCisJbWluKCkgY29uc3QKKwl7IHJldHVybiBfRElucHV0VHlwZSgwKTsgfQorCisJX0RJbnB1dFR5cGUKKwltYXgoKSBjb25zdAorCXsgcmV0dXJuIF9ESW5wdXRUeXBlKDEpOyB9CisKKwkvKgorCSAqIENvbnZlcnRzIGEgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBhZGFwdGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisJICogaW50byBhIHZhbHVlIGluIHRoZSBpbnB1dCBkb21haW4gZm9yIHRoZSBkZXBlbmRlbnQgcmFuZG9tIG51bWJlcgorCSAqIGRpc3RyaWJ1dGlvbi4KKwkgKi8KKwlfRElucHV0VHlwZQorCW9wZXJhdG9yKCkoKQorCXsKKwkgIHJldHVybiBzdGQ6OmdlbmVyYXRlX2Nhbm9uaWNhbDxfRElucHV0VHlwZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxfRElucHV0VHlwZT46OmRpZ2l0cywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0VuZ2luZT4oX01fZyk7CisJfQorCisgICAgICBwcml2YXRlOgorCV9FbmdpbmUmIF9NX2c7CisgICAgICB9OworCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCByYW5kb21fZ2VuZXJhdG9ycyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcnMKKyAgICogQGluZ3JvdXAgcmFuZG9tCisgICAqCisgICAqIFRoZXNlIGNsYXNzZXMgZGVmaW5lIG9iamVjdHMgd2hpY2ggcHJvdmlkZSByYW5kb20gb3IgcHNldWRvcmFuZG9tCisgICAqIG51bWJlcnMsIGVpdGhlciBmcm9tIGEgZGlzY3JldGUgb3IgYSBjb250aW51b3VzIGludGVydmFsLiAgVGhlCisgICAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHN1cHBsaWVkIGFzIGEgcGFydCBvZiB0aGlzIGxpYnJhcnkgYXJlCisgICAqIGFsbCB1bmlmb3JtIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycyB3aGljaCBwcm92aWRlIGEgc2VxdWVuY2Ugb2YKKyAgICogcmFuZG9tIG51bWJlciB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgb3ZlciB0aGVpciByYW5nZS4KKyAgICoKKyAgICogQSBudW1iZXIgZ2VuZXJhdG9yIGlzIGEgZnVuY3Rpb24gb2JqZWN0IHdpdGggYW4gb3BlcmF0b3IoKSB0aGF0CisgICAqIHRha2VzIHplcm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgbnVtYmVyLgorICAgKgorICAgKiBBIGNvbXBsaWFudCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZworICAgKiByZXF1aXJlbWVudHMuICA8dGFibGUgYm9yZGVyPTEgY2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MD4KKyAgICogPGNhcHRpb24gYWxpZ249dG9wPlJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIFJlcXVpcmVtZW50czwvY2FwdGlvbj4KKyAgICogPHRyPjx0ZD5UbyBiZSBkb2N1bWVudGVkLjwvdGQ+PC90cj4gPC90YWJsZT4KKyAgICoKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiBBIG1vZGVsIG9mIGEgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICoKKyAgICogQSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGF0IHByb2R1Y2VzIHBzZXVkb3JhbmRvbSBudW1iZXJzIHZpYQorICAgKiBsaW5lYXIgZnVuY3Rpb246CisgICAqIEBmWworICAgKiAgICAgeF97aSsxfVxsZWZ0YXJyb3coYXhfe2l9ICsgYykgXGJtb2QgbSAKKyAgICogQGZdCisgICAqCisgICAqIFRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgQHAgX1VJbnRUeXBlIG11c3QgYmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZQorICAgKiBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgdmFsdWVzIHVwIHRvIChfX20tMSkuIElmIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIKKyAgICogQHAgX19tIGlzIDAsIHRoZSBtb2R1bHVzIEBwIF9fbSB1c2VkIGlzCisgICAqIHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6bWF4KCkgcGx1cyAxLiBPdGhlcndpc2UsIHRoZSB0ZW1wbGF0ZQorICAgKiBwYXJhbWV0ZXJzIEBwIF9fYSBhbmQgQHAgX19jIG11c3QgYmUgbGVzcyB0aGFuIEBwIF9fbS4KKyAgICoKKyAgICogVGhlIHNpemUgb2YgdGhlIHN0YXRlIGlzIEBmJDFAZiQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgY2xhc3MgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8X1VJbnRUeXBlPjo6dmFsdWUsICJ0ZW1wbGF0ZSBhcmd1bWVudCAiCisJCSAgICAic3Vic3RpdHV0aW5nIF9VSW50VHlwZSBub3QgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSIpOworICAgICAgc3RhdGljX2Fzc2VydChfX20gPT0gMHUgfHwgKF9fYSA8IF9fbSAmJiBfX2MgPCBfX20pLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX20gb3V0IG9mIGJvdW5kcyIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLiAqLworICAgICAgdHlwZWRlZiBfVUludFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8qKiBUaGUgbXVsdGlwbGllci4gKi8KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgbXVsdGlwbGllciAgID0gX19hOworICAgICAgLyoqIEFuIGluY3JlbWVudC4gKi8KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgaW5jcmVtZW50ICAgID0gX19jOworICAgICAgLyoqIFRoZSBtb2R1bHVzLiAqLworICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZSBtb2R1bHVzICAgICAgPSBfX207CisgICAgICBzdGF0aWMgY29uc3RleHByIHJlc3VsdF90eXBlIGRlZmF1bHRfc2VlZCA9IDF1OworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgJWxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICBnZW5lcmF0b3IgZW5naW5lIHdpdGggc2VlZCBAcCBfX3MuICBUaGUgZGVmYXVsdCBzZWVkIHZhbHVlCisgICAgICAgKiAgICAgICAgaXMgMS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19zIFRoZSBpbml0aWFsIHNlZWQgdmFsdWUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZShyZXN1bHRfdHlwZSBfX3MgPSBkZWZhdWx0X3NlZWQpCisgICAgICB7IHNlZWQoX19zKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgJWxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICBnZW5lcmF0b3IgZW5naW5lIHNlZWRlZCBmcm9tIHRoZSBzZWVkIHNlcXVlbmNlIEBwIF9fcS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19xIHRoZSBzZWVkIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcSwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCXN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8X1NzZXEsIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPjo6dmFsdWU+CisJICAgICAgIDo6dHlwZT4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUoX1NzZXEmIF9fcSkKKyAgICAgICAgeyBzZWVkKF9fcSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgZW5naW5lIHNlcXVlbmNlIHRvIHRoZSBzZWVkIEBwIF9fcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19zIFRoZSBuZXcgc2VlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc2VlZChyZXN1bHRfdHlwZSBfX3MgPSBkZWZhdWx0X3NlZWQpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNlZWRzIHRoZSAlbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICBlbmdpbmUKKyAgICAgICAqIHNlcXVlbmNlIHVzaW5nIHZhbHVlcyBmcm9tIHRoZSBzZWVkIHNlcXVlbmNlIEBwIF9fcS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19xIHRoZSBzZWVkIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcT4KKyAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jbGFzczxfU3NlcT46OnZhbHVlPjo6dHlwZQorICAgICAgICBzZWVkKF9Tc2VxJiBfX3EpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSB2YWx1ZSBpbiB0aGUgb3V0cHV0IHJhbmdlLgorICAgICAgICoKKyAgICAgICAqIFRoZSBtaW5pbXVtIGRlcGVuZHMgb24gdGhlIEBwIF9fYyBwYXJhbWV0ZXI6IGlmIGl0IGlzIHplcm8sIHRoZQorICAgICAgICogbWluaW11bSBnZW5lcmF0ZWQgbXVzdCBiZSA+IDAsIG90aGVyd2lzZSAwIGlzIGFsbG93ZWQuCisgICAgICAgKi8KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpCisgICAgICB7IHJldHVybiBfX2MgPT0gMHUgPyAxdSA6IDB1OyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIGxhcmdlc3QgcG9zc2libGUgdmFsdWUgaW4gdGhlIG91dHB1dCByYW5nZS4KKyAgICAgICAqLworICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZQorICAgICAgbWF4KCkKKyAgICAgIHsgcmV0dXJuIF9fbSAtIDF1OyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIERpc2NhcmQgYSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZGlzY2FyZCh1bnNpZ25lZCBsb25nIGxvbmcgX196KQorICAgICAgeworCWZvciAoOyBfX3ogIT0gMFVMTDsgLS1fX3opCisJICAoKnRoaXMpKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG5leHQgcmFuZG9tIG51bWJlciBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCkKKyAgICAgIHsKKwlfTV94ID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgX19tLCBfX2EsIF9fYz4oX01feCk7CisJcmV0dXJuIF9NX3g7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIHR3byBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGVxdWFsaXR5LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2xocyBBIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgICAgICogICAgICAgICAgd291bGQgYmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUmIF9fbGhzLAorCQkgY29uc3QgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUmIF9fcmhzKQorICAgICAgeyByZXR1cm4gX19saHMuX01feCA9PSBfX3Jocy5fTV94OyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFdyaXRlcyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdGUgeChpKSBvZiB4IHRvCisgICAgICAgKiAgICAgICAgQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyAgVGhlIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX19sY3IgQSAlIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHJldHVybnMgX19vcy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlMSwgX1VJbnRUeXBlMSBfX2ExLCBfVUludFR5cGUxIF9fYzEsCisJICAgICAgIF9VSW50VHlwZTEgX19tMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBzdGQ6OmxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPF9VSW50VHlwZTEsCisJCSAgIF9fYTEsIF9fYzEsIF9fbTE+JiBfX2xjcik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHN0YXRlIG9mIHRoZSBlbmdpbmUgYnkgcmVhZGluZyBpdHMgdGV4dHVhbAorICAgICAgICogICAgICAgIHJlcHJlc2VudGF0aW9uIGZyb20gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBUaGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IHdyaXR0ZW4gdXNpbmcKKyAgICAgICAqIGFuIG91dHB1dCBzdHJlYW0gd2hvc2UgaW1idWVkIGxvY2FsZSBhbmQgd2hvc2UgdHlwZSdzIHRlbXBsYXRlCisgICAgICAgKiBzcGVjaWFsaXphdGlvbiBhcmd1bWVudHMgX0NoYXJUIGFuZCBfVHJhaXRzIHdlcmUgdGhlIHNhbWUgYXMgdGhvc2UKKyAgICAgICAqIG9mIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgIFRoZSBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX19sY3IgQSAlIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHJldHVybnMgX19pcy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlMSwgX1VJbnRUeXBlMSBfX2ExLCBfVUludFR5cGUxIF9fYzEsCisJICAgICAgIF9VSW50VHlwZTEgX19tMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OmxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPF9VSW50VHlwZTEsIF9fYTEsCisJCSAgIF9fYzEsIF9fbTE+JiBfX2xjcik7CisKKyAgICBwcml2YXRlOgorICAgICAgX1VJbnRUeXBlIF9NX3g7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIENvbXBhcmVzIHR3byBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBmb3IgaW5lcXVhbGl0eS4KKyAgICoKKyAgICogQHBhcmFtIF9fbGhzIEEgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyIGxpbmVhciBjb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5maW5pdGUgc2VxdWVuY2VzIG9mIGdlbmVyYXRlZCB2YWx1ZXMKKyAgICogICAgICAgICAgd291bGQgYmUgZGlmZmVyZW50LCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6bGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsCisJICAgICAgIF9fYywgX19tPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN0ZDo6bGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsCisJICAgICAgIF9fYywgX19tPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworCisgIC8qKgorICAgKiBBIGdlbmVyYWxpemVkIGZlZWRiYWNrIHNoaWZ0IHJlZ2lzdGVyIGRpc2NyZXRlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgKgorICAgKiBUaGlzIGFsZ29yaXRobSBhdm9pZHMgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIGFuZCBpcyBkZXNpZ25lZCB0byBiZQorICAgKiBmcmllbmRseSB0byBhIHBpcGVsaW5lZCBhcmNoaXRlY3R1cmUuICBJZiB0aGUgcGFyYW1ldGVycyBhcmUgY2hvc2VuCisgICAqIGNvcnJlY3RseSwgdGhpcyBnZW5lcmF0b3Igd2lsbCBwcm9kdWNlIG51bWJlcnMgd2l0aCBhIHZlcnkgbG9uZyBwZXJpb2QgYW5kCisgICAqIGZhaXJseSBnb29kIGFwcGFyZW50IGVudHJvcHksIGFsdGhvdWdoIHN0aWxsIG5vdCBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcuCisgICAqCisgICAqIFRoZSBiZXN0IHdheSB0byB1c2UgdGhpcyBnZW5lcmF0b3IgaXMgd2l0aCB0aGUgcHJlZGVmaW5lZCBtdDE5OTM3IGNsYXNzLgorICAgKgorICAgKiBUaGlzIGFsZ29yaXRobSB3YXMgb3JpZ2luYWxseSBpbnZlbnRlZCBieSBNYWtvdG8gTWF0c3Vtb3RvIGFuZAorICAgKiBUYWt1amkgTmlzaGltdXJhLgorICAgKgorICAgKiBAdHBhcmFtIF9fdyAgV29yZCBzaXplLCB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBlbGVtZW50IG9mIAorICAgKiAgICAgICAgICAgICAgdGhlIHN0YXRlIHZlY3Rvci4KKyAgICogQHRwYXJhbSBfX24gIFRoZSBkZWdyZWUgb2YgcmVjdXJzaW9uLgorICAgKiBAdHBhcmFtIF9fbSAgVGhlIHBlcmlvZCBwYXJhbWV0ZXIuCisgICAqIEB0cGFyYW0gX19yICBUaGUgc2VwYXJhdGlvbiBwb2ludCBiaXQgaW5kZXguCisgICAqIEB0cGFyYW0gX19hICBUaGUgbGFzdCByb3cgb2YgdGhlIHR3aXN0IG1hdHJpeC4KKyAgICogQHRwYXJhbSBfX3UgIFRoZSBmaXJzdCByaWdodC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IHBhcmFtZXRlci4KKyAgICogQHRwYXJhbSBfX2QgIFRoZSBmaXJzdCByaWdodC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IG1hc2suCisgICAqIEB0cGFyYW0gX19zICBUaGUgZmlyc3QgbGVmdC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IHBhcmFtZXRlci4KKyAgICogQHRwYXJhbSBfX2IgIFRoZSBmaXJzdCBsZWZ0LXNoaWZ0IHRlbXBlcmluZyBtYXRyaXggbWFzay4KKyAgICogQHRwYXJhbSBfX3QgIFRoZSBzZWNvbmQgbGVmdC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IHBhcmFtZXRlci4KKyAgICogQHRwYXJhbSBfX2MgIFRoZSBzZWNvbmQgbGVmdC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IG1hc2suCisgICAqIEB0cGFyYW0gX19sICBUaGUgc2Vjb25kIHJpZ2h0LXNoaWZ0IHRlbXBlcmluZyBtYXRyaXggcGFyYW1ldGVyLgorICAgKiBAdHBhcmFtIF9fZiAgSW5pdGlhbGl6YXRpb24gbXVsdGlwbGllci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywKKwkgICBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwKKwkgICBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLCBfVUludFR5cGUgX19mPgorICAgIGNsYXNzIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPF9VSW50VHlwZT46OnZhbHVlLCAidGVtcGxhdGUgYXJndW1lbnQgIgorCQkgICAgInN1YnN0aXR1dGluZyBfVUludFR5cGUgbm90IGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoMXUgPD0gX19tICYmIF9fbSA8PSBfX24sCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nIF9fbSBvdXQgb2YgYm91bmRzIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fciA8PSBfX3csICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgIgorCQkgICAgIl9fciBvdXQgb2YgYm91bmQiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX191IDw9IF9fdywgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyAiCisJCSAgICAiX191IG91dCBvZiBib3VuZCIpOworICAgICAgc3RhdGljX2Fzc2VydChfX3MgPD0gX193LCAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nICIKKwkJICAgICJfX3Mgb3V0IG9mIGJvdW5kIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fdCA8PSBfX3csICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgIgorCQkgICAgIl9fdCBvdXQgb2YgYm91bmQiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19sIDw9IF9fdywgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyAiCisJCSAgICAiX19sIG91dCBvZiBib3VuZCIpOworICAgICAgc3RhdGljX2Fzc2VydChfX3cgPD0gc3RkOjpudW1lcmljX2xpbWl0czxfVUludFR5cGU+OjpkaWdpdHMsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nIF9fdyBvdXQgb2YgYm91bmQiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19hIDw9IChfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZSAtIDEpLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX2Egb3V0IG9mIGJvdW5kIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fYiA8PSAoX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWUgLSAxKSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgX19iIG91dCBvZiBib3VuZCIpOworICAgICAgc3RhdGljX2Fzc2VydChfX2MgPD0gKF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlIC0gMSksCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nIF9fYyBvdXQgb2YgYm91bmQiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19kIDw9IChfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZSAtIDEpLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX2Qgb3V0IG9mIGJvdW5kIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fZiA8PSAoX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWUgLSAxKSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgX19mIG91dCBvZiBib3VuZCIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLiAqLworICAgICAgdHlwZWRlZiBfVUludFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIHBhcmFtZXRlciB2YWx1ZXMKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgd29yZF9zaXplICAgICAgICAgICAgICAgICA9IF9fdzsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgc3RhdGVfc2l6ZSAgICAgICAgICAgICAgICA9IF9fbjsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgc2hpZnRfc2l6ZSAgICAgICAgICAgICAgICA9IF9fbTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgbWFza19iaXRzICAgICAgICAgICAgICAgICA9IF9fcjsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgeG9yX21hc2sgICAgICAgICAgICAgICAgICA9IF9fYTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgdGVtcGVyaW5nX3UgICAgICAgICAgICAgICA9IF9fdTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgdGVtcGVyaW5nX2QgICAgICAgICAgICAgICA9IF9fZDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgdGVtcGVyaW5nX3MgICAgICAgICAgICAgICA9IF9fczsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgdGVtcGVyaW5nX2IgICAgICAgICAgICAgICA9IF9fYjsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgdGVtcGVyaW5nX3QgICAgICAgICAgICAgICA9IF9fdDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgdGVtcGVyaW5nX2MgICAgICAgICAgICAgICA9IF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgdGVtcGVyaW5nX2wgICAgICAgICAgICAgICA9IF9fbDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgaW5pdGlhbGl6YXRpb25fbXVsdGlwbGllciA9IF9fZjsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgZGVmYXVsdF9zZWVkID0gNTQ4OXU7CisKKyAgICAgIC8vIGNvbnN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9uCisgICAgICBleHBsaWNpdAorICAgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUocmVzdWx0X3R5cGUgX19zZCA9IGRlZmF1bHRfc2VlZCkKKyAgICAgIHsgc2VlZChfX3NkKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgJW1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgZW5naW5lIHNlZWRlZCBmcm9tIHRoZSBzZWVkIHNlcXVlbmNlIEBwIF9fcS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19xIHRoZSBzZWVkIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcSwgdHlwZW5hbWUgPSB0eXBlbmFtZQorICAgICAgICBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPF9Tc2VxLCBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZT46OnZhbHVlPgorCSAgICAgICA6OnR5cGU+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lKF9Tc2VxJiBfX3EpCisgICAgICAgIHsgc2VlZChfX3EpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNlZWQocmVzdWx0X3R5cGUgX19zZCA9IGRlZmF1bHRfc2VlZCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxPgorCXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY2xhc3M8X1NzZXE+Ojp2YWx1ZT46OnR5cGUKKyAgICAgICAgc2VlZChfU3NlcSYgX19xKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgc21hbGxlc3QgcG9zc2libGUgdmFsdWUgaW4gdGhlIG91dHB1dCByYW5nZS4KKyAgICAgICAqLworICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZQorICAgICAgbWluKCkKKyAgICAgIHsgcmV0dXJuIDA7IH07CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIGxhcmdlc3QgcG9zc2libGUgdmFsdWUgaW4gdGhlIG91dHB1dCByYW5nZS4KKyAgICAgICAqLworICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZQorICAgICAgbWF4KCkKKyAgICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlIC0gMTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEaXNjYXJkIGEgc2VxdWVuY2Ugb2YgcmFuZG9tIG51bWJlcnMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGRpc2NhcmQodW5zaWduZWQgbG9uZyBsb25nIF9feik7CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIHR3byAlIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJSBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICAgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgICAgICogICAgICAgICAgd291bGQgYmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUmIF9fbGhzLAorCQkgY29uc3QgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUmIF9fcmhzKQorICAgICAgeyByZXR1cm4gKHN0ZDo6ZXF1YWwoX19saHMuX01feCwgX19saHMuX01feCArIHN0YXRlX3NpemUsIF9fcmhzLl9NX3gpCisJCSYmIF9fbGhzLl9NX3AgPT0gX19yaHMuX01fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUKKyAgICAgICAqICAgICAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0KKyAgICAgICAqICAgICAgICBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICUgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUxLAorCSAgICAgICBzaXplX3QgX193MSwgc2l6ZV90IF9fbjEsCisJICAgICAgIHNpemVfdCBfX20xLCBzaXplX3QgX19yMSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2ExLCBzaXplX3QgX191MSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2QxLCBzaXplX3QgX19zMSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2IxLCBzaXplX3QgX190MSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2MxLCBzaXplX3QgX19sMSwgX1VJbnRUeXBlMSBfX2YxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHN0ZDo6bWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlMSwgX193MSwgX19uMSwKKwkJICAgX19tMSwgX19yMSwgX19hMSwgX191MSwgX19kMSwgX19zMSwgX19iMSwgX190MSwgX19jMSwKKwkJICAgX19sMSwgX19mMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJSBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZQorICAgICAgICogICAgICAgIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtCisgICAgICAgKiAgICAgICAgQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICUgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUxLAorCSAgICAgICBzaXplX3QgX193MSwgc2l6ZV90IF9fbjEsCisJICAgICAgIHNpemVfdCBfX20xLCBzaXplX3QgX19yMSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2ExLCBzaXplX3QgX191MSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2QxLCBzaXplX3QgX19zMSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2IxLCBzaXplX3QgX190MSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2MxLCBzaXplX3QgX19sMSwgX1VJbnRUeXBlMSBfX2YxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIHN0ZDo6bWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlMSwgX193MSwgX19uMSwgX19tMSwKKwkJICAgX19yMSwgX19hMSwgX191MSwgX19kMSwgX19zMSwgX19iMSwgX190MSwgX19jMSwKKwkJICAgX19sMSwgX19mMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZCBfTV9nZW5fcmFuZCgpOworCisgICAgICBfVUludFR5cGUgX01feFtzdGF0ZV9zaXplXTsKKyAgICAgIHNpemVfdCAgICBfTV9wOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBDb21wYXJlcyB0d28gJSBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgKiAgICAgICAgb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBpbmVxdWFsaXR5LgorICAgKgorICAgKiBAcGFyYW0gX19saHMgQSAlIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUgcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgICAgICAgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5maW5pdGUgc2VxdWVuY2VzIG9mIGdlbmVyYXRlZCB2YWx1ZXMKKyAgICogICAgICAgICAgd291bGQgYmUgZGlmZmVyZW50LCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csCisJICAgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsCisJICAgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwgX1VJbnRUeXBlIF9fZj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjptZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sCisJICAgICAgIF9fciwgX19hLCBfX3UsIF9fZCwgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzdGQ6Om1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwKKwkgICAgICAgX19yLCBfX2EsIF9fdSwgX19kLCBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgVGhlIE1hcnNhZ2xpYS1aYW1hbiBnZW5lcmF0b3IuCisgICAqCisgICAqIFRoaXMgaXMgYSBtb2RlbCBvZiBhIEdlbmVyYWxpemVkIEZpYm9uYWNjaSBkaXNjcmV0ZSByYW5kb20gbnVtYmVyCisgICAqIGdlbmVyYXRvciwgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIHRoZSBTV0MgZ2VuZXJhdG9yLgorICAgKgorICAgKiBBIGRpc2NyZXRlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHRoYXQgcHJvZHVjZXMgcHNldWRvcmFuZG9tCisgICAqIG51bWJlcnMgdXNpbmc6CisgICAqIEBmWworICAgKiAgICAgeF97aX1cbGVmdGFycm93KHhfe2kgLSBzfSAtIHhfe2kgLSByfSAtIGNhcnJ5X3tpLTF9KSBcYm1vZCBtIAorICAgKiBAZl0KKyAgICoKKyAgICogVGhlIHNpemUgb2YgdGhlIHN0YXRlIGlzIEBmJHJAZiQKKyAgICogYW5kIHRoZSBtYXhpbXVtIHBlcmlvZCBvZiB0aGUgZ2VuZXJhdG9yIGlzIEBmJChtXnIgLSBtXnMgLSAxKUBmJC4KKyAgICoKKyAgICogQHZhciBfTV94ICAgICBUaGUgc3RhdGUgb2YgdGhlIGdlbmVyYXRvci4gIFRoaXMgaXMgYSByaW5nIGJ1ZmZlci4KKyAgICogQHZhciBfTV9jYXJyeSBUaGUgY2FycnkuCisgICAqIEB2YXIgX01fcCAgICAgQ3VycmVudCBpbmRleCBvZiB4KGkgLSByKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywgc2l6ZV90IF9fcywgc2l6ZV90IF9fcj4KKyAgICBjbGFzcyBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZQorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxfVUludFR5cGU+Ojp2YWx1ZSwgInRlbXBsYXRlIGFyZ3VtZW50ICIKKwkJICAgICJzdWJzdGl0dXRpbmcgX1VJbnRUeXBlIG5vdCBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KDB1IDwgX19zICYmIF9fcyA8IF9fciwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBzdWJzdGl0dXRpbmcgX19zIG91dCBvZiBib3VuZHMiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoMHUgPCBfX3cgJiYgX193IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6ZGlnaXRzLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX3cgb3V0IG9mIGJvdW5kcyIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLiAqLworICAgICAgdHlwZWRlZiBfVUludFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIHBhcmFtZXRlciB2YWx1ZXMKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90ICAgICAgd29yZF9zaXplICAgID0gX193OworICAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgICAgICBzaG9ydF9sYWcgICAgPSBfX3M7CisgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCAgICAgIGxvbmdfbGFnICAgICA9IF9fcjsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUgZGVmYXVsdF9zZWVkID0gMTk3ODA1MDN1OworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGFuIGV4cGxpY2l0bHkgc2VlZGVkICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUKKyAgICAgICAqICAgICAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lKHJlc3VsdF90eXBlIF9fc2QgPSBkZWZhdWx0X3NlZWQpCisgICAgICB7IHNlZWQoX19zZCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhICVzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSByYW5kb20gbnVtYmVyIGVuZ2luZQorICAgICAgICogICAgICAgIHNlZWRlZCBmcm9tIHRoZSBzZWVkIHNlcXVlbmNlIEBwIF9fcS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19xIHRoZSBzZWVkIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcSwgdHlwZW5hbWUgPSB0eXBlbmFtZQorICAgICAgICBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPF9Tc2VxLCBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZT46OnZhbHVlPgorCSAgICAgICA6OnR5cGU+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lKF9Tc2VxJiBfX3EpCisgICAgICAgIHsgc2VlZChfX3EpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNlZWRzIHRoZSBpbml0aWFsIHN0YXRlIEBmJHhfMEBmJCBvZiB0aGUgcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgIGdlbmVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiBOMTY4OFs0LjE5XSBtb2RpZmllcyB0aGlzIGFzIGZvbGxvd3MuICBJZiBAcCBfX3ZhbHVlID09IDAsCisgICAgICAgKiBzZXRzIHZhbHVlIHRvIDE5NzgwNTAzLiAgSW4gYW55IGNhc2UsIHdpdGggYSBsaW5lYXIKKyAgICAgICAqIGNvbmdydWVudGlhbCBnZW5lcmF0b3IgbGNnKGkpIGhhdmluZyBwYXJhbWV0ZXJzIEBmJCBtX3tsY2d9ID0KKyAgICAgICAqIDIxNDc0ODM1NjMsIGFfe2xjZ30gPSA0MDAxNCwgY197bGNnfSA9IDAsIGFuZCBsY2coMCkgPSB2YWx1ZQorICAgICAgICogQGYkLCBzZXRzIEBmJCB4X3stcn0gXGRvdHMgeF97LTF9IEBmJCB0byBAZiQgbGNnKDEpIFxibW9kIG0KKyAgICAgICAqIFxkb3RzIGxjZyhyKSBcYm1vZCBtIEBmJCByZXNwZWN0aXZlbHkuICBJZiBAZiQgeF97LTF9ID0gMCBAZiQKKyAgICAgICAqIHNldCBjYXJyeSB0byAxLCBvdGhlcndpc2Ugc2V0cyBjYXJyeSB0byAwLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKHJlc3VsdF90eXBlIF9fc2QgPSBkZWZhdWx0X3NlZWQpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZWVkcyB0aGUgaW5pdGlhbCBzdGF0ZSBAZiR4XzBAZiQgb2YgdGhlCisgICAgICAgKiAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcT4KKwl0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NsYXNzPF9Tc2VxPjo6dmFsdWU+Ojp0eXBlCisgICAgICAgIHNlZWQoX1NzZXEmIF9fcSk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIGluY2x1c2l2ZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSByYW5nZSBvZiByYW5kb20KKyAgICAgICAqIGludGVnZXJzIHJldHVybmVkIGJ5IHRoaXMgZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICBzdGF0aWMgY29uc3RleHByIHJlc3VsdF90eXBlCisgICAgICBtaW4oKQorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBpbmNsdXNpdmUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2Ugb2YgcmFuZG9tCisgICAgICAgKiBpbnRlZ2VycyByZXR1cm5lZCBieSB0aGlzIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZQorICAgICAgbWF4KCkKKyAgICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlIC0gMTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEaXNjYXJkIGEgc2VxdWVuY2Ugb2YgcmFuZG9tIG51bWJlcnMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGRpc2NhcmQodW5zaWduZWQgbG9uZyBsb25nIF9feikKKyAgICAgIHsKKwlmb3IgKDsgX196ICE9IDBVTEw7IC0tX196KQorCSAgKCp0aGlzKSgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBuZXh0IHJhbmRvbSBudW1iZXIgaW4gdGhlIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21wYXJlcyB0d28gJSBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgZ2VuZXJhdG9yIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUgcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICAgIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5maW5pdGUgc2VxdWVuY2VzIG9mIGdlbmVyYXRlZCB2YWx1ZXMKKyAgICAgICAqICAgICAgICAgIHdvdWxkIGJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUmIF9fbGhzLAorCQkgY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUmIF9fcmhzKQorICAgICAgeyByZXR1cm4gKHN0ZDo6ZXF1YWwoX19saHMuX01feCwgX19saHMuX01feCArIGxvbmdfbGFnLCBfX3Jocy5fTV94KQorCQkmJiBfX2xocy5fTV9jYXJyeSA9PSBfX3Jocy5fTV9jYXJyeQorCQkmJiBfX2xocy5fTV9wID09IF9fcmhzLl9NX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lCisgICAgICAgKiAgICAgICAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtCisgICAgICAgKiAgICAgICAgQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlMSwgc2l6ZV90IF9fdzEsIHNpemVfdCBfX3MxLCBzaXplX3QgX19yMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgY29uc3Qgc3RkOjpzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUxLCBfX3cxLAorCQkgICBfX3MxLCBfX3IxPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUKKyAgICAgICAqICAgICAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbQorICAgICAgICogICAgICAgIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggZXh0cmFjdGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlMSwgc2l6ZV90IF9fdzEsIHNpemVfdCBfX3MxLCBzaXplX3QgX19yMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkJICAgc3RkOjpzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUxLCBfX3cxLAorCQkgICBfX3MxLCBfX3IxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIF9VSW50VHlwZSAgX01feFtsb25nX2xhZ107CisgICAgICBfVUludFR5cGUgIF9NX2NhcnJ5OworICAgICAgc2l6ZV90ICAgICBfTV9wOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBDb21wYXJlcyB0d28gJSBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZSByYW5kb20gbnVtYmVyCisgICAqICAgICAgICBnZW5lcmF0b3Igb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBpbmVxdWFsaXR5LgorICAgKgorICAgKiBAcGFyYW0gX19saHMgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUgcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgICAgICAgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICoKKyAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5maW5pdGUgc2VxdWVuY2VzIG9mIGdlbmVyYXRlZCB2YWx1ZXMKKyAgICogICAgICAgICAgd291bGQgYmUgZGlmZmVyZW50LCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csIHNpemVfdCBfX3MsIHNpemVfdCBfX3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6c3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8X1VJbnRUeXBlLCBfX3csCisJICAgICAgIF9fcywgX19yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN0ZDo6c3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8X1VJbnRUeXBlLCBfX3csCisJICAgICAgIF9fcywgX19yPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworCisgIC8qKgorICAgKiBQcm9kdWNlcyByYW5kb20gbnVtYmVycyBmcm9tIHNvbWUgYmFzZSBlbmdpbmUgYnkgZGlzY2FyZGluZyBibG9ja3Mgb2YKKyAgICogZGF0YS4KKyAgICoKKyAgICogMCA8PSBAcCBfX3IgPD0gQHAgX19wCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tTnVtYmVyRW5naW5lLCBzaXplX3QgX19wLCBzaXplX3QgX19yPgorICAgIGNsYXNzIGRpc2NhcmRfYmxvY2tfZW5naW5lCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydCgxIDw9IF9fciAmJiBfX3IgPD0gX19wLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX3Igb3V0IG9mIGJvdW5kcyIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLiAqLworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyRW5naW5lOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKKworICAgICAgLy8gcGFyYW1ldGVyIHZhbHVlcworICAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgYmxvY2tfc2l6ZSA9IF9fcDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHVzZWRfYmxvY2sgPSBfX3I7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBkZWZhdWx0ICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogVGhlIHVuZGVybHlpbmcgZW5naW5lIGlzIGRlZmF1bHQgY29uc3RydWN0ZWQgYXMgd2VsbC4KKyAgICAgICAqLworICAgICAgZGlzY2FyZF9ibG9ja19lbmdpbmUoKQorICAgICAgOiBfTV9iKCksIF9NX24oMCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvcHkgY29uc3RydWN0cyBhICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29waWVzIGFuIGV4aXN0aW5nIGJhc2UgY2xhc3MgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKiBAcGFyYW0gX19ybmcgQW4gZXhpc3RpbmcgKGJhc2UgY2xhc3MpIGVuZ2luZSBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBkaXNjYXJkX2Jsb2NrX2VuZ2luZShjb25zdCBfUmFuZG9tTnVtYmVyRW5naW5lJiBfX3JuZykKKyAgICAgIDogX01fYihfX3JuZyksIF9NX24oMCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIE1vdmUgY29uc3RydWN0cyBhICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29waWVzIGFuIGV4aXN0aW5nIGJhc2UgY2xhc3MgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKiBAcGFyYW0gX19ybmcgQW4gZXhpc3RpbmcgKGJhc2UgY2xhc3MpIGVuZ2luZSBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBkaXNjYXJkX2Jsb2NrX2VuZ2luZShfUmFuZG9tTnVtYmVyRW5naW5lJiYgX19ybmcpCisgICAgICA6IF9NX2Ioc3RkOjptb3ZlKF9fcm5nKSksIF9NX24oMCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNlZWQgY29uc3RydWN0cyBhICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29uc3RydWN0cyB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lIHNlZWRlZCB3aXRoIEBwIF9fcy4KKyAgICAgICAqIEBwYXJhbSBfX3MgQSBzZWVkIHZhbHVlIGZvciB0aGUgYmFzZSBjbGFzcyBlbmdpbmUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBkaXNjYXJkX2Jsb2NrX2VuZ2luZShyZXN1bHRfdHlwZSBfX3MpCisgICAgICA6IF9NX2IoX19zKSwgX01fbigwKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdG9yIGNvbnN0cnVjdCBhICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcSBBIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxfU3NlcSwgZGlzY2FyZF9ibG9ja19lbmdpbmU+Ojp2YWx1ZQorCQkgICAgICAgJiYgIXN0ZDo6aXNfc2FtZTxfU3NlcSwgX1JhbmRvbU51bWJlckVuZ2luZT46OnZhbHVlPgorCSAgICAgICA6OnR5cGU+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIGRpc2NhcmRfYmxvY2tfZW5naW5lKF9Tc2VxJiBfX3EpCisJOiBfTV9iKF9fcSksIF9NX24oMCkKKyAgICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2VlZHMgdGhlICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdAorICAgICAgICogICAgICAgIHNlZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGJhc2UgY2xhc3MgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc2VlZCgpCisgICAgICB7CisJX01fYi5zZWVkKCk7CisJX01fbiA9IDA7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2VlZHMgdGhlICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdAorICAgICAgICogICAgICAgIHNlZWQgZm9yIHRoZSB1bmRlcmx5aW5nIGJhc2UgY2xhc3MgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc2VlZChyZXN1bHRfdHlwZSBfX3MpCisgICAgICB7CisJX01fYi5zZWVkKF9fcyk7CisJX01fbiA9IDA7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2VlZHMgdGhlICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2VlZAorICAgICAgICogICAgICAgIHNlcXVlbmNlLgorICAgICAgICogQHBhcmFtIF9fcSBBIHNlZWQgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcT4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9Tc2VxJiBfX3EpCisgICAgICAgIHsKKwkgIF9NX2Iuc2VlZChfX3EpOworCSAgX01fbiA9IDA7CisJfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBlbmdpbmUKKyAgICAgICAqICAgICAgICBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGNvbnN0IF9SYW5kb21OdW1iZXJFbmdpbmUmCisgICAgICBiYXNlKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2I7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpCisgICAgICB7IHJldHVybiBfUmFuZG9tTnVtYmVyRW5naW5lOjptaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciByYW5nZS4KKyAgICAgICAqLworICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZQorICAgICAgbWF4KCkKKyAgICAgIHsgcmV0dXJuIF9SYW5kb21OdW1iZXJFbmdpbmU6Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIERpc2NhcmQgYSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZGlzY2FyZCh1bnNpZ25lZCBsb25nIGxvbmcgX196KQorICAgICAgeworCWZvciAoOyBfX3ogIT0gMFVMTDsgLS1fX3opCisJICAoKnRoaXMpKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG5leHQgdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCByYW5kb20gbnVtYmVyIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21wYXJlcyB0d28gJWRpc2NhcmRfYmxvY2tfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlZGlzY2FyZF9ibG9ja19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJWRpc2NhcmRfYmxvY2tfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluZmluaXRlIHNlcXVlbmNlcyBvZiBnZW5lcmF0ZWQgdmFsdWVzCisgICAgICAgKiAgICAgICAgICB3b3VsZCBiZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBkaXNjYXJkX2Jsb2NrX2VuZ2luZSYgX19saHMsCisJCSBjb25zdCBkaXNjYXJkX2Jsb2NrX2VuZ2luZSYgX19yaHMpCisgICAgICB7IHJldHVybiBfX2xocy5fTV9iID09IF9fcmhzLl9NX2IgJiYgX19saHMuX01fbiA9PSBfX3Jocy5fTV9uOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlZGlzY2FyZF9ibG9ja19lbmdpbmUgcmFuZG9tCisgICAgICAgKiAgICAgICAgbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0KKyAgICAgICAqICAgICAgICBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZTEsIHNpemVfdCBfX3AxLCBzaXplX3QgX19yMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBzdGQ6OmRpc2NhcmRfYmxvY2tfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUxLAorCQkgICBfX3AxLCBfX3IxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lCisgICAgICAgKiAgICAgICAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0KKyAgICAgICAqICAgICAgICBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWRpc2NhcmRfYmxvY2tfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tTnVtYmVyRW5naW5lMSwgc2l6ZV90IF9fcDEsIHNpemVfdCBfX3IxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIHN0ZDo6ZGlzY2FyZF9ibG9ja19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZTEsCisJCSAgIF9fcDEsIF9fcjE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIF9SYW5kb21OdW1iZXJFbmdpbmUgX01fYjsKKyAgICAgIHNpemVfdCBfTV9uOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBDb21wYXJlcyB0d28gJWRpc2NhcmRfYmxvY2tfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqICAgICAgICBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAqCisgICAqIEBwYXJhbSBfX2xocyBBICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICVkaXNjYXJkX2Jsb2NrX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgKiAgICAgICAgICB3b3VsZCBiZSBkaWZmZXJlbnQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3AsIHNpemVfdCBfX3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6ZGlzY2FyZF9ibG9ja19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19wLAorCSAgICAgICBfX3I+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3RkOjpkaXNjYXJkX2Jsb2NrX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX3AsCisJICAgICAgIF9fcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKworICAvKioKKyAgICogUHJvZHVjZXMgcmFuZG9tIG51bWJlcnMgYnkgY29tYmluaW5nIHJhbmRvbSBudW1iZXJzIGZyb20gc29tZSBiYXNlCisgICAqIGVuZ2luZSB0byBwcm9kdWNlIHJhbmRvbSBudW1iZXJzIHdpdGggYSBzcGVjaWZpZXMgbnVtYmVyIG9mIGJpdHMgQHAgX193LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fdywgdHlwZW5hbWUgX1VJbnRUeXBlPgorICAgIGNsYXNzIGluZGVwZW5kZW50X2JpdHNfZW5naW5lCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPF9VSW50VHlwZT46OnZhbHVlLCAidGVtcGxhdGUgYXJndW1lbnQgIgorCQkgICAgInN1YnN0aXR1dGluZyBfVUludFR5cGUgbm90IGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoMHUgPCBfX3cgJiYgX193IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6ZGlnaXRzLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IHN1YnN0aXR1dGluZyBfX3cgb3V0IG9mIGJvdW5kcyIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIHZhbHVlLiAqLworICAgICAgdHlwZWRlZiBfVUludFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBkZWZhdWx0ICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogVGhlIHVuZGVybHlpbmcgZW5naW5lIGlzIGRlZmF1bHQgY29uc3RydWN0ZWQgYXMgd2VsbC4KKyAgICAgICAqLworICAgICAgaW5kZXBlbmRlbnRfYml0c19lbmdpbmUoKQorICAgICAgOiBfTV9iKCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvcHkgY29uc3RydWN0cyBhICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29waWVzIGFuIGV4aXN0aW5nIGJhc2UgY2xhc3MgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKiBAcGFyYW0gX19ybmcgQW4gZXhpc3RpbmcgKGJhc2UgY2xhc3MpIGVuZ2luZSBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZShjb25zdCBfUmFuZG9tTnVtYmVyRW5naW5lJiBfX3JuZykKKyAgICAgIDogX01fYihfX3JuZykgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIE1vdmUgY29uc3RydWN0cyBhICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29waWVzIGFuIGV4aXN0aW5nIGJhc2UgY2xhc3MgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKiBAcGFyYW0gX19ybmcgQW4gZXhpc3RpbmcgKGJhc2UgY2xhc3MpIGVuZ2luZSBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZShfUmFuZG9tTnVtYmVyRW5naW5lJiYgX19ybmcpCisgICAgICA6IF9NX2Ioc3RkOjptb3ZlKF9fcm5nKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNlZWQgY29uc3RydWN0cyBhICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29uc3RydWN0cyB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lIHNlZWRlZCB3aXRoIEBwIF9fcy4KKyAgICAgICAqIEBwYXJhbSBfX3MgQSBzZWVkIHZhbHVlIGZvciB0aGUgYmFzZSBjbGFzcyBlbmdpbmUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZShyZXN1bHRfdHlwZSBfX3MpCisgICAgICA6IF9NX2IoX19zKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdG9yIGNvbnN0cnVjdCBhICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcSBBIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxfU3NlcSwgaW5kZXBlbmRlbnRfYml0c19lbmdpbmU+Ojp2YWx1ZQorCQkgICAgICAgJiYgIXN0ZDo6aXNfc2FtZTxfU3NlcSwgX1JhbmRvbU51bWJlckVuZ2luZT46OnZhbHVlPgorICAgICAgICAgICAgICAgOjp0eXBlPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZShfU3NlcSYgX19xKQorICAgICAgICA6IF9NX2IoX19xKQorICAgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0CisgICAgICAgKiAgICAgICAgc2VlZCBmb3IgdGhlIHVuZGVybHlpbmcgYmFzZSBjbGFzcyBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKCkKKyAgICAgIHsgX01fYi5zZWVkKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0CisgICAgICAgKiAgICAgICAgc2VlZCBmb3IgdGhlIHVuZGVybHlpbmcgYmFzZSBjbGFzcyBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKHJlc3VsdF90eXBlIF9fcykKKyAgICAgIHsgX01fYi5zZWVkKF9fcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBnaXZlbgorICAgICAgICogICAgICAgIHNlZWQgc2VxdWVuY2UuCisgICAgICAgKiBAcGFyYW0gX19xIEEgc2VlZCBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX1NzZXEmIF9fcSkKKyAgICAgICAgeyBfTV9iLnNlZWQoX19xKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBlbmdpbmUKKyAgICAgICAqICAgICAgICBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGNvbnN0IF9SYW5kb21OdW1iZXJFbmdpbmUmCisgICAgICBiYXNlKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2I7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpCisgICAgICB7IHJldHVybiAwVTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciByYW5nZS4KKyAgICAgICAqLworICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZQorICAgICAgbWF4KCkKKyAgICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlIC0gMTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEaXNjYXJkIGEgc2VxdWVuY2Ugb2YgcmFuZG9tIG51bWJlcnMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGRpc2NhcmQodW5zaWduZWQgbG9uZyBsb25nIF9feikKKyAgICAgIHsKKwlmb3IgKDsgX196ICE9IDBVTEw7IC0tX196KQorCSAgKCp0aGlzKSgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29tcGFyZXMgdHdvICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5maW5pdGUgc2VxdWVuY2VzIG9mIGdlbmVyYXRlZCB2YWx1ZXMKKyAgICAgICAqICAgICAgICAgIHdvdWxkIGJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGluZGVwZW5kZW50X2JpdHNfZW5naW5lJiBfX2xocywKKwkJIGNvbnN0IGluZGVwZW5kZW50X2JpdHNfZW5naW5lJiBfX3JocykKKyAgICAgIHsgcmV0dXJuIF9fbGhzLl9NX2IgPT0gX19yaHMuX01fYjsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUKKyAgICAgICAqICAgICAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbQorICAgICAgICogICAgICAgIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4KKyAgICAgICAqICAgICAgICAgIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIHN0ZDo6aW5kZXBlbmRlbnRfYml0c19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwKKwkJICAgX193LCBfVUludFR5cGU+JiBfX3gpCisJeworCSAgX19pcyA+PiBfX3guX01fYjsKKwkgIHJldHVybiBfX2lzOworCX0KKworICAgIHByaXZhdGU6CisgICAgICBfUmFuZG9tTnVtYmVyRW5naW5lIF9NX2I7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIENvbXBhcmVzIHR3byAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICogb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGZvciBpbmVxdWFsaXR5LgorICAgKgorICAgKiBAcGFyYW0gX19saHMgQSAlaW5kZXBlbmRlbnRfYml0c19lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAqCisgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluZmluaXRlIHNlcXVlbmNlcyBvZiBnZW5lcmF0ZWQgdmFsdWVzCisgICAqICAgICAgICAgIHdvdWxkIGJlIGRpZmZlcmVudCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fdywgdHlwZW5hbWUgX1VJbnRUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OmluZGVwZW5kZW50X2JpdHNfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9fdywKKwkgICAgICAgX1VJbnRUeXBlPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN0ZDo6aW5kZXBlbmRlbnRfYml0c19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX193LAorCSAgICAgICBfVUludFR5cGU+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICVpbmRlcGVuZGVudF9iaXRzX2VuZ2luZSByYW5kb20KKyAgICogICAgICAgIG51bWJlciBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAqCisgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggIEEgJWluZGVwZW5kZW50X2JpdHNfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAqICAgICAgICAgIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fdywgdHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBzdGQ6OmluZGVwZW5kZW50X2JpdHNfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsCisJICAgICAgIF9fdywgX1VJbnRUeXBlPiYgX194KQorICAgIHsKKyAgICAgIF9fb3MgPDwgX194LmJhc2UoKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgUHJvZHVjZXMgcmFuZG9tIG51bWJlcnMgYnkgY29tYmluaW5nIHJhbmRvbSBudW1iZXJzIGZyb20gc29tZQorICAgKiBiYXNlIGVuZ2luZSB0byBwcm9kdWNlIHJhbmRvbSBudW1iZXJzIHdpdGggYSBzcGVjaWZpZXMgbnVtYmVyIG9mIGJpdHMKKyAgICogQHAgX193LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9faz4KKyAgICBjbGFzcyBzaHVmZmxlX29yZGVyX2VuZ2luZQorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoMXUgPD0gX19rLCAidGVtcGxhdGUgYXJndW1lbnQgc3Vic3RpdHV0aW5nICIKKwkJICAgICJfX2sgb3V0IG9mIGJvdW5kIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCByYW5kb20gdmFsdWUuICovCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmU6OnJlc3VsdF90eXBlIHJlc3VsdF90eXBlOworCisgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB0YWJsZV9zaXplID0gX19rOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgZGVmYXVsdCAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIFRoZSB1bmRlcmx5aW5nIGVuZ2luZSBpcyBkZWZhdWx0IGNvbnN0cnVjdGVkIGFzIHdlbGwuCisgICAgICAgKi8KKyAgICAgIHNodWZmbGVfb3JkZXJfZW5naW5lKCkKKyAgICAgIDogX01fYigpCisgICAgICB7IF9NX2luaXRpYWxpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGNvbnN0cnVjdHMgYSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIENvcGllcyBhbiBleGlzdGluZyBiYXNlIGNsYXNzIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHBhcmFtIF9fcm5nIEFuIGV4aXN0aW5nIChiYXNlIGNsYXNzKSBlbmdpbmUgb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgc2h1ZmZsZV9vcmRlcl9lbmdpbmUoY29uc3QgX1JhbmRvbU51bWJlckVuZ2luZSYgX19ybmcpCisgICAgICA6IF9NX2IoX19ybmcpCisgICAgICB7IF9NX2luaXRpYWxpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBNb3ZlIGNvbnN0cnVjdHMgYSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIENvcGllcyBhbiBleGlzdGluZyBiYXNlIGNsYXNzIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHBhcmFtIF9fcm5nIEFuIGV4aXN0aW5nIChiYXNlIGNsYXNzKSBlbmdpbmUgb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgc2h1ZmZsZV9vcmRlcl9lbmdpbmUoX1JhbmRvbU51bWJlckVuZ2luZSYmIF9fcm5nKQorICAgICAgOiBfTV9iKHN0ZDo6bW92ZShfX3JuZykpCisgICAgICB7IF9NX2luaXRpYWxpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZWVkIGNvbnN0cnVjdHMgYSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIENvbnN0cnVjdHMgdGhlIHVuZGVybHlpbmcgZ2VuZXJhdG9yIGVuZ2luZSBzZWVkZWQgd2l0aCBAcCBfX3MuCisgICAgICAgKiBAcGFyYW0gX19zIEEgc2VlZCB2YWx1ZSBmb3IgdGhlIGJhc2UgY2xhc3MgZW5naW5lLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgc2h1ZmZsZV9vcmRlcl9lbmdpbmUocmVzdWx0X3R5cGUgX19zKQorICAgICAgOiBfTV9iKF9fcykKKyAgICAgIHsgX01faW5pdGlhbGl6ZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRvciBjb25zdHJ1Y3QgYSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3EgQSBzZWVkIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcSwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCXN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8X1NzZXEsIHNodWZmbGVfb3JkZXJfZW5naW5lPjo6dmFsdWUKKwkJICAgICAgICYmICFzdGQ6OmlzX3NhbWU8X1NzZXEsIF9SYW5kb21OdW1iZXJFbmdpbmU+Ojp2YWx1ZT4KKwkgICAgICAgOjp0eXBlPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBzaHVmZmxlX29yZGVyX2VuZ2luZShfU3NlcSYgX19xKQorICAgICAgICA6IF9NX2IoX19xKQorICAgICAgICB7IF9NX2luaXRpYWxpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNlZWRzIHRoZSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgc2VlZAorICAgICAgICAgICAgICAgIGZvciB0aGUgdW5kZXJseWluZyBiYXNlIGNsYXNzIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNlZWQoKQorICAgICAgeworCV9NX2Iuc2VlZCgpOworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZWVkcyB0aGUgJXNodWZmbGVfb3JkZXJfZW5naW5lIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHNlZWQKKyAgICAgICAqICAgICAgICBmb3IgdGhlIHVuZGVybHlpbmcgYmFzZSBjbGFzcyBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKHJlc3VsdF90eXBlIF9fcykKKyAgICAgIHsKKwlfTV9iLnNlZWQoX19zKTsKKwlfTV9pbml0aWFsaXplKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2VlZHMgdGhlICVzaHVmZmxlX29yZGVyX2VuZ2luZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gc2VlZAorICAgICAgICogICAgICAgIHNlcXVlbmNlLgorICAgICAgICogQHBhcmFtIF9fcSBBIHNlZWQgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcT4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9Tc2VxJiBfX3EpCisgICAgICAgIHsKKwkgIF9NX2Iuc2VlZChfX3EpOworCSAgX01faW5pdGlhbGl6ZSgpOworCX0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBlbmdpbmUgb2JqZWN0LgorICAgICAgICovCisgICAgICBjb25zdCBfUmFuZG9tTnVtYmVyRW5naW5lJgorICAgICAgYmFzZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9iOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpCisgICAgICB7IHJldHVybiBfUmFuZG9tTnVtYmVyRW5naW5lOjptaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCByYW5kb20gbnVtYmVyIHJhbmdlLgorICAgICAgICovCisgICAgICBzdGF0aWMgY29uc3RleHByIHJlc3VsdF90eXBlCisgICAgICBtYXgoKQorICAgICAgeyByZXR1cm4gX1JhbmRvbU51bWJlckVuZ2luZTo6bWF4KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBEaXNjYXJkIGEgc2VxdWVuY2Ugb2YgcmFuZG9tIG51bWJlcnMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGRpc2NhcmQodW5zaWduZWQgbG9uZyBsb25nIF9feikKKyAgICAgIHsKKwlmb3IgKDsgX196ICE9IDBVTEw7IC0tX196KQorCSAgKCp0aGlzKSgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG5leHQgdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCByYW5kb20gbnVtYmVyIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpOworCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0cworICAgICAgICogb2YgdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJXNodWZmbGVfb3JkZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICVzaHVmZmxlX29yZGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgICAgICogICAgICAgICAgd291bGQgYmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBzaHVmZmxlX29yZGVyX2VuZ2luZSYgX19saHMsCisJCSBjb25zdCBzaHVmZmxlX29yZGVyX2VuZ2luZSYgX19yaHMpCisgICAgICB7IHJldHVybiAoX19saHMuX01fYiA9PSBfX3Jocy5fTV9iCisJCSYmIHN0ZDo6ZXF1YWwoX19saHMuX01fdiwgX19saHMuX01fdiArIF9faywgX19yaHMuX01fdikKKwkJJiYgX19saHMuX01feSA9PSBfX3Jocy5fTV95KTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJXNodWZmbGVfb3JkZXJfZW5naW5lIHJhbmRvbQorICAgICAgICogICAgICAgIG51bWJlciBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtCisJQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlc2h1ZmZsZV9vcmRlcl9lbmdpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUxLCBzaXplX3QgX19rMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBzdGQ6OnNodWZmbGVfb3JkZXJfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUxLAorCQkgICBfX2sxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lCisgICAgICAgKiAgICAgICAgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0KKyAgICAgICAqICAgICAgICBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXNodWZmbGVfb3JkZXJfZW5naW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tTnVtYmVyRW5naW5lMSwgc2l6ZV90IF9fazEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgc3RkOjpzaHVmZmxlX29yZGVyX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lMSwgX19rMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZCBfTV9pbml0aWFsaXplKCkKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2s7ICsrX19pKQorCSAgX01fdltfX2ldID0gX01fYigpOworCV9NX3kgPSBfTV9iKCk7CisgICAgICB9CisKKyAgICAgIF9SYW5kb21OdW1iZXJFbmdpbmUgX01fYjsKKyAgICAgIHJlc3VsdF90eXBlIF9NX3ZbX19rXTsKKyAgICAgIHJlc3VsdF90eXBlIF9NX3k7CisgICAgfTsKKworICAvKioKKyAgICogQ29tcGFyZXMgdHdvICVzaHVmZmxlX29yZGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzCisgICAqIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAqCisgICAqIEBwYXJhbSBfX2xocyBBICVzaHVmZmxlX29yZGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICVzaHVmZmxlX29yZGVyX2VuZ2luZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgKgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZXMgb2YgZ2VuZXJhdGVkIHZhbHVlcworICAgKiAgICAgICAgICB3b3VsZCBiZSBkaWZmZXJlbnQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX2s+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6c2h1ZmZsZV9vcmRlcl9lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwKKwkgICAgICAgX19rPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN0ZDo6c2h1ZmZsZV9vcmRlcl9lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwKKwkgICAgICAgX19rPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworCisgIC8qKgorICAgKiBUaGUgY2xhc3NpYyBNaW5pbXVtIFN0YW5kYXJkIHJhbmQwIG9mIExld2lzLCBHb29kbWFuLCBhbmQgTWlsbGVyLgorICAgKi8KKyAgdHlwZWRlZiBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTx1aW50X2Zhc3QzMl90LCAxNjgwN1VMLCAwVUwsIDIxNDc0ODM2NDdVTD4KKyAgbWluc3RkX3JhbmQwOworCisgIC8qKgorICAgKiBBbiBhbHRlcm5hdGl2ZSBMQ1IgKExlaG1lciBHZW5lcmF0b3IgZnVuY3Rpb24pLgorICAgKi8KKyAgdHlwZWRlZiBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTx1aW50X2Zhc3QzMl90LCA0ODI3MVVMLCAwVUwsIDIxNDc0ODM2NDdVTD4KKyAgbWluc3RkX3JhbmQ7CisKKyAgLyoqCisgICAqIFRoZSBjbGFzc2ljIE1lcnNlbm5lIFR3aXN0ZXIuCisgICAqCisgICAqIFJlZmVyZW5jZToKKyAgICogTS4gTWF0c3Vtb3RvIGFuZCBULiBOaXNoaW11cmEsIE1lcnNlbm5lIFR3aXN0ZXI6IEEgNjIzLURpbWVuc2lvbmFsbHkKKyAgICogRXF1aWRpc3RyaWJ1dGVkIFVuaWZvcm0gUHNldWRvLVJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yLCBBQ00gVHJhbnNhY3Rpb25zCisgICAqIG9uIE1vZGVsaW5nIGFuZCBDb21wdXRlciBTaW11bGF0aW9uLCBWb2wuIDgsIE5vLiAxLCBKYW51YXJ5IDE5OTgsIHBwIDMtMzAuCisgICAqLworICB0eXBlZGVmIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPAorICAgIHVpbnRfZmFzdDMyX3QsCisgICAgMzIsIDYyNCwgMzk3LCAzMSwKKyAgICAweDk5MDhiMGRmVUwsIDExLAorICAgIDB4ZmZmZmZmZmZVTCwgNywKKyAgICAweDlkMmM1NjgwVUwsIDE1LAorICAgIDB4ZWZjNjAwMDBVTCwgMTgsIDE4MTI0MzMyNTNVTD4gbXQxOTkzNzsKKworICAvKioKKyAgICogQW4gYWx0ZXJuYXRpdmUgTWVyc2VubmUgVHdpc3Rlci4KKyAgICovCisgIHR5cGVkZWYgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8CisgICAgdWludF9mYXN0NjRfdCwKKyAgICA2NCwgMzEyLCAxNTYsIDMxLAorICAgIDB4YjUwMjZmNWFhOTY2MTllOVVMTCwgMjksCisgICAgMHg1NTU1NTU1NTU1NTU1NTU1VUxMLCAxNywKKyAgICAweDcxZDY3ZmZmZWRhNjAwMDBVTEwsIDM3LAorICAgIDB4ZmZmN2VlZTAwMDAwMDAwMFVMTCwgNDMsCisgICAgNjM2NDEzNjIyMzg0Njc5MzAwNVVMTD4gbXQxOTkzN182NDsKKworICB0eXBlZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPHVpbnRfZmFzdDMyX3QsIDI0LCAxMCwgMjQ+CisgICAgcmFubHV4MjRfYmFzZTsKKworICB0eXBlZGVmIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPHVpbnRfZmFzdDY0X3QsIDQ4LCA1LCAxMj4KKyAgICByYW5sdXg0OF9iYXNlOworCisgIHR5cGVkZWYgZGlzY2FyZF9ibG9ja19lbmdpbmU8cmFubHV4MjRfYmFzZSwgMjIzLCAyMz4gcmFubHV4MjQ7CisKKyAgdHlwZWRlZiBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxyYW5sdXg0OF9iYXNlLCAzODksIDExPiByYW5sdXg0ODsKKworICB0eXBlZGVmIHNodWZmbGVfb3JkZXJfZW5naW5lPG1pbnN0ZF9yYW5kMCwgMjU2PiBrbnV0aF9iOworCisgIHR5cGVkZWYgbWluc3RkX3JhbmQwIGRlZmF1bHRfcmFuZG9tX2VuZ2luZTsKKworICAvKioKKyAgICogQSBzdGFuZGFyZCBpbnRlcmZhY2UgdG8gYSBwbGF0Zm9ybS1zcGVjaWZpYyBub24tZGV0ZXJtaW5pc3RpYworICAgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoaWYgYW55IGFyZSBhdmFpbGFibGUpLgorICAgKi8KKyAgY2xhc3MgcmFuZG9tX2RldmljZQorICB7CisgIHB1YmxpYzoKKyAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCByYW5kb20gdmFsdWUuICovCisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgcmVzdWx0X3R5cGU7CisKKyAgICAvLyBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb25zCisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfUkFORE9NX1RSMQorCisgICAgZXhwbGljaXQKKyAgICByYW5kb21fZGV2aWNlKGNvbnN0IHN0ZDo6c3RyaW5nJiBfX3Rva2VuID0gImRlZmF1bHQiKQorICAgIHsKKyAgICAgIF9NX2luaXQoX190b2tlbik7CisgICAgfQorCisgICAgfnJhbmRvbV9kZXZpY2UoKQorICAgIHsgX01fZmluaSgpOyB9CisKKyNlbHNlCisKKyAgICBleHBsaWNpdAorICAgIHJhbmRvbV9kZXZpY2UoY29uc3Qgc3RkOjpzdHJpbmcmIF9fdG9rZW4gPSAibXQxOTkzNyIpCisgICAgeyBfTV9pbml0X3ByZXRyMShfX3Rva2VuKTsgfQorCisgIHB1YmxpYzoKKworI2VuZGlmCisKKyAgICBzdGF0aWMgY29uc3RleHByIHJlc3VsdF90eXBlCisgICAgbWluKCkKKyAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWluKCk7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUKKyAgICBtYXgoKQorICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgZG91YmxlCisgICAgZW50cm9weSgpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gMC4wOyB9CisKKyAgICByZXN1bHRfdHlwZQorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfUkFORE9NX1RSMQorICAgICAgcmV0dXJuIHRoaXMtPl9NX2dldHZhbCgpOworI2Vsc2UKKyAgICAgIHJldHVybiB0aGlzLT5fTV9nZXR2YWxfcHJldHIxKCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBObyBjb3B5IGZ1bmN0aW9ucy4KKyAgICByYW5kb21fZGV2aWNlKGNvbnN0IHJhbmRvbV9kZXZpY2UmKSA9IGRlbGV0ZTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCByYW5kb21fZGV2aWNlJikgPSBkZWxldGU7CisKKyAgcHJpdmF0ZToKKworICAgIHZvaWQgX01faW5pdChjb25zdCBzdGQ6OnN0cmluZyYgX190b2tlbik7CisgICAgdm9pZCBfTV9pbml0X3ByZXRyMShjb25zdCBzdGQ6OnN0cmluZyYgX190b2tlbik7CisgICAgdm9pZCBfTV9maW5pKCk7CisKKyAgICByZXN1bHRfdHlwZSBfTV9nZXR2YWwoKTsKKyAgICByZXN1bHRfdHlwZSBfTV9nZXR2YWxfcHJldHIxKCk7CisKKyAgICB1bmlvbgorICAgIHsKKyAgICBGSUxFKiAgICAgICAgX01fZmlsZTsKKyAgICBtdDE5OTM3ICAgICAgX01fbXQ7CisgIH07CisgIH07CisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgcmFuZG9tX2dlbmVyYXRvcnMKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnMgUmFuZG9tIE51bWJlciBEaXN0cmlidXRpb25zCisgICAqIEBpbmdyb3VwIHJhbmRvbQorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfdW5pZm9ybSBVbmlmb3JtIERpc3RyaWJ1dGlvbnMKKyAgICogQGluZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnMKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiBVbmlmb3JtIGRpc2NyZXRlIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqIEEgZGlzY3JldGUgcmFuZG9tIGRpc3RyaWJ1dGlvbiBvbiB0aGUgcmFuZ2UgQGYkW21pbiwgbWF4XUBmJCB3aXRoIGVxdWFsCisgICAqIHByb2JhYmlsaXR5IHRocm91Z2hvdXQgdGhlIHJhbmdlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUgPSBpbnQ+CisgICAgY2xhc3MgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPF9JbnRUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGFuIGludGVncmFsIHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX0ludFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfSW50VHlwZSBfX2EgPSAwLAorCQkgICBfSW50VHlwZSBfX2IgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9JbnRUeXBlPjo6bWF4KCkpCisJOiBfTV9hKF9fYSksIF9NX2IoX19iKQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9hIDw9IF9NX2IpOworCX0KKworCXJlc3VsdF90eXBlCisJYSgpIGNvbnN0CisJeyByZXR1cm4gX01fYTsgfQorCisJcmVzdWx0X3R5cGUKKwliKCkgY29uc3QKKwl7IHJldHVybiBfTV9iOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX2EgPT0gX19wMi5fTV9hICYmIF9fcDEuX01fYiA9PSBfX3AyLl9NX2I7IH0KKworICAgICAgcHJpdmF0ZToKKwlfSW50VHlwZSBfTV9hOworCV9JbnRUeXBlIF9NX2I7CisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbihfSW50VHlwZSBfX2EgPSAwLAorCQkJICAgX0ludFR5cGUgX19iID0gc3RkOjpudW1lcmljX2xpbWl0czxfSW50VHlwZT46Om1heCgpKQorICAgICAgOiBfTV9wYXJhbShfX2EsIF9fYikKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqIERvZXMgbm90aGluZyBmb3IgdGhlIHVuaWZvcm0gaW50ZWdlciBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgeyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmEoKTsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgYigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5iKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGluY2x1c2l2ZSBsb3dlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uIHJhbmdlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBpbmNsdXNpdmUgdXBwZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbiByYW5nZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5iKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byB1bmlmb3JtIGludGVnZXIgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgICAgKiAgICAgICAgdGhlIHNhbWUgcGFyYW1ldGVycy4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIHVuaWZvcm0gaW50ZWdlciBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIGRpZmZlcmVudCBwYXJhbWV0ZXJzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyBhICV1bmlmb3JtX2ludF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIG9zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICV1bmlmb3JtX2ludF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIGNvbnN0IHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYpOworCisgIC8qKgorICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAldW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICoKKyAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICV1bmlmb3JtX2ludF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYpOworCisKKyAgLyoqCisgICAqIEBicmllZiBVbmlmb3JtIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogQSBjb250aW51b3VzIHJhbmRvbSBkaXN0cmlidXRpb24gb24gdGhlIHJhbmdlIFttaW4sIG1heCkgd2l0aCBlcXVhbAorICAgKiBwcm9iYWJpbGl0eSB0aHJvdWdob3V0IHRoZSByYW5nZS4gIFRoZSBVUk5HIHNob3VsZCBiZSByZWFsLXZhbHVlZCBhbmQKKyAgICogZGVsaXZlciBudW1iZXIgaW4gdGhlIHJhbmdlIFswLCAxKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfUmVhbFR5cGUgX19hID0gX1JlYWxUeXBlKDApLAorCQkgICBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorCTogX01fYShfX2EpLCBfTV9iKF9fYikKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fYSA8PSBfTV9iKTsKKwl9CisKKwlyZXN1bHRfdHlwZQorCWEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2E7IH0KKworCXJlc3VsdF90eXBlCisJYigpIGNvbnN0CisJeyByZXR1cm4gX01fYjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9hID09IF9fcDIuX01fYSAmJiBfX3AxLl9NX2IgPT0gX19wMi5fTV9iOyB9CisKKyAgICAgIHByaXZhdGU6CisJX1JlYWxUeXBlIF9NX2E7CisJX1JlYWxUeXBlIF9NX2I7CisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24gb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2EgW0lOXSAgVGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19iIFtJTl0gIFRoZSB1cHBlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbihfUmVhbFR5cGUgX19hID0gX1JlYWxUeXBlKDApLAorCQkJCV9SZWFsVHlwZSBfX2IgPSBfUmVhbFR5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fYSwgX19iKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqIERvZXMgbm90aGluZyBmb3IgdGhlIHVuaWZvcm0gcmVhbCBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgeyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmEoKTsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgYigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5iKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGluY2x1c2l2ZSBsb3dlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uIHJhbmdlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBpbmNsdXNpdmUgdXBwZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbiByYW5nZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5iKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeworCSAgX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgICAgX19hdXJuZyhfX3VybmcpOworCSAgcmV0dXJuIChfX2F1cm5nKCkgKiAoX19wLmIoKSAtIF9fcC5hKCkpKSArIF9fcC5hKCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byB1bmlmb3JtIHJlYWwgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgICAgKiAgICAgICAgdGhlIHNhbWUgcGFyYW1ldGVycy4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgdW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkJIGNvbnN0IHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiBfX2QxLl9NX3BhcmFtID09IF9fZDIuX01fcGFyYW07IH0KKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCQljb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gdW5pZm9ybSByZWFsIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgKiAgICAgICAgZGlmZmVyZW50IHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworICAvKioKKyAgICogQGJyaWVmIEluc2VydHMgYSAldW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAqICAgICAgICBkaXN0cmlidXRpb24gQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICoKKyAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICogQHBhcmFtIF9feCAgQSAldW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAqICAgICAgICAgIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJICAgICAgIGNvbnN0IHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+Jik7CisKKyAgLyoqCisgICAqIEBicmllZiBFeHRyYWN0cyBhICV1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICoKKyAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICV1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiwKKwkgICAgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mKTsKKworICAvKiBAfSAqLyAvLyBncm91cCByYW5kb21fZGlzdHJpYnV0aW9uc191bmlmb3JtCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zX25vcm1hbCBOb3JtYWwgRGlzdHJpYnV0aW9ucworICAgKiBAaW5ncm91cCByYW5kb21fZGlzdHJpYnV0aW9ucworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmIEEgbm9ybWFsIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBub3JtYWwgcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpcworICAgKiBAZlsKKyAgICogICAgIHAoeHxcbXUsXHNpZ21hKSA9IFxmcmFjezF9e1xzaWdtYSBcc3FydHsyIFxwaX19CisgICAqICAgICAgICAgICAgZV57LSBcZnJhY3t7eCAtIFxtdX1eIHsyfX17MiBcc2lnbWEgXiB7Mn19IH0gCisgICAqIEBmXQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIG5vcm1hbF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9SZWFsVHlwZSBfX21lYW4gPSBfUmVhbFR5cGUoMCksCisJCSAgIF9SZWFsVHlwZSBfX3N0ZGRldiA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX21lYW4oX19tZWFuKSwgX01fc3RkZGV2KF9fc3RkZGV2KQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9zdGRkZXYgPiBfUmVhbFR5cGUoMCkpOworCX0KKworCV9SZWFsVHlwZQorCW1lYW4oKSBjb25zdAorCXsgcmV0dXJuIF9NX21lYW47IH0KKworCV9SZWFsVHlwZQorCXN0ZGRldigpIGNvbnN0CisJeyByZXR1cm4gX01fc3RkZGV2OyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiAoX19wMS5fTV9tZWFuID09IF9fcDIuX01fbWVhbgorCQkgICYmIF9fcDEuX01fc3RkZGV2ID09IF9fcDIuX01fc3RkZGV2KTsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9tZWFuOworCV9SZWFsVHlwZSBfTV9zdGRkZXY7CisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMgQGYkbWVhbkBmJCBhbmQKKyAgICAgICAqIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG5vcm1hbF9kaXN0cmlidXRpb24ocmVzdWx0X3R5cGUgX19tZWFuID0gcmVzdWx0X3R5cGUoMCksCisJCQkgIHJlc3VsdF90eXBlIF9fc3RkZGV2ID0gcmVzdWx0X3R5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fbWVhbiwgX19zdGRkZXYpLCBfTV9zYXZlZF9hdmFpbGFibGUoZmFsc2UpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIG5vcm1hbF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLCBfTV9zYXZlZF9hdmFpbGFibGUoZmFsc2UpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgX01fc2F2ZWRfYXZhaWxhYmxlID0gZmFsc2U7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbWVhbiBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIG1lYW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ubWVhbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIHN0ZGRldigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5zdGRkZXYoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bG93ZXN0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbGVhc3QgdXBwZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWF4KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHRoaXMtPl9fZ2VuZXJhdGUoX19mLCBfX3QsIF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUocmVzdWx0X3R5cGUqIF9fZiwgcmVzdWx0X3R5cGUqIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIG5vcm1hbCBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQKKyAgICAgICAqICAgICAgICBiZSBnZW5lcmF0ZWQgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxPgorCWZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjpub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX2QxLAorCQkgICBjb25zdCBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9fZDIpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJW5vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJW5vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJW5vcm1hbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvcgorICAgICAgICogICAgICAgICAgc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgc3RkOjpub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgIF9NX3BhcmFtOworICAgICAgcmVzdWx0X3R5cGUgX01fc2F2ZWQ7CisgICAgICBib29sICAgICAgICBfTV9zYXZlZF9hdmFpbGFibGU7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBub3JtYWwgZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKioKKyAgICogQGJyaWVmIEEgbG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBub3JtYWwgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKiBAZlsKKyAgICogICAgIHAoeHxtLHMpID0gXGZyYWN7MX17c3hcc3FydHsyXHBpfX0KKyAgICogICAgICAgICAgICAgICAgXGV4cHstXGZyYWN7KFxsbnt4fSAtIG0pXjJ9ezJzXjJ9fSAKKyAgICogQGZdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgbG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBsb2dub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fbSA9IF9SZWFsVHlwZSgwKSwKKwkJICAgX1JlYWxUeXBlIF9fcyA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX20oX19tKSwgX01fcyhfX3MpCisJeyB9CisKKwlfUmVhbFR5cGUKKwltKCkgY29uc3QKKwl7IHJldHVybiBfTV9tOyB9CisKKwlfUmVhbFR5cGUKKwlzKCkgY29uc3QKKwl7IHJldHVybiBfTV9zOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX20gPT0gX19wMi5fTV9tICYmIF9fcDEuX01fcyA9PSBfX3AyLl9NX3M7IH0KKworICAgICAgcHJpdmF0ZToKKwlfUmVhbFR5cGUgX01fbTsKKwlfUmVhbFR5cGUgX01fczsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBsb2dub3JtYWxfZGlzdHJpYnV0aW9uKF9SZWFsVHlwZSBfX20gPSBfUmVhbFR5cGUoMCksCisJCQkgICAgIF9SZWFsVHlwZSBfX3MgPSBfUmVhbFR5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fbSwgX19zKSwgX01fbmQoKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBsb2dub3JtYWxfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKSwgX01fbmQoKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgX01fbmQucmVzZXQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5tKCk7IH0KKworICAgICAgX1JlYWxUeXBlCisgICAgICBzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLnMoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgICAgeyByZXR1cm4gc3RkOjpleHAoX19wLnMoKSAqIF9NX25kKF9fdXJuZykgKyBfX3AubSgpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBsb2dub3JtYWwgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgICAgKiAgICAgICAgdGhlIHNhbWUgcGFyYW1ldGVycyBhbmQgdGhlIHNlcXVlbmNlcyB0aGF0IHdvdWxkCisgICAgICAgKiAgICAgICAgYmUgZ2VuZXJhdGVkIGFyZSBlcXVhbC4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgbG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkJIGNvbnN0IGxvZ25vcm1hbF9kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiAoX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtCisJCSYmIF9fZDEuX01fbmQgPT0gX19kMi5fTV9uZCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVsb2dub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVsb2dub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3Qgc3RkOjpsb2dub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVsb2dub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCBBICVsb2dub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OmxvZ25vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKworICAgICAgc3RkOjpub3JtYWxfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfTV9uZDsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGxvZ25vcm1hbCBkaXN0cmlidXRpb25zIGFyZSBkaWZmZXJlbnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6bG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OmxvZ25vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBnYW1tYSBjb250aW51b3VzIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgZ2FtbWEgcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpczoKKyAgICogQGZbCisgICAqICAgICBwKHh8XGFscGhhLFxiZXRhKSA9IFxmcmFjezF9e1xiZXRhXEdhbW1hKFxhbHBoYSl9CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICh4L1xiZXRhKV57XGFscGhhIC0gMX0gZV57LXgvXGJldGF9IAorICAgKiBAZl0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBnYW1tYV9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisJZnJpZW5kIGNsYXNzIGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9SZWFsVHlwZSBfX2FscGhhX3ZhbCA9IF9SZWFsVHlwZSgxKSwKKwkJICAgX1JlYWxUeXBlIF9fYmV0YV92YWwgPSBfUmVhbFR5cGUoMSkpCisJOiBfTV9hbHBoYShfX2FscGhhX3ZhbCksIF9NX2JldGEoX19iZXRhX3ZhbCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fYWxwaGEgPiBfUmVhbFR5cGUoMCkpOworCSAgX01faW5pdGlhbGl6ZSgpOworCX0KKworCV9SZWFsVHlwZQorCWFscGhhKCkgY29uc3QKKwl7IHJldHVybiBfTV9hbHBoYTsgfQorCisJX1JlYWxUeXBlCisJYmV0YSgpIGNvbnN0CisJeyByZXR1cm4gX01fYmV0YTsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gKF9fcDEuX01fYWxwaGEgPT0gX19wMi5fTV9hbHBoYQorCQkgICYmIF9fcDEuX01fYmV0YSA9PSBfX3AyLl9NX2JldGEpOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZAorCV9NX2luaXRpYWxpemUoKTsKKworCV9SZWFsVHlwZSBfTV9hbHBoYTsKKwlfUmVhbFR5cGUgX01fYmV0YTsKKworCV9SZWFsVHlwZSBfTV9tYWxwaGEsIF9NX2EyOworICAgICAgfTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBnYW1tYSBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzCisgICAgICAgKiBAZiRcYWxwaGFAZiQgYW5kIEBmJFxiZXRhQGYkLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgZ2FtbWFfZGlzdHJpYnV0aW9uKF9SZWFsVHlwZSBfX2FscGhhX3ZhbCA9IF9SZWFsVHlwZSgxKSwKKwkJCSBfUmVhbFR5cGUgX19iZXRhX3ZhbCA9IF9SZWFsVHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19hbHBoYV92YWwsIF9fYmV0YV92YWwpLCBfTV9uZCgpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGdhbW1hX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCksIF9NX25kKCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyBfTV9uZC5yZXNldCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIEBmJFxhbHBoYUBmJCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGFscGhhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmFscGhhKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgQGYkXGJldGFAZiQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBiZXRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmJldGEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZShfX2YsIF9fdCwgX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZ2FtbWEgZGlzdHJpYnV0aW9ucyBoYXZlIHRoZSBzYW1lCisgICAgICAgKiAgICAgICAgcGFyYW1ldGVycyBhbmQgdGhlIHNlcXVlbmNlcyB0aGF0IHdvdWxkIGJlIGdlbmVyYXRlZAorICAgICAgICogICAgICAgIGFyZSBlcXVhbC4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgZ2FtbWFfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgZ2FtbWFfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gKF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbQorCQkmJiBfX2QxLl9NX25kID09IF9fZDIuX01fbmQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVnYW1tYV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX194KTsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCQljb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworCisgICAgICBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9NX25kOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZ2FtbWEgZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICAgaW5saW5lIGJvb2wKKyAgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCQljb25zdCBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBub3JtYWwgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKiBAZiRwKHh8bikgPSBcZnJhY3t4Xnsobi8yKSAtIDF9ZV57LXgvMn19e1xHYW1tYShuLzIpIDJee24vMn19QGYkCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9SZWFsVHlwZSBfX24gPSBfUmVhbFR5cGUoMSkpCisJOiBfTV9uKF9fbikKKwl7IH0KKworCV9SZWFsVHlwZQorCW4oKSBjb25zdAorCXsgcmV0dXJuIF9NX247IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fbiA9PSBfX3AyLl9NX247IH0KKworICAgICAgcHJpdmF0ZToKKwlfUmVhbFR5cGUgX01fbjsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24oX1JlYWxUeXBlIF9fbiA9IF9SZWFsVHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19uKSwgX01fZ2QoX19uIC8gMikKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgY2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKSwgX01fZ2QoX19wLm4oKSAvIDIpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgX01fZ2QucmVzZXQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5uKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gcmVzdWx0X3R5cGUoMCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbGVhc3QgdXBwZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWF4KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgcmV0dXJuIDIgKiBfTV9nZChfX3VybmcpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpnYW1tYV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+OjpwYXJhbV90eXBlCisJICAgIHBhcmFtX3R5cGU7CisJICByZXR1cm4gMiAqIF9NX2dkKF9fdXJuZywgcGFyYW1fdHlwZShfX3AubigpIC8gMikpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHR5cGVuYW1lIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZQorCSAgICBfX3AyKF9fcC5uKCkgLyAyKTsKKwkgIHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3AyKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0eXBlbmFtZSBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT46OnBhcmFtX3R5cGUKKwkgICAgX19wMihfX3AubigpIC8gMik7CisJICB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wMik7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIENoaS1zcXVhcmVkIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZCBiZQorICAgICAgICogICAgICAgIGdlbmVyYXRlZCBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkJIGNvbnN0IGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgICAgIHsgcmV0dXJuIF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbSAmJiBfX2QxLl9NX2dkID09IF9fZDIuX01fZ2Q7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHN0ZDo6Y2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVjaGlfc3F1YXJlZF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194IEEgJWNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgc3RkOjpjaGlfc3F1YXJlZF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgdHlwZW5hbWUKKwkJCXN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKworICAgICAgc3RkOjpnYW1tYV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9NX2dkOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gQ2hpLXNxdWFyZWQgZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OmNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OmNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIGNhdWNoeV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbm9ybWFsIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMKKyAgICogQGYkcCh4fGEsYikgPSAoXHBpIGIgKDEgKyAoXGZyYWN7eC1hfXtifSleMikpXnstMX1AZiQKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBjYXVjaHlfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIGNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfUmVhbFR5cGUgX19hID0gX1JlYWxUeXBlKDApLAorCQkgICBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorCTogX01fYShfX2EpLCBfTV9iKF9fYikKKwl7IH0KKworCV9SZWFsVHlwZQorCWEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2E7IH0KKworCV9SZWFsVHlwZQorCWIoKSBjb25zdAorCXsgcmV0dXJuIF9NX2I7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fYSA9PSBfX3AyLl9NX2EgJiYgX19wMS5fTV9iID09IF9fcDIuX01fYjsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9hOworCV9SZWFsVHlwZSBfTV9iOworICAgICAgfTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGNhdWNoeV9kaXN0cmlidXRpb24oX1JlYWxUeXBlIF9fYSA9IF9SZWFsVHlwZSgwKSwKKwkJCSAgX1JlYWxUeXBlIF9fYiA9IF9SZWFsVHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19hLCBfX2IpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGNhdWNoeV9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5hKCk7IH0KKworICAgICAgX1JlYWxUeXBlCisgICAgICBiKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmIoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bG93ZXN0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbGVhc3QgdXBwZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWF4KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHRoaXMtPl9fZ2VuZXJhdGUoX19mLCBfX3QsIF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUocmVzdWx0X3R5cGUqIF9fZiwgcmVzdWx0X3R5cGUqIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIENhdWNoeSBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBjYXVjaHlfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgY2F1Y2h5X2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgICAgIHsgcmV0dXJuIF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBDYXVjaHkgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAqICAgICAgICBkaWZmZXJlbnQgcGFyYW1ldGVycy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpjYXVjaHlfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6Y2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVjYXVjaHlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAqCisgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggIEEgJWNhdWNoeV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHN0ZDo6Y2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpOworCisgIC8qKgorICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlY2F1Y2h5X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAqCisgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICogQHBhcmFtIF9feCBBICVjYXVjaHlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHN0ZDo6Y2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpOworCisKKyAgLyoqCisgICAqIEBicmllZiBBIGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBub3JtYWwgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKiBAZlsKKyAgICogICAgIHAoeHxtLG4pID0gXGZyYWN7XEdhbW1hKChtK24pLzIpfXtcR2FtbWEobS8yKVxHYW1tYShuLzIpfQorICAgKiAgICAgICAgICAgICAgICAoXGZyYWN7bX17bn0pXnttLzJ9IHheeyhtLzIpLTF9CisgICAqICAgICAgICAgICAgICAgICgxICsgXGZyYWN7bXh9e259KV57LShtK24pLzJ9IAorICAgKiBAZl0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBmaXNoZXJfZl9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgZmlzaGVyX2ZfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fbSA9IF9SZWFsVHlwZSgxKSwKKwkJICAgX1JlYWxUeXBlIF9fbiA9IF9SZWFsVHlwZSgxKSkKKwk6IF9NX20oX19tKSwgX01fbihfX24pCisJeyB9CisKKwlfUmVhbFR5cGUKKwltKCkgY29uc3QKKwl7IHJldHVybiBfTV9tOyB9CisKKwlfUmVhbFR5cGUKKwluKCkgY29uc3QKKwl7IHJldHVybiBfTV9uOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX20gPT0gX19wMi5fTV9tICYmIF9fcDEuX01fbiA9PSBfX3AyLl9NX247IH0KKworICAgICAgcHJpdmF0ZToKKwlfUmVhbFR5cGUgX01fbTsKKwlfUmVhbFR5cGUgX01fbjsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBmaXNoZXJfZl9kaXN0cmlidXRpb24oX1JlYWxUeXBlIF9fbSA9IF9SZWFsVHlwZSgxKSwKKwkJCSAgICBfUmVhbFR5cGUgX19uID0gX1JlYWxUeXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX20sIF9fbiksIF9NX2dkX3goX19tIC8gMiksIF9NX2dkX3koX19uIC8gMikKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgZmlzaGVyX2ZfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKSwgX01fZ2RfeChfX3AubSgpIC8gMiksIF9NX2dkX3koX19wLm4oKSAvIDIpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsKKwlfTV9nZF94LnJlc2V0KCk7CisJX01fZ2RfeS5yZXNldCgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5tKCk7IH0KKworICAgICAgX1JlYWxUeXBlCisgICAgICBuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLm4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gKF9NX2dkX3goX191cm5nKSAqIG4oKSkgLyAoX01fZ2RfeShfX3VybmcpICogbSgpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZQorCSAgICBwYXJhbV90eXBlOworCSAgcmV0dXJuICgoX01fZ2RfeChfX3VybmcsIHBhcmFtX3R5cGUoX19wLm0oKSAvIDIpKSAqIG4oKSkKKwkJICAvIChfTV9nZF95KF9fdXJuZywgcGFyYW1fdHlwZShfX3AubigpIC8gMikpICogbSgpKSk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZyk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBGaXNoZXIgZiBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQKKyAgICAgICAqICAgICAgICBiZSBnZW5lcmF0ZWQgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBmaXNoZXJfZl9kaXN0cmlidXRpb24mIF9fZDEsCisJCSBjb25zdCBmaXNoZXJfZl9kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiAoX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtCisJCSYmIF9fZDEuX01fZ2RfeCA9PSBfX2QyLl9NX2dkX3gKKwkJJiYgX19kMS5fTV9nZF95ID09IF9fZDIuX01fZ2RfeSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVmaXNoZXJfZl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWZpc2hlcl9mX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHN0ZDo6ZmlzaGVyX2ZfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVmaXNoZXJfZl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194IEEgJWZpc2hlcl9mX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgc3RkOjpmaXNoZXJfZl9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKworICAgICAgc3RkOjpnYW1tYV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9NX2dkX3gsIF9NX2dkX3k7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBGaXNoZXIgZiBkaXN0cmlidXRpb25zIGFyZSBkaWZlcmVudC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpmaXNoZXJfZl9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpmaXNoZXJfZl9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworICAvKioKKyAgICogQGJyaWVmIEEgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBub3JtYWwgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpczoKKyAgICogQGZbCisgICAqICAgICBwKHh8bikgPSBcZnJhY3sxfXtcc3FydChuXHBpKX0gXGZyYWN7XEdhbW1hKChuKzEpLzIpfXtcR2FtbWEobi8yKX0KKyAgICogICAgICAgICAgICAgICgxICsgXGZyYWN7eF4yfXtufSkgXnstKG4rMSkvMn0gCisgICAqIEBmXQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIHN0dWRlbnRfdF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9SZWFsVHlwZSBfX24gPSBfUmVhbFR5cGUoMSkpCisJOiBfTV9uKF9fbikKKwl7IH0KKworCV9SZWFsVHlwZQorCW4oKSBjb25zdAorCXsgcmV0dXJuIF9NX247IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fbiA9PSBfX3AyLl9NX247IH0KKworICAgICAgcHJpdmF0ZToKKwlfUmVhbFR5cGUgX01fbjsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBzdHVkZW50X3RfZGlzdHJpYnV0aW9uKF9SZWFsVHlwZSBfX24gPSBfUmVhbFR5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fbiksIF9NX25kKCksIF9NX2dkKF9fbiAvIDIsIDIpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHN0dWRlbnRfdF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLCBfTV9uZCgpLCBfTV9nZChfX3AubigpIC8gMiwgMikKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeworCV9NX25kLnJlc2V0KCk7CisJX01fZ2QucmVzZXQoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIG4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ubigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+Ojpsb3dlc3QoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7IHJldHVybiBfTV9uZChfX3VybmcpICogc3RkOjpzcXJ0KG4oKSAvIF9NX2dkKF9fdXJuZykpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpnYW1tYV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+OjpwYXJhbV90eXBlCisJICAgIHBhcmFtX3R5cGU7CisJCisJICBjb25zdCByZXN1bHRfdHlwZSBfX2cgPSBfTV9nZChfX3VybmcsIHBhcmFtX3R5cGUoX19wLm4oKSAvIDIsIDIpKTsKKwkgIHJldHVybiBfTV9uZChfX3VybmcpICogc3RkOjpzcXJ0KF9fcC5uKCkgLyBfX2cpOworICAgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZyk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUocmVzdWx0X3R5cGUqIF9fZiwgcmVzdWx0X3R5cGUqIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIFN0dWRlbnQgdCBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQKKyAgICAgICAqICAgICAgICBiZSBnZW5lcmF0ZWQgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBzdHVkZW50X3RfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3Qgc3R1ZGVudF90X2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgICAgIHsgcmV0dXJuIChfX2QxLl9NX3BhcmFtID09IF9fZDIuX01fcGFyYW0KKwkJJiYgX19kMS5fTV9uZCA9PSBfX2QyLl9NX25kICYmIF9fZDEuX01fZ2QgPT0gX19kMi5fTV9nZCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVzdHVkZW50X3RfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVzdHVkZW50X3RfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3Qgc3RkOjpzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVzdHVkZW50X3RfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCBBICVzdHVkZW50X3RfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OnN0dWRlbnRfdF9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisKKyAgICAgIHN0ZDo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX01fbmQ7CisgICAgICBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX01fZ2Q7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBTdHVkZW50IHQgZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OnN0dWRlbnRfdF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKiBAfSAqLyAvLyBncm91cCByYW5kb21fZGlzdHJpYnV0aW9uc19ub3JtYWwKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfYmVybm91bGxpIEJlcm5vdWxsaSBEaXN0cmlidXRpb25zCisgICAqIEBpbmdyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgQSBCZXJub3VsbGkgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEdlbmVyYXRlcyBhIHNlcXVlbmNlIG9mIHRydWUgYW5kIGZhbHNlIHZhbHVlcyB3aXRoIGxpa2VsaWhvb2QgQGYkcEBmJAorICAgKiB0aGF0IHRydWUgd2lsbCBjb21lIHVwIGFuZCBAZiQoMSAtIHApQGYkIHRoYXQgZmFsc2Ugd2lsbCBhcHBlYXIuCisgICAqLworICBjbGFzcyBiZXJub3VsbGlfZGlzdHJpYnV0aW9uCisgIHsKKyAgcHVibGljOgorICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICB0eXBlZGVmIGJvb2wgcmVzdWx0X3R5cGU7CisgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgeworICAgICAgdHlwZWRlZiBiZXJub3VsbGlfZGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbl90eXBlOworCisgICAgICBleHBsaWNpdAorICAgICAgcGFyYW1fdHlwZShkb3VibGUgX19wID0gMC41KQorICAgICAgOiBfTV9wKF9fcCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoKF9NX3AgPj0gMC4wKSAmJiAoX01fcCA8PSAxLjApKTsKKyAgICAgIH0KKworICAgICAgZG91YmxlCisgICAgICBwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3A7IH0KKworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKyAgICAgIHsgcmV0dXJuIF9fcDEuX01fcCA9PSBfX3AyLl9NX3A7IH0KKworICAgIHByaXZhdGU6CisgICAgICBkb3VibGUgX01fcDsKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICAvKioKKyAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIEJlcm5vdWxsaSBkaXN0cmlidXRpb24gd2l0aCBsaWtlbGlob29kIEBwIHAuCisgICAgICoKKyAgICAgKiBAcGFyYW0gX19wICBbSU5dICBUaGUgbGlrZWxpaG9vZCBvZiBhIHRydWUgcmVzdWx0IGJlaW5nIHJldHVybmVkLgorICAgICAqICAgICAgICAgICAgICAgICAgIE11c3QgYmUgaW4gdGhlIGludGVydmFsIEBmJFswLCAxXUBmJC4KKyAgICAgKi8KKyAgICBleHBsaWNpdAorICAgIGJlcm5vdWxsaV9kaXN0cmlidXRpb24oZG91YmxlIF9fcCA9IDAuNSkKKyAgICA6IF9NX3BhcmFtKF9fcCkKKyAgICB7IH0KKworICAgIGV4cGxpY2l0CisgICAgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgOiBfTV9wYXJhbShfX3ApCisgICAgeyB9CisKKyAgICAvKioKKyAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICoKKyAgICAgKiBEb2VzIG5vdGhpbmcgZm9yIGEgQmVybm91bGxpIGRpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICB2b2lkCisgICAgcmVzZXQoKSB7IH0KKworICAgIC8qKgorICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBAcCBwIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAqLworICAgIGRvdWJsZQorICAgIHAoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3BhcmFtLnAoKTsgfQorCisgICAgLyoqCisgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICBwYXJhbV90eXBlCisgICAgcGFyYW0oKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAvKioKKyAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAqLworICAgIHZvaWQKKyAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAvKioKKyAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICByZXN1bHRfdHlwZQorICAgIG1pbigpIGNvbnN0CisgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1pbigpOyB9CisKKyAgICAvKioKKyAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbGVhc3QgdXBwZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICByZXN1bHRfdHlwZQorICAgIG1heCgpIGNvbnN0CisgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAvKioKKyAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgZG91YmxlPgorCSAgX19hdXJuZyhfX3VybmcpOworCWlmICgoX19hdXJuZygpIC0gX19hdXJuZy5taW4oKSkKKwkgICAgIDwgX19wLnAoKSAqIChfX2F1cm5nLm1heCgpIC0gX19hdXJuZy5taW4oKSkpCisJICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICB7IHRoaXMtPl9fZ2VuZXJhdGUoX19mLCBfX3QsIF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIHsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIHsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgIC8qKgorICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gQmVybm91bGxpIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzLgorICAgICAqLworICAgIGZyaWVuZCBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBiZXJub3VsbGlfZGlzdHJpYnV0aW9uJiBfX2QxLAorCSAgICAgICBjb25zdCBiZXJub3VsbGlfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgIHsgcmV0dXJuIF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbTsgfQorCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gQmVybm91bGxpIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgKiAgICAgICAgZGlmZmVyZW50IHBhcmFtZXRlcnMuCisgICAqLworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6YmVybm91bGxpX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkgICAgIGNvbnN0IHN0ZDo6YmVybm91bGxpX2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBJbnNlcnRzIGEgJWJlcm5vdWxsaV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICoKKyAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICogQHBhcmFtIF9feCAgQSAlYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAqIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHN0ZDo6YmVybm91bGxpX2Rpc3RyaWJ1dGlvbiYgX194KTsKKworICAvKioKKyAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWJlcm5vdWxsaV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgKgorICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggIEEgJWJlcm5vdWxsaV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBzdGQ6OmJlcm5vdWxsaV9kaXN0cmlidXRpb24mIF9feCkKKyAgICB7CisgICAgICBkb3VibGUgX19wOworICAgICAgX19pcyA+PiBfX3A7CisgICAgICBfX3gucGFyYW0oYmVybm91bGxpX2Rpc3RyaWJ1dGlvbjo6cGFyYW1fdHlwZShfX3ApKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZSBiaW5vbWlhbCByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBiaW5vbWlhbCBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzCisgICAqIEBmJHAoaXx0LHApID0gXGJpbm9te3R9e2l9IHBeaSAoMSAtIHApXnt0IC0gaX1AZiQgd2hlcmUgQGYkdEBmJAorICAgKiBhbmQgQGYkcEBmJCBhcmUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlID0gaW50PgorICAgIGNsYXNzIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxfSW50VHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhbiBpbnRlZ3JhbCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9JbnRUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisJZnJpZW5kIGNsYXNzIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT47CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX0ludFR5cGUgX190ID0gX0ludFR5cGUoMSksIGRvdWJsZSBfX3AgPSAwLjUpCisJOiBfTV90KF9fdCksIF9NX3AoX19wKQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgoX01fdCA+PSBfSW50VHlwZSgwKSkKKwkJCQkmJiAoX01fcCA+PSAwLjApCisJCQkJJiYgKF9NX3AgPD0gMS4wKSk7CisJICBfTV9pbml0aWFsaXplKCk7CisJfQorCisJX0ludFR5cGUKKwl0KCkgY29uc3QKKwl7IHJldHVybiBfTV90OyB9CisKKwlkb3VibGUKKwlwKCkgY29uc3QKKwl7IHJldHVybiBfTV9wOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX3QgPT0gX19wMi5fTV90ICYmIF9fcDEuX01fcCA9PSBfX3AyLl9NX3A7IH0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkCisJX01faW5pdGlhbGl6ZSgpOworCisJX0ludFR5cGUgX01fdDsKKwlkb3VibGUgX01fcDsKKworCWRvdWJsZSBfTV9xOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwlkb3VibGUgX01fZDEsIF9NX2QyLCBfTV9zMSwgX01fczIsIF9NX2MsCisJICAgICAgIF9NX2ExLCBfTV9hMTIzLCBfTV9zLCBfTV9sZiwgX01fbHAxcDsKKyNlbmRpZgorCWJvb2wgICBfTV9lYXN5OworICAgICAgfTsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIGV4cGxpY2l0CisgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb24oX0ludFR5cGUgX190ID0gX0ludFR5cGUoMSksCisJCQkgICAgZG91YmxlIF9fcCA9IDAuNSkKKyAgICAgIDogX01fcGFyYW0oX190LCBfX3ApLCBfTV9uZCgpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCksIF9NX25kKCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyBfTV9uZC5yZXNldCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGRpc3RyaWJ1dGlvbiBAcCB0IHBhcmFtZXRlci4KKyAgICAgICAqLworICAgICAgX0ludFR5cGUKKyAgICAgIHQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0udCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGRpc3RyaWJ1dGlvbiBAcCBwIHBhcmFtZXRlci4KKyAgICAgICAqLworICAgICAgZG91YmxlCisgICAgICBwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLnAoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0udCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBiaW5vbWlhbCBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQKKyAgICAgICAqICAgICAgICBiZSBnZW5lcmF0ZWQgYXJlIGVxdWFsLgorICAgICAgICovCisJZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBiaW5vbWlhbF9kaXN0cmlidXRpb24mIF9fZDEsCisJCSAgIGNvbnN0IGJpbm9taWFsX2Rpc3RyaWJ1dGlvbiYgX19kMikKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtICYmIF9fZDEuX01fbmQgPT0gX19kMi5fTV9uZDsgfQorI2Vsc2UKKyAgICAgICAgeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyBhICViaW5vbWlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWJpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZTEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3Qgc3RkOjpiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlYmlub21pYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlYmlub21pYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvcgorICAgICAgICogICAgICAgICAgc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OmJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJX01fd2FpdGluZyhfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBfSW50VHlwZSBfX3QsIGRvdWJsZSBfX3EpOworCisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworCisgICAgICAvLyBOQjogVW51c2VkIHdoZW4gX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMSBpcyB1bmRlZmluZWQuCisgICAgICBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248ZG91YmxlPiBfTV9uZDsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGJpbm9taWFsIGRpc3RyaWJ1dGlvbnMgYXJlIGRpZmZlcmVudC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OmJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6Ymlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZSBnZW9tZXRyaWMgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgZ2VvbWV0cmljIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb24gaXMKKyAgICogQGYkcChpfHApID0gcCgxIC0gcClee2l9QGYkIHdoZXJlIEBmJHBAZiQgaXMgdGhlIHBhcmFtZXRlciBvZiB0aGUKKyAgICogZGlzdHJpYnV0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUgPSBpbnQ+CisgICAgY2xhc3MgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxfSW50VHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhbiBpbnRlZ3JhbCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9JbnRUeXBlICByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKwlmcmllbmQgY2xhc3MgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT47CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoZG91YmxlIF9fcCA9IDAuNSkKKwk6IF9NX3AoX19wKQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgoX01fcCA+IDAuMCkgJiYgKF9NX3AgPCAxLjApKTsKKwkgIF9NX2luaXRpYWxpemUoKTsKKwl9CisKKwlkb3VibGUKKwlwKCkgY29uc3QKKwl7IHJldHVybiBfTV9wOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX3AgPT0gX19wMi5fTV9wOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZAorCV9NX2luaXRpYWxpemUoKQorCXsgX01fbG9nXzFfcCA9IHN0ZDo6bG9nKDEuMCAtIF9NX3ApOyB9CisKKwlkb3VibGUgX01fcDsKKworCWRvdWJsZSBfTV9sb2dfMV9wOworICAgICAgfTsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIGV4cGxpY2l0CisgICAgICBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uKGRvdWJsZSBfX3AgPSAwLjUpCisgICAgICA6IF9NX3BhcmFtKF9fcCkKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiBEb2VzIG5vdGhpbmcgZm9yIHRoZSBnZW9tZXRyaWMgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBkaXN0cmlidXRpb24gcGFyYW1ldGVyIEBwIHAuCisgICAgICAgKi8KKyAgICAgIGRvdWJsZQorICAgICAgcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5wKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZShfX2YsIF9fdCwgX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZ2VvbWV0cmljIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGdlb21ldHJpY19kaXN0cmlidXRpb24mIF9fZDEsCisJCSBjb25zdCBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGdlb21ldHJpYyBkaXN0cmlidXRpb25zIGhhdmUKKyAgICogICAgICAgIGRpZmZlcmVudCBwYXJhbWV0ZXJzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6Z2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6Z2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBJbnNlcnRzIGEgJWdlb21ldHJpY19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICoKKyAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICogQHBhcmFtIF9feCAgQSAlZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAqIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHN0ZDo6Z2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCk7CisKKyAgLyoqCisgICAqIEBicmllZiBFeHRyYWN0cyBhICVnZW9tZXRyaWNfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICoKKyAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICVnZW9tZXRyaWNfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgc3RkOjpnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX194KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbmVnYXRpdmUgYmlub21pYWwgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKiBAZiRwKGkpID0gXGJpbm9te259e2l9IHBeaSAoMSAtIHApXnt0IC0gaX1AZiQgd2hlcmUgQGYkdEBmJAorICAgKiBhbmQgQGYkcEBmJCBhcmUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlID0gaW50PgorICAgIGNsYXNzIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxfSW50VHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhbiBpbnRlZ3JhbCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9JbnRUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX0ludFR5cGUgX19rID0gMSwgZG91YmxlIF9fcCA9IDAuNSkKKwk6IF9NX2soX19rKSwgX01fcChfX3ApCisJeworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKChfTV9rID4gMCkgJiYgKF9NX3AgPiAwLjApICYmIChfTV9wIDw9IDEuMCkpOworCX0KKworCV9JbnRUeXBlCisJaygpIGNvbnN0CisJeyByZXR1cm4gX01fazsgfQorCisJZG91YmxlCisJcCgpIGNvbnN0CisJeyByZXR1cm4gX01fcDsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9rID09IF9fcDIuX01fayAmJiBfX3AxLl9NX3AgPT0gX19wMi5fTV9wOyB9CisKKyAgICAgIHByaXZhdGU6CisJX0ludFR5cGUgX01fazsKKwlkb3VibGUgX01fcDsKKyAgICAgIH07CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb24oX0ludFR5cGUgX19rID0gMSwgZG91YmxlIF9fcCA9IDAuNSkKKyAgICAgIDogX01fcGFyYW0oX19rLCBfX3ApLCBfTV9nZChfX2ssICgxLjAgLSBfX3ApIC8gX19wKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLCBfTV9nZChfX3AuaygpLCAoMS4wIC0gX19wLnAoKSkgLyBfX3AucCgpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IF9NX2dkLnJlc2V0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBAZiRrQGYkIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfSW50VHlwZQorICAgICAgaygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5rKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBAZiRwQGYkIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBkb3VibGUKKyAgICAgIHAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ucCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorICAgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUocmVzdWx0X3R5cGUqIF9fZiwgcmVzdWx0X3R5cGUqIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gbmVnYXRpdmUgYmlub21pYWwgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgICAgKiAgICAgICAgdGhlIHNhbWUgcGFyYW1ldGVycyBhbmQgdGhlIHNlcXVlbmNlcyB0aGF0IHdvdWxkIGJlCisgICAgICAgKiAgICAgICAgZ2VuZXJhdGVkIGFyZSBlcXVhbC4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtICYmIF9fZDEuX01fZ2QgPT0gX19kMi5fTV9nZDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJW5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20KKyAgICAgICAqICAgICAgICBudW1iZXIgZGlzdHJpYnV0aW9uIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJW5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiAgICAgICAgICBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHN0ZDo6bmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJW5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194IEEgJW5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6Om5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZyk7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCQljb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworCisgICAgICBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxkb3VibGU+IF9NX2dkOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gbmVnYXRpdmUgYmlub21pYWwgZGlzdHJpYnV0aW9ucyBhcmUgZGlmZmVyZW50LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6bmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfYmVybm91bGxpCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zX3BvaXNzb24gUG9pc3NvbiBEaXN0cmlidXRpb25zCisgICAqIEBpbmdyb3VwIHJhbmRvbV9kaXN0cmlidXRpb25zCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZSBQb2lzc29uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIFBvaXNzb24gcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpcworICAgKiBAZiRwKGl8XG11KSA9IFxmcmFje1xtdV5pfXtpIX0gZV57LVxtdX1AZiQgd2hlcmUgQGYkXG11QGYkIGlzIHRoZQorICAgKiBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlID0gaW50PgorICAgIGNsYXNzIHBvaXNzb25fZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPF9JbnRUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGFuIGludGVncmFsIHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX0ludFR5cGUgIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKwlmcmllbmQgY2xhc3MgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGU+OworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKGRvdWJsZSBfX21lYW4gPSAxLjApCisJOiBfTV9tZWFuKF9fbWVhbikKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fbWVhbiA+IDAuMCk7CisJICBfTV9pbml0aWFsaXplKCk7CisJfQorCisJZG91YmxlCisJbWVhbigpIGNvbnN0CisJeyByZXR1cm4gX01fbWVhbjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9tZWFuID09IF9fcDIuX01fbWVhbjsgfQorCisgICAgICBwcml2YXRlOgorCS8vIEhvc3RzIGVpdGhlciBsb2cobWVhbikgb3IgdGhlIHRocmVzaG9sZCBvZiB0aGUgc2ltcGxlIG1ldGhvZC4KKwl2b2lkCisJX01faW5pdGlhbGl6ZSgpOworCisJZG91YmxlIF9NX21lYW47CisKKwlkb3VibGUgX01fbG1fdGhyOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwlkb3VibGUgX01fbGZtLCBfTV9zbSwgX01fZCwgX01fc2N4LCBfTV8xY3gsIF9NX2MyYiwgX01fY2I7CisjZW5kaWYKKyAgICAgIH07CisKKyAgICAgIC8vIGNvbnN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9uCisgICAgICBleHBsaWNpdAorICAgICAgcG9pc3Nvbl9kaXN0cmlidXRpb24oZG91YmxlIF9fbWVhbiA9IDEuMCkKKyAgICAgIDogX01fcGFyYW0oX19tZWFuKSwgX01fbmQoKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBwb2lzc29uX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCksIF9NX25kKCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyBfTV9uZC5yZXNldCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGRpc3RyaWJ1dGlvbiBwYXJhbWV0ZXIgQHAgbWVhbi4KKyAgICAgICAqLworICAgICAgZG91YmxlCisgICAgICBtZWFuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLm1lYW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgICAvKioKKwkqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gUG9pc3NvbiBkaXN0cmlidXRpb25zIGhhdmUgdGhlIHNhbWUKKwkqICAgICAgICBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQgYmUgZ2VuZXJhdGVkCisJKiAgICAgICAgYXJlIGVxdWFsLgorCSovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBwb2lzc29uX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkJIGNvbnN0IHBvaXNzb25fZGlzdHJpYnV0aW9uJiBfX2QyKQorI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIHsgcmV0dXJuIF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbSAmJiBfX2QxLl9NX25kID09IF9fZDIuX01fbmQ7IH0KKyNlbHNlCisgICAgICB7IHJldHVybiBfX2QxLl9NX3BhcmFtID09IF9fZDIuX01fcGFyYW07IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJXBvaXNzb25fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVwb2lzc29uX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3Qgc3RkOjpwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVwb2lzc29uX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXBvaXNzb25fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvcgorICAgICAgICogICAgICAgICAgc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OnBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKworICAgICAgLy8gTkI6IFVudXNlZCB3aGVuIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEgaXMgdW5kZWZpbmVkLgorICAgICAgc3RkOjpub3JtYWxfZGlzdHJpYnV0aW9uPGRvdWJsZT4gX01fbmQ7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBQb2lzc29uIGRpc3RyaWJ1dGlvbnMgYXJlIGRpZmZlcmVudC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdGQ6OnBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKioKKyAgICogQGJyaWVmIEFuIGV4cG9uZW50aWFsIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBleHBvbmVudGlhbCBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzCisgICAqIEBmJHAoeHxcbGFtYmRhKSA9IFxsYW1iZGEgZV57LVxsYW1iZGEgeH1AZiQuCisgICAqCisgICAqIDx0YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz0xMCBjZWxsc3BhY2luZz0wPgorICAgKiA8Y2FwdGlvbiBhbGlnbj10b3A+RGlzdHJpYnV0aW9uIFN0YXRpc3RpY3M8L2NhcHRpb24+CisgICAqIDx0cj48dGQ+TWVhbjwvdGQ+PHRkPkBmJFxmcmFjezF9e1xsYW1iZGF9QGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPk1lZGlhbjwvdGQ+PHRkPkBmJFxmcmFje1xsbiAyfXtcbGFtYmRhfUBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5Nb2RlPC90ZD48dGQ+QGYkemVyb0BmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5SYW5nZTwvdGQ+PHRkPkBmJFswLCBcaW5mdHldQGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlN0YW5kYXJkIERldmlhdGlvbjwvdGQ+PHRkPkBmJFxmcmFjezF9e1xsYW1iZGF9QGYkPC90ZD48L3RyPgorICAgKiA8L3RhYmxlPgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBleHBvbmVudGlhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfUmVhbFR5cGUgX19sYW1iZGEgPSBfUmVhbFR5cGUoMSkpCisJOiBfTV9sYW1iZGEoX19sYW1iZGEpCisJeworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX2xhbWJkYSA+IF9SZWFsVHlwZSgwKSk7CisJfQorCisJX1JlYWxUeXBlCisJbGFtYmRhKCkgY29uc3QKKwl7IHJldHVybiBfTV9sYW1iZGE7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fbGFtYmRhID09IF9fcDIuX01fbGFtYmRhOyB9CisKKyAgICAgIHByaXZhdGU6CisJX1JlYWxUeXBlIF9NX2xhbWJkYTsKKyAgICAgIH07CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGFuIGV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbiB3aXRoIGludmVyc2Ugc2NhbGUKKyAgICAgICAqICAgICAgICBwYXJhbWV0ZXIgQGYkXGxhbWJkYUBmJC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbihjb25zdCByZXN1bHRfdHlwZSYgX19sYW1iZGEgPSByZXN1bHRfdHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19sYW1iZGEpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiBIYXMgbm8gZWZmZWN0IG9uIGV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbnMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGludmVyc2Ugc2NhbGUgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgbGFtYmRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmxhbWJkYSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsKKwkgIF9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgcmVzdWx0X3R5cGU+CisJICAgIF9fYXVybmcoX191cm5nKTsKKwkgIHJldHVybiAtc3RkOjpsb2cocmVzdWx0X3R5cGUoMSkgLSBfX2F1cm5nKCkpIC8gX19wLmxhbWJkYSgpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZShfX2YsIF9fdCwgX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9ucyBoYXZlIHRoZSBzYW1lCisgICAgICAgKiAgICAgICAgcGFyYW1ldGVycy4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGV4cG9uZW50aWFsIGRpc3RyaWJ1dGlvbnMgaGF2ZSBkaWZmZXJlbnQKKyAgICogICAgICAgIHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBJbnNlcnRzIGEgJWV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICVleHBvbmVudGlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCk7CisKKyAgLyoqCisgICAqIEBicmllZiBFeHRyYWN0cyBhICVleHBvbmVudGlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgKgorICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggQSAlZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEEgd2VpYnVsbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbm9ybWFsIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb24gaXM6CisgICAqIEBmWworICAgKiAgICAgcCh4fFxhbHBoYSxcYmV0YSkgPSBcZnJhY3tcYWxwaGF9e1xiZXRhfSAoXGZyYWN7eH17XGJldGF9KV57XGFscGhhLTF9CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIFxleHB7KC0oXGZyYWN7eH17XGJldGF9KV5cYWxwaGEpfSAKKyAgICogQGZdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3Mgd2VpYnVsbF9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgd2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfUmVhbFR5cGUgX19hID0gX1JlYWxUeXBlKDEpLAorCQkgICBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorCTogX01fYShfX2EpLCBfTV9iKF9fYikKKwl7IH0KKworCV9SZWFsVHlwZQorCWEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2E7IH0KKworCV9SZWFsVHlwZQorCWIoKSBjb25zdAorCXsgcmV0dXJuIF9NX2I7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fYSA9PSBfX3AyLl9NX2EgJiYgX19wMS5fTV9iID09IF9fcDIuX01fYjsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9hOworCV9SZWFsVHlwZSBfTV9iOworICAgICAgfTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHdlaWJ1bGxfZGlzdHJpYnV0aW9uKF9SZWFsVHlwZSBfX2EgPSBfUmVhbFR5cGUoMSksCisJCQkgICBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX2EsIF9fYikKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgd2VpYnVsbF9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdGhlIEBmJGFAZiQgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5hKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBAZiRiQGYkIHBhcmFtZXRlciBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGIoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBXZWlidWxsIGRpc3RyaWJ1dGlvbnMgaGF2ZSB0aGUgc2FtZQorICAgICAgICogICAgICAgIHBhcmFtZXRlcnMuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHdlaWJ1bGxfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3Qgd2VpYnVsbF9kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiBfX2QxLl9NX3BhcmFtID09IF9fZDIuX01fcGFyYW07IH0KKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCQljb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworICAgIH07CisKKyAgIC8qKgorICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBXZWlidWxsIGRpc3RyaWJ1dGlvbnMgaGF2ZSBkaWZmZXJlbnQKKyAgICAqICAgICAgICBwYXJhbWV0ZXJzLgorICAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjp3ZWlidWxsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OndlaWJ1bGxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBJbnNlcnRzIGEgJXdlaWJ1bGxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAqCisgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAqIEBwYXJhbSBfX3ggIEEgJXdlaWJ1bGxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICogYW4gZXJyb3Igc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBzdGQ6OndlaWJ1bGxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCk7CisKKyAgLyoqCisgICAqIEBicmllZiBFeHRyYWN0cyBhICV3ZWlidWxsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAqCisgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICogQHBhcmFtIF9feCBBICV3ZWlidWxsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBzdGQ6OndlaWJ1bGxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCk7CisKKworICAvKioKKyAgICogQGJyaWVmIEEgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbm9ybWFsIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMKKyAgICogQGZbCisgICAqICAgICBwKHh8YSxiKSA9IFxmcmFjezF9e2J9CisgICAqICAgICAgICAgICAgICAgIFxleHAoIFxmcmFje2EteH17Yn0gLSBcZXhwKFxmcmFje2EteH17Yn0pKSAKKyAgICogQGZdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCWV4cGxpY2l0CisJcGFyYW1fdHlwZShfUmVhbFR5cGUgX19hID0gX1JlYWxUeXBlKDApLAorCQkgICBfUmVhbFR5cGUgX19iID0gX1JlYWxUeXBlKDEpKQorCTogX01fYShfX2EpLCBfTV9iKF9fYikKKwl7IH0KKworCV9SZWFsVHlwZQorCWEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2E7IH0KKworCV9SZWFsVHlwZQorCWIoKSBjb25zdAorCXsgcmV0dXJuIF9NX2I7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fYSA9PSBfX3AyLl9NX2EgJiYgX19wMS5fTV9iID09IF9fcDIuX01fYjsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9hOworCV9SZWFsVHlwZSBfTV9iOworICAgICAgfTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uKF9SZWFsVHlwZSBfX2EgPSBfUmVhbFR5cGUoMCksCisJCQkJIF9SZWFsVHlwZSBfX2IgPSBfUmVhbFR5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fYSwgX19iKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0aGUgQGYkYUBmJCBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdGhlIEBmJGJAZiQgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgYigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5iKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Omxvd2VzdCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBleHRyZW1lIHZhbHVlIGRpc3RyaWJ1dGlvbnMgaGF2ZSB0aGUgc2FtZQorICAgICAgICogICAgICAgIHBhcmFtZXRlcnMuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiBfX2QxLl9NX3BhcmFtID09IF9fZDIuX01fcGFyYW07IH0KKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCQljb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworICAgIH07CisKKyAgLyoqCisgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGV4dHJlbWUgdmFsdWUgZGlzdHJpYnV0aW9ucyBoYXZlIGRpZmZlcmVudAorICAgICogICAgICAgIHBhcmFtZXRlcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6ZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgKgorICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194ICBBICVleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAqIGFuIGVycm9yIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qgc3RkOjpleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpOworCisgIC8qKgorICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICoKKyAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX194IEEgJWV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgKgorICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHN0ZDo6ZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgZGlzY3JldGUgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUgPSBpbnQ+CisgICAgY2xhc3MgZGlzY3JldGVfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPF9JbnRUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGFuIGludGVncmFsIHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX0ludFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKwlmcmllbmQgY2xhc3MgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjsKKworCXBhcmFtX3R5cGUoKQorCTogX01fcHJvYigpLCBfTV9jcCgpCisJeyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwkgIHBhcmFtX3R5cGUoX0lucHV0SXRlcmF0b3IgX193YmVnaW4sCisJCSAgICAgX0lucHV0SXRlcmF0b3IgX193ZW5kKQorCSAgOiBfTV9wcm9iKF9fd2JlZ2luLCBfX3dlbmQpLCBfTV9jcCgpCisJICB7IF9NX2luaXRpYWxpemUoKTsgfQorCisJcGFyYW1fdHlwZShpbml0aWFsaXplcl9saXN0PGRvdWJsZT4gX193aWwpCisJOiBfTV9wcm9iKF9fd2lsLmJlZ2luKCksIF9fd2lsLmVuZCgpKSwgX01fY3AoKQorCXsgX01faW5pdGlhbGl6ZSgpOyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKwkgIHBhcmFtX3R5cGUoc2l6ZV90IF9fbncsIGRvdWJsZSBfX3htaW4sIGRvdWJsZSBfX3htYXgsCisJCSAgICAgX0Z1bmMgX19mdyk7CisKKwkvLyBTZWU6IGh0dHA6Ly9jcHAtbmV4dC5jb20vYXJjaGl2ZS8yMDEwLzEwL2ltcGxpY2l0LW1vdmUtbXVzdC1nby8KKwlwYXJhbV90eXBlKGNvbnN0IHBhcmFtX3R5cGUmKSA9IGRlZmF1bHQ7CisJcGFyYW1fdHlwZSYgb3BlcmF0b3I9KGNvbnN0IHBhcmFtX3R5cGUmKSA9IGRlZmF1bHQ7CisKKwlzdGQ6OnZlY3Rvcjxkb3VibGU+CisJcHJvYmFiaWxpdGllcygpIGNvbnN0CisJeyByZXR1cm4gX01fcHJvYi5lbXB0eSgpID8gc3RkOjp2ZWN0b3I8ZG91YmxlPigxLCAxLjApIDogX01fcHJvYjsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9wcm9iID09IF9fcDIuX01fcHJvYjsgfQorCisgICAgICBwcml2YXRlOgorCXZvaWQKKwlfTV9pbml0aWFsaXplKCk7CisKKwlzdGQ6OnZlY3Rvcjxkb3VibGU+IF9NX3Byb2I7CisJc3RkOjp2ZWN0b3I8ZG91YmxlPiBfTV9jcDsKKyAgICAgIH07CisKKyAgICAgIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbigpCisgICAgICA6IF9NX3BhcmFtKCkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwlkaXNjcmV0ZV9kaXN0cmlidXRpb24oX0lucHV0SXRlcmF0b3IgX193YmVnaW4sCisJCQkgICAgICBfSW5wdXRJdGVyYXRvciBfX3dlbmQpCisJOiBfTV9wYXJhbShfX3diZWdpbiwgX193ZW5kKQorCXsgfQorCisgICAgICBkaXNjcmV0ZV9kaXN0cmlidXRpb24oaW5pdGlhbGl6ZXJfbGlzdDxkb3VibGU+IF9fd2wpCisgICAgICA6IF9NX3BhcmFtKF9fd2wpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmM+CisJZGlzY3JldGVfZGlzdHJpYnV0aW9uKHNpemVfdCBfX253LCBkb3VibGUgX194bWluLCBkb3VibGUgX194bWF4LAorCQkJICAgICAgX0Z1bmMgX19mdykKKwk6IF9NX3BhcmFtKF9fbncsIF9feG1pbiwgX194bWF4LCBfX2Z3KQorCXsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgZGlzY3JldGVfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcHJvYmFiaWxpdGllcyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+CisgICAgICBwcm9iYWJpbGl0aWVzKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX01fcGFyYW0uX01fcHJvYi5lbXB0eSgpCisJICA/IHN0ZDo6dmVjdG9yPGRvdWJsZT4oMSwgMS4wKSA6IF9NX3BhcmFtLl9NX3Byb2I7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeworCXJldHVybiBfTV9wYXJhbS5fTV9wcm9iLmVtcHR5KCkKKwkgID8gcmVzdWx0X3R5cGUoMCkgOiByZXN1bHRfdHlwZShfTV9wYXJhbS5fTV9wcm9iLnNpemUoKSAtIDEpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZShfX2YsIF9fdCwgX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZGlzY3JldGUgZGlzdHJpYnV0aW9ucyBoYXZlIHRoZSBzYW1lCisgICAgICAgKiAgICAgICAgcGFyYW1ldGVycy4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgZGlzY3JldGVfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgZGlzY3JldGVfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlZGlzY3JldGVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVkaXNjcmV0ZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHN0ZDo6ZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWRpc2NyZXRlX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggQSAlZGlzY3JldGVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvcgorICAgICAgICogICAgICAgICAgc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OmRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gZGlzY3JldGUgZGlzdHJpYnV0aW9ucyBoYXZlIGRpZmZlcmVudAorICAgICogICAgICAgIHBhcmFtZXRlcnMuCisgICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN0ZDo6ZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpkaXNjcmV0ZV9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgcGllY2V3aXNlIGNvbnN0YW50IHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMKKyAgICoKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKwlmcmllbmQgY2xhc3MgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OworCisJcGFyYW1fdHlwZSgpCisJOiBfTV9pbnQoKSwgX01fZGVuKCksIF9NX2NwKCkKKwl7IH0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yQiwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3JXPgorCSAgcGFyYW1fdHlwZShfSW5wdXRJdGVyYXRvckIgX19iZmlyc3QsCisJCSAgICAgX0lucHV0SXRlcmF0b3JCIF9fYmVuZCwKKwkJICAgICBfSW5wdXRJdGVyYXRvclcgX193YmVnaW4pOworCisJdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmM+CisJICBwYXJhbV90eXBlKGluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX2JpLCBfRnVuYyBfX2Z3KTsKKworCXRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCSAgcGFyYW1fdHlwZShzaXplX3QgX19udywgX1JlYWxUeXBlIF9feG1pbiwgX1JlYWxUeXBlIF9feG1heCwKKwkJICAgICBfRnVuYyBfX2Z3KTsKKworCS8vIFNlZTogaHR0cDovL2NwcC1uZXh0LmNvbS9hcmNoaXZlLzIwMTAvMTAvaW1wbGljaXQtbW92ZS1tdXN0LWdvLworCXBhcmFtX3R5cGUoY29uc3QgcGFyYW1fdHlwZSYpID0gZGVmYXVsdDsKKwlwYXJhbV90eXBlJiBvcGVyYXRvcj0oY29uc3QgcGFyYW1fdHlwZSYpID0gZGVmYXVsdDsKKworCXN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4KKwlpbnRlcnZhbHMoKSBjb25zdAorCXsKKwkgIGlmIChfTV9pbnQuZW1wdHkoKSkKKwkgICAgeworCSAgICAgIHN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4gX190bXAoMik7CisJICAgICAgX190bXBbMV0gPSBfUmVhbFR5cGUoMSk7CisJICAgICAgcmV0dXJuIF9fdG1wOworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBfTV9pbnQ7CisJfQorCisJc3RkOjp2ZWN0b3I8ZG91YmxlPgorCWRlbnNpdGllcygpIGNvbnN0CisJeyByZXR1cm4gX01fZGVuLmVtcHR5KCkgPyBzdGQ6OnZlY3Rvcjxkb3VibGU+KDEsIDEuMCkgOiBfTV9kZW47IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01faW50ID09IF9fcDIuX01faW50ICYmIF9fcDEuX01fZGVuID09IF9fcDIuX01fZGVuOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZAorCV9NX2luaXRpYWxpemUoKTsKKworCXN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4gX01faW50OworCXN0ZDo6dmVjdG9yPGRvdWJsZT4gX01fZGVuOworCXN0ZDo6dmVjdG9yPGRvdWJsZT4gX01fY3A7CisgICAgICB9OworCisgICAgICBleHBsaWNpdAorICAgICAgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbigpCisgICAgICA6IF9NX3BhcmFtKCkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvckIsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yVz4KKwlwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uKF9JbnB1dEl0ZXJhdG9yQiBfX2JmaXJzdCwKKwkJCQkJX0lucHV0SXRlcmF0b3JCIF9fYmVuZCwKKwkJCQkJX0lucHV0SXRlcmF0b3JXIF9fd2JlZ2luKQorCTogX01fcGFyYW0oX19iZmlyc3QsIF9fYmVuZCwgX193YmVnaW4pCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCXBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24oaW5pdGlhbGl6ZXJfbGlzdDxfUmVhbFR5cGU+IF9fYmwsCisJCQkJCV9GdW5jIF9fZncpCisJOiBfTV9wYXJhbShfX2JsLCBfX2Z3KQorCXsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKwlwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uKHNpemVfdCBfX253LAorCQkJCQlfUmVhbFR5cGUgX194bWluLCBfUmVhbFR5cGUgX194bWF4LAorCQkJCQlfRnVuYyBfX2Z3KQorCTogX01fcGFyYW0oX19udywgX194bWluLCBfX3htYXgsIF9fZncpCisJeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyBhIHZlY3RvciBvZiB0aGUgaW50ZXJ2YWxzLgorICAgICAgICovCisgICAgICBzdGQ6OnZlY3RvcjxfUmVhbFR5cGU+CisgICAgICBpbnRlcnZhbHMoKSBjb25zdAorICAgICAgeworCWlmIChfTV9wYXJhbS5fTV9pbnQuZW1wdHkoKSkKKwkgIHsKKwkgICAgc3RkOjp2ZWN0b3I8X1JlYWxUeXBlPiBfX3RtcCgyKTsKKwkgICAgX190bXBbMV0gPSBfUmVhbFR5cGUoMSk7CisJICAgIHJldHVybiBfX3RtcDsKKwkgIH0KKwllbHNlCisJICByZXR1cm4gX01fcGFyYW0uX01faW50OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIGEgdmVjdG9yIG9mIHRoZSBwcm9iYWJpbGl0eSBkZW5zaXRpZXMuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4KKyAgICAgIGRlbnNpdGllcygpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9NX3BhcmFtLl9NX2Rlbi5lbXB0eSgpCisJICA/IHN0ZDo6dmVjdG9yPGRvdWJsZT4oMSwgMS4wKSA6IF9NX3BhcmFtLl9NX2RlbjsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeworCXJldHVybiBfTV9wYXJhbS5fTV9pbnQuZW1wdHkoKQorCSAgPyByZXN1bHRfdHlwZSgwKSA6IF9NX3BhcmFtLl9NX2ludC5mcm9udCgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX01fcGFyYW0uX01faW50LmVtcHR5KCkKKwkgID8gcmVzdWx0X3R5cGUoMSkgOiBfTV9wYXJhbS5fTV9pbnQuYmFjaygpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZShfX2YsIF9fdCwgX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gcGllY2V3aXNlIGNvbnN0YW50IGRpc3RyaWJ1dGlvbnMgaGF2ZSB0aGUKKyAgICAgICAqICAgICAgICBzYW1lIHBhcmFtZXRlcnMuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb24mIF9fZDEsCisJCSBjb25zdCBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlcGllY2V3aXNlX2NvbnN0YW5fZGlzdHJpYnV0aW9uIHJhbmRvbQorICAgICAgICogICAgICAgIG51bWJlciBkaXN0cmlidXRpb24gQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlcGllY2V3aXNlX2NvbnN0YW5fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHN0ZDo6cGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlcGllY2V3aXNlX2NvbnN0YW5fZGlzdHJpYnV0aW9uIHJhbmRvbQorICAgICAgICogICAgICAgIG51bWJlciBkaXN0cmlidXRpb24gQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggQSAlcGllY2V3aXNlX2NvbnN0YW5fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvcgorICAgICAgICogICAgICAgICAgc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgc3RkOjpwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gcGllY2V3aXNlIGNvbnN0YW50IGRpc3RyaWJ1dGlvbnMgaGF2ZSAKKyAgICAqICAgICAgICBkaWZmZXJlbnQgcGFyYW1ldGVycy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHN0ZDo6cGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIHBpZWNld2lzZSBsaW5lYXIgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcworICAgKgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisJZnJpZW5kIGNsYXNzIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT47CisKKwlwYXJhbV90eXBlKCkKKwk6IF9NX2ludCgpLCBfTV9kZW4oKSwgX01fY3AoKSwgX01fbSgpCisJeyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvckIsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yVz4KKwkgIHBhcmFtX3R5cGUoX0lucHV0SXRlcmF0b3JCIF9fYmZpcnN0LAorCQkgICAgIF9JbnB1dEl0ZXJhdG9yQiBfX2JlbmQsCisJCSAgICAgX0lucHV0SXRlcmF0b3JXIF9fd2JlZ2luKTsKKworCXRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCSAgcGFyYW1fdHlwZShpbml0aWFsaXplcl9saXN0PF9SZWFsVHlwZT4gX19ibCwgX0Z1bmMgX19mdyk7CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKwkgIHBhcmFtX3R5cGUoc2l6ZV90IF9fbncsIF9SZWFsVHlwZSBfX3htaW4sIF9SZWFsVHlwZSBfX3htYXgsCisJCSAgICAgX0Z1bmMgX19mdyk7CisKKwkvLyBTZWU6IGh0dHA6Ly9jcHAtbmV4dC5jb20vYXJjaGl2ZS8yMDEwLzEwL2ltcGxpY2l0LW1vdmUtbXVzdC1nby8KKwlwYXJhbV90eXBlKGNvbnN0IHBhcmFtX3R5cGUmKSA9IGRlZmF1bHQ7CisJcGFyYW1fdHlwZSYgb3BlcmF0b3I9KGNvbnN0IHBhcmFtX3R5cGUmKSA9IGRlZmF1bHQ7CisKKwlzdGQ6OnZlY3RvcjxfUmVhbFR5cGU+CisJaW50ZXJ2YWxzKCkgY29uc3QKKwl7CisJICBpZiAoX01faW50LmVtcHR5KCkpCisJICAgIHsKKwkgICAgICBzdGQ6OnZlY3RvcjxfUmVhbFR5cGU+IF9fdG1wKDIpOworCSAgICAgIF9fdG1wWzFdID0gX1JlYWxUeXBlKDEpOworCSAgICAgIHJldHVybiBfX3RtcDsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gX01faW50OworCX0KKworCXN0ZDo6dmVjdG9yPGRvdWJsZT4KKwlkZW5zaXRpZXMoKSBjb25zdAorCXsgcmV0dXJuIF9NX2Rlbi5lbXB0eSgpID8gc3RkOjp2ZWN0b3I8ZG91YmxlPigyLCAxLjApIDogX01fZGVuOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiAoX19wMS5fTV9pbnQgPT0gX19wMi5fTV9pbnQKKwkJICAmJiBfX3AxLl9NX2RlbiA9PSBfX3AyLl9NX2Rlbik7IH0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkCisJX01faW5pdGlhbGl6ZSgpOworCisJc3RkOjp2ZWN0b3I8X1JlYWxUeXBlPiBfTV9pbnQ7CisJc3RkOjp2ZWN0b3I8ZG91YmxlPiBfTV9kZW47CisJc3RkOjp2ZWN0b3I8ZG91YmxlPiBfTV9jcDsKKwlzdGQ6OnZlY3Rvcjxkb3VibGU+IF9NX207CisgICAgICB9OworCisgICAgICBleHBsaWNpdAorICAgICAgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24oKQorICAgICAgOiBfTV9wYXJhbSgpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3JCLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvclc+CisJcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24oX0lucHV0SXRlcmF0b3JCIF9fYmZpcnN0LAorCQkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yQiBfX2JlbmQsCisJCQkJICAgICAgX0lucHV0SXRlcmF0b3JXIF9fd2JlZ2luKQorCTogX01fcGFyYW0oX19iZmlyc3QsIF9fYmVuZCwgX193YmVnaW4pCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorCXBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uKGluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX2JsLAorCQkJCSAgICAgIF9GdW5jIF9fZncpCisJOiBfTV9wYXJhbShfX2JsLCBfX2Z3KQorCXsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKwlwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbihzaXplX3QgX19udywKKwkJCQkgICAgICBfUmVhbFR5cGUgX194bWluLCBfUmVhbFR5cGUgX194bWF4LAorCQkJCSAgICAgIF9GdW5jIF9fZncpCisJOiBfTV9wYXJhbShfX253LCBfX3htaW4sIF9feG1heCwgX19mdykKKwl7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdGhlIGludGVydmFscyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBzdGQ6OnZlY3RvcjxfUmVhbFR5cGU+CisgICAgICBpbnRlcnZhbHMoKSBjb25zdAorICAgICAgeworCWlmIChfTV9wYXJhbS5fTV9pbnQuZW1wdHkoKSkKKwkgIHsKKwkgICAgc3RkOjp2ZWN0b3I8X1JlYWxUeXBlPiBfX3RtcCgyKTsKKwkgICAgX190bXBbMV0gPSBfUmVhbFR5cGUoMSk7CisJICAgIHJldHVybiBfX3RtcDsKKwkgIH0KKwllbHNlCisJICByZXR1cm4gX01fcGFyYW0uX01faW50OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gYSB2ZWN0b3Igb2YgdGhlIHByb2JhYmlsaXR5IGRlbnNpdGllcyBvZiB0aGUKKyAgICAgICAqICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4KKyAgICAgIGRlbnNpdGllcygpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9NX3BhcmFtLl9NX2Rlbi5lbXB0eSgpCisJICA/IHN0ZDo6dmVjdG9yPGRvdWJsZT4oMiwgMS4wKSA6IF9NX3BhcmFtLl9NX2RlbjsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeworCXJldHVybiBfTV9wYXJhbS5fTV9pbnQuZW1wdHkoKQorCSAgPyByZXN1bHRfdHlwZSgwKSA6IF9NX3BhcmFtLl9NX2ludC5mcm9udCgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX01fcGFyYW0uX01faW50LmVtcHR5KCkKKwkgID8gcmVzdWx0X3R5cGUoMSkgOiBfTV9wYXJhbS5fTV9pbnQuYmFjaygpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZShfX2YsIF9fdCwgX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gcGllY2V3aXNlIGxpbmVhciBkaXN0cmlidXRpb25zIGhhdmUgdGhlCisgICAgICAgKiAgICAgICAgc2FtZSBwYXJhbWV0ZXJzLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkJIGNvbnN0IHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgIGRpc3RyaWJ1dGlvbiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiAgICAgICAgICBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBzdGQ6OnBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgZGlzdHJpYnV0aW9uIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yCisgICAgICAgKiAgICAgICAgICBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBzdGQ6OnBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gcGllY2V3aXNlIGxpbmVhciBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAqICAgICAgICBkaWZmZXJlbnQgcGFyYW1ldGVycy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBzdGQ6OnBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKiBAfSAqLyAvLyBncm91cCByYW5kb21fZGlzdHJpYnV0aW9uc19wb2lzc29uCisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgcmFuZG9tX2Rpc3RyaWJ1dGlvbnMKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcmFuZG9tX3V0aWxpdGllcyBSYW5kb20gTnVtYmVyIFV0aWxpdGllcworICAgKiBAaW5ncm91cCByYW5kb20KKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiBUaGUgc2VlZF9zZXEgY2xhc3MgZ2VuZXJhdGVzIHNlcXVlbmNlcyBvZiBzZWVkcyBmb3IgcmFuZG9tCisgICAqICAgICAgICBudW1iZXIgZ2VuZXJhdG9ycy4KKyAgICovCisgIGNsYXNzIHNlZWRfc2VxCisgIHsKKworICBwdWJsaWM6CisgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSBzZWVkIHZhbGVzLiAqLworICAgIHR5cGVkZWYgdWludF9sZWFzdDMyX3QgcmVzdWx0X3R5cGU7CisKKyAgICAvKiogRGVmYXVsdCBjb25zdHJ1Y3Rvci4gKi8KKyAgICBzZWVkX3NlcSgpCisgICAgOiBfTV92KCkKKyAgICB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgICAgc2VlZF9zZXEoc3RkOjppbml0aWFsaXplcl9saXN0PF9JbnRUeXBlPiBpbCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHNlZWRfc2VxKF9JbnB1dEl0ZXJhdG9yIF9fYmVnaW4sIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKTsKKworICAgIC8vIGdlbmVyYXRpbmcgZnVuY3Rpb25zCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgZ2VuZXJhdGUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fYmVnaW4sIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2VuZCk7CisKKyAgICAvLyBwcm9wZXJ0eSBmdW5jdGlvbnMKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fdi5zaXplKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgcGFyYW0oT3V0cHV0SXRlcmF0b3IgX19kZXN0KSBjb25zdAorICAgICAgeyBzdGQ6OmNvcHkoX01fdi5iZWdpbigpLCBfTV92LmVuZCgpLCBfX2Rlc3QpOyB9CisKKyAgcHJpdmF0ZToKKyAgICAvLy8KKyAgICBzdGQ6OnZlY3RvcjxyZXN1bHRfdHlwZT4gX01fdjsKKyAgfTsKKworICAvKiBAfSAqLyAvLyBncm91cCByYW5kb21fdXRpbGl0aWVzCisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgcmFuZG9tCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JhbmRvbS50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmFuZG9tLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGM2NTUwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JhbmRvbS50Y2MKQEAgLTAsMCArMSwzNDg2IEBACisvLyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gKG91dCBvZiBsaW5lKSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9yYW5kb20udGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7cmFuZG9tfQorICovCisKKyNpZm5kZWYgX1JBTkRPTV9UQ0MKKyNkZWZpbmUgX1JBTkRPTV9UQ0MgMQorCisjaW5jbHVkZSA8bnVtZXJpYz4gLy8gc3RkOjphY2N1bXVsYXRlIGFuZCBzdGQ6OnBhcnRpYWxfc3VtCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworICAvKgorICAgKiAoRnVydGhlcikgaW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgICovCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICAvLyBHZW5lcmFsIGNhc2UgZm9yIHggPSAoYXggKyBjKSBtb2QgbSAtLSB1c2UgU2NocmFnZSdzIGFsZ29yaXRobQorICAgIC8vIHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cuCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRpb25zOiAgYSA+IDAsIG0gPiAwLgorICAgIC8vCisgICAgLy8gTm90ZTogb25seSB3b3JrcyBjb3JyZWN0bHkgZm9yIF9fbSAlIF9fYSA8IF9fbSAvIF9fYS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9UcCBfX20sIF9UcCBfX2EsIF9UcCBfX2M+CisgICAgICBfVHAKKyAgICAgIF9Nb2Q8X1RwLCBfX20sIF9fYSwgX19jLCBmYWxzZSwgdHJ1ZT46OgorICAgICAgX19jYWxjKF9UcCBfX3gpCisgICAgICB7CisJaWYgKF9fYSA9PSAxKQorCSAgX194ICU9IF9fbTsKKwllbHNlCisJICB7CisJICAgIHN0YXRpYyBjb25zdCBfVHAgX19xID0gX19tIC8gX19hOworCSAgICBzdGF0aWMgY29uc3QgX1RwIF9fciA9IF9fbSAlIF9fYTsKKworCSAgICBfVHAgX190MSA9IF9fYSAqIChfX3ggJSBfX3EpOworCSAgICBfVHAgX190MiA9IF9fciAqIChfX3ggLyBfX3EpOworCSAgICBpZiAoX190MSA+PSBfX3QyKQorCSAgICAgIF9feCA9IF9fdDEgLSBfX3QyOworCSAgICBlbHNlCisJICAgICAgX194ID0gX19tIC0gX190MiArIF9fdDE7CisJICB9CisKKwlpZiAoX19jICE9IDApCisJICB7CisJICAgIGNvbnN0IF9UcCBfX2QgPSBfX20gLSBfX3g7CisJICAgIGlmIChfX2QgPiBfX2MpCisJICAgICAgX194ICs9IF9fYzsKKwkgICAgZWxzZQorCSAgICAgIF9feCA9IF9fYyAtIF9fZDsKKwkgIH0KKwlyZXR1cm4gX194OworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9UcD4KKyAgICAgIF9PdXRwdXRJdGVyYXRvcgorICAgICAgX19ub3JtYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX2ZhY3RvcikKKyAgICAgIHsKKwlmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKKwkgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0IC8gX19mYWN0b3I7CisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgfQorCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICBjb25zdGV4cHIgX1VJbnRUeXBlCisgICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6bXVsdGlwbGllcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgY29uc3RleHByIF9VSW50VHlwZQorICAgIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT46OmluY3JlbWVudDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgY29uc3RleHByIF9VSW50VHlwZQorICAgIGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT46Om1vZHVsdXM7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tPgorICAgIGNvbnN0ZXhwciBfVUludFR5cGUKKyAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+OjpkZWZhdWx0X3NlZWQ7CisKKyAgLyoqCisgICAqIFNlZWRzIHRoZSBMQ1Igd2l0aCBpbnRlZ3JhbCB2YWx1ZSBAcCBfX3MsIGFkanVzdGVkIHNvIHRoYXQgdGhlCisgICAqIHJpbmcgaWRlbnRpdHkgaXMgbmV2ZXIgYSBtZW1iZXIgb2YgdGhlIGNvbnZlcmdlbmNlIHNldC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICB2b2lkCisgICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6CisgICAgc2VlZChyZXN1bHRfdHlwZSBfX3MpCisgICAgeworICAgICAgaWYgKChfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCBfX20+KF9fYykgPT0gMCkKKwkgICYmIChfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCBfX20+KF9fcykgPT0gMCkpCisJX01feCA9IDE7CisgICAgICBlbHNlCisJX01feCA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIF9fbT4oX19zKTsKKyAgICB9CisKKyAgLyoqCisgICAqIFNlZWRzIHRoZSBMQ1IgZW5naW5lIHdpdGggYSB2YWx1ZSBnZW5lcmF0ZWQgYnkgQHAgX19xLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Tc2VxPgorICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jbGFzczxfU3NlcT46OnZhbHVlPjo6dHlwZQorICAgICAgbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmU8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6CisgICAgICBzZWVkKF9Tc2VxJiBfX3EpCisgICAgICB7CisJY29uc3QgX1VJbnRUeXBlIF9fazAgPSBfX20gPT0gMCA/IHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6ZGlnaXRzCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0ZDo6X19sZyhfX20pOworCWNvbnN0IF9VSW50VHlwZSBfX2sgPSAoX19rMCArIDMxKSAvIDMyOworCXVpbnRfbGVhc3QzMl90IF9fYXJyW19fayArIDNdOworCV9fcS5nZW5lcmF0ZShfX2FyciArIDAsIF9fYXJyICsgX19rICsgMyk7CisJX1VJbnRUeXBlIF9fZmFjdG9yID0gMXU7CisJX1VJbnRUeXBlIF9fc3VtID0gMHU7CisJZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19rOyArK19faikKKwkgIHsKKwkgICAgX19zdW0gKz0gX19hcnJbX19qICsgM10gKiBfX2ZhY3RvcjsKKwkgICAgX19mYWN0b3IgKj0gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIDMyPjo6X192YWx1ZTsKKwkgIH0KKwlzZWVkKF9fc3VtKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20sCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPF9VSW50VHlwZSwKKwkJCQkJCV9fYSwgX19jLCBfX20+JiBfX2xjcikKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OmZpeGVkIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19vcy53aWRlbignICcpKTsKKworICAgICAgX19vcyA8PCBfX2xjci5fTV94OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZTxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+JiBfX2xjcikKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyk7CisKKyAgICAgIF9faXMgPj4gX19sY3IuX01feDsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0ZXhwciBzaXplX3QKKyAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPjo6d29yZF9zaXplOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0ZXhwciBzaXplX3QKKyAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPjo6c3RhdGVfc2l6ZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICBjb25zdGV4cHIgc2l6ZV90CisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnNoaWZ0X3NpemU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3RleHByIHNpemVfdAorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+OjptYXNrX2JpdHM7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3RleHByIF9VSW50VHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+Ojp4b3JfbWFzazsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICBjb25zdGV4cHIgc2l6ZV90CisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnRlbXBlcmluZ191OworICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0ZXhwciBfVUludFR5cGUKKyAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPjo6dGVtcGVyaW5nX2Q7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3RleHByIHNpemVfdAorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+Ojp0ZW1wZXJpbmdfczsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICBjb25zdGV4cHIgX1VJbnRUeXBlCisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnRlbXBlcmluZ19iOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0ZXhwciBzaXplX3QKKyAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPjo6dGVtcGVyaW5nX3Q7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLAorCSAgIHNpemVfdCBfX3csIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgY29uc3RleHByIF9VSW50VHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+Ojp0ZW1wZXJpbmdfYzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICBjb25zdGV4cHIgc2l6ZV90CisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnRlbXBlcmluZ19sOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwKKwkgICBzaXplX3QgX193LCBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIGNvbnN0ZXhwciBfVUludFR5cGUKKyAgICBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fZCwKKwkJCSAgICBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPjo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25fbXVsdGlwbGllcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICBjb25zdGV4cHIgX1VJbnRUeXBlCisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OmRlZmF1bHRfc2VlZDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICB2b2lkCisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OgorICAgIHNlZWQocmVzdWx0X3R5cGUgX19zZCkKKyAgICB7CisgICAgICBfTV94WzBdID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwKKwlfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZT4oX19zZCk7CisKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDE7IF9faSA8IHN0YXRlX3NpemU7ICsrX19pKQorCXsKKwkgIF9VSW50VHlwZSBfX3ggPSBfTV94W19faSAtIDFdOworCSAgX194IF49IF9feCA+PiAoX193IC0gMik7CisJICBfX3ggKj0gX19mOworCSAgX194ICs9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIF9fbj4oX19pKTsKKwkgIF9NX3hbX19pXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsCisJICAgIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlPihfX3gpOworCX0KKyAgICAgIF9NX3AgPSBzdGF0ZV9zaXplOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsCisJICAgc2l6ZV90IF9fdywgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcT4KKyAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY2xhc3M8X1NzZXE+Ojp2YWx1ZT46OnR5cGUKKyAgICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OgorICAgICAgc2VlZChfU3NlcSYgX19xKQorICAgICAgeworCWNvbnN0IF9VSW50VHlwZSBfX3VwcGVyX21hc2sgPSAofl9VSW50VHlwZSgpKSA8PCBfX3I7CisJY29uc3Qgc2l6ZV90IF9fayA9IChfX3cgKyAzMSkgLyAzMjsKKwl1aW50X2xlYXN0MzJfdCBfX2FycltfX24gKiBfX2tdOworCV9fcS5nZW5lcmF0ZShfX2FyciArIDAsIF9fYXJyICsgX19uICogX19rKTsKKworCWJvb2wgX196ZXJvID0gdHJ1ZTsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBzdGF0ZV9zaXplOyArK19faSkKKwkgIHsKKwkgICAgX1VJbnRUeXBlIF9fZmFjdG9yID0gMXU7CisJICAgIF9VSW50VHlwZSBfX3N1bSA9IDB1OworCSAgICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX2s7ICsrX19qKQorCSAgICAgIHsKKwkJX19zdW0gKz0gX19hcnJbX19rICogX19pICsgX19qXSAqIF9fZmFjdG9yOworCQlfX2ZhY3RvciAqPSBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgMzI+OjpfX3ZhbHVlOworCSAgICAgIH0KKwkgICAgX01feFtfX2ldID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwKKwkgICAgICBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZT4oX19zdW0pOworCisJICAgIGlmIChfX3plcm8pCisJICAgICAgeworCQlpZiAoX19pID09IDApCisJCSAgeworCQkgICAgaWYgKChfTV94WzBdICYgX191cHBlcl9tYXNrKSAhPSAwdSkKKwkJICAgICAgX196ZXJvID0gZmFsc2U7CisJCSAgfQorCQllbHNlIGlmIChfTV94W19faV0gIT0gMHUpCisJCSAgX196ZXJvID0gZmFsc2U7CisJICAgICAgfQorCSAgfQorICAgICAgICBpZiAoX196ZXJvKQorICAgICAgICAgIF9NX3hbMF0gPSBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193IC0gMT46Ol9fdmFsdWU7CisJX01fcCA9IHN0YXRlX3NpemU7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LAorCSAgIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgdm9pZAorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+OjoKKyAgICBfTV9nZW5fcmFuZCh2b2lkKQorICAgIHsKKyAgICAgIGNvbnN0IF9VSW50VHlwZSBfX3VwcGVyX21hc2sgPSAofl9VSW50VHlwZSgpKSA8PCBfX3I7CisgICAgICBjb25zdCBfVUludFR5cGUgX19sb3dlcl9tYXNrID0gfl9fdXBwZXJfbWFzazsKKworICAgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDwgKF9fbiAtIF9fbSk7ICsrX19rKQorICAgICAgICB7CisJICBfVUludFR5cGUgX195ID0gKChfTV94W19fa10gJiBfX3VwcGVyX21hc2spCisJCQkgICB8IChfTV94W19fayArIDFdICYgX19sb3dlcl9tYXNrKSk7CisJICBfTV94W19fa10gPSAoX01feFtfX2sgKyBfX21dIF4gKF9feSA+PiAxKQorCQkgICAgICAgXiAoKF9feSAmIDB4MDEpID8gX19hIDogMCkpOworICAgICAgICB9CisKKyAgICAgIGZvciAoc2l6ZV90IF9fayA9IChfX24gLSBfX20pOyBfX2sgPCAoX19uIC0gMSk7ICsrX19rKQorCXsKKwkgIF9VSW50VHlwZSBfX3kgPSAoKF9NX3hbX19rXSAmIF9fdXBwZXJfbWFzaykKKwkJCSAgIHwgKF9NX3hbX19rICsgMV0gJiBfX2xvd2VyX21hc2spKTsKKwkgIF9NX3hbX19rXSA9IChfTV94W19fayArIChfX20gLSBfX24pXSBeIChfX3kgPj4gMSkKKwkJICAgICAgIF4gKChfX3kgJiAweDAxKSA/IF9fYSA6IDApKTsKKwl9CisKKyAgICAgIF9VSW50VHlwZSBfX3kgPSAoKF9NX3hbX19uIC0gMV0gJiBfX3VwcGVyX21hc2spCisJCSAgICAgICB8IChfTV94WzBdICYgX19sb3dlcl9tYXNrKSk7CisgICAgICBfTV94W19fbiAtIDFdID0gKF9NX3hbX19tIC0gMV0gXiAoX195ID4+IDEpCisJCSAgICAgICBeICgoX195ICYgMHgwMSkgPyBfX2EgOiAwKSk7CisgICAgICBfTV9wID0gMDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LAorCSAgIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2Y+CisgICAgdm9pZAorICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19kLAorCQkJICAgIF9fcywgX19iLCBfX3QsIF9fYywgX19sLCBfX2Y+OjoKKyAgICBkaXNjYXJkKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3opCisgICAgeworICAgICAgd2hpbGUgKF9feiA+IHN0YXRlX3NpemUgLSBfTV9wKQorCXsKKwkgIF9feiAtPSBzdGF0ZV9zaXplIC0gX01fcDsKKwkgIF9NX2dlbl9yYW5kKCk7CisJfQorICAgICAgX01fcCArPSBfX3o7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywKKwkgICBzaXplX3QgX19uLCBzaXplX3QgX19tLCBzaXplX3QgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIHNpemVfdCBfX3UsIF9VSW50VHlwZSBfX2QsIHNpemVfdCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgc2l6ZV90IF9fdCwgX1VJbnRUeXBlIF9fYywgc2l6ZV90IF9fbCwKKwkgICBfVUludFR5cGUgX19mPgorICAgIHR5cGVuYW1lCisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OnJlc3VsdF90eXBlCisgICAgbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX2QsCisJCQkgICAgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj46OgorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyAgICAgIC8vIFJlbG9hZCB0aGUgdmVjdG9yIC0gY29zdCBpcyBPKG4pIGFtb3J0aXplZCBvdmVyIG4gY2FsbHMuCisgICAgICBpZiAoX01fcCA+PSBzdGF0ZV9zaXplKQorCV9NX2dlbl9yYW5kKCk7CisKKyAgICAgIC8vIENhbGN1bGF0ZSBvKHgoaSkpLgorICAgICAgcmVzdWx0X3R5cGUgX196ID0gX01feFtfTV9wKytdOworICAgICAgX196IF49IChfX3ogPj4gX191KSAmIF9fZDsKKyAgICAgIF9feiBePSAoX196IDw8IF9fcykgJiBfX2I7CisgICAgICBfX3ogXj0gKF9feiA8PCBfX3QpICYgX19jOworICAgICAgX196IF49IChfX3ogPj4gX19sKTsKKworICAgICAgcmV0dXJuIF9fejsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LAorCSAgIHNpemVfdCBfX24sIHNpemVfdCBfX20sIHNpemVfdCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgc2l6ZV90IF9fdSwgX1VJbnRUeXBlIF9fZCwgc2l6ZV90IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBzaXplX3QgX190LCBfVUludFR5cGUgX19jLCBzaXplX3QgX19sLAorCSAgIF9VSW50VHlwZSBfX2YsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBtZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19uLCBfX20sCisJICAgICAgIF9fciwgX19hLCBfX3UsIF9fZCwgX19zLCBfX2IsIF9fdCwgX19jLCBfX2wsIF9fZj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6Zml4ZWQgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwlfX29zIDw8IF9feC5fTV94W19faV0gPDwgX19zcGFjZTsKKyAgICAgIF9fb3MgPDwgX194Ll9NX3A7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csCisJICAgc2l6ZV90IF9fbiwgc2l6ZV90IF9fbSwgc2l6ZV90IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBzaXplX3QgX191LCBfVUludFR5cGUgX19kLCBzaXplX3QgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIHNpemVfdCBfX3QsIF9VSW50VHlwZSBfX2MsIHNpemVfdCBfX2wsCisJICAgX1VJbnRUeXBlIF9fZiwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIG1lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwKKwkgICAgICAgX19yLCBfX2EsIF9fdSwgX19kLCBfX3MsIF9fYiwgX190LCBfX2MsIF9fbCwgX19mPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwlfX2lzID4+IF9feC5fTV94W19faV07CisgICAgICBfX2lzID4+IF9feC5fTV9wOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yPgorICAgIGNvbnN0ZXhwciBzaXplX3QKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+Ojp3b3JkX3NpemU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yPgorICAgIGNvbnN0ZXhwciBzaXplX3QKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+OjpzaG9ydF9sYWc7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yPgorICAgIGNvbnN0ZXhwciBzaXplX3QKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsIF9fdywgX19zLCBfX3I+Ojpsb25nX2xhZzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csIHNpemVfdCBfX3MsIHNpemVfdCBfX3I+CisgICAgY29uc3RleHByIF9VSW50VHlwZQorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX3MsIF9fcj46OmRlZmF1bHRfc2VlZDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csIHNpemVfdCBfX3MsIHNpemVfdCBfX3I+CisgICAgdm9pZAorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX3MsIF9fcj46OgorICAgIHNlZWQocmVzdWx0X3R5cGUgX192YWx1ZSkKKyAgICB7CisgICAgICBzdGQ6OmxpbmVhcl9jb25ncnVlbnRpYWxfZW5naW5lPHJlc3VsdF90eXBlLCA0MDAxNHUsIDB1LCAyMTQ3NDgzNTYzdT4KKwlfX2xjZyhfX3ZhbHVlID09IDB1ID8gZGVmYXVsdF9zZWVkIDogX192YWx1ZSk7CisKKyAgICAgIGNvbnN0IHNpemVfdCBfX24gPSAoX193ICsgMzEpIC8gMzI7CisKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IGxvbmdfbGFnOyArK19faSkKKwl7CisJICBfVUludFR5cGUgX19zdW0gPSAwdTsKKwkgIF9VSW50VHlwZSBfX2ZhY3RvciA9IDF1OworCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19uOyArK19faikKKwkgICAgeworCSAgICAgIF9fc3VtICs9IF9fZGV0YWlsOjpfX21vZDx1aW50X2xlYXN0MzJfdCwKKwkJICAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8dWludF9sZWFzdDMyX3QsIDMyPjo6X192YWx1ZT4KKwkJCSAoX19sY2coKSkgKiBfX2ZhY3RvcjsKKwkgICAgICBfX2ZhY3RvciAqPSBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgMzI+OjpfX3ZhbHVlOworCSAgICB9CisJICBfTV94W19faV0gPSBfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLAorCSAgICBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZT4oX19zdW0pOworCX0KKyAgICAgIF9NX2NhcnJ5ID0gKF9NX3hbbG9uZ19sYWcgLSAxXSA9PSAwKSA/IDEgOiAwOworICAgICAgX01fcCA9IDA7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywgc2l6ZV90IF9fcywgc2l6ZV90IF9fcj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcT4KKyAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY2xhc3M8X1NzZXE+Ojp2YWx1ZT46OnR5cGUKKyAgICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX3MsIF9fcj46OgorICAgICAgc2VlZChfU3NlcSYgX19xKQorICAgICAgeworCWNvbnN0IHNpemVfdCBfX2sgPSAoX193ICsgMzEpIC8gMzI7CisJdWludF9sZWFzdDMyX3QgX19hcnJbX19yICogX19rXTsKKwlfX3EuZ2VuZXJhdGUoX19hcnIgKyAwLCBfX2FyciArIF9fciAqIF9fayk7CisKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBsb25nX2xhZzsgKytfX2kpCisJICB7CisJICAgIF9VSW50VHlwZSBfX3N1bSA9IDB1OworCSAgICBfVUludFR5cGUgX19mYWN0b3IgPSAxdTsKKwkgICAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19rOyArK19faikKKwkgICAgICB7CisJCV9fc3VtICs9IF9fYXJyW19fayAqIF9faSArIF9fal0gKiBfX2ZhY3RvcjsKKwkJX19mYWN0b3IgKj0gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIDMyPjo6X192YWx1ZTsKKwkgICAgICB9CisJICAgIF9NX3hbX19pXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsCisJICAgICAgX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWU+KF9fc3VtKTsKKwkgIH0KKwlfTV9jYXJyeSA9IChfTV94W2xvbmdfbGFnIC0gMV0gPT0gMCkgPyAxIDogMDsKKwlfTV9wID0gMDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX3csIHNpemVfdCBfX3MsIHNpemVfdCBfX3I+CisgICAgdHlwZW5hbWUgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fcywgX19yPjo6CisJICAgICByZXN1bHRfdHlwZQorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfZW5naW5lPF9VSW50VHlwZSwgX193LCBfX3MsIF9fcj46OgorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyAgICAgIC8vIERlcml2ZSBzaG9ydCBsYWcgaW5kZXggZnJvbSBjdXJyZW50IGluZGV4LgorICAgICAgbG9uZyBfX3BzID0gX01fcCAtIHNob3J0X2xhZzsKKyAgICAgIGlmIChfX3BzIDwgMCkKKwlfX3BzICs9IGxvbmdfbGFnOworCisgICAgICAvLyBDYWxjdWxhdGUgbmV3IHgoaSkgd2l0aG91dCBvdmVyZmxvdyBvciBkaXZpc2lvbi4KKyAgICAgIC8vIE5COiBUaGFua3MgdG8gdGhlIHJlcXVpcmVtZW50cyBmb3IgX1VJbnRUeXBlLCBfTV94W19NX3BdICsgX01fY2FycnkKKyAgICAgIC8vIGNhbm5vdCBvdmVyZmxvdy4KKyAgICAgIF9VSW50VHlwZSBfX3hpOworICAgICAgaWYgKF9NX3hbX19wc10gPj0gX01feFtfTV9wXSArIF9NX2NhcnJ5KQorCXsKKwkgIF9feGkgPSBfTV94W19fcHNdIC0gX01feFtfTV9wXSAtIF9NX2NhcnJ5OworCSAgX01fY2FycnkgPSAwOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfX3hpID0gKF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlCisJCSAgLSBfTV94W19NX3BdIC0gX01fY2FycnkgKyBfTV94W19fcHNdKTsKKwkgIF9NX2NhcnJ5ID0gMTsKKwl9CisgICAgICBfTV94W19NX3BdID0gX194aTsKKworICAgICAgLy8gQWRqdXN0IGN1cnJlbnQgaW5kZXggdG8gbG9vcCBhcm91bmQgaW4gcmluZyBidWZmZXIuCisgICAgICBpZiAoKytfTV9wID49IGxvbmdfbGFnKQorCV9NX3AgPSAwOworCisgICAgICByZXR1cm4gX194aTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX193LCBzaXplX3QgX19zLCBzaXplX3QgX19yLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5X2VuZ2luZTxfVUludFR5cGUsCisJCQkJCQlfX3csIF9fcywgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZCB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX3I7ICsrX19pKQorCV9fb3MgPDwgX194Ll9NX3hbX19pXSA8PCBfX3NwYWNlOworICAgICAgX19vcyA8PCBfX3guX01fY2FycnkgPDwgX19zcGFjZSA8PCBfX3guX01fcDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fdywgc2l6ZV90IF9fcywgc2l6ZV90IF9fciwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmU8X1VJbnRUeXBlLCBfX3csIF9fcywgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19yOyArK19faSkKKwlfX2lzID4+IF9feC5fTV94W19faV07CisgICAgICBfX2lzID4+IF9feC5fTV9jYXJyeTsKKyAgICAgIF9faXMgPj4gX194Ll9NX3A7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tTnVtYmVyRW5naW5lLCBzaXplX3QgX19wLCBzaXplX3QgX19yPgorICAgIGNvbnN0ZXhwciBzaXplX3QKKyAgICBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX3AsIF9fcj46OmJsb2NrX3NpemU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9fcCwgc2l6ZV90IF9fcj4KKyAgICBjb25zdGV4cHIgc2l6ZV90CisgICAgZGlzY2FyZF9ibG9ja19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19wLCBfX3I+Ojp1c2VkX2Jsb2NrOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3AsIHNpemVfdCBfX3I+CisgICAgdHlwZW5hbWUgZGlzY2FyZF9ibG9ja19lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwKKwkJCSAgIF9fcCwgX19yPjo6cmVzdWx0X3R5cGUKKyAgICBkaXNjYXJkX2Jsb2NrX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX3AsIF9fcj46OgorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyAgICAgIGlmIChfTV9uID49IHVzZWRfYmxvY2spCisJeworCSAgX01fYi5kaXNjYXJkKGJsb2NrX3NpemUgLSBfTV9uKTsKKwkgIF9NX24gPSAwOworCX0KKyAgICAgICsrX01fbjsKKyAgICAgIHJldHVybiBfTV9iKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3AsIHNpemVfdCBfX3IsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGRpc2NhcmRfYmxvY2tfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsCisJICAgICAgIF9fcCwgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZCB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBfX29zIDw8IF9feC5iYXNlKCkgPDwgX19zcGFjZSA8PCBfX3guX01fbjsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3AsIHNpemVfdCBfX3IsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGRpc2NhcmRfYmxvY2tfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9fcCwgX19yPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX19pcyA+PiBfX3guX01fYiA+PiBfX3guX01fbjsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX3csIHR5cGVuYW1lIF9VSW50VHlwZT4KKyAgICB0eXBlbmFtZSBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX3csIF9VSW50VHlwZT46OgorICAgICAgcmVzdWx0X3R5cGUKKyAgICBpbmRlcGVuZGVudF9iaXRzX2VuZ2luZTxfUmFuZG9tTnVtYmVyRW5naW5lLCBfX3csIF9VSW50VHlwZT46OgorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZTo6cmVzdWx0X3R5cGUgX0VyZXN1bHRfdHlwZTsKKyAgICAgIGNvbnN0IF9FcmVzdWx0X3R5cGUgX19yCisJPSAoX01fYi5tYXgoKSAtIF9NX2IubWluKCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPF9FcmVzdWx0X3R5cGU+OjptYXgoKQorCSAgID8gX01fYi5tYXgoKSAtIF9NX2IubWluKCkgKyAxIDogMCk7CisgICAgICBjb25zdCB1bnNpZ25lZCBfX2VkaWcgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9FcmVzdWx0X3R5cGU+OjpkaWdpdHM7CisgICAgICBjb25zdCB1bnNpZ25lZCBfX20gPSBfX3IgPyBzdGQ6Ol9fbGcoX19yKSA6IF9fZWRpZzsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbW1vbl90eXBlPF9FcmVzdWx0X3R5cGUsIHJlc3VsdF90eXBlPjo6dHlwZQorCV9fY3R5cGU7CisgICAgICBjb25zdCB1bnNpZ25lZCBfX2NkaWcgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9fY3R5cGU+OjpkaWdpdHM7CisKKyAgICAgIHVuc2lnbmVkIF9fbiwgX19uMDsKKyAgICAgIF9fY3R5cGUgX19zMCwgX19zMSwgX195MCwgX195MTsKKworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgMjsgKytfX2kpCisJeworCSAgX19uID0gKF9fdyArIF9fbSAtIDEpIC8gX19tICsgX19pOworCSAgX19uMCA9IF9fbiAtIF9fdyAlIF9fbjsKKwkgIGNvbnN0IHVuc2lnbmVkIF9fdzAgPSBfX3cgLyBfX247ICAvLyBfX3cwIDw9IF9fbQorCisJICBfX3MwID0gMDsKKwkgIF9fczEgPSAwOworCSAgaWYgKF9fdzAgPCBfX2NkaWcpCisJICAgIHsKKwkgICAgICBfX3MwID0gX19jdHlwZSgxKSA8PCBfX3cwOworCSAgICAgIF9fczEgPSBfX3MwIDw8IDE7CisJICAgIH0KKworCSAgX195MCA9IDA7CisJICBfX3kxID0gMDsKKwkgIGlmIChfX3IpCisJICAgIHsKKwkgICAgICBfX3kwID0gX19zMCAqIChfX3IgLyBfX3MwKTsKKwkgICAgICBpZiAoX19zMSkKKwkJX195MSA9IF9fczEgKiAoX19yIC8gX19zMSk7CisKKwkgICAgICBpZiAoX19yIC0gX195MCA8PSBfX3kwIC8gX19uKQorCQlicmVhazsKKwkgICAgfQorCSAgZWxzZQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIHJlc3VsdF90eXBlIF9fc3VtID0gMDsKKyAgICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8IF9fbjA7ICsrX19rKQorCXsKKwkgIF9fY3R5cGUgX191OworCSAgZG8KKwkgICAgX191ID0gX01fYigpIC0gX01fYi5taW4oKTsKKwkgIHdoaWxlIChfX3kwICYmIF9fdSA+PSBfX3kwKTsKKwkgIF9fc3VtID0gX19zMCAqIF9fc3VtICsgKF9fczAgPyBfX3UgJSBfX3MwIDogX191KTsKKwl9CisgICAgICBmb3IgKHNpemVfdCBfX2sgPSBfX24wOyBfX2sgPCBfX247ICsrX19rKQorCXsKKwkgIF9fY3R5cGUgX191OworCSAgZG8KKwkgICAgX191ID0gX01fYigpIC0gX01fYi5taW4oKTsKKwkgIHdoaWxlIChfX3kxICYmIF9fdSA+PSBfX3kxKTsKKwkgIF9fc3VtID0gX19zMSAqIF9fc3VtICsgKF9fczEgPyBfX3UgJSBfX3MxIDogX191KTsKKwl9CisgICAgICByZXR1cm4gX19zdW07CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckVuZ2luZSwgc2l6ZV90IF9faz4KKyAgICBjb25zdGV4cHIgc2l6ZV90CisgICAgc2h1ZmZsZV9vcmRlcl9lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19rPjo6dGFibGVfc2l6ZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tTnVtYmVyRW5naW5lLCBzaXplX3QgX19rPgorICAgIHR5cGVuYW1lIHNodWZmbGVfb3JkZXJfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9faz46OnJlc3VsdF90eXBlCisgICAgc2h1ZmZsZV9vcmRlcl9lbmdpbmU8X1JhbmRvbU51bWJlckVuZ2luZSwgX19rPjo6CisgICAgb3BlcmF0b3IoKSgpCisgICAgeworICAgICAgc2l6ZV90IF9faiA9IF9fayAqICgoX01feSAtIF9NX2IubWluKCkpCisJCQkgIC8gKF9NX2IubWF4KCkgLSBfTV9iLm1pbigpICsgMS4wTCkpOworICAgICAgX01feSA9IF9NX3ZbX19qXTsKKyAgICAgIF9NX3ZbX19qXSA9IF9NX2IoKTsKKworICAgICAgcmV0dXJuIF9NX3k7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX2ssCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHNodWZmbGVfb3JkZXJfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9faz4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6Zml4ZWQgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKworICAgICAgX19vcyA8PCBfX3guYmFzZSgpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19rOyArK19faSkKKwlfX29zIDw8IF9fc3BhY2UgPDwgX194Ll9NX3ZbX19pXTsKKyAgICAgIF9fb3MgPDwgX19zcGFjZSA8PCBfX3guX01feTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21OdW1iZXJFbmdpbmUsIHNpemVfdCBfX2ssCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHNodWZmbGVfb3JkZXJfZW5naW5lPF9SYW5kb21OdW1iZXJFbmdpbmUsIF9faz4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9faXMgPj4gX194Ll9NX2I7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2s7ICsrX19pKQorCV9faXMgPj4gX194Ll9NX3ZbX19pXTsKKyAgICAgIF9faXMgPj4gX194Ll9NX3k7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnJlc3VsdF90eXBlCisgICAgICB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmVzdWx0X3R5cGUKKwkgIF9HcmVzdWx0X3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8cmVzdWx0X3R5cGU+Ojp0eXBlIF9fdXR5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbW1vbl90eXBlPF9HcmVzdWx0X3R5cGUsIF9fdXR5cGU+Ojp0eXBlCisJICBfX3VjdHlwZTsKKworCWNvbnN0IF9fdWN0eXBlIF9fdXJuZ21pbiA9IF9fdXJuZy5taW4oKTsKKwljb25zdCBfX3VjdHlwZSBfX3VybmdtYXggPSBfX3VybmcubWF4KCk7CisJY29uc3QgX191Y3R5cGUgX191cm5ncmFuZ2UgPSBfX3VybmdtYXggLSBfX3VybmdtaW47CisJY29uc3QgX191Y3R5cGUgX191cmFuZ2UKKwkgID0gX191Y3R5cGUoX19wYXJhbS5iKCkpIC0gX191Y3R5cGUoX19wYXJhbS5hKCkpOworCisJX191Y3R5cGUgX19yZXQ7CisKKwlpZiAoX191cm5ncmFuZ2UgPiBfX3VyYW5nZSkKKwkgIHsKKwkgICAgLy8gZG93bnNjYWxpbmcKKwkgICAgY29uc3QgX191Y3R5cGUgX191ZXJhbmdlID0gX191cmFuZ2UgKyAxOyAvLyBfX3VyYW5nZSBjYW4gYmUgemVybworCSAgICBjb25zdCBfX3VjdHlwZSBfX3NjYWxpbmcgPSBfX3VybmdyYW5nZSAvIF9fdWVyYW5nZTsKKwkgICAgY29uc3QgX191Y3R5cGUgX19wYXN0ID0gX191ZXJhbmdlICogX19zY2FsaW5nOworCSAgICBkbworCSAgICAgIF9fcmV0ID0gX191Y3R5cGUoX191cm5nKCkpIC0gX191cm5nbWluOworCSAgICB3aGlsZSAoX19yZXQgPj0gX19wYXN0KTsKKwkgICAgX19yZXQgLz0gX19zY2FsaW5nOworCSAgfQorCWVsc2UgaWYgKF9fdXJuZ3JhbmdlIDwgX191cmFuZ2UpCisJICB7CisJICAgIC8vIHVwc2NhbGluZworCSAgICAvKgorCSAgICAgIE5vdGUgdGhhdCBldmVyeSB2YWx1ZSBpbiBbMCwgdXJhbmdlXQorCSAgICAgIGNhbiBiZSB3cml0dGVuIHVuaXF1ZWx5IGFzCisKKwkgICAgICAodXJuZ3JhbmdlICsgMSkgKiBoaWdoICsgbG93CisKKwkgICAgICB3aGVyZQorCisJICAgICAgaGlnaCBpbiBbMCwgdXJhbmdlIC8gKHVybmdyYW5nZSArIDEpXQorCisJICAgICAgYW5kCisJCisJICAgICAgbG93IGluIFswLCB1cm5ncmFuZ2VdLgorCSAgICAqLworCSAgICBfX3VjdHlwZSBfX3RtcDsgLy8gd3JhcGFyb3VuZCBjb250cm9sCisJICAgIGRvCisJICAgICAgeworCQljb25zdCBfX3VjdHlwZSBfX3Vlcm5ncmFuZ2UgPSBfX3VybmdyYW5nZSArIDE7CisJCV9fdG1wID0gKF9fdWVybmdyYW5nZSAqIG9wZXJhdG9yKCkKKwkJCSAoX191cm5nLCBwYXJhbV90eXBlKDAsIF9fdXJhbmdlIC8gX191ZXJuZ3JhbmdlKSkpOworCQlfX3JldCA9IF9fdG1wICsgKF9fdWN0eXBlKF9fdXJuZygpKSAtIF9fdXJuZ21pbik7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19yZXQgPiBfX3VyYW5nZSB8fCBfX3JldCA8IF9fdG1wKTsKKwkgIH0KKwllbHNlCisJICBfX3JldCA9IF9fdWN0eXBlKF9fdXJuZygpKSAtIF9fdXJuZ21pbjsKKworCXJldHVybiBfX3JldCArIF9fcGFyYW0uYSgpOworICAgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKwl0eXBlZGVmIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyZXN1bHRfdHlwZQorCSAgX0dyZXN1bHRfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxyZXN1bHRfdHlwZT46OnR5cGUgX191dHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8X0dyZXN1bHRfdHlwZSwgX191dHlwZT46OnR5cGUKKwkgIF9fdWN0eXBlOworCisJY29uc3QgX191Y3R5cGUgX191cm5nbWluID0gX191cm5nLm1pbigpOworCWNvbnN0IF9fdWN0eXBlIF9fdXJuZ21heCA9IF9fdXJuZy5tYXgoKTsKKwljb25zdCBfX3VjdHlwZSBfX3VybmdyYW5nZSA9IF9fdXJuZ21heCAtIF9fdXJuZ21pbjsKKwljb25zdCBfX3VjdHlwZSBfX3VyYW5nZQorCSAgPSBfX3VjdHlwZShfX3BhcmFtLmIoKSkgLSBfX3VjdHlwZShfX3BhcmFtLmEoKSk7CisKKwlfX3VjdHlwZSBfX3JldDsKKworCWlmIChfX3VybmdyYW5nZSA+IF9fdXJhbmdlKQorCSAgeworCSAgICBpZiAoX19kZXRhaWw6Ol9Qb3dlcl9vZl8yKF9fdXJuZ3JhbmdlICsgMSkKKwkJJiYgX19kZXRhaWw6Ol9Qb3dlcl9vZl8yKF9fdXJhbmdlICsgMSkpCisJICAgICAgeworCQl3aGlsZSAoX19mICE9IF9fdCkKKwkJICB7CisJCSAgICBfX3JldCA9IF9fdWN0eXBlKF9fdXJuZygpKSAtIF9fdXJuZ21pbjsKKwkJICAgICpfX2YrKyA9IChfX3JldCAmIF9fdXJhbmdlKSArIF9fcGFyYW0uYSgpOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCS8vIGRvd25zY2FsaW5nCisJCWNvbnN0IF9fdWN0eXBlIF9fdWVyYW5nZSA9IF9fdXJhbmdlICsgMTsgLy8gX191cmFuZ2UgY2FuIGJlIHplcm8KKwkJY29uc3QgX191Y3R5cGUgX19zY2FsaW5nID0gX191cm5ncmFuZ2UgLyBfX3VlcmFuZ2U7CisJCWNvbnN0IF9fdWN0eXBlIF9fcGFzdCA9IF9fdWVyYW5nZSAqIF9fc2NhbGluZzsKKwkJd2hpbGUgKF9fZiAhPSBfX3QpCisJCSAgeworCQkgICAgZG8KKwkJICAgICAgX19yZXQgPSBfX3VjdHlwZShfX3VybmcoKSkgLSBfX3VybmdtaW47CisJCSAgICB3aGlsZSAoX19yZXQgPj0gX19wYXN0KTsKKwkJICAgICpfX2YrKyA9IF9fcmV0IC8gX19zY2FsaW5nICsgX19wYXJhbS5hKCk7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwllbHNlIGlmIChfX3VybmdyYW5nZSA8IF9fdXJhbmdlKQorCSAgeworCSAgICAvLyB1cHNjYWxpbmcKKwkgICAgLyoKKwkgICAgICBOb3RlIHRoYXQgZXZlcnkgdmFsdWUgaW4gWzAsIHVyYW5nZV0KKwkgICAgICBjYW4gYmUgd3JpdHRlbiB1bmlxdWVseSBhcworCisJICAgICAgKHVybmdyYW5nZSArIDEpICogaGlnaCArIGxvdworCisJICAgICAgd2hlcmUKKworCSAgICAgIGhpZ2ggaW4gWzAsIHVyYW5nZSAvICh1cm5ncmFuZ2UgKyAxKV0KKworCSAgICAgIGFuZAorCisJICAgICAgbG93IGluIFswLCB1cm5ncmFuZ2VdLgorCSAgICAqLworCSAgICBfX3VjdHlwZSBfX3RtcDsgLy8gd3JhcGFyb3VuZCBjb250cm9sCisJICAgIHdoaWxlIChfX2YgIT0gX190KQorCSAgICAgIHsKKwkJZG8KKwkJICB7CisJCSAgICBjb25zdCBfX3VjdHlwZSBfX3Vlcm5ncmFuZ2UgPSBfX3VybmdyYW5nZSArIDE7CisJCSAgICBfX3RtcCA9IChfX3Vlcm5ncmFuZ2UgKiBvcGVyYXRvcigpCisJCQkgICAgIChfX3VybmcsIHBhcmFtX3R5cGUoMCwgX191cmFuZ2UgLyBfX3Vlcm5ncmFuZ2UpKSk7CisJCSAgICBfX3JldCA9IF9fdG1wICsgKF9fdWN0eXBlKF9fdXJuZygpKSAtIF9fdXJuZ21pbik7CisJCSAgfQorCQl3aGlsZSAoX19yZXQgPiBfX3VyYW5nZSB8fCBfX3JldCA8IF9fdG1wKTsKKwkJKl9fZisrID0gX19yZXQ7CisJICAgICAgfQorCSAgfQorCWVsc2UKKwkgIHdoaWxlIChfX2YgIT0gX190KQorCSAgICAqX19mKysgPSBfX3VjdHlwZShfX3VybmcoKSkgLSBfX3VybmdtaW4gKyBfX3BhcmFtLmEoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBfX29zIDw8IF9feC5hKCkgPDwgX19zcGFjZSA8PCBfX3guYigpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfSW50VHlwZSBfX2EsIF9fYjsKKyAgICAgIF9faXMgPj4gX19hID4+IF9fYjsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2EsIF9fYikpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgcmVzdWx0X3R5cGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisJYXV0byBfX3JhbmdlID0gX19wLmIoKSAtIF9fcC5hKCk7CisJd2hpbGUgKF9fZiAhPSBfX3QpCisJICAqX19mKysgPSBfX2F1cm5nKCkgKiBfX3JhbmdlICsgX19wLmEoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCB1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guYSgpIDw8IF9fc3BhY2UgPDwgX194LmIoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fYSwgX19iOworICAgICAgX19pcyA+PiBfX2EgPj4gX19iOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIHVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisJCXBhcmFtX3R5cGUoX19hLCBfX2IpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgdm9pZAorICAgIHN0ZDo6YmVybm91bGxpX2Rpc3RyaWJ1dGlvbjo6CisgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgeworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBkb3VibGU+CisJX19hdXJuZyhfX3VybmcpOworICAgICAgYXV0byBfX2xpbWl0ID0gX19wLnAoKSAqIChfX2F1cm5nLm1heCgpIC0gX19hdXJuZy5taW4oKSk7CisKKyAgICAgIHdoaWxlIChfX2YgIT0gX190KQorCSpfX2YrKyA9IChfX2F1cm5nKCkgLSBfX2F1cm5nLm1pbigpKSA8IF9fbGltaXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiZXJub3VsbGlfZGlzdHJpYnV0aW9uJiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fb3Mud2lkZW4oJyAnKSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194LnAoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGdlb21ldHJpY19kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJLy8gQWJvdXQgdGhlIGVwc2lsb24gdGhpbmcgc2VlIHRoaXMgdGhyZWFkOgorCS8vIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA2LTEwL21zZzAwOTcxLmh0bWwKKwljb25zdCBkb3VibGUgX19uYWYgPQorCSAgKDEgLSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkgLyAyOworCS8vIFRoZSBsYXJnZXN0IF9SZWFsVHlwZSBjb252ZXJ0aWJsZSB0byBfSW50VHlwZS4KKwljb25zdCBkb3VibGUgX190aHIgPQorCSAgc3RkOjpudW1lcmljX2xpbWl0czxfSW50VHlwZT46Om1heCgpICsgX19uYWY7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBkb3VibGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKwlkb3VibGUgX19jYW5kOworCWRvCisJICBfX2NhbmQgPSBzdGQ6OmZsb29yKHN0ZDo6bG9nKDEuMCAtIF9fYXVybmcoKSkgLyBfX3BhcmFtLl9NX2xvZ18xX3ApOworCXdoaWxlIChfX2NhbmQgPj0gX190aHIpOworCisJcmV0dXJuIHJlc3VsdF90eXBlKF9fY2FuZCArIF9fbmFmKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKwkvLyBBYm91dCB0aGUgZXBzaWxvbiB0aGluZyBzZWUgdGhpcyB0aHJlYWQ6CisJLy8gaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDYtMTAvbXNnMDA5NzEuaHRtbAorCWNvbnN0IGRvdWJsZSBfX25hZiA9CisJICAoMSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSAvIDI7CisJLy8gVGhlIGxhcmdlc3QgX1JlYWxUeXBlIGNvbnZlcnRpYmxlIHRvIF9JbnRUeXBlLgorCWNvbnN0IGRvdWJsZSBfX3RociA9CisJICBzdGQ6Om51bWVyaWNfbGltaXRzPF9JbnRUeXBlPjo6bWF4KCkgKyBfX25hZjsKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGRvdWJsZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCXdoaWxlIChfX2YgIT0gX190KQorCSAgeworCSAgICBkb3VibGUgX19jYW5kOworCSAgICBkbworCSAgICAgIF9fY2FuZCA9IHN0ZDo6Zmxvb3Ioc3RkOjpsb2coMS4wIC0gX19hdXJuZygpKQorCQkJCSAgLyBfX3BhcmFtLl9NX2xvZ18xX3ApOworCSAgICB3aGlsZSAoX19jYW5kID49IF9fdGhyKTsKKworCSAgICAqX19mKysgPSBfX2NhbmQgKyBfX25hZjsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19vcy53aWRlbignICcpKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gucCgpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGdlb21ldHJpY19kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBkb3VibGUgX19wOworICAgICAgX19pcyA+PiBfX3A7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnBhcmFtX3R5cGUoX19wKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKyAgLy8gVGhpcyBpcyBMZWdlcidzIGFsZ29yaXRobSwgYWxzbyBpbiBEZXZyb3llLCBDaC4gWCwgRXhhbXBsZSAxLjUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIG5lZ2F0aXZlX2Jpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgeworCWNvbnN0IGRvdWJsZSBfX3kgPSBfTV9nZChfX3VybmcpOworCisJLy8gWFhYIElzIHRoZSBjb25zdHJ1Y3RvciB0b28gc2xvdz8KKwlzdGQ6OnBvaXNzb25fZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfX3BvaXNzb24oX195KTsKKwlyZXR1cm4gX19wb2lzc29uKF9fdXJuZyk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxkb3VibGU+OjpwYXJhbV90eXBlCisJICBwYXJhbV90eXBlOworCQorCWNvbnN0IGRvdWJsZSBfX3kgPQorCSAgX01fZ2QoX191cm5nLCBwYXJhbV90eXBlKF9fcC5rKCksICgxLjAgLSBfX3AucCgpKSAvIF9fcC5wKCkpKTsKKworCXN0ZDo6cG9pc3Nvbl9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9fcG9pc3NvbihfX3kpOworCXJldHVybiBfX3BvaXNzb24oX191cm5nKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorCXdoaWxlIChfX2YgIT0gX190KQorCSAgeworCSAgICBjb25zdCBkb3VibGUgX195ID0gX01fZ2QoX191cm5nKTsKKworCSAgICAvLyBYWFggSXMgdGhlIGNvbnN0cnVjdG9yIHRvbyBzbG93PworCSAgICBzdGQ6OnBvaXNzb25fZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfX3BvaXNzb24oX195KTsKKwkgICAgKl9fZisrID0gX19wb2lzc29uKF9fdXJuZyk7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgbmVnYXRpdmVfYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorCXR5cGVuYW1lIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZQorCSAgX19wMihfX3AuaygpLCAoMS4wIC0gX19wLnAoKSkgLyBfX3AucCgpKTsKKworCXdoaWxlIChfX2YgIT0gX190KQorCSAgeworCSAgICBjb25zdCBkb3VibGUgX195ID0gX01fZ2QoX191cm5nLCBfX3AyKTsKKworCSAgICBzdGQ6OnBvaXNzb25fZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfX3BvaXNzb24oX195KTsKKwkgICAgKl9fZisrID0gX19wb2lzc29uKF9fdXJuZyk7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19vcy53aWRlbignICcpKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guaygpIDw8IF9fc3BhY2UgPDwgX194LnAoKQorCSAgIDw8IF9fc3BhY2UgPDwgX194Ll9NX2dkOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfSW50VHlwZSBfX2s7CisgICAgICBkb3VibGUgX19wOworICAgICAgX19pcyA+PiBfX2sgPj4gX19wID4+IF9feC5fTV9nZDsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBuZWdhdGl2ZV9iaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2ssIF9fcCkpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgdm9pZAorICAgIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgX01faW5pdGlhbGl6ZSgpCisgICAgeworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIGlmIChfTV9tZWFuID49IDEyKQorCXsKKwkgIGNvbnN0IGRvdWJsZSBfX20gPSBzdGQ6OmZsb29yKF9NX21lYW4pOworCSAgX01fbG1fdGhyID0gc3RkOjpsb2coX01fbWVhbik7CisJICBfTV9sZm0gPSBzdGQ6OmxnYW1tYShfX20gKyAxKTsKKwkgIF9NX3NtID0gc3RkOjpzcXJ0KF9fbSk7CisKKwkgIGNvbnN0IGRvdWJsZSBfX3BpXzQgPSAwLjc4NTM5ODE2MzM5NzQ0ODMwOTYxNTY2MDg0NTgxOTg3NTdMOworCSAgY29uc3QgZG91YmxlIF9fZHggPSBzdGQ6OnNxcnQoMiAqIF9fbSAqIHN0ZDo6bG9nKDMyICogX19tCisJCQkJCQkJICAgICAgLyBfX3BpXzQpKTsKKwkgIF9NX2QgPSBzdGQ6OnJvdW5kKHN0ZDo6bWF4KDYuMCwgc3RkOjptaW4oX19tLCBfX2R4KSkpOworCSAgY29uc3QgZG91YmxlIF9fY3ggPSAyICogX19tICsgX01fZDsKKwkgIF9NX3NjeCA9IHN0ZDo6c3FydChfX2N4IC8gMik7CisJICBfTV8xY3ggPSAxIC8gX19jeDsKKworCSAgX01fYzJiID0gc3RkOjpzcXJ0KF9fcGlfNCAqIF9fY3gpICogc3RkOjpleHAoX01fMWN4KTsKKwkgIF9NX2NiID0gMiAqIF9fY3ggKiBzdGQ6OmV4cCgtX01fZCAqIF9NXzFjeCAqICgxICsgX01fZCAvIDIpKQorCQkvIF9NX2Q7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJX01fbG1fdGhyID0gc3RkOjpleHAoLV9NX21lYW4pOworICAgICAgfQorCisgIC8qKgorICAgKiBBIHJlamVjdGlvbiBhbGdvcml0aG0gd2hlbiBtZWFuID49IDEyIGFuZCBhIHNpbXBsZSBtZXRob2QgYmFzZWQKKyAgICogdXBvbiB0aGUgbXVsdGlwbGljYXRpb24gb2YgdW5pZm9ybSByYW5kb20gdmFyaWF0ZXMgb3RoZXJ3aXNlLgorICAgKiBOQjogVGhlIGZvcm1lciBpcyBhdmFpbGFibGUgb25seSBpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAqIGlzIGRlZmluZWQuCisgICAqCisgICAqIFJlZmVyZW5jZToKKyAgICogRGV2cm95ZSwgTC4gTm9uLVVuaWZvcm0gUmFuZG9tIFZhcmlhdGVzIEdlbmVyYXRpb24uIFNwcmluZ2VyLVZlcmxhZywKKyAgICogTmV3IFlvcmssIDE5ODYsIENoLiBYLCBTZWN0cy4gMy4zICYgMy40ICgrIEVycmF0YSEpLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OnJlc3VsdF90eXBlCisgICAgICBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGRvdWJsZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJaWYgKF9fcGFyYW0ubWVhbigpID49IDEyKQorCSAgeworCSAgICBkb3VibGUgX194OworCisJICAgIC8vIFNlZSBjb21tZW50cyBhYm92ZS4uLgorCSAgICBjb25zdCBkb3VibGUgX19uYWYgPQorCSAgICAgICgxIC0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkpIC8gMjsKKwkgICAgY29uc3QgZG91YmxlIF9fdGhyID0KKwkgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPF9JbnRUeXBlPjo6bWF4KCkgKyBfX25hZjsKKworCSAgICBjb25zdCBkb3VibGUgX19tID0gc3RkOjpmbG9vcihfX3BhcmFtLm1lYW4oKSk7CisJICAgIC8vIHNxcnQocGkgLyAyKQorCSAgICBjb25zdCBkb3VibGUgX19zcGlfMiA9IDEuMjUzMzE0MTM3MzE1NTAwMjUxMjA3ODgyNjQyNDA1NTIyNkw7CisJICAgIGNvbnN0IGRvdWJsZSBfX2MxID0gX19wYXJhbS5fTV9zbSAqIF9fc3BpXzI7CisJICAgIGNvbnN0IGRvdWJsZSBfX2MyID0gX19wYXJhbS5fTV9jMmIgKyBfX2MxOworCSAgICBjb25zdCBkb3VibGUgX19jMyA9IF9fYzIgKyAxOworCSAgICBjb25zdCBkb3VibGUgX19jNCA9IF9fYzMgKyAxOworCSAgICAvLyBlXigxIC8gNzgpCisJICAgIGNvbnN0IGRvdWJsZSBfX2UxNzggPSAxLjAxMjkwMzA0NzkzMjAwMTg1ODMxODU1MTQ3Nzc1MTI5ODNMOworCSAgICBjb25zdCBkb3VibGUgX19jNSA9IF9fYzQgKyBfX2UxNzg7CisJICAgIGNvbnN0IGRvdWJsZSBfX2MgPSBfX3BhcmFtLl9NX2NiICsgX19jNTsKKwkgICAgY29uc3QgZG91YmxlIF9fMmN4ID0gMiAqICgyICogX19tICsgX19wYXJhbS5fTV9kKTsKKworCSAgICBib29sIF9fcmVqZWN0ID0gdHJ1ZTsKKwkgICAgZG8KKwkgICAgICB7CisJCWNvbnN0IGRvdWJsZSBfX3UgPSBfX2MgKiBfX2F1cm5nKCk7CisJCWNvbnN0IGRvdWJsZSBfX2UgPSAtc3RkOjpsb2coMS4wIC0gX19hdXJuZygpKTsKKworCQlkb3VibGUgX193ID0gMC4wOworCisJCWlmIChfX3UgPD0gX19jMSkKKwkJICB7CisJCSAgICBjb25zdCBkb3VibGUgX19uID0gX01fbmQoX191cm5nKTsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX3kgPSAtc3RkOjphYnMoX19uKSAqIF9fcGFyYW0uX01fc20gLSAxOworCQkgICAgX194ID0gc3RkOjpmbG9vcihfX3kpOworCQkgICAgX193ID0gLV9fbiAqIF9fbiAvIDI7CisJCSAgICBpZiAoX194IDwgLV9fbSkKKwkJICAgICAgY29udGludWU7CisJCSAgfQorCQllbHNlIGlmIChfX3UgPD0gX19jMikKKwkJICB7CisJCSAgICBjb25zdCBkb3VibGUgX19uID0gX01fbmQoX191cm5nKTsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX3kgPSAxICsgc3RkOjphYnMoX19uKSAqIF9fcGFyYW0uX01fc2N4OworCQkgICAgX194ID0gc3RkOjpjZWlsKF9feSk7CisJCSAgICBfX3cgPSBfX3kgKiAoMiAtIF9feSkgKiBfX3BhcmFtLl9NXzFjeDsKKwkJICAgIGlmIChfX3ggPiBfX3BhcmFtLl9NX2QpCisJCSAgICAgIGNvbnRpbnVlOworCQkgIH0KKwkJZWxzZSBpZiAoX191IDw9IF9fYzMpCisJCSAgLy8gTkI6IFRoaXMgY2FzZSBub3QgaW4gdGhlIGJvb2ssIG5vciBpbiB0aGUgRXJyYXRhLAorCQkgIC8vIGJ1dCBzaG91bGQgYmUgb2suLi4KKwkJICBfX3ggPSAtMTsKKwkJZWxzZSBpZiAoX191IDw9IF9fYzQpCisJCSAgX194ID0gMDsKKwkJZWxzZSBpZiAoX191IDw9IF9fYzUpCisJCSAgX194ID0gMTsKKwkJZWxzZQorCQkgIHsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX3YgPSAtc3RkOjpsb2coMS4wIC0gX19hdXJuZygpKTsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX3kgPSBfX3BhcmFtLl9NX2QKKwkJCQkgICAgICsgX192ICogX18yY3ggLyBfX3BhcmFtLl9NX2Q7CisJCSAgICBfX3ggPSBzdGQ6OmNlaWwoX195KTsKKwkJICAgIF9fdyA9IC1fX3BhcmFtLl9NX2QgKiBfX3BhcmFtLl9NXzFjeCAqICgxICsgX195IC8gMik7CisJCSAgfQorCisJCV9fcmVqZWN0ID0gKF9fdyAtIF9fZSAtIF9feCAqIF9fcGFyYW0uX01fbG1fdGhyCisJCQkgICAgPiBfX3BhcmFtLl9NX2xmbSAtIHN0ZDo6bGdhbW1hKF9feCArIF9fbSArIDEpKTsKKworCQlfX3JlamVjdCB8PSBfX3ggKyBfX20gPj0gX190aHI7CisKKwkgICAgICB9IHdoaWxlIChfX3JlamVjdCk7CisKKwkgICAgcmV0dXJuIHJlc3VsdF90eXBlKF9feCArIF9fbSArIF9fbmFmKTsKKwkgIH0KKwllbHNlCisjZW5kaWYKKwkgIHsKKwkgICAgX0ludFR5cGUgICAgIF9feCA9IDA7CisJICAgIGRvdWJsZSBfX3Byb2QgPSAxLjA7CisKKwkgICAgZG8KKwkgICAgICB7CisJCV9fcHJvZCAqPSBfX2F1cm5nKCk7CisJCV9feCArPSAxOworCSAgICAgIH0KKwkgICAgd2hpbGUgKF9fcHJvZCA+IF9fcGFyYW0uX01fbG1fdGhyKTsKKworCSAgICByZXR1cm4gX194IC0gMTsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisJLy8gV2UgY291bGQgZHVwbGljYXRlIGV2ZXJ5dGhpbmcgZnJvbSBvcGVyYXRvcigpLi4uCisJd2hpbGUgKF9fZiAhPSBfX3QpCisJICAqX19mKysgPSB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX19wYXJhbSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5tZWFuKCkgPDwgX19zcGFjZSA8PCBfX3guX01fbmQ7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBkb3VibGUgX19tZWFuOworICAgICAgX19pcyA+PiBfX21lYW4gPj4gX194Ll9NX25kOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cGFyYW1fdHlwZShfX21lYW4pKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHZvaWQKKyAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICBfTV9pbml0aWFsaXplKCkKKyAgICB7CisgICAgICBjb25zdCBkb3VibGUgX19wMTIgPSBfTV9wIDw9IDAuNSA/IF9NX3AgOiAxLjAgLSBfTV9wOworCisgICAgICBfTV9lYXN5ID0gdHJ1ZTsKKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIGlmIChfTV90ICogX19wMTIgPj0gOCkKKwl7CisJICBfTV9lYXN5ID0gZmFsc2U7CisJICBjb25zdCBkb3VibGUgX19ucCA9IHN0ZDo6Zmxvb3IoX01fdCAqIF9fcDEyKTsKKwkgIGNvbnN0IGRvdWJsZSBfX3BhID0gX19ucCAvIF9NX3Q7CisJICBjb25zdCBkb3VibGUgX18xcCA9IDEgLSBfX3BhOworCisJICBjb25zdCBkb3VibGUgX19waV80ID0gMC43ODUzOTgxNjMzOTc0NDgzMDk2MTU2NjA4NDU4MTk4NzU3TDsKKwkgIGNvbnN0IGRvdWJsZSBfX2QxeCA9CisJICAgIHN0ZDo6c3FydChfX25wICogX18xcCAqIHN0ZDo6bG9nKDMyICogX19ucAorCQkJCQkgICAgIC8gKDgxICogX19waV80ICogX18xcCkpKTsKKwkgIF9NX2QxID0gc3RkOjpyb3VuZChzdGQ6Om1heCgxLjAsIF9fZDF4KSk7CisJICBjb25zdCBkb3VibGUgX19kMnggPQorCSAgICBzdGQ6OnNxcnQoX19ucCAqIF9fMXAgKiBzdGQ6OmxvZygzMiAqIF9NX3QgKiBfXzFwCisJCQkJCSAgICAgLyAoX19waV80ICogX19wYSkpKTsKKwkgIF9NX2QyID0gc3RkOjpyb3VuZChzdGQ6Om1heCgxLjAsIF9fZDJ4KSk7CisKKwkgIC8vIHNxcnQocGkgLyAyKQorCSAgY29uc3QgZG91YmxlIF9fc3BpXzIgPSAxLjI1MzMxNDEzNzMxNTUwMDI1MTIwNzg4MjY0MjQwNTUyMjZMOworCSAgX01fczEgPSBzdGQ6OnNxcnQoX19ucCAqIF9fMXApICogKDEgKyBfTV9kMSAvICg0ICogX19ucCkpOworCSAgX01fczIgPSBzdGQ6OnNxcnQoX19ucCAqIF9fMXApICogKDEgKyBfTV9kMiAvICg0ICogX01fdCAqIF9fMXApKTsKKwkgIF9NX2MgPSAyICogX01fZDEgLyBfX25wOworCSAgX01fYTEgPSBzdGQ6OmV4cChfTV9jKSAqIF9NX3MxICogX19zcGlfMjsKKwkgIGNvbnN0IGRvdWJsZSBfX2ExMiA9IF9NX2ExICsgX01fczIgKiBfX3NwaV8yOworCSAgY29uc3QgZG91YmxlIF9fczFzID0gX01fczEgKiBfTV9zMTsKKwkgIF9NX2ExMjMgPSBfX2ExMiArIChzdGQ6OmV4cChfTV9kMSAvIChfTV90ICogX18xcCkpCisJCQkgICAgICogMiAqIF9fczFzIC8gX01fZDEKKwkJCSAgICAgKiBzdGQ6OmV4cCgtX01fZDEgKiBfTV9kMSAvICgyICogX19zMXMpKSk7CisJICBjb25zdCBkb3VibGUgX19zMnMgPSBfTV9zMiAqIF9NX3MyOworCSAgX01fcyA9IChfTV9hMTIzICsgMiAqIF9fczJzIC8gX01fZDIKKwkJICAqIHN0ZDo6ZXhwKC1fTV9kMiAqIF9NX2QyIC8gKDIgKiBfX3MycykpKTsKKwkgIF9NX2xmID0gKHN0ZDo6bGdhbW1hKF9fbnAgKyAxKQorCQkgICArIHN0ZDo6bGdhbW1hKF9NX3QgLSBfX25wICsgMSkpOworCSAgX01fbHAxcCA9IHN0ZDo6bG9nKF9fcGEgLyBfXzFwKTsKKworCSAgX01fcSA9IC1zdGQ6OmxvZygxIC0gKF9fcDEyIC0gX19wYSkgLyBfXzFwKTsKKwl9CisgICAgICBlbHNlCisjZW5kaWYKKwlfTV9xID0gLXN0ZDo6bG9nKDEgLSBfX3AxMik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgX01fd2FpdGluZyhfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgX0ludFR5cGUgX190LCBkb3VibGUgX19xKQorICAgICAgeworCV9JbnRUeXBlIF9feCA9IDA7CisJZG91YmxlIF9fc3VtID0gMC4wOworCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgZG91YmxlPgorCSAgX19hdXJuZyhfX3VybmcpOworCisJZG8KKwkgIHsKKwkgICAgaWYgKF9fdCA9PSBfX3gpCisJICAgICAgcmV0dXJuIF9feDsKKwkgICAgY29uc3QgZG91YmxlIF9fZSA9IC1zdGQ6OmxvZygxLjAgLSBfX2F1cm5nKCkpOworCSAgICBfX3N1bSArPSBfX2UgLyAoX190IC0gX194KTsKKwkgICAgX194ICs9IDE7CisJICB9CisJd2hpbGUgKF9fc3VtIDw9IF9fcSk7CisKKwlyZXR1cm4gX194IC0gMTsKKyAgICAgIH0KKworICAvKioKKyAgICogQSByZWplY3Rpb24gYWxnb3JpdGhtIHdoZW4gdCAqIHAgPj0gOCBhbmQgYSBzaW1wbGUgd2FpdGluZyB0aW1lCisgICAqIG1ldGhvZCAtIHRoZSBzZWNvbmQgaW4gdGhlIHJlZmVyZW5jZWQgYm9vayAtIG90aGVyd2lzZS4KKyAgICogTkI6IFRoZSBmb3JtZXIgaXMgYXZhaWxhYmxlIG9ubHkgaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgKiBpcyBkZWZpbmVkLgorICAgKgorICAgKiBSZWZlcmVuY2U6CisgICAqIERldnJveWUsIEwuIE5vbi1Vbmlmb3JtIFJhbmRvbSBWYXJpYXRlcyBHZW5lcmF0aW9uLiBTcHJpbmdlci1WZXJsYWcsCisgICAqIE5ldyBZb3JrLCAxOTg2LCBDaC4gWCwgU2VjdC4gNCAoKyBFcnJhdGEhKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGJpbm9taWFsX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlyZXN1bHRfdHlwZSBfX3JldDsKKwljb25zdCBfSW50VHlwZSBfX3QgPSBfX3BhcmFtLnQoKTsKKwljb25zdCBkb3VibGUgX19wID0gX19wYXJhbS5wKCk7CisJY29uc3QgZG91YmxlIF9fcDEyID0gX19wIDw9IDAuNSA/IF9fcCA6IDEuMCAtIF9fcDsKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGRvdWJsZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwlpZiAoIV9fcGFyYW0uX01fZWFzeSkKKwkgIHsKKwkgICAgZG91YmxlIF9feDsKKworCSAgICAvLyBTZWUgY29tbWVudHMgYWJvdmUuLi4KKwkgICAgY29uc3QgZG91YmxlIF9fbmFmID0KKwkgICAgICAoMSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSAvIDI7CisJICAgIGNvbnN0IGRvdWJsZSBfX3RociA9CisJICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxfSW50VHlwZT46Om1heCgpICsgX19uYWY7CisKKwkgICAgY29uc3QgZG91YmxlIF9fbnAgPSBzdGQ6OmZsb29yKF9fdCAqIF9fcDEyKTsKKworCSAgICAvLyBzcXJ0KHBpIC8gMikKKwkgICAgY29uc3QgZG91YmxlIF9fc3BpXzIgPSAxLjI1MzMxNDEzNzMxNTUwMDI1MTIwNzg4MjY0MjQwNTUyMjZMOworCSAgICBjb25zdCBkb3VibGUgX19hMSA9IF9fcGFyYW0uX01fYTE7CisJICAgIGNvbnN0IGRvdWJsZSBfX2ExMiA9IF9fYTEgKyBfX3BhcmFtLl9NX3MyICogX19zcGlfMjsKKwkgICAgY29uc3QgZG91YmxlIF9fYTEyMyA9IF9fcGFyYW0uX01fYTEyMzsKKwkgICAgY29uc3QgZG91YmxlIF9fczFzID0gX19wYXJhbS5fTV9zMSAqIF9fcGFyYW0uX01fczE7CisJICAgIGNvbnN0IGRvdWJsZSBfX3MycyA9IF9fcGFyYW0uX01fczIgKiBfX3BhcmFtLl9NX3MyOworCisJICAgIGJvb2wgX19yZWplY3Q7CisJICAgIGRvCisJICAgICAgeworCQljb25zdCBkb3VibGUgX191ID0gX19wYXJhbS5fTV9zICogX19hdXJuZygpOworCisJCWRvdWJsZSBfX3Y7CisKKwkJaWYgKF9fdSA8PSBfX2ExKQorCQkgIHsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX24gPSBfTV9uZChfX3VybmcpOworCQkgICAgY29uc3QgZG91YmxlIF9feSA9IF9fcGFyYW0uX01fczEgKiBzdGQ6OmFicyhfX24pOworCQkgICAgX19yZWplY3QgPSBfX3kgPj0gX19wYXJhbS5fTV9kMTsKKwkJICAgIGlmICghX19yZWplY3QpCisJCSAgICAgIHsKKwkJCWNvbnN0IGRvdWJsZSBfX2UgPSAtc3RkOjpsb2coMS4wIC0gX19hdXJuZygpKTsKKwkJCV9feCA9IHN0ZDo6Zmxvb3IoX195KTsKKwkJCV9fdiA9IC1fX2UgLSBfX24gKiBfX24gLyAyICsgX19wYXJhbS5fTV9jOworCQkgICAgICB9CisJCSAgfQorCQllbHNlIGlmIChfX3UgPD0gX19hMTIpCisJCSAgeworCQkgICAgY29uc3QgZG91YmxlIF9fbiA9IF9NX25kKF9fdXJuZyk7CisJCSAgICBjb25zdCBkb3VibGUgX195ID0gX19wYXJhbS5fTV9zMiAqIHN0ZDo6YWJzKF9fbik7CisJCSAgICBfX3JlamVjdCA9IF9feSA+PSBfX3BhcmFtLl9NX2QyOworCQkgICAgaWYgKCFfX3JlamVjdCkKKwkJICAgICAgeworCQkJY29uc3QgZG91YmxlIF9fZSA9IC1zdGQ6OmxvZygxLjAgLSBfX2F1cm5nKCkpOworCQkJX194ID0gc3RkOjpmbG9vcigtX195KTsKKwkJCV9fdiA9IC1fX2UgLSBfX24gKiBfX24gLyAyOworCQkgICAgICB9CisJCSAgfQorCQllbHNlIGlmIChfX3UgPD0gX19hMTIzKQorCQkgIHsKKwkJICAgIGNvbnN0IGRvdWJsZSBfX2UxID0gLXN0ZDo6bG9nKDEuMCAtIF9fYXVybmcoKSk7CisJCSAgICBjb25zdCBkb3VibGUgX19lMiA9IC1zdGQ6OmxvZygxLjAgLSBfX2F1cm5nKCkpOworCisJCSAgICBjb25zdCBkb3VibGUgX195ID0gX19wYXJhbS5fTV9kMQorCQkJCSAgICAgKyAyICogX19zMXMgKiBfX2UxIC8gX19wYXJhbS5fTV9kMTsKKwkJICAgIF9feCA9IHN0ZDo6Zmxvb3IoX195KTsKKwkJICAgIF9fdiA9ICgtX19lMiArIF9fcGFyYW0uX01fZDEgKiAoMSAvIChfX3QgLSBfX25wKQorCQkJCQkJICAgIC1fX3kgLyAoMiAqIF9fczFzKSkpOworCQkgICAgX19yZWplY3QgPSBmYWxzZTsKKwkJICB9CisJCWVsc2UKKwkJICB7CisJCSAgICBjb25zdCBkb3VibGUgX19lMSA9IC1zdGQ6OmxvZygxLjAgLSBfX2F1cm5nKCkpOworCQkgICAgY29uc3QgZG91YmxlIF9fZTIgPSAtc3RkOjpsb2coMS4wIC0gX19hdXJuZygpKTsKKworCQkgICAgY29uc3QgZG91YmxlIF9feSA9IF9fcGFyYW0uX01fZDIKKwkJCQkgICAgICsgMiAqIF9fczJzICogX19lMSAvIF9fcGFyYW0uX01fZDI7CisJCSAgICBfX3ggPSBzdGQ6OmZsb29yKC1fX3kpOworCQkgICAgX192ID0gLV9fZTIgLSBfX3BhcmFtLl9NX2QyICogX195IC8gKDIgKiBfX3Mycyk7CisJCSAgICBfX3JlamVjdCA9IGZhbHNlOworCQkgIH0KKworCQlfX3JlamVjdCA9IF9fcmVqZWN0IHx8IF9feCA8IC1fX25wIHx8IF9feCA+IF9fdCAtIF9fbnA7CisJCWlmICghX19yZWplY3QpCisJCSAgeworCQkgICAgY29uc3QgZG91YmxlIF9fbGZ4ID0KKwkJICAgICAgc3RkOjpsZ2FtbWEoX19ucCArIF9feCArIDEpCisJCSAgICAgICsgc3RkOjpsZ2FtbWEoX190IC0gKF9fbnAgKyBfX3gpICsgMSk7CisJCSAgICBfX3JlamVjdCA9IF9fdiA+IF9fcGFyYW0uX01fbGYgLSBfX2xmeAorCQkJICAgICArIF9feCAqIF9fcGFyYW0uX01fbHAxcDsKKwkJICB9CisKKwkJX19yZWplY3QgfD0gX194ICsgX19ucCA+PSBfX3RocjsKKwkgICAgICB9CisJICAgIHdoaWxlIChfX3JlamVjdCk7CisKKwkgICAgX194ICs9IF9fbnAgKyBfX25hZjsKKworCSAgICBjb25zdCBfSW50VHlwZSBfX3ogPSBfTV93YWl0aW5nKF9fdXJuZywgX190IC0gX0ludFR5cGUoX194KSwKKwkJCQkJICAgIF9fcGFyYW0uX01fcSk7CisJICAgIF9fcmV0ID0gX0ludFR5cGUoX194KSArIF9fejsKKwkgIH0KKwllbHNlCisjZW5kaWYKKwkgIF9fcmV0ID0gX01fd2FpdGluZyhfX3VybmcsIF9fdCwgX19wYXJhbS5fTV9xKTsKKworCWlmIChfX3AxMiAhPSBfX3ApCisJICBfX3JldCA9IF9fdCAtIF9fcmV0OworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorCS8vIFdlIGNvdWxkIGR1cGxpY2F0ZSBldmVyeXRoaW5nIGZyb20gb3BlcmF0b3IoKS4uLgorCXdoaWxlIChfX2YgIT0gX190KQorCSAgKl9fZisrID0gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9fcGFyYW0pOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194LnQoKSA8PCBfX3NwYWNlIDw8IF9feC5wKCkKKwkgICA8PCBfX3NwYWNlIDw8IF9feC5fTV9uZDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfSW50VHlwZSBfX3Q7CisgICAgICBkb3VibGUgX19wOworICAgICAgX19pcyA+PiBfX3QgPj4gX19wID4+IF9feC5fTV9uZDsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX3QsIF9fcCkpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHN0ZDo6ZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIHJlc3VsdF90eXBlPgorCSAgX19hdXJuZyhfX3VybmcpOworCXdoaWxlIChfX2YgIT0gX190KQorCSAgKl9fZisrID0gLXN0ZDo6bG9nKHJlc3VsdF90eXBlKDEpIC0gX19hdXJuZygpKSAvIF9fcC5sYW1iZGEoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBleHBvbmVudGlhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX29zLndpZGVuKCcgJykpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5sYW1iZGEoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19sYW1iZGE7CisgICAgICBfX2lzID4+IF9fbGFtYmRhOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2xhbWJkYSkpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgLyoqCisgICAqIFBvbGFyIG1ldGhvZCBkdWUgdG8gTWFyc2FnbGlhLgorICAgKgorICAgKiBEZXZyb3llLCBMLiBOb24tVW5pZm9ybSBSYW5kb20gVmFyaWF0ZXMgR2VuZXJhdGlvbi4gU3ByaW5nZXItVmVybGFnLAorICAgKiBOZXcgWW9yaywgMTk4NiwgQ2guIFYsIFNlY3QuIDQuNC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeworCXJlc3VsdF90eXBlIF9fcmV0OworCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgcmVzdWx0X3R5cGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKwlpZiAoX01fc2F2ZWRfYXZhaWxhYmxlKQorCSAgeworCSAgICBfTV9zYXZlZF9hdmFpbGFibGUgPSBmYWxzZTsKKwkgICAgX19yZXQgPSBfTV9zYXZlZDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHJlc3VsdF90eXBlIF9feCwgX195LCBfX3IyOworCSAgICBkbworCSAgICAgIHsKKwkJX194ID0gcmVzdWx0X3R5cGUoMi4wKSAqIF9fYXVybmcoKSAtIDEuMDsKKwkJX195ID0gcmVzdWx0X3R5cGUoMi4wKSAqIF9fYXVybmcoKSAtIDEuMDsKKwkJX19yMiA9IF9feCAqIF9feCArIF9feSAqIF9feTsKKwkgICAgICB9CisJICAgIHdoaWxlIChfX3IyID4gMS4wIHx8IF9fcjIgPT0gMC4wKTsKKworCSAgICBjb25zdCByZXN1bHRfdHlwZSBfX211bHQgPSBzdGQ6OnNxcnQoLTIgKiBzdGQ6OmxvZyhfX3IyKSAvIF9fcjIpOworCSAgICBfTV9zYXZlZCA9IF9feCAqIF9fbXVsdDsKKwkgICAgX01fc2F2ZWRfYXZhaWxhYmxlID0gdHJ1ZTsKKwkgICAgX19yZXQgPSBfX3kgKiBfX211bHQ7CisJICB9CisKKwlfX3JldCA9IF9fcmV0ICogX19wYXJhbS5zdGRkZXYoKSArIF9fcGFyYW0ubWVhbigpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorCisJaWYgKF9fZiA9PSBfX3QpCisJICByZXR1cm47CisKKwlpZiAoX01fc2F2ZWRfYXZhaWxhYmxlKQorCSAgeworCSAgICBfTV9zYXZlZF9hdmFpbGFibGUgPSBmYWxzZTsKKwkgICAgKl9fZisrID0gX01fc2F2ZWQgKiBfX3BhcmFtLnN0ZGRldigpICsgX19wYXJhbS5tZWFuKCk7CisKKwkgICAgaWYgKF9fZiA9PSBfX3QpCisJICAgICAgcmV0dXJuOworCSAgfQorCisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCXdoaWxlIChfX2YgKyAxIDwgX190KQorCSAgeworCSAgICByZXN1bHRfdHlwZSBfX3gsIF9feSwgX19yMjsKKwkgICAgZG8KKwkgICAgICB7CisJCV9feCA9IHJlc3VsdF90eXBlKDIuMCkgKiBfX2F1cm5nKCkgLSAxLjA7CisJCV9feSA9IHJlc3VsdF90eXBlKDIuMCkgKiBfX2F1cm5nKCkgLSAxLjA7CisJCV9fcjIgPSBfX3ggKiBfX3ggKyBfX3kgKiBfX3k7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19yMiA+IDEuMCB8fCBfX3IyID09IDAuMCk7CisKKwkgICAgY29uc3QgcmVzdWx0X3R5cGUgX19tdWx0ID0gc3RkOjpzcXJ0KC0yICogc3RkOjpsb2coX19yMikgLyBfX3IyKTsKKwkgICAgKl9fZisrID0gX195ICogX19tdWx0ICogX19wYXJhbS5zdGRkZXYoKSArIF9fcGFyYW0ubWVhbigpOworCSAgICAqX19mKysgPSBfX3ggKiBfX211bHQgKiBfX3BhcmFtLnN0ZGRldigpICsgX19wYXJhbS5tZWFuKCk7CisJICB9CisKKwlpZiAoX19mICE9IF9fdCkKKwkgIHsKKwkgICAgcmVzdWx0X3R5cGUgX194LCBfX3ksIF9fcjI7CisJICAgIGRvCisJICAgICAgeworCQlfX3ggPSByZXN1bHRfdHlwZSgyLjApICogX19hdXJuZygpIC0gMS4wOworCQlfX3kgPSByZXN1bHRfdHlwZSgyLjApICogX19hdXJuZygpIC0gMS4wOworCQlfX3IyID0gX194ICogX194ICsgX195ICogX195OworCSAgICAgIH0KKwkgICAgd2hpbGUgKF9fcjIgPiAxLjAgfHwgX19yMiA9PSAwLjApOworCisJICAgIGNvbnN0IHJlc3VsdF90eXBlIF9fbXVsdCA9IHN0ZDo6c3FydCgtMiAqIHN0ZDo6bG9nKF9fcjIpIC8gX19yMik7CisJICAgIF9NX3NhdmVkID0gX194ICogX19tdWx0OworCSAgICBfTV9zYXZlZF9hdmFpbGFibGUgPSB0cnVlOworCSAgICAqX19mID0gX195ICogX19tdWx0ICogX19wYXJhbS5zdGRkZXYoKSArIF9fcGFyYW0ubWVhbigpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3Qgc3RkOjpub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeworICAgICAgaWYgKF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbQorCSAgJiYgX19kMS5fTV9zYXZlZF9hdmFpbGFibGUgPT0gX19kMi5fTV9zYXZlZF9hdmFpbGFibGUpCisJeworCSAgaWYgKF9fZDEuX01fc2F2ZWRfYXZhaWxhYmxlCisJICAgICAgJiYgX19kMS5fTV9zYXZlZCA9PSBfX2QyLl9NX3NhdmVkKQorCSAgICByZXR1cm4gdHJ1ZTsKKwkgIGVsc2UgaWYoIV9fZDEuX01fc2F2ZWRfYXZhaWxhYmxlKQorCSAgICByZXR1cm4gdHJ1ZTsKKwkgIGVsc2UKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5tZWFuKCkgPDwgX19zcGFjZSA8PCBfX3guc3RkZGV2KCkKKwkgICA8PCBfX3NwYWNlIDw8IF9feC5fTV9zYXZlZF9hdmFpbGFibGU7CisgICAgICBpZiAoX194Ll9NX3NhdmVkX2F2YWlsYWJsZSkKKwlfX29zIDw8IF9fc3BhY2UgPDwgX194Ll9NX3NhdmVkOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBkb3VibGUgX19tZWFuLCBfX3N0ZGRldjsKKyAgICAgIF9faXMgPj4gX19tZWFuID4+IF9fc3RkZGV2CisJICAgPj4gX194Ll9NX3NhdmVkX2F2YWlsYWJsZTsKKyAgICAgIGlmIChfX3guX01fc2F2ZWRfYXZhaWxhYmxlKQorCV9faXMgPj4gX194Ll9NX3NhdmVkOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisJCXBhcmFtX3R5cGUoX19tZWFuLCBfX3N0ZGRldikpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGxvZ25vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorCSAgd2hpbGUgKF9fZiAhPSBfX3QpCisJICAgICpfX2YrKyA9IHN0ZDo6ZXhwKF9fcC5zKCkgKiBfTV9uZChfX3VybmcpICsgX19wLm0oKSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgbG9nbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Lm0oKSA8PCBfX3NwYWNlIDw8IF9feC5zKCkKKwkgICA8PCBfX3NwYWNlIDw8IF9feC5fTV9uZDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGxvZ25vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fbSwgX19zOworICAgICAgX19pcyA+PiBfX20gPj4gX19zID4+IF9feC5fTV9uZDsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBsb2dub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fbSwgX19zKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHN0ZDo6Y2hpX3NxdWFyZWRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisJd2hpbGUgKF9fZiAhPSBfX3QpCisJICAqX19mKysgPSAyICogX01fZ2QoX191cm5nKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgc3RkOjpjaGlfc3F1YXJlZF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCB0eXBlbmFtZQorCQkgICAgICBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT46OnBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisJd2hpbGUgKF9fZiAhPSBfX3QpCisJICAqX19mKysgPSAyICogX01fZ2QoX191cm5nLCBfX3ApOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Lm4oKSA8PCBfX3NwYWNlIDw8IF9feC5fTV9nZDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19uOworICAgICAgX19pcyA+PiBfX24gPj4gX194Ll9NX2dkOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGNoaV9zcXVhcmVkX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX24pKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIGNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKwlfUmVhbFR5cGUgX191OworCWRvCisJICBfX3UgPSBfX2F1cm5nKCk7CisJd2hpbGUgKF9fdSA9PSAwLjUpOworCisJY29uc3QgX1JlYWxUeXBlIF9fcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjlMOworCXJldHVybiBfX3AuYSgpICsgX19wLmIoKSAqIHN0ZDo6dGFuKF9fcGkgKiBfX3UpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBjYXVjaHlfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKwljb25zdCBfUmVhbFR5cGUgX19waSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyOUw7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKwl3aGlsZSAoX19mICE9IF9fdCkKKwkgIHsKKwkgICAgX1JlYWxUeXBlIF9fdTsKKwkgICAgZG8KKwkgICAgICBfX3UgPSBfX2F1cm5nKCk7CisJICAgIHdoaWxlIChfX3UgPT0gMC41KTsKKworCSAgICAqX19mKysgPSBfX3AuYSgpICsgX19wLmIoKSAqIHN0ZDo6dGFuKF9fcGkgKiBfX3UpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGNhdWNoeV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5hKCkgPDwgX19zcGFjZSA8PCBfX3guYigpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgY2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19hLCBfX2I7CisgICAgICBfX2lzID4+IF9fYSA+PiBfX2I7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgY2F1Y2h5X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2EsIF9fYikpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHN0ZDo6ZmlzaGVyX2ZfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisJd2hpbGUgKF9fZiAhPSBfX3QpCisJICAqX19mKysgPSAoKF9NX2dkX3goX191cm5nKSAqIG4oKSkgLyAoX01fZ2RfeShfX3VybmcpICogbSgpKSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHN0ZDo6ZmlzaGVyX2ZfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZQorCSAgcGFyYW1fdHlwZTsKKwlwYXJhbV90eXBlIF9fcDEoX19wLm0oKSAvIDIpOworCXBhcmFtX3R5cGUgX19wMihfX3AubigpIC8gMik7CisJd2hpbGUgKF9fZiAhPSBfX3QpCisJICAqX19mKysgPSAoKF9NX2dkX3goX191cm5nLCBfX3AxKSAqIG4oKSkKKwkJICAgIC8gKF9NX2dkX3koX191cm5nLCBfX3AyKSAqIG0oKSkpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Lm0oKSA8PCBfX3NwYWNlIDw8IF9feC5uKCkKKwkgICA8PCBfX3NwYWNlIDw8IF9feC5fTV9nZF94IDw8IF9fc3BhY2UgPDwgX194Ll9NX2dkX3k7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBmaXNoZXJfZl9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fbSwgX19uOworICAgICAgX19pcyA+PiBfX20gPj4gX19uID4+IF9feC5fTV9nZF94ID4+IF9feC5fTV9nZF95OworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGZpc2hlcl9mX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX20sIF9fbikpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHN0ZDo6c3R1ZGVudF90X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorCXdoaWxlIChfX2YgIT0gX190KQorCSAgKl9fZisrID0gX01fbmQoX191cm5nKSAqIHN0ZDo6c3FydChuKCkgLyBfTV9nZChfX3VybmcpKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgc3RkOjpzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKwl0eXBlbmFtZSBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT46OnBhcmFtX3R5cGUKKwkgIF9fcDIoX19wLm4oKSAvIDIsIDIpOworCXdoaWxlIChfX2YgIT0gX190KQorCSAgKl9fZisrID0gIF9NX25kKF9fdXJuZykgKiBzdGQ6OnNxcnQoX19wLm4oKSAvIF9NX2dkKF9fdXJuZywgX19wMikpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHN0dWRlbnRfdF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5uKCkgPDwgX19zcGFjZSA8PCBfX3guX01fbmQgPDwgX19zcGFjZSA8PCBfX3guX01fZ2Q7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBzdHVkZW50X3RfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9SZWFsVHlwZSBfX247CisgICAgICBfX2lzID4+IF9fbiA+PiBfX3guX01fbmQgPj4gX194Ll9NX2dkOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIHN0dWRlbnRfdF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cGFyYW1fdHlwZShfX24pKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB2b2lkCisgICAgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnBhcmFtX3R5cGU6OgorICAgIF9NX2luaXRpYWxpemUoKQorICAgIHsKKyAgICAgIF9NX21hbHBoYSA9IF9NX2FscGhhIDwgMS4wID8gX01fYWxwaGEgKyBfUmVhbFR5cGUoMS4wKSA6IF9NX2FscGhhOworCisgICAgICBjb25zdCBfUmVhbFR5cGUgX19hMSA9IF9NX21hbHBoYSAtIF9SZWFsVHlwZSgxLjApIC8gX1JlYWxUeXBlKDMuMCk7CisgICAgICBfTV9hMiA9IF9SZWFsVHlwZSgxLjApIC8gc3RkOjpzcXJ0KF9SZWFsVHlwZSg5LjApICogX19hMSk7CisgICAgfQorCisgIC8qKgorICAgKiBNYXJzYWdsaWEsIEcuIGFuZCBUc2FuZywgVy4gVy4KKyAgICogIkEgU2ltcGxlIE1ldGhvZCBmb3IgR2VuZXJhdGluZyBHYW1tYSBWYXJpYWJsZXMiCisgICAqIEFDTSBUcmFuc2FjdGlvbnMgb24gTWF0aGVtYXRpY2FsIFNvZnR3YXJlLCAyNiwgMywgMzYzLTM3MiwgMjAwMC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIGdhbW1hX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIHJlc3VsdF90eXBlPgorCSAgX19hdXJuZyhfX3VybmcpOworCisJcmVzdWx0X3R5cGUgX191LCBfX3YsIF9fbjsKKwljb25zdCByZXN1bHRfdHlwZSBfX2ExID0gKF9fcGFyYW0uX01fbWFscGhhCisJCQkJICAtIF9SZWFsVHlwZSgxLjApIC8gX1JlYWxUeXBlKDMuMCkpOworCisJZG8KKwkgIHsKKwkgICAgZG8KKwkgICAgICB7CisJCV9fbiA9IF9NX25kKF9fdXJuZyk7CisJCV9fdiA9IHJlc3VsdF90eXBlKDEuMCkgKyBfX3BhcmFtLl9NX2EyICogX19uOyAKKwkgICAgICB9CisJICAgIHdoaWxlIChfX3YgPD0gMC4wKTsKKworCSAgICBfX3YgPSBfX3YgKiBfX3YgKiBfX3Y7CisJICAgIF9fdSA9IF9fYXVybmcoKTsKKwkgIH0KKwl3aGlsZSAoX191ID4gcmVzdWx0X3R5cGUoMS4wKSAtIDAuMzMxICogX19uICogX19uICogX19uICogX19uCisJICAgICAgICYmIChzdGQ6OmxvZyhfX3UpID4gKDAuNSAqIF9fbiAqIF9fbiArIF9fYTEKKwkJCQkgICAgKiAoMS4wIC0gX192ICsgc3RkOjpsb2coX192KSkpKSk7CisKKwlpZiAoX19wYXJhbS5hbHBoYSgpID09IF9fcGFyYW0uX01fbWFscGhhKQorCSAgcmV0dXJuIF9fYTEgKiBfX3YgKiBfX3BhcmFtLmJldGEoKTsKKwllbHNlCisJICB7CisJICAgIGRvCisJICAgICAgX191ID0gX19hdXJuZygpOworCSAgICB3aGlsZSAoX191ID09IDAuMCk7CisJICAgIAorCSAgICByZXR1cm4gKHN0ZDo6cG93KF9fdSwgcmVzdWx0X3R5cGUoMS4wKSAvIF9fcGFyYW0uYWxwaGEoKSkKKwkJICAgICogX19hMSAqIF9fdiAqIF9fcGFyYW0uYmV0YSgpKTsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCXJlc3VsdF90eXBlIF9fdSwgX192LCBfX247CisJY29uc3QgcmVzdWx0X3R5cGUgX19hMSA9IChfX3BhcmFtLl9NX21hbHBoYQorCQkJCSAgLSBfUmVhbFR5cGUoMS4wKSAvIF9SZWFsVHlwZSgzLjApKTsKKworCWlmIChfX3BhcmFtLmFscGhhKCkgPT0gX19wYXJhbS5fTV9tYWxwaGEpCisJICB3aGlsZSAoX19mICE9IF9fdCkKKwkgICAgeworCSAgICAgIGRvCisJCXsKKwkJICBkbworCQkgICAgeworCQkgICAgICBfX24gPSBfTV9uZChfX3VybmcpOworCQkgICAgICBfX3YgPSByZXN1bHRfdHlwZSgxLjApICsgX19wYXJhbS5fTV9hMiAqIF9fbjsKKwkJICAgIH0KKwkJICB3aGlsZSAoX192IDw9IDAuMCk7CisKKwkJICBfX3YgPSBfX3YgKiBfX3YgKiBfX3Y7CisJCSAgX191ID0gX19hdXJuZygpOworCQl9CisJICAgICAgd2hpbGUgKF9fdSA+IHJlc3VsdF90eXBlKDEuMCkgLSAwLjMzMSAqIF9fbiAqIF9fbiAqIF9fbiAqIF9fbgorCQkgICAgICYmIChzdGQ6OmxvZyhfX3UpID4gKDAuNSAqIF9fbiAqIF9fbiArIF9fYTEKKwkJCQkJICAqICgxLjAgLSBfX3YgKyBzdGQ6OmxvZyhfX3YpKSkpKTsKKworCSAgICAgICpfX2YrKyA9IF9fYTEgKiBfX3YgKiBfX3BhcmFtLmJldGEoKTsKKwkgICAgfQorCWVsc2UKKwkgIHdoaWxlIChfX2YgIT0gX190KQorCSAgICB7CisJICAgICAgZG8KKwkJeworCQkgIGRvCisJCSAgICB7CisJCSAgICAgIF9fbiA9IF9NX25kKF9fdXJuZyk7CisJCSAgICAgIF9fdiA9IHJlc3VsdF90eXBlKDEuMCkgKyBfX3BhcmFtLl9NX2EyICogX19uOworCQkgICAgfQorCQkgIHdoaWxlIChfX3YgPD0gMC4wKTsKKworCQkgIF9fdiA9IF9fdiAqIF9fdiAqIF9fdjsKKwkJICBfX3UgPSBfX2F1cm5nKCk7CisJCX0KKwkgICAgICB3aGlsZSAoX191ID4gcmVzdWx0X3R5cGUoMS4wKSAtIDAuMzMxICogX19uICogX19uICogX19uICogX19uCisJCSAgICAgJiYgKHN0ZDo6bG9nKF9fdSkgPiAoMC41ICogX19uICogX19uICsgX19hMQorCQkJCQkgICogKDEuMCAtIF9fdiArIHN0ZDo6bG9nKF9fdikpKSkpOworCisJICAgICAgZG8KKwkJX191ID0gX19hdXJuZygpOworCSAgICAgIHdoaWxlIChfX3UgPT0gMC4wKTsKKworCSAgICAgICpfX2YrKyA9IChzdGQ6OnBvdyhfX3UsIHJlc3VsdF90eXBlKDEuMCkgLyBfX3BhcmFtLmFscGhhKCkpCisJCQkqIF9fYTEgKiBfX3YgKiBfX3BhcmFtLmJldGEoKSk7CisJICAgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5hbHBoYSgpIDw8IF9fc3BhY2UgPDwgX194LmJldGEoKQorCSAgIDw8IF9fc3BhY2UgPDwgX194Ll9NX25kOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9SZWFsVHlwZSBfX2FscGhhX3ZhbCwgX19iZXRhX3ZhbDsKKyAgICAgIF9faXMgPj4gX19hbHBoYV92YWwgPj4gX19iZXRhX3ZhbCA+PiBfX3guX01fbmQ7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fYWxwaGFfdmFsLCBfX2JldGFfdmFsKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSB3ZWlidWxsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgd2VpYnVsbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKwlyZXR1cm4gX19wLmIoKSAqIHN0ZDo6cG93KC1zdGQ6OmxvZyhyZXN1bHRfdHlwZSgxKSAtIF9fYXVybmcoKSksCisJCQkJICByZXN1bHRfdHlwZSgxKSAvIF9fcC5hKCkpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICB3ZWlidWxsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKwlhdXRvIF9faW52X2EgPSByZXN1bHRfdHlwZSgxKSAvIF9fcC5hKCk7CisKKwl3aGlsZSAoX19mICE9IF9fdCkKKwkgICpfX2YrKyA9IF9fcC5iKCkgKiBzdGQ6OnBvdygtc3RkOjpsb2cocmVzdWx0X3R5cGUoMSkgLSBfX2F1cm5nKCkpLAorCQkJCSAgICAgIF9faW52X2EpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHdlaWJ1bGxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guYSgpIDw8IF9fc3BhY2UgPDwgX194LmIoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHdlaWJ1bGxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9SZWFsVHlwZSBfX2EsIF9fYjsKKyAgICAgIF9faXMgPj4gX19hID4+IF9fYjsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSB3ZWlidWxsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2EsIF9fYikpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgcmVzdWx0X3R5cGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisJcmV0dXJuIF9fcC5hKCkgLSBfX3AuYigpICogc3RkOjpsb2coLXN0ZDo6bG9nKHJlc3VsdF90eXBlKDEpCisJCQkJCQkgICAgICAtIF9fYXVybmcoKSkpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBleHRyZW1lX3ZhbHVlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCXdoaWxlIChfX2YgIT0gX190KQorCSAgKl9fZisrID0gX19wLmEoKSAtIF9fcC5iKCkgKiBzdGQ6OmxvZygtc3RkOjpsb2cocmVzdWx0X3R5cGUoMSkKKwkJCQkJCQkgIC0gX19hdXJuZygpKSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5hKCkgPDwgX19zcGFjZSA8PCBfX3guYigpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgZXh0cmVtZV92YWx1ZV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fYSwgX19iOworICAgICAgX19pcyA+PiBfX2EgPj4gX19iOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGV4dHJlbWVfdmFsdWVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fYSwgX19iKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZT4KKyAgICB2b2lkCisgICAgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgX01faW5pdGlhbGl6ZSgpCisgICAgeworICAgICAgaWYgKF9NX3Byb2Iuc2l6ZSgpIDwgMikKKwl7CisJICBfTV9wcm9iLmNsZWFyKCk7CisJICByZXR1cm47CisJfQorCisgICAgICBjb25zdCBkb3VibGUgX19zdW0gPSBzdGQ6OmFjY3VtdWxhdGUoX01fcHJvYi5iZWdpbigpLAorCQkJCQkgICBfTV9wcm9iLmVuZCgpLCAwLjApOworICAgICAgLy8gTm93IG5vcm1hbGl6ZSB0aGUgcHJvYmFiaWxpdGVzLgorICAgICAgX19kZXRhaWw6Ol9fbm9ybWFsaXplKF9NX3Byb2IuYmVnaW4oKSwgX01fcHJvYi5lbmQoKSwgX01fcHJvYi5iZWdpbigpLAorCQkJICAgIF9fc3VtKTsKKyAgICAgIC8vIEFjY3VtdWxhdGUgcGFydGlhbCBzdW1zLgorICAgICAgX01fY3AucmVzZXJ2ZShfTV9wcm9iLnNpemUoKSk7CisgICAgICBzdGQ6OnBhcnRpYWxfc3VtKF9NX3Byb2IuYmVnaW4oKSwgX01fcHJvYi5lbmQoKSwKKwkJICAgICAgIHN0ZDo6YmFja19pbnNlcnRlcihfTV9jcCkpOworICAgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXN0IGN1bXVsYXRpdmUgcHJvYmFiaWxpdHkgaXMgb25lLgorICAgICAgX01fY3BbX01fY3Auc2l6ZSgpIC0gMV0gPSAxLjA7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorICAgICAgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgICBwYXJhbV90eXBlKHNpemVfdCBfX253LCBkb3VibGUgX194bWluLCBkb3VibGUgX194bWF4LCBfRnVuYyBfX2Z3KQorICAgICAgOiBfTV9wcm9iKCksIF9NX2NwKCkKKyAgICAgIHsKKwljb25zdCBzaXplX3QgX19uID0gX19udyA9PSAwID8gMSA6IF9fbnc7CisJY29uc3QgZG91YmxlIF9fZGVsdGEgPSAoX194bWF4IC0gX194bWluKSAvIF9fbjsKKworCV9NX3Byb2IucmVzZXJ2ZShfX24pOworCWZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8IF9fbnc7ICsrX19rKQorCSAgX01fcHJvYi5wdXNoX2JhY2soX19mdyhfX3htaW4gKyBfX2sgKiBfX2RlbHRhICsgMC41ICogX19kZWx0YSkpOworCisJX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlpZiAoX19wYXJhbS5fTV9jcC5lbXB0eSgpKQorCSAgcmV0dXJuIHJlc3VsdF90eXBlKDApOworCisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBkb3VibGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKwljb25zdCBkb3VibGUgX19wID0gX19hdXJuZygpOworCWF1dG8gX19wb3MgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fcGFyYW0uX01fY3AuYmVnaW4oKSwKKwkJCQkgICAgICBfX3BhcmFtLl9NX2NwLmVuZCgpLCBfX3ApOworCisJcmV0dXJuIF9fcG9zIC0gX19wYXJhbS5fTV9jcC5iZWdpbigpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGRpc2NyZXRlX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisKKwlpZiAoX19wYXJhbS5fTV9jcC5lbXB0eSgpKQorCSAgeworCSAgICB3aGlsZSAoX19mICE9IF9fdCkKKwkgICAgICAqX19mKysgPSByZXN1bHRfdHlwZSgwKTsKKwkgICAgcmV0dXJuOworCSAgfQorCisJX19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBkb3VibGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKwl3aGlsZSAoX19mICE9IF9fdCkKKwkgIHsKKwkgICAgY29uc3QgZG91YmxlIF9fcCA9IF9fYXVybmcoKTsKKwkgICAgYXV0byBfX3BvcyA9IHN0ZDo6bG93ZXJfYm91bmQoX19wYXJhbS5fTV9jcC5iZWdpbigpLAorCQkJCQkgIF9fcGFyYW0uX01fY3AuZW5kKCksIF9fcCk7CisKKwkgICAgKl9fZisrID0gX19wb3MgLSBfX3BhcmFtLl9NX2NwLmJlZ2luKCk7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBkaXNjcmV0ZV9kaXN0cmlidXRpb248X0ludFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4gX19wcm9iID0gX194LnByb2JhYmlsaXRpZXMoKTsKKyAgICAgIF9fb3MgPDwgX19wcm9iLnNpemUoKTsKKyAgICAgIGZvciAoYXV0byBfX2RpdCA9IF9fcHJvYi5iZWdpbigpOyBfX2RpdCAhPSBfX3Byb2IuZW5kKCk7ICsrX19kaXQpCisJX19vcyA8PCBfX3NwYWNlIDw8ICpfX2RpdDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgZGlzY3JldGVfZGlzdHJpYnV0aW9uPF9JbnRUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgc2l6ZV90IF9fbjsKKyAgICAgIF9faXMgPj4gX19uOworCisgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IF9fcHJvYl92ZWM7CisgICAgICBfX3Byb2JfdmVjLnJlc2VydmUoX19uKTsKKyAgICAgIGZvciAoOyBfX24gIT0gMDsgLS1fX24pCisJeworCSAgZG91YmxlIF9fcHJvYjsKKwkgIF9faXMgPj4gX19wcm9iOworCSAgX19wcm9iX3ZlYy5wdXNoX2JhY2soX19wcm9iKTsKKwl9CisKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBkaXNjcmV0ZV9kaXN0cmlidXRpb248X0ludFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX3Byb2JfdmVjLmJlZ2luKCksIF9fcHJvYl92ZWMuZW5kKCkpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB2b2lkCisgICAgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICBfTV9pbml0aWFsaXplKCkKKyAgICB7CisgICAgICBpZiAoX01faW50LnNpemUoKSA8IDIKKwkgIHx8IChfTV9pbnQuc2l6ZSgpID09IDIKKwkgICAgICAmJiBfTV9pbnRbMF0gPT0gX1JlYWxUeXBlKDApCisJICAgICAgJiYgX01faW50WzFdID09IF9SZWFsVHlwZSgxKSkpCisJeworCSAgX01faW50LmNsZWFyKCk7CisJICBfTV9kZW4uY2xlYXIoKTsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIGNvbnN0IGRvdWJsZSBfX3N1bSA9IHN0ZDo6YWNjdW11bGF0ZShfTV9kZW4uYmVnaW4oKSwKKwkJCQkJICAgX01fZGVuLmVuZCgpLCAwLjApOworCisgICAgICBfX2RldGFpbDo6X19ub3JtYWxpemUoX01fZGVuLmJlZ2luKCksIF9NX2Rlbi5lbmQoKSwgX01fZGVuLmJlZ2luKCksCisJCQkgICAgX19zdW0pOworCisgICAgICBfTV9jcC5yZXNlcnZlKF9NX2Rlbi5zaXplKCkpOworICAgICAgc3RkOjpwYXJ0aWFsX3N1bShfTV9kZW4uYmVnaW4oKSwgX01fZGVuLmVuZCgpLAorCQkgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKF9NX2NwKSk7CisKKyAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGFzdCBjdW11bGF0aXZlIHByb2JhYmlsaXR5IGlzIG9uZS4KKyAgICAgIF9NX2NwW19NX2NwLnNpemUoKSAtIDFdID0gMS4wOworCisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfTV9kZW4uc2l6ZSgpOyArK19faykKKwlfTV9kZW5bX19rXSAvPSBfTV9pbnRbX19rICsgMV0gLSBfTV9pbnRbX19rXTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yQiwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3JXPgorICAgICAgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICAgIHBhcmFtX3R5cGUoX0lucHV0SXRlcmF0b3JCIF9fYmJlZ2luLAorCQkgX0lucHV0SXRlcmF0b3JCIF9fYmVuZCwKKwkJIF9JbnB1dEl0ZXJhdG9yVyBfX3diZWdpbikKKyAgICAgIDogX01faW50KCksIF9NX2RlbigpLCBfTV9jcCgpCisgICAgICB7CisJaWYgKF9fYmJlZ2luICE9IF9fYmVuZCkKKwkgIHsKKwkgICAgZm9yICg7OykKKwkgICAgICB7CisJCV9NX2ludC5wdXNoX2JhY2soKl9fYmJlZ2luKTsKKwkJKytfX2JiZWdpbjsKKwkJaWYgKF9fYmJlZ2luID09IF9fYmVuZCkKKwkJICBicmVhazsKKworCQlfTV9kZW4ucHVzaF9iYWNrKCpfX3diZWdpbik7CisJCSsrX193YmVnaW47CisJICAgICAgfQorCSAgfQorCisJX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuYz4KKyAgICAgIHBpZWNld2lzZV9jb25zdGFudF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgICBwYXJhbV90eXBlKGluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX2JsLCBfRnVuYyBfX2Z3KQorICAgICAgOiBfTV9pbnQoKSwgX01fZGVuKCksIF9NX2NwKCkKKyAgICAgIHsKKwlfTV9pbnQucmVzZXJ2ZShfX2JsLnNpemUoKSk7CisJZm9yIChhdXRvIF9fYml0ZXIgPSBfX2JsLmJlZ2luKCk7IF9fYml0ZXIgIT0gX19ibC5lbmQoKTsgKytfX2JpdGVyKQorCSAgX01faW50LnB1c2hfYmFjaygqX19iaXRlcik7CisKKwlfTV9kZW4ucmVzZXJ2ZShfTV9pbnQuc2l6ZSgpIC0gMSk7CisJZm9yIChzaXplX3QgX19rID0gMDsgX19rIDwgX01faW50LnNpemUoKSAtIDE7ICsrX19rKQorCSAgX01fZGVuLnB1c2hfYmFjayhfX2Z3KDAuNSAqIChfTV9pbnRbX19rICsgMV0gKyBfTV9pbnRbX19rXSkpKTsKKworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmM+CisgICAgICBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnBhcmFtX3R5cGU6OgorICAgICAgcGFyYW1fdHlwZShzaXplX3QgX19udywgX1JlYWxUeXBlIF9feG1pbiwgX1JlYWxUeXBlIF9feG1heCwgX0Z1bmMgX19mdykKKyAgICAgIDogX01faW50KCksIF9NX2RlbigpLCBfTV9jcCgpCisgICAgICB7CisJY29uc3Qgc2l6ZV90IF9fbiA9IF9fbncgPT0gMCA/IDEgOiBfX253OworCWNvbnN0IF9SZWFsVHlwZSBfX2RlbHRhID0gKF9feG1heCAtIF9feG1pbikgLyBfX247CisKKwlfTV9pbnQucmVzZXJ2ZShfX24gKyAxKTsKKwlmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPD0gX19udzsgKytfX2spCisJICBfTV9pbnQucHVzaF9iYWNrKF9feG1pbiArIF9fayAqIF9fZGVsdGEpOworCisJX01fZGVuLnJlc2VydmUoX19uKTsKKwlmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX253OyArK19faykKKwkgIF9NX2Rlbi5wdXNoX2JhY2soX19mdyhfTV9pbnRbX19rXSArIDAuNSAqIF9fZGVsdGEpKTsKKworCV9NX2luaXRpYWxpemUoKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGRvdWJsZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCWNvbnN0IGRvdWJsZSBfX3AgPSBfX2F1cm5nKCk7CisJaWYgKF9fcGFyYW0uX01fY3AuZW1wdHkoKSkKKwkgIHJldHVybiBfX3A7CisKKwlhdXRvIF9fcG9zID0gc3RkOjpsb3dlcl9ib3VuZChfX3BhcmFtLl9NX2NwLmJlZ2luKCksCisJCQkJICAgICAgX19wYXJhbS5fTV9jcC5lbmQoKSwgX19wKTsKKwljb25zdCBzaXplX3QgX19pID0gX19wb3MgLSBfX3BhcmFtLl9NX2NwLmJlZ2luKCk7CisKKwljb25zdCBkb3VibGUgX19wcmVmID0gX19pID4gMCA/IF9fcGFyYW0uX01fY3BbX19pIC0gMV0gOiAwLjA7CisKKwlyZXR1cm4gX19wYXJhbS5fTV9pbnRbX19pXSArIChfX3AgLSBfX3ByZWYpIC8gX19wYXJhbS5fTV9kZW5bX19pXTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorCV9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgZG91YmxlPgorCSAgX19hdXJuZyhfX3VybmcpOworCisJaWYgKF9fcGFyYW0uX01fY3AuZW1wdHkoKSkKKwkgIHsKKwkgICAgd2hpbGUgKF9fZiAhPSBfX3QpCisJICAgICAgKl9fZisrID0gX19hdXJuZygpOworCSAgICByZXR1cm47CisJICB9CisKKwl3aGlsZSAoX19mICE9IF9fdCkKKwkgIHsKKwkgICAgY29uc3QgZG91YmxlIF9fcCA9IF9fYXVybmcoKTsKKworCSAgICBhdXRvIF9fcG9zID0gc3RkOjpsb3dlcl9ib3VuZChfX3BhcmFtLl9NX2NwLmJlZ2luKCksCisJCQkJCSAgX19wYXJhbS5fTV9jcC5lbmQoKSwgX19wKTsKKwkgICAgY29uc3Qgc2l6ZV90IF9faSA9IF9fcG9zIC0gX19wYXJhbS5fTV9jcC5iZWdpbigpOworCisJICAgIGNvbnN0IGRvdWJsZSBfX3ByZWYgPSBfX2kgPiAwID8gX19wYXJhbS5fTV9jcFtfX2kgLSAxXSA6IDAuMDsKKworCSAgICAqX19mKysgPSAoX19wYXJhbS5fTV9pbnRbX19pXQorCQkgICAgICArIChfX3AgLSBfX3ByZWYpIC8gX19wYXJhbS5fTV9kZW5bX19pXSk7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIHN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4gX19pbnQgPSBfX3guaW50ZXJ2YWxzKCk7CisgICAgICBfX29zIDw8IF9faW50LnNpemUoKSAtIDE7CisKKyAgICAgIGZvciAoYXV0byBfX3hpdCA9IF9faW50LmJlZ2luKCk7IF9feGl0ICE9IF9faW50LmVuZCgpOyArK19feGl0KQorCV9fb3MgPDwgX19zcGFjZSA8PCAqX194aXQ7CisKKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4gX19kZW4gPSBfX3guZGVuc2l0aWVzKCk7CisgICAgICBmb3IgKGF1dG8gX19kaXQgPSBfX2Rlbi5iZWdpbigpOyBfX2RpdCAhPSBfX2Rlbi5lbmQoKTsgKytfX2RpdCkKKwlfX29zIDw8IF9fc3BhY2UgPDwgKl9fZGl0OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgcGllY2V3aXNlX2NvbnN0YW50X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBzaXplX3QgX19uOworICAgICAgX19pcyA+PiBfX247CisKKyAgICAgIHN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4gX19pbnRfdmVjOworICAgICAgX19pbnRfdmVjLnJlc2VydmUoX19uICsgMSk7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19uOyArK19faSkKKwl7CisJICBfUmVhbFR5cGUgX19pbnQ7CisJICBfX2lzID4+IF9faW50OworCSAgX19pbnRfdmVjLnB1c2hfYmFjayhfX2ludCk7CisJfQorCisgICAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IF9fZGVuX3ZlYzsKKyAgICAgIF9fZGVuX3ZlYy5yZXNlcnZlKF9fbik7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCXsKKwkgIGRvdWJsZSBfX2RlbjsKKwkgIF9faXMgPj4gX19kZW47CisJICBfX2Rlbl92ZWMucHVzaF9iYWNrKF9fZGVuKTsKKwl9CisKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBwaWVjZXdpc2VfY29uc3RhbnRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCSAgcGFyYW1fdHlwZShfX2ludF92ZWMuYmVnaW4oKSwgX19pbnRfdmVjLmVuZCgpLCBfX2Rlbl92ZWMuYmVnaW4oKSkpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHZvaWQKKyAgICBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICBfTV9pbml0aWFsaXplKCkKKyAgICB7CisgICAgICBpZiAoX01faW50LnNpemUoKSA8IDIKKwkgIHx8IChfTV9pbnQuc2l6ZSgpID09IDIKKwkgICAgICAmJiBfTV9pbnRbMF0gPT0gX1JlYWxUeXBlKDApCisJICAgICAgJiYgX01faW50WzFdID09IF9SZWFsVHlwZSgxKQorCSAgICAgICYmIF9NX2RlblswXSA9PSBfTV9kZW5bMV0pKQorCXsKKwkgIF9NX2ludC5jbGVhcigpOworCSAgX01fZGVuLmNsZWFyKCk7CisJICByZXR1cm47CisJfQorCisgICAgICBkb3VibGUgX19zdW0gPSAwLjA7CisgICAgICBfTV9jcC5yZXNlcnZlKF9NX2ludC5zaXplKCkgLSAxKTsKKyAgICAgIF9NX20ucmVzZXJ2ZShfTV9pbnQuc2l6ZSgpIC0gMSk7CisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfTV9pbnQuc2l6ZSgpIC0gMTsgKytfX2spCisJeworCSAgY29uc3QgX1JlYWxUeXBlIF9fZGVsdGEgPSBfTV9pbnRbX19rICsgMV0gLSBfTV9pbnRbX19rXTsKKwkgIF9fc3VtICs9IDAuNSAqIChfTV9kZW5bX19rICsgMV0gKyBfTV9kZW5bX19rXSkgKiBfX2RlbHRhOworCSAgX01fY3AucHVzaF9iYWNrKF9fc3VtKTsKKwkgIF9NX20ucHVzaF9iYWNrKChfTV9kZW5bX19rICsgMV0gLSBfTV9kZW5bX19rXSkgLyBfX2RlbHRhKTsKKwl9CisKKyAgICAgIC8vICBOb3cgbm9ybWFsaXplIHRoZSBkZW5zaXRpZXMuLi4KKyAgICAgIF9fZGV0YWlsOjpfX25vcm1hbGl6ZShfTV9kZW4uYmVnaW4oKSwgX01fZGVuLmVuZCgpLCBfTV9kZW4uYmVnaW4oKSwKKwkJCSAgICBfX3N1bSk7CisgICAgICAvLyAgLi4uIGFuZCBwYXJ0aWFsIHN1bXMuLi4gCisgICAgICBfX2RldGFpbDo6X19ub3JtYWxpemUoX01fY3AuYmVnaW4oKSwgX01fY3AuZW5kKCksIF9NX2NwLmJlZ2luKCksIF9fc3VtKTsKKyAgICAgIC8vICAuLi4gYW5kIHNsb3Blcy4KKyAgICAgIF9fZGV0YWlsOjpfX25vcm1hbGl6ZShfTV9tLmJlZ2luKCksIF9NX20uZW5kKCksIF9NX20uYmVnaW4oKSwgX19zdW0pOworCisgICAgICAvLyAgTWFrZSBzdXJlIHRoZSBsYXN0IGN1bXVsYXRpdmUgcHJvYmFibGlsaXR5IGlzIG9uZS4KKyAgICAgIF9NX2NwW19NX2NwLnNpemUoKSAtIDFdID0gMS4wOworICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yQiwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3JXPgorICAgICAgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgICBwYXJhbV90eXBlKF9JbnB1dEl0ZXJhdG9yQiBfX2JiZWdpbiwKKwkJIF9JbnB1dEl0ZXJhdG9yQiBfX2JlbmQsCisJCSBfSW5wdXRJdGVyYXRvclcgX193YmVnaW4pCisgICAgICA6IF9NX2ludCgpLCBfTV9kZW4oKSwgX01fY3AoKSwgX01fbSgpCisgICAgICB7CisJZm9yICg7IF9fYmJlZ2luICE9IF9fYmVuZDsgKytfX2JiZWdpbiwgKytfX3diZWdpbikKKwkgIHsKKwkgICAgX01faW50LnB1c2hfYmFjaygqX19iYmVnaW4pOworCSAgICBfTV9kZW4ucHVzaF9iYWNrKCpfX3diZWdpbik7CisJICB9CisKKwlfTV9pbml0aWFsaXplKCk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorICAgICAgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgICBwYXJhbV90eXBlKGluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX2JsLCBfRnVuYyBfX2Z3KQorICAgICAgOiBfTV9pbnQoKSwgX01fZGVuKCksIF9NX2NwKCksIF9NX20oKQorICAgICAgeworCV9NX2ludC5yZXNlcnZlKF9fYmwuc2l6ZSgpKTsKKwlfTV9kZW4ucmVzZXJ2ZShfX2JsLnNpemUoKSk7CisJZm9yIChhdXRvIF9fYml0ZXIgPSBfX2JsLmJlZ2luKCk7IF9fYml0ZXIgIT0gX19ibC5lbmQoKTsgKytfX2JpdGVyKQorCSAgeworCSAgICBfTV9pbnQucHVzaF9iYWNrKCpfX2JpdGVyKTsKKwkgICAgX01fZGVuLnB1c2hfYmFjayhfX2Z3KCpfX2JpdGVyKSk7CisJICB9CisKKwlfTV9pbml0aWFsaXplKCk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jPgorICAgICAgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgICBwYXJhbV90eXBlKHNpemVfdCBfX253LCBfUmVhbFR5cGUgX194bWluLCBfUmVhbFR5cGUgX194bWF4LCBfRnVuYyBfX2Z3KQorICAgICAgOiBfTV9pbnQoKSwgX01fZGVuKCksIF9NX2NwKCksIF9NX20oKQorICAgICAgeworCWNvbnN0IHNpemVfdCBfX24gPSBfX253ID09IDAgPyAxIDogX19udzsKKwljb25zdCBfUmVhbFR5cGUgX19kZWx0YSA9IChfX3htYXggLSBfX3htaW4pIC8gX19uOworCisJX01faW50LnJlc2VydmUoX19uICsgMSk7CisJX01fZGVuLnJlc2VydmUoX19uICsgMSk7CisJZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IF9fbnc7ICsrX19rKQorCSAgeworCSAgICBfTV9pbnQucHVzaF9iYWNrKF9feG1pbiArIF9fayAqIF9fZGVsdGEpOworCSAgICBfTV9kZW4ucHVzaF9iYWNrKF9fZncoX01faW50W19fa10gKyBfX2RlbHRhKSk7CisJICB9CisKKwlfTV9pbml0aWFsaXplKCk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIHBpZWNld2lzZV9saW5lYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2RldGFpbDo6X0FkYXB0b3I8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGRvdWJsZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCWNvbnN0IGRvdWJsZSBfX3AgPSBfX2F1cm5nKCk7CisJaWYgKF9fcGFyYW0uX01fY3AuZW1wdHkoKSkKKwkgIHJldHVybiBfX3A7CisKKwlhdXRvIF9fcG9zID0gc3RkOjpsb3dlcl9ib3VuZChfX3BhcmFtLl9NX2NwLmJlZ2luKCksCisJCQkJICAgICAgX19wYXJhbS5fTV9jcC5lbmQoKSwgX19wKTsKKwljb25zdCBzaXplX3QgX19pID0gX19wb3MgLSBfX3BhcmFtLl9NX2NwLmJlZ2luKCk7CisKKwljb25zdCBkb3VibGUgX19wcmVmID0gX19pID4gMCA/IF9fcGFyYW0uX01fY3BbX19pIC0gMV0gOiAwLjA7CisKKwljb25zdCBkb3VibGUgX19hID0gMC41ICogX19wYXJhbS5fTV9tW19faV07CisJY29uc3QgZG91YmxlIF9fYiA9IF9fcGFyYW0uX01fZGVuW19faV07CisJY29uc3QgZG91YmxlIF9fY20gPSBfX3AgLSBfX3ByZWY7CisKKwlfUmVhbFR5cGUgX194ID0gX19wYXJhbS5fTV9pbnRbX19pXTsKKwlpZiAoX19hID09IDApCisJICBfX3ggKz0gX19jbSAvIF9fYjsKKwllbHNlCisJICB7CisJICAgIGNvbnN0IGRvdWJsZSBfX2QgPSBfX2IgKiBfX2IgKyA0LjAgKiBfX2EgKiBfX2NtOworCSAgICBfX3ggKz0gMC41ICogKHN0ZDo6c3FydChfX2QpIC0gX19iKSAvIF9fYTsKKyAgICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIF9feDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKwkvLyBXZSBjb3VsZCBkdXBsaWNhdGUgZXZlcnl0aGluZyBmcm9tIG9wZXJhdG9yKCkuLi4KKwl3aGlsZSAoX19mICE9IF9fdCkKKwkgICpfX2YrKyA9IHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCBfX3BhcmFtKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIHN0ZDo6dmVjdG9yPF9SZWFsVHlwZT4gX19pbnQgPSBfX3guaW50ZXJ2YWxzKCk7CisgICAgICBfX29zIDw8IF9faW50LnNpemUoKSAtIDE7CisKKyAgICAgIGZvciAoYXV0byBfX3hpdCA9IF9faW50LmJlZ2luKCk7IF9feGl0ICE9IF9faW50LmVuZCgpOyArK19feGl0KQorCV9fb3MgPDwgX19zcGFjZSA8PCAqX194aXQ7CisKKyAgICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4gX19kZW4gPSBfX3guZGVuc2l0aWVzKCk7CisgICAgICBmb3IgKGF1dG8gX19kaXQgPSBfX2Rlbi5iZWdpbigpOyBfX2RpdCAhPSBfX2Rlbi5lbmQoKTsgKytfX2RpdCkKKwlfX29zIDw8IF9fc3BhY2UgPDwgKl9fZGl0OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgcGllY2V3aXNlX2xpbmVhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgc2l6ZV90IF9fbjsKKyAgICAgIF9faXMgPj4gX19uOworCisgICAgICBzdGQ6OnZlY3RvcjxfUmVhbFR5cGU+IF9faW50X3ZlYzsKKyAgICAgIF9faW50X3ZlYy5yZXNlcnZlKF9fbiArIDEpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IF9fbjsgKytfX2kpCisJeworCSAgX1JlYWxUeXBlIF9faW50OworCSAgX19pcyA+PiBfX2ludDsKKwkgIF9faW50X3ZlYy5wdXNoX2JhY2soX19pbnQpOworCX0KKworICAgICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiBfX2Rlbl92ZWM7CisgICAgICBfX2Rlbl92ZWMucmVzZXJ2ZShfX24gKyAxKTsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8PSBfX247ICsrX19pKQorCXsKKwkgIGRvdWJsZSBfX2RlbjsKKwkgIF9faXMgPj4gX19kZW47CisJICBfX2Rlbl92ZWMucHVzaF9iYWNrKF9fZGVuKTsKKwl9CisKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBwaWVjZXdpc2VfbGluZWFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkgIHBhcmFtX3R5cGUoX19pbnRfdmVjLmJlZ2luKCksIF9faW50X3ZlYy5lbmQoKSwgX19kZW5fdmVjLmJlZ2luKCkpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHNlZWRfc2VxOjpzZWVkX3NlcShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0ludFR5cGU+IF9faWwpCisgICAgeworICAgICAgZm9yIChhdXRvIF9faXRlciA9IF9faWwuYmVnaW4oKTsgX19pdGVyICE9IF9faWwuZW5kKCk7ICsrX19pdGVyKQorCV9NX3YucHVzaF9iYWNrKF9fZGV0YWlsOjpfX21vZDxyZXN1bHRfdHlwZSwKKwkJICAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8cmVzdWx0X3R5cGUsIDMyPjo6X192YWx1ZT4oKl9faXRlcikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBzZWVkX3NlcTo6c2VlZF9zZXEoX0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRlcmF0b3IgX19lbmQpCisgICAgeworICAgICAgZm9yIChfSW5wdXRJdGVyYXRvciBfX2l0ZXIgPSBfX2JlZ2luOyBfX2l0ZXIgIT0gX19lbmQ7ICsrX19pdGVyKQorCV9NX3YucHVzaF9iYWNrKF9fZGV0YWlsOjpfX21vZDxyZXN1bHRfdHlwZSwKKwkJICAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8cmVzdWx0X3R5cGUsIDMyPjo6X192YWx1ZT4oKl9faXRlcikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgdm9pZAorICAgIHNlZWRfc2VxOjpnZW5lcmF0ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19iZWdpbiwKKwkJICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2VuZCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisgICAgICAgIF9UeXBlOworCisgICAgICBpZiAoX19iZWdpbiA9PSBfX2VuZCkKKwlyZXR1cm47CisKKyAgICAgIHN0ZDo6ZmlsbChfX2JlZ2luLCBfX2VuZCwgX1R5cGUoMHg4YjhiOGI4YnUpKTsKKworICAgICAgY29uc3Qgc2l6ZV90IF9fbiA9IF9fZW5kIC0gX19iZWdpbjsKKyAgICAgIGNvbnN0IHNpemVfdCBfX3MgPSBfTV92LnNpemUoKTsKKyAgICAgIGNvbnN0IHNpemVfdCBfX3QgPSAoX19uID49IDYyMykgPyAxMQorCQkgICAgICAgOiAoX19uID49ICA2OCkgPyA3CisJCSAgICAgICA6IChfX24gPj0gIDM5KSA/IDUKKwkJICAgICAgIDogKF9fbiA+PSAgIDcpID8gMworCQkgICAgICAgOiAoX19uIC0gMSkgLyAyOworICAgICAgY29uc3Qgc2l6ZV90IF9fcCA9IChfX24gLSBfX3QpIC8gMjsKKyAgICAgIGNvbnN0IHNpemVfdCBfX3EgPSBfX3AgKyBfX3Q7CisgICAgICBjb25zdCBzaXplX3QgX19tID0gc3RkOjptYXgoc2l6ZV90KF9fcyArIDEpLCBfX24pOworCisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX207ICsrX19rKQorCXsKKwkgIF9UeXBlIF9fYXJnID0gKF9fYmVnaW5bX19rICUgX19uXQorCQkJIF4gX19iZWdpblsoX19rICsgX19wKSAlIF9fbl0KKwkJCSBeIF9fYmVnaW5bKF9fayAtIDEpICUgX19uXSk7CisJICBfVHlwZSBfX3IxID0gX19hcmcgXiAoX19hcmcgPj4gMjcpOworCSAgX19yMSA9IF9fZGV0YWlsOjpfX21vZDxfVHlwZSwKKwkJICAgIF9fZGV0YWlsOjpfU2hpZnQ8X1R5cGUsIDMyPjo6X192YWx1ZT4oMTY2NDUyNXUgKiBfX3IxKTsKKwkgIF9UeXBlIF9fcjIgPSBfX3IxOworCSAgaWYgKF9fayA9PSAwKQorCSAgICBfX3IyICs9IF9fczsKKwkgIGVsc2UgaWYgKF9fayA8PSBfX3MpCisJICAgIF9fcjIgKz0gX19rICUgX19uICsgX01fdltfX2sgLSAxXTsKKwkgIGVsc2UKKwkgICAgX19yMiArPSBfX2sgJSBfX247CisJICBfX3IyID0gX19kZXRhaWw6Ol9fbW9kPF9UeXBlLAorCSAgICAgICAgICAgX19kZXRhaWw6Ol9TaGlmdDxfVHlwZSwgMzI+OjpfX3ZhbHVlPihfX3IyKTsKKwkgIF9fYmVnaW5bKF9fayArIF9fcCkgJSBfX25dICs9IF9fcjE7CisJICBfX2JlZ2luWyhfX2sgKyBfX3EpICUgX19uXSArPSBfX3IyOworCSAgX19iZWdpbltfX2sgJSBfX25dID0gX19yMjsKKwl9CisKKyAgICAgIGZvciAoc2l6ZV90IF9fayA9IF9fbTsgX19rIDwgX19tICsgX19uOyArK19faykKKwl7CisJICBfVHlwZSBfX2FyZyA9IChfX2JlZ2luW19fayAlIF9fbl0KKwkJCSArIF9fYmVnaW5bKF9fayArIF9fcCkgJSBfX25dCisJCQkgKyBfX2JlZ2luWyhfX2sgLSAxKSAlIF9fbl0pOworCSAgX1R5cGUgX19yMyA9IF9fYXJnIF4gKF9fYXJnID4+IDI3KTsKKwkgIF9fcjMgPSBfX2RldGFpbDo6X19tb2Q8X1R5cGUsCisJCSAgIF9fZGV0YWlsOjpfU2hpZnQ8X1R5cGUsIDMyPjo6X192YWx1ZT4oMTU2NjA4Mzk0MXUgKiBfX3IzKTsKKwkgIF9UeXBlIF9fcjQgPSBfX3IzIC0gX19rICUgX19uOworCSAgX19yNCA9IF9fZGV0YWlsOjpfX21vZDxfVHlwZSwKKwkgICAgICAgICAgIF9fZGV0YWlsOjpfU2hpZnQ8X1R5cGUsIDMyPjo6X192YWx1ZT4oX19yNCk7CisJICBfX2JlZ2luWyhfX2sgKyBfX3ApICUgX19uXSBePSBfX3IzOworCSAgX19iZWdpblsoX19rICsgX19xKSAlIF9fbl0gXj0gX19yNDsKKwkgIF9fYmVnaW5bX19rICUgX19uXSA9IF9fcjQ7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHNpemVfdCBfX2JpdHMsCisJICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgX1JlYWxUeXBlCisgICAgZ2VuZXJhdGVfY2Fub25pY2FsKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90IF9fYgorCT0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46OmRpZ2l0cyksCisgICAgICAgICAgICAgICAgICAgX19iaXRzKTsKKyAgICAgIGNvbnN0IGxvbmcgZG91YmxlIF9fciA9IHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPihfX3VybmcubWF4KCkpCisJCQkgICAgLSBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oX191cm5nLm1pbigpKSArIDEuMEw7CisgICAgICBjb25zdCBzaXplX3QgX19sb2cyciA9IHN0ZDo6bG9nKF9fcikgLyBzdGQ6OmxvZygyLjBMKTsKKyAgICAgIHNpemVfdCBfX2sgPSBzdGQ6Om1heDxzaXplX3Q+KDFVTCwgKF9fYiArIF9fbG9nMnIgLSAxVUwpIC8gX19sb2cycik7CisgICAgICBfUmVhbFR5cGUgX19zdW0gPSBfUmVhbFR5cGUoMCk7CisgICAgICBfUmVhbFR5cGUgX190bXAgPSBfUmVhbFR5cGUoMSk7CisgICAgICBmb3IgKDsgX19rICE9IDA7IC0tX19rKQorCXsKKwkgIF9fc3VtICs9IF9SZWFsVHlwZShfX3VybmcoKSAtIF9fdXJuZy5taW4oKSkgKiBfX3RtcDsKKwkgIF9fdG1wICo9IF9fcjsKKwl9CisgICAgICByZXR1cm4gX19zdW0gLyBfX3RtcDsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmFuZ2VfYWNjZXNzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmFuZ2VfYWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNzk1OAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yYW5nZV9hY2Nlc3MuaApAQCAtMCwwICsxLDEwNSBAQAorLy8gPHJhbmdlX2FjY2Vzcy5oPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9yYW5nZV9hY2Nlc3MuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2l0ZXJhdG9yfQorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUkFOR0VfQUNDRVNTX0gKKyNkZWZpbmUgX0dMSUJDWFhfUkFOR0VfQUNDRVNTX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mCisgICAqICAgICAgICAgIHRoZSBjb250YWluZXIuCisgICAqICBAcGFyYW0gIF9fY29udCAgQ29udGFpbmVyLgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYXV0bworICAgIGJlZ2luKF9Db250YWluZXImIF9fY29udCkgLT4gZGVjbHR5cGUoX19jb250LmJlZ2luKCkpCisgICAgeyByZXR1cm4gX19jb250LmJlZ2luKCk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mCisgICAqICAgICAgICAgIHRoZSBjb25zdCBjb250YWluZXIuCisgICAqICBAcGFyYW0gIF9fY29udCAgQ29udGFpbmVyLgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYXV0bworICAgIGJlZ2luKGNvbnN0IF9Db250YWluZXImIF9fY29udCkgLT4gZGVjbHR5cGUoX19jb250LmJlZ2luKCkpCisgICAgeyByZXR1cm4gX19jb250LmJlZ2luKCk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgb2YKKyAgICogICAgICAgICAgdGhlIGNvbnRhaW5lci4KKyAgICogIEBwYXJhbSAgX19jb250ICBDb250YWluZXIuCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfQ29udGFpbmVyPgorICAgIGlubGluZSBhdXRvCisgICAgZW5kKF9Db250YWluZXImIF9fY29udCkgLT4gZGVjbHR5cGUoX19jb250LmVuZCgpKQorICAgIHsgcmV0dXJuIF9fY29udC5lbmQoKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCBvZgorICAgKiAgICAgICAgICB0aGUgY29uc3QgY29udGFpbmVyLgorICAgKiAgQHBhcmFtICBfX2NvbnQgIENvbnRhaW5lci4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9Db250YWluZXI+CisgICAgaW5saW5lIGF1dG8KKyAgICBlbmQoY29uc3QgX0NvbnRhaW5lciYgX19jb250KSAtPiBkZWNsdHlwZShfX2NvbnQuZW5kKCkpCisgICAgeyByZXR1cm4gX19jb250LmVuZCgpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBhbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkuCisgICAqICBAcGFyYW0gIF9fYXJyICBBcnJheS4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9UcCwgc2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgX1RwKgorICAgIGJlZ2luKF9UcCAoJl9fYXJyKVtfTm1dKQorICAgIHsgcmV0dXJuIF9fYXJyOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBhbiBpdGVyYXRvciBwb2ludGluZyB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CisgICAqICAgICAgICAgIG9mIHRoZSBhcnJheS4KKyAgICogIEBwYXJhbSAgX19hcnIgIEFycmF5LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1RwLCBzaXplX3QgX05tPgorICAgIGlubGluZSBfVHAqCisgICAgZW5kKF9UcCAoJl9fYXJyKVtfTm1dKQorICAgIHsgcmV0dXJuIF9fYXJyICsgX05tOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9SQU5HRV9BQ0NFU1NfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDE5MjVhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4LmgKQEAgLTAsMCArMSwyNDg1IEBACisvLyBjbGFzcyB0ZW1wbGF0ZSByZWdleCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqICBAZmlsZSBiaXRzL3JlZ2V4LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtyZWdleH0KKyAqLworCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHJlZ2V4CisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgQ2xhc3MgcmVnZXhfdHJhaXRzLiBEZXNjcmliZXMgYXNwZWN0cyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICoKKyAgICogQSByZWd1bGFyIGV4cHJlc3Npb24gdHJhaXRzIGNsYXNzIHRoYXQgc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudHMgb2YgCisgICAqIHNlY3Rpb24gWzI4LjddLgorICAgKgorICAgKiBUaGUgY2xhc3MgJXJlZ2V4IGlzIHBhcmFtZXRlcml6ZWQgYXJvdW5kIGEgc2V0IG9mIHJlbGF0ZWQgdHlwZXMgYW5kCisgICAqIGZ1bmN0aW9ucyB1c2VkIHRvIGNvbXBsZXRlIHRoZSBkZWZpbml0aW9uIG9mIGl0cyBzZW1hbnRpY3MuICBUaGlzIGNsYXNzCisgICAqIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHN1Y2ggYSB0cmFpdHMgY2xhc3MuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZT4KKyAgICBzdHJ1Y3QgcmVnZXhfdHJhaXRzCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NoX3R5cGUgICAgICAgICAgICAgICAgICAgICAJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyX3R5cGU+IAlzdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpsb2NhbGUgICAgICAgICAgICAgICAgICAJbG9jYWxlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6Y3R5cGVfYmFzZTo6bWFzayAgICAgICAgCWNoYXJfY2xhc3NfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBkZWZhdWx0IHRyYWl0cyBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X3RyYWl0cygpIHsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHaXZlcyB0aGUgbGVuZ3RoIG9mIGEgQy1zdHlsZSBzdHJpbmcgc3RhcnRpbmcgYXQgQHAgX19wLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3AgYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmV0d2VlbiBAcCAqX19wIGFuZCB0aGUgZmlyc3QKKyAgICAgICAqIGRlZmF1bHQtaW5pdGlhbGl6ZWQgdmFsdWUgb2YgdHlwZSBAcCBjaGFyX3R5cGUuICBJbiBvdGhlciB3b3JkcywgdXNlcworICAgICAgICogdGhlIEMtc3RyaW5nIGFsZ29yaXRobSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIG9mCisgICAgICAgKiBjaGFyYWN0ZXJzLgorICAgICAgICovCisgICAgICBzdGF0aWMgc3RkOjpzaXplX3QKKyAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcCkKKyAgICAgIHsgcmV0dXJuIHN0cmluZ190eXBlOjp0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUGVyZm9ybXMgdGhlIGlkZW50aXR5IHRyYW5zbGF0aW9uLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2MgQSBjaGFyYWN0ZXIgdG8gdGhlIGxvY2FsZS1zcGVjaWZpYyBjaGFyYWN0ZXIgc2V0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIF9fYy4KKyAgICAgICAqLworICAgICAgY2hhcl90eXBlCisgICAgICB0cmFuc2xhdGUoY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fYzsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBUcmFuc2xhdGVzIGEgY2hhcmFjdGVyIGludG8gYSBjYXNlLWluc2Vuc2l0aXZlIGVxdWl2YWxlbnQuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fYyBBIGNoYXJhY3RlciB0byB0aGUgbG9jYWxlLXNwZWNpZmljIGNoYXJhY3RlciBzZXQuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdGhlIGxvY2FsZS1zcGVjaWZpYyBsb3dlci1jYXNlIGVxdWl2YWxlbnQgb2YgX19jLgorICAgICAgICogQHRocm93cyBzdGQ6OmJhZF9jYXN0IGlmIHRoZSBpbWJ1ZWQgbG9jYWxlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN0eXBlCisgICAgICAgKiAgICAgICAgIGZhY2V0LgorICAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHRyYW5zbGF0ZV9ub2Nhc2UoY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsgCisJdHlwZWRlZiBzdGQ6OmN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOworCWNvbnN0IF9fY3R5cGVfdHlwZSYgX19mY3R5cCh1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfTV9sb2NhbGUpKTsKKwlyZXR1cm4gX19mY3R5cC50b2xvd2VyKF9fYyk7IAorICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgc29ydCBrZXkgZm9yIGEgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2ZpcnN0IGJlZ2lubmluZyBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICogQHBhcmFtIF9fbGFzdCAgb25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIFJldHVybnMgYSBzb3J0IGtleSBmb3IgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBkZXNpZ25hdGVkIGJ5IHRoZQorICAgICAgICogaXRlcmF0b3IgcmFuZ2UgW0YxLCBGMikgc3VjaCB0aGF0IGlmIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgW0cxLCBHMikKKyAgICAgICAqIHNvcnRzIGJlZm9yZSB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIFtIMSwgSDIpIHRoZW4KKyAgICAgICAqIHYudHJhbnNmb3JtKEcxLCBHMikgPCB2LnRyYW5zZm9ybShIMSwgSDIpLgorICAgICAgICoKKyAgICAgICAqIFdoYXQgdGhpcyByZWFsbHkgZG9lcyBpcyBwcm92aWRlIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGNvbXBhcmUgYQorICAgICAgICogc3RyaW5nIHRvIG11bHRpcGxlIG90aGVyIHN0cmluZ3MgaW4gbG9jYWxlcyB3aXRoIGZhbmN5IGNvbGxhdGlvbgorICAgICAgICogcnVsZXMgYW5kIGVxdWl2YWxlbmNlIGNsYXNzZXMuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgYSBsb2NhbGUtc3BlY2lmaWMgc29ydCBrZXkgZXF1aXZhbGVudCB0byB0aGUgaW5wdXQgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogQHRocm93cyBzdGQ6OmJhZF9jYXN0IGlmIHRoZSBjdXJyZW50IGxvY2FsZSBkb2VzIG5vdCBoYXZlIGEgY29sbGF0ZQorICAgICAgICogICAgICAgICBmYWNldC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z3ZF9pdGVyPgorICAgICAgICBzdHJpbmdfdHlwZQorICAgICAgICB0cmFuc2Zvcm0oX0Z3ZF9pdGVyIF9fZmlyc3QsIF9Gd2RfaXRlciBfX2xhc3QpIGNvbnN0CisgICAgICAgIHsKKwkgIHR5cGVkZWYgc3RkOjpjb2xsYXRlPGNoYXJfdHlwZT4gX19jb2xsYXRlX3R5cGU7CisJICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19mY2x0KHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oX01fbG9jYWxlKSk7CisJICBzdHJpbmdfdHlwZSBfX3MoX19maXJzdCwgX19sYXN0KTsKKwkgIHJldHVybiBfX2ZjbHQudHJhbnNmb3JtKF9fcy5kYXRhKCksIF9fcy5kYXRhKCkgKyBfX3Muc2l6ZSgpKTsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgYSBzb3J0IGtleSBmb3IgYSBjaGFyYWN0ZXIgc2VxdWVuY2UsIGluZGVwZW5kZW50IG9mIGNhc2UuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fZmlyc3QgYmVnaW5uaW5nIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAgKiBAcGFyYW0gX19sYXN0ICBvbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogRWZmZWN0czogaWYgdHlwZWlkKHVzZV9mYWNldDxjb2xsYXRlPF9DaF90eXBlPiA+KSA9PQorICAgICAgICogdHlwZWlkKGNvbGxhdGVfYnluYW1lPF9DaF90eXBlPikgYW5kIHRoZSBmb3JtIG9mIHRoZSBzb3J0IGtleQorICAgICAgICogcmV0dXJuZWQgYnkgY29sbGF0ZV9ieW5hbWU8X0NoX3R5cGU+Ojp0cmFuc2Zvcm0oX19maXJzdCwgX19sYXN0KSAKKyAgICAgICAqIGlzIGtub3duIGFuZCBjYW4gYmUgY29udmVydGVkIGludG8gYSBwcmltYXJ5IHNvcnQga2V5CisgICAgICAgKiB0aGVuIHJldHVybnMgdGhhdCBrZXksIG90aGVyd2lzZSByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z3ZF9pdGVyPgorICAgICAgICBzdHJpbmdfdHlwZQorICAgICAgICB0cmFuc2Zvcm1fcHJpbWFyeShfRndkX2l0ZXIgX19maXJzdCwgX0Z3ZF9pdGVyIF9fbGFzdCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gc3RyaW5nX3R5cGUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgY29sbGF0aW9uIGVsZW1lbnQgYnkgbmFtZS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19maXJzdCBiZWdpbm5pbmcgb2YgdGhlIGNvbGxhdGlvbiBlbGVtZW50IG5hbWUuCisgICAgICAgKiBAcGFyYW0gX19sYXN0ICBvbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBjb2xsYXRpb24gZWxlbWVudCBuYW1lLgorICAgICAgICogCisgICAgICAgKiBAcmV0dXJucyBhIHNlcXVlbmNlIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgdGhhdCByZXByZXNlbnRzIHRoZQorICAgICAgICogY29sbGF0aW5nIGVsZW1lbnQgY29uc2lzdGluZyBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGRlc2lnbmF0ZWQgYnkKKyAgICAgICAqIHRoZSBpdGVyYXRvciByYW5nZSBbX19maXJzdCwgX19sYXN0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlCisgICAgICAgKiBjaGFyYWN0ZXIgc2VxdWVuY2UgaXMgbm90IGEgdmFsaWQgY29sbGF0aW5nIGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RfaXRlcj4KKyAgICAgICAgc3RyaW5nX3R5cGUKKyAgICAgICAgbG9va3VwX2NvbGxhdGVuYW1lKF9Gd2RfaXRlciBfX2ZpcnN0LCBfRndkX2l0ZXIgX19sYXN0KSBjb25zdAorICAgICAgICB7IHJldHVybiBzdHJpbmdfdHlwZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIE1hcHMgb25lIG9yIG1vcmUgY2hhcmFjdGVycyB0byBhIG5hbWVkIGNoYXJhY3RlcgorICAgICAgICogICAgICAgIGNsYXNzaWZpY2F0aW9uLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2ZpcnN0IGJlZ2lubmluZyBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICogQHBhcmFtIF9fbGFzdCAgb25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICogQHBhcmFtIF9faWNhc2UgaWdub3JlcyB0aGUgY2FzZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gbmFtZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBhbiB1bnNwZWNpZmllZCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlcgorICAgICAgICogY2xhc3NpZmljYXRpb24gbmFtZWQgYnkgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBkZXNpZ25hdGVkIGJ5CisgICAgICAgKiB0aGUgaXRlcmF0b3IgcmFuZ2UgW19fZmlyc3QsIF9fbGFzdCkuIElmIEBwIGljYXNlIGlzIHRydWUsCisgICAgICAgKiB0aGUgcmV0dXJuZWQgbWFzayBpZGVudGlmaWVzIHRoZSBjbGFzc2lmaWNhdGlvbiByZWdhcmRsZXNzIG9mCisgICAgICAgKiB0aGUgY2FzZSBvZiB0aGUgY2hhcmFjdGVycyB0byBiZSBtYXRjaGVkIChmb3IgZXhhbXBsZSwKKyAgICAgICAqIFtbOmxvd2VyOl1dIGlzIHRoZSBzYW1lIGFzIFtbOmFscGhhOl1dKSwgb3RoZXJ3aXNlIGEKKyAgICAgICAqIGNhc2UtZGVwZW5kZW50IGNsYXNzaWZpY2F0aW9uIGlzIHJldHVybmVkLiAgVGhlIHZhbHVlCisgICAgICAgKiByZXR1cm5lZCBzaGFsbCBiZSBpbmRlcGVuZGVudCBvZiB0aGUgY2FzZSBvZiB0aGUgY2hhcmFjdGVycworICAgICAgICogaW4gdGhlIGNoYXJhY3RlciBzZXF1ZW5jZS4gSWYgdGhlIG5hbWUgaXMgbm90IHJlY29nbml6ZWQgdGhlbgorICAgICAgICogcmV0dXJucyBhIHZhbHVlIHRoYXQgY29tcGFyZXMgZXF1YWwgdG8gMC4KKyAgICAgICAqCisgICAgICAgKiBBdCBsZWFzdCB0aGUgZm9sbG93aW5nIG5hbWVzIChvciB0aGVpciB3aWRlLWNoYXJhY3RlciBlcXVpdmFsZW50KSBhcmUKKyAgICAgICAqIHN1cHBvcnRlZC4KKyAgICAgICAqIC0gZAorICAgICAgICogLSB3CisgICAgICAgKiAtIHMKKyAgICAgICAqIC0gYWxudW0KKyAgICAgICAqIC0gYWxwaGEKKyAgICAgICAqIC0gYmxhbmsKKyAgICAgICAqIC0gY250cmwKKyAgICAgICAqIC0gZGlnaXQKKyAgICAgICAqIC0gZ3JhcGgKKyAgICAgICAqIC0gbG93ZXIKKyAgICAgICAqIC0gcHJpbnQKKyAgICAgICAqIC0gcHVuY3QKKyAgICAgICAqIC0gc3BhY2UKKyAgICAgICAqIC0gdXBwZXIKKyAgICAgICAqIC0geGRpZ2l0CisgICAgICAgKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RfaXRlcj4KKyAgICAgICAgY2hhcl9jbGFzc190eXBlCisgICAgICAgIGxvb2t1cF9jbGFzc25hbWUoX0Z3ZF9pdGVyIF9fZmlyc3QsIF9Gd2RfaXRlciBfX2xhc3QsCisJICAgICAgICAgICAgICAgICBib29sIF9faWNhc2UgPSBmYWxzZSkgY29uc3QKKwl7IHJldHVybiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIERldGVybWluZXMgaWYgQHAgYyBpcyBhIG1lbWJlciBvZiBhbiBpZGVudGlmaWVkIGNsYXNzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2MgYSBjaGFyYWN0ZXIuCisgICAgICAgKiBAcGFyYW0gX19mIGEgY2xhc3MgdHlwZSAoYXMgcmV0dXJuZWQgZnJvbSBsb29rdXBfY2xhc3NuYW1lKS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgQHAgX19jIGlzIGEgbWVtYmVyIG9mIHRoZSBjbGFzc2lmaWNhdGlvbgorICAgICAgICogcmVwcmVzZW50ZWQgYnkgQHAgX19mLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKgorICAgICAgICogQHRocm93cyBzdGQ6OmJhZF9jYXN0IGlmIHRoZSBjdXJyZW50IGxvY2FsZSBkb2VzIG5vdCBoYXZlIGEgY3R5cGUKKyAgICAgICAqICAgICAgICAgZmFjZXQuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGlzY3R5cGUoX0NoX3R5cGUgX19jLCBjaGFyX2NsYXNzX3R5cGUgX19mKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29udmVydHMgYSBkaWdpdCB0byBhbiBpbnQuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fY2ggICAgYSBjaGFyYWN0ZXIgcmVwcmVzZW50aW5nIGEgZGlnaXQuCisgICAgICAgKiBAcGFyYW0gX19yYWRpeCB0aGUgcmFkaXggaWYgdGhlIG51bWVyaWMgY29udmVyc2lvbiAobGltaXRlZCB0byA4LCAxMCwKKyAgICAgICAqICAgICAgICAgICAgICBvciAxNikuCisgICAgICAgKiAKKyAgICAgICAqIEByZXR1cm5zIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgZGlnaXQgX19jaCBpbiBiYXNlIHJhZGl4IGlmIHRoZQorICAgICAgICogY2hhcmFjdGVyIF9fY2ggaXMgYSB2YWxpZCBkaWdpdCBpbiBiYXNlIHJhZGl4OyBvdGhlcndpc2UgcmV0dXJucyAtMS4KKyAgICAgICAqLworICAgICAgaW50CisgICAgICB2YWx1ZShfQ2hfdHlwZSBfX2NoLCBpbnQgX19yYWRpeCkgY29uc3Q7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEltYnVlcyB0aGUgcmVnZXhfdHJhaXRzIG9iamVjdCB3aXRoIGEgY29weSBvZiBhIG5ldyBsb2NhbGUuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbG9jIEEgbG9jYWxlLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIGEgY29weSBvZiB0aGUgcHJldmlvdXMgbG9jYWxlIGluIHVzZSBieSB0aGUgcmVnZXhfdHJhaXRzCisgICAgICAgKiAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQG5vdGUgQ2FsbGluZyBpbWJ1ZSB3aXRoIGEgZGlmZmVyZW50IGxvY2FsZSB0aGFuIHRoZSBvbmUgY3VycmVudGx5IGluCisgICAgICAgKiAgICAgICB1c2UgaW52YWxpZGF0ZXMgYWxsIGNhY2hlZCBkYXRhIGhlbGQgYnkgKnRoaXMuCisgICAgICAgKi8KKyAgICAgIGxvY2FsZV90eXBlCisgICAgICBpbWJ1ZShsb2NhbGVfdHlwZSBfX2xvYykKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fbG9jYWxlLCBfX2xvYyk7CisJcmV0dXJuIF9fbG9jOworICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgY29weSBvZiB0aGUgY3VycmVudCBsb2NhbGUgaW4gdXNlIGJ5IHRoZSByZWdleF90cmFpdHMKKyAgICAgICAqIG9iamVjdC4KKyAgICAgICAqLworICAgICAgbG9jYWxlX3R5cGUKKyAgICAgIGdldGxvYygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9sb2NhbGU7IH0KKyAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgIGxvY2FsZV90eXBlIF9NX2xvY2FsZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlPgorICAgIGJvb2wKKyAgICByZWdleF90cmFpdHM8X0NoX3R5cGU+OjoKKyAgICBpc2N0eXBlKF9DaF90eXBlIF9fYywgY2hhcl9jbGFzc190eXBlIF9fZikgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6Y3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CisgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fZmN0eXAodXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX01fbG9jYWxlKSk7CisgICAgICAKKyAgICAgIGlmIChfX2ZjdHlwLmlzKF9fZiwgX19jKSkKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIAorICAgICAgLy8gc3BlY2lhbCBjYXNlIG9mIHVuZGVyc2NvcmUgaW4gW1s6dzpdXQorICAgICAgaWYgKF9fYyA9PSBfX2ZjdHlwLndpZGVuKCdfJykpCisJeworCSAgY29uc3QgY2hhciBfX3diW10gPSAidyI7CisJICBjaGFyX2NsYXNzX3R5cGUgX193dCA9IHRoaXMtPmxvb2t1cF9jbGFzc25hbWUoX193YiwKKwkJCQkJCQlfX3diICsgc2l6ZW9mKF9fd2IpKTsKKwkgIGlmIChfX2YgfCBfX3d0KQorCSAgICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgCisgICAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgW1s6c3BhY2U6XV0gaW4gW1s6Ymxhbms6XV0KKyAgICAgIGlmIChfX2ZjdHlwLmlzKHN0ZDo6Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCisJeworCSAgY29uc3QgY2hhciBfX2JiW10gPSAiYmxhbmsiOworCSAgY2hhcl9jbGFzc190eXBlIF9fYnQgPSB0aGlzLT5sb29rdXBfY2xhc3NuYW1lKF9fYmIsCisJCQkJCQkJX19iYiArIHNpemVvZihfX2JiKSk7CisJICBpZiAoX19mIHwgX19idCkKKwkgICAgcmV0dXJuIHRydWU7CisJfQorICAgICAgCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlPgorICAgIGludAorICAgIHJlZ2V4X3RyYWl0czxfQ2hfdHlwZT46OgorICAgIHZhbHVlKF9DaF90eXBlIF9fY2gsIGludCBfX3JhZGl4KSBjb25zdAorICAgIHsKKyAgICAgIHN0ZDo6YmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyX3R5cGU+IF9faXMoc3RyaW5nX3R5cGUoMSwgX19jaCkpOworICAgICAgaW50IF9fdjsKKyAgICAgIGlmIChfX3JhZGl4ID09IDgpCisJX19pcyA+PiBzdGQ6Om9jdDsKKyAgICAgIGVsc2UgaWYgKF9fcmFkaXggPT0gMTYpCisJX19pcyA+PiBzdGQ6OmhleDsKKyAgICAgIF9faXMgPj4gX192OworICAgICAgcmV0dXJuIF9faXMuZmFpbCgpID8gLTEgOiBfX3Y7CisgICAgfQorCisgIC8vIFs3LjhdIENsYXNzIGJhc2ljX3JlZ2V4CisgIC8qKgorICAgKiBPYmplY3RzIG9mIHNwZWNpYWxpemF0aW9ucyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCByZWd1bGFyIGV4cHJlc3Npb25zCisgICAqIGNvbnN0cnVjdGVkIGZyb20gc2VxdWVuY2VzIG9mIGNoYXJhY3RlciB0eXBlIEBwIF9DaF90eXBlLgorICAgKgorICAgKiBTdG9yYWdlIGZvciB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgYXMKKyAgICogbmVjZXNzYXJ5IGJ5IHRoZSBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoaXMgY2xhc3MuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cyA9IHJlZ2V4X3RyYWl0czxfQ2hfdHlwZT4gPgorICAgIGNsYXNzIGJhc2ljX3JlZ2V4CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfUnhfdHJhaXRzICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0cmluZ190eXBlICAgc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIGZsYWdfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmxvY2FsZV90eXBlICAgbG9jYWxlX3R5cGU7CisKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgQ29uc3RhbnRzCisgICAgICAgKiBzdGQgWzI4LjguMV0oMSkKKyAgICAgICAqLworICAgICAgLy9AeworICAgICAgc3RhdGljIGNvbnN0ZXhwciBmbGFnX3R5cGUgaWNhc2UgPSByZWdleF9jb25zdGFudHM6OmljYXNlOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBmbGFnX3R5cGUgbm9zdWJzID0gcmVnZXhfY29uc3RhbnRzOjpub3N1YnM7CisgICAgICBzdGF0aWMgY29uc3RleHByIGZsYWdfdHlwZSBvcHRpbWl6ZSA9IHJlZ2V4X2NvbnN0YW50czo6b3B0aW1pemU7CisgICAgICBzdGF0aWMgY29uc3RleHByIGZsYWdfdHlwZSBjb2xsYXRlID0gcmVnZXhfY29uc3RhbnRzOjpjb2xsYXRlOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBmbGFnX3R5cGUgRUNNQVNjcmlwdCA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgZmxhZ190eXBlIGJhc2ljID0gcmVnZXhfY29uc3RhbnRzOjpiYXNpYzsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgZmxhZ190eXBlIGV4dGVuZGVkID0gcmVnZXhfY29uc3RhbnRzOjpleHRlbmRlZDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgZmxhZ190eXBlIGF3ayA9IHJlZ2V4X2NvbnN0YW50czo6YXdrOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBmbGFnX3R5cGUgZ3JlcCA9IHJlZ2V4X2NvbnN0YW50czo6Z3JlcDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgZmxhZ190eXBlIGVncmVwID0gcmVnZXhfY29uc3RhbnRzOjplZ3JlcDsKKyAgICAgIC8vQH0KKworICAgICAgLy8gWzcuOC4yXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnkKKyAgICAgICAqIGNoYXJhY3RlciBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgoKQorICAgICAgOiBfTV9mbGFncyhFQ01BU2NyaXB0KSwKKyAgICAgICAgX01fYXV0b21hdG9uKF9fZGV0YWlsOjpfX2NvbXBpbGU8Y29uc3QgX0NoX3R5cGUqLCBfUnhfdHJhaXRzPigwLCAwLAorICAgICAgICAgICAgICAgICAgICAgX01fdHJhaXRzLCBfTV9mbGFncykpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZQorICAgICAgICogc2VxdWVuY2UgW19fcCwgX19wICsgY2hhcl90cmFpdHM8X0NoX3R5cGU+OjpsZW5ndGgoX19wKSkKKyAgICAgICAqIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZmxhZ3MgaW4gQHAgX19mLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3AgQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZworICAgICAgICogICAgICAgICAgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqIEBwYXJhbSBfX2YgRmxhZ3MgaW5kaWNhdGluZyB0aGUgc3ludGF4IHJ1bGVzIGFuZCBvcHRpb25zLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgQHAgX19wIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX3JlZ2V4KGNvbnN0IF9DaF90eXBlKiBfX3AsIGZsYWdfdHlwZSBfX2YgPSBFQ01BU2NyaXB0KQorICAgICAgOiBfTV9mbGFncyhfX2YpLAorICAgICAgICBfTV9hdXRvbWF0b24oX19kZXRhaWw6Ol9fY29tcGlsZShfX3AsIF9fcCArIF9SeF90cmFpdHM6Omxlbmd0aChfX3ApLAorICAgICAgICAJCQkJX01fdHJhaXRzLCBfTV9mbGFncykpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSBzZXF1ZW5jZQorICAgICAgICogW3AsIHAgKyBsZW4pIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZmxhZ3MgaW4gQHAgZi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19wICAgQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhcgorICAgICAgICogICAgICAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gX19sZW4gVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlZ3VsYXIKKyAgICAgICAqICAgICAgICAgICAgICBleHByZXNzaW9uLgorICAgICAgICogQHBhcmFtIF9fZiAgIEZsYWdzIGluZGljYXRpbmcgdGhlIHN5bnRheCBydWxlcyBhbmQgb3B0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHJlZ2V4X2Vycm9yIGlmIEBwIF9fcCBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4KGNvbnN0IF9DaF90eXBlKiBfX3AsIHN0ZDo6c2l6ZV90IF9fbGVuLCBmbGFnX3R5cGUgX19mKQorICAgICAgOiBfTV9mbGFncyhfX2YpLAorICAgICAgICBfTV9hdXRvbWF0b24oX19kZXRhaWw6Ol9fY29tcGlsZShfX3AsIF9fcCArIF9fbGVuLCBfTV90cmFpdHMsIF9NX2ZsYWdzKSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5LWNvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcmhzIEEgQHAgcmVnZXggb2JqZWN0LgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleChjb25zdCBiYXNpY19yZWdleCYgX19yaHMpCisgICAgICA6IF9NX2ZsYWdzKF9fcmhzLl9NX2ZsYWdzKSwgX01fdHJhaXRzKF9fcmhzLl9NX3RyYWl0cyksCisgICAgICAgIF9NX2F1dG9tYXRvbihfX3Jocy5fTV9hdXRvbWF0b24pCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgTW92ZS1jb25zdHJ1Y3RzIGEgYmFzaWMgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3JocyBBIEBwIHJlZ2V4IG9iamVjdC4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgoY29uc3QgYmFzaWNfcmVnZXgmJiBfX3Jocykgbm9leGNlcHQKKyAgICAgIDogX01fZmxhZ3MoX19yaHMuX01fZmxhZ3MpLCBfTV90cmFpdHMoX19yaHMuX01fdHJhaXRzKSwKKyAgICAgICAgX01fYXV0b21hdG9uKHN0ZDo6bW92ZShfX3Jocy5fTV9hdXRvbWF0b24pKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgc3RyaW5nCisgICAgICAgKiBAcCBzIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZmxhZ3MgaW4gQHAgZi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19zIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gX19mIEZsYWdzIGluZGljYXRpbmcgdGhlIHN5bnRheCBydWxlcyBhbmQgb3B0aW9ucy4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHJlZ2V4X2Vycm9yIGlmIEBwIF9fcyBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgYmFzaWNfcmVnZXgoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8X0NoX3R5cGUsIF9DaF90cmFpdHMsIAorCQkJCQkgICAgX0NoX2FsbG9jPiYgX19zLAorCQkgICAgZmxhZ190eXBlIF9fZiA9IEVDTUFTY3JpcHQpCisJOiBfTV9mbGFncyhfX2YpLAorCSAgX01fYXV0b21hdG9uKF9fZGV0YWlsOjpfX2NvbXBpbGUoX19zLmJlZ2luKCksIF9fcy5lbmQoKSwKKwkgIAkJCQkgIF9NX3RyYWl0cywgX01fZmxhZ3MpKQorICAgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIHRoZSByYW5nZQorICAgICAgICogW2ZpcnN0LCBsYXN0KSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIGZsYWdzIGluIEBwIGYuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fZmlyc3QgVGhlIHN0YXJ0IG9mIGEgcmFuZ2UgY29udGFpbmluZyBhIHZhbGlkIHJlZ3VsYXIKKyAgICAgICAqICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gX19sYXN0ICBUaGUgZW5kIG9mIGEgcmFuZ2UgY29udGFpbmluZyBhIHZhbGlkIHJlZ3VsYXIKKyAgICAgICAqICAgICAgICAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gX19mICAgICBUaGUgZm9ybWF0IGZsYWdzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBAcCBbX19maXJzdCwgX19sYXN0KSBpcyBub3QgYSB2YWxpZCByZWd1bGFyCisgICAgICAgKiAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBiYXNpY19yZWdleChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIAorCQkgICAgZmxhZ190eXBlIF9fZiA9IEVDTUFTY3JpcHQpCisJOiBfTV9mbGFncyhfX2YpLAorCSAgX01fYXV0b21hdG9uKF9fZGV0YWlsOjpfX2NvbXBpbGUoX19maXJzdCwgX19sYXN0LCBfTV90cmFpdHMsIF9NX2ZsYWdzKSkKKyAgICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSBhbiBpbml0aWFsaXplciBsaXN0LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2wgIFRoZSBpbml0aWFsaXplciBsaXN0LgorICAgICAgICogQHBhcmFtIF9fZiAgVGhlIGZvcm1hdCBmbGFncyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgQHAgX19sIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgoaW5pdGlhbGl6ZXJfbGlzdDxfQ2hfdHlwZT4gX19sLAorCQkgIGZsYWdfdHlwZSBfX2YgPSBFQ01BU2NyaXB0KQorICAgICAgOiBfTV9mbGFncyhfX2YpLAorICAgICAgICBfTV9hdXRvbWF0b24oX19kZXRhaWw6Ol9fY29tcGlsZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpLAorICAgICAgICAJCQkJX01fdHJhaXRzLCBfTV9mbGFncykpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRGVzdHJveXMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIH5iYXNpY19yZWdleCgpCisgICAgICB7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyBvbmUgcmVndWxhciBleHByZXNzaW9uIHRvIGFub3RoZXIuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3JlZ2V4JiBfX3JocykKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3Jocyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgTW92ZS1hc3NpZ25zIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gYW5vdGhlci4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgmCisgICAgICBvcGVyYXRvcj0oYmFzaWNfcmVnZXgmJiBfX3Jocykgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihzdGQ6Om1vdmUoX19yaHMpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXBsYWNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIGEgbmV3IG9uZSBjb25zdHJ1Y3RlZCBmcm9tCisgICAgICAgKiBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19wIEEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgYSBudWxsLXRlcm1pbmF0ZWQgQy1zdHlsZSBzdHJpbmcKKyAgICAgICAqICAgICAgICBjb250YWluaW5nIGEgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hfdHlwZSogX19wKQorICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcCwgZmxhZ3MoKSk7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVwbGFjZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCBhIG5ldyBvbmUgY29uc3RydWN0ZWQgZnJvbQorICAgICAgICogYSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcyBBIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGVyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBiYXNpY19yZWdleCYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwgX0NoX3R5cGVyYWl0cywgX0FsbG9jPiYgX19zKQorICAgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCBmbGFncygpKTsgfQorCisgICAgICAvLyBbNy44LjNdIGFzc2lnbgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgdGhlIHJlYWwgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleCYKKyAgICAgIGFzc2lnbihjb25zdCBiYXNpY19yZWdleCYgX19yaHMpCisgICAgICB7CisJYmFzaWNfcmVnZXggX190bXAoX19yaHMpOworCXRoaXMtPnN3YXAoX190bXApOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgVGhlIG1vdmUtYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleCYKKyAgICAgIGFzc2lnbihiYXNpY19yZWdleCYmIF9fcmhzKSBub2V4Y2VwdAorICAgICAgeworCWJhc2ljX3JlZ2V4IF9fdG1wKHN0ZDo6bW92ZShfX3JocykpOworCXRoaXMtPnN3YXAoX190bXApOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyBhIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gdG8gYSByZWdleCBvYmplY3QgZnJvbSBhCisgICAgICAgKiBDLXN0eWxlIG51bGwtdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICogcGF0dGVybi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19wICAgICBBIHBvaW50ZXIgdG8gYSBDLXN0eWxlIG51bGwtdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZworICAgICAgICogICAgICAgICAgICAgIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCisgICAgICAgKiBAcGFyYW0gX19mbGFncyBTeW50YXggb3B0aW9uIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgX19wIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCByZWd1bGFyCisgICAgICAgKiBleHByZXNzaW9uIHBhdHRlcm4gaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIEBwIF9fZmxhZ3MuICBJZgorICAgICAgICogcmVnZXhfZXJyb3IgaXMgdGhyb3duLCAqdGhpcyByZW1haW5zIHVuY2hhbmdlZC4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgmCisgICAgICBhc3NpZ24oY29uc3QgX0NoX3R5cGUqIF9fcCwgZmxhZ190eXBlIF9fZmxhZ3MgPSBFQ01BU2NyaXB0KQorICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKHN0cmluZ190eXBlKF9fcCksIF9fZmxhZ3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEFzc2lnbnMgYSBuZXcgcmVndWxhciBleHByZXNzaW9uIHRvIGEgcmVnZXggb2JqZWN0IGZyb20gYQorICAgICAgICogQy1zdHlsZSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3AgICAgIEEgcG9pbnRlciB0byBhIEMtc3R5bGUgc3RyaW5nIGNvbnRhaW5pbmcgYQorICAgICAgICogICAgICAgICAgICAgICAgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCisgICAgICAgKiBAcGFyYW0gX19sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBzdHJpbmcuCisgICAgICAgKiBAcGFyYW0gX19mbGFncyBTeW50YXggb3B0aW9uIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgcCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmVndWxhcgorICAgICAgICogZXhwcmVzc2lvbiBwYXR0ZXJuIGludGVycHJldGVkIGFjY29yZGluZyB0byBAcCBfX2ZsYWdzLiAgSWYKKyAgICAgICAqIHJlZ2V4X2Vycm9yIGlzIHRocm93biwgKnRoaXMgcmVtYWlucyB1bmNoYW5nZWQuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgYXNzaWduKGNvbnN0IF9DaF90eXBlKiBfX3AsIHN0ZDo6c2l6ZV90IF9fbGVuLCBmbGFnX3R5cGUgX19mbGFncykKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihzdHJpbmdfdHlwZShfX3AsIF9fbGVuKSwgX19mbGFncyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyBhIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gdG8gYSByZWdleCBvYmplY3QgZnJvbSBhIAorICAgICAgICogc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19zICAgICBBIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCisgICAgICAgKiBAcGFyYW0gX19mbGFncyBTeW50YXggb3B0aW9uIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgX19zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCByZWd1bGFyCisgICAgICAgKiBleHByZXNzaW9uIHBhdHRlcm4gaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIEBwIF9fZmxhZ3MuICBJZgorICAgICAgICogcmVnZXhfZXJyb3IgaXMgdGhyb3duLCAqdGhpcyByZW1haW5zIHVuY2hhbmdlZC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGVyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBiYXNpY19yZWdleCYKKyAgICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwgX0NoX3R5cGVyYWl0cywgX0FsbG9jPiYgX19zLAorCSAgICAgICBmbGFnX3R5cGUgX19mbGFncyA9IEVDTUFTY3JpcHQpCisgICAgICAgIHsgCisJICBiYXNpY19yZWdleCBfX3RtcChfX3MsIF9fZmxhZ3MpOworCSAgdGhpcy0+c3dhcChfX3RtcCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBBc3NpZ25zIGEgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhIHJlZ2V4IG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19maXJzdCBUaGUgc3RhcnQgb2YgYSByYW5nZSBjb250YWluaW5nIGEgdmFsaWQgcmVndWxhcgorICAgICAgICogICAgICAgICAgICAgICAgZXhwcmVzc2lvbi4KKyAgICAgICAqIEBwYXJhbSBfX2xhc3QgIFRoZSBlbmQgb2YgYSByYW5nZSBjb250YWluaW5nIGEgdmFsaWQgcmVndWxhcgorICAgICAgICogICAgICAgICAgICAgICAgZXhwcmVzc2lvbi4KKyAgICAgICAqIEBwYXJhbSBfX2ZsYWdzIFN5bnRheCBvcHRpb24gZmxhZ3MuCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBwIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCByZWd1bGFyCisgICAgICAgKiBleHByZXNzaW9uIHBhdHRlcm4gaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIEBwIF9fZmxhZ3MuICBJZgorICAgICAgICogcmVnZXhfZXJyb3IgaXMgdGhyb3duLCB0aGUgb2JqZWN0IHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgYmFzaWNfcmVnZXgmCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIGZsYWdfdHlwZSBfX2ZsYWdzID0gRUNNQVNjcmlwdCkKKyAgICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKHN0cmluZ190eXBlKF9fZmlyc3QsIF9fbGFzdCksIF9fZmxhZ3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEFzc2lnbnMgYSBuZXcgcmVndWxhciBleHByZXNzaW9uIHRvIGEgcmVnZXggb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2wgICAgIEFuIGluaXRpYWxpemVyIGxpc3QgcmVwcmVzZW50aW5nIGEgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICogQHBhcmFtIF9fZmxhZ3MgU3ludGF4IG9wdGlvbiBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHJlZ2V4X2Vycm9yIGlmIEBwIF9fbCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQKKyAgICAgICAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGludGVycHJldGVkIGFjY29yZGluZyB0byBAcAorICAgICAgICogX19mbGFncy4gIElmIHJlZ2V4X2Vycm9yIGlzIHRocm93biwgdGhlIG9iamVjdCByZW1haW5zCisgICAgICAgKiB1bmNoYW5nZWQuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8X0NoX3R5cGU+IF9fbCwgZmxhZ190eXBlIF9fZmxhZ3MgPSBFQ01BU2NyaXB0KQorICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fZmxhZ3MpOyB9CisKKyAgICAgIC8vIFs3LjguNF0gY29uc3Qgb3BlcmF0aW9ucworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbnVtYmVyIG9mIG1hcmtlZCBzdWJleHByZXNzaW9ucyB3aXRoaW4gdGhlIHJlZ3VsYXIKKyAgICAgICAqIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIHVuc2lnbmVkIGludAorICAgICAgbWFya19jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9hdXRvbWF0b24tPl9NX3N1Yl9jb3VudCgpIC0gMTsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBmbGFncyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgKiBvciBpbiB0aGUgbGFzdCBjYWxsIHRvIGFzc2lnbigpLgorICAgICAgICovCisgICAgICBmbGFnX3R5cGUKKyAgICAgIGZsYWdzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2ZsYWdzOyB9CisgICAgICAKKyAgICAgIC8vIFs3LjguNV0gbG9jYWxlCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbWJ1ZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2xvYyBBIGxvY2FsZS4KKyAgICAgICAqLworICAgICAgbG9jYWxlX3R5cGUKKyAgICAgIGltYnVlKGxvY2FsZV90eXBlIF9fbG9jKQorICAgICAgeyByZXR1cm4gX01fdHJhaXRzLmltYnVlKF9fbG9jKTsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBsb2NhbGUgY3VycmVudGx5IGltYnVlZCBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgKiAgICAgICAgb2JqZWN0LgorICAgICAgICovCisgICAgICBsb2NhbGVfdHlwZQorICAgICAgZ2V0bG9jKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3RyYWl0cy5nZXRsb2MoKTsgfQorICAgICAgCisgICAgICAvLyBbNy44LjZdIHN3YXAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFN3YXBzIHRoZSBjb250ZW50cyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIG9iamVjdHMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgcmVndWxhciBleHByZXNzaW9uIG9iamVjdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChiYXNpY19yZWdleCYgX19yaHMpCisgICAgICB7CisJc3RkOjpzd2FwKF9NX2ZsYWdzLCBfX3Jocy5fTV9mbGFncyk7CisJc3RkOjpzd2FwKF9NX3RyYWl0cywgX19yaHMuX01fdHJhaXRzKTsKKwlzdGQ6OnN3YXAoX01fYXV0b21hdG9uLCBfX3Jocy5fTV9hdXRvbWF0b24pOworICAgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvdChzdGQ6Om9zdHJlYW0mIF9fb3N0cikKKyAgICAgIHsgX01fYXV0b21hdG9uLT5fTV9kb3QoX19vc3RyKTsgfQorI2VuZGlmCisgICAgICAKKyAgICAgIGNvbnN0IF9fZGV0YWlsOjpfQXV0b21hdG9uUHRyJgorICAgICAgX01fZ2V0X2F1dG9tYXRvbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9hdXRvbWF0b247IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIGZsYWdfdHlwZSAgICAgICAgICAgICAgX01fZmxhZ3M7CisgICAgICBfUnhfdHJhaXRzICAgICAgICAgICAgIF9NX3RyYWl0czsKKyAgICAgIF9fZGV0YWlsOjpfQXV0b21hdG9uUHRyIF9NX2F1dG9tYXRvbjsKKyAgICB9OworICAKKyAgLyoqIEBicmllZiBTdGFuZGFyZCByZWd1bGFyIGV4cHJlc3Npb25zLiAqLworICB0eXBlZGVmIGJhc2ljX3JlZ2V4PGNoYXI+ICAgIHJlZ2V4OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgLyoqIEBicmllZiBTdGFuZGFyZCB3aWRlLWNoYXJhY3RlciByZWd1bGFyIGV4cHJlc3Npb25zLiAqLworICB0eXBlZGVmIGJhc2ljX3JlZ2V4PHdjaGFyX3Q+IHdyZWdleDsKKyNlbmRpZgorCisKKyAgLy8gWzcuOC42XSBiYXNpY19yZWdleCBzd2FwCisgIC8qKgorICAgKiBAYnJpZWYgU3dhcHMgdGhlIGNvbnRlbnRzIG9mIHR3byByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0cy4KKyAgICogQHBhcmFtIF9fbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICogQHBhcmFtIF9fcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2xocywKKwkgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKKworICAvLyBbNy45XSBDbGFzcyB0ZW1wbGF0ZSBzdWJfbWF0Y2gKKyAgLyoqCisgICAqIEEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBtYXRjaGVkIGJ5IGEgcGFydGljdWxhciBtYXJrZWQgc3ViLWV4cHJlc3Npb24uCisgICAqCisgICAqIEFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIGlzIGVzc2VudGlhbGx5IGEgcGFpciBvZiBpdGVyYXRvcnMgbWFya2luZyBhCisgICAqIG1hdGNoZWQgc3ViZXhwcmVzc2lvbiB3aXRoaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaC4gU3VjaAorICAgKiBvYmplY3RzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5kIGNvbXBhcmVkIHdpdGggc3RkOjpiYXNpY19zdHJpbmcgb2JqZWN0cworICAgKiBvZiBhIHNpbWlsYXIgYmFzZSBjaGFyYWN0ZXIgdHlwZSBhcyB0aGUgcGF0dGVybiBtYXRjaGVkIGJ5IHRoZSByZWd1bGFyCisgICAqIGV4cHJlc3Npb24uCisgICAqCisgICAqIFRoZSBpdGVyYXRvcnMgdGhhdCBtYWtlIHVwIHRoZSBwYWlyIGFyZSB0aGUgdXN1YWwgaGFsZi1vcGVuIGludGVydmFsCisgICAqIHJlZmVyZW5jaW5nIHRoZSBhY3R1YWwgb3JpZ2luYWwgcGF0dGVybiBtYXRjaGVkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpSXRlcj4KKyAgICBjbGFzcyBzdWJfbWF0Y2ggOiBwdWJsaWMgc3RkOjpwYWlyPF9CaUl0ZXIsIF9CaUl0ZXI+CisgICAgeworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0JpSXRlcj4JCQlfX2l0ZXJfdHJhaXRzOworCQorICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pdGVyX3RyYWl0czo6dmFsdWVfdHlwZSAgICAgIAl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2l0ZXJfdHJhaXRzOjpkaWZmZXJlbmNlX3R5cGUgCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0JpSXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nPHZhbHVlX3R5cGU+ICAgICAgICAgICAgIHN0cmluZ190eXBlOworCisgICAgICBib29sIG1hdGNoZWQ7CisgICAgICAKKyAgICAgIGNvbnN0ZXhwciBzdWJfbWF0Y2goKSA6IG1hdGNoZWQoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoaW5nIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICBkaWZmZXJlbmNlX3R5cGUKKyAgICAgIGxlbmd0aCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5tYXRjaGVkID8gc3RkOjpkaXN0YW5jZSh0aGlzLT5maXJzdCwgdGhpcy0+c2Vjb25kKSA6IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbWF0Y2hpbmcgc2VxdWVuY2UgYXMgYSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdGhlIG1hdGNoaW5nIHNlcXVlbmNlIGFzIGEgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqIFRoaXMgaXMgdGhlIGltcGxpY2l0IGNvbnZlcnNpb24gb3BlcmF0b3IuICBJdCBpcyBpZGVudGljYWwgdG8gdGhlCisgICAgICAgKiBzdHIoKSBtZW1iZXIgZnVuY3Rpb24gZXhjZXB0IHRoYXQgaXQgd2lsbCB3YW50IHRvIHBvcCB1cCBpbgorICAgICAgICogdW5leHBlY3RlZCBwbGFjZXMgYW5kIGNhdXNlIGEgZ3JlYXQgZGVhbCBvZiBjb25mdXNpb24gYW5kIGN1cnNpbmcKKyAgICAgICAqIGZyb20gdGhlIHVud2FyeS4KKyAgICAgICAqLworICAgICAgb3BlcmF0b3Igc3RyaW5nX3R5cGUoKSBjb25zdAorICAgICAgeworCXJldHVybiB0aGlzLT5tYXRjaGVkCisJICA/IHN0cmluZ190eXBlKHRoaXMtPmZpcnN0LCB0aGlzLT5zZWNvbmQpCisJICA6IHN0cmluZ190eXBlKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG1hdGNoaW5nIHNlcXVlbmNlIGFzIGEgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRoZSBtYXRjaGluZyBzZXF1ZW5jZSBhcyBhIHN0cmluZy4KKyAgICAgICAqLworICAgICAgc3RyaW5nX3R5cGUKKyAgICAgIHN0cigpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRoaXMtPm1hdGNoZWQKKwkgID8gc3RyaW5nX3R5cGUodGhpcy0+Zmlyc3QsIHRoaXMtPnNlY29uZCkKKwkgIDogc3RyaW5nX3R5cGUoKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29tcGFyZXMgdGhpcyBhbmQgYW5vdGhlciBtYXRjaGVkIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3MgQW5vdGhlciBtYXRjaGVkIHNlcXVlbmNlIHRvIGNvbXBhcmUgdG8gdGhpcyBvbmUuCisgICAgICAgKgorICAgICAgICogQHJldHZhbCA8MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2Ugd2lsbCBjb2xsYXRlIGJlZm9yZSBAcCBfX3MuCisgICAgICAgKiBAcmV0dmFsID0wIHRoaXMgbWF0Y2hlZCBzZXF1ZW5jZSBpcyBlcXVpdmFsZW50IHRvIEBwIF9fcy4KKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBhZnRlciBAcCBfX3MuCisgICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCBzdWJfbWF0Y2gmIF9fcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnN0cigpLmNvbXBhcmUoX19zLnN0cigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21wYXJlcyB0aGlzIHN1Yl9tYXRjaCB0byBhIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19zIEEgc3RyaW5nIHRvIGNvbXBhcmUgdG8gdGhpcyBzdWJfbWF0Y2guCisgICAgICAgKgorICAgICAgICogQHJldHZhbCA8MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2Ugd2lsbCBjb2xsYXRlIGJlZm9yZSBAcCBfX3MuCisgICAgICAgKiBAcmV0dmFsID0wIHRoaXMgbWF0Y2hlZCBzZXF1ZW5jZSBpcyBlcXVpdmFsZW50IHRvIEBwIF9fcy4KKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBhZnRlciBAcCBfX3MuCisgICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+c3RyKCkuY29tcGFyZShfX3MpOyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIHRoaXMgc3ViX21hdGNoIHRvIGEgQy1zdHlsZSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcyBBIEMtc3R5bGUgc3RyaW5nIHRvIGNvbXBhcmUgdG8gdGhpcyBzdWJfbWF0Y2guCisgICAgICAgKgorICAgICAgICogQHJldHZhbCA8MCB0aGlzIG1hdGNoZWQgc2VxdWVuY2Ugd2lsbCBjb2xsYXRlIGJlZm9yZSBAcCBfX3MuCisgICAgICAgKiBAcmV0dmFsID0wIHRoaXMgbWF0Y2hlZCBzZXF1ZW5jZSBpcyBlcXVpdmFsZW50IHRvIEBwIF9fcy4KKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBhZnRlciBAcCBfX3MuCisgICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCB2YWx1ZV90eXBlKiBfX3MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5zdHIoKS5jb21wYXJlKF9fcyk7IH0KKyAgICB9OworICAKKyAgCisgIC8qKiBAYnJpZWYgU3RhbmRhcmQgcmVnZXggc3VibWF0Y2ggb3ZlciBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4gKi8KKyAgdHlwZWRlZiBzdWJfbWF0Y2g8Y29uc3QgY2hhcio+ICAgICAgICAgICAgIGNzdWJfbWF0Y2g7CisKKyAgLyoqIEBicmllZiBTdGFuZGFyZCByZWdleCBzdWJtYXRjaCBvdmVyIGEgc3RhbmRhcmQgc3RyaW5nLiAqLworICB0eXBlZGVmIHN1Yl9tYXRjaDxzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiAgc3N1Yl9tYXRjaDsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIC8qKiBAYnJpZWYgUmVnZXggc3VibWF0Y2ggb3ZlciBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHdpZGUgc3RyaW5nLiAqLworICB0eXBlZGVmIHN1Yl9tYXRjaDxjb25zdCB3Y2hhcl90Kj4gICAgICAgICAgd2NzdWJfbWF0Y2g7CisKKyAgLyoqIEBicmllZiBSZWdleCBzdWJtYXRjaCBvdmVyIGEgc3RhbmRhcmQgd2lkZSBzdHJpbmcuICovCisgIHR5cGVkZWYgc3ViX21hdGNoPHdzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiB3c3N1Yl9tYXRjaDsKKyNlbmRpZgorCisgIC8vIFs3LjkuMl0gc3ViX21hdGNoIG5vbi1tZW1iZXIgb3BlcmF0b3JzCisgIAorICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBlcXVpdmFsZW5jZSBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBfX2xocyBGaXJzdCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fbGhzLCBjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBpbmVxdWl2YWxlbmNlIG9mIHR3byByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2hlcy4KKyAgICogQHBhcmFtIF9fbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fbGhzLCBjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBfX2xocyBGaXJzdCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIHByZWNlZGVzIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19saHMsIGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgdHdvIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaGVzLgorICAgKiBAcGFyYW0gX19saHMgRmlyc3QgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19yaHMgU2Vjb25kIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBkb2VzIG5vdCBzdWNjZWVkIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fbGhzLCBjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBfX2xocyBGaXJzdCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaUl0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19saHMsIGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIHR3byByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2hlcy4KKyAgICogQHBhcmFtIF9fbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgc3VjY2VlZHMgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaUl0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX2xocywgY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KKworICAvLyBBbGlhcyBmb3Igc3ViX21hdGNoJ2Qgc3RyaW5nLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIHVzaW5nIF9fc3ViX21hdGNoX3N0cmluZyA9IGJhc2ljX3N0cmluZzwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+OworCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGVxdWl2YWxlbmNlIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiAgICAgICAgc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX2xocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfX3N1Yl9tYXRjaF9zdHJpbmc8X0JpX2l0ZXIsIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzLmNfc3RyKCkpID09IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBpbmVxdWl2YWxlbmNlIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiAgICAgICAgc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX2xocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzICBpcyBub3QgZXF1aXZhbGVudCB0byBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19zdWJfbWF0Y2hfc3RyaW5nPF9CaV9pdGVyLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX2xocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIHByZWNlZGVzIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9fc3ViX21hdGNoX3N0cmluZzxfQmlfaXRlciwgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19saHMsCisJICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMuY19zdHIoKSkgPiAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19saHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSBfX3JocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBzdWNjZWVkcyBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfX3N1Yl9tYXRjaF9zdHJpbmc8X0JpX2l0ZXIsIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX2xocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9fc3ViX21hdGNoX3N0cmluZzxfQmlfaXRlciwgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPCBfX3Jocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX2xocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIGRvZXMgbm90IHN1Y2NlZWQgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9fc3ViX21hdGNoX3N0cmluZzxfQmlfaXRlciwgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBlcXVpdmFsZW5jZSBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYQorICAgKiAgICAgICAgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBpcyBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19zdWJfbWF0Y2hfc3RyaW5nPF9CaV9pdGVyLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzLmNfc3RyKCkpID09IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBpbmVxdWl2YWxlbmNlIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhCisgICAqICAgICAgICBzdHJpbmcuCisgICAqIEBwYXJhbSBfX2xocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fcmhzIEEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19zdWJfbWF0Y2hfc3RyaW5nPF9CaV9pdGVyLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIF9fbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19yaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgcHJlY2VkZXMgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCBjbGFzcyBfQ2hfdHJhaXRzLCBjbGFzcyBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgY29uc3QgX19zdWJfbWF0Y2hfc3RyaW5nPF9CaV9pdGVyLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzLmNfc3RyKCkpIDwgMDsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIF9fbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19yaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgc3VjY2VlZHMgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCBjbGFzcyBfQ2hfdHJhaXRzLCBjbGFzcyBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgY29uc3QgX19zdWJfbWF0Y2hfc3RyaW5nPF9CaV9pdGVyLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3JocyA8IF9fbGhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBkb2VzIG5vdCBwcmVjZWRlIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgY2xhc3MgX0NoX3RyYWl0cywgY2xhc3MgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19zdWJfbWF0Y2hfc3RyaW5nPF9CaV9pdGVyLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBkb2VzIG5vdCBzdWNjZWVkIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgY2xhc3MgX0NoX3RyYWl0cywgY2xhc3MgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19zdWJfbWF0Y2hfc3RyaW5nPF9CaV9pdGVyLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fcmhzIDwgX19saHMpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgZXF1aXZhbGVuY2Ugb2YgYSBDIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogICAgICAgIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19saHMgQSBDIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBpbmVxdWl2YWxlbmNlIG9mIGFuIGl0ZXJhdG9yIHZhbHVlIGFuZCBhIHJlZ3VsYXIKKyAgICogICAgICAgIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX2xocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fcmhzIEEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19saHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSBfX3JocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBwcmVjZWRlcyBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwodHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19saHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSBfX3JocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBzdWNjZWVkcyBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMgPCBfX2xoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19yaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgZG9lcyBub3QgcHJlY2VkZSBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19saHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSBfX3JocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBkb2VzIG5vdCBzdWNjZWVkIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBlcXVpdmFsZW5jZSBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYQorICAgKiAgICAgICAgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIHBvaW50ZXIgdG8gYSBzdHJpbmc/CisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgIGlzIGVxdWl2YWxlbnQgdG8gQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIF9fbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19yaHMgQSBwb2ludGVyIHRvIGEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBwcmVjZWRlcyBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBzdWNjZWVkcyBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMgPCBfX2xoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIF9fbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19yaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgZG9lcyBub3QgcHJlY2VkZSBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBkb2VzIG5vdCBzdWNjZWVkIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBlcXVpdmFsZW5jZSBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogICAgICAgIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19saHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSBfX3JocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBpcyBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3ViX21hdGNoPF9CaV9pdGVyPjo6c3RyaW5nX3R5cGUgc3RyaW5nX3R5cGU7CisgICAgICByZXR1cm4gX19yaHMuY29tcGFyZShzdHJpbmdfdHlwZSgxLCBfX2xocykpID09IDA7CisgICAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uCisgICAqICAgICAgICBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19yaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgaXMgbm90IGVxdWl2YWxlbnQgdG8gQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPSh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX2xocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIHByZWNlZGVzIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPCh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX2xocywKKwkgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN1Yl9tYXRjaDxfQmlfaXRlcj46OnN0cmluZ190eXBlIHN0cmluZ190eXBlOworICAgICAgcmV0dXJuIF9fcmhzLmNvbXBhcmUoc3RyaW5nX3R5cGUoMSwgX19saHMpKSA+IDA7CisgICAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19yaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgc3VjY2VlZHMgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fbGhzLAorCSAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX2xocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PSh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA8IF9fcmhzKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19yaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgZG9lcyBub3Qgc3VjY2VlZCBAYSBfX3JocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fcmhzIDwgX19saHMpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIF9fbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19yaHMgQSBjb25zdCBzdHJpbmcgcmVmZXJlbmNlLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3ViX21hdGNoPF9CaV9pdGVyPjo6c3RyaW5nX3R5cGUgc3RyaW5nX3R5cGU7CisgICAgICByZXR1cm4gX19saHMuY29tcGFyZShzdHJpbmdfdHlwZSgxLCBfX3JocykpID09IDA7CisgICAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIF9fbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gX19yaHMgQSBjb25zdCBzdHJpbmcgcmVmZXJlbmNlLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIF9fbGhzIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIGNvbnN0IHN0cmluZyByZWZlcmVuY2UuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgcHJlY2VkZXMgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3ViX21hdGNoPF9CaV9pdGVyPjo6c3RyaW5nX3R5cGUgc3RyaW5nX3R5cGU7CisgICAgICByZXR1cm4gX19saHMuY29tcGFyZShzdHJpbmdfdHlwZSgxLCBfX3JocykpIDwgMDsKKyAgICB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gX19saHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBfX3JocyBBIGNvbnN0IHN0cmluZyByZWZlcmVuY2UuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgX19saHMgc3VjY2VlZHMgQGEgX19yaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYSBzdHJpbmcuCisgICAqIEBwYXJhbSBfX2xocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fcmhzIEEgY29uc3Qgc3RyaW5nIHJlZmVyZW5jZS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBkb2VzIG5vdCBwcmVjZWRlIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPCBfX3Jocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYSBzdHJpbmcuCisgICAqIEBwYXJhbSBfX2xocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIF9fcmhzIEEgY29uc3Qgc3RyaW5nIHJlZmVyZW5jZS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBfX2xocyBkb2VzIG5vdCBzdWNjZWVkIEBhIF9fcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIEluc2VydHMgYSBtYXRjaGVkIHN0cmluZyBpbnRvIGFuIG91dHB1dCBzdHJlYW0uCisgICAqCisgICAqIEBwYXJhbSBfX29zIFRoZSBvdXRwdXQgc3RyZWFtLgorICAgKiBAcGFyYW0gX19tICBBIHN1Ym1hdGNoIHN0cmluZy4KKyAgICoKKyAgICogQHJldHVybnMgdGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3VibWF0Y2ggc3RyaW5nIGluc2VydGVkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZQorICAgIGJhc2ljX29zdHJlYW08X0NoX3R5cGUsIF9DaF90cmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hfdHlwZSwgX0NoX3RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbSkKKyAgICB7IHJldHVybiBfX29zIDw8IF9fbS5zdHIoKTsgfQorCisgIC8vIFs3LjEwXSBDbGFzcyB0ZW1wbGF0ZSBtYXRjaF9yZXN1bHRzCisKKyAgLyoKKyAgICogU3BlY2lhbCBzdWJfbWF0Y2ggb2JqZWN0IHJlcHJlc2VudGluZyBhbiB1bm1hdGNoZWQgc3ViLWV4cHJlc3Npb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYKKyAgICBfX3VubWF0Y2hlZF9zdWIoKQorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+IF9fdW5tYXRjaGVkID0gc3ViX21hdGNoPF9CaV9pdGVyPigpOworICAgICAgcmV0dXJuIF9fdW5tYXRjaGVkOworICAgIH0KKworICAvKioKKyAgICogQGJyaWVmIFRoZSByZXN1bHRzIG9mIGEgbWF0Y2ggb3Igc2VhcmNoIG9wZXJhdGlvbi4KKyAgICoKKyAgICogQSBjb2xsZWN0aW9uIG9mIGNoYXJhY3RlciBzZXF1ZW5jZXMgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSByZWd1bGFyCisgICAqIGV4cHJlc3Npb24gbWF0Y2guICBTdG9yYWdlIGZvciB0aGUgY29sbGVjdGlvbiBpcyBhbGxvY2F0ZWQgYW5kIGZyZWVkIGFzCisgICAqIG5lY2Vzc2FyeSBieSB0aGUgbWVtYmVyIGZ1bmN0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZSBtYXRjaF9yZXN1bHRzLgorICAgKgorICAgKiBUaGlzIGNsYXNzIHNhdGlzZmllcyB0aGUgU2VxdWVuY2UgcmVxdWlyZW1lbnRzLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAorICAgKiBvbmx5IHRoZSBvcGVyYXRpb25zIGRlZmluZWQgZm9yIGEgY29uc3QtcXVhbGlmaWVkIFNlcXVlbmNlIGFyZSBzdXBwb3J0ZWQuCisgICAqCisgICAqIFRoZSBzdWJfbWF0Y2ggb2JqZWN0IHN0b3JlZCBhdCBpbmRleCAwIHJlcHJlc2VudHMgc3ViLWV4cHJlc3Npb24gMCwgaS5lLgorICAgKiB0aGUgd2hvbGUgbWF0Y2guIEluIHRoaXMgY2FzZSB0aGUgJXN1Yl9tYXRjaCBtZW1iZXIgbWF0Y2hlZCBpcyBhbHdheXMgdHJ1ZS4KKyAgICogVGhlIHN1Yl9tYXRjaCBvYmplY3Qgc3RvcmVkIGF0IGluZGV4IG4gZGVub3RlcyB3aGF0IG1hdGNoZWQgdGhlIG1hcmtlZAorICAgKiBzdWItZXhwcmVzc2lvbiBuIHdpdGhpbiB0aGUgbWF0Y2hlZCBleHByZXNzaW9uLiBJZiB0aGUgc3ViLWV4cHJlc3Npb24gbgorICAgKiBwYXJ0aWNpcGF0ZWQgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggdGhlbiB0aGUgJXN1Yl9tYXRjaCBtZW1iZXIKKyAgICogbWF0Y2hlZCBldmFsdWF0ZXMgdG8gdHJ1ZSwgYW5kIG1lbWJlcnMgZmlyc3QgYW5kIHNlY29uZCBkZW5vdGUgdGhlIHJhbmdlCisgICAqIG9mIGNoYXJhY3RlcnMgW2ZpcnN0LCBzZWNvbmQpIHdoaWNoIGZvcm1lZCB0aGF0IG1hdGNoLiBPdGhlcndpc2UgbWF0Y2hlZAorICAgKiBpcyBmYWxzZSwgYW5kIG1lbWJlcnMgZmlyc3QgYW5kIHNlY29uZCBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZQorICAgKiB0aGF0IHdhcyBzZWFyY2hlZC4KKyAgICoKKyAgICogQG5vc3ViZ3JvdXBpbmcKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxzdWJfbWF0Y2g8X0JpX2l0ZXI+ID4gPgorICAgIGNsYXNzIG1hdGNoX3Jlc3VsdHMKKyAgICA6IHByaXZhdGUgc3RkOjp2ZWN0b3I8c3ViX21hdGNoPF9CaV9pdGVyPiwgX0FsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgLyoKKyAgICAgICAqIFRoZSB2ZWN0b3IgYmFzZSBpcyBlbXB0eSBpZiB0aGlzIGRvZXMgbm90IHJlcHJlc2VudCBhIHN1Y2Nlc3NmdWwgbWF0Y2guCisgICAgICAgKiBPdGhlcndpc2UgaXQgY29udGFpbnMgbiszIGVsZW1lbnRzIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiBtYXJrZWQKKyAgICAgICAqIHN1Yi1leHByZXNzaW9uczoKKyAgICAgICAqIFswXSBlbnRpcmUgbWF0Y2gKKyAgICAgICAqIFsxXSAxc3QgbWFya2VkIHN1YmV4cHJlc3Npb24KKyAgICAgICAqIC4uLgorICAgICAgICogW25dIG50aCBtYXJrZWQgc3ViZXhwcmVzc2lvbgorICAgICAgICogW24rMV0gcHJlZml4CisgICAgICAgKiBbbisyXSBzdWZmaXgKKyAgICAgICAqLworICAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdWJfbWF0Y2g8X0JpX2l0ZXI+LCBfQWxsb2M+ICAgICBfQmFzZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj4gICAJICAgCSAgIF9faXRlcl90cmFpdHM7CisgICAgICB0eXBlZGVmIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlCQkgICBtYXRjaF9mbGFnX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIEBuYW1lIDEwLj8gUHVibGljIFR5cGVzCisgICAgICAgKi8KKyAgICAgIC8vQHsKKyAgICAgIHR5cGVkZWYgX0FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHN1Yl9tYXRjaDxfQmlfaXRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3RfcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgY29uc3RfaXRlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXRlcl90cmFpdHM6OmRpZmZlcmVuY2VfdHlwZQkgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXRlcl90cmFpdHM6OnZhbHVlX3R5cGUgCSAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+OjpzaXplX3R5cGUgc2l6ZV90eXBlOworCisKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcl90eXBlPiAgICAgICAgICAgICAgICAgc3RyaW5nX3R5cGU7CisgICAgICAvL0B9CisgIAorICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgMjguMTAuMSBDb25zdHJ1Y3Rpb24sIENvcHlpbmcsIGFuZCBEZXN0cnVjdGlvbgorICAgICAgICovCisgICAgICAvL0B7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBkZWZhdWx0ICVtYXRjaF9yZXN1bHRzIGNvbnRhaW5lci4KKyAgICAgICAqIEBwb3N0IHNpemUoKSByZXR1cm5zIDAgYW5kIHN0cigpIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbWF0Y2hfcmVzdWx0cyhjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKQorICAgICAgOiBfQmFzZV90eXBlKF9fYSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGNvbnN0cnVjdHMgYSAlbWF0Y2hfcmVzdWx0cy4KKyAgICAgICAqLworICAgICAgbWF0Y2hfcmVzdWx0cyhjb25zdCBtYXRjaF9yZXN1bHRzJiBfX3JocykKKyAgICAgIDogX0Jhc2VfdHlwZShfX3JocykKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBNb3ZlIGNvbnN0cnVjdHMgYSAlbWF0Y2hfcmVzdWx0cy4KKyAgICAgICAqLworICAgICAgbWF0Y2hfcmVzdWx0cyhtYXRjaF9yZXN1bHRzJiYgX19yaHMpIG5vZXhjZXB0CisgICAgICA6IF9CYXNlX3R5cGUoc3RkOjptb3ZlKF9fcmhzKSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBBc3NpZ25zIHJocyB0byAqdGhpcy4KKyAgICAgICAqLworICAgICAgbWF0Y2hfcmVzdWx0cyYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBtYXRjaF9yZXN1bHRzJiBfX3JocykKKyAgICAgIHsKKwltYXRjaF9yZXN1bHRzKF9fcmhzKS5zd2FwKCp0aGlzKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIE1vdmUtYXNzaWducyByaHMgdG8gKnRoaXMuCisgICAgICAgKi8KKyAgICAgIG1hdGNoX3Jlc3VsdHMmCisgICAgICBvcGVyYXRvcj0obWF0Y2hfcmVzdWx0cyYmIF9fcmhzKQorICAgICAgeworCW1hdGNoX3Jlc3VsdHMoc3RkOjptb3ZlKF9fcmhzKSkuc3dhcCgqdGhpcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEZXN0cm95cyBhICVtYXRjaF9yZXN1bHRzIG9iamVjdC4KKyAgICAgICAqLworICAgICAgfm1hdGNoX3Jlc3VsdHMoKQorICAgICAgeyB9CisgICAgICAKKyAgICAgIC8vQH0KKworICAgICAgLy8gMjguMTAuMiwgc3RhdGU6CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbmRpY2F0ZXMgaWYgdGhlICVtYXRjaF9yZXN1bHRzIGlzIHJlYWR5LgorICAgICAgICogQHJldHZhbCB0cnVlICAgVGhlIG9iamVjdCBoYXMgYSBmdWxseS1lc3RhYmxpc2hlZCByZXN1bHQgc3RhdGUuCisgICAgICAgKiBAcmV0dmFsIGZhbHNlICBUaGUgb2JqZWN0IGlzIG5vdCByZWFkeS4KKyAgICAgICAqLworICAgICAgYm9vbCByZWFkeSgpIGNvbnN0IHsgcmV0dXJuICFfQmFzZV90eXBlOjplbXB0eSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgMjguMTAuMiBTaXplCisgICAgICAgKi8KKyAgICAgIC8vQHsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgYW5kIHN1Ym1hdGNoZXMuCisgICAgICAgKgorICAgICAgICogVGhlIG51bWJlciBvZiBtYXRjaGVzIGZvciBhIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aWxsIGJlIGVpdGhlciAwCisgICAgICAgKiBpZiB0aGVyZSB3YXMgbm8gbWF0Y2ggb3IgbWFya19jb3VudCgpICsgMSBpZiBhIG1hdGNoIHdhcyBzdWNjZXNzZnVsLgorICAgICAgICogU29tZSBtYXRjaGVzIG1heSBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQuCisgICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7CisgICAgICAJc2l6ZV90eXBlIF9fc2l6ZSA9IF9CYXNlX3R5cGU6OnNpemUoKTsKKyAgICAgIAlyZXR1cm4gKF9fc2l6ZSAmJiBfQmFzZV90eXBlOjpvcGVyYXRvcltdKDApLm1hdGNoZWQpID8gX19zaXplIC0gMiA6IDA7CisgICAgICB9CisgICAgICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2VfdHlwZTo6bWF4X3NpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbmRpY2F0ZXMgaWYgdGhlICVtYXRjaF9yZXN1bHRzIGNvbnRhaW5zIG5vIHJlc3VsdHMuCisgICAgICAgKiBAcmV0dmFsIHRydWUgVGhlICVtYXRjaF9yZXN1bHRzIG9iamVjdCBpcyBlbXB0eS4KKyAgICAgICAqIEByZXR2YWwgZmFsc2UgVGhlICVtYXRjaF9yZXN1bHRzIG9iamVjdCBpcyBub3QgZW1wdHkuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CisgICAgICAKKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiBAbmFtZSAxMC4zIEVsZW1lbnQgQWNjZXNzCisgICAgICAgKi8KKyAgICAgIC8vQHsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBpbmRpY2F0ZWQgc3VibWF0Y2guCisgICAgICAgKiBAcGFyYW0gX19zdWIgaW5kaWNhdGVzIHRoZSBzdWJtYXRjaC4KKyAgICAgICAqIEBwcmUgICByZWFkeSgpID09IHRydWUKKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgaW5kaWNhdGVkIHN1Ym1hdGNoLCBvciB0aGUKKyAgICAgICAqIGxlbmd0aCBvZiB0aGUgZW50aXJlIG1hdGNoIGlmIEBwIF9fc3ViIGlzIHplcm8gKHRoZSBkZWZhdWx0KS4KKyAgICAgICAqLworICAgICAgZGlmZmVyZW5jZV90eXBlCisgICAgICBsZW5ndGgoc2l6ZV90eXBlIF9fc3ViID0gMCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICgqdGhpcylbX19zdWJdLmxlbmd0aCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbmRpY2F0ZWQgc3VibWF0Y2guCisgICAgICAgKiBAcGFyYW0gX19zdWIgaW5kaWNhdGVzIHRoZSBzdWJtYXRjaC4KKyAgICAgICAqIEBwcmUgICByZWFkeSgpID09IHRydWUKKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRhcmdldAorICAgICAgICogc2VxdWVuY2UgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3VibWF0Y2gsIHVubGVzcyB0aGUgdmFsdWUgb2YgQHAgX19zdWIKKyAgICAgICAqIGlzIHplcm8gKHRoZSBkZWZhdWx0KSwgaW4gd2hpY2ggY2FzZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldAorICAgICAgICogZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0YXJnZXQgc2VxdWVuY2UgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgICAgICAqIG1hdGNoLgorICAgICAgICoKKyAgICAgICAqIFJldHVybnMgLTEgaWYgQHAgX19zdWIgaXMgb3V0IG9mIHJhbmdlLgorICAgICAgICovCisgICAgICBkaWZmZXJlbmNlX3R5cGUKKyAgICAgIHBvc2l0aW9uKHNpemVfdHlwZSBfX3N1YiA9IDApIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9fc3ViIDwgc2l6ZSgpID8gc3RkOjpkaXN0YW5jZSh0aGlzLT5wcmVmaXgoKS5maXJzdCwKKwkJCQkJICAgICAgKCp0aGlzKVtfX3N1Yl0uZmlyc3QpIDogLTE7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG1hdGNoIG9yIHN1Ym1hdGNoIGNvbnZlcnRlZCB0byBhIHN0cmluZyB0eXBlLgorICAgICAgICogQHBhcmFtIF9fc3ViIGluZGljYXRlcyB0aGUgc3VibWF0Y2guCisgICAgICAgKiBAcHJlICAgcmVhZHkoKSA9PSB0cnVlCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzdWJtYXRjaCAob3IgbWF0Y2gsIGlmIEBwIF9fc3ViIGlzCisgICAgICAgKiB6ZXJvKSBleHRyYWN0ZWQgZnJvbSB0aGUgdGFyZ2V0IHJhbmdlIGFuZCBjb252ZXJ0ZWQgdG8gdGhlCisgICAgICAgKiBhc3NvY2lhdGVkIHN0cmluZyB0eXBlLgorICAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgc3RyKHNpemVfdHlwZSBfX3N1YiA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiAoKnRoaXMpW19fc3ViXS5zdHIoKTsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgJXN1Yl9tYXRjaCByZWZlcmVuY2UgZm9yIHRoZSBtYXRjaCBvciBzdWJtYXRjaC4KKyAgICAgICAqIEBwYXJhbSBfX3N1YiBpbmRpY2F0ZXMgdGhlIHN1Ym1hdGNoLgorICAgICAgICogQHByZSAgIHJlYWR5KCkgPT0gdHJ1ZQorICAgICAgICoKKyAgICAgICAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgaW5kaWNhdGVkIHN1Ym1hdGNoLCBvcgorICAgICAgICogdGhlIGVudGlyZSBtYXRjaCBpZiBAcCBfX3N1YiBpcyB6ZXJvLgorICAgICAgICoKKyAgICAgICAqIElmIEBwIF9fc3ViID49IHNpemUoKSB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhICVzdWJfbWF0Y2ggd2l0aCBhCisgICAgICAgKiBzcGVjaWFsIHZhbHVlIGluZGljYXRpbmcgbm8gc3VibWF0Y2guCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19zdWIpIGNvbnN0CisgICAgICB7IAorICAgICAgCV9HTElCQ1hYX0RFQlVHX0FTU0VSVCggcmVhZHkoKSApOworICAgICAgCXJldHVybiBfX3N1YiA8IHNpemUoKQorCSAgICAgICA/ICBfQmFzZV90eXBlOjpvcGVyYXRvcltdKF9fc3ViKQorCSAgICAgICA6IF9fdW5tYXRjaGVkX3N1YjxfQmlfaXRlcj4oKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhICVzdWJfbWF0Y2ggcmVwcmVzZW50aW5nIHRoZSBtYXRjaCBwcmVmaXguCisgICAgICAgKiBAcHJlICAgcmVhZHkoKSA9PSB0cnVlCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVmZXJlbmNlIHRvIGEgJXN1Yl9tYXRjaCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICogcGFydCBvZiB0aGUgdGFyZ2V0IHJhbmdlIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSB0YXJnZXQgcmFuZ2UgYW5kIHRoZQorICAgICAgICogc3RhcnQgb2YgdGhlIG1hdGNoLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHByZWZpeCgpIGNvbnN0CisgICAgICB7CisgICAgICAJX0dMSUJDWFhfREVCVUdfQVNTRVJUKCByZWFkeSgpICk7CisgICAgICAJcmV0dXJuICFlbXB0eSgpCisgICAgICAJICAgICAgID8gX0Jhc2VfdHlwZTo6b3BlcmF0b3JbXShfQmFzZV90eXBlOjpzaXplKCkgLSAyKQorCSAgICAgICA6IF9fdW5tYXRjaGVkX3N1YjxfQmlfaXRlcj4oKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhICVzdWJfbWF0Y2ggcmVwcmVzZW50aW5nIHRoZSBtYXRjaCBzdWZmaXguCisgICAgICAgKiBAcHJlICAgcmVhZHkoKSA9PSB0cnVlCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVmZXJlbmNlIHRvIGEgJXN1Yl9tYXRjaCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICogcGFydCBvZiB0aGUgdGFyZ2V0IHJhbmdlIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgbWF0Y2ggYW5kIHRoZSBlbmQgb2YKKyAgICAgICAqIHRoZSB0YXJnZXQgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgc3VmZml4KCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoIHJlYWR5KCkgKTsKKwlyZXR1cm4gIWVtcHR5KCkKKwkgICAgICAgPyBfQmFzZV90eXBlOjpvcGVyYXRvcltdKF9CYXNlX3R5cGU6OnNpemUoKSAtIDEpCisJICAgICAgIDogX191bm1hdGNoZWRfc3ViPF9CaV9pdGVyPigpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGFuIGl0ZXJhdG9yIHRvIHRoZSBzdGFydCBvZiB0aGUgJXN1Yl9tYXRjaCBjb2xsZWN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2VfdHlwZTo6YmVnaW4oKTsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGFuIGl0ZXJhdG9yIHRvIHRoZSBzdGFydCBvZiB0aGUgJXN1Yl9tYXRjaCBjb2xsZWN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OmNiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgYW4gaXRlcmF0b3IgdG8gb25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY29sbGVjdGlvbi4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiAhZW1wdHkoKSA/IF9CYXNlX3R5cGU6OmVuZCgpIC0gMiA6IF9CYXNlX3R5cGU6OmVuZCgpOyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgYW4gaXRlcmF0b3IgdG8gb25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY29sbGVjdGlvbi4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gZW5kKCk7IH0KKworICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqIEBuYW1lIDEwLjQgRm9ybWF0dGluZworICAgICAgICoKKyAgICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIGZvcm1hdHRlZCBzdWJzdGl0dXRpb24gb2YgdGhlIG1hdGNoZWQKKyAgICAgICAqIGNoYXJhY3RlciBzZXF1ZW5jZXMgaW50byB0aGVpciB0YXJnZXQuICBUaGUgZm9ybWF0IHNwZWNpZmllcnMgYW5kCisgICAgICAgKiBlc2NhcGUgc2VxdWVuY2VzIGFjY2VwdGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGV0ZXJtaW5lZCBieQorICAgICAgICogdGhlaXIgQHAgZmxhZ3MgcGFyYW1ldGVyIGFzIGRvY3VtZW50ZWQgYWJvdmUuCisgICAgICAgKi8KKyAgICAgICAvL0B7CisKKyAgICAgIC8qKgorICAgICAgICogQHByZSAgIHJlYWR5KCkgPT0gdHJ1ZQorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRfaXRlcj4KKyAgICAgICAgX091dF9pdGVyCisgICAgICAgIGZvcm1hdChfT3V0X2l0ZXIgX19vdXQsIGNvbnN0IGNoYXJfdHlwZSogX19mbXRfZmlyc3QsCisJICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mbXRfbGFzdCwKKwkgICAgICAgbWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MgPSByZWdleF9jb25zdGFudHM6OmZvcm1hdF9kZWZhdWx0KSBjb25zdAorICAgICAgICB7IHJldHVybiBfX291dDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBwcmUgICByZWFkeSgpID09IHRydWUKKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX091dF9pdGVyLCB0eXBlbmFtZSBfU3QsIHR5cGVuYW1lIF9TYT4KKyAgICAgICAgX091dF9pdGVyCisgICAgICAgIGZvcm1hdChfT3V0X2l0ZXIgX19vdXQsIGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyX3R5cGUsIF9TdCwgX1NhPiYgX19mbXQsCisJICAgICAgIG1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzID0gcmVnZXhfY29uc3RhbnRzOjpmb3JtYXRfZGVmYXVsdCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBmb3JtYXQoX19vdXQsIF9fZm10LmRhdGEoKSwgX19mbXQuZGF0YSgpICsgX19mbXQuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgX19mbGFncyk7CisgICAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAcHJlICAgcmVhZHkoKSA9PSB0cnVlCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRfaXRlciwgdHlwZW5hbWUgX1N0LCB0eXBlbmFtZSBfU2E+CisgICAgICAgIGJhc2ljX3N0cmluZzxjaGFyX3R5cGUsIF9TdCwgX1NhPgorICAgICAgICBmb3JtYXQoY29uc3QgYmFzaWNfc3RyaW5nPGNoYXJfdHlwZSwgX1N0LCBfU2E+JiBfX2ZtdCwKKwkgICAgICAgbWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MgPSByZWdleF9jb25zdGFudHM6OmZvcm1hdF9kZWZhdWx0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgYmFzaWNfc3RyaW5nPGNoYXJfdHlwZSwgX1N0LCBfU2E+IF9fcmVzdWx0OworICAgICAgICAgIGZvcm1hdChzdGQ6OmJhY2tfaW5zZXJ0ZXIoX19yZXN1bHQpLCBfX2ZtdCwgX19mbGFncyk7CisgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQHByZSAgIHJlYWR5KCkgPT0gdHJ1ZQorICAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgZm9ybWF0KGNvbnN0IGNoYXJfdHlwZSogX19mbXQsCisJICAgICBtYXRjaF9mbGFnX3R5cGUgX19mbGFncyA9IHJlZ2V4X2NvbnN0YW50czo6Zm9ybWF0X2RlZmF1bHQpIGNvbnN0CisgICAgICB7CisgICAgICAgIHN0cmluZ190eXBlIF9fcmVzdWx0OworICAgICAgICBmb3JtYXQoc3RkOjpiYWNrX2luc2VydGVyKF9fcmVzdWx0KSwKKyAgICAgICAgICAgICAgIF9fZm10ICsgY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fZm10KSwKKyAgICAgICAgICAgICAgIF9fZmxhZ3MpOworICAgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgICB9CisKKyAgICAgIC8vQH0gCisKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgMTAuNSBBbGxvY2F0b3IKKyAgICAgICAqLworICAgICAgLy9AeyAKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhIGNvcHkgb2YgdGhlIGFsbG9jYXRvci4KKyAgICAgICAqLworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2VfdHlwZTo6Z2V0X2FsbG9jYXRvcigpOyB9CisgICAgICAKKyAgICAgIC8vQH0gCisKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgMTAuNiBTd2FwCisgICAgICAgKi8KKyAgICAgICAvL0B7IAorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTd2FwcyB0aGUgY29udGVudHMgb2YgdHdvIG1hdGNoX3Jlc3VsdHMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobWF0Y2hfcmVzdWx0cyYgX190aGF0KQorICAgICAgeyBfQmFzZV90eXBlOjpzd2FwKF9fdGhhdCk7IH0KKyAgICAgIC8vQH0gCisgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgZnJpZW5kIGNsYXNzIF9fZGV0YWlsOjpfU3BlY2lhbGl6ZWRSZXN1bHRzPF9CaV9pdGVyLCBfQWxsb2M+OworICAgIH07CisgIAorICB0eXBlZGVmIG1hdGNoX3Jlc3VsdHM8Y29uc3QgY2hhcio+ICAgICAgICAgICAgIGNtYXRjaDsKKyAgdHlwZWRlZiBtYXRjaF9yZXN1bHRzPHN0cmluZzo6Y29uc3RfaXRlcmF0b3I+ICBzbWF0Y2g7CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdHlwZWRlZiBtYXRjaF9yZXN1bHRzPGNvbnN0IHdjaGFyX3QqPiAgICAgICAgICB3Y21hdGNoOworICB0eXBlZGVmIG1hdGNoX3Jlc3VsdHM8d3N0cmluZzo6Y29uc3RfaXRlcmF0b3I+IHdzbWF0Y2g7CisjZW5kaWYKKworICAvLyBtYXRjaF9yZXN1bHRzIGNvbXBhcmlzb25zCisgIC8qKgorICAgKiBAYnJpZWYgQ29tcGFyZXMgdHdvIG1hdGNoX3Jlc3VsdHMgZm9yIGVxdWFsaXR5LgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyByZWZlciB0byB0aGUgc2FtZSBtYXRjaCwKKyAgICogZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jPiYgX19tMSwKKwkgICAgICAgY29uc3QgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jPiYgX19tMikKKyAgICB7CisgICAgICBpZiAoX19tMS5yZWFkeSgpICE9IF9fbTIucmVhZHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgaWYgKCFfX20xLnJlYWR5KCkpICAvLyBib3RoIGFyZSBub3QgcmVhZHkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBpZiAoX19tMS5lbXB0eSgpICE9IF9fbTIuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgaWYgKF9fbTEuZW1wdHkoKSkgICAvLyBib3RoIGFyZSBlbXB0eQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVybiBfX20xLnByZWZpeCgpID09IF9fbTIucHJlZml4KCkKKyAgICAgICAgJiYgX19tMS5zaXplKCkgPT0gX19tMi5zaXplKCkKKyAgICAgICAgJiYgc3RkOjplcXVhbChfX20xLmJlZ2luKCksIF9fbTEuZW5kKCksIF9fbTIuYmVnaW4oKSkKKyAgICAgICAgJiYgX19tMS5zdWZmaXgoKSA9PSBfX20yLnN1ZmZpeCgpOworICAgIH0KKworICAvKioKKyAgICogQGJyaWVmIENvbXBhcmVzIHR3byBtYXRjaF9yZXN1bHRzIGZvciBpbmVxdWFsaXR5LgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBkbyBub3QgcmVmZXIgdG8gdGhlIHNhbWUgbWF0Y2gsCisgICAqIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvYz4mIF9fbTEsCisJICAgICAgIGNvbnN0IG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvYz4mIF9fbTIpCisgICAgeyByZXR1cm4gIShfX20xID09IF9fbTIpOyB9CisKKyAgLy8gWzcuMTAuNl0gbWF0Y2hfcmVzdWx0cyBzd2FwCisgIC8qKgorICAgKiBAYnJpZWYgU3dhcHMgdHdvIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSBfX2xocyBBIG1hdGNoIHJlc3VsdC4KKyAgICogQHBhcmFtIF9fcmhzIEEgbWF0Y2ggcmVzdWx0LgorICAgKgorICAgKiBUaGUgY29udGVudHMgb2YgdGhlIHR3byBtYXRjaF9yZXN1bHRzIG9iamVjdHMgYXJlIHN3YXBwZWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChtYXRjaF9yZXN1bHRzPF9CaV9pdGVyLCBfQWxsb2M+JiBfX2xocywKKwkgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCisgIC8vIFs3LjExLjJdIEZ1bmN0aW9uIHRlbXBsYXRlIHJlZ2V4X21hdGNoCisgIC8qKgorICAgKiBAbmFtZSBNYXRjaGluZywgU2VhcmNoaW5nLCBhbmQgUmVwbGFjaW5nCisgICAqLworICAvL0B7CisKKyAgLyoqCisgICAqIEBicmllZiBEZXRlcm1pbmVzIGlmIHRoZXJlIGlzIGEgbWF0Y2ggYmV0d2VlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIEBwIGUKKyAgICogYW5kIGFsbCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIFtmaXJzdCwgbGFzdCkuCisgICAqCisgICAqIEBwYXJhbSBfX3MgICAgIFN0YXJ0IG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgdG8gbWF0Y2guCisgICAqIEBwYXJhbSBfX2UgICAgIE9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSB0byBtYXRjaC4KKyAgICogQHBhcmFtIF9fbSAgICAgVGhlIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSBfX3JlICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqIEBwYXJhbSBfX2ZsYWdzIENvbnRyb2xzIGhvdyB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQuCisgICAqCisgICAqIEByZXR2YWwgdHJ1ZSAgQSBtYXRjaCBleGlzdHMuCisgICAqIEByZXR2YWwgZmFsc2UgT3RoZXJ3aXNlLgorICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKgorICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgYm9vbAorICAgIHJlZ2V4X21hdGNoKF9CaV9pdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLAorICAgICAgICAgICAgICAgIF9CaV9pdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lLAorICAgICAgICAgICAgICAgIG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvYz4mICAgICBfX20sCisgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorICAgICAgICAgICAgICAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlICAgICAgICAgX19mbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsKKyAgICAgIF9fZGV0YWlsOjpfQXV0b21hdG9uUHRyIF9fYSA9IF9fcmUuX01fZ2V0X2F1dG9tYXRvbigpOworICAgICAgX19kZXRhaWw6Ol9BdXRvbWF0b246Ol9TaXplVCBfX3N6ID0gX19hLT5fTV9zdWJfY291bnQoKTsKKyAgICAgIF9fZGV0YWlsOjpfU3BlY2lhbGl6ZWRDdXJzb3I8X0JpX2l0ZXI+IF9fY3MoX19zLCBfX2UpOworICAgICAgX19kZXRhaWw6Ol9TcGVjaWFsaXplZFJlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvYz4gX19yKF9fc3osIF9fY3MsIF9fbSk7CisgICAgICBfX2RldGFpbDo6X0dyZXBfbWF0Y2hlciBfX21hdGNoZXIoX19jcywgX19yLCBfX2EsIF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9fbVswXS5tYXRjaGVkOworICAgIH0KKworICAvKioKKyAgICogQGJyaWVmIEluZGljYXRlcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhbGwgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBbZmlyc3QsIGxhc3QpLgorICAgKgorICAgKiBAcGFyYW0gX19maXJzdCBCZWdpbm5pbmcgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSB0byBtYXRjaC4KKyAgICogQHBhcmFtIF9fbGFzdCAgT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIHRvIG1hdGNoLgorICAgKiBAcGFyYW0gX19yZSAgICBUaGUgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gX19mbGFncyBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBib29sCisgICAgcmVnZXhfbWF0Y2goX0JpX2l0ZXIgX19maXJzdCwgX0JpX2l0ZXIgX19sYXN0LAorCQljb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fcmUsCisJCXJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyAKKyAgICAgIG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXI+IF9fd2hhdDsKKyAgICAgIHJldHVybiByZWdleF9tYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9fd2hhdCwgX19yZSwgX19mbGFncyk7CisgICAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICoKKyAgICogQHBhcmFtIF9fcyAgVGhlIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byBtYXRjaC4KKyAgICogQHBhcmFtIF9fbSAgVGhlIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSBfX3JlIFRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqIEBwYXJhbSBfX2YgIENvbnRyb2xzIGhvdyB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQuCisgICAqCisgICAqIEByZXR2YWwgdHJ1ZSAgQSBtYXRjaCBleGlzdHMuCisgICAqIEByZXR2YWwgZmFsc2UgT3RoZXJ3aXNlLgorICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X21hdGNoKGNvbnN0IF9DaF90eXBlKiBfX3MsCisJCW1hdGNoX3Jlc3VsdHM8Y29uc3QgX0NoX3R5cGUqLCBfQWxsb2M+JiBfX20sCisJCWNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19yZSwKKwkJcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mCisJCT0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X21hdGNoKF9fcywgX19zICsgX1J4X3RyYWl0czo6bGVuZ3RoKF9fcyksIF9fbSwgX19yZSwgX19mKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhIHN0cmluZy4KKyAgICoKKyAgICogQHBhcmFtIF9fcyAgICAgVGhlIHN0cmluZyB0byBtYXRjaC4KKyAgICogQHBhcmFtIF9fbSAgICAgVGhlIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSBfX3JlICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqIEBwYXJhbSBfX2ZsYWdzIENvbnRyb2xzIGhvdyB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQuCisgICAqCisgICAqIEByZXR2YWwgdHJ1ZSAgQSBtYXRjaCBleGlzdHMuCisgICAqIEByZXR2YWwgZmFsc2UgT3RoZXJ3aXNlLgorICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jLAorCSAgIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9tYXRjaChjb25zdCBiYXNpY19zdHJpbmc8X0NoX3R5cGUsIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fcywKKwkJbWF0Y2hfcmVzdWx0czx0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoX3R5cGUsIAorCQlfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+Ojpjb25zdF9pdGVyYXRvciwgX0FsbG9jPiYgX19tLAorCQljb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fcmUsCisJCXJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gcmVnZXhfbWF0Y2goX19zLmJlZ2luKCksIF9fcy5lbmQoKSwgX19tLCBfX3JlLCBfX2ZsYWdzKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5kaWNhdGVzIGlmIHRoZXJlIGlzIGEgbWF0Y2ggYmV0d2VlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIEBwIGUKKyAgICogYW5kIGEgQy1zdHlsZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgKgorICAgKiBAcGFyYW0gX19zICBUaGUgQy1zdHlsZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIG1hdGNoLgorICAgKiBAcGFyYW0gX19yZSBUaGUgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gX19mICBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlLCBjbGFzcyBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfbWF0Y2goY29uc3QgX0NoX3R5cGUqIF9fcywKKwkJY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQlyZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2YKKwkJPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gcmVnZXhfbWF0Y2goX19zLCBfX3MgKyBfUnhfdHJhaXRzOjpsZW5ndGgoX19zKSwgX19yZSwgX19mKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5kaWNhdGVzIGlmIHRoZXJlIGlzIGEgbWF0Y2ggYmV0d2VlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIEBwIGUKKyAgICogYW5kIGEgc3RyaW5nLgorICAgKgorICAgKiBAcGFyYW0gX19zICAgICBbSU5dIFRoZSBzdHJpbmcgdG8gbWF0Y2guCisgICAqIEBwYXJhbSBfX3JlICAgIFtJTl0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICogQHBhcmFtIF9fZmxhZ3MgW0lOXSBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9TdHJfYWxsb2NhdG9yLAorCSAgIHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfbWF0Y2goY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlLCBfQ2hfdHJhaXRzLCBfU3RyX2FsbG9jYXRvcj4mIF9fcywKKwkJY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQlyZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCT0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X21hdGNoKF9fcy5iZWdpbigpLCBfX3MuZW5kKCksIF9fcmUsIF9fZmxhZ3MpOyB9CisKKyAgLy8gWzcuMTEuM10gRnVuY3Rpb24gdGVtcGxhdGUgcmVnZXhfc2VhcmNoCisgIC8qKgorICAgKiBTZWFyY2hlcyBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aGluIGEgcmFuZ2UuCisgICAqIEBwYXJhbSBfX2ZpcnN0IFtJTl0gIFRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHRvIHNlYXJjaC4KKyAgICogQHBhcmFtIF9fbGFzdCAgW0lOXSAgT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgc3RyaW5nIHRvIHNlYXJjaC4KKyAgICogQHBhcmFtIF9fbSAgICAgW09VVF0gVGhlIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSBfX3JlICAgIFtJTl0gIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICogQHBhcmFtIF9fZmxhZ3MgW0lOXSAgU2VhcmNoIHBvbGljeSBmbGFncy4KKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQHJldHZhbCBmYWxzZSBObyBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcsIHRoZSBjb250ZW50IG9mICVtIGlzCisgICAqICAgICAgICAgICAgICAgdW5kZWZpbmVkLgorICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKgorICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9zZWFyY2goX0JpX2l0ZXIgX19maXJzdCwgX0JpX2l0ZXIgX19sYXN0LAorCQkgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jPiYgX19tLAorCQkgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQkgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mbGFncworCQkgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gZmFsc2U7IH0KKworICAvKioKKyAgICogU2VhcmNoZXMgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIHJhbmdlLgorICAgKiBAcGFyYW0gX19maXJzdCBbSU5dICBUaGUgc3RhcnQgb2YgdGhlIHN0cmluZyB0byBzZWFyY2guCisgICAqIEBwYXJhbSBfX2xhc3QgIFtJTl0gIE9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIHN0cmluZyB0byBzZWFyY2guCisgICAqIEBwYXJhbSBfX3JlICAgIFtJTl0gIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICogQHBhcmFtIF9fZmxhZ3MgW0lOXSAgU2VhcmNoIHBvbGljeSBmbGFncy4KKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQHJldHZhbCBmYWxzZSBObyBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcuCisgICAqIEBkb2N0b2RvCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9zZWFyY2goX0JpX2l0ZXIgX19maXJzdCwgX0JpX2l0ZXIgX19sYXN0LAorCQkgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQkgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mbGFncworCQkgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeworICAgICAgbWF0Y2hfcmVzdWx0czxfQmlfaXRlcj4gX193aGF0OworICAgICAgcmV0dXJuIHJlZ2V4X3NlYXJjaChfX2ZpcnN0LCBfX2xhc3QsIF9fd2hhdCwgX19yZSwgX19mbGFncyk7CisgICAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgU2VhcmNoZXMgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIEMtc3RyaW5nLgorICAgKiBAcGFyYW0gX19zIFtJTl0gIEEgQy1zdHJpbmcgdG8gc2VhcmNoIGZvciB0aGUgcmVnZXguCisgICAqIEBwYXJhbSBfX20gW09VVF0gVGhlIHNldCBvZiByZWdleCBtYXRjaGVzLgorICAgKiBAcGFyYW0gX19lIFtJTl0gIFRoZSByZWdleCB0byBzZWFyY2ggZm9yIGluIEBwIHMuCisgICAqIEBwYXJhbSBfX2YgW0lOXSAgVGhlIHNlYXJjaCBmbGFncy4KKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQHJldHZhbCBmYWxzZSBObyBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcsIHRoZSBjb250ZW50IG9mICVtIGlzCisgICAqICAgICAgICAgICAgICAgdW5kZWZpbmVkLgorICAgKiBAZG9jdG9kbworICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGUsIGNsYXNzIF9BbGxvYywgY2xhc3MgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X3NlYXJjaChjb25zdCBfQ2hfdHlwZSogX19zLAorCQkgbWF0Y2hfcmVzdWx0czxjb25zdCBfQ2hfdHlwZSosIF9BbGxvYz4mIF9fbSwKKwkJIGNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19lLAorCQkgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mCisJCSA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCkKKyAgICB7IHJldHVybiByZWdleF9zZWFyY2goX19zLCBfX3MgKyBfUnhfdHJhaXRzOjpsZW5ndGgoX19zKSwgX19tLCBfX2UsIF9fZik7IH0KKworICAvKioKKyAgICogQGJyaWVmIFNlYXJjaGVzIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSBDLXN0cmluZy4KKyAgICogQHBhcmFtIF9fcyBbSU5dICBUaGUgQy1zdHJpbmcgdG8gc2VhcmNoLgorICAgKiBAcGFyYW0gX19lIFtJTl0gIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICogQHBhcmFtIF9fZiBbSU5dICBTZWFyY2ggcG9saWN5IGZsYWdzLgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLgorICAgKiBAcmV0dmFsIGZhbHNlIE5vIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQGRvY3RvZG8KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfc2VhcmNoKGNvbnN0IF9DaF90eXBlKiBfX3MsCisJCSBjb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fZSwKKwkJIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZgorCQkgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gcmVnZXhfc2VhcmNoKF9fcywgX19zICsgX1J4X3RyYWl0czo6bGVuZ3RoKF9fcyksIF9fZSwgX19mKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgU2VhcmNoZXMgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIHN0cmluZy4KKyAgICogQHBhcmFtIF9fcyAgICAgW0lOXSAgVGhlIHN0cmluZyB0byBzZWFyY2guCisgICAqIEBwYXJhbSBfX2UgICAgIFtJTl0gIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICogQHBhcmFtIF9fZmxhZ3MgW0lOXSAgU2VhcmNoIHBvbGljeSBmbGFncy4KKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQHJldHZhbCBmYWxzZSBObyBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcuCisgICAqIEBkb2N0b2RvCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfU3RyaW5nX2FsbG9jYXRvciwKKwkgICB0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X3NlYXJjaChjb25zdCBiYXNpY19zdHJpbmc8X0NoX3R5cGUsIF9DaF90cmFpdHMsCisJCSBfU3RyaW5nX2FsbG9jYXRvcj4mIF9fcywKKwkJIGNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19lLAorCQkgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mbGFncworCQkgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gcmVnZXhfc2VhcmNoKF9fcy5iZWdpbigpLCBfX3MuZW5kKCksIF9fZSwgX19mbGFncyk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFNlYXJjaGVzIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSBzdHJpbmcuCisgICAqIEBwYXJhbSBfX3MgW0lOXSAgQSBDKysgc3RyaW5nIHRvIHNlYXJjaCBmb3IgdGhlIHJlZ2V4LgorICAgKiBAcGFyYW0gX19tIFtPVVRdIFRoZSBzZXQgb2YgcmVnZXggbWF0Y2hlcy4KKyAgICogQHBhcmFtIF9fZSBbSU5dICBUaGUgcmVnZXggdG8gc2VhcmNoIGZvciBpbiBAcCBzLgorICAgKiBAcGFyYW0gX19mIFtJTl0gIFRoZSBzZWFyY2ggZmxhZ3MuCisgICAqIEByZXR2YWwgdHJ1ZSAgQSBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcuCisgICAqIEByZXR2YWwgZmFsc2UgTm8gbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLCB0aGUgY29udGVudCBvZiAlbSBpcworICAgKiAgICAgICAgICAgICAgIHVuZGVmaW5lZC4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYywKKwkgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9DaF90eXBlLAorCSAgIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9zZWFyY2goY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3MsCisJCSBtYXRjaF9yZXN1bHRzPHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwKKwkJIF9DaF90cmFpdHMsIF9DaF9hbGxvYz46OmNvbnN0X2l0ZXJhdG9yLCBfQWxsb2M+JiBfX20sCisJCSBjb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fZSwKKwkJIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZgorCQkgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gcmVnZXhfc2VhcmNoKF9fcy5iZWdpbigpLCBfX3MuZW5kKCksIF9fbSwgX19lLCBfX2YpOyB9CisKKyAgLy8gc3RkIFsyOC4xMS40XSBGdW5jdGlvbiB0ZW1wbGF0ZSByZWdleF9yZXBsYWNlCisgIC8qKgorICAgKiBAZG9jdG9kbworICAgKiBAcGFyYW0gX19vdXQKKyAgICogQHBhcmFtIF9fZmlyc3QKKyAgICogQHBhcmFtIF9fbGFzdAorICAgKiBAcGFyYW0gX19lCisgICAqIEBwYXJhbSBfX2ZtdAorICAgKiBAcGFyYW0gX19mbGFncworICAgKgorICAgKiBAcmV0dXJucyBvdXQKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICoKKyAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0X2l0ZXIsIHR5cGVuYW1lIF9CaV9pdGVyLAorCSAgIHR5cGVuYW1lIF9SeF90cmFpdHMsIHR5cGVuYW1lIF9DaF90eXBlPgorICAgIGlubGluZSBfT3V0X2l0ZXIKKyAgICByZWdleF9yZXBsYWNlKF9PdXRfaXRlciBfX291dCwgX0JpX2l0ZXIgX19maXJzdCwgX0JpX2l0ZXIgX19sYXN0LAorCQkgIGNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19lLAorCQkgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZT4mIF9fZm10LAorCQkgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJICA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCkKKyAgICB7IHJldHVybiBfX291dDsgfQorCisgIC8qKgorICAgKiBAZG9jdG9kbworICAgKiBAcGFyYW0gX19zCisgICAqIEBwYXJhbSBfX2UKKyAgICogQHBhcmFtIF9fZm10CisgICAqIEBwYXJhbSBfX2ZsYWdzCisgICAqCisgICAqIEByZXR1cm5zIGEgY29weSBvZiBzdHJpbmcgQHAgcyB3aXRoIHJlcGxhY2VtZW50cy4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SeF90cmFpdHMsIHR5cGVuYW1lIF9DaF90eXBlPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoX3R5cGU+CisgICAgcmVnZXhfcmVwbGFjZShjb25zdCBiYXNpY19zdHJpbmc8X0NoX3R5cGU+JiBfX3MsCisJCSAgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2UsCisJCSAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlPiYgX19mbXQsCisJCSAgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mbGFncworCQkgID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsKKyAgICAgIGJhc2ljX3N0cmluZzxfQ2hfdHlwZT4gX19yZXN1bHQ7CisgICAgICByZWdleF9yZXBsYWNlKHN0ZDo6YmFja19pbnNlcnRlcihfX3Jlc3VsdCksCisJCSAgICBfX3MuYmVnaW4oKSwgX19zLmVuZCgpLCBfX2UsIF9fZm10LCBfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLy9AfQorCisgIC8vIHN0ZCBbMjguMTJdIENsYXNzIHRlbXBsYXRlIHJlZ2V4X2l0ZXJhdG9yCisgIC8qKgorICAgKiBBbiBpdGVyYXRvciBhZGFwdG9yIHRoYXQgd2lsbCBwcm92aWRlIHJlcGVhdGVkIGNhbGxzIG9mIHJlZ2V4X3NlYXJjaCBvdmVyIAorICAgKiBhIHJhbmdlIHVudGlsIG5vIG1vcmUgbWF0Y2hlcyByZW1haW4uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwKKwkgICB0eXBlbmFtZSBfQ2hfdHlwZSA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgdHlwZW5hbWUgX1J4X3RyYWl0cyA9IHJlZ2V4X3RyYWl0czxfQ2hfdHlwZT4gPgorICAgIGNsYXNzIHJlZ2V4X2l0ZXJhdG9yCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+ICByZWdleF90eXBlOworICAgICAgdHlwZWRlZiBtYXRjaF9yZXN1bHRzPF9CaV9pdGVyPiAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBQcm92aWRlcyBhIHNpbmd1bGFyIGl0ZXJhdG9yLCB1c2VmdWwgZm9yIGluZGljYXRpbmcKKyAgICAgICAqIG9uZS1wYXN0LXRoZS1lbmQgb2YgYSByYW5nZS4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3IoKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJXJlZ2V4X2l0ZXJhdG9yLi4uCisgICAgICAgKiBAcGFyYW0gX19hICBbSU5dIFRoZSBzdGFydCBvZiBhIHRleHQgcmFuZ2UgdG8gc2VhcmNoLgorICAgICAgICogQHBhcmFtIF9fYiAgW0lOXSBPbmUtcGFzdC10aGUtZW5kIG9mIHRoZSB0ZXh0IHJhbmdlIHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBfX3JlIFtJTl0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaC4KKyAgICAgICAqIEBwYXJhbSBfX20gIFtJTl0gUG9saWN5IGZsYWdzIGZvciBtYXRjaCBydWxlcy4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3IoX0JpX2l0ZXIgX19hLCBfQmlfaXRlciBfX2IsIGNvbnN0IHJlZ2V4X3R5cGUmIF9fcmUsCisJCSAgICAgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19tCisJCSAgICAgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpOworCisgICAgICAvKioKKyAgICAgICAqIENvcHkgY29uc3RydWN0cyBhICVyZWdleF9pdGVyYXRvci4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3IoY29uc3QgcmVnZXhfaXRlcmF0b3ImIF9fcmhzKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqIEBkb2N0b2RvCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHJlZ2V4X2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHJlZ2V4X2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IHJlZ2V4X2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICBjb25zdCB2YWx1ZV90eXBlJgorICAgICAgb3BlcmF0b3IqKCk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICBjb25zdCB2YWx1ZV90eXBlKgorICAgICAgb3BlcmF0b3ItPigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICByZWdleF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpOworICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIHRoZXNlIG1lbWJlcnMgYXJlIHNob3duIGZvciBleHBvc2l0aW9uIG9ubHk6CisgICAgICBfQmlfaXRlciAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjsKKyAgICAgIF9CaV9pdGVyICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsKKyAgICAgIGNvbnN0IHJlZ2V4X3R5cGUqICAgICAgICAgICAgICAgIHByZWdleDsKKyAgICAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIGZsYWdzOworICAgICAgbWF0Y2hfcmVzdWx0czxfQmlfaXRlcj4gICAgICAgICAgbWF0Y2g7CisgICAgfTsKKyAgCisgIHR5cGVkZWYgcmVnZXhfaXRlcmF0b3I8Y29uc3QgY2hhcio+ICAgICAgICAgICAgIGNyZWdleF9pdGVyYXRvcjsKKyAgdHlwZWRlZiByZWdleF9pdGVyYXRvcjxzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiAgc3JlZ2V4X2l0ZXJhdG9yOworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHR5cGVkZWYgcmVnZXhfaXRlcmF0b3I8Y29uc3Qgd2NoYXJfdCo+ICAgICAgICAgIHdjcmVnZXhfaXRlcmF0b3I7CisgIHR5cGVkZWYgcmVnZXhfaXRlcmF0b3I8d3N0cmluZzo6Y29uc3RfaXRlcmF0b3I+IHdzcmVnZXhfaXRlcmF0b3I7CisjZW5kaWYKKworICAvLyBbNy4xMi4yXSBDbGFzcyB0ZW1wbGF0ZSByZWdleF90b2tlbl9pdGVyYXRvcgorICAvKioKKyAgICogSXRlcmF0ZXMgb3ZlciBzdWJtYXRjaGVzIGluIGEgcmFuZ2UgKG9yIEBhIHNwbGl0cyBhIHRleHQgc3RyaW5nKS4KKyAgICoKKyAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpdGVyYXRvciBpcyB0byBlbnVtZXJhdGUgYWxsLCBvciBhbGwgc3BlY2lmaWVkLAorICAgKiBtYXRjaGVzIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIHRleHQgcmFuZ2UuICBUaGUgZGVyZWZlcmVuY2VkCisgICAqIHZhbHVlIG9mIGFuIGl0ZXJhdG9yIG9mIHRoaXMgY2xhc3MgaXMgYSBzdGQ6OnN1Yl9tYXRjaCBvYmplY3QuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwKKwkgICB0eXBlbmFtZSBfQ2hfdHlwZSA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgdHlwZW5hbWUgX1J4X3RyYWl0cyA9IHJlZ2V4X3RyYWl0czxfQ2hfdHlwZT4gPgorICAgIGNsYXNzIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+IHJlZ2V4X3R5cGU7CisgICAgICB0eXBlZGVmIHN1Yl9tYXRjaDxfQmlfaXRlcj4gICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRGVmYXVsdCBjb25zdHJ1Y3RzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiAKKyAgICAgICAqIEEgZGVmYXVsdC1jb25zdHJ1Y3RlZCAlcmVnZXhfdG9rZW5faXRlcmF0b3IgaXMgYSBzaW5ndWxhciBpdGVyYXRvcgorICAgICAgICogdGhhdCB3aWxsIGNvbXBhcmUgZXF1YWwgdG8gdGhlIG9uZS1wYXN0LXRoZS1lbmQgdmFsdWUgZm9yIGFueQorICAgICAgICogaXRlcmF0b3Igb2YgdGhlIHNhbWUgdHlwZS4KKyAgICAgICAqLworICAgICAgcmVnZXhfdG9rZW5faXRlcmF0b3IoKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLi4uCisgICAgICAgKiBAcGFyYW0gX19hICAgICAgICAgIFtJTl0gVGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBfX2IgICAgICAgICAgW0lOXSBPbmUtcGFzdC10aGUtZW5kIG9mIHRoZSB0ZXh0IHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBfX3JlICAgICAgICAgW0lOXSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiBAcGFyYW0gX19zdWJtYXRjaCAgIFtJTl0gV2hpY2ggc3VibWF0Y2ggdG8gcmV0dXJuLiAgVGhlcmUgYXJlIHNvbWUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCB2YWx1ZXMgZm9yIHRoaXMgcGFyYW1ldGVyOgorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAtIC0xIGVhY2ggZW51bWVyYXRlZCBzdWJleHByZXNzaW9uIGRvZXMgTk9UCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAoYWthIGZpZWxkCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nKQorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAtIDAgdGhlIGVudGlyZSBzdHJpbmcgbWF0Y2hpbmcgdGhlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZXhwcmVzc2lvbiBpcyByZXR1cm5lZCBmb3IgZWFjaCBtYXRjaAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgdGV4dC4KKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgLSA+MCBlbnVtZXJhdGVzIG9ubHkgdGhlIGluZGljYXRlZAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmV4cHJlc3Npb24gZnJvbSBhIG1hdGNoIHdpdGhpbiB0aGUgdGV4dC4KKyAgICAgICAqIEBwYXJhbSBfX20gICAgICAgICAgW0lOXSBQb2xpY3kgZmxhZ3MgZm9yIG1hdGNoIHJ1bGVzLgorICAgICAgICoKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfdG9rZW5faXRlcmF0b3IoX0JpX2l0ZXIgX19hLCBfQmlfaXRlciBfX2IsIGNvbnN0IHJlZ2V4X3R5cGUmIF9fcmUsCisJCQkgICBpbnQgX19zdWJtYXRjaCA9IDAsCisJCQkgICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX20KKwkJCSAgID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KTsKKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLi4uCisgICAgICAgKiBAcGFyYW0gX19hICAgICAgICAgIFtJTl0gVGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBfX2IgICAgICAgICAgW0lOXSBPbmUtcGFzdC10aGUtZW5kIG9mIHRoZSB0ZXh0IHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBfX3JlICAgICAgICAgW0lOXSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiBAcGFyYW0gX19zdWJtYXRjaGVzIFtJTl0gQSBsaXN0IG9mIHN1YmV4cHJlc3Npb25zIHRvIHJldHVybiBmb3IgZWFjaAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggd2l0aGluIHRoZSB0ZXh0LgorICAgICAgICogQHBhcmFtIF9fbSAgICAgICAgICBbSU5dIFBvbGljeSBmbGFncyBmb3IgbWF0Y2ggcnVsZXMuCisgICAgICAgKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvcihfQmlfaXRlciBfX2EsIF9CaV9pdGVyIF9fYiwKKwkJCSAgIGNvbnN0IHJlZ2V4X3R5cGUmIF9fcmUsCisJCQkgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBfX3N1Ym1hdGNoZXMsCisJCQkgICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX20KKwkJCSAgICAgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpOworCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuLi4KKyAgICAgICAqIEBwYXJhbSBfX2EgICAgICAgICAgW0lOXSBUaGUgc3RhcnQgb2YgdGhlIHRleHQgdG8gc2VhcmNoLgorICAgICAgICogQHBhcmFtIF9fYiAgICAgICAgICBbSU5dIE9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIHRleHQgdG8gc2VhcmNoLgorICAgICAgICogQHBhcmFtIF9fcmUgICAgICAgICBbSU5dIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICAgICAqIEBwYXJhbSBfX3N1Ym1hdGNoZXMgW0lOXSBBIGxpc3Qgb2Ygc3ViZXhwcmVzc2lvbnMgdG8gcmV0dXJuIGZvciBlYWNoCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIHdpdGhpbiB0aGUgdGV4dC4KKyAgICAgICAqIEBwYXJhbSBfX20gICAgICAgICAgW0lOXSBQb2xpY3kgZmxhZ3MgZm9yIG1hdGNoIHJ1bGVzLgorICAgICAgIAorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfTm0+CisgICAgICAgIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yKF9CaV9pdGVyIF9fYSwgX0JpX2l0ZXIgX19iLAorCQkJICAgICBjb25zdCByZWdleF90eXBlJiBfX3JlLAorCQkJICAgICBjb25zdCBpbnQgKCZfX3N1Ym1hdGNoZXMpW19ObV0sCisJCQkgICAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fbQorCQkJICAgICA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvcHkgY29uc3RydWN0cyBhICVyZWdleF90b2tlbl9pdGVyYXRvci4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBbSU5dIEEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yIHRvIGNvcHkuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgcmVnZXhfdG9rZW5faXRlcmF0b3IoY29uc3QgcmVnZXhfdG9rZW5faXRlcmF0b3ImIF9fcmhzKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyBhICVyZWdleF90b2tlbl9pdGVyYXRvciB0byBhbm90aGVyLgorICAgICAgICogQHBhcmFtIF9fcmhzIFtJTl0gQSAlcmVnZXhfdG9rZW5faXRlcmF0b3IgdG8gY29weS4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCByZWdleF90b2tlbl9pdGVyYXRvciYgX19yaHMpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb21wYXJlcyBhICVyZWdleF90b2tlbl9pdGVyYXRvciB0byBhbm90aGVyIGZvciBlcXVhbGl0eS4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHJlZ2V4X3Rva2VuX2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yIHRvIGFub3RoZXIgZm9yIGluZXF1YWxpdHkuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCByZWdleF90b2tlbl9pdGVyYXRvciYgX19yaHMpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEZXJlZmVyZW5jZXMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgY29uc3QgdmFsdWVfdHlwZSYKKyAgICAgIG9wZXJhdG9yKigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZWxlY3RzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yIG1lbWJlci4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdCB2YWx1ZV90eXBlKgorICAgICAgb3BlcmF0b3ItPigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbmNyZW1lbnRzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBQb3N0aW5jcmVtZW50cyBhICVyZWdleF90b2tlbl9pdGVyYXRvci4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpOworICAgICAgCisgICAgcHJpdmF0ZTogLy8gZGF0YSBtZW1iZXJzIGZvciBleHBvc2l0aW9uIG9ubHk6CisgICAgICB0eXBlZGVmIHJlZ2V4X2l0ZXJhdG9yPF9CaV9pdGVyLCBfQ2hfdHlwZSwgX1J4X3RyYWl0cz4gcG9zaXRpb25faXRlcmF0b3I7CisKKyAgICAgIHBvc2l0aW9uX2l0ZXJhdG9yIF9fcG9zaXRpb247CisgICAgICBjb25zdCB2YWx1ZV90eXBlKiBfX3Jlc3VsdDsKKyAgICAgIHZhbHVlX3R5cGUgICAgICAgIF9fc3VmZml4OworICAgICAgc3RkOjpzaXplX3QgICAgICAgX19uOworICAgICAgc3RkOjp2ZWN0b3I8aW50PiAgX19zdWJzOworICAgIH07CisKKyAgLyoqIEBicmllZiBUb2tlbiBpdGVyYXRvciBmb3IgQy1zdHlsZSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5ncy4gKi8KKyAgdHlwZWRlZiByZWdleF90b2tlbl9pdGVyYXRvcjxjb25zdCBjaGFyKj4gICAgICAgICAgICAgY3JlZ2V4X3Rva2VuX2l0ZXJhdG9yOworCisgIC8qKiBAYnJpZWYgVG9rZW4gaXRlcmF0b3IgZm9yIHN0YW5kYXJkIHN0cmluZ3MuICovCisgIHR5cGVkZWYgcmVnZXhfdG9rZW5faXRlcmF0b3I8c3RyaW5nOjpjb25zdF9pdGVyYXRvcj4gIHNyZWdleF90b2tlbl9pdGVyYXRvcjsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIC8qKiBAYnJpZWYgVG9rZW4gaXRlcmF0b3IgZm9yIEMtc3R5bGUgTlVMTC10ZXJtaW5hdGVkIHdpZGUgc3RyaW5ncy4gKi8KKyAgdHlwZWRlZiByZWdleF90b2tlbl9pdGVyYXRvcjxjb25zdCB3Y2hhcl90Kj4gICAgICAgICAgd2NyZWdleF90b2tlbl9pdGVyYXRvcjsKKworICAvKiogQGJyaWVmIFRva2VuIGl0ZXJhdG9yIGZvciBzdGFuZGFyZCB3aWRlLWNoYXJhY3RlciBzdHJpbmdzLiAqLworICB0eXBlZGVmIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yPHdzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiB3c3JlZ2V4X3Rva2VuX2l0ZXJhdG9yOworI2VuZGlmCisgIAorICAvL0B9IC8vIGdyb3VwIHJlZ2V4CitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9jb21waWxlci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4X2NvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlMDk0OAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9jb21waWxlci5oCkBAIC0wLDAgKzEsMTExMCBAQAorLy8gY2xhc3MgdGVtcGxhdGUgcmVnZXggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiAgQGZpbGUgYml0cy9yZWdleF9jb21waWxlci5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7cmVnZXh9CisgKi8KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19kZXRhaWwKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHJlZ2V4LWRldGFpbAorICAgKiBAeworICAgKi8KKworICAvLy8gQmFzZSBjbGFzcyBmb3Igc2Nhbm5lci4KKyAgc3RydWN0IF9TY2FubmVyX2Jhc2UKKyAgeworICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IF9TdGF0ZVQ7CisKKyAgICBzdGF0aWMgY29uc3RleHByIF9TdGF0ZVQgX1Nfc3RhdGVfYXRfc3RhcnQgICAgPSAxIDw8IDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBfU3RhdGVUIF9TX3N0YXRlX2luX2JyYWNlICAgID0gMSA8PCAyOworICAgIHN0YXRpYyBjb25zdGV4cHIgX1N0YXRlVCBfU19zdGF0ZV9pbl9icmFja2V0ICA9IDEgPDwgMzsKKworICAgIHZpcnR1YWwgfl9TY2FubmVyX2Jhc2UoKSB7IH07CisgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBzdHJ1Y3QgX1NjYW5uZXIuIFNjYW5zIGFuIGlucHV0IHJhbmdlIGZvciByZWdleCB0b2tlbnMuCisgICAqCisgICAqIFRoZSAlX1NjYW5uZXIgY2xhc3MgaW50ZXJwcmV0cyB0aGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gaW4KKyAgICogdGhlIGlucHV0IHJhbmdlIHBhc3NlZCB0byBpdHMgY29uc3RydWN0b3IgYXMgYSBzZXF1ZW5jZSBvZiBwYXJzZQorICAgKiB0b2tlbnMgcGFzc2VkIHRvIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY29tcGlsZXIuICBUaGUgc2VxdWVuY2UKKyAgICogb2YgdG9rZW5zIHByb3ZpZGVkIGRlcGVuZHMgb24gdGhlIGZsYWcgc2V0dGluZ3MgcGFzc2VkIHRvIHRoZQorICAgKiBjb25zdHJ1Y3RvcjogZGlmZmVyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBncmFtbWFycyB3aWxsIGludGVycHJldAorICAgKiB0aGUgc2FtZSBpbnB1dCBwYXR0ZXJuIGluIHN5bnRhY3RpY2FsbHkgZGlmZmVyZW50IHdheXMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBjbGFzcyBfU2Nhbm5lcjogcHVibGljIF9TY2FubmVyX2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfSW5wdXRJdGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JUOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3JUPjo6dmFsdWVfdHlwZSBfQ2hhclQ7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TdHJpbmdUOworICAgICAgdHlwZWRlZiByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSAgICAgICAgICAgICAgICAgICBfRmxhZ1Q7CisgICAgICB0eXBlZGVmIGNvbnN0IHN0ZDo6Y3R5cGU8X0NoYXJUPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DdHlwZVQ7CisKKyAgICAgIC8vLyBUb2tlbiB0eXBlcyByZXR1cm5lZCBmcm9tIHRoZSBzY2FubmVyLgorICAgICAgZW51bSBfVG9rZW5UCisgICAgICB7CisJX1NfdG9rZW5fYW55Y2hhciwKKwlfU190b2tlbl9iYWNrcmVmLAorCV9TX3Rva2VuX2JyYWNrZXRfYmVnaW4sCisJX1NfdG9rZW5fYnJhY2tldF9lbmQsCisJX1NfdG9rZW5faW52ZXJzZV9jbGFzcywKKwlfU190b2tlbl9jaGFyX2NsYXNzX25hbWUsCisJX1NfdG9rZW5fY2xvc3VyZTAsCisJX1NfdG9rZW5fY2xvc3VyZTEsCisJX1NfdG9rZW5fY29sbGVsZW1fbXVsdGksCisJX1NfdG9rZW5fY29sbGVsZW1fc2luZ2xlLAorCV9TX3Rva2VuX2NvbGxzeW1ib2wsCisJX1NfdG9rZW5fY29tbWEsCisJX1NfdG9rZW5fZGFzaCwKKwlfU190b2tlbl9kdXBfY291bnQsCisJX1NfdG9rZW5fZW9mLAorCV9TX3Rva2VuX2VxdWl2X2NsYXNzX25hbWUsCisJX1NfdG9rZW5faW50ZXJ2YWxfYmVnaW4sCisJX1NfdG9rZW5faW50ZXJ2YWxfZW5kLAorCV9TX3Rva2VuX2xpbmVfYmVnaW4sCisJX1NfdG9rZW5fbGluZV9lbmQsCisJX1NfdG9rZW5fb3B0LAorCV9TX3Rva2VuX29yLAorCV9TX3Rva2VuX29yZF9jaGFyLAorCV9TX3Rva2VuX3F1b3RlZF9jaGFyLAorCV9TX3Rva2VuX3N1YmV4cHJfYmVnaW4sCisJX1NfdG9rZW5fc3ViZXhwcl9lbmQsCisJX1NfdG9rZW5fd29yZF9iZWdpbiwKKwlfU190b2tlbl93b3JkX2VuZCwKKwlfU190b2tlbl91bmtub3duCisgICAgICB9OworCisgICAgICBfU2Nhbm5lcihfSXRlcmF0b3JUIF9fYmVnaW4sIF9JdGVyYXRvclQgX19lbmQsIF9GbGFnVCBfX2ZsYWdzLAorCSAgICAgICBzdGQ6OmxvY2FsZSBfX2xvYykKKyAgICAgIDogX01fY3VycmVudChfX2JlZ2luKSAsIF9NX2VuZChfX2VuZCkgLCBfTV9mbGFncyhfX2ZsYWdzKSwKKyAgICAgICAgX01fY3R5cGUoc3RkOjp1c2VfZmFjZXQ8X0N0eXBlVD4oX19sb2MpKSwgX01fc3RhdGUoX1Nfc3RhdGVfYXRfc3RhcnQpCisgICAgICB7IF9NX2FkdmFuY2UoKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9hZHZhbmNlKCk7CisKKyAgICAgIF9Ub2tlblQKKyAgICAgIF9NX3Rva2VuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1clRva2VuOyB9CisKKyAgICAgIGNvbnN0IF9TdHJpbmdUJgorICAgICAgX01fdmFsdWUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VyVmFsdWU7IH0KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICBzdGQ6Om9zdHJlYW0mCisgICAgICBfTV9wcmludChzdGQ6Om9zdHJlYW0mKTsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2VhdF9lc2NhcGUoKTsKKworICAgICAgdm9pZAorICAgICAgX01fc2Nhbl9pbl9icmFjZSgpOworCisgICAgICB2b2lkCisgICAgICBfTV9zY2FuX2luX2JyYWNrZXQoKTsKKworICAgICAgdm9pZAorICAgICAgX01fZWF0X2NoYXJjbGFzcygpOworCisgICAgICB2b2lkCisgICAgICBfTV9lYXRfZXF1aXZjbGFzcygpOworCisgICAgICB2b2lkCisgICAgICBfTV9lYXRfY29sbHN5bWJvbCgpOworCisgICAgICBfSXRlcmF0b3JUICBfTV9jdXJyZW50OworICAgICAgX0l0ZXJhdG9yVCAgX01fZW5kOworICAgICAgX0ZsYWdUICAgICAgX01fZmxhZ3M7CisgICAgICBfQ3R5cGVUJiAgICBfTV9jdHlwZTsKKyAgICAgIF9Ub2tlblQgICAgIF9NX2N1clRva2VuOworICAgICAgX1N0cmluZ1QgICAgX01fY3VyVmFsdWU7CisgICAgICBfU3RhdGVUICAgICBfTV9zdGF0ZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfU2Nhbm5lcjxfSW5wdXRJdGVyYXRvcj46OgorICAgIF9NX2FkdmFuY2UoKQorICAgIHsKKyAgICAgIGlmIChfTV9jdXJyZW50ID09IF9NX2VuZCkKKwl7CisJICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2VvZjsKKwkgIHJldHVybjsKKwl9CisKKyAgICAgIF9DaGFyVCBfX2MgPSAqX01fY3VycmVudDsKKyAgICAgIGlmIChfTV9zdGF0ZSAmIF9TX3N0YXRlX2luX2JyYWNrZXQpCisJeworCSAgX01fc2Nhbl9pbl9icmFja2V0KCk7CisJICByZXR1cm47CisJfQorICAgICAgaWYgKF9NX3N0YXRlICYgX1Nfc3RhdGVfaW5fYnJhY2UpCisJeworCSAgX01fc2Nhbl9pbl9icmFjZSgpOworCSAgcmV0dXJuOworCX0KKyNpZiAwCisgICAgICAvLyBUT0RPOiByZS1lbmFibGUgbGluZSBhbmNob3JzIHdoZW4gX01fYXNzZXJ0aW9uIGlzIGltcGxlbWVudGVkLgorICAgICAgLy8gU2VlIFBSIGxpYnN0ZGMrKy80NzcyNAorICAgICAgZWxzZSBpZiAoX01fc3RhdGUgJiBfU19zdGF0ZV9hdF9zdGFydCAmJiBfX2MgPT0gX01fY3R5cGUud2lkZW4oJ14nKSkKKwl7CisJICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2xpbmVfYmVnaW47CisJICArK19NX2N1cnJlbnQ7CisJICByZXR1cm47CisJfQorICAgICAgZWxzZSBpZiAoX19jID09IF9NX2N0eXBlLndpZGVuKCckJykpCisJeworCSAgX01fY3VyVG9rZW4gPSBfU190b2tlbl9saW5lX2VuZDsKKwkgICsrX01fY3VycmVudDsKKwkgIHJldHVybjsKKwl9CisjZW5kaWYKKyAgICAgIGVsc2UgaWYgKF9fYyA9PSBfTV9jdHlwZS53aWRlbignLicpKQorCXsKKwkgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fYW55Y2hhcjsKKwkgICsrX01fY3VycmVudDsKKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlIGlmIChfX2MgPT0gX01fY3R5cGUud2lkZW4oJyonKSkKKwl7CisJICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2Nsb3N1cmUwOworCSAgKytfTV9jdXJyZW50OworCSAgcmV0dXJuOworCX0KKyAgICAgIGVsc2UgaWYgKF9fYyA9PSBfTV9jdHlwZS53aWRlbignKycpKQorCXsKKwkgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fY2xvc3VyZTE7CisJICArK19NX2N1cnJlbnQ7CisJICByZXR1cm47CisJfQorICAgICAgZWxzZSBpZiAoX19jID09IF9NX2N0eXBlLndpZGVuKCd8JykpCisJeworCSAgX01fY3VyVG9rZW4gPSBfU190b2tlbl9vcjsKKwkgICsrX01fY3VycmVudDsKKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlIGlmIChfX2MgPT0gX01fY3R5cGUud2lkZW4oJ1snKSkKKwl7CisJICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2JyYWNrZXRfYmVnaW47CisJICBfTV9zdGF0ZSB8PSAoX1Nfc3RhdGVfaW5fYnJhY2tldCB8IF9TX3N0YXRlX2F0X3N0YXJ0KTsKKwkgICsrX01fY3VycmVudDsKKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlIGlmIChfX2MgPT0gX01fY3R5cGUud2lkZW4oJ1xcJykpCisJeworCSAgX01fZWF0X2VzY2FwZSgpOworCSAgcmV0dXJuOworCX0KKyAgICAgIGVsc2UgaWYgKCEoX01fZmxhZ3MgJiAocmVnZXhfY29uc3RhbnRzOjpiYXNpYyB8IHJlZ2V4X2NvbnN0YW50czo6Z3JlcCkpKQorCXsKKwkgIGlmIChfX2MgPT0gX01fY3R5cGUud2lkZW4oJygnKSkKKwkgICAgeworCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fc3ViZXhwcl9iZWdpbjsKKwkgICAgICArK19NX2N1cnJlbnQ7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJICBlbHNlIGlmIChfX2MgPT0gX01fY3R5cGUud2lkZW4oJyknKSkKKwkgICAgeworCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fc3ViZXhwcl9lbmQ7CisJICAgICAgKytfTV9jdXJyZW50OworCSAgICAgIHJldHVybjsKKwkgICAgfQorCSAgZWxzZSBpZiAoX19jID09IF9NX2N0eXBlLndpZGVuKCd7JykpCisJICAgIHsKKwkgICAgICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2ludGVydmFsX2JlZ2luOworCSAgICAgIF9NX3N0YXRlIHw9IF9TX3N0YXRlX2luX2JyYWNlOworCSAgICAgICsrX01fY3VycmVudDsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwl9CisKKyAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fb3JkX2NoYXI7CisgICAgICBfTV9jdXJWYWx1ZS5hc3NpZ24oMSwgX19jKTsKKyAgICAgICsrX01fY3VycmVudDsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX1NjYW5uZXI8X0lucHV0SXRlcmF0b3I+OjoKKyAgICBfTV9zY2FuX2luX2JyYWNlKCkKKyAgICB7CisgICAgICBpZiAoX01fY3R5cGUuaXMoX0N0eXBlVDo6ZGlnaXQsICpfTV9jdXJyZW50KSkKKwl7CisJICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2R1cF9jb3VudDsKKwkgIF9NX2N1clZhbHVlLmFzc2lnbigxLCAqX01fY3VycmVudCk7CisJICArK19NX2N1cnJlbnQ7CisJICB3aGlsZSAoX01fY3VycmVudCAhPSBfTV9lbmQKKwkJICYmIF9NX2N0eXBlLmlzKF9DdHlwZVQ6OmRpZ2l0LCAqX01fY3VycmVudCkpCisJICAgIHsKKwkgICAgICBfTV9jdXJWYWx1ZSArPSAqX01fY3VycmVudDsKKwkgICAgICArK19NX2N1cnJlbnQ7CisJICAgIH0KKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlIGlmICgqX01fY3VycmVudCA9PSBfTV9jdHlwZS53aWRlbignLCcpKQorCXsKKwkgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fY29tbWE7CisJICArK19NX2N1cnJlbnQ7CisJICByZXR1cm47CisJfQorICAgICAgaWYgKF9NX2ZsYWdzICYgKHJlZ2V4X2NvbnN0YW50czo6YmFzaWMgfCByZWdleF9jb25zdGFudHM6OmdyZXApKQorCXsKKwkgIGlmICgqX01fY3VycmVudCA9PSBfTV9jdHlwZS53aWRlbignXFwnKSkKKwkgICAgX01fZWF0X2VzY2FwZSgpOworCX0KKyAgICAgIGVsc2UgCisJeworCSAgaWYgKCpfTV9jdXJyZW50ID09IF9NX2N0eXBlLndpZGVuKCd9JykpCisJICAgIHsKKwkgICAgICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2ludGVydmFsX2VuZDsKKwkgICAgICBfTV9zdGF0ZSAmPSB+X1Nfc3RhdGVfaW5fYnJhY2U7CisJICAgICAgKytfTV9jdXJyZW50OworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9TY2FubmVyPF9JbnB1dEl0ZXJhdG9yPjo6CisgICAgX01fc2Nhbl9pbl9icmFja2V0KCkKKyAgICB7CisgICAgICBpZiAoX01fc3RhdGUgJiBfU19zdGF0ZV9hdF9zdGFydCAmJiAqX01fY3VycmVudCA9PSBfTV9jdHlwZS53aWRlbignXicpKQorCXsKKwkgIF9NX2N1clRva2VuID0gX1NfdG9rZW5faW52ZXJzZV9jbGFzczsKKwkgIF9NX3N0YXRlICY9IH5fU19zdGF0ZV9hdF9zdGFydDsKKwkgICsrX01fY3VycmVudDsKKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlIGlmICgqX01fY3VycmVudCA9PSBfTV9jdHlwZS53aWRlbignWycpKQorCXsKKwkgICsrX01fY3VycmVudDsKKwkgIGlmIChfTV9jdXJyZW50ID09IF9NX2VuZCkKKwkgICAgeworCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fZW9mOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCisJICBpZiAoKl9NX2N1cnJlbnQgPT0gX01fY3R5cGUud2lkZW4oJy4nKSkKKwkgICAgeworCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fY29sbHN5bWJvbDsKKwkgICAgICBfTV9lYXRfY29sbHN5bWJvbCgpOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCSAgZWxzZSBpZiAoKl9NX2N1cnJlbnQgPT0gX01fY3R5cGUud2lkZW4oJzonKSkKKwkgICAgeworCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fY2hhcl9jbGFzc19uYW1lOworCSAgICAgIF9NX2VhdF9jaGFyY2xhc3MoKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwkgIGVsc2UgaWYgKCpfTV9jdXJyZW50ID09IF9NX2N0eXBlLndpZGVuKCc9JykpCisJICAgIHsKKwkgICAgICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2VxdWl2X2NsYXNzX25hbWU7CisJICAgICAgX01fZWF0X2VxdWl2Y2xhc3MoKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICgqX01fY3VycmVudCA9PSBfTV9jdHlwZS53aWRlbignLScpKQorCXsKKwkgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fZGFzaDsKKwkgICsrX01fY3VycmVudDsKKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlIGlmICgqX01fY3VycmVudCA9PSBfTV9jdHlwZS53aWRlbignXScpKQorCXsKKwkgIGlmICghKF9NX2ZsYWdzICYgcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KQorCSAgICAgIHx8ICEoX01fc3RhdGUgJiBfU19zdGF0ZV9hdF9zdGFydCkpCisJICAgIHsKKwkgICAgICAvLyBzcGVjaWFsIGNhc2U6IG9ubHkgaWYgIF9ub3RfIGNociBmaXJzdCBhZnRlcgorCSAgICAgIC8vICdbJyBvciAnW14nIGFuZCBpZiBub3QgRUNNQXNjcmlwdAorCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fYnJhY2tldF9lbmQ7CisJICAgICAgKytfTV9jdXJyZW50OworCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fY29sbGVsZW1fc2luZ2xlOworICAgICAgX01fY3VyVmFsdWUuYXNzaWduKDEsICpfTV9jdXJyZW50KTsKKyAgICAgICsrX01fY3VycmVudDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9TY2FubmVyPF9JbnB1dEl0ZXJhdG9yPjo6CisgICAgX01fZWF0X2VzY2FwZSgpCisgICAgeworICAgICAgKytfTV9jdXJyZW50OworICAgICAgaWYgKF9NX2N1cnJlbnQgPT0gX01fZW5kKQorCXsKKwkgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fZW9mOworCSAgcmV0dXJuOworCX0KKyAgICAgIF9DaGFyVCBfX2MgPSAqX01fY3VycmVudDsKKyAgICAgICsrX01fY3VycmVudDsKKworICAgICAgaWYgKF9fYyA9PSBfTV9jdHlwZS53aWRlbignKCcpKQorCXsKKwkgIGlmICghKF9NX2ZsYWdzICYgKHJlZ2V4X2NvbnN0YW50czo6YmFzaWMgfCByZWdleF9jb25zdGFudHM6OmdyZXApKSkKKwkgICAgeworCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fb3JkX2NoYXI7CisJICAgICAgX01fY3VyVmFsdWUuYXNzaWduKDEsIF9fYyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgX01fY3VyVG9rZW4gPSBfU190b2tlbl9zdWJleHByX2JlZ2luOworCX0KKyAgICAgIGVsc2UgaWYgKF9fYyA9PSBfTV9jdHlwZS53aWRlbignKScpKQorCXsKKwkgIGlmICghKF9NX2ZsYWdzICYgKHJlZ2V4X2NvbnN0YW50czo6YmFzaWMgfCByZWdleF9jb25zdGFudHM6OmdyZXApKSkKKwkgICAgeworCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fb3JkX2NoYXI7CisJICAgICAgX01fY3VyVmFsdWUuYXNzaWduKDEsIF9fYyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgX01fY3VyVG9rZW4gPSBfU190b2tlbl9zdWJleHByX2VuZDsKKwl9CisgICAgICBlbHNlIGlmIChfX2MgPT0gX01fY3R5cGUud2lkZW4oJ3snKSkKKwl7CisJICBpZiAoIShfTV9mbGFncyAmIChyZWdleF9jb25zdGFudHM6OmJhc2ljIHwgcmVnZXhfY29uc3RhbnRzOjpncmVwKSkpCisJICAgIHsKKwkgICAgICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX29yZF9jaGFyOworCSAgICAgIF9NX2N1clZhbHVlLmFzc2lnbigxLCBfX2MpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2ludGVydmFsX2JlZ2luOworCSAgICAgIF9NX3N0YXRlIHw9IF9TX3N0YXRlX2luX2JyYWNlOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoX19jID09IF9NX2N0eXBlLndpZGVuKCd9JykpCisJeworCSAgaWYgKCEoX01fZmxhZ3MgJiAocmVnZXhfY29uc3RhbnRzOjpiYXNpYyB8IHJlZ2V4X2NvbnN0YW50czo6Z3JlcCkpKQorCSAgICB7CisJICAgICAgX01fY3VyVG9rZW4gPSBfU190b2tlbl9vcmRfY2hhcjsKKwkgICAgICBfTV9jdXJWYWx1ZS5hc3NpZ24oMSwgX19jKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKCEoX01fc3RhdGUgJiYgX1Nfc3RhdGVfaW5fYnJhY2UpKQorCQlfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfYmFkYnJhY2UpOworCSAgICAgIF9NX3N0YXRlICY9IH5fU19zdGF0ZV9pbl9icmFjZTsKKwkgICAgICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2ludGVydmFsX2VuZDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKF9fYyA9PSBfTV9jdHlwZS53aWRlbigneCcpKQorCXsKKwkgICsrX01fY3VycmVudDsKKwkgIGlmIChfTV9jdXJyZW50ID09IF9NX2VuZCkKKwkgICAgeworCSAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fZW9mOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCSAgaWYgKF9NX2N0eXBlLmlzKF9DdHlwZVQ6OmRpZ2l0LCAqX01fY3VycmVudCkpCisJICAgIHsKKwkgICAgICBfTV9jdXJWYWx1ZS5hc3NpZ24oMSwgKl9NX2N1cnJlbnQpOworCSAgICAgICsrX01fY3VycmVudDsKKwkgICAgICBpZiAoX01fY3VycmVudCA9PSBfTV9lbmQpCisJCXsKKwkJICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX2VvZjsKKwkJICByZXR1cm47CisJCX0KKwkgICAgICBpZiAoX01fY3R5cGUuaXMoX0N0eXBlVDo6ZGlnaXQsICpfTV9jdXJyZW50KSkKKwkJeworCQkgIF9NX2N1clZhbHVlICs9ICpfTV9jdXJyZW50OworCQkgICsrX01fY3VycmVudDsKKwkJICByZXR1cm47CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKF9fYyA9PSBfTV9jdHlwZS53aWRlbignXicpCisJICAgICAgIHx8IF9fYyA9PSBfTV9jdHlwZS53aWRlbignLicpCisJICAgICAgIHx8IF9fYyA9PSBfTV9jdHlwZS53aWRlbignKicpCisJICAgICAgIHx8IF9fYyA9PSBfTV9jdHlwZS53aWRlbignJCcpCisJICAgICAgIHx8IF9fYyA9PSBfTV9jdHlwZS53aWRlbignXFwnKSkKKwl7CisJICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX29yZF9jaGFyOworCSAgX01fY3VyVmFsdWUuYXNzaWduKDEsIF9fYyk7CisJfQorICAgICAgZWxzZSBpZiAoX01fY3R5cGUuaXMoX0N0eXBlVDo6ZGlnaXQsIF9fYykpCisJeworCSAgX01fY3VyVG9rZW4gPSBfU190b2tlbl9iYWNrcmVmOworCSAgX01fY3VyVmFsdWUuYXNzaWduKDEsIF9fYyk7CisJfQorICAgICAgZWxzZQorCV9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9lc2NhcGUpOworICAgIH0KKworCisgIC8vIEVhdHMgYSBjaGFyYWN0ZXIgY2xhc3Mgb3IgdGhyb3ducyBhbiBleGNlcHRpb24uCisgIC8vIGN1cnJlbnQgcG9pbnQgdG8gJzonIGRlbGltaXRlciBvbiBlbnRyeSwgY2hhciBhZnRlciAnXScgb24gcmV0dXJuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfU2Nhbm5lcjxfSW5wdXRJdGVyYXRvcj46OgorICAgIF9NX2VhdF9jaGFyY2xhc3MoKQorICAgIHsKKyAgICAgICsrX01fY3VycmVudDsgLy8gc2tpcCAnOicKKyAgICAgIGlmIChfTV9jdXJyZW50ID09IF9NX2VuZCkKKwlfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfY3R5cGUpOworICAgICAgZm9yIChfTV9jdXJWYWx1ZS5jbGVhcigpOworCSAgIF9NX2N1cnJlbnQgIT0gX01fZW5kICYmICpfTV9jdXJyZW50ICE9IF9NX2N0eXBlLndpZGVuKCc6Jyk7CisJICAgKytfTV9jdXJyZW50KQorCV9NX2N1clZhbHVlICs9ICpfTV9jdXJyZW50OworICAgICAgaWYgKF9NX2N1cnJlbnQgPT0gX01fZW5kKQorCV9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9jdHlwZSk7CisgICAgICArK19NX2N1cnJlbnQ7IC8vIHNraXAgJzonCisgICAgICBpZiAoKl9NX2N1cnJlbnQgIT0gX01fY3R5cGUud2lkZW4oJ10nKSkKKwlfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfY3R5cGUpOworICAgICAgKytfTV9jdXJyZW50OyAvLyBza2lwICddJworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfU2Nhbm5lcjxfSW5wdXRJdGVyYXRvcj46OgorICAgIF9NX2VhdF9lcXVpdmNsYXNzKCkKKyAgICB7CisgICAgICArK19NX2N1cnJlbnQ7IC8vIHNraXAgJz0nCisgICAgICBpZiAoX01fY3VycmVudCA9PSBfTV9lbmQpCisJX190aHJvd19yZWdleF9lcnJvcihyZWdleF9jb25zdGFudHM6OmVycm9yX2NvbGxhdGUpOworICAgICAgZm9yIChfTV9jdXJWYWx1ZS5jbGVhcigpOworCSAgIF9NX2N1cnJlbnQgIT0gX01fZW5kICYmICpfTV9jdXJyZW50ICE9IF9NX2N0eXBlLndpZGVuKCc9Jyk7CisJICAgKytfTV9jdXJyZW50KQorCV9NX2N1clZhbHVlICs9ICpfTV9jdXJyZW50OworICAgICAgaWYgKF9NX2N1cnJlbnQgPT0gX01fZW5kKQorCV9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9jb2xsYXRlKTsKKyAgICAgICsrX01fY3VycmVudDsgLy8gc2tpcCAnPScKKyAgICAgIGlmICgqX01fY3VycmVudCAhPSBfTV9jdHlwZS53aWRlbignXScpKQorCV9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9jb2xsYXRlKTsKKyAgICAgICsrX01fY3VycmVudDsgLy8gc2tpcCAnXScKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX1NjYW5uZXI8X0lucHV0SXRlcmF0b3I+OjoKKyAgICBfTV9lYXRfY29sbHN5bWJvbCgpCisgICAgeworICAgICAgKytfTV9jdXJyZW50OyAvLyBza2lwICcuJworICAgICAgaWYgKF9NX2N1cnJlbnQgPT0gX01fZW5kKQorCV9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9jb2xsYXRlKTsKKyAgICAgIGZvciAoX01fY3VyVmFsdWUuY2xlYXIoKTsKKwkgICBfTV9jdXJyZW50ICE9IF9NX2VuZCAmJiAqX01fY3VycmVudCAhPSBfTV9jdHlwZS53aWRlbignLicpOworCSAgICsrX01fY3VycmVudCkKKwlfTV9jdXJWYWx1ZSArPSAqX01fY3VycmVudDsKKyAgICAgIGlmIChfTV9jdXJyZW50ID09IF9NX2VuZCkKKwlfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfY29sbGF0ZSk7CisgICAgICArK19NX2N1cnJlbnQ7IC8vIHNraXAgJy4nCisgICAgICBpZiAoKl9NX2N1cnJlbnQgIT0gX01fY3R5cGUud2lkZW4oJ10nKSkKKwlfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfY29sbGF0ZSk7CisgICAgICArK19NX2N1cnJlbnQ7IC8vIHNraXAgJ10nCisgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgc3RkOjpvc3RyZWFtJgorICAgIF9TY2FubmVyPF9JbnB1dEl0ZXJhdG9yPjo6CisgICAgX01fcHJpbnQoc3RkOjpvc3RyZWFtJiBvc3RyKQorICAgIHsKKyAgICAgIHN3aXRjaCAoX01fY3VyVG9rZW4pCisgICAgICB7CisJY2FzZSBfU190b2tlbl9hbnljaGFyOgorCSAgb3N0ciA8PCAiYW55LWNoYXJhY3RlclxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fYmFja3JlZjoKKwkgIG9zdHIgPDwgImJhY2tyZWZcbiI7CisJICBicmVhazsKKwljYXNlIF9TX3Rva2VuX2JyYWNrZXRfYmVnaW46CisJICBvc3RyIDw8ICJicmFja2V0LWJlZ2luXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9icmFja2V0X2VuZDoKKwkgIG9zdHIgPDwgImJyYWNrZXQtZW5kXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9jaGFyX2NsYXNzX25hbWU6CisJICBvc3RyIDw8ICJjaGFyLWNsYXNzLW5hbWUgXCIiIDw8IF9NX2N1clZhbHVlIDw8ICJcIlxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fY2xvc3VyZTA6CisJICBvc3RyIDw8ICJjbG9zdXJlMFxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fY2xvc3VyZTE6CisJICBvc3RyIDw8ICJjbG9zdXJlMVxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fY29sbGVsZW1fbXVsdGk6CisJICBvc3RyIDw8ICJjb2xsLWVsZW0tbXVsdGkgXCIiIDw8IF9NX2N1clZhbHVlIDw8ICJcIlxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fY29sbGVsZW1fc2luZ2xlOgorCSAgb3N0ciA8PCAiY29sbC1lbGVtLXNpbmdsZSBcIiIgPDwgX01fY3VyVmFsdWUgPDwgIlwiXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9jb2xsc3ltYm9sOgorCSAgb3N0ciA8PCAiY29sbHN5bWJvbCBcIiIgPDwgX01fY3VyVmFsdWUgPDwgIlwiXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9jb21tYToKKwkgIG9zdHIgPDwgImNvbW1hXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9kYXNoOgorCSAgb3N0ciA8PCAiZGFzaFxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fZHVwX2NvdW50OgorCSAgb3N0ciA8PCAiZHVwIGNvdW50OiAiIDw8IF9NX2N1clZhbHVlIDw8ICJcbiI7CisJICBicmVhazsKKwljYXNlIF9TX3Rva2VuX2VvZjoKKwkgIG9zdHIgPDwgIkVPRlxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fZXF1aXZfY2xhc3NfbmFtZToKKwkgIG9zdHIgPDwgImVxdWl2LWNsYXNzLW5hbWUgXCIiIDw8IF9NX2N1clZhbHVlIDw8ICJcIlxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5faW50ZXJ2YWxfYmVnaW46CisJICBvc3RyIDw8ICJpbnRlcnZhbCBiZWdpblxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5faW50ZXJ2YWxfZW5kOgorCSAgb3N0ciA8PCAiaW50ZXJ2YWwgZW5kXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9saW5lX2JlZ2luOgorCSAgb3N0ciA8PCAibGluZSBiZWdpblxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fbGluZV9lbmQ6CisJICBvc3RyIDw8ICJsaW5lIGVuZFxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fb3B0OgorCSAgb3N0ciA8PCAib3B0XG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9vcjoKKwkgIG9zdHIgPDwgIm9yXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9vcmRfY2hhcjoKKwkgIG9zdHIgPDwgIm9yZGluYXJ5IGNoYXJhY3RlcjogXCIiIDw8IF9NX3ZhbHVlKCkgPDwgIlwiXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9xdW90ZWRfY2hhcjoKKwkgIG9zdHIgPDwgInF1b3RlZCBjaGFyXG4iOworCSAgYnJlYWs7CisJY2FzZSBfU190b2tlbl9zdWJleHByX2JlZ2luOgorCSAgb3N0ciA8PCAic3ViZXhwciBiZWdpblxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fc3ViZXhwcl9lbmQ6CisJICBvc3RyIDw8ICJzdWJleHByIGVuZFxuIjsKKwkgIGJyZWFrOworCWNhc2UgX1NfdG9rZW5fd29yZF9iZWdpbjoKKwkgIG9zdHIgPDwgIndvcmQgYmVnaW5cbiI7CisJICBicmVhazsKKwljYXNlIF9TX3Rva2VuX3dvcmRfZW5kOgorCSAgb3N0ciA8PCAid29yZCBlbmRcbiI7CisJICBicmVhazsKKwljYXNlIF9TX3Rva2VuX3Vua25vd246CisJICBvc3RyIDw8ICItLSB1bmtub3duIHRva2VuIC0tXG4iOworCSAgYnJlYWs7CisgICAgICB9CisgICAgICByZXR1cm4gb3N0cjsKKyAgICB9CisjZW5kaWYKKworICAvLy8gQnVpbGRzIGFuIE5GQSBmcm9tIGFuIGlucHV0IGl0ZXJhdG9yIGludGVydmFsLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBjbGFzcyBfQ29tcGlsZXIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfSW5JdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSXRlclQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+Ojp2YWx1ZV90eXBlIF9DaGFyVDsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJUPiAgICAgICAgICAgICAgICAgICAgICAgICAgX1N0cmluZ1Q7CisgICAgICB0eXBlZGVmIHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlICAgICAgICAgICAgICAgIF9GbGFnVDsKKworICAgICAgX0NvbXBpbGVyKGNvbnN0IF9Jbkl0ZXImIF9fYiwgY29uc3QgX0luSXRlciYgX19lLAorCQlfVHJhaXRzVCYgX190cmFpdHMsIF9GbGFnVCBfX2ZsYWdzKTsKKworICAgICAgY29uc3QgX05mYSYKKyAgICAgIF9NX25mYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9zdGF0ZV9zdG9yZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX1NjYW5uZXI8X0luSXRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU2Nhbm5lclQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TY2FubmVyVDo6X1Rva2VuVCAgICAgICAgICAgICAgICAgICAgX1Rva2VuVDsKKyAgICAgIHR5cGVkZWYgc3RkOjpzdGFjazxfU3RhdGVTZXEsIHN0ZDo6dmVjdG9yPF9TdGF0ZVNlcT4gPiBfU3RhY2tUOworICAgICAgdHlwZWRlZiBfUmFuZ2VNYXRjaGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPiAgICAgICAgICAgICAgIF9STWF0Y2hlclQ7CisKKyAgICAgIC8vIGFjY2VwdHMgYSBzcGVjaWZpYyB0b2tlbiBvciByZXR1cm5zIGZhbHNlLgorICAgICAgYm9vbAorICAgICAgX01fbWF0Y2hfdG9rZW4oX1Rva2VuVCBfX3Rva2VuKTsKKworICAgICAgdm9pZAorICAgICAgX01fZGlzanVuY3Rpb24oKTsKKworICAgICAgYm9vbAorICAgICAgX01fYWx0ZXJuYXRpdmUoKTsKKworICAgICAgYm9vbAorICAgICAgX01fdGVybSgpOworCisgICAgICBib29sCisgICAgICBfTV9hc3NlcnRpb24oKTsKKworICAgICAgYm9vbAorICAgICAgX01fcXVhbnRpZmllcigpOworCisgICAgICBib29sCisgICAgICBfTV9hdG9tKCk7CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2JyYWNrZXRfZXhwcmVzc2lvbigpOworCisgICAgICBib29sCisgICAgICBfTV9icmFja2V0X2xpc3QoX1JNYXRjaGVyVCYgX19tYXRjaGVyKTsKKworICAgICAgYm9vbAorICAgICAgX01fZm9sbG93X2xpc3QoX1JNYXRjaGVyVCYgX19tYXRjaGVyKTsKKworICAgICAgYm9vbAorICAgICAgX01fZm9sbG93X2xpc3QyKF9STWF0Y2hlclQmIF9fbWF0Y2hlcik7CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2V4cHJlc3Npb25fdGVybShfUk1hdGNoZXJUJiBfX21hdGNoZXIpOworCisgICAgICBib29sCisgICAgICBfTV9yYW5nZV9leHByZXNzaW9uKF9STWF0Y2hlclQmIF9fbWF0Y2hlcik7CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX3N0YXJ0X3JhbmdlKF9STWF0Y2hlclQmIF9fbWF0Y2hlcik7CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2NvbGxhdGluZ19zeW1ib2woX1JNYXRjaGVyVCYgX19tYXRjaGVyKTsKKworICAgICAgYm9vbAorICAgICAgX01fZXF1aXZhbGVuY2VfY2xhc3MoX1JNYXRjaGVyVCYgX19tYXRjaGVyKTsKKworICAgICAgYm9vbAorICAgICAgX01fY2hhcmFjdGVyX2NsYXNzKF9STWF0Y2hlclQmIF9fbWF0Y2hlcik7CisKKyAgICAgIGludAorICAgICAgX01fY3VyX2ludF92YWx1ZShpbnQgX19yYWRpeCk7CisKKyAgICAgIF9UcmFpdHNUJiAgICAgIF9NX3RyYWl0czsKKyAgICAgIF9TY2FubmVyVCAgICAgIF9NX3NjYW5uZXI7CisgICAgICBfU3RyaW5nVCAgICAgICBfTV9jdXJfdmFsdWU7CisgICAgICBfTmZhICAgICAgICAgICBfTV9zdGF0ZV9zdG9yZTsKKyAgICAgIF9TdGFja1QgICAgICAgIF9NX3N0YWNrOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6CisgICAgX0NvbXBpbGVyKGNvbnN0IF9Jbkl0ZXImIF9fYiwgY29uc3QgX0luSXRlciYgX19lLCBfVHJhaXRzVCYgX190cmFpdHMsCisJICAgICAgX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6X0ZsYWdUIF9fZmxhZ3MpCisgICAgOiBfTV90cmFpdHMoX190cmFpdHMpLCBfTV9zY2FubmVyKF9fYiwgX19lLCBfX2ZsYWdzLCBfTV90cmFpdHMuZ2V0bG9jKCkpLAorICAgICAgX01fc3RhdGVfc3RvcmUoX19mbGFncykKKyAgICB7CisgICAgICB0eXBlZGVmIF9TdGFydFRhZ2dlcjxfSW5JdGVyLCBfVHJhaXRzVD4gX1N0YXJ0OworICAgICAgdHlwZWRlZiBfRW5kVGFnZ2VyPF9Jbkl0ZXIsIF9UcmFpdHNUPiBfRW5kOworCisgICAgICBfU3RhdGVTZXEgX19yKF9NX3N0YXRlX3N0b3JlLAorICAgICAgCQkgICAgX01fc3RhdGVfc3RvcmUuX01faW5zZXJ0X3N1YmV4cHJfYmVnaW4oX1N0YXJ0KDApKSk7CisgICAgICBfTV9kaXNqdW5jdGlvbigpOworICAgICAgaWYgKCFfTV9zdGFjay5lbXB0eSgpKQorCXsKKwkgIF9fci5fTV9hcHBlbmQoX01fc3RhY2sudG9wKCkpOworCSAgX01fc3RhY2sucG9wKCk7CisJfQorICAgICAgX19yLl9NX2FwcGVuZChfTV9zdGF0ZV9zdG9yZS5fTV9pbnNlcnRfc3ViZXhwcl9lbmQoMCwgX0VuZCgwKSkpOworICAgICAgX19yLl9NX2FwcGVuZChfTV9zdGF0ZV9zdG9yZS5fTV9pbnNlcnRfYWNjZXB0KCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBib29sCisgICAgX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6CisgICAgX01fbWF0Y2hfdG9rZW4oX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6X1Rva2VuVCB0b2tlbikKKyAgICB7IAorICAgICAgaWYgKHRva2VuID09IF9NX3NjYW5uZXIuX01fdG9rZW4oKSkKKwl7CisJICBfTV9jdXJfdmFsdWUgPSBfTV9zY2FubmVyLl9NX3ZhbHVlKCk7CisJICBfTV9zY2FubmVyLl9NX2FkdmFuY2UoKTsKKwkgIHJldHVybiB0cnVlOworCX0KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgdm9pZAorICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgorICAgIF9NX2Rpc2p1bmN0aW9uKCkKKyAgICB7CisgICAgICB0aGlzLT5fTV9hbHRlcm5hdGl2ZSgpOworICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fb3IpKQorCXsKKwkgIF9TdGF0ZVNlcSBfX2FsdDEgPSBfTV9zdGFjay50b3AoKTsgX01fc3RhY2sucG9wKCk7CisJICB0aGlzLT5fTV9kaXNqdW5jdGlvbigpOworCSAgX1N0YXRlU2VxIF9fYWx0MiA9IF9NX3N0YWNrLnRvcCgpOyBfTV9zdGFjay5wb3AoKTsKKwkgIF9NX3N0YWNrLnB1c2goX1N0YXRlU2VxKF9fYWx0MSwgX19hbHQyKSk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBib29sCisgICAgX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6CisgICAgX01fYWx0ZXJuYXRpdmUoKQorICAgIHsKKyAgICAgIGlmICh0aGlzLT5fTV90ZXJtKCkpCisJeworCSAgX1N0YXRlU2VxIF9fcmUgPSBfTV9zdGFjay50b3AoKTsgX01fc3RhY2sucG9wKCk7CisJICB0aGlzLT5fTV9hbHRlcm5hdGl2ZSgpOworCSAgaWYgKCFfTV9zdGFjay5lbXB0eSgpKQorCSAgICB7CisJICAgICAgX19yZS5fTV9hcHBlbmQoX01fc3RhY2sudG9wKCkpOworCSAgICAgIF9NX3N0YWNrLnBvcCgpOworCSAgICB9CisJICBfTV9zdGFjay5wdXNoKF9fcmUpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBib29sCisgICAgX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6CisgICAgX01fdGVybSgpCisgICAgeworICAgICAgaWYgKHRoaXMtPl9NX2Fzc2VydGlvbigpKQorCXJldHVybiB0cnVlOworICAgICAgaWYgKHRoaXMtPl9NX2F0b20oKSkKKwl7CisJICB0aGlzLT5fTV9xdWFudGlmaWVyKCk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgorICAgIGJvb2wKKyAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0c1Q+OjoKKyAgICBfTV9hc3NlcnRpb24oKQorICAgIHsKKyAgICAgIGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2xpbmVfYmVnaW4pKQorCXsKKwkgIC8vIF9fbS5wdXNoKF9NYXRjaGVyOjpfU19vcGNvZGVfbGluZV9iZWdpbik7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9saW5lX2VuZCkpCisJeworCSAgLy8gX19tLnB1c2goX01hdGNoZXI6Ol9TX29wY29kZV9saW5lX2VuZCk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl93b3JkX2JlZ2luKSkKKwl7CisJICAvLyBfX20ucHVzaChfTWF0Y2hlcjo6X1Nfb3Bjb2RlX3dvcmRfYmVnaW4pOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fd29yZF9lbmQpKQorCXsKKwkgIC8vIF9fbS5wdXNoKF9NYXRjaGVyOjpfU19vcGNvZGVfd29yZF9lbmQpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBib29sCisgICAgX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6CisgICAgX01fcXVhbnRpZmllcigpCisgICAgeworICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fY2xvc3VyZTApKQorCXsKKwkgIGlmIChfTV9zdGFjay5lbXB0eSgpKQorCSAgICBfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfYmFkcmVwZWF0KTsKKwkgIF9TdGF0ZVNlcSBfX3IoX01fc3RhY2sudG9wKCksIC0xKTsKKwkgIF9fci5fTV9hcHBlbmQoX19yLl9NX2Zyb250KCkpOworCSAgX01fc3RhY2sucG9wKCk7CisJICBfTV9zdGFjay5wdXNoKF9fcik7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9jbG9zdXJlMSkpCisJeworCSAgaWYgKF9NX3N0YWNrLmVtcHR5KCkpCisJICAgIF9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9iYWRyZXBlYXQpOworCSAgX1N0YXRlU2VxIF9fcihfTV9zdGF0ZV9zdG9yZSwKKwkJCV9NX3N0YXRlX3N0b3JlLgorCQkJX01faW5zZXJ0X2FsdChfU19pbnZhbGlkX3N0YXRlX2lkLAorCQkJCSAgICAgIF9NX3N0YWNrLnRvcCgpLl9NX2Zyb250KCkpKTsKKwkgIF9NX3N0YWNrLnRvcCgpLl9NX2FwcGVuZChfX3IpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fb3B0KSkKKwl7CisJICBpZiAoX01fc3RhY2suZW1wdHkoKSkKKwkgIF9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9iYWRyZXBlYXQpOworCSAgX1N0YXRlU2VxIF9fcihfTV9zdGFjay50b3AoKSwgLTEpOworCSAgX01fc3RhY2sucG9wKCk7CisJICBfTV9zdGFjay5wdXNoKF9fcik7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9pbnRlcnZhbF9iZWdpbikpCisJeworCSAgaWYgKF9NX3N0YWNrLmVtcHR5KCkpCisJICAgIF9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9iYWRyZXBlYXQpOworCSAgaWYgKCFfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2R1cF9jb3VudCkpCisJICAgIF9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9iYWRicmFjZSk7CisJICBfU3RhdGVTZXEgX19yKF9NX3N0YWNrLnRvcCgpKTsKKwkgIGludCBfX21pbl9yZXAgPSBfTV9jdXJfaW50X3ZhbHVlKDEwKTsKKwkgIGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9fbWluX3JlcDsgKytfX2kpCisJICAgIF9NX3N0YWNrLnRvcCgpLl9NX2FwcGVuZChfX3IuX01fY2xvbmUoKSk7IAorCSAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fY29tbWEpKQorCSAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9kdXBfY291bnQpKQorCSAgICAgIHsKKwkJaW50IF9fbiA9IF9NX2N1cl9pbnRfdmFsdWUoMTApIC0gX19taW5fcmVwOworCQlpZiAoX19uIDwgMCkKKwkJICBfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfYmFkYnJhY2UpOworCQlmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCQkgIHsKKwkJICAgIF9TdGF0ZVNlcSBfX3IoX01fc3RhdGVfc3RvcmUsCisJCQkJICBfTV9zdGF0ZV9zdG9yZS4KKwkJCQkgIF9NX2luc2VydF9hbHQoX1NfaW52YWxpZF9zdGF0ZV9pZCwKKwkJCQkJCV9NX3N0YWNrLnRvcCgpLl9NX2Zyb250KCkpKTsKKwkJICAgIF9NX3N0YWNrLnRvcCgpLl9NX2FwcGVuZChfX3IpOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCV9TdGF0ZVNlcSBfX3IoX01fc3RhY2sudG9wKCksIC0xKTsKKwkJX19yLl9NX3B1c2hfYmFjayhfX3IuX01fZnJvbnQoKSk7CisJCV9NX3N0YWNrLnBvcCgpOworCQlfTV9zdGFjay5wdXNoKF9fcik7CisJICAgICAgfQorCSAgaWYgKCFfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2ludGVydmFsX2VuZCkpCisJICAgIF9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl9icmFjZSk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgorICAgIGJvb2wKKyAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0c1Q+OjoKKyAgICBfTV9hdG9tKCkKKyAgICB7CisgICAgICB0eXBlZGVmIF9DaGFyTWF0Y2hlcjxfSW5JdGVyLCBfVHJhaXRzVD4gX0NNYXRjaGVyOworICAgICAgdHlwZWRlZiBfU3RhcnRUYWdnZXI8X0luSXRlciwgX1RyYWl0c1Q+IF9TdGFydDsKKyAgICAgIHR5cGVkZWYgX0VuZFRhZ2dlcjxfSW5JdGVyLCBfVHJhaXRzVD4gX0VuZDsKKworICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fYW55Y2hhcikpCisJeworCSAgX01fc3RhY2sucHVzaChfU3RhdGVTZXEoX01fc3RhdGVfc3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fc3RhdGVfc3RvcmUuX01faW5zZXJ0X21hdGNoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX0FueU1hdGNoZXIpKSk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9vcmRfY2hhcikpCisJeworCSAgX01fc3RhY2sucHVzaChfU3RhdGVTZXEoX01fc3RhdGVfc3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fc3RhdGVfc3RvcmUuX01faW5zZXJ0X21hdGNoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX0NNYXRjaGVyKF9NX2N1cl92YWx1ZVswXSwgX01fdHJhaXRzKSkpKTsKKwkgIHJldHVybiB0cnVlOworCX0KKyAgICAgIGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX3F1b3RlZF9jaGFyKSkKKwl7CisJICAvLyBub3RlIHRoYXQgaW4gdGhlIEVDTUEgZ3JhbW1hciwgdGhpcyBjYXNlIGNvdmVycyBiYWNrcmVmcy4KKwkgIF9NX3N0YWNrLnB1c2goX1N0YXRlU2VxKF9NX3N0YXRlX3N0b3JlLAorCQkJCSAgX01fc3RhdGVfc3RvcmUuX01faW5zZXJ0X21hdGNoZXIKKwkJCQkgIChfQ01hdGNoZXIoX01fY3VyX3ZhbHVlWzBdLCBfTV90cmFpdHMpKSkpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fYmFja3JlZikpCisJeworCSAgLy8gX19tLnB1c2goX01hdGNoZXI6Ol9TX29wY29kZV9vcmRjaGFyLCBfTV9jdXJfdmFsdWUpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fc3ViZXhwcl9iZWdpbikpCisJeworCSAgaW50IF9fbWFyayA9IF9NX3N0YXRlX3N0b3JlLl9NX3N1Yl9jb3VudCgpOworCSAgX1N0YXRlU2VxIF9fcihfTV9zdGF0ZV9zdG9yZSwKKwkJCV9NX3N0YXRlX3N0b3JlLgorCQkJX01faW5zZXJ0X3N1YmV4cHJfYmVnaW4oX1N0YXJ0KF9fbWFyaykpKTsKKwkgIHRoaXMtPl9NX2Rpc2p1bmN0aW9uKCk7CisJICBpZiAoIV9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fc3ViZXhwcl9lbmQpKQorCSAgICBfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfcGFyZW4pOworCSAgaWYgKCFfTV9zdGFjay5lbXB0eSgpKQorCSAgICB7CisJICAgICAgX19yLl9NX2FwcGVuZChfTV9zdGFjay50b3AoKSk7CisJICAgICAgX01fc3RhY2sucG9wKCk7CisJICAgIH0KKwkgIF9fci5fTV9hcHBlbmQoX01fc3RhdGVfc3RvcmUuX01faW5zZXJ0X3N1YmV4cHJfZW5kCisJCQkoX19tYXJrLCBfRW5kKF9fbWFyaykpKTsKKwkgIF9NX3N0YWNrLnB1c2goX19yKTsKKwkgIHJldHVybiB0cnVlOworCX0KKyAgICAgIHJldHVybiBfTV9icmFja2V0X2V4cHJlc3Npb24oKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgYm9vbAorICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgorICAgIF9NX2JyYWNrZXRfZXhwcmVzc2lvbigpCisgICAgeworICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fYnJhY2tldF9iZWdpbikpCisJeworCSAgX1JNYXRjaGVyVCBfX21hdGNoZXIoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9saW5lX2JlZ2luKSwKKwkJCSAgICAgICBfTV90cmFpdHMpOworCSAgaWYgKCFfTV9icmFja2V0X2xpc3QoX19tYXRjaGVyKQorCSAgICAgIHx8ICFfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2JyYWNrZXRfZW5kKSkKKwkgICAgX190aHJvd19yZWdleF9lcnJvcihyZWdleF9jb25zdGFudHM6OmVycm9yX2JyYWNrKTsKKwkgIF9NX3N0YWNrLnB1c2goX1N0YXRlU2VxKF9NX3N0YXRlX3N0b3JlLAorCQkJCSAgX01fc3RhdGVfc3RvcmUuX01faW5zZXJ0X21hdGNoZXIoX19tYXRjaGVyKSkpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAvLyBJZiB0aGUgZGFzaCBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbiwgaXQgaXMgbm90CisgIC8vIHNwZWNpYWwuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgorICAgIGJvb2wKKyAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0c1Q+OjoKKyAgICBfTV9icmFja2V0X2xpc3QoX1JNYXRjaGVyVCYgX19tYXRjaGVyKQorICAgIHsKKyAgICAgIGlmIChfTV9mb2xsb3dfbGlzdChfX21hdGNoZXIpKQorCXsKKwkgIGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2Rhc2gpKQorCSAgICBfX21hdGNoZXIuX01fYWRkX2NoYXIoX01fY3VyX3ZhbHVlWzBdKTsKKwkgIHJldHVybiB0cnVlOworCX0KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgYm9vbAorICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgorICAgIF9NX2ZvbGxvd19saXN0KF9STWF0Y2hlclQmIF9fbWF0Y2hlcikKKyAgICB7IHJldHVybiBfTV9leHByZXNzaW9uX3Rlcm0oX19tYXRjaGVyKSAmJiBfTV9mb2xsb3dfbGlzdDIoX19tYXRjaGVyKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgorICAgIGJvb2wKKyAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0c1Q+OjoKKyAgICBfTV9mb2xsb3dfbGlzdDIoX1JNYXRjaGVyVCYgX19tYXRjaGVyKQorICAgIHsKKyAgICAgIGlmIChfTV9leHByZXNzaW9uX3Rlcm0oX19tYXRjaGVyKSkKKwlyZXR1cm4gX01fZm9sbG93X2xpc3QyKF9fbWF0Y2hlcik7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgYm9vbAorICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgorICAgIF9NX2V4cHJlc3Npb25fdGVybShfUk1hdGNoZXJUJiBfX21hdGNoZXIpCisgICAgeworICAgICAgcmV0dXJuIChfTV9jb2xsYXRpbmdfc3ltYm9sKF9fbWF0Y2hlcikKKwkgICAgICB8fCBfTV9jaGFyYWN0ZXJfY2xhc3MoX19tYXRjaGVyKQorCSAgICAgIHx8IF9NX2VxdWl2YWxlbmNlX2NsYXNzKF9fbWF0Y2hlcikKKwkgICAgICB8fCAoX01fc3RhcnRfcmFuZ2UoX19tYXRjaGVyKQorCQkgICYmIF9NX3JhbmdlX2V4cHJlc3Npb24oX19tYXRjaGVyKSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBib29sCisgICAgX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6CisgICAgX01fcmFuZ2VfZXhwcmVzc2lvbihfUk1hdGNoZXJUJiBfX21hdGNoZXIpCisgICAgeworICAgICAgaWYgKCFfTV9jb2xsYXRpbmdfc3ltYm9sKF9fbWF0Y2hlcikpCisJaWYgKCFfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2Rhc2gpKQorCSAgX190aHJvd19yZWdleF9lcnJvcihyZWdleF9jb25zdGFudHM6OmVycm9yX3JhbmdlKTsKKyAgICAgIF9fbWF0Y2hlci5fTV9tYWtlX3JhbmdlKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgYm9vbAorICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgorICAgIF9NX3N0YXJ0X3JhbmdlKF9STWF0Y2hlclQmIF9fbWF0Y2hlcikKKyAgICB7IHJldHVybiBfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2Rhc2gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgYm9vbAorICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgorICAgIF9NX2NvbGxhdGluZ19zeW1ib2woX1JNYXRjaGVyVCYgX19tYXRjaGVyKQorICAgIHsKKyAgICAgIGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2NvbGxlbGVtX3NpbmdsZSkpCisJeworCSAgX19tYXRjaGVyLl9NX2FkZF9jaGFyKF9NX2N1cl92YWx1ZVswXSk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9jb2xsc3ltYm9sKSkKKwl7CisJICBfX21hdGNoZXIuX01fYWRkX2NvbGxhdGluZ19lbGVtZW50KF9NX2N1cl92YWx1ZSk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgorICAgIGJvb2wKKyAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0c1Q+OjoKKyAgICBfTV9lcXVpdmFsZW5jZV9jbGFzcyhfUk1hdGNoZXJUJiBfX21hdGNoZXIpCisgICAgeworICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fZXF1aXZfY2xhc3NfbmFtZSkpCisJeworCSAgX19tYXRjaGVyLl9NX2FkZF9lcXVpdmFsZW5jZV9jbGFzcyhfTV9jdXJfdmFsdWUpOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBib29sCisgICAgX0NvbXBpbGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPjo6CisgICAgX01fY2hhcmFjdGVyX2NsYXNzKF9STWF0Y2hlclQmIF9fbWF0Y2hlcikKKyAgICB7CisgICAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9jaGFyX2NsYXNzX25hbWUpKQorCXsKKwkgIF9fbWF0Y2hlci5fTV9hZGRfY2hhcmFjdGVyX2NsYXNzKF9NX2N1cl92YWx1ZSk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgorICAgIGludAorICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgorICAgIF9NX2N1cl9pbnRfdmFsdWUoaW50IF9fcmFkaXgpCisgICAgeworICAgICAgaW50IF9fdiA9IDA7CisgICAgICBmb3IgKHR5cGVuYW1lIF9TdHJpbmdUOjpzaXplX3R5cGUgX19pID0gMDsKKwkgICBfX2kgPCBfTV9jdXJfdmFsdWUubGVuZ3RoKCk7ICsrX19pKQorCV9fdiA9X192ICogX19yYWRpeCArIF9NX3RyYWl0cy52YWx1ZShfTV9jdXJfdmFsdWVbX19pXSwgX19yYWRpeCk7CisgICAgICByZXR1cm4gX192OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBfQXV0b21hdG9uUHRyCisgICAgX19jb21waWxlKGNvbnN0IF9Jbkl0ZXImIF9fYiwgY29uc3QgX0luSXRlciYgX19lLCBfVHJhaXRzVCYgX190LAorCSAgICAgIHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIF9fZikKKyAgICB7IHJldHVybiBfQXV0b21hdG9uUHRyKG5ldyBfTmZhKF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD4oX19iLCBfX2UsIF9fdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2YpLl9NX25mYSgpKSk7IH0KKworIC8vQH0gcmVnZXgtZGV0YWlsCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIF9fZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBzdGQKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9jb25zdGFudHMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9jb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWEyYTViCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4X2NvbnN0YW50cy5oCkBAIC0wLDAgKzEsMzEwIEBACisvLyBjbGFzcyB0ZW1wbGF0ZSByZWdleCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqICBAZmlsZSBiaXRzL3JlZ2V4X2NvbnN0YW50cy5oCisgKiAgQGJyaWVmIENvbnN0YW50IGRlZmluaXRpb25zIGZvciB0aGUgc3RkIHJlZ2V4IGxpYnJhcnkuCisgKgorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3JlZ2V4fQorICovCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworLyoqCisgKiBAZGVmZ3JvdXAgcmVnZXggUmVndWxhciBFeHByZXNzaW9ucworICoKKyAqIEEgZmFjaWxpdHkgZm9yIHBlcmZvcm1pbmcgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcuCisgKiBAeworICovCisKKy8qKgorICogQG5hbWVzcGFjZSBzdGQ6OnJlZ2V4X2NvbnN0YW50cworICogQGJyaWVmIElTTyBDKystMHggZW50aXRpZXMgc3ViIG5hbWVzcGFjZSBmb3IgcmVnZXguCisgKi8KK25hbWVzcGFjZSByZWdleF9jb25zdGFudHMKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBuYW1lIDUuMSBSZWd1bGFyIEV4cHJlc3Npb24gU3ludGF4IE9wdGlvbnMKKyAgICovCisgIC8vQHsKKyAgZW51bSBfX3N5bnRheF9vcHRpb24KKyAgICB7CisgICAgICBfU19pY2FzZSwKKyAgICAgIF9TX25vc3VicywKKyAgICAgIF9TX29wdGltaXplLAorICAgICAgX1NfY29sbGF0ZSwKKyAgICAgIF9TX0VDTUFTY3JpcHQsCisgICAgICBfU19iYXNpYywKKyAgICAgIF9TX2V4dGVuZGVkLAorICAgICAgX1NfYXdrLAorICAgICAgX1NfZ3JlcCwKKyAgICAgIF9TX2VncmVwLAorICAgICAgX1Nfc3ludGF4X2xhc3QKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgVGhpcyBpcyBhIGJpdG1hc2sgdHlwZSBpbmRpY2F0aW5nIGhvdyB0byBpbnRlcnByZXQgdGhlIHJlZ2V4LgorICAgKgorICAgKiBUaGUgQGMgc3ludGF4X29wdGlvbl90eXBlIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnV0IGl0IGlzIHZhbGlkIHRvCisgICAqIHBlcmZvcm0gYml0d2lzZSBvcGVyYXRpb25zIG9uIHRoZXNlIHZhbHVlcyBhbmQgZXhwZWN0IHRoZSByaWdodCB0aGluZyB0bworICAgKiBoYXBwZW4uCisgICAqCisgICAqIEEgdmFsaWQgdmFsdWUgb2YgdHlwZSBzeW50YXhfb3B0aW9uX3R5cGUgc2hhbGwgaGF2ZSBleGFjdGx5IG9uZSBvZiB0aGUKKyAgICogZWxlbWVudHMgQGMgRUNNQVNjcmlwdCwgQGMgYmFzaWMsIEBjIGV4dGVuZGVkLCBAYyBhd2ssIEBjIGdyZXAsIEBjIGVncmVwCisgICAqICVzZXQuCisgICAqLworICB0eXBlZGVmIHVuc2lnbmVkIGludCBzeW50YXhfb3B0aW9uX3R5cGU7CisKKyAgLyoqIAorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgbWF0Y2hpbmcgb2YgcmVndWxhciBleHByZXNzaW9ucyBhZ2FpbnN0IGEgY2hhcmFjdGVyCisgICAqIHNlcXVlbmNlIHNoYWxsIGJlIHBlcmZvcm1lZCB3aXRob3V0IHJlZ2FyZCB0byBjYXNlLgorICAgKi8KKyAgY29uc3RleHByIHN5bnRheF9vcHRpb25fdHlwZSBpY2FzZSAgICAgID0gMSA8PCBfU19pY2FzZTsKKworICAvKioKKyAgICogU3BlY2lmaWVzIHRoYXQgd2hlbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkIGFnYWluc3QgYSBjaGFyYWN0ZXIKKyAgICogY29udGFpbmVyIHNlcXVlbmNlLCBubyBzdWItZXhwcmVzc2lvbiBtYXRjaGVzIGFyZSB0byBiZSBzdG9yZWQgaW4gdGhlCisgICAqIHN1cHBsaWVkIG1hdGNoX3Jlc3VsdHMgc3RydWN0dXJlLgorICAgKi8KKyAgY29uc3RleHByIHN5bnRheF9vcHRpb25fdHlwZSBub3N1YnMgICAgID0gMSA8PCBfU19ub3N1YnM7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIHNob3VsZCBwYXkgbW9yZSBhdHRlbnRpb24gdG8KKyAgICogdGhlIHNwZWVkIHdpdGggd2hpY2ggcmVndWxhciBleHByZXNzaW9ucyBhcmUgbWF0Y2hlZCwgYW5kIGxlc3MgdG8gdGhlCisgICAqIHNwZWVkIHdpdGggd2hpY2ggcmVndWxhciBleHByZXNzaW9uIG9iamVjdHMgYXJlIGNvbnN0cnVjdGVkLiBPdGhlcndpc2UKKyAgICogaXQgaGFzIG5vIGRldGVjdGFibGUgZWZmZWN0IG9uIHRoZSBwcm9ncmFtIG91dHB1dC4KKyAgICovCisgIGNvbnN0ZXhwciBzeW50YXhfb3B0aW9uX3R5cGUgb3B0aW1pemUgICA9IDEgPDwgX1Nfb3B0aW1pemU7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IGNoYXJhY3RlciByYW5nZXMgb2YgdGhlIGZvcm0gW2EtYl0gc2hvdWxkIGJlIGxvY2FsZQorICAgKiBzZW5zaXRpdmUuCisgICAqLworICBjb25zdGV4cHIgc3ludGF4X29wdGlvbl90eXBlIGNvbGxhdGUgICAgPSAxIDw8IF9TX2NvbGxhdGU7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBncmFtbWFyIHJlY29nbml6ZWQgYnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUgaXMKKyAgICogdGhhdCB1c2VkIGJ5IEVDTUFTY3JpcHQgaW4gRUNNQS0yNjIgW0VjbWEgSW50ZXJuYXRpb25hbCwgRUNNQVNjcmlwdAorICAgKiBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLCBTdGFuZGFyZCBFY21hLTI2MiwgdGhpcmQgZWRpdGlvbiwgMTk5OV0sIGFzCisgICAqIG1vZGlmaWVkIGluIHNlY3Rpb24gWzI4LjEzXS4gIFRoaXMgZ3JhbW1hciBpcyBzaW1pbGFyIHRvIHRoYXQgZGVmaW5lZAorICAgKiBpbiB0aGUgUEVSTCBzY3JpcHRpbmcgbGFuZ3VhZ2UgYnV0IGV4dGVuZGVkIHdpdGggZWxlbWVudHMgZm91bmQgaW4gdGhlCisgICAqIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiBncmFtbWFyLgorICAgKi8KKyAgY29uc3RleHByIHN5bnRheF9vcHRpb25fdHlwZSBFQ01BU2NyaXB0ID0gMSA8PCBfU19FQ01BU2NyaXB0OworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZ3JhbW1hciByZWNvZ25pemVkIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGlzCisgICAqIHRoYXQgdXNlZCBieSBQT1NJWCBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb25zIGluIElFRUUgU3RkIDEwMDMuMS0yMDAxLAorICAgKiBQb3J0YWJsZSBPcGVyYXRpbmcgU3lzdGVtIEludGVyZmFjZSAoUE9TSVgpLCBCYXNlIERlZmluaXRpb25zIGFuZAorICAgKiBIZWFkZXJzLCBTZWN0aW9uIDksIFJlZ3VsYXIgRXhwcmVzc2lvbnMgW0lFRUUsIEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgLS0KKyAgICogUG9ydGFibGUgT3BlcmF0aW5nIFN5c3RlbSBJbnRlcmZhY2UgKFBPU0lYKSwgSUVFRSBTdGFuZGFyZCAxMDAzLjEtMjAwMV0uCisgICAqLworICBjb25zdGV4cHIgc3ludGF4X29wdGlvbl90eXBlIGJhc2ljICAgICAgPSAxIDw8IF9TX2Jhc2ljOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZ3JhbW1hciByZWNvZ25pemVkIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGlzCisgICAqIHRoYXQgdXNlZCBieSBQT1NJWCBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb25zIGluIElFRUUgU3RkIDEwMDMuMS0yMDAxLAorICAgKiBQb3J0YWJsZSBPcGVyYXRpbmcgU3lzdGVtIEludGVyZmFjZSAoUE9TSVgpLCBCYXNlIERlZmluaXRpb25zIGFuZCBIZWFkZXJzLAorICAgKiBTZWN0aW9uIDksIFJlZ3VsYXIgRXhwcmVzc2lvbnMuCisgICAqLworICBjb25zdGV4cHIgc3ludGF4X29wdGlvbl90eXBlIGV4dGVuZGVkICAgPSAxIDw8IF9TX2V4dGVuZGVkOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZ3JhbW1hciByZWNvZ25pemVkIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGlzCisgICAqIHRoYXQgdXNlZCBieSBQT1NJWCB1dGlsaXR5IGF3ayBpbiBJRUVFIFN0ZCAxMDAzLjEtMjAwMS4gIFRoaXMgb3B0aW9uIGlzCisgICAqIGlkZW50aWNhbCB0byBzeW50YXhfb3B0aW9uX3R5cGUgZXh0ZW5kZWQsIGV4Y2VwdCB0aGF0IEMtc3R5bGUgZXNjYXBlCisgICAqIHNlcXVlbmNlcyBhcmUgc3VwcG9ydGVkLiAgVGhlc2Ugc2VxdWVuY2VzIGFyZToKKyAgICogXFxcXCwgXFxhLCBcXGIsIFxcZiwgXFxuLCBcXHIsIFxcdCAsIFxcdiwgXFwmYXBvczssICZhcG9zOywKKyAgICogYW5kIFxcZGRkICh3aGVyZSBkZGQgaXMgb25lLCB0d28sIG9yIHRocmVlIG9jdGFsIGRpZ2l0cykuICAKKyAgICovCisgIGNvbnN0ZXhwciBzeW50YXhfb3B0aW9uX3R5cGUgYXdrICAgICAgICA9IDEgPDwgX1NfYXdrOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZ3JhbW1hciByZWNvZ25pemVkIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGlzCisgICAqIHRoYXQgdXNlZCBieSBQT1NJWCB1dGlsaXR5IGdyZXAgaW4gSUVFRSBTdGQgMTAwMy4xLTIwMDEuICBUaGlzIG9wdGlvbiBpcworICAgKiBpZGVudGljYWwgdG8gc3ludGF4X29wdGlvbl90eXBlIGJhc2ljLCBleGNlcHQgdGhhdCBuZXdsaW5lcyBhcmUgdHJlYXRlZAorICAgKiBhcyB3aGl0ZXNwYWNlLgorICAgKi8KKyAgY29uc3RleHByIHN5bnRheF9vcHRpb25fdHlwZSBncmVwICAgICAgID0gMSA8PCBfU19ncmVwOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZ3JhbW1hciByZWNvZ25pemVkIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGlzCisgICAqIHRoYXQgdXNlZCBieSBQT1NJWCB1dGlsaXR5IGdyZXAgd2hlbiBnaXZlbiB0aGUgLUUgb3B0aW9uIGluCisgICAqIElFRUUgU3RkIDEwMDMuMS0yMDAxLiAgVGhpcyBvcHRpb24gaXMgaWRlbnRpY2FsIHRvIHN5bnRheF9vcHRpb25fdHlwZSAKKyAgICogZXh0ZW5kZWQsIGV4Y2VwdCB0aGF0IG5ld2xpbmVzIGFyZSB0cmVhdGVkIGFzIHdoaXRlc3BhY2UuCisgICAqLworICBjb25zdGV4cHIgc3ludGF4X29wdGlvbl90eXBlIGVncmVwICAgICAgPSAxIDw8IF9TX2VncmVwOworCisgIC8vQH0KKworICAvKioKKyAgICogQG5hbWUgNS4yIE1hdGNoaW5nIFJ1bGVzCisgICAqCisgICAqIE1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uIGFnYWluc3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIFtmaXJzdCwKKyAgICogbGFzdCkgcHJvY2VlZHMgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgZ3JhbW1hciBzcGVjaWZpZWQgZm9yIHRoZQorICAgKiByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBtb2RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIGVmZmVjdHMgbGlzdGVkCisgICAqIGJlbG93IGZvciBhbnkgYml0bWFzayBlbGVtZW50cyBzZXQuCisgICAqCisgICAqLworICAvL0B7CisKKyAgZW51bSBfX21hdGNoX2ZsYWcKKyAgICB7CisgICAgICBfU19ub3RfYm9sLAorICAgICAgX1Nfbm90X2VvbCwKKyAgICAgIF9TX25vdF9ib3csCisgICAgICBfU19ub3RfZW93LAorICAgICAgX1NfYW55LAorICAgICAgX1Nfbm90X251bGwsCisgICAgICBfU19jb250aW51b3VzLAorICAgICAgX1NfcHJldl9hdmFpbCwKKyAgICAgIF9TX3NlZCwKKyAgICAgIF9TX25vX2NvcHksCisgICAgICBfU19maXJzdF9vbmx5LAorICAgICAgX1NfbWF0Y2hfZmxhZ19sYXN0CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFRoaXMgaXMgYSBiaXRtYXNrIHR5cGUgaW5kaWNhdGluZyByZWdleCBtYXRjaGluZyBydWxlcy4KKyAgICoKKyAgICogVGhlIEBjIG1hdGNoX2ZsYWdfdHlwZSBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ1dCBpdCBpcyB2YWxpZCB0bworICAgKiBwZXJmb3JtIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiB0aGVzZSB2YWx1ZXMgYW5kIGV4cGVjdCB0aGUgcmlnaHQgdGhpbmcgdG8KKyAgICogaGFwcGVuLgorICAgKi8KKyAgdHlwZWRlZiBzdGQ6OmJpdHNldDxfU19tYXRjaF9mbGFnX2xhc3Q+IG1hdGNoX2ZsYWdfdHlwZTsKKworICAvKioKKyAgICogVGhlIGRlZmF1bHQgbWF0Y2hpbmcgcnVsZXMuCisgICAqLworICBjb25zdGV4cHIgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX2RlZmF1bHQgICAgID0gMDsKKworICAvKioKKyAgICogVGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc2VxdWVuY2UgW2ZpcnN0LCBsYXN0KSBpcyB0cmVhdGVkIGFzIHRob3VnaCBpdAorICAgKiBpcyBub3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsIHNvIHRoZSBjaGFyYWN0ZXIgKF4pIGluIHRoZSByZWd1bGFyCisgICAqIGV4cHJlc3Npb24gc2hhbGwgbm90IG1hdGNoIFtmaXJzdCwgZmlyc3QpLgorICAgKi8KKyAgY29uc3RleHByIG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9ub3RfYm9sICAgICA9IDEgPDwgX1Nfbm90X2JvbDsKKworICAvKioKKyAgICogVGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzZXF1ZW5jZSBbZmlyc3QsIGxhc3QpIGlzIHRyZWF0ZWQgYXMgdGhvdWdoIGl0CisgICAqIGlzIG5vdCBhdCB0aGUgZW5kIG9mIGEgbGluZSwgc28gdGhlIGNoYXJhY3RlciAoJCkgaW4gdGhlIHJlZ3VsYXIKKyAgICogZXhwcmVzc2lvbiBzaGFsbCBub3QgbWF0Y2ggW2xhc3QsIGxhc3QpLgorICAgKi8KKyAgY29uc3RleHByIG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9ub3RfZW9sICAgICA9IDEgPDwgX1Nfbm90X2VvbDsKKyAgIAorICAvKioKKyAgICogVGhlIGV4cHJlc3Npb24gXFxiIGlzIG5vdCBtYXRjaGVkIGFnYWluc3QgdGhlIHN1Yi1zZXF1ZW5jZQorICAgKiBbZmlyc3QsZmlyc3QpLgorICAgKi8KKyAgY29uc3RleHByIG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9ub3RfYm93ICAgICA9IDEgPDwgX1Nfbm90X2JvdzsKKyAgIAorICAvKioKKyAgICogVGhlIGV4cHJlc3Npb24gXFxiIHNob3VsZCBub3QgYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWItc2VxdWVuY2UKKyAgICogW2xhc3QsbGFzdCkuCisgICAqLworICBjb25zdGV4cHIgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX25vdF9lb3cgICAgID0gMSA8PCBfU19ub3RfZW93OworICAgCisgIC8qKgorICAgKiBJZiBtb3JlIHRoYW4gb25lIG1hdGNoIGlzIHBvc3NpYmxlIHRoZW4gYW55IG1hdGNoIGlzIGFuIGFjY2VwdGFibGUKKyAgICogcmVzdWx0LgorICAgKi8KKyAgY29uc3RleHByIG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9hbnkgICAgICAgICA9IDEgPDwgX1NfYW55OworICAgCisgIC8qKgorICAgKiBUaGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBtYXRjaCBhbiBlbXB0eSBzZXF1ZW5jZS4KKyAgICovCisgIGNvbnN0ZXhwciBtYXRjaF9mbGFnX3R5cGUgbWF0Y2hfbm90X251bGwgICAgPSAxIDw8IF9TX25vdF9udWxsOworICAgCisgIC8qKgorICAgKiBUaGUgZXhwcmVzc2lvbiBvbmx5IG1hdGNoZXMgYSBzdWItc2VxdWVuY2UgdGhhdCBiZWdpbnMgYXQgZmlyc3QgLgorICAgKi8KKyAgY29uc3RleHByIG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9jb250aW51b3VzICA9IDEgPDwgX1NfY29udGludW91czsKKyAgIAorICAvKioKKyAgICogLS1maXJzdCBpcyBhIHZhbGlkIGl0ZXJhdG9yIHBvc2l0aW9uLiAgV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRoZW4gdGhlCisgICAqIGZsYWdzIG1hdGNoX25vdF9ib2wgYW5kIG1hdGNoX25vdF9ib3cgYXJlIGlnbm9yZWQgYnkgdGhlIHJlZ3VsYXIKKyAgICogZXhwcmVzc2lvbiBhbGdvcml0aG1zIDI4LjExIGFuZCBpdGVyYXRvcnMgMjguMTIuCisgICAqLworICBjb25zdGV4cHIgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX3ByZXZfYXZhaWwgID0gMSA8PCBfU19wcmV2X2F2YWlsOworCisgIC8qKgorICAgKiBXaGVuIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGlzIHRvIGJlIHJlcGxhY2VkIGJ5IGEgbmV3IHN0cmluZywgdGhlCisgICAqIG5ldyBzdHJpbmcgaXMgY29uc3RydWN0ZWQgdXNpbmcgdGhlIHJ1bGVzIHVzZWQgYnkgdGhlIEVDTUFTY3JpcHQgcmVwbGFjZQorICAgKiBmdW5jdGlvbiBpbiBFQ01BLSAyNjIgW0VjbWEgSW50ZXJuYXRpb25hbCwgRUNNQVNjcmlwdCBMYW5ndWFnZQorICAgKiBTcGVjaWZpY2F0aW9uLCBTdGFuZGFyZCBFY21hLTI2MiwgdGhpcmQgZWRpdGlvbiwgMTk5OV0sIHBhcnQgMTUuNS40LjExCisgICAqIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZS4gSW4gYWRkaXRpb24sIGR1cmluZyBzZWFyY2ggYW5kIHJlcGxhY2UKKyAgICogb3BlcmF0aW9ucyBhbGwgbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogYXJlIGxvY2F0ZWQgYW5kIHJlcGxhY2VkLCBhbmQgc2VjdGlvbnMgb2YgdGhlIGlucHV0IHRoYXQgZGlkIG5vdCBtYXRjaAorICAgKiB0aGUgZXhwcmVzc2lvbiBhcmUgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0IHN0cmluZy4KKyAgICogCisgICAqIEZvcm1hdCBzdHJpbmdzIChmcm9tIEVDTUEtMjYyIFsxNS41LjQuMTFdKToKKyAgICogQGxpICQkICBUaGUgZG9sbGFyLXNpZ24gaXRzZWxmICgkKQorICAgKiBAbGkgJCYgIFRoZSBtYXRjaGVkIHN1YnN0cmluZy4KKyAgICogQGxpICRgICBUaGUgcG9ydGlvbiBvZiBAYSBzdHJpbmcgdGhhdCBwcmVjZWRlcyB0aGUgbWF0Y2hlZCBzdWJzdHJpbmcuCisgICAqICAgICAgICAgVGhpcyB3b3VsZCBiZSBtYXRjaF9yZXN1bHRzOjpwcmVmaXgoKS4KKyAgICogQGxpICQnICBUaGUgcG9ydGlvbiBvZiBAYSBzdHJpbmcgdGhhdCBmb2xsb3dzIHRoZSBtYXRjaGVkIHN1YnN0cmluZy4KKyAgICogICAgICAgICBUaGlzIHdvdWxkIGJlIG1hdGNoX3Jlc3VsdHM6OnN1ZmZpeCgpLgorICAgKiBAbGkgJG4gIFRoZSBudGggY2FwdHVyZSwgd2hlcmUgbiBpcyBpbiBbMSw5XSBhbmQgJG4gaXMgbm90IGZvbGxvd2VkIGJ5IGEKKyAgICogICAgICAgICBkZWNpbWFsIGRpZ2l0LiAgSWYgbiA8PSBtYXRjaF9yZXN1bHRzOjpzaXplKCkgYW5kIHRoZSBudGggY2FwdHVyZQorICAgKiAgICAgICAgIGlzIHVuZGVmaW5lZCwgdXNlIHRoZSBlbXB0eSBzdHJpbmcgaW5zdGVhZC4gIElmIG4gPgorICAgKiAgICAgICAgIG1hdGNoX3Jlc3VsdHM6OnNpemUoKSwgdGhlIHJlc3VsdCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAgKiBAbGkgJG5uIFRoZSBubnRoIGNhcHR1cmUsIHdoZXJlIG5uIGlzIGEgdHdvLWRpZ2l0IGRlY2ltYWwgbnVtYmVyIG9uCisgICAqICAgICAgICAgWzAxLCA5OV0uICBJZiBubiA8PSBtYXRjaF9yZXN1bHRzOjpzaXplKCkgYW5kIHRoZSBudGggY2FwdHVyZSBpcworICAgKiAgICAgICAgIHVuZGVmaW5lZCwgdXNlIHRoZSBlbXB0eSBzdHJpbmcgaW5zdGVhZC4gSWYKKyAgICogICAgICAgICBubiA+IG1hdGNoX3Jlc3VsdHM6OnNpemUoKSwgdGhlIHJlc3VsdCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAgKi8KKyAgY29uc3RleHByIG1hdGNoX2ZsYWdfdHlwZSBmb3JtYXRfZGVmYXVsdCAgICA9IDA7CisKKyAgLyoqCisgICAqIFdoZW4gYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggaXMgdG8gYmUgcmVwbGFjZWQgYnkgYSBuZXcgc3RyaW5nLCB0aGUKKyAgICogbmV3IHN0cmluZyBpcyBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgcnVsZXMgdXNlZCBieSB0aGUgUE9TSVggc2VkIHV0aWxpdHkKKyAgICogaW4gSUVFRSBTdGQgMTAwMy4xLSAyMDAxIFtJRUVFLCBJbmZvcm1hdGlvbiBUZWNobm9sb2d5IC0tIFBvcnRhYmxlCisgICAqIE9wZXJhdGluZyBTeXN0ZW0gSW50ZXJmYWNlIChQT1NJWCksIElFRUUgU3RhbmRhcmQgMTAwMy4xLTIwMDFdLgorICAgKi8KKyAgY29uc3RleHByIG1hdGNoX2ZsYWdfdHlwZSBmb3JtYXRfc2VkICAgICAgICA9IDEgPDwgX1Nfc2VkOworCisgIC8qKgorICAgKiBEdXJpbmcgYSBzZWFyY2ggYW5kIHJlcGxhY2Ugb3BlcmF0aW9uLCBzZWN0aW9ucyBvZiB0aGUgY2hhcmFjdGVyCisgICAqIGNvbnRhaW5lciBzZXF1ZW5jZSBiZWluZyBzZWFyY2hlZCB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgcmVndWxhcgorICAgKiBleHByZXNzaW9uIHNoYWxsIG5vdCBiZSBjb3BpZWQgdG8gdGhlIG91dHB1dCBzdHJpbmcuCisgICAqLworICBjb25zdGV4cHIgbWF0Y2hfZmxhZ190eXBlIGZvcm1hdF9ub19jb3B5ICAgID0gMSA8PCBfU19ub19jb3B5OworCisgIC8qKgorICAgKiBXaGVuIHNwZWNpZmllZCBkdXJpbmcgYSBzZWFyY2ggYW5kIHJlcGxhY2Ugb3BlcmF0aW9uLCBvbmx5IHRoZSBmaXJzdAorICAgKiBvY2N1cnJlbmNlIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gc2hhbGwgYmUgcmVwbGFjZWQuCisgICAqLworICBjb25zdGV4cHIgbWF0Y2hfZmxhZ190eXBlIGZvcm1hdF9maXJzdF9vbmx5ID0gMSA8PCBfU19maXJzdF9vbmx5OworCisgIC8vQH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSByZWdleF9jb25zdGFudHMKKworLyogQH0gKi8gLy8gZ3JvdXAgcmVnZXgKK30gLy8gbmFtZXNwYWNlIHN0ZAorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXhfY3Vyc29yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXhfY3Vyc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlOWQxZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9jdXJzb3IuaApAQCAtMCwwICsxLDEwMCBAQAorLy8gY2xhc3MgdGVtcGxhdGUgcmVnZXggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiAgQGZpbGUgYml0cy9yZWdleF9jdXJzb3IuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3JlZ2V4fQorICovCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fZGV0YWlsCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiAgQGRlZmdyb3VwIHJlZ2V4LWRldGFpbCBCYXNlIGFuZCBJbXBsZW1lbnRhdGlvbiBDbGFzc2VzCisgICAqICBAaW5ncm91cCByZWdleAorICAgKiAgQHsKKyAgICovCisKKyAgLy8vIEFCQyBmb3IgcGF0dGVybiBtYXRjaGluZworICBzdHJ1Y3QgX1BhdHRlcm5DdXJzb3IKKyAgeworICAgIHZpcnR1YWwgfl9QYXR0ZXJuQ3Vyc29yKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBfTV9uZXh0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBfTV9hdF9lbmQoKSBjb25zdCA9IDA7CisgIH07CisKKyAgLy8vIFByb3ZpZGVzIGEgY3Vyc29yIGludG8gdGhlIHNwZWNpZmljIHRhcmdldCBzdHJpbmcuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RJdGVyVD4KKyAgICBjbGFzcyBfU3BlY2lhbGl6ZWRDdXJzb3IKKyAgICA6IHB1YmxpYyBfUGF0dGVybkN1cnNvcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBfU3BlY2lhbGl6ZWRDdXJzb3IoY29uc3QgX0Z3ZEl0ZXJUJiBfX2IsIGNvbnN0IF9Gd2RJdGVyVCBfX2UpCisgICAgICA6IF9NX2IoX19iKSwgX01fYyhfX2IpLCBfTV9lKF9fZSkKKyAgICAgIHsgfQorCisgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRndkSXRlclQ+Ojp2YWx1ZV90eXBlCisgICAgICBfTV9jdXJyZW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpfTV9jOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX25leHQoKQorICAgICAgeyArK19NX2M7IH0KKworICAgICAgX0Z3ZEl0ZXJUCisgICAgICBfTV9wb3MoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYzsgfQorCisgICAgICBjb25zdCBfRndkSXRlclQmCisgICAgICBfTV9iZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9iOyB9CisKKyAgICAgIGNvbnN0IF9Gd2RJdGVyVCYKKyAgICAgIF9NX2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9lOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2F0X2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9jID09IF9NX2U7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfRndkSXRlclQgX01fYjsKKyAgICAgIF9Gd2RJdGVyVCBfTV9jOworICAgICAgX0Z3ZEl0ZXJUIF9NX2U7CisgICAgfTsKKworICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgY3Vyc29yIHNwZWNpYWxpemVkIGZvciBhbiBpdGVyYXRvciBjbGFzcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z3ZEl0ZXJUPgorICAgIGlubGluZSBfU3BlY2lhbGl6ZWRDdXJzb3I8X0Z3ZEl0ZXJUPgorICAgIF9fY3Vyc29yKGNvbnN0IF9Gd2RJdGVyVCYgX19iLCBjb25zdCBfRndkSXRlclQgX19lKQorICAgIHsgcmV0dXJuIF9TcGVjaWFsaXplZEN1cnNvcjxfRndkSXRlclQ+KF9fYiwgX19lKTsgfQorCisgLy9AfSByZWdleC1kZXRhaWwKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXhfZXJyb3IuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9lcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMGIyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXhfZXJyb3IuaApAQCAtMCwwICsxLDE2NyBAQAorLy8gY2xhc3MgdGVtcGxhdGUgcmVnZXggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiBAZmlsZSBiaXRzL3JlZ2V4X2Vycm9yLmgKKyAqIEBicmllZiBFcnJvciBhbmQgZXhjZXB0aW9uIG9iamVjdHMgZm9yIHRoZSBzdGQgcmVnZXggbGlicmFyeS4KKyAqCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7cmVnZXh9CisgKi8KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CisvKioKKyAqIEBhZGR0b2dyb3VwIHJlZ2V4CisgKiBAeworICovCisKK25hbWVzcGFjZSByZWdleF9jb25zdGFudHMKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBuYW1lIDUuMyBFcnJvciBUeXBlcworICAgKi8KKyAgLy9AeworIAorICBlbnVtIGVycm9yX3R5cGUKKyAgICB7CisgICAgICBfU19lcnJvcl9jb2xsYXRlLAorICAgICAgX1NfZXJyb3JfY3R5cGUsCisgICAgICBfU19lcnJvcl9lc2NhcGUsCisgICAgICBfU19lcnJvcl9iYWNrcmVmLAorICAgICAgX1NfZXJyb3JfYnJhY2ssCisgICAgICBfU19lcnJvcl9wYXJlbiwKKyAgICAgIF9TX2Vycm9yX2JyYWNlLAorICAgICAgX1NfZXJyb3JfYmFkYnJhY2UsCisgICAgICBfU19lcnJvcl9yYW5nZSwKKyAgICAgIF9TX2Vycm9yX3NwYWNlLAorICAgICAgX1NfZXJyb3JfYmFkcmVwZWF0LAorICAgICAgX1NfZXJyb3JfY29tcGxleGl0eSwKKyAgICAgIF9TX2Vycm9yX3N0YWNrLAorICAgICAgX1NfZXJyb3JfbGFzdAorICAgIH07CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGNvbGxhdGluZyBlbGVtZW50IG5hbWUuICovCisgIGNvbnN0ZXhwciBlcnJvcl90eXBlIGVycm9yX2NvbGxhdGUoX1NfZXJyb3JfY29sbGF0ZSk7CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAqLworICBjb25zdGV4cHIgZXJyb3JfdHlwZSBlcnJvcl9jdHlwZShfU19lcnJvcl9jdHlwZSk7CisKKyAgLyoqCisgICAqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGVzY2FwZWQgY2hhcmFjdGVyLCBvciBhIHRyYWlsaW5nCisgICAqIGVzY2FwZS4KKyAgICovCisgIGNvbnN0ZXhwciBlcnJvcl90eXBlIGVycm9yX2VzY2FwZShfU19lcnJvcl9lc2NhcGUpOworCisgIC8qKiBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgYW4gaW52YWxpZCBiYWNrIHJlZmVyZW5jZS4gKi8KKyAgY29uc3RleHByIGVycm9yX3R5cGUgZXJyb3JfYmFja3JlZihfU19lcnJvcl9iYWNrcmVmKTsKKworICAvKiogVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIG1pc21hdGNoZWQgWyBhbmQgXS4gKi8KKyAgY29uc3RleHByIGVycm9yX3R5cGUgZXJyb3JfYnJhY2soX1NfZXJyb3JfYnJhY2spOworCisgIC8qKiBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgbWlzbWF0Y2hlZCAoIGFuZCApLiAqLworICBjb25zdGV4cHIgZXJyb3JfdHlwZSBlcnJvcl9wYXJlbihfU19lcnJvcl9wYXJlbik7CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBtaXNtYXRjaGVkIHsgYW5kIH0gKi8KKyAgY29uc3RleHByIGVycm9yX3R5cGUgZXJyb3JfYnJhY2UoX1NfZXJyb3JfYnJhY2UpOworCisgIC8qKiBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgYW4gaW52YWxpZCByYW5nZSBpbiBhIHt9IGV4cHJlc3Npb24uICovCisgIGNvbnN0ZXhwciBlcnJvcl90eXBlIGVycm9yX2JhZGJyYWNlKF9TX2Vycm9yX2JhZGJyYWNlKTsKKworICAvKioKKyAgICogVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLAorICAgKiBzdWNoIGFzIFtiLWFdIGluIG1vc3QgZW5jb2RpbmdzLgorICAgKi8KKyAgY29uc3RleHByIGVycm9yX3R5cGUgZXJyb3JfcmFuZ2UoX1NfZXJyb3JfcmFuZ2UpOworCisgIC8qKgorICAgKiBUaGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBjb252ZXJ0IHRoZSBleHByZXNzaW9uIGludG8gYQorICAgKiBmaW5pdGUgc3RhdGUgbWFjaGluZS4KKyAgICovCisgIGNvbnN0ZXhwciBlcnJvcl90eXBlIGVycm9yX3NwYWNlKF9TX2Vycm9yX3NwYWNlKTsKKworICAvKioKKyAgICogT25lIG9mIDxlbT4qPyt7PC9lbT4gd2FzIG5vdCBwcmVjZWRlZCBieSBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICovCisgIGNvbnN0ZXhwciBlcnJvcl90eXBlIGVycm9yX2JhZHJlcGVhdChfU19lcnJvcl9iYWRyZXBlYXQpOworCisgIC8qKgorICAgKiBUaGUgY29tcGxleGl0eSBvZiBhbiBhdHRlbXB0ZWQgbWF0Y2ggYWdhaW5zdCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiBleGNlZWRlZCBhIHByZS1zZXQgbGV2ZWwuCisgICAqLworICBjb25zdGV4cHIgZXJyb3JfdHlwZSBlcnJvcl9jb21wbGV4aXR5KF9TX2Vycm9yX2NvbXBsZXhpdHkpOworCisgIC8qKgorICAgKiBUaGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUKKyAgICogcmVndWxhciBleHByZXNzaW9uIGNvdWxkIG1hdGNoIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgKi8KKyAgY29uc3RleHByIGVycm9yX3R5cGUgZXJyb3Jfc3RhY2soX1NfZXJyb3Jfc3RhY2spOworCisgIC8vQH0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgcmVnZXhfY29uc3RhbnRzCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gWzcuOF0gQ2xhc3MgcmVnZXhfZXJyb3IKKyAgLyoqCisgICAqIEBicmllZiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBleGNlcHRpb24gY2xhc3MuCisgICAqIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICoKKyAgICogVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5IHRocm93cyBvYmplY3RzIG9mIHRoaXMgY2xhc3Mgb24gZXJyb3IuCisgICAqLworICBjbGFzcyByZWdleF9lcnJvciA6IHB1YmxpYyBzdGQ6OnJ1bnRpbWVfZXJyb3IKKyAgeworICAgIHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfdHlwZSBfTV9jb2RlOworCisgIHB1YmxpYzoKKyAgICAvKioKKyAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIHJlZ2V4X2Vycm9yIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBfX2Vjb2RlIHRoZSByZWdleCBlcnJvciBjb2RlLgorICAgICAqLworICAgIGV4cGxpY2l0CisgICAgcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl90eXBlIF9fZWNvZGUpOworCisgICAgdmlydHVhbCB+cmVnZXhfZXJyb3IoKSB0aHJvdygpOworCisgICAgLyoqCisgICAgICogQGJyaWVmIEdldHMgdGhlIHJlZ2V4IGVycm9yIGNvZGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyB0aGUgcmVnZXggZXJyb3IgY29kZS4KKyAgICAgKi8KKyAgICByZWdleF9jb25zdGFudHM6OmVycm9yX3R5cGUKKyAgICBjb2RlKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9jb2RlOyB9CisgIH07CisKKyAgLy9AfSAvLyBncm91cCByZWdleAorCisgIHZvaWQKKyAgX190aHJvd19yZWdleF9lcnJvcihyZWdleF9jb25zdGFudHM6OmVycm9yX3R5cGUgX19lY29kZSk7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXhfZ3JlcF9tYXRjaGVyLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXhfZ3JlcF9tYXRjaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5N2ZjMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9ncmVwX21hdGNoZXIuaApAQCAtMCwwICsxLDEzOCBAQAorLy8gY2xhc3MgdGVtcGxhdGUgcmVnZXggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqCisgKiAgQGZpbGUgYml0cy9yZWdleF9ncmVwX21hdGNoZXIuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3JlZ2V4fQorICovCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGNsYXNzIHN1Yl9tYXRjaDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBjbGFzcyBtYXRjaF9yZXN1bHRzOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAgCituYW1lc3BhY2UgX19kZXRhaWwKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAZGVmZ3JvdXAgcmVnZXgtZGV0YWlsIEJhc2UgYW5kIEltcGxlbWVudGF0aW9uIENsYXNzZXMKKyAgICogIEBpbmdyb3VwIHJlZ2V4CisgICAqICBAeworICAgKi8KKworICAvLy8gQSBfUmVzdWx0cyBmYWNhZGUgc3BlY2lhbGl6ZWQgZm9yIHdyYXBwaW5nIGEgdGVtcGxhdGVkIG1hdGNoX3Jlc3VsdHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RJdGVyVCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIF9TcGVjaWFsaXplZFJlc3VsdHMKKyAgICA6IHB1YmxpYyBfUmVzdWx0cworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBfU3BlY2lhbGl6ZWRSZXN1bHRzKGNvbnN0IF9BdXRvbWF0b246Ol9TaXplVCBfX3NpemUsCisJCQkgIGNvbnN0IF9TcGVjaWFsaXplZEN1cnNvcjxfRndkSXRlclQ+JiBfX2N1cnNvciwKKwkJCSAgbWF0Y2hfcmVzdWx0czxfRndkSXRlclQsIF9BbGxvYz4mIF9fbSk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldF9wb3MoaW50IF9faSwgaW50IF9faiwgY29uc3QgX1BhdHRlcm5DdXJzb3ImIF9fcGMpOworCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfbWF0Y2hlZChpbnQgX19pLCBib29sIF9faXNfbWF0Y2hlZCkKKyAgICAgIHsgX01fcmVzdWx0cy5hdChfX2kpLm1hdGNoZWQgPSBfX2lzX21hdGNoZWQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICBtYXRjaF9yZXN1bHRzPF9Gd2RJdGVyVCwgX0FsbG9jPiYgX01fcmVzdWx0czsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RJdGVyVCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9TcGVjaWFsaXplZFJlc3VsdHM8X0Z3ZEl0ZXJULCBfQWxsb2M+OjoKKyAgICBfU3BlY2lhbGl6ZWRSZXN1bHRzKGNvbnN0IF9BdXRvbWF0b246Ol9TaXplVCBfX3NpemUsCisgICAgCQkJY29uc3QgX1NwZWNpYWxpemVkQ3Vyc29yPF9Gd2RJdGVyVD4mIF9fY3Vyc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfcmVzdWx0czxfRndkSXRlclQsIF9BbGxvYz4mIF9fbSkKKyAgICA6IF9NX3Jlc3VsdHMoX19tKQorICAgIHsKKyAgICAgIF9NX3Jlc3VsdHMuY2xlYXIoKTsKKyAgICAgIF9NX3Jlc3VsdHMucmVzZXJ2ZShfX3NpemUgKyAyKTsKKyAgICAgIF9NX3Jlc3VsdHMucmVzaXplKF9fc2l6ZSk7CisgICAgICB0eXBlbmFtZSBtYXRjaF9yZXN1bHRzPF9Gd2RJdGVyVCwgX0FsbG9jPjo6dmFsdWVfdHlwZSBfX3NtOworICAgICAgX19zbS5maXJzdCA9IF9fc20uc2Vjb25kID0gX19jdXJzb3IuX01fYmVnaW4oKTsKKyAgICAgIF9NX3Jlc3VsdHMucHVzaF9iYWNrKF9fc20pOworICAgICAgX19zbS5maXJzdCA9IF9fc20uc2Vjb25kID0gX19jdXJzb3IuX01fZW5kKCk7CisgICAgICBfTV9yZXN1bHRzLnB1c2hfYmFjayhfX3NtKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z3ZEl0ZXJULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9TcGVjaWFsaXplZFJlc3VsdHM8X0Z3ZEl0ZXJULCBfQWxsb2M+OjoKKyAgICBfTV9zZXRfcG9zKGludCBfX2ksIGludCBfX2osIGNvbnN0IF9QYXR0ZXJuQ3Vyc29yJiBfX3BjKQorICAgIHsgCisgICAgICB0eXBlZGVmIGNvbnN0IF9TcGVjaWFsaXplZEN1cnNvcjxfRndkSXRlclQ+JiBfQ3Vyc29yVDsKKyAgICAgIF9DdXJzb3JUIF9fYyA9IHN0YXRpY19jYXN0PF9DdXJzb3JUPihfX3BjKTsKKyAgICAgIGlmIChfX2ogPT0gMCkKKwlfTV9yZXN1bHRzLmF0KF9faSkuZmlyc3QgPSBfX2MuX01fcG9zKCk7CisgICAgICBlbHNlCisJX01fcmVzdWx0cy5hdChfX2kpLnNlY29uZCA9IF9fYy5fTV9wb3MoKSsxOworICAgIH0KKworICAvLy8gQSBzdGFjayBvZiBzdGF0ZXMgdXNlZCBpbiBldmFsdWF0aW5nIHRoZSBORkEuCisgIHR5cGVkZWYgc3RkOjpzdGFjazxfU3RhdGVJZFQsIHN0ZDo6dmVjdG9yPF9TdGF0ZUlkVD4gPiBfU3RhdGVTdGFjazsKKworICAvLy8gRXhlY3V0ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gTkZBL0RGQSBvdmVyIGEgcmFuZ2UgdXNpbmcgYQorICAvLy8gdmFyaWFudCBvZiB0aGUgcGFyYWxsZWwgZXhlY3V0aW9uIGFsZ29yaXRobSBmZWF0dXJlZCBpbiB0aGUgZ3JlcAorICAvLy8gdXRpbGl0eSwgbW9kaWZpZWQgdG8gdXNlIExhdXJpa2FyaSB0YWdzLgorICBjbGFzcyBfR3JlcF9tYXRjaGVyCisgIHsKKyAgcHVibGljOgorICAgIF9HcmVwX21hdGNoZXIoX1BhdHRlcm5DdXJzb3ImICAgICAgICAgICAgICAgICAgIF9fcCwKKwkJICBfUmVzdWx0cyYgICAgICAgICAgICAgICAgICAgICAgICAgX19yLAorCQkgIGNvbnN0IF9BdXRvbWF0b25QdHImICAgICAgICAgICAgICBfX2F1dG9tYXRvbiwKKwkJICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSAgX19mbGFncyk7CisKKyAgcHJpdmF0ZToKKyAgICBfU3RhdGVTZXQKKyAgICBfTV9lX2Nsb3N1cmUoX1N0YXRlSWRUIF9faSk7CisKKyAgICBfU3RhdGVTZXQKKyAgICBfTV9lX2Nsb3N1cmUoY29uc3QgX1N0YXRlU2V0JiBfX3MpOworCisgICAgX1N0YXRlU2V0CisgICAgX01fZV9jbG9zdXJlKF9TdGF0ZVN0YWNrJiBfX3N0YWNrLCBjb25zdCBfU3RhdGVTZXQmIF9fcyk7CisKKyAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8X05mYT4gICAgICAgIF9NX25mYTsKKyAgICBfUGF0dGVybkN1cnNvciYgICAgICAgICAgICAgICAgICAgIF9NX3BhdHRlcm47CisgICAgX1Jlc3VsdHMmICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9yZXN1bHRzOworICB9OworCisgLy9AfSByZWdleC1kZXRhaWwKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjaW5jbHVkZSA8Yml0cy9yZWdleF9ncmVwX21hdGNoZXIudGNjPgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4X2dyZXBfbWF0Y2hlci50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXhfZ3JlcF9tYXRjaGVyLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTM4MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4X2dyZXBfbWF0Y2hlci50Y2MKQEAgLTAsMCArMSwxNzkgQEAKKy8vIGNsYXNzIHRlbXBsYXRlIHJlZ2V4IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogIEBmaWxlIGJpdHMvcmVnZXhfZ3JlcF9tYXRjaGVyLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3JlZ2V4fQorICovCisKKyNpbmNsdWRlIDxyZWdleD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UKK3sKKyAgLy8gQSBzdGFjayBvZiBzdGF0ZXMgdXNlZCBpbiBldmFsdWF0aW5nIHRoZSBORkEuCisgIHR5cGVkZWYgc3RkOjpzdGFjazxzdGQ6Ol9fZGV0YWlsOjpfU3RhdGVJZFQsCisgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6Ol9fZGV0YWlsOjpfU3RhdGVJZFQ+CisJCSAgICAgPiBfU3RhdGVTdGFjazsKKworICAvLyBPYnRhaW5zIHRoZSBuZXh0IHN0YXRlIHNldCBnaXZlbiB0aGUgY3VycmVudCBzdGF0ZSBzZXQgX19zIGFuZCB0aGUgY3VycmVudAorICAvLyBpbnB1dCBjaGFyYWN0ZXIuCisgIGlubGluZSBzdGQ6Ol9fZGV0YWlsOjpfU3RhdGVTZXQKKyAgX19tb3ZlKGNvbnN0IHN0ZDo6X19kZXRhaWw6Ol9QYXR0ZXJuQ3Vyc29yJiBfX3AsCisgICAgICAgICBjb25zdCBzdGQ6Ol9fZGV0YWlsOjpfTmZhJiBfX25mYSwKKyAgICAgICAgIGNvbnN0IHN0ZDo6X19kZXRhaWw6Ol9TdGF0ZVNldCYgX19zKQorICB7CisgICAgc3RkOjpfX2RldGFpbDo6X1N0YXRlU2V0IF9fbTsKKyAgICBmb3IgKHN0ZDo6X19kZXRhaWw6Ol9TdGF0ZVNldDo6Y29uc3RfaXRlcmF0b3IgX19pID0gX19zLmJlZ2luKCk7CisJIF9faSAhPSBfX3MuZW5kKCk7ICsrX19pKQorICAgICAgeworCWlmICgqX19pID09IHN0ZDo6X19kZXRhaWw6Ol9TX2ludmFsaWRfc3RhdGVfaWQpCisJICBjb250aW51ZTsKKworCWNvbnN0IHN0ZDo6X19kZXRhaWw6Ol9TdGF0ZSYgX19zdGF0ZSA9IF9fbmZhWypfX2ldOworCWlmIChfX3N0YXRlLl9NX29wY29kZSA9PSBzdGQ6Ol9fZGV0YWlsOjpfU19vcGNvZGVfbWF0Y2gKKwkgICAgJiYgX19zdGF0ZS5fTV9tYXRjaGVzKF9fcCkpCisJICBfX20uaW5zZXJ0KF9fc3RhdGUuX01fbmV4dCk7CisgICAgICB9CisgICAgcmV0dXJuIF9fbTsKKyAgfQorCisgIC8vIHJldHVybnMgdHJ1ZSBpZiAoX19zIGludGVyc2VjdCBfX3QpIGlzIG5vdCBlbXB0eQorICBpbmxpbmUgYm9vbAorICBfX2luY2x1ZGVzX3NvbWUoY29uc3Qgc3RkOjpfX2RldGFpbDo6X1N0YXRlU2V0JiBfX3MsCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6Ol9fZGV0YWlsOjpfU3RhdGVTZXQmIF9fdCkKKyAgeworICAgIGlmIChfX3Muc2l6ZSgpID4gMCAmJiBfX3Quc2l6ZSgpID4gMCkKKyAgICAgIHsKKwlzdGQ6Ol9fZGV0YWlsOjpfU3RhdGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QgPSBfX3MuYmVnaW4oKTsKKwlzdGQ6Ol9fZGV0YWlsOjpfU3RhdGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIF9fc2Vjb25kID0gX190LmJlZ2luKCk7CisJd2hpbGUgKF9fZmlyc3QgIT0gX19zLmVuZCgpICYmIF9fc2Vjb25kICE9IF9fdC5lbmQoKSkKKwkgIHsKKwkgICAgaWYgKCpfX2ZpcnN0IDwgKl9fc2Vjb25kKQorCSAgICAgICsrX19maXJzdDsKKwkgICAgZWxzZSBpZiAoKl9fc2Vjb25kIDwgKl9fZmlyc3QpCisJICAgICAgKytfX3NlY29uZDsKKwkgICAgZWxzZQorCSAgICAgIHJldHVybiB0cnVlOworCSAgfQorICAgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIC8vIElmIGFuIGlkZW50aWZpZWQgc3RhdGUgX191IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBjdXJyZW50IHN0YXRlIHNldCBfX2UsCisgIC8vIGluc2VydCBpdCBhbmQgcHVzaCBpdCBvbiB0aGUgY3VycmVudCBzdGF0ZSBzdGFjayBfX3MuCisgIGlubGluZSB2b2lkCisgIF9fYWRkX3Zpc2l0ZWRfc3RhdGUoY29uc3Qgc3RkOjpfX2RldGFpbDo6X1N0YXRlSWRUIF9fdSwKKyAgICAgICAgICAgICAgICAgICAgICBfU3RhdGVTdGFjayYgICAgICAgICAgICAgICAgICBfX3MsCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjpfX2RldGFpbDo6X1N0YXRlU2V0JiAgICAgIF9fZSkKKyAgeworICAgIGlmIChfX2UuY291bnQoX191KSA9PSAwKQorICAgICAgeworCV9fZS5pbnNlcnQoX191KTsKKwlfX3MucHVzaChfX3UpOworICAgICAgfQorICB9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCituYW1lc3BhY2UgX19kZXRhaWwKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgaW5saW5lIF9HcmVwX21hdGNoZXI6OgorICBfR3JlcF9tYXRjaGVyKF9QYXR0ZXJuQ3Vyc29yJiBfX3AsIF9SZXN1bHRzJiBfX3IsCisJCWNvbnN0IF9BdXRvbWF0b25QdHImIF9fbmZhLAorCQlyZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzKQorICA6IF9NX25mYShzdGF0aWNfcG9pbnRlcl9jYXN0PF9OZmE+KF9fbmZhKSksIF9NX3BhdHRlcm4oX19wKSwgX01fcmVzdWx0cyhfX3IpCisgIHsKKyAgICBfX2RldGFpbDo6X1N0YXRlU2V0IF9fdCA9IHRoaXMtPl9NX2VfY2xvc3VyZShfTV9uZmEtPl9NX3N0YXJ0KCkpOworICAgIGZvciAoOyAhX01fcGF0dGVybi5fTV9hdF9lbmQoKTsgX01fcGF0dGVybi5fTV9uZXh0KCkpCisgICAgICBfX3QgPSB0aGlzLT5fTV9lX2Nsb3N1cmUoX19tb3ZlKF9NX3BhdHRlcm4sICpfTV9uZmEsIF9fdCkpOworCisgICAgX01fcmVzdWx0cy5fTV9zZXRfbWF0Y2hlZCgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbmNsdWRlc19zb21lKF9NX25mYS0+X01fZmluYWxfc3RhdGVzKCksIF9fdCkpOworICB9CisKKyAgLy8gQ3JlYXRlcyB0aGUgZS1jbG9zdXJlIHNldCBmb3IgdGhlIGluaXRpYWwgc3RhdGUgX19pLgorICBpbmxpbmUgX1N0YXRlU2V0IF9HcmVwX21hdGNoZXI6OgorICBfTV9lX2Nsb3N1cmUoX1N0YXRlSWRUIF9faSkKKyAgeworICAgIF9TdGF0ZVNldCBfX3M7CisgICAgX19zLmluc2VydChfX2kpOworICAgIF9TdGF0ZVN0YWNrIF9fc3RhY2s7CisgICAgX19zdGFjay5wdXNoKF9faSk7CisgICAgcmV0dXJuIHRoaXMtPl9NX2VfY2xvc3VyZShfX3N0YWNrLCBfX3MpOworICB9CisKKyAgLy8gQ3JlYXRlcyB0aGUgZS1jbG9zdXJlIHNldCBmb3IgYW4gYXJiaXRyYXJ5IHN0YXRlIHNldCBfX3MuCisgIGlubGluZSBfU3RhdGVTZXQgX0dyZXBfbWF0Y2hlcjo6CisgIF9NX2VfY2xvc3VyZShjb25zdCBfU3RhdGVTZXQmIF9fcykKKyAgeworICAgIF9TdGF0ZVN0YWNrIF9fc3RhY2s7CisgICAgZm9yIChfU3RhdGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIF9faSA9IF9fcy5iZWdpbigpOyBfX2kgIT0gX19zLmVuZCgpOyArK19faSkKKyAgICAgIF9fc3RhY2sucHVzaCgqX19pKTsKKyAgICByZXR1cm4gdGhpcy0+X01fZV9jbG9zdXJlKF9fc3RhY2ssIF9fcyk7CisgIH0KKworICBpbmxpbmUgX1N0YXRlU2V0IF9HcmVwX21hdGNoZXI6OgorICBfTV9lX2Nsb3N1cmUoX1N0YXRlU3RhY2smIF9fc3RhY2ssIGNvbnN0IF9TdGF0ZVNldCYgX19zKQorICB7CisgICAgX1N0YXRlU2V0IF9fZSA9IF9fczsKKyAgICB3aGlsZSAoIV9fc3RhY2suZW1wdHkoKSkKKyAgICAgIHsKKwlfU3RhdGVJZFQgX190ID0gX19zdGFjay50b3AoKTsgX19zdGFjay5wb3AoKTsKKwlpZiAoX190ID09IF9TX2ludmFsaWRfc3RhdGVfaWQpCisJICBjb250aW51ZTsKKwkvLyBmb3IgZWFjaCBfX3Ugd2l0aCBlZGdlIGZyb20gX190IHRvIF9fdSBsYWJlbGVkIGUgZG8gLi4uCisJY29uc3QgX1N0YXRlJiBfX3N0YXRlID0gX01fbmZhLT5vcGVyYXRvcltdKF9fdCk7CisJc3dpdGNoIChfX3N0YXRlLl9NX29wY29kZSkKKwkgIHsKKwkgIGNhc2UgX1Nfb3Bjb2RlX2FsdGVybmF0aXZlOgorCSAgICBfX2FkZF92aXNpdGVkX3N0YXRlKF9fc3RhdGUuX01fbmV4dCwgX19zdGFjaywgX19lKTsKKwkgICAgX19hZGRfdmlzaXRlZF9zdGF0ZShfX3N0YXRlLl9NX2FsdCwgX19zdGFjaywgX19lKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9TX29wY29kZV9zdWJleHByX2JlZ2luOgorCSAgICBfX2FkZF92aXNpdGVkX3N0YXRlKF9fc3RhdGUuX01fbmV4dCwgX19zdGFjaywgX19lKTsKKwkgICAgX19zdGF0ZS5fTV90YWdnZXIoX01fcGF0dGVybiwgX01fcmVzdWx0cyk7CisJICAgIGJyZWFrOworCSAgY2FzZSBfU19vcGNvZGVfc3ViZXhwcl9lbmQ6CisJICAgIF9fYWRkX3Zpc2l0ZWRfc3RhdGUoX19zdGF0ZS5fTV9uZXh0LCBfX3N0YWNrLCBfX2UpOworCSAgICBfX3N0YXRlLl9NX3RhZ2dlcihfTV9wYXR0ZXJuLCBfTV9yZXN1bHRzKTsKKwkgICAgX01fcmVzdWx0cy5fTV9zZXRfbWF0Y2hlZChfX3N0YXRlLl9NX3N1YmV4cHIsIHRydWUpOworCSAgICBicmVhazsKKwkgIGNhc2UgX1Nfb3Bjb2RlX2FjY2VwdDoKKwkgICAgX19hZGRfdmlzaXRlZF9zdGF0ZShfX3N0YXRlLl9NX25leHQsIF9fc3RhY2ssIF9fZSk7CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgICAgcmV0dXJuIF9fZTsKKyAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIF9fZGV0YWlsCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4X25mYS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4X25mYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzAyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvcmVnZXhfbmZhLmgKQEAgLTAsMCArMSw0MTUgQEAKKy8vIGNsYXNzIHRlbXBsYXRlIHJlZ2V4IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogIEBmaWxlIGJpdHMvcmVnZXhfbmZhLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtyZWdleH0KKyAqLworCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX2RldGFpbAoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcmVnZXgtZGV0YWlsCisgICAqIEB7CisgICAqLworCisgIC8vLyBCYXNlIGNsYXNzIGZvciwgdW0sIGF1dG9tYXRhLiAgQ291bGQgYmUgYW4gTkZBIG9yIGEgREZBLiAgWW91ciBjaG9pY2UuCisgIGNsYXNzIF9BdXRvbWF0b24KKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX1NpemVUOworCisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsCisgICAgfl9BdXRvbWF0b24oKSB7IH0KKworICAgIHZpcnR1YWwgX1NpemVUCisgICAgX01fc3ViX2NvdW50KCkgY29uc3QgPSAwOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICB2aXJ0dWFsIHN0ZDo6b3N0cmVhbSYKKyAgICBfTV9kb3Qoc3RkOjpvc3RyZWFtJiBfX29zdHIpIGNvbnN0ID0gMDsKKyNlbmRpZgorICB9OworCisgIC8vLyBHZW5lcmljIHNoYXJlZCBwb2ludGVyIHRvIGFuIGF1dG9tYXRvbi4gIAorICB0eXBlZGVmIHN0ZDo6c2hhcmVkX3B0cjxfQXV0b21hdG9uPiBfQXV0b21hdG9uUHRyOworCisgIC8vLyBPcGVyYXRpb24gY29kZXMgdGhhdCBkZWZpbmUgdGhlIHR5cGUgb2YgdHJhbnNpdGlvbnMgd2l0aGluIHRoZSBiYXNlIE5GQQorICAvLy8gdGhhdCByZXByZXNlbnRzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgIGVudW0gX09wY29kZQorICB7CisgICAgICBfU19vcGNvZGVfdW5rbm93biAgICAgICA9ICAgMCwKKyAgICAgIF9TX29wY29kZV9hbHRlcm5hdGl2ZSAgID0gICAxLAorICAgICAgX1Nfb3Bjb2RlX3N1YmV4cHJfYmVnaW4gPSAgIDQsCisgICAgICBfU19vcGNvZGVfc3ViZXhwcl9lbmQgICA9ICAgNSwKKyAgICAgIF9TX29wY29kZV9tYXRjaCAgICAgICAgID0gMTAwLAorICAgICAgX1Nfb3Bjb2RlX2FjY2VwdCAgICAgICAgPSAyNTUKKyAgfTsKKworICAvLy8gUHJvdmlkZXMgYSBnZW5lcmljIGZhY2FkZSBmb3IgYSB0ZW1wbGF0ZWQgbWF0Y2hfcmVzdWx0cy4KKyAgc3RydWN0IF9SZXN1bHRzCisgIHsKKyAgICB2aXJ0dWFsIHZvaWQgX01fc2V0X3BvcyhpbnQgX19pLCBpbnQgX19qLCBjb25zdCBfUGF0dGVybkN1cnNvciYgX19wKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIF9NX3NldF9tYXRjaGVkKGludCBfX2ksIGJvb2wgX19pc19tYXRjaGVkKSA9IDA7CisgIH07CisKKyAgLy8vIFRhZ3MgY3VycmVudCBzdGF0ZSAoZm9yIHN1YmV4cHIgYmVnaW4vZW5kKS4KKyAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IF9QYXR0ZXJuQ3Vyc29yJiwgX1Jlc3VsdHMmKT4gX1RhZ2dlcjsKKworICAvLy8gU3RhcnQgc3RhdGUgdGFnLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRndkSXRlclQsIHR5cGVuYW1lIF9UcmFpdHNUPgorICAgIHN0cnVjdCBfU3RhcnRUYWdnZXIKKyAgICB7CisgICAgICBleHBsaWNpdAorICAgICAgX1N0YXJ0VGFnZ2VyKGludCBfX2kpCisgICAgICA6IF9NX2luZGV4KF9faSkKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9QYXR0ZXJuQ3Vyc29yJiBfX3BjLCBfUmVzdWx0cyYgX19yKQorICAgICAgeyBfX3IuX01fc2V0X3BvcyhfTV9pbmRleCwgMCwgX19wYyk7IH0KKworICAgICAgaW50ICAgICAgIF9NX2luZGV4OworICAgIH07CisKKyAgLy8vIEVuZCBzdGF0ZSB0YWcuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RJdGVyVCwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgc3RydWN0IF9FbmRUYWdnZXIKKyAgICB7CisgICAgICBleHBsaWNpdAorICAgICAgX0VuZFRhZ2dlcihpbnQgX19pKQorICAgICAgOiBfTV9pbmRleChfX2kpCisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfUGF0dGVybkN1cnNvciYgX19wYywgX1Jlc3VsdHMmIF9fcikKKyAgICAgIHsgX19yLl9NX3NldF9wb3MoX01faW5kZXgsIDEsIF9fcGMpOyB9CisKKyAgICAgIGludCAgICAgICBfTV9pbmRleDsKKyAgICAgIF9Gd2RJdGVyVCBfTV9wb3M7CisgICAgfTsKKworICAvLy8gSW5kaWNhdGVzIGlmIGN1cnJlbnQgc3RhdGUgbWF0Y2hlcyBjdXJzb3IgY3VycmVudC4KKyAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IF9QYXR0ZXJuQ3Vyc29yJik+IF9NYXRjaGVyOworCisgIC8vLyBNYXRjaGVzIGFueSBjaGFyYWN0ZXIKKyAgaW5saW5lIGJvb2wKKyAgX0FueU1hdGNoZXIoY29uc3QgX1BhdHRlcm5DdXJzb3ImKQorICB7IHJldHVybiB0cnVlOyB9CisKKyAgLy8vIE1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXJULCB0eXBlbmFtZSBfVHJhaXRzVD4KKyAgICBzdHJ1Y3QgX0NoYXJNYXRjaGVyCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVDo6Y2hhcl90eXBlIGNoYXJfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIF9DaGFyTWF0Y2hlcihjaGFyX3R5cGUgX19jLCBjb25zdCBfVHJhaXRzVCYgX190ID0gX1RyYWl0c1QoKSkKKyAgICAgIDogX01fdHJhaXRzKF9fdCksIF9NX2MoX01fdHJhaXRzLnRyYW5zbGF0ZShfX2MpKQorICAgICAgeyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1BhdHRlcm5DdXJzb3ImIF9fcGMpIGNvbnN0CisgICAgICB7CisJdHlwZWRlZiBjb25zdCBfU3BlY2lhbGl6ZWRDdXJzb3I8X0luSXRlclQ+JiBfQ3Vyc29yVDsKKwlfQ3Vyc29yVCBfX2MgPSBzdGF0aWNfY2FzdDxfQ3Vyc29yVD4oX19wYyk7CisJcmV0dXJuIF9NX3RyYWl0cy50cmFuc2xhdGUoX19jLl9NX2N1cnJlbnQoKSkgPT0gX01fYzsKKyAgICAgIH0KKworICAgICAgY29uc3QgX1RyYWl0c1QmIF9NX3RyYWl0czsKKyAgICAgIGNoYXJfdHlwZSAgICAgICBfTV9jOworICAgIH07CisKKyAgLy8vIE1hdGNoZXMgYSBjaGFyYWN0ZXIgcmFuZ2UgKGJyYWNrZXQgZXhwcmVzc2lvbikKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlclQsIHR5cGVuYW1lIF9UcmFpdHNUPgorICAgIHN0cnVjdCBfUmFuZ2VNYXRjaGVyCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVDo6Y2hhcl90eXBlIF9DaGFyVDsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJUPiAgICBfU3RyaW5nVDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIF9SYW5nZU1hdGNoZXIoYm9vbCBfX2lzX25vbl9tYXRjaGluZywgY29uc3QgX1RyYWl0c1QmIF9fdCA9IF9UcmFpdHNUKCkpCisgICAgICA6IF9NX3RyYWl0cyhfX3QpLCBfTV9pc19ub25fbWF0Y2hpbmcoX19pc19ub25fbWF0Y2hpbmcpCisgICAgICB7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfUGF0dGVybkN1cnNvciYgX19wYykgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIGNvbnN0IF9TcGVjaWFsaXplZEN1cnNvcjxfSW5JdGVyVD4mIF9DdXJzb3JUOworCV9DdXJzb3JUIF9fYyA9IHN0YXRpY19jYXN0PF9DdXJzb3JUPihfX3BjKTsKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fYWRkX2NoYXIoX0NoYXJUIF9fYykKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9hZGRfY29sbGF0aW5nX2VsZW1lbnQoY29uc3QgX1N0cmluZ1QmIF9fcykKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9hZGRfZXF1aXZhbGVuY2VfY2xhc3MoY29uc3QgX1N0cmluZ1QmIF9fcykKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9hZGRfY2hhcmFjdGVyX2NsYXNzKGNvbnN0IF9TdHJpbmdUJiBfX3MpCisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fbWFrZV9yYW5nZSgpCisgICAgICB7IH0KKworICAgICAgY29uc3QgX1RyYWl0c1QmIF9NX3RyYWl0czsKKyAgICAgIGJvb2wgICAgICAgICAgICBfTV9pc19ub25fbWF0Y2hpbmc7CisgICAgfTsKKworICAvLy8gSWRlbnRpZmllcyBhIHN0YXRlIGluIHRoZSBORkEuCisgIHR5cGVkZWYgaW50IF9TdGF0ZUlkVDsKKworICAvLy8gVGhlIHNwZWNpYWwgY2FzZSBpbiB3aGljaCBhIHN0YXRlIGlkZW50aWZpZXIgaXMgbm90IGFuIGluZGV4LgorICBzdGF0aWMgY29uc3QgX1N0YXRlSWRUIF9TX2ludmFsaWRfc3RhdGVfaWQgID0gLTE7CisKKworICAvKioKKyAgICogQGJyaWVmIHN0cnVjdCBfU3RhdGUKKyAgICoKKyAgICogQW4gaW5kaXZpZHVhbCBzdGF0ZSBpbiBhbiBORkEKKyAgICoKKyAgICogSW4gdGhpcyBjYXNlIGEgInN0YXRlIiBpcyBhbiBlbnRyeSBpbiB0aGUgTkZBIGRlZmluaXRpb24gY291cGxlZAorICAgKiB3aXRoIGl0cyBvdXRnb2luZyB0cmFuc2l0aW9uKHMpLiAgQWxsIHN0YXRlcyBoYXZlIGEgc2luZ2xlIG91dGdvaW5nCisgICAqIHRyYW5zaXRpb24sIGV4Y2VwdCBmb3IgYWNjZXB0aW5nIHN0YXRlcyAod2hpY2ggaGF2ZSBubyBvdXRnb2luZworICAgKiB0cmFuc2l0aW9ucykgYW5kIGFsdCBzdGF0ZXMsIHdoaWNoIGhhdmUgdHdvIG91dGdvaW5nIHRyYW5zaXRpb25zLgorICAgKi8KKyAgc3RydWN0IF9TdGF0ZQorICB7CisgICAgdHlwZWRlZiBpbnQgIF9PcGNvZGVUOworCisgICAgX09wY29kZVQgICAgIF9NX29wY29kZTsgICAgLy8gdHlwZSBvZiBvdXRnb2luZyB0cmFuc2l0aW9uCisgICAgX1N0YXRlSWRUICAgIF9NX25leHQ7ICAgICAgLy8gb3V0Z29pbmcgdHJhbnNpdGlvbgorICAgIF9TdGF0ZUlkVCAgICBfTV9hbHQ7ICAgICAgIC8vIGZvciBfU19vcGNvZGVfYWx0ZXJuYXRpdmUKKyAgICB1bnNpZ25lZCBpbnQgX01fc3ViZXhwcjsgICAvLyBmb3IgX1Nfb3Bjb2RlX3N1YmV4cHJfKgorICAgIF9UYWdnZXIgICAgICBfTV90YWdnZXI7ICAgIC8vIGZvciBfU19vcGNvZGVfc3ViZXhwcl8qCisgICAgX01hdGNoZXIgICAgIF9NX21hdGNoZXM7ICAgLy8gZm9yIF9TX29wY29kZV9tYXRjaAorCisgICAgZXhwbGljaXQgX1N0YXRlKF9PcGNvZGVUIF9fb3Bjb2RlKQorICAgIDogX01fb3Bjb2RlKF9fb3Bjb2RlKSwgX01fbmV4dChfU19pbnZhbGlkX3N0YXRlX2lkKQorICAgIHsgfQorCisgICAgX1N0YXRlKGNvbnN0IF9NYXRjaGVyJiBfX20pCisgICAgOiBfTV9vcGNvZGUoX1Nfb3Bjb2RlX21hdGNoKSwgX01fbmV4dChfU19pbnZhbGlkX3N0YXRlX2lkKSwgX01fbWF0Y2hlcyhfX20pCisgICAgeyB9CisKKyAgICBfU3RhdGUoX09wY29kZVQgX19vcGNvZGUsIHVuc2lnbmVkIGludCBfX3MsIGNvbnN0IF9UYWdnZXImIF9fdCkKKyAgICA6IF9NX29wY29kZShfX29wY29kZSksIF9NX25leHQoX1NfaW52YWxpZF9zdGF0ZV9pZCksIF9NX3N1YmV4cHIoX19zKSwKKyAgICAgIF9NX3RhZ2dlcihfX3QpCisgICAgeyB9CisKKyAgICBfU3RhdGUoX1N0YXRlSWRUIF9fbmV4dCwgX1N0YXRlSWRUIF9fYWx0KQorICAgIDogX01fb3Bjb2RlKF9TX29wY29kZV9hbHRlcm5hdGl2ZSksIF9NX25leHQoX19uZXh0KSwgX01fYWx0KF9fYWx0KQorICAgIHsgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBzdGQ6Om9zdHJlYW0mCisgICAgX01fcHJpbnQoc3RkOjpvc3RyZWFtJiBvc3RyKSBjb25zdDsKKworICAgIC8vIFByaW50cyBncmFwaHZpeiBkb3QgY29tbWFuZHMgZm9yIHN0YXRlLgorICAgIHN0ZDo6b3N0cmVhbSYKKyAgICBfTV9kb3Qoc3RkOjpvc3RyZWFtJiBfX29zdHIsIF9TdGF0ZUlkVCBfX2lkKSBjb25zdDsKKyNlbmRpZgorICB9OworCisgIAorICAvLy8gVGhlIEdyZXAgTWF0Y2hlciB3b3JrcyBvbiBzZXRzIG9mIHN0YXRlcy4gIEhlcmUgYXJlIHNldHMgb2Ygc3RhdGVzLgorICB0eXBlZGVmIHN0ZDo6c2V0PF9TdGF0ZUlkVD4gX1N0YXRlU2V0OworCisgIC8qKgorICAgKiBAYnJpZWYgc3RydWN0IF9OZmEKKyAgICoKKyAgICogQSBjb2xsZWN0aW9uIG9mIGFsbCBzdGF0ZXMgbWFraW5nIHVwIGFuIE5GQS4KKyAgICoKKyAgICogQW4gTkZBIGlzIGEgNC10dXBsZSBNID0gKEssIFMsIHMsIEYpLCB3aGVyZQorICAgKiAgICBLIGlzIGEgZmluaXRlIHNldCBvZiBzdGF0ZXMsCisgICAqICAgIFMgaXMgdGhlIGFscGhhYmV0IG9mIHRoZSBORkEsCisgICAqICAgIHMgaXMgdGhlIGluaXRpYWwgc3RhdGUsCisgICAqICAgIEYgaXMgYSBzZXQgb2YgZmluYWwgKGFjY2VwdGluZykgc3RhdGVzLgorICAgKgorICAgKiBUaGlzIE5GQSBjbGFzcyBpcyB0ZW1wbGF0ZWQgb24gUywgYSB0eXBlIHRoYXQgd2lsbCBob2xkIHZhbHVlcyBvZiB0aGUKKyAgICogdW5kZXJseWluZyBhbHBoYWJldCAod2l0aG91dCByZWdhcmQgdG8gc2VtYW50aWNzIG9mIHRoYXQgYWxwaGFiZXQpLiAgVGhlCisgICAqIG90aGVyIGVsZW1lbnRzIG9mIHRoZSB0dXBsZSBhcmUgZ2VuZXJhdGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhlIE5GQQorICAgKiBhbmQgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIGFjY2Vzc29yIG1lbWJlciBmdW5jdGlvbnMuCisgICAqLworICBjbGFzcyBfTmZhCisgIDogcHVibGljIF9BdXRvbWF0b24sIHB1YmxpYyBzdGQ6OnZlY3RvcjxfU3RhdGU+CisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgX1N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1N0YXRlVDsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICAgIF9TaXplVDsKKyAgICB0eXBlZGVmIHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIF9GbGFnVDsKKworICAgIF9OZmEoX0ZsYWdUIF9fZikKKyAgICA6IF9NX2ZsYWdzKF9fZiksIF9NX3N0YXJ0X3N0YXRlKDApLCBfTV9zdWJleHByX2NvdW50KDApCisgICAgeyB9CisKKyAgICB+X05mYSgpCisgICAgeyB9CisKKyAgICBfRmxhZ1QKKyAgICBfTV9vcHRpb25zKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9mbGFnczsgfQorCisgICAgX1N0YXRlSWRUCisgICAgX01fc3RhcnQoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3N0YXJ0X3N0YXRlOyB9CisKKyAgICBjb25zdCBfU3RhdGVTZXQmCisgICAgX01fZmluYWxfc3RhdGVzKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9hY2NlcHRpbmdfc3RhdGVzOyB9CisKKyAgICBfU2l6ZVQKKyAgICBfTV9zdWJfY291bnQoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3N1YmV4cHJfY291bnQ7IH0KKworICAgIF9TdGF0ZUlkVAorICAgIF9NX2luc2VydF9hY2NlcHQoKQorICAgIHsKKyAgICAgIHRoaXMtPnB1c2hfYmFjayhfU3RhdGVUKF9TX29wY29kZV9hY2NlcHQpKTsKKyAgICAgIF9NX2FjY2VwdGluZ19zdGF0ZXMuaW5zZXJ0KHRoaXMtPnNpemUoKS0xKTsKKyAgICAgIHJldHVybiB0aGlzLT5zaXplKCktMTsKKyAgICB9CisKKyAgICBfU3RhdGVJZFQKKyAgICBfTV9pbnNlcnRfYWx0KF9TdGF0ZUlkVCBfX25leHQsIF9TdGF0ZUlkVCBfX2FsdCkKKyAgICB7CisgICAgICB0aGlzLT5wdXNoX2JhY2soX1N0YXRlVChfX25leHQsIF9fYWx0KSk7CisgICAgICByZXR1cm4gdGhpcy0+c2l6ZSgpLTE7CisgICAgfQorCisgICAgX1N0YXRlSWRUCisgICAgX01faW5zZXJ0X21hdGNoZXIoX01hdGNoZXIgX19tKQorICAgIHsKKyAgICAgIHRoaXMtPnB1c2hfYmFjayhfU3RhdGVUKF9fbSkpOworICAgICAgcmV0dXJuIHRoaXMtPnNpemUoKS0xOworICAgIH0KKworICAgIF9TdGF0ZUlkVAorICAgIF9NX2luc2VydF9zdWJleHByX2JlZ2luKGNvbnN0IF9UYWdnZXImIF9fdCkKKyAgICB7CisgICAgICB0aGlzLT5wdXNoX2JhY2soX1N0YXRlVChfU19vcGNvZGVfc3ViZXhwcl9iZWdpbiwgX01fc3ViZXhwcl9jb3VudCsrLAorCQkJICAgICAgX190KSk7CisgICAgICByZXR1cm4gdGhpcy0+c2l6ZSgpLTE7CisgICAgfQorCisgICAgX1N0YXRlSWRUIAorICAgIF9NX2luc2VydF9zdWJleHByX2VuZCh1bnNpZ25lZCBpbnQgX19pLCBjb25zdCBfVGFnZ2VyJiBfX3QpCisgICAgeworICAgICAgdGhpcy0+cHVzaF9iYWNrKF9TdGF0ZVQoX1Nfb3Bjb2RlX3N1YmV4cHJfZW5kLCBfX2ksIF9fdCkpOworICAgICAgcmV0dXJuIHRoaXMtPnNpemUoKS0xOworICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgc3RkOjpvc3RyZWFtJgorICAgIF9NX2RvdChzdGQ6Om9zdHJlYW0mIF9fb3N0cikgY29uc3Q7CisjZW5kaWYKKworICBwcml2YXRlOgorICAgIF9GbGFnVCAgICAgX01fZmxhZ3M7CisgICAgX1N0YXRlSWRUICBfTV9zdGFydF9zdGF0ZTsKKyAgICBfU3RhdGVTZXQgIF9NX2FjY2VwdGluZ19zdGF0ZXM7CisgICAgX1NpemVUICAgICBfTV9zdWJleHByX2NvdW50OworICB9OworCisgIC8vLyBEZXNjcmliZXMgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSAlX1N0YXRlLCBpdHMgY3VycmVudCBzdGFydAorICAvLy8gYW5kIGVuZChzKS4gIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGZyYWdtZW50cyBvZiBhbiBORkEgZHVyaW5nCisgIC8vLyBjb25zdHJ1Y3Rpb24uCisgIGNsYXNzIF9TdGF0ZVNlcQorICB7CisgIHB1YmxpYzoKKyAgICAvLyBDb25zdHJ1Y3RzIGEgc2luZ2xlLW5vZGUgc2VxdWVuY2UKKyAgICBfU3RhdGVTZXEoX05mYSYgX19zcywgX1N0YXRlSWRUIF9fcywgX1N0YXRlSWRUIF9fZSA9IF9TX2ludmFsaWRfc3RhdGVfaWQpCisgICAgOiBfTV9uZmEoX19zcyksIF9NX3N0YXJ0KF9fcyksIF9NX2VuZDEoX19zKSwgX01fZW5kMihfX2UpCisgICAgeyB9CisgICAgLy8gQ29uc3RydWN0cyBhIHNwbGl0IHNlcXVlbmNlIGZyb20gdHdvIG90aGVyIHNlcXVlbmNjZXMKKyAgICBfU3RhdGVTZXEoY29uc3QgX1N0YXRlU2VxJiBfX2UxLCBjb25zdCBfU3RhdGVTZXEmIF9fZTIpCisgICAgOiBfTV9uZmEoX19lMS5fTV9uZmEpLAorICAgICAgX01fc3RhcnQoX01fbmZhLl9NX2luc2VydF9hbHQoX19lMS5fTV9zdGFydCwgX19lMi5fTV9zdGFydCkpLAorICAgICAgX01fZW5kMShfX2UxLl9NX2VuZDEpLCBfTV9lbmQyKF9fZTIuX01fZW5kMSkKKyAgICB7IH0KKworICAgIC8vIENvbnN0cnVjdHMgYSBzcGxpdCBzZXF1ZW5jZSBmcm9tIGEgc2luZ2xlIHNlcXVlbmNlCisgICAgX1N0YXRlU2VxKGNvbnN0IF9TdGF0ZVNlcSYgX19lLCBfU3RhdGVJZFQgX19pZCkKKyAgICA6IF9NX25mYShfX2UuX01fbmZhKSwKKyAgICAgIF9NX3N0YXJ0KF9NX25mYS5fTV9pbnNlcnRfYWx0KF9faWQsIF9fZS5fTV9zdGFydCkpLAorICAgICAgX01fZW5kMShfX2lkKSwgX01fZW5kMihfX2UuX01fZW5kMSkKKyAgICB7IH0KKworICAgIC8vIENvbnN0cnVjdHMgYSBjb3B5IG9mIGEgJV9TdGF0ZVNlcQorICAgIF9TdGF0ZVNlcShjb25zdCBfU3RhdGVTZXEmIF9fcmhzKQorICAgIDogX01fbmZhKF9fcmhzLl9NX25mYSksIF9NX3N0YXJ0KF9fcmhzLl9NX3N0YXJ0KSwKKyAgICAgIF9NX2VuZDEoX19yaHMuX01fZW5kMSksIF9NX2VuZDIoX19yaHMuX01fZW5kMikKKyAgICB7IH0KKworCisgICAgX1N0YXRlU2VxJiBvcGVyYXRvcj0oY29uc3QgX1N0YXRlU2VxJiBfX3Jocyk7CisKKyAgICBfU3RhdGVJZFQKKyAgICBfTV9mcm9udCgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fc3RhcnQ7IH0KKworICAgIC8vIEV4dGVuZHMgYSBzZXF1ZW5jZSBieSBvbmUuCisgICAgdm9pZAorICAgIF9NX3B1c2hfYmFjayhfU3RhdGVJZFQgX19pZCk7CisKKyAgICAvLyBFeHRlbmRzIGFuZCBtYXliZSBqb2lucyBhIHNlcXVlbmNlLgorICAgIHZvaWQKKyAgICBfTV9hcHBlbmQoX1N0YXRlSWRUIF9faWQpOworCisgICAgdm9pZAorICAgIF9NX2FwcGVuZChfU3RhdGVTZXEmIF9fcmhzKTsKKworICAgIC8vIENsb25lcyBhbiBlbnRpcmUgc2VxdWVuY2UuCisgICAgX1N0YXRlSWRUCisgICAgX01fY2xvbmUoKTsKKworICBwcml2YXRlOgorICAgIF9OZmEmICAgICBfTV9uZmE7CisgICAgX1N0YXRlSWRUIF9NX3N0YXJ0OworICAgIF9TdGF0ZUlkVCBfTV9lbmQxOworICAgIF9TdGF0ZUlkVCBfTV9lbmQyOworCisgIH07CisKKyAvL0B9IHJlZ2V4LWRldGFpbAorX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNpbmNsdWRlIDxiaXRzL3JlZ2V4X25mYS50Y2M+CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9uZmEudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3JlZ2V4X25mYS50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyNzdmOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9yZWdleF9uZmEudGNjCkBAIC0wLDAgKzEsMTc0IEBACisvLyBjbGFzcyB0ZW1wbGF0ZSByZWdleCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqIEBmaWxlIGJpdHMvcmVnZXhfbmZhLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3JlZ2V4fQorICovCisjaW5jbHVkZSA8cmVnZXg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fZGV0YWlsCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKK2lubGluZSBzdGQ6Om9zdHJlYW0mIF9TdGF0ZTo6CitfTV9wcmludChzdGQ6Om9zdHJlYW0mIG9zdHIpIGNvbnN0Cit7CisgIHN3aXRjaCAoX01fb3Bjb2RlKQorICB7CisgICAgY2FzZSBfU19vcGNvZGVfYWx0ZXJuYXRpdmU6CisgICAgICBvc3RyIDw8ICJhbHQgbmV4dD0iIDw8IF9NX25leHQgPDwgIiBhbHQ9IiA8PCBfTV9hbHQ7CisgICAgICBicmVhazsKKyAgICBjYXNlIF9TX29wY29kZV9zdWJleHByX2JlZ2luOgorICAgICAgb3N0ciA8PCAic3ViZXhwciBiZWdpbiBuZXh0PSIgPDwgX01fbmV4dCA8PCAiIGluZGV4PSIgPDwgX01fc3ViZXhwcjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgX1Nfb3Bjb2RlX3N1YmV4cHJfZW5kOgorICAgICAgb3N0ciA8PCAic3ViZXhwciBlbmQgbmV4dD0iIDw8IF9NX25leHQgPDwgIiBpbmRleD0iIDw8IF9NX3N1YmV4cHI7CisgICAgICBicmVhazsKKyAgICBjYXNlIF9TX29wY29kZV9tYXRjaDoKKyAgICAgIG9zdHIgPDwgIm1hdGNoIG5leHQ9IiA8PCBfTV9uZXh0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBfU19vcGNvZGVfYWNjZXB0OgorICAgICAgb3N0ciA8PCAiYWNjZXB0IG5leHQ9IiA8PCBfTV9uZXh0OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIG9zdHIgPDwgInVua25vd24gbmV4dD0iIDw8IF9NX25leHQ7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gb3N0cjsKK30KKworLy8gUHJpbnRzIGdyYXBodml6IGRvdCBjb21tYW5kcyBmb3Igc3RhdGUuCitpbmxpbmUgc3RkOjpvc3RyZWFtJiBfU3RhdGU6OgorX01fZG90KHN0ZDo6b3N0cmVhbSYgX19vc3RyLCBfU3RhdGVJZFQgX19pZCkgY29uc3QKK3sKKyAgc3dpdGNoIChfTV9vcGNvZGUpCisgIHsKKyAgICBjYXNlIF9TX29wY29kZV9hbHRlcm5hdGl2ZToKKyAgICAgIF9fb3N0ciA8PCBfX2lkIDw8ICIgW2xhYmVsPVwiIiA8PCBfX2lkIDw8ICJcXG5BTFRcIl07XG4iIAorICAgICAgICAgICAgIDw8IF9faWQgPDwgIiAtPiAiIDw8IF9NX25leHQKKyAgICAgICAgICAgICA8PCAiIFtsYWJlbD1cImVwc2lsb25cIiwgdGFpbHBvcnQ9XCJzXCJdO1xuIgorICAgICAgICAgICAgIDw8IF9faWQgPDwgIiAtPiAiIDw8IF9NX2FsdCAKKyAgICAgICAgICAgICA8PCAiIFtsYWJlbD1cImVwc2lsb25cIiwgdGFpbHBvcnQ9XCJuXCJdO1xuIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgX1Nfb3Bjb2RlX3N1YmV4cHJfYmVnaW46CisgICAgICBfX29zdHIgPDwgX19pZCA8PCAiIFtsYWJlbD1cIiIgPDwgX19pZCA8PCAiXFxuU0JFR0lOICIKKyAgICAgICAgICAgICA8PCBfTV9zdWJleHByIDw8ICJcIl07XG4iIAorICAgICAgICAgICAgIDw8IF9faWQgPDwgIiAtPiAiIDw8IF9NX25leHQgPDwgIiBbbGFiZWw9XCJlcHNpbG9uXCJdO1xuIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgX1Nfb3Bjb2RlX3N1YmV4cHJfZW5kOgorICAgICAgX19vc3RyIDw8IF9faWQgPDwgIiBbbGFiZWw9XCIiIDw8IF9faWQgPDwgIlxcblNFTkQgIgorICAgICAgICAgICAgIDw8IF9NX3N1YmV4cHIgPDwgIlwiXTtcbiIgCisgICAgICAgICAgICAgPDwgX19pZCA8PCAiIC0+ICIgPDwgX01fbmV4dCA8PCAiIFtsYWJlbD1cImVwc2lsb25cIl07XG4iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBfU19vcGNvZGVfbWF0Y2g6CisgICAgICBfX29zdHIgPDwgX19pZCA8PCAiIFtsYWJlbD1cIiIgPDwgX19pZCA8PCAiXFxuTUFUQ0hcIl07XG4iIAorICAgICAgICAgICAgIDw8IF9faWQgPDwgIiAtPiAiIDw8IF9NX25leHQgPDwgIiBbbGFiZWw9XCI8bWF0Y2g+XCJdO1xuIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgX1Nfb3Bjb2RlX2FjY2VwdDoKKyAgICAgIF9fb3N0ciA8PCBfX2lkIDw8ICIgW2xhYmVsPVwiIiA8PCBfX2lkIDw8ICJcXG5BQ0NcIl07XG4iIDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBfX29zdHIgPDwgX19pZCA8PCAiIFtsYWJlbD1cIiIgPDwgX19pZCA8PCAiXFxuVU5LXCJdO1xuIiAKKyAgICAgICAgICAgICA8PCBfX2lkIDw8ICIgLT4gIiA8PCBfTV9uZXh0IDw8ICIgW2xhYmVsPVwiP1wiXTtcbiI7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gX19vc3RyOworfQorCitpbmxpbmUgc3RkOjpvc3RyZWFtJiBfTmZhOjoKK19NX2RvdChzdGQ6Om9zdHJlYW0mIF9fb3N0cikgY29uc3QKK3sKKyAgX19vc3RyIDw8ICJkaWdyYXBoIF9OZmEge1xuIgorICAgPDwgIiAgcmFua2Rpcj1MUjtcbiI7CisgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDA7IF9faSA8IHRoaXMtPnNpemUoKTsgKytfX2kpCisgIHsgdGhpcy0+YXQoX19pKS5fTV9kb3QoX19vc3RyLCBfX2kpOyB9CisgIF9fb3N0ciA8PCAifVxuIjsKKyAgcmV0dXJuIF9fb3N0cjsKK30KKyNlbmRpZgorCitpbmxpbmUgX1N0YXRlU2VxJiBfU3RhdGVTZXE6Ogorb3BlcmF0b3I9KGNvbnN0IF9TdGF0ZVNlcSYgX19yaHMpCit7CisgIF9NX3N0YXJ0ID0gX19yaHMuX01fc3RhcnQ7CisgIF9NX2VuZDEgID0gX19yaHMuX01fZW5kMTsKKyAgX01fZW5kMiAgPSBfX3Jocy5fTV9lbmQyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSB2b2lkIF9TdGF0ZVNlcTo6CitfTV9wdXNoX2JhY2soX1N0YXRlSWRUIF9faWQpCit7CisgIGlmIChfTV9lbmQxICE9IF9TX2ludmFsaWRfc3RhdGVfaWQpCisgICAgX01fbmZhW19NX2VuZDFdLl9NX25leHQgPSBfX2lkOworICBfTV9lbmQxID0gX19pZDsKK30KKworaW5saW5lIHZvaWQgX1N0YXRlU2VxOjoKK19NX2FwcGVuZChfU3RhdGVJZFQgX19pZCkKK3sKKyAgaWYgKF9NX2VuZDIgIT0gX1NfaW52YWxpZF9zdGF0ZV9pZCkKKyAgeworICAgIGlmIChfTV9lbmQyID09IF9NX2VuZDEpCisgICAgICBfTV9uZmFbX01fZW5kMl0uX01fYWx0ID0gX19pZDsKKyAgICBlbHNlCisgICAgICBfTV9uZmFbX01fZW5kMl0uX01fbmV4dCA9IF9faWQ7CisgICAgX01fZW5kMiA9IF9TX2ludmFsaWRfc3RhdGVfaWQ7CisgIH0KKyAgaWYgKF9NX2VuZDEgIT0gX1NfaW52YWxpZF9zdGF0ZV9pZCkKKyAgICBfTV9uZmFbX01fZW5kMV0uX01fbmV4dCA9IF9faWQ7CisgIF9NX2VuZDEgPSBfX2lkOworfQorCitpbmxpbmUgdm9pZCBfU3RhdGVTZXE6OgorX01fYXBwZW5kKF9TdGF0ZVNlcSYgX19yaHMpCit7CisgIGlmIChfTV9lbmQyICE9IF9TX2ludmFsaWRfc3RhdGVfaWQpCisgIHsKKyAgICBpZiAoX01fZW5kMiA9PSBfTV9lbmQxKQorICAgICAgX01fbmZhW19NX2VuZDJdLl9NX2FsdCA9IF9fcmhzLl9NX3N0YXJ0OworICAgIGVsc2UKKyAgICAgIF9NX25mYVtfTV9lbmQyXS5fTV9uZXh0ID0gX19yaHMuX01fc3RhcnQ7CisgICAgX01fZW5kMiA9IF9TX2ludmFsaWRfc3RhdGVfaWQ7CisgIH0KKyAgaWYgKF9fcmhzLl9NX2VuZDIgIT0gX1NfaW52YWxpZF9zdGF0ZV9pZCkKKyAgICBfTV9lbmQyID0gX19yaHMuX01fZW5kMjsKKyAgaWYgKF9NX2VuZDEgIT0gX1NfaW52YWxpZF9zdGF0ZV9pZCkKKyAgICBfTV9uZmFbX01fZW5kMV0uX01fbmV4dCA9IF9fcmhzLl9NX3N0YXJ0OworICBfTV9lbmQxID0gX19yaHMuX01fZW5kMTsKK30KKworLy8gQHRvZG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCitpbmxpbmUgX1N0YXRlSWRUIF9TdGF0ZVNlcTo6CitfTV9jbG9uZSgpCit7IHJldHVybiAwOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc2hhcmVkX3B0ci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3NoYXJlZF9wdHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWYxYjY5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3NoYXJlZF9wdHIuaApAQCAtMCwwICsxLDYzMiBAQAorLy8gc2hhcmVkX3B0ciBhbmQgd2Vha19wdHIgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gR0NDIE5vdGU6IEJhc2VkIG9uIGZpbGVzIGZyb20gdmVyc2lvbiAxLjMyLjAgb2YgdGhlIEJvb3N0IGxpYnJhcnkuCisKKy8vICBzaGFyZWRfY291bnQuaHBwCisvLyAgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzIFBldGVyIERpbW92IGFuZCBNdWx0aSBNZWRpYSBMdGQuCisKKy8vICBzaGFyZWRfcHRyLmhwcAorLy8gIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBHcmVnIENvbHZpbiBhbmQgQmVtYW4gRGF3ZXMuCisvLyAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIFBldGVyIERpbW92CisKKy8vICB3ZWFrX3B0ci5ocHAKKy8vICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgUGV0ZXIgRGltb3YKKworLy8gIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzLmhwcAorLy8gIENvcHlyaWdodCAoQykgMjAwMiBQZXRlciBEaW1vdgorCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKKy8vIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8qKiBAZmlsZSBiaXRzL3NoYXJlZF9wdHIuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le21lbW9yeX0KKyAqLworCisjaWZuZGVmIF9TSEFSRURfUFRSX0gKKyNkZWZpbmUgX1NIQVJFRF9QVFJfSCAxCisKKyNpbmNsdWRlIDxiaXRzL3NoYXJlZF9wdHJfYmFzZS5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHBvaW50ZXJfYWJzdHJhY3Rpb25zCisgICAqIEB7CisgICAqLworCisgIC8vLyAyLjIuMy43IHNoYXJlZF9wdHIgSS9PCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaCwgdHlwZW5hbWUgX1RyLCB0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2gsIF9Ucj4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoLCBfVHI+JiBfX29zLAorCSAgICAgICBjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX3ApCisgICAgeworICAgICAgX19vcyA8PCBfX3AuZ2V0KCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgLy8vIDIuMi4zLjEwIHNoYXJlZF9wdHIgZ2V0X2RlbGV0ZXIgKGV4cGVyaW1lbnRhbCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0RlbCwgdHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfRGVsKgorICAgIGdldF9kZWxldGVyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fcCkgbm9leGNlcHQKKyAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9EZWwqPihfX3AuX01fZ2V0X2RlbGV0ZXIodHlwZWlkKF9EZWwpKSk7CisjZWxzZQorICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICB9CisKKworICAvKioKKyAgICogIEBicmllZiAgQSBzbWFydCBwb2ludGVyIHdpdGggcmVmZXJlbmNlLWNvdW50ZWQgY29weSBzZW1hbnRpY3MuCisgICAqCisgICAqICBUaGUgb2JqZWN0IHBvaW50ZWQgdG8gaXMgZGVsZXRlZCB3aGVuIHRoZSBsYXN0IHNoYXJlZF9wdHIgcG9pbnRpbmcgdG8KKyAgICogIGl0IGlzIGRlc3Ryb3llZCBvciByZXNldC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIHNoYXJlZF9wdHIgOiBwdWJsaWMgX19zaGFyZWRfcHRyPF9UcD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgYW4gZW1wdHkgJXNoYXJlZF9wdHIuCisgICAgICAgKiAgQHBvc3QgICB1c2VfY291bnQoKT09MCAmJiBnZXQoKT09MAorICAgICAgICovCisgICAgICBjb25zdGV4cHIgc2hhcmVkX3B0cigpIG5vZXhjZXB0CisgICAgICA6IF9fc2hhcmVkX3B0cjxfVHA+KCkgeyB9CisKKyAgICAgIHNoYXJlZF9wdHIoY29uc3Qgc2hhcmVkX3B0ciYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgYSAlc2hhcmVkX3B0ciB0aGF0IG93bnMgdGhlIHBvaW50ZXIgQGEgX19wLgorICAgICAgICogIEBwYXJhbSAgX19wICBBIHBvaW50ZXIgdGhhdCBpcyBjb252ZXJ0aWJsZSB0byBlbGVtZW50X3R5cGUqLgorICAgICAgICogIEBwb3N0ICAgdXNlX2NvdW50KCkgPT0gMSAmJiBnZXQoKSA9PSBfX3AKKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6YmFkX2FsbG9jLCBpbiB3aGljaCBjYXNlIEBjIGRlbGV0ZSBAYSBfX3AgaXMgY2FsbGVkLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWV4cGxpY2l0IHNoYXJlZF9wdHIoX1RwMSogX19wKQorICAgICAgICA6IF9fc2hhcmVkX3B0cjxfVHA+KF9fcCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IGEgJXNoYXJlZF9wdHIgdGhhdCBvd25zIHRoZSBwb2ludGVyIEBhIF9fcAorICAgICAgICogICAgICAgICAgYW5kIHRoZSBkZWxldGVyIEBhIF9fZC4KKyAgICAgICAqICBAcGFyYW0gIF9fcCAgQSBwb2ludGVyLgorICAgICAgICogIEBwYXJhbSAgX19kICBBIGRlbGV0ZXIuCisgICAgICAgKiAgQHBvc3QgICB1c2VfY291bnQoKSA9PSAxICYmIGdldCgpID09IF9fcAorICAgICAgICogIEB0aHJvdyAgc3RkOjpiYWRfYWxsb2MsIGluIHdoaWNoIGNhc2UgQGEgX19kKF9fcCkgaXMgY2FsbGVkLgorICAgICAgICoKKyAgICAgICAqICBSZXF1aXJlbWVudHM6IF9EZWxldGVyJ3MgY29weSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBtdXN0CisgICAgICAgKiAgbm90IHRocm93CisgICAgICAgKgorICAgICAgICogIF9fc2hhcmVkX3B0ciB3aWxsIHJlbGVhc2UgX19wIGJ5IGNhbGxpbmcgX19kKF9fcCkKKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisJc2hhcmVkX3B0cihfVHAxKiBfX3AsIF9EZWxldGVyIF9fZCkKKyAgICAgICAgOiBfX3NoYXJlZF9wdHI8X1RwPihfX3AsIF9fZCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IGEgJXNoYXJlZF9wdHIgdGhhdCBvd25zIGEgbnVsbCBwb2ludGVyCisgICAgICAgKiAgICAgICAgICBhbmQgdGhlIGRlbGV0ZXIgQGEgX19kLgorICAgICAgICogIEBwYXJhbSAgX19wICBBIG51bGwgcG9pbnRlciBjb25zdGFudC4KKyAgICAgICAqICBAcGFyYW0gIF9fZCAgQSBkZWxldGVyLgorICAgICAgICogIEBwb3N0ICAgdXNlX2NvdW50KCkgPT0gMSAmJiBnZXQoKSA9PSBfX3AKKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6YmFkX2FsbG9jLCBpbiB3aGljaCBjYXNlIEBhIF9fZChfX3ApIGlzIGNhbGxlZC4KKyAgICAgICAqCisgICAgICAgKiAgUmVxdWlyZW1lbnRzOiBfRGVsZXRlcidzIGNvcHkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgbXVzdAorICAgICAgICogIG5vdCB0aHJvdworICAgICAgICoKKyAgICAgICAqICBUaGUgbGFzdCBvd25lciB3aWxsIGNhbGwgX19kKF9fcCkKKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0RlbGV0ZXI+CisJc2hhcmVkX3B0cihudWxscHRyX3QgX19wLCBfRGVsZXRlciBfX2QpCisgICAgICAgIDogX19zaGFyZWRfcHRyPF9UcD4oX19wLCBfX2QpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBhICVzaGFyZWRfcHRyIHRoYXQgb3ducyB0aGUgcG9pbnRlciBAYSBfX3AKKyAgICAgICAqICAgICAgICAgIGFuZCB0aGUgZGVsZXRlciBAYSBfX2QuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIEEgcG9pbnRlci4KKyAgICAgICAqICBAcGFyYW0gIF9fZCAgQSBkZWxldGVyLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3IuCisgICAgICAgKiAgQHBvc3QgICB1c2VfY291bnQoKSA9PSAxICYmIGdldCgpID09IF9fcAorICAgICAgICogIEB0aHJvdyAgc3RkOjpiYWRfYWxsb2MsIGluIHdoaWNoIGNhc2UgQGEgX19kKF9fcCkgaXMgY2FsbGVkLgorICAgICAgICoKKyAgICAgICAqICBSZXF1aXJlbWVudHM6IF9EZWxldGVyJ3MgY29weSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBtdXN0CisgICAgICAgKiAgbm90IHRocm93IF9BbGxvYydzIGNvcHkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgbXVzdCBub3QKKyAgICAgICAqICB0aHJvdy4KKyAgICAgICAqCisgICAgICAgKiAgX19zaGFyZWRfcHRyIHdpbGwgcmVsZWFzZSBfX3AgYnkgY2FsbGluZyBfX2QoX19wKQorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfRGVsZXRlciwgdHlwZW5hbWUgX0FsbG9jPgorCXNoYXJlZF9wdHIoX1RwMSogX19wLCBfRGVsZXRlciBfX2QsIF9BbGxvYyBfX2EpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3AsIF9fZCwgc3RkOjptb3ZlKF9fYSkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBhICVzaGFyZWRfcHRyIHRoYXQgb3ducyBhIG51bGwgcG9pbnRlcgorICAgICAgICogICAgICAgICAgYW5kIHRoZSBkZWxldGVyIEBhIF9fZC4KKyAgICAgICAqICBAcGFyYW0gIF9fcCAgQSBudWxsIHBvaW50ZXIgY29uc3RhbnQuCisgICAgICAgKiAgQHBhcmFtICBfX2QgIEEgZGVsZXRlci4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yLgorICAgICAgICogIEBwb3N0ICAgdXNlX2NvdW50KCkgPT0gMSAmJiBnZXQoKSA9PSBfX3AKKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6YmFkX2FsbG9jLCBpbiB3aGljaCBjYXNlIEBhIF9fZChfX3ApIGlzIGNhbGxlZC4KKyAgICAgICAqCisgICAgICAgKiAgUmVxdWlyZW1lbnRzOiBfRGVsZXRlcidzIGNvcHkgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgbXVzdAorICAgICAgICogIG5vdCB0aHJvdyBfQWxsb2MncyBjb3B5IGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIG11c3Qgbm90CisgICAgICAgKiAgdGhyb3cuCisgICAgICAgKgorICAgICAgICogIFRoZSBsYXN0IG93bmVyIHdpbGwgY2FsbCBfX2QoX19wKQorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGVsZXRlciwgdHlwZW5hbWUgX0FsbG9jPgorCXNoYXJlZF9wdHIobnVsbHB0cl90IF9fcCwgX0RlbGV0ZXIgX19kLCBfQWxsb2MgX19hKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19wLCBfX2QsIHN0ZDo6bW92ZShfX2EpKSB7IH0KKworICAgICAgLy8gQWxpYXNpbmcgY29uc3RydWN0b3IKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RzIGEgJXNoYXJlZF9wdHIgaW5zdGFuY2UgdGhhdCBzdG9yZXMgQGEgX19wCisgICAgICAgKiAgICAgICAgICBhbmQgc2hhcmVzIG93bmVyc2hpcCB3aXRoIEBhIF9fci4KKyAgICAgICAqICBAcGFyYW0gIF9fciAgQSAlc2hhcmVkX3B0ci4KKyAgICAgICAqICBAcGFyYW0gIF9fcCAgQSBwb2ludGVyIHRoYXQgd2lsbCByZW1haW4gdmFsaWQgd2hpbGUgQGEgKl9fciBpcyB2YWxpZC4KKyAgICAgICAqICBAcG9zdCAgIGdldCgpID09IF9fcCAmJiB1c2VfY291bnQoKSA9PSBfX3IudXNlX2NvdW50KCkKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBAYyBzaGFyZWRfcHRyIHRvIGEgc3ViLW9iamVjdAorICAgICAgICogIG9mIGFuIG9iamVjdCBtYW5hZ2VkIGJ5IGFuIGV4aXN0aW5nIEBjIHNoYXJlZF9wdHIuCisgICAgICAgKgorICAgICAgICogQGNvZGUKKyAgICAgICAqIHNoYXJlZF9wdHI8IHBhaXI8aW50LGludD4gPiBwaWkobmV3IHBhaXI8aW50LGludD4oKSk7CisgICAgICAgKiBzaGFyZWRfcHRyPGludD4gcGkocGlpLCAmcGlpLT5maXJzdCk7CisgICAgICAgKiBhc3NlcnQocGlpLnVzZV9jb3VudCgpID09IDIpOworICAgICAgICogQGVuZGNvZGUKKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlzaGFyZWRfcHRyKGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fciwgX1RwKiBfX3ApIG5vZXhjZXB0CisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3IsIF9fcCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSWYgQGEgX19yIGlzIGVtcHR5LCBjb25zdHJ1Y3RzIGFuIGVtcHR5ICVzaGFyZWRfcHRyOworICAgICAgICogICAgICAgICAgb3RoZXJ3aXNlIGNvbnN0cnVjdCBhICVzaGFyZWRfcHRyIHRoYXQgc2hhcmVzIG93bmVyc2hpcAorICAgICAgICogICAgICAgICAgd2l0aCBAYSBfX3IuCisgICAgICAgKiAgQHBhcmFtICBfX3IgIEEgJXNoYXJlZF9wdHIuCisgICAgICAgKiAgQHBvc3QgICBnZXQoKSA9PSBfX3IuZ2V0KCkgJiYgdXNlX2NvdW50KCkgPT0gX19yLnVzZV9jb3VudCgpCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb252ZXJ0aWJsZTxfVHAxKiwgX1RwKj46OnZhbHVlPjo6dHlwZT4KKwlzaGFyZWRfcHRyKGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikgbm9leGNlcHQKKyAgICAgICAgOiBfX3NoYXJlZF9wdHI8X1RwPihfX3IpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1vdmUtY29uc3RydWN0cyBhICVzaGFyZWRfcHRyIGluc3RhbmNlIGZyb20gQGEgX19yLgorICAgICAgICogIEBwYXJhbSAgX19yICBBICVzaGFyZWRfcHRyIHJ2YWx1ZS4KKyAgICAgICAqICBAcG9zdCAgICp0aGlzIGNvbnRhaW5zIHRoZSBvbGQgdmFsdWUgb2YgQGEgX19yLCBAYSBfX3IgaXMgZW1wdHkuCisgICAgICAgKi8KKyAgICAgIHNoYXJlZF9wdHIoc2hhcmVkX3B0ciYmIF9fcikgbm9leGNlcHQKKyAgICAgIDogX19zaGFyZWRfcHRyPF9UcD4oc3RkOjptb3ZlKF9fcikpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1vdmUtY29uc3RydWN0cyBhICVzaGFyZWRfcHRyIGluc3RhbmNlIGZyb20gQGEgX19yLgorICAgICAgICogIEBwYXJhbSAgX19yICBBICVzaGFyZWRfcHRyIHJ2YWx1ZS4KKyAgICAgICAqICBAcG9zdCAgICp0aGlzIGNvbnRhaW5zIHRoZSBvbGQgdmFsdWUgb2YgQGEgX19yLCBAYSBfX3IgaXMgZW1wdHkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb252ZXJ0aWJsZTxfVHAxKiwgX1RwKj46OnZhbHVlPjo6dHlwZT4KKwlzaGFyZWRfcHRyKHNoYXJlZF9wdHI8X1RwMT4mJiBfX3IpIG5vZXhjZXB0CisJOiBfX3NoYXJlZF9wdHI8X1RwPihzdGQ6Om1vdmUoX19yKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0cyBhICVzaGFyZWRfcHRyIHRoYXQgc2hhcmVzIG93bmVyc2hpcCB3aXRoIEBhIF9fcgorICAgICAgICogICAgICAgICAgYW5kIHN0b3JlcyBhIGNvcHkgb2YgdGhlIHBvaW50ZXIgc3RvcmVkIGluIEBhIF9fci4KKyAgICAgICAqICBAcGFyYW0gIF9fciAgQSB3ZWFrX3B0ci4KKyAgICAgICAqICBAcG9zdCAgIHVzZV9jb3VudCgpID09IF9fci51c2VfY291bnQoKQorICAgICAgICogIEB0aHJvdyAgYmFkX3dlYWtfcHRyIHdoZW4gX19yLmV4cGlyZWQoKSwKKyAgICAgICAqICAgICAgICAgIGluIHdoaWNoIGNhc2UgdGhlIGNvbnN0cnVjdG9yIGhhcyBubyBlZmZlY3QuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJZXhwbGljaXQgc2hhcmVkX3B0cihjb25zdCB3ZWFrX3B0cjxfVHAxPiYgX19yKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yKSB7IH0KKworI2lmIF9HTElCQ1hYX1VTRV9ERVBSRUNBVEVECisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXNoYXJlZF9wdHIoc3RkOjphdXRvX3B0cjxfVHAxPiYmIF9fcik7CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbD4KKwlzaGFyZWRfcHRyKHN0ZDo6dW5pcXVlX3B0cjxfVHAxLCBfRGVsPiYmIF9fcikKKwk6IF9fc2hhcmVkX3B0cjxfVHA+KHN0ZDo6bW92ZShfX3IpKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgYW4gZW1wdHkgJXNoYXJlZF9wdHIuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIEEgbnVsbCBwb2ludGVyIGNvbnN0YW50LgorICAgICAgICogIEBwb3N0ICAgdXNlX2NvdW50KCkgPT0gMCAmJiBnZXQoKSA9PSBudWxscHRyCisgICAgICAgKi8KKyAgICAgIGNvbnN0ZXhwciBzaGFyZWRfcHRyKG51bGxwdHJfdCBfX3ApIG5vZXhjZXB0CisgICAgICA6IF9fc2hhcmVkX3B0cjxfVHA+KF9fcCkgeyB9CisKKyAgICAgIHNoYXJlZF9wdHImIG9wZXJhdG9yPShjb25zdCBzaGFyZWRfcHRyJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXNoYXJlZF9wdHImCisJb3BlcmF0b3I9KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikgbm9leGNlcHQKKwl7CisJICB0aGlzLT5fX3NoYXJlZF9wdHI8X1RwPjo6b3BlcmF0b3I9KF9fcik7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisjaWYgX0dMSUJDWFhfVVNFX0RFUFJFQ0FURUQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJc2hhcmVkX3B0ciYKKwlvcGVyYXRvcj0oc3RkOjphdXRvX3B0cjxfVHAxPiYmIF9fcikKKwl7CisJICB0aGlzLT5fX3NoYXJlZF9wdHI8X1RwPjo6b3BlcmF0b3I9KHN0ZDo6bW92ZShfX3IpKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisjZW5kaWYKKworICAgICAgc2hhcmVkX3B0ciYKKyAgICAgIG9wZXJhdG9yPShzaGFyZWRfcHRyJiYgX19yKSBub2V4Y2VwdAorICAgICAgeworCXRoaXMtPl9fc2hhcmVkX3B0cjxfVHA+OjpvcGVyYXRvcj0oc3RkOjptb3ZlKF9fcikpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1RwMT4KKwlzaGFyZWRfcHRyJgorCW9wZXJhdG9yPShzaGFyZWRfcHRyPF9UcDE+JiYgX19yKSBub2V4Y2VwdAorCXsKKwkgIHRoaXMtPl9fc2hhcmVkX3B0cjxfVHA+OjpvcGVyYXRvcj0oc3RkOjptb3ZlKF9fcikpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbD4KKwlzaGFyZWRfcHRyJgorCW9wZXJhdG9yPShzdGQ6OnVuaXF1ZV9wdHI8X1RwMSwgX0RlbD4mJiBfX3IpCisJeworCSAgdGhpcy0+X19zaGFyZWRfcHRyPF9UcD46Om9wZXJhdG9yPShzdGQ6Om1vdmUoX19yKSk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgbm9uLXN0YW5kYXJkLCBpdCBpcyB1c2VkIGJ5IGFsbG9jYXRlX3NoYXJlZC4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUuLi4gX0FyZ3M+CisJc2hhcmVkX3B0cihfU3BfbWFrZV9zaGFyZWRfdGFnIF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkJICAgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3RhZywgX19hLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUuLi4gX0FyZ3M+CisJZnJpZW5kIHNoYXJlZF9wdHI8X1RwMT4KKwlhbGxvY2F0ZV9zaGFyZWQoY29uc3QgX0FsbG9jJiBfX2EsIF9BcmdzJiYuLi4gX19hcmdzKTsKKyAgICB9OworCisgIC8vIDIwLjcuMi4yLjcgc2hhcmVkX3B0ciBjb21wYXJpc29ucworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX2EsCisJICAgICAgIGNvbnN0IHNoYXJlZF9wdHI8X1RwMj4mIF9fYikgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2EuZ2V0KCkgPT0gX19iLmdldCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzaGFyZWRfcHRyPF9UcD4mIF9fYSwgbnVsbHB0cl90KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuICFfX2E7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KG51bGxwdHJfdCwgY29uc3Qgc2hhcmVkX3B0cjxfVHA+JiBfX2EpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIV9fYTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fYSwKKwkgICAgICAgY29uc3Qgc2hhcmVkX3B0cjxfVHAyPiYgX19iKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fYS5nZXQoKSAhPSBfX2IuZ2V0KCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHNoYXJlZF9wdHI8X1RwPiYgX19hLCBudWxscHRyX3QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gKGJvb2wpX19hOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShudWxscHRyX3QsIGNvbnN0IHNoYXJlZF9wdHI8X1RwPiYgX19hKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIChib29sKV9fYTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19hLAorCSAgICAgIGNvbnN0IHNoYXJlZF9wdHI8X1RwMj4mIF9fYikgbm9leGNlcHQKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8X1RwMSosIF9UcDIqPjo6dHlwZSBfQ1Q7CisgICAgICByZXR1cm4gc3RkOjpsZXNzPF9DVD4oKShfX2EuZ2V0KCksIF9fYi5nZXQoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBzaGFyZWRfcHRyPF9UcD4mIF9fYSwgbnVsbHB0cl90KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIHN0ZDo6bGVzczxfVHAqPigpKF9fYS5nZXQoKSwgbnVsbHB0cik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwobnVsbHB0cl90LCBjb25zdCBzaGFyZWRfcHRyPF9UcD4mIF9fYSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBzdGQ6Omxlc3M8X1RwKj4oKShudWxscHRyLCBfX2EuZ2V0KCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19hLAorCSAgICAgICBjb25zdCBzaGFyZWRfcHRyPF9UcDI+JiBfX2IpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIShfX2IgPCBfX2EpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzaGFyZWRfcHRyPF9UcD4mIF9fYSwgbnVsbHB0cl90KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuICEobnVsbHB0ciA8IF9fYSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KG51bGxwdHJfdCwgY29uc3Qgc2hhcmVkX3B0cjxfVHA+JiBfX2EpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIShfX2EgPCBudWxscHRyKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19hLAorCSAgICAgIGNvbnN0IHNoYXJlZF9wdHI8X1RwMj4mIF9fYikgbm9leGNlcHQKKyAgICB7IHJldHVybiAoX19iIDwgX19hKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBzaGFyZWRfcHRyPF9UcD4mIF9fYSwgbnVsbHB0cl90KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIHN0ZDo6bGVzczxfVHAqPigpKG51bGxwdHIsIF9fYS5nZXQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4obnVsbHB0cl90LCBjb25zdCBzaGFyZWRfcHRyPF9UcD4mIF9fYSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBzdGQ6Omxlc3M8X1RwKj4oKShfX2EuZ2V0KCksIG51bGxwdHIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19hLAorCSAgICAgICBjb25zdCBzaGFyZWRfcHRyPF9UcDI+JiBfX2IpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIShfX2EgPCBfX2IpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBzaGFyZWRfcHRyPF9UcD4mIF9fYSwgbnVsbHB0cl90KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuICEoX19hIDwgbnVsbHB0cik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KG51bGxwdHJfdCwgY29uc3Qgc2hhcmVkX3B0cjxfVHA+JiBfX2EpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIShudWxscHRyIDwgX19hKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgbGVzczxzaGFyZWRfcHRyPF9UcD4+IDogcHVibGljIF9TcF9sZXNzPHNoYXJlZF9wdHI8X1RwPj4KKyAgICB7IH07CisKKyAgLy8gMjAuNy4yLjIuOCBzaGFyZWRfcHRyIHNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoc2hhcmVkX3B0cjxfVHA+JiBfX2EsIHNoYXJlZF9wdHI8X1RwPiYgX19iKSBub2V4Y2VwdAorICAgIHsgX19hLnN3YXAoX19iKTsgfQorCisgIC8vIDIwLjcuMi4yLjkgc2hhcmVkX3B0ciBjYXN0cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxPgorICAgIGlubGluZSBzaGFyZWRfcHRyPF9UcD4KKyAgICBzdGF0aWNfcG9pbnRlcl9jYXN0KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikgbm9leGNlcHQKKyAgICB7IHJldHVybiBzaGFyZWRfcHRyPF9UcD4oX19yLCBzdGF0aWNfY2FzdDxfVHAqPihfX3IuZ2V0KCkpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KKyAgICBpbmxpbmUgc2hhcmVkX3B0cjxfVHA+CisgICAgY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikgbm9leGNlcHQKKyAgICB7IHJldHVybiBzaGFyZWRfcHRyPF9UcD4oX19yLCBjb25zdF9jYXN0PF9UcCo+KF9fci5nZXQoKSkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxPgorICAgIGlubGluZSBzaGFyZWRfcHRyPF9UcD4KKyAgICBkeW5hbWljX3BvaW50ZXJfY2FzdChjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IpIG5vZXhjZXB0CisgICAgeworICAgICAgaWYgKF9UcCogX19wID0gZHluYW1pY19jYXN0PF9UcCo+KF9fci5nZXQoKSkpCisJcmV0dXJuIHNoYXJlZF9wdHI8X1RwPihfX3IsIF9fcCk7CisgICAgICByZXR1cm4gc2hhcmVkX3B0cjxfVHA+KCk7CisgICAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgc21hcnQgcG9pbnRlciB3aXRoIHdlYWsgc2VtYW50aWNzLgorICAgKgorICAgKiAgV2l0aCBmb3J3YXJkaW5nIGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgd2Vha19wdHIgOiBwdWJsaWMgX193ZWFrX3B0cjxfVHA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIGNvbnN0ZXhwciB3ZWFrX3B0cigpIG5vZXhjZXB0CisgICAgICA6IF9fd2Vha19wdHI8X1RwPigpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29udmVydGlibGU8X1RwMSosIF9UcCo+Ojp2YWx1ZT46OnR5cGU+CisJd2Vha19wdHIoY29uc3Qgd2Vha19wdHI8X1RwMT4mIF9fcikgbm9leGNlcHQKKwk6IF9fd2Vha19wdHI8X1RwPihfX3IpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29udmVydGlibGU8X1RwMSosIF9UcCo+Ojp2YWx1ZT46OnR5cGU+CisJd2Vha19wdHIoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKSBub2V4Y2VwdAorCTogX193ZWFrX3B0cjxfVHA+KF9fcikgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJd2Vha19wdHImCisJb3BlcmF0b3I9KGNvbnN0IHdlYWtfcHRyPF9UcDE+JiBfX3IpIG5vZXhjZXB0CisJeworCSAgdGhpcy0+X193ZWFrX3B0cjxfVHA+OjpvcGVyYXRvcj0oX19yKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJd2Vha19wdHImCisJb3BlcmF0b3I9KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikgbm9leGNlcHQKKwl7CisJICB0aGlzLT5fX3dlYWtfcHRyPF9UcD46Om9wZXJhdG9yPShfX3IpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgc2hhcmVkX3B0cjxfVHA+CisgICAgICBsb2NrKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKyNpZmRlZiBfX0dUSFJFQURTCisJaWYgKHRoaXMtPmV4cGlyZWQoKSkKKwkgIHJldHVybiBzaGFyZWRfcHRyPF9UcD4oKTsKKworCV9fdHJ5CisJICB7CisJICAgIHJldHVybiBzaGFyZWRfcHRyPF9UcD4oKnRoaXMpOworCSAgfQorCV9fY2F0Y2goY29uc3QgYmFkX3dlYWtfcHRyJikKKwkgIHsKKwkgICAgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPigpOworCSAgfQorI2Vsc2UKKwlyZXR1cm4gdGhpcy0+ZXhwaXJlZCgpID8gc2hhcmVkX3B0cjxfVHA+KCkgOiBzaGFyZWRfcHRyPF9UcD4oKnRoaXMpOworI2VuZGlmCisgICAgICB9CisgICAgfTsKKworICAvLyAyMC43LjIuMy42IHdlYWtfcHRyIHNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAod2Vha19wdHI8X1RwPiYgX19hLCB3ZWFrX3B0cjxfVHA+JiBfX2IpIG5vZXhjZXB0CisgICAgeyBfX2Euc3dhcChfX2IpOyB9CisKKworICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZSBvd25lcl9sZXNzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3Qgb3duZXJfbGVzczsKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiBvZiBvd25lcl9sZXNzIGZvciBzaGFyZWRfcHRyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG93bmVyX2xlc3M8c2hhcmVkX3B0cjxfVHA+PgorICAgIDogcHVibGljIF9TcF9vd25lcl9sZXNzPHNoYXJlZF9wdHI8X1RwPiwgd2Vha19wdHI8X1RwPj4KKyAgICB7IH07CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2Ygb3duZXJfbGVzcyBmb3Igd2Vha19wdHIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3Qgb3duZXJfbGVzczx3ZWFrX3B0cjxfVHA+PgorICAgIDogcHVibGljIF9TcF9vd25lcl9sZXNzPHdlYWtfcHRyPF9UcD4sIHNoYXJlZF9wdHI8X1RwPj4KKyAgICB7IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQmFzZSBjbGFzcyBhbGxvd2luZyB1c2Ugb2YgbWVtYmVyIGZ1bmN0aW9uIHNoYXJlZF9mcm9tX3RoaXMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgY29uc3RleHByIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgbm9leGNlcHQgeyB9CisKKyAgICAgIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzKGNvbnN0IGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzJikgbm9leGNlcHQgeyB9CisKKyAgICAgIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzJikgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIH5lbmFibGVfc2hhcmVkX2Zyb21fdGhpcygpIHsgfQorCisgICAgcHVibGljOgorICAgICAgc2hhcmVkX3B0cjxfVHA+CisgICAgICBzaGFyZWRfZnJvbV90aGlzKCkKKyAgICAgIHsgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPih0aGlzLT5fTV93ZWFrX3RoaXMpOyB9CisKKyAgICAgIHNoYXJlZF9wdHI8Y29uc3QgX1RwPgorICAgICAgc2hhcmVkX2Zyb21fdGhpcygpIGNvbnN0CisgICAgICB7IHJldHVybiBzaGFyZWRfcHRyPGNvbnN0IF9UcD4odGhpcy0+X01fd2Vha190aGlzKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJdm9pZAorCV9NX3dlYWtfYXNzaWduKF9UcDEqIF9fcCwgY29uc3QgX19zaGFyZWRfY291bnQ8PiYgX19uKSBjb25zdCBub2V4Y2VwdAorCXsgX01fd2Vha190aGlzLl9NX2Fzc2lnbihfX3AsIF9fbik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlmcmllbmQgdm9pZAorCV9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXNfaGVscGVyKGNvbnN0IF9fc2hhcmVkX2NvdW50PD4mIF9fcG4sCisJCQkJCSBjb25zdCBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcyogX19wZSwKKwkJCQkJIGNvbnN0IF9UcDEqIF9fcHgpIG5vZXhjZXB0CisJeworCSAgaWYgKF9fcGUgIT0gMCkKKwkgICAgX19wZS0+X01fd2Vha19hc3NpZ24oY29uc3RfY2FzdDxfVHAxKj4oX19weCksIF9fcG4pOworCX0KKworICAgICAgbXV0YWJsZSB3ZWFrX3B0cjxfVHA+ICBfTV93ZWFrX3RoaXM7CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgQ3JlYXRlIGFuIG9iamVjdCB0aGF0IGlzIG93bmVkIGJ5IGEgc2hhcmVkX3B0ci4KKyAgICogIEBwYXJhbSAgX19hICAgICBBbiBhbGxvY2F0b3IuCisgICAqICBAcGFyYW0gIF9fYXJncyAgQXJndW1lbnRzIGZvciB0aGUgQGEgX1RwIG9iamVjdCdzIGNvbnN0cnVjdG9yLgorICAgKiAgQHJldHVybiBBIHNoYXJlZF9wdHIgdGhhdCBvd25zIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC4KKyAgICogIEB0aHJvdyAgQW4gZXhjZXB0aW9uIHRocm93biBmcm9tIEBhIF9BbGxvYzo6YWxsb2NhdGUgb3IgZnJvbSB0aGUKKyAgICogICAgICAgICAgY29uc3RydWN0b3Igb2YgQGEgX1RwLgorICAgKgorICAgKiAgQSBjb3B5IG9mIEBhIF9fYSB3aWxsIGJlIHVzZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc2hhcmVkX3B0cgorICAgKiAgYW5kIHRoZSBuZXcgb2JqZWN0LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZSBzaGFyZWRfcHRyPF9UcD4KKyAgICBhbGxvY2F0ZV9zaGFyZWQoY29uc3QgX0FsbG9jJiBfX2EsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHJldHVybiBzaGFyZWRfcHRyPF9UcD4oX1NwX21ha2Vfc2hhcmVkX3RhZygpLCBfX2EsCisJCQkgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgaXMgb3duZWQgYnkgYSBzaGFyZWRfcHRyLgorICAgKiAgQHBhcmFtICBfX2FyZ3MgIEFyZ3VtZW50cyBmb3IgdGhlIEBhIF9UcCBvYmplY3QncyBjb25zdHJ1Y3Rvci4KKyAgICogIEByZXR1cm4gQSBzaGFyZWRfcHRyIHRoYXQgb3ducyB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuCisgICAqICBAdGhyb3cgIHN0ZDo6YmFkX2FsbG9jLCBvciBhbiBleGNlcHRpb24gdGhyb3duIGZyb20gdGhlCisgICAqICAgICAgICAgIGNvbnN0cnVjdG9yIG9mIEBhIF9UcC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgaW5saW5lIHNoYXJlZF9wdHI8X1RwPgorICAgIG1ha2Vfc2hhcmVkKF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8X1RwPjo6dHlwZSBfVHBfbmM7CisgICAgICByZXR1cm4gc3RkOjphbGxvY2F0ZV9zaGFyZWQ8X1RwPihzdGQ6OmFsbG9jYXRvcjxfVHBfbmM+KCksCisJCQkJICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIHNoYXJlZF9wdHIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzaDxzaGFyZWRfcHRyPF9UcD4+CisgICAgOiBwdWJsaWMgX19oYXNoX2Jhc2U8c2l6ZV90LCBzaGFyZWRfcHRyPF9UcD4+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IHNoYXJlZF9wdHI8X1RwPiYgX19zKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gc3RkOjpoYXNoPF9UcCo+KCkoX19zLmdldCgpKTsgfQorICAgIH07CisKKyAgLy8gQH0gZ3JvdXAgcG9pbnRlcl9hYnN0cmFjdGlvbnMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gX1NIQVJFRF9QVFJfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3NoYXJlZF9wdHJfYmFzZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3NoYXJlZF9wdHJfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2VmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc2hhcmVkX3B0cl9iYXNlLmgKQEAgLTAsMCArMSwxNDI0IEBACisvLyBzaGFyZWRfcHRyIGFuZCB3ZWFrX3B0ciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIEdDQyBOb3RlOiBCYXNlZCBvbiBmaWxlcyBmcm9tIHZlcnNpb24gMS4zMi4wIG9mIHRoZSBCb29zdCBsaWJyYXJ5LgorCisvLyAgc2hhcmVkX2NvdW50LmhwcAorLy8gIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdiBhbmQgTXVsdGkgTWVkaWEgTHRkLgorCisvLyAgc2hhcmVkX3B0ci5ocHAKKy8vICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgR3JlZyBDb2x2aW4gYW5kIEJlbWFuIERhd2VzLgorLy8gIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdgorCisvLyAgd2Vha19wdHIuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIFBldGVyIERpbW92CisKKy8vICBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcy5ocHAKKy8vICBDb3B5cmlnaHQgKEMpIDIwMDIgUGV0ZXIgRGltb3YKKworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisvLyBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvKiogQGZpbGUgYml0cy9zaGFyZWRfcHRyX2Jhc2UuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le21lbW9yeX0KKyAqLworCisjaWZuZGVmIF9TSEFSRURfUFRSX0JBU0VfSAorI2RlZmluZSBfU0hBUkVEX1BUUl9CQVNFX0ggMQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyNpZiBfR0xJQkNYWF9VU0VfREVQUkVDQVRFRAorICB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgYXV0b19wdHI7CisjZW5kaWYKKworIC8qKgorICAgKiAgQGJyaWVmICBFeGNlcHRpb24gcG9zc2libHkgdGhyb3duIGJ5IEBjIHNoYXJlZF9wdHIuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqLworICBjbGFzcyBiYWRfd2Vha19wdHIgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24KKyAgeworICBwdWJsaWM6CisgICAgdmlydHVhbCBjaGFyIGNvbnN0KgorICAgIHdoYXQoKSBjb25zdCBub2V4Y2VwdDsKKworICAgIHZpcnR1YWwgfmJhZF93ZWFrX3B0cigpIG5vZXhjZXB0OyAgICAKKyAgfTsKKworICAvLyBTdWJzdGl0dXRlIGZvciBiYWRfd2Vha19wdHIgb2JqZWN0IGluIHRoZSBjYXNlIG9mIC1mbm8tZXhjZXB0aW9ucy4KKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19iYWRfd2Vha19wdHIoKQorICB7IF9HTElCQ1hYX1RIUk9XX09SX0FCT1JUKGJhZF93ZWFrX3B0cigpKTsgfQorCisgIHVzaW5nIF9fZ251X2N4eDo6X0xvY2tfcG9saWN5OworICB1c2luZyBfX2dudV9jeHg6Ol9fZGVmYXVsdF9sb2NrX3BvbGljeTsKKyAgdXNpbmcgX19nbnVfY3h4OjpfU19zaW5nbGU7CisgIHVzaW5nIF9fZ251X2N4eDo6X1NfbXV0ZXg7CisgIHVzaW5nIF9fZ251X2N4eDo6X1NfYXRvbWljOworCisgIC8vIEVtcHR5IGhlbHBlciBjbGFzcyBleGNlcHQgd2hlbiB0aGUgdGVtcGxhdGUgYXJndW1lbnQgaXMgX1NfbXV0ZXguCisgIHRlbXBsYXRlPF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX011dGV4X2Jhc2UKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gVGhlIGF0b21pYyBwb2xpY3kgdXNlcyBmdWxseS1mZW5jZWQgYnVpbHRpbnMsIHNpbmdsZSBkb2Vzbid0IGNhcmUuCisgICAgICBlbnVtIHsgX1NfbmVlZF9iYXJyaWVycyA9IDAgfTsKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBjbGFzcyBfTXV0ZXhfYmFzZTxfU19tdXRleD4KKyAgICA6IHB1YmxpYyBfX2dudV9jeHg6Ol9fbXV0ZXgKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gVGhpcyBwb2xpY3kgaXMgdXNlZCB3aGVuIGF0b21pYyBidWlsdGlucyBhcmUgbm90IGF2YWlsYWJsZS4KKyAgICAgIC8vIFRoZSByZXBsYWNlbWVudCBhdG9taWMgb3BlcmF0aW9ucyBtaWdodCBub3QgaGF2ZSB0aGUgbmVjZXNzYXJ5CisgICAgICAvLyBtZW1vcnkgYmFycmllcnMuCisgICAgICBlbnVtIHsgX1NfbmVlZF9iYXJyaWVycyA9IDEgfTsKKyAgICB9OworCisgIHRlbXBsYXRlPF9Mb2NrX3BvbGljeSBfTHAgPSBfX2RlZmF1bHRfbG9ja19wb2xpY3k+CisgICAgY2xhc3MgX1NwX2NvdW50ZWRfYmFzZQorICAgIDogcHVibGljIF9NdXRleF9iYXNlPF9McD4KKyAgICB7CisgICAgcHVibGljOiAgCisgICAgICBfU3BfY291bnRlZF9iYXNlKCkgbm9leGNlcHQKKyAgICAgIDogX01fdXNlX2NvdW50KDEpLCBfTV93ZWFrX2NvdW50KDEpIHsgfQorICAgICAgCisgICAgICB2aXJ0dWFsCisgICAgICB+X1NwX2NvdW50ZWRfYmFzZSgpIG5vZXhjZXB0CisgICAgICB7IH0KKyAgCisgICAgICAvLyBDYWxsZWQgd2hlbiBfTV91c2VfY291bnQgZHJvcHMgdG8gemVybywgdG8gcmVsZWFzZSB0aGUgcmVzb3VyY2VzCisgICAgICAvLyBtYW5hZ2VkIGJ5ICp0aGlzLgorICAgICAgdmlydHVhbCB2b2lkCisgICAgICBfTV9kaXNwb3NlKCkgbm9leGNlcHQgPSAwOworICAgICAgCisgICAgICAvLyBDYWxsZWQgd2hlbiBfTV93ZWFrX2NvdW50IGRyb3BzIHRvIHplcm8uCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX2Rlc3Ryb3koKSBub2V4Y2VwdAorICAgICAgeyBkZWxldGUgdGhpczsgfQorICAgICAgCisgICAgICB2aXJ0dWFsIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYpID0gMDsKKworICAgICAgdm9pZAorICAgICAgX01fYWRkX3JlZl9jb3B5KCkKKyAgICAgIHsgX19nbnVfY3h4OjpfX2F0b21pY19hZGRfZGlzcGF0Y2goJl9NX3VzZV9jb3VudCwgMSk7IH0KKyAgCisgICAgICB2b2lkCisgICAgICBfTV9hZGRfcmVmX2xvY2soKTsKKyAgICAgIAorICAgICAgdm9pZAorICAgICAgX01fcmVsZWFzZSgpIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIC8vIEJlIHJhY2UtZGV0ZWN0b3ItZnJpZW5kbHkuICBGb3IgbW9yZSBpbmZvIHNlZSBiaXRzL2MrK2NvbmZpZy4KKyAgICAgICAgX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQkVGT1JFKCZfTV91c2VfY291bnQpOworCWlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fdXNlX2NvdW50LCAtMSkgPT0gMSkKKwkgIHsKKyAgICAgICAgICAgIF9HTElCQ1hYX1NZTkNIUk9OSVpBVElPTl9IQVBQRU5TX0FGVEVSKCZfTV91c2VfY291bnQpOworCSAgICBfTV9kaXNwb3NlKCk7CisJICAgIC8vIFRoZXJlIG11c3QgYmUgYSBtZW1vcnkgYmFycmllciBiZXR3ZWVuIGRpc3Bvc2UoKSBhbmQgZGVzdHJveSgpCisJICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBlZmZlY3RzIG9mIGRpc3Bvc2UoKSBhcmUgb2JzZXJ2ZWQgaW4gdGhlCisJICAgIC8vIHRocmVhZCB0aGF0IHJ1bnMgZGVzdHJveSgpLgorCSAgICAvLyBTZWUgaHR0cDovL2djYy5nbnUub3JnL21sL2xpYnN0ZGMrKy8yMDA1LTExL21zZzAwMTM2Lmh0bWwKKwkgICAgaWYgKF9NdXRleF9iYXNlPF9McD46Ol9TX25lZWRfYmFycmllcnMpCisJICAgICAgeworCSAgICAgICAgX0dMSUJDWFhfUkVBRF9NRU1fQkFSUklFUjsKKwkgICAgICAgIF9HTElCQ1hYX1dSSVRFX01FTV9CQVJSSUVSOworCSAgICAgIH0KKworICAgICAgICAgICAgLy8gQmUgcmFjZS1kZXRlY3Rvci1mcmllbmRseS4gIEZvciBtb3JlIGluZm8gc2VlIGJpdHMvYysrY29uZmlnLgorICAgICAgICAgICAgX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQkVGT1JFKCZfTV93ZWFrX2NvdW50KTsKKwkgICAgaWYgKF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoKCZfTV93ZWFrX2NvdW50LAorCQkJCQkJICAgICAgIC0xKSA9PSAxKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQUZURVIoJl9NX3dlYWtfY291bnQpOworCSAgICAgICAgX01fZGVzdHJveSgpOworICAgICAgICAgICAgICB9CisJICB9CisgICAgICB9CisgIAorICAgICAgdm9pZAorICAgICAgX01fd2Vha19hZGRfcmVmKCkgbm9leGNlcHQKKyAgICAgIHsgX19nbnVfY3h4OjpfX2F0b21pY19hZGRfZGlzcGF0Y2goJl9NX3dlYWtfY291bnQsIDEpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3dlYWtfcmVsZWFzZSgpIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIC8vIEJlIHJhY2UtZGV0ZWN0b3ItZnJpZW5kbHkuIEZvciBtb3JlIGluZm8gc2VlIGJpdHMvYysrY29uZmlnLgorICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19CRUZPUkUoJl9NX3dlYWtfY291bnQpOworCWlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fd2Vha19jb3VudCwgLTEpID09IDEpCisJICB7CisgICAgICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19BRlRFUigmX01fd2Vha19jb3VudCk7CisJICAgIGlmIChfTXV0ZXhfYmFzZTxfTHA+OjpfU19uZWVkX2JhcnJpZXJzKQorCSAgICAgIHsKKwkgICAgICAgIC8vIFNlZSBfTV9yZWxlYXNlKCksCisJICAgICAgICAvLyBkZXN0cm95KCkgbXVzdCBvYnNlcnZlIHJlc3VsdHMgb2YgZGlzcG9zZSgpCisJICAgICAgICBfR0xJQkNYWF9SRUFEX01FTV9CQVJSSUVSOworCSAgICAgICAgX0dMSUJDWFhfV1JJVEVfTUVNX0JBUlJJRVI7CisJICAgICAgfQorCSAgICBfTV9kZXN0cm95KCk7CisJICB9CisgICAgICB9CisgIAorICAgICAgbG9uZworICAgICAgX01fZ2V0X3VzZV9jb3VudCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIC8vIE5vIG1lbW9yeSBiYXJyaWVyIGlzIHVzZWQgaGVyZSBzbyB0aGVyZSBpcyBubyBzeW5jaHJvbml6YXRpb24KKyAgICAgICAgLy8gd2l0aCBvdGhlciB0aHJlYWRzLgorICAgICAgICByZXR1cm4gX19hdG9taWNfbG9hZF9uKCZfTV91c2VfY291bnQsIF9fQVRPTUlDX1JFTEFYRUQpOworICAgICAgfQorCisgICAgcHJpdmF0ZTogIAorICAgICAgX1NwX2NvdW50ZWRfYmFzZShfU3BfY291bnRlZF9iYXNlIGNvbnN0JikgPSBkZWxldGU7CisgICAgICBfU3BfY291bnRlZF9iYXNlJiBvcGVyYXRvcj0oX1NwX2NvdW50ZWRfYmFzZSBjb25zdCYpID0gZGVsZXRlOworCisgICAgICBfQXRvbWljX3dvcmQgIF9NX3VzZV9jb3VudDsgICAgIC8vICNzaGFyZWQKKyAgICAgIF9BdG9taWNfd29yZCAgX01fd2Vha19jb3VudDsgICAgLy8gI3dlYWsgKyAoI3NoYXJlZCAhPSAwKQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSB2b2lkCisgICAgX1NwX2NvdW50ZWRfYmFzZTxfU19zaW5nbGU+OjoKKyAgICBfTV9hZGRfcmVmX2xvY2soKQorICAgIHsKKyAgICAgIGlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fdXNlX2NvdW50LCAxKSA9PSAwKQorCXsKKwkgIF9NX3VzZV9jb3VudCA9IDA7CisJICBfX3Rocm93X2JhZF93ZWFrX3B0cigpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSB2b2lkCisgICAgX1NwX2NvdW50ZWRfYmFzZTxfU19tdXRleD46OgorICAgIF9NX2FkZF9yZWZfbG9jaygpCisgICAgeworICAgICAgX19nbnVfY3h4OjpfX3Njb3BlZF9sb2NrIHNlbnRyeSgqdGhpcyk7CisgICAgICBpZiAoX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGRfZGlzcGF0Y2goJl9NX3VzZV9jb3VudCwgMSkgPT0gMCkKKwl7CisJICBfTV91c2VfY291bnQgPSAwOworCSAgX190aHJvd19iYWRfd2Vha19wdHIoKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPD4gCisgICAgaW5saW5lIHZvaWQKKyAgICBfU3BfY291bnRlZF9iYXNlPF9TX2F0b21pYz46OgorICAgIF9NX2FkZF9yZWZfbG9jaygpCisgICAgeworICAgICAgLy8gUGVyZm9ybSBsb2NrLWZyZWUgYWRkLWlmLW5vdC16ZXJvIG9wZXJhdGlvbi4KKyAgICAgIF9BdG9taWNfd29yZCBfX2NvdW50ID0gX01fdXNlX2NvdW50OworICAgICAgZG8KKwl7CisJICBpZiAoX19jb3VudCA9PSAwKQorCSAgICBfX3Rocm93X2JhZF93ZWFrX3B0cigpOworCSAgLy8gUmVwbGFjZSB0aGUgY3VycmVudCBjb3VudGVyIHZhbHVlIHdpdGggdGhlIG9sZCB2YWx1ZSArIDEsIGFzCisJICAvLyBsb25nIGFzIGl0J3Mgbm90IGNoYW5nZWQgbWVhbndoaWxlLiAKKwl9CisgICAgICB3aGlsZSAoIV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbigmX01fdXNlX2NvdW50LCAmX19jb3VudCwgX19jb3VudCArIDEsCisJCQkJCSAgdHJ1ZSwgX19BVE9NSUNfQUNRX1JFTCwgCisJCQkJCSAgX19BVE9NSUNfUkVMQVhFRCkpOworICAgIH0KKworCisgIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHAgPSBfX2RlZmF1bHRfbG9ja19wb2xpY3k+CisgICAgY2xhc3MgX19zaGFyZWRfcHRyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McCA9IF9fZGVmYXVsdF9sb2NrX3BvbGljeT4KKyAgICBjbGFzcyBfX3dlYWtfcHRyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McCA9IF9fZGVmYXVsdF9sb2NrX3BvbGljeT4KKyAgICBjbGFzcyBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBzaGFyZWRfcHRyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyB3ZWFrX3B0cjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG93bmVyX2xlc3M7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzOworCisgIHRlbXBsYXRlPF9Mb2NrX3BvbGljeSBfTHAgPSBfX2RlZmF1bHRfbG9ja19wb2xpY3k+CisgICAgY2xhc3MgX193ZWFrX2NvdW50OworCisgIHRlbXBsYXRlPF9Mb2NrX3BvbGljeSBfTHAgPSBfX2RlZmF1bHRfbG9ja19wb2xpY3k+CisgICAgY2xhc3MgX19zaGFyZWRfY291bnQ7CisKKworICAvLyBDb3VudGVkIHB0ciB3aXRoIG5vIGRlbGV0ZXIgb3IgYWxsb2NhdG9yIHN1cHBvcnQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0ciwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfU3BfY291bnRlZF9wdHIgZmluYWwgOiBwdWJsaWMgX1NwX2NvdW50ZWRfYmFzZTxfTHA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0CisgICAgICBfU3BfY291bnRlZF9wdHIoX1B0ciBfX3ApCisgICAgICA6IF9NX3B0cihfX3ApIHsgfQorCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX2Rpc3Bvc2UoKSBub2V4Y2VwdAorICAgICAgeyBkZWxldGUgX01fcHRyOyB9CisKKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgX01fZGVzdHJveSgpIG5vZXhjZXB0CisgICAgICB7IGRlbGV0ZSB0aGlzOyB9CisKKyAgICAgIHZpcnR1YWwgdm9pZCoKKyAgICAgIF9NX2dldF9kZWxldGVyKGNvbnN0IHN0ZDo6dHlwZV9pbmZvJikKKyAgICAgIHsgcmV0dXJuIDA7IH0KKworICAgICAgX1NwX2NvdW50ZWRfcHRyKGNvbnN0IF9TcF9jb3VudGVkX3B0ciYpID0gZGVsZXRlOworICAgICAgX1NwX2NvdW50ZWRfcHRyJiBvcGVyYXRvcj0oY29uc3QgX1NwX2NvdW50ZWRfcHRyJikgPSBkZWxldGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfUHRyICAgICAgICAgICAgIF9NX3B0cjsgIC8vIGNvcHkgY29uc3RydWN0b3IgbXVzdCBub3QgdGhyb3cKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9TcF9jb3VudGVkX3B0cjxudWxscHRyX3QsIF9TX3NpbmdsZT46Ol9NX2Rpc3Bvc2UoKSBub2V4Y2VwdCB7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHZvaWQKKyAgICBfU3BfY291bnRlZF9wdHI8bnVsbHB0cl90LCBfU19tdXRleD46Ol9NX2Rpc3Bvc2UoKSBub2V4Y2VwdCB7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHZvaWQKKyAgICBfU3BfY291bnRlZF9wdHI8bnVsbHB0cl90LCBfU19hdG9taWM+OjpfTV9kaXNwb3NlKCkgbm9leGNlcHQgeyB9CisKKyAgLy8gU3VwcG9ydCBmb3IgY3VzdG9tIGRlbGV0ZXIgYW5kL29yIGFsbG9jYXRvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHRyLCB0eXBlbmFtZSBfRGVsZXRlciwgdHlwZW5hbWUgX0FsbG9jLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGNsYXNzIF9TcF9jb3VudGVkX2RlbGV0ZXIgZmluYWwgOiBwdWJsaWMgX1NwX2NvdW50ZWRfYmFzZTxfTHA+CisgICAgeworICAgICAgLy8gSGVscGVyIGNsYXNzIHRoYXQgc3RvcmVzIHRoZSBEZWxldGVyIGFuZCBhbHNvIGFjdHMgYXMgYW4gYWxsb2NhdG9yLgorICAgICAgLy8gVXNlZCB0byBkaXNwb3NlIG9mIHRoZSBvd25lZCBwb2ludGVyIGFuZCB0aGUgaW50ZXJuYWwgcmVmY291bnQKKyAgICAgIC8vIFJlcXVpcmVzIHRoYXQgY29waWVzIG9mIF9BbGxvYyBjYW4gZnJlZSBlYWNoIG90aGVyJ3MgbWVtb3J5LgorICAgICAgc3RydWN0IF9NeV9EZWxldGVyCisgICAgICA6IHB1YmxpYyBfQWxsb2MgICAgICAgICAgIC8vIGNvcHkgY29uc3RydWN0b3IgbXVzdCBub3QgdGhyb3cKKyAgICAgIHsKKwlfRGVsZXRlciBfTV9kZWw7ICAgICAgICAvLyBjb3B5IGNvbnN0cnVjdG9yIG11c3Qgbm90IHRocm93CisJX015X0RlbGV0ZXIoX0RlbGV0ZXIgX19kLCBjb25zdCBfQWxsb2MmIF9fYSkKKwk6IF9BbGxvYyhfX2EpLCBfTV9kZWwoX19kKSB7IH0KKyAgICAgIH07CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBfX2QoX19wKSBtdXN0IG5vdCB0aHJvdy4KKyAgICAgIF9TcF9jb3VudGVkX2RlbGV0ZXIoX1B0ciBfX3AsIF9EZWxldGVyIF9fZCkKKyAgICAgIDogX01fcHRyKF9fcCksIF9NX2RlbChfX2QsIF9BbGxvYygpKSB7IH0KKworICAgICAgLy8gX19kKF9fcCkgbXVzdCBub3QgdGhyb3cuCisgICAgICBfU3BfY291bnRlZF9kZWxldGVyKF9QdHIgX19wLCBfRGVsZXRlciBfX2QsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgICAgOiBfTV9wdHIoX19wKSwgX01fZGVsKF9fZCwgX19hKSB7IH0KKworICAgICAgfl9TcF9jb3VudGVkX2RlbGV0ZXIoKSBub2V4Y2VwdCB7IH0KKworICAgICAgdmlydHVhbCB2b2lkCisgICAgICBfTV9kaXNwb3NlKCkgbm9leGNlcHQKKyAgICAgIHsgX01fZGVsLl9NX2RlbChfTV9wdHIpOyB9CisKKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgX01fZGVzdHJveSgpIG5vZXhjZXB0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHJhaXRzPF9BbGxvYz46OnRlbXBsYXRlCisJICByZWJpbmRfdHJhaXRzPF9TcF9jb3VudGVkX2RlbGV0ZXI+IF9BbGxvY190cmFpdHM7CisJdHlwZW5hbWUgX0FsbG9jX3RyYWl0czo6YWxsb2NhdG9yX3R5cGUgX19hKF9NX2RlbCk7CisJX0FsbG9jX3RyYWl0czo6ZGVzdHJveShfX2EsIHRoaXMpOworCV9BbGxvY190cmFpdHM6OmRlYWxsb2NhdGUoX19hLCB0aGlzLCAxKTsKKyAgICAgIH0KKworICAgICAgdmlydHVhbCB2b2lkKgorICAgICAgX01fZ2V0X2RlbGV0ZXIoY29uc3Qgc3RkOjp0eXBlX2luZm8mIF9fdGkpCisgICAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorICAgICAgICByZXR1cm4gX190aSA9PSB0eXBlaWQoX0RlbGV0ZXIpID8gJl9NX2RlbC5fTV9kZWwgOiAwOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9QdHIgICAgICAgICAgICAgX01fcHRyOyAgLy8gY29weSBjb25zdHJ1Y3RvciBtdXN0IG5vdCB0aHJvdworICAgICAgX015X0RlbGV0ZXIgICAgICBfTV9kZWw7ICAvLyBjb3B5IGNvbnN0cnVjdG9yIG11c3Qgbm90IHRocm93CisgICAgfTsKKworICAvLyBoZWxwZXJzIGZvciBtYWtlX3NoYXJlZCAvIGFsbG9jYXRlX3NoYXJlZAorCisgIHN0cnVjdCBfU3BfbWFrZV9zaGFyZWRfdGFnIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgX0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfU3BfY291bnRlZF9wdHJfaW5wbGFjZSBmaW5hbCA6IHB1YmxpYyBfU3BfY291bnRlZF9iYXNlPF9McD4KKyAgICB7CisgICAgICAvLyBIZWxwZXIgY2xhc3MgdGhhdCBzdG9yZXMgdGhlIHBvaW50ZXIgYW5kIGFsc28gYWN0cyBhcyBhbiBhbGxvY2F0b3IuCisgICAgICAvLyBVc2VkIHRvIGRpc3Bvc2Ugb2YgdGhlIG93bmVkIHBvaW50ZXIgYW5kIHRoZSBpbnRlcm5hbCByZWZjb3VudAorICAgICAgLy8gUmVxdWlyZXMgdGhhdCBjb3BpZXMgb2YgX0FsbG9jIGNhbiBmcmVlIGVhY2ggb3RoZXIncyBtZW1vcnkuCisgICAgICBzdHJ1Y3QgX0ltcGwKKyAgICAgIDogcHVibGljIF9BbGxvYyAgICAgICAgICAgLy8gY29weSBjb25zdHJ1Y3RvciBtdXN0IG5vdCB0aHJvdworICAgICAgeworCV9JbXBsKF9BbGxvYyBfX2EpIDogX0FsbG9jKF9fYSksIF9NX3B0cigpIHsgfQorCV9UcCogX01fcHRyOworICAgICAgfTsKKworICAgIHB1YmxpYzoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCV9TcF9jb3VudGVkX3B0cl9pbnBsYWNlKF9BbGxvYyBfX2EsIF9BcmdzJiYuLi4gX19hcmdzKQorCTogX01faW1wbChfX2EpCisJeworCSAgX01faW1wbC5fTV9wdHIgPSBzdGF0aWNfY2FzdDxfVHAqPihzdGF0aWNfY2FzdDx2b2lkKj4oJl9NX3N0b3JhZ2UpKTsKKwkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgIC8vIDIwNzAuICBhbGxvY2F0ZV9zaGFyZWQgc2hvdWxkIHVzZSBhbGxvY2F0b3JfdHJhaXRzPEE+Ojpjb25zdHJ1Y3QKKwkgIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPjo6Y29uc3RydWN0KF9fYSwgX01faW1wbC5fTV9wdHIsCisJICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgLy8gbWlnaHQgdGhyb3cKKwl9CisKKyAgICAgIH5fU3BfY291bnRlZF9wdHJfaW5wbGFjZSgpIG5vZXhjZXB0IHsgfQorCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX2Rpc3Bvc2UoKSBub2V4Y2VwdAorICAgICAgeyBhbGxvY2F0b3JfdHJhaXRzPF9BbGxvYz46OmRlc3Ryb3koX01faW1wbCwgX01faW1wbC5fTV9wdHIpOyB9CisKKyAgICAgIC8vIE92ZXJyaWRlIGJlY2F1c2UgdGhlIGFsbG9jYXRvciBuZWVkcyB0byBrbm93IHRoZSBkeW5hbWljIHR5cGUKKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgX01fZGVzdHJveSgpIG5vZXhjZXB0CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHJhaXRzPF9BbGxvYz46OnRlbXBsYXRlCisJICByZWJpbmRfdHJhaXRzPF9TcF9jb3VudGVkX3B0cl9pbnBsYWNlPiBfQWxsb2NfdHJhaXRzOworCXR5cGVuYW1lIF9BbGxvY190cmFpdHM6OmFsbG9jYXRvcl90eXBlIF9fYShfTV9pbXBsKTsKKwlfQWxsb2NfdHJhaXRzOjpkZXN0cm95KF9fYSwgdGhpcyk7CisJX0FsbG9jX3RyYWl0czo6ZGVhbGxvY2F0ZShfX2EsIHRoaXMsIDEpOworICAgICAgfQorCisgICAgICAvLyBTbmVha3kgdHJpY2sgc28gX19zaGFyZWRfcHRyIGNhbiBnZXQgdGhlIG1hbmFnZWQgcG9pbnRlcgorICAgICAgdmlydHVhbCB2b2lkKgorICAgICAgX01fZ2V0X2RlbGV0ZXIoY29uc3Qgc3RkOjp0eXBlX2luZm8mIF9fdGkpIG5vZXhjZXB0CisgICAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorCXJldHVybiBfX3RpID09IHR5cGVpZChfU3BfbWFrZV9zaGFyZWRfdGFnKQorCSAgICAgICA/IHN0YXRpY19jYXN0PHZvaWQqPigmX01fc3RvcmFnZSkKKwkgICAgICAgOiAwOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICBfSW1wbCBfTV9pbXBsOworICAgICAgdHlwZW5hbWUgYWxpZ25lZF9zdG9yYWdlPHNpemVvZihfVHApLCBhbGlnbm1lbnRfb2Y8X1RwPjo6dmFsdWU+Ojp0eXBlCisJX01fc3RvcmFnZTsKKyAgICB9OworCisgIHRlbXBsYXRlPF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX19zaGFyZWRfY291bnQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgY29uc3RleHByIF9fc2hhcmVkX2NvdW50KCkgbm9leGNlcHQgOiBfTV9waSgwKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QdHI+CisgICAgICAgIGV4cGxpY2l0CisJX19zaGFyZWRfY291bnQoX1B0ciBfX3ApIDogX01fcGkoMCkKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX01fcGkgPSBuZXcgX1NwX2NvdW50ZWRfcHRyPF9QdHIsIF9McD4oX19wKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBkZWxldGUgX19wOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHRyLCB0eXBlbmFtZSBfRGVsZXRlcj4KKwlfX3NoYXJlZF9jb3VudChfUHRyIF9fcCwgX0RlbGV0ZXIgX19kKQorCTogX19zaGFyZWRfY291bnQoX19wLCBzdGQ6Om1vdmUoX19kKSwgYWxsb2NhdG9yPGludD4oKSkKKwl7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0ciwgdHlwZW5hbWUgX0RlbGV0ZXIsIHR5cGVuYW1lIF9BbGxvYz4KKwlfX3NoYXJlZF9jb3VudChfUHRyIF9fcCwgX0RlbGV0ZXIgX19kLCBfQWxsb2MgX19hKSA6IF9NX3BpKDApCisJeworCSAgdHlwZWRlZiBfU3BfY291bnRlZF9kZWxldGVyPF9QdHIsIF9EZWxldGVyLCBfQWxsb2MsIF9McD4gX1NwX2NkX3R5cGU7CisJICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPjo6dGVtcGxhdGUKKwkgICAgcmViaW5kX3RyYWl0czxfU3BfY2RfdHlwZT4gX0FsbG9jX3RyYWl0czsKKwkgIHR5cGVuYW1lIF9BbGxvY190cmFpdHM6OmFsbG9jYXRvcl90eXBlIF9fYTIoX19hKTsKKwkgIF9TcF9jZF90eXBlKiBfX21lbSA9IDA7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX19tZW0gPSBfQWxsb2NfdHJhaXRzOjphbGxvY2F0ZShfX2EyLCAxKTsKKwkgICAgICBfQWxsb2NfdHJhaXRzOjpjb25zdHJ1Y3QoX19hMiwgX19tZW0sCisJCSAgX19wLCBzdGQ6Om1vdmUoX19kKSwgc3RkOjptb3ZlKF9fYSkpOworCSAgICAgIF9NX3BpID0gX19tZW07CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgX19kKF9fcCk7IC8vIENhbGwgX0RlbGV0ZXIgb24gX19wLgorCSAgICAgIGlmIChfX21lbSkKKwkgICAgICAgIF9BbGxvY190cmFpdHM6OmRlYWxsb2NhdGUoX19hMiwgX19tZW0sIDEpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUuLi4gX0FyZ3M+CisJX19zaGFyZWRfY291bnQoX1NwX21ha2Vfc2hhcmVkX3RhZywgX1RwKiwgY29uc3QgX0FsbG9jJiBfX2EsCisJCSAgICAgICBfQXJncyYmLi4uIF9fYXJncykKKwk6IF9NX3BpKDApCisJeworCSAgdHlwZWRlZiBfU3BfY291bnRlZF9wdHJfaW5wbGFjZTxfVHAsIF9BbGxvYywgX0xwPiBfU3BfY3BfdHlwZTsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+Ojp0ZW1wbGF0ZQorCSAgICByZWJpbmRfdHJhaXRzPF9TcF9jcF90eXBlPiBfQWxsb2NfdHJhaXRzOworCSAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czo6YWxsb2NhdG9yX3R5cGUgX19hMihfX2EpOworCSAgX1NwX2NwX3R5cGUqIF9fbWVtID0gX0FsbG9jX3RyYWl0czo6YWxsb2NhdGUoX19hMiwgMSk7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX0FsbG9jX3RyYWl0czo6Y29uc3RydWN0KF9fYTIsIF9fbWVtLCBzdGQ6Om1vdmUoX19hKSwKKwkJICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgICAgX01fcGkgPSBfX21lbTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBfQWxsb2NfdHJhaXRzOjpkZWFsbG9jYXRlKF9fYTIsIF9fbWVtLCAxKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKworI2lmIF9HTElCQ1hYX1VTRV9ERVBSRUNBVEVECisgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGF1dG9fcHRyPF9UcD4gdG8gcHJvdmlkZSB0aGUgc3Ryb25nIGd1YXJhbnRlZS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgZXhwbGljaXQKKwlfX3NoYXJlZF9jb3VudChzdGQ6OmF1dG9fcHRyPF9UcD4mJiBfX3IpOworI2VuZGlmCisKKyAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdW5pcXVlX3B0cjxfVHAsX0RlbD4gdG8gcHJvdmlkZSB0aGUgc3Ryb25nIGd1YXJhbnRlZS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RlbD4KKyAgICAgICAgZXhwbGljaXQKKwlfX3NoYXJlZF9jb3VudChzdGQ6OnVuaXF1ZV9wdHI8X1RwLCBfRGVsPiYmIF9fcikgOiBfTV9waSgwKQorCXsKKwkgIHVzaW5nIF9QdHIgPSB0eXBlbmFtZSB1bmlxdWVfcHRyPF9UcCwgX0RlbD46OnBvaW50ZXI7CisJICB1c2luZyBfRGVsMiA9IHR5cGVuYW1lIGNvbmRpdGlvbmFsPGlzX3JlZmVyZW5jZTxfRGVsPjo6dmFsdWUsCisJICAgICAgcmVmZXJlbmNlX3dyYXBwZXI8dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxfRGVsPjo6dHlwZT4sCisJICAgICAgX0RlbD46OnR5cGU7CisJICB1c2luZyBfU3BfY2RfdHlwZQorCSAgICA9IF9TcF9jb3VudGVkX2RlbGV0ZXI8X1B0ciwgX0RlbDIsIGFsbG9jYXRvcjx2b2lkPiwgX0xwPjsKKwkgIHVzaW5nIF9BbGxvYyA9IGFsbG9jYXRvcjxfU3BfY2RfdHlwZT47CisJICB1c2luZyBfQWxsb2NfdHJhaXRzID0gYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+OworCSAgX0FsbG9jIF9fYTsKKwkgIF9TcF9jZF90eXBlKiBfX21lbSA9IF9BbGxvY190cmFpdHM6OmFsbG9jYXRlKF9fYSwgMSk7CisJICBfQWxsb2NfdHJhaXRzOjpjb25zdHJ1Y3QoX19hLCBfX21lbSwgX19yLnJlbGVhc2UoKSwKKwkJCQkgICBfX3IuZ2V0X2RlbGV0ZXIoKSk7ICAvLyBub24tdGhyb3dpbmcKKwkgIF9NX3BpID0gX19tZW07CisJfQorCisgICAgICAvLyBUaHJvdyBiYWRfd2Vha19wdHIgd2hlbiBfX3IuX01fZ2V0X3VzZV9jb3VudCgpID09IDAuCisgICAgICBleHBsaWNpdCBfX3NoYXJlZF9jb3VudChjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19yKTsKKworICAgICAgfl9fc2hhcmVkX2NvdW50KCkgbm9leGNlcHQKKyAgICAgIHsKKwlpZiAoX01fcGkgIT0gbnVsbHB0cikKKwkgIF9NX3BpLT5fTV9yZWxlYXNlKCk7CisgICAgICB9CisKKyAgICAgIF9fc2hhcmVkX2NvdW50KGNvbnN0IF9fc2hhcmVkX2NvdW50JiBfX3IpIG5vZXhjZXB0CisgICAgICA6IF9NX3BpKF9fci5fTV9waSkKKyAgICAgIHsKKwlpZiAoX01fcGkgIT0gMCkKKwkgIF9NX3BpLT5fTV9hZGRfcmVmX2NvcHkoKTsKKyAgICAgIH0KKworICAgICAgX19zaGFyZWRfY291bnQmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX19zaGFyZWRfY291bnQmIF9fcikgbm9leGNlcHQKKyAgICAgIHsKKwlfU3BfY291bnRlZF9iYXNlPF9McD4qIF9fdG1wID0gX19yLl9NX3BpOworCWlmIChfX3RtcCAhPSBfTV9waSkKKwkgIHsKKwkgICAgaWYgKF9fdG1wICE9IDApCisJICAgICAgX190bXAtPl9NX2FkZF9yZWZfY29weSgpOworCSAgICBpZiAoX01fcGkgIT0gMCkKKwkgICAgICBfTV9waS0+X01fcmVsZWFzZSgpOworCSAgICBfTV9waSA9IF9fdG1wOworCSAgfQorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fc3dhcChfX3NoYXJlZF9jb3VudCYgX19yKSBub2V4Y2VwdAorICAgICAgeworCV9TcF9jb3VudGVkX2Jhc2U8X0xwPiogX190bXAgPSBfX3IuX01fcGk7CisJX19yLl9NX3BpID0gX01fcGk7CisJX01fcGkgPSBfX3RtcDsKKyAgICAgIH0KKworICAgICAgbG9uZworICAgICAgX01fZ2V0X3VzZV9jb3VudCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9waSAhPSAwID8gX01fcGktPl9NX2dldF91c2VfY291bnQoKSA6IDA7IH0KKworICAgICAgYm9vbAorICAgICAgX01fdW5pcXVlKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2dldF91c2VfY291bnQoKSA9PSAxOyB9CisKKyAgICAgIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3BpID8gX01fcGktPl9NX2dldF9kZWxldGVyKF9fdGkpIDogMDsgfQorCisgICAgICBib29sCisgICAgICBfTV9sZXNzKGNvbnN0IF9fc2hhcmVkX2NvdW50JiBfX3JocykgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bGVzczxfU3BfY291bnRlZF9iYXNlPF9McD4qPigpKHRoaXMtPl9NX3BpLCBfX3Jocy5fTV9waSk7IH0KKworICAgICAgYm9vbAorICAgICAgX01fbGVzcyhjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19yaHMpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Omxlc3M8X1NwX2NvdW50ZWRfYmFzZTxfTHA+Kj4oKSh0aGlzLT5fTV9waSwgX19yaHMuX01fcGkpOyB9CisKKyAgICAgIC8vIEZyaWVuZCBmdW5jdGlvbiBpbmplY3RlZCBpbnRvIGVuY2xvc2luZyBuYW1lc3BhY2UgYW5kIGZvdW5kIGJ5IEFETAorICAgICAgZnJpZW5kIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9fc2hhcmVkX2NvdW50JiBfX2EsIGNvbnN0IF9fc2hhcmVkX2NvdW50JiBfX2IpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2EuX01fcGkgPT0gX19iLl9NX3BpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgZnJpZW5kIGNsYXNzIF9fd2Vha19jb3VudDxfTHA+OworCisgICAgICBfU3BfY291bnRlZF9iYXNlPF9McD4qICBfTV9waTsKKyAgICB9OworCisKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfX3dlYWtfY291bnQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgY29uc3RleHByIF9fd2Vha19jb3VudCgpIG5vZXhjZXB0IDogX01fcGkoMCkKKyAgICAgIHsgfQorCisgICAgICBfX3dlYWtfY291bnQoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYgX19yKSBub2V4Y2VwdAorICAgICAgOiBfTV9waShfX3IuX01fcGkpCisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19hZGRfcmVmKCk7CisgICAgICB9CisKKyAgICAgIF9fd2Vha19jb3VudChjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19yKSBub2V4Y2VwdAorICAgICAgOiBfTV9waShfX3IuX01fcGkpCisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19hZGRfcmVmKCk7CisgICAgICB9CisKKyAgICAgIH5fX3dlYWtfY291bnQoKSBub2V4Y2VwdAorICAgICAgeworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3dlYWtfcmVsZWFzZSgpOworICAgICAgfQorCisgICAgICBfX3dlYWtfY291bnQ8X0xwPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX3IpIG5vZXhjZXB0CisgICAgICB7CisJX1NwX2NvdW50ZWRfYmFzZTxfTHA+KiBfX3RtcCA9IF9fci5fTV9waTsKKwlpZiAoX190bXAgIT0gMCkKKwkgIF9fdG1wLT5fTV93ZWFrX2FkZF9yZWYoKTsKKwlpZiAoX01fcGkgIT0gMCkKKwkgIF9NX3BpLT5fTV93ZWFrX3JlbGVhc2UoKTsKKwlfTV9waSA9IF9fdG1wOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX193ZWFrX2NvdW50PF9McD4mCisgICAgICBvcGVyYXRvcj0oY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fcikgbm9leGNlcHQKKyAgICAgIHsKKwlfU3BfY291bnRlZF9iYXNlPF9McD4qIF9fdG1wID0gX19yLl9NX3BpOworCWlmIChfX3RtcCAhPSAwKQorCSAgX190bXAtPl9NX3dlYWtfYWRkX3JlZigpOworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3dlYWtfcmVsZWFzZSgpOworCV9NX3BpID0gX190bXA7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zd2FwKF9fd2Vha19jb3VudDxfTHA+JiBfX3IpIG5vZXhjZXB0CisgICAgICB7CisJX1NwX2NvdW50ZWRfYmFzZTxfTHA+KiBfX3RtcCA9IF9fci5fTV9waTsKKwlfX3IuX01fcGkgPSBfTV9waTsKKwlfTV9waSA9IF9fdG1wOworICAgICAgfQorCisgICAgICBsb25nCisgICAgICBfTV9nZXRfdXNlX2NvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3BpICE9IDAgPyBfTV9waS0+X01fZ2V0X3VzZV9jb3VudCgpIDogMDsgfQorCisgICAgICBib29sCisgICAgICBfTV9sZXNzKGNvbnN0IF9fd2Vha19jb3VudCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Omxlc3M8X1NwX2NvdW50ZWRfYmFzZTxfTHA+Kj4oKSh0aGlzLT5fTV9waSwgX19yaHMuX01fcGkpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2xlc3MoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYgX19yaHMpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Omxlc3M8X1NwX2NvdW50ZWRfYmFzZTxfTHA+Kj4oKSh0aGlzLT5fTV9waSwgX19yaHMuX01fcGkpOyB9CisKKyAgICAgIC8vIEZyaWVuZCBmdW5jdGlvbiBpbmplY3RlZCBpbnRvIGVuY2xvc2luZyBuYW1lc3BhY2UgYW5kIGZvdW5kIGJ5IEFETAorICAgICAgZnJpZW5kIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9fd2Vha19jb3VudCYgX19hLCBjb25zdCBfX3dlYWtfY291bnQmIF9fYikgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fYS5fTV9waSA9PSBfX2IuX01fcGk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBmcmllbmQgY2xhc3MgX19zaGFyZWRfY291bnQ8X0xwPjsKKworICAgICAgX1NwX2NvdW50ZWRfYmFzZTxfTHA+KiAgX01fcGk7CisgICAgfTsKKworICAvLyBOb3cgdGhhdCBfX3dlYWtfY291bnQgaXMgZGVmaW5lZCB3ZSBjYW4gZGVmaW5lIHRoaXMgY29uc3RydWN0b3I6CisgIHRlbXBsYXRlPF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIF9fc2hhcmVkX2NvdW50PF9McD46OiBfX3NoYXJlZF9jb3VudChjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19yKQorICAgIDogX01fcGkoX19yLl9NX3BpKQorICAgIHsKKyAgICAgIGlmIChfTV9waSAhPSAwKQorCV9NX3BpLT5fTV9hZGRfcmVmX2xvY2soKTsKKyAgICAgIGVsc2UKKwlfX3Rocm93X2JhZF93ZWFrX3B0cigpOworICAgIH0KKworCisgIC8vIFN1cHBvcnQgZm9yIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzLgorCisgIC8vIEZyaWVuZCBvZiBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzLgorICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwLCB0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgIHZvaWQKKyAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiwKKwkJCQkgICAgIGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8X1RwMSwKKwkJCQkgICAgIF9McD4qLCBjb25zdCBfVHAyKikgbm9leGNlcHQ7CisKKyAgLy8gRnJpZW5kIG9mIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgIHZvaWQKKyAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihjb25zdCBfX3NoYXJlZF9jb3VudDw+JiwKKwkJCQkgICAgIGNvbnN0IGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPF9UcDE+KiwKKwkJCQkgICAgIGNvbnN0IF9UcDIqKSBub2V4Y2VwdDsKKworICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSB2b2lkCisgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYsIC4uLikgbm9leGNlcHQKKyAgICB7IH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfX3NoYXJlZF9wdHIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgICBlbGVtZW50X3R5cGU7CisKKyAgICAgIGNvbnN0ZXhwciBfX3NoYXJlZF9wdHIoKSBub2V4Y2VwdAorICAgICAgOiBfTV9wdHIoMCksIF9NX3JlZmNvdW50KCkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWV4cGxpY2l0IF9fc2hhcmVkX3B0cihfVHAxKiBfX3ApCisgICAgICAgIDogX01fcHRyKF9fcCksIF9NX3JlZmNvdW50KF9fcCkKKwl7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICBzdGF0aWNfYXNzZXJ0KCBzaXplb2YoX1RwMSkgPiAwLCAiaW5jb21wbGV0ZSB0eXBlIiApOworCSAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoX01fcmVmY291bnQsIF9fcCwgX19wKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9EZWxldGVyPgorCV9fc2hhcmVkX3B0cihfVHAxKiBfX3AsIF9EZWxldGVyIF9fZCkKKwk6IF9NX3B0cihfX3ApLCBfTV9yZWZjb3VudChfX3AsIF9fZCkKKwl7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICAvLyBUT0RPIHJlcXVpcmVzIF9EZWxldGVyIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBfX2QoX19wKSB3ZWxsLWZvcm1lZAorCSAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoX01fcmVmY291bnQsIF9fcCwgX19wKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9EZWxldGVyLCB0eXBlbmFtZSBfQWxsb2M+CisJX19zaGFyZWRfcHRyKF9UcDEqIF9fcCwgX0RlbGV0ZXIgX19kLCBfQWxsb2MgX19hKQorCTogX01fcHRyKF9fcCksIF9NX3JlZmNvdW50KF9fcCwgX19kLCBzdGQ6Om1vdmUoX19hKSkKKwl7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICAvLyBUT0RPIHJlcXVpcmVzIF9EZWxldGVyIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBfX2QoX19wKSB3ZWxsLWZvcm1lZAorCSAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoX01fcmVmY291bnQsIF9fcCwgX19wKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9EZWxldGVyPgorCV9fc2hhcmVkX3B0cihudWxscHRyX3QgX19wLCBfRGVsZXRlciBfX2QpCisJOiBfTV9wdHIoMCksIF9NX3JlZmNvdW50KF9fcCwgX19kKQorCXsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGVsZXRlciwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBfX3NoYXJlZF9wdHIobnVsbHB0cl90IF9fcCwgX0RlbGV0ZXIgX19kLCBfQWxsb2MgX19hKQorCTogX01fcHRyKDApLCBfTV9yZWZjb3VudChfX3AsIF9fZCwgc3RkOjptb3ZlKF9fYSkpCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJX19zaGFyZWRfcHRyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IsIF9UcCogX19wKSBub2V4Y2VwdAorCTogX01fcHRyKF9fcCksIF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkgLy8gbmV2ZXIgdGhyb3dzCisJeyB9CisKKyAgICAgIF9fc2hhcmVkX3B0cihjb25zdCBfX3NoYXJlZF9wdHImKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICBfX3NoYXJlZF9wdHImIG9wZXJhdG9yPShjb25zdCBfX3NoYXJlZF9wdHImKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICB+X19zaGFyZWRfcHRyKCkgPSBkZWZhdWx0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29udmVydGlibGU8X1RwMSosIF9UcCo+Ojp2YWx1ZT46OnR5cGU+CisJX19zaGFyZWRfcHRyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpIG5vZXhjZXB0CisJOiBfTV9wdHIoX19yLl9NX3B0ciksIF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkKKwl7IH0KKworICAgICAgX19zaGFyZWRfcHRyKF9fc2hhcmVkX3B0ciYmIF9fcikgbm9leGNlcHQKKyAgICAgIDogX01fcHRyKF9fci5fTV9wdHIpLCBfTV9yZWZjb3VudCgpCisgICAgICB7CisJX01fcmVmY291bnQuX01fc3dhcChfX3IuX01fcmVmY291bnQpOworCV9fci5fTV9wdHIgPSAwOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29udmVydGlibGU8X1RwMSosIF9UcCo+Ojp2YWx1ZT46OnR5cGU+CisJX19zaGFyZWRfcHRyKF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiYgX19yKSBub2V4Y2VwdAorCTogX01fcHRyKF9fci5fTV9wdHIpLCBfTV9yZWZjb3VudCgpCisJeworCSAgX01fcmVmY291bnQuX01fc3dhcChfX3IuX01fcmVmY291bnQpOworCSAgX19yLl9NX3B0ciA9IDA7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWV4cGxpY2l0IF9fc2hhcmVkX3B0cihjb25zdCBfX3dlYWtfcHRyPF9UcDEsIF9McD4mIF9fcikKKwk6IF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkgLy8gbWF5IHRocm93CisJeworCSAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwMSosIF9UcCo+KQorCisJICAvLyBJdCBpcyBub3cgc2FmZSB0byBjb3B5IF9fci5fTV9wdHIsIGFzCisJICAvLyBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpIGRpZCBub3QgdGhyb3cuCisJICBfTV9wdHIgPSBfX3IuX01fcHRyOworCX0KKworICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB0aGlzIGNvbnN0cnVjdG9yIGhhcyBubyBlZmZlY3QuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfRGVsPgorCV9fc2hhcmVkX3B0cihzdGQ6OnVuaXF1ZV9wdHI8X1RwMSwgX0RlbD4mJiBfX3IpCisJOiBfTV9wdHIoX19yLmdldCgpKSwgX01fcmVmY291bnQoKQorCXsKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikKKwkgIGF1dG8gX190bXAgPSBfX3IuZ2V0KCk7CisJICBfTV9yZWZjb3VudCA9IF9fc2hhcmVkX2NvdW50PF9McD4oc3RkOjptb3ZlKF9fcikpOworCSAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoX01fcmVmY291bnQsIF9fdG1wLCBfX3RtcCk7CisJfQorCisjaWYgX0dMSUJDWFhfVVNFX0RFUFJFQ0FURUQKKyAgICAgIC8vIFBvc3Rjb25kaXRpb246IHVzZV9jb3VudCgpID09IDEgYW5kIF9fci5nZXQoKSA9PSAwCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCV9fc2hhcmVkX3B0cihzdGQ6OmF1dG9fcHRyPF9UcDE+JiYgX19yKTsKKyNlbmRpZgorCisgICAgICAvKiBUT0RPOiB1c2UgZGVsZWdhdGluZyBjb25zdHJ1Y3RvciAqLworICAgICAgY29uc3RleHByIF9fc2hhcmVkX3B0cihudWxscHRyX3QpIG5vZXhjZXB0CisgICAgICA6IF9NX3B0cigwKSwgX01fcmVmY291bnQoKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJX19zaGFyZWRfcHRyJgorCW9wZXJhdG9yPShjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19yKSBub2V4Y2VwdAorCXsKKwkgIF9NX3B0ciA9IF9fci5fTV9wdHI7CisJICBfTV9yZWZjb3VudCA9IF9fci5fTV9yZWZjb3VudDsgLy8gX19zaGFyZWRfY291bnQ6Om9wPSBkb2Vzbid0IHRocm93CisJICByZXR1cm4gKnRoaXM7CisJfQorCisjaWYgX0dMSUJDWFhfVVNFX0RFUFJFQ0FURUQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJX19zaGFyZWRfcHRyJgorCW9wZXJhdG9yPShzdGQ6OmF1dG9fcHRyPF9UcDE+JiYgX19yKQorCXsKKwkgIF9fc2hhcmVkX3B0cihzdGQ6Om1vdmUoX19yKSkuc3dhcCgqdGhpcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorI2VuZGlmCisKKyAgICAgIF9fc2hhcmVkX3B0ciYKKyAgICAgIG9wZXJhdG9yPShfX3NoYXJlZF9wdHImJiBfX3IpIG5vZXhjZXB0CisgICAgICB7CisJX19zaGFyZWRfcHRyKHN0ZDo6bW92ZShfX3IpKS5zd2FwKCp0aGlzKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9UcDE+CisJX19zaGFyZWRfcHRyJgorCW9wZXJhdG9yPShfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYmIF9fcikgbm9leGNlcHQKKwl7CisJICBfX3NoYXJlZF9wdHIoc3RkOjptb3ZlKF9fcikpLnN3YXAoKnRoaXMpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbD4KKwlfX3NoYXJlZF9wdHImCisJb3BlcmF0b3I9KHN0ZDo6dW5pcXVlX3B0cjxfVHAxLCBfRGVsPiYmIF9fcikKKwl7CisJICBfX3NoYXJlZF9wdHIoc3RkOjptb3ZlKF9fcikpLnN3YXAoKnRoaXMpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdm9pZAorICAgICAgcmVzZXQoKSBub2V4Y2VwdAorICAgICAgeyBfX3NoYXJlZF9wdHIoKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXZvaWQKKwlyZXNldChfVHAxKiBfX3ApIC8vIF9UcDEgbXVzdCBiZSBjb21wbGV0ZS4KKwl7CisJICAvLyBDYXRjaCBzZWxmLXJlc2V0IGVycm9ycy4KKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX3AgPT0gMCB8fCBfX3AgIT0gX01fcHRyKTsKKwkgIF9fc2hhcmVkX3B0cihfX3ApLnN3YXAoKnRoaXMpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisJdm9pZAorCXJlc2V0KF9UcDEqIF9fcCwgX0RlbGV0ZXIgX19kKQorCXsgX19zaGFyZWRfcHRyKF9fcCwgX19kKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfRGVsZXRlciwgdHlwZW5hbWUgX0FsbG9jPgorCXZvaWQKKyAgICAgICAgcmVzZXQoX1RwMSogX19wLCBfRGVsZXRlciBfX2QsIF9BbGxvYyBfX2EpCisgICAgICAgIHsgX19zaGFyZWRfcHRyKF9fcCwgX19kLCBzdGQ6Om1vdmUoX19hKSkuc3dhcCgqdGhpcyk7IH0KKworICAgICAgLy8gQWxsb3cgY2xhc3MgaW5zdGFudGlhdGlvbiB3aGVuIF9UcCBpcyBbY3YtcXVhbF0gdm9pZC4KKyAgICAgIHR5cGVuYW1lIHN0ZDo6YWRkX2x2YWx1ZV9yZWZlcmVuY2U8X1RwPjo6dHlwZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fcHRyICE9IDApOworCXJldHVybiAqX01fcHRyOworICAgICAgfQorCisgICAgICBfVHAqCisgICAgICBvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fcHRyICE9IDApOworCXJldHVybiBfTV9wdHI7CisgICAgICB9CisKKyAgICAgIF9UcCoKKyAgICAgIGdldCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9wdHI7IH0KKworICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeyByZXR1cm4gX01fcHRyID09IDAgPyBmYWxzZSA6IHRydWU7IH0KKworICAgICAgYm9vbAorICAgICAgdW5pcXVlKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX3VuaXF1ZSgpOyB9CisKKyAgICAgIGxvbmcKKyAgICAgIHVzZV9jb3VudCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9yZWZjb3VudC5fTV9nZXRfdXNlX2NvdW50KCk7IH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX290aGVyKSBub2V4Y2VwdAorICAgICAgeworCXN0ZDo6c3dhcChfTV9wdHIsIF9fb3RoZXIuX01fcHRyKTsKKwlfTV9yZWZjb3VudC5fTV9zd2FwKF9fb3RoZXIuX01fcmVmY291bnQpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWJvb2wKKwlvd25lcl9iZWZvcmUoX19zaGFyZWRfcHRyPF9UcDEsIF9McD4gY29uc3QmIF9fcmhzKSBjb25zdAorCXsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2xlc3MoX19yaHMuX01fcmVmY291bnQpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJYm9vbAorCW93bmVyX2JlZm9yZShfX3dlYWtfcHRyPF9UcDEsIF9McD4gY29uc3QmIF9fcmhzKSBjb25zdAorCXsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2xlc3MoX19yaHMuX01fcmVmY291bnQpOyB9CisKKyNpZmRlZiBfX0dYWF9SVFRJCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBub24tc3RhbmRhcmQsIGl0IGlzIHVzZWQgYnkgYWxsb2NhdGVfc2hhcmVkLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlfX3NoYXJlZF9wdHIoX1NwX21ha2Vfc2hhcmVkX3RhZyBfX3RhZywgY29uc3QgX0FsbG9jJiBfX2EsCisJCSAgICAgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfTV9wdHIoKSwgX01fcmVmY291bnQoX190YWcsIChfVHAqKTAsIF9fYSwKKwkJCQlzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pCisJeworCSAgLy8gX01fcHRyIG5lZWRzIHRvIHBvaW50IHRvIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QuCisJICAvLyBUaGlzIHJlbGllcyBvbiBfU3BfY291bnRlZF9wdHJfaW5wbGFjZTo6X01fZ2V0X2RlbGV0ZXIuCisJICB2b2lkKiBfX3AgPSBfTV9yZWZjb3VudC5fTV9nZXRfZGVsZXRlcih0eXBlaWQoX190YWcpKTsKKwkgIF9NX3B0ciA9IHN0YXRpY19jYXN0PF9UcCo+KF9fcCk7CisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX01fcHRyLCBfTV9wdHIpOworCX0KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgICAgIHN0cnVjdCBfRGVsZXRlcgorICAgICAgICB7CisgICAgICAgICAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wdHIpCisgICAgICAgICAgeworCSAgICB0eXBlZGVmIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPiBfQWxsb2NfdHJhaXRzOworCSAgICBfQWxsb2NfdHJhaXRzOjpkZXN0cm95KF9NX2FsbG9jLCBfX3B0cik7CisJICAgIF9BbGxvY190cmFpdHM6OmRlYWxsb2NhdGUoX01fYWxsb2MsIF9fcHRyLCAxKTsKKyAgICAgICAgICB9CisgICAgICAgICAgX0FsbG9jIF9NX2FsbG9jOworICAgICAgICB9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorCV9fc2hhcmVkX3B0cihfU3BfbWFrZV9zaGFyZWRfdGFnIF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkJICAgICBfQXJncyYmLi4uIF9fYXJncykKKwk6IF9NX3B0cigpLCBfTV9yZWZjb3VudCgpCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgX0FsbG9jMjsKKyAgICAgICAgICBfRGVsZXRlcjxfQWxsb2MyPiBfX2RlbCA9IHsgX0FsbG9jMihfX2EpIH07CisJICB0eXBlZGVmIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jMj4gX190cmFpdHM7CisgICAgICAgICAgX01fcHRyID0gX190cmFpdHM6OmFsbG9jYXRlKF9fZGVsLl9NX2FsbG9jLCAxKTsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gMjA3MC4gYWxsb2NhdGVfc2hhcmVkIHNob3VsZCB1c2UgYWxsb2NhdG9yX3RyYWl0czxBPjo6Y29uc3RydWN0CisJICAgICAgX190cmFpdHM6OmNvbnN0cnVjdChfX2RlbC5fTV9hbGxvYywgX01fcHRyLAorCQkgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9fdHJhaXRzOjpkZWFsbG9jYXRlKF9fZGVsLl9NX2FsbG9jLCBfTV9wdHIsIDEpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisgICAgICAgICAgX19zaGFyZWRfY291bnQ8X0xwPiBfX2NvdW50KF9NX3B0ciwgX19kZWwsIF9fZGVsLl9NX2FsbG9jKTsKKyAgICAgICAgICBfTV9yZWZjb3VudC5fTV9zd2FwKF9fY291bnQpOworCSAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoX01fcmVmY291bnQsIF9NX3B0ciwgX01fcHRyKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgICAgIHR5cGVuYW1lLi4uIF9BcmdzPgorCWZyaWVuZCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwMT4KKwlfX2FsbG9jYXRlX3NoYXJlZChjb25zdCBfQWxsb2MmIF9fYSwgX0FyZ3MmJi4uLiBfX2FyZ3MpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF9kZWxldGVyKF9fdGkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxPiBmcmllbmQgY2xhc3MgX19zaGFyZWRfcHRyOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgX0xvY2tfcG9saWN5IF9McDE+IGZyaWVuZCBjbGFzcyBfX3dlYWtfcHRyOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGVsLCB0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMT4KKwlmcmllbmQgX0RlbCogZ2V0X2RlbGV0ZXIoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McDE+Jikgbm9leGNlcHQ7CisKKyAgICAgIF9UcCoJICAgCSAgIF9NX3B0cjsgICAgICAgICAvLyBDb250YWluZWQgcG9pbnRlci4KKyAgICAgIF9fc2hhcmVkX2NvdW50PF9McD4gIF9NX3JlZmNvdW50OyAgICAvLyBSZWZlcmVuY2UgY291bnRlci4KKyAgICB9OworCisKKyAgLy8gMjAuNy4yLjIuNyBzaGFyZWRfcHRyIGNvbXBhcmlzb25zCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDIsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX2EsCisJICAgICAgIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAyLCBfTHA+JiBfX2IpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLmdldCgpID09IF9fYi5nZXQoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19hLCBudWxscHRyX3QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIV9fYTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0obnVsbHB0cl90LCBjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIV9fYTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDIsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX2EsCisJICAgICAgIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAyLCBfTHA+JiBfX2IpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19hLmdldCgpICE9IF9fYi5nZXQoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19hLCBudWxscHRyX3QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gKGJvb2wpX19hOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShudWxscHRyX3QsIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fYSkgbm9leGNlcHQKKyAgICB7IHJldHVybiAoYm9vbClfX2E7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX2EsCisJICAgICAgY29uc3QgX19zaGFyZWRfcHRyPF9UcDIsIF9McD4mIF9fYikgbm9leGNlcHQKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8X1RwMSosIF9UcDIqPjo6dHlwZSBfQ1Q7CisgICAgICByZXR1cm4gc3RkOjpsZXNzPF9DVD4oKShfX2EuZ2V0KCksIF9fYi5nZXQoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EsIG51bGxwdHJfdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiBzdGQ6Omxlc3M8X1RwKj4oKShfX2EuZ2V0KCksIG51bGxwdHIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KG51bGxwdHJfdCwgY29uc3QgX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19hKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIHN0ZDo6bGVzczxfVHAqPigpKG51bGxwdHIsIF9fYS5nZXQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19hLAorCSAgICAgICBjb25zdCBfX3NoYXJlZF9wdHI8X1RwMiwgX0xwPiYgX19iKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuICEoX19iIDwgX19hKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19hLCBudWxscHRyX3QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIShudWxscHRyIDwgX19hKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0obnVsbHB0cl90LCBjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIShfX2EgPCBudWxscHRyKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDIsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fYSwKKwkgICAgICBjb25zdCBfX3NoYXJlZF9wdHI8X1RwMiwgX0xwPiYgX19iKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIChfX2IgPCBfX2EpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fYSwgbnVsbHB0cl90KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIHN0ZDo6bGVzczxfVHAqPigpKG51bGxwdHIsIF9fYS5nZXQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4obnVsbHB0cl90LCBjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gc3RkOjpsZXNzPF9UcCo+KCkoX19hLmdldCgpLCBudWxscHRyKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDIsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX2EsCisJICAgICAgIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAyLCBfTHA+JiBfX2IpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIShfX2EgPCBfX2IpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EsIG51bGxwdHJfdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiAhKF9fYSA8IG51bGxwdHIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShudWxscHRyX3QsIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fYSkgbm9leGNlcHQKKyAgICB7IHJldHVybiAhKG51bGxwdHIgPCBfX2EpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NwPgorICAgIHN0cnVjdCBfU3BfbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1NwLCBfU3AsIGJvb2w+CisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfU3AmIF9fbGhzLCBjb25zdCBfU3AmIF9fcmhzKSBjb25zdCBub2V4Y2VwdAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX1NwOjplbGVtZW50X3R5cGUgZWxlbWVudF90eXBlOworCXJldHVybiBzdGQ6Omxlc3M8ZWxlbWVudF90eXBlKj4oKShfX2xocy5nZXQoKSwgX19yaHMuZ2V0KCkpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIHN0cnVjdCBsZXNzPF9fc2hhcmVkX3B0cjxfVHAsIF9McD4+CisgICAgOiBwdWJsaWMgX1NwX2xlc3M8X19zaGFyZWRfcHRyPF9UcCwgX0xwPj4KKyAgICB7IH07CisKKyAgLy8gMi4yLjMuOCBzaGFyZWRfcHRyIHNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19hLCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2IpIG5vZXhjZXB0CisgICAgeyBfX2Euc3dhcChfX2IpOyB9CisKKyAgLy8gMi4yLjMuOSBzaGFyZWRfcHRyIGNhc3RzCisKKyAgLy8gVGhlIHNlZW1pbmdseSBlcXVpdmFsZW50IGNvZGU6CisgIC8vIHNoYXJlZF9wdHI8X1RwLCBfTHA+KHN0YXRpY19jYXN0PF9UcCo+KF9fci5nZXQoKSkpCisgIC8vIHdpbGwgZXZlbnR1YWxseSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW91ciwgYXR0ZW1wdGluZyB0bworICAvLyBkZWxldGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLgorICAvLy8gc3RhdGljX3BvaW50ZXJfY2FzdAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICBzdGF0aWNfcG9pbnRlcl9jYXN0KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPihfX3IsIHN0YXRpY19jYXN0PF9UcCo+KF9fci5nZXQoKSkpOyB9CisKKyAgLy8gVGhlIHNlZW1pbmdseSBlcXVpdmFsZW50IGNvZGU6CisgIC8vIHNoYXJlZF9wdHI8X1RwLCBfTHA+KGNvbnN0X2Nhc3Q8X1RwKj4oX19yLmdldCgpKSkKKyAgLy8gd2lsbCBldmVudHVhbGx5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3VyLCBhdHRlbXB0aW5nIHRvCisgIC8vIGRlbGV0ZSB0aGUgc2FtZSBvYmplY3QgdHdpY2UuCisgIC8vLyBjb25zdF9wb2ludGVyX2Nhc3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPihfX3IsIGNvbnN0X2Nhc3Q8X1RwKj4oX19yLmdldCgpKSk7IH0KKworICAvLyBUaGUgc2VlbWluZ2x5IGVxdWl2YWxlbnQgY29kZToKKyAgLy8gc2hhcmVkX3B0cjxfVHAsIF9McD4oZHluYW1pY19jYXN0PF9UcCo+KF9fci5nZXQoKSkpCisgIC8vIHdpbGwgZXZlbnR1YWxseSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW91ciwgYXR0ZW1wdGluZyB0bworICAvLyBkZWxldGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLgorICAvLy8gZHluYW1pY19wb2ludGVyX2Nhc3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgZHluYW1pY19wb2ludGVyX2Nhc3QoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikgbm9leGNlcHQKKyAgICB7CisgICAgICBpZiAoX1RwKiBfX3AgPSBkeW5hbWljX2Nhc3Q8X1RwKj4oX19yLmdldCgpKSkKKwlyZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPihfX3IsIF9fcCk7CisgICAgICByZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPigpOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfX3dlYWtfcHRyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKKworICAgICAgY29uc3RleHByIF9fd2Vha19wdHIoKSBub2V4Y2VwdAorICAgICAgOiBfTV9wdHIoMCksIF9NX3JlZmNvdW50KCkKKyAgICAgIHsgfQorCisgICAgICBfX3dlYWtfcHRyKGNvbnN0IF9fd2Vha19wdHImKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICBfX3dlYWtfcHRyJiBvcGVyYXRvcj0oY29uc3QgX193ZWFrX3B0ciYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgIH5fX3dlYWtfcHRyKCkgPSBkZWZhdWx0OworCisgICAgICAvLyBUaGUgIm9idmlvdXMiIGNvbnZlcnRpbmcgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb246CisgICAgICAvLworICAgICAgLy8gIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAvLyAgICBfX3dlYWtfcHRyKGNvbnN0IF9fd2Vha19wdHI8X1RwMSwgX0xwPiYgX19yKQorICAgICAgLy8gICAgOiBfTV9wdHIoX19yLl9NX3B0ciksIF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICAvLyAgICB7IH0KKyAgICAgIC8vCisgICAgICAvLyBoYXMgYSBzZXJpb3VzIHByb2JsZW0uCisgICAgICAvLworICAgICAgLy8gIF9fci5fTV9wdHIgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGludmFsaWRhdGVkLiBUaGUgX01fcHRyKF9fci5fTV9wdHIpCisgICAgICAvLyAgY29udmVyc2lvbiBtYXkgcmVxdWlyZSBhY2Nlc3MgdG8gKl9fci5fTV9wdHIgKHZpcnR1YWwgaW5oZXJpdGFuY2UpLgorICAgICAgLy8KKyAgICAgIC8vIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdm9pZCBzcHVyaW91cyBhY2Nlc3MgdmlvbGF0aW9ucyBzaW5jZQorICAgICAgLy8gaW4gbXVsdGl0aHJlYWRlZCBwcm9ncmFtcyBfX3IuX01fcHRyIG1heSBiZSBpbnZhbGlkYXRlZCBhdCBhbnkgcG9pbnQuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29udmVydGlibGU8X1RwMSosIF9UcCo+Ojp2YWx1ZT46OnR5cGU+CisJX193ZWFrX3B0cihjb25zdCBfX3dlYWtfcHRyPF9UcDEsIF9McD4mIF9fcikgbm9leGNlcHQKKwk6IF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkKKyAgICAgICAgeyBfTV9wdHIgPSBfX3IubG9jaygpLmdldCgpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb252ZXJ0aWJsZTxfVHAxKiwgX1RwKj46OnZhbHVlPjo6dHlwZT4KKwlfX3dlYWtfcHRyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpIG5vZXhjZXB0CisJOiBfTV9wdHIoX19yLl9NX3B0ciksIF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkKKwl7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlfX3dlYWtfcHRyJgorCW9wZXJhdG9yPShjb25zdCBfX3dlYWtfcHRyPF9UcDEsIF9McD4mIF9fcikgbm9leGNlcHQKKwl7CisJICBfTV9wdHIgPSBfX3IubG9jaygpLmdldCgpOworCSAgX01fcmVmY291bnQgPSBfX3IuX01fcmVmY291bnQ7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCV9fd2Vha19wdHImCisJb3BlcmF0b3I9KGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IpIG5vZXhjZXB0CisJeworCSAgX01fcHRyID0gX19yLl9NX3B0cjsKKwkgIF9NX3JlZmNvdW50ID0gX19yLl9NX3JlZmNvdW50OworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgX19zaGFyZWRfcHRyPF9UcCwgX0xwPgorICAgICAgbG9jaygpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7CisjaWZkZWYgX19HVEhSRUFEUworCS8vIE9wdGltaXphdGlvbjogYXZvaWQgdGhyb3cgb3ZlcmhlYWQuCisJaWYgKGV4cGlyZWQoKSkKKwkgIHJldHVybiBfX3NoYXJlZF9wdHI8ZWxlbWVudF90eXBlLCBfTHA+KCk7CisKKwlfX3RyeQorCSAgeworCSAgICByZXR1cm4gX19zaGFyZWRfcHRyPGVsZW1lbnRfdHlwZSwgX0xwPigqdGhpcyk7CisJICB9CisJX19jYXRjaChjb25zdCBiYWRfd2Vha19wdHImKQorCSAgeworCSAgICAvLyBROiBIb3cgY2FuIHdlIGdldCBoZXJlPworCSAgICAvLyBBOiBBbm90aGVyIHRocmVhZCBtYXkgaGF2ZSBpbnZhbGlkYXRlZCByIGFmdGVyIHRoZQorCSAgICAvLyAgICB1c2VfY291bnQgdGVzdCBhYm92ZS4KKwkgICAgcmV0dXJuIF9fc2hhcmVkX3B0cjxlbGVtZW50X3R5cGUsIF9McD4oKTsKKwkgIH0KKworI2Vsc2UKKwkvLyBPcHRpbWl6YXRpb246IGF2b2lkIHRyeS9jYXRjaCBvdmVyaGVhZCB3aGVuIHNpbmdsZSB0aHJlYWRlZC4KKwlyZXR1cm4gZXhwaXJlZCgpID8gX19zaGFyZWRfcHRyPGVsZW1lbnRfdHlwZSwgX0xwPigpCisJCQkgOiBfX3NoYXJlZF9wdHI8ZWxlbWVudF90eXBlLCBfTHA+KCp0aGlzKTsKKworI2VuZGlmCisgICAgICB9IC8vIFhYWCBNVAorCisgICAgICBsb25nCisgICAgICB1c2VfY291bnQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fcmVmY291bnQuX01fZ2V0X3VzZV9jb3VudCgpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGV4cGlyZWQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fcmVmY291bnQuX01fZ2V0X3VzZV9jb3VudCgpID09IDA7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwlib29sCisJb3duZXJfYmVmb3JlKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3JocykgY29uc3QKKwl7IHJldHVybiBfTV9yZWZjb3VudC5fTV9sZXNzKF9fcmhzLl9NX3JlZmNvdW50KTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWJvb2wKKwlvd25lcl9iZWZvcmUoY29uc3QgX193ZWFrX3B0cjxfVHAxLCBfTHA+JiBfX3JocykgY29uc3QKKwl7IHJldHVybiBfTV9yZWZjb3VudC5fTV9sZXNzKF9fcmhzLl9NX3JlZmNvdW50KTsgfQorCisgICAgICB2b2lkCisgICAgICByZXNldCgpIG5vZXhjZXB0CisgICAgICB7IF9fd2Vha19wdHIoKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKF9fd2Vha19wdHImIF9fcykgbm9leGNlcHQKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fcHRyLCBfX3MuX01fcHRyKTsKKwlfTV9yZWZjb3VudC5fTV9zd2FwKF9fcy5fTV9yZWZjb3VudCk7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gVXNlZCBieSBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzLgorICAgICAgdm9pZAorICAgICAgX01fYXNzaWduKF9UcCogX19wdHIsIGNvbnN0IF9fc2hhcmVkX2NvdW50PF9McD4mIF9fcmVmY291bnQpIG5vZXhjZXB0CisgICAgICB7CisJX01fcHRyID0gX19wdHI7CisJX01fcmVmY291bnQgPSBfX3JlZmNvdW50OworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMT4gZnJpZW5kIGNsYXNzIF9fc2hhcmVkX3B0cjsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxPiBmcmllbmQgY2xhc3MgX193ZWFrX3B0cjsKKyAgICAgIGZyaWVuZCBjbGFzcyBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzPF9UcCwgX0xwPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBlbmFibGVfc2hhcmVkX2Zyb21fdGhpczxfVHA+OworCisgICAgICBfVHAqCSAJIF9NX3B0cjsgICAgICAgICAvLyBDb250YWluZWQgcG9pbnRlci4KKyAgICAgIF9fd2Vha19jb3VudDxfTHA+ICBfTV9yZWZjb3VudDsgICAgLy8gUmVmZXJlbmNlIGNvdW50ZXIuCisgICAgfTsKKworICAvLyAyMC43LjIuMy42IHdlYWtfcHRyIHNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX193ZWFrX3B0cjxfVHAsIF9McD4mIF9fYSwgX193ZWFrX3B0cjxfVHAsIF9McD4mIF9fYikgbm9leGNlcHQKKyAgICB7IF9fYS5zd2FwKF9fYik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+CisgICAgc3RydWN0IF9TcF9vd25lcl9sZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19saHMsIGNvbnN0IF9UcCYgX19yaHMpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2xocy5vd25lcl9iZWZvcmUoX19yaHMpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX2xocywgY29uc3QgX1RwMSYgX19yaHMpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2xocy5vd25lcl9iZWZvcmUoX19yaHMpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwMSYgX19saHMsIGNvbnN0IF9UcCYgX19yaHMpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2xocy5vd25lcl9iZWZvcmUoX19yaHMpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgc3RydWN0IG93bmVyX2xlc3M8X19zaGFyZWRfcHRyPF9UcCwgX0xwPj4KKyAgICA6IHB1YmxpYyBfU3Bfb3duZXJfbGVzczxfX3NoYXJlZF9wdHI8X1RwLCBfTHA+LCBfX3dlYWtfcHRyPF9UcCwgX0xwPj4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIHN0cnVjdCBvd25lcl9sZXNzPF9fd2Vha19wdHI8X1RwLCBfTHA+PgorICAgIDogcHVibGljIF9TcF9vd25lcl9sZXNzPF9fd2Vha19wdHI8X1RwLCBfTHA+LCBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+PgorICAgIHsgfTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIGNvbnN0ZXhwciBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgbm9leGNlcHQgeyB9CisKKyAgICAgIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoY29uc3QgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcyYpIG5vZXhjZXB0IHsgfQorCisgICAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgfl9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICAgIHNoYXJlZF9mcm9tX3RoaXMoKQorICAgICAgeyByZXR1cm4gX19zaGFyZWRfcHRyPF9UcCwgX0xwPih0aGlzLT5fTV93ZWFrX3RoaXMpOyB9CisKKyAgICAgIF9fc2hhcmVkX3B0cjxjb25zdCBfVHAsIF9McD4KKyAgICAgIHNoYXJlZF9mcm9tX3RoaXMoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19zaGFyZWRfcHRyPGNvbnN0IF9UcCwgX0xwPih0aGlzLT5fTV93ZWFrX3RoaXMpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKwl2b2lkCisJX01fd2Vha19hc3NpZ24oX1RwMSogX19wLCBjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX24pIGNvbnN0IG5vZXhjZXB0CisJeyBfTV93ZWFrX3RoaXMuX01fYXNzaWduKF9fcCwgX19uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCWZyaWVuZCB2b2lkCisJX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYgX19wbiwKKwkJCQkJIGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMqIF9fcGUsCisJCQkJCSBjb25zdCBfVHAxKiBfX3B4KSBub2V4Y2VwdAorCXsKKwkgIGlmIChfX3BlICE9IDApCisJICAgIF9fcGUtPl9NX3dlYWtfYXNzaWduKGNvbnN0X2Nhc3Q8X1RwMSo+KF9fcHgpLCBfX3BuKTsKKwl9CisKKyAgICAgIG11dGFibGUgX193ZWFrX3B0cjxfVHAsIF9McD4gIF9NX3dlYWtfdGhpczsKKyAgICB9OworCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgX19hbGxvY2F0ZV9zaGFyZWQoY29uc3QgX0FsbG9jJiBfX2EsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHJldHVybiBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+KF9TcF9tYWtlX3NoYXJlZF90YWcoKSwgX19hLAorCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgX19tYWtlX3NoYXJlZChfQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PF9UcD46OnR5cGUgX1RwX25jOworICAgICAgcmV0dXJuIHN0ZDo6X19hbGxvY2F0ZV9zaGFyZWQ8X1RwLCBfTHA+KHN0ZDo6YWxsb2NhdG9yPF9UcF9uYz4oKSwKKwkJCQkJICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgX19zaGFyZWRfcHRyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgc3RydWN0IGhhc2g8X19zaGFyZWRfcHRyPF9UcCwgX0xwPj4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fcykgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6aGFzaDxfVHAqPigpKF9fcy5nZXQoKSk7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBfU0hBUkVEX1BUUl9CQVNFX0gKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zbGljZV9hcnJheS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3NsaWNlX2FycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0ZDBmZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zbGljZV9hcnJheS5oCkBAIC0wLDAgKzEsMjc0IEBACisvLyBUaGUgdGVtcGxhdGUgYW5kIGlubGluZXMgZm9yIHRoZSAtKi0gQysrIC0qLSBzbGljZV9hcnJheSBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvc2xpY2VfYXJyYXkuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3ZhbGFycmF5fQorICovCisKKy8vIFdyaXR0ZW4gYnkgR2FicmllbCBEb3MgUmVpcyA8R2FicmllbC5Eb3MtUmVpc0BEUFRNYXRocy5FTlMtQ2FjaGFuLkZyPgorCisjaWZuZGVmIF9TTElDRV9BUlJBWV9ICisjZGVmaW5lIF9TTElDRV9BUlJBWV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIG51bWVyaWNfYXJyYXlzCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiAgQGJyaWVmICBDbGFzcyBkZWZpbmluZyBvbmUtZGltZW5zaW9uYWwgc3Vic2V0IG9mIGFuIGFycmF5LgorICAgKgorICAgKiAgVGhlIHNsaWNlIGNsYXNzIHJlcHJlc2VudHMgYSBvbmUtZGltZW5zaW9uYWwgc3Vic2V0IG9mIGFuIGFycmF5LAorICAgKiAgc3BlY2lmaWVkIGJ5IHRocmVlIHBhcmFtZXRlcnM6IHN0YXJ0IG9mZnNldCwgc2l6ZSwgYW5kIHN0cmlkZS4gIFRoZQorICAgKiAgc3RhcnQgb2Zmc2V0IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkgdGhhdCBpcyBwYXJ0CisgICAqICBvZiB0aGUgc3Vic2V0LiAgVGhlIHNpemUgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3Vic2V0LgorICAgKiAgU3RyaWRlIGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGVhY2ggc3VjY2Vzc2l2ZSBhcnJheSBlbGVtZW50IHRvIGluY2x1ZGUKKyAgICogIGluIHRoZSBzdWJzZXQuCisgICAqCisgICAqICBGb3IgZXhhbXBsZSwgd2l0aCBhbiBhcnJheSBvZiBzaXplIDEwLCBhbmQgYSBzbGljZSB3aXRoIG9mZnNldCAxLCBzaXplIDMKKyAgICogIGFuZCBzdHJpZGUgMiwgdGhlIHN1YnNldCBjb25zaXN0cyBvZiBhcnJheSBlbGVtZW50cyAxLCAzLCBhbmQgNS4KKyAgICovCisgIGNsYXNzIHNsaWNlCisgIHsKKyAgcHVibGljOgorICAgIC8vLyAgQ29uc3RydWN0IGFuIGVtcHR5IHNsaWNlLgorICAgIHNsaWNlKCk7CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgYSBzbGljZS4KKyAgICAgKgorICAgICAqICBAcGFyYW0gIF9fbyAgT2Zmc2V0IGluIGFycmF5IG9mIGZpcnN0IGVsZW1lbnQuCisgICAgICogIEBwYXJhbSAgX19kICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gc2xpY2UuCisgICAgICogIEBwYXJhbSAgX19zICBTdHJpZGUgYmV0d2VlbiBhcnJheSBlbGVtZW50cy4KKyAgICAgKi8KKyAgICBzbGljZShzaXplX3QgX19vLCBzaXplX3QgX19kLCBzaXplX3QgX19zKTsKKworICAgIC8vLyAgUmV0dXJuIGFycmF5IG9mZnNldCBvZiBmaXJzdCBzbGljZSBlbGVtZW50LgorICAgIHNpemVfdCBzdGFydCgpIGNvbnN0OworICAgIC8vLyAgUmV0dXJuIHNpemUgb2Ygc2xpY2UuCisgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKKyAgICAvLy8gIFJldHVybiBhcnJheSBzdHJpZGUgb2Ygc2xpY2UuCisgICAgc2l6ZV90IHN0cmlkZSgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgc2l6ZV90IF9NX29mZjsgICAgICAgICAgICAgICAgICAgICAgLy8gb2Zmc2V0CisgICAgc2l6ZV90IF9NX3N6OwkJCS8vIHNpemUKKyAgICBzaXplX3QgX01fc3Q7CQkJLy8gc3RyaWRlIHVuaXQKKyAgfTsKKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIDU0My4gdmFsYXJyYXkgc2xpY2UgZGVmYXVsdCBjb25zdHJ1Y3RvcgorICBpbmxpbmUKKyAgc2xpY2U6OnNsaWNlKCkgCisgIDogX01fb2ZmKDApLCBfTV9zeigwKSwgX01fc3QoMCkge30KKworICBpbmxpbmUKKyAgc2xpY2U6OnNsaWNlKHNpemVfdCBfX28sIHNpemVfdCBfX2QsIHNpemVfdCBfX3MpCisgIDogX01fb2ZmKF9fbyksIF9NX3N6KF9fZCksIF9NX3N0KF9fcykge30KKworICBpbmxpbmUgc2l6ZV90CisgIHNsaWNlOjpzdGFydCgpIGNvbnN0CisgIHsgcmV0dXJuIF9NX29mZjsgfQorCisgIGlubGluZSBzaXplX3QKKyAgc2xpY2U6OnNpemUoKSBjb25zdAorICB7IHJldHVybiBfTV9zejsgfQorCisgIGlubGluZSBzaXplX3QKKyAgc2xpY2U6OnN0cmlkZSgpIGNvbnN0CisgIHsgcmV0dXJuIF9NX3N0OyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJlZmVyZW5jZSB0byBvbmUtZGltZW5zaW9uYWwgc3Vic2V0IG9mIGFuIGFycmF5LgorICAgKgorICAgKiAgQSBzbGljZV9hcnJheSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgYWN0dWFsIGVsZW1lbnRzIG9mIGFuIGFycmF5CisgICAqICBzcGVjaWZpZWQgYnkgYSBzbGljZS4gIFRoZSB3YXkgdG8gZ2V0IGEgc2xpY2VfYXJyYXkgaXMgdG8gY2FsbAorICAgKiAgb3BlcmF0b3JbXShzbGljZSkgb24gYSB2YWxhcnJheS4gIFRoZSByZXR1cm5lZCBzbGljZV9hcnJheSB0aGVuIHBlcm1pdHMKKyAgICogIGNhcnJ5aW5nIG9wZXJhdGlvbnMgb3V0IG9uIHRoZSByZWZlcmVuY2VkIHN1YnNldCBvZiBlbGVtZW50cyBpbiB0aGUKKyAgICogIG9yaWdpbmFsIHZhbGFycmF5LiAgRm9yIGV4YW1wbGUsIG9wZXJhdG9yKz0odmFsYXJyYXkpIHdpbGwgYWRkIHZhbHVlcworICAgKiAgdG8gdGhlIHN1YnNldCBvZiBlbGVtZW50cyBpbiB0aGUgdW5kZXJseWluZyB2YWxhcnJheSB0aGlzIHNsaWNlX2FycmF5CisgICAqICByZWZlcnMgdG8uCisgICAqCisgICAqICBAcGFyYW0gIFRwICBFbGVtZW50IHR5cGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgc2xpY2VfYXJyYXkKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjUzLiB2YWxhcnJheSBoZWxwZXIgZnVuY3Rpb25zIGFyZSBhbG1vc3QgZW50aXJlbHkgdXNlbGVzcworCisgICAgICAvLy8gIENvcHkgY29uc3RydWN0b3IuICBCb3RoIHNsaWNlcyByZWZlciB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGFycmF5LgorICAgICAgc2xpY2VfYXJyYXkoY29uc3Qgc2xpY2VfYXJyYXkmKTsKKworICAgICAgLy8vICBBc3NpZ25tZW50IG9wZXJhdG9yLiAgQXNzaWducyBzbGljZSBlbGVtZW50cyB0byBjb3JyZXNwb25kaW5nCisgICAgICAvLy8gIGVsZW1lbnRzIG9mIEBhIGEuCisgICAgICBzbGljZV9hcnJheSYgb3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5Jik7CisKKyAgICAgIC8vLyAgQXNzaWduIHNsaWNlIGVsZW1lbnRzIHRvIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTXVsdGlwbHkgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcio9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgRGl2aWRlIHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3IvPShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIE1vZHVsbyBzbGljZSBlbGVtZW50cyBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2b2lkIG9wZXJhdG9yJT0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBBZGQgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IHRvIHNsaWNlIGVsZW1lbnRzLgorICAgICAgdm9pZCBvcGVyYXRvcis9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgU3VidHJhY3QgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IGZyb20gc2xpY2UgZWxlbWVudHMuCisgICAgICB2b2lkIG9wZXJhdG9yLT0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBMb2dpY2FsIHhvciBzbGljZSBlbGVtZW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3JePShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExvZ2ljYWwgYW5kIHNsaWNlIGVsZW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvciY9KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKKyAgICAgIC8vLyAgTG9naWNhbCBvciBzbGljZSBlbGVtZW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3J8PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIExlZnQgc2hpZnQgc2xpY2UgZWxlbWVudHMgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CisgICAgICAvLy8gIFJpZ2h0IHNoaWZ0IHNsaWNlIGVsZW1lbnRzIGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZvaWQgb3BlcmF0b3I+Pj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OworICAgICAgLy8vICBBc3NpZ24gYWxsIHNsaWNlIGVsZW1lbnRzIHRvIEBhIHQuCisgICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVHAgJikgY29uc3Q7CisgICAgICAvLyAgICAgICAgfnNsaWNlX2FycmF5ICgpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3IqPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3IvPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3IlPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3IrPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3ItPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3JePShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3ImPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3J8PShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZvaWQgb3BlcmF0b3I8PD0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2b2lkIG9wZXJhdG9yPj49KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICBmcmllbmQgY2xhc3MgdmFsYXJyYXk8X1RwPjsKKyAgICAgIHNsaWNlX2FycmF5KF9BcnJheTxfVHA+LCBjb25zdCBzbGljZSYpOworCisgICAgICBjb25zdCBzaXplX3QgICAgICBfTV9zejsKKyAgICAgIGNvbnN0IHNpemVfdCAgICAgIF9NX3N0cmlkZTsKKyAgICAgIGNvbnN0IF9BcnJheTxfVHA+IF9NX2FycmF5OworCisgICAgICAvLyBub3QgaW1wbGVtZW50ZWQKKyAgICAgIHNsaWNlX2FycmF5KCk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgc2xpY2VfYXJyYXk8X1RwPjo6c2xpY2VfYXJyYXkoX0FycmF5PF9UcD4gX19hLCBjb25zdCBzbGljZSYgX19zKQorICAgIDogX01fc3ooX19zLnNpemUoKSksIF9NX3N0cmlkZShfX3Muc3RyaWRlKCkpLAorICAgICAgX01fYXJyYXkoX19hLmJlZ2luKCkgKyBfX3Muc3RhcnQoKSkge30KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgc2xpY2VfYXJyYXk8X1RwPjo6c2xpY2VfYXJyYXkoY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgYSkKKyAgICA6IF9NX3N6KGEuX01fc3opLCBfTV9zdHJpZGUoYS5fTV9zdHJpZGUpLCBfTV9hcnJheShhLl9NX2FycmF5KSB7fQorCisgIC8vICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgLy8gICAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD46On5zbGljZV9hcnJheSAoKSB7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc2xpY2VfYXJyYXk8X1RwPiYKKyAgICBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgX19hKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5KF9fYS5fTV9hcnJheSwgX19hLl9NX3N6LCBfX2EuX01fc3RyaWRlLAorCQkJICAgX01fYXJyYXksIF9NX3N0cmlkZSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9maWxsKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+KF9fdiksIF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9fZSwgX01fc3osIF9NX2FycmF5LCBfTV9zdHJpZGUpOyB9CisKKyN1bmRlZiBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SCisjZGVmaW5lIF9ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoX09wLF9OYW1lKQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCQkJCQlcCisgICAgaW5saW5lIHZvaWQJCQkJCQkJCVwKKyAgICBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciBfT3AjIz0oY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdAlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4oX192KSk7XAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4JCQkJICAgICAgICAgICAgICAgIFwKKyAgICAgIGlubGluZSB2b2lkCQkJCQkJCVwKKyAgICAgIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIF9PcCMjPShjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3RcCisgICAgICB7CQkJCQkJCQkJXAorCSAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9NX2FycmF5LCBfTV9zdHJpZGUsIF9fZSwgX01fc3opOwlcCisgICAgICB9CisKKworX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigqLCBfX211bHRpcGxpZXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKC8sIF9fZGl2aWRlcykKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoJSwgX19tb2R1bHVzKQorX0RFRklORV9WQUxBUlJBWV9PUEVSQVRPUigrLCBfX3BsdXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKC0sIF9fbWludXMpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKF4sIF9fYml0d2lzZV94b3IpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKCYsIF9fYml0d2lzZV9hbmQpCitfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SKHwsIF9fYml0d2lzZV9vcikKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoPDwsIF9fc2hpZnRfbGVmdCkKK19ERUZJTkVfVkFMQVJSQVlfT1BFUkFUT1IoPj4sIF9fc2hpZnRfcmlnaHQpCisKKyN1bmRlZiBfREVGSU5FX1ZBTEFSUkFZX09QRVJBVE9SCisKKyAgLy8gQH0gZ3JvdXAgbnVtZXJpY19hcnJheXMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX1NMSUNFX0FSUkFZX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zc3RyZWFtLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zc3RyZWFtLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODNiNGZmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3NzdHJlYW0udGNjCkBAIC0wLDAgKzEsMjg4IEBACisvLyBTdHJpbmcgYmFzZWQgc3RyZWFtcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9zc3RyZWFtLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3NzdHJlYW19CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjcgIFN0cmluZy1iYXNlZCBzdHJlYW1zCisvLworCisjaWZuZGVmIF9TU1RSRUFNX1RDQworI2RlZmluZSBfU1NUUkVBTV9UQ0MgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6aW50X3R5cGUKKyAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jKQorICAgIHsKKyAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOworICAgICAgaWYgKHRoaXMtPmViYWNrKCkgPCB0aGlzLT5ncHRyKCkpCisJeworCSAgLy8gVHJ5IHRvIHB1dCBiYWNrIF9fYyBpbnRvIGlucHV0IHNlcXVlbmNlIGluIG9uZSBvZiB0aHJlZSB3YXlzLgorCSAgLy8gT3JkZXIgdGhlc2UgdGVzdHMgZG9uZSBpbiBpcyB1bnNwZWNpZmllZCBieSB0aGUgc3RhbmRhcmQuCisJICBjb25zdCBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fcmV0KTsKKwkgIGlmICghX190ZXN0ZW9mKQorCSAgICB7CisJICAgICAgY29uc3QgYm9vbCBfX3Rlc3RlcSA9IHRyYWl0c190eXBlOjplcSh0cmFpdHNfdHlwZTo6CisJCQkJCQkgICAgdG9fY2hhcl90eXBlKF9fYyksCisJCQkJCQkgICAgdGhpcy0+Z3B0cigpWy0xXSk7CSAgCisJICAgICAgY29uc3QgYm9vbCBfX3Rlc3RvdXQgPSB0aGlzLT5fTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKKwkgICAgICBpZiAoX190ZXN0ZXEgfHwgX190ZXN0b3V0KQorCQl7CisJCSAgdGhpcy0+Z2J1bXAoLTEpOworCQkgIGlmICghX190ZXN0ZXEpCisJCSAgICAqdGhpcy0+Z3B0cigpID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworCQkgIF9fcmV0ID0gX19jOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHRoaXMtPmdidW1wKC0xKTsKKwkgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjppbnRfdHlwZQorICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIG92ZXJmbG93KGludF90eXBlIF9fYykKKyAgICB7CisgICAgICBjb25zdCBib29sIF9fdGVzdG91dCA9IHRoaXMtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OworICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoIV9fdGVzdG91dCwgZmFsc2UpKQorCXJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CisKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKTsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fdGVzdGVvZiwgZmFsc2UpKQorCXJldHVybiB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOworCisgICAgICBjb25zdCBfX3NpemVfdHlwZSBfX2NhcGFjaXR5ID0gX01fc3RyaW5nLmNhcGFjaXR5KCk7CisgICAgICBjb25zdCBfX3NpemVfdHlwZSBfX21heF9zaXplID0gX01fc3RyaW5nLm1heF9zaXplKCk7CisgICAgICBjb25zdCBib29sIF9fdGVzdHB1dCA9IHRoaXMtPnBwdHIoKSA8IHRoaXMtPmVwcHRyKCk7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCghX190ZXN0cHV0ICYmIF9fY2FwYWNpdHkgPT0gX19tYXhfc2l6ZSwgZmFsc2UpKQorCXJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CisKKyAgICAgIC8vIFRyeSB0byBhcHBlbmQgX19jIGludG8gb3V0cHV0IHNlcXVlbmNlIGluIG9uZSBvZiB0d28gd2F5cy4KKyAgICAgIC8vIE9yZGVyIHRoZXNlIHRlc3RzIGRvbmUgaW4gaXMgdW5zcGVjaWZpZWQgYnkgdGhlIHN0YW5kYXJkLgorICAgICAgY29uc3QgY2hhcl90eXBlIF9fY29udiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKKyAgICAgIGlmICghX190ZXN0cHV0KQorCXsKKwkgIC8vIE5COiBTdGFydCBvc3RyaW5nc3RyZWFtIGJ1ZmZlcnMgYXQgNTEyIGNoYXJzLiAgVGhpcyBpcyBhbgorCSAgLy8gZXhwZXJpbWVudGFsIHZhbHVlIChwcm9ub3VuY2VkICJhcmJpdHJhcnkiIGluIHNvbWUgb2YgdGhlCisJICAvLyBoaXBwZXIgRW5nbGlzaC1zcGVha2luZyBjb3VudHJpZXMpLCBhbmQgY2FuIGJlIGNoYW5nZWQgdG8KKwkgIC8vIHN1aXQgcGFydGljdWxhciBuZWVkcy4KKwkgIC8vCisJICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAvLyAxNjkuIEJhZCBlZmZpY2llbmN5IG9mIG92ZXJmbG93KCkgbWFuZGF0ZWQKKwkgIC8vIDQzMi4gc3RyaW5nYnVmOjpvdmVyZmxvdygpIG1ha2VzIG9ubHkgb25lIHdyaXRlIHBvc2l0aW9uCisJICAvLyAgICAgIGF2YWlsYWJsZQorCSAgY29uc3QgX19zaXplX3R5cGUgX19vcHRfbGVuID0gc3RkOjptYXgoX19zaXplX3R5cGUoMiAqIF9fY2FwYWNpdHkpLAorCQkJCQkJIF9fc2l6ZV90eXBlKDUxMikpOworCSAgY29uc3QgX19zaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX29wdF9sZW4sIF9fbWF4X3NpemUpOworCSAgX19zdHJpbmdfdHlwZSBfX3RtcDsKKwkgIF9fdG1wLnJlc2VydmUoX19sZW4pOworCSAgaWYgKHRoaXMtPnBiYXNlKCkpCisJICAgIF9fdG1wLmFzc2lnbih0aGlzLT5wYmFzZSgpLCB0aGlzLT5lcHB0cigpIC0gdGhpcy0+cGJhc2UoKSk7CisJICBfX3RtcC5wdXNoX2JhY2soX19jb252KTsKKwkgIF9NX3N0cmluZy5zd2FwKF9fdG1wKTsKKwkgIF9NX3N5bmMoY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfTV9zdHJpbmcuZGF0YSgpKSwKKwkJICB0aGlzLT5ncHRyKCkgLSB0aGlzLT5lYmFjaygpLCB0aGlzLT5wcHRyKCkgLSB0aGlzLT5wYmFzZSgpKTsKKwl9CisgICAgICBlbHNlCisJKnRoaXMtPnBwdHIoKSA9IF9fY29udjsKKyAgICAgIHRoaXMtPnBidW1wKDEpOworICAgICAgcmV0dXJuIF9fYzsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmludF90eXBlCisgICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgdW5kZXJmbG93KCkKKyAgICB7CisgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSB0aGlzLT5fTV9tb2RlICYgaW9zX2Jhc2U6OmluOworICAgICAgaWYgKF9fdGVzdGluKQorCXsKKwkgIC8vIFVwZGF0ZSBlZ3B0cigpIHRvIG1hdGNoIHRoZSBhY3R1YWwgc3RyaW5nIGVuZC4KKwkgIF9NX3VwZGF0ZV9lZ3B0cigpOworCisJICBpZiAodGhpcy0+Z3B0cigpIDwgdGhpcy0+ZWdwdHIoKSkKKwkgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cG9zX3R5cGUKKyAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKKyAgICB7CisgICAgICBwb3NfdHlwZSBfX3JldCA9ICBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOworICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6aW4gJiB0aGlzLT5fTV9tb2RlICYgX19tb2RlKSAhPSAwOworICAgICAgYm9vbCBfX3Rlc3RvdXQgPSAoaW9zX2Jhc2U6Om91dCAmIHRoaXMtPl9NX21vZGUgJiBfX21vZGUpICE9IDA7CisgICAgICBjb25zdCBib29sIF9fdGVzdGJvdGggPSBfX3Rlc3RpbiAmJiBfX3Rlc3RvdXQgJiYgX193YXkgIT0gaW9zX2Jhc2U6OmN1cjsKKyAgICAgIF9fdGVzdGluICY9ICEoX19tb2RlICYgaW9zX2Jhc2U6Om91dCk7CisgICAgICBfX3Rlc3RvdXQgJj0gIShfX21vZGUgJiBpb3NfYmFzZTo6aW4pOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0NTMuIGJhc2ljX3N0cmluZ2J1Zjo6c2Vla29mZiBuZWVkIG5vdCBhbHdheXMgZmFpbCBmb3IgYW4gZW1wdHkgc3RyZWFtLgorICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fdGVzdGluID8gdGhpcy0+ZWJhY2soKSA6IHRoaXMtPnBiYXNlKCk7CisgICAgICBpZiAoKF9fYmVnIHx8ICFfX29mZikgJiYgKF9fdGVzdGluIHx8IF9fdGVzdG91dCB8fCBfX3Rlc3Rib3RoKSkKKwl7CisJICBfTV91cGRhdGVfZWdwdHIoKTsKKworCSAgb2ZmX3R5cGUgX19uZXdvZmZpID0gX19vZmY7CisJICBvZmZfdHlwZSBfX25ld29mZm8gPSBfX25ld29mZmk7CisJICBpZiAoX193YXkgPT0gaW9zX2Jhc2U6OmN1cikKKwkgICAgeworCSAgICAgIF9fbmV3b2ZmaSArPSB0aGlzLT5ncHRyKCkgLSBfX2JlZzsKKwkgICAgICBfX25ld29mZm8gKz0gdGhpcy0+cHB0cigpIC0gX19iZWc7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9fd2F5ID09IGlvc19iYXNlOjplbmQpCisJICAgIF9fbmV3b2ZmbyA9IF9fbmV3b2ZmaSArPSB0aGlzLT5lZ3B0cigpIC0gX19iZWc7CisKKwkgIGlmICgoX190ZXN0aW4gfHwgX190ZXN0Ym90aCkKKwkgICAgICAmJiBfX25ld29mZmkgPj0gMAorCSAgICAgICYmIHRoaXMtPmVncHRyKCkgLSBfX2JlZyA+PSBfX25ld29mZmkpCisJICAgIHsKKwkgICAgICB0aGlzLT5zZXRnKHRoaXMtPmViYWNrKCksIHRoaXMtPmViYWNrKCkgKyBfX25ld29mZmksCisJCQkgdGhpcy0+ZWdwdHIoKSk7CisJICAgICAgX19yZXQgPSBwb3NfdHlwZShfX25ld29mZmkpOworCSAgICB9CisJICBpZiAoKF9fdGVzdG91dCB8fCBfX3Rlc3Rib3RoKQorCSAgICAgICYmIF9fbmV3b2ZmbyA+PSAwCisJICAgICAgJiYgdGhpcy0+ZWdwdHIoKSAtIF9fYmVnID49IF9fbmV3b2ZmbykKKwkgICAgeworCSAgICAgIF9NX3BidW1wKHRoaXMtPnBiYXNlKCksIHRoaXMtPmVwcHRyKCksIF9fbmV3b2Zmbyk7CisJICAgICAgX19yZXQgPSBwb3NfdHlwZShfX25ld29mZm8pOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cG9zX3R5cGUKKyAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBzZWVrcG9zKHBvc190eXBlIF9fc3AsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUpCisgICAgeworICAgICAgcG9zX3R5cGUgX19yZXQgPSAgcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSAoaW9zX2Jhc2U6OmluICYgdGhpcy0+X01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0b3V0ID0gKGlvc19iYXNlOjpvdXQgJiB0aGlzLT5fTV9tb2RlICYgX19tb2RlKSAhPSAwOworCisgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX190ZXN0aW4gPyB0aGlzLT5lYmFjaygpIDogdGhpcy0+cGJhc2UoKTsKKyAgICAgIGlmICgoX19iZWcgfHwgIW9mZl90eXBlKF9fc3ApKSAmJiAoX190ZXN0aW4gfHwgX190ZXN0b3V0KSkKKwl7CisJICBfTV91cGRhdGVfZWdwdHIoKTsKKworCSAgY29uc3Qgb2ZmX3R5cGUgX19wb3MoX19zcCk7CisJICBjb25zdCBib29sIF9fdGVzdHBvcyA9ICgwIDw9IF9fcG9zCisJCQkJICAmJiBfX3BvcyA8PSB0aGlzLT5lZ3B0cigpIC0gX19iZWcpOworCSAgaWYgKF9fdGVzdHBvcykKKwkgICAgeworCSAgICAgIGlmIChfX3Rlc3RpbikKKwkJdGhpcy0+c2V0Zyh0aGlzLT5lYmFjaygpLCB0aGlzLT5lYmFjaygpICsgX19wb3MsCisJCQkgICB0aGlzLT5lZ3B0cigpKTsKKwkgICAgICBpZiAoX190ZXN0b3V0KQorCQlfTV9wYnVtcCh0aGlzLT5wYmFzZSgpLCB0aGlzLT5lcHB0cigpLCBfX3Bvcyk7CisJICAgICAgX19yZXQgPSBfX3NwOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX3N5bmMoY2hhcl90eXBlKiBfX2Jhc2UsIF9fc2l6ZV90eXBlIF9faSwgX19zaXplX3R5cGUgX19vKQorICAgIHsKKyAgICAgIGNvbnN0IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOworICAgICAgY29uc3QgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKKyAgICAgIGNoYXJfdHlwZSogX19lbmRnID0gX19iYXNlICsgX01fc3RyaW5nLnNpemUoKTsKKyAgICAgIGNoYXJfdHlwZSogX19lbmRwID0gX19iYXNlICsgX01fc3RyaW5nLmNhcGFjaXR5KCk7CisKKyAgICAgIGlmIChfX2Jhc2UgIT0gX01fc3RyaW5nLmRhdGEoKSkKKwl7CisJICAvLyBzZXRidWY6IF9faSA9PSBzaXplIG9mIGJ1ZmZlciBhcmVhIChfTV9zdHJpbmcuc2l6ZSgpID09IDApLgorCSAgX19lbmRnICs9IF9faTsKKwkgIF9faSA9IDA7CisJICBfX2VuZHAgPSBfX2VuZGc7CisJfQorCisgICAgICBpZiAoX190ZXN0aW4pCisJdGhpcy0+c2V0ZyhfX2Jhc2UsIF9fYmFzZSArIF9faSwgX19lbmRnKTsKKyAgICAgIGlmIChfX3Rlc3RvdXQpCisJeworCSAgX01fcGJ1bXAoX19iYXNlLCBfX2VuZHAsIF9fbyk7CisJICAvLyBlZ3B0cigpIGFsd2F5cyB0cmFja3MgdGhlIHN0cmluZyBlbmQuICBXaGVuICFfX3Rlc3RpbiwKKwkgIC8vIGZvciB0aGUgY29ycmVjdCBmdW5jdGlvbmluZyBvZiB0aGUgc3RyZWFtYnVmIGlubGluZXMKKwkgIC8vIHRoZSBvdGhlciBnZXQgYXJlYSBwb2ludGVycyBhcmUgaWRlbnRpY2FsLgorCSAgaWYgKCFfX3Rlc3RpbikKKwkgICAgdGhpcy0+c2V0ZyhfX2VuZGcsIF9fZW5kZywgX19lbmRnKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fcGJ1bXAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kLCBvZmZfdHlwZSBfX29mZikKKyAgICB7CisgICAgICB0aGlzLT5zZXRwKF9fcGJlZywgX19wZW5kKTsKKyAgICAgIHdoaWxlIChfX29mZiA+IF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21heCkKKwl7CisJICB0aGlzLT5wYnVtcChfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8aW50Pjo6X19tYXgpOworCSAgX19vZmYgLT0gX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGludD46Ol9fbWF4OworCX0KKyAgICAgIHRoaXMtPnBidW1wKF9fb2ZmKTsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdidWY8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPjsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD47CisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PjsKKyAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PjsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9hbGdvLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX2FsZ28uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmE3MTMzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9hbGdvLmgKQEAgLTAsMCArMSw2MzI0IEBACisvLyBBbGdvcml0aG0gaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiaXRzL3N0bF9hbGdvLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXthbGdvcml0aG19CisgKi8KKworI2lmbmRlZiBfU1RMX0FMR09fSAorI2RlZmluZSBfU1RMX0FMR09fSCAxCisKKyNpbmNsdWRlIDxjc3RkbGliPiAgICAgICAgICAgICAvLyBmb3IgcmFuZAorI2luY2x1ZGUgPGJpdHMvYWxnb3JpdGhtZndkLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaGVhcC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3RlbXBidWYuaD4gIC8vIGZvciBfVGVtcG9yYXJ5X2J1ZmZlcgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPHJhbmRvbT4gICAgIC8vIGZvciBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+IC8vIGZvciBzdGQ6OmJpbmQKKyNlbmRpZgorCisvLyBTZWUgY29uY2VwdF9jaGVjay5oIGZvciB0aGUgX19nbGliY3h4XypfcmVxdWlyZXMgbWFjcm9zLgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8vIFN3YXBzIHRoZSBtZWRpYW4gdmFsdWUgb2YgKl9fYSwgKl9fYiBhbmQgKl9fYyB0byAqX19yZXN1bHQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX21vdmVfbWVkaWFuX3RvX2ZpcnN0KF9JdGVyYXRvciBfX3Jlc3VsdCwgX0l0ZXJhdG9yIF9fYSwKKwkJCSAgIF9JdGVyYXRvciBfX2IsIF9JdGVyYXRvciBfX2MpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICBpZiAoKl9fYSA8ICpfX2IpCisJeworCSAgaWYgKCpfX2IgPCAqX19jKQorCSAgICBzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19iKTsKKwkgIGVsc2UgaWYgKCpfX2EgPCAqX19jKQorCSAgICBzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19jKTsKKwkgIGVsc2UKKwkgICAgc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYSk7CisJfQorICAgICAgZWxzZSBpZiAoKl9fYSA8ICpfX2MpCisgICAgICAJc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYSk7CisgICAgICBlbHNlIGlmICgqX19iIDwgKl9fYykKKwlzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19jKTsKKyAgICAgIGVsc2UKKwlzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19iKTsKKyAgICB9CisKKyAgLy8vIFN3YXBzIHRoZSBtZWRpYW4gdmFsdWUgb2YgKl9fYSwgKl9fYiBhbmQgKl9fYyB1bmRlciBfX2NvbXAgdG8gKl9fcmVzdWx0CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fbW92ZV9tZWRpYW5fdG9fZmlyc3QoX0l0ZXJhdG9yIF9fcmVzdWx0LCBfSXRlcmF0b3IgX19hLAorCQkJICAgX0l0ZXJhdG9yIF9fYiwgX0l0ZXJhdG9yIF9fYywKKwkJCSAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlGdW5jdGlvbkNvbmNlcHQ8X0NvbXBhcmUsIGJvb2wsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisKKyAgICAgIGlmIChfX2NvbXAoKl9fYSwgKl9fYikpCisJeworCSAgaWYgKF9fY29tcCgqX19iLCAqX19jKSkKKwkgICAgc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYik7CisJICBlbHNlIGlmIChfX2NvbXAoKl9fYSwgKl9fYykpCisJICAgIHN0ZDo6aXRlcl9zd2FwKF9fcmVzdWx0LCBfX2MpOworCSAgZWxzZQorCSAgICBzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19hKTsKKwl9CisgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fYSwgKl9fYykpCisJc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYSk7CisgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fYiwgKl9fYykpCisJc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYyk7CisgICAgICBlbHNlCisJc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYik7CisgICAgfQorCisgIC8vIGZvcl9lYWNoCisKKyAgLy8vIFRoaXMgaXMgYW4gb3ZlcmxvYWQgdXNlZCBieSBmaW5kKCkgZm9yIHRoZSBJbnB1dCBJdGVyYXRvciBjYXNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfSW5wdXRJdGVyYXRvcgorICAgIF9fZmluZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgY29uc3QgX1RwJiBfX3ZhbCwgaW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkKKwkrK19fZmlyc3Q7CisgICAgICByZXR1cm4gX19maXJzdDsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYW4gb3ZlcmxvYWQgdXNlZCBieSBmaW5kX2lmKCkgZm9yIHRoZSBJbnB1dCBJdGVyYXRvciBjYXNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0lucHV0SXRlcmF0b3IKKyAgICBfX2ZpbmRfaWYoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBpbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFib29sKF9fcHJlZCgqX19maXJzdCkpKQorCSsrX19maXJzdDsKKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvLy8gVGhpcyBpcyBhbiBvdmVybG9hZCB1c2VkIGJ5IGZpbmQoKSBmb3IgdGhlIFJBSSBjYXNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX2ZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgY29uc3QgX1RwJiBfX3ZhbCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9fdHJpcF9jb3VudCA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOworCisgICAgICBmb3IgKDsgX190cmlwX2NvdW50ID4gMDsgLS1fX3RyaXBfY291bnQpCisJeworCSAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKworCSAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKworCSAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKworCSAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKwl9CisKKyAgICAgIHN3aXRjaCAoX19sYXN0IC0gX19maXJzdCkKKwl7CisJY2FzZSAzOgorCSAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKwljYXNlIDI6CisJICBpZiAoKl9fZmlyc3QgPT0gX192YWwpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCWNhc2UgMToKKwkgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJICByZXR1cm4gX19sYXN0OworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYW4gb3ZlcmxvYWQgdXNlZCBieSBmaW5kX2lmKCkgZm9yIHRoZSBSQUkgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIF9fZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9fdHJpcF9jb3VudCA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOworCisgICAgICBmb3IgKDsgX190cmlwX2NvdW50ID4gMDsgLS1fX3RyaXBfY291bnQpCisJeworCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisKKwkgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKworCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCX0KKworICAgICAgc3dpdGNoIChfX2xhc3QgLSBfX2ZpcnN0KQorCXsKKwljYXNlIDM6CisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJY2FzZSAyOgorCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCWNhc2UgMToKKwkgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkgIHJldHVybiBfX2xhc3Q7CisJfQorICAgIH0KKworICAvLy8gVGhpcyBpcyBhbiBvdmVybG9hZCB1c2VkIGJ5IGZpbmRfaWZfbm90KCkgZm9yIHRoZSBJbnB1dCBJdGVyYXRvciBjYXNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0lucHV0SXRlcmF0b3IKKyAgICBfX2ZpbmRfaWZfbm90KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfUHJlZGljYXRlIF9fcHJlZCwgaW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiBib29sKF9fcHJlZCgqX19maXJzdCkpKQorCSsrX19maXJzdDsKKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvLy8gVGhpcyBpcyBhbiBvdmVybG9hZCB1c2VkIGJ5IGZpbmRfaWZfbm90KCkgZm9yIHRoZSBSQUkgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIF9fZmluZF9pZl9ub3QoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCSAgX1ByZWRpY2F0ZSBfX3ByZWQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfX3RyaXBfY291bnQgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKKworICAgICAgZm9yICg7IF9fdHJpcF9jb3VudCA+IDA7IC0tX190cmlwX2NvdW50KQorCXsKKwkgIGlmICghYm9vbChfX3ByZWQoKl9fZmlyc3QpKSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisKKwkgIGlmICghYm9vbChfX3ByZWQoKl9fZmlyc3QpKSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisKKwkgIGlmICghYm9vbChfX3ByZWQoKl9fZmlyc3QpKSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisKKwkgIGlmICghYm9vbChfX3ByZWQoKl9fZmlyc3QpKSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJfQorCisgICAgICBzd2l0Y2ggKF9fbGFzdCAtIF9fZmlyc3QpCisJeworCWNhc2UgMzoKKwkgIGlmICghYm9vbChfX3ByZWQoKl9fZmlyc3QpKSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJY2FzZSAyOgorCSAgaWYgKCFib29sKF9fcHJlZCgqX19maXJzdCkpKQorCSAgICByZXR1cm4gX19maXJzdDsKKwkgICsrX19maXJzdDsKKwljYXNlIDE6CisJICBpZiAoIWJvb2woX19wcmVkKCpfX2ZpcnN0KSkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgKytfX2ZpcnN0OworCWNhc2UgMDoKKwlkZWZhdWx0OgorCSAgcmV0dXJuIF9fbGFzdDsKKwl9CisgICAgfQorCisgIC8vLyBQcm92aWRlZCBmb3Igc3RhYmxlX3BhcnRpdGlvbiB0byB1c2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfSW5wdXRJdGVyYXRvcgorICAgIF9fZmluZF9pZl9ub3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIHJldHVybiBzdGQ6Ol9fZmluZF9pZl9ub3QoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisJCQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgLy8vIExpa2UgZmluZF9pZl9ub3QoKSwgYnV0IHVzZXMgYW5kIHVwZGF0ZXMgYSBjb3VudCBvZiB0aGUKKyAgLy8vIHJlbWFpbmluZyByYW5nZSBsZW5ndGggaW5zdGVhZCBvZiBjb21wYXJpbmcgYWdhaW5zdCBhbiBlbmQKKyAgLy8vIGl0ZXJhdG9yLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIF9JbnB1dEl0ZXJhdG9yCisgICAgX19maW5kX2lmX25vdF9uKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSYgX19sZW4sIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIGZvciAoOyBfX2xlbjsgLS1fX2xlbiwgKytfX2ZpcnN0KQorCWlmICghYm9vbChfX3ByZWQoKl9fZmlyc3QpKSkKKwkgIGJyZWFrOworICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisgIC8vIHNldF9kaWZmZXJlbmNlCisgIC8vIHNldF9pbnRlcnNlY3Rpb24KKyAgLy8gc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlCisgIC8vIHNldF91bmlvbgorICAvLyBmb3JfZWFjaAorICAvLyBmaW5kCisgIC8vIGZpbmRfaWYKKyAgLy8gZmluZF9maXJzdF9vZgorICAvLyBhZGphY2VudF9maW5kCisgIC8vIGNvdW50CisgIC8vIGNvdW50X2lmCisgIC8vIHNlYXJjaAorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZAorICAgKiAgc2VhcmNoX24oX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX0ludGVnZXIsIGNvbnN0IF9UcCYpCisgICAqICBvdmVybG9hZGVkIGZvciBmb3J3YXJkIGl0ZXJhdG9ycy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX19zZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAorCSAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfQTo6ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCSAgICBfX24gPSBfX2NvdW50OworCSAgX0ZvcndhcmRJdGVyYXRvciBfX2kgPSBfX2ZpcnN0OworCSAgKytfX2k7CisJICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMSAmJiAqX19pID09IF9fdmFsKQorCSAgICB7CisJICAgICAgKytfX2k7CisJICAgICAgLS1fX247CisJICAgIH0KKwkgIGlmIChfX24gPT0gMSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBpZiAoX19pID09IF9fbGFzdCkKKwkgICAgcmV0dXJuIF9fbGFzdDsKKwkgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfQTo6ZmluZCgrK19faSwgX19sYXN0LCBfX3ZhbCk7CisJfQorICAgICAgcmV0dXJuIF9fbGFzdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkCisgICAqICBzZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfSW50ZWdlciwgY29uc3QgX1RwJikKKyAgICogIG92ZXJsb2FkZWQgZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcgorICAgIF9fc2VhcmNoX24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAorCSAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLCAKKwkgICAgICAgc3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICBfRGlzdGFuY2VUeXBlIF9fdGFpbFNpemUgPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgICAgX0Rpc3RhbmNlVHlwZSBfX3JlbWFpbmRlciA9IF9fY291bnQ7CisKKyAgICAgIHdoaWxlIChfX3JlbWFpbmRlciA8PSBfX3RhaWxTaXplKSAvLyB0aGUgbWFpbiBsb29wLi4uCisJeworCSAgX19maXJzdCArPSBfX3JlbWFpbmRlcjsKKwkgIF9fdGFpbFNpemUgLT0gX19yZW1haW5kZXI7CisJICAvLyBfX2ZpcnN0IGhlcmUgaXMgYWx3YXlzIHBvaW50aW5nIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgb2YKKwkgIC8vIG5leHQgcG9zc2libGUgbWF0Y2guCisJICBfUmFuZG9tQWNjZXNzSXRlciBfX2JhY2tUcmFjayA9IF9fZmlyc3Q7IAorCSAgd2hpbGUgKCotLV9fYmFja1RyYWNrID09IF9fdmFsKQorCSAgICB7CisJICAgICAgaWYgKC0tX19yZW1haW5kZXIgPT0gMCkKKwkgICAgICAgIHJldHVybiAoX19maXJzdCAtIF9fY291bnQpOyAvLyBTdWNjZXNzCisJICAgIH0KKwkgIF9fcmVtYWluZGVyID0gX19jb3VudCArIDEgLSAoX19maXJzdCAtIF9fYmFja1RyYWNrKTsKKwl9CisgICAgICByZXR1cm4gX19sYXN0OyAvLyBGYWlsdXJlCisgICAgfQorCisgIC8vIHNlYXJjaF9uCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkCisgICAqICBzZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfSW50ZWdlciwgY29uc3QgX1RwJiwKKyAgICoJICAgICAgIF9CaW5hcnlQcmVkaWNhdGUpCisgICAqICBvdmVybG9hZGVkIGZvciBmb3J3YXJkIGl0ZXJhdG9ycy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX19zZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAorCSAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFib29sKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkpCisgICAgICAgICsrX19maXJzdDsKKworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJICAgIF9fbiA9IF9fY291bnQ7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7CisJICArK19faTsKKwkgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAxICYmIGJvb2woX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpKQorCSAgICB7CisJICAgICAgKytfX2k7CisJICAgICAgLS1fX247CisJICAgIH0KKwkgIGlmIChfX24gPT0gMSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBpZiAoX19pID09IF9fbGFzdCkKKwkgICAgcmV0dXJuIF9fbGFzdDsKKwkgIF9fZmlyc3QgPSArK19faTsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdAorCQkgJiYgIWJvb2woX19iaW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwpKSkKKwkgICAgKytfX2ZpcnN0OworCX0KKyAgICAgIHJldHVybiBfX2xhc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZAorICAgKiAgc2VhcmNoX24oX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX0ludGVnZXIsIGNvbnN0IF9UcCYsCisgICAqCSAgICAgICBfQmluYXJ5UHJlZGljYXRlKQorICAgKiAgb3ZlcmxvYWRlZCBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX1JhbmRvbUFjY2Vzc0l0ZXIKKyAgICBfX3NlYXJjaF9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKKwkgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKKwkgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLCBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIF9EaXN0YW5jZVR5cGUgX190YWlsU2l6ZSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBfRGlzdGFuY2VUeXBlIF9fcmVtYWluZGVyID0gX19jb3VudDsKKworICAgICAgd2hpbGUgKF9fcmVtYWluZGVyIDw9IF9fdGFpbFNpemUpIC8vIHRoZSBtYWluIGxvb3AuLi4KKwl7CisJICBfX2ZpcnN0ICs9IF9fcmVtYWluZGVyOworCSAgX190YWlsU2l6ZSAtPSBfX3JlbWFpbmRlcjsKKwkgIC8vIF9fZmlyc3QgaGVyZSBpcyBhbHdheXMgcG9pbnRpbmcgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCBvZgorCSAgLy8gbmV4dCBwb3NzaWJsZSBtYXRjaC4KKwkgIF9SYW5kb21BY2Nlc3NJdGVyIF9fYmFja1RyYWNrID0gX19maXJzdDsgCisJICB3aGlsZSAoX19iaW5hcnlfcHJlZCgqLS1fX2JhY2tUcmFjaywgX192YWwpKQorCSAgICB7CisJICAgICAgaWYgKC0tX19yZW1haW5kZXIgPT0gMCkKKwkgICAgICAgIHJldHVybiAoX19maXJzdCAtIF9fY291bnQpOyAvLyBTdWNjZXNzCisJICAgIH0KKwkgIF9fcmVtYWluZGVyID0gX19jb3VudCArIDEgLSAoX19maXJzdCAtIF9fYmFja1RyYWNrKTsKKwl9CisgICAgICByZXR1cm4gX19sYXN0OyAvLyBGYWlsdXJlCisgICAgfQorCisgIC8vIGZpbmRfZW5kIGZvciBmb3J3YXJkIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IxCisgICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIsCisJICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKKwlyZXR1cm4gX19sYXN0MTsKKyAgICAgIGVsc2UKKwl7CisJICBfRm9yd2FyZEl0ZXJhdG9yMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CisJICB3aGlsZSAoMSkKKwkgICAgeworCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbmV3X3Jlc3VsdAorCQk9IF9HTElCQ1hYX1NURF9BOjpzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKKwkgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCisJCXJldHVybiBfX3Jlc3VsdDsKKwkgICAgICBlbHNlCisJCXsKKwkJICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKKwkJICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKKwkJICArK19fZmlyc3QxOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IxCisgICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIsCisJICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKKwkgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCisgICAgeworICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCisJcmV0dXJuIF9fbGFzdDE7CisgICAgICBlbHNlCisJeworCSAgX0ZvcndhcmRJdGVyYXRvcjEgX19yZXN1bHQgPSBfX2xhc3QxOworCSAgd2hpbGUgKDEpCisJICAgIHsKKwkgICAgICBfRm9yd2FyZEl0ZXJhdG9yMSBfX25ld19yZXN1bHQKKwkJPSBfR0xJQkNYWF9TVERfQTo6c2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwKKwkJCQkJIF9fbGFzdDIsIF9fY29tcCk7CisJICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQorCQlyZXR1cm4gX19yZXN1bHQ7CisJICAgICAgZWxzZQorCQl7CisJCSAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CisJCSAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CisJCSAgKytfX2ZpcnN0MTsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKworICAvLyBmaW5kX2VuZCBmb3IgYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMgKG11Y2ggZmFzdGVyKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyPgorICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxCisgICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX2ZpcnN0MSwKKwkgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19maXJzdDIsCisJICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyIF9fbGFzdDIsCisJICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjI+KQorCisgICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcjE+IF9SZXZJdGVyYXRvcjE7CisgICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcjI+IF9SZXZJdGVyYXRvcjI7CisKKyAgICAgIF9SZXZJdGVyYXRvcjEgX19ybGFzdDEoX19maXJzdDEpOworICAgICAgX1Jldkl0ZXJhdG9yMiBfX3JsYXN0MihfX2ZpcnN0Mik7CisgICAgICBfUmV2SXRlcmF0b3IxIF9fcnJlc3VsdCA9IF9HTElCQ1hYX1NURF9BOjpzZWFyY2goX1Jldkl0ZXJhdG9yMShfX2xhc3QxKSwKKwkJCQkJCSAgICAgICBfX3JsYXN0MSwKKwkJCQkJCSAgICAgICBfUmV2SXRlcmF0b3IyKF9fbGFzdDIpLAorCQkJCQkJICAgICAgIF9fcmxhc3QyKTsKKworICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKKwlyZXR1cm4gX19sYXN0MTsKKyAgICAgIGVsc2UKKwl7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CisJICBzdGQ6OmFkdmFuY2UoX19yZXN1bHQsIC1zdGQ6OmRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMQorICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19maXJzdDEsCisJICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fbGFzdDEsCisJICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyIF9fZmlyc3QyLAorCSAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2xhc3QyLAorCSAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCisJICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMj4pCisKKyAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMT4gX1Jldkl0ZXJhdG9yMTsKKyAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMj4gX1Jldkl0ZXJhdG9yMjsKKworICAgICAgX1Jldkl0ZXJhdG9yMSBfX3JsYXN0MShfX2ZpcnN0MSk7CisgICAgICBfUmV2SXRlcmF0b3IyIF9fcmxhc3QyKF9fZmlyc3QyKTsKKyAgICAgIF9SZXZJdGVyYXRvcjEgX19ycmVzdWx0ID0gc3RkOjpzZWFyY2goX1Jldkl0ZXJhdG9yMShfX2xhc3QxKSwgX19ybGFzdDEsCisJCQkJCSAgICBfUmV2SXRlcmF0b3IyKF9fbGFzdDIpLCBfX3JsYXN0MiwKKwkJCQkJICAgIF9fY29tcCk7CisKKyAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCisJcmV0dXJuIF9fbGFzdDE7CisgICAgICBlbHNlCisJeworCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOworCSAgc3RkOjphZHZhbmNlKF9fcmVzdWx0LCAtc3RkOjpkaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBtYXRjaGluZyBzdWJzZXF1ZW5jZSBpbiBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIFN0YXJ0IG9mIHJhbmdlIHRvIHNlYXJjaC4KKyAgICogIEBwYXJhbSAgX19sYXN0MSAgIEVuZCBvZiByYW5nZSB0byBzZWFyY2guCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBTdGFydCBvZiBzZXF1ZW5jZSB0byBtYXRjaC4KKyAgICogIEBwYXJhbSAgX19sYXN0MiAgIEVuZCBvZiBzZXF1ZW5jZSB0byBtYXRjaC4KKyAgICogIEByZXR1cm4gICBUaGUgbGFzdCBpdGVyYXRvciBAYyBpIGluIHRoZSByYW5nZQorICAgKiAgQHAgW19fZmlyc3QxLF9fbGFzdDEtKF9fbGFzdDItX19maXJzdDIpKSBzdWNoIHRoYXQgQGMgKihpK04pID09CisgICAqICBAcCAqKF9fZmlyc3QyK04pIGZvciBlYWNoIEBjIE4gaW4gdGhlIHJhbmdlIEBwCisgICAqICBbMCxfX2xhc3QyLV9fZmlyc3QyKSwgb3IgQHAgX19sYXN0MSBpZiBubyBzdWNoIGl0ZXJhdG9yIGV4aXN0cy4KKyAgICoKKyAgICogIFNlYXJjaGVzIHRoZSByYW5nZSBAcCBbX19maXJzdDEsX19sYXN0MSkgZm9yIGEgc3ViLXNlcXVlbmNlIHRoYXQKKyAgICogIGNvbXBhcmVzIGVxdWFsIHZhbHVlLWJ5LXZhbHVlIHdpdGggdGhlIHNlcXVlbmNlIGdpdmVuIGJ5IEBwCisgICAqICBbX19maXJzdDIsX19sYXN0MikgYW5kIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIF9fZmlyc3QKKyAgICogIGVsZW1lbnQgb2YgdGhlIHN1Yi1zZXF1ZW5jZSwgb3IgQHAgX19sYXN0MSBpZiB0aGUgc3ViLXNlcXVlbmNlCisgICAqICBpcyBub3QgZm91bmQuICBUaGUgc3ViLXNlcXVlbmNlIHdpbGwgYmUgdGhlIGxhc3Qgc3VjaAorICAgKiAgc3Vic2VxdWVuY2UgY29udGFpbmVkIGluIFtfX2ZpcnN0LF9fbGFzdDEpLgorICAgKgorICAgKiAgQmVjYXVzZSB0aGUgc3ViLXNlcXVlbmNlIG11c3QgbGllIGNvbXBsZXRlbHkgd2l0aGluIHRoZSByYW5nZSBAcAorICAgKiAgW19fZmlyc3QxLF9fbGFzdDEpIGl0IG11c3Qgc3RhcnQgYXQgYSBwb3NpdGlvbiBsZXNzIHRoYW4gQHAKKyAgICogIF9fbGFzdDEtKF9fbGFzdDItX19maXJzdDIpIHdoZXJlIEBwIF9fbGFzdDItX19maXJzdDIgaXMgdGhlCisgICAqICBsZW5ndGggb2YgdGhlIHN1Yi1zZXF1ZW5jZS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgcmV0dXJuZWQKKyAgICogIGl0ZXJhdG9yIEBjIGkgd2lsbCBiZSBpbiB0aGUgcmFuZ2UgQHAKKyAgICogIFtfX2ZpcnN0MSxfX2xhc3QxLShfX2xhc3QyLV9fZmlyc3QyKSkKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yMQorICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcmF0b3IxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IxPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCisJCQkgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCisJCQkgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgRmluZCBsYXN0IG1hdGNoaW5nIHN1YnNlcXVlbmNlIGluIGEgc2VxdWVuY2UgdXNpbmcgYSBwcmVkaWNhdGUuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgU3RhcnQgb2YgcmFuZ2UgdG8gc2VhcmNoLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgRW5kIG9mIHJhbmdlIHRvIHNlYXJjaC4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIFN0YXJ0IG9mIHNlcXVlbmNlIHRvIG1hdGNoLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgRW5kIG9mIHNlcXVlbmNlIHRvIG1hdGNoLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICAgVGhlIHByZWRpY2F0ZSB0byB1c2UuCisgICAqICBAcmV0dXJuIFRoZSBsYXN0IGl0ZXJhdG9yIEBjIGkgaW4gdGhlIHJhbmdlIEBwCisgICAqICBbX19maXJzdDEsX19sYXN0MS0oX19sYXN0Mi1fX2ZpcnN0MikpIHN1Y2ggdGhhdCBAYworICAgKiAgcHJlZGljYXRlKCooaStOKSwgQHAgKF9fZmlyc3QyK04pKSBpcyB0cnVlIGZvciBlYWNoIEBjIE4gaW4gdGhlCisgICAqICByYW5nZSBAcCBbMCxfX2xhc3QyLV9fZmlyc3QyKSwgb3IgQHAgX19sYXN0MSBpZiBubyBzdWNoIGl0ZXJhdG9yCisgICAqICBleGlzdHMuCisgICAqCisgICAqICBTZWFyY2hlcyB0aGUgcmFuZ2UgQHAgW19fZmlyc3QxLF9fbGFzdDEpIGZvciBhIHN1Yi1zZXF1ZW5jZSB0aGF0CisgICAqICBjb21wYXJlcyBlcXVhbCB2YWx1ZS1ieS12YWx1ZSB3aXRoIHRoZSBzZXF1ZW5jZSBnaXZlbiBieSBAcAorICAgKiAgW19fZmlyc3QyLF9fbGFzdDIpIHVzaW5nIGNvbXAgYXMgYSBwcmVkaWNhdGUgYW5kIHJldHVybnMgYW4KKyAgICogIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBzdWItc2VxdWVuY2UsIG9yIEBwIF9fbGFzdDEKKyAgICogIGlmIHRoZSBzdWItc2VxdWVuY2UgaXMgbm90IGZvdW5kLiAgVGhlIHN1Yi1zZXF1ZW5jZSB3aWxsIGJlIHRoZQorICAgKiAgbGFzdCBzdWNoIHN1YnNlcXVlbmNlIGNvbnRhaW5lZCBpbiBbX19maXJzdCxfX2xhc3QxKS4KKyAgICoKKyAgICogIEJlY2F1c2UgdGhlIHN1Yi1zZXF1ZW5jZSBtdXN0IGxpZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgcmFuZ2UgQHAKKyAgICogIFtfX2ZpcnN0MSxfX2xhc3QxKSBpdCBtdXN0IHN0YXJ0IGF0IGEgcG9zaXRpb24gbGVzcyB0aGFuIEBwCisgICAqICBfX2xhc3QxLShfX2xhc3QyLV9fZmlyc3QyKSB3aGVyZSBAcCBfX2xhc3QyLV9fZmlyc3QyIGlzIHRoZQorICAgKiAgbGVuZ3RoIG9mIHRoZSBzdWItc2VxdWVuY2UuICBUaGlzIG1lYW5zIHRoYXQgdGhlIHJldHVybmVkCisgICAqICBpdGVyYXRvciBAYyBpIHdpbGwgYmUgaW4gdGhlIHJhbmdlIEBwCisgICAqICBbX19maXJzdDEsX19sYXN0MS0oX19sYXN0Mi1fX2ZpcnN0MikpCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yMQorICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcmF0b3IxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIsCisJICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0JpbmFyeVByZWRpY2F0ZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IxPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCisJCQkgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCisJCQkgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCisJCQkgICAgIF9fY29tcCk7CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAvKioKKyAgICogIEBicmllZiAgQ2hlY2tzIHRoYXQgYSBwcmVkaWNhdGUgaXMgdHJ1ZSBmb3IgYWxsIHRoZSBlbGVtZW50cworICAgKiAgICAgICAgICBvZiBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgdGhlIGNoZWNrIGlzIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KKyAgICoKKyAgICogIFJldHVybnMgdHJ1ZSBpZiBAcCBfX3ByZWQgaXMgdHJ1ZSBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZQorICAgKiAgQHAgW19fZmlyc3QsX19sYXN0KSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBhbGxfb2YoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7IHJldHVybiBfX2xhc3QgPT0gc3RkOjpmaW5kX2lmX25vdChfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgQ2hlY2tzIHRoYXQgYSBwcmVkaWNhdGUgaXMgZmFsc2UgZm9yIGFsbCB0aGUgZWxlbWVudHMKKyAgICogICAgICAgICAgb2YgYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3ByZWQgICAgQSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIHRoZSBjaGVjayBpcyB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCisgICAqCisgICAqICBSZXR1cm5zIHRydWUgaWYgQHAgX19wcmVkIGlzIGZhbHNlIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbX19maXJzdCxfX2xhc3QpLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG5vbmVfb2YoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7IHJldHVybiBfX2xhc3QgPT0gX0dMSUJDWFhfU1REX0E6OmZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENoZWNrcyB0aGF0IGEgcHJlZGljYXRlIGlzIGZhbHNlIGZvciBhdCBsZWFzdCBhbiBlbGVtZW50CisgICAqICAgICAgICAgIG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19wcmVkICAgIEEgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiB0aGUgY2hlY2sgaXMgdHJ1ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKgorICAgKiAgUmV0dXJucyB0cnVlIGlmIGFuIGVsZW1lbnQgZXhpc3RzIGluIHRoZSByYW5nZSBAcAorICAgKiAgW19fZmlyc3QsX19sYXN0KSBzdWNoIHRoYXQgQHAgX19wcmVkIGlzIHRydWUsIGFuZCBmYWxzZQorICAgKiAgb3RoZXJ3aXNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIGFueV9vZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsgcmV0dXJuICFzdGQ6Om5vbmVfb2YoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYSBzZXF1ZW5jZSBmb3Igd2hpY2ggYQorICAgKiAgICAgICAgICBwcmVkaWNhdGUgaXMgZmFsc2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgIEEgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgIFRoZSBmaXJzdCBpdGVyYXRvciBAYyBpIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpCisgICAqICBzdWNoIHRoYXQgQHAgX19wcmVkKCppKSBpcyBmYWxzZSwgb3IgQHAgX19sYXN0IGlmIG5vIHN1Y2ggaXRlcmF0b3IgZXhpc3RzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0lucHV0SXRlcmF0b3IKKyAgICBmaW5kX2lmX25vdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCV9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fZmluZF9pZl9ub3QoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNlcXVlbmNlIGlzIHBhcnRpdGlvbmVkLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgIEEgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSBpcyBwYXJ0aW9uZWQgYnkgQHAgX19wcmVkLAorICAgKiAgaS5lLiBpZiBhbGwgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IEBwIF9fcHJlZCBhcHBlYXIgYmVmb3JlIHRob3NlIHRoYXQKKyAgICogIGRvIG5vdC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc19wYXJ0aXRpb25lZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIF9fZmlyc3QgPSBzdGQ6OmZpbmRfaWZfbm90KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKKyAgICAgIHJldHVybiBzdGQ6Om5vbmVfb2YoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgRmluZCB0aGUgcGFydGl0aW9uIHBvaW50IG9mIGEgcGFydGl0aW9uZWQgcmFuZ2UuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIEBwIG1pZCBzdWNoIHRoYXQgQHAgYWxsX29mKF9fZmlyc3QsIG1pZCwgX19wcmVkKQorICAgKiAgICAgICAgICAgYW5kIEBwIG5vbmVfb2YobWlkLCBfX2xhc3QsIF9fcHJlZCkgYXJlIGJvdGggdHJ1ZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgcGFydGl0aW9uX3BvaW50KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKKwkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICAvLyBBIHNwZWNpZmljIGRlYnVnLW1vZGUgdGVzdCB3aWxsIGJlIG5lY2Vzc2FyeS4uLgorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlOworCisgICAgICB3aGlsZSAoX19sZW4gPiAwKQorCXsKKwkgIF9faGFsZiA9IF9fbGVuID4+IDE7CisJICBfX21pZGRsZSA9IF9fZmlyc3Q7CisJICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CisJICBpZiAoX19wcmVkKCpfX21pZGRsZSkpCisJICAgIHsKKwkgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CisJICAgICAgKytfX2ZpcnN0OworCSAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOworCSAgICB9CisJICBlbHNlCisJICAgIF9fbGVuID0gX19oYWxmOworCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKyNlbmRpZgorCisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSBhIHNlcXVlbmNlLCByZW1vdmluZyBlbGVtZW50cyBvZiBhIGdpdmVuIHZhbHVlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19yZXN1bHQgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX192YWx1ZSAgIFRoZSB2YWx1ZSB0byBiZSByZW1vdmVkLgorICAgKiAgQHJldHVybiAgIEFuIGl0ZXJhdG9yIGRlc2lnbmF0aW5nIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZS4KKyAgICoKKyAgICogIENvcGllcyBlYWNoIGVsZW1lbnQgaW4gdGhlIHJhbmdlIEBwIFtfX2ZpcnN0LF9fbGFzdCkgbm90IGVxdWFsCisgICAqICB0byBAcCBfX3ZhbHVlIHRvIHRoZSByYW5nZSBiZWdpbm5pbmcgYXQgQHAgX19yZXN1bHQuCisgICAqICByZW1vdmVfY29weSgpIGlzIHN0YWJsZSwgc28gdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQKKyAgICogIGFyZSBjb3BpZWQgaXMgdW5jaGFuZ2VkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQlfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkKKwkgIHsKKwkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgYSBzZXF1ZW5jZSwgcmVtb3ZpbmcgZWxlbWVudHMgZm9yIHdoaWNoIGEgcHJlZGljYXRlIGlzIHRydWUuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCAgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3ByZWQgICAgQSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuICAgQW4gaXRlcmF0b3IgZGVzaWduYXRpbmcgdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlLgorICAgKgorICAgKiAgQ29waWVzIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSBmb3Igd2hpY2gKKyAgICogIEBwIF9fcHJlZCByZXR1cm5zIGZhbHNlIHRvIHRoZSByYW5nZSBiZWdpbm5pbmcgYXQgQHAgX19yZXN1bHQuCisgICAqCisgICAqICByZW1vdmVfY29weV9pZigpIGlzIHN0YWJsZSwgc28gdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlCisgICAqICBjb3BpZWQgaXMgdW5jaGFuZ2VkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgcmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlpZiAoIWJvb2woX19wcmVkKCpfX2ZpcnN0KSkpCisJICB7CisJICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworCSAgICArK19fcmVzdWx0OworCSAgfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSBmb3Igd2hpY2ggYSBwcmVkaWNhdGUgaXMgdHJ1ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0ICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBDb3BpZXMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIGZvciB3aGljaAorICAgKiAgQHAgX19wcmVkIHJldHVybnMgdHJ1ZSB0byB0aGUgcmFuZ2UgYmVnaW5uaW5nIGF0IEBwIF9fcmVzdWx0LgorICAgKgorICAgKiAgY29weV9pZigpIGlzIHN0YWJsZSwgc28gdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlCisgICAqICBjb3BpZWQgaXMgdW5jaGFuZ2VkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgY29weV9pZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCWlmIChfX3ByZWQoKl9fZmlyc3QpKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKKwkgICAgKytfX3Jlc3VsdDsKKwkgIH0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX2NvcHlfbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sCisJICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX19uID4gMCkKKwl7CisJICB3aGlsZSAodHJ1ZSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworCSAgICAgICsrX19yZXN1bHQ7CisJICAgICAgaWYgKC0tX19uID4gMCkKKwkJKytfX2ZpcnN0OworCSAgICAgIGVsc2UKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLAorCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiBzdGQ6OmNvcHkoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19yZXN1bHQpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29waWVzIHRoZSByYW5nZSBbZmlyc3QsZmlyc3QrbikgaW50byBbcmVzdWx0LHJlc3VsdCtuKS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbiAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gY29weS4KKyAgICogIEBwYXJhbSAgX19yZXN1bHQgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgcmVzdWx0K24uCisgICAqCisgICAqICBUaGlzIGlubGluZSBmdW5jdGlvbiB3aWxsIGJvaWwgZG93biB0byBhIGNhbGwgdG8gQGMgbWVtbW92ZSB3aGVuZXZlcgorICAgKiAgcG9zc2libGUuICBGYWlsaW5nIHRoYXQsIGlmIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzIGFyZSBwYXNzZWQsIHRoZW4gdGhlCisgICAqICBsb29wIGNvdW50IHdpbGwgYmUga25vd24gKGFuZCB0aGVyZWZvcmUgYSBjYW5kaWRhdGUgZm9yIGNvbXBpbGVyCisgICAqICBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgdW5yb2xsaW5nKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIGNvcHlfbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICByZXR1cm4gc3RkOjpfX2NvcHlfbihfX2ZpcnN0LCBfX24sIF9fcmVzdWx0LAorCQkJICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSB0byBzZXBhcmF0ZSBvdXRwdXQgc2VxdWVuY2VzCisgICAqICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0cnV0aCB2YWx1ZSBvZiBhIHByZWRpY2F0ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fb3V0X3RydWUgICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fb3V0X2ZhbHNlICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBBIHBhaXIgZGVzaWduYXRpbmcgdGhlIGVuZHMgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZXMuCisgICAqCisgICAqICBDb3BpZXMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIGZvciB3aGljaAorICAgKiAgQHAgX19wcmVkIHJldHVybnMgdHJ1ZSB0byB0aGUgcmFuZ2UgYmVnaW5uaW5nIGF0IEBwIG91dF90cnVlCisgICAqICBhbmQgZWFjaCBlbGVtZW50IGZvciB3aGljaCBAcCBfX3ByZWQgcmV0dXJucyBmYWxzZSB0byBAcCBfX291dF9mYWxzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcjEsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yMiwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBwYWlyPF9PdXRwdXRJdGVyYXRvcjEsIF9PdXRwdXRJdGVyYXRvcjI+CisgICAgcGFydGl0aW9uX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICBfT3V0cHV0SXRlcmF0b3IxIF9fb3V0X3RydWUsIF9PdXRwdXRJdGVyYXRvcjIgX19vdXRfZmFsc2UsCisJCSAgIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvcjEsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yMiwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgIHsKKwkgICAgKl9fb3V0X3RydWUgPSAqX19maXJzdDsKKwkgICAgKytfX291dF90cnVlOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgKl9fb3V0X2ZhbHNlID0gKl9fZmlyc3Q7CisJICAgICsrX19vdXRfZmFsc2U7CisJICB9CisKKyAgICAgIHJldHVybiBwYWlyPF9PdXRwdXRJdGVyYXRvcjEsIF9PdXRwdXRJdGVyYXRvcjI+KF9fb3V0X3RydWUsIF9fb3V0X2ZhbHNlKTsKKyAgICB9CisjZW5kaWYKKworICAvKioKKyAgICogIEBicmllZiBSZW1vdmUgZWxlbWVudHMgZnJvbSBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fdmFsdWUgIFRoZSB2YWx1ZSB0byBiZSByZW1vdmVkLgorICAgKiAgQHJldHVybiAgIEFuIGl0ZXJhdG9yIGRlc2lnbmF0aW5nIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZS4KKyAgICoKKyAgICogIEFsbCBlbGVtZW50cyBlcXVhbCB0byBAcCBfX3ZhbHVlIGFyZSByZW1vdmVkIGZyb20gdGhlIHJhbmdlCisgICAqICBAcCBbX19maXJzdCxfX2xhc3QpLgorICAgKgorICAgKiAgcmVtb3ZlKCkgaXMgc3RhYmxlLCBzbyB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUKKyAgICogIG5vdCByZW1vdmVkIGlzIHVuY2hhbmdlZC4KKyAgICoKKyAgICogIEVsZW1lbnRzIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlIGFuZCBAcCBfX2xhc3QKKyAgICogIGFyZSBzdGlsbCBwcmVzZW50LCBidXQgdGhlaXIgdmFsdWUgaXMgdW5zcGVjaWZpZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgcmVtb3ZlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLCBfVHA+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfQTo6ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOworICAgICAgaWYoX19maXJzdCA9PSBfX2xhc3QpCisgICAgICAgIHJldHVybiBfX2ZpcnN0OworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICArK19fZmlyc3Q7CisgICAgICBmb3IoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorICAgICAgICBpZighKCpfX2ZpcnN0ID09IF9fdmFsdWUpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOworICAgICAgICAgICAgKytfX3Jlc3VsdDsKKyAgICAgICAgICB9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJlbW92ZSBlbGVtZW50cyBmcm9tIGEgc2VxdWVuY2UgdXNpbmcgYSBwcmVkaWNhdGUuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3ByZWQgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBBbGwgZWxlbWVudHMgZm9yIHdoaWNoIEBwIF9fcHJlZCByZXR1cm5zIHRydWUgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0LF9fbGFzdCkuCisgICAqCisgICAqICByZW1vdmVfaWYoKSBpcyBzdGFibGUsIHNvIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGFyZQorICAgKiAgbm90IHJlbW92ZWQgaXMgdW5jaGFuZ2VkLgorICAgKgorICAgKiAgRWxlbWVudHMgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UgYW5kIEBwIF9fbGFzdAorICAgKiAgYXJlIHN0aWxsIHByZXNlbnQsIGJ1dCB0aGVpciB2YWx1ZSBpcyB1bnNwZWNpZmllZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfQTo6ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CisgICAgICBpZihfX2ZpcnN0ID09IF9fbGFzdCkKKyAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0ID0gX19maXJzdDsKKyAgICAgICsrX19maXJzdDsKKyAgICAgIGZvcig7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisgICAgICAgIGlmKCFib29sKF9fcHJlZCgqX19maXJzdCkpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOworICAgICAgICAgICAgKytfX3Jlc3VsdDsKKyAgICAgICAgICB9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJlbW92ZSBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgdmFsdWVzIGZyb20gYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBSZW1vdmVzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBlYWNoIGdyb3VwIG9mIGNvbnNlY3V0aXZlCisgICAqICB2YWx1ZXMgdGhhdCBjb21wYXJlIGVxdWFsLgorICAgKiAgdW5pcXVlKCkgaXMgc3RhYmxlLCBzbyB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUKKyAgICogIG5vdCByZW1vdmVkIGlzIHVuY2hhbmdlZC4KKyAgICogIEVsZW1lbnRzIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlIGFuZCBAcCBfX2xhc3QKKyAgICogIGFyZSBzdGlsbCBwcmVzZW50LCBidXQgdGhlaXIgdmFsdWUgaXMgdW5zcGVjaWZpZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbGl0eUNvbXBhcmFibGVDb25jZXB0PAorCQkgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgLy8gU2tpcCB0aGUgYmVnaW5uaW5nLCBpZiBhbHJlYWR5IHVuaXF1ZS4KKyAgICAgIF9fZmlyc3QgPSBfR0xJQkNYWF9TVERfQTo6YWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2xhc3Q7CisKKyAgICAgIC8vIERvIHRoZSByZWFsIGNvcHkgd29yay4KKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19kZXN0ID0gX19maXJzdDsKKyAgICAgICsrX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCWlmICghKCpfX2Rlc3QgPT0gKl9fZmlyc3QpKQorCSAgKisrX19kZXN0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdCk7CisgICAgICByZXR1cm4gKytfX2Rlc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJlbW92ZSBjb25zZWN1dGl2ZSB2YWx1ZXMgZnJvbSBhIHNlcXVlbmNlIHVzaW5nIGEgcHJlZGljYXRlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgICAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICAgICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19iaW5hcnlfcHJlZCAgQSBiaW5hcnkgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgZGVzaWduYXRpbmcgdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlLgorICAgKgorICAgKiAgUmVtb3ZlcyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZWFjaCBncm91cCBvZiBjb25zZWN1dGl2ZQorICAgKiAgdmFsdWVzIGZvciB3aGljaCBAcCBfX2JpbmFyeV9wcmVkIHJldHVybnMgdHJ1ZS4KKyAgICogIHVuaXF1ZSgpIGlzIHN0YWJsZSwgc28gdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlCisgICAqICBub3QgcmVtb3ZlZCBpcyB1bmNoYW5nZWQuCisgICAqICBFbGVtZW50cyBiZXR3ZWVuIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZSBhbmQgQHAgX19sYXN0CisgICAqICBhcmUgc3RpbGwgcHJlc2VudCwgYnV0IHRoZWlyIHZhbHVlIGlzIHVuc3BlY2lmaWVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICB1bmlxdWUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9CaW5hcnlQcmVkaWNhdGUsCisJCXR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkJdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICAvLyBTa2lwIHRoZSBiZWdpbm5pbmcsIGlmIGFscmVhZHkgdW5pcXVlLgorICAgICAgX19maXJzdCA9IF9HTElCQ1hYX1NURF9BOjphZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fbGFzdDsKKworICAgICAgLy8gRG8gdGhlIHJlYWwgY29weSB3b3JrLgorICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2Rlc3QgPSBfX2ZpcnN0OworICAgICAgKytfX2ZpcnN0OworICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCisJaWYgKCFib29sKF9fYmluYXJ5X3ByZWQoKl9fZGVzdCwgKl9fZmlyc3QpKSkKKwkgICorK19fZGVzdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOworICAgICAgcmV0dXJuICsrX19kZXN0OworICAgIH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gdWdsaWZpZWQgdW5pcXVlX2NvcHkoX0lucHV0SXRlcmF0b3IsIF9JbnB1dEl0ZXJhdG9yLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IpCisgICAqICBvdmVybG9hZGVkIGZvciBmb3J3YXJkIGl0ZXJhdG9ycyBhbmQgb3V0cHV0IGl0ZXJhdG9yIGFzIHJlc3VsdC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fdW5pcXVlX2NvcHkoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisJCSAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIG91dHB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0gdGFrZW4gY2FyZSBvZiBpbiBkaXNwYXRjaGluZyBmdW5jdGlvbgorICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQorCWlmICghKCpfX2ZpcnN0ID09ICpfX25leHQpKQorCSAgeworCSAgICBfX2ZpcnN0ID0gX19uZXh0OworCSAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OworCSAgfQorICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZCB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciwgX0lucHV0SXRlcmF0b3IsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvcikKKyAgICogIG92ZXJsb2FkZWQgZm9yIGlucHV0IGl0ZXJhdG9ycyBhbmQgb3V0cHV0IGl0ZXJhdG9yIGFzIHJlc3VsdC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisJCSAgaW5wdXRfaXRlcmF0b3JfdGFnLCBvdXRwdXRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzIC0tIHRha2VuIGNhcmUgb2YgaW4gZGlzcGF0Y2hpbmcgZnVuY3Rpb24KKyAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OworICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCWlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKQorCSAgeworCSAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CisJICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKKwkgIH0KKyAgICAgIHJldHVybiArK19fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gdWdsaWZpZWQgdW5pcXVlX2NvcHkoX0lucHV0SXRlcmF0b3IsIF9JbnB1dEl0ZXJhdG9yLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IpCisgICAqICBvdmVybG9hZGVkIGZvciBpbnB1dCBpdGVyYXRvcnMgYW5kIGZvcndhcmQgaXRlcmF0b3IgYXMgcmVzdWx0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJICBpbnB1dF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzIC0tIHRha2VuIGNhcmUgb2YgaW4gZGlzcGF0Y2hpbmcgZnVuY3Rpb24KKyAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCisJaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKKwkgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CisgICAgICByZXR1cm4gKytfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkCisgICAqICB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciwgX0lucHV0SXRlcmF0b3IsIF9PdXRwdXRJdGVyYXRvciwKKyAgICogICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUpCisgICAqICBvdmVybG9hZGVkIGZvciBmb3J3YXJkIGl0ZXJhdG9ycyBhbmQgb3V0cHV0IGl0ZXJhdG9yIGFzIHJlc3VsdC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX191bmlxdWVfY29weShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAorCQkgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBvdXRwdXRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzIC0tIGl0ZXJhdG9ycyBhbHJlYWR5IGNoZWNrZWQKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQmluYXJ5UHJlZGljYXRlLAorCSAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQorCWlmICghYm9vbChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkpCisJICB7CisJICAgIF9fZmlyc3QgPSBfX25leHQ7CisJICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CisJICB9CisgICAgICByZXR1cm4gKytfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkCisgICAqICB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciwgX0lucHV0SXRlcmF0b3IsIF9PdXRwdXRJdGVyYXRvciwKKyAgICogICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUpCisgICAqICBvdmVybG9hZGVkIGZvciBpbnB1dCBpdGVyYXRvcnMgYW5kIG91dHB1dCBpdGVyYXRvciBhcyByZXN1bHQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKKwkJICBpbnB1dF9pdGVyYXRvcl90YWcsIG91dHB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0gaXRlcmF0b3JzIGFscmVhZHkgY2hlY2tlZAorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9CaW5hcnlQcmVkaWNhdGUsCisJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisKKyAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OworICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCWlmICghYm9vbChfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkpCisJICB7CisJICAgIF9fdmFsdWUgPSAqX19maXJzdDsKKwkgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOworCSAgfQorICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZAorICAgKiAgdW5pcXVlX2NvcHkoX0lucHV0SXRlcmF0b3IsIF9JbnB1dEl0ZXJhdG9yLCBfT3V0cHV0SXRlcmF0b3IsCisgICAqICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlKQorICAgKiAgb3ZlcmxvYWRlZCBmb3IgaW5wdXQgaXRlcmF0b3JzIGFuZCBmb3J3YXJkIGl0ZXJhdG9yIGFzIHJlc3VsdC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAorCQkgIGlucHV0X2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0gaXRlcmF0b3JzIGFscmVhZHkgY2hlY2tlZAorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9CaW5hcnlQcmVkaWNhdGUsCisJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKworICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKKwlpZiAoIWJvb2woX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkpCisJICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OworICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiB1Z2xpZmllZCByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcikKKyAgICogIG92ZXJsb2FkZWQgZm9yIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICB3aGlsZSAodHJ1ZSkKKwlpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKKwkgIHJldHVybjsKKwllbHNlCisJICB7CisJICAgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CisJICAgICsrX19maXJzdDsKKwkgIH0KKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIHVnbGlmaWVkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yKQorICAgKiAgb3ZlcmxvYWRlZCBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm47CisgICAgICAtLV9fbGFzdDsKKyAgICAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQorCXsKKwkgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CisJICArK19fZmlyc3Q7CisJICAtLV9fbGFzdDsKKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJldmVyc2UgYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBBIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgcmV2ZXJzZSgpIHJldHVybnMgbm8gdmFsdWUuCisgICAqCisgICAqICBSZXZlcnNlcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpLAorICAgKiAgc28gdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBiZWNvbWVzIHRoZSBsYXN0IGV0Yy4KKyAgICogIEZvciBldmVyeSBAYyBpIHN1Y2ggdGhhdCBAcCAwPD1pPD0oX19sYXN0LV9fZmlyc3QpLzIpLCBAcCByZXZlcnNlKCkKKyAgICogIHN3YXBzIEBwICooX19maXJzdCtpKSBhbmQgQHAgKihfX2xhc3QtKGkrMSkpCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIHN0ZDo6X19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSBhIHNlcXVlbmNlLCByZXZlcnNpbmcgaXRzIGVsZW1lbnRzLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCAgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgZGVzaWduYXRpbmcgdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlLgorICAgKgorICAgKiAgQ29waWVzIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSB0byB0aGUKKyAgICogIHJhbmdlIEBwIFtfX3Jlc3VsdCxfX3Jlc3VsdCsoX19sYXN0LV9fZmlyc3QpKSBzdWNoIHRoYXQgdGhlCisgICAqICBvcmRlciBvZiB0aGUgZWxlbWVudHMgaXMgcmV2ZXJzZWQuICBGb3IgZXZlcnkgQGMgaSBzdWNoIHRoYXQgQHAKKyAgICogIDA8PWk8PShfX2xhc3QtX19maXJzdCksIEBwIHJldmVyc2VfY29weSgpIHBlcmZvcm1zIHRoZQorICAgKiAgYXNzaWdubWVudCBAcCAqKF9fcmVzdWx0KyhfX2xhc3QtX19maXJzdCktMS1pKSA9ICooX19maXJzdCtpKS4KKyAgICogIFRoZSByYW5nZXMgQHAgW19fZmlyc3QsX19sYXN0KSBhbmQgQHAKKyAgICogIFtfX3Jlc3VsdCxfX3Jlc3VsdCsoX19sYXN0LV9fZmlyc3QpKSBtdXN0IG5vdCBvdmVybGFwLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCSBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQl0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICAtLV9fbGFzdDsKKwkgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CisJICArK19fcmVzdWx0OworCX0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgcm90YXRlIGFsZ29yaXRobSBzcGVjaWFsaXplZCBvbiBSQUlzLgorICAgKiAgSXQgcmV0dXJucyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgdHdvIGludGVnZXIgdmFsdWVzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CisgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50CisgICAgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKKyAgICB7CisgICAgICB3aGlsZSAoX19uICE9IDApCisJeworCSAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKKwkgIF9fbSA9IF9fbjsKKwkgIF9fbiA9IF9fdDsKKwl9CisgICAgICByZXR1cm4gX19tOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHJvdGF0ZSBhbGdvcml0aG0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWRkbGUsCisJICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbGFzdCAgPT0gX19taWRkbGUpCisJcmV0dXJuOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QyID0gX19taWRkbGU7CisgICAgICBkbworCXsKKwkgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fZmlyc3QyKTsKKwkgICsrX19maXJzdDsKKwkgICsrX19maXJzdDI7CisJICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKKwkgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKKwl9CisgICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKKworICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkKKwl7CisJICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX2ZpcnN0Mik7CisJICArK19fZmlyc3Q7CisJICArK19fZmlyc3QyOworCSAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCisJICAgIF9fbWlkZGxlID0gX19maXJzdDI7CisJICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCisJICAgIF9fZmlyc3QyID0gX19taWRkbGU7CisJfQorICAgIH0KKworICAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSByb3RhdGUgYWxnb3JpdGhtLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCSAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4pCisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbGFzdCAgPT0gX19taWRkbGUpCisJcmV0dXJuOworCisgICAgICBzdGQ6Ol9fcmV2ZXJzZShfX2ZpcnN0LCAgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOworICAgICAgc3RkOjpfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQorCXsKKwkgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIC0tX19sYXN0KTsKKwkgICsrX19maXJzdDsKKwl9CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQorCXN0ZDo6X19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CisgICAgICBlbHNlCisJc3RkOjpfX3JldmVyc2UoX19maXJzdCwgIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSByb3RhdGUgYWxnb3JpdGhtLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlLAorCSAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19sYXN0ICA9PSBfX21pZGRsZSkKKwlyZXR1cm47CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICBfRGlzdGFuY2UgX19uID0gX19sYXN0ICAgLSBfX2ZpcnN0OworICAgICAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKKworICAgICAgaWYgKF9fayA9PSBfX24gLSBfX2spCisJeworCSAgc3RkOjpzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOworCSAgcmV0dXJuOworCX0KKworICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcCA9IF9fZmlyc3Q7CisKKyAgICAgIGZvciAoOzspCisJeworCSAgaWYgKF9fayA8IF9fbiAtIF9faykKKwkgICAgeworCSAgICAgIGlmIChfX2lzX3BvZChfVmFsdWVUeXBlKSAmJiBfX2sgPT0gMSkKKwkJeworCQkgIF9WYWx1ZVR5cGUgX190ID0gX0dMSUJDWFhfTU9WRSgqX19wKTsKKwkJICBfR0xJQkNYWF9NT1ZFMyhfX3AgKyAxLCBfX3AgKyBfX24sIF9fcCk7CisJCSAgKihfX3AgKyBfX24gLSAxKSA9IF9HTElCQ1hYX01PVkUoX190KTsKKwkJICByZXR1cm47CisJCX0KKwkgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19xID0gX19wICsgX19rOworCSAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fbiAtIF9fazsgKysgX19pKQorCQl7CisJCSAgc3RkOjppdGVyX3N3YXAoX19wLCBfX3EpOworCQkgICsrX19wOworCQkgICsrX19xOworCQl9CisJICAgICAgX19uICU9IF9fazsKKwkgICAgICBpZiAoX19uID09IDApCisJCXJldHVybjsKKwkgICAgICBzdGQ6OnN3YXAoX19uLCBfX2spOworCSAgICAgIF9fayA9IF9fbiAtIF9fazsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgX19rID0gX19uIC0gX19rOworCSAgICAgIGlmIChfX2lzX3BvZChfVmFsdWVUeXBlKSAmJiBfX2sgPT0gMSkKKwkJeworCQkgIF9WYWx1ZVR5cGUgX190ID0gX0dMSUJDWFhfTU9WRSgqKF9fcCArIF9fbiAtIDEpKTsKKwkJICBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfX3AsIF9fcCArIF9fbiAtIDEsIF9fcCArIF9fbik7CisJCSAgKl9fcCA9IF9HTElCQ1hYX01PVkUoX190KTsKKwkJICByZXR1cm47CisJCX0KKwkgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19xID0gX19wICsgX19uOworCSAgICAgIF9fcCA9IF9fcSAtIF9fazsKKwkgICAgICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX24gLSBfX2s7ICsrIF9faSkKKwkJeworCQkgIC0tX19wOworCQkgIC0tX19xOworCQkgIHN0ZDo6aXRlcl9zd2FwKF9fcCwgX19xKTsKKwkJfQorCSAgICAgIF9fbiAlPSBfX2s7CisJICAgICAgaWYgKF9fbiA9PSAwKQorCQlyZXR1cm47CisJICAgICAgc3RkOjpzd2FwKF9fbiwgX19rKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUm90YXRlIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX21pZGRsZSAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFJvdGF0ZXMgdGhlIGVsZW1lbnRzIG9mIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIGJ5IAorICAgKiAgQHAgKF9fbWlkZGxlIC0gX19maXJzdCkgcG9zaXRpb25zIHNvIHRoYXQgdGhlIGVsZW1lbnQgYXQgQHAgX19taWRkbGUKKyAgICogIGlzIG1vdmVkIHRvIEBwIF9fZmlyc3QsIHRoZSBlbGVtZW50IGF0IEBwIF9fbWlkZGxlKzEgaXMgbW92ZWQgdG8KKyAgICogIEBwIF9fZmlyc3QrMSBhbmQgc28gb24gZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0LF9fbGFzdCkuCisgICAqCisgICAqICBUaGlzIGVmZmVjdGl2ZWx5IHN3YXBzIHRoZSByYW5nZXMgQHAgW19fZmlyc3QsX19taWRkbGUpIGFuZAorICAgKiAgQHAgW19fbWlkZGxlLF9fbGFzdCkuCisgICAqCisgICAqICBQZXJmb3JtcworICAgKiAgIEBwICooX19maXJzdCsobisoX19sYXN0LV9fbWlkZGxlKSklKF9fbGFzdC1fX2ZpcnN0KSk9KihfX2ZpcnN0K24pCisgICAqICBmb3IgZWFjaCBAcCBuIGluIHRoZSByYW5nZSBAcCBbMCxfX2xhc3QtX19maXJzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICByb3RhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlLAorCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbWlkZGxlKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX21pZGRsZSwgX19sYXN0KTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CisJX0l0ZXJUeXBlOworICAgICAgc3RkOjpfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgYSBzZXF1ZW5jZSwgcm90YXRpbmcgaXRzIGVsZW1lbnRzLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX21pZGRsZSAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCAgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEFuIGl0ZXJhdG9yIGRlc2lnbmF0aW5nIHRoZSBlbmQgb2YgdGhlIHJlc3VsdGluZyBzZXF1ZW5jZS4KKyAgICoKKyAgICogIENvcGllcyB0aGUgZWxlbWVudHMgb2YgdGhlIHJhbmdlIEBwIFtfX2ZpcnN0LF9fbGFzdCkgdG8gdGhlCisgICAqICByYW5nZSBiZWdpbm5pbmcgYXQgQHJlc3VsdCwgcm90YXRpbmcgdGhlIGNvcGllZCBlbGVtZW50cyBieSAKKyAgICogIEBwIChfX21pZGRsZS1fX2ZpcnN0KSBwb3NpdGlvbnMgc28gdGhhdCB0aGUgZWxlbWVudCBhdCBAcCBfX21pZGRsZQorICAgKiAgaXMgbW92ZWQgdG8gQHAgX19yZXN1bHQsIHRoZSBlbGVtZW50IGF0IEBwIF9fbWlkZGxlKzEgaXMgbW92ZWQKKyAgICogIHRvIEBwIF9fcmVzdWx0KzEgYW5kIHNvIG9uIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHJhbmdlIEBwCisgICAqICBbX19maXJzdCxfX2xhc3QpLgorICAgKgorICAgKiAgUGVyZm9ybXMgCisgICAqICBAcCAqKF9fcmVzdWx0KyhuKyhfX2xhc3QtX19taWRkbGUpKSUoX19sYXN0LV9fZmlyc3QpKT0qKF9fZmlyc3QrbikKKyAgICogIGZvciBlYWNoIEBwIG4gaW4gdGhlIHJhbmdlIEBwIFswLF9fbGFzdC1fX2ZpcnN0KS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZSwKKyAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCXR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19taWRkbGUpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fbWlkZGxlLCBfX2xhc3QpOworCisgICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24uLi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJX1ByZWRpY2F0ZSBfX3ByZWQsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19maXJzdDsKKworICAgICAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCisJaWYgKCsrX19maXJzdCA9PSBfX2xhc3QpCisJICByZXR1cm4gX19maXJzdDsKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworCisgICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQorCWlmIChfX3ByZWQoKl9fbmV4dCkpCisJICB7CisJICAgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbmV4dCk7CisJICAgICsrX19maXJzdDsKKwkgIH0KKworICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uLi4uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcgorICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCV9QcmVkaWNhdGUgX19wcmVkLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICB3aGlsZSAodHJ1ZSkKKwl7CisJICB3aGlsZSAodHJ1ZSkKKwkgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgICAgIHJldHVybiBfX2ZpcnN0OworCSAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQorCSAgICAgICsrX19maXJzdDsKKwkgICAgZWxzZQorCSAgICAgIGJyZWFrOworCSAgLS1fX2xhc3Q7CisJICB3aGlsZSAodHJ1ZSkKKwkgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgICAgIHJldHVybiBfX2ZpcnN0OworCSAgICBlbHNlIGlmICghYm9vbChfX3ByZWQoKl9fbGFzdCkpKQorCSAgICAgIC0tX19sYXN0OworCSAgICBlbHNlCisJICAgICAgYnJlYWs7CisJICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOworCSAgKytfX2ZpcnN0OworCX0KKyAgICB9CisKKyAgLy8gcGFydGl0aW9uCisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24uLi4KKyAgLy8vIFJlcXVpcmVzIF9fbGVuICE9IDAgYW5kICFfX3ByZWQoKl9fZmlyc3QpLAorICAvLy8gc2FtZSBhcyBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCisgICAgeworICAgICAgaWYgKF9fbGVuID09IDEpCisJcmV0dXJuIF9fZmlyc3Q7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdDsKKyAgICAgIHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sZWZ0X3NwbGl0ID0KKwlzdGQ6Ol9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fcHJlZCwgX19sZW4gLyAyKTsKKyAgICAgIC8vIEFkdmFuY2UgcGFzdCB0cnVlLXByZWRpY2F0ZSB2YWx1ZXMgdG8gc2F0aXNmeSB0aGlzCisgICAgICAvLyBmdW5jdGlvbidzIHByZWNvbmRpdGlvbnMuCisgICAgICBfRGlzdGFuY2UgX19yaWdodF9sZW4gPSBfX2xlbiAtIF9fbGVuIC8gMjsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yaWdodF9zcGxpdCA9CisJc3RkOjpfX2ZpbmRfaWZfbm90X24oX19taWRkbGUsIF9fcmlnaHRfbGVuLCBfX3ByZWQpOworICAgICAgaWYgKF9fcmlnaHRfbGVuKQorCV9fcmlnaHRfc3BsaXQgPSBzdGQ6Ol9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLAorCQkJCQkJCV9fcHJlZCwKKwkJCQkJCQlfX3JpZ2h0X2xlbik7CisgICAgICBzdGQ6OnJvdGF0ZShfX2xlZnRfc3BsaXQsIF9fbWlkZGxlLCBfX3JpZ2h0X3NwbGl0KTsKKyAgICAgIHN0ZDo6YWR2YW5jZShfX2xlZnRfc3BsaXQsIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fcmlnaHRfc3BsaXQpKTsKKyAgICAgIHJldHVybiBfX2xlZnRfc3BsaXQ7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uLi4uCisgIC8vLyBSZXF1aXJlcyBfX2ZpcnN0ICE9IF9fbGFzdCBhbmQgIV9fcHJlZCgqX19maXJzdCkKKyAgLy8vIGFuZCBfX2xlbiA9PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpLgorICAvLy8KKyAgLy8vICFfX3ByZWQoKl9fZmlyc3QpIGFsbG93cyB1cyB0byBndWFyYW50ZWUgdGhhdCB3ZSBkb24ndAorICAvLy8gbW92ZS1hc3NpZ24gYW4gZWxlbWVudCBvbnRvIGl0c2VsZi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkJCV9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkJCV9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCisJCQkJX1BvaW50ZXIgX19idWZmZXIsCisJCQkJX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCisgICAgeworICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpCisJeworCSAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OworCSAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CisJICAvLyBUaGUgcHJlY29uZGl0aW9uIGd1YXJhbnRlZXMgdGhhdCAhX19wcmVkKCpfX2ZpcnN0KSwgc28KKwkgIC8vIG1vdmUgdGhhdCBlbGVtZW50IHRvIHRoZSBidWZmZXIgYmVmb3JlIHN0YXJ0aW5nIHRoZSBsb29wLgorCSAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugb25seSBjYWxsIF9fcHJlZCBvbmNlIHBlciBlbGVtZW50LgorCSAgKl9fcmVzdWx0MiA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOworCSAgKytfX3Jlc3VsdDI7CisJICArK19fZmlyc3Q7CisJICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCisJICAgICAgeworCQkqX19yZXN1bHQxID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdCk7CisJCSsrX19yZXN1bHQxOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJKl9fcmVzdWx0MiA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOworCQkrK19fcmVzdWx0MjsKKwkgICAgICB9CisJICBfR0xJQkNYWF9NT1ZFMyhfX2J1ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOworCSAgcmV0dXJuIF9fcmVzdWx0MTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3Q7CisJICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGVmdF9zcGxpdCA9CisJICAgIHN0ZDo6X19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsCisJCQkJCSAgICAgX19sZW4gLyAyLCBfX2J1ZmZlciwKKwkJCQkJICAgICBfX2J1ZmZlcl9zaXplKTsKKwkgIC8vIEFkdmFuY2UgcGFzdCB0cnVlLXByZWRpY2F0ZSB2YWx1ZXMgdG8gc2F0aXNmeSB0aGlzCisJICAvLyBmdW5jdGlvbidzIHByZWNvbmRpdGlvbnMuCisJICBfRGlzdGFuY2UgX19yaWdodF9sZW4gPSBfX2xlbiAtIF9fbGVuIC8gMjsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IgX19yaWdodF9zcGxpdCA9CisJICAgIHN0ZDo6X19maW5kX2lmX25vdF9uKF9fbWlkZGxlLCBfX3JpZ2h0X2xlbiwgX19wcmVkKTsKKwkgIGlmIChfX3JpZ2h0X2xlbikKKwkgICAgX19yaWdodF9zcGxpdCA9CisJICAgICAgc3RkOjpfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19yaWdodF9zcGxpdCwgX19sYXN0LCBfX3ByZWQsCisJCQkJCSAgICAgICBfX3JpZ2h0X2xlbiwKKwkJCQkJICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKKwkgIHN0ZDo6cm90YXRlKF9fbGVmdF9zcGxpdCwgX19taWRkbGUsIF9fcmlnaHRfc3BsaXQpOworCSAgc3RkOjphZHZhbmNlKF9fbGVmdF9zcGxpdCwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19yaWdodF9zcGxpdCkpOworCSAgcmV0dXJuIF9fbGVmdF9zcGxpdDsKKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIE1vdmUgZWxlbWVudHMgZm9yIHdoaWNoIGEgcHJlZGljYXRlIGlzIHRydWUgdG8gdGhlIGJlZ2lubmluZworICAgKiAgICAgICAgIG9mIGEgc2VxdWVuY2UsIHByZXNlcnZpbmcgcmVsYXRpdmUgb3JkZXJpbmcuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICBBIHByZWRpY2F0ZSBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgQHAgbWlkZGxlIHN1Y2ggdGhhdCBAcCBfX3ByZWQoaSkgaXMgdHJ1ZSBmb3IgZWFjaAorICAgKiAgaXRlcmF0b3IgQHAgaSBpbiB0aGUgcmFuZ2UgQHAgW2ZpcnN0LG1pZGRsZSkgYW5kIGZhbHNlIGZvciBlYWNoIEBwIGkKKyAgICogIGluIHRoZSByYW5nZSBAcCBbbWlkZGxlLGxhc3QpLgorICAgKgorICAgKiAgUGVyZm9ybXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMgQHAgcGFydGl0aW9uKCkgd2l0aCB0aGUgYWRkaXRpb25hbAorICAgKiAgZ3VhcmFudGVlIHRoYXQgdGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGVsZW1lbnRzIGluIGVhY2ggZ3JvdXAgaXMKKyAgICogIHByZXNlcnZlZCwgc28gYW55IHR3byBlbGVtZW50cyBAcCB4IGFuZCBAcCB5IGluIHRoZSByYW5nZQorICAgKiAgQHAgW19fZmlyc3QsX19sYXN0KSBzdWNoIHRoYXQgQHAgX19wcmVkKHgpPT1fX3ByZWQoeSkgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAqICByZWxhdGl2ZSBvcmRlcmluZyBhZnRlciBjYWxsaW5nIEBwIHN0YWJsZV9wYXJ0aXRpb24oKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfX2ZpcnN0ID0gc3RkOjpfX2ZpbmRfaWZfbm90KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2ZpcnN0OworICAgICAgZWxzZQorCXsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJICAgIF9WYWx1ZVR5cGU7CisJICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJICAgIF9EaXN0YW5jZVR5cGU7CisKKwkgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsCisJCQkJCQkJCV9fbGFzdCk7CisJaWYgKF9fYnVmLnNpemUoKSA+IDApCisJICByZXR1cm4KKwkgICAgc3RkOjpfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisJCQkJCSAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKKwkJCQkJICBfX2J1Zi5iZWdpbigpLAorCQkJCQkgIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CisJZWxzZQorCSAgcmV0dXJuCisJICAgIHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19wcmVkLAorCQkJCQkgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CisJfQorICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHNvcnQgcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX19oZWFwX3NlbGVjdChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWRkbGUsCisJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBzdGQ6Om1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CisgICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKKwlpZiAoKl9faSA8ICpfX2ZpcnN0KQorCSAgc3RkOjpfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2kpOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHNvcnQgcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9faGVhcF9zZWxlY3QoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlLAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBzdGQ6Om1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKKyAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQorCWlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQorCSAgc3RkOjpfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9fY29tcCk7CisgICAgfQorCisgIC8vIHBhcnRpYWxfc29ydAorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgdGhlIHNtYWxsZXN0IGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19yZXN1bHRfZmlyc3QgICBBIHJhbmRvbS1hY2Nlc3MgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0X2xhc3QgICAgQW5vdGhlciByYW5kb20tYWNjZXNzIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEFuIGl0ZXJhdG9yIGluZGljYXRpbmcgdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlLgorICAgKgorICAgKiAgQ29waWVzIGFuZCBzb3J0cyB0aGUgc21hbGxlc3QgTiB2YWx1ZXMgZnJvbSB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KQorICAgKiAgdG8gdGhlIHJhbmdlIGJlZ2lubmluZyBhdCBAcCBfX3Jlc3VsdF9maXJzdCwgd2hlcmUgdGhlIG51bWJlciBvZgorICAgKiAgZWxlbWVudHMgdG8gYmUgY29waWVkLCBAcCBOLCBpcyB0aGUgc21hbGxlciBvZiBAcCAoX19sYXN0LV9fZmlyc3QpIGFuZAorICAgKiAgQHAgKF9fcmVzdWx0X2xhc3QtX19yZXN1bHRfZmlyc3QpLgorICAgKiAgQWZ0ZXIgdGhlIHNvcnQgaWYgQGUgaSBhbmQgQGUgaiBhcmUgaXRlcmF0b3JzIGluIHRoZSByYW5nZQorICAgKiAgQHAgW19fcmVzdWx0X2ZpcnN0LF9fcmVzdWx0X2ZpcnN0K04pIHN1Y2ggdGhhdCBpIHByZWNlZGVzIGogdGhlbgorICAgKiAgKmo8KmkgaXMgZmFsc2UuCisgICAqICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgQHAgX19yZXN1bHRfZmlyc3QrTi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9maXJzdCwKKwkJICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0X2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX0lucHV0VmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9PdXRwdXRWYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfSW5wdXRWYWx1ZVR5cGUsCisJCQkJICBfT3V0cHV0VmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X0lucHV0VmFsdWVUeXBlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRWYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9PdXRwdXRWYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QpOworCisgICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkKKwlyZXR1cm4gX19yZXN1bHRfbGFzdDsKKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKKyAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KQorCXsKKwkgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKKwkgICsrX19yZXN1bHRfcmVhbF9sYXN0OworCSAgKytfX2ZpcnN0OworCX0KKyAgICAgIHN0ZDo6bWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKKwkgICAgc3RkOjpfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAorCQkJICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0CisJCQkJCSAgICAgLSBfX3Jlc3VsdF9maXJzdCksCisJCQkgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CisJICArK19fZmlyc3Q7CisJfQorICAgICAgc3RkOjpzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CisgICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBDb3B5IHRoZSBzbWFsbGVzdCBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIHVzaW5nIGEgcHJlZGljYXRlIGZvcgorICAgKiAgICAgICAgIGNvbXBhcmlzb24uCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19yZXN1bHRfZmlyc3QgICBBIHJhbmRvbS1hY2Nlc3MgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0X2xhc3QgICAgQW5vdGhlciByYW5kb20tYWNjZXNzIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICAgQW4gaXRlcmF0b3IgaW5kaWNhdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBDb3BpZXMgYW5kIHNvcnRzIHRoZSBzbWFsbGVzdCBOIHZhbHVlcyBmcm9tIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpCisgICAqICB0byB0aGUgcmFuZ2UgYmVnaW5uaW5nIGF0IEBwIHJlc3VsdF9maXJzdCwgd2hlcmUgdGhlIG51bWJlciBvZgorICAgKiAgZWxlbWVudHMgdG8gYmUgY29waWVkLCBAcCBOLCBpcyB0aGUgc21hbGxlciBvZiBAcCAoX19sYXN0LV9fZmlyc3QpIGFuZAorICAgKiAgQHAgKF9fcmVzdWx0X2xhc3QtX19yZXN1bHRfZmlyc3QpLgorICAgKiAgQWZ0ZXIgdGhlIHNvcnQgaWYgQGUgaSBhbmQgQGUgaiBhcmUgaXRlcmF0b3JzIGluIHRoZSByYW5nZQorICAgKiAgQHAgW19fcmVzdWx0X2ZpcnN0LF9fcmVzdWx0X2ZpcnN0K04pIHN1Y2ggdGhhdCBpIHByZWNlZGVzIGogdGhlbgorICAgKiAgQHAgX19jb21wKCpqLCppKSBpcyBmYWxzZS4KKyAgICogIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBAcCBfX3Jlc3VsdF9maXJzdCtOLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9maXJzdCwKKwkJICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0X2xhc3QsCisJCSAgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfSW5wdXRWYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX091dHB1dFZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X0lucHV0VmFsdWVUeXBlLAorCQkJCSAgX091dHB1dFZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfSW5wdXRWYWx1ZVR5cGUsIF9PdXRwdXRWYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX091dHB1dFZhbHVlVHlwZSwgX091dHB1dFZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCk7CisKKyAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KQorCXJldHVybiBfX3Jlc3VsdF9sYXN0OworICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OworICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpCisJeworCSAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OworCSAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CisJICArK19fZmlyc3Q7CisJfQorICAgICAgc3RkOjptYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQorCSAgICBzdGQ6Ol9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCisJCQkgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QKKwkJCQkJICAgICAtIF9fcmVzdWx0X2ZpcnN0KSwKKwkJCSAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAorCQkJICAgICAgIF9fY29tcCk7CisJICArK19fZmlyc3Q7CisJfQorICAgICAgc3RkOjpzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCByb3V0aW5lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgdm9pZAorICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9fdmFsID0gX0dMSUJDWFhfTU9WRSgqX19sYXN0KTsKKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX25leHQgPSBfX2xhc3Q7CisgICAgICAtLV9fbmV4dDsKKyAgICAgIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpCisJeworCSAgKl9fbGFzdCA9IF9HTElCQ1hYX01PVkUoKl9fbmV4dCk7CisJICBfX2xhc3QgPSBfX25leHQ7CisJICAtLV9fbmV4dDsKKwl9CisgICAgICAqX19sYXN0ID0gX0dMSUJDWFhfTU9WRShfX3ZhbCk7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCByb3V0aW5lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCQkgICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfX3ZhbCA9IF9HTElCQ1hYX01PVkUoKl9fbGFzdCk7CisgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19uZXh0ID0gX19sYXN0OworICAgICAgLS1fX25leHQ7CisgICAgICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkKKwl7CisJICAqX19sYXN0ID0gX0dMSUJDWFhfTU9WRSgqX19uZXh0KTsKKwkgIF9fbGFzdCA9IF9fbmV4dDsKKwkgIC0tX19uZXh0OworCX0KKyAgICAgICpfX2xhc3QgPSBfR0xJQkNYWF9NT1ZFKF9fdmFsKTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm47CisKKyAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKKwl7CisJICBpZiAoKl9faSA8ICpfX2ZpcnN0KQorCSAgICB7CisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkJX192YWwgPSBfR0xJQkNYWF9NT1ZFKCpfX2kpOworCSAgICAgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CisJICAgICAgKl9fZmlyc3QgPSBfR0xJQkNYWF9NT1ZFKF9fdmFsKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pKTsKKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCByb3V0aW5lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKKworICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQorCXsKKwkgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQorCSAgICB7CisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkJX192YWwgPSBfR0xJQkNYWF9NT1ZFKCpfX2kpOworCSAgICAgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fZmlyc3QsIF9faSwgX19pICsgMSk7CisJICAgICAgKl9fZmlyc3QgPSBfR0xJQkNYWF9NT1ZFKF9fdmFsKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX2NvbXApOworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQorCXN0ZDo6X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2kpOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHNvcnQgcm91dGluZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCisJc3RkOjpfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX19jb21wKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAZG9jdG9kbworICAgKiAgVGhpcyBjb250cm9scyBzb21lIGFzcGVjdCBvZiB0aGUgc29ydCByb3V0aW5lcy4KKyAgKi8KKyAgZW51bSB7IF9TX3RocmVzaG9sZCA9IDE2IH07CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xkKSkKKwl7CisJICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIGludChfU190aHJlc2hvbGQpKTsKKwkgIHN0ZDo6X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIGludChfU190aHJlc2hvbGQpLCBfX2xhc3QpOworCX0KKyAgICAgIGVsc2UKKwlzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRpbmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xkKSkKKwl7CisJICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIGludChfU190aHJlc2hvbGQpLCBfX2NvbXApOworCSAgc3RkOjpfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgaW50KF9TX3RocmVzaG9sZCksIF9fbGFzdCwKKwkJCQkJICBfX2NvbXApOworCX0KKyAgICAgIGVsc2UKKwlzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbi4uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9UcCYgX19waXZvdCkKKyAgICB7CisgICAgICB3aGlsZSAodHJ1ZSkKKwl7CisJICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQorCSAgICArK19fZmlyc3Q7CisJICAtLV9fbGFzdDsKKwkgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKKwkgICAgLS1fX2xhc3Q7CisJICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOworCSAgKytfX2ZpcnN0OworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24uLi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgY29uc3QgX1RwJiBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCisJICAgICsrX19maXJzdDsKKwkgIC0tX19sYXN0OworCSAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKKwkgICAgLS1fX2xhc3Q7CisJICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOworCSAgKytfX2ZpcnN0OworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24uLi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb25fcGl2b3QoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkJX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKKyAgICAgIHN0ZDo6X19tb3ZlX21lZGlhbl90b19maXJzdChfX2ZpcnN0LCBfX2ZpcnN0ICsgMSwgX19taWQsIF9fbGFzdCAtIDEpOworICAgICAgcmV0dXJuIHN0ZDo6X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QgKyAxLCBfX2xhc3QsICpfX2ZpcnN0KTsKKyAgICB9CisKKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbi4uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb25fcGl2b3QoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkJX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOworICAgICAgc3RkOjpfX21vdmVfbWVkaWFuX3RvX2ZpcnN0KF9fZmlyc3QsIF9fZmlyc3QgKyAxLCBfX21pZCwgX19sYXN0IC0gMSwKKwkJCQkgIF9fY29tcCk7CisgICAgICByZXR1cm4gc3RkOjpfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCArIDEsIF9fbGFzdCwgKl9fZmlyc3QsIF9fY29tcCk7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCByb3V0aW5lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplPgorICAgIHZvaWQKKyAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKKyAgICB7CisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IGludChfU190aHJlc2hvbGQpKQorCXsKKwkgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApCisJICAgIHsKKwkgICAgICBfR0xJQkNYWF9TVERfQTo6cGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwkgIC0tX19kZXB0aF9saW1pdDsKKwkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2N1dCA9CisJICAgIHN0ZDo6X191bmd1YXJkZWRfcGFydGl0aW9uX3Bpdm90KF9fZmlyc3QsIF9fbGFzdCk7CisJICBzdGQ6Ol9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CisJICBfX2xhc3QgPSBfX2N1dDsKKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCByb3V0aW5lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCQkgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IGludChfU190aHJlc2hvbGQpKQorCXsKKwkgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApCisJICAgIHsKKwkgICAgICBfR0xJQkNYWF9TVERfQTo6cGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCSAgLS1fX2RlcHRoX2xpbWl0OworCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fY3V0ID0KKwkgICAgc3RkOjpfX3VuZ3VhcmRlZF9wYXJ0aXRpb25fcGl2b3QoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworCSAgc3RkOjpfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CisJICBfX2xhc3QgPSBfX2N1dDsKKwl9CisgICAgfQorCisgIC8vIHNvcnQKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplPgorICAgIHZvaWQKKyAgICBfX2ludHJvc2VsZWN0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19udGgsCisJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1NpemUgX19kZXB0aF9saW1pdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKQorCXsKKwkgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApCisJICAgIHsKKwkgICAgICBzdGQ6Ol9faGVhcF9zZWxlY3QoX19maXJzdCwgX19udGggKyAxLCBfX2xhc3QpOworCisJICAgICAgLy8gUGxhY2UgdGhlIG50aCBsYXJnZXN0IGVsZW1lbnQgaW4gaXRzIGZpbmFsIHBvc2l0aW9uLgorCSAgICAgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbnRoKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwkgIC0tX19kZXB0aF9saW1pdDsKKwkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2N1dCA9CisJICAgIHN0ZDo6X191bmd1YXJkZWRfcGFydGl0aW9uX3Bpdm90KF9fZmlyc3QsIF9fbGFzdCk7CisJICBpZiAoX19jdXQgPD0gX19udGgpCisJICAgIF9fZmlyc3QgPSBfX2N1dDsKKwkgIGVsc2UKKwkgICAgX19sYXN0ID0gX19jdXQ7CisJfQorICAgICAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX2ludHJvc2VsZWN0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19udGgsCisJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1NpemUgX19kZXB0aF9saW1pdCwKKwkJICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykKKwl7CisJICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKQorCSAgICB7CisJICAgICAgc3RkOjpfX2hlYXBfc2VsZWN0KF9fZmlyc3QsIF9fbnRoICsgMSwgX19sYXN0LCBfX2NvbXApOworCSAgICAgIC8vIFBsYWNlIHRoZSBudGggbGFyZ2VzdCBlbGVtZW50IGluIGl0cyBmaW5hbCBwb3NpdGlvbi4KKwkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX250aCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJICAtLV9fZGVwdGhfbGltaXQ7CisJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19jdXQgPQorCSAgICBzdGQ6Ol9fdW5ndWFyZGVkX3BhcnRpdGlvbl9waXZvdChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisJICBpZiAoX19jdXQgPD0gX19udGgpCisJICAgIF9fZmlyc3QgPSBfX2N1dDsKKwkgIGVsc2UKKwkgICAgX19sYXN0ID0gX19jdXQ7CisJfQorICAgICAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKyAgICB9CisKKyAgLy8gbnRoX2VsZW1lbnQKKworICAvLyBsb3dlcl9ib3VuZCBtb3ZlZCB0byBzdGxfYWxnb2Jhc2UuaAorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB3aGljaCBAcCBfX3ZhbCBjb3VsZCBiZSBpbnNlcnRlZAorICAgKiAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG9yZGVyaW5nLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fdmFsICAgICBUaGUgc2VhcmNoIHRlcm0uCisgICAqICBAcGFyYW0gIF9fY29tcCAgICBBIGZ1bmN0b3IgdG8gdXNlIGZvciBjb21wYXJpc29ucy4KKyAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgPGVtPm5vdCBsZXNzCisgICAqICAgICAgICAgICB0aGFuPC9lbT4gQHAgX192YWwsIG9yIGVuZCgpIGlmIGV2ZXJ5IGVsZW1lbnQgaXMgbGVzcworICAgKiAgICAgICAgICAgdGhhbiBAcCBfX3ZhbC4KKyAgICogIEBpbmdyb3VwIGJpbmFyeV9zZWFyY2hfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgZWZmZWN0cyBvbiBvcmRlcmluZyBhcworICAgKiAgdGhlIGZ1bmN0aW9uIHVzZWQgZm9yIHRoZSBpbml0aWFsIHNvcnQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCWNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXJfcHJlZChfX2ZpcnN0LCBfX2xhc3QsCisJCQkJCQlfX3ZhbCwgX19jb21wKTsKKworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgd2hpbGUgKF9fbGVuID4gMCkKKwl7CisJICBfRGlzdGFuY2VUeXBlIF9faGFsZiA9IF9fbGVuID4+IDE7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdDsKKwkgIHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKKwkgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpCisJICAgIHsKKwkgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CisJICAgICAgKytfX2ZpcnN0OworCSAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOworCSAgICB9CisJICBlbHNlCisJICAgIF9fbGVuID0gX19oYWxmOworCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kcyB0aGUgbGFzdCBwb3NpdGlvbiBpbiB3aGljaCBAcCBfX3ZhbCBjb3VsZCBiZSBpbnNlcnRlZAorICAgKiAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG9yZGVyaW5nLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fdmFsICAgICBUaGUgc2VhcmNoIHRlcm0uCisgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBncmVhdGVyIHRoYW4gQHAgX192YWwsCisgICAqICAgICAgICAgICBvciBlbmQoKSBpZiBubyBlbGVtZW50cyBhcmUgZ3JlYXRlciB0aGFuIEBwIF9fdmFsLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1RwLCBfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF91cHBlcihfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKKworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgd2hpbGUgKF9fbGVuID4gMCkKKwl7CisJICBfRGlzdGFuY2VUeXBlIF9faGFsZiA9IF9fbGVuID4+IDE7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdDsKKwkgIHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKKwkgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKKwkgICAgX19sZW4gPSBfX2hhbGY7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CisJICAgICAgKytfX2ZpcnN0OworCSAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBsYXN0IHBvc2l0aW9uIGluIHdoaWNoIEBwIF9fdmFsIGNvdWxkIGJlIGluc2VydGVkCisgICAqICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JkZXJpbmcuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX192YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIEEgZnVuY3RvciB0byB1c2UgZm9yIGNvbXBhcmlzb25zLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgZ3JlYXRlciB0aGFuIEBwIF9fdmFsLAorICAgKiAgICAgICAgICAgb3IgZW5kKCkgaWYgbm8gZWxlbWVudHMgYXJlIGdyZWF0ZXIgdGhhbiBAcCBfX3ZhbC4KKyAgICogIEBpbmdyb3VwIGJpbmFyeV9zZWFyY2hfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgZWZmZWN0cyBvbiBvcmRlcmluZyBhcworICAgKiAgdGhlIGZ1bmN0aW9uIHVzZWQgZm9yIHRoZSBpbml0aWFsIHNvcnQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCWNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9UcCwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXJfcHJlZChfX2ZpcnN0LCBfX2xhc3QsCisJCQkJCQlfX3ZhbCwgX19jb21wKTsKKworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgd2hpbGUgKF9fbGVuID4gMCkKKwl7CisJICBfRGlzdGFuY2VUeXBlIF9faGFsZiA9IF9fbGVuID4+IDE7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdDsKKwkgIHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKKwkgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCisJICAgIF9fbGVuID0gX19oYWxmOworCSAgZWxzZQorCSAgICB7CisJICAgICAgX19maXJzdCA9IF9fbWlkZGxlOworCSAgICAgICsrX19maXJzdDsKKwkgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kcyB0aGUgbGFyZ2VzdCBzdWJyYW5nZSBpbiB3aGljaCBAcCBfX3ZhbCBjb3VsZCBiZSBpbnNlcnRlZAorICAgKiAgICAgICAgIGF0IGFueSBwbGFjZSBpbiBpdCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcmRlcmluZy4KKyAgICogIEBpbmdyb3VwIGJpbmFyeV9zZWFyY2hfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3ZhbCAgICAgVGhlIHNlYXJjaCB0ZXJtLgorICAgKiAgQHJldHVybiAgQW4gcGFpciBvZiBpdGVyYXRvcnMgZGVmaW5pbmcgdGhlIHN1YnJhbmdlLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICogIEBjb2RlCisgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpLAorICAgKiAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKSkKKyAgICogIEBlbmRjb2RlCisgICAqICBidXQgZG9lcyBub3QgYWN0dWFsbHkgY2FsbCB0aG9zZSBmdW5jdGlvbnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZSwgX1RwPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1RwLCBfVmFsdWVUeXBlPikJCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7ICAgICAgCisKKyAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisgCisgICAgICB3aGlsZSAoX19sZW4gPiAwKQorCXsKKwkgIF9EaXN0YW5jZVR5cGUgX19oYWxmID0gX19sZW4gPj4gMTsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWRkbGUgPSBfX2ZpcnN0OworCSAgc3RkOjphZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOworCSAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKQorCSAgICB7CisJICAgICAgX19maXJzdCA9IF9fbWlkZGxlOworCSAgICAgICsrX19maXJzdDsKKwkgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKKwkgICAgfQorCSAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCisJICAgIF9fbGVuID0gX19oYWxmOworCSAgZWxzZQorCSAgICB7CisJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xlZnQgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLAorCQkJCQkJCSBfX3ZhbCk7CisJICAgICAgc3RkOjphZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKKwkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmlnaHQgPSBzdGQ6OnVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsCisJCQkJCQkJICBfX3ZhbCk7CisJICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4oX19sZWZ0LCBfX3JpZ2h0KTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+KF9fZmlyc3QsIF9fZmlyc3QpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kcyB0aGUgbGFyZ2VzdCBzdWJyYW5nZSBpbiB3aGljaCBAcCBfX3ZhbCBjb3VsZCBiZSBpbnNlcnRlZAorICAgKiAgICAgICAgIGF0IGFueSBwbGFjZSBpbiBpdCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcmRlcmluZy4KKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX192YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIEEgZnVuY3RvciB0byB1c2UgZm9yIGNvbXBhcmlzb25zLgorICAgKiAgQHJldHVybiAgQW4gcGFpciBvZiBpdGVyYXRvcnMgZGVmaW5pbmcgdGhlIHN1YnJhbmdlLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICogIEBjb2RlCisgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCksCisgICAqICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCkpCisgICAqICBAZW5kY29kZQorICAgKiAgYnV0IGRvZXMgbm90IGFjdHVhbGx5IGNhbGwgdGhvc2UgZnVuY3Rpb25zLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHBhaXI8X0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQljb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlLCBfVHA+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1RwLCBfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF9sb3dlcl9wcmVkKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQkJCV9fdmFsLCBfX2NvbXApOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX3VwcGVyX3ByZWQoX19maXJzdCwgX19sYXN0LAorCQkJCQkJX192YWwsIF9fY29tcCk7CisKKyAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHdoaWxlIChfX2xlbiA+IDApCisJeworCSAgX0Rpc3RhbmNlVHlwZSBfX2hhbGYgPSBfX2xlbiA+PiAxOworCSAgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3Q7CisJICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CisJICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKQorCSAgICB7CisJICAgICAgX19maXJzdCA9IF9fbWlkZGxlOworCSAgICAgICsrX19maXJzdDsKKwkgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKKwkgICAgfQorCSAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQorCSAgICBfX2xlbiA9IF9faGFsZjsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sZWZ0ID0gc3RkOjpsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwKKwkJCQkJCQkgX192YWwsIF9fY29tcCk7CisJICAgICAgc3RkOjphZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKKwkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmlnaHQgPSBzdGQ6OnVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsCisJCQkJCQkJICBfX3ZhbCwgX19jb21wKTsKKwkgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yPihfX2xlZnQsIF9fcmlnaHQpOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4oX19maXJzdCwgX19maXJzdCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIERldGVybWluZXMgd2hldGhlciBhbiBlbGVtZW50IGV4aXN0cyBpbiBhIHJhbmdlLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fdmFsICAgICBUaGUgc2VhcmNoIHRlcm0uCisgICAqICBAcmV0dXJuIFRydWUgaWYgQHAgX192YWwgKG9yIGl0cyBlcXVpdmFsZW50KSBpcyBpbiBbQHAKKyAgICogIF9fZmlyc3QsQHAgX19sYXN0IF0uCisgICAqCisgICAqICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhY3R1YWxseSByZXR1cm4gYW4gaXRlcmF0b3IgdG8gQHAgX192YWwuICBGb3IKKyAgICogIHRoYXQsIHVzZSBzdGQ6OmZpbmQgb3IgYSBjb250YWluZXIncyBzcGVjaWFsaXplZCBmaW5kIG1lbWJlciBmdW5jdGlvbnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBib29sCisgICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9UcCwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19pID0gc3RkOjpsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKKyAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGVsZW1lbnQgZXhpc3RzIGluIGEgcmFuZ2UuCisgICAqICBAaW5ncm91cCBiaW5hcnlfc2VhcmNoX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX192YWwgICAgIFRoZSBzZWFyY2ggdGVybS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIEEgZnVuY3RvciB0byB1c2UgZm9yIGNvbXBhcmlzb25zLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAcCBfX3ZhbCAob3IgaXRzIGVxdWl2YWxlbnQpIGlzIGluIEBwIFtfX2ZpcnN0LF9fbGFzdF0uCisgICAqCisgICAqICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhY3R1YWxseSByZXR1cm4gYW4gaXRlcmF0b3IgdG8gQHAgX192YWwuICBGb3IKKyAgICogIHRoYXQsIHVzZSBzdGQ6OmZpbmQgb3IgYSBjb250YWluZXIncyBzcGVjaWFsaXplZCBmaW5kIG1lbWJlciBmdW5jdGlvbnMuCisgICAqCisgICAqICBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3RzIG9uIG9yZGVyaW5nIGFzCisgICAqICB0aGUgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIGluaXRpYWwgc29ydC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBib29sCisgICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9UcCwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXJfcHJlZChfX2ZpcnN0LCBfX2xhc3QsCisJCQkJCQlfX3ZhbCwgX19jb21wKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF91cHBlcl9wcmVkKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQkJCV9fdmFsLCBfX2NvbXApOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9faSA9IHN0ZDo6bG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKKyAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFib29sKF9fY29tcChfX3ZhbCwgKl9faSkpOworICAgIH0KKworICAvLyBtZXJnZQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgX19tZXJnZV9hZGFwdGl2ZSByb3V0aW5lcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX21vdmVfbWVyZ2VfYWRhcHRpdmUoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJCSAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkJCSAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJeworCSAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QyKTsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0MSk7CisJICAgICAgKytfX2ZpcnN0MTsKKwkgICAgfQorCSAgKytfX3Jlc3VsdDsKKwl9CisgICAgICBpZiAoX19maXJzdDEgIT0gX19sYXN0MSkKKwlfR0xJQkNYWF9NT1ZFMyhfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIF9fbWVyZ2VfYWRhcHRpdmUgcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fbW92ZV9tZXJnZV9hZGFwdGl2ZShfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCQkJICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkJICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQorCXsKKwkgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQorCSAgICB7CisJICAgICAgKl9fcmVzdWx0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdDIpOworCSAgICAgICsrX19maXJzdDI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QxKTsKKwkgICAgICArK19fZmlyc3QxOworCSAgICB9CisJICArK19fcmVzdWx0OworCX0KKyAgICAgIGlmIChfX2ZpcnN0MSAhPSBfX2xhc3QxKQorCV9HTElCQ1hYX01PVkUzKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgX19tZXJnZV9hZGFwdGl2ZSByb3V0aW5lcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IzPgorICAgIHZvaWQKKyAgICBfX21vdmVfbWVyZ2VfYWRhcHRpdmVfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19maXJzdDEsCisJCQkJICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19sYXN0MSwKKwkJCQkgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkJCQkgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkJCSAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IzIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQorCXsKKwkgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CisJICByZXR1cm47CisJfQorICAgICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKKwlyZXR1cm47CisKKyAgICAgIC0tX19sYXN0MTsKKyAgICAgIC0tX19sYXN0MjsKKyAgICAgIHdoaWxlICh0cnVlKQorCXsKKwkgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKQorCSAgICB7CisJICAgICAgKi0tX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2xhc3QxKTsKKwkgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKKwkJeworCQkgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKKwkJICByZXR1cm47CisJCX0KKwkgICAgICAtLV9fbGFzdDE7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICotLV9fcmVzdWx0ID0gX0dMSUJDWFhfTU9WRSgqX19sYXN0Mik7CisJICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCisJCXJldHVybjsKKwkgICAgICAtLV9fbGFzdDI7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgX19tZXJnZV9hZGFwdGl2ZSByb3V0aW5lcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IzLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19tb3ZlX21lcmdlX2FkYXB0aXZlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fZmlyc3QxLAorCQkJCSAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fbGFzdDEsCisJCQkJICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19maXJzdDIsCisJCQkJICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19sYXN0MiwKKwkJCQkgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMyBfX3Jlc3VsdCwKKwkJCQkgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCisJeworCSAgX0dMSUJDWFhfTU9WRV9CQUNLV0FSRDMoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQorCXJldHVybjsKKworICAgICAgLS1fX2xhc3QxOworICAgICAgLS1fX2xhc3QyOworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKQorCSAgICB7CisJICAgICAgKi0tX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2xhc3QxKTsKKwkgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKKwkJeworCQkgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKKwkJICByZXR1cm47CisJCX0KKwkgICAgICAtLV9fbGFzdDE7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICotLV9fcmVzdWx0ID0gX0dMSUJDWFhfTU9WRSgqX19sYXN0Mik7CisJICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCisJCXJldHVybjsKKwkgICAgICAtLV9fbGFzdDI7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEKKyAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX2ZpcnN0LAorCQkgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX21pZGRsZSwKKwkJICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19sYXN0LAorCQkgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAorCQkgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2J1ZmZlciwKKwkJICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCisgICAgeworICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19idWZmZXJfZW5kOworICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkKKwl7CisJICBpZiAoX19sZW4yKQorCSAgICB7CisJICAgICAgX19idWZmZXJfZW5kID0gX0dMSUJDWFhfTU9WRTMoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOworCSAgICAgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOworCSAgICAgIHJldHVybiBfR0xJQkNYWF9NT1ZFMyhfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gX19maXJzdDsKKwl9CisgICAgICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkKKwl7CisJICBpZiAoX19sZW4xKQorCSAgICB7CisJICAgICAgX19idWZmZXJfZW5kID0gX0dMSUJDWFhfTU9WRTMoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKKwkgICAgICBfR0xJQkNYWF9NT1ZFMyhfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKKwkgICAgICByZXR1cm4gX0dMSUJDWFhfTU9WRV9CQUNLV0FSRDMoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gX19sYXN0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBzdGQ6OnJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKKwkgIHN0ZDo6YWR2YW5jZShfX2ZpcnN0LCBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpKTsKKwkgIHJldHVybiBfX2ZpcnN0OworCX0KKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBtZXJnZSByb3V0aW5lcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAorCSAgIHR5cGVuYW1lIF9Qb2ludGVyPgorICAgIHZvaWQKKyAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19taWRkbGUsCisJCSAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKKwkJICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCisgICAgeworICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpCisJeworCSAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gX0dMSUJDWFhfTU9WRTMoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKKwkgIHN0ZDo6X19tb3ZlX21lcmdlX2FkYXB0aXZlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsCisJCQkJICAgICBfX2ZpcnN0KTsKKwl9CisgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkKKwl7CisJICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBfR0xJQkNYWF9NT1ZFMyhfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CisJICBzdGQ6Ol9fbW92ZV9tZXJnZV9hZGFwdGl2ZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsCisJCQkJCSAgICAgIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOworCSAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOworCSAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOworCSAgaWYgKF9fbGVuMSA+IF9fbGVuMikKKwkgICAgeworCSAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOworCSAgICAgIHN0ZDo6YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CisJICAgICAgX19zZWNvbmRfY3V0ID0gc3RkOjpsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LAorCQkJCQkgICAgICAqX19maXJzdF9jdXQpOworCSAgICAgIF9fbGVuMjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKKwkgICAgICBzdGQ6OmFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKKwkgICAgICBfX2ZpcnN0X2N1dCA9IHN0ZDo6dXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsCisJCQkJCSAgICAgKl9fc2Vjb25kX2N1dCk7CisJICAgICAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOworCSAgICB9CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbmV3X21pZGRsZSA9CisJICAgIHN0ZDo6X19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCisJCQkJICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCisJCQkJICAgX19idWZmZXJfc2l6ZSk7CisJICBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKKwkJCQlfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CisJICBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKKwkJCQlfX2xlbjEgLSBfX2xlbjExLAorCQkJCV9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgCisJICAgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19taWRkbGUsCisJCSAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKKwkJICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCisJCSAgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKQorCXsKKwkgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IF9HTElCQ1hYX01PVkUzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CisJICBzdGQ6Ol9fbW92ZV9tZXJnZV9hZGFwdGl2ZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LAorCQkJCSAgICAgX19maXJzdCwgX19jb21wKTsKKwl9CisgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkKKwl7CisJICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBfR0xJQkNYWF9NT1ZFMyhfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CisJICBzdGQ6Ol9fbW92ZV9tZXJnZV9hZGFwdGl2ZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsCisJCQkJCSAgICAgIF9fYnVmZmVyX2VuZCwgX19sYXN0LCBfX2NvbXApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKKwkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CisJICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CisJICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CisJICBpZiAoX19sZW4xID4gX19sZW4yKQorCSAgICB7CisJICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CisJICAgICAgc3RkOjphZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKKwkgICAgICBfX3NlY29uZF9jdXQgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwKKwkJCQkJICAgICAgX19jb21wKTsKKwkgICAgICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CisJICAgICAgc3RkOjphZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CisJICAgICAgX19maXJzdF9jdXQgPSBzdGQ6OnVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAorCQkJCQkgICAgIF9fY29tcCk7CisJICAgICAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOworCSAgICB9CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbmV3X21pZGRsZSA9CisJICAgIHN0ZDo6X19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCisJCQkJICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCisJCQkJICAgX19idWZmZXJfc2l6ZSk7CisJICBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKKwkJCQlfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKKwkgIHN0ZDo6X19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAorCQkJCV9fbGVuMSAtIF9fbGVuMTEsCisJCQkJX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsCisJCQkJX19idWZmZXJfc2l6ZSwgX19jb21wKTsKKwl9CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICB2b2lkCisgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCQkJICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQorICAgIHsKKyAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKKwlyZXR1cm47CisgICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpCisJeworCSAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQorCSAgICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CisJICByZXR1cm47CisJfQorICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CisgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOworICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOworICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOworICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikKKwl7CisJICBfX2xlbjExID0gX19sZW4xIC8gMjsKKwkgIHN0ZDo6YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CisJICBfX3NlY29uZF9jdXQgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CisJICBfX2xlbjIyID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CisJICBzdGQ6OmFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKKwkgIF9fZmlyc3RfY3V0ID0gc3RkOjp1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CisJICBfX2xlbjExID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CisJfQorICAgICAgc3RkOjpyb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOworICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKKyAgICAgIHN0ZDo6YWR2YW5jZShfX25ld19taWRkbGUsIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOworICAgICAgc3RkOjpfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCisJCQkJICBfX2xlbjExLCBfX2xlbjIyKTsKKyAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAorCQkJCSAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgbWVyZ2Ugcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCQkJICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAorCQkJICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKKwlyZXR1cm47CisgICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpCisJeworCSAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKKwkgICAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOworCSAgcmV0dXJuOworCX0KKyAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdF9jdXQgPSBfX2ZpcnN0OworICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKKyAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKKyAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKKyAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpCisJeworCSAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CisJICBzdGQ6OmFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOworCSAgX19zZWNvbmRfY3V0ID0gc3RkOjpsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsCisJCQkJCSAgX19jb21wKTsKKwkgIF9fbGVuMjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfX2xlbjIyID0gX19sZW4yIC8gMjsKKwkgIHN0ZDo6YWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOworCSAgX19maXJzdF9jdXQgPSBzdGQ6OnVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAorCQkJCQkgX19jb21wKTsKKwkgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKKwl9CisgICAgICBzdGQ6OnJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CisgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OworICAgICAgc3RkOjphZHZhbmNlKF9fbmV3X21pZGRsZSwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CisgICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKKwkJCQkgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CisgICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKKwkJCQkgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIE1lcmdlcyB0d28gc29ydGVkIHJhbmdlcyBpbiBwbGFjZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbWlkZGxlICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBNZXJnZXMgdHdvIHNvcnRlZCBhbmQgY29uc2VjdXRpdmUgcmFuZ2VzLCBbX19maXJzdCxfX21pZGRsZSkgYW5kCisgICAqICBbX19taWRkbGUsX19sYXN0KSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiBbX19maXJzdCxfX2xhc3QpLiAgVGhlCisgICAqICBvdXRwdXQgd2lsbCBiZSBzb3J0ZWQuICBUaGUgc29ydCBpcyBAZSBzdGFibGUsIHRoYXQgaXMsIGZvcgorICAgKiAgZXF1aXZhbGVudCBlbGVtZW50cyBpbiB0aGUgdHdvIHJhbmdlcywgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QKKyAgICogIHJhbmdlIHdpbGwgYWx3YXlzIGNvbWUgYmVmb3JlIGVsZW1lbnRzIGZyb20gdGhlIHNlY29uZC4KKyAgICoKKyAgICogIElmIGVub3VnaCBhZGRpdGlvbmFsIG1lbW9yeSBpcyBhdmFpbGFibGUsIHRoaXMgdGFrZXMgKF9fbGFzdC1fX2ZpcnN0KS0xCisgICAqICBjb21wYXJpc29ucy4gIE90aGVyd2lzZSBhbiBObG9nTiBhbGdvcml0aG0gaXMgdXNlZCwgd2hlcmUgTiBpcworICAgKiAgZGlzdGFuY2UoX19maXJzdCxfX2xhc3QpLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKKwkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisgICAgICAgICAgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICAgICAgICBfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZChfX2ZpcnN0LCBfX21pZGRsZSk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkKF9fbWlkZGxlLCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCisJcmV0dXJuOworCisgICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOworICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOworCisgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LAorCQkJCQkJCQkgIF9fbGFzdCk7CisgICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQorCXN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CisgICAgICBlbHNlCisJc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAorCQkJICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgTWVyZ2VzIHR3byBzb3J0ZWQgcmFuZ2VzIGluIHBsYWNlLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19taWRkbGUgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICAgQSBmdW5jdG9yIHRvIHVzZSBmb3IgY29tcGFyaXNvbnMuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgTWVyZ2VzIHR3byBzb3J0ZWQgYW5kIGNvbnNlY3V0aXZlIHJhbmdlcywgW19fZmlyc3QsX19taWRkbGUpIGFuZAorICAgKiAgW21pZGRsZSxsYXN0KSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiBbX19maXJzdCxfX2xhc3QpLiAgVGhlIG91dHB1dCB3aWxsCisgICAqICBiZSBzb3J0ZWQuICBUaGUgc29ydCBpcyBAZSBzdGFibGUsIHRoYXQgaXMsIGZvciBlcXVpdmFsZW50CisgICAqICBlbGVtZW50cyBpbiB0aGUgdHdvIHJhbmdlcywgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QgcmFuZ2Ugd2lsbCBhbHdheXMKKyAgICogIGNvbWUgYmVmb3JlIGVsZW1lbnRzIGZyb20gdGhlIHNlY29uZC4KKyAgICoKKyAgICogIElmIGVub3VnaCBhZGRpdGlvbmFsIG1lbW9yeSBpcyBhdmFpbGFibGUsIHRoaXMgdGFrZXMgKF9fbGFzdC1fX2ZpcnN0KS0xCisgICAqICBjb21wYXJpc29ucy4gIE90aGVyd2lzZSBhbiBObG9nTiBhbGdvcml0aG0gaXMgdXNlZCwgd2hlcmUgTiBpcworICAgKiAgZGlzdGFuY2UoX19maXJzdCxfX2xhc3QpLgorICAgKgorICAgKiAgVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgZWZmZWN0cyBvbiBvcmRlcmluZyBhcworICAgKiAgdGhlIGZ1bmN0aW9uIHVzZWQgZm9yIHRoZSBpbml0aWFsIHNvcnQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKKwkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAorCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAorCQkgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorICAgICAgICAgIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCSAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkgICAgX1ZhbHVlVHlwZSwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3ByZWQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3ByZWQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQorCXJldHVybjsKKworICAgICAgY29uc3QgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKKyAgICAgIGNvbnN0IF9EaXN0YW5jZVR5cGUgX19sZW4yID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKKworICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwKKwkJCQkJCQkJICBfX2xhc3QpOworICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKKwlzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLAorCQkJCSAgICBfX2xlbjIsIF9fY29tcCk7CisgICAgICBlbHNlCisJc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAorCQkJICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAorCQkJICAgICAgX19jb21wKTsKKyAgICB9CisKKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIF9fbWVyZ2Vfc29ydF9sb29wIHJvdXRpbmVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX19tb3ZlX21lcmdlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJeworCSAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QyKTsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0MSk7CisJICAgICAgKytfX2ZpcnN0MTsKKwkgICAgfQorCSAgKytfX3Jlc3VsdDsKKwl9CisgICAgICByZXR1cm4gX0dMSUJDWFhfTU9WRTMoX19maXJzdDIsIF9fbGFzdDIsCisJCQkgICAgX0dMSUJDWFhfTU9WRTMoX19maXJzdDEsIF9fbGFzdDEsCisJCQkJCSAgIF9fcmVzdWx0KSk7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgX19tZXJnZV9zb3J0X2xvb3Agcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX19tb3ZlX21lcmdlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwl7CisJICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QyKTsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0MSk7CisJICAgICAgKytfX2ZpcnN0MTsKKwkgICAgfQorCSAgKytfX3Jlc3VsdDsKKwl9CisgICAgICByZXR1cm4gX0dMSUJDWFhfTU9WRTMoX19maXJzdDIsIF9fbGFzdDIsCisJCQkgICAgX0dMSUJDWFhfTU9WRTMoX19maXJzdDEsIF9fbGFzdDEsCisJCQkJCSAgIF9fcmVzdWx0KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIHZvaWQKKyAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IxIF9fZmlyc3QsCisJCSAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjEgX19sYXN0LAorCQkgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IyIF9fcmVzdWx0LAorCQkgICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUpCisgICAgeworICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CisKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApCisJeworCSAgX19yZXN1bHQgPSBzdGQ6Ol9fbW92ZV9tZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCisJCQkJICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKKwkJCQkgICAgICAgX19maXJzdCArIF9fdHdvX3N0ZXAsIF9fcmVzdWx0KTsKKwkgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKKwl9CisKKyAgICAgIF9fc3RlcF9zaXplID0gc3RkOjptaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CisgICAgICBzdGQ6Ol9fbW92ZV9tZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCisJCQlfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwgX19yZXN1bHQpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IxLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyYXRvcjEgX19maXJzdCwKKwkJICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yMSBfX2xhc3QsCisJCSAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKKwkJICAgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOworCisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKQorCXsKKwkgIF9fcmVzdWx0ID0gc3RkOjpfX21vdmVfbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAorCQkJCSAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCisJCQkJICAgICAgIF9fZmlyc3QgKyBfX3R3b19zdGVwLAorCQkJCSAgICAgICBfX3Jlc3VsdCwgX19jb21wKTsKKwkgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKKwl9CisgICAgICBfX3N0ZXBfc2l6ZSA9IHN0ZDo6bWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOworCisgICAgICBzdGQ6Ol9fbW92ZV9tZXJnZShfX2ZpcnN0LF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKKwkJCV9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LCBfX3Jlc3VsdCwgX19jb21wKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgdm9pZAorICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCQkJICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKKyAgICB7CisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpCisJeworCSAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOworCSAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CisJfQorICAgICAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpCisJeworCSAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CisJICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKKwl9CisgICAgICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworICAgIH0KKworICBlbnVtIHsgX1NfY2h1bmtfc2l6ZSA9IDcgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Qb2ludGVyPgorICAgIHZvaWQKKyAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZTsKKworICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKKyAgICAgIGNvbnN0IF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOworCisgICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfU19jaHVua19zaXplOworICAgICAgc3RkOjpfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOworCisgICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikKKwl7CisJICBzdGQ6Ol9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKKwkgIF9fc3RlcF9zaXplICo9IDI7CisJICBzdGQ6Ol9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CisJICBfX3N0ZXBfc2l6ZSAqPSAyOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2U7CisKKyAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBjb25zdCBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKKworICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX1NfY2h1bmtfc2l6ZTsKKyAgICAgIHN0ZDo6X19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOworCisgICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikKKwl7CisJICBzdGQ6Ol9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsCisJCQkJIF9fc3RlcF9zaXplLCBfX2NvbXApOworCSAgX19zdGVwX3NpemUgKj0gMjsKKwkgIHN0ZDo6X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsCisJCQkJIF9fc3RlcF9zaXplLCBfX2NvbXApOworCSAgX19zdGVwX3NpemUgKj0gMjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1BvaW50ZXIsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIHZvaWQKKyAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKKyAgICB7CisgICAgICBjb25zdCBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKKyAgICAgIGNvbnN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKKyAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpCisJeworCSAgc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLAorCQkJCSAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKKwkgIHN0ZDo6X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LAorCQkJCSAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgc3RkOjpfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKKwkgIHN0ZDo6X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKKwl9CisgICAgICBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKKwkJCSAgICBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKKwkJCSAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLAorCQkJICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfUG9pbnRlciwKKwkgICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBjb25zdCBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKKyAgICAgIGNvbnN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKKyAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpCisJeworCSAgc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwKKwkJCQkgICAgICBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOworCSAgc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLAorCQkJCSAgICAgIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHN0ZDo6X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKKwkgIHN0ZDo6X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2NvbXApOworCX0KKyAgICAgIHN0ZDo6X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAorCQkJICAgIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAorCQkJICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksCisJCQkgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCisJCQkgICAgX19jb21wKTsKKyAgICB9CisKKyAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzdGFibGUgc29ydGluZyByb3V0aW5lcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCisJCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkKKwl7CisJICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKKwkgIHJldHVybjsKKwl9CisgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKKyAgICAgIHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKKyAgICAgIHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOworICAgICAgc3RkOjpfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCisJCQkJICBfX21pZGRsZSAtIF9fZmlyc3QsCisJCQkJICBfX2xhc3QgLSBfX21pZGRsZSk7CisgICAgfQorCisgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc3RhYmxlIHNvcnRpbmcgcm91dGluZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpCisJeworCSAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKwkgIHJldHVybjsKKwl9CisgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKKyAgICAgIHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOworICAgICAgc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKKyAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAorCQkJCSAgX19taWRkbGUgLSBfX2ZpcnN0LAorCQkJCSAgX19sYXN0IC0gX19taWRkbGUsCisJCQkJICBfX2NvbXApOworICAgIH0KKworICAvLyBzdGFibGVfc29ydAorCisgIC8vIFNldCBhbGdvcml0aG1zOiBpbmNsdWRlcywgc2V0X3VuaW9uLCBzZXRfaW50ZXJzZWN0aW9uLCBzZXRfZGlmZmVyZW5jZSwKKyAgLy8gc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlLiAgQWxsIG9mIHRoZXNlIGFsZ29yaXRobXMgaGF2ZSB0aGUgcHJlY29uZGl0aW9uCisgIC8vIHRoYXQgdGhlaXIgaW5wdXQgcmFuZ2VzIGFyZSBzb3J0ZWQgYW5kIHRoZSBwb3N0Y29uZGl0aW9uIHRoYXQgdGhlaXIgb3V0cHV0CisgIC8vIHJhbmdlcyBhcmUgc29ydGVkLgorCisgIC8qKgorICAgKiAgQGJyaWVmIERldGVybWluZXMgd2hldGhlciBhbGwgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSBleGlzdHMgaW4gYSByYW5nZS4KKyAgICogIEBwYXJhbSAgX19maXJzdDEgIFN0YXJ0IG9mIHNlYXJjaCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0MSAgIEVuZCBvZiBzZWFyY2ggcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBTdGFydCBvZiBzZXF1ZW5jZQorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgRW5kIG9mIHNlcXVlbmNlLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBlYWNoIGVsZW1lbnQgaW4gW19fZmlyc3QyLF9fbGFzdDIpIGlzIGNvbnRhaW5lZCBpbiBvcmRlcgorICAgKiAgd2l0aGluIFtfX2ZpcnN0MSxfX2xhc3QxKS4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBleHBlY3RzIGJvdGggW19fZmlyc3QxLF9fbGFzdDEpIGFuZAorICAgKiAgW19fZmlyc3QyLF9fbGFzdDIpIHRvIGJlIHNvcnRlZC4gIFNlYXJjaGVzIGZvciB0aGUgcHJlc2VuY2Ugb2YKKyAgICogIGVhY2ggZWxlbWVudCBpbiBbX19maXJzdDIsX19sYXN0Mikgd2l0aGluIFtfX2ZpcnN0MSxfX2xhc3QxKS4KKyAgICogIFRoZSBpdGVyYXRvcnMgb3ZlciBlYWNoIHJhbmdlIG9ubHkgbW92ZSBmb3J3YXJkLCBzbyB0aGlzIGlzIGEKKyAgICogIGxpbmVhciBhbGdvcml0aG0uICBJZiBhbiBlbGVtZW50IGluIFtfX2ZpcnN0MixfX2xhc3QyKSBpcyBub3QKKyAgICogIGZvdW5kIGJlZm9yZSB0aGUgc2VhcmNoIGl0ZXJhdG9yIHJlYWNoZXMgQHAgX19sYXN0MiwgZmFsc2UgaXMKKyAgICogIHJldHVybmVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICBib29sCisgICAgaW5jbHVkZXMoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUyOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0KF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgIHJldHVybiBmYWxzZTsKKwllbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKKwkgICsrX19maXJzdDE7CisJZWxzZQorCSAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKKworICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIERldGVybWluZXMgd2hldGhlciBhbGwgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSBleGlzdHMgaW4gYSByYW5nZQorICAgKiAgdXNpbmcgY29tcGFyaXNvbi4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBTdGFydCBvZiBzZWFyY2ggcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBFbmQgb2Ygc2VhcmNoIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgU3RhcnQgb2Ygc2VxdWVuY2UKKyAgICogIEBwYXJhbSAgX19sYXN0MiAgIEVuZCBvZiBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIENvbXBhcmlzb24gZnVuY3Rpb24gdG8gdXNlLgorICAgKiAgQHJldHVybiBUcnVlIGlmIGVhY2ggZWxlbWVudCBpbiBbX19maXJzdDIsX19sYXN0MikgaXMgY29udGFpbmVkCisgICAqICBpbiBvcmRlciB3aXRoaW4gW19fZmlyc3QxLF9fbGFzdDEpIGFjY29yZGluZyB0byBjb21wLiAgRmFsc2UKKyAgICogIG90aGVyd2lzZS4gIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBleHBlY3RzIGJvdGggW19fZmlyc3QxLF9fbGFzdDEpIGFuZAorICAgKiAgW19fZmlyc3QyLF9fbGFzdDIpIHRvIGJlIHNvcnRlZC4gIFNlYXJjaGVzIGZvciB0aGUgcHJlc2VuY2Ugb2YKKyAgICogIGVhY2ggZWxlbWVudCBpbiBbX19maXJzdDIsX19sYXN0Mikgd2l0aGluIFtfX2ZpcnN0MSxfX2xhc3QxKSwKKyAgICogIHVzaW5nIGNvbXAgdG8gZGVjaWRlLiAgVGhlIGl0ZXJhdG9ycyBvdmVyIGVhY2ggcmFuZ2Ugb25seSBtb3ZlCisgICAqICBmb3J3YXJkLCBzbyB0aGlzIGlzIGEgbGluZWFyIGFsZ29yaXRobS4gIElmIGFuIGVsZW1lbnQgaW4KKyAgICogIFtfX2ZpcnN0MixfX2xhc3QyKSBpcyBub3QgZm91bmQgYmVmb3JlIHRoZSBzZWFyY2ggaXRlcmF0b3IKKyAgICogIHJlYWNoZXMgQHAgX19sYXN0MiwgZmFsc2UgaXMgcmV0dXJuZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wKKyAgICBpbmNsdWRlcyhfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZTIsIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0X3ByZWQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2NvbXApOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MiwgX19sYXN0MiwgX19maXJzdDEsIF9fY29tcCk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJICByZXR1cm4gZmFsc2U7CisJZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQorCSAgKytfX2ZpcnN0MTsKKwllbHNlCisJICArK19fZmlyc3QxLCArK19fZmlyc3QyOworCisgICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKKyAgICB9CisKKyAgLy8gbnRoX2VsZW1lbnQKKyAgLy8gbWVyZ2UKKyAgLy8gc2V0X2RpZmZlcmVuY2UKKyAgLy8gc2V0X2ludGVyc2VjdGlvbgorICAvLyBzZXRfdW5pb24KKyAgLy8gc3RhYmxlX3NvcnQKKyAgLy8gc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlCisgIC8vIG1pbl9lbGVtZW50CisgIC8vIG1heF9lbGVtZW50CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFBlcm11dGUgcmFuZ2UgaW50byB0aGUgbmV4dCBAZSBkaWN0aW9uYXJ5IG9yZGVyaW5nLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIFN0YXJ0IG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcmV0dXJuICBGYWxzZSBpZiB3cmFwcGVkIHRvIGZpcnN0IHBlcm11dGF0aW9uLCB0cnVlIG90aGVyd2lzZS4KKyAgICoKKyAgICogIFRyZWF0cyBhbGwgcGVybXV0YXRpb25zIG9mIHRoZSByYW5nZSBhcyBhIHNldCBvZiBAZSBkaWN0aW9uYXJ5IHNvcnRlZAorICAgKiAgc2VxdWVuY2VzLiAgUGVybXV0ZXMgdGhlIGN1cnJlbnQgc2VxdWVuY2UgaW50byB0aGUgbmV4dCBvbmUgb2YgdGhpcyBzZXQuCisgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgc2VxdWVuY2VzIHRvIGdlbmVyYXRlLiAgSWYgdGhlIHNlcXVlbmNlCisgICAqICBpcyB0aGUgbGFyZ2VzdCBvZiB0aGUgc2V0LCB0aGUgc21hbGxlc3QgaXMgZ2VuZXJhdGVkIGFuZCBmYWxzZSByZXR1cm5lZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4KKyAgICBib29sCisgICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCisJCSAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7CisgICAgICArK19faTsKKyAgICAgIGlmIChfX2kgPT0gX19sYXN0KQorCXJldHVybiBmYWxzZTsKKyAgICAgIF9faSA9IF9fbGFzdDsKKyAgICAgIC0tX19pOworCisgICAgICBmb3IoOzspCisJeworCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2lpID0gX19pOworCSAgLS1fX2k7CisJICBpZiAoKl9faSA8ICpfX2lpKQorCSAgICB7CisJICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ogPSBfX2xhc3Q7CisJICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCisJCXt9CisJICAgICAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2opOworCSAgICAgIHN0ZDo6cmV2ZXJzZShfX2lpLCBfX2xhc3QpOworCSAgICAgIHJldHVybiB0cnVlOworCSAgICB9CisJICBpZiAoX19pID09IF9fZmlyc3QpCisJICAgIHsKKwkgICAgICBzdGQ6OnJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBQZXJtdXRlIHJhbmdlIGludG8gdGhlIG5leHQgQGUgZGljdGlvbmFyeSBvcmRlcmluZyB1c2luZworICAgKiAgICAgICAgICBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBGYWxzZSBpZiB3cmFwcGVkIHRvIGZpcnN0IHBlcm11dGF0aW9uLCB0cnVlIG90aGVyd2lzZS4KKyAgICoKKyAgICogIFRyZWF0cyBhbGwgcGVybXV0YXRpb25zIG9mIHRoZSByYW5nZSBbX19maXJzdCxfX2xhc3QpIGFzIGEgc2V0IG9mCisgICAqICBAZSBkaWN0aW9uYXJ5IHNvcnRlZCBzZXF1ZW5jZXMgb3JkZXJlZCBieSBAcCBfX2NvbXAuICBQZXJtdXRlcyB0aGUgY3VycmVudAorICAgKiAgc2VxdWVuY2UgaW50byB0aGUgbmV4dCBvbmUgb2YgdGhpcyBzZXQuICBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUKKyAgICogIHNlcXVlbmNlcyB0byBnZW5lcmF0ZS4gIElmIHRoZSBzZXF1ZW5jZSBpcyB0aGUgbGFyZ2VzdCBvZiB0aGUgc2V0LCB0aGUKKyAgICogIHNtYWxsZXN0IGlzIGdlbmVyYXRlZCBhbmQgZmFsc2UgcmV0dXJuZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGJvb2wKKyAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKKwkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7CisgICAgICArK19faTsKKyAgICAgIGlmIChfX2kgPT0gX19sYXN0KQorCXJldHVybiBmYWxzZTsKKyAgICAgIF9faSA9IF9fbGFzdDsKKyAgICAgIC0tX19pOworCisgICAgICBmb3IoOzspCisJeworCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2lpID0gX19pOworCSAgLS1fX2k7CisJICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkKKwkgICAgeworCSAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19qID0gX19sYXN0OworCSAgICAgIHdoaWxlICghYm9vbChfX2NvbXAoKl9faSwgKi0tX19qKSkpCisJCXt9CisJICAgICAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2opOworCSAgICAgIHN0ZDo6cmV2ZXJzZShfX2lpLCBfX2xhc3QpOworCSAgICAgIHJldHVybiB0cnVlOworCSAgICB9CisJICBpZiAoX19pID09IF9fZmlyc3QpCisJICAgIHsKKwkgICAgICBzdGQ6OnJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBQZXJtdXRlIHJhbmdlIGludG8gdGhlIHByZXZpb3VzIEBlIGRpY3Rpb25hcnkgb3JkZXJpbmcuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEByZXR1cm4gIEZhbHNlIGlmIHdyYXBwZWQgdG8gbGFzdCBwZXJtdXRhdGlvbiwgdHJ1ZSBvdGhlcndpc2UuCisgICAqCisgICAqICBUcmVhdHMgYWxsIHBlcm11dGF0aW9ucyBvZiB0aGUgcmFuZ2UgYXMgYSBzZXQgb2YgQGUgZGljdGlvbmFyeSBzb3J0ZWQKKyAgICogIHNlcXVlbmNlcy4gIFBlcm11dGVzIHRoZSBjdXJyZW50IHNlcXVlbmNlIGludG8gdGhlIHByZXZpb3VzIG9uZSBvZiB0aGlzCisgICAqICBzZXQuICBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgc2VxdWVuY2VzIHRvIGdlbmVyYXRlLiAgSWYgdGhlCisgICAqICBzZXF1ZW5jZSBpcyB0aGUgc21hbGxlc3Qgb2YgdGhlIHNldCwgdGhlIGxhcmdlc3QgaXMgZ2VuZXJhdGVkIGFuZCBmYWxzZQorICAgKiAgcmV0dXJuZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+CisgICAgYm9vbAorICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAorCQkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIGZhbHNlOworICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2kgPSBfX2ZpcnN0OworICAgICAgKytfX2k7CisgICAgICBpZiAoX19pID09IF9fbGFzdCkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBfX2kgPSBfX2xhc3Q7CisgICAgICAtLV9faTsKKworICAgICAgZm9yKDs7KQorCXsKKwkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19paSA9IF9faTsKKwkgIC0tX19pOworCSAgaWYgKCpfX2lpIDwgKl9faSkKKwkgICAgeworCSAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19qID0gX19sYXN0OworCSAgICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQorCQl7fQorCSAgICAgIHN0ZDo6aXRlcl9zd2FwKF9faSwgX19qKTsKKwkgICAgICBzdGQ6OnJldmVyc2UoX19paSwgX19sYXN0KTsKKwkgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgfQorCSAgaWYgKF9faSA9PSBfX2ZpcnN0KQorCSAgICB7CisJICAgICAgc3RkOjpyZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CisJICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUGVybXV0ZSByYW5nZSBpbnRvIHRoZSBwcmV2aW91cyBAZSBkaWN0aW9uYXJ5IG9yZGVyaW5nIHVzaW5nCisgICAqICAgICAgICAgIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIEZhbHNlIGlmIHdyYXBwZWQgdG8gbGFzdCBwZXJtdXRhdGlvbiwgdHJ1ZSBvdGhlcndpc2UuCisgICAqCisgICAqICBUcmVhdHMgYWxsIHBlcm11dGF0aW9ucyBvZiB0aGUgcmFuZ2UgW19fZmlyc3QsX19sYXN0KSBhcyBhIHNldCBvZgorICAgKiAgQGUgZGljdGlvbmFyeSBzb3J0ZWQgc2VxdWVuY2VzIG9yZGVyZWQgYnkgQHAgX19jb21wLiAgUGVybXV0ZXMgdGhlIGN1cnJlbnQKKyAgICogIHNlcXVlbmNlIGludG8gdGhlIHByZXZpb3VzIG9uZSBvZiB0aGlzIHNldC4gIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUKKyAgICogIG1vcmUgc2VxdWVuY2VzIHRvIGdlbmVyYXRlLiAgSWYgdGhlIHNlcXVlbmNlIGlzIHRoZSBzbWFsbGVzdCBvZiB0aGUgc2V0LAorICAgKiAgdGhlIGxhcmdlc3QgaXMgZ2VuZXJhdGVkIGFuZCBmYWxzZSByZXR1cm5lZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgYm9vbAorICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAorCQkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBmYWxzZTsKKyAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19pID0gX19maXJzdDsKKyAgICAgICsrX19pOworICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCisJcmV0dXJuIGZhbHNlOworICAgICAgX19pID0gX19sYXN0OworICAgICAgLS1fX2k7CisKKyAgICAgIGZvcig7OykKKwl7CisJICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faWkgPSBfX2k7CisJICAtLV9faTsKKwkgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKQorCSAgICB7CisJICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ogPSBfX2xhc3Q7CisJICAgICAgd2hpbGUgKCFib29sKF9fY29tcCgqLS1fX2osICpfX2kpKSkKKwkJe30KKwkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2ksIF9faik7CisJICAgICAgc3RkOjpyZXZlcnNlKF9faWksIF9fbGFzdCk7CisJICAgICAgcmV0dXJuIHRydWU7CisJICAgIH0KKwkgIGlmIChfX2kgPT0gX19maXJzdCkKKwkgICAgeworCSAgICAgIHN0ZDo6cmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLy8gcmVwbGFjZQorICAvLyByZXBsYWNlX2lmCisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSBhIHNlcXVlbmNlLCByZXBsYWNpbmcgZWFjaCBlbGVtZW50IG9mIG9uZSB2YWx1ZSB3aXRoIGFub3RoZXIKKyAgICogICAgICAgICB2YWx1ZS4KKyAgICogIEBwYXJhbSAgX19maXJzdCAgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0ICAgICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fb2xkX3ZhbHVlICBUaGUgdmFsdWUgdG8gYmUgcmVwbGFjZWQuCisgICAqICBAcGFyYW0gIF9fbmV3X3ZhbHVlICBUaGUgcmVwbGFjZW1lbnQgdmFsdWUuCisgICAqICBAcmV0dXJuICAgVGhlIGVuZCBvZiB0aGUgb3V0cHV0IHNlcXVlbmNlLCBAcCByZXN1bHQrKGxhc3QtZmlyc3QpLgorICAgKgorICAgKiAgQ29waWVzIGVhY2ggZWxlbWVudCBpbiB0aGUgaW5wdXQgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSB0byB0aGUKKyAgICogIG91dHB1dCByYW5nZSBAcCBbX19yZXN1bHQsX19yZXN1bHQrKF9fbGFzdC1fX2ZpcnN0KSkgcmVwbGFjaW5nIGVsZW1lbnRzCisgICAqICBlcXVhbCB0byBAcCBfX29sZF92YWx1ZSB3aXRoIEBwIF9fbmV3X3ZhbHVlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxPcENvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCisJaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQorCSAgKl9fcmVzdWx0ID0gX19uZXdfdmFsdWU7CisJZWxzZQorCSAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcHkgYSBzZXF1ZW5jZSwgcmVwbGFjaW5nIGVhY2ggdmFsdWUgZm9yIHdoaWNoIGEgcHJlZGljYXRlCisgICAqICAgICAgICAgcmV0dXJucyB0cnVlIHdpdGggYW5vdGhlciB2YWx1ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0ICAgICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICAgICBBIHByZWRpY2F0ZS4KKyAgICogIEBwYXJhbSAgX19uZXdfdmFsdWUgIFRoZSByZXBsYWNlbWVudCB2YWx1ZS4KKyAgICogIEByZXR1cm4gICBUaGUgZW5kIG9mIHRoZSBvdXRwdXQgc2VxdWVuY2UsIEBwIF9fcmVzdWx0KyhfX2xhc3QtX19maXJzdCkuCisgICAqCisgICAqICBDb3BpZXMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIHRvIHRoZSByYW5nZQorICAgKiAgQHAgW19fcmVzdWx0LF9fcmVzdWx0KyhfX2xhc3QtX19maXJzdCkpIHJlcGxhY2luZyBlbGVtZW50cyBmb3Igd2hpY2gKKyAgICogIEBwIF9fcHJlZCByZXR1cm5zIHRydWUgd2l0aCBAcCBfX25ld192YWx1ZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKKwlpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICpfX3Jlc3VsdCA9IF9fbmV3X3ZhbHVlOworCWVsc2UKKwkgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgLyoqCisgICAqICBAYnJpZWYgIERldGVybWluZXMgd2hldGhlciB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSBhcmUgc29ydGVkLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIHRoZSBlbGVtZW50cyBhcmUgc29ydGVkLCBmYWxzZSBvdGhlcndpc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7IHJldHVybiBzdGQ6OmlzX3NvcnRlZF91bnRpbChfX2ZpcnN0LCBfX2xhc3QpID09IF9fbGFzdDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgYXJlIHNvcnRlZAorICAgKiAgICAgICAgICBhY2NvcmRpbmcgdG8gYSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiB0aGUgZWxlbWVudHMgYXJlIHNvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7IHJldHVybiBzdGQ6OmlzX3NvcnRlZF91bnRpbChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCkgPT0gX19sYXN0OyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIERldGVybWluZXMgdGhlIGVuZCBvZiBhIHNvcnRlZCBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGxhc3QgaXRlcmF0b3IgaSBpbiBbX19maXJzdCwgX19sYXN0KQorICAgKiAgICAgICAgICAgZm9yIHdoaWNoIHRoZSByYW5nZSBbX19maXJzdCwgaSkgaXMgc29ydGVkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBpc19zb3J0ZWRfdW50aWwoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19sYXN0OworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkKKwlpZiAoKl9fbmV4dCA8ICpfX2ZpcnN0KQorCSAgcmV0dXJuIF9fbmV4dDsKKyAgICAgIHJldHVybiBfX25leHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBEZXRlcm1pbmVzIHRoZSBlbmQgb2YgYSBzb3J0ZWQgc2VxdWVuY2UgdXNpbmcgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fY29tcCAgICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBsYXN0IGl0ZXJhdG9yIGkgaW4gW19fZmlyc3QsIF9fbGFzdCkKKyAgICogICAgICAgICAgIGZvciB3aGljaCB0aGUgcmFuZ2UgW19fZmlyc3QsIGkpIGlzIHNvcnRlZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIGlzX3NvcnRlZF91bnRpbChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fbGFzdDsKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpCisJaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCisJICByZXR1cm4gX19uZXh0OworICAgICAgcmV0dXJuIF9fbmV4dDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIERldGVybWluZXMgbWluIGFuZCBtYXggYXQgb25jZSBhcyBhbiBvcmRlcmVkIHBhaXIuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19hICBBIHRoaW5nIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHBhcmFtICBfX2IgIEFub3RoZXIgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcmV0dXJuIEEgcGFpcihfX2IsIF9fYSkgaWYgX19iIGlzIHNtYWxsZXIgdGhhbiBfX2EsIHBhaXIoX19hLAorICAgKiAgX19iKSBvdGhlcndpc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgcGFpcjxjb25zdCBfVHAmLCBjb25zdCBfVHAmPgorICAgIG1pbm1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDxfVHA+KQorCisgICAgICByZXR1cm4gX19iIDwgX19hID8gcGFpcjxjb25zdCBfVHAmLCBjb25zdCBfVHAmPihfX2IsIF9fYSkKKwkgICAgICAgICAgICAgICA6IHBhaXI8Y29uc3QgX1RwJiwgY29uc3QgX1RwJj4oX19hLCBfX2IpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgRGV0ZXJtaW5lcyBtaW4gYW5kIG1heCBhdCBvbmNlIGFzIGFuIG9yZGVyZWQgcGFpci4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2EgIEEgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0gIF9fYiAgQW5vdGhlciB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgX19jb21wICBBIEBsaW5rIGNvbXBhcmlzb25fZnVuY3RvcnMgY29tcGFyaXNvbiBmdW5jdG9yIEBlbmRsaW5rLgorICAgKiAgQHJldHVybiBBIHBhaXIoX19iLCBfX2EpIGlmIF9fYiBpcyBzbWFsbGVyIHRoYW4gX19hLCBwYWlyKF9fYSwKKyAgICogIF9fYikgb3RoZXJ3aXNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBwYWlyPGNvbnN0IF9UcCYsIGNvbnN0IF9UcCY+CisgICAgbWlubWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHJldHVybiBfX2NvbXAoX19iLCBfX2EpID8gcGFpcjxjb25zdCBfVHAmLCBjb25zdCBfVHAmPihfX2IsIF9fYSkKKwkgICAgICAgICAgICAgICAgICAgICAgOiBwYWlyPGNvbnN0IF9UcCYsIGNvbnN0IF9UcCY+KF9fYSwgX19iKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBhIHBhaXIgb2YgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtCisgICAqICAgICAgICAgIGVsZW1lbnRzIGluIGEgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEByZXR1cm4gIG1ha2VfcGFpcihtLCBNKSwgd2hlcmUgbSBpcyB0aGUgZmlyc3QgaXRlcmF0b3IgaSBpbiAKKyAgICogICAgICAgICAgIFtfX2ZpcnN0LCBfX2xhc3QpIHN1Y2ggdGhhdCBubyBvdGhlciBlbGVtZW50IGluIHRoZSByYW5nZSBpcworICAgKiAgICAgICAgICAgc21hbGxlciwgYW5kIHdoZXJlIE0gaXMgdGhlIGxhc3QgaXRlcmF0b3IgaSBpbiBbX19maXJzdCwgX19sYXN0KQorICAgKiAgICAgICAgICAgc3VjaCB0aGF0IG5vIG90aGVyIGVsZW1lbnQgaW4gdGhlIHJhbmdlIGlzIGxhcmdlci4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgbWlubWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdAorCSAgfHwgKytfX25leHQgPT0gX19sYXN0KQorCXJldHVybiBzdGQ6Om1ha2VfcGFpcihfX2ZpcnN0LCBfX2ZpcnN0KTsKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pbiwgX19tYXg7CisgICAgICBpZiAoKl9fbmV4dCA8ICpfX2ZpcnN0KQorCXsKKwkgIF9fbWluID0gX19uZXh0OworCSAgX19tYXggPSBfX2ZpcnN0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfX21pbiA9IF9fZmlyc3Q7CisJICBfX21heCA9IF9fbmV4dDsKKwl9CisKKyAgICAgIF9fZmlyc3QgPSBfX25leHQ7CisgICAgICArK19fZmlyc3Q7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICBfX25leHQgPSBfX2ZpcnN0OworCSAgaWYgKCsrX19uZXh0ID09IF9fbGFzdCkKKwkgICAgeworCSAgICAgIGlmICgqX19maXJzdCA8ICpfX21pbikKKwkJX19taW4gPSBfX2ZpcnN0OworCSAgICAgIGVsc2UgaWYgKCEoKl9fZmlyc3QgPCAqX19tYXgpKQorCQlfX21heCA9IF9fZmlyc3Q7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgaWYgKCpfX25leHQgPCAqX19maXJzdCkKKwkgICAgeworCSAgICAgIGlmICgqX19uZXh0IDwgKl9fbWluKQorCQlfX21pbiA9IF9fbmV4dDsKKwkgICAgICBpZiAoISgqX19maXJzdCA8ICpfX21heCkpCisJCV9fbWF4ID0gX19maXJzdDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fbWluKQorCQlfX21pbiA9IF9fZmlyc3Q7CisJICAgICAgaWYgKCEoKl9fbmV4dCA8ICpfX21heCkpCisJCV9fbWF4ID0gX19uZXh0OworCSAgICB9CisKKwkgIF9fZmlyc3QgPSBfX25leHQ7CisJICArK19fZmlyc3Q7CisJfQorCisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoX19taW4sIF9fbWF4KTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBhIHBhaXIgb2YgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtCisgICAqICAgICAgICAgIGVsZW1lbnRzIGluIGEgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgbWFrZV9wYWlyKG0sIE0pLCB3aGVyZSBtIGlzIHRoZSBmaXJzdCBpdGVyYXRvciBpIGluIAorICAgKiAgICAgICAgICAgW19fZmlyc3QsIF9fbGFzdCkgc3VjaCB0aGF0IG5vIG90aGVyIGVsZW1lbnQgaW4gdGhlIHJhbmdlIGlzCisgICAqICAgICAgICAgICBzbWFsbGVyLCBhbmQgd2hlcmUgTSBpcyB0aGUgbGFzdCBpdGVyYXRvciBpIGluIFtfX2ZpcnN0LCBfX2xhc3QpCisgICAqICAgICAgICAgICBzdWNoIHRoYXQgbm8gb3RoZXIgZWxlbWVudCBpbiB0aGUgcmFuZ2UgaXMgbGFyZ2VyLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgbWlubWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QKKwkgIHx8ICsrX19uZXh0ID09IF9fbGFzdCkKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoX19maXJzdCwgX19maXJzdCk7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taW4sIF9fbWF4OworICAgICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCisJeworCSAgX19taW4gPSBfX25leHQ7CisJICBfX21heCA9IF9fZmlyc3Q7CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9fbWluID0gX19maXJzdDsKKwkgIF9fbWF4ID0gX19uZXh0OworCX0KKworICAgICAgX19maXJzdCA9IF9fbmV4dDsKKyAgICAgICsrX19maXJzdDsKKworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIF9fbmV4dCA9IF9fZmlyc3Q7CisJICBpZiAoKytfX25leHQgPT0gX19sYXN0KQorCSAgICB7CisJICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fbWluKSkKKwkJX19taW4gPSBfX2ZpcnN0OworCSAgICAgIGVsc2UgaWYgKCFfX2NvbXAoKl9fZmlyc3QsICpfX21heCkpCisJCV9fbWF4ID0gX19maXJzdDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICBpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKKwkgICAgeworCSAgICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9fbWluKSkKKwkJX19taW4gPSBfX25leHQ7CisJICAgICAgaWYgKCFfX2NvbXAoKl9fZmlyc3QsICpfX21heCkpCisJCV9fbWF4ID0gX19maXJzdDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fbWluKSkKKwkJX19taW4gPSBfX2ZpcnN0OworCSAgICAgIGlmICghX19jb21wKCpfX25leHQsICpfX21heCkpCisJCV9fbWF4ID0gX19uZXh0OworCSAgICB9CisKKwkgIF9fZmlyc3QgPSBfX25leHQ7CisJICArK19fZmlyc3Q7CisJfQorCisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoX19taW4sIF9fbWF4KTsKKyAgICB9CisKKyAgLy8gTjI3MjIgKyBEUiA5MTUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgbWluKGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2wpCisgICAgeyByZXR1cm4gKnN0ZDo6bWluX2VsZW1lbnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBfVHAKKyAgICBtaW4oaW5pdGlhbGl6ZXJfbGlzdDxfVHA+IF9fbCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsgcmV0dXJuICpzdGQ6Om1pbl9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fY29tcCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIG1heChpbml0aWFsaXplcl9saXN0PF9UcD4gX19sKQorICAgIHsgcmV0dXJuICpzdGQ6Om1heF9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX1RwCisgICAgbWF4KGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2wsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7IHJldHVybiAqc3RkOjptYXhfZWxlbWVudChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBfX2NvbXApOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBwYWlyPF9UcCwgX1RwPgorICAgIG1pbm1heChpbml0aWFsaXplcl9saXN0PF9UcD4gX19sKQorICAgIHsKKyAgICAgIHBhaXI8Y29uc3QgX1RwKiwgY29uc3QgX1RwKj4gX19wID0KKwlzdGQ6Om1pbm1heF9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCpfX3AuZmlyc3QsICpfX3Auc2Vjb25kKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgcGFpcjxfVHAsIF9UcD4KKyAgICBtaW5tYXgoaW5pdGlhbGl6ZXJfbGlzdDxfVHA+IF9fbCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHBhaXI8Y29uc3QgX1RwKiwgY29uc3QgX1RwKj4gX19wID0KKwlzdGQ6Om1pbm1heF9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fY29tcCk7CisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKl9fcC5maXJzdCwgKl9fcC5zZWNvbmQpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgYSBwZXJtdXRhaW9uIG9mIHRoZSBzZWNvbmQgc2VxdWVuY2UgaXMgZXF1YWwKKyAgICogICAgICAgICAgdG8gdGhlIGZpcnN0IHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIFN0YXJ0IG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgRW5kIG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgU3RhcnQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHJldHVybiB0cnVlIGlmIHRoZXJlIGV4aXN0cyBhIHBlcm11dGF0aW9uIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UKKyAgICogICAgICAgICAgW19fZmlyc3QyLCBfX2ZpcnN0MiArIChfX2xhc3QxIC0gX19maXJzdDEpKSwgYmVnaW5uaW5nIHdpdGggCisgICAqICAgICAgICAgIEZvcndhcmRJdGVyYXRvcjIgYmVnaW4sIHN1Y2ggdGhhdCBlcXVhbChfX2ZpcnN0MSwgX19sYXN0MSwgYmVnaW4pCisgICAqICAgICAgICAgIHJldHVybnMgdHJ1ZTsgb3RoZXJ3aXNlLCByZXR1cm5zIGZhbHNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjI+CisgICAgYm9vbAorICAgIGlzX3Blcm11dGF0aW9uKF9Gb3J3YXJkSXRlcmF0b3IxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAorCQkgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2ZpcnN0MikKKyAgICB7CisgICAgICAvLyBFZmZpY2llbnRseSBjb21wYXJlIGlkZW50aWNhbCBwcmVmaXhlczogIE8oTikgaWYgc2VxdWVuY2VzCisgICAgICAvLyBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCisJaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCisJICBicmVhazsKKworICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCisJcmV0dXJuIHRydWU7CisKKyAgICAgIC8vIEVzdGFibGlzaCBfX2xhc3QyIGFzc3VtaW5nIGVxdWFsIHJhbmdlcyBieSBpdGVyYXRpbmcgb3ZlciB0aGUKKyAgICAgIC8vIHJlc3Qgb2YgdGhlIGxpc3QuCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2xhc3QyID0gX19maXJzdDI7CisgICAgICBzdGQ6OmFkdmFuY2UoX19sYXN0Miwgc3RkOjpkaXN0YW5jZShfX2ZpcnN0MSwgX19sYXN0MSkpOworICAgICAgZm9yIChfRm9yd2FyZEl0ZXJhdG9yMSBfX3NjYW4gPSBfX2ZpcnN0MTsgX19zY2FuICE9IF9fbGFzdDE7ICsrX19zY2FuKQorCXsKKwkgIGlmIChfX3NjYW4gIT0gX0dMSUJDWFhfU1REX0E6OmZpbmQoX19maXJzdDEsIF9fc2NhbiwgKl9fc2NhbikpCisJICAgIGNvbnRpbnVlOyAvLyBXZSd2ZSBzZWVuIHRoaXMgb25lIGJlZm9yZS4KKworCSAgYXV0byBfX21hdGNoZXMgPSBzdGQ6OmNvdW50KF9fZmlyc3QyLCBfX2xhc3QyLCAqX19zY2FuKTsKKwkgIGlmICgwID09IF9fbWF0Y2hlcworCSAgICAgIHx8IHN0ZDo6Y291bnQoX19zY2FuLCBfX2xhc3QxLCAqX19zY2FuKSAhPSBfX21hdGNoZXMpCisJICAgIHJldHVybiBmYWxzZTsKKwl9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIGEgcGVybXV0YXRpb24gb2YgdGhlIHNlY29uZCBzZXF1ZW5jZSBpcyBlcXVhbAorICAgKiAgICAgICAgICB0byB0aGUgZmlyc3Qgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgU3RhcnQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBFbmQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBTdGFydCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICBBIGJpbmFyeSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuIHRydWUgaWYgdGhlcmUgZXhpc3RzIGEgcGVybXV0YXRpb24gb2YgdGhlIGVsZW1lbnRzIGluCisgICAqICAgICAgICAgIHRoZSByYW5nZSBbX19maXJzdDIsIF9fZmlyc3QyICsgKF9fbGFzdDEgLSBfX2ZpcnN0MSkpLAorICAgKiAgICAgICAgICBiZWdpbm5pbmcgd2l0aCBGb3J3YXJkSXRlcmF0b3IyIGJlZ2luLCBzdWNoIHRoYXQKKyAgICogICAgICAgICAgZXF1YWwoX19maXJzdDEsIF9fbGFzdDEsIF9fYmVnaW4sIF9fcHJlZCkgcmV0dXJucyB0cnVlOworICAgKiAgICAgICAgICBvdGhlcndpc2UsIHJldHVybnMgZmFsc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGJvb2wKKyAgICBpc19wZXJtdXRhdGlvbihfRm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyYXRvcjEgX19sYXN0MSwKKwkJICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9CaW5hcnlQcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIEVmZmljaWVudGx5IGNvbXBhcmUgaWRlbnRpY2FsIHByZWZpeGVzOiAgTyhOKSBpZiBzZXF1ZW5jZXMKKyAgICAgIC8vIGhhdmUgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgb3JkZXIuCisgICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKKwlpZiAoIWJvb2woX19wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkpCisJICBicmVhazsKKworICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCisJcmV0dXJuIHRydWU7CisKKyAgICAgIC8vIEVzdGFibGlzaCBfX2xhc3QyIGFzc3VtaW5nIGVxdWFsIHJhbmdlcyBieSBpdGVyYXRpbmcgb3ZlciB0aGUKKyAgICAgIC8vIHJlc3Qgb2YgdGhlIGxpc3QuCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2xhc3QyID0gX19maXJzdDI7CisgICAgICBzdGQ6OmFkdmFuY2UoX19sYXN0Miwgc3RkOjpkaXN0YW5jZShfX2ZpcnN0MSwgX19sYXN0MSkpOworICAgICAgZm9yIChfRm9yd2FyZEl0ZXJhdG9yMSBfX3NjYW4gPSBfX2ZpcnN0MTsgX19zY2FuICE9IF9fbGFzdDE7ICsrX19zY2FuKQorCXsKKwkgIHVzaW5nIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMTsKKworCSAgaWYgKF9fc2NhbiAhPSBfR0xJQkNYWF9TVERfQTo6ZmluZF9pZihfX2ZpcnN0MSwgX19zY2FuLAorCQkJCQkJc3RkOjpiaW5kKF9fcHJlZCwgXzEsICpfX3NjYW4pKSkKKwkgICAgY29udGludWU7IC8vIFdlJ3ZlIHNlZW4gdGhpcyBvbmUgYmVmb3JlLgorCSAgCisJICBhdXRvIF9fbWF0Y2hlcyA9IHN0ZDo6Y291bnRfaWYoX19maXJzdDIsIF9fbGFzdDIsCisJCQkJCSBzdGQ6OmJpbmQoX19wcmVkLCBfMSwgKl9fc2NhbikpOworCSAgaWYgKDAgPT0gX19tYXRjaGVzCisJICAgICAgfHwgc3RkOjpjb3VudF9pZihfX3NjYW4sIF9fbGFzdDEsCisJCQkgICAgICAgc3RkOjpiaW5kKF9fcHJlZCwgXzEsICpfX3NjYW4pKSAhPSBfX21hdGNoZXMpCisJICAgIHJldHVybiBmYWxzZTsKKwl9CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKyAgLyoqCisgICAqICBAYnJpZWYgU2h1ZmZsZSB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSB1c2luZyBhIHVuaWZvcm0gcmFuZG9tCisgICAqICAgICAgICAgbnVtYmVyIGdlbmVyYXRvci4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19nICAgICAgIEEgVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciAoMjYuNS4xLjMpLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFJlb3JkZXJzIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSB1c2luZyBAcCBfX2cgdG8KKyAgICogIHByb3ZpZGUgcmFuZG9tIG51bWJlcnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICB2b2lkCisgICAgc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImJiBfX2cpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisJX0Rpc3RhbmNlVHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8X0Rpc3RhbmNlVHlwZT46OnR5cGUgX191ZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxfX3VkX3R5cGU+IF9fZGlzdHJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19kaXN0cl90eXBlOjpwYXJhbV90eXBlIF9fcF90eXBlOworICAgICAgX19kaXN0cl90eXBlIF9fZDsKKworICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQorCXN0ZDo6aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fZChfX2csIF9fcF90eXBlKDAsIF9faSAtIF9fZmlyc3QpKSk7CisgICAgfQorI2VuZGlmCisKKyNlbmRpZiAvLyBDKysxMQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KKworICAvKioKKyAgICogIEBicmllZiBBcHBseSBhIGZ1bmN0aW9uIHRvIGV2ZXJ5IGVsZW1lbnQgb2YgYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19mICAgICAgQSB1bmFyeSBmdW5jdGlvbiBvYmplY3QuCisgICAqICBAcmV0dXJuICAgQHAgX19mIChzdGQ6Om1vdmUoQHAgX19mKSBpbiBDKysweCkuCisgICAqCisgICAqICBBcHBsaWVzIHRoZSBmdW5jdGlvbiBvYmplY3QgQHAgX19mIHRvIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtmaXJzdCxsYXN0KS4gIEBwIF9fZiBtdXN0IG5vdCBtb2RpZnkgdGhlIG9yZGVyIG9mIHRoZSBzZXF1ZW5jZS4KKyAgICogIElmIEBwIF9fZiBoYXMgYSByZXR1cm4gdmFsdWUgaXQgaXMgaWdub3JlZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9GdW5jdGlvbj4KKyAgICBfRnVuY3Rpb24KKyAgICBmb3JfZWFjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlfX2YoKl9fZmlyc3QpOworICAgICAgcmV0dXJuIF9HTElCQ1hYX01PVkUoX19mKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHZhbHVlIGluIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fdmFsICAgIFRoZSB2YWx1ZSB0byBmaW5kLgorICAgKiAgQHJldHVybiAgIFRoZSBmaXJzdCBpdGVyYXRvciBAYyBpIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpCisgICAqICBzdWNoIHRoYXQgQGMgKmkgPT0gQHAgX192YWwsIG9yIEBwIF9fbGFzdCBpZiBubyBzdWNoIGl0ZXJhdG9yIGV4aXN0cy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0lucHV0SXRlcmF0b3IKKyAgICBmaW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCQl0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlLCBfVHA+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICByZXR1cm4gc3RkOjpfX2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKKwkJICAgICAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmluZCB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIHNlcXVlbmNlIGZvciB3aGljaCBhCisgICAqICAgICAgICAgcHJlZGljYXRlIGlzIHRydWUuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgIEEgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgIFRoZSBmaXJzdCBpdGVyYXRvciBAYyBpIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpCisgICAqICBzdWNoIHRoYXQgQHAgX19wcmVkKCppKSBpcyB0cnVlLCBvciBAcCBfX2xhc3QgaWYgbm8gc3VjaCBpdGVyYXRvciBleGlzdHMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfSW5wdXRJdGVyYXRvcgorICAgIGZpbmRfaWYoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1VuYXJ5UHJlZGljYXRlQ29uY2VwdDxfUHJlZGljYXRlLAorCSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICByZXR1cm4gc3RkOjpfX2ZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisJCQkgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEZpbmQgZWxlbWVudCBmcm9tIGEgc2V0IGluIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgU3RhcnQgb2YgcmFuZ2UgdG8gc2VhcmNoLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgRW5kIG9mIHJhbmdlIHRvIHNlYXJjaC4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIFN0YXJ0IG9mIG1hdGNoIGNhbmRpZGF0ZXMuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBFbmQgb2YgbWF0Y2ggY2FuZGlkYXRlcy4KKyAgICogIEByZXR1cm4gICBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0MSxfX2xhc3QxKSBzdWNoIHRoYXQgQGMgKmkgPT0gQHAgKihpMikgc3VjaCB0aGF0IGkyIGlzIGFuCisgICAqICBpdGVyYXRvciBpbiBbX19maXJzdDIsX19sYXN0MiksIG9yIEBwIF9fbGFzdDEgaWYgbm8gc3VjaCBpdGVyYXRvciBleGlzdHMuCisgICAqCisgICAqICBTZWFyY2hlcyB0aGUgcmFuZ2UgQHAgW19fZmlyc3QxLF9fbGFzdDEpIGZvciBhbiBlbGVtZW50IHRoYXQgaXMKKyAgICogIGVxdWFsIHRvIHNvbWUgZWxlbWVudCBpbiB0aGUgcmFuZ2UgW19fZmlyc3QyLF9fbGFzdDIpLiAgSWYKKyAgICogIGZvdW5kLCByZXR1cm5zIGFuIGl0ZXJhdG9yIGluIHRoZSByYW5nZSBbX19maXJzdDEsX19sYXN0MSksCisgICAqICBvdGhlcndpc2UgcmV0dXJucyBAcCBfX2xhc3QxLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBfSW5wdXRJdGVyYXRvcgorICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlcmF0b3IgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdDEsCisJCSAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QyKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxPcENvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCisJZm9yIChfRm9yd2FyZEl0ZXJhdG9yIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCisJICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCisJICAgIHJldHVybiBfX2ZpcnN0MTsKKyAgICAgIHJldHVybiBfX2xhc3QxOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgRmluZCBlbGVtZW50IGZyb20gYSBzZXQgaW4gYSBzZXF1ZW5jZSB1c2luZyBhIHByZWRpY2F0ZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBTdGFydCBvZiByYW5nZSB0byBzZWFyY2guCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBFbmQgb2YgcmFuZ2UgdG8gc2VhcmNoLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgU3RhcnQgb2YgbWF0Y2ggY2FuZGlkYXRlcy4KKyAgICogIEBwYXJhbSAgX19sYXN0MiAgIEVuZCBvZiBtYXRjaCBjYW5kaWRhdGVzLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICAgUHJlZGljYXRlIHRvIHVzZS4KKyAgICogIEByZXR1cm4gICBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0MSxfX2xhc3QxKSBzdWNoIHRoYXQgQGMgY29tcCgqaSwgQHAgKihpMikpIGlzIHRydWUKKyAgICogIGFuZCBpMiBpcyBhbiBpdGVyYXRvciBpbiBbX19maXJzdDIsX19sYXN0MiksIG9yIEBwIF9fbGFzdDEgaWYgbm8KKyAgICogIHN1Y2ggaXRlcmF0b3IgZXhpc3RzLgorICAgKgorCisgICAqICBTZWFyY2hlcyB0aGUgcmFuZ2UgQHAgW19fZmlyc3QxLF9fbGFzdDEpIGZvciBhbiBlbGVtZW50IHRoYXQgaXMKKyAgICogIGVxdWFsIHRvIHNvbWUgZWxlbWVudCBpbiB0aGUgcmFuZ2UgW19fZmlyc3QyLF9fbGFzdDIpLiAgSWYKKyAgICogIGZvdW5kLCByZXR1cm5zIGFuIGl0ZXJhdG9yIGluIHRoZSByYW5nZSBbX19maXJzdDEsX19sYXN0MSksCisgICAqICBvdGhlcndpc2UgcmV0dXJucyBAcCBfX2xhc3QxLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIF9JbnB1dEl0ZXJhdG9yCisgICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IgX19sYXN0MSwKKwkJICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdDIsCisJCSAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9CaW5hcnlQcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCisJZm9yIChfRm9yd2FyZEl0ZXJhdG9yIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCisJICAgIHJldHVybiBfX2ZpcnN0MTsKKyAgICAgIHJldHVybiBfX2xhc3QxOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kIHR3byBhZGphY2VudCB2YWx1ZXMgaW4gYSBzZXF1ZW5jZSB0aGF0IGFyZSBlcXVhbC4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIFRoZSBmaXJzdCBpdGVyYXRvciBAYyBpIHN1Y2ggdGhhdCBAYyBpIGFuZCBAYyBpKzEgYXJlIGJvdGgKKyAgICogIHZhbGlkIGl0ZXJhdG9ycyBpbiBAcCBbX19maXJzdCxfX2xhc3QpIGFuZCBzdWNoIHRoYXQgQGMgKmkgPT0gQGMgKihpKzEpLAorICAgKiAgb3IgQHAgX19sYXN0IGlmIG5vIHN1Y2ggaXRlcmF0b3IgZXhpc3RzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxpdHlDb21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2xhc3Q7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpCisJeworCSAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCisJICAgIHJldHVybiBfX2ZpcnN0OworCSAgX19maXJzdCA9IF9fbmV4dDsKKwl9CisgICAgICByZXR1cm4gX19sYXN0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kIHR3byBhZGphY2VudCB2YWx1ZXMgaW4gYSBzZXF1ZW5jZSB1c2luZyBhIHByZWRpY2F0ZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICAgICAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICAgICAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fYmluYXJ5X3ByZWQgICBBIGJpbmFyeSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuICAgVGhlIGZpcnN0IGl0ZXJhdG9yIEBjIGkgc3VjaCB0aGF0IEBjIGkgYW5kIEBjIGkrMSBhcmUgYm90aAorICAgKiAgdmFsaWQgaXRlcmF0b3JzIGluIEBwIFtfX2ZpcnN0LF9fbGFzdCkgYW5kIHN1Y2ggdGhhdAorICAgKiAgQHAgX19iaW5hcnlfcHJlZCgqaSwqKGkrMSkpIGlzIHRydWUsIG9yIEBwIF9fbGFzdCBpZiBubyBzdWNoIGl0ZXJhdG9yCisgICAqICBleGlzdHMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQmluYXJ5UHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19sYXN0OworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KQorCXsKKwkgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisJICBfX2ZpcnN0ID0gX19uZXh0OworCX0KKyAgICAgIHJldHVybiBfX2xhc3Q7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvdW50IHRoZSBudW1iZXIgb2YgY29waWVzIG9mIGEgdmFsdWUgaW4gYSBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX192YWx1ZSAgVGhlIHZhbHVlIHRvIGJlIGNvdW50ZWQuCisgICAqICBAcmV0dXJuICAgVGhlIG51bWJlciBvZiBpdGVyYXRvcnMgQGMgaSBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KQorICAgKiAgZm9yIHdoaWNoIEBjICppID09IEBwIF9fdmFsdWUKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCXR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCisJICArK19fbjsKKyAgICAgIHJldHVybiBfX247CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvdW50IHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlIGZvciB3aGljaCBhIHByZWRpY2F0ZSBpcyB0cnVlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3ByZWQgICBBIHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gICBUaGUgbnVtYmVyIG9mIGl0ZXJhdG9ycyBAYyBpIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpCisgICAqICBmb3Igd2hpY2ggQHAgX19wcmVkKCppKSBpcyB0cnVlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudF9pZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCWlmIChfX3ByZWQoKl9fZmlyc3QpKQorCSAgKytfX247CisgICAgICByZXR1cm4gX19uOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBTZWFyY2ggYSBzZXF1ZW5jZSBmb3IgYSBtYXRjaGluZyBzdWItc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UgQHAKKyAgICogIFtfX2ZpcnN0MSxfX2xhc3QxLShfX2xhc3QyLV9fZmlyc3QyKSkgc3VjaCB0aGF0IEBjICooaStOKSA9PSBAcAorICAgKiAgKihfX2ZpcnN0MitOKSBmb3IgZWFjaCBAYyBOIGluIHRoZSByYW5nZSBAcAorICAgKiAgWzAsX19sYXN0Mi1fX2ZpcnN0MiksIG9yIEBwIF9fbGFzdDEgaWYgbm8gc3VjaCBpdGVyYXRvciBleGlzdHMuCisgICAqCisgICAqICBTZWFyY2hlcyB0aGUgcmFuZ2UgQHAgW19fZmlyc3QxLF9fbGFzdDEpIGZvciBhIHN1Yi1zZXF1ZW5jZSB0aGF0CisgICAqICBjb21wYXJlcyBlcXVhbCB2YWx1ZS1ieS12YWx1ZSB3aXRoIHRoZSBzZXF1ZW5jZSBnaXZlbiBieSBAcAorICAgKiAgW19fZmlyc3QyLF9fbGFzdDIpIGFuZCByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50CisgICAqICBvZiB0aGUgc3ViLXNlcXVlbmNlLCBvciBAcCBfX2xhc3QxIGlmIHRoZSBzdWItc2VxdWVuY2UgaXMgbm90CisgICAqICBmb3VuZC4KKyAgICoKKyAgICogIEJlY2F1c2UgdGhlIHN1Yi1zZXF1ZW5jZSBtdXN0IGxpZSBjb21wbGV0ZWx5IHdpdGhpbiB0aGUgcmFuZ2UgQHAKKyAgICogIFtfX2ZpcnN0MSxfX2xhc3QxKSBpdCBtdXN0IHN0YXJ0IGF0IGEgcG9zaXRpb24gbGVzcyB0aGFuIEBwCisgICAqICBfX2xhc3QxLShfX2xhc3QyLV9fZmlyc3QyKSB3aGVyZSBAcCBfX2xhc3QyLV9fZmlyc3QyIGlzIHRoZQorICAgKiAgbGVuZ3RoIG9mIHRoZSBzdWItc2VxdWVuY2UuCisgICAqCisgICAqICBUaGlzIG1lYW5zIHRoYXQgdGhlIHJldHVybmVkIGl0ZXJhdG9yIEBjIGkgd2lsbCBiZSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0MSxfX2xhc3QxLShfX2xhc3QyLV9fZmlyc3QyKSkKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IxCisgICAgc2VhcmNoKF9Gb3J3YXJkSXRlcmF0b3IxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXJhdG9yMiBfX2xhc3QyKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxPcENvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7CisKKyAgICAgIC8vIFRlc3QgZm9yIGVtcHR5IHJhbmdlcworICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKKwlyZXR1cm4gX19maXJzdDE7CisKKyAgICAgIC8vIFRlc3QgZm9yIGEgcGF0dGVybiBvZiBsZW5ndGggMS4KKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fcDEoX19maXJzdDIpOworICAgICAgaWYgKCsrX19wMSA9PSBfX2xhc3QyKQorCXJldHVybiBfR0xJQkNYWF9TVERfQTo6ZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKKworICAgICAgLy8gR2VuZXJhbCBjYXNlLgorICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19wOworICAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19jdXJyZW50ID0gX19maXJzdDE7CisKKyAgICAgIGZvciAoOzspCisJeworCSAgX19maXJzdDEgPSBfR0xJQkNYWF9TVERfQTo6ZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKKwkgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQorCSAgICByZXR1cm4gX19sYXN0MTsKKworCSAgX19wID0gX19wMTsKKwkgIF9fY3VycmVudCA9IF9fZmlyc3QxOworCSAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCisJICAgIHJldHVybiBfX2xhc3QxOworCisJICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKQorCSAgICB7CisJICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCisJCXJldHVybiBfX2ZpcnN0MTsKKwkgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKKwkJcmV0dXJuIF9fbGFzdDE7CisJICAgIH0KKwkgICsrX19maXJzdDE7CisJfQorICAgICAgcmV0dXJuIF9fZmlyc3QxOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBTZWFyY2ggYSBzZXF1ZW5jZSBmb3IgYSBtYXRjaGluZyBzdWItc2VxdWVuY2UgdXNpbmcgYSBwcmVkaWNhdGUuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3ByZWRpY2F0ZSAgQSBiaW5hcnkgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiAgIFRoZSBmaXJzdCBpdGVyYXRvciBAYyBpIGluIHRoZSByYW5nZQorICAgKiAgQHAgW19fZmlyc3QxLF9fbGFzdDEtKF9fbGFzdDItX19maXJzdDIpKSBzdWNoIHRoYXQKKyAgICogIEBwIF9fcHJlZGljYXRlKCooaStOKSwqKF9fZmlyc3QyK04pKSBpcyB0cnVlIGZvciBlYWNoIEBjIE4gaW4gdGhlIHJhbmdlCisgICAqICBAcCBbMCxfX2xhc3QyLV9fZmlyc3QyKSwgb3IgQHAgX19sYXN0MSBpZiBubyBzdWNoIGl0ZXJhdG9yIGV4aXN0cy4KKyAgICoKKyAgICogIFNlYXJjaGVzIHRoZSByYW5nZSBAcCBbX19maXJzdDEsX19sYXN0MSkgZm9yIGEgc3ViLXNlcXVlbmNlIHRoYXQKKyAgICogIGNvbXBhcmVzIGVxdWFsIHZhbHVlLWJ5LXZhbHVlIHdpdGggdGhlIHNlcXVlbmNlIGdpdmVuIGJ5IEBwCisgICAqICBbX19maXJzdDIsX19sYXN0MiksIHVzaW5nIEBwIF9fcHJlZGljYXRlIHRvIGRldGVybWluZSBlcXVhbGl0eSwKKyAgICogIGFuZCByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZQorICAgKiAgc3ViLXNlcXVlbmNlLCBvciBAcCBfX2xhc3QxIGlmIG5vIHN1Y2ggaXRlcmF0b3IgZXhpc3RzLgorICAgKgorICAgKiAgQHNlZSBzZWFyY2goX0ZvcndhcmRJdGVyMSwgX0ZvcndhcmRJdGVyMSwgX0ZvcndhcmRJdGVyMiwgX0ZvcndhcmRJdGVyMikKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX0ZvcndhcmRJdGVyYXRvcjEKKyAgICBzZWFyY2goX0ZvcndhcmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbGFzdDEsCisJICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIsCisJICAgX0JpbmFyeVByZWRpY2F0ZSAgX19wcmVkaWNhdGUpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9CaW5hcnlQcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7CisKKyAgICAgIC8vIFRlc3QgZm9yIGVtcHR5IHJhbmdlcworICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKKwlyZXR1cm4gX19maXJzdDE7CisKKyAgICAgIC8vIFRlc3QgZm9yIGEgcGF0dGVybiBvZiBsZW5ndGggMS4KKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fcDEoX19maXJzdDIpOworICAgICAgaWYgKCsrX19wMSA9PSBfX2xhc3QyKQorCXsKKwkgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxCisJCSAmJiAhYm9vbChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpKQorCSAgICArK19fZmlyc3QxOworCSAgcmV0dXJuIF9fZmlyc3QxOworCX0KKworICAgICAgLy8gR2VuZXJhbCBjYXNlLgorICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19wOworICAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19jdXJyZW50ID0gX19maXJzdDE7CisKKyAgICAgIGZvciAoOzspCisJeworCSAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEKKwkJICYmICFib29sKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkpCisJICAgICsrX19maXJzdDE7CisJICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKKwkgICAgcmV0dXJuIF9fbGFzdDE7CisKKwkgIF9fcCA9IF9fcDE7CisJICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKKwkgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQorCSAgICByZXR1cm4gX19sYXN0MTsKKworCSAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKQorCSAgICB7CisJICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCisJCXJldHVybiBfX2ZpcnN0MTsKKwkgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKKwkJcmV0dXJuIF9fbGFzdDE7CisJICAgIH0KKwkgICsrX19maXJzdDE7CisJfQorICAgICAgcmV0dXJuIF9fZmlyc3QxOworICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIFNlYXJjaCBhIHNlcXVlbmNlIGZvciBhIG51bWJlciBvZiBjb25zZWN1dGl2ZSB2YWx1ZXMuCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19jb3VudCAgVGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSB2YWx1ZXMuCisgICAqICBAcGFyYW0gIF9fdmFsICAgIFRoZSB2YWx1ZSB0byBmaW5kLgorICAgKiAgQHJldHVybiBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UgQHAKKyAgICogIFtfX2ZpcnN0LF9fbGFzdC1fX2NvdW50KSBzdWNoIHRoYXQgQGMgKihpK04pID09IEBwIF9fdmFsIGZvcgorICAgKiAgZWFjaCBAYyBOIGluIHRoZSByYW5nZSBAcCBbMCxfX2NvdW50KSwgb3IgQHAgX19sYXN0IGlmIG5vIHN1Y2gKKyAgICogIGl0ZXJhdG9yIGV4aXN0cy4KKyAgICoKKyAgICogIFNlYXJjaGVzIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIGZvciBAcCBjb3VudCBjb25zZWN1dGl2ZSBlbGVtZW50cworICAgKiAgZXF1YWwgdG8gQHAgX192YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCXR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19jb3VudCA8PSAwKQorCXJldHVybiBfX2ZpcnN0OworICAgICAgaWYgKF9fY291bnQgPT0gMSkKKwlyZXR1cm4gX0dMSUJDWFhfU1REX0E6OmZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisgICAgICByZXR1cm4gc3RkOjpfX3NlYXJjaF9uKF9fZmlyc3QsIF9fbGFzdCwgX19jb3VudCwgX192YWwsCisJCQkgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CisgICAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgU2VhcmNoIGEgc2VxdWVuY2UgZm9yIGEgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHZhbHVlcyB1c2luZyBhCisgICAqICAgICAgICAgcHJlZGljYXRlLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgICAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fY291bnQgICAgICAgIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgdmFsdWVzLgorICAgKiAgQHBhcmFtICBfX3ZhbCAgICAgICAgICBUaGUgdmFsdWUgdG8gZmluZC4KKyAgICogIEBwYXJhbSAgX19iaW5hcnlfcHJlZCAgQSBiaW5hcnkgcHJlZGljYXRlLgorICAgKiAgQHJldHVybiBUaGUgZmlyc3QgaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UgQHAKKyAgICogIFtfX2ZpcnN0LF9fbGFzdC1fX2NvdW50KSBzdWNoIHRoYXQgQHAKKyAgICogIF9fYmluYXJ5X3ByZWQoKihpK04pLF9fdmFsKSBpcyB0cnVlIGZvciBlYWNoIEBjIE4gaW4gdGhlIHJhbmdlCisgICAqICBAcCBbMCxfX2NvdW50KSwgb3IgQHAgX19sYXN0IGlmIG5vIHN1Y2ggaXRlcmF0b3IgZXhpc3RzLgorICAgKgorICAgKiAgU2VhcmNoZXMgdGhlIHJhbmdlIEBwIFtfX2ZpcnN0LF9fbGFzdCkgZm9yIEBwIF9fY291bnQKKyAgICogIGNvbnNlY3V0aXZlIGVsZW1lbnRzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgdHJ1ZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCisJICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQmluYXJ5UHJlZGljYXRlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fY291bnQgPD0gMCkKKwlyZXR1cm4gX19maXJzdDsKKyAgICAgIGlmIChfX2NvdW50ID09IDEpCisJeworCSAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFib29sKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkpCisJICAgICsrX19maXJzdDsKKwkgIHJldHVybiBfX2ZpcnN0OworCX0KKyAgICAgIHJldHVybiBzdGQ6Ol9fc2VhcmNoX24oX19maXJzdCwgX19sYXN0LCBfX2NvdW50LCBfX3ZhbCwgX19iaW5hcnlfcHJlZCwKKwkJCSAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKworICAvKioKKyAgICogIEBicmllZiBQZXJmb3JtIGFuIG9wZXJhdGlvbiBvbiBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0ICAgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX191bmFyeV9vcCAgQSB1bmFyeSBvcGVyYXRvci4KKyAgICogIEByZXR1cm4gICBBbiBvdXRwdXQgaXRlcmF0b3IgZXF1YWwgdG8gQHAgX19yZXN1bHQrKF9fbGFzdC1fX2ZpcnN0KS4KKyAgICoKKyAgICogIEFwcGxpZXMgdGhlIG9wZXJhdG9yIHRvIGVhY2ggZWxlbWVudCBpbiB0aGUgaW5wdXQgcmFuZ2UgYW5kIGFzc2lnbnMKKyAgICogIHRoZSByZXN1bHRzIHRvIHN1Y2Nlc3NpdmUgZWxlbWVudHMgb2YgdGhlIG91dHB1dCBzZXF1ZW5jZS4KKyAgICogIEV2YWx1YXRlcyBAcCAqKF9fcmVzdWx0K04pPXVuYXJ5X29wKCooX19maXJzdCtOKSkgZm9yIGVhY2ggQGMgTiBpbiB0aGUKKyAgICogIHJhbmdlIEBwIFswLF9fbGFzdC1fX2ZpcnN0KS4KKyAgICoKKyAgICogIEBwIHVuYXJ5X29wIG11c3Qgbm90IGFsdGVyIGl0cyBhcmd1bWVudC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgIC8vICJ0aGUgdHlwZSByZXR1cm5lZCBieSBhIF9VbmFyeU9wZXJhdGlvbiIKKyAgICAgICAgICAgIF9fdHlwZW9mX18oX191bmFyeV9vcCgqX19maXJzdCkpPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKKwkqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUGVyZm9ybSBhbiBvcGVyYXRpb24gb24gY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiB0d28gc2VxdWVuY2VzLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCAgICAgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2JpbmFyeV9vcCAgQSBiaW5hcnkgb3BlcmF0b3IuCisgICAqICBAcmV0dXJuICAgQW4gb3V0cHV0IGl0ZXJhdG9yIGVxdWFsIHRvIEBwIHJlc3VsdCsobGFzdC1maXJzdCkuCisgICAqCisgICAqICBBcHBsaWVzIHRoZSBvcGVyYXRvciB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgdHdvCisgICAqICBpbnB1dCByYW5nZXMgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdHMgdG8gc3VjY2Vzc2l2ZSBlbGVtZW50cyBvZiB0aGUKKyAgICogIG91dHB1dCBzZXF1ZW5jZS4KKyAgICogIEV2YWx1YXRlcyBAcAorICAgKiAgKihfX3Jlc3VsdCtOKT1fX2JpbmFyeV9vcCgqKF9fZmlyc3QxK04pLCooX19maXJzdDIrTikpIGZvciBlYWNoCisgICAqICBAYyBOIGluIHRoZSByYW5nZSBAcCBbMCxfX2xhc3QxLV9fZmlyc3QxKS4KKyAgICoKKyAgICogIEBwIGJpbmFyeV9vcCBtdXN0IG5vdCBhbHRlciBlaXRoZXIgb2YgaXRzIGFyZ3VtZW50cy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorCSAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgIC8vICJ0aGUgdHlwZSByZXR1cm5lZCBieSBhIF9CaW5hcnlPcGVyYXRpb24iCisgICAgICAgICAgICBfX3R5cGVvZl9fKF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwqX19maXJzdDIpKT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworCisgICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKKwkqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJlcGxhY2UgZWFjaCBvY2N1cnJlbmNlIG9mIG9uZSB2YWx1ZSBpbiBhIHNlcXVlbmNlIHdpdGggYW5vdGhlcgorICAgKiAgICAgICAgIHZhbHVlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX29sZF92YWx1ZSAgVGhlIHZhbHVlIHRvIGJlIHJlcGxhY2VkLgorICAgKiAgQHBhcmFtICBfX25ld192YWx1ZSAgVGhlIHJlcGxhY2VtZW50IHZhbHVlLgorICAgKiAgQHJldHVybiAgIHJlcGxhY2UoKSByZXR1cm5zIG5vIHZhbHVlLgorICAgKgorICAgKiAgRm9yIGVhY2ggaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSBpZiBAYyAqaSA9PQorICAgKiAgQHAgX19vbGRfdmFsdWUgdGhlbiB0aGUgYXNzaWdubWVudCBAYyAqaSA9IEBwIF9fbmV3X3ZhbHVlIGlzIHBlcmZvcm1lZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICByZXBsYWNlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQorCSAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUmVwbGFjZSBlYWNoIHZhbHVlIGluIGEgc2VxdWVuY2UgZm9yIHdoaWNoIGEgcHJlZGljYXRlIHJldHVybnMKKyAgICogICAgICAgICB0cnVlIHdpdGggYW5vdGhlciB2YWx1ZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgICAgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19wcmVkICAgICAgIEEgcHJlZGljYXRlLgorICAgKiAgQHBhcmFtICBfX25ld192YWx1ZSAgVGhlIHJlcGxhY2VtZW50IHZhbHVlLgorICAgKiAgQHJldHVybiAgIHJlcGxhY2VfaWYoKSByZXR1cm5zIG5vIHZhbHVlLgorICAgKgorICAgKiAgRm9yIGVhY2ggaXRlcmF0b3IgQGMgaSBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSBpZiBAcCBfX3ByZWQoKmkpCisgICAqICBpcyB0cnVlIHRoZW4gdGhlIGFzc2lnbm1lbnQgQGMgKmkgPSBAcCBfX25ld192YWx1ZSBpcyBwZXJmb3JtZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcCwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJaWYgKF9fcHJlZCgqX19maXJzdCkpCisJICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBBc3NpZ24gdGhlIHJlc3VsdCBvZiBhIGZ1bmN0aW9uIG9iamVjdCB0byBlYWNoIHZhbHVlIGluIGEKKyAgICogICAgICAgICBzZXF1ZW5jZS4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fZ2VuICAgIEEgZnVuY3Rpb24gb2JqZWN0IHRha2luZyBubyBhcmd1bWVudHMgYW5kIHJldHVybmluZworICAgKiAgICAgICAgICAgICAgICAgc3RkOjppdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKyAgICogIEByZXR1cm4gICBnZW5lcmF0ZSgpIHJldHVybnMgbm8gdmFsdWUuCisgICAqCisgICAqICBQZXJmb3JtcyB0aGUgYXNzaWdubWVudCBAYyAqaSA9IEBwIF9fZ2VuKCkgZm9yIGVhY2ggQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0LF9fbGFzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CisgICAgdm9pZAorICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICBfR2VuZXJhdG9yIF9fZ2VuKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0dlbmVyYXRvckNvbmNlcHQ8X0dlbmVyYXRvciwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkqX19maXJzdCA9IF9fZ2VuKCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEFzc2lnbiB0aGUgcmVzdWx0IG9mIGEgZnVuY3Rpb24gb2JqZWN0IHRvIGVhY2ggdmFsdWUgaW4gYQorICAgKiAgICAgICAgIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLgorICAgKiAgQHBhcmFtICBfX2dlbiAgICBBIGZ1bmN0aW9uIG9iamVjdCB0YWtpbmcgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5pbmcKKyAgICogICAgICAgICAgICAgICAgIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisgICAqICBAcmV0dXJuICAgVGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIEBwIF9fZmlyc3QrX19uCisgICAqCisgICAqICBQZXJmb3JtcyB0aGUgYXNzaWdubWVudCBAYyAqaSA9IEBwIF9fZ2VuKCkgZm9yIGVhY2ggQGMgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0LF9fZmlyc3QrX19uKS4KKyAgICoKKyAgICogIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICogIERSIDg2NS4gTW9yZSBhbGdvcml0aG1zIHRoYXQgdGhyb3cgYXdheSBpbmZvcm1hdGlvbgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorICAgICAgICAgICAgLy8gInRoZSB0eXBlIHJldHVybmVkIGJ5IGEgX0dlbmVyYXRvciIKKyAgICAgICAgICAgIF9fdHlwZW9mX18oX19nZW4oKSk+KQorCisgICAgICBmb3IgKF9fZGVjbHR5cGUoX19uICsgMCkgX19uaXRlciA9IF9fbjsKKwkgICBfX25pdGVyID4gMDsgLS1fX25pdGVyLCArK19fZmlyc3QpCisJKl9fZmlyc3QgPSBfX2dlbigpOworICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSBhIHNlcXVlbmNlLCByZW1vdmluZyBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgdmFsdWVzLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19yZXN1bHQgIEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICBBbiBpdGVyYXRvciBkZXNpZ25hdGluZyB0aGUgZW5kIG9mIHRoZSByZXN1bHRpbmcgc2VxdWVuY2UuCisgICAqCisgICAqICBDb3BpZXMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIHRvIHRoZSByYW5nZQorICAgKiAgYmVnaW5uaW5nIGF0IEBwIF9fcmVzdWx0LCBleGNlcHQgdGhhdCBvbmx5IHRoZSBmaXJzdCBlbGVtZW50IGlzIGNvcGllZAorICAgKiAgZnJvbSBncm91cHMgb2YgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsLgorICAgKiAgdW5pcXVlX2NvcHkoKSBpcyBzdGFibGUsIHNvIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGFyZQorICAgKiAgY29waWVkIGlzIHVuY2hhbmdlZC4KKyAgICoKKyAgICogIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICogIERSIDI0MS4gRG9lcyB1bmlxdWVfY29weSgpIHJlcXVpcmUgQ29weUNvbnN0cnVjdGlibGUgYW5kIEFzc2lnbmFibGU/CisgICAqICAKKyAgICogIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICogIERSIDUzOC4gMjQxIGFnYWluOiBEb2VzIHVuaXF1ZV9jb3B5KCkgcmVxdWlyZSBDb3B5Q29uc3RydWN0aWJsZSBhbmQgCisgICAqICBBc3NpZ25hYmxlPworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCV9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbGl0eUNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgcmV0dXJuIHN0ZDo6X191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAorCQkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKKwkJCQlzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19yZXN1bHQpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29weSBhIHNlcXVlbmNlLCByZW1vdmluZyBjb25zZWN1dGl2ZSB2YWx1ZXMgdXNpbmcgYSBwcmVkaWNhdGUuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICAgICAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgICAgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19yZXN1bHQgICAgICAgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2JpbmFyeV9wcmVkICBBIGJpbmFyeSBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuICAgQW4gaXRlcmF0b3IgZGVzaWduYXRpbmcgdGhlIGVuZCBvZiB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlLgorICAgKgorICAgKiAgQ29waWVzIGVhY2ggZWxlbWVudCBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSB0byB0aGUgcmFuZ2UKKyAgICogIGJlZ2lubmluZyBhdCBAcCBfX3Jlc3VsdCwgZXhjZXB0IHRoYXQgb25seSB0aGUgZmlyc3QgZWxlbWVudCBpcyBjb3BpZWQKKyAgICogIGZyb20gZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGVsZW1lbnRzIGZvciB3aGljaCBAcCBfX2JpbmFyeV9wcmVkIHJldHVybnMKKyAgICogIHRydWUuCisgICAqICB1bmlxdWVfY29weSgpIGlzIHN0YWJsZSwgc28gdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlCisgICAqICBjb3BpZWQgaXMgdW5jaGFuZ2VkLgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgKiAgRFIgMjQxLiBEb2VzIHVuaXF1ZV9jb3B5KCkgcmVxdWlyZSBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZT8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCV9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzIC0tIHByZWRpY2F0ZXMgY2hlY2tlZCBsYXRlcgorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICByZXR1cm4gc3RkOjpfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCisJCQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAorCQkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOworICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIFJhbmRvbWx5IHNodWZmbGUgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgUmVvcmRlciB0aGUgZWxlbWVudHMgaW4gdGhlIHJhbmdlIEBwIFtfX2ZpcnN0LF9fbGFzdCkgdXNpbmcgYSByYW5kb20KKyAgICogIGRpc3RyaWJ1dGlvbiwgc28gdGhhdCBldmVyeSBwb3NzaWJsZSBvcmRlcmluZyBvZiB0aGUgc2VxdWVuY2UgaXMKKyAgICogIGVxdWFsbHkgbGlrZWx5LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCisJZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQorCSAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgKHN0ZDo6cmFuZCgpICUgKChfX2kgLSBfX2ZpcnN0KSArIDEpKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFNodWZmbGUgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgdXNpbmcgYSByYW5kb20gbnVtYmVyCisgICAqICAgICAgICAgZ2VuZXJhdG9yLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3JhbmQgICAgVGhlIFJORyBmdW5jdG9yIG9yIGZ1bmN0aW9uLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFJlb3JkZXJzIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSB1c2luZyBAcCBfX3JhbmQgdG8KKyAgICogIHByb3ZpZGUgYSByYW5kb20gZGlzdHJpYnV0aW9uLiBDYWxsaW5nIEBwIF9fcmFuZChOKSBmb3IgYSBwb3NpdGl2ZQorICAgKiAgaW50ZWdlciBAcCBOIHNob3VsZCByZXR1cm4gYSByYW5kb21seSBjaG9zZW4gaW50ZWdlciBmcm9tIHRoZQorICAgKiAgcmFuZ2UgWzAsTikuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICB2b2lkCisgICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCQkgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiYgX19yYW5kKQorI2Vsc2UKKwkJICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQorI2VuZGlmCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybjsKKyAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKKwlzdGQ6Oml0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOworICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIE1vdmUgZWxlbWVudHMgZm9yIHdoaWNoIGEgcHJlZGljYXRlIGlzIHRydWUgdG8gdGhlIGJlZ2lubmluZworICAgKiAgICAgICAgIG9mIGEgc2VxdWVuY2UuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcHJlZCAgICBBIHByZWRpY2F0ZSBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgQHAgbWlkZGxlIHN1Y2ggdGhhdCBAcCBfX3ByZWQoaSkgaXMgdHJ1ZSBmb3IgZWFjaAorICAgKiAgaXRlcmF0b3IgQHAgaSBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsbWlkZGxlKSBhbmQgZmFsc2UgZm9yIGVhY2ggQHAgaQorICAgKiAgaW4gdGhlIHJhbmdlIEBwIFttaWRkbGUsX19sYXN0KS4KKyAgICoKKyAgICogIEBwIF9fcHJlZCBtdXN0IG5vdCBtb2RpZnkgaXRzIG9wZXJhbmQuIEBwIHBhcnRpdGlvbigpIGRvZXMgbm90IHByZXNlcnZlCisgICAqICB0aGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgZWxlbWVudHMgaW4gZWFjaCBncm91cCwgdXNlCisgICAqICBAcCBzdGFibGVfcGFydGl0aW9uKCkgaWYgdGhpcyBpcyBuZWVkZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfUHJlZGljYXRlICAgX19wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICByZXR1cm4gc3RkOjpfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKKwkJCSAgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CisgICAgfQorCisKKworICAvKioKKyAgICogIEBicmllZiBTb3J0IHRoZSBzbWFsbGVzdCBlbGVtZW50cyBvZiBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19taWRkbGUgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFNvcnRzIHRoZSBzbWFsbGVzdCBAcCAoX19taWRkbGUtX19maXJzdCkgZWxlbWVudHMgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbZmlyc3QsbGFzdCkgYW5kIG1vdmVzIHRoZW0gdG8gdGhlIHJhbmdlIEBwIFtfX2ZpcnN0LF9fbWlkZGxlKS4gVGhlCisgICAqICBvcmRlciBvZiB0aGUgcmVtYWluaW5nIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbX19taWRkbGUsX19sYXN0KSBpcworICAgKiAgdW5kZWZpbmVkLgorICAgKiAgQWZ0ZXIgdGhlIHNvcnQgaWYgQGUgaSBhbmQgQGUgaiBhcmUgaXRlcmF0b3JzIGluIHRoZSByYW5nZQorICAgKiAgQHAgW19fZmlyc3QsX19taWRkbGUpIHN1Y2ggdGhhdCBpIHByZWNlZGVzIGogYW5kIEBlIGsgaXMgYW4gaXRlcmF0b3IgaW4KKyAgICogIHRoZSByYW5nZSBAcCBbX19taWRkbGUsX19sYXN0KSB0aGVuICpqPCppIGFuZCAqazwqaSBhcmUgYm90aCBmYWxzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCQkgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlLAorCQkgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8X1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19taWRkbGUpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fbWlkZGxlLCBfX2xhc3QpOworCisgICAgICBzdGQ6Ol9faGVhcF9zZWxlY3QoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CisgICAgICBzdGQ6OnNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFNvcnQgdGhlIHNtYWxsZXN0IGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgdXNpbmcgYSBwcmVkaWNhdGUKKyAgICogICAgICAgICBmb3IgY29tcGFyaXNvbi4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbWlkZGxlICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFNvcnRzIHRoZSBzbWFsbGVzdCBAcCAoX19taWRkbGUtX19maXJzdCkgZWxlbWVudHMgaW4gdGhlIHJhbmdlCisgICAqICBAcCBbX19maXJzdCxfX2xhc3QpIGFuZCBtb3ZlcyB0aGVtIHRvIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX21pZGRsZSkuIFRoZQorICAgKiAgb3JkZXIgb2YgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW19fbWlkZGxlLF9fbGFzdCkgaXMKKyAgICogIHVuZGVmaW5lZC4KKyAgICogIEFmdGVyIHRoZSBzb3J0IGlmIEBlIGkgYW5kIEBlIGogYXJlIGl0ZXJhdG9ycyBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0LF9fbWlkZGxlKSBzdWNoIHRoYXQgaSBwcmVjZWRlcyBqIGFuZCBAZSBrIGlzIGFuIGl0ZXJhdG9yIGluCisgICAqICB0aGUgcmFuZ2UgQHAgW19fbWlkZGxlLF9fbGFzdCkgdGhlbiBAcCAqX19jb21wKGosKmkpIGFuZCBAcCBfX2NvbXAoKmssKmkpCisgICAqICBhcmUgYm90aCBmYWxzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSwKKwkJIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCSBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZSwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19taWRkbGUpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fbWlkZGxlLCBfX2xhc3QpOworCisgICAgICBzdGQ6Ol9faGVhcF9zZWxlY3QoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKKyAgICAgIHN0ZDo6c29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBTb3J0IGEgc2VxdWVuY2UganVzdCBlbm91Z2ggdG8gZmluZCBhIHBhcnRpY3VsYXIgcG9zaXRpb24uCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX250aCAgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgUmVhcnJhbmdlcyB0aGUgZWxlbWVudHMgaW4gdGhlIHJhbmdlIEBwIFtfX2ZpcnN0LF9fbGFzdCkgc28gdGhhdCBAcCAqX19udGgKKyAgICogIGlzIHRoZSBzYW1lIGVsZW1lbnQgdGhhdCB3b3VsZCBoYXZlIGJlZW4gaW4gdGhhdCBwb3NpdGlvbiBoYWQgdGhlCisgICAqICB3aG9sZSBzZXF1ZW5jZSBiZWVuIHNvcnRlZC4gVGhlIGVsZW1lbnRzIGVpdGhlciBzaWRlIG9mIEBwICpfX250aCBhcmUKKyAgICogIG5vdCBjb21wbGV0ZWx5IHNvcnRlZCwgYnV0IGZvciBhbnkgaXRlcmF0b3IgQGUgaSBpbiB0aGUgcmFuZ2UKKyAgICogIEBwIFtfX2ZpcnN0LF9fbnRoKSBhbmQgYW55IGl0ZXJhdG9yIEBlIGogaW4gdGhlIHJhbmdlIEBwIFtfX250aCxfX2xhc3QpIGl0CisgICAqICBob2xkcyB0aGF0ICpqIDwgKmkgaXMgZmFsc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19udGgsCisJCV9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDxfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX250aCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19udGgsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBfX250aCA9PSBfX2xhc3QpCisJcmV0dXJuOworCisgICAgICBzdGQ6Ol9faW50cm9zZWxlY3QoX19maXJzdCwgX19udGgsIF9fbGFzdCwKKwkJCSBzdGQ6Ol9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgU29ydCBhIHNlcXVlbmNlIGp1c3QgZW5vdWdoIHRvIGZpbmQgYSBwYXJ0aWN1bGFyIHBvc2l0aW9uCisgICAqICAgICAgICAgdXNpbmcgYSBwcmVkaWNhdGUgZm9yIGNvbXBhcmlzb24uCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX250aCAgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fY29tcCAgICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIE5vdGhpbmcuCisgICAqCisgICAqICBSZWFycmFuZ2VzIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSBzbyB0aGF0IEBwICpfX250aAorICAgKiAgaXMgdGhlIHNhbWUgZWxlbWVudCB0aGF0IHdvdWxkIGhhdmUgYmVlbiBpbiB0aGF0IHBvc2l0aW9uIGhhZCB0aGUKKyAgICogIHdob2xlIHNlcXVlbmNlIGJlZW4gc29ydGVkLiBUaGUgZWxlbWVudHMgZWl0aGVyIHNpZGUgb2YgQHAgKl9fbnRoIGFyZQorICAgKiAgbm90IGNvbXBsZXRlbHkgc29ydGVkLCBidXQgZm9yIGFueSBpdGVyYXRvciBAZSBpIGluIHRoZSByYW5nZQorICAgKiAgQHAgW19fZmlyc3QsX19udGgpIGFuZCBhbnkgaXRlcmF0b3IgQGUgaiBpbiB0aGUgcmFuZ2UgQHAgW19fbnRoLF9fbGFzdCkgaXQKKyAgICogIGhvbGRzIHRoYXQgQHAgX19jb21wKCpqLCppKSBpcyBmYWxzZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19udGgsCisJCV9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZSwgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19udGgpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fbnRoLCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19udGggPT0gX19sYXN0KQorCXJldHVybjsKKworICAgICAgc3RkOjpfX2ludHJvc2VsZWN0KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsCisJCQkgc3RkOjpfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwgX19jb21wKTsKKyAgICB9CisKKworICAvKioKKyAgICogIEBicmllZiBTb3J0IHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgU29ydHMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIGluIGFzY2VuZGluZyBvcmRlciwKKyAgICogIHN1Y2ggdGhhdCBmb3IgZWFjaCBpdGVyYXRvciBAZSBpIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QtMSksICAKKyAgICogICooaSsxKTwqaSBpcyBmYWxzZS4KKyAgICoKKyAgICogIFRoZSByZWxhdGl2ZSBvcmRlcmluZyBvZiBlcXVpdmFsZW50IGVsZW1lbnRzIGlzIG5vdCBwcmVzZXJ2ZWQsIHVzZQorICAgKiAgQHAgc3RhYmxlX3NvcnQoKSBpZiB0aGlzIGlzIG5lZWRlZC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8X1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIHN0ZDo6X19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCisJCQkJc3RkOjpfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7CisJICBzdGQ6Ol9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFNvcnQgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgdXNpbmcgYSBwcmVkaWNhdGUgZm9yIGNvbXBhcmlzb24uCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFNvcnRzIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSBpbiBhc2NlbmRpbmcgb3JkZXIsCisgICAqICBzdWNoIHRoYXQgQHAgX19jb21wKCooaSsxKSwqaSkgaXMgZmFsc2UgZm9yIGV2ZXJ5IGl0ZXJhdG9yIEBlIGkgaW4gdGhlCisgICAqICByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QtMSkuCisgICAqCisgICAqICBUaGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgZXF1aXZhbGVudCBlbGVtZW50cyBpcyBub3QgcHJlc2VydmVkLCB1c2UKKyAgICogIEBwIHN0YWJsZV9zb3J0KCkgaWYgdGhpcyBpcyBuZWVkZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCSBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLCBfVmFsdWVUeXBlLAorCQkJCSAgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIHN0ZDo6X19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCisJCQkJc3RkOjpfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwgX19jb21wKTsKKwkgIHN0ZDo6X19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBNZXJnZXMgdHdvIHNvcnRlZCByYW5nZXMuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIEFuIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0MSAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgbWVyZ2VkIHJhbmdlLgorICAgKiAgQHJldHVybiAgICAgICAgIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IDxlbT5ub3QgbGVzcworICAgKiAgICAgICAgICAgICAgICAgIHRoYW48L2VtPiBAZSB2YWwuCisgICAqCisgICAqICBNZXJnZXMgdGhlIHJhbmdlcyBAcCBbX19maXJzdDEsX19sYXN0MSkgYW5kIEBwIFtfX2ZpcnN0MixfX2xhc3QyKSBpbnRvCisgICAqICB0aGUgc29ydGVkIHJhbmdlIEBwIFtfX3Jlc3VsdCwgX19yZXN1bHQgKyAoX19sYXN0MS1fX2ZpcnN0MSkgKworICAgKiAgKF9fbGFzdDItX19maXJzdDIpKS4gIEJvdGggaW5wdXQgcmFuZ2VzIG11c3QgYmUgc29ydGVkLCBhbmQgdGhlCisgICAqICBvdXRwdXQgcmFuZ2UgbXVzdCBub3Qgb3ZlcmxhcCB3aXRoIGVpdGhlciBvZiB0aGUgaW5wdXQgcmFuZ2VzLgorICAgKiAgVGhlIHNvcnQgaXMgQGUgc3RhYmxlLCB0aGF0IGlzLCBmb3IgZXF1aXZhbGVudCBlbGVtZW50cyBpbiB0aGUKKyAgICogIHR3byByYW5nZXMsIGVsZW1lbnRzIGZyb20gdGhlIGZpcnN0IHJhbmdlIHdpbGwgYWx3YXlzIGNvbWUKKyAgICogIGJlZm9yZSBlbGVtZW50cyBmcm9tIHRoZSBzZWNvbmQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBtZXJnZShfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUyLCBfVmFsdWVUeXBlMT4pCQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0KF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJeworCSAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICAgKytfX2ZpcnN0MTsKKwkgICAgfQorCSAgKytfX3Jlc3VsdDsKKwl9CisgICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBzdGQ6OmNvcHkoX19maXJzdDEsIF9fbGFzdDEsCisJCQkJCQkgICAgX19yZXN1bHQpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgTWVyZ2VzIHR3byBzb3J0ZWQgcmFuZ2VzLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgQW5vdGhlciBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19yZXN1bHQgIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIG1lcmdlZCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIEEgZnVuY3RvciB0byB1c2UgZm9yIGNvbXBhcmlzb25zLgorICAgKiAgQHJldHVybiAgICAgICAgIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50ICJub3QgbGVzcworICAgKiAgICAgICAgICAgICAgICAgIHRoYW4iIEBlIHZhbC4KKyAgICoKKyAgICogIE1lcmdlcyB0aGUgcmFuZ2VzIEBwIFtfX2ZpcnN0MSxfX2xhc3QxKSBhbmQgQHAgW19fZmlyc3QyLF9fbGFzdDIpIGludG8KKyAgICogIHRoZSBzb3J0ZWQgcmFuZ2UgQHAgW19fcmVzdWx0LCBfX3Jlc3VsdCArIChfX2xhc3QxLV9fZmlyc3QxKSArCisgICAqICAoX19sYXN0Mi1fX2ZpcnN0MikpLiAgQm90aCBpbnB1dCByYW5nZXMgbXVzdCBiZSBzb3J0ZWQsIGFuZCB0aGUKKyAgICogIG91dHB1dCByYW5nZSBtdXN0IG5vdCBvdmVybGFwIHdpdGggZWl0aGVyIG9mIHRoZSBpbnB1dCByYW5nZXMuCisgICAqICBUaGUgc29ydCBpcyBAZSBzdGFibGUsIHRoYXQgaXMsIGZvciBlcXVpdmFsZW50IGVsZW1lbnRzIGluIHRoZQorICAgKiAgdHdvIHJhbmdlcywgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QgcmFuZ2Ugd2lsbCBhbHdheXMgY29tZQorICAgKiAgYmVmb3JlIGVsZW1lbnRzIGZyb20gdGhlIHNlY29uZC4KKyAgICoKKyAgICogIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIHNob3VsZCBoYXZlIHRoZSBzYW1lIGVmZmVjdHMgb24gb3JkZXJpbmcgYXMKKyAgICogIHRoZSBmdW5jdGlvbiB1c2VkIGZvciB0aGUgaW5pdGlhbCBzb3J0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIG1lcmdlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCSAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUyOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZTIsIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0X3ByZWQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2NvbXApOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MiwgX19sYXN0MiwgX19maXJzdDEsIF9fY29tcCk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJeworCSAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CisJICAgICAgKytfX2ZpcnN0MjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICAgICsrX19maXJzdDE7CisJICAgIH0KKwkgICsrX19yZXN1bHQ7CisJfQorICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0MiwgX19sYXN0Miwgc3RkOjpjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLAorCQkJCQkJICAgIF9fcmVzdWx0KSk7CisgICAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgU29ydCB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZSwgcHJlc2VydmluZyB0aGUgcmVsYXRpdmUgb3JkZXIKKyAgICogICAgICAgICBvZiBlcXVpdmFsZW50IGVsZW1lbnRzLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgU29ydHMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIGluIGFzY2VuZGluZyBvcmRlciwKKyAgICogIHN1Y2ggdGhhdCBmb3IgZWFjaCBpdGVyYXRvciBAcCBpIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QtMSksCisgICAqICBAcCAqKGkrMSk8KmkgaXMgZmFsc2UuCisgICAqCisgICAqICBUaGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgZXF1aXZhbGVudCBlbGVtZW50cyBpcyBwcmVzZXJ2ZWQsIHNvIGFueSB0d28KKyAgICogIGVsZW1lbnRzIEBwIHggYW5kIEBwIHkgaW4gdGhlIHJhbmdlIEBwIFtfX2ZpcnN0LF9fbGFzdCkgc3VjaCB0aGF0CisgICAqICBAcCB4PHkgaXMgZmFsc2UgYW5kIEBwIHk8eCBpcyBmYWxzZSB3aWxsIGhhdmUgdGhlIHNhbWUgcmVsYXRpdmUKKyAgICogIG9yZGVyaW5nIGFmdGVyIGNhbGxpbmcgQHAgc3RhYmxlX3NvcnQoKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDxfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsCisJCQkJCQkJCSBfX2xhc3QpOworICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKKwlzdGQ6Ol9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgZWxzZQorCXN0ZDo6X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmLmJlZ2luKCksCisJCQkJICAgIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFNvcnQgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgdXNpbmcgYSBwcmVkaWNhdGUgZm9yIGNvbXBhcmlzb24sCisgICAqICAgICAgICAgcHJlc2VydmluZyB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZXF1aXZhbGVudCBlbGVtZW50cy4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICAgQW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBOb3RoaW5nLgorICAgKgorICAgKiAgU29ydHMgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QpIGluIGFzY2VuZGluZyBvcmRlciwKKyAgICogIHN1Y2ggdGhhdCBmb3IgZWFjaCBpdGVyYXRvciBAcCBpIGluIHRoZSByYW5nZSBAcCBbX19maXJzdCxfX2xhc3QtMSksCisgICAqICBAcCBfX2NvbXAoKihpKzEpLCppKSBpcyBmYWxzZS4KKyAgICoKKyAgICogIFRoZSByZWxhdGl2ZSBvcmRlcmluZyBvZiBlcXVpdmFsZW50IGVsZW1lbnRzIGlzIHByZXNlcnZlZCwgc28gYW55IHR3bworICAgKiAgZWxlbWVudHMgQHAgeCBhbmQgQHAgeSBpbiB0aGUgcmFuZ2UgQHAgW19fZmlyc3QsX19sYXN0KSBzdWNoIHRoYXQKKyAgICogIEBwIF9fY29tcCh4LHkpIGlzIGZhbHNlIGFuZCBAcCBfX2NvbXAoeSx4KSBpcyBmYWxzZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICogIHJlbGF0aXZlIG9yZGVyaW5nIGFmdGVyIGNhbGxpbmcgQHAgc3RhYmxlX3NvcnQoKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCQlfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUsCisJCQkJICBfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsCisJCQkJCQkJCSBfX2xhc3QpOworICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKKwlzdGQ6Ol9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisgICAgICBlbHNlCisJc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19idWYuYmVnaW4oKSwKKwkJCQkgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLCBfX2NvbXApOworICAgIH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIFJldHVybiB0aGUgdW5pb24gb2YgdHdvIHNvcnRlZCByYW5nZXMuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgU3RhcnQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBFbmQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBTdGFydCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBFbmQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHJldHVybiAgRW5kIG9mIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gaXRlcmF0ZXMgb3ZlciBib3RoIHJhbmdlcywgY29weWluZyBlbGVtZW50cyBwcmVzZW50IGluCisgICAqICBlYWNoIHJhbmdlIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuICBJdGVyYXRvcnMgaW5jcmVtZW50IGZvciBlYWNoCisgICAqICByYW5nZS4gIFdoZW4gdGhlIGN1cnJlbnQgZWxlbWVudCBvZiBvbmUgcmFuZ2UgaXMgbGVzcyB0aGFuIHRoZSBvdGhlciwKKyAgICogIHRoYXQgZWxlbWVudCBpcyBjb3BpZWQgYW5kIHRoZSBpdGVyYXRvciBhZHZhbmNlZC4gIElmIGFuIGVsZW1lbnQgaXMKKyAgICogIGNvbnRhaW5lZCBpbiBib3RoIHJhbmdlcywgdGhlIGVsZW1lbnQgZnJvbSB0aGUgZmlyc3QgcmFuZ2UgaXMgY29waWVkIGFuZAorICAgKiAgYm90aCByYW5nZXMgYWR2YW5jZS4gIFRoZSBvdXRwdXQgcmFuZ2UgbWF5IG5vdCBvdmVybGFwIGVpdGhlciBpbnB1dAorICAgKiAgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfdW5pb24oX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCSAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUyLCBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDIsIF9fbGFzdDIsIF9fZmlyc3QxKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwl7CisJICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQorCSAgICB7CisJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICAgICsrX19maXJzdDE7CisJICAgIH0KKwkgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICAgKytfX2ZpcnN0MTsKKwkgICAgICArK19fZmlyc3QyOworCSAgICB9CisJICArK19fcmVzdWx0OworCX0KKyAgICAgIHJldHVybiBzdGQ6OmNvcHkoX19maXJzdDIsIF9fbGFzdDIsIHN0ZDo6Y29weShfX2ZpcnN0MSwgX19sYXN0MSwKKwkJCQkJCSAgICBfX3Jlc3VsdCkpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBSZXR1cm4gdGhlIHVuaW9uIG9mIHR3byBzb3J0ZWQgcmFuZ2VzIHVzaW5nIGEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIFN0YXJ0IG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgRW5kIG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgU3RhcnQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgRW5kIG9mIHNlY29uZCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgIFRoZSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBFbmQgb2YgdGhlIG91dHB1dCByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBpdGVyYXRlcyBvdmVyIGJvdGggcmFuZ2VzLCBjb3B5aW5nIGVsZW1lbnRzIHByZXNlbnQgaW4KKyAgICogIGVhY2ggcmFuZ2UgaW4gb3JkZXIgdG8gdGhlIG91dHB1dCByYW5nZS4gIEl0ZXJhdG9ycyBpbmNyZW1lbnQgZm9yIGVhY2gKKyAgICogIHJhbmdlLiAgV2hlbiB0aGUgY3VycmVudCBlbGVtZW50IG9mIG9uZSByYW5nZSBpcyBsZXNzIHRoYW4gdGhlIG90aGVyCisgICAqICBhY2NvcmRpbmcgdG8gQHAgX19jb21wLCB0aGF0IGVsZW1lbnQgaXMgY29waWVkIGFuZCB0aGUgaXRlcmF0b3IgYWR2YW5jZWQuCisgICAqICBJZiBhbiBlcXVpdmFsZW50IGVsZW1lbnQgYWNjb3JkaW5nIHRvIEBwIF9fY29tcCBpcyBjb250YWluZWQgaW4gYm90aAorICAgKiAgcmFuZ2VzLCB0aGUgZWxlbWVudCBmcm9tIHRoZSBmaXJzdCByYW5nZSBpcyBjb3BpZWQgYW5kIGJvdGggcmFuZ2VzCisgICAqICBhZHZhbmNlLiAgVGhlIG91dHB1dCByYW5nZSBtYXkgbm90IG92ZXJsYXAgZWl0aGVyIGlucHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF91bmlvbihfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCisJICAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUyOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUyLCBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldF9wcmVkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19jb21wKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0X3ByZWQoX19maXJzdDIsIF9fbGFzdDIsIF9fZmlyc3QxLCBfX2NvbXApOworCisgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQorCXsKKwkgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQorCSAgICB7CisJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICAgICsrX19maXJzdDE7CisJICAgIH0KKwkgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJICAgIHsKKwkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CisJICAgICAgKytfX2ZpcnN0MjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICAgICsrX19maXJzdDE7CisJICAgICAgKytfX2ZpcnN0MjsKKwkgICAgfQorCSAgKytfX3Jlc3VsdDsKKwl9CisgICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBzdGQ6OmNvcHkoX19maXJzdDEsIF9fbGFzdDEsCisJCQkJCQkgICAgX19yZXN1bHQpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUmV0dXJuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIHNvcnRlZCByYW5nZXMuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgU3RhcnQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBFbmQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBTdGFydCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBFbmQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHJldHVybiAgRW5kIG9mIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gaXRlcmF0ZXMgb3ZlciBib3RoIHJhbmdlcywgY29weWluZyBlbGVtZW50cyBwcmVzZW50IGluCisgICAqICBib3RoIHJhbmdlcyBpbiBvcmRlciB0byB0aGUgb3V0cHV0IHJhbmdlLiAgSXRlcmF0b3JzIGluY3JlbWVudCBmb3IgZWFjaAorICAgKiAgcmFuZ2UuICBXaGVuIHRoZSBjdXJyZW50IGVsZW1lbnQgb2Ygb25lIHJhbmdlIGlzIGxlc3MgdGhhbiB0aGUgb3RoZXIsCisgICAqICB0aGF0IGl0ZXJhdG9yIGFkdmFuY2VzLiAgSWYgYW4gZWxlbWVudCBpcyBjb250YWluZWQgaW4gYm90aCByYW5nZXMsIHRoZQorICAgKiAgZWxlbWVudCBmcm9tIHRoZSBmaXJzdCByYW5nZSBpcyBjb3BpZWQgYW5kIGJvdGggcmFuZ2VzIGFkdmFuY2UuICBUaGUKKyAgICogIG91dHB1dCByYW5nZSBtYXkgbm90IG92ZXJsYXAgZWl0aGVyIGlucHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCQkgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCisJCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZTIsIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfX2ZpcnN0MiwgX19sYXN0MiwgX19maXJzdDEpOworCisgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQorCWlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCisJICArK19fZmlyc3QxOworCWVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKKwkgICsrX19maXJzdDI7CisJZWxzZQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19maXJzdDI7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJldHVybiB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byBzb3J0ZWQgcmFuZ2VzIHVzaW5nIGNvbXBhcmlzb24KKyAgICogIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgU3RhcnQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBFbmQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBTdGFydCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBFbmQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICAgVGhlIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIEVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIGl0ZXJhdGVzIG92ZXIgYm90aCByYW5nZXMsIGNvcHlpbmcgZWxlbWVudHMgcHJlc2VudCBpbgorICAgKiAgYm90aCByYW5nZXMgaW4gb3JkZXIgdG8gdGhlIG91dHB1dCByYW5nZS4gIEl0ZXJhdG9ycyBpbmNyZW1lbnQgZm9yIGVhY2gKKyAgICogIHJhbmdlLiAgV2hlbiB0aGUgY3VycmVudCBlbGVtZW50IG9mIG9uZSByYW5nZSBpcyBsZXNzIHRoYW4gdGhlIG90aGVyCisgICAqICBhY2NvcmRpbmcgdG8gQHAgX19jb21wLCB0aGF0IGl0ZXJhdG9yIGFkdmFuY2VzLiAgSWYgYW4gZWxlbWVudCBpcworICAgKiAgY29udGFpbmVkIGluIGJvdGggcmFuZ2VzIGFjY29yZGluZyB0byBAcCBfX2NvbXAsIHRoZSBlbGVtZW50IGZyb20gdGhlCisgICAqICBmaXJzdCByYW5nZSBpcyBjb3BpZWQgYW5kIGJvdGggcmFuZ2VzIGFkdmFuY2UuICBUaGUgb3V0cHV0IHJhbmdlIG1heSBub3QKKyAgICogIG92ZXJsYXAgZWl0aGVyIGlucHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fY29tcCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldF9wcmVkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSwgX19jb21wKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKKwkgICsrX19maXJzdDE7CisJZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKKwkgICsrX19maXJzdDI7CisJZWxzZQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19maXJzdDI7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFJldHVybiB0aGUgZGlmZmVyZW5jZSBvZiB0d28gc29ydGVkIHJhbmdlcy4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBTdGFydCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0MSAgIEVuZCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIFN0YXJ0IG9mIHNlY29uZCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0MiAgIEVuZCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcmV0dXJuICBFbmQgb2YgdGhlIG91dHB1dCByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiBpdGVyYXRlcyBvdmVyIGJvdGggcmFuZ2VzLCBjb3B5aW5nIGVsZW1lbnRzIHByZXNlbnQgaW4KKyAgICogIHRoZSBmaXJzdCByYW5nZSBidXQgbm90IHRoZSBzZWNvbmQgaW4gb3JkZXIgdG8gdGhlIG91dHB1dCByYW5nZS4KKyAgICogIEl0ZXJhdG9ycyBpbmNyZW1lbnQgZm9yIGVhY2ggcmFuZ2UuICBXaGVuIHRoZSBjdXJyZW50IGVsZW1lbnQgb2YgdGhlCisgICAqICBmaXJzdCByYW5nZSBpcyBsZXNzIHRoYW4gdGhlIHNlY29uZCwgdGhhdCBlbGVtZW50IGlzIGNvcGllZCBhbmQgdGhlCisgICAqICBpdGVyYXRvciBhZHZhbmNlcy4gIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgb2YgdGhlIHNlY29uZCByYW5nZSBpcyBsZXNzLAorICAgKiAgdGhlIGl0ZXJhdG9yIGFkdmFuY2VzLCBidXQgbm8gZWxlbWVudCBpcyBjb3BpZWQuICBJZiBhbiBlbGVtZW50IGlzCisgICAqICBjb250YWluZWQgaW4gYm90aCByYW5nZXMsIG5vIGVsZW1lbnRzIGFyZSBjb3BpZWQgYW5kIGJvdGggcmFuZ2VzCisgICAqICBhZHZhbmNlLiAgVGhlIG91dHB1dCByYW5nZSBtYXkgbm90IG92ZXJsYXAgZWl0aGVyIGlucHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkJICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZTIsIF9WYWx1ZVR5cGUxPikJCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDIsIF9fbGFzdDIsIF9fZmlyc3QxKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisJZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQorCSAgKytfX2ZpcnN0MjsKKwllbHNlCisJICB7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19maXJzdDI7CisJICB9CisgICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gdGhlIGRpZmZlcmVuY2Ugb2YgdHdvIHNvcnRlZCByYW5nZXMgdXNpbmcgY29tcGFyaXNvbgorICAgKiAgZnVuY3Rvci4KKyAgICogIEBpbmdyb3VwIHNldF9hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBTdGFydCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0MSAgIEVuZCBvZiBmaXJzdCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIFN0YXJ0IG9mIHNlY29uZCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0MiAgIEVuZCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fY29tcCAgICBUaGUgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgRW5kIG9mIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gaXRlcmF0ZXMgb3ZlciBib3RoIHJhbmdlcywgY29weWluZyBlbGVtZW50cyBwcmVzZW50IGluCisgICAqICB0aGUgZmlyc3QgcmFuZ2UgYnV0IG5vdCB0aGUgc2Vjb25kIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuCisgICAqICBJdGVyYXRvcnMgaW5jcmVtZW50IGZvciBlYWNoIHJhbmdlLiAgV2hlbiB0aGUgY3VycmVudCBlbGVtZW50IG9mIHRoZQorICAgKiAgZmlyc3QgcmFuZ2UgaXMgbGVzcyB0aGFuIHRoZSBzZWNvbmQgYWNjb3JkaW5nIHRvIEBwIF9fY29tcCwgdGhhdCBlbGVtZW50CisgICAqICBpcyBjb3BpZWQgYW5kIHRoZSBpdGVyYXRvciBhZHZhbmNlcy4gIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgb2YgdGhlCisgICAqICBzZWNvbmQgcmFuZ2UgaXMgbGVzcywgbm8gZWxlbWVudCBpcyBjb3BpZWQgYW5kIHRoZSBpdGVyYXRvciBhZHZhbmNlcy4KKyAgICogIElmIGFuIGVsZW1lbnQgaXMgY29udGFpbmVkIGluIGJvdGggcmFuZ2VzIGFjY29yZGluZyB0byBAcCBfX2NvbXAsIG5vCisgICAqICBlbGVtZW50cyBhcmUgY29waWVkIGFuZCBib3RoIHJhbmdlcyBhZHZhbmNlLiAgVGhlIG91dHB1dCByYW5nZSBtYXkgbm90CisgICAqICBvdmVybGFwIGVpdGhlciBpbnB1dCByYW5nZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCQkgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICBfVmFsdWVUeXBlMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCQkJCSAgX1ZhbHVlVHlwZTIsIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfc2V0X3ByZWQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2NvbXApOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MiwgX19sYXN0MiwgX19maXJzdDEsIF9fY29tcCk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCisJaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCisJICB7CisJICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKKwkgICAgKytfX2ZpcnN0MTsKKwkgICAgKytfX3Jlc3VsdDsKKwkgIH0KKwllbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQorCSAgKytfX2ZpcnN0MjsKKwllbHNlCisJICB7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19maXJzdDI7CisJICB9CisgICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gdGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byBzb3J0ZWQgcmFuZ2VzLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIFN0YXJ0IG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgRW5kIG9mIGZpcnN0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgU3RhcnQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgRW5kIG9mIHNlY29uZCByYW5nZS4KKyAgICogIEByZXR1cm4gIEVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIGl0ZXJhdGVzIG92ZXIgYm90aCByYW5nZXMsIGNvcHlpbmcgZWxlbWVudHMgcHJlc2VudCBpbgorICAgKiAgb25lIHJhbmdlIGJ1dCBub3QgdGhlIG90aGVyIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuICBJdGVyYXRvcnMKKyAgICogIGluY3JlbWVudCBmb3IgZWFjaCByYW5nZS4gIFdoZW4gdGhlIGN1cnJlbnQgZWxlbWVudCBvZiBvbmUgcmFuZ2UgaXMgbGVzcworICAgKiAgdGhhbiB0aGUgb3RoZXIsIHRoYXQgZWxlbWVudCBpcyBjb3BpZWQgYW5kIHRoZSBpdGVyYXRvciBhZHZhbmNlcy4gIElmIGFuCisgICAqICBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBib3RoIHJhbmdlcywgbm8gZWxlbWVudHMgYXJlIGNvcGllZCBhbmQgYm90aAorICAgKiAgcmFuZ2VzIGFkdmFuY2UuICBUaGUgb3V0cHV0IHJhbmdlIG1heSBub3Qgb3ZlcmxhcCBlaXRoZXIgaW5wdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkJCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5PcENvbmNlcHQ8X1ZhbHVlVHlwZTIsIF9WYWx1ZVR5cGUxPikJCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX19maXJzdDIsIF9fbGFzdDIsIF9fZmlyc3QxKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisJZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CisJICAgICsrX19maXJzdDI7CisJICAgICsrX19yZXN1bHQ7CisJICB9CisJZWxzZQorCSAgeworCSAgICArK19fZmlyc3QxOworCSAgICArK19fZmlyc3QyOworCSAgfQorICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0MiwgX19sYXN0Miwgc3RkOjpjb3B5KF9fZmlyc3QxLAorCQkJCQkJICAgIF9fbGFzdDEsIF9fcmVzdWx0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gdGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byBzb3J0ZWQgcmFuZ2VzIHVzaW5nCisgICAqICBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzZXRfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgU3RhcnQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBFbmQgb2YgZmlyc3QgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBTdGFydCBvZiBzZWNvbmQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBFbmQgb2Ygc2Vjb25kIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICAgVGhlIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEByZXR1cm4gIEVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlLgorICAgKiAgQGluZ3JvdXAgc2V0X2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIGl0ZXJhdGVzIG92ZXIgYm90aCByYW5nZXMsIGNvcHlpbmcgZWxlbWVudHMgcHJlc2VudCBpbgorICAgKiAgb25lIHJhbmdlIGJ1dCBub3QgdGhlIG90aGVyIGluIG9yZGVyIHRvIHRoZSBvdXRwdXQgcmFuZ2UuICBJdGVyYXRvcnMKKyAgICogIGluY3JlbWVudCBmb3IgZWFjaCByYW5nZS4gIFdoZW4gdGhlIGN1cnJlbnQgZWxlbWVudCBvZiBvbmUgcmFuZ2UgaXMgbGVzcworICAgKiAgdGhhbiB0aGUgb3RoZXIgYWNjb3JkaW5nIHRvIEBwIGNvbXAsIHRoYXQgZWxlbWVudCBpcyBjb3BpZWQgYW5kIHRoZQorICAgKiAgaXRlcmF0b3IgYWR2YW5jZXMuICBJZiBhbiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBib3RoIHJhbmdlcyBhY2NvcmRpbmcKKyAgICogIHRvIEBwIF9fY29tcCwgbm8gZWxlbWVudHMgYXJlIGNvcGllZCBhbmQgYm90aCByYW5nZXMgYWR2YW5jZS4gIFRoZSBvdXRwdXQKKyAgICogIHJhbmdlIG1heSBub3Qgb3ZlcmxhcCBlaXRoZXIgaW5wdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCQkgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCisJCQkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJCSAgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkJCQkgIF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X0NvbXBhcmUsCisJCQkJICBfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fY29tcCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldF9wcmVkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2ZpcnN0MSwgX19jb21wKTsKKworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwlpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKKwkgIHsKKwkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOworCSAgICArK19fZmlyc3QxOworCSAgICArK19fcmVzdWx0OworCSAgfQorCWVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCisJICB7CisJICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKKwkgICAgKytfX2ZpcnN0MjsKKwkgICAgKytfX3Jlc3VsdDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgICsrX19maXJzdDE7CisJICAgICsrX19maXJzdDI7CisJICB9CisgICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCAKKwkJICAgICAgIHN0ZDo6Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKKyAgICB9CisKKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgaW4gYSByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGZpcnN0IGluc3RhbmNlIG9mIHRoZSBzbWFsbGVzdCB2YWx1ZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19maXJzdDsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQgPSBfX2ZpcnN0OworICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCisJaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQorCSAgX19yZXN1bHQgPSBfX2ZpcnN0OworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgaW4gYSByYW5nZSB1c2luZyBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGZpcnN0IGluc3RhbmNlIG9mIHRoZSBzbWFsbGVzdCB2YWx1ZQorICAgKiAgYWNjb3JkaW5nIHRvIF9fY29tcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0ZvcndhcmRJdGVyYXRvcgorICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCV9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9Db21wYXJlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2ZpcnN0OworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKKwlpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQorCSAgX19yZXN1bHQgPSBfX2ZpcnN0OworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgaW4gYSByYW5nZS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGZpcnN0IGluc3RhbmNlIG9mIHRoZSBsYXJnZXN0IHZhbHVlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX2ZpcnN0OworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKKwlpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCisJICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gdGhlIG1heGltdW0gZWxlbWVudCBpbiBhIHJhbmdlIHVzaW5nIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICBDb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgdGhlIGxhcmdlc3QgdmFsdWUKKyAgICogIGFjY29yZGluZyB0byBfX2NvbXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQlfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfQ29tcGFyZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0ID0gX19maXJzdDsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCWlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpCisJICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX1NUTF9BTEdPX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfYWxnb2Jhc2UuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfYWxnb2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2RkMTcxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9hbGdvYmFzZS5oCkBAIC0wLDAgKzEsMTIyNCBAQAorLy8gQ29yZSBhbGdvcml0aG1pYyBmYWNpbGl0aWVzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTgKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiaXRzL3N0bF9hbGdvYmFzZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7YWxnb3JpdGhtfQorICovCisKKyNpZm5kZWYgX1NUTF9BTEdPQkFTRV9ICisjZGVmaW5lIF9TVExfQUxHT0JBU0VfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC9udW1lcmljX3RyYWl0cy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3BhaXIuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4gLy8gRm9yIHN0ZDo6c3dhcCBhbmQgX0dMSUJDWFhfTU9WRQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgLy8gU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwNC0wOC9tc2cwMDE2Ny5odG1sOiBpbiBhCisgIC8vIG51dHNoZWxsLCB3ZSBhcmUgcGFydGlhbGx5IGltcGxlbWVudGluZyB0aGUgcmVzb2x1dGlvbiBvZiBEUiAxODcsCisgIC8vIHdoZW4gaXQncyBzYWZlLCBpLmUuLCB0aGUgdmFsdWVfdHlwZXMgYXJlIGVxdWFsLgorICB0ZW1wbGF0ZTxib29sIF9Cb29sVHlwZT4KKyAgICBzdHJ1Y3QgX19pdGVyX3N3YXAKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjI+CisgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXJhdG9yMSBfX2EsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fYikKKyAgICAgICAgeworICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorICAgICAgICAgICAgX1ZhbHVlVHlwZTE7CisgICAgICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSBfR0xJQkNYWF9NT1ZFKCpfX2EpOworICAgICAgICAgICpfX2EgPSBfR0xJQkNYWF9NT1ZFKCpfX2IpOworICAgICAgICAgICpfX2IgPSBfR0xJQkNYWF9NT1ZFKF9fdG1wKTsKKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXRlcl9zd2FwPHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgICAgICBzdGF0aWMgdm9pZCAKKyAgICAgICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcmF0b3IxIF9fYSwgX0ZvcndhcmRJdGVyYXRvcjIgX19iKQorICAgICAgICB7CisgICAgICAgICAgc3dhcCgqX19hLCAqX19iKTsKKyAgICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAvKioKKyAgICogIEBicmllZiBTd2FwcyB0aGUgY29udGVudHMgb2YgdHdvIGl0ZXJhdG9ycy4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19hICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19iICBBbm90aGVyIGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIE5vdGhpbmcuCisgICAqCisgICAqICBUaGlzIGZ1bmN0aW9uIHN3YXBzIHRoZSB2YWx1ZXMgcG9pbnRlZCB0byBieSB0d28gaXRlcmF0b3JzLCBub3QgdGhlCisgICAqICBpdGVyYXRvcnMgdGhlbXNlbHZlcy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgIGlubGluZSB2b2lkCisgICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcmF0b3IxIF9fYSwgX0ZvcndhcmRJdGVyYXRvcjIgX19iKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcjI+KQorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUyOworCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVmFsdWVUeXBlMSwKKwkJCQkgIF9WYWx1ZVR5cGUyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9WYWx1ZVR5cGUyLAorCQkJCSAgX1ZhbHVlVHlwZTE+KQorCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMT46OnJlZmVyZW5jZQorCV9SZWZlcmVuY2VUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IyPjo6cmVmZXJlbmNlCisJX1JlZmVyZW5jZVR5cGUyOworICAgICAgc3RkOjpfX2l0ZXJfc3dhcDxfX2FyZV9zYW1lPF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj46Ol9fdmFsdWUKKwkmJiBfX2FyZV9zYW1lPF9WYWx1ZVR5cGUxJiwgX1JlZmVyZW5jZVR5cGUxPjo6X192YWx1ZQorCSYmIF9fYXJlX3NhbWU8X1ZhbHVlVHlwZTImLCBfUmVmZXJlbmNlVHlwZTI+OjpfX3ZhbHVlPjo6CisJaXRlcl9zd2FwKF9fYSwgX19iKTsKKyNlbHNlCisgICAgICBzd2FwKCpfX2EsICpfX2IpOworI2VuZGlmCisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFN3YXAgdGhlIGVsZW1lbnRzIG9mIHR3byBzZXF1ZW5jZXMuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBBIGZvcndhcmQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgQW4gaXRlcmF0b3IgZXF1YWwgdG8gQHAgZmlyc3QyKyhsYXN0MS1maXJzdDEpLgorICAgKgorICAgKiAgU3dhcHMgZWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbZmlyc3QxLGxhc3QxKSB3aXRoIHRoZQorICAgKiAgY29ycmVzcG9uZGluZyBlbGVtZW50IGluIHRoZSByYW5nZSBAcCBbZmlyc3QyLChsYXN0MS1maXJzdDEpKS4KKyAgICogIFRoZSByYW5nZXMgbXVzdCBub3Qgb3ZlcmxhcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IyCisgICAgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbGFzdDEsCisJCV9Gb3J3YXJkSXRlcmF0b3IyIF9fZmlyc3QyKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0ZvcndhcmRJdGVyYXRvcjI+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKworICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCisJc3RkOjppdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKKyAgICAgIHJldHVybiBfX2ZpcnN0MjsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgVGhpcyBkb2VzIHdoYXQgeW91IHRoaW5rIGl0IGRvZXMuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19hICBBIHRoaW5nIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHBhcmFtICBfX2IgIEFub3RoZXIgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcmV0dXJuICAgVGhlIGxlc3NlciBvZiB0aGUgcGFyYW1ldGVycy4KKyAgICoKKyAgICogIFRoaXMgaXMgdGhlIHNpbXBsZSBjbGFzc2ljIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uICBJdCB3aWxsIHdvcmsgb24KKyAgICogIHRlbXBvcmFyeSBleHByZXNzaW9ucywgc2luY2UgdGhleSBhcmUgb25seSBldmFsdWF0ZWQgb25jZSwgdW5saWtlIGEKKyAgICogIHByZXByb2Nlc3NvciBtYWNyby4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb25zdCBfVHAmCisgICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9UcD4pCisgICAgICAvL3JldHVybiBfX2IgPCBfX2EgPyBfX2IgOiBfX2E7CisgICAgICBpZiAoX19iIDwgX19hKQorCXJldHVybiBfX2I7CisgICAgICByZXR1cm4gX19hOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBUaGlzIGRvZXMgd2hhdCB5b3UgdGhpbmsgaXQgZG9lcy4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2EgIEEgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0gIF9fYiAgQW5vdGhlciB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gICBUaGUgZ3JlYXRlciBvZiB0aGUgcGFyYW1ldGVycy4KKyAgICoKKyAgICogIFRoaXMgaXMgdGhlIHNpbXBsZSBjbGFzc2ljIGdlbmVyaWMgaW1wbGVtZW50YXRpb24uICBJdCB3aWxsIHdvcmsgb24KKyAgICogIHRlbXBvcmFyeSBleHByZXNzaW9ucywgc2luY2UgdGhleSBhcmUgb25seSBldmFsdWF0ZWQgb25jZSwgdW5saWtlIGEKKyAgICogIHByZXByb2Nlc3NvciBtYWNyby4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb25zdCBfVHAmCisgICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9UcD4pCisgICAgICAvL3JldHVybiAgX19hIDwgX19iID8gX19iIDogX19hOworICAgICAgaWYgKF9fYSA8IF9fYikKKwlyZXR1cm4gX19iOworICAgICAgcmV0dXJuIF9fYTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgVGhpcyBkb2VzIHdoYXQgeW91IHRoaW5rIGl0IGRvZXMuCisgICAqICBAaW5ncm91cCBzb3J0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19hICBBIHRoaW5nIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHBhcmFtICBfX2IgIEFub3RoZXIgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0gIF9fY29tcCAgQSBAbGluayBjb21wYXJpc29uX2Z1bmN0b3JzIGNvbXBhcmlzb24gZnVuY3RvckBlbmRsaW5rLgorICAgKiAgQHJldHVybiAgIFRoZSBsZXNzZXIgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAqCisgICAqICBUaGlzIHdpbGwgd29yayBvbiB0ZW1wb3JhcnkgZXhwcmVzc2lvbnMsIHNpbmNlIHRoZXkgYXJlIG9ubHkgZXZhbHVhdGVkCisgICAqICBvbmNlLCB1bmxpa2UgYSBwcmVwcm9jZXNzb3IgbWFjcm8uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIGNvbnN0IF9UcCYKKyAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy9yZXR1cm4gX19jb21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKKyAgICAgIGlmIChfX2NvbXAoX19iLCBfX2EpKQorCXJldHVybiBfX2I7CisgICAgICByZXR1cm4gX19hOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBUaGlzIGRvZXMgd2hhdCB5b3UgdGhpbmsgaXQgZG9lcy4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2EgIEEgdGhpbmcgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0gIF9fYiAgQW5vdGhlciB0aGluZyBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgX19jb21wICBBIEBsaW5rIGNvbXBhcmlzb25fZnVuY3RvcnMgY29tcGFyaXNvbiBmdW5jdG9yQGVuZGxpbmsuCisgICAqICBAcmV0dXJuICAgVGhlIGdyZWF0ZXIgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAqCisgICAqICBUaGlzIHdpbGwgd29yayBvbiB0ZW1wb3JhcnkgZXhwcmVzc2lvbnMsIHNpbmNlIHRoZXkgYXJlIG9ubHkgZXZhbHVhdGVkCisgICAqICBvbmNlLCB1bmxpa2UgYSBwcmVwcm9jZXNzb3IgbWFjcm8uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIGNvbnN0IF9UcCYKKyAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy9yZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9fYiA6IF9fYTsKKyAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQorCXJldHVybiBfX2I7CisgICAgICByZXR1cm4gX19hOworICAgIH0KKworICAvLyBJZiBfSXRlcmF0b3IgaXMgYSBfX25vcm1hbF9pdGVyYXRvciByZXR1cm4gaXRzIGJhc2UgKGEgcGxhaW4gcG9pbnRlciwKKyAgLy8gbm9ybWFsbHkpIG90aGVyd2lzZSByZXR1cm4gaXQgdW50b3VjaGVkLiAgU2VlIGNvcHksIGZpbGwsIC4uLiAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIHN0cnVjdCBfTml0ZXJfYmFzZQorICAgIDogX0l0ZXJfYmFzZTxfSXRlcmF0b3IsIF9faXNfbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvcj46Ol9fdmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX05pdGVyX2Jhc2U8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfdHlwZQorICAgIF9fbml0ZXJfYmFzZShfSXRlcmF0b3IgX19pdCkKKyAgICB7IHJldHVybiBzdGQ6Ol9OaXRlcl9iYXNlPF9JdGVyYXRvcj46Ol9TX2Jhc2UoX19pdCk7IH0KKworICAvLyBMaWtld2lzZSwgZm9yIG1vdmVfaXRlcmF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBzdHJ1Y3QgX01pdGVyX2Jhc2UKKyAgICA6IF9JdGVyX2Jhc2U8X0l0ZXJhdG9yLCBfX2lzX21vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6X192YWx1ZT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSBfTWl0ZXJfYmFzZTxfSXRlcmF0b3I+OjppdGVyYXRvcl90eXBlCisgICAgX19taXRlcl9iYXNlKF9JdGVyYXRvciBfX2l0KQorICAgIHsgcmV0dXJuIHN0ZDo6X01pdGVyX2Jhc2U8X0l0ZXJhdG9yPjo6X1NfYmFzZShfX2l0KTsgfQorCisgIC8vIEFsbCBvZiB0aGVzZSBhdXhpbGlhcnkgc3RydWN0cyBzZXJ2ZSB0d28gcHVycG9zZXMuICAoMSkgUmVwbGFjZQorICAvLyBjYWxscyB0byBjb3B5IHdpdGggbWVtbW92ZSB3aGVuZXZlciBwb3NzaWJsZS4gIChNZW1tb3ZlLCBub3QgbWVtY3B5LAorICAvLyBiZWNhdXNlIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHJhbmdlcyBhcmUgcGVybWl0dGVkIHRvIG92ZXJsYXAuKQorICAvLyAoMikgSWYgd2UncmUgdXNpbmcgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMsIHRoZW4gd3JpdGUgdGhlIGxvb3AgYXMKKyAgLy8gYSBmb3IgbG9vcCB3aXRoIGFuIGV4cGxpY2l0IGNvdW50LgorCisgIHRlbXBsYXRlPGJvb2wsIGJvb2wsIHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2NvcHlfbW92ZQorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgICAgICBzdGF0aWMgX09JCisgICAgICAgIF9fY29weV9tKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQorCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgfTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5PgorICAgIHN0cnVjdCBfX2NvcHlfbW92ZTx0cnVlLCBmYWxzZSwgX0NhdGVnb3J5PgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgICAgICBzdGF0aWMgX09JCisgICAgICAgIF9fY29weV9tKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQorCSAgICAqX19yZXN1bHQgPSBzdGQ6Om1vdmUoKl9fZmlyc3QpOworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9OworI2VuZGlmCisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2NvcHlfbW92ZTxmYWxzZSwgZmFsc2UsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgICAgICBzdGF0aWMgX09JCisgICAgICAgIF9fY29weV9tKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgICAgIHsgCisJICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUk+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOworCSAgZm9yKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OworCSAgICAgICsrX19maXJzdDsKKwkgICAgICArK19fcmVzdWx0OworCSAgICB9CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH07CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19jb3B5X21vdmU8dHJ1ZSwgZmFsc2UsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgICAgICBzdGF0aWMgX09JCisgICAgICAgIF9fY29weV9tKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgICAgIHsgCisJICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUk+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOworCSAgZm9yKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKKwkgICAgeworCSAgICAgICpfX3Jlc3VsdCA9IHN0ZDo6bW92ZSgqX19maXJzdCk7CisJICAgICAgKytfX2ZpcnN0OworCSAgICAgICsrX19yZXN1bHQ7CisJICAgIH0KKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgfTsKKyNlbmRpZgorCisgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZT4KKyAgICBzdHJ1Y3QgX19jb3B5X21vdmU8X0lzTW92ZSwgdHJ1ZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgX1RwKgorICAgICAgICBfX2NvcHlfbShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQorICAgICAgICB7CisJICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisJICBpZiAoX051bSkKKwkgICAgX19idWlsdGluX21lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CisJICByZXR1cm4gX19yZXN1bHQgKyBfTnVtOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZSwgdHlwZW5hbWUgX0lJLCB0eXBlbmFtZSBfT0k+CisgICAgaW5saW5lIF9PSQorICAgIF9fY29weV9tb3ZlX2EoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QsIF9PSSBfX3Jlc3VsdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUk+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGVJOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X09JPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlTzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JST46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKKyAgICAgIGNvbnN0IGJvb2wgX19zaW1wbGUgPSAoX19pc190cml2aWFsKF9WYWx1ZVR5cGVJKQorCSAgICAgICAgICAgICAgICAgICAgICYmIF9faXNfcG9pbnRlcjxfSUk+OjpfX3ZhbHVlCisJICAgICAgICAgICAgICAgICAgICAgJiYgX19pc19wb2ludGVyPF9PST46Ol9fdmFsdWUKKwkJCSAgICAgJiYgX19hcmVfc2FtZTxfVmFsdWVUeXBlSSwgX1ZhbHVlVHlwZU8+OjpfX3ZhbHVlKTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19jb3B5X21vdmU8X0lzTW92ZSwgX19zaW1wbGUsCisJICAgICAgICAgICAgICAgICAgICAgIF9DYXRlZ29yeT46Ol9fY29weV9tKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOworICAgIH0KKworICAvLyBIZWxwZXJzIGZvciBzdHJlYW1idWYgaXRlcmF0b3JzIChlaXRoZXIgaXN0cmVhbSBvciBvc3RyZWFtKS4KKyAgLy8gTkI6IGF2b2lkIGluY2x1ZGluZyA8aW9zZndkPiwgcmVsYXRpdmVseSBsYXJnZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfY2hhcjxfQ2hhclQ+OjpfX3ZhbHVlLCAKKwkgICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBjaGFyX3RyYWl0czxfQ2hhclQ+ID4gPjo6X190eXBlCisgICAgX19jb3B5X21vdmVfYTIoX0NoYXJUKiwgX0NoYXJUKiwKKwkJICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIGNoYXJfdHJhaXRzPF9DaGFyVD4gPik7CisKKyAgdGVtcGxhdGU8Ym9vbCBfSXNNb3ZlLCB0eXBlbmFtZSBfQ2hhclQ+CisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUPjo6X192YWx1ZSwgCisJICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+ID46Ol9fdHlwZQorICAgIF9fY29weV9tb3ZlX2EyKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCosCisJCSAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBjaGFyX3RyYWl0czxfQ2hhclQ+ID4pOworCisgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZSwgdHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsCisJCQkJICAgIF9DaGFyVCo+OjpfX3R5cGUKKyAgICBfX2NvcHlfbW92ZV9hMihpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+LAorCQkgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiA+LCBfQ2hhclQqKTsKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgIGlubGluZSBfT0kKKyAgICBfX2NvcHlfbW92ZV9hMihfSUkgX19maXJzdCwgX0lJIF9fbGFzdCwgX09JIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHJldHVybiBfT0koc3RkOjpfX2NvcHlfbW92ZV9hPF9Jc01vdmU+KHN0ZDo6X19uaXRlcl9iYXNlKF9fZmlyc3QpLAorCQkJCQkgICAgIHN0ZDo6X19uaXRlcl9iYXNlKF9fbGFzdCksCisJCQkJCSAgICAgc3RkOjpfX25pdGVyX2Jhc2UoX19yZXN1bHQpKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcGllcyB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIGludG8gcmVzdWx0LgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0IEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICByZXN1bHQgKyAoZmlyc3QgLSBsYXN0KQorICAgKgorICAgKiAgVGhpcyBpbmxpbmUgZnVuY3Rpb24gd2lsbCBib2lsIGRvd24gdG8gYSBjYWxsIHRvIEBjIG1lbW1vdmUgd2hlbmV2ZXIKKyAgICogIHBvc3NpYmxlLiAgRmFpbGluZyB0aGF0LCBpZiByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBhcmUgcGFzc2VkLCB0aGVuIHRoZQorICAgKiAgbG9vcCBjb3VudCB3aWxsIGJlIGtub3duIChhbmQgdGhlcmVmb3JlIGEgY2FuZGlkYXRlIGZvciBjb21waWxlcgorICAgKiAgb3B0aW1pemF0aW9ucyBzdWNoIGFzIHVucm9sbGluZykuICBSZXN1bHQgbWF5IG5vdCBiZSBjb250YWluZWQgd2l0aGluCisgICAqICBbZmlyc3QsbGFzdCk7IHRoZSBjb3B5X2JhY2t3YXJkIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAqCisgICAqICBOb3RlIHRoYXQgdGhlIGVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlIGlzIHBlcm1pdHRlZCB0byBiZSBjb250YWluZWQKKyAgICogIHdpdGhpbiBbZmlyc3QsbGFzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgIGlubGluZSBfT0kKKyAgICBjb3B5KF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lJPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PSSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JST46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHJldHVybiAoc3RkOjpfX2NvcHlfbW92ZV9hMjxfX2lzX21vdmVfaXRlcmF0b3I8X0lJPjo6X192YWx1ZT4KKwkgICAgICAoc3RkOjpfX21pdGVyX2Jhc2UoX19maXJzdCksIHN0ZDo6X19taXRlcl9iYXNlKF9fbGFzdCksCisJICAgICAgIF9fcmVzdWx0KSk7CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAvKioKKyAgICogIEBicmllZiBNb3ZlcyB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIGludG8gcmVzdWx0LgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0IEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICByZXN1bHQgKyAoZmlyc3QgLSBsYXN0KQorICAgKgorICAgKiAgVGhpcyBpbmxpbmUgZnVuY3Rpb24gd2lsbCBib2lsIGRvd24gdG8gYSBjYWxsIHRvIEBjIG1lbW1vdmUgd2hlbmV2ZXIKKyAgICogIHBvc3NpYmxlLiAgRmFpbGluZyB0aGF0LCBpZiByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBhcmUgcGFzc2VkLCB0aGVuIHRoZQorICAgKiAgbG9vcCBjb3VudCB3aWxsIGJlIGtub3duIChhbmQgdGhlcmVmb3JlIGEgY2FuZGlkYXRlIGZvciBjb21waWxlcgorICAgKiAgb3B0aW1pemF0aW9ucyBzdWNoIGFzIHVucm9sbGluZykuICBSZXN1bHQgbWF5IG5vdCBiZSBjb250YWluZWQgd2l0aGluCisgICAqICBbZmlyc3QsbGFzdCk7IHRoZSBtb3ZlX2JhY2t3YXJkIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAqCisgICAqICBOb3RlIHRoYXQgdGhlIGVuZCBvZiB0aGUgb3V0cHV0IHJhbmdlIGlzIHBlcm1pdHRlZCB0byBiZSBjb250YWluZWQKKyAgICogIHdpdGhpbiBbZmlyc3QsbGFzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSSwgdHlwZW5hbWUgX09JPgorICAgIGlubGluZSBfT0kKKyAgICBtb3ZlKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lJPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PSSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JST46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHJldHVybiBzdGQ6Ol9fY29weV9tb3ZlX2EyPHRydWU+KHN0ZDo6X19taXRlcl9iYXNlKF9fZmlyc3QpLAorCQkJCSAgICAgICBzdGQ6Ol9fbWl0ZXJfYmFzZShfX2xhc3QpLCBfX3Jlc3VsdCk7CisgICAgfQorCisjZGVmaW5lIF9HTElCQ1hYX01PVkUzKF9UcCwgX1VwLCBfVnApIHN0ZDo6bW92ZShfVHAsIF9VcCwgX1ZwKQorI2Vsc2UKKyNkZWZpbmUgX0dMSUJDWFhfTU9WRTMoX1RwLCBfVXAsIF9WcCkgc3RkOjpjb3B5KF9UcCwgX1VwLCBfVnApCisjZW5kaWYKKworICB0ZW1wbGF0ZTxib29sLCBib29sLCB0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19jb3B5X21vdmVfYmFja3dhcmQKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgorICAgICAgICBzdGF0aWMgX0JJMgorICAgICAgICBfX2NvcHlfbW92ZV9iKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH07CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeT4KKyAgICBzdHJ1Y3QgX19jb3B5X21vdmVfYmFja3dhcmQ8dHJ1ZSwgZmFsc2UsIF9DYXRlZ29yeT4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgorICAgICAgICBzdGF0aWMgX0JJMgorICAgICAgICBfX2NvcHlfbW92ZV9iKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgICAgKi0tX19yZXN1bHQgPSBzdGQ6Om1vdmUoKi0tX19sYXN0KTsKKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgfTsKKyNlbmRpZgorCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19jb3B5X21vdmVfYmFja3dhcmQ8ZmFsc2UsIGZhbHNlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgorICAgICAgICBzdGF0aWMgX0JJMgorICAgICAgICBfX2NvcHlfbW92ZV9iKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkxPjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsKKwkgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCisJICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9OworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fY29weV9tb3ZlX2JhY2t3YXJkPHRydWUsIGZhbHNlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgorICAgICAgICBzdGF0aWMgX0JJMgorICAgICAgICBfX2NvcHlfbW92ZV9iKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCisgICAgICAgIHsKKwkgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkxPjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsKKwkgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCisJICAgICotLV9fcmVzdWx0ID0gc3RkOjptb3ZlKCotLV9fbGFzdCk7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmU+CisgICAgc3RydWN0IF9fY29weV9tb3ZlX2JhY2t3YXJkPF9Jc01vdmUsIHRydWUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIF9UcCoKKyAgICAgICAgX19jb3B5X21vdmVfYihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQorICAgICAgICB7CisJICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisJICBpZiAoX051bSkKKwkgICAgX19idWlsdGluX21lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOworCSAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CisgICAgaW5saW5lIF9CSTIKKyAgICBfX2NvcHlfbW92ZV9iYWNrd2FyZF9hKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTE+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CisgICAgICBjb25zdCBib29sIF9fc2ltcGxlID0gKF9faXNfdHJpdmlhbChfVmFsdWVUeXBlMSkKKwkgICAgICAgICAgICAgICAgICAgICAmJiBfX2lzX3BvaW50ZXI8X0JJMT46Ol9fdmFsdWUKKwkgICAgICAgICAgICAgICAgICAgICAmJiBfX2lzX3BvaW50ZXI8X0JJMj46Ol9fdmFsdWUKKwkJCSAgICAgJiYgX19hcmVfc2FtZTxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+OjpfX3ZhbHVlKTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19jb3B5X21vdmVfYmFja3dhcmQ8X0lzTW92ZSwgX19zaW1wbGUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DYXRlZ29yeT46Ol9fY29weV9tb3ZlX2IoX19maXJzdCwKKwkJCQkJCQkJIF9fbGFzdCwKKwkJCQkJCQkJIF9fcmVzdWx0KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Ym9vbCBfSXNNb3ZlLCB0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgorICAgIGlubGluZSBfQkkyCisgICAgX19jb3B5X21vdmVfYmFja3dhcmRfYTIoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKKyAgICB7CisgICAgICByZXR1cm4gX0JJMihzdGQ6Ol9fY29weV9tb3ZlX2JhY2t3YXJkX2E8X0lzTW92ZT4KKwkJICAoc3RkOjpfX25pdGVyX2Jhc2UoX19maXJzdCksIHN0ZDo6X19uaXRlcl9iYXNlKF9fbGFzdCksCisJCSAgIHN0ZDo6X19uaXRlcl9iYXNlKF9fcmVzdWx0KSkpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBDb3BpZXMgdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSBpbnRvIHJlc3VsdC4KKyAgICogIEBpbmdyb3VwIG11dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdCAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBBIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0IEEgYmlkaXJlY3Rpb25hbCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICByZXN1bHQgLSAoZmlyc3QgLSBsYXN0KQorICAgKgorICAgKiAgVGhlIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgY29weSwgYnV0IHN0YXJ0cyBhdCB0aGUgZW5kIG9mIHRoZQorICAgKiAgcmFuZ2UgYW5kIHdvcmtzIGl0cyB3YXkgdG8gdGhlIHN0YXJ0LCByZXR1cm5pbmcgdGhlIHN0YXJ0IG9mIHRoZSByZXN1bHQuCisgICAqICBUaGlzIGlubGluZSBmdW5jdGlvbiB3aWxsIGJvaWwgZG93biB0byBhIGNhbGwgdG8gQGMgbWVtbW92ZSB3aGVuZXZlcgorICAgKiAgcG9zc2libGUuICBGYWlsaW5nIHRoYXQsIGlmIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzIGFyZSBwYXNzZWQsIHRoZW4gdGhlCisgICAqICBsb29wIGNvdW50IHdpbGwgYmUga25vd24gKGFuZCB0aGVyZWZvcmUgYSBjYW5kaWRhdGUgZm9yIGNvbXBpbGVyCisgICAqICBvcHRpbWl6YXRpb25zIHN1Y2ggYXMgdW5yb2xsaW5nKS4KKyAgICoKKyAgICogIFJlc3VsdCBtYXkgbm90IGJlIGluIHRoZSByYW5nZSAoZmlyc3QsbGFzdF0uICBVc2UgY29weSBpbnN0ZWFkLiAgTm90ZQorICAgKiAgdGhhdCB0aGUgc3RhcnQgb2YgdGhlIG91dHB1dCByYW5nZSBtYXkgb3ZlcmxhcCBbZmlyc3QsbGFzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CisgICAgaW5saW5lIF9CSTIKKyAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfQkkxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PF9CSTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkxPjo6dmFsdWVfdHlwZSwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICByZXR1cm4gKHN0ZDo6X19jb3B5X21vdmVfYmFja3dhcmRfYTI8X19pc19tb3ZlX2l0ZXJhdG9yPF9CSTE+OjpfX3ZhbHVlPgorCSAgICAgIChzdGQ6Ol9fbWl0ZXJfYmFzZShfX2ZpcnN0KSwgc3RkOjpfX21pdGVyX2Jhc2UoX19sYXN0KSwKKwkgICAgICAgX19yZXN1bHQpKTsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIC8qKgorICAgKiAgQGJyaWVmIE1vdmVzIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgaW50byByZXN1bHQuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEEgYmlkaXJlY3Rpb25hbCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQSBiaWRpcmVjdGlvbmFsIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCBBIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgcmVzdWx0IC0gKGZpcnN0IC0gbGFzdCkKKyAgICoKKyAgICogIFRoZSBmdW5jdGlvbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIG1vdmUsIGJ1dCBzdGFydHMgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICogIHJhbmdlIGFuZCB3b3JrcyBpdHMgd2F5IHRvIHRoZSBzdGFydCwgcmV0dXJuaW5nIHRoZSBzdGFydCBvZiB0aGUgcmVzdWx0LgorICAgKiAgVGhpcyBpbmxpbmUgZnVuY3Rpb24gd2lsbCBib2lsIGRvd24gdG8gYSBjYWxsIHRvIEBjIG1lbW1vdmUgd2hlbmV2ZXIKKyAgICogIHBvc3NpYmxlLiAgRmFpbGluZyB0aGF0LCBpZiByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBhcmUgcGFzc2VkLCB0aGVuIHRoZQorICAgKiAgbG9vcCBjb3VudCB3aWxsIGJlIGtub3duIChhbmQgdGhlcmVmb3JlIGEgY2FuZGlkYXRlIGZvciBjb21waWxlcgorICAgKiAgb3B0aW1pemF0aW9ucyBzdWNoIGFzIHVucm9sbGluZykuCisgICAqCisgICAqICBSZXN1bHQgbWF5IG5vdCBiZSBpbiB0aGUgcmFuZ2UgKGZpcnN0LGxhc3RdLiAgVXNlIG1vdmUgaW5zdGVhZC4gIE5vdGUKKyAgICogIHRoYXQgdGhlIHN0YXJ0IG9mIHRoZSBvdXRwdXQgcmFuZ2UgbWF5IG92ZXJsYXAgW2ZpcnN0LGxhc3QpLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgorICAgIGlubGluZSBfQkkyCisgICAgbW92ZV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0JpZGlyZWN0aW9uYWxJdGVyYXRvckNvbmNlcHQ8X0JJMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yQ29uY2VwdDxfQkkyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMT46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19jb3B5X21vdmVfYmFja3dhcmRfYTI8dHJ1ZT4oc3RkOjpfX21pdGVyX2Jhc2UoX19maXJzdCksCisJCQkJCQlzdGQ6Ol9fbWl0ZXJfYmFzZShfX2xhc3QpLAorCQkJCQkJX19yZXN1bHQpOworICAgIH0KKworI2RlZmluZSBfR0xJQkNYWF9NT1ZFX0JBQ0tXQVJEMyhfVHAsIF9VcCwgX1ZwKSBzdGQ6Om1vdmVfYmFja3dhcmQoX1RwLCBfVXAsIF9WcCkKKyNlbHNlCisjZGVmaW5lIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9UcCwgX1VwLCBfVnApIHN0ZDo6Y29weV9iYWNrd2FyZChfVHAsIF9VcCwgX1ZwKQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZQorICAgIF9fZ251X2N4eDo6X19lbmFibGVfaWY8IV9faXNfc2NhbGFyPF9UcD46Ol9fdmFsdWUsIHZvaWQ+OjpfX3R5cGUKKyAgICBfX2ZpbGxfYShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorIAkgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkqX19maXJzdCA9IF9fdmFsdWU7CisgICAgfQorICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lCisgICAgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX3NjYWxhcjxfVHA+OjpfX3ZhbHVlLCB2b2lkPjo6X190eXBlCisgICAgX19maWxsX2EoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX190bXAgPSBfX3ZhbHVlOworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJKl9fZmlyc3QgPSBfX3RtcDsKKyAgICB9CisKKyAgLy8gU3BlY2lhbGl6YXRpb246IGZvciBjaGFyIHR5cGVzIHdlIGNhbiB1c2UgbWVtc2V0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lCisgICAgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2J5dGU8X1RwPjo6X192YWx1ZSwgdm9pZD46Ol9fdHlwZQorICAgIF9fZmlsbF9hKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIGNvbnN0IF9UcCYgX19jKQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX3RtcCA9IF9fYzsKKyAgICAgIF9fYnVpbHRpbl9tZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLAorCQkgICAgICAgX19sYXN0IC0gX19maXJzdCk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbGxzIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgd2l0aCBjb3BpZXMgb2YgdmFsdWUuCisgICAqICBAaW5ncm91cCBtdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEEgZm9yd2FyZCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQSBmb3J3YXJkIGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3ZhbHVlICBBIHJlZmVyZW5jZS10by1jb25zdCBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gICBOb3RoaW5nLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhIHJhbmdlIHdpdGggY29waWVzIG9mIHRoZSBzYW1lIHZhbHVlLiAgRm9yIGNoYXIKKyAgICogIHR5cGVzIGZpbGxpbmcgY29udGlndW91cyBhcmVhcyBvZiBtZW1vcnksIHRoaXMgYmVjb21lcyBhbiBpbmxpbmUgY2FsbAorICAgKiAgdG8gQGMgbWVtc2V0IG9yIEBjIHdtZW1zZXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIGZpbGwoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHN0ZDo6X19maWxsX2Eoc3RkOjpfX25pdGVyX2Jhc2UoX19maXJzdCksIHN0ZDo6X19uaXRlcl9iYXNlKF9fbGFzdCksCisJCSAgICBfX3ZhbHVlKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZQorICAgIF9fZ251X2N4eDo6X19lbmFibGVfaWY8IV9faXNfc2NhbGFyPF9UcD46Ol9fdmFsdWUsIF9PdXRwdXRJdGVyYXRvcj46Ol9fdHlwZQorICAgIF9fZmlsbF9uX2EoX091dHB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIGZvciAoX19kZWNsdHlwZShfX24gKyAwKSBfX25pdGVyID0gX19uOworCSAgIF9fbml0ZXIgPiAwOyAtLV9fbml0ZXIsICsrX19maXJzdCkKKwkqX19maXJzdCA9IF9fdmFsdWU7CisgICAgICByZXR1cm4gX19maXJzdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZQorICAgIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19zY2FsYXI8X1RwPjo6X192YWx1ZSwgX091dHB1dEl0ZXJhdG9yPjo6X190eXBlCisgICAgX19maWxsX25fYShfT3V0cHV0SXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCisgICAgeworICAgICAgY29uc3QgX1RwIF9fdG1wID0gX192YWx1ZTsKKyAgICAgIGZvciAoX19kZWNsdHlwZShfX24gKyAwKSBfX25pdGVyID0gX19uOworCSAgIF9fbml0ZXIgPiAwOyAtLV9fbml0ZXIsICsrX19maXJzdCkKKwkqX19maXJzdCA9IF9fdG1wOworICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lCisgICAgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2J5dGU8X1RwPjo6X192YWx1ZSwgX1RwKj46Ol9fdHlwZQorICAgIF9fZmlsbF9uX2EoX1RwKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX19jKQorICAgIHsKKyAgICAgIHN0ZDo6X19maWxsX2EoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKKyAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaWxscyB0aGUgcmFuZ2UgW2ZpcnN0LGZpcnN0K24pIHdpdGggY29waWVzIG9mIHZhbHVlLgorICAgKiAgQGluZ3JvdXAgbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBvdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbiAgICAgIFRoZSBjb3VudCBvZiBjb3BpZXMgdG8gcGVyZm9ybS4KKyAgICogIEBwYXJhbSAgX192YWx1ZSAgQSByZWZlcmVuY2UtdG8tY29uc3Qgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcmV0dXJuICAgVGhlIGl0ZXJhdG9yIGF0IGZpcnN0K24uCisgICAqCisgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgcmFuZ2Ugd2l0aCBjb3BpZXMgb2YgdGhlIHNhbWUgdmFsdWUuICBGb3IgY2hhcgorICAgKiAgdHlwZXMgZmlsbGluZyBjb250aWd1b3VzIGFyZWFzIG9mIG1lbW9yeSwgdGhpcyBiZWNvbWVzIGFuIGlubGluZSBjYWxsCisgICAqICB0byBAYyBtZW1zZXQgb3IgQCB3bWVtc2V0LgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgKiAgRFIgODY1LiBNb3JlIGFsZ29yaXRobXMgdGhhdCB0aHJvdyBhd2F5IGluZm9ybWF0aW9uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PSSwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX09JCisgICAgZmlsbF9uKF9PSSBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X09JLCBfVHA+KQorCisgICAgICByZXR1cm4gX09JKHN0ZDo6X19maWxsX25fYShzdGQ6Ol9fbml0ZXJfYmFzZShfX2ZpcnN0KSwgX19uLCBfX3ZhbHVlKSk7CisgICAgfQorCisgIHRlbXBsYXRlPGJvb2wgX0Jvb2xUeXBlPgorICAgIHN0cnVjdCBfX2VxdWFsCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJMSwgdHlwZW5hbWUgX0lJMj4KKyAgICAgICAgc3RhdGljIGJvb2wKKyAgICAgICAgZXF1YWwoX0lJMSBfX2ZpcnN0MSwgX0lJMSBfX2xhc3QxLCBfSUkyIF9fZmlyc3QyKQorICAgICAgICB7CisJICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKKwkgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCisJICAgICAgcmV0dXJuIGZhbHNlOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2VxdWFsPHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgYm9vbAorICAgICAgICBlcXVhbChjb25zdCBfVHAqIF9fZmlyc3QxLCBjb25zdCBfVHAqIF9fbGFzdDEsIGNvbnN0IF9UcCogX19maXJzdDIpCisgICAgICAgIHsKKwkgIHJldHVybiAhX19idWlsdGluX21lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIHNpemVvZihfVHApCisJCQkJICAgKiAoX19sYXN0MSAtIF9fZmlyc3QxKSk7CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJMSwgdHlwZW5hbWUgX0lJMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fZXF1YWxfYXV4KF9JSTEgX19maXJzdDEsIF9JSTEgX19sYXN0MSwgX0lJMiBfX2ZpcnN0MikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkxPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworICAgICAgY29uc3QgYm9vbCBfX3NpbXBsZSA9ICgoX19pc19pbnRlZ2VyPF9WYWx1ZVR5cGUxPjo6X192YWx1ZQorCQkJICAgICAgfHwgX19pc19wb2ludGVyPF9WYWx1ZVR5cGUxPjo6X192YWx1ZSkKKwkgICAgICAgICAgICAgICAgICAgICAmJiBfX2lzX3BvaW50ZXI8X0lJMT46Ol9fdmFsdWUKKwkgICAgICAgICAgICAgICAgICAgICAmJiBfX2lzX3BvaW50ZXI8X0lJMj46Ol9fdmFsdWUKKwkJCSAgICAgJiYgX19hcmVfc2FtZTxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+OjpfX3ZhbHVlKTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19lcXVhbDxfX3NpbXBsZT46OmVxdWFsKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2xjX3JhaQorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSTEsIHR5cGVuYW1lIF9JSTI+CisgICAgICAgIHN0YXRpYyBfSUkxCisgICAgICAgIF9fbmV3bGFzdDEoX0lJMSwgX0lJMSBfX2xhc3QxLCBfSUkyLCBfSUkyKQorICAgICAgICB7IHJldHVybiBfX2xhc3QxOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JST4KKyAgICAgICAgc3RhdGljIGJvb2wKKyAgICAgICAgX19jbmQyKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQorICAgICAgICB7IHJldHVybiBfX2ZpcnN0ICE9IF9fbGFzdDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2xjX3JhaTxyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSTEsIHR5cGVuYW1lIF9SQUkyPgorICAgICAgICBzdGF0aWMgX1JBSTEKKyAgICAgICAgX19uZXdsYXN0MShfUkFJMSBfX2ZpcnN0MSwgX1JBSTEgX19sYXN0MSwKKwkJICAgX1JBSTIgX19maXJzdDIsIF9SQUkyIF9fbGFzdDIpCisgICAgICAgIHsKKwkgIGNvbnN0IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUkFJMT46OmRpZmZlcmVuY2VfdHlwZQorCSAgICBfX2RpZmYxID0gX19sYXN0MSAtIF9fZmlyc3QxOworCSAgY29uc3QgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SQUkyPjo6ZGlmZmVyZW5jZV90eXBlCisJICAgIF9fZGlmZjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CisJICByZXR1cm4gX19kaWZmMiA8IF9fZGlmZjEgPyBfX2ZpcnN0MSArIF9fZGlmZjIgOiBfX2xhc3QxOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBST4KKyAgICAgICAgc3RhdGljIGJvb2wKKyAgICAgICAgX19jbmQyKF9SQUksIF9SQUkpCisgICAgICAgIHsgcmV0dXJuIHRydWU7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGJvb2wgX0Jvb2xUeXBlPgorICAgIHN0cnVjdCBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJMSwgdHlwZW5hbWUgX0lJMj4KKyAgICAgICAgc3RhdGljIGJvb2wgX19sYyhfSUkxLCBfSUkxLCBfSUkyLCBfSUkyKTsKKyAgICB9OworCisgIHRlbXBsYXRlPGJvb2wgX0Jvb2xUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSTEsIHR5cGVuYW1lIF9JSTI+CisgICAgICBib29sCisgICAgICBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlPF9Cb29sVHlwZT46OgorICAgICAgX19sYyhfSUkxIF9fZmlyc3QxLCBfSUkxIF9fbGFzdDEsIF9JSTIgX19maXJzdDIsIF9JSTIgX19sYXN0MikKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5MTsKKwl0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5MjsKKwl0eXBlZGVmIHN0ZDo6X19sY19yYWk8X0NhdGVnb3J5MSwgX0NhdGVnb3J5Mj4gCV9fcmFpX3R5cGU7CisJCisJX19sYXN0MSA9IF9fcmFpX3R5cGU6Ol9fbmV3bGFzdDEoX19maXJzdDEsIF9fbGFzdDEsCisJCQkJCSBfX2ZpcnN0MiwgX19sYXN0Mik7CisJZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19yYWlfdHlwZTo6X19jbmQyKF9fZmlyc3QyLCBfX2xhc3QyKTsKKwkgICAgICsrX19maXJzdDEsICsrX19maXJzdDIpCisJICB7CisJICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCisJICAgICAgcmV0dXJuIHRydWU7CisJICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCisJICAgICAgcmV0dXJuIGZhbHNlOworCSAgfQorCXJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CisgICAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlPHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgICAgIHN0YXRpYyBib29sCisgICAgICAgIF9fbGMoY29uc3QgX1RwKiBfX2ZpcnN0MSwgY29uc3QgX1RwKiBfX2xhc3QxLAorCSAgICAgY29uc3QgX1VwKiBfX2ZpcnN0MiwgY29uc3QgX1VwKiBfX2xhc3QyKQorCXsKKwkgIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CisJICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOworCSAgY29uc3QgaW50IF9fcmVzdWx0ID0gX19idWlsdGluX21lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsCisJCQkJCQlzdGQ6Om1pbihfX2xlbjEsIF9fbGVuMikpOworCSAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJMSwgdHlwZW5hbWUgX0lJMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfYXV4KF9JSTEgX19maXJzdDEsIF9JSTEgX19sYXN0MSwKKwkJCQkgIF9JSTIgX19maXJzdDIsIF9JSTIgX19sYXN0MikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkxPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworICAgICAgY29uc3QgYm9vbCBfX3NpbXBsZSA9CisJKF9faXNfYnl0ZTxfVmFsdWVUeXBlMT46Ol9fdmFsdWUgJiYgX19pc19ieXRlPF9WYWx1ZVR5cGUyPjo6X192YWx1ZQorCSAmJiAhX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9WYWx1ZVR5cGUxPjo6X19pc19zaWduZWQKKwkgJiYgIV9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfVmFsdWVUeXBlMj46Ol9faXNfc2lnbmVkCisJICYmIF9faXNfcG9pbnRlcjxfSUkxPjo6X192YWx1ZQorCSAmJiBfX2lzX3BvaW50ZXI8X0lJMj46Ol9fdmFsdWUpOworCisgICAgICByZXR1cm4gc3RkOjpfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlPF9fc2ltcGxlPjo6X19sYyhfX2ZpcnN0MSwgX19sYXN0MSwKKwkJCQkJCQkgICAgX19maXJzdDIsIF9fbGFzdDIpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kcyB0aGUgZmlyc3QgcG9zaXRpb24gaW4gd2hpY2ggQGEgdmFsIGNvdWxkIGJlIGluc2VydGVkCisgICAqICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JkZXJpbmcuCisgICAqICBAcGFyYW0gIF9fZmlyc3QgICBBbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgIEFub3RoZXIgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fdmFsICAgICBUaGUgc2VhcmNoIHRlcm0uCisgICAqICBAcmV0dXJuICAgICAgICAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgPGVtPm5vdCBsZXNzCisgICAqICAgICAgICAgICAgICAgICAgdGhhbjwvZW0+IEBhIHZhbCwgb3IgZW5kKCkgaWYgZXZlcnkgZWxlbWVudCBpcyBsZXNzIHRoYW4gCisgICAqICAgICAgICAgICAgICAgICAgQGEgdmFsLgorICAgKiAgQGluZ3JvdXAgYmluYXJ5X3NlYXJjaF9hbGdvcml0aG1zCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisjaWZkZWYgX0dMSUJDWFhfQ09OQ0VQVF9DSEVDS1MKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKyNlbmRpZgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuT3BDb25jZXB0PF9WYWx1ZVR5cGUsIF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CisKKyAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHdoaWxlIChfX2xlbiA+IDApCisJeworCSAgX0Rpc3RhbmNlVHlwZSBfX2hhbGYgPSBfX2xlbiA+PiAxOworCSAgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3Q7CisJICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CisJICBpZiAoKl9fbWlkZGxlIDwgX192YWwpCisJICAgIHsKKwkgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CisJICAgICAgKytfX2ZpcnN0OworCSAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOworCSAgICB9CisJICBlbHNlCisJICAgIF9fbGVuID0gX19oYWxmOworCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHNvcnQgcm91dGluZXMgYW5kIGZvciByYW5kb20udGNjLgorICAvLyAgUHJlY29uZGl0aW9uOiBfX24gPiAwLgorICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGludAorICBfX2xnKGludCBfX24pCisgIHsgcmV0dXJuIHNpemVvZihpbnQpICogX19DSEFSX0JJVF9fICAtIDEgLSBfX2J1aWx0aW5fY2x6KF9fbik7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkCisgIF9fbGcodW5zaWduZWQgX19uKQorICB7IHJldHVybiBzaXplb2YoaW50KSAqIF9fQ0hBUl9CSVRfXyAgLSAxIC0gX19idWlsdGluX2NseihfX24pOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nCisgIF9fbGcobG9uZyBfX24pCisgIHsgcmV0dXJuIHNpemVvZihsb25nKSAqIF9fQ0hBUl9CSVRfXyAtIDEgLSBfX2J1aWx0aW5fY2x6bChfX24pOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nCisgIF9fbGcodW5zaWduZWQgbG9uZyBfX24pCisgIHsgcmV0dXJuIHNpemVvZihsb25nKSAqIF9fQ0hBUl9CSVRfXyAtIDEgLSBfX2J1aWx0aW5fY2x6bChfX24pOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGxvbmcKKyAgX19sZyhsb25nIGxvbmcgX19uKQorICB7IHJldHVybiBzaXplb2YobG9uZyBsb25nKSAqIF9fQ0hBUl9CSVRfXyAtIDEgLSBfX2J1aWx0aW5fY2x6bGwoX19uKTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgbG9uZyBsb25nCisgIF9fbGcodW5zaWduZWQgbG9uZyBsb25nIF9fbikKKyAgeyByZXR1cm4gc2l6ZW9mKGxvbmcgbG9uZykgKiBfX0NIQVJfQklUX18gLSAxIC0gX19idWlsdGluX2NsemxsKF9fbik7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCisKKyAgLyoqCisgICAqICBAYnJpZWYgVGVzdHMgYSByYW5nZSBmb3IgZWxlbWVudC13aXNlIGVxdWFsaXR5LgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICBBIGJvb2xlYW4gdHJ1ZSBvciBmYWxzZS4KKyAgICoKKyAgICogIFRoaXMgY29tcGFyZXMgdGhlIGVsZW1lbnRzIG9mIHR3byByYW5nZXMgdXNpbmcgQGMgPT0gYW5kIHJldHVybnMgdHJ1ZSBvcgorICAgKiAgZmFsc2UgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYWxsIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIHRoZQorICAgKiAgcmFuZ2VzIGFyZSBlcXVhbC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJMSwgdHlwZW5hbWUgX0lJMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIGVxdWFsKF9JSTEgX19maXJzdDEsIF9JSTEgX19sYXN0MSwgX0lJMiBfX2ZpcnN0MikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSUkxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lJMj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0VxdWFsT3BDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJMT46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUkyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworCisgICAgICByZXR1cm4gc3RkOjpfX2VxdWFsX2F1eChzdGQ6Ol9fbml0ZXJfYmFzZShfX2ZpcnN0MSksCisJCQkgICAgICBzdGQ6Ol9fbml0ZXJfYmFzZShfX2xhc3QxKSwKKwkJCSAgICAgIHN0ZDo6X19uaXRlcl9iYXNlKF9fZmlyc3QyKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIFRlc3RzIGEgcmFuZ2UgZm9yIGVsZW1lbnQtd2lzZSBlcXVhbGl0eS4KKyAgICogIEBpbmdyb3VwIG5vbl9tdXRhdGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0MSAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gX19iaW5hcnlfcHJlZCBBIGJpbmFyeSBwcmVkaWNhdGUgQGxpbmsgZnVuY3RvcnMKKyAgICogICAgICAgICAgICAgICAgICBmdW5jdG9yQGVuZGxpbmsuCisgICAqICBAcmV0dXJuICAgICAgICAgQSBib29sZWFuIHRydWUgb3IgZmFsc2UuCisgICAqCisgICAqICBUaGlzIGNvbXBhcmVzIHRoZSBlbGVtZW50cyBvZiB0d28gcmFuZ2VzIHVzaW5nIHRoZSBiaW5hcnlfcHJlZAorICAgKiAgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyB0cnVlIG9yCisgICAqICBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciBhbGwgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhlCisgICAqICByYW5nZXMgYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgZXF1YWwoX0lJdGVyMSBfX2ZpcnN0MSwgX0lJdGVyMSBfX2xhc3QxLAorCSAgX0lJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JSXRlcjE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSUl0ZXIyPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQorCWlmICghYm9vbChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkpCisJICByZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgUGVyZm9ybXMgQGIgZGljdGlvbmFyeSBjb21wYXJpc29uIG9uIHJhbmdlcy4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QyICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICAgQSBib29sZWFuIHRydWUgb3IgZmFsc2UuCisgICAqCisgICAqICA8ZW0+UmV0dXJucyB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBkZWZpbmVkIGJ5IHRoZSByYW5nZQorICAgKiAgW2ZpcnN0MSxsYXN0MSkgaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIHRoZSBzZXF1ZW5jZSBvZiBlbGVtZW50cworICAgKiAgZGVmaW5lZCBieSB0aGUgcmFuZ2UgW2ZpcnN0MixsYXN0MikuICBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS48L2VtPgorICAgKiAgKFF1b3RlZCBmcm9tIFsyNS4zLjhdLzEuKSAgSWYgdGhlIGl0ZXJhdG9ycyBhcmUgYWxsIGNoYXJhY3RlciBwb2ludGVycywKKyAgICogIHRoZW4gdGhpcyBpcyBhbiBpbmxpbmUgY2FsbCB0byBAYyBtZW1jbXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSTEsIHR5cGVuYW1lIF9JSTI+CisgICAgaW5saW5lIGJvb2wKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUkxIF9fZmlyc3QxLCBfSUkxIF9fbGFzdDEsCisJCQkgICAgX0lJMiBfX2ZpcnN0MiwgX0lJMiBfX2xhc3QyKQorICAgIHsKKyNpZmRlZiBfR0xJQkNYWF9DT05DRVBUX0NIRUNLUworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJMj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CisjZW5kaWYKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lJMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JSTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbk9wQ29uY2VwdDxfVmFsdWVUeXBlMiwgX1ZhbHVlVHlwZTE+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7CisKKyAgICAgIHJldHVybiBzdGQ6Ol9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfYXV4KHN0ZDo6X19uaXRlcl9iYXNlKF9fZmlyc3QxKSwKKwkJCQkJCXN0ZDo6X19uaXRlcl9iYXNlKF9fbGFzdDEpLAorCQkJCQkJc3RkOjpfX25pdGVyX2Jhc2UoX19maXJzdDIpLAorCQkJCQkJc3RkOjpfX25pdGVyX2Jhc2UoX19sYXN0MikpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBQZXJmb3JtcyBAYiBkaWN0aW9uYXJ5IGNvbXBhcmlzb24gb24gcmFuZ2VzLgorICAgKiAgQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0MSAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDIgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19jb21wICBBIEBsaW5rIGNvbXBhcmlzb25fZnVuY3RvcnMgY29tcGFyaXNvbiBmdW5jdG9yQGVuZGxpbmsuCisgICAqICBAcmV0dXJuICAgQSBib29sZWFuIHRydWUgb3IgZmFsc2UuCisgICAqCisgICAqICBUaGUgc2FtZSBhcyB0aGUgZm91ci1wYXJhbWV0ZXIgQGMgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUsIGJ1dCB1c2VzIHRoZQorICAgKiAgY29tcCBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBAYyA8LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0eXBlbmFtZSBfSUkyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBib29sCisgICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lJMSBfX2ZpcnN0MSwgX0lJMSBfX2xhc3QxLAorCQkJICAgIF9JSTIgX19maXJzdDIsIF9JSTIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTE+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnkxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJMj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTI7CisgICAgICB0eXBlZGVmIHN0ZDo6X19sY19yYWk8X0NhdGVnb3J5MSwgX0NhdGVnb3J5Mj4gCV9fcmFpX3R5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JSTE+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSUkyPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDIsIF9fbGFzdDIpOworCisgICAgICBfX2xhc3QxID0gX19yYWlfdHlwZTo6X19uZXdsYXN0MShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOworICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19yYWlfdHlwZTo6X19jbmQyKF9fZmlyc3QyLCBfX2xhc3QyKTsKKwkgICArK19fZmlyc3QxLCArK19fZmlyc3QyKQorCXsKKwkgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQorCSAgICByZXR1cm4gdHJ1ZTsKKwkgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRmluZHMgdGhlIHBsYWNlcyBpbiByYW5nZXMgd2hpY2ggZG9uJ3QgbWF0Y2guCisgICAqICBAaW5ncm91cCBub25fbXV0YXRpbmdfYWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX2ZpcnN0MSAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEEgcGFpciBvZiBpdGVyYXRvcnMgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IG1pc21hdGNoLgorICAgKgorICAgKiAgVGhpcyBjb21wYXJlcyB0aGUgZWxlbWVudHMgb2YgdHdvIHJhbmdlcyB1c2luZyBAYyA9PSBhbmQgcmV0dXJucyBhIHBhaXIKKyAgICogIG9mIGl0ZXJhdG9ycy4gIFRoZSBmaXJzdCBpdGVyYXRvciBwb2ludHMgaW50byB0aGUgZmlyc3QgcmFuZ2UsIHRoZQorICAgKiAgc2Vjb25kIGl0ZXJhdG9yIHBvaW50cyBpbnRvIHRoZSBzZWNvbmQgcmFuZ2UsIGFuZCB0aGUgZWxlbWVudHMgcG9pbnRlZAorICAgKiAgdG8gYnkgdGhlIGl0ZXJhdG9ycyBhcmUgbm90IGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICBwYWlyPF9JbnB1dEl0ZXJhdG9yMSwgX0lucHV0SXRlcmF0b3IyPgorICAgIG1pc21hdGNoKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxPcENvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworCisgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKQorICAgICAgICB7CisJICArK19fZmlyc3QxOworCSAgKytfX2ZpcnN0MjsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcmF0b3IxLCBfSW5wdXRJdGVyYXRvcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBwbGFjZXMgaW4gcmFuZ2VzIHdoaWNoIGRvbid0IG1hdGNoLgorICAgKiAgQGluZ3JvdXAgbm9uX211dGF0aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSBfX2JpbmFyeV9wcmVkIEEgYmluYXJ5IHByZWRpY2F0ZSBAbGluayBmdW5jdG9ycworICAgKiAgICAgICAgIGZ1bmN0b3JAZW5kbGluay4KKyAgICogIEByZXR1cm4gICBBIHBhaXIgb2YgaXRlcmF0b3JzIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBtaXNtYXRjaC4KKyAgICoKKyAgICogIFRoaXMgY29tcGFyZXMgdGhlIGVsZW1lbnRzIG9mIHR3byByYW5nZXMgdXNpbmcgdGhlIGJpbmFyeV9wcmVkCisgICAqICBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgcGFpcgorICAgKiAgb2YgaXRlcmF0b3JzLiAgVGhlIGZpcnN0IGl0ZXJhdG9yIHBvaW50cyBpbnRvIHRoZSBmaXJzdCByYW5nZSwgdGhlCisgICAqICBzZWNvbmQgaXRlcmF0b3IgcG9pbnRzIGludG8gdGhlIHNlY29uZCByYW5nZSwgYW5kIHRoZSBlbGVtZW50cyBwb2ludGVkCisgICAqICB0byBieSB0aGUgaXRlcmF0b3JzIGFyZSBub3QgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgcGFpcjxfSW5wdXRJdGVyYXRvcjEsIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICBtaXNtYXRjaChfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAorCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIGJvb2woX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpKQorICAgICAgICB7CisJICArK19fZmlyc3QxOworCSAgKytfX2ZpcnN0MjsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcmF0b3IxLCBfSW5wdXRJdGVyYXRvcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisvLyBOQjogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIHdpdGhpbiBtYW55IG90aGVyIEMrKyBpbmNsdWRlcywgYXMgYSB3YXkKKy8vIG9mIGdldHRpbmcgdGhlIGJhc2UgYWxnb3JpdGhtcy4gU28sIG1ha2Ugc3VyZSB0aGF0IHBhcmFsbGVsIGJpdHMKKy8vIGNvbWUgaW4gdG9vIGlmIHJlcXVlc3RlZC4gCisjaWZkZWYgX0dMSUJDWFhfUEFSQUxMRUwKKyMgaW5jbHVkZSA8cGFyYWxsZWwvYWxnb2Jhc2UuaD4KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfYnZlY3Rvci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9idmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyYTk4YQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfYnZlY3Rvci5oCkBAIC0wLDAgKzEsMTE1NSBAQAorLy8gdmVjdG9yPGJvb2w+IHNwZWNpYWxpemF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiaXRzL3N0bF9idmVjdG9yLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt2ZWN0b3J9CisgKi8KKworI2lmbmRlZiBfU1RMX0JWRUNUT1JfSAorI2RlZmluZSBfU1RMX0JWRUNUT1JfSCAxCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9DT05UQUlORVIKKworICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0JpdF90eXBlOworICBlbnVtIHsgX1Nfd29yZF9iaXQgPSBpbnQoX19DSEFSX0JJVF9fICogc2l6ZW9mKF9CaXRfdHlwZSkpIH07CisKKyAgc3RydWN0IF9CaXRfcmVmZXJlbmNlCisgIHsKKyAgICBfQml0X3R5cGUgKiBfTV9wOworICAgIF9CaXRfdHlwZSBfTV9tYXNrOworCisgICAgX0JpdF9yZWZlcmVuY2UoX0JpdF90eXBlICogX194LCBfQml0X3R5cGUgX195KQorICAgIDogX01fcChfX3gpLCBfTV9tYXNrKF9feSkgeyB9CisKKyAgICBfQml0X3JlZmVyZW5jZSgpIF9HTElCQ1hYX05PRVhDRVBUIDogX01fcCgwKSwgX01fbWFzaygwKSB7IH0KKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuICEhKCpfTV9wICYgX01fbWFzayk7IH0KKworICAgIF9CaXRfcmVmZXJlbmNlJgorICAgIG9wZXJhdG9yPShib29sIF9feCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICBpZiAoX194KQorCSpfTV9wIHw9IF9NX21hc2s7CisgICAgICBlbHNlCisJKl9NX3AgJj0gfl9NX21hc2s7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgX0JpdF9yZWZlcmVuY2UmCisgICAgb3BlcmF0b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CisgICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CisgICAgeyByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsgfQorCisgICAgdm9pZAorICAgIGZsaXAoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgKl9NX3AgXj0gX01fbWFzazsgfQorICB9OworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICBpbmxpbmUgdm9pZAorICBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KSBub2V4Y2VwdAorICB7CisgICAgYm9vbCBfX3RtcCA9IF9feDsKKyAgICBfX3ggPSBfX3k7CisgICAgX195ID0gX190bXA7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgYm9vbCYgX195KSBub2V4Y2VwdAorICB7CisgICAgYm9vbCBfX3RtcCA9IF9feDsKKyAgICBfX3ggPSBfX3k7CisgICAgX195ID0gX190bXA7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBzd2FwKGJvb2wmIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KSBub2V4Y2VwdAorICB7CisgICAgYm9vbCBfX3RtcCA9IF9feDsKKyAgICBfX3ggPSBfX3k7CisgICAgX195ID0gX190bXA7CisgIH0KKyNlbmRpZgorCisgIHN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UKKyAgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBib29sPgorICB7CisgICAgX0JpdF90eXBlICogX01fcDsKKyAgICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OworCisgICAgX0JpdF9pdGVyYXRvcl9iYXNlKF9CaXRfdHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKKyAgICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkgeyB9CisKKyAgICB2b2lkCisgICAgX01fYnVtcF91cCgpCisgICAgeworICAgICAgaWYgKF9NX29mZnNldCsrID09IGludChfU193b3JkX2JpdCkgLSAxKQorCXsKKwkgIF9NX29mZnNldCA9IDA7CisJICArK19NX3A7CisJfQorICAgIH0KKworICAgIHZvaWQKKyAgICBfTV9idW1wX2Rvd24oKQorICAgIHsKKyAgICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKQorCXsKKwkgIF9NX29mZnNldCA9IGludChfU193b3JkX2JpdCkgLSAxOworCSAgLS1fTV9wOworCX0KKyAgICB9CisKKyAgICB2b2lkCisgICAgX01faW5jcihwdHJkaWZmX3QgX19pKQorICAgIHsKKyAgICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CisgICAgICBfTV9wICs9IF9fbiAvIGludChfU193b3JkX2JpdCk7CisgICAgICBfX24gPSBfX24gJSBpbnQoX1Nfd29yZF9iaXQpOworICAgICAgaWYgKF9fbiA8IDApCisJeworCSAgX19uICs9IGludChfU193b3JkX2JpdCk7CisJICAtLV9NX3A7CisJfQorICAgICAgX01fb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pOworICAgIH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcAorCSAgICAgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNldCk7CisgICAgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0CisgICAgeyByZXR1cm4gISgqdGhpcyA9PSBfX2kpOyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdAorICAgIHsgcmV0dXJuIF9faSA8ICp0aGlzOyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QKKyAgICB7IHJldHVybiAhKF9faSA8ICp0aGlzKTsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0CisgICAgeyByZXR1cm4gISgqdGhpcyA8IF9faSk7IH0KKyAgfTsKKworICBpbmxpbmUgcHRyZGlmZl90CisgIG9wZXJhdG9yLShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpCisgIHsKKyAgICByZXR1cm4gKGludChfU193b3JkX2JpdCkgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkKKwkgICAgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29mZnNldCk7CisgIH0KKworICBzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UKKyAgeworICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgIHJlZmVyZW5jZTsKKyAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOworICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciAgIGl0ZXJhdG9yOworCisgICAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHsgfQorCisgICAgX0JpdF9pdGVyYXRvcihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCisgICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHsgfQorCisgICAgcmVmZXJlbmNlCisgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICB7IHJldHVybiByZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7IH0KKworICAgIGl0ZXJhdG9yJgorICAgIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgIF9NX2J1bXBfdXAoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBpdGVyYXRvcgorICAgIG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisgICAgICBfTV9idW1wX3VwKCk7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgICAgaXRlcmF0b3ImCisgICAgb3BlcmF0b3ItLSgpCisgICAgeworICAgICAgX01fYnVtcF9kb3duKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgaXRlcmF0b3IKKyAgICBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOworICAgICAgX01fYnVtcF9kb3duKCk7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgICAgaXRlcmF0b3ImCisgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKQorICAgIHsKKyAgICAgIF9NX2luY3IoX19pKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBpdGVyYXRvciYKKyAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpCisgICAgeworICAgICAgKnRoaXMgKz0gLV9faTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBpdGVyYXRvcgorICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdAorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisgICAgICByZXR1cm4gX190bXAgKz0gX19pOworICAgIH0KKworICAgIGl0ZXJhdG9yCisgICAgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0CisgICAgeworICAgICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKKyAgICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CisgICAgfQorCisgICAgcmVmZXJlbmNlCisgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdAorICAgIHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9CisgIH07CisKKyAgaW5saW5lIF9CaXRfaXRlcmF0b3IKKyAgb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKKyAgeyByZXR1cm4gX194ICsgX19uOyB9CisKKyAgc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCisgIHsKKyAgICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICB0eXBlZGVmIGNvbnN0IGJvb2wqICAgICAgICAgIHBvaW50ZXI7CisgICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yICBjb25zdF9pdGVyYXRvcjsKKworICAgIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7IH0KKworICAgIF9CaXRfY29uc3RfaXRlcmF0b3IoX0JpdF90eXBlICogX194LCB1bnNpZ25lZCBpbnQgX195KQorICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7IH0KKworICAgIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQorICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7IH0KKworICAgIGNvbnN0X3JlZmVyZW5jZQorICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgeyByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yJgorICAgIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgIF9NX2J1bXBfdXAoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvcgorICAgIG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisgICAgICBfTV9idW1wX3VwKCk7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3ImCisgICAgb3BlcmF0b3ItLSgpCisgICAgeworICAgICAgX01fYnVtcF9kb3duKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IKKyAgICBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworICAgICAgX01fYnVtcF9kb3duKCk7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3ImCisgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKQorICAgIHsKKyAgICAgIF9NX2luY3IoX19pKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciYKKyAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpCisgICAgeworICAgICAgKnRoaXMgKz0gLV9faTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciAKKyAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworICAgICAgcmV0dXJuIF9fdG1wICs9IF9faTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvcgorICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisgICAgICByZXR1cm4gX190bXAgLT0gX19pOworICAgIH0KKworICAgIGNvbnN0X3JlZmVyZW5jZQorICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QKKyAgICB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQorICB9OworCisgIGlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCisgIG9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpCisgIHsgcmV0dXJuIF9feCArIF9fbjsgfQorCisgIGlubGluZSB2b2lkCisgIF9fZmlsbF9idmVjdG9yKF9CaXRfaXRlcmF0b3IgX19maXJzdCwgX0JpdF9pdGVyYXRvciBfX2xhc3QsIGJvb2wgX194KQorICB7CisgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisgICAgICAqX19maXJzdCA9IF9feDsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIGZpbGwoX0JpdF9pdGVyYXRvciBfX2ZpcnN0LCBfQml0X2l0ZXJhdG9yIF9fbGFzdCwgY29uc3QgYm9vbCYgX194KQorICB7CisgICAgaWYgKF9fZmlyc3QuX01fcCAhPSBfX2xhc3QuX01fcCkKKyAgICAgIHsKKwlzdGQ6OmZpbGwoX19maXJzdC5fTV9wICsgMSwgX19sYXN0Ll9NX3AsIF9feCA/IH4wIDogMCk7CisJX19maWxsX2J2ZWN0b3IoX19maXJzdCwgX0JpdF9pdGVyYXRvcihfX2ZpcnN0Ll9NX3AgKyAxLCAwKSwgX194KTsKKwlfX2ZpbGxfYnZlY3RvcihfQml0X2l0ZXJhdG9yKF9fbGFzdC5fTV9wLCAwKSwgX19sYXN0LCBfX3gpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIF9fZmlsbF9idmVjdG9yKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKKyAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX0J2ZWN0b3JfYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X0JpdF90eXBlPjo6b3RoZXIKKyAgICAgICAgX0JpdF9hbGxvY190eXBlOworICAgICAgCisgICAgICBzdHJ1Y3QgX0J2ZWN0b3JfaW1wbAorICAgICAgOiBwdWJsaWMgX0JpdF9hbGxvY190eXBlCisgICAgICB7CisJX0JpdF9pdGVyYXRvciAJX01fc3RhcnQ7CisJX0JpdF9pdGVyYXRvciAJX01fZmluaXNoOworCV9CaXRfdHlwZSogCV9NX2VuZF9vZl9zdG9yYWdlOworCisJX0J2ZWN0b3JfaW1wbCgpCisJOiBfQml0X2FsbG9jX3R5cGUoKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCisJeyB9CisgCisJX0J2ZWN0b3JfaW1wbChjb25zdCBfQml0X2FsbG9jX3R5cGUmIF9fYSkKKwk6IF9CaXRfYWxsb2NfdHlwZShfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKKwl7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKwlfQnZlY3Rvcl9pbXBsKF9CaXRfYWxsb2NfdHlwZSYmIF9fYSkKKwk6IF9CaXRfYWxsb2NfdHlwZShzdGQ6Om1vdmUoX19hKSksIF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLAorCSAgX01fZW5kX29mX3N0b3JhZ2UoMCkKKwl7IH0KKyNlbmRpZgorICAgICAgfTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOworCisgICAgICBfQml0X2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfQml0X2FsbG9jYXRvcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X0JpdF9hbGxvY190eXBlKj4oJnRoaXMtPl9NX2ltcGwpOyB9CisKKyAgICAgIGNvbnN0IF9CaXRfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9CaXRfYWxsb2NhdG9yKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfQml0X2FsbG9jX3R5cGUqPigmdGhpcy0+X01faW1wbCk7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoX01fZ2V0X0JpdF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgX0J2ZWN0b3JfYmFzZSgpCisgICAgICA6IF9NX2ltcGwoKSB7IH0KKyAgICAgIAorICAgICAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfTV9pbXBsKF9fYSkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBfQnZlY3Rvcl9iYXNlKF9CdmVjdG9yX2Jhc2UmJiBfX3gpIG5vZXhjZXB0CisgICAgICA6IF9NX2ltcGwoc3RkOjptb3ZlKF9feC5fTV9nZXRfQml0X2FsbG9jYXRvcigpKSkKKyAgICAgIHsKKwl0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX194Ll9NX2ltcGwuX01fc3RhcnQ7CisJdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX3guX01faW1wbC5fTV9maW5pc2g7CisJdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9feC5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlOworCV9feC5fTV9pbXBsLl9NX3N0YXJ0ID0gX0JpdF9pdGVyYXRvcigpOworCV9feC5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9CaXRfaXRlcmF0b3IoKTsKKwlfX3guX01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IDA7CisgICAgICB9CisjZW5kaWYKKworICAgICAgfl9CdmVjdG9yX2Jhc2UoKQorICAgICAgeyB0aGlzLT5fTV9kZWFsbG9jYXRlKCk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9CdmVjdG9yX2ltcGwgX01faW1wbDsKKworICAgICAgX0JpdF90eXBlKgorICAgICAgX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2ltcGwuYWxsb2NhdGUoX1NfbndvcmQoX19uKSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZGVhbGxvY2F0ZSgpCisgICAgICB7CisJaWYgKF9NX2ltcGwuX01fc3RhcnQuX01fcCkKKwkgIF9NX2ltcGwuZGVhbGxvY2F0ZShfTV9pbXBsLl9NX3N0YXJ0Ll9NX3AsCisJCQkgICAgIF9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9pbXBsLl9NX3N0YXJ0Ll9NX3ApOworICAgICAgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBfU19ud29yZChzaXplX3QgX19uKQorICAgICAgeyByZXR1cm4gKF9fbiArIGludChfU193b3JkX2JpdCkgLSAxKSAvIGludChfU193b3JkX2JpdCk7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKy8vIERlY2xhcmUgYSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIHZlY3RvcjxULCBBbGxvYz4uCisjaW5jbHVkZSA8Yml0cy9zdGxfdmVjdG9yLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIC8qKgorICAgKiAgQGJyaWVmICBBIHNwZWNpYWxpemF0aW9uIG9mIHZlY3RvciBmb3IgYm9vbGVhbnMgd2hpY2ggb2ZmZXJzIGZpeGVkIHRpbWUKKyAgICogIGFjY2VzcyB0byBpbmRpdmlkdWFsIGVsZW1lbnRzIGluIGFueSBvcmRlci4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgQHRwYXJhbSBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLgorICAgKgorICAgKiAgTm90ZSB0aGF0IHZlY3Rvcjxib29sPiBkb2VzIG5vdCBhY3R1YWxseSBtZWV0IHRoZSByZXF1aXJlbWVudHMgZm9yIGJlaW5nCisgICAqICBhIGNvbnRhaW5lci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIGFuZCBwb2ludGVyIHR5cGVzIGFyZSBub3QKKyAgICogIHJlYWxseSByZWZlcmVuY2VzIGFuZCBwb2ludGVycyB0byBib29sLiAgU2VlIERSOTYgZm9yIGRldGFpbHMuICBAc2VlCisgICAqICB2ZWN0b3IgZm9yIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uCisgICAqCisgICAqICBJbiBzb21lIHRlcm1pbm9sb2d5IGEgJXZlY3RvciBjYW4gYmUgZGVzY3JpYmVkIGFzIGEgZHluYW1pYworICAgKiAgQy1zdHlsZSBhcnJheSwgaXQgb2ZmZXJzIGZhc3QgYW5kIGVmZmljaWVudCBhY2Nlc3MgdG8gaW5kaXZpZHVhbAorICAgKiAgZWxlbWVudHMgaW4gYW55IG9yZGVyIGFuZCBzYXZlcyB0aGUgdXNlciBmcm9tIHdvcnJ5aW5nIGFib3V0CisgICAqICBtZW1vcnkgYW5kIHNpemUgYWxsb2NhdGlvbi4gIFN1YnNjcmlwdGluZyAoIEBjIFtdICkgYWNjZXNzIGlzCisgICAqICBhbHNvIHByb3ZpZGVkIGFzIHdpdGggQy1zdHlsZSBhcnJheXMuCisgICovCit0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHJvdGVjdGVkIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgorICB7CisgICAgdHlwZWRlZiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4JCQkgX0Jhc2U7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGZyaWVuZCBzdHJ1Y3QgaGFzaDsKKyNlbmRpZgorCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgIHR5cGVkZWYgY29uc3QgYm9vbCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+ICAgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIF9BbGxvYyAgICAgICAgICAgICAgICAgICAgICAgIAkJIGFsbG9jYXRvcl90eXBlOworCisgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQorCisgIHByb3RlY3RlZDoKKyAgICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CisgICAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CisgICAgdXNpbmcgX0Jhc2U6Ol9TX253b3JkOworICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfQml0X2FsbG9jYXRvcjsKKworICBwdWJsaWM6CisgICAgdmVjdG9yKCkKKyAgICA6IF9CYXNlKCkgeyB9CisKKyAgICBleHBsaWNpdAorICAgIHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgIDogX0Jhc2UoX19hKSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBleHBsaWNpdAorICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICA6IHZlY3RvcihfX24sIGZhbHNlLCBfX2EpCisgICAgeyB9CisKKyAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgYm9vbCYgX192YWx1ZSwgCisJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgOiBfQmFzZShfX2EpCisgICAgeworICAgICAgX01faW5pdGlhbGl6ZShfX24pOworICAgICAgc3RkOjpmaWxsKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fcCwgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSwgCisJCV9fdmFsdWUgPyB+MCA6IDApOworICAgIH0KKyNlbHNlCisgICAgZXhwbGljaXQKKyAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgYm9vbCYgX192YWx1ZSA9IGJvb2woKSwgCisJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgOiBfQmFzZShfX2EpCisgICAgeworICAgICAgX01faW5pdGlhbGl6ZShfX24pOworICAgICAgc3RkOjpmaWxsKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fcCwgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSwgCisJCV9fdmFsdWUgPyB+MCA6IDApOworICAgIH0KKyNlbmRpZgorCisgICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KQorICAgIDogX0Jhc2UoX194Ll9NX2dldF9CaXRfYWxsb2NhdG9yKCkpCisgICAgeworICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKKyAgICAgIF9NX2NvcHlfYWxpZ25lZChfX3guYmVnaW4oKSwgX194LmVuZCgpLCB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdmVjdG9yKHZlY3RvciYmIF9feCkgbm9leGNlcHQKKyAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKSB7IH0KKworICAgIHZlY3Rvcihpbml0aWFsaXplcl9saXN0PGJvb2w+IF9fbCwKKwkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICA6IF9CYXNlKF9fYSkKKyAgICB7CisgICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCisJCQkgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKCkpOworICAgIH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyAgICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hKQorICAgICAgeyBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX19mYWxzZV90eXBlKCkpOyB9CisjZWxzZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgfnZlY3RvcigpIF9HTElCQ1hYX05PRVhDRVBUIHsgfQorCisgICAgdmVjdG9yJgorICAgIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCkKKyAgICB7CisgICAgICBpZiAoJl9feCA9PSB0aGlzKQorCXJldHVybiAqdGhpczsKKyAgICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkKKwl7CisJICB0aGlzLT5fTV9kZWFsbG9jYXRlKCk7CisJICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOworCX0KKyAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX01fY29weV9hbGlnbmVkKF9feC5iZWdpbigpLCBfX3guZW5kKCksCisJCQkJCQliZWdpbigpKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdmVjdG9yJgorICAgIG9wZXJhdG9yPSh2ZWN0b3ImJiBfX3gpCisgICAgeworICAgICAgLy8gTkI6IERSIDEyMDQuCisgICAgICAvLyBOQjogRFIgNjc1LgorICAgICAgdGhpcy0+Y2xlYXIoKTsKKyAgICAgIHRoaXMtPnN3YXAoX194KTsgCisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdmVjdG9yJgorICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PGJvb2w+IF9fbCkKKyAgICB7CisgICAgICB0aGlzLT5hc3NpZ24gKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gYXNzaWduKCksIGEgZ2VuZXJhbGl6ZWQgYXNzaWdubWVudCBtZW1iZXIgZnVuY3Rpb24uICBUd28KKyAgICAvLyB2ZXJzaW9uczogb25lIHRoYXQgdGFrZXMgYSBjb3VudCwgYW5kIG9uZSB0aGF0IHRha2VzIGEgcmFuZ2UuCisgICAgLy8gVGhlIHJhbmdlIHZlcnNpb24gaXMgYSBtZW1iZXIgdGVtcGxhdGUsIHNvIHdlIGRpc3BhdGNoIG9uIHdoZXRoZXIKKyAgICAvLyBvciBub3QgdGhlIHR5cGUgaXMgYW4gaW50ZWdlci4KKyAgICB2b2lkCisgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IGJvb2wmIF9feCkKKyAgICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX194KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9fZmFsc2VfdHlwZSgpKTsgfQorI2Vsc2UKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworICAgICAgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdm9pZAorICAgIGFzc2lnbihpbml0aWFsaXplcl9saXN0PGJvb2w+IF9fbCkKKyAgICB7IHRoaXMtPmFzc2lnbihfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyAgICBpdGVyYXRvcgorICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OyB9CisKKyAgICBjb25zdF9pdGVyYXRvcgorICAgIGJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OyB9CisKKyAgICBpdGVyYXRvcgorICAgIGVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsgfQorCisgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgIHJiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICByYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgcmVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgIHJlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBjb25zdF9pdGVyYXRvcgorICAgIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9zdGFydDsgfQorCisgICAgY29uc3RfaXRlcmF0b3IKKyAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsgfQorCisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgc2l6ZV90eXBlCisgICAgc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KKworICAgIHNpemVfdHlwZQorICAgIG1heF9zaXplKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19pc2l6ZSA9CisJX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGRpZmZlcmVuY2VfdHlwZT46Ol9fbWF4CisJLSBpbnQoX1Nfd29yZF9iaXQpICsgMTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2FzaXplID0gX01fZ2V0X0JpdF9hbGxvY2F0b3IoKS5tYXhfc2l6ZSgpOworICAgICAgcmV0dXJuIChfX2FzaXplIDw9IF9faXNpemUgLyBpbnQoX1Nfd29yZF9iaXQpCisJICAgICAgPyBfX2FzaXplICogaW50KF9TX3dvcmRfYml0KSA6IF9faXNpemUpOworICAgIH0KKworICAgIHNpemVfdHlwZQorICAgIGNhcGFjaXR5KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSwgMCkKKwkJICAgICAgIC0gYmVnaW4oKSk7IH0KKworICAgIGJvb2wKKyAgICBlbXB0eSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQorCisgICAgcmVmZXJlbmNlCisgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIHJldHVybiAqaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9wCisJCSAgICAgICArIF9fbiAvIGludChfU193b3JkX2JpdCksIF9fbiAlIGludChfU193b3JkX2JpdCkpOworICAgIH0KKworICAgIGNvbnN0X3JlZmVyZW5jZQorICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICByZXR1cm4gKmNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fcAorCQkJICAgICArIF9fbiAvIGludChfU193b3JkX2JpdCksIF9fbiAlIGludChfU193b3JkX2JpdCkpOworICAgIH0KKworICBwcm90ZWN0ZWQ6CisgICAgdm9pZAorICAgIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgeworICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCisgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigidmVjdG9yPGJvb2w+OjpfTV9yYW5nZV9jaGVjayIpKTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIHJlZmVyZW5jZQorICAgIGF0KHNpemVfdHlwZSBfX24pCisgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CisKKyAgICBjb25zdF9yZWZlcmVuY2UKKyAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQorCisgICAgdm9pZAorICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKKwlfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oInZlY3Rvcjo6cmVzZXJ2ZSIpKTsKKyAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKQorCV9NX3JlYWxsb2NhdGUoX19uKTsKKyAgICB9CisKKyAgICByZWZlcmVuY2UKKyAgICBmcm9udCgpCisgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KKworICAgIGNvbnN0X3JlZmVyZW5jZQorICAgIGZyb250KCkgY29uc3QKKyAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgcmVmZXJlbmNlCisgICAgYmFjaygpCisgICAgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CisKKyAgICBjb25zdF9yZWZlcmVuY2UKKyAgICBiYWNrKCkgY29uc3QKKyAgICB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KKworICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAvLyBEUiA0NjQuIFN1Z2dlc3Rpb24gZm9yIG5ldyBtZW1iZXIgZnVuY3Rpb25zIGluIHN0YW5kYXJkIGNvbnRhaW5lcnMuCisgICAgLy8gTi5CLiBEUiA0NjQgc2F5cyBub3RoaW5nIGFib3V0IHZlY3Rvcjxib29sPiBidXQgd2UgbmVlZCBzb21ldGhpbmcKKyAgICAvLyBoZXJlIGR1ZSB0byB0aGUgd2F5IHdlIGFyZSBpbXBsZW1lbnRpbmcgRFIgNDY0IGluIHRoZSBkZWJ1Zy1tb2RlCisgICAgLy8gdmVjdG9yIGNsYXNzLgorICAgIHZvaWQKKyAgICBkYXRhKCkgX0dMSUJDWFhfTk9FWENFUFQgeyB9CisKKyAgICB2b2lkCisgICAgcHVzaF9iYWNrKGJvb2wgX194KQorICAgIHsKKyAgICAgIGlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9wICE9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UpCisgICAgICAgICp0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCsrID0gX194OworICAgICAgZWxzZQorICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOworICAgIH0KKworICAgIHZvaWQKKyAgICBzd2FwKHZlY3RvciYgX194KQorICAgIHsKKyAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX3guX01faW1wbC5fTV9zdGFydCk7CisgICAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9maW5pc2gsIF9feC5fTV9pbXBsLl9NX2ZpbmlzaCk7CisgICAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSwgCisJCV9feC5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlKTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDMxLiBTd2FwcGluZyBjb250YWluZXJzIHdpdGggdW5lcXVhbCBhbGxvY2F0b3JzLgorICAgICAgc3RkOjpfX2FsbG9jX3N3YXA8dHlwZW5hbWUgX0Jhc2U6Ol9CaXRfYWxsb2NfdHlwZT46OgorCV9TX2RvX2l0KF9NX2dldF9CaXRfYWxsb2NhdG9yKCksIF9feC5fTV9nZXRfQml0X2FsbG9jYXRvcigpKTsKKyAgICB9CisKKyAgICAvLyBbMjMuMi41XS8xLCB0aGlyZC10by1sYXN0IGVudHJ5IGluIHN5bm9wc2lzIGxpc3RpbmcKKyAgICBzdGF0aWMgdm9pZAorICAgIHN3YXAocmVmZXJlbmNlIF9feCwgcmVmZXJlbmNlIF9feSkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICBib29sIF9fdG1wID0gX194OworICAgICAgX194ID0gX195OworICAgICAgX195ID0gX190bXA7CisgICAgfQorCisgICAgaXRlcmF0b3IKKyAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgYm9vbCYgX194ID0gYm9vbCgpKQorICAgIHsKKyAgICAgIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKKyAgICAgIGlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9wICE9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UKKwkgICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCisgICAgICAgICp0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCsrID0gX194OworICAgICAgZWxzZQorICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CisgICAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCisJICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9fZmFsc2VfdHlwZSgpKTsgfQorI2Vsc2UKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAorCSAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCV9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgdm9pZAorICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBib29sJiBfX3gpCisgICAgeyBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24sIF9feCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8Ym9vbD4gX19sKQorICAgIHsgdGhpcy0+aW5zZXJ0KF9fcCwgX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgdm9pZAorICAgIHBvcF9iYWNrKCkKKyAgICB7IC0tdGhpcy0+X01faW1wbC5fTV9maW5pc2g7IH0KKworICAgIGl0ZXJhdG9yCisgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICB7CisgICAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCisgICAgICAgIHN0ZDo6Y29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOworICAgICAgLS10aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKyAgICAgIHJldHVybiBfX3Bvc2l0aW9uOworICAgIH0KKworICAgIGl0ZXJhdG9yCisgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwlfTV9lcmFzZV9hdF9lbmQoc3RkOjpjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKKyAgICAgIHJldHVybiBfX2ZpcnN0OworICAgIH0KKworICAgIHZvaWQKKyAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKQorICAgIHsKKyAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQorICAgICAgICBfTV9lcmFzZV9hdF9lbmQoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSk7CisgICAgICBlbHNlCisgICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdm9pZAorICAgIHNocmlua190b19maXQoKQorICAgIHsgX01fc2hyaW5rX3RvX2ZpdCgpOyB9CisjZW5kaWYKKworICAgIHZvaWQKKyAgICBmbGlwKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICBmb3IgKF9CaXRfdHlwZSAqIF9fcCA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fcDsKKwkgICBfX3AgIT0gdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApCisgICAgICAgICpfX3AgPSB+Kl9fcDsKKyAgICB9CisKKyAgICB2b2lkCisgICAgY2xlYXIoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgX01fZXJhc2VfYXRfZW5kKGJlZ2luKCkpOyB9CisKKyAgIAorICBwcm90ZWN0ZWQ6CisgICAgLy8gUHJlY29uZGl0aW9uOiBfX2ZpcnN0Ll9NX29mZnNldCA9PSAwICYmIF9fcmVzdWx0Ll9NX29mZnNldCA9PSAwLgorICAgIGl0ZXJhdG9yCisgICAgX01fY29weV9hbGlnbmVkKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCwKKwkJICAgIGl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIF9CaXRfdHlwZSogX19xID0gc3RkOjpjb3B5KF9fZmlyc3QuX01fcCwgX19sYXN0Ll9NX3AsIF9fcmVzdWx0Ll9NX3ApOworICAgICAgcmV0dXJuIHN0ZDo6Y29weShjb25zdF9pdGVyYXRvcihfX2xhc3QuX01fcCwgMCksIF9fbGFzdCwKKwkJICAgICAgIGl0ZXJhdG9yKF9fcSwgMCkpOworICAgIH0KKworICAgIHZvaWQKKyAgICBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0JpdF90eXBlKiBfX3EgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX24pOworICAgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIF9TX253b3JkKF9fbik7CisgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKKyAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gdGhpcy0+X01faW1wbC5fTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOworICAgIH0KKworICAgIHZvaWQKKyAgICBfTV9yZWFsbG9jYXRlKHNpemVfdHlwZSBfX24pOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIGJvb2wKKyAgICBfTV9zaHJpbmtfdG9fZml0KCk7CisjZW5kaWYKKworICAgIC8vIENoZWNrIHdoZXRoZXIgaXQncyBhbiBpbnRlZ3JhbCB0eXBlLiAgSWYgc28sIGl0J3Mgbm90IGFuIGl0ZXJhdG9yLgorCisgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKQorICAgICAgeworCV9NX2luaXRpYWxpemUoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pKTsKKwlzdGQ6OmZpbGwodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9wLCAKKwkJICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkIAorICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICAgIF9fZmFsc2VfdHlwZSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIAorCQkJICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgICAgeworCWZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCSAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCQkgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKwlfTV9pbml0aWFsaXplKF9fbik7CisJc3RkOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgdGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisgICAgICB9CisKKyAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgdm9pZAorICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQorICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJIF9fZmFsc2VfdHlwZSkKKyAgICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KKworICAgIHZvaWQKKyAgICBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkKKyAgICB7CisgICAgICBpZiAoX19uID4gc2l6ZSgpKQorCXsKKwkgIHN0ZDo6ZmlsbCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX3AsIAorCQkgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKKwkgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfTV9lcmFzZV9hdF9lbmQoYmVnaW4oKSArIF9fbik7CisJICBzdGQ6OmZpbGwodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9wLCAKKwkJICAgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CisJfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CisJZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCisJICAqX19jdXIgPSAqX19maXJzdDsKKwlpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJICBfTV9lcmFzZV9hdF9lbmQoX19jdXIpOworCWVsc2UKKwkgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKKyAgICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwljb25zdCBzaXplX3R5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisJaWYgKF9fbGVuIDwgc2l6ZSgpKQorCSAgX01fZXJhc2VfYXRfZW5kKHN0ZDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpKTsKKwllbHNlCisJICB7CisJICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OworCSAgICBzdGQ6OmFkdmFuY2UoX19taWQsIHNpemUoKSk7CisJICAgIHN0ZDo6Y29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CisJICAgIGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7CisJICB9CisgICAgICB9CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKworICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisgICAgICB2b2lkCisgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAorCQkJIF9fdHJ1ZV90eXBlKQorICAgICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKKwkJCSBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgX19mYWxzZV90eXBlKQorICAgICAgeyBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwKKwkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KKworICAgIHZvaWQKKyAgICBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgCisJCSAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJICB7CisJICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CisJICAgICsrX19wb3M7CisJICB9CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgCisJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKTsKKworICAgIHZvaWQKKyAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KTsKKworICAgIHNpemVfdHlwZQorICAgIF9NX2NoZWNrX2xlbihzaXplX3R5cGUgX19uLCBjb25zdCBjaGFyKiBfX3MpIGNvbnN0CisgICAgeworICAgICAgaWYgKG1heF9zaXplKCkgLSBzaXplKCkgPCBfX24pCisJX190aHJvd19sZW5ndGhfZXJyb3IoX19OKF9fcykpOworCisgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBzdGQ6Om1heChzaXplKCksIF9fbik7CisgICAgICByZXR1cm4gKF9fbGVuIDwgc2l6ZSgpIHx8IF9fbGVuID4gbWF4X3NpemUoKSkgPyBtYXhfc2l6ZSgpIDogX19sZW47CisgICAgfQorCisgICAgdm9pZAorICAgIF9NX2VyYXNlX2F0X2VuZChpdGVyYXRvciBfX3BvcykKKyAgICB7IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19wb3M7IH0KKyAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCisjaW5jbHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2guaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIERSIDExODIuCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIHZlY3Rvcjxib29sPi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBoYXNoPF9HTElCQ1hYX1NURF9DOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPj4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIF9HTElCQ1hYX1NURF9DOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPj4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0dMSUJDWFhfU1REX0M6OnZlY3Rvcjxib29sLCBfQWxsb2M+JikgY29uc3Qgbm9leGNlcHQ7CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9Ly8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX2NvbnN0cnVjdC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg2M2U2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaApAQCAtMCwwICsxLDE1OCBAQAorLy8gbm9uc3RhbmRhcmQgY29uc3RydWN0IGFuZCBkZXN0cm95IGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgYml0cy9zdGxfY29uc3RydWN0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttZW1vcnl9CisgKi8KKworI2lmbmRlZiBfU1RMX0NPTlNUUlVDVF9ICisjZGVmaW5lIF9TVExfQ09OU1RSVUNUX0ggMQorCisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorI2luY2x1ZGUgPGV4dC9hbGxvY190cmFpdHMuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBpbiBleGlzdGluZyBtZW1vcnkgYnkgaW52b2tpbmcgYW4gYWxsb2NhdGVkCisgICAqIG9iamVjdCdzIGNvbnN0cnVjdG9yIHdpdGggYW4gaW5pdGlhbGl6ZXIuCisgICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsgOjpuZXcoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MDIuIHdyb25nIG5ldyBleHByZXNzaW9uIGluIFtzb21lX11hbGxvY2F0b3I6OmNvbnN0cnVjdAorICAgICAgOjpuZXcoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsKKyAgICB9CisjZW5kaWYKKworICAvKioKKyAgICogRGVzdHJveSB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgYSBwb2ludGVyIHR5cGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikKKyAgICB7IF9fcG9pbnRlci0+fl9UcCgpOyB9CisKKyAgdGVtcGxhdGU8Ym9vbD4KKyAgICBzdHJ1Y3QgX0Rlc3Ryb3lfYXV4CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisJeworCSAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJICAgIHN0ZDo6X0Rlc3Ryb3koc3RkOjpfX2FkZHJlc3NvZigqX19maXJzdCkpOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX0Rlc3Ryb3lfYXV4PHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IpIHsgfQorICAgIH07CisKKyAgLyoqCisgICAqIERlc3Ryb3kgYSByYW5nZSBvZiBvYmplY3RzLiAgSWYgdGhlIHZhbHVlX3R5cGUgb2YgdGhlIG9iamVjdCBoYXMKKyAgICogYSB0cml2aWFsIGRlc3RydWN0b3IsIHRoZSBjb21waWxlciBzaG91bGQgb3B0aW1pemUgYWxsIG9mIHRoaXMKKyAgICogYXdheSwgb3RoZXJ3aXNlIHRoZSBvYmplY3RzJyBkZXN0cnVjdG9ycyBtdXN0IGJlIGludm9rZWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfdHlwZTsKKyAgICAgIHN0ZDo6X0Rlc3Ryb3lfYXV4PF9faGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcihfVmFsdWVfdHlwZSk+OjoKKwlfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKKyAgICB9CisKKyAgLyoqCisgICAqIERlc3Ryb3kgYSByYW5nZSBvZiBvYmplY3RzIHVzaW5nIHRoZSBzdXBwbGllZCBhbGxvY2F0b3IuICBGb3IKKyAgICogbm9uZGVmYXVsdCBhbGxvY2F0b3JzIHdlIGRvIG5vdCBvcHRpbWl6ZSBhd2F5IGludm9jYXRpb24gb2YgCisgICAqIGRlc3Ryb3koKSBldmVuIGlmIF9UcCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAqLworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgdm9pZAorICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICBfQWxsb2NhdG9yJiBfX2FsbG9jKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfQWxsb2NhdG9yPiBfX3RyYWl0czsKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCV9fdHJhaXRzOjpkZXN0cm95KF9fYWxsb2MsIHN0ZDo6X19hZGRyZXNzb2YoKl9fZmlyc3QpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIGFsbG9jYXRvcjxfVHA+JikKKyAgICB7CisgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2xhc3QpOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8qIF9TVExfQ09OU1RSVUNUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9kZXF1ZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9kZXF1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwN2JjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX2RlcXVlLmgKQEAgLTAsMCArMSwyMDE5IEBACisvLyBEZXF1ZSBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX2RlcXVlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtkZXF1ZX0KKyAqLworCisjaWZuZGVmIF9TVExfREVRVUVfSAorI2RlZmluZSBfU1RMX0RFUVVFX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaD4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9DT05UQUlORVIKKworICAvKioKKyAgICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNvbnRyb2xzIHRoZSBzaXplIG9mIG1lbW9yeSBub2Rlcy4KKyAgICogIEBwYXJhbSAgX19zaXplICBUaGUgc2l6ZSBvZiBhbiBlbGVtZW50LgorICAgKiAgQHJldHVybiAgIFRoZSBudW1iZXIgKG5vdCBieXRlIHNpemUpIG9mIGVsZW1lbnRzIHBlciBub2RlLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiBzdGFydGVkIG9mZiBhcyBhIGNvbXBpbGVyIGtsdWRnZSBmcm9tIFNHSSwgYnV0CisgICAqICBzZWVtcyB0byBiZSBhIHVzZWZ1bCB3cmFwcGVyIGFyb3VuZCBhIHJlcGVhdGVkIGNvbnN0YW50CisgICAqICBleHByZXNzaW9uLiAgVGhlIEBiIDUxMiBpcyB0dW5hYmxlIChhbmQgbm8gb3RoZXIgY29kZSBuZWVkcyB0bworICAgKiAgY2hhbmdlKSwgYnV0IG5vIGludmVzdGlnYXRpb24gaGFzIGJlZW4gZG9uZSBzaW5jZSBpbmhlcml0aW5nIHRoZQorICAgKiAgU0dJIGNvZGUuICBUb3VjaCBfR0xJQkNYWF9ERVFVRV9CVUZfU0laRSBvbmx5IGlmIHlvdSBrbm93IHdoYXQKKyAgICogIHlvdSBhcmUgZG9pbmcsIGhvd2V2ZXI6IGNoYW5naW5nIGl0IGJyZWFrcyB0aGUgYmluYXJ5CisgICAqICBjb21wYXRpYmlsaXR5ISEKKyAgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERVFVRV9CVUZfU0laRQorI2RlZmluZSBfR0xJQkNYWF9ERVFVRV9CVUZfU0laRSA1MTIKKyNlbmRpZgorCisgIGlubGluZSBzaXplX3QKKyAgX19kZXF1ZV9idWZfc2l6ZShzaXplX3QgX19zaXplKQorICB7IHJldHVybiAoX19zaXplIDwgX0dMSUJDWFhfREVRVUVfQlVGX1NJWkUKKwkgICAgPyBzaXplX3QoX0dMSUJDWFhfREVRVUVfQlVGX1NJWkUgLyBfX3NpemUpIDogc2l6ZV90KDEpKTsgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBkZXF1ZTo6aXRlcmF0b3IuCisgICAqCisgICAqICBRdWl0ZSBhIGJpdCBvZiBpbnRlbGxpZ2VuY2UgaGVyZS4gIE11Y2ggb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YKKyAgICogIGRlcXVlIGlzIGFjdHVhbGx5IHBhc3NlZCBvZmYgdG8gdGhpcyBjbGFzcy4gIEEgZGVxdWUgaG9sZHMgdHdvCisgICAqICBvZiB0aGVzZSBpbnRlcm5hbGx5LCBtYXJraW5nIGl0cyB2YWxpZCByYW5nZS4gIEFjY2VzcyB0bworICAgKiAgZWxlbWVudHMgaXMgZG9uZSBhcyBvZmZzZXRzIG9mIGVpdGhlciBvZiB0aG9zZSB0d28sIHJlbHlpbmcgb24KKyAgICogIG9wZXJhdG9yIG92ZXJsb2FkaW5nIGluIHRoaXMgY2xhc3MuCisgICAqCisgICAqICBBbGwgdGhlIGZ1bmN0aW9ucyBhcmUgb3Agb3ZlcmxvYWRzIGV4Y2VwdCBmb3IgX01fc2V0X25vZGUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KKyAgICBzdHJ1Y3QgX0RlcXVlX2l0ZXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHN0YXRpYyBzaXplX3QgX1NfYnVmZmVyX3NpemUoKQorICAgICAgeyByZXR1cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7IH0KKworICAgICAgdHlwZWRlZiBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9QdHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1JlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiogICAgICAgICAgICAgICAgICAgICAgICAgICBfTWFwX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIF9EZXF1ZV9pdGVyYXRvciAgICAgICAgICAgICAgICAgX1NlbGY7CisKKyAgICAgIF9UcCogX01fY3VyOworICAgICAgX1RwKiBfTV9maXJzdDsKKyAgICAgIF9UcCogX01fbGFzdDsKKyAgICAgIF9NYXBfcG9pbnRlciBfTV9ub2RlOworCisgICAgICBfRGVxdWVfaXRlcmF0b3IoX1RwKiBfX3gsIF9NYXBfcG9pbnRlciBfX3kpCisgICAgICA6IF9NX2N1cihfX3gpLCBfTV9maXJzdCgqX195KSwKKyAgICAgICAgX01fbGFzdCgqX195ICsgX1NfYnVmZmVyX3NpemUoKSksIF9NX25vZGUoX195KSB7IH0KKworICAgICAgX0RlcXVlX2l0ZXJhdG9yKCkKKyAgICAgIDogX01fY3VyKDApLCBfTV9maXJzdCgwKSwgX01fbGFzdCgwKSwgX01fbm9kZSgwKSB7IH0KKworICAgICAgX0RlcXVlX2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX3gpCisgICAgICA6IF9NX2N1cihfX3guX01fY3VyKSwgX01fZmlyc3QoX194Ll9NX2ZpcnN0KSwKKyAgICAgICAgX01fbGFzdChfX3guX01fbGFzdCksIF9NX25vZGUoX194Ll9NX25vZGUpIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiAqX01fY3VyOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VyOyB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJKytfTV9jdXI7CisJaWYgKF9NX2N1ciA9PSBfTV9sYXN0KQorCSAgeworCSAgICBfTV9zZXRfbm9kZShfTV9ub2RlICsgMSk7CisJICAgIF9NX2N1ciA9IF9NX2ZpcnN0OworCSAgfQorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJKysqdGhpczsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJaWYgKF9NX2N1ciA9PSBfTV9maXJzdCkKKwkgIHsKKwkgICAgX01fc2V0X25vZGUoX01fbm9kZSAtIDEpOworCSAgICBfTV9jdXIgPSBfTV9sYXN0OworCSAgfQorCS0tX01fY3VyOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJLS0qdGhpczsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKQorICAgICAgeworCWNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fbiArIChfTV9jdXIgLSBfTV9maXJzdCk7CisJaWYgKF9fb2Zmc2V0ID49IDAgJiYgX19vZmZzZXQgPCBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSkpCisJICBfTV9jdXIgKz0gX19uOworCWVsc2UKKwkgIHsKKwkgICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fbm9kZV9vZmZzZXQgPQorCSAgICAgIF9fb2Zmc2V0ID4gMCA/IF9fb2Zmc2V0IC8gZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpCisJICAgICAgICAgICAgICAgICAgIDogLWRpZmZlcmVuY2VfdHlwZSgoLV9fb2Zmc2V0IC0gMSkKKwkJCQkJICAgICAgLyBfU19idWZmZXJfc2l6ZSgpKSAtIDE7CisJICAgIF9NX3NldF9ub2RlKF9NX25vZGUgKyBfX25vZGVfb2Zmc2V0KTsKKwkgICAgX01fY3VyID0gX01fZmlyc3QgKyAoX19vZmZzZXQgLSBfX25vZGVfb2Zmc2V0CisJCQkJICogZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpKTsKKwkgIH0KKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9TZWxmCisgICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlfU2VsZiBfX3RtcCA9ICp0aGlzOworCXJldHVybiBfX3RtcCArPSBfX247CisgICAgICB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gKnRoaXMgKz0gLV9fbjsgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlyZXR1cm4gX190bXAgLT0gX19uOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9CisKKyAgICAgIC8qKiAKKyAgICAgICAqICBQcmVwYXJlcyB0byB0cmF2ZXJzZSBuZXdfbm9kZS4gIFNldHMgZXZlcnl0aGluZyBleGNlcHQKKyAgICAgICAqICBfTV9jdXIsIHdoaWNoIHNob3VsZCB0aGVyZWZvcmUgYmUgc2V0IGJ5IHRoZSBjYWxsZXIKKyAgICAgICAqICBpbW1lZGlhdGVseSBhZnRlcndhcmRzLCBiYXNlZCBvbiBfTV9maXJzdCBhbmQgX01fbGFzdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgX01fc2V0X25vZGUoX01hcF9wb2ludGVyIF9fbmV3X25vZGUpCisgICAgICB7CisJX01fbm9kZSA9IF9fbmV3X25vZGU7CisJX01fZmlyc3QgPSAqX19uZXdfbm9kZTsKKwlfTV9sYXN0ID0gX01fZmlyc3QgKyBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSk7CisgICAgICB9CisgICAgfTsKKworICAvLyBOb3RlOiB3ZSBhbHNvIHByb3ZpZGUgb3ZlcmxvYWRzIHdob3NlIG9wZXJhbmRzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGluCisgIC8vIG9yZGVyIHRvIGF2b2lkIGFtYmlndW91cyBvdmVybG9hZCByZXNvbHV0aW9uIHdoZW4gc3RkOjpyZWxfb3BzIG9wZXJhdG9ycworICAvLyBhcmUgaW4gc2NvcGUgKGZvciBhZGRpdGlvbmFsIGRldGFpbHMsIHNlZSBsaWJzdGRjKysvMzYyOCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX194LAorCSAgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9jdXIgPT0gX195Ll9NX2N1cjsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZkwsIHR5cGVuYW1lIF9QdHJMLAorCSAgIHR5cGVuYW1lIF9SZWZSLCB0eXBlbmFtZSBfUHRyUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZkwsIF9QdHJMPiYgX194LAorCSAgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmUiwgX1B0clI+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2N1ciA9PSBfX3kuX01fY3VyOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX194LAorCSAgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWZMLCB0eXBlbmFtZSBfUHRyTCwKKwkgICB0eXBlbmFtZSBfUmVmUiwgdHlwZW5hbWUgX1B0clI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD4mIF9feCwKKwkgICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feCwKKwkgICAgICBjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiYgX195KQorICAgIHsgcmV0dXJuIChfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZSkgPyAoX194Ll9NX2N1ciA8IF9feS5fTV9jdXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChfX3guX01fbm9kZSA8IF9feS5fTV9ub2RlKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JlZkwsIHR5cGVuYW1lIF9QdHJMLAorCSAgIHR5cGVuYW1lIF9SZWZSLCB0eXBlbmFtZSBfUHRyUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCisJICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQorICAgIHsgcmV0dXJuIChfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZSkgPyAoX194Ll9NX2N1ciA8IF9feS5fTV9jdXIpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKF9feC5fTV9ub2RlIDwgX195Ll9NX25vZGUpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCisJICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWZMLCB0eXBlbmFtZSBfUHRyTCwKKwkgICB0eXBlbmFtZSBfUmVmUiwgdHlwZW5hbWUgX1B0clI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZkwsIF9QdHJMPiYgX194LAorCSAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZSLCBfUHRyUj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCisJICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmTCwgdHlwZW5hbWUgX1B0ckwsCisJICAgdHlwZW5hbWUgX1JlZlIsIHR5cGVuYW1lIF9QdHJSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCisJICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZSLCBfUHRyUj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCisJICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmTCwgdHlwZW5hbWUgX1B0ckwsCisJICAgdHlwZW5hbWUgX1JlZlIsIHR5cGVuYW1lIF9QdHJSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCisJICAgICAgIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZSLCBfUHRyUj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIEFjY29yZGluZyB0byB0aGUgcmVzb2x1dGlvbiBvZiBEUjE3OSBub3Qgb25seSB0aGUgdmFyaW91cyBjb21wYXJpc29uCisgIC8vIG9wZXJhdG9ycyBidXQgYWxzbyBvcGVyYXRvci0gbXVzdCBhY2NlcHQgbWl4ZWQgaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IKKyAgLy8gcGFyYW1ldGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgorICAgIGlubGluZSB0eXBlbmFtZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgb3BlcmF0b3ItKGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gsCisJICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj4mIF9feSkKKyAgICB7CisgICAgICByZXR1cm4gdHlwZW5hbWUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZiwgX1B0cj46OmRpZmZlcmVuY2VfdHlwZQorCShfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPjo6X1NfYnVmZmVyX3NpemUoKSkKKwkqIChfX3guX01fbm9kZSAtIF9feS5fTV9ub2RlIC0gMSkgKyAoX194Ll9NX2N1ciAtIF9feC5fTV9maXJzdCkKKwkrIChfX3kuX01fbGFzdCAtIF9feS5fTV9jdXIpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWZMLCB0eXBlbmFtZSBfUHRyTCwKKwkgICB0eXBlbmFtZSBfUmVmUiwgdHlwZW5hbWUgX1B0clI+CisgICAgaW5saW5lIHR5cGVuYW1lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWZMLCBfUHRyTD46OmRpZmZlcmVuY2VfdHlwZQorICAgIG9wZXJhdG9yLShjb25zdCBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+JiBfX3gsCisJICAgICAgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZlIsIF9QdHJSPiYgX195KQorICAgIHsKKyAgICAgIHJldHVybiB0eXBlbmFtZSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfUmVmTCwgX1B0ckw+OjpkaWZmZXJlbmNlX3R5cGUKKwkoX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1JlZkwsIF9QdHJMPjo6X1NfYnVmZmVyX3NpemUoKSkKKwkqIChfX3guX01fbm9kZSAtIF9feS5fTV9ub2RlIC0gMSkgKyAoX194Ll9NX2N1ciAtIF9feC5fTV9maXJzdCkKKwkrIChfX3kuX01fbGFzdCAtIF9feS5fTV9jdXIpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CisgICAgaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+CisgICAgb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9SZWYsIF9QdHI+JiBfX3gpCisgICAgeyByZXR1cm4gX194ICsgX19uOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBmaWxsKGNvbnN0IF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+JiwKKwkgY29uc3QgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4mLCBjb25zdCBfVHAmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBjb3B5KF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+LAorCSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBjb3B5KF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fZmlyc3QsCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fbGFzdCwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19yZXN1bHQpCisgICAgeyByZXR1cm4gc3RkOjpjb3B5KF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+KF9fZmlyc3QpLAorCQkgICAgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4oX19sYXN0KSwKKwkJICAgICAgIF9fcmVzdWx0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPgorICAgIGNvcHlfYmFja3dhcmQoX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4sCisJCSAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4sCisJCSAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBjb3B5X2JhY2t3YXJkKF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fZmlyc3QsCisJCSAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gX19sYXN0LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fcmVzdWx0KQorICAgIHsgcmV0dXJuIHN0ZDo6Y29weV9iYWNrd2FyZChfRGVxdWVfaXRlcmF0b3I8X1RwLAorCQkJCWNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+KF9fZmlyc3QpLAorCQkJCV9EZXF1ZV9pdGVyYXRvcjxfVHAsCisJCQkJY29uc3QgX1RwJiwgY29uc3QgX1RwKj4oX19sYXN0KSwKKwkJCQlfX3Jlc3VsdCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+CisgICAgbW92ZShfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiwKKwkgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4sCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+KTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+CisgICAgbW92ZShfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX2ZpcnN0LAorCSBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX2xhc3QsCisJIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fcmVzdWx0KQorICAgIHsgcmV0dXJuIHN0ZDo6bW92ZShfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPihfX2ZpcnN0KSwKKwkJICAgICAgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+KF9fbGFzdCksCisJCSAgICAgICBfX3Jlc3VsdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4KKyAgICBtb3ZlX2JhY2t3YXJkKF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+KTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+CisgICAgbW92ZV9iYWNrd2FyZChfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX2ZpcnN0LAorCQkgIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+IF9fbGFzdCwKKwkJICBfRGVxdWVfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiBfX3Jlc3VsdCkKKyAgICB7IHJldHVybiBzdGQ6Om1vdmVfYmFja3dhcmQoX0RlcXVlX2l0ZXJhdG9yPF9UcCwKKwkJCQljb25zdCBfVHAmLCBjb25zdCBfVHAqPihfX2ZpcnN0KSwKKwkJCQlfRGVxdWVfaXRlcmF0b3I8X1RwLAorCQkJCWNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+KF9fbGFzdCksCisJCQkJX19yZXN1bHQpOyB9CisjZW5kaWYKKworICAvKioKKyAgICogIERlcXVlIGJhc2UgY2xhc3MuICBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSB1bmlmaWVkIGZhY2UgZm9yICVkZXF1ZSdzCisgICAqICBhbGxvY2F0aW9uLiAgVGhpcyBjbGFzcydzIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGFsbG9jYXRlIGFuZAorICAgKiAgZGVhbGxvY2F0ZSAoYnV0IGRvIG5vdCBpbml0aWFsaXplKSBzdG9yYWdlLiAgVGhpcyBtYWtlcyAlZXhjZXB0aW9uCisgICAqICBzYWZldHkgZWFzaWVyLgorICAgKgorICAgKiAgTm90aGluZyBpbiB0aGlzIGNsYXNzIGV2ZXIgY29uc3RydWN0cyBvciBkZXN0cm95cyBhbiBhY3R1YWwgVHAgZWxlbWVudC4KKyAgICogIChEZXF1ZSBoYW5kbGVzIHRoYXQgaXRzZWxmLikgIE9ubHkvQWxsIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHBlcmZvcm1lZAorICAgKiAgaGVyZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX0RlcXVlX2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQWxsb2MgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsgfQorCisgICAgICB0eXBlZGVmIF9EZXF1ZV9pdGVyYXRvcjxfVHAsIF9UcCYsIF9UcCo+ICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKKworICAgICAgX0RlcXVlX2Jhc2UoKQorICAgICAgOiBfTV9pbXBsKCkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tYXAoMCk7IH0KKworICAgICAgX0RlcXVlX2Jhc2Uoc2l6ZV90IF9fbnVtX2VsZW1lbnRzKQorICAgICAgOiBfTV9pbXBsKCkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tYXAoX19udW1fZWxlbWVudHMpOyB9CisKKyAgICAgIF9EZXF1ZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EsIHNpemVfdCBfX251bV9lbGVtZW50cykKKyAgICAgIDogX01faW1wbChfX2EpCisgICAgICB7IF9NX2luaXRpYWxpemVfbWFwKF9fbnVtX2VsZW1lbnRzKTsgfQorCisgICAgICBfRGVxdWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfTV9pbXBsKF9fYSkKKyAgICAgIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgX0RlcXVlX2Jhc2UoX0RlcXVlX2Jhc2UmJiBfX3gpCisgICAgICA6IF9NX2ltcGwoc3RkOjptb3ZlKF9feC5fTV9nZXRfVHBfYWxsb2NhdG9yKCkpKQorICAgICAgeworCV9NX2luaXRpYWxpemVfbWFwKDApOworCWlmIChfX3guX01faW1wbC5fTV9tYXApCisJICB7CisJICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX3guX01faW1wbC5fTV9zdGFydCk7CisJICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwgX194Ll9NX2ltcGwuX01fZmluaXNoKTsKKwkgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fbWFwLCBfX3guX01faW1wbC5fTV9tYXApOworCSAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSwgX194Ll9NX2ltcGwuX01fbWFwX3NpemUpOworCSAgfQorICAgICAgfQorI2VuZGlmCisKKyAgICAgIH5fRGVxdWVfYmFzZSgpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgLy9UaGlzIHN0cnVjdCBlbmNhcHN1bGF0ZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGQ6OmRlcXVlCisgICAgICAvL3N0YW5kYXJkIGNvbnRhaW5lciBhbmQgYXQgdGhlIHNhbWUgdGltZSBtYWtlcyB1c2Ugb2YgdGhlIEVCTworICAgICAgLy9mb3IgZW1wdHkgYWxsb2NhdG9ycy4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwKj46Om90aGVyIF9NYXBfYWxsb2NfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciAgX1RwX2FsbG9jX3R5cGU7CisKKyAgICAgIHN0cnVjdCBfRGVxdWVfaW1wbAorICAgICAgOiBwdWJsaWMgX1RwX2FsbG9jX3R5cGUKKyAgICAgIHsKKwlfVHAqKiBfTV9tYXA7CisJc2l6ZV90IF9NX21hcF9zaXplOworCWl0ZXJhdG9yIF9NX3N0YXJ0OworCWl0ZXJhdG9yIF9NX2ZpbmlzaDsKKworCV9EZXF1ZV9pbXBsKCkKKwk6IF9UcF9hbGxvY190eXBlKCksIF9NX21hcCgwKSwgX01fbWFwX3NpemUoMCksCisJICBfTV9zdGFydCgpLCBfTV9maW5pc2goKQorCXsgfQorCisJX0RlcXVlX2ltcGwoY29uc3QgX1RwX2FsbG9jX3R5cGUmIF9fYSkKKwk6IF9UcF9hbGxvY190eXBlKF9fYSksIF9NX21hcCgwKSwgX01fbWFwX3NpemUoMCksCisJICBfTV9zdGFydCgpLCBfTV9maW5pc2goKQorCXsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCV9EZXF1ZV9pbXBsKF9UcF9hbGxvY190eXBlJiYgX19hKQorCTogX1RwX2FsbG9jX3R5cGUoc3RkOjptb3ZlKF9fYSkpLCBfTV9tYXAoMCksIF9NX21hcF9zaXplKDApLAorCSAgX01fc3RhcnQoKSwgX01fZmluaXNoKCkKKwl7IH0KKyNlbmRpZgorICAgICAgfTsKKworICAgICAgX1RwX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHBfYWxsb2NfdHlwZSo+KCZ0aGlzLT5fTV9pbXBsKTsgfQorCisgICAgICBjb25zdCBfVHBfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9UcF9hbGxvY190eXBlKj4oJnRoaXMtPl9NX2ltcGwpOyB9CisKKyAgICAgIF9NYXBfYWxsb2NfdHlwZQorICAgICAgX01fZ2V0X21hcF9hbGxvY2F0b3IoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01hcF9hbGxvY190eXBlKF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgX1RwKgorICAgICAgX01fYWxsb2NhdGVfbm9kZSgpCisgICAgICB7IAorCXJldHVybiBfTV9pbXBsLl9UcF9hbGxvY190eXBlOjphbGxvY2F0ZShfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfVHAqIF9fcCkKKyAgICAgIHsKKwlfTV9pbXBsLl9UcF9hbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSkpOworICAgICAgfQorCisgICAgICBfVHAqKgorICAgICAgX01fYWxsb2NhdGVfbWFwKHNpemVfdCBfX24pCisgICAgICB7IHJldHVybiBfTV9nZXRfbWFwX2FsbG9jYXRvcigpLmFsbG9jYXRlKF9fbik7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZGVhbGxvY2F0ZV9tYXAoX1RwKiogX19wLCBzaXplX3QgX19uKQorICAgICAgeyBfTV9nZXRfbWFwX2FsbG9jYXRvcigpLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2b2lkIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCk7CisgICAgICB2b2lkIF9NX2NyZWF0ZV9ub2RlcyhfVHAqKiBfX25zdGFydCwgX1RwKiogX19uZmluaXNoKTsKKyAgICAgIHZvaWQgX01fZGVzdHJveV9ub2RlcyhfVHAqKiBfX25zdGFydCwgX1RwKiogX19uZmluaXNoKTsKKyAgICAgIGVudW0geyBfU19pbml0aWFsX21hcF9zaXplID0gOCB9OworCisgICAgICBfRGVxdWVfaW1wbCBfTV9pbXBsOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2M+OjoKKyAgICB+X0RlcXVlX2Jhc2UoKQorICAgIHsKKyAgICAgIGlmICh0aGlzLT5fTV9pbXBsLl9NX21hcCkKKwl7CisJICBfTV9kZXN0cm95X25vZGVzKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fbm9kZSwKKwkJCSAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX25vZGUgKyAxKTsKKwkgIF9NX2RlYWxsb2NhdGVfbWFwKHRoaXMtPl9NX2ltcGwuX01fbWFwLCB0aGlzLT5fTV9pbXBsLl9NX21hcF9zaXplKTsKKwl9CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIExheW91dCBzdG9yYWdlLgorICAgKiAgQHBhcmFtICBfX251bV9lbGVtZW50cyAgVGhlIGNvdW50IG9mIFQncyBmb3Igd2hpY2ggdG8gYWxsb2NhdGUgc3BhY2UKKyAgICogICAgICAgICAgICAgICAgICAgICAgICBhdCBmaXJzdC4KKyAgICogIEByZXR1cm4gICBOb3RoaW5nLgorICAgKgorICAgKiAgVGhlIGluaXRpYWwgdW5kZXJseWluZyBtZW1vcnkgbGF5b3V0IGlzIGEgYml0IGNvbXBsaWNhdGVkLi4uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfRGVxdWVfYmFzZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCBfX251bV9lbGVtZW50cykKKyAgICB7CisgICAgICBjb25zdCBzaXplX3QgX19udW1fbm9kZXMgPSAoX19udW1fZWxlbWVudHMvIF9fZGVxdWVfYnVmX3NpemUoc2l6ZW9mKF9UcCkpCisJCQkJICArIDEpOworCisgICAgICB0aGlzLT5fTV9pbXBsLl9NX21hcF9zaXplID0gc3RkOjptYXgoKHNpemVfdCkgX1NfaW5pdGlhbF9tYXBfc2l6ZSwKKwkJCQkJICAgc2l6ZV90KF9fbnVtX25vZGVzICsgMikpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9tYXAgPSBfTV9hbGxvY2F0ZV9tYXAodGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSk7CisKKyAgICAgIC8vIEZvciAic21hbGwiIG1hcHMgKG5lZWRpbmcgbGVzcyB0aGFuIF9NX21hcF9zaXplIG5vZGVzKSwgYWxsb2NhdGlvbgorICAgICAgLy8gc3RhcnRzIGluIHRoZSBtaWRkbGUgZWxlbWVudHMgYW5kIGdyb3dzIG91dHdhcmRzLiAgU28gbnN0YXJ0IG1heSBiZQorICAgICAgLy8gdGhlIGJlZ2lubmluZyBvZiBfTV9tYXAsIGJ1dCBmb3Igc21hbGwgbWFwcyBpdCBtYXkgYmUgYXMgZmFyIGluIGFzCisgICAgICAvLyBfTV9tYXArMy4KKworICAgICAgX1RwKiogX19uc3RhcnQgPSAodGhpcy0+X01faW1wbC5fTV9tYXAKKwkJCSsgKHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUgLSBfX251bV9ub2RlcykgLyAyKTsKKyAgICAgIF9UcCoqIF9fbmZpbmlzaCA9IF9fbnN0YXJ0ICsgX19udW1fbm9kZXM7CisKKyAgICAgIF9fdHJ5CisJeyBfTV9jcmVhdGVfbm9kZXMoX19uc3RhcnQsIF9fbmZpbmlzaCk7IH0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9NX2RlYWxsb2NhdGVfbWFwKHRoaXMtPl9NX2ltcGwuX01fbWFwLCB0aGlzLT5fTV9pbXBsLl9NX21hcF9zaXplKTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fbWFwID0gMDsKKwkgIHRoaXMtPl9NX2ltcGwuX01fbWFwX3NpemUgPSAwOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorCisgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbnN0YXJ0KTsKKyAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX3NldF9ub2RlKF9fbmZpbmlzaCAtIDEpOworICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIgPSBfTV9pbXBsLl9NX3N0YXJ0Ll9NX2ZpcnN0OworICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyID0gKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2ZpcnN0CisJCQkJCSsgX19udW1fZWxlbWVudHMKKwkJCQkJJSBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfRGVxdWVfYmFzZTxfVHAsIF9BbGxvYz46OgorICAgIF9NX2NyZWF0ZV9ub2RlcyhfVHAqKiBfX25zdGFydCwgX1RwKiogX19uZmluaXNoKQorICAgIHsKKyAgICAgIF9UcCoqIF9fY3VyOworICAgICAgX190cnkKKwl7CisJICBmb3IgKF9fY3VyID0gX19uc3RhcnQ7IF9fY3VyIDwgX19uZmluaXNoOyArK19fY3VyKQorCSAgICAqX19jdXIgPSB0aGlzLT5fTV9hbGxvY2F0ZV9ub2RlKCk7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgX01fZGVzdHJveV9ub2RlcyhfX25zdGFydCwgX19jdXIpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpCisgICAgeworICAgICAgZm9yIChfVHAqKiBfX24gPSBfX25zdGFydDsgX19uIDwgX19uZmluaXNoOyArK19fbikKKwlfTV9kZWFsbG9jYXRlX25vZGUoKl9fbik7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBBIHN0YW5kYXJkIGNvbnRhaW5lciB1c2luZyBmaXhlZC1zaXplIG1lbW9yeSBhbGxvY2F0aW9uIGFuZAorICAgKiAgY29uc3RhbnQtdGltZSBtYW5pcHVsYXRpb24gb2YgZWxlbWVudHMgYXQgZWl0aGVyIGVuZC4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgQHRwYXJhbSBfVHAgIFR5cGUgb2YgZWxlbWVudC4KKyAgICogIEB0cGFyYW0gX0FsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPF9UcD4uCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY2Ij5yZXZlcnNpYmxlIGNvbnRhaW5lcjwvYT4sIGFuZCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NyI+c2VxdWVuY2U8L2E+LCBpbmNsdWRpbmcgdGhlCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2OCI+b3B0aW9uYWwgc2VxdWVuY2UgcmVxdWlyZW1lbnRzPC9hPi4KKyAgICoKKyAgICogIEluIHByZXZpb3VzIEhQL1NHSSB2ZXJzaW9ucyBvZiBkZXF1ZSwgdGhlcmUgd2FzIGFuIGV4dHJhIHRlbXBsYXRlCisgICAqICBwYXJhbWV0ZXIgc28gdXNlcnMgY291bGQgY29udHJvbCB0aGUgbm9kZSBzaXplLiAgVGhpcyBleHRlbnNpb24gdHVybmVkCisgICAqICBvdXQgdG8gdmlvbGF0ZSB0aGUgQysrIHN0YW5kYXJkIChpdCBjYW4gYmUgZGV0ZWN0ZWQgdXNpbmcgdGVtcGxhdGUKKyAgICogIHRlbXBsYXRlIHBhcmFtZXRlcnMpLCBhbmQgaXQgd2FzIHJlbW92ZWQuCisgICAqCisgICAqICBIZXJlJ3MgaG93IGEgZGVxdWU8VHA+IG1hbmFnZXMgbWVtb3J5LiAgRWFjaCBkZXF1ZSBoYXMgNCBtZW1iZXJzOgorICAgKgorICAgKiAgLSBUcCoqICAgICAgICBfTV9tYXAKKyAgICogIC0gc2l6ZV90ICAgICAgX01fbWFwX3NpemUKKyAgICogIC0gaXRlcmF0b3IgICAgX01fc3RhcnQsIF9NX2ZpbmlzaAorICAgKgorICAgKiAgbWFwX3NpemUgaXMgYXQgbGVhc3QgOC4gICVtYXAgaXMgYW4gYXJyYXkgb2YgbWFwX3NpemUKKyAgICogIHBvaW50ZXJzLXRvLUBhIG5vZGVzLiAgKFRoZSBuYW1lICVtYXAgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUKKyAgICogIHN0ZDo6bWFwIGNsYXNzLCBhbmQgQGIgbm9kZXMgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoCisgICAqICBzdGQ6Omxpc3QncyB1c2FnZSBvZiBAYSBub2RlLikKKyAgICoKKyAgICogIEEgQGEgbm9kZSBoYXMgbm8gc3BlY2lmaWMgdHlwZSBuYW1lIGFzIHN1Y2gsIGJ1dCBpdCBpcyByZWZlcnJlZAorICAgKiAgdG8gYXMgQGEgbm9kZSBpbiB0aGlzIGZpbGUuICBJdCBpcyBhIHNpbXBsZSBhcnJheS1vZi1UcC4gIElmIFRwCisgICAqICBpcyB2ZXJ5IGxhcmdlLCB0aGVyZSB3aWxsIGJlIG9uZSBUcCBlbGVtZW50IHBlciBub2RlIChpLmUuLCBhbgorICAgKiAgQGEgYXJyYXkgb2Ygb25lKS4gIEZvciBub24taHVnZSBUcCdzLCBub2RlIHNpemUgaXMgaW52ZXJzZWx5CisgICAqICByZWxhdGVkIHRvIFRwIHNpemU6IHRoZSBsYXJnZXIgdGhlIFRwLCB0aGUgZmV3ZXIgVHAncyB3aWxsIGZpdAorICAgKiAgaW4gYSBub2RlLiAgVGhlIGdvYWwgaGVyZSBpcyB0byBrZWVwIHRoZSB0b3RhbCBzaXplIG9mIGEgbm9kZQorICAgKiAgcmVsYXRpdmVseSBzbWFsbCBhbmQgY29uc3RhbnQgb3ZlciBkaWZmZXJlbnQgVHAncywgdG8gaW1wcm92ZQorICAgKiAgYWxsb2NhdG9yIGVmZmljaWVuY3kuCisgICAqCisgICAqICBOb3QgZXZlcnkgcG9pbnRlciBpbiB0aGUgJW1hcCBhcnJheSB3aWxsIHBvaW50IHRvIGEgbm9kZS4gIElmCisgICAqICB0aGUgaW5pdGlhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGRlcXVlIGlzIHNtYWxsLCB0aGUKKyAgICogIC9taWRkbGUvICVtYXAgcG9pbnRlcnMgd2lsbCBiZSB2YWxpZCwgYW5kIHRoZSBvbmVzIGF0IHRoZSBlZGdlcworICAgKiAgd2lsbCBiZSB1bnVzZWQuICBUaGlzIHNhbWUgc2l0dWF0aW9uIHdpbGwgYXJpc2UgYXMgdGhlICVtYXAKKyAgICogIGdyb3dzOiBhdmFpbGFibGUgJW1hcCBwb2ludGVycywgaWYgYW55LCB3aWxsIGJlIG9uIHRoZSBlbmRzLiAgQXMKKyAgICogIG5ldyBub2RlcyBhcmUgY3JlYXRlZCwgb25seSBhIHN1YnNldCBvZiB0aGUgJW1hcCdzIHBvaW50ZXJzIG5lZWQKKyAgICogIHRvIGJlIGNvcGllZCBAYSBvdXR3YXJkLgorICAgKgorICAgKiAgQ2xhc3MgaW52YXJpYW50czoKKyAgICogLSBGb3IgYW55IG5vbnNpbmd1bGFyIGl0ZXJhdG9yIGk6CisgICAqICAgIC0gaS5ub2RlIHBvaW50cyB0byBhIG1lbWJlciBvZiB0aGUgJW1hcCBhcnJheS4gIChZZXMsIHlvdSByZWFkIHRoYXQKKyAgICogICAgICBjb3JyZWN0bHk6ICBpLm5vZGUgZG9lcyBub3QgYWN0dWFsbHkgcG9pbnQgdG8gYSBub2RlLikgIFRoZSBtZW1iZXIgb2YKKyAgICogICAgICB0aGUgJW1hcCBhcnJheSBpcyB3aGF0IGFjdHVhbGx5IHBvaW50cyB0byB0aGUgbm9kZS4KKyAgICogICAgLSBpLmZpcnN0ID09ICooaS5ub2RlKSAgICAoVGhpcyBwb2ludHMgdG8gdGhlIG5vZGUgKGZpcnN0IFRwIGVsZW1lbnQpLikKKyAgICogICAgLSBpLmxhc3QgID09IGkuZmlyc3QgKyBub2RlX3NpemUKKyAgICogICAgLSBpLmN1ciBpcyBhIHBvaW50ZXIgaW4gdGhlIHJhbmdlIFtpLmZpcnN0LCBpLmxhc3QpLiAgTk9URToKKyAgICogICAgICB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBpcyB0aGF0IGkuY3VyIGlzIGFsd2F5cyBhIGRlcmVmZXJlbmNlYWJsZQorICAgKiAgICAgIHBvaW50ZXIsIGV2ZW4gaWYgaSBpcyBhIHBhc3QtdGhlLWVuZCBpdGVyYXRvci4KKyAgICogLSBTdGFydCBhbmQgRmluaXNoIGFyZSBhbHdheXMgbm9uc2luZ3VsYXIgaXRlcmF0b3JzLiAgTk9URTogdGhpcworICAgKiBtZWFucyB0aGF0IGFuIGVtcHR5IGRlcXVlIG11c3QgaGF2ZSBvbmUgbm9kZSwgYSBkZXF1ZSB3aXRoIDxOCisgICAqIGVsZW1lbnRzICh3aGVyZSBOIGlzIHRoZSBub2RlIGJ1ZmZlciBzaXplKSBtdXN0IGhhdmUgb25lIG5vZGUsIGEKKyAgICogZGVxdWUgd2l0aCBOIHRocm91Z2ggKDJOLTEpIGVsZW1lbnRzIG11c3QgaGF2ZSB0d28gbm9kZXMsIGV0Yy4KKyAgICogLSBGb3IgZXZlcnkgbm9kZSBvdGhlciB0aGFuIHN0YXJ0Lm5vZGUgYW5kIGZpbmlzaC5ub2RlLCBldmVyeQorICAgKiBlbGVtZW50IGluIHRoZSBub2RlIGlzIGFuIGluaXRpYWxpemVkIG9iamVjdC4gIElmIHN0YXJ0Lm5vZGUgPT0KKyAgICogZmluaXNoLm5vZGUsIHRoZW4gW3N0YXJ0LmN1ciwgZmluaXNoLmN1cikgYXJlIGluaXRpYWxpemVkCisgICAqIG9iamVjdHMsIGFuZCB0aGUgZWxlbWVudHMgb3V0c2lkZSB0aGF0IHJhbmdlIGFyZSB1bmluaXRpYWxpemVkCisgICAqIHN0b3JhZ2UuICBPdGhlcndpc2UsIFtzdGFydC5jdXIsIHN0YXJ0Lmxhc3QpIGFuZCBbZmluaXNoLmZpcnN0LAorICAgKiBmaW5pc2guY3VyKSBhcmUgaW5pdGlhbGl6ZWQgb2JqZWN0cywgYW5kIFtzdGFydC5maXJzdCwgc3RhcnQuY3VyKQorICAgKiBhbmQgW2ZpbmlzaC5jdXIsIGZpbmlzaC5sYXN0KSBhcmUgdW5pbml0aWFsaXplZCBzdG9yYWdlLgorICAgKiAtIFslbWFwLCAlbWFwICsgbWFwX3NpemUpIGlzIGEgdmFsaWQsIG5vbi1lbXB0eSByYW5nZS4KKyAgICogLSBbc3RhcnQubm9kZSwgZmluaXNoLm5vZGVdIGlzIGEgdmFsaWQgcmFuZ2UgY29udGFpbmVkIHdpdGhpbgorICAgKiAgIFslbWFwLCAlbWFwICsgbWFwX3NpemUpLgorICAgKiAtIEEgcG9pbnRlciBpbiB0aGUgcmFuZ2UgWyVtYXAsICVtYXAgKyBtYXBfc2l6ZSkgcG9pbnRzIHRvIGFuIGFsbG9jYXRlZAorICAgKiAgIG5vZGUgaWYgYW5kIG9ubHkgaWYgdGhlIHBvaW50ZXIgaXMgaW4gdGhlIHJhbmdlCisgICAqICAgW3N0YXJ0Lm5vZGUsIGZpbmlzaC5ub2RlXS4KKyAgICoKKyAgICogIEhlcmUncyB0aGUgbWFnaWM6ICBub3RoaW5nIGluIGRlcXVlIGlzIEBiIGF3YXJlIG9mIHRoZSBkaXNjb250aWd1b3VzCisgICAqICBzdG9yYWdlIQorICAgKgorICAgKiAgVGhlIG1lbW9yeSBzZXR1cCBhbmQgbGF5b3V0IG9jY3VycyBpbiB0aGUgcGFyZW50LCBfQmFzZSwgYW5kIHRoZSBpdGVyYXRvcgorICAgKiAgY2xhc3MgaXMgZW50aXJlbHkgcmVzcG9uc2libGUgZm9yIEBhIGxlYXBpbmcgZnJvbSBvbmUgbm9kZSB0byB0aGUgbmV4dC4KKyAgICogIEFsbCB0aGUgaW1wbGVtZW50YXRpb24gcm91dGluZXMgZm9yIGRlcXVlIGl0c2VsZiB3b3JrIG9ubHkgdGhyb3VnaCB0aGUKKyAgICogIHN0YXJ0IGFuZCBmaW5pc2ggaXRlcmF0b3JzLiAgVGhpcyBrZWVwcyB0aGUgcm91dGluZXMgc2ltcGxlIGFuZCBzYW5lLAorICAgKiAgYW5kIHdlIGNhbiB1c2Ugb3RoZXIgc3RhbmRhcmQgYWxnb3JpdGhtcyBhcyB3ZWxsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGRlcXVlIDogcHJvdGVjdGVkIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPgorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dmFsdWVfdHlwZSAgICAgICAgX0FsbG9jX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9UcCwgX0FsbG9jX3ZhbHVlX3R5cGUsIF9TYW1lVHlwZUNvbmNlcHQpCisKKyAgICAgIHR5cGVkZWYgX0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2M+ICAgICAgICAgICBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Ol9UcF9hbGxvY190eXBlCSBfVHBfYWxsb2NfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcF9hbGxvY190eXBlOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHBfYWxsb2NfdHlwZTo6Y29uc3RfcG9pbnRlciAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfQWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBwb2ludGVyKiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NYXBfcG9pbnRlcjsKKworICAgICAgc3RhdGljIHNpemVfdCBfU19idWZmZXJfc2l6ZSgpCisgICAgICB7IHJldHVybiBfX2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKTsgfQorCisgICAgICAvLyBGdW5jdGlvbnMgY29udHJvbGxpbmcgbWVtb3J5IGxheW91dCwgYW5kIG5vdGhpbmcgZWxzZS4KKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9pbml0aWFsaXplX21hcDsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9jcmVhdGVfbm9kZXM7CisgICAgICB1c2luZyBfQmFzZTo6X01fZGVzdHJveV9ub2RlczsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZV9ub2RlOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGVfbm9kZTsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZV9tYXA7CisgICAgICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZV9tYXA7CisgICAgICB1c2luZyBfQmFzZTo6X01fZ2V0X1RwX2FsbG9jYXRvcjsKKworICAgICAgLyoqIAorICAgICAgICogIEEgdG90YWwgb2YgZm91ciBkYXRhIG1lbWJlcnMgYWNjdW11bGF0ZWQgZG93biB0aGUgaGllcmFyY2h5LgorICAgICAgICogIE1heSBiZSBhY2Nlc3NlZCB2aWEgX01faW1wbC4qCisgICAgICAgKi8KKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9pbXBsOworCisgICAgcHVibGljOgorICAgICAgLy8gWzIzLjIuMS4xXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisgICAgICAvLyAoYXNzaWduKCkgYW5kIGdldF9hbGxvY2F0b3IoKSBhcmUgYWxzbyBsaXN0ZWQgaW4gdGhpcyBzZWN0aW9uKQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgbm8gZWxlbWVudHMuCisgICAgICAgKi8KKyAgICAgIGRlcXVlKCkKKyAgICAgIDogX0Jhc2UoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWRlcXVlIHdpdGggbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBkZXF1ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfQmFzZShfX2EsIDApIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWRlcXVlIHdpdGggZGVmYXVsdCBjb25zdHJ1Y3RlZCBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGZpbGxzIHRoZSAlZGVxdWUgd2l0aCBAYSBuIGRlZmF1bHQKKyAgICAgICAqICBjb25zdHJ1Y3RlZCBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGRlcXVlKHNpemVfdHlwZSBfX24pCisgICAgICA6IF9CYXNlKF9fbikKKyAgICAgIHsgX01fZGVmYXVsdF9pbml0aWFsaXplKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWRlcXVlIHdpdGggY29waWVzIG9mIGFuIGV4ZW1wbGFyIGVsZW1lbnQuCisgICAgICAgKiAgQHBhcmFtICBfX24gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gaW5pdGlhbGx5IGNyZWF0ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fdmFsdWUgIEFuIGVsZW1lbnQgdG8gY29weS4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGZpbGxzIHRoZSAlZGVxdWUgd2l0aCBAYSBfX24gY29waWVzIG9mIEBhIF9fdmFsdWUuCisgICAgICAgKi8KKyAgICAgIGRlcXVlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUsCisJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EsIF9fbikKKyAgICAgIHsgX01fZmlsbF9pbml0aWFsaXplKF9fdmFsdWUpOyB9CisjZWxzZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWRlcXVlIHdpdGggY29waWVzIG9mIGFuIGV4ZW1wbGFyIGVsZW1lbnQuCisgICAgICAgKiAgQHBhcmFtICBfX24gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gaW5pdGlhbGx5IGNyZWF0ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fdmFsdWUgIEFuIGVsZW1lbnQgdG8gY29weS4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGZpbGxzIHRoZSAlZGVxdWUgd2l0aCBAYSBfX24gY29waWVzIG9mIEBhIF9fdmFsdWUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBkZXF1ZShzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVlID0gdmFsdWVfdHlwZSgpLAorCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hLCBfX24pCisgICAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZShfX3ZhbHVlKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJURlcXVlIGNvcHkgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJWRlcXVlIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVkZXF1ZSB1c2VzIGEgY29weSBvZiB0aGUgYWxsb2NhdGlvbiBvYmplY3QgdXNlZAorICAgICAgICogIGJ5IEBhIF9feC4KKyAgICAgICAqLworICAgICAgZGVxdWUoY29uc3QgZGVxdWUmIF9feCkKKyAgICAgIDogX0Jhc2UoX194Ll9NX2dldF9UcF9hbGxvY2F0b3IoKSwgX194LnNpemUoKSkKKyAgICAgIHsgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9feC5iZWdpbigpLCBfX3guZW5kKCksIAorCQkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCSAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVEZXF1ZSBtb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSAgX194ICBBICVkZXF1ZSBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlZGVxdWUgY29udGFpbnMgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIF9feC4KKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgX194IGFyZSBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgJWRlcXVlLgorICAgICAgICovCisgICAgICBkZXF1ZShkZXF1ZSYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9feCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVkZXF1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVkZXF1ZSBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXJfbGlzdCBAYSBfX2wuCisgICAgICAgKgorICAgICAgICogIFRoaXMgd2lsbCBjYWxsIHRoZSBlbGVtZW50IHR5cGUncyBjb3B5IGNvbnN0cnVjdG9yIE4gdGltZXMKKyAgICAgICAqICAod2hlcmUgTiBpcyBfX2wuc2l6ZSgpKSBhbmQgZG8gbm8gbWVtb3J5IHJlYWxsb2NhdGlvbi4KKyAgICAgICAqLworICAgICAgZGVxdWUoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7CisJX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpLAorCQkJICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKCkpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJWRlcXVlIGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJWRlcXVlIGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBmcm9tIFtfX2ZpcnN0LAorICAgICAgICogIF9fbGFzdCkuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBpdGVyYXRvcnMgYXJlIGZvcndhcmQsIGJpZGlyZWN0aW9uYWwsIG9yIHJhbmRvbS1hY2Nlc3MsIHRoZW4KKyAgICAgICAqICB0aGlzIHdpbGwgY2FsbCB0aGUgZWxlbWVudHMnIGNvcHkgY29uc3RydWN0b3IgTiB0aW1lcyAod2hlcmUgTiBpcworICAgICAgICogIGRpc3RhbmNlKF9fZmlyc3QsX19sYXN0KSkgYW5kIGRvIG5vIG1lbW9yeSByZWFsbG9jYXRpb24uICBCdXQgaWYgb25seQorICAgICAgICogIGlucHV0IGl0ZXJhdG9ycyBhcmUgdXNlZCwgdGhlbiB0aGlzIHdpbGwgZG8gYXQgbW9zdCAyTiBjYWxscyB0byB0aGUKKyAgICAgICAqICBjb3B5IGNvbnN0cnVjdG9yLCBhbmQgbG9nTiBtZW1vcnkgcmVhbGxvY2F0aW9ucy4KKyAgICAgICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorICAgICAgICBkZXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2EpCisgICAgICAgIHsgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9fZmFsc2VfdHlwZSgpKTsgfQorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBkZXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2EpCisgICAgICAgIHsKKwkgIC8vIENoZWNrIHdoZXRoZXIgaXQncyBhbiBpbnRlZ3JhbCB0eXBlLiAgSWYgc28sIGl0J3Mgbm90IGFuIGl0ZXJhdG9yLgorCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworCX0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBUaGUgZHRvciBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCBub3RlIHRoYXQgaWYgdGhlIGVsZW1lbnRzCisgICAgICAgKiAgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkKKyAgICAgICAqICB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB+ZGVxdWUoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyBfTV9kZXN0cm95X2RhdGEoYmVnaW4oKSwgZW5kKCksIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlRGVxdWUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlZGVxdWUgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSB4IGFyZSBjb3BpZWQsIGJ1dCB1bmxpa2UgdGhlIGNvcHkgY29uc3RydWN0b3IsCisgICAgICAgKiAgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgZGVxdWUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZGVxdWUmIF9feCk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVEZXF1ZSBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJWRlcXVlIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSBfX3ggYXJlIG1vdmVkIGludG8gdGhpcyBkZXF1ZSAod2l0aG91dCBjb3B5aW5nKS4KKyAgICAgICAqICBAYSBfX3ggaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICVkZXF1ZS4KKyAgICAgICAqLworICAgICAgZGVxdWUmCisgICAgICBvcGVyYXRvcj0oZGVxdWUmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhbiBpbml0aWFsaXplciBsaXN0IHRvIGEgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgX19sICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJWRlcXVlIHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUKKyAgICAgICAqICBpbml0aWFsaXplcl9saXN0IEBhIF9fbC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJWRlcXVlIGFuZCB0aGF0IHRoZQorICAgICAgICogIHJlc3VsdGluZyAlZGVxdWUncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKyAgICAgICAqICBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICBkZXF1ZSYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIGdpdmVuIHZhbHVlIHRvIGEgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgX19uICBOdW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgYXNzaWduZWQuCisgICAgICAgKiAgQHBhcmFtICBfX3ZhbCAgVmFsdWUgdG8gYmUgYXNzaWduZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAlZGVxdWUgd2l0aCBAYSBuIGNvcGllcyBvZiB0aGUgZ2l2ZW4KKyAgICAgICAqICB2YWx1ZS4gIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlCisgICAgICAgKiAgJWRlcXVlIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgJWRlcXVlJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcworICAgICAgICogIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQorICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbnMgYSByYW5nZSB0byBhICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAlZGVxdWUgd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIHJhbmdlIFtfX2ZpcnN0LF9fbGFzdCkuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlICVkZXF1ZSBhbmQgdGhhdCB0aGUKKyAgICAgICAqICByZXN1bHRpbmcgJWRlcXVlJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCisgICAgICAgKiAgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX19mYWxzZV90eXBlKCkpOyB9CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisJfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbnMgYW4gaW5pdGlhbGl6ZXIgbGlzdCB0byBhICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICVkZXF1ZSB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXJfbGlzdCBAYSBfX2wuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlICVkZXF1ZSBhbmQgdGhhdCB0aGUKKyAgICAgICAqICByZXN1bHRpbmcgJWRlcXVlJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCisgICAgICAgKiAgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvLy8gR2V0IGEgY29weSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gb2JqZWN0LgorICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICAvLyBpdGVyYXRvcnMKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZQorICAgICAgICogICVkZXF1ZS4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5IGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9zdGFydDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVkZXF1ZS4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QKKyAgICAgICAqICB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIG9yZGluYXJ5IGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBsYXN0IGVsZW1lbnQgaW4gdGhlICVkZXF1ZS4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIHJldmVyc2UKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9maW5pc2gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gb25lCisgICAgICAgKiAgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZQorICAgICAgICogIGluIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gb25lIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgJWRlcXVlLiAgSXRlcmF0aW9uIGlzCisgICAgICAgKiAgZG9uZSBpbiByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVkZXF1ZS4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5IGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9zdGFydDsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QKKyAgICAgICAqICB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIG9yZGluYXJ5IGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJWRlcXVlLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byBvbmUgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSAlZGVxdWUuICBJdGVyYXRpb24gaXMKKyAgICAgICAqICBkb25lIGluIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsgfQorI2VuZGlmCisKKyAgICAgIC8vIFsyMy4yLjEuMl0gY2FwYWNpdHkKKyAgICAgIC8qKiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSAlZGVxdWUuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoIC0gdGhpcy0+X01faW1wbC5fTV9zdGFydDsgfQorCisgICAgICAvKiogIFJldHVybnMgdGhlIHNpemUoKSBvZiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSAlZGVxdWUuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV9nZXRfVHBfYWxsb2NhdG9yKCkubWF4X3NpemUoKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemVzIHRoZSAlZGVxdWUgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX25ld19zaXplICBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICVkZXF1ZSBzaG91bGQgY29udGFpbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsICVyZXNpemUgdGhlICVkZXF1ZSB0byB0aGUgc3BlY2lmaWVkCisgICAgICAgKiAgbnVtYmVyIG9mIGVsZW1lbnRzLiAgSWYgdGhlIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICAgICAgKiAgJWRlcXVlJ3MgY3VycmVudCBzaXplIHRoZSAlZGVxdWUgaXMgdHJ1bmNhdGVkLCBvdGhlcndpc2UKKyAgICAgICAqICBkZWZhdWx0IGNvbnN0cnVjdGVkIGVsZW1lbnRzIGFyZSBhcHBlbmRlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKQorICAgICAgeworCWNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKTsKKwlpZiAoX19uZXdfc2l6ZSA+IF9fbGVuKQorCSAgX01fZGVmYXVsdF9hcHBlbmQoX19uZXdfc2l6ZSAtIF9fbGVuKTsKKwllbHNlIGlmIChfX25ld19zaXplIDwgX19sZW4pCisJICBfTV9lcmFzZV9hdF9lbmQodGhpcy0+X01faW1wbC5fTV9zdGFydAorCQkJICArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVzaXplcyB0aGUgJWRlcXVlIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX19uZXdfc2l6ZSAgTnVtYmVyIG9mIGVsZW1lbnRzIHRoZSAlZGVxdWUgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKiAgQHBhcmFtICBfX3ggIERhdGEgd2l0aCB3aGljaCBuZXcgZWxlbWVudHMgc2hvdWxkIGJlIHBvcHVsYXRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsICVyZXNpemUgdGhlICVkZXF1ZSB0byB0aGUgc3BlY2lmaWVkCisgICAgICAgKiAgbnVtYmVyIG9mIGVsZW1lbnRzLiAgSWYgdGhlIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICAgICAgKiAgJWRlcXVlJ3MgY3VycmVudCBzaXplIHRoZSAlZGVxdWUgaXMgdHJ1bmNhdGVkLCBvdGhlcndpc2UgdGhlCisgICAgICAgKiAgJWRlcXVlIGlzIGV4dGVuZGVkIGFuZCBuZXcgZWxlbWVudHMgYXJlIHBvcHVsYXRlZCB3aXRoIGdpdmVuCisgICAgICAgKiAgZGF0YS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOworCWlmIChfX25ld19zaXplID4gX19sZW4pCisJICBpbnNlcnQodGhpcy0+X01faW1wbC5fTV9maW5pc2gsIF9fbmV3X3NpemUgLSBfX2xlbiwgX194KTsKKwllbHNlIGlmIChfX25ld19zaXplIDwgX19sZW4pCisJICBfTV9lcmFzZV9hdF9lbmQodGhpcy0+X01faW1wbC5fTV9zdGFydAorCQkJICArIGRpZmZlcmVuY2VfdHlwZShfX25ld19zaXplKSk7CisgICAgICB9CisjZWxzZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemVzIHRoZSAlZGVxdWUgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX25ld19zaXplICBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICVkZXF1ZSBzaG91bGQgY29udGFpbi4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB3aXRoIHdoaWNoIG5ldyBlbGVtZW50cyBzaG91bGQgYmUgcG9wdWxhdGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgJXJlc2l6ZSB0aGUgJWRlcXVlIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMuICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAqICAlZGVxdWUncyBjdXJyZW50IHNpemUgdGhlICVkZXF1ZSBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSB0aGUKKyAgICAgICAqICAlZGVxdWUgaXMgZXh0ZW5kZWQgYW5kIG5ldyBlbGVtZW50cyBhcmUgcG9wdWxhdGVkIHdpdGggZ2l2ZW4KKyAgICAgICAqICBkYXRhLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIHZhbHVlX3R5cGUgX194ID0gdmFsdWVfdHlwZSgpKQorICAgICAgeworCWNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKTsKKwlpZiAoX19uZXdfc2l6ZSA+IF9fbGVuKQorCSAgaW5zZXJ0KHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7CisJZWxzZSBpZiAoX19uZXdfc2l6ZSA8IF9fbGVuKQorCSAgX01fZXJhc2VfYXRfZW5kKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQKKwkJCSAgKyBkaWZmZXJlbmNlX3R5cGUoX19uZXdfc2l6ZSkpOworICAgICAgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKiogIEEgbm9uLWJpbmRpbmcgcmVxdWVzdCB0byByZWR1Y2UgbWVtb3J5IHVzZS4gICovCisgICAgICB2b2lkCisgICAgICBzaHJpbmtfdG9fZml0KCkKKyAgICAgIHsgX01fc2hyaW5rX3RvX2ZpdCgpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSAlZGVxdWUgaXMgZW1wdHkuICAoVGh1cyBiZWdpbigpIHdvdWxkCisgICAgICAgKiAgZXF1YWwgZW5kKCkuKQorICAgICAgICovCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9PSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0OyB9CisKKyAgICAgIC8vIGVsZW1lbnQgYWNjZXNzCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgU3Vic2NyaXB0IGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gX19uIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBmb3Igd2hpY2ggZGF0YSBzaG91bGQgYmUKKyAgICAgICAqICBhY2Nlc3NlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkL3dyaXRlIHJlZmVyZW5jZSB0byBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdG9yIGFsbG93cyBmb3IgZWFzeSwgYXJyYXktc3R5bGUsIGRhdGEgYWNjZXNzLgorICAgICAgICogIE5vdGUgdGhhdCBkYXRhIGFjY2VzcyB3aXRoIHRoaXMgb3BlcmF0b3IgaXMgdW5jaGVja2VkIGFuZAorICAgICAgICogIG91dF9vZl9yYW5nZSBsb29rdXBzIGFyZSBub3QgZGVmaW5lZC4gKEZvciBjaGVja2VkIGxvb2t1cHMKKyAgICAgICAqICBzZWUgYXQoKS4pCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9zdGFydFtkaWZmZXJlbmNlX3R5cGUoX19uKV07IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFN1YnNjcmlwdCBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtIF9fbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlCisgICAgICAgKiAgYWNjZXNzZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIGRhdGEuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikKKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8vIFNhZmV0eSBjaGVjayB1c2VkIG9ubHkgZnJvbSBhdCgpLgorICAgICAgdm9pZAorICAgICAgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlpZiAoX19uID49IHRoaXMtPnNpemUoKSkKKwkgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiZGVxdWU6Ol9NX3JhbmdlX2NoZWNrIikpOworICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtIF9fbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlCisgICAgICAgKiAgYWNjZXNzZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC93cml0ZSByZWZlcmVuY2UgdG8gZGF0YS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX24gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyCisgICAgICAgKiAgaXMgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgZGVxdWUuICBUaGUKKyAgICAgICAqICBmdW5jdGlvbiB0aHJvd3Mgb3V0X29mX3JhbmdlIGlmIHRoZSBjaGVjayBmYWlscy4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBhdChzaXplX3R5cGUgX19uKQorICAgICAgeworCV9NX3JhbmdlX2NoZWNrKF9fbik7CisJcmV0dXJuICgqdGhpcylbX19uXTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtIF9fbiBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlCisgICAgICAgKiAgYWNjZXNzZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIGRhdGEuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgX19uIGlzIGFuIGludmFsaWQgaW5kZXguCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgZm9yIHNhZmVyIGRhdGEgYWNjZXNzLiAgVGhlIHBhcmFtZXRlciBpcyBmaXJzdAorICAgICAgICogIGNoZWNrZWQgdGhhdCBpdCBpcyBpbiB0aGUgcmFuZ2Ugb2YgdGhlIGRlcXVlLiAgVGhlIGZ1bmN0aW9uIHRocm93cworICAgICAgICogIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlfTV9yYW5nZV9jaGVjayhfX24pOworCXJldHVybiAoKnRoaXMpW19fbl07CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlZGVxdWUuCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgZnJvbnQoKQorICAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlZGVxdWUuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlCisgICAgICAgKiAgJWRlcXVlLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeworCWl0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CisJLS1fX3RtcDsKKwlyZXR1cm4gKl9fdG1wOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJWRlcXVlLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeworCWNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CisJLS1fX3RtcDsKKwlyZXR1cm4gKl9fdG1wOworICAgICAgfQorCisgICAgICAvLyBbMjMuMi4xLjJdIG1vZGlmaWVycworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBZGQgZGF0YSB0byB0aGUgZnJvbnQgb2YgdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB0byBiZSBhZGRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgc3RhY2sgb3BlcmF0aW9uLiAgVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYW4KKyAgICAgICAqICBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgJWRlcXVlIGFuZCBhc3NpZ25zIHRoZSBnaXZlbgorICAgICAgICogIGRhdGEgdG8gaXQuICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVkZXF1ZSB0aGlzIG9wZXJhdGlvbgorICAgICAgICogIGNhbiBiZSBkb25lIGluIGNvbnN0YW50IHRpbWUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCWlmICh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciAhPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2ZpcnN0KQorCSAgeworCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1ciAtIDEsIF9feCk7CisJICAgIC0tdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXI7CisJICB9CisJZWxzZQorCSAgX01fcHVzaF9mcm9udF9hdXgoX194KTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQodmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgZW1wbGFjZV9mcm9udChzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9mcm9udChfQXJncyYmLi4uIF9fYXJncyk7CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBZGQgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIERhdGEgdG8gYmUgYWRkZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGFuCisgICAgICAgKiAgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSAlZGVxdWUgYW5kIGFzc2lnbnMgdGhlIGdpdmVuIGRhdGEKKyAgICAgICAqICB0byBpdC4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWRlcXVlIHRoaXMgb3BlcmF0aW9uIGNhbiBiZQorICAgICAgICogIGRvbmUgaW4gY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlpZiAodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyCisJICAgICE9IHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2xhc3QgLSAxKQorCSAgeworCSAgICB0aGlzLT5fTV9pbXBsLmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIsIF9feCk7CisJICAgICsrdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyOworCSAgfQorCWVsc2UKKwkgIF9NX3B1c2hfYmFja19hdXgoX194KTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayh2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyBlbXBsYWNlX2JhY2soc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGVtcGxhY2VfYmFjayhfQXJncyYmLi4uIF9fYXJncyk7CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmVzIGZpcnN0IGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIEl0IHNocmlua3MgdGhlICVkZXF1ZSBieSBvbmUuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCBubyBkYXRhIGlzIHJldHVybmVkLCBhbmQgaWYgdGhlIGZpcnN0IGVsZW1lbnQncyBkYXRhIGlzCisgICAgICAgKiAgbmVlZGVkLCBpdCBzaG91bGQgYmUgcmV0cmlldmVkIGJlZm9yZSBwb3BfZnJvbnQoKSBpcyBjYWxsZWQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBvcF9mcm9udCgpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fY3VyCisJICAgICE9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fbGFzdCAtIDEpCisJICB7CisJICAgIHRoaXMtPl9NX2ltcGwuZGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX2N1cik7CisJICAgICsrdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXI7CisJICB9CisJZWxzZQorCSAgX01fcG9wX2Zyb250X2F1eCgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgbGFzdCBlbGVtZW50LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uICBJdCBzaHJpbmtzIHRoZSAlZGVxdWUgYnkgb25lLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgbm8gZGF0YSBpcyByZXR1cm5lZCwgYW5kIGlmIHRoZSBsYXN0IGVsZW1lbnQncyBkYXRhIGlzCisgICAgICAgKiAgbmVlZGVkLCBpdCBzaG91bGQgYmUgcmV0cmlldmVkIGJlZm9yZSBwb3BfYmFjaygpIGlzIGNhbGxlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcG9wX2JhY2soKQorICAgICAgeworCWlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIKKwkgICAgIT0gdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fZmlyc3QpCisJICB7CisJICAgIC0tdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyOworCSAgICB0aGlzLT5fTV9pbXBsLmRlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fY3VyKTsKKwkgIH0KKwllbHNlCisJICBfTV9wb3BfYmFja19hdXgoKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhbiBvYmplY3QgaW4gJWRlcXVlIGJlZm9yZSBzcGVjaWZpZWQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtICBfX2FyZ3MgIEFyZ3VtZW50cy4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZGF0YS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhbiBvYmplY3Qgb2YgdHlwZSBUIGNvbnN0cnVjdGVkCisgICAgICAgKiAgd2l0aCBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikgYmVmb3JlIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBlbXBsYWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKTsKKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgZ2l2ZW4gdmFsdWUgaW50byAlZGVxdWUgYmVmb3JlIHNwZWNpZmllZCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZGF0YS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhIGNvcHkgb2YgdGhlIGdpdmVuIHZhbHVlIGJlZm9yZSB0aGUKKyAgICAgICAqICBzcGVjaWZpZWQgbG9jYXRpb24uCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBnaXZlbiBydmFsdWUgaW50byAlZGVxdWUgYmVmb3JlIHNwZWNpZmllZCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZGF0YS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhIGNvcHkgb2YgdGhlIGdpdmVuIHJ2YWx1ZSBiZWZvcmUgdGhlCisgICAgICAgKiAgc3BlY2lmaWVkIGxvY2F0aW9uLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IHJldHVybiBlbXBsYWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgYW4gaW5pdGlhbGl6ZXIgbGlzdCBpbnRvIHRoZSAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIEFuIGl0ZXJhdG9yIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXJfbGlzdCBAYSBfX2wgaW50byB0aGUgJWRlcXVlIGJlZm9yZSB0aGUgbG9jYXRpb24KKyAgICAgICAqICBzcGVjaWZpZWQgYnkgQGEgX19wLiAgVGhpcyBpcyBrbm93biBhcyA8ZW0+bGlzdCBpbnNlcnQ8L2VtPi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IHRoaXMtPmluc2VydChfX3AsIF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGEgbnVtYmVyIG9mIGNvcGllcyBvZiBnaXZlbiBkYXRhIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVkZXF1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX194ICBEYXRhIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIGdpdmVuCisgICAgICAgKiAgZGF0YSBiZWZvcmUgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBAYSBfX3Bvc2l0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24sIF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGEgcmFuZ2UgaW50byB0aGUgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJWRlcXVlLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gdGhlIHJhbmdlCisgICAgICAgKiAgW19fZmlyc3QsX19sYXN0KSBpbnRvIHRoZSAlZGVxdWUgYmVmb3JlIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQKKyAgICAgICAqICBieSBAYSBfX3Bvc2l0aW9uLiAgVGhpcyBpcyBrbm93biBhcyA8ZW0+cmFuZ2UgaW5zZXJ0PC9lbT4uCisgICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7IF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9fZmFsc2VfdHlwZSgpKTsgfQorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIC8vIENoZWNrIHdoZXRoZXIgaXQncyBhbiBpbnRlZ3JhbCB0eXBlLiAgSWYgc28sIGl0J3Mgbm90IGFuIGl0ZXJhdG9yLgorCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisJfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGVsZW1lbnQgYXQgZ2l2ZW4gcG9zaXRpb24uCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBJdGVyYXRvciBwb2ludGluZyB0byBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbmV4dCBlbGVtZW50IChvciBlbmQoKSkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBlcmFzZSB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRodXMKKyAgICAgICAqICBzaG9ydGVuIHRoZSAlZGVxdWUgYnkgb25lLgorICAgICAgICoKKyAgICAgICAqICBUaGUgdXNlciBpcyBjYXV0aW9uZWQgdGhhdAorICAgICAgICogIHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50IGlzCisgICAgICAgKiAgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuCisgICAgICAgKiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBhIHJhbmdlIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50IHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSBAYSBsYXN0CisgICAgICAgKiAgICAgICAgICAgcHJpb3IgdG8gZXJhc2luZyAob3IgZW5kKCkpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgZXJhc2UgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZQorICAgICAgICogIFtfX2ZpcnN0LF9fbGFzdCkgYW5kIHNob3J0ZW4gdGhlICVkZXF1ZSBhY2NvcmRpbmdseS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHVzZXIgaXMgY2F1dGlvbmVkIHRoYXQKKyAgICAgICAqICB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzCisgICAgICAgKiAgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkKKyAgICAgICAqICB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTd2FwcyBkYXRhIHdpdGggYW5vdGhlciAlZGVxdWUuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJWRlcXVlIG9mIHRoZSBzYW1lIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBleGNoYW5nZXMgdGhlIGVsZW1lbnRzIGJldHdlZW4gdHdvIGRlcXVlcyBpbiBjb25zdGFudCB0aW1lLgorICAgICAgICogIChGb3VyIHBvaW50ZXJzLCBzbyBpdCBzaG91bGQgYmUgcXVpdGUgZmFzdC4pCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBnbG9iYWwgc3RkOjpzd2FwKCkgZnVuY3Rpb24gaXMgc3BlY2lhbGl6ZWQgc3VjaCB0aGF0CisgICAgICAgKiAgc3RkOjpzd2FwKGQxLGQyKSB3aWxsIGZlZWQgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChkZXF1ZSYgX194KQorICAgICAgeworCXN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX3guX01faW1wbC5fTV9zdGFydCk7CisJc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLCBfX3guX01faW1wbC5fTV9maW5pc2gpOworCXN0ZDo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX21hcCwgX194Ll9NX2ltcGwuX01fbWFwKTsKKwlzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZSwgX194Ll9NX2ltcGwuX01fbWFwX3NpemUpOworCisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxsb2NhdG9ycy4KKwlzdGQ6Ol9fYWxsb2Nfc3dhcDxfVHBfYWxsb2NfdHlwZT46Ol9TX2RvX2l0KF9NX2dldF9UcF9hbGxvY2F0b3IoKSwKKwkJCQkJCSAgICBfX3guX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIGFsbCB0aGUgZWxlbWVudHMuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUKKyAgICAgICAqICBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUKKyAgICAgICAqICBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMKKyAgICAgICAqICB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX2VyYXNlX2F0X2VuZChiZWdpbigpKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gSW50ZXJuYWwgY29uc3RydWN0b3IgZnVuY3Rpb25zIGZvbGxvdy4KKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSByYW5nZSBjb25zdHJ1Y3RvciB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkKKyAgICAgICAgeworCSAgX01faW5pdGlhbGl6ZV9tYXAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pKTsKKwkgIF9NX2ZpbGxfaW5pdGlhbGl6ZShfX3gpOworCX0KKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSByYW5nZSBjb25zdHJ1Y3RvciB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICAgICAgX19mYWxzZV90eXBlKQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6CisJICAgIGl0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CisJICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKKwl9CisKKyAgICAgIC8vIGNhbGxlZCBieSB0aGUgc2Vjb25kIGluaXRpYWxpemVfZGlzcGF0Y2ggYWJvdmUKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaWxscyB0aGUgZGVxdWUgd2l0aCB3aGF0ZXZlciBpcyBpbiBbZmlyc3QsbGFzdCkuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHJldHVybiAgIE5vdGhpbmcuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBpdGVyYXRvcnMgYXJlIGFjdHVhbGx5IGZvcndhcmQgaXRlcmF0b3JzIChvciBiZXR0ZXIpLCB0aGVuIHRoZQorICAgICAgICogIG1lbW9yeSBsYXlvdXQgY2FuIGJlIGRvbmUgYWxsIGF0IG9uY2UuICBFbHNlIHdlIG1vdmUgZm9yd2FyZCB1c2luZworICAgICAgICogIHB1c2hfYmFjayBvbiBlYWNoIHZhbHVlIGZyb20gdGhlIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIC8vIGNhbGxlZCBieSB0aGUgc2Vjb25kIGluaXRpYWxpemVfZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkJICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpOworICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRmlsbHMgdGhlICVkZXF1ZSB3aXRoIGNvcGllcyBvZiB2YWx1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fdmFsdWUgIEluaXRpYWwgdmFsdWUuCisgICAgICAgKiAgQHJldHVybiAgIE5vdGhpbmcuCisgICAgICAgKiAgQHByZSBfTV9zdGFydCBhbmQgX01fZmluaXNoIGhhdmUgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLAorICAgICAgICogIGJ1dCBub25lIG9mIHRoZSAlZGVxdWUncyBlbGVtZW50cyBoYXZlIHlldCBiZWVuIGNvbnN0cnVjdGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlIHVzZXIgcHJvdmlkZXMgYW4gZXhwbGljaXQgc2l6ZQorICAgICAgICogICh3aXRoIG9yIHdpdGhvdXQgYW4gZXhwbGljaXQgZXhlbXBsYXIgdmFsdWUpLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBfTV9maWxsX2luaXRpYWxpemUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBjYWxsZWQgYnkgZGVxdWUobikuCisgICAgICB2b2lkCisgICAgICBfTV9kZWZhdWx0X2luaXRpYWxpemUoKTsKKyNlbmRpZgorCisgICAgICAvLyBJbnRlcm5hbCBhc3NpZ24gZnVuY3Rpb25zIGZvbGxvdy4gIFRoZSAqX2F1eCBmdW5jdGlvbnMgZG8gdGhlIGFjdHVhbAorICAgICAgLy8gYXNzaWdubWVudCB3b3JrIGZvciB0aGUgcmFuZ2UgdmVyc2lvbnMuCisKKyAgICAgIC8vIGNhbGxlZCBieSB0aGUgcmFuZ2UgYXNzaWduIHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKKyAgICAgICAgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQorCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHJhbmdlIGFzc2lnbiB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9fZmFsc2VfdHlwZSkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OgorCSAgICBpdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OworCSAgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CisJfQorCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHNlY29uZCBhc3NpZ25fZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIC8vIGNhbGxlZCBieSB0aGUgc2Vjb25kIGFzc2lnbl9kaXNwYXRjaCBhYm92ZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICAgIHsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKwkgIGlmIChfX2xlbiA+IHNpemUoKSkKKwkgICAgeworCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OworCSAgICAgIHN0ZDo6YWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKKwkgICAgICBzdGQ6OmNvcHkoX19maXJzdCwgX19taWQsIGJlZ2luKCkpOworCSAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgX01fZXJhc2VfYXRfZW5kKHN0ZDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpKTsKKwl9CisKKyAgICAgIC8vIENhbGxlZCBieSBhc3NpZ24obix0KSwgYW5kIHRoZSByYW5nZSBhc3NpZ24gd2hlbiBpdCB0dXJucyBvdXQKKyAgICAgIC8vIHRvIGJlIHRoZSBzYW1lIHRoaW5nLgorICAgICAgdm9pZAorICAgICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCisgICAgICB7CisJaWYgKF9fbiA+IHNpemUoKSkKKwkgIHsKKwkgICAgc3RkOjpmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CisJICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CisJICB9CisJZWxzZQorCSAgeworCSAgICBfTV9lcmFzZV9hdF9lbmQoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkgICAgc3RkOjpmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CisJICB9CisgICAgICB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBwdXNoXyogYW5kIHBvcF8qLgorI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorICAgICAgdm9pZCBfTV9wdXNoX2JhY2tfYXV4KGNvbnN0IHZhbHVlX3R5cGUmKTsKKworICAgICAgdm9pZCBfTV9wdXNoX2Zyb250X2F1eChjb25zdCB2YWx1ZV90eXBlJik7CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQgX01fcHVzaF9iYWNrX2F1eChfQXJncyYmLi4uIF9fYXJncyk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkIF9NX3B1c2hfZnJvbnRfYXV4KF9BcmdzJiYuLi4gX19hcmdzKTsKKyNlbmRpZgorCisgICAgICB2b2lkIF9NX3BvcF9iYWNrX2F1eCgpOworCisgICAgICB2b2lkIF9NX3BvcF9mcm9udF9hdXgoKTsKKyAgICAgIC8vQH0KKworICAgICAgLy8gSW50ZXJuYWwgaW5zZXJ0IGZ1bmN0aW9ucyBmb2xsb3cuICBUaGUgKl9hdXggZnVuY3Rpb25zIGRvIHRoZSBhY3R1YWwKKyAgICAgIC8vIGluc2VydGlvbiB3b3JrIHdoZW4gYWxsIHNob3J0Y3V0cyBmYWlsLgorCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHJhbmdlIGluc2VydCB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCisJCQkgICBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpCisgICAgICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQorCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHJhbmdlIGluc2VydCB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAorCQkJICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJICAgX19mYWxzZV90eXBlKQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6CisJICAgIGl0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CisgICAgICAgICAgX01fcmFuZ2VfaW5zZXJ0X2F1eChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOworCX0KKworICAgICAgLy8gY2FsbGVkIGJ5IHRoZSBzZWNvbmQgaW5zZXJ0X2Rpc3BhdGNoIGFib3ZlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9yYW5nZV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpOworCisgICAgICAvLyBjYWxsZWQgYnkgdGhlIHNlY29uZCBpbnNlcnRfZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fcmFuZ2VfaW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IGluc2VydChwLG4seCksIGFuZCB0aGUgcmFuZ2UgaW5zZXJ0IHdoZW4gaXQgdHVybnMgb3V0IHRvIGJlCisgICAgICAvLyB0aGUgc2FtZSB0aGluZy4gIENhbiB1c2UgZmlsbCBmdW5jdGlvbnMgaW4gb3B0aW1hbCBzaXR1YXRpb25zLAorICAgICAgLy8gb3RoZXJ3aXNlIHBhc3NlcyBvZmYgdG8gaW5zZXJ0X2F1eChwLG4seCkuCisgICAgICB2b2lkCisgICAgICBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKKworICAgICAgLy8gY2FsbGVkIGJ5IGluc2VydChwLHgpCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpOworI2VuZGlmCisKKyAgICAgIC8vIGNhbGxlZCBieSBpbnNlcnQocCxuLHgpIHZpYSBmaWxsX2luc2VydAorICAgICAgdm9pZAorICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKKworICAgICAgLy8gY2FsbGVkIGJ5IHJhbmdlX2luc2VydF9hdXggZm9yIGZvcndhcmQgaXRlcmF0b3JzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MsCisJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIHNpemVfdHlwZSBfX24pOworCisKKyAgICAgIC8vIEludGVybmFsIGVyYXNlIGZ1bmN0aW9ucyBmb2xsb3cuCisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2Rlc3Ryb3lfZGF0YV9hdXgoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IH5kZXF1ZSgpLgorICAgICAgLy8gTkI6IERvZXNuJ3QgZGVhbGxvY2F0ZSB0aGUgbm9kZXMuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MxPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Rlc3Ryb3lfZGF0YShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9BbGxvYzEmKQorICAgICAgICB7IF9NX2Rlc3Ryb3lfZGF0YV9hdXgoX19maXJzdCwgX19sYXN0KTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95X2RhdGEoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0LAorCQkgICAgICBjb25zdCBzdGQ6OmFsbG9jYXRvcjxfVHA+JikKKyAgICAgIHsKKwlpZiAoIV9faGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvcih2YWx1ZV90eXBlKSkKKwkgIF9NX2Rlc3Ryb3lfZGF0YV9hdXgoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IGVyYXNlKHExLCBxMikuCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZV9hdF9iZWdpbihpdGVyYXRvciBfX3BvcykKKyAgICAgIHsKKwlfTV9kZXN0cm95X2RhdGEoYmVnaW4oKSwgX19wb3MsIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJX01fZGVzdHJveV9ub2Rlcyh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0Ll9NX25vZGUsIF9fcG9zLl9NX25vZGUpOworCXRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX3BvczsKKyAgICAgIH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IGVyYXNlKHExLCBxMiksIHJlc2l6ZSgpLCBjbGVhcigpLCBfTV9hc3NpZ25fYXV4LAorICAgICAgLy8gX01fZmlsbF9hc3NpZ24sIG9wZXJhdG9yPS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2VyYXNlX2F0X2VuZChpdGVyYXRvciBfX3BvcykKKyAgICAgIHsKKwlfTV9kZXN0cm95X2RhdGEoX19wb3MsIGVuZCgpLCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCV9NX2Rlc3Ryb3lfbm9kZXMoX19wb3MuX01fbm9kZSArIDEsCisJCQkgdGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fbm9kZSArIDEpOworCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19wb3M7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBDYWxsZWQgYnkgcmVzaXplKHN6KS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlZmF1bHRfYXBwZW5kKHNpemVfdHlwZSBfX24pOworCisgICAgICBib29sCisgICAgICBfTV9zaHJpbmtfdG9fZml0KCk7CisjZW5kaWYKKworICAgICAgLy9AeworICAgICAgLy8vIE1lbW9yeS1oYW5kbGluZyBoZWxwZXJzIGZvciB0aGUgcHJldmlvdXMgaW50ZXJuYWwgaW5zZXJ0IGZ1bmN0aW9ucy4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX24pCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fdmFjYW5jaWVzID0gdGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9jdXIKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQuX01fZmlyc3Q7CisJaWYgKF9fbiA+IF9fdmFjYW5jaWVzKQorCSAgX01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KF9fbiAtIF9fdmFjYW5jaWVzKTsKKwlyZXR1cm4gdGhpcy0+X01faW1wbC5fTV9zdGFydCAtIGRpZmZlcmVuY2VfdHlwZShfX24pOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKHNpemVfdHlwZSBfX24pCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fdmFjYW5jaWVzID0gKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLl9NX2xhc3QKKwkJCQkgICAgICAgLSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9jdXIpIC0gMTsKKwlpZiAoX19uID4gX192YWNhbmNpZXMpCisJICBfTV9uZXdfZWxlbWVudHNfYXRfYmFjayhfX24gLSBfX3ZhY2FuY2llcyk7CisJcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX25ld19lbGVtZW50c19hdF9mcm9udChzaXplX3R5cGUgX19uZXdfZWxlbWVudHMpOworCisgICAgICB2b2lkCisgICAgICBfTV9uZXdfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdfZWxlbWVudHMpOworICAgICAgLy9AfQorCisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBNZW1vcnktaGFuZGxpbmcgaGVscGVycyBmb3IgdGhlIG1ham9yICVtYXAuCisgICAgICAgKgorICAgICAgICogIE1ha2VzIHN1cmUgdGhlIF9NX21hcCBoYXMgc3BhY2UgZm9yIG5ldyBub2Rlcy4gIERvZXMgbm90CisgICAgICAgKiAgYWN0dWFsbHkgYWRkIHRoZSBub2Rlcy4gIENhbiBpbnZhbGlkYXRlIF9NX21hcCBwb2ludGVycy4KKyAgICAgICAqICAoQW5kIGNvbnNlcXVlbnRseSwgJWRlcXVlIGl0ZXJhdG9ycy4pCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkKKyAgICAgIHsKKwlpZiAoX19ub2Rlc190b19hZGQgKyAxID4gdGhpcy0+X01faW1wbC5fTV9tYXBfc2l6ZQorCSAgICAtICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9ub2RlIC0gdGhpcy0+X01faW1wbC5fTV9tYXApKQorCSAgX01fcmVhbGxvY2F0ZV9tYXAoX19ub2Rlc190b19hZGQsIGZhbHNlKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkKKyAgICAgIHsKKwlpZiAoX19ub2Rlc190b19hZGQgPiBzaXplX3R5cGUodGhpcy0+X01faW1wbC5fTV9zdGFydC5fTV9ub2RlCisJCQkJICAgICAgIC0gdGhpcy0+X01faW1wbC5fTV9tYXApKQorCSAgX01fcmVhbGxvY2F0ZV9tYXAoX19ub2Rlc190b19hZGQsIHRydWUpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9yZWFsbG9jYXRlX21hcChzaXplX3R5cGUgX19ub2Rlc190b19hZGQsIGJvb2wgX19hZGRfYXRfZnJvbnQpOworICAgICAgLy9AfQorICAgIH07CisKKworICAvKioKKyAgICogIEBicmllZiAgRGVxdWUgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgX194ICBBICVkZXF1ZS4KKyAgICogIEBwYXJhbSAgX195ICBBICVkZXF1ZSBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIF9feC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIHRoZSBzaXplIGFuZCBlbGVtZW50cyBvZiB0aGUgZGVxdWVzIGFyZSBlcXVhbC4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBkZXF1ZXMuICBEZXF1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiB0aGVpciBzaXplcyBhcmUgZXF1YWwsCisgICAqICBhbmQgaWYgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb21wYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpCisgICAgICAgICAgICAgJiYgc3RkOjplcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgRGVxdWUgb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIF9feCAgQSAlZGVxdWUuCisgICAqICBAcGFyYW0gIF9feSAgQSAlZGVxdWUgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSBfX3guCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiBAYSB4IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSBfX3kuCisgICAqCisgICAqICBUaGlzIGlzIGEgdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBkZXF1ZXMuICBUaGUgZWxlbWVudHMgbXVzdCBiZSBjb21wYXJhYmxlIHdpdGggQGMgPC4KKyAgICoKKyAgICogIFNlZSBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKCkgZm9yIGhvdyB0aGUgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCisJCQkJCSAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I9PQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgLy8vIFNlZSBzdGQ6OmRlcXVlOjpzd2FwKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChkZXF1ZTxfVHAsX0FsbG9jPiYgX194LCBkZXF1ZTxfVHAsX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisjdW5kZWYgX0dMSUJDWFhfREVRVUVfQlVGX1NJWkUKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX1NUTF9ERVFVRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX2Z1bmN0aW9uLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1MjlkZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfZnVuY3Rpb24uaApAQCAtMCwwICsxLDczNCBAQAorLy8gRnVuY3RvciBpbXBsZW1lbnRhdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OAorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX2Z1bmN0aW9uLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtmdW5jdGlvbmFsfQorICovCisKKyNpZm5kZWYgX1NUTF9GVU5DVElPTl9ICisjZGVmaW5lIF9TVExfRlVOQ1RJT05fSCAxCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyAyMC4zLjEgYmFzZSBjbGFzc2VzCisgIC8qKiBAZGVmZ3JvdXAgZnVuY3RvcnMgRnVuY3Rpb24gT2JqZWN0cworICAgKiBAaW5ncm91cCB1dGlsaXRpZXMKKyAgICoKKyAgICogIEZ1bmN0aW9uIG9iamVjdHMsIG9yIEBlIGZ1bmN0b3JzLCBhcmUgb2JqZWN0cyB3aXRoIGFuIEBjIG9wZXJhdG9yKCkKKyAgICogIGRlZmluZWQgYW5kIGFjY2Vzc2libGUuICBUaGV5IGNhbiBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGFsZ29yaXRobQorICAgKiAgdGVtcGxhdGVzIGFuZCB1c2VkIGluIHBsYWNlIG9mIGEgZnVuY3Rpb24gcG9pbnRlci4gIE5vdCBvbmx5IGlzIHRoZQorICAgKiAgcmVzdWx0aW5nIGV4cHJlc3NpdmVuZXNzIG9mIHRoZSBsaWJyYXJ5IGluY3JlYXNlZCwgYnV0IHRoZSBnZW5lcmF0ZWQKKyAgICogIGNvZGUgY2FuIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gd2hhdCB5b3UgbWlnaHQgd3JpdGUgYnkgaGFuZC4gIFdoZW4gd2UKKyAgICogIHJlZmVyIHRvIEBhIGZ1bmN0b3JzLCB0aGVuLCBnZW5lcmFsbHkgd2UgaW5jbHVkZSBmdW5jdGlvbiBwb2ludGVycyBpbgorICAgKiAgdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGwuCisgICAqCisgICAqICBPZnRlbiwgZnVuY3RvcnMgYXJlIG9ubHkgY3JlYXRlZCBhcyB0ZW1wb3JhcmllcyBwYXNzZWQgdG8gYWxnb3JpdGhtCisgICAqICBjYWxscywgcmF0aGVyIHRoYW4gYmVpbmcgY3JlYXRlZCBhcyBuYW1lZCB2YXJpYWJsZXMuCisgICAqCisgICAqICBUd28gZXhhbXBsZXMgdGFrZW4gZnJvbSB0aGUgc3RhbmRhcmQgaXRzZWxmIGZvbGxvdy4gIFRvIHBlcmZvcm0gYQorICAgKiAgYnktZWxlbWVudCBhZGRpdGlvbiBvZiB0d28gdmVjdG9ycyBAYyBhIGFuZCBAYyBiIGNvbnRhaW5pbmcgQGMgZG91YmxlLAorICAgKiAgYW5kIHB1dCB0aGUgcmVzdWx0IGluIEBjIGEsIHVzZQorICAgKiAgXGNvZGUKKyAgICogIHRyYW5zZm9ybSAoYS5iZWdpbigpLCBhLmVuZCgpLCBiLmJlZ2luKCksIGEuYmVnaW4oKSwgcGx1czxkb3VibGU+KCkpOworICAgKiAgXGVuZGNvZGUKKyAgICogIFRvIG5lZ2F0ZSBldmVyeSBlbGVtZW50IGluIEBjIGEsIHVzZQorICAgKiAgXGNvZGUKKyAgICogIHRyYW5zZm9ybShhLmJlZ2luKCksIGEuZW5kKCksIGEuYmVnaW4oKSwgbmVnYXRlPGRvdWJsZT4oKSk7CisgICAqICBcZW5kY29kZQorICAgKiAgVGhlIGFkZGl0aW9uIGFuZCBuZWdhdGlvbiBmdW5jdGlvbnMgd2lsbCBiZSBpbmxpbmVkIGRpcmVjdGx5LgorICAgKgorICAgKiAgVGhlIHN0YW5kYXJkIGZ1bmN0b3JzIGFyZSBkZXJpdmVkIGZyb20gc3RydWN0cyBuYW1lZCBAYyB1bmFyeV9mdW5jdGlvbgorICAgKiAgYW5kIEBjIGJpbmFyeV9mdW5jdGlvbi4gIFRoZXNlIHR3byBjbGFzc2VzIGNvbnRhaW4gbm90aGluZyBidXQgdHlwZWRlZnMsCisgICAqICB0byBhaWQgaW4gZ2VuZXJpYyAodGVtcGxhdGUpIHByb2dyYW1taW5nLiAgSWYgeW91IHdyaXRlIHlvdXIgb3duCisgICAqICBmdW5jdG9ycywgeW91IG1pZ2h0IGNvbnNpZGVyIGRvaW5nIHRoZSBzYW1lLgorICAgKgorICAgKiAgQHsKKyAgICovCisgIC8qKgorICAgKiAgVGhpcyBpcyBvbmUgb2YgdGhlIEBsaW5rIGZ1bmN0b3JzIGZ1bmN0b3IgYmFzZSBjbGFzc2VzQGVuZGxpbmsuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnLCB0eXBlbmFtZSBfUmVzdWx0PgorICAgIHN0cnVjdCB1bmFyeV9mdW5jdGlvbgorICAgIHsKKyAgICAgIC8vLyBAYyBhcmd1bWVudF90eXBlIGlzIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudAorICAgICAgdHlwZWRlZiBfQXJnIAlhcmd1bWVudF90eXBlOyAgIAorCisgICAgICAvLy8gQGMgcmVzdWx0X3R5cGUgaXMgdGhlIHJldHVybiB0eXBlCisgICAgICB0eXBlZGVmIF9SZXN1bHQgCXJlc3VsdF90eXBlOyAgCisgICAgfTsKKworICAvKioKKyAgICogIFRoaXMgaXMgb25lIG9mIHRoZSBAbGluayBmdW5jdG9ycyBmdW5jdG9yIGJhc2UgY2xhc3Nlc0BlbmRsaW5rLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZzEsIHR5cGVuYW1lIF9BcmcyLCB0eXBlbmFtZSBfUmVzdWx0PgorICAgIHN0cnVjdCBiaW5hcnlfZnVuY3Rpb24KKyAgICB7CisgICAgICAvLy8gQGMgZmlyc3RfYXJndW1lbnRfdHlwZSBpcyB0aGUgdHlwZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgIHR5cGVkZWYgX0FyZzEgCWZpcnN0X2FyZ3VtZW50X3R5cGU7IAorCisgICAgICAvLy8gQGMgc2Vjb25kX2FyZ3VtZW50X3R5cGUgaXMgdGhlIHR5cGUgb2YgdGhlIHNlY29uZCBhcmd1bWVudAorICAgICAgdHlwZWRlZiBfQXJnMiAJc2Vjb25kX2FyZ3VtZW50X3R5cGU7CisKKyAgICAgIC8vLyBAYyByZXN1bHRfdHlwZSBpcyB0aGUgcmV0dXJuIHR5cGUKKyAgICAgIHR5cGVkZWYgX1Jlc3VsdCAJcmVzdWx0X3R5cGU7CisgICAgfTsKKyAgLyoqIEB9ICAqLworCisgIC8vIDIwLjMuMiBhcml0aG1ldGljCisgIC8qKiBAZGVmZ3JvdXAgYXJpdGhtZXRpY19mdW5jdG9ycyBBcml0aG1ldGljIENsYXNzZXMKKyAgICogQGluZ3JvdXAgZnVuY3RvcnMKKyAgICoKKyAgICogIEJlY2F1c2UgYmFzaWMgbWF0aCBvZnRlbiBuZWVkcyB0byBiZSBkb25lIGR1cmluZyBhbiBhbGdvcml0aG0sCisgICAqICB0aGUgbGlicmFyeSBwcm92aWRlcyBmdW5jdG9ycyBmb3IgdGhvc2Ugb3BlcmF0aW9ucy4gIFNlZSB0aGUKKyAgICogIGRvY3VtZW50YXRpb24gZm9yIEBsaW5rIGZ1bmN0b3JzIHRoZSBiYXNlIGNsYXNzZXNAZW5kbGluaworICAgKiAgZm9yIGV4YW1wbGVzIG9mIHRoZWlyIHVzZS4KKyAgICoKKyAgICogIEB7CisgICAqLworICAvLy8gT25lIG9mIHRoZSBAbGluayBhcml0aG1ldGljX2Z1bmN0b3JzIG1hdGggZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgX1RwPgorICAgIHsKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggKyBfX3k7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGFyaXRobWV0aWNfZnVuY3RvcnMgbWF0aCBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgX1RwPgorICAgIHsKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggLSBfX3k7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGFyaXRobWV0aWNfZnVuY3RvcnMgbWF0aCBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBfVHA+CisgICAgeworICAgICAgX1RwCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCAqIF9feTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgYXJpdGhtZXRpY19mdW5jdG9ycyBtYXRoIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIF9UcD4KKyAgICB7CisgICAgICBfVHAKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IC8gX195OyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBhcml0aG1ldGljX2Z1bmN0b3JzIG1hdGggZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgX1RwPgorICAgIHsKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggJSBfX3k7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGFyaXRobWV0aWNfZnVuY3RvcnMgbWF0aCBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsIF9UcD4KKyAgICB7CisgICAgICBfVHAKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiAtX194OyB9CisgICAgfTsKKyAgLyoqIEB9ICAqLworCisgIC8vIDIwLjMuMyBjb21wYXJpc29ucworICAvKiogQGRlZmdyb3VwIGNvbXBhcmlzb25fZnVuY3RvcnMgQ29tcGFyaXNvbiBDbGFzc2VzCisgICAqIEBpbmdyb3VwIGZ1bmN0b3JzCisgICAqCisgICAqICBUaGUgbGlicmFyeSBwcm92aWRlcyBzaXggd3JhcHBlciBmdW5jdG9ycyBmb3IgYWxsIHRoZSBiYXNpYyBjb21wYXJpc29ucworICAgKiAgaW4gQysrLCBsaWtlIEBjIDwuCisgICAqCisgICAqICBAeworICAgKi8KKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgY29tcGFyaXNvbl9mdW5jdG9ycyBjb21wYXJpc29uIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBib29sPgorICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ID09IF9feTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgY29tcGFyaXNvbl9mdW5jdG9ycyBjb21wYXJpc29uIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KKyAgICB9OworCisgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGNvbXBhcmlzb25fZnVuY3RvcnMgY29tcGFyaXNvbiBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBib29sPgorICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ID4gX195OyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBjb21wYXJpc29uX2Z1bmN0b3JzIGNvbXBhcmlzb24gZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA8IF9feTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgY29tcGFyaXNvbl9mdW5jdG9ycyBjb21wYXJpc29uIGZ1bmN0b3JzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIGJvb2w+CisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggPj0gX195OyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBjb21wYXJpc29uX2Z1bmN0b3JzIGNvbXBhcmlzb24gZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA8PSBfX3k7IH0KKyAgICB9OworICAvKiogQH0gICovCisKKyAgLy8gMjAuMy40IGxvZ2ljYWwgb3BlcmF0aW9ucworICAvKiogQGRlZmdyb3VwIGxvZ2ljYWxfZnVuY3RvcnMgQm9vbGVhbiBPcGVyYXRpb25zIENsYXNzZXMKKyAgICogQGluZ3JvdXAgZnVuY3RvcnMKKyAgICoKKyAgICogIEhlcmUgYXJlIHdyYXBwZXIgZnVuY3RvcnMgZm9yIEJvb2xlYW4gb3BlcmF0aW9uczogQGMgJiYsIEBjIHx8LAorICAgKiAgYW5kIEBjICEuCisgICAqCisgICAqICBAeworICAgKi8KKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbG9naWNhbF9mdW5jdG9ycyBCb29sZWFuIG9wZXJhdGlvbnMgZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfVHAsIGJvb2w+CisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggJiYgX195OyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBsb2dpY2FsX2Z1bmN0b3JzIEJvb2xlYW4gb3BlcmF0aW9ucyBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBib29sPgorICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IHx8IF9feTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbG9naWNhbF9mdW5jdG9ycyBCb29sZWFuIG9wZXJhdGlvbnMgZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsIGJvb2w+CisgICAgeworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICFfX3g7IH0KKyAgICB9OworICAvKiogQH0gICovCisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBEUiA2NjAuIE1pc3NpbmcgQml0d2lzZSBPcGVyYXRpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGJpdF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBfVHA+CisgICAgeworICAgICAgX1RwCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCAmIF9feTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBiaXRfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCwgX1RwLCBfVHA+CisgICAgeworICAgICAgX1RwCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCB8IF9feTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBiaXRfeG9yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsIF9UcCwgX1RwPgorICAgIHsKKyAgICAgIF9UcAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggXiBfX3k7IH0KKyAgICB9OworCisgIC8vIDIwLjMuNSBuZWdhdG9ycworICAvKiogQGRlZmdyb3VwIG5lZ2F0b3JzIE5lZ2F0b3JzCisgICAqIEBpbmdyb3VwIGZ1bmN0b3JzCisgICAqCisgICAqICBUaGUgZnVuY3Rpb25zIEBjIG5vdDEgYW5kIEBjIG5vdDIgZWFjaCB0YWtlIGEgcHJlZGljYXRlIGZ1bmN0b3IKKyAgICogIGFuZCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgQGMgdW5hcnlfbmVnYXRlIG9yCisgICAqICBAYyBiaW5hcnlfbmVnYXRlLCByZXNwZWN0aXZlbHkuICBUaGVzZSBjbGFzc2VzIGFyZSBmdW5jdG9ycyB3aG9zZQorICAgKiAgQGMgb3BlcmF0b3IoKSBwZXJmb3JtcyB0aGUgc3RvcmVkIHByZWRpY2F0ZSBmdW5jdGlvbiBhbmQgdGhlbiByZXR1cm5zCisgICAqICB0aGUgbmVnYXRpb24gb2YgdGhlIHJlc3VsdC4KKyAgICoKKyAgICogIEZvciBleGFtcGxlLCBnaXZlbiBhIHZlY3RvciBvZiBpbnRlZ2VycyBhbmQgYSB0cml2aWFsIHByZWRpY2F0ZSwKKyAgICogIFxjb2RlCisgICAqICBzdHJ1Y3QgSW50R3JlYXRlclRoYW5UaHJlZQorICAgKiAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPGludCwgYm9vbD4KKyAgICogIHsKKyAgICogICAgICBib29sIG9wZXJhdG9yKCkgKGludCB4KSB7IHJldHVybiB4ID4gMzsgfQorICAgKiAgfTsKKyAgICoKKyAgICogIHN0ZDo6ZmluZF9pZiAodi5iZWdpbigpLCB2LmVuZCgpLCBub3QxKEludEdyZWF0ZXJUaGFuVGhyZWUoKSkpOworICAgKiAgXGVuZGNvZGUKKyAgICogIFRoZSBjYWxsIHRvIEBjIGZpbmRfaWYgd2lsbCBsb2NhdGUgdGhlIGZpcnN0IGluZGV4IChpKSBvZiBAYyB2IGZvciB3aGljaAorICAgKiAgPGNvZGU+ISh2W2ldID4gMyk8L2NvZGU+IGlzIHRydWUuCisgICAqCisgICAqICBUaGUgbm90MS91bmFyeV9uZWdhdGUgY29tYmluYXRpb24gd29ya3Mgb24gcHJlZGljYXRlcyB0YWtpbmcgYSBzaW5nbGUKKyAgICogIGFyZ3VtZW50LiAgVGhlIG5vdDIvYmluYXJ5X25lZ2F0ZSBjb21iaW5hdGlvbiB3b3JrcyBvbiBwcmVkaWNhdGVzIHdoaWNoCisgICAqICB0YWtlIHR3byBhcmd1bWVudHMuCisgICAqCisgICAqICBAeworICAgKi8KKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbmVnYXRvcnMgbmVnYXRpb24gZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBjbGFzcyB1bmFyeV9uZWdhdGUKKyAgICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfUHJlZGljYXRlIF9NX3ByZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkgeyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gIV9NX3ByZWQoX194KTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbmVnYXRvcnMgbmVnYXRpb24gZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+CisgICAgbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCisgICAgeyByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7IH0KKworICAvLy8gT25lIG9mIHRoZSBAbGluayBuZWdhdG9ycyBuZWdhdGlvbiBmdW5jdG9yc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGNsYXNzIGJpbmFyeV9uZWdhdGUKKyAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKKwkJCSAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsIGJvb2w+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9QcmVkaWNhdGUgX01fcHJlZDsKKworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0CisgICAgICBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkgeyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAorCQkgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbmVnYXRvcnMgbmVnYXRpb24gZnVuY3RvcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgorICAgIG5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQorICAgIHsgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsgfQorICAvKiogQH0gICovCisKKyAgLy8gMjAuMy43IGFkYXB0b3JzIHBvaW50ZXJzIGZ1bmN0aW9ucworICAvKiogQGRlZmdyb3VwIHBvaW50ZXJfYWRhcHRvcnMgQWRhcHRvcnMgZm9yIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucworICAgKiBAaW5ncm91cCBmdW5jdG9ycworICAgKgorICAgKiAgVGhlIGFkdmFudGFnZSBvZiBmdW5jdGlvbiBvYmplY3RzIG92ZXIgcG9pbnRlcnMgdG8gZnVuY3Rpb25zIGlzIHRoYXQKKyAgICogIHRoZSBvYmplY3RzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGRlY2xhcmUgbmVzdGVkIHR5cGVkZWZzIGRlc2NyaWJpbmcKKyAgICogIHRoZWlyIGFyZ3VtZW50IGFuZCByZXN1bHQgdHlwZXMgd2l0aCB1bmlmb3JtIG5hbWVzIChlLmcuLCBAYyByZXN1bHRfdHlwZQorICAgKiAgZnJvbSB0aGUgYmFzZSBjbGFzc2VzIEBjIHVuYXJ5X2Z1bmN0aW9uIGFuZCBAYyBiaW5hcnlfZnVuY3Rpb24pLgorICAgKiAgU29tZXRpbWVzIHRob3NlIHR5cGVkZWZzIGFyZSByZXF1aXJlZCwgbm90IGp1c3Qgb3B0aW9uYWwuCisgICAqCisgICAqICBBZGFwdG9ycyBhcmUgcHJvdmlkZWQgdG8gdHVybiBwb2ludGVycyB0byB1bmFyeSAoc2luZ2xlLWFyZ3VtZW50KSBhbmQKKyAgICogIGJpbmFyeSAoZG91YmxlLWFyZ3VtZW50KSBmdW5jdGlvbnMgaW50byBmdW5jdGlvbiBvYmplY3RzLiAgVGhlCisgICAqICBsb25nLXdpbmRlZCBmdW5jdG9yIEBjIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gaXMgY29uc3RydWN0ZWQgd2l0aCBhCisgICAqICBmdW5jdGlvbiBwb2ludGVyIEBjIGYsIGFuZCBpdHMgQGMgb3BlcmF0b3IoKSBjYWxsZWQgd2l0aCBhcmd1bWVudCBAYyB4CisgICAqICByZXR1cm5zIEBjIGYoeCkuICBUaGUgZnVuY3RvciBAYyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiBkb2VzIHRoZSBzYW1lCisgICAqICB0aGluZywgYnV0IHdpdGggYSBkb3VibGUtYXJndW1lbnQgQGMgZiBhbmQgQGMgb3BlcmF0b3IoKS4KKyAgICoKKyAgICogIFRoZSBmdW5jdGlvbiBAYyBwdHJfZnVuIHRha2VzIGEgcG9pbnRlci10by1mdW5jdGlvbiBAYyBmIGFuZCBjb25zdHJ1Y3RzCisgICAqICBhbiBpbnN0YW5jZSBvZiB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rvci4KKyAgICoKKyAgICogIEB7CisgICAqLworICAvLy8gT25lIG9mIHRoZSBAbGluayBwb2ludGVyX2FkYXB0b3JzIGFkYXB0b3JzIGZvciBmdW5jdGlvbiBwb2ludGVyc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnLCB0eXBlbmFtZSBfUmVzdWx0PgorICAgIGNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CisKKyAgICBwdWJsaWM6CisgICAgICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQorICAgICAgOiBfTV9wdHIoX194KSB7IH0KKworICAgICAgX1Jlc3VsdAorICAgICAgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBwb2ludGVyX2FkYXB0b3JzIGFkYXB0b3JzIGZvciBmdW5jdGlvbiBwb2ludGVyc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnLCB0eXBlbmFtZSBfUmVzdWx0PgorICAgIGlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+CisgICAgcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKKyAgICB7IHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7IH0KKworICAvLy8gT25lIG9mIHRoZSBAbGluayBwb2ludGVyX2FkYXB0b3JzIGFkYXB0b3JzIGZvciBmdW5jdGlvbiBwb2ludGVyc0BlbmRsaW5rLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnMSwgdHlwZW5hbWUgX0FyZzIsIHR5cGVuYW1lIF9SZXN1bHQ+CisgICAgY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24KKyAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfUmVzdWx0PgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOworCisgICAgcHVibGljOgorICAgICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCisgICAgICA6IF9NX3B0cihfX3gpIHsgfQorCisgICAgICBfUmVzdWx0CisgICAgICBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcHRyKF9feCwgX195KTsgfQorICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgcG9pbnRlcl9hZGFwdG9ycyBhZGFwdG9ycyBmb3IgZnVuY3Rpb24gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZzEsIHR5cGVuYW1lIF9BcmcyLCB0eXBlbmFtZSBfUmVzdWx0PgorICAgIGlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+CisgICAgcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQorICAgIHsgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX1Jlc3VsdD4oX194KTsgfQorICAvKiogQH0gICovCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfSWRlbnRpdHkKKyAgICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgorICAgIHsKKyAgICAgIF9UcCYKKyAgICAgIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKworICAgICAgY29uc3QgX1RwJgorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhaXI+CisgICAgc3RydWN0IF9TZWxlY3Qxc3QKKyAgICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+CisgICAgeworICAgICAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmCisgICAgICBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3guZmlyc3Q7IH0KKworICAgICAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3guZmlyc3Q7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyMj4KKyAgICAgICAgdHlwZW5hbWUgX1BhaXIyOjpmaXJzdF90eXBlJgorICAgICAgICBvcGVyYXRvcigpKF9QYWlyMiYgX194KSBjb25zdAorICAgICAgICB7IHJldHVybiBfX3guZmlyc3Q7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhaXIyPgorICAgICAgICBjb25zdCB0eXBlbmFtZSBfUGFpcjI6OmZpcnN0X3R5cGUmCisgICAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1BhaXIyJiBfX3gpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIF9feC5maXJzdDsgfQorI2VuZGlmCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpcj4KKyAgICBzdHJ1Y3QgX1NlbGVjdDJuZAorICAgIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CisgICAgeworICAgICAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJgorICAgICAgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX194LnNlY29uZDsgfQorCisgICAgICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3guc2Vjb25kOyB9CisgICAgfTsKKworICAvLyAyMC4zLjggYWRhcHRvcnMgcG9pbnRlcnMgbWVtYmVycworICAvKiogQGRlZmdyb3VwIG1lbW9yeV9hZGFwdG9ycyBBZGFwdG9ycyBmb3IgcG9pbnRlcnMgdG8gbWVtYmVycworICAgKiBAaW5ncm91cCBmdW5jdG9ycworICAgKgorICAgKiAgVGhlcmUgYXJlIGEgdG90YWwgb2YgOCA9IDJeMyBmdW5jdGlvbiBvYmplY3RzIGluIHRoaXMgZmFtaWx5LgorICAgKiAgICgxKSBNZW1iZXIgZnVuY3Rpb25zIHRha2luZyBubyBhcmd1bWVudHMgdnMgbWVtYmVyIGZ1bmN0aW9ucyB0YWtpbmcKKyAgICogICAgICAgIG9uZSBhcmd1bWVudC4KKyAgICogICAoMikgQ2FsbCB0aHJvdWdoIHBvaW50ZXIgdnMgY2FsbCB0aHJvdWdoIHJlZmVyZW5jZS4KKyAgICogICAoMykgQ29uc3QgdnMgbm9uLWNvbnN0IG1lbWJlciBmdW5jdGlvbi4KKyAgICoKKyAgICogIEFsbCBvZiB0aGlzIGNvbXBsZXhpdHkgaXMgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdHMgdGhlbXNlbHZlcy4gIFlvdSBjYW4KKyAgICogICBpZ25vcmUgaXQgYnkgdXNpbmcgdGhlIGhlbHBlciBmdW5jdGlvbiBtZW1fZnVuIGFuZCBtZW1fZnVuX3JlZiwKKyAgICogICB3aGljaCBjcmVhdGUgd2hpY2hldmVyIHR5cGUgb2YgYWRhcHRvciBpcyBhcHByb3ByaWF0ZS4KKyAgICoKKyAgICogIEB7CisgICAqLworICAvLy8gT25lIG9mIHRoZSBAbGluayBtZW1vcnlfYWRhcHRvcnMgYWRhcHRvcnMgZm9yIG1lbWJlcgorICAvLy8gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpCisgICAgICA6IF9NX2YoX19wZikgeyB9CisKKyAgICAgIF9SZXQKKyAgICAgIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0CisgICAgICB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKCk7CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBtZW1vcnlfYWRhcHRvcnMgYWRhcHRvcnMgZm9yIG1lbWJlcgorICAvLy8gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpCisgICAgICA6IF9NX2YoX19wZikgeyB9CisKKyAgICAgIF9SZXQKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0CisgICAgICB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7CisgICAgfTsKKworICAvLy8gT25lIG9mIHRoZSBAbGluayBtZW1vcnlfYWRhcHRvcnMgYWRhcHRvcnMgZm9yIG1lbWJlcgorICAvLy8gcG9pbnRlcnNAZW5kbGluay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKQorICAgICAgOiBfTV9mKF9fcGYpIHsgfQorCisgICAgICBfUmV0CisgICAgICBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKCk7CisgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCwgX1JldD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkKKyAgICAgIDogX01fZihfX3BmKSB7IH0KKworICAgICAgX1JldAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0OworICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLCBfQXJnLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkKKyAgICAgIDogX01fZihfX3BmKSB7IH0KKworICAgICAgX1JldAorICAgICAgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOworICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLCBfQXJnLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkKKyAgICAgIDogX01fZihfX3BmKSB7IH0KKworICAgICAgX1JldAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0OworICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfQXJnLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpCisgICAgICA6IF9NX2YoX19wZikgeyB9CisKKyAgICAgIF9SZXQKKyAgICAgIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOworICAgIH07CisKKyAgLy8vIE9uZSBvZiB0aGUgQGxpbmsgbWVtb3J5X2FkYXB0b3JzIGFkYXB0b3JzIGZvciBtZW1iZXIKKyAgLy8vIHBvaW50ZXJzQGVuZGxpbmsuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLCBfQXJnLCBfUmV0PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpCisgICAgICA6IF9NX2YoX19wZikgeyB9CisKKyAgICAgIF9SZXQKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0OworICAgIH07CisKKyAgLy8gTWVtX2Z1biBhZGFwdG9yIGhlbHBlciBmdW5jdGlvbnMuICBUaGVyZSBhcmUgb25seSB0d286CisgIC8vIG1lbV9mdW4gYW5kIG1lbV9mdW5fcmVmLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmV0LCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIG1lbV9mdW5fdDxfUmV0LCBfVHA+CisgICAgbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCisgICAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsIF9UcD4oX19mKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsIF9UcD4KKyAgICBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKKyAgICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCwgX1RwPihfX2YpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsIF9UcD4KKyAgICBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpCisgICAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LCBfVHA+KF9fZik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmV0LCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCwgX1RwPgorICAgIG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKKyAgICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsIF9UcD4oX19mKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBpbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LCBfVHAsIF9Bcmc+CisgICAgbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQorICAgIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCwgX1RwLCBfQXJnPihfX2YpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JldCwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJnPgorICAgIGlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsIF9UcCwgX0FyZz4KKyAgICBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCisgICAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LCBfVHAsIF9Bcmc+KF9fZik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmV0LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Bcmc+CisgICAgaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsIF9UcCwgX0FyZz4KKyAgICBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQorICAgIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsIF9UcCwgX0FyZz4oX19mKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBpbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCwgX1RwLCBfQXJnPgorICAgIG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCisgICAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCwgX1RwLCBfQXJnPihfX2YpOyB9CisKKyAgLyoqIEB9ICAqLworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNpZiAoX19jcGx1c3BsdXMgPCAyMDExMDNMKSB8fCBfR0xJQkNYWF9VU0VfREVQUkVDQVRFRAorIyBpbmNsdWRlIDxiYWNrd2FyZC9iaW5kZXJzLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9TVExfRlVOQ1RJT05fSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9oZWFwLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX2hlYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDdhOGNmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9oZWFwLmgKQEAgLTAsMCArMSw1OTIgQEAKKy8vIEhlYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX2hlYXAuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3F1ZXVlfQorICovCisKKyNpZm5kZWYgX1NUTF9IRUFQX0gKKyNkZWZpbmUgX1NUTF9IRUFQX0ggMQorCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgaGVhcF9hbGdvcml0aG1zIEhlYXAKKyAgICogQGluZ3JvdXAgc29ydGluZ19hbGdvcml0aG1zCisgICAqLworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIF9EaXN0YW5jZQorICAgIF9faXNfaGVhcF91bnRpbChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKKyAgICB7CisgICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOworICAgICAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkKKwl7CisJICBpZiAoX19maXJzdFtfX3BhcmVudF0gPCBfX2ZpcnN0W19fY2hpbGRdKQorCSAgICByZXR1cm4gX19jaGlsZDsKKwkgIGlmICgoX19jaGlsZCAmIDEpID09IDApCisJICAgICsrX19wYXJlbnQ7CisJfQorICAgICAgcmV0dXJuIF9fbjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0Rpc3RhbmNlCisgICAgX19pc19oZWFwX3VudGlsKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19uLAorCQkgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CisgICAgICBmb3IgKF9EaXN0YW5jZSBfX2NoaWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytfX2NoaWxkKQorCXsKKwkgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmlyc3RbX19jaGlsZF0pKQorCSAgICByZXR1cm4gX19jaGlsZDsKKwkgIGlmICgoX19jaGlsZCAmIDEpID09IDApCisJICAgICsrX19wYXJlbnQ7CisJfQorICAgICAgcmV0dXJuIF9fbjsKKyAgICB9CisKKyAgLy8gX19pc19oZWFwLCBhIHByZWRpY2F0ZSB0ZXN0aW5nIHdoZXRoZXIgb3Igbm90IGEgcmFuZ2UgaXMgYSBoZWFwLgorICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFuIGV4dGVuc2lvbiwgbm90IHBhcnQgb2YgdGhlIEMrKyBzdGFuZGFyZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCisgICAgeyByZXR1cm4gc3RkOjpfX2lzX2hlYXBfdW50aWwoX19maXJzdCwgX19uKSA9PSBfX247IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlLAorCSAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UgX19uKQorICAgIHsgcmV0dXJuIHN0ZDo6X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIF9fbiwgX19jb21wKSA9PSBfX247IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeyByZXR1cm4gc3RkOjpfX2lzX2hlYXAoX19maXJzdCwgc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsgcmV0dXJuIHN0ZDo6X19pc19oZWFwKF9fZmlyc3QsIF9fY29tcCwgc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpKTsgfQorCisgIC8vIEhlYXAtbWFuaXB1bGF0aW9uIGZ1bmN0aW9uczogcHVzaF9oZWFwLCBwb3BfaGVhcCwgbWFrZV9oZWFwLCBzb3J0X2hlYXAsCisgIC8vICsgaXNfaGVhcCBhbmQgaXNfaGVhcF91bnRpbCBpbiBDKysweC4KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKKwkJX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCisgICAgeworICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOworICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKQorCXsKKwkgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKTsKKwkgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CisJICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKKwl9CisgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUHVzaCBhbiBlbGVtZW50IG9udG8gYSBoZWFwLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBFbmQgb2YgaGVhcCArIGVsZW1lbnQuCisgICAqICBAaW5ncm91cCBoZWFwX2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIHB1c2hlcyB0aGUgZWxlbWVudCBhdCBsYXN0LTEgb250byB0aGUgdmFsaWQgaGVhcAorICAgKiAgb3ZlciB0aGUgcmFuZ2UgW19fZmlyc3QsX19sYXN0LTEpLiAgQWZ0ZXIgY29tcGxldGlvbiwKKyAgICogIFtfX2ZpcnN0LF9fbGFzdCkgaXMgYSB2YWxpZCBoZWFwLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCSAgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCSAgX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8X1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEpOworCisgICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSBfR0xJQkNYWF9NT1ZFKCooX19sYXN0IC0gMSkpOworICAgICAgc3RkOjpfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLAorCQkgICAgICAgX0Rpc3RhbmNlVHlwZSgwKSwgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCisJCV9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKKyAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXgKKwkgICAgICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKQorCXsKKwkgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKTsKKwkgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CisJICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKKwl9CisgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUHVzaCBhbiBlbGVtZW50IG9udG8gYSBoZWFwIHVzaW5nIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgaGVhcC4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgRW5kIG9mIGhlYXAgKyBlbGVtZW50LgorICAgKiAgQHBhcmFtICBfX2NvbXAgICBDb21wYXJpc29uIGZ1bmN0b3IuCisgICAqICBAaW5ncm91cCBoZWFwX2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIHB1c2hlcyB0aGUgZWxlbWVudCBhdCBfX2xhc3QtMSBvbnRvIHRoZSB2YWxpZAorICAgKiAgaGVhcCBvdmVyIHRoZSByYW5nZSBbX19maXJzdCxfX2xhc3QtMSkuICBBZnRlciBjb21wbGV0aW9uLAorICAgKiAgW19fZmlyc3QsX19sYXN0KSBpcyBhIHZhbGlkIGhlYXAuICBDb21wYXJlIG9wZXJhdGlvbnMgYXJlCisgICAqICBwZXJmb3JtZWQgdXNpbmcgY29tcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCSAgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCSAgX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwX3ByZWQoX19maXJzdCwgX19sYXN0IC0gMSwgX19jb21wKTsKKworICAgICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRSgqKF9fbGFzdCAtIDEpKTsKKyAgICAgIHN0ZDo6X19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwKKwkJICAgICAgIF9EaXN0YW5jZVR5cGUoMCksIF9HTElCQ1hYX01PVkUoX192YWx1ZSksIF9fY29tcCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKKwkJICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQorICAgIHsKKyAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CisgICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IF9faG9sZUluZGV4OworICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCAoX19sZW4gLSAxKSAvIDIpCisJeworCSAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOworCSAgaWYgKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCisJICAgIF9fc2Vjb25kQ2hpbGQtLTsKKwkgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkpOworCSAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOworCX0KKyAgICAgIGlmICgoX19sZW4gJiAxKSA9PSAwICYmIF9fc2Vjb25kQ2hpbGQgPT0gKF9fbGVuIC0gMikgLyAyKQorCXsKKwkgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKKwkgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0CisJCQkJCQkgICAgICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpOworCSAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKKwl9CisgICAgICBzdGQ6Ol9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LAorCQkgICAgICAgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCV9EaXN0YW5jZVR5cGU7CisKKyAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9IF9HTElCQ1hYX01PVkUoKl9fcmVzdWx0KTsKKyAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOworICAgICAgc3RkOjpfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCisJCQkgX0Rpc3RhbmNlVHlwZShfX2xhc3QgLSBfX2ZpcnN0KSwKKwkJCSBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFBvcCBhbiBlbGVtZW50IG9mZiBhIGhlYXAuCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIFN0YXJ0IG9mIGhlYXAuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiBoZWFwLgorICAgKiAgQHByZSAgICBbX19maXJzdCwgX19sYXN0KSBpcyBhIHZhbGlkLCBub24tZW1wdHkgcmFuZ2UuCisgICAqICBAaW5ncm91cCBoZWFwX2FsZ29yaXRobXMKKyAgICoKKyAgICogIFRoaXMgb3BlcmF0aW9uIHBvcHMgdGhlIHRvcCBvZiB0aGUgaGVhcC4gIFRoZSBlbGVtZW50cyBfX2ZpcnN0CisgICAqICBhbmQgX19sYXN0LTEgYXJlIHN3YXBwZWQgYW5kIFtfX2ZpcnN0LF9fbGFzdC0xKSBpcyBtYWRlIGludG8gYQorICAgKiAgaGVhcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX25vbl9lbXB0eV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaGVhcChfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IDEpCisJeworCSAgLS1fX2xhc3Q7CisJICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2xhc3QpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsCisJICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAorCQkgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBjb25zdCBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OworICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSBfX2hvbGVJbmRleDsKKyAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgKF9fbGVuIC0gMSkgLyAyKQorCXsKKwkgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKKwkgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksCisJCSAgICAgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQorCSAgICBfX3NlY29uZENoaWxkLS07CisJICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfR0xJQkNYWF9NT1ZFKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpKTsKKwkgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKKwl9CisgICAgICBpZiAoKF9fbGVuICYgMSkgPT0gMCAmJiBfX3NlY29uZENoaWxkID09IChfX2xlbiAtIDIpIC8gMikKKwl7CisJICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CisJICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfR0xJQkNYWF9NT1ZFKCooX19maXJzdAorCQkJCQkJICAgICArIChfX3NlY29uZENoaWxkIC0gMSkpKTsKKwkgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CisJfQorICAgICAgc3RkOjpfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgCisJCSAgICAgICBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLCBfX2NvbXApOyAgICAgIAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSB2b2lkCisgICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlzdGFuY2VUeXBlOworCisgICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSBfR0xJQkNYWF9NT1ZFKCpfX3Jlc3VsdCk7CisgICAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0KTsKKyAgICAgIHN0ZDo6X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAorCQkJIF9EaXN0YW5jZVR5cGUoX19sYXN0IC0gX19maXJzdCksCisJCQkgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSwgX19jb21wKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFBvcCBhbiBlbGVtZW50IG9mZiBhIGhlYXAgdXNpbmcgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBFbmQgb2YgaGVhcC4KKyAgICogIEBwYXJhbSAgX19jb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yIHRvIHVzZS4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gcG9wcyB0aGUgdG9wIG9mIHRoZSBoZWFwLiAgVGhlIGVsZW1lbnRzIF9fZmlyc3QKKyAgICogIGFuZCBfX2xhc3QtMSBhcmUgc3dhcHBlZCBhbmQgW19fZmlyc3QsX19sYXN0LTEpIGlzIG1hZGUgaW50byBhCisgICAqICBoZWFwLiAgQ29tcGFyaXNvbnMgYXJlIG1hZGUgdXNpbmcgY29tcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfbm9uX2VtcHR5X3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaGVhcF9wcmVkKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQorCXsKKwkgIC0tX19sYXN0OworCSAgc3RkOjpfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOworCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENvbnN0cnVjdCBhIGhlYXAgb3ZlciBhIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBFbmQgb2YgaGVhcC4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gbWFrZXMgdGhlIGVsZW1lbnRzIGluIFtfX2ZpcnN0LF9fbGFzdCkgaW50byBhIGhlYXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkgIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwkgIF9EaXN0YW5jZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikKKwlyZXR1cm47CisKKyAgICAgIGNvbnN0IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OworICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpIC8gMjsKKyAgICAgIHdoaWxlICh0cnVlKQorCXsKKwkgIF9WYWx1ZVR5cGUgX192YWx1ZSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKTsKKwkgIHN0ZDo6X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9HTElCQ1hYX01PVkUoX192YWx1ZSkpOworCSAgaWYgKF9fcGFyZW50ID09IDApCisJICAgIHJldHVybjsKKwkgIF9fcGFyZW50LS07CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgQ29uc3RydWN0IGEgaGVhcCBvdmVyIGEgcmFuZ2UgdXNpbmcgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBFbmQgb2YgaGVhcC4KKyAgICogIEBwYXJhbSAgX19jb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yIHRvIHVzZS4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gbWFrZXMgdGhlIGVsZW1lbnRzIGluIFtfX2ZpcnN0LF9fbGFzdCkgaW50byBhIGhlYXAuCisgICAqICBDb21wYXJpc29ucyBhcmUgbWFkZSB1c2luZyBfX2NvbXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCSAgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorCSAgX0Rpc3RhbmNlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKQorCXJldHVybjsKKworICAgICAgY29uc3QgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikgLyAyOworICAgICAgd2hpbGUgKHRydWUpCisJeworCSAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpOworCSAgc3RkOjpfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSwKKwkJCSAgICAgX19jb21wKTsKKwkgIGlmIChfX3BhcmVudCA9PSAwKQorCSAgICByZXR1cm47CisJICBfX3BhcmVudC0tOworCX0KKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFNvcnQgYSBoZWFwLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBFbmQgb2YgaGVhcC4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gc29ydHMgdGhlIHZhbGlkIGhlYXAgaW4gdGhlIHJhbmdlIFtfX2ZpcnN0LF9fbGFzdCkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICB2b2lkCisgICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX011dGFibGVfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKKwl7CisJICAtLV9fbGFzdDsKKwkgIHN0ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CisJfQorICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgU29ydCBhIGhlYXAgdXNpbmcgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiBoZWFwLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBFbmQgb2YgaGVhcC4KKyAgICogIEBwYXJhbSAgX19jb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yIHRvIHVzZS4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gc29ydHMgdGhlIHZhbGlkIGhlYXAgaW4gdGhlIHJhbmdlIFtfX2ZpcnN0LF9fbGFzdCkuCisgICAqICBDb21wYXJpc29ucyBhcmUgbWFkZSB1c2luZyBfX2NvbXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworCisgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCisJeworCSAgLS1fX2xhc3Q7CisJICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CisJfQorICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgLyoqCisgICAqICBAYnJpZWYgIFNlYXJjaCB0aGUgZW5kIG9mIGEgaGVhcC4KKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IG5vdCBpbiB0aGUgaGVhcC4KKyAgICogIEBpbmdyb3VwIGhlYXBfYWxnb3JpdGhtcworICAgKgorICAgKiAgVGhpcyBvcGVyYXRpb24gcmV0dXJucyB0aGUgbGFzdCBpdGVyYXRvciBpIGluIFtfX2ZpcnN0LCBfX2xhc3QpIGZvciB3aGljaAorICAgKiAgdGhlIHJhbmdlIFtfX2ZpcnN0LCBpKSBpcyBhIGhlYXAuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCisgICAgaXNfaGVhcF91bnRpbChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICByZXR1cm4gX19maXJzdCArIHN0ZDo6X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwKKwkJCQkJCQkJICAgX19sYXN0KSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBTZWFyY2ggdGhlIGVuZCBvZiBhIGhlYXAgdXNpbmcgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgRW5kIG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2NvbXAgICBDb21wYXJpc29uIGZ1bmN0b3IgdG8gdXNlLgorICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgbm90IGluIHRoZSBoZWFwLgorICAgKiAgQGluZ3JvdXAgaGVhcF9hbGdvcml0aG1zCisgICAqCisgICAqICBUaGlzIG9wZXJhdGlvbiByZXR1cm5zIHRoZSBsYXN0IGl0ZXJhdG9yIGkgaW4gW19fZmlyc3QsIF9fbGFzdCkgZm9yIHdoaWNoCisgICAqICB0aGUgcmFuZ2UgW19fZmlyc3QsIGkpIGlzIGEgaGVhcC4gIENvbXBhcmlzb25zIGFyZSBtYWRlIHVzaW5nIF9fY29tcC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCisgICAgaXNfaGVhcF91bnRpbChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkJICBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHJldHVybiBfX2ZpcnN0ICsgc3RkOjpfX2lzX2hlYXBfdW50aWwoX19maXJzdCwgc3RkOjpkaXN0YW5jZShfX2ZpcnN0LAorCQkJCQkJCQkgICBfX2xhc3QpLAorCQkJCQkgICAgX19jb21wKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIERldGVybWluZXMgd2hldGhlciBhIHJhbmdlIGlzIGEgaGVhcC4KKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgcmFuZ2UgaXMgYSBoZWFwLCBmYWxzZSBvdGhlcndpc2UuCisgICAqICBAaW5ncm91cCBoZWFwX2FsZ29yaXRobXMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7IHJldHVybiBzdGQ6OmlzX2hlYXBfdW50aWwoX19maXJzdCwgX19sYXN0KSA9PSBfX2xhc3Q7IH0KKworICAvKioKKyAgICogIEBicmllZiAgRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmFuZ2UgaXMgYSBoZWFwIHVzaW5nIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgIEVuZCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19jb21wICAgQ29tcGFyaXNvbiBmdW5jdG9yIHRvIHVzZS4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgcmFuZ2UgaXMgYSBoZWFwLCBmYWxzZSBvdGhlcndpc2UuCisgICAqICBAaW5ncm91cCBoZWFwX2FsZ29yaXRobXMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7IHJldHVybiBzdGQ6OmlzX2hlYXBfdW50aWwoX19maXJzdCwgX19sYXN0LCBfX2NvbXApID09IF9fbGFzdDsgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9TVExfSEVBUF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX2l0ZXJhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE0ZjM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfaXRlcmF0b3IuaApAQCAtMCwwICsxLDExNDggQEAKKy8vIEl0ZXJhdG9ycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk4CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgYml0cy9zdGxfaXRlcmF0b3IuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2l0ZXJhdG9yfQorICoKKyAqICBUaGlzIGZpbGUgaW1wbGVtZW50cyByZXZlcnNlX2l0ZXJhdG9yLCBiYWNrX2luc2VydF9pdGVyYXRvciwKKyAqICBmcm9udF9pbnNlcnRfaXRlcmF0b3IsIGluc2VydF9pdGVyYXRvciwgX19ub3JtYWxfaXRlcmF0b3IsIGFuZCB0aGVpcgorICogIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFuZCBvdmVybG9hZGVkIG9wZXJhdG9ycy4KKyAqLworCisjaWZuZGVmIF9TVExfSVRFUkFUT1JfSAorI2RlZmluZSBfU1RMX0lURVJBVE9SX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBpdGVyYXRvcnMKKyAgICogQHsKKyAgICovCisKKyAgLy8gMjQuNC4xIFJldmVyc2UgaXRlcmF0b3JzCisgIC8qKgorICAgKiAgQmlkaXJlY3Rpb25hbCBhbmQgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMgaGF2ZSBjb3JyZXNwb25kaW5nIHJldmVyc2UKKyAgICogICVpdGVyYXRvciBhZGFwdG9ycyB0aGF0IGl0ZXJhdGUgdGhyb3VnaCB0aGUgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlCisgICAqICBvcHBvc2l0ZSBkaXJlY3Rpb24uICBUaGV5IGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlcyBhcyB0aGUgY29ycmVzcG9uZGluZworICAgKiAgaXRlcmF0b3JzLiAgVGhlIGZ1bmRhbWVudGFsIHJlbGF0aW9uIGJldHdlZW4gYSByZXZlcnNlICVpdGVyYXRvciBhbmQgaXRzCisgICAqICBjb3JyZXNwb25kaW5nICVpdGVyYXRvciBAYyBpIGlzIGVzdGFibGlzaGVkIGJ5IHRoZSBpZGVudGl0eToKKyAgICogIEBjb2RlCisgICAqICAgICAgJioocmV2ZXJzZV9pdGVyYXRvcihpKSkgPT0gJiooaSAtIDEpCisgICAqICBAZW5kY29kZQorICAgKgorICAgKiAgPGVtPlRoaXMgbWFwcGluZyBpcyBkaWN0YXRlZCBieSB0aGUgZmFjdCB0aGF0IHdoaWxlIHRoZXJlIGlzIGFsd2F5cyBhCisgICAqICBwb2ludGVyIHBhc3QgdGhlIGVuZCBvZiBhbiBhcnJheSwgdGhlcmUgbWlnaHQgbm90IGJlIGEgdmFsaWQgcG9pbnRlcgorICAgKiAgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgYW4gYXJyYXkuPC9lbT4gWzI0LjQuMV0vMSwyCisgICAqCisgICAqICBSZXZlcnNlIGl0ZXJhdG9ycyBjYW4gYmUgdHJpY2t5IGFuZCBzdXJwcmlzaW5nIGF0IGZpcnN0LiAgVGhlaXIKKyAgICogIHNlbWFudGljcyBtYWtlIHNlbnNlLCBob3dldmVyLCBhbmQgdGhlIHRyaWNraW5lc3MgaXMgYSBzaWRlIGVmZmVjdCBvZgorICAgKiAgdGhlIHJlcXVpcmVtZW50IHRoYXQgdGhlIGl0ZXJhdG9ycyBtdXN0IGJlIHNhZmUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAorCQkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKwkJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKKwkJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CisKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4JCV9fdHJhaXRzX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9JdGVyYXRvcgkJCQkJaXRlcmF0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90eXBlCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6cG9pbnRlcgkJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6cmVmZXJlbmNlCQlyZWZlcmVuY2U7CisKKyAgICAgIC8qKgorICAgICAgICogIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIHZhbHVlLWluaXRpYWxpemVzIG1lbWJlciBAcCBjdXJyZW50LgorICAgICAgICogIElmIGl0IGlzIGEgcG9pbnRlciwgdGhhdCBtZWFucyBpdCBpcyB6ZXJvLWluaXRpYWxpemVkLgorICAgICAgKi8KKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIzNSBObyBzcGVjaWZpY2F0aW9uIG9mIGRlZmF1bHQgY3RvciBmb3IgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIDogY3VycmVudCgpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBUaGlzICVpdGVyYXRvciB3aWxsIG1vdmUgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0aGF0IEBwIHggZG9lcy4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFRoZSBjb3B5IGNvbnN0cnVjdG9yIGlzIG5vcm1hbC4KKyAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKKyAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEEgJXJldmVyc2VfaXRlcmF0b3IgYWNyb3NzIG90aGVyIHR5cGVzIGNhbiBiZSBjb3BpZWQgaWYgdGhlCisgICAgICAgKiAgdW5kZXJseWluZyAlaXRlcmF0b3IgY2FuIGJlIGNvbnZlcnRlZCB0byB0aGUgdHlwZSBvZiBAYyBjdXJyZW50LgorICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgorICAgICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCisJOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBAYyBjdXJyZW50LCB0aGUgJWl0ZXJhdG9yIHVzZWQgZm9yIHVuZGVybHlpbmcgd29yay4KKyAgICAgICovCisgICAgICBpdGVyYXRvcl90eXBlCisgICAgICBiYXNlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGN1cnJlbnQ7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgQSByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIGF0IEBjIC0tY3VycmVudAorICAgICAgICoKKyAgICAgICAqICBUaGlzIHJlcXVpcmVzIHRoYXQgQGMgLS1jdXJyZW50IGlzIGRlcmVmZXJlbmNlYWJsZS4KKyAgICAgICAqCisgICAgICAgKiAgQHdhcm5pbmcgVGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGF0IGZvciBhbiBpdGVyYXRvciBvZiB0aGUKKyAgICAgICAqICAgICAgICAgICB1bmRlcmx5aW5nIGl0ZXJhdG9yIHR5cGUsIEBjIHgsIGEgcmVmZXJlbmNlIG9idGFpbmVkIGJ5CisgICAgICAgKiAgICAgICAgICAgQGMgKnggcmVtYWlucyB2YWxpZCBhZnRlciBAYyB4IGhhcyBiZWVuIG1vZGlmaWVkIG9yCisgICAgICAgKiAgICAgICAgICAgZGVzdHJveWVkLiBUaGlzIGlzIGEgYnVnOiBodHRwOi8vZ2NjLmdudS5vcmcvUFI1MTgyMworICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OworCXJldHVybiAqLS1fX3RtcDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBhdCBAYyAtLWN1cnJlbnQKKyAgICAgICAqCisgICAgICAgKiAgVGhpcyByZXF1aXJlcyB0aGF0IEBjIC0tY3VycmVudCBpcyBkZXJlZmVyZW5jZWFibGUuCisgICAgICAqLworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBAYyAqdGhpcworICAgICAgICoKKyAgICAgICAqICBEZWNyZW1lbnRzIHRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yLgorICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwktLWN1cnJlbnQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgQGMgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgRGVjcmVtZW50cyB0aGUgdW5kZXJseWluZyBpdGVyYXRvci4KKyAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlyZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisJLS1jdXJyZW50OworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgQGMgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgSW5jcmVtZW50cyB0aGUgdW5kZXJseWluZyBpdGVyYXRvci4KKyAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJKytjdXJyZW50OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgQSByZXZlcnNlX2l0ZXJhdG9yIHdpdGggdGhlIHByZXZpb3VzIHZhbHVlIG9mIEBjICp0aGlzCisgICAgICAgKgorICAgICAgICogIEluY3JlbWVudHMgdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IuCisgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworCSsrY3VycmVudDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEByZXR1cm4gIEEgcmV2ZXJzZV9pdGVyYXRvciB0aGF0IHJlZmVycyB0byBAYyBjdXJyZW50IC0gQGEgX19uCisgICAgICAgKgorICAgICAgICogIFRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yIG11c3QgYmUgYSBSYW5kb20gQWNjZXNzIEl0ZXJhdG9yLgorICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBNb3ZlcyB0aGUgdW5kZXJseWluZyBpdGVyYXRvciBiYWNrd2FyZHMgQGEgX19uIHN0ZXBzLgorICAgICAgICogIFRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yIG11c3QgYmUgYSBSYW5kb20gQWNjZXNzIEl0ZXJhdG9yLgorICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCisgICAgICB7CisJY3VycmVudCAtPSBfX247CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBBIHJldmVyc2VfaXRlcmF0b3IgdGhhdCByZWZlcnMgdG8gQGMgY3VycmVudCAtIEBhIF9fbgorICAgICAgICoKKyAgICAgICAqICBUaGUgdW5kZXJseWluZyBpdGVyYXRvciBtdXN0IGJlIGEgUmFuZG9tIEFjY2VzcyBJdGVyYXRvci4KKyAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCArIF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgTW92ZXMgdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IgZm9yd2FyZHMgQGEgX19uIHN0ZXBzLgorICAgICAgICogIFRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yIG11c3QgYmUgYSBSYW5kb20gQWNjZXNzIEl0ZXJhdG9yLgorICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pCisgICAgICB7CisJY3VycmVudCArPSBfX247CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcmV0dXJuICBUaGUgdmFsdWUgYXQgQGMgY3VycmVudCAtIEBhIF9fbiAtIDEKKyAgICAgICAqCisgICAgICAgKiAgVGhlIHVuZGVybHlpbmcgaXRlcmF0b3IgbXVzdCBiZSBhIFJhbmRvbSBBY2Nlc3MgSXRlcmF0b3IuCisgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQorICAgIH07CisKKyAgLy9AeworICAvKioKKyAgICogIEBwYXJhbSAgX194ICBBICVyZXZlcnNlX2l0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX3kgIEEgJXJldmVyc2VfaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBBIHNpbXBsZSBib29sLgorICAgKgorICAgKiAgUmV2ZXJzZSBpdGVyYXRvcnMgZm9yd2FyZCBtYW55IG9wZXJhdGlvbnMgdG8gdGhlaXIgdW5kZXJseWluZyBiYXNlKCkKKyAgICogIGl0ZXJhdG9ycy4gIE90aGVycyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2Ygb25lIGFub3RoZXIuCisgICAqCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CisgICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKKyAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7IH0KKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIERSIDI4MC4gQ29tcGFyaXNvbiBvZiByZXZlcnNlX2l0ZXJhdG9yIHRvIGNvbnN0IHJldmVyc2VfaXRlcmF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JSPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yUj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JSPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUj4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgLy8gRFIgNjg1LgorICAgIGlubGluZSBhdXRvCisgICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgLT4gZGVjbHR5cGUoX195LmJhc2UoKSAtIF9feC5iYXNlKCkpCisjZWxzZQorICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvckw+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yUj4mIF9feSkKKyNlbmRpZgorICAgIHsgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOyB9CisgIC8vQH0KKworICAvLyAyNC40LjIuMi4xIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCisgIC8qKgorICAgKiAgQGJyaWVmICBUdXJucyBhc3NpZ25tZW50IGludG8gaW5zZXJ0aW9uLgorICAgKgorICAgKiAgVGhlc2UgYXJlIG91dHB1dCBpdGVyYXRvcnMsIGNvbnN0cnVjdGVkIGZyb20gYSBjb250YWluZXItb2YtVC4KKyAgICogIEFzc2lnbmluZyBhIFQgdG8gdGhlIGl0ZXJhdG9yIGFwcGVuZHMgaXQgdG8gdGhlIGNvbnRhaW5lciB1c2luZworICAgKiAgcHVzaF9iYWNrLgorICAgKgorICAgKiAgVGlwOiAgVXNpbmcgdGhlIGJhY2tfaW5zZXJ0ZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZXNlIGl0ZXJhdG9ycyBjYW4KKyAgICogIHNhdmUgdHlwaW5nLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOworCisgICAgcHVibGljOgorICAgICAgLy8vIEEgbmVzdGVkIHR5cGVkZWYgZm9yIHRoZSB0eXBlIG9mIHdoYXRldmVyIGNvbnRhaW5lciB5b3UgdXNlZC4KKyAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKKworICAgICAgLy8vIFRoZSBvbmx5IHdheSB0byBjcmVhdGUgdGhpcyAlaXRlcmF0b3IgaXMgd2l0aCBhIGNvbnRhaW5lci4KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAcGFyYW0gIF9fdmFsdWUgIEFuIGluc3RhbmNlIG9mIHdoYXRldmVyIHR5cGUKKyAgICAgICAqICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGlzOyBwcmVzdW1hYmx5IGEKKyAgICAgICAqICAgICAgICAgICAgICAgICByZWZlcmVuY2UtdG8tY29uc3QgVCBmb3IgY29udGFpbmVyPFQ+LgorICAgICAgICogIEByZXR1cm4gIFRoaXMgJWl0ZXJhdG9yLCBmb3IgY2hhaW5lZCBvcGVyYXRpb25zLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGtpbmQgb2YgJWl0ZXJhdG9yIGRvZXNuJ3QgcmVhbGx5IGhhdmUgYSBAYSBwb3NpdGlvbiBpbiB0aGUKKyAgICAgICAqICBjb250YWluZXIgKHlvdSBjYW4gdGhpbmsgb2YgdGhlIHBvc2l0aW9uIGFzIGJlaW5nIHBlcm1hbmVudGx5IGF0CisgICAgICAgKiAgdGhlIGVuZCwgaWYgeW91IGxpa2UpLiAgQXNzaWduaW5nIGEgdmFsdWUgdG8gdGhlICVpdGVyYXRvciB3aWxsCisgICAgICAgKiAgYWx3YXlzIGFwcGVuZCB0aGUgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgY29udGFpbmVyLgorICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbHNlCisgICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYmIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5wdXNoX2JhY2soc3RkOjptb3ZlKF9fdmFsdWUpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8vIFNpbXBseSByZXR1cm5zICp0aGlzLgorICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgLy8vIFNpbXBseSByZXR1cm5zICp0aGlzLiAgKFRoaXMgJWl0ZXJhdG9yIGRvZXMgbm90IEBhIG1vdmUuKQorICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vLyBTaW1wbHkgcmV0dXJucyAqdGhpcy4gIChUaGlzICVpdGVyYXRvciBkb2VzIG5vdCBAYSBtb3ZlLikKKyAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworICAvKioKKyAgICogIEBwYXJhbSAgX194ICBBIGNvbnRhaW5lciBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gIEFuIGluc3RhbmNlIG9mIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHdvcmtpbmcgb24gQHAgX194LgorICAgKgorICAgKiAgVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGhlbHBzIGluIGNyZWF0aW5nIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIGluc3RhbmNlcy4KKyAgICogIFR5cGluZyB0aGUgbmFtZSBvZiB0aGUgJWl0ZXJhdG9yIHJlcXVpcmVzIGtub3dpbmcgdGhlIHByZWNpc2UgZnVsbAorICAgKiAgdHlwZSBvZiB0aGUgY29udGFpbmVyLCB3aGljaCBjYW4gYmUgdGVkaW91cyBhbmQgaW1wZWRlcyBnZW5lcmljCisgICAqICBwcm9ncmFtbWluZy4gIFVzaW5nIHRoaXMgZnVuY3Rpb24gbGV0cyB5b3UgdGFrZSBhZHZhbnRhZ2Ugb2YgYXV0b21hdGljCisgICAqICB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVkdWN0aW9uLCBtYWtpbmcgdGhlIGNvbXBpbGVyIG1hdGNoIHRoZSBjb3JyZWN0CisgICAqICB0eXBlcyBmb3IgeW91LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgorICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQorICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVHVybnMgYXNzaWdubWVudCBpbnRvIGluc2VydGlvbi4KKyAgICoKKyAgICogIFRoZXNlIGFyZSBvdXRwdXQgaXRlcmF0b3JzLCBjb25zdHJ1Y3RlZCBmcm9tIGEgY29udGFpbmVyLW9mLVQuCisgICAqICBBc3NpZ25pbmcgYSBUIHRvIHRoZSBpdGVyYXRvciBwcmVwZW5kcyBpdCB0byB0aGUgY29udGFpbmVyIHVzaW5nCisgICAqICBwdXNoX2Zyb250LgorICAgKgorICAgKiAgVGlwOiAgVXNpbmcgdGhlIGZyb250X2luc2VydGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGVzZSBpdGVyYXRvcnMgY2FuCisgICAqICBzYXZlIHR5cGluZy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gQSBuZXN0ZWQgdHlwZWRlZiBmb3IgdGhlIHR5cGUgb2Ygd2hhdGV2ZXIgY29udGFpbmVyIHlvdSB1c2VkLgorICAgICAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworCisgICAgICAvLy8gVGhlIG9ubHkgd2F5IHRvIGNyZWF0ZSB0aGlzICVpdGVyYXRvciBpcyB3aXRoIGEgY29udGFpbmVyLgorICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBwYXJhbSAgX192YWx1ZSAgQW4gaW5zdGFuY2Ugb2Ygd2hhdGV2ZXIgdHlwZQorICAgICAgICogICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOjpjb25zdF9yZWZlcmVuY2UgaXM7IHByZXN1bWFibHkgYQorICAgICAgICogICAgICAgICAgICAgICAgIHJlZmVyZW5jZS10by1jb25zdCBUIGZvciBjb250YWluZXI8VD4uCisgICAgICAgKiAgQHJldHVybiAgVGhpcyAlaXRlcmF0b3IsIGZvciBjaGFpbmVkIG9wZXJhdGlvbnMuCisgICAgICAgKgorICAgICAgICogIFRoaXMga2luZCBvZiAlaXRlcmF0b3IgZG9lc24ndCByZWFsbHkgaGF2ZSBhIEBhIHBvc2l0aW9uIGluIHRoZQorICAgICAgICogIGNvbnRhaW5lciAoeW91IGNhbiB0aGluayBvZiB0aGUgcG9zaXRpb24gYXMgYmVpbmcgcGVybWFuZW50bHkgYXQKKyAgICAgICAqICB0aGUgZnJvbnQsIGlmIHlvdSBsaWtlKS4gIEFzc2lnbmluZyBhIHZhbHVlIHRvIHRoZSAlaXRlcmF0b3Igd2lsbAorICAgICAgICogIGFsd2F5cyBwcmVwZW5kIHRoZSB2YWx1ZSB0byB0aGUgZnJvbnQgb2YgdGhlIGNvbnRhaW5lci4KKyAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbHNlCisgICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYmIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5wdXNoX2Zyb250KHN0ZDo6bW92ZShfX3ZhbHVlKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vLyBTaW1wbHkgcmV0dXJucyAqdGhpcy4KKyAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICAvLy8gU2ltcGx5IHJldHVybnMgKnRoaXMuICAoVGhpcyAlaXRlcmF0b3IgZG9lcyBub3QgQGEgbW92ZS4pCisgICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vLyBTaW1wbHkgcmV0dXJucyAqdGhpcy4gIChUaGlzICVpdGVyYXRvciBkb2VzIG5vdCBAYSBtb3ZlLikKKyAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAcGFyYW0gIF9feCAgQSBjb250YWluZXIgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcmV0dXJuICBBbiBpbnN0YW5jZSBvZiBmcm9udF9pbnNlcnRfaXRlcmF0b3Igd29ya2luZyBvbiBAcCB4LgorICAgKgorICAgKiAgVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGhlbHBzIGluIGNyZWF0aW5nIGZyb250X2luc2VydF9pdGVyYXRvciBpbnN0YW5jZXMuCisgICAqICBUeXBpbmcgdGhlIG5hbWUgb2YgdGhlICVpdGVyYXRvciByZXF1aXJlcyBrbm93aW5nIHRoZSBwcmVjaXNlIGZ1bGwKKyAgICogIHR5cGUgb2YgdGhlIGNvbnRhaW5lciwgd2hpY2ggY2FuIGJlIHRlZGlvdXMgYW5kIGltcGVkZXMgZ2VuZXJpYworICAgKiAgcHJvZ3JhbW1pbmcuICBVc2luZyB0aGlzIGZ1bmN0aW9uIGxldHMgeW91IHRha2UgYWR2YW50YWdlIG9mIGF1dG9tYXRpYworICAgKiAgdGVtcGxhdGUgcGFyYW1ldGVyIGRlZHVjdGlvbiwgbWFraW5nIHRoZSBjb21waWxlciBtYXRjaCB0aGUgY29ycmVjdAorICAgKiAgdHlwZXMgZm9yIHlvdS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CisgICAgZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQorICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFR1cm5zIGFzc2lnbm1lbnQgaW50byBpbnNlcnRpb24uCisgICAqCisgICAqICBUaGVzZSBhcmUgb3V0cHV0IGl0ZXJhdG9ycywgY29uc3RydWN0ZWQgZnJvbSBhIGNvbnRhaW5lci1vZi1ULgorICAgKiAgQXNzaWduaW5nIGEgVCB0byB0aGUgaXRlcmF0b3IgaW5zZXJ0cyBpdCBpbiB0aGUgY29udGFpbmVyIGF0IHRoZQorICAgKiAgJWl0ZXJhdG9yJ3MgcG9zaXRpb24sIHJhdGhlciB0aGFuIG92ZXJ3cml0aW5nIHRoZSB2YWx1ZSBhdCB0aGF0CisgICAqICBwb3NpdGlvbi4KKyAgICoKKyAgICogIChTZXF1ZW5jZXMgd2lsbCBhY3R1YWxseSBpbnNlcnQgYSBAZSBjb3B5IG9mIHRoZSB2YWx1ZSBiZWZvcmUgdGhlCisgICAqICAlaXRlcmF0b3IncyBwb3NpdGlvbi4pCisgICAqCisgICAqICBUaXA6ICBVc2luZyB0aGUgaW5zZXJ0ZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZXNlIGl0ZXJhdG9ycyBjYW4KKyAgICogIHNhdmUgdHlwaW5nLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgorICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKyAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gQSBuZXN0ZWQgdHlwZWRlZiBmb3IgdGhlIHR5cGUgb2Ygd2hhdGV2ZXIgY29udGFpbmVyIHlvdSB1c2VkLgorICAgICAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworCisgICAgICAvKioKKyAgICAgICAqICBUaGUgb25seSB3YXkgdG8gY3JlYXRlIHRoaXMgJWl0ZXJhdG9yIGlzIHdpdGggYSBjb250YWluZXIgYW5kIGFuCisgICAgICAgKiAgaW5pdGlhbCBwb3NpdGlvbiAoYSBub3JtYWwgJWl0ZXJhdG9yIGludG8gdGhlIGNvbnRhaW5lcikuCisgICAgICAqLworICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQorICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQorCisgICAgICAvKioKKyAgICAgICAqICBAcGFyYW0gIF9fdmFsdWUgIEFuIGluc3RhbmNlIG9mIHdoYXRldmVyIHR5cGUKKyAgICAgICAqICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGlzOyBwcmVzdW1hYmx5IGEKKyAgICAgICAqICAgICAgICAgICAgICAgICByZWZlcmVuY2UtdG8tY29uc3QgVCBmb3IgY29udGFpbmVyPFQ+LgorICAgICAgICogIEByZXR1cm4gIFRoaXMgJWl0ZXJhdG9yLCBmb3IgY2hhaW5lZCBvcGVyYXRpb25zLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGtpbmQgb2YgJWl0ZXJhdG9yIG1haW50YWlucyBpdHMgb3duIHBvc2l0aW9uIGluIHRoZQorICAgICAgICogIGNvbnRhaW5lci4gIEFzc2lnbmluZyBhIHZhbHVlIHRvIHRoZSAlaXRlcmF0b3Igd2lsbCBpbnNlcnQgdGhlCisgICAgICAgKiAgdmFsdWUgaW50byB0aGUgY29udGFpbmVyIGF0IHRoZSBwbGFjZSBiZWZvcmUgdGhlICVpdGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHBvc2l0aW9uIGlzIG1haW50YWluZWQgc3VjaCB0aGF0IHN1YnNlcXVlbnQgYXNzaWdubWVudHMgd2lsbAorICAgICAgICogIGluc2VydCB2YWx1ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgb25lIGFub3RoZXIuICBGb3IgZXhhbXBsZSwKKyAgICAgICAqICBAY29kZQorICAgICAgICogICAgIC8vIHZlY3RvciB2IGNvbnRhaW5zIEEgYW5kIFoKKyAgICAgICAqCisgICAgICAgKiAgICAgaW5zZXJ0X2l0ZXJhdG9yIGkgKHYsICsrdi5iZWdpbigpKTsKKyAgICAgICAqICAgICBpID0gMTsKKyAgICAgICAqICAgICBpID0gMjsKKyAgICAgICAqICAgICBpID0gMzsKKyAgICAgICAqCisgICAgICAgKiAgICAgLy8gdmVjdG9yIHYgY29udGFpbnMgQSwgMSwgMiwgMywgYW5kIFoKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgICAgIGluc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKKyAgICAgIHsKKwlpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CisJKytpdGVyOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbHNlCisgICAgICBpbnNlcnRfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwlpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CisJKytpdGVyOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmJiBfX3ZhbHVlKQorICAgICAgeworCWl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBzdGQ6Om1vdmUoX192YWx1ZSkpOworCSsraXRlcjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8vIFNpbXBseSByZXR1cm5zICp0aGlzLgorICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vLyBTaW1wbHkgcmV0dXJucyAqdGhpcy4gIChUaGlzICVpdGVyYXRvciBkb2VzIG5vdCBAYSBtb3ZlLikKKyAgICAgIGluc2VydF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgLy8vIFNpbXBseSByZXR1cm5zICp0aGlzLiAgKFRoaXMgJWl0ZXJhdG9yIGRvZXMgbm90IEBhIG1vdmUuKQorICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAcGFyYW0gX194ICBBIGNvbnRhaW5lciBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEByZXR1cm4gIEFuIGluc3RhbmNlIG9mIGluc2VydF9pdGVyYXRvciB3b3JraW5nIG9uIEBwIF9feC4KKyAgICoKKyAgICogIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBoZWxwcyBpbiBjcmVhdGluZyBpbnNlcnRfaXRlcmF0b3IgaW5zdGFuY2VzLgorICAgKiAgVHlwaW5nIHRoZSBuYW1lIG9mIHRoZSAlaXRlcmF0b3IgcmVxdWlyZXMga25vd2luZyB0aGUgcHJlY2lzZSBmdWxsCisgICAqICB0eXBlIG9mIHRoZSBjb250YWluZXIsIHdoaWNoIGNhbiBiZSB0ZWRpb3VzIGFuZCBpbXBlZGVzIGdlbmVyaWMKKyAgICogIHByb2dyYW1taW5nLiAgVXNpbmcgdGhpcyBmdW5jdGlvbiBsZXRzIHlvdSB0YWtlIGFkdmFudGFnZSBvZiBhdXRvbWF0aWMKKyAgICogIHRlbXBsYXRlIHBhcmFtZXRlciBkZWR1Y3Rpb24sIG1ha2luZyB0aGUgY29tcGlsZXIgbWF0Y2ggdGhlIGNvcnJlY3QKKyAgICogIHR5cGVzIGZvciB5b3UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CisgICAgaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQorICAgIHsKKyAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAorCQkJCQkgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CisgICAgfQorCisgIC8vIEB9IGdyb3VwIGl0ZXJhdG9ycworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBUaGlzIGl0ZXJhdG9yIGFkYXB0ZXIgaXMgQGEgbm9ybWFsIGluIHRoZSBzZW5zZSB0aGF0IGl0IGRvZXMgbm90CisgIC8vIGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFueSBvZiB0aGUgb3BlcmF0b3JzIG9mIGl0cyBpdGVyYXRvcgorICAvLyBwYXJhbWV0ZXIuICBJdHMgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGNvbnZlcnQgYW4gaXRlcmF0b3IgdGhhdCBpcworICAvLyBub3QgYSBjbGFzcywgZS5nLiBhIHBvaW50ZXIsIGludG8gYW4gaXRlcmF0b3IgdGhhdCBpcyBhIGNsYXNzLgorICAvLyBUaGUgX0NvbnRhaW5lciBwYXJhbWV0ZXIgZXhpc3RzIHNvbGVseSBzbyB0aGF0IGRpZmZlcmVudCBjb250YWluZXJzCisgIC8vIHVzaW5nIHRoaXMgdGVtcGxhdGUgY2FuIGluc3RhbnRpYXRlIGRpZmZlcmVudCB0eXBlcywgZXZlbiBpZiB0aGUKKyAgLy8gX0l0ZXJhdG9yIHBhcmFtZXRlciBpcyB0aGUgc2FtZS4KKyAgdXNpbmcgc3RkOjppdGVyYXRvcl90cmFpdHM7CisgIHVzaW5nIHN0ZDo6aXRlcmF0b3I7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKKworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPgkJX190cmFpdHNfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yCQkJCQlpdGVyYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSAgCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSAJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6cG9pbnRlciAgIAlwb2ludGVyOworCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQorCisgICAgICAvLyBBbGxvdyBpdGVyYXRvciB0byBjb25zdF9pdGVyYXRvciBjb252ZXJzaW9uCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KKyAgICAgICAgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsCisJCQkgIHR5cGVuYW1lIF9fZW5hYmxlX2lmPAorICAgICAgCSAgICAgICAoc3RkOjpfX2FyZV9zYW1lPF9JdGVyLCB0eXBlbmFtZSBfQ29udGFpbmVyOjpwb2ludGVyPjo6X192YWx1ZSksCisJCSAgICAgIF9Db250YWluZXI+OjpfX3R5cGU+JiBfX2kpCisgICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KKworICAgICAgLy8gRm9yd2FyZCBpdGVyYXRvciByZXF1aXJlbWVudHMKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VycmVudDsgfQorCisgICAgICBfX25vcm1hbF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCSsrX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KKworICAgICAgLy8gQmlkaXJlY3Rpb25hbCBpdGVyYXRvciByZXF1aXJlbWVudHMKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJLS1fTV9jdXJyZW50OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX19ub3JtYWxfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQorCisgICAgICAvLyBSYW5kb20gYWNjZXNzIGl0ZXJhdG9yIHJlcXVpcmVtZW50cworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CisKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKKyAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQorCisgICAgICBfX25vcm1hbF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0KKworICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQorICAgICAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQorCisgICAgICBjb25zdCBfSXRlcmF0b3ImCisgICAgICBiYXNlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KKyAgICB9OworCisgIC8vIE5vdGU6IEluIHdoYXQgZm9sbG93cywgdGhlIGxlZnQtIGFuZCByaWdodC1oYW5kLXNpZGUgaXRlcmF0b3JzIGFyZQorICAvLyBhbGxvd2VkIHRvIHZhcnkgaW4gdHlwZXMgKGNvbmNlcHR1YWxseSBpbiBjdi1xdWFsaWZpY2F0aW9uKSBzbyB0aGF0CisgIC8vIGNvbXBhcmlzb24gYmV0d2VlbiBjdi1xdWFsaWZpZWQgYW5kIG5vbi1jdi1xdWFsaWZpZWQgaXRlcmF0b3JzIGJlCisgIC8vIHZhbGlkLiAgSG93ZXZlciwgdGhlIGdyZWVkeSBhbmQgdW5mcmllbmRseSBvcGVyYXRvcnMgaW4gc3RkOjpyZWxfb3BzCisgIC8vIHdpbGwgbWFrZSBvdmVybG9hZCByZXNvbHV0aW9uIGFtYmlndW91cyAod2hlbiBpbiBzY29wZSkgaWYgd2UgZG9uJ3QKKyAgLy8gcHJvdmlkZSBvdmVybG9hZHMgd2hvc2Ugb3BlcmFuZHMgYXJlIG9mIHRoZSBzYW1lIHR5cGUuICBDYW4gc29tZW9uZQorICAvLyByZW1pbmQgbWUgd2hhdCBnZW5lcmljIHByb2dyYW1taW5nIGlzIGFib3V0PyAtLSBHYWJ5CisKKyAgLy8gRm9yd2FyZCBpdGVyYXRvciByZXF1aXJlbWVudHMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQorCisgIC8vIFJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IgcmVxdWlyZW1lbnRzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKKwkgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBBY2NvcmRpbmcgdG8gdGhlIHJlc29sdXRpb24gb2YgRFIxNzkgbm90IG9ubHkgdGhlIHZhcmlvdXMgY29tcGFyaXNvbgorICAvLyBvcGVyYXRvcnMgYnV0IGFsc28gb3BlcmF0b3ItIG11c3QgYWNjZXB0IG1peGVkIGl0ZXJhdG9yL2NvbnN0X2l0ZXJhdG9yCisgIC8vIHBhcmFtZXRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIC8vIERSIDY4NS4KKyAgICBpbmxpbmUgYXV0bworICAgIG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCisJICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIC0+IGRlY2x0eXBlKF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKSkKKyNlbHNlCisgICAgaW5saW5lIHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKKyNlbmRpZgorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgb3BlcmF0b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgorICAgIG9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKKwkgICAgICBfX24sIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKKyAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBpdGVyYXRvcnMKKyAgICogQHsKKyAgICovCisKKyAgLy8gMjQuNC4zICBNb3ZlIGl0ZXJhdG9ycworICAvKioKKyAgICogIENsYXNzIHRlbXBsYXRlIG1vdmVfaXRlcmF0b3IgaXMgYW4gaXRlcmF0b3IgYWRhcHRlciB3aXRoIHRoZSBzYW1lCisgICAqICBiZWhhdmlvciBhcyB0aGUgdW5kZXJseWluZyBpdGVyYXRvciBleGNlcHQgdGhhdCBpdHMgZGVyZWZlcmVuY2UKKyAgICogIG9wZXJhdG9yIGltcGxpY2l0bHkgY29udmVydHMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nCisgICAqICBpdGVyYXRvcidzIGRlcmVmZXJlbmNlIG9wZXJhdG9yIHRvIGFuIHJ2YWx1ZSByZWZlcmVuY2UuICBTb21lCisgICAqICBnZW5lcmljIGFsZ29yaXRobXMgY2FuIGJlIGNhbGxlZCB3aXRoIG1vdmUgaXRlcmF0b3JzIHRvIHJlcGxhY2UKKyAgICogIGNvcHlpbmcgd2l0aCBtb3ZpbmcuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgY2xhc3MgbW92ZV9pdGVyYXRvcgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKKworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPgkJX190cmFpdHNfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yCQkJCQlpdGVyYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSAgCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICAvLyBOQjogRFIgNjgwLgorICAgICAgdHlwZWRlZiBfSXRlcmF0b3IJCQkJCXBvaW50ZXI7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmJgkJCQlyZWZlcmVuY2U7CisKKyAgICAgIG1vdmVfaXRlcmF0b3IoKQorICAgICAgOiBfTV9jdXJyZW50KCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBtb3ZlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX19pKQorICAgICAgOiBfTV9jdXJyZW50KF9faSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgorCW1vdmVfaXRlcmF0b3IoY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcj4mIF9faSkKKwk6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CisKKyAgICAgIGl0ZXJhdG9yX3R5cGUKKyAgICAgIGJhc2UoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VycmVudDsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om1vdmUoKl9NX2N1cnJlbnQpOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fY3VycmVudDsgfQorCisgICAgICBtb3ZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJKytfTV9jdXJyZW50OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgbW92ZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJbW92ZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOworCSsrX01fY3VycmVudDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIG1vdmVfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwktLV9NX2N1cnJlbnQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBtb3ZlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsKKwltb3ZlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisJLS1fTV9jdXJyZW50OworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgbW92ZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBtb3ZlX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CisKKyAgICAgIG1vdmVfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCisgICAgICB7CisJX01fY3VycmVudCArPSBfX247CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBtb3ZlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1vdmVfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0KKyAgICAKKyAgICAgIG1vdmVfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pCisgICAgICB7IAorCV9NX2N1cnJlbnQgLT0gX19uOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Om1vdmUoX01fY3VycmVudFtfX25dKTsgfQorICAgIH07CisKKyAgLy8gTm90ZTogU2VlIF9fbm9ybWFsX2l0ZXJhdG9yIG9wZXJhdG9ycyBub3RlIGZyb20gR2FieSB0byB1bmRlcnN0YW5kCisgIC8vIHdoeSB0aGVyZSBhcmUgYWx3YXlzIDIgdmVyc2lvbnMgZm9yIG1vc3Qgb2YgdGhlIG1vdmVfaXRlcmF0b3IKKyAgLy8gb3BlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvckw+JiBfX3gsCisJICAgICAgIGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yUj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAorCSAgICAgICBjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvckw+JiBfX3gsCisJICAgICAgIGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yUj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgIGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yUj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guYmFzZSgpIDwgX195LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICBjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guYmFzZSgpIDwgX195LmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3JSPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgIGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgIGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yUj4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3JMPiYgX194LAorCSAgICAgICBjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKKwkgICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgLy8gRFIgNjg1LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSPgorICAgIGlubGluZSBhdXRvCisgICAgb3BlcmF0b3ItKGNvbnN0IG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yTD4mIF9feCwKKwkgICAgICBjb25zdCBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvclI+JiBfX3kpCisgICAgLT4gZGVjbHR5cGUoX194LmJhc2UoKSAtIF9feS5iYXNlKCkpCisgICAgeyByZXR1cm4gX194LmJhc2UoKSAtIF9feS5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIGF1dG8KKyAgICBvcGVyYXRvci0oY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCisJICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCisgICAgLT4gZGVjbHR5cGUoX194LmJhc2UoKSAtIF9feS5iYXNlKCkpCisgICAgeyByZXR1cm4gX194LmJhc2UoKSAtIF9feS5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yPgorICAgIG9wZXJhdG9yKyh0eXBlbmFtZSBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCisJICAgICAgY29uc3QgbW92ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpCisgICAgeyByZXR1cm4gX194ICsgX19uOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KKyAgICBtYWtlX21vdmVfaXRlcmF0b3IoX0l0ZXJhdG9yIF9faSkKKyAgICB7IHJldHVybiBtb3ZlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX19pKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1JldHVyblR5cGUKKyAgICA9IHR5cGVuYW1lIGNvbmRpdGlvbmFsPF9fbW92ZV9pZl9ub2V4Y2VwdF9jb25kCisgICAgICA8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGU+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICBfSXRlcmF0b3IsIG1vdmVfaXRlcmF0b3I8X0l0ZXJhdG9yPj46OnR5cGU+CisgICAgaW5saW5lIF9SZXR1cm5UeXBlCisgICAgX19tYWtlX21vdmVfaWZfbm9leGNlcHRfaXRlcmF0b3IoX0l0ZXJhdG9yIF9faSkKKyAgICB7IHJldHVybiBfUmV0dXJuVHlwZShfX2kpOyB9CisKKyAgLy8gQH0gZ3JvdXAgaXRlcmF0b3JzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2RlZmluZSBfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX0l0ZXIpIHN0ZDo6bWFrZV9tb3ZlX2l0ZXJhdG9yKF9JdGVyKQorI2RlZmluZSBfR0xJQkNYWF9NQUtFX01PVkVfSUZfTk9FWENFUFRfSVRFUkFUT1IoX0l0ZXIpIFwKKyAgc3RkOjpfX21ha2VfbW92ZV9pZl9ub2V4Y2VwdF9pdGVyYXRvcihfSXRlcikKKyNlbHNlCisjZGVmaW5lIF9HTElCQ1hYX01BS0VfTU9WRV9JVEVSQVRPUihfSXRlcikgKF9JdGVyKQorI2RlZmluZSBfR0xJQkNYWF9NQUtFX01PVkVfSUZfTk9FWENFUFRfSVRFUkFUT1IoX0l0ZXIpIChfSXRlcikKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3MWUyNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oCkBAIC0wLDAgKzEsMjA1IEBACisvLyBGdW5jdGlvbnMgdXNlZCBieSBpdGVyYXRvcnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OAorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2l0ZXJhdG9yfQorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG9mIHRoZSBnZW5lcmFsIGl0ZXJhdG9yLXJlbGF0ZWQgdXRpbGl0eQorICogIGZ1bmN0aW9ucywgc3VjaCBhcyBkaXN0YW5jZSgpIGFuZCBhZHZhbmNlKCkuCisgKi8KKworI2lmbmRlZiBfU1RMX0lURVJBVE9SX0JBU0VfRlVOQ1NfSAorI2RlZmluZSBfU1RMX0lURVJBVE9SX0JBU0VfRlVOQ1NfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvY29uY2VwdF9jaGVjay5oPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorCisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICArK19fZmlyc3Q7CisJICArK19fbjsKKwl9CisgICAgICByZXR1cm4gX19uOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBBIGdlbmVyYWxpemF0aW9uIG9mIHBvaW50ZXIgYXJpdGhtZXRpYy4KKyAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcmV0dXJuICBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgorICAgKgorICAgKiAgUmV0dXJucyBAYyBuIHN1Y2ggdGhhdCBfX2ZpcnN0ICsgbiA9PSBfX2xhc3QuICBUaGlzIHJlcXVpcmVzCisgICAqICB0aGF0IEBwIF9fbGFzdCBtdXN0IGJlIHJlYWNoYWJsZSBmcm9tIEBwIF9fZmlyc3QuICBOb3RlIHRoYXQgQGMKKyAgICogIG4gbWF5IGJlIG5lZ2F0aXZlLgorICAgKgorICAgKiAgRm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLCB0aGlzIHVzZXMgdGhlaXIgQGMgKyBhbmQgQGMgLSBvcGVyYXRpb25zCisgICAqICBhbmQgYXJlIGNvbnN0YW50IHRpbWUuICBGb3Igb3RoZXIgJWl0ZXJhdG9yIGNsYXNzZXMgdGhleSBhcmUgbGluZWFyIHRpbWUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0gdGFrZW4gY2FyZSBvZiBpbiBfX2Rpc3RhbmNlCisgICAgICByZXR1cm4gc3RkOjpfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwKKwkJCSAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fbiA+PSAwKTsKKyAgICAgIHdoaWxlIChfX24tLSkKKwkrK19faTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIGlubGluZSB2b2lkCisgICAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKKwkgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4pCisgICAgICBpZiAoX19uID4gMCkKKyAgICAgICAgd2hpbGUgKF9fbi0tKQorCSAgKytfX2k7CisgICAgICBlbHNlCisgICAgICAgIHdoaWxlIChfX24rKykKKwkgIC0tX19pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKKyAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9faSArPSBfX247CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgZ2VuZXJhbGl6YXRpb24gb2YgcG9pbnRlciBhcml0aG1ldGljLgorICAgKiAgQHBhcmFtICBfX2kgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX24gIFRoZSBAYSBkZWx0YSBieSB3aGljaCB0byBjaGFuZ2UgQHAgX19pLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICoKKyAgICogIFRoaXMgaW5jcmVtZW50cyBAcCBpIGJ5IEBwIG4uICBGb3IgYmlkaXJlY3Rpb25hbCBhbmQgcmFuZG9tIGFjY2VzcworICAgKiAgaXRlcmF0b3JzLCBAcCBfX24gbWF5IGJlIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIEBwIF9faSBpcyBkZWNyZW1lbnRlZC4KKyAgICoKKyAgICogIEZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycywgdGhpcyB1c2VzIHRoZWlyIEBjICsgYW5kIEBjIC0gb3BlcmF0aW9ucworICAgKiAgYW5kIGFyZSBjb25zdGFudCB0aW1lLiAgRm9yIG90aGVyICVpdGVyYXRvciBjbGFzc2VzIHRoZXkgYXJlIGxpbmVhciB0aW1lLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIGlubGluZSB2b2lkCisgICAgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzIC0tIHRha2VuIGNhcmUgb2YgaW4gX19hZHZhbmNlCisgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19kID0gX19uOworICAgICAgc3RkOjpfX2FkdmFuY2UoX19pLCBfX2QsIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgorICAgIG5leHQoX0ZvcndhcmRJdGVyYXRvciBfX3gsIHR5cGVuYW1lCisJIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDEpCisgICAgeworICAgICAgc3RkOjphZHZhbmNlKF9feCwgX19uKTsKKyAgICAgIHJldHVybiBfX3g7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+CisgICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IKKyAgICBwcmV2KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194LCB0eXBlbmFtZQorCSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAxKSAKKyAgICB7CisgICAgICBzdGQ6OmFkdmFuY2UoX194LCAtX19uKTsKKyAgICAgIHJldHVybiBfX3g7CisgICAgfQorCisjZW5kaWYgLy8gQysrMTEKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX1NUTF9JVEVSQVRPUl9CQVNFX0ZVTkNTX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlNWY3YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oCkBAIC0wLDAgKzEsMjM2IEBACisvLyBUeXBlcyB1c2VkIGluIGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTgKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtpdGVyYXRvcn0KKyAqCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCBvZiB0aGUgZ2VuZXJhbCBpdGVyYXRvci1yZWxhdGVkIHV0aWxpdHkgdHlwZXMsCisgKiAgc3VjaCBhcyBpdGVyYXRvcl90cmFpdHMgYW5kIHN0cnVjdCBpdGVyYXRvci4KKyAqLworCisjaWZuZGVmIF9TVExfSVRFUkFUT1JfQkFTRV9UWVBFU19ICisjZGVmaW5lIF9TVExfSVRFUkFUT1JfQkFTRV9UWVBFU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgaW5jbHVkZSA8dHlwZV90cmFpdHM+ICAvLyBGb3IgX0dMSUJDWFhfSEFTX05FU1RFRF9UWVBFLCBpc19jb252ZXJ0aWJsZQorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBkZWZncm91cCBpdGVyYXRvcnMgSXRlcmF0b3JzCisgICAqICBBYnN0cmFjdGlvbnMgZm9yIHVuaWZvcm0gaXRlcmF0aW5nIHRocm91Z2ggdmFyaW91cyB1bmRlcmx5aW5nIHR5cGVzLgorICAqLworICAvL0B7IAorCisgIC8qKgorICAgKiAgQGRlZmdyb3VwIGl0ZXJhdG9yX3RhZ3MgSXRlcmF0b3IgVGFncworICAgKiAgVGhlc2UgYXJlIGVtcHR5IHR5cGVzLCB1c2VkIHRvIGRpc3Rpbmd1aXNoIGRpZmZlcmVudCBpdGVyYXRvcnMuICBUaGUKKyAgICogIGRpc3RpbmN0aW9uIGlzIG5vdCBtYWRlIGJ5IHdoYXQgdGhleSBjb250YWluLCBidXQgc2ltcGx5IGJ5IHdoYXQgdGhleQorICAgKiAgYXJlLiAgRGlmZmVyZW50IHVuZGVybHlpbmcgYWxnb3JpdGhtcyBjYW4gdGhlbiBiZSB1c2VkIGJhc2VkIG9uIHRoZQorICAgKiAgZGlmZmVyZW50IG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBpdGVyYXRvciB0eXBlcy4KKyAgKi8KKyAgLy9AeyAKKyAgLy8vICBNYXJraW5nIGlucHV0IGl0ZXJhdG9ycy4KKyAgc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7IH07CisKKyAgLy8vICBNYXJraW5nIG91dHB1dCBpdGVyYXRvcnMuCisgIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHsgfTsKKworICAvLy8gRm9yd2FyZCBpdGVyYXRvcnMgc3VwcG9ydCBhIHN1cGVyc2V0IG9mIGlucHV0IGl0ZXJhdG9yIG9wZXJhdGlvbnMuCisgIHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcgeyB9OworCisgIC8vLyBCaWRpcmVjdGlvbmFsIGl0ZXJhdG9ycyBzdXBwb3J0IGEgc3VwZXJzZXQgb2YgZm9yd2FyZCBpdGVyYXRvcgorICAvLy8gb3BlcmF0aW9ucy4KKyAgc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHsgfTsKKworICAvLy8gUmFuZG9tLWFjY2VzcyBpdGVyYXRvcnMgc3VwcG9ydCBhIHN1cGVyc2V0IG9mIGJpZGlyZWN0aW9uYWwKKyAgLy8vIGl0ZXJhdG9yIG9wZXJhdGlvbnMuCisgIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7IH07CisgIC8vQH0KKworICAvKioKKyAgICogIEBicmllZiAgQ29tbW9uICVpdGVyYXRvciBjbGFzcy4KKyAgICoKKyAgICogIFRoaXMgY2xhc3MgZG9lcyBub3RoaW5nIGJ1dCBkZWZpbmUgbmVzdGVkIHR5cGVkZWZzLiAgJUl0ZXJhdG9yIGNsYXNzZXMKKyAgICogIGNhbiBpbmhlcml0IGZyb20gdGhpcyBjbGFzcyB0byBzYXZlIHNvbWUgd29yay4gIFRoZSB0eXBlZGVmcyBhcmUgdGhlbgorICAgKiAgdXNlZCBpbiBzcGVjaWFsaXphdGlvbnMgYW5kIG92ZXJsb2FkaW5nLgorICAgKgorICAgKiAgSW4gcGFydGljdWxhciwgdGhlcmUgYXJlIG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHJlcXVpcmVtZW50cworICAgKiAgc3VjaCBhcyBAYyBvcGVyYXRvcisrIGFuZCB0aGUgbGlrZS4gIChIb3cgY291bGQgdGhlcmUgYmU/KQorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAorICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9UcCosIHR5cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgorICAgIHN0cnVjdCBpdGVyYXRvcgorICAgIHsKKyAgICAgIC8vLyBPbmUgb2YgdGhlIEBsaW5rIGl0ZXJhdG9yX3RhZ3MgdGFnIHR5cGVzQGVuZGxpbmsuCisgICAgICB0eXBlZGVmIF9DYXRlZ29yeSAgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICAvLy8gVGhlIHR5cGUgInBvaW50ZWQgdG8iIGJ5IHRoZSBpdGVyYXRvci4KKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOworICAgICAgLy8vIERpc3RhbmNlIGJldHdlZW4gaXRlcmF0b3JzIGlzIHJlcHJlc2VudGVkIGFzIHRoaXMgdHlwZS4KKyAgICAgIHR5cGVkZWYgX0Rpc3RhbmNlICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICAvLy8gVGhpcyB0eXBlIHJlcHJlc2VudHMgYSBwb2ludGVyLXRvLXZhbHVlX3R5cGUuCisgICAgICB0eXBlZGVmIF9Qb2ludGVyICAgcG9pbnRlcjsKKyAgICAgIC8vLyBUaGlzIHR5cGUgcmVwcmVzZW50cyBhIHJlZmVyZW5jZS10by12YWx1ZV90eXBlLgorICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBUcmFpdHMgY2xhc3MgZm9yIGl0ZXJhdG9ycy4KKyAgICoKKyAgICogIFRoaXMgY2xhc3MgZG9lcyBub3RoaW5nIGJ1dCBkZWZpbmUgbmVzdGVkIHR5cGVkZWZzLiAgVGhlIGdlbmVyYWwKKyAgICogIHZlcnNpb24gc2ltcGx5IEBhIGZvcndhcmRzIHRoZSBuZXN0ZWQgdHlwZWRlZnMgZnJvbSB0aGUgSXRlcmF0b3IKKyAgICogIGFyZ3VtZW50LiAgU3BlY2lhbGl6ZWQgdmVyc2lvbnMgZm9yIHBvaW50ZXJzIGFuZCBwb2ludGVycy10by1jb25zdAorICAgKiAgcHJvdmlkZSB0aWdodGVyLCBtb3JlIGNvcnJlY3Qgc2VtYW50aWNzLgorICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworX0dMSUJDWFhfSEFTX05FU1RFRF9UWVBFKGl0ZXJhdG9yX2NhdGVnb3J5KQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwKKwkgICBib29sID0gX19oYXNfaXRlcmF0b3JfY2F0ZWdvcnk8X0l0ZXJhdG9yPjo6dmFsdWU+CisgICAgc3RydWN0IF9faXRlcmF0b3JfdHJhaXRzIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgc3RydWN0IF9faXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvciwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgICAgICAgICByZWZlcmVuY2U7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cworICAgIDogcHVibGljIF9faXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4geyB9OworI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgICAgICAgICByZWZlcmVuY2U7CisgICAgfTsKKyNlbmRpZgorCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBwb2ludGVyIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPgorICAgIHsKKyAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICB9OworCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBjb25zdCBwb2ludGVyIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPgorICAgIHsKKyAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBub3QgYSBwYXJ0IG9mIHRoZSBDKysgc3RhbmRhcmQgYnV0IGlzIHN5bnRhY3RpYworICAgKiAgc3VnYXIgZm9yIGludGVybmFsIGxpYnJhcnkgdXNlIG9ubHkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgorICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQorICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQorICAgIHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCk7IH0KKworICAvL0B9CisKKyAgLy8gSWYgX0l0ZXJhdG9yIGhhcyBhIGJhc2UgcmV0dXJucyBpdCBvdGhlcndpc2UgX0l0ZXJhdG9yIGlzIHJldHVybmVkCisgIC8vIHVudG91Y2hlZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIGJvb2wgX0hhc0Jhc2U+CisgICAgc3RydWN0IF9JdGVyX2Jhc2UKKyAgICB7CisgICAgICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOworICAgICAgc3RhdGljIGl0ZXJhdG9yX3R5cGUgX1NfYmFzZShfSXRlcmF0b3IgX19pdCkKKyAgICAgIHsgcmV0dXJuIF9faXQ7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBzdHJ1Y3QgX0l0ZXJfYmFzZTxfSXRlcmF0b3IsIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX3R5cGUgaXRlcmF0b3JfdHlwZTsKKyAgICAgIHN0YXRpYyBpdGVyYXRvcl90eXBlIF9TX2Jhc2UoX0l0ZXJhdG9yIF9faXQpCisgICAgICB7IHJldHVybiBfX2l0LmJhc2UoKTsgfQorICAgIH07CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgdXNpbmcgX1JlcXVpcmVJbnB1dEl0ZXIgPSB0eXBlbmFtZQorICAgICAgZW5hYmxlX2lmPGlzX2NvbnZlcnRpYmxlPHR5cGVuYW1lCisJCWl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnksCisJCQkgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnPjo6dmFsdWU+Ojp0eXBlOworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9TVExfSVRFUkFUT1JfQkFTRV9UWVBFU19IICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfbGlzdC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2NzYwYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfbGlzdC5oCkBAIC0wLDAgKzEsMTY2OCBAQAorLy8gTGlzdCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgYml0cy9zdGxfbGlzdC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7bGlzdH0KKyAqLworCisjaWZuZGVmIF9TVExfTElTVF9ICisjZGVmaW5lIF9TVExfTElTVF9IIDEKKworI2luY2x1ZGUgPGJpdHMvY29uY2VwdF9jaGVjay5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgICAgLy8gU3VwcG9ydGluZyBzdHJ1Y3R1cmVzIGFyZSBzcGxpdCBpbnRvIGNvbW1vbiBhbmQgdGVtcGxhdGVkCisgICAgLy8gdHlwZXM7IHRoZSBsYXR0ZXIgcHVibGljbHkgaW5oZXJpdHMgZnJvbSB0aGUgZm9ybWVyIGluIGFuCisgICAgLy8gZWZmb3J0IHRvIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLiAgVGhpcyByZXN1bHRzIGluIHNvbWUKKyAgICAvLyAibmVlZGxlc3MiIHN0YXRpY19jYXN0J2luZyBsYXRlciBvbiwgYnV0IGl0J3MgYWxsIHNhZmUKKyAgICAvLyBkb3duY2FzdGluZy4KKworICAgIC8vLyBDb21tb24gcGFydCBvZiBhIG5vZGUgaW4gdGhlICVsaXN0LiAKKyAgICBzdHJ1Y3QgX0xpc3Rfbm9kZV9iYXNlCisgICAgeworICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9uZXh0OworICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9wcmV2OworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgc3dhcChfTGlzdF9ub2RlX2Jhc2UmIF9feCwgX0xpc3Rfbm9kZV9iYXNlJiBfX3kpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKworICAgICAgdm9pZAorICAgICAgX01fdHJhbnNmZXIoX0xpc3Rfbm9kZV9iYXNlKiBjb25zdCBfX2ZpcnN0LAorCQkgIF9MaXN0X25vZGVfYmFzZSogY29uc3QgX19sYXN0KSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3JldmVyc2UoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2hvb2soX0xpc3Rfbm9kZV9iYXNlKiBjb25zdCBfX3Bvc2l0aW9uKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3VuaG9vaygpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgICB9OworCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIC8vLyBBbiBhY3R1YWwgbm9kZSBpbiB0aGUgJWxpc3QuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0xpc3Rfbm9kZSA6IHB1YmxpYyBfX2RldGFpbDo6X0xpc3Rfbm9kZV9iYXNlCisgICAgeworICAgICAgLy8vPCBVc2VyJ3MgZGF0YS4KKyAgICAgIF9UcCBfTV9kYXRhOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIF9MaXN0X25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfX2RldGFpbDo6X0xpc3Rfbm9kZV9iYXNlKCksIF9NX2RhdGEoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSAKKyAgICAgICAgeyB9CisjZW5kaWYKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgbGlzdDo6aXRlcmF0b3IuCisgICAqCisgICAqICBBbGwgdGhlIGZ1bmN0aW9ucyBhcmUgb3Agb3ZlcmxvYWRzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9MaXN0X2l0ZXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgICAgIF9TZWxmOworICAgICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gICAgICAgICAgICAgICAgICAgIF9Ob2RlOworCisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisKKyAgICAgIF9MaXN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX01fbm9kZSgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX0xpc3RfaXRlcmF0b3IoX19kZXRhaWw6Ol9MaXN0X25vZGVfYmFzZSogX194KQorICAgICAgOiBfTV9ub2RlKF9feCkgeyB9CisKKyAgICAgIC8vIE11c3QgZG93bmNhc3QgZnJvbSBfTGlzdF9ub2RlX2Jhc2UgdG8gX0xpc3Rfbm9kZSB0byBnZXQgdG8gX01fZGF0YS4KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZSktPl9NX2RhdGE7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZSktPl9NX2RhdGEpOyB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX01fbm9kZS0+X01fbmV4dDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJX01fbm9kZSA9IF9NX25vZGUtPl9NX3ByZXY7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX01fbm9kZS0+X01fcHJldjsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQorCisgICAgICAvLyBUaGUgb25seSBtZW1iZXIgcG9pbnRzIHRvIHRoZSAlbGlzdCBlbGVtZW50LgorICAgICAgX19kZXRhaWw6Ol9MaXN0X25vZGVfYmFzZSogX01fbm9kZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgbGlzdDo6Y29uc3RfaXRlcmF0b3IuCisgICAqCisgICAqICBBbGwgdGhlIGZ1bmN0aW9ucyBhcmUgb3Agb3ZlcmxvYWRzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9MaXN0X2NvbnN0X2l0ZXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiBfTGlzdF9jb25zdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgIF9TZWxmOworICAgICAgdHlwZWRlZiBjb25zdCBfTGlzdF9ub2RlPF9UcD4gICAgICAgICAgICAgIF9Ob2RlOworICAgICAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisKKyAgICAgIF9MaXN0X2NvbnN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX01fbm9kZSgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX0xpc3RfY29uc3RfaXRlcmF0b3IoY29uc3QgX19kZXRhaWw6Ol9MaXN0X25vZGVfYmFzZSogX194KQorICAgICAgOiBfTV9ub2RlKF9feCkgeyB9CisKKyAgICAgIF9MaXN0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX3gpCisgICAgICA6IF9NX25vZGUoX194Ll9NX25vZGUpIHsgfQorCisgICAgICAvLyBNdXN0IGRvd25jYXN0IGZyb20gTGlzdF9ub2RlX2Jhc2UgdG8gX0xpc3Rfbm9kZSB0byBnZXQgdG8KKyAgICAgIC8vIF9NX2RhdGEuCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfTm9kZSo+KF9NX25vZGUpLT5fTV9kYXRhOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihzdGF0aWNfY2FzdDxfTm9kZSo+KF9NX25vZGUpLT5fTV9kYXRhKTsgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yLS0oKQorICAgICAgeworCV9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJX01fbm9kZSA9IF9NX25vZGUtPl9NX3ByZXY7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9ub2RlID09IF9feC5fTV9ub2RlOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7IH0KKworICAgICAgLy8gVGhlIG9ubHkgbWVtYmVyIHBvaW50cyB0byB0aGUgJWxpc3QgZWxlbWVudC4KKyAgICAgIGNvbnN0IF9fZGV0YWlsOjpfTGlzdF9ub2RlX2Jhc2UqIF9NX25vZGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfTGlzdF9pdGVyYXRvcjxfVmFsPiYgX194LAorCSAgICAgICBjb25zdCBfTGlzdF9jb25zdF9pdGVyYXRvcjxfVmFsPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0b3I8X1ZhbD4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IF9MaXN0X2NvbnN0X2l0ZXJhdG9yPF9WYWw+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KKworCisgIC8vLyBTZWUgYml0cy9zdGxfZGVxdWUuaCdzIF9EZXF1ZV9iYXNlIGZvciBhbiBleHBsYW5hdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX0xpc3RfYmFzZQorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBOT1RBIEJFTkUKKyAgICAgIC8vIFRoZSBzdG9yZWQgaW5zdGFuY2UgaXMgbm90IGFjdHVhbGx5IG9mICJhbGxvY2F0b3JfdHlwZSIncworICAgICAgLy8gdHlwZS4gIEluc3RlYWQgd2UgcmViaW5kIHRoZSB0eXBlIHRvCisgICAgICAvLyBBbGxvY2F0b3I8TGlzdF9ub2RlPFRwPj4sIHdoaWNoIGFjY29yZGluZyB0byBbMjAuMS41XS80CisgICAgICAvLyBzaG91bGQgcHJvYmFibHkgYmUgdGhlIHNhbWUuICBMaXN0X25vZGU8VHA+IGlzIG5vdCB0aGUgc2FtZQorICAgICAgLy8gc2l6ZSBhcyBUcCAoaXQncyB0d28gcG9pbnRlcnMgbGFyZ2VyKSwgYW5kIHNwZWNpYWxpemF0aW9ucyBvbgorICAgICAgLy8gVHAgbWF5IGdvIHVudXNlZCBiZWNhdXNlIExpc3Rfbm9kZTxUcD4gaXMgYmVpbmcgYm91bmQKKyAgICAgIC8vIGluc3RlYWQuCisgICAgICAvLworICAgICAgLy8gV2UgcHV0IHRoaXMgdG8gdGhlIHRlc3QgaW4gdGhlIGNvbnN0cnVjdG9ycyBhbmQgaW4KKyAgICAgIC8vIGdldF9hbGxvY2F0b3IsIHdoZXJlIHdlIHVzZSBjb252ZXJzaW9ucyBiZXR3ZWVuCisgICAgICAvLyBhbGxvY2F0b3JfdHlwZSBhbmQgX05vZGVfYWxsb2NfdHlwZS4gVGhlIGNvbnZlcnNpb24gaXMKKyAgICAgIC8vIHJlcXVpcmVkIGJ5IHRhYmxlIDMyIGluIFsyMC4xLjVdLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfTGlzdF9ub2RlPF9UcD4gPjo6b3RoZXIKKyAgICAgICAgX05vZGVfYWxsb2NfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBfVHBfYWxsb2NfdHlwZTsKKworICAgICAgc3RydWN0IF9MaXN0X2ltcGwKKyAgICAgIDogcHVibGljIF9Ob2RlX2FsbG9jX3R5cGUKKyAgICAgIHsKKwlfX2RldGFpbDo6X0xpc3Rfbm9kZV9iYXNlIF9NX25vZGU7CisKKwlfTGlzdF9pbXBsKCkKKwk6IF9Ob2RlX2FsbG9jX3R5cGUoKSwgX01fbm9kZSgpCisJeyB9CisKKwlfTGlzdF9pbXBsKGNvbnN0IF9Ob2RlX2FsbG9jX3R5cGUmIF9fYSkKKwk6IF9Ob2RlX2FsbG9jX3R5cGUoX19hKSwgX01fbm9kZSgpCisJeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJX0xpc3RfaW1wbChfTm9kZV9hbGxvY190eXBlJiYgX19hKQorCTogX05vZGVfYWxsb2NfdHlwZShzdGQ6Om1vdmUoX19hKSksIF9NX25vZGUoKQorCXsgfQorI2VuZGlmCisgICAgICB9OworCisgICAgICBfTGlzdF9pbXBsIF9NX2ltcGw7CisKKyAgICAgIF9MaXN0X25vZGU8X1RwPioKKyAgICAgIF9NX2dldF9ub2RlKCkKKyAgICAgIHsgcmV0dXJuIF9NX2ltcGwuX05vZGVfYWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCisgICAgICB7IF9NX2ltcGwuX05vZGVfYWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CisKKyAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9Ob2RlX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PF9Ob2RlX2FsbG9jX3R5cGUqPigmX01faW1wbCk7IH0KKworICAgICAgY29uc3QgX05vZGVfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX05vZGVfYWxsb2NfdHlwZSo+KCZfTV9pbXBsKTsgfQorCisgICAgICBfVHBfYWxsb2NfdHlwZQorICAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfVHBfYWxsb2NfdHlwZShfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIF9MaXN0X2Jhc2UoKQorICAgICAgOiBfTV9pbXBsKCkKKyAgICAgIHsgX01faW5pdCgpOyB9CisKKyAgICAgIF9MaXN0X2Jhc2UoY29uc3QgX05vZGVfYWxsb2NfdHlwZSYgX19hKQorICAgICAgOiBfTV9pbXBsKF9fYSkKKyAgICAgIHsgX01faW5pdCgpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBfTGlzdF9iYXNlKF9MaXN0X2Jhc2UmJiBfX3gpCisgICAgICA6IF9NX2ltcGwoc3RkOjptb3ZlKF9feC5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSkpCisgICAgICB7CisJX01faW5pdCgpOworCV9fZGV0YWlsOjpfTGlzdF9ub2RlX2Jhc2U6OnN3YXAoX01faW1wbC5fTV9ub2RlLCBfX3guX01faW1wbC5fTV9ub2RlKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvLyBUaGlzIGlzIHdoYXQgYWN0dWFsbHkgZGVzdHJveXMgdGhlIGxpc3QuCisgICAgICB+X0xpc3RfYmFzZSgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX2NsZWFyKCk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fY2xlYXIoKTsKKworICAgICAgdm9pZAorICAgICAgX01faW5pdCgpCisgICAgICB7CisgICAgICAgIHRoaXMtPl9NX2ltcGwuX01fbm9kZS5fTV9uZXh0ID0gJnRoaXMtPl9NX2ltcGwuX01fbm9kZTsKKyAgICAgICAgdGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX3ByZXYgPSAmdGhpcy0+X01faW1wbC5fTV9ub2RlOworICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgd2l0aCBsaW5lYXIgdGltZSBhY2Nlc3MgdG8gZWxlbWVudHMsCisgICAqICBhbmQgZml4ZWQgdGltZSBpbnNlcnRpb24vZGVsZXRpb24gYXQgYW55IHBvaW50IGluIHRoZSBzZXF1ZW5jZS4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgQHRwYXJhbSBfVHAgIFR5cGUgb2YgZWxlbWVudC4KKyAgICogIEB0cGFyYW0gX0FsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPF9UcD4uCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY2Ij5yZXZlcnNpYmxlIGNvbnRhaW5lcjwvYT4sIGFuZCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NyI+c2VxdWVuY2U8L2E+LCBpbmNsdWRpbmcgdGhlCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2OCI+b3B0aW9uYWwgc2VxdWVuY2UgcmVxdWlyZW1lbnRzPC9hPiB3aXRoIHRoZQorICAgKiAgJWV4Y2VwdGlvbiBvZiBAYyBhdCBhbmQgQGMgb3BlcmF0b3JbXS4KKyAgICoKKyAgICogIFRoaXMgaXMgYSBAZSBkb3VibHkgQGUgbGlua2VkICVsaXN0LiAgVHJhdmVyc2FsIHVwIGFuZCBkb3duIHRoZQorICAgKiAgJWxpc3QgcmVxdWlyZXMgbGluZWFyIHRpbWUsIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIGVsZW1lbnRzIChvcgorICAgKiAgQGUgbm9kZXMpIGlzIGRvbmUgaW4gY29uc3RhbnQgdGltZSwgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUKKyAgICogIGNoYW5nZSB0YWtlcyBwbGFjZS4gIFVubGlrZSBzdGQ6OnZlY3RvciBhbmQgc3RkOjpkZXF1ZSwKKyAgICogIHJhbmRvbS1hY2Nlc3MgaXRlcmF0b3JzIGFyZSBub3QgcHJvdmlkZWQsIHNvIHN1YnNjcmlwdGluZyAoIEBjCisgICAqICBbXSApIGFjY2VzcyBpcyBub3QgYWxsb3dlZC4gIEZvciBhbGdvcml0aG1zIHdoaWNoIG9ubHkgbmVlZAorICAgKiAgc2VxdWVudGlhbCBhY2Nlc3MsIHRoaXMgbGFjayBtYWtlcyBubyBkaWZmZXJlbmNlLgorICAgKgorICAgKiAgQWxzbyB1bmxpa2UgdGhlIG90aGVyIHN0YW5kYXJkIGNvbnRhaW5lcnMsIHN0ZDo6bGlzdCBwcm92aWRlcworICAgKiAgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtcyAldW5pcXVlIHRvIGxpbmtlZCBsaXN0cywgc3VjaCBhcworICAgKiAgc3BsaWNpbmcsIHNvcnRpbmcsIGFuZCBpbi1wbGFjZSByZXZlcnNhbC4KKyAgICoKKyAgICogIEEgY291cGxlIHBvaW50cyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgbGlzdDxUcD46CisgICAqCisgICAqICBGaXJzdCwgd2UgbmV2ZXIgYWN0dWFsbHkgYWxsb2NhdGUgYSBUcCwgd2UgYWxsb2NhdGUKKyAgICogIExpc3Rfbm9kZTxUcD4ncyBhbmQgdHJ1c3QgWzIwLjEuNV0vNCB0byBEVFJULiAgVGhpcyBpcyB0byBlbnN1cmUKKyAgICogIHRoYXQgYWZ0ZXIgZWxlbWVudHMgZnJvbSAlbGlzdDxYLEFsbG9jMT4gYXJlIHNwbGljZWQgaW50bworICAgKiAgJWxpc3Q8WCxBbGxvYzI+LCBkZXN0cm95aW5nIHRoZSBtZW1vcnkgb2YgdGhlIHNlY29uZCAlbGlzdCBpcyBhCisgICAqICB2YWxpZCBvcGVyYXRpb24sIGkuZS4sIEFsbG9jMSBnaXZldGggYW5kIEFsbG9jMiB0YWtldGggYXdheS4KKyAgICoKKyAgICogIFNlY29uZCwgYSAlbGlzdCBjb25jZXB0dWFsbHkgcmVwcmVzZW50ZWQgYXMKKyAgICogIEBjb2RlCisgICAqICAgIEEgPC0tLT4gQiA8LS0tPiBDIDwtLS0+IEQKKyAgICogIEBlbmRjb2RlCisgICAqICBpcyBhY3R1YWxseSBjaXJjdWxhcjsgYSBsaW5rIGV4aXN0cyBiZXR3ZWVuIEEgYW5kIEQuICBUaGUgJWxpc3QKKyAgICogIGNsYXNzIGhvbGRzIChhcyBpdHMgb25seSBkYXRhIG1lbWJlcikgYSBwcml2YXRlIGxpc3Q6Oml0ZXJhdG9yCisgICAqICBwb2ludGluZyB0byBAZSBELCBub3QgdG8gQGUgQSEgIFRvIGdldCB0byB0aGUgaGVhZCBvZiB0aGUgJWxpc3QsCisgICAqICB3ZSBzdGFydCBhdCB0aGUgdGFpbCBhbmQgbW92ZSBmb3J3YXJkIGJ5IG9uZS4gIFdoZW4gdGhpcyBtZW1iZXIKKyAgICogIGl0ZXJhdG9yJ3MgbmV4dC9wcmV2aW91cyBwb2ludGVycyByZWZlciB0byBpdHNlbGYsIHRoZSAlbGlzdCBpcworICAgKiAgJWVtcHR5LiAKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBsaXN0IDogcHJvdGVjdGVkIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+CisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp2YWx1ZV90eXBlICAgICAgICAgICAgICAgIF9BbGxvY192YWx1ZV90eXBlOworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9UcCwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMihfVHAsIF9BbGxvY192YWx1ZV90eXBlLCBfU2FtZVR5cGVDb25jZXB0KQorCisgICAgICB0eXBlZGVmIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+ICAgICAgICAgICAgICAgICAgICBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Ol9UcF9hbGxvY190eXBlCQkgX1RwX2FsbG9jX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpfTm9kZV9hbGxvY190eXBlCQkgX05vZGVfYWxsb2NfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcF9hbGxvY190eXBlOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHBfYWxsb2NfdHlwZTo6Y29uc3RfcG9pbnRlciAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwPiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfTGlzdF9jb25zdF9pdGVyYXRvcjxfVHA+ICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8gTm90ZSB0aGF0IHBvaW50ZXJzLXRvLV9Ob2RlJ3MgY2FuIGJlIGN0b3ItY29udmVydGVkIHRvCisgICAgICAvLyBpdGVyYXRvciB0eXBlcy4KKyAgICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+CQkJCSBfTm9kZTsKKworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2ltcGw7CisgICAgICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CisgICAgICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CisgICAgICB1c2luZyBfQmFzZTo6X01fZ2V0X1RwX2FsbG9jYXRvcjsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfTm9kZV9hbGxvY2F0b3I7CisKKyAgICAgIC8qKgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBbiBpbnN0YW5jZSBvZiB1c2VyIGRhdGEuCisgICAgICAgKgorICAgICAgICogIEFsbG9jYXRlcyBzcGFjZSBmb3IgYSBuZXcgbm9kZSBhbmQgY29uc3RydWN0cyBhIGNvcHkgb2YKKyAgICAgICAqICBAYSBfX2FyZ3MgaW4gaXQuCisgICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgICAgIF9Ob2RlKgorICAgICAgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCV9Ob2RlKiBfX3AgPSB0aGlzLT5fTV9nZXRfbm9kZSgpOworCV9fdHJ5CisJICB7CisJICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKS5jb25zdHJ1Y3QKKwkgICAgICAoc3RkOjpfX2FkZHJlc3NvZihfX3AtPl9NX2RhdGEpLCBfX3gpOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfTV9wdXRfbm9kZShfX3ApOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKwlyZXR1cm4gX19wOworICAgICAgfQorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBfTm9kZSoKKyAgICAgICAgX01fY3JlYXRlX25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgX05vZGUqIF9fcCA9IHRoaXMtPl9NX2dldF9ub2RlKCk7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkuY29uc3RydWN0KF9fcCwKKwkJCQkJCXN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgX01fcHV0X25vZGUoX19wKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgcmV0dXJuIF9fcDsKKwl9CisjZW5kaWYKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIFsyMy4yLjIuMV0gY29uc3RydWN0L2NvcHkvZGVzdHJveQorICAgICAgLy8gKGFzc2lnbigpIGFuZCBnZXRfYWxsb2NhdG9yKCkgYXJlIGFsc28gbGlzdGVkIGluIHRoaXMgc2VjdGlvbikKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBsaXN0KCkKKyAgICAgIDogX0Jhc2UoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWxpc3Qgd2l0aCBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGxpc3QoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIDogX0Jhc2UoX05vZGVfYWxsb2NfdHlwZShfX2EpKSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICVsaXN0IHdpdGggZGVmYXVsdCBjb25zdHJ1Y3RlZCBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGZpbGxzIHRoZSAlbGlzdCB3aXRoIEBhIF9fbiBkZWZhdWx0CisgICAgICAgKiAgY29uc3RydWN0ZWQgZWxlbWVudHMuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBsaXN0KHNpemVfdHlwZSBfX24pCisgICAgICA6IF9CYXNlKCkKKyAgICAgIHsgX01fZGVmYXVsdF9pbml0aWFsaXplKF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWxpc3Qgd2l0aCBjb3BpZXMgb2YgYW4gZXhlbXBsYXIgZWxlbWVudC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICogIEBwYXJhbSAgX192YWx1ZSAgQW4gZWxlbWVudCB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGZpbGxzIHRoZSAlbGlzdCB3aXRoIEBhIF9fbiBjb3BpZXMgb2YgQGEgX192YWx1ZS4KKyAgICAgICAqLworICAgICAgbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVlLAorCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfTm9kZV9hbGxvY190eXBlKF9fYSkpCisgICAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZShfX24sIF9fdmFsdWUpOyB9CisjZWxzZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJWxpc3Qgd2l0aCBjb3BpZXMgb2YgYW4gZXhlbXBsYXIgZWxlbWVudC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICogIEBwYXJhbSAgX192YWx1ZSAgQW4gZWxlbWVudCB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGZpbGxzIHRoZSAlbGlzdCB3aXRoIEBhIF9fbiBjb3BpZXMgb2YgQGEgX192YWx1ZS4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSA9IHZhbHVlX3R5cGUoKSwKKwkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX05vZGVfYWxsb2NfdHlwZShfX2EpKQorICAgICAgeyBfTV9maWxsX2luaXRpYWxpemUoX19uLCBfX3ZhbHVlKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJUxpc3QgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlbGlzdCB1c2VzIGEgY29weSBvZiB0aGUgYWxsb2NhdGlvbiBvYmplY3QgdXNlZAorICAgICAgICogIGJ5IEBhIF9feC4KKyAgICAgICAqLworICAgICAgbGlzdChjb25zdCBsaXN0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feC5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX2ZhbHNlX3R5cGUoKSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJUxpc3QgbW92ZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlbGlzdCBjb250YWlucyB0aGUgZXhhY3QgY29udGVudHMgb2YgQGEgX194LgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSBfX3ggYXJlIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAlbGlzdC4KKyAgICAgICAqLworICAgICAgbGlzdChsaXN0JiYgX194KSBub2V4Y2VwdAorICAgICAgOiBfQmFzZShzdGQ6Om1vdmUoX194KSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJWxpc3QgZnJvbSBhbiBpbml0aWFsaXplcl9saXN0CisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3Qgb2YgdmFsdWVfdHlwZS4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJWxpc3QgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyX2xpc3QgQGEgX19sLiAgVGhpcyBpcyBsaW5lYXIgaW4gX19sLnNpemUoKS4KKyAgICAgICAqLworICAgICAgbGlzdChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKyAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9Ob2RlX2FsbG9jX3R5cGUoX19hKSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBfX2ZhbHNlX3R5cGUoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVsaXN0IGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJWxpc3QgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICBbQGEgX19maXJzdCxAYSBfX2xhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiAod2hlcmUgTiBpcworICAgICAgICogIGRpc3RhbmNlKEBhIF9fZmlyc3QsQGEgX19sYXN0KSkuCisgICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyAgICAgICAgbGlzdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9Ob2RlX2FsbG9jX3R5cGUoX19hKSkKKyAgICAgICAgeyBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX19mYWxzZV90eXBlKCkpOyB9CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGxpc3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfTm9kZV9hbGxvY190eXBlKF9fYSkpCisgICAgICAgIHsgCisJICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKwl9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgTm8gZXhwbGljaXQgZHRvciBuZWVkZWQgYXMgdGhlIF9CYXNlIGR0b3IgdGFrZXMgY2FyZSBvZgorICAgICAgICogIHRoaW5ncy4gIFRoZSBfQmFzZSBkdG9yIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIG5vdGUKKyAgICAgICAqICB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8KKyAgICAgICAqICBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzCisgICAgICAgKiAgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVMaXN0IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJWxpc3Qgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSBfX3ggYXJlIGNvcGllZCwgYnV0IHVubGlrZSB0aGUgY29weQorICAgICAgICogIGNvbnN0cnVjdG9yLCB0aGUgYWxsb2NhdG9yIG9iamVjdCBpcyBub3QgY29waWVkLgorICAgICAgICovCisgICAgICBsaXN0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IGxpc3QmIF9feCk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVMaXN0IG1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbGlzdCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgX194IGFyZSBtb3ZlZCBpbnRvIHRoaXMgJWxpc3QgKHdpdGhvdXQgY29weWluZykuCisgICAgICAgKiAgQGEgX194IGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAlbGlzdAorICAgICAgICovCisgICAgICBsaXN0JgorICAgICAgb3BlcmF0b3I9KGxpc3QmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJUxpc3QgaW5pdGlhbGl6ZXIgbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sICBBbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlX3R5cGUuCisgICAgICAgKgorICAgICAgICogIFJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSAlbGlzdCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICBpbiB0aGUgaW5pdGlhbGl6ZXJfbGlzdCBAYSBfX2wuICBUaGlzIGlzIGxpbmVhciBpbiBsLnNpemUoKS4KKyAgICAgICAqLworICAgICAgbGlzdCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIGdpdmVuIHZhbHVlIHRvIGEgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBlbGVtZW50cyB0byBiZSBhc3NpZ25lZC4KKyAgICAgICAqICBAcGFyYW0gIF9fdmFsICBWYWx1ZSB0byBiZSBhc3NpZ25lZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICVsaXN0IHdpdGggQGEgX19uIGNvcGllcyBvZiB0aGUgZ2l2ZW4KKyAgICAgICAqICB2YWx1ZS4gIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlICVsaXN0CisgICAgICAgKiAgYW5kIHRoYXQgdGhlIHJlc3VsdGluZyAlbGlzdCdzIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIG51bWJlcgorICAgICAgICogIG9mIGVsZW1lbnRzIGFzc2lnbmVkLiAgT2xkIGRhdGEgbWF5IGJlIGxvc3QuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKKyAgICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ25zIGEgcmFuZ2UgdG8gYSAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAlbGlzdCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgcmFuZ2UgW0BhIF9fZmlyc3QsQGEgX19sYXN0KS4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJWxpc3QgYW5kCisgICAgICAgKiAgdGhhdCB0aGUgcmVzdWx0aW5nICVsaXN0J3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mCisgICAgICAgKiAgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX19mYWxzZV90eXBlKCkpOyB9CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgLy8gQ2hlY2sgd2hldGhlciBpdCdzIGFuIGludGVncmFsIHR5cGUuICBJZiBzbywgaXQncyBub3QgYW4gaXRlcmF0b3IuCisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKwl9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhbiBpbml0aWFsaXplcl9saXN0IHRvIGEgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3Qgb2YgdmFsdWVfdHlwZS4KKyAgICAgICAqCisgICAgICAgKiAgUmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhlICVsaXN0IHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGluIHRoZSBpbml0aWFsaXplcl9saXN0IEBhIF9fbC4gIFRoaXMgaXMgbGluZWFyIGluIF9fbC5zaXplKCkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgdGhpcy0+YXNzaWduKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8vIEdldCBhIGNvcHkgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIG9iamVjdC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgLy8gaXRlcmF0b3JzCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUKKyAgICAgICAqICAlbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5IGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX25vZGUuX01fbmV4dCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGZpcnN0IGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX25leHQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJWxpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeSBlbGVtZW50CisgICAgICAgKiAgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoJnRoaXMtPl9NX2ltcGwuX01fbm9kZSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0CisgICAgICAgKiAgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJWxpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoJnRoaXMtPl9NX2ltcGwuX01fbm9kZSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50CisgICAgICAgKiAgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0bworICAgICAgICogIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgJWxpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbgorICAgICAgICogIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgJWxpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiByZXZlcnNlCisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgZmlyc3QgZWxlbWVudCBpbiB0aGUgJWxpc3QuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX25leHQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdAorICAgICAgICogIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigmdGhpcy0+X01faW1wbC5fTV9ub2RlKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0bworICAgICAgICogIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlICVsaXN0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gb25lCisgICAgICAgKiAgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSAlbGlzdC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIHJldmVyc2UKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8gWzIzLjIuMi4yXSBjYXBhY2l0eQorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSAlbGlzdCBpcyBlbXB0eS4gIChUaHVzIGJlZ2luKCkgd291bGQgZXF1YWwKKyAgICAgICAqICBlbmQoKS4pCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01fbm9kZS5fTV9uZXh0ID09ICZ0aGlzLT5fTV9pbXBsLl9NX25vZGU7IH0KKworICAgICAgLyoqICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICVsaXN0LiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGQ6OmRpc3RhbmNlKGJlZ2luKCksIGVuZCgpKTsgfQorCisgICAgICAvKiogIFJldHVybnMgdGhlIHNpemUoKSBvZiB0aGUgbGFyZ2VzdCBwb3NzaWJsZSAlbGlzdC4gICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLm1heF9zaXplKCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBSZXNpemVzIHRoZSAlbGlzdCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gX19uZXdfc2l6ZSBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICVsaXN0IHNob3VsZCBjb250YWluLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgJXJlc2l6ZSB0aGUgJWxpc3QgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZSAlbGlzdCdzCisgICAgICAgKiAgY3VycmVudCBzaXplIHRoZSAlbGlzdCBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSBkZWZhdWx0CisgICAgICAgKiAgY29uc3RydWN0ZWQgZWxlbWVudHMgYXJlIGFwcGVuZGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgUmVzaXplcyB0aGUgJWxpc3QgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtIF9fbmV3X3NpemUgTnVtYmVyIG9mIGVsZW1lbnRzIHRoZSAlbGlzdCBzaG91bGQgY29udGFpbi4KKyAgICAgICAqICBAcGFyYW0gX194IERhdGEgd2l0aCB3aGljaCBuZXcgZWxlbWVudHMgc2hvdWxkIGJlIHBvcHVsYXRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsICVyZXNpemUgdGhlICVsaXN0IHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMuICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgJWxpc3QncworICAgICAgICogIGN1cnJlbnQgc2l6ZSB0aGUgJWxpc3QgaXMgdHJ1bmNhdGVkLCBvdGhlcndpc2UgdGhlICVsaXN0IGlzCisgICAgICAgKiAgZXh0ZW5kZWQgYW5kIG5ldyBlbGVtZW50cyBhcmUgcG9wdWxhdGVkIHdpdGggZ2l2ZW4gZGF0YS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOworI2Vsc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBSZXNpemVzIHRoZSAlbGlzdCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gX19uZXdfc2l6ZSBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICVsaXN0IHNob3VsZCBjb250YWluLgorICAgICAgICogIEBwYXJhbSBfX3ggRGF0YSB3aXRoIHdoaWNoIG5ldyBlbGVtZW50cyBzaG91bGQgYmUgcG9wdWxhdGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgJXJlc2l6ZSB0aGUgJWxpc3QgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZSAlbGlzdCdzCisgICAgICAgKiAgY3VycmVudCBzaXplIHRoZSAlbGlzdCBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSB0aGUgJWxpc3QgaXMKKyAgICAgICAqICBleHRlbmRlZCBhbmQgbmV3IGVsZW1lbnRzIGFyZSBwb3B1bGF0ZWQgd2l0aCBnaXZlbiBkYXRhLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIHZhbHVlX3R5cGUgX194ID0gdmFsdWVfdHlwZSgpKTsKKyNlbmRpZgorCisgICAgICAvLyBlbGVtZW50IGFjY2VzcworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVsaXN0LgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJWxpc3QuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gKmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBsYXN0IGVsZW1lbnQKKyAgICAgICAqICBvZiB0aGUgJWxpc3QuCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgYmFjaygpCisgICAgICB7IAorCWl0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CisJLS1fX3RtcDsKKwlyZXR1cm4gKl9fdG1wOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJWxpc3QuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYmFjaygpIGNvbnN0CisgICAgICB7IAorCWNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CisJLS1fX3RtcDsKKwlyZXR1cm4gKl9fdG1wOworICAgICAgfQorCisgICAgICAvLyBbMjMuMi4yLjNdIG1vZGlmaWVycworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBZGQgZGF0YSB0byB0aGUgZnJvbnQgb2YgdGhlICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgX194ICBEYXRhIHRvIGJlIGFkZGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbgorICAgICAgICogIGVsZW1lbnQgYXQgdGhlIGZyb250IG9mIHRoZSAlbGlzdCBhbmQgYXNzaWducyB0aGUgZ2l2ZW4gZGF0YQorICAgICAgICogIHRvIGl0LiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4gYmUKKyAgICAgICAqICBkb25lIGluIGNvbnN0YW50IHRpbWUsIGFuZCBkb2VzIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBhbmQKKyAgICAgICAqICByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwdXNoX2Zyb250KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgdGhpcy0+X01faW5zZXJ0KGJlZ2luKCksIF9feCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQodmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgdGhpcy0+X01faW5zZXJ0KGJlZ2luKCksIHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBlbXBsYWNlX2Zyb250KF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7IHRoaXMtPl9NX2luc2VydChiZWdpbigpLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmVzIGZpcnN0IGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIEl0IHNocmlua3MgdGhlICVsaXN0IGJ5CisgICAgICAgKiAgb25lLiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4gYmUgZG9uZQorICAgICAgICogIGluIGNvbnN0YW50IHRpbWUsIGFuZCBvbmx5IGludmFsaWRhdGVzIGl0ZXJhdG9ycy9yZWZlcmVuY2VzIHRvCisgICAgICAgKiAgdGhlIGVsZW1lbnQgYmVpbmcgcmVtb3ZlZC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IG5vIGRhdGEgaXMgcmV0dXJuZWQsIGFuZCBpZiB0aGUgZmlyc3QgZWxlbWVudCdzIGRhdGEKKyAgICAgICAqICBpcyBuZWVkZWQsIGl0IHNob3VsZCBiZSByZXRyaWV2ZWQgYmVmb3JlIHBvcF9mcm9udCgpIGlzCisgICAgICAgKiAgY2FsbGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3BfZnJvbnQoKQorICAgICAgeyB0aGlzLT5fTV9lcmFzZShiZWdpbigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFkZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgX194ICBEYXRhIHRvIGJlIGFkZGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbgorICAgICAgICogIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgJWxpc3QgYW5kIGFzc2lnbnMgdGhlIGdpdmVuIGRhdGEgdG8KKyAgICAgICAqICBpdC4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWxpc3QgdGhpcyBvcGVyYXRpb24gY2FuIGJlIGRvbmUKKyAgICAgICAqICBpbiBjb25zdGFudCB0aW1lLCBhbmQgZG9lcyBub3QgaW52YWxpZGF0ZSBpdGVyYXRvcnMgYW5kCisgICAgICAgKiAgcmVmZXJlbmNlcy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgdGhpcy0+X01faW5zZXJ0KGVuZCgpLCBfX3gpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBwdXNoX2JhY2sodmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgdGhpcy0+X01faW5zZXJ0KGVuZCgpLCBzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9iYWNrKF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7IHRoaXMtPl9NX2luc2VydChlbmQoKSwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlcyBsYXN0IGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsIHN0YWNrIG9wZXJhdGlvbi4gIEl0IHNocmlua3MgdGhlICVsaXN0IGJ5CisgICAgICAgKiAgb25lLiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4gYmUgZG9uZQorICAgICAgICogIGluIGNvbnN0YW50IHRpbWUsIGFuZCBvbmx5IGludmFsaWRhdGVzIGl0ZXJhdG9ycy9yZWZlcmVuY2VzIHRvCisgICAgICAgKiAgdGhlIGVsZW1lbnQgYmVpbmcgcmVtb3ZlZC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IG5vIGRhdGEgaXMgcmV0dXJuZWQsIGFuZCBpZiB0aGUgbGFzdCBlbGVtZW50J3MgZGF0YQorICAgICAgICogIGlzIG5lZWRlZCwgaXQgc2hvdWxkIGJlIHJldHJpZXZlZCBiZWZvcmUgcG9wX2JhY2soKSBpcyBjYWxsZWQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBvcF9iYWNrKCkKKyAgICAgIHsgdGhpcy0+X01fZXJhc2UoaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX3ByZXYpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3RzIG9iamVjdCBpbiAlbGlzdCBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQSBjb25zdF9pdGVyYXRvciBpbnRvIHRoZSAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fYXJncyAgQXJndW1lbnRzLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBpbnNlcnRlZCBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGFuIG9iamVjdCBvZiB0eXBlIFQgY29uc3RydWN0ZWQKKyAgICAgICAqICB3aXRoIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSBiZWZvcmUgdGhlIHNwZWNpZmllZAorICAgICAgICogIGxvY2F0aW9uLiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlbGlzdCB0aGlzIG9wZXJhdGlvbiBjYW4KKyAgICAgICAqICBiZSBkb25lIGluIGNvbnN0YW50IHRpbWUsIGFuZCBkb2VzIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycworICAgICAgICogIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgZW1wbGFjZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncyk7CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGdpdmVuIHZhbHVlIGludG8gJWxpc3QgYmVmb3JlIHNwZWNpZmllZCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgX194ICBEYXRhIHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBpbnNlcnRlZCBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGEgY29weSBvZiB0aGUgZ2l2ZW4gdmFsdWUgYmVmb3JlCisgICAgICAgKiAgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4gIER1ZSB0byB0aGUgbmF0dXJlIG9mIGEgJWxpc3QgdGhpcworICAgICAgICogIG9wZXJhdGlvbiBjYW4gYmUgZG9uZSBpbiBjb25zdGFudCB0aW1lLCBhbmQgZG9lcyBub3QKKyAgICAgICAqICBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGdpdmVuIHJ2YWx1ZSBpbnRvICVsaXN0IGJlZm9yZSBzcGVjaWZpZWQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZGF0YS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhIGNvcHkgb2YgdGhlIGdpdmVuIHJ2YWx1ZSBiZWZvcmUKKyAgICAgICAqICB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAlbGlzdCB0aGlzCisgICAgICAgKiAgb3BlcmF0aW9uIGNhbiBiZSBkb25lIGluIGNvbnN0YW50IHRpbWUsIGFuZCBkb2VzIG5vdAorICAgICAgICogIGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyByZXR1cm4gZW1wbGFjZShfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIHRoZSBjb250ZW50cyBvZiBhbiBpbml0aWFsaXplcl9saXN0IGludG8gJWxpc3QKKyAgICAgICAqICAgICAgICAgIGJlZm9yZSBzcGVjaWZpZWQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3AgIEFuIGl0ZXJhdG9yIGludG8gdGhlICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19sICBBbiBpbml0aWFsaXplcl9saXN0IG9mIHZhbHVlX3R5cGUuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgY29waWVzIG9mIHRoZSBkYXRhIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyX2xpc3QgQGEgbCBpbnRvIHRoZSAlbGlzdCBiZWZvcmUgdGhlIGxvY2F0aW9uCisgICAgICAgKiAgc3BlY2lmaWVkIGJ5IEBhIHAuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0aW9uIGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc2VydGVkIGFuZAorICAgICAgICogIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgdGhpcy0+aW5zZXJ0KF9fcCwgX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgYSBudW1iZXIgb2YgY29waWVzIG9mIGdpdmVuIGRhdGEgaW50byB0aGUgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBBbiBpdGVyYXRvciBpbnRvIHRoZSAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX194ICBEYXRhIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlCisgICAgICAgKiAgZ2l2ZW4gZGF0YSBiZWZvcmUgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBAYSBwb3NpdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBvcGVyYXRpb24gaXMgbGluZWFyIGluIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW5zZXJ0ZWQgYW5kCisgICAgICAgKiAgZG9lcyBub3QgaW52YWxpZGF0ZSBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJbGlzdCBfX3RtcChfX24sIF9feCwgZ2V0X2FsbG9jYXRvcigpKTsKKwlzcGxpY2UoX19wb3NpdGlvbiwgX190bXApOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgYSByYW5nZSBpbnRvIHRoZSAlbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gdGhlIHJhbmdlIFtAYQorICAgICAgICogIGZpcnN0LEBhIGxhc3QpIGludG8gdGhlICVsaXN0IGJlZm9yZSB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5CisgICAgICAgKiAgQGEgcG9zaXRpb24uCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0aW9uIGlzIGxpbmVhciBpbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluc2VydGVkIGFuZAorICAgICAgICogIGRvZXMgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzLgorICAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICBsaXN0IF9fdG1wKF9fZmlyc3QsIF9fbGFzdCwgZ2V0X2FsbG9jYXRvcigpKTsKKwkgIHNwbGljZShfX3Bvc2l0aW9uLCBfX3RtcCk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBlbGVtZW50IGF0IGdpdmVuIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIG5leHQgZWxlbWVudCAob3IgZW5kKCkpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgZXJhc2UgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aHVzCisgICAgICAgKiAgc2hvcnRlbiB0aGUgJWxpc3QgYnkgb25lLgorICAgICAgICoKKyAgICAgICAqICBEdWUgdG8gdGhlIG5hdHVyZSBvZiBhICVsaXN0IHRoaXMgb3BlcmF0aW9uIGNhbiBiZSBkb25lIGluCisgICAgICAgKiAgY29uc3RhbnQgdGltZSwgYW5kIG9ubHkgaW52YWxpZGF0ZXMgaXRlcmF0b3JzL3JlZmVyZW5jZXMgdG8KKyAgICAgICAqICB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkLiAgVGhlIHVzZXIgaXMgYWxzbyBjYXV0aW9uZWQgdGhhdAorICAgICAgICogIHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50CisgICAgICAgKiAgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluCisgICAgICAgKiAgYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgYSByYW5nZSBvZiBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgQGEgbGFzdAorICAgICAgICogICAgICAgICAgIHByaW9yIHRvIGVyYXNpbmcgKG9yIGVuZCgpKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGVyYXNlIHRoZSBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgQGEKKyAgICAgICAqICBbZmlyc3QsbGFzdCkgYW5kIHNob3J0ZW4gdGhlICVsaXN0IGFjY29yZGluZ2x5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdGlvbiBpcyBsaW5lYXIgdGltZSBpbiB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgYW5kIG9ubHkKKyAgICAgICAqICBpbnZhbGlkYXRlcyBpdGVyYXRvcnMvcmVmZXJlbmNlcyB0byB0aGUgZWxlbWVudCBiZWluZyByZW1vdmVkLgorICAgICAgICogIFRoZSB1c2VyIGlzIGFsc28gY2F1dGlvbmVkIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUKKyAgICAgICAqICBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUKKyAgICAgICAqICBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIKKyAgICAgICAqICBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCXdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIF9fZmlyc3QgPSBlcmFzZShfX2ZpcnN0KTsKKwlyZXR1cm4gX19sYXN0OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgX194ICBBICVsaXN0IG9mIHRoZSBzYW1lIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBleGNoYW5nZXMgdGhlIGVsZW1lbnRzIGJldHdlZW4gdHdvIGxpc3RzIGluIGNvbnN0YW50CisgICAgICAgKiAgdGltZS4gIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHN0ZDo6c3dhcCgpIGZ1bmN0aW9uIGlzCisgICAgICAgKiAgc3BlY2lhbGl6ZWQgc3VjaCB0aGF0IHN0ZDo6c3dhcChsMSxsMikgd2lsbCBmZWVkIHRvIHRoaXMKKyAgICAgICAqICBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChsaXN0JiBfX3gpCisgICAgICB7CisJX19kZXRhaWw6Ol9MaXN0X25vZGVfYmFzZTo6c3dhcCh0aGlzLT5fTV9pbXBsLl9NX25vZGUsIAorCQkJCQlfX3guX01faW1wbC5fTV9ub2RlKTsKKworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyA0MzEuIFN3YXBwaW5nIGNvbnRhaW5lcnMgd2l0aCB1bmVxdWFsIGFsbG9jYXRvcnMuCisJc3RkOjpfX2FsbG9jX3N3YXA8dHlwZW5hbWUgX0Jhc2U6Ol9Ob2RlX2FsbG9jX3R5cGU+OjoKKwkgIF9TX2RvX2l0KF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLCBfX3guX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBFcmFzZXMgYWxsIHRoZSBlbGVtZW50cy4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzCisgICAgICAgKiAgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUKKyAgICAgICAqICBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuCisgICAgICAgKiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworICAgICAgICBfQmFzZTo6X01fY2xlYXIoKTsKKyAgICAgICAgX0Jhc2U6Ol9NX2luaXQoKTsKKyAgICAgIH0KKworICAgICAgLy8gWzIzLjIuMi40XSBsaXN0IG9wZXJhdGlvbnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IGNvbnRlbnRzIG9mIGFub3RoZXIgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBpbnNlcnQgYmVmb3JlLgorICAgICAgICogIEBwYXJhbSAgX194ICBTb3VyY2UgbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGVsZW1lbnRzIG9mIEBhIF9feCBhcmUgaW5zZXJ0ZWQgaW4gY29uc3RhbnQgdGltZSBpbiBmcm9udCBvZgorICAgICAgICogIHRoZSBlbGVtZW50IHJlZmVyZW5jZWQgYnkgQGEgX19wb3NpdGlvbi4gIEBhIF9feCBiZWNvbWVzIGFuIGVtcHR5CisgICAgICAgKiAgbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgUmVxdWlyZXMgdGhpcyAhPSBAYSBfX3guCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYmIF9feCkKKyNlbHNlCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQorI2VuZGlmCisgICAgICB7CisJaWYgKCFfX3guZW1wdHkoKSkKKwkgIHsKKwkgICAgX01fY2hlY2tfZXF1YWxfYWxsb2NhdG9ycyhfX3gpOworCisJICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOworCSAgfQorICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCkKKyAgICAgIHsgc3BsaWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IGVsZW1lbnQgZnJvbSBhbm90aGVyICVsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGVsZW1lbnQgdG8gaW5zZXJ0IGJlZm9yZS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgU291cmNlIGxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2kgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBlbGVtZW50IHRvIG1vdmUuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGVsZW1lbnQgaW4gbGlzdCBAYSBfX3ggcmVmZXJlbmNlZCBieSBAYSBfX2kgYW5kCisgICAgICAgKiAgaW5zZXJ0cyBpdCBpbnRvIHRoZSBjdXJyZW50IGxpc3QgYmVmb3JlIEBhIF9fcG9zaXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYmIF9feCwgaXRlcmF0b3IgX19pKQorI2Vsc2UKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gsIGl0ZXJhdG9yIF9faSkKKyNlbmRpZgorICAgICAgeworCWl0ZXJhdG9yIF9faiA9IF9faTsKKwkrK19fajsKKwlpZiAoX19wb3NpdGlvbiA9PSBfX2kgfHwgX19wb3NpdGlvbiA9PSBfX2opCisJICByZXR1cm47CisKKwlpZiAodGhpcyAhPSAmX194KQorCSAgX01fY2hlY2tfZXF1YWxfYWxsb2NhdG9ycyhfX3gpOworCisJdGhpcy0+X01fdHJhbnNmZXIoX19wb3NpdGlvbiwgX19pLCBfX2opOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorICAgICAgeyBzcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCksIF9faSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCByYW5nZSBmcm9tIGFub3RoZXIgJWxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZWxlbWVudCB0byBpbnNlcnQgYmVmb3JlLgorICAgICAgICogIEBwYXJhbSAgX194ICBTb3VyY2UgbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHRoZSBzdGFydCBvZiByYW5nZSBpbiB4LgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZW5kIG9mIHJhbmdlIGluIHguCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgZWxlbWVudHMgaW4gdGhlIHJhbmdlIFtfX2ZpcnN0LF9fbGFzdCkgYW5kIGluc2VydHMgdGhlbQorICAgICAgICogIGJlZm9yZSBAYSBfX3Bvc2l0aW9uIGluIGNvbnN0YW50IHRpbWUuCisgICAgICAgKgorICAgICAgICogIFVuZGVmaW5lZCBpZiBAYSBfX3Bvc2l0aW9uIGlzIGluIFtfX2ZpcnN0LF9fbGFzdCkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYmIF9feCwgaXRlcmF0b3IgX19maXJzdCwKKwkgICAgIGl0ZXJhdG9yIF9fbGFzdCkKKyNlbHNlCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194LCBpdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgaXRlcmF0b3IgX19sYXN0KQorI2VuZGlmCisgICAgICB7CisJaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgeworCSAgICBpZiAodGhpcyAhPSAmX194KQorCSAgICAgIF9NX2NoZWNrX2VxdWFsX2FsbG9jYXRvcnMoX194KTsKKworCSAgICB0aGlzLT5fTV90cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QpOworCSAgfQorICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyBzcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBhbGwgZWxlbWVudHMgZXF1YWwgdG8gdmFsdWUuCisgICAgICAgKiAgQHBhcmFtICBfX3ZhbHVlICBUaGUgdmFsdWUgdG8gcmVtb3ZlLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGxpc3QgZXF1YWwgdG8gQGEgdmFsdWUuCisgICAgICAgKiAgUmVtYWluaW5nIGVsZW1lbnRzIHN0YXkgaW4gbGlzdCBvcmRlci4gIE5vdGUgdGhhdCB0aGlzCisgICAgICAgKiAgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdAorICAgICAgICogIHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MKKyAgICAgICAqICByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGFsbCBlbGVtZW50cyBzYXRpc2Z5aW5nIGEgcHJlZGljYXRlLgorICAgICAgICogIEB0cGFyYW0gIF9QcmVkaWNhdGUgIFVuYXJ5IHByZWRpY2F0ZSBmdW5jdGlvbiBvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgZXZlcnkgZWxlbWVudCBpbiB0aGUgbGlzdCBmb3Igd2hpY2ggdGhlIHByZWRpY2F0ZQorICAgICAgICogIHJldHVybnMgdHJ1ZS4gIFJlbWFpbmluZyBlbGVtZW50cyBzdGF5IGluIGxpc3Qgb3JkZXIuICBOb3RlCisgICAgICAgKiAgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlCisgICAgICAgKiAgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcworICAgICAgICogIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICAgIHZvaWQKKyAgICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBjb25zZWN1dGl2ZSBkdXBsaWNhdGUgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIEZvciBlYWNoIGNvbnNlY3V0aXZlIHNldCBvZiBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIHZhbHVlLAorICAgICAgICogIHJlbW92ZSBhbGwgYnV0IHRoZSBmaXJzdCBvbmUuICBSZW1haW5pbmcgZWxlbWVudHMgc3RheSBpbgorICAgICAgICogIGxpc3Qgb3JkZXIuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUKKyAgICAgICAqICBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLAorICAgICAgICogIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcKKyAgICAgICAqICB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICB1bmlxdWUoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgY29uc2VjdXRpdmUgZWxlbWVudHMgc2F0aXNmeWluZyBhIHByZWRpY2F0ZS4KKyAgICAgICAqICBAdHBhcmFtIF9CaW5hcnlQcmVkaWNhdGUgIEJpbmFyeSBwcmVkaWNhdGUgZnVuY3Rpb24gb3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBGb3IgZWFjaCBjb25zZWN1dGl2ZSBzZXQgb2YgZWxlbWVudHMgW2ZpcnN0LGxhc3QpIHRoYXQKKyAgICAgICAqICBzYXRpc2Z5IHByZWRpY2F0ZShmaXJzdCxpKSB3aGVyZSBpIGlzIGFuIGl0ZXJhdG9yIGluCisgICAgICAgKiAgW2ZpcnN0LGxhc3QpLCByZW1vdmUgYWxsIGJ1dCB0aGUgZmlyc3Qgb25lLiAgUmVtYWluaW5nCisgICAgICAgKiAgZWxlbWVudHMgc3RheSBpbiBsaXN0IG9yZGVyLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seQorICAgICAgICogIGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZQorICAgICAgICogIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4KKyAgICAgICAqICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgICAgICB2b2lkCisgICAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNZXJnZSBzb3J0ZWQgbGlzdHMuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIFNvcnRlZCBsaXN0IHRvIG1lcmdlLgorICAgICAgICoKKyAgICAgICAqICBBc3N1bWVzIHRoYXQgYm90aCBAYSBfX3ggYW5kIHRoaXMgbGlzdCBhcmUgc29ydGVkIGFjY29yZGluZyB0bworICAgICAgICogIG9wZXJhdG9yPCgpLiAgTWVyZ2VzIGVsZW1lbnRzIG9mIEBhIF9feCBpbnRvIHRoaXMgbGlzdCBpbgorICAgICAgICogIHNvcnRlZCBvcmRlciwgbGVhdmluZyBAYSBfX3ggZW1wdHkgd2hlbiBjb21wbGV0ZS4gIEVsZW1lbnRzIGluCisgICAgICAgKiAgdGhpcyBsaXN0IHByZWNlZGUgZWxlbWVudHMgaW4gQGEgX194IHRoYXQgYXJlIGVxdWFsLgorICAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgbWVyZ2UobGlzdCYmIF9feCk7CisKKyAgICAgIHZvaWQKKyAgICAgIG1lcmdlKGxpc3QmIF9feCkKKyAgICAgIHsgbWVyZ2Uoc3RkOjptb3ZlKF9feCkpOyB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgbWVyZ2UobGlzdCYgX194KTsKKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1lcmdlIHNvcnRlZCBsaXN0cyBhY2NvcmRpbmcgdG8gY29tcGFyaXNvbiBmdW5jdGlvbi4KKyAgICAgICAqICBAdHBhcmFtIF9TdHJpY3RXZWFrT3JkZXJpbmcgQ29tcGFyaXNvbiBmdW5jdGlvbiBkZWZpbmluZworICAgICAgICogIHNvcnQgb3JkZXIuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIFNvcnRlZCBsaXN0IHRvIG1lcmdlLgorICAgICAgICogIEBwYXJhbSAgX19jb21wICBDb21wYXJpc29uIGZ1bmN0b3IuCisgICAgICAgKgorICAgICAgICogIEFzc3VtZXMgdGhhdCBib3RoIEBhIF9feCBhbmQgdGhpcyBsaXN0IGFyZSBzb3J0ZWQgYWNjb3JkaW5nIHRvCisgICAgICAgKiAgU3RyaWN0V2Vha09yZGVyaW5nLiAgTWVyZ2VzIGVsZW1lbnRzIG9mIEBhIF9feCBpbnRvIHRoaXMgbGlzdAorICAgICAgICogIGluIHNvcnRlZCBvcmRlciwgbGVhdmluZyBAYSBfX3ggZW1wdHkgd2hlbiBjb21wbGV0ZS4gIEVsZW1lbnRzCisgICAgICAgKiAgaW4gdGhpcyBsaXN0IHByZWNlZGUgZWxlbWVudHMgaW4gQGEgX194IHRoYXQgYXJlIGVxdWl2YWxlbnQKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gU3RyaWN0V2Vha09yZGVyaW5nKCkuCisgICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgICB2b2lkCisgICAgICAgIG1lcmdlKGxpc3QmJiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KKyAgICAgICAgdm9pZAorICAgICAgICBtZXJnZShsaXN0JiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQorICAgICAgICB7IG1lcmdlKHN0ZDo6bW92ZShfX3gpLCBfX2NvbXApOyB9CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KKyAgICAgICAgdm9pZAorICAgICAgICBtZXJnZShsaXN0JiBfX3gsIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKTsKKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldmVyc2UgdGhlIGVsZW1lbnRzIGluIGxpc3QuCisgICAgICAgKgorICAgICAgICogIFJldmVyc2UgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IGluIGxpbmVhciB0aW1lLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXZlcnNlKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgdGhpcy0+X01faW1wbC5fTV9ub2RlLl9NX3JldmVyc2UoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNvcnQgdGhlIGVsZW1lbnRzLgorICAgICAgICoKKyAgICAgICAqICBTb3J0cyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IGluIE5sb2dOIHRpbWUuICBFcXVpdmFsZW50CisgICAgICAgKiAgZWxlbWVudHMgcmVtYWluIGluIGxpc3Qgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNvcnQoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTb3J0IHRoZSBlbGVtZW50cyBhY2NvcmRpbmcgdG8gY29tcGFyaXNvbiBmdW5jdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgU29ydHMgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCBpbiBObG9nTiB0aW1lLiAgRXF1aXZhbGVudAorICAgICAgICogIGVsZW1lbnRzIHJlbWFpbiBpbiBsaXN0IG9yZGVyLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgICB2b2lkCisgICAgICAgIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBJbnRlcm5hbCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgZm9sbG93LgorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGNvbnN0cnVjdG9yIHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKQorICAgICAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksIF9feCk7IH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSByYW5nZSBjb25zdHJ1Y3RvciB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICAgICAgX19mYWxzZV90eXBlKQorICAgICAgICB7CisJICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJICAgIGVtcGxhY2VfYmFjaygqX19maXJzdCk7CisjZWxzZQorCSAgICBwdXNoX2JhY2soKl9fZmlyc3QpOworI2VuZGlmCisJfQorCisgICAgICAvLyBDYWxsZWQgYnkgbGlzdChuLHYsYSksIGFuZCB0aGUgcmFuZ2UgY29uc3RydWN0b3Igd2hlbiBpdCB0dXJucyBvdXQKKyAgICAgIC8vIHRvIGJlIHRoZSBzYW1lIHRoaW5nLgorICAgICAgdm9pZAorICAgICAgX01fZmlsbF9pbml0aWFsaXplKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlmb3IgKDsgX19uOyAtLV9fbikKKwkgIHB1c2hfYmFjayhfX3gpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gQ2FsbGVkIGJ5IGxpc3QobikuCisgICAgICB2b2lkCisgICAgICBfTV9kZWZhdWx0X2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlmb3IgKDsgX19uOyAtLV9fbikKKwkgIGVtcGxhY2VfYmFjaygpOworICAgICAgfQorCisgICAgICAvLyBDYWxsZWQgYnkgcmVzaXplKHN6KS4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlZmF1bHRfYXBwZW5kKHNpemVfdHlwZSBfX24pOworI2VuZGlmCisKKyAgICAgIC8vIEludGVybmFsIGFzc2lnbiBmdW5jdGlvbnMgZm9sbG93LgorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGFzc2lnbiB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCisgICAgICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSByYW5nZSBhc3NpZ24gdG8gaW1wbGVtZW50IFsyMy4xLjFdLzkKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfX2ZhbHNlX3R5cGUpOworCisgICAgICAvLyBDYWxsZWQgYnkgYXNzaWduKG4sdCksIGFuZCB0aGUgcmFuZ2UgYXNzaWduIHdoZW4gaXQgdHVybnMgb3V0CisgICAgICAvLyB0byBiZSB0aGUgc2FtZSB0aGluZy4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKTsKKworCisgICAgICAvLyBNb3ZlcyB0aGUgZWxlbWVudHMgZnJvbSBbZmlyc3QsbGFzdCkgYmVmb3JlIHBvc2l0aW9uLgorICAgICAgdm9pZAorICAgICAgX01fdHJhbnNmZXIoaXRlcmF0b3IgX19wb3NpdGlvbiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3RyYW5zZmVyKF9fZmlyc3QuX01fbm9kZSwgX19sYXN0Ll9NX25vZGUpOyB9CisKKyAgICAgIC8vIEluc2VydHMgbmV3IGVsZW1lbnQgYXQgcG9zaXRpb24gZ2l2ZW4gYW5kIHdpdGggdmFsdWUgZ2l2ZW4uCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBfTV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworICAgICAgICBfTm9kZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOworICAgICAgICBfX3RtcC0+X01faG9vayhfX3Bvc2l0aW9uLl9NX25vZGUpOworICAgICAgfQorI2Vsc2UKKyAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgdm9pZAorICAgICAgIF9NX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICAgICB7CisJIF9Ob2RlKiBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJIF9fdG1wLT5fTV9ob29rKF9fcG9zaXRpb24uX01fbm9kZSk7CisgICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vIEVyYXNlcyBlbGVtZW50IGF0IHBvc2l0aW9uIGdpdmVuLgorICAgICAgdm9pZAorICAgICAgX01fZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKyAgICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV91bmhvb2soKTsKKyAgICAgICAgX05vZGUqIF9fbiA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19wb3NpdGlvbi5fTV9ub2RlKTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLmRlc3Ryb3koX19uKTsKKyNlbHNlCisJX01fZ2V0X1RwX2FsbG9jYXRvcigpLmRlc3Ryb3koc3RkOjpfX2FkZHJlc3NvZihfX24tPl9NX2RhdGEpKTsKKyNlbmRpZgorICAgICAgICBfTV9wdXRfbm9kZShfX24pOworICAgICAgfQorCisgICAgICAvLyBUbyBpbXBsZW1lbnQgdGhlIHNwbGljZSAoYW5kIG1lcmdlKSBiaXRzIG9mIE4xNTk5LgorICAgICAgdm9pZAorICAgICAgX01fY2hlY2tfZXF1YWxfYWxsb2NhdG9ycyhsaXN0JiBfX3gpCisgICAgICB7CisJaWYgKHN0ZDo6X19hbGxvY19uZXE8dHlwZW5hbWUgX0Jhc2U6Ol9Ob2RlX2FsbG9jX3R5cGU+OjoKKwkgICAgX1NfZG9faXQoX01fZ2V0X05vZGVfYWxsb2NhdG9yKCksIF9feC5fTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSkpCisJICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsaXN0OjpfTV9jaGVja19lcXVhbF9hbGxvY2F0b3JzIikpOworICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIExpc3QgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgX194ICBBICVsaXN0LgorICAgKiAgQHBhcmFtICBfX3kgIEEgJWxpc3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSBfX3guCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiB0aGUgc2l6ZSBhbmQgZWxlbWVudHMgb2YgdGhlIGxpc3RzIGFyZSBlcXVhbC4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YKKyAgICogIHRoZSBsaXN0cy4gIExpc3RzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgdGhlaXIgc2l6ZXMgYXJlCisgICAqICBlcXVhbCwgYW5kIGlmIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgY29tcGFyZSBlcXVhbC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBsaXN0PF9UcCwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBfX3guZW5kKCk7CisgICAgICBjb25zdF9pdGVyYXRvciBfX2VuZDIgPSBfX3kuZW5kKCk7CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTEgPSBfX3guYmVnaW4oKTsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTIgPSBfX3kuYmVnaW4oKTsKKyAgICAgIHdoaWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAqX19pMikKKwl7CisJICArK19faTE7CisJICArK19faTI7CisJfQorICAgICAgcmV0dXJuIF9faTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgTGlzdCBvcmRlcmluZyByZWxhdGlvbi4KKyAgICogIEBwYXJhbSAgX194ICBBICVsaXN0LgorICAgKiAgQHBhcmFtICBfX3kgIEEgJWxpc3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSBfX3guCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiBAYSBfX3ggaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIEBhIF9feS4KKyAgICoKKyAgICogIFRoaXMgaXMgYSB0b3RhbCBvcmRlcmluZyByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICogIGxpc3RzLiAgVGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZSB3aXRoIEBjIDwuCisgICAqCisgICAqICBTZWUgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgpIGZvciBob3cgdGhlIGRldGVybWluYXRpb24gaXMgbWFkZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCisJCQkJCSAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I9PQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLy8gU2VlIHN0ZDo6bGlzdDo6c3dhcCgpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX1NUTF9MSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfbWFwLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNWU0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX21hcC5oCkBAIC0wLDAgKzEsMTAyMSBAQAorLy8gTWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiaXRzL3N0bF9tYXAuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le21hcH0KKyAqLworCisjaWZuZGVmIF9TVExfTUFQX0gKKyNkZWZpbmUgX1NUTF9NQVBfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8dHVwbGU+CisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgbWFkZSB1cCBvZiAoa2V5LHZhbHVlKSBwYWlycywgd2hpY2ggY2FuIGJlCisgICAqICByZXRyaWV2ZWQgYmFzZWQgb24gYSBrZXksIGluIGxvZ2FyaXRobWljIHRpbWUuCisgICAqCisgICAqICBAaW5ncm91cCBhc3NvY2lhdGl2ZV9jb250YWluZXJzCisgICAqCisgICAqICBAdHBhcmFtIF9LZXkgIFR5cGUgb2Yga2V5IG9iamVjdHMuCisgICAqICBAdHBhcmFtICBfVHAgIFR5cGUgb2YgbWFwcGVkIG9iamVjdHMuCisgICAqICBAdHBhcmFtIF9Db21wYXJlICBDb21wYXJpc29uIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBsZXNzPF9LZXk+LgorICAgKiAgQHRwYXJhbSBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byAKKyAgICogICAgICAgICAgICAgICAgICBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+LgorICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NiI+cmV2ZXJzaWJsZSBjb250YWluZXI8L2E+LCBhbmQgYW4KKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY5Ij5hc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+ICh1c2luZyB1bmlxdWUga2V5cykuCisgICAqICBGb3IgYSBAYyBtYXA8S2V5LFQ+IHRoZSBrZXlfdHlwZSBpcyBLZXksIHRoZSBtYXBwZWRfdHlwZSBpcyBULCBhbmQgdGhlCisgICAqICB2YWx1ZV90eXBlIGlzIHN0ZDo6cGFpcjxjb25zdCBLZXksVD4uCisgICAqCisgICAqICBNYXBzIHN1cHBvcnQgYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMuCisgICAqCisgICAqICBUaGUgcHJpdmF0ZSB0cmVlIGRhdGEgaXMgZGVjbGFyZWQgZXhhY3RseSB0aGUgc2FtZSB3YXkgZm9yIG1hcCBhbmQKKyAgICogIG11bHRpbWFwOyB0aGUgZGlzdGluY3Rpb24gaXMgbWFkZSBlbnRpcmVseSBpbiBob3cgdGhlIHRyZWUgZnVuY3Rpb25zIGFyZQorICAgKiAgY2FsbGVkICgqX3VuaXF1ZSB2ZXJzdXMgKl9lcXVhbCwgc2FtZSBhcyB0aGUgc3RhbmRhcmQpLgorICAqLworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSA9IHN0ZDo6bGVzczxfS2V5PiwKKyAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIG1hcAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp2YWx1ZV90eXBlICAgICAgICAgICAgICAgICAgIF9BbGxvY192YWx1ZV90eXBlOworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9UcCwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzNChfQ29tcGFyZSwgYm9vbCwgX0tleSwgX0tleSwKKwkJCQlfQmluYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMih2YWx1ZV90eXBlLCBfQWxsb2NfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkKKworICAgIHB1YmxpYzoKKyAgICAgIGNsYXNzIHZhbHVlX2NvbXBhcmUKKyAgICAgIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+CisgICAgICB7CisJZnJpZW5kIGNsYXNzIG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+OworICAgICAgcHJvdGVjdGVkOgorCV9Db21wYXJlIGNvbXA7CisKKwl2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykKKwk6IGNvbXAoX19jKSB7IH0KKworICAgICAgcHVibGljOgorCWJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QKKwl7IHJldHVybiBjb21wKF9feC5maXJzdCwgX195LmZpcnN0KTsgfQorICAgICAgfTsKKworICAgIHByaXZhdGU6CisgICAgICAvLy8gVGhpcyB0dXJucyBhIHJlZC1ibGFjayB0cmVlIGludG8gYSBbbXVsdGldbWFwLiAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyIAorICAgICAgICBfUGFpcl9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLCBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LAorCQkgICAgICAga2V5X2NvbXBhcmUsIF9QYWlyX2FsbG9jX3R5cGU+IF9SZXBfdHlwZTsKKworICAgICAgLy8vIFRoZSBhY3R1YWwgdHJlZSBzdHJ1Y3R1cmUuCisgICAgICBfUmVwX3R5cGUgX01fdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIG1hbnkgb2YgdGhlc2UgYXJlIHNwZWNpZmllZCBkaWZmZXJlbnRseSBpbiBJU08sIGJ1dCB0aGUgZm9sbG93aW5nIGFyZQorICAgICAgLy8gImZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUGFpcl9hbGxvY190eXBlOjpwb2ludGVyICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1BhaXJfYWxsb2NfdHlwZTo6Y29uc3RfcG9pbnRlciAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyX2FsbG9jX3R5cGU6OnJlZmVyZW5jZSAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyX2FsbG9jX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIFsyMy4zLjEuMV0gY29uc3RydWN0L2NvcHkvZGVzdHJveQorICAgICAgLy8gKGdldF9hbGxvY2F0b3IoKSBpcyBub3JtYWxseSBsaXN0ZWQgaW4gdGhpcyBzZWN0aW9uLCBidXQgc2VlbXMgdG8gaGF2ZQorICAgICAgLy8gYmVlbiBhY2NpZGVudGFsbHkgb21pdHRlZCBpbiB0aGUgcHJpbnRlZCBzdGFuZGFyZCkKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBtYXAoKQorICAgICAgOiBfTV90KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICVtYXAgd2l0aCBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fY29tcCAgQSBjb21wYXJpc29uIG9iamVjdC4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAorCSAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX3QoX19jb21wLCBfUGFpcl9hbGxvY190eXBlKF9fYSkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVNYXAgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVtYXAgdXNlcyBhIGNvcHkgb2YgdGhlIGFsbG9jYXRpb24gb2JqZWN0CisgICAgICAgKiAgdXNlZCBieSBAYSBfX3guCisgICAgICAgKi8KKyAgICAgIG1hcChjb25zdCBtYXAmIF9feCkKKyAgICAgIDogX01fdChfX3guX01fdCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVNYXAgbW92ZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVtYXAgY29udGFpbnMgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIF9feC4KKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgX194IGFyZSBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgJW1hcC4KKyAgICAgICAqLworICAgICAgbWFwKG1hcCYmIF9feCkKKyAgICAgIG5vZXhjZXB0KGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPF9Db21wYXJlPjo6dmFsdWUpCisgICAgICA6IF9NX3Qoc3RkOjptb3ZlKF9feC5fTV90KSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJW1hcCBmcm9tIGFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2NvbXAgIEEgY29tcGFyaXNvbiBvYmplY3QuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyX2xpc3QgQGEgX19sLgorICAgICAgICogIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIHJhbmdlIGlzIGFscmVhZHkgc29ydGVkLCBhbmQgTmxvZ04KKyAgICAgICAqICBvdGhlcndpc2UgKHdoZXJlIE4gaXMgQGEgX19sLnNpemUoKSkuCisgICAgICAgKi8KKyAgICAgIG1hcChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX3QoX19jb21wLCBfUGFpcl9hbGxvY190eXBlKF9fYSkpCisgICAgICB7IF9NX3QuX01faW5zZXJ0X3VuaXF1ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJW1hcCBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICBbX19maXJzdCxfX2xhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiBpZiB0aGUgcmFuZ2UgaXMKKyAgICAgICAqICBhbHJlYWR5IHNvcnRlZCwgYW5kIE5sb2dOIG90aGVyd2lzZSAod2hlcmUgTiBpcworICAgICAgICogIGRpc3RhbmNlKF9fZmlyc3QsX19sYXN0KSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorCTogX01fdCgpCisgICAgICAgIHsgX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAlbWFwIGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fY29tcCAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICBbX19maXJzdCxfX2xhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiBpZiB0aGUgcmFuZ2UgaXMKKyAgICAgICAqICBhbHJlYWR5IHNvcnRlZCwgYW5kIE5sb2dOIG90aGVyd2lzZSAod2hlcmUgTiBpcworICAgICAgICogIGRpc3RhbmNlKF9fZmlyc3QsX19sYXN0KSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAorCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX3QoX19jb21wLCBfUGFpcl9hbGxvY190eXBlKF9fYSkpCisgICAgICAgIHsgX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLy8gRklYTUUgVGhlcmUgaXMgbm8gZHRvciBkZWNsYXJlZCwgYnV0IHdlIHNob3VsZCBoYXZlIHNvbWV0aGluZworICAgICAgLy8gZ2VuZXJhdGVkIGJ5IERveHlnZW4uICBJIGRvbid0IGtub3cgd2hhdCB0YWdzIHRvIGFkZCB0byB0aGlzCisgICAgICAvLyBwYXJhZ3JhcGggdG8gbWFrZSB0aGF0IGhhcHBlbjoKKyAgICAgIC8qKgorICAgICAgICogIFRoZSBkdG9yIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIG5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueQorICAgICAgICogIHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTWFwIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJW1hcCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBBbGwgdGhlIGVsZW1lbnRzIG9mIEBhIF9feCBhcmUgY29waWVkLCBidXQgdW5saWtlIHRoZSBjb3B5CisgICAgICAgKiAgY29uc3RydWN0b3IsIHRoZSBhbGxvY2F0b3Igb2JqZWN0IGlzIG5vdCBjb3BpZWQuCisgICAgICAgKi8KKyAgICAgIG1hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBtYXAmIF9feCkKKyAgICAgIHsKKwlfTV90ID0gX194Ll9NX3Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTWFwIG1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSBfX3ggYXJlIG1vdmVkIGludG8gdGhpcyBtYXAgKHdpdGhvdXQgY29weWluZykuCisgICAgICAgKiAgQGEgX194IGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAlbWFwLgorICAgICAgICovCisgICAgICBtYXAmCisgICAgICBvcGVyYXRvcj0obWFwJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVNYXAgbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJW1hcCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXIgbGlzdCBAYSBfX2wuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlICVtYXAgYW5kCisgICAgICAgKiAgdGhhdCB0aGUgcmVzdWx0aW5nICVtYXAncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICBtYXAmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vLyBHZXQgYSBjb3B5IG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBvYmplY3QuCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZShfTV90LmdldF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgLy8gaXRlcmF0b3JzCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgcGFpciBpbiB0aGUKKyAgICAgICAqICAlbWFwLgorICAgICAgICogIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBwYWlyCisgICAgICAgKiAgaW4gdGhlICVtYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICogIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBwYWlyIGluIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgcGFpciBpbiB0aGUgJW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8KKyAgICAgICAqICB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGxhc3QgcGFpciBpbgorICAgICAgICogIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgKiAga2V5cy4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBwYWlyIGluIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZyBvcmRlcgorICAgICAgICogIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byBvbmUgYmVmb3JlIHRoZQorICAgICAgICogIGZpcnN0IHBhaXIgaW4gdGhlICVtYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgcGFpciBpbiB0aGUgJW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcKKyAgICAgICAqICBvcmRlciBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgcGFpcgorICAgICAgICogIGluIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAqICBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBwYWlyIGluIHRoZSAlbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0bworICAgICAgICogIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGxhc3QgcGFpciBpbiB0aGUgJW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byBvbmUKKyAgICAgICAqICBiZWZvcmUgdGhlIGZpcnN0IHBhaXIgaW4gdGhlICVtYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nCisgICAgICAgKiAgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV90LnJlbmQoKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5CisgICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSAlbWFwIGlzIGVtcHR5LiAgKFRodXMgYmVnaW4oKSB3b3VsZCBlcXVhbAorICAgICAgICogIGVuZCgpLikKKyAgICAgICovCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KKworICAgICAgLyoqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlICVtYXAuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CisKKyAgICAgIC8qKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlICVtYXAuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KKworICAgICAgLy8gWzIzLjMuMS4yXSBlbGVtZW50IGFjY2VzcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdWJzY3JpcHQgKCBAYyBbXSApIGFjY2VzcyB0byAlbWFwIGRhdGEuCisgICAgICAgKiAgQHBhcmFtICBfX2sgIFRoZSBrZXkgZm9yIHdoaWNoIGRhdGEgc2hvdWxkIGJlIHJldHJpZXZlZC4KKyAgICAgICAqICBAcmV0dXJuICBBIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBvZiB0aGUgKGtleSxkYXRhKSAlcGFpci4KKyAgICAgICAqCisgICAgICAgKiAgQWxsb3dzIGZvciBlYXN5IGxvb2t1cCB3aXRoIHRoZSBzdWJzY3JpcHQgKCBAYyBbXSApCisgICAgICAgKiAgb3BlcmF0b3IuICBSZXR1cm5zIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgc3BlY2lmaWVkIGluCisgICAgICAgKiAgc3Vic2NyaXB0LiAgSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCwgYSBwYWlyIHdpdGggdGhhdCBrZXkKKyAgICAgICAqICBpcyBjcmVhdGVkIHVzaW5nIGRlZmF1bHQgdmFsdWVzLCB3aGljaCBpcyB0aGVuIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBMb29rdXAgcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZS4KKyAgICAgICAqLworICAgICAgbWFwcGVkX3R5cGUmCisgICAgICBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgICB7CisJLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0RlZmF1bHRDb25zdHJ1Y3RpYmxlQ29uY2VwdDxtYXBwZWRfdHlwZT4pCisKKwlpdGVyYXRvciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOworCS8vIF9faS0+Zmlyc3QgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWl2YWxlbnQgdG8gX19rLgorCWlmIChfX2kgPT0gZW5kKCkgfHwga2V5X2NvbXAoKShfX2ssICgqX19pKS5maXJzdCkpCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCSAgX19pID0gX01fdC5fTV9lbXBsYWNlX2hpbnRfdW5pcXVlKF9faSwgc3RkOjpwaWVjZXdpc2VfY29uc3RydWN0LAorCQkJCQkgICAgc3RkOjp0dXBsZTxjb25zdCBrZXlfdHlwZSY+KF9fayksCisJCQkJCSAgICBzdGQ6OnR1cGxlPD4oKSk7CisjZWxzZQorICAgICAgICAgIF9faSA9IGluc2VydChfX2ksIHZhbHVlX3R5cGUoX19rLCBtYXBwZWRfdHlwZSgpKSk7CisjZW5kaWYKKwlyZXR1cm4gKCpfX2kpLnNlY29uZDsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgb3BlcmF0b3JbXShrZXlfdHlwZSYmIF9faykKKyAgICAgIHsKKwkvLyBjb25jZXB0IHJlcXVpcmVtZW50cworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRGVmYXVsdENvbnN0cnVjdGlibGVDb25jZXB0PG1hcHBlZF90eXBlPikKKworCWl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CisJLy8gX19pLT5maXJzdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1aXZhbGVudCB0byBfX2suCisJaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKKwkgIF9faSA9IF9NX3QuX01fZW1wbGFjZV9oaW50X3VuaXF1ZShfX2ksIHN0ZDo6cGllY2V3aXNlX2NvbnN0cnVjdCwKKwkJCQkJc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6bW92ZShfX2spKSwKKwkJCQkJc3RkOjp0dXBsZTw+KCkpOworCXJldHVybiAoKl9faSkuc2Vjb25kOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDQ2NC4gU3VnZ2VzdGlvbiBmb3IgbmV3IG1lbWJlciBmdW5jdGlvbnMgaW4gc3RhbmRhcmQgY29udGFpbmVycy4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzIHRvICVtYXAgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIF9fayAgVGhlIGtleSBmb3Igd2hpY2ggZGF0YSBzaG91bGQgYmUgcmV0cmlldmVkLgorICAgICAgICogIEByZXR1cm4gIEEgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIHdob3NlIGtleSBpcyBlcXVpdmFsZW50IHRvIEBhIF9faywgaWYKKyAgICAgICAqICAgICAgICAgICBzdWNoIGEgZGF0YSBpcyBwcmVzZW50IGluIHRoZSAlbWFwLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIG5vIHN1Y2ggZGF0YSBpcyBwcmVzZW50LgorICAgICAgICovCisgICAgICBtYXBwZWRfdHlwZSYKKyAgICAgIGF0KGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgICB7CisJaXRlcmF0b3IgX19pID0gbG93ZXJfYm91bmQoX19rKTsKKwlpZiAoX19pID09IGVuZCgpIHx8IGtleV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJtYXA6OmF0IikpOworCXJldHVybiAoKl9faSkuc2Vjb25kOworICAgICAgfQorCisgICAgICBjb25zdCBtYXBwZWRfdHlwZSYKKyAgICAgIGF0KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgICB7CisJY29uc3RfaXRlcmF0b3IgX19pID0gbG93ZXJfYm91bmQoX19rKTsKKwlpZiAoX19pID09IGVuZCgpIHx8IGtleV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJtYXA6OmF0IikpOworCXJldHVybiAoKl9faSkuc2Vjb25kOworICAgICAgfQorCisgICAgICAvLyBtb2RpZmllcnMKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gYnVpbGQgYW5kIGluc2VydCBhIHN0ZDo6cGFpciBpbnRvIHRoZSAlbWFwLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSBhIG5ldyBwYWlyIGluc3RhbmNlIChzZWUKKyAgICAgICAqCSAgICAgICAgc3RkOjpwaWVjZXdpc2VfY29udHJ1Y3QgZm9yIHBhc3NpbmcgYXJndW1lbnRzIHRvIGVhY2gKKyAgICAgICAqCSAgICAgICAgcGFydCBvZiB0aGUgcGFpciBjb25zdHJ1Y3RvcikuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEEgcGFpciwgb2Ygd2hpY2ggdGhlIGZpcnN0IGVsZW1lbnQgaXMgYW4gaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICAgICAgICAgICB0byB0aGUgcG9zc2libHkgaW5zZXJ0ZWQgcGFpciwgYW5kIHRoZSBzZWNvbmQgaXMgYSBib29sIHRoYXQKKyAgICAgICAqICAgICAgICAgICBpcyB0cnVlIGlmIHRoZSBwYWlyIHdhcyBhY3R1YWxseSBpbnNlcnRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBidWlsZCBhbmQgaW5zZXJ0IGEgKGtleSwgdmFsdWUpICVwYWlyIGludG8KKyAgICAgICAqICB0aGUgJW1hcC4KKyAgICAgICAqICBBICVtYXAgcmVsaWVzIG9uIHVuaXF1ZSBrZXlzIGFuZCB0aHVzIGEgJXBhaXIgaXMgb25seSBpbnNlcnRlZCBpZiBpdHMKKyAgICAgICAqICBmaXJzdCBlbGVtZW50ICh0aGUga2V5KSBpcyBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSAlbWFwLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gX01fdC5fTV9lbXBsYWNlX3VuaXF1ZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBidWlsZCBhbmQgaW5zZXJ0IGEgc3RkOjpwYWlyIGludG8gdGhlICVtYXAuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUgcGFpcgorICAgICAgICogICAgICAgICAgICAgICAgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSBhIG5ldyBwYWlyIGluc3RhbmNlIChzZWUKKyAgICAgICAqCSAgICAgICAgIHN0ZDo6cGllY2V3aXNlX2NvbnRydWN0IGZvciBwYXNzaW5nIGFyZ3VtZW50cyB0byBlYWNoCisgICAgICAgKgkgICAgICAgICBwYXJ0IG9mIHRoZSBwYWlyIGNvbnN0cnVjdG9yKS4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBlbGVtZW50IHdpdGgga2V5IG9mIHRoZQorICAgICAgICogICAgICAgICAgc3RkOjpwYWlyIGJ1aWx0IGZyb20gQGEgX19hcmdzIChtYXkgb3IgbWF5IG5vdCBiZSB0aGF0CisgICAgICAgKiAgICAgICAgICBzdGQ6OnBhaXIpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb25jZXJuZWQgYWJvdXQgd2hldGhlciB0aGUgaW5zZXJ0aW9uIHRvb2sgcGxhY2UsCisgICAgICAgKiAgYW5kIHRodXMgZG9lcyBub3QgcmV0dXJuIGEgYm9vbGVhbiBsaWtlIHRoZSBzaW5nbGUtYXJndW1lbnQgZW1wbGFjZSgpCisgICAgICAgKiAgZG9lcy4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBvbmx5IGEgaGludCBhbmQgY2FuIHBvdGVudGlhbGx5CisgICAgICAgKiAgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGluc2VydGlvbiBwcm9jZXNzLiBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgU2VlCisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICogIGZvciBtb3JlIG9uIEBhIGhpbnRpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBsb2dhcml0aG1pYyB0aW1lIChpZiB0aGUgaGludCBpcyBub3QgdGFrZW4pLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2VfaGludChjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgcmV0dXJuIF9NX3QuX01fZW1wbGFjZV9oaW50X3VuaXF1ZShfX3BvcywKKwkJCQkJICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gaW5zZXJ0IGEgc3RkOjpwYWlyIGludG8gdGhlICVtYXAuCisKKyAgICAgICAqICBAcGFyYW0gX194IFBhaXIgdG8gYmUgaW5zZXJ0ZWQgKHNlZSBzdGQ6Om1ha2VfcGFpciBmb3IgZWFzeQorICAgICAgICoJICAgICBjcmVhdGlvbiBvZiBwYWlycykuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEEgcGFpciwgb2Ygd2hpY2ggdGhlIGZpcnN0IGVsZW1lbnQgaXMgYW4gaXRlcmF0b3IgdGhhdCAKKyAgICAgICAqICAgICAgICAgICBwb2ludHMgdG8gdGhlIHBvc3NpYmx5IGluc2VydGVkIHBhaXIsIGFuZCB0aGUgc2Vjb25kIGlzIAorICAgICAgICogICAgICAgICAgIGEgYm9vbCB0aGF0IGlzIHRydWUgaWYgdGhlIHBhaXIgd2FzIGFjdHVhbGx5IGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGluc2VydCBhIChrZXksIHZhbHVlKSAlcGFpciBpbnRvIHRoZSAlbWFwLgorICAgICAgICogIEEgJW1hcCByZWxpZXMgb24gdW5pcXVlIGtleXMgYW5kIHRodXMgYSAlcGFpciBpcyBvbmx5IGluc2VydGVkIGlmIGl0cworICAgICAgICogIGZpcnN0IGVsZW1lbnQgKHRoZSBrZXkpIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlICVtYXAuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBsb2dhcml0aG1pYyB0aW1lLgorICAgICAgICovCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9feCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgICAgaW5zZXJ0KF9QYWlyJiYgX194KQorICAgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF91bmlxdWUoc3RkOjpmb3J3YXJkPF9QYWlyPihfX3gpKTsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gaW5zZXJ0IGEgbGlzdCBvZiBzdGQ6OnBhaXJzIGludG8gdGhlICVtYXAuCisgICAgICAgKiAgQHBhcmFtICBfX2xpc3QgIEEgc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IG9mIHBhaXJzIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBDb21wbGV4aXR5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgcmFuZ2UgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19saXN0KQorICAgICAgeyBpbnNlcnQoX19saXN0LmJlZ2luKCksIF9fbGlzdC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gaW5zZXJ0IGEgc3RkOjpwYWlyIGludG8gdGhlICVtYXAuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBBbiBpdGVyYXRvciB0aGF0IHNlcnZlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgdGhlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgcGFpciBzaG91bGQgYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIFBhaXIgdG8gYmUgaW5zZXJ0ZWQgKHNlZSBzdGQ6Om1ha2VfcGFpciBmb3IgZWFzeSBjcmVhdGlvbgorICAgICAgICogICAgICAgICAgICAgICBvZiBwYWlycykuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZWxlbWVudCB3aXRoIGtleSBvZgorICAgICAgICogICAgICAgICAgIEBhIF9feCAobWF5IG9yIG1heSBub3QgYmUgdGhlICVwYWlyIHBhc3NlZCBpbikuCisgICAgICAgKgorCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBub3QgY29uY2VybmVkIGFib3V0IHdoZXRoZXIgdGhlIGluc2VydGlvbgorICAgICAgICogIHRvb2sgcGxhY2UsIGFuZCB0aHVzIGRvZXMgbm90IHJldHVybiBhIGJvb2xlYW4gbGlrZSB0aGUKKyAgICAgICAqICBzaW5nbGUtYXJndW1lbnQgaW5zZXJ0KCkgZG9lcy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QKKyAgICAgICAqICBwYXJhbWV0ZXIgaXMgb25seSBhIGhpbnQgYW5kIGNhbiBwb3RlbnRpYWxseSBpbXByb3ZlIHRoZQorICAgICAgICogIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gIEEgYmFkIGhpbnQgd291bGQKKyAgICAgICAqICBjYXVzZSBubyBnYWlucyBpbiBlZmZpY2llbmN5LgorICAgICAgICoKKyAgICAgICAqICBTZWUKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDA3Y2gxNy5odG1sCisgICAgICAgKiAgZm9yIG1vcmUgb24gQGEgaGludGluZy4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGxvZ2FyaXRobWljIHRpbWUgKGlmIHRoZSBoaW50IGlzIG5vdCB0YWtlbikuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyNlbHNlCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorI2VuZGlmCisgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF91bmlxdWVfKF9fcG9zaXRpb24sIF9feCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBfUGFpciYmIF9feCkKKyAgICAgICAgeyByZXR1cm4gX01fdC5fTV9pbnNlcnRfdW5pcXVlXyhfX3Bvc2l0aW9uLAorCQkJCQlzdGQ6OmZvcndhcmQ8X1BhaXI+KF9feCkpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgYXR0ZW1wdHMgdG8gaW5zZXJ0IGEgcmFuZ2Ugb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMTMwLiBBc3NvY2lhdGl2ZSBlcmFzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhbiBlbGVtZW50IGZyb20gYSAlbWFwLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nCisgICAgICAgKiAgICAgICAgICBAYSBwb3NpdGlvbiBwcmlvciB0byB0aGUgZWxlbWVudCBiZWluZyBlcmFzZWQuIElmIG5vIHN1Y2ggCisgICAgICAgKiAgICAgICAgICBlbGVtZW50IGV4aXN0cywgZW5kKCkgaXMgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFuIGVsZW1lbnQsIHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuCisgICAgICAgKiAgaXRlcmF0b3IsIGZyb20gYSAlbWFwLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMKKyAgICAgICAqICB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwKKyAgICAgICAqICB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nCisgICAgICAgKiAgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CisKKyAgICAgIC8vIExXRyAyMDU5CisgICAgICBfR0xJQkNYWF9BQklfVEFHX0NYWDExCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KKyNlbHNlCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGFuIGVsZW1lbnQgZnJvbSBhICVtYXAuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFuIGVsZW1lbnQsIHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuCisgICAgICAgKiAgaXRlcmF0b3IsIGZyb20gYSAlbWFwLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMKKyAgICAgICAqICB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwKKyAgICAgICAqICB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nCisgICAgICAgKiAgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSBvZiBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYWxsIHRoZSBlbGVtZW50cyBsb2NhdGVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQorICAgICAgICogIGEgJW1hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGEgW2ZpcnN0LGxhc3QpIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gYSAlbWFwLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgICAgZXJhc2VkLgorICAgICAgICogIEBwYXJhbSBfX2xhc3QgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8KKyAgICAgICAqICAgICAgICAgICAgICAgIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIFRoZSBpdGVyYXRvciBAYSBfX2xhc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZnJvbSBhICVtYXAuCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkCisgICAgICAgKiAgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbHNlCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGEgW19fZmlyc3QsX19sYXN0KSByYW5nZSBvZiBlbGVtZW50cyBmcm9tIGEgJW1hcC4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gX19sYXN0IEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvCisgICAgICAgKiAgICAgICAgICAgICAgICBiZSBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZnJvbSBhICVtYXAuCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkCisgICAgICAgKiAgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTd2FwcyBkYXRhIHdpdGggYW5vdGhlciAlbWFwLgorICAgICAgICogIEBwYXJhbSAgX194ICBBICVtYXAgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGV4Y2hhbmdlcyB0aGUgZWxlbWVudHMgYmV0d2VlbiB0d28gbWFwcyBpbiBjb25zdGFudAorICAgICAgICogIHRpbWUuICAoSXQgaXMgb25seSBzd2FwcGluZyBhIHBvaW50ZXIsIGFuIGludGVnZXIsIGFuZCBhbgorICAgICAgICogIGluc3RhbmNlIG9mIHRoZSBAYyBDb21wYXJlIHR5cGUgKHdoaWNoIGl0c2VsZiBpcyBvZnRlbgorICAgICAgICogIHN0YXRlbGVzcyBhbmQgZW1wdHkpLCBzbyBpdCBzaG91bGQgYmUgcXVpdGUgZmFzdC4pICBOb3RlCisgICAgICAgKiAgdGhhdCB0aGUgZ2xvYmFsIHN0ZDo6c3dhcCgpIGZ1bmN0aW9uIGlzIHNwZWNpYWxpemVkIHN1Y2gKKyAgICAgICAqICB0aGF0IHN0ZDo6c3dhcChtMSxtMikgd2lsbCBmZWVkIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobWFwJiBfX3gpCisgICAgICB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIGFsbCBlbGVtZW50cyBpbiBhICVtYXAuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5CisgICAgICAgKiAgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlCisgICAgICAgKiAgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LgorICAgICAgICogIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgX01fdC5jbGVhcigpOyB9CisKKyAgICAgIC8vIG9ic2VydmVycworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0aGUga2V5IGNvbXBhcmlzb24gb2JqZWN0IG91dCBvZiB3aGljaCB0aGUgJW1hcCB3YXMKKyAgICAgICAqICBjb25zdHJ1Y3RlZC4KKyAgICAgICAqLworICAgICAga2V5X2NvbXBhcmUKKyAgICAgIGtleV9jb21wKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgdmFsdWUgY29tcGFyaXNvbiBvYmplY3QsIGJ1aWx0IGZyb20gdGhlIGtleSBjb21wYXJpc29uCisgICAgICAgKiAgb2JqZWN0IG91dCBvZiB3aGljaCB0aGUgJW1hcCB3YXMgY29uc3RydWN0ZWQuCisgICAgICAgKi8KKyAgICAgIHZhbHVlX2NvbXBhcmUKKyAgICAgIHZhbHVlX2NvbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CisKKyAgICAgIC8vIFsyMy4zLjEuM10gbWFwIG9wZXJhdGlvbnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUcmllcyB0byBsb2NhdGUgYW4gZWxlbWVudCBpbiBhICVtYXAuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSBvZiAoa2V5LCB2YWx1ZSkgJXBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIgZWxlbWVudCwgb3IgZW5kKCkgaWYgbm90CisgICAgICAgKiAgICAgICAgICAgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBzb3VnaHQgYWZ0ZXIgJXBhaXIuICBJZiB1bnN1Y2Nlc3NmdWwgaXQgcmV0dXJucyB0aGUKKyAgICAgICAqICBwYXN0LXRoZS1lbmQgKCBAYyBlbmQoKSApIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRyaWVzIHRvIGxvY2F0ZSBhbiBlbGVtZW50IGluIGEgJW1hcC4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IG9mIChrZXksIHZhbHVlKSAlcGFpciB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHNvdWdodC1hZnRlcgorICAgICAgICogICAgICAgICAgIGVsZW1lbnQsIG9yIGVuZCgpIGlmIG5vdCBmb3VuZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGtleSBhbmQgdHJpZXMgdG8gbG9jYXRlIHRoZSBlbGVtZW50IHdpdGggd2hpY2gKKyAgICAgICAqICB0aGUga2V5IG1hdGNoZXMuICBJZiBzdWNjZXNzZnVsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgY29uc3RhbnQKKyAgICAgICAqICBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgc291Z2h0IGFmdGVyICVwYWlyLiBJZiB1bnN1Y2Nlc3NmdWwgaXQKKyAgICAgICAqICByZXR1cm5zIHRoZSBwYXN0LXRoZS1lbmQgKCBAYyBlbmQoKSApIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXJzIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggc3BlY2lmaWVkIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGZvciBtdWx0aW1hcHM7IGZvciBtYXAgdGhlIHJlc3VsdCB3aWxsCisgICAgICAgKiAgZWl0aGVyIGJlIDAgKG5vdCBwcmVzZW50KSBvciAxIChwcmVzZW50KS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgYmVnaW5uaW5nIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBmaXJzdCBlbGVtZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAqICAgICAgICAgICB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN1YnNlcXVlbmNlIG9mIGVsZW1lbnRzCisgICAgICAgKiAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBrZXkuICBJZiB1bnN1Y2Nlc3NmdWwgaXQgcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGEgZ3JlYXRlciB2YWx1ZSB0aGFuIGdpdmVuIGtleQorICAgICAgICogIG9yIGVuZCgpIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgYmVnaW5uaW5nIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciBwb2ludGluZyB0byBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICAgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN1YnNlcXVlbmNlIG9mIGVsZW1lbnRzCisgICAgICAgKiAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBrZXkuICBJZiB1bnN1Y2Nlc3NmdWwgaXQgcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGEgZ3JlYXRlciB2YWx1ZSB0aGFuIGdpdmVuIGtleQorICAgICAgICogIG9yIGVuZCgpIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgZW5kIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICBncmVhdGVyIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBlbmQgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSBvZiAoa2V5LCB2YWx1ZSkgcGFpciB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHBvaW50aW5nIHRvIGZpcnN0IGl0ZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgZ3JlYXRlciB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlycyB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFBhaXIgb2YgaXRlcmF0b3JzIHRoYXQgcG9zc2libHkgcG9pbnRzIHRvIHRoZSBzdWJzZXF1ZW5jZQorICAgICAgICogICAgICAgICAgIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGMubG93ZXJfYm91bmQodmFsKSwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGMudXBwZXJfYm91bmQodmFsKSkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICogIChidXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIHRoZSBjYWxscyBzZXBhcmF0ZWx5KS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm9iYWJseSBvbmx5IG1ha2VzIHNlbnNlIGZvciBtdWx0aW1hcHMuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlycyB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFBhaXIgb2YgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3JzIHRoYXQgcG9zc2libHkgcG9pbnRzCisgICAgICAgKiAgICAgICAgICAgdG8gdGhlIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGMubG93ZXJfYm91bmQodmFsKSwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGMudXBwZXJfYm91bmQodmFsKSkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICogIChidXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIHRoZSBjYWxscyBzZXBhcmF0ZWx5KS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm9iYWJseSBvbmx5IG1ha2VzIHNlbnNlIGZvciBtdWx0aW1hcHMuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCisJCSAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I8KGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKKwkJICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIE1hcCBlcXVhbGl0eSBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICBfX3ggIEEgJW1hcC4KKyAgICogIEBwYXJhbSAgX195ICBBICVtYXAgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgdGhlIHNpemUgYW5kIGVsZW1lbnRzIG9mIHRoZSBtYXBzIGFyZSBlcXVhbC4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBtYXBzLiAgTWFwcyBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IGlmIHRoZWlyIHNpemVzIGFyZSBlcXVhbCwKKyAgICogIGFuZCBpZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGNvbXBhcmUgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7IH0KKworICAvKioKKyAgICogIEBicmllZiAgTWFwIG9yZGVyaW5nIHJlbGF0aW9uLgorICAgKiAgQHBhcmFtICBfX3ggIEEgJW1hcC4KKyAgICogIEBwYXJhbSAgX195ICBBICVtYXAgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgQGEgeCBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzIHRoYW4gQGEgeS4KKyAgICoKKyAgICogIFRoaXMgaXMgYSB0b3RhbCBvcmRlcmluZyByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUKKyAgICogIG1hcHMuICBUaGUgZWxlbWVudHMgbXVzdCBiZSBjb21wYXJhYmxlIHdpdGggQGMgPC4KKyAgICoKKyAgICogIFNlZSBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKCkgZm9yIGhvdyB0aGUgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fdCA8IF9feS5fTV90OyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPT0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIC8vLyBTZWUgc3RkOjptYXA6OnN3YXAoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvKiBfU1RMX01BUF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX211bHRpbWFwLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX211bHRpbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5ZWE1NAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfbXVsdGltYXAuaApAQCAtMCwwICsxLDkyMyBAQAorLy8gTXVsdGltYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX211bHRpbWFwLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttYXB9CisgKi8KKworI2lmbmRlZiBfU1RMX01VTFRJTUFQX0gKKyNkZWZpbmUgX1NUTF9NVUxUSU1BUF9IIDEKKworI2luY2x1ZGUgPGJpdHMvY29uY2VwdF9jaGVjay5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIG1hZGUgdXAgb2YgKGtleSx2YWx1ZSkgcGFpcnMsIHdoaWNoIGNhbiBiZQorICAgKiAgcmV0cmlldmVkIGJhc2VkIG9uIGEga2V5LCBpbiBsb2dhcml0aG1pYyB0aW1lLgorICAgKgorICAgKiAgQGluZ3JvdXAgYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgQHRwYXJhbSBfS2V5ICBUeXBlIG9mIGtleSBvYmplY3RzLgorICAgKiAgQHRwYXJhbSAgX1RwICBUeXBlIG9mIG1hcHBlZCBvYmplY3RzLgorICAgKiAgQHRwYXJhbSBfQ29tcGFyZSAgQ29tcGFyaXNvbiBmdW5jdGlvbiBvYmplY3QgdHlwZSwgZGVmYXVsdHMgdG8gbGVzczxfS2V5Pi4KKyAgICogIEB0cGFyYW0gX0FsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gCisgICAqICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPi4KKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjYiPnJldmVyc2libGUgY29udGFpbmVyPC9hPiwgYW5kIGFuCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2OSI+YXNzb2NpYXRpdmUgY29udGFpbmVyPC9hPiAodXNpbmcgZXF1aXZhbGVudAorICAgKiAga2V5cykuICBGb3IgYSBAYyBtdWx0aW1hcDxLZXksVD4gdGhlIGtleV90eXBlIGlzIEtleSwgdGhlIG1hcHBlZF90eXBlCisgICAqICBpcyBULCBhbmQgdGhlIHZhbHVlX3R5cGUgaXMgc3RkOjpwYWlyPGNvbnN0IEtleSxUPi4KKyAgICoKKyAgICogIE11bHRpbWFwcyBzdXBwb3J0IGJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzLgorICAgKgorICAgKiAgVGhlIHByaXZhdGUgdHJlZSBkYXRhIGlzIGRlY2xhcmVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGZvciBtYXAgYW5kCisgICAqICBtdWx0aW1hcDsgdGhlIGRpc3RpbmN0aW9uIGlzIG1hZGUgZW50aXJlbHkgaW4gaG93IHRoZSB0cmVlIGZ1bmN0aW9ucyBhcmUKKyAgICogIGNhbGxlZCAoKl91bmlxdWUgdmVyc3VzICpfZXF1YWwsIHNhbWUgYXMgdGhlIHN0YW5kYXJkKS4KKyAgKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICAgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIG11bHRpbWFwCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgICAgICAgICAgICAgICAgICAgX0FsbG9jX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXM0KF9Db21wYXJlLCBib29sLCBfS2V5LCBfS2V5LAorCQkJCV9CaW5hcnlGdW5jdGlvbkNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKHZhbHVlX3R5cGUsIF9BbGxvY192YWx1ZV90eXBlLCBfU2FtZVR5cGVDb25jZXB0KQorCisgICAgcHVibGljOgorICAgICAgY2xhc3MgdmFsdWVfY29tcGFyZQorICAgICAgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4KKyAgICAgIHsKKwlmcmllbmQgY2xhc3MgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPjsKKyAgICAgIHByb3RlY3RlZDoKKwlfQ29tcGFyZSBjb21wOworCisJdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpCisJOiBjb21wKF9fYykgeyB9CisKKyAgICAgIHB1YmxpYzoKKwlib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0CisJeyByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7IH0KKyAgICAgIH07CisKKyAgICBwcml2YXRlOgorICAgICAgLy8vIFRoaXMgdHVybnMgYSByZWQtYmxhY2sgdHJlZSBpbnRvIGEgW211bHRpXW1hcC4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyIAorICAgICAgICBfUGFpcl9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLCBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LAorCQkgICAgICAga2V5X2NvbXBhcmUsIF9QYWlyX2FsbG9jX3R5cGU+IF9SZXBfdHlwZTsKKyAgICAgIC8vLyBUaGUgYWN0dWFsIHRyZWUgc3RydWN0dXJlLgorICAgICAgX1JlcF90eXBlIF9NX3Q7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBtYW55IG9mIHRoZXNlIGFyZSBzcGVjaWZpZWQgZGlmZmVyZW50bHkgaW4gSVNPLCBidXQgdGhlIGZvbGxvd2luZyBhcmUKKyAgICAgIC8vICJmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCIKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1BhaXJfYWxsb2NfdHlwZTo6cG9pbnRlciAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyX2FsbG9jX3R5cGU6OmNvbnN0X3BvaW50ZXIgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUGFpcl9hbGxvY190eXBlOjpyZWZlcmVuY2UgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUGFpcl9hbGxvY190eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyBbMjMuMy4yXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisgICAgICAvLyAoZ2V0X2FsbG9jYXRvcigpIGlzIGFsc28gbGlzdGVkIGluIHRoaXMgc2VjdGlvbikKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBtdWx0aW1hcCgpCisgICAgICA6IF9NX3QoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJW11bHRpbWFwIHdpdGggbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2NvbXAgIEEgY29tcGFyaXNvbiBvYmplY3QuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9QYWlyX2FsbG9jX3R5cGUoX19hKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU11bHRpbWFwIGNvcHkgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJW11bHRpbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVtdWx0aW1hcCB1c2VzIGEgY29weSBvZiB0aGUgYWxsb2NhdGlvbiBvYmplY3QKKyAgICAgICAqICB1c2VkIGJ5IEBhIF9feC4KKyAgICAgICAqLworICAgICAgbXVsdGltYXAoY29uc3QgbXVsdGltYXAmIF9feCkKKyAgICAgIDogX01fdChfX3guX01fdCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVNdWx0aW1hcCBtb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSAgIF9feCAgQSAlbXVsdGltYXAgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJW11bHRpbWFwIGNvbnRhaW5zIHRoZSBleGFjdCBjb250ZW50cyBvZiBAYSBfX3guCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIF9feCBhcmUgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICVtdWx0aW1hcC4KKyAgICAgICAqLworICAgICAgbXVsdGltYXAobXVsdGltYXAmJiBfX3gpCisgICAgICBub2V4Y2VwdChpc19ub3Rocm93X2NvcHlfY29uc3RydWN0aWJsZTxfQ29tcGFyZT46OnZhbHVlKQorICAgICAgOiBfTV90KHN0ZDo6bW92ZShfX3guX01fdCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVtdWx0aW1hcCBmcm9tIGFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2NvbXAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlbXVsdGltYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICB0aGUgaW5pdGlhbGl6ZXJfbGlzdC4gIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIGxpc3QgaXMgYWxyZWFkeQorICAgICAgICogIHNvcnRlZCwgYW5kIE5sb2dOIG90aGVyd2lzZSAod2hlcmUgTiBpcyBAYSBfX2wuc2l6ZSgpKS4KKyAgICAgICAqLworICAgICAgbXVsdGltYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9QYWlyX2FsbG9jX3R5cGUoX19hKSkKKyAgICAgIHsgX01fdC5fTV9pbnNlcnRfZXF1YWwoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVtdWx0aW1hcCBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtdWx0aW1hcCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbQorICAgICAgICogIFtfX2ZpcnN0LF9fbGFzdCkuICBUaGlzIGlzIGxpbmVhciBpbiBOIGlmIHRoZSByYW5nZSBpcyBhbHJlYWR5IHNvcnRlZCwKKyAgICAgICAqICBhbmQgTmxvZ04gb3RoZXJ3aXNlICh3aGVyZSBOIGlzIGRpc3RhbmNlKF9fZmlyc3QsX19sYXN0KSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisJOiBfTV90KCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJW11bHRpbWFwIGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fY29tcCAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVtdWx0aW1hcCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbQorICAgICAgICogIFtfX2ZpcnN0LF9fbGFzdCkuICBUaGlzIGlzIGxpbmVhciBpbiBOIGlmIHRoZSByYW5nZSBpcyBhbHJlYWR5IHNvcnRlZCwKKyAgICAgICAqICBhbmQgTmxvZ04gb3RoZXJ3aXNlICh3aGVyZSBOIGlzIGRpc3RhbmNlKF9fZmlyc3QsX19sYXN0KSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSBjb25zdCBfQ29tcGFyZSYgX19jb21wLAorCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV90KF9fY29tcCwgX1BhaXJfYWxsb2NfdHlwZShfX2EpKQorICAgICAgICB7IF9NX3QuX01faW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLy8gRklYTUUgVGhlcmUgaXMgbm8gZHRvciBkZWNsYXJlZCwgYnV0IHdlIHNob3VsZCBoYXZlIHNvbWV0aGluZyBnZW5lcmF0ZWQKKyAgICAgIC8vIGJ5IERveHlnZW4uICBJIGRvbid0IGtub3cgd2hhdCB0YWdzIHRvIGFkZCB0byB0aGlzIHBhcmFncmFwaCB0byBtYWtlCisgICAgICAvLyB0aGF0IGhhcHBlbjoKKyAgICAgIC8qKgorICAgICAgICogIFRoZSBkdG9yIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIG5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueQorICAgICAgICogIHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGltYXAgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbXVsdGltYXAgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSBfX3ggYXJlIGNvcGllZCwgYnV0IHVubGlrZSB0aGUgY29weQorICAgICAgICogIGNvbnN0cnVjdG9yLCB0aGUgYWxsb2NhdG9yIG9iamVjdCBpcyBub3QgY29waWVkLgorICAgICAgICovCisgICAgICBtdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcCYgX194KQorICAgICAgeworCV9NX3QgPSBfX3guX01fdDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVNdWx0aW1hcCBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJW11bHRpbWFwIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSBfX3ggYXJlIG1vdmVkIGludG8gdGhpcyBtdWx0aW1hcCAod2l0aG91dCBjb3B5aW5nKS4KKyAgICAgICAqICBAYSBfX3ggaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkIG11bHRpbWFwLgorICAgICAgICovCisgICAgICBtdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShtdWx0aW1hcCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGltYXAgbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJW11bHRpbWFwIHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGluIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIF9fbC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJW11bHRpbWFwIGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAlbXVsdGltYXAncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICBtdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8vIEdldCBhIGNvcHkgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIG9iamVjdC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQgCisgICAgICB7IHJldHVybiBhbGxvY2F0b3JfdHlwZShfTV90LmdldF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgLy8gaXRlcmF0b3JzCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgcGFpciBpbiB0aGUKKyAgICAgICAqICAlbXVsdGltYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICogIGtleXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBwYWlyCisgICAgICAgKiAgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8KKyAgICAgICAqICB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdCBwYWlyIGluCisgICAgICAgKiAgdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgKiAga2V5cy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIHBhaXIgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcKKyAgICAgICAqICB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGxhc3QgcGFpciBpbgorICAgICAgICogIHRoZSAlbXVsdGltYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUKKyAgICAgICAqICBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBsYXN0IHBhaXIgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gb25lIGJlZm9yZSB0aGUKKyAgICAgICAqICBmaXJzdCBwYWlyIGluIHRoZSAlbXVsdGltYXAuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgcGFpciBpbiB0aGUgJW11bHRpbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICBkZXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LnJlbmQoKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBwYWlyCisgICAgICAgKiAgaW4gdGhlICVtdWx0aW1hcC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcgdG8KKyAgICAgICAqICB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgcGFpciBpbiB0aGUgJW11bHRpbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGxhc3QgcGFpciBpbiB0aGUgJW11bHRpbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZyBvcmRlcgorICAgICAgICogIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgcGFpciBpbiB0aGUgJW11bHRpbWFwLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICBkZXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KKyNlbmRpZgorCisgICAgICAvLyBjYXBhY2l0eQorICAgICAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgJW11bHRpbWFwIGlzIGVtcHR5LiAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQorCisgICAgICAvKiogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgJW11bHRpbWFwLiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LnNpemUoKTsgfQorCisgICAgICAvKiogUmV0dXJucyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSAlbXVsdGltYXAuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KKworICAgICAgLy8gbW9kaWZpZXJzCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEJ1aWxkIGFuZCBpbnNlcnQgYSBzdGQ6OnBhaXIgaW50byB0aGUgJW11bHRpbWFwLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSBhIG5ldyBwYWlyIGluc3RhbmNlIChzZWUKKyAgICAgICAqCSAgICAgICAgc3RkOjpwaWVjZXdpc2VfY29udHJ1Y3QgZm9yIHBhc3NpbmcgYXJndW1lbnRzIHRvIGVhY2gKKyAgICAgICAqCSAgICAgICAgcGFydCBvZiB0aGUgcGFpciBjb25zdHJ1Y3RvcikuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIChrZXksdmFsdWUpIHBhaXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYnVpbGRzIGFuZCBpbnNlcnRzIGEgKGtleSwgdmFsdWUpICVwYWlyIGludG8gdGhlCisgICAgICAgKiAgJW11bHRpbWFwLgorICAgICAgICogIENvbnRyYXJ5IHRvIGEgc3RkOjptYXAgdGhlICVtdWx0aW1hcCBkb2VzIG5vdCByZWx5IG9uIHVuaXF1ZSBrZXlzIGFuZAorICAgICAgICogIHRodXMgbXVsdGlwbGUgcGFpcnMgd2l0aCB0aGUgc2FtZSBrZXkgY2FuIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsgcmV0dXJuIF9NX3QuX01fZW1wbGFjZV9lcXVhbChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBCdWlsZHMgYW5kIGluc2VydHMgYSBzdGQ6OnBhaXIgaW50byB0aGUgJW11bHRpbWFwLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBBbiBpdGVyYXRvciB0aGF0IHNlcnZlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgdGhlIHBhaXIKKyAgICAgICAqICAgICAgICAgICAgICAgIHNob3VsZCBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIF9fYXJncyAgQXJndW1lbnRzIHVzZWQgdG8gZ2VuZXJhdGUgYSBuZXcgcGFpciBpbnN0YW5jZSAoc2VlCisgICAgICAgKgkgICAgICAgICBzdGQ6OnBpZWNld2lzZV9jb250cnVjdCBmb3IgcGFzc2luZyBhcmd1bWVudHMgdG8gZWFjaAorICAgICAgICoJICAgICAgICAgcGFydCBvZiB0aGUgcGFpciBjb25zdHJ1Y3RvcikuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgKGtleSx2YWx1ZSkgcGFpci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGEgKGtleSwgdmFsdWUpIHBhaXIgaW50byB0aGUgJW11bHRpbWFwLgorICAgICAgICogIENvbnRyYXJ5IHRvIGEgc3RkOjptYXAgdGhlICVtdWx0aW1hcCBkb2VzIG5vdCByZWx5IG9uIHVuaXF1ZSBrZXlzIGFuZAorICAgICAgICogIHRodXMgbXVsdGlwbGUgcGFpcnMgd2l0aCB0aGUgc2FtZSBrZXkgY2FuIGJlIGluc2VydGVkLgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4gcG90ZW50aWFsbHkKKyAgICAgICAqICBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIG1vcmUgb24gQGEgaGludGluZywgc2VlOgorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGxvZ2FyaXRobWljIHRpbWUgKGlmIHRoZSBoaW50IGlzIG5vdCB0YWtlbikuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9oaW50KGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICByZXR1cm4gX01fdC5fTV9lbXBsYWNlX2hpbnRfZXF1YWwoX19wb3MsCisJCQkJCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSW5zZXJ0cyBhIHN0ZDo6cGFpciBpbnRvIHRoZSAlbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIFBhaXIgdG8gYmUgaW5zZXJ0ZWQgKHNlZSBzdGQ6Om1ha2VfcGFpciBmb3IgZWFzeSBjcmVhdGlvbgorICAgICAgICogICAgICAgICAgICAgb2YgcGFpcnMpLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIChrZXksdmFsdWUpIHBhaXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBhIChrZXksIHZhbHVlKSBwYWlyIGludG8gdGhlICVtdWx0aW1hcC4KKyAgICAgICAqICBDb250cmFyeSB0byBhIHN0ZDo6bWFwIHRoZSAlbXVsdGltYXAgZG9lcyBub3QgcmVseSBvbiB1bmlxdWUga2V5cyBhbmQKKyAgICAgICAqICB0aHVzIG11bHRpcGxlIHBhaXJzIHdpdGggdGhlIHNhbWUga2V5IGNhbiBiZSBpbnNlcnRlZC4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGxvZ2FyaXRobWljIHRpbWUuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5fTV9pbnNlcnRfZXF1YWwoX194KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPHZhbHVlX3R5cGUsCisJCQkJCQkgICAgX1BhaXImJj46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgaW5zZXJ0KF9QYWlyJiYgX194KQorICAgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF9lcXVhbChzdGQ6OmZvcndhcmQ8X1BhaXI+KF9feCkpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEluc2VydHMgYSBzdGQ6OnBhaXIgaW50byB0aGUgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgdGhhdCBzZXJ2ZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIHRoZQorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgcGFpciBzaG91bGQgYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIFBhaXIgdG8gYmUgaW5zZXJ0ZWQgKHNlZSBzdGQ6Om1ha2VfcGFpciBmb3IgZWFzeSBjcmVhdGlvbgorICAgICAgICogICAgICAgICAgICAgICBvZiBwYWlycykuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgKGtleSx2YWx1ZSkgcGFpci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGEgKGtleSwgdmFsdWUpIHBhaXIgaW50byB0aGUgJW11bHRpbWFwLgorICAgICAgICogIENvbnRyYXJ5IHRvIGEgc3RkOjptYXAgdGhlICVtdWx0aW1hcCBkb2VzIG5vdCByZWx5IG9uIHVuaXF1ZSBrZXlzIGFuZAorICAgICAgICogIHRodXMgbXVsdGlwbGUgcGFpcnMgd2l0aCB0aGUgc2FtZSBrZXkgY2FuIGJlIGluc2VydGVkLgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4gcG90ZW50aWFsbHkKKyAgICAgICAqICBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIG1vcmUgb24gQGEgaGludGluZywgc2VlOgorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGxvZ2FyaXRobWljIHRpbWUgKGlmIHRoZSBoaW50IGlzIG5vdCB0YWtlbikuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyNlbHNlCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorI2VuZGlmCisgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF9lcXVhbF8oX19wb3NpdGlvbiwgX194KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPHZhbHVlX3R5cGUsCisJCQkJCQkgICAgX1BhaXImJj46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIF9QYWlyJiYgX194KQorICAgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF9lcXVhbF8oX19wb3NpdGlvbiwKKwkJCQkgICAgICAgc3RkOjpmb3J3YXJkPF9QYWlyPihfX3gpKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgYXR0ZW1wdHMgdG8gaW5zZXJ0IGEgcmFuZ2UKKyAgICAgICAqICBvZiBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqCisgICAgICAgKiAgQ29tcGxleGl0eSBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHJhbmdlIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7IF9NX3QuX01faW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYSBsaXN0IG9mIHN0ZDo6cGFpcnMgaW50byB0aGUgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX19sICBBIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBvZiBwYWlycyB0byBiZQorICAgICAgICogICAgICAgICAgICAgICBpbnNlcnRlZC4KKyAgICAgICAqCisgICAgICAgKiAgQ29tcGxleGl0eSBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHJhbmdlIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IHRoaXMtPmluc2VydChfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGFuIGVsZW1lbnQgZnJvbSBhICVtdWx0aW1hcC4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IGltbWVkaWF0ZWx5IGZvbGxvd2luZworICAgICAgICogICAgICAgICAgQGEgcG9zaXRpb24gcHJpb3IgdG8gdGhlIGVsZW1lbnQgYmVpbmcgZXJhc2VkLiBJZiBubyBzdWNoIAorICAgICAgICogICAgICAgICAgZWxlbWVudCBleGlzdHMsIGVuZCgpIGlzIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbiBlbGVtZW50LCBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiBpdGVyYXRvciwKKyAgICAgICAqICBmcm9tIGEgJW11bHRpbWFwLiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsCisgICAgICAgKiAgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzCisgICAgICAgKiAgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MKKyAgICAgICAqICByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CisKKyAgICAgIC8vIExXRyAyMDU5LgorICAgICAgX0dMSUJDWFhfQUJJX1RBR19DWFgxMQorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CisjZWxzZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhbiBlbGVtZW50IGZyb20gYSAlbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFuIGVsZW1lbnQsIHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIGl0ZXJhdG9yLAorICAgICAgICogIGZyb20gYSAlbXVsdGltYXAuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwKKyAgICAgICAqICBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMKKyAgICAgICAqICBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncworICAgICAgICogIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBlbGVtZW50cyBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGtleS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IG9mIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgZXJhc2VkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbGwgZWxlbWVudHMgbG9jYXRlZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20gYQorICAgICAgICogICVtdWx0aW1hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGEgW2ZpcnN0LGxhc3QpIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gYSAlbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICBlcmFzZWQuCisgICAgICAgKiAgQHBhcmFtIF9fbGFzdCBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgZXJhc2VkIC4KKyAgICAgICAqICBAcmV0dXJuIFRoZSBpdGVyYXRvciBAYSBfX2xhc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZnJvbSBhICVtdWx0aW1hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90CisgICAgICAgKiAgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncworICAgICAgICogIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZWxzZQorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMTMwLiBBc3NvY2lhdGl2ZSBlcmFzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhIFtmaXJzdCxsYXN0KSByYW5nZSBvZiBlbGVtZW50cyBmcm9tIGEgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gX19sYXN0IEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvCisgICAgICAgKiAgICAgICAgICAgICAgICBiZSBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZnJvbSBhICVtdWx0aW1hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90CisgICAgICAgKiAgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncworICAgICAgICogIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3dhcHMgZGF0YSB3aXRoIGFub3RoZXIgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX194ICBBICVtdWx0aW1hcCBvZiB0aGUgc2FtZSBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZXhjaGFuZ2VzIHRoZSBlbGVtZW50cyBiZXR3ZWVuIHR3byBtdWx0aW1hcHMgaW4gY29uc3RhbnQgdGltZS4KKyAgICAgICAqICAoSXQgaXMgb25seSBzd2FwcGluZyBhIHBvaW50ZXIsIGFuIGludGVnZXIsIGFuZCBhbiBpbnN0YW5jZSBvZgorICAgICAgICogIHRoZSBAYyBDb21wYXJlIHR5cGUgKHdoaWNoIGl0c2VsZiBpcyBvZnRlbiBzdGF0ZWxlc3MgYW5kIGVtcHR5KSwgc28gaXQKKyAgICAgICAqICBzaG91bGQgYmUgcXVpdGUgZmFzdC4pCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBnbG9iYWwgc3RkOjpzd2FwKCkgZnVuY3Rpb24gaXMgc3BlY2lhbGl6ZWQgc3VjaCB0aGF0CisgICAgICAgKiAgc3RkOjpzd2FwKG0xLG0yKSB3aWxsIGZlZWQgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChtdWx0aW1hcCYgX194KQorICAgICAgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEVyYXNlcyBhbGwgZWxlbWVudHMgaW4gYSAlbXVsdGltYXAuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5CisgICAgICAgKiAgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLAorICAgICAgICogIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIKKyAgICAgICAqICBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX3QuY2xlYXIoKTsgfQorCisgICAgICAvLyBvYnNlcnZlcnMKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgdGhlIGtleSBjb21wYXJpc29uIG9iamVjdCBvdXQgb2Ygd2hpY2ggdGhlICVtdWx0aW1hcAorICAgICAgICogIHdhcyBjb25zdHJ1Y3RlZC4KKyAgICAgICAqLworICAgICAga2V5X2NvbXBhcmUKKyAgICAgIGtleV9jb21wKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgdmFsdWUgY29tcGFyaXNvbiBvYmplY3QsIGJ1aWx0IGZyb20gdGhlIGtleSBjb21wYXJpc29uCisgICAgICAgKiAgb2JqZWN0IG91dCBvZiB3aGljaCB0aGUgJW11bHRpbWFwIHdhcyBjb25zdHJ1Y3RlZC4KKyAgICAgICAqLworICAgICAgdmFsdWVfY29tcGFyZQorICAgICAgdmFsdWVfY29tcCgpIGNvbnN0CisgICAgICB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KKworICAgICAgLy8gbXVsdGltYXAgb3BlcmF0aW9ucworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRyaWVzIHRvIGxvY2F0ZSBhbiBlbGVtZW50IGluIGEgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIgZWxlbWVudCwKKyAgICAgICAqICAgICAgICAgICBvciBlbmQoKSBpZiBub3QgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBzb3VnaHQgYWZ0ZXIgJXBhaXIuICBJZiB1bnN1Y2Nlc3NmdWwgaXQgcmV0dXJucyB0aGUKKyAgICAgICAqICBwYXN0LXRoZS1lbmQgKCBAYyBlbmQoKSApIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRyaWVzIHRvIGxvY2F0ZSBhbiBlbGVtZW50IGluIGEgJW11bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIKKyAgICAgICAqICAgICAgICAgICBlbGVtZW50LCBvciBlbmQoKSBpZiBub3QgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGNvbnN0YW50CisgICAgICAgKiAgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHNvdWdodCBhZnRlciAlcGFpci4gIElmIHVuc3VjY2Vzc2Z1bCBpdAorICAgICAgICogIHJldHVybnMgdGhlIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRmluZHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB3aXRoIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlycyB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggc3BlY2lmaWVkIGtleS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgYmVnaW5uaW5nIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBmaXJzdCBlbGVtZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAqICAgICAgICAgICB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN1YnNlcXVlbmNlIG9mIGVsZW1lbnRzCisgICAgICAgKiAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBrZXkuICBJZiB1bnN1Y2Nlc3NmdWwgaXQgcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGEgZ3JlYXRlciB2YWx1ZSB0aGFuIGdpdmVuIGtleQorICAgICAgICogIG9yIGVuZCgpIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgYmVnaW5uaW5nIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciBwb2ludGluZyB0byBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICAgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN1YnNlcXVlbmNlIG9mCisgICAgICAgKiAgZWxlbWVudHMgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBrZXkuICBJZiB1bnN1Y2Nlc3NmdWwgdGhlCisgICAgICAgKiAgaXRlcmF0b3Igd2lsbCBwb2ludCB0byB0aGUgbmV4dCBncmVhdGVzdCBlbGVtZW50IG9yLCBpZiBubworICAgICAgICogIHN1Y2ggZ3JlYXRlciBlbGVtZW50IGV4aXN0cywgdG8gZW5kKCkuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgZW5kIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXIgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICBncmVhdGVyIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBlbmQgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSBvZiAoa2V5LCB2YWx1ZSkgcGFpciB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHBvaW50aW5nIHRvIGZpcnN0IGl0ZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgZ3JlYXRlciB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IG9mIChrZXksIHZhbHVlKSBwYWlycyB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFBhaXIgb2YgaXRlcmF0b3JzIHRoYXQgcG9zc2libHkgcG9pbnRzIHRvIHRoZSBzdWJzZXF1ZW5jZQorICAgICAgICogICAgICAgICAgIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGMubG93ZXJfYm91bmQodmFsKSwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGMudXBwZXJfYm91bmQodmFsKSkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICogIChidXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIHRoZSBjYWxscyBzZXBhcmF0ZWx5KS4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgKGtleSwgdmFsdWUpIHBhaXJzIHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgUGFpciBvZiByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvcnMgdGhhdCBwb3NzaWJseSBwb2ludHMKKyAgICAgICAqICAgICAgICAgICB0byB0aGUgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAqICBAY29kZQorICAgICAgICogICAgc3RkOjptYWtlX3BhaXIoYy5sb3dlcl9ib3VuZCh2YWwpLAorICAgICAgICogICAgICAgICAgICAgICAgICAgYy51cHBlcl9ib3VuZCh2YWwpKQorICAgICAgICogIEBlbmRjb2RlCisgICAgICAgKiAgKGJ1dCBpcyBmYXN0ZXIgdGhhbiBtYWtpbmcgdGhlIGNhbGxzIHNlcGFyYXRlbHkpLgorICAgICAgICovCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSzEsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCisJCSAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCisJCSAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOworICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNdWx0aW1hcCBlcXVhbGl0eSBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICBfX3ggIEEgJW11bHRpbWFwLgorICAgKiAgQHBhcmFtICBfX3kgIEEgJW11bHRpbWFwIG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgX194LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgdGhlIHNpemUgYW5kIGVsZW1lbnRzIG9mIHRoZSBtYXBzIGFyZSBlcXVhbC4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBtdWx0aW1hcHMuICBNdWx0aW1hcHMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiB0aGVpciBzaXplcyBhcmUgZXF1YWwsCisgICAqICBhbmQgaWYgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb21wYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBNdWx0aW1hcCBvcmRlcmluZyByZWxhdGlvbi4KKyAgICogIEBwYXJhbSAgX194ICBBICVtdWx0aW1hcC4KKyAgICogIEBwYXJhbSAgX195ICBBICVtdWx0aW1hcCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIF9feC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIEBhIHggaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIEBhIHkuCisgICAqCisgICAqICBUaGlzIGlzIGEgdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBtdWx0aW1hcHMuICBUaGUgZWxlbWVudHMgbXVzdCBiZSBjb21wYXJhYmxlIHdpdGggQGMgPC4KKyAgICoKKyAgICogIFNlZSBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKCkgZm9yIGhvdyB0aGUgZGV0ZXJtaW5hdGlvbiBpcyBtYWRlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcj09CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgLy8vIFNlZSBzdGQ6Om11bHRpbWFwOjpzd2FwKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorICAgICAgICAgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvKiBfU1RMX01VTFRJTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfbXVsdGlzZXQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfbXVsdGlzZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2ViMDJhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9tdWx0aXNldC5oCkBAIC0wLDAgKzEsNzk4IEBACisvLyBNdWx0aXNldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX211bHRpc2V0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtzZXR9CisgKi8KKworI2lmbmRlZiBfU1RMX01VTFRJU0VUX0gKKyNkZWZpbmUgX1NUTF9NVUxUSVNFVF9IIDEKKworI2luY2x1ZGUgPGJpdHMvY29uY2VwdF9jaGVjay5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIG1hZGUgdXAgb2YgZWxlbWVudHMsIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQKKyAgICogIGluIGxvZ2FyaXRobWljIHRpbWUuCisgICAqCisgICAqICBAaW5ncm91cCBhc3NvY2lhdGl2ZV9jb250YWluZXJzCisgICAqCisgICAqCisgICAqICBAdHBhcmFtIF9LZXkgIFR5cGUgb2Yga2V5IG9iamVjdHMuCisgICAqICBAdHBhcmFtIF9Db21wYXJlICBDb21wYXJpc29uIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBsZXNzPF9LZXk+LgorICAgKiAgQHRwYXJhbSBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8X0tleT4uCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY2Ij5yZXZlcnNpYmxlIGNvbnRhaW5lcjwvYT4sIGFuZCBhbgorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjkiPmFzc29jaWF0aXZlIGNvbnRhaW5lcjwvYT4gKHVzaW5nIGVxdWl2YWxlbnQKKyAgICogIGtleXMpLiAgRm9yIGEgQGMgbXVsdGlzZXQ8S2V5PiB0aGUga2V5X3R5cGUgYW5kIHZhbHVlX3R5cGUgYXJlIEtleS4KKyAgICoKKyAgICogIE11bHRpc2V0cyBzdXBwb3J0IGJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzLgorICAgKgorICAgKiAgVGhlIHByaXZhdGUgdHJlZSBkYXRhIGlzIGRlY2xhcmVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGZvciBzZXQgYW5kCisgICAqICBtdWx0aXNldDsgdGhlIGRpc3RpbmN0aW9uIGlzIG1hZGUgZW50aXJlbHkgaW4gaG93IHRoZSB0cmVlIGZ1bmN0aW9ucyBhcmUKKyAgICogIGNhbGxlZCAoKl91bmlxdWUgdmVyc3VzICpfZXF1YWwsIHNhbWUgYXMgdGhlIHN0YW5kYXJkKS4KKyAgKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlID0gc3RkOjpsZXNzPF9LZXk+LAorCSAgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3MgbXVsdGlzZXQKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgICAgICAgICAgICAgICAgICAgX0FsbG9jX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX0tleSwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzNChfQ29tcGFyZSwgYm9vbCwgX0tleSwgX0tleSwKKwkJCQlfQmluYXJ5RnVuY3Rpb25Db25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMihfS2V5LCBfQWxsb2NfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkJCisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlZGVmczoKKyAgICAgIHR5cGVkZWYgX0tleSAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIF9LZXkgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2MgICBhbGxvY2F0b3JfdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICAvLy8gVGhpcyB0dXJucyBhIHJlZC1ibGFjayB0cmVlIGludG8gYSBbbXVsdGldc2V0LgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfS2V5Pjo6b3RoZXIgX0tleV9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLCBfSWRlbnRpdHk8dmFsdWVfdHlwZT4sCisJCSAgICAgICBrZXlfY29tcGFyZSwgX0tleV9hbGxvY190eXBlPiBfUmVwX3R5cGU7CisgICAgICAvLy8gVGhlIGFjdHVhbCB0cmVlIHN0cnVjdHVyZS4KKyAgICAgIF9SZXBfdHlwZSBfTV90OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfS2V5X2FsbG9jX3R5cGU6OnBvaW50ZXIgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0tleV9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9LZXlfYWxsb2NfdHlwZTo6cmVmZXJlbmNlICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9LZXlfYWxsb2NfdHlwZTo6Y29uc3RfcmVmZXJlbmNlICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMDMuIHNldDo6aXRlcmF0b3IgaXMgcmVxdWlyZWQgdG8gYmUgbW9kaWZpYWJsZSwKKyAgICAgIC8vIGJ1dCB0aGlzIGFsbG93cyBtb2RpZmljYXRpb24gb2Yga2V5cy4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgLy8gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBtdWx0aXNldCgpCisgICAgICA6IF9NX3QoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJW11bHRpc2V0IHdpdGggbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2NvbXAgIENvbXBhcmF0b3IgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbXVsdGlzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX3QoX19jb21wLCBfS2V5X2FsbG9jX3R5cGUoX19hKSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJW11bHRpc2V0IGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJW11bHRpc2V0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBmcm9tCisgICAgICAgKiAgW2ZpcnN0LGxhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiBpZiB0aGUgcmFuZ2UgaXMgYWxyZWFkeSBzb3J0ZWQsCisgICAgICAgKiAgYW5kIE5sb2dOIG90aGVyd2lzZSAod2hlcmUgTiBpcyBkaXN0YW5jZShfX2ZpcnN0LF9fbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorCTogX01fdCgpCisgICAgICAgIHsgX01fdC5fTV9pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVtdWx0aXNldCBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2NvbXAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlbXVsdGlzZXQgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICBbX19maXJzdCxfX2xhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiBpZiB0aGUgcmFuZ2UgaXMgYWxyZWFkeSBzb3J0ZWQsCisgICAgICAgKiAgYW5kIE5sb2dOIG90aGVyd2lzZSAod2hlcmUgTiBpcyBkaXN0YW5jZShfX2ZpcnN0LF9fbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKKwkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01fdChfX2NvbXAsIF9LZXlfYWxsb2NfdHlwZShfX2EpKQorICAgICAgICB7IF9NX3QuX01faW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGlzZXQgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbXVsdGlzZXQgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJW11bHRpc2V0IHVzZXMgYSBjb3B5IG9mIHRoZSBhbGxvY2F0aW9uIG9iamVjdCB1c2VkCisgICAgICAgKiAgYnkgQGEgX194LgorICAgICAgICovCisgICAgICBtdWx0aXNldChjb25zdCBtdWx0aXNldCYgX194KQorICAgICAgOiBfTV90KF9feC5fTV90KSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGlzZXQgbW92ZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlbXVsdGlzZXQgb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJW11bHRpc2V0IGNvbnRhaW5zIHRoZSBleGFjdCBjb250ZW50cyBvZiBAYSBfX3guCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIF9feCBhcmUgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICVtdWx0aXNldC4KKyAgICAgICAqLworICAgICAgbXVsdGlzZXQobXVsdGlzZXQmJiBfX3gpCisgICAgICBub2V4Y2VwdChpc19ub3Rocm93X2NvcHlfY29uc3RydWN0aWJsZTxfQ29tcGFyZT46OnZhbHVlKQorICAgICAgOiBfTV90KHN0ZDo6bW92ZShfX3guX01fdCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVtdWx0aXNldCBmcm9tIGFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2NvbXAgIEEgY29tcGFyaXNvbiBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlbXVsdGlzZXQgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGZyb20KKyAgICAgICAqICB0aGUgbGlzdC4gIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIGxpc3QgaXMgYWxyZWFkeSBzb3J0ZWQsCisgICAgICAgKiAgYW5kIE5sb2dOIG90aGVyd2lzZSAod2hlcmUgTiBpcyBAYSBfX2wuc2l6ZSgpKS4KKyAgICAgICAqLworICAgICAgbXVsdGlzZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9LZXlfYWxsb2NfdHlwZShfX2EpKQorICAgICAgeyBfTV90Ll9NX2luc2VydF9lcXVhbChfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJU11bHRpc2V0IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJW11bHRpc2V0IG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgZWxlbWVudHMgb2YgQGEgX194IGFyZSBjb3BpZWQsIGJ1dCB1bmxpa2UgdGhlIGNvcHkKKyAgICAgICAqICBjb25zdHJ1Y3RvciwgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0oY29uc3QgbXVsdGlzZXQmIF9feCkKKyAgICAgIHsKKwlfTV90ID0gX194Ll9NX3Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGlzZXQgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX194ICBBICVtdWx0aXNldCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgY29udGVudHMgb2YgQGEgX194IGFyZSBtb3ZlZCBpbnRvIHRoaXMgJW11bHRpc2V0CisgICAgICAgKiAgKHdpdGhvdXQgY29weWluZykuICBAYSBfX3ggaXMgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkCisgICAgICAgKiAgJW11bHRpc2V0LgorICAgICAgICovCisgICAgICBtdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPShtdWx0aXNldCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlTXVsdGlzZXQgbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgJW11bHRpc2V0IHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUKKyAgICAgICAqICBpbml0aWFsaXplciBsaXN0IEBhIF9fbC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJW11bHRpc2V0IGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAlbXVsdGlzZXQncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICBtdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gYWNjZXNzb3JzOgorCisgICAgICAvLy8gIFJldHVybnMgdGhlIGNvbXBhcmlzb24gb2JqZWN0LgorICAgICAga2V5X2NvbXBhcmUKKyAgICAgIGtleV9jb21wKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQorICAgICAgLy8vICBSZXR1cm5zIHRoZSBjb21wYXJpc29uIG9iamVjdC4KKyAgICAgIHZhbHVlX2NvbXBhcmUKKyAgICAgIHZhbHVlX2NvbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CisgICAgICAvLy8gIFJldHVybnMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIG9iamVjdC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKF9NX3QuZ2V0X2FsbG9jYXRvcigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJW11bHRpc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVtdWx0aXNldC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlcgorICAgICAgICogIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGxhc3QgZWxlbWVudCBpbiB0aGUgJW11bHRpc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZyBvcmRlcgorICAgICAgICogIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJW11bHRpc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBhc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IGluIHRoZSAlbXVsdGlzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyCisgICAgICAgKiAgYWNjb3JkaW5nIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV90LnJlbmQoKTsgfQorI2VuZGlmCisKKyAgICAgIC8vLyAgUmV0dXJucyB0cnVlIGlmIHRoZSAlc2V0IGlzIGVtcHR5LgorICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgJXNldC4KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LnNpemUoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgJXNldC4KKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3dhcHMgZGF0YSB3aXRoIGFub3RoZXIgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX194ICBBICVtdWx0aXNldCBvZiB0aGUgc2FtZSBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZXhjaGFuZ2VzIHRoZSBlbGVtZW50cyBiZXR3ZWVuIHR3byBtdWx0aXNldHMgaW4gY29uc3RhbnQgdGltZS4KKyAgICAgICAqICAoSXQgaXMgb25seSBzd2FwcGluZyBhIHBvaW50ZXIsIGFuIGludGVnZXIsIGFuZCBhbiBpbnN0YW5jZSBvZiB0aGUgQGMKKyAgICAgICAqICBDb21wYXJlIHR5cGUgKHdoaWNoIGl0c2VsZiBpcyBvZnRlbiBzdGF0ZWxlc3MgYW5kIGVtcHR5KSwgc28gaXQgc2hvdWxkCisgICAgICAgKiAgYmUgcXVpdGUgZmFzdC4pCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBnbG9iYWwgc3RkOjpzd2FwKCkgZnVuY3Rpb24gaXMgc3BlY2lhbGl6ZWQgc3VjaCB0aGF0CisgICAgICAgKiAgc3RkOjpzd2FwKHMxLHMyKSB3aWxsIGZlZWQgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChtdWx0aXNldCYgX194KQorICAgICAgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CisKKyAgICAgIC8vIGluc2VydC9lcmFzZQorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBCdWlsZHMgYW5kIGluc2VydHMgYW4gZWxlbWVudCBpbnRvIHRoZSAlbXVsdGlzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX2FyZ3MgIEFyZ3VtZW50cyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBlbGVtZW50IGluc3RhbmNlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGFuIGVsZW1lbnQgaW50byB0aGUgJW11bHRpc2V0LiAgQ29udHJhcnkKKyAgICAgICAqICB0byBhIHN0ZDo6c2V0IHRoZSAlbXVsdGlzZXQgZG9lcyBub3QgcmVseSBvbiB1bmlxdWUga2V5cyBhbmQgdGh1cworICAgICAgICogIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSBlbGVtZW50IGNhbiBiZSBpbnNlcnRlZC4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGxvZ2FyaXRobWljIHRpbWUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7IHJldHVybiBfTV90Ll9NX2VtcGxhY2VfZXF1YWwoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQnVpbGRzIGFuZCBpbnNlcnRzIGFuIGVsZW1lbnQgaW50byB0aGUgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUKKyAgICAgICAqICAgICAgICAgICAgICAgIGVsZW1lbnQgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZWxlbWVudCBpbnN0YW5jZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBhbiBlbGVtZW50IGludG8gdGhlICVtdWx0aXNldC4gIENvbnRyYXJ5CisgICAgICAgKiAgdG8gYSBzdGQ6OnNldCB0aGUgJW11bHRpc2V0IGRvZXMgbm90IHJlbHkgb24gdW5pcXVlIGtleXMgYW5kIHRodXMKKyAgICAgICAqICBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgZWxlbWVudCBjYW4gYmUgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4gcG90ZW50aWFsbHkKKyAgICAgICAqICBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqICBmb3IgbW9yZSBvbiBAYSBoaW50aW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZSAoaWYgdGhlIGhpbnQgaXMgbm90IHRha2VuKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHJldHVybiBfTV90Ll9NX2VtcGxhY2VfaGludF9lcXVhbChfX3BvcywKKwkJCQkJICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJbnNlcnRzIGFuIGVsZW1lbnQgaW50byB0aGUgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBhbiBlbGVtZW50IGludG8gdGhlICVtdWx0aXNldC4gIENvbnRyYXJ5CisgICAgICAgKiAgdG8gYSBzdGQ6OnNldCB0aGUgJW11bHRpc2V0IGRvZXMgbm90IHJlbHkgb24gdW5pcXVlIGtleXMgYW5kIHRodXMKKyAgICAgICAqICBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgZWxlbWVudCBjYW4gYmUgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBsb2dhcml0aG1pYyB0aW1lLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuX01faW5zZXJ0X2VxdWFsKF9feCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQodmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuX01faW5zZXJ0X2VxdWFsKHN0ZDo6bW92ZShfX3gpKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJbnNlcnRzIGFuIGVsZW1lbnQgaW50byB0aGUgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgdGhhdCBzZXJ2ZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIHRoZQorICAgICAgICogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBhbiBlbGVtZW50IGludG8gdGhlICVtdWx0aXNldC4gIENvbnRyYXJ5CisgICAgICAgKiAgdG8gYSBzdGQ6OnNldCB0aGUgJW11bHRpc2V0IGRvZXMgbm90IHJlbHkgb24gdW5pcXVlIGtleXMgYW5kIHRodXMKKyAgICAgICAqICBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgZWxlbWVudCBjYW4gYmUgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4gcG90ZW50aWFsbHkKKyAgICAgICAqICBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqICBmb3IgbW9yZSBvbiBAYSBoaW50aW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZSAoaWYgdGhlIGhpbnQgaXMgbm90IHRha2VuKS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90Ll9NX2luc2VydF9lcXVhbF8oX19wb3NpdGlvbiwgX194KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5fTV9pbnNlcnRfZXF1YWxfKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgdHJpZXMgdG8gaW5zZXJ0IGEgcmFuZ2Ugb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfTV90Ll9NX2luc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gaW5zZXJ0IGEgbGlzdCBvZiBlbGVtZW50cyBpbnRvIHRoZSAlbXVsdGlzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEEgc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IG9mIGVsZW1lbnRzCisgICAgICAgKiAgICAgICAgICAgICAgIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBDb21wbGV4aXR5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgcmFuZ2UgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgdGhpcy0+aW5zZXJ0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYW4gZWxlbWVudCBmcm9tIGEgJW11bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nCisgICAgICAgKiAgICAgICAgICBAYSBwb3NpdGlvbiBwcmlvciB0byB0aGUgZWxlbWVudCBiZWluZyBlcmFzZWQuIElmIG5vIHN1Y2ggCisgICAgICAgKiAgICAgICAgICBlbGVtZW50IGV4aXN0cywgZW5kKCkgaXMgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFuIGVsZW1lbnQsIHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIGl0ZXJhdG9yLAorICAgICAgICogIGZyb20gYSAlbXVsdGlzZXQuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwKKyAgICAgICAqICBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMKKyAgICAgICAqICBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncworICAgICAgICogIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBfR0xJQkNYWF9BQklfVEFHX0NYWDExCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KKyNlbHNlCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGFuIGVsZW1lbnQgZnJvbSBhICVtdWx0aXNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYW4gZWxlbWVudCwgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gaXRlcmF0b3IsCisgICAgICAgKiAgZnJvbSBhICVtdWx0aXNldC4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LAorICAgICAgICogIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcworICAgICAgICogIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGVsZW1lbnRzIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFsbCBlbGVtZW50cyBsb2NhdGVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbSBhCisgICAgICAgKiAgJW11bHRpc2V0LgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZgorICAgICAgICogIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZAorICAgICAgICogIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYSBbZmlyc3QsbGFzdCkgcmFuZ2Ugb2YgZWxlbWVudHMgZnJvbSBhICVtdWx0aXNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gX19sYXN0IEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvCisgICAgICAgKiAgICAgICAgICAgICAgICBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiBUaGUgaXRlcmF0b3IgQGEgbGFzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBmcm9tIGEgJW11bHRpc2V0LgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QKKyAgICAgICAqICB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIF9HTElCQ1hYX0FCSV9UQUdfQ1hYMTEKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbHNlCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGEgW2ZpcnN0LGxhc3QpIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gYSAlbXVsdGlzZXQuCisgICAgICAgKiAgQHBhcmFtICBmaXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gIGxhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvIGJlIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBmcm9tIGEgJW11bHRpc2V0LgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QKKyAgICAgICAqICB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIGFsbCBlbGVtZW50cyBpbiBhICVtdWx0aXNldC4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkKKyAgICAgICAqICBlcmFzZXMgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsCisgICAgICAgKiAgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlcgorICAgICAgICogIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgX01fdC5jbGVhcigpOyB9CisKKyAgICAgIC8vIG11bHRpc2V0IG9wZXJhdGlvbnM6CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgZWxlbWVudHMgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuIE51bWJlciBvZiBlbGVtZW50cyB3aXRoIHNwZWNpZmllZCBrZXkuCisgICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuICBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgVHJpZXMgdG8gbG9jYXRlIGFuIGVsZW1lbnQgaW4gYSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gc291Z2h0LWFmdGVyIGVsZW1lbnQsIG9yIGVuZCgpIGlmIG5vdAorICAgICAgICogICAgICAgICAgIGZvdW5kLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEga2V5IGFuZCB0cmllcyB0byBsb2NhdGUgdGhlIGVsZW1lbnQgd2l0aCB3aGljaAorICAgICAgICogIHRoZSBrZXkgbWF0Y2hlcy4gIElmIHN1Y2Nlc3NmdWwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gaXRlcmF0b3IKKyAgICAgICAqICBwb2ludGluZyB0byB0aGUgc291Z2h0IGFmdGVyIGVsZW1lbnQuICBJZiB1bnN1Y2Nlc3NmdWwgaXQgcmV0dXJucyB0aGUKKyAgICAgICAqICBwYXN0LXRoZS1lbmQgKCBAYyBlbmQoKSApIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgYmVnaW5uaW5nIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBmaXJzdCBlbGVtZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIKKyAgICAgICAqICAgICAgICAgICB0aGFuIGtleSwgb3IgZW5kKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIHN1YnNlcXVlbmNlIG9mIGVsZW1lbnRzCisgICAgICAgKiAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBrZXkuICBJZiB1bnN1Y2Nlc3NmdWwgaXQgcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGEgZ3JlYXRlciB2YWx1ZSB0aGFuIGdpdmVuIGtleQorICAgICAgICogIG9yIGVuZCgpIGlmIG5vIHN1Y2ggZWxlbWVudCBleGlzdHMuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyB0aGUgZW5kIG9mIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50CisgICAgICAgKiAgICAgICAgICBncmVhdGVyIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBQYWlyIG9mIGl0ZXJhdG9ycyB0aGF0IHBvc3NpYmx5IHBvaW50cyB0byB0aGUgc3Vic2VxdWVuY2UKKyAgICAgICAqICAgICAgICAgICBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0bworICAgICAgICogIEBjb2RlCisgICAgICAgKiAgICBzdGQ6Om1ha2VfcGFpcihjLmxvd2VyX2JvdW5kKHZhbCksCisgICAgICAgKiAgICAgICAgICAgICAgICAgICBjLnVwcGVyX2JvdW5kKHZhbCkpCisgICAgICAgKiAgQGVuZGNvZGUKKyAgICAgICAqICAoYnV0IGlzIGZhc3RlciB0aGFuIG1ha2luZyB0aGUgY2FsbHMgc2VwYXJhdGVseSkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgb25seSBtYWtlcyBzZW5zZSBmb3IgbXVsdGlzZXRzLgorICAgICAgICovCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsgfQorICAgICAgLy9AfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSzEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LMSwgX0MxLCBfQTE+JiwKKwkJICAgY29uc3QgbXVsdGlzZXQ8X0sxLCBfQzEsIF9BMT4mKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I8IChjb25zdCBtdWx0aXNldDxfSzEsIF9DMSwgX0ExPiYsCisJCSAgIGNvbnN0IG11bHRpc2V0PF9LMSwgX0MxLCBfQTE+Jik7CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgTXVsdGlzZXQgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgX194ICBBICVtdWx0aXNldC4KKyAgICogIEBwYXJhbSAgX195ICBBICVtdWx0aXNldCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIF9feC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIHRoZSBzaXplIGFuZCBlbGVtZW50cyBvZiB0aGUgbXVsdGlzZXRzIGFyZSBlcXVhbC4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBtdWx0aXNldHMuCisgICAqICBNdWx0aXNldHMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiB0aGVpciBzaXplcyBhcmUgZXF1YWwsIGFuZCBpZgorICAgKiAgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb21wYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90OyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIE11bHRpc2V0IG9yZGVyaW5nIHJlbGF0aW9uLgorICAgKiAgQHBhcmFtICBfX3ggIEEgJW11bHRpc2V0LgorICAgKiAgQHBhcmFtICBfX3kgIEEgJW11bHRpc2V0IG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgX194LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgQGEgX194IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSBfX3kuCisgICAqCisgICAqICBUaGlzIGlzIGEgdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBtYXBzLiAgVGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZSB3aXRoIEBjIDwuCisgICAqCisgICAqICBTZWUgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgpIGZvciBob3cgdGhlIGRldGVybWluYXRpb24gaXMgbWFkZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsgfQorCisgIC8vLyAgUmV0dXJucyAhKHggPT0geSkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIC8vLyAgUmV0dXJucyB5IDwgeC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICAvLy8gIFJldHVybnMgISh5IDwgeCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gIFJldHVybnMgISh4IDwgeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLy8gU2VlIHN0ZDo6bXVsdGlzZXQ6OnN3YXAoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX1NUTF9NVUxUSVNFVF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX251bWVyaWMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfbnVtZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODhjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX251bWVyaWMuaApAQCAtMCwwICsxLDM4NyBAQAorLy8gTnVtZXJpYyBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX251bWVyaWMuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le251bWVyaWN9CisgKi8KKworI2lmbmRlZiBfU1RMX05VTUVSSUNfSAorI2RlZmluZSBfU1RMX05VTUVSSUNfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPiAvLyBGb3IgX0dMSUJDWFhfTU9WRQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYnJpZWYgIENyZWF0ZSBhIHJhbmdlIG9mIHNlcXVlbnRpYWxseSBpbmNyZWFzaW5nIHZhbHVlcy4KKyAgICoKKyAgICogIEZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHJhbmdlIEBwIFtmaXJzdCxsYXN0KSBhc3NpZ25zIEBwIHZhbHVlIGFuZAorICAgKiAgaW5jcmVtZW50cyBAcCB2YWx1ZSBhcyBpZiBieSBAcCArK3ZhbHVlLgorICAgKgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0ICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fdmFsdWUgIFN0YXJ0aW5nIHZhbHVlLgorICAgKiAgQHJldHVybiAgTm90aGluZy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgaW90YShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAgX192YWx1ZSkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcCwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwl7CisJICAqX19maXJzdCA9IF9fdmFsdWU7CisJICArK19fdmFsdWU7CisJfQorICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KKworICAvKioKKyAgICogIEBicmllZiAgQWNjdW11bGF0ZSB2YWx1ZXMgaW4gYSByYW5nZS4KKyAgICoKKyAgICogIEFjY3VtdWxhdGVzIHRoZSB2YWx1ZXMgaW4gdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSB1c2luZyBvcGVyYXRvcisoKS4gIFRoZQorICAgKiAgaW5pdGlhbCB2YWx1ZSBpcyBAYSBpbml0LiAgVGhlIHZhbHVlcyBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyLgorICAgKgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBTdGFydCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19sYXN0ICBFbmQgb2YgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9faW5pdCAgU3RhcnRpbmcgdmFsdWUgdG8gYWRkIG90aGVyIHZhbHVlcyB0by4KKyAgICogIEByZXR1cm4gIFRoZSBmaW5hbCBzdW0uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBhY2N1bXVsYXRlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1RwIF9faW5pdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJX19pbml0ID0gX19pbml0ICsgKl9fZmlyc3Q7CisgICAgICByZXR1cm4gX19pbml0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgQWNjdW11bGF0ZSB2YWx1ZXMgaW4gYSByYW5nZSB3aXRoIG9wZXJhdGlvbi4KKyAgICoKKyAgICogIEFjY3VtdWxhdGVzIHRoZSB2YWx1ZXMgaW4gdGhlIHJhbmdlIFtmaXJzdCxsYXN0KSB1c2luZyB0aGUgZnVuY3Rpb24KKyAgICogIG9iamVjdCBAcCBfX2JpbmFyeV9vcC4gIFRoZSBpbml0aWFsIHZhbHVlIGlzIEBwIF9faW5pdC4gIFRoZSB2YWx1ZXMgYXJlCisgICAqICBwcm9jZXNzZWQgaW4gb3JkZXIuCisgICAqCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIFN0YXJ0IG9mIHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QgIEVuZCBvZiByYW5nZS4KKyAgICogIEBwYXJhbSAgX19pbml0ICBTdGFydGluZyB2YWx1ZSB0byBhZGQgb3RoZXIgdmFsdWVzIHRvLgorICAgKiAgQHBhcmFtICBfX2JpbmFyeV9vcCAgRnVuY3Rpb24gb2JqZWN0IHRvIGFjY3VtdWxhdGUgd2l0aC4KKyAgICogIEByZXR1cm4gIFRoZSBmaW5hbCBzdW0uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgorICAgIGlubGluZSBfVHAKKyAgICBhY2N1bXVsYXRlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1RwIF9faW5pdCwKKwkgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJX19pbml0ID0gX19iaW5hcnlfb3AoX19pbml0LCAqX19maXJzdCk7CisgICAgICByZXR1cm4gX19pbml0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgQ29tcHV0ZSBpbm5lciBwcm9kdWN0IG9mIHR3byByYW5nZXMuCisgICAqCisgICAqICBTdGFydGluZyB3aXRoIGFuIGluaXRpYWwgdmFsdWUgb2YgQHAgX19pbml0LCBtdWx0aXBsaWVzIHN1Y2Nlc3NpdmUKKyAgICogIGVsZW1lbnRzIGZyb20gdGhlIHR3byByYW5nZXMgYW5kIGFkZHMgZWFjaCBwcm9kdWN0IGludG8gdGhlIGFjY3VtdWxhdGVkCisgICAqICB2YWx1ZSB1c2luZyBvcGVyYXRvcisoKS4gIFRoZSB2YWx1ZXMgaW4gdGhlIHJhbmdlcyBhcmUgcHJvY2Vzc2VkIGluCisgICAqICBvcmRlci4KKyAgICoKKyAgICogIEBwYXJhbSAgX19maXJzdDEgIFN0YXJ0IG9mIHJhbmdlIDEuCisgICAqICBAcGFyYW0gIF9fbGFzdDEgIEVuZCBvZiByYW5nZSAxLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0MiAgU3RhcnQgb2YgcmFuZ2UgMi4KKyAgICogIEBwYXJhbSAgX19pbml0ICBTdGFydGluZyB2YWx1ZSB0byBhZGQgb3RoZXIgdmFsdWVzIHRvLgorICAgKiAgQHJldHVybiAgVGhlIGZpbmFsIGlubmVyIHByb2R1Y3QuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBpbm5lcl9wcm9kdWN0KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfVHAgX19pbml0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworCisgICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKKwlfX2luaXQgPSBfX2luaXQgKyAoKl9fZmlyc3QxICogKl9fZmlyc3QyKTsKKyAgICAgIHJldHVybiBfX2luaXQ7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBDb21wdXRlIGlubmVyIHByb2R1Y3Qgb2YgdHdvIHJhbmdlcy4KKyAgICoKKyAgICogIFN0YXJ0aW5nIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiBAcCBfX2luaXQsIGFwcGxpZXMgQHAgX19iaW5hcnlfb3AyIHRvCisgICAqICBzdWNjZXNzaXZlIGVsZW1lbnRzIGZyb20gdGhlIHR3byByYW5nZXMgYW5kIGFjY3VtdWxhdGVzIGVhY2ggcmVzdWx0IGludG8KKyAgICogIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZSB1c2luZyBAcCBfX2JpbmFyeV9vcDEuICBUaGUgdmFsdWVzIGluIHRoZSByYW5nZXMgYXJlCisgICAqICBwcm9jZXNzZWQgaW4gb3JkZXIuCisgICAqCisgICAqICBAcGFyYW0gIF9fZmlyc3QxICBTdGFydCBvZiByYW5nZSAxLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICBFbmQgb2YgcmFuZ2UgMS4KKyAgICogIEBwYXJhbSAgX19maXJzdDIgIFN0YXJ0IG9mIHJhbmdlIDIuCisgICAqICBAcGFyYW0gIF9faW5pdCAgU3RhcnRpbmcgdmFsdWUgdG8gYWRkIG90aGVyIHZhbHVlcyB0by4KKyAgICogIEBwYXJhbSAgX19iaW5hcnlfb3AxICBGdW5jdGlvbiBvYmplY3QgdG8gYWNjdW11bGF0ZSB3aXRoLgorICAgKiAgQHBhcmFtICBfX2JpbmFyeV9vcDIgIEZ1bmN0aW9uIG9iamVjdCB0byBhcHBseSB0byBwYWlycyBvZiBpbnB1dCB2YWx1ZXMuCisgICAqICBAcmV0dXJuICBUaGUgZmluYWwgaW5uZXIgcHJvZHVjdC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbjEsIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24yPgorICAgIGlubGluZSBfVHAKKyAgICBpbm5lcl9wcm9kdWN0KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCSAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfVHAgX19pbml0LAorCQkgIF9CaW5hcnlPcGVyYXRpb24xIF9fYmluYXJ5X29wMSwKKwkJICBfQmluYXJ5T3BlcmF0aW9uMiBfX2JpbmFyeV9vcDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CisKKyAgICAgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQorCV9faW5pdCA9IF9fYmluYXJ5X29wMShfX2luaXQsIF9fYmluYXJ5X29wMigqX19maXJzdDEsICpfX2ZpcnN0MikpOworICAgICAgcmV0dXJuIF9faW5pdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBsaXN0IG9mIHBhcnRpYWwgc3VtcworICAgKgorICAgKiAgQWNjdW11bGF0ZXMgdGhlIHZhbHVlcyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIHVzaW5nIHRoZSBAYyArIG9wZXJhdG9yLgorICAgKiAgQXMgZWFjaCBzdWNjZXNzaXZlIGlucHV0IHZhbHVlIGlzIGFkZGVkIGludG8gdGhlIHRvdGFsLCB0aGF0IHBhcnRpYWwgc3VtCisgICAqICBpcyB3cml0dGVuIHRvIEBwIF9fcmVzdWx0LiAgVGhlcmVmb3JlLCB0aGUgZmlyc3QgdmFsdWUgaW4gQHAgX19yZXN1bHQgaXMKKyAgICogIHRoZSBmaXJzdCB2YWx1ZSBvZiB0aGUgaW5wdXQsIHRoZSBzZWNvbmQgdmFsdWUgaW4gQHAgX19yZXN1bHQgaXMgdGhlIHN1bQorICAgKiAgb2YgdGhlIGZpcnN0IGFuZCBzZWNvbmQgaW5wdXQgdmFsdWVzLCBhbmQgc28gb24uCisgICAqCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIFN0YXJ0IG9mIGlucHV0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX2xhc3QgIEVuZCBvZiBpbnB1dCByYW5nZS4KKyAgICogIEBwYXJhbSAgX19yZXN1bHQgIE91dHB1dCBzdW0uCisgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyBqdXN0IGJleW9uZCB0aGUgdmFsdWVzIHdyaXR0ZW4gdG8gX19yZXN1bHQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHBhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworCisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJzdDsKKyAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CisgICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICBfX3ZhbHVlID0gX192YWx1ZSArICpfX2ZpcnN0OworCSAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOworCX0KKyAgICAgIHJldHVybiArK19fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGxpc3Qgb2YgcGFydGlhbCBzdW1zCisgICAqCisgICAqICBBY2N1bXVsYXRlcyB0aGUgdmFsdWVzIGluIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgdXNpbmcgQHAgX19iaW5hcnlfb3AuCisgICAqICBBcyBlYWNoIHN1Y2Nlc3NpdmUgaW5wdXQgdmFsdWUgaXMgYWRkZWQgaW50byB0aGUgdG90YWwsIHRoYXQgcGFydGlhbCBzdW0KKyAgICogIGlzIHdyaXR0ZW4gdG8gQHAgX19yZXN1bHQuICBUaGVyZWZvcmUsIHRoZSBmaXJzdCB2YWx1ZSBpbiBAcCBfX3Jlc3VsdCBpcworICAgKiAgdGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBpbnB1dCwgdGhlIHNlY29uZCB2YWx1ZSBpbiBAcCBfX3Jlc3VsdCBpcyB0aGUgc3VtCisgICAqICBvZiB0aGUgZmlyc3QgYW5kIHNlY29uZCBpbnB1dCB2YWx1ZXMsIGFuZCBzbyBvbi4KKyAgICoKKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgaW5wdXQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgRW5kIG9mIGlucHV0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCAgT3V0cHV0IHN1bS4KKyAgICogIEBwYXJhbSAgX19iaW5hcnlfb3AgIEZ1bmN0aW9uIG9iamVjdC4KKyAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIGp1c3QgYmV5b25kIHRoZSB2YWx1ZXMgd3JpdHRlbiB0byBfX3Jlc3VsdC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBwYXJ0aWFsX3N1bShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCV9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CisgICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOworICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCisJeworCSAgX192YWx1ZSA9IF9fYmluYXJ5X29wKF9fdmFsdWUsICpfX2ZpcnN0KTsKKwkgICorK19fcmVzdWx0ID0gX192YWx1ZTsKKwl9CisgICAgICByZXR1cm4gKytfX3Jlc3VsdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBkaWZmZXJlbmNlcyBiZXR3ZWVuIGFkamFjZW50IHZhbHVlcy4KKyAgICoKKyAgICogIENvbXB1dGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWRqYWNlbnQgdmFsdWVzIGluIHRoZSByYW5nZQorICAgKiAgW2ZpcnN0LGxhc3QpIHVzaW5nIG9wZXJhdG9yLSgpIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byBAcCBfX3Jlc3VsdC4KKyAgICoKKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgaW5wdXQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgRW5kIG9mIGlucHV0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCAgT3V0cHV0IHN1bXMuCisgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyBqdXN0IGJleW9uZCB0aGUgdmFsdWVzIHdyaXR0ZW4gdG8gcmVzdWx0LgorICAgKgorICAgKiAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgKiAgRFIgNTM5LiBwYXJ0aWFsX3N1bSBhbmQgYWRqYWNlbnRfZGlmZmVyZW5jZSBzaG91bGQgbWVudGlvbiByZXF1aXJlbWVudHMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgYWRqYWNlbnRfZGlmZmVyZW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAorCQkJX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX3Jlc3VsdDsKKyAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OworICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsKKwkgICorK19fcmVzdWx0ID0gX190bXAgLSBfX3ZhbHVlOworCSAgX192YWx1ZSA9IF9HTElCQ1hYX01PVkUoX190bXApOworCX0KKyAgICAgIHJldHVybiArK19fcmVzdWx0OworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGRpZmZlcmVuY2VzIGJldHdlZW4gYWRqYWNlbnQgdmFsdWVzLgorICAgKgorICAgKiAgQ29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhZGphY2VudCB2YWx1ZXMgaW4gdGhlIHJhbmdlCisgICAqICBbX19maXJzdCxfX2xhc3QpIHVzaW5nIHRoZSBmdW5jdGlvbiBvYmplY3QgQHAgX19iaW5hcnlfb3AgYW5kIHdyaXRlcyB0aGUKKyAgICogIHJlc3VsdCB0byBAcCBfX3Jlc3VsdC4KKyAgICoKKyAgICogIEBwYXJhbSAgX19maXJzdCAgU3RhcnQgb2YgaW5wdXQgcmFuZ2UuCisgICAqICBAcGFyYW0gIF9fbGFzdCAgRW5kIG9mIGlucHV0IHJhbmdlLgorICAgKiAgQHBhcmFtICBfX3Jlc3VsdCAgT3V0cHV0IHN1bS4KKyAgICogIEBwYXJhbSAgX19iaW5hcnlfb3AgRnVuY3Rpb24gb2JqZWN0LgorICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcG9pbnRpbmcganVzdCBiZXlvbmQgdGhlIHZhbHVlcyB3cml0dGVuIHRvIHJlc3VsdC4KKyAgICoKKyAgICogIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICogIERSIDUzOS4gcGFydGlhbF9zdW0gYW5kIGFkamFjZW50X2RpZmZlcmVuY2Ugc2hvdWxkIG1lbnRpb24gcmVxdWlyZW1lbnRzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgYWRqYWNlbnRfZGlmZmVyZW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQlfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiBfX3Jlc3VsdDsKKyAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OworICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKKyAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsKKwkgICorK19fcmVzdWx0ID0gX19iaW5hcnlfb3AoX190bXAsIF9fdmFsdWUpOworCSAgX192YWx1ZSA9IF9HTElCQ1hYX01PVkUoX190bXApOworCX0KKyAgICAgIHJldHVybiArK19fcmVzdWx0OworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8qIF9TVExfTlVNRVJJQ19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3BhaXIuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfcGFpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjUwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3BhaXIuaApAQCAtMCwwICsxLDI5NSBAQAorLy8gUGFpciBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgYml0cy9zdGxfcGFpci5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dXRpbGl0eX0KKyAqLworCisjaWZuZGVmIF9TVExfUEFJUl9ICisjZGVmaW5lIF9TVExfUEFJUl9IIDEKKworI2luY2x1ZGUgPGJpdHMvbW92ZS5oPiAvLyBmb3Igc3RkOjptb3ZlIC8gc3RkOjpmb3J3YXJkLCBhbmQgc3RkOjpzd2FwCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIGZvciBzdGQ6Ol9fZGVjYXlfYW5kX3N0cmlwIHRvbworI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBhZGR0b2dyb3VwIHV0aWxpdGllcworICAgKiAgQHsKKyAgICovCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIC8vLyBwaWVjZXdpc2VfY29uc3RydWN0X3QKKyAgc3RydWN0IHBpZWNld2lzZV9jb25zdHJ1Y3RfdCB7IH07CisKKyAgLy8vIHBpZWNld2lzZV9jb25zdHJ1Y3QKKyAgY29uc3RleHByIHBpZWNld2lzZV9jb25zdHJ1Y3RfdCBwaWVjZXdpc2VfY29uc3RydWN0ID0gcGllY2V3aXNlX2NvbnN0cnVjdF90KCk7CisKKyAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uPgorICAgIGNsYXNzIHR1cGxlOworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90Li4uPgorICAgIHN0cnVjdCBfSW5kZXhfdHVwbGU7CisjZW5kaWYKKworIC8qKgorICAgKiAgQGJyaWVmIFN0cnVjdCBob2xkaW5nIHR3byBvYmplY3RzIG9mIGFyYml0cmFyeSB0eXBlLgorICAgKgorICAgKiAgQHRwYXJhbSBfVDEgIFR5cGUgb2YgZmlyc3Qgb2JqZWN0LgorICAgKiAgQHRwYXJhbSBfVDIgIFR5cGUgb2Ygc2Vjb25kIG9iamVjdC4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgorICAgIHN0cnVjdCBwYWlyCisgICAgeworICAgICAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsgICAgLy8vIEBjIGZpcnN0X3R5cGUgaXMgdGhlIGZpcnN0IGJvdW5kIHR5cGUKKyAgICAgIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOyAgIC8vLyBAYyBzZWNvbmRfdHlwZSBpcyB0aGUgc2Vjb25kIGJvdW5kIHR5cGUKKworICAgICAgX1QxIGZpcnN0OyAgICAgICAgICAgICAgICAgLy8vIEBjIGZpcnN0IGlzIGEgY29weSBvZiB0aGUgZmlyc3Qgb2JqZWN0CisgICAgICBfVDIgc2Vjb25kOyAgICAgICAgICAgICAgICAvLy8gQGMgc2Vjb25kIGlzIGEgY29weSBvZiB0aGUgc2Vjb25kIG9iamVjdAorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNjUuICBzdGQ6OnBhaXI6OnBhaXIoKSBlZmZlY3RzIG92ZXJseSByZXN0cmljdGl2ZQorICAgICAgLyoqIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgQGMgZmlyc3QgYW5kIEBjIHNlY29uZCB1c2luZyB0aGVpcgorICAgICAgICogIHJlc3BlY3RpdmUgZGVmYXVsdCBjb25zdHJ1Y3RvcnMuICAqLworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIHBhaXIoKQorICAgICAgOiBmaXJzdCgpLCBzZWNvbmQoKSB7IH0KKworICAgICAgLyoqIFR3byBvYmplY3RzIG1heSBiZSBwYXNzZWQgdG8gYSBAYyBwYWlyIGNvbnN0cnVjdG9yIHRvIGJlIGNvcGllZC4gICovCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpCisgICAgICA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHsgfQorCisgICAgICAvKiogVGhlcmUgaXMgYWxzbyBhIHRlbXBsYXRlZCBjb3B5IGN0b3IgZm9yIHRoZSBAYyBwYWlyIGNsYXNzIGl0c2VsZi4gICovCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KKwlwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApCisJOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkgeyB9CisjZWxzZQorICAgICAgdGVtcGxhdGU8Y2xhc3MgX1UxLCBjbGFzcyBfVTIsIGNsYXNzID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPF9fYW5kXzxpc19jb252ZXJ0aWJsZTxjb25zdCBfVTEmLCBfVDE+LAorCQkJCWlzX2NvbnZlcnRpYmxlPGNvbnN0IF9VMiYsIF9UMj4+Ojp2YWx1ZT46OnR5cGU+CisJY29uc3RleHByIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkKKwk6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7IH0KKworICAgICAgY29uc3RleHByIHBhaXIoY29uc3QgcGFpciYpID0gZGVmYXVsdDsKKyAgICAgIGNvbnN0ZXhwciBwYWlyKHBhaXImJikgPSBkZWZhdWx0OworCisgICAgICAvLyBEUiA4MTEuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVTEsIGNsYXNzID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPGlzX2NvbnZlcnRpYmxlPF9VMSwgX1QxPjo6dmFsdWU+Ojp0eXBlPgorCWNvbnN0ZXhwciBwYWlyKF9VMSYmIF9feCwgY29uc3QgX1QyJiBfX3kpCisJOiBmaXJzdChzdGQ6OmZvcndhcmQ8X1UxPihfX3gpKSwgc2Vjb25kKF9feSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9VMiwgY2xhc3MgPSB0eXBlbmFtZQorCSAgICAgICBlbmFibGVfaWY8aXNfY29udmVydGlibGU8X1UyLCBfVDI+Ojp2YWx1ZT46OnR5cGU+CisJY29uc3RleHByIHBhaXIoY29uc3QgX1QxJiBfX3gsIF9VMiYmIF9feSkKKwk6IGZpcnN0KF9feCksIHNlY29uZChzdGQ6OmZvcndhcmQ8X1UyPihfX3kpKSB7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1UxLCBjbGFzcyBfVTIsIGNsYXNzID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPF9fYW5kXzxpc19jb252ZXJ0aWJsZTxfVTEsIF9UMT4sCisJCQkJaXNfY29udmVydGlibGU8X1UyLCBfVDI+Pjo6dmFsdWU+Ojp0eXBlPgorCWNvbnN0ZXhwciBwYWlyKF9VMSYmIF9feCwgX1UyJiYgX195KQorCTogZmlyc3Qoc3RkOjpmb3J3YXJkPF9VMT4oX194KSksIHNlY29uZChzdGQ6OmZvcndhcmQ8X1UyPihfX3kpKSB7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1UxLCBjbGFzcyBfVTIsIGNsYXNzID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPF9fYW5kXzxpc19jb252ZXJ0aWJsZTxfVTEsIF9UMT4sCisJCQkJaXNfY29udmVydGlibGU8X1UyLCBfVDI+Pjo6dmFsdWU+Ojp0eXBlPgorCWNvbnN0ZXhwciBwYWlyKHBhaXI8X1UxLCBfVTI+JiYgX19wKQorCTogZmlyc3Qoc3RkOjpmb3J3YXJkPF9VMT4oX19wLmZpcnN0KSksCisJICBzZWNvbmQoc3RkOjpmb3J3YXJkPF9VMj4oX19wLnNlY29uZCkpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJnczEsIHR5cGVuYW1lLi4uIF9BcmdzMj4KKyAgICAgICAgcGFpcihwaWVjZXdpc2VfY29uc3RydWN0X3QsIHR1cGxlPF9BcmdzMS4uLj4sIHR1cGxlPF9BcmdzMi4uLj4pOworCisgICAgICBwYWlyJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHBhaXImIF9fcCkKKyAgICAgIHsKKwlmaXJzdCA9IF9fcC5maXJzdDsKKwlzZWNvbmQgPSBfX3Auc2Vjb25kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgcGFpciYKKyAgICAgIG9wZXJhdG9yPShwYWlyJiYgX19wKQorICAgICAgbm9leGNlcHQoX19hbmRfPGlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPF9UMT4sCisJICAgICAgICAgICAgICBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfVDI+Pjo6dmFsdWUpCisgICAgICB7CisJZmlyc3QgPSBzdGQ6OmZvcndhcmQ8Zmlyc3RfdHlwZT4oX19wLmZpcnN0KTsKKwlzZWNvbmQgPSBzdGQ6OmZvcndhcmQ8c2Vjb25kX3R5cGU+KF9fcC5zZWNvbmQpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CisJcGFpciYKKwlvcGVyYXRvcj0oY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkKKwl7CisJICBmaXJzdCA9IF9fcC5maXJzdDsKKwkgIHNlY29uZCA9IF9fcC5zZWNvbmQ7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KKwlwYWlyJgorCW9wZXJhdG9yPShwYWlyPF9VMSwgX1UyPiYmIF9fcCkKKwl7CisJICBmaXJzdCA9IHN0ZDo6Zm9yd2FyZDxfVTE+KF9fcC5maXJzdCk7CisJICBzZWNvbmQgPSBzdGQ6OmZvcndhcmQ8X1UyPihfX3Auc2Vjb25kKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocGFpciYgX19wKQorICAgICAgbm9leGNlcHQobm9leGNlcHQoc3dhcChmaXJzdCwgX19wLmZpcnN0KSkKKwkgICAgICAgJiYgbm9leGNlcHQoc3dhcChzZWNvbmQsIF9fcC5zZWNvbmQpKSkKKyAgICAgIHsKKwl1c2luZyBzdGQ6OnN3YXA7CisJc3dhcChmaXJzdCwgX19wLmZpcnN0KTsKKwlzd2FwKHNlY29uZCwgX19wLnNlY29uZCk7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MxLCBzdGQ6OnNpemVfdC4uLiBfSW5kZXhlczEsCisgICAgICAgICAgICAgICB0eXBlbmFtZS4uLiBfQXJnczIsIHN0ZDo6c2l6ZV90Li4uIF9JbmRleGVzMj4KKyAgICAgICAgcGFpcih0dXBsZTxfQXJnczEuLi4+JiwgdHVwbGU8X0FyZ3MyLi4uPiYsCisgICAgICAgICAgICAgX0luZGV4X3R1cGxlPF9JbmRleGVzMS4uLj4sIF9JbmRleF90dXBsZTxfSW5kZXhlczIuLi4+KTsKKyNlbmRpZgorICAgIH07CisKKyAgLy8vIFR3byBwYWlycyBvZiB0aGUgc2FtZSB0eXBlIGFyZSBlcXVhbCBpZmYgdGhlaXIgbWVtYmVycyBhcmUgZXF1YWwuCisgIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsgfQorCisgIC8vLyA8aHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC91dGlsaXRpZXMuaHRtbD4KKyAgdGVtcGxhdGU8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCisgICAgeyByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0CisJICAgICB8fCAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsgfQorCisgIC8vLyBVc2VzIEBjIG9wZXJhdG9yPT0gdG8gZmluZCB0aGUgcmVzdWx0LgorICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIC8vLyBVc2VzIEBjIG9wZXJhdG9yPCB0byBmaW5kIHRoZSByZXN1bHQuCisgIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyBVc2VzIEBjIG9wZXJhdG9yPCB0byBmaW5kIHRoZSByZXN1bHQuCisgIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gVXNlcyBAYyBvcGVyYXRvcjwgdG8gZmluZCB0aGUgcmVzdWx0LgorICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIC8vLyBTZWUgc3RkOjpwYWlyOjpzd2FwKCkuCisgIC8vIE5vdGU6ICBubyBzdGQ6OnN3YXAgb3ZlcmxvYWRzIGluIEMrKzAzIG1vZGUsIHRoaXMgaGFzIHBlcmZvcm1hbmNlCisgIC8vICAgICAgICBpbXBsaWNhdGlvbnMsIHNlZSwgZWcsIGxpYnN0ZGMrKy8zODQ2Ni4KKyAgdGVtcGxhdGU8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHBhaXI8X1QxLCBfVDI+JiBfX3gsIHBhaXI8X1QxLCBfVDI+JiBfX3kpCisgICAgbm9leGNlcHQobm9leGNlcHQoX194LnN3YXAoX195KSkpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisjZW5kaWYKKworICAvKioKKyAgICogIEBicmllZiBBIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGNyZWF0aW5nIGEgcGFpciBmcm9tIHR3byBvYmplY3RzLgorICAgKiAgQHBhcmFtICBfX3ggIFRoZSBmaXJzdCBvYmplY3QuCisgICAqICBAcGFyYW0gIF9feSAgVGhlIHNlY29uZCBvYmplY3QuCisgICAqICBAcmV0dXJuICAgQSBuZXdseS1jb25zdHJ1Y3RlZCBwYWlyPD4gb2JqZWN0IG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgorICAgKgorICAgKiAgVGhlIHN0YW5kYXJkIHJlcXVpcmVzIHRoYXQgdGhlIG9iamVjdHMgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZS10by1jb25zdCwKKyAgICogIGJ1dCBMV0cgaXNzdWUgIzE4MSBzYXlzIHRoZXkgc2hvdWxkIGJlIHBhc3NlZCBieSBjb25zdCB2YWx1ZS4gIFdlIGZvbGxvdworICAgKiAgdGhlIExXRyBieSBkZWZhdWx0LgorICAgKi8KKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyAxODEuICBtYWtlX3BhaXIoKSB1bmludGVuZGVkIGJlaGF2aW9yCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAvLyBOQjogRFIgNzA2LgorICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICBjb25zdGV4cHIgcGFpcjx0eXBlbmFtZSBfX2RlY2F5X2FuZF9zdHJpcDxfVDE+OjpfX3R5cGUsCisgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX19kZWNheV9hbmRfc3RyaXA8X1QyPjo6X190eXBlPgorICAgIG1ha2VfcGFpcihfVDEmJiBfX3gsIF9UMiYmIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZGVjYXlfYW5kX3N0cmlwPF9UMT46Ol9fdHlwZSBfX2RzX3R5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2RlY2F5X2FuZF9zdHJpcDxfVDI+OjpfX3R5cGUgX19kc190eXBlMjsKKyAgICAgIHR5cGVkZWYgcGFpcjxfX2RzX3R5cGUxLCBfX2RzX3R5cGUyPiAJICAgICAgX19wYWlyX3R5cGU7CisgICAgICByZXR1cm4gX19wYWlyX3R5cGUoc3RkOjpmb3J3YXJkPF9UMT4oX194KSwgc3RkOjpmb3J3YXJkPF9UMj4oX195KSk7CisgICAgfQorI2Vsc2UKKyAgdGVtcGxhdGU8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CisgICAgaW5saW5lIHBhaXI8X1QxLCBfVDI+CisgICAgbWFrZV9wYWlyKF9UMSBfX3gsIF9UMiBfX3kpCisgICAgeyByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOyB9CisjZW5kaWYKKworICAvLy8gQH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8qIF9TVExfUEFJUl9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3F1ZXVlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyYzA1MwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfcXVldWUuaApAQCAtMCwwICsxLDU2OSBAQAorLy8gUXVldWUgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX3F1ZXVlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtxdWV1ZX0KKyAqLworCisjaWZuZGVmIF9TVExfUVVFVUVfSAorI2RlZmluZSBfU1RMX1FVRVVFX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiAgQGJyaWVmICBBIHN0YW5kYXJkIGNvbnRhaW5lciBnaXZpbmcgRklGTyBiZWhhdmlvci4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgQHRwYXJhbSBfVHAgIFR5cGUgb2YgZWxlbWVudC4KKyAgICogIEB0cGFyYW0gX1NlcXVlbmNlICBUeXBlIG9mIHVuZGVybHlpbmcgc2VxdWVuY2UsIGRlZmF1bHRzIHRvIGRlcXVlPF9UcD4uCisgICAqCisgICAqICBNZWV0cyBtYW55IG9mIHRoZSByZXF1aXJlbWVudHMgb2YgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sCisgICAqICBidXQgZG9lcyBub3QgZGVmaW5lIGFueXRoaW5nIHRvIGRvIHdpdGggaXRlcmF0b3JzLiAgVmVyeSBmZXcgb2YgdGhlCisgICAqICBvdGhlciBzdGFuZGFyZCBjb250YWluZXIgaW50ZXJmYWNlcyBhcmUgZGVmaW5lZC4KKyAgICoKKyAgICogIFRoaXMgaXMgbm90IGEgdHJ1ZSBjb250YWluZXIsIGJ1dCBhbiBAZSBhZGFwdG9yLiAgSXQgaG9sZHMgYW5vdGhlcgorICAgKiAgY29udGFpbmVyLCBhbmQgcHJvdmlkZXMgYSB3cmFwcGVyIGludGVyZmFjZSB0byB0aGF0IGNvbnRhaW5lci4gIFRoZQorICAgKiAgd3JhcHBlciBpcyB3aGF0IGVuZm9yY2VzIHN0cmljdCBmaXJzdC1pbi1maXJzdC1vdXQgJXF1ZXVlIGJlaGF2aW9yLgorICAgKgorICAgKiAgVGhlIHNlY29uZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgdHlwZSBvZiB0aGUgdW5kZXJseWluZworICAgKiAgc2VxdWVuY2UvY29udGFpbmVyLiAgSXQgZGVmYXVsdHMgdG8gc3RkOjpkZXF1ZSwgYnV0IGl0IGNhbiBiZSBhbnkgdHlwZQorICAgKiAgdGhhdCBzdXBwb3J0cyBAYyBmcm9udCwgQGMgYmFjaywgQGMgcHVzaF9iYWNrLCBhbmQgQGMgcG9wX2Zyb250LAorICAgKiAgc3VjaCBhcyBzdGQ6Omxpc3Qgb3IgYW4gYXBwcm9wcmlhdGUgdXNlci1kZWZpbmVkIHR5cGUuCisgICAqCisgICAqICBNZW1iZXJzIG5vdCBmb3VuZCBpbiBAYSBub3JtYWwgY29udGFpbmVycyBhcmUgQGMgY29udGFpbmVyX3R5cGUsCisgICAqICB3aGljaCBpcyBhIHR5cGVkZWYgZm9yIHRoZSBzZWNvbmQgU2VxdWVuY2UgcGFyYW1ldGVyLCBhbmQgQGMgcHVzaCBhbmQKKyAgICogIEBjIHBvcCwgd2hpY2ggYXJlIHN0YW5kYXJkICVxdWV1ZS9GSUZPIG9wZXJhdGlvbnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcXVlbmNlID0gZGVxdWU8X1RwPiA+CisgICAgY2xhc3MgcXVldWUKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgX1NlcXVlbmNlX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1NlcXVlbmNlLCBfRnJvbnRJbnNlcnRpb25TZXF1ZW5jZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1NlcXVlbmNlLCBfQmFja0luc2VydGlvblNlcXVlbmNlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczIoX1RwLCBfU2VxdWVuY2VfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1NlcTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgcXVldWU8X1RwMSwgX1NlcTE+JiwgY29uc3QgcXVldWU8X1RwMSwgX1NlcTE+Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9TZXExPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcjwoY29uc3QgcXVldWU8X1RwMSwgX1NlcTE+JiwgY29uc3QgcXVldWU8X1RwMSwgX1NlcTE+Jik7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnJlZmVyZW5jZSAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnNpemVfdHlwZSAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiAgICAgICAgICBfU2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvKioKKyAgICAgICAqICAnYycgaXMgdGhlIHVuZGVybHlpbmcgY29udGFpbmVyLiAgTWFpbnRhaW5lcnMgd29uZGVyaW5nIHdoeQorICAgICAgICogIHRoaXMgaXNuJ3QgdWdsaWZpZWQgYXMgcGVyIHN0eWxlIGd1aWRlbGluZXMgc2hvdWxkIG5vdGUgdGhhdAorICAgICAgICogIHRoaXMgbmFtZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHN0YW5kYXJkLCBbMjMuMi4zLjFdLiAgKFdoeT8KKyAgICAgICAqICBQcmVzdW1hYmx5IGZvciB0aGUgc2FtZSByZWFzb24gdGhhdCBpdCdzIHByb3RlY3RlZCBpbnN0ZWFkCisgICAgICAgKiAgb2YgcHJpdmF0ZTogdG8gYWxsb3cgZGVyaXZhdGlvbi4gIEJ1dCBub25lIG9mIHRoZSBvdGhlcgorICAgICAgICogIGNvbnRhaW5lcnMgYWxsb3cgZm9yIGRlcml2YXRpb24uICBPZGQuKQorICAgICAgICovCisgICAgICBfU2VxdWVuY2UgYzsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgICBleHBsaWNpdAorICAgICAgcXVldWUoY29uc3QgX1NlcXVlbmNlJiBfX2MgPSBfU2VxdWVuY2UoKSkKKyAgICAgIDogYyhfX2MpIHsgfQorI2Vsc2UKKyAgICAgIGV4cGxpY2l0CisgICAgICBxdWV1ZShjb25zdCBfU2VxdWVuY2UmIF9fYykKKyAgICAgIDogYyhfX2MpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgcXVldWUoX1NlcXVlbmNlJiYgX19jID0gX1NlcXVlbmNlKCkpCisgICAgICA6IGMoc3RkOjptb3ZlKF9fYykpIHsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgdHJ1ZSBpZiB0aGUgJXF1ZXVlIGlzIGVtcHR5LgorICAgICAgICovCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0CisgICAgICB7IHJldHVybiBjLmVtcHR5KCk7IH0KKworICAgICAgLyoqICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICVxdWV1ZS4gICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gYy5zaXplKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVxdWV1ZS4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBmcm9udCgpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCk7CisJcmV0dXJuIGMuZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlcXVldWUuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19ub25lbXB0eSgpOworCXJldHVybiBjLmZyb250KCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVxdWV1ZS4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBiYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKTsKKwlyZXR1cm4gYy5iYWNrKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlcXVldWUuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYmFjaygpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCk7CisJcmV0dXJuIGMuYmFjaygpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFkZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlICVxdWV1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB0byBiZSBhZGRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgJXF1ZXVlIG9wZXJhdGlvbi4gIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGFuCisgICAgICAgKiAgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSAlcXVldWUgYW5kIGFzc2lnbnMgdGhlIGdpdmVuIGRhdGEKKyAgICAgICAqICB0byBpdC4gIFRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhlIG9wZXJhdGlvbiBkZXBlbmRzIG9uIHRoZQorICAgICAgICogIHVuZGVybHlpbmcgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2goY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyBjLnB1c2hfYmFjayhfX3gpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBwdXNoKHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IGMucHVzaF9iYWNrKHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBlbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsgYy5lbXBsYWNlX2JhY2soc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlcyBmaXJzdCBlbGVtZW50LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCAlcXVldWUgb3BlcmF0aW9uLiAgSXQgc2hyaW5rcyB0aGUgJXF1ZXVlIGJ5IG9uZS4KKyAgICAgICAqICBUaGUgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBvcGVyYXRpb24gZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZworICAgICAgICogIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgbm8gZGF0YSBpcyByZXR1cm5lZCwgYW5kIGlmIHRoZSBmaXJzdCBlbGVtZW50J3MKKyAgICAgICAqICBkYXRhIGlzIG5lZWRlZCwgaXQgc2hvdWxkIGJlIHJldHJpZXZlZCBiZWZvcmUgcG9wKCkgaXMKKyAgICAgICAqICBjYWxsZWQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBvcCgpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCk7CisJYy5wb3BfZnJvbnQoKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocXVldWUmIF9fcSkKKyAgICAgIG5vZXhjZXB0KG5vZXhjZXB0KHN3YXAoYywgX19xLmMpKSkKKyAgICAgIHsKKwl1c2luZyBzdGQ6OnN3YXA7CisJc3dhcChjLCBfX3EuYyk7CisgICAgICB9CisjZW5kaWYKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBRdWV1ZSBlcXVhbGl0eSBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICBfX3ggIEEgJXF1ZXVlLgorICAgKiAgQHBhcmFtICBfX3kgIEEgJXF1ZXVlIG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgX194LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgdGhlIHNpemUgYW5kIGVsZW1lbnRzIG9mIHRoZSBxdWV1ZXMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIENvbXBsZXhpdHkgYW5kIHNlbWFudGljcyBkZXBlbmQgb24gdGhlCisgICAqICB1bmRlcmx5aW5nIHNlcXVlbmNlIHR5cGUsIGJ1dCB0aGUgZXhwZWN0ZWQgcnVsZXMgYXJlOiAgdGhpcyByZWxhdGlvbiBpcworICAgKiAgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBzZXF1ZW5jZXMsIGFuZCBxdWV1ZXMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudAorICAgKiAgaWYgdGhlaXIgc2VxdWVuY2VzIGNvbXBhcmUgZXF1YWwuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgcXVldWU8X1RwLCBfU2VxPiYgX194LCBjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gX194LmMgPT0gX195LmM7IH0KKworICAvKioKKyAgICogIEBicmllZiAgUXVldWUgb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIF9feCAgQSAlcXVldWUuCisgICAqICBAcGFyYW0gIF9feSAgQSAlcXVldWUgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgQGEgX194IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSBfX3kuCisgICAqCisgICAqICBUaGlzIGlzIGFuIHRvdGFsIG9yZGVyaW5nIHJlbGF0aW9uLiAgQ29tcGxleGl0eSBhbmQgc2VtYW50aWNzCisgICAqICBkZXBlbmQgb24gdGhlIHVuZGVybHlpbmcgc2VxdWVuY2UgdHlwZSwgYnV0IHRoZSBleHBlY3RlZCBydWxlcworICAgKiAgYXJlOiB0aGlzIHJlbGF0aW9uIGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgc2VxdWVuY2VzLCB0aGUKKyAgICogIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZSB3aXRoIEBjIDwsIGFuZAorICAgKiAgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgpIGlzIHVzdWFsbHkgdXNlZCB0byBtYWtlIHRoZQorICAgKiAgZGV0ZXJtaW5hdGlvbi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mIF9feCwgY29uc3QgcXVldWU8X1RwLCBfU2VxPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5jIDwgX195LmM7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I9PQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mIF9feCwgY29uc3QgcXVldWU8X1RwLCBfU2VxPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3gsIGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgcXVldWU8X1RwLCBfU2VxPiYgX194LCBjb25zdCBxdWV1ZTxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHF1ZXVlPF9UcCwgX1NlcT4mIF9feCwgY29uc3QgcXVldWU8X1RwLCBfU2VxPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHF1ZXVlPF9UcCwgX1NlcT4mIF9feCwgcXVldWU8X1RwLCBfU2VxPiYgX195KQorICAgIG5vZXhjZXB0KG5vZXhjZXB0KF9feC5zd2FwKF9feSkpKQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCB1c2VzX2FsbG9jYXRvcjxxdWV1ZTxfVHAsIF9TZXE+LCBfQWxsb2M+CisgICAgOiBwdWJsaWMgdXNlc19hbGxvY2F0b3I8X1NlcSwgX0FsbG9jPjo6dHlwZSB7IH07CisjZW5kaWYKKworICAvKioKKyAgICogIEBicmllZiAgQSBzdGFuZGFyZCBjb250YWluZXIgYXV0b21hdGljYWxseSBzb3J0aW5nIGl0cyBjb250ZW50cy4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgQHRwYXJhbSBfVHAgIFR5cGUgb2YgZWxlbWVudC4KKyAgICogIEB0cGFyYW0gX1NlcXVlbmNlICBUeXBlIG9mIHVuZGVybHlpbmcgc2VxdWVuY2UsIGRlZmF1bHRzIHRvIHZlY3RvcjxfVHA+LgorICAgKiAgQHRwYXJhbSBfQ29tcGFyZSAgQ29tcGFyaXNvbiBmdW5jdGlvbiBvYmplY3QgdHlwZSwgZGVmYXVsdHMgdG8gCisgICAqICAgICAgICAgICAgICAgICAgICBsZXNzPF9TZXF1ZW5jZTo6dmFsdWVfdHlwZT4uCisgICAqCisgICAqICBUaGlzIGlzIG5vdCBhIHRydWUgY29udGFpbmVyLCBidXQgYW4gQGUgYWRhcHRvci4gIEl0IGhvbGRzCisgICAqICBhbm90aGVyIGNvbnRhaW5lciwgYW5kIHByb3ZpZGVzIGEgd3JhcHBlciBpbnRlcmZhY2UgdG8gdGhhdAorICAgKiAgY29udGFpbmVyLiAgVGhlIHdyYXBwZXIgaXMgd2hhdCBlbmZvcmNlcyBwcmlvcml0eS1iYXNlZCBzb3J0aW5nIAorICAgKiAgYW5kICVxdWV1ZSBiZWhhdmlvci4gIFZlcnkgZmV3IG9mIHRoZSBzdGFuZGFyZCBjb250YWluZXIvc2VxdWVuY2UKKyAgICogIGludGVyZmFjZSByZXF1aXJlbWVudHMgYXJlIG1ldCAoZS5nLiwgaXRlcmF0b3JzKS4KKyAgICoKKyAgICogIFRoZSBzZWNvbmQgdGVtcGxhdGUgcGFyYW1ldGVyIGRlZmluZXMgdGhlIHR5cGUgb2YgdGhlIHVuZGVybHlpbmcKKyAgICogIHNlcXVlbmNlL2NvbnRhaW5lci4gIEl0IGRlZmF1bHRzIHRvIHN0ZDo6dmVjdG9yLCBidXQgaXQgY2FuIGJlCisgICAqICBhbnkgdHlwZSB0aGF0IHN1cHBvcnRzIEBjIGZyb250KCksIEBjIHB1c2hfYmFjaywgQGMgcG9wX2JhY2ssCisgICAqICBhbmQgcmFuZG9tLWFjY2VzcyBpdGVyYXRvcnMsIHN1Y2ggYXMgc3RkOjpkZXF1ZSBvciBhbgorICAgKiAgYXBwcm9wcmlhdGUgdXNlci1kZWZpbmVkIHR5cGUuCisgICAqCisgICAqICBUaGUgdGhpcmQgdGVtcGxhdGUgcGFyYW1ldGVyIHN1cHBsaWVzIHRoZSBtZWFucyBvZiBtYWtpbmcKKyAgICogIHByaW9yaXR5IGNvbXBhcmlzb25zLiAgSXQgZGVmYXVsdHMgdG8gQGMgbGVzczx2YWx1ZV90eXBlPiBidXQKKyAgICogIGNhbiBiZSBhbnl0aGluZyBkZWZpbmluZyBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nLgorICAgKgorICAgKiAgTWVtYmVycyBub3QgZm91bmQgaW4gQGEgbm9ybWFsIGNvbnRhaW5lcnMgYXJlIEBjIGNvbnRhaW5lcl90eXBlLAorICAgKiAgd2hpY2ggaXMgYSB0eXBlZGVmIGZvciB0aGUgc2Vjb25kIFNlcXVlbmNlIHBhcmFtZXRlciwgYW5kIEBjCisgICAqICBwdXNoLCBAYyBwb3AsIGFuZCBAYyB0b3AsIHdoaWNoIGFyZSBzdGFuZGFyZCAlcXVldWUgb3BlcmF0aW9ucy4KKyAgICoKKyAgICogIEBub3RlIE5vIGVxdWFsaXR5L2NvbXBhcmlzb24gb3BlcmF0b3JzIGFyZSBwcm92aWRlZCBmb3IKKyAgICogICVwcmlvcml0eV9xdWV1ZS4KKyAgICoKKyAgICogIEBub3RlIFNvcnRpbmcgb2YgdGhlIGVsZW1lbnRzIHRha2VzIHBsYWNlIGFzIHRoZXkgYXJlIGFkZGVkIHRvLAorICAgKiAgYW5kIHJlbW92ZWQgZnJvbSwgdGhlICVwcmlvcml0eV9xdWV1ZSB1c2luZyB0aGUKKyAgICogICVwcmlvcml0eV9xdWV1ZSdzIG1lbWJlciBmdW5jdGlvbnMuICBJZiB5b3UgYWNjZXNzIHRoZSBlbGVtZW50cworICAgKiAgYnkgb3RoZXIgbWVhbnMsIGFuZCBjaGFuZ2UgdGhlaXIgZGF0YSBzdWNoIHRoYXQgdGhlIHNvcnRpbmcKKyAgICogIG9yZGVyIHdvdWxkIGJlIGRpZmZlcmVudCwgdGhlICVwcmlvcml0eV9xdWV1ZSB3aWxsIG5vdCByZS1zb3J0CisgICAqICB0aGUgZWxlbWVudHMgZm9yIHlvdS4gIChIb3cgY291bGQgaXQga25vdyB0byBkbyBzbz8pCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcXVlbmNlID0gdmVjdG9yPF9UcD4sCisJICAgdHlwZW5hbWUgX0NvbXBhcmUgID0gbGVzczx0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGU+ID4KKyAgICBjbGFzcyBwcmlvcml0eV9xdWV1ZQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSBfU2VxdWVuY2VfdmFsdWVfdHlwZTsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVHAsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfU2VxdWVuY2UsIF9TZXF1ZW5jZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1NlcXVlbmNlLCBfUmFuZG9tQWNjZXNzQ29udGFpbmVyQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczIoX1RwLCBfU2VxdWVuY2VfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczQoX0NvbXBhcmUsIGJvb2wsIF9UcCwgX1RwLAorCQkJCV9CaW5hcnlGdW5jdGlvbkNvbmNlcHQpCisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnJlZmVyZW5jZSAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnNpemVfdHlwZSAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiAgICAgICAgICBfU2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyAgU2VlIHF1ZXVlOjpjIGZvciBub3RlcyBvbiB0aGVzZSBuYW1lcy4KKyAgICAgIF9TZXF1ZW5jZSAgYzsKKyAgICAgIF9Db21wYXJlICAgY29tcDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgICBleHBsaWNpdAorICAgICAgcHJpb3JpdHlfcXVldWUoY29uc3QgX0NvbXBhcmUmIF9feCA9IF9Db21wYXJlKCksCisJCSAgICAgY29uc3QgX1NlcXVlbmNlJiBfX3MgPSBfU2VxdWVuY2UoKSkKKyAgICAgIDogYyhfX3MpLCBjb21wKF9feCkKKyAgICAgIHsgc3RkOjptYWtlX2hlYXAoYy5iZWdpbigpLCBjLmVuZCgpLCBjb21wKTsgfQorI2Vsc2UKKyAgICAgIGV4cGxpY2l0CisgICAgICBwcmlvcml0eV9xdWV1ZShjb25zdCBfQ29tcGFyZSYgX194LAorCQkgICAgIGNvbnN0IF9TZXF1ZW5jZSYgX19zKQorICAgICAgOiBjKF9fcyksIGNvbXAoX194KQorICAgICAgeyBzdGQ6Om1ha2VfaGVhcChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBwcmlvcml0eV9xdWV1ZShjb25zdCBfQ29tcGFyZSYgX194ID0gX0NvbXBhcmUoKSwKKwkJICAgICBfU2VxdWVuY2UmJiBfX3MgPSBfU2VxdWVuY2UoKSkKKyAgICAgIDogYyhzdGQ6Om1vdmUoX19zKSksIGNvbXAoX194KQorICAgICAgeyBzdGQ6Om1ha2VfaGVhcChjLmJlZ2luKCksIGMuZW5kKCksIGNvbXApOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAlcXVldWUgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX194ICBBIGNvbXBhcmlzb24gZnVuY3RvciBkZXNjcmliaW5nIGEgc3RyaWN0IHdlYWsgb3JkZXJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIEFuIGluaXRpYWwgc2VxdWVuY2Ugd2l0aCB3aGljaCB0byBzdGFydC4KKyAgICAgICAqCisgICAgICAgKiAgQmVnaW5zIGJ5IGNvcHlpbmcgQGEgX19zLCBpbnNlcnRpbmcgYSBjb3B5IG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGZyb20gQGEgW2ZpcnN0LGxhc3QpIGludG8gdGhlIGNvcHkgb2YgQGEgX19zLCB0aGVuIG9yZGVyaW5nCisgICAgICAgKiAgdGhlIGNvcHkgYWNjb3JkaW5nIHRvIEBhIF9feC4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZnVuY3Rpb24gb2JqZWN0cywgc2VlIHRoZQorICAgICAgICogIGRvY3VtZW50YXRpb24gb24gQGxpbmsgZnVuY3RvcnMgZnVuY3RvciBiYXNlCisgICAgICAgKiAgY2xhc3Nlc0BlbmRsaW5rLgorICAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgcHJpb3JpdHlfcXVldWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICAgICAgY29uc3QgX0NvbXBhcmUmIF9feCA9IF9Db21wYXJlKCksCisJCSAgICAgICBjb25zdCBfU2VxdWVuY2UmIF9fcyA9IF9TZXF1ZW5jZSgpKQorCTogYyhfX3MpLCBjb21wKF9feCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBjLmluc2VydChjLmVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOworCSAgc3RkOjptYWtlX2hlYXAoYy5iZWdpbigpLCBjLmVuZCgpLCBjb21wKTsKKwl9CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHByaW9yaXR5X3F1ZXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX3gsCisJCSAgICAgICBjb25zdCBfU2VxdWVuY2UmIF9fcykKKwk6IGMoX19zKSwgY29tcChfX3gpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgYy5pbnNlcnQoYy5lbmQoKSwgX19maXJzdCwgX19sYXN0KTsKKwkgIHN0ZDo6bWFrZV9oZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgcHJpb3JpdHlfcXVldWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICAgICAgY29uc3QgX0NvbXBhcmUmIF9feCA9IF9Db21wYXJlKCksCisJCSAgICAgICBfU2VxdWVuY2UmJiBfX3MgPSBfU2VxdWVuY2UoKSkKKwk6IGMoc3RkOjptb3ZlKF9fcykpLCBjb21wKF9feCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBjLmluc2VydChjLmVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOworCSAgc3RkOjptYWtlX2hlYXAoYy5iZWdpbigpLCBjLmVuZCgpLCBjb21wKTsKKwl9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSAlcXVldWUgaXMgZW1wdHkuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQorCisgICAgICAvKiogIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgJXF1ZXVlLiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVxdWV1ZS4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICB0b3AoKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19ub25lbXB0eSgpOworCXJldHVybiBjLmZyb250KCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWRkIGRhdGEgdG8gdGhlICVxdWV1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB0byBiZSBhZGRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgJXF1ZXVlIG9wZXJhdGlvbi4KKyAgICAgICAqICBUaGUgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBvcGVyYXRpb24gZGVwZW5kcyBvbiB0aGUgdW5kZXJseWluZworICAgICAgICogIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwljLnB1c2hfYmFjayhfX3gpOworCXN0ZDo6cHVzaF9oZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBwdXNoKHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7CisJYy5wdXNoX2JhY2soc3RkOjptb3ZlKF9feCkpOworCXN0ZDo6cHVzaF9oZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgYy5lbXBsYWNlX2JhY2soc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIHN0ZDo6cHVzaF9oZWFwKGMuYmVnaW4oKSwgYy5lbmQoKSwgY29tcCk7CisJfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlcyBmaXJzdCBlbGVtZW50LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCAlcXVldWUgb3BlcmF0aW9uLiAgSXQgc2hyaW5rcyB0aGUgJXF1ZXVlCisgICAgICAgKiAgYnkgb25lLiAgVGhlIHRpbWUgY29tcGxleGl0eSBvZiB0aGUgb3BlcmF0aW9uIGRlcGVuZHMgb24gdGhlCisgICAgICAgKiAgdW5kZXJseWluZyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IG5vIGRhdGEgaXMgcmV0dXJuZWQsIGFuZCBpZiB0aGUgZmlyc3QgZWxlbWVudCdzCisgICAgICAgKiAgZGF0YSBpcyBuZWVkZWQsIGl0IHNob3VsZCBiZSByZXRyaWV2ZWQgYmVmb3JlIHBvcCgpIGlzCisgICAgICAgKiAgY2FsbGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3AoKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19ub25lbXB0eSgpOworCXN0ZDo6cG9wX2hlYXAoYy5iZWdpbigpLCBjLmVuZCgpLCBjb21wKTsKKwljLnBvcF9iYWNrKCk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBzd2FwKHByaW9yaXR5X3F1ZXVlJiBfX3BxKQorICAgICAgbm9leGNlcHQobm9leGNlcHQoc3dhcChjLCBfX3BxLmMpKSAmJiBub2V4Y2VwdChzd2FwKGNvbXAsIF9fcHEuY29tcCkpKQorICAgICAgeworCXVzaW5nIHN0ZDo6c3dhcDsKKwlzd2FwKGMsIF9fcHEuYyk7CisJc3dhcChjb21wLCBfX3BxLmNvbXApOworICAgICAgfQorI2VuZGlmCisgICAgfTsKKworICAvLyBObyBlcXVhbGl0eS9jb21wYXJpc29uIG9wZXJhdG9ycyBhcmUgcHJvdmlkZWQgZm9yIHByaW9yaXR5X3F1ZXVlLgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXF1ZW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHByaW9yaXR5X3F1ZXVlPF9UcCwgX1NlcXVlbmNlLCBfQ29tcGFyZT4mIF9feCwKKwkgcHJpb3JpdHlfcXVldWU8X1RwLCBfU2VxdWVuY2UsIF9Db21wYXJlPiYgX195KQorICAgIG5vZXhjZXB0KG5vZXhjZXB0KF9feC5zd2FwKF9feSkpKQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcXVlbmNlLCB0eXBlbmFtZSBfQ29tcGFyZSwKKwkgICB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IHVzZXNfYWxsb2NhdG9yPHByaW9yaXR5X3F1ZXVlPF9UcCwgX1NlcXVlbmNlLCBfQ29tcGFyZT4sIF9BbGxvYz4KKyAgICA6IHB1YmxpYyB1c2VzX2FsbG9jYXRvcjxfU2VxdWVuY2UsIF9BbGxvYz46OnR5cGUgeyB9OworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9TVExfUVVFVUVfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDVjMTFkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgKQEAgLTAsMCArMSwxMDggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7bWVtb3J5fQorICovCisKKyNpZm5kZWYgX1NUTF9SQVdfU1RPUkFHRV9JVEVSQVRPUl9ICisjZGVmaW5lIF9TVExfUkFXX1NUT1JBR0VfSVRFUkFUT1JfSCAxCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIFRoaXMgaXRlcmF0b3IgY2xhc3MgbGV0cyBhbGdvcml0aG1zIHN0b3JlIHRoZWlyIHJlc3VsdHMgaW50bworICAgKiAgdW5pbml0aWFsaXplZCBtZW1vcnkuCisgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlcmF0b3IsIGNsYXNzIF9UcD4KKyAgICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcgorICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9PdXRwdXRJdGVyYXRvciBfTV9pdGVyOworCisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9PdXRwdXRJdGVyYXRvciBfX3gpCisgICAgICA6IF9NX2l0ZXIoX194KSB7fQorCisgICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQorICAgICAgeworCXN0ZDo6X0NvbnN0cnVjdChzdGQ6Ol9fYWRkcmVzc29mKCpfTV9pdGVyKSwgX19lbGVtZW50KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9PdXRwdXRJdGVyYXRvciwgX1RwPiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCSsrX01faXRlcjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9PdXRwdXRJdGVyYXRvciwgX1RwPgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X091dHB1dEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CisJKytfTV9pdGVyOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9yZWxvcHMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfcmVsb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3MDhkNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfcmVsb3BzLmgKQEAgLTAsMCArMSwxMzQgQEAKKy8vIHN0ZDo6cmVsX29wcyBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX3JlbG9wcy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dXRpbGl0eX0KKyAqCisgKiAgSW5jbHVzaW9uIG9mIHRoaXMgZmlsZSBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAqICBhbGwgb2YgdGhlIG90aGVyIFNUTCBoZWFkZXJzIGZvciBzYWZldHkgcmVhc29ucywgZXhjZXB0IHN0ZF91dGlsaXR5LmguCisgKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgdGhyZWFkIG9mIGFib3V0IHR3ZW50eSBtZXNzYWdlcyBzdGFydGluZworICogIHdpdGggaHR0cDovL2djYy5nbnUub3JnL21sL2xpYnN0ZGMrKy8yMDAxLTAxL21zZzAwMjIzLmh0bWwsIG9yCisgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL2ZhcS5odG1sI2ZhcS5hbWJpZ3VvdXNfb3ZlcmxvYWRzCisgKgorICogIFNob3J0IHN1bW1hcnk6IHRoZSByZWxfb3BzIG9wZXJhdG9ycyBzaG91bGQgYmUgYXZvaWRlZCBmb3IgdGhlIHByZXNlbnQuCisgKi8KKworI2lmbmRlZiBfU1RMX1JFTE9QU19ICisjZGVmaW5lIF9TVExfUkVMT1BTX0ggMQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKKyAgbmFtZXNwYWNlIHJlbF9vcHMKKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgICAgLyoqIEBuYW1lc3BhY2Ugc3RkOjpyZWxfb3BzCisgICAgICogIEBicmllZiAgVGhlIGdlbmVyYXRlZCByZWxhdGlvbmFsIG9wZXJhdG9ycyBhcmUgc2VxdWVzdGVyZWQgaGVyZS4KKyAgICAgKi8KKworICAgIC8qKgorICAgICAqICBAYnJpZWYgRGVmaW5lcyBAYyAhPSBmb3IgYXJiaXRyYXJ5IHR5cGVzLCBpbiB0ZXJtcyBvZiBAYyA9PS4KKyAgICAgKiAgQHBhcmFtICBfX3ggIEEgdGhpbmcuCisgICAgICogIEBwYXJhbSAgX195ICBBbm90aGVyIHRoaW5nLgorICAgICAqICBAcmV0dXJuICAgX194ICE9IF9feQorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gdXNlcyBAYyA9PSB0byBkZXRlcm1pbmUgaXRzIHJlc3VsdC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KQorICAgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgICAgLyoqCisgICAgICogIEBicmllZiBEZWZpbmVzIEBjID4gZm9yIGFyYml0cmFyeSB0eXBlcywgaW4gdGVybXMgb2YgQGMgPC4KKyAgICAgKiAgQHBhcmFtICBfX3ggIEEgdGhpbmcuCisgICAgICogIEBwYXJhbSAgX195ICBBbm90aGVyIHRoaW5nLgorICAgICAqICBAcmV0dXJuICAgX194ID4gX195CisgICAgICoKKyAgICAgKiAgVGhpcyBmdW5jdGlvbiB1c2VzIEBjIDwgdG8gZGV0ZXJtaW5lIGl0cyByZXN1bHQuCisgICAgICovCisgICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KQorICAgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmIERlZmluZXMgQGMgPD0gZm9yIGFyYml0cmFyeSB0eXBlcywgaW4gdGVybXMgb2YgQGMgPC4KKyAgICAgKiAgQHBhcmFtICBfX3ggIEEgdGhpbmcuCisgICAgICogIEBwYXJhbSAgX195ICBBbm90aGVyIHRoaW5nLgorICAgICAqICBAcmV0dXJuICAgX194IDw9IF9feQorICAgICAqCisgICAgICogIFRoaXMgZnVuY3Rpb24gdXNlcyBAYyA8IHRvIGRldGVybWluZSBpdHMgcmVzdWx0LgorICAgICAqLworICAgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpCisgICAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAgIC8qKgorICAgICAqICBAYnJpZWYgRGVmaW5lcyBAYyA+PSBmb3IgYXJiaXRyYXJ5IHR5cGVzLCBpbiB0ZXJtcyBvZiBAYyA8LgorICAgICAqICBAcGFyYW0gIF9feCAgQSB0aGluZy4KKyAgICAgKiAgQHBhcmFtICBfX3kgIEFub3RoZXIgdGhpbmcuCisgICAgICogIEByZXR1cm4gICBfX3ggPj0gX195CisgICAgICoKKyAgICAgKiAgVGhpcyBmdW5jdGlvbiB1c2VzIEBjIDwgdG8gZGV0ZXJtaW5lIGl0cyByZXN1bHQuCisgICAgICovCisgICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSByZWxfb3BzCisKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX1NUTF9SRUxPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF9zZXQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRlYjU4OQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfc2V0LmgKQEAgLTAsMCArMSw4MTEgQEAKKy8vIFNldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgYml0cy9zdGxfc2V0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtzZXR9CisgKi8KKworI2lmbmRlZiBfU1RMX1NFVF9ICisjZGVmaW5lIF9TVExfU0VUX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgbWFkZSB1cCBvZiB1bmlxdWUga2V5cywgd2hpY2ggY2FuIGJlCisgICAqICByZXRyaWV2ZWQgaW4gbG9nYXJpdGhtaWMgdGltZS4KKyAgICoKKyAgICogIEBpbmdyb3VwIGFzc29jaWF0aXZlX2NvbnRhaW5lcnMKKyAgICoKKyAgICogIEB0cGFyYW0gX0tleSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEB0cGFyYW0gX0NvbXBhcmUgIENvbXBhcmlzb24gZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGxlc3M8X0tleT4uCisgICAqICBAdHBhcmFtIF9BbGxvYyAgQWxsb2NhdG9yIHR5cGUsIGRlZmF1bHRzIHRvIGFsbG9jYXRvcjxfS2V5Pi4KKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjYiPnJldmVyc2libGUgY29udGFpbmVyPC9hPiwgYW5kIGFuCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2OSI+YXNzb2NpYXRpdmUgY29udGFpbmVyPC9hPiAodXNpbmcgdW5pcXVlIGtleXMpLgorICAgKgorICAgKiAgU2V0cyBzdXBwb3J0IGJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzLgorICAgKgorICAgKiAgVGhlIHByaXZhdGUgdHJlZSBkYXRhIGlzIGRlY2xhcmVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGZvciBzZXQgYW5kCisgICAqICBtdWx0aXNldDsgdGhlIGRpc3RpbmN0aW9uIGlzIG1hZGUgZW50aXJlbHkgaW4gaG93IHRoZSB0cmVlIGZ1bmN0aW9ucyBhcmUKKyAgICogIGNhbGxlZCAoKl91bmlxdWUgdmVyc3VzICpfZXF1YWwsIHNhbWUgYXMgdGhlIHN0YW5kYXJkKS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X0tleT4gPgorICAgIGNsYXNzIHNldAorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dmFsdWVfdHlwZSAgICAgICAgICAgICAgICAgICBfQWxsb2NfdmFsdWVfdHlwZTsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfS2V5LCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXM0KF9Db21wYXJlLCBib29sLCBfS2V5LCBfS2V5LAorCQkJCV9CaW5hcnlGdW5jdGlvbkNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMyKF9LZXksIF9BbGxvY192YWx1ZV90eXBlLCBfU2FtZVR5cGVDb25jZXB0KQorCisgICAgcHVibGljOgorICAgICAgLy8gdHlwZWRlZnM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWZzLgorICAgICAgdHlwZWRlZiBfS2V5ICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0tleSAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlIHZhbHVlX2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgIGFsbG9jYXRvcl90eXBlOworICAgICAgLy9AfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X0tleT46Om90aGVyIF9LZXlfYWxsb2NfdHlwZTsKKworICAgICAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgX0lkZW50aXR5PHZhbHVlX3R5cGU+LAorCQkgICAgICAga2V5X2NvbXBhcmUsIF9LZXlfYWxsb2NfdHlwZT4gX1JlcF90eXBlOworICAgICAgX1JlcF90eXBlIF9NX3Q7ICAvLyBSZWQtYmxhY2sgdHJlZSByZXByZXNlbnRpbmcgc2V0LgorCisgICAgcHVibGljOgorICAgICAgLy9AeworICAgICAgLy8vICBJdGVyYXRvci1yZWxhdGVkIHR5cGVkZWZzLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfS2V5X2FsbG9jX3R5cGU6OnBvaW50ZXIgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0tleV9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9LZXlfYWxsb2NfdHlwZTo6cmVmZXJlbmNlICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9LZXlfYWxsb2NfdHlwZTo6Y29uc3RfcmVmZXJlbmNlICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMDMuIHNldDo6aXRlcmF0b3IgaXMgcmVxdWlyZWQgdG8gYmUgbW9kaWZpYWJsZSwKKyAgICAgIC8vIGJ1dCB0aGlzIGFsbG93cyBtb2RpZmljYXRpb24gb2Yga2V5cy4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy8gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBzZXQoKQorICAgICAgOiBfTV90KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICVzZXQgd2l0aCBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fY29tcCAgQ29tcGFyYXRvciB0byB1c2UuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKKwkgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV90KF9fY29tcCwgX0tleV9hbGxvY190eXBlKF9fYSkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVzZXQgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAlc2V0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBmcm9tCisgICAgICAgKiAgW19fZmlyc3QsX19sYXN0KS4gIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIHJhbmdlIGlzCisgICAgICAgKiAgYWxyZWFkeSBzb3J0ZWQsIGFuZCBObG9nTiBvdGhlcndpc2UgKHdoZXJlIE4gaXMKKyAgICAgICAqICBkaXN0YW5jZShfX2ZpcnN0LF9fbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorCTogX01fdCgpCisJeyBfTV90Ll9NX2luc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhICVzZXQgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19jb21wICBBIGNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJXNldCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbQorICAgICAgICogIFtfX2ZpcnN0LF9fbGFzdCkuICBUaGlzIGlzIGxpbmVhciBpbiBOIGlmIHRoZSByYW5nZSBpcworICAgICAgICogIGFscmVhZHkgc29ydGVkLCBhbmQgTmxvZ04gb3RoZXJ3aXNlICh3aGVyZSBOIGlzCisgICAgICAgKiAgZGlzdGFuY2UoX19maXJzdCxfX2xhc3QpKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKKwkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV90KF9fY29tcCwgX0tleV9hbGxvY190eXBlKF9fYSkpCisgICAgICAgIHsgX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlU2V0IGNvcHkgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJXNldCBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlc2V0IHVzZXMgYSBjb3B5IG9mIHRoZSBhbGxvY2F0aW9uIG9iamVjdCB1c2VkCisgICAgICAgKiAgYnkgQGEgX194LgorICAgICAgICovCisgICAgICBzZXQoY29uc3Qgc2V0JiBfX3gpCisgICAgICA6IF9NX3QoX194Ll9NX3QpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgJVNldCBtb3ZlIGNvbnN0cnVjdG9yCisgICAgICAgKiAgQHBhcmFtIF9feCAgQSAlc2V0IG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVzZXQgY29udGFpbnMgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIHguCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIHggYXJlIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCAlc2V0LgorICAgICAgICovCisgICAgICBzZXQoc2V0JiYgX194KQorICAgICAgbm9leGNlcHQoaXNfbm90aHJvd19jb3B5X2NvbnN0cnVjdGlibGU8X0NvbXBhcmU+Ojp2YWx1ZSkKKyAgICAgIDogX01fdChzdGQ6Om1vdmUoX194Ll9NX3QpKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAlc2V0IGZyb20gYW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fY29tcCAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhICVzZXQgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBsaXN0LgorICAgICAgICogIFRoaXMgaXMgbGluZWFyIGluIE4gaWYgdGhlIGxpc3QgaXMgYWxyZWFkeSBzb3J0ZWQsIGFuZCBObG9nTgorICAgICAgICogIG90aGVyd2lzZSAod2hlcmUgTiBpcyBAYSBfX2wuc2l6ZSgpKS4KKyAgICAgICAqLworICAgICAgc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdChfX2NvbXAsIF9LZXlfYWxsb2NfdHlwZShfX2EpKQorICAgICAgeyBfTV90Ll9NX2luc2VydF91bmlxdWUoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVTZXQgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAlc2V0IG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgZWxlbWVudHMgb2YgQGEgX194IGFyZSBjb3BpZWQsIGJ1dCB1bmxpa2UgdGhlIGNvcHkKKyAgICAgICAqICBjb25zdHJ1Y3RvciwgdGhlIGFsbG9jYXRvciBvYmplY3QgaXMgbm90IGNvcGllZC4KKyAgICAgICAqLworICAgICAgc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHNldCYgX194KQorICAgICAgeworCV9NX3QgPSBfX3guX01fdDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgJVNldCBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9feCAgQSAlc2V0IG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBjb250ZW50cyBvZiBAYSBfX3ggYXJlIG1vdmVkIGludG8gdGhpcyAlc2V0ICh3aXRob3V0IGNvcHlpbmcpLgorICAgICAgICogIEBhIF9feCBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgJXNldC4KKyAgICAgICAqLworICAgICAgc2V0JgorICAgICAgb3BlcmF0b3I9KHNldCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+c3dhcChfX3gpOworICAgICAgCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlU2V0IGxpc3QgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICVzZXQgd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyIGxpc3QgQGEgX19sLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAlc2V0IGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAlc2V0J3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvLyBhY2Nlc3NvcnM6CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgY29tcGFyaXNvbiBvYmplY3Qgd2l0aCB3aGljaCB0aGUgJXNldCB3YXMgY29uc3RydWN0ZWQuCisgICAgICBrZXlfY29tcGFyZQorICAgICAga2V5X2NvbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CisgICAgICAvLy8gIFJldHVybnMgdGhlIGNvbXBhcmlzb24gb2JqZWN0IHdpdGggd2hpY2ggdGhlICVzZXQgd2FzIGNvbnN0cnVjdGVkLgorICAgICAgdmFsdWVfY29tcGFyZQorICAgICAgdmFsdWVfY29tcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgYWxsb2NhdG9yIG9iamVjdCB3aXRoIHdoaWNoIHRoZSAlc2V0IHdhcyBjb25zdHJ1Y3RlZC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKF9NX3QuZ2V0X2FsbG9jYXRvcigpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXNldC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGFzY2VuZGluZyBvcmRlciBhY2NvcmRpbmcKKyAgICAgICAqICB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXNldC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIgYWNjb3JkaW5nCisgICAgICAgKiAgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGxhc3QgcGFpciBpbiB0aGUgJXNldC4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIGRlc2NlbmRpbmcgb3JkZXIKKyAgICAgICAqICBhY2NvcmRpbmcgdG8gdGhlIGtleXMuCisgICAgICAgKi8KKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV90LmVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgbGFzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICVzZXQuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBkZXNjZW5kaW5nIG9yZGVyIGFjY29yZGluZworICAgICAgICogIHRvIHRoZSBrZXlzLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlCisgICAgICAgKiAgbGFzdCBwYWlyIGluIHRoZSAlc2V0LiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gZGVzY2VuZGluZyBvcmRlcgorICAgICAgICogIGFjY29yZGluZyB0byB0aGUga2V5cy4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KKyNlbmRpZgorCisgICAgICAvLy8gIFJldHVybnMgdHJ1ZSBpZiB0aGUgJXNldCBpcyBlbXB0eS4KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIHNpemUgb2YgdGhlICVzZXQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlICVzZXQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICVzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJXNldCBvZiB0aGUgc2FtZSBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZXhjaGFuZ2VzIHRoZSBlbGVtZW50cyBiZXR3ZWVuIHR3byBzZXRzIGluIGNvbnN0YW50CisgICAgICAgKiAgdGltZS4gIChJdCBpcyBvbmx5IHN3YXBwaW5nIGEgcG9pbnRlciwgYW4gaW50ZWdlciwgYW5kIGFuCisgICAgICAgKiAgaW5zdGFuY2Ugb2YgdGhlIEBjIENvbXBhcmUgdHlwZSAod2hpY2ggaXRzZWxmIGlzIG9mdGVuCisgICAgICAgKiAgc3RhdGVsZXNzIGFuZCBlbXB0eSksIHNvIGl0IHNob3VsZCBiZSBxdWl0ZSBmYXN0LikgIE5vdGUKKyAgICAgICAqICB0aGF0IHRoZSBnbG9iYWwgc3RkOjpzd2FwKCkgZnVuY3Rpb24gaXMgc3BlY2lhbGl6ZWQgc3VjaAorICAgICAgICogIHRoYXQgc3RkOjpzd2FwKHMxLHMyKSB3aWxsIGZlZWQgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChzZXQmIF9feCkKKyAgICAgIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQorCisgICAgICAvLyBpbnNlcnQvZXJhc2UKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gYnVpbGQgYW5kIGluc2VydCBhbiBlbGVtZW50IGludG8gdGhlICVzZXQuCisgICAgICAgKiAgQHBhcmFtIF9fYXJncyAgQXJndW1lbnRzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gZWxlbWVudC4KKyAgICAgICAqICBAcmV0dXJuICBBIHBhaXIsIG9mIHdoaWNoIHRoZSBmaXJzdCBlbGVtZW50IGlzIGFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgICAgICAgICAgdG8gdGhlIHBvc3NpYmx5IGluc2VydGVkIGVsZW1lbnQsIGFuZCB0aGUgc2Vjb25kIGlzIGEgYm9vbAorICAgICAgICogICAgICAgICAgIHRoYXQgaXMgdHJ1ZSBpZiB0aGUgZWxlbWVudCB3YXMgYWN0dWFsbHkgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gYnVpbGQgYW5kIGluc2VydCBhbiBlbGVtZW50IGludG8gdGhlICVzZXQuCisgICAgICAgKiAgQSAlc2V0IHJlbGllcyBvbiB1bmlxdWUga2V5cyBhbmQgdGh1cyBhbiBlbGVtZW50IGlzIG9ubHkgaW5zZXJ0ZWQgaWYKKyAgICAgICAqICBpdCBpcyBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSAlc2V0LgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgbG9nYXJpdGhtaWMgdGltZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gX01fdC5fTV9lbXBsYWNlX3VuaXF1ZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYW4gZWxlbWVudCBpbnRvIHRoZSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUKKyAgICAgICAqICAgICAgICAgICAgICAgIGVsZW1lbnQgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZWxlbWVudCB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGVsZW1lbnQgd2l0aCBrZXkgZXF1aXZhbGVudCB0bworICAgICAgICogICAgICAgICAgdGhlIG9uZSBnZW5lcmF0ZWQgZnJvbSBAYSBfX2FyZ3MgKG1heSBvciBtYXkgbm90IGJlIHRoZQorICAgICAgICogICAgICAgICAgZWxlbWVudCBpdHNlbGYpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb25jZXJuZWQgYWJvdXQgd2hldGhlciB0aGUgaW5zZXJ0aW9uIHRvb2sgcGxhY2UsCisgICAgICAgKiAgYW5kIHRodXMgZG9lcyBub3QgcmV0dXJuIGEgYm9vbGVhbiBsaWtlIHRoZSBzaW5nbGUtYXJndW1lbnQgZW1wbGFjZSgpCisgICAgICAgKiAgZG9lcy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4KKyAgICAgICAqICBwb3RlbnRpYWxseSBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZAorICAgICAgICogIGhpbnQgd291bGQgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIG1vcmUgb24gQGEgaGludGluZywgc2VlOgorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGxvZ2FyaXRobWljIHRpbWUgKGlmIHRoZSBoaW50IGlzIG5vdCB0YWtlbikuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9oaW50KGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICByZXR1cm4gX01fdC5fTV9lbXBsYWNlX2hpbnRfdW5pcXVlKF9fcG9zLAorCQkJCQkgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYW4gZWxlbWVudCBpbnRvIHRoZSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gIEEgcGFpciwgb2Ygd2hpY2ggdGhlIGZpcnN0IGVsZW1lbnQgaXMgYW4gaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICAgICAgICAgICB0byB0aGUgcG9zc2libHkgaW5zZXJ0ZWQgZWxlbWVudCwgYW5kIHRoZSBzZWNvbmQgaXMgYSBib29sCisgICAgICAgKiAgICAgICAgICAgdGhhdCBpcyB0cnVlIGlmIHRoZSBlbGVtZW50IHdhcyBhY3R1YWxseSBpbnNlcnRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBpbnNlcnQgYW4gZWxlbWVudCBpbnRvIHRoZSAlc2V0LiAgQSAlc2V0CisgICAgICAgKiAgcmVsaWVzIG9uIHVuaXF1ZSBrZXlzIGFuZCB0aHVzIGFuIGVsZW1lbnQgaXMgb25seSBpbnNlcnRlZCBpZiBpdCBpcworICAgICAgICogIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlICVzZXQuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBsb2dhcml0aG1pYyB0aW1lLgorICAgICAgICovCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCXN0ZDo6cGFpcjx0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yLCBib29sPiBfX3AgPQorCSAgX01fdC5fTV9pbnNlcnRfdW5pcXVlKF9feCk7CisJcmV0dXJuIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4oX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydCh2YWx1ZV90eXBlJiYgX194KQorICAgICAgeworCXN0ZDo6cGFpcjx0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yLCBib29sPiBfX3AgPQorCSAgX01fdC5fTV9pbnNlcnRfdW5pcXVlKHN0ZDo6bW92ZShfX3gpKTsKKwlyZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYW4gZWxlbWVudCBpbnRvIHRoZSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgdGhhdCBzZXJ2ZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIHRoZQorICAgICAgICogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGVsZW1lbnQgd2l0aCBrZXkgb2YKKyAgICAgICAqICAgICAgICAgICBAYSBfX3ggKG1heSBvciBtYXkgbm90IGJlIHRoZSBlbGVtZW50IHBhc3NlZCBpbikuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNvbmNlcm5lZCBhYm91dCB3aGV0aGVyIHRoZSBpbnNlcnRpb24gdG9vayBwbGFjZSwKKyAgICAgICAqICBhbmQgdGh1cyBkb2VzIG5vdCByZXR1cm4gYSBib29sZWFuIGxpa2UgdGhlIHNpbmdsZS1hcmd1bWVudCBpbnNlcnQoKQorICAgICAgICogIGRvZXMuICBOb3RlIHRoYXQgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBvbmx5IGEgaGludCBhbmQgY2FuCisgICAgICAgKiAgcG90ZW50aWFsbHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGluc2VydGlvbiBwcm9jZXNzLiAgQSBiYWQKKyAgICAgICAqICBoaW50IHdvdWxkIGNhdXNlIG5vIGdhaW5zIGluIGVmZmljaWVuY3kuCisgICAgICAgKgorICAgICAgICogIEZvciBtb3JlIG9uIEBhIGhpbnRpbmcsIHNlZToKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDA3Y2gxNy5odG1sCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBsb2dhcml0aG1pYyB0aW1lIChpZiB0aGUgaGludCBpcyBub3QgdGFrZW4pLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuX01faW5zZXJ0X3VuaXF1ZV8oX19wb3NpdGlvbiwgX194KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5fTV9pbnNlcnRfdW5pcXVlXyhfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQSB0ZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGF0dGVtcHRzIHRvIGluc2VydCBhIHJhbmdlCisgICAgICAgKiAgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdm9pZAorCWluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisJeyBfTV90Ll9NX2luc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhIGxpc3Qgb2YgZWxlbWVudHMgaW50byB0aGUgJXNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQSBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gb2YgZWxlbWVudHMKKyAgICAgICAqICAgICAgICAgICAgICAgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5pbnNlcnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMTMwLiBBc3NvY2lhdGl2ZSBlcmFzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhbiBlbGVtZW50IGZyb20gYSAlc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nCisgICAgICAgKiAgICAgICAgICBAYSBfX3Bvc2l0aW9uIHByaW9yIHRvIHRoZSBlbGVtZW50IGJlaW5nIGVyYXNlZC4gSWYgbm8gc3VjaAorICAgICAgICogICAgICAgICAgZWxlbWVudCBleGlzdHMsIGVuZCgpIGlzIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbiBlbGVtZW50LCBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiBpdGVyYXRvciwKKyAgICAgICAqICBmcm9tIGEgJXNldC4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQKKyAgICAgICAqICB0aGF0IGlmIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QKKyAgICAgICAqICB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIF9HTElCQ1hYX0FCSV9UQUdfQ1hYMTEKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQorI2Vsc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYW4gZWxlbWVudCBmcm9tIGEgJXNldC4KKyAgICAgICAqICBAcGFyYW0gIHBvc2l0aW9uICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFuIGVsZW1lbnQsIHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIGl0ZXJhdG9yLAorICAgICAgICogIGZyb20gYSAlc2V0LiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZAorICAgICAgICogIHRoYXQgaWYgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdAorICAgICAgICogIHRvdWNoZWQgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MKKyAgICAgICAqICByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSBvZiBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYWxsIHRoZSBlbGVtZW50cyBsb2NhdGVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQorICAgICAgICogIGEgJXNldC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAxMzAuIEFzc29jaWF0aXZlIGVyYXNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGEgW19fZmlyc3QsX19sYXN0KSByYW5nZSBvZiBlbGVtZW50cyBmcm9tIGEgJXNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICBlcmFzZWQuCisKKyAgICAgICAqICBAcGFyYW0gX19sYXN0IEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvCisgICAgICAgKiAgYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gVGhlIGl0ZXJhdG9yIEBhIF9fbGFzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBmcm9tIGEgJXNldC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgX0dMSUJDWFhfQUJJX1RBR19DWFgxMQorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgcmV0dXJuIF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQorI2Vsc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYSBbZmlyc3QsbGFzdCkgcmFuZ2Ugb2YgZWxlbWVudHMgZnJvbSBhICVzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgZXJhc2VkLgorICAgICAgICogIEBwYXJhbSBfX2xhc3QgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8KKyAgICAgICAqICBiZSBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZnJvbSBhICVzZXQuCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkCisgICAgICAgKiAgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIGFsbCBlbGVtZW50cyBpbiBhICVzZXQuICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcworICAgICAgICogIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUKKyAgICAgICAqICBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMKKyAgICAgICAqICB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX3QuY2xlYXIoKTsgfQorCisgICAgICAvLyBzZXQgb3BlcmF0aW9uczoKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggc3BlY2lmaWVkIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGZvciBtdWx0aXNldHM7IGZvciBzZXQgdGhlIHJlc3VsdCB3aWxsCisgICAgICAgKiAgZWl0aGVyIGJlIDAgKG5vdCBwcmVzZW50KSBvciAxIChwcmVzZW50KS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUcmllcyB0byBsb2NhdGUgYW4gZWxlbWVudCBpbiBhICVzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEVsZW1lbnQgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIgZWxlbWVudCwgb3IgZW5kKCkgaWYgbm90CisgICAgICAgKiAgICAgICAgICAgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBzb3VnaHQgYWZ0ZXIgZWxlbWVudC4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIHRoZQorICAgICAgICogIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBiZWdpbm5pbmcgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIHRvIGZpcnN0IGVsZW1lbnQgZXF1YWwgdG8gb3IgZ3JlYXRlcgorICAgICAgICogICAgICAgICAgIHRoYW4ga2V5LCBvciBlbmQoKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIGEgc3Vic2VxdWVuY2Ugb2YgZWxlbWVudHMKKyAgICAgICAqICB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGtleS4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIGFuIGl0ZXJhdG9yCisgICAgICAgKiAgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYXMgYSBncmVhdGVyIHZhbHVlIHRoYW4gZ2l2ZW4ga2V5CisgICAgICAgKiAgb3IgZW5kKCkgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cy4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIHRoZSBlbmQgb2YgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQKKyAgICAgICAqICAgICAgICAgIGdyZWF0ZXIgdGhhbiBrZXksIG9yIGVuZCgpLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQorICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRmluZHMgYSBzdWJzZXF1ZW5jZSBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIFBhaXIgb2YgaXRlcmF0b3JzIHRoYXQgcG9zc2libHkgcG9pbnRzIHRvIHRoZSBzdWJzZXF1ZW5jZQorICAgICAgICogICAgICAgICAgIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgKiAgQGNvZGUKKyAgICAgICAqICAgIHN0ZDo6bWFrZV9wYWlyKGMubG93ZXJfYm91bmQodmFsKSwKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGMudXBwZXJfYm91bmQodmFsKSkKKyAgICAgICAqICBAZW5kY29kZQorICAgICAgICogIChidXQgaXMgZmFzdGVyIHRoYW4gbWFraW5nIHRoZSBjYWxscyBzZXBhcmF0ZWx5KS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm9iYWJseSBvbmx5IG1ha2VzIHNlbnNlIGZvciBtdWx0aXNldHMuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CisgICAgICAvL0B9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHNldDxfSzEsIF9DMSwgX0ExPiYsIGNvbnN0IHNldDxfSzEsIF9DMSwgX0ExPiYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSzEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgorCWZyaWVuZCBib29sCisJb3BlcmF0b3I8KGNvbnN0IHNldDxfSzEsIF9DMSwgX0ExPiYsIGNvbnN0IHNldDxfSzEsIF9DMSwgX0ExPiYpOworICAgIH07CisKKworICAvKioKKyAgICogIEBicmllZiAgU2V0IGVxdWFsaXR5IGNvbXBhcmlzb24uCisgICAqICBAcGFyYW0gIF9feCAgQSAlc2V0LgorICAgKiAgQHBhcmFtICBfX3kgIEEgJXNldCBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIHguCisgICAqICBAcmV0dXJuICBUcnVlIGlmZiB0aGUgc2l6ZSBhbmQgZWxlbWVudHMgb2YgdGhlIHNldHMgYXJlIGVxdWFsLgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIEl0IGlzIGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgc2V0cy4KKyAgICogIFNldHMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiB0aGVpciBzaXplcyBhcmUgZXF1YWwsIGFuZCBpZgorICAgKiAgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb21wYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7IH0KKworICAvKioKKyAgICogIEBicmllZiAgU2V0IG9yZGVyaW5nIHJlbGF0aW9uLgorICAgKiAgQHBhcmFtICBfX3ggIEEgJXNldC4KKyAgICogIEBwYXJhbSAgX195ICBBICVzZXQgb2YgdGhlIHNhbWUgdHlwZSBhcyBAYSB4LgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZmYgQGEgX194IGlzIGxleGljb2dyYXBoaWNhbGx5IGxlc3MgdGhhbiBAYSBfX3kuCisgICAqCisgICAqICBUaGlzIGlzIGEgdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBJdCBpcyBsaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlCisgICAqICBtYXBzLiAgVGhlIGVsZW1lbnRzIG11c3QgYmUgY29tcGFyYWJsZSB3aXRoIEBjIDwuCisgICAqCisgICAqICBTZWUgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgpIGZvciBob3cgdGhlIGRldGVybWluYXRpb24gaXMgbWFkZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fdCA8IF9feS5fTV90OyB9CisKKyAgLy8vICBSZXR1cm5zICEoeCA9PSB5KS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICAvLy8gIFJldHVybnMgeSA8IHguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgLy8vICBSZXR1cm5zICEoeSA8IHgpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gIFJldHVybnMgISh4IDwgeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIC8vLyBTZWUgc3RkOjpzZXQ6OnN3YXAoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsIHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorfSAvL25hbWVzcGFjZSBzdGQKKyNlbmRpZiAvKiBfU1RMX1NFVF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3N0YWNrLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3N0YWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjYTA0YQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfc3RhY2suaApAQCAtMCwwICsxLDMwMyBAQAorLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX3N0YWNrLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtzdGFja30KKyAqLworCisjaWZuZGVmIF9TVExfU1RBQ0tfSAorI2RlZmluZSBfU1RMX1NUQUNLX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jb25jZXB0X2NoZWNrLmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiAgQGJyaWVmICBBIHN0YW5kYXJkIGNvbnRhaW5lciBnaXZpbmcgRklMTyBiZWhhdmlvci4KKyAgICoKKyAgICogIEBpbmdyb3VwIHNlcXVlbmNlcworICAgKgorICAgKiAgQHRwYXJhbSBfVHAgIFR5cGUgb2YgZWxlbWVudC4KKyAgICogIEB0cGFyYW0gX1NlcXVlbmNlICBUeXBlIG9mIHVuZGVybHlpbmcgc2VxdWVuY2UsIGRlZmF1bHRzIHRvIGRlcXVlPF9UcD4uCisgICAqCisgICAqICBNZWV0cyBtYW55IG9mIHRoZSByZXF1aXJlbWVudHMgb2YgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sCisgICAqICBidXQgZG9lcyBub3QgZGVmaW5lIGFueXRoaW5nIHRvIGRvIHdpdGggaXRlcmF0b3JzLiAgVmVyeSBmZXcgb2YgdGhlCisgICAqICBvdGhlciBzdGFuZGFyZCBjb250YWluZXIgaW50ZXJmYWNlcyBhcmUgZGVmaW5lZC4KKyAgICoKKyAgICogIFRoaXMgaXMgbm90IGEgdHJ1ZSBjb250YWluZXIsIGJ1dCBhbiBAZSBhZGFwdG9yLiAgSXQgaG9sZHMKKyAgICogIGFub3RoZXIgY29udGFpbmVyLCBhbmQgcHJvdmlkZXMgYSB3cmFwcGVyIGludGVyZmFjZSB0byB0aGF0CisgICAqICBjb250YWluZXIuICBUaGUgd3JhcHBlciBpcyB3aGF0IGVuZm9yY2VzIHN0cmljdAorICAgKiAgZmlyc3QtaW4tbGFzdC1vdXQgJXN0YWNrIGJlaGF2aW9yLgorICAgKgorICAgKiAgVGhlIHNlY29uZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgdHlwZSBvZiB0aGUgdW5kZXJseWluZworICAgKiAgc2VxdWVuY2UvY29udGFpbmVyLiAgSXQgZGVmYXVsdHMgdG8gc3RkOjpkZXF1ZSwgYnV0IGl0IGNhbiBiZQorICAgKiAgYW55IHR5cGUgdGhhdCBzdXBwb3J0cyBAYyBiYWNrLCBAYyBwdXNoX2JhY2ssIGFuZCBAYyBwb3BfZnJvbnQsCisgICAqICBzdWNoIGFzIHN0ZDo6bGlzdCwgc3RkOjp2ZWN0b3IsIG9yIGFuIGFwcHJvcHJpYXRlIHVzZXItZGVmaW5lZAorICAgKiAgdHlwZS4KKyAgICoKKyAgICogIE1lbWJlcnMgbm90IGZvdW5kIGluIEBhIG5vcm1hbCBjb250YWluZXJzIGFyZSBAYyBjb250YWluZXJfdHlwZSwKKyAgICogIHdoaWNoIGlzIGEgdHlwZWRlZiBmb3IgdGhlIHNlY29uZCBTZXF1ZW5jZSBwYXJhbWV0ZXIsIGFuZCBAYworICAgKiAgcHVzaCwgQGMgcG9wLCBhbmQgQGMgdG9wLCB3aGljaCBhcmUgc3RhbmRhcmQgJXN0YWNrL0ZJTE8KKyAgICogIG9wZXJhdGlvbnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcXVlbmNlID0gZGVxdWU8X1RwPiA+CisgICAgY2xhc3Mgc3RhY2sKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgX1NlcXVlbmNlX3ZhbHVlX3R5cGU7CisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1NlcXVlbmNlLCBfQmFja0luc2VydGlvblNlcXVlbmNlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczIoX1RwLCBfU2VxdWVuY2VfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1NlcTE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+JiwgY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9TZXExPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+JiwgY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+Jik7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnJlZmVyZW5jZSAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnNpemVfdHlwZSAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiAgICAgICAgICBfU2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyAgU2VlIHF1ZXVlOjpjIGZvciBub3RlcyBvbiB0aGlzIG5hbWUuCisgICAgICBfU2VxdWVuY2UgYzsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIFhYWCByZW1vdmVkIG9sZCBkZWYgY3RvciwgYWRkZWQgZGVmIGFyZyB0byB0aGlzIG9uZSB0byBtYXRjaCAxNDg4MgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgbm8gZWxlbWVudHMuCisgICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgICAgIGV4cGxpY2l0CisgICAgICBzdGFjayhjb25zdCBfU2VxdWVuY2UmIF9fYyA9IF9TZXF1ZW5jZSgpKQorICAgICAgOiBjKF9fYykgeyB9CisjZWxzZQorICAgICAgZXhwbGljaXQKKyAgICAgIHN0YWNrKGNvbnN0IF9TZXF1ZW5jZSYgX19jKQorICAgICAgOiBjKF9fYykgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBzdGFjayhfU2VxdWVuY2UmJiBfX2MgPSBfU2VxdWVuY2UoKSkKKyAgICAgIDogYyhzdGQ6Om1vdmUoX19jKSkgeyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSAlc3RhY2sgaXMgZW1wdHkuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQorCisgICAgICAvKiogIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgJXN0YWNrLiAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXN0YWNrLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIHRvcCgpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX25vbmVtcHR5KCk7CisJcmV0dXJuIGMuYmFjaygpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVzdGFjay4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICB0b3AoKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19ub25lbXB0eSgpOworCXJldHVybiBjLmJhY2soKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBZGQgZGF0YSB0byB0aGUgdG9wIG9mIHRoZSAlc3RhY2suCisgICAgICAgKiAgQHBhcmFtICBfX3ggIERhdGEgdG8gYmUgYWRkZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSB0eXBpY2FsICVzdGFjayBvcGVyYXRpb24uICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbgorICAgICAgICogIGVsZW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgJXN0YWNrIGFuZCBhc3NpZ25zIHRoZSBnaXZlbiBkYXRhCisgICAgICAgKiAgdG8gaXQuICBUaGUgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBvcGVyYXRpb24gZGVwZW5kcyBvbiB0aGUKKyAgICAgICAqICB1bmRlcmx5aW5nIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgYy5wdXNoX2JhY2soX194KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgcHVzaCh2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyBjLnB1c2hfYmFjayhzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7IGMuZW1wbGFjZV9iYWNrKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgZmlyc3QgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIHR5cGljYWwgJXN0YWNrIG9wZXJhdGlvbi4gIEl0IHNocmlua3MgdGhlICVzdGFjaworICAgICAgICogIGJ5IG9uZS4gIFRoZSB0aW1lIGNvbXBsZXhpdHkgb2YgdGhlIG9wZXJhdGlvbiBkZXBlbmRzIG9uIHRoZQorICAgICAgICogIHVuZGVybHlpbmcgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCBubyBkYXRhIGlzIHJldHVybmVkLCBhbmQgaWYgdGhlIGZpcnN0IGVsZW1lbnQncworICAgICAgICogIGRhdGEgaXMgbmVlZGVkLCBpdCBzaG91bGQgYmUgcmV0cmlldmVkIGJlZm9yZSBwb3AoKSBpcworICAgICAgICogIGNhbGxlZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcG9wKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKTsKKwljLnBvcF9iYWNrKCk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBzd2FwKHN0YWNrJiBfX3MpCisgICAgICBub2V4Y2VwdChub2V4Y2VwdChzd2FwKGMsIF9fcy5jKSkpCisgICAgICB7CisJdXNpbmcgc3RkOjpzd2FwOworCXN3YXAoYywgX19zLmMpOworICAgICAgfQorI2VuZGlmCisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgU3RhY2sgZXF1YWxpdHkgY29tcGFyaXNvbi4KKyAgICogIEBwYXJhbSAgX194ICBBICVzdGFjay4KKyAgICogIEBwYXJhbSAgX195ICBBICVzdGFjayBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIF9feC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIHRoZSBzaXplIGFuZCBlbGVtZW50cyBvZiB0aGUgc3RhY2tzIGFyZSBlcXVhbC4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBDb21wbGV4aXR5IGFuZCBzZW1hbnRpY3MKKyAgICogIGRlcGVuZCBvbiB0aGUgdW5kZXJseWluZyBzZXF1ZW5jZSB0eXBlLCBidXQgdGhlIGV4cGVjdGVkIHJ1bGVzCisgICAqICBhcmU6IHRoaXMgcmVsYXRpb24gaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBzZXF1ZW5jZXMsIGFuZAorICAgKiAgc3RhY2tzIGFyZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgaWYgdGhlaXIgc2VxdWVuY2VzIGNvbXBhcmUKKyAgICogIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN0YWNrPF9UcCwgX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5jID09IF9feS5jOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFN0YWNrIG9yZGVyaW5nIHJlbGF0aW9uLgorICAgKiAgQHBhcmFtICBfX3ggIEEgJXN0YWNrLgorICAgKiAgQHBhcmFtICBfX3kgIEEgJXN0YWNrIG9mIHRoZSBzYW1lIHR5cGUgYXMgQGEgeC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIEBhIHggaXMgbGV4aWNvZ3JhcGhpY2FsbHkgbGVzcyB0aGFuIEBhIF9feS4KKyAgICoKKyAgICogIFRoaXMgaXMgYW4gdG90YWwgb3JkZXJpbmcgcmVsYXRpb24uICBDb21wbGV4aXR5IGFuZCBzZW1hbnRpY3MKKyAgICogIGRlcGVuZCBvbiB0aGUgdW5kZXJseWluZyBzZXF1ZW5jZSB0eXBlLCBidXQgdGhlIGV4cGVjdGVkIHJ1bGVzCisgICAqICBhcmU6IHRoaXMgcmVsYXRpb24gaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBzZXF1ZW5jZXMsIHRoZQorICAgKiAgZWxlbWVudHMgbXVzdCBiZSBjb21wYXJhYmxlIHdpdGggQGMgPCwgYW5kCisgICAqICBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKCkgaXMgdXN1YWxseSB1c2VkIHRvIG1ha2UgdGhlCisgICAqICBkZXRlcm1pbmF0aW9uLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TZXE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gX194LmMgPCBfX3kuYzsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcj09CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHN0YWNrPF9UcCwgX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzdGFjazxfVHAsIF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCwgX1NlcT4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc3RhY2s8X1RwLCBfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsIF9TZXE+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1NlcT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoc3RhY2s8X1RwLCBfU2VxPiYgX194LCBzdGFjazxfVHAsIF9TZXE+JiBfX3kpCisgICAgbm9leGNlcHQobm9leGNlcHQoX194LnN3YXAoX195KSkpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfU2VxLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IHVzZXNfYWxsb2NhdG9yPHN0YWNrPF9UcCwgX1NlcT4sIF9BbGxvYz4KKyAgICA6IHB1YmxpYyB1c2VzX2FsbG9jYXRvcjxfU2VxLCBfQWxsb2M+Ojp0eXBlIHsgfTsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfU1RMX1NUQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfdGVtcGJ1Zi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF90ZW1wYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBlNzA1YwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfdGVtcGJ1Zi5oCkBAIC0wLDAgKzEsMjcxIEBACisvLyBUZW1wb3JhcnkgYnVmZmVyIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiaXRzL3N0bF90ZW1wYnVmLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttZW1vcnl9CisgKi8KKworI2lmbmRlZiBfU1RMX1RFTVBCVUZfSAorI2RlZmluZSBfU1RMX1RFTVBCVUZfSCAxCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2NvbnN0cnVjdC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYnJpZWYgQWxsb2NhdGVzIGEgdGVtcG9yYXJ5IGJ1ZmZlci4KKyAgICogIEBwYXJhbSAgX19sZW4gIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBvZiB0eXBlIFRwLgorICAgKiAgQHJldHVybiBTZWUgZnVsbCBkZXNjcmlwdGlvbi4KKyAgICoKKyAgICogIFJlaW52ZW50aW5nIHRoZSB3aGVlbCwgYnV0IHRoaXMgdGltZSB3aXRoIHByZXR0aWVyIHNwb2tlcyEKKyAgICoKKyAgICogIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gb2J0YWluIHN0b3JhZ2UgZm9yIEBjIF9fbGVuIGFkamFjZW50IFRwCisgICAqICBvYmplY3RzLiAgVGhlIG9iamVjdHMgdGhlbXNlbHZlcyBhcmUgbm90IGNvbnN0cnVjdGVkLCBvZiBjb3Vyc2UuCisgICAqICBBIHBhaXI8PiBpcyByZXR1cm5lZCBjb250YWluaW5nIDxlbT50aGUgYnVmZmVyIHMgYWRkcmVzcyBhbmQKKyAgICogIGNhcGFjaXR5IChpbiB0aGUgdW5pdHMgb2Ygc2l6ZW9mKF9UcCkpLCBvciBhIHBhaXIgb2YgMCB2YWx1ZXMgaWYKKyAgICogIG5vIHN0b3JhZ2UgY2FuIGJlIG9idGFpbmVkLjwvZW0+ICBOb3RlIHRoYXQgdGhlIGNhcGFjaXR5IG9idGFpbmVkCisgICAqICBtYXkgYmUgbGVzcyB0aGFuIHRoYXQgcmVxdWVzdGVkIGlmIHRoZSBtZW1vcnkgaXMgdW5hdmFpbGFibGU7CisgICAqICB5b3Ugc2hvdWxkIGNvbXBhcmUgbGVuIHdpdGggdGhlIC5zZWNvbmQgcmV0dXJuIHZhbHVlLgorICAgKgorICAgKiBQcm92aWRlcyB0aGUgbm90aHJvdyBleGNlcHRpb24gZ3VhcmFudGVlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHBhaXI8X1RwKiwgcHRyZGlmZl90PgorICAgIGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICBjb25zdCBwdHJkaWZmX3QgX19tYXggPQorCV9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxwdHJkaWZmX3Q+OjpfX21heCAvIHNpemVvZihfVHApOworICAgICAgaWYgKF9fbGVuID4gX19tYXgpCisJX19sZW4gPSBfX21heDsKKyAgICAgIAorICAgICAgd2hpbGUgKF9fbGVuID4gMCkgCisJeworCSAgX1RwKiBfX3RtcCA9IHN0YXRpY19jYXN0PF9UcCo+KDo6b3BlcmF0b3IgbmV3KF9fbGVuICogc2l6ZW9mKF9UcCksIAorCQkJCQkJCXN0ZDo6bm90aHJvdykpOworCSAgaWYgKF9fdG1wICE9IDApCisJICAgIHJldHVybiBzdGQ6OnBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOworCSAgX19sZW4gLz0gMjsKKwl9CisgICAgICByZXR1cm4gc3RkOjpwYWlyPF9UcCosIHB0cmRpZmZfdD4oc3RhdGljX2Nhc3Q8X1RwKj4oMCksIDApOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBUaGUgY29tcGFuaW9uIHRvIGdldF90ZW1wb3JhcnlfYnVmZmVyKCkuCisgICAqICBAcGFyYW0gIF9fcCAgQSBidWZmZXIgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgZ2V0X3RlbXBvcmFyeV9idWZmZXIuCisgICAqICBAcmV0dXJuICAgTm9uZS4KKyAgICoKKyAgICogIEZyZWVzIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBfX3AuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKKyAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCwgc3RkOjpub3Rocm93KTsgfQorCisKKyAgLyoqCisgICAqICBUaGlzIGNsYXNzIGlzIHVzZWQgaW4gdHdvIHBsYWNlczogc3RsX2FsZ28uaCBhbmQgZXh0L21lbW9yeSwKKyAgICogIHdoZXJlIGl0IGlzIHdyYXBwZWQgYXMgdGhlIHRlbXBvcmFyeV9idWZmZXIgY2xhc3MuICBTZWUKKyAgICogIHRlbXBvcmFyeV9idWZmZXIgZG9jcyBmb3IgbW9yZSBub3Rlcy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcgorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQpCisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHBvaW50ZXIgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgICBzaXplX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBzaXplX3R5cGUgIF9NX29yaWdpbmFsX2xlbjsKKyAgICAgIHNpemVfdHlwZSAgX01fbGVuOworICAgICAgcG9pbnRlciAgICBfTV9idWZmZXI7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gQXMgcGVyIFRhYmxlIG11bWJsZS4KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9sZW47IH0KKworICAgICAgLy8vIFJldHVybnMgdGhlIHNpemUgcmVxdWVzdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvcjsgbWF5IGJlID5zaXplKCkuCisgICAgICBzaXplX3R5cGUKKyAgICAgIHJlcXVlc3RlZF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQorCisgICAgICAvLy8gQXMgcGVyIFRhYmxlIG11bWJsZS4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBfTV9idWZmZXI7IH0KKworICAgICAgLy8vIEFzIHBlciBUYWJsZSBtdW1ibGUuCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQorCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIGEgc2l6ZSBzb21ld2hlcmUgYmV0d2VlbgorICAgICAgICogemVybyBhbmQgdGhlIHNpemUgb2YgdGhlIGdpdmVuIHJhbmdlLgorICAgICAgICovCisgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KTsKKworICAgICAgfl9UZW1wb3JhcnlfYnVmZmVyKCkKKyAgICAgIHsKKwlzdGQ6Ol9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKKwlzdGQ6OnJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9NX2J1ZmZlcik7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gRGlzYWJsZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKTsKKworICAgICAgdm9pZAorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJik7CisgICAgfTsKKworCisgIHRlbXBsYXRlPGJvb2w+CisgICAgc3RydWN0IF9fdW5pbml0aWFsaXplZF9jb25zdHJ1Y3RfYnVmX2Rpc3BhdGNoCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgIF9fdWNyKF9Qb2ludGVyIF9fZmlyc3QsIF9Qb2ludGVyIF9fbGFzdCwKKwkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fc2VlZCkKKyAgICAgICAgeworCSAgaWYoX19maXJzdCA9PSBfX2xhc3QpCisJICAgIHJldHVybjsKKworCSAgX1BvaW50ZXIgX19jdXIgPSBfX2ZpcnN0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIHN0ZDo6X0NvbnN0cnVjdChzdGQ6Ol9fYWRkcmVzc29mKCpfX2ZpcnN0KSwKKwkJCSAgICAgIF9HTElCQ1hYX01PVkUoKl9fc2VlZCkpOworCSAgICAgIF9Qb2ludGVyIF9fcHJldiA9IF9fY3VyOworCSAgICAgICsrX19jdXI7CisJICAgICAgZm9yKDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyLCArK19fcHJldikKKwkJc3RkOjpfQ29uc3RydWN0KHN0ZDo6X19hZGRyZXNzb2YoKl9fY3VyKSwKKwkJCQlfR0xJQkNYWF9NT1ZFKCpfX3ByZXYpKTsKKwkgICAgICAqX19zZWVkID0gX0dMSUJDWFhfTU9WRSgqX19wcmV2KTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBzdGQ6Ol9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX191bmluaXRpYWxpemVkX2NvbnN0cnVjdF9idWZfZGlzcGF0Y2g8dHJ1ZT4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX191Y3IoX1BvaW50ZXIsIF9Qb2ludGVyLCBfRm9yd2FyZEl0ZXJhdG9yKSB7IH0KKyAgICB9OworCisgIC8vIENvbnN0cnVjdHMgb2JqZWN0cyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LCBsYXN0KS4KKyAgLy8gTm90ZSB0aGF0IHdoaWxlIHRoZXNlIG5ldyBvYmplY3RzIHdpbGwgdGFrZSB2YWxpZCB2YWx1ZXMsCisgIC8vIHRoZWlyIGV4YWN0IHZhbHVlIGlzIG5vdCBkZWZpbmVkLiBJbiBwYXJ0aWN1bGFyIHRoZXkgbWF5CisgIC8vIGJlICdtb3ZlZCBmcm9tJy4KKyAgLy8KKyAgLy8gV2hpbGUgKl9fc2VlZCBtYXkgYmUgYWx0ZXJlZCBkdXJpbmcgdGhpcyBhbGdvcml0aG0sIGl0IHdpbGwgaGF2ZQorICAvLyB0aGUgc2FtZSB2YWx1ZSB3aGVuIHRoZSBhbGdvcml0aG0gZmluaXNoZXMsIHVubGVzcyBvbmUgb2YgdGhlCisgIC8vIGNvbnN0cnVjdGlvbnMgdGhyb3dzLgorICAvLworICAvLyBSZXF1aXJlbWVudHM6IF9Qb2ludGVyOjp2YWx1ZV90eXBlKF9UcCYmKSBpcyB2YWxpZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29uc3RydWN0X2J1ZihfUG9pbnRlciBfX2ZpcnN0LCBfUG9pbnRlciBfX2xhc3QsCisJCQkJICBfRm9yd2FyZEl0ZXJhdG9yIF9fc2VlZCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9Qb2ludGVyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvbnN0cnVjdF9idWZfZGlzcGF0Y2g8CisgICAgICAgIF9faGFzX3RyaXZpYWxfY29uc3RydWN0b3IoX1ZhbHVlVHlwZSk+OjoKKwkgIF9fdWNyKF9fZmlyc3QsIF9fbGFzdCwgX19zZWVkKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD46OgorICAgIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisgICAgOiBfTV9vcmlnaW5hbF9sZW4oc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpKSwKKyAgICAgIF9NX2xlbigwKSwgX01fYnVmZmVyKDApCisgICAgeworICAgICAgX190cnkKKwl7CisJICBzdGQ6OnBhaXI8cG9pbnRlciwgc2l6ZV90eXBlPiBfX3Aoc3RkOjpnZXRfdGVtcG9yYXJ5X2J1ZmZlcjwKKwkJCQkJICAgIHZhbHVlX3R5cGU+KF9NX29yaWdpbmFsX2xlbikpOworCSAgX01fYnVmZmVyID0gX19wLmZpcnN0OworCSAgX01fbGVuID0gX19wLnNlY29uZDsKKwkgIGlmIChfTV9idWZmZXIpCisJICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvbnN0cnVjdF9idWYoX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4sCisJCQkJCSAgICAgICBfX2ZpcnN0KTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6OnJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9NX2J1ZmZlcik7CisJICBfTV9idWZmZXIgPSAwOworCSAgX01fbGVuID0gMDsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9TVExfVEVNUEJVRl9IICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfdHJlZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF90cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiZjRkZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfdHJlZS5oCkBAIC0wLDAgKzEsMTg2NyBAQAorLy8gUkIgdHJlZSBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICovCisKKy8qKiBAZmlsZSBiaXRzL3N0bF90cmVlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttYXAsc2V0fQorICovCisKKyNpZm5kZWYgX1NUTF9UUkVFX0gKKyNkZWZpbmUgX1NUTF9UUkVFX0ggMQorCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8Yml0cy9hbGxvY190cmFpdHMuaD4KKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gUmVkLWJsYWNrIHRyZWUgY2xhc3MsIGRlc2lnbmVkIGZvciB1c2UgaW4gaW1wbGVtZW50aW5nIFNUTAorICAvLyBhc3NvY2lhdGl2ZSBjb250YWluZXJzIChzZXQsIG11bHRpc2V0LCBtYXAsIGFuZCBtdWx0aW1hcCkuIFRoZQorICAvLyBpbnNlcnRpb24gYW5kIGRlbGV0aW9uIGFsZ29yaXRobXMgYXJlIGJhc2VkIG9uIHRob3NlIGluIENvcm1lbiwKKyAgLy8gTGVpc2Vyc29uLCBhbmQgUml2ZXN0LCBJbnRyb2R1Y3Rpb24gdG8gQWxnb3JpdGhtcyAoTUlUIFByZXNzLAorICAvLyAxOTkwKSwgZXhjZXB0IHRoYXQKKyAgLy8KKyAgLy8gKDEpIHRoZSBoZWFkZXIgY2VsbCBpcyBtYWludGFpbmVkIHdpdGggbGlua3Mgbm90IG9ubHkgdG8gdGhlIHJvb3QKKyAgLy8gYnV0IGFsc28gdG8gdGhlIGxlZnRtb3N0IG5vZGUgb2YgdGhlIHRyZWUsIHRvIGVuYWJsZSBjb25zdGFudAorICAvLyB0aW1lIGJlZ2luKCksIGFuZCB0byB0aGUgcmlnaHRtb3N0IG5vZGUgb2YgdGhlIHRyZWUsIHRvIGVuYWJsZQorICAvLyBsaW5lYXIgdGltZSBwZXJmb3JtYW5jZSB3aGVuIHVzZWQgd2l0aCB0aGUgZ2VuZXJpYyBzZXQgYWxnb3JpdGhtcworICAvLyAoc2V0X3VuaW9uLCBldGMuKQorICAvLyAKKyAgLy8gKDIpIHdoZW4gYSBub2RlIGJlaW5nIGRlbGV0ZWQgaGFzIHR3byBjaGlsZHJlbiBpdHMgc3VjY2Vzc29yIG5vZGUKKyAgLy8gaXMgcmVsaW5rZWQgaW50byBpdHMgcGxhY2UsIHJhdGhlciB0aGFuIGNvcGllZCwgc28gdGhhdCB0aGUgb25seQorICAvLyBpdGVyYXRvcnMgaW52YWxpZGF0ZWQgYXJlIHRob3NlIHJlZmVycmluZyB0byB0aGUgZGVsZXRlZCBub2RlLgorCisgIGVudW0gX1JiX3RyZWVfY29sb3IgeyBfU19yZWQgPSBmYWxzZSwgX1NfYmxhY2sgPSB0cnVlIH07CisKKyAgc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQorICB7CisgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKKyAgICB0eXBlZGVmIGNvbnN0IF9SYl90cmVlX25vZGVfYmFzZSogX0NvbnN0X0Jhc2VfcHRyOworCisgICAgX1JiX3RyZWVfY29sb3IJX01fY29sb3I7CisgICAgX0Jhc2VfcHRyCQlfTV9wYXJlbnQ7CisgICAgX0Jhc2VfcHRyCQlfTV9sZWZ0OworICAgIF9CYXNlX3B0cgkJX01fcmlnaHQ7CisKKyAgICBzdGF0aWMgX0Jhc2VfcHRyCisgICAgX1NfbWluaW11bShfQmFzZV9wdHIgX194KQorICAgIHsKKyAgICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9sZWZ0OworICAgICAgcmV0dXJuIF9feDsKKyAgICB9CisKKyAgICBzdGF0aWMgX0NvbnN0X0Jhc2VfcHRyCisgICAgX1NfbWluaW11bShfQ29uc3RfQmFzZV9wdHIgX194KQorICAgIHsKKyAgICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9sZWZ0OworICAgICAgcmV0dXJuIF9feDsKKyAgICB9CisKKyAgICBzdGF0aWMgX0Jhc2VfcHRyCisgICAgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQorICAgIHsKKyAgICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CisgICAgICByZXR1cm4gX194OworICAgIH0KKworICAgIHN0YXRpYyBfQ29uc3RfQmFzZV9wdHIKKyAgICBfU19tYXhpbXVtKF9Db25zdF9CYXNlX3B0ciBfX3gpCisgICAgeworICAgICAgd2hpbGUgKF9feC0+X01fcmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdodDsKKyAgICAgIHJldHVybiBfX3g7CisgICAgfQorICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CisgICAgc3RydWN0IF9SYl90cmVlX25vZGUgOiBwdWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCisgICAgeworICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOworICAgICAgX1ZhbCBfTV92YWx1ZV9maWVsZDsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBfUmJfdHJlZV9ub2RlKF9BcmdzJiYuLi4gX19hcmdzKQorCTogX1JiX3RyZWVfbm9kZV9iYXNlKCksCisJICBfTV92YWx1ZV9maWVsZChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pIHsgfQorI2VuZGlmCisgICAgfTsKKworICBfR0xJQkNYWF9QVVJFIF9SYl90cmVlX25vZGVfYmFzZSoKKyAgX1JiX3RyZWVfaW5jcmVtZW50KF9SYl90cmVlX25vZGVfYmFzZSogX194KSB0aHJvdyAoKTsKKworICBfR0xJQkNYWF9QVVJFIGNvbnN0IF9SYl90cmVlX25vZGVfYmFzZSoKKyAgX1JiX3RyZWVfaW5jcmVtZW50KGNvbnN0IF9SYl90cmVlX25vZGVfYmFzZSogX194KSB0aHJvdyAoKTsKKworICBfR0xJQkNYWF9QVVJFIF9SYl90cmVlX25vZGVfYmFzZSoKKyAgX1JiX3RyZWVfZGVjcmVtZW50KF9SYl90cmVlX25vZGVfYmFzZSogX194KSB0aHJvdyAoKTsKKworICBfR0xJQkNYWF9QVVJFIGNvbnN0IF9SYl90cmVlX25vZGVfYmFzZSoKKyAgX1JiX3RyZWVfZGVjcmVtZW50KGNvbnN0IF9SYl90cmVlX25vZGVfYmFzZSogX194KSB0aHJvdyAoKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SYl90cmVlX2l0ZXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVHA+ICAgICAgICBfU2VsZjsKKyAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpfQmFzZV9wdHIgX0Jhc2VfcHRyOworICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9UcD4qICAgICAgICAgICBfTGlua190eXBlOworCisgICAgICBfUmJfdHJlZV9pdGVyYXRvcigpCisgICAgICA6IF9NX25vZGUoKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KQorICAgICAgOiBfTV9ub2RlKF9feCkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2Yoc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4KKwkJCQkoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkKTsgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9NX25vZGUgPSBfUmJfdHJlZV9pbmNyZW1lbnQoX01fbm9kZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX1JiX3RyZWVfaW5jcmVtZW50KF9NX25vZGUpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgX1NlbGYmCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlfTV9ub2RlID0gX1JiX3RyZWVfZGVjcmVtZW50KF9NX25vZGUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJX01fbm9kZSA9IF9SYl90cmVlX2RlY3JlbWVudChfTV9ub2RlKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQorCisgICAgICBfQmFzZV9wdHIgX01fbm9kZTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SYl90cmVlX2NvbnN0X2l0ZXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1RwPiBpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIF9SYl90cmVlX2NvbnN0X2l0ZXJhdG9yPF9UcD4gICAgICAgIF9TZWxmOworICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9Db25zdF9CYXNlX3B0ciBfQmFzZV9wdHI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9SYl90cmVlX25vZGU8X1RwPiogICAgICAgICAgIF9MaW5rX3R5cGU7CisKKyAgICAgIF9SYl90cmVlX2NvbnN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX01fbm9kZSgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX1JiX3RyZWVfY29uc3RfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpCisgICAgICA6IF9NX25vZGUoX194KSB7IH0KKworICAgICAgX1JiX3RyZWVfY29uc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpCisgICAgICA6IF9NX25vZGUoX19pdC5fTV9ub2RlKSB7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2NvbnN0X2Nhc3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3Ioc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3I6Ol9MaW5rX3R5cGU+CisJCQkoY29uc3RfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcjo6X0Jhc2VfcHRyPihfTV9ub2RlKSkpOyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2Yoc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4KKwkJCQkoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkKTsgfQorCisgICAgICBfU2VsZiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9NX25vZGUgPSBfUmJfdHJlZV9pbmNyZW1lbnQoX01fbm9kZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2VsZgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX1NlbGYgX190bXAgPSAqdGhpczsKKwlfTV9ub2RlID0gX1JiX3RyZWVfaW5jcmVtZW50KF9NX25vZGUpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgX1NlbGYmCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlfTV9ub2RlID0gX1JiX3RyZWVfZGVjcmVtZW50KF9NX25vZGUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJX01fbm9kZSA9IF9SYl90cmVlX2RlY3JlbWVudChfTV9ub2RlKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfU2VsZiYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQorCisgICAgICBfQmFzZV9wdHIgX01fbm9kZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWw+JiBfX3gsCisgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9jb25zdF9pdGVyYXRvcjxfVmFsPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbD4mIF9feCwKKyAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2NvbnN0X2l0ZXJhdG9yPF9WYWw+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KKworICB2b2lkCisgIF9SYl90cmVlX2luc2VydF9hbmRfcmViYWxhbmNlKGNvbnN0IGJvb2wgX19pbnNlcnRfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UmIF9faGVhZGVyKSB0aHJvdyAoKTsKKworICBfUmJfdHJlZV9ub2RlX2Jhc2UqCisgIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBjb25zdCBfX3osCisJCQkgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlJiBfX2hlYWRlcikgdGhyb3cgKCk7CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsPiA+CisgICAgY2xhc3MgX1JiX3RyZWUKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9SYl90cmVlX25vZGU8X1ZhbD4gPjo6b3RoZXIKKyAgICAgICAgICAgICAgX05vZGVfYWxsb2NhdG9yOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIAkJX0Jhc2VfcHRyOworICAgICAgdHlwZWRlZiBjb25zdCBfUmJfdHJlZV9ub2RlX2Jhc2UqIAlfQ29uc3RfQmFzZV9wdHI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9LZXkgCQkJCWtleV90eXBlOworICAgICAgdHlwZWRlZiBfVmFsIAkJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiAJCQlwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiAJCWNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIAkJCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgCQljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIAkJX0xpbmtfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1JiX3RyZWVfbm9kZTxfVmFsPioJX0NvbnN0X0xpbmtfdHlwZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90IAkJCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAJCQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAJCQkJYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9Ob2RlX2FsbG9jYXRvciYKKyAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X05vZGVfYWxsb2NhdG9yKj4oJnRoaXMtPl9NX2ltcGwpOyB9CisgICAgICAKKyAgICAgIGNvbnN0IF9Ob2RlX2FsbG9jYXRvciYKKyAgICAgIF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX05vZGVfYWxsb2NhdG9yKj4oJnRoaXMtPl9NX2ltcGwpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgX0xpbmtfdHlwZQorICAgICAgX01fZ2V0X25vZGUoKQorICAgICAgeyByZXR1cm4gX01faW1wbC5fTm9kZV9hbGxvY2F0b3I6OmFsbG9jYXRlKDEpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3B1dF9ub2RlKF9MaW5rX3R5cGUgX19wKQorICAgICAgeyBfTV9pbXBsLl9Ob2RlX2FsbG9jYXRvcjo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgICAgIF9MaW5rX3R5cGUKKyAgICAgIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKKwlfX3RyeQorCSAgeyBnZXRfYWxsb2NhdG9yKCkuY29uc3RydWN0CisJICAgICAgKHN0ZDo6X19hZGRyZXNzb2YoX190bXAtPl9NX3ZhbHVlX2ZpZWxkKSwgX194KTsgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfTV9wdXRfbm9kZShfX3RtcCk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQorICAgICAgeworCWdldF9hbGxvY2F0b3IoKS5kZXN0cm95KHN0ZDo6X19hZGRyZXNzb2YoX19wLT5fTV92YWx1ZV9maWVsZCkpOworCV9NX3B1dF9ub2RlKF9fcCk7CisgICAgICB9CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIF9MaW5rX3R5cGUKKyAgICAgICAgX01fY3JlYXRlX25vZGUoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2RlKCk7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgYWxsb2NhdG9yX3RyYWl0czxfTm9kZV9hbGxvY2F0b3I+OjoKKwkJY29uc3RydWN0KF9NX2dldF9Ob2RlX2FsbG9jYXRvcigpLCBfX3RtcCwKKwkJCSAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBfTV9wdXRfbm9kZShfX3RtcCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIHJldHVybiBfX3RtcDsKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2Rlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKKyAgICAgIHsKKwlfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKS5kZXN0cm95KF9fcCk7CisJX01fcHV0X25vZGUoX19wKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBfTGlua190eXBlCisgICAgICBfTV9jbG9uZV9ub2RlKF9Db25zdF9MaW5rX3R5cGUgX194KQorICAgICAgeworCV9MaW5rX3R5cGUgX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKKwlfX3RtcC0+X01fY29sb3IgPSBfX3gtPl9NX2NvbG9yOworCV9fdG1wLT5fTV9sZWZ0ID0gMDsKKwlfX3RtcC0+X01fcmlnaHQgPSAwOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXlfY29tcGFyZSwgCisJICAgICAgIGJvb2wgX0lzX3BvZF9jb21wYXJhdG9yID0gX19pc19wb2QoX0tleV9jb21wYXJlKT4KKyAgICAgICAgc3RydWN0IF9SYl90cmVlX2ltcGwgOiBwdWJsaWMgX05vZGVfYWxsb2NhdG9yCisgICAgICAgIHsKKwkgIF9LZXlfY29tcGFyZQkJX01fa2V5X2NvbXBhcmU7CisJICBfUmJfdHJlZV9ub2RlX2Jhc2UgCV9NX2hlYWRlcjsKKwkgIHNpemVfdHlwZSAJCV9NX25vZGVfY291bnQ7IC8vIEtlZXBzIHRyYWNrIG9mIHNpemUgb2YgdHJlZS4KKworCSAgX1JiX3RyZWVfaW1wbCgpCisJICA6IF9Ob2RlX2FsbG9jYXRvcigpLCBfTV9rZXlfY29tcGFyZSgpLCBfTV9oZWFkZXIoKSwKKwkgICAgX01fbm9kZV9jb3VudCgwKQorCSAgeyBfTV9pbml0aWFsaXplKCk7IH0KKworCSAgX1JiX3RyZWVfaW1wbChjb25zdCBfS2V5X2NvbXBhcmUmIF9fY29tcCwgY29uc3QgX05vZGVfYWxsb2NhdG9yJiBfX2EpCisJICA6IF9Ob2RlX2FsbG9jYXRvcihfX2EpLCBfTV9rZXlfY29tcGFyZShfX2NvbXApLCBfTV9oZWFkZXIoKSwKKwkgICAgX01fbm9kZV9jb3VudCgwKQorCSAgeyBfTV9pbml0aWFsaXplKCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKwkgIF9SYl90cmVlX2ltcGwoY29uc3QgX0tleV9jb21wYXJlJiBfX2NvbXAsIF9Ob2RlX2FsbG9jYXRvciYmIF9fYSkKKwkgIDogX05vZGVfYWxsb2NhdG9yKHN0ZDo6bW92ZShfX2EpKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKSwKKwkgICAgX01faGVhZGVyKCksIF9NX25vZGVfY291bnQoMCkKKwkgIHsgX01faW5pdGlhbGl6ZSgpOyB9CisjZW5kaWYKKworCXByaXZhdGU6CisJICB2b2lkCisJICBfTV9pbml0aWFsaXplKCkKKwkgIHsKKwkgICAgdGhpcy0+X01faGVhZGVyLl9NX2NvbG9yID0gX1NfcmVkOworCSAgICB0aGlzLT5fTV9oZWFkZXIuX01fcGFyZW50ID0gMDsKKwkgICAgdGhpcy0+X01faGVhZGVyLl9NX2xlZnQgPSAmdGhpcy0+X01faGVhZGVyOworCSAgICB0aGlzLT5fTV9oZWFkZXIuX01fcmlnaHQgPSAmdGhpcy0+X01faGVhZGVyOworCSAgfQkgICAgCisJfTsKKworICAgICAgX1JiX3RyZWVfaW1wbDxfQ29tcGFyZT4gX01faW1wbDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9CYXNlX3B0ciYKKyAgICAgIF9NX3Jvb3QoKQorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fcGFyZW50OyB9CisKKyAgICAgIF9Db25zdF9CYXNlX3B0cgorICAgICAgX01fcm9vdCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlci5fTV9wYXJlbnQ7IH0KKworICAgICAgX0Jhc2VfcHRyJgorICAgICAgX01fbGVmdG1vc3QoKQorICAgICAgeyByZXR1cm4gdGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fbGVmdDsgfQorCisgICAgICBfQ29uc3RfQmFzZV9wdHIKKyAgICAgIF9NX2xlZnRtb3N0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX2xlZnQ7IH0KKworICAgICAgX0Jhc2VfcHRyJgorICAgICAgX01fcmlnaHRtb3N0KCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX3JpZ2h0OyB9CisKKyAgICAgIF9Db25zdF9CYXNlX3B0cgorICAgICAgX01fcmlnaHRtb3N0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX3JpZ2h0OyB9CisKKyAgICAgIF9MaW5rX3R5cGUKKyAgICAgIF9NX2JlZ2luKCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX3BhcmVudCk7IH0KKworICAgICAgX0NvbnN0X0xpbmtfdHlwZQorICAgICAgX01fYmVnaW4oKSBjb25zdAorICAgICAgeworCXJldHVybiBzdGF0aWNfY2FzdDxfQ29uc3RfTGlua190eXBlPgorCSAgKHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX3BhcmVudCk7CisgICAgICB9CisKKyAgICAgIF9MaW5rX3R5cGUKKyAgICAgIF9NX2VuZCgpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfTGlua190eXBlPigmdGhpcy0+X01faW1wbC5fTV9oZWFkZXIpOyB9CisKKyAgICAgIF9Db25zdF9MaW5rX3R5cGUKKyAgICAgIF9NX2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfQ29uc3RfTGlua190eXBlPigmdGhpcy0+X01faW1wbC5fTV9oZWFkZXIpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdF9yZWZlcmVuY2UKKyAgICAgIF9TX3ZhbHVlKF9Db25zdF9MaW5rX3R5cGUgX194KQorICAgICAgeyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgX0tleSYKKyAgICAgIF9TX2tleShfQ29uc3RfTGlua190eXBlIF9feCkKKyAgICAgIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KKworICAgICAgc3RhdGljIF9MaW5rX3R5cGUKKyAgICAgIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9feC0+X01fbGVmdCk7IH0KKworICAgICAgc3RhdGljIF9Db25zdF9MaW5rX3R5cGUKKyAgICAgIF9TX2xlZnQoX0NvbnN0X0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Db25zdF9MaW5rX3R5cGU+KF9feC0+X01fbGVmdCk7IH0KKworICAgICAgc3RhdGljIF9MaW5rX3R5cGUKKyAgICAgIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfTGlua190eXBlPihfX3gtPl9NX3JpZ2h0KTsgfQorCisgICAgICBzdGF0aWMgX0NvbnN0X0xpbmtfdHlwZQorICAgICAgX1NfcmlnaHQoX0NvbnN0X0Jhc2VfcHRyIF9feCkKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9Db25zdF9MaW5rX3R5cGU+KF9feC0+X01fcmlnaHQpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdF9yZWZlcmVuY2UKKyAgICAgIF9TX3ZhbHVlKF9Db25zdF9CYXNlX3B0ciBfX3gpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfQ29uc3RfTGlua190eXBlPihfX3gpLT5fTV92YWx1ZV9maWVsZDsgfQorCisgICAgICBzdGF0aWMgY29uc3QgX0tleSYKKyAgICAgIF9TX2tleShfQ29uc3RfQmFzZV9wdHIgX194KQorICAgICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQorCisgICAgICBzdGF0aWMgX0Jhc2VfcHRyCisgICAgICBfU19taW5pbXVtKF9CYXNlX3B0ciBfX3gpCisgICAgICB7IHJldHVybiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQorCisgICAgICBzdGF0aWMgX0NvbnN0X0Jhc2VfcHRyCisgICAgICBfU19taW5pbXVtKF9Db25zdF9CYXNlX3B0ciBfX3gpCisgICAgICB7IHJldHVybiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQorCisgICAgICBzdGF0aWMgX0Jhc2VfcHRyCisgICAgICBfU19tYXhpbXVtKF9CYXNlX3B0ciBfX3gpCisgICAgICB7IHJldHVybiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQorCisgICAgICBzdGF0aWMgX0NvbnN0X0Jhc2VfcHRyCisgICAgICBfU19tYXhpbXVtKF9Db25zdF9CYXNlX3B0ciBfX3gpCisgICAgICB7IHJldHVybiBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlPiAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX1JiX3RyZWVfY29uc3RfaXRlcmF0b3I8dmFsdWVfdHlwZT4gY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICBwcml2YXRlOgorICAgICAgcGFpcjxfQmFzZV9wdHIsIF9CYXNlX3B0cj4KKyAgICAgIF9NX2dldF9pbnNlcnRfdW5pcXVlX3Bvcyhjb25zdCBrZXlfdHlwZSYgX19rKTsKKworICAgICAgcGFpcjxfQmFzZV9wdHIsIF9CYXNlX3B0cj4KKyAgICAgIF9NX2dldF9pbnNlcnRfZXF1YWxfcG9zKGNvbnN0IGtleV90eXBlJiBfX2spOworCisgICAgICBwYWlyPF9CYXNlX3B0ciwgX0Jhc2VfcHRyPgorICAgICAgX01fZ2V0X2luc2VydF9oaW50X3VuaXF1ZV9wb3MoY29uc3RfaXRlcmF0b3IgX19wb3MsCisJCQkJICAgIGNvbnN0IGtleV90eXBlJiBfX2spOworCisgICAgICBwYWlyPF9CYXNlX3B0ciwgX0Jhc2VfcHRyPgorICAgICAgX01fZ2V0X2luc2VydF9oaW50X2VxdWFsX3Bvcyhjb25zdF9pdGVyYXRvciBfX3BvcywKKwkJCQkgICBjb25zdCBrZXlfdHlwZSYgX19rKTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIF9NX2luc2VydF8oX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgX0FyZyYmIF9fdik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfbm9kZShfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX195LCBfTGlua190eXBlIF9feik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIF9NX2luc2VydF9sb3dlcihfQmFzZV9wdHIgX195LCBfQXJnJiYgX192KTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgX01faW5zZXJ0X2VxdWFsX2xvd2VyKF9BcmcmJiBfX3gpOworCisgICAgICBpdGVyYXRvcgorICAgICAgX01faW5zZXJ0X2xvd2VyX25vZGUoX0Jhc2VfcHRyIF9fcCwgX0xpbmtfdHlwZSBfX3opOworCisgICAgICBpdGVyYXRvcgorICAgICAgX01faW5zZXJ0X2VxdWFsX2xvd2VyX25vZGUoX0xpbmtfdHlwZSBfX3opOworI2Vsc2UKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfKF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksCisJCSBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMzMuIEluc2VydGlvbiBoaW50cyBpbiBhc3NvY2lhdGl2ZSBjb250YWluZXJzLgorICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2luc2VydF9sb3dlcihfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOworCisgICAgICBpdGVyYXRvcgorICAgICAgX01faW5zZXJ0X2VxdWFsX2xvd2VyKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisjZW5kaWYKKworICAgICAgX0xpbmtfdHlwZQorICAgICAgX01fY29weShfQ29uc3RfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOworCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZShfTGlua190eXBlIF9feCk7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9sb3dlcl9ib3VuZChfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ksCisJCSAgICAgY29uc3QgX0tleSYgX19rKTsKKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIF9NX2xvd2VyX2JvdW5kKF9Db25zdF9MaW5rX3R5cGUgX194LCBfQ29uc3RfTGlua190eXBlIF9feSwKKwkJICAgICBjb25zdCBfS2V5JiBfX2spIGNvbnN0OworCisgICAgICBpdGVyYXRvcgorICAgICAgX01fdXBwZXJfYm91bmQoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX195LAorCQkgICAgIGNvbnN0IF9LZXkmIF9fayk7CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBfTV91cHBlcl9ib3VuZChfQ29uc3RfTGlua190eXBlIF9feCwgX0NvbnN0X0xpbmtfdHlwZSBfX3ksCisJCSAgICAgY29uc3QgX0tleSYgX19rKSBjb25zdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uCisgICAgICBfUmJfdHJlZSgpIHsgfQorCisgICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faW1wbChfX2NvbXAsIF9Ob2RlX2FsbG9jYXRvcihfX2EpKSB7IH0KKworICAgICAgX1JiX3RyZWUoY29uc3QgX1JiX3RyZWUmIF9feCkKKyAgICAgIDogX01faW1wbChfX3guX01faW1wbC5fTV9rZXlfY29tcGFyZSwgX194Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKQorICAgICAgeworCWlmIChfX3guX01fcm9vdCgpICE9IDApCisJICB7CisJICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX2JlZ2luKCksIF9NX2VuZCgpKTsKKwkgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKKwkgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CisJICAgIF9NX2ltcGwuX01fbm9kZV9jb3VudCA9IF9feC5fTV9pbXBsLl9NX25vZGVfY291bnQ7CisJICB9CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBfUmJfdHJlZShfUmJfdHJlZSYmIF9feCk7CisjZW5kaWYKKworICAgICAgfl9SYl90cmVlKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgX01fZXJhc2UoX01fYmVnaW4oKSk7IH0KKworICAgICAgX1JiX3RyZWUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWUmIF9feCk7CisKKyAgICAgIC8vIEFjY2Vzc29ycy4KKyAgICAgIF9Db21wYXJlCisgICAgICBrZXlfY29tcCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9pbXBsLl9NX2tleV9jb21wYXJlOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IAorCXJldHVybiBpdGVyYXRvcihzdGF0aWNfY2FzdDxfTGlua190eXBlPgorCQkJKHRoaXMtPl9NX2ltcGwuX01faGVhZGVyLl9NX2xlZnQpKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgCisJcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHN0YXRpY19jYXN0PF9Db25zdF9MaW5rX3R5cGU+CisJCQkgICAgICAodGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fbGVmdCkpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KCZ0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcikpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyAKKwlyZXR1cm4gY29uc3RfaXRlcmF0b3Ioc3RhdGljX2Nhc3Q8X0NvbnN0X0xpbmtfdHlwZT4KKwkJCSAgICAgICgmdGhpcy0+X01faW1wbC5fTV9oZWFkZXIpKTsKKyAgICAgIH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX2ltcGwuX01fbm9kZV9jb3VudCA9PSAwOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUIAorICAgICAgeyByZXR1cm4gX01faW1wbC5fTV9ub2RlX2NvdW50OyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fZ2V0X05vZGVfYWxsb2NhdG9yKCkubWF4X3NpemUoKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKF9SYl90cmVlJiBfX3QpOyAgICAgIAorCisgICAgICAvLyBJbnNlcnQvZXJhc2UuCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgICAgX01faW5zZXJ0X3VuaXF1ZShfQXJnJiYgX194KTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgX01faW5zZXJ0X2VxdWFsKF9BcmcmJiBfX3gpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBfTV9pbnNlcnRfdW5pcXVlXyhjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJnJiYgX194KTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgX01faW5zZXJ0X2VxdWFsXyhjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJnJiYgX194KTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJcGFpcjxpdGVyYXRvciwgYm9vbD4KKwlfTV9lbXBsYWNlX3VuaXF1ZShfQXJncyYmLi4uIF9fYXJncyk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJX01fZW1wbGFjZV9lcXVhbChfQXJncyYmLi4uIF9fYXJncyk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJX01fZW1wbGFjZV9oaW50X3VuaXF1ZShjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCV9NX2VtcGxhY2VfaGludF9lcXVhbChjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpOworI2Vsc2UKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBfTV9pbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2luc2VydF91bmlxdWVfKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnRfZXF1YWxfKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5zZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZV9hdXgoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbik7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2VyYXNlX2F1eChjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpOworCisgICAgcHVibGljOgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDEzMC4gQXNzb2NpYXRpdmUgZXJhc2Ugc2hvdWxkIHJldHVybiBhbiBpdGVyYXRvci4KKyAgICAgIF9HTElCQ1hYX0FCSV9UQUdfQ1hYMTEKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCWNvbnN0X2l0ZXJhdG9yIF9fcmVzdWx0ID0gX19wb3NpdGlvbjsKKwkrK19fcmVzdWx0OworCV9NX2VyYXNlX2F1eChfX3Bvc2l0aW9uKTsKKwlyZXR1cm4gX19yZXN1bHQuX01fY29uc3RfY2FzdCgpOworICAgICAgfQorCisgICAgICAvLyBMV0cgMjA1OS4KKyAgICAgIF9HTElCQ1hYX0FCSV9UQUdfQ1hYMTEKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCWl0ZXJhdG9yIF9fcmVzdWx0ID0gX19wb3NpdGlvbjsKKwkrK19fcmVzdWx0OworCV9NX2VyYXNlX2F1eChfX3Bvc2l0aW9uKTsKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgX01fZXJhc2VfYXV4KF9fcG9zaXRpb24pOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IF9NX2VyYXNlX2F1eChfX3Bvc2l0aW9uKTsgfQorI2VuZGlmCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMTMwLiBBc3NvY2lhdGl2ZSBlcmFzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLgorICAgICAgX0dMSUJDWFhfQUJJX1RBR19DWFgxMQorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfTV9lcmFzZV9hdXgoX19maXJzdCwgX19sYXN0KTsKKwlyZXR1cm4gX19sYXN0Ll9NX2NvbnN0X2Nhc3QoKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9NX2VyYXNlX2F1eChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgX01fZXJhc2VfYXV4KF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbmRpZgorICAgICAgdm9pZAorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBlKiBfX2xhc3QpOworCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisgICAgICAgIF9NX2VyYXNlKF9NX2JlZ2luKCkpOworICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01fZW5kKCk7CisgICAgICAgIF9NX3Jvb3QoKSA9IDA7CisgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01fZW5kKCk7CisgICAgICAgIF9NX2ltcGwuX01fbm9kZV9jb3VudCA9IDA7CisgICAgICB9CisKKyAgICAgIC8vIFNldCBvcGVyYXRpb25zLgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fayk7CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0OworCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICAgIHsgcmV0dXJuIF9NX2xvd2VyX2JvdW5kKF9NX2JlZ2luKCksIF9NX2VuZCgpLCBfX2spOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbG93ZXJfYm91bmQoX01fYmVnaW4oKSwgX01fZW5kKCksIF9fayk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgICB7IHJldHVybiBfTV91cHBlcl9ib3VuZChfTV9iZWdpbigpLCBfTV9lbmQoKSwgX19rKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3VwcGVyX2JvdW5kKF9NX2JlZ2luKCksIF9NX2VuZCgpLCBfX2spOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fayk7CisKKyAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisKKyAgICAgIC8vIERlYnVnZ2luZy4KKyAgICAgIGJvb2wKKyAgICAgIF9fcmJfdmVyaWZ5KCkgY29uc3Q7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsKKyAgICAgIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkKKwkgICAgICYmIHN0ZDo6ZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7CisgICAgICByZXR1cm4gc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLCAKKwkJCQkJICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCwKKwkgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX1JiX3RyZWUoX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JiYgX194KQorICAgIDogX01faW1wbChfX3guX01faW1wbC5fTV9rZXlfY29tcGFyZSwKKwkgICAgICBzdGQ6Om1vdmUoX194Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKSkKKyAgICB7CisgICAgICBpZiAoX194Ll9NX3Jvb3QoKSAhPSAwKQorCXsKKwkgIF9NX3Jvb3QoKSA9IF9feC5fTV9yb290KCk7CisJICBfTV9sZWZ0bW9zdCgpID0gX194Ll9NX2xlZnRtb3N0KCk7CisJICBfTV9yaWdodG1vc3QoKSA9IF9feC5fTV9yaWdodG1vc3QoKTsKKwkgIF9NX3Jvb3QoKS0+X01fcGFyZW50ID0gX01fZW5kKCk7CisKKwkgIF9feC5fTV9yb290KCkgPSAwOworCSAgX194Ll9NX2xlZnRtb3N0KCkgPSBfX3guX01fZW5kKCk7CisJICBfX3guX01fcmlnaHRtb3N0KCkgPSBfX3guX01fZW5kKCk7CisKKwkgIHRoaXMtPl9NX2ltcGwuX01fbm9kZV9jb3VudCA9IF9feC5fTV9pbXBsLl9NX25vZGVfY291bnQ7CisJICBfX3guX01faW1wbC5fTV9ub2RlX2NvdW50ID0gMDsKKwl9CisgICAgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+JgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQorICAgIHsKKyAgICAgIGlmICh0aGlzICE9ICZfX3gpCisJeworCSAgLy8gTm90ZSB0aGF0IF9LZXkgbWF5IGJlIGEgY29uc3RhbnQgdHlwZS4KKwkgIGNsZWFyKCk7CisJICBfTV9pbXBsLl9NX2tleV9jb21wYXJlID0gX194Ll9NX2ltcGwuX01fa2V5X2NvbXBhcmU7CisJICBpZiAoX194Ll9NX3Jvb3QoKSAhPSAwKQorCSAgICB7CisJICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fYmVnaW4oKSwgX01fZW5kKCkpOworCSAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CisJICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CisJICAgICAgX01faW1wbC5fTV9ub2RlX2NvdW50ID0gX194Ll9NX2ltcGwuX01fbm9kZV9jb3VudDsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisjZW5kaWYKKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgX01faW5zZXJ0XyhfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX19wLCBfQXJnJiYgX192KQorI2Vsc2UKKyAgICBfTV9pbnNlcnRfKF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3AsIGNvbnN0IF9WYWwmIF9fdikKKyNlbmRpZgorICAgIHsKKyAgICAgIGJvb2wgX19pbnNlcnRfbGVmdCA9IChfX3ggIT0gMCB8fCBfX3AgPT0gX01fZW5kKCkKKwkJCSAgICB8fCBfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwKKwkJCQkJCSAgICAgIF9TX2tleShfX3ApKSk7CisKKyAgICAgIF9MaW5rX3R5cGUgX196ID0gX01fY3JlYXRlX25vZGUoX0dMSUJDWFhfRk9SV0FSRChfQXJnLCBfX3YpKTsKKworICAgICAgX1JiX3RyZWVfaW5zZXJ0X2FuZF9yZWJhbGFuY2UoX19pbnNlcnRfbGVmdCwgX196LCBfX3AsCisJCQkJICAgIHRoaXMtPl9NX2ltcGwuX01faGVhZGVyKTsKKyAgICAgICsrX01faW1wbC5fTV9ub2RlX2NvdW50OworICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgorI2VuZGlmCisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIF9NX2luc2VydF9sb3dlcihfQmFzZV9wdHIgX19wLCBfQXJnJiYgX192KQorI2Vsc2UKKyAgICBfTV9pbnNlcnRfbG93ZXIoX0Jhc2VfcHRyIF9fcCwgY29uc3QgX1ZhbCYgX192KQorI2VuZGlmCisgICAgeworICAgICAgYm9vbCBfX2luc2VydF9sZWZ0ID0gKF9fcCA9PSBfTV9lbmQoKQorCQkJICAgIHx8ICFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleShfX3ApLAorCQkJCQkJICAgICAgIF9LZXlPZlZhbHVlKCkoX192KSkpOworCisgICAgICBfTGlua190eXBlIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9HTElCQ1hYX0ZPUldBUkQoX0FyZywgX192KSk7CisKKyAgICAgIF9SYl90cmVlX2luc2VydF9hbmRfcmViYWxhbmNlKF9faW5zZXJ0X2xlZnQsIF9feiwgX19wLAorCQkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcik7CisgICAgICArK19NX2ltcGwuX01fbm9kZV9jb3VudDsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyNlbmRpZgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBfTV9pbnNlcnRfZXF1YWxfbG93ZXIoX0FyZyYmIF9fdikKKyNlbHNlCisgICAgX01faW5zZXJ0X2VxdWFsX2xvd2VyKGNvbnN0IF9WYWwmIF9fdikKKyNlbmRpZgorICAgIHsKKyAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fYmVnaW4oKTsKKyAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fZW5kKCk7CisgICAgICB3aGlsZSAoX194ICE9IDApCisJeworCSAgX195ID0gX194OworCSAgX194ID0gIV9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9LZXlPZlZhbHVlKCkoX192KSkgPworCSAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKKwl9CisgICAgICByZXR1cm4gX01faW5zZXJ0X2xvd2VyKF9feSwgX0dMSUJDWFhfRk9SV0FSRChfQXJnLCBfX3YpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBfTV9jb3B5KF9Db25zdF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCkKKyAgICB7CisgICAgICAvLyBTdHJ1Y3R1cmFsIGNvcHkuICBfX3ggYW5kIF9fcCBtdXN0IGJlIG5vbi1udWxsLgorICAgICAgX0xpbmtfdHlwZSBfX3RvcCA9IF9NX2Nsb25lX25vZGUoX194KTsKKyAgICAgIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CisKKyAgICAgIF9fdHJ5CisJeworCSAgaWYgKF9feC0+X01fcmlnaHQpCisJICAgIF9fdG9wLT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX190b3ApOworCSAgX19wID0gX190b3A7CisJICBfX3ggPSBfU19sZWZ0KF9feCk7CisKKwkgIHdoaWxlIChfX3ggIT0gMCkKKwkgICAgeworCSAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fY2xvbmVfbm9kZShfX3gpOworCSAgICAgIF9fcC0+X01fbGVmdCA9IF9feTsKKwkgICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKKwkgICAgICBpZiAoX194LT5fTV9yaWdodCkKKwkJX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKKwkgICAgICBfX3AgPSBfX3k7CisJICAgICAgX194ID0gX1NfbGVmdChfX3gpOworCSAgICB9CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgX01fZXJhc2UoX190b3ApOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgICAgcmV0dXJuIF9fdG9wOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBfTV9lcmFzZShfTGlua190eXBlIF9feCkKKyAgICB7CisgICAgICAvLyBFcmFzZSB3aXRob3V0IHJlYmFsYW5jaW5nLgorICAgICAgd2hpbGUgKF9feCAhPSAwKQorCXsKKwkgIF9NX2VyYXNlKF9TX3JpZ2h0KF9feCkpOworCSAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CisJICBfTV9kZXN0cm95X25vZGUoX194KTsKKwkgIF9feCA9IF9feTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkgICAgICBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX2xvd2VyX2JvdW5kKF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9feSwKKwkJICAgY29uc3QgX0tleSYgX19rKQorICAgIHsKKyAgICAgIHdoaWxlIChfX3ggIT0gMCkKKwlpZiAoIV9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCisJICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKKwllbHNlCisJICBfX3ggPSBfU19yaWdodChfX3gpOworICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkgICAgICBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX2xvd2VyX2JvdW5kKF9Db25zdF9MaW5rX3R5cGUgX194LCBfQ29uc3RfTGlua190eXBlIF9feSwKKwkJICAgY29uc3QgX0tleSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIHdoaWxlIChfX3ggIT0gMCkKKwlpZiAoIV9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCisJICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKKwllbHNlCisJICBfX3ggPSBfU19yaWdodChfX3gpOworICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkgICAgICBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX3VwcGVyX2JvdW5kKF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9feSwKKwkJICAgY29uc3QgX0tleSYgX19rKQorICAgIHsKKyAgICAgIHdoaWxlIChfX3ggIT0gMCkKKwlpZiAoX01faW1wbC5fTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKKwkgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOworCWVsc2UKKwkgIF9feCA9IF9TX3JpZ2h0KF9feCk7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCSAgICAgIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01fdXBwZXJfYm91bmQoX0NvbnN0X0xpbmtfdHlwZSBfX3gsIF9Db25zdF9MaW5rX3R5cGUgX195LAorCQkgICBjb25zdCBfS2V5JiBfX2spIGNvbnN0CisgICAgeworICAgICAgd2hpbGUgKF9feCAhPSAwKQorCWlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQorCSAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CisJZWxzZQorCSAgX194ID0gX1NfcmlnaHQoX194KTsKKyAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkJICAgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yLAorCSB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwKKwkJCSAgIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcj4KKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIGVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKKyAgICB7CisgICAgICBfTGlua190eXBlIF9feCA9IF9NX2JlZ2luKCk7CisgICAgICBfTGlua190eXBlIF9feSA9IF9NX2VuZCgpOworICAgICAgd2hpbGUgKF9feCAhPSAwKQorCXsKKwkgIGlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQorCSAgICBfX3ggPSBfU19yaWdodChfX3gpOworCSAgZWxzZSBpZiAoX01faW1wbC5fTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKKwkgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfTGlua190eXBlIF9feHUoX194KSwgX195dShfX3kpOworCSAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOworCSAgICAgIF9feHUgPSBfU19yaWdodChfX3h1KTsKKwkgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvciwKKwkJICAgICAgICAgIGl0ZXJhdG9yPihfTV9sb3dlcl9ib3VuZChfX3gsIF9feSwgX19rKSwKKwkJCQkgICAgX01fdXBwZXJfYm91bmQoX194dSwgX195dSwgX19rKSk7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGl0ZXJhdG9yKF9feSksCisJCQkJICAgICAgaXRlcmF0b3IoX195KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IsCisJIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkJICAgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yPgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIF9Db25zdF9MaW5rX3R5cGUgX194ID0gX01fYmVnaW4oKTsKKyAgICAgIF9Db25zdF9MaW5rX3R5cGUgX195ID0gX01fZW5kKCk7CisgICAgICB3aGlsZSAoX194ICE9IDApCisJeworCSAgaWYgKF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCisJICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CisJICBlbHNlIGlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQorCSAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9Db25zdF9MaW5rX3R5cGUgX194dShfX3gpLCBfX3l1KF9feSk7CisJICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CisJICAgICAgX194dSA9IF9TX3JpZ2h0KF9feHUpOworCSAgICAgIHJldHVybiBwYWlyPGNvbnN0X2l0ZXJhdG9yLAorCQkgICAgICAgICAgY29uc3RfaXRlcmF0b3I+KF9NX2xvd2VyX2JvdW5kKF9feCwgX195LCBfX2spLAorCQkJCQkgIF9NX3VwcGVyX2JvdW5kKF9feHUsIF9feXUsIF9faykpOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPihjb25zdF9pdGVyYXRvcihfX3kpLAorCQkJCQkJICBjb25zdF9pdGVyYXRvcihfX3kpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgc3dhcChfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9fdCkKKyAgICB7CisgICAgICBpZiAoX01fcm9vdCgpID09IDApCisJeworCSAgaWYgKF9fdC5fTV9yb290KCkgIT0gMCkKKwkgICAgeworCSAgICAgIF9NX3Jvb3QoKSA9IF9fdC5fTV9yb290KCk7CisJICAgICAgX01fbGVmdG1vc3QoKSA9IF9fdC5fTV9sZWZ0bW9zdCgpOworCSAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX190Ll9NX3JpZ2h0bW9zdCgpOworCSAgICAgIF9NX3Jvb3QoKS0+X01fcGFyZW50ID0gX01fZW5kKCk7CisJICAgICAgCisJICAgICAgX190Ll9NX3Jvb3QoKSA9IDA7CisJICAgICAgX190Ll9NX2xlZnRtb3N0KCkgPSBfX3QuX01fZW5kKCk7CisJICAgICAgX190Ll9NX3JpZ2h0bW9zdCgpID0gX190Ll9NX2VuZCgpOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoX190Ll9NX3Jvb3QoKSA9PSAwKQorCXsKKwkgIF9fdC5fTV9yb290KCkgPSBfTV9yb290KCk7CisJICBfX3QuX01fbGVmdG1vc3QoKSA9IF9NX2xlZnRtb3N0KCk7CisJICBfX3QuX01fcmlnaHRtb3N0KCkgPSBfTV9yaWdodG1vc3QoKTsKKwkgIF9fdC5fTV9yb290KCktPl9NX3BhcmVudCA9IF9fdC5fTV9lbmQoKTsKKwkgIAorCSAgX01fcm9vdCgpID0gMDsKKwkgIF9NX2xlZnRtb3N0KCkgPSBfTV9lbmQoKTsKKwkgIF9NX3JpZ2h0bW9zdCgpID0gX01fZW5kKCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHN0ZDo6c3dhcChfTV9yb290KCksX190Ll9NX3Jvb3QoKSk7CisJICBzdGQ6OnN3YXAoX01fbGVmdG1vc3QoKSxfX3QuX01fbGVmdG1vc3QoKSk7CisJICBzdGQ6OnN3YXAoX01fcmlnaHRtb3N0KCksX190Ll9NX3JpZ2h0bW9zdCgpKTsKKwkgIAorCSAgX01fcm9vdCgpLT5fTV9wYXJlbnQgPSBfTV9lbmQoKTsKKwkgIF9fdC5fTV9yb290KCktPl9NX3BhcmVudCA9IF9fdC5fTV9lbmQoKTsKKwl9CisgICAgICAvLyBObyBuZWVkIHRvIHN3YXAgaGVhZGVyJ3MgY29sb3IgYXMgaXQgZG9lcyBub3QgY2hhbmdlLgorICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2ltcGwuX01fbm9kZV9jb3VudCwgX190Ll9NX2ltcGwuX01fbm9kZV9jb3VudCk7CisgICAgICBzdGQ6OnN3YXAodGhpcy0+X01faW1wbC5fTV9rZXlfY29tcGFyZSwgX190Ll9NX2ltcGwuX01fa2V5X2NvbXBhcmUpOworICAgICAgCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzEuIFN3YXBwaW5nIGNvbnRhaW5lcnMgd2l0aCB1bmVxdWFsIGFsbG9jYXRvcnMuCisgICAgICBzdGQ6Ol9fYWxsb2Nfc3dhcDxfTm9kZV9hbGxvY2F0b3I+OjoKKwlfU19kb19pdChfTV9nZXRfTm9kZV9hbGxvY2F0b3IoKSwgX190Ll9NX2dldF9Ob2RlX2FsbG9jYXRvcigpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwKKwkJCSAgIF9Db21wYXJlLCBfQWxsb2M+OjpfQmFzZV9wdHIsCisJIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkJICAgX0NvbXBhcmUsIF9BbGxvYz46Ol9CYXNlX3B0cj4KKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX2dldF9pbnNlcnRfdW5pcXVlX3Bvcyhjb25zdCBrZXlfdHlwZSYgX19rKQorICAgIHsKKyAgICAgIHR5cGVkZWYgcGFpcjxfQmFzZV9wdHIsIF9CYXNlX3B0cj4gX1JlczsKKyAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fYmVnaW4oKTsKKyAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fZW5kKCk7CisgICAgICBib29sIF9fY29tcCA9IHRydWU7CisgICAgICB3aGlsZSAoX194ICE9IDApCisJeworCSAgX195ID0gX194OworCSAgX19jb21wID0gX01faW1wbC5fTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKTsKKwkgIF9feCA9IF9fY29tcCA/IF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CisJfQorICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKKyAgICAgIGlmIChfX2NvbXApCisJeworCSAgaWYgKF9faiA9PSBiZWdpbigpKQorCSAgICByZXR1cm4gX1JlcyhfX3gsIF9feSk7CisJICBlbHNlCisJICAgIC0tX19qOworCX0KKyAgICAgIGlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleShfX2ouX01fbm9kZSksIF9faykpCisJcmV0dXJuIF9SZXMoX194LCBfX3kpOworICAgICAgcmV0dXJuIF9SZXMoX19qLl9NX25vZGUsIDApOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkJICAgX0NvbXBhcmUsIF9BbGxvYz46Ol9CYXNlX3B0ciwKKwkgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICBfQ29tcGFyZSwgX0FsbG9jPjo6X0Jhc2VfcHRyPgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01fZ2V0X2luc2VydF9lcXVhbF9wb3MoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICB7CisgICAgICB0eXBlZGVmIHBhaXI8X0Jhc2VfcHRyLCBfQmFzZV9wdHI+IF9SZXM7CisgICAgICBfTGlua190eXBlIF9feCA9IF9NX2JlZ2luKCk7CisgICAgICBfTGlua190eXBlIF9feSA9IF9NX2VuZCgpOworICAgICAgd2hpbGUgKF9feCAhPSAwKQorCXsKKwkgIF9feSA9IF9feDsKKwkgIF9feCA9IF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkgPworCSAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKKwl9CisgICAgICByZXR1cm4gX1JlcyhfX3gsIF9feSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgorI2VuZGlmCisgICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwKKwkJCSAgIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvciwgYm9vbD4KKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBfTV9pbnNlcnRfdW5pcXVlKF9BcmcmJiBfX3YpCisjZWxzZQorICAgIF9NX2luc2VydF91bmlxdWUoY29uc3QgX1ZhbCYgX192KQorI2VuZGlmCisgICAgeworICAgICAgdHlwZWRlZiBwYWlyPGl0ZXJhdG9yLCBib29sPiBfUmVzOworICAgICAgcGFpcjxfQmFzZV9wdHIsIF9CYXNlX3B0cj4gX19yZXMKKwk9IF9NX2dldF9pbnNlcnRfdW5pcXVlX3BvcyhfS2V5T2ZWYWx1ZSgpKF9fdikpOworCisgICAgICBpZiAoX19yZXMuc2Vjb25kKQorCXJldHVybiBfUmVzKF9NX2luc2VydF8oX19yZXMuZmlyc3QsIF9fcmVzLnNlY29uZCwKKwkJCSAgICAgICBfR0xJQkNYWF9GT1JXQVJEKF9BcmcsIF9fdikpLAorCQkgICAgdHJ1ZSk7CisKKyAgICAgIHJldHVybiBfUmVzKGl0ZXJhdG9yKHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9fcmVzLmZpcnN0KSksIGZhbHNlKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisjZW5kaWYKKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgX01faW5zZXJ0X2VxdWFsKF9BcmcmJiBfX3YpCisjZWxzZQorICAgIF9NX2luc2VydF9lcXVhbChjb25zdCBfVmFsJiBfX3YpCisjZW5kaWYKKyAgICB7CisgICAgICBwYWlyPF9CYXNlX3B0ciwgX0Jhc2VfcHRyPiBfX3JlcworCT0gX01fZ2V0X2luc2VydF9lcXVhbF9wb3MoX0tleU9mVmFsdWUoKShfX3YpKTsKKyAgICAgIHJldHVybiBfTV9pbnNlcnRfKF9fcmVzLmZpcnN0LCBfX3Jlcy5zZWNvbmQsIF9HTElCQ1hYX0ZPUldBUkQoX0FyZywgX192KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICBfQ29tcGFyZSwgX0FsbG9jPjo6X0Jhc2VfcHRyLAorICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICBfQ29tcGFyZSwgX0FsbG9jPjo6X0Jhc2VfcHRyPgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01fZ2V0X2luc2VydF9oaW50X3VuaXF1ZV9wb3MoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwKKwkJCQkgIGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgeworICAgICAgaXRlcmF0b3IgX19wb3MgPSBfX3Bvc2l0aW9uLl9NX2NvbnN0X2Nhc3QoKTsKKyAgICAgIHR5cGVkZWYgcGFpcjxfQmFzZV9wdHIsIF9CYXNlX3B0cj4gX1JlczsKKworICAgICAgLy8gZW5kKCkKKyAgICAgIGlmIChfX3Bvcy5fTV9ub2RlID09IF9NX2VuZCgpKQorCXsKKwkgIGlmIChzaXplKCkgPiAwCisJICAgICAgJiYgX01faW1wbC5fTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfX2spKQorCSAgICByZXR1cm4gX1JlcygwLCBfTV9yaWdodG1vc3QoKSk7CisJICBlbHNlCisJICAgIHJldHVybiBfTV9nZXRfaW5zZXJ0X3VuaXF1ZV9wb3MoX19rKTsKKwl9CisgICAgICBlbHNlIGlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fcG9zLl9NX25vZGUpKSkKKwl7CisJICAvLyBGaXJzdCwgdHJ5IGJlZm9yZS4uLgorCSAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3BvczsKKwkgIGlmIChfX3Bvcy5fTV9ub2RlID09IF9NX2xlZnRtb3N0KCkpIC8vIGJlZ2luKCkKKwkgICAgcmV0dXJuIF9SZXMoX01fbGVmdG1vc3QoKSwgX01fbGVmdG1vc3QoKSk7CisJICBlbHNlIGlmIChfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleSgoLS1fX2JlZm9yZSkuX01fbm9kZSksIF9faykpCisJICAgIHsKKwkgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKKwkJcmV0dXJuIF9SZXMoMCwgX19iZWZvcmUuX01fbm9kZSk7CisJICAgICAgZWxzZQorCQlyZXR1cm4gX1JlcyhfX3Bvcy5fTV9ub2RlLCBfX3Bvcy5fTV9ub2RlKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gX01fZ2V0X2luc2VydF91bmlxdWVfcG9zKF9fayk7CisJfQorICAgICAgZWxzZSBpZiAoX01faW1wbC5fTV9rZXlfY29tcGFyZShfU19rZXkoX19wb3MuX01fbm9kZSksIF9faykpCisJeworCSAgLy8gLi4uIHRoZW4gdHJ5IGFmdGVyLgorCSAgaXRlcmF0b3IgX19hZnRlciA9IF9fcG9zOworCSAgaWYgKF9fcG9zLl9NX25vZGUgPT0gX01fcmlnaHRtb3N0KCkpCisJICAgIHJldHVybiBfUmVzKDAsIF9NX3JpZ2h0bW9zdCgpKTsKKwkgIGVsc2UgaWYgKF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoKCsrX19hZnRlcikuX01fbm9kZSkpKQorCSAgICB7CisJICAgICAgaWYgKF9TX3JpZ2h0KF9fcG9zLl9NX25vZGUpID09IDApCisJCXJldHVybiBfUmVzKDAsIF9fcG9zLl9NX25vZGUpOworCSAgICAgIGVsc2UKKwkJcmV0dXJuIF9SZXMoX19hZnRlci5fTV9ub2RlLCBfX2FmdGVyLl9NX25vZGUpOworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBfTV9nZXRfaW5zZXJ0X3VuaXF1ZV9wb3MoX19rKTsKKwl9CisgICAgICBlbHNlCisJLy8gRXF1aXZhbGVudCBrZXlzLgorCXJldHVybiBfUmVzKF9fcG9zLl9NX25vZGUsIDApOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyNlbmRpZgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBfTV9pbnNlcnRfdW5pcXVlXyhjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJnJiYgX192KQorI2Vsc2UKKyAgICBfTV9pbnNlcnRfdW5pcXVlXyhjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCisjZW5kaWYKKyAgICB7CisgICAgICBwYWlyPF9CYXNlX3B0ciwgX0Jhc2VfcHRyPiBfX3JlcworCT0gX01fZ2V0X2luc2VydF9oaW50X3VuaXF1ZV9wb3MoX19wb3NpdGlvbiwgX0tleU9mVmFsdWUoKShfX3YpKTsKKworICAgICAgaWYgKF9fcmVzLnNlY29uZCkKKwlyZXR1cm4gX01faW5zZXJ0XyhfX3Jlcy5maXJzdCwgX19yZXMuc2Vjb25kLAorCQkJICBfR0xJQkNYWF9GT1JXQVJEKF9BcmcsIF9fdikpOworICAgICAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRpY19jYXN0PF9MaW5rX3R5cGU+KF9fcmVzLmZpcnN0KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICBfQ29tcGFyZSwgX0FsbG9jPjo6X0Jhc2VfcHRyLAorICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICBfQ29tcGFyZSwgX0FsbG9jPjo6X0Jhc2VfcHRyPgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01fZ2V0X2luc2VydF9oaW50X2VxdWFsX3Bvcyhjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBrZXlfdHlwZSYgX19rKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9fcG9zID0gX19wb3NpdGlvbi5fTV9jb25zdF9jYXN0KCk7CisgICAgICB0eXBlZGVmIHBhaXI8X0Jhc2VfcHRyLCBfQmFzZV9wdHI+IF9SZXM7CisKKyAgICAgIC8vIGVuZCgpCisgICAgICBpZiAoX19wb3MuX01fbm9kZSA9PSBfTV9lbmQoKSkKKwl7CisJICBpZiAoc2l6ZSgpID4gMAorCSAgICAgICYmICFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCisJICAgIHJldHVybiBfUmVzKDAsIF9NX3JpZ2h0bW9zdCgpKTsKKwkgIGVsc2UKKwkgICAgcmV0dXJuIF9NX2dldF9pbnNlcnRfZXF1YWxfcG9zKF9fayk7CisJfQorICAgICAgZWxzZSBpZiAoIV9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zLl9NX25vZGUpLCBfX2spKQorCXsKKwkgIC8vIEZpcnN0LCB0cnkgYmVmb3JlLi4uCisJICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zOworCSAgaWYgKF9fcG9zLl9NX25vZGUgPT0gX01fbGVmdG1vc3QoKSkgLy8gYmVnaW4oKQorCSAgICByZXR1cm4gX1JlcyhfTV9sZWZ0bW9zdCgpLCBfTV9sZWZ0bW9zdCgpKTsKKwkgIGVsc2UgaWYgKCFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KCgtLV9fYmVmb3JlKS5fTV9ub2RlKSkpCisJICAgIHsKKwkgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKKwkJcmV0dXJuIF9SZXMoMCwgX19iZWZvcmUuX01fbm9kZSk7CisJICAgICAgZWxzZQorCQlyZXR1cm4gX1JlcyhfX3Bvcy5fTV9ub2RlLCBfX3Bvcy5fTV9ub2RlKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICByZXR1cm4gX01fZ2V0X2luc2VydF9lcXVhbF9wb3MoX19rKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLy8gLi4uIHRoZW4gdHJ5IGFmdGVyLiAgCisJICBpdGVyYXRvciBfX2FmdGVyID0gX19wb3M7CisJICBpZiAoX19wb3MuX01fbm9kZSA9PSBfTV9yaWdodG1vc3QoKSkKKwkgICAgcmV0dXJuIF9SZXMoMCwgX01fcmlnaHRtb3N0KCkpOworCSAgZWxzZSBpZiAoIV9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KCgrK19fYWZ0ZXIpLl9NX25vZGUpLCBfX2spKQorCSAgICB7CisJICAgICAgaWYgKF9TX3JpZ2h0KF9fcG9zLl9NX25vZGUpID09IDApCisJCXJldHVybiBfUmVzKDAsIF9fcG9zLl9NX25vZGUpOworCSAgICAgIGVsc2UKKwkJcmV0dXJuIF9SZXMoX19hZnRlci5fTV9ub2RlLCBfX2FmdGVyLl9NX25vZGUpOworCSAgICB9CisJICBlbHNlCisJICAgIHJldHVybiBfUmVzKDAsIDApOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisjZW5kaWYKKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgX01faW5zZXJ0X2VxdWFsXyhjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJnJiYgX192KQorI2Vsc2UKKyAgICBfTV9pbnNlcnRfZXF1YWxfKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKKyNlbmRpZgorICAgIHsKKyAgICAgIHBhaXI8X0Jhc2VfcHRyLCBfQmFzZV9wdHI+IF9fcmVzCisJPSBfTV9nZXRfaW5zZXJ0X2hpbnRfZXF1YWxfcG9zKF9fcG9zaXRpb24sIF9LZXlPZlZhbHVlKCkoX192KSk7CisKKyAgICAgIGlmIChfX3Jlcy5zZWNvbmQpCisJcmV0dXJuIF9NX2luc2VydF8oX19yZXMuZmlyc3QsIF9fcmVzLnNlY29uZCwKKwkJCSAgX0dMSUJDWFhfRk9SV0FSRChfQXJnLCBfX3YpKTsKKworICAgICAgcmV0dXJuIF9NX2luc2VydF9lcXVhbF9sb3dlcihfR0xJQkNYWF9GT1JXQVJEKF9BcmcsIF9fdikpOworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01faW5zZXJ0X25vZGUoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9fcCwgX0xpbmtfdHlwZSBfX3opCisgICAgeworICAgICAgYm9vbCBfX2luc2VydF9sZWZ0ID0gKF9feCAhPSAwIHx8IF9fcCA9PSBfTV9lbmQoKQorCQkJICAgIHx8IF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feiksCisJCQkJCQkgICAgICBfU19rZXkoX19wKSkpOworCisgICAgICBfUmJfdHJlZV9pbnNlcnRfYW5kX3JlYmFsYW5jZShfX2luc2VydF9sZWZ0LCBfX3osIF9fcCwKKwkJCQkgICAgdGhpcy0+X01faW1wbC5fTV9oZWFkZXIpOworICAgICAgKytfTV9pbXBsLl9NX25vZGVfY291bnQ7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX196KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgX01faW5zZXJ0X2xvd2VyX25vZGUoX0Jhc2VfcHRyIF9fcCwgX0xpbmtfdHlwZSBfX3opCisgICAgeworICAgICAgYm9vbCBfX2luc2VydF9sZWZ0ID0gKF9fcCA9PSBfTV9lbmQoKQorCQkJICAgIHx8ICFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleShfX3ApLAorCQkJCQkJICAgICAgIF9TX2tleShfX3opKSk7CisKKyAgICAgIF9SYl90cmVlX2luc2VydF9hbmRfcmViYWxhbmNlKF9faW5zZXJ0X2xlZnQsIF9feiwgX19wLAorCQkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlcik7CisgICAgICArK19NX2ltcGwuX01fbm9kZV9jb3VudDsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBfTV9pbnNlcnRfZXF1YWxfbG93ZXJfbm9kZShfTGlua190eXBlIF9feikKKyAgICB7CisgICAgICBfTGlua190eXBlIF9feCA9IF9NX2JlZ2luKCk7CisgICAgICBfTGlua190eXBlIF9feSA9IF9NX2VuZCgpOworICAgICAgd2hpbGUgKF9feCAhPSAwKQorCXsKKwkgIF9feSA9IF9feDsKKwkgIF9feCA9ICFfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX196KSkgPworCSAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKKwl9CisgICAgICByZXR1cm4gX01faW5zZXJ0X2xvd2VyX25vZGUoX195LCBfX3opOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsCisJCQkgICAgIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvciwgYm9vbD4KKyAgICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgICBfTV9lbXBsYWNlX3VuaXF1ZShfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKwlfTGlua190eXBlIF9feiA9IF9NX2NyZWF0ZV9ub2RlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisKKwlfX3RyeQorCSAgeworCSAgICB0eXBlZGVmIHBhaXI8aXRlcmF0b3IsIGJvb2w+IF9SZXM7CisJICAgIGF1dG8gX19yZXMgPSBfTV9nZXRfaW5zZXJ0X3VuaXF1ZV9wb3MoX1Nfa2V5KF9feikpOworCSAgICBpZiAoX19yZXMuc2Vjb25kKQorCSAgICAgIHJldHVybiBfUmVzKF9NX2luc2VydF9ub2RlKF9fcmVzLmZpcnN0LCBfX3Jlcy5zZWNvbmQsIF9feiksIHRydWUpOworCQorCSAgICBfTV9kZXN0cm95X25vZGUoX196KTsKKwkgICAgcmV0dXJuIF9SZXMoaXRlcmF0b3Ioc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4oX19yZXMuZmlyc3QpKSwgZmFsc2UpOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfTV9kZXN0cm95X25vZGUoX196KTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgICAgX01fZW1wbGFjZV9lcXVhbChfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKwlfTGlua190eXBlIF9feiA9IF9NX2NyZWF0ZV9ub2RlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisKKwlfX3RyeQorCSAgeworCSAgICBhdXRvIF9fcmVzID0gX01fZ2V0X2luc2VydF9lcXVhbF9wb3MoX1Nfa2V5KF9feikpOworCSAgICByZXR1cm4gX01faW5zZXJ0X25vZGUoX19yZXMuZmlyc3QsIF9fcmVzLnNlY29uZCwgX196KTsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX01fZGVzdHJveV9ub2RlKF9feik7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgorICAgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICAgIF9NX2VtcGxhY2VfaGludF91bmlxdWUoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgeworCV9MaW5rX3R5cGUgX196ID0gX01fY3JlYXRlX25vZGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKworCV9fdHJ5CisJICB7CisJICAgIGF1dG8gX19yZXMgPSBfTV9nZXRfaW5zZXJ0X2hpbnRfdW5pcXVlX3BvcyhfX3BvcywgX1Nfa2V5KF9feikpOworCisJICAgIGlmIChfX3Jlcy5zZWNvbmQpCisJICAgICAgcmV0dXJuIF9NX2luc2VydF9ub2RlKF9fcmVzLmZpcnN0LCBfX3Jlcy5zZWNvbmQsIF9feik7CisKKwkgICAgX01fZGVzdHJveV9ub2RlKF9feik7CisJICAgIHJldHVybiBpdGVyYXRvcihzdGF0aWNfY2FzdDxfTGlua190eXBlPihfX3Jlcy5maXJzdCkpOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfTV9kZXN0cm95X25vZGUoX196KTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgICAgX01fZW1wbGFjZV9oaW50X2VxdWFsKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKwlfTGlua190eXBlIF9feiA9IF9NX2NyZWF0ZV9ub2RlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisKKwlfX3RyeQorCSAgeworCSAgICBhdXRvIF9fcmVzID0gX01fZ2V0X2luc2VydF9oaW50X2VxdWFsX3BvcyhfX3BvcywgX1Nfa2V5KF9feikpOworCisJICAgIGlmIChfX3Jlcy5zZWNvbmQpCisJICAgICAgcmV0dXJuIF9NX2luc2VydF9ub2RlKF9fcmVzLmZpcnN0LCBfX3Jlcy5zZWNvbmQsIF9feik7CisKKwkgICAgcmV0dXJuIF9NX2luc2VydF9lcXVhbF9sb3dlcl9ub2RlKF9feik7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX2Rlc3Ryb3lfbm9kZShfX3opOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCisgICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CisgICAgICB2b2lkCisgICAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ21wLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCisgICAgICB7CisJZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisJICBfTV9pbnNlcnRfdW5pcXVlXyhlbmQoKSwgKl9fZmlyc3QpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCisgICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CisgICAgICB2b2lkCisgICAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ21wLCBfQWxsb2M+OjoKKyAgICAgIF9NX2luc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKKyAgICAgIHsKKwlmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgIF9NX2luc2VydF9lcXVhbF8oZW5kKCksICpfX2ZpcnN0KTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKKyAgICBfTV9lcmFzZV9hdXgoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICB7CisgICAgICBfTGlua190eXBlIF9feSA9CisJc3RhdGljX2Nhc3Q8X0xpbmtfdHlwZT4oX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZQorCQkJCShjb25zdF9jYXN0PF9CYXNlX3B0cj4oX19wb3NpdGlvbi5fTV9ub2RlKSwKKwkJCQkgdGhpcy0+X01faW1wbC5fTV9oZWFkZXIpKTsKKyAgICAgIF9NX2Rlc3Ryb3lfbm9kZShfX3kpOworICAgICAgLS1fTV9pbXBsLl9NX25vZGVfY291bnQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIF9NX2VyYXNlX2F1eChjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCisJY2xlYXIoKTsKKyAgICAgIGVsc2UKKwl3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJICBlcmFzZShfX2ZpcnN0KyspOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgZXJhc2UoY29uc3QgX0tleSYgX194KQorICAgIHsKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX3gpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CisgICAgICBlcmFzZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOworICAgICAgcmV0dXJuIF9fb2xkX3NpemUgLSBzaXplKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIGVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKKyAgICB7CisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJZXJhc2UoKl9fZmlyc3QrKyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkgICAgICBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIGZpbmQoY29uc3QgX0tleSYgX19rKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIF9faiA9IF9NX2xvd2VyX2JvdW5kKF9NX2JlZ2luKCksIF9NX2VuZCgpLCBfX2spOworICAgICAgcmV0dXJuIChfX2ogPT0gZW5kKCkKKwkgICAgICB8fCBfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywKKwkJCQkJX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8gZW5kKCkgOiBfX2o7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLAorCQkgICAgICBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKKyAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgorICAgIGZpbmQoY29uc3QgX0tleSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faiA9IF9NX2xvd2VyX2JvdW5kKF9NX2JlZ2luKCksIF9NX2VuZCgpLCBfX2spOworICAgICAgcmV0dXJuIChfX2ogPT0gZW5kKCkKKwkgICAgICB8fCBfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9faywgCisJCQkJCV9TX2tleShfX2ouX01fbm9kZSkpKSA/IGVuZCgpIDogX19qOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CisgICAgY291bnQoY29uc3QgX0tleSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX2spOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IHN0ZDo6ZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKKyAgICAgIHJldHVybiBfX247CisgICAgfQorCisgIF9HTElCQ1hYX1BVUkUgdW5zaWduZWQgaW50CisgIF9SYl90cmVlX2JsYWNrX2NvdW50KGNvbnN0IF9SYl90cmVlX25vZGVfYmFzZSogX19ub2RlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkgdGhyb3cgKCk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYm9vbAorICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX2ltcGwuX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCisJcmV0dXJuIF9NX2ltcGwuX01fbm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkKKwkgICAgICAgJiYgdGhpcy0+X01faW1wbC5fTV9oZWFkZXIuX01fbGVmdCA9PSBfTV9lbmQoKQorCSAgICAgICAmJiB0aGlzLT5fTV9pbXBsLl9NX2hlYWRlci5fTV9yaWdodCA9PSBfTV9lbmQoKTsKKworICAgICAgdW5zaWduZWQgaW50IF9fbGVuID0gX1JiX3RyZWVfYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01fcm9vdCgpKTsKKyAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsrX19pdCkKKwl7CisJICBfQ29uc3RfTGlua190eXBlIF9feCA9IHN0YXRpY19jYXN0PF9Db25zdF9MaW5rX3R5cGU+KF9faXQuX01fbm9kZSk7CisJICBfQ29uc3RfTGlua190eXBlIF9fTCA9IF9TX2xlZnQoX194KTsKKwkgIF9Db25zdF9MaW5rX3R5cGUgX19SID0gX1NfcmlnaHQoX194KTsKKworCSAgaWYgKF9feC0+X01fY29sb3IgPT0gX1NfcmVkKQorCSAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09IF9TX3JlZCkKKwkJfHwgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9TX3JlZCkpCisJICAgICAgcmV0dXJuIGZhbHNlOworCisJICBpZiAoX19MICYmIF9NX2ltcGwuX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9TX2tleShfX0wpKSkKKwkgICAgcmV0dXJuIGZhbHNlOworCSAgaWYgKF9fUiAmJiBfTV9pbXBsLl9NX2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkpCisJICAgIHJldHVybiBmYWxzZTsKKworCSAgaWYgKCFfX0wgJiYgIV9fUiAmJiBfUmJfdHJlZV9ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCisJICAgIHJldHVybiBmYWxzZTsKKwl9CisKKyAgICAgIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQorCXJldHVybiBmYWxzZTsKKyAgICAgIGlmIChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMGIxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaApAQCAtMCwwICsxLDY1NiBAQAorLy8gUmF3IG1lbW9yeSBtYW5pcHVsYXRvcnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le21lbW9yeX0KKyAqLworCisjaWZuZGVmIF9TVExfVU5JTklUSUFMSVpFRF9ICisjZGVmaW5lIF9TVExfVU5JTklUSUFMSVpFRF9IIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPGJvb2wgX1RyaXZpYWxWYWx1ZVR5cGVzPgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfY29weQorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgX0ZvcndhcmRJdGVyYXRvcgorICAgICAgICBfX3VuaW5pdF9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICAgICAgeworCSAgX0ZvcndhcmRJdGVyYXRvciBfX2N1ciA9IF9fcmVzdWx0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQorCQlzdGQ6Ol9Db25zdHJ1Y3Qoc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpLCAqX19maXJzdCk7CisJICAgICAgcmV0dXJuIF9fY3VyOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIHN0ZDo6X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX191bmluaXRpYWxpemVkX2NvcHk8dHJ1ZT4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICAgICAgX191bmluaXRfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQpCisgICAgICAgIHsgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29waWVzIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgaW50byByZXN1bHQuCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19yZXN1bHQgQW4gb3V0cHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIF9fcmVzdWx0ICsgKF9fZmlyc3QgLSBfX2xhc3QpCisgICAqCisgICAqICBMaWtlIGNvcHkoKSwgYnV0IGRvZXMgbm90IHJlcXVpcmUgYW4gaW5pdGlhbGl6ZWQgb3V0cHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgorICAgIHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMjsKKworICAgICAgcmV0dXJuIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHk8KF9faXNfdHJpdmlhbChfVmFsdWVUeXBlMSkKKwkJCQkJJiYgX19pc190cml2aWFsKF9WYWx1ZVR5cGUyKSk+OjoKKwlfX3VuaW5pdF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOworICAgIH0KKworCisgIHRlbXBsYXRlPGJvb2wgX1RyaXZpYWxWYWx1ZVR5cGU+CisgICAgc3RydWN0IF9fdW5pbml0aWFsaXplZF9maWxsCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICBfX3VuaW5pdF9maWxsKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgIGNvbnN0IF9UcCYgX194KQorICAgICAgICB7CisJICBfRm9yd2FyZEl0ZXJhdG9yIF9fY3VyID0gX19maXJzdDsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBmb3IgKDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQorCQlzdGQ6Ol9Db25zdHJ1Y3Qoc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpLCBfX3gpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfZmlsbDx0cnVlPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX191bmluaXRfZmlsbChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgICBjb25zdCBfVHAmIF9feCkKKyAgICAgICAgeyBzdGQ6OmZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBDb3BpZXMgdGhlIHZhbHVlIHggaW50byB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9feCAgICAgIFRoZSBzb3VyY2UgdmFsdWUuCisgICAqICBAcmV0dXJuICAgTm90aGluZy4KKyAgICoKKyAgICogIExpa2UgZmlsbCgpLCBidXQgZG9lcyBub3QgcmVxdWlyZSBhbiBpbml0aWFsaXplZCBvdXRwdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgICAgY29uc3QgX1RwJiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsPF9faXNfdHJpdmlhbChfVmFsdWVUeXBlKT46OgorCV9fdW5pbml0X2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOworICAgIH0KKworCisgIHRlbXBsYXRlPGJvb2wgX1RyaXZpYWxWYWx1ZVR5cGU+CisgICAgc3RydWN0IF9fdW5pbml0aWFsaXplZF9maWxsX24KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICBfX3VuaW5pdF9maWxsX24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sCisJCQljb25zdCBfVHAmIF9feCkKKyAgICAgICAgeworCSAgX0ZvcndhcmRJdGVyYXRvciBfX2N1ciA9IF9fZmlyc3Q7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgZm9yICg7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQorCQlzdGQ6Ol9Db25zdHJ1Y3Qoc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpLCBfX3gpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uPHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX191bmluaXRfZmlsbF9uKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLAorCQkJY29uc3QgX1RwJiBfX3gpCisgICAgICAgIHsgc3RkOjpmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOyB9CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBDb3BpZXMgdGhlIHZhbHVlIHggaW50byB0aGUgcmFuZ2UgW2ZpcnN0LGZpcnN0K24pLgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19uICAgICAgVGhlIG51bWJlciBvZiBjb3BpZXMgdG8gbWFrZS4KKyAgICogIEBwYXJhbSAgX194ICAgICAgVGhlIHNvdXJjZSB2YWx1ZS4KKyAgICogIEByZXR1cm4gICBOb3RoaW5nLgorICAgKgorICAgKiAgTGlrZSBmaWxsX24oKSwgYnV0IGRvZXMgbm90IHJlcXVpcmUgYW4gaW5pdGlhbGl6ZWQgb3V0cHV0IHJhbmdlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uPF9faXNfdHJpdmlhbChfVmFsdWVUeXBlKT46OgorCV9fdW5pbml0X2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7CisgICAgfQorCisgIC8vIEV4dGVuc2lvbnM6IHZlcnNpb25zIG9mIHVuaW5pdGlhbGl6ZWRfY29weSwgdW5pbml0aWFsaXplZF9maWxsLAorICAvLyAgYW5kIHVuaW5pdGlhbGl6ZWRfZmlsbF9uIHRoYXQgdGFrZSBhbiBhbGxvY2F0b3IgcGFyYW1ldGVyLgorICAvLyAgV2UgZGlzcGF0Y2ggYmFjayB0byB0aGUgc3RhbmRhcmQgdmVyc2lvbnMgd2hlbiB3ZSdyZSBnaXZlbiB0aGUKKyAgLy8gIGRlZmF1bHQgYWxsb2NhdG9yLiAgRm9yIG5vbmRlZmF1bHQgYWxsb2NhdG9ycyB3ZSBkbyBub3QgdXNlIAorICAvLyAgYW55IG9mIHRoZSBQT0Qgb3B0aW1pemF0aW9ucy4KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsIF9BbGxvY2F0b3ImIF9fYWxsb2MpCisgICAgeworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2N1ciA9IF9fcmVzdWx0OworICAgICAgX190cnkKKwl7CisJICB0eXBlZGVmIF9fZ251X2N4eDo6X19hbGxvY190cmFpdHM8X0FsbG9jYXRvcj4gX190cmFpdHM7CisJICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKKwkgICAgX190cmFpdHM6OmNvbnN0cnVjdChfX2FsbG9jLCBzdGQ6Ol9fYWRkcmVzc29mKCpfX2N1ciksICpfX2ZpcnN0KTsKKwkgIHJldHVybiBfX2N1cjsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6Ol9EZXN0cm95KF9fcmVzdWx0LCBfX2N1ciwgX19hbGxvYyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsIGFsbG9jYXRvcjxfVHA+JikKKyAgICB7IHJldHVybiBzdGQ6OnVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsIF9BbGxvY2F0b3ImIF9fYWxsb2MpCisgICAgeworICAgICAgcmV0dXJuIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19maXJzdCksCisJCQkJCSBfR0xJQkNYWF9NQUtFX01PVkVfSVRFUkFUT1IoX19sYXN0KSwKKwkJCQkJIF9fcmVzdWx0LCBfX2FsbG9jKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgorICAgIF9fdW5pbml0aWFsaXplZF9tb3ZlX2lmX25vZXhjZXB0X2EoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkJCQkgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJCSAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LAorCQkJCSAgICAgICBfQWxsb2NhdG9yJiBfX2FsbG9jKQorICAgIHsKKyAgICAgIHJldHVybiBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EKKwkoX0dMSUJDWFhfTUFLRV9NT1ZFX0lGX05PRVhDRVBUX0lURVJBVE9SKF9fZmlyc3QpLAorCSBfR0xJQkNYWF9NQUtFX01PVkVfSUZfTk9FWENFUFRfSVRFUkFUT1IoX19sYXN0KSwgX19yZXN1bHQsIF9fYWxsb2MpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgdm9pZAorICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2EoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgIGNvbnN0IF9UcCYgX194LCBfQWxsb2NhdG9yJiBfX2FsbG9jKQorICAgIHsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX2ZpcnN0OworICAgICAgX190cnkKKwl7CisJICB0eXBlZGVmIF9fZ251X2N4eDo6X19hbGxvY190cmFpdHM8X0FsbG9jYXRvcj4gX190cmFpdHM7CisJICBmb3IgKDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQorCSAgICBfX3RyYWl0czo6Y29uc3RydWN0KF9fYWxsb2MsIHN0ZDo6X19hZGRyZXNzb2YoKl9fY3VyKSwgX194KTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6Ol9EZXN0cm95KF9fZmlyc3QsIF9fY3VyLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAyPgorICAgIGlubGluZSB2b2lkCisgICAgX191bmluaXRpYWxpemVkX2ZpbGxfYShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkJICAgY29uc3QgX1RwJiBfX3gsIGFsbG9jYXRvcjxfVHAyPiYpCisgICAgeyBzdGQ6OnVuaW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgdm9pZAorICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgCisJCQkgICAgIGNvbnN0IF9UcCYgX194LCBfQWxsb2NhdG9yJiBfX2FsbG9jKQorICAgIHsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX2ZpcnN0OworICAgICAgX190cnkKKwl7CisJICB0eXBlZGVmIF9fZ251X2N4eDo6X19hbGxvY190cmFpdHM8X0FsbG9jYXRvcj4gX190cmFpdHM7CisJICBmb3IgKDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCisJICAgIF9fdHJhaXRzOjpjb25zdHJ1Y3QoX19hbGxvYywgc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpLCBfX3gpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdCwgX19jdXIsIF9fYWxsb2MpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9UcDI+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sIAorCQkJICAgICBjb25zdCBfVHAmIF9feCwgYWxsb2NhdG9yPF9UcDI+JikKKyAgICB7IHN0ZDo6dW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gpOyB9CisKKworICAvLyBFeHRlbnNpb25zOiBfX3VuaW5pdGlhbGl6ZWRfY29weV9tb3ZlLCBfX3VuaW5pdGlhbGl6ZWRfbW92ZV9jb3B5LAorICAvLyBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9tb3ZlLCBfX3VuaW5pdGlhbGl6ZWRfbW92ZV9maWxsLgorICAvLyBBbGwgb2YgdGhlc2UgYWxnb3JpdGhtcyB0YWtlIGEgdXNlci1zdXBwbGllZCBhbGxvY2F0b3IsIHdoaWNoIGlzIHVzZWQKKyAgLy8gZm9yIGNvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uCisKKyAgLy8gX191bmluaXRpYWxpemVkX2NvcHlfbW92ZQorICAvLyBDb3BpZXMgW2ZpcnN0MSwgbGFzdDEpIGludG8gW3Jlc3VsdCwgcmVzdWx0ICsgKGxhc3QxIC0gZmlyc3QxKSksIGFuZAorICAvLyAgbW92ZSBbZmlyc3QyLCBsYXN0MikgaW50bworICAvLyAgW3Jlc3VsdCwgcmVzdWx0ICsgKGxhc3QxIC0gZmlyc3QxKSArIChsYXN0MiAtIGZpcnN0MikpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKKwkgICB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX191bmluaXRpYWxpemVkX2NvcHlfbW92ZShfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsCisJCQkgICAgICBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAorCQkJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJCSAgICAgIF9BbGxvY2F0b3ImIF9fYWxsb2MpCisgICAgeworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0MSwgX19sYXN0MSwKKwkJCQkJCQkgICBfX3Jlc3VsdCwKKwkJCQkJCQkgICBfX2FsbG9jKTsKKyAgICAgIF9fdHJ5CisJeworCSAgcmV0dXJuIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQsIF9fYWxsb2MpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgLy8gX191bmluaXRpYWxpemVkX21vdmVfY29weQorICAvLyBNb3ZlcyBbZmlyc3QxLCBsYXN0MSkgaW50byBbcmVzdWx0LCByZXN1bHQgKyAobGFzdDEgLSBmaXJzdDEpKSwgYW5kCisgIC8vICBjb3BpZXMgW2ZpcnN0MiwgbGFzdDIpIGludG8KKyAgLy8gIFtyZXN1bHQsIHJlc3VsdCArIChsYXN0MSAtIGZpcnN0MSkgKyAobGFzdDIgLSBmaXJzdDIpKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgorICAgIF9fdW5pbml0aWFsaXplZF9tb3ZlX2NvcHkoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLAorCQkJICAgICAgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCQkgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsCisJCQkgICAgICBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKKwkJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsCisJCQkgICAgICBfQWxsb2NhdG9yJiBfX2FsbG9jKQorICAgIHsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EoX19maXJzdDEsIF9fbGFzdDEsCisJCQkJCQkJICAgX19yZXN1bHQsCisJCQkJCQkJICAgX19hbGxvYyk7CisgICAgICBfX3RyeQorCXsKKwkgIHJldHVybiBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkLCBfX2FsbG9jKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6Ol9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCwgX19hbGxvYyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorICAKKyAgLy8gX191bmluaXRpYWxpemVkX2ZpbGxfbW92ZQorICAvLyBGaWxscyBbcmVzdWx0LCBtaWQpIHdpdGggeCwgYW5kIG1vdmVzIFtmaXJzdCwgbGFzdCkgaW50bworICAvLyAgW21pZCwgbWlkICsgKGxhc3QgLSBmaXJzdCkpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9tb3ZlKF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQsCisJCQkgICAgICBjb25zdCBfVHAmIF9feCwgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0FsbG9jYXRvciYgX19hbGxvYykKKyAgICB7CisgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX2EoX19yZXN1bHQsIF9fbWlkLCBfX3gsIF9fYWxsb2MpOworICAgICAgX190cnkKKwl7CisJICByZXR1cm4gc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fZmlyc3QsIF9fbGFzdCwgX19taWQsIF9fYWxsb2MpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgLy8gX191bmluaXRpYWxpemVkX21vdmVfZmlsbAorICAvLyBNb3ZlcyBbZmlyc3QxLCBsYXN0MSkgaW50byBbZmlyc3QyLCBmaXJzdDIgKyAobGFzdDEgLSBmaXJzdDEpKSwgYW5kCisgIC8vICBmaWxscyBbZmlyc3QyICsgKGxhc3QxIC0gZmlyc3QxKSwgbGFzdDIpIHdpdGggeC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgX191bmluaXRpYWxpemVkX21vdmVfZmlsbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IgX19sYXN0MSwKKwkJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdDIsCisJCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdDIsIGNvbnN0IF9UcCYgX194LAorCQkJICAgICAgX0FsbG9jYXRvciYgX19hbGxvYykKKyAgICB7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkMiA9IHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYShfX2ZpcnN0MSwgX19sYXN0MSwKKwkJCQkJCQkgICAgX19maXJzdDIsCisJCQkJCQkJICAgIF9fYWxsb2MpOworICAgICAgX190cnkKKwl7CisJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX2EoX19taWQyLCBfX2xhc3QyLCBfX3gsIF9fYWxsb2MpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMiwgX19hbGxvYyk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAvLyBFeHRlbnNpb25zOiBfX3VuaW5pdGlhbGl6ZWRfZGVmYXVsdCwgX191bmluaXRpYWxpemVkX2RlZmF1bHRfbiwKKyAgLy8gX191bmluaXRpYWxpemVkX2RlZmF1bHRfYSwgX191bmluaXRpYWxpemVkX2RlZmF1bHRfbl9hLgorCisgIHRlbXBsYXRlPGJvb2wgX1RyaXZpYWxWYWx1ZVR5cGU+CisgICAgc3RydWN0IF9fdW5pbml0aWFsaXplZF9kZWZhdWx0XzEKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICBfX3VuaW5pdF9kZWZhdWx0KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX2ZpcnN0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGZvciAoOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCisJCXN0ZDo6X0NvbnN0cnVjdChzdGQ6Ol9fYWRkcmVzc29mKCpfX2N1cikpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3VuaW5pdGlhbGl6ZWRfZGVmYXVsdF8xPHRydWU+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX191bmluaXRfZGVmYXVsdChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCSAgICBfVmFsdWVUeXBlOworCisJICBzdGQ6OmZpbGwoX19maXJzdCwgX19sYXN0LCBfVmFsdWVUeXBlKCkpOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPGJvb2wgX1RyaXZpYWxWYWx1ZVR5cGU+CisgICAgc3RydWN0IF9fdW5pbml0aWFsaXplZF9kZWZhdWx0X25fMQorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplPgorICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICBfX3VuaW5pdF9kZWZhdWx0X24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24pCisgICAgICAgIHsKKwkgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX2ZpcnN0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIGZvciAoOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKKwkJc3RkOjpfQ29uc3RydWN0KHN0ZDo6X19hZGRyZXNzb2YoKl9fY3VyKSk7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgc3RkOjpfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fdW5pbml0aWFsaXplZF9kZWZhdWx0X25fMTx0cnVlPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplPgorICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICBfX3VuaW5pdF9kZWZhdWx0X24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24pCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCisJICAgIF9WYWx1ZVR5cGU7CisKKwkgIHN0ZDo6ZmlsbF9uKF9fZmlyc3QsIF9fbiwgX1ZhbHVlVHlwZSgpKTsKKwl9CisgICAgfTsKKworICAvLyBfX3VuaW5pdGlhbGl6ZWRfZGVmYXVsdAorICAvLyBGaWxscyBbZmlyc3QsIGxhc3QpIHdpdGggc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkgZGVmYXVsdAorICAvLyBjb25zdHJ1Y3RlZCB2YWx1ZV90eXBlcyhzKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdW5pbml0aWFsaXplZF9kZWZhdWx0KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2RlZmF1bHRfMTxfX2lzX3RyaXZpYWwoX1ZhbHVlVHlwZSk+OjoKKwlfX3VuaW5pdF9kZWZhdWx0KF9fZmlyc3QsIF9fbGFzdCk7CisgICAgfQorCisgIC8vIF9fdW5pbml0aWFsaXplZF9kZWZhdWx0X24KKyAgLy8gRmlsbHMgW2ZpcnN0LCBmaXJzdCArIG4pIHdpdGggbiBkZWZhdWx0IGNvbnN0cnVjdGVkIHZhbHVlX3R5cGUocykuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplPgorICAgIGlubGluZSB2b2lkCisgICAgX191bmluaXRpYWxpemVkX2RlZmF1bHRfbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2RlZmF1bHRfbl8xPF9faXNfdHJpdmlhbChfVmFsdWVUeXBlKT46OgorCV9fdW5pbml0X2RlZmF1bHRfbihfX2ZpcnN0LCBfX24pOworICAgIH0KKworCisgIC8vIF9fdW5pbml0aWFsaXplZF9kZWZhdWx0X2EKKyAgLy8gRmlsbHMgW2ZpcnN0LCBsYXN0KSB3aXRoIHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpIGRlZmF1bHQKKyAgLy8gY29uc3RydWN0ZWQgdmFsdWVfdHlwZXMocyksIGNvbnN0cnVjdGVkIHdpdGggdGhlIGFsbG9jYXRvciBhbGxvYy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICB2b2lkCisgICAgX191bmluaXRpYWxpemVkX2RlZmF1bHRfYShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgICAgIF9BbGxvY2F0b3ImIF9fYWxsb2MpCisgICAgeworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2N1ciA9IF9fZmlyc3Q7CisgICAgICBfX3RyeQorCXsKKwkgIHR5cGVkZWYgX19nbnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfQWxsb2NhdG9yPiBfX3RyYWl0czsKKwkgIGZvciAoOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCisJICAgIF9fdHJhaXRzOjpjb25zdHJ1Y3QoX19hbGxvYywgc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6Ol9EZXN0cm95KF9fZmlyc3QsIF9fY3VyLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX191bmluaXRpYWxpemVkX2RlZmF1bHRfYShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgICAgIGFsbG9jYXRvcjxfVHA+JikKKyAgICB7IHN0ZDo6X191bmluaXRpYWxpemVkX2RlZmF1bHQoX19maXJzdCwgX19sYXN0KTsgfQorCisKKyAgLy8gX191bmluaXRpYWxpemVkX2RlZmF1bHRfbl9hCisgIC8vIEZpbGxzIFtmaXJzdCwgZmlyc3QgKyBuKSB3aXRoIG4gZGVmYXVsdCBjb25zdHJ1Y3RlZCB2YWx1ZV90eXBlcyhzKSwKKyAgLy8gY29uc3RydWN0ZWQgd2l0aCB0aGUgYWxsb2NhdG9yIGFsbG9jLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICB2b2lkCisgICAgX191bmluaXRpYWxpemVkX2RlZmF1bHRfbl9hKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLCAKKwkJCQlfQWxsb2NhdG9yJiBfX2FsbG9jKQorICAgIHsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX2ZpcnN0OworICAgICAgX190cnkKKwl7CisJICB0eXBlZGVmIF9fZ251X2N4eDo6X19hbGxvY190cmFpdHM8X0FsbG9jYXRvcj4gX190cmFpdHM7CisJICBmb3IgKDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCisJICAgIF9fdHJhaXRzOjpjb25zdHJ1Y3QoX19hbGxvYywgc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpKTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBzdGQ6Ol9EZXN0cm95KF9fZmlyc3QsIF9fY3VyLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdW5pbml0aWFsaXplZF9kZWZhdWx0X25fYShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgCisJCQkJYWxsb2NhdG9yPF9UcD4mKQorICAgIHsgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZGVmYXVsdF9uKF9fZmlyc3QsIF9fbik7IH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwKKwkgICB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwKKwkJCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fY3VyID0gX19yZXN1bHQ7CisgICAgICBfX3RyeQorCXsKKwkgIGZvciAoOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0LCArK19fY3VyKQorCSAgICBzdGQ6Ol9Db25zdHJ1Y3Qoc3RkOjpfX2FkZHJlc3NvZigqX19jdXIpLCAqX19maXJzdCk7CisJICByZXR1cm4gX19jdXI7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgc3RkOjpfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLAorCSAgIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IKKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX24sCisJCQkgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LAorCQkJICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeyByZXR1cm4gc3RkOjp1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19yZXN1bHQpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29waWVzIHRoZSByYW5nZSBbZmlyc3QsZmlyc3QrbikgaW50byByZXN1bHQuCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX24gICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGNvcHkuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0IEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gIF9fcmVzdWx0ICsgX19uCisgICAqCisgICAqICBMaWtlIGNvcHlfbigpLCBidXQgZG9lcyBub3QgcmVxdWlyZSBhbiBpbml0aWFsaXplZCBvdXRwdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgorICAgIHVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwKKwkJCSBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsgcmV0dXJuIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX24sIF9fcmVzdWx0LAorCQkJCQkgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9TVExfVU5JTklUSUFMSVpFRF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RsX3ZlY3Rvci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF92ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWM2ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0bF92ZWN0b3IuaApAQCAtMCwwICsxLDE0NTcgQEAKKy8vIFZlY3RvciBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBiaXRzL3N0bF92ZWN0b3IuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3ZlY3Rvcn0KKyAqLworCisjaWZuZGVmIF9TVExfVkVDVE9SX0gKKyNkZWZpbmUgX1NUTF9WRUNUT1JfSCAxCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmg+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGJpdHMvY29uY2VwdF9jaGVjay5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIC8vLyBTZWUgYml0cy9zdGxfZGVxdWUuaCdzIF9EZXF1ZV9iYXNlIGZvciBhbiBleHBsYW5hdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9WZWN0b3JfYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfQWxsb2M+Ojp0ZW1wbGF0ZQorICAgICAgICByZWJpbmQ8X1RwPjo6b3RoZXIgX1RwX2FsbG9jX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19hbGxvY190cmFpdHM8X1RwX2FsbG9jX3R5cGU+Ojpwb2ludGVyCisgICAgICAgCXBvaW50ZXI7CisKKyAgICAgIHN0cnVjdCBfVmVjdG9yX2ltcGwgCisgICAgICA6IHB1YmxpYyBfVHBfYWxsb2NfdHlwZQorICAgICAgeworCXBvaW50ZXIgX01fc3RhcnQ7CisJcG9pbnRlciBfTV9maW5pc2g7CisJcG9pbnRlciBfTV9lbmRfb2Zfc3RvcmFnZTsKKworCV9WZWN0b3JfaW1wbCgpCisJOiBfVHBfYWxsb2NfdHlwZSgpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQorCXsgfQorCisJX1ZlY3Rvcl9pbXBsKF9UcF9hbGxvY190eXBlIGNvbnN0JiBfX2EpCisJOiBfVHBfYWxsb2NfdHlwZShfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQorCXsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCV9WZWN0b3JfaW1wbChfVHBfYWxsb2NfdHlwZSYmIF9fYSkKKwk6IF9UcF9hbGxvY190eXBlKHN0ZDo6bW92ZShfX2EpKSwKKwkgIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCisJeyB9CisjZW5kaWYKKworCXZvaWQgX01fc3dhcF9kYXRhKF9WZWN0b3JfaW1wbCYgX194KQorCXsKKwkgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKKwkgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOworCSAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOworCX0KKyAgICAgIH07CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgX1RwX2FsbG9jX3R5cGUmCisgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHBfYWxsb2NfdHlwZSo+KCZ0aGlzLT5fTV9pbXBsKTsgfQorCisgICAgICBjb25zdCBfVHBfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9UcF9hbGxvY190eXBlKj4oJnRoaXMtPl9NX2ltcGwpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgX1ZlY3Rvcl9iYXNlKCkKKyAgICAgIDogX01faW1wbCgpIHsgfQorCisgICAgICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIDogX01faW1wbChfX2EpIHsgfQorCisgICAgICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbikKKyAgICAgIDogX01faW1wbCgpCisgICAgICB7IF9NX2NyZWF0ZV9zdG9yYWdlKF9fbik7IH0KKworICAgICAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9NX2ltcGwoX19hKQorICAgICAgeyBfTV9jcmVhdGVfc3RvcmFnZShfX24pOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBfVmVjdG9yX2Jhc2UoX1RwX2FsbG9jX3R5cGUmJiBfX2EpCisgICAgICA6IF9NX2ltcGwoc3RkOjptb3ZlKF9fYSkpIHsgfQorCisgICAgICBfVmVjdG9yX2Jhc2UoX1ZlY3Rvcl9iYXNlJiYgX194KQorICAgICAgOiBfTV9pbXBsKHN0ZDo6bW92ZShfX3guX01fZ2V0X1RwX2FsbG9jYXRvcigpKSkKKyAgICAgIHsgdGhpcy0+X01faW1wbC5fTV9zd2FwX2RhdGEoX194Ll9NX2ltcGwpOyB9CisKKyAgICAgIF9WZWN0b3JfYmFzZShfVmVjdG9yX2Jhc2UmJiBfX3gsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9NX2ltcGwoX19hKQorICAgICAgeworCWlmIChfX3guZ2V0X2FsbG9jYXRvcigpID09IF9fYSkKKwkgIHRoaXMtPl9NX2ltcGwuX01fc3dhcF9kYXRhKF9feC5fTV9pbXBsKTsKKwllbHNlCisJICB7CisJICAgIHNpemVfdCBfX24gPSBfX3guX01faW1wbC5fTV9maW5pc2ggLSBfX3guX01faW1wbC5fTV9zdGFydDsKKwkgICAgX01fY3JlYXRlX3N0b3JhZ2UoX19uKTsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB+X1ZlY3Rvcl9iYXNlKCkKKyAgICAgIHsgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJCSAgICAgIC0gdGhpcy0+X01faW1wbC5fTV9zdGFydCk7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIF9WZWN0b3JfaW1wbCBfTV9pbXBsOworCisgICAgICBwb2ludGVyCisgICAgICBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQorICAgICAgeyByZXR1cm4gX19uICE9IDAgPyBfTV9pbXBsLmFsbG9jYXRlKF9fbikgOiAwOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdCBfX24pCisgICAgICB7CisJaWYgKF9fcCkKKwkgIF9NX2ltcGwuZGVhbGxvY2F0ZShfX3AsIF9fbik7CisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01fY3JlYXRlX3N0b3JhZ2Uoc2l6ZV90IF9fbikKKyAgICAgIHsKKwl0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gdGhpcy0+X01fYWxsb2NhdGUoX19uKTsKKwl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQ7CisJdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX247CisgICAgICB9CisgICAgfTsKKworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIHdoaWNoIG9mZmVycyBmaXhlZCB0aW1lIGFjY2VzcyB0bworICAgKiAgaW5kaXZpZHVhbCBlbGVtZW50cyBpbiBhbnkgb3JkZXIuCisgICAqCisgICAqICBAaW5ncm91cCBzZXF1ZW5jZXMKKyAgICoKKyAgICogIEB0cGFyYW0gX1RwICBUeXBlIG9mIGVsZW1lbnQuCisgICAqICBAdHBhcmFtIF9BbGxvYyAgQWxsb2NhdG9yIHR5cGUsIGRlZmF1bHRzIHRvIGFsbG9jYXRvcjxfVHA+LgorICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NiI+cmV2ZXJzaWJsZSBjb250YWluZXI8L2E+LCBhbmQgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjciPnNlcXVlbmNlPC9hPiwgaW5jbHVkaW5nIHRoZQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjgiPm9wdGlvbmFsIHNlcXVlbmNlIHJlcXVpcmVtZW50czwvYT4gd2l0aCB0aGUKKyAgICogICVleGNlcHRpb24gb2YgQGMgcHVzaF9mcm9udCBhbmQgQGMgcG9wX2Zyb250LgorICAgKgorICAgKiAgSW4gc29tZSB0ZXJtaW5vbG9neSBhICV2ZWN0b3IgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGR5bmFtaWMKKyAgICogIEMtc3R5bGUgYXJyYXksIGl0IG9mZmVycyBmYXN0IGFuZCBlZmZpY2llbnQgYWNjZXNzIHRvIGluZGl2aWR1YWwKKyAgICogIGVsZW1lbnRzIGluIGFueSBvcmRlciBhbmQgc2F2ZXMgdGhlIHVzZXIgZnJvbSB3b3JyeWluZyBhYm91dAorICAgKiAgbWVtb3J5IGFuZCBzaXplIGFsbG9jYXRpb24uICBTdWJzY3JpcHRpbmcgKCBAYyBbXSApIGFjY2VzcyBpcworICAgKiAgYWxzbyBwcm92aWRlZCBhcyB3aXRoIEMtc3R5bGUgYXJyYXlzLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+CisgICAgeworICAgICAgLy8gQ29uY2VwdCByZXF1aXJlbWVudHMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dmFsdWVfdHlwZSAgICAgICAgICAgICAgICBfQWxsb2NfdmFsdWVfdHlwZTsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVHAsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczIoX1RwLCBfQWxsb2NfdmFsdWVfdHlwZSwgX1NhbWVUeXBlQ29uY2VwdCkKKyAgICAgIAorICAgICAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+CQkJIF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6X1RwX2FsbG9jX3R5cGUJCSBfVHBfYWxsb2NfdHlwZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfVHBfYWxsb2NfdHlwZT4gIF9BbGxvY190cmFpdHM7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcAkJCQkJIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpwb2ludGVyICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzOjpjb25zdF9wb2ludGVyICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czo6cmVmZXJlbmNlICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2ZWN0b3I+IGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcj4KKyAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+CQkgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc2l6ZV90CQkJCQkgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QJCQkJCSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgICAgICAgICAgICAgICAgICAgICAgIAkJIGFsbG9jYXRvcl90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CisgICAgICB1c2luZyBfQmFzZTo6X01faW1wbDsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfVHBfYWxsb2NhdG9yOworCisgICAgcHVibGljOgorICAgICAgLy8gWzIzLjIuNC4xXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisgICAgICAvLyAoYXNzaWduKCkgYW5kIGdldF9hbGxvY2F0b3IoKSBhcmUgYWxzbyBsaXN0ZWQgaW4gdGhpcyBzZWN0aW9uKQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgbm8gZWxlbWVudHMuCisgICAgICAgKi8KKyAgICAgIHZlY3RvcigpCisgICAgICA6IF9CYXNlKCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICV2ZWN0b3Igd2l0aCBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfQmFzZShfX2EpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGVzIGEgJXZlY3RvciB3aXRoIGRlZmF1bHQgY29uc3RydWN0ZWQgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX24gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gaW5pdGlhbGx5IGNyZWF0ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGZpbGxzIHRoZSAldmVjdG9yIHdpdGggQGEgX19uIGRlZmF1bHQKKyAgICAgICAqICBjb25zdHJ1Y3RlZCBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2EpCisgICAgICB7IF9NX2RlZmF1bHRfaW5pdGlhbGl6ZShfX24pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICV2ZWN0b3Igd2l0aCBjb3BpZXMgb2YgYW4gZXhlbXBsYXIgZWxlbWVudC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICogIEBwYXJhbSAgX192YWx1ZSAgQW4gZWxlbWVudCB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgY29uc3RydWN0b3IgZmlsbHMgdGhlICV2ZWN0b3Igd2l0aCBAYSBfX24gY29waWVzIG9mIEBhIF9fdmFsdWUuCisgICAgICAgKi8KKyAgICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVlLAorCSAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19hKQorICAgICAgeyBfTV9maWxsX2luaXRpYWxpemUoX19uLCBfX3ZhbHVlKTsgfQorI2Vsc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlcyBhICV2ZWN0b3Igd2l0aCBjb3BpZXMgb2YgYW4gZXhlbXBsYXIgZWxlbWVudC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBpbml0aWFsbHkgY3JlYXRlLgorICAgICAgICogIEBwYXJhbSAgX192YWx1ZSAgQW4gZWxlbWVudCB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSAgX19hICBBbiBhbGxvY2F0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgY29uc3RydWN0b3IgZmlsbHMgdGhlICV2ZWN0b3Igd2l0aCBAYSBfX24gY29waWVzIG9mIEBhIF9fdmFsdWUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSA9IHZhbHVlX3R5cGUoKSwKKwkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9fYSkKKyAgICAgIHsgX01fZmlsbF9pbml0aWFsaXplKF9fbiwgX192YWx1ZSk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVWZWN0b3IgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQSAldmVjdG9yIG9mIGlkZW50aWNhbCBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICV2ZWN0b3IgdXNlcyBhIGNvcHkgb2YgdGhlIGFsbG9jYXRpb24KKyAgICAgICAqICBvYmplY3QgdXNlZCBieSBAYSBfX3guICBBbGwgdGhlIGVsZW1lbnRzIG9mIEBhIF9feCBhcmUgY29waWVkLAorICAgICAgICogIGJ1dCBhbnkgZXh0cmEgbWVtb3J5IGluCisgICAgICAgKiAgQGEgX194IChmb3IgZmFzdCBleHBhbnNpb24pIHdpbGwgbm90IGJlIGNvcGllZC4KKyAgICAgICAqLworICAgICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KQorICAgICAgOiBfQmFzZShfX3guc2l6ZSgpLAorICAgICAgICBfQWxsb2NfdHJhaXRzOjpfU19zZWxlY3Rfb25fY29weShfX3guX01fZ2V0X1RwX2FsbG9jYXRvcigpKSkKKyAgICAgIHsgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPQorCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9feC5iZWdpbigpLCBfX3guZW5kKCksCisJCQkJICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCQkgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlVmVjdG9yIG1vdmUgY29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJXZlY3RvciBvZiBpZGVudGljYWwgZWxlbWVudCBhbmQgYWxsb2NhdG9yIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAldmVjdG9yIGNvbnRhaW5zIHRoZSBleGFjdCBjb250ZW50cyBvZiBAYSBfX3guCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIF9feCBhcmUgYSB2YWxpZCwgYnV0IHVuc3BlY2lmaWVkICV2ZWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZlY3Rvcih2ZWN0b3ImJiBfX3gpIG5vZXhjZXB0CisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKSB7IH0KKworICAgICAgLy8vIENvcHkgY29uc3RydWN0b3Igd2l0aCBhbHRlcm5hdGl2ZSBhbGxvY2F0b3IKKyAgICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIDogX0Jhc2UoX194LnNpemUoKSwgX19hKQorICAgICAgeyB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9CisJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX194LmJlZ2luKCksIF9feC5lbmQoKSwKKwkJCQkgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJCSAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisgICAgICB9CisKKyAgICAgIC8vLyBNb3ZlIGNvbnN0cnVjdG9yIHdpdGggYWx0ZXJuYXRpdmUgYWxsb2NhdG9yCisgICAgICB2ZWN0b3IodmVjdG9yJiYgX19ydiwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fbSkKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9fcnYpLCBfX20pCisgICAgICB7CisJaWYgKF9fcnYuZ2V0X2FsbG9jYXRvcigpICE9IF9fbSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPQorCSAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfYShfX3J2LmJlZ2luKCksIF9fcnYuZW5kKCksCisJCQkJCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCQkJICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICBfX3J2LmNsZWFyKCk7CisJICB9CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGEgJXZlY3RvciBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGEgJXZlY3RvciBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgaW5pdGlhbGl6ZXJfbGlzdCBAYSBfX2wuCisgICAgICAgKgorICAgICAgICogIFRoaXMgd2lsbCBjYWxsIHRoZSBlbGVtZW50IHR5cGUncyBjb3B5IGNvbnN0cnVjdG9yIE4gdGltZXMKKyAgICAgICAqICAod2hlcmUgTiBpcyBAYSBfX2wuc2l6ZSgpKSBhbmQgZG8gbm8gbWVtb3J5IHJlYWxsb2NhdGlvbi4KKyAgICAgICAqLworICAgICAgdmVjdG9yKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fYSkKKyAgICAgIHsKKwlfTV9yYW5nZV9pbml0aWFsaXplKF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCisJCQkgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcoKSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYSAldmVjdG9yIGZyb20gYSByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yLgorICAgICAgICoKKyAgICAgICAqICBDcmVhdGUgYSAldmVjdG9yIGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBmcm9tCisgICAgICAgKiAgW2ZpcnN0LGxhc3QpLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgaXRlcmF0b3JzIGFyZSBmb3J3YXJkLCBiaWRpcmVjdGlvbmFsLCBvcgorICAgICAgICogIHJhbmRvbS1hY2Nlc3MsIHRoZW4gdGhpcyB3aWxsIGNhbGwgdGhlIGVsZW1lbnRzJyBjb3B5CisgICAgICAgKiAgY29uc3RydWN0b3IgTiB0aW1lcyAod2hlcmUgTiBpcyBkaXN0YW5jZShmaXJzdCxsYXN0KSkgYW5kIGRvCisgICAgICAgKiAgbm8gbWVtb3J5IHJlYWxsb2NhdGlvbi4gIEJ1dCBpZiBvbmx5IGlucHV0IGl0ZXJhdG9ycyBhcmUKKyAgICAgICAqICB1c2VkLCB0aGVuIHRoaXMgd2lsbCBkbyBhdCBtb3N0IDJOIGNhbGxzIHRvIHRoZSBjb3B5CisgICAgICAgKiAgY29uc3RydWN0b3IsIGFuZCBsb2dOIG1lbW9yeSByZWFsbG9jYXRpb25zLgorICAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisgICAgICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19hKQorICAgICAgICB7IF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfX2ZhbHNlX3R5cGUoKSk7IH0KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2EpCisgICAgICAgIHsKKwkgIC8vIENoZWNrIHdoZXRoZXIgaXQncyBhbiBpbnRlZ3JhbCB0eXBlLiAgSWYgc28sIGl0J3Mgbm90IGFuIGl0ZXJhdG9yLgorCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworCX0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBUaGUgZHRvciBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCBub3RlIHRoYXQgaWYgdGhlCisgICAgICAgKiAgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcworICAgICAgICogIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIH52ZWN0b3IoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyBzdGQ6Ol9EZXN0cm95KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJVZlY3RvciBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX194ICBBICV2ZWN0b3Igb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgQWxsIHRoZSBlbGVtZW50cyBvZiBAYSBfX3ggYXJlIGNvcGllZCwgYnV0IGFueSBleHRyYSBtZW1vcnkgaW4KKyAgICAgICAqICBAYSBfX3ggKGZvciBmYXN0IGV4cGFuc2lvbikgd2lsbCBub3QgYmUgY29waWVkLiAgVW5saWtlIHRoZQorICAgICAgICogIGNvcHkgY29uc3RydWN0b3IsIHRoZSBhbGxvY2F0b3Igb2JqZWN0IGlzIG5vdCBjb3BpZWQuCisgICAgICAgKi8KKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9feCk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgICVWZWN0b3IgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX194ICBBICV2ZWN0b3Igb2YgaWRlbnRpY2FsIGVsZW1lbnQgYW5kIGFsbG9jYXRvciB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIF9feCBhcmUgbW92ZWQgaW50byB0aGlzICV2ZWN0b3IgKHdpdGhvdXQgY29weWluZywKKyAgICAgICAqICBpZiB0aGUgYWxsb2NhdG9ycyBwZXJtaXQgaXQpLgorICAgICAgICogIEBhIF9feCBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgJXZlY3Rvci4KKyAgICAgICAqLworICAgICAgdmVjdG9yJgorICAgICAgb3BlcmF0b3I9KHZlY3RvciYmIF9feCkgbm9leGNlcHQoX0FsbG9jX3RyYWl0czo6X1Nfbm90aHJvd19tb3ZlKCkpCisgICAgICB7CisgICAgICAgIGNvbnN0ZXhwciBib29sIF9fbW92ZV9zdG9yYWdlID0KKyAgICAgICAgICBfQWxsb2NfdHJhaXRzOjpfU19wcm9wYWdhdGVfb25fbW92ZV9hc3NpZ24oKQorICAgICAgICAgIHx8IF9BbGxvY190cmFpdHM6Ol9TX2Fsd2F5c19lcXVhbCgpOworICAgICAgICBfTV9tb3ZlX2Fzc2lnbihzdGQ6Om1vdmUoX194KSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19tb3ZlX3N0b3JhZ2U+KCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlVmVjdG9yIGxpc3QgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICV2ZWN0b3Igd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyIGxpc3QgQGEgX19sLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAldmVjdG9yIGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAldmVjdG9yJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdmVjdG9yJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmFzc2lnbihfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ25zIGEgZ2l2ZW4gdmFsdWUgdG8gYSAldmVjdG9yLgorICAgICAgICogIEBwYXJhbSAgX19uICBOdW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgYXNzaWduZWQuCisgICAgICAgKiAgQHBhcmFtICBfX3ZhbCAgVmFsdWUgdG8gYmUgYXNzaWduZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAldmVjdG9yIHdpdGggQGEgX19uIGNvcGllcyBvZiB0aGUgZ2l2ZW4KKyAgICAgICAqICB2YWx1ZS4gIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlCisgICAgICAgKiAgJXZlY3RvciBhbmQgdGhhdCB0aGUgcmVzdWx0aW5nICV2ZWN0b3IncyBzaXplIGlzIHRoZSBzYW1lIGFzCisgICAgICAgKiAgdGhlIG51bWJlciBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCisgICAgICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhIHJhbmdlIHRvIGEgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSAldmVjdG9yIHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUKKyAgICAgICAqICByYW5nZSBbX19maXJzdCxfX2xhc3QpLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAldmVjdG9yIGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAldmVjdG9yJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX19mYWxzZV90eXBlKCkpOyB9CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgLy8gQ2hlY2sgd2hldGhlciBpdCdzIGFuIGludGVncmFsIHR5cGUuICBJZiBzbywgaXQncyBub3QgYW4gaXRlcmF0b3IuCisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKwl9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWducyBhbiBpbml0aWFsaXplciBsaXN0IHRvIGEgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhICV2ZWN0b3Igd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluIHRoZQorICAgICAgICogIGluaXRpYWxpemVyIGxpc3QgQGEgX19sLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAldmVjdG9yIGFuZAorICAgICAgICogIHRoYXQgdGhlIHJlc3VsdGluZyAldmVjdG9yJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICAvLy8gR2V0IGEgY29weSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gb2JqZWN0LgorICAgICAgdXNpbmcgX0Jhc2U6OmdldF9hbGxvY2F0b3I7CisKKyAgICAgIC8vIGl0ZXJhdG9ycworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIG9yZGluYXJ5CisgICAgICAgKiAgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUKKyAgICAgICAqICBmaXJzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9zdGFydCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gb3JkaW5hcnkKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QKKyAgICAgICAqICB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICBvcmRpbmFyeSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGxhc3QgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIHJldmVyc2UKKyAgICAgICAqICBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZQorICAgICAgICogIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbiBpcyBkb25lCisgICAgICAgKiAgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byBvbmUgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSAldmVjdG9yLiAgSXRlcmF0aW9uCisgICAgICAgKiAgaXMgZG9uZSBpbiByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZQorICAgICAgICogIGZpcnN0IGVsZW1lbnQgaW4gdGhlICV2ZWN0b3IuICBJdGVyYXRpb24gaXMgZG9uZSBpbiBvcmRpbmFyeQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9zdGFydCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0CisgICAgICAgKiAgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbiBpcyBkb25lIGluCisgICAgICAgKiAgb3JkaW5hcnkgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01faW1wbC5fTV9maW5pc2gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbiBpcyBkb25lIGluCisgICAgICAgKiAgcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gb25lIGJlZm9yZSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgJXZlY3Rvci4gIEl0ZXJhdGlvbgorICAgICAgICogIGlzIGRvbmUgaW4gcmV2ZXJzZSBlbGVtZW50IG9yZGVyLgorICAgICAgICovCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8gWzIzLjIuNC4yXSBjYXBhY2l0eQorICAgICAgLyoqICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICV2ZWN0b3IuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHNpemVfdHlwZSh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisKKyAgICAgIC8qKiAgUmV0dXJucyB0aGUgc2l6ZSgpIG9mIHRoZSBsYXJnZXN0IHBvc3NpYmxlICV2ZWN0b3IuICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfQWxsb2NfdHJhaXRzOjptYXhfc2l6ZShfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlc2l6ZXMgdGhlICV2ZWN0b3IgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX25ld19zaXplICBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICV2ZWN0b3Igc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCAlcmVzaXplIHRoZSAldmVjdG9yIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAqICBudW1iZXIgb2YgZWxlbWVudHMuICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAqICAldmVjdG9yJ3MgY3VycmVudCBzaXplIHRoZSAldmVjdG9yIGlzIHRydW5jYXRlZCwgb3RoZXJ3aXNlCisgICAgICAgKiAgZGVmYXVsdCBjb25zdHJ1Y3RlZCBlbGVtZW50cyBhcmUgYXBwZW5kZWQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkKKyAgICAgIHsKKwlpZiAoX19uZXdfc2l6ZSA+IHNpemUoKSkKKwkgIF9NX2RlZmF1bHRfYXBwZW5kKF9fbmV3X3NpemUgLSBzaXplKCkpOworCWVsc2UgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCisJICBfTV9lcmFzZV9hdF9lbmQodGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9fbmV3X3NpemUpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlc2l6ZXMgdGhlICV2ZWN0b3IgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX25ld19zaXplICBOdW1iZXIgb2YgZWxlbWVudHMgdGhlICV2ZWN0b3Igc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKiAgQHBhcmFtICBfX3ggIERhdGEgd2l0aCB3aGljaCBuZXcgZWxlbWVudHMgc2hvdWxkIGJlIHBvcHVsYXRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsICVyZXNpemUgdGhlICV2ZWN0b3IgdG8gdGhlIHNwZWNpZmllZAorICAgICAgICogIG51bWJlciBvZiBlbGVtZW50cy4gIElmIHRoZSBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZQorICAgICAgICogICV2ZWN0b3IncyBjdXJyZW50IHNpemUgdGhlICV2ZWN0b3IgaXMgdHJ1bmNhdGVkLCBvdGhlcndpc2UKKyAgICAgICAqICB0aGUgJXZlY3RvciBpcyBleHRlbmRlZCBhbmQgbmV3IGVsZW1lbnRzIGFyZSBwb3B1bGF0ZWQgd2l0aAorICAgICAgICogIGdpdmVuIGRhdGEuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCWlmIChfX25ld19zaXplID4gc2l6ZSgpKQorCSAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOworCWVsc2UgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCisJICBfTV9lcmFzZV9hdF9lbmQodGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9fbmV3X3NpemUpOworICAgICAgfQorI2Vsc2UKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVzaXplcyB0aGUgJXZlY3RvciB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fbmV3X3NpemUgIE51bWJlciBvZiBlbGVtZW50cyB0aGUgJXZlY3RvciBzaG91bGQgY29udGFpbi4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB3aXRoIHdoaWNoIG5ldyBlbGVtZW50cyBzaG91bGQgYmUgcG9wdWxhdGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgJXJlc2l6ZSB0aGUgJXZlY3RvciB0byB0aGUgc3BlY2lmaWVkCisgICAgICAgKiAgbnVtYmVyIG9mIGVsZW1lbnRzLiAgSWYgdGhlIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICAgICAgKiAgJXZlY3RvcidzIGN1cnJlbnQgc2l6ZSB0aGUgJXZlY3RvciBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZQorICAgICAgICogIHRoZSAldmVjdG9yIGlzIGV4dGVuZGVkIGFuZCBuZXcgZWxlbWVudHMgYXJlIHBvcHVsYXRlZCB3aXRoCisgICAgICAgKiAgZ2l2ZW4gZGF0YS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCB2YWx1ZV90eXBlIF9feCA9IHZhbHVlX3R5cGUoKSkKKyAgICAgIHsKKwlpZiAoX19uZXdfc2l6ZSA+IHNpemUoKSkKKwkgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKKwllbHNlIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQorCSAgX01fZXJhc2VfYXRfZW5kKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX25ld19zaXplKTsKKyAgICAgIH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqICBBIG5vbi1iaW5kaW5nIHJlcXVlc3QgdG8gcmVkdWNlIGNhcGFjaXR5KCkgdG8gc2l6ZSgpLiAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNocmlua190b19maXQoKQorICAgICAgeyBfTV9zaHJpbmtfdG9fZml0KCk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCB0aGUgJXZlY3RvciBjYW4KKyAgICAgICAqICBob2xkIGJlZm9yZSBuZWVkaW5nIHRvIGFsbG9jYXRlIG1vcmUgbWVtb3J5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNhcGFjaXR5KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHNpemVfdHlwZSh0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJCQkgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIHRydWUgaWYgdGhlICV2ZWN0b3IgaXMgZW1wdHkuICAoVGh1cyBiZWdpbigpIHdvdWxkCisgICAgICAgKiAgZXF1YWwgZW5kKCkuKQorICAgICAgICovCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXR0ZW1wdCB0byBwcmVhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBzcGVjaWZpZWQgbnVtYmVyIG9mCisgICAgICAgKiAgICAgICAgICBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVpcmVkLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIEBhIG4gZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHJlc2VydmUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlCisgICAgICAgKiAgJXZlY3RvciB0byBob2xkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVsZW1lbnRzLiAgSWYgdGhlCisgICAgICAgKiAgbnVtYmVyIHJlcXVlc3RlZCBpcyBtb3JlIHRoYW4gbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzCisgICAgICAgKiAgdGhyb3duLgorICAgICAgICoKKyAgICAgICAqICBUaGUgYWR2YW50YWdlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhhdCBpZiBvcHRpbWFsIGNvZGUgaXMgYQorICAgICAgICogIG5lY2Vzc2l0eSBhbmQgdGhlIHVzZXIgY2FuIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCisgICAgICAgKiAgdGhhdCB3aWxsIGJlIHJlcXVpcmVkLCB0aGUgdXNlciBjYW4gcmVzZXJ2ZSB0aGUgbWVtb3J5IGluCisgICAgICAgKiAgJWFkdmFuY2UsIGFuZCB0aHVzIHByZXZlbnQgYSBwb3NzaWJsZSByZWFsbG9jYXRpb24gb2YgbWVtb3J5CisgICAgICAgKiAgYW5kIGNvcHlpbmcgb2YgJXZlY3RvciBkYXRhLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNlcnZlKHNpemVfdHlwZSBfX24pOworCisgICAgICAvLyBlbGVtZW50IGFjY2VzcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdWJzY3JpcHQgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19uIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBmb3Igd2hpY2ggZGF0YSBzaG91bGQgYmUKKyAgICAgICAqICBhY2Nlc3NlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkL3dyaXRlIHJlZmVyZW5jZSB0byBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdG9yIGFsbG93cyBmb3IgZWFzeSwgYXJyYXktc3R5bGUsIGRhdGEgYWNjZXNzLgorICAgICAgICogIE5vdGUgdGhhdCBkYXRhIGFjY2VzcyB3aXRoIHRoaXMgb3BlcmF0b3IgaXMgdW5jaGVja2VkIGFuZAorICAgICAgICogIG91dF9vZl9yYW5nZSBsb29rdXBzIGFyZSBub3QgZGVmaW5lZC4gKEZvciBjaGVja2VkIGxvb2t1cHMKKyAgICAgICAqICBzZWUgYXQoKS4pCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gKih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ICsgX19uKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN1YnNjcmlwdCBhY2Nlc3MgdG8gdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSAldmVjdG9yLgorICAgICAgICogIEBwYXJhbSBfX24gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IGZvciB3aGljaCBkYXRhIHNob3VsZCBiZQorICAgICAgICogIGFjY2Vzc2VkLgorICAgICAgICogIEByZXR1cm4gIFJlYWQtb25seSAoY29uc3RhbnQpIHJlZmVyZW5jZSB0byBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIG9wZXJhdG9yIGFsbG93cyBmb3IgZWFzeSwgYXJyYXktc3R5bGUsIGRhdGEgYWNjZXNzLgorICAgICAgICogIE5vdGUgdGhhdCBkYXRhIGFjY2VzcyB3aXRoIHRoaXMgb3BlcmF0b3IgaXMgdW5jaGVja2VkIGFuZAorICAgICAgICogIG91dF9vZl9yYW5nZSBsb29rdXBzIGFyZSBub3QgZGVmaW5lZC4gKEZvciBjaGVja2VkIGxvb2t1cHMKKyAgICAgICAqICBzZWUgYXQoKS4pCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gKih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ICsgX19uKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgLy8vIFNhZmV0eSBjaGVjayB1c2VkIG9ubHkgZnJvbSBhdCgpLgorICAgICAgdm9pZAorICAgICAgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlpZiAoX19uID49IHRoaXMtPnNpemUoKSkKKwkgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigidmVjdG9yOjpfTV9yYW5nZV9jaGVjayIpKTsKKyAgICAgIH0KKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19uIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBmb3Igd2hpY2ggZGF0YSBzaG91bGQgYmUKKyAgICAgICAqICBhY2Nlc3NlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkL3dyaXRlIHJlZmVyZW5jZSB0byBkYXRhLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fbiBpcyBhbiBpbnZhbGlkIGluZGV4LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGZvciBzYWZlciBkYXRhIGFjY2Vzcy4gIFRoZSBwYXJhbWV0ZXIKKyAgICAgICAqICBpcyBmaXJzdCBjaGVja2VkIHRoYXQgaXQgaXMgaW4gdGhlIHJhbmdlIG9mIHRoZSB2ZWN0b3IuICBUaGUKKyAgICAgICAqICBmdW5jdGlvbiB0aHJvd3Mgb3V0X29mX3JhbmdlIGlmIHRoZSBjaGVjayBmYWlscy4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBhdChzaXplX3R5cGUgX19uKQorICAgICAgeworCV9NX3JhbmdlX2NoZWNrKF9fbik7CisJcmV0dXJuICgqdGhpcylbX19uXTsgCisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19uIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBmb3Igd2hpY2ggZGF0YSBzaG91bGQgYmUKKyAgICAgICAqICBhY2Nlc3NlZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gZGF0YS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX24gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyCisgICAgICAgKiAgaXMgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgdmVjdG9yLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhyb3dzIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlfTV9yYW5nZV9jaGVjayhfX24pOworCXJldHVybiAoKnRoaXMpW19fbl07CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhdCB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAldmVjdG9yLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBvZiB0aGUgJXZlY3Rvci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAldmVjdG9yLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlCisgICAgICAgKiAgbGFzdCBlbGVtZW50IG9mIHRoZSAldmVjdG9yLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDQ2NC4gU3VnZ2VzdGlvbiBmb3IgbmV3IG1lbWJlciBmdW5jdGlvbnMgaW4gc3RhbmRhcmQgY29udGFpbmVycy4KKyAgICAgIC8vIGRhdGEgYWNjZXNzCisgICAgICAvKioKKyAgICAgICAqICAgUmV0dXJucyBhIHBvaW50ZXIgc3VjaCB0aGF0IFtkYXRhKCksIGRhdGEoKSArIHNpemUoKSkgaXMgYSB2YWxpZAorICAgICAgICogICByYW5nZS4gIEZvciBhIG5vbi1lbXB0eSAldmVjdG9yLCBkYXRhKCkgPT0gJmZyb250KCkuCisgICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBfVHAqCisjZWxzZQorICAgICAgcG9pbnRlcgorI2VuZGlmCisgICAgICBkYXRhKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoZnJvbnQoKSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0IF9UcCoKKyNlbHNlCisgICAgICBjb25zdF9wb2ludGVyCisjZW5kaWYKKyAgICAgIGRhdGEoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihmcm9udCgpKTsgfQorCisgICAgICAvLyBbMjMuMi40LjNdIG1vZGlmaWVycworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBZGQgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSAldmVjdG9yLgorICAgICAgICogIEBwYXJhbSAgX194ICBEYXRhIHRvIGJlIGFkZGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhbgorICAgICAgICogIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgJXZlY3RvciBhbmQgYXNzaWducyB0aGUgZ2l2ZW4gZGF0YQorICAgICAgICogIHRvIGl0LiAgRHVlIHRvIHRoZSBuYXR1cmUgb2YgYSAldmVjdG9yIHRoaXMgb3BlcmF0aW9uIGNhbiBiZQorICAgICAgICogIGRvbmUgaW4gY29uc3RhbnQgdGltZSBpZiB0aGUgJXZlY3RvciBoYXMgcHJlYWxsb2NhdGVkIHNwYWNlCisgICAgICAgKiAgYXZhaWxhYmxlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwdXNoX2JhY2soY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCWlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlKQorCSAgeworCSAgICBfQWxsb2NfdHJhaXRzOjpjb25zdHJ1Y3QodGhpcy0+X01faW1wbCwgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3gpOworCSAgICArK3RoaXMtPl9NX2ltcGwuX01fZmluaXNoOworCSAgfQorCWVsc2UKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJICBfTV9lbXBsYWNlX2JhY2tfYXV4KF9feCk7CisjZWxzZQorCSAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKKyNlbmRpZgorICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IGVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9iYWNrKF9BcmdzJiYuLi4gX19hcmdzKTsKKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZXMgbGFzdCBlbGVtZW50LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGlzIGEgdHlwaWNhbCBzdGFjayBvcGVyYXRpb24uIEl0IHNocmlua3MgdGhlICV2ZWN0b3IgYnkgb25lLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgbm8gZGF0YSBpcyByZXR1cm5lZCwgYW5kIGlmIHRoZSBsYXN0IGVsZW1lbnQncworICAgICAgICogIGRhdGEgaXMgbmVlZGVkLCBpdCBzaG91bGQgYmUgcmV0cmlldmVkIGJlZm9yZSBwb3BfYmFjaygpIGlzCisgICAgICAgKiAgY2FsbGVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwb3BfYmFjaygpCisgICAgICB7CisJLS10aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwlfQWxsb2NfdHJhaXRzOjpkZXN0cm95KHRoaXMtPl9NX2ltcGwsIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhbiBvYmplY3QgaW4gJXZlY3RvciBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fYXJncyAgQXJndW1lbnRzLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBpbnNlcnRlZCBkYXRhLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGFuIG9iamVjdCBvZiB0eXBlIFQgY29uc3RydWN0ZWQKKyAgICAgICAqICB3aXRoIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSBiZWZvcmUgdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBraW5kIG9mIG9wZXJhdGlvbiBjb3VsZCBiZSBleHBlbnNpdmUgZm9yIGEgJXZlY3RvcgorICAgICAgICogIGFuZCBpZiBpdCBpcyBmcmVxdWVudGx5IHVzZWQgdGhlIHVzZXIgc2hvdWxkIGNvbnNpZGVyIHVzaW5nCisgICAgICAgKiAgc3RkOjpsaXN0LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgZW1wbGFjZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncyk7CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGdpdmVuIHZhbHVlIGludG8gJXZlY3RvciBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZGF0YS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhIGNvcHkgb2YgdGhlIGdpdmVuIHZhbHVlIGJlZm9yZQorICAgICAgICogIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uICBOb3RlIHRoYXQgdGhpcyBraW5kIG9mIG9wZXJhdGlvbgorICAgICAgICogIGNvdWxkIGJlIGV4cGVuc2l2ZSBmb3IgYSAldmVjdG9yIGFuZCBpZiBpdCBpcyBmcmVxdWVudGx5CisgICAgICAgKiAgdXNlZCB0aGUgdXNlciBzaG91bGQgY29uc2lkZXIgdXNpbmcgc3RkOjpsaXN0LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydHMgZ2l2ZW4gcnZhbHVlIGludG8gJXZlY3RvciBiZWZvcmUgc3BlY2lmaWVkIGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRGF0YSB0byBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZGF0YS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBhIGNvcHkgb2YgdGhlIGdpdmVuIHJ2YWx1ZSBiZWZvcmUKKyAgICAgICAqICB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLiAgTm90ZSB0aGF0IHRoaXMga2luZCBvZiBvcGVyYXRpb24KKyAgICAgICAqICBjb3VsZCBiZSBleHBlbnNpdmUgZm9yIGEgJXZlY3RvciBhbmQgaWYgaXQgaXMgZnJlcXVlbnRseQorICAgICAgICogIHVzZWQgdGhlIHVzZXIgc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHN0ZDo6bGlzdC4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyByZXR1cm4gZW1wbGFjZShfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnRzIGFuIGluaXRpYWxpemVyX2xpc3QgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIGludG8gdGhlICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnNlcnQgY29waWVzIG9mIHRoZSBkYXRhIGluIHRoZSAKKyAgICAgICAqICBpbml0aWFsaXplcl9saXN0IEBhIGwgaW50byB0aGUgJXZlY3RvciBiZWZvcmUgdGhlIGxvY2F0aW9uCisgICAgICAgKiAgc3BlY2lmaWVkIGJ5IEBhIHBvc2l0aW9uLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBraW5kIG9mIG9wZXJhdGlvbiBjb3VsZCBiZSBleHBlbnNpdmUgZm9yIGEKKyAgICAgICAqICAldmVjdG9yIGFuZCBpZiBpdCBpcyBmcmVxdWVudGx5IHVzZWQgdGhlIHVzZXIgc2hvdWxkCisgICAgICAgKiAgY29uc2lkZXIgdXNpbmcgc3RkOjpsaXN0LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IHRoaXMtPmluc2VydChfX3Bvc2l0aW9uLCBfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhIG51bWJlciBvZiBjb3BpZXMgb2YgZ2l2ZW4gZGF0YSBpbnRvIHRoZSAldmVjdG9yLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgaW50byB0aGUgJXZlY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX194ICBEYXRhIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgaW5zZXJ0IGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb3BpZXMgb2YKKyAgICAgICAqICB0aGUgZ2l2ZW4gZGF0YSBiZWZvcmUgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBAYSBwb3NpdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMga2luZCBvZiBvcGVyYXRpb24gY291bGQgYmUgZXhwZW5zaXZlIGZvciBhCisgICAgICAgKiAgJXZlY3RvciBhbmQgaWYgaXQgaXMgZnJlcXVlbnRseSB1c2VkIHRoZSB1c2VyIHNob3VsZAorICAgICAgICogIGNvbnNpZGVyIHVzaW5nIHN0ZDo6bGlzdC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0cyBhIHJhbmdlIGludG8gdGhlICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBBbiBpdGVyYXRvciBpbnRvIHRoZSAldmVjdG9yLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluc2VydCBjb3BpZXMgb2YgdGhlIGRhdGEgaW4gdGhlIHJhbmdlCisgICAgICAgKiAgW19fZmlyc3QsX19sYXN0KSBpbnRvIHRoZSAldmVjdG9yIGJlZm9yZSB0aGUgbG9jYXRpb24gc3BlY2lmaWVkCisgICAgICAgKiAgYnkgQGEgcG9zLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBraW5kIG9mIG9wZXJhdGlvbiBjb3VsZCBiZSBleHBlbnNpdmUgZm9yIGEKKyAgICAgICAqICAldmVjdG9yIGFuZCBpZiBpdCBpcyBmcmVxdWVudGx5IHVzZWQgdGhlIHVzZXIgc2hvdWxkCisgICAgICAgKiAgY29uc2lkZXIgdXNpbmcgc3RkOjpsaXN0LgorICAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfX2ZhbHNlX3R5cGUoKSk7IH0KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICAvLyBDaGVjayB3aGV0aGVyIGl0J3MgYW4gaW50ZWdyYWwgdHlwZS4gIElmIHNvLCBpdCdzIG5vdCBhbiBpdGVyYXRvci4KKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5cGUgX0ludGVncmFsOworCSAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOworCX0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBlbGVtZW50IGF0IGdpdmVuIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIG5leHQgZWxlbWVudCAob3IgZW5kKCkpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgZXJhc2UgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aHVzCisgICAgICAgKiAgc2hvcnRlbiB0aGUgJXZlY3RvciBieSBvbmUuCisgICAgICAgKgorICAgICAgICogIE5vdGUgVGhpcyBvcGVyYXRpb24gY291bGQgYmUgZXhwZW5zaXZlIGFuZCBpZiBpdCBpcworICAgICAgICogIGZyZXF1ZW50bHkgdXNlZCB0aGUgdXNlciBzaG91bGQgY29uc2lkZXIgdXNpbmcgc3RkOjpsaXN0LgorICAgICAgICogIFRoZSB1c2VyIGlzIGFsc28gY2F1dGlvbmVkIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcworICAgICAgICogIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLAorICAgICAgICogIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LiAgTWFuYWdpbmcKKyAgICAgICAqICB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGEgcmFuZ2Ugb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgQGEgX19sYXN0CisgICAgICAgKiAgICAgICAgICAgcHJpb3IgdG8gZXJhc2luZyAob3IgZW5kKCkpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgZXJhc2UgdGhlIGVsZW1lbnRzIGluIHRoZSByYW5nZQorICAgICAgICogIFtfX2ZpcnN0LF9fbGFzdCkgYW5kIHNob3J0ZW4gdGhlICV2ZWN0b3IgYWNjb3JkaW5nbHkuCisgICAgICAgKgorICAgICAgICogIE5vdGUgVGhpcyBvcGVyYXRpb24gY291bGQgYmUgZXhwZW5zaXZlIGFuZCBpZiBpdCBpcworICAgICAgICogIGZyZXF1ZW50bHkgdXNlZCB0aGUgdXNlciBzaG91bGQgY29uc2lkZXIgdXNpbmcgc3RkOjpsaXN0LgorICAgICAgICogIFRoZSB1c2VyIGlzIGFsc28gY2F1dGlvbmVkIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcworICAgICAgICogIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlCisgICAgICAgKiAgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbiBhbnkgd2F5LgorICAgICAgICogIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICV2ZWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEEgJXZlY3RvciBvZiB0aGUgc2FtZSBlbGVtZW50IGFuZCBhbGxvY2F0b3IgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZXhjaGFuZ2VzIHRoZSBlbGVtZW50cyBiZXR3ZWVuIHR3byB2ZWN0b3JzIGluIGNvbnN0YW50IHRpbWUuCisgICAgICAgKiAgKFRocmVlIHBvaW50ZXJzLCBzbyBpdCBzaG91bGQgYmUgcXVpdGUgZmFzdC4pCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBnbG9iYWwgc3RkOjpzd2FwKCkgZnVuY3Rpb24gaXMgc3BlY2lhbGl6ZWQgc3VjaCB0aGF0CisgICAgICAgKiAgc3RkOjpzd2FwKHYxLHYyKSB3aWxsIGZlZWQgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcCh2ZWN0b3ImIF9feCkKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJCQlub2V4Y2VwdChfQWxsb2NfdHJhaXRzOjpfU19ub3Rocm93X3N3YXAoKSkKKyNlbmRpZgorICAgICAgeworCXRoaXMtPl9NX2ltcGwuX01fc3dhcF9kYXRhKF9feC5fTV9pbXBsKTsKKwlfQWxsb2NfdHJhaXRzOjpfU19vbl9zd2FwKF9NX2dldF9UcF9hbGxvY2F0b3IoKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIF9feC5fTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBFcmFzZXMgYWxsIHRoZSBlbGVtZW50cy4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZQorICAgICAgICogIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZQorICAgICAgICogIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcworICAgICAgICogIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgX01fZXJhc2VfYXRfZW5kKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvKioKKyAgICAgICAqICBNZW1vcnkgZXhwYW5zaW9uIGhhbmRsZXIuICBVc2VzIHRoZSBtZW1iZXIgYWxsb2NhdGlvbiBmdW5jdGlvbiB0bworICAgICAgICogIG9idGFpbiBAYSBuIGJ5dGVzIG9mIG1lbW9yeSwgYW5kIHRoZW4gY29waWVzIFtmaXJzdCxsYXN0KSBpbnRvIGl0LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICBwb2ludGVyCisgICAgICAgIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sCisJCQkgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIHBvaW50ZXIgX19yZXN1bHQgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX24pOworCSAgX190cnkKKwkgICAgeworCSAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAorCQkJCQkgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICAgICAgcmV0dXJuIF9fcmVzdWx0OworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisKKworICAgICAgLy8gSW50ZXJuYWwgY29uc3RydWN0b3IgZnVuY3Rpb25zIGZvbGxvdy4KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSByYW5nZSBjb25zdHJ1Y3RvciB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpCisgICAgICAgIHsKKwkgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbikpOworCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9CisJICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbik7CisJICBfTV9maWxsX2luaXRpYWxpemUoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pLCBfX3ZhbHVlKTsKKwl9CisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgcmFuZ2UgY29uc3RydWN0b3IgdG8gaW1wbGVtZW50IFsyMy4xLjFdLzkKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJICAgICAgIF9fZmFsc2VfdHlwZSkKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OgorCSAgICBpdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OworCSAgX01fcmFuZ2VfaW5pdGlhbGl6ZShfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CisJfQorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHNlY29uZCBpbml0aWFsaXplX2Rpc3BhdGNoIGFib3ZlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgICAgeworCSAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCSAgICBlbXBsYWNlX2JhY2soKl9fZmlyc3QpOworI2Vsc2UKKwkgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKKyNlbmRpZgorCX0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzZWNvbmQgaW5pdGlhbGl6ZV9kaXNwYXRjaCBhYm92ZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgICAgeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX24pOworCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX247CisJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9CisJICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0LCBfX2xhc3QsCisJCQkJCXRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJfQorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIGZpcnN0IGluaXRpYWxpemVfZGlzcGF0Y2ggYWJvdmUgYW5kIGJ5IHRoZQorICAgICAgLy8gdmVjdG9yKG4sdmFsdWUsYSkgY29uc3RydWN0b3IuCisgICAgICB2b2lkCisgICAgICBfTV9maWxsX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwlzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxsX25fYSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX24sIF9fdmFsdWUsIAorCQkJCSAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSB2ZWN0b3IobikgY29uc3RydWN0b3IuCisgICAgICB2b2lkCisgICAgICBfTV9kZWZhdWx0X2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlzdGQ6Ol9fdW5pbml0aWFsaXplZF9kZWZhdWx0X25fYSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX24sIAorCQkJCQkgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2U7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLy8gSW50ZXJuYWwgYXNzaWduIGZ1bmN0aW9ucyBmb2xsb3cuICBUaGUgKl9hdXggZnVuY3Rpb25zIGRvIHRoZSBhY3R1YWwKKyAgICAgIC8vIGFzc2lnbm1lbnQgd29yayBmb3IgdGhlIHJhbmdlIHZlcnNpb25zLgorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGFzc2lnbiB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzguIEFtYmlndWl0eSBpbiB0aGUgImRvIHRoZSByaWdodCB0aGluZyIgY2xhdXNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCisgICAgICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSByYW5nZSBhc3NpZ24gdG8gaW1wbGVtZW50IFsyMy4xLjFdLzkKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCQkgICBfX2ZhbHNlX3R5cGUpCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjoKKwkgICAgaXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKKwkgIF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOworCX0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzZWNvbmQgYXNzaWduX2Rpc3BhdGNoIGFib3ZlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpOworCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHNlY29uZCBhc3NpZ25fZGlzcGF0Y2ggYWJvdmUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorCQkgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IGFzc2lnbihuLHQpLCBhbmQgdGhlIHJhbmdlIGFzc2lnbiB3aGVuIGl0IHR1cm5zIG91dAorICAgICAgLy8gdG8gYmUgdGhlIHNhbWUgdGhpbmcuCisgICAgICB2b2lkCisgICAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCk7CisKKworICAgICAgLy8gSW50ZXJuYWwgaW5zZXJ0IGZ1bmN0aW9ucyBmb2xsb3cuCisKKyAgICAgIC8vIENhbGxlZCBieSB0aGUgcmFuZ2UgaW5zZXJ0IHRvIGltcGxlbWVudCBbMjMuMS4xXS85CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzOC4gQW1iaWd1aXR5IGluIHRoZSAiZG8gdGhlIHJpZ2h0IHRoaW5nIiBjbGF1c2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2VyPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKKwkJCSAgIF9fdHJ1ZV90eXBlKQorICAgICAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9fdmFsKTsgfQorCisgICAgICAvLyBDYWxsZWQgYnkgdGhlIHJhbmdlIGluc2VydCB0byBpbXBsZW1lbnQgWzIzLjEuMV0vOQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCisgICAgICAgIHsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjoKKwkgICAgaXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKKwkgIF9NX3JhbmdlX2luc2VydChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOworCX0KKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzZWNvbmQgaW5zZXJ0X2Rpc3BhdGNoIGFib3ZlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJCQlfSW5wdXRJdGVyYXRvciBfX2xhc3QsIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBzZWNvbmQgaW5zZXJ0X2Rpc3BhdGNoIGFib3ZlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkJX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpOworCisgICAgICAvLyBDYWxsZWQgYnkgaW5zZXJ0KHAsbix4KSwgYW5kIHRoZSByYW5nZSBpbnNlcnQgd2hlbiBpdCB0dXJucyBvdXQgdG8gYmUKKyAgICAgIC8vIHRoZSBzYW1lIHRoaW5nLgorICAgICAgdm9pZAorICAgICAgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBDYWxsZWQgYnkgcmVzaXplKG4pLgorICAgICAgdm9pZAorICAgICAgX01fZGVmYXVsdF9hcHBlbmQoc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX3Nocmlua190b19maXQoKTsKKyNlbmRpZgorCisgICAgICAvLyBDYWxsZWQgYnkgaW5zZXJ0KHAseCkKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fZW1wbGFjZV9iYWNrX2F1eChfQXJncyYmLi4uIF9fYXJncyk7CisjZW5kaWYKKworICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBsYXR0ZXIuCisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX2NoZWNrX2xlbihzaXplX3R5cGUgX19uLCBjb25zdCBjaGFyKiBfX3MpIGNvbnN0CisgICAgICB7CisJaWYgKG1heF9zaXplKCkgLSBzaXplKCkgPCBfX24pCisJICBfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oX19zKSk7CisKKwljb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBzdGQ6Om1heChzaXplKCksIF9fbik7CisJcmV0dXJuIChfX2xlbiA8IHNpemUoKSB8fCBfX2xlbiA+IG1heF9zaXplKCkpID8gbWF4X3NpemUoKSA6IF9fbGVuOworICAgICAgfQorCisgICAgICAvLyBJbnRlcm5hbCBlcmFzZSBmdW5jdGlvbnMgZm9sbG93LgorCisgICAgICAvLyBDYWxsZWQgYnkgZXJhc2UocTEscTIpLCBjbGVhcigpLCByZXNpemUoKSwgX01fZmlsbF9hc3NpZ24sCisgICAgICAvLyBfTV9hc3NpZ25fYXV4LgorICAgICAgdm9pZAorICAgICAgX01fZXJhc2VfYXRfZW5kKHBvaW50ZXIgX19wb3MpCisgICAgICB7CisJc3RkOjpfRGVzdHJveShfX3BvcywgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX3BvczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBwcml2YXRlOgorICAgICAgLy8gQ29uc3RhbnQtdGltZSBtb3ZlIGFzc2lnbm1lbnQgd2hlbiBzb3VyY2Ugb2JqZWN0J3MgbWVtb3J5IGNhbiBiZQorICAgICAgLy8gbW92ZWQsIGVpdGhlciBiZWNhdXNlIHRoZSBzb3VyY2UncyBhbGxvY2F0b3Igd2lsbCBtb3ZlIHRvbworICAgICAgLy8gb3IgYmVjYXVzZSB0aGUgYWxsb2NhdG9ycyBhcmUgZXF1YWwuCisgICAgICB2b2lkCisgICAgICBfTV9tb3ZlX2Fzc2lnbih2ZWN0b3ImJiBfX3gsIHN0ZDo6dHJ1ZV90eXBlKSBub2V4Y2VwdAorICAgICAgeworCWNvbnN0IHZlY3RvciBfX3RtcChzdGQ6Om1vdmUoKnRoaXMpKTsKKwl0aGlzLT5fTV9pbXBsLl9NX3N3YXBfZGF0YShfX3guX01faW1wbCk7CisJaWYgKF9BbGxvY190cmFpdHM6Ol9TX3Byb3BhZ2F0ZV9vbl9tb3ZlX2Fzc2lnbigpKQorCSAgc3RkOjpfX2FsbG9jX29uX21vdmUoX01fZ2V0X1RwX2FsbG9jYXRvcigpLAorCQkJICAgICAgIF9feC5fTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisgICAgICAvLyBEbyBtb3ZlIGFzc2lnbm1lbnQgd2hlbiBpdCBtaWdodCBub3QgYmUgcG9zc2libGUgdG8gbW92ZSBzb3VyY2UKKyAgICAgIC8vIG9iamVjdCdzIG1lbW9yeSwgcmVzdWx0aW5nIGluIGEgbGluZWFyLXRpbWUgb3BlcmF0aW9uLgorICAgICAgdm9pZAorICAgICAgX01fbW92ZV9hc3NpZ24odmVjdG9yJiYgX194LCBzdGQ6OmZhbHNlX3R5cGUpCisgICAgICB7CisJaWYgKF9feC5fTV9nZXRfVHBfYWxsb2NhdG9yKCkgPT0gdGhpcy0+X01fZ2V0X1RwX2FsbG9jYXRvcigpKQorCSAgX01fbW92ZV9hc3NpZ24oc3RkOjptb3ZlKF9feCksIHN0ZDo6dHJ1ZV90eXBlKCkpOworCWVsc2UKKwkgIHsKKwkgICAgLy8gVGhlIHJ2YWx1ZSdzIGFsbG9jYXRvciBjYW5ub3QgYmUgbW92ZWQgYW5kIGlzIG5vdCBlcXVhbCwKKwkgICAgLy8gc28gd2UgbmVlZCB0byBpbmRpdmlkdWFsbHkgbW92ZSBlYWNoIGVsZW1lbnQuCisJICAgIHRoaXMtPmFzc2lnbihzdGQ6Ol9fbWFrZV9tb3ZlX2lmX25vZXhjZXB0X2l0ZXJhdG9yKF9feC5iZWdpbigpKSwKKwkJCSBzdGQ6Ol9fbWFrZV9tb3ZlX2lmX25vZXhjZXB0X2l0ZXJhdG9yKF9feC5lbmQoKSkpOworCSAgICBfX3guY2xlYXIoKTsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorICAgIH07CisKKworICAvKioKKyAgICogIEBicmllZiAgVmVjdG9yIGVxdWFsaXR5IGNvbXBhcmlzb24uCisgICAqICBAcGFyYW0gIF9feCAgQSAldmVjdG9yLgorICAgKiAgQHBhcmFtICBfX3kgIEEgJXZlY3RvciBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIF9feC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIHRoZSBzaXplIGFuZCBlbGVtZW50cyBvZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwuCisgICAqCisgICAqICBUaGlzIGlzIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiAgSXQgaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZQorICAgKiAgdmVjdG9ycy4gIFZlY3RvcnMgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBpZiB0aGVpciBzaXplcyBhcmUgZXF1YWwsCisgICAqICBhbmQgaWYgY29ycmVzcG9uZGluZyBlbGVtZW50cyBjb21wYXJlIGVxdWFsLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gKF9feC5zaXplKCkgPT0gX195LnNpemUoKQorCSAgICAgICYmIHN0ZDo6ZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBWZWN0b3Igb3JkZXJpbmcgcmVsYXRpb24uCisgICAqICBAcGFyYW0gIF9feCAgQSAldmVjdG9yLgorICAgKiAgQHBhcmFtICBfX3kgIEEgJXZlY3RvciBvZiB0aGUgc2FtZSB0eXBlIGFzIEBhIF9feC4KKyAgICogIEByZXR1cm4gIFRydWUgaWZmIEBhIF9feCBpcyBsZXhpY29ncmFwaGljYWxseSBsZXNzIHRoYW4gQGEgX195LgorICAgKgorICAgKiAgVGhpcyBpcyBhIHRvdGFsIG9yZGVyaW5nIHJlbGF0aW9uLiAgSXQgaXMgbGluZWFyIGluIHRoZSBzaXplIG9mIHRoZQorICAgKiAgdmVjdG9ycy4gIFRoZSBlbGVtZW50cyBtdXN0IGJlIGNvbXBhcmFibGUgd2l0aCBAYyA8LgorICAgKgorICAgKiAgU2VlIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKSBmb3IgaG93IHRoZSBkZXRlcm1pbmF0aW9uIGlzIG1hZGUuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKKwkJCQkJICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcj09CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KKworICAvLy8gU2VlIHN0ZDo6dmVjdG9yOjpzd2FwKCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX1NUTF9WRUNUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0cmVhbV9pdGVyYXRvci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0cmVhbV9pdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzQ3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RyZWFtX2l0ZXJhdG9yLmgKQEAgLTAsMCArMSwyMjEgQEAKKy8vIFN0cmVhbSBpdGVyYXRvcnMKKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvc3RyZWFtX2l0ZXJhdG9yLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtpdGVyYXRvcn0KKyAqLworCisjaWZuZGVmIF9TVFJFQU1fSVRFUkFUT1JfSAorI2RlZmluZSBfU1RSRUFNX0lURVJBVE9SX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIGl0ZXJhdG9ycworICAgKiBAeworICAgKi8KKworICAvLy8gUHJvdmlkZXMgaW5wdXQgaXRlcmF0b3Igc2VtYW50aWNzIGZvciBzdHJlYW1zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNoYXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LCB0eXBlbmFtZSBfRGlzdCA9IHB0cmRpZmZfdD4KKyAgICBjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfVHAsIF9EaXN0LCBjb25zdCBfVHAqLCBjb25zdCBfVHAmPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9DaGFyVCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgICAgICAgICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBpc3RyZWFtX3R5cGUqCV9NX3N0cmVhbTsKKyAgICAgIF9UcAkJX01fdmFsdWU7CisgICAgICBib29sCQlfTV9vazsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyAgQ29uc3RydWN0IGVuZCBvZiBpbnB1dCBzdHJlYW0gaXRlcmF0b3IuCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgaXN0cmVhbV9pdGVyYXRvcigpCisgICAgICA6IF9NX3N0cmVhbSgwKSwgX01fdmFsdWUoKSwgX01fb2soZmFsc2UpIHt9CisKKyAgICAgIC8vLyAgQ29uc3RydWN0IHN0YXJ0IG9mIGlucHV0IHN0cmVhbSBpdGVyYXRvci4KKyAgICAgIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpCisgICAgICA6IF9NX3N0cmVhbSgmX19zKQorICAgICAgeyBfTV9yZWFkKCk7IH0KKworICAgICAgaXN0cmVhbV9pdGVyYXRvcihjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX29iaikKKyAgICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0cmVhbSksIF9NX3ZhbHVlKF9fb2JqLl9NX3ZhbHVlKSwKKyAgICAgICAgX01fb2soX19vYmouX01fb2spCisgICAgICB7IH0KKworICAgICAgY29uc3QgX1RwJgorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfY29uZChfTV9vaywKKwkJCQlfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19kZXJlZl9pc3RyZWFtKQorCQkJCS5fTV9pdGVyYXRvcigqdGhpcykpOworCXJldHVybiBfTV92YWx1ZTsKKyAgICAgIH0KKworICAgICAgY29uc3QgX1RwKgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CisKKyAgICAgIGlzdHJlYW1faXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfY29uZChfTV9vaywKKwkJCQlfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19pbmNfaXN0cmVhbSkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwlfTV9yZWFkKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpc3RyZWFtX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfY29uZChfTV9vaywKKwkJCQlfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19pbmNfaXN0cmVhbSkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwlpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CisJX01fcmVhZCgpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gKF9NX29rID09IF9feC5fTV9vaykgJiYgKCFfTV9vayB8fCBfTV9zdHJlYW0gPT0gX194Ll9NX3N0cmVhbSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9yZWFkKCkKKyAgICAgIHsKKwlfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CisJaWYgKF9NX29rKQorCSAgeworCSAgICAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOworCSAgICBfTV9vayA9ICpfTV9zdHJlYW0gPyB0cnVlIDogZmFsc2U7CisJICB9CisgICAgICB9CisgICAgfTsKKworICAvLy8gIFJldHVybiB0cnVlIGlmIHggYW5kIHkgYXJlIGJvdGggZW5kIG9yIG5vdCBlbmQsIG9yIHggYW5kIHkgYXJlIHRoZSBzYW1lLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Rpc3Q+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LAorCSAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQorCisgIC8vLyAgUmV0dXJuIGZhbHNlIGlmIHggYW5kIHkgYXJlIGJvdGggZW5kIG9yIG5vdCBlbmQsIG9yIHggYW5kIHkgYXJlIHRoZSBzYW1lLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0PgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKKwkgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpCisgICAgeyByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFByb3ZpZGVzIG91dHB1dCBpdGVyYXRvciBzZW1hbnRpY3MgZm9yIHN0cmVhbXMuCisgICAqCisgICAqICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRvIHdyaXRlIHRvIGFuIG9zdHJlYW0uICBUaGUgdHlwZSBUcCBpcworICAgKiAgdGhlIG9ubHkgdHlwZSB3cml0dGVuIGJ5IHRoaXMgaXRlcmF0b3IgYW5kIHRoZXJlIG11c3QgYmUgYW4KKyAgICogIG9wZXJhdG9yPDwoVHApIGRlZmluZWQuCisgICAqCisgICAqICBAdHBhcmFtICBfVHAgIFRoZSB0eXBlIHRvIHdyaXRlIHRvIHRoZSBvc3RyZWFtLgorICAgKiAgQHRwYXJhbSAgX0NoYXJUICBUaGUgb3N0cmVhbSBjaGFyX3R5cGUuCisgICAqICBAdHBhcmFtICBfVHJhaXRzICBUaGUgb3N0cmVhbSBjaGFyX3RyYWl0cy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQgPSBjaGFyLAorICAgICAgICAgICB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3Mgb3N0cmVhbV9pdGVyYXRvcgorICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZgorICAgICAgdHlwZWRlZiBfQ2hhclQgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzICAgICAgICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CisgICAgICAvL0B9CisKKyAgICBwcml2YXRlOgorICAgICAgb3N0cmVhbV90eXBlKglfTV9zdHJlYW07CisgICAgICBjb25zdCBfQ2hhclQqCV9NX3N0cmluZzsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBDb25zdHJ1Y3QgZnJvbSBhbiBvc3RyZWFtLgorICAgICAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQorCisgICAgICAvKioKKyAgICAgICAqICBDb25zdHJ1Y3QgZnJvbSBhbiBvc3RyZWFtLgorICAgICAgICoKKyAgICAgICAqICBUaGUgZGVsaW1pdGVyIHN0cmluZyBAYSBjIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSBhZnRlciBldmVyeSBUcAorICAgICAgICogIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbS4gIFRoZSBkZWxpbWl0ZXIgaXMgbm90IGNvcGllZCwgYW5kIHRodXMgbXVzdAorICAgICAgICogIG5vdCBiZSBkZXN0cm95ZWQgd2hpbGUgdGhpcyBpdGVyYXRvciBpcyBpbiB1c2UuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19zICBVbmRlcmx5aW5nIG9zdHJlYW0gdG8gd3JpdGUgdG8uCisgICAgICAgKiAgQHBhcmFtICBfX2MgIENoYXJUIGRlbGltaXRlciBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgKi8KKyAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQorICAgICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpICB7IH0KKworICAgICAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNvbnN0IG9zdHJlYW1faXRlcmF0b3ImIF9fb2JqKQorICAgICAgOiBfTV9zdHJlYW0oX19vYmouX01fc3RyZWFtKSwgX01fc3RyaW5nKF9fb2JqLl9NX3N0cmluZykgIHsgfQorCisgICAgICAvLy8gV3JpdGVzIEBhIHZhbHVlIHRvIHVuZGVybHlpbmcgb3N0cmVhbSB1c2luZyBvcGVyYXRvcjw8LiAgSWYKKyAgICAgIC8vLyBjb25zdHJ1Y3RlZCB3aXRoIGRlbGltaXRlciBzdHJpbmcsIHdyaXRlcyBkZWxpbWl0ZXIgdG8gb3N0cmVhbS4KKyAgICAgIG9zdHJlYW1faXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19jb25kKF9NX3N0cmVhbSAhPSAwLAorCQkJCV9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX291dHB1dF9vc3RyZWFtKQorCQkJCS5fTV9pdGVyYXRvcigqdGhpcykpOworCSpfTV9zdHJlYW0gPDwgX192YWx1ZTsKKwlpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG9zdHJlYW1faXRlcmF0b3ImCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgb3N0cmVhbV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgb3N0cmVhbV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIC8vIEB9IGdyb3VwIGl0ZXJhdG9ycworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0cmVhbWJ1Zi50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RyZWFtYnVmLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGQ0NTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0cmVhbWJ1Zi50Y2MKQEAgLTAsMCArMSwxNzUgQEAKKy8vIFN0cmVhbSBidWZmZXIgY2xhc3NlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9zdHJlYW1idWYudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7c3RyZWFtYnVmfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy41ICBTdHJlYW0gYnVmZmVycworLy8KKworI2lmbmRlZiBfU1RSRUFNQlVGX1RDQworI2RlZmluZSBfU1RSRUFNQlVGX1RDQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdHJlYW1zaXplCisgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgeworICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CisgICAgICB3aGlsZSAoX19yZXQgPCBfX24pCisJeworCSAgY29uc3Qgc3RyZWFtc2l6ZSBfX2J1Zl9sZW4gPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOworCSAgaWYgKF9fYnVmX2xlbikKKwkgICAgeworCSAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbGVuID0gc3RkOjptaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CisJICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCB0aGlzLT5ncHRyKCksIF9fbGVuKTsKKwkgICAgICBfX3JldCArPSBfX2xlbjsKKwkgICAgICBfX3MgKz0gX19sZW47CisJICAgICAgdGhpcy0+X19zYWZlX2didW1wKF9fbGVuKTsKKwkgICAgfQorCisJICBpZiAoX19yZXQgPCBfX24pCisJICAgIHsKKwkgICAgICBjb25zdCBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOworCSAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKKwkJeworCQkgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOworCQkgICsrX19yZXQ7CisJCX0KKwkgICAgICBlbHNlCisJCWJyZWFrOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RyZWFtc2l6ZQorICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOworICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQorCXsKKwkgIGNvbnN0IHN0cmVhbXNpemUgX19idWZfbGVuID0gdGhpcy0+ZXBwdHIoKSAtIHRoaXMtPnBwdHIoKTsKKwkgIGlmIChfX2J1Zl9sZW4pCisJICAgIHsKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CisJICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0ZDo6bWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOworCSAgICAgIHRyYWl0c190eXBlOjpjb3B5KHRoaXMtPnBwdHIoKSwgX19zLCBfX2xlbik7CisJICAgICAgX19yZXQgKz0gX19sZW47CisJICAgICAgX19zICs9IF9fbGVuOworCSAgICAgIHRoaXMtPl9fc2FmZV9wYnVtcChfX2xlbik7CisJICAgIH0KKworCSAgaWYgKF9fcmV0IDwgX19uKQorCSAgICB7CisJICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsKKwkgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCisJCXsKKwkJICArK19fcmV0OworCQkgICsrX19zOworCQl9CisJICAgICAgZWxzZQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgLy8gQ29uY2VpdmFibHksIHRoaXMgY291bGQgYmUgdXNlZCB0byBpbXBsZW1lbnQgYnVmZmVyLXRvLWJ1ZmZlcgorICAvLyBjb3BpZXMsIGlmIHRoaXMgd2FzIGV2ZXIgZGVzaXJlZCBpbiBhbiB1bi1hbWJpZ3VvdXMgd2F5IGJ5IHRoZQorICAvLyBzdGFuZGFyZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cmVhbXNpemUKKyAgICBfX2NvcHlfc3RyZWFtYnVmc19lb2YoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKKwkJCSAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQsCisJCQkgIGJvb2wmIF9faW5lb2YpCisgICAgeworICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CisgICAgICBfX2luZW9mID0gdHJ1ZTsKKyAgICAgIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsKKyAgICAgIHdoaWxlICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfVHJhaXRzOjplb2YoKSkpCisJeworCSAgX19jID0gX19zYm91dC0+c3B1dGMoX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYykpOworCSAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX1RyYWl0czo6ZW9mKCkpKQorCSAgICB7CisJICAgICAgX19pbmVvZiA9IGZhbHNlOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICArK19fcmV0OworCSAgX19jID0gX19zYmluLT5zbmV4dGMoKTsKKwl9CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgc3RyZWFtc2l6ZQorICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCisJCSAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQorICAgIHsKKyAgICAgIGJvb2wgX19pbmVvZjsKKyAgICAgIHJldHVybiBfX2NvcHlfc3RyZWFtYnVmc19lb2YoX19zYmluLCBfX3Nib3V0LCBfX2luZW9mKTsKKyAgICB9CisKKyAgLy8gSW5oaWJpdCBpbXBsaWNpdCBpbnN0YW50aWF0aW9ucyBmb3IgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsCisgIC8vIHdoaWNoIGFyZSBkZWZpbmVkIHZpYSBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBlbHNld2hlcmUuCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8Y2hhcj47CisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIHN0cmVhbXNpemUKKyAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAorCQkgICAgICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qKTsKKyAgZXh0ZXJuIHRlbXBsYXRlCisgICAgc3RyZWFtc2l6ZQorICAgIF9fY29weV9zdHJlYW1idWZzX2VvZihiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAorCQkJICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLCBib29sJik7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+OworICBleHRlcm4gdGVtcGxhdGUKKyAgICBzdHJlYW1zaXplCisgICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKKwkJICAgICAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Kik7CisgIGV4dGVybiB0ZW1wbGF0ZQorICAgIHN0cmVhbXNpemUKKyAgICBfX2NvcHlfc3RyZWFtYnVmc19lb2YoYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKKwkJCSAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwgYm9vbCYpOworI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliZTZlOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaApAQCAtMCwwICsxLDQxMiBAQAorLy8gU3RyZWFtYnVmIGl0ZXJhdG9ycworCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2l0ZXJhdG9yfQorICovCisKKyNpZm5kZWYgX1NUUkVBTUJVRl9JVEVSQVRPUl9ICisjZGVmaW5lIF9TVFJFQU1CVUZfSVRFUkFUT1JfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHN0cmVhbWJ1Zj4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICAgIAorICAvKioKKyAgICogQGFkZHRvZ3JvdXAgaXRlcmF0b3JzCisgICAqIEB7CisgICAqLworCisgIC8vIDI0LjUuMyBUZW1wbGF0ZSBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCisgIC8vLyBQcm92aWRlcyBpbnB1dCBpdGVyYXRvciBzZW1hbnRpY3MgZm9yIHN0cmVhbWJ1ZnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIC8vIExXRyA0NDUuCisJCSAgICAgIF9DaGFyVD4KKyNlbHNlCisJCSAgICAgIF9DaGFyVCY+CisjZW5kaWYKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWZzCisgICAgICB0eXBlZGVmIF9DaGFyVAkJCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUJCWludF90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgkJc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgkJaXN0cmVhbV90eXBlOworICAgICAgLy9AfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyPgorCWZyaWVuZCB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfY2hhcjxfQ2hhclQyPjo6X192YWx1ZSwKKwkJICAgICAgICAgICAgICAgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+ID46Ol9fdHlwZQorCWNvcHkoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwKKwkgICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUMj4pOworCisgICAgICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9DaGFyVDI+CisJZnJpZW5kIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVDI+OjpfX3ZhbHVlLCAKKwkJCQkJICAgICAgIF9DaGFyVDIqPjo6X190eXBlCisJX19jb3B5X21vdmVfYTIoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwKKwkJICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUMj4sIF9DaGFyVDIqKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUMj4KKwlmcmllbmQgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUMj46Ol9fdmFsdWUsCisJCQkgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+ID46Ol9fdHlwZQorCWZpbmQoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwKKwkgICAgIGNvbnN0IF9DaGFyVDImKTsKKworICAgIHByaXZhdGU6CisgICAgICAvLyAyNC41LjMgaXN0cmVhbWJ1Zl9pdGVyYXRvcgorICAgICAgLy8gcCAxCisgICAgICAvLyBJZiB0aGUgZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkIChzdHJlYW1idWZfdHlwZTo6c2dldGMoKQorICAgICAgLy8gcmV0dXJucyB0cmFpdHNfdHlwZTo6ZW9mKCkpLCB0aGUgaXRlcmF0b3IgYmVjb21lcyBlcXVhbCB0bworICAgICAgLy8gdGhlICJlbmQgb2Ygc3RyZWFtIiBpdGVyYXRvciB2YWx1ZS4KKyAgICAgIC8vIE5COiBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhlICJlbmQgb2Ygc3RyZWFtIiB2YWx1ZQorICAgICAgLy8gaXMgRU9GLCBvciAtMS4KKyAgICAgIG11dGFibGUgc3RyZWFtYnVmX3R5cGUqCV9NX3NidWY7CisgICAgICBtdXRhYmxlIGludF90eXBlCQlfTV9jOworCisgICAgcHVibGljOgorICAgICAgLy8vICBDb25zdHJ1Y3QgZW5kIG9mIGlucHV0IHN0cmVhbSBpdGVyYXRvci4KKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICA6IF9NX3NidWYoMCksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvciYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICAgICAgfmlzdHJlYW1idWZfaXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisjZW5kaWYKKworICAgICAgLy8vICBDb25zdHJ1Y3Qgc3RhcnQgb2YgaW5wdXQgc3RyZWFtIGl0ZXJhdG9yLgorICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CisKKyAgICAgIC8vLyAgQ29uc3RydWN0IHN0YXJ0IG9mIHN0cmVhbWJ1ZiBpdGVyYXRvci4KKyAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICA6IF9NX3NidWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQorCisgICAgICAvLy8gIFJldHVybiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgcG9pbnRlZCB0byBieSBpdGVyYXRvci4gIFRoaXMgcmV0dXJucworICAgICAgLy8vICBzdHJlYW1idWYuc2dldGMoKS4gIEl0IGNhbm5vdCBiZSBhc3NpZ25lZC4gIE5COiBUaGUgcmVzdWx0IG9mCisgICAgICAvLy8gIG9wZXJhdG9yKigpIG9uIGFuIGVuZCBvZiBzdHJlYW0gaXMgdW5kZWZpbmVkLgorICAgICAgY2hhcl90eXBlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworI2lmZGVmIF9HTElCQ1hYX0RFQlVHX1BFREFOVElDCisJLy8gRGVyZWZlcmVuY2luZyBhIHBhc3QtdGhlLWVuZCBpc3RyZWFtYnVmX2l0ZXJhdG9yIGlzIGEKKwkvLyBsaWJzdGRjKysgZXh0ZW5zaW9uCisJX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoIV9NX2F0X2VvZigpLAorCQkJCV9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2RlcmVmX2lzdHJlYW1idWYpCisJCQkJLl9NX2l0ZXJhdG9yKCp0aGlzKSk7CisjZW5kaWYKKwlyZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7CisgICAgICB9CisKKyAgICAgIC8vLyBBZHZhbmNlIHRoZSBpdGVyYXRvci4gIENhbGxzIHN0cmVhbWJ1Zi5zYnVtcGMoKS4KKyAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfY29uZCghX01fYXRfZW9mKCksCisJCQkJX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfaW5jX2lzdHJlYW1idWYpCisJCQkJLl9NX2l0ZXJhdG9yKCp0aGlzKSk7CisJaWYgKF9NX3NidWYpCisJICB7CisJICAgIF9NX3NidWYtPnNidW1wYygpOworCSAgICBfTV9jID0gdHJhaXRzX3R5cGU6OmVvZigpOworCSAgfQorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8vIEFkdmFuY2UgdGhlIGl0ZXJhdG9yLiAgQ2FsbHMgc3RyZWFtYnVmLnNidW1wYygpLgorICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoIV9NX2F0X2VvZigpLAorCQkJCV9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2luY19pc3RyZWFtYnVmKQorCQkJCS5fTV9pdGVyYXRvcigqdGhpcykpOworCisJaXN0cmVhbWJ1Zl9pdGVyYXRvciBfX29sZCA9ICp0aGlzOworCWlmIChfTV9zYnVmKQorCSAgeworCSAgICBfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCk7CisJICAgIF9NX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisJICB9CisJcmV0dXJuIF9fb2xkOworICAgICAgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxMTAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjo6ZXF1YWwgbm90IGNvbnN0CisgICAgICAvLyBOQjogdGhlcmUgaXMgYWxzbyBudW1iZXIgMTExIChOQUQsIEZ1dHVyZSkgcGVuZGluZyBvbiB0aGlzIGZ1bmN0aW9uLgorICAgICAgLy8vIFJldHVybiB0cnVlIGJvdGggaXRlcmF0b3JzIGFyZSBlbmQgb3IgYm90aCBhcmUgbm90IGVuZC4KKyAgICAgIGJvb2wKKyAgICAgIGVxdWFsKGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3ImIF9fYikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2F0X2VvZigpID09IF9fYi5fTV9hdF9lb2YoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGludF90eXBlCisgICAgICBfTV9nZXQoKSBjb25zdAorICAgICAgeworCWNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworCWludF90eXBlIF9fcmV0ID0gX19lb2Y7CisJaWYgKF9NX3NidWYpCisJICB7CisJICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2MsIF9fZW9mKSkKKwkgICAgICBfX3JldCA9IF9NX2M7CisJICAgIGVsc2UgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+c2dldGMoKSksCisJCQkJCSAgICAgICBfX2VvZikpCisJICAgICAgX01fYyA9IF9fcmV0OworCSAgICBlbHNlCisJICAgICAgX01fc2J1ZiA9IDA7CisJICB9CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICBib29sCisgICAgICBfTV9hdF9lb2YoKSBjb25zdAorICAgICAgeworCWNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOworCXJldHVybiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCisJICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQorICAgIHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKKwkgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCisgICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9CisKKyAgLy8vIFByb3ZpZGVzIG91dHB1dCBpdGVyYXRvciBzZW1hbnRpY3MgZm9yIHN0cmVhbWJ1ZnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICAvL0B7CisgICAgICAvLy8gUHVibGljIHR5cGVkZWZzCisgICAgICB0eXBlZGVmIF9DaGFyVCAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RyYWl0cyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gICBvc3RyZWFtX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVDI+CisJZnJpZW5kIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVDI+OjpfX3ZhbHVlLAorCQkgICAgICAgICAgICAgICAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUMj4gPjo6X190eXBlCisJY29weShpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LAorCSAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPik7CisKKyAgICBwcml2YXRlOgorICAgICAgc3RyZWFtYnVmX3R5cGUqCV9NX3NidWY7CisgICAgICBib29sCQlfTV9mYWlsZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gIENvbnN0cnVjdCBvdXRwdXQgaXRlcmF0b3IgZnJvbSBvc3RyZWFtLgorICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQorCisgICAgICAvLy8gIENvbnN0cnVjdCBvdXRwdXQgaXRlcmF0b3IgZnJvbSBzdHJlYW1idWYuCisgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CisKKyAgICAgIC8vLyAgV3JpdGUgY2hhcmFjdGVyIHRvIHN0cmVhbWJ1Zi4gIENhbGxzIHN0cmVhbWJ1Zi5zcHV0YygpLgorICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKQorICAgICAgeworCWlmICghX01fZmFpbGVkICYmCisJICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksIF9UcmFpdHM6OmVvZigpKSkKKwkgIF9NX2ZhaWxlZCA9IHRydWU7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gUmV0dXJuICp0aGlzLgorICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICAvLy8gUmV0dXJuICp0aGlzLgorICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgLy8vIFJldHVybiAqdGhpcy4KKyAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vLyBSZXR1cm4gdHJ1ZSBpZiBwcmV2aW91cyBvcGVyYXRvcj0oKSBmYWlsZWQuCisgICAgICBib29sCisgICAgICBmYWlsZWQoKSBjb25zdCBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQorCisgICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgorICAgICAgX01fcHV0KGNvbnN0IF9DaGFyVCogX193cywgc3RyZWFtc2l6ZSBfX2xlbikKKyAgICAgIHsKKwlpZiAoX19idWlsdGluX2V4cGVjdCghX01fZmFpbGVkLCB0cnVlKQorCSAgICAmJiBfX2J1aWx0aW5fZXhwZWN0KHRoaXMtPl9NX3NidWYtPnNwdXRuKF9fd3MsIF9fbGVuKSAhPSBfX2xlbiwKKwkJCQlmYWxzZSkpCisJICBfTV9mYWlsZWQgPSB0cnVlOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICB9OworCisgIC8vIE92ZXJsb2FkcyBmb3Igc3RyZWFtYnVmIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsCisgICAgCSAgICAgICAgICAgICAgICAgCSAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPjo6X190eXBlCisgICAgY29weShpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19maXJzdCwKKwkgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fbGFzdCwKKwkgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcmVzdWx0KQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0Ll9NX3NidWYgJiYgIV9fbGFzdC5fTV9zYnVmICYmICFfX3Jlc3VsdC5fTV9mYWlsZWQpCisJeworCSAgYm9vbCBfX2luZW9mOworCSAgX19jb3B5X3N0cmVhbWJ1ZnNfZW9mKF9fZmlyc3QuX01fc2J1ZiwgX19yZXN1bHQuX01fc2J1ZiwgX19pbmVvZik7CisJICBpZiAoIV9faW5lb2YpCisJICAgIF9fcmVzdWx0Ll9NX2ZhaWxlZCA9IHRydWU7CisJfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTxib29sIF9Jc01vdmUsIHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfY2hhcjxfQ2hhclQ+OjpfX3ZhbHVlLCAKKyAgICAJCQkJICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+OjpfX3R5cGUKKyAgICBfX2NvcHlfbW92ZV9hMihfQ2hhclQqIF9fZmlyc3QsIF9DaGFyVCogX19sYXN0LAorCQkgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19yZXN1bHQpCisgICAgeworICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX251bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBpZiAoX19udW0gPiAwKQorCV9fcmVzdWx0Ll9NX3B1dChfX2ZpcnN0LCBfX251bSk7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZSwgdHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsCisJCQkJICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+OjpfX3R5cGUKKyAgICBfX2NvcHlfbW92ZV9hMihjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0LAorCQkgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19yZXN1bHQpCisgICAgeworICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX251bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisgICAgICBpZiAoX19udW0gPiAwKQorCV9fcmVzdWx0Ll9NX3B1dChfX2ZpcnN0LCBfX251bSk7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPGJvb2wgX0lzTW92ZSwgdHlwZW5hbWUgX0NoYXJUPgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsIAorICAgIAkJCQkgICAgX0NoYXJUKj46Ol9fdHlwZQorICAgIF9fY29weV9tb3ZlX2EyKGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX2ZpcnN0LAorCQkgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19sYXN0LCBfQ2hhclQqIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ICAgICAgICAgICAgICAgICAgX19pc19pdGVyYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzX2l0ZXJhdG9yX3R5cGU6OnRyYWl0c190eXBlICAgICB0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc19pdGVyYXRvcl90eXBlOjpzdHJlYW1idWZfdHlwZSAgc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAgICAgICAgICAgICAgIGludF90eXBlOworCisgICAgICBpZiAoX19maXJzdC5fTV9zYnVmICYmICFfX2xhc3QuX01fc2J1ZikKKwl7CisJICBzdHJlYW1idWZfdHlwZSogX19zYiA9IF9fZmlyc3QuX01fc2J1ZjsKKwkgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CisJICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCisJICAgIHsKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbiA9IF9fc2ItPmVncHRyKCkgLSBfX3NiLT5ncHRyKCk7CisJICAgICAgaWYgKF9fbiA+IDEpCisJCXsKKwkJICB0cmFpdHNfdHlwZTo6Y29weShfX3Jlc3VsdCwgX19zYi0+Z3B0cigpLCBfX24pOworCQkgIF9fc2ItPl9fc2FmZV9nYnVtcChfX24pOworCQkgIF9fcmVzdWx0ICs9IF9fbjsKKwkJICBfX2MgPSBfX3NiLT51bmRlcmZsb3coKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgICpfX3Jlc3VsdCsrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworCQkgIF9fYyA9IF9fc2ItPnNuZXh0YygpOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfY2hhcjxfQ2hhclQ+OjpfX3ZhbHVlLAorCQkgIAkJICAgIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+OjpfX3R5cGUKKyAgICBmaW5kKGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX2ZpcnN0LAorCSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19sYXN0LCBjb25zdCBfQ2hhclQmIF9fdmFsKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ICAgICAgICAgICAgICAgICAgX19pc19pdGVyYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzX2l0ZXJhdG9yX3R5cGU6OnRyYWl0c190eXBlICAgICB0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc19pdGVyYXRvcl90eXBlOjpzdHJlYW1idWZfdHlwZSAgc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAgICAgICAgICAgICAgIGludF90eXBlOworCisgICAgICBpZiAoX19maXJzdC5fTV9zYnVmICYmICFfX2xhc3QuX01fc2J1ZikKKwl7CisJICBjb25zdCBpbnRfdHlwZSBfX2l2YWwgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX192YWwpOworCSAgc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2ZpcnN0Ll9NX3NidWY7CisJICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOworCSAgd2hpbGUgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpCisJCSAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pdmFsKSkKKwkgICAgeworCSAgICAgIHN0cmVhbXNpemUgX19uID0gX19zYi0+ZWdwdHIoKSAtIF9fc2ItPmdwdHIoKTsKKwkgICAgICBpZiAoX19uID4gMSkKKwkJeworCQkgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zYi0+Z3B0cigpLAorCQkJCQkJCV9fbiwgX192YWwpOworCQkgIGlmIChfX3ApCisJCSAgICBfX24gPSBfX3AgLSBfX3NiLT5ncHRyKCk7CisJCSAgX19zYi0+X19zYWZlX2didW1wKF9fbik7CisJCSAgX19jID0gX19zYi0+c2dldGMoKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJX19jID0gX19zYi0+c25leHRjKCk7CisJICAgIH0KKworCSAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQorCSAgICBfX2ZpcnN0Ll9NX2MgPSBfX2M7CisJICBlbHNlCisJICAgIF9fZmlyc3QuX01fc2J1ZiA9IDA7CisJfQorICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisvLyBAfSBncm91cCBpdGVyYXRvcnMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdHJpbmdmd2QuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy9zdHJpbmdmd2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjAxMTE2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3N0cmluZ2Z3ZC5oCkBAIC0wLDAgKzEsODkgQEAKKy8vIDxzdHJpbmc+IEZvcndhcmQgZGVjbGFyYXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL3N0cmluZ2Z3ZC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7c3RyaW5nfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMSBTdHJpbmdzIGxpYnJhcnkKKy8vCisKKyNpZm5kZWYgX1NUUklOR0ZXRF9ICisjZGVmaW5lIF9TVFJJTkdGV0RfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9tZW1vcnlmd2QuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiAgQGRlZmdyb3VwIHN0cmluZ3MgU3RyaW5ncworICAgKgorICAgKiAgQHsKKyAgKi8KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CisgICAgc3RydWN0IGNoYXJfdHJhaXRzOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCisgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19zdHJpbmc7CisKKyAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CisKKyAgLy8vIEEgc3RyaW5nIG9mIEBjIGNoYXIKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gICAgc3RyaW5nOyAgIAorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CisKKyAgLy8vIEEgc3RyaW5nIG9mIEBjIHdjaGFyX3QKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsgICAKKyNlbmRpZgorCisjaWYgKChfX2NwbHVzcGx1cyA+PSAyMDExMDNMKSBcCisgICAgICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKSkKKworICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyMTZfdD47CisgIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXIzMl90PjsKKworICAvLy8gQSBzdHJpbmcgb2YgQGMgY2hhcjE2X3QKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcjE2X3Q+IHUxNnN0cmluZzsgCisKKyAgLy8vIEEgc3RyaW5nIG9mIEBjIGNoYXIzMl90CisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXIzMl90PiB1MzJzdHJpbmc7IAorCisjZW5kaWYKKyAgLyoqIEB9ICAqLworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYJLy8gX1NUUklOR0ZXRF9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdW5pcXVlX3B0ci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3VuaXF1ZV9wdHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQ3M2IyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3VuaXF1ZV9wdHIuaApAQCAtMCwwICsxLDYxNSBAQAorLy8gdW5pcXVlX3B0ciBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy91bmlxdWVfcHRyLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXttZW1vcnl9CisgKi8KKworI2lmbmRlZiBfVU5JUVVFX1BUUl9ICisjZGVmaW5lIF9VTklRVUVfUFRSX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dHVwbGU+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgcG9pbnRlcl9hYnN0cmFjdGlvbnMKKyAgICogQHsKKyAgICovCisKKyNpZiBfR0xJQkNYWF9VU0VfREVQUkVDQVRFRAorICB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgYXV0b19wdHI7CisjZW5kaWYKKworICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZSwgZGVmYXVsdF9kZWxldGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgZGVmYXVsdF9kZWxldGUKKyAgICB7CisgICAgICBjb25zdGV4cHIgZGVmYXVsdF9kZWxldGUoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBlbmFibGVfaWY8aXNfY29udmVydGlibGU8X1VwKiwgX1RwKj46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgZGVmYXVsdF9kZWxldGUoY29uc3QgZGVmYXVsdF9kZWxldGU8X1VwPiYpIG5vZXhjZXB0IHsgfQorCisgICAgICB2b2lkCisgICAgICBvcGVyYXRvcigpKF9UcCogX19wdHIpIGNvbnN0CisgICAgICB7CisJc3RhdGljX2Fzc2VydChzaXplb2YoX1RwKT4wLAorCQkgICAgICAiY2FuJ3QgZGVsZXRlIHBvaW50ZXIgdG8gaW5jb21wbGV0ZSB0eXBlIik7CisJZGVsZXRlIF9fcHRyOworICAgICAgfQorICAgIH07CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBEUiA3NDAgLSBvbWl0IHNwZWNpYWxpemF0aW9uIGZvciBhcnJheSBvYmplY3RzIHdpdGggYSBjb21waWxlIHRpbWUgbGVuZ3RoCisgIC8vLyBTcGVjaWFsaXphdGlvbiwgZGVmYXVsdF9kZWxldGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgZGVmYXVsdF9kZWxldGU8X1RwW10+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisJdXNpbmcgX19yZW1vdmVfY3YgPSB0eXBlbmFtZSByZW1vdmVfY3Y8X1VwPjo6dHlwZTsKKworICAgICAgLy8gTGlrZSBpc19iYXNlX29mPF9UcCwgX1VwPiBidXQgZmFsc2UgaWYgdW5xdWFsaWZpZWQgdHlwZXMgYXJlIHRoZSBzYW1lCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisJdXNpbmcgX19pc19kZXJpdmVkX1RwCisJICA9IF9fYW5kXzwgaXNfYmFzZV9vZjxfVHAsIF9VcD4sCisJCSAgICBfX25vdF88aXNfc2FtZTxfX3JlbW92ZV9jdjxfVHA+LCBfX3JlbW92ZV9jdjxfVXA+Pj4gPjsKKworICAgIHB1YmxpYzoKKyAgICAgIGNvbnN0ZXhwciBkZWZhdWx0X2RlbGV0ZSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIGVuYWJsZV9pZjwhX19pc19kZXJpdmVkX1RwPF9VcD46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgZGVmYXVsdF9kZWxldGUoY29uc3QgZGVmYXVsdF9kZWxldGU8X1VwW10+Jikgbm9leGNlcHQgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoX1RwKiBfX3B0cikgY29uc3QKKyAgICAgIHsKKwlzdGF0aWNfYXNzZXJ0KHNpemVvZihfVHApPjAsCisJCSAgICAgICJjYW4ndCBkZWxldGUgcG9pbnRlciB0byBpbmNvbXBsZXRlIHR5cGUiKTsKKwlkZWxldGUgW10gX19wdHI7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKwl0eXBlbmFtZSBlbmFibGVfaWY8X19pc19kZXJpdmVkX1RwPF9VcD46OnZhbHVlPjo6dHlwZQorCW9wZXJhdG9yKCkoX1VwKikgY29uc3QgPSBkZWxldGU7CisgICAgfTsKKworICAvLy8gMjAuNy4xLjIgdW5pcXVlX3B0ciBmb3Igc2luZ2xlIG9iamVjdHMuCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EcCA9IGRlZmF1bHRfZGVsZXRlPF9UcD4gPgorICAgIGNsYXNzIHVuaXF1ZV9wdHIKKyAgICB7CisgICAgICAvLyB1c2UgU0ZJTkFFIHRvIGRldGVybWluZSB3aGV0aGVyIF9EZWw6OnBvaW50ZXIgZXhpc3RzCisgICAgICBjbGFzcyBfUG9pbnRlcgorICAgICAgeworCXRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKwkgIHN0YXRpYyB0eXBlbmFtZSBfVXA6OnBvaW50ZXIgX190ZXN0KHR5cGVuYW1lIF9VcDo6cG9pbnRlciopOworCisJdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorCSAgc3RhdGljIF9UcCogX190ZXN0KC4uLik7CisKKwl0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X0RwPjo6dHlwZSBfRGVsOworCisgICAgICBwdWJsaWM6CisJdHlwZWRlZiBkZWNsdHlwZShfX3Rlc3Q8X0RlbD4oMCkpIHR5cGU7CisgICAgICB9OworCisgICAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dHlwZW5hbWUgX1BvaW50ZXI6OnR5cGUsIF9EcD4gIF9fdHVwbGVfdHlwZTsKKyAgICAgIF9fdHVwbGVfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fdDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1BvaW50ZXI6OnR5cGUgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0RwICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVyX3R5cGU7CisKKyAgICAgIC8vIENvbnN0cnVjdG9ycy4KKyAgICAgIGNvbnN0ZXhwciB1bmlxdWVfcHRyKCkgbm9leGNlcHQKKyAgICAgIDogX01fdCgpCisgICAgICB7IHN0YXRpY19hc3NlcnQoIWlzX3BvaW50ZXI8ZGVsZXRlcl90eXBlPjo6dmFsdWUsCisJCSAgICAgImNvbnN0cnVjdGVkIHdpdGggbnVsbCBmdW5jdGlvbiBwb2ludGVyIGRlbGV0ZXIiKTsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgdW5pcXVlX3B0cihwb2ludGVyIF9fcCkgbm9leGNlcHQKKyAgICAgIDogX01fdChfX3AsIGRlbGV0ZXJfdHlwZSgpKQorICAgICAgeyBzdGF0aWNfYXNzZXJ0KCFpc19wb2ludGVyPGRlbGV0ZXJfdHlwZT46OnZhbHVlLAorCQkgICAgICJjb25zdHJ1Y3RlZCB3aXRoIG51bGwgZnVuY3Rpb24gcG9pbnRlciBkZWxldGVyIik7IH0KKworICAgICAgdW5pcXVlX3B0cihwb2ludGVyIF9fcCwKKwkgIHR5cGVuYW1lIGNvbmRpdGlvbmFsPGlzX3JlZmVyZW5jZTxkZWxldGVyX3R5cGU+Ojp2YWx1ZSwKKwkgICAgZGVsZXRlcl90eXBlLCBjb25zdCBkZWxldGVyX3R5cGUmPjo6dHlwZSBfX2QpIG5vZXhjZXB0CisgICAgICA6IF9NX3QoX19wLCBfX2QpIHsgfQorCisgICAgICB1bmlxdWVfcHRyKHBvaW50ZXIgX19wLAorCSAgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxkZWxldGVyX3R5cGU+Ojp0eXBlJiYgX19kKSBub2V4Y2VwdAorICAgICAgOiBfTV90KHN0ZDo6bW92ZShfX3ApLCBzdGQ6Om1vdmUoX19kKSkKKyAgICAgIHsgc3RhdGljX2Fzc2VydCghc3RkOjppc19yZWZlcmVuY2U8ZGVsZXRlcl90eXBlPjo6dmFsdWUsCisJCSAgICAgICJydmFsdWUgZGVsZXRlciBib3VuZCB0byByZWZlcmVuY2UiKTsgfQorCisgICAgICBjb25zdGV4cHIgdW5pcXVlX3B0cihudWxscHRyX3QpIG5vZXhjZXB0IDogdW5pcXVlX3B0cigpIHsgfQorCisgICAgICAvLyBNb3ZlIGNvbnN0cnVjdG9ycy4KKyAgICAgIHVuaXF1ZV9wdHIodW5pcXVlX3B0ciYmIF9fdSkgbm9leGNlcHQKKyAgICAgIDogX01fdChfX3UucmVsZWFzZSgpLCBzdGQ6OmZvcndhcmQ8ZGVsZXRlcl90eXBlPihfX3UuZ2V0X2RlbGV0ZXIoKSkpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9FcCwgdHlwZW5hbWUgPSBfUmVxdWlyZTwKKwkgICAgICAgaXNfY29udmVydGlibGU8dHlwZW5hbWUgdW5pcXVlX3B0cjxfVXAsIF9FcD46OnBvaW50ZXIsIHBvaW50ZXI+LAorCSAgICAgICBfX25vdF88aXNfYXJyYXk8X1VwPj4sCisJICAgICAgIHR5cGVuYW1lIGNvbmRpdGlvbmFsPGlzX3JlZmVyZW5jZTxfRHA+Ojp2YWx1ZSwKKwkJCQkgICAgaXNfc2FtZTxfRXAsIF9EcD4sCisJCQkJICAgIGlzX2NvbnZlcnRpYmxlPF9FcCwgX0RwPj46OnR5cGU+PgorCXVuaXF1ZV9wdHIodW5pcXVlX3B0cjxfVXAsIF9FcD4mJiBfX3UpIG5vZXhjZXB0CisJOiBfTV90KF9fdS5yZWxlYXNlKCksIHN0ZDo6Zm9yd2FyZDxfRXA+KF9fdS5nZXRfZGVsZXRlcigpKSkKKwl7IH0KKworI2lmIF9HTElCQ1hYX1VTRV9ERVBSRUNBVEVECisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAsIHR5cGVuYW1lID0gX1JlcXVpcmU8CisJICAgICAgIGlzX2NvbnZlcnRpYmxlPF9VcCosIF9UcCo+LCBpc19zYW1lPF9EcCwgZGVmYXVsdF9kZWxldGU8X1RwPj4+PgorCXVuaXF1ZV9wdHIoYXV0b19wdHI8X1VwPiYmIF9fdSkgbm9leGNlcHQ7CisjZW5kaWYKKworICAgICAgLy8gRGVzdHJ1Y3Rvci4KKyAgICAgIH51bmlxdWVfcHRyKCkgbm9leGNlcHQKKyAgICAgIHsKKwlhdXRvJiBfX3B0ciA9IHN0ZDo6Z2V0PDA+KF9NX3QpOworCWlmIChfX3B0ciAhPSBudWxscHRyKQorCSAgZ2V0X2RlbGV0ZXIoKShfX3B0cik7CisJX19wdHIgPSBwb2ludGVyKCk7CisgICAgICB9CisKKyAgICAgIC8vIEFzc2lnbm1lbnQuCisgICAgICB1bmlxdWVfcHRyJgorICAgICAgb3BlcmF0b3I9KHVuaXF1ZV9wdHImJiBfX3UpIG5vZXhjZXB0CisgICAgICB7CisJcmVzZXQoX191LnJlbGVhc2UoKSk7CisJZ2V0X2RlbGV0ZXIoKSA9IHN0ZDo6Zm9yd2FyZDxkZWxldGVyX3R5cGU+KF9fdS5nZXRfZGVsZXRlcigpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX0VwPgorCXR5cGVuYW1lIGVuYWJsZV9pZjwgX19hbmRfPAorCSAgaXNfY29udmVydGlibGU8dHlwZW5hbWUgdW5pcXVlX3B0cjxfVXAsIF9FcD46OnBvaW50ZXIsIHBvaW50ZXI+LAorCSAgX19ub3RfPGlzX2FycmF5PF9VcD4+CisJICA+Ojp2YWx1ZSwKKwkgIHVuaXF1ZV9wdHImPjo6dHlwZQorCW9wZXJhdG9yPSh1bmlxdWVfcHRyPF9VcCwgX0VwPiYmIF9fdSkgbm9leGNlcHQKKwl7CisJICByZXNldChfX3UucmVsZWFzZSgpKTsKKwkgIGdldF9kZWxldGVyKCkgPSBzdGQ6OmZvcndhcmQ8X0VwPihfX3UuZ2V0X2RlbGV0ZXIoKSk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB1bmlxdWVfcHRyJgorICAgICAgb3BlcmF0b3I9KG51bGxwdHJfdCkgbm9leGNlcHQKKyAgICAgIHsKKwlyZXNldCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gT2JzZXJ2ZXJzLgorICAgICAgdHlwZW5hbWUgYWRkX2x2YWx1ZV9yZWZlcmVuY2U8ZWxlbWVudF90eXBlPjo6dHlwZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoZ2V0KCkgIT0gcG9pbnRlcigpKTsKKwlyZXR1cm4gKmdldCgpOworICAgICAgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoZ2V0KCkgIT0gcG9pbnRlcigpKTsKKwlyZXR1cm4gZ2V0KCk7CisgICAgICB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGdldCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6OmdldDwwPihfTV90KTsgfQorCisgICAgICBkZWxldGVyX3R5cGUmCisgICAgICBnZXRfZGVsZXRlcigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6OmdldDwxPihfTV90KTsgfQorCisgICAgICBjb25zdCBkZWxldGVyX3R5cGUmCisgICAgICBnZXRfZGVsZXRlcigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6OmdldDwxPihfTV90KTsgfQorCisgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGdldCgpID09IHBvaW50ZXIoKSA/IGZhbHNlIDogdHJ1ZTsgfQorCisgICAgICAvLyBNb2RpZmllcnMuCisgICAgICBwb2ludGVyCisgICAgICByZWxlYXNlKCkgbm9leGNlcHQKKyAgICAgIHsKKwlwb2ludGVyIF9fcCA9IGdldCgpOworCXN0ZDo6Z2V0PDA+KF9NX3QpID0gcG9pbnRlcigpOworCXJldHVybiBfX3A7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KHBvaW50ZXIgX19wID0gcG9pbnRlcigpKSBub2V4Y2VwdAorICAgICAgeworCXVzaW5nIHN0ZDo6c3dhcDsKKwlzd2FwKHN0ZDo6Z2V0PDA+KF9NX3QpLCBfX3ApOworCWlmIChfX3AgIT0gcG9pbnRlcigpKQorCSAgZ2V0X2RlbGV0ZXIoKShfX3ApOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHVuaXF1ZV9wdHImIF9fdSkgbm9leGNlcHQKKyAgICAgIHsKKwl1c2luZyBzdGQ6OnN3YXA7CisJc3dhcChfTV90LCBfX3UuX01fdCk7CisgICAgICB9CisKKyAgICAgIC8vIERpc2FibGUgY29weSBmcm9tIGx2YWx1ZS4KKyAgICAgIHVuaXF1ZV9wdHIoY29uc3QgdW5pcXVlX3B0ciYpID0gZGVsZXRlOworICAgICAgdW5pcXVlX3B0ciYgb3BlcmF0b3I9KGNvbnN0IHVuaXF1ZV9wdHImKSA9IGRlbGV0ZTsKKyAgfTsKKworICAvLy8gMjAuNy4xLjMgdW5pcXVlX3B0ciBmb3IgYXJyYXkgb2JqZWN0cyB3aXRoIGEgcnVudGltZSBsZW5ndGgKKyAgLy8gW3VuaXF1ZS5wdHIucnVudGltZV0KKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBEUiA3NDAgLSBvbWl0IHNwZWNpYWxpemF0aW9uIGZvciBhcnJheSBvYmplY3RzIHdpdGggYSBjb21waWxlIHRpbWUgbGVuZ3RoCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RwPgorICAgIGNsYXNzIHVuaXF1ZV9wdHI8X1RwW10sIF9EcD4KKyAgICB7CisgICAgICAvLyB1c2UgU0ZJTkFFIHRvIGRldGVybWluZSB3aGV0aGVyIF9EZWw6OnBvaW50ZXIgZXhpc3RzCisgICAgICBjbGFzcyBfUG9pbnRlcgorICAgICAgeworCXRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKwkgIHN0YXRpYyB0eXBlbmFtZSBfVXA6OnBvaW50ZXIgX190ZXN0KHR5cGVuYW1lIF9VcDo6cG9pbnRlciopOworCisJdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorCSAgc3RhdGljIF9UcCogX190ZXN0KC4uLik7CisKKwl0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X0RwPjo6dHlwZSBfRGVsOworCisgICAgICBwdWJsaWM6CisJdHlwZWRlZiBkZWNsdHlwZShfX3Rlc3Q8X0RlbD4oMCkpIHR5cGU7CisgICAgICB9OworCisgICAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8dHlwZW5hbWUgX1BvaW50ZXI6OnR5cGUsIF9EcD4gIF9fdHVwbGVfdHlwZTsKKyAgICAgIF9fdHVwbGVfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fdDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorCXVzaW5nIF9fcmVtb3ZlX2N2ID0gdHlwZW5hbWUgcmVtb3ZlX2N2PF9VcD46OnR5cGU7CisKKyAgICAgIC8vIGxpa2UgaXNfYmFzZV9vZjxfVHAsIF9VcD4gYnV0IGZhbHNlIGlmIHVucXVhbGlmaWVkIHR5cGVzIGFyZSB0aGUgc2FtZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorCXVzaW5nIF9faXNfZGVyaXZlZF9UcAorCSAgPSBfX2FuZF88IGlzX2Jhc2Vfb2Y8X1RwLCBfVXA+LAorCQkgICAgX19ub3RfPGlzX3NhbWU8X19yZW1vdmVfY3Y8X1RwPiwgX19yZW1vdmVfY3Y8X1VwPj4+ID47CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX0VwLAorCSAgICAgICB0eXBlbmFtZSBfVHBfcG9pbnRlciA9IHR5cGVuYW1lIF9Qb2ludGVyOjp0eXBlLAorCSAgICAgICB0eXBlbmFtZSBfVXBfcG9pbnRlciA9IHR5cGVuYW1lIHVuaXF1ZV9wdHI8X1VwLCBfRXA+Ojpwb2ludGVyPgorCXVzaW5nIF9fc2FmZV9jb252ZXJzaW9uID0gX19hbmRfPAorCSAgICBpc19jb252ZXJ0aWJsZTxfVXBfcG9pbnRlciwgX1RwX3BvaW50ZXI+LAorCSAgICBpc19hcnJheTxfVXA+LAorCSAgICBfX29yXzxfX25vdF88aXNfcG9pbnRlcjxfVXBfcG9pbnRlcj4+LAorCQkgIF9fbm90Xzxpc19wb2ludGVyPF9UcF9wb2ludGVyPj4sCisJCSAgX19ub3RfPF9faXNfZGVyaXZlZF9UcDx0eXBlbmFtZSByZW1vdmVfZXh0ZW50PF9VcD46OnR5cGU+PgorCSAgICA+CisJICA+OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUG9pbnRlcjo6dHlwZQlwb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAJCSAJZWxlbWVudF90eXBlOworICAgICAgdHlwZWRlZiBfRHAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZXJfdHlwZTsKKworICAgICAgLy8gQ29uc3RydWN0b3JzLgorICAgICAgY29uc3RleHByIHVuaXF1ZV9wdHIoKSBub2V4Y2VwdAorICAgICAgOiBfTV90KCkKKyAgICAgIHsgc3RhdGljX2Fzc2VydCghc3RkOjppc19wb2ludGVyPGRlbGV0ZXJfdHlwZT46OnZhbHVlLAorCQkgICAgICAiY29uc3RydWN0ZWQgd2l0aCBudWxsIGZ1bmN0aW9uIHBvaW50ZXIgZGVsZXRlciIpOyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bmlxdWVfcHRyKHBvaW50ZXIgX19wKSBub2V4Y2VwdAorICAgICAgOiBfTV90KF9fcCwgZGVsZXRlcl90eXBlKCkpCisgICAgICB7IHN0YXRpY19hc3NlcnQoIWlzX3BvaW50ZXI8ZGVsZXRlcl90eXBlPjo6dmFsdWUsCisJCSAgICAgICJjb25zdHJ1Y3RlZCB3aXRoIG51bGwgZnVuY3Rpb24gcG9pbnRlciBkZWxldGVyIik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCB0eXBlbmFtZSA9IF9SZXF1aXJlPGlzX3BvaW50ZXI8cG9pbnRlcj4sCisJICAgICAgIGlzX2NvbnZlcnRpYmxlPF9VcCosIHBvaW50ZXI+LCBfX2lzX2Rlcml2ZWRfVHA8X1VwPj4+CisJZXhwbGljaXQKKwl1bmlxdWVfcHRyKF9VcCogX19wKSA9IGRlbGV0ZTsKKworICAgICAgdW5pcXVlX3B0cihwb2ludGVyIF9fcCwKKwkgIHR5cGVuYW1lIGNvbmRpdGlvbmFsPGlzX3JlZmVyZW5jZTxkZWxldGVyX3R5cGU+Ojp2YWx1ZSwKKwkgICAgICBkZWxldGVyX3R5cGUsIGNvbnN0IGRlbGV0ZXJfdHlwZSY+Ojp0eXBlIF9fZCkgbm9leGNlcHQKKyAgICAgIDogX01fdChfX3AsIF9fZCkgeyB9CisKKyAgICAgIHVuaXF1ZV9wdHIocG9pbnRlciBfX3AsIHR5cGVuYW1lCisJCSByZW1vdmVfcmVmZXJlbmNlPGRlbGV0ZXJfdHlwZT46OnR5cGUmJiBfX2QpIG5vZXhjZXB0CisgICAgICA6IF9NX3Qoc3RkOjptb3ZlKF9fcCksIHN0ZDo6bW92ZShfX2QpKQorICAgICAgeyBzdGF0aWNfYXNzZXJ0KCFpc19yZWZlcmVuY2U8ZGVsZXRlcl90eXBlPjo6dmFsdWUsCisJCSAgICAgICJydmFsdWUgZGVsZXRlciBib3VuZCB0byByZWZlcmVuY2UiKTsgfQorCisgICAgICAvLyBNb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgdW5pcXVlX3B0cih1bmlxdWVfcHRyJiYgX191KSBub2V4Y2VwdAorICAgICAgOiBfTV90KF9fdS5yZWxlYXNlKCksIHN0ZDo6Zm9yd2FyZDxkZWxldGVyX3R5cGU+KF9fdS5nZXRfZGVsZXRlcigpKSkgeyB9CisKKyAgICAgIGNvbnN0ZXhwciB1bmlxdWVfcHRyKG51bGxwdHJfdCkgbm9leGNlcHQgOiB1bmlxdWVfcHRyKCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX0VwLAorCSAgICAgICB0eXBlbmFtZSA9IF9SZXF1aXJlPF9fc2FmZV9jb252ZXJzaW9uPF9VcCwgX0VwPiwKKwkJIHR5cGVuYW1lIGNvbmRpdGlvbmFsPGlzX3JlZmVyZW5jZTxfRHA+Ojp2YWx1ZSwKKwkJCQkgICAgICBpc19zYW1lPF9FcCwgX0RwPiwKKwkJCQkgICAgICBpc19jb252ZXJ0aWJsZTxfRXAsIF9EcD4+Ojp0eXBlCisJICAgICAgID4+CisJdW5pcXVlX3B0cih1bmlxdWVfcHRyPF9VcCwgX0VwPiYmIF9fdSkgbm9leGNlcHQKKwk6IF9NX3QoX191LnJlbGVhc2UoKSwgc3RkOjpmb3J3YXJkPF9FcD4oX191LmdldF9kZWxldGVyKCkpKQorCXsgfQorCisgICAgICAvLyBEZXN0cnVjdG9yLgorICAgICAgfnVuaXF1ZV9wdHIoKQorICAgICAgeworCWF1dG8mIF9fcHRyID0gc3RkOjpnZXQ8MD4oX01fdCk7CisJaWYgKF9fcHRyICE9IG51bGxwdHIpCisJICBnZXRfZGVsZXRlcigpKF9fcHRyKTsKKwlfX3B0ciA9IHBvaW50ZXIoKTsKKyAgICAgIH0KKworICAgICAgLy8gQXNzaWdubWVudC4KKyAgICAgIHVuaXF1ZV9wdHImCisgICAgICBvcGVyYXRvcj0odW5pcXVlX3B0ciYmIF9fdSkgbm9leGNlcHQKKyAgICAgIHsKKwlyZXNldChfX3UucmVsZWFzZSgpKTsKKwlnZXRfZGVsZXRlcigpID0gc3RkOjpmb3J3YXJkPGRlbGV0ZXJfdHlwZT4oX191LmdldF9kZWxldGVyKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfRXA+CisJdHlwZW5hbWUKKwllbmFibGVfaWY8X19zYWZlX2NvbnZlcnNpb248X1VwLCBfRXA+Ojp2YWx1ZSwgdW5pcXVlX3B0ciY+Ojp0eXBlCisJb3BlcmF0b3I9KHVuaXF1ZV9wdHI8X1VwLCBfRXA+JiYgX191KSBub2V4Y2VwdAorCXsKKwkgIHJlc2V0KF9fdS5yZWxlYXNlKCkpOworCSAgZ2V0X2RlbGV0ZXIoKSA9IHN0ZDo6Zm9yd2FyZDxfRXA+KF9fdS5nZXRfZGVsZXRlcigpKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHVuaXF1ZV9wdHImCisgICAgICBvcGVyYXRvcj0obnVsbHB0cl90KSBub2V4Y2VwdAorICAgICAgeworCXJlc2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLyBPYnNlcnZlcnMuCisgICAgICB0eXBlbmFtZSBzdGQ6OmFkZF9sdmFsdWVfcmVmZXJlbmNlPGVsZW1lbnRfdHlwZT46OnR5cGUKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9faSkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoZ2V0KCkgIT0gcG9pbnRlcigpKTsKKwlyZXR1cm4gZ2V0KClbX19pXTsKKyAgICAgIH0KKworICAgICAgcG9pbnRlcgorICAgICAgZ2V0KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6Z2V0PDA+KF9NX3QpOyB9CisKKyAgICAgIGRlbGV0ZXJfdHlwZSYKKyAgICAgIGdldF9kZWxldGVyKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6Z2V0PDE+KF9NX3QpOyB9CisKKyAgICAgIGNvbnN0IGRlbGV0ZXJfdHlwZSYKKyAgICAgIGdldF9kZWxldGVyKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6Z2V0PDE+KF9NX3QpOyB9CisKKyAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gZ2V0KCkgPT0gcG9pbnRlcigpID8gZmFsc2UgOiB0cnVlOyB9CisKKyAgICAgIC8vIE1vZGlmaWVycy4KKyAgICAgIHBvaW50ZXIKKyAgICAgIHJlbGVhc2UoKSBub2V4Y2VwdAorICAgICAgeworCXBvaW50ZXIgX19wID0gZ2V0KCk7CisJc3RkOjpnZXQ8MD4oX01fdCkgPSBwb2ludGVyKCk7CisJcmV0dXJuIF9fcDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVzZXQoKSBub2V4Y2VwdAorICAgICAgeyByZXNldChwb2ludGVyKCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KHBvaW50ZXIgX19wKSBub2V4Y2VwdAorICAgICAgeworCXVzaW5nIHN0ZDo6c3dhcDsKKwlzd2FwKHN0ZDo6Z2V0PDA+KF9NX3QpLCBfX3ApOworCWlmIChfX3AgIT0gbnVsbHB0cikKKwkgIGdldF9kZWxldGVyKCkoX19wKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCB0eXBlbmFtZSA9IF9SZXF1aXJlPGlzX3BvaW50ZXI8cG9pbnRlcj4sCisJICAgICAgIGlzX2NvbnZlcnRpYmxlPF9VcCosIHBvaW50ZXI+LCBfX2lzX2Rlcml2ZWRfVHA8X1VwPj4+CisJdm9pZCByZXNldChfVXAqKSA9IGRlbGV0ZTsKKworICAgICAgdm9pZAorICAgICAgc3dhcCh1bmlxdWVfcHRyJiBfX3UpIG5vZXhjZXB0CisgICAgICB7CisJdXNpbmcgc3RkOjpzd2FwOworCXN3YXAoX01fdCwgX191Ll9NX3QpOworICAgICAgfQorCisgICAgICAvLyBEaXNhYmxlIGNvcHkgZnJvbSBsdmFsdWUuCisgICAgICB1bmlxdWVfcHRyKGNvbnN0IHVuaXF1ZV9wdHImKSA9IGRlbGV0ZTsKKyAgICAgIHVuaXF1ZV9wdHImIG9wZXJhdG9yPShjb25zdCB1bmlxdWVfcHRyJikgPSBkZWxldGU7CisKKyAgICAgIC8vIERpc2FibGUgY29uc3RydWN0aW9uIGZyb20gY29udmVydGlibGUgcG9pbnRlciB0eXBlcy4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgPSBfUmVxdWlyZTxpc19wb2ludGVyPHBvaW50ZXI+LAorCSAgICAgICBpc19jb252ZXJ0aWJsZTxfVXAqLCBwb2ludGVyPiwgX19pc19kZXJpdmVkX1RwPF9VcD4+PgorCXVuaXF1ZV9wdHIoX1VwKiwgdHlwZW5hbWUKKwkJICAgY29uZGl0aW9uYWw8aXNfcmVmZXJlbmNlPGRlbGV0ZXJfdHlwZT46OnZhbHVlLAorCQkgICBkZWxldGVyX3R5cGUsIGNvbnN0IGRlbGV0ZXJfdHlwZSY+Ojp0eXBlKSA9IGRlbGV0ZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCB0eXBlbmFtZSA9IF9SZXF1aXJlPGlzX3BvaW50ZXI8cG9pbnRlcj4sCisJICAgICAgIGlzX2NvbnZlcnRpYmxlPF9VcCosIHBvaW50ZXI+LCBfX2lzX2Rlcml2ZWRfVHA8X1VwPj4+CisJdW5pcXVlX3B0cihfVXAqLCB0eXBlbmFtZQorCQkgICByZW1vdmVfcmVmZXJlbmNlPGRlbGV0ZXJfdHlwZT46OnR5cGUmJikgPSBkZWxldGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5pcXVlX3B0cjxfVHAsIF9EcD4mIF9feCwKKwkgdW5pcXVlX3B0cjxfVHAsIF9EcD4mIF9feSkgbm9leGNlcHQKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EcCwKKwkgICB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9FcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdW5pcXVlX3B0cjxfVHAsIF9EcD4mIF9feCwKKwkgICAgICAgY29uc3QgdW5pcXVlX3B0cjxfVXAsIF9FcD4mIF9feSkKKyAgICB7IHJldHVybiBfX3guZ2V0KCkgPT0gX195LmdldCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfRHA+JiBfX3gsIG51bGxwdHJfdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiAhX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KG51bGxwdHJfdCwgY29uc3QgdW5pcXVlX3B0cjxfVHAsIF9EcD4mIF9feCkgbm9leGNlcHQKKyAgICB7IHJldHVybiAhX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHAsCisJICAgdHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfRXA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfRHA+JiBfX3gsCisJICAgICAgIGNvbnN0IHVuaXF1ZV9wdHI8X1VwLCBfRXA+JiBfX3kpCisgICAgeyByZXR1cm4gX194LmdldCgpICE9IF9feS5nZXQoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bmlxdWVfcHRyPF9UcCwgX0RwPiYgX194LCBudWxscHRyX3QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gKGJvb2wpX194OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KG51bGxwdHJfdCwgY29uc3QgdW5pcXVlX3B0cjxfVHAsIF9EcD4mIF9feCkgbm9leGNlcHQKKyAgICB7IHJldHVybiAoYm9vbClfX3g7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EcCwKKwkgICB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9FcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCB1bmlxdWVfcHRyPF9UcCwgX0RwPiYgX194LAorCSAgICAgIGNvbnN0IHVuaXF1ZV9wdHI8X1VwLCBfRXA+JiBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZQorCXN0ZDo6Y29tbW9uX3R5cGU8dHlwZW5hbWUgdW5pcXVlX3B0cjxfVHAsIF9EcD46OnBvaW50ZXIsCisJICAgICAgICAgICAgICAgICB0eXBlbmFtZSB1bmlxdWVfcHRyPF9VcCwgX0VwPjo6cG9pbnRlcj46OnR5cGUgX0NUOworICAgICAgcmV0dXJuIHN0ZDo6bGVzczxfQ1Q+KCkoX194LmdldCgpLCBfX3kuZ2V0KCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCB1bmlxdWVfcHRyPF9UcCwgX0RwPiYgX194LCBudWxscHRyX3QpCisgICAgeyByZXR1cm4gc3RkOjpsZXNzPHR5cGVuYW1lIHVuaXF1ZV9wdHI8X1RwLCBfRHA+Ojpwb2ludGVyPigpKF9feC5nZXQoKSwKKwkJCQkJCQkJIG51bGxwdHIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwobnVsbHB0cl90LCBjb25zdCB1bmlxdWVfcHRyPF9UcCwgX0RwPiYgX194KQorICAgIHsgcmV0dXJuIHN0ZDo6bGVzczx0eXBlbmFtZSB1bmlxdWVfcHRyPF9UcCwgX0RwPjo6cG9pbnRlcj4oKShudWxscHRyLAorCQkJCQkJCQkgX194LmdldCgpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RwLAorCSAgIHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX0VwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCB1bmlxdWVfcHRyPF9UcCwgX0RwPiYgX194LAorCSAgICAgICBjb25zdCB1bmlxdWVfcHRyPF9VcCwgX0VwPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCB1bmlxdWVfcHRyPF9UcCwgX0RwPiYgX194LCBudWxscHRyX3QpCisgICAgeyByZXR1cm4gIShudWxscHRyIDwgX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShudWxscHRyX3QsIGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfRHA+JiBfX3gpCisgICAgeyByZXR1cm4gIShfX3ggPCBudWxscHRyKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RwLAorCSAgIHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX0VwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfRHA+JiBfX3gsCisJICAgICAgY29uc3QgdW5pcXVlX3B0cjxfVXAsIF9FcD4mIF9feSkKKyAgICB7IHJldHVybiAoX195IDwgX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfRHA+JiBfX3gsIG51bGxwdHJfdCkKKyAgICB7IHJldHVybiBzdGQ6Omxlc3M8dHlwZW5hbWUgdW5pcXVlX3B0cjxfVHAsIF9EcD46OnBvaW50ZXI+KCkobnVsbHB0ciwKKwkJCQkJCQkJIF9feC5nZXQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihudWxscHRyX3QsIGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfRHA+JiBfX3gpCisgICAgeyByZXR1cm4gc3RkOjpsZXNzPHR5cGVuYW1lIHVuaXF1ZV9wdHI8X1RwLCBfRHA+Ojpwb2ludGVyPigpKF9feC5nZXQoKSwKKwkJCQkJCQkJIG51bGxwdHIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHAsCisJICAgdHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfRXA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfRHA+JiBfX3gsCisJICAgICAgIGNvbnN0IHVuaXF1ZV9wdHI8X1VwLCBfRXA+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHVuaXF1ZV9wdHI8X1RwLCBfRHA+JiBfX3gsIG51bGxwdHJfdCkKKyAgICB7IHJldHVybiAhKF9feCA8IG51bGxwdHIpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KG51bGxwdHJfdCwgY29uc3QgdW5pcXVlX3B0cjxfVHAsIF9EcD4mIF9feCkKKyAgICB7IHJldHVybiAhKG51bGxwdHIgPCBfX3gpOyB9CisKKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgdW5pcXVlX3B0ci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRHA+CisgICAgc3RydWN0IGhhc2g8dW5pcXVlX3B0cjxfVHAsIF9EcD4+CisgICAgOiBwdWJsaWMgX19oYXNoX2Jhc2U8c2l6ZV90LCB1bmlxdWVfcHRyPF9UcCwgX0RwPj4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdW5pcXVlX3B0cjxfVHAsIF9EcD4mIF9fdSkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKwl0eXBlZGVmIHVuaXF1ZV9wdHI8X1RwLCBfRHA+IF9VUDsKKwlyZXR1cm4gc3RkOjpoYXNoPHR5cGVuYW1lIF9VUDo6cG9pbnRlcj4oKShfX3UuZ2V0KCkpOworICAgICAgfQorICAgIH07CisKKyAgLy8gQH0gZ3JvdXAgcG9pbnRlcl9hYnN0cmFjdGlvbnMKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX1VOSVFVRV9QVFJfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3Vub3JkZXJlZF9tYXAuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy91bm9yZGVyZWRfbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4NWUyNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy91bm9yZGVyZWRfbWFwLmgKQEAgLTAsMCArMSwxNDEzIEBACisvLyB1bm9yZGVyZWRfbWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL3Vub3JkZXJlZF9tYXAuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3Vub3JkZXJlZF9tYXB9CisgKi8KKworI2lmbmRlZiBfVU5PUkRFUkVEX01BUF9ICisjZGVmaW5lIF9VTk9SREVSRURfTUFQX0gKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisKKyAgLy8vIEJhc2UgdHlwZXMgZm9yIHVub3JkZXJlZF9tYXAuCisgIHRlbXBsYXRlPGJvb2wgX0NhY2hlPgorICAgIHVzaW5nIF9fdW1hcF90cmFpdHMgPSBfX2RldGFpbDo6X0hhc2h0YWJsZV90cmFpdHM8X0NhY2hlLCBmYWxzZSwgdHJ1ZT47CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwKKwkgICB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0hhc2ggPSBoYXNoPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LAorCSAgIHR5cGVuYW1lIF9UciA9IF9fdW1hcF90cmFpdHM8X19jYWNoZV9kZWZhdWx0PF9LZXksIF9IYXNoPjo6dmFsdWU+PgorICAgIHVzaW5nIF9fdW1hcF9oYXNodGFibGUgPSBfSGFzaHRhYmxlPF9LZXksIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvYywgX19kZXRhaWw6Ol9TZWxlY3Qxc3QsCisJCQkJICAgICAgICBfUHJlZCwgX0hhc2gsCisJCQkJICAgICAgICBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nLAorCQkJCSAgICAgICAgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJCSAgICAgICAgX19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LCBfVHI+OworCisgIC8vLyBCYXNlIHR5cGVzIGZvciB1bm9yZGVyZWRfbXVsdGltYXAuCisgIHRlbXBsYXRlPGJvb2wgX0NhY2hlPgorICAgIHVzaW5nIF9fdW1tYXBfdHJhaXRzID0gX19kZXRhaWw6Ol9IYXNodGFibGVfdHJhaXRzPF9DYWNoZSwgZmFsc2UsIGZhbHNlPjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LAorCSAgIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfSGFzaCA9IGhhc2g8X0tleT4sCisJICAgdHlwZW5hbWUgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sCisJICAgdHlwZW5hbWUgX1RyID0gX191bW1hcF90cmFpdHM8X19jYWNoZV9kZWZhdWx0PF9LZXksIF9IYXNoPjo6dmFsdWU+PgorICAgIHVzaW5nIF9fdW1tYXBfaGFzaHRhYmxlID0gX0hhc2h0YWJsZTxfS2V5LCBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiwKKwkJCQkJIF9BbGxvYywgX19kZXRhaWw6Ol9TZWxlY3Qxc3QsCisJCQkJCSBfUHJlZCwgX0hhc2gsCisJCQkJCSBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nLAorCQkJCQkgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJCQkgX19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LCBfVHI+OworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIGNvbXBvc2VkIG9mIHVuaXF1ZSBrZXlzIChjb250YWluaW5nCisgICAqICBhdCBtb3N0IG9uZSBvZiBlYWNoIGtleSB2YWx1ZSkgdGhhdCBhc3NvY2lhdGVzIHZhbHVlcyBvZiBhbm90aGVyIHR5cGUKKyAgICogIHdpdGggdGhlIGtleXMuCisgICAqCisgICAqICBAaW5ncm91cCB1bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgQHRwYXJhbSAgX0tleSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEB0cGFyYW0gIF9UcCAgVHlwZSBvZiBtYXBwZWQgb2JqZWN0cy4KKyAgICogIEB0cGFyYW0gIF9IYXNoICBIYXNoaW5nIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBoYXNoPF9WYWx1ZT4uCisgICAqICBAdHBhcmFtICBfUHJlZCAgUHJlZGljYXRlIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cworICAgKiAgICAgICAgICAgICAgICAgIHRvIGVxdWFsX3RvPF9WYWx1ZT4uCisgICAqICBAdHBhcmFtICBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8X0tleT4uCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGFuZAorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjeHgiPnVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+CisgICAqCisgICAqIFRoZSByZXN1bHRpbmcgdmFsdWUgdHlwZSBvZiB0aGUgY29udGFpbmVyIGlzIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LgorICAgKgorICAgKiAgQmFzZSBpcyBfSGFzaHRhYmxlLCBkaXNwYXRjaGVkIGF0IGNvbXBpbGUgdGltZSB2aWEgdGVtcGxhdGUKKyAgICogIGFsaWFzIF9fdW1hcF9oYXNodGFibGUuCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCisJICAgY2xhc3MgX0hhc2ggPSBoYXNoPF9LZXk+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfbWFwIDogX19jaGVja19jb3B5X2NvbnN0cnVjdGlibGU8X0FsbG9jPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX191bWFwX2hhc2h0YWJsZTxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiAgX0hhc2h0YWJsZTsKKyAgICAgIF9IYXNodGFibGUgX01faDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVkZWZzOgorICAgICAgLy9AeworICAgICAgLy8vIFB1YmxpYyB0eXBlZGVmcy4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6a2V5X3R5cGUJa2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OnZhbHVlX3R5cGUJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6bWFwcGVkX3R5cGUJbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6Omhhc2hlcgloYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmtleV9lcXVhbAlrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvLy8gIEl0ZXJhdG9yLXJlbGF0ZWQgdHlwZWRlZnMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpwb2ludGVyCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6Y29uc3RfcG9pbnRlcgljb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6cmVmZXJlbmNlCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OmNvbnN0X3JlZmVyZW5jZQljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6Oml0ZXJhdG9yCQlpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6Y29uc3RfaXRlcmF0b3IJY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmxvY2FsX2l0ZXJhdG9yCWxvY2FsX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjpjb25zdF9sb2NhbF9pdGVyYXRvcgljb25zdF9sb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6c2l6ZV90eXBlCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmRpZmZlcmVuY2VfdHlwZQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIC8vY29uc3RydWN0L2Rlc3Ryb3kvY29weQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlZmF1bHQgY29uc3RydWN0b3IgY3JlYXRlcyBubyBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gX19uICBJbml0aWFsIG51bWJlciBvZiBidWNrZXRzLgorICAgICAgICogIEBwYXJhbSBfX2hmICBBIGhhc2ggZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19lcWwgIEEga2V5IGVxdWFsaXR5IGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tYXAoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faChfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYW4gJXVub3JkZXJlZF9tYXAgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSBfX24gIE1pbmltYWwgaW5pdGlhbCBudW1iZXIgb2YgYnVja2V0cy4KKyAgICAgICAqICBAcGFyYW0gX19oZiAgQSBoYXNoIGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fZXFsICBBIGtleSBlcXVhbGl0eSBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhbiAldW5vcmRlcmVkX21hcCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgZnJvbQorICAgICAgICogIFtfX2ZpcnN0LF9fbGFzdCkuICBUaGlzIGlzIGxpbmVhciBpbiBOICh3aGVyZSBOIGlzCisgICAgICAgKiAgZGlzdGFuY2UoX19maXJzdCxfX2xhc3QpKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdW5vcmRlcmVkX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwKKwkJICAgICAgc2l6ZV90eXBlIF9fbiA9IDAsCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01faChfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKQorCXsgfQorCisgICAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgICAgIHVub3JkZXJlZF9tYXAoY29uc3QgdW5vcmRlcmVkX21hcCYpID0gZGVmYXVsdDsKKworICAgICAgLy8vIE1vdmUgY29uc3RydWN0b3IuCisgICAgICB1bm9yZGVyZWRfbWFwKHVub3JkZXJlZF9tYXAmJikgPSBkZWZhdWx0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhbiAldW5vcmRlcmVkX21hcCBmcm9tIGFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTWluaW1hbCBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzLgorICAgICAgICogIEBwYXJhbSBfX2hmICBBIGhhc2ggZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19lcWwgIEEga2V5IGVxdWFsaXR5IGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhbiAldW5vcmRlcmVkX21hcCBjb25zaXN0aW5nIG9mIGNvcGllcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhlCisgICAgICAgKiAgbGlzdC4gVGhpcyBpcyBsaW5lYXIgaW4gTiAod2hlcmUgTiBpcyBAYSBfX2wuc2l6ZSgpKS4KKyAgICAgICAqLworICAgICAgdW5vcmRlcmVkX21hcChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkJICAgIHNpemVfdHlwZSBfX24gPSAwLAorCQkgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX2goX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworICAgICAgLy8vIENvcHkgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgIHVub3JkZXJlZF9tYXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdW5vcmRlcmVkX21hcCYpID0gZGVmYXVsdDsKKworICAgICAgLy8vIE1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgIHVub3JkZXJlZF9tYXAmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX21hcCYmKSA9IGRlZmF1bHQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJVVub3JkZXJlZF9tYXAgbGlzdCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSAgX19sICBBbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGZpbGxzIGFuICV1bm9yZGVyZWRfbWFwIHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbgorICAgICAgICogIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIF9fbC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJXVub3JkZXJlZF9tYXAgYW5kCisgICAgICAgKiAgdGhhdCB0aGUgcmVzdWx0aW5nICV1bm9yZGVyZWRfbWFwJ3Mgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCisgICAgICAgKiAgb2YgZWxlbWVudHMgYXNzaWduZWQuICBPbGQgZGF0YSBtYXkgYmUgbG9zdC4KKyAgICAgICAqLworICAgICAgdW5vcmRlcmVkX21hcCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlfTV9oID0gX19sOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBhbGxvY2F0b3Igb2JqZWN0IHdpdGggd2hpY2ggdGhlICV1bm9yZGVyZWRfbWFwIHdhcworICAgICAgLy8vICBjb25zdHJ1Y3RlZC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIC8vIHNpemUgYW5kIGNhcGFjaXR5OgorCisgICAgICAvLy8gIFJldHVybnMgdHJ1ZSBpZiB0aGUgJXVub3JkZXJlZF9tYXAgaXMgZW1wdHkuCisgICAgICBib29sCisgICAgICBlbXB0eSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmVtcHR5KCk7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSAldW5vcmRlcmVkX21hcC4KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLnNpemUoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgJXVub3JkZXJlZF9tYXAuCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubWF4X3NpemUoKTsgfQorCisgICAgICAvLyBpdGVyYXRvcnMuCisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZQorICAgICAgICogICV1bm9yZGVyZWRfbWFwLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5iZWdpbigpOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAldW5vcmRlcmVkX21hcC4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guYmVnaW4oKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guYmVnaW4oKTsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50IGluCisgICAgICAgKiAgdGhlICV1bm9yZGVyZWRfbWFwLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZW5kKCk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXVub3JkZXJlZF9tYXAuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5lbmQoKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmVuZCgpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8vIG1vZGlmaWVycy4KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGJ1aWxkIGFuZCBpbnNlcnQgYSBzdGQ6OnBhaXIgaW50byB0aGUgJXVub3JkZXJlZF9tYXAuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2FyZ3MgIEFyZ3VtZW50cyB1c2VkIHRvIGdlbmVyYXRlIGEgbmV3IHBhaXIgaW5zdGFuY2UgKHNlZQorICAgICAgICoJICAgICAgICBzdGQ6OnBpZWNld2lzZV9jb250cnVjdCBmb3IgcGFzc2luZyBhcmd1bWVudHMgdG8gZWFjaAorICAgICAgICoJICAgICAgICBwYXJ0IG9mIHRoZSBwYWlyIGNvbnN0cnVjdG9yKS4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQSBwYWlyLCBvZiB3aGljaCB0aGUgZmlyc3QgZWxlbWVudCBpcyBhbiBpdGVyYXRvciB0aGF0IHBvaW50cworICAgICAgICogICAgICAgICAgIHRvIHRoZSBwb3NzaWJseSBpbnNlcnRlZCBwYWlyLCBhbmQgdGhlIHNlY29uZCBpcyBhIGJvb2wgdGhhdAorICAgICAgICogICAgICAgICAgIGlzIHRydWUgaWYgdGhlIHBhaXIgd2FzIGFjdHVhbGx5IGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGJ1aWxkIGFuZCBpbnNlcnQgYSAoa2V5LCB2YWx1ZSkgJXBhaXIgaW50bworICAgICAgICogIHRoZSAldW5vcmRlcmVkX21hcC4KKyAgICAgICAqICBBbiAldW5vcmRlcmVkX21hcCByZWxpZXMgb24gdW5pcXVlIGtleXMgYW5kIHRodXMgYSAlcGFpciBpcyBvbmx5CisgICAgICAgKiAgaW5zZXJ0ZWQgaWYgaXRzIGZpcnN0IGVsZW1lbnQgKHRoZSBrZXkpIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlCisgICAgICAgKiAgJXVub3JkZXJlZF9tYXAuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gX01faC5lbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGJ1aWxkIGFuZCBpbnNlcnQgYSBzdGQ6OnBhaXIgaW50byB0aGUgJXVub3JkZXJlZF9tYXAuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUgcGFpcgorICAgICAgICogICAgICAgICAgICAgICAgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSBhIG5ldyBwYWlyIGluc3RhbmNlIChzZWUKKyAgICAgICAqCSAgICAgICAgIHN0ZDo6cGllY2V3aXNlX2NvbnRydWN0IGZvciBwYXNzaW5nIGFyZ3VtZW50cyB0byBlYWNoCisgICAgICAgKgkgICAgICAgICBwYXJ0IG9mIHRoZSBwYWlyIGNvbnN0cnVjdG9yKS4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBlbGVtZW50IHdpdGgga2V5IG9mIHRoZQorICAgICAgICogICAgICAgICAgc3RkOjpwYWlyIGJ1aWx0IGZyb20gQGEgX19hcmdzIChtYXkgb3IgbWF5IG5vdCBiZSB0aGF0CisgICAgICAgKiAgICAgICAgICBzdGQ6OnBhaXIpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb25jZXJuZWQgYWJvdXQgd2hldGhlciB0aGUgaW5zZXJ0aW9uIHRvb2sgcGxhY2UsCisgICAgICAgKiAgYW5kIHRodXMgZG9lcyBub3QgcmV0dXJuIGEgYm9vbGVhbiBsaWtlIHRoZSBzaW5nbGUtYXJndW1lbnQgZW1wbGFjZSgpCisgICAgICAgKiAgZG9lcy4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBvbmx5IGEgaGludCBhbmQgY2FuIHBvdGVudGlhbGx5CisgICAgICAgKiAgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGluc2VydGlvbiBwcm9jZXNzLiBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgU2VlCisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICogIGZvciBtb3JlIG9uIEBhIGhpbnRpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsgcmV0dXJuIF9NX2guZW1wbGFjZV9oaW50KF9fcG9zLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYSBzdGQ6OnBhaXIgaW50byB0aGUgJXVub3JkZXJlZF9tYXAuCisKKyAgICAgICAqICBAcGFyYW0gX194IFBhaXIgdG8gYmUgaW5zZXJ0ZWQgKHNlZSBzdGQ6Om1ha2VfcGFpciBmb3IgZWFzeQorICAgICAgICoJICAgICBjcmVhdGlvbiBvZiBwYWlycykuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gIEEgcGFpciwgb2Ygd2hpY2ggdGhlIGZpcnN0IGVsZW1lbnQgaXMgYW4gaXRlcmF0b3IgdGhhdCAKKyAgICAgICAqICAgICAgICAgICBwb2ludHMgdG8gdGhlIHBvc3NpYmx5IGluc2VydGVkIHBhaXIsIGFuZCB0aGUgc2Vjb25kIGlzIAorICAgICAgICogICAgICAgICAgIGEgYm9vbCB0aGF0IGlzIHRydWUgaWYgdGhlIHBhaXIgd2FzIGFjdHVhbGx5IGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGluc2VydCBhIChrZXksIHZhbHVlKSAlcGFpciBpbnRvIHRoZQorICAgICAgICogICV1bm9yZGVyZWRfbWFwLiBBbiAldW5vcmRlcmVkX21hcCByZWxpZXMgb24gdW5pcXVlIGtleXMgYW5kIHRodXMgYQorICAgICAgICogICVwYWlyIGlzIG9ubHkgaW5zZXJ0ZWQgaWYgaXRzIGZpcnN0IGVsZW1lbnQgKHRoZSBrZXkpIGlzIG5vdCBhbHJlYWR5CisgICAgICAgKiAgcHJlc2VudCBpbiB0aGUgJXVub3JkZXJlZF9tYXAuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guaW5zZXJ0KF9feCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPHZhbHVlX3R5cGUsCisJCQkJCQkgICAgX1BhaXImJj46OnZhbHVlPjo6dHlwZT4KKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisJaW5zZXJ0KF9QYWlyJiYgX194KQorICAgICAgICB7IHJldHVybiBfTV9oLmluc2VydChzdGQ6OmZvcndhcmQ8X1BhaXI+KF9feCkpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYSBzdGQ6OnBhaXIgaW50byB0aGUgJXVub3JkZXJlZF9tYXAuCisgICAgICAgKiAgQHBhcmFtICBfX2hpbnQgIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUKKyAgICAgICAqICAgICAgICAgICAgICAgICBwYWlyIHNob3VsZCBiZSBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgUGFpciB0byBiZSBpbnNlcnRlZCAoc2VlIHN0ZDo6bWFrZV9wYWlyIGZvciBlYXN5IGNyZWF0aW9uCisgICAgICAgKiAgICAgICAgICAgICAgIG9mIHBhaXJzKS4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBlbGVtZW50IHdpdGgga2V5IG9mCisgICAgICAgKiAgICAgICAgICAgQGEgX194IChtYXkgb3IgbWF5IG5vdCBiZSB0aGUgJXBhaXIgcGFzc2VkIGluKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBub3QgY29uY2VybmVkIGFib3V0IHdoZXRoZXIgdGhlIGluc2VydGlvbiB0b29rIHBsYWNlLAorICAgICAgICogIGFuZCB0aHVzIGRvZXMgbm90IHJldHVybiBhIGJvb2xlYW4gbGlrZSB0aGUgc2luZ2xlLWFyZ3VtZW50IGluc2VydCgpCisgICAgICAgKiAgZG9lcy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4KKyAgICAgICAqICBwb3RlbnRpYWxseSBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZAorICAgICAgICogIGhpbnQgd291bGQgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgU2VlCisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICogIGZvciBtb3JlIG9uIEBhIGhpbnRpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2hpbnQsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guaW5zZXJ0KF9faGludCwgX194KTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwKKwkJCQkJCSAgICBfUGFpciYmPjo6dmFsdWU+Ojp0eXBlPgorCWl0ZXJhdG9yCisJaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faGludCwgX1BhaXImJiBfX3gpCisJeyByZXR1cm4gX01faC5pbnNlcnQoX19oaW50LCBzdGQ6OmZvcndhcmQ8X1BhaXI+KF9feCkpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgYXR0ZW1wdHMgdG8gaW5zZXJ0IGEgcmFuZ2Ugb2YKKyAgICAgICAqICBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqCisgICAgICAgKiAgQ29tcGxleGl0eSBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHJhbmdlIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl2b2lkCisJaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKwl7IF9NX2guaW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhIGxpc3Qgb2YgZWxlbWVudHMgaW50byB0aGUgJXVub3JkZXJlZF9tYXAuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEEgc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IG9mIGVsZW1lbnRzCisgICAgICAgKiAgICAgICAgICAgICAgIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBDb21wbGV4aXR5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgcmFuZ2UgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgX01faC5pbnNlcnQoX19sKTsgfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGFuIGVsZW1lbnQgZnJvbSBhbiAldW5vcmRlcmVkX21hcC4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IGltbWVkaWF0ZWx5IGZvbGxvd2luZworICAgICAgICogICAgICAgICAgQGEgX19wb3NpdGlvbiBwcmlvciB0byB0aGUgZWxlbWVudCBiZWluZyBlcmFzZWQuIElmIG5vIHN1Y2gKKyAgICAgICAqICAgICAgICAgIGVsZW1lbnQgZXhpc3RzLCBlbmQoKSBpcyByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYW4gZWxlbWVudCwgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gaXRlcmF0b3IsCisgICAgICAgKiAgZnJvbSBhbiAldW5vcmRlcmVkX21hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYgdGhlCisgICAgICAgKiAgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4KKyAgICAgICAqICBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9fcG9zaXRpb24pOyB9CisKKyAgICAgIC8vIExXRyAyMDU5LgorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9faXQpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSBvZiBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGVyYXNlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYWxsIHRoZSBlbGVtZW50cyBsb2NhdGVkIGJ5IHRoZSBnaXZlbiBrZXkgZnJvbQorICAgICAgICogIGFuICV1bm9yZGVyZWRfbWFwLiBGb3IgYW4gJXVub3JkZXJlZF9tYXAgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uCisgICAgICAgKiAgY2FuIG9ubHkgYmUgMCAobm90IHByZXNlbnQpIG9yIDEgKHByZXNlbnQpLgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZiB0aGUKKyAgICAgICAqICBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbgorICAgICAgICogIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhIFtfX2ZpcnN0LF9fbGFzdCkgcmFuZ2Ugb2YgZWxlbWVudHMgZnJvbSBhbgorICAgICAgICogICV1bm9yZGVyZWRfbWFwLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgICBlcmFzZWQuCisgICAgICAgKiAgQHBhcmFtIF9fbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8KKyAgICAgICAqICAgICAgICAgICAgICAgIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIFRoZSBpdGVyYXRvciBAYSBfX2xhc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZnJvbSBhbiAldW5vcmRlcmVkX21hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkCisgICAgICAgKiAgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIGFsbCBlbGVtZW50cyBpbiBhbiAldW5vcmRlcmVkX21hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZQorICAgICAgICogIGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIHBvaW50ZXJzLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBub2V4Y2VwdAorICAgICAgeyBfTV9oLmNsZWFyKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTd2FwcyBkYXRhIHdpdGggYW5vdGhlciAldW5vcmRlcmVkX21hcC4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgQW4gJXVub3JkZXJlZF9tYXAgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yCisgICAgICAgKiAgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZXhjaGFuZ2VzIHRoZSBlbGVtZW50cyBiZXR3ZWVuIHR3byAldW5vcmRlcmVkX21hcCBpbiBjb25zdGFudCB0aW1lLgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHN0ZDo6c3dhcCgpIGZ1bmN0aW9uIGlzIHNwZWNpYWxpemVkIHN1Y2ggdGhhdAorICAgICAgICogIHN0ZDo6c3dhcChtMSxtMikgd2lsbCBmZWVkIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5vcmRlcmVkX21hcCYgX194KQorICAgICAgeyBfTV9oLnN3YXAoX194Ll9NX2gpOyB9CisKKyAgICAgIC8vIG9ic2VydmVycy4KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBoYXNoIGZ1bmN0b3Igb2JqZWN0IHdpdGggd2hpY2ggdGhlICV1bm9yZGVyZWRfbWFwIHdhcworICAgICAgLy8vICBjb25zdHJ1Y3RlZC4KKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdGlvbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmhhc2hfZnVuY3Rpb24oKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIGtleSBjb21wYXJpc29uIG9iamVjdCB3aXRoIHdoaWNoIHRoZSAldW5vcmRlcmVkX21hcCB3YXMKKyAgICAgIC8vLyAgY29uc3RydWN0ZWQuCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmtleV9lcSgpOyB9CisKKyAgICAgIC8vIGxvb2t1cC4KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRyaWVzIHRvIGxvY2F0ZSBhbiBlbGVtZW50IGluIGFuICV1bm9yZGVyZWRfbWFwLgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIgZWxlbWVudCwgb3IgZW5kKCkgaWYgbm90CisgICAgICAgKiAgICAgICAgICAgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBzb3VnaHQgYWZ0ZXIgZWxlbWVudC4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIHRoZQorICAgICAgICogIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmZpbmQoX194KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5maW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgdG8gY291bnQuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggc3BlY2lmaWVkIGtleS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGZvciAldW5vcmRlcmVkX211bHRpbWFwOyBmb3IKKyAgICAgICAqICAldW5vcmRlcmVkX21hcCB0aGUgcmVzdWx0IHdpbGwgZWl0aGVyIGJlIDAgKG5vdCBwcmVzZW50KSBvciAxCisgICAgICAgKiAgKHByZXNlbnQpLgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmNvdW50KF9feCk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEZpbmRzIGEgc3Vic2VxdWVuY2UgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBQYWlyIG9mIGl0ZXJhdG9ycyB0aGF0IHBvc3NpYmx5IHBvaW50cyB0byB0aGUgc3Vic2VxdWVuY2UKKyAgICAgICAqICAgICAgICAgICBtYXRjaGluZyBnaXZlbiBrZXkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gcHJvYmFibHkgb25seSBtYWtlcyBzZW5zZSBmb3IgJXVub3JkZXJlZF9tdWx0aW1hcC4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmVxdWFsX3JhbmdlKF9feCk7IH0KKworICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmVxdWFsX3JhbmdlKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdWJzY3JpcHQgKCBAYyBbXSApIGFjY2VzcyB0byAldW5vcmRlcmVkX21hcCBkYXRhLgorICAgICAgICogIEBwYXJhbSAgX19rICBUaGUga2V5IGZvciB3aGljaCBkYXRhIHNob3VsZCBiZSByZXRyaWV2ZWQuCisgICAgICAgKiAgQHJldHVybiAgQSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgb2YgdGhlIChrZXksZGF0YSkgJXBhaXIuCisgICAgICAgKgorICAgICAgICogIEFsbG93cyBmb3IgZWFzeSBsb29rdXAgd2l0aCB0aGUgc3Vic2NyaXB0ICggQGMgW10gKW9wZXJhdG9yLiAgUmV0dXJucworICAgICAgICogIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgc3BlY2lmaWVkIGluIHN1YnNjcmlwdC4gIElmIHRoZSBrZXkgZG9lcworICAgICAgICogIG5vdCBleGlzdCwgYSBwYWlyIHdpdGggdGhhdCBrZXkgaXMgY3JlYXRlZCB1c2luZyBkZWZhdWx0IHZhbHVlcywgd2hpY2gKKyAgICAgICAqICBpcyB0aGVuIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBMb29rdXAgcmVxdWlyZXMgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgbWFwcGVkX3R5cGUmCisgICAgICBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgICB7IHJldHVybiBfTV9oW19fa107IH0KKworICAgICAgbWFwcGVkX3R5cGUmCisgICAgICBvcGVyYXRvcltdKGtleV90eXBlJiYgX19rKQorICAgICAgeyByZXR1cm4gX01faFtzdGQ6Om1vdmUoX19rKV07IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3MgdG8gJXVub3JkZXJlZF9tYXAgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIF9fayAgVGhlIGtleSBmb3Igd2hpY2ggZGF0YSBzaG91bGQgYmUgcmV0cmlldmVkLgorICAgICAgICogIEByZXR1cm4gIEEgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIHdob3NlIGtleSBpcyBlcXVhbCB0byBAYSBfX2ssIGlmCisgICAgICAgKiAgICAgICAgICAgc3VjaCBhIGRhdGEgaXMgcHJlc2VudCBpbiB0aGUgJXVub3JkZXJlZF9tYXAuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgbm8gc3VjaCBkYXRhIGlzIHByZXNlbnQuCisgICAgICAgKi8KKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgYXQoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICAgIHsgcmV0dXJuIF9NX2guYXQoX19rKTsgfQorCisgICAgICBjb25zdCBtYXBwZWRfdHlwZSYKKyAgICAgIGF0KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmF0KF9fayk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy8gYnVja2V0IGludGVyZmFjZS4KKworICAgICAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBidWNrZXRzIG9mIHRoZSAldW5vcmRlcmVkX21hcC4KKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guYnVja2V0X2NvdW50KCk7IH0KKworICAgICAgLy8vIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ1Y2tldHMgb2YgdGhlICV1bm9yZGVyZWRfbWFwLgorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubWF4X2J1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIC8qCisgICAgICAgKiBAYnJpZWYgIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGdpdmVuIGJ1Y2tldC4KKyAgICAgICAqIEBwYXJhbSAgX19uICBBIGJ1Y2tldCBpbmRleC4KKyAgICAgICAqIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1Y2tldC4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfc2l6ZShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5idWNrZXRfc2l6ZShfX24pOyB9CisKKyAgICAgIC8qCisgICAgICAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGJ1Y2tldCBpbmRleCBvZiBhIGdpdmVuIGVsZW1lbnQuCisgICAgICAgKiBAcGFyYW0gIF9fa2V5ICBBIGtleSBpbnN0YW5jZS4KKyAgICAgICAqIEByZXR1cm4gIFRoZSBrZXkgYnVja2V0IGluZGV4LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmJ1Y2tldChfX2tleSk7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgYnVja2V0CisgICAgICAgKiAgICAgICAgIGVsZW1lbnQuCisgICAgICAgKiAgQHBhcmFtICBfX24gVGhlIGJ1Y2tldCBpbmRleC4KKyAgICAgICAqICBAcmV0dXJuICBBIHJlYWQvd3JpdGUgbG9jYWwgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gX01faC5iZWdpbihfX24pOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdAorICAgICAgICogICAgICAgICBidWNrZXQgZWxlbWVudC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiBUaGUgYnVja2V0IGluZGV4LgorICAgICAgICogIEByZXR1cm4gIEEgcmVhZC1vbmx5IGxvY2FsIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2guYmVnaW4oX19uKTsgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2JlZ2luKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmNiZWdpbihfX24pOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgcG9pbnRpbmcgdG8gb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICAgICAgICAgYnVja2V0IGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX19uIFRoZSBidWNrZXQgaW5kZXguCisgICAgICAgKiAgQHJldHVybiAgQSByZWFkL3dyaXRlIGxvY2FsIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiBfTV9oLmVuZChfX24pOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHBvaW50aW5nIHRvIG9uZSBwYXN0CisgICAgICAgKiAgICAgICAgIHRoZSBsYXN0IGJ1Y2tldCBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiBUaGUgYnVja2V0IGluZGV4LgorICAgICAgICogIEByZXR1cm4gIEEgcmVhZC1vbmx5IGxvY2FsIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmVuZChfX24pOyB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBjZW5kKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmNlbmQoX19uKTsgfQorICAgICAgLy9AfQorCisgICAgICAvLyBoYXNoIHBvbGljeS4KKworICAgICAgLy8vIFJldHVybnMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGVsZW1lbnRzIHBlciBidWNrZXQuCisgICAgICBmbG9hdAorICAgICAgbG9hZF9mYWN0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5sb2FkX2ZhY3RvcigpOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyIHRoYXQgdGhlICV1bm9yZGVyZWRfbWFwIHRyaWVzIHRvIGtlZXAgdGhlCisgICAgICAvLy8gbG9hZCBmYWN0b3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvLgorICAgICAgZmxvYXQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLm1heF9sb2FkX2ZhY3RvcigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhbmdlIHRoZSAldW5vcmRlcmVkX21hcCBtYXhpbXVtIGxvYWQgZmFjdG9yLgorICAgICAgICogIEBwYXJhbSAgX196IFRoZSBuZXcgbWF4aW11bSBsb2FkIGZhY3Rvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgbWF4X2xvYWRfZmFjdG9yKGZsb2F0IF9feikKKyAgICAgIHsgX01faC5tYXhfbG9hZF9mYWN0b3IoX196KTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1heSByZWhhc2ggdGhlICV1bm9yZGVyZWRfbWFwLgorICAgICAgICogIEBwYXJhbSAgX19uIFRoZSBuZXcgbnVtYmVyIG9mIGJ1Y2tldHMuCisgICAgICAgKgorICAgICAgICogIFJlaGFzaCB3aWxsIG9jY3VyIG9ubHkgaWYgdGhlIG5ldyBudW1iZXIgb2YgYnVja2V0cyByZXNwZWN0IHRoZQorICAgICAgICogICV1bm9yZGVyZWRfbWFwIG1heGltdW0gbG9hZCBmYWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlaGFzaChzaXplX3R5cGUgX19uKQorICAgICAgeyBfTV9oLnJlaGFzaChfX24pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUHJlcGFyZSB0aGUgJXVub3JkZXJlZF9tYXAgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZgorICAgICAgICogICAgICAgICAgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX24gTnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVpcmVkLgorICAgICAgICoKKyAgICAgICAqICBTYW1lIGFzIHJlaGFzaChjZWlsKG4gLyBtYXhfbG9hZF9mYWN0b3IoKSkpLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNlcnZlKHNpemVfdHlwZSBfX24pCisgICAgICB7IF9NX2gucmVzZXJ2ZShfX24pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXkxLCB0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfSGFzaDEsIHR5cGVuYW1lIF9QcmVkMSwKKwkgICAgICAgdHlwZW5hbWUgX0FsbG9jMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgdW5vcmRlcmVkX21hcDxfS2V5MSwgX1RwMSwgX0hhc2gxLCBfUHJlZDEsIF9BbGxvYzE+JiwKKwkJIGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleTEsIF9UcDEsIF9IYXNoMSwgX1ByZWQxLCBfQWxsb2MxPiYpOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgY29tcG9zZWQgb2YgZXF1aXZhbGVudCBrZXlzCisgICAqICAocG9zc2libHkgY29udGFpbmluZyBtdWx0aXBsZSBvZiBlYWNoIGtleSB2YWx1ZSkgdGhhdCBhc3NvY2lhdGVzCisgICAqICB2YWx1ZXMgb2YgYW5vdGhlciB0eXBlIHdpdGggdGhlIGtleXMuCisgICAqCisgICAqICBAaW5ncm91cCB1bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgQHRwYXJhbSAgX0tleSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEB0cGFyYW0gIF9UcCAgVHlwZSBvZiBtYXBwZWQgb2JqZWN0cy4KKyAgICogIEB0cGFyYW0gIF9IYXNoICBIYXNoaW5nIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBoYXNoPF9WYWx1ZT4uCisgICAqICBAdHBhcmFtICBfUHJlZCAgUHJlZGljYXRlIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cworICAgKiAgICAgICAgICAgICAgICAgIHRvIGVxdWFsX3RvPF9WYWx1ZT4uCisgICAqICBAdHBhcmFtICBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8X0tleT4uCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGFuZAorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjeHgiPnVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+CisgICAqCisgICAqIFRoZSByZXN1bHRpbmcgdmFsdWUgdHlwZSBvZiB0aGUgY29udGFpbmVyIGlzIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LgorICAgKgorICAgKiAgQmFzZSBpcyBfSGFzaHRhYmxlLCBkaXNwYXRjaGVkIGF0IGNvbXBpbGUgdGltZSB2aWEgdGVtcGxhdGUKKyAgICogIGFsaWFzIF9fdW1tYXBfaGFzaHRhYmxlLgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLAorCSAgIGNsYXNzIF9IYXNoID0gaGFzaDxfS2V5PiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCisJICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX211bHRpbWFwIDogX19jaGVja19jb3B5X2NvbnN0cnVjdGlibGU8X0FsbG9jPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX191bW1hcF9oYXNodGFibGU8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4gIF9IYXNodGFibGU7CisgICAgICBfSGFzaHRhYmxlIF9NX2g7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlZGVmczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmtleV90eXBlCWtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjp2YWx1ZV90eXBlCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6Om1hcHBlZF90eXBlCW1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjpoYXNoZXIJaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjprZXlfZXF1YWwJa2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLy8vICBJdGVyYXRvci1yZWxhdGVkIHR5cGVkZWZzLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6cG9pbnRlcgkJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OmNvbnN0X3BvaW50ZXIJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnJlZmVyZW5jZQlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpjb25zdF9yZWZlcmVuY2UJY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjppdGVyYXRvcgkJaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmNvbnN0X2l0ZXJhdG9yCWNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjpsb2NhbF9pdGVyYXRvcglsb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6Y29uc3RfbG9jYWxfaXRlcmF0b3IJY29uc3RfbG9jYWxfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OnNpemVfdHlwZQkJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjpkaWZmZXJlbmNlX3R5cGUJZGlmZmVyZW5jZV90eXBlOworICAgICAgLy9AfQorCisgICAgICAvL2NvbnN0cnVjdC9kZXN0cm95L2NvcHkKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIGNyZWF0ZXMgbm8gZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgSW5pdGlhbCBudW1iZXIgb2YgYnVja2V0cy4KKyAgICAgICAqICBAcGFyYW0gX19oZiAgQSBoYXNoIGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fZXFsICBBIGtleSBlcXVhbGl0eSBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faChfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYW4gJXVub3JkZXJlZF9tdWx0aW1hcCBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTWluaW1hbCBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzLgorICAgICAgICogIEBwYXJhbSBfX2hmICBBIGhhc2ggZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19lcWwgIEEga2V5IGVxdWFsaXR5IGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGFuICV1bm9yZGVyZWRfbXVsdGltYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzCisgICAgICAgKiAgZnJvbSBbX19maXJzdCxfX2xhc3QpLiAgVGhpcyBpcyBsaW5lYXIgaW4gTiAod2hlcmUgTiBpcworICAgICAgICogIGRpc3RhbmNlKF9fZmlyc3QsX19sYXN0KSkuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorCXVub3JkZXJlZF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwKKwkJCSAgIHNpemVfdHlwZSBfX24gPSAwLAorCQkJICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX2goX19mLCBfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKwl7IH0KKworICAgICAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoY29uc3QgdW5vcmRlcmVkX211bHRpbWFwJikgPSBkZWZhdWx0OworCisgICAgICAvLy8gTW92ZSBjb25zdHJ1Y3Rvci4KKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcCh1bm9yZGVyZWRfbXVsdGltYXAmJikgPSBkZWZhdWx0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhbiAldW5vcmRlcmVkX211bHRpbWFwIGZyb20gYW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gX19uICBNaW5pbWFsIGluaXRpYWwgbnVtYmVyIG9mIGJ1Y2tldHMuCisgICAgICAgKiAgQHBhcmFtIF9faGYgIEEgaGFzaCBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSBfX2VxbCAgQSBrZXkgZXF1YWxpdHkgZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGFuICV1bm9yZGVyZWRfbXVsdGltYXAgY29uc2lzdGluZyBvZiBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluCisgICAgICAgKiAgdGhlIGxpc3QuIFRoaXMgaXMgbGluZWFyIGluIE4gKHdoZXJlIE4gaXMgQGEgX19sLnNpemUoKSkuCisgICAgICAgKi8KKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkJCSBzaXplX3R5cGUgX19uID0gMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9oKF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBDb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdW5vcmRlcmVkX211bHRpbWFwJikgPSBkZWZhdWx0OworCisgICAgICAvLy8gTW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgdW5vcmRlcmVkX211bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KHVub3JkZXJlZF9tdWx0aW1hcCYmKSA9IGRlZmF1bHQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgJVVub3JkZXJlZF9tdWx0aW1hcCBsaXN0IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYW4gJXVub3JkZXJlZF9tdWx0aW1hcCB3aXRoIGNvcGllcyBvZiB0aGUgZWxlbWVudHMKKyAgICAgICAqICBpbiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBAYSBfX2wuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgYXNzaWdubWVudCBjb21wbGV0ZWx5IGNoYW5nZXMgdGhlICV1bm9yZGVyZWRfbXVsdGltYXAKKyAgICAgICAqICBhbmQgdGhhdCB0aGUgcmVzdWx0aW5nICV1bm9yZGVyZWRfbXVsdGltYXAncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICogIG51bWJlciBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJX01faCA9IF9fbDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgYWxsb2NhdG9yIG9iamVjdCB3aXRoIHdoaWNoIHRoZSAldW5vcmRlcmVkX211bHRpbWFwIHdhcworICAgICAgLy8vICBjb25zdHJ1Y3RlZC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIC8vIHNpemUgYW5kIGNhcGFjaXR5OgorCisgICAgICAvLy8gIFJldHVybnMgdHJ1ZSBpZiB0aGUgJXVub3JkZXJlZF9tdWx0aW1hcCBpcyBlbXB0eS4KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZW1wdHkoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIHNpemUgb2YgdGhlICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5zaXplKCk7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubWF4X3NpemUoKTsgfQorCisgICAgICAvLyBpdGVyYXRvcnMuCisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZQorICAgICAgICogICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmJlZ2luKCk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmJlZ2luKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmJlZ2luKCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCBpbgorICAgICAgICogIHRoZSAldW5vcmRlcmVkX211bHRpbWFwLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZW5kKCk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXVub3JkZXJlZF9tdWx0aW1hcC4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmVuZCgpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZW5kKCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy8gbW9kaWZpZXJzLgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQXR0ZW1wdHMgdG8gYnVpbGQgYW5kIGluc2VydCBhIHN0ZDo6cGFpciBpbnRvIHRoZQorICAgICAgICogICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSBfX2FyZ3MgIEFyZ3VtZW50cyB1c2VkIHRvIGdlbmVyYXRlIGEgbmV3IHBhaXIgaW5zdGFuY2UgKHNlZQorICAgICAgICoJICAgICAgICBzdGQ6OnBpZWNld2lzZV9jb250cnVjdCBmb3IgcGFzc2luZyBhcmd1bWVudHMgdG8gZWFjaAorICAgICAgICoJICAgICAgICBwYXJ0IG9mIHRoZSBwYWlyIGNvbnN0cnVjdG9yKS4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiAgQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIHBhaXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gYnVpbGQgYW5kIGluc2VydCBhIChrZXksIHZhbHVlKSAlcGFpciBpbnRvCisgICAgICAgKiAgdGhlICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsgcmV0dXJuIF9NX2guZW1wbGFjZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBidWlsZCBhbmQgaW5zZXJ0IGEgc3RkOjpwYWlyIGludG8gdGhlICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUgcGFpcgorICAgICAgICogICAgICAgICAgICAgICAgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSBhIG5ldyBwYWlyIGluc3RhbmNlIChzZWUKKyAgICAgICAqCSAgICAgICAgIHN0ZDo6cGllY2V3aXNlX2NvbnRydWN0IGZvciBwYXNzaW5nIGFyZ3VtZW50cyB0byBlYWNoCisgICAgICAgKgkgICAgICAgICBwYXJ0IG9mIHRoZSBwYWlyIGNvbnN0cnVjdG9yKS4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBlbGVtZW50IHdpdGgga2V5IG9mIHRoZQorICAgICAgICogICAgICAgICAgc3RkOjpwYWlyIGJ1aWx0IGZyb20gQGEgX19hcmdzLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBvbmx5IGEgaGludCBhbmQgY2FuIHBvdGVudGlhbGx5CisgICAgICAgKiAgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGluc2VydGlvbiBwcm9jZXNzLiBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgU2VlCisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICogIGZvciBtb3JlIG9uIEBhIGhpbnRpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsgcmV0dXJuIF9NX2guZW1wbGFjZV9oaW50KF9fcG9zLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJbnNlcnRzIGEgc3RkOjpwYWlyIGludG8gdGhlICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtIF9feCBQYWlyIHRvIGJlIGluc2VydGVkIChzZWUgc3RkOjptYWtlX3BhaXIgZm9yIGVhc3kKKyAgICAgICAqCSAgICAgY3JlYXRpb24gb2YgcGFpcnMpLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgcGFpci4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guaW5zZXJ0KF9feCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPHZhbHVlX3R5cGUsCisJCQkJCQkgICAgX1BhaXImJj46OnZhbHVlPjo6dHlwZT4KKwlpdGVyYXRvcgorCWluc2VydChfUGFpciYmIF9feCkKKyAgICAgICAgeyByZXR1cm4gX01faC5pbnNlcnQoc3RkOjpmb3J3YXJkPF9QYWlyPihfX3gpKTsgfQorICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSW5zZXJ0cyBhIHN0ZDo6cGFpciBpbnRvIHRoZSAldW5vcmRlcmVkX211bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX19oaW50ICBBbiBpdGVyYXRvciB0aGF0IHNlcnZlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgdGhlCisgICAgICAgKiAgICAgICAgICAgICAgICAgcGFpciBzaG91bGQgYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIFBhaXIgdG8gYmUgaW5zZXJ0ZWQgKHNlZSBzdGQ6Om1ha2VfcGFpciBmb3IgZWFzeSBjcmVhdGlvbgorICAgICAgICogICAgICAgICAgICAgICBvZiBwYWlycykuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZWxlbWVudCB3aXRoIGtleSBvZgorICAgICAgICogICAgICAgICAgIEBhIF9feCAobWF5IG9yIG1heSBub3QgYmUgdGhlICVwYWlyIHBhc3NlZCBpbikuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4gcG90ZW50aWFsbHkKKyAgICAgICAqICBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgU2VlCisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICogIGZvciBtb3JlIG9uIEBhIGhpbnRpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2hpbnQsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guaW5zZXJ0KF9faGludCwgX194KTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwKKwkJCQkJCSAgICBfUGFpciYmPjo6dmFsdWU+Ojp0eXBlPgorCWl0ZXJhdG9yCisJaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faGludCwgX1BhaXImJiBfX3gpCisgICAgICAgIHsgcmV0dXJuIF9NX2guaW5zZXJ0KF9faGludCwgc3RkOjpmb3J3YXJkPF9QYWlyPihfX3gpKTsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQSB0ZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGF0dGVtcHRzIHRvIGluc2VydCBhIHJhbmdlIG9mCisgICAgICAgKiAgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdm9pZAorCWluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisJeyBfTV9oLmluc2VydChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBpbnNlcnQgYSBsaXN0IG9mIGVsZW1lbnRzIGludG8gdGhlCisgICAgICAgKiAgJXVub3JkZXJlZF9tdWx0aW1hcC4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQSBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gb2YgZWxlbWVudHMKKyAgICAgICAqICAgICAgICAgICAgICAgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyBfTV9oLmluc2VydChfX2wpOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYW4gZWxlbWVudCBmcm9tIGFuICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBfX3Bvc2l0aW9uICBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZWxlbWVudCBpbW1lZGlhdGVseSBmb2xsb3dpbmcKKyAgICAgICAqICAgICAgICAgIEBhIF9fcG9zaXRpb24gcHJpb3IgdG8gdGhlIGVsZW1lbnQgYmVpbmcgZXJhc2VkLiBJZiBubyBzdWNoCisgICAgICAgKiAgICAgICAgICBlbGVtZW50IGV4aXN0cywgZW5kKCkgaXMgcmV0dXJuZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFuIGVsZW1lbnQsIHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIGl0ZXJhdG9yLAorICAgICAgICogIGZyb20gYW4gJXVub3JkZXJlZF9tdWx0aW1hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYgdGhlCisgICAgICAgKiAgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4KKyAgICAgICAqICBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9fcG9zaXRpb24pOyB9CisKKyAgICAgIC8vIExXRyAyMDU5LgorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9faXQpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBrZXkuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEtleSBvZiBlbGVtZW50cyB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFsbCB0aGUgZWxlbWVudHMgbG9jYXRlZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KKyAgICAgICAqICBhbiAldW5vcmRlcmVkX211bHRpbWFwLgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZiB0aGUKKyAgICAgICAqICBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbgorICAgICAgICogIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9feCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEVyYXNlcyBhIFtfX2ZpcnN0LF9fbGFzdCkgcmFuZ2Ugb2YgZWxlbWVudHMgZnJvbSBhbgorICAgICAgICogICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgIGVyYXNlZC4KKyAgICAgICAqICBAcGFyYW0gX19sYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZSB0bworICAgICAgICogICAgICAgICAgICAgICAgYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gVGhlIGl0ZXJhdG9yIEBhIF9fbGFzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYSBzZXF1ZW5jZSBvZiBlbGVtZW50cyBmcm9tIGFuCisgICAgICAgKiAgJXVub3JkZXJlZF9tdWx0aW1hcC4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkCisgICAgICAgKiAgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIGFsbCBlbGVtZW50cyBpbiBhbiAldW5vcmRlcmVkX211bHRpbWFwLgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50cywgYW5kIHRoYXQgaWYgdGhlCisgICAgICAgKiAgZWxlbWVudHMgdGhlbXNlbHZlcyBhcmUgcG9pbnRlcnMsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZAorICAgICAgICogIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIG5vZXhjZXB0CisgICAgICB7IF9NX2guY2xlYXIoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEFuICV1bm9yZGVyZWRfbXVsdGltYXAgb2YgdGhlIHNhbWUgZWxlbWVudCBhbmQgYWxsb2NhdG9yCisgICAgICAgKiAgdHlwZXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZXhjaGFuZ2VzIHRoZSBlbGVtZW50cyBiZXR3ZWVuIHR3byAldW5vcmRlcmVkX211bHRpbWFwIGluCisgICAgICAgKiAgY29uc3RhbnQgdGltZS4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzdGQ6OnN3YXAoKSBmdW5jdGlvbiBpcyBzcGVjaWFsaXplZCBzdWNoIHRoYXQKKyAgICAgICAqICBzdGQ6OnN3YXAobTEsbTIpIHdpbGwgZmVlZCB0byB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzd2FwKHVub3JkZXJlZF9tdWx0aW1hcCYgX194KQorICAgICAgeyBfTV9oLnN3YXAoX194Ll9NX2gpOyB9CisKKyAgICAgIC8vIG9ic2VydmVycy4KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBoYXNoIGZ1bmN0b3Igb2JqZWN0IHdpdGggd2hpY2ggdGhlICV1bm9yZGVyZWRfbXVsdGltYXAKKyAgICAgIC8vLyAgd2FzIGNvbnN0cnVjdGVkLgorICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0aW9uKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2guaGFzaF9mdW5jdGlvbigpOyB9CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUga2V5IGNvbXBhcmlzb24gb2JqZWN0IHdpdGggd2hpY2ggdGhlICV1bm9yZGVyZWRfbXVsdGltYXAKKyAgICAgIC8vLyAgd2FzIGNvbnN0cnVjdGVkLgorICAgICAga2V5X2VxdWFsCisgICAgICBrZXlfZXEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5rZXlfZXEoKTsgfQorCisgICAgICAvLyBsb29rdXAuCisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUcmllcyB0byBsb2NhdGUgYW4gZWxlbWVudCBpbiBhbiAldW5vcmRlcmVkX211bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIgZWxlbWVudCwgb3IgZW5kKCkgaWYgbm90CisgICAgICAgKiAgICAgICAgICAgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBzb3VnaHQgYWZ0ZXIgZWxlbWVudC4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIHRoZQorICAgICAgICogIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmZpbmQoX194KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5maW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgdG8gY291bnQuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggc3BlY2lmaWVkIGtleS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5jb3VudChfX3gpOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgUGFpciBvZiBpdGVyYXRvcnMgdGhhdCBwb3NzaWJseSBwb2ludHMgdG8gdGhlIHN1YnNlcXVlbmNlCisgICAgICAgKiAgICAgICAgICAgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICovCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guZXF1YWxfcmFuZ2UoX194KTsgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2guZXF1YWxfcmFuZ2UoX194KTsgfQorICAgICAgLy9AfQorCisgICAgICAvLyBidWNrZXQgaW50ZXJmYWNlLgorCisgICAgICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgb2YgdGhlICV1bm9yZGVyZWRfbXVsdGltYXAuCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmJ1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBidWNrZXRzIG9mIHRoZSAldW5vcmRlcmVkX211bHRpbWFwLgorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubWF4X2J1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIC8qCisgICAgICAgKiBAYnJpZWYgIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGdpdmVuIGJ1Y2tldC4KKyAgICAgICAqIEBwYXJhbSAgX19uICBBIGJ1Y2tldCBpbmRleC4KKyAgICAgICAqIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1Y2tldC4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfc2l6ZShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5idWNrZXRfc2l6ZShfX24pOyB9CisKKyAgICAgIC8qCisgICAgICAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGJ1Y2tldCBpbmRleCBvZiBhIGdpdmVuIGVsZW1lbnQuCisgICAgICAgKiBAcGFyYW0gIF9fa2V5ICBBIGtleSBpbnN0YW5jZS4KKyAgICAgICAqIEByZXR1cm4gIFRoZSBrZXkgYnVja2V0IGluZGV4LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmJ1Y2tldChfX2tleSk7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgYnVja2V0CisgICAgICAgKiAgICAgICAgIGVsZW1lbnQuCisgICAgICAgKiAgQHBhcmFtICBfX24gVGhlIGJ1Y2tldCBpbmRleC4KKyAgICAgICAqICBAcmV0dXJuICBBIHJlYWQvd3JpdGUgbG9jYWwgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gX01faC5iZWdpbihfX24pOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdAorICAgICAgICogICAgICAgICBidWNrZXQgZWxlbWVudC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiBUaGUgYnVja2V0IGluZGV4LgorICAgICAgICogIEByZXR1cm4gIEEgcmVhZC1vbmx5IGxvY2FsIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2guYmVnaW4oX19uKTsgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2JlZ2luKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmNiZWdpbihfX24pOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgaXRlcmF0b3IgcG9pbnRpbmcgdG8gb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICAgICAgICAgYnVja2V0IGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX19uIFRoZSBidWNrZXQgaW5kZXguCisgICAgICAgKiAgQHJldHVybiAgQSByZWFkL3dyaXRlIGxvY2FsIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiBfTV9oLmVuZChfX24pOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHBvaW50aW5nIHRvIG9uZSBwYXN0CisgICAgICAgKiAgICAgICAgIHRoZSBsYXN0IGJ1Y2tldCBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiBUaGUgYnVja2V0IGluZGV4LgorICAgICAgICogIEByZXR1cm4gIEEgcmVhZC1vbmx5IGxvY2FsIGl0ZXJhdG9yLgorICAgICAgICovCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmVuZChfX24pOyB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBjZW5kKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmNlbmQoX19uKTsgfQorICAgICAgLy9AfQorCisgICAgICAvLyBoYXNoIHBvbGljeS4KKworICAgICAgLy8vIFJldHVybnMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGVsZW1lbnRzIHBlciBidWNrZXQuCisgICAgICBmbG9hdAorICAgICAgbG9hZF9mYWN0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5sb2FkX2ZhY3RvcigpOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyIHRoYXQgdGhlICV1bm9yZGVyZWRfbXVsdGltYXAgdHJpZXMgdG8ga2VlcAorICAgICAgLy8vIHRoZSBsb2FkIGZhY3RvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8uCisgICAgICBmbG9hdAorICAgICAgbWF4X2xvYWRfZmFjdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubWF4X2xvYWRfZmFjdG9yKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDaGFuZ2UgdGhlICV1bm9yZGVyZWRfbXVsdGltYXAgbWF4aW11bSBsb2FkIGZhY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feiBUaGUgbmV3IG1heGltdW0gbG9hZCBmYWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcihmbG9hdCBfX3opCisgICAgICB7IF9NX2gubWF4X2xvYWRfZmFjdG9yKF9feik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNYXkgcmVoYXNoIHRoZSAldW5vcmRlcmVkX211bHRpbWFwLgorICAgICAgICogIEBwYXJhbSAgX19uIFRoZSBuZXcgbnVtYmVyIG9mIGJ1Y2tldHMuCisgICAgICAgKgorICAgICAgICogIFJlaGFzaCB3aWxsIG9jY3VyIG9ubHkgaWYgdGhlIG5ldyBudW1iZXIgb2YgYnVja2V0cyByZXNwZWN0IHRoZQorICAgICAgICogICV1bm9yZGVyZWRfbXVsdGltYXAgbWF4aW11bSBsb2FkIGZhY3Rvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgICB7IF9NX2gucmVoYXNoKF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQcmVwYXJlIHRoZSAldW5vcmRlcmVkX211bHRpbWFwIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAqICAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX19uIE51bWJlciBvZiBlbGVtZW50cyByZXF1aXJlZC4KKyAgICAgICAqCisgICAgICAgKiAgU2FtZSBhcyByZWhhc2goY2VpbChuIC8gbWF4X2xvYWRfZmFjdG9yKCkpKS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKQorICAgICAgeyBfTV9oLnJlc2VydmUoX19uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5MSwgdHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0hhc2gxLCB0eXBlbmFtZSBfUHJlZDEsCisJICAgICAgIHR5cGVuYW1lIF9BbGxvYzE+CisgICAgICAgIGZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleTEsIF9UcDEsCisJCQkJCSAgICBfSGFzaDEsIF9QcmVkMSwgX0FsbG9jMT4mLAorCQkgICBjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleTEsIF9UcDEsCisJCQkJCSAgICBfSGFzaDEsIF9QcmVkMSwgX0FsbG9jMT4mKTsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01faC5fTV9lcXVhbChfX3kuX01faCk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9oLl9NX2VxdWFsKF9feS5fTV9oKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQ09OVEFJTkVSCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8qIF9VTk9SREVSRURfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy91bm9yZGVyZWRfc2V0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdW5vcmRlcmVkX3NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYzIzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdW5vcmRlcmVkX3NldC5oCkBAIC0wLDAgKzEsMTI5NiBAQAorLy8gdW5vcmRlcmVkX3NldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy91bm9yZGVyZWRfc2V0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt1bm9yZGVyZWRfc2V0fQorICovCisKKyNpZm5kZWYgX1VOT1JERVJFRF9TRVRfSAorI2RlZmluZSBfVU5PUkRFUkVEX1NFVF9ICisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIC8vLyBCYXNlIHR5cGVzIGZvciB1bm9yZGVyZWRfc2V0LgorICB0ZW1wbGF0ZTxib29sIF9DYWNoZT4KKyAgICB1c2luZyBfX3VzZXRfdHJhaXRzID0gX19kZXRhaWw6Ol9IYXNodGFibGVfdHJhaXRzPF9DYWNoZSwgdHJ1ZSwgdHJ1ZT47CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9IYXNoID0gaGFzaDxfVmFsdWU+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorICAJICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X1ZhbHVlPiwKKwkgICB0eXBlbmFtZSBfVHIgPSBfX3VzZXRfdHJhaXRzPF9fY2FjaGVfZGVmYXVsdDxfVmFsdWUsIF9IYXNoPjo6dmFsdWU+PgorICAgIHVzaW5nIF9fdXNldF9oYXNodGFibGUgPSBfSGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkJCV9fZGV0YWlsOjpfSWRlbnRpdHksIF9QcmVkLCBfSGFzaCwKKwkJCQkJX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCQkJX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJCQlfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksIF9Ucj47CisKKyAgLy8vIEJhc2UgdHlwZXMgZm9yIHVub3JkZXJlZF9tdWx0aXNldC4KKyAgdGVtcGxhdGU8Ym9vbCBfQ2FjaGU+CisgICAgdXNpbmcgX191bXNldF90cmFpdHMgPSBfX2RldGFpbDo6X0hhc2h0YWJsZV90cmFpdHM8X0NhY2hlLCB0cnVlLCBmYWxzZT47CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9IYXNoID0gaGFzaDxfVmFsdWU+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfVmFsdWU+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9WYWx1ZT4sCisJICAgdHlwZW5hbWUgX1RyID0gX191bXNldF90cmFpdHM8X19jYWNoZV9kZWZhdWx0PF9WYWx1ZSwgX0hhc2g+Ojp2YWx1ZT4+CisgICAgdXNpbmcgX191bXNldF9oYXNodGFibGUgPSBfSGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkJCSBfX2RldGFpbDo6X0lkZW50aXR5LAorCQkJCQkgX1ByZWQsIF9IYXNoLAorCQkJCQkgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCQkJIF9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCwKKwkJCQkJIF9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwgX1RyPjsKKworICAvKioKKyAgICogIEBicmllZiBBIHN0YW5kYXJkIGNvbnRhaW5lciBjb21wb3NlZCBvZiB1bmlxdWUga2V5cyAoY29udGFpbmluZworICAgKiAgYXQgbW9zdCBvbmUgb2YgZWFjaCBrZXkgdmFsdWUpIGluIHdoaWNoIHRoZSBlbGVtZW50cycga2V5cyBhcmUKKyAgICogIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzLgorICAgKgorICAgKiAgQGluZ3JvdXAgdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcnMKKyAgICoKKyAgICogIEB0cGFyYW0gIF9WYWx1ZSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEB0cGFyYW0gIF9IYXNoICBIYXNoaW5nIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBoYXNoPF9WYWx1ZT4uCisKKyAgICogIEB0cGFyYW0gX1ByZWQgUHJlZGljYXRlIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0bworICAgKiAgICAgICAgICAgICAgICBlcXVhbF90bzxfVmFsdWU+LgorICAgKgorICAgKiAgQHRwYXJhbSAgX0FsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPF9LZXk+LgorICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhbmQKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sI3h4Ij51bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyPC9hPgorICAgKgorICAgKiAgQmFzZSBpcyBfSGFzaHRhYmxlLCBkaXNwYXRjaGVkIGF0IGNvbXBpbGUgdGltZSB2aWEgdGVtcGxhdGUKKyAgICogIGFsaWFzIF9fdXNldF9oYXNodGFibGUuCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsCisJICAgY2xhc3MgX0hhc2ggPSBoYXNoPF9WYWx1ZT4sCisJICAgY2xhc3MgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9WYWx1ZT4sCisJICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X1ZhbHVlPiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX3NldCA6IF9fY2hlY2tfY29weV9jb25zdHJ1Y3RpYmxlPF9BbGxvYz4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fdXNldF9oYXNodGFibGU8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4gIF9IYXNodGFibGU7CisgICAgICBfSGFzaHRhYmxlIF9NX2g7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlZGVmczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmtleV90eXBlCWtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjp2YWx1ZV90eXBlCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6Omhhc2hlcgloYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmtleV9lcXVhbAlrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvLy8gIEl0ZXJhdG9yLXJlbGF0ZWQgdHlwZWRlZnMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpwb2ludGVyCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6Y29uc3RfcG9pbnRlcgljb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6cmVmZXJlbmNlCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OmNvbnN0X3JlZmVyZW5jZQljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6Oml0ZXJhdG9yCQlpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6Y29uc3RfaXRlcmF0b3IJY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmxvY2FsX2l0ZXJhdG9yCWxvY2FsX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjpjb25zdF9sb2NhbF9pdGVyYXRvcgljb25zdF9sb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6c2l6ZV90eXBlCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmRpZmZlcmVuY2VfdHlwZQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIC8vIGNvbnN0cnVjdC9kZXN0cm95L2NvcHkKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSBfX24gIEluaXRpYWwgbnVtYmVyIG9mIGJ1Y2tldHMuCisgICAgICAgKiAgQHBhcmFtIF9faGYgIEEgaGFzaCBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSBfX2VxbCAgQSBrZXkgZXF1YWxpdHkgZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19hICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX3NldChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9oKF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJ1aWxkcyBhbiAldW5vcmRlcmVkX3NldCBmcm9tIGEgcmFuZ2UuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTWluaW1hbCBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzLgorICAgICAgICogIEBwYXJhbSBfX2hmICBBIGhhc2ggZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19lcWwgIEEga2V5IGVxdWFsaXR5IGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGFuICV1bm9yZGVyZWRfc2V0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBmcm9tCisgICAgICAgKiAgW19fZmlyc3QsX19sYXN0KS4gIFRoaXMgaXMgbGluZWFyIGluIE4gKHdoZXJlIE4gaXMKKyAgICAgICAqICBkaXN0YW5jZShfX2ZpcnN0LF9fbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl1bm9yZGVyZWRfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorCQkgICAgICBzaXplX3R5cGUgX19uID0gMCwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9oKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisJeyB9CisKKyAgICAgIC8vLyBDb3B5IGNvbnN0cnVjdG9yLgorICAgICAgdW5vcmRlcmVkX3NldChjb25zdCB1bm9yZGVyZWRfc2V0JikgPSBkZWZhdWx0OworCisgICAgICAvLy8gTW92ZSBjb25zdHJ1Y3Rvci4KKyAgICAgIHVub3JkZXJlZF9zZXQodW5vcmRlcmVkX3NldCYmKSA9IGRlZmF1bHQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGFuICV1bm9yZGVyZWRfc2V0IGZyb20gYW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gX19uICBNaW5pbWFsIGluaXRpYWwgbnVtYmVyIG9mIGJ1Y2tldHMuCisgICAgICAgKiAgQHBhcmFtIF9faGYgIEEgaGFzaCBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSBfX2VxbCAgQSBrZXkgZXF1YWxpdHkgZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQW4gYWxsb2NhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQ3JlYXRlIGFuICV1bm9yZGVyZWRfc2V0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUKKyAgICAgICAqICBsaXN0LiBUaGlzIGlzIGxpbmVhciBpbiBOICh3aGVyZSBOIGlzIEBhIF9fbC5zaXplKCkpLgorICAgICAgICovCisgICAgICB1bm9yZGVyZWRfc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCQkgICAgc2l6ZV90eXBlIF9fbiA9IDAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01faChfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICAvLy8gQ29weSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgdW5vcmRlcmVkX3NldCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB1bm9yZGVyZWRfc2V0JikgPSBkZWZhdWx0OworCisgICAgICAvLy8gTW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgdW5vcmRlcmVkX3NldCYKKyAgICAgIG9wZXJhdG9yPSh1bm9yZGVyZWRfc2V0JiYpID0gZGVmYXVsdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlVW5vcmRlcmVkX3NldCBsaXN0IGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZmlsbHMgYW4gJXVub3JkZXJlZF9zZXQgd2l0aCBjb3BpZXMgb2YgdGhlIGVsZW1lbnRzIGluCisgICAgICAgKiAgdGhlIGluaXRpYWxpemVyIGxpc3QgQGEgX19sLgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGFzc2lnbm1lbnQgY29tcGxldGVseSBjaGFuZ2VzIHRoZSAldW5vcmRlcmVkX3NldCBhbmQKKyAgICAgICAqICB0aGF0IHRoZSByZXN1bHRpbmcgJXVub3JkZXJlZF9zZXQncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICB1bm9yZGVyZWRfc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9NX2ggPSBfX2w7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIGFsbG9jYXRvciBvYmplY3Qgd2l0aCB3aGljaCB0aGUgJXVub3JkZXJlZF9zZXQgd2FzCisgICAgICAvLy8gIGNvbnN0cnVjdGVkLgorICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgLy8gc2l6ZSBhbmQgY2FwYWNpdHk6CisKKyAgICAgIC8vLyAgUmV0dXJucyB0cnVlIGlmIHRoZSAldW5vcmRlcmVkX3NldCBpcyBlbXB0eS4KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZW1wdHkoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIHNpemUgb2YgdGhlICV1bm9yZGVyZWRfc2V0LgorICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guc2l6ZSgpOyB9CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSAldW5vcmRlcmVkX3NldC4KKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIC8vIGl0ZXJhdG9ycy4KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICV1bm9yZGVyZWRfc2V0LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5iZWdpbigpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmJlZ2luKCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXVub3JkZXJlZF9zZXQuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5lbmQoKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZW5kKCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgaW4gdGhlICV1bm9yZGVyZWRfc2V0LgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guYmVnaW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgb25lIHBhc3QgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAldW5vcmRlcmVkX3NldC4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5lbmQoKTsgfQorCisgICAgICAvLyBtb2RpZmllcnMuCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBdHRlbXB0cyB0byBidWlsZCBhbmQgaW5zZXJ0IGFuIGVsZW1lbnQgaW50byB0aGUKKyAgICAgICAqICAldW5vcmRlcmVkX3NldC4KKyAgICAgICAqICBAcGFyYW0gX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSBhbiBlbGVtZW50LgorICAgICAgICogIEByZXR1cm4gIEEgcGFpciwgb2Ygd2hpY2ggdGhlIGZpcnN0IGVsZW1lbnQgaXMgYW4gaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICAgICAgICAgICB0byB0aGUgcG9zc2libHkgaW5zZXJ0ZWQgZWxlbWVudCwgYW5kIHRoZSBzZWNvbmQgaXMgYSBib29sCisgICAgICAgKiAgICAgICAgICAgdGhhdCBpcyB0cnVlIGlmIHRoZSBlbGVtZW50IHdhcyBhY3R1YWxseSBpbnNlcnRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBidWlsZCBhbmQgaW5zZXJ0IGFuIGVsZW1lbnQgaW50byB0aGUKKyAgICAgICAqICAldW5vcmRlcmVkX3NldC4gQW4gJXVub3JkZXJlZF9zZXQgcmVsaWVzIG9uIHVuaXF1ZSBrZXlzIGFuZCB0aHVzIGFuCisgICAgICAgKiAgZWxlbWVudCBpcyBvbmx5IGluc2VydGVkIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlCisgICAgICAgKiAgJXVub3JkZXJlZF9zZXQuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gX01faC5lbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhbiBlbGVtZW50IGludG8gdGhlICV1bm9yZGVyZWRfc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUKKyAgICAgICAqICAgICAgICAgICAgICAgIGVsZW1lbnQgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZWxlbWVudCB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGVsZW1lbnQgd2l0aCBrZXkgZXF1aXZhbGVudCB0bworICAgICAgICogICAgICAgICAgdGhlIG9uZSBnZW5lcmF0ZWQgZnJvbSBAYSBfX2FyZ3MgKG1heSBvciBtYXkgbm90IGJlIHRoZQorICAgICAgICogICAgICAgICAgZWxlbWVudCBpdHNlbGYpLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjb25jZXJuZWQgYWJvdXQgd2hldGhlciB0aGUgaW5zZXJ0aW9uIHRvb2sgcGxhY2UsCisgICAgICAgKiAgYW5kIHRodXMgZG9lcyBub3QgcmV0dXJuIGEgYm9vbGVhbiBsaWtlIHRoZSBzaW5nbGUtYXJndW1lbnQgZW1wbGFjZSgpCisgICAgICAgKiAgZG9lcy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4KKyAgICAgICAqICBwb3RlbnRpYWxseSBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZAorICAgICAgICogIGhpbnQgd291bGQgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIG1vcmUgb24gQGEgaGludGluZywgc2VlOgorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2VfaGludChjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gX01faC5lbXBsYWNlX2hpbnQoX19wb3MsIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhbiBlbGVtZW50IGludG8gdGhlICV1bm9yZGVyZWRfc2V0LgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gIEEgcGFpciwgb2Ygd2hpY2ggdGhlIGZpcnN0IGVsZW1lbnQgaXMgYW4gaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICAgICAgICAgICB0byB0aGUgcG9zc2libHkgaW5zZXJ0ZWQgZWxlbWVudCwgYW5kIHRoZSBzZWNvbmQgaXMgYSBib29sCisgICAgICAgKiAgICAgICAgICAgdGhhdCBpcyB0cnVlIGlmIHRoZSBlbGVtZW50IHdhcyBhY3R1YWxseSBpbnNlcnRlZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBpbnNlcnQgYW4gZWxlbWVudCBpbnRvIHRoZSAldW5vcmRlcmVkX3NldC4KKyAgICAgICAqICBBbiAldW5vcmRlcmVkX3NldCByZWxpZXMgb24gdW5pcXVlIGtleXMgYW5kIHRodXMgYW4gZWxlbWVudCBpcyBvbmx5CisgICAgICAgKiAgaW5zZXJ0ZWQgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudCBpbiB0aGUgJXVub3JkZXJlZF9zZXQuCisgICAgICAgKgorICAgICAgICogIEluc2VydGlvbiByZXF1aXJlcyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guaW5zZXJ0KF9feCk7IH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmluc2VydChzdGQ6Om1vdmUoX194KSk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhbiBlbGVtZW50IGludG8gdGhlICV1bm9yZGVyZWRfc2V0LgorICAgICAgICogIEBwYXJhbSAgX19oaW50ICBBbiBpdGVyYXRvciB0aGF0IHNlcnZlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgdGhlCisgICAgICAgKiAgICAgICAgICAgICAgICAgZWxlbWVudCBzaG91bGQgYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZWxlbWVudCB3aXRoIGtleSBvZgorICAgICAgICogICAgICAgICAgIEBhIF9feCAobWF5IG9yIG1heSBub3QgYmUgdGhlIGVsZW1lbnQgcGFzc2VkIGluKS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBub3QgY29uY2VybmVkIGFib3V0IHdoZXRoZXIgdGhlIGluc2VydGlvbiB0b29rIHBsYWNlLAorICAgICAgICogIGFuZCB0aHVzIGRvZXMgbm90IHJldHVybiBhIGJvb2xlYW4gbGlrZSB0aGUgc2luZ2xlLWFyZ3VtZW50IGluc2VydCgpCisgICAgICAgKiAgZG9lcy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4KKyAgICAgICAqICBwb3RlbnRpYWxseSBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZAorICAgICAgICogIGhpbnQgd291bGQgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIG1vcmUgb24gQGEgaGludGluZywgc2VlOgorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGFtb3J0aXplZCBjb25zdGFudC4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2hpbnQsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guaW5zZXJ0KF9faGludCwgX194KTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faGludCwgdmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guaW5zZXJ0KF9faGludCwgc3RkOjptb3ZlKF9feCkpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBBIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgYXR0ZW1wdHMgdG8gaW5zZXJ0IGEgcmFuZ2Ugb2YKKyAgICAgICAqICBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19sYXN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqCisgICAgICAgKiAgQ29tcGxleGl0eSBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHJhbmdlIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl2b2lkCisJaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKwl7IF9NX2guaW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEF0dGVtcHRzIHRvIGluc2VydCBhIGxpc3Qgb2YgZWxlbWVudHMgaW50byB0aGUgJXVub3JkZXJlZF9zZXQuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEEgc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IG9mIGVsZW1lbnRzCisgICAgICAgKiAgICAgICAgICAgICAgIHRvIGJlIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBDb21wbGV4aXR5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgcmFuZ2UgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgX01faC5pbnNlcnQoX19sKTsgfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGFuIGVsZW1lbnQgZnJvbSBhbiAldW5vcmRlcmVkX3NldC4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IHRvIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIEFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbGVtZW50IGltbWVkaWF0ZWx5IGZvbGxvd2luZworICAgICAgICogICAgICAgICAgQGEgX19wb3NpdGlvbiBwcmlvciB0byB0aGUgZWxlbWVudCBiZWluZyBlcmFzZWQuIElmIG5vIHN1Y2gKKyAgICAgICAqICAgICAgICAgIGVsZW1lbnQgZXhpc3RzLCBlbmQoKSBpcyByZXR1cm5lZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBlcmFzZXMgYW4gZWxlbWVudCwgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gaXRlcmF0b3IsCisgICAgICAgKiAgZnJvbSBhbiAldW5vcmRlcmVkX3NldC4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZQorICAgICAgICogIGVsZW1lbnQsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvCisgICAgICAgKiAgbWVtb3J5IGlzIG5vdCB0b3VjaGVkIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzCisgICAgICAgKiAgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyByZXR1cm4gX01faC5lcmFzZShfX3Bvc2l0aW9uKTsgfQorCisgICAgICAvLyBMV0cgMjA1OS4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2l0KQorICAgICAgeyByZXR1cm4gX01faC5lcmFzZShfX2l0KTsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGVsZW1lbnRzIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFsbCB0aGUgZWxlbWVudHMgbG9jYXRlZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KKyAgICAgICAqICBhbiAldW5vcmRlcmVkX3NldC4gRm9yIGFuICV1bm9yZGVyZWRfc2V0IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbgorICAgICAgICogIGNhbiBvbmx5IGJlIDAgKG5vdCBwcmVzZW50KSBvciAxIChwcmVzZW50KS4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYKKyAgICAgICAqICB0aGUgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQKKyAgICAgICAqICBpbiBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01faC5lcmFzZShfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYSBbX19maXJzdCxfX2xhc3QpIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gYW4KKyAgICAgICAqICAldW5vcmRlcmVkX3NldC4KKyAgICAgICAqICBAcGFyYW0gIF9fZmlyc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgZXJhc2VkLgorICAgICAgICogIEBwYXJhbSBfX2xhc3QgIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRvCisgICAgICAgKiAgICAgICAgICAgICAgICBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiBUaGUgaXRlcmF0b3IgQGEgX19sYXN0LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzIGZyb20gYW4gJXVub3JkZXJlZF9zZXQuCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnQsIGFuZCB0aGF0IGlmCisgICAgICAgKiAgdGhlIGVsZW1lbnQgaXMgaXRzZWxmIGEgcG9pbnRlciwgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkCisgICAgICAgKiAgaW4gYW55IHdheS4gIE1hbmFnaW5nIHRoZSBwb2ludGVyIGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBfTV9oLmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgRXJhc2VzIGFsbCBlbGVtZW50cyBpbiBhbiAldW5vcmRlcmVkX3NldC4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seQorICAgICAgICogIGVyYXNlcyB0aGUgZWxlbWVudHMsIGFuZCB0aGF0IGlmIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywKKyAgICAgICAqICB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4gYW55IHdheS4gTWFuYWdpbmcgdGhlIHBvaW50ZXIKKyAgICAgICAqICBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIG5vZXhjZXB0CisgICAgICB7IF9NX2guY2xlYXIoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXBzIGRhdGEgd2l0aCBhbm90aGVyICV1bm9yZGVyZWRfc2V0LgorICAgICAgICogIEBwYXJhbSAgX194ICBBbiAldW5vcmRlcmVkX3NldCBvZiB0aGUgc2FtZSBlbGVtZW50IGFuZCBhbGxvY2F0b3IKKyAgICAgICAqICB0eXBlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBleGNoYW5nZXMgdGhlIGVsZW1lbnRzIGJldHdlZW4gdHdvIHNldHMgaW4gY29uc3RhbnQgdGltZS4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzdGQ6OnN3YXAoKSBmdW5jdGlvbiBpcyBzcGVjaWFsaXplZCBzdWNoIHRoYXQKKyAgICAgICAqICBzdGQ6OnN3YXAoczEsczIpIHdpbGwgZmVlZCB0byB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzd2FwKHVub3JkZXJlZF9zZXQmIF9feCkKKyAgICAgIHsgX01faC5zd2FwKF9feC5fTV9oKTsgfQorCisgICAgICAvLyBvYnNlcnZlcnMuCisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgaGFzaCBmdW5jdG9yIG9iamVjdCB3aXRoIHdoaWNoIHRoZSAldW5vcmRlcmVkX3NldCB3YXMKKyAgICAgIC8vLyAgY29uc3RydWN0ZWQuCisgICAgICBoYXNoZXIKKyAgICAgIGhhc2hfZnVuY3Rpb24oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5oYXNoX2Z1bmN0aW9uKCk7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBrZXkgY29tcGFyaXNvbiBvYmplY3Qgd2l0aCB3aGljaCB0aGUgJXVub3JkZXJlZF9zZXQgd2FzCisgICAgICAvLy8gIGNvbnN0cnVjdGVkLgorICAgICAga2V5X2VxdWFsCisgICAgICBrZXlfZXEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5rZXlfZXEoKTsgfQorCisgICAgICAvLyBsb29rdXAuCisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUcmllcyB0byBsb2NhdGUgYW4gZWxlbWVudCBpbiBhbiAldW5vcmRlcmVkX3NldC4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgRWxlbWVudCB0byBiZSBsb2NhdGVkLgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIHBvaW50aW5nIHRvIHNvdWdodC1hZnRlciBlbGVtZW50LCBvciBlbmQoKSBpZiBub3QKKyAgICAgICAqICAgICAgICAgICBmb3VuZC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIGtleSBhbmQgdHJpZXMgdG8gbG9jYXRlIHRoZSBlbGVtZW50IHdpdGggd2hpY2gKKyAgICAgICAqICB0aGUga2V5IG1hdGNoZXMuICBJZiBzdWNjZXNzZnVsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGl0ZXJhdG9yCisgICAgICAgKiAgcG9pbnRpbmcgdG8gdGhlIHNvdWdodCBhZnRlciBlbGVtZW50LiAgSWYgdW5zdWNjZXNzZnVsIGl0IHJldHVybnMgdGhlCisgICAgICAgKiAgcGFzdC10aGUtZW5kICggQGMgZW5kKCkgKSBpdGVyYXRvci4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guZmluZChfX3gpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmZpbmQoX194KTsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEVsZW1lbnQgdG8gbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBOdW1iZXIgb2YgZWxlbWVudHMgd2l0aCBzcGVjaWZpZWQga2V5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHVub3JkZXJlZF9tdWx0aXNldHM7IGZvcgorICAgICAgICogIHVub3JkZXJlZF9zZXQgdGhlIHJlc3VsdCB3aWxsIGVpdGhlciBiZSAwIChub3QgcHJlc2VudCkgb3IgMQorICAgICAgICogIChwcmVzZW50KS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5jb3VudChfX3gpOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgUGFpciBvZiBpdGVyYXRvcnMgdGhhdCBwb3NzaWJseSBwb2ludHMgdG8gdGhlIHN1YnNlcXVlbmNlCisgICAgICAgKiAgICAgICAgICAgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIG11bHRpc2V0cy4KKyAgICAgICAqLworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmVxdWFsX3JhbmdlKF9feCk7IH0KKworICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmVxdWFsX3JhbmdlKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy8gYnVja2V0IGludGVyZmFjZS4KKworICAgICAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBidWNrZXRzIG9mIHRoZSAldW5vcmRlcmVkX3NldC4KKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guYnVja2V0X2NvdW50KCk7IH0KKworICAgICAgLy8vIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ1Y2tldHMgb2YgdGhlICV1bm9yZGVyZWRfc2V0LgorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubWF4X2J1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIC8qCisgICAgICAgKiBAYnJpZWYgIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGdpdmVuIGJ1Y2tldC4KKyAgICAgICAqIEBwYXJhbSAgX19uICBBIGJ1Y2tldCBpbmRleC4KKyAgICAgICAqIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1Y2tldC4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfc2l6ZShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5idWNrZXRfc2l6ZShfX24pOyB9CisKKyAgICAgIC8qCisgICAgICAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGJ1Y2tldCBpbmRleCBvZiBhIGdpdmVuIGVsZW1lbnQuCisgICAgICAgKiBAcGFyYW0gIF9fa2V5ICBBIGtleSBpbnN0YW5jZS4KKyAgICAgICAqIEByZXR1cm4gIFRoZSBrZXkgYnVja2V0IGluZGV4LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmJ1Y2tldChfX2tleSk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgICAgICAgIGJ1Y2tldCBlbGVtZW50LgorICAgICAgICogIEBwYXJhbSAgX19uIFRoZSBidWNrZXQgaW5kZXguCisgICAgICAgKiAgQHJldHVybiAgQSByZWFkLW9ubHkgbG9jYWwgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gX01faC5iZWdpbihfX24pOyB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5iZWdpbihfX24pOyB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBjYmVnaW4oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2guY2JlZ2luKF9fbik7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgcG9pbnRpbmcgdG8gb25lIHBhc3QKKyAgICAgICAqICAgICAgICAgdGhlIGxhc3QgYnVja2V0IGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX19uIFRoZSBidWNrZXQgaW5kZXguCisgICAgICAgKiAgQHJldHVybiAgQSByZWFkLW9ubHkgbG9jYWwgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBlbmQoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2guZW5kKF9fbik7IH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGVuZChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5lbmQoX19uKTsgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2VuZChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5jZW5kKF9fbik7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy8gaGFzaCBwb2xpY3kuCisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBhdmVyYWdlIG51bWJlciBvZiBlbGVtZW50cyBwZXIgYnVja2V0LgorICAgICAgZmxvYXQKKyAgICAgIGxvYWRfZmFjdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubG9hZF9mYWN0b3IoKTsgfQorCisgICAgICAvLy8gUmV0dXJucyBhIHBvc2l0aXZlIG51bWJlciB0aGF0IHRoZSAldW5vcmRlcmVkX3NldCB0cmllcyB0byBrZWVwIHRoZQorICAgICAgLy8vIGxvYWQgZmFjdG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0by4KKyAgICAgIGZsb2F0CisgICAgICBtYXhfbG9hZF9mYWN0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5tYXhfbG9hZF9mYWN0b3IoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENoYW5nZSB0aGUgJXVub3JkZXJlZF9zZXQgbWF4aW11bSBsb2FkIGZhY3Rvci4KKyAgICAgICAqICBAcGFyYW0gIF9feiBUaGUgbmV3IG1heGltdW0gbG9hZCBmYWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcihmbG9hdCBfX3opCisgICAgICB7IF9NX2gubWF4X2xvYWRfZmFjdG9yKF9feik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNYXkgcmVoYXNoIHRoZSAldW5vcmRlcmVkX3NldC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiBUaGUgbmV3IG51bWJlciBvZiBidWNrZXRzLgorICAgICAgICoKKyAgICAgICAqICBSZWhhc2ggd2lsbCBvY2N1ciBvbmx5IGlmIHRoZSBuZXcgbnVtYmVyIG9mIGJ1Y2tldHMgcmVzcGVjdCB0aGUKKyAgICAgICAqICAldW5vcmRlcmVkX3NldCBtYXhpbXVtIGxvYWQgZmFjdG9yLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZWhhc2goc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgX01faC5yZWhhc2goX19uKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFByZXBhcmUgdGhlICV1bm9yZGVyZWRfc2V0IGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAqICAgICAgICAgIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX19uIE51bWJlciBvZiBlbGVtZW50cyByZXF1aXJlZC4KKyAgICAgICAqCisgICAgICAgKiAgU2FtZSBhcyByZWhhc2goY2VpbChuIC8gbWF4X2xvYWRfZmFjdG9yKCkpKS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKQorICAgICAgeyBfTV9oLnJlc2VydmUoX19uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUxLCB0eXBlbmFtZSBfSGFzaDEsIHR5cGVuYW1lIF9QcmVkMSwKKwkgICAgICAgdHlwZW5hbWUgX0FsbG9jMT4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUxLCBfSGFzaDEsIF9QcmVkMSwgX0FsbG9jMT4mLAorCQkgY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUxLCBfSGFzaDEsIF9QcmVkMSwgX0FsbG9jMT4mKTsKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIGNvbXBvc2VkIG9mIGVxdWl2YWxlbnQga2V5cworICAgKiAgKHBvc3NpYmx5IGNvbnRhaW5pbmcgbXVsdGlwbGUgb2YgZWFjaCBrZXkgdmFsdWUpIGluIHdoaWNoIHRoZQorICAgKiAgZWxlbWVudHMnIGtleXMgYXJlIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzLgorICAgKgorICAgKiAgQGluZ3JvdXAgdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcnMKKyAgICoKKyAgICogIEB0cGFyYW0gIF9WYWx1ZSAgVHlwZSBvZiBrZXkgb2JqZWN0cy4KKyAgICogIEB0cGFyYW0gIF9IYXNoICBIYXNoaW5nIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBoYXNoPF9WYWx1ZT4uCisgICAqICBAdHBhcmFtICBfUHJlZCAgUHJlZGljYXRlIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cworICAgKiAgICAgICAgICAgICAgICAgIHRvIGVxdWFsX3RvPF9WYWx1ZT4uCisgICAqICBAdHBhcmFtICBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8X0tleT4uCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGFuZAorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjeHgiPnVub3JkZXJlZCBhc3NvY2lhdGl2ZSBjb250YWluZXI8L2E+CisgICAqCisgICAqICBCYXNlIGlzIF9IYXNodGFibGUsIGRpc3BhdGNoZWQgYXQgY29tcGlsZSB0aW1lIHZpYSB0ZW1wbGF0ZQorICAgKiAgYWxpYXMgX191bXNldF9oYXNodGFibGUuCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsCisJICAgY2xhc3MgX0hhc2ggPSBoYXNoPF9WYWx1ZT4sCisJICAgY2xhc3MgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9WYWx1ZT4sCisJICAgY2xhc3MgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X1ZhbHVlPiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX211bHRpc2V0IDogX19jaGVja19jb3B5X2NvbnN0cnVjdGlibGU8X0FsbG9jPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX191bXNldF9oYXNodGFibGU8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4gIF9IYXNodGFibGU7CisgICAgICBfSGFzaHRhYmxlIF9NX2g7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlZGVmczoKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBQdWJsaWMgdHlwZWRlZnMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmtleV90eXBlCWtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjp2YWx1ZV90eXBlCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6Omhhc2hlcgloYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmtleV9lcXVhbAlrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvLy8gIEl0ZXJhdG9yLXJlbGF0ZWQgdHlwZWRlZnMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpwb2ludGVyCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6Y29uc3RfcG9pbnRlcgljb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6cmVmZXJlbmNlCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OmNvbnN0X3JlZmVyZW5jZQljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6Oml0ZXJhdG9yCQlpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6Y29uc3RfaXRlcmF0b3IJY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmxvY2FsX2l0ZXJhdG9yCWxvY2FsX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSGFzaHRhYmxlOjpjb25zdF9sb2NhbF9pdGVyYXRvcgljb25zdF9sb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0hhc2h0YWJsZTo6c2l6ZV90eXBlCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IYXNodGFibGU6OmRpZmZlcmVuY2VfdHlwZQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIC8vIGNvbnN0cnVjdC9kZXN0cm95L2NvcHkKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIG5vIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSBfX24gIEluaXRpYWwgbnVtYmVyIG9mIGJ1Y2tldHMuCisgICAgICAgKiAgQHBhcmFtIF9faGYgIEEgaGFzaCBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSBfX2VxbCAgQSBrZXkgZXF1YWxpdHkgZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19hICBBbiBhbGxvY2F0b3Igb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX211bHRpc2V0KHNpemVfdHlwZSBfX24gPSAxMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX2goX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQnVpbGRzIGFuICV1bm9yZGVyZWRfbXVsdGlzZXQgZnJvbSBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2xhc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSBfX24gIE1pbmltYWwgaW5pdGlhbCBudW1iZXIgb2YgYnVja2V0cy4KKyAgICAgICAqICBAcGFyYW0gX19oZiAgQSBoYXNoIGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fZXFsICBBIGtleSBlcXVhbGl0eSBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhbiAldW5vcmRlcmVkX211bHRpc2V0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGZyb20gW19fZmlyc3QsX19sYXN0KS4gIFRoaXMgaXMgbGluZWFyIGluIE4gKHdoZXJlIE4gaXMKKyAgICAgICAqICBkaXN0YW5jZShfX2ZpcnN0LF9fbGFzdCkpLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl1bm9yZGVyZWRfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCQkgICBzaXplX3R5cGUgX19uID0gMCwKKwkJCSAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9oKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisJeyB9CisKKyAgICAgIC8vLyBDb3B5IGNvbnN0cnVjdG9yLgorICAgICAgdW5vcmRlcmVkX211bHRpc2V0KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldCYpID0gZGVmYXVsdDsKKworICAgICAgLy8vIE1vdmUgY29uc3RydWN0b3IuCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQodW5vcmRlcmVkX211bHRpc2V0JiYpID0gZGVmYXVsdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCdWlsZHMgYW4gJXVub3JkZXJlZF9tdWx0aXNldCBmcm9tIGFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtICBfX2wgIEFuIGluaXRpYWxpemVyX2xpc3QuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTWluaW1hbCBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzLgorICAgICAgICogIEBwYXJhbSBfX2hmICBBIGhhc2ggZnVuY3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19lcWwgIEEga2V5IGVxdWFsaXR5IGZ1bmN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFuIGFsbG9jYXRvciBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIENyZWF0ZSBhbiAldW5vcmRlcmVkX211bHRpc2V0IGNvbnNpc3Rpbmcgb2YgY29waWVzIG9mIHRoZSBlbGVtZW50cyBpbgorICAgICAgICogIHRoZSBsaXN0LiBUaGlzIGlzIGxpbmVhciBpbiBOICh3aGVyZSBOIGlzIEBhIF9fbC5zaXplKCkpLgorICAgICAgICovCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCQkgc2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01faChfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICAvLy8gQ29weSBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldCYpID0gZGVmYXVsdDsKKworICAgICAgLy8vIE1vdmUgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPSh1bm9yZGVyZWRfbXVsdGlzZXQmJiBfX3gpID0gZGVmYXVsdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICAlVW5vcmRlcmVkX211bHRpc2V0IGxpc3QgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgQW4gaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBmaWxscyBhbiAldW5vcmRlcmVkX211bHRpc2V0IHdpdGggY29waWVzIG9mIHRoZSBlbGVtZW50cworICAgICAgICogIGluIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIF9fbC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBhc3NpZ25tZW50IGNvbXBsZXRlbHkgY2hhbmdlcyB0aGUgJXVub3JkZXJlZF9tdWx0aXNldAorICAgICAgICogIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgJXVub3JkZXJlZF9zZXQncyBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIKKyAgICAgICAqICBvZiBlbGVtZW50cyBhc3NpZ25lZC4gIE9sZCBkYXRhIG1heSBiZSBsb3N0LgorICAgICAgICovCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJX01faCA9IF9fbDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgYWxsb2NhdG9yIG9iamVjdCB3aXRoIHdoaWNoIHRoZSAldW5vcmRlcmVkX211bHRpc2V0IHdhcworICAgICAgLy8vICBjb25zdHJ1Y3RlZC4KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIC8vIHNpemUgYW5kIGNhcGFjaXR5OgorCisgICAgICAvLy8gIFJldHVybnMgdHJ1ZSBpZiB0aGUgJXVub3JkZXJlZF9tdWx0aXNldCBpcyBlbXB0eS4KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2guZW1wdHkoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIHNpemUgb2YgdGhlICV1bm9yZGVyZWRfbXVsdGlzZXQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5zaXplKCk7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlICV1bm9yZGVyZWRfbXVsdGlzZXQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubWF4X3NpemUoKTsgfQorCisgICAgICAvLyBpdGVyYXRvcnMuCisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICAqICBlbGVtZW50IGluIHRoZSAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5iZWdpbigpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmJlZ2luKCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXVub3JkZXJlZF9tdWx0aXNldC4KKyAgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmVuZCgpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5lbmQoKTsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXVub3JkZXJlZF9tdWx0aXNldC4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmJlZ2luKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZSBsYXN0CisgICAgICAgKiAgZWxlbWVudCBpbiB0aGUgJXVub3JkZXJlZF9tdWx0aXNldC4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01faC5lbmQoKTsgfQorCisgICAgICAvLyBtb2RpZmllcnMuCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBCdWlsZHMgYW5kIGluc2VydCBhbiBlbGVtZW50IGludG8gdGhlICV1bm9yZGVyZWRfbXVsdGlzZXQuCisgICAgICAgKiAgQHBhcmFtIF9fYXJncyAgQXJndW1lbnRzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gZWxlbWVudC4KKyAgICAgICAqICBAcmV0dXJuICBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gX01faC5lbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEluc2VydHMgYW4gZWxlbWVudCBpbnRvIHRoZSAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEFuIGl0ZXJhdG9yIHRoYXQgc2VydmVzIGFzIGEgaGludCBhcyB0byB3aGVyZSB0aGUKKyAgICAgICAqICAgICAgICAgICAgICAgIGVsZW1lbnQgc2hvdWxkIGJlIGluc2VydGVkLgorICAgICAgICogIEBwYXJhbSAgX19hcmdzICBBcmd1bWVudHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZWxlbWVudCB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGluc2VydGVkIGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIG9ubHkgYSBoaW50IGFuZCBjYW4gcG90ZW50aWFsbHkKKyAgICAgICAqICBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgaW5zZXJ0aW9uIHByb2Nlc3MuICBBIGJhZCBoaW50IHdvdWxkCisgICAgICAgKiAgY2F1c2Ugbm8gZ2FpbnMgaW4gZWZmaWNpZW5jeS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIG1vcmUgb24gQGEgaGludGluZywgc2VlOgorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MDdjaDE3Lmh0bWwKKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0aW9uIHJlcXVpcmVzIGFtb3J0aXplZCBjb25zdGFudCB0aW1lLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2VfaGludChjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gX01faC5lbXBsYWNlX2hpbnQoX19wb3MsIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEluc2VydHMgYW4gZWxlbWVudCBpbnRvIHRoZSAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGJlIGluc2VydGVkLgorICAgICAgICogIEByZXR1cm4gIEFuIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBpbnNlcnRlZCBlbGVtZW50LgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgYW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01faC5pbnNlcnQoX194KTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmluc2VydChzdGQ6Om1vdmUoX194KSk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEluc2VydHMgYW4gZWxlbWVudCBpbnRvIHRoZSAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX19oaW50ICBBbiBpdGVyYXRvciB0aGF0IHNlcnZlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgdGhlCisgICAgICAgKiAgICAgICAgICAgICAgICAgZWxlbWVudCBzaG91bGQgYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEVsZW1lbnQgdG8gYmUgaW5zZXJ0ZWQuCisgICAgICAgKiAgQHJldHVybiBBbiBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgaW5zZXJ0ZWQgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgb25seSBhIGhpbnQgYW5kIGNhbiBwb3RlbnRpYWxseQorICAgICAgICogIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gIEEgYmFkIGhpbnQgd291bGQKKyAgICAgICAqICBjYXVzZSBubyBnYWlucyBpbiBlZmZpY2llbmN5LgorICAgICAgICoKKyAgICAgICAqICBGb3IgbW9yZSBvbiBAYSBoaW50aW5nLCBzZWU6CisgICAgICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwN2NoMTcuaHRtbAorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRpb24gcmVxdWlyZXMgYW1vcnRpemVkIGNvbnN0YW50LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faGludCwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01faC5pbnNlcnQoX19oaW50LCBfX3gpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19oaW50LCB2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyByZXR1cm4gX01faC5pbnNlcnQoX19oaW50LCBzdGQ6Om1vdmUoX194KSk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEEgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBpbnNlcnRzIGEgcmFuZ2Ugb2YgZWxlbWVudHMuCisgICAgICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBJdGVyYXRvciBwb2ludGluZyB0byB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICBpbnNlcnRlZC4KKyAgICAgICAqICBAcGFyYW0gIF9fbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSByYW5nZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdm9pZAorCWluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisJeyBfTV9oLmluc2VydChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJbnNlcnRzIGEgbGlzdCBvZiBlbGVtZW50cyBpbnRvIHRoZSAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX19sICBBIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBvZiBlbGVtZW50cyB0byBiZQorICAgICAgICogICAgICAgICAgICAgIGluc2VydGVkLgorICAgICAgICoKKyAgICAgICAqICBDb21wbGV4aXR5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgcmFuZ2UgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgX01faC5pbnNlcnQoX19sKTsgfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGFuIGVsZW1lbnQgZnJvbSBhbiAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgdG8gYmUgZXJhc2VkLgorICAgICAgICogIEByZXR1cm4gQW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nCisgICAgICAgKiAgICAgICAgICBAYSBfX3Bvc2l0aW9uIHByaW9yIHRvIHRoZSBlbGVtZW50IGJlaW5nIGVyYXNlZC4gSWYgbm8gc3VjaAorICAgICAgICogICAgICAgICAgZWxlbWVudCBleGlzdHMsIGVuZCgpIGlzIHJldHVybmVkLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGVyYXNlcyBhbiBlbGVtZW50LCBwb2ludGVkIHRvIGJ5IHRoZSBnaXZlbiBpdGVyYXRvciwKKyAgICAgICAqICBmcm9tIGFuICV1bm9yZGVyZWRfbXVsdGlzZXQuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZiB0aGUKKyAgICAgICAqICBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZCBpbgorICAgICAgICogIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgcmV0dXJuIF9NX2guZXJhc2UoX19wb3NpdGlvbik7IH0KKworICAgICAgLy8gTFdHIDIwNTkuCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19pdCkKKyAgICAgIHsgcmV0dXJuIF9NX2guZXJhc2UoX19pdCk7IH0KKyAgICAgIC8vQH0KKworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRXJhc2VzIGVsZW1lbnRzIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQga2V5LgorICAgICAgICogIEBwYXJhbSAgX194ICBLZXkgb2YgZWxlbWVudCB0byBiZSBlcmFzZWQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBlcmFzZWQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGFsbCB0aGUgZWxlbWVudHMgbG9jYXRlZCBieSB0aGUgZ2l2ZW4ga2V5IGZyb20KKyAgICAgICAqICBhbiAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICoKKyAgICAgICAqICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGVyYXNlcyB0aGUgZWxlbWVudCwgYW5kIHRoYXQgaWYgdGhlCisgICAgICAgKiAgZWxlbWVudCBpcyBpdHNlbGYgYSBwb2ludGVyLCB0aGUgcG9pbnRlZC10byBtZW1vcnkgaXMgbm90IHRvdWNoZWQgaW4KKyAgICAgICAqICBhbnkgd2F5LiAgTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01faC5lcmFzZShfX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBFcmFzZXMgYSBbX19maXJzdCxfX2xhc3QpIHJhbmdlIG9mIGVsZW1lbnRzIGZyb20gYW4KKyAgICAgICAqICAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX19maXJzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgICBlcmFzZWQuCisgICAgICAgKiAgQHBhcmFtIF9fbGFzdCAgSXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8KKyAgICAgICAqICAgICAgICAgICAgICAgIGJlIGVyYXNlZC4KKyAgICAgICAqICBAcmV0dXJuIFRoZSBpdGVyYXRvciBAYSBfX2xhc3QuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gZXJhc2VzIGEgc2VxdWVuY2Ugb2YgZWxlbWVudHMgZnJvbSBhbgorICAgICAgICogICV1bm9yZGVyZWRfbXVsdGlzZXQuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG9ubHkgZXJhc2VzIHRoZSBlbGVtZW50LCBhbmQgdGhhdCBpZgorICAgICAgICogIHRoZSBlbGVtZW50IGlzIGl0c2VsZiBhIHBvaW50ZXIsIHRoZSBwb2ludGVkLXRvIG1lbW9yeSBpcyBub3QgdG91Y2hlZAorICAgICAgICogIGluIGFueSB3YXkuICBNYW5hZ2luZyB0aGUgcG9pbnRlciBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LgorICAgICAgICovCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyByZXR1cm4gX01faC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEVyYXNlcyBhbGwgZWxlbWVudHMgaW4gYW4gJXVub3JkZXJlZF9tdWx0aXNldC4KKyAgICAgICAqCisgICAgICAgKiAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBlcmFzZXMgdGhlIGVsZW1lbnRzLCBhbmQgdGhhdCBpZiB0aGUKKyAgICAgICAqICBlbGVtZW50cyB0aGVtc2VsdmVzIGFyZSBwb2ludGVycywgdGhlIHBvaW50ZWQtdG8gbWVtb3J5IGlzIG5vdCB0b3VjaGVkCisgICAgICAgKiAgaW4gYW55IHdheS4gTWFuYWdpbmcgdGhlIHBvaW50ZXIgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBub2V4Y2VwdAorICAgICAgeyBfTV9oLmNsZWFyKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTd2FwcyBkYXRhIHdpdGggYW5vdGhlciAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgICogIEBwYXJhbSAgX194ICBBbiAldW5vcmRlcmVkX211bHRpc2V0IG9mIHRoZSBzYW1lIGVsZW1lbnQgYW5kIGFsbG9jYXRvcgorICAgICAgICogIHR5cGVzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGV4Y2hhbmdlcyB0aGUgZWxlbWVudHMgYmV0d2VlbiB0d28gc2V0cyBpbiBjb25zdGFudCB0aW1lLgorICAgICAgICogIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHN0ZDo6c3dhcCgpIGZ1bmN0aW9uIGlzIHNwZWNpYWxpemVkIHN1Y2ggdGhhdAorICAgICAgICogIHN0ZDo6c3dhcChzMSxzMikgd2lsbCBmZWVkIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5vcmRlcmVkX211bHRpc2V0JiBfX3gpCisgICAgICB7IF9NX2guc3dhcChfX3guX01faCk7IH0KKworICAgICAgLy8gb2JzZXJ2ZXJzLgorCisgICAgICAvLy8gIFJldHVybnMgdGhlIGhhc2ggZnVuY3RvciBvYmplY3Qgd2l0aCB3aGljaCB0aGUgJXVub3JkZXJlZF9tdWx0aXNldAorICAgICAgLy8vICB3YXMgY29uc3RydWN0ZWQuCisgICAgICBoYXNoZXIKKyAgICAgIGhhc2hfZnVuY3Rpb24oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5oYXNoX2Z1bmN0aW9uKCk7IH0KKworICAgICAgLy8vICBSZXR1cm5zIHRoZSBrZXkgY29tcGFyaXNvbiBvYmplY3Qgd2l0aCB3aGljaCB0aGUgJXVub3JkZXJlZF9tdWx0aXNldAorICAgICAgLy8vICB3YXMgY29uc3RydWN0ZWQuCisgICAgICBrZXlfZXF1YWwKKyAgICAgIGtleV9lcSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmtleV9lcSgpOyB9CisKKyAgICAgIC8vIGxvb2t1cC4KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRyaWVzIHRvIGxvY2F0ZSBhbiBlbGVtZW50IGluIGFuICV1bm9yZGVyZWRfbXVsdGlzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3ggIEVsZW1lbnQgdG8gYmUgbG9jYXRlZC4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciBwb2ludGluZyB0byBzb3VnaHQtYWZ0ZXIgZWxlbWVudCwgb3IgZW5kKCkgaWYgbm90CisgICAgICAgKiAgICAgICAgICAgZm91bmQuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBrZXkgYW5kIHRyaWVzIHRvIGxvY2F0ZSB0aGUgZWxlbWVudCB3aXRoIHdoaWNoCisgICAgICAgKiAgdGhlIGtleSBtYXRjaGVzLiAgSWYgc3VjY2Vzc2Z1bCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvcgorICAgICAgICogIHBvaW50aW5nIHRvIHRoZSBzb3VnaHQgYWZ0ZXIgZWxlbWVudC4gIElmIHVuc3VjY2Vzc2Z1bCBpdCByZXR1cm5zIHRoZQorICAgICAgICogIHBhc3QtdGhlLWVuZCAoIEBjIGVuZCgpICkgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBfTV9oLmZpbmQoX194KTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5maW5kKF9feCk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX194ICBFbGVtZW50IHRvIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggc3BlY2lmaWVkIGtleS4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5jb3VudChfX3gpOyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBGaW5kcyBhIHN1YnNlcXVlbmNlIG1hdGNoaW5nIGdpdmVuIGtleS4KKyAgICAgICAqICBAcGFyYW0gIF9feCAgS2V5IHRvIGJlIGxvY2F0ZWQuCisgICAgICAgKiAgQHJldHVybiAgUGFpciBvZiBpdGVyYXRvcnMgdGhhdCBwb3NzaWJseSBwb2ludHMgdG8gdGhlIHN1YnNlcXVlbmNlCisgICAgICAgKiAgICAgICAgICAgbWF0Y2hpbmcgZ2l2ZW4ga2V5LgorICAgICAgICovCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX2guZXF1YWxfcmFuZ2UoX194KTsgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2guZXF1YWxfcmFuZ2UoX194KTsgfQorICAgICAgLy9AfQorCisgICAgICAvLyBidWNrZXQgaW50ZXJmYWNlLgorCisgICAgICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgb2YgdGhlICV1bm9yZGVyZWRfbXVsdGlzZXQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9jb3VudCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLmJ1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBidWNrZXRzIG9mIHRoZSAldW5vcmRlcmVkX211bHRpc2V0LgorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubWF4X2J1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIC8qCisgICAgICAgKiBAYnJpZWYgIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIGdpdmVuIGJ1Y2tldC4KKyAgICAgICAqIEBwYXJhbSAgX19uICBBIGJ1Y2tldCBpbmRleC4KKyAgICAgICAqIEByZXR1cm4gIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1Y2tldC4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfc2l6ZShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5idWNrZXRfc2l6ZShfX24pOyB9CisKKyAgICAgIC8qCisgICAgICAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGJ1Y2tldCBpbmRleCBvZiBhIGdpdmVuIGVsZW1lbnQuCisgICAgICAgKiBAcGFyYW0gIF9fa2V5ICBBIGtleSBpbnN0YW5jZS4KKyAgICAgICAqIEByZXR1cm4gIFRoZSBrZXkgYnVja2V0IGluZGV4LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oLmJ1Y2tldChfX2tleSk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgICAgICAgIGJ1Y2tldCBlbGVtZW50LgorICAgICAgICogIEBwYXJhbSAgX19uIFRoZSBidWNrZXQgaW5kZXguCisgICAgICAgKiAgQHJldHVybiAgQSByZWFkLW9ubHkgbG9jYWwgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKQorICAgICAgeyByZXR1cm4gX01faC5iZWdpbihfX24pOyB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5iZWdpbihfX24pOyB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBjYmVnaW4oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2guY2JlZ2luKF9fbik7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgcG9pbnRpbmcgdG8gb25lIHBhc3QKKyAgICAgICAqICAgICAgICAgdGhlIGxhc3QgYnVja2V0IGVsZW1lbnRzLgorICAgICAgICogIEBwYXJhbSAgX19uIFRoZSBidWNrZXQgaW5kZXguCisgICAgICAgKiAgQHJldHVybiAgQSByZWFkLW9ubHkgbG9jYWwgaXRlcmF0b3IuCisgICAgICAgKi8KKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBlbmQoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2guZW5kKF9fbik7IH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGVuZChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5lbmQoX19uKTsgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2VuZChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faC5jZW5kKF9fbik7IH0KKyAgICAgIC8vQH0KKworICAgICAgLy8gaGFzaCBwb2xpY3kuCisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBhdmVyYWdlIG51bWJlciBvZiBlbGVtZW50cyBwZXIgYnVja2V0LgorICAgICAgZmxvYXQKKyAgICAgIGxvYWRfZmFjdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2gubG9hZF9mYWN0b3IoKTsgfQorCisgICAgICAvLy8gUmV0dXJucyBhIHBvc2l0aXZlIG51bWJlciB0aGF0IHRoZSAldW5vcmRlcmVkX211bHRpc2V0IHRyaWVzIHRvIGtlZXAgdGhlCisgICAgICAvLy8gbG9hZCBmYWN0b3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvLgorICAgICAgZmxvYXQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9oLm1heF9sb2FkX2ZhY3RvcigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhbmdlIHRoZSAldW5vcmRlcmVkX211bHRpc2V0IG1heGltdW0gbG9hZCBmYWN0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3ogVGhlIG5ldyBtYXhpbXVtIGxvYWQgZmFjdG9yLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBtYXhfbG9hZF9mYWN0b3IoZmxvYXQgX196KQorICAgICAgeyBfTV9oLm1heF9sb2FkX2ZhY3RvcihfX3opOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWF5IHJlaGFzaCB0aGUgJXVub3JkZXJlZF9tdWx0aXNldC4KKyAgICAgICAqICBAcGFyYW0gIF9fbiBUaGUgbmV3IG51bWJlciBvZiBidWNrZXRzLgorICAgICAgICoKKyAgICAgICAqICBSZWhhc2ggd2lsbCBvY2N1ciBvbmx5IGlmIHRoZSBuZXcgbnVtYmVyIG9mIGJ1Y2tldHMgcmVzcGVjdCB0aGUKKyAgICAgICAqICAldW5vcmRlcmVkX211bHRpc2V0IG1heGltdW0gbG9hZCBmYWN0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlaGFzaChzaXplX3R5cGUgX19uKQorICAgICAgeyBfTV9oLnJlaGFzaChfX24pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUHJlcGFyZSB0aGUgJXVub3JkZXJlZF9tdWx0aXNldCBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mCisgICAgICAgKiAgICAgICAgICBlbGVtZW50cy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiBOdW1iZXIgb2YgZWxlbWVudHMgcmVxdWlyZWQuCisgICAgICAgKgorICAgICAgICogIFNhbWUgYXMgcmVoYXNoKGNlaWwobiAvIG1heF9sb2FkX2ZhY3RvcigpKSkuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgX01faC5yZXNlcnZlKF9fbik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlMSwgdHlwZW5hbWUgX0hhc2gxLCB0eXBlbmFtZSBfUHJlZDEsCisJICAgICAgIHR5cGVuYW1lIF9BbGxvYzE+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUxLCBfSGFzaDEsIF9QcmVkMSwgX0FsbG9jMT4mLAorCQkgY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZTEsIF9IYXNoMSwgX1ByZWQxLCBfQWxsb2MxPiYpOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9oLl9NX2VxdWFsKF9feS5fTV9oKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2guX01fZXF1YWwoX195Ll9NX2gpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX1VOT1JERVJFRF9TRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3VzZXNfYWxsb2NhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdXNlc19hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODkxM2U5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3VzZXNfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8vIFVzZXMtYWxsb2NhdG9yIENvbnN0cnVjdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjaWZuZGVmIF9VU0VTX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9VU0VTX0FMTE9DQVRPUl9IIDEKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vLyBbYWxsb2NhdG9yLnRhZ10KKyAgc3RydWN0IGFsbG9jYXRvcl9hcmdfdCB7IH07CisKKyAgY29uc3RleHByIGFsbG9jYXRvcl9hcmdfdCBhbGxvY2F0b3JfYXJnID0gYWxsb2NhdG9yX2FyZ190KCk7CisKK19HTElCQ1hYX0hBU19ORVNURURfVFlQRShhbGxvY2F0b3JfdHlwZSkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywKKwkgICBib29sID0gX19oYXNfYWxsb2NhdG9yX3R5cGU8X1RwPjo6dmFsdWU+CisgICAgc3RydWN0IF9fdXNlc19hbGxvY2F0b3JfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9fdXNlc19hbGxvY2F0b3JfaGVscGVyPF9UcCwgX0FsbG9jLCB0cnVlPgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGlzX2NvbnZlcnRpYmxlPF9BbGxvYywKKwkJCQkgICAgIHR5cGVuYW1lIF9UcDo6YWxsb2NhdG9yX3R5cGU+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgLy8vIFthbGxvY2F0b3IudXNlcy50cmFpdF0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IHVzZXNfYWxsb2NhdG9yCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwKKwkJCSAgICAgICBfX3VzZXNfYWxsb2NhdG9yX2hlbHBlcjxfVHAsIF9BbGxvYz46OnZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9fdXNlc19hbGxvY2F0b3JfYXJnCisgICAgOiBpc19jb25zdHJ1Y3RpYmxlPF9UcCwgX0FsbG9jLCBfQXJncy4uLj4KKyAgICB7IHN0YXRpY19hc3NlcnQoIHVzZXNfYWxsb2NhdG9yPF9UcCwgX0FsbG9jPjo6dmFsdWUsICJ1c2VzIGFsbG9jYXRvciIgKTsgfTsKKworICBzdHJ1Y3QgX191c2VzX2FsbG9jX2Jhc2UgeyB9OworICBzdHJ1Y3QgX191c2VzX2FsbG9jMCA6IF9fdXNlc19hbGxvY19iYXNlCisgIHsgc3RydWN0IF9Bbnl0aGluZyB7IF9Bbnl0aGluZyguLi4pIHsgfSB9IF9NX2E7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX191c2VzX2FsbG9jMSA6IF9fdXNlc19hbGxvY19iYXNlIHsgY29uc3QgX0FsbG9jKiBfTV9hOyB9OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9fdXNlc19hbGxvYzIgOiBfX3VzZXNfYWxsb2NfYmFzZSB7IGNvbnN0IF9BbGxvYyogX01fYTsgfTsKKworICB0ZW1wbGF0ZTxib29sLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX3VzZXNfYWxsb2M7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX3VzZXNfYWxsb2M8dHJ1ZSwgX1RwLCBfQWxsb2MsIF9BcmdzLi4uPgorICAgIDogY29uZGl0aW9uYWw8CisgICAgICAgIGlzX2NvbnN0cnVjdGlibGU8X1RwLCBhbGxvY2F0b3JfYXJnX3QsIF9BbGxvYywgX0FyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgX191c2VzX2FsbG9jMTxfQWxsb2M+LAorICAgICAgIAlfX3VzZXNfYWxsb2MyPF9BbGxvYz4+Ojp0eXBlCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBzdHJ1Y3QgX191c2VzX2FsbG9jPGZhbHNlLCBfVHAsIF9BbGxvYywgX0FyZ3MuLi4+CisgICAgOiBfX3VzZXNfYWxsb2MwIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9fdXNlc19hbGxvY19pbXBsCisgICAgOiBfX3VzZXNfYWxsb2M8dXNlc19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+Ojp2YWx1ZSwgX1RwLCAgX0FsbG9jLCBfQXJncy4uLj4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIF9fdXNlc19hbGxvY19pbXBsPF9UcCwgX0FsbG9jLCBfQXJncy4uLj4KKyAgICBfX3VzZV9hbGxvYyhjb25zdCBfQWxsb2MmIF9fYSkKKyAgICB7CisgICAgICBfX3VzZXNfYWxsb2NfaW1wbDxfVHAsIF9BbGxvYywgX0FyZ3MuLi4+IF9fcmV0OworICAgICAgX19yZXQuX01fYSA9ICZfX2E7CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3ZhbGFycmF5X2FmdGVyLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdmFsYXJyYXlfYWZ0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTlkZGNlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3ZhbGFycmF5X2FmdGVyLmgKQEAgLTAsMCArMSw1NTEgQEAKKy8vIFRoZSB0ZW1wbGF0ZSBhbmQgaW5saW5lcyBmb3IgdGhlIC0qLSBDKysgLSotIGludGVybmFsIF9NZXRhIGNsYXNzLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy92YWxhcnJheV9hZnRlci5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dmFsYXJyYXl9CisgKi8KKworLy8gV3JpdHRlbiBieSBHYWJyaWVsIERvcyBSZWlzIDxHYWJyaWVsLkRvcy1SZWlzQGNtbGEuZW5zLWNhY2hhbi5mcj4KKworI2lmbmRlZiBfVkFMQVJSQVlfQUZURVJfSAorI2RlZmluZSBfVkFMQVJSQVlfQUZURVJfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vCisgIC8vIGdzbGljZV9hcnJheSBjbG9zdXJlLgorICAvLworICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgIGNsYXNzIF9HQmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIAorICAgICAgX0dCYXNlIChjb25zdCBfRG9tJiBfX2UsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKKyAgICAgIDogX01fZXhwciAoX19lKSwgX01faW5kZXgoX19pKSB7fQorICAgICAgCisgICAgICB2YWx1ZV90eXBlCisgICAgICBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXhwcltfTV9pbmRleFtfX2ldXTsgfQorICAgICAgCisgICAgICBzaXplX3QKKyAgICAgIHNpemUgKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2luZGV4LnNpemUoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IF9Eb20mCSAgICAgIF9NX2V4cHI7CisgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfTV9pbmRleDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfR0Jhc2U8X0FycmF5PF9UcD4gPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfR0Jhc2UgKF9BcnJheTxfVHA+IF9fYSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQorICAgICAgOiBfTV9hcnJheSAoX19hKSwgX01faW5kZXgoX19pKSB7fQorICAgICAgCisgICAgICB2YWx1ZV90eXBlCisgICAgICBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYXJyYXkuX01fZGF0YVtfTV9pbmRleFtfX2ldXTsgfQorICAgICAgCisgICAgICBzaXplX3QKKyAgICAgIHNpemUgKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2luZGV4LnNpemUoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IF9BcnJheTxfVHA+ICAgICAgIF9NX2FycmF5OworICAgICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX01faW5kZXg7CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgIHN0cnVjdCBfR0Nsb3M8X0V4cHIsIF9Eb20+CisgICAgOiBfR0Jhc2U8X0RvbT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HQmFzZTxfRG9tPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIAorICAgICAgX0dDbG9zIChjb25zdCBfRG9tJiBfX2UsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKKyAgICAgIDogX0Jhc2UgKF9fZSwgX19pKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfR0Nsb3M8X1ZhbEFycmF5LCBfVHA+CisgICAgOiBfR0Jhc2U8X0FycmF5PF9UcD4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dCYXNlPF9BcnJheTxfVHA+ID4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICAKKyAgICAgIF9HQ2xvcyAoX0FycmF5PF9UcD4gX19hLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpCisgICAgICA6IF9CYXNlIChfX2EsIF9faSkge30KKyAgICB9OworCisgIC8vCisgIC8vIGluZGlyZWN0X2FycmF5IGNsb3N1cmUKKyAgLy8KKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKyAgICBjbGFzcyBfSUJhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIF9JQmFzZSAoY29uc3QgX0RvbSYgX19lLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpCisgICAgICA6IF9NX2V4cHIgKF9fZSksIF9NX2luZGV4IChfX2kpIHt9CisgICAgICAKKyAgICAgIHZhbHVlX3R5cGUKKyAgICAgIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9leHByW19NX2luZGV4W19faV1dOyB9CisgICAgICAKKyAgICAgIHNpemVfdAorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9pbmRleC5zaXplKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBjb25zdCBfRG9tJgkgICAgICBfTV9leHByOworICAgICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX01faW5kZXg7CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgIHN0cnVjdCBfSUNsb3M8X0V4cHIsIF9Eb20+CisgICAgOiBfSUJhc2U8X0RvbT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9JQmFzZTxfRG9tPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIAorICAgICAgX0lDbG9zIChjb25zdCBfRG9tJiBfX2UsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKKyAgICAgIDogX0Jhc2UgKF9fZSwgX19pKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfSUNsb3M8X1ZhbEFycmF5LCBfVHA+CisgICAgOiBfSUJhc2U8dmFsYXJyYXk8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfSUJhc2U8dmFsYXJyYXk8X1RwPiA+IF9CYXNlOworICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKKyAgICAgIAorICAgICAgX0lDbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX2EsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKKyAgICAgIDogX0Jhc2UgKF9fYSwgX19pKSB7fQorICAgIH07CisgIAorICAvLworICAvLyBjbGFzcyBfRXhwcgorICAvLworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIF9FeHByCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisKKyAgICAgIF9FeHByKGNvbnN0IF9DbG9zJik7CisKKyAgICAgIGNvbnN0IF9DbG9zJiBvcGVyYXRvcigpKCkgY29uc3Q7CisKKyAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXShzaXplX3QpIGNvbnN0OworICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gb3BlcmF0b3JbXShzbGljZSkgY29uc3Q7CisgICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBvcGVyYXRvcltdKGNvbnN0IGdzbGljZSYpIGNvbnN0OworICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gb3BlcmF0b3JbXShjb25zdCB2YWxhcnJheTxib29sPiYpIGNvbnN0OworICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gb3BlcmF0b3JbXShjb25zdCB2YWxhcnJheTxzaXplX3Q+JikgY29uc3Q7CisKKyAgICAgIF9FeHByPF9VbkNsb3M8X191bmFyeV9wbHVzLCBzdGQ6Ol9FeHByLCBfQ2xvcz4sIHZhbHVlX3R5cGU+CisgICAgICBvcGVyYXRvcisoKSBjb25zdDsKKworICAgICAgX0V4cHI8X1VuQ2xvczxfX25lZ2F0ZSwgc3RkOjpfRXhwciwgX0Nsb3M+LCB2YWx1ZV90eXBlPgorICAgICAgb3BlcmF0b3ItKCkgY29uc3Q7CisKKyAgICAgIF9FeHByPF9VbkNsb3M8X19iaXR3aXNlX25vdCwgc3RkOjpfRXhwciwgX0Nsb3M+LCB2YWx1ZV90eXBlPgorICAgICAgb3BlcmF0b3J+KCkgY29uc3Q7CisKKyAgICAgIF9FeHByPF9VbkNsb3M8X19sb2dpY2FsX25vdCwgc3RkOjpfRXhwciwgX0Nsb3M+LCBib29sPgorICAgICAgb3BlcmF0b3IhKCkgY29uc3Q7CisKKyAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgICB2YWx1ZV90eXBlIHN1bSgpIGNvbnN0OworCisgICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBzaGlmdChpbnQpIGNvbnN0OworICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gY3NoaWZ0KGludCkgY29uc3Q7CisKKyAgICAgIHZhbHVlX3R5cGUgbWluKCkgY29uc3Q7CisgICAgICB2YWx1ZV90eXBlIG1heCgpIGNvbnN0OworCisgICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBhcHBseSh2YWx1ZV90eXBlICgqKShjb25zdCB2YWx1ZV90eXBlJikpIGNvbnN0OworICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gYXBwbHkodmFsdWVfdHlwZSAoKikodmFsdWVfdHlwZSkpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IF9DbG9zIF9NX2Nsb3N1cmU7CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIF9FeHByPF9DbG9zLCBfVHA+OjpfRXhwcihjb25zdCBfQ2xvcyYgX19jKSA6IF9NX2Nsb3N1cmUoX19jKSB7fQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbnN0IF9DbG9zJgorICAgIF9FeHByPF9DbG9zLCBfVHA+OjpvcGVyYXRvcigpKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9jbG9zdXJlOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX0V4cHI8X0Nsb3MsIF9UcD46Om9wZXJhdG9yW10oc2l6ZV90IF9faSkgY29uc3QKKyAgICB7IHJldHVybiBfTV9jbG9zdXJlW19faV07IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2YWxhcnJheTxfVHA+CisgICAgX0V4cHI8X0Nsb3MsIF9UcD46Om9wZXJhdG9yW10oc2xpY2UgX19zKSBjb25zdAorICAgIHsKKyAgICAgIHZhbGFycmF5PF9UcD4gX192ID0gdmFsYXJyYXk8X1RwPigqdGhpcylbX19zXTsKKyAgICAgIHJldHVybiBfX3Y7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6b3BlcmF0b3JbXShjb25zdCBnc2xpY2UmIF9fZ3MpIGNvbnN0CisgICAgeworICAgICAgdmFsYXJyYXk8X1RwPiBfX3YgPSB2YWxhcnJheTxfVHA+KCp0aGlzKVtfX2dzXTsKKyAgICAgIHJldHVybiBfX3Y7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6b3BlcmF0b3JbXShjb25zdCB2YWxhcnJheTxib29sPiYgX19tKSBjb25zdAorICAgIHsKKyAgICAgIHZhbGFycmF5PF9UcD4gX192ID0gdmFsYXJyYXk8X1RwPigqdGhpcylbX19tXTsKKyAgICAgIHJldHVybiBfX3Y7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6b3BlcmF0b3JbXShjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpIGNvbnN0CisgICAgeworICAgICAgdmFsYXJyYXk8X1RwPiBfX3YgPSB2YWxhcnJheTxfVHA+KCp0aGlzKVtfX2ldOworICAgICAgcmV0dXJuIF9fdjsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc2l6ZV90CisgICAgX0V4cHI8X0Nsb3MsIF9UcD46OnNpemUoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmUuc2l6ZSgpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPgorICAgIF9FeHByPF9DbG9zLCBfVHA+OjpzaGlmdChpbnQgX19uKSBjb25zdAorICAgIHsKKyAgICAgIHZhbGFycmF5PF9UcD4gX192ID0gdmFsYXJyYXk8X1RwPigqdGhpcykuc2hpZnQoX19uKTsKKyAgICAgIHJldHVybiBfX3Y7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6Y3NoaWZ0KGludCBfX24pIGNvbnN0CisgICAgeworICAgICAgdmFsYXJyYXk8X1RwPiBfX3YgPSB2YWxhcnJheTxfVHA+KCp0aGlzKS5jc2hpZnQoX19uKTsKKyAgICAgIHJldHVybiBfX3Y7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6YXBwbHkoX1RwIF9fZihjb25zdCBfVHAmKSkgY29uc3QKKyAgICB7CisgICAgICB2YWxhcnJheTxfVHA+IF9fdiA9IHZhbGFycmF5PF9UcD4oKnRoaXMpLmFwcGx5KF9fZik7CisgICAgICByZXR1cm4gX192OworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2YWxhcnJheTxfVHA+CisgICAgX0V4cHI8X0Nsb3MsIF9UcD46OmFwcGx5KF9UcCBfX2YoX1RwKSkgY29uc3QKKyAgICB7CisgICAgICB2YWxhcnJheTxfVHA+IF9fdiA9IHZhbGFycmF5PF9UcD4oKnRoaXMpLmFwcGx5KF9fZik7CisgICAgICByZXR1cm4gX192OworICAgIH0KKworICAvLyBYWFg6IHJlcGxhY2UgdGhpcyB3aXRoIGEgbW9yZSByb2J1c3Qgc3VtbWF0aW9uIGFsZ29yaXRobS4KKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX0V4cHI8X0Nsb3MsIF9UcD46OnN1bSgpIGNvbnN0CisgICAgeworICAgICAgc2l6ZV90IF9fbiA9IF9NX2Nsb3N1cmUuc2l6ZSgpOworICAgICAgaWYgKF9fbiA9PSAwKQorCXJldHVybiBfVHAoKTsKKyAgICAgIGVsc2UKKwl7CisJICBfVHAgX19zID0gX01fY2xvc3VyZVstLV9fbl07CisJICB3aGlsZSAoX19uICE9IDApCisJICAgIF9fcyArPSBfTV9jbG9zdXJlWy0tX19uXTsKKwkgIHJldHVybiBfX3M7CisgICAgICAgIH0KKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX0V4cHI8X0Nsb3MsIF9UcD46Om1pbigpIGNvbnN0CisgICAgeyByZXR1cm4gX192YWxhcnJheV9taW4oX01fY2xvc3VyZSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfRXhwcjxfQ2xvcywgX1RwPjo6bWF4KCkgY29uc3QKKyAgICB7IHJldHVybiBfX3ZhbGFycmF5X21heChfTV9jbG9zdXJlKTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20sIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0V4cHI8X1VuQ2xvczxfX2xvZ2ljYWxfbm90LCBfRXhwciwgX0RvbT4sIGJvb2w+CisgICAgX0V4cHI8X0RvbSwgX1RwPjo6b3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIF9VbkNsb3M8X19sb2dpY2FsX25vdCwgc3RkOjpfRXhwciwgX0RvbT4gX0Nsb3N1cmU7CisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+KF9DbG9zdXJlKHRoaXMtPl9NX2Nsb3N1cmUpKTsKKyAgICB9CisKKyNkZWZpbmUgX0RFRklORV9FWFBSX1VOQVJZX09QRVJBVE9SKF9PcCwgX05hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfRG9tLCB0eXBlbmFtZSBfVHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIF9FeHByPF9VbkNsb3M8X05hbWUsIHN0ZDo6X0V4cHIsIF9Eb20+LCBfVHA+ICAgICAgICAgICAgICAgICAgIFwKKyAgICBfRXhwcjxfRG9tLCBfVHA+OjpvcGVyYXRvciBfT3AoKSBjb25zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9VbkNsb3M8X05hbWUsIHN0ZDo6X0V4cHIsIF9Eb20+IF9DbG9zdXJlOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZSh0aGlzLT5fTV9jbG9zdXJlKSk7ICAgICAgICAgICAgXAorICAgIH0KKworICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9PUEVSQVRPUigrLCBfX3VuYXJ5X3BsdXMpCisgICAgX0RFRklORV9FWFBSX1VOQVJZX09QRVJBVE9SKC0sIF9fbmVnYXRlKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9PUEVSQVRPUih+LCBfX2JpdHdpc2Vfbm90KQorCisjdW5kZWYgX0RFRklORV9FWFBSX1VOQVJZX09QRVJBVE9SCisKKyNkZWZpbmUgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUihfT3AsIF9OYW1lKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPgkJCQkJXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfTmFtZSwgX0V4cHIsIF9FeHByLCBfRG9tMSwgX0RvbTI+LCAgICAgICAgICAgXAorICAgICAgICAgICB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gXAorICAgIG9wZXJhdG9yIF9PcChjb25zdCBfRXhwcjxfRG9tMSwgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3YsICAgXAorCSAgICAgICAgIGNvbnN0IF9FeHByPF9Eb20yLCB0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9OYW1lLCBfRXhwciwgX0V4cHIsIF9Eb20xLCBfRG9tMj4gX0Nsb3N1cmU7ICAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9WYWx1ZT4oX0Nsb3N1cmUoX192KCksIF9fdygpKSk7ICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIF9FeHByPF9CaW5DbG9zPF9OYW1lLCBfRXhwciwgX0NvbnN0YW50LCBfRG9tLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgdHlwZW5hbWUgX19mdW48X05hbWUsIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gXAorICAgIG9wZXJhdG9yIF9PcChjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCAgICAgXAorICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgX0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfTmFtZSwgX0V4cHIsIF9Db25zdGFudCwgX0RvbSwgX0FyZz4gX0Nsb3N1cmU7ICAgXAorICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVmFsdWU+KF9DbG9zdXJlKF9fdigpLCBfX3QpKTsgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfTmFtZSwgX0NvbnN0YW50LCBfRXhwciwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLCBfRG9tPiwgICAgICAgICAgICAgXAorICAgICAgICAgICAgIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IFwKKyAgICBvcGVyYXRvciBfT3AoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgY29uc3QgX0V4cHI8X0RvbSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19mdW48X05hbWUsIF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7ICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX0JpbkNsb3M8X05hbWUsIF9Db25zdGFudCwgX0V4cHIsIF9BcmcsIF9Eb20+IF9DbG9zdXJlOyAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1ZhbHVlPihfQ2xvc3VyZShfX3QsIF9fdigpKSk7ICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X05hbWUsIF9FeHByLCBfVmFsQXJyYXksICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX0RvbSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBcCisgICAgb3BlcmF0b3IgX09wKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgICAgICBcCisgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9OYW1lLCBfRXhwciwgX1ZhbEFycmF5LCBfRG9tLCBfQXJnPiBfQ2xvc3VyZTsgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9WYWx1ZT4oX0Nsb3N1cmUoX19lKCksIF9fdikpOyAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIF9FeHByPF9CaW5DbG9zPF9OYW1lLCBfVmFsQXJyYXksIF9FeHByLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsIF9Eb20+LCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgdHlwZW5hbWUgX19mdW48X05hbWUsIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gXAorICAgIG9wZXJhdG9yIF9PcChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCAgICAgICAgXAorICAgICAgICAgICAgICAgICBjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgX1RwPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfTmFtZSwgX1ZhbEFycmF5LCBfRXhwciwgX1RwLCBfRG9tPiBfQ2xvc3VyZTsgICAgXAorICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVmFsdWU+KF9DbG9zdXJlKF9fdiwgX19lICgpKSk7ICAgICAgICAgICAgXAorICAgIH0KKworICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoKywgX19wbHVzKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoLSwgX19taW51cykKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKCosIF9fbXVsdGlwbGllcykKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKC8sIF9fZGl2aWRlcykKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKCUsIF9fbW9kdWx1cykKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKF4sIF9fYml0d2lzZV94b3IpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUigmLCBfX2JpdHdpc2VfYW5kKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IofCwgX19iaXR3aXNlX29yKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoPDwsIF9fc2hpZnRfbGVmdCkKKyAgICBfREVGSU5FX0VYUFJfQklOQVJZX09QRVJBVE9SKD4+LCBfX3NoaWZ0X3JpZ2h0KQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoJiYsIF9fbG9naWNhbF9hbmQpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUih8fCwgX19sb2dpY2FsX29yKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoPT0sIF9fZXF1YWxfdG8pCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUighPSwgX19ub3RfZXF1YWxfdG8pCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUig8LCBfX2xlc3MpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUig+LCBfX2dyZWF0ZXIpCisgICAgX0RFRklORV9FWFBSX0JJTkFSWV9PUEVSQVRPUig8PSwgX19sZXNzX2VxdWFsKQorICAgIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IoPj0sIF9fZ3JlYXRlcl9lcXVhbCkKKworI3VuZGVmIF9ERUZJTkVfRVhQUl9CSU5BUllfT1BFUkFUT1IKKworI2RlZmluZSBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oX05hbWUsIF9VTmFtZSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIF9FeHByPF9VbkNsb3M8X1VOYW1lLCBfRXhwciwgX0RvbT4sICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfTmFtZShjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX1VuQ2xvczxfVU5hbWUsIF9FeHByLCBfRG9tPiBfQ2xvc3VyZTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4oX0Nsb3N1cmUoX19lKCkpKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBfRXhwcjxfVW5DbG9zPF9VTmFtZSwgX1ZhbEFycmF5LCBfVHA+LCBfVHA+ICAgICAgICAgICAgICAgICAgIFwKKyAgICBfTmFtZShjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfVW5DbG9zPF9VTmFtZSwgX1ZhbEFycmF5LCBfVHA+IF9DbG9zdXJlOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZShfX3YpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKGFicywgX0FicykKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oY29zLCBfQ29zKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTihhY29zLCBfQWNvcykKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oY29zaCwgX0Nvc2gpCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKHNpbiwgX1NpbikKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oYXNpbiwgX0FzaW4pCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKHNpbmgsIF9TaW5oKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTih0YW4sIF9UYW4pCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKHRhbmgsIF9UYW5oKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTihhdGFuLCBfQXRhbikKKyAgICBfREVGSU5FX0VYUFJfVU5BUllfRlVOQ1RJT04oZXhwLCBfRXhwKQorICAgIF9ERUZJTkVfRVhQUl9VTkFSWV9GVU5DVElPTihsb2csIF9Mb2cpCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKGxvZzEwLCBfTG9nMTApCisgICAgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OKHNxcnQsIF9TcXJ0KQorCisjdW5kZWYgX0RFRklORV9FWFBSX1VOQVJZX0ZVTkNUSU9OCisKKyNkZWZpbmUgX0RFRklORV9FWFBSX0JJTkFSWV9GVU5DVElPTihfRnVuLCBfVUZ1bikJCSAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1VGdW4sIF9FeHByLCBfRXhwciwgX0RvbTEsIF9Eb20yPiwgICAgICAgICAgXAorCQkgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9GdW4oY29uc3QgX0V4cHI8X0RvbTEsIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX19lMSwgICAgICAgICBcCisJIGNvbnN0IF9FeHByPF9Eb20yLCB0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fZTIpCSAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX1RwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfVUZ1biwgX0V4cHIsIF9FeHByLCBfRG9tMSwgX0RvbTI+IF9DbG9zdXJlOyAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4oX0Nsb3N1cmUoX19lMSgpLCBfX2UyKCkpKTsgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1VGdW4sIF9FeHByLCBfVmFsQXJyYXksIF9Eb20sICAgICAgICAgICAgICAgXAorCQkJICB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgICAgICAgICAgICAgICAgICBcCisJCSB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0Z1bihjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCAgICAgICAgICAgIFwKKwkgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfVUZ1biwgX0V4cHIsIF9WYWxBcnJheSwgX0RvbSwgX1RwPiBfQ2xvc3VyZTsgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4oX0Nsb3N1cmUoX19lKCksIF9fdikpOyAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1VGdW4sIF9WYWxBcnJheSwgX0V4cHIsICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLCBfRG9tPiwgICAgICAgICAgICBcCisJCSB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0Z1bihjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWxhcnJheT4mIF9fdiwgICAgICAgICAgICAgICAgIFwKKwkgY29uc3QgX0V4cHI8X0RvbSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfVUZ1biwgX1ZhbEFycmF5LCBfRXhwciwgX1RwLCBfRG9tPiBfQ2xvc3VyZTsgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4oX0Nsb3N1cmUoX192LCBfX2UoKSkpOyAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1VGdW4sIF9FeHByLCBfQ29uc3RhbnQsIF9Eb20sICAgICAgICAgICAgICAgXAorCQkJICB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgICAgICAgICAgICAgICAgICBcCisJCSB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0Z1bihjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCAgICAgICAgICAgIFwKKwkgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfVUZ1biwgX0V4cHIsIF9Db25zdGFudCwgX0RvbSwgX1RwPiBfQ2xvc3VyZTsgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4oX0Nsb3N1cmUoX19lKCksIF9fdCkpOyAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1VGdW4sIF9Db25zdGFudCwgX0V4cHIsICAgICAgICAgICAgICAgICAgICAgXAorCQkJICB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLCBfRG9tPiwgICAgICAgICAgICBcCisJCSB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX0Z1bihjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgY29uc3QgX0V4cHI8X0RvbSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdHlwZWRlZiBfQmluQ2xvczxfVUZ1biwgX0NvbnN0YW50LCBfRXhwciwgX1RwLCBfRG9tPiBfQ2xvc3VyZTsgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4oX0Nsb3N1cmUoX190LCBfX2UoKSkpOyAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1VGdW4sIF9WYWxBcnJheSwgX1ZhbEFycmF5LCBfVHAsIF9UcD4sIF9UcD4gXAorICAgIF9GdW4oY29uc3QgdmFsYXJyYXk8X1RwPiYgX192LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3cpICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX0JpbkNsb3M8X1VGdW4sIF9WYWxBcnJheSwgX1ZhbEFycmF5LCBfVHAsIF9UcD4gX0Nsb3N1cmU7XAorICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+KF9DbG9zdXJlKF9fdiwgX193KSk7ICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIF9FeHByPF9CaW5DbG9zPF9VRnVuLCBfVmFsQXJyYXksIF9Db25zdGFudCwgX1RwLCBfVHA+LCBfVHA+IFwKKyAgICBfRnVuKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX1RwJiBfX3QpICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9VRnVuLCBfVmFsQXJyYXksIF9Db25zdGFudCwgX1RwLCBfVHA+IF9DbG9zdXJlO1wKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZShfX3YsIF9fdCkpOyAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCQkJCSAgICAgICBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1VGdW4sIF9Db25zdGFudCwgX1ZhbEFycmF5LCBfVHAsIF9UcD4sIF9UcD4gXAorICAgIF9GdW4oY29uc3QgX1RwJiBfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX0JpbkNsb3M8X1VGdW4sIF9Db25zdGFudCwgX1ZhbEFycmF5LCBfVHAsIF9UcD4gX0Nsb3N1cmU7XAorICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+KF9DbG9zdXJlKF9fdCwgX192KSk7ICAgICAgICAgICAgICAgICBcCisgICAgfQorCitfREVGSU5FX0VYUFJfQklOQVJZX0ZVTkNUSU9OKGF0YW4yLCBfQXRhbjIpCitfREVGSU5FX0VYUFJfQklOQVJZX0ZVTkNUSU9OKHBvdywgX1BvdykKKworI3VuZGVmIF9ERUZJTkVfRVhQUl9CSU5BUllfRlVOQ1RJT04KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0NQUF9WQUxBUlJBWV9BRlRFUl9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy92YWxhcnJheV9hcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNGQ0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdmFsYXJyYXlfYXJyYXkuaApAQCAtMCwwICsxLDY5MyBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gaW50ZXJuYWwgX0FycmF5IGhlbHBlciBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvdmFsYXJyYXlfYXJyYXkuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3ZhbGFycmF5fQorICovCisKKy8vIFdyaXR0ZW4gYnkgR2FicmllbCBEb3MgUmVpcyA8R2FicmllbC5Eb3MtUmVpc0BEUFRNYXRocy5FTlMtQ2FjaGFuLkZyPgorCisjaWZuZGVmIF9WQUxBUlJBWV9BUlJBWV9ICisjZGVmaW5lIF9WQUxBUlJBWV9BUlJBWV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8bmV3PgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8KKyAgLy8gSGVscGVyIGZ1bmN0aW9ucyBvbiByYXcgcG9pbnRlcnMKKyAgLy8KKworICAvLyBXZSBnZXQgbWVtb3J5IGJ5IHRoZSBvbGQgZmFzaGlvbiB3YXkKKyAgaW5saW5lIHZvaWQqCisgIF9fdmFsYXJyYXlfZ2V0X21lbW9yeShzaXplX3QgX19uKQorICB7IHJldHVybiBvcGVyYXRvciBuZXcoX19uKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwKl9fcmVzdHJpY3RfXworICAgIF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2Uoc2l6ZV90IF9fbikKKyAgICB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwKl9fcmVzdHJpY3RfXz4KKwkoc3RkOjpfX3ZhbGFycmF5X2dldF9tZW1vcnkoX19uICogc2l6ZW9mKF9UcCkpKTsKKyAgICB9CisKKyAgLy8gUmV0dXJuIG1lbW9yeSB0byB0aGUgc3lzdGVtCisgIGlubGluZSB2b2lkCisgIF9fdmFsYXJyYXlfcmVsZWFzZV9tZW1vcnkodm9pZCogX19wKQorICB7IG9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CisKKyAgLy8gVHVybiBhIHJhdy1tZW1vcnkgaW50byBhbiBhcnJheSBvZiBfVHAgZmlsbGVkIHdpdGggX1RwKCkKKyAgLy8gVGhpcyBpcyByZXF1aXJlZCBpbiAndmFsYXJyYXk8VD4gdihuKTsnCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KKyAgICBzdHJ1Y3QgX0FycmF5X2RlZmF1bHRfY3RvcgorICAgIHsKKyAgICAgIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBpc24ndCBleGNlcHRpb24gc2FmZS4gIEJ1dAorICAgICAgLy8gdmFsYXJyYXlzIGFyZW4ndCByZXF1aXJlZCB0byBiZSBleGNlcHRpb24gc2FmZS4KKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZAorICAgICAgX1NfZG9faXQoX1RwKiBfX2IsIF9UcCogX19lKQorICAgICAgeworCXdoaWxlIChfX2IgIT0gX19lKQorCSAgbmV3KF9fYisrKSBfVHAoKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0FycmF5X2RlZmF1bHRfY3RvcjxfVHAsIHRydWU+CisgICAgeworICAgICAgLy8gRm9yIGZ1bmRhbWVudGFsIHR5cGVzLCBpdCBzdWZmaWNlcyB0byBzYXkgJ21lbXNldCgpJworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChfVHAqIF9fYiwgX1RwKiBfX2UpCisgICAgICB7IF9fYnVpbHRpbl9tZW1zZXQoX19iLCAwLCAoX19lIC0gX19iKSAqIHNpemVvZihfVHApKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfVHAqIF9fYiwgX1RwKiBfX2UpCisgICAgeworICAgICAgX0FycmF5X2RlZmF1bHRfY3RvcjxfVHAsIF9faXNfc2NhbGFyPF9UcD46Ol9fdmFsdWU+OjpfU19kb19pdChfX2IsIF9fZSk7CisgICAgfQorCisgIC8vIFR1cm4gYSByYXctbWVtb3J5IGludG8gYW4gYXJyYXkgb2YgX1RwIGZpbGxlZCB3aXRoIF9fdAorICAvLyBUaGlzIGlzIHRoZSByZXF1aXJlZCBpbiB2YWxhcnJheTxUPiB2KG4sIHQpLiAgQWxzbworICAvLyB1c2VkIGluIHZhbGFycmF5PD46OnJlc2l6ZSgpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2w+CisgICAgc3RydWN0IF9BcnJheV9pbml0X2N0b3IKKyAgICB7CisgICAgICAvLyBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXNuJ3QgZXhjZXB0aW9uIHNhZmUuICBCdXQKKyAgICAgIC8vIHZhbGFycmF5cyBhcmVuJ3QgcmVxdWlyZWQgdG8gYmUgZXhjZXB0aW9uIHNhZmUuCisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQKKyAgICAgIF9TX2RvX2l0KF9UcCogX19iLCBfVHAqIF9fZSwgY29uc3QgX1RwIF9fdCkKKyAgICAgIHsKKwl3aGlsZSAoX19iICE9IF9fZSkKKwkgIG5ldyhfX2IrKykgX1RwKF9fdCk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9BcnJheV9pbml0X2N0b3I8X1RwLCB0cnVlPgorICAgIHsKKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZAorICAgICAgX1NfZG9faXQoX1RwKiBfX2IsIF9UcCogX19lLCBjb25zdCBfVHAgX190KQorICAgICAgeworCXdoaWxlIChfX2IgIT0gX19lKQorCSAgKl9fYisrID0gX190OworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9maWxsX2NvbnN0cnVjdChfVHAqIF9fYiwgX1RwKiBfX2UsIGNvbnN0IF9UcCBfX3QpCisgICAgeworICAgICAgX0FycmF5X2luaXRfY3RvcjxfVHAsIF9faXNfdHJpdmlhbChfVHApPjo6X1NfZG9faXQoX19iLCBfX2UsIF9fdCk7CisgICAgfQorCisgIC8vCisgIC8vIGNvcHktY29uc3RydWN0IHJhdyBhcnJheSBbX19vLCAqKSBmcm9tIHBsYWluIGFycmF5IFtfX2IsIF9fZSkKKyAgLy8gV2UgY2FuJ3QganVzdCBzYXkgJ21lbWNweSgpJworICAvLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2w+CisgICAgc3RydWN0IF9BcnJheV9jb3B5X2N0b3IKKyAgICB7CisgICAgICAvLyBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXNuJ3QgZXhjZXB0aW9uIHNhZmUuICBCdXQKKyAgICAgIC8vIHZhbGFycmF5cyBhcmVuJ3QgcmVxdWlyZWQgdG8gYmUgZXhjZXB0aW9uIHNhZmUuCisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQKKyAgICAgIF9TX2RvX2l0KGNvbnN0IF9UcCogX19iLCBjb25zdCBfVHAqIF9fZSwgX1RwKiBfX3Jlc3RyaWN0X18gX19vKQorICAgICAgeworCXdoaWxlIChfX2IgIT0gX19lKQorCSAgbmV3KF9fbysrKSBfVHAoKl9fYisrKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0FycmF5X2NvcHlfY3RvcjxfVHAsIHRydWU+CisgICAgeworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChjb25zdCBfVHAqIF9fYiwgY29uc3QgX1RwKiBfX2UsIF9UcCogX19yZXN0cmljdF9fIF9fbykKKyAgICAgIHsgX19idWlsdGluX21lbWNweShfX28sIF9fYiwgKF9fZSAtIF9fYikgKiBzaXplb2YoX1RwKSk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoY29uc3QgX1RwKiBfX2IsIGNvbnN0IF9UcCogX19lLAorCQkJICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19vKQorICAgIHsKKyAgICAgIF9BcnJheV9jb3B5X2N0b3I8X1RwLCBfX2lzX3RyaXZpYWwoX1RwKT46Ol9TX2RvX2l0KF9fYiwgX19lLCBfX28pOworICAgIH0KKworICAvLyBjb3B5LWNvbnN0cnVjdCByYXcgYXJyYXkgW19fbywgKikgZnJvbSBzdHJpZGVkIGFycmF5IF9fYVs8X19uIDogX19zPl0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdCAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLAorCQkJICAgICAgIHNpemVfdCBfX3MsIF9UcCogX19yZXN0cmljdF9fIF9fbykKKyAgICB7CisgICAgICBpZiAoX19pc190cml2aWFsKF9UcCkpCisJd2hpbGUgKF9fbi0tKQorCSAgeworCSAgICAqX19vKysgPSAqX19hOworCSAgICBfX2EgKz0gX19zOworCSAgfQorICAgICAgZWxzZQorCXdoaWxlIChfX24tLSkKKwkgIHsKKwkgICAgbmV3KF9fbysrKSBfVHAoKl9fYSk7CisJICAgIF9fYSArPSBfX3M7CisJICB9CisgICAgfQorCisgIC8vIGNvcHktY29uc3RydWN0IHJhdyBhcnJheSBbX19vLCAqKSBmcm9tIGluZGV4ZWQgYXJyYXkgX19hW19faVs8X19uPl1dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwKKwkJCSAgICAgICBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksCisJCQkgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19vLCBzaXplX3QgX19uKQorICAgIHsKKyAgICAgIGlmIChfX2lzX3RyaXZpYWwoX1RwKSkKKwl3aGlsZSAoX19uLS0pCisJICAqX19vKysgPSBfX2FbKl9faSsrXTsKKyAgICAgIGVsc2UKKwl3aGlsZSAoX19uLS0pCisJICBuZXcgKF9fbysrKSBfVHAoX19hWypfX2krK10pOworICAgIH0KKworICAvLyBEbyB0aGUgbmVjZXNzYXJ5IGNsZWFudXAgd2hlbiB3ZSdyZSBkb25lIHdpdGggYXJyYXlzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2Rlc3Ryb3lfZWxlbWVudHMoX1RwKiBfX2IsIF9UcCogX19lKQorICAgIHsKKyAgICAgIGlmICghX19pc190cml2aWFsKF9UcCkpCisJd2hpbGUgKF9fYiAhPSBfX2UpCisJICB7CisJICAgIF9fYi0+fl9UcCgpOworCSAgICArK19fYjsKKwkgIH0KKyAgICB9CisKKyAgLy8gRmlsbCBhIHBsYWluIGFycmF5IF9fYVs8X19uPl0gd2l0aCBfX3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9maWxsKF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpCisgICAgeworICAgICAgd2hpbGUgKF9fbi0tKQorCSpfX2ErKyA9IF9fdDsKKyAgICB9CisgIAorICAvLyBmaWxsIHN0cmlkZWQgYXJyYXkgX19hWzxfX24tMSA6IF9fcz5dIHdpdGggX190CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfZmlsbChfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sCisJCSAgICBzaXplX3QgX19zLCBjb25zdCBfVHAmIF9fdCkKKyAgICB7IAorICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgX19hICs9IF9fcykKKwkqX19hID0gX190OworICAgIH0KKworICAvLyBmaWxsIGluZGlyZWN0IGFycmF5IF9fYVtfX2lbPF9fbj5dXSB3aXRoIF9faQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2ZpbGwoX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksCisJCSAgICBzaXplX3QgX19uLCBjb25zdCBfVHAmIF9fdCkKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX247ICsrX19qLCArK19faSkKKwlfX2FbKl9faV0gPSBfX3Q7CisgICAgfQorICAKKyAgLy8gY29weSBwbGFpbiBhcnJheSBfX2FbPF9fbj5dIGluIF9fYls8X19uPl0KKyAgLy8gRm9yIG5vbi1mdW5kYW1lbnRhbCB0eXBlcywgaXQgaXMgd3JvbmcgdG8gc2F5ICdtZW1jcHkoKScKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sPgorICAgIHN0cnVjdCBfQXJyYXlfY29waWVyCisgICAgeworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sIF9UcCogX19yZXN0cmljdF9fIF9fYikKKyAgICAgIHsKKwl3aGlsZShfX24tLSkKKwkgICpfX2IrKyA9ICpfX2ErKzsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0FycmF5X2NvcGllcjxfVHAsIHRydWU+CisgICAgeworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBfU19kb19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sIF9UcCogX19yZXN0cmljdF9fIF9fYikKKyAgICAgIHsgX19idWlsdGluX21lbWNweShfX2IsIF9fYSwgX19uICogc2l6ZW9mIChfVHApKTsgfQorICAgIH07CisKKyAgLy8gQ29weSBhIHBsYWluIGFycmF5IF9fYVs8X19uPl0gaW50byBhIHBsYXkgYXJyYXkgX19iWzw+XQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLAorCQkgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19iKQorICAgIHsKKyAgICAgIF9BcnJheV9jb3BpZXI8X1RwLCBfX2lzX3RyaXZpYWwoX1RwKT46Ol9TX2RvX2l0KF9fYSwgX19uLCBfX2IpOworICAgIH0KKworICAvLyBDb3B5IHN0cmlkZWQgYXJyYXkgX19hWzxfX24gOiBfX3M+XSBpbiBwbGFpbiBfX2JbPF9fbj5dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsCisJCSAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX2IpCisgICAgeworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgKytfX2IsIF9fYSArPSBfX3MpCisJKl9fYiA9ICpfX2E7CisgICAgfQorCisgIC8vIENvcHkgYSBwbGFpbiBhcnJheSAgX19hWzxfX24+XSBpbnRvIGEgc3RyaWRlZCBhcnJheSBfX2JbPF9fbiA6IF9fcz5dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIF9UcCogX19yZXN0cmljdF9fIF9fYiwKKwkJICAgIHNpemVfdCBfX24sIHNpemVfdCBfX3MpCisgICAgeworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgKytfX2EsIF9fYiArPSBfX3MpCisJKl9fYiA9ICpfX2E7CisgICAgfQorCisgIC8vIENvcHkgc3RyaWRlZCBhcnJheSBfX3NyY1s8X19uIDogX19zMT5dIGludG8gYW5vdGhlcgorICAvLyBzdHJpZGVkIGFycmF5IF9fZHN0WzwgOiBfX3MyPl0uICBUaGVpciBzaXplcyBtdXN0IG1hdGNoLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19zcmMsIHNpemVfdCBfX24sIHNpemVfdCBfX3MxLAorCQkgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19kc3QsIHNpemVfdCBfX3MyKQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJX19kc3RbX19pICogX19zMl0gPSBfX3NyY1tfX2kgKiBfX3MxXTsKKyAgICB9CisKKyAgLy8gQ29weSBhbiBpbmRleGVkIGFycmF5IF9fYVtfX2lbPF9fbj5dXSBpbiBwbGFpbiBhcnJheSBfX2JbPF9fbj5dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsCisJCSAgICBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksCisJCSAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIHNpemVfdCBfX24pCisgICAgeworICAgICAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19uOyArK19faiwgKytfX2IsICsrX19pKQorCSpfX2IgPSBfX2FbKl9faV07CisgICAgfQorCisgIC8vIENvcHkgYSBwbGFpbiBhcnJheSBfX2FbPF9fbj5dIGluIGFuIGluZGV4ZWQgYXJyYXkgX19iW19faVs8X19uPl1dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sCisJCSAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIGNvbnN0IHNpemVfdCogX19yZXN0cmljdF9fIF9faSkKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX247ICsrX19qLCArK19fYSwgKytfX2kpCisJX19iWypfX2ldID0gKl9fYTsKKyAgICB9CisKKyAgLy8gQ29weSB0aGUgX19uIGZpcnN0IGVsZW1lbnRzIG9mIGFuIGluZGV4ZWQgYXJyYXkgX19zcmNbPF9faT5dIGludG8KKyAgLy8gYW5vdGhlciBpbmRleGVkIGFycmF5IF9fZHN0WzxfX2o+XS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fc3JjLCBzaXplX3QgX19uLAorCQkgICAgY29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18gX19pLAorCQkgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19kc3QsIGNvbnN0IHNpemVfdCogX19yZXN0cmljdF9fIF9faikKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX247ICsrX19rKQorCV9fZHN0WypfX2orK10gPSBfX3NyY1sqX19pKytdOworICAgIH0KKworICAvLworICAvLyBDb21wdXRlIHRoZSBzdW0gb2YgZWxlbWVudHMgaW4gcmFuZ2UgW19fZiwgX19sKQorICAvLyBUaGlzIGlzIGEgbmFpdmUgYWxnb3JpdGhtLiAgSXQgc3VmZmVycyBmcm9tIGNhbmNlbGxpbmcuCisgIC8vIEluIHRoZSBmdXR1cmUgdHJ5IHRvIHNwZWNpYWxpemUKKyAgLy8gZm9yIF9UcCA9IGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlIHVzaW5nIGEgbW9yZSBhY2N1cmF0ZQorICAvLyBhbGdvcml0aG0uCisgIC8vCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX192YWxhcnJheV9zdW0oY29uc3QgX1RwKiBfX2YsIGNvbnN0IF9UcCogX19sKQorICAgIHsKKyAgICAgIF9UcCBfX3IgPSBfVHAoKTsKKyAgICAgIHdoaWxlIChfX2YgIT0gX19sKQorCV9fciArPSAqX19mKys7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICAvLyBDb21wdXRlIHRoZSBwcm9kdWN0IG9mIGFsbCBlbGVtZW50cyBpbiByYW5nZSBbX19mLCBfX2wpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX192YWxhcnJheV9wcm9kdWN0KGNvbnN0IF9UcCogX19mLCBjb25zdCBfVHAqIF9fbCkKKyAgICB7CisgICAgICBfVHAgX19yID0gX1RwKDEpOworICAgICAgd2hpbGUgKF9fZiAhPSBfX2wpCisJX19yID0gX19yICogKl9fZisrOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgLy8gQ29tcHV0ZSB0aGUgbWluL21heCBvZiBhbiBhcnJheS1leHByZXNzaW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UYT4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlCisgICAgX192YWxhcnJheV9taW4oY29uc3QgX1RhJiBfX2EpCisgICAgeworICAgICAgc2l6ZV90IF9fcyA9IF9fYS5zaXplKCk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UYTo6dmFsdWVfdHlwZSBfVmFsdWVfdHlwZTsKKyAgICAgIF9WYWx1ZV90eXBlIF9fciA9IF9fcyA9PSAwID8gX1ZhbHVlX3R5cGUoKSA6IF9fYVswXTsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDE7IF9faSA8IF9fczsgKytfX2kpCisJeworCSAgX1ZhbHVlX3R5cGUgX190ID0gX19hW19faV07CisJICBpZiAoX190IDwgX19yKQorCSAgICBfX3IgPSBfX3Q7CisJfQorICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RhPgorICAgIGlubGluZSB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUKKyAgICBfX3ZhbGFycmF5X21heChjb25zdCBfVGEmIF9fYSkKKyAgICB7CisgICAgICBzaXplX3QgX19zID0gX19hLnNpemUoKTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlIF9WYWx1ZV90eXBlOworICAgICAgX1ZhbHVlX3R5cGUgX19yID0gX19zID09IDAgPyBfVmFsdWVfdHlwZSgpIDogX19hWzBdOworICAgICAgZm9yIChzaXplX3QgX19pID0gMTsgX19pIDwgX19zOyArK19faSkKKwl7CisJICBfVmFsdWVfdHlwZSBfX3QgPSBfX2FbX19pXTsKKwkgIGlmIChfX3QgPiBfX3IpCisJICAgIF9fciA9IF9fdDsKKwl9CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICAvLworICAvLyBIZWxwZXIgY2xhc3MgX0FycmF5LCBmaXJzdCBsYXllciBvZiB2YWxhcnJheSBhYnN0cmFjdGlvbi4KKyAgLy8gQWxsIG9wZXJhdGlvbnMgb24gdmFsYXJyYXkgc2hvdWxkIGJlIGZvcndhcmRlZCB0byB0aGlzIGNsYXNzCisgIC8vIHdoZW5ldmVyIHBvc3NpYmxlLiAtLSBnZHIKKyAgLy8KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9BcnJheQorICAgIHsKKyAgICAgIGV4cGxpY2l0IF9BcnJheShzaXplX3QpOworICAgICAgZXhwbGljaXQgX0FycmF5KF9UcCogY29uc3QgX19yZXN0cmljdF9fKTsKKyAgICAgIGV4cGxpY2l0IF9BcnJheShjb25zdCB2YWxhcnJheTxfVHA+Jik7CisgICAgICBfQXJyYXkoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18sIHNpemVfdCk7CisgICAgICAKKyAgICAgIF9UcCogYmVnaW4oKSBjb25zdDsKKyAgICAgIAorICAgICAgX1RwKiBjb25zdCBfX3Jlc3RyaWN0X18gX01fZGF0YTsKKyAgICB9OworCisKKyAgLy8gQ29weS1jb25zdHJ1Y3QgcGxhaW4gYXJyYXkgX19iWzxfX24+XSBmcm9tIGluZGV4ZWQgYXJyYXkgX19hW19faVs8X19uPl1dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksCisJCQkgICAgICBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX19hLl9NX2RhdGEsIF9faS5fTV9kYXRhLAorCQkJCSAgICAgX19iLl9NX2RhdGEsIF9fbik7IH0KKworICAvLyBDb3B5LWNvbnN0cnVjdCBwbGFpbiBhcnJheSBfX2JbPF9fbj5dIGZyb20gc3RyaWRlZCBhcnJheSBfX2FbPF9fbiA6IF9fcz5dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXplX3QgX19zLAorCQkJICAgICAgX0FycmF5PF9UcD4gX19iKQorICAgIHsgc3RkOjpfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KF9fYS5fTV9kYXRhLCBfX24sIF9fcywgX19iLl9NX2RhdGEpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KQorICAgIHsgc3RkOjpfX3ZhbGFycmF5X2ZpbGwoX19hLl9NX2RhdGEsIF9fbiwgX190KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfZmlsbChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIGNvbnN0IF9UcCYgX190KQorICAgIHsgc3RkOjpfX3ZhbGFycmF5X2ZpbGwoX19hLl9NX2RhdGEsIF9fbiwgX19zLCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9maWxsKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLAorCQkgICAgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfZmlsbChfX2EuX01fZGF0YSwgX19pLl9NX2RhdGEsIF9fbiwgX190KTsgfQorCisgIC8vIENvcHkgYSBwbGFpbiBhcnJheSBfX2FbPF9fbj5dIGludG8gYSBwbGF5IGFycmF5IF9fYls8Pl0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iKQorICAgIHsgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19hLl9NX2RhdGEsIF9fbiwgX19iLl9NX2RhdGEpOyB9CisKKyAgLy8gQ29weSBzdHJpZGVkIGFycmF5IF9fYVs8X19uIDogX19zPl0gaW4gcGxhaW4gX19iWzxfX24+XQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19uLCBfX3MsIF9fYi5fTV9kYXRhKTsgfQorCisgIC8vIENvcHkgYSBwbGFpbiBhcnJheSAgX19hWzxfX24+XSBpbnRvIGEgc3RyaWRlZCBhcnJheSBfX2JbPF9fbiA6IF9fcz5dCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykKKyAgICB7IF9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19iLl9NX2RhdGEsIF9fbiwgX19zKTsgfQorCisgIC8vIENvcHkgc3RyaWRlZCBhcnJheSBfX3NyY1s8X19uIDogX19zMT5dIGludG8gYW5vdGhlcgorICAvLyBzdHJpZGVkIGFycmF5IF9fZHN0WzwgOiBfX3MyPl0uICBUaGVpciBzaXplcyBtdXN0IG1hdGNoLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXplX3QgX19zMSwKKyAgICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19zMikKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5KF9fYS5fTV9kYXRhLCBfX24sIF9fczEsIF9fYi5fTV9kYXRhLCBfX3MyKTsgfQorCisgIC8vIENvcHkgYW4gaW5kZXhlZCBhcnJheSBfX2FbX19pWzxfX24+XV0gaW4gcGxhaW4gYXJyYXkgX19iWzxfX24+XQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksCisJCSAgICBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19pLl9NX2RhdGEsIF9fYi5fTV9kYXRhLCBfX24pOyB9CisKKyAgLy8gQ29weSBhIHBsYWluIGFycmF5IF9fYVs8X19uPl0gaW4gYW4gaW5kZXhlZCBhcnJheSBfX2JbX19pWzxfX24+XV0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLAorCQkgICAgX0FycmF5PHNpemVfdD4gX19pKQorICAgIHsgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19hLl9NX2RhdGEsIF9fbiwgX19iLl9NX2RhdGEsIF9faS5fTV9kYXRhKTsgfQorCisgIC8vIENvcHkgdGhlIF9fbiBmaXJzdCBlbGVtZW50cyBvZiBhbiBpbmRleGVkIGFycmF5IF9fc3JjWzxfX2k+XSBpbnRvCisgIC8vIGFub3RoZXIgaW5kZXhlZCBhcnJheSBfX2RzdFs8X19qPl0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX3NyYywgc2l6ZV90IF9fbiwgX0FycmF5PHNpemVfdD4gX19pLAorICAgICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2RzdCwgX0FycmF5PHNpemVfdD4gX19qKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5KF9fc3JjLl9NX2RhdGEsIF9fbiwgX19pLl9NX2RhdGEsCisJCSAgICBfX2RzdC5fTV9kYXRhLCBfX2ouX01fZGF0YSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICBfQXJyYXk8X1RwPjo6X0FycmF5KHNpemVfdCBfX24pCisgICAgOiBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX24pKQorICAgIHsgc3RkOjpfX3ZhbGFycmF5X2RlZmF1bHRfY29uc3RydWN0KF9NX2RhdGEsIF9NX2RhdGEgKyBfX24pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIF9BcnJheTxfVHA+OjpfQXJyYXkoX1RwKiBjb25zdCBfX3Jlc3RyaWN0X18gX19wKQorICAgIDogX01fZGF0YSAoX19wKSB7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICBfQXJyYXk8X1RwPjo6X0FycmF5KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikKKyAgICA6IF9NX2RhdGEgKF9fdi5fTV9kYXRhKSB7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICBfQXJyYXk8X1RwPjo6X0FycmF5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYiwgc2l6ZV90IF9fcykKKyAgICA6IF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fcykpCisgICAgeyBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX19iLCBfX3MsIF9NX2RhdGEpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAqCisgICAgX0FycmF5PF9UcD46OmJlZ2luICgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fZGF0YTsgfQorCisjZGVmaW5lIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04oX09wLCBfTmFtZSkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkgICAgICAgIAkJCVwKKyAgICBpbmxpbmUgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSBcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGZvciAoX1RwKiBfX3AgPSBfX2EuX01fZGF0YTsgX19wIDwgX19hLl9NX2RhdGEgKyBfX247ICsrX19wKQlcCisgICAgICAgICpfX3AgX09wIyM9IF9fdDsJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgkJCQkJCVwKKyAgICBpbmxpbmUgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYikgXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOwkJCQkJCVwKKyAgICAgIGZvciAoX1RwKiBfX3EgPSBfX2IuX01fZGF0YTsgX19xIDwgX19iLl9NX2RhdGEgKyBfX247ICsrX19wLCArK19fcSkgXAorICAgICAgICAqX19wIF9PcCMjPSAqX19xOwkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+CQkJCQlcCisgICAgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsCSAgICAgICAgCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBfVHAqIF9fcChfX2EuX01fZGF0YSk7CQkJCQkJXAorICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgKytfX3ApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAqX19wIF9PcCMjPSBfX2VbX19pXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCQkJCQlcCisgICAgaW5saW5lIHZvaWQJCQkJCQkJCVwKKyAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXplX3QgX19zLAlcCisJICAgICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19iKQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9UcCogX19xKF9fYi5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBmb3IgKF9UcCogX19wID0gX19hLl9NX2RhdGE7IF9fcCA8IF9fYS5fTV9kYXRhICsgX19zICogX19uOyAgICAgICBcCisJICAgX19wICs9IF9fcywgKytfX3EpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKl9fcCBfT3AjIz0gKl9fcTsJCQkJCQlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgkJCQkJCVwKKyAgICBpbmxpbmUgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxfVHA+IF9fYiwJCVwKKwkJICAgICAgICAgICAgIHNpemVfdCBfX24sIHNpemVfdCBfX3MpCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBfVHAqIF9fcShfX2IuX01fZGF0YSk7CQkJCQkJXAorICAgICAgZm9yIChfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBfX3AgPCBfX2EuX01fZGF0YSArIF9fbjsgICAgICAgICAgICAgXAorCSAgICsrX19wLCBfX3EgKz0gX19zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICpfX3AgX09wIyM9ICpfX3E7CQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4JCQkJCVwKKyAgICB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9UcCogX19wKF9fYS5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pLCBfX3AgKz0gX19zKSAgICAgICAgICAgICAgICBcCisgICAgICAgICpfX3AgX09wIyM9IF9fZVtfX2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgkJCQkJCVwKKyAgICBpbmxpbmUgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9UcCogX19xKF9fYi5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBmb3IgKHNpemVfdCogX19qID0gX19pLl9NX2RhdGE7IF9faiA8IF9faS5fTV9kYXRhICsgX19uOyAgICAgICAgICBcCisgICAgICAgICAgICsrX19qLCArK19fcSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYS5fTV9kYXRhWypfX2pdIF9PcCMjPSAqX19xOwkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCQkJCQlcCisgICAgaW5saW5lIHZvaWQJCQkJCSAgICAgICAgCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kpCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX1RwKiBfX3AoX19hLl9NX2RhdGEpOwkJCQkJCVwKKyAgICAgIGZvciAoc2l6ZV90KiBfX2ogPSBfX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhICsgX19uOyAgICAgICAgICAgIFwKKwkgICArK19faiwgKytfX3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAqX19wIF9PcCMjPSBfX2IuX01fZGF0YVsqX19qXTsJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+CQkJCQlcCisgICAgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgc2l6ZV90KiBfX2ooX19pLl9NX2RhdGEpOwkgICAgICAgIAkJCQlcCisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2s8X19uOyArK19faywgKytfX2opCQkJXAorICAgICAgICBfX2EuX01fZGF0YVsqX19qXSBfT3AjIz0gX19lW19fa107CQkJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIHZvaWQJCQkJCQkJCVwKKyAgICBfQXJyYXlfYXVnbWVudGVkXyMjX05hbWUoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBib29sKiBfX29rKF9fbS5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBfVHAqIF9fcChfX2EuX01fZGF0YSk7CQkJCQkJXAorICAgICAgZm9yIChfVHAqIF9fcSA9IF9fYi5fTV9kYXRhOyBfX3EgPCBfX2IuX01fZGF0YSArIF9fbjsgICAgICAgICAgICAgXAorCSAgICsrX19xLCArK19fb2ssICsrX19wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgd2hpbGUgKCEgKl9fb2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7CQkJCQkJICAgICAgICAJXAorICAgICAgICAgICAgICArK19fb2s7CQkJCQkJCVwKKyAgICAgICAgICAgICAgKytfX3A7CQkJCQkJCVwKKyAgICAgICAgICAgIH0JCQkJCQkJCVwKKyAgICAgICAgICAqX19wIF9PcCMjPSAqX19xOwkJCQkJCVwKKyAgICAgICAgfQkJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCQkJCQlcCisgICAgdm9pZAkJCQkJCQkJXAorICAgIF9BcnJheV9hdWdtZW50ZWRfIyNfTmFtZShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9fbSkgICAJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBib29sKiBfX29rKF9fbS5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBfVHAqIF9fcShfX2IuX01fZGF0YSk7CQkJCQkJXAorICAgICAgZm9yIChfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBfX3AgPCBfX2EuX01fZGF0YSArIF9fbjsgICAgICAgICAgICAgXAorCSAgICsrX19wLCArK19fb2ssICsrX19xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgd2hpbGUgKCEgKl9fb2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7CQkJCQkgICAgICAgIAkJXAorICAgICAgICAgICAgICArK19fb2s7CQkJCQkJCVwKKyAgICAgICAgICAgICAgKytfX3E7CQkJCQkJCVwKKyAgICAgICAgICAgIH0JCQkJCQkJCVwKKyAgICAgICAgICAqX19wIF9PcCMjPSAqX19xOwkJCQkJCVwKKyAgICAgICAgfQkJCQkJCQkJXAorICAgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4JCQkJCVwKKyAgICB2b2lkCQkJCQkJCQlcCisgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgIAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBib29sKiBfX29rKF9fbS5fTV9kYXRhKTsJCQkJCQlcCisgICAgICBfVHAqIF9fcChfX2EuX01fZGF0YSk7CQkJCQkJXAorICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgKytfX29rLCArK19fcCkgICAgICAgICAgICAgXAorICAgICAgICB7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCVwKKyAgICAgICAgICB3aGlsZSAoISAqX19vaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsJCSAgICAgICAgIAkJCQkJXAorCSAgICAgICsrX19vazsJCQkJCQkJXAorICAgICAgICAgICAgICArK19fcDsJCQkJCQkJXAorICAgICAgICAgICAgfQkJCQkJCQkJXAorICAgICAgICAgICpfX3AgX09wIyM9IF9fZVtfX2ldOwkJCQkJCVwKKyAgICAgICAgfQkJCQkJCQkJXAorICAgIH0KKworICAgX0RFRklORV9BUlJBWV9GVU5DVElPTigrLCBfX3BsdXMpCisgICBfREVGSU5FX0FSUkFZX0ZVTkNUSU9OKC0sIF9fbWludXMpCisgICBfREVGSU5FX0FSUkFZX0ZVTkNUSU9OKCosIF9fbXVsdGlwbGllcykKKyAgIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04oLywgX19kaXZpZGVzKQorICAgX0RFRklORV9BUlJBWV9GVU5DVElPTiglLCBfX21vZHVsdXMpCisgICBfREVGSU5FX0FSUkFZX0ZVTkNUSU9OKF4sIF9fYml0d2lzZV94b3IpCisgICBfREVGSU5FX0FSUkFZX0ZVTkNUSU9OKHwsIF9fYml0d2lzZV9vcikKKyAgIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04oJiwgX19iaXR3aXNlX2FuZCkKKyAgIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04oPDwsIF9fc2hpZnRfbGVmdCkKKyAgIF9ERUZJTkVfQVJSQVlfRlVOQ1RJT04oPj4sIF9fc2hpZnRfcmlnaHQpCisKKyN1bmRlZiBfREVGSU5FX0FSUkFZX0ZVTkNUSU9OCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworIyBpbmNsdWRlIDxiaXRzL3ZhbGFycmF5X2FycmF5LnRjYz4KKworI2VuZGlmIC8qIF9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdmFsYXJyYXlfYXJyYXkudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3ZhbGFycmF5X2FycmF5LnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzg3ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3ZhbGFycmF5X2FycmF5LnRjYwpAQCAtMCwwICsxLDI0NCBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gaW50ZXJuYWwgX0FycmF5IGhlbHBlciBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvdmFsYXJyYXlfYXJyYXkudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dmFsYXJyYXl9CisgKi8KKworLy8gV3JpdHRlbiBieSBHYWJyaWVsIERvcyBSZWlzIDxHYWJyaWVsLkRvcy1SZWlzQERQVE1hdGhzLkVOUy1DYWNoYW4uRnI+CisKKyNpZm5kZWYgX1ZBTEFSUkFZX0FSUkFZX1RDQworI2RlZmluZSBfVkFMQVJSQVlfQVJSQVlfVENDIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX192YWxhcnJheV9maWxsKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PGJvb2w+IF9fbSwKKwkJICAgIGNvbnN0IF9UcCYgX190KQorICAgIHsKKyAgICAgIF9UcCogX19wID0gX19hLl9NX2RhdGE7CisgICAgICBib29sKiBfX29rIChfX20uX01fZGF0YSk7CisgICAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pIDwgX19uOyArK19faSwgKytfX29rLCArK19fcCkKKwl7CisJICB3aGlsZSAoISpfX29rKQorCSAgeworCSAgICArK19fb2s7CisJICAgICsrX19wOworCSAgfQorCSAgKl9fcCA9IF9fdDsKKwl9CisgICAgfQorCisgIC8vIENvcHkgbiBlbGVtZW50cyBvZiBhIGludG8gY29uc2VjdXRpdmUgZWxlbWVudHMgb2YgYi4gIFdoZW4gbSBpcworICAvLyBmYWxzZSwgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBhIGlzIHNraXBwZWQuICBtIG11c3QgY29udGFpbgorICAvLyBhdCBsZWFzdCBuIHRydWUgZWxlbWVudHMuICBhIG11c3QgY29udGFpbiBhdCBsZWFzdCBuIGVsZW1lbnRzIGFuZAorICAvLyBlbm91Z2ggZWxlbWVudHMgdG8gbWF0Y2ggdXAgd2l0aCBtIHRocm91Z2ggdGhlIG50aCB0cnVlIGVsZW1lbnQKKyAgLy8gb2YgbS4gIEkuZS4gIGlmIG4gaXMgMTAsIG0gaGFzIDE1IGVsZW1lbnRzIHdpdGggNSBmYWxzZSBmb2xsb3dlZAorICAvLyBieSAxMCB0cnVlLCBhIG11c3QgaGF2ZSAxNSBlbGVtZW50cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2IsCisJCSAgICBzaXplX3QgX19uKQorICAgIHsKKyAgICAgIF9UcCogX19wIChfX2EuX01fZGF0YSk7CisgICAgICBib29sKiBfX29rIChfX20uX01fZGF0YSk7CisgICAgICBmb3IgKF9UcCogX19xID0gX19iLl9NX2RhdGE7IF9fcSA8IF9fYi5fTV9kYXRhICsgX19uOworCSAgICsrX19xLCArK19fb2ssICsrX19wKQorCXsKKwkgIHdoaWxlICghICpfX29rKQorCSAgICB7CisJICAgICAgKytfX29rOworCSAgICAgICsrX19wOworCSAgICB9CisJICAqX19xID0gKl9fcDsKKwl9CisgICAgfQorCisgIC8vIENvcHkgbiBjb25zZWN1dGl2ZSBlbGVtZW50cyBmcm9tIGEgaW50byBlbGVtZW50cyBvZiBiLiAgRWxlbWVudHMKKyAgLy8gb2YgYiBhcmUgc2tpcHBlZCBpZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIG0gaXMgZmFsc2UuICBtCisgIC8vIG11c3QgY29udGFpbiBhdCBsZWFzdCBuIHRydWUgZWxlbWVudHMuICBiIG11c3QgaGF2ZSBhdCBsZWFzdCBhcworICAvLyBtYW55IGVsZW1lbnRzIGFzIHRoZSBpbmRleCBvZiB0aGUgbnRoIHRydWUgZWxlbWVudCBvZiBtLiAgSS5lLiBpZgorICAvLyBtIGhhcyAxNSBlbGVtZW50cyB3aXRoIDUgZmFsc2UgZm9sbG93ZWQgYnkgMTAgdHJ1ZSwgYiBtdXN0IGhhdmUKKyAgLy8gYXQgbGVhc3QgMTUgZWxlbWVudHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLAorCQkgICAgX0FycmF5PGJvb2w+IF9fbSkKKyAgICB7CisgICAgICBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOworICAgICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOworICAgICAgZm9yIChfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBfX3AgPCBfX2EuX01fZGF0YStfX247CisJICAgKytfX3AsICsrX19vaywgKytfX3EpCisJeworCSAgd2hpbGUgKCEgKl9fb2spCisJICAgIHsKKwkgICAgICArK19fb2s7CisJICAgICAgKytfX3E7CisJICAgIH0KKwkgICpfX3EgPSAqX19wOworCX0KKyAgICB9CisKKyAgLy8gQ29weSBuIGVsZW1lbnRzIGZyb20gYSBpbnRvIGVsZW1lbnRzIG9mIGIuICBFbGVtZW50cyBvZiBhIGFyZQorICAvLyBza2lwcGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgbSBpcyBmYWxzZS4gIEVsZW1lbnRzIG9mCisgIC8vIGIgYXJlIHNraXBwZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBrIGlzIGZhbHNlLiAgbSBhbmQKKyAgLy8gayBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgbiB0cnVlIGVsZW1lbnRzLiAgYSBhbmQgYiBtdXN0IGhhdmUgYXQKKyAgLy8gbGVhc3QgYXMgbWFueSBlbGVtZW50cyBhcyB0aGUgaW5kZXggb2YgdGhlIG50aCB0cnVlIGVsZW1lbnQgb2YgbS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBzaXplX3QgX19uLAorCQkgICAgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19rKQorICAgIHsKKyAgICAgIF9UcCogX19wIChfX2EuX01fZGF0YSk7CisgICAgICBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOworICAgICAgYm9vbCogX19zcmNvayAoX19tLl9NX2RhdGEpOworICAgICAgYm9vbCogX19kc3RvayAoX19rLl9NX2RhdGEpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOworCSAgICsrX19zcmNvaywgKytfX3AsICsrX19kc3RvaywgKytfX3EsICsrX19pKQorCXsKKwkgIHdoaWxlICghICpfX3NyY29rKQorCSAgICB7CisJICAgICAgKytfX3NyY29rOworCSAgICAgICsrX19wOworCSAgICB9CisJICB3aGlsZSAoISAqX19kc3RvaykgCisJICAgIHsKKwkgICAgICArK19fZHN0b2s7CisJICAgICAgKytfX3E7CisJICAgIH0KKwkgICpfX3EgPSAqX19wOworCX0KKyAgICB9CisKKyAgLy8gQ29weSBuIGNvbnNlY3V0aXZlIGVsZW1lbnRzIG9mIGUgaW50byBjb25zZWN1dGl2ZSBlbGVtZW50cyBvZiBhLgorICAvLyBJLmUuIGFbaV0gPSBlW2ldLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+CisgICAgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYSkKKyAgICB7CisgICAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgKytfX3ApCisJKl9fcCA9IF9fZVtfX2ldOworICAgIH0KKworICAvLyBDb3B5IG4gY29uc2VjdXRpdmUgZWxlbWVudHMgb2YgZSBpbnRvIGVsZW1lbnRzIG9mIGEgdXNpbmcgc3RyaWRlCisgIC8vIHMuICBJLmUuLCBhWzBdID0gZVswXSwgYVtzXSA9IGVbMV0sIGFbMipzXSA9IGVbMl0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4KKyAgICB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbiwKKwkJICAgICBfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MpCisgICAgeworICAgICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2ksIF9fcCArPSBfX3MpCisJKl9fcCA9IF9fZVtfX2ldOworICAgIH0KKworICAvLyBDb3B5IG4gY29uc2VjdXRpdmUgZWxlbWVudHMgb2YgZSBpbnRvIGVsZW1lbnRzIG9mIGEgaW5kZXhlZCBieQorICAvLyBjb250ZW50cyBvZiBpLiAgSS5lLiwgYVtpWzBdXSA9IGVbMF0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4KKyAgICB2b2lkCisgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbiwKKwkJICAgIF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pKQorICAgIHsKKyAgICAgIHNpemVfdCogX19qIChfX2kuX01fZGF0YSk7CisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX247ICsrX19rLCArK19faikKKwlfX2EuX01fZGF0YVsqX19qXSA9IF9fZVtfX2tdOworICAgIH0KKworICAvLyBDb3B5IG4gZWxlbWVudHMgb2YgZSBpbmRleGVkIGJ5IGNvbnRlbnRzIG9mIGYgaW50byBlbGVtZW50cyBvZiBhCisgIC8vIGluZGV4ZWQgYnkgY29udGVudHMgb2YgaS4gIEkuZS4sIGFbaVswXV0gPSBlW2ZbMF1dLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX2UsIF9BcnJheTxzaXplX3Q+IF9fZiwKKwkJICAgIHNpemVfdCBfX24sIAorCQkgICAgX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2kpCisgICAgeworICAgICAgc2l6ZV90KiBfX2cgKF9fZi5fTV9kYXRhKTsKKyAgICAgIHNpemVfdCogX19qIChfX2kuX01fZGF0YSk7CisgICAgICBmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX247ICsrX19rLCArK19faiwgKytfX2cpIAorCV9fYS5fTV9kYXRhWypfX2pdID0gX19lLl9NX2RhdGFbKl9fZ107CisgICAgfQorCisgIC8vIENvcHkgbiBjb25zZWN1dGl2ZSBlbGVtZW50cyBvZiBlIGludG8gZWxlbWVudHMgb2YgYS4gIEVsZW1lbnRzIG9mCisgIC8vIGEgYXJlIHNraXBwZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBtIGlzIGZhbHNlLiAgbSBtdXN0CisgIC8vIGhhdmUgYXQgbGVhc3QgbiB0cnVlIGVsZW1lbnRzIGFuZCBhIG11c3QgaGF2ZSBhdCBsZWFzdCBhcyBtYW55CisgIC8vIGVsZW1lbnRzIGFzIHRoZSBpbmRleCBvZiB0aGUgbnRoIHRydWUgZWxlbWVudCBvZiBtLiAgSS5lLiBpZiBtCisgIC8vIGhhcyA1IGZhbHNlIGZvbGxvd2VkIGJ5IDEwIHRydWUgZWxlbWVudHMgYW5kIG4gPT0gMTAsIGEgbXVzdCBoYXZlCisgIC8vIGF0IGxlYXN0IDE1IGVsZW1lbnRzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+CisgICAgdm9pZAorICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sCisJCSAgICBfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20pCisgICAgeworICAgICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOworICAgICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2ksICsrX19vaywgKytfX3ApCisJeworCSAgd2hpbGUgKCEgKl9fb2spCisJICAgIHsKKwkgICAgICArK19fb2s7CisJICAgICAgKytfX3A7CisJICAgIH0KKwkgICpfX3AgPSBfX2VbX19pXTsKKwl9CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPgorICAgIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbiwKKwkJCSAgICAgIF9BcnJheTxfVHA+IF9fYSkKKyAgICB7CisgICAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSwgKytfX3ApCisJbmV3IChfX3ApIF9UcChfX2VbX19pXSk7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwKKwkJCSAgICAgIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikKKyAgICB7CisgICAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOworICAgICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOworICAgICAgZm9yIChfVHAqIF9fcSA9IF9fYi5fTV9kYXRhOyBfX3EgPCBfX2IuX01fZGF0YStfX247ICsrX19xLCArK19fb2ssICsrX19wKQorCXsKKwkgIHdoaWxlICghICpfX29rKQorCSAgICB7CisJICAgICAgKytfX29rOworCSAgICAgICsrX19wOworCSAgICB9CisJICBuZXcgKF9fcSkgX1RwKCpfX3ApOworCX0KKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9WQUxBUlJBWV9BUlJBWV9UQ0MgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy92YWxhcnJheV9iZWZvcmUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0cy92YWxhcnJheV9iZWZvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzU3MzFhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3ZhbGFycmF5X2JlZm9yZS5oCkBAIC0wLDAgKzEsNzMzIEBACisvLyBUaGUgdGVtcGxhdGUgYW5kIGlubGluZXMgZm9yIHRoZSAtKi0gQysrIC0qLSBpbnRlcm5hbCBfTWV0YSBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvdmFsYXJyYXlfYmVmb3JlLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt2YWxhcnJheX0KKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNAY21sYS5lbnMtY2FjaGFuLmZyPgorCisjaWZuZGVmIF9WQUxBUlJBWV9CRUZPUkVfSAorI2RlZmluZSBfVkFMQVJSQVlfQkVGT1JFX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL3NsaWNlX2FycmF5Lmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLworICAvLyBJbXBsZW1lbnRpbmcgYSBsb29zZW5lZCB2YWxhcnJheSByZXR1cm4gdmFsdWUgaXMgdHJpY2t5LgorICAvLyBGaXJzdCB3ZSBuZWVkIHRvIG1lZXQgMjYuMy4xLzM6IHdlIHNob3VsZCBub3QgYWRkIG1vcmUgdGhhbgorICAvLyB0d28gbGV2ZWxzIG9mIHRlbXBsYXRlIG5lc3RpbmcuIFRoZXJlZm9yZSB3ZSByZXNvcnQgdG8gdGVtcGxhdGUKKyAgLy8gdGVtcGxhdGUgdG8gImZsYXR0ZW4iIGxvb3NlbmVkIHJldHVybiB2YWx1ZSB0eXBlcy4KKyAgLy8gQXQgc29tZSBwb2ludCB3ZSB1c2UgcGFydGlhbCBzcGVjaWFsaXphdGlvbiB0byByZW1vdmUgb25lIGxldmVsCisgIC8vIHRlbXBsYXRlIG5lc3RpbmcgZHVlIHRvIF9FeHByPD4KKyAgLy8KKworICAvLyBUaGlzIGNsYXNzIGlzIE5PVCBkZWZpbmVkLiBJdCBkb2Vzbid0IG5lZWQgdG8uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+IGNsYXNzIF9Db25zdGFudDsKKworICAvLyBJbXBsZW1lbnRhdGlvbnMgb2YgdW5hcnkgZnVuY3Rpb25zIGFwcGxpZWQgdG8gdmFsYXJyYXk8PnMuCisgIC8vIEkgdXNlIGhhcmQtY29kZWQgb2JqZWN0IGZ1bmN0aW9ucyBoZXJlIGluc3RlYWQgb2YgYSBnZW5lcmljCisgIC8vIGFwcHJvYWNoIGxpa2UgcG9pbnRlcnMgdG8gZnVuY3Rpb246CisgIC8vICAgIDEpIGNvcnJlY3RuZXNzOiBzb21lIGZ1bmN0aW9ucyB0YWtlIHJlZmVyZW5jZXMsIG90aGVycyB2YWx1ZXMuCisgIC8vICAgICAgIHdlIGNhbid0IGRlZHVjZSB0aGUgY29ycmVjdCB0eXBlIGFmdGVyd2FyZHMuCisgIC8vICAgIDIpIGVmZmljaWVuY3kgLS0gb2JqZWN0IGZ1bmN0aW9ucyBjYW4gYmUgZWFzaWx5IGlubGluZWQKKyAgLy8gICAgMykgYmUgS29lbmlnLWxvb2t1cC1mcmllbmRseQorCisgIHN0cnVjdCBfQWJzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGFicyhfX3QpOyB9CisgIH07CisKKyAgc3RydWN0IF9Db3MKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gY29zKF9fdCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX0Fjb3MKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gYWNvcyhfX3QpOyB9CisgIH07CisKKyAgc3RydWN0IF9Db3NoCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvc2goX190KTsgfQorICB9OworCisgIHN0cnVjdCBfU2luCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHNpbihfX3QpOyB9CisgIH07CisKKyAgc3RydWN0IF9Bc2luCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGFzaW4oX190KTsgfQorICB9OworCisgIHN0cnVjdCBfU2luaAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiBzaW5oKF9fdCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX1RhbgorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiB0YW4oX190KTsgfQorICB9OworCisgIHN0cnVjdCBfQXRhbgorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiBhdGFuKF9fdCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX1RhbmgKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gdGFuaChfX3QpOyB9CisgIH07CisKKyAgc3RydWN0IF9FeHAKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gZXhwKF9fdCk7IH0KKyAgfTsKKworICBzdHJ1Y3QgX0xvZworICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiBsb2coX190KTsgfQorICB9OworCisgIHN0cnVjdCBfTG9nMTAKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gbG9nMTAoX190KTsgfQorICB9OworCisgIHN0cnVjdCBfU3FydAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiBzcXJ0KF9fdCk7IH0KKyAgfTsKKworICAvLyBJbiB0aGUgcGFzdCwgd2UgdXNlZCB0byB0YWlsb3Igb3BlcmF0b3IgYXBwbGljYXRpb25zIHNlbWFudGljcworICAvLyB0byB0aGUgc3BlY2lhbGl6YXRpb24gb2Ygc3RhbmRhcmQgZnVuY3Rpb24gb2JqZWN0cyAoaS5lLiBwbHVzPD4sIGV0Yy4pCisgIC8vIFRoYXQgaXMgaW5jb3JyZWN0LiAgVGhlcmVmb3JlIHdlIHByb3ZpZGUgb3VyIG93biBzdXJyb2dhdGVzLgorCisgIHN0cnVjdCBfX3VuYXJ5X3BsdXMKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gK19fdDsgfQorICB9OworCisgIHN0cnVjdCBfX25lZ2F0ZQorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3QpIGNvbnN0CisgICAgICB7IHJldHVybiAtX190OyB9CisgIH07CisKKyAgc3RydWN0IF9fYml0d2lzZV9ub3QKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX190KSBjb25zdAorICAgICAgeyByZXR1cm4gfl9fdDsgfQorICB9OworCisgIHN0cnVjdCBfX3BsdXMKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCArIF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX21pbnVzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggLSBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19tdWx0aXBsaWVzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggKiBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19kaXZpZGVzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggLyBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19tb2R1bHVzCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggJSBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19iaXR3aXNlX3hvcgorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IF4gX195OyB9CisgIH07CisKKyAgc3RydWN0IF9fYml0d2lzZV9hbmQKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCAmIF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2JpdHdpc2Vfb3IKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCB8IF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX3NoaWZ0X2xlZnQKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA8PCBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19zaGlmdF9yaWdodAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ID4+IF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2xvZ2ljYWxfYW5kCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ICYmIF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2xvZ2ljYWxfb3IKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggfHwgX195OyB9CisgIH07CisKKyAgc3RydWN0IF9fbG9naWNhbF9ub3QKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICFfX3g7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19lcXVhbF90bworICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19ub3RfZXF1YWxfdG8KKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggIT0gX195OyB9CisgIH07CisKKyAgc3RydWN0IF9fbGVzcworICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feCA8IF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2dyZWF0ZXIKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggPiBfX3k7IH0KKyAgfTsKKworICBzdHJ1Y3QgX19sZXNzX2VxdWFsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194IDw9IF9feTsgfQorICB9OworCisgIHN0cnVjdCBfX2dyZWF0ZXJfZXF1YWwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggPj0gX195OyB9CisgIH07CisKKyAgLy8gVGhlIGZldyBiaW5hcnkgZnVuY3Rpb25zIHdlIG1pc3MuCisgIHN0cnVjdCBfQXRhbjIKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGF0YW4yKF9feCwgX195KTsgfQorICB9OworCisgIHN0cnVjdCBfUG93CisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBwb3coX194LCBfX3kpOyB9CisgIH07CisKKworICAvLyBXZSBuZWVkIHRoZXNlIGJpdHMgaW4gb3JkZXIgdG8gcmVjb3ZlciB0aGUgcmV0dXJuIHR5cGUgb2YKKyAgLy8gc29tZSBmdW5jdGlvbnMvb3BlcmF0b3JzIG5vdyB0aGF0IHdlJ3JlIG5vIGxvbmdlciB1c2luZworICAvLyBmdW5jdGlvbiB0ZW1wbGF0ZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZnVuCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLyBzZXZlcmFsIHNwZWNpYWxpemF0aW9ucyBmb3IgcmVsYXRpb25hbCBvcGVyYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mdW48X19sb2dpY2FsX25vdCwgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgYm9vbCByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mdW48X19sb2dpY2FsX2FuZCwgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgYm9vbCByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mdW48X19sb2dpY2FsX29yLCBfVHA+CisgICAgeworICAgICAgdHlwZWRlZiBib29sIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2Z1bjxfX2xlc3MsIF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIGJvb2wgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZnVuPF9fZ3JlYXRlciwgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgYm9vbCByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mdW48X19sZXNzX2VxdWFsLCBfVHA+CisgICAgeworICAgICAgdHlwZWRlZiBib29sIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2Z1bjxfX2dyZWF0ZXJfZXF1YWwsIF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIGJvb2wgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZnVuPF9fZXF1YWxfdG8sIF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIGJvb2wgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZnVuPF9fbm90X2VxdWFsX3RvLCBfVHA+CisgICAgeworICAgICAgdHlwZWRlZiBib29sIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLy8KKyAgLy8gQXBwbHkgZnVuY3Rpb24gdGFraW5nIGEgdmFsdWUvY29uc3QgcmVmZXJlbmNlIGNsb3N1cmUKKyAgLy8KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRG9tLCB0eXBlbmFtZSBfQXJnPgorICAgIGNsYXNzIF9GdW5CYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfRnVuQmFzZShjb25zdCBfRG9tJiBfX2UsIHZhbHVlX3R5cGUgX19mKF9BcmcpKQorICAgICAgOiBfTV9leHByKF9fZSksIF9NX2Z1bmMoX19mKSB7fQorCisgICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10oc2l6ZV90IF9faSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2Z1bmMgKF9NX2V4cHJbX19pXSk7IH0KKworICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9leHByLnNpemUgKCk7fQorCisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHI7CisgICAgICB2YWx1ZV90eXBlICgqX01fZnVuYykoX0FyZyk7CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgIHN0cnVjdCBfVmFsRnVuQ2xvczxfRXhwcixfRG9tPiA6IF9GdW5CYXNlPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuQmFzZTxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVHA7CisKKyAgICAgIF9WYWxGdW5DbG9zKGNvbnN0IF9Eb20mIF9fZSwgX1RwIF9fZihfVHApKSA6IF9CYXNlKF9fZSwgX19mKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfVmFsRnVuQ2xvczxfVmFsQXJyYXksX1RwPiA6IF9GdW5CYXNlPHZhbGFycmF5PF9UcD4sIF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIF9GdW5CYXNlPHZhbGFycmF5PF9UcD4sIF9UcD4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCisgICAgICBfVmFsRnVuQ2xvcyhjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIF9UcCBfX2YoX1RwKSkgOiBfQmFzZShfX3YsIF9fZikge30KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9SZWZGdW5DbG9zPF9FeHByLCBfRG9tPgorICAgIDogX0Z1bkJhc2U8X0RvbSwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSY+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuQmFzZTxfRG9tLCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJj4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgX1RwOworCisgICAgICBfUmVmRnVuQ2xvcyhjb25zdCBfRG9tJiBfX2UsIF9UcCBfX2YoY29uc3QgX1RwJikpCisgICAgICA6IF9CYXNlKF9fZSwgX19mKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmRnVuQ2xvczxfVmFsQXJyYXksIF9UcD4KKyAgICA6IF9GdW5CYXNlPHZhbGFycmF5PF9UcD4sIGNvbnN0IF9UcCY+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuQmFzZTx2YWxhcnJheTxfVHA+LCBjb25zdCBfVHAmPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisKKyAgICAgIF9SZWZGdW5DbG9zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgX1RwIF9fZihjb25zdCBfVHAmKSkKKyAgICAgIDogX0Jhc2UoX192LCBfX2YpIHt9CisgICAgfTsKKworICAvLworICAvLyBVbmFyeSBleHByZXNzaW9uIGNsb3N1cmUuCisgIC8vCisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9Bcmc+CisgICAgY2xhc3MgX1VuQmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Bcmc6OnZhbHVlX3R5cGUgX1Z0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfT3BlciwgX1Z0Pjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX1VuQmFzZShjb25zdCBfQXJnJiBfX2UpIDogX01fZXhwcihfX2UpIHt9CisKKyAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXShzaXplX3QgX19pKSBjb25zdAorICAgICAgeyByZXR1cm4gX09wZXIoKShfTV9leHByW19faV0pOyB9CisKKyAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fZXhwci5zaXplKCk7IH0KKyAgICAgIAorICAgIHByaXZhdGU6CisgICAgICBjb25zdCBfQXJnJiBfTV9leHByOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9VbkNsb3M8X09wZXIsIF9FeHByLCBfRG9tPgorICAgIDogX1VuQmFzZTxfT3BlciwgX0RvbT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Eb20gX0FyZzsKKyAgICAgIHR5cGVkZWYgX1VuQmFzZTxfT3BlciwgX0RvbT4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIF9VbkNsb3MoY29uc3QgX0FyZyYgX19lKSA6IF9CYXNlKF9fZSkge30KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9PcGVyLCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9VbkNsb3M8X09wZXIsIF9WYWxBcnJheSwgX1RwPgorICAgIDogX1VuQmFzZTxfT3BlciwgdmFsYXJyYXk8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiB2YWxhcnJheTxfVHA+IF9Bcmc7CisgICAgICB0eXBlZGVmIF9VbkJhc2U8X09wZXIsIHZhbGFycmF5PF9UcD4gPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX1VuQ2xvcyhjb25zdCBfQXJnJiBfX2UpIDogX0Jhc2UoX19lKSB7fQorICAgIH07CisKKworICAvLworICAvLyBCaW5hcnkgZXhwcmVzc2lvbiBjbG9zdXJlLgorICAvLworCisgIHRlbXBsYXRlPGNsYXNzIF9PcGVyLCBjbGFzcyBfRmlyc3RBcmcsIGNsYXNzIF9TZWNvbmRBcmc+CisgICAgY2xhc3MgX0JpbkJhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRmlyc3RBcmc6OnZhbHVlX3R5cGUgX1Z0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfT3BlciwgX1Z0Pjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkJhc2UoY29uc3QgX0ZpcnN0QXJnJiBfX2UxLCBjb25zdCBfU2Vjb25kQXJnJiBfX2UyKQorICAgICAgOiBfTV9leHByMShfX2UxKSwgX01fZXhwcjIoX19lMikge30KKworICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdKHNpemVfdCBfX2kpIGNvbnN0CisgICAgICB7IHJldHVybiBfT3BlcigpKF9NX2V4cHIxW19faV0sIF9NX2V4cHIyW19faV0pOyB9CisKKyAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fZXhwcjEuc2l6ZSgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX0ZpcnN0QXJnJiBfTV9leHByMTsKKyAgICAgIGNvbnN0IF9TZWNvbmRBcmcmIF9NX2V4cHIyOworICAgIH07CisKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgY2xhc3MgX0Nsb3M+CisgICAgY2xhc3MgX0JpbkJhc2UyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Nsb3M6OnZhbHVlX3R5cGUgX1Z0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Z1bjxfT3BlciwgX1Z0Pjo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkJhc2UyKGNvbnN0IF9DbG9zJiBfX2UsIGNvbnN0IF9WdCYgX190KQorICAgICAgOiBfTV9leHByMShfX2UpLCBfTV9leHByMihfX3QpIHt9CisKKyAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXShzaXplX3QgX19pKSBjb25zdAorICAgICAgeyByZXR1cm4gX09wZXIoKShfTV9leHByMVtfX2ldLCBfTV9leHByMik7IH0KKworICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9leHByMS5zaXplKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICBjb25zdCBfQ2xvcyYgX01fZXhwcjE7CisgICAgICBjb25zdCBfVnQmIF9NX2V4cHIyOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9DbG9zPgorICAgIGNsYXNzIF9CaW5CYXNlMQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DbG9zOjp2YWx1ZV90eXBlIF9WdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19mdW48X09wZXIsIF9WdD46OnJlc3VsdF90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIF9CaW5CYXNlMShjb25zdCBfVnQmIF9fdCwgY29uc3QgX0Nsb3MmIF9fZSkKKyAgICAgIDogX01fZXhwcjEoX190KSwgX01fZXhwcjIoX19lKSB7fQorCisgICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10oc2l6ZV90IF9faSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9PcGVyKCkoX01fZXhwcjEsIF9NX2V4cHIyW19faV0pOyB9CisKKyAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fZXhwcjIuc2l6ZSgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX1Z0JiBfTV9leHByMTsKKyAgICAgIGNvbnN0IF9DbG9zJiBfTV9leHByMjsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9PcGVyLCBjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+CisgICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfRXhwciwgX0V4cHIsIF9Eb20xLCBfRG9tMj4KKyAgICA6IF9CaW5CYXNlPF9PcGVyLCBfRG9tMSwgX0RvbTI+CisgICAgeworICAgICAgdHlwZWRlZiBfQmluQmFzZTxfT3BlciwgX0RvbTEsIF9Eb20yPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkNsb3MoY29uc3QgX0RvbTEmIF9fZTEsIGNvbnN0IF9Eb20yJiBfX2UyKSA6IF9CYXNlKF9fZTEsIF9fZTIpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlcixfVmFsQXJyYXksIF9WYWxBcnJheSwgX1RwLCBfVHA+CisgICAgOiBfQmluQmFzZTxfT3BlciwgdmFsYXJyYXk8X1RwPiwgdmFsYXJyYXk8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfQmluQmFzZTxfT3BlciwgdmFsYXJyYXk8X1RwPiwgdmFsYXJyYXk8X1RwPiA+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfQmluQ2xvcyhjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdykKKyAgICAgIDogX0Jhc2UoX192LCBfX3cpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgY2xhc3MgX0RvbT4KKyAgICBzdHJ1Y3QgX0JpbkNsb3M8X09wZXIsIF9FeHByLCBfVmFsQXJyYXksIF9Eb20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+CisgICAgOiBfQmluQmFzZTxfT3BlciwgX0RvbSwgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7CisgICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLF9Eb20sdmFsYXJyYXk8X1RwPiA+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfQmluQ2xvcyhjb25zdCBfRG9tJiBfX2UxLCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX2UyKQorICAgICAgOiBfQmFzZShfX2UxLCBfX2UyKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfVmFsQXJyYXksIF9FeHByLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLCBfRG9tPgorICAgIDogX0JpbkJhc2U8X09wZXIsIHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LF9Eb20+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsKKyAgICAgIHR5cGVkZWYgX0JpbkJhc2U8X09wZXIsIHZhbGFycmF5PF9UcD4sIF9Eb20+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfQmluQ2xvcyhjb25zdCB2YWxhcnJheTxfVHA+JiBfX2UxLCBjb25zdCBfRG9tJiBfX2UyKQorICAgICAgOiBfQmFzZShfX2UxLCBfX2UyKSB7fQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfRXhwciwgX0NvbnN0YW50LCBfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPgorICAgIDogX0JpbkJhc2UyPF9PcGVyLCBfRG9tPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7CisgICAgICB0eXBlZGVmIF9CaW5CYXNlMjxfT3BlcixfRG9tPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkNsb3MoY29uc3QgX0RvbSYgX19lMSwgY29uc3QgX1RwJiBfX2UyKSA6IF9CYXNlKF9fZTEsIF9fZTIpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgY2xhc3MgX0RvbT4KKyAgICBzdHJ1Y3QgX0JpbkNsb3M8X09wZXIsIF9Db25zdGFudCwgX0V4cHIsIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsIF9Eb20+CisgICAgOiBfQmluQmFzZTE8X09wZXIsIF9Eb20+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsKKyAgICAgIHR5cGVkZWYgX0JpbkJhc2UxPF9PcGVyLCBfRG9tPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKworICAgICAgX0JpbkNsb3MoY29uc3QgX1RwJiBfX2UxLCBjb25zdCBfRG9tJiBfX2UyKSA6IF9CYXNlKF9fZTEsIF9fZTIpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlciwgX1ZhbEFycmF5LCBfQ29uc3RhbnQsIF9UcCwgX1RwPgorICAgIDogX0JpbkJhc2UyPF9PcGVyLCB2YWxhcnJheTxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5CYXNlMjxfT3Blcix2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIF9CaW5DbG9zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX1RwJiBfX3QpIDogX0Jhc2UoX192LCBfX3QpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfT3BlciwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlciwgX0NvbnN0YW50LCBfVmFsQXJyYXksIF9UcCwgX1RwPgorICAgIDogX0JpbkJhc2UxPF9PcGVyLCB2YWxhcnJheTxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5CYXNlMTxfT3BlciwgdmFsYXJyYXk8X1RwPiA+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCisgICAgICBfQmluQ2xvcyhjb25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSA6IF9CYXNlKF9fdCwgX192KSB7fQorICAgIH07CisKKyAgICAvLworICAgIC8vIHNsaWNlX2FycmF5IGNsb3N1cmUuCisgICAgLy8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0RvbT4gCisgICAgY2xhc3MgX1NCYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfU0Jhc2UgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3Qgc2xpY2UmIF9fcykKKyAgICAgIDogX01fZXhwciAoX19lKSwgX01fc2xpY2UgKF9fcykge30KKyAgICAgICAgCisgICAgICB2YWx1ZV90eXBlCisgICAgICBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZXhwcltfTV9zbGljZS5zdGFydCAoKSArIF9faSAqIF9NX3NsaWNlLnN0cmlkZSAoKV07IH0KKyAgICAgICAgCisgICAgICBzaXplX3QKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fc2xpY2Uuc2l6ZSAoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHI7CisgICAgICBjb25zdCBzbGljZSYgX01fc2xpY2U7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX1NCYXNlPF9BcnJheTxfVHA+ID4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKKyAgICAgIAorICAgICAgX1NCYXNlIChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IHNsaWNlJiBfX3MpCisgICAgICA6IF9NX2FycmF5IChfX2EuX01fZGF0YStfX3Muc3RhcnQoKSksIF9NX3NpemUgKF9fcy5zaXplKCkpLAorCV9NX3N0cmlkZSAoX19zLnN0cmlkZSgpKSB7fQorICAgICAgICAKKyAgICAgIHZhbHVlX3R5cGUKKyAgICAgIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9hcnJheS5fTV9kYXRhW19faSAqIF9NX3N0cmlkZV07IH0KKyAgICAgIAorICAgICAgc2l6ZV90CisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3NpemU7IH0KKworICAgIHByaXZhdGU6CisgICAgICBjb25zdCBfQXJyYXk8X1RwPiBfTV9hcnJheTsKKyAgICAgIGNvbnN0IHNpemVfdCBfTV9zaXplOworICAgICAgY29uc3Qgc2l6ZV90IF9NX3N0cmlkZTsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9TQ2xvczxfRXhwciwgX0RvbT4KKyAgICA6IF9TQmFzZTxfRG9tPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1NCYXNlPF9Eb20+IF9CYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfU0Nsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3Qgc2xpY2UmIF9fcykgOiBfQmFzZSAoX19lLCBfX3MpIHt9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9TQ2xvczxfVmFsQXJyYXksIF9UcD4KKyAgICA6IF9TQmFzZTxfQXJyYXk8X1RwPiA+CisgICAgeworICAgICAgdHlwZWRlZiAgX1NCYXNlPF9BcnJheTxfVHA+ID4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworICAgICAgCisgICAgICBfU0Nsb3MgKF9BcnJheTxfVHA+IF9fYSwgY29uc3Qgc2xpY2UmIF9fcykgOiBfQmFzZSAoX19hLCBfX3MpIHt9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0NQUF9WQUxBUlJBWV9CRUZPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3ZlY3Rvci50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHMvdmVjdG9yLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODgyZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9iaXRzL3ZlY3Rvci50Y2MKQEAgLTAsMCArMSw4NTggQEAKKy8vIFZlY3RvciBpbXBsZW1lbnRhdGlvbiAob3V0IG9mIGxpbmUpIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyAgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGJpdHMvdmVjdG9yLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3ZlY3Rvcn0KKyAqLworCisjaWZuZGVmIF9WRUNUT1JfVENDCisjZGVmaW5lIF9WRUNUT1JfVENDIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQ09OVEFJTkVSCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKKwlfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oInZlY3Rvcjo6cmVzZXJ2ZSIpKTsKKyAgICAgIGlmICh0aGlzLT5jYXBhY2l0eSgpIDwgX19uKQorCXsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOworCSAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwKKwkgICAgX0dMSUJDWFhfTUFLRV9NT1ZFX0lGX05PRVhDRVBUX0lURVJBVE9SKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpLAorCSAgICBfR0xJQkNYWF9NQUtFX01PVkVfSUZfTk9FWENFUFRfSVRFUkFUT1IodGhpcy0+X01faW1wbC5fTV9maW5pc2gpKTsKKwkgIHN0ZDo6X0Rlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydCwgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX3RtcDsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXplOworCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX247CisJfQorICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB2b2lkCisgICAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICAgIGVtcGxhY2VfYmFjayhfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKwlpZiAodGhpcy0+X01faW1wbC5fTV9maW5pc2ggIT0gdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSkKKwkgIHsKKwkgICAgX0FsbG9jX3RyYWl0czo6Y29uc3RydWN0KHRoaXMtPl9NX2ltcGwsIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCSAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgICAgKyt0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwkgIH0KKwllbHNlCisJICBfTV9lbXBsYWNlX2JhY2tfYXV4KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworICAgICAgaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICE9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UKKwkgICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCisJeworCSAgX0FsbG9jX3RyYWl0czo6Y29uc3RydWN0KHRoaXMtPl9NX2ltcGwsIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLCBfX3gpOworCSAgKyt0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwl9CisgICAgICBlbHNlCisJeworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKwkgIGlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlKQorCSAgICB7CisJICAgICAgX1RwIF9feF9jb3B5ID0gX194OworCSAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feF9jb3B5KSk7CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZgorCSAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CisJfQorICAgICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX24pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0eXBlbmFtZSB2ZWN0b3I8X1RwLCBfQWxsb2M+OjppdGVyYXRvcgorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgeworICAgICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQorCV9HTElCQ1hYX01PVkUzKF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CisgICAgICAtLXRoaXMtPl9NX2ltcGwuX01fZmluaXNoOworICAgICAgX0FsbG9jX3RyYWl0czo6ZGVzdHJveSh0aGlzLT5fTV9pbXBsLCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCk7CisgICAgICByZXR1cm4gX19wb3NpdGlvbjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgdmVjdG9yPF9UcCwgX0FsbG9jPjo6aXRlcmF0b3IKKyAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgIGlmIChfX2xhc3QgIT0gZW5kKCkpCisJICAgIF9HTElCQ1hYX01PVkUzKF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOworCSAgX01fZXJhc2VfYXRfZW5kKF9fZmlyc3QuYmFzZSgpICsgKGVuZCgpIC0gX19sYXN0KSk7CisJfQorICAgICAgcmV0dXJuIF9fZmlyc3Q7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4mCisgICAgdmVjdG9yPF9UcCwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKKyAgICB7CisgICAgICBpZiAoJl9feCAhPSB0aGlzKQorCXsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJICBpZiAoX0FsbG9jX3RyYWl0czo6X1NfcHJvcGFnYXRlX29uX2NvcHlfYXNzaWduKCkpCisJICAgIHsKKwkgICAgICBpZiAoIV9BbGxvY190cmFpdHM6Ol9TX2Fsd2F5c19lcXVhbCgpCisJICAgICAgICAgICYmIF9NX2dldF9UcF9hbGxvY2F0b3IoKSAhPSBfX3guX01fZ2V0X1RwX2FsbG9jYXRvcigpKQorCSAgICAgICAgeworCQkgIC8vIHJlcGxhY2VtZW50IGFsbG9jYXRvciBjYW5ub3QgZnJlZSBleGlzdGluZyBzdG9yYWdlCisJCSAgdGhpcy0+Y2xlYXIoKTsKKwkJICBfTV9kZWFsbG9jYXRlKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQkJdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJCS0gdGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisJCSAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IG51bGxwdHI7CisJCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBudWxscHRyOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSBudWxscHRyOworCQl9CisJICAgICAgc3RkOjpfX2FsbG9jX29uX2NvcHkoX01fZ2V0X1RwX2FsbG9jYXRvcigpLAorCQkJCSAgIF9feC5fTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICB9CisjZW5kaWYKKwkgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOworCSAgaWYgKF9feGxlbiA+IGNhcGFjaXR5KCkpCisJICAgIHsKKwkgICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwKKwkJCQkJCSAgIF9feC5lbmQoKSk7CisJICAgICAgc3RkOjpfRGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCSAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICAgIF9NX2RlYWxsb2NhdGUodGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJCQkgICAgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKwkgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX190bXA7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgKyBfX3hsZW47CisJICAgIH0KKwkgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pCisJICAgIHsKKwkgICAgICBzdGQ6Ol9EZXN0cm95KHN0ZDo6Y29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSwKKwkJCSAgICBlbmQoKSwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgc3RkOjpjb3B5KF9feC5fTV9pbXBsLl9NX3N0YXJ0LCBfX3guX01faW1wbC5fTV9zdGFydCArIHNpemUoKSwKKwkJCXRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOworCSAgICAgIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX3guX01faW1wbC5fTV9zdGFydCArIHNpemUoKSwKKwkJCQkJICBfX3guX01faW1wbC5fTV9maW5pc2gsCisJCQkJCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgfQorCSAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ICsgX194bGVuOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQorICAgIHsKKyAgICAgIGlmIChfX24gPiBjYXBhY2l0eSgpKQorCXsKKwkgIHZlY3RvciBfX3RtcChfX24sIF9fdmFsLCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgX190bXAuc3dhcCgqdGhpcyk7CisJfQorICAgICAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKQorCXsKKwkgIHN0ZDo6ZmlsbChiZWdpbigpLCBlbmQoKSwgX192YWwpOworCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EodGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCV9fbiAtIHNpemUoKSwgX192YWwsCisJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCArPSBfX24gLSBzaXplKCk7CisJfQorICAgICAgZWxzZQorICAgICAgICBfTV9lcmFzZV9hdF9lbmQoc3RkOjpmaWxsX24odGhpcy0+X01faW1wbC5fTV9zdGFydCwgX19uLCBfX3ZhbCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlwb2ludGVyIF9fY3VyKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOworCWZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKwkgICAgICsrX19jdXIsICsrX19maXJzdCkKKwkgICpfX2N1ciA9ICpfX2ZpcnN0OworCWlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwkgIF9NX2VyYXNlX2F0X2VuZChfX2N1cik7CisJZWxzZQorCSAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkJICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworCisJaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkKKwkgIHsKKwkgICAgcG9pbnRlciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KSk7CisJICAgIHN0ZDo6X0Rlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydCwgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICAgIF9NX2RlYWxsb2NhdGUodGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJICAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOworCSAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX190bXA7CisJICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gdGhpcy0+X01faW1wbC5fTV9zdGFydCArIF9fbGVuOworCSAgICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlID0gdGhpcy0+X01faW1wbC5fTV9maW5pc2g7CisJICB9CisJZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKQorCSAgX01fZXJhc2VfYXRfZW5kKHN0ZDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpKTsKKwllbHNlCisJICB7CisJICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OworCSAgICBzdGQ6OmFkdmFuY2UoX19taWQsIHNpemUoKSk7CisJICAgIHN0ZDo6Y29weShfX2ZpcnN0LCBfX21pZCwgdGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisJICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0KKwkgICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9jb3B5X2EoX19taWQsIF9fbGFzdCwKKwkJCQkJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgfQorICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHR5cGVuYW1lIHZlY3RvcjxfVHAsIF9BbGxvYz46Oml0ZXJhdG9yCisgICAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICAgIGVtcGxhY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworCWlmICh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJICAgICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCisJICB7CisJICAgIF9BbGxvY190cmFpdHM6OmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgICsrdGhpcy0+X01faW1wbC5fTV9maW5pc2g7CisJICB9CisJZWxzZQorCSAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCXJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ICsgX19uKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHZvaWQKKyAgICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncykKKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQorI2VuZGlmCisgICAgeworICAgICAgaWYgKHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICE9IHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UpCisJeworCSAgX0FsbG9jX3RyYWl0czo6Y29uc3RydWN0KHRoaXMtPl9NX2ltcGwsIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJICAgICAgICAgICBfR0xJQkNYWF9NT1ZFKCoodGhpcy0+X01faW1wbC5fTV9maW5pc2gKKwkJCQkgICAgICAgICAgICAgICAgICAgLSAxKSkpOworCSAgKyt0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaDsKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKwkgIF9UcCBfX3hfY29weSA9IF9feDsKKyNlbmRpZgorCSAgX0dMSUJDWFhfTU9WRV9CQUNLV0FSRDMoX19wb3NpdGlvbi5iYXNlKCksCisJCQkJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAtIDIsCisJCQkJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCAtIDEpOworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorCSAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKKyNlbHNlCisJICAqX19wb3NpdGlvbiA9IF9UcChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworI2VuZGlmCisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9CisJICAgIF9NX2NoZWNrX2xlbihzaXplX3R5cGUoMSksICJ2ZWN0b3I6Ol9NX2luc2VydF9hdXgiKTsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2JlZm9yZSA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworCSAgcG9pbnRlciBfX25ld19zdGFydCh0aGlzLT5fTV9hbGxvY2F0ZShfX2xlbikpOworCSAgcG9pbnRlciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOworCSAgX190cnkKKwkgICAgeworCSAgICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgdGhyZWUgb3BlcmF0aW9ucyBpcyBkaWN0YXRlZCBieSB0aGUgQysrMHgKKwkgICAgICAvLyBjYXNlLCB3aGVyZSB0aGUgbW92ZXMgY291bGQgYWx0ZXIgYSBuZXcgZWxlbWVudCBiZWxvbmdpbmcKKwkgICAgICAvLyB0byB0aGUgZXhpc3RpbmcgdmVjdG9yLiAgVGhpcyBpcyBhbiBpc3N1ZSBvbmx5IGZvciBjYWxsZXJzCisJICAgICAgLy8gdGFraW5nIHRoZSBlbGVtZW50IGJ5IGNvbnN0IGx2YWx1ZSByZWYgKHNlZSAyMy4xLzEzKS4KKwkgICAgICBfQWxsb2NfdHJhaXRzOjpjb25zdHJ1Y3QodGhpcy0+X01faW1wbCwKKwkJICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCArIF9fZWxlbXNfYmVmb3JlLAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKwkJCQkgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyNlbHNlCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feCk7CisjZW5kaWYKKwkgICAgICBfX25ld19maW5pc2ggPSAwOworCisJICAgICAgX19uZXdfZmluaXNoCisJCT0gc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9pZl9ub2V4Y2VwdF9hCisJCSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJIF9fbmV3X3N0YXJ0LCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCisJICAgICAgKytfX25ld19maW5pc2g7CisKKwkgICAgICBfX25ld19maW5pc2gKKwkJPSBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2lmX25vZXhjZXB0X2EKKwkJKF9fcG9zaXRpb24uYmFzZSgpLCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJIF9fbmV3X2ZpbmlzaCwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgfQorICAgICAgICAgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgaWYgKCFfX25ld19maW5pc2gpCisJCV9BbGxvY190cmFpdHM6OmRlc3Ryb3kodGhpcy0+X01faW1wbCwKKwkJICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCArIF9fZWxlbXNfYmVmb3JlKTsKKwkgICAgICBlbHNlCisJCXN0ZDo6X0Rlc3Ryb3koX19uZXdfc3RhcnQsIF9fbmV3X2ZpbmlzaCwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LCBfX2xlbik7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIHN0ZDo6X0Rlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydCwgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LAorCQkJdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX25ld19zdGFydDsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19uZXdfZmluaXNoOworCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CisJfQorICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICB2b2lkCisgICAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX2VtcGxhY2VfYmFja19hdXgoX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0KKwkgIF9NX2NoZWNrX2xlbihzaXplX3R5cGUoMSksICJ2ZWN0b3I6Ol9NX2VtcGxhY2VfYmFja19hdXgiKTsKKwlwb2ludGVyIF9fbmV3X3N0YXJ0KHRoaXMtPl9NX2FsbG9jYXRlKF9fbGVuKSk7CisJcG9pbnRlciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOworCV9fdHJ5CisJICB7CisJICAgIF9BbGxvY190cmFpdHM6OmNvbnN0cnVjdCh0aGlzLT5fTV9pbXBsLCBfX25ld19zdGFydCArIHNpemUoKSwKKwkJCQkgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICAgIF9fbmV3X2ZpbmlzaCA9IDA7CisKKwkgICAgX19uZXdfZmluaXNoCisJICAgICAgPSBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2lmX25vZXhjZXB0X2EKKwkgICAgICAodGhpcy0+X01faW1wbC5fTV9zdGFydCwgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJICAgICAgIF9fbmV3X3N0YXJ0LCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCisJICAgICsrX19uZXdfZmluaXNoOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBpZiAoIV9fbmV3X2ZpbmlzaCkKKwkgICAgICBfQWxsb2NfdHJhaXRzOjpkZXN0cm95KHRoaXMtPl9NX2ltcGwsIF9fbmV3X3N0YXJ0ICsgc2l6ZSgpKTsKKwkgICAgZWxzZQorCSAgICAgIHN0ZDo6X0Rlc3Ryb3koX19uZXdfc3RhcnQsIF9fbmV3X2ZpbmlzaCwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCwgX19sZW4pOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKwlzdGQ6Ol9EZXN0cm95KHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCV9NX2RlYWxsb2NhdGUodGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJICAgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkgICAgICAtIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQpOworCXRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX25ld19zdGFydDsKKwl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKKwl0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKKyAgICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgeworICAgICAgaWYgKF9fbiAhPSAwKQorCXsKKwkgIGlmIChzaXplX3R5cGUodGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJLSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCkgPj0gX19uKQorCSAgICB7CisJICAgICAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKKwkgICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKKwkgICAgICBwb2ludGVyIF9fb2xkX2ZpbmlzaCh0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCk7CisJICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pCisJCXsKKwkJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EodGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSBfX24sCisJCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJICAgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCArPSBfX247CisJCSAgX0dMSUJDWFhfTU9WRV9CQUNLV0FSRDMoX19wb3NpdGlvbi5iYXNlKCksCisJCQkJCSAgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOworCQkgIHN0ZDo6ZmlsbChfX3Bvc2l0aW9uLmJhc2UoKSwgX19wb3NpdGlvbi5iYXNlKCkgKyBfX24sCisJCQkgICAgX194X2NvcHkpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EodGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCQlfX24gLSBfX2VsZW1zX2FmdGVyLAorCQkJCQkJX194X2NvcHksCisJCQkJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CisJCSAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fcG9zaXRpb24uYmFzZSgpLCBfX29sZF9maW5pc2gsCisJCQkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkgICAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CisJCSAgc3RkOjpmaWxsKF9fcG9zaXRpb24uYmFzZSgpLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPQorCQlfTV9jaGVja19sZW4oX19uLCAidmVjdG9yOjpfTV9maWxsX2luc2VydCIpOworCSAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2JlZm9yZSA9IF9fcG9zaXRpb24gLSBiZWdpbigpOworCSAgICAgIHBvaW50ZXIgX19uZXdfc3RhcnQodGhpcy0+X01fYWxsb2NhdGUoX19sZW4pKTsKKwkgICAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CisJICAgICAgX190cnkKKwkJeworCQkgIC8vIFNlZSBfTV9pbnNlcnRfYXV4IGFib3ZlLgorCQkgIHN0ZDo6X191bmluaXRpYWxpemVkX2ZpbGxfbl9hKF9fbmV3X3N0YXJ0ICsgX19lbGVtc19iZWZvcmUsCisJCQkJCQlfX24sIF9feCwKKwkJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgX19uZXdfZmluaXNoID0gMDsKKworCQkgIF9fbmV3X2ZpbmlzaAorCQkgICAgPSBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2lmX25vZXhjZXB0X2EKKwkJICAgICh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJICAgICBfX25ld19zdGFydCwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKworCQkgIF9fbmV3X2ZpbmlzaCArPSBfX247CisKKwkJICBfX25ld19maW5pc2gKKwkJICAgID0gc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9pZl9ub2V4Y2VwdF9hCisJCSAgICAoX19wb3NpdGlvbi5iYXNlKCksIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkgICAgIF9fbmV3X2ZpbmlzaCwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJfQorCSAgICAgIF9fY2F0Y2goLi4uKQorCQl7CisJCSAgaWYgKCFfX25ld19maW5pc2gpCisJCSAgICBzdGQ6Ol9EZXN0cm95KF9fbmV3X3N0YXJ0ICsgX19lbGVtc19iZWZvcmUsCisJCQkJICBfX25ld19zdGFydCArIF9fZWxlbXNfYmVmb3JlICsgX19uLAorCQkJCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICBlbHNlCisJCSAgICBzdGQ6Ol9EZXN0cm95KF9fbmV3X3N0YXJ0LCBfX25ld19maW5pc2gsCisJCQkJICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsIF9fbGVuKTsKKwkJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkJfQorCSAgICAgIHN0ZDo6X0Rlc3Ryb3kodGhpcy0+X01faW1wbC5fTV9zdGFydCwgdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkgICAgICBfTV9kZWFsbG9jYXRlKHRoaXMtPl9NX2ltcGwuX01fc3RhcnQsCisJCQkgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJICAgIC0gdGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OworCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoID0gX19uZXdfZmluaXNoOworCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOworCSAgICB9CisJfQorICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIHZlY3RvcjxfVHAsIF9BbGxvYz46OgorICAgIF9NX2RlZmF1bHRfYXBwZW5kKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgaWYgKF9fbiAhPSAwKQorCXsKKwkgIGlmIChzaXplX3R5cGUodGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJLSB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCkgPj0gX19uKQorCSAgICB7CisJICAgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZGVmYXVsdF9uX2EodGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCSAgICAgICBfX24sIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggKz0gX19uOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPQorCQlfTV9jaGVja19sZW4oX19uLCAidmVjdG9yOjpfTV9kZWZhdWx0X2FwcGVuZCIpOworCSAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOworCSAgICAgIHBvaW50ZXIgX19uZXdfc3RhcnQodGhpcy0+X01fYWxsb2NhdGUoX19sZW4pKTsKKwkgICAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CisJICAgICAgX190cnkKKwkJeworCQkgIF9fbmV3X2ZpbmlzaAorCQkgICAgPSBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2lmX25vZXhjZXB0X2EKKwkJICAgICh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJICAgICBfX25ld19zdGFydCwgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9kZWZhdWx0X25fYShfX25ld19maW5pc2gsIF9fbiwKKwkJCQkJCSAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgX19uZXdfZmluaXNoICs9IF9fbjsKKwkJfQorCSAgICAgIF9fY2F0Y2goLi4uKQorCQl7CisJCSAgc3RkOjpfRGVzdHJveShfX25ld19zdGFydCwgX19uZXdfZmluaXNoLAorCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCwgX19sZW4pOworCQkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCQl9CisJICAgICAgc3RkOjpfRGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCSAgICBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCSAgICAgIF9NX2RlYWxsb2NhdGUodGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlCisJCQkgICAgLSB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0KTsKKwkgICAgICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CisJICAgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CisJICAgIH0KKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJvb2wKKyAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9zaHJpbmtfdG9fZml0KCkKKyAgICB7CisgICAgICBpZiAoY2FwYWNpdHkoKSA9PSBzaXplKCkpCisJcmV0dXJuIGZhbHNlOworICAgICAgcmV0dXJuIHN0ZDo6X19zaHJpbmtfdG9fZml0X2F1eDx2ZWN0b3I+OjpfU19kb19pdCgqdGhpcyk7CisgICAgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+OjoKKyAgICAgIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkJICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgIHsKKwkgICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKKwkgICAgKytfX3BvczsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgdmVjdG9yPF9UcCwgX0FsbG9jPjo6CisgICAgICBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlpZiAoX19maXJzdCAhPSBfX2xhc3QpCisJICB7CisJICAgIGNvbnN0IHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisJICAgIGlmIChzaXplX3R5cGUodGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZQorCQkJICAtIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoKSA+PSBfX24pCisJICAgICAgeworCQljb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKKwkJcG9pbnRlciBfX29sZF9maW5pc2godGhpcy0+X01faW1wbC5fTV9maW5pc2gpOworCQlpZiAoX19lbGVtc19hZnRlciA+IF9fbikKKwkJICB7CisJCSAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9tb3ZlX2EodGhpcy0+X01faW1wbC5fTV9maW5pc2ggLSBfX24sCisJCQkJCQl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkJCQkJX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICs9IF9fbjsKKwkJICAgIF9HTElCQ1hYX01PVkVfQkFDS1dBUkQzKF9fcG9zaXRpb24uYmFzZSgpLAorCQkJCQkgICAgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOworCQkgICAgc3RkOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CisJCSAgfQorCQllbHNlCisJCSAgeworCQkgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CisJCSAgICBzdGQ6OmFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOworCQkgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9fbWlkLCBfX2xhc3QsCisJCQkJCQl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCQkJCV9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCSAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOworCQkgICAgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9hKF9fcG9zaXRpb24uYmFzZSgpLAorCQkJCQkJX19vbGRfZmluaXNoLAorCQkJCQkJdGhpcy0+X01faW1wbC5fTV9maW5pc2gsCisJCQkJCQlfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKKwkJICAgIHN0ZDo6Y29weShfX2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CisJCSAgfQorCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0KKwkJICBfTV9jaGVja19sZW4oX19uLCAidmVjdG9yOjpfTV9yYW5nZV9pbnNlcnQiKTsKKwkJcG9pbnRlciBfX25ld19zdGFydCh0aGlzLT5fTV9hbGxvY2F0ZShfX2xlbikpOworCQlwb2ludGVyIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CisJCV9fdHJ5CisJCSAgeworCQkgICAgX19uZXdfZmluaXNoCisJCSAgICAgID0gc3RkOjpfX3VuaW5pdGlhbGl6ZWRfbW92ZV9pZl9ub2V4Y2VwdF9hCisJCSAgICAgICh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCBfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJICAgICAgIF9fbmV3X3N0YXJ0LCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgICAgX19uZXdfZmluaXNoCisJCSAgICAgID0gc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9fZmlyc3QsIF9fbGFzdCwKKwkJCQkJCSAgICBfX25ld19maW5pc2gsCisJCQkJCQkgICAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICAgIF9fbmV3X2ZpbmlzaAorCQkgICAgICA9IHN0ZDo6X191bmluaXRpYWxpemVkX21vdmVfaWZfbm9leGNlcHRfYQorCQkgICAgICAoX19wb3NpdGlvbi5iYXNlKCksIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoLAorCQkgICAgICAgX19uZXdfZmluaXNoLCBfTV9nZXRfVHBfYWxsb2NhdG9yKCkpOworCQkgIH0KKwkJX19jYXRjaCguLi4pCisJCSAgeworCQkgICAgc3RkOjpfRGVzdHJveShfX25ld19zdGFydCwgX19uZXdfZmluaXNoLAorCQkJCSAgX01fZ2V0X1RwX2FsbG9jYXRvcigpKTsKKwkJICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsIF9fbGVuKTsKKwkJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCQkgIH0KKwkJc3RkOjpfRGVzdHJveSh0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0LCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwKKwkJCSAgICAgIF9NX2dldF9UcF9hbGxvY2F0b3IoKSk7CisJCV9NX2RlYWxsb2NhdGUodGhpcy0+X01faW1wbC5fTV9zdGFydCwKKwkJCSAgICAgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UKKwkJCSAgICAgIC0gdGhpcy0+X01faW1wbC5fTV9zdGFydCk7CisJCXRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBfX25ld19zdGFydDsKKwkJdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CisJCXRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworCisgIC8vIHZlY3Rvcjxib29sPgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIHZlY3Rvcjxib29sLCBfQWxsb2M+OjoKKyAgICBfTV9yZWFsbG9jYXRlKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0JpdF90eXBlKiBfX3EgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX24pOworICAgICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2ggPSBfTV9jb3B5X2FsaWduZWQoYmVnaW4oKSwgZW5kKCksCisJCQkJCQlpdGVyYXRvcihfX3EsIDApKTsKKyAgICAgIHRoaXMtPl9NX2RlYWxsb2NhdGUoKTsKKyAgICAgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOworICAgICAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIF9TX253b3JkKF9fbik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgdmVjdG9yPGJvb2wsIF9BbGxvYz46OgorICAgIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KQorICAgIHsKKyAgICAgIGlmIChfX24gPT0gMCkKKwlyZXR1cm47CisgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pCisJeworCSAgc3RkOjpjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLAorCQkJICAgICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkgIHN0ZDo6ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CisJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gCisJICAgIF9NX2NoZWNrX2xlbihfX24sICJ2ZWN0b3I8Ym9vbD46Ol9NX2ZpbGxfaW5zZXJ0Iik7CisJICBfQml0X3R5cGUgKiBfX3EgPSB0aGlzLT5fTV9hbGxvY2F0ZShfX2xlbik7CisJICBpdGVyYXRvciBfX2kgPSBfTV9jb3B5X2FsaWduZWQoYmVnaW4oKSwgX19wb3NpdGlvbiwKKwkJCQkJIGl0ZXJhdG9yKF9fcSwgMCkpOworCSAgc3RkOjpmaWxsKF9faSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CisJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IHN0ZDo6Y29weShfX3Bvc2l0aW9uLCBlbmQoKSwKKwkJCQkJICAgICAgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOworCSAgdGhpcy0+X01fZGVhbGxvY2F0ZSgpOworCSAgdGhpcy0+X01faW1wbC5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIF9TX253b3JkKF9fbGVuKTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICB2ZWN0b3I8Ym9vbCwgX0FsbG9jPjo6CisgICAgICBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCAKKwkJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgeworCSAgICBzaXplX3R5cGUgX19uID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pCisJICAgICAgeworCQlzdGQ6OmNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksCisJCQkJICAgdGhpcy0+X01faW1wbC5fTV9maW5pc2gKKwkJCQkgICArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKKwkJc3RkOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CisJCXRoaXMtPl9NX2ltcGwuX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0KKwkJICBfTV9jaGVja19sZW4oX19uLCAidmVjdG9yPGJvb2w+OjpfTV9pbnNlcnRfcmFuZ2UiKTsKKwkJX0JpdF90eXBlICogX19xID0gdGhpcy0+X01fYWxsb2NhdGUoX19sZW4pOworCQlpdGVyYXRvciBfX2kgPSBfTV9jb3B5X2FsaWduZWQoYmVnaW4oKSwgX19wb3NpdGlvbiwKKwkJCQkJICAgICAgIGl0ZXJhdG9yKF9fcSwgMCkpOworCQlfX2kgPSBzdGQ6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOworCQl0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IHN0ZDo6Y29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKKwkJdGhpcy0+X01fZGVhbGxvY2F0ZSgpOworCQl0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgX1NfbndvcmQoX19sZW4pOworCQl0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKKwkgICAgICB9CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICB2ZWN0b3I8Ym9vbCwgX0FsbG9jPjo6CisgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkKKyAgICB7CisgICAgICBpZiAodGhpcy0+X01faW1wbC5fTV9maW5pc2guX01fcCAhPSB0aGlzLT5fTV9pbXBsLl9NX2VuZF9vZl9zdG9yYWdlKQorCXsKKwkgIHN0ZDo6Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCwgCisJCQkgICAgIHRoaXMtPl9NX2ltcGwuX01fZmluaXNoICsgMSk7CisJICAqX19wb3NpdGlvbiA9IF9feDsKKwkgICsrdGhpcy0+X01faW1wbC5fTV9maW5pc2g7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9CisJICAgIF9NX2NoZWNrX2xlbihzaXplX3R5cGUoMSksICJ2ZWN0b3I8Ym9vbD46Ol9NX2luc2VydF9hdXgiKTsKKwkgIF9CaXRfdHlwZSAqIF9fcSA9IHRoaXMtPl9NX2FsbG9jYXRlKF9fbGVuKTsKKwkgIGl0ZXJhdG9yIF9faSA9IF9NX2NvcHlfYWxpZ25lZChiZWdpbigpLCBfX3Bvc2l0aW9uLAorCQkJCQkgaXRlcmF0b3IoX19xLCAwKSk7CisJICAqX19pKysgPSBfX3g7CisJICB0aGlzLT5fTV9pbXBsLl9NX2ZpbmlzaCA9IHN0ZDo6Y29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKKwkgIHRoaXMtPl9NX2RlYWxsb2NhdGUoKTsKKwkgIHRoaXMtPl9NX2ltcGwuX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyBfU19ud29yZChfX2xlbik7CisJICB0aGlzLT5fTV9pbXBsLl9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKKwl9CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgYm9vbAorICAgIHZlY3Rvcjxib29sLCBfQWxsb2M+OjoKKyAgICBfTV9zaHJpbmtfdG9fZml0KCkKKyAgICB7CisgICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA8IGludChfU193b3JkX2JpdCkpCisJcmV0dXJuIGZhbHNlOworICAgICAgX190cnkKKwl7CisJICBfTV9yZWFsbG9jYXRlKHNpemUoKSk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7IHJldHVybiBmYWxzZTsgfQorICAgIH0KKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc2l6ZV90CisgICAgaGFzaDxfR0xJQkNYWF9TVERfQzo6dmVjdG9yPGJvb2wsIF9BbGxvYz4+OjoKKyAgICBvcGVyYXRvcigpKGNvbnN0IF9HTElCQ1hYX1NURF9DOjp2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX19iKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgIHNpemVfdCBfX2hhc2ggPSAwOworICAgICAgdXNpbmcgX0dMSUJDWFhfU1REX0M6Ol9TX3dvcmRfYml0OworICAgICAgdXNpbmcgX0dMSUJDWFhfU1REX0M6Ol9CaXRfdHlwZTsKKworICAgICAgY29uc3Qgc2l6ZV90IF9fd29yZHMgPSBfX2Iuc2l6ZSgpIC8gX1Nfd29yZF9iaXQ7CisgICAgICBpZiAoX193b3JkcykKKwl7CisJICBjb25zdCBzaXplX3QgX19jbGVuZ3RoID0gX193b3JkcyAqIHNpemVvZihfQml0X3R5cGUpOworCSAgX19oYXNoID0gc3RkOjpfSGFzaF9pbXBsOjpoYXNoKF9fYi5fTV9pbXBsLl9NX3N0YXJ0Ll9NX3AsIF9fY2xlbmd0aCk7CisJfQorCisgICAgICBjb25zdCBzaXplX3QgX19leHRyYWJpdHMgPSBfX2Iuc2l6ZSgpICUgX1Nfd29yZF9iaXQ7CisgICAgICBpZiAoX19leHRyYWJpdHMpCisJeworCSAgX0JpdF90eXBlIF9faGl3b3JkID0gKl9fYi5fTV9pbXBsLl9NX2ZpbmlzaC5fTV9wOworCSAgX19oaXdvcmQgJj0gfigofnN0YXRpY19jYXN0PF9CaXRfdHlwZT4oMCkpIDw8IF9fZXh0cmFiaXRzKTsKKworCSAgY29uc3Qgc2l6ZV90IF9fY2xlbmd0aAorCSAgICA9IChfX2V4dHJhYml0cyArIF9fQ0hBUl9CSVRfXyAtIDEpIC8gX19DSEFSX0JJVF9fOworCSAgaWYgKF9fd29yZHMpCisJICAgIF9faGFzaCA9IHN0ZDo6X0hhc2hfaW1wbDo6aGFzaCgmX19oaXdvcmQsIF9fY2xlbmd0aCwgX19oYXNoKTsKKwkgIGVsc2UKKwkgICAgX19oYXNoID0gc3RkOjpfSGFzaF9pbXBsOjpoYXNoKCZfX2hpd29yZCwgX19jbGVuZ3RoKTsKKwl9CisKKyAgICAgIHJldHVybiBfX2hhc2g7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8qIF9WRUNUT1JfVENDICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHNldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvYml0c2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYTZiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2JpdHNldApAQCAtMCwwICsxLDE1ODUgQEAKKy8vIDxiaXRzZXQ+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL2JpdHNldAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9CSVRTRVQKKyNkZWZpbmUgX0dMSUJDWFhfQklUU0VUIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4gICAvLyBGb3IgaW52YWxpZF9hcmd1bWVudCwgb3V0X29mX3JhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvd19lcnJvcgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxiaXRzL2N4eGFiaV9mb3JjZWQuaD4KKworI2RlZmluZSBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRCAgKF9fQ0hBUl9CSVRfXyAqIF9fU0laRU9GX0xPTkdfXykKKyNkZWZpbmUgX0dMSUJDWFhfQklUU0VUX1dPUkRTKF9fbikgXAorICAoKF9fbikgLyBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRCArIFwKKyAgICgoX19uKSAlIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEID09IDAgPyAwIDogMSkpCisKKyNkZWZpbmUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1VMTCAoX19DSEFSX0JJVF9fICogX19TSVpFT0ZfTE9OR19MT05HX18pCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUgorCisgIC8qKgorICAgKiAgQmFzZSBjbGFzcywgZ2VuZXJhbCBjYXNlLiAgSXQgaXMgYSBjbGFzcyBpbnZhcmlhbnQgdGhhdCBfTncgd2lsbCBiZQorICAgKiAgbm9ubmVnYXRpdmUuCisgICAqCisgICAqICBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgYml0c2V0LgorICAqLworICB0ZW1wbGF0ZTxzaXplX3QgX053PgorICAgIHN0cnVjdCBfQmFzZV9iaXRzZXQKKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX1dvcmRUOworCisgICAgICAvLy8gMCBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgd29yZC4KKyAgICAgIF9Xb3JkVCAJCV9NX3dbX053XTsKKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIF9CYXNlX2JpdHNldCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICA6IF9NX3coKSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0ZXhwciBfQmFzZV9iaXRzZXQodW5zaWduZWQgbG9uZyBsb25nIF9fdmFsKSBub2V4Y2VwdAorICAgICAgOiBfTV93eyBfV29yZFQoX192YWwpCisjaWYgX19TSVpFT0ZfTE9OR19MT05HX18gPiBfX1NJWkVPRl9MT05HX18KKwkgICAgICAgLCBfV29yZFQoX192YWwgPj4gX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQpCisjZW5kaWYKKyAgICAgICB9IHsgfQorI2Vsc2UKKyAgICAgIF9CYXNlX2JpdHNldCh1bnNpZ25lZCBsb25nIF9fdmFsKQorICAgICAgOiBfTV93KCkKKyAgICAgIHsgX01fd1swXSA9IF9fdmFsOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBzaXplX3QKKyAgICAgIF9TX3doaWNod29yZChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfX3BvcyAvIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2l6ZV90CisgICAgICBfU193aGljaGJ5dGUoc2l6ZV90IF9fcG9zKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gKF9fcG9zICUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQpIC8gX19DSEFSX0JJVF9fOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2l6ZV90CisgICAgICBfU193aGljaGJpdChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfX3BvcyAlIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgX1dvcmRUCisgICAgICBfU19tYXNrYml0KHNpemVfdCBfX3BvcykgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIChzdGF0aWNfY2FzdDxfV29yZFQ+KDEpKSA8PCBfU193aGljaGJpdChfX3Bvcyk7IH0KKworICAgICAgX1dvcmRUJgorICAgICAgX01fZ2V0d29yZChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV93W19TX3doaWNod29yZChfX3BvcyldOyB9CisKKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBfV29yZFQKKyAgICAgIF9NX2dldHdvcmQoc2l6ZV90IF9fcG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fd1tfU193aGljaHdvcmQoX19wb3MpXTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgY29uc3QgX1dvcmRUKgorICAgICAgX01fZ2V0ZGF0YSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV93OyB9CisjZW5kaWYKKworICAgICAgX1dvcmRUJgorICAgICAgX01faGl3b3JkKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3dbX053IC0gMV07IH0KKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIF9Xb3JkVAorICAgICAgX01faGl3b3JkKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3dbX053IC0gMV07IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fYW5kKGNvbnN0IF9CYXNlX2JpdHNldDxfTnc+JiBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX053OyBfX2krKykKKwkgIF9NX3dbX19pXSAmPSBfX3guX01fd1tfX2ldOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19vcihjb25zdCBfQmFzZV9iaXRzZXQ8X053PiYgX194KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9OdzsgX19pKyspCisJICBfTV93W19faV0gfD0gX194Ll9NX3dbX19pXTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9feG9yKGNvbnN0IF9CYXNlX2JpdHNldDxfTnc+JiBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX053OyBfX2krKykKKwkgIF9NX3dbX19pXSBePSBfX3guX01fd1tfX2ldOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19sZWZ0X3NoaWZ0KHNpemVfdCBfX3NoaWZ0KSBfR0xJQkNYWF9OT0VYQ0VQVDsKKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmlnaHRfc2hpZnQoc2l6ZV90IF9fc2hpZnQpIF9HTElCQ1hYX05PRVhDRVBUOworCisgICAgICB2b2lkCisgICAgICBfTV9kb19mbGlwKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfTnc7IF9faSsrKQorCSAgX01fd1tfX2ldID0gfl9NX3dbX19pXTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fc2V0KCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfTnc7IF9faSsrKQorCSAgX01fd1tfX2ldID0gfnN0YXRpY19jYXN0PF9Xb3JkVD4oMCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3Jlc2V0KCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgX19idWlsdGluX21lbXNldChfTV93LCAwLCBfTncgKiBzaXplb2YoX1dvcmRUKSk7IH0KKworICAgICAgYm9vbAorICAgICAgX01faXNfZXF1YWwoY29uc3QgX0Jhc2VfYml0c2V0PF9Odz4mIF9feCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfTnc7ICsrX19pKQorCSAgaWYgKF9NX3dbX19pXSAhPSBfX3guX01fd1tfX2ldKQorCSAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgICAgIGJvb2wKKyAgICAgICAgX01fYXJlX2FsbCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICAgIHsKKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9OdyAtIDE7IF9faSsrKQorCSAgICBpZiAoX01fd1tfX2ldICE9IH5zdGF0aWNfY2FzdDxfV29yZFQ+KDApKQorCSAgICAgIHJldHVybiBmYWxzZTsKKwkgIHJldHVybiBfTV9oaXdvcmQoKSA9PSAofnN0YXRpY19jYXN0PF9Xb3JkVD4oMCkKKwkJCQkgPj4gKF9OdyAqIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JECisJCQkJICAgICAtIF9OYikpOworCX0KKworICAgICAgYm9vbAorICAgICAgX01faXNfYW55KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfTnc7IF9faSsrKQorCSAgaWYgKF9NX3dbX19pXSAhPSBzdGF0aWNfY2FzdDxfV29yZFQ+KDApKQorCSAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIHNpemVfdAorICAgICAgX01fZG9fY291bnQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCXNpemVfdCBfX3Jlc3VsdCA9IDA7CisJZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX053OyBfX2krKykKKwkgIF9fcmVzdWx0ICs9IF9fYnVpbHRpbl9wb3Bjb3VudGwoX01fd1tfX2ldKTsKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICB9CisKKyAgICAgIHVuc2lnbmVkIGxvbmcKKyAgICAgIF9NX2RvX3RvX3Vsb25nKCkgY29uc3Q7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcKKyAgICAgIF9NX2RvX3RvX3VsbG9uZygpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIC8vIGZpbmQgZmlyc3QgIm9uIiBiaXQKKyAgICAgIHNpemVfdAorICAgICAgX01fZG9fZmluZF9maXJzdChzaXplX3QpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUOworCisgICAgICAvLyBmaW5kIHRoZSBuZXh0ICJvbiIgYml0IHRoYXQgZm9sbG93cyAicHJldiIKKyAgICAgIHNpemVfdAorICAgICAgX01fZG9fZmluZF9uZXh0KHNpemVfdCwgc2l6ZV90KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVDsKKyAgICB9OworCisgIC8vIERlZmluaXRpb25zIG9mIG5vbi1pbmxpbmUgZnVuY3Rpb25zIGZyb20gX0Jhc2VfYml0c2V0LgorICB0ZW1wbGF0ZTxzaXplX3QgX053PgorICAgIHZvaWQKKyAgICBfQmFzZV9iaXRzZXQ8X053Pjo6X01fZG9fbGVmdF9zaGlmdChzaXplX3QgX19zaGlmdCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3NoaWZ0ICE9IDAsIDEpKQorCXsKKwkgIGNvbnN0IHNpemVfdCBfX3dzaGlmdCA9IF9fc2hpZnQgLyBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRDsKKwkgIGNvbnN0IHNpemVfdCBfX29mZnNldCA9IF9fc2hpZnQgJSBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRDsKKworCSAgaWYgKF9fb2Zmc2V0ID09IDApCisJICAgIGZvciAoc2l6ZV90IF9fbiA9IF9OdyAtIDE7IF9fbiA+PSBfX3dzaGlmdDsgLS1fX24pCisJICAgICAgX01fd1tfX25dID0gX01fd1tfX24gLSBfX3dzaGlmdF07CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3QgX19zdWJfb2Zmc2V0ID0gKF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEIAorCQkJCQkgICAtIF9fb2Zmc2V0KTsKKwkgICAgICBmb3IgKHNpemVfdCBfX24gPSBfTncgLSAxOyBfX24gPiBfX3dzaGlmdDsgLS1fX24pCisJCV9NX3dbX19uXSA9ICgoX01fd1tfX24gLSBfX3dzaGlmdF0gPDwgX19vZmZzZXQpCisJCQkgICAgIHwgKF9NX3dbX19uIC0gX193c2hpZnQgLSAxXSA+PiBfX3N1Yl9vZmZzZXQpKTsKKwkgICAgICBfTV93W19fd3NoaWZ0XSA9IF9NX3dbMF0gPDwgX19vZmZzZXQ7CisJICAgIH0KKworCSAgc3RkOjpmaWxsKF9NX3cgKyAwLCBfTV93ICsgX193c2hpZnQsIHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9Odz4KKyAgICB2b2lkCisgICAgX0Jhc2VfYml0c2V0PF9Odz46Ol9NX2RvX3JpZ2h0X3NoaWZ0KHNpemVfdCBfX3NoaWZ0KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fc2hpZnQgIT0gMCwgMSkpCisJeworCSAgY29uc3Qgc2l6ZV90IF9fd3NoaWZ0ID0gX19zaGlmdCAvIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOworCSAgY29uc3Qgc2l6ZV90IF9fb2Zmc2V0ID0gX19zaGlmdCAlIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOworCSAgY29uc3Qgc2l6ZV90IF9fbGltaXQgPSBfTncgLSBfX3dzaGlmdCAtIDE7CisKKwkgIGlmIChfX29mZnNldCA9PSAwKQorCSAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX24gPD0gX19saW1pdDsgKytfX24pCisJICAgICAgX01fd1tfX25dID0gX01fd1tfX24gKyBfX3dzaGlmdF07CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3QgX19zdWJfb2Zmc2V0ID0gKF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JECisJCQkJCSAgIC0gX19vZmZzZXQpOworCSAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fbiA8IF9fbGltaXQ7ICsrX19uKQorCQlfTV93W19fbl0gPSAoKF9NX3dbX19uICsgX193c2hpZnRdID4+IF9fb2Zmc2V0KQorCQkJICAgICB8IChfTV93W19fbiArIF9fd3NoaWZ0ICsgMV0gPDwgX19zdWJfb2Zmc2V0KSk7CisJICAgICAgX01fd1tfX2xpbWl0XSA9IF9NX3dbX053LTFdID4+IF9fb2Zmc2V0OworCSAgICB9CisJICAKKwkgIHN0ZDo6ZmlsbChfTV93ICsgX19saW1pdCArIDEsIF9NX3cgKyBfTncsIHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9Odz4KKyAgICB1bnNpZ25lZCBsb25nCisgICAgX0Jhc2VfYml0c2V0PF9Odz46Ol9NX2RvX3RvX3Vsb25nKCkgY29uc3QKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAxOyBfX2kgPCBfTnc7ICsrX19pKQorCWlmIChfTV93W19faV0pCisJICBfX3Rocm93X292ZXJmbG93X2Vycm9yKF9fTigiX0Jhc2VfYml0c2V0OjpfTV9kb190b191bG9uZyIpKTsKKyAgICAgIHJldHVybiBfTV93WzBdOworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8c2l6ZV90IF9Odz4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcKKyAgICBfQmFzZV9iaXRzZXQ8X053Pjo6X01fZG9fdG9fdWxsb25nKCkgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBib29sIF9fZHcgPSBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSA+IHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDEgKyBfX2R3OyBfX2kgPCBfTnc7ICsrX19pKQorCWlmIChfTV93W19faV0pCisJICBfX3Rocm93X292ZXJmbG93X2Vycm9yKF9fTigiX0Jhc2VfYml0c2V0OjpfTV9kb190b191bGxvbmciKSk7CisKKyAgICAgIGlmIChfX2R3KQorCXJldHVybiBfTV93WzBdICsgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX01fd1sxXSkKKwkJCSAgPDwgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQpOworICAgICAgcmV0dXJuIF9NX3dbMF07CisgICAgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8c2l6ZV90IF9Odz4KKyAgICBzaXplX3QKKyAgICBfQmFzZV9iaXRzZXQ8X053Pjo6CisgICAgX01fZG9fZmluZF9maXJzdChzaXplX3QgX19ub3RfZm91bmQpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX053OyBfX2krKykKKwl7CisJICBfV29yZFQgX190aGlzd29yZCA9IF9NX3dbX19pXTsKKwkgIGlmIChfX3RoaXN3b3JkICE9IHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpCisJICAgIHJldHVybiAoX19pICogX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQKKwkJICAgICsgX19idWlsdGluX2N0emwoX190aGlzd29yZCkpOworCX0KKyAgICAgIC8vIG5vdCBmb3VuZCwgc28gcmV0dXJuIGFuIGluZGljYXRpb24gb2YgZmFpbHVyZS4KKyAgICAgIHJldHVybiBfX25vdF9mb3VuZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9Odz4KKyAgICBzaXplX3QKKyAgICBfQmFzZV9iaXRzZXQ8X053Pjo6CisgICAgX01fZG9fZmluZF9uZXh0KHNpemVfdCBfX3ByZXYsIHNpemVfdCBfX25vdF9mb3VuZCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7CisgICAgICAvLyBtYWtlIGJvdW5kIGluY2x1c2l2ZQorICAgICAgKytfX3ByZXY7CisKKyAgICAgIC8vIGNoZWNrIG91dCBvZiBib3VuZHMKKyAgICAgIGlmIChfX3ByZXYgPj0gX053ICogX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQpCisJcmV0dXJuIF9fbm90X2ZvdW5kOworCisgICAgICAvLyBzZWFyY2ggZmlyc3Qgd29yZAorICAgICAgc2l6ZV90IF9faSA9IF9TX3doaWNod29yZChfX3ByZXYpOworICAgICAgX1dvcmRUIF9fdGhpc3dvcmQgPSBfTV93W19faV07CisKKyAgICAgIC8vIG1hc2sgb2ZmIGJpdHMgYmVsb3cgYm91bmQKKyAgICAgIF9fdGhpc3dvcmQgJj0gKH5zdGF0aWNfY2FzdDxfV29yZFQ+KDApKSA8PCBfU193aGljaGJpdChfX3ByZXYpOworCisgICAgICBpZiAoX190aGlzd29yZCAhPSBzdGF0aWNfY2FzdDxfV29yZFQ+KDApKQorCXJldHVybiAoX19pICogX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQKKwkJKyBfX2J1aWx0aW5fY3R6bChfX3RoaXN3b3JkKSk7CisKKyAgICAgIC8vIGNoZWNrIHN1YnNlcXVlbnQgd29yZHMKKyAgICAgIF9faSsrOworICAgICAgZm9yICg7IF9faSA8IF9OdzsgX19pKyspCisJeworCSAgX190aGlzd29yZCA9IF9NX3dbX19pXTsKKwkgIGlmIChfX3RoaXN3b3JkICE9IHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpCisJICAgIHJldHVybiAoX19pICogX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQKKwkJICAgICsgX19idWlsdGluX2N0emwoX190aGlzd29yZCkpOworCX0KKyAgICAgIC8vIG5vdCBmb3VuZCwgc28gcmV0dXJuIGFuIGluZGljYXRpb24gb2YgZmFpbHVyZS4KKyAgICAgIHJldHVybiBfX25vdF9mb3VuZDsKKyAgICB9IC8vIGVuZCBfTV9kb19maW5kX25leHQKKworICAvKioKKyAgICogIEJhc2UgY2xhc3MsIHNwZWNpYWxpemF0aW9uIGZvciBhIHNpbmdsZSB3b3JkLgorICAgKgorICAgKiAgU2VlIGRvY3VtZW50YXRpb24gZm9yIGJpdHNldC4KKyAgKi8KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfQmFzZV9iaXRzZXQ8MT4KKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX1dvcmRUOworICAgICAgX1dvcmRUIF9NX3c7CisKKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBfQmFzZV9iaXRzZXQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgOiBfTV93KDApCisgICAgICB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0ZXhwciBfQmFzZV9iaXRzZXQodW5zaWduZWQgbG9uZyBsb25nIF9fdmFsKSBub2V4Y2VwdAorI2Vsc2UKKyAgICAgIF9CYXNlX2JpdHNldCh1bnNpZ25lZCBsb25nIF9fdmFsKQorI2VuZGlmCisgICAgICA6IF9NX3coX192YWwpCisgICAgICB7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBzaXplX3QKKyAgICAgIF9TX3doaWNod29yZChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfX3BvcyAvIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2l6ZV90CisgICAgICBfU193aGljaGJ5dGUoc2l6ZV90IF9fcG9zKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gKF9fcG9zICUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQpIC8gX19DSEFSX0JJVF9fOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2l6ZV90CisgICAgICBfU193aGljaGJpdChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7ICByZXR1cm4gX19wb3MgJSBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRDsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9Xb3JkVAorICAgICAgX1NfbWFza2JpdChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAoc3RhdGljX2Nhc3Q8X1dvcmRUPigxKSkgPDwgX1Nfd2hpY2hiaXQoX19wb3MpOyB9CisKKyAgICAgIF9Xb3JkVCYKKyAgICAgIF9NX2dldHdvcmQoc2l6ZV90KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdzsgfQorCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgX1dvcmRUCisgICAgICBfTV9nZXR3b3JkKHNpemVfdCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3c7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0IF9Xb3JkVCoKKyAgICAgIF9NX2dldGRhdGEoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gJl9NX3c7IH0KKyNlbmRpZgorCisgICAgICBfV29yZFQmCisgICAgICBfTV9oaXdvcmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdzsgfQorCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgX1dvcmRUCisgICAgICBfTV9oaXdvcmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdzsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19hbmQoY29uc3QgX0Jhc2VfYml0c2V0PDE+JiBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX3cgJj0gX194Ll9NX3c7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fb3IoY29uc3QgX0Jhc2VfYml0c2V0PDE+JiBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX3cgfD0gX194Ll9NX3c7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9feG9yKGNvbnN0IF9CYXNlX2JpdHNldDwxPiYgX194KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyBfTV93IF49IF9feC5fTV93OyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX2xlZnRfc2hpZnQoc2l6ZV90IF9fc2hpZnQpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX3cgPDw9IF9fc2hpZnQ7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmlnaHRfc2hpZnQoc2l6ZV90IF9fc2hpZnQpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX3cgPj49IF9fc2hpZnQ7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fZmxpcCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9NX3cgPSB+X01fdzsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19zZXQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyBfTV93ID0gfnN0YXRpY19jYXN0PF9Xb3JkVD4oMCk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmVzZXQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyBfTV93ID0gMDsgfQorCisgICAgICBib29sCisgICAgICBfTV9pc19lcXVhbChjb25zdCBfQmFzZV9iaXRzZXQ8MT4mIF9feCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3cgPT0gX194Ll9NX3c7IH0KKworICAgICAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICAgICAgYm9vbAorICAgICAgICBfTV9hcmVfYWxsKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgICAgeyByZXR1cm4gX01fdyA9PSAofnN0YXRpY19jYXN0PF9Xb3JkVD4oMCkKKwkJCSAgPj4gKF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEIC0gX05iKSk7IH0KKworICAgICAgYm9vbAorICAgICAgX01faXNfYW55KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9NX3cgIT0gMDsgfQorCisgICAgICBzaXplX3QKKyAgICAgIF9NX2RvX2NvdW50KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGwoX01fdyk7IH0KKworICAgICAgdW5zaWduZWQgbG9uZworICAgICAgX01fZG9fdG9fdWxvbmcoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fdzsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdW5zaWduZWQgbG9uZyBsb25nCisgICAgICBfTV9kb190b191bGxvbmcoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fdzsgfQorI2VuZGlmCisKKyAgICAgIHNpemVfdAorICAgICAgX01fZG9fZmluZF9maXJzdChzaXplX3QgX19ub3RfZm91bmQpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisgICAgICAgIGlmIChfTV93ICE9IDApCisgICAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9jdHpsKF9NX3cpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIF9fbm90X2ZvdW5kOworICAgICAgfQorCisgICAgICAvLyBmaW5kIHRoZSBuZXh0ICJvbiIgYml0IHRoYXQgZm9sbG93cyAicHJldiIKKyAgICAgIHNpemVfdAorICAgICAgX01fZG9fZmluZF9uZXh0KHNpemVfdCBfX3ByZXYsIHNpemVfdCBfX25vdF9mb3VuZCkgY29uc3QKKwlfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCSsrX19wcmV2OworCWlmIChfX3ByZXYgPj0gKChzaXplX3QpIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEKSkKKwkgIHJldHVybiBfX25vdF9mb3VuZDsKKworCV9Xb3JkVCBfX3ggPSBfTV93ID4+IF9fcHJldjsKKwlpZiAoX194ICE9IDApCisJICByZXR1cm4gX19idWlsdGluX2N0emwoX194KSArIF9fcHJldjsKKwllbHNlCisJICByZXR1cm4gX19ub3RfZm91bmQ7CisgICAgICB9CisgICAgfTsKKworICAvKioKKyAgICogIEJhc2UgY2xhc3MsIHNwZWNpYWxpemF0aW9uIGZvciBubyBzdG9yYWdlICh6ZXJvLWxlbmd0aCAlYml0c2V0KS4KKyAgICoKKyAgICogIFNlZSBkb2N1bWVudGF0aW9uIGZvciBiaXRzZXQuCisgICovCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX0Jhc2VfYml0c2V0PDA+CisgICAgeworICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9Xb3JkVDsKKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIF9CYXNlX2JpdHNldCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0ZXhwciBfQmFzZV9iaXRzZXQodW5zaWduZWQgbG9uZyBsb25nKSBub2V4Y2VwdAorI2Vsc2UKKyAgICAgIF9CYXNlX2JpdHNldCh1bnNpZ25lZCBsb25nKQorI2VuZGlmCisgICAgICB7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBzaXplX3QKKyAgICAgIF9TX3doaWNod29yZChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfX3BvcyAvIF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9XT1JEOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2l6ZV90CisgICAgICBfU193aGljaGJ5dGUoc2l6ZV90IF9fcG9zKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gKF9fcG9zICUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQpIC8gX19DSEFSX0JJVF9fOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2l6ZV90CisgICAgICBfU193aGljaGJpdChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7ICByZXR1cm4gX19wb3MgJSBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRDsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9Xb3JkVAorICAgICAgX1NfbWFza2JpdChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAoc3RhdGljX2Nhc3Q8X1dvcmRUPigxKSkgPDwgX1Nfd2hpY2hiaXQoX19wb3MpOyB9CisKKyAgICAgIC8vIFRoaXMgd291bGQgbm9ybWFsbHkgZ2l2ZSBhY2Nlc3MgdG8gdGhlIGRhdGEuICBUaGUgYm91bmRzLWNoZWNraW5nCisgICAgICAvLyBpbiB0aGUgYml0c2V0IGNsYXNzIHdpbGwgcHJldmVudCB0aGUgdXNlciBmcm9tIGdldHRpbmcgdGhpcyBmYXIsCisgICAgICAvLyBidXQgKDEpIGl0IG11c3Qgc3RpbGwgcmV0dXJuIGFuIGx2YWx1ZSB0byBjb21waWxlLCBhbmQgKDIpIHRoZQorICAgICAgLy8gdXNlciBtaWdodCBjYWxsIF9VbmNoZWNrZWRfc2V0IGRpcmVjdGx5LCBpbiB3aGljaCBjYXNlIHRoaXMgL25lZWRzLworICAgICAgLy8gdG8gZmFpbC4gIExldCdzIG5vdCBwZW5hbGl6ZSB6ZXJvLWxlbmd0aCB1c2VycyB1bmxlc3MgdGhleSBhY3R1YWxseQorICAgICAgLy8gbWFrZSBhbiB1bmNoZWNrZWQgY2FsbDsgYWxsIHRoZSBtZW1vcnkgdWdsaW5lc3MgaXMgdGhlcmVmb3JlCisgICAgICAvLyBsb2NhbGl6ZWQgdG8gdGhpcyBzaW5nbGUgc2hvdWxkLW5ldmVyLWdldC10aGlzLWZhciBmdW5jdGlvbi4KKyAgICAgIF9Xb3JkVCYKKyAgICAgIF9NX2dldHdvcmQoc2l6ZV90KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCV9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiX0Jhc2VfYml0c2V0OjpfTV9nZXR3b3JkIikpOyAKKwlyZXR1cm4gKm5ldyBfV29yZFQ7CisgICAgICB9CisKKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBfV29yZFQKKyAgICAgIF9NX2dldHdvcmQoc2l6ZV90IF9fcG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgX1dvcmRUCisgICAgICBfTV9oaXdvcmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19hbmQoY29uc3QgX0Jhc2VfYml0c2V0PDA+JikgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19vcihjb25zdCBfQmFzZV9iaXRzZXQ8MD4mKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3hvcihjb25zdCBfQmFzZV9iaXRzZXQ8MD4mKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX2xlZnRfc2hpZnQoc2l6ZV90KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3JpZ2h0X3NoaWZ0KHNpemVfdCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19mbGlwKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19zZXQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3Jlc2V0KCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgfQorCisgICAgICAvLyBBcmUgYWxsIGVtcHR5IGJpdHNldHMgZXF1YWwgdG8gZWFjaCBvdGhlcj8gIEFyZSB0aGV5IGVxdWFsIHRvCisgICAgICAvLyB0aGVtc2VsdmVzPyAgSG93IHRvIGNvbXBhcmUgYSB0aGluZyB3aGljaCBoYXMgbm8gc3RhdGU/ICBXaGF0IGlzCisgICAgICAvLyB0aGUgc291bmQgb2Ygb25lIHplcm8tbGVuZ3RoIGJpdHNldCBjbGFwcGluZz8KKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX2VxdWFsKGNvbnN0IF9CYXNlX2JpdHNldDwwPiYpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgICAgIGJvb2wKKyAgICAgICAgX01fYXJlX2FsbCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICAgIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgYm9vbAorICAgICAgX01faXNfYW55KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgIHNpemVfdAorICAgICAgX01fZG9fY291bnQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICB1bnNpZ25lZCBsb25nCisgICAgICBfTV9kb190b191bG9uZygpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAwOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcKKyAgICAgIF9NX2RvX3RvX3VsbG9uZygpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiAwOyB9CisjZW5kaWYKKworICAgICAgLy8gTm9ybWFsbHkgIm5vdCBmb3VuZCIgaXMgdGhlIHNpemUsIGJ1dCB0aGF0IGNvdWxkIGFsc28gYmUKKyAgICAgIC8vIG1pc2ludGVycHJldGVkIGFzIGFuIGluZGV4IGluIHRoaXMgY29ybmVyIGNhc2UuICBPaCB3ZWxsLgorICAgICAgc2l6ZV90CisgICAgICBfTV9kb19maW5kX2ZpcnN0KHNpemVfdCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIDA7IH0KKworICAgICAgc2l6ZV90CisgICAgICBfTV9kb19maW5kX25leHQoc2l6ZV90LCBzaXplX3QpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAwOyB9CisgICAgfTsKKworCisgIC8vIEhlbHBlciBjbGFzcyB0byB6ZXJvIG91dCB0aGUgdW51c2VkIGhpZ2gtb3JkZXIgYml0cyBpbiB0aGUgaGlnaGVzdCB3b3JkLgorICB0ZW1wbGF0ZTxzaXplX3QgX0V4dHJhYml0cz4KKyAgICBzdHJ1Y3QgX1Nhbml0aXplCisgICAgeworICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9Xb3JkVDsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2RvX3Nhbml0aXplKF9Xb3JkVCYgX192YWwpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IF9fdmFsICY9IH4oKH5zdGF0aWNfY2FzdDxfV29yZFQ+KDApKSA8PCBfRXh0cmFiaXRzKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfU2FuaXRpemU8MD4KKyAgICB7CisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX1dvcmRUOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfZG9fc2FuaXRpemUoX1dvcmRUKSBfR0xJQkNYWF9OT0VYQ0VQVCB7IH0gCisgICAgfTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8c2l6ZV90IF9OYiwgYm9vbCA9IF9OYiA8IF9HTElCQ1hYX0JJVFNFVF9CSVRTX1BFUl9VTEw+CisgICAgc3RydWN0IF9TYW5pdGl6ZV92YWwKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxvbmcgbG9uZworICAgICAgX1NfZG9fc2FuaXRpemVfdmFsKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkKKyAgICAgIHsgcmV0dXJuIF9fdmFsOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIHN0cnVjdCBfU2FuaXRpemVfdmFsPF9OYiwgdHJ1ZT4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGxvbmcgbG9uZworICAgICAgX1NfZG9fc2FuaXRpemVfdmFsKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkKKyAgICAgIHsgcmV0dXJuIF9fdmFsICYgfigofnN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCkpIDw8IF9OYik7IH0KKyAgICB9OworI2VuZGlmCisKKyAgLyoqCisgICAqICBUaGUgJWJpdHNldCBjbGFzcyByZXByZXNlbnRzIGEgQGUgZml4ZWQtc2l6ZSBzZXF1ZW5jZSBvZiBiaXRzLgorICAgKgorICAgKiAgQGluZ3JvdXAgY29udGFpbmVycworICAgKgorICAgKiAgKE5vdGUgdGhhdCAlYml0c2V0IGRvZXMgQGUgbm90IG1lZXQgdGhlIGZvcm1hbCByZXF1aXJlbWVudHMgb2YgYQorICAgKiAgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4uICBNYWlubHksIGl0IGxhY2tzIGl0ZXJhdG9ycy4pCisgICAqCisgICAqICBUaGUgdGVtcGxhdGUgYXJndW1lbnQsIEBhIE5iLCBtYXkgYmUgYW55IG5vbi1uZWdhdGl2ZSBudW1iZXIsCisgICAqICBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYml0cyAoZS5nLiwgIjAiLCAiMTIiLCAiMTAyNCoxMDI0IikuCisgICAqCisgICAqICBJbiB0aGUgZ2VuZXJhbCB1bm9wdGltaXplZCBjYXNlLCBzdG9yYWdlIGlzIGFsbG9jYXRlZCBpbiB3b3JkLXNpemVkCisgICAqICBibG9ja3MuICBMZXQgQiBiZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSB3b3JkLCB0aGVuIChOYisoQi0xKSkvQgorICAgKiAgd29yZHMgd2lsbCBiZSB1c2VkIGZvciBzdG9yYWdlLiAgQiAtIE5iJUIgYml0cyBhcmUgdW51c2VkLiAgKFRoZXkgYXJlCisgICAqICB0aGUgaGlnaC1vcmRlciBiaXRzIGluIHRoZSBoaWdoZXN0IHdvcmQuKSAgSXQgaXMgYSBjbGFzcyBpbnZhcmlhbnQKKyAgICogIHRoYXQgdGhvc2UgdW51c2VkIGJpdHMgYXJlIGFsd2F5cyB6ZXJvLgorICAgKgorICAgKiAgSWYgeW91IHRoaW5rIG9mICViaXRzZXQgYXMgPGVtPmEgc2ltcGxlIGFycmF5IG9mIGJpdHM8L2VtPiwgYmUKKyAgICogIGF3YXJlIHRoYXQgeW91ciBtZW50YWwgcGljdHVyZSBpcyByZXZlcnNlZDogYSAlYml0c2V0IGJlaGF2ZXMKKyAgICogIHRoZSBzYW1lIHdheSBhcyBiaXRzIGluIGludGVnZXJzIGRvLCB3aXRoIHRoZSBiaXQgYXQgaW5kZXggMCBpbgorICAgKiAgdGhlIDxlbT5sZWFzdCBzaWduaWZpY2FudCAvIHJpZ2h0LWhhbmQ8L2VtPiBwb3NpdGlvbiwgYW5kIHRoZSBiaXQgYXQKKyAgICogIGluZGV4IE5iLTEgaW4gdGhlIDxlbT5tb3N0IHNpZ25pZmljYW50IC8gbGVmdC1oYW5kPC9lbT4gcG9zaXRpb24uCisgICAqICBUaHVzLCB1bmxpa2Ugb3RoZXIgY29udGFpbmVycywgYSAlYml0c2V0J3MgaW5kZXggPGVtPmNvdW50cyBmcm9tCisgICAqICByaWdodCB0byBsZWZ0PC9lbT4sIHRvIHB1dCBpdCB2ZXJ5IGxvb3NlbHkuCisgICAqCisgICAqICBUaGlzIGJlaGF2aW9yIGlzIHByZXNlcnZlZCB3aGVuIHRyYW5zbGF0aW5nIHRvIGFuZCBmcm9tIHN0cmluZ3MuICBGb3IKKyAgICogIGV4YW1wbGUsIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBwcm9iYWJseSBwcmludHMKKyAgICogIDxlbT5iKCZhcG9zO2EmYXBvczspIGlzIDAwMDExMDAwMDE8L2VtPiBvbiBhIG1vZGVybiBBU0NJSSBzeXN0ZW0uCisgICAqCisgICAqICBAY29kZQorICAgKiAgICAgI2luY2x1ZGUgPGJpdHNldD4KKyAgICogICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KKyAgICogICAgICNpbmNsdWRlIDxzc3RyZWFtPgorICAgKgorICAgKiAgICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAgICoKKyAgICogICAgIGludCBtYWluKCkKKyAgICogICAgIHsKKyAgICogICAgICAgICBsb25nICAgICAgICAgYSA9ICdhJzsKKyAgICogICAgICAgICBiaXRzZXQ8MTA+ICAgYihhKTsKKyAgICoKKyAgICogICAgICAgICBjb3V0IDw8ICJiKCdhJykgaXMgIiA8PCBiIDw8IGVuZGw7CisgICAqCisgICAqICAgICAgICAgb3N0cmluZ3N0cmVhbSBzOworICAgKiAgICAgICAgIHMgPDwgYjsKKyAgICogICAgICAgICBzdHJpbmcgIHN0ciA9IHMuc3RyKCk7CisgICAqICAgICAgICAgY291dCA8PCAiaW5kZXggMyBpbiB0aGUgc3RyaW5nIGlzICIgPDwgc3RyWzNdIDw8ICIgYnV0XG4iCisgICAqICAgICAgICAgICAgICA8PCAiaW5kZXggMyBpbiB0aGUgYml0c2V0IGlzICIgPDwgYlszXSA8PCBlbmRsOworICAgKiAgICAgfQorICAgKiAgQGVuZGNvZGUKKyAgICoKKyAgICogIEFsc28gc2VlOgorICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQxMmNoMzNzMDIuaHRtbAorICAgKiAgZm9yIGEgZGVzY3JpcHRpb24gb2YgZXh0ZW5zaW9ucy4KKyAgICoKKyAgICogIE1vc3Qgb2YgdGhlIGFjdHVhbCBjb2RlIGlzbid0IGNvbnRhaW5lZCBpbiAlYml0c2V0PD4gaXRzZWxmLCBidXQgaW4gdGhlCisgICAqICBiYXNlIGNsYXNzIF9CYXNlX2JpdHNldC4gIFRoZSBiYXNlIGNsYXNzIHdvcmtzIHdpdGggd2hvbGUgd29yZHMsIG5vdCB3aXRoCisgICAqICBpbmRpdmlkdWFsIGJpdHMuICBUaGlzIGFsbG93cyB1cyB0byBzcGVjaWFsaXplIF9CYXNlX2JpdHNldCBmb3IgdGhlCisgICAqICBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSAlYml0c2V0IGlzIG9ubHkgYSBzaW5nbGUgd29yZC4KKyAgICoKKyAgICogIEV4dHJhIGNvbmZ1c2lvbiBjYW4gcmVzdWx0IGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBzdG9yYWdlIGZvcgorICAgKiAgX0Jhc2VfYml0c2V0IEBlIGlzIGEgcmVndWxhciBhcnJheSwgYW5kIGlzIGluZGV4ZWQgYXMgc3VjaC4gIFRoaXMgaXMKKyAgICogIGNhcmVmdWxseSBlbmNhcHN1bGF0ZWQuCisgICovCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgY2xhc3MgYml0c2V0CisgICAgOiBwcml2YXRlIF9CYXNlX2JpdHNldDxfR0xJQkNYWF9CSVRTRVRfV09SRFMoX05iKT4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX0Jhc2VfYml0c2V0PF9HTElCQ1hYX0JJVFNFVF9XT1JEUyhfTmIpPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfV29yZFQ7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3Nhbml0aXplKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgCisJdHlwZWRlZiBfU2FuaXRpemU8X05iICUgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQ+IF9fc2FuaXRpemVfdHlwZTsKKwlfX3Nhbml0aXplX3R5cGU6Ol9TX2RvX3Nhbml0aXplKHRoaXMtPl9NX2hpd29yZCgpKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBmcmllbmQgc3RydWN0IGhhc2g7CisjZW5kaWYKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogIFRoaXMgZW5jYXBzdWxhdGVzIHRoZSBjb25jZXB0IG9mIGEgc2luZ2xlIGJpdC4gIEFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAqICBjbGFzcyBpcyBhIHByb3h5IGZvciBhbiBhY3R1YWwgYml0OyB0aGlzIHdheSB0aGUgaW5kaXZpZHVhbCBiaXQKKyAgICAgICAqICBvcGVyYXRpb25zIGFyZSBkb25lIGFzIGZhc3RlciB3b3JkLXNpemUgYml0d2lzZSBpbnN0cnVjdGlvbnMuCisgICAgICAgKgorICAgICAgICogIE1vc3QgdXNlcnMgd2lsbCBuZXZlciBuZWVkIHRvIHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5OyBjb252ZXJzaW9ucworICAgICAgICogIHRvIGFuZCBmcm9tIGJvb2wgYXJlIGF1dG9tYXRpYyBhbmQgc2hvdWxkIGJlIHRyYW5zcGFyZW50LiAgT3ZlcmxvYWRlZAorICAgICAgICogIG9wZXJhdG9ycyBoZWxwIHRvIHByZXNlcnZlIHRoZSBpbGx1c2lvbi4KKyAgICAgICAqCisgICAgICAgKiAgKE9uIGEgdHlwaWNhbCBzeXN0ZW0sIHRoaXMgPGVtPmJpdCAlcmVmZXJlbmNlPC9lbT4gaXMgNjQKKyAgICAgICAqICB0aW1lcyB0aGUgc2l6ZSBvZiBhbiBhY3R1YWwgYml0LiAgSGEuKQorICAgICAgICovCisgICAgICBjbGFzcyByZWZlcmVuY2UKKyAgICAgIHsKKwlmcmllbmQgY2xhc3MgYml0c2V0OworCisJX1dvcmRUKglfTV93cDsKKwlzaXplX3QgCV9NX2Jwb3M7CisJCisJLy8gbGVmdCB1bmRlZmluZWQKKwlyZWZlcmVuY2UoKTsKKwkKKyAgICAgIHB1YmxpYzoKKwlyZWZlcmVuY2UoYml0c2V0JiBfX2IsIHNpemVfdCBfX3BvcykgX0dMSUJDWFhfTk9FWENFUFQKKwl7CisJICBfTV93cCA9ICZfX2IuX01fZ2V0d29yZChfX3Bvcyk7CisJICBfTV9icG9zID0gX0Jhc2U6Ol9TX3doaWNoYml0KF9fcG9zKTsKKwl9CisKKwl+cmVmZXJlbmNlKCkgX0dMSUJDWFhfTk9FWENFUFQKKwl7IH0KKworCS8vIEZvciBiW2ldID0gX194OworCXJlZmVyZW5jZSYKKwlvcGVyYXRvcj0oYm9vbCBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisJeworCSAgaWYgKF9feCkKKwkgICAgKl9NX3dwIHw9IF9CYXNlOjpfU19tYXNrYml0KF9NX2Jwb3MpOworCSAgZWxzZQorCSAgICAqX01fd3AgJj0gfl9CYXNlOjpfU19tYXNrYml0KF9NX2Jwb3MpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworCS8vIEZvciBiW2ldID0gYltfX2pdOworCXJlZmVyZW5jZSYKKwlvcGVyYXRvcj0oY29uc3QgcmVmZXJlbmNlJiBfX2opIF9HTElCQ1hYX05PRVhDRVBUCisJeworCSAgaWYgKCgqKF9fai5fTV93cCkgJiBfQmFzZTo6X1NfbWFza2JpdChfX2ouX01fYnBvcykpKQorCSAgICAqX01fd3AgfD0gX0Jhc2U6Ol9TX21hc2tiaXQoX01fYnBvcyk7CisJICBlbHNlCisJICAgICpfTV93cCAmPSB+X0Jhc2U6Ol9TX21hc2tiaXQoX01fYnBvcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisJLy8gRmxpcHMgdGhlIGJpdAorCWJvb2wKKwlvcGVyYXRvcn4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorCXsgcmV0dXJuICgqKF9NX3dwKSAmIF9CYXNlOjpfU19tYXNrYml0KF9NX2Jwb3MpKSA9PSAwOyB9CisKKwkvLyBGb3IgX194ID0gYltpXTsKKwlvcGVyYXRvciBib29sKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKwl7IHJldHVybiAoKihfTV93cCkgJiBfQmFzZTo6X1NfbWFza2JpdChfTV9icG9zKSkgIT0gMDsgfQorCisJLy8gRm9yIGJbaV0uZmxpcCgpOworCXJlZmVyZW5jZSYKKwlmbGlwKCkgX0dMSUJDWFhfTk9FWENFUFQKKwl7CisJICAqX01fd3AgXj0gX0Jhc2U6Ol9TX21hc2tiaXQoX01fYnBvcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorICAgICAgfTsKKyAgICAgIGZyaWVuZCBjbGFzcyByZWZlcmVuY2U7CisKKyAgICAgIC8vIDIzLjMuNS4xIGNvbnN0cnVjdG9yczoKKyAgICAgIC8vLyBBbGwgYml0cyBzZXQgdG8gemVyby4KKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBiaXRzZXQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyB9CisKKyAgICAgIC8vLyBJbml0aWFsIGJpdHMgYml0d2lzZS1jb3BpZWQgZnJvbSBhIHNpbmdsZSB3b3JkIChvdGhlcnMgc2V0IHRvIHplcm8pLgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0ZXhwciBiaXRzZXQodW5zaWduZWQgbG9uZyBsb25nIF9fdmFsKSBub2V4Y2VwdAorICAgICAgOiBfQmFzZShfU2FuaXRpemVfdmFsPF9OYj46Ol9TX2RvX3Nhbml0aXplX3ZhbChfX3ZhbCkpIHsgfQorI2Vsc2UKKyAgICAgIGJpdHNldCh1bnNpZ25lZCBsb25nIF9fdmFsKQorICAgICAgOiBfQmFzZShfX3ZhbCkKKyAgICAgIHsgX01fZG9fc2FuaXRpemUoKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIFVzZSBhIHN1YnNldCBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgQSBzdHJpbmcgb2YgQGEgMCBhbmQgQGEgMSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAYSBfX3MgdG8gdXNlOworICAgICAgICogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHplcm8uCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJpZ2dlciB0aGUgc2l6ZSBvZiBAYSBfX3MuCisgICAgICAgKiAgQHRocm93ICBzdGQ6OmludmFsaWRfYXJndW1lbnQgIElmIGEgY2hhcmFjdGVyIGFwcGVhcnMgaW4gdGhlIHN0cmluZworICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpcyBuZWl0aGVyIEBhIDAgbm9yIEBhIDEuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorCWV4cGxpY2l0CisJYml0c2V0KGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zLAorCSAgICAgICBzaXplX3QgX19wb3NpdGlvbiA9IDApCisJOiBfQmFzZSgpCisJeworCSAgaWYgKF9fcG9zaXRpb24gPiBfX3Muc2l6ZSgpKQorCSAgICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImJpdHNldDo6Yml0c2V0IGluaXRpYWwgcG9zaXRpb24gIgorCQkJCSAgICAgIm5vdCB2YWxpZCIpKTsKKwkgIF9NX2NvcHlfZnJvbV9zdHJpbmcoX19zLCBfX3Bvc2l0aW9uLAorCQkJICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zLAorCQkJICAgICAgX0NoYXJUKCcwJyksIF9DaGFyVCgnMScpKTsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogIFVzZSBhIHN1YnNldCBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgQSBzdHJpbmcgb2YgQGEgMCBhbmQgQGEgMSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgSW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBAYSBfX3MgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSAgX19uICAgIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAgICogIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBJZiBAYSBfX3Bvc2l0aW9uIGlzIGJpZ2dlciB0aGUgc2l6ZQorICAgICAgICogIG9mIEBhIF9fcy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6aW52YWxpZF9hcmd1bWVudCAgSWYgYSBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgc3RyaW5nCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIG5laXRoZXIgQGEgMCBub3IgQGEgMS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJYml0c2V0KGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zLAorCSAgICAgICBzaXplX3QgX19wb3NpdGlvbiwgc2l6ZV90IF9fbikKKwk6IF9CYXNlKCkKKwl7CisJICBpZiAoX19wb3NpdGlvbiA+IF9fcy5zaXplKCkpCisJICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYml0c2V0OjpiaXRzZXQgaW5pdGlhbCBwb3NpdGlvbiAiCisJCQkJICAgICAibm90IHZhbGlkIikpOworCSAgX01fY29weV9mcm9tX3N0cmluZyhfX3MsIF9fcG9zaXRpb24sIF9fbiwgX0NoYXJUKCcwJyksIF9DaGFyVCgnMScpKTsKKwl9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDM5Ni4gd2hhdCBhcmUgY2hhcmFjdGVycyB6ZXJvIGFuZCBvbmUuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKwliaXRzZXQoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MsCisJICAgICAgIHNpemVfdCBfX3Bvc2l0aW9uLCBzaXplX3QgX19uLAorCSAgICAgICBfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkKKwk6IF9CYXNlKCkKKwl7CisJICBpZiAoX19wb3NpdGlvbiA+IF9fcy5zaXplKCkpCisJICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYml0c2V0OjpiaXRzZXQgaW5pdGlhbCBwb3NpdGlvbiAiCisJCQkJICAgICAibm90IHZhbGlkIikpOworCSAgX01fY29weV9mcm9tX3N0cmluZyhfX3MsIF9fcG9zaXRpb24sIF9fbiwgX196ZXJvLCBfX29uZSk7CisJfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQ29uc3RydWN0IGZyb20gYSBjaGFyYWN0ZXIgJWFycmF5LgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIEFuICVhcnJheSBvZiBjaGFyYWN0ZXJzIEBhIHplcm8gYW5kIEBhIG9uZS4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSAgX196ZXJvIFRoZSBjaGFyYWN0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgMC4KKyAgICAgICAqICBAcGFyYW0gIF9fb25lICBUaGUgY2hhcmFjdGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIDEuCisgICAgICAgKiAgQHRocm93ICBzdGQ6OmludmFsaWRfYXJndW1lbnQgSWYgYSBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgc3RyaW5nCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbmVpdGhlciBAYSBfX3plcm8gbm9yIEBhIF9fb25lLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIGJpdHNldChjb25zdCBfQ2hhclQqIF9fc3RyLAorCSAgICAgICB0eXBlbmFtZSBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQ+OjpzaXplX3R5cGUgX19uCisJICAgICAgID0gc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJUPjo6bnBvcywKKwkgICAgICAgX0NoYXJUIF9femVybyA9IF9DaGFyVCgnMCcpLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkKKyAgICAgICAgOiBfQmFzZSgpCisgICAgICAgIHsKKwkgIGlmICghX19zdHIpCisJICAgIF9fdGhyb3dfbG9naWNfZXJyb3IoX19OKCJiaXRzZXQ6OmJpdHNldChjb25zdCBfQ2hhclQqLCAuLi4pIikpOworCisJICBpZiAoX19uID09IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVD46Om5wb3MpCisJICAgIF9fbiA9IHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fc3RyKTsKKwkgIF9NX2NvcHlfZnJvbV9wdHI8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4+KF9fc3RyLCBfX24sIDAsCisJCQkJCQkJICAgICBfX24sIF9femVybywKKwkJCQkJCQkgICAgIF9fb25lKTsKKwl9CisjZW5kaWYKKworICAgICAgLy8gMjMuMy41LjIgYml0c2V0IG9wZXJhdGlvbnM6CisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBPcGVyYXRpb25zIG9uIGJpdHNldHMuCisgICAgICAgKiAgQHBhcmFtICBfX3JocyAgQSBzYW1lLXNpemVkIGJpdHNldC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlc2Ugc2hvdWxkIGJlIHNlbGYtZXhwbGFuYXRvcnkuCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3ImPShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01fZG9fYW5kKF9fcmhzKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3J8PShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01fZG9fb3IoX19yaHMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvcl49KGNvbnN0IGJpdHNldDxfTmI+JiBfX3JocykgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwl0aGlzLT5fTV9kb194b3IoX19yaHMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgT3BlcmF0aW9ucyBvbiBiaXRzZXRzLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuCisgICAgICAgKgorICAgICAgICogIFRoZXNlIHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LgorICAgICAgICovCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yPDw9KHNpemVfdCBfX3Bvc2l0aW9uKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcG9zaXRpb24gPCBfTmIsIDEpKQorCSAgeworCSAgICB0aGlzLT5fTV9kb19sZWZ0X3NoaWZ0KF9fcG9zaXRpb24pOworCSAgICB0aGlzLT5fTV9kb19zYW5pdGl6ZSgpOworCSAgfQorCWVsc2UKKwkgIHRoaXMtPl9NX2RvX3Jlc2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yPj49KHNpemVfdCBfX3Bvc2l0aW9uKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcG9zaXRpb24gPCBfTmIsIDEpKQorCSAgeworCSAgICB0aGlzLT5fTV9kb19yaWdodF9zaGlmdChfX3Bvc2l0aW9uKTsKKwkgICAgdGhpcy0+X01fZG9fc2FuaXRpemUoKTsKKwkgIH0KKwllbHNlCisJICB0aGlzLT5fTV9kb19yZXNldCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgVGhlc2UgdmVyc2lvbnMgb2Ygc2luZ2xlLWJpdCBzZXQsIHJlc2V0LCBmbGlwLCBhbmQgdGVzdCBhcmUKKyAgICAgICAqICBleHRlbnNpb25zIGZyb20gdGhlIFNHSSB2ZXJzaW9uLiAgVGhleSBkbyBubyByYW5nZSBjaGVja2luZy4KKyAgICAgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgX1VuY2hlY2tlZF9zZXQoc2l6ZV90IF9fcG9zKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCXRoaXMtPl9NX2dldHdvcmQoX19wb3MpIHw9IF9CYXNlOjpfU19tYXNrYml0KF9fcG9zKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgX1VuY2hlY2tlZF9zZXQoc2l6ZV90IF9fcG9zLCBpbnQgX192YWwpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJaWYgKF9fdmFsKQorCSAgdGhpcy0+X01fZ2V0d29yZChfX3BvcykgfD0gX0Jhc2U6Ol9TX21hc2tiaXQoX19wb3MpOworCWVsc2UKKwkgIHRoaXMtPl9NX2dldHdvcmQoX19wb3MpICY9IH5fQmFzZTo6X1NfbWFza2JpdChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIF9VbmNoZWNrZWRfcmVzZXQoc2l6ZV90IF9fcG9zKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCXRoaXMtPl9NX2dldHdvcmQoX19wb3MpICY9IH5fQmFzZTo6X1NfbWFza2JpdChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIF9VbmNoZWNrZWRfZmxpcChzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01fZ2V0d29yZChfX3BvcykgXj0gX0Jhc2U6Ol9TX21hc2tiaXQoX19wb3MpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICAgIF9VbmNoZWNrZWRfdGVzdChzaXplX3QgX19wb3MpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAoKHRoaXMtPl9NX2dldHdvcmQoX19wb3MpICYgX0Jhc2U6Ol9TX21hc2tiaXQoX19wb3MpKQorCQkhPSBzdGF0aWNfY2FzdDxfV29yZFQ+KDApKTsgfQorICAgICAgLy9AfQorICAgICAgCisgICAgICAvLyBTZXQsIHJlc2V0LCBhbmQgZmxpcC4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBTZXRzIGV2ZXJ5IGJpdCB0byB0cnVlLgorICAgICAgICovCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHNldCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01fZG9fc2V0KCk7CisJdGhpcy0+X01fZG9fc2FuaXRpemUoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBTZXRzIGEgZ2l2ZW4gYml0IHRvIGEgcGFydGljdWxhciB2YWx1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIFRoZSBpbmRleCBvZiB0aGUgYml0LgorICAgICAgICogIEBwYXJhbSAgX192YWwgIEVpdGhlciB0cnVlIG9yIGZhbHNlLCBkZWZhdWx0cyB0byB0cnVlLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIHBvcyBpcyBiaWdnZXIgdGhlIHNpemUgb2YgdGhlICVzZXQuCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgc2V0KHNpemVfdCBfX3Bvc2l0aW9uLCBib29sIF9fdmFsID0gdHJ1ZSkKKyAgICAgIHsKKwlpZiAoX19wb3NpdGlvbiA+PSBfTmIpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImJpdHNldDo6c2V0IikpOworCXJldHVybiBfVW5jaGVja2VkX3NldChfX3Bvc2l0aW9uLCBfX3ZhbCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBTZXRzIGV2ZXJ5IGJpdCB0byBmYWxzZS4KKyAgICAgICAqLworICAgICAgYml0c2V0PF9OYj4mCisgICAgICByZXNldCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01fZG9fcmVzZXQoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBTZXRzIGEgZ2l2ZW4gYml0IHRvIGZhbHNlLgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgVGhlIGluZGV4IG9mIHRoZSBiaXQuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJpZ2dlciB0aGUgc2l6ZSBvZiB0aGUgJXNldC4KKyAgICAgICAqCisgICAgICAgKiAgU2FtZSBhcyB3cml0aW5nIEBjIHNldChwb3MsZmFsc2UpLgorICAgICAgICovCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHJlc2V0KHNpemVfdCBfX3Bvc2l0aW9uKQorICAgICAgeworCWlmIChfX3Bvc2l0aW9uID49IF9OYikKKwkgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYml0c2V0OjpyZXNldCIpKTsKKwlyZXR1cm4gX1VuY2hlY2tlZF9yZXNldChfX3Bvc2l0aW9uKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRvZ2dsZXMgZXZlcnkgYml0IHRvIGl0cyBvcHBvc2l0ZSB2YWx1ZS4KKyAgICAgICAqLworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBmbGlwKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwl0aGlzLT5fTV9kb19mbGlwKCk7CisJdGhpcy0+X01fZG9fc2FuaXRpemUoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUb2dnbGVzIGEgZ2l2ZW4gYml0IHRvIGl0cyBvcHBvc2l0ZSB2YWx1ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zaXRpb24gIFRoZSBpbmRleCBvZiB0aGUgYml0LgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIHBvcyBpcyBiaWdnZXIgdGhlIHNpemUgb2YgdGhlICVzZXQuCisgICAgICAgKi8KKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgZmxpcChzaXplX3QgX19wb3NpdGlvbikKKyAgICAgIHsKKwlpZiAoX19wb3NpdGlvbiA+PSBfTmIpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImJpdHNldDo6ZmxpcCIpKTsKKwlyZXR1cm4gX1VuY2hlY2tlZF9mbGlwKF9fcG9zaXRpb24pOworICAgICAgfQorICAgICAgCisgICAgICAvLy8gU2VlIHRoZSBuby1hcmd1bWVudCBmbGlwKCkuCisgICAgICBiaXRzZXQ8X05iPgorICAgICAgb3BlcmF0b3J+KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KCp0aGlzKS5mbGlwKCk7IH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcnJheS1pbmRleGluZyBzdXBwb3J0LgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgSW5kZXggaW50byB0aGUgJWJpdHNldC4KKyAgICAgICAqICBAcmV0dXJuIEEgYm9vbCBmb3IgYSA8ZW0+Y29uc3QgJWJpdHNldDwvZW0+LiAgRm9yIG5vbi1jb25zdAorICAgICAgICogICAgICAgICAgIGJpdHNldHMsIGFuIGluc3RhbmNlIG9mIHRoZSByZWZlcmVuY2UgcHJveHkgY2xhc3MuCisgICAgICAgKiAgQG5vdGUgIFRoZXNlIG9wZXJhdG9ycyBkbyBubyByYW5nZSBjaGVja2luZyBhbmQgdGhyb3cgbm8gZXhjZXB0aW9ucywKKyAgICAgICAqICAgICAgICAgYXMgcmVxdWlyZWQgYnkgRFIgMTEgdG8gdGhlIHN0YW5kYXJkLgorICAgICAgICoKKyAgICAgICAqICBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTIE5vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGFscmVhZHkKKyAgICAgICAqICByZXNvbHZlcyBEUiAxMSAoaXRlbXMgMSBhbmQgMiksIGJ1dCBkb2VzIG5vdCBkbyB0aGUgcmFuZ2UtY2hlY2tpbmcKKyAgICAgICAqICByZXF1aXJlZCBieSB0aGF0IERSJ3MgcmVzb2x1dGlvbi4gIC1wbWUKKyAgICAgICAqICBUaGUgRFIgaGFzIHNpbmNlIGJlZW4gY2hhbmdlZDogIHJhbmdlLWNoZWNraW5nIGlzIGEgcHJlY29uZGl0aW9uCisgICAgICAgKiAgKHVzZXJzJyByZXNwb25zaWJpbGl0eSksIGFuZCB0aGVzZSBmdW5jdGlvbnMgbXVzdCBub3QgdGhyb3cuICAtcG1lCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19wb3NpdGlvbikKKyAgICAgIHsgcmV0dXJuIHJlZmVyZW5jZSgqdGhpcywgX19wb3NpdGlvbik7IH0KKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcG9zaXRpb24pIGNvbnN0CisgICAgICB7IHJldHVybiBfVW5jaGVja2VkX3Rlc3QoX19wb3NpdGlvbik7IH0KKyAgICAgIC8vQH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFJldHVybnMgYSBudW1lcmljYWwgaW50ZXJwcmV0YXRpb24gb2YgdGhlICViaXRzZXQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGludGVncmFsIGVxdWl2YWxlbnQgb2YgdGhlIGJpdHMuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om92ZXJmbG93X2Vycm9yICBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgYml0cyB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50ZWQgaW4gYW4gQGMgdW5zaWduZWQgQGMgbG9uZy4KKyAgICAgICAqLworICAgICAgdW5zaWduZWQgbG9uZworICAgICAgdG9fdWxvbmcoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fdG9fdWxvbmcoKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdW5zaWduZWQgbG9uZyBsb25nCisgICAgICB0b191bGxvbmcoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fdG9fdWxsb25nKCk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgUmV0dXJucyBhIGNoYXJhY3RlciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgJWJpdHNldC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgc3RyaW5nIGVxdWl2YWxlbnQgb2YgdGhlIGJpdHMuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHRoZSBiaXRzOiAgZGVjcmVhc2luZyBjaGFyYWN0ZXIgcG9zaXRpb25zCisgICAgICAgKiAgY29ycmVzcG9uZCB0byBpbmNyZWFzaW5nIGJpdCBwb3NpdGlvbnMgKHNlZSB0aGUgbWFpbiBjbGFzcyBub3RlcyBmb3IKKyAgICAgICAqICBhbiBleGFtcGxlKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisJdG9fc3RyaW5nKCkgY29uc3QKKwl7CisJICBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19yZXN1bHQ7CisJICBfTV9jb3B5X3RvX3N0cmluZyhfX3Jlc3VsdCwgX0NoYXJUKCcwJyksIF9DaGFyVCgnMScpKTsKKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDM5Ni4gd2hhdCBhcmUgY2hhcmFjdGVycyB6ZXJvIGFuZCBvbmUuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKwlzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KKwl0b19zdHJpbmcoX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpIGNvbnN0CisJeworCSAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fcmVzdWx0OworCSAgX01fY29weV90b19zdHJpbmcoX19yZXN1bHQsIF9femVybywgX19vbmUpOworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM0LiBiaXRzZXQ6OnRvX3N0cmluZygpIGhhcmQgdG8gdXNlLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorCXN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+CisJdG9fc3RyaW5nKCkgY29uc3QKKwl7IHJldHVybiB0b19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4oKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA4NTMuIHRvX3N0cmluZyBuZWVkcyB1cGRhdGluZyB3aXRoIHplcm8gYW5kIG9uZS4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKwlzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorCXRvX3N0cmluZyhfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkgY29uc3QKKwl7IHJldHVybiB0b19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLAorCSAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4oX196ZXJvLCBfX29uZSk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgorCXN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorCXRvX3N0cmluZygpIGNvbnN0CisJeworCSAgcmV0dXJuIHRvX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+CisJdG9fc3RyaW5nKF9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKSBjb25zdAorCXsKKwkgIHJldHVybiB0b19zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPihfX3plcm8sIF9fb25lKTsKKwl9CisKKyAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgICAgIHRvX3N0cmluZygpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRvX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LAorCSAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPigpOworICAgICAgfQorCisgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgICAgICB0b19zdHJpbmcoY2hhciBfX3plcm8sIGNoYXIgX19vbmUgPSAnMScpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRvX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LAorCSAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPihfX3plcm8sIF9fb25lKTsKKyAgICAgIH0KKworICAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbnMuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fY29weV9mcm9tX3B0cihjb25zdCBfQ2hhclQqLCBzaXplX3QsIHNpemVfdCwgc2l6ZV90LAorCQkJIF9DaGFyVCwgX0NoYXJUKTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJdm9pZAorCV9NX2NvcHlfZnJvbV9zdHJpbmcoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULAorCQkJICAgIF9UcmFpdHMsIF9BbGxvYz4mIF9fcywgc2l6ZV90IF9fcG9zLCBzaXplX3QgX19uLAorCQkJICAgIF9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSkKKwl7IF9NX2NvcHlfZnJvbV9wdHI8X0NoYXJULCBfVHJhaXRzPihfX3MuZGF0YSgpLCBfX3Muc2l6ZSgpLCBfX3BvcywgX19uLAorCQkJCQkgICAgX196ZXJvLCBfX29uZSk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJdm9pZAorICAgICAgICBfTV9jb3B5X3RvX3N0cmluZyhzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mLAorCQkJICBfQ2hhclQsIF9DaGFyVCkgY29uc3Q7CisKKyAgICAgIC8vIE5COiBCYWNrd2FyZCBjb21wYXQuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKwl2b2lkCisJX01fY29weV9mcm9tX3N0cmluZyhjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsCisJCQkgICAgX1RyYWl0cywgX0FsbG9jPiYgX19zLCBzaXplX3QgX19wb3MsIHNpemVfdCBfX24pCisJeyBfTV9jb3B5X2Zyb21fc3RyaW5nKF9fcywgX19wb3MsIF9fbiwgX0NoYXJUKCcwJyksIF9DaGFyVCgnMScpKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKwl2b2lkCisgICAgICAgIF9NX2NvcHlfdG9fc3RyaW5nKHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cyxfQWxsb2M+JiBfX3MpIGNvbnN0CisJeyBfTV9jb3B5X3RvX3N0cmluZyhfX3MsIF9DaGFyVCgnMCcpLCBfQ2hhclQoJzEnKSk7IH0KKworICAgICAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIHdoaWNoIGFyZSBzZXQuCisgICAgICBzaXplX3QKKyAgICAgIGNvdW50KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2RvX2NvdW50KCk7IH0KKworICAgICAgLy8vIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzLgorICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIHNpemVfdAorICAgICAgc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTmI7IH0KKworICAgICAgLy9AeworICAgICAgLy8vIFRoZXNlIGNvbXBhcmlzb25zIGZvciBlcXVhbGl0eS9pbmVxdWFsaXR5IGFyZSwgd2VsbCwgQGUgYml0d2lzZS4KKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faXNfZXF1YWwoX19yaHMpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gIXRoaXMtPl9NX2lzX2VxdWFsKF9fcmhzKTsgfQorICAgICAgLy9AfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgVGVzdHMgdGhlIHZhbHVlIG9mIGEgYml0LgorICAgICAgICogIEBwYXJhbSAgX19wb3NpdGlvbiAgVGhlIGluZGV4IG9mIGEgYml0LgorICAgICAgICogIEByZXR1cm4gIFRoZSB2YWx1ZSBhdCBAYSBwb3MuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgcG9zIGlzIGJpZ2dlciB0aGUgc2l6ZSBvZiB0aGUgJXNldC4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgdGVzdChzaXplX3QgX19wb3NpdGlvbikgY29uc3QKKyAgICAgIHsKKwlpZiAoX19wb3NpdGlvbiA+PSBfTmIpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImJpdHNldDo6dGVzdCIpKTsKKwlyZXR1cm4gX1VuY2hlY2tlZF90ZXN0KF9fcG9zaXRpb24pOworICAgICAgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiA2OTMuIHN0ZDo6Yml0c2V0OjphbGwoKSBtaXNzaW5nLgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRlc3RzIHdoZXRoZXIgYWxsIHRoZSBiaXRzIGFyZSBvbi4KKyAgICAgICAqICBAcmV0dXJuICBUcnVlIGlmIGFsbCB0aGUgYml0cyBhcmUgc2V0LgorICAgICAgICovCisgICAgICBib29sCisgICAgICBhbGwoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+dGVtcGxhdGUgX01fYXJlX2FsbDxfTmI+KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRlc3RzIHdoZXRoZXIgYW55IG9mIHRoZSBiaXRzIGFyZSBvbi4KKyAgICAgICAqICBAcmV0dXJuICBUcnVlIGlmIGF0IGxlYXN0IG9uZSBiaXQgaXMgc2V0LgorICAgICAgICovCisgICAgICBib29sCisgICAgICBhbnkoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faXNfYW55KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRlc3RzIHdoZXRoZXIgYW55IG9mIHRoZSBiaXRzIGFyZSBvbi4KKyAgICAgICAqICBAcmV0dXJuICBUcnVlIGlmIG5vbmUgb2YgdGhlIGJpdHMgYXJlIHNldC4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgbm9uZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAhdGhpcy0+X01faXNfYW55KCk7IH0KKworICAgICAgLy9AeworICAgICAgLy8vIFNlbGYtZXhwbGFuYXRvcnkuCisgICAgICBiaXRzZXQ8X05iPgorICAgICAgb3BlcmF0b3I8PChzaXplX3QgX19wb3NpdGlvbikgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KCp0aGlzKSA8PD0gX19wb3NpdGlvbjsgfQorCisgICAgICBiaXRzZXQ8X05iPgorICAgICAgb3BlcmF0b3I+PihzaXplX3QgX19wb3NpdGlvbikgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KCp0aGlzKSA+Pj0gX19wb3NpdGlvbjsgfQorICAgICAgLy9AfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgIm9uIiBiaXQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBiaXQgc2V0LCBvciBzaXplKCkgaWYgbm90IGZvdW5kLgorICAgICAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICAgICAqICBAc2EgIF9GaW5kX25leHQKKyAgICAgICAqLworICAgICAgc2l6ZV90CisgICAgICBfRmluZF9maXJzdCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9kb19maW5kX2ZpcnN0KF9OYik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgIm9uIiBiaXQgYWZ0ZXIgcHJldi4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgaW5kZXggb2YgdGhlIG5leHQgYml0IHNldCwgb3Igc2l6ZSgpIGlmIG5vdCBmb3VuZC4KKyAgICAgICAqICBAcGFyYW0gIF9fcHJldiAgV2hlcmUgdG8gc3RhcnQgc2VhcmNoaW5nLgorICAgICAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICAgICAqICBAc2EgIF9GaW5kX2ZpcnN0CisgICAgICAgKi8KKyAgICAgIHNpemVfdAorICAgICAgX0ZpbmRfbmV4dChzaXplX3QgX19wcmV2KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fZmluZF9uZXh0KF9fcHJldiwgX05iKTsgfQorICAgIH07CisKKyAgLy8gRGVmaW5pdGlvbnMgb2Ygbm9uLWlubGluZSBtZW1iZXIgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgICAgIHZvaWQKKyAgICAgIGJpdHNldDxfTmI+OjoKKyAgICAgIF9NX2NvcHlfZnJvbV9wdHIoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdCBfX2xlbiwKKwkJICAgICAgIHNpemVfdCBfX3Bvcywgc2l6ZV90IF9fbiwgX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lKQorICAgICAgeworCXJlc2V0KCk7CisJY29uc3Qgc2l6ZV90IF9fbmJpdHMgPSBzdGQ6Om1pbihfTmIsIHN0ZDo6bWluKF9fbiwgc2l6ZV90KF9fbGVuIC0gX19wb3MpKSk7CisJZm9yIChzaXplX3QgX19pID0gX19uYml0czsgX19pID4gMDsgLS1fX2kpCisJICB7CisJICAgIGNvbnN0IF9DaGFyVCBfX2MgPSBfX3NbX19wb3MgKyBfX25iaXRzIC0gX19pXTsKKwkgICAgaWYgKF9UcmFpdHM6OmVxKF9fYywgX196ZXJvKSkKKwkgICAgICA7CisJICAgIGVsc2UgaWYgKF9UcmFpdHM6OmVxKF9fYywgX19vbmUpKQorCSAgICAgIF9VbmNoZWNrZWRfc2V0KF9faSAtIDEpOworCSAgICBlbHNlCisJICAgICAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KF9fTigiYml0c2V0OjpfTV9jb3B5X2Zyb21fcHRyIikpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisgICAgICB2b2lkCisgICAgICBiaXRzZXQ8X05iPjo6CisgICAgICBfTV9jb3B5X3RvX3N0cmluZyhzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcywKKwkJCV9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSkgY29uc3QKKyAgICAgIHsKKwlfX3MuYXNzaWduKF9OYiwgX196ZXJvKTsKKwlmb3IgKHNpemVfdCBfX2kgPSBfTmI7IF9faSA+IDA7IC0tX19pKQorCSAgaWYgKF9VbmNoZWNrZWRfdGVzdChfX2kgLSAxKSkKKwkgICAgX1RyYWl0czo6YXNzaWduKF9fc1tfTmIgLSBfX2ldLCBfX29uZSk7CisgICAgICB9CisKKyAgLy8gMjMuMy41LjMgYml0c2V0IG9wZXJhdGlvbnM6CisgIC8vQHsKKyAgLyoqCisgICAqICBAYnJpZWYgIEdsb2JhbCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gYml0c2V0cy4KKyAgICogIEBwYXJhbSAgX194ICBBIGJpdHNldC4KKyAgICogIEBwYXJhbSAgX195ICBBIGJpdHNldCBvZiB0aGUgc2FtZSBzaXplIGFzIEBhIF9feC4KKyAgICogIEByZXR1cm4gIEEgbmV3IGJpdHNldC4KKyAgICoKKyAgICogIFRoZXNlIHNob3VsZCBiZSBzZWxmLWV4cGxhbmF0b3J5LgorICAqLworICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIGlubGluZSBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yJihjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIGJpdHNldDxfTmI+IF9fcmVzdWx0KF9feCk7CisgICAgICBfX3Jlc3VsdCAmPSBfX3k7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgaW5saW5lIGJpdHNldDxfTmI+CisgICAgb3BlcmF0b3J8KGNvbnN0IGJpdHNldDxfTmI+JiBfX3gsIGNvbnN0IGJpdHNldDxfTmI+JiBfX3kpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeworICAgICAgYml0c2V0PF9OYj4gX19yZXN1bHQoX194KTsKKyAgICAgIF9fcmVzdWx0IHw9IF9feTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgdGVtcGxhdGUgPHNpemVfdCBfTmI+CisgICAgaW5saW5lIGJpdHNldDxfTmI+CisgICAgb3BlcmF0b3JeKGNvbnN0IGJpdHNldDxfTmI+JiBfX3gsIGNvbnN0IGJpdHNldDxfTmI+JiBfX3kpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeworICAgICAgYml0c2V0PF9OYj4gX19yZXN1bHQoX194KTsKKyAgICAgIF9fcmVzdWx0IF49IF9feTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisgIC8vQH0KKworICAvL0B7CisgIC8qKgorICAgKiAgQGJyaWVmIEdsb2JhbCBJL08gb3BlcmF0b3JzIGZvciBiaXRzZXRzLgorICAgKgorICAgKiAgRGlyZWN0IEkvTyBiZXR3ZWVuIHN0cmVhbXMgYW5kIGJpdHNldHMgaXMgc3VwcG9ydGVkLiAgT3V0cHV0IGlzCisgICAqICBzdHJhaWdodGZvcndhcmQuICBJbnB1dCB3aWxsIHNraXAgd2hpdGVzcGFjZSwgb25seSBhY2NlcHQgQGEgMCBhbmQgQGEgMQorICAgKiAgY2hhcmFjdGVycywgYW5kIHdpbGwgb25seSBleHRyYWN0IGFzIG1hbnkgZGlnaXRzIGFzIHRoZSAlYml0c2V0IHdpbGwKKyAgICogIGhvbGQuCisgICovCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgc2l6ZV90IF9OYj4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBiaXRzZXQ8X05iPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzPiBfX3RtcDsKKyAgICAgIF9fdG1wLnJlc2VydmUoX05iKTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzAzLiBCaXRzZXQgaW5wdXQgb3BlcmF0b3IgdW5kZXJzcGVjaWZpZWQKKyAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2lzLndpZGVuKCcwJyk7CisgICAgICBjb25zdCBjaGFyX3R5cGUgX19vbmUgPSBfX2lzLndpZGVuKCcxJyk7CisKKyAgICAgIHR5cGVuYW1lIF9faW9zX2Jhc2U6Omlvc3RhdGUgX19zdGF0ZSA9IF9faW9zX2Jhc2U6Omdvb2RiaXQ7CisgICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fc2VudHJ5KF9faXMpOworICAgICAgaWYgKF9fc2VudHJ5KQorCXsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBmb3IgKHNpemVfdCBfX2kgPSBfTmI7IF9faSA+IDA7IC0tX19pKQorCQl7CisJCSAgc3RhdGljIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CisJCSAgCisJCSAgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19jMSA9IF9faXMucmRidWYoKS0+c2J1bXBjKCk7CisJCSAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYzEsIF9fZW9mKSkKKwkJICAgIHsKKwkJICAgICAgX19zdGF0ZSB8PSBfX2lvc19iYXNlOjplb2ZiaXQ7CisJCSAgICAgIGJyZWFrOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgY29uc3QgY2hhcl90eXBlIF9fYzIgPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jMSk7CisJCSAgICAgIGlmIChfVHJhaXRzOjplcShfX2MyLCBfX3plcm8pKQorCQkJX190bXAucHVzaF9iYWNrKF9femVybyk7CisJCSAgICAgIGVsc2UgaWYgKF9UcmFpdHM6OmVxKF9fYzIsIF9fb25lKSkKKwkJCV9fdG1wLnB1c2hfYmFjayhfX29uZSk7CisJCSAgICAgIGVsc2UgaWYgKF9UcmFpdHM6OgorCQkJICAgICAgIGVxX2ludF90eXBlKF9faXMucmRidWYoKS0+c3B1dGJhY2tjKF9fYzIpLAorCQkJCQkgICBfX2VvZikpCisJCQl7CisJCQkgIF9fc3RhdGUgfD0gX19pb3NfYmFzZTo6ZmFpbGJpdDsKKwkJCSAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgX19pcy5fTV9zZXRzdGF0ZShfX2lvc19iYXNlOjpiYWRiaXQpOwkJCisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IF9faXMuX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKworICAgICAgaWYgKF9fdG1wLmVtcHR5KCkgJiYgX05iKQorCV9fc3RhdGUgfD0gX19pb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgIGVsc2UKKwlfX3guX01fY29weV9mcm9tX3N0cmluZyhfX3RtcCwgc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgX05iLAorCQkJCV9femVybywgX19vbmUpOworICAgICAgaWYgKF9fc3RhdGUpCisJX19pcy5zZXRzdGF0ZShfX3N0YXRlKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBzaXplX3QgX05iPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGJpdHNldDxfTmI+JiBfX3gpCisgICAgeworICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzPiBfX3RtcDsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzk2LiB3aGF0IGFyZSBjaGFyYWN0ZXJzIHplcm8gYW5kIG9uZS4KKyAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3QgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fb3MuZ2V0bG9jKCkpOworICAgICAgX194Ll9NX2NvcHlfdG9fc3RyaW5nKF9fdG1wLCBfX2N0LndpZGVuKCcwJyksIF9fY3Qud2lkZW4oJzEnKSk7CisgICAgICByZXR1cm4gX19vcyA8PCBfX3RtcDsKKyAgICB9CisgIC8vQH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjdW5kZWYgX0dMSUJDWFhfQklUU0VUX1dPUkRTCisjdW5kZWYgX0dMSUJDWFhfQklUU0VUX0JJVFNfUEVSX1dPUkQKKyN1bmRlZiBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfVUxMCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKKyNpbmNsdWRlIDxiaXRzL2Z1bmN0aW9uYWxfaGFzaC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gRFIgMTE4Mi4KKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgYml0c2V0LgorICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIHN0cnVjdCBoYXNoPF9HTElCQ1hYX1NURF9DOjpiaXRzZXQ8X05iPj4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIF9HTElCQ1hYX1NURF9DOjpiaXRzZXQ8X05iPj4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0dMSUJDWFhfU1REX0M6OmJpdHNldDxfTmI+JiBfX2IpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7CisJY29uc3Qgc2l6ZV90IF9fY2xlbmd0aCA9IChfTmIgKyBfX0NIQVJfQklUX18gLSAxKSAvIF9fQ0hBUl9CSVRfXzsKKwlyZXR1cm4gc3RkOjpfSGFzaF9pbXBsOjpoYXNoKF9fYi5fTV9nZXRkYXRhKCksIF9fY2xlbmd0aCk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8X0dMSUJDWFhfU1REX0M6OmJpdHNldDwwPj4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIF9HTElCQ1hYX1NURF9DOjpiaXRzZXQ8MD4+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9HTElCQ1hYX1NURF9DOjpiaXRzZXQ8MD4mKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gMDsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEMrKzExCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBpbmNsdWRlIDxkZWJ1Zy9iaXRzZXQ+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1BST0ZJTEUKKyMgaW5jbHVkZSA8cHJvZmlsZS9iaXRzZXQ+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX0JJVFNFVCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jYXNzZXJ0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jYXNzZXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODVjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2Nhc3NlcnQKQEAgLTAsMCArMSw0MyBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjYXNzZXJ0CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgYXNzZXJ0LmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAxOS4yICBBc3NlcnRpb25zCisvLworCisvLyBObyBpbmNsdWRlIGd1YXJkcyBvbiB0aGlzIGhlYWRlci4uLgorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2NvbXBsZXggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2Njb21wbGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTg5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2Njb21wbGV4CkBAIC0wLDAgKzEsNDAgQEAKKy8vIDxjY29tcGxleD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY2NvbXBsZXgKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmbmRlZiBfR0xJQkNYWF9DQ09NUExFWAorI2RlZmluZSBfR0xJQkNYWF9DQ09NUExFWCAxCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGNvbXBsZXg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jY3R5cGUgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NjdHlwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmY4ODNmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jY3R5cGUKQEAgLTAsMCArMSw5NCBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NjdHlwZQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIGN0eXBlLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiA8Y2N5dHBlPgorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NDVFlQRQorI2RlZmluZSBfR0xJQkNYWF9DQ1RZUEUgMQorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDxjdHlwZS5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGlzYWxudW0KKyN1bmRlZiBpc2FscGhhCisjdW5kZWYgaXNjbnRybAorI3VuZGVmIGlzZGlnaXQKKyN1bmRlZiBpc2dyYXBoCisjdW5kZWYgaXNsb3dlcgorI3VuZGVmIGlzcHJpbnQKKyN1bmRlZiBpc3B1bmN0CisjdW5kZWYgaXNzcGFjZQorI3VuZGVmIGlzdXBwZXIKKyN1bmRlZiBpc3hkaWdpdAorI3VuZGVmIHRvbG93ZXIKKyN1bmRlZiB0b3VwcGVyCisKK25hbWVzcGFjZSBzdGQKK3sKKyAgdXNpbmcgOjppc2FsbnVtOworICB1c2luZyA6OmlzYWxwaGE7CisgIHVzaW5nIDo6aXNjbnRybDsKKyAgdXNpbmcgOjppc2RpZ2l0OworICB1c2luZyA6OmlzZ3JhcGg7CisgIHVzaW5nIDo6aXNsb3dlcjsKKyAgdXNpbmcgOjppc3ByaW50OworICB1c2luZyA6OmlzcHVuY3Q7CisgIHVzaW5nIDo6aXNzcGFjZTsKKyAgdXNpbmcgOjppc3VwcGVyOworICB1c2luZyA6OmlzeGRpZ2l0OworICB1c2luZyA6OnRvbG93ZXI7CisgIHVzaW5nIDo6dG91cHBlcjsKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9DVFlQRV9UUjEKKworI3VuZGVmIGlzYmxhbmsKKworbmFtZXNwYWNlIHN0ZAoreworICB1c2luZyA6OmlzYmxhbms7Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9DOTlfQ1RZUEVfVFIxCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2Vycm5vIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jZXJybm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1Y2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2Vycm5vCkBAIC0wLDAgKzEsNTEgQEAKKy8vIFRoZSAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGNlcnJubworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIGVycm5vLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAxOS4zICBFcnJvciBudW1iZXJzCisvLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NFUlJOTworI2RlZmluZSBfR0xJQkNYWF9DRVJSTk8gMQorCisvLyBBZGhlcmUgdG8gc2VjdGlvbiAxNy40LjEuMiBjbGF1c2UgNSBvZiBJU08gMTQ4ODI6MTk5OAorI2lmbmRlZiBlcnJubworI2RlZmluZSBlcnJubyBlcnJubworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jZmVudiBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2ZlbnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5NmMxNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2ZlbnYKQEAgLTAsMCArMSw4NCBAQAorLy8gPGNmZW52PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9jZmVudgorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9DRkVOVgorI2RlZmluZSBfR0xJQkNYWF9DRkVOViAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisjaWYgX0dMSUJDWFhfSEFWRV9GRU5WX0gKKyMgaW5jbHVkZSA8ZmVudi5oPgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X0ZFTlZfVFIxCisKKyN1bmRlZiBmZWNsZWFyZXhjZXB0CisjdW5kZWYgZmVnZXRleGNlcHRmbGFnCisjdW5kZWYgZmVyYWlzZWV4Y2VwdAorI3VuZGVmIGZlc2V0ZXhjZXB0ZmxhZworI3VuZGVmIGZldGVzdGV4Y2VwdAorI3VuZGVmIGZlZ2V0cm91bmQKKyN1bmRlZiBmZXNldHJvdW5kCisjdW5kZWYgZmVnZXRlbnYKKyN1bmRlZiBmZWhvbGRleGNlcHQKKyN1bmRlZiBmZXNldGVudgorI3VuZGVmIGZldXBkYXRlZW52CisKK25hbWVzcGFjZSBzdGQKK3sKKyAgLy8gdHlwZXMKKyAgdXNpbmcgOjpmZW52X3Q7CisgIHVzaW5nIDo6ZmV4Y2VwdF90OworCisgIC8vIGZ1bmN0aW9ucworICB1c2luZyA6OmZlY2xlYXJleGNlcHQ7CisgIHVzaW5nIDo6ZmVnZXRleGNlcHRmbGFnOworICB1c2luZyA6OmZlcmFpc2VleGNlcHQ7CisgIHVzaW5nIDo6ZmVzZXRleGNlcHRmbGFnOworICB1c2luZyA6OmZldGVzdGV4Y2VwdDsKKworICB1c2luZyA6OmZlZ2V0cm91bmQ7CisgIHVzaW5nIDo6ZmVzZXRyb3VuZDsKKworICB1c2luZyA6OmZlZ2V0ZW52OworICB1c2luZyA6OmZlaG9sZGV4Y2VwdDsKKyAgdXNpbmcgOjpmZXNldGVudjsKKyAgdXNpbmcgOjpmZXVwZGF0ZWVudjsKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gX0dMSUJDWFhfVVNFX0M5OV9GRU5WX1RSMQorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NGRU5WCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NmbG9hdCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2Zsb2F0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYjA2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NmbG9hdApAQCAtMCwwICsxLDU1IEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY2Zsb2F0CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgZmxvYXQuaCwKKyAqICBhbmQgaXRzIGNvbnRlbnRzIGFyZSAobW9zdGx5KSB0aGUgc2FtZSBhcyB0aGF0IGhlYWRlciwgYnV0IGFyZSBhbGwKKyAqICBjb250YWluZWQgaW4gdGhlIG5hbWVzcGFjZSBAYyBzdGQgKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKKyAqICBhcyBtYWNyb3MgaW4gQykuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDE4LjIuMiAgSW1wbGVtZW50YXRpb24gcHJvcGVydGllczogQyBsaWJyYXJ5CisvLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NGTE9BVAorI2RlZmluZSBfR0xJQkNYWF9DRkxPQVQgMQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorIyAgaWZuZGVmIERFQ0lNQUxfRElHCisjICAgIGRlZmluZSBERUNJTUFMX0RJRyBfX0RFQ0lNQUxfRElHX18KKyMgIGVuZGlmCisjICBpZm5kZWYgRkxUX0VWQUxfTUVUSE9ECisjICAgIGRlZmluZSBGTFRfRVZBTF9NRVRIT0QgX19GTFRfRVZBTF9NRVRIT0RfXworIyAgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2hyb25vIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jaHJvbm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ5ZGY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2hyb25vCkBAIC0wLDAgKzEsNzg5IEBACisvLyA8Y2hyb25vPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9jaHJvbm8KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQ0hST05PCisjZGVmaW5lIF9HTElCQ1hYX0NIUk9OTyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxyYXRpbz4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8Y3RpbWU+CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CisgIC8qKgorICAgKiBAZGVmZ3JvdXAgY2hyb25vIFRpbWUKKyAgICogQGluZ3JvdXAgdXRpbGl0aWVzCisgICAqCisgICAqIENsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGltZS4KKyAgICogQHsKKyAgICovCisKKyAgLyoqIEBuYW1lc3BhY2Ugc3RkOjpjaHJvbm8KKyAgICogIEBicmllZiBJU08gQysrIDIwMTEgZW50aXRpZXMgc3ViLW5hbWVzcGFjZSBmb3IgdGltZSBhbmQgZGF0ZS4KKyAgICovCisgIG5hbWVzcGFjZSBjaHJvbm8KKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZCA9IHJhdGlvPDE+PgorICAgICAgc3RydWN0IGR1cmF0aW9uOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyID0gdHlwZW5hbWUgX0Nsb2NrOjpkdXJhdGlvbj4KKyAgICAgIHN0cnVjdCB0aW1lX3BvaW50OworCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gMjAuMTEuNC4zIHNwZWNpYWxpemF0aW9uIG9mIGNvbW1vbl90eXBlIChmb3IgZHVyYXRpb24sIHNmaW5hZS1mcmllbmRseSkKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVCwgdHlwZW5hbWUgX1BlcmlvZDEsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgIHN0cnVjdCBfX2R1cmF0aW9uX2NvbW1vbl90eXBlX3dyYXBwZXIKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19zdGF0aWNfZ2NkPF9QZXJpb2QxOjpudW0sIF9QZXJpb2QyOjpudW0+IF9fZ2NkX251bTsKKyAgICAgIHR5cGVkZWYgX19zdGF0aWNfZ2NkPF9QZXJpb2QxOjpkZW4sIF9QZXJpb2QyOjpkZW4+IF9fZ2NkX2RlbjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NUOjp0eXBlIF9fY3I7CisgICAgICB0eXBlZGVmIHJhdGlvPF9fZ2NkX251bTo6dmFsdWUsCisgICAgICAgIChfUGVyaW9kMTo6ZGVuIC8gX19nY2RfZGVuOjp2YWx1ZSkgKiBfUGVyaW9kMjo6ZGVuPiBfX3I7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfX3N1Y2Nlc3NfdHlwZTxjaHJvbm86OmR1cmF0aW9uPF9fY3IsIF9fcj4+IHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGVyaW9kMSwgdHlwZW5hbWUgX1BlcmlvZDI+CisgICAgc3RydWN0IF9fZHVyYXRpb25fY29tbW9uX3R5cGVfd3JhcHBlcjxfX2ZhaWx1cmVfdHlwZSwgX1BlcmlvZDEsIF9QZXJpb2QyPgorICAgIHsgdHlwZWRlZiBfX2ZhaWx1cmVfdHlwZSB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgIHN0cnVjdCBjb21tb25fdHlwZTxjaHJvbm86OmR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4sCisgICAgICAgICAgICAgY2hyb25vOjpkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+PgorICAgIDogcHVibGljIF9fZHVyYXRpb25fY29tbW9uX3R5cGVfd3JhcHBlcjx0eXBlbmFtZSBfX21lbWJlcl90eXBlX3dyYXBwZXI8CisgICAgICAgICAgICAgY29tbW9uX3R5cGU8X1JlcDEsIF9SZXAyPj46OnR5cGUsIF9QZXJpb2QxLCBfUGVyaW9kMj46OnR5cGUKKyAgICB7IH07CisKKyAgLy8gMjAuMTEuNC4zIHNwZWNpYWxpemF0aW9uIG9mIGNvbW1vbl90eXBlIChmb3IgdGltZV9wb2ludCwgc2ZpbmFlLWZyaWVuZGx5KQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NULCB0eXBlbmFtZSBfQ2xvY2s+CisgICAgc3RydWN0IF9fdGltZXBvaW50X2NvbW1vbl90eXBlX3dyYXBwZXIKKyAgICB7CisgICAgICB0eXBlZGVmIF9fc3VjY2Vzc190eXBlPGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIHR5cGVuYW1lIF9DVDo6dHlwZT4+CisgICAgICAgIHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2s+CisgICAgc3RydWN0IF9fdGltZXBvaW50X2NvbW1vbl90eXBlX3dyYXBwZXI8X19mYWlsdXJlX3R5cGUsIF9DbG9jaz4KKyAgICB7IHR5cGVkZWYgX19mYWlsdXJlX3R5cGUgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbjEsIHR5cGVuYW1lIF9EdXJhdGlvbjI+CisgICAgc3RydWN0IGNvbW1vbl90eXBlPGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjE+LAorICAgICAgICAgICAgIGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbjI+PgorICAgIDogcHVibGljIF9fdGltZXBvaW50X2NvbW1vbl90eXBlX3dyYXBwZXI8dHlwZW5hbWUgX19tZW1iZXJfdHlwZV93cmFwcGVyPAorICAgICAgICAgICAgIGNvbW1vbl90eXBlPF9EdXJhdGlvbjEsIF9EdXJhdGlvbjI+Pjo6dHlwZSwgX0Nsb2NrPjo6dHlwZQorICAgIHsgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgbmFtZXNwYWNlIGNocm9ubworICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICAvLyBQcmltYXJ5IHRlbXBsYXRlIGZvciBkdXJhdGlvbl9jYXN0IGltcGwuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvRHVyLCB0eXBlbmFtZSBfQ0YsIHR5cGVuYW1lIF9DUiwKKwkgICAgIGJvb2wgX051bUlzT25lID0gZmFsc2UsIGJvb2wgX0RlbklzT25lID0gZmFsc2U+CisgICAgICBzdHJ1Y3QgX19kdXJhdGlvbl9jYXN0X2ltcGwKKyAgICAgIHsKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorCSAgc3RhdGljIGNvbnN0ZXhwciBfVG9EdXIKKwkgIF9fY2FzdChjb25zdCBkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19kKQorCSAgeworCSAgICB0eXBlZGVmIHR5cGVuYW1lIF9Ub0R1cjo6cmVwCQkJX190b19yZXA7CisJICAgIHJldHVybiBfVG9EdXIoc3RhdGljX2Nhc3Q8X190b19yZXA+KHN0YXRpY19jYXN0PF9DUj4oX19kLmNvdW50KCkpCisJICAgICAgKiBzdGF0aWNfY2FzdDxfQ1I+KF9DRjo6bnVtKQorCSAgICAgIC8gc3RhdGljX2Nhc3Q8X0NSPihfQ0Y6OmRlbikpKTsKKwkgIH0KKyAgICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVG9EdXIsIHR5cGVuYW1lIF9DRiwgdHlwZW5hbWUgX0NSPgorICAgICAgc3RydWN0IF9fZHVyYXRpb25fY2FzdF9pbXBsPF9Ub0R1ciwgX0NGLCBfQ1IsIHRydWUsIHRydWU+CisgICAgICB7CisJdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKwkgIHN0YXRpYyBjb25zdGV4cHIgX1RvRHVyCisJICBfX2Nhc3QoY29uc3QgZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fZCkKKwkgIHsKKwkgICAgdHlwZWRlZiB0eXBlbmFtZSBfVG9EdXI6OnJlcAkJCV9fdG9fcmVwOworCSAgICByZXR1cm4gX1RvRHVyKHN0YXRpY19jYXN0PF9fdG9fcmVwPihfX2QuY291bnQoKSkpOworCSAgfQorICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub0R1ciwgdHlwZW5hbWUgX0NGLCB0eXBlbmFtZSBfQ1I+CisgICAgICBzdHJ1Y3QgX19kdXJhdGlvbl9jYXN0X2ltcGw8X1RvRHVyLCBfQ0YsIF9DUiwgdHJ1ZSwgZmFsc2U+CisgICAgICB7CisJdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKwkgIHN0YXRpYyBjb25zdGV4cHIgX1RvRHVyCisJICBfX2Nhc3QoY29uc3QgZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fZCkKKwkgIHsKKwkgICAgdHlwZWRlZiB0eXBlbmFtZSBfVG9EdXI6OnJlcAkJCV9fdG9fcmVwOworCSAgICByZXR1cm4gX1RvRHVyKHN0YXRpY19jYXN0PF9fdG9fcmVwPigKKwkgICAgICBzdGF0aWNfY2FzdDxfQ1I+KF9fZC5jb3VudCgpKSAvIHN0YXRpY19jYXN0PF9DUj4oX0NGOjpkZW4pKSk7CisJICB9CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvRHVyLCB0eXBlbmFtZSBfQ0YsIHR5cGVuYW1lIF9DUj4KKyAgICAgIHN0cnVjdCBfX2R1cmF0aW9uX2Nhc3RfaW1wbDxfVG9EdXIsIF9DRiwgX0NSLCBmYWxzZSwgdHJ1ZT4KKyAgICAgIHsKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorCSAgc3RhdGljIGNvbnN0ZXhwciBfVG9EdXIKKwkgIF9fY2FzdChjb25zdCBkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19kKQorCSAgeworCSAgICB0eXBlZGVmIHR5cGVuYW1lIF9Ub0R1cjo6cmVwCQkJX190b19yZXA7CisJICAgIHJldHVybiBfVG9EdXIoc3RhdGljX2Nhc3Q8X190b19yZXA+KAorCSAgICAgIHN0YXRpY19jYXN0PF9DUj4oX19kLmNvdW50KCkpICogc3RhdGljX2Nhc3Q8X0NSPihfQ0Y6Om51bSkpKTsKKwkgIH0KKyAgICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdHJ1Y3QgX19pc19kdXJhdGlvbgorICAgICAgOiBzdGQ6OmZhbHNlX3R5cGUKKyAgICAgIHsgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBzdHJ1Y3QgX19pc19kdXJhdGlvbjxkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPj4KKyAgICAgIDogc3RkOjp0cnVlX3R5cGUKKyAgICAgIHsgfTsKKworICAgIC8vLyBkdXJhdGlvbl9jYXN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvRHVyLCB0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorICAgICAgY29uc3RleHByIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX2R1cmF0aW9uPF9Ub0R1cj46OnZhbHVlLAorCQkJCSAgIF9Ub0R1cj46OnR5cGUKKyAgICAgIGR1cmF0aW9uX2Nhc3QoY29uc3QgZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fZCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9Ub0R1cjo6cGVyaW9kCQkJCV9fdG9fcGVyaW9kOworCXR5cGVkZWYgdHlwZW5hbWUgX1RvRHVyOjpyZXAJCQkJX190b19yZXA7CisJdHlwZWRlZiByYXRpb19kaXZpZGU8X1BlcmlvZCwgX190b19wZXJpb2Q+IAkJX19jZjsKKwl0eXBlZGVmIHR5cGVuYW1lIGNvbW1vbl90eXBlPF9fdG9fcmVwLCBfUmVwLCBpbnRtYXhfdD46OnR5cGUKKwkgIAkJCQkJCQlfX2NyOworCXR5cGVkZWYgIF9fZHVyYXRpb25fY2FzdF9pbXBsPF9Ub0R1ciwgX19jZiwgX19jciwKKwkJCQkgICAgICBfX2NmOjpudW0gPT0gMSwgX19jZjo6ZGVuID09IDE+IF9fZGM7CisJcmV0dXJuIF9fZGM6Ol9fY2FzdChfX2QpOworICAgICAgfQorCisgICAgLy8vIHRyZWF0X2FzX2Zsb2F0aW5nX3BvaW50CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcD4KKyAgICAgIHN0cnVjdCB0cmVhdF9hc19mbG9hdGluZ19wb2ludAorICAgICAgOiBpc19mbG9hdGluZ19wb2ludDxfUmVwPgorICAgICAgeyB9OworCisgICAgLy8vIGR1cmF0aW9uX3ZhbHVlcworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXA+CisgICAgICBzdHJ1Y3QgZHVyYXRpb25fdmFsdWVzCisgICAgICB7CisJc3RhdGljIGNvbnN0ZXhwciBfUmVwCisJemVybygpCisJeyByZXR1cm4gX1JlcCgwKTsgfQorCisJc3RhdGljIGNvbnN0ZXhwciBfUmVwCisJbWF4KCkKKwl7IHJldHVybiBudW1lcmljX2xpbWl0czxfUmVwPjo6bWF4KCk7IH0KKworCXN0YXRpYyBjb25zdGV4cHIgX1JlcAorCW1pbigpCisJeyByZXR1cm4gbnVtZXJpY19saW1pdHM8X1JlcD46Omxvd2VzdCgpOyB9CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgc3RydWN0IF9faXNfcmF0aW8KKyAgICAgIDogc3RkOjpmYWxzZV90eXBlCisgICAgICB7IH07CisKKyAgICB0ZW1wbGF0ZTxpbnRtYXhfdCBfTnVtLCBpbnRtYXhfdCBfRGVuPgorICAgICAgc3RydWN0IF9faXNfcmF0aW88cmF0aW88X051bSwgX0Rlbj4+CisgICAgICA6IHN0ZDo6dHJ1ZV90eXBlCisgICAgICB7IH07CisKKyAgICAvLy8gZHVyYXRpb24KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorICAgICAgc3RydWN0IGR1cmF0aW9uCisgICAgICB7CisJdHlwZWRlZiBfUmVwCQkJCQkJcmVwOworCXR5cGVkZWYgX1BlcmlvZCAJCQkJCXBlcmlvZDsKKworCXN0YXRpY19hc3NlcnQoIV9faXNfZHVyYXRpb248X1JlcD46OnZhbHVlLCAicmVwIGNhbm5vdCBiZSBhIGR1cmF0aW9uIik7CisJc3RhdGljX2Fzc2VydChfX2lzX3JhdGlvPF9QZXJpb2Q+Ojp2YWx1ZSwKKwkJICAgICAgInBlcmlvZCBtdXN0IGJlIGEgc3BlY2lhbGl6YXRpb24gb2YgcmF0aW8iKTsKKwlzdGF0aWNfYXNzZXJ0KF9QZXJpb2Q6Om51bSA+IDAsICJwZXJpb2QgbXVzdCBiZSBwb3NpdGl2ZSIpOworCisJLy8gMjAuMTEuNS4xIGNvbnN0cnVjdGlvbiAvIGNvcHkgLyBkZXN0cm95CisJY29uc3RleHByIGR1cmF0aW9uKCkgPSBkZWZhdWx0OworCisJLy8gTkI6IE1ha2UgY29uc3RleHByIGltcGxpY2l0LiBUaGlzIGNhbm5vdCBiZSBleHBsaWNpdGx5CisJLy8gY29uc3RleHByLCBhcyBhbnkgVURUIHRoYXQgaXMgbm90IGEgbGl0ZXJhbCB0eXBlIHdpdGggYQorCS8vIGNvbnN0ZXhwciBjb3B5IGNvbnN0cnVjdG9yIHdpbGwgYmUgaWxsLWZvcm1lZC4KKwlkdXJhdGlvbihjb25zdCBkdXJhdGlvbiYpID0gZGVmYXVsdDsKKworCXRlbXBsYXRlPHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIGVuYWJsZV9pZjxpc19jb252ZXJ0aWJsZTxfUmVwMiwgcmVwPjo6dmFsdWUKKwkJCSAmJiAodHJlYXRfYXNfZmxvYXRpbmdfcG9pbnQ8cmVwPjo6dmFsdWUKKwkJCSAgICAgfHwgIXRyZWF0X2FzX2Zsb2F0aW5nX3BvaW50PF9SZXAyPjo6dmFsdWUpPjo6dHlwZT4KKwkgIGNvbnN0ZXhwciBleHBsaWNpdCBkdXJhdGlvbihjb25zdCBfUmVwMiYgX19yZXApCisJICA6IF9fcihzdGF0aWNfY2FzdDxyZXA+KF9fcmVwKSkgeyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMiwgdHlwZW5hbWUgX1BlcmlvZDIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPHRyZWF0X2FzX2Zsb2F0aW5nX3BvaW50PHJlcD46OnZhbHVlCisJCQkgfHwgKHJhdGlvX2RpdmlkZTxfUGVyaW9kMiwgcGVyaW9kPjo6ZGVuID09IDEKKwkJCSAgICAgJiYgIXRyZWF0X2FzX2Zsb2F0aW5nX3BvaW50PF9SZXAyPjo6dmFsdWUpPjo6dHlwZT4KKwkgIGNvbnN0ZXhwciBkdXJhdGlvbihjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX2QpCisJICA6IF9fcihkdXJhdGlvbl9jYXN0PGR1cmF0aW9uPihfX2QpLmNvdW50KCkpIHsgfQorCisJfmR1cmF0aW9uKCkgPSBkZWZhdWx0OworCWR1cmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgZHVyYXRpb24mKSA9IGRlZmF1bHQ7CisKKwkvLyAyMC4xMS41LjIgb2JzZXJ2ZXIKKwljb25zdGV4cHIgcmVwCisJY291bnQoKSBjb25zdAorCXsgcmV0dXJuIF9fcjsgfQorCisJLy8gMjAuMTEuNS4zIGFyaXRobWV0aWMKKwljb25zdGV4cHIgZHVyYXRpb24KKwlvcGVyYXRvcisoKSBjb25zdAorCXsgcmV0dXJuICp0aGlzOyB9CisKKwljb25zdGV4cHIgZHVyYXRpb24KKwlvcGVyYXRvci0oKSBjb25zdAorCXsgcmV0dXJuIGR1cmF0aW9uKC1fX3IpOyB9CisKKwlkdXJhdGlvbiYKKwlvcGVyYXRvcisrKCkKKwl7CisJICArK19fcjsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwlkdXJhdGlvbgorCW9wZXJhdG9yKysoaW50KQorCXsgcmV0dXJuIGR1cmF0aW9uKF9fcisrKTsgfQorCisJZHVyYXRpb24mCisJb3BlcmF0b3ItLSgpCisJeworCSAgLS1fX3I7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisJZHVyYXRpb24KKwlvcGVyYXRvci0tKGludCkKKwl7IHJldHVybiBkdXJhdGlvbihfX3ItLSk7IH0KKworCWR1cmF0aW9uJgorCW9wZXJhdG9yKz0oY29uc3QgZHVyYXRpb24mIF9fZCkKKwl7CisJICBfX3IgKz0gX19kLmNvdW50KCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisJZHVyYXRpb24mCisJb3BlcmF0b3ItPShjb25zdCBkdXJhdGlvbiYgX19kKQorCXsKKwkgIF9fciAtPSBfX2QuY291bnQoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwlkdXJhdGlvbiYKKwlvcGVyYXRvcio9KGNvbnN0IHJlcCYgX19yaHMpCisJeworCSAgX19yICo9IF9fcmhzOworCSAgcmV0dXJuICp0aGlzOworCX0KKworCWR1cmF0aW9uJgorCW9wZXJhdG9yLz0oY29uc3QgcmVwJiBfX3JocykKKwl7CisJICBfX3IgLz0gX19yaHM7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisJLy8gRFIgOTM0LgorCXRlbXBsYXRlPHR5cGVuYW1lIF9SZXAyID0gcmVwPgorCSAgdHlwZW5hbWUgZW5hYmxlX2lmPCF0cmVhdF9hc19mbG9hdGluZ19wb2ludDxfUmVwMj46OnZhbHVlLAorCQkJICAgICBkdXJhdGlvbiY+Ojp0eXBlCisJICBvcGVyYXRvciU9KGNvbnN0IHJlcCYgX19yaHMpCisJICB7CisJICAgIF9fciAlPSBfX3JoczsKKwkgICAgcmV0dXJuICp0aGlzOworCSAgfQorCisJdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDIgPSByZXA+CisJICB0eXBlbmFtZSBlbmFibGVfaWY8IXRyZWF0X2FzX2Zsb2F0aW5nX3BvaW50PF9SZXAyPjo6dmFsdWUsCisJCQkgICAgIGR1cmF0aW9uJj46OnR5cGUKKwkgIG9wZXJhdG9yJT0oY29uc3QgZHVyYXRpb24mIF9fZCkKKwkgIHsKKwkgICAgX19yICU9IF9fZC5jb3VudCgpOworCSAgICByZXR1cm4gKnRoaXM7CisJICB9CisKKwkvLyAyMC4xMS41LjQgc3BlY2lhbCB2YWx1ZXMKKwlzdGF0aWMgY29uc3RleHByIGR1cmF0aW9uCisJemVybygpCisJeyByZXR1cm4gZHVyYXRpb24oZHVyYXRpb25fdmFsdWVzPHJlcD46Onplcm8oKSk7IH0KKworCXN0YXRpYyBjb25zdGV4cHIgZHVyYXRpb24KKwltaW4oKQorCXsgcmV0dXJuIGR1cmF0aW9uKGR1cmF0aW9uX3ZhbHVlczxyZXA+OjptaW4oKSk7IH0KKworCXN0YXRpYyBjb25zdGV4cHIgZHVyYXRpb24KKwltYXgoKQorCXsgcmV0dXJuIGR1cmF0aW9uKGR1cmF0aW9uX3ZhbHVlczxyZXA+OjptYXgoKSk7IH0KKworICAgICAgcHJpdmF0ZToKKwlyZXAgX19yOworICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKwkgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBjb21tb25fdHlwZTxkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+LAorCQkJCSAgICAgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPj46OnR5cGUKKyAgICAgIG9wZXJhdG9yKyhjb25zdCBkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+JiBfX2xocywKKwkJY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPiYgX19yaHMpCisgICAgICB7CisJdHlwZWRlZiBkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+CQkJX19kdXIxOworCXR5cGVkZWYgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPgkJCV9fZHVyMjsKKwl0eXBlZGVmIHR5cGVuYW1lIGNvbW1vbl90eXBlPF9fZHVyMSxfX2R1cjI+Ojp0eXBlCV9fY2Q7CisJcmV0dXJuIF9fY2QoX19jZChfX2xocykuY291bnQoKSArIF9fY2QoX19yaHMpLmNvdW50KCkpOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QxLAorCSAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgY29uc3RleHByIHR5cGVuYW1lIGNvbW1vbl90eXBlPGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4sCisJCQkJICAgICBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZQorICAgICAgb3BlcmF0b3ItKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLAorCQljb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsKKwl0eXBlZGVmIGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4JCQlfX2R1cjE7CisJdHlwZWRlZiBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+CQkJX19kdXIyOworCXR5cGVkZWYgdHlwZW5hbWUgY29tbW9uX3R5cGU8X19kdXIxLF9fZHVyMj46OnR5cGUJX19jZDsKKwlyZXR1cm4gX19jZChfX2NkKF9fbGhzKS5jb3VudCgpIC0gX19jZChfX3JocykuY291bnQoKSk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1JlcDIsIGJvb2wgPQorCSAgICAgaXNfY29udmVydGlibGU8X1JlcDIsCisJCQkgICAgdHlwZW5hbWUgY29tbW9uX3R5cGU8X1JlcDEsIF9SZXAyPjo6dHlwZT46OnZhbHVlPgorICAgICAgc3RydWN0IF9fY29tbW9uX3JlcF90eXBlIHsgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUmVwMj4KKyAgICAgIHN0cnVjdCBfX2NvbW1vbl9yZXBfdHlwZTxfUmVwMSwgX1JlcDIsIHRydWU+CisgICAgICB7IHR5cGVkZWYgdHlwZW5hbWUgY29tbW9uX3R5cGU8X1JlcDEsIF9SZXAyPjo6dHlwZSB0eXBlOyB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QsIHR5cGVuYW1lIF9SZXAyPgorICAgICAgY29uc3RleHByCisgICAgICBkdXJhdGlvbjx0eXBlbmFtZSBfX2NvbW1vbl9yZXBfdHlwZTxfUmVwMSwgX1JlcDI+Ojp0eXBlLCBfUGVyaW9kPgorICAgICAgb3BlcmF0b3IqKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kPiYgX19kLCBjb25zdCBfUmVwMiYgX19zKQorICAgICAgeworCXR5cGVkZWYgZHVyYXRpb248dHlwZW5hbWUgY29tbW9uX3R5cGU8X1JlcDEsIF9SZXAyPjo6dHlwZSwgX1BlcmlvZD4KKwkgIF9fY2Q7CisJcmV0dXJuIF9fY2QoX19jZChfX2QpLmNvdW50KCkgKiBfX3MpOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kPgorICAgICAgY29uc3RleHByCisgICAgICBkdXJhdGlvbjx0eXBlbmFtZSBfX2NvbW1vbl9yZXBfdHlwZTxfUmVwMiwgX1JlcDE+Ojp0eXBlLCBfUGVyaW9kPgorICAgICAgb3BlcmF0b3IqKGNvbnN0IF9SZXAxJiBfX3MsIGNvbnN0IGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kPiYgX19kKQorICAgICAgeyByZXR1cm4gX19kICogX19zOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1BlcmlvZCwgdHlwZW5hbWUgX1JlcDI+CisgICAgICBjb25zdGV4cHIgZHVyYXRpb248dHlwZW5hbWUgX19jb21tb25fcmVwX3R5cGU8X1JlcDEsIHR5cGVuYW1lCisJZW5hYmxlX2lmPCFfX2lzX2R1cmF0aW9uPF9SZXAyPjo6dmFsdWUsIF9SZXAyPjo6dHlwZT46OnR5cGUsIF9QZXJpb2Q+CisgICAgICBvcGVyYXRvci8oY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2Q+JiBfX2QsIGNvbnN0IF9SZXAyJiBfX3MpCisgICAgICB7CisJdHlwZWRlZiBkdXJhdGlvbjx0eXBlbmFtZSBjb21tb25fdHlwZTxfUmVwMSwgX1JlcDI+Ojp0eXBlLCBfUGVyaW9kPgorCSAgX19jZDsKKwlyZXR1cm4gX19jZChfX2NkKF9fZCkuY291bnQoKSAvIF9fcyk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwMSwgdHlwZW5hbWUgX1BlcmlvZDEsCisJICAgICB0eXBlbmFtZSBfUmVwMiwgdHlwZW5hbWUgX1BlcmlvZDI+CisgICAgICBjb25zdGV4cHIgdHlwZW5hbWUgY29tbW9uX3R5cGU8X1JlcDEsIF9SZXAyPjo6dHlwZQorICAgICAgb3BlcmF0b3IvKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLAorCQljb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsKKwl0eXBlZGVmIGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4JCQlfX2R1cjE7CisJdHlwZWRlZiBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+CQkJX19kdXIyOworCXR5cGVkZWYgdHlwZW5hbWUgY29tbW9uX3R5cGU8X19kdXIxLF9fZHVyMj46OnR5cGUJX19jZDsKKwlyZXR1cm4gX19jZChfX2xocykuY291bnQoKSAvIF9fY2QoX19yaHMpLmNvdW50KCk7CisgICAgICB9CisKKyAgICAvLyBEUiA5MzQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QsIHR5cGVuYW1lIF9SZXAyPgorICAgICAgY29uc3RleHByIGR1cmF0aW9uPHR5cGVuYW1lIF9fY29tbW9uX3JlcF90eXBlPF9SZXAxLCB0eXBlbmFtZQorCWVuYWJsZV9pZjwhX19pc19kdXJhdGlvbjxfUmVwMj46OnZhbHVlLCBfUmVwMj46OnR5cGU+Ojp0eXBlLCBfUGVyaW9kPgorICAgICAgb3BlcmF0b3IlKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kPiYgX19kLCBjb25zdCBfUmVwMiYgX19zKQorICAgICAgeworCXR5cGVkZWYgZHVyYXRpb248dHlwZW5hbWUgY29tbW9uX3R5cGU8X1JlcDEsIF9SZXAyPjo6dHlwZSwgX1BlcmlvZD4KKwkgIF9fY2Q7CisJcmV0dXJuIF9fY2QoX19jZChfX2QpLmNvdW50KCkgJSBfX3MpOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QxLAorCSAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgY29uc3RleHByIHR5cGVuYW1lIGNvbW1vbl90eXBlPGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4sCisJCQkJICAgICBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZQorICAgICAgb3BlcmF0b3IlKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLAorCQljb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsKKwl0eXBlZGVmIGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4JCQlfX2R1cjE7CisJdHlwZWRlZiBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+CQkJX19kdXIyOworCXR5cGVkZWYgdHlwZW5hbWUgY29tbW9uX3R5cGU8X19kdXIxLF9fZHVyMj46OnR5cGUJX19jZDsKKwlyZXR1cm4gX19jZChfX2NkKF9fbGhzKS5jb3VudCgpICUgX19jZChfX3JocykuY291bnQoKSk7CisgICAgICB9CisKKyAgICAvLyBjb21wYXJpc29ucworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKwkgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGNvbnN0ZXhwciBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLAorCQkgY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPiYgX19yaHMpCisgICAgICB7CisJdHlwZWRlZiBkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+CQkJX19kdXIxOworCXR5cGVkZWYgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPgkJCV9fZHVyMjsKKwl0eXBlZGVmIHR5cGVuYW1lIGNvbW1vbl90eXBlPF9fZHVyMSxfX2R1cjI+Ojp0eXBlCV9fY3Q7CisJcmV0dXJuIF9fY3QoX19saHMpLmNvdW50KCkgPT0gX19jdChfX3JocykuY291bnQoKTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKwkgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGNvbnN0ZXhwciBib29sCisgICAgICBvcGVyYXRvcjwoY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiYgX19saHMsCisJCWNvbnN0IGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kMj4mIF9fcmhzKQorICAgICAgeworCXR5cGVkZWYgZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPgkJCV9fZHVyMTsKKwl0eXBlZGVmIGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kMj4JCQlfX2R1cjI7CisJdHlwZWRlZiB0eXBlbmFtZSBjb21tb25fdHlwZTxfX2R1cjEsX19kdXIyPjo6dHlwZQlfX2N0OworCXJldHVybiBfX2N0KF9fbGhzKS5jb3VudCgpIDwgX19jdChfX3JocykuY291bnQoKTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKwkgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGNvbnN0ZXhwciBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLAorCQkgY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPiYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QxLAorCSAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgY29uc3RleHByIGJvb2wKKyAgICAgIG9wZXJhdG9yPD0oY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiYgX19saHMsCisJCSBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKwkgICAgIHR5cGVuYW1lIF9SZXAyLCB0eXBlbmFtZSBfUGVyaW9kMj4KKyAgICAgIGNvbnN0ZXhwciBib29sCisgICAgICBvcGVyYXRvcj4oY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiYgX19saHMsCisJCWNvbnN0IGR1cmF0aW9uPF9SZXAyLCBfUGVyaW9kMj4mIF9fcmhzKQorICAgICAgeyByZXR1cm4gX19yaHMgPCBfX2xoczsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcDEsIHR5cGVuYW1lIF9QZXJpb2QxLAorCSAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgY29uc3RleHByIGJvb2wKKyAgICAgIG9wZXJhdG9yPj0oY29uc3QgZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiYgX19saHMsCisJCSBjb25zdCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19saHMgPCBfX3Jocyk7IH0KKworICAgIC8vLyBuYW5vc2Vjb25kcworICAgIHR5cGVkZWYgZHVyYXRpb248aW50NjRfdCwgbmFubz4gCW5hbm9zZWNvbmRzOworCisgICAgLy8vIG1pY3Jvc2Vjb25kcworICAgIHR5cGVkZWYgZHVyYXRpb248aW50NjRfdCwgbWljcm8+IAltaWNyb3NlY29uZHM7CisKKyAgICAvLy8gbWlsbGlzZWNvbmRzCisgICAgdHlwZWRlZiBkdXJhdGlvbjxpbnQ2NF90LCBtaWxsaT4gCW1pbGxpc2Vjb25kczsKKworICAgIC8vLyBzZWNvbmRzCisgICAgdHlwZWRlZiBkdXJhdGlvbjxpbnQ2NF90PiAJCXNlY29uZHM7CisKKyAgICAvLy8gbWludXRlcworICAgIHR5cGVkZWYgZHVyYXRpb248aW50LCByYXRpbzwgNjA+PiAJbWludXRlczsKKworICAgIC8vLyBob3VycworICAgIHR5cGVkZWYgZHVyYXRpb248aW50LCByYXRpbzwzNjAwPj4gCWhvdXJzOworCisgICAgLy8vIHRpbWVfcG9pbnQKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXI+CisgICAgICBzdHJ1Y3QgdGltZV9wb2ludAorICAgICAgeworCXR5cGVkZWYgX0Nsb2NrCQkJICAJCQljbG9jazsKKwl0eXBlZGVmIF9EdXIJCSAgCQkJCWR1cmF0aW9uOworCXR5cGVkZWYgdHlwZW5hbWUgZHVyYXRpb246OnJlcAkgIAkJCXJlcDsKKwl0eXBlZGVmIHR5cGVuYW1lIGR1cmF0aW9uOjpwZXJpb2QJCQlwZXJpb2Q7CisKKwljb25zdGV4cHIgdGltZV9wb2ludCgpIDogX19kKGR1cmF0aW9uOjp6ZXJvKCkpCisJeyB9CisKKwljb25zdGV4cHIgZXhwbGljaXQgdGltZV9wb2ludChjb25zdCBkdXJhdGlvbiYgX19kdXIpCisJOiBfX2QoX19kdXIpCisJeyB9CisKKwkvLyBjb252ZXJzaW9ucworCXRlbXBsYXRlPHR5cGVuYW1lIF9EdXIyPgorCSAgY29uc3RleHByIHRpbWVfcG9pbnQoY29uc3QgdGltZV9wb2ludDxjbG9jaywgX0R1cjI+JiBfX3QpCisJICA6IF9fZChfX3QudGltZV9zaW5jZV9lcG9jaCgpKQorCSAgeyB9CisKKwkvLyBvYnNlcnZlcgorCWNvbnN0ZXhwciBkdXJhdGlvbgorCXRpbWVfc2luY2VfZXBvY2goKSBjb25zdAorCXsgcmV0dXJuIF9fZDsgfQorCisJLy8gYXJpdGhtZXRpYworCXRpbWVfcG9pbnQmCisJb3BlcmF0b3IrPShjb25zdCBkdXJhdGlvbiYgX19kdXIpCisJeworCSAgX19kICs9IF9fZHVyOworCSAgcmV0dXJuICp0aGlzOworCX0KKworCXRpbWVfcG9pbnQmCisJb3BlcmF0b3ItPShjb25zdCBkdXJhdGlvbiYgX19kdXIpCisJeworCSAgX19kIC09IF9fZHVyOworCSAgcmV0dXJuICp0aGlzOworCX0KKworCS8vIHNwZWNpYWwgdmFsdWVzCisJc3RhdGljIGNvbnN0ZXhwciB0aW1lX3BvaW50CisJbWluKCkKKwl7IHJldHVybiB0aW1lX3BvaW50KGR1cmF0aW9uOjptaW4oKSk7IH0KKworCXN0YXRpYyBjb25zdGV4cHIgdGltZV9wb2ludAorCW1heCgpCisJeyByZXR1cm4gdGltZV9wb2ludChkdXJhdGlvbjo6bWF4KCkpOyB9CisKKyAgICAgIHByaXZhdGU6CisJZHVyYXRpb24gX19kOworICAgICAgfTsKKworICAgIC8vLyB0aW1lX3BvaW50X2Nhc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVG9EdXIsIHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cj4KKyAgICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19kdXJhdGlvbjxfVG9EdXI+Ojp2YWx1ZSwKKwkJCQkgICB0aW1lX3BvaW50PF9DbG9jaywgX1RvRHVyPj46OnR5cGUKKyAgICAgIHRpbWVfcG9pbnRfY2FzdChjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cj4mIF9fdCkKKyAgICAgIHsKKwl0eXBlZGVmIHRpbWVfcG9pbnQ8X0Nsb2NrLCBfVG9EdXI+IAkJCV9fdGltZV9wb2ludDsKKwlyZXR1cm4gX190aW1lX3BvaW50KGR1cmF0aW9uX2Nhc3Q8X1RvRHVyPihfX3QudGltZV9zaW5jZV9lcG9jaCgpKSk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXIxLAorCSAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgY29uc3RleHByIHRpbWVfcG9pbnQ8X0Nsb2NrLAorCXR5cGVuYW1lIGNvbW1vbl90eXBlPF9EdXIxLCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZT4KKyAgICAgIG9wZXJhdG9yKyhjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cjE+JiBfX2xocywKKwkJY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPiYgX19yaHMpCisgICAgICB7CisJdHlwZWRlZiBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+CQkJX19kdXIyOworCXR5cGVkZWYgdHlwZW5hbWUgY29tbW9uX3R5cGU8X0R1cjEsX19kdXIyPjo6dHlwZQlfX2N0OworCXR5cGVkZWYgdGltZV9wb2ludDxfQ2xvY2ssIF9fY3Q+IAkJCV9fdGltZV9wb2ludDsKKwlyZXR1cm4gX190aW1lX3BvaW50KF9fbGhzLnRpbWVfc2luY2VfZXBvY2goKSArIF9fcmhzKTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAxLCB0eXBlbmFtZSBfUGVyaW9kMSwKKwkgICAgIHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cjI+CisgICAgICBjb25zdGV4cHIgdGltZV9wb2ludDxfQ2xvY2ssCisJdHlwZW5hbWUgY29tbW9uX3R5cGU8ZHVyYXRpb248X1JlcDEsIF9QZXJpb2QxPiwgX0R1cjI+Ojp0eXBlPgorICAgICAgb3BlcmF0b3IrKGNvbnN0IGR1cmF0aW9uPF9SZXAxLCBfUGVyaW9kMT4mIF9fbGhzLAorCQljb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cjI+JiBfX3JocykKKyAgICAgIHsgCisJdHlwZWRlZiBkdXJhdGlvbjxfUmVwMSwgX1BlcmlvZDE+CQkJX19kdXIxOworCXR5cGVkZWYgdHlwZW5hbWUgY29tbW9uX3R5cGU8X19kdXIxLF9EdXIyPjo6dHlwZQlfX2N0OworCXR5cGVkZWYgdGltZV9wb2ludDxfQ2xvY2ssIF9fY3Q+IAkJCV9fdGltZV9wb2ludDsKKwlyZXR1cm4gX190aW1lX3BvaW50KF9fcmhzLnRpbWVfc2luY2VfZXBvY2goKSArIF9fbGhzKTsgCisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXIxLAorCSAgICAgdHlwZW5hbWUgX1JlcDIsIHR5cGVuYW1lIF9QZXJpb2QyPgorICAgICAgY29uc3RleHByIHRpbWVfcG9pbnQ8X0Nsb2NrLAorCXR5cGVuYW1lIGNvbW1vbl90eXBlPF9EdXIxLCBkdXJhdGlvbjxfUmVwMiwgX1BlcmlvZDI+Pjo6dHlwZT4KKyAgICAgIG9wZXJhdG9yLShjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cjE+JiBfX2xocywKKwkJY29uc3QgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPiYgX19yaHMpCisgICAgICB7IAorCXR5cGVkZWYgZHVyYXRpb248X1JlcDIsIF9QZXJpb2QyPgkJCV9fZHVyMjsKKwl0eXBlZGVmIHR5cGVuYW1lIGNvbW1vbl90eXBlPF9EdXIxLF9fZHVyMj46OnR5cGUJX19jdDsKKwl0eXBlZGVmIHRpbWVfcG9pbnQ8X0Nsb2NrLCBfX2N0PiAJCQlfX3RpbWVfcG9pbnQ7CisJcmV0dXJuIF9fdGltZV9wb2ludChfX2xocy50aW1lX3NpbmNlX2Vwb2NoKCkgLV9fcmhzKTsgCisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXIxLCB0eXBlbmFtZSBfRHVyMj4KKyAgICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBjb21tb25fdHlwZTxfRHVyMSwgX0R1cjI+Ojp0eXBlCisgICAgICBvcGVyYXRvci0oY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXIxPiYgX19saHMsCisJCWNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyMj4mIF9fcmhzKQorICAgICAgeyByZXR1cm4gX19saHMudGltZV9zaW5jZV9lcG9jaCgpIC0gX19yaHMudGltZV9zaW5jZV9lcG9jaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXIxLCB0eXBlbmFtZSBfRHVyMj4KKyAgICAgIGNvbnN0ZXhwciBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyMT4mIF9fbGhzLAorCQkgY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXIyPiYgX19yaHMpCisgICAgICB7IHJldHVybiBfX2xocy50aW1lX3NpbmNlX2Vwb2NoKCkgPT0gX19yaHMudGltZV9zaW5jZV9lcG9jaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXIxLCB0eXBlbmFtZSBfRHVyMj4KKyAgICAgIGNvbnN0ZXhwciBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyMT4mIF9fbGhzLAorCQkgY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXIyPiYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyMSwgdHlwZW5hbWUgX0R1cjI+CisgICAgICBjb25zdGV4cHIgYm9vbAorICAgICAgb3BlcmF0b3I8KGNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyMT4mIF9fbGhzLAorCQljb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cjI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICBfX2xocy50aW1lX3NpbmNlX2Vwb2NoKCkgPCBfX3Jocy50aW1lX3NpbmNlX2Vwb2NoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cjEsIHR5cGVuYW1lIF9EdXIyPgorICAgICAgY29uc3RleHByIGJvb2wKKyAgICAgIG9wZXJhdG9yPD0oY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXIxPiYgX19saHMsCisJCSBjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cjI+JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19yaHMgPCBfX2xocyk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cjEsIHR5cGVuYW1lIF9EdXIyPgorICAgICAgY29uc3RleHByIGJvb2wKKyAgICAgIG9wZXJhdG9yPihjb25zdCB0aW1lX3BvaW50PF9DbG9jaywgX0R1cjE+JiBfX2xocywKKwkJY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXIyPiYgX19yaHMpCisgICAgICB7IHJldHVybiBfX3JocyA8IF9fbGhzOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXIxLCB0eXBlbmFtZSBfRHVyMj4KKyAgICAgIGNvbnN0ZXhwciBib29sCisgICAgICBvcGVyYXRvcj49KGNvbnN0IHRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyMT4mIF9fbGhzLAorCQkgY29uc3QgdGltZV9wb2ludDxfQ2xvY2ssIF9EdXIyPiYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9CisKKworICAgIC8vIENsb2Nrcy4gCisKKyAgICAvLyBXaHkgbmFub3NlY29uZCByZXNvbHV0aW9uIGFzIHRoZSBkZWZhdWx0PyAgCisgICAgLy8gV2h5IGhhdmUgc3RkOjpzeXN0ZW1fY2xvY2sgYWx3YXlzIGNvdW50IGluIHRoZSBoaWdlc3QKKyAgICAvLyByZXNvbHV0aW9uIChpZSBuYW5vc2Vjb25kcyksIGV2ZW4gaWYgb24gc29tZSBPU2VzIHRoZSBsb3cgMworICAgIC8vIG9yIDkgZGVjaW1hbCBkaWdpdHMgd2lsbCBiZSBhbHdheXMgemVybz8gVGhpcyBhbGxvd3MgbGF0ZXIKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdG8gY2hhbmdlIHRoZSBzeXN0ZW1fY2xvY2s6Om5vdygpCisgICAgLy8gaW1wbGVtZW50YXRpb24gYW55IHRpbWUgdG8gcHJvdmlkZSBiZXR0ZXIgcmVzb2x1dGlvbiB3aXRob3V0CisgICAgLy8gY2hhbmdpbmcgZnVuY3Rpb24gc2lnbmF0dXJlIG9yIHVuaXRzLgorCisgICAgLy8gVG8gc3VwcG9ydCB0aGUgKGZvcndhcmQpIGV2b2x1dGlvbiBvZiB0aGUgbGlicmFyeSdzIGRlZmluZWQKKyAgICAvLyBjbG9ja3MsIHdyYXAgaW5zaWRlIGlubGluZSBuYW1lc3BhY2Ugc28gdGhhdCB0aGUgY3VycmVudAorICAgIC8vIGRlZmludGlvbnMgb2Ygc3lzdGVtX2Nsb2NrLCBzdGVhZHlfY2xvY2ssIGFuZAorICAgIC8vIGhpZ2hfcmVzb2x1dGlvbl9jbG9jayB0eXBlcyBhcmUgdW5pcXVlbHkgbWFuZ2xlZC4gVGhpcyB3YXksIG5ldworICAgIC8vIGNvZGUgY2FuIHVzZSB0aGUgbGF0ZXN0cyBjbG9ja3MsIHdoaWxlIHRoZSBsaWJyYXJ5IGNhbiBjb250YWluCisgICAgLy8gY29tcGF0aWJpbGl0eSBkZWZpbml0aW9ucyBmb3IgcHJldmlvdXMgdmVyc2lvbnMuICBBdCBzb21lCisgICAgLy8gcG9pbnQsIHdoZW4gdGhlc2UgY2xvY2tzIHNldHRsZSBkb3duLCB0aGUgaW5saW5lZCBuYW1lc3BhY2VzCisgICAgLy8gY2FuIGJlIHJlbW92ZWQuICBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorICAgIGlubGluZSBuYW1lc3BhY2UgX1YyIHsKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgU3lzdGVtIGNsb2NrLgorICAgICAqCisgICAgICogIFRpbWUgcmV0dXJuZWQgcmVwcmVzZW50cyB3YWxsIHRpbWUgZnJvbSB0aGUgc3lzdGVtLXdpZGUgY2xvY2suCisgICAgKi8KKyAgICAgc3RydWN0IHN5c3RlbV9jbG9jaworICAgIHsKKyAgICAgIHR5cGVkZWYgY2hyb25vOjpuYW5vc2Vjb25kcyAgICAgCQkJCWR1cmF0aW9uOworICAgICAgdHlwZWRlZiBkdXJhdGlvbjo6cmVwICAgIAkJCQkJcmVwOworICAgICAgdHlwZWRlZiBkdXJhdGlvbjo6cGVyaW9kIAkJCQkJcGVyaW9kOworICAgICAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8c3lzdGVtX2Nsb2NrLCBkdXJhdGlvbj4gCXRpbWVfcG9pbnQ7CisKKyAgICAgIHN0YXRpY19hc3NlcnQoc3lzdGVtX2Nsb2NrOjpkdXJhdGlvbjo6bWluKCkKKwkJICAgIDwgc3lzdGVtX2Nsb2NrOjpkdXJhdGlvbjo6emVybygpLAorCQkgICAgImEgY2xvY2sncyBtaW5pbXVtIGR1cmF0aW9uIGNhbm5vdCBiZSBsZXNzIHRoYW4gaXRzIGVwb2NoIik7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19zdGVhZHkgPSBmYWxzZTsKKworICAgICAgc3RhdGljIHRpbWVfcG9pbnQKKyAgICAgIG5vdygpIG5vZXhjZXB0OworCisgICAgICAvLyBNYXAgdG8gQyBBUEkKKyAgICAgIHN0YXRpYyBzdGQ6OnRpbWVfdAorICAgICAgdG9fdGltZV90KGNvbnN0IHRpbWVfcG9pbnQmIF9fdCkgbm9leGNlcHQKKyAgICAgIHsKKwlyZXR1cm4gc3RkOjp0aW1lX3QoZHVyYXRpb25fY2FzdDxjaHJvbm86OnNlY29uZHM+CisJCQkgICAoX190LnRpbWVfc2luY2VfZXBvY2goKSkuY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyB0aW1lX3BvaW50CisgICAgICBmcm9tX3RpbWVfdChzdGQ6OnRpbWVfdCBfX3QpIG5vZXhjZXB0CisgICAgICB7CisJdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8c3lzdGVtX2Nsb2NrLCBzZWNvbmRzPglfX2Zyb207CisJcmV0dXJuIHRpbWVfcG9pbnRfY2FzdDxzeXN0ZW1fY2xvY2s6OmR1cmF0aW9uPgorCSAgICAgICAoX19mcm9tKGNocm9ubzo6c2Vjb25kcyhfX3QpKSk7CisgICAgICB9CisgICAgfTsKKworCisgICAgLyoqCisgICAgICogIEBicmllZiBNb25vdG9uaWMgY2xvY2sKKyAgICAgKgorICAgICAqICBUaW1lIHJldHVybmVkIGhhcyB0aGUgcHJvcGVydHkgb2Ygb25seSBpbmNyZWFzaW5nIGF0IGEgdW5pZm9ybSByYXRlLgorICAgICovCisgICAgc3RydWN0IHN0ZWFkeV9jbG9jaworICAgIHsKKyAgICAgIHR5cGVkZWYgY2hyb25vOjpuYW5vc2Vjb25kcyAJCQkJZHVyYXRpb247CisgICAgICB0eXBlZGVmIGR1cmF0aW9uOjpyZXAJICAJCQkJcmVwOworICAgICAgdHlwZWRlZiBkdXJhdGlvbjo6cGVyaW9kCSAgCQkJCXBlcmlvZDsKKyAgICAgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PHN0ZWFkeV9jbG9jaywgZHVyYXRpb24+IAl0aW1lX3BvaW50OworCisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc3RlYWR5ID0gdHJ1ZTsKKworICAgICAgc3RhdGljIHRpbWVfcG9pbnQKKyAgICAgIG5vdygpIG5vZXhjZXB0OworICAgIH07CisKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgSGlnaGVzdC1yZXNvbHV0aW9uIGNsb2NrCisgICAgICoKKyAgICAgKiAgVGhpcyBpcyB0aGUgY2xvY2sgIndpdGggdGhlIHNob3J0ZXN0IHRpY2sgcGVyaW9kLiIgQWxpYXMgdG8KKyAgICAgKiAgc3RkOjpzeXN0ZW1fY2xvY2sgdW50aWwgaGlnaGVyLXRoYW4tbmFub3NlY29uZCBkZWZpbml0aW9ucworICAgICAqICBiZWNvbWUgZmVhc2libGUuCisgICAgKi8KKyAgICB1c2luZyBoaWdoX3Jlc29sdXRpb25fY2xvY2sgPSBzeXN0ZW1fY2xvY2s7CisKKyAgfSAvLyBlbmQgaW5saW5lIG5hbWVzcGFjZSBfVjIKKworICBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAgfSAvLyBuYW1lc3BhY2UgY2hyb25vCisKKyAgLy8gQH0gZ3JvdXAgY2hyb25vCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy9fR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvL19HTElCQ1hYX0NIUk9OTwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jaW50dHlwZXMgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NpbnR0eXBlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGM3NDBjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jaW50dHlwZXMKQEAgLTAsMCArMSw4MSBAQAorLy8gPGNpbnR0eXBlcz4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY2ludHR5cGVzCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0NJTlRUWVBFUworI2RlZmluZSBfR0xJQkNYWF9DSU5UVFlQRVMgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8Y3N0ZGludD4KKworLy8gRm9yIDI3LjkuMi8zIChzZWUgQzk5LCBOb3RlIDE4NCkKKyNpZiBfR0xJQkNYWF9IQVZFX0lOVFRZUEVTX0gKKyMgaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjICBkZWZpbmUgX1VOREVGX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgIGRlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUworIyBlbmRpZgorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorIyBpZmRlZiBfVU5ERUZfX1NURENfRk9STUFUX01BQ1JPUworIyAgdW5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgIHVuZGVmIF9VTkRFRl9fU1REQ19GT1JNQVRfTUFDUk9TCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfSU5UVFlQRVNfVFIxCisKK25hbWVzcGFjZSBzdGQKK3sKKyAgLy8gdHlwZXMKKyAgdXNpbmcgOjppbWF4ZGl2X3Q7CisKKyAgLy8gZnVuY3Rpb25zCisgIHVzaW5nIDo6aW1heGFiczsKKyAgdXNpbmcgOjppbWF4ZGl2OworCisgIC8vIEdDQyBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuZGVkIGludGVnZXIgdHlwZXMKKyAgLy8gaW50bWF4X3QgYWJzKGludG1heF90KQorICAvLyBpbWF4ZGl2X3QgZGl2KGludG1heF90LCBpbnRtYXhfdCkKKworICB1c2luZyA6OnN0cnRvaW1heDsKKyAgdXNpbmcgOjpzdHJ0b3VtYXg7CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9XQ0hBUl9UKSAmJiBfR0xJQkNYWF9VU0VfQzk5X0lOVFRZUEVTX1dDSEFSX1RfVFIxCisgIHVzaW5nIDo6d2NzdG9pbWF4OworICB1c2luZyA6Ondjc3RvdW1heDsKKyNlbmRpZgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VU0VfQzk5X0lOVFRZUEVTX1RSMQorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NJTlRUWVBFUwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jaXNvNjQ2IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jaXNvNjQ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYmIzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2Npc282NDYKQEAgLTAsMCArMSwzMyBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjaXNvNjQ2CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgaXNvNjQ2LmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NsaW1pdHMgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NsaW1pdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhNTkxOQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2xpbWl0cwpAQCAtMCwwICsxLDU4IEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY2xpbWl0cworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIGxpbWl0cy5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMTguMi4yICBJbXBsZW1lbnRhdGlvbiBwcm9wZXJ0aWVzOiBDIGxpYnJhcnkKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NMSU1JVFMKKyNkZWZpbmUgX0dMSUJDWFhfQ0xJTUlUUyAxCisKKyNpZm5kZWYgTExPTkdfTUlOCisjZGVmaW5lIExMT05HX01JTiAoLV9fTE9OR19MT05HX01BWF9fIC0gMSkKKyNlbmRpZgorCisjaWZuZGVmIExMT05HX01BWAorI2RlZmluZSBMTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18KKyNlbmRpZgorCisjaWZuZGVmIFVMTE9OR19NQVgKKyNkZWZpbmUgVUxMT05HX01BWCAoX19MT05HX0xPTkdfTUFYX18gKiAyVUxMICsgMSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2xvY2FsZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY2xvY2FsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjMyOTgwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jbG9jYWxlCkBAIC0wLDAgKzEsNTggQEAKKy8vIC0qLSBDKysgLSotIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY2xvY2FsZQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIGxvY2FsZS5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMTguMi4yICBJbXBsZW1lbnRhdGlvbiBwcm9wZXJ0aWVzOiBDIGxpYnJhcnkKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ0xPQ0FMRQorI2RlZmluZSBfR0xJQkNYWF9DTE9DQUxFIDEKKworLy8gR2V0IHJpZCBvZiB0aG9zZSBtYWNyb3MgZGVmaW5lZCBpbiA8bG9jYWxlLmg+IGluIGxpZXUgb2YgcmVhbCBmdW5jdGlvbnMuCisjdW5kZWYgc2V0bG9jYWxlCisjdW5kZWYgbG9jYWxlY29udgorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIDo6bGNvbnY7CisgIHVzaW5nIDo6c2V0bG9jYWxlOworICB1c2luZyA6OmxvY2FsZWNvbnY7Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NtYXRoIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jbWF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDM4NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jbWF0aApAQCAtMCwwICsxLDE2ODUgQEAKKy8vIC0qLSBDKysgLSotIEMgZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NtYXRoCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgbWF0aC5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjYuNSAgQyBsaWJyYXJ5CisvLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NNQVRICisjZGVmaW5lIF9HTElCQ1hYX0NNQVRIIDEKKworLy8gR2V0IHJpZCBvZiB0aG9zZSBtYWNyb3MgZGVmaW5lZCBpbiA8bWF0aC5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGFicworI3VuZGVmIGRpdgorI3VuZGVmIGFjb3MKKyN1bmRlZiBhc2luCisjdW5kZWYgYXRhbgorI3VuZGVmIGF0YW4yCisjdW5kZWYgY2VpbAorI3VuZGVmIGNvcworI3VuZGVmIGNvc2gKKyN1bmRlZiBleHAKKyN1bmRlZiBmYWJzCisjdW5kZWYgZmxvb3IKKyN1bmRlZiBmbW9kCisjdW5kZWYgZnJleHAKKyN1bmRlZiBsZGV4cAorI3VuZGVmIGxvZworI3VuZGVmIGxvZzEwCisjdW5kZWYgbW9kZgorI3VuZGVmIHBvdworI3VuZGVmIHNpbgorI3VuZGVmIHNpbmgKKyN1bmRlZiBzcXJ0CisjdW5kZWYgdGFuCisjdW5kZWYgdGFuaAorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZG91YmxlCisgIGFicyhkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9CisjZW5kaWYKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9NQVRIX0hfUFJPVE8KKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdAorICBhYnMoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUKKyAgYWJzKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGFicyhfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzKF9feCk7IH0KKworICB1c2luZyA6OmFjb3M7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgYWNvcyhmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hY29zZihfX3gpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZQorICBhY29zKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2Fjb3NsKF9feCk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBhY29zKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2Fjb3MoX194KTsgfQorCisgIHVzaW5nIDo6YXNpbjsKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9NQVRIX0hfUFJPVE8KKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdAorICBhc2luKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2FzaW5mKF9feCk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgZG91YmxlCisgIGFzaW4obG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fYXNpbmwoX194KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIKKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgYXNpbihfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9hc2luKF9feCk7IH0KKworICB1c2luZyA6OmF0YW47CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgYXRhbihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuZihfX3gpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZQorICBhdGFuKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2F0YW5sKF9feCk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGF0YW4oX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fYXRhbihfX3gpOyB9CisKKyAgdXNpbmcgOjphdGFuMjsKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9NQVRIX0hfUFJPVE8KKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdAorICBhdGFuMihmbG9hdCBfX3ksIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2F0YW4yZihfX3ksIF9feCk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgZG91YmxlCisgIGF0YW4yKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fYXRhbjJsKF9feSwgX194KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICBhdGFuMihfVHAgX195LCBfVXAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gYXRhbjIoX190eXBlKF9feSksIF9fdHlwZShfX3gpKTsKKyAgICB9CisKKyAgdXNpbmcgOjpjZWlsOworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX01BVEhfSF9QUk9UTworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGZsb2F0CisgIGNlaWwoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2VpbGYoX194KTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUKKyAgY2VpbChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jZWlsbChfX3gpOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgY2VpbChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9jZWlsKF9feCk7IH0KKworICB1c2luZyA6OmNvczsKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9NQVRIX0hfUFJPVE8KKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdAorICBjb3MoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZQorICBjb3MobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBjb3MoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fY29zKF9feCk7IH0KKworICB1c2luZyA6OmNvc2g7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgY29zaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NoZihfX3gpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZQorICBjb3NoKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2Nvc2hsKF9feCk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGNvc2goX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fY29zaChfX3gpOyB9CisKKyAgdXNpbmcgOjpleHA7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgZXhwKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cGYoX194KTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUKKyAgZXhwKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cGwoX194KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIKKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgZXhwKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2V4cChfX3gpOyB9CisKKyAgdXNpbmcgOjpmYWJzOworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX01BVEhfSF9QUk9UTworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGZsb2F0CisgIGZhYnMoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUKKyAgZmFicyhsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBmYWJzKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQorCisgIHVzaW5nIDo6Zmxvb3I7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgZmxvb3IoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZmxvb3JmKF9feCk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgZG91YmxlCisgIGZsb29yKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2Zsb29ybChfX3gpOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBmbG9vcihfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbG9vcihfX3gpOyB9CisKKyAgdXNpbmcgOjpmbW9kOworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX01BVEhfSF9QUk9UTworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGZsb2F0CisgIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbW9kZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgZG91YmxlCisgIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbW9kbChfX3gsIF9feSk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIKKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgZm1vZChfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gZm1vZChfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICB1c2luZyA6OmZyZXhwOworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX01BVEhfSF9QUk9UTworICBpbmxpbmUgZmxvYXQKKyAgZnJleHAoZmxvYXQgX194LCBpbnQqIF9fZXhwKQorICB7IHJldHVybiBfX2J1aWx0aW5fZnJleHBmKF9feCwgX19leHApOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZyZXhwbChfX3gsIF9fZXhwKTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIKKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGZyZXhwKF9UcCBfX3gsIGludCogX19leHApCisgICAgeyByZXR1cm4gX19idWlsdGluX2ZyZXhwKF9feCwgX19leHApOyB9CisKKyAgdXNpbmcgOjpsZGV4cDsKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9NQVRIX0hfUFJPVE8KKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdAorICBsZGV4cChmbG9hdCBfX3gsIGludCBfX2V4cCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xkZXhwZihfX3gsIF9fZXhwKTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUKKyAgbGRleHAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHApCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sZGV4cGwoX194LCBfX2V4cCk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBsZGV4cChfVHAgX194LCBpbnQgX19leHApCisgICAgeyByZXR1cm4gX19idWlsdGluX2xkZXhwKF9feCwgX19leHApOyB9CisKKyAgdXNpbmcgOjpsb2c7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgbG9nKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZ2YoX194KTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUKKyAgbG9nKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZ2woX194KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIKKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGxvZyhfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2coX194KTsgfQorCisgIHVzaW5nIDo6bG9nMTA7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgbG9nMTAoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMTBmKF9feCk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgZG91YmxlCisgIGxvZzEwKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZzEwbChfX3gpOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBsb2cxMChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2cxMChfX3gpOyB9CisKKyAgdXNpbmcgOjptb2RmOworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX01BVEhfSF9QUk9UTworICBpbmxpbmUgZmxvYXQKKyAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9tb2RmZihfX3gsIF9faXB0cik7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9tb2RmbChfX3gsIF9faXB0cik7IH0KKyNlbmRpZgorCisgIHVzaW5nIDo6cG93OworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX01BVEhfSF9QUk9UTworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGZsb2F0CisgIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX3Bvd2YoX194LCBfX3kpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZQorICBwb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9wb3dsKF9feCwgX195KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gRFIgNTUwLiBXaGF0IHNob3VsZCB0aGUgcmV0dXJuIHR5cGUgb2YgcG93KGZsb2F0LGludCkgYmU/CisgIGlubGluZSBkb3VibGUKKyAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9wb3dpKF9feCwgX19pKTsgfQorCisgIGlubGluZSBmbG9hdAorICBwb3coZmxvYXQgX194LCBpbnQgX19uKQorICB7IHJldHVybiBfX2J1aWx0aW5fcG93aWYoX194LCBfX24pOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHBvdyhsb25nIGRvdWJsZSBfX3gsIGludCBfX24pCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9wb3dpbChfX3gsIF9fbik7IH0KKyNlbmRpZgorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICBwb3coX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIHBvdyhfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICB1c2luZyA6OnNpbjsKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9NQVRIX0hfUFJPVE8KKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdAorICBzaW4oZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihfX3gpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZQorICBzaW4obG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgc2luKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX3NpbihfX3gpOyB9CisKKyAgdXNpbmcgOjpzaW5oOworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX01BVEhfSF9QUk9UTworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGZsb2F0CisgIHNpbmgoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2luaGYoX194KTsgfQorCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUKKyAgc2luaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5obChfX3gpOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgc2luaChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5oKF9feCk7IH0KKworICB1c2luZyA6OnNxcnQ7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgc3FydChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZQorICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NxcnRsKF9feCk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBzcXJ0KF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX3NxcnQoX194KTsgfQorCisgIHVzaW5nIDo6dGFuOworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX01BVEhfSF9QUk9UTworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGZsb2F0CisgIHRhbihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90YW5mKF9feCk7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgZG91YmxlCisgIHRhbihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90YW5sKF9feCk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICB0YW4oX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fdGFuKF9feCk7IH0KKworICB1c2luZyA6OnRhbmg7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQKKyAgdGFuaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90YW5oZihfX3gpOyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZQorICB0YW5oKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3RhbmhsKF9feCk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICB0YW5oKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX3RhbmgoX194KTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEgKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9GUF9NQUNST1NfRFlOQU1JQworCisvLyBUaGVzZSBhcmUgcG9zc2libGUgbWFjcm9zIGltcG9ydGVkIGZyb20gQzk5LWxhbmQuCisjdW5kZWYgZnBjbGFzc2lmeQorI3VuZGVmIGlzZmluaXRlCisjdW5kZWYgaXNpbmYKKyN1bmRlZiBpc25hbgorI3VuZGVmIGlzbm9ybWFsCisjdW5kZWYgc2lnbmJpdAorI3VuZGVmIGlzZ3JlYXRlcgorI3VuZGVmIGlzZ3JlYXRlcmVxdWFsCisjdW5kZWYgaXNsZXNzCisjdW5kZWYgaXNsZXNzZXF1YWwKKyN1bmRlZiBpc2xlc3NncmVhdGVyCisjdW5kZWYgaXN1bm9yZGVyZWQKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICBjb25zdGV4cHIgaW50CisgIGZwY2xhc3NpZnkoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZnBjbGFzc2lmeShGUF9OQU4sIEZQX0lORklOSVRFLCBGUF9OT1JNQUwsCisJCQkJRlBfU1VCTk9STUFMLCBGUF9aRVJPLCBfX3gpOyB9CisKKyAgY29uc3RleHByIGludAorICBmcGNsYXNzaWZ5KGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mcGNsYXNzaWZ5KEZQX05BTiwgRlBfSU5GSU5JVEUsIEZQX05PUk1BTCwKKwkJCQlGUF9TVUJOT1JNQUwsIEZQX1pFUk8sIF9feCk7IH0KKworICBjb25zdGV4cHIgaW50CisgIGZwY2xhc3NpZnkobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZnBjbGFzc2lmeShGUF9OQU4sIEZQX0lORklOSVRFLCBGUF9OT1JNQUwsCisJCQkJRlBfU1VCTk9STUFMLCBGUF9aRVJPLCBfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludD46Ol9fdHlwZQorICAgIGZwY2xhc3NpZnkoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX3ggIT0gMCA/IEZQX05PUk1BTCA6IEZQX1pFUk87IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2Zpbml0ZShmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2Zpbml0ZShfX3gpOyB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXNmaW5pdGUoZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzZmluaXRlKF9feCk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2Zpbml0ZShsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2Zpbml0ZShfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+OjpfX3R5cGUKKyAgICBpc2Zpbml0ZShfVHAgX194KQorICAgIHsgcmV0dXJuIHRydWU7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2luZihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2luZihfX3gpOyB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXNpbmYoZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzaW5mKF9feCk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2luZihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2luZihfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+OjpfX3R5cGUKKyAgICBpc2luZihfVHAgX194KQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXNuYW4oZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5faXNuYW4oX194KTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIGlzbmFuKGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc25hbihfX3gpOyB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXNuYW4obG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5faXNuYW4oX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPjo6X190eXBlCisgICAgaXNuYW4oX1RwIF9feCkKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIGlzbm9ybWFsKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzbm9ybWFsKF9feCk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc25vcm1hbChkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5faXNub3JtYWwoX194KTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIGlzbm9ybWFsKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzbm9ybWFsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD46Ol9fdHlwZQorICAgIGlzbm9ybWFsKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX194ICE9IDAgPyB0cnVlIDogZmFsc2U7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBzaWduYml0KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NpZ25iaXQoX194KTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIHNpZ25iaXQoZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NpZ25iaXQoX194KTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIHNpZ25iaXQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2lnbmJpdChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+OjpfX3R5cGUKKyAgICBzaWduYml0KF9UcCBfX3gpCisgICAgeyByZXR1cm4gX194IDwgMCA/IHRydWUgOiBmYWxzZTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIGlzZ3JlYXRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlcihfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2dyZWF0ZXIoZG91YmxlIF9feCwgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlcihfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2dyZWF0ZXIobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXIoX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgY29uc3RleHByIHR5cGVuYW1lCisgICAgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwoX19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUKKwkJCSAgICAmJiBfX2lzX2FyaXRobWV0aWM8X1VwPjo6X192YWx1ZSksIGJvb2w+OjpfX3R5cGUKKyAgICBpc2dyZWF0ZXIoX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXIoX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXNncmVhdGVyZXF1YWwoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXJlcXVhbChfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2dyZWF0ZXJlcXVhbChkb3VibGUgX194LCBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwoX194LCBfX3kpOyB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXNncmVhdGVyZXF1YWwobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2dyZWF0ZXJlcXVhbChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUKKyAgICBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPChfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZQorCQkJICAgICYmIF9faXNfYXJpdGhtZXRpYzxfVXA+OjpfX3ZhbHVlKSwgYm9vbD46Ol9fdHlwZQorICAgIGlzZ3JlYXRlcmVxdWFsKF9UcCBfX3gsIF9VcCBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwoX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXNsZXNzKGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzKF9feCwgX195KTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIGlzbGVzcyhkb3VibGUgX194LCBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzKF9feCwgX195KTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIGlzbGVzcyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzbGVzcyhfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUKKyAgICBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPChfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZQorCQkJICAgICYmIF9faXNfYXJpdGhtZXRpYzxfVXA+OjpfX3ZhbHVlKSwgYm9vbD46Ol9fdHlwZQorICAgIGlzbGVzcyhfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzbGVzcyhfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2xlc3NlcXVhbChmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzbGVzc2VxdWFsKF9feCwgX195KTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIGlzbGVzc2VxdWFsKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NlcXVhbChfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2xlc3NlcXVhbChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2lzbGVzc2VxdWFsKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZQorICAgIF9fZ251X2N4eDo6X19lbmFibGVfaWY8KF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlCisJCQkgICAgJiYgX19pc19hcml0aG1ldGljPF9VcD46Ol9fdmFsdWUpLCBib29sPjo6X190eXBlCisgICAgaXNsZXNzZXF1YWwoX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NlcXVhbChfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2xlc3NncmVhdGVyKGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzZ3JlYXRlcihfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc2xlc3NncmVhdGVyKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NncmVhdGVyKF9feCwgX195KTsgfQorCisgIGNvbnN0ZXhwciBib29sCisgIGlzbGVzc2dyZWF0ZXIobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NncmVhdGVyKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZQorICAgIF9fZ251X2N4eDo6X19lbmFibGVfaWY8KF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlCisJCQkgICAgJiYgX19pc19hcml0aG1ldGljPF9VcD46Ol9fdmFsdWUpLCBib29sPjo6X190eXBlCisgICAgaXNsZXNzZ3JlYXRlcihfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIoX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXN1bm9yZGVyZWQoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc3Vub3JkZXJlZChfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgYm9vbAorICBpc3Vub3JkZXJlZChkb3VibGUgX194LCBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5faXN1bm9yZGVyZWQoX194LCBfX3kpOyB9CisKKyAgY29uc3RleHByIGJvb2wKKyAgaXN1bm9yZGVyZWQobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc3Vub3JkZXJlZChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUKKyAgICBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPChfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZQorCQkJICAgICYmIF9faXNfYXJpdGhtZXRpYzxfVXA+OjpfX3ZhbHVlKSwgYm9vbD46Ol9fdHlwZQorICAgIGlzdW5vcmRlcmVkKF9UcCBfX3gsIF9VcCBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXN1bm9yZGVyZWQoX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyNlbHNlCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBmcGNsYXNzaWZ5KF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9mcGNsYXNzaWZ5KEZQX05BTiwgRlBfSU5GSU5JVEUsIEZQX05PUk1BTCwKKwkJCQkgIEZQX1NVQk5PUk1BTCwgRlBfWkVSTywgX190eXBlKF9fZikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzZmluaXRlKF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc2Zpbml0ZShfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNpbmYoX1RwIF9fZikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzaW5mKF9fdHlwZShfX2YpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBpc25hbihfVHAgX19mKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXNuYW4oX190eXBlKF9fZikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbm9ybWFsKF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc25vcm1hbChfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgc2lnbmJpdChfVHAgX19mKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5fc2lnbmJpdChfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlcihfX3R5cGUoX19mMSksIF9fdHlwZShfX2YyKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3MoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzbGVzc2VxdWFsKF9fdHlwZShfX2YxKSwgX190eXBlKF9fZjIpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBpc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzdW5vcmRlcmVkKF9fdHlwZShfX2YxKSwgX190eXBlKF9fZjIpKTsKKyAgICB9CisKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9VU0VfQzk5X0ZQX01BQ1JPU19EWU5BTUlDICovCisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKworI3VuZGVmIGFjb3NoCisjdW5kZWYgYWNvc2hmCisjdW5kZWYgYWNvc2hsCisjdW5kZWYgYXNpbmgKKyN1bmRlZiBhc2luaGYKKyN1bmRlZiBhc2luaGwKKyN1bmRlZiBhdGFuaAorI3VuZGVmIGF0YW5oZgorI3VuZGVmIGF0YW5obAorI3VuZGVmIGNicnQKKyN1bmRlZiBjYnJ0ZgorI3VuZGVmIGNicnRsCisjdW5kZWYgY29weXNpZ24KKyN1bmRlZiBjb3B5c2lnbmYKKyN1bmRlZiBjb3B5c2lnbmwKKyN1bmRlZiBlcmYKKyN1bmRlZiBlcmZmCisjdW5kZWYgZXJmbAorI3VuZGVmIGVyZmMKKyN1bmRlZiBlcmZjZgorI3VuZGVmIGVyZmNsCisjdW5kZWYgZXhwMgorI3VuZGVmIGV4cDJmCisjdW5kZWYgZXhwMmwKKyN1bmRlZiBleHBtMQorI3VuZGVmIGV4cG0xZgorI3VuZGVmIGV4cG0xbAorI3VuZGVmIGZkaW0KKyN1bmRlZiBmZGltZgorI3VuZGVmIGZkaW1sCisjdW5kZWYgZm1hCisjdW5kZWYgZm1hZgorI3VuZGVmIGZtYWwKKyN1bmRlZiBmbWF4CisjdW5kZWYgZm1heGYKKyN1bmRlZiBmbWF4bAorI3VuZGVmIGZtaW4KKyN1bmRlZiBmbWluZgorI3VuZGVmIGZtaW5sCisjdW5kZWYgaHlwb3QKKyN1bmRlZiBoeXBvdGYKKyN1bmRlZiBoeXBvdGwKKyN1bmRlZiBpbG9nYgorI3VuZGVmIGlsb2diZgorI3VuZGVmIGlsb2dibAorI3VuZGVmIGxnYW1tYQorI3VuZGVmIGxnYW1tYWYKKyN1bmRlZiBsZ2FtbWFsCisjdW5kZWYgbGxyaW50CisjdW5kZWYgbGxyaW50ZgorI3VuZGVmIGxscmludGwKKyN1bmRlZiBsbHJvdW5kCisjdW5kZWYgbGxyb3VuZGYKKyN1bmRlZiBsbHJvdW5kbAorI3VuZGVmIGxvZzFwCisjdW5kZWYgbG9nMXBmCisjdW5kZWYgbG9nMXBsCisjdW5kZWYgbG9nMgorI3VuZGVmIGxvZzJmCisjdW5kZWYgbG9nMmwKKyN1bmRlZiBsb2diCisjdW5kZWYgbG9nYmYKKyN1bmRlZiBsb2dibAorI3VuZGVmIGxyaW50CisjdW5kZWYgbHJpbnRmCisjdW5kZWYgbHJpbnRsCisjdW5kZWYgbHJvdW5kCisjdW5kZWYgbHJvdW5kZgorI3VuZGVmIGxyb3VuZGwKKyN1bmRlZiBuYW4KKyN1bmRlZiBuYW5mCisjdW5kZWYgbmFubAorI3VuZGVmIG5lYXJieWludAorI3VuZGVmIG5lYXJieWludGYKKyN1bmRlZiBuZWFyYnlpbnRsCisjdW5kZWYgbmV4dGFmdGVyCisjdW5kZWYgbmV4dGFmdGVyZgorI3VuZGVmIG5leHRhZnRlcmwKKyN1bmRlZiBuZXh0dG93YXJkCisjdW5kZWYgbmV4dHRvd2FyZGYKKyN1bmRlZiBuZXh0dG93YXJkbAorI3VuZGVmIHJlbWFpbmRlcgorI3VuZGVmIHJlbWFpbmRlcmYKKyN1bmRlZiByZW1haW5kZXJsCisjdW5kZWYgcmVtcXVvCisjdW5kZWYgcmVtcXVvZgorI3VuZGVmIHJlbXF1b2wKKyN1bmRlZiByaW50CisjdW5kZWYgcmludGYKKyN1bmRlZiByaW50bAorI3VuZGVmIHJvdW5kCisjdW5kZWYgcm91bmRmCisjdW5kZWYgcm91bmRsCisjdW5kZWYgc2NhbGJsbgorI3VuZGVmIHNjYWxibG5mCisjdW5kZWYgc2NhbGJsbmwKKyN1bmRlZiBzY2FsYm4KKyN1bmRlZiBzY2FsYm5mCisjdW5kZWYgc2NhbGJubAorI3VuZGVmIHRnYW1tYQorI3VuZGVmIHRnYW1tYWYKKyN1bmRlZiB0Z2FtbWFsCisjdW5kZWYgdHJ1bmMKKyN1bmRlZiB0cnVuY2YKKyN1bmRlZiB0cnVuY2wKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIHR5cGVzCisgIHVzaW5nIDo6ZG91YmxlX3Q7CisgIHVzaW5nIDo6ZmxvYXRfdDsKKworICAvLyBmdW5jdGlvbnMKKyAgdXNpbmcgOjphY29zaDsKKyAgdXNpbmcgOjphY29zaGY7CisgIHVzaW5nIDo6YWNvc2hsOworCisgIHVzaW5nIDo6YXNpbmg7CisgIHVzaW5nIDo6YXNpbmhmOworICB1c2luZyA6OmFzaW5obDsKKworICB1c2luZyA6OmF0YW5oOworICB1c2luZyA6OmF0YW5oZjsKKyAgdXNpbmcgOjphdGFuaGw7CisKKyAgdXNpbmcgOjpjYnJ0OworICB1c2luZyA6OmNicnRmOworICB1c2luZyA6OmNicnRsOworCisgIHVzaW5nIDo6Y29weXNpZ247CisgIHVzaW5nIDo6Y29weXNpZ25mOworICB1c2luZyA6OmNvcHlzaWdubDsKKworICB1c2luZyA6OmVyZjsKKyAgdXNpbmcgOjplcmZmOworICB1c2luZyA6OmVyZmw7CisKKyAgdXNpbmcgOjplcmZjOworICB1c2luZyA6OmVyZmNmOworICB1c2luZyA6OmVyZmNsOworCisgIHVzaW5nIDo6ZXhwMjsKKyAgdXNpbmcgOjpleHAyZjsKKyAgdXNpbmcgOjpleHAybDsKKworICB1c2luZyA6OmV4cG0xOworICB1c2luZyA6OmV4cG0xZjsKKyAgdXNpbmcgOjpleHBtMWw7CisKKyAgdXNpbmcgOjpmZGltOworICB1c2luZyA6OmZkaW1mOworICB1c2luZyA6OmZkaW1sOworCisgIHVzaW5nIDo6Zm1hOworICB1c2luZyA6OmZtYWY7CisgIHVzaW5nIDo6Zm1hbDsKKworICB1c2luZyA6OmZtYXg7CisgIHVzaW5nIDo6Zm1heGY7CisgIHVzaW5nIDo6Zm1heGw7CisKKyAgdXNpbmcgOjpmbWluOworICB1c2luZyA6OmZtaW5mOworICB1c2luZyA6OmZtaW5sOworCisgIHVzaW5nIDo6aHlwb3Q7CisgIHVzaW5nIDo6aHlwb3RmOworICB1c2luZyA6Omh5cG90bDsKKworICB1c2luZyA6Omlsb2diOworICB1c2luZyA6Omlsb2diZjsKKyAgdXNpbmcgOjppbG9nYmw7CisKKyAgdXNpbmcgOjpsZ2FtbWE7CisgIHVzaW5nIDo6bGdhbW1hZjsKKyAgdXNpbmcgOjpsZ2FtbWFsOworCisgIHVzaW5nIDo6bGxyaW50OworICB1c2luZyA6OmxscmludGY7CisgIHVzaW5nIDo6bGxyaW50bDsKKworICB1c2luZyA6Omxscm91bmQ7CisgIHVzaW5nIDo6bGxyb3VuZGY7CisgIHVzaW5nIDo6bGxyb3VuZGw7CisKKyAgdXNpbmcgOjpsb2cxcDsKKyAgdXNpbmcgOjpsb2cxcGY7CisgIHVzaW5nIDo6bG9nMXBsOworCisgIHVzaW5nIDo6bG9nMjsKKyAgdXNpbmcgOjpsb2cyZjsKKyAgdXNpbmcgOjpsb2cybDsKKworICB1c2luZyA6OmxvZ2I7CisgIHVzaW5nIDo6bG9nYmY7CisgIHVzaW5nIDo6bG9nYmw7CisKKyAgdXNpbmcgOjpscmludDsKKyAgdXNpbmcgOjpscmludGY7CisgIHVzaW5nIDo6bHJpbnRsOworCisgIHVzaW5nIDo6bHJvdW5kOworICB1c2luZyA6Omxyb3VuZGY7CisgIHVzaW5nIDo6bHJvdW5kbDsKKworICB1c2luZyA6Om5hbjsKKyAgdXNpbmcgOjpuYW5mOworICB1c2luZyA6Om5hbmw7CisKKyAgdXNpbmcgOjpuZWFyYnlpbnQ7CisgIHVzaW5nIDo6bmVhcmJ5aW50ZjsKKyAgdXNpbmcgOjpuZWFyYnlpbnRsOworCisgIHVzaW5nIDo6bmV4dGFmdGVyOworICB1c2luZyA6Om5leHRhZnRlcmY7CisgIHVzaW5nIDo6bmV4dGFmdGVybDsKKworICB1c2luZyA6Om5leHR0b3dhcmQ7CisgIHVzaW5nIDo6bmV4dHRvd2FyZGY7CisgIHVzaW5nIDo6bmV4dHRvd2FyZGw7CisKKyAgdXNpbmcgOjpyZW1haW5kZXI7CisgIHVzaW5nIDo6cmVtYWluZGVyZjsKKyAgdXNpbmcgOjpyZW1haW5kZXJsOworCisgIHVzaW5nIDo6cmVtcXVvOworICB1c2luZyA6OnJlbXF1b2Y7CisgIHVzaW5nIDo6cmVtcXVvbDsKKworICB1c2luZyA6OnJpbnQ7CisgIHVzaW5nIDo6cmludGY7CisgIHVzaW5nIDo6cmludGw7CisKKyAgdXNpbmcgOjpyb3VuZDsKKyAgdXNpbmcgOjpyb3VuZGY7CisgIHVzaW5nIDo6cm91bmRsOworCisgIHVzaW5nIDo6c2NhbGJsbjsKKyAgdXNpbmcgOjpzY2FsYmxuZjsKKyAgdXNpbmcgOjpzY2FsYmxubDsKKworICB1c2luZyA6OnNjYWxibjsKKyAgdXNpbmcgOjpzY2FsYm5mOworICB1c2luZyA6OnNjYWxibmw7CisKKyAgdXNpbmcgOjp0Z2FtbWE7CisgIHVzaW5nIDo6dGdhbW1hZjsKKyAgdXNpbmcgOjp0Z2FtbWFsOworCisgIHVzaW5nIDo6dHJ1bmM7CisgIHVzaW5nIDo6dHJ1bmNmOworICB1c2luZyA6OnRydW5jbDsKKworICAvLy8gQWRkaXRpb25hbCBvdmVybG9hZHMuCisgIGNvbnN0ZXhwciBmbG9hdAorICBhY29zaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hY29zaGYoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGRvdWJsZQorICBhY29zaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hY29zaGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgYWNvc2goX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fYWNvc2goX194KTsgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICBhc2luaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hc2luaGYoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGRvdWJsZQorICBhc2luaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hc2luaGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgYXNpbmgoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fYXNpbmgoX194KTsgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICBhdGFuaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuaGYoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGRvdWJsZQorICBhdGFuaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuaGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgYXRhbmgoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fYXRhbmgoX194KTsgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICBjYnJ0KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2NicnRmKF9feCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgY2JydChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYnJ0bChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBjYnJ0KF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2NicnQoX194KTsgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICBjb3B5c2lnbihmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2NvcHlzaWduZihfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgY29weXNpZ24obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3B5c2lnbmwoX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICBjb3B5c2lnbihfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gY29weXNpZ24oX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgY29uc3RleHByIGZsb2F0CisgIGVyZihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9lcmZmKF9feCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgZXJmKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2VyZmwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgZXJmKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2VyZihfX3gpOyB9CisKKyAgY29uc3RleHByIGZsb2F0CisgIGVyZmMoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZXJmY2YoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGRvdWJsZQorICBlcmZjKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2VyZmNsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGVyZmMoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fZXJmYyhfX3gpOyB9CisKKyAgY29uc3RleHByIGZsb2F0CisgIGV4cDIoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZXhwMmYoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGRvdWJsZQorICBleHAyKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cDJsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGV4cDIoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fZXhwMihfX3gpOyB9CisKKyAgY29uc3RleHByIGZsb2F0CisgIGV4cG0xKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cG0xZihfX3gpOyB9CisKKyAgY29uc3RleHByIGxvbmcgZG91YmxlCisgIGV4cG0xKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cG0xbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBleHBtMShfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9leHBtMShfX3gpOyB9CisKKyAgY29uc3RleHByIGZsb2F0CisgIGZkaW0oZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mZGltZihfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgZmRpbShsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZkaW1sKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgZmRpbShfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gZmRpbShfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICBjb25zdGV4cHIgZmxvYXQKKyAgZm1hKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbWFmKF9feCwgX195LCBfX3opOyB9CisKKyAgY29uc3RleHByIGxvbmcgZG91YmxlCisgIGZtYShsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fZm1hbChfX3gsIF9feSwgX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfVnA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzM8X1RwLCBfVXAsIF9WcD46Ol9fdHlwZQorICAgIGZtYShfVHAgX194LCBfVXAgX195LCBfVnAgX196KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMzxfVHAsIF9VcCwgX1ZwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBmbWEoX190eXBlKF9feCksIF9fdHlwZShfX3kpLCBfX3R5cGUoX196KSk7CisgICAgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICBmbWF4KGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fZm1heGYoX194LCBfX3kpOyB9CisKKyAgY29uc3RleHByIGxvbmcgZG91YmxlCisgIGZtYXgobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbWF4bChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIGZtYXgoX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGZtYXgoX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgY29uc3RleHByIGZsb2F0CisgIGZtaW4oZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbWluZihfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgZm1pbihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZtaW5sKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgZm1pbihfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gZm1pbihfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICBjb25zdGV4cHIgZmxvYXQKKyAgaHlwb3QoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9oeXBvdGYoX194LCBfX3kpOyB9CisKKyAgY29uc3RleHByIGxvbmcgZG91YmxlCisgIGh5cG90KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5faHlwb3RsKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgaHlwb3QoX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGh5cG90KF9fdHlwZShfX3gpLCBfX3R5cGUoX195KSk7CisgICAgfQorCisgIGNvbnN0ZXhwciBpbnQKKyAgaWxvZ2IoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5faWxvZ2JmKF9feCk7IH0KKworICBjb25zdGV4cHIgaW50CisgIGlsb2diKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2lsb2dibChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwcgorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Pjo6X190eXBlCisgICAgaWxvZ2IoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5faWxvZ2IoX194KTsgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICBsZ2FtbWEoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbGdhbW1hZihfX3gpOyB9CisKKyAgY29uc3RleHByIGxvbmcgZG91YmxlCisgIGxnYW1tYShsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sZ2FtbWFsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGxnYW1tYShfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9sZ2FtbWEoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGxvbmcKKyAgbGxyaW50KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xscmludGYoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGxvbmcKKyAgbGxyaW50KGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xscmludGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nPjo6X190eXBlCisgICAgbGxyaW50KF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2xscmludChfX3gpOyB9CisKKyAgY29uc3RleHByIGxvbmcgbG9uZworICBsbHJvdW5kKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xscm91bmRmKF9feCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBsb25nCisgIGxscm91bmQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbGxyb3VuZGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nPjo6X190eXBlCisgICAgbGxyb3VuZChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9sbHJvdW5kKF9feCk7IH0KKworICBjb25zdGV4cHIgZmxvYXQKKyAgbG9nMXAoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMXBmKF9feCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgbG9nMXAobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMXBsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGxvZzFwKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2xvZzFwKF9feCk7IH0KKworICAvLyBEUiA1NjguCisgIGNvbnN0ZXhwciBmbG9hdAorICBsb2cyKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZzJmKF9feCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgbG9nMihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2cybChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBsb2cyKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2xvZzIoX194KTsgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICBsb2diKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZ2JmKF9feCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgbG9nYihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2dibChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBsb2diKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2xvZ2IoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nCisgIGxyaW50KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xyaW50ZihfX3gpOyB9CisKKyAgY29uc3RleHByIGxvbmcKKyAgbHJpbnQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbHJpbnRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmc+OjpfX3R5cGUKKyAgICBscmludChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9scmludChfX3gpOyB9CisKKyAgY29uc3RleHByIGxvbmcKKyAgbHJvdW5kKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xyb3VuZGYoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nCisgIGxyb3VuZChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9scm91bmRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmc+OjpfX3R5cGUKKyAgICBscm91bmQoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbHJvdW5kKF9feCk7IH0KKworICBjb25zdGV4cHIgZmxvYXQKKyAgbmVhcmJ5aW50KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX25lYXJieWludGYoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGRvdWJsZQorICBuZWFyYnlpbnQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmVhcmJ5aW50bChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBuZWFyYnlpbnQoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbmVhcmJ5aW50KF9feCk7IH0KKworICBjb25zdGV4cHIgZmxvYXQKKyAgbmV4dGFmdGVyKGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmV4dGFmdGVyZihfX3gsIF9feSk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgbmV4dGFmdGVyKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmV4dGFmdGVybChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIG5leHRhZnRlcihfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gbmV4dGFmdGVyKF9fdHlwZShfX3gpLCBfX3R5cGUoX195KSk7CisgICAgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICBuZXh0dG93YXJkKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmV4dHRvd2FyZGYoX194LCBfX3kpOyB9CisKKyAgY29uc3RleHByIGxvbmcgZG91YmxlCisgIG5leHR0b3dhcmQobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9uZXh0dG93YXJkbChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIG5leHR0b3dhcmQoX1RwIF9feCwgbG9uZyBkb3VibGUgX195KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uZXh0dG93YXJkKF9feCwgX195KTsgfQorCisgIGNvbnN0ZXhwciBmbG9hdAorICByZW1haW5kZXIoZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yZW1haW5kZXJmKF9feCwgX195KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGRvdWJsZQorICByZW1haW5kZXIobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yZW1haW5kZXJsKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgcmVtYWluZGVyKF9UcCBfX3gsIF9VcCBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiByZW1haW5kZXIoX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIHJlbXF1byhmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50KiBfX3BxdW8pCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yZW1xdW9mKF9feCwgX195LCBfX3BxdW8pOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHJlbXF1byhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50KiBfX3BxdW8pCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yZW1xdW9sKF9feCwgX195LCBfX3BxdW8pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICByZW1xdW8oX1RwIF9feCwgX1VwIF9feSwgaW50KiBfX3BxdW8pCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiByZW1xdW8oX190eXBlKF9feCksIF9fdHlwZShfX3kpLCBfX3BxdW8pOworICAgIH0KKworICBjb25zdGV4cHIgZmxvYXQKKyAgcmludChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yaW50ZihfX3gpOyB9CisKKyAgY29uc3RleHByIGxvbmcgZG91YmxlCisgIHJpbnQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fcmludGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgcmludChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9yaW50KF9feCk7IH0KKworICBjb25zdGV4cHIgZmxvYXQKKyAgcm91bmQoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fcm91bmRmKF9feCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgcm91bmQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fcm91bmRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIHJvdW5kKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX3JvdW5kKF9feCk7IH0KKworICBjb25zdGV4cHIgZmxvYXQKKyAgc2NhbGJsbihmbG9hdCBfX3gsIGxvbmcgX19leCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NjYWxibG5mKF9feCwgX19leCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgc2NhbGJsbihsb25nIGRvdWJsZSBfX3gsIGxvbmcgX19leCkKKyAgeyByZXR1cm4gX19idWlsdGluX3NjYWxibG5sKF9feCwgX19leCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZT46Ol9fdHlwZQorICAgIHNjYWxibG4oX1RwIF9feCwgbG9uZyBfX2V4KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9zY2FsYmxuKF9feCwgX19leCk7IH0KKyAKKyAgY29uc3RleHByIGZsb2F0CisgIHNjYWxibihmbG9hdCBfX3gsIGludCBfX2V4KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2NhbGJuZihfX3gsIF9fZXgpOyB9CisKKyAgY29uc3RleHByIGxvbmcgZG91YmxlCisgIHNjYWxibihsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4KQorICB7IHJldHVybiBfX2J1aWx0aW5fc2NhbGJubChfX3gsIF9fZXgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGU+OjpfX3R5cGUKKyAgICBzY2FsYm4oX1RwIF9feCwgaW50IF9fZXgpCisgICAgeyByZXR1cm4gX19idWlsdGluX3NjYWxibihfX3gsIF9fZXgpOyB9CisKKyAgY29uc3RleHByIGZsb2F0CisgIHRnYW1tYShmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90Z2FtbWFmKF9feCk7IH0KKworICBjb25zdGV4cHIgbG9uZyBkb3VibGUKKyAgdGdhbW1hKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3RnYW1tYWwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgdGdhbW1hKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX3RnYW1tYShfX3gpOyB9CisgCisgIGNvbnN0ZXhwciBmbG9hdAorICB0cnVuYyhmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90cnVuY2YoX194KTsgfQorCisgIGNvbnN0ZXhwciBsb25nIGRvdWJsZQorICB0cnVuYyhsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90cnVuY2woX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlPjo6X190eXBlCisgICAgdHJ1bmMoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fdHJ1bmMoX194KTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY29tcGxleCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY29tcGxleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDlmMjkxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jb21wbGV4CkBAIC0wLDAgKzEsMTkzMyBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgLSotIEMrKyAtKi0gY29tcGxleCBudW1iZXIgY2xhc3Nlcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY29tcGxleAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI2LjIgIENvbXBsZXggTnVtYmVycworLy8gTm90ZTogdGhpcyBpcyBub3QgYSBjb25mb3JtaW5nIGltcGxlbWVudGF0aW9uLgorLy8gSW5pdGlhbGx5IGltcGxlbWVudGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+CisvLyBJbXByb3ZlZCBieSBHYWJyaWVsIERvcyBSZWlzIDxkb3NyZWlzQGNtbGEuZW5zLWNhY2hhbi5mcj4KKy8vCisKKyNpZm5kZWYgX0dMSUJDWFhfQ09NUExFWAorI2RlZmluZSBfR0xJQkNYWF9DT01QTEVYIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHNzdHJlYW0+CisKKy8vIEdldCByaWQgb2YgYSBtYWNybyBwb3NzaWJseSBkZWZpbmVkIGluIDxjb21wbGV4Lmg+CisjdW5kZWYgY29tcGxleAorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBjb21wbGV4X251bWJlcnMgQ29tcGxleCBOdW1iZXJzCisgICAqIEBpbmdyb3VwIG51bWVyaWNzCisgICAqCisgICAqIENsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgY29tcGxleCBudW1iZXJzLgorICAgKiBAeworICAgKi8KKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjbGFzcyBjb21wbGV4OworICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBsZXg8ZmxvYXQ+OworICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBsZXg8ZG91YmxlPjsKKyAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGxvbmcgZG91YmxlPjsKKworICAvLy8gIFJldHVybiBtYWduaXR1ZGUgb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgYWJzKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAvLy8gIFJldHVybiBwaGFzZSBhbmdsZSBvZiBAYSB6LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBhcmcoY29uc3QgY29tcGxleDxfVHA+Jik7CisgIC8vLyAgUmV0dXJuIEBhIHogbWFnbml0dWRlIHNxdWFyZWQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIG5vcm0oY29uc3QgY29tcGxleDxfVHA+Jik7CisKKyAgLy8vICBSZXR1cm4gY29tcGxleCBjb25qdWdhdGUgb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gY29uaihjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vICBSZXR1cm4gY29tcGxleCB3aXRoIG1hZ25pdHVkZSBAYSByaG8gYW5kIGFuZ2xlIEBhIHRoZXRhLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb2xhcihjb25zdCBfVHAmLCBjb25zdCBfVHAmID0gMCk7CisKKyAgLy8gVHJhbnNjZW5kZW50YWxzOgorICAvLy8gUmV0dXJuIGNvbXBsZXggY29zaW5lIG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGNvcyhjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vIFJldHVybiBjb21wbGV4IGh5cGVyYm9saWMgY29zaW5lIG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGNvc2goY29uc3QgY29tcGxleDxfVHA+Jik7CisgIC8vLyBSZXR1cm4gY29tcGxleCBiYXNlIGUgZXhwb25lbnRpYWwgb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAvLy8gUmV0dXJuIGNvbXBsZXggbmF0dXJhbCBsb2dhcml0aG0gb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gbG9nKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAvLy8gUmV0dXJuIGNvbXBsZXggYmFzZSAxMCBsb2dhcml0aG0gb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gbG9nMTAoY29uc3QgY29tcGxleDxfVHA+Jik7CisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgIC8vIERSIDg0NC4KKyAgLy8vIFJldHVybiBAYSB4IHRvIHRoZSBAYSB5J3RoIHBvd2VyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgY29tcGxleDxfVHA+JiwgaW50KTsKKyNlbmRpZgorICAvLy8gUmV0dXJuIEBhIHggdG8gdGhlIEBhIHkndGggcG93ZXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHBvdyhjb25zdCBjb21wbGV4PF9UcD4mLCBjb25zdCBfVHAmKTsKKyAgLy8vIFJldHVybiBAYSB4IHRvIHRoZSBAYSB5J3RoIHBvd2VyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgY29tcGxleDxfVHA+JiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vIFJldHVybiBAYSB4IHRvIHRoZSBAYSB5J3RoIHBvd2VyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgX1RwJiwgY29uc3QgY29tcGxleDxfVHA+Jik7CisgIC8vLyBSZXR1cm4gY29tcGxleCBzaW5lIG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHNpbihjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vIFJldHVybiBjb21wbGV4IGh5cGVyYm9saWMgc2luZSBvZiBAYSB6LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBzaW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAvLy8gUmV0dXJuIGNvbXBsZXggc3F1YXJlIHJvb3Qgb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gc3FydChjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgLy8vIFJldHVybiBjb21wbGV4IHRhbmdlbnQgb2YgQGEgei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gdGFuKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAvLy8gUmV0dXJuIGNvbXBsZXggaHlwZXJib2xpYyB0YW5nZW50IG9mIEBhIHouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHRhbmgoY29uc3QgY29tcGxleDxfVHA+Jik7CisgICAgCisgICAgCisgIC8vIDI2LjIuMiAgUHJpbWFyeSB0ZW1wbGF0ZSBjbGFzcyBjb21wbGV4CisgIC8qKgorICAgKiAgVGVtcGxhdGUgdG8gcmVwcmVzZW50IGNvbXBsZXggbnVtYmVycy4KKyAgICoKKyAgICogIFNwZWNpYWxpemF0aW9ucyBmb3IgZmxvYXQsIGRvdWJsZSwgYW5kIGxvbmcgZG91YmxlIGFyZSBwYXJ0IG9mIHRoZQorICAgKiAgbGlicmFyeS4gIFJlc3VsdHMgd2l0aCBhbnkgb3RoZXIgdHlwZSBhcmUgbm90IGd1YXJhbnRlZWQuCisgICAqCisgICAqICBAcGFyYW0gIFRwICBUeXBlIG9mIHJlYWwgYW5kIGltYWdpbmFyeSB2YWx1ZXMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgY29tcGxleAorICAgIHsKKyAgICAgIC8vLyBWYWx1ZSB0eXBlZGVmLgorICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKKyAgICAgIAorICAgICAgLy8vICBEZWZhdWx0IGNvbnN0cnVjdG9yLiAgRmlyc3QgcGFyYW1ldGVyIGlzIHgsIHNlY29uZCBwYXJhbWV0ZXIgaXMgeS4KKyAgICAgIC8vLyAgVW5zcGVjaWZpZWQgcGFyYW1ldGVycyBkZWZhdWx0IHRvIDAuCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgY29tcGxleChjb25zdCBfVHAmIF9fciA9IF9UcCgpLCBjb25zdCBfVHAmIF9faSA9IF9UcCgpKQorICAgICAgOiBfTV9yZWFsKF9fciksIF9NX2ltYWcoX19pKSB7IH0KKworICAgICAgLy8gTGV0cyB0aGUgY29tcGlsZXIgc3ludGhlc2l6ZSB0aGUgY29weSBjb25zdHJ1Y3RvciAgIAorICAgICAgLy8gY29tcGxleCAoY29uc3QgY29tcGxleDxfVHA+Jik7CisgICAgICAvLy8gIENvcHkgY29uc3RydWN0b3IuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBjb21wbGV4KGNvbnN0IGNvbXBsZXg8X1VwPiYgX196KQorCTogX01fcmVhbChfX3oucmVhbCgpKSwgX01faW1hZyhfX3ouaW1hZygpKSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDM4Ny4gc3RkOjpjb21wbGV4IG92ZXItZW5jYXBzdWxhdGVkLgorICAgICAgX0dMSUJDWFhfQUJJX1RBR19DWFgxMQorICAgICAgY29uc3RleHByIF9UcCAKKyAgICAgIHJlYWwoKSB7IHJldHVybiBfTV9yZWFsOyB9CisKKyAgICAgIF9HTElCQ1hYX0FCSV9UQUdfQ1hYMTEKKyAgICAgIGNvbnN0ZXhwciBfVHAgCisgICAgICBpbWFnKCkgeyByZXR1cm4gX01faW1hZzsgfQorI2Vsc2UKKyAgICAgIC8vLyAgUmV0dXJuIHJlYWwgcGFydCBvZiBjb21wbGV4IG51bWJlci4KKyAgICAgIF9UcCYgCisgICAgICByZWFsKCkgeyByZXR1cm4gX01fcmVhbDsgfQorCisgICAgICAvLy8gIFJldHVybiByZWFsIHBhcnQgb2YgY29tcGxleCBudW1iZXIuCisgICAgICBjb25zdCBfVHAmIAorICAgICAgcmVhbCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlYWw7IH0KKworICAgICAgLy8vICBSZXR1cm4gaW1hZ2luYXJ5IHBhcnQgb2YgY29tcGxleCBudW1iZXIuCisgICAgICBfVHAmIAorICAgICAgaW1hZygpIHsgcmV0dXJuIF9NX2ltYWc7IH0KKworICAgICAgLy8vICBSZXR1cm4gaW1hZ2luYXJ5IHBhcnQgb2YgY29tcGxleCBudW1iZXIuCisgICAgICBjb25zdCBfVHAmIAorICAgICAgaW1hZygpIGNvbnN0IHsgcmV0dXJuIF9NX2ltYWc7IH0KKyNlbmRpZgorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiAzODcuIHN0ZDo6Y29tcGxleCBvdmVyLWVuY2Fwc3VsYXRlZC4KKyAgICAgIHZvaWQgCisgICAgICByZWFsKF9UcCBfX3ZhbCkgeyBfTV9yZWFsID0gX192YWw7IH0KKworICAgICAgdm9pZCAKKyAgICAgIGltYWcoX1RwIF9fdmFsKSB7IF9NX2ltYWcgPSBfX3ZhbDsgfQorCisgICAgICAvLy8gQXNzaWduIHRoaXMgY29tcGxleCBudW1iZXIgdG8gc2NhbGFyIEBhIHQuCisgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmKTsKKyAgICAgIAorICAgICAgLy8vIEFkZCBAYSB0IHRvIHRoaXMgY29tcGxleCBudW1iZXIuCisgICAgICAvLyAyNi4yLjUvMQorICAgICAgY29tcGxleDxfVHA+JgorICAgICAgb3BlcmF0b3IrPShjb25zdCBfVHAmIF9fdCkKKyAgICAgIHsKKwlfTV9yZWFsICs9IF9fdDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vLyBTdWJ0cmFjdCBAYSB0IGZyb20gdGhpcyBjb21wbGV4IG51bWJlci4KKyAgICAgIC8vIDI2LjIuNS8zCisgICAgICBjb21wbGV4PF9UcD4mCisgICAgICBvcGVyYXRvci09KGNvbnN0IF9UcCYgX190KQorICAgICAgeworCV9NX3JlYWwgLT0gX190OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8vIE11bHRpcGx5IHRoaXMgY29tcGxleCBudW1iZXIgYnkgQGEgdC4KKyAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3IqPShjb25zdCBfVHAmKTsKKyAgICAgIC8vLyBEaXZpZGUgdGhpcyBjb21wbGV4IG51bWJlciBieSBAYSB0LgorICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvci89KGNvbnN0IF9UcCYpOworCisgICAgICAvLyBMZXRzIHRoZSBjb21waWxlciBzeW50aGVzaXplIHRoZQorICAgICAgLy8gY29weSBhbmQgYXNzaWdubWVudCBvcGVyYXRvcgorICAgICAgLy8gY29tcGxleDxfVHA+JiBvcGVyYXRvcj0gKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICAgICAgLy8vIEFzc2lnbiB0aGlzIGNvbXBsZXggbnVtYmVyIHRvIGNvbXBsZXggQGEgei4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+Jik7CisgICAgICAvLy8gQWRkIEBhIHogdG8gdGhpcyBjb21wbGV4IG51bWJlci4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvcis9KGNvbnN0IGNvbXBsZXg8X1VwPiYpOworICAgICAgLy8vIFN1YnRyYWN0IEBhIHogZnJvbSB0aGlzIGNvbXBsZXggbnVtYmVyLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+Jik7CisgICAgICAvLy8gTXVsdGlwbHkgdGhpcyBjb21wbGV4IG51bWJlciBieSBAYSB6LgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKj0oY29uc3QgY29tcGxleDxfVXA+Jik7CisgICAgICAvLy8gRGl2aWRlIHRoaXMgY29tcGxleCBudW1iZXIgYnkgQGEgei4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1VwPiYpOworCisgICAgICBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGNvbXBsZXggX19yZXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfVHAgX01fcmVhbDsKKyAgICAgIF9UcCBfTV9pbWFnOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbXBsZXg8X1RwPiYKKyAgICBjb21wbGV4PF9UcD46Om9wZXJhdG9yPShjb25zdCBfVHAmIF9fdCkKKyAgICB7CisgICAgIF9NX3JlYWwgPSBfX3Q7CisgICAgIF9NX2ltYWcgPSBfVHAoKTsKKyAgICAgcmV0dXJuICp0aGlzOworICAgIH0gCisKKyAgLy8gMjYuMi41LzUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbXBsZXg8X1RwPiYKKyAgICBjb21wbGV4PF9UcD46Om9wZXJhdG9yKj0oY29uc3QgX1RwJiBfX3QpCisgICAgeworICAgICAgX01fcmVhbCAqPSBfX3Q7CisgICAgICBfTV9pbWFnICo9IF9fdDsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgLy8gMjYuMi41LzcKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbXBsZXg8X1RwPiYKKyAgICBjb21wbGV4PF9UcD46Om9wZXJhdG9yLz0oY29uc3QgX1RwJiBfX3QpCisgICAgeworICAgICAgX01fcmVhbCAvPSBfX3Q7CisgICAgICBfTV9pbWFnIC89IF9fdDsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICBjb21wbGV4PF9UcD4mCisgICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCisgICAgeworICAgICAgX01fcmVhbCA9IF9fei5yZWFsKCk7CisgICAgICBfTV9pbWFnID0gX196LmltYWcoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgLy8gMjYuMi41LzkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICBjb21wbGV4PF9UcD4mCisgICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcis9KGNvbnN0IGNvbXBsZXg8X1VwPiYgX196KQorICAgIHsKKyAgICAgIF9NX3JlYWwgKz0gX196LnJlYWwoKTsKKyAgICAgIF9NX2ltYWcgKz0gX196LmltYWcoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgLy8gMjYuMi41LzExCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgY29tcGxleDxfVHA+JgorICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKKyAgICB7CisgICAgICBfTV9yZWFsIC09IF9fei5yZWFsKCk7CisgICAgICBfTV9pbWFnIC09IF9fei5pbWFnKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIC8vIDI2LjIuNS8xMworICAvLyBYWFg6IFRoaXMgaXMgYSBncmFtbWFyIHNjaG9vbCBpbXBsZW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICBjb21wbGV4PF9UcD4mCisgICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0IGNvbXBsZXg8X1VwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX3IgPSBfTV9yZWFsICogX196LnJlYWwoKSAtIF9NX2ltYWcgKiBfX3ouaW1hZygpOworICAgICAgX01faW1hZyA9IF9NX3JlYWwgKiBfX3ouaW1hZygpICsgX01faW1hZyAqIF9fei5yZWFsKCk7CisgICAgICBfTV9yZWFsID0gX19yOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAvLyAyNi4yLjUvMTUKKyAgLy8gWFhYOiBUaGlzIGlzIGEgZ3JhbW1hciBzY2hvb2wgaW1wbGVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgY29tcGxleDxfVHA+JgorICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19yID0gIF9NX3JlYWwgKiBfX3oucmVhbCgpICsgX01faW1hZyAqIF9fei5pbWFnKCk7CisgICAgICBjb25zdCBfVHAgX19uID0gc3RkOjpub3JtKF9feik7CisgICAgICBfTV9pbWFnID0gKF9NX2ltYWcgKiBfX3oucmVhbCgpIC0gX01fcmVhbCAqIF9fei5pbWFnKCkpIC8gX19uOworICAgICAgX01fcmVhbCA9IF9fciAvIF9fbjsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgIC8vIE9wZXJhdG9yczoKKyAgLy9AeworICAvLy8gIFJldHVybiBuZXcgY29tcGxleCB2YWx1ZSBAYSB4IHBsdXMgQGEgeS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvcisoY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3g7CisgICAgICBfX3IgKz0gX195OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvcisoY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9UcCYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3g7CisgICAgICBfX3IgKz0gX195OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvcisoY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3k7CisgICAgICBfX3IgKz0gX194OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisgIC8vQH0KKworICAvL0B7CisgIC8vLyAgUmV0dXJuIG5ldyBjb21wbGV4IHZhbHVlIEBhIHggbWludXMgQGEgeS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsKKyAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3g7CisgICAgICBfX3IgLT0gX195OworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisgICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3ItKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICB7CisgICAgICBjb21wbGV4PF9UcD4gX19yID0gX194OworICAgICAgX19yIC09IF9feTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3ItKGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7CisgICAgICBjb21wbGV4PF9UcD4gX19yKF9feCwgLV9feS5pbWFnKCkpOworICAgICAgX19yIC09IF9feS5yZWFsKCk7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKyAgLy9AfQorCisgIC8vQHsKKyAgLy8vICBSZXR1cm4gbmV3IGNvbXBsZXggdmFsdWUgQGEgeCB0aW1lcyBAYSB5LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yKihjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9fciA9IF9feDsKKyAgICAgIF9fciAqPSBfX3k7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yKihjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9fciA9IF9feDsKKyAgICAgIF9fciAqPSBfX3k7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yKihjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9fciA9IF9feTsKKyAgICAgIF9fciAqPSBfX3g7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKyAgLy9AfQorCisgIC8vQHsKKyAgLy8vICBSZXR1cm4gbmV3IGNvbXBsZXggdmFsdWUgQGEgeCBkaXZpZGVkIGJ5IEBhIHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3IvKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7CisgICAgICBjb21wbGV4PF9UcD4gX19yID0gX194OworICAgICAgX19yIC89IF9feTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yLyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9fciA9IF9feDsKKyAgICAgIF9fciAvPSBfX3k7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIG9wZXJhdG9yLyhjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9fciA9IF9feDsKKyAgICAgIF9fciAvPSBfX3k7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKyAgLy9AfQorCisgIC8vLyAgUmV0dXJuIEBhIHguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgb3BlcmF0b3IrKGNvbnN0IGNvbXBsZXg8X1RwPiYgX194KQorICAgIHsgcmV0dXJuIF9feDsgfQorCisgIC8vLyAgUmV0dXJuIGNvbXBsZXggbmVnYXRpb24gb2YgQGEgeC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gpCisgICAgeyAgcmV0dXJuIGNvbXBsZXg8X1RwPigtX194LnJlYWwoKSwgLV9feC5pbWFnKCkpOyB9CisKKyAgLy9AeworICAvLy8gIFJldHVybiB0cnVlIGlmIEBhIHggaXMgZXF1YWwgdG8gQGEgeS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5yZWFsKCkgPT0gX195LnJlYWwoKSAmJiBfX3guaW1hZygpID09IF9feS5pbWFnKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCisgICAgeyByZXR1cm4gX194LnJlYWwoKSA9PSBfX3kgJiYgX194LmltYWcoKSA9PSBfVHAoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7IHJldHVybiBfX3ggPT0gX195LnJlYWwoKSAmJiBfVHAoKSA9PSBfX3kuaW1hZygpOyB9CisgIC8vQH0KKworICAvL0B7CisgIC8vLyAgUmV0dXJuIGZhbHNlIGlmIEBhIHggaXMgZXF1YWwgdG8gQGEgeS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgY29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5yZWFsKCkgIT0gX195LnJlYWwoKSB8fCBfX3guaW1hZygpICE9IF9feS5pbWFnKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCisgICAgeyByZXR1cm4gX194LnJlYWwoKSAhPSBfX3kgfHwgX194LmltYWcoKSAhPSBfVHAoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7IHJldHVybiBfX3ggIT0gX195LnJlYWwoKSB8fCBfVHAoKSAhPSBfX3kuaW1hZygpOyB9CisgIC8vQH0KKworICAvLy8gIEV4dHJhY3Rpb24gb3BlcmF0b3IgZm9yIGNvbXBsZXggdmFsdWVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGNvbXBsZXg8X1RwPiYgX194KQorICAgIHsKKyAgICAgIF9UcCBfX3JlX3gsIF9faW1feDsKKyAgICAgIF9DaGFyVCBfX2NoOworICAgICAgX19pcyA+PiBfX2NoOworICAgICAgaWYgKF9fY2ggPT0gJygnKSAKKwl7CisJICBfX2lzID4+IF9fcmVfeCA+PiBfX2NoOworCSAgaWYgKF9fY2ggPT0gJywnKSAKKwkgICAgeworCSAgICAgIF9faXMgPj4gX19pbV94ID4+IF9fY2g7CisJICAgICAgaWYgKF9fY2ggPT0gJyknKSAKKwkJX194ID0gY29tcGxleDxfVHA+KF9fcmVfeCwgX19pbV94KTsKKwkgICAgICBlbHNlCisJCV9faXMuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOworCSAgICB9CisJICBlbHNlIGlmIChfX2NoID09ICcpJykgCisJICAgIF9feCA9IF9fcmVfeDsKKwkgIGVsc2UKKwkgICAgX19pcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJfQorICAgICAgZWxzZSAKKwl7CisJICBfX2lzLnB1dGJhY2soX19jaCk7CisJICBfX2lzID4+IF9fcmVfeDsKKwkgIF9feCA9IF9fcmVfeDsKKwl9CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKyAgLy8vICBJbnNlcnRpb24gb3BlcmF0b3IgZm9yIGNvbXBsZXggdmFsdWVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX194KQorICAgIHsKKyAgICAgIGJhc2ljX29zdHJpbmdzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX3M7CisgICAgICBfX3MuZmxhZ3MoX19vcy5mbGFncygpKTsKKyAgICAgIF9fcy5pbWJ1ZShfX29zLmdldGxvYygpKTsKKyAgICAgIF9fcy5wcmVjaXNpb24oX19vcy5wcmVjaXNpb24oKSk7CisgICAgICBfX3MgPDwgJygnIDw8IF9feC5yZWFsKCkgPDwgJywnIDw8IF9feC5pbWFnKCkgPDwgJyknOworICAgICAgcmV0dXJuIF9fb3MgPDwgX19zLnN0cigpOworICAgIH0KKworICAvLyBWYWx1ZXMKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdGV4cHIgX1RwCisgICAgcmVhbChjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX3oucmVhbCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0ZXhwciBfVHAKKyAgICBpbWFnKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fei5pbWFnKCk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwJgorICAgIHJlYWwoY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX196LnJlYWwoKTsgfQorICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbnN0IF9UcCYKKyAgICByZWFsKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fei5yZWFsKCk7IH0KKyAgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAmCisgICAgaW1hZyhjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX3ouaW1hZygpOyB9CisgICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29uc3QgX1RwJgorICAgIGltYWcoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX196LmltYWcoKTsgfQorI2VuZGlmCisKKyAgLy8gMjYuMi43LzMgYWJzKF9feik6ICBSZXR1cm5zIHRoZSBtYWduaXR1ZGUgb2YgX196LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fY29tcGxleF9hYnMoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICBfVHAgX195ID0gX196LmltYWcoKTsKKyAgICAgIGNvbnN0IF9UcCBfX3MgPSBzdGQ6Om1heChhYnMoX194KSwgYWJzKF9feSkpOworICAgICAgaWYgKF9fcyA9PSBfVHAoKSkgIC8vIHdlbGwgLi4uCisgICAgICAgIHJldHVybiBfX3M7CisgICAgICBfX3ggLz0gX19zOyAKKyAgICAgIF9feSAvPSBfX3M7CisgICAgICByZXR1cm4gX19zICogc3FydChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgZmxvYXQKKyAgX19jb21wbGV4X2FicyhfX2NvbXBsZXhfXyBmbG9hdCBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jYWJzZihfX3opOyB9CisKKyAgaW5saW5lIGRvdWJsZQorICBfX2NvbXBsZXhfYWJzKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jYWJzKF9feik7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X2Ficyhjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fic2woX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgYWJzKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfYWJzKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBhYnMoY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9hYnMoX196KTsgfQorI2VuZGlmICAKKworCisgIC8vIDI2LjIuNy80OiBhcmcoX196KTogUmV0dXJucyB0aGUgcGhhc2UgYW5nbGUgb2YgX196LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fY29tcGxleF9hcmcoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gIGF0YW4yKF9fei5pbWFnKCksIF9fei5yZWFsKCkpOyB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIGZsb2F0CisgIF9fY29tcGxleF9hcmcoX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2FyZ2YoX196KTsgfQorCisgIGlubGluZSBkb3VibGUKKyAgX19jb21wbGV4X2FyZyhfX2NvbXBsZXhfXyBkb3VibGUgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2FyZyhfX3opOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hcmcoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhcmdsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIGFyZyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X2FyZyhfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgYXJnKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfYXJnKF9feik7IH0KKyNlbmRpZgorCisgIC8vIDI2LjIuNy81OiBub3JtKF9feikgcmV0dXJucyB0aGUgc3F1YXJlZCBtYWduaXR1ZGUgb2YgX196LgorICAvLyAgICAgQXMgZGVmaW5lZCwgbm9ybSgpIGlzIC1ub3QtIGEgbm9ybSBpcyB0aGUgY29tbW9uIG1hdGhlbWF0aWNhbAorICAvLyAgICAgc2VucyB1c2VkIGluIG51bWVyaWNzLiAgVGhlIGhlbHBlciBjbGFzcyBfTm9ybV9oZWxwZXI8PiB0cmllcyB0bworICAvLyAgICAgZGlzdGluZ3Vpc2ggYmV0d2VlbiBidWlsdGluIGZsb2F0aW5nIHBvaW50IGFuZCB0aGUgcmVzdCwgc28gYXMKKyAgLy8gICAgIHRvIGRlbGl2ZXIgYW4gYW5zd2VyIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSByZWFsIHZhbHVlLgorICB0ZW1wbGF0ZTxib29sPgorICAgIHN0cnVjdCBfTm9ybV9oZWxwZXIKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBpbmxpbmUgX1RwIF9TX2RvX2l0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CisgICAgICAgICAgcmV0dXJuIF9feCAqIF9feCArIF9feSAqIF9feTsKKyAgICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfTm9ybV9oZWxwZXI8dHJ1ZT4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBpbmxpbmUgX1RwIF9TX2RvX2l0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcmVzID0gc3RkOjphYnMoX196KTsKKyAgICAgICAgICByZXR1cm4gX19yZXMgKiBfX3JlczsKKyAgICAgICAgfQorICAgIH07CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIG5vcm0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgcmV0dXJuIF9Ob3JtX2hlbHBlcjxfX2lzX2Zsb2F0aW5nPF9UcD46Ol9fdmFsdWUgCisJJiYgIV9HTElCQ1hYX0ZBU1RfTUFUSD46Ol9TX2RvX2l0KF9feik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgcG9sYXIoY29uc3QgX1RwJiBfX3JobywgY29uc3QgX1RwJiBfX3RoZXRhKQorICAgIHsgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3JobyAqIGNvcyhfX3RoZXRhKSwgX19yaG8gKiBzaW4oX190aGV0YSkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBjb25qKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3oucmVhbCgpLCAtX196LmltYWcoKSk7IH0KKyAgCisgIC8vIFRyYW5zY2VuZGVudGFscworCisgIC8vIDI2LjIuOC8xIGNvcyhfX3opOiAgUmV0dXJucyB0aGUgY29zaW5lIG9mIF9fei4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfY29zKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOworICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CisgICAgICByZXR1cm4gY29tcGxleDxfVHA+KGNvcyhfX3gpICogY29zaChfX3kpLCAtc2luKF9feCkgKiBzaW5oKF9feSkpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2NvcyhfX2NvbXBsZXhfXyBmbG9hdCBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jY29zZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfY29zKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jY29zKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X2Nvcyhjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Nvc2woX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgY29zKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfY29zKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBjb3MoY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9jb3MoX196KTsgfQorI2VuZGlmCisKKyAgLy8gMjYuMi44LzIgY29zaChfX3opOiBSZXR1cm5zIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBfX3ouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X2Nvc2goY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICBjb25zdCBfVHAgX195ID0gX196LmltYWcoKTsKKyAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oY29zaChfX3gpICogY29zKF9feSksIHNpbmgoX194KSAqIHNpbihfX3kpKTsKKyAgICB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9jb3NoKF9fY29tcGxleF9fIGZsb2F0IF9feikgeyByZXR1cm4gX19idWlsdGluX2Njb3NoZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfY29zaChfX2NvbXBsZXhfXyBkb3VibGUgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2Nvc2goX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfY29zaChjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Nvc2hsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIGNvc2goY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9jb3NoKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBjb3NoKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfY29zaChfX3opOyB9CisjZW5kaWYKKworICAvLyAyNi4yLjgvMyBleHAoX196KTogUmV0dXJucyB0aGUgY29tcGxleCBiYXNlIGUgZXhwb25lbnRpYWwgb2YgeAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9leHAoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gc3RkOjpwb2xhcihleHAoX196LnJlYWwoKSksIF9fei5pbWFnKCkpOyB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9leHAoX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2V4cGYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X2V4cChfX2NvbXBsZXhfXyBkb3VibGUgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY2V4cChfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9leHAoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NleHBsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIGV4cChjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X2V4cChfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfZXhwKF9feik7IH0KKyNlbmRpZgorCisgIC8vIDI2LjIuOC81IGxvZyhfX3opOiBSZXR1cm5zIHRoZSBuYXR1cmFsIGNvbXBsZXggbG9nYXJpdGhtIG9mIF9fei4KKyAgLy8gICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2ggY3V0IGlzIGFsb25nIHRoZSBuZWdhdGl2ZSBheGlzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9sb2coY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gY29tcGxleDxfVHA+KGxvZyhzdGQ6OmFicyhfX3opKSwgc3RkOjphcmcoX196KSk7IH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2xvZyhfX2NvbXBsZXhfXyBmbG9hdCBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jbG9nZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfbG9nKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jbG9nKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X2xvZyhjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2xvZ2woX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgbG9nKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfbG9nKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBsb2coY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9sb2coX196KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBsb2cxMChjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBzdGQ6OmxvZyhfX3opIC8gbG9nKF9UcCgxMC4wKSk7IH0KKworICAvLyAyNi4yLjgvMTAgc2luKF9feik6IFJldHVybnMgdGhlIHNpbmUgb2YgX196LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9zaW4oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICBjb25zdCBfVHAgX195ID0gX196LmltYWcoKTsKKyAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oc2luKF9feCkgKiBjb3NoKF9feSksIGNvcyhfX3gpICogc2luaChfX3kpKTsgCisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfc2luKF9fY29tcGxleF9fIGZsb2F0IF9feikgeyByZXR1cm4gX19idWlsdGluX2NzaW5mKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9zaW4oX19jb21wbGV4X18gZG91YmxlIF9feikgeyByZXR1cm4gX19idWlsdGluX2NzaW4oX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfc2luKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jc2lubChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBzaW4oY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9zaW4oX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHNpbihjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3NpbihfX3opOyB9CisjZW5kaWYKKworICAvLyAyNi4yLjgvMTEgc2luaChfX3opOiBSZXR1cm5zIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgX196LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9zaW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOworICAgICAgY29uc3QgX1RwICBfX3kgPSBfX3ouaW1hZygpOworICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihzaW5oKF9feCkgKiBjb3MoX195KSwgY29zaChfX3gpICogc2luKF9feSkpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X3NpbmgoX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY3NpbmhmKF9feik7IH0gICAgICAKKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9zaW5oKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jc2luaChfX3opOyB9ICAgICAgCisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9zaW5oKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jc2luaGwoX196KTsgfSAgICAgIAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgc2luaChjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3NpbmgoX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHNpbmgoY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF9zaW5oKF9feik7IH0KKyNlbmRpZgorCisgIC8vIDI2LjIuOC8xMyBzcXJ0KF9feik6IFJldHVybnMgdGhlIGNvbXBsZXggc3F1YXJlIHJvb3Qgb2YgX196LgorICAvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBicmFuY2ggY3V0IGlzIG9uIHRoZSBuZWdhdGl2ZSBheGlzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X3NxcnQoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgX1RwIF9feCA9IF9fei5yZWFsKCk7CisgICAgICBfVHAgX195ID0gX196LmltYWcoKTsKKworICAgICAgaWYgKF9feCA9PSBfVHAoKSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3QgPSBzcXJ0KGFicyhfX3kpIC8gMik7CisgICAgICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3QsIF9feSA8IF9UcCgpID8gLV9fdCA6IF9fdCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3QgPSBzcXJ0KDIgKiAoc3RkOjphYnMoX196KSArIGFicyhfX3gpKSk7CisgICAgICAgICAgX1RwIF9fdSA9IF9fdCAvIDI7CisgICAgICAgICAgcmV0dXJuIF9feCA+IF9UcCgpCisgICAgICAgICAgICA/IGNvbXBsZXg8X1RwPihfX3UsIF9feSAvIF9fdCkKKyAgICAgICAgICAgIDogY29tcGxleDxfVHA+KGFicyhfX3kpIC8gX190LCBfX3kgPCBfVHAoKSA/IC1fX3UgOiBfX3UpOworICAgICAgICB9CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfc3FydChfX2NvbXBsZXhfXyBmbG9hdCBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jc3FydGYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X3NxcnQoX19jb21wbGV4X18gZG91YmxlIF9feikgeyByZXR1cm4gX19idWlsdGluX2NzcXJ0KF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X3NxcnQoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NzcXJ0bChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBzcXJ0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfc3FydChfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgc3FydChjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3NxcnQoX196KTsgfQorI2VuZGlmCisKKyAgLy8gMjYuMi44LzE0IHRhbihfX3opOiAgUmV0dXJuIHRoZSBjb21wbGV4IHRhbmdlbnQgb2YgX196LgorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfdGFuKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIHN0ZDo6c2luKF9feikgLyBzdGQ6OmNvcyhfX3opOyB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF90YW4oX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY3RhbmYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X3RhbihfX2NvbXBsZXhfXyBkb3VibGUgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY3RhbihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF90YW4oY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2N0YW5sKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHRhbihjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3RhbihfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgdGFuKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KSB7IHJldHVybiBfX2NvbXBsZXhfdGFuKF9feik7IH0KKyNlbmRpZgorCisKKyAgLy8gMjYuMi44LzE1IHRhbmgoX196KTogIFJldHVybnMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBfX3ouCisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF90YW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIHN0ZDo6c2luaChfX3opIC8gc3RkOjpjb3NoKF9feik7IH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X3RhbmgoX19jb21wbGV4X18gZmxvYXQgX196KSB7IHJldHVybiBfX2J1aWx0aW5fY3RhbmhmKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF90YW5oKF9fY29tcGxleF9fIGRvdWJsZSBfX3opIHsgcmV0dXJuIF9fYnVpbHRpbl9jdGFuaChfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF90YW5oKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jdGFuaGwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgdGFuaChjb25zdCBjb21wbGV4PF9UcD4mIF9feikgeyByZXR1cm4gX19jb21wbGV4X3RhbmgoX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHRhbmgoY29uc3QgY29tcGxleDxfVHA+JiBfX3opIHsgcmV0dXJuIF9fY29tcGxleF90YW5oKF9feik7IH0KKyNlbmRpZgorCisKKyAgLy8gMjYuMi44LzkgIHBvdyhfX3gsIF9feSk6IFJldHVybnMgdGhlIGNvbXBsZXggcG93ZXIgYmFzZSBvZiBfX3gKKyAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZCB0byB0aGUgX195LXRoIHBvd2VyLiAgVGhlIGJyYW5jaAorICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgY3V0IGlzIG9uIHRoZSBuZWdhdGl2ZSBheGlzLgorI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X3Bvd191bnNpZ25lZChjb21wbGV4PF9UcD4gX194LCB1bnNpZ25lZCBfX24pCisgICAgeworICAgICAgY29tcGxleDxfVHA+IF9feSA9IF9fbiAlIDIgPyBfX3ggOiBjb21wbGV4PF9UcD4oMSk7CisKKyAgICAgIHdoaWxlIChfX24gPj49IDEpCisgICAgICAgIHsKKyAgICAgICAgICBfX3ggKj0gX194OworICAgICAgICAgIGlmIChfX24gJSAyKQorICAgICAgICAgICAgX195ICo9IF9feDsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gX195OworICAgIH0KKworICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgIC8vIERSIDg0NC4gY29tcGxleCBwb3cgcmV0dXJuIHR5cGUgaXMgYW1iaWd1b3VzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feiwgaW50IF9fbikKKyAgICB7CisgICAgICByZXR1cm4gX19uIDwgMAorCT8gY29tcGxleDxfVHA+KDEpIC8gc3RkOjpfX2NvbXBsZXhfcG93X3Vuc2lnbmVkKF9feiwgLSh1bnNpZ25lZClfX24pCisgICAgICAgIDogc3RkOjpfX2NvbXBsZXhfcG93X3Vuc2lnbmVkKF9feiwgX19uKTsKKyAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29tcGxleDxfVHA+CisgICAgcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICB7CisjaWZuZGVmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWAorICAgICAgaWYgKF9feCA9PSBfVHAoKSkKKwlyZXR1cm4gX1RwKCk7CisjZW5kaWYKKyAgICAgIGlmIChfX3guaW1hZygpID09IF9UcCgpICYmIF9feC5yZWFsKCkgPiBfVHAoKSkKKyAgICAgICAgcmV0dXJuIHBvdyhfX3gucmVhbCgpLCBfX3kpOworCisgICAgICBjb21wbGV4PF9UcD4gX190ID0gc3RkOjpsb2coX194KTsKKyAgICAgIHJldHVybiBzdGQ6OnBvbGFyKGV4cChfX3kgKiBfX3QucmVhbCgpKSwgX195ICogX190LmltYWcoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X3Bvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeyByZXR1cm4gX194ID09IF9UcCgpID8gX1RwKCkgOiBzdGQ6OmV4cChfX3kgKiBzdGQ6OmxvZyhfX3gpKTsgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfcG93KF9fY29tcGxleF9fIGZsb2F0IF9feCwgX19jb21wbGV4X18gZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fY3Bvd2YoX194LCBfX3kpOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfcG93KF9fY29tcGxleF9fIGRvdWJsZSBfX3gsIF9fY29tcGxleF9fIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jcG93KF9feCwgX195KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfcG93KGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3gsCisJCWNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jcG93bChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeyByZXR1cm4gX19jb21wbGV4X3BvdyhfX3guX19yZXAoKSwgX195Ll9fcmVwKCkpOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCisgICAgeyByZXR1cm4gX19jb21wbGV4X3BvdyhfX3gsIF9feSk7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgcG93KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7CisgICAgICByZXR1cm4gX194ID4gX1RwKCkgPyBzdGQ6OnBvbGFyKHBvdyhfX3gsIF9feS5yZWFsKCkpLAorCQkJCSAgICAgIF9feS5pbWFnKCkgKiBsb2coX194KSkKKwkgICAgICAgICAgICAgICAgIDogc3RkOjpwb3coY29tcGxleDxfVHA+KF9feCksIF9feSk7CisgICAgfQorCisgIC8vLyAyNi4yLjMgIGNvbXBsZXggc3BlY2lhbGl6YXRpb25zCisgIC8vLyBjb21wbGV4PGZsb2F0PiBzcGVjaWFsaXphdGlvbgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGNvbXBsZXg8ZmxvYXQ+CisgICAgeworICAgICAgdHlwZWRlZiBmbG9hdCB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfX2NvbXBsZXhfXyBmbG9hdCBfQ29tcGxleFQ7CisKKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBjb21wbGV4KF9Db21wbGV4VCBfX3opIDogX01fdmFsdWUoX196KSB7IH0KKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIGNvbXBsZXgoZmxvYXQgX19yID0gMC4wZiwgZmxvYXQgX19pID0gMC4wZikKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICA6IF9NX3ZhbHVleyBfX3IsIF9faSB9IHsgfQorI2Vsc2UKKyAgICAgIHsKKwlfX3JlYWxfXyBfTV92YWx1ZSA9IF9fcjsKKwlfX2ltYWdfXyBfTV92YWx1ZSA9IF9faTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBleHBsaWNpdCBfR0xJQkNYWF9DT05TVEVYUFIgY29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mKTsKKyAgICAgIGV4cGxpY2l0IF9HTElCQ1hYX0NPTlNURVhQUiBjb21wbGV4KGNvbnN0IGNvbXBsZXg8bG9uZyBkb3VibGU+Jik7CQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMzg3LiBzdGQ6OmNvbXBsZXggb3Zlci1lbmNhcHN1bGF0ZWQuCisgICAgICBfX2F0dHJpYnV0ZSAoKF9fYWJpX3RhZ19fICgiY3h4MTEiKSkpCisgICAgICBjb25zdGV4cHIgZmxvYXQgCisgICAgICByZWFsKCkgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KKworICAgICAgX19hdHRyaWJ1dGUgKChfX2FiaV90YWdfXyAoImN4eDExIikpKQorICAgICAgY29uc3RleHByIGZsb2F0IAorICAgICAgaW1hZygpIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CisjZWxzZQorICAgICAgZmxvYXQmIAorICAgICAgcmVhbCgpIHsgcmV0dXJuIF9fcmVhbF9fIF9NX3ZhbHVlOyB9CisKKyAgICAgIGNvbnN0IGZsb2F0JiAKKyAgICAgIHJlYWwoKSBjb25zdCB7IHJldHVybiBfX3JlYWxfXyBfTV92YWx1ZTsgfSAgICAgIAorCisgICAgICBmbG9hdCYgCisgICAgICBpbWFnKCkgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKworICAgICAgY29uc3QgZmxvYXQmIAorICAgICAgaW1hZygpIGNvbnN0IHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CisjZW5kaWYKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMzg3LiBzdGQ6OmNvbXBsZXggb3Zlci1lbmNhcHN1bGF0ZWQuCisgICAgICB2b2lkIAorICAgICAgcmVhbChmbG9hdCBfX3ZhbCkgeyBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fdmFsOyB9CisKKyAgICAgIHZvaWQgCisgICAgICBpbWFnKGZsb2F0IF9fdmFsKSB7IF9faW1hZ19fIF9NX3ZhbHVlID0gX192YWw7IH0KKworICAgICAgY29tcGxleCYKKyAgICAgIG9wZXJhdG9yPShmbG9hdCBfX2YpCisgICAgICB7CisJX01fdmFsdWUgPSBfX2Y7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb21wbGV4JgorICAgICAgb3BlcmF0b3IrPShmbG9hdCBfX2YpCisgICAgICB7CisJX01fdmFsdWUgKz0gX19mOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgY29tcGxleCYKKyAgICAgIG9wZXJhdG9yLT0oZmxvYXQgX19mKQorICAgICAgeworCV9NX3ZhbHVlIC09IF9fZjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXgmCisgICAgICBvcGVyYXRvcio9KGZsb2F0IF9fZikKKyAgICAgIHsKKwlfTV92YWx1ZSAqPSBfX2Y7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb21wbGV4JgorICAgICAgb3BlcmF0b3IvPShmbG9hdCBfX2YpCisgICAgICB7CisJX01fdmFsdWUgLz0gX19mOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gTGV0IHRoZSBjb21waWxlciBzeW50aGVzaXplIHRoZSBjb3B5IGFuZCBhc3NpZ25tZW50CisgICAgICAvLyBvcGVyYXRvci4gIEl0IGFsd2F5cyBkb2VzIGEgcHJldHR5IGdvb2Qgam9iLgorICAgICAgLy8gY29tcGxleCYgb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXgmKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb21wbGV4JgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVHA+JiAgX196KQorCXsKKwkgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX196LnJlYWwoKTsKKwkgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleCYKKyAgICAgICAgb3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgKz0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICAgICAgY29tcGxleCYKKyAgICAgICAgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSAtPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgLT0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICAgICAgY29tcGxleCYKKyAgICAgICAgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfQ29tcGxleFQgX190OworCSAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKKwkgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7CisJICBfTV92YWx1ZSAqPSBfX3Q7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgICAgIGNvbXBsZXgmCisgICAgICAgIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisJeworCSAgX0NvbXBsZXhUIF9fdDsKKwkgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOworCSAgX01fdmFsdWUgLz0gX190OworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBfQ29tcGxleFQgX19yZXAoKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9Db21wbGV4VCBfTV92YWx1ZTsKKyAgICB9OworCisgIC8vLyAyNi4yLjMgIGNvbXBsZXggc3BlY2lhbGl6YXRpb25zCisgIC8vLyBjb21wbGV4PGRvdWJsZT4gc3BlY2lhbGl6YXRpb24KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBjb21wbGV4PGRvdWJsZT4KKyAgICB7CisgICAgICB0eXBlZGVmIGRvdWJsZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfX2NvbXBsZXhfXyBkb3VibGUgX0NvbXBsZXhUOworCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgY29tcGxleChfQ29tcGxleFQgX196KSA6IF9NX3ZhbHVlKF9feikgeyB9CisKKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBjb21wbGV4KGRvdWJsZSBfX3IgPSAwLjAsIGRvdWJsZSBfX2kgPSAwLjApCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgOiBfTV92YWx1ZXsgX19yLCBfX2kgfSB7IH0KKyNlbHNlCisgICAgICB7CisJX19yZWFsX18gX01fdmFsdWUgPSBfX3I7CisJX19pbWFnX18gX01fdmFsdWUgPSBfX2k7CisgICAgICB9CisjZW5kaWYKKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIGNvbXBsZXgoY29uc3QgY29tcGxleDxmbG9hdD4mIF9feikKKyAgICAgIDogX01fdmFsdWUoX196Ll9fcmVwKCkpIHsgfQorCisgICAgICBleHBsaWNpdCBfR0xJQkNYWF9DT05TVEVYUFIgY29tcGxleChjb25zdCBjb21wbGV4PGxvbmcgZG91YmxlPiYpOwkKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDM4Ny4gc3RkOjpjb21wbGV4IG92ZXItZW5jYXBzdWxhdGVkLgorICAgICAgX19hdHRyaWJ1dGUgKChfX2FiaV90YWdfXyAoImN4eDExIikpKQorICAgICAgY29uc3RleHByIGRvdWJsZSAKKyAgICAgIHJlYWwoKSB7IHJldHVybiBfX3JlYWxfXyBfTV92YWx1ZTsgfQorCisgICAgICBfX2F0dHJpYnV0ZSAoKF9fYWJpX3RhZ19fICgiY3h4MTEiKSkpCisgICAgICBjb25zdGV4cHIgZG91YmxlIAorICAgICAgaW1hZygpIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CisjZWxzZQorICAgICAgZG91YmxlJiAKKyAgICAgIHJlYWwoKSB7IHJldHVybiBfX3JlYWxfXyBfTV92YWx1ZTsgfQorCisgICAgICBjb25zdCBkb3VibGUmIAorICAgICAgcmVhbCgpIGNvbnN0IHsgcmV0dXJuIF9fcmVhbF9fIF9NX3ZhbHVlOyB9CisKKyAgICAgIGRvdWJsZSYgCisgICAgICBpbWFnKCkgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKworICAgICAgY29uc3QgZG91YmxlJiAKKyAgICAgIGltYWcoKSBjb25zdCB7IHJldHVybiBfX2ltYWdfXyBfTV92YWx1ZTsgfQorI2VuZGlmCisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIERSIDM4Ny4gc3RkOjpjb21wbGV4IG92ZXItZW5jYXBzdWxhdGVkLgorICAgICAgdm9pZCAKKyAgICAgIHJlYWwoZG91YmxlIF9fdmFsKSB7IF9fcmVhbF9fIF9NX3ZhbHVlID0gX192YWw7IH0KKworICAgICAgdm9pZCAKKyAgICAgIGltYWcoZG91YmxlIF9fdmFsKSB7IF9faW1hZ19fIF9NX3ZhbHVlID0gX192YWw7IH0KKworICAgICAgY29tcGxleCYKKyAgICAgIG9wZXJhdG9yPShkb3VibGUgX19kKQorICAgICAgeworCV9NX3ZhbHVlID0gX19kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgY29tcGxleCYKKyAgICAgIG9wZXJhdG9yKz0oZG91YmxlIF9fZCkKKyAgICAgIHsKKwlfTV92YWx1ZSArPSBfX2Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCQorICAgICAgY29tcGxleCYKKyAgICAgIG9wZXJhdG9yLT0oZG91YmxlIF9fZCkKKyAgICAgIHsKKwlfTV92YWx1ZSAtPSBfX2Q7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb21wbGV4JgorICAgICAgb3BlcmF0b3IqPShkb3VibGUgX19kKQorICAgICAgeworCV9NX3ZhbHVlICo9IF9fZDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXgmCisgICAgICBvcGVyYXRvci89KGRvdWJsZSBfX2QpCisgICAgICB7CisJX01fdmFsdWUgLz0gX19kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gVGhlIGNvbXBpbGVyIHdpbGwgc3ludGhlc2l6ZSB0aGlzLCBlZmZpY2llbnRseS4KKyAgICAgIC8vIGNvbXBsZXgmIG9wZXJhdG9yPShjb25zdCBjb21wbGV4Jik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleCYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorCXsKKwkgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX196LnJlYWwoKTsKKwkgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleCYKKyAgICAgICAgb3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgKz0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleCYKKyAgICAgICAgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSAtPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgLT0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleCYKKyAgICAgICAgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfQ29tcGxleFQgX190OworCSAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKKwkgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7CisJICBfTV92YWx1ZSAqPSBfX3Q7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbXBsZXgmCisgICAgICAgIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisJeworCSAgX0NvbXBsZXhUIF9fdDsKKwkgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOworCSAgX01fdmFsdWUgLz0gX190OworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBfQ29tcGxleFQgX19yZXAoKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9Db21wbGV4VCBfTV92YWx1ZTsKKyAgICB9OworCisgIC8vLyAyNi4yLjMgIGNvbXBsZXggc3BlY2lhbGl6YXRpb25zCisgIC8vLyBjb21wbGV4PGxvbmcgZG91YmxlPiBzcGVjaWFsaXphdGlvbgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGNvbXBsZXg8bG9uZyBkb3VibGU+CisgICAgeworICAgICAgdHlwZWRlZiBsb25nIGRvdWJsZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSBfQ29tcGxleFQ7CisKKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBjb21wbGV4KF9Db21wbGV4VCBfX3opIDogX01fdmFsdWUoX196KSB7IH0KKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIGNvbXBsZXgobG9uZyBkb3VibGUgX19yID0gMC4wTCwgCisJCQkJIGxvbmcgZG91YmxlIF9faSA9IDAuMEwpCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgOiBfTV92YWx1ZXsgX19yLCBfX2kgfSB7IH0KKyNlbHNlCisgICAgICB7CisJX19yZWFsX18gX01fdmFsdWUgPSBfX3I7CisJX19pbWFnX18gX01fdmFsdWUgPSBfX2k7CisgICAgICB9CisjZW5kaWYKKworICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIGNvbXBsZXgoY29uc3QgY29tcGxleDxmbG9hdD4mIF9feikKKyAgICAgIDogX01fdmFsdWUoX196Ll9fcmVwKCkpIHsgfQorCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgY29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mIF9feikKKyAgICAgIDogX01fdmFsdWUoX196Ll9fcmVwKCkpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMzg3LiBzdGQ6OmNvbXBsZXggb3Zlci1lbmNhcHN1bGF0ZWQuCisgICAgICBfX2F0dHJpYnV0ZSAoKF9fYWJpX3RhZ19fICgiY3h4MTEiKSkpCisgICAgICBjb25zdGV4cHIgbG9uZyBkb3VibGUgCisgICAgICByZWFsKCkgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0KKworICAgICAgX19hdHRyaWJ1dGUgKChfX2FiaV90YWdfXyAoImN4eDExIikpKQorICAgICAgY29uc3RleHByIGxvbmcgZG91YmxlIAorICAgICAgaW1hZygpIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CisjZWxzZQorICAgICAgbG9uZyBkb3VibGUmIAorICAgICAgcmVhbCgpIHsgcmV0dXJuIF9fcmVhbF9fIF9NX3ZhbHVlOyB9CisKKyAgICAgIGNvbnN0IGxvbmcgZG91YmxlJiAKKyAgICAgIHJlYWwoKSBjb25zdCB7IHJldHVybiBfX3JlYWxfXyBfTV92YWx1ZTsgfQorCisgICAgICBsb25nIGRvdWJsZSYgCisgICAgICBpbWFnKCkgeyByZXR1cm4gX19pbWFnX18gX01fdmFsdWU7IH0KKworICAgICAgY29uc3QgbG9uZyBkb3VibGUmIAorICAgICAgaW1hZygpIGNvbnN0IHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CisjZW5kaWYKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgMzg3LiBzdGQ6OmNvbXBsZXggb3Zlci1lbmNhcHN1bGF0ZWQuCisgICAgICB2b2lkIAorICAgICAgcmVhbChsb25nIGRvdWJsZSBfX3ZhbCkgeyBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fdmFsOyB9CisKKyAgICAgIHZvaWQgCisgICAgICBpbWFnKGxvbmcgZG91YmxlIF9fdmFsKSB7IF9faW1hZ19fIF9NX3ZhbHVlID0gX192YWw7IH0KKworICAgICAgY29tcGxleCYKKyAgICAgIG9wZXJhdG9yPShsb25nIGRvdWJsZSBfX3IpCisgICAgICB7CisJX01fdmFsdWUgPSBfX3I7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb21wbGV4JgorICAgICAgb3BlcmF0b3IrPShsb25nIGRvdWJsZSBfX3IpCisgICAgICB7CisJX01fdmFsdWUgKz0gX19yOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgY29tcGxleCYKKyAgICAgIG9wZXJhdG9yLT0obG9uZyBkb3VibGUgX19yKQorICAgICAgeworCV9NX3ZhbHVlIC09IF9fcjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGNvbXBsZXgmCisgICAgICBvcGVyYXRvcio9KGxvbmcgZG91YmxlIF9fcikKKyAgICAgIHsKKwlfTV92YWx1ZSAqPSBfX3I7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb21wbGV4JgorICAgICAgb3BlcmF0b3IvPShsb25nIGRvdWJsZSBfX3IpCisgICAgICB7CisJX01fdmFsdWUgLz0gX19yOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gVGhlIGNvbXBpbGVyIGtub3dzIGhvdyB0byBkbyB0aGlzIGVmZmljaWVudGx5CisgICAgICAvLyBjb21wbGV4JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleCYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbXBsZXgmCisgICAgICAgIG9wZXJhdG9yPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9fei5pbWFnKCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbXBsZXgmCisJb3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKwl7CisJICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3oucmVhbCgpOworCSAgX19pbWFnX18gX01fdmFsdWUgKz0gX196LmltYWcoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29tcGxleCYKKwlvcGVyYXRvci09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorCXsKKwkgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfTV92YWx1ZSAtPSBfX3ouaW1hZygpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb21wbGV4JgorCW9wZXJhdG9yKj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisJeworCSAgX0NvbXBsZXhUIF9fdDsKKwkgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOworCSAgX01fdmFsdWUgKj0gX190OworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBjb21wbGV4JgorCW9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCisJeworCSAgX0NvbXBsZXhUIF9fdDsKKwkgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CisJICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOworCSAgX01fdmFsdWUgLz0gX190OworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBfQ29tcGxleFQgX19yZXAoKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9Db21wbGV4VCBfTV92YWx1ZTsKKyAgICB9OworCisgIC8vIFRoZXNlIGJpdHMgaGF2ZSB0byBiZSBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSwgc28gdGhhdCB0aGUKKyAgLy8gc3BlY2lhbGl6YXRpb25zIGhhdmUgYWxsIGJlZW4gZGVmaW5lZC4KKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICBjb21wbGV4PGZsb2F0Pjo6Y29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mIF9feikKKyAgOiBfTV92YWx1ZShfX3ouX19yZXAoKSkgeyB9CisKKyAgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUgorICBjb21wbGV4PGZsb2F0Pjo6Y29tcGxleChjb25zdCBjb21wbGV4PGxvbmcgZG91YmxlPiYgX196KQorICA6IF9NX3ZhbHVlKF9fei5fX3JlcCgpKSB7IH0KKworICBpbmxpbmUgX0dMSUJDWFhfQ09OU1RFWFBSCisgIGNvbXBsZXg8ZG91YmxlPjo6Y29tcGxleChjb25zdCBjb21wbGV4PGxvbmcgZG91YmxlPiYgX196KQorICA6IF9NX3ZhbHVlKF9fei5fX3JlcCgpKSB7IH0KKworICAvLyBJbmhpYml0IGltcGxpY2l0IGluc3RhbnRpYXRpb25zIGZvciByZXF1aXJlZCBpbnN0YW50aWF0aW9ucywKKyAgLy8gd2hpY2ggYXJlIGRlZmluZWQgdmlhIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIGVsc2V3aGVyZS4KKyAgLy8gTkI6ICBUaGlzIHN5bnRheCBpcyBhIEdOVSBleHRlbnNpb24uCisjaWYgX0dMSUJDWFhfRVhURVJOX1RFTVBMQVRFCisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjb21wbGV4PGZsb2F0PiYpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY29tcGxleDxmbG9hdD4mKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbXBsZXg8ZG91YmxlPiYpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY29tcGxleDxkb3VibGU+Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjb21wbGV4PGxvbmcgZG91YmxlPiYpOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY29tcGxleDxsb25nIGRvdWJsZT4mKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIGNvbXBsZXg8ZmxvYXQ+Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNvbXBsZXg8ZmxvYXQ+Jik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIGNvbXBsZXg8ZG91YmxlPiYpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjb21wbGV4PGRvdWJsZT4mKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgY29tcGxleDxsb25nIGRvdWJsZT4mKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY29tcGxleDxsb25nIGRvdWJsZT4mKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgLy8gQH0gZ3JvdXAgY29tcGxleF9udW1iZXJzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIFNlZSBleHQvdHlwZV90cmFpdHMuaCBmb3IgdGhlIHByaW1hcnkgdGVtcGxhdGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3Byb21vdGVfMjxzdGQ6OmNvbXBsZXg8X1RwPiwgX1VwPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHN0ZDo6Y29tcGxleDx0eXBlbmFtZSBfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZT4gX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IF9fcHJvbW90ZV8yPF9UcCwgc3RkOjpjb21wbGV4PF9VcD4gPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHN0ZDo6Y29tcGxleDx0eXBlbmFtZSBfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZT4gX190eXBlOworICAgIH07CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBzdHJ1Y3QgX19wcm9tb3RlXzI8c3RkOjpjb21wbGV4PF9UcD4sIHN0ZDo6Y29tcGxleDxfVXA+ID4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzdGQ6OmNvbXBsZXg8dHlwZW5hbWUgX19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGU+IF9fdHlwZTsKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGQ6OmNvbXBsZXg8X1RwPiBhY29zKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+Jik7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RkOjpjb21wbGV4PF9UcD4gYXNpbihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYpOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0ZDo6Y29tcGxleDxfVHA+IGF0YW4oY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0ZDo6Y29tcGxleDxfVHA+IGFjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+Jik7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RkOjpjb21wbGV4PF9UcD4gYXNpbmgoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mKTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGQ6OmNvbXBsZXg8X1RwPiBhdGFuaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYpOworICAvLyBEUiA1OTUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwICAgICAgICAgICAgICAgZmFicyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfYWNvcyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+IF9fdCA9IHN0ZDo6YXNpbihfX3opOworICAgICAgY29uc3QgX1RwIF9fcGlfMiA9IDEuNTcwNzk2MzI2Nzk0ODk2NjE5MjMxMzIxNjkxNjM5NzUxNEw7CisgICAgICByZXR1cm4gc3RkOjpjb21wbGV4PF9UcD4oX19waV8yIC0gX190LnJlYWwoKSwgLV9fdC5pbWFnKCkpOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWF9UUjEKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9hY29zKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhY29zZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfYWNvcyhfX2NvbXBsZXhfXyBkb3VibGUgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fjb3MoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfYWNvcyhjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fjb3NsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgYWNvcyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hY29zKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgLy8vIGFjb3MoX196KSBbOC4xLjJdLgorICAvLyAgRWZmZWN0czogIEJlaGF2ZXMgdGhlIHNhbWUgYXMgQzk5IGZ1bmN0aW9uIGNhY29zLCBkZWZpbmVkCisgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy41LjEuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhY29zKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2Fjb3MoX196KTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hc2luKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgc3RkOjpjb21wbGV4PF9UcD4gX190KC1fX3ouaW1hZygpLCBfX3oucmVhbCgpKTsKKyAgICAgIF9fdCA9IHN0ZDo6YXNpbmgoX190KTsKKyAgICAgIHJldHVybiBzdGQ6OmNvbXBsZXg8X1RwPihfX3QuaW1hZygpLCAtX190LnJlYWwoKSk7CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMQorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2FzaW4oX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2FzaW5mKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9hc2luKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXNpbihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hc2luKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXNpbmwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhc2luKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2FzaW4oX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICAvLy8gYXNpbihfX3opIFs4LjEuM10uCisgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2FzaW4sIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjUuMi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFzaW4oY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfYXNpbihfX3opOyB9CisjZW5kaWYKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hdGFuKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9fcjIgPSBfX3oucmVhbCgpICogX196LnJlYWwoKTsKKyAgICAgIGNvbnN0IF9UcCBfX3ggPSBfVHAoMS4wKSAtIF9fcjIgLSBfX3ouaW1hZygpICogX196LmltYWcoKTsKKworICAgICAgX1RwIF9fbnVtID0gX196LmltYWcoKSArIF9UcCgxLjApOworICAgICAgX1RwIF9fZGVuID0gX196LmltYWcoKSAtIF9UcCgxLjApOworCisgICAgICBfX251bSA9IF9fcjIgKyBfX251bSAqIF9fbnVtOworICAgICAgX19kZW4gPSBfX3IyICsgX19kZW4gKiBfX2RlbjsKKworICAgICAgcmV0dXJuIHN0ZDo6Y29tcGxleDxfVHA+KF9UcCgwLjUpICogYXRhbjIoX1RwKDIuMCkgKiBfX3oucmVhbCgpLCBfX3gpLAorCQkJICAgICAgIF9UcCgwLjI1KSAqIGxvZyhfX251bSAvIF9fZGVuKSk7CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMQorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2F0YW4oX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2F0YW5mKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9hdGFuKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXRhbihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hdGFuKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXRhbmwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhdGFuKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2F0YW4oX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICAvLy8gYXRhbihfX3opIFs4LjEuNF0uCisgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2F0YW4sIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjUuMy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGF0YW4oY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfYXRhbihfX3opOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfYWNvc2goY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7CisgICAgICAvLyBLYWhhbidzIGZvcm11bGEuCisgICAgICByZXR1cm4gX1RwKDIuMCkgKiBzdGQ6OmxvZyhzdGQ6OnNxcnQoX1RwKDAuNSkgKiAoX196ICsgX1RwKDEuMCkpKQorCQkJCSArIHN0ZDo6c3FydChfVHAoMC41KSAqIChfX3ogLSBfVHAoMS4wKSkpKTsKKyAgICB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVhfVFIxCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfYWNvc2goX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fjb3NoZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfYWNvc2goX19jb21wbGV4X18gZG91YmxlIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhY29zaChfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hY29zaChjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2Fjb3NobChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2Fjb3NoKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgLy8vIGFjb3NoKF9feikgWzguMS41XS4KKyAgLy8gIEVmZmVjdHM6ICBCZWhhdmVzIHRoZSBzYW1lIGFzIEM5OSBmdW5jdGlvbiBjYWNvc2gsIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjYuMS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2Fjb3NoKF9feik7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hc2luaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIHN0ZDo6Y29tcGxleDxfVHA+IF9fdCgoX196LnJlYWwoKSAtIF9fei5pbWFnKCkpCisJCQkgICAgKiAoX196LnJlYWwoKSArIF9fei5pbWFnKCkpICsgX1RwKDEuMCksCisJCQkgICAgX1RwKDIuMCkgKiBfX3oucmVhbCgpICogX196LmltYWcoKSk7CisgICAgICBfX3QgPSBzdGQ6OnNxcnQoX190KTsKKworICAgICAgcmV0dXJuIHN0ZDo6bG9nKF9fdCArIF9feik7CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMQorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2FzaW5oKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2Nhc2luaGYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X2FzaW5oKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXNpbmgoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfYXNpbmgoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2Nhc2luaGwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhc2luaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hc2luaChfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIC8vLyBhc2luaChfX3opIFs4LjEuNl0uCisgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2FzaW4sIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjYuMi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFzaW5oKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2FzaW5oKF9feik7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hdGFuaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2kyID0gX196LmltYWcoKSAqIF9fei5pbWFnKCk7CisgICAgICBjb25zdCBfVHAgX194ID0gX1RwKDEuMCkgLSBfX2kyIC0gX196LnJlYWwoKSAqIF9fei5yZWFsKCk7CisKKyAgICAgIF9UcCBfX251bSA9IF9UcCgxLjApICsgX196LnJlYWwoKTsKKyAgICAgIF9UcCBfX2RlbiA9IF9UcCgxLjApIC0gX196LnJlYWwoKTsKKworICAgICAgX19udW0gPSBfX2kyICsgX19udW0gKiBfX251bTsKKyAgICAgIF9fZGVuID0gX19pMiArIF9fZGVuICogX19kZW47CisKKyAgICAgIHJldHVybiBzdGQ6OmNvbXBsZXg8X1RwPihfVHAoMC4yNSkgKiAobG9nKF9fbnVtKSAtIGxvZyhfX2RlbikpLAorCQkJICAgICAgIF9UcCgwLjUpICogYXRhbjIoX1RwKDIuMCkgKiBfX3ouaW1hZygpLCBfX3gpKTsKKyAgICB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVhfVFIxCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfYXRhbmgoX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2F0YW5oZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfYXRhbmgoX19jb21wbGV4X18gZG91YmxlIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhdGFuaChfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hdGFuaChjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2F0YW5obChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGF0YW5oKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2F0YW5oKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgLy8vIGF0YW5oKF9feikgWzguMS43XS4KKyAgLy8gIEVmZmVjdHM6ICBCZWhhdmVzIHRoZSBzYW1lIGFzIEM5OSBmdW5jdGlvbiBjYXRhbmgsIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjYuMy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGF0YW5oKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2F0YW5oKF9feik7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgLy8vIGZhYnMoX196KSBbOC4xLjhdLgorICAgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2FicywgZGVmaW5lZAorICAgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy44LjEuCisgICAgZmFicyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIHN0ZDo6YWJzKF9feik7IH0KKworICAvLy8gQWRkaXRpb25hbCBvdmVybG9hZHMgWzguMS45XS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBhcmcoX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisjaWYgKF9HTElCQ1hYX1VTRV9DOTlfTUFUSCAmJiAhX0dMSUJDWFhfVVNFX0M5OV9GUF9NQUNST1NfRFlOQU1JQykKKyAgICAgIHJldHVybiBzdGQ6OnNpZ25iaXQoX194KSA/IF9fdHlwZSgzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjlMKQorCSAgICAgICAgICAgICAgICAgICAgICAgOiBfX3R5cGUoKTsKKyNlbHNlCisgICAgICByZXR1cm4gc3RkOjphcmcoc3RkOjpjb21wbGV4PF9fdHlwZT4oX194KSk7CisjZW5kaWYKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBpbWFnKF9UcCkKKyAgICB7IHJldHVybiBfVHAoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgbm9ybShfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX3R5cGUoX194KSAqIF9fdHlwZShfX3gpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIHJlYWwoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX3g7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGU+CisgICAgcG93KGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9VcCYgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gc3RkOjpwb3coc3RkOjpjb21wbGV4PF9fdHlwZT4oX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGU+CisgICAgcG93KGNvbnN0IF9UcCYgX194LCBjb25zdCBzdGQ6OmNvbXBsZXg8X1VwPiYgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gc3RkOjpwb3coX190eXBlKF9feCksIHN0ZDo6Y29tcGxleDxfX3R5cGU+KF9feSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGU+CisgICAgcG93KGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IHN0ZDo6Y29tcGxleDxfVXA+JiBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBzdGQ6OnBvdyhzdGQ6OmNvbXBsZXg8X190eXBlPihfX3gpLAorCQkgICAgICBzdGQ6OmNvbXBsZXg8X190eXBlPihfX3kpKTsKKyAgICB9CisKKyAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgIC8vIERSIDc4MS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGQ6OmNvbXBsZXg8X1RwPiBwcm9qKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+Jik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X3Byb2ooY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19kZW4gPSAoX196LnJlYWwoKSAqIF9fei5yZWFsKCkKKwkJCSArIF9fei5pbWFnKCkgKiBfX3ouaW1hZygpICsgX1RwKDEuMCkpOworCisgICAgICByZXR1cm4gc3RkOjpjb21wbGV4PF9UcD4oKF9UcCgyLjApICogX196LnJlYWwoKSkgLyBfX2RlbiwKKwkJCSAgICAgICAoX1RwKDIuMCkgKiBfX3ouaW1hZygpKSAvIF9fZGVuKTsKKyAgICB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVgKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9wcm9qKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2Nwcm9qZihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGRvdWJsZQorICBfX2NvbXBsZXhfcHJvaihfX2NvbXBsZXhfXyBkb3VibGUgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY3Byb2ooX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfcHJvaihjb25zdCBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZSYgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY3Byb2psKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgcHJvaihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9wcm9qKF9fei5fX3JlcCgpKTsgfQorI2Vsc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIHByb2ooY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfcHJvaihfX3opOyB9CisjZW5kaWYKKworICAvLyBEUiAxMTM3LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIHByb2ooX1RwIF9feCkKKyAgICB7IHJldHVybiBfX3g7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIGNvbmooX1RwIF9feCkKKyAgICB7IHJldHVybiBfX3g7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgIC8vIEMrKzExCisKKyNlbmRpZiAgLyogX0dMSUJDWFhfQ09NUExFWCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jb21wbGV4LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NvbXBsZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTBlODJkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jb21wbGV4LmgKQEAgLTAsMCArMSw0NiBAQAorLy8gLSotIEMrKyAtKi0gY29tcGF0aWJpbGl0eSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjb21wbGV4LmgKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorIyBpbmNsdWRlIDxjY29tcGxleD4KKyNlbmRpZgorCisjaWYgX0dMSUJDWFhfSEFWRV9DT01QTEVYX0gKKyMgaW5jbHVkZV9uZXh0IDxjb21wbGV4Lmg+CisjIGlmZGVmIF9HTElCQ1hYX0NPTVBMRVgKKy8vIFNlZSBQUjU2MTExLCBrZWVwIHRoZSBtYWNybyBpbiBDKyswMyBpZiBwb3NzaWJsZS4KKyMgIHVuZGVmIGNvbXBsZXgKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX0NPTVBMRVhfSAorI2RlZmluZSBfR0xJQkNYWF9DT01QTEVYX0ggMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY29uZGl0aW9uX3ZhcmlhYmxlIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jb25kaXRpb25fdmFyaWFibGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4NDY1NQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY29uZGl0aW9uX3ZhcmlhYmxlCkBAIC0wLDAgKzEsMjg2IEBACisvLyA8Y29uZGl0aW9uX3ZhcmlhYmxlPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9jb25kaXRpb25fdmFyaWFibGUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQ09ORElUSU9OX1ZBUklBQkxFCisjZGVmaW5lIF9HTElCQ1hYX0NPTkRJVElPTl9WQVJJQUJMRSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8bXV0ZXg+IC8vIHVuaXF1ZV9sb2NrCisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0hBU19HVEhSRUFEUykgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEpCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGRlZmdyb3VwIGNvbmRpdGlvbl92YXJpYWJsZXMgQ29uZGl0aW9uIFZhcmlhYmxlcworICAgKiBAaW5ncm91cCBjb25jdXJyZW5jeQorICAgKgorICAgKiBDbGFzc2VzIGZvciBjb25kaXRpb25fdmFyaWFibGUgc3VwcG9ydC4KKyAgICogQHsKKyAgICovCisKKyAgLy8vIGN2X3N0YXR1cworICBlbnVtIGNsYXNzIGN2X3N0YXR1cyB7IG5vX3RpbWVvdXQsIHRpbWVvdXQgfTsKKyAgCisgIC8vLyBjb25kaXRpb25fdmFyaWFibGUKKyAgY2xhc3MgY29uZGl0aW9uX3ZhcmlhYmxlCisgIHsKKyAgICB0eXBlZGVmIGNocm9ubzo6c3lzdGVtX2Nsb2NrCV9fY2xvY2tfdDsKKyAgICB0eXBlZGVmIF9fZ3RocmVhZF9jb25kX3QJCV9fbmF0aXZlX3R5cGU7CisKKyNpZmRlZiBfX0dUSFJFQURfQ09ORF9JTklUCisgICAgX19uYXRpdmVfdHlwZQkJCV9NX2NvbmQgPSBfX0dUSFJFQURfQ09ORF9JTklUOworI2Vsc2UKKyAgICBfX25hdGl2ZV90eXBlCQkJX01fY29uZDsKKyNlbmRpZgorCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIF9fbmF0aXZlX3R5cGUqIAkJbmF0aXZlX2hhbmRsZV90eXBlOworCisgICAgY29uZGl0aW9uX3ZhcmlhYmxlKCkgbm9leGNlcHQ7CisgICAgfmNvbmRpdGlvbl92YXJpYWJsZSgpIG5vZXhjZXB0OworCisgICAgY29uZGl0aW9uX3ZhcmlhYmxlKGNvbnN0IGNvbmRpdGlvbl92YXJpYWJsZSYpID0gZGVsZXRlOworICAgIGNvbmRpdGlvbl92YXJpYWJsZSYgb3BlcmF0b3I9KGNvbnN0IGNvbmRpdGlvbl92YXJpYWJsZSYpID0gZGVsZXRlOworCisgICAgdm9pZAorICAgIG5vdGlmeV9vbmUoKSBub2V4Y2VwdDsKKworICAgIHZvaWQKKyAgICBub3RpZnlfYWxsKCkgbm9leGNlcHQ7CisKKyAgICB2b2lkCisgICAgd2FpdCh1bmlxdWVfbG9jazxtdXRleD4mIF9fbG9jayk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgdm9pZAorICAgICAgd2FpdCh1bmlxdWVfbG9jazxtdXRleD4mIF9fbG9jaywgX1ByZWRpY2F0ZSBfX3ApCisgICAgICB7CisJd2hpbGUgKCFfX3AoKSkKKwkgIHdhaXQoX19sb2NrKTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICAgIGN2X3N0YXR1cworICAgICAgd2FpdF91bnRpbCh1bmlxdWVfbG9jazxtdXRleD4mIF9fbG9jaywKKwkJIGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfX2Nsb2NrX3QsIF9EdXJhdGlvbj4mIF9fYXRpbWUpCisgICAgICB7IHJldHVybiBfX3dhaXRfdW50aWxfaW1wbChfX2xvY2ssIF9fYXRpbWUpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICAgIGN2X3N0YXR1cworICAgICAgd2FpdF91bnRpbCh1bmlxdWVfbG9jazxtdXRleD4mIF9fbG9jaywKKwkJIGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbj4mIF9fYXRpbWUpCisgICAgICB7CisJLy8gRFIgODg3IC0gU3luYyB1bmtub3duIGNsb2NrIHRvIGtub3duIGNsb2NrLgorCWNvbnN0IHR5cGVuYW1lIF9DbG9jazo6dGltZV9wb2ludCBfX2NfZW50cnkgPSBfQ2xvY2s6Om5vdygpOworCWNvbnN0IF9fY2xvY2tfdDo6dGltZV9wb2ludCBfX3NfZW50cnkgPSBfX2Nsb2NrX3Q6Om5vdygpOworCWNvbnN0IGF1dG8gX19kZWx0YSA9IF9fYXRpbWUgLSBfX2NfZW50cnk7CisJY29uc3QgYXV0byBfX3NfYXRpbWUgPSBfX3NfZW50cnkgKyBfX2RlbHRhOworCisJcmV0dXJuIF9fd2FpdF91bnRpbF9pbXBsKF9fbG9jaywgX19zX2F0aW1lKTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgYm9vbAorICAgICAgd2FpdF91bnRpbCh1bmlxdWVfbG9jazxtdXRleD4mIF9fbG9jaywKKwkJIGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbj4mIF9fYXRpbWUsCisJCSBfUHJlZGljYXRlIF9fcCkKKyAgICAgIHsKKwl3aGlsZSAoIV9fcCgpKQorCSAgaWYgKHdhaXRfdW50aWwoX19sb2NrLCBfX2F0aW1lKSA9PSBjdl9zdGF0dXM6OnRpbWVvdXQpCisJICAgIHJldHVybiBfX3AoKTsKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBjdl9zdGF0dXMKKyAgICAgIHdhaXRfZm9yKHVuaXF1ZV9sb2NrPG11dGV4PiYgX19sb2NrLAorCSAgICAgICBjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lKQorICAgICAgeyByZXR1cm4gd2FpdF91bnRpbChfX2xvY2ssIF9fY2xvY2tfdDo6bm93KCkgKyBfX3J0aW1lKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZCwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICAgIGJvb2wKKyAgICAgIHdhaXRfZm9yKHVuaXF1ZV9sb2NrPG11dGV4PiYgX19sb2NrLAorCSAgICAgICBjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lLAorCSAgICAgICBfUHJlZGljYXRlIF9fcCkKKyAgICAgIHsgcmV0dXJuIHdhaXRfdW50aWwoX19sb2NrLCBfX2Nsb2NrX3Q6Om5vdygpICsgX19ydGltZSwgc3RkOjptb3ZlKF9fcCkpOyB9CisKKyAgICBuYXRpdmVfaGFuZGxlX3R5cGUKKyAgICBuYXRpdmVfaGFuZGxlKCkKKyAgICB7IHJldHVybiAmX01fY29uZDsgfQorCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1cj4KKyAgICAgIGN2X3N0YXR1cworICAgICAgX193YWl0X3VudGlsX2ltcGwodW5pcXVlX2xvY2s8bXV0ZXg+JiBfX2xvY2ssCisJCQljb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X19jbG9ja190LCBfRHVyPiYgX19hdGltZSkKKyAgICAgIHsKKwlhdXRvIF9fcyA9IGNocm9ubzo6dGltZV9wb2ludF9jYXN0PGNocm9ubzo6c2Vjb25kcz4oX19hdGltZSk7CisJYXV0byBfX25zID0gY2hyb25vOjpkdXJhdGlvbl9jYXN0PGNocm9ubzo6bmFub3NlY29uZHM+KF9fYXRpbWUgLSBfX3MpOworCisJX19ndGhyZWFkX3RpbWVfdCBfX3RzID0KKwkgIHsKKwkgICAgc3RhdGljX2Nhc3Q8c3RkOjp0aW1lX3Q+KF9fcy50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSksCisJICAgIHN0YXRpY19jYXN0PGxvbmc+KF9fbnMuY291bnQoKSkKKwkgIH07CisKKwlfX2d0aHJlYWRfY29uZF90aW1lZHdhaXQoJl9NX2NvbmQsIF9fbG9jay5tdXRleCgpLT5uYXRpdmVfaGFuZGxlKCksCisJCQkJICZfX3RzKTsKKworCXJldHVybiAoX19jbG9ja190Ojpub3coKSA8IF9fYXRpbWUKKwkJPyBjdl9zdGF0dXM6Om5vX3RpbWVvdXQgOiBjdl9zdGF0dXM6OnRpbWVvdXQpOworICAgICAgfQorICB9OworCisgIC8vLyBjb25kaXRpb25fdmFyaWFibGVfYW55CisgIC8vIExpa2UgYWJvdmUsIGJ1dCBtdXRleCBpcyBub3QgcmVxdWlyZWQgdG8gaGF2ZSB0cnlfbG9jay4KKyAgY2xhc3MgY29uZGl0aW9uX3ZhcmlhYmxlX2FueQorICB7CisgICAgdHlwZWRlZiBjaHJvbm86OnN5c3RlbV9jbG9jawlfX2Nsb2NrX3Q7CisgICAgY29uZGl0aW9uX3ZhcmlhYmxlCQkJX01fY29uZDsKKyAgICBtdXRleAkJCQlfTV9tdXRleDsKKworICAgIC8vIHNjb3BlZCB1bmxvY2sgLSB1bmxvY2tzIGluIGN0b3IsIHJlLWxvY2tzIGluIGR0b3IKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jaz4KKyAgICAgIHN0cnVjdCBfVW5sb2NrCisgICAgICB7CisJZXhwbGljaXQgX1VubG9jayhfTG9jayYgX19saykgOiBfTV9sb2NrKF9fbGspIHsgX19say51bmxvY2soKTsgfQorCisJfl9VbmxvY2soKSBub2V4Y2VwdChmYWxzZSkKKwl7CisJICBpZiAodW5jYXVnaHRfZXhjZXB0aW9uKCkpCisJICAgIF9fdHJ5IHsgX01fbG9jay5sb2NrKCk7IH0gX19jYXRjaCguLi4pIHsgfQorCSAgZWxzZQorCSAgICBfTV9sb2NrLmxvY2soKTsKKwl9CisKKwlfVW5sb2NrKGNvbnN0IF9VbmxvY2smKSA9IGRlbGV0ZTsKKwlfVW5sb2NrJiBvcGVyYXRvcj0oY29uc3QgX1VubG9jayYpID0gZGVsZXRlOworCisJX0xvY2smIF9NX2xvY2s7CisgICAgICB9OworCisgIHB1YmxpYzoKKworICAgIGNvbmRpdGlvbl92YXJpYWJsZV9hbnkoKSBub2V4Y2VwdDsKKyAgICB+Y29uZGl0aW9uX3ZhcmlhYmxlX2FueSgpIG5vZXhjZXB0OworCisgICAgY29uZGl0aW9uX3ZhcmlhYmxlX2FueShjb25zdCBjb25kaXRpb25fdmFyaWFibGVfYW55JikgPSBkZWxldGU7CisgICAgY29uZGl0aW9uX3ZhcmlhYmxlX2FueSYgb3BlcmF0b3I9KGNvbnN0IGNvbmRpdGlvbl92YXJpYWJsZV9hbnkmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQKKyAgICBub3RpZnlfb25lKCkgbm9leGNlcHQKKyAgICB7CisgICAgICBsb2NrX2d1YXJkPG11dGV4PiBfX2xvY2soX01fbXV0ZXgpOworICAgICAgX01fY29uZC5ub3RpZnlfb25lKCk7CisgICAgfQorCisgICAgdm9pZAorICAgIG5vdGlmeV9hbGwoKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIGxvY2tfZ3VhcmQ8bXV0ZXg+IF9fbG9jayhfTV9tdXRleCk7CisgICAgICBfTV9jb25kLm5vdGlmeV9hbGwoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jaz4KKyAgICAgIHZvaWQKKyAgICAgIHdhaXQoX0xvY2smIF9fbG9jaykKKyAgICAgIHsKKwl1bmlxdWVfbG9jazxtdXRleD4gX19teV9sb2NrKF9NX211dGV4KTsKKwlfVW5sb2NrPF9Mb2NrPiBfX3VubG9jayhfX2xvY2spOworCS8vIF9NX211dGV4IG11c3QgYmUgdW5sb2NrZWQgYmVmb3JlIHJlLWxvY2tpbmcgX19sb2NrIHNvIG1vdmUKKwkvLyBvd25lcnNoaXAgb2YgX01fbXV0ZXggbG9jayB0byBhbiBvYmplY3Qgd2l0aCBzaG9ydGVyIGxpZmV0aW1lLgorCXVuaXF1ZV9sb2NrPG11dGV4PiBfX215X2xvY2syKHN0ZDo6bW92ZShfX215X2xvY2spKTsKKwlfTV9jb25kLndhaXQoX19teV9sb2NrMik7CisgICAgICB9CisgICAgICAKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Mb2NrLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgdm9pZAorICAgICAgd2FpdChfTG9jayYgX19sb2NrLCBfUHJlZGljYXRlIF9fcCkKKyAgICAgIHsKKwl3aGlsZSAoIV9fcCgpKQorCSAgd2FpdChfX2xvY2spOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0xvY2ssIHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uPgorICAgICAgY3Zfc3RhdHVzCisgICAgICB3YWl0X3VudGlsKF9Mb2NrJiBfX2xvY2ssCisJCSBjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24+JiBfX2F0aW1lKQorICAgICAgeworCXVuaXF1ZV9sb2NrPG11dGV4PiBfX215X2xvY2soX01fbXV0ZXgpOworCV9VbmxvY2s8X0xvY2s+IF9fdW5sb2NrKF9fbG9jayk7CisJLy8gX01fbXV0ZXggbXVzdCBiZSB1bmxvY2tlZCBiZWZvcmUgcmUtbG9ja2luZyBfX2xvY2sgc28gbW92ZQorCS8vIG93bmVyc2hpcCBvZiBfTV9tdXRleCBsb2NrIHRvIGFuIG9iamVjdCB3aXRoIHNob3J0ZXIgbGlmZXRpbWUuCisJdW5pcXVlX2xvY2s8bXV0ZXg+IF9fbXlfbG9jazIoc3RkOjptb3ZlKF9fbXlfbG9jaykpOworCXJldHVybiBfTV9jb25kLndhaXRfdW50aWwoX19teV9sb2NrMiwgX19hdGltZSk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jaywgdHlwZW5hbWUgX0Nsb2NrLAorCSAgICAgdHlwZW5hbWUgX0R1cmF0aW9uLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgYm9vbAorICAgICAgd2FpdF91bnRpbChfTG9jayYgX19sb2NrLAorCQkgY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hdGltZSwKKwkJIF9QcmVkaWNhdGUgX19wKQorICAgICAgeworCXdoaWxlICghX19wKCkpCisJICBpZiAod2FpdF91bnRpbChfX2xvY2ssIF9fYXRpbWUpID09IGN2X3N0YXR1czo6dGltZW91dCkKKwkgICAgcmV0dXJuIF9fcCgpOworCXJldHVybiB0cnVlOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0xvY2ssIHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBjdl9zdGF0dXMKKyAgICAgIHdhaXRfZm9yKF9Mb2NrJiBfX2xvY2ssIGNvbnN0IGNocm9ubzo6ZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fcnRpbWUpCisgICAgICB7IHJldHVybiB3YWl0X3VudGlsKF9fbG9jaywgX19jbG9ja190Ojpub3coKSArIF9fcnRpbWUpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jaywgdHlwZW5hbWUgX1JlcCwKKwkgICAgIHR5cGVuYW1lIF9QZXJpb2QsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICBib29sCisgICAgICB3YWl0X2ZvcihfTG9jayYgX19sb2NrLAorCSAgICAgICBjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lLCBfUHJlZGljYXRlIF9fcCkKKyAgICAgIHsgcmV0dXJuIHdhaXRfdW50aWwoX19sb2NrLCBfX2Nsb2NrX3Q6Om5vdygpICsgX19ydGltZSwgc3RkOjptb3ZlKF9fcCkpOyB9CisgIH07CisKKyAgLy8gQH0gZ3JvdXAgY29uZGl0aW9uX3ZhcmlhYmxlcworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gX0dMSUJDWFhfSEFTX0dUSFJFQURTICYmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NPTkRJVElPTl9WQVJJQUJMRQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc2V0am1wIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc2V0am1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OTlkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzZXRqbXAKQEAgLTAsMCArMSw2MSBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjc2V0am1wCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgc2V0am1wLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMC40LjYgIEMgbGlicmFyeQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9DU0VUSk1QCisjZGVmaW5lIF9HTElCQ1hYX0NTRVRKTVAgMQorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDxzZXRqbXAuaD4gaW4gbGlldSBvZiByZWFsIGZ1bmN0aW9ucy4KKyN1bmRlZiBsb25nam1wCisKKy8vIEFkaGVyZSB0byBzZWN0aW9uIDE3LjQuMS4yIGNsYXVzZSA1IG9mIElTTyAxNDg4MjoxOTk4CisjaWZuZGVmIHNldGptcAorI2RlZmluZSBzZXRqbXAoZW52KSBzZXRqbXAgKGVudikKKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIDo6am1wX2J1ZjsKKyAgdXNpbmcgOjpsb25nam1wOworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc2lnbmFsIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc2lnbmFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NDQ2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzaWduYWwKQEAgLTAsMCArMSw1NyBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBjc2lnbmFsCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgc2lnbmFsLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMC40LjYgIEMgbGlicmFyeQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9DU0lHTkFMCisjZGVmaW5lIF9HTElCQ1hYX0NTSUdOQUwgMQorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDxzaWduYWwuaD4gaW4gbGlldSBvZiByZWFsIGZ1bmN0aW9ucy4KKyN1bmRlZiByYWlzZQorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIDo6c2lnX2F0b21pY190OworICB1c2luZyA6OnNpZ25hbDsKKyAgdXNpbmcgOjpyYWlzZTsKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3N0ZGFsaWduIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RkYWxpZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwMDU1NAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3N0ZGFsaWduCkBAIC0wLDAgKzEsNDQgQEAKKy8vIDxjc3RkYWxpZ24+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NzdGRhbGlnbgorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9HTElCQ1hYX0NTVERBTElHTgorI2RlZmluZSBfR0xJQkNYWF9DU1REQUxJR04gMQorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjICBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisjICBpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorIyAgaWYgX0dMSUJDWFhfSEFWRV9TVERBTElHTl9ICisjICAgIGluY2x1ZGUgPHN0ZGFsaWduLmg+CisjICBlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RkYXJnIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RkYXJnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjhkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzdGRhcmcKQEAgLTAsMCArMSw1NyBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NzdGRhcmcKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgZmlsZS4gIFlvdSBzaG91bGQgQGMgXCNpbmNsdWRlIHRoaXMgZmlsZQorICogIGluIHlvdXIgcHJvZ3JhbXMsIHJhdGhlciB0aGFuIGFueSBvZiB0aGUgQGEgKi5oIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICoKKyAqICBUaGlzIGlzIHRoZSBDKysgdmVyc2lvbiBvZiB0aGUgU3RhbmRhcmQgQyBMaWJyYXJ5IGhlYWRlciBAYyBzdGRhcmcuaCwKKyAqICBhbmQgaXRzIGNvbnRlbnRzIGFyZSAobW9zdGx5KSB0aGUgc2FtZSBhcyB0aGF0IGhlYWRlciwgYnV0IGFyZSBhbGwKKyAqICBjb250YWluZWQgaW4gdGhlIG5hbWVzcGFjZSBAYyBzdGQgKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKKyAqICBhcyBtYWNyb3MgaW4gQykuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIwLjQuNiAgQyBsaWJyYXJ5CisvLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NTVERBUkcKKyNkZWZpbmUgX0dMSUJDWFhfQ1NUREFSRyAxCisKKy8vIEFkaGVyZSB0byBzZWN0aW9uIDE3LjQuMS4yIGNsYXVzZSA1IG9mIElTTyAxNDg4MjoxOTk4CisjaWZuZGVmIHZhX2VuZAorI2RlZmluZSB2YV9lbmQoYXApIHZhX2VuZCAoYXApCisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZAoreworICB1c2luZyA6OnZhX2xpc3Q7Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzdGRib29sIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RkYm9vbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGFiYmVkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RkYm9vbApAQCAtMCwwICsxLDQ0IEBACisvLyA8Y3N0ZGJvb2w+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NzdGRib29sCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZm5kZWYgX0dMSUJDWFhfQ1NUREJPT0wKKyNkZWZpbmUgX0dMSUJDWFhfQ1NUREJPT0wgMQorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjICBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisjICBpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorIyAgaWYgX0dMSUJDWFhfSEFWRV9TVERCT09MX0gKKyMgICAgaW5jbHVkZSA8c3RkYm9vbC5oPgorIyAgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3N0ZGRlZiBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3N0ZGRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDY2MGYzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RkZGVmCkBAIC0wLDAgKzEsNDIgQEAKKy8vIC0qLSBDKysgLSotIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY3N0ZGRlZgorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIHN0ZGRlZi5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMTguMSAgVHlwZXMKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzdGRpbnQgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzdGRpbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0NTg1OQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3N0ZGludApAQCAtMCwwICsxLDg5IEBACisvLyA8Y3N0ZGludD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY3N0ZGludAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9DU1RESU5UCisjZGVmaW5lIF9HTElCQ1hYX0NTVERJTlQgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworI2lmIF9HTElCQ1hYX0hBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIDo6aW50OF90OworICB1c2luZyA6OmludDE2X3Q7CisgIHVzaW5nIDo6aW50MzJfdDsKKyAgdXNpbmcgOjppbnQ2NF90OworCisgIHVzaW5nIDo6aW50X2Zhc3Q4X3Q7CisgIHVzaW5nIDo6aW50X2Zhc3QxNl90OworICB1c2luZyA6OmludF9mYXN0MzJfdDsKKyAgdXNpbmcgOjppbnRfZmFzdDY0X3Q7CisKKyAgdXNpbmcgOjppbnRfbGVhc3Q4X3Q7CisgIHVzaW5nIDo6aW50X2xlYXN0MTZfdDsKKyAgdXNpbmcgOjppbnRfbGVhc3QzMl90OworICB1c2luZyA6OmludF9sZWFzdDY0X3Q7CisKKyAgdXNpbmcgOjppbnRtYXhfdDsKKyAgdXNpbmcgOjppbnRwdHJfdDsKKyAgCisgIHVzaW5nIDo6dWludDhfdDsKKyAgdXNpbmcgOjp1aW50MTZfdDsKKyAgdXNpbmcgOjp1aW50MzJfdDsKKyAgdXNpbmcgOjp1aW50NjRfdDsKKworICB1c2luZyA6OnVpbnRfZmFzdDhfdDsKKyAgdXNpbmcgOjp1aW50X2Zhc3QxNl90OworICB1c2luZyA6OnVpbnRfZmFzdDMyX3Q7CisgIHVzaW5nIDo6dWludF9mYXN0NjRfdDsKKworICB1c2luZyA6OnVpbnRfbGVhc3Q4X3Q7CisgIHVzaW5nIDo6dWludF9sZWFzdDE2X3Q7CisgIHVzaW5nIDo6dWludF9sZWFzdDMyX3Q7CisgIHVzaW5nIDo6dWludF9sZWFzdDY0X3Q7CisKKyAgdXNpbmcgOjp1aW50bWF4X3Q7CisgIHVzaW5nIDo6dWludHB0cl90OworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9DU1RESU5UCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzdGRpbyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3N0ZGlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MWU0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzdGRpbwpAQCAtMCwwICsxLDE4NyBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2NzdGRpbworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIHN0ZGlvLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy44LjIgIEMgTGlicmFyeSBmaWxlcworLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NTVERJTworI2RlZmluZSBfR0xJQkNYWF9DU1RESU8gMQorCisjaWZuZGVmIF9HTElCQ1hYX0hBVkVfR0VUUworZXh0ZXJuICJDIiBjaGFyKiBnZXRzIChjaGFyKiBfX3MpIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKTsKKyNlbmRpZgorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDxzdGRpby5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGNsZWFyZXJyCisjdW5kZWYgZmNsb3NlCisjdW5kZWYgZmVvZgorI3VuZGVmIGZlcnJvcgorI3VuZGVmIGZmbHVzaAorI3VuZGVmIGZnZXRjCisjdW5kZWYgZmdldHBvcworI3VuZGVmIGZnZXRzCisjdW5kZWYgZm9wZW4KKyN1bmRlZiBmcHJpbnRmCisjdW5kZWYgZnB1dGMKKyN1bmRlZiBmcHV0cworI3VuZGVmIGZyZWFkCisjdW5kZWYgZnJlb3BlbgorI3VuZGVmIGZzY2FuZgorI3VuZGVmIGZzZWVrCisjdW5kZWYgZnNldHBvcworI3VuZGVmIGZ0ZWxsCisjdW5kZWYgZndyaXRlCisjdW5kZWYgZ2V0YworI3VuZGVmIGdldGNoYXIKKyN1bmRlZiBnZXRzCisjdW5kZWYgcGVycm9yCisjdW5kZWYgcHJpbnRmCisjdW5kZWYgcHV0YworI3VuZGVmIHB1dGNoYXIKKyN1bmRlZiBwdXRzCisjdW5kZWYgcmVtb3ZlCisjdW5kZWYgcmVuYW1lCisjdW5kZWYgcmV3aW5kCisjdW5kZWYgc2NhbmYKKyN1bmRlZiBzZXRidWYKKyN1bmRlZiBzZXR2YnVmCisjdW5kZWYgc3ByaW50ZgorI3VuZGVmIHNzY2FuZgorI3VuZGVmIHRtcGZpbGUKKyN1bmRlZiB0bXBuYW0KKyN1bmRlZiB1bmdldGMKKyN1bmRlZiB2ZnByaW50ZgorI3VuZGVmIHZwcmludGYKKyN1bmRlZiB2c3ByaW50ZgorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIDo6RklMRTsKKyAgdXNpbmcgOjpmcG9zX3Q7CisKKyAgdXNpbmcgOjpjbGVhcmVycjsKKyAgdXNpbmcgOjpmY2xvc2U7CisgIHVzaW5nIDo6ZmVvZjsKKyAgdXNpbmcgOjpmZXJyb3I7CisgIHVzaW5nIDo6ZmZsdXNoOworICB1c2luZyA6OmZnZXRjOworICB1c2luZyA6OmZnZXRwb3M7CisgIHVzaW5nIDo6ZmdldHM7CisgIHVzaW5nIDo6Zm9wZW47CisgIHVzaW5nIDo6ZnByaW50ZjsKKyAgdXNpbmcgOjpmcHV0YzsKKyAgdXNpbmcgOjpmcHV0czsKKyAgdXNpbmcgOjpmcmVhZDsKKyAgdXNpbmcgOjpmcmVvcGVuOworICB1c2luZyA6OmZzY2FuZjsKKyAgdXNpbmcgOjpmc2VlazsKKyAgdXNpbmcgOjpmc2V0cG9zOworICB1c2luZyA6OmZ0ZWxsOworICB1c2luZyA6OmZ3cml0ZTsKKyAgdXNpbmcgOjpnZXRjOworICB1c2luZyA6OmdldGNoYXI7CisgIHVzaW5nIDo6Z2V0czsKKyAgdXNpbmcgOjpwZXJyb3I7CisgIHVzaW5nIDo6cHJpbnRmOworICB1c2luZyA6OnB1dGM7CisgIHVzaW5nIDo6cHV0Y2hhcjsKKyAgdXNpbmcgOjpwdXRzOworICB1c2luZyA6OnJlbW92ZTsKKyAgdXNpbmcgOjpyZW5hbWU7CisgIHVzaW5nIDo6cmV3aW5kOworICB1c2luZyA6OnNjYW5mOworICB1c2luZyA6OnNldGJ1ZjsKKyAgdXNpbmcgOjpzZXR2YnVmOworICB1c2luZyA6OnNwcmludGY7CisgIHVzaW5nIDo6c3NjYW5mOworICB1c2luZyA6OnRtcGZpbGU7CisgIHVzaW5nIDo6dG1wbmFtOworICB1c2luZyA6OnVuZ2V0YzsKKyAgdXNpbmcgOjp2ZnByaW50ZjsKKyAgdXNpbmcgOjp2cHJpbnRmOworICB1c2luZyA6OnZzcHJpbnRmOworfSAvLyBuYW1lc3BhY2UKKworI2lmIF9HTElCQ1hYX1VTRV9DOTkKKworI3VuZGVmIHNucHJpbnRmCisjdW5kZWYgdmZzY2FuZgorI3VuZGVmIHZzY2FuZgorI3VuZGVmIHZzbnByaW50ZgorI3VuZGVmIHZzc2NhbmYKKworbmFtZXNwYWNlIF9fZ251X2N4eAoreworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ0hFQ0sgfHwgX0dMSUJDWFhfVVNFX0M5OV9EWU5BTUlDCisgIGV4dGVybiAiQyIgaW50CisgIChzbnByaW50ZikoY2hhciAqIF9fcmVzdHJpY3QsIHN0ZDo6c2l6ZV90LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgLi4uKQorICB0aHJvdyAoKTsKKyAgZXh0ZXJuICJDIiBpbnQKKyAgKHZmc2NhbmYpKEZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpOworICBleHRlcm4gIkMiIGludCAodnNjYW5mKShjb25zdCBjaGFyICogX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpOworICBleHRlcm4gIkMiIGludAorICAodnNucHJpbnRmKShjaGFyICogX19yZXN0cmljdCwgc3RkOjpzaXplX3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAorCSAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKKyAgZXh0ZXJuICJDIiBpbnQKKyAgKHZzc2NhbmYpKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpCisgIHRocm93ICgpOworI2VuZGlmCisKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9EWU5BTUlDCisgIHVzaW5nIDo6c25wcmludGY7CisgIHVzaW5nIDo6dmZzY2FuZjsKKyAgdXNpbmcgOjp2c2NhbmY7CisgIHVzaW5nIDo6dnNucHJpbnRmOworICB1c2luZyA6OnZzc2NhbmY7CisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIF9fZ251X2N4eAorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIDo6X19nbnVfY3h4OjpzbnByaW50ZjsKKyAgdXNpbmcgOjpfX2dudV9jeHg6OnZmc2NhbmY7CisgIHVzaW5nIDo6X19nbnVfY3h4Ojp2c2NhbmY7CisgIHVzaW5nIDo6X19nbnVfY3h4Ojp2c25wcmludGY7CisgIHVzaW5nIDo6X19nbnVfY3h4Ojp2c3NjYW5mOworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VU0VfQzk5CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RkbGliIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RkbGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODAwMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2NzdGRsaWIKQEAgLTAsMCArMSwyNjAgQEAKKy8vIC0qLSBDKysgLSotIGZvcndhcmRpbmcgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9jc3RkbGliCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgc3RkbGliLmgsCisgKiAgYW5kIGl0cyBjb250ZW50cyBhcmUgKG1vc3RseSkgdGhlIHNhbWUgYXMgdGhhdCBoZWFkZXIsIGJ1dCBhcmUgYWxsCisgKiAgY29udGFpbmVkIGluIHRoZSBuYW1lc3BhY2UgQGMgc3RkIChleGNlcHQgZm9yIG5hbWVzIHdoaWNoIGFyZSBkZWZpbmVkCisgKiAgYXMgbWFjcm9zIGluIEMpLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMC40LjYgIEMgbGlicmFyeQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworI2lmbmRlZiBfR0xJQkNYWF9DU1RETElCCisjZGVmaW5lIF9HTElCQ1hYX0NTVERMSUIgMQorCisjaWYgIV9HTElCQ1hYX0hPU1RFRAorLy8gVGhlIEMgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhIGZyZWVzdGFuZGluZyBpbXBsZW1lbnRhdGlvbiB0bworLy8gcHJvdmlkZSA8c3RkbGliLmg+LiAgSG93ZXZlciwgdGhlIEMrKyBzdGFuZGFyZCBkb2VzIHN0aWxsIHJlcXVpcmUKKy8vIDxjc3RkbGliPiAtLSBidXQgb25seSB0aGUgZnVuY3Rpb25hbGl0eSBtZW50aW9uZWQgaW4KKy8vIFtsaWIuc3VwcG9ydC5zdGFydC50ZXJtXS4KKworI2RlZmluZSBFWElUX1NVQ0NFU1MgMAorI2RlZmluZSBFWElUX0ZBSUxVUkUgMQorCituYW1lc3BhY2Ugc3RkCit7CisgIGV4dGVybiAiQyIgdm9pZCBhYm9ydCh2b2lkKSB0aHJvdyAoKSBfR0xJQkNYWF9OT1JFVFVSTjsKKyAgZXh0ZXJuICJDIiBpbnQgYXRleGl0KHZvaWQgKCopKCkpIHRocm93ICgpOworICBleHRlcm4gIkMiIHZvaWQgZXhpdChpbnQpIHRocm93ICgpIF9HTElCQ1hYX05PUkVUVVJOOworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgaWZkZWYgX0dMSUJDWFhfSEFWRV9BVF9RVUlDS19FWElUCisgIGV4dGVybiAiQyIgaW50IGF0X3F1aWNrX2V4aXQodm9pZCAoKikoKSkgdGhyb3cgKCk7CisjIGVuZGlmCisjIGlmZGVmIF9HTElCQ1hYX0hBVkVfUVVJQ0tfRVhJVAorICBleHRlcm4gIkMiIHZvaWQgcXVpY2tfZXhpdChpbnQpIHRocm93KCkgX0dMSUJDWFhfTk9SRVRVUk47CisjIGVuZGlmCisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZWxzZQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8vIEdldCByaWQgb2YgdGhvc2UgbWFjcm9zIGRlZmluZWQgaW4gPHN0ZGxpYi5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGFib3J0CisjdW5kZWYgYWJzCisjdW5kZWYgYXRleGl0CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorIyBpZmRlZiBfR0xJQkNYWF9IQVZFX0FUX1FVSUNLX0VYSVQKKyMgIHVuZGVmIGF0X3F1aWNrX2V4aXQKKyMgZW5kaWYKKyNlbmRpZgorI3VuZGVmIGF0b2YKKyN1bmRlZiBhdG9pCisjdW5kZWYgYXRvbAorI3VuZGVmIGJzZWFyY2gKKyN1bmRlZiBjYWxsb2MKKyN1bmRlZiBkaXYKKyN1bmRlZiBleGl0CisjdW5kZWYgZnJlZQorI3VuZGVmIGdldGVudgorI3VuZGVmIGxhYnMKKyN1bmRlZiBsZGl2CisjdW5kZWYgbWFsbG9jCisjdW5kZWYgbWJsZW4KKyN1bmRlZiBtYnN0b3djcworI3VuZGVmIG1idG93YworI3VuZGVmIHFzb3J0CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorIyBpZmRlZiBfR0xJQkNYWF9IQVZFX1FVSUNLX0VYSVQKKyMgIHVuZGVmIHF1aWNrX2V4aXQKKyMgZW5kaWYKKyNlbmRpZgorI3VuZGVmIHJhbmQKKyN1bmRlZiByZWFsbG9jCisjdW5kZWYgc3JhbmQKKyN1bmRlZiBzdHJ0b2QKKyN1bmRlZiBzdHJ0b2wKKyN1bmRlZiBzdHJ0b3VsCisjdW5kZWYgc3lzdGVtCisjdW5kZWYgd2NzdG9tYnMKKyN1bmRlZiB3Y3RvbWIKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHVzaW5nIDo6ZGl2X3Q7CisgIHVzaW5nIDo6bGRpdl90OworCisgIHVzaW5nIDo6YWJvcnQ7CisgIHVzaW5nIDo6YWJzOworICB1c2luZyA6OmF0ZXhpdDsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjIGlmZGVmIF9HTElCQ1hYX0hBVkVfQVRfUVVJQ0tfRVhJVAorICB1c2luZyA6OmF0X3F1aWNrX2V4aXQ7CisjIGVuZGlmCisjZW5kaWYKKyAgdXNpbmcgOjphdG9mOworICB1c2luZyA6OmF0b2k7CisgIHVzaW5nIDo6YXRvbDsKKyAgdXNpbmcgOjpic2VhcmNoOworICB1c2luZyA6OmNhbGxvYzsKKyAgdXNpbmcgOjpkaXY7CisgIHVzaW5nIDo6ZXhpdDsKKyAgdXNpbmcgOjpmcmVlOworICB1c2luZyA6OmdldGVudjsKKyAgdXNpbmcgOjpsYWJzOworICB1c2luZyA6OmxkaXY7CisgIHVzaW5nIDo6bWFsbG9jOworI2lmZGVmIF9HTElCQ1hYX0hBVkVfTUJTVEFURV9UCisgIHVzaW5nIDo6bWJsZW47CisgIHVzaW5nIDo6bWJzdG93Y3M7CisgIHVzaW5nIDo6bWJ0b3djOworI2VuZGlmIC8vIF9HTElCQ1hYX0hBVkVfTUJTVEFURV9UCisgIHVzaW5nIDo6cXNvcnQ7CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorIyBpZmRlZiBfR0xJQkNYWF9IQVZFX1FVSUNLX0VYSVQKKyAgdXNpbmcgOjpxdWlja19leGl0OworIyBlbmRpZgorI2VuZGlmCisgIHVzaW5nIDo6cmFuZDsKKyAgdXNpbmcgOjpyZWFsbG9jOworICB1c2luZyA6OnNyYW5kOworICB1c2luZyA6OnN0cnRvZDsKKyAgdXNpbmcgOjpzdHJ0b2w7CisgIHVzaW5nIDo6c3RydG91bDsKKyAgdXNpbmcgOjpzeXN0ZW07CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdXNpbmcgOjp3Y3N0b21iczsKKyAgdXNpbmcgOjp3Y3RvbWI7CisjZW5kaWYgLy8gX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9TVERMSUJfSF9QUk9UTworICBpbmxpbmUgbG9uZworICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIF9fYnVpbHRpbl9sYWJzKF9faSk7IH0KKworICBpbmxpbmUgbGRpdl90CisgIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgaW5saW5lIGxvbmcgbG9uZworICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX19idWlsdGluX2xsYWJzIChfX3gpOyB9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfSU5UMTI4KQorICBpbmxpbmUgX19pbnQxMjgKKyAgYWJzKF9faW50MTI4IF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OQorCisjdW5kZWYgX0V4aXQKKyN1bmRlZiBsbGFicworI3VuZGVmIGxsZGl2CisjdW5kZWYgYXRvbGwKKyN1bmRlZiBzdHJ0b2xsCisjdW5kZWYgc3RydG91bGwKKyN1bmRlZiBzdHJ0b2YKKyN1bmRlZiBzdHJ0b2xkCisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworI2lmICFfR0xJQkNYWF9VU0VfQzk5X0xPTkdfTE9OR19EWU5BTUlDCisgIHVzaW5nIDo6bGxkaXZfdDsKKyNlbmRpZgorI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ0hFQ0sgfHwgX0dMSUJDWFhfVVNFX0M5OV9EWU5BTUlDCisgIGV4dGVybiAiQyIgdm9pZCAoX0V4aXQpKGludCkgdGhyb3cgKCkgX0dMSUJDWFhfTk9SRVRVUk47CisjZW5kaWYKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9EWU5BTUlDCisgIHVzaW5nIDo6X0V4aXQ7CisjZW5kaWYKKworI2lmICFfR0xJQkNYWF9VU0VfQzk5X0xPTkdfTE9OR19EWU5BTUlDCisgIHVzaW5nIDo6bGxhYnM7CisKKyAgaW5saW5lIGxsZGl2X3QKKyAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCisgIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CisKKyAgdXNpbmcgOjpsbGRpdjsKKyNlbmRpZgorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfQ0hFQ0sgfHwgX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfRFlOQU1JQworICBleHRlcm4gIkMiIGxvbmcgbG9uZyBpbnQgKGF0b2xsKShjb25zdCBjaGFyICopIHRocm93ICgpOworICBleHRlcm4gIkMiIGxvbmcgbG9uZyBpbnQKKyAgICAoc3RydG9sbCkoY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIGNoYXIgKiogX19yZXN0cmljdCwgaW50KSB0aHJvdyAoKTsKKyAgZXh0ZXJuICJDIiB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisgICAgKHN0cnRvdWxsKShjb25zdCBjaGFyICogX19yZXN0cmljdCwgY2hhciAqKiBfX3Jlc3RyaWN0LCBpbnQpIHRocm93ICgpOworI2VuZGlmCisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKKyAgdXNpbmcgOjphdG9sbDsKKyAgdXNpbmcgOjpzdHJ0b2xsOworICB1c2luZyA6OnN0cnRvdWxsOworI2VuZGlmCisgIHVzaW5nIDo6c3RydG9mOworICB1c2luZyA6OnN0cnRvbGQ7CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgX19nbnVfY3h4CisKK25hbWVzcGFjZSBzdGQKK3sKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfRFlOQU1JQworICB1c2luZyA6Ol9fZ251X2N4eDo6bGxkaXZfdDsKKyNlbmRpZgorICB1c2luZyA6Ol9fZ251X2N4eDo6X0V4aXQ7CisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKKyAgdXNpbmcgOjpfX2dudV9jeHg6OmxsYWJzOworICB1c2luZyA6Ol9fZ251X2N4eDo6ZGl2OworICB1c2luZyA6Ol9fZ251X2N4eDo6bGxkaXY7CisjZW5kaWYKKyAgdXNpbmcgOjpfX2dudV9jeHg6OmF0b2xsOworICB1c2luZyA6Ol9fZ251X2N4eDo6c3RydG9mOworICB1c2luZyA6Ol9fZ251X2N4eDo6c3RydG9sbDsKKyAgdXNpbmcgOjpfX2dudV9jeHg6OnN0cnRvdWxsOworICB1c2luZyA6Ol9fZ251X2N4eDo6c3RydG9sZDsKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gX0dMSUJDWFhfVVNFX0M5OQorCisjZW5kaWYgLy8gIV9HTElCQ1hYX0hPU1RFRAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3N0cmluZyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3N0cmluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmRlZmFiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jc3RyaW5nCkBAIC0wLDAgKzEsMTIzIEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGNzdHJpbmcKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgZmlsZS4gIFlvdSBzaG91bGQgQGMgXCNpbmNsdWRlIHRoaXMgZmlsZQorICogIGluIHlvdXIgcHJvZ3JhbXMsIHJhdGhlciB0aGFuIGFueSBvZiB0aGUgQGEgKi5oIGltcGxlbWVudGF0aW9uIGZpbGVzLgorICoKKyAqICBUaGlzIGlzIHRoZSBDKysgdmVyc2lvbiBvZiB0aGUgU3RhbmRhcmQgQyBMaWJyYXJ5IGhlYWRlciBAYyBzdHJpbmcuaCwKKyAqICBhbmQgaXRzIGNvbnRlbnRzIGFyZSAobW9zdGx5KSB0aGUgc2FtZSBhcyB0aGF0IGhlYWRlciwgYnV0IGFyZSBhbGwKKyAqICBjb250YWluZWQgaW4gdGhlIG5hbWVzcGFjZSBAYyBzdGQgKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKKyAqICBhcyBtYWNyb3MgaW4gQykuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIwLjQuNiAgQyBsaWJyYXJ5CisvLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NTVFJJTkcKKyNkZWZpbmUgX0dMSUJDWFhfQ1NUUklORyAxCisKKy8vIEdldCByaWQgb2YgdGhvc2UgbWFjcm9zIGRlZmluZWQgaW4gPHN0cmluZy5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIG1lbWNocgorI3VuZGVmIG1lbWNtcAorI3VuZGVmIG1lbWNweQorI3VuZGVmIG1lbW1vdmUKKyN1bmRlZiBtZW1zZXQKKyN1bmRlZiBzdHJjYXQKKyN1bmRlZiBzdHJjaHIKKyN1bmRlZiBzdHJjbXAKKyN1bmRlZiBzdHJjb2xsCisjdW5kZWYgc3RyY3B5CisjdW5kZWYgc3RyY3NwbgorI3VuZGVmIHN0cmVycm9yCisjdW5kZWYgc3RybGVuCisjdW5kZWYgc3RybmNhdAorI3VuZGVmIHN0cm5jbXAKKyN1bmRlZiBzdHJuY3B5CisjdW5kZWYgc3RycGJyaworI3VuZGVmIHN0cnJjaHIKKyN1bmRlZiBzdHJzcG4KKyN1bmRlZiBzdHJzdHIKKyN1bmRlZiBzdHJ0b2sKKyN1bmRlZiBzdHJ4ZnJtCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB1c2luZyA6Om1lbWNocjsKKyAgdXNpbmcgOjptZW1jbXA7CisgIHVzaW5nIDo6bWVtY3B5OworICB1c2luZyA6Om1lbW1vdmU7CisgIHVzaW5nIDo6bWVtc2V0OworICB1c2luZyA6OnN0cmNhdDsKKyAgdXNpbmcgOjpzdHJjbXA7CisgIHVzaW5nIDo6c3RyY29sbDsKKyAgdXNpbmcgOjpzdHJjcHk7CisgIHVzaW5nIDo6c3RyY3NwbjsKKyAgdXNpbmcgOjpzdHJlcnJvcjsKKyAgdXNpbmcgOjpzdHJsZW47CisgIHVzaW5nIDo6c3RybmNhdDsKKyAgdXNpbmcgOjpzdHJuY21wOworICB1c2luZyA6OnN0cm5jcHk7CisgIHVzaW5nIDo6c3Ryc3BuOworICB1c2luZyA6OnN0cnRvazsKKyAgdXNpbmcgOjpzdHJ4ZnJtOworICB1c2luZyA6OnN0cmNocjsKKyAgdXNpbmcgOjpzdHJwYnJrOworICB1c2luZyA6OnN0cnJjaHI7CisgIHVzaW5nIDo6c3Ryc3RyOworCisjaWZuZGVmIF9fQ09SUkVDVF9JU09fQ1BQX1NUUklOR19IX1BST1RPCisgIGlubGluZSB2b2lkKgorICBtZW1jaHIodm9pZCogX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQorICB7IHJldHVybiBfX2J1aWx0aW5fbWVtY2hyKF9fcywgX19jLCBfX24pOyB9CisKKyAgaW5saW5lIGNoYXIqCisgIHN0cmNocihjaGFyKiBfX3MsIGludCBfX24pCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoX19zLCBfX24pOyB9CisKKyAgaW5saW5lIGNoYXIqCisgIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKKyAgeyByZXR1cm4gX19idWlsdGluX3N0cnBicmsoX19zMSwgX19zMik7IH0KKworICBpbmxpbmUgY2hhcioKKyAgc3RycmNocihjaGFyKiBfX3MsIGludCBfX24pCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKF9fcywgX19uKTsgfQorCisgIGlubGluZSBjaGFyKgorICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKKyAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihfX3MxLCBfX3MyKTsgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2N0Z21hdGggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2N0Z21hdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5OTliZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3RnbWF0aApAQCAtMCwwICsxLDQxIEBACisvLyA8Y3RnbWF0aD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY3RnbWF0aAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWZuZGVmIF9HTElCQ1hYX0NUR01BVEgKKyNkZWZpbmUgX0dMSUJDWFhfQ1RHTUFUSCAxCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGNtYXRoPgorI2VuZGlmCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jdGltZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3RpbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZlMDQwZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3RpbWUKQEAgLTAsMCArMSw3NSBAQAorLy8gLSotIEMrKyAtKi0gZm9yd2FyZGluZyBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2N0aW1lCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgdGltZS5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjAuNSAgRGF0ZSBhbmQgdGltZQorLy8KKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1RJTUUKKyNkZWZpbmUgX0dMSUJDWFhfQ1RJTUUgMQorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDx0aW1lLmg+IGluIGxpZXUgb2YgcmVhbCBmdW5jdGlvbnMuCisjdW5kZWYgY2xvY2sKKyN1bmRlZiBkaWZmdGltZQorI3VuZGVmIG1rdGltZQorI3VuZGVmIHRpbWUKKyN1bmRlZiBhc2N0aW1lCisjdW5kZWYgY3RpbWUKKyN1bmRlZiBnbXRpbWUKKyN1bmRlZiBsb2NhbHRpbWUKKyN1bmRlZiBzdHJmdGltZQorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIDo6Y2xvY2tfdDsKKyAgdXNpbmcgOjp0aW1lX3Q7CisgIHVzaW5nIDo6dG07CisKKyAgdXNpbmcgOjpjbG9jazsKKyAgdXNpbmcgOjpkaWZmdGltZTsKKyAgdXNpbmcgOjpta3RpbWU7CisgIHVzaW5nIDo6dGltZTsKKyAgdXNpbmcgOjphc2N0aW1lOworICB1c2luZyA6OmN0aW1lOworICB1c2luZyA6OmdtdGltZTsKKyAgdXNpbmcgOjpsb2NhbHRpbWU7CisgIHVzaW5nIDo6c3RyZnRpbWU7Cit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3djaGFyIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jd2NoYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiYjY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3djaGFyCkBAIC0wLDAgKzEsMzAzIEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY3djaGFyCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGZpbGUuICBZb3Ugc2hvdWxkIEBjIFwjaW5jbHVkZSB0aGlzIGZpbGUKKyAqICBpbiB5b3VyIHByb2dyYW1zLCByYXRoZXIgdGhhbiBhbnkgb2YgdGhlIEBhICouaCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KKyAqCisgKiAgVGhpcyBpcyB0aGUgQysrIHZlcnNpb24gb2YgdGhlIFN0YW5kYXJkIEMgTGlicmFyeSBoZWFkZXIgQGMgd2NoYXIuaCwKKyAqICBhbmQgaXRzIGNvbnRlbnRzIGFyZSAobW9zdGx5KSB0aGUgc2FtZSBhcyB0aGF0IGhlYWRlciwgYnV0IGFyZSBhbGwKKyAqICBjb250YWluZWQgaW4gdGhlIG5hbWVzcGFjZSBAYyBzdGQgKGV4Y2VwdCBmb3IgbmFtZXMgd2hpY2ggYXJlIGRlZmluZWQKKyAqICBhcyBtYWNyb3MgaW4gQykuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIxLjQKKy8vCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKKyNpZiBfR0xJQkNYWF9IQVZFX1dDSEFSX0gKKyNpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfQ1dDSEFSCisjZGVmaW5lIF9HTElCQ1hYX0NXQ0hBUiAxCisKKy8vIE5lZWQgdG8gZG8gYSBiaXQgb2YgdHJpY2tlcnkgaGVyZSB3aXRoIG1ic3RhdGVfdCBhcyBjaGFyX3RyYWl0cworLy8gYXNzdW1lcyBpdCBpcyBpbiB3Y2hhci5oLCByZWdhcmRsZXNzIG9mIHdjaGFyX3Qgc3BlY2lhbGl6YXRpb25zLgorI2lmbmRlZiBfR0xJQkNYWF9IQVZFX01CU1RBVEVfVAorZXh0ZXJuICJDIgoreworICB0eXBlZGVmIHN0cnVjdAorICB7CisgICAgaW50IF9fZmlsbFs2XTsKKyAgfSBtYnN0YXRlX3Q7Cit9CisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZAoreworICB1c2luZyA6Om1ic3RhdGVfdDsKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisvLyBHZXQgcmlkIG9mIHRob3NlIG1hY3JvcyBkZWZpbmVkIGluIDx3Y2hhci5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGJ0b3djCisjdW5kZWYgZmdldHdjCisjdW5kZWYgZmdldHdzCisjdW5kZWYgZnB1dHdjCisjdW5kZWYgZnB1dHdzCisjdW5kZWYgZndpZGUKKyN1bmRlZiBmd3ByaW50ZgorI3VuZGVmIGZ3c2NhbmYKKyN1bmRlZiBnZXR3YworI3VuZGVmIGdldHdjaGFyCisjdW5kZWYgbWJybGVuCisjdW5kZWYgbWJydG93YworI3VuZGVmIG1ic2luaXQKKyN1bmRlZiBtYnNydG93Y3MKKyN1bmRlZiBwdXR3YworI3VuZGVmIHB1dHdjaGFyCisjdW5kZWYgc3dwcmludGYKKyN1bmRlZiBzd3NjYW5mCisjdW5kZWYgdW5nZXR3YworI3VuZGVmIHZmd3ByaW50ZgorI2lmIF9HTElCQ1hYX0hBVkVfVkZXU0NBTkYKKyMgdW5kZWYgdmZ3c2NhbmYKKyNlbmRpZgorI3VuZGVmIHZzd3ByaW50ZgorI2lmIF9HTElCQ1hYX0hBVkVfVlNXU0NBTkYKKyMgdW5kZWYgdnN3c2NhbmYKKyNlbmRpZgorI3VuZGVmIHZ3cHJpbnRmCisjaWYgX0dMSUJDWFhfSEFWRV9WV1NDQU5GCisjIHVuZGVmIHZ3c2NhbmYKKyNlbmRpZgorI3VuZGVmIHdjcnRvbWIKKyN1bmRlZiB3Y3NjYXQKKyN1bmRlZiB3Y3NjaHIKKyN1bmRlZiB3Y3NjbXAKKyN1bmRlZiB3Y3Njb2xsCisjdW5kZWYgd2NzY3B5CisjdW5kZWYgd2NzY3NwbgorI3VuZGVmIHdjc2Z0aW1lCisjdW5kZWYgd2NzbGVuCisjdW5kZWYgd2NzbmNhdAorI3VuZGVmIHdjc25jbXAKKyN1bmRlZiB3Y3NuY3B5CisjdW5kZWYgd2NzcGJyaworI3VuZGVmIHdjc3JjaHIKKyN1bmRlZiB3Y3NydG9tYnMKKyN1bmRlZiB3Y3NzcG4KKyN1bmRlZiB3Y3NzdHIKKyN1bmRlZiB3Y3N0b2QKKyNpZiBfR0xJQkNYWF9IQVZFX1dDU1RPRgorIyB1bmRlZiB3Y3N0b2YKKyNlbmRpZgorI3VuZGVmIHdjc3RvaworI3VuZGVmIHdjc3RvbAorI3VuZGVmIHdjc3RvdWwKKyN1bmRlZiB3Y3N4ZnJtCisjdW5kZWYgd2N0b2IKKyN1bmRlZiB3bWVtY2hyCisjdW5kZWYgd21lbWNtcAorI3VuZGVmIHdtZW1jcHkKKyN1bmRlZiB3bWVtbW92ZQorI3VuZGVmIHdtZW1zZXQKKyN1bmRlZiB3cHJpbnRmCisjdW5kZWYgd3NjYW5mCisKKyNpZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdXNpbmcgOjp3aW50X3Q7CisKKyAgdXNpbmcgOjpidG93YzsKKyAgdXNpbmcgOjpmZ2V0d2M7CisgIHVzaW5nIDo6ZmdldHdzOworICB1c2luZyA6OmZwdXR3YzsKKyAgdXNpbmcgOjpmcHV0d3M7CisgIHVzaW5nIDo6ZndpZGU7CisgIHVzaW5nIDo6ZndwcmludGY7CisgIHVzaW5nIDo6ZndzY2FuZjsKKyAgdXNpbmcgOjpnZXR3YzsKKyAgdXNpbmcgOjpnZXR3Y2hhcjsKKyAgdXNpbmcgOjptYnJsZW47CisgIHVzaW5nIDo6bWJydG93YzsKKyAgdXNpbmcgOjptYnNpbml0OworICB1c2luZyA6Om1ic3J0b3djczsKKyAgdXNpbmcgOjpwdXR3YzsKKyAgdXNpbmcgOjpwdXR3Y2hhcjsKKyNpZm5kZWYgX0dMSUJDWFhfSEFWRV9CUk9LRU5fVlNXUFJJTlRGCisgIHVzaW5nIDo6c3dwcmludGY7CisjZW5kaWYKKyAgdXNpbmcgOjpzd3NjYW5mOworICB1c2luZyA6OnVuZ2V0d2M7CisgIHVzaW5nIDo6dmZ3cHJpbnRmOworI2lmIF9HTElCQ1hYX0hBVkVfVkZXU0NBTkYKKyAgdXNpbmcgOjp2ZndzY2FuZjsKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9IQVZFX0JST0tFTl9WU1dQUklOVEYKKyAgdXNpbmcgOjp2c3dwcmludGY7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZTV1NDQU5GCisgIHVzaW5nIDo6dnN3c2NhbmY7CisjZW5kaWYKKyAgdXNpbmcgOjp2d3ByaW50ZjsKKyNpZiBfR0xJQkNYWF9IQVZFX1ZXU0NBTkYKKyAgdXNpbmcgOjp2d3NjYW5mOworI2VuZGlmCisgIHVzaW5nIDo6d2NydG9tYjsKKyAgdXNpbmcgOjp3Y3NjYXQ7CisgIHVzaW5nIDo6d2NzY21wOworICB1c2luZyA6Ondjc2NvbGw7CisgIHVzaW5nIDo6d2NzY3B5OworICB1c2luZyA6Ondjc2NzcG47CisgIHVzaW5nIDo6d2NzZnRpbWU7CisgIHVzaW5nIDo6d2NzbGVuOworICB1c2luZyA6Ondjc25jYXQ7CisgIHVzaW5nIDo6d2NzbmNtcDsKKyAgdXNpbmcgOjp3Y3NuY3B5OworICB1c2luZyA6Ondjc3J0b21iczsKKyAgdXNpbmcgOjp3Y3NzcG47CisgIHVzaW5nIDo6d2NzdG9kOworI2lmIF9HTElCQ1hYX0hBVkVfV0NTVE9GCisgIHVzaW5nIDo6d2NzdG9mOworI2VuZGlmCisgIHVzaW5nIDo6d2NzdG9rOworICB1c2luZyA6Ondjc3RvbDsKKyAgdXNpbmcgOjp3Y3N0b3VsOworICB1c2luZyA6Ondjc3hmcm07CisgIHVzaW5nIDo6d2N0b2I7CisgIHVzaW5nIDo6d21lbWNtcDsKKyAgdXNpbmcgOjp3bWVtY3B5OworICB1c2luZyA6OndtZW1tb3ZlOworICB1c2luZyA6OndtZW1zZXQ7CisgIHVzaW5nIDo6d3ByaW50ZjsKKyAgdXNpbmcgOjp3c2NhbmY7CisgIHVzaW5nIDo6d2NzY2hyOworICB1c2luZyA6Ondjc3Bicms7CisgIHVzaW5nIDo6d2NzcmNocjsKKyAgdXNpbmcgOjp3Y3NzdHI7CisgIHVzaW5nIDo6d21lbWNocjsKKworI2lmbmRlZiBfX0NPUlJFQ1RfSVNPX0NQUF9XQ0hBUl9IX1BST1RPCisgIGlubGluZSB3Y2hhcl90KgorICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKKyAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KKworICBpbmxpbmUgd2NoYXJfdCoKKyAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCBjb25zdCB3Y2hhcl90KiBfX3MyKQorICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQorCisgIGlubGluZSB3Y2hhcl90KgorICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCisgIHsgcmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQorCisgIGlubGluZSB3Y2hhcl90KgorICB3Y3NzdHIod2NoYXJfdCogX19zMSwgY29uc3Qgd2NoYXJfdCogX19zMikKKyAgeyByZXR1cm4gd2Nzc3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQorCisgIGlubGluZSB3Y2hhcl90KgorICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCisgIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OQorCisjdW5kZWYgd2NzdG9sZAorI3VuZGVmIHdjc3RvbGwKKyN1bmRlZiB3Y3N0b3VsbAorCituYW1lc3BhY2UgX19nbnVfY3h4Cit7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DSEVDSyB8fCBfR0xJQkNYWF9VU0VfQzk5X0RZTkFNSUMKKyAgZXh0ZXJuICJDIiBsb25nIGRvdWJsZQorICAgICh3Y3N0b2xkKShjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCwgd2NoYXJfdCAqKiBfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKKyNlbmRpZgorI2lmICFfR0xJQkNYWF9VU0VfQzk5X0RZTkFNSUMKKyAgdXNpbmcgOjp3Y3N0b2xkOworI2VuZGlmCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfQ0hFQ0sgfHwgX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfRFlOQU1JQworICBleHRlcm4gIkMiIGxvbmcgbG9uZyBpbnQKKyAgICAod2NzdG9sbCkoY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsIHdjaGFyX3QgKiogX19yZXN0cmljdCwgaW50KSB0aHJvdyAoKTsKKyAgZXh0ZXJuICJDIiB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisgICAgKHdjc3RvdWxsKShjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCwgd2NoYXJfdCAqKiBfX3Jlc3RyaWN0LCBpbnQpIHRocm93ICgpOworI2VuZGlmCisjaWYgIV9HTElCQ1hYX1VTRV9DOTlfTE9OR19MT05HX0RZTkFNSUMKKyAgdXNpbmcgOjp3Y3N0b2xsOworICB1c2luZyA6Ondjc3RvdWxsOworI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBfX2dudV9jeHgKKworbmFtZXNwYWNlIHN0ZAoreworICB1c2luZyA6Ol9fZ251X2N4eDo6d2NzdG9sZDsKKyAgdXNpbmcgOjpfX2dudV9jeHg6Ondjc3RvbGw7CisgIHVzaW5nIDo6X19nbnVfY3h4Ojp3Y3N0b3VsbDsKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgorCisjZW5kaWYgLy9fR0xJQkNYWF9VU0VfV0NIQVJfVAorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworbmFtZXNwYWNlIHN0ZAoreworI2lmIF9HTElCQ1hYX0hBVkVfV0NTVE9GCisgIHVzaW5nIHN0ZDo6d2NzdG9mOworI2VuZGlmCisjaWYgX0dMSUJDWFhfSEFWRV9WRldTQ0FORgorICB1c2luZyBzdGQ6OnZmd3NjYW5mOworI2VuZGlmCisjaWYgX0dMSUJDWFhfSEFWRV9WU1dTQ0FORgorICB1c2luZyBzdGQ6OnZzd3NjYW5mOworI2VuZGlmCisjaWYgX0dMSUJDWFhfSEFWRV9WV1NDQU5GCisgIHVzaW5nIHN0ZDo6dndzY2FuZjsKKyNlbmRpZgorCisjaWYgX0dMSUJDWFhfVVNFX0M5OQorICB1c2luZyBzdGQ6Ondjc3RvbGQ7CisgIHVzaW5nIHN0ZDo6d2NzdG9sbDsKKyAgdXNpbmcgc3RkOjp3Y3N0b3VsbDsKKyNlbmRpZgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3djdHlwZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3djdHlwZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTQ1N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9jd2N0eXBlCkBAIC0wLDAgKzEsMTEwIEBACisvLyAtKi0gQysrIC0qLSBmb3J3YXJkaW5nIGhlYWRlci4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvY3djdHlwZQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBmaWxlLiAgWW91IHNob3VsZCBAYyBcI2luY2x1ZGUgdGhpcyBmaWxlCisgKiAgaW4geW91ciBwcm9ncmFtcywgcmF0aGVyIHRoYW4gYW55IG9mIHRoZSBAYSAqLmggaW1wbGVtZW50YXRpb24gZmlsZXMuCisgKgorICogIFRoaXMgaXMgdGhlIEMrKyB2ZXJzaW9uIG9mIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkgaGVhZGVyIEBjIHdjdHlwZS5oLAorICogIGFuZCBpdHMgY29udGVudHMgYXJlIChtb3N0bHkpIHRoZSBzYW1lIGFzIHRoYXQgaGVhZGVyLCBidXQgYXJlIGFsbAorICogIGNvbnRhaW5lZCBpbiB0aGUgbmFtZXNwYWNlIEBjIHN0ZCAoZXhjZXB0IGZvciBuYW1lcyB3aGljaCBhcmUgZGVmaW5lZAorICogIGFzIG1hY3JvcyBpbiBDKS4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogPGN3Y3R5cGU+CisvLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisjaWYgX0dMSUJDWFhfSEFWRV9XQ1RZUEVfSAorCisjaWYgX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fIDwgMTAKKy8vIFdvcmsgYXJvdW5kIGdsaWJjIEJaIDk2OTQKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d2N0eXBlLmg+CisjZW5kaWYgLy8gX0dMSUJDWFhfSEFWRV9XQ1RZUEVfSAorCisjaWZuZGVmIF9HTElCQ1hYX0NXQ1RZUEUKKyNkZWZpbmUgX0dMSUJDWFhfQ1dDVFlQRSAxCisKKy8vIEdldCByaWQgb2YgdGhvc2UgbWFjcm9zIGRlZmluZWQgaW4gPHdjdHlwZS5oPiBpbiBsaWV1IG9mIHJlYWwgZnVuY3Rpb25zLgorI3VuZGVmIGlzd2FsbnVtCisjdW5kZWYgaXN3YWxwaGEKKyNpZiBfR0xJQkNYWF9IQVZFX0lTV0JMQU5LCisjIHVuZGVmIGlzd2JsYW5rCisjZW5kaWYKKyN1bmRlZiBpc3djbnRybAorI3VuZGVmIGlzd2N0eXBlCisjdW5kZWYgaXN3ZGlnaXQKKyN1bmRlZiBpc3dncmFwaAorI3VuZGVmIGlzd2xvd2VyCisjdW5kZWYgaXN3cHJpbnQKKyN1bmRlZiBpc3dwdW5jdAorI3VuZGVmIGlzd3NwYWNlCisjdW5kZWYgaXN3dXBwZXIKKyN1bmRlZiBpc3d4ZGlnaXQKKyN1bmRlZiB0b3djdHJhbnMKKyN1bmRlZiB0b3dsb3dlcgorI3VuZGVmIHRvd3VwcGVyCisjdW5kZWYgd2N0cmFucworI3VuZGVmIHdjdHlwZQorCisjaWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworbmFtZXNwYWNlIHN0ZAoreworICB1c2luZyA6OndjdHJhbnNfdDsKKyAgdXNpbmcgOjp3Y3R5cGVfdDsKKyAgdXNpbmcgOjp3aW50X3Q7CisKKyAgdXNpbmcgOjppc3dhbG51bTsKKyAgdXNpbmcgOjppc3dhbHBoYTsKKyNpZiBfR0xJQkNYWF9IQVZFX0lTV0JMQU5LCisgIHVzaW5nIDo6aXN3Ymxhbms7CisjZW5kaWYKKyAgdXNpbmcgOjppc3djbnRybDsKKyAgdXNpbmcgOjppc3djdHlwZTsKKyAgdXNpbmcgOjppc3dkaWdpdDsKKyAgdXNpbmcgOjppc3dncmFwaDsKKyAgdXNpbmcgOjppc3dsb3dlcjsKKyAgdXNpbmcgOjppc3dwcmludDsKKyAgdXNpbmcgOjppc3dwdW5jdDsKKyAgdXNpbmcgOjppc3dzcGFjZTsKKyAgdXNpbmcgOjppc3d1cHBlcjsKKyAgdXNpbmcgOjppc3d4ZGlnaXQ7CisgIHVzaW5nIDo6dG93Y3RyYW5zOworICB1c2luZyA6OnRvd2xvd2VyOworICB1c2luZyA6OnRvd3VwcGVyOworICB1c2luZyA6OndjdHJhbnM7CisgIHVzaW5nIDo6d2N0eXBlOworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworI2VuZGlmIC8vIF9HTElCQ1hYX0NXQ1RZUEUKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvY3h4YWJpLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2N4eGFiaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzAxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2N4eGFiaS5oCkBAIC0wLDAgKzEsNzAwIEBACisvLyBBQkkgU3VwcG9ydCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisvLworLy8gR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIFdyaXR0ZW4gYnkgTmF0aGFuIFNpZHdlbGwsIENvZGVzb3VyY2VyeSBMTEMsIDxuYXRoYW5AY29kZXNvdXJjZXJ5LmNvbT4KKworLyogVGhpcyBmaWxlIGRlY2xhcmVzIHRoZSBuZXcgYWJpIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBydW50aW1lLiBJdCBpcyBub3QKKyAgIG5vcm1hbGx5IG5lY2Vzc2FyeSBmb3IgdXNlciBwcm9ncmFtcyB0byBpbmNsdWRlIHRoaXMgaGVhZGVyLCBvciB1c2UgdGhlCisgICBlbnRyeSBwb2ludHMgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoaXMgaGVhZGVyIGlzIGF2YWlsYWJsZSBzaG91bGQgdGhhdCBiZQorICAgbmVlZGVkLgorCisgICBTb21lIG9mIHRoZSBlbnRyeSBwb2ludHMgYXJlIGludGVuZGVkIGZvciBib3RoIEMgYW5kIEMrKywgdGh1cyB0aGlzIGhlYWRlcgorICAgaXMgaW5jbHVkYWJsZSBmcm9tIGJvdGggQyBhbmQgQysrLiBUaG91Z2ggdGhlIEMrKyBzcGVjaWZpYyBwYXJ0cyBhcmUgbm90CisgICBhdmFpbGFibGUgaW4gQywgbmF0dXJhbGx5IGVub3VnaC4gICovCisKKy8qKiBAZmlsZSBjeHhhYmkuaAorICogIFRoZSBoZWFkZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBDKysgQUJJLgorICovCisKKyNpZm5kZWYgX0NYWEFCSV9ICisjZGVmaW5lIF9DWFhBQklfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvY3h4YWJpX3R3ZWFrcy5oPgorI2luY2x1ZGUgPGJpdHMvY3h4YWJpX2ZvcmNlZC5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0NEVE9SX0NBTExBQkkKKyNkZWZpbmUgX0dMSUJDWFhfQ0RUT1JfQ0FMTEFCSQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworbmFtZXNwYWNlIF9fY3h4YWJpdjEKK3sKKyAgZXh0ZXJuICJDIgorICB7CisjZW5kaWYKKworICB0eXBlZGVmIF9fY3hhX2NkdG9yX3JldHVybl90eXBlICgqX19jeGFfY2R0b3JfdHlwZSkodm9pZCAqKTsKKworICAvLyBBbGxvY2F0ZSBhcnJheS4KKyAgdm9pZCoKKyAgX19jeGFfdmVjX25ldyhzaXplX3QgX19lbGVtZW50X2NvdW50LCBzaXplX3QgX19lbGVtZW50X3NpemUsCisJCXNpemVfdCBfX3BhZGRpbmdfc2l6ZSwgX19jeGFfY2R0b3JfdHlwZSBfX2NvbnN0cnVjdG9yLAorCQlfX2N4YV9jZHRvcl90eXBlIF9fZGVzdHJ1Y3Rvcik7CisKKyAgdm9pZCoKKyAgX19jeGFfdmVjX25ldzIoc2l6ZV90IF9fZWxlbWVudF9jb3VudCwgc2l6ZV90IF9fZWxlbWVudF9zaXplLAorCQkgc2l6ZV90IF9fcGFkZGluZ19zaXplLCBfX2N4YV9jZHRvcl90eXBlIF9fY29uc3RydWN0b3IsCisJCSBfX2N4YV9jZHRvcl90eXBlIF9fZGVzdHJ1Y3Rvciwgdm9pZCAqKCpfX2FsbG9jKSAoc2l6ZV90KSwKKwkJIHZvaWQgKCpfX2RlYWxsb2MpICh2b2lkKikpOworCisgIHZvaWQqCisgIF9fY3hhX3ZlY19uZXczKHNpemVfdCBfX2VsZW1lbnRfY291bnQsIHNpemVfdCBfX2VsZW1lbnRfc2l6ZSwKKwkJIHNpemVfdCBfX3BhZGRpbmdfc2l6ZSwgX19jeGFfY2R0b3JfdHlwZSBfX2NvbnN0cnVjdG9yLAorCQkgX19jeGFfY2R0b3JfdHlwZSBfX2Rlc3RydWN0b3IsIHZvaWQgKigqX19hbGxvYykgKHNpemVfdCksCisJCSB2b2lkICgqX19kZWFsbG9jKSAodm9pZCosIHNpemVfdCkpOworCisgIC8vIENvbnN0cnVjdCBhcnJheS4KKyAgX19jeGFfdmVjX2N0b3JfcmV0dXJuX3R5cGUKKyAgX19jeGFfdmVjX2N0b3Iodm9pZCogX19hcnJheV9hZGRyZXNzLCBzaXplX3QgX19lbGVtZW50X2NvdW50LAorCQkgc2l6ZV90IF9fZWxlbWVudF9zaXplLCBfX2N4YV9jZHRvcl90eXBlIF9fY29uc3RydWN0b3IsCisJCSBfX2N4YV9jZHRvcl90eXBlIF9fZGVzdHJ1Y3Rvcik7CisKKyAgX19jeGFfdmVjX2N0b3JfcmV0dXJuX3R5cGUKKyAgX19jeGFfdmVjX2NjdG9yKHZvaWQqIF9fZGVzdF9hcnJheSwgdm9pZCogX19zcmNfYXJyYXksCisJCSAgc2l6ZV90IF9fZWxlbWVudF9jb3VudCwgc2l6ZV90IF9fZWxlbWVudF9zaXplLAorCQkgIF9fY3hhX2NkdG9yX3JldHVybl90eXBlICgqX19jb25zdHJ1Y3RvcikgKHZvaWQqLCB2b2lkKiksCisJCSAgX19jeGFfY2R0b3JfdHlwZSBfX2Rlc3RydWN0b3IpOworCisgIC8vIERlc3RydWN0IGFycmF5LgorICB2b2lkCisgIF9fY3hhX3ZlY19kdG9yKHZvaWQqIF9fYXJyYXlfYWRkcmVzcywgc2l6ZV90IF9fZWxlbWVudF9jb3VudCwKKwkJIHNpemVfdCBfX2VsZW1lbnRfc2l6ZSwgX19jeGFfY2R0b3JfdHlwZSBfX2Rlc3RydWN0b3IpOworCisgIHZvaWQKKyAgX19jeGFfdmVjX2NsZWFudXAodm9pZCogX19hcnJheV9hZGRyZXNzLCBzaXplX3QgX19lbGVtZW50X2NvdW50LCBzaXplX3QgX19zLAorCQkgICAgX19jeGFfY2R0b3JfdHlwZSBfX2Rlc3RydWN0b3IpIF9HTElCQ1hYX05PVEhST1c7CisKKyAgLy8gRGVzdHJ1Y3QgYW5kIHJlbGVhc2UgYXJyYXkuCisgIHZvaWQKKyAgX19jeGFfdmVjX2RlbGV0ZSh2b2lkKiBfX2FycmF5X2FkZHJlc3MsIHNpemVfdCBfX2VsZW1lbnRfc2l6ZSwKKwkJICAgc2l6ZV90IF9fcGFkZGluZ19zaXplLCBfX2N4YV9jZHRvcl90eXBlIF9fZGVzdHJ1Y3Rvcik7CisKKyAgdm9pZAorICBfX2N4YV92ZWNfZGVsZXRlMih2b2lkKiBfX2FycmF5X2FkZHJlc3MsIHNpemVfdCBfX2VsZW1lbnRfc2l6ZSwKKwkJICAgIHNpemVfdCBfX3BhZGRpbmdfc2l6ZSwgX19jeGFfY2R0b3JfdHlwZSBfX2Rlc3RydWN0b3IsCisJCSAgICB2b2lkICgqX19kZWFsbG9jKSAodm9pZCopKTsKKworICB2b2lkCisgIF9fY3hhX3ZlY19kZWxldGUzKHZvaWQqIF9fYXJyYXlfYWRkcmVzcywgc2l6ZV90IF9fZWxlbWVudF9zaXplLAorCQkgICAgc2l6ZV90IF9fcGFkZGluZ19zaXplLCBfX2N4YV9jZHRvcl90eXBlIF9fZGVzdHJ1Y3RvciwKKwkJICAgIHZvaWQgKCpfX2RlYWxsb2MpICh2b2lkKiwgc2l6ZV90KSk7CisKKyAgaW50CisgIF9fY3hhX2d1YXJkX2FjcXVpcmUoX19ndWFyZCopOworCisgIHZvaWQKKyAgX19jeGFfZ3VhcmRfcmVsZWFzZShfX2d1YXJkKikgX0dMSUJDWFhfTk9USFJPVzsKKworICB2b2lkCisgIF9fY3hhX2d1YXJkX2Fib3J0KF9fZ3VhcmQqKSBfR0xJQkNYWF9OT1RIUk9XOworCisgIC8vIERTTyBkZXN0cnVjdGlvbi4KKyAgaW50CisgIF9fY3hhX2F0ZXhpdCh2b2lkICgqKSh2b2lkKiksIHZvaWQqLCB2b2lkKikgX0dMSUJDWFhfTk9USFJPVzsKKworICBpbnQKKyAgX19jeGFfZmluYWxpemUodm9pZCopOworCisgIC8vIFRMUyBkZXN0cnVjdGlvbi4KKyAgaW50CisgIF9fY3hhX3RocmVhZF9hdGV4aXQodm9pZCAoKikodm9pZCopLCB2b2lkKiwgdm9pZCAqKSBfR0xJQkNYWF9OT1RIUk9XOworCisgIC8vIFB1cmUgdmlydHVhbCBmdW5jdGlvbnMuCisgIHZvaWQKKyAgX19jeGFfcHVyZV92aXJ0dWFsKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkCisgIF9fY3hhX2RlbGV0ZWRfdmlydHVhbCh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKyAgLy8gRXhjZXB0aW9uIGhhbmRsaW5nIGF1eGlsbGFyeS4KKyAgdm9pZCAKKyAgX19jeGFfYmFkX2Nhc3QoKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICB2b2lkIAorICBfX2N4YV9iYWRfdHlwZWlkKCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CisKKworICAvKioKKyAgICogIEBicmllZiBEZW1hbmdsaW5nIHJvdXRpbmUuCisgICAqICBBQkktbWFuZGF0ZWQgZW50cnkgcG9pbnQgaW4gdGhlIEMrKyBydW50aW1lIGxpYnJhcnkgZm9yIGRlbWFuZ2xpbmcuCisgICAqCisgICAqICBAcGFyYW0gX19tYW5nbGVkX25hbWUgQSBOVUwtdGVybWluYXRlZCBjaGFyYWN0ZXIgc3RyaW5nCisgICAqICBjb250YWluaW5nIHRoZSBuYW1lIHRvIGJlIGRlbWFuZ2xlZC4KKyAgICoKKyAgICogIEBwYXJhbSBfX291dHB1dF9idWZmZXIgQSByZWdpb24gb2YgbWVtb3J5LCBhbGxvY2F0ZWQgd2l0aAorICAgKiAgbWFsbG9jLCBvZiBAYSAqX19sZW5ndGggYnl0ZXMsIGludG8gd2hpY2ggdGhlIGRlbWFuZ2xlZCBuYW1lIGlzCisgICAqICBzdG9yZWQuICBJZiBAYSBfX291dHB1dF9idWZmZXIgaXMgbm90IGxvbmcgZW5vdWdoLCBpdCBpcworICAgKiAgZXhwYW5kZWQgdXNpbmcgcmVhbGxvYy4gIEBhIF9fb3V0cHV0X2J1ZmZlciBtYXkgaW5zdGVhZCBiZSBOVUxMOworICAgKiAgaW4gdGhhdCBjYXNlLCB0aGUgZGVtYW5nbGVkIG5hbWUgaXMgcGxhY2VkIGluIGEgcmVnaW9uIG9mIG1lbW9yeQorICAgKiAgYWxsb2NhdGVkIHdpdGggbWFsbG9jLgorICAgKgorICAgKiAgQHBhcmFtIF9fbGVuZ3RoIElmIEBhIF9fbGVuZ3RoIGlzIG5vbi1OVUxMLCB0aGUgbGVuZ3RoIG9mIHRoZQorICAgKiAgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRlbWFuZ2xlZCBuYW1lIGlzIHBsYWNlZCBpbiBAYSAqX19sZW5ndGguCisgICAqCisgICAqICBAcGFyYW0gX19zdGF0dXMgQGEgKl9fc3RhdHVzIGlzIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICAqICAgMDogVGhlIGRlbWFuZ2xpbmcgb3BlcmF0aW9uIHN1Y2NlZWRlZC4KKyAgICogIC0xOiBBIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgb2NjdXJyZWQuCisgICAqICAtMjogQGEgbWFuZ2xlZF9uYW1lIGlzIG5vdCBhIHZhbGlkIG5hbWUgdW5kZXIgdGhlIEMrKyBBQkkgbWFuZ2xpbmcgcnVsZXMuCisgICAqICAtMzogT25lIG9mIHRoZSBhcmd1bWVudHMgaXMgaW52YWxpZC4KKyAgICoKKyAgICogIEByZXR1cm4gQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgTlVMLXRlcm1pbmF0ZWQgZGVtYW5nbGVkCisgICAqICBuYW1lLCBvciBOVUxMIGlmIHRoZSBkZW1hbmdsaW5nIGZhaWxzLiAgVGhlIGNhbGxlciBpcworICAgKiAgcmVzcG9uc2libGUgZm9yIGRlYWxsb2NhdGluZyB0aGlzIG1lbW9yeSB1c2luZyBAYyBmcmVlLgorICAgKgorICAgKiAgVGhlIGRlbWFuZ2xpbmcgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBDKysgQUJJIG1hbmdsaW5nIHJ1bGVzLAorICAgKiAgd2l0aCBHTlUgZXh0ZW5zaW9ucy4gRm9yIGV4YW1wbGUsIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbgorICAgKiAgX19nbnVfY3h4OjpfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIuCisgICAqCisgICAqICBTZWUgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQxMmNoMzkuaHRtbAorICAgKiAgZm9yIG90aGVyIGV4YW1wbGVzIG9mIHVzZS4KKyAgICoKKyAgICogIEBub3RlIFRoZSBzYW1lIGRlbWFuZ2xpbmcgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUgdmlhCisgICAqICBsaWJpYmVydHkgKEBjIDxsaWJpYmVydHkvZGVtYW5nbGUuaD4gYW5kIEBjIGxpYmliZXJ0eS5hKSBpbiBHQ0MKKyAgICogIDMuMSBhbmQgbGF0ZXIsIGJ1dCB0aGF0IHJlcXVpcmVzIGV4cGxpY2l0IGluc3RhbGxhdGlvbiAoQGMKKyAgICogIC0tZW5hYmxlLWluc3RhbGwtbGliaWJlcnR5KSBhbmQgdXNlcyBhIGRpZmZlcmVudCBBUEksIGFsdGhvdWdoCisgICAqICB0aGUgQUJJIGlzIHVuY2hhbmdlZC4KKyAgICovCisgIGNoYXIqCisgIF9fY3hhX2RlbWFuZ2xlKGNvbnN0IGNoYXIqIF9fbWFuZ2xlZF9uYW1lLCBjaGFyKiBfX291dHB1dF9idWZmZXIsCisJCSBzaXplX3QqIF9fbGVuZ3RoLCBpbnQqIF9fc3RhdHVzKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgIH0KK30gLy8gbmFtZXNwYWNlIF9fY3h4YWJpdjEKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKworI2luY2x1ZGUgPHR5cGVpbmZvPgorCituYW1lc3BhY2UgX19jeHhhYml2MQoreworICAvLyBUeXBlIGluZm9ybWF0aW9uIGZvciBpbnQsIGZsb2F0IGV0Yy4KKyAgY2xhc3MgX19mdW5kYW1lbnRhbF90eXBlX2luZm8gOiBwdWJsaWMgc3RkOjp0eXBlX2luZm8KKyAgeworICBwdWJsaWM6CisgICAgZXhwbGljaXQKKyAgICBfX2Z1bmRhbWVudGFsX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24pIDogc3RkOjp0eXBlX2luZm8oX19uKSB7IH0KKworICAgIHZpcnR1YWwKKyAgICB+X19mdW5kYW1lbnRhbF90eXBlX2luZm8oKTsKKyAgfTsKKworICAvLyBUeXBlIGluZm9ybWF0aW9uIGZvciBhcnJheSBvYmplY3RzLgorICBjbGFzcyBfX2FycmF5X3R5cGVfaW5mbyA6IHB1YmxpYyBzdGQ6OnR5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdAorICAgIF9fYXJyYXlfdHlwZV9pbmZvKGNvbnN0IGNoYXIqIF9fbikgOiBzdGQ6OnR5cGVfaW5mbyhfX24pIHsgfQorCisgICAgdmlydHVhbAorICAgIH5fX2FycmF5X3R5cGVfaW5mbygpOworICB9OworCisgIC8vIFR5cGUgaW5mb3JtYXRpb24gZm9yIGZ1bmN0aW9ucyAoYm90aCBtZW1iZXIgYW5kIG5vbi1tZW1iZXIpLgorICBjbGFzcyBfX2Z1bmN0aW9uX3R5cGVfaW5mbyA6IHB1YmxpYyBzdGQ6OnR5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdAorICAgIF9fZnVuY3Rpb25fdHlwZV9pbmZvKGNvbnN0IGNoYXIqIF9fbikgOiBzdGQ6OnR5cGVfaW5mbyhfX24pIHsgfQorCisgICAgdmlydHVhbAorICAgIH5fX2Z1bmN0aW9uX3R5cGVfaW5mbygpOworCisgIHByb3RlY3RlZDoKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1lbWJlciBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wKKyAgICBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKKyAgfTsKKworICAvLyBUeXBlIGluZm9ybWF0aW9uIGZvciBlbnVtZXJhdGlvbnMuCisgIGNsYXNzIF9fZW51bV90eXBlX2luZm8gOiBwdWJsaWMgc3RkOjp0eXBlX2luZm8KKyAgeworICBwdWJsaWM6CisgICAgZXhwbGljaXQKKyAgICBfX2VudW1fdHlwZV9pbmZvKGNvbnN0IGNoYXIqIF9fbikgOiBzdGQ6OnR5cGVfaW5mbyhfX24pIHsgfQorCisgICAgdmlydHVhbAorICAgIH5fX2VudW1fdHlwZV9pbmZvKCk7CisgIH07CisKKyAgLy8gQ29tbW9uIHR5cGUgaW5mb3JtYXRpb24gZm9yIHNpbXBsZSBwb2ludGVycyBhbmQgcG9pbnRlcnMgdG8gbWVtYmVyLgorICBjbGFzcyBfX3BiYXNlX3R5cGVfaW5mbyA6IHB1YmxpYyBzdGQ6OnR5cGVfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICB1bnNpZ25lZCBpbnQgCQlfX2ZsYWdzOyAvLyBRdWFsaWZpY2F0aW9uIG9mIHRoZSB0YXJnZXQgb2JqZWN0LgorICAgIGNvbnN0IHN0ZDo6dHlwZV9pbmZvKiAJX19wb2ludGVlOyAvLyBUeXBlIG9mIHBvaW50ZWQgdG8gb2JqZWN0LgorCisgICAgZXhwbGljaXQKKyAgICBfX3BiYXNlX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24sIGludCBfX3F1YWxzLAorCQkgICAgICBjb25zdCBzdGQ6OnR5cGVfaW5mbyogX190eXBlKQorICAgIDogc3RkOjp0eXBlX2luZm8oX19uKSwgX19mbGFncyhfX3F1YWxzKSwgX19wb2ludGVlKF9fdHlwZSkKKyAgICB7IH0KKworICAgIHZpcnR1YWwKKyAgICB+X19wYmFzZV90eXBlX2luZm8oKTsKKworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4KKyAgICBlbnVtIF9fbWFza3MKKyAgICAgIHsKKwlfX2NvbnN0X21hc2sgPSAweDEsCisJX192b2xhdGlsZV9tYXNrID0gMHgyLAorCV9fcmVzdHJpY3RfbWFzayA9IDB4NCwKKwlfX2luY29tcGxldGVfbWFzayA9IDB4OCwKKwlfX2luY29tcGxldGVfY2xhc3NfbWFzayA9IDB4MTAKKyAgICAgIH07CisKKyAgcHJvdGVjdGVkOgorICAgIF9fcGJhc2VfdHlwZV9pbmZvKGNvbnN0IF9fcGJhc2VfdHlwZV9pbmZvJik7CisKKyAgICBfX3BiYXNlX3R5cGVfaW5mbyYKKyAgICBvcGVyYXRvcj0oY29uc3QgX19wYmFzZV90eXBlX2luZm8mKTsKKworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wKKyAgICBfX2RvX2NhdGNoKGNvbnN0IHN0ZDo6dHlwZV9pbmZvKiBfX3Rocl90eXBlLCB2b2lkKiogX190aHJfb2JqLAorCSAgICAgICB1bnNpZ25lZCBpbnQgX19vdXRlcikgY29uc3Q7CisKKyAgICBpbmxpbmUgdmlydHVhbCBib29sCisgICAgX19wb2ludGVyX2NhdGNoKGNvbnN0IF9fcGJhc2VfdHlwZV9pbmZvKiBfX3Rocl90eXBlLCB2b2lkKiogX190aHJfb2JqLAorCQkgICAgdW5zaWduZWQgX19vdXRlcikgY29uc3Q7CisgIH07CisKKyAgLy8gVHlwZSBpbmZvcm1hdGlvbiBmb3Igc2ltcGxlIHBvaW50ZXJzLgorICBjbGFzcyBfX3BvaW50ZXJfdHlwZV9pbmZvIDogcHVibGljIF9fcGJhc2VfdHlwZV9pbmZvCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0CisgICAgX19wb2ludGVyX3R5cGVfaW5mbyhjb25zdCBjaGFyKiBfX24sIGludCBfX3F1YWxzLAorCQkJY29uc3Qgc3RkOjp0eXBlX2luZm8qIF9fdHlwZSkKKyAgICA6IF9fcGJhc2VfdHlwZV9pbmZvIChfX24sIF9fcXVhbHMsIF9fdHlwZSkgeyB9CisKKworICAgIHZpcnR1YWwKKyAgICB+X19wb2ludGVyX3R5cGVfaW5mbygpOworCisgIHByb3RlY3RlZDoKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1lbWJlciBmdW5jdGlvbnMuCisgICAgdmlydHVhbCBib29sCisgICAgX19pc19wb2ludGVyX3AoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbAorICAgIF9fcG9pbnRlcl9jYXRjaChjb25zdCBfX3BiYXNlX3R5cGVfaW5mbyogX190aHJfdHlwZSwgdm9pZCoqIF9fdGhyX29iaiwKKwkJICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OworICB9OworCisgIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOworCisgIC8vIFR5cGUgaW5mb3JtYXRpb24gZm9yIGEgcG9pbnRlciB0byBtZW1iZXIgdmFyaWFibGUuCisgIGNsYXNzIF9fcG9pbnRlcl90b19tZW1iZXJfdHlwZV9pbmZvIDogcHVibGljIF9fcGJhc2VfdHlwZV9pbmZvCisgIHsKKyAgcHVibGljOgorICAgIF9fY2xhc3NfdHlwZV9pbmZvKiBfX2NvbnRleHQ7ICAgLy8gQ2xhc3Mgb2YgdGhlIG1lbWJlci4KKworICAgIGV4cGxpY2l0CisgICAgX19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm8oY29uc3QgY2hhciogX19uLCBpbnQgX19xdWFscywKKwkJCQkgIGNvbnN0IHN0ZDo6dHlwZV9pbmZvKiBfX3R5cGUsCisJCQkJICBfX2NsYXNzX3R5cGVfaW5mbyogX19rbGFzcykKKyAgICA6IF9fcGJhc2VfdHlwZV9pbmZvKF9fbiwgX19xdWFscywgX190eXBlKSwgX19jb250ZXh0KF9fa2xhc3MpIHsgfQorCisgICAgdmlydHVhbAorICAgIH5fX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGVfaW5mbygpOworCisgIHByb3RlY3RlZDoKKyAgICBfX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGVfaW5mbyhjb25zdCBfX3BvaW50ZXJfdG9fbWVtYmVyX3R5cGVfaW5mbyYpOworCisgICAgX19wb2ludGVyX3RvX21lbWJlcl90eXBlX2luZm8mCisgICAgb3BlcmF0b3I9KGNvbnN0IF9fcG9pbnRlcl90b19tZW1iZXJfdHlwZV9pbmZvJik7CisKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1lbWJlciBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wKKyAgICBfX3BvaW50ZXJfY2F0Y2goY29uc3QgX19wYmFzZV90eXBlX2luZm8qIF9fdGhyX3R5cGUsIHZvaWQqKiBfX3Rocl9vYmosCisJCSAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKKyAgfTsKKworICAvLyBIZWxwZXIgY2xhc3MgZm9yIF9fdm1pX2NsYXNzX3R5cGUuCisgIGNsYXNzIF9fYmFzZV9jbGFzc190eXBlX2luZm8KKyAgeworICBwdWJsaWM6CisgICAgY29uc3QgX19jbGFzc190eXBlX2luZm8qIAlfX2Jhc2VfdHlwZTsgIC8vIEJhc2UgY2xhc3MgdHlwZS4KKyNpZmRlZiBfR0xJQkNYWF9MTFA2NAorICAgIGxvbmcgbG9uZwkJCV9fb2Zmc2V0X2ZsYWdzOyAgLy8gT2Zmc2V0IGFuZCBpbmZvLgorI2Vsc2UKKyAgICBsb25nIAkJCV9fb2Zmc2V0X2ZsYWdzOyAgLy8gT2Zmc2V0IGFuZCBpbmZvLgorI2VuZGlmCisKKyAgICBlbnVtIF9fb2Zmc2V0X2ZsYWdzX21hc2tzCisgICAgICB7CisJX192aXJ0dWFsX21hc2sgPSAweDEsCisJX19wdWJsaWNfbWFzayA9IDB4MiwKKwlfX2h3bV9iaXQgPSAyLAorCV9fb2Zmc2V0X3NoaWZ0ID0gOCAgICAgICAgICAvLyBCaXRzIHRvIHNoaWZ0IG9mZnNldC4KKyAgICAgIH07CisKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1lbWJlciBmdW5jdGlvbnMuCisgICAgYm9vbAorICAgIF9faXNfdmlydHVhbF9wKCkgY29uc3QKKyAgICB7IHJldHVybiBfX29mZnNldF9mbGFncyAmIF9fdmlydHVhbF9tYXNrOyB9CisKKyAgICBib29sCisgICAgX19pc19wdWJsaWNfcCgpIGNvbnN0CisgICAgeyByZXR1cm4gX19vZmZzZXRfZmxhZ3MgJiBfX3B1YmxpY19tYXNrOyB9CisKKyAgICBwdHJkaWZmX3QKKyAgICBfX29mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgLy8gVGhpcyBzaGlmdCwgYmVpbmcgb2YgYSBzaWduZWQgdHlwZSwgaXMgaW1wbGVtZW50YXRpb24KKyAgICAgIC8vIGRlZmluZWQuIEdDQyBpbXBsZW1lbnRzIHN1Y2ggc2hpZnRzIGFzIGFyaXRobWV0aWMsIHdoaWNoIGlzCisgICAgICAvLyB3aGF0IHdlIHdhbnQuCisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihfX29mZnNldF9mbGFncykgPj4gX19vZmZzZXRfc2hpZnQ7CisgICAgfQorICB9OworCisgIC8vIFR5cGUgaW5mb3JtYXRpb24gZm9yIGEgY2xhc3MuCisgIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvIDogcHVibGljIHN0ZDo6dHlwZV9pbmZvCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0CisgICAgX19jbGFzc190eXBlX2luZm8gKGNvbnN0IGNoYXIgKl9fbikgOiB0eXBlX2luZm8oX19uKSB7IH0KKworICAgIHZpcnR1YWwKKyAgICB+X19jbGFzc190eXBlX2luZm8gKCk7CisKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGVzLgorICAgIC8vIFRoZSB0eXBlIHN1Yl9raW5kIHRlbGxzIHVzIGFib3V0IGhvdyBhIGJhc2Ugb2JqZWN0IGlzIGNvbnRhaW5lZAorICAgIC8vIHdpdGhpbiBhIGRlcml2ZWQgb2JqZWN0LiBXZSBvZnRlbiBkbyB0aGlzIGxhemlseSwgaGVuY2UgdGhlCisgICAgLy8gVU5LTk9XTiB2YWx1ZS4gQXQgb3RoZXIgdGltZXMgd2UgbWF5IHVzZSBOT1RfQ09OVEFJTkVEIHRvIG1lYW4KKyAgICAvLyBub3QgcHVibGljbHkgY29udGFpbmVkLgorICAgIGVudW0gX19zdWJfa2luZAorICAgICAgeworCS8vIFdlIGhhdmUgbm8gaWRlYS4KKwlfX3Vua25vd24gPSAwLAorCisJLy8gTm90IGNvbnRhaW5lZCB3aXRoaW4gdXMgKGluIHNvbWUgY2lyY3Vtc3RhbmNlcyB0aGlzIG1pZ2h0CisJLy8gbWVhbiBub3QgY29udGFpbmVkIHB1YmxpY2x5KQorCV9fbm90X2NvbnRhaW5lZCwKKworCS8vIENvbnRhaW5lZCBhbWJpZ3VvdXNseS4KKwlfX2NvbnRhaW5lZF9hbWJpZywKKworCS8vIFZpYSBhIHZpcnR1YWwgcGF0aC4KKwlfX2NvbnRhaW5lZF92aXJ0dWFsX21hc2sgPSBfX2Jhc2VfY2xhc3NfdHlwZV9pbmZvOjpfX3ZpcnR1YWxfbWFzaywKKworCS8vIFZpYSBhIHB1YmxpYyBwYXRoLgorCV9fY29udGFpbmVkX3B1YmxpY19tYXNrID0gX19iYXNlX2NsYXNzX3R5cGVfaW5mbzo6X19wdWJsaWNfbWFzaywKKworCS8vIENvbnRhaW5lZCB3aXRoaW4gdXMuCisJX19jb250YWluZWRfbWFzayA9IDEgPDwgX19iYXNlX2NsYXNzX3R5cGVfaW5mbzo6X19od21fYml0LAorCisJX19jb250YWluZWRfcHJpdmF0ZSA9IF9fY29udGFpbmVkX21hc2ssCisJX19jb250YWluZWRfcHVibGljID0gX19jb250YWluZWRfbWFzayB8IF9fY29udGFpbmVkX3B1YmxpY19tYXNrCisgICAgICB9OworCisgICAgc3RydWN0IF9fdXBjYXN0X3Jlc3VsdDsKKyAgICBzdHJ1Y3QgX19keW5jYXN0X3Jlc3VsdDsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtZW1iZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbAorICAgIF9fZG9fdXBjYXN0KGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2RzdF90eXBlLCB2b2lkKipfX29ial9wdHIpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sCisgICAgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8qIF9fdGhyX3R5cGUsIHZvaWQqKiBfX3Rocl9vYmosCisJICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OworCisgIHB1YmxpYzoKKyAgICAvLyBIZWxwZXIgZm9yIHVwY2FzdC4gU2VlIGlmIERTVCBpcyB1cywgb3Igb25lIG9mIG91ciBiYXNlcy4KKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgbm90IGZvdW5kLCB0cnVlIGlmIGZvdW5kLgorICAgIHZpcnR1YWwgYm9vbAorICAgIF9fZG9fdXBjYXN0KGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2RzdCwgY29uc3Qgdm9pZCogX19vYmosCisJCV9fdXBjYXN0X3Jlc3VsdCYgX19yZXN0cmljdCBfX3Jlc3VsdCkgY29uc3Q7CisKKyAgICAvLyBJbmRpY2F0ZSB3aGV0aGVyIFNSQ19QVFIgb2YgdHlwZSBTUkNfVFlQRSBpcyBjb250YWluZWQgcHVibGljbHkKKyAgICAvLyB3aXRoaW4gT0JKX1BUUi4gT0JKX1BUUiBwb2ludHMgdG8gYSBiYXNlIG9iamVjdCBvZiBvdXIgdHlwZSwKKyAgICAvLyB3aGljaCBpcyB0aGUgZGVzdGluYXRpb24gdHlwZS4gU1JDMkRTVCBpbmRpY2F0ZXMgaG93IFNSQworICAgIC8vIG9iamVjdHMgbWlnaHQgYmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIHR5cGUuICBJZiBTUkNfUFRSIGlzIG9uZQorICAgIC8vIG9mIG91ciBTUkNfVFlQRSBiYXNlcywgaW5kaWNhdGUgdGhlIHZpcnR1YWxpdHkuIFJldHVybnMKKyAgICAvLyBub3RfY29udGFpbmVkIGZvciBub24gY29udGFpbm1lbnQgb3IgcHJpdmF0ZSBjb250YWlubWVudC4KKyAgICBpbmxpbmUgX19zdWJfa2luZAorICAgIF9fZmluZF9wdWJsaWNfc3JjKHB0cmRpZmZfdCBfX3NyYzJkc3QsIGNvbnN0IHZvaWQqIF9fb2JqX3B0ciwKKwkJICAgICAgY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fc3JjX3R5cGUsCisJCSAgICAgIGNvbnN0IHZvaWQqIF9fc3JjX3B0cikgY29uc3Q7CisKKyAgICAvLyBIZWxwZXIgZm9yIGR5bmFtaWMgY2FzdC4gQUNDRVNTX1BBVEggZ2l2ZXMgdGhlIGFjY2VzcyBmcm9tIHRoZQorICAgIC8vIG1vc3QgZGVyaXZlZCBvYmplY3QgdG8gdGhpcyBiYXNlLiBEU1RfVFlQRSBpbmRpY2F0ZXMgdGhlCisgICAgLy8gZGVzaXJlZCB0eXBlIHdlIHdhbnQuIE9CSl9QVFIgcG9pbnRzIHRvIGEgYmFzZSBvZiBvdXIgdHlwZQorICAgIC8vIHdpdGhpbiB0aGUgY29tcGxldGUgb2JqZWN0LiBTUkNfVFlQRSBpbmRpY2F0ZXMgdGhlIHN0YXRpYyB0eXBlCisgICAgLy8gc3RhcnRlZCBmcm9tIGFuZCBTUkNfUFRSIHBvaW50cyB0byB0aGF0IGJhc2Ugd2l0aGluIHRoZSBtb3N0CisgICAgLy8gZGVyaXZlZCBvYmplY3QuIEZpbGwgaW4gUkVTVUxUIHdpdGggd2hhdCB3ZSBmaW5kLiBSZXR1cm4gdHJ1ZQorICAgIC8vIGlmIHdlIGhhdmUgbG9jYXRlZCBhbiBhbWJpZ3VvdXMgbWF0Y2guCisgICAgdmlydHVhbCBib29sCisgICAgX19kb19keW5jYXN0KHB0cmRpZmZfdCBfX3NyYzJkc3QsIF9fc3ViX2tpbmQgX19hY2Nlc3NfcGF0aCwKKwkJIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2RzdF90eXBlLCBjb25zdCB2b2lkKiBfX29ial9wdHIsCisJCSBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19zcmNfdHlwZSwgY29uc3Qgdm9pZCogX19zcmNfcHRyLAorCQkgX19keW5jYXN0X3Jlc3VsdCYgX19yZXN1bHQpIGNvbnN0OworCisgICAgLy8gSGVscGVyIGZvciBmaW5kX3B1YmxpY19zdWJvYmouIFNSQzJEU1QgaW5kaWNhdGVzIGhvdyBTUkNfVFlQRQorICAgIC8vIGJhc2VzIGFyZSBpbmhlcml0ZWQgYnkgdGhlIHR5cGUgc3RhcnRlZCBmcm9tIC0tIHdoaWNoIGlzIG5vdAorICAgIC8vIG5lY2Vzc2FyaWx5IHRoZSBjdXJyZW50IHR5cGUuIFRoZSBjdXJyZW50IHR5cGUgd2lsbCBiZSBhIGJhc2UKKyAgICAvLyBvZiB0aGUgZGVzdGluYXRpb24gdHlwZS4gIE9CSl9QVFIgcG9pbnRzIHRvIHRoZSBjdXJyZW50IGJhc2UuCisgICAgdmlydHVhbCBfX3N1Yl9raW5kCisgICAgX19kb19maW5kX3B1YmxpY19zcmMocHRyZGlmZl90IF9fc3JjMmRzdCwgY29uc3Qgdm9pZCogX19vYmpfcHRyLAorCQkJIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX3NyY190eXBlLAorCQkJIGNvbnN0IHZvaWQqIF9fc3JjX3B0cikgY29uc3Q7CisgIH07CisKKyAgLy8gVHlwZSBpbmZvcm1hdGlvbiBmb3IgYSBjbGFzcyB3aXRoIGEgc2luZ2xlIG5vbi12aXJ0dWFsIGJhc2UuCisgIGNsYXNzIF9fc2lfY2xhc3NfdHlwZV9pbmZvIDogcHVibGljIF9fY2xhc3NfdHlwZV9pbmZvCisgIHsKKyAgcHVibGljOgorICAgIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2Jhc2VfdHlwZTsKKworICAgIGV4cGxpY2l0CisgICAgX19zaV9jbGFzc190eXBlX2luZm8oY29uc3QgY2hhciAqX19uLCBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyAqX19iYXNlKQorICAgIDogX19jbGFzc190eXBlX2luZm8oX19uKSwgX19iYXNlX3R5cGUoX19iYXNlKSB7IH0KKworICAgIHZpcnR1YWwKKyAgICB+X19zaV9jbGFzc190eXBlX2luZm8oKTsKKworICBwcm90ZWN0ZWQ6CisgICAgX19zaV9jbGFzc190eXBlX2luZm8oY29uc3QgX19zaV9jbGFzc190eXBlX2luZm8mKTsKKworICAgIF9fc2lfY2xhc3NfdHlwZV9pbmZvJgorICAgIG9wZXJhdG9yPShjb25zdCBfX3NpX2NsYXNzX3R5cGVfaW5mbyYpOworCisgICAgLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtZW1iZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbAorICAgIF9fZG9fZHluY2FzdChwdHJkaWZmX3QgX19zcmMyZHN0LCBfX3N1Yl9raW5kIF9fYWNjZXNzX3BhdGgsCisJCSBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19kc3RfdHlwZSwgY29uc3Qgdm9pZCogX19vYmpfcHRyLAorCQkgY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fc3JjX3R5cGUsIGNvbnN0IHZvaWQqIF9fc3JjX3B0ciwKKwkJIF9fZHluY2FzdF9yZXN1bHQmIF9fcmVzdWx0KSBjb25zdDsKKworICAgIHZpcnR1YWwgX19zdWJfa2luZAorICAgIF9fZG9fZmluZF9wdWJsaWNfc3JjKHB0cmRpZmZfdCBfX3NyYzJkc3QsIGNvbnN0IHZvaWQqIF9fb2JqX3B0ciwKKwkJCSBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19zcmNfdHlwZSwKKwkJCSBjb25zdCB2b2lkKiBfX3N1Yl9wdHIpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sCisgICAgX19kb191cGNhc3QoY29uc3QgX19jbGFzc190eXBlX2luZm8qX19kc3QsIGNvbnN0IHZvaWQqX19vYmosCisJCV9fdXBjYXN0X3Jlc3VsdCYgX19yZXN0cmljdCBfX3Jlc3VsdCkgY29uc3Q7CisgIH07CisKKyAgLy8gVHlwZSBpbmZvcm1hdGlvbiBmb3IgYSBjbGFzcyB3aXRoIG11bHRpcGxlIGFuZC9vciB2aXJ0dWFsIGJhc2VzLgorICBjbGFzcyBfX3ZtaV9jbGFzc190eXBlX2luZm8gOiBwdWJsaWMgX19jbGFzc190eXBlX2luZm8KKyAgeworICBwdWJsaWM6CisgICAgdW5zaWduZWQgaW50IAkJX19mbGFnczsgIC8vIERldGFpbHMgYWJvdXQgdGhlIGNsYXNzIGhpZXJhcmNoeS4KKyAgICB1bnNpZ25lZCBpbnQgCQlfX2Jhc2VfY291bnQ7ICAvLyBOdW1iZXIgb2YgZGlyZWN0IGJhc2VzLgorCisgICAgLy8gVGhlIGFycmF5IG9mIGJhc2VzIHVzZXMgdGhlIHRyYWlsaW5nIGFycmF5IHN0cnVjdCBoYWNrIHNvIHRoaXMKKyAgICAvLyBjbGFzcyBpcyBub3QgY29uc3RydWN0YWJsZSB3aXRoIGEgbm9ybWFsIGNvbnN0cnVjdG9yLiBJdCBpcworICAgIC8vIGludGVybmFsbHkgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlci4KKyAgICBfX2Jhc2VfY2xhc3NfdHlwZV9pbmZvIAlfX2Jhc2VfaW5mb1sxXTsgIC8vIEFycmF5IG9mIGJhc2VzLgorCisgICAgZXhwbGljaXQKKyAgICBfX3ZtaV9jbGFzc190eXBlX2luZm8oY29uc3QgY2hhciogX19uLCBpbnQgX19fZmxhZ3MpCisgICAgOiBfX2NsYXNzX3R5cGVfaW5mbyhfX24pLCBfX2ZsYWdzKF9fX2ZsYWdzKSwgX19iYXNlX2NvdW50KDApIHsgfQorCisgICAgdmlydHVhbAorICAgIH5fX3ZtaV9jbGFzc190eXBlX2luZm8oKTsKKworICAgIC8vIEltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZXMuCisgICAgZW51bSBfX2ZsYWdzX21hc2tzCisgICAgICB7CisJX19ub25fZGlhbW9uZF9yZXBlYXRfbWFzayA9IDB4MSwgLy8gRGlzdGluY3QgaW5zdGFuY2Ugb2YgcmVwZWF0ZWQgYmFzZS4KKwlfX2RpYW1vbmRfc2hhcGVkX21hc2sgPSAweDIsIC8vIERpYW1vbmQgc2hhcGVkIG11bHRpcGxlIGluaGVyaXRhbmNlLgorCV9fZmxhZ3NfdW5rbm93bl9tYXNrID0gMHgxMAorICAgICAgfTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtZW1iZXIgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgYm9vbAorICAgIF9fZG9fZHluY2FzdChwdHJkaWZmX3QgX19zcmMyZHN0LCBfX3N1Yl9raW5kIF9fYWNjZXNzX3BhdGgsCisJCSBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19kc3RfdHlwZSwgY29uc3Qgdm9pZCogX19vYmpfcHRyLAorCQkgY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fc3JjX3R5cGUsIGNvbnN0IHZvaWQqIF9fc3JjX3B0ciwKKwkJIF9fZHluY2FzdF9yZXN1bHQmIF9fcmVzdWx0KSBjb25zdDsKKworICAgIHZpcnR1YWwgX19zdWJfa2luZAorICAgIF9fZG9fZmluZF9wdWJsaWNfc3JjKHB0cmRpZmZfdCBfX3NyYzJkc3QsIGNvbnN0IHZvaWQqIF9fb2JqX3B0ciwKKwkJCSBjb25zdCBfX2NsYXNzX3R5cGVfaW5mbyogX19zcmNfdHlwZSwKKwkJCSBjb25zdCB2b2lkKiBfX3NyY19wdHIpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sCisgICAgX19kb191cGNhc3QoY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fZHN0LCBjb25zdCB2b2lkKiBfX29iaiwKKwkJX191cGNhc3RfcmVzdWx0JiBfX3Jlc3RyaWN0IF9fcmVzdWx0KSBjb25zdDsKKyAgfTsKKworICAvLyBFeGNlcHRpb24gaGFuZGxpbmcgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgIHN0cnVjdCBfX2N4YV9leGNlcHRpb247CisgIHN0cnVjdCBfX2N4YV9yZWZjb3VudGVkX2V4Y2VwdGlvbjsKKyAgc3RydWN0IF9fY3hhX2RlcGVuZGVudF9leGNlcHRpb247CisgIHN0cnVjdCBfX2N4YV9laF9nbG9iYWxzOworCisgIGV4dGVybiAiQyIKKyAgeworICAvLyBEeW5hbWljIGNhc3QgcnVudGltZS4KKworICAvLyBzcmMyZHN0IGhhcyB0aGUgZm9sbG93aW5nIHBvc3NpYmxlIHZhbHVlcworICAvLyAgPi0xOiBzcmNfdHlwZSBpcyBhIHVuaXF1ZSBwdWJsaWMgbm9uLXZpcnR1YWwgYmFzZSBvZiBkc3RfdHlwZQorICAvLyAgICAgICBkc3RfcHRyICsgc3JjMmRzdCA9PSBzcmNfcHRyCisgIC8vICAgLTE6IHVuc3BlY2lmaWVkIHJlbGF0aW9uc2hpcAorICAvLyAgIC0yOiBzcmNfdHlwZSBpcyBub3QgYSBwdWJsaWMgYmFzZSBvZiBkc3RfdHlwZQorICAvLyAgIC0zOiBzcmNfdHlwZSBpcyBhIG11bHRpcGxlIHB1YmxpYyBub24tdmlydHVhbCBiYXNlIG9mIGRzdF90eXBlCisgIHZvaWQqCisgIF9fZHluYW1pY19jYXN0KGNvbnN0IHZvaWQqIF9fc3JjX3B0ciwgLy8gU3RhcnRpbmcgb2JqZWN0LgorCQkgY29uc3QgX19jbGFzc190eXBlX2luZm8qIF9fc3JjX3R5cGUsIC8vIFN0YXRpYyB0eXBlIG9mIG9iamVjdC4KKwkJIGNvbnN0IF9fY2xhc3NfdHlwZV9pbmZvKiBfX2RzdF90eXBlLCAvLyBEZXNpcmVkIHRhcmdldCB0eXBlLgorCQkgcHRyZGlmZl90IF9fc3JjMmRzdCk7IC8vIEhvdyBzcmMgYW5kIGRzdCBhcmUgcmVsYXRlZC4KKworCisgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBydW50aW1lLgorCisgIC8vIFRoZSBfX2N4YV9laF9nbG9iYWxzIGZvciB0aGUgY3VycmVudCB0aHJlYWQgY2FuIGJlIG9idGFpbmVkIGJ5IHVzaW5nCisgIC8vIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucy4gIFRoZSAiZmFzdCIgdmVyc2lvbiBhc3N1bWVzIGF0IGxlYXN0CisgIC8vIG9uZSBwcmlvciBjYWxsIG9mIF9fY3hhX2dldF9nbG9iYWxzIGhhcyBiZWVuIG1hZGUgZnJvbSB0aGUgY3VycmVudAorICAvLyB0aHJlYWQsIHNvIG5vIGluaXRpYWxpemF0aW9uIGlzIG5lY2Vzc2FyeS4KKyAgX19jeGFfZWhfZ2xvYmFscyoKKyAgX19jeGFfZ2V0X2dsb2JhbHMoKSBfR0xJQkNYWF9OT1RIUk9XIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKKworICBfX2N4YV9laF9nbG9iYWxzKgorICBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkgX0dMSUJDWFhfTk9USFJPVyBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CisKKyAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcHJpbWFyeSBleGNlcHRpb24gcGx1cyB0aGUgdGhyb3duIG9iamVjdC4KKyAgdm9pZCoKKyAgX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uKHNpemVfdCkgX0dMSUJDWFhfTk9USFJPVzsKKworICAvLyBGcmVlIHRoZSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBwcmltYXJ5IGV4Y2VwdGlvbi4KKyAgdm9pZCAKKyAgX19jeGFfZnJlZV9leGNlcHRpb24odm9pZCopIF9HTElCQ1hYX05PVEhST1c7CisKKyAgLy8gVGhyb3cgdGhlIGV4Y2VwdGlvbi4KKyAgdm9pZAorICBfX2N4YV90aHJvdyh2b2lkKiwgc3RkOjp0eXBlX2luZm8qLCB2b2lkIChfR0xJQkNYWF9DRFRPUl9DQUxMQUJJICopICh2b2lkICopKQorICBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICAvLyBVc2VkIHRvIGltcGxlbWVudCBleGNlcHRpb24gaGFuZGxlcnMuCisgIHZvaWQqCisgIF9fY3hhX2dldF9leGNlcHRpb25fcHRyKHZvaWQqKSBfR0xJQkNYWF9OT1RIUk9XIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOworCisgIHZvaWQqCisgIF9fY3hhX2JlZ2luX2NhdGNoKHZvaWQqKSBfR0xJQkNYWF9OT1RIUk9XOworCisgIHZvaWQgCisgIF9fY3hhX2VuZF9jYXRjaCgpOworCisgIHZvaWQgCisgIF9fY3hhX3JldGhyb3coKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKKworICAvLyBSZXR1cm5zIHRoZSB0eXBlX2luZm8gZm9yIHRoZSBjdXJyZW50bHkgaGFuZGxlZCBleGNlcHRpb24gWzE1LjMvOF0sIG9yCisgIC8vIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4KKyAgc3RkOjp0eXBlX2luZm8qCisgIF9fY3hhX2N1cnJlbnRfZXhjZXB0aW9uX3R5cGUoKSBfR0xJQkNYWF9OT1RIUk9XIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOworCisgIC8vIEdOVSBFeHRlbnNpb25zLgorCisgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgYSBkZXBlbmRlbnQgZXhjZXB0aW9uLgorICBfX2N4YV9kZXBlbmRlbnRfZXhjZXB0aW9uKgorICBfX2N4YV9hbGxvY2F0ZV9kZXBlbmRlbnRfZXhjZXB0aW9uKCkgX0dMSUJDWFhfTk9USFJPVzsKKworICAvLyBGcmVlIHRoZSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBkZXBlbmRlbnQgZXhjZXB0aW9uLgorICB2b2lkCisgIF9fY3hhX2ZyZWVfZGVwZW5kZW50X2V4Y2VwdGlvbihfX2N4YV9kZXBlbmRlbnRfZXhjZXB0aW9uKikgX0dMSUJDWFhfTk9USFJPVzsKKworICB9IC8vIGV4dGVybiAiQyIKKworICAvLyBBIG1hZ2ljIHBsYWNlaG9sZGVyIGNsYXNzIHRoYXQgY2FuIGJlIGNhdWdodCBieSByZWZlcmVuY2UKKyAgLy8gdG8gcmVjb2duaXplIGZvcmVpZ24gZXhjZXB0aW9ucy4KKyAgY2xhc3MgX19mb3JlaWduX2V4Y2VwdGlvbgorICB7CisgICAgdmlydHVhbCB+X19mb3JlaWduX2V4Y2VwdGlvbigpIHRocm93KCk7CisgICAgdmlydHVhbCB2b2lkIF9fcHVyZV9kdW1teSgpID0gMDsgLy8gcHJldmVudCBjYXRjaCBieSB2YWx1ZQorICB9OworCit9IC8vIG5hbWVzcGFjZSBfX2N4eGFiaXYxCisKKy8qKiBAbmFtZXNwYWNlIGFiaQorICogIEBicmllZiBUaGUgY3Jvc3MtdmVuZG9yIEMrKyBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlLiBBCisgKiAgbmFtZXNwYWNlIGFsaWFzIHRvIF9fY3h4YWJpdjEsIGJ1dCB1c2VyIHByb2dyYW1zIHNob3VsZCB1c2UgdGhlCisgKiAgYWxpYXMgJ2FiaScuCisgKgorICogIEEgYnJpZWYgb3ZlcnZpZXcgb2YgYW4gQUJJIGlzIGdpdmVuIGluIHRoZSBsaWJzdGRjKysgRkFRLCBxdWVzdGlvbgorICogIDUuOCAoeW91IG1heSBoYXZlIGEgY29weSBvZiB0aGUgRkFRIGxvY2FsbHksIG9yIHlvdSBjYW4gdmlldyB0aGUgb25saW5lCisgKiAgdmVyc2lvbiBhdCBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvZmFxLmh0bWwjNV84ICkuCisgKgorICogIEdDQyBzdWJzY3JpYmVzIHRvIGEgY3Jvc3MtdmVuZG9yIEFCSSBmb3IgQysrLCBzb21ldGltZXMKKyAqICBjYWxsZWQgdGhlIElBNjQgQUJJIGJlY2F1c2UgaXQgaGFwcGVucyB0byBiZSB0aGUgbmF0aXZlIEFCSSBmb3IgdGhhdAorICogIHBsYXRmb3JtLiAgSXQgaXMgc3VtbWFyaXplZCBhdCBodHRwOi8vd3d3LmNvZGVzb3VyY2VyeS5jb20vY3h4LWFiaS8KKyAqICBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IHNwZWNpZmljYXRpb24uCisgKgorICogIEZvciB1c2VycyBvZiBHQ0MgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDMueCwgZW50cnkgcG9pbnRzIGFyZQorICogIGF2YWlsYWJsZSBpbiA8Y3h4YWJpLmg+LCB3aGljaCBub3RlcywgPGVtPidJdCBpcyBub3Qgbm9ybWFsbHkKKyAqICBuZWNlc3NhcnkgZm9yIHVzZXIgcHJvZ3JhbXMgdG8gaW5jbHVkZSB0aGlzIGhlYWRlciwgb3IgdXNlIHRoZQorICogIGVudHJ5IHBvaW50cyBkaXJlY3RseS4gIEhvd2V2ZXIsIHRoaXMgaGVhZGVyIGlzIGF2YWlsYWJsZSBzaG91bGQKKyAqICB0aGF0IGJlIG5lZWRlZC4nPC9lbT4KKyovCituYW1lc3BhY2UgYWJpID0gX19jeHhhYml2MTsKKworbmFtZXNwYWNlIF9fZ251X2N4eAoreworICAvKioKKyAgICogIEBicmllZiBFeGNlcHRpb24gdGhyb3duIGJ5IF9fY3hhX2d1YXJkX2FjcXVpcmUuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqCisgICAqICA2Ljdbc3RtdC5kY2xdLzQ6IElmIGNvbnRyb2wgcmUtZW50ZXJzIHRoZSBkZWNsYXJhdGlvbiAocmVjdXJzaXZlbHkpCisgICAqICB3aGlsZSB0aGUgb2JqZWN0IGlzIGJlaW5nIGluaXRpYWxpemVkLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorICAgKgorICAgKiAgU2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgbGlicmFyeSBmdW5jdGlvbiB0byBoYW5kbGUgbG9ja2luZywgd2UgbWlnaHQKKyAgICogIGFzIHdlbGwgY2hlY2sgZm9yIHRoaXMgc2l0dWF0aW9uIGFuZCB0aHJvdyBhbiBleGNlcHRpb24uCisgICAqICBXZSB1c2UgdGhlIHNlY29uZCBieXRlIG9mIHRoZSBndWFyZCB2YXJpYWJsZSB0byByZW1lbWJlciB0aGF0IHdlJ3JlCisgICAqICBpbiB0aGUgbWlkZGxlIG9mIGFuIGluaXRpYWxpemF0aW9uLgorICAgKi8KKyAgY2xhc3MgcmVjdXJzaXZlX2luaXRfZXJyb3I6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgorICB7CisgIHB1YmxpYzoKKyAgICByZWN1cnNpdmVfaW5pdF9lcnJvcigpIHRocm93KCkgeyB9CisgICAgdmlydHVhbCB+cmVjdXJzaXZlX2luaXRfZXJyb3IoKSB0aHJvdyAoKTsKKyAgfTsKK30KKyNlbmRpZiAvLyBfX2NwbHVzcGx1cworCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorCisjZW5kaWYgLy8gX19DWFhBQklfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9hcnJheSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvYXJyYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlMTBjZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvYXJyYXkKQEAgLTAsMCArMSwzMDUgQEAKKy8vIERlYnVnZ2luZyBhcnJheSBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvYXJyYXkKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfQVJSQVkKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfQVJSQVkgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fZGVidWcKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgc3RydWN0IGFycmF5CisgICAgeworICAgICAgdHlwZWRlZiBfVHAgCSAgICAJCQkgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKgkJCSAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgICAJICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAgICAgICAgICAgICAJICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgICAgICAgICAgICAgICAgICAgIAkgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIAkgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4JICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIFN1cHBvcnQgZm9yIHplcm8tc2l6ZWQgYXJyYXlzIG1hbmRhdG9yeS4KKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0M6Ol9fYXJyYXlfdHJhaXRzPF9UcCwgX05tPiBfQVRfVHlwZTsKKyAgICAgIHR5cGVuYW1lIF9BVF9UeXBlOjpfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbGVtczsKKworICAgICAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX1NpemU+CisJc3RydWN0IF9BcnJheV9jaGVja19zdWJzY3JpcHQKKyAJeworCSAgc3RkOjpzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIF9TaXplOyB9CisKKwkgIF9BcnJheV9jaGVja19zdWJzY3JpcHQoc3RkOjpzaXplX3QgX19pbmRleCkKKwkgIHsgX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX2luZGV4KTsgfQorICAgICAgICB9OworCisgICAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfU2l6ZT4KKwlzdHJ1Y3QgX0FycmF5X2NoZWNrX25vbmVtcHR5CisgCXsKKwkgIGJvb2wgZW1wdHkoKSB7IHJldHVybiBfU2l6ZSA9PSAwOyB9CisKKwkgIF9BcnJheV9jaGVja19ub25lbXB0eSgpCisJICB7IF9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOyB9CisgICAgICAgIH07CisKKyAgICAgIC8vIE5vIGV4cGxpY2l0IGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kgZm9yIGFnZ3JlZ2F0ZSB0eXBlLgorCisgICAgICAvLyBEUiA3NzYuCisgICAgICB2b2lkCisgICAgICBmaWxsKGNvbnN0IHZhbHVlX3R5cGUmIF9fdSkKKyAgICAgIHsgc3RkOjpmaWxsX24oYmVnaW4oKSwgc2l6ZSgpLCBfX3UpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoYXJyYXkmIF9fb3RoZXIpCisgICAgICBub2V4Y2VwdChub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxfVHAmPigpLCBzdGQ6OmRlY2x2YWw8X1RwJj4oKSkpKQorICAgICAgeyBzdGQ6OnN3YXBfcmFuZ2VzKGJlZ2luKCksIGVuZCgpLCBfX290aGVyLmJlZ2luKCkpOyB9CisKKyAgICAgIC8vIEl0ZXJhdG9ycy4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihkYXRhKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihkYXRhKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoZGF0YSgpICsgX05tKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKGRhdGEoKSArIF9ObSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvciAKKyAgICAgIHJiZWdpbigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIAorICAgICAgcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IgCisgICAgICByZW5kKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAKKyAgICAgIHJlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKGRhdGEoKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoZGF0YSgpICsgX05tKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIAorICAgICAgY3JiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIAorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICAvLyBDYXBhY2l0eS4KKyAgICAgIGNvbnN0ZXhwciBzaXplX3R5cGUgCisgICAgICBzaXplKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX05tOyB9CisKKyAgICAgIGNvbnN0ZXhwciBzaXplX3R5cGUgCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9ObTsgfQorCisgICAgICBjb25zdGV4cHIgYm9vbCAKKyAgICAgIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KKworICAgICAgLy8gRWxlbWVudCBhY2Nlc3MuCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfc3Vic2NyaXB0KF9fbik7CisJcmV0dXJuIF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIF9fbik7CisgICAgICB9CisKKyAgICAgIGNvbnN0ZXhwciBjb25zdF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKwlyZXR1cm4gX19uIDwgX05tID8gX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgX19uKQorCSA6IChfR0xJQkNYWF9USFJPV19PUl9BQk9SVChfQXJyYXlfY2hlY2tfc3Vic2NyaXB0PF9ObT4oX19uKSksCisJICAgIF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIDApKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBhdChzaXplX3R5cGUgX19uKQorICAgICAgeworCWlmIChfX24gPj0gX05tKQorCSAgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX04oImFycmF5OjphdCIpKTsKKwlyZXR1cm4gX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgX19uKTsKKyAgICAgIH0KKworICAgICAgY29uc3RleHByIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwkvLyBSZXN1bHQgb2YgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBtdXN0IGJlIGFuIGx2YWx1ZSBzbyB1c2UKKwkvLyBib29sZWFuID8gbHZhbHVlIDogKHRocm93LWV4cHIsIGx2YWx1ZSkKKwlyZXR1cm4gX19uIDwgX05tID8gX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgX19uKQorCSAgOiAoc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX04oImFycmF5OjphdCIpKSwKKwkgICAgIF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIDApKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlIAorICAgICAgZnJvbnQoKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXJldHVybiAqYmVnaW4oKTsKKyAgICAgIH0KKworICAgICAgY29uc3RleHByIGNvbnN0X3JlZmVyZW5jZSAKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX05tID8gX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgMCkKKwkgIDogKF9HTElCQ1hYX1RIUk9XX09SX0FCT1JUKF9BcnJheV9jaGVja19ub25lbXB0eTxfTm0+KCkpLAorCSAgICAgX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgMCkpOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UgCisgICAgICBiYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX05tID8gKihlbmQoKSAtIDEpIDogKmVuZCgpOworICAgICAgfQorCisgICAgICBjb25zdGV4cHIgY29uc3RfcmVmZXJlbmNlIAorICAgICAgYmFjaygpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9ObSA/IF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIF9ObSAtIDEpCisJICA6IChfR0xJQkNYWF9USFJPV19PUl9BQk9SVChfQXJyYXlfY2hlY2tfbm9uZW1wdHk8X05tPigpKSwKKwkgICAgIF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIDApKTsKKyAgICAgIH0KKworICAgICAgcG9pbnRlcgorICAgICAgZGF0YSgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIDApKTsgfQorCisgICAgICBjb25zdF9wb2ludGVyCisgICAgICBkYXRhKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgMCkpOyB9CisgICAgfTsKKworICAvLyBBcnJheSBjb21wYXJpc29ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wgCisgICAgb3BlcmF0b3I9PShjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuIHN0ZDo6ZXF1YWwoX19vbmUuYmVnaW4oKSwgX19vbmUuZW5kKCksIF9fdHdvLmJlZ2luKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gIShfX29uZSA9PSBfX3R3byk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fYSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX2IpCisgICAgeyAKKyAgICAgIHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9fYS5iZWdpbigpLCBfX2EuZW5kKCksCisJCQkJCSAgX19iLmJlZ2luKCksIF9fYi5lbmQoKSk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuIF9fdHdvIDwgX19vbmU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICB7IHJldHVybiAhKF9fb25lID4gX190d28pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gIShfX29uZSA8IF9fdHdvKTsgfQorCisgIC8vIFNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIG5vZXhjZXB0KG5vZXhjZXB0KF9fb25lLnN3YXAoX190d28pKSkKKyAgICB7IF9fb25lLnN3YXAoX190d28pOyB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludCwgdHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgY29uc3RleHByIF9UcCYKKyAgICBnZXQoYXJyYXk8X1RwLCBfTm0+JiBfX2Fycikgbm9leGNlcHQKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9JbnQgPCBfTm0sICJpbmRleCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0M6Ol9fYXJyYXlfdHJhaXRzPF9UcCwgX05tPjo6CisJX1NfcmVmKF9fYXJyLl9NX2VsZW1zLCBfSW50KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludCwgdHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgY29uc3RleHByIF9UcCYmCisgICAgZ2V0KGFycmF5PF9UcCwgX05tPiYmIF9fYXJyKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoX0ludCA8IF9ObSwgImluZGV4IGlzIG91dCBvZiBib3VuZHMiKTsKKyAgICAgIHJldHVybiBzdGQ6Om1vdmUoZ2V0PF9JbnQ+KF9fYXJyKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGNvbnN0ZXhwciBjb25zdCBfVHAmCisgICAgZ2V0KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19hcnIpIG5vZXhjZXB0CisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChfSW50IDwgX05tLCAiaW5kZXggaXMgb3V0IG9mIGJvdW5kcyIpOworICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9DOjpfX2FycmF5X3RyYWl0czxfVHAsIF9ObT46OgorCV9TX3JlZihfX2Fyci5fTV9lbGVtcywgX0ludCk7CisgICAgfQorfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworCisgIC8vIFR1cGxlIGludGVyZmFjZSB0byBjbGFzcyB0ZW1wbGF0ZSBhcnJheS4KKworICAvLy8gdHVwbGVfc2l6ZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBzdHJ1Y3QgdHVwbGVfc2l6ZTxfX2RlYnVnOjphcnJheTxfVHAsIF9ObT4+CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIF9ObT4geyB9OworCisgIC8vLyB0dXBsZV9lbGVtZW50CisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PF9JbnQsIF9fZGVidWc6OmFycmF5PF9UcCwgX05tPj4KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9JbnQgPCBfTm0sICJpbmRleCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICB0eXBlZGVmIF9UcCB0eXBlOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8vIF9HTElCQ1hYX0RFQlVHX0FSUkFZCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL2JpdHNldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvYml0c2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDkxODQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL2JpdHNldApAQCAtMCwwICsxLDQyNiBAQAorLy8gRGVidWdnaW5nIGJpdHNldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvYml0c2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19CSVRTRVQKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfQklUU0VUCisKKyNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19kZWJ1ZworeworICAvLy8gQ2xhc3Mgc3RkOjpiaXRzZXQgd2l0aCBhZGRpdGlvbmFsIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgY2xhc3MgYml0c2V0CisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0M6OmJpdHNldDxfTmI+CisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgICAgLCBwdWJsaWMgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlX2Jhc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0M6OmJpdHNldDxfTmI+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgLy8gSW4gQysrMHggd2UgcmVseSBvbiBub3JtYWwgcmVmZXJlbmNlIHR5cGUgdG8gcHJlc2VydmUgdGhlIHByb3BlcnR5CisgICAgICAvLyBvZiBiaXRzZXQgdG8gYmUgdXNlIGFzIGEgbGl0ZXJhbC4KKyAgICAgIC8vIFRPRE86IEZpbmQgYW5vdGhlciBzb2x1dGlvbi4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworI2Vsc2UKKyAgICAgIC8vIGJpdCByZWZlcmVuY2U6CisgICAgICBjbGFzcyByZWZlcmVuY2UKKyAgICAgIDogcHJpdmF0ZSBfQmFzZTo6cmVmZXJlbmNlCisgICAgICAgICwgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcl9iYXNlCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlIF9CYXNlX3JlZjsKKworCWZyaWVuZCBjbGFzcyBiaXRzZXQ7CisJcmVmZXJlbmNlKCk7CisKKwlyZWZlcmVuY2UoY29uc3QgX0Jhc2VfcmVmJiBfX2Jhc2UsCisJCSAgYml0c2V0KiBfX3NlcSBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkpIF9HTElCQ1hYX05PRVhDRVBUCisJOiBfQmFzZV9yZWYoX19iYXNlKQorCSwgX1NhZmVfaXRlcmF0b3JfYmFzZShfX3NlcSwgZmFsc2UpCisJeyB9CisKKyAgICAgIHB1YmxpYzoKKwlyZWZlcmVuY2UoY29uc3QgcmVmZXJlbmNlJiBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisJOiBfQmFzZV9yZWYoX194KQorCSwgX1NhZmVfaXRlcmF0b3JfYmFzZShfX3gsIGZhbHNlKQorCXsgfQorCisJcmVmZXJlbmNlJgorCW9wZXJhdG9yPShib29sIF9feCkgX0dMSUJDWFhfTk9FWENFUFQKKwl7CisJICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISB0aGlzLT5fTV9zaW5ndWxhcigpLAorCQkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfYmFkX2JpdHNldF93cml0ZSkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwkgICpzdGF0aWNfY2FzdDxfQmFzZV9yZWYqPih0aGlzKSA9IF9feDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwlyZWZlcmVuY2UmCisJb3BlcmF0b3I9KGNvbnN0IHJlZmVyZW5jZSYgX194KSBfR0xJQkNYWF9OT0VYQ0VQVAorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9feC5fTV9zaW5ndWxhcigpLAorCQkJICAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2JhZF9iaXRzZXRfcmVhZCkKKwkJCQkuX01faXRlcmF0b3IoX194KSk7CisJICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISB0aGlzLT5fTV9zaW5ndWxhcigpLAorCQkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfYmFkX2JpdHNldF93cml0ZSkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwkgICpzdGF0aWNfY2FzdDxfQmFzZV9yZWYqPih0aGlzKSA9IF9feDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwlib29sCisJb3BlcmF0b3J+KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKwl7CisJICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISB0aGlzLT5fTV9zaW5ndWxhcigpLAorCQkJICAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2JhZF9iaXRzZXRfcmVhZCkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwkgIHJldHVybiB+KCpzdGF0aWNfY2FzdDxjb25zdCBfQmFzZV9yZWYqPih0aGlzKSk7CisJfQorCisJb3BlcmF0b3IgYm9vbCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisJeworCSAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgdGhpcy0+X01fc2luZ3VsYXIoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2JhZF9iaXRzZXRfcmVhZCkKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMpKTsKKwkgIHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX0Jhc2VfcmVmKj4odGhpcyk7CisJfQorCisJcmVmZXJlbmNlJgorCWZsaXAoKSBfR0xJQkNYWF9OT0VYQ0VQVAorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIHRoaXMtPl9NX3Npbmd1bGFyKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19iYWRfYml0c2V0X2ZsaXApCisJCQkJLl9NX2l0ZXJhdG9yKCp0aGlzKSk7CisJICBfQmFzZV9yZWY6OmZsaXAoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisgICAgICB9OworI2VuZGlmCisKKyAgICAgIC8vIDIzLjMuNS4xIGNvbnN0cnVjdG9yczoKKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBiaXRzZXQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgOiBfQmFzZSgpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgY29uc3RleHByIGJpdHNldCh1bnNpZ25lZCBsb25nIGxvbmcgX192YWwpIG5vZXhjZXB0CisjZWxzZQorICAgICAgYml0c2V0KHVuc2lnbmVkIGxvbmcgX192YWwpCisjZW5kaWYKKyAgICAgIDogX0Jhc2UoX192YWwpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgYml0c2V0KGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCisJICAgICAgIHR5cGVuYW1lIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisJICAgICAgIF9fcG9zID0gMCwKKwkgICAgICAgdHlwZW5hbWUgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKwkgICAgICAgX19uID0gKHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvcykpCisJOiBfQmFzZShfX3N0ciwgX19wb3MsIF9fbikgeyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDM5Ni4gd2hhdCBhcmUgY2hhcmFjdGVycyB6ZXJvIGFuZCBvbmUuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KKwliaXRzZXQoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKKwkgICAgICAgdHlwZW5hbWUgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKwkgICAgICAgX19wb3MsCisJICAgICAgIHR5cGVuYW1lIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCisJICAgICAgIF9fbiwKKwkgICAgICAgX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpCisJOiBfQmFzZShfX3N0ciwgX19wb3MsIF9fbiwgX196ZXJvLCBfX29uZSkgeyB9CisKKyAgICAgIGJpdHNldChjb25zdCBfQmFzZSYgX194KSA6IF9CYXNlKF9feCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIGJpdHNldChjb25zdCBfQ2hhclQqIF9fc3RyLAorCSAgICAgICB0eXBlbmFtZSBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQ+OjpzaXplX3R5cGUgX19uCisJICAgICAgID0gc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJUPjo6bnBvcywKKwkgICAgICAgX0NoYXJUIF9femVybyA9IF9DaGFyVCgnMCcpLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkKKwk6IF9CYXNlKF9fc3RyLCBfX24sIF9femVybywgX19vbmUpIHsgfQorI2VuZGlmCisKKyAgICAgIC8vIDIzLjMuNS4yIGJpdHNldCBvcGVyYXRpb25zOgorICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvciY9KGNvbnN0IGJpdHNldDxfTmI+JiBfX3JocykgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfTV9iYXNlKCkgJj0gX19yaHM7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yfD0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCV9NX2Jhc2UoKSB8PSBfX3JoczsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3JePShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJX01fYmFzZSgpIF49IF9fcmhzOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvcjw8PShzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJX01fYmFzZSgpIDw8PSBfX3BvczsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3I+Pj0oc2l6ZV90IF9fcG9zKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCV9NX2Jhc2UoKSA+Pj0gX19wb3M7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHNldCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJX0Jhc2U6OnNldCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTg2LiBiaXRzZXQ6OnNldCgpIHNlY29uZCBwYXJhbWV0ZXIgc2hvdWxkIGJlIGJvb2wKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgc2V0KHNpemVfdCBfX3BvcywgYm9vbCBfX3ZhbCA9IHRydWUpCisgICAgICB7CisJX0Jhc2U6OnNldChfX3BvcywgX192YWwpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICByZXNldCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJX0Jhc2U6OnJlc2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHJlc2V0KHNpemVfdCBfX3BvcykKKyAgICAgIHsKKwlfQmFzZTo6cmVzZXQoX19wb3MpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4KKyAgICAgIG9wZXJhdG9yfigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBiaXRzZXQofl9NX2Jhc2UoKSk7IH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBmbGlwKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfQmFzZTo6ZmxpcCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBmbGlwKHNpemVfdCBfX3BvcykKKyAgICAgIHsKKwlfQmFzZTo6ZmxpcChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLyBlbGVtZW50IGFjY2VzczoKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDExLiBCaXRzZXQgbWlub3IgcHJvYmxlbXMKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19wb3MpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX3Bvcyk7CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCXJldHVybiBfTV9iYXNlKClbX19wb3NdOworI2Vsc2UKKwlyZXR1cm4gcmVmZXJlbmNlKF9NX2Jhc2UoKVtfX3Bvc10sIHRoaXMpOworI2VuZGlmCisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDExLiBCaXRzZXQgbWlub3IgcHJvYmxlbXMKKyAgICAgIF9HTElCQ1hYX0NPTlNURVhQUiBib29sCisgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3BvcykgY29uc3QKKyAgICAgIHsKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKwkvLyBUT0RPOiBDaGVjayBpbiBkZWJ1Zy1tb2RlIHRvby4KKwlfX2dsaWJjeHhfY2hlY2tfc3Vic2NyaXB0KF9fcG9zKTsKKyNlbmRpZgorCXJldHVybiBfQmFzZTo6b3BlcmF0b3JbXShfX3Bvcyk7CisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjp0b191bG9uZzsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB1c2luZyBfQmFzZTo6dG9fdWxsb25nOworI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgICAgIHRvX3N0cmluZygpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIF9NX2Jhc2UoKS50ZW1wbGF0ZSB0b19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+KCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzk2LiB3aGF0IGFyZSBjaGFyYWN0ZXJzIHplcm8gYW5kIG9uZS4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorCXN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorCXRvX3N0cmluZyhfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkgY29uc3QKKwl7CisJICByZXR1cm4gX01fYmFzZSgpLnRlbXBsYXRlCisJICAgIHRvX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4oX196ZXJvLCBfX29uZSk7CisJfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzQuIGJpdHNldDo6dG9fc3RyaW5nKCkgaGFyZCB0byB1c2UuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+CisgICAgICAgIHRvX3N0cmluZygpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIHRvX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPigpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDg1My4gdG9fc3RyaW5nIG5lZWRzIHVwZGF0aW5nIHdpdGggemVybyBhbmQgb25lLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorCXN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+CisJdG9fc3RyaW5nKF9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKSBjb25zdAorCXsgcmV0dXJuIHRvX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsCisJICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPihfX3plcm8sIF9fb25lKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICAgICAgdG9fc3RyaW5nKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0b19zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4oKTsKKyAgICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+CisJdG9fc3RyaW5nKF9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKSBjb25zdAorCXsKKwkgIHJldHVybiB0b19zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPihfX3plcm8sIF9fb25lKTsKKwl9CisKKyAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgICAgIHRvX3N0cmluZygpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRvX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4gPigpOworICAgICAgfQorCisgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgICAgICB0b19zdHJpbmcoY2hhciBfX3plcm8sIGNoYXIgX19vbmUgPSAnMScpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRvX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LAorCSAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPihfX3plcm8sIF9fb25lKTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmNvdW50OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fYmFzZSgpID09IF9fcmhzOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fYmFzZSgpICE9IF9fcmhzOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjp0ZXN0OworICAgICAgdXNpbmcgX0Jhc2U6OmFsbDsKKyAgICAgIHVzaW5nIF9CYXNlOjphbnk7CisgICAgICB1c2luZyBfQmFzZTo6bm9uZTsKKworICAgICAgYml0c2V0PF9OYj4KKyAgICAgIG9wZXJhdG9yPDwoc2l6ZV90IF9fcG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gYml0c2V0PF9OYj4oX01fYmFzZSgpIDw8IF9fcG9zKTsgfQorCisgICAgICBiaXRzZXQ8X05iPgorICAgICAgb3BlcmF0b3I+PihzaXplX3QgX19wb3MpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBiaXRzZXQ8X05iPihfTV9iYXNlKCkgPj4gX19wb3MpOyB9CisKKyAgICAgIF9CYXNlJiAKKyAgICAgIF9NX2Jhc2UoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIGJpdHNldDxfTmI+CisgICAgb3BlcmF0b3ImKGNvbnN0IGJpdHNldDxfTmI+JiBfX3gsIGNvbnN0IGJpdHNldDxfTmI+JiBfX3kpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gYml0c2V0PF9OYj4oX194KSAmPSBfX3k7IH0KKworICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIGJpdHNldDxfTmI+CisgICAgb3BlcmF0b3J8KGNvbnN0IGJpdHNldDxfTmI+JiBfX3gsIGNvbnN0IGJpdHNldDxfTmI+JiBfX3kpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gYml0c2V0PF9OYj4oX194KSB8PSBfX3k7IH0KKworICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIGJpdHNldDxfTmI+CisgICAgb3BlcmF0b3JeKGNvbnN0IGJpdHNldDxfTmI+JiBfX3gsIGNvbnN0IGJpdHNldDxfTmI+JiBfX3kpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gYml0c2V0PF9OYj4oX194KSBePSBfX3k7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHNpemVfdCBfTmI+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYml0c2V0PF9OYj4mIF9feCkKKyAgICB7IHJldHVybiBfX2lzID4+IF9feC5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHNpemVfdCBfTmI+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgYml0c2V0PF9OYj4mIF9feCkKKyAgICB7IHJldHVybiBfX29zIDw8IF9feC5fTV9iYXNlKCk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAvLyBEUiAxMTgyLgorICAvLy8gc3RkOjpoYXNoIHNwZWNpYWxpemF0aW9uIGZvciBiaXRzZXQuCisgIHRlbXBsYXRlPHNpemVfdCBfTmI+CisgICAgc3RydWN0IGhhc2g8X19kZWJ1Zzo6Yml0c2V0PF9OYj4+CisgICAgOiBwdWJsaWMgX19oYXNoX2Jhc2U8c2l6ZV90LCBfX2RlYnVnOjpiaXRzZXQ8X05iPj4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX19kZWJ1Zzo6Yml0c2V0PF9OYj4mIF9fYikgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6aGFzaDxfR0xJQkNYWF9TVERfQzo6Yml0c2V0PF9OYj4+KCkoX19iLl9NX2Jhc2UoKSk7IH0KKyAgICB9OworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvZGVidWcuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWFmNDJlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9kZWJ1Zy5oCkBAIC0wLDAgKzEsMTMxIEBACisvLyBEZWJ1Z2dpbmcgc3VwcG9ydCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvZGVidWcuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfTUFDUk9fU1dJVENIX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfTUFDUk9fU1dJVENIX0ggMQorCisvKiogTWFjcm9zIGFuZCBuYW1lc3BhY2VzIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIG91dHNpZGUgb2YgZGVidWcKKyAqICB3cmFwcGVycyB0byB2ZXJpZnkgY2VydGFpbiBwcm9wZXJ0aWVzLiBUaGUgX19nbGliY3h4X3JlcXVpcmVzX3h4eAorICogIG1hY3JvcyBhcmUgbWVyZWx5IHdyYXBwZXJzIGFyb3VuZCB0aGUgX19nbGliY3h4X2NoZWNrX3h4eCB3cmFwcGVycworICogIHdoZW4gd2UgYXJlIGNvbXBpbGluZyB3aXRoIGRlYnVnIG1vZGUsIGJ1dCBkaXNhcHBlYXIgd2hlbiB3ZSBhcmUKKyAqICBpbiByZWxlYXNlIG1vZGUgc28gdGhhdCB0aGVyZSBpcyBubyBjaGVja2luZyBwZXJmb3JtZWQgaW4sIGUuZy4sCisgKiAgdGhlIHN0YW5kYXJkIGxpYnJhcnkgYWxnb3JpdGhtcy4KKyovCisKKy8vIERlYnVnIG1vZGUgbmFtZXNwYWNlcy4KKworLyoqCisgKiBAbmFtZXNwYWNlIHN0ZDo6X19kZWJ1ZworICogQGJyaWVmIEdOVSBkZWJ1ZyBjb2RlLCByZXBsYWNlcyBzdGFuZGFyZCBiZWhhdmlvciB3aXRoIGRlYnVnIGJlaGF2aW9yLgorICovCituYW1lc3BhY2Ugc3RkCit7IAorICBuYW1lc3BhY2UgX19kZWJ1ZyB7IH0gCit9CisKKy8qKiBAbmFtZXNwYWNlIF9fZ251X2RlYnVnCisgKiAgQGJyaWVmIEdOVSBkZWJ1ZyBjbGFzc2VzIGZvciBwdWJsaWMgdXNlLgorKi8KK25hbWVzcGFjZSBfX2dudV9kZWJ1ZworeworICB1c2luZyBuYW1lc3BhY2Ugc3RkOjpfX2RlYnVnOworfQorCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHCisKKyMgZGVmaW5lIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfQ29uZGl0aW9uKQorIyBkZWZpbmUgX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9Db25kaXRpb24pCisjIGRlZmluZSBfR0xJQkNYWF9ERUJVR19PTkxZKF9TdGF0ZW1lbnQpIDsKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19jb25kKF9Db25kLF9Nc2cpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX25vbl9lbXB0eV9yYW5nZShfRmlyc3QsX0xhc3QpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkKF9GaXJzdCxfTGFzdCkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWRfcHJlZChfRmlyc3QsX0xhc3QsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3NldChfRmlyc3QxLF9MYXN0MSxfRmlyc3QyKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfRmlyc3QxLF9MYXN0MSxfRmlyc3QyLF9QcmVkKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX2xvd2VyKF9GaXJzdCxfTGFzdCxfVmFsdWUpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXIoX0ZpcnN0LF9MYXN0LF9WYWx1ZSkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF9sb3dlcl9wcmVkKF9GaXJzdCxfTGFzdCxfVmFsdWUsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2hlYXAoX0ZpcnN0LF9MYXN0KQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2hlYXBfcHJlZChfRmlyc3QsX0xhc3QsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfU3RyaW5nKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX1N0cmluZyxfTGVuKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N1YnNjcmlwdChfTikKKworI2Vsc2UKKworIyBpbmNsdWRlIDxkZWJ1Zy9tYWNyb3MuaD4KKworI2RlZmluZSBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX0NvbmRpdGlvbikgX19nbGliY3h4X2Fzc2VydChfQ29uZGl0aW9uKQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUdfUEVEQU5USUMKKyMgZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfQ29uZGl0aW9uKSBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX0NvbmRpdGlvbikKKyNlbHNlCisjIGRlZmluZSBfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX0NvbmRpdGlvbikKKyNlbmRpZgorCisjIGRlZmluZSBfR0xJQkNYWF9ERUJVR19PTkxZKF9TdGF0ZW1lbnQpIF9TdGF0ZW1lbnQKKworIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoX0NvbmQsX01zZykgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9Db25kLF9Nc2cpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KSBcCisgICAgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfbm9uX2VtcHR5X3JhbmdlKF9GaXJzdCxfTGFzdCkgXAorICAgICBfX2dsaWJjeHhfY2hlY2tfbm9uX2VtcHR5X3JhbmdlKF9GaXJzdCxfTGFzdCkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19zb3J0ZWQoX0ZpcnN0LF9MYXN0KSBcCisgICAgIF9fZ2xpYmN4eF9jaGVja19zb3J0ZWQoX0ZpcnN0LF9MYXN0KQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9wcmVkKF9GaXJzdCxfTGFzdCxfUHJlZCkgXAorICAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkX3ByZWQoX0ZpcnN0LF9MYXN0LF9QcmVkKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXQoX0ZpcnN0MSxfTGFzdDEsX0ZpcnN0MikgXAorICAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkX3NldChfRmlyc3QxLF9MYXN0MSxfRmlyc3QyKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3NvcnRlZF9zZXRfcHJlZChfRmlyc3QxLF9MYXN0MSxfRmlyc3QyLF9QcmVkKSBcCisgICAgIF9fZ2xpYmN4eF9jaGVja19zb3J0ZWRfc2V0X3ByZWQoX0ZpcnN0MSxfTGFzdDEsX0ZpcnN0MixfUHJlZCkKKyMgZGVmaW5lIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF9sb3dlcihfRmlyc3QsX0xhc3QsX1ZhbHVlKQlcCisgICAgIF9fZ2xpYmN4eF9jaGVja19wYXJ0aXRpb25lZF9sb3dlcihfRmlyc3QsX0xhc3QsX1ZhbHVlKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX3VwcGVyKF9GaXJzdCxfTGFzdCxfVmFsdWUpCVwKKyAgICAgX19nbGliY3h4X2NoZWNrX3BhcnRpdGlvbmVkX3VwcGVyKF9GaXJzdCxfTGFzdCxfVmFsdWUpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKSBcCisgICAgIF9fZ2xpYmN4eF9jaGVja19wYXJ0aXRpb25lZF9sb3dlcl9wcmVkKF9GaXJzdCxfTGFzdCxfVmFsdWUsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKSBcCisgICAgIF9fZ2xpYmN4eF9jaGVja19wYXJ0aXRpb25lZF91cHBlcl9wcmVkKF9GaXJzdCxfTGFzdCxfVmFsdWUsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfaGVhcChfRmlyc3QsX0xhc3QpIFwKKyAgICAgX19nbGliY3h4X2NoZWNrX2hlYXAoX0ZpcnN0LF9MYXN0KQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX2hlYXBfcHJlZChfRmlyc3QsX0xhc3QsX1ByZWQpIFwKKyAgICAgX19nbGliY3h4X2NoZWNrX2hlYXBfcHJlZChfRmlyc3QsX0xhc3QsX1ByZWQpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfbm9uZW1wdHkoKSBfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfU3RyaW5nKSBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9TdHJpbmcpCisjIGRlZmluZSBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfU3RyaW5nLF9MZW4pCVwKKyAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX1N0cmluZyxfTGVuKQorIyBkZWZpbmUgX19nbGliY3h4X3JlcXVpcmVzX3N1YnNjcmlwdChfTikgX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfTikKKworIyBpbmNsdWRlIDxkZWJ1Zy9mdW5jdGlvbnMuaD4KKworI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9ERUJVR19NQUNST19TV0lUQ0hfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9kZXF1ZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvZGVxdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0MmVjMQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvZGVxdWUKQEAgLTAsMCArMSw1NzkgQEAKKy8vIERlYnVnZ2luZyBkZXF1ZSBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvZGVxdWUKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX0RFUVVFCisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX0RFUVVFIDEKKworI2luY2x1ZGUgPGRlcXVlPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfc2VxdWVuY2UuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX2l0ZXJhdG9yLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fZGVidWcKK3sKKyAgLy8vIENsYXNzIHN0ZDo6ZGVxdWUgd2l0aCBzYWZldHkvY2hlY2tpbmcvZGVidWcgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBkZXF1ZQorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9DOjpkZXF1ZTxfVHAsIF9BbGxvY2F0b3I+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTxkZXF1ZTxfVHAsIF9BbGxvY2F0b3I+ID4KKyAgICB7CisgICAgICB0eXBlZGVmICBfR0xJQkNYWF9TVERfQzo6ZGVxdWU8X1RwLCBfQWxsb2NhdG9yPiBfQmFzZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9FcXVhbF90bzxfQmFzZV9jb25zdF9pdGVyYXRvcj4gX0VxdWFsOworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjxfQmFzZV9pdGVyYXRvcixkZXF1ZT4KKwkJCQkJCSAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLGRlcXVlPgorCQkJCQkJICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiBfVHAJCQkJICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvY2F0b3IJCQkgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpwb2ludGVyICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3BvaW50ZXIgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgLy8gMjMuMi4xLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICAgIGV4cGxpY2l0CisgICAgICBkZXF1ZShjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fYSkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBleHBsaWNpdAorICAgICAgZGVxdWUoc2l6ZV90eXBlIF9fbikKKyAgICAgIDogX0Jhc2UoX19uKSB7IH0KKworICAgICAgZGVxdWUoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAorCSAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hKSB7IH0KKyNlbHNlCisgICAgICBleHBsaWNpdAorICAgICAgZGVxdWUoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlID0gX1RwKCksCisJICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX3ZhbHVlLCBfX2EpIHsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICBkZXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorCTogX0Jhc2UoX19nbnVfZGVidWc6Ol9fYmFzZShfX2dudV9kZWJ1Zzo6X19jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LAorCQkJCQkJCQkgICAgIF9fbGFzdCkpLAorCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCksIF9fYSkKKyAgICAgICAgeyB9CisKKyAgICAgIGRlcXVlKGNvbnN0IGRlcXVlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIGRlcXVlKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBkZXF1ZShkZXF1ZSYmIF9feCkKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9feCkpCisgICAgICB7IHRoaXMtPl9NX3N3YXAoX194KTsgfQorCisgICAgICBkZXF1ZShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19hKSB7IH0KKyNlbmRpZgorCisgICAgICB+ZGVxdWUoKSBfR0xJQkNYWF9OT0VYQ0VQVCB7IH0KKworICAgICAgZGVxdWUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZGVxdWUmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGRlcXVlJgorICAgICAgb3BlcmF0b3I9KGRlcXVlJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJX19nbGliY3h4X2NoZWNrX3NlbGZfbW92ZV9hc3NpZ24oX194KTsKKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGRlcXVlJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX19sOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgX0Jhc2U6OmFzc2lnbihfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZmlyc3QpLAorCQkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpKTsKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJfQorCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3QpCisgICAgICB7CisJX0Jhc2U6OmFzc2lnbihfX24sIF9fdCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlfQmFzZTo6YXNzaWduKF9fbCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hZnRlcl9udGgoZGlmZmVyZW5jZV90eXBlIF9fbikKKyAgICAgIHsKKwl0eXBlZGVmIF9fZ251X2RlYnVnOjpfQWZ0ZXJfbnRoX2Zyb208X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9BZnRlcl9udGg7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfQWZ0ZXJfbnRoKF9fbiwgX0Jhc2U6OmJlZ2luKCkpKTsKKyAgICAgIH0KKyAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgIC8vIDIzLjIuMS4yIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fc3opCisgICAgICB7CisJYm9vbCBfX2ludmFsaWRhdGVfYWxsID0gX19zeiA+IHRoaXMtPnNpemUoKTsKKwlpZiAoX19zeiA8IHRoaXMtPnNpemUoKSkKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWZ0ZXJfbnRoKF9fc3opOworCisJX0Jhc2U6OnJlc2l6ZShfX3N6KTsKKworCWlmIChfX2ludmFsaWRhdGVfYWxsKQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBjb25zdCBfVHAmIF9fYykKKyAgICAgIHsKKwlib29sIF9faW52YWxpZGF0ZV9hbGwgPSBfX3N6ID4gdGhpcy0+c2l6ZSgpOworCWlmIChfX3N6IDwgdGhpcy0+c2l6ZSgpKQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hZnRlcl9udGgoX19zeik7CisKKwlfQmFzZTo6cmVzaXplKF9fc3osIF9fYyk7CisKKwlpZiAoX19pbnZhbGlkYXRlX2FsbCkKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBfVHAgX19jID0gX1RwKCkpCisgICAgICB7CisJYm9vbCBfX2ludmFsaWRhdGVfYWxsID0gX19zeiA+IHRoaXMtPnNpemUoKTsKKwlpZiAoX19zeiA8IHRoaXMtPnNpemUoKSkKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWZ0ZXJfbnRoKF9fc3opOworCisJX0Jhc2U6OnJlc2l6ZShfX3N6LCBfX2MpOworCisJaWYgKF9faW52YWxpZGF0ZV9hbGwpCisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBzaHJpbmtfdG9fZml0KCkKKyAgICAgIHsKKwlpZiAoX0Jhc2U6Ol9NX3Nocmlua190b19maXQoKSkKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworCisgICAgICAvLyBlbGVtZW50IGFjY2VzczoKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19zdWJzY3JpcHQoX19uKTsKKwlyZXR1cm4gX01fYmFzZSgpW19fbl07CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19zdWJzY3JpcHQoX19uKTsKKwlyZXR1cm4gX01fYmFzZSgpW19fbl07CisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjphdDsKKworICAgICAgcmVmZXJlbmNlCisgICAgICBmcm9udCgpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisJcmV0dXJuIF9CYXNlOjpmcm9udCgpOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmZyb250KCk7CisgICAgICB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgYmFjaygpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisJcmV0dXJuIF9CYXNlOjpiYWNrKCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYmFjaygpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisJcmV0dXJuIF9CYXNlOjpiYWNrKCk7CisgICAgICB9CisKKyAgICAgIC8vIDIzLjIuMS4zIG1vZGlmaWVyczoKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnB1c2hfZnJvbnQoX194KTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnB1c2hfYmFjayhfX3gpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBwdXNoX2Zyb250KF9UcCYmIF9feCkKKyAgICAgIHsgZW1wbGFjZV9mcm9udChzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKF9UcCYmIF9feCkKKyAgICAgIHsgZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBlbXBsYWNlX2Zyb250KF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9CYXNlOjplbXBsYWNlX2Zyb250KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9iYWNrKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9CYXNlOjplbXBsYWNlX2JhY2soc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgZW1wbGFjZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCSAgX0Jhc2VfaXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6ZW1wbGFjZShfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJCQkJCXN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCSAgcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLCB0aGlzKTsKKwl9CisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCV9CYXNlX2l0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX194KTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9UcCYmIF9feCkKKyAgICAgIHsgcmV0dXJuIGVtcGxhY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9CYXNlOjppbnNlcnQoX19wLCBfX2wpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX19uLCBfX3gpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAorCSAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnRfcmFuZ2UoX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0KTsKKwkgIF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCQkJCSAgIF9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSk7CisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCX0KKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfQmFzZTo6YmVnaW4oKSkpOworCV9CYXNlOjpwb3BfZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcG9wX2JhY2soKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKC0tX0Jhc2U6OmVuZCgpKSk7CisJX0Jhc2U6OnBvcF9iYWNrKCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwlfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fcG9zaXRpb24uYmFzZSgpOworCWlmIChfX3ZpY3RpbSA9PSBfQmFzZTo6YmVnaW4oKSB8fCBfX3ZpY3RpbSA9PSBfQmFzZTo6ZW5kKCktMSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfRXF1YWwoX192aWN0aW0pKTsKKwkgICAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3ZpY3RpbSksIHRoaXMpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgX0Jhc2VfaXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6ZXJhc2UoX192aWN0aW0pOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCSAgICByZXR1cm4gaXRlcmF0b3IoX19yZXMsIHRoaXMpOworCSAgfQorICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisJaWYgKF9fZmlyc3QuYmFzZSgpID09IF9fbGFzdC5iYXNlKCkpCisJICByZXR1cm4gX19maXJzdDsKKyAgICAgICAgZWxzZSBpZiAoX19maXJzdC5iYXNlKCkgPT0gX0Jhc2U6OmJlZ2luKCkKKwkJIHx8IF9fbGFzdC5iYXNlKCkgPT0gX0Jhc2U6OmVuZCgpKQorCSAgeworCSAgICB0aGlzLT5fTV9kZXRhY2hfc2luZ3VsYXIoKTsKKwkgICAgZm9yIChfQmFzZV9pdGVyYXRvciBfX3Bvc2l0aW9uID0gX19maXJzdC5iYXNlKCk7CisJCSBfX3Bvc2l0aW9uICE9IF9fbGFzdC5iYXNlKCk7ICsrX19wb3NpdGlvbikKKwkgICAgICB7CisJCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fcG9zaXRpb24pKTsKKwkgICAgICB9CisJICAgIF9fdHJ5CisJICAgICAgeworCQlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKSwKKwkJCQl0aGlzKTsKKwkgICAgICB9CisJICAgIF9fY2F0Y2goLi4uKQorCSAgICAgIHsKKwkJdGhpcy0+X01fcmV2YWxpZGF0ZV9zaW5ndWxhcigpOworCQlfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgICB9CisJICB9CisJZWxzZQorCSAgeworCSAgICBfQmFzZV9pdGVyYXRvciBfX3JlcyA9IF9CYXNlOjplcmFzZShfX2ZpcnN0LmJhc2UoKSwKKwkJCQkJCV9fbGFzdC5iYXNlKCkpOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCSAgICByZXR1cm4gaXRlcmF0b3IoX19yZXMsIHRoaXMpOworCSAgfQorICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGRlcXVlJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKwl0aGlzLT5fTV9zd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfQmFzZTo6Y2xlYXIoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBfR0xJQkNYWF9OT0VYQ0VQVCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVCB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsIGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX2RlYnVnCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL2Zvcm1hdHRlci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9mb3JtYXR0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzY1ZTFhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9mb3JtYXR0ZXIuaApAQCAtMCwwICsxLDQ2MiBAQAorLy8gRGVidWctbW9kZSBlcnJvciBmb3JtYXR0aW5nIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9mb3JtYXR0ZXIuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfRk9STUFUVEVSX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfRk9STUFUVEVSX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPHR5cGVpbmZvPgorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgdXNpbmcgc3RkOjp0eXBlX2luZm87CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGJvb2wgX19jaGVja19zaW5ndWxhcihfSXRlcmF0b3ImKTsKKworICBjbGFzcyBfU2FmZV9zZXF1ZW5jZV9iYXNlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGNsYXNzIF9TYWZlX2l0ZXJhdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGNsYXNzIF9TYWZlX2xvY2FsX2l0ZXJhdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBjbGFzcyBfU2FmZV9zZXF1ZW5jZTsKKworICBlbnVtIF9EZWJ1Z19tc2dfaWQKKyAgeworICAgIC8vIEdlbmVyYWwgY2hlY2tzCisgICAgX19tc2dfdmFsaWRfcmFuZ2UsCisgICAgX19tc2dfaW5zZXJ0X3Npbmd1bGFyLAorICAgIF9fbXNnX2luc2VydF9kaWZmZXJlbnQsCisgICAgX19tc2dfZXJhc2VfYmFkLAorICAgIF9fbXNnX2VyYXNlX2RpZmZlcmVudCwKKyAgICBfX21zZ19zdWJzY3JpcHRfb29iLAorICAgIF9fbXNnX2VtcHR5LAorICAgIF9fbXNnX3VucGFydGl0aW9uZWQsCisgICAgX19tc2dfdW5wYXJ0aXRpb25lZF9wcmVkLAorICAgIF9fbXNnX3Vuc29ydGVkLAorICAgIF9fbXNnX3Vuc29ydGVkX3ByZWQsCisgICAgX19tc2dfbm90X2hlYXAsCisgICAgX19tc2dfbm90X2hlYXBfcHJlZCwKKyAgICAvLyBzdGQ6OmJpdHNldCBjaGVja3MKKyAgICBfX21zZ19iYWRfYml0c2V0X3dyaXRlLAorICAgIF9fbXNnX2JhZF9iaXRzZXRfcmVhZCwKKyAgICBfX21zZ19iYWRfYml0c2V0X2ZsaXAsCisgICAgLy8gc3RkOjpsaXN0IGNoZWNrcworICAgIF9fbXNnX3NlbGZfc3BsaWNlLAorICAgIF9fbXNnX3NwbGljZV9hbGxvYywKKyAgICBfX21zZ19zcGxpY2VfYmFkLAorICAgIF9fbXNnX3NwbGljZV9vdGhlciwKKyAgICBfX21zZ19zcGxpY2Vfb3ZlcmxhcCwKKyAgICAvLyBpdGVyYXRvciBjaGVja3MKKyAgICBfX21zZ19pbml0X3Npbmd1bGFyLAorICAgIF9fbXNnX2luaXRfY29weV9zaW5ndWxhciwKKyAgICBfX21zZ19pbml0X2NvbnN0X3Npbmd1bGFyLAorICAgIF9fbXNnX2NvcHlfc2luZ3VsYXIsCisgICAgX19tc2dfYmFkX2RlcmVmLAorICAgIF9fbXNnX2JhZF9pbmMsCisgICAgX19tc2dfYmFkX2RlYywKKyAgICBfX21zZ19pdGVyX3N1YnNjcmlwdF9vb2IsCisgICAgX19tc2dfYWR2YW5jZV9vb2IsCisgICAgX19tc2dfcmV0cmVhdF9vb2IsCisgICAgX19tc2dfaXRlcl9jb21wYXJlX2JhZCwKKyAgICBfX21zZ19jb21wYXJlX2RpZmZlcmVudCwKKyAgICBfX21zZ19pdGVyX29yZGVyX2JhZCwKKyAgICBfX21zZ19vcmRlcl9kaWZmZXJlbnQsCisgICAgX19tc2dfZGlzdGFuY2VfYmFkLAorICAgIF9fbXNnX2Rpc3RhbmNlX2RpZmZlcmVudCwKKyAgICAvLyBpc3RyZWFtX2l0ZXJhdG9yCisgICAgX19tc2dfZGVyZWZfaXN0cmVhbSwKKyAgICBfX21zZ19pbmNfaXN0cmVhbSwKKyAgICAvLyBvc3RyZWFtX2l0ZXJhdG9yCisgICAgX19tc2dfb3V0cHV0X29zdHJlYW0sCisgICAgLy8gaXN0cmVhbWJ1Zl9pdGVyYXRvcgorICAgIF9fbXNnX2RlcmVmX2lzdHJlYW1idWYsCisgICAgX19tc2dfaW5jX2lzdHJlYW1idWYsCisgICAgLy8gZm9yd2FyZF9saXN0CisgICAgX19tc2dfaW5zZXJ0X2FmdGVyX2VuZCwKKyAgICBfX21zZ19lcmFzZV9hZnRlcl9iYWQsCisgICAgX19tc2dfdmFsaWRfcmFuZ2UyLAorICAgIC8vIHVub3JkZXJlZCBjb250YWluZXIgbG9jYWwgaXRlcmF0b3JzCisgICAgX19tc2dfbG9jYWxfaXRlcl9jb21wYXJlX2JhZCwKKyAgICBfX21zZ19ub25fZW1wdHlfcmFuZ2UsCisgICAgLy8gc2VsZiBtb3ZlIGFzc2lnbgorICAgIF9fbXNnX3NlbGZfbW92ZV9hc3NpZ24sCisgICAgLy8gdW5vcmRlcmVkIGNvbnRhaW5lciBidWNrZXRzCisgICAgX19tc2dfYnVja2V0X2luZGV4X29vYiwKKyAgICBfX21zZ192YWxpZF9sb2FkX2ZhY3RvciwKKyAgICBfX21zZ19lcXVhbF9hbGxvY3MKKyAgfTsKKworICBjbGFzcyBfRXJyb3JfZm9ybWF0dGVyCisgIHsKKyAgICAvLy8gV2hldGhlciBhbiBpdGVyYXRvciBpcyBjb25zdGFudCwgbXV0YWJsZSwgb3IgdW5rbm93bgorICAgIGVudW0gX0NvbnN0bmVzcworICAgIHsKKyAgICAgIF9fdW5rbm93bl9jb25zdG5lc3MsCisgICAgICBfX2NvbnN0X2l0ZXJhdG9yLAorICAgICAgX19tdXRhYmxlX2l0ZXJhdG9yLAorICAgICAgX19sYXN0X2NvbnN0bmVzcworICAgIH07CisKKyAgICAvLyBUaGUgc3RhdGUgb2YgdGhlIGl0ZXJhdG9yIChmaW5lLWdyYWluZWQpLCBpZiB3ZSBrbm93IGl0LgorICAgIGVudW0gX0l0ZXJhdG9yX3N0YXRlCisgICAgeworICAgICAgX191bmtub3duX3N0YXRlLAorICAgICAgX19zaW5ndWxhciwgICAgICAvLyBzaW5ndWxhciwgbWF5IHN0aWxsIGJlIGF0dGFjaGVkIHRvIGEgc2VxdWVuY2UKKyAgICAgIF9fYmVnaW4sICAgICAgICAgLy8gZGVyZWZlcmVuY2VhYmxlLCBhbmQgYXQgdGhlIGJlZ2lubmluZworICAgICAgX19taWRkbGUsICAgICAgICAvLyBkZXJlZmVyZW5jZWFibGUsIG5vdCBhdCB0aGUgYmVnaW5uaW5nCisgICAgICBfX2VuZCwgICAgICAgICAgIC8vIHBhc3QtdGhlLWVuZCwgbWF5IGJlIGF0IGJlZ2lubmluZyBpZiBzZXF1ZW5jZSBlbXB0eQorICAgICAgX19iZWZvcmVfYmVnaW4sICAvLyBiZWZvcmUgYmVnaW4KKyAgICAgIF9fbGFzdF9zdGF0ZQorICAgIH07CisKKyAgICAvLyBUYWdzIGRlbm90aW5nIHRoZSB0eXBlIG9mIHBhcmFtZXRlciBmb3IgY29uc3RydWN0aW9uCisgICAgc3RydWN0IF9Jc19pdGVyYXRvciB7IH07CisgICAgc3RydWN0IF9Jc19zZXF1ZW5jZSB7IH07CisKKyAgICAvLyBBIHBhcmFtZXRlciB0aGF0IG1heSBiZSByZWZlcmVuY2VkIGJ5IGFuIGVycm9yIG1lc3NhZ2UKKyAgICBzdHJ1Y3QgX1BhcmFtZXRlcgorICAgIHsKKyAgICAgIGVudW0KKyAgICAgIHsKKwlfX3VudXNlZF9wYXJhbSwKKwlfX2l0ZXJhdG9yLAorCV9fc2VxdWVuY2UsCisJX19pbnRlZ2VyLAorCV9fc3RyaW5nCisgICAgICB9IF9NX2tpbmQ7CisKKyAgICAgIHVuaW9uCisgICAgICB7CisJLy8gV2hlbiBfTV9raW5kID09IF9faXRlcmF0b3IKKwlzdHJ1Y3QKKwl7CisJICBjb25zdCBjaGFyKiAgICAgIF9NX25hbWU7CisJICBjb25zdCB2b2lkKiAgICAgIF9NX2FkZHJlc3M7CisJICBjb25zdCB0eXBlX2luZm8qIF9NX3R5cGU7CisJICBfQ29uc3RuZXNzICAgICAgIF9NX2NvbnN0bmVzczsKKwkgIF9JdGVyYXRvcl9zdGF0ZSAgX01fc3RhdGU7CisJICBjb25zdCB2b2lkKiAgICAgIF9NX3NlcXVlbmNlOworCSAgY29uc3QgdHlwZV9pbmZvKiBfTV9zZXFfdHlwZTsKKwl9IF9NX2l0ZXJhdG9yOworCisJLy8gV2hlbiBfTV9raW5kID09IF9fc2VxdWVuY2UKKwlzdHJ1Y3QKKwl7CisJICBjb25zdCBjaGFyKiAgICAgIF9NX25hbWU7CisJICBjb25zdCB2b2lkKiAgICAgIF9NX2FkZHJlc3M7CisJICBjb25zdCB0eXBlX2luZm8qIF9NX3R5cGU7CisJfSBfTV9zZXF1ZW5jZTsKKworCS8vIFdoZW4gX01fa2luZCA9PSBfX2ludGVnZXIKKwlzdHJ1Y3QKKwl7CisJICBjb25zdCBjaGFyKiBfTV9uYW1lOworCSAgbG9uZyAgICAgICAgX01fdmFsdWU7CisJfSBfTV9pbnRlZ2VyOworCisJLy8gV2hlbiBfTV9raW5kID09IF9fc3RyaW5nCisJc3RydWN0CisJeworCSAgY29uc3QgY2hhciogX01fbmFtZTsKKwkgIGNvbnN0IGNoYXIqIF9NX3ZhbHVlOworCX0gX01fc3RyaW5nOworICAgICAgfSBfTV92YXJpYW50OworCisgICAgICBfUGFyYW1ldGVyKCkgOiBfTV9raW5kKF9fdW51c2VkX3BhcmFtKSwgX01fdmFyaWFudCgpIHsgfQorCisgICAgICBfUGFyYW1ldGVyKGxvbmcgX192YWx1ZSwgY29uc3QgY2hhciogX19uYW1lKSAKKyAgICAgIDogX01fa2luZChfX2ludGVnZXIpLCBfTV92YXJpYW50KCkKKyAgICAgIHsKKwlfTV92YXJpYW50Ll9NX2ludGVnZXIuX01fbmFtZSA9IF9fbmFtZTsKKwlfTV92YXJpYW50Ll9NX2ludGVnZXIuX01fdmFsdWUgPSBfX3ZhbHVlOworICAgICAgfQorCisgICAgICBfUGFyYW1ldGVyKGNvbnN0IGNoYXIqIF9fdmFsdWUsIGNvbnN0IGNoYXIqIF9fbmFtZSkgCisgICAgICA6IF9NX2tpbmQoX19zdHJpbmcpLCBfTV92YXJpYW50KCkKKyAgICAgIHsKKwlfTV92YXJpYW50Ll9NX3N0cmluZy5fTV9uYW1lID0gX19uYW1lOworCV9NX3ZhcmlhbnQuX01fc3RyaW5nLl9NX3ZhbHVlID0gX192YWx1ZTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgICAgIF9QYXJhbWV0ZXIoY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2l0LAorCQkgICBjb25zdCBjaGFyKiBfX25hbWUsIF9Jc19pdGVyYXRvcikKKwk6IF9NX2tpbmQoX19pdGVyYXRvciksICBfTV92YXJpYW50KCkKKyAgICAgICAgeworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9uYW1lID0gX19uYW1lOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9hZGRyZXNzID0gJl9faXQ7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV90eXBlID0gJnR5cGVpZChfX2l0KTsKKyNlbHNlCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3R5cGUgPSAwOworI2VuZGlmCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX2NvbnN0bmVzcyA9CisJICAgIHN0ZDo6X19hcmVfc2FtZTxfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4sCisJICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfU2VxdWVuY2U6Oml0ZXJhdG9yPjo6CisJICAgICAgX192YWx1ZSA/IF9fbXV0YWJsZV9pdGVyYXRvciA6IF9fY29uc3RfaXRlcmF0b3I7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcXVlbmNlID0gX19pdC5fTV9nZXRfc2VxdWVuY2UoKTsKKyNpZmRlZiBfX0dYWF9SVFRJCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcV90eXBlID0gJnR5cGVpZChfU2VxdWVuY2UpOworI2Vsc2UKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc2VxX3R5cGUgPSAwOworI2VuZGlmCisKKwkgIGlmIChfX2l0Ll9NX3Npbmd1bGFyKCkpCisJICAgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc3RhdGUgPSBfX3Npbmd1bGFyOworCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKF9faXQuX01faXNfYmVmb3JlX2JlZ2luKCkpCisJCV9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc3RhdGUgPSBfX2JlZm9yZV9iZWdpbjsKKwkgICAgICBlbHNlIGlmIChfX2l0Ll9NX2lzX2VuZCgpKQorCQlfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0YXRlID0gX19lbmQ7CisJICAgICAgZWxzZSBpZiAoX19pdC5fTV9pc19iZWdpbigpKQorCQlfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0YXRlID0gX19iZWdpbjsKKwkgICAgICBlbHNlCisJCV9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc3RhdGUgPSBfX21pZGRsZTsKKwkgICAgfQorCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisJX1BhcmFtZXRlcihjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9faXQsCisJCSAgIGNvbnN0IGNoYXIqIF9fbmFtZSwgX0lzX2l0ZXJhdG9yKQorCTogX01fa2luZChfX2l0ZXJhdG9yKSwgIF9NX3ZhcmlhbnQoKQorCXsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fbmFtZSA9IF9fbmFtZTsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fYWRkcmVzcyA9ICZfX2l0OworI2lmZGVmIF9fR1hYX1JUVEkKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fdHlwZSA9ICZ0eXBlaWQoX19pdCk7CisjZWxzZQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV90eXBlID0gMDsKKyNlbmRpZgorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9jb25zdG5lc3MgPQorCSAgICBzdGQ6Ol9fYXJlX3NhbWU8X1NhZmVfbG9jYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+LAorCSAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1NlcXVlbmNlOjpsb2NhbF9pdGVyYXRvcj46OgorCSAgICAgIF9fdmFsdWUgPyBfX211dGFibGVfaXRlcmF0b3IgOiBfX2NvbnN0X2l0ZXJhdG9yOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zZXF1ZW5jZSA9IF9faXQuX01fZ2V0X3NlcXVlbmNlKCk7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zZXFfdHlwZSA9ICZ0eXBlaWQoX1NlcXVlbmNlKTsKKyNlbHNlCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcV90eXBlID0gMDsKKyNlbmRpZgorCisJICBpZiAoX19pdC5fTV9zaW5ndWxhcigpKQorCSAgICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0YXRlID0gX19zaW5ndWxhcjsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChfX2l0Ll9NX2lzX2VuZCgpKQorCQlfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0YXRlID0gX19lbmQ7CisJICAgICAgZWxzZSBpZiAoX19pdC5fTV9pc19iZWdpbigpKQorCQlfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0YXRlID0gX19iZWdpbjsKKwkgICAgICBlbHNlCisJCV9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc3RhdGUgPSBfX21pZGRsZTsKKwkgICAgfQorCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CisgICAgICAgIF9QYXJhbWV0ZXIoY29uc3QgX1R5cGUqJiBfX2l0LCBjb25zdCBjaGFyKiBfX25hbWUsIF9Jc19pdGVyYXRvcikKKyAgICAgICAgOiBfTV9raW5kKF9faXRlcmF0b3IpLCBfTV92YXJpYW50KCkKKyAgICAgICAgeworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9uYW1lID0gX19uYW1lOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9hZGRyZXNzID0gJl9faXQ7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV90eXBlID0gJnR5cGVpZChfX2l0KTsKKyNlbHNlCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3R5cGUgPSAwOworI2VuZGlmCisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX2NvbnN0bmVzcyA9IF9fbXV0YWJsZV9pdGVyYXRvcjsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc3RhdGUgPSBfX2l0PyBfX3Vua25vd25fc3RhdGUgOiBfX3Npbmd1bGFyOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zZXF1ZW5jZSA9IDA7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcV90eXBlID0gMDsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgorICAgICAgICBfUGFyYW1ldGVyKF9UeXBlKiYgX19pdCwgY29uc3QgY2hhciogX19uYW1lLCBfSXNfaXRlcmF0b3IpCisgICAgICAgIDogX01fa2luZChfX2l0ZXJhdG9yKSwgX01fdmFyaWFudCgpCisgICAgICAgIHsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fbmFtZSA9IF9fbmFtZTsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fYWRkcmVzcyA9ICZfX2l0OworI2lmZGVmIF9fR1hYX1JUVEkKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fdHlwZSA9ICZ0eXBlaWQoX19pdCk7CisjZWxzZQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV90eXBlID0gMDsKKyNlbmRpZgorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9jb25zdG5lc3MgPSBfX2NvbnN0X2l0ZXJhdG9yOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zdGF0ZSA9IF9faXQ/IF9fdW5rbm93bl9zdGF0ZSA6IF9fc2luZ3VsYXI7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcXVlbmNlID0gMDsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fc2VxX3R5cGUgPSAwOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgICAgICBfUGFyYW1ldGVyKGNvbnN0IF9JdGVyYXRvciYgX19pdCwgY29uc3QgY2hhciogX19uYW1lLCBfSXNfaXRlcmF0b3IpCisgICAgICAgIDogX01fa2luZChfX2l0ZXJhdG9yKSwgX01fdmFyaWFudCgpCisgICAgICAgIHsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fbmFtZSA9IF9fbmFtZTsKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fYWRkcmVzcyA9ICZfX2l0OworI2lmZGVmIF9fR1hYX1JUVEkKKwkgIF9NX3ZhcmlhbnQuX01faXRlcmF0b3IuX01fdHlwZSA9ICZ0eXBlaWQoX19pdCk7CisjZWxzZQorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV90eXBlID0gMDsKKyNlbmRpZgorCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9jb25zdG5lc3MgPSBfX3Vua25vd25fY29uc3RuZXNzOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zdGF0ZSA9CisJICAgIF9fZ251X2RlYnVnOjpfX2NoZWNrX3Npbmd1bGFyKF9faXQpPyBfX3Npbmd1bGFyIDogX191bmtub3duX3N0YXRlOworCSAgX01fdmFyaWFudC5fTV9pdGVyYXRvci5fTV9zZXF1ZW5jZSA9IDA7CisJICBfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3NlcV90eXBlID0gMDsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICAgICAgX1BhcmFtZXRlcihjb25zdCBfU2FmZV9zZXF1ZW5jZTxfU2VxdWVuY2U+JiBfX3NlcSwKKwkJICAgY29uc3QgY2hhciogX19uYW1lLCBfSXNfc2VxdWVuY2UpCisgICAgICAgIDogX01fa2luZChfX3NlcXVlbmNlKSwgX01fdmFyaWFudCgpCisgICAgICAgIHsKKwkgIF9NX3ZhcmlhbnQuX01fc2VxdWVuY2UuX01fbmFtZSA9IF9fbmFtZTsKKwkgIF9NX3ZhcmlhbnQuX01fc2VxdWVuY2UuX01fYWRkcmVzcyA9CisJICAgIHN0YXRpY19jYXN0PGNvbnN0IF9TZXF1ZW5jZSo+KCZfX3NlcSk7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgX01fdmFyaWFudC5fTV9zZXF1ZW5jZS5fTV90eXBlID0gJnR5cGVpZChfU2VxdWVuY2UpOworI2Vsc2UKKwkgIF9NX3ZhcmlhbnQuX01fc2VxdWVuY2UuX01fdHlwZSA9IDA7CisjZW5kaWYKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICAgICAgX1BhcmFtZXRlcihjb25zdCBfU2VxdWVuY2UmIF9fc2VxLCBjb25zdCBjaGFyKiBfX25hbWUsIF9Jc19zZXF1ZW5jZSkKKyAgICAgICAgOiBfTV9raW5kKF9fc2VxdWVuY2UpLCBfTV92YXJpYW50KCkKKyAgICAgICAgeworCSAgX01fdmFyaWFudC5fTV9zZXF1ZW5jZS5fTV9uYW1lID0gX19uYW1lOworCSAgX01fdmFyaWFudC5fTV9zZXF1ZW5jZS5fTV9hZGRyZXNzID0gJl9fc2VxOworI2lmZGVmIF9fR1hYX1JUVEkKKwkgIF9NX3ZhcmlhbnQuX01fc2VxdWVuY2UuX01fdHlwZSA9ICZ0eXBlaWQoX1NlcXVlbmNlKTsKKyNlbHNlCisJICBfTV92YXJpYW50Ll9NX3NlcXVlbmNlLl9NX3R5cGUgPSAwOworI2VuZGlmCisJfQorCisgICAgICB2b2lkCisgICAgICBfTV9wcmludF9maWVsZChjb25zdCBfRXJyb3JfZm9ybWF0dGVyKiBfX2Zvcm1hdHRlciwKKwkJICAgICBjb25zdCBjaGFyKiBfX25hbWUpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBfTV9wcmludF9kZXNjcmlwdGlvbihjb25zdCBfRXJyb3JfZm9ybWF0dGVyKiBfX2Zvcm1hdHRlcikgY29uc3Q7CisgICAgfTsKKworICAgIGZyaWVuZCBzdHJ1Y3QgX1BhcmFtZXRlcjsKKworICBwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgICAgY29uc3QgX0Vycm9yX2Zvcm1hdHRlciYKKyAgICAgIF9NX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pdCwgY29uc3QgY2hhciogX19uYW1lID0gMCkgIGNvbnN0CisgICAgICB7CisJaWYgKF9NX251bV9wYXJhbWV0ZXJzIDwgc3RkOjpzaXplX3QoX19tYXhfcGFyYW1ldGVycykpCisJICBfTV9wYXJhbWV0ZXJzW19NX251bV9wYXJhbWV0ZXJzKytdID0gX1BhcmFtZXRlcihfX2l0LCBfX25hbWUsCisJCQkJCQkJICBfSXNfaXRlcmF0b3IoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgY29uc3QgX0Vycm9yX2Zvcm1hdHRlciYKKyAgICBfTV9pbnRlZ2VyKGxvbmcgX192YWx1ZSwgY29uc3QgY2hhciogX19uYW1lID0gMCkgY29uc3QKKyAgICB7CisgICAgICBpZiAoX01fbnVtX3BhcmFtZXRlcnMgPCBzdGQ6OnNpemVfdChfX21heF9wYXJhbWV0ZXJzKSkKKwlfTV9wYXJhbWV0ZXJzW19NX251bV9wYXJhbWV0ZXJzKytdID0gX1BhcmFtZXRlcihfX3ZhbHVlLCBfX25hbWUpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGNvbnN0IF9FcnJvcl9mb3JtYXR0ZXImCisgICAgX01fc3RyaW5nKGNvbnN0IGNoYXIqIF9fdmFsdWUsIGNvbnN0IGNoYXIqIF9fbmFtZSA9IDApIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX251bV9wYXJhbWV0ZXJzIDwgc3RkOjpzaXplX3QoX19tYXhfcGFyYW1ldGVycykpCisJX01fcGFyYW1ldGVyc1tfTV9udW1fcGFyYW1ldGVycysrXSA9IF9QYXJhbWV0ZXIoX192YWx1ZSwgX19uYW1lKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgICBjb25zdCBfRXJyb3JfZm9ybWF0dGVyJgorICAgICAgX01fc2VxdWVuY2UoY29uc3QgX1NlcXVlbmNlJiBfX3NlcSwgY29uc3QgY2hhciogX19uYW1lID0gMCkgY29uc3QKKyAgICAgIHsKKwlpZiAoX01fbnVtX3BhcmFtZXRlcnMgPCBzdGQ6OnNpemVfdChfX21heF9wYXJhbWV0ZXJzKSkKKwkgIF9NX3BhcmFtZXRlcnNbX01fbnVtX3BhcmFtZXRlcnMrK10gPSBfUGFyYW1ldGVyKF9fc2VxLCBfX25hbWUsCisJCQkJCQkJICBfSXNfc2VxdWVuY2UoKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgY29uc3QgX0Vycm9yX2Zvcm1hdHRlciYKKyAgICBfTV9tZXNzYWdlKGNvbnN0IGNoYXIqIF9fdGV4dCkgY29uc3QKKyAgICB7IF9NX3RleHQgPSBfX3RleHQ7IHJldHVybiAqdGhpczsgfQorCisgICAgY29uc3QgX0Vycm9yX2Zvcm1hdHRlciYKKyAgICBfTV9tZXNzYWdlKF9EZWJ1Z19tc2dfaWQgX19pZCkgY29uc3QgdGhyb3cgKCk7CisKKyAgICBfR0xJQkNYWF9OT1JFVFVSTiB2b2lkCisgICAgX01fZXJyb3IoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIF9FcnJvcl9mb3JtYXR0ZXIoY29uc3QgY2hhciogX19maWxlLCBzdGQ6OnNpemVfdCBfX2xpbmUpCisgICAgOiBfTV9maWxlKF9fZmlsZSksIF9NX2xpbmUoX19saW5lKSwgX01fbnVtX3BhcmFtZXRlcnMoMCksIF9NX3RleHQoMCksCisgICAgICBfTV9tYXhfbGVuZ3RoKDc4KSwgX01fY29sdW1uKDEpLCBfTV9maXJzdF9saW5lKHRydWUpLCBfTV93b3Jkd3JhcChmYWxzZSkKKyAgICB7IF9NX2dldF9tYXhfbGVuZ3RoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2Zvcm1hdF93b3JkKGNoYXIqLCBpbnQsIGNvbnN0IGNoYXIqLCBfVHApIGNvbnN0IHRocm93ICgpOworCisgICAgdm9pZAorICAgIF9NX3ByaW50X3dvcmQoY29uc3QgY2hhciogX193b3JkKSBjb25zdDsKKworICAgIHZvaWQKKyAgICBfTV9wcmludF9zdHJpbmcoY29uc3QgY2hhciogX19zdHJpbmcpIGNvbnN0OworCisgICAgdm9pZAorICAgIF9NX2dldF9tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3cgKCk7CisKKyAgICBlbnVtIHsgX19tYXhfcGFyYW1ldGVycyA9IDkgfTsKKworICAgIGNvbnN0IGNoYXIqICAgICAgICAgX01fZmlsZTsKKyAgICBzdGQ6OnNpemVfdCAgICAgICAgIF9NX2xpbmU7CisgICAgbXV0YWJsZSBfUGFyYW1ldGVyICBfTV9wYXJhbWV0ZXJzW19fbWF4X3BhcmFtZXRlcnNdOworICAgIG11dGFibGUgc3RkOjpzaXplX3QgX01fbnVtX3BhcmFtZXRlcnM7CisgICAgbXV0YWJsZSBjb25zdCBjaGFyKiBfTV90ZXh0OworICAgIG11dGFibGUgc3RkOjpzaXplX3QgX01fbWF4X2xlbmd0aDsKKyAgICBlbnVtIHsgX01faW5kZW50ID0gNCB9IDsKKyAgICBtdXRhYmxlIHN0ZDo6c2l6ZV90IF9NX2NvbHVtbjsKKyAgICBtdXRhYmxlIGJvb2wgICAgICAgIF9NX2ZpcnN0X2xpbmU7CisgICAgbXV0YWJsZSBib29sICAgICAgICBfTV93b3Jkd3JhcDsKKworICBwdWJsaWM6CisgICAgc3RhdGljIF9FcnJvcl9mb3JtYXR0ZXIKKyAgICBfTV9hdChjb25zdCBjaGFyKiBfX2ZpbGUsIHN0ZDo6c2l6ZV90IF9fbGluZSkKKyAgICB7IHJldHVybiBfRXJyb3JfZm9ybWF0dGVyKF9fZmlsZSwgX19saW5lKTsgfQorICB9OworfSAvLyBuYW1lc3BhY2UgX19nbnVfZGVidWcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL2ZvcndhcmRfbGlzdCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvZm9yd2FyZF9saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYTJlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL2ZvcndhcmRfbGlzdApAQCAtMCwwICsxLDgwMSBAQAorLy8gPGZvcndhcmRfbGlzdD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL2ZvcndhcmRfbGlzdAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfRk9SV0FSRF9MSVNUCisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX0ZPUldBUkRfTElTVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGZvcndhcmRfbGlzdD4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6OmZvcndhcmRfbGlzdCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X1RwPiA+CisgICAgY2xhc3MgZm9yd2FyZF9saXN0CisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0M6OmZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4sCisgICAgICBwdWJsaWMgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0M6OmZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4gX0Jhc2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yICAgICAgIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfQWxsb2M+Ojp0ZW1wbGF0ZQorICAgICAgICByZWJpbmQ8X0dMSUJDWFhfU1REX0M6Ol9Gd2RfbGlzdF9ub2RlPF9UcD4+OjpvdGhlciBfTm9kZV9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19hbGxvY190cmFpdHM8X05vZGVfYWxsb2NfdHlwZT4gX05vZGVfYWxsb2NfdHJhaXRzOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2l0ZXJhdG9yLAorCQkJCQkgIGZvcndhcmRfbGlzdD4gaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjxfQmFzZV9jb25zdF9pdGVyYXRvciwKKwkJCQkJICBmb3J3YXJkX2xpc3Q+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpwb2ludGVyICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3BvaW50ZXIgICAgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICAvLyAyMy4yLjMuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQKKyAgICAgIGZvcndhcmRfbGlzdChjb25zdCBfQWxsb2MmIF9fYWwgPSBfQWxsb2MoKSkKKyAgICAgIDogX0Jhc2UoX19hbCkgeyB9CisKKyAgICAgIGZvcndhcmRfbGlzdChjb25zdCBmb3J3YXJkX2xpc3QmIF9fbGlzdCwgY29uc3QgX0FsbG9jJiBfX2FsKQorICAgICAgOiBfQmFzZShfX2xpc3QsIF9fYWwpCisgICAgICB7IH0KKworICAgICAgZm9yd2FyZF9saXN0KGZvcndhcmRfbGlzdCYmIF9fbGlzdCwgY29uc3QgX0FsbG9jJiBfX2FsKQorICAgICAgOiBfQmFzZShzdGQ6Om1vdmUoX19saXN0Ll9NX2Jhc2UoKSksIF9fYWwpCisgICAgICB7CisJaWYgKF9fbGlzdC5nZXRfYWxsb2NhdG9yKCkgPT0gX19hbCkKKwkgIHRoaXMtPl9NX3N3YXAoX19saXN0KTsKKwllbHNlCisJICBfX2xpc3QuX01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGZvcndhcmRfbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYWwgPSBfQWxsb2MoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2FsKQorICAgICAgeyB9CisKKyAgICAgIGZvcndhcmRfbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2FsID0gX0FsbG9jKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hbCkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKwlmb3J3YXJkX2xpc3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2FsID0gX0FsbG9jKCkpCisgICAgICAgIDogX0Jhc2UoX19nbnVfZGVidWc6Ol9fYmFzZShfX2dudV9kZWJ1Zzo6X19jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LAorCQkJCQkJCQkgICAgIF9fbGFzdCkpLAorCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCksIF9fYWwpCisgICAgICAgIHsgfQorCisgICAgICBmb3J3YXJkX2xpc3QoY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QpCisgICAgICA6IF9CYXNlKF9fbGlzdCkKKyAgICAgIHsgfQorCisgICAgICBmb3J3YXJkX2xpc3QoZm9yd2FyZF9saXN0JiYgX19saXN0KSBub2V4Y2VwdAorICAgICAgOiBfQmFzZShzdGQ6Om1vdmUoX19saXN0Ll9NX2Jhc2UoKSkpCisgICAgICB7CisJdGhpcy0+X01fc3dhcChfX2xpc3QpOworICAgICAgfQorCisgICAgICBmb3J3YXJkX2xpc3Qoc3RkOjppbml0aWFsaXplcl9saXN0PF9UcD4gX19pbCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYWwgPSBfQWxsb2MoKSkKKyAgICAgIDogX0Jhc2UoX19pbCwgX19hbCkKKyAgICAgIHsgfQorCisgICAgICB+Zm9yd2FyZF9saXN0KCkgbm9leGNlcHQKKyAgICAgIHsgfQorCisgICAgICBmb3J3YXJkX2xpc3QmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QpCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBfX2xpc3Q7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGZvcndhcmRfbGlzdCYKKyAgICAgIG9wZXJhdG9yPShmb3J3YXJkX2xpc3QmJiBfX2xpc3QpCisgICAgICBub2V4Y2VwdChfTm9kZV9hbGxvY190cmFpdHM6Ol9TX25vdGhyb3dfbW92ZSgpKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19zZWxmX21vdmVfYXNzaWduKF9fbGlzdCk7CisJYm9vbCB4ZmVyX21lbW9yeSA9IF9Ob2RlX2FsbG9jX3RyYWl0czo6X1NfcHJvcGFnYXRlX29uX21vdmVfYXNzaWduKCkKKwkgICAgfHwgX19saXN0LmdldF9hbGxvY2F0b3IoKSA9PSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBzdGQ6Om1vdmUoX19saXN0KTsKKwlpZiAoeGZlcl9tZW1vcnkpCisJICB0aGlzLT5fTV9zd2FwKF9fbGlzdCk7CisJZWxzZQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfX2xpc3QuX01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGZvcndhcmRfbGlzdCYKKyAgICAgIG9wZXJhdG9yPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lsKQorICAgICAgeworCXN0YXRpY19jYXN0PF9CYXNlJj4oKnRoaXMpID0gX19pbDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorCXZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6YXNzaWduKF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCkpOworCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICAgIHsKKwlfQmFzZTo6YXNzaWduKF9fbiwgX192YWwpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lsKQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19pbCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmdldF9hbGxvY2F0b3I7CisKKyAgICAgIC8vIGl0ZXJhdG9yczoKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZm9yZV9iZWdpbigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVmb3JlX2JlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWZvcmVfYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZm9yZV9iZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpjYmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWZvcmVfYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmNiZWZvcmVfYmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmNlbmQoKSwgdGhpcyk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisgICAgICAvLyBlbGVtZW50IGFjY2VzczoKKworICAgICAgcmVmZXJlbmNlCisgICAgICBmcm9udCgpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisJcmV0dXJuIF9CYXNlOjpmcm9udCgpOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmZyb250KCk7CisgICAgICB9CisKKyAgICAgIC8vIG1vZGnvrIFlcnM6CisKKyAgICAgIHVzaW5nIF9CYXNlOjplbXBsYWNlX2Zyb250OworICAgICAgdXNpbmcgX0Jhc2U6OnB1c2hfZnJvbnQ7CisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9mcm9udCgpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihbdGhpc10oX0Jhc2VfY29uc3RfaXRlcmF0b3IgX19pdCkKKwkgIHsgcmV0dXJuIF9faXQgPT0gdGhpcy0+X01fYmFzZSgpLmNiZWdpbigpOyB9KTsKKwlfQmFzZTo6cG9wX2Zyb250KCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgX19nbGliY3h4X2NoZWNrX2luc2VydF9hZnRlcihfX3Bvcyk7CisJICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2VfYWZ0ZXIoX19wb3MuYmFzZSgpLAorCQkJCQlzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorCQkJICB0aGlzKTsKKyAgICAgICAJfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBjb25zdCBfVHAmIF9fdmFsKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnRfYWZ0ZXIoX19wb3MpOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0X2FmdGVyKF9fcG9zLmJhc2UoKSwgX192YWwpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgX1RwJiYgX192YWwpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydF9hZnRlcihfX3Bvcyk7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnRfYWZ0ZXIoX19wb3MuYmFzZSgpLCBzdGQ6Om1vdmUoX192YWwpKSwKKwkJICAgICAgIAl0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9hZnRlcihjb25zdF9pdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X2FmdGVyKF9fcG9zKTsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydF9hZnRlcihfX3Bvcy5iYXNlKCksIF9fbiwgX192YWwpLAorCQkgICAgICAgCXRoaXMpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgaW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLAorICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X3JhbmdlX2FmdGVyKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QpOworCSAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnRfYWZ0ZXIoX19wb3MuYmFzZSgpLAorCQkJCQkgICAgICBfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZmlyc3QpLAorCQkJCQkgICAgICBfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCkpLAorCQkJICB0aGlzKTsKKyAgICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lsKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnRfYWZ0ZXIoX19wb3MpOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0X2FmdGVyKF9fcG9zLmJhc2UoKSwgX19pbCksIHRoaXMpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9CYXNlX2l0ZXJhdG9yCisgICAgICBfTV9lcmFzZV9hZnRlcihfQmFzZV9jb25zdF9pdGVyYXRvciBfX3BvcykKKyAgICAgIHsKKwlfQmFzZV9jb25zdF9pdGVyYXRvciBfX25leHQgPSBzdGQ6Om5leHQoX19wb3MpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoW19fbmV4dF0oX0Jhc2VfY29uc3RfaXRlcmF0b3IgX19pdCkKKwkgIHsgcmV0dXJuIF9faXQgPT0gX19uZXh0OyB9KTsKKwlyZXR1cm4gX0Jhc2U6OmVyYXNlX2FmdGVyKF9fcG9zKTsKKyAgICAgIH0KKyAgICBwdWJsaWM6CisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlX2FmdGVyKF9fcG9zKTsKKwlyZXR1cm4gaXRlcmF0b3IoX01fZXJhc2VfYWZ0ZXIoX19wb3MuYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZV9hZnRlcihfX3BvcywgX19sYXN0KTsKKwlmb3IgKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9fdmljdGltID0gc3RkOjpuZXh0KF9fcG9zLmJhc2UoKSk7CisJICAgIF9fdmljdGltICE9IF9fbGFzdC5iYXNlKCk7ICsrX192aWN0aW0pCisJICB7CisJICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX3ZpY3RpbSAhPSBfQmFzZTo6ZW5kKCksCisJCQkJICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZTIpCisJCQkJICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikKKwkJCQkgIC5fTV9pdGVyYXRvcihfX3BvcywgInBvcyIpCisJCQkJICAuX01faXRlcmF0b3IoX19sYXN0LCAibGFzdCIpKTsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihbX192aWN0aW1dKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJICAgICAgeyByZXR1cm4gX19pdCA9PSBfX3ZpY3RpbTsgfSk7CisJICB9CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZV9hZnRlcihfX3Bvcy5iYXNlKCksIF9fbGFzdC5iYXNlKCkpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChmb3J3YXJkX2xpc3QmIF9fbGlzdCkKKyAgICAgIG5vZXhjZXB0KF9Ob2RlX2FsbG9jX3RyYWl0czo6X1Nfbm90aHJvd19zd2FwKCkpCisgICAgICB7CisJaWYgKCFfTm9kZV9hbGxvY190cmFpdHM6Ol9TX3Byb3BhZ2F0ZV9vbl9zd2FwKCkpCisJICBfX2dsaWJjeHhfY2hlY2tfZXF1YWxfYWxsb2NzKF9fbGlzdCk7CisJX0Jhc2U6OnN3YXAoX19saXN0KTsKKwl0aGlzLT5fTV9zd2FwKF9fbGlzdCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeikKKyAgICAgIHsKKwl0aGlzLT5fTV9kZXRhY2hfc2luZ3VsYXIoKTsKKworCS8vIGlmIF9fc3ogPCBzaXplKCksIGludmFsaWRhdGUgYWxsIGl0ZXJhdG9ycyBpbiBbYmVnaW4rX19zeiwgZW5kKCkKKwlfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbSA9IF9CYXNlOjpiZWdpbigpOworCV9CYXNlX2l0ZXJhdG9yIF9fZW5kID0gX0Jhc2U6OmVuZCgpOworCWZvciAoc2l6ZV90eXBlIF9faSA9IF9fc3o7IF9fdmljdGltICE9IF9fZW5kICYmIF9faSA+IDA7IC0tX19pKQorCSAgKytfX3ZpY3RpbTsKKworCWZvciAoOyBfX3ZpY3RpbSAhPSBfX2VuZDsgKytfX3ZpY3RpbSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihbX192aWN0aW1dKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJICAgICAgeyByZXR1cm4gX19pdCA9PSBfX3ZpY3RpbTsgfSk7CisJICB9CisKKwlfX3RyeQorCSAgeworCSAgICBfQmFzZTo6cmVzaXplKF9fc3opOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICB0aGlzLT5fTV9yZXZhbGlkYXRlX3Npbmd1bGFyKCk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKKyAgICAgIHsKKwl0aGlzLT5fTV9kZXRhY2hfc2luZ3VsYXIoKTsKKworCS8vIGlmIF9fc3ogPCBzaXplKCksIGludmFsaWRhdGUgYWxsIGl0ZXJhdG9ycyBpbiBbYmVnaW4rX19zeiwgZW5kKCkpCisJX0Jhc2VfaXRlcmF0b3IgX192aWN0aW0gPSBfQmFzZTo6YmVnaW4oKTsKKwlfQmFzZV9pdGVyYXRvciBfX2VuZCA9IF9CYXNlOjplbmQoKTsKKwlmb3IgKHNpemVfdHlwZSBfX2kgPSBfX3N6OyBfX3ZpY3RpbSAhPSBfX2VuZCAmJiBfX2kgPiAwOyAtLV9faSkKKwkgICsrX192aWN0aW07CisKKwlmb3IgKDsgX192aWN0aW0gIT0gX19lbmQ7ICsrX192aWN0aW0pCisJICB7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoW19fdmljdGltXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCSAgICAgIHsgcmV0dXJuIF9faXQgPT0gX192aWN0aW07IH0pOworCSAgfQorCisJX190cnkKKwkgIHsKKwkgICAgX0Jhc2U6OnJlc2l6ZShfX3N6LCBfX3ZhbCk7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIHRoaXMtPl9NX3JldmFsaWRhdGVfc2luZ3VsYXIoKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIG5vZXhjZXB0CisgICAgICB7CisJX0Jhc2U6OmNsZWFyKCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworICAgICAgLy8gMjMuMi4zLjUgZm9yd2FyZF9saXN0IG9wZXJhdGlvbnM6CisgICAgICB2b2lkCisgICAgICBzcGxpY2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIGZvcndhcmRfbGlzdCYmIF9fbGlzdCkKKyAgICAgIHsKKyAgICAgICAgX19nbGliY3h4X2NoZWNrX2luc2VydF9hZnRlcihfX3Bvcyk7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKCZfX2xpc3QgIT0gdGhpcywKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3NlbGZfc3BsaWNlKQorCQkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpKTsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saXN0LmdldF9hbGxvY2F0b3IoKSA9PSB0aGlzLT5nZXRfYWxsb2NhdG9yKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19zcGxpY2VfYWxsb2MpCisJCQkgICAgICAuX01fc2VxdWVuY2UoKnRoaXMpCisJCQkgICAgICAuX01fc2VxdWVuY2UoX19saXN0LCAiX19saXN0IikpOworCXRoaXMtPl9NX3RyYW5zZmVyX2Zyb21faWYoX19saXN0LCBbJl9fbGlzdF0oX0Jhc2VfY29uc3RfaXRlcmF0b3IgX19pdCkKKwkgIHsKKwkgICAgcmV0dXJuIF9faXQgIT0gX19saXN0Ll9NX2Jhc2UoKS5jYmVmb3JlX2JlZ2luKCkKKwkJICAgJiYgX19pdCAhPSBfX2xpc3QuX01fYmFzZSgpLmVuZCgpOworCSAgfSk7CisJX0Jhc2U6OnNwbGljZV9hZnRlcihfX3Bvcy5iYXNlKCksIHN0ZDo6bW92ZShfX2xpc3QuX01fYmFzZSgpKSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgZm9yd2FyZF9saXN0JiBfX2xpc3QpCisgICAgICB7IHNwbGljZV9hZnRlcihfX3Bvcywgc3RkOjptb3ZlKF9fbGlzdCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgZm9yd2FyZF9saXN0JiYgX19saXN0LAorCQkgICBjb25zdF9pdGVyYXRvciBfX2kpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydF9hZnRlcihfX3Bvcyk7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9faS5fTV9iZWZvcmVfZGVyZWZlcmVuY2VhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19zcGxpY2VfYmFkKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9faSwgIl9faSIpKTsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19pLl9NX2F0dGFjaGVkX3RvKCZfX2xpc3QpLAorCQkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfc3BsaWNlX290aGVyKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9faSwgIl9faSIpCisJCQkgICAgICAuX01fc2VxdWVuY2UoX19saXN0LCAiX19saXN0IikpOworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xpc3QuZ2V0X2FsbG9jYXRvcigpID09IHRoaXMtPmdldF9hbGxvY2F0b3IoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3NwbGljZV9hbGxvYykKKwkJCSAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcykKKwkJCSAgICAgIC5fTV9zZXF1ZW5jZShfX2xpc3QsICJfX2xpc3QiKSk7CisKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMjUwLiBzcGxpY2luZyBpbnZhbGlkYXRlcyBpdGVyYXRvcnMKKwlfQmFzZV9jb25zdF9pdGVyYXRvciBfX25leHQgPSBzdGQ6Om5leHQoX19pLmJhc2UoKSk7CisJdGhpcy0+X01fdHJhbnNmZXJfZnJvbV9pZihfX2xpc3QsIFtfX25leHRdKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJICB7IHJldHVybiBfX2l0ID09IF9fbmV4dDsgfSk7CisJX0Jhc2U6OnNwbGljZV9hZnRlcihfX3Bvcy5iYXNlKCksIHN0ZDo6bW92ZShfX2xpc3QuX01fYmFzZSgpKSwKKwkJCSAgICBfX2kuYmFzZSgpKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3BsaWNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBmb3J3YXJkX2xpc3QmIF9fbGlzdCwKKwkJICAgY29uc3RfaXRlcmF0b3IgX19pKQorICAgICAgeyBzcGxpY2VfYWZ0ZXIoX19wb3MsIHN0ZDo6bW92ZShfX2xpc3QpLCBfX2kpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZV9hZnRlcihjb25zdF9pdGVyYXRvciBfX3BvcywgZm9yd2FyZF9saXN0JiYgX19saXN0LAorCQkgICBjb25zdF9pdGVyYXRvciBfX2JlZm9yZSwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworICAgICAgICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X2FmdGVyKF9fcG9zKTsKKwlfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19iZWZvcmUsIF9fbGFzdCk7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fYmVmb3JlLl9NX2F0dGFjaGVkX3RvKCZfX2xpc3QpLAorCQkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfc3BsaWNlX290aGVyKQorCQkJICAgICAgLl9NX3NlcXVlbmNlKF9fbGlzdCwgImxpc3QiKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9fYmVmb3JlLCAiYmVmb3JlIikpOworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2JlZm9yZS5fTV9kZXJlZmVyZW5jZWFibGUoKQorCQkJICAgICAgfHwgX19iZWZvcmUuX01faXNfYmVmb3JlX2JlZ2luKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZTIpCisJCQkgICAgICAuX01fc2VxdWVuY2UoX19saXN0LCAibGlzdCIpCisJCQkgICAgICAuX01faXRlcmF0b3IoX19iZWZvcmUsICJiZWZvcmUiKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9fbGFzdCwgImxhc3QiKSk7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fYmVmb3JlICE9IF9fbGFzdCwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3ZhbGlkX3JhbmdlMikKKwkJCSAgICAgIC5fTV9zZXF1ZW5jZShfX2xpc3QsICJsaXN0IikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcihfX2JlZm9yZSwgImJlZm9yZSIpCisJCQkgICAgICAuX01faXRlcmF0b3IoX19sYXN0LCAibGFzdCIpKTsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saXN0LmdldF9hbGxvY2F0b3IoKSA9PSB0aGlzLT5nZXRfYWxsb2NhdG9yKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19zcGxpY2VfYWxsb2MpCisJCQkgICAgICAuX01fc2VxdWVuY2UoKnRoaXMpCisJCQkgICAgICAuX01fc2VxdWVuY2UoX19saXN0LCAiX19saXN0IikpOworCisJZm9yIChfQmFzZV9jb25zdF9pdGVyYXRvciBfX3RtcCA9IHN0ZDo6bmV4dChfX2JlZm9yZS5iYXNlKCkpOworCSAgICAgX190bXAgIT0gX19sYXN0LmJhc2UoKTsgKytfX3RtcCkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fdG1wICE9IF9fbGlzdC5fTV9iYXNlKCkuZW5kKCksCisJCQkJICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZTIpCisJCQkJICAuX01fc2VxdWVuY2UoX19saXN0LCAibGlzdCIpCisJCQkJICAuX01faXRlcmF0b3IoX19iZWZvcmUsICJiZWZvcmUiKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fbGFzdCwgImxhc3QiKSk7CisJICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSgmX19saXN0ICE9IHRoaXMgfHwgX190bXAgIT0gX19wb3MuYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3NwbGljZV9vdmVybGFwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5fTV9pdGVyYXRvcihfX3RtcCwgInBvc2l0aW9uIikKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2JlZm9yZSwgImJlZm9yZSIpCisJCQkJICAuX01faXRlcmF0b3IoX19sYXN0LCAibGFzdCIpKTsKKwkgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAvLyAyNTAuIHNwbGljaW5nIGludmFsaWRhdGVzIGl0ZXJhdG9ycworCSAgICB0aGlzLT5fTV90cmFuc2Zlcl9mcm9tX2lmKF9fbGlzdCwgW19fdG1wXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCSAgICAgIHsgcmV0dXJuIF9faXQgPT0gX190bXA7IH0pOworCSAgfQorCisJX0Jhc2U6OnNwbGljZV9hZnRlcihfX3Bvcy5iYXNlKCksIHN0ZDo6bW92ZShfX2xpc3QuX01fYmFzZSgpKSwKKwkJCSAgICBfX2JlZm9yZS5iYXNlKCksIF9fbGFzdC5iYXNlKCkpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzcGxpY2VfYWZ0ZXIoY29uc3RfaXRlcmF0b3IgX19wb3MsIGZvcndhcmRfbGlzdCYgX19saXN0LAorCQkgICBjb25zdF9pdGVyYXRvciBfX2JlZm9yZSwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyBzcGxpY2VfYWZ0ZXIoX19wb3MsIHN0ZDo6bW92ZShfX2xpc3QpLCBfX2JlZm9yZSwgX19sYXN0KTsgfQorCisgICAgICB2b2lkCisgICAgICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbCkKKyAgICAgIHsKKwlfQmFzZV9pdGVyYXRvciBfX3ggPSBfQmFzZTo6YmVmb3JlX2JlZ2luKCk7CisJX0Jhc2VfaXRlcmF0b3IgX19vbGQgPSBfX3grKzsKKwl3aGlsZSAoX194ICE9IF9CYXNlOjplbmQoKSkKKwkgIHsKKwkgICAgaWYgKCpfX3ggPT0gX192YWwpCisJICAgICAgX194ID0gX01fZXJhc2VfYWZ0ZXIoX19vbGQpOworCSAgICBlbHNlCisJICAgICAgX19vbGQgPSBfX3grKzsKKwkgIH0KKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWQ+CisgICAgICAgIHZvaWQKKyAgICAgICAgcmVtb3ZlX2lmKF9QcmVkIF9fcHJlZCkKKwl7CisJICBfQmFzZV9pdGVyYXRvciBfX3ggPSBfQmFzZTo6YmVmb3JlX2JlZ2luKCk7CisJICBfQmFzZV9pdGVyYXRvciBfX29sZCA9IF9feCsrOworCSAgd2hpbGUgKF9feCAhPSBfQmFzZTo6ZW5kKCkpCisJICAgIHsKKwkgICAgICBpZiAoX19wcmVkKCpfX3gpKQorCQlfX3ggPSBfTV9lcmFzZV9hZnRlcihfX29sZCk7CisJICAgICAgZWxzZQorCQlfX29sZCA9IF9feCsrOworCSAgICB9CisJfQorCisgICAgICB2b2lkCisgICAgICB1bmlxdWUoKQorICAgICAgeworCV9CYXNlX2l0ZXJhdG9yIF9fZmlyc3QgPSBfQmFzZTo6YmVnaW4oKTsKKwlfQmFzZV9pdGVyYXRvciBfX2xhc3QgPSBfQmFzZTo6ZW5kKCk7CisJaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgcmV0dXJuOworCV9CYXNlX2l0ZXJhdG9yIF9fbmV4dCA9IHN0ZDo6bmV4dChfX2ZpcnN0KTsKKwl3aGlsZSAoX19uZXh0ICE9IF9fbGFzdCkKKwkgIHsKKwkgICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCisJICAgICAgX19uZXh0ID0gX01fZXJhc2VfYWZ0ZXIoX19maXJzdCk7CisJICAgIGVsc2UKKwkgICAgICBfX2ZpcnN0ID0gX19uZXh0Kys7CisJICB9CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaW5QcmVkPgorICAgICAgICB2b2lkCisgICAgICAgIHVuaXF1ZShfQmluUHJlZCBfX2JpbmFyeV9wcmVkKQorCXsKKwkgIF9CYXNlX2l0ZXJhdG9yIF9fZmlyc3QgPSBfQmFzZTo6YmVnaW4oKTsKKwkgIF9CYXNlX2l0ZXJhdG9yIF9fbGFzdCA9IF9CYXNlOjplbmQoKTsKKwkgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwkgICAgcmV0dXJuOworCSAgX0Jhc2VfaXRlcmF0b3IgX19uZXh0ID0gc3RkOjpuZXh0KF9fZmlyc3QpOworCSAgd2hpbGUgKF9fbmV4dCAhPSBfX2xhc3QpCisJICAgIHsKKwkgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCisJCV9fbmV4dCA9IF9NX2VyYXNlX2FmdGVyKF9fZmlyc3QpOworCSAgICAgIGVsc2UKKwkJX19maXJzdCA9IF9fbmV4dCsrOworCSAgICB9CisJfQorCisgICAgICB2b2lkCisgICAgICBtZXJnZShmb3J3YXJkX2xpc3QmJiBfX2xpc3QpCisgICAgICB7CisJaWYgKHRoaXMgIT0gJl9fbGlzdCkKKwl7CisJICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkKF9CYXNlOjpiZWdpbigpLCBfQmFzZTo6ZW5kKCkpOworCSAgX19nbGliY3h4X2NoZWNrX3NvcnRlZChfX2xpc3QuX01fYmFzZSgpLmJlZ2luKCksCisJCQkJIF9fbGlzdC5fTV9iYXNlKCkuZW5kKCkpOworCSAgdGhpcy0+X01fdHJhbnNmZXJfZnJvbV9pZihfX2xpc3QsIFsmX19saXN0XShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCSAgICB7CisJICAgICAgcmV0dXJuIF9faXQgIT0gX19saXN0Ll9NX2Jhc2UoKS5jYmVmb3JlX2JlZ2luKCkKKwkJICAgICAmJiBfX2l0ICE9IF9fbGlzdC5fTV9iYXNlKCkuY2VuZCgpOworCSAgICB9KTsKKwkgIF9CYXNlOjptZXJnZShzdGQ6Om1vdmUoX19saXN0Ll9NX2Jhc2UoKSkpOworCX0KKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgbWVyZ2UoZm9yd2FyZF9saXN0JiBfX2xpc3QpCisgICAgICB7IG1lcmdlKHN0ZDo6bW92ZShfX2xpc3QpKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcD4KKyAgICAgICAgdm9pZAorICAgICAgICBtZXJnZShmb3J3YXJkX2xpc3QmJiBfX2xpc3QsIF9Db21wIF9fY29tcCkKKwl7CisJICBpZiAodGhpcyAhPSAmX19saXN0KQorCSAgeworCSAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkX3ByZWQoX0Jhc2U6OmJlZ2luKCksIF9CYXNlOjplbmQoKSwgX19jb21wKTsKKwkgICAgX19nbGliY3h4X2NoZWNrX3NvcnRlZF9wcmVkKF9fbGlzdC5fTV9iYXNlKCkuYmVnaW4oKSwKKwkJCQkJX19saXN0Ll9NX2Jhc2UoKS5lbmQoKSwgX19jb21wKTsKKwkgICAgdGhpcy0+X01fdHJhbnNmZXJfZnJvbV9pZihfX2xpc3QsCisJCQkJICAgICAgWyZfX2xpc3RdKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJICAgICAgeworCSAgICAgICAgcmV0dXJuIF9faXQgIT0gX19saXN0Ll9NX2Jhc2UoKS5jYmVmb3JlX2JlZ2luKCkKKwkJICAgICAgICYmIF9faXQgIT0gX19saXN0Ll9NX2Jhc2UoKS5jZW5kKCk7CisJICAgICAgfSk7CisJICAgIF9CYXNlOjptZXJnZShzdGQ6Om1vdmUoX19saXN0Ll9NX2Jhc2UoKSksIF9fY29tcCk7CisJICB9CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcD4KKyAgICAgICAgdm9pZAorICAgICAgICBtZXJnZShmb3J3YXJkX2xpc3QmIF9fbGlzdCwgX0NvbXAgX19jb21wKQorICAgICAgICB7IG1lcmdlKHN0ZDo6bW92ZShfX2xpc3QpLCBfX2NvbXApOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpzb3J0OworICAgICAgdXNpbmcgX0Jhc2U6OnJldmVyc2U7CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpIG5vZXhjZXB0ICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoW3RoaXNdKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJICB7CisJICAgIHJldHVybiBfX2l0ICE9IHRoaXMtPl9NX2Jhc2UoKS5jYmVmb3JlX2JlZ2luKCkKKwkJICAgJiYgX19pdCAhPSB0aGlzLT5fTV9iYXNlKCkuY2VuZCgpOworCSAgfSk7CisgICAgICB9CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcl9iYXNlIF9TYWZlX2l0ZXJhdG9yX2Jhc2U7CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX01fc3dhcF9hdXgoZm9yd2FyZF9saXN0JiBfX2xocywKKwkJICBfU2FmZV9pdGVyYXRvcl9iYXNlKiYgX19saHNfaXRlcmF0b3JzLAorCQkgIGZvcndhcmRfbGlzdCYgX19yaHMsCisJCSAgX1NhZmVfaXRlcmF0b3JfYmFzZSomIF9fcmhzX2l0ZXJhdG9ycyk7CisgICAgICB2b2lkIF9NX3N3YXAoZm9yd2FyZF9saXN0JiBfX2xpc3QpOworICAgIH07CisKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9zd2FwX2F1eChmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkJX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yX2Jhc2UqJiBfX2xoc19pdGVyYXRvcnMsCisJCWZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzLAorCQlfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3JfYmFzZSomIF9fcmhzX2l0ZXJhdG9ycykKKyAgICB7CisgICAgICB1c2luZyBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3JfYmFzZTsKKyAgICAgIF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9fYmJlZ2luX2l0cyA9IDA7CisgICAgICBfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2xhc3RfYmJlZ2luID0gMDsKKyAgICAgIGZvciAoX1NhZmVfaXRlcmF0b3JfYmFzZSogX19pdGVyID0gX19saHNfaXRlcmF0b3JzOyBfX2l0ZXI7KQorCXsKKwkgIC8vIEV2ZW4gaXRlcmF0b3IgYXJlIGNhc3RlZCB0byBjb25zdF9pdGVyYXRvciwgbm90IGEgcHJvYmxlbS4KKwkgIGNvbnN0X2l0ZXJhdG9yKiBfX3ZpY3RpbSA9IHN0YXRpY19jYXN0PGNvbnN0X2l0ZXJhdG9yKj4oX19pdGVyKTsKKwkgIF9faXRlciA9IF9faXRlci0+X01fbmV4dDsKKwkgIGlmIChfX3ZpY3RpbS0+YmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKS5jYmVmb3JlX2JlZ2luKCkpCisJICAgIHsKKwkgICAgICBfX3ZpY3RpbS0+X01fdW5saW5rKCk7CisJICAgICAgaWYgKF9fbGhzX2l0ZXJhdG9ycyA9PSBfX3ZpY3RpbSkKKwkJX19saHNfaXRlcmF0b3JzID0gX192aWN0aW0tPl9NX25leHQ7CisJICAgICAgaWYgKF9fYmJlZ2luX2l0cykKKwkJeworCQkgIF9fdmljdGltLT5fTV9uZXh0ID0gX19iYmVnaW5faXRzOworCQkgIF9fYmJlZ2luX2l0cy0+X01fcHJpb3IgPSBfX3ZpY3RpbTsKKwkJfQorCSAgICAgIGVsc2UKKwkJX19sYXN0X2JiZWdpbiA9IF9fdmljdGltOworCSAgICAgIF9fYmJlZ2luX2l0cyA9IF9fdmljdGltOworCSAgICB9CisJICBlbHNlCisJICAgIF9fdmljdGltLT5fTV9zZXF1ZW5jZSA9ICZfX2xoczsKKwl9CisKKyAgICAgIGlmIChfX2JiZWdpbl9pdHMpCisJeworCSAgaWYgKF9fcmhzX2l0ZXJhdG9ycykKKwkgICAgeworCSAgICAgIF9fcmhzX2l0ZXJhdG9ycy0+X01fcHJpb3IgPSBfX2xhc3RfYmJlZ2luOworCSAgICAgIF9fbGFzdF9iYmVnaW4tPl9NX25leHQgPSBfX3Joc19pdGVyYXRvcnM7CisJICAgIH0KKwkgIF9fcmhzX2l0ZXJhdG9ycyA9IF9fYmJlZ2luX2l0czsKKwl9CisgICAgfQorCisgIC8qIFNwZWNpYWwgZm9yd2FyZF9saXN0IF9NX3N3YXAgdmVyc2lvbiB0aGF0IGRvIG5vdCBzd2FwIHRoZQorICAgKiBiZWZvcmUtYmVnaW4gb3duZXJzaGlwLiovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+OjoKKyAgICBfTV9zd2FwKGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGlzdCkKKyAgICB7CisgICAgICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgc2VudHJ5KHRoaXMtPl9NX2dldF9tdXRleCgpKTsKKyAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9pdGVyYXRvcnMsIF9fbGlzdC5fTV9pdGVyYXRvcnMpOworICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2NvbnN0X2l0ZXJhdG9ycywgX19saXN0Ll9NX2NvbnN0X2l0ZXJhdG9ycyk7CisgICAgICAvLyBVc2VsZXNzLCBhbHdheXMgMSBvbiBmb3J3YXJkX2xpc3QKKyAgICAgIC8vc3RkOjpzd2FwKHRoaXMtPl9NX3ZlcnNpb24sIF9fbGlzdC5fTV92ZXJzaW9uKTsKKyAgICAgIF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9fdGhpc19pdHMgPSB0aGlzLT5fTV9pdGVyYXRvcnM7CisgICAgICBfTV9zd2FwX2F1eChfX2xpc3QsIF9fbGlzdC5fTV9pdGVyYXRvcnMsICp0aGlzLCB0aGlzLT5fTV9pdGVyYXRvcnMpOworICAgICAgX1NhZmVfaXRlcmF0b3JfYmFzZSogX190aGlzX2NvbnN0X2l0cyA9IHRoaXMtPl9NX2NvbnN0X2l0ZXJhdG9yczsKKyAgICAgIF9NX3N3YXBfYXV4KF9fbGlzdCwgX19saXN0Ll9NX2NvbnN0X2l0ZXJhdG9ycywgKnRoaXMsCisJCSAgdGhpcy0+X01fY29uc3RfaXRlcmF0b3JzKTsKKyAgICAgIF9NX3N3YXBfYXV4KCp0aGlzLCBfX3RoaXNfaXRzLCBfX2xpc3QsIF9fbGlzdC5fTV9pdGVyYXRvcnMpOworICAgICAgX01fc3dhcF9hdXgoKnRoaXMsIF9fdGhpc19jb25zdF9pdHMsIF9fbGlzdCwgX19saXN0Ll9NX2NvbnN0X2l0ZXJhdG9ycyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x5KQorICAgIHsgcmV0dXJuIF9fbHguX01fYmFzZSgpID09IF9fbHkuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiBfX2x4Ll9NX2Jhc2UoKSA8IF9fbHkuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x5KQorICAgIHsgcmV0dXJuICEoX19seCA9PSBfX2x5KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiAoX19seSA8IF9fbHgpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeyByZXR1cm4gIShfX2x4IDwgX19seSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x4LAorICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiAhKF9fbHkgPCBfX2x4KTsgfQorCisgIC8vLyBTZWUgc3RkOjpmb3J3YXJkX2xpc3Q6OnN3YXAoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisJIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeyBfX2x4LnN3YXAoX19seSk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworfSAvLyBuYW1lc3BhY2Ugc3RkCisKK25hbWVzcGFjZSBfX2dudV9kZWJ1ZworeworICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX0JlZm9yZUJlZ2luSGVscGVyPHN0ZDo6X19kZWJ1Zzo6Zm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiA+CisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Ol9fZGVidWc6OmZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4gX1NlcXVlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIF9JdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0OjppdGVyYXRvcl90eXBlIF9CYXNlSXQ7CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfU19JcyhfQmFzZUl0IF9faXQsIGNvbnN0IF9TZXF1ZW5jZSogX19zZXEpCisgICAgICB7IHJldHVybiBfX2l0ID09IF9fc2VxLT5fTV9iYXNlKCkuY2JlZm9yZV9iZWdpbigpOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfU19Jc19CZWdpbm5lc3QoX0Jhc2VJdCBfX2l0LCBjb25zdCBfU2VxdWVuY2UqIF9fc2VxKQorICAgICAgeyByZXR1cm4gX1NfSXMoX19pdCwgX19zZXEpOyB9CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL2Z1bmN0aW9ucy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9mdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2ExMjIzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9mdW5jdGlvbnMuaApAQCAtMCwwICsxLDQ1MCBAQAorLy8gRGVidWdnaW5nIHN1cHBvcnQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL2Z1bmN0aW9ucy5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19GVU5DVElPTlNfSAorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19GVU5DVElPTlNfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaD4gLy8gZm9yIGl0ZXJhdG9yX3RyYWl0cywgY2F0ZWdvcmllcyBhbmQKKwkJCQkJICAvLyBfSXRlcl9iYXNlCisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4gICAgICAgICAvLyBmb3IgX19pc19pbnRlZ2VyCisjaW5jbHVkZSA8ZGVidWcvZm9ybWF0dGVyLmg+CisKK25hbWVzcGFjZSBfX2dudV9kZWJ1ZworeworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBjbGFzcyBfU2FmZV9pdGVyYXRvcjsKKworICAvLyBBbiBhcmJpdHJhcnkgaXRlcmF0b3IgcG9pbnRlciBpcyBub3Qgc2luZ3VsYXIuCisgIGlubGluZSBib29sCisgIF9fY2hlY2tfc2luZ3VsYXJfYXV4KGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQorCisgIC8vIFdlIG1heSBoYXZlIGFuIGl0ZXJhdG9yIHRoYXQgZGVyaXZlcyBmcm9tIF9TYWZlX2l0ZXJhdG9yX2Jhc2UgYnV0IGlzbid0CisgIC8vIGEgX1NhZmVfaXRlcmF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc2luZ3VsYXIoX0l0ZXJhdG9yJiBfX3gpCisgICAgeyByZXR1cm4gX19jaGVja19zaW5ndWxhcl9hdXgoJl9feCk7IH0KKworICAvKiogTm9uLU5VTEwgcG9pbnRlcnMgYXJlIG5vbnNpbmd1bGFyLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3Npbmd1bGFyKGNvbnN0IF9UcCogX19wdHIpCisgICAgeyByZXR1cm4gX19wdHIgPT0gMDsgfQorCisgIC8qKiBTYWZlIGl0ZXJhdG9ycyBrbm93IGlmIHRoZXkgYXJlIHNpbmd1bGFyLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc2luZ3VsYXIoY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3gpCisgICAgeyByZXR1cm4gX194Ll9NX3Npbmd1bGFyKCk7IH0KKworICAvKiogQXNzdW1lIHRoYXQgc29tZSBhcmJpdHJhcnkgaXRlcmF0b3IgaXMgZGVyZWZlcmVuY2VhYmxlLCBiZWNhdXNlIHdlCisgICAgICBjYW4ndCBwcm92ZSB0aGF0IGl0IGlzbid0LiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX2RlcmVmZXJlbmNlYWJsZShfSXRlcmF0b3ImKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKworICAvKiogTm9uLU5VTEwgcG9pbnRlcnMgYXJlIGRlcmVmZXJlbmNlYWJsZS4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19kZXJlZmVyZW5jZWFibGUoY29uc3QgX1RwKiBfX3B0cikKKyAgICB7IHJldHVybiBfX3B0cjsgfQorCisgIC8qKiBTYWZlIGl0ZXJhdG9ycyBrbm93IGlmIHRoZXkgYXJlIHNpbmd1bGFyLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfZGVyZWZlcmVuY2VhYmxlKGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX194KQorICAgIHsgcmV0dXJuIF9feC5fTV9kZXJlZmVyZW5jZWFibGUoKTsgfQorCisgIC8qKiBJZiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMgaXMKKyAgICogIG5vbm5lZ2F0aXZlLCBhc3N1bWUgdGhlIHJhbmdlIGlzIHZhbGlkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX3ZhbGlkX3JhbmdlX2F1eDIoY29uc3QgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ZpcnN0LAorCQkgICAgICAgY29uc3QgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2xhc3QsCisJCSAgICAgICBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3QgPj0gMDsgfQorCisgIC8qKiBDYW4ndCB0ZXN0IGZvciBhIHZhbGlkIHJhbmdlIHdpdGggaW5wdXQgaXRlcmF0b3JzLCBiZWNhdXNlCisgICAqICBpdGVyYXRpb24gbWF5IGJlIGRlc3RydWN0aXZlLiBTbyB3ZSBqdXN0IGFzc3VtZSB0aGF0IHRoZSByYW5nZQorICAgKiAgaXMgdmFsaWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgX192YWxpZF9yYW5nZV9hdXgyKGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwgY29uc3QgX0lucHV0SXRlcmF0b3ImLAorCQkgICAgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIC8qKiBXZSBzYXkgdGhhdCBpbnRlZ3JhbCB0eXBlcyBmb3IgYSB2YWxpZCByYW5nZSwgYW5kIGRlZmVyIHRvIG90aGVyCisgICAqICByb3V0aW5lcyB0byByZWFsaXplIHdoYXQgdG8gZG8gd2l0aCBpbnRlZ3JhbCB0eXBlcyBpbnN0ZWFkIG9mCisgICAqICBpdGVyYXRvcnMuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ3JhbD4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fdmFsaWRfcmFuZ2VfYXV4KGNvbnN0IF9JbnRlZ3JhbCYsIGNvbnN0IF9JbnRlZ3JhbCYsIHN0ZDo6X190cnVlX3R5cGUpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIC8qKiBXZSBoYXZlIGl0ZXJhdG9ycywgc28gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaXRlcmF0b3JzIHRoYXQgYXJlCisgICAqICB0byBzZWUgaWYgd2UgY2FuIGNoZWNrIHRoZSByYW5nZSBhaGVhZCBvZiB0aW1lLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fdmFsaWRfcmFuZ2VfYXV4KGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2ZpcnN0LAorCQkgICAgICBjb25zdCBfSW5wdXRJdGVyYXRvciYgX19sYXN0LCBzdGQ6Ol9fZmFsc2VfdHlwZSkKKyAgeyByZXR1cm4gX192YWxpZF9yYW5nZV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKKwkJCSAgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KKworICAvKiogRG9uJ3Qga25vdyB3aGF0IHRoZXNlIGl0ZXJhdG9ycyBhcmUsIG9yIGlmIHRoZXkgYXJlIGV2ZW4KKyAgICogIGl0ZXJhdG9ycyAod2UgbWF5IGdldCBhbiBpbnRlZ3JhbCB0eXBlIGZvciBJbnB1dEl0ZXJhdG9yKSwgc28KKyAgICogIHNlZSBpZiB0aGV5IGFyZSBpbnRlZ3JhbCBhbmQgcGFzcyB0aGVtIG9uIHRvIHRoZSBuZXh0IHBoYXNlCisgICAqICBvdGhlcndpc2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgX192YWxpZF9yYW5nZShjb25zdCBfSW5wdXRJdGVyYXRvciYgX19maXJzdCwgY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKyAgICAgIHJldHVybiBfX3ZhbGlkX3JhbmdlX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKyAgICB9CisKKyAgLyoqIFNhZmUgaXRlcmF0b3JzIGtub3cgaG93IHRvIGNoZWNrIGlmIHRoZXkgZm9ybSBhIHZhbGlkIHJhbmdlLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fdmFsaWRfcmFuZ2UoY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2ZpcnN0LAorCQkgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19sYXN0KQorICAgIHsgcmV0dXJuIF9fZmlyc3QuX01fdmFsaWRfcmFuZ2UoX19sYXN0KTsgfQorCisgIC8qKiBTYWZlIGxvY2FsIGl0ZXJhdG9ycyBrbm93IGhvdyB0byBjaGVjayBpZiB0aGV5IGZvcm0gYSB2YWxpZCByYW5nZS4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX3ZhbGlkX3JhbmdlKGNvbnN0IF9TYWZlX2xvY2FsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19maXJzdCwKKwkJICBjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGFzdCkKKyAgICB7IHJldHVybiBfX2ZpcnN0Ll9NX3ZhbGlkX3JhbmdlKF9fbGFzdCk7IH0KKworICAvKiBDaGVja3MgdGhhdCBbZmlyc3QsIGxhc3QpIGlzIGEgdmFsaWQgcmFuZ2UsIGFuZCB0aGVuIHJldHVybnMKKyAgICogX19maXJzdC4gVGhpcyByb3V0aW5lIGlzIHVzZWZ1bCB3aGVuIHdlIGNhbid0IHVzZSBhIHNlcGFyYXRlCisgICAqIGFzc2VydGlvbiBzdGF0ZW1lbnQgYmVjYXVzZSwgZS5nLiwgd2UgYXJlIGluIGEgY29uc3RydWN0b3IuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfSW5wdXRJdGVyYXRvcgorICAgIF9fY2hlY2tfdmFsaWRfcmFuZ2UoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmlyc3QsCisJCQljb25zdCBfSW5wdXRJdGVyYXRvciYgX19sYXN0CisJCQlfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICByZXR1cm4gX19maXJzdDsKKyAgICB9CisKKyAgLyoqIENoZWNrcyB0aGF0IF9fcyBpcyBub24tTlVMTCBvciBfX24gPT0gMCwgYW5kIHRoZW4gcmV0dXJucyBfX3MuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0ludGVnZXI+CisgICAgaW5saW5lIGNvbnN0IF9DaGFyVCoKKyAgICBfX2NoZWNrX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywKKwkJICAgY29uc3QgX0ludGVnZXImIF9fbiBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkpCisgICAgeworI2lmZGVmIF9HTElCQ1hYX0RFQlVHX1BFREFOVElDCisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fcyAhPSAwIHx8IF9fbiA9PSAwKTsKKyNlbmRpZgorICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKyAgLyoqIENoZWNrcyB0aGF0IF9fcyBpcyBub24tTlVMTCBhbmQgdGhlbiByZXR1cm5zIF9fcy4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGlubGluZSBjb25zdCBfQ2hhclQqCisgICAgX19jaGVja19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MpCisgICAgeworI2lmZGVmIF9HTElCQ1hYX0RFQlVHX1BFREFOVElDCisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fcyAhPSAwKTsKKyNlbmRpZgorICAgICAgcmV0dXJuIF9fczsKKyAgICB9CisKKyAgLy8gQ2FuJ3QgY2hlY2sgaWYgYW4gaW5wdXQgaXRlcmF0b3Igc2VxdWVuY2UgaXMgc29ydGVkLCBiZWNhdXNlIHdlCisgIC8vIGNhbid0IHN0ZXAgdGhyb3VnaCB0aGUgc2VxdWVuY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWRfYXV4KGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwgY29uc3QgX0lucHV0SXRlcmF0b3ImLAorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgLy8gQ2FuIHZlcmlmeSBpZiBhIGZvcndhcmQgaXRlcmF0b3Igc2VxdWVuY2UgaXMgaW4gZmFjdCBzb3J0ZWQgdXNpbmcKKyAgLy8gc3RkOjpfX2lzX3NvcnRlZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWRfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworICAgICAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpCisgICAgICAgIGlmICgqX19uZXh0IDwgKl9fZmlyc3QpCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbiwgYXMgdGhlIGl0ZXJhdG9yIHJhbmdlIGhhcyBiZWVuIHZhbGlkYXRlZCwgY2hlY2sgb24KKyAgLy8gcmFuZG9tIGFjY2VzcyBzYWZlIGl0ZXJhdG9ycyBpcyBkb25lIHVzaW5nIHRoZSBiYXNlIGl0ZXJhdG9yLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkX2F1eChjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fZmlyc3QsCisJCSAgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGFzdCwKKwkJICAgICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgX190YWcpCisgIHsgcmV0dXJuIF9fY2hlY2tfc29ydGVkX2F1eChfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX190YWcpOyB9CisKKyAgLy8gQ2FuJ3QgY2hlY2sgaWYgYW4gaW5wdXQgaXRlcmF0b3Igc2VxdWVuY2UgaXMgc29ydGVkLCBiZWNhdXNlIHdlIGNhbid0IHN0ZXAKKyAgLy8gdGhyb3VnaCB0aGUgc2VxdWVuY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWRfYXV4KGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwgY29uc3QgX0lucHV0SXRlcmF0b3ImLAorICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlLCBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgLy8gQ2FuIHZlcmlmeSBpZiBhIGZvcndhcmQgaXRlcmF0b3Igc2VxdWVuY2UgaXMgaW4gZmFjdCBzb3J0ZWQgdXNpbmcKKyAgLy8gc3RkOjpfX2lzX3NvcnRlZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWRfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKyAgICAgIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KQorICAgICAgICBpZiAoX19wcmVkKCpfX25leHQsICpfX2ZpcnN0KSkKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29uLCBhcyB0aGUgaXRlcmF0b3IgcmFuZ2UgaGFzIGJlZW4gdmFsaWRhdGVkLCBjaGVjayBvbgorICAvLyByYW5kb20gYWNjZXNzIHNhZmUgaXRlcmF0b3JzIGlzIGRvbmUgdXNpbmcgdGhlIGJhc2UgaXRlcmF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlLAorCSAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3NvcnRlZF9hdXgoY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2ZpcnN0LAorCQkgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xhc3QsCisJCSAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKKwkJICAgICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgX190YWcpCisgIHsgcmV0dXJuIF9fY2hlY2tfc29ydGVkX2F1eChfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19wcmVkLCBfX3RhZyk7IH0KKworICAvLyBEZXRlcm1pbmUgaWYgYSBzZXF1ZW5jZSBpcyBzb3J0ZWQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWQoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmlyc3QsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2xhc3QpCisgICAgeworICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIDwgb3BlcmF0b3IgZm9yIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZSBpcyBhCisgICAgICAvLyBTdHJpY3RXZWFrT3JkZXJpbmcgYnkgY2hlY2tpbmcgdGhhdCBpdCBpcyBpcnJlZmxleGl2ZS4KKyAgICAgIF9fZ2xpYmN4eF9hc3NlcnQoX19maXJzdCA9PSBfX2xhc3QgfHwgISgqX19maXJzdCA8ICpfX2ZpcnN0KSk7CisKKyAgICAgIHJldHVybiBfX2NoZWNrX3NvcnRlZF9hdXgoX19maXJzdCwgX19sYXN0LAorCQkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWQoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmlyc3QsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2xhc3QsCisgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHByZWRpY2F0ZSBpcyBTdHJpY3RXZWFrT3JkZXJpbmcgYnkgY2hlY2tpbmcgdGhhdCBpdAorICAgICAgLy8gaXMgaXJyZWZsZXhpdmUuCisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KF9fZmlyc3QgPT0gX19sYXN0IHx8ICFfX3ByZWQoKl9fZmlyc3QsICpfX2ZpcnN0KSk7CisKKyAgICAgIHJldHVybiBfX2NoZWNrX3NvcnRlZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisJCQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3NvcnRlZF9zZXRfYXV4KGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2ZpcnN0LAorCQkJICAgY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fbGFzdCwKKwkJCSAgIHN0ZDo6X190cnVlX3R5cGUpCisgICAgeyByZXR1cm4gX19jaGVja19zb3J0ZWQoX19maXJzdCwgX19sYXN0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWRfc2V0X2F1eChjb25zdCBfSW5wdXRJdGVyYXRvciYsCisJCQkgICBjb25zdCBfSW5wdXRJdGVyYXRvciYsCisJCQkgICBzdGQ6Ol9fZmFsc2VfdHlwZSkKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3NvcnRlZF9zZXRfYXV4KGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2ZpcnN0LAorCQkJICAgY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fbGFzdCwKKwkJCSAgIF9QcmVkaWNhdGUgX19wcmVkLCBzdGQ6Ol9fdHJ1ZV90eXBlKQorICAgIHsgcmV0dXJuIF9fY2hlY2tfc29ydGVkKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWRfc2V0X2F1eChjb25zdCBfSW5wdXRJdGVyYXRvciYsCisJCQkgICBjb25zdCBfSW5wdXRJdGVyYXRvciYsIF9QcmVkaWNhdGUsCisJCQkgICBzdGQ6Ol9fZmFsc2VfdHlwZSkKKyAgICB7IHJldHVybiB0cnVlOyB9CisKKyAgLy8gLi4uIHNwZWNpYWwgdmFyaWFudCB1c2VkIGluIHN0ZDo6bWVyZ2UsIHN0ZDo6aW5jbHVkZXMsIHN0ZDo6c2V0XyouCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19zb3J0ZWRfc2V0KGNvbnN0IF9JbnB1dEl0ZXJhdG9yMSYgX19maXJzdCwKKwkJICAgICAgIGNvbnN0IF9JbnB1dEl0ZXJhdG9yMSYgX19sYXN0LAorCQkgICAgICAgY29uc3QgX0lucHV0SXRlcmF0b3IyJikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19hcmVfc2FtZTxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+OjpfX3R5cGUKKwlfU2FtZVR5cGU7CisgICAgICByZXR1cm4gX19jaGVja19zb3J0ZWRfc2V0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9TYW1lVHlwZSgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCisJICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfc29ydGVkX3NldChjb25zdCBfSW5wdXRJdGVyYXRvcjEmIF9fZmlyc3QsCisJCSAgICAgICBjb25zdCBfSW5wdXRJdGVyYXRvcjEmIF9fbGFzdCwKKwkJICAgICAgIGNvbnN0IF9JbnB1dEl0ZXJhdG9yMiYsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcjI+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2FyZV9zYW1lPF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj46Ol9fdHlwZQorCV9TYW1lVHlwZTsKKyAgICAgIHJldHVybiBfX2NoZWNrX3NvcnRlZF9zZXRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfU2FtZVR5cGUoKSk7CisgICB9CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyAyNzAuIEJpbmFyeSBzZWFyY2ggcmVxdWlyZW1lbnRzIG92ZXJseSBzdHJpY3QKKyAgLy8gRGV0ZXJtaW5lIGlmIGEgc2VxdWVuY2UgaXMgcGFydGl0aW9uZWQgdy5yLnQuIHRoaXMgZWxlbWVudC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19wYXJ0aXRpb25lZF9sb3dlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAqX19maXJzdCA8IF9fdmFsdWUpCisJKytfX2ZpcnN0OworICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgICsrX19maXJzdDsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0IDwgX192YWx1ZSkpCisJICAgICsrX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3Q7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fY2hlY2tfcGFydGl0aW9uZWRfdXBwZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIShfX3ZhbHVlIDwgKl9fZmlyc3QpKQorCSsrX19maXJzdDsKKyAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICArK19fZmlyc3Q7CisJICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgX192YWx1ZSA8ICpfX2ZpcnN0KQorCSAgICArK19fZmlyc3Q7CisJfQorICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0OworICAgIH0KKworICAvLyBEZXRlcm1pbmUgaWYgYSBzZXF1ZW5jZSBpcyBwYXJ0aXRpb25lZCB3LnIudC4gdGhpcyBlbGVtZW50LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9QcmVkPgorICAgIGlubGluZSBib29sCisgICAgX19jaGVja19wYXJ0aXRpb25lZF9sb3dlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLAorCQkJICAgICAgX1ByZWQgX19wcmVkKQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiBib29sKF9fcHJlZCgqX19maXJzdCwgX192YWx1ZSkpKQorCSsrX19maXJzdDsKKyAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICArK19fZmlyc3Q7CisJICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIWJvb2woX19wcmVkKCpfX2ZpcnN0LCBfX3ZhbHVlKSkpCisJICAgICsrX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3Q7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1ByZWQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NoZWNrX3BhcnRpdGlvbmVkX3VwcGVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKKwkJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUsCisJCQkgICAgICBfUHJlZCBfX3ByZWQpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFib29sKF9fcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpKQorCSsrX19maXJzdDsKKyAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICArK19fZmlyc3Q7CisJICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgYm9vbChfX3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSkKKwkgICAgKytfX2ZpcnN0OworCX0KKyAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdDsKKyAgICB9CisKKyAgLy8gSGVscGVyIHN0cnVjdCB0byBkZXRlY3QgcmFuZG9tIGFjY2VzcyBzYWZlIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIHN0cnVjdCBfX2lzX3NhZmVfcmFuZG9tX2l0ZXJhdG9yCisgICAgeworICAgICAgZW51bSB7IF9fdmFsdWUgPSAwIH07CisgICAgICB0eXBlZGVmIHN0ZDo6X19mYWxzZV90eXBlIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIHN0cnVjdCBfX2lzX3NhZmVfcmFuZG9tX2l0ZXJhdG9yPF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiA+CisgICAgOiBzdGQ6Ol9fYXJlX3NhbWU8c3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjoKKwkJICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBzdHJ1Y3QgX1NpdGVyX2Jhc2UKKyAgICA6IHN0ZDo6X0l0ZXJfYmFzZTxfSXRlcmF0b3IsIF9faXNfc2FmZV9yYW5kb21faXRlcmF0b3I8X0l0ZXJhdG9yPjo6X192YWx1ZT4KKyAgICB7IH07CisKKyAgLyoqIEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IGJhc2UgaXRlcmF0b3Igb2YgcmFuZG9tIGFjY2VzcyBzYWZlIGl0ZXJhdG9yCisgICAgICBpbiBvcmRlciB0byByZWR1Y2UgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIGRlYnVnIG1vZGUuICBMaW1pdGVkIHRvIHJhbmRvbQorICAgICAgYWNjZXNzIGl0ZXJhdG9yIGJlY2F1c2UgaXQgaXMgdGhlIG9ubHkgY2F0ZWdvcnkgZm9yIHdoaWNoIGl0IGlzIHBvc3NpYmxlCisgICAgICB0byBjaGVjayBmb3IgY29ycmVjdCBpdGVyYXRvcnMgb3JkZXIgaW4gdGhlIF9fdmFsaWRfcmFuZ2UgZnVuY3Rpb24KKyAgICAgIHRoYW5rcyB0byB0aGUgPCBvcGVyYXRvci4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSBfU2l0ZXJfYmFzZTxfSXRlcmF0b3I+OjppdGVyYXRvcl90eXBlCisgICAgX19iYXNlKF9JdGVyYXRvciBfX2l0KQorICAgIHsgcmV0dXJuIF9TaXRlcl9iYXNlPF9JdGVyYXRvcj46Ol9TX2Jhc2UoX19pdCk7IH0KK30gLy8gbmFtZXNwYWNlIF9fZ251X2RlYnVnCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9saXN0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmY2M1YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL2xpc3QKQEAgLTAsMCArMSw3NTcgQEAKKy8vIERlYnVnZ2luZyBsaXN0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9saXN0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19MSVNUCisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX0xJU1QgMQorCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6Omxpc3Qgd2l0aCBzYWZldHkvY2hlY2tpbmcvZGVidWcgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBsaXN0CisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0M6Omxpc3Q8X1RwLCBfQWxsb2NhdG9yPiwKKyAgICAgIHB1YmxpYyBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8bGlzdDxfVHAsIF9BbGxvY2F0b3I+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9DOjpsaXN0PF9UcCwgX0FsbG9jYXRvcj4gX0Jhc2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yICAgICAgIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfRXF1YWxfdG88X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9FcXVhbDsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9Ob3RfZXF1YWxfdG88X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9Ob3RfZXF1YWw7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2l0ZXJhdG9yLCBsaXN0PgorCQkJCQkJICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8X0Jhc2VfY29uc3RfaXRlcmF0b3IsIGxpc3Q+CisJCQkJCQkgICAgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIF9UcAkJCQkgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4yLjIuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQKKyAgICAgIGxpc3QoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX2EpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgZXhwbGljaXQKKyAgICAgIGxpc3Qoc2l6ZV90eXBlIF9fbikKKyAgICAgIDogX0Jhc2UoX19uKSB7IH0KKworICAgICAgbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCisJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX24sIF9fdmFsdWUsIF9fYSkgeyB9CisjZWxzZQorICAgICAgZXhwbGljaXQKKyAgICAgIGxpc3Qoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlID0gX1RwKCksCisJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX24sIF9fdmFsdWUsIF9fYSkgeyB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisJbGlzdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisJOiBfQmFzZShfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsCisJCQkJCQkJCSAgICAgX19sYXN0KSksCisJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSwgX19hKQorICAgICAgICB7IH0KKworICAgICAgbGlzdChjb25zdCBsaXN0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIGxpc3QoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGxpc3QobGlzdCYmIF9feCkgbm9leGNlcHQKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9feCkpCisgICAgICB7IHRoaXMtPl9NX3N3YXAoX194KTsgfQorCisgICAgICBsaXN0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgOiBfQmFzZShfX2wsIF9fYSkgeyB9CisjZW5kaWYKKworICAgICAgfmxpc3QoKSBfR0xJQkNYWF9OT0VYQ0VQVCB7IH0KKworICAgICAgbGlzdCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBsaXN0JiBfX3gpCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBsaXN0JgorICAgICAgb3BlcmF0b3I9KGxpc3QmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwlfX2dsaWJjeHhfY2hlY2tfc2VsZl9tb3ZlX2Fzc2lnbihfX3gpOworCWNsZWFyKCk7CisJc3dhcChfX3gpOworICAgICAgCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgbGlzdCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfQmFzZSY+KCp0aGlzKSA9IF9fbDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19sKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgX0Jhc2U6OmFzc2lnbihfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZmlyc3QpLAorCQkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpKTsKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJfQorCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3QpCisgICAgICB7CisJX0Jhc2U6OmFzc2lnbihfX24sIF9fdCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmdldF9hbGxvY2F0b3I7CisKKyAgICAgIC8vIGl0ZXJhdG9yczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgICAvLyAyMy4yLjIuMiBjYXBhY2l0eToKKyAgICAgIHVzaW5nIF9CYXNlOjplbXB0eTsKKyAgICAgIHVzaW5nIF9CYXNlOjpzaXplOworICAgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6KQorICAgICAgeworCXRoaXMtPl9NX2RldGFjaF9zaW5ndWxhcigpOworCisJLy8gaWYgX19zeiA8IHNpemUoKSwgaW52YWxpZGF0ZSBhbGwgaXRlcmF0b3JzIGluIFtiZWdpbitfX3N6LCBlbmQoKSkKKwlfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbSA9IF9CYXNlOjpiZWdpbigpOworCV9CYXNlX2l0ZXJhdG9yIF9fZW5kID0gX0Jhc2U6OmVuZCgpOworCWZvciAoc2l6ZV90eXBlIF9faSA9IF9fc3o7IF9fdmljdGltICE9IF9fZW5kICYmIF9faSA+IDA7IC0tX19pKQorCSAgKytfX3ZpY3RpbTsKKworCWZvciAoOyBfX3ZpY3RpbSAhPSBfX2VuZDsgKytfX3ZpY3RpbSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfRXF1YWwoX192aWN0aW0pKTsKKwkgIH0KKworCV9fdHJ5CisJICB7CisJICAgIF9CYXNlOjpyZXNpemUoX19zeik7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIHRoaXMtPl9NX3JldmFsaWRhdGVfc2luZ3VsYXIoKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeiwgY29uc3QgX1RwJiBfX2MpCisgICAgICB7CisJdGhpcy0+X01fZGV0YWNoX3Npbmd1bGFyKCk7CisKKwkvLyBpZiBfX3N6IDwgc2l6ZSgpLCBpbnZhbGlkYXRlIGFsbCBpdGVyYXRvcnMgaW4gW2JlZ2luK19fc3osIGVuZCgpKQorCV9CYXNlX2l0ZXJhdG9yIF9fdmljdGltID0gX0Jhc2U6OmJlZ2luKCk7CisJX0Jhc2VfaXRlcmF0b3IgX19lbmQgPSBfQmFzZTo6ZW5kKCk7CisJZm9yIChzaXplX3R5cGUgX19pID0gX19zejsgX192aWN0aW0gIT0gX19lbmQgJiYgX19pID4gMDsgLS1fX2kpCisJICArK19fdmljdGltOworCisJZm9yICg7IF9fdmljdGltICE9IF9fZW5kOyArK19fdmljdGltKQorCSAgeworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3ZpY3RpbSkpOworCSAgfQorCisJX190cnkKKwkgIHsKKwkgICAgX0Jhc2U6OnJlc2l6ZShfX3N6LCBfX2MpOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICB0aGlzLT5fTV9yZXZhbGlkYXRlX3Npbmd1bGFyKCk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeiwgX1RwIF9fYyA9IF9UcCgpKQorICAgICAgeworCXRoaXMtPl9NX2RldGFjaF9zaW5ndWxhcigpOworCisJLy8gaWYgX19zeiA8IHNpemUoKSwgaW52YWxpZGF0ZSBhbGwgaXRlcmF0b3JzIGluIFtiZWdpbitfX3N6LCBlbmQoKSkKKwlfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbSA9IF9CYXNlOjpiZWdpbigpOworCV9CYXNlX2l0ZXJhdG9yIF9fZW5kID0gX0Jhc2U6OmVuZCgpOworCWZvciAoc2l6ZV90eXBlIF9faSA9IF9fc3o7IF9fdmljdGltICE9IF9fZW5kICYmIF9faSA+IDA7IC0tX19pKQorCSAgKytfX3ZpY3RpbTsKKworCWZvciAoOyBfX3ZpY3RpbSAhPSBfX2VuZDsgKytfX3ZpY3RpbSkKKwkgIHsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfRXF1YWwoX192aWN0aW0pKTsKKwkgIH0KKworCV9fdHJ5CisJICB7CisJICAgIF9CYXNlOjpyZXNpemUoX19zeiwgX19jKTsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgdGhpcy0+X01fcmV2YWxpZGF0ZV9zaW5ndWxhcigpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvLyBlbGVtZW50IGFjY2VzczoKKyAgICAgIHJlZmVyZW5jZQorICAgICAgZnJvbnQoKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXJldHVybiBfQmFzZTo6ZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisJcmV0dXJuIF9CYXNlOjpmcm9udCgpOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXJldHVybiBfQmFzZTo6YmFjaygpOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXJldHVybiBfQmFzZTo6YmFjaygpOworICAgICAgfQorCisgICAgICAvLyAyMy4yLjIuMyBtb2RpZmllcnM6CisgICAgICB1c2luZyBfQmFzZTo6cHVzaF9mcm9udDsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHVzaW5nIF9CYXNlOjplbXBsYWNlX2Zyb250OworI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9mcm9udCgpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfRXF1YWwoX0Jhc2U6OmJlZ2luKCkpKTsKKwlfQmFzZTo6cG9wX2Zyb250KCk7CisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpwdXNoX2JhY2s7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB1c2luZyBfQmFzZTo6ZW1wbGFjZV9iYWNrOworI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9iYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbCgtLV9CYXNlOjplbmQoKSkpOworCV9CYXNlOjpwb3BfYmFjaygpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGVtcGxhY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwkgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW1wbGFjZShfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJCQkJc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwgdGhpcyk7CisJfQorI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX194KSwgdGhpcyk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9UcCYmIF9feCkKKyAgICAgIHsgcmV0dXJuIGVtcGxhY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wKTsKKwlfQmFzZTo6aW5zZXJ0KF9fcC5iYXNlKCksIF9fbCk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX19uLCBfX3gpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKKwkgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X3JhbmdlKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZmlyc3QpLAorCQkJCQkgICBfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCkpOworCX0KKworICAgIHByaXZhdGU6CisgICAgICBfQmFzZV9pdGVyYXRvcgorICAgICAgX01fZXJhc2UoX0Jhc2VfaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3Bvc2l0aW9uKSk7CisJcmV0dXJuIF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uKTsKKyAgICAgIH0KKyAgICBwdWJsaWM6CisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19wb3NpdGlvbik7CisJcmV0dXJuIGl0ZXJhdG9yKF9NX2VyYXNlKF9fcG9zaXRpb24uYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fcG9zaXRpb24sIF9fbGFzdCk7CisJZm9yIChfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fcG9zaXRpb24uYmFzZSgpOworCSAgICAgX192aWN0aW0gIT0gX19sYXN0LmJhc2UoKTsgKytfX3ZpY3RpbSkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fdmljdGltICE9IF9CYXNlOjplbmQoKSwKKwkJCSAgICAgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZSkKKwkJCQkgIC5fTV9pdGVyYXRvcihfX3Bvc2l0aW9uLCAicG9zaXRpb24iKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fbGFzdCwgImxhc3QiKSk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fdmljdGltKSk7CisJICB9CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSwgX19sYXN0LmJhc2UoKSksIHRoaXMpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGxpc3QmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6c3dhcChfX3gpOworCXRoaXMtPl9NX3N3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCV9CYXNlOjpjbGVhcigpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIC8vIDIzLjIuMi40IGxpc3Qgb3BlcmF0aW9uczoKKyAgICAgIHZvaWQKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYmIF9feCkKKyNlbHNlCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQorI2VuZGlmCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKCZfX3ggIT0gdGhpcywKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3NlbGZfc3BsaWNlKQorCQkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpKTsKKwl0aGlzLT5fTV90cmFuc2Zlcl9mcm9tX2lmKF9feCwgX05vdF9lcXVhbChfX3guX01fYmFzZSgpLmVuZCgpKSk7CisJX0Jhc2U6OnNwbGljZShfX3Bvc2l0aW9uLmJhc2UoKSwgX0dMSUJDWFhfTU9WRShfX3guX01fYmFzZSgpKSk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQorICAgICAgeyBzcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiYgX194LCBpdGVyYXRvciBfX2kpCisjZWxzZQorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorI2VuZGlmCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKworCS8vIFdlIHVzZWQgdG8gcGVyZm9ybSB0aGUgc3BsaWNlX2FsbG9jIGNoZWNrOiAgbm90IGFueW1vcmUsIHJlZHVuZGFudAorCS8vIGFmdGVyIGltcGxlbWVudGluZyB0aGUgcmVsZXZhbnQgYml0cyBvZiBOMTU5OS4KKworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2kuX01fZGVyZWZlcmVuY2VhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19zcGxpY2VfYmFkKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9faSwgIl9faSIpKTsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19pLl9NX2F0dGFjaGVkX3RvKCZfX3gpLAorCQkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfc3BsaWNlX290aGVyKQorCQkJICAgICAuX01faXRlcmF0b3IoX19pLCAiX19pIikuX01fc2VxdWVuY2UoX194LCAiX194IikpOworCisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDI1MC4gc3BsaWNpbmcgaW52YWxpZGF0ZXMgaXRlcmF0b3JzCisJdGhpcy0+X01fdHJhbnNmZXJfZnJvbV9pZihfX3gsIF9FcXVhbChfX2kuYmFzZSgpKSk7CisJX0Jhc2U6OnNwbGljZShfX3Bvc2l0aW9uLmJhc2UoKSwgX0dMSUJDWFhfTU9WRShfX3guX01fYmFzZSgpKSwKKwkJICAgICAgX19pLmJhc2UoKSk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194LCBpdGVyYXRvciBfX2kpCisgICAgICB7IHNwbGljZShfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSwgX19pKTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYmIF9feCwgaXRlcmF0b3IgX19maXJzdCwKKwkgICAgIGl0ZXJhdG9yIF9fbGFzdCkKKyNlbHNlCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194LCBpdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgaXRlcmF0b3IgX19sYXN0KQorI2VuZGlmCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwlfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19maXJzdC5fTV9hdHRhY2hlZF90bygmX194KSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3NwbGljZV9vdGhlcikKKwkJCSAgICAgIC5fTV9zZXF1ZW5jZShfX3gsICJ4IikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcihfX2ZpcnN0LCAiZmlyc3QiKSk7CisKKwkvLyBXZSB1c2VkIHRvIHBlcmZvcm0gdGhlIHNwbGljZV9hbGxvYyBjaGVjazogIG5vdCBhbnltb3JlLCByZWR1bmRhbnQKKwkvLyBhZnRlciBpbXBsZW1lbnRpbmcgdGhlIHJlbGV2YW50IGJpdHMgb2YgTjE1OTkuCisKKwlmb3IgKF9CYXNlX2l0ZXJhdG9yIF9fdG1wID0gX19maXJzdC5iYXNlKCk7CisJICAgICBfX3RtcCAhPSBfX2xhc3QuYmFzZSgpOyArK19fdG1wKQorCSAgeworCSAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX190bXAgIT0gX0Jhc2U6OmVuZCgpLAorCQkJCSAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdmFsaWRfcmFuZ2UpCisJCQkJICAuX01faXRlcmF0b3IoX19maXJzdCwgImZpcnN0IikKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2xhc3QsICJsYXN0IikpOworCSAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoJl9feCAhPSB0aGlzIHx8IF9fdG1wICE9IF9fcG9zaXRpb24sCisJCQkJX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfc3BsaWNlX292ZXJsYXApCisJCQkJICAuX01faXRlcmF0b3IoX190bXAsICJwb3NpdGlvbiIpCisJCQkJICAuX01faXRlcmF0b3IoX19maXJzdCwgImZpcnN0IikKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2xhc3QsICJsYXN0IikpOworCSAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgIC8vIDI1MC4gc3BsaWNpbmcgaW52YWxpZGF0ZXMgaXRlcmF0b3JzCisJICAgIHRoaXMtPl9NX3RyYW5zZmVyX2Zyb21faWYoX194LCBfRXF1YWwoX190bXApKTsKKwkgIH0KKworCV9CYXNlOjpzcGxpY2UoX19wb3NpdGlvbi5iYXNlKCksIF9HTElCQ1hYX01PVkUoX194Ll9NX2Jhc2UoKSksCisJCSAgICAgIF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgc3BsaWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICAgIHsKKwlmb3IgKF9CYXNlX2l0ZXJhdG9yIF9feCA9IF9CYXNlOjpiZWdpbigpOyBfX3ggIT0gX0Jhc2U6OmVuZCgpOyApCisJICB7CisJICAgIGlmICgqX194ID09IF9fdmFsdWUpCisJICAgICAgX194ID0gX01fZXJhc2UoX194KTsKKwkgICAgZWxzZQorCSAgICAgICsrX194OworCSAgfQorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfUHJlZGljYXRlPgorICAgICAgICB2b2lkCisgICAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKKyAgICAgICAgeworCSAgZm9yIChfQmFzZV9pdGVyYXRvciBfX3ggPSBfQmFzZTo6YmVnaW4oKTsgX194ICE9IF9CYXNlOjplbmQoKTsgKQorCSAgICB7CisJICAgICAgaWYgKF9fcHJlZCgqX194KSkKKwkJX194ID0gX01fZXJhc2UoX194KTsKKwkgICAgICBlbHNlCisJCSsrX194OworCSAgICB9CisJfQorCisgICAgICB2b2lkCisgICAgICB1bmlxdWUoKQorICAgICAgeworCV9CYXNlX2l0ZXJhdG9yIF9fZmlyc3QgPSBfQmFzZTo6YmVnaW4oKTsKKwlfQmFzZV9pdGVyYXRvciBfX2xhc3QgPSBfQmFzZTo6ZW5kKCk7CisJaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgcmV0dXJuOworCV9CYXNlX2l0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7ICsrX19uZXh0OworCXdoaWxlIChfX25leHQgIT0gX19sYXN0KQorCSAgeworCSAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKKwkgICAgICBfX25leHQgPSBfTV9lcmFzZShfX25leHQpOworCSAgICBlbHNlCisJICAgICAgX19maXJzdCA9IF9fbmV4dCsrOworCSAgfQorICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgorICAgICAgICB2b2lkCisgICAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisgICAgICAgIHsKKwkgIF9CYXNlX2l0ZXJhdG9yIF9fZmlyc3QgPSBfQmFzZTo6YmVnaW4oKTsKKwkgIF9CYXNlX2l0ZXJhdG9yIF9fbGFzdCA9IF9CYXNlOjplbmQoKTsKKwkgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKKwkgICAgcmV0dXJuOworCSAgX0Jhc2VfaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsgKytfX25leHQ7CisJICB3aGlsZSAoX19uZXh0ICE9IF9fbGFzdCkKKwkgICAgeworCSAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKKwkJX19uZXh0ID0gX01fZXJhc2UoX19uZXh0KTsKKwkgICAgICBlbHNlCisJCV9fZmlyc3QgPSBfX25leHQrKzsKKwkgICAgfQorCX0KKworICAgICAgdm9pZAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIG1lcmdlKGxpc3QmJiBfX3gpCisjZWxzZQorICAgICAgbWVyZ2UobGlzdCYgX194KQorI2VuZGlmCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDMwMC4gbGlzdDo6bWVyZ2UoKSBzcGVjaWZpY2F0aW9uIGluY29tcGxldGUKKwlpZiAodGhpcyAhPSAmX194KQorCSAgeworCSAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkKF9CYXNlOjpiZWdpbigpLCBfQmFzZTo6ZW5kKCkpOworCSAgICBfX2dsaWJjeHhfY2hlY2tfc29ydGVkKF9feC5iZWdpbigpLmJhc2UoKSwgX194LmVuZCgpLmJhc2UoKSk7CisJICAgIHRoaXMtPl9NX3RyYW5zZmVyX2Zyb21faWYoX194LCBfTm90X2VxdWFsKF9feC5fTV9iYXNlKCkuZW5kKCkpKTsKKwkgICAgX0Jhc2U6Om1lcmdlKF9HTElCQ1hYX01PVkUoX194Ll9NX2Jhc2UoKSkpOworCSAgfQorICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgbWVyZ2UobGlzdCYgX194KQorICAgICAgeyBtZXJnZShzdGQ6Om1vdmUoX194KSk7IH0KKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ29tcGFyZT4KKyAgICAgICAgdm9pZAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgICAgbWVyZ2UobGlzdCYmIF9feCwgX0NvbXBhcmUgX19jb21wKQorI2Vsc2UKKyAgICAgICAgbWVyZ2UobGlzdCYgX194LCBfQ29tcGFyZSBfX2NvbXApCisjZW5kaWYKKyAgICAgICAgeworCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gMzAwLiBsaXN0OjptZXJnZSgpIHNwZWNpZmljYXRpb24gaW5jb21wbGV0ZQorCSAgaWYgKHRoaXMgIT0gJl9feCkKKwkgICAgeworCSAgICAgIF9fZ2xpYmN4eF9jaGVja19zb3J0ZWRfcHJlZChfQmFzZTo6YmVnaW4oKSwgX0Jhc2U6OmVuZCgpLAorCQkJCQkgIF9fY29tcCk7CisJICAgICAgX19nbGliY3h4X2NoZWNrX3NvcnRlZF9wcmVkKF9feC5iZWdpbigpLmJhc2UoKSwgX194LmVuZCgpLmJhc2UoKSwKKwkJCQkJICBfX2NvbXApOworCSAgICAgIHRoaXMtPl9NX3RyYW5zZmVyX2Zyb21faWYoX194LCBfTm90X2VxdWFsKF9feC5fTV9iYXNlKCkuZW5kKCkpKTsKKwkgICAgICBfQmFzZTo6bWVyZ2UoX0dMSUJDWFhfTU9WRShfX3guX01fYmFzZSgpKSwgX19jb21wKTsKKwkgICAgfQorCX0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlPgorICAgICAgICB2b2lkCisgICAgICAgIG1lcmdlKGxpc3QmIF9feCwgX0NvbXBhcmUgX19jb21wKQorICAgICAgICB7IG1lcmdlKHN0ZDo6bW92ZShfX3gpLCBfX2NvbXApOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc29ydCgpIHsgX0Jhc2U6OnNvcnQoKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgICB2b2lkCisgICAgICAgIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX3ByZWQpIHsgX0Jhc2U6OnNvcnQoX19wcmVkKTsgfQorCisgICAgICB1c2luZyBfQmFzZTo6cmV2ZXJzZTsKKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgX0dMSUJDWFhfTk9FWENFUFQgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2FsbCgpCisgICAgICB7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfTm90X2VxdWFsKF9CYXNlOjplbmQoKSkpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9tYWNyb3MuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFiY2FmMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvbWFjcm9zLmgKQEAgLTAsMCArMSwzNTMgQEAKKy8vIERlYnVnZ2luZyBzdXBwb3J0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9tYWNyb3MuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfTUFDUk9TX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfTUFDUk9TX0ggMQorCisvKioKKyAqIE1hY3JvcyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0byB2ZXJpZnkgY2VydGFpbgorICogcHJvcGVydGllcy4gVGhlc2UgbWFjcm9zIG1heSBvbmx5IGJlIHVzZWQgZGlyZWN0bHkgYnkgdGhlIGRlYnVnCisgKiB3cmFwcGVycy4gTm90ZSB0aGF0IHRoZXNlIGFyZSBtYWNyb3MgKGluc3RlYWQgb2YgdGhlIG1vcmUgb2J2aW91c2x5CisgKiBAYSBjb3JyZWN0IGNob2ljZSBvZiBtYWtpbmcgdGhlbSBmdW5jdGlvbnMpIGJlY2F1c2Ugd2UgbmVlZCBsaW5lIGFuZAorICogZmlsZSBpbmZvcm1hdGlvbiBhdCB0aGUgY2FsbCBzaXRlLCB0byBtaW5pbWl6ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbgorICogdGhlIHVzZXIgZXJyb3IgYW5kIHdoZXJlIHRoZSBlcnJvciBpcyByZXBvcnRlZC4KKyAqCisgKi8KKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfVkVSSUZZX0FUKF9Db25kaXRpb24sX0Vycm9yTWVzc2FnZSxfRmlsZSxfTGluZSkJXAorICBkbwkJCQkJCQkJCVwKKyAgewkJCQkJCQkJCVwKKyAgICBpZiAoISAoX0NvbmRpdGlvbikpCQkJCQkJCVwKKyAgICAgIF9fZ251X2RlYnVnOjpfRXJyb3JfZm9ybWF0dGVyOjpfTV9hdChfRmlsZSwgX0xpbmUpCQlcCisJICAuX0Vycm9yTWVzc2FnZS5fTV9lcnJvcigpOwkJCQkJXAorICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX0NvbmRpdGlvbixfRXJyb3JNZXNzYWdlKQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfVkVSSUZZX0FUKF9Db25kaXRpb24sX0Vycm9yTWVzc2FnZSxfX0ZJTEVfXyxfX0xJTkVfXykKKworLy8gVmVyaWZ5IHRoYXQgW19GaXJzdCwgX0xhc3QpIGZvcm1zIGEgdmFsaWQgaXRlcmF0b3IgcmFuZ2UuCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fZ251X2RlYnVnOjpfX3ZhbGlkX3JhbmdlKF9GaXJzdCwgX0xhc3QpLAlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3ZhbGlkX3JhbmdlKQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0xhc3QsICNfTGFzdCkpCisKKy8vIFZlcmlmeSB0aGF0IFtfRmlyc3QsIF9MYXN0KSBmb3JtcyBhIG5vbi1lbXB0eSBpdGVyYXRvciByYW5nZS4KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX25vbl9lbXB0eV9yYW5nZShfRmlyc3QsX0xhc3QpCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9GaXJzdCAhPSBfTGFzdCwJCQkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfbm9uX2VtcHR5X3JhbmdlKQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0xhc3QsICNfTGFzdCkpCisKKy8qKiBWZXJpZnkgdGhhdCB3ZSBjYW4gaW5zZXJ0IGludG8gKnRoaXMgd2l0aCB0aGUgaXRlcmF0b3IgX1Bvc2l0aW9uLgorICogIEluc2VydGlvbiBpbnRvIGEgY29udGFpbmVyIGF0IGEgc3BlY2lmaWMgcG9zaXRpb24gcmVxdWlyZXMgdGhhdAorICogIHRoZSBpdGVyYXRvciBiZSBub25zaW5ndWxhciwgZWl0aGVyIGRlcmVmZXJlbmNlYWJsZSBvciBwYXN0LXRoZS1lbmQsCisgKiAgYW5kIHRoYXQgaXQgcmVmZXJlbmNlIHRoZSBzZXF1ZW5jZSB3ZSBhcmUgaW5zZXJ0aW5nIGludG8uIE5vdGUgdGhhdAorICogIHRoaXMgbWFjcm8gaXMgb25seSB2YWxpZCB3aGVuIHRoZSBjb250YWluZXIgaXMgYV9TYWZlX3NlcXVlbmNlIGFuZAorICogIHRoZSBpdGVyYXRvciBpcyBhIF9TYWZlX2l0ZXJhdG9yLgorKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2luc2VydChfUG9zaXRpb24pCQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWSghX1Bvc2l0aW9uLl9NX3Npbmd1bGFyKCksCQkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfaW5zZXJ0X3Npbmd1bGFyKSBcCisJCSAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9Qb3NpdGlvbiwgI19Qb3NpdGlvbikpOwkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9Qb3NpdGlvbi5fTV9hdHRhY2hlZF90byh0aGlzKSwJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2luc2VydF9kaWZmZXJlbnQpIFwKKwkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX1Bvc2l0aW9uLCAjX1Bvc2l0aW9uKSkKKworLyoqIFZlcmlmeSB0aGF0IHdlIGNhbiBpbnNlcnQgaW50byAqdGhpcyBhZnRlciB0aGUgaXRlcmF0b3IgX1Bvc2l0aW9uLgorICogIEluc2VydGlvbiBpbnRvIGEgY29udGFpbmVyIGFmdGVyIGEgc3BlY2lmaWMgcG9zaXRpb24gcmVxdWlyZXMgdGhhdAorICogIHRoZSBpdGVyYXRvciBiZSBub25zaW5ndWxhciwgZWl0aGVyIGRlcmVmZXJlbmNlYWJsZSBvciBiZWZvcmUtYmVnaW4sCisgKiAgYW5kIHRoYXQgaXQgcmVmZXJlbmNlIHRoZSBzZXF1ZW5jZSB3ZSBhcmUgaW5zZXJ0aW5nIGludG8uIE5vdGUgdGhhdAorICogIHRoaXMgbWFjcm8gaXMgb25seSB2YWxpZCB3aGVuIHRoZSBjb250YWluZXIgaXMgYV9TYWZlX3NlcXVlbmNlIGFuZAorICogIHRoZSBpdGVyYXRvciBpcyBhIF9TYWZlX2l0ZXJhdG9yLgorKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2luc2VydF9hZnRlcihfUG9zaXRpb24pCQkJCVwKK19fZ2xpYmN4eF9jaGVja19pbnNlcnQoX1Bvc2l0aW9uKTsJCQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWSghX1Bvc2l0aW9uLl9NX2lzX2VuZCgpLAkJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2luc2VydF9hZnRlcl9lbmQpCVwKKwkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX1Bvc2l0aW9uLCAjX1Bvc2l0aW9uKSkKKworLyoqIFZlcmlmeSB0aGF0IHdlIGNhbiBpbnNlcnQgdGhlIHZhbHVlcyBpbiB0aGUgaXRlcmF0b3IgcmFuZ2UKKyAqICBbX0ZpcnN0LCBfTGFzdCkgaW50byAqdGhpcyB3aXRoIHRoZSBpdGVyYXRvciBfUG9zaXRpb24uICBJbnNlcnRpb24KKyAqICBpbnRvIGEgY29udGFpbmVyIGF0IGEgc3BlY2lmaWMgcG9zaXRpb24gcmVxdWlyZXMgdGhhdCB0aGUgaXRlcmF0b3IKKyAqICBiZSBub25zaW5ndWxhciAoaS5lLiwgZWl0aGVyIGRlcmVmZXJlbmNlYWJsZSBvciBwYXN0LXRoZS1lbmQpLAorICogIHRoYXQgaXQgcmVmZXJlbmNlIHRoZSBzZXF1ZW5jZSB3ZSBhcmUgaW5zZXJ0aW5nIGludG8sIGFuZCB0aGF0IHRoZQorICogIGl0ZXJhdG9yIHJhbmdlIFtfRmlyc3QsIExhc3QpIGlzIGEgdmFsaWQgKHBvc3NpYmx5IGVtcHR5KQorICogIHJhbmdlLiBOb3RlIHRoYXQgdGhpcyBtYWNybyBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBhCisgKiAgX1NhZmVfc2VxdWVuY2UgYW5kIHRoZSBpdGVyYXRvciBpcyBhIF9TYWZlX2l0ZXJhdG9yLgorICoKKyAqICBAdG9kbyBXZSB3b3VsZCBsaWtlIHRvIGJlIGFibGUgdG8gY2hlY2sgZm9yIG5vbmludGVyZmVyZW5jZSBvZgorICogIF9Qb3NpdGlvbiBhbmQgdGhlIHJhbmdlIFtfRmlyc3QsIF9MYXN0KSwgYnV0IHRoYXQgY2FuJ3QgKGluCisgKiAgZ2VuZXJhbCkgYmUgZG9uZS4KKyovCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19pbnNlcnRfcmFuZ2UoX1Bvc2l0aW9uLF9GaXJzdCxfTGFzdCkJCVwKK19fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpOwkJCQlcCitfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9Qb3NpdGlvbikKKworLyoqIFZlcmlmeSB0aGF0IHdlIGNhbiBpbnNlcnQgdGhlIHZhbHVlcyBpbiB0aGUgaXRlcmF0b3IgcmFuZ2UKKyAqICBbX0ZpcnN0LCBfTGFzdCkgaW50byAqdGhpcyBhZnRlciB0aGUgaXRlcmF0b3IgX1Bvc2l0aW9uLiAgSW5zZXJ0aW9uCisgKiAgaW50byBhIGNvbnRhaW5lciBhZnRlciBhIHNwZWNpZmljIHBvc2l0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGl0ZXJhdG9yCisgKiAgYmUgbm9uc2luZ3VsYXIgKGkuZS4sIGVpdGhlciBkZXJlZmVyZW5jZWFibGUgb3IgcGFzdC10aGUtZW5kKSwKKyAqICB0aGF0IGl0IHJlZmVyZW5jZSB0aGUgc2VxdWVuY2Ugd2UgYXJlIGluc2VydGluZyBpbnRvLCBhbmQgdGhhdCB0aGUKKyAqICBpdGVyYXRvciByYW5nZSBbX0ZpcnN0LCBMYXN0KSBpcyBhIHZhbGlkIChwb3NzaWJseSBlbXB0eSkKKyAqICByYW5nZS4gTm90ZSB0aGF0IHRoaXMgbWFjcm8gaXMgb25seSB2YWxpZCB3aGVuIHRoZSBjb250YWluZXIgaXMgYQorICogIF9TYWZlX3NlcXVlbmNlIGFuZCB0aGUgaXRlcmF0b3IgaXMgYSBfU2FmZV9pdGVyYXRvci4KKyAqCisgKiAgQHRvZG8gV2Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIGNoZWNrIGZvciBub25pbnRlcmZlcmVuY2Ugb2YKKyAqICBfUG9zaXRpb24gYW5kIHRoZSByYW5nZSBbX0ZpcnN0LCBfTGFzdCksIGJ1dCB0aGF0IGNhbid0IChpbgorICogIGdlbmVyYWwpIGJlIGRvbmUuCisqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X3JhbmdlX2FmdGVyKF9Qb3NpdGlvbixfRmlyc3QsX0xhc3QpCVwKK19fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpOwkJCQlcCitfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X2FmdGVyKF9Qb3NpdGlvbikKKworLyoqIFZlcmlmeSB0aGF0IHdlIGNhbiBlcmFzZSB0aGUgZWxlbWVudCByZWZlcmVuY2VkIGJ5IHRoZSBpdGVyYXRvcgorICogX1Bvc2l0aW9uLiBXZSBjYW4gZXJhc2UgdGhlIGVsZW1lbnQgaWYgdGhlIF9Qb3NpdGlvbiBpdGVyYXRvciBpcworICogZGVyZWZlcmVuY2VhYmxlIGFuZCByZWZlcmVuY2VzIHRoaXMgc2VxdWVuY2UuCisqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX1Bvc2l0aW9uKQkJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX1Bvc2l0aW9uLl9NX2RlcmVmZXJlbmNlYWJsZSgpLAkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfZXJhc2VfYmFkKQkgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfUG9zaXRpb24sICNfUG9zaXRpb24pKTsJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWShfUG9zaXRpb24uX01fYXR0YWNoZWRfdG8odGhpcyksCQkJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19lcmFzZV9kaWZmZXJlbnQpICAgIFwKKwkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX1Bvc2l0aW9uLCAjX1Bvc2l0aW9uKSkKKworLyoqIFZlcmlmeSB0aGF0IHdlIGNhbiBlcmFzZSB0aGUgZWxlbWVudCBhZnRlciB0aGUgaXRlcmF0b3IKKyAqIF9Qb3NpdGlvbi4gV2UgY2FuIGVyYXNlIHRoZSBlbGVtZW50IGlmIHRoZSBfUG9zaXRpb24gaXRlcmF0b3IgaXMKKyAqIGJlZm9yZSBhIGRlcmVmZXJlbmNlYWJsZSBvbmUgYW5kIHJlZmVyZW5jZXMgdGhpcyBzZXF1ZW5jZS4KKyovCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19lcmFzZV9hZnRlcihfUG9zaXRpb24pCQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWShfUG9zaXRpb24uX01fYmVmb3JlX2RlcmVmZXJlbmNlYWJsZSgpLAkJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19lcmFzZV9hZnRlcl9iYWQpCVwKKwkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX1Bvc2l0aW9uLCAjX1Bvc2l0aW9uKSk7CQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX1Bvc2l0aW9uLl9NX2F0dGFjaGVkX3RvKHRoaXMpLAkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfZXJhc2VfZGlmZmVyZW50KQlcCisJCSAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9Qb3NpdGlvbiwgI19Qb3NpdGlvbikpCisKKy8qKiBWZXJpZnkgdGhhdCB3ZSBjYW4gZXJhc2UgdGhlIGVsZW1lbnRzIGluIHRoZSBpdGVyYXRvciByYW5nZQorICogIFtfRmlyc3QsIF9MYXN0KS4gV2UgY2FuIGVyYXNlIHRoZSBlbGVtZW50cyBpZiBbX0ZpcnN0LCBfTGFzdCkgaXMgYQorICogIHZhbGlkIGl0ZXJhdG9yIHJhbmdlIHdpdGhpbiB0aGlzIHNlcXVlbmNlLgorKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9GaXJzdCxfTGFzdCkJCQlcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9GaXJzdC5fTV9hdHRhY2hlZF90byh0aGlzKSwJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2VyYXNlX2RpZmZlcmVudCkgICAgXAorICAgICAgICAgICAgICAgICAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9GaXJzdCwgI19GaXJzdCkJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfTGFzdCwgI19MYXN0KSkKKworLyoqIFZlcmlmeSB0aGF0IHdlIGNhbiBlcmFzZSB0aGUgZWxlbWVudHMgaW4gdGhlIGl0ZXJhdG9yIHJhbmdlCisgKiAgKF9GaXJzdCwgX0xhc3QpLiBXZSBjYW4gZXJhc2UgdGhlIGVsZW1lbnRzIGlmIChfRmlyc3QsIF9MYXN0KSBpcyBhCisgKiAgdmFsaWQgaXRlcmF0b3IgcmFuZ2Ugd2l0aGluIHRoaXMgc2VxdWVuY2UuCisqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2VfYWZ0ZXIoX0ZpcnN0LF9MYXN0KQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWShfRmlyc3QuX01fY2FuX2NvbXBhcmUoX0xhc3QpLAkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfZXJhc2VfZGlmZmVyZW50KQlcCisJCSAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9GaXJzdCwgI19GaXJzdCkJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfTGFzdCwgI19MYXN0KSk7CQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9GaXJzdC5fTV9hdHRhY2hlZF90byh0aGlzKSwJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2VyYXNlX2RpZmZlcmVudCkJXAorCQkgICAgICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpKTsJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX0ZpcnN0ICE9IF9MYXN0LAkJCQkJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZTIpCVwKKwkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpKTsJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX0ZpcnN0Ll9NX2luY3JlbWVudGFibGUoKSwJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3ZhbGlkX3JhbmdlMikJXAorCQkgICAgICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0xhc3QsICNfTGFzdCkpOwkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWSghX0xhc3QuX01faXNfYmVmb3JlX2JlZ2luKCksCQkJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZTIpCVwKKwkJICAgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpKQkJCVwKKworLy8gVmVyaWZ5IHRoYXQgdGhlIHN1YnNjcmlwdCBfTiBpcyBsZXNzIHRoYW4gdGhlIGNvbnRhaW5lcidzIHNpemUuCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zdWJzY3JpcHQoX04pCQkJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX04gPCB0aGlzLT5zaXplKCksCQkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfc3Vic2NyaXB0X29vYikJXAorICAgICAgICAgICAgICAgICAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQkJCVwKKwkJICAgICAgLl9NX2ludGVnZXIoX04sICNfTikJCQkJXAorCQkgICAgICAuX01faW50ZWdlcih0aGlzLT5zaXplKCksICJzaXplIikpCisKKy8vIFZlcmlmeSB0aGF0IHRoZSBidWNrZXQgX04gaXMgbGVzcyB0aGFuIHRoZSBjb250YWluZXIncyBidWNrZXRzIGNvdW50LgorI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfYnVja2V0X2luZGV4KF9OKQkJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX04gPCB0aGlzLT5idWNrZXRfY291bnQoKSwJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2J1Y2tldF9pbmRleF9vb2IpCVwKKyAgICAgICAgICAgICAgICAgICAgICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikJCQlcCisJCSAgICAgIC5fTV9pbnRlZ2VyKF9OLCAjX04pCQkJCVwKKwkJICAgICAgLl9NX2ludGVnZXIodGhpcy0+YnVja2V0X2NvdW50KCksICJzaXplIikpCisKKy8vIFZlcmlmeSB0aGF0IHRoZSBjb250YWluZXIgaXMgbm9uZW1wdHkKKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCkJCQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWSghIHRoaXMtPmVtcHR5KCksCQkJCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2VtcHR5KQkgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikpCisKKy8vIFZlcmlmeSB0aGF0IHRoZSBpdGVyYXRvciByYW5nZSBbX0ZpcnN0LCBfTGFzdCkgaXMgc29ydGVkCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zb3J0ZWQoX0ZpcnN0LF9MYXN0KQkJCQlcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fZ251X2RlYnVnOjpfX2NoZWNrX3NvcnRlZChfRmlyc3QsIF9MYXN0KSwJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ191bnNvcnRlZCkJICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgLl9NX2l0ZXJhdG9yKF9GaXJzdCwgI19GaXJzdCkJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfTGFzdCwgI19MYXN0KSkKKworLyoqIFZlcmlmeSB0aGF0IHRoZSBpdGVyYXRvciByYW5nZSBbX0ZpcnN0LCBfTGFzdCkgaXMgc29ydGVkIGJ5IHRoZQorICAgIHByZWRpY2F0ZSBfUHJlZC4gKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX3NvcnRlZF9wcmVkKF9GaXJzdCxfTGFzdCxfUHJlZCkJCQlcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fZ251X2RlYnVnOjpfX2NoZWNrX3NvcnRlZChfRmlyc3QsIF9MYXN0LCBfUHJlZCksIFwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdW5zb3J0ZWRfcHJlZCkgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgLl9NX2l0ZXJhdG9yKF9GaXJzdCwgI19GaXJzdCkJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfTGFzdCwgI19MYXN0KQkJCVwKKwkJICAgICAgLl9NX3N0cmluZygjX1ByZWQpKQorCisvLyBTcGVjaWFsIHZhcmlhbnQgZm9yIHN0ZDo6bWVyZ2UsIHN0ZDo6aW5jbHVkZXMsIHN0ZDo6c2V0XyoKKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX3NvcnRlZF9zZXQoX0ZpcnN0MSxfTGFzdDEsX0ZpcnN0MikJCVwKK19fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QxLF9MYXN0MSk7CQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19nbnVfZGVidWc6Ol9fY2hlY2tfc29ydGVkX3NldChfRmlyc3QxLCBfTGFzdDEsIF9GaXJzdDIpLAkJXAorICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ191bnNvcnRlZCkJCQkJXAorICAuX01faXRlcmF0b3IoX0ZpcnN0MSwgI19GaXJzdDEpCQkJCQlcCisgIC5fTV9pdGVyYXRvcihfTGFzdDEsICNfTGFzdDEpKQorCisvLyBMaWtld2lzZSB3aXRoIGEgX1ByZWQuCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zb3J0ZWRfc2V0X3ByZWQoX0ZpcnN0MSxfTGFzdDEsX0ZpcnN0MixfUHJlZCkJXAorX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9GaXJzdDEsX0xhc3QxKTsgICAgICAgIAkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWSgJCQkJCQkJXAorICBfX2dudV9kZWJ1Zzo6X19jaGVja19zb3J0ZWRfc2V0KF9GaXJzdDEsIF9MYXN0MSwgX0ZpcnN0MiwgX1ByZWQpLAlcCisgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3Vuc29ydGVkX3ByZWQpCQkJCVwKKyAgLl9NX2l0ZXJhdG9yKF9GaXJzdDEsICNfRmlyc3QxKQkJCQkJXAorICAuX01faXRlcmF0b3IoX0xhc3QxLCAjX0xhc3QxKQkJCQkJCVwKKyAgLl9NX3N0cmluZygjX1ByZWQpKQorCisvKiogVmVyaWZ5IHRoYXQgdGhlIGl0ZXJhdG9yIHJhbmdlIFtfRmlyc3QsIF9MYXN0KSBpcyBwYXJ0aXRpb25lZAorICAgIHcuci50LiB0aGUgdmFsdWUgX1ZhbHVlLiAqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfcGFydGl0aW9uZWRfbG93ZXIoX0ZpcnN0LF9MYXN0LF9WYWx1ZSkJCVwKK19fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfRmlyc3QsX0xhc3QpOwkJCQlcCitfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19nbnVfZGVidWc6Ol9fY2hlY2tfcGFydGl0aW9uZWRfbG93ZXIoCQlcCisJCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9GaXJzdCksCQkJXAorCQkJX19nbnVfZGVidWc6Ol9fYmFzZShfTGFzdCksIF9WYWx1ZSksCQlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3VucGFydGl0aW9uZWQpICAgICAgXAorCQkgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpCQkJXAorCQkgICAgICAuX01fc3RyaW5nKCNfVmFsdWUpKQorCisjZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19wYXJ0aXRpb25lZF91cHBlcihfRmlyc3QsX0xhc3QsX1ZhbHVlKQkJXAorX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9GaXJzdCxfTGFzdCk7CQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2dudV9kZWJ1Zzo6X19jaGVja19wYXJ0aXRpb25lZF91cHBlcigJCVwKKwkJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX0ZpcnN0KSwJCQlcCisJCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9MYXN0KSwgX1ZhbHVlKSwJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdW5wYXJ0aXRpb25lZCkgICAgICBcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0xhc3QsICNfTGFzdCkJCQlcCisJCSAgICAgIC5fTV9zdHJpbmcoI19WYWx1ZSkpCisKKy8qKiBWZXJpZnkgdGhhdCB0aGUgaXRlcmF0b3IgcmFuZ2UgW19GaXJzdCwgX0xhc3QpIGlzIHBhcnRpdGlvbmVkCisgICAgdy5yLnQuIHRoZSB2YWx1ZSBfVmFsdWUgYW5kIHByZWRpY2F0ZSBfUHJlZC4gKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX3BhcnRpdGlvbmVkX2xvd2VyX3ByZWQoX0ZpcnN0LF9MYXN0LF9WYWx1ZSxfUHJlZCkgXAorX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9GaXJzdCxfTGFzdCk7CQkJCVwKK19HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2dudV9kZWJ1Zzo6X19jaGVja19wYXJ0aXRpb25lZF9sb3dlcigJCVwKKwkJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX0ZpcnN0KSwJCQlcCisJCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9MYXN0KSwgX1ZhbHVlLCBfUHJlZCksCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdW5wYXJ0aXRpb25lZF9wcmVkKSBcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfRmlyc3QsICNfRmlyc3QpCQkJXAorCQkgICAgICAuX01faXRlcmF0b3IoX0xhc3QsICNfTGFzdCkJCQlcCisJCSAgICAgIC5fTV9zdHJpbmcoI19QcmVkKQkJCQlcCisgICAgICAgICAgICAgICAgICAgICAgLl9NX3N0cmluZygjX1ZhbHVlKSkKKworLyoqIFZlcmlmeSB0aGF0IHRoZSBpdGVyYXRvciByYW5nZSBbX0ZpcnN0LCBfTGFzdCkgaXMgcGFydGl0aW9uZWQKKyAgICB3LnIudC4gdGhlIHZhbHVlIF9WYWx1ZSBhbmQgcHJlZGljYXRlIF9QcmVkLiAqLworI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfcGFydGl0aW9uZWRfdXBwZXJfcHJlZChfRmlyc3QsX0xhc3QsX1ZhbHVlLF9QcmVkKSBcCitfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX0ZpcnN0LF9MYXN0KTsJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fZ251X2RlYnVnOjpfX2NoZWNrX3BhcnRpdGlvbmVkX3VwcGVyKAkJXAorCQkJX19nbnVfZGVidWc6Ol9fYmFzZShfRmlyc3QpLAkJCVwKKwkJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX0xhc3QpLCBfVmFsdWUsIF9QcmVkKSwJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ191bnBhcnRpdGlvbmVkX3ByZWQpIFwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9GaXJzdCwgI19GaXJzdCkJCQlcCisJCSAgICAgIC5fTV9pdGVyYXRvcihfTGFzdCwgI19MYXN0KQkJCVwKKwkJICAgICAgLl9NX3N0cmluZygjX1ByZWQpCQkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAuX01fc3RyaW5nKCNfVmFsdWUpKQorCisvLyBWZXJpZnkgdGhhdCB0aGUgaXRlcmF0b3IgcmFuZ2UgW19GaXJzdCwgX0xhc3QpIGlzIGEgaGVhcAorI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfaGVhcChfRmlyc3QsX0xhc3QpCQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKHN0ZDo6X19pc19oZWFwKF9fZ251X2RlYnVnOjpfX2Jhc2UoX0ZpcnN0KSwJXAorCQkJCSAgICAgICBfX2dudV9kZWJ1Zzo6X19iYXNlKF9MYXN0KSksCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfbm90X2hlYXApCSAgICAgICAgXAorCQkgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpKQorCisvKiogVmVyaWZ5IHRoYXQgdGhlIGl0ZXJhdG9yIHJhbmdlIFtfRmlyc3QsIF9MYXN0KSBpcyBhIGhlYXAKKyAgICB3LnIudC4gdGhlIHByZWRpY2F0ZSBfUHJlZC4gKi8KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2hlYXBfcHJlZChfRmlyc3QsX0xhc3QsX1ByZWQpCQkJXAorICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoc3RkOjpfX2lzX2hlYXAoX19nbnVfZGVidWc6Ol9fYmFzZShfRmlyc3QpLAlcCisJCQkJICAgICAgIF9fZ251X2RlYnVnOjpfX2Jhc2UoX0xhc3QpLAlcCisJCQkJICAgICAgIF9QcmVkKSwJCQkJXAorCQkgICAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19ub3RfaGVhcF9wcmVkKSAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAuX01faXRlcmF0b3IoX0ZpcnN0LCAjX0ZpcnN0KQkJCVwKKwkJICAgICAgLl9NX2l0ZXJhdG9yKF9MYXN0LCAjX0xhc3QpCQkJXAorCQkgICAgICAuX01fc3RyaW5nKCNfUHJlZCkpCisKKy8vIFZlcmlmeSB0aGF0IHRoZSBjb250YWluZXIgaXMgbm90IHNlbGYgbW92ZSBhc3NpZ25lZAorI2RlZmluZSBfX2dsaWJjeHhfY2hlY2tfc2VsZl9tb3ZlX2Fzc2lnbihfT3RoZXIpCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKHRoaXMgIT0gJl9PdGhlciwJCQkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfc2VsZl9tb3ZlX2Fzc2lnbikJXAorICAgICAgICAgICAgICAgICAgICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKSkKKworLy8gVmVyaWZ5IHRoYXQgbG9hZCBmYWN0b3IgaXMgcG9zaXRpb24KKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX21heF9sb2FkX2ZhY3RvcihfRikJCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9GID4gMC4wZiwJCQkJCVwKKwkJICAgICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdmFsaWRfbG9hZF9mYWN0b3IpCVwKKyAgICAgICAgICAgICAgICAgICAgICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikpCisKKyNkZWZpbmUgX19nbGliY3h4X2NoZWNrX2VxdWFsX2FsbG9jcyhfT3RoZXIpCQkJXAorX0dMSUJDWFhfREVCVUdfVkVSSUZZKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfT3RoZXIuZ2V0X2FsbG9jYXRvcigpLAlcCisJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2VxdWFsX2FsbG9jcykJXAorCQkgICAgICAuX01fc2VxdWVuY2UoKnRoaXMsICJ0aGlzIikpCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVR19QRURBTlRJQworIyAgZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX1N0cmluZykgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9TdHJpbmcgIT0gMCkKKyMgIGRlZmluZSBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xlbihfU3RyaW5nLF9MZW4pIFwKKyAgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX1N0cmluZyAhPSAwIHx8IF9MZW4gPT0gMCkKKyNlbHNlCisjICBkZWZpbmUgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfU3RyaW5nKQorIyAgZGVmaW5lIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9TdHJpbmcsX0xlbikKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvbWFwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY1YTgyZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvbWFwCkBAIC0wLDAgKzEsMzYgQEAKKy8vIERlYnVnZ2luZyBtYXAvbXVsdGltYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL21hcAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfTUFQCisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX01BUCAxCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8ZGVidWcvbWFwLmg+CisjaW5jbHVkZSA8ZGVidWcvbXVsdGltYXAuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL21hcC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2FjNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9tYXAuaApAQCAtMCwwICsxLDQ5MSBAQAorLy8gRGVidWdnaW5nIG1hcCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvbWFwLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX01BUF9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX01BUF9IIDEKKworI2luY2x1ZGUgPGRlYnVnL3NhZmVfc2VxdWVuY2UuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX2l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19kZWJ1ZworeworICAvLy8gQ2xhc3Mgc3RkOjptYXAgd2l0aCBzYWZldHkvY2hlY2tpbmcvZGVidWcgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlID0gc3RkOjpsZXNzPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KKyAgICBjbGFzcyBtYXAKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQzo6bWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTxtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0M6Om1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiBfQmFzZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9FcXVhbF90bzxfQmFzZV9jb25zdF9pdGVyYXRvcj4gX0VxdWFsOworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzOgorICAgICAgdHlwZWRlZiBfS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9BbGxvY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8X0Jhc2VfaXRlcmF0b3IsIG1hcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLCBtYXA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIDIzLjMuMS4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJCSAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZ251X2RlYnVnOjpfX2Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwKKwkJCQkJCQkJICAgICBfX2xhc3QpKSwKKwkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpLAorCQlfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIG1hcChjb25zdCBtYXAmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSB7IH0KKworICAgICAgbWFwKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBtYXAobWFwJiYgX194KQorICAgICAgbm9leGNlcHQoaXNfbm90aHJvd19jb3B5X2NvbnN0cnVjdGlibGU8X0NvbXBhcmU+Ojp2YWx1ZSkKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9feCkpCisgICAgICB7IHRoaXMtPl9NX3N3YXAoX194KTsgfQorCisgICAgICBtYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICBjb25zdCBfQ29tcGFyZSYgX19jID0gX0NvbXBhcmUoKSwKKwkgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fYywgX19hKSB7IH0KKyNlbmRpZgorCisgICAgICB+bWFwKCkgX0dMSUJDWFhfTk9FWENFUFQgeyB9CisKKyAgICAgIG1hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBtYXAmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIG1hcCYKKyAgICAgIG9wZXJhdG9yPShtYXAmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwlfX2dsaWJjeHhfY2hlY2tfc2VsZl9tb3ZlX2Fzc2lnbihfX3gpOworCWNsZWFyKCk7CisJc3dhcChfX3gpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDEzMy4gbWFwIG1pc3NpbmcgZ2V0X2FsbG9jYXRvcigpCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IgCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgICAvLyBjYXBhY2l0eToKKyAgICAgIHVzaW5nIF9CYXNlOjplbXB0eTsKKyAgICAgIHVzaW5nIF9CYXNlOjpzaXplOworICAgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisgICAgICAvLyAyMy4zLjEuMiBlbGVtZW50IGFjY2VzczoKKyAgICAgIHVzaW5nIF9CYXNlOjpvcGVyYXRvcltdOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiA0NjQuIFN1Z2dlc3Rpb24gZm9yIG5ldyBtZW1iZXIgZnVuY3Rpb25zIGluIHN0YW5kYXJkIGNvbnRhaW5lcnMuCisgICAgICB1c2luZyBfQmFzZTo6YXQ7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBhdXRvIF9fcmVzID0gX0Jhc2U6OmVtcGxhY2Uoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIHJldHVybiBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+KGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCQkJICAgX19yZXMuc2Vjb25kKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9oaW50KGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zKTsKKwkgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW1wbGFjZV9oaW50KF9fcG9zLmJhc2UoKSwKKwkJCQkJICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKKwkJCSAgdGhpcyk7CisJfQorI2VuZGlmCisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBib29sPiBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX194KTsKKwlyZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkJCSBfX3Jlcy5zZWNvbmQpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPHZhbHVlX3R5cGUsCisJCQkJCQkgICAgX1BhaXImJj46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgICBpbnNlcnQoX1BhaXImJiBfX3gpCisgICAgICAgIHsKKwkgIHN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgYm9vbD4gX19yZXMKKwkgICAgPSBfQmFzZTo6aW5zZXJ0KHN0ZDo6Zm9yd2FyZDxfUGFpcj4oX194KSk7CisJICByZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkJCSAgIF9fcmVzLnNlY29uZCk7CisJfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbGlzdCkKKyAgICAgIHsgX0Jhc2U6Omluc2VydChfX2xpc3QpOyB9CisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorI2Vsc2UKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisjZW5kaWYKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX3gpLCB0aGlzKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBfUGFpciYmIF9feCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwkgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLAorCQkJCQlzdGQ6OmZvcndhcmQ8X1BhaXI+KF9feCkpLCB0aGlzKTsKKwl9CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCkpOworCX0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3Bvc2l0aW9uLmJhc2UoKSkpOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbi5iYXNlKCkpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBlcmFzZShjb25zdF9pdGVyYXRvcihfX3Bvc2l0aW9uKSk7IH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3Bvc2l0aW9uLmJhc2UoKSkpOworCV9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCV9CYXNlX2l0ZXJhdG9yIF9fdmljdGltID0gX0Jhc2U6OmZpbmQoX194KTsKKwlpZiAoX192aWN0aW0gPT0gX0Jhc2U6OmVuZCgpKQorCSAgcmV0dXJuIDA7CisJZWxzZQorCSAgeworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3ZpY3RpbSkpOworCSAgICBfQmFzZTo6ZXJhc2UoX192aWN0aW0pOworCSAgICByZXR1cm4gMTsKKwkgIH0KKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJZm9yIChfQmFzZV9jb25zdF9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fZmlyc3QuYmFzZSgpOworCSAgICAgX192aWN0aW0gIT0gX19sYXN0LmJhc2UoKTsgKytfX3ZpY3RpbSkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fdmljdGltICE9IF9CYXNlOjplbmQoKSwKKwkJCQkgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3ZhbGlkX3JhbmdlKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fZmlyc3QsICJmaXJzdCIpCisJCQkJICAuX01faXRlcmF0b3IoX19sYXN0LCAibGFzdCIpKTsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfRXF1YWwoX192aWN0aW0pKTsKKwkgIH0KKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCWZvciAoX0Jhc2VfaXRlcmF0b3IgX192aWN0aW0gPSBfX2ZpcnN0LmJhc2UoKTsKKwkgICAgIF9fdmljdGltICE9IF9fbGFzdC5iYXNlKCk7ICsrX192aWN0aW0pCisJICB7CisJICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX3ZpY3RpbSAhPSBfQmFzZTo6ZW5kKCksCisJCQkJICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZSkKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2ZpcnN0LCAiZmlyc3QiKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fbGFzdCwgImxhc3QiKSk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fdmljdGltKSk7CisJICB9CisJX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBzd2FwKG1hcCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJdGhpcy0+X01fc3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfQmFzZTo6Y2xlYXIoKTsKKyAgICAgIH0KKworICAgICAgLy8gb2JzZXJ2ZXJzOgorICAgICAgdXNpbmcgX0Jhc2U6OmtleV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXA7CisKKyAgICAgIC8vIDIzLjMuMS4zIG1hcCBvcGVyYXRpb25zOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZmluZChfX3gpLCB0aGlzKTsgfQorCisgICAgICB1c2luZyBfQmFzZTo6Y291bnQ7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omxvd2VyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6Omxvd2VyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19yZXMgPQorCV9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkgICAgICBpdGVyYXRvcihfX3Jlcy5zZWNvbmQsIHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKwlzdGQ6OnBhaXI8X0Jhc2VfY29uc3RfaXRlcmF0b3IsIF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfX3JlcyA9CisJX0Jhc2U6OmVxdWFsX3JhbmdlKF9feCk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBfR0xJQkNYWF9OT0VYQ0VQVCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVCB7IHJldHVybiAqdGhpczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2ludmFsaWRhdGVfYWxsKCkKKyAgICAgIHsKKwl0eXBlZGVmIF9fZ251X2RlYnVnOjpfTm90X2VxdWFsX3RvPF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfTm90X2VxdWFsOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX05vdF9lcXVhbChfTV9iYXNlKCkuZW5kKCkpKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKK30gLy8gbmFtZXNwYWNlIF9fZGVidWcKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvbXVsdGltYXAuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvbXVsdGltYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDMxOThmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9tdWx0aW1hcC5oCkBAIC0wLDAgKzEsNDc0IEBACisvLyBEZWJ1Z2dpbmcgbXVsdGltYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL211bHRpbWFwLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX01VTFRJTUFQX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfTVVMVElNQVBfSCAxCisKKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fZGVidWcKK3sKKyAgLy8vIENsYXNzIHN0ZDo6bXVsdGltYXAgd2l0aCBzYWZldHkvY2hlY2tpbmcvZGVidWcgaW5zdHJ1bWVudGF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlID0gc3RkOjpsZXNzPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KKyAgICBjbGFzcyBtdWx0aW1hcAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9DOjptdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiwKKyAgICAgIHB1YmxpYyBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8bXVsdGltYXA8X0tleSwgX1RwLAorCQkJCQkJICBfQ29tcGFyZSwgX0FsbG9jYXRvcj4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0M6Om11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X0VxdWFsX3RvPF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfRXF1YWw7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9LZXkJCQkJICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwCQkJCSAgICAgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2l0ZXJhdG9yLCBtdWx0aW1hcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjxfQmFzZV9jb25zdF9pdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aW1hcD4gY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpwb2ludGVyICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIDIzLjMuMS4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkJCWNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICAgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZ251X2RlYnVnOjpfX2Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwKKwkJCQkJCQkJICAgICBfX2xhc3QpKSwKKwkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpLAorCSAgICAgIF9fY29tcCwgX19hKSB7IH0KKworICAgICAgbXVsdGltYXAoY29uc3QgbXVsdGltYXAmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSB7IH0KKworICAgICAgbXVsdGltYXAoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIG11bHRpbWFwKG11bHRpbWFwJiYgX194KQorICAgICAgbm9leGNlcHQoaXNfbm90aHJvd19jb3B5X2NvbnN0cnVjdGlibGU8X0NvbXBhcmU+Ojp2YWx1ZSkKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9feCkpCisgICAgICB7IHRoaXMtPl9NX3N3YXAoX194KTsgfQorCisgICAgICBtdWx0aW1hcChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fYyA9IF9Db21wYXJlKCksCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fYywgX19hKSB7IH0KKyNlbmRpZgorCisgICAgICB+bXVsdGltYXAoKSBfR0xJQkNYWF9OT0VYQ0VQVCB7IH0KKworICAgICAgbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgbXVsdGltYXAmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIG11bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KG11bHRpbWFwJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJX19nbGliY3h4X2NoZWNrX3NlbGZfbW92ZV9hc3NpZ24oX194KTsKKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG11bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8gY2FwYWNpdHk6CisgICAgICB1c2luZyBfQmFzZTo6ZW1wdHk7CisgICAgICB1c2luZyBfQmFzZTo6c2l6ZTsKKyAgICAgIHVzaW5nIF9CYXNlOjptYXhfc2l6ZTsKKworICAgICAgLy8gbW9kaWZpZXJzOgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2Uoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwgdGhpcyk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2VfaGludChjb25zdF9pdGVyYXRvciBfX3BvcywgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvcyk7CisJICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2VfaGludChfX3Bvcy5iYXNlKCksCisJCQkJCSAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisJCQkgIHRoaXMpOworCX0KKyNlbmRpZgorICAgICAgCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX194KSwgdGhpcyk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGluc2VydChfUGFpciYmIF9feCkKKyAgICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChzdGQ6OmZvcndhcmQ8X1BhaXI+KF9feCkpLCB0aGlzKTsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbGlzdCkKKyAgICAgIHsgX0Jhc2U6Omluc2VydChfX2xpc3QpOyB9CisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorI2Vsc2UKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisjZW5kaWYKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX3gpLCB0aGlzKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBfUGFpciYmIF9feCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwkgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLAorCQkJCQlzdGQ6OmZvcndhcmQ8X1BhaXI+KF9feCkpLCB0aGlzKTsKKwl9CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCkpOworCX0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3Bvc2l0aW9uLmJhc2UoKSkpOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbi5iYXNlKCkpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBlcmFzZShjb25zdF9pdGVyYXRvcihfX3Bvc2l0aW9uKSk7IH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3Bvc2l0aW9uLmJhc2UoKSkpOworCV9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fdmljdGltcyA9CisJICBfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlzaXplX3R5cGUgX19jb3VudCA9IDA7CisJX0Jhc2VfaXRlcmF0b3IgX192aWN0aW0gPSBfX3ZpY3RpbXMuZmlyc3Q7CisJd2hpbGUgKF9fdmljdGltICE9ICBfX3ZpY3RpbXMuc2Vjb25kKQorCSAgeworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3ZpY3RpbSkpOworCSAgICBfQmFzZTo6ZXJhc2UoX192aWN0aW0rKyk7CisJICAgICsrX19jb3VudDsKKwkgIH0KKwlyZXR1cm4gX19jb3VudDsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJZm9yIChfQmFzZV9jb25zdF9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fZmlyc3QuYmFzZSgpOworCSAgICAgX192aWN0aW0gIT0gX19sYXN0LmJhc2UoKTsgKytfX3ZpY3RpbSkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fdmljdGltICE9IF9CYXNlOjplbmQoKSwKKwkJCQkgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3ZhbGlkX3JhbmdlKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fZmlyc3QsICJmaXJzdCIpCisJCQkJICAuX01faXRlcmF0b3IoX19sYXN0LCAibGFzdCIpKTsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfRXF1YWwoX192aWN0aW0pKTsKKwkgIH0KKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCWZvciAoX0Jhc2VfaXRlcmF0b3IgX192aWN0aW0gPSBfX2ZpcnN0LmJhc2UoKTsKKwkgICAgIF9fdmljdGltICE9IF9fbGFzdC5iYXNlKCk7ICsrX192aWN0aW0pCisJICB7CisJICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX3ZpY3RpbSAhPSBfQmFzZTo6ZW5kKCksCisJCQkJICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZSkKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2ZpcnN0LCAiZmlyc3QiKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fbGFzdCwgImxhc3QiKSk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fdmljdGltKSk7CisJICB9CisJX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBzd2FwKG11bHRpbWFwJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKwl0aGlzLT5fTV9zd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCV9CYXNlOjpjbGVhcigpOworICAgICAgfQorCisgICAgICAvLyBvYnNlcnZlcnM6CisgICAgICB1c2luZyBfQmFzZTo6a2V5X2NvbXA7CisgICAgICB1c2luZyBfQmFzZTo6dmFsdWVfY29tcDsKKworICAgICAgLy8gMjMuMy4xLjMgbXVsdGltYXAgb3BlcmF0aW9uczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZmluZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSwgdGhpcyk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmNvdW50OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcmVzID0KKwlfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLCBfQmFzZV9jb25zdF9pdGVyYXRvcj4gX19yZXMgPQorCSAgX0Jhc2U6OmVxdWFsX3JhbmdlKF9feCk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBfR0xJQkNYWF9OT0VYQ0VQVCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVCB7IHJldHVybiAqdGhpczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2ludmFsaWRhdGVfYWxsKCkKKyAgICAgIHsKKwl0eXBlZGVmIF9fZ251X2RlYnVnOjpfTm90X2VxdWFsX3RvPF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfTm90X2VxdWFsOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX05vdF9lcXVhbChfQmFzZTo6ZW5kKCkpKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSBtdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX2RlYnVnCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL211bHRpc2V0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL211bHRpc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjNzYxZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvbXVsdGlzZXQuaApAQCAtMCwwICsxLDQ2MCBAQAorLy8gRGVidWdnaW5nIG11bHRpc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9tdWx0aXNldC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19NVUxUSVNFVF9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX01VTFRJU0VUX0ggMQorCisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6Om11bHRpc2V0IHdpdGggc2FmZXR5L2NoZWNraW5nL2RlYnVnIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPF9LZXk+ID4KKyAgICBjbGFzcyBtdWx0aXNldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9DOjptdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4sCisgICAgICBwdWJsaWMgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfQzo6bXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X0VxdWFsX3RvPF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfRXF1YWw7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9LZXkJCQkJICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0tleQkJCQkgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICAga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICAgdmFsdWVfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UJICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjxfQmFzZV9pdGVyYXRvciwgbXVsdGlzZXQ+CisgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLAorCQkJCQkgIG11bHRpc2V0PiBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3BvaW50ZXIgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgLy8gMjMuMy4zLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICAgIGV4cGxpY2l0IG11bHRpc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCQkJY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBtdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSBjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkJIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZ251X2RlYnVnOjpfX2Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwKKwkJCQkJCQkJICAgICBfX2xhc3QpKSwKKwkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpLAorCQlfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIG11bHRpc2V0KGNvbnN0IG11bHRpc2V0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIG11bHRpc2V0KGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBtdWx0aXNldChtdWx0aXNldCYmIF9feCkKKyAgICAgIG5vZXhjZXB0KGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPF9Db21wYXJlPjo6dmFsdWUpCisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKQorICAgICAgeyB0aGlzLT5fTV9zd2FwKF9feCk7IH0KKworICAgICAgbXVsdGlzZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2NvbXAsIF9fYSkgeyB9CisjZW5kaWYKKworICAgICAgfm11bHRpc2V0KCkgX0dMSUJDWFhfTk9FWENFUFQgeyB9CisKKyAgICAgIG11bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IG11bHRpc2V0JiBfX3gpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBtdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPShtdWx0aXNldCYmIF9feCkKKyAgICAgIHsKKwkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCV9fZ2xpYmN4eF9jaGVja19zZWxmX21vdmVfYXNzaWduKF9feCk7CisJY2xlYXIoKTsKKwlzd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBtdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksIHRoaXMpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3MpOworCSAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbXBsYWNlX2hpbnQoX19wb3MuYmFzZSgpLAorCQkJCQkgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorCQkJICB0aGlzKTsKKwl9CisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9feCksIHRoaXMpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KHN0ZDo6bW92ZShfX3gpKSwgdGhpcyk7IH0KKyNlbmRpZgorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX3gpLCB0aGlzKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwgdmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zaXRpb24pOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBzdGQ6Om1vdmUoX194KSksCisJCQl0aGlzKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl2b2lkCisJaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKwl7CisJICBfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwkgIF9CYXNlOjppbnNlcnQoX19nbnVfZGVidWc6Ol9fYmFzZShfX2ZpcnN0KSwKKwkJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSk7CisJfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbCk7IH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9fcG9zaXRpb24pOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fcG9zaXRpb24uYmFzZSgpKSk7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSksIHRoaXMpOworICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9fcG9zaXRpb24pOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fcG9zaXRpb24uYmFzZSgpKSk7CisJX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX192aWN0aW1zID0KKwkgIF9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXNpemVfdHlwZSBfX2NvdW50ID0gMDsKKwlfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fdmljdGltcy5maXJzdDsKKwl3aGlsZSAoX192aWN0aW0gIT0gX192aWN0aW1zLnNlY29uZCkKKwkgIHsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfRXF1YWwoX192aWN0aW0pKTsKKwkgICAgX0Jhc2U6OmVyYXNlKF9fdmljdGltKyspOworCSAgICArK19fY291bnQ7CisJICB9CisJcmV0dXJuIF9fY291bnQ7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCWZvciAoX0Jhc2VfY29uc3RfaXRlcmF0b3IgX192aWN0aW0gPSBfX2ZpcnN0LmJhc2UoKTsKKwkgICAgIF9fdmljdGltICE9IF9fbGFzdC5iYXNlKCk7ICsrX192aWN0aW0pCisJICB7CisJICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX3ZpY3RpbSAhPSBfQmFzZTo6ZW5kKCksCisJCQkJICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZSkKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2ZpcnN0LCAiZmlyc3QiKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fbGFzdCwgImxhc3QiKSk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fdmljdGltKSk7CisJICB9CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSksIHRoaXMpOworICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlmb3IgKF9CYXNlX2l0ZXJhdG9yIF9fdmljdGltID0gX19maXJzdC5iYXNlKCk7CisJICAgICBfX3ZpY3RpbSAhPSBfX2xhc3QuYmFzZSgpOyArK19fdmljdGltKQorCSAgeworCSAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX192aWN0aW0gIT0gX0Jhc2U6OmVuZCgpLAorCQkJCSAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdmFsaWRfcmFuZ2UpCisJCQkJICAuX01faXRlcmF0b3IoX19maXJzdCwgImZpcnN0IikKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2xhc3QsICJsYXN0IikpOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3ZpY3RpbSkpOworCSAgfQorCV9CYXNlOjplcmFzZShfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc3dhcChtdWx0aXNldCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJdGhpcy0+X01fc3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfQmFzZTo6Y2xlYXIoKTsKKyAgICAgIH0KKworICAgICAgLy8gb2JzZXJ2ZXJzOgorICAgICAgdXNpbmcgX0Jhc2U6OmtleV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXA7CisKKyAgICAgIC8vIG11bHRpc2V0IG9wZXJhdGlvbnM6CisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSwgdGhpcyk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSwgdGhpcyk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmNvdW50OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6Omxvd2VyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6dXBwZXJfYm91bmQoX194KSwgdGhpcyk7IH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisJICBfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKwlzdGQ6OnBhaXI8X0Jhc2VfY29uc3RfaXRlcmF0b3IsIF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfX3JlcyA9CisJICBfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpIF9HTElCQ1hYX05PRVhDRVBUICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCXR5cGVkZWYgX19nbnVfZGVidWc6Ol9Ob3RfZXF1YWxfdG88X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9Ob3RfZXF1YWw7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfTm90X2VxdWFsKF9CYXNlOjplbmQoKSkpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgdm9pZAorICAgIHN3YXAobXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3gsCisJIG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5zd2FwKF9feSk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX2Jhc2UuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV9iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhZjc0NwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV9iYXNlLmgKQEAgLTAsMCArMSwyNTQgQEAKKy8vIFNhZmUgc2VxdWVuY2UvaXRlcmF0b3IgYmFzZSBpbXBsZW1lbnRhdGlvbiAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3NhZmVfYmFzZS5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TQUZFX0JBU0VfSAorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19TQUZFX0JBU0VfSCAxCisKKyNpbmNsdWRlIDxleHQvY29uY3VycmVuY2UuaD4KKworbmFtZXNwYWNlIF9fZ251X2RlYnVnCit7CisgIGNsYXNzIF9TYWZlX3NlcXVlbmNlX2Jhc2U7CisKKyAgLyoqIFxicmllZiBCYXNpYyBmdW5jdGlvbmFsaXR5IGZvciBhIEBhIHNhZmUgaXRlcmF0b3IuCisgICAqCisgICAqICBUaGUgJV9TYWZlX2l0ZXJhdG9yX2Jhc2UgYmFzZSBjbGFzcyBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbmFsaXR5CisgICAqICBvZiBhIHNhZmUgaXRlcmF0b3IgdGhhdCBpcyBub3Qgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGl0ZXJhdG9yCisgICAqICB0eXBlLiBJdCBjb250YWlucyBhIHBvaW50ZXIgYmFjayB0byB0aGUgc2VxdWVuY2UgaXQgcmVmZXJlbmNlcworICAgKiAgYWxvbmcgd2l0aCBpdGVyYXRvciB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBwb2ludGVycyB0byBmb3JtIGEKKyAgICogIGRvdWJseS1saW5rZWQgbGlzdCBvZiBpdGVyYXRvcnMgcmVmZXJlbmNlZCBieSB0aGUgY29udGFpbmVyLgorICAgKgorICAgKiAgVGhpcyBjbGFzcyBtdXN0IG5vdCBwZXJmb3JtIGFueSBvcGVyYXRpb25zIHRoYXQgY2FuIHRocm93IGFuCisgICAqICBleGNlcHRpb24sIG9yIHRoZSBleGNlcHRpb24gZ3VhcmFudGVlcyBvZiBkZXJpdmVkIGl0ZXJhdG9ycyB3aWxsCisgICAqICBiZSBicm9rZW4uCisgICAqLworICBjbGFzcyBfU2FmZV9pdGVyYXRvcl9iYXNlCisgIHsKKyAgcHVibGljOgorICAgIC8qKiBUaGUgc2VxdWVuY2UgdGhpcyBpdGVyYXRvciByZWZlcmVuY2VzOyBtYXkgYmUgTlVMTCB0byBpbmRpY2F0ZQorCWEgc2luZ3VsYXIgaXRlcmF0b3IuICovCisgICAgX1NhZmVfc2VxdWVuY2VfYmFzZSogX01fc2VxdWVuY2U7CisKKyAgICAvKiogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaXRlcmF0b3IuIFRoZSBzZW50aW5lbCB2YWx1ZSAwIGlzCisgICAgICogIHVzZWQgdG8gaW5kaWNhdGUgYW4gaW52YWxpZGF0ZWQgaXRlcmF0b3IgKGkuZS4sIG9uZSB0aGF0IGlzCisgICAgICogIHNpbmd1bGFyIGJlY2F1c2Ugb2YgYW4gb3BlcmF0aW9uIG9uIHRoZSBjb250YWluZXIpLiBUaGlzCisgICAgICogIHZlcnNpb24gbnVtYmVyIG11c3QgZXF1YWwgdGhlIHZlcnNpb24gbnVtYmVyIGluIHRoZSBzZXF1ZW5jZQorICAgICAqICByZWZlcmVuY2VkIGJ5IF9NX3NlcXVlbmNlIGZvciB0aGUgaXRlcmF0b3IgdG8gYmUKKyAgICAgKiAgbm9uLXNpbmd1bGFyLgorICAgICAqLworICAgIHVuc2lnbmVkIGludCAgICAgICAgIF9NX3ZlcnNpb247CisKKyAgICAvKiogUG9pbnRlciB0byB0aGUgcHJldmlvdXMgaXRlcmF0b3IgaW4gdGhlIHNlcXVlbmNlJ3MgbGlzdCBvZgorCWl0ZXJhdG9ycy4gT25seSB2YWxpZCB3aGVuIF9NX3NlcXVlbmNlICE9IE5VTEwuICovCisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZSogX01fcHJpb3I7CisKKyAgICAvKiogUG9pbnRlciB0byB0aGUgbmV4dCBpdGVyYXRvciBpbiB0aGUgc2VxdWVuY2UncyBsaXN0IG9mCisJaXRlcmF0b3JzLiBPbmx5IHZhbGlkIHdoZW4gX01fc2VxdWVuY2UgIT0gTlVMTC4gKi8KKyAgICBfU2FmZV9pdGVyYXRvcl9iYXNlKiBfTV9uZXh0OworCisgIHByb3RlY3RlZDoKKyAgICAvKiogSW5pdGlhbGl6ZXMgdGhlIGl0ZXJhdG9yIGFuZCBtYWtlcyBpdCBzaW5ndWxhci4gKi8KKyAgICBfU2FmZV9pdGVyYXRvcl9iYXNlKCkKKyAgICA6IF9NX3NlcXVlbmNlKDApLCBfTV92ZXJzaW9uKDApLCBfTV9wcmlvcigwKSwgX01fbmV4dCgwKQorICAgIHsgfQorCisgICAgLyoqIEluaXRpYWxpemUgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyZW5jZSB0aGUgc2VxdWVuY2UgcG9pbnRlZCB0bworICAgICAqICBieSBAcCBfX3NlcS4gQHAgX19jb25zdGFudCBpcyB0cnVlIHdoZW4gd2UgYXJlIGluaXRpYWxpemluZyBhCisgICAgICogIGNvbnN0YW50IGl0ZXJhdG9yLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSBtdXRhYmxlIGl0ZXJhdG9yLiBOb3RlCisgICAgICogIHRoYXQgQHAgX19zZXEgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgdGhlIGl0ZXJhdG9yIHdpbGwgYmUKKyAgICAgKiAgc2luZ3VsYXIuIE90aGVyd2lzZSwgdGhlIGl0ZXJhdG9yIHdpbGwgcmVmZXJlbmNlIEBwIF9fc2VxIGFuZAorICAgICAqICBiZSBub25zaW5ndWxhci4KKyAgICAgKi8KKyAgICBfU2FmZV9pdGVyYXRvcl9iYXNlKGNvbnN0IF9TYWZlX3NlcXVlbmNlX2Jhc2UqIF9fc2VxLCBib29sIF9fY29uc3RhbnQpCisgICAgOiBfTV9zZXF1ZW5jZSgwKSwgX01fdmVyc2lvbigwKSwgX01fcHJpb3IoMCksIF9NX25leHQoMCkKKyAgICB7IHRoaXMtPl9NX2F0dGFjaChjb25zdF9jYXN0PF9TYWZlX3NlcXVlbmNlX2Jhc2UqPihfX3NlcSksIF9fY29uc3RhbnQpOyB9CisKKyAgICAvKiogSW5pdGlhbGl6ZXMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyZW5jZSB0aGUgc2FtZSBzZXF1ZW5jZSB0aGF0CisJQHAgX194IGRvZXMuIEBwIF9fY29uc3RhbnQgaXMgdHJ1ZSBpZiB0aGlzIGlzIGEgY29uc3RhbnQKKwlpdGVyYXRvciwgYW5kIGZhbHNlIGlmIGl0IGlzIG11dGFibGUuICovCisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZShjb25zdCBfU2FmZV9pdGVyYXRvcl9iYXNlJiBfX3gsIGJvb2wgX19jb25zdGFudCkKKyAgICA6IF9NX3NlcXVlbmNlKDApLCBfTV92ZXJzaW9uKDApLCBfTV9wcmlvcigwKSwgX01fbmV4dCgwKQorICAgIHsgdGhpcy0+X01fYXR0YWNoKF9feC5fTV9zZXF1ZW5jZSwgX19jb25zdGFudCk7IH0KKworICAgIF9TYWZlX2l0ZXJhdG9yX2Jhc2UmCisgICAgb3BlcmF0b3I9KGNvbnN0IF9TYWZlX2l0ZXJhdG9yX2Jhc2UmKTsKKworICAgIGV4cGxpY2l0CisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZShjb25zdCBfU2FmZV9pdGVyYXRvcl9iYXNlJik7CisKKyAgICB+X1NhZmVfaXRlcmF0b3JfYmFzZSgpIHsgdGhpcy0+X01fZGV0YWNoKCk7IH0KKworICAgIC8qKiBGb3IgdXNlIGluIF9TYWZlX2l0ZXJhdG9yLiAqLworICAgIF9fZ251X2N4eDo6X19tdXRleCYgX01fZ2V0X211dGV4KCkgdGhyb3cgKCk7CisKKyAgcHVibGljOgorICAgIC8qKiBBdHRhY2hlcyB0aGlzIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBzZXF1ZW5jZSwgZGV0YWNoaW5nIGl0CisgICAgICoJZnJvbSB3aGF0ZXZlciBzZXF1ZW5jZSBpdCB3YXMgYXR0YWNoZWQgdG8gb3JpZ2luYWxseS4gSWYgdGhlCisgICAgICoJbmV3IHNlcXVlbmNlIGlzIHRoZSBOVUxMIHBvaW50ZXIsIHRoZSBpdGVyYXRvciBpcyBsZWZ0CisgICAgICoJdW5hdHRhY2hlZC4KKyAgICAgKi8KKyAgICB2b2lkIF9NX2F0dGFjaChfU2FmZV9zZXF1ZW5jZV9iYXNlKiBfX3NlcSwgYm9vbCBfX2NvbnN0YW50KTsKKworICAgIC8qKiBMaWtld2lzZSwgYnV0IG5vdCB0aHJlYWQtc2FmZS4gKi8KKyAgICB2b2lkIF9NX2F0dGFjaF9zaW5nbGUoX1NhZmVfc2VxdWVuY2VfYmFzZSogX19zZXEsIGJvb2wgX19jb25zdGFudCkgdGhyb3cgKCk7CisKKyAgICAvKiogRGV0YWNoIHRoZSBpdGVyYXRvciBmb3Igd2hhdGV2ZXIgc2VxdWVuY2UgaXQgaXMgYXR0YWNoZWQgdG8sCisgICAgICoJaWYgYW55LgorICAgICovCisgICAgdm9pZCBfTV9kZXRhY2goKTsKKworICAgIC8qKiBMaWtld2lzZSwgYnV0IG5vdCB0aHJlYWQtc2FmZS4gKi8KKyAgICB2b2lkIF9NX2RldGFjaF9zaW5nbGUoKSB0aHJvdyAoKTsKKworICAgIC8qKiBEZXRlcm1pbmVzIGlmIHdlIGFyZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gc2VxdWVuY2UuICovCisgICAgYm9vbCBfTV9hdHRhY2hlZF90byhjb25zdCBfU2FmZV9zZXF1ZW5jZV9iYXNlKiBfX3NlcSkgY29uc3QKKyAgICB7IHJldHVybiBfTV9zZXF1ZW5jZSA9PSBfX3NlcTsgfQorCisgICAgLyoqIElzIHRoaXMgaXRlcmF0b3Igc2luZ3VsYXI/ICovCisgICAgX0dMSUJDWFhfUFVSRSBib29sIF9NX3Npbmd1bGFyKCkgY29uc3QgdGhyb3cgKCk7CisKKyAgICAvKiogQ2FuIHdlIGNvbXBhcmUgdGhpcyBpdGVyYXRvciB0byB0aGUgZ2l2ZW4gaXRlcmF0b3IgQHAgX194PworCVJldHVybnMgdHJ1ZSBpZiBib3RoIGl0ZXJhdG9ycyBhcmUgbm9uc2luZ3VsYXIgYW5kIHJlZmVyZW5jZQorCXRoZSBzYW1lIHNlcXVlbmNlLiAqLworICAgIF9HTElCQ1hYX1BVUkUgYm9vbCBfTV9jYW5fY29tcGFyZShjb25zdCBfU2FmZV9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0IHRocm93ICgpOworCisgICAgLyoqIEludmFsaWRhdGUgdGhlIGl0ZXJhdG9yLCBtYWtpbmcgaXQgc2luZ3VsYXIuICovCisgICAgdm9pZAorICAgIF9NX2ludmFsaWRhdGUoKQorICAgIHsgX01fdmVyc2lvbiA9IDA7IH0KKworICAgIC8qKiBSZXNldCBhbGwgbWVtYmVyIHZhcmlhYmxlcyAqLworICAgIHZvaWQKKyAgICBfTV9yZXNldCgpIHRocm93ICgpOworCisgICAgLyoqIFVubGluayBpdHNlbGYgKi8KKyAgICB2b2lkCisgICAgX01fdW5saW5rKCkgdGhyb3cgKCkKKyAgICB7CisgICAgICBpZiAoX01fcHJpb3IpCisJX01fcHJpb3ItPl9NX25leHQgPSBfTV9uZXh0OworICAgICAgaWYgKF9NX25leHQpCisJX01fbmV4dC0+X01fcHJpb3IgPSBfTV9wcmlvcjsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBCYXNlIGNsYXNzIHRoYXQgc3VwcG9ydHMgdHJhY2tpbmcgb2YgaXRlcmF0b3JzIHRoYXQKKyAgICogcmVmZXJlbmNlIGEgc2VxdWVuY2UuCisgICAqCisgICAqIFRoZSAlX1NhZmVfc2VxdWVuY2VfYmFzZSBjbGFzcyBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvcgorICAgKiB0cmFja2luZyBpdGVyYXRvcnMgaW50byBhIHNlcXVlbmNlLiBTZXF1ZW5jZXMgdGhhdCB0cmFjaworICAgKiBpdGVyYXRvcnMgbXVzdCBkZXJpdmVkIGZyb20gJV9TYWZlX3NlcXVlbmNlX2Jhc2UgcHVibGljbHksIHNvCisgICAqIHRoYXQgc2FmZSBpdGVyYXRvcnMgKHdoaWNoIGluaGVyaXQgX1NhZmVfaXRlcmF0b3JfYmFzZSkgY2FuCisgICAqIGF0dGFjaCB0byB0aGVtLiBUaGlzIGNsYXNzIGNvbnRhaW5zIHR3byBsaW5rZWQgbGlzdHMgb2YKKyAgICogaXRlcmF0b3JzLCBvbmUgZm9yIGNvbnN0YW50IGl0ZXJhdG9ycyBhbmQgb25lIGZvciBtdXRhYmxlCisgICAqIGl0ZXJhdG9ycywgYW5kIGEgdmVyc2lvbiBudW1iZXIgdGhhdCBhbGxvd3MgdmVyeSBmYXN0CisgICAqIGludmFsaWRhdGlvbiBvZiBhbGwgaXRlcmF0b3JzIHRoYXQgcmVmZXJlbmNlIHRoZSBjb250YWluZXIuCisgICAqCisgICAqIFRoaXMgY2xhc3MgbXVzdCBlbnN1cmUgdGhhdCBubyBvcGVyYXRpb24gb24gaXQgbWF5IHRocm93IGFuCisgICAqIGV4Y2VwdGlvbiwgb3RoZXJ3aXNlIEBhIHNhZmUgc2VxdWVuY2VzIG1heSBmYWlsIHRvIHByb3ZpZGUgdGhlCisgICAqIGV4Y2VwdGlvbi1zYWZldHkgZ3VhcmFudGVlcyByZXF1aXJlZCBieSB0aGUgQysrIHN0YW5kYXJkLgorICAgKi8KKyAgY2xhc3MgX1NhZmVfc2VxdWVuY2VfYmFzZQorICB7CisgIHB1YmxpYzoKKyAgICAvLy8gVGhlIGxpc3Qgb2YgbXV0YWJsZSBpdGVyYXRvcnMgdGhhdCByZWZlcmVuY2UgdGhpcyBjb250YWluZXIKKyAgICBfU2FmZV9pdGVyYXRvcl9iYXNlKiBfTV9pdGVyYXRvcnM7CisKKyAgICAvLy8gVGhlIGxpc3Qgb2YgY29uc3RhbnQgaXRlcmF0b3JzIHRoYXQgcmVmZXJlbmNlIHRoaXMgY29udGFpbmVyCisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZSogX01fY29uc3RfaXRlcmF0b3JzOworCisgICAgLy8vIFRoZSBjb250YWluZXIgdmVyc2lvbiBudW1iZXIuIFRoaXMgbnVtYmVyIG1heSBuZXZlciBiZSAwLgorICAgIG11dGFibGUgdW5zaWduZWQgaW50IF9NX3ZlcnNpb247CisKKyAgcHJvdGVjdGVkOgorICAgIC8vIEluaXRpYWxpemUgd2l0aCBhIHZlcnNpb24gbnVtYmVyIG9mIDEgYW5kIG5vIGl0ZXJhdG9ycworICAgIF9TYWZlX3NlcXVlbmNlX2Jhc2UoKQorICAgIDogX01faXRlcmF0b3JzKDApLCBfTV9jb25zdF9pdGVyYXRvcnMoMCksIF9NX3ZlcnNpb24oMSkKKyAgICB7IH0KKworICAgIC8qKiBOb3RpZnkgYWxsIGl0ZXJhdG9ycyB0aGF0IHJlZmVyZW5jZSB0aGlzIHNlcXVlbmNlIHRoYXQgdGhlCisJc2VxdWVuY2UgaXMgYmVpbmcgZGVzdHJveWVkLiAqLworICAgIH5fU2FmZV9zZXF1ZW5jZV9iYXNlKCkKKyAgICB7IHRoaXMtPl9NX2RldGFjaF9hbGwoKTsgfQorCisgICAgLyoqIERldGFjaCBhbGwgaXRlcmF0b3JzLCBsZWF2aW5nIHRoZW0gc2luZ3VsYXIuICovCisgICAgdm9pZAorICAgIF9NX2RldGFjaF9hbGwoKTsKKworICAgIC8qKiBEZXRhY2ggYWxsIHNpbmd1bGFyIGl0ZXJhdG9ycy4KKyAgICAgKiAgQHBvc3QgZm9yIGFsbCBpdGVyYXRvcnMgaSBhdHRhY2hlZCB0byB0aGlzIHNlcXVlbmNlLAorICAgICAqICAgaS0+X01fdmVyc2lvbiA9PSBfTV92ZXJzaW9uLgorICAgICAqLworICAgIHZvaWQKKyAgICBfTV9kZXRhY2hfc2luZ3VsYXIoKTsKKworICAgIC8qKiBSZXZhbGlkYXRlcyBhbGwgYXR0YWNoZWQgc2luZ3VsYXIgaXRlcmF0b3JzLiAgVGhpcyBtZXRob2QgbWF5CisgICAgICogIGJlIHVzZWQgdG8gdmFsaWRhdGUgaXRlcmF0b3JzIHRoYXQgd2VyZSBpbnZhbGlkYXRlZCBiZWZvcmUKKyAgICAgKiAgKGJ1dCBmb3Igc29tZSByZWFzb24sIHN1Y2ggYXMgYW4gZXhjZXB0aW9uLCBuZWVkIHRvIGJlY29tZQorICAgICAqICB2YWxpZCBhZ2FpbikuCisgICAgICovCisgICAgdm9pZAorICAgIF9NX3JldmFsaWRhdGVfc2luZ3VsYXIoKTsKKworICAgIC8qKiBTd2FwIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgZ2l2ZW4gc2VxdWVuY2UuIFRoaXMgb3BlcmF0aW9uCisgICAgICogIGFsc28gc3dhcHMgb3duZXJzaGlwIG9mIHRoZSBpdGVyYXRvcnMsIHNvIHRoYXQgd2hlbiB0aGUKKyAgICAgKiAgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIGFsbCBpdGVyYXRvcnMgdGhhdCBvcmlnaW5hbGx5IHJlZmVyZW5jZWQKKyAgICAgKiAgb25lIGNvbnRhaW5lciBub3cgcmVmZXJlbmNlIHRoZSBvdGhlciBjb250YWluZXIuCisgICAgICovCisgICAgdm9pZAorICAgIF9NX3N3YXAoX1NhZmVfc2VxdWVuY2VfYmFzZSYgX194KTsKKworICAgIC8qKiBGb3IgdXNlIGluIF9TYWZlX3NlcXVlbmNlLiAqLworICAgIF9fZ251X2N4eDo6X19tdXRleCYgX01fZ2V0X211dGV4KCkgdGhyb3cgKCk7CisKKyAgcHVibGljOgorICAgIC8qKiBJbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzLiAqLworICAgIHZvaWQKKyAgICBfTV9pbnZhbGlkYXRlX2FsbCgpIGNvbnN0CisgICAgeyBpZiAoKytfTV92ZXJzaW9uID09IDApIF9NX3ZlcnNpb24gPSAxOyB9CisKKyAgICAvKiogQXR0YWNoIGFuIGl0ZXJhdG9yIHRvIHRoaXMgc2VxdWVuY2UuICovCisgICAgdm9pZAorICAgIF9NX2F0dGFjaChfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2l0LCBib29sIF9fY29uc3RhbnQpOworCisgICAgLyoqIExpa2V3aXNlIGJ1dCBub3QgdGhyZWFkIHNhZmUuICovCisgICAgdm9pZAorICAgIF9NX2F0dGFjaF9zaW5nbGUoX1NhZmVfaXRlcmF0b3JfYmFzZSogX19pdCwgYm9vbCBfX2NvbnN0YW50KSB0aHJvdyAoKTsKKworICAgIC8qKiBEZXRhY2ggYW4gaXRlcmF0b3IgZnJvbSB0aGlzIHNlcXVlbmNlICovCisgICAgdm9pZAorICAgIF9NX2RldGFjaChfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2l0KTsKKworICAgIC8qKiBMaWtld2lzZSBidXQgbm90IHRocmVhZCBzYWZlLiAqLworICAgIHZvaWQKKyAgICBfTV9kZXRhY2hfc2luZ2xlKF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9faXQpIHRocm93ICgpOworICB9OworfSAvLyBuYW1lc3BhY2UgX19nbnVfZGVidWcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NhZmVfaXRlcmF0b3IuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV9pdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTk3MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NhZmVfaXRlcmF0b3IuaApAQCAtMCwwICsxLDcxOSBAQAorLy8gU2FmZSBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3NhZmVfaXRlcmF0b3IuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfU0FGRV9JVEVSQVRPUl9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1NBRkVfSVRFUkFUT1JfSCAxCisKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRlYnVnL21hY3Jvcy5oPgorI2luY2x1ZGUgPGRlYnVnL2Z1bmN0aW9ucy5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3BhaXIuaD4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKworbmFtZXNwYWNlIF9fZ251X2RlYnVnCit7CisgIC8qKiBIZWxwZXIgc3RydWN0IHRvIGRlYWwgd2l0aCBzZXF1ZW5jZSBvZmZlcmluZyBhIGJlZm9yZV9iZWdpbgorICAgKiAgaXRlcmF0b3IuCisgICAqKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBzdHJ1Y3QgX0JlZm9yZUJlZ2luSGVscGVyCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIF9JdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0OjppdGVyYXRvcl90eXBlIF9CYXNlSXQ7CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfU19JcyhfQmFzZUl0LCBjb25zdCBfU2VxdWVuY2UqKQorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIF9TX0lzX0JlZ2lubmVzdChfQmFzZUl0IF9faXQsIGNvbnN0IF9TZXF1ZW5jZSogX19zZXEpCisgICAgICB7IHJldHVybiBfX2l0ID09IF9fc2VxLT5fTV9iYXNlKCkuYmVnaW4oKTsgfQorICAgIH07CisKKyAgLyoqIEl0ZXJhdG9ycyB0aGF0IGRlcml2ZSBmcm9tIF9TYWZlX2l0ZXJhdG9yX2Jhc2UgYnV0IHRoYXQgYXJlbid0CisgICAqICBfU2FmZV9pdGVyYXRvcnMgY2FuIGJlIGRldGVybWluZWQgc2luZ3VsYXIgb3Igbm9uLXNpbmd1bGFyIHZpYQorICAgKiAgX1NhZmVfaXRlcmF0b3JfYmFzZS4KKyAgICovCisgIGlubGluZSBib29sIAorICBfX2NoZWNrX3Npbmd1bGFyX2F1eChjb25zdCBfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX3gpCisgIHsgcmV0dXJuIF9feC0+X01fc2luZ3VsYXIoKTsgfQorCisgIC8qKiBUaGUgcHJlY2lzaW9uIHRvIHdoaWNoIHdlIGNhbiBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4KKyAgICogIHR3byBpdGVyYXRvcnMuCisgICAqLworICBlbnVtIF9EaXN0YW5jZV9wcmVjaXNpb24KKyAgICB7CisgICAgICBfX2RwX2VxdWFsaXR5LCAvLzwgQ2FuIGNvbXBhcmUgaXRlcmF0b3IgZXF1YWxpdHksIG9ubHkKKyAgICAgIF9fZHBfc2lnbiwgICAgIC8vPCBDYW4gZGV0ZXJtaW5lIGVxdWFsaXR5IGFuZCBvcmRlcmluZworICAgICAgX19kcF9leGFjdCAgICAgLy88IENhbiBkZXRlcm1pbmUgZGlzdGFuY2UgcHJlY2lzZWx5CisgICAgfTsKKworICAvKiogRGV0ZXJtaW5lIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBpdGVyYXRvcnMgd2l0aCBzb21lIGtub3duCisgICAqCXByZWNpc2lvbi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yMSwgdHlwZW5hbWUgX0l0ZXJhdG9yMj4KKyAgICBpbmxpbmUgc3RkOjpwYWlyPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcjE+OjpkaWZmZXJlbmNlX3R5cGUsCisJCSAgICAgX0Rpc3RhbmNlX3ByZWNpc2lvbj4KKyAgICBfX2dldF9kaXN0YW5jZShjb25zdCBfSXRlcmF0b3IxJiBfX2xocywgY29uc3QgX0l0ZXJhdG9yMiYgX19yaHMsCisJCSAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIoX19yaHMgLSBfX2xocywgX19kcF9leGFjdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IxLCB0eXBlbmFtZSBfSXRlcmF0b3IyPgorICAgIGlubGluZSBzdGQ6OnBhaXI8dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yMT46OmRpZmZlcmVuY2VfdHlwZSwKKwkJICAgICBfRGlzdGFuY2VfcHJlY2lzaW9uPgorICAgIF9fZ2V0X2Rpc3RhbmNlKGNvbnN0IF9JdGVyYXRvcjEmIF9fbGhzLCBjb25zdCBfSXRlcmF0b3IyJiBfX3JocywKKwkJICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihfX2xocyA9PSBfX3Jocz8gMCA6IDEsIF9fZHBfZXF1YWxpdHkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yMSwgdHlwZW5hbWUgX0l0ZXJhdG9yMj4KKyAgICBpbmxpbmUgc3RkOjpwYWlyPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcjE+OjpkaWZmZXJlbmNlX3R5cGUsCisJCSAgICAgX0Rpc3RhbmNlX3ByZWNpc2lvbj4KKyAgICBfX2dldF9kaXN0YW5jZShjb25zdCBfSXRlcmF0b3IxJiBfX2xocywgY29uc3QgX0l0ZXJhdG9yMiYgX19yaHMpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3IxPjo6aXRlcmF0b3JfY2F0ZWdvcnkKKwkgIF9DYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX2dldF9kaXN0YW5jZShfX2xocywgX19yaHMsIF9DYXRlZ29yeSgpKTsKKyAgICB9CisKKyAgLyoqIFxicmllZiBTYWZlIGl0ZXJhdG9yIHdyYXBwZXIuCisgICAqCisgICAqICBUaGUgY2xhc3MgdGVtcGxhdGUgJV9TYWZlX2l0ZXJhdG9yIGlzIGEgd3JhcHBlciBhcm91bmQgYW4KKyAgICogIGl0ZXJhdG9yIHRoYXQgdHJhY2tzIHRoZSBpdGVyYXRvcidzIG1vdmVtZW50IGFtb25nIHNlcXVlbmNlcyBhbmQKKyAgICogIGNoZWNrcyB0aGF0IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSAic2FmZSIgaXRlcmF0b3IgYXJlCisgICAqICBsZWdhbC4gSW4gYWRkaXRpb25hbCB0byB0aGUgYmFzaWMgaXRlcmF0b3Igb3BlcmF0aW9ucyAod2hpY2ggYXJlCisgICAqICB2YWxpZGF0ZWQsIGFuZCB0aGVuIHBhc3NlZCB0byB0aGUgdW5kZXJseWluZyBpdGVyYXRvciksCisgICAqICAlX1NhZmVfaXRlcmF0b3IgaGFzIG1lbWJlciBmdW5jdGlvbnMgZm9yIGl0ZXJhdG9yIGludmFsaWRhdGlvbiwKKyAgICogIGF0dGFjaGluZy9kZXRhY2hpbmcgdGhlIGl0ZXJhdG9yIGZyb20gc2VxdWVuY2VzLCBhbmQgcXVlcnlpbmcKKyAgICogIHRoZSBpdGVyYXRvcidzIHN0YXRlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgY2xhc3MgX1NhZmVfaXRlcmF0b3IgOiBwdWJsaWMgX1NhZmVfaXRlcmF0b3JfYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgX1NhZmVfaXRlcmF0b3IgX1NlbGY7CisKKyAgICAgIC8vLyBUaGUgdW5kZXJseWluZyBpdGVyYXRvcgorICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CisKKyAgICAgIC8vLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGNvbnN0YW50IGl0ZXJhdG9yLgorICAgICAgYm9vbAorICAgICAgX01fY29uc3RhbnQoKSBjb25zdAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKwlyZXR1cm4gc3RkOjpfX2FyZV9zYW1lPGNvbnN0X2l0ZXJhdG9yLCBfU2FmZV9pdGVyYXRvcj46Ol9fdmFsdWU7CisgICAgICB9CisKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPiBfVHJhaXRzOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6dmFsdWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6ZGlmZmVyZW5jZV90eXBlICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpyZWZlcmVuY2UgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CisKKyAgICAgIC8vLyBAcG9zdCB0aGUgaXRlcmF0b3IgaXMgc2luZ3VsYXIgYW5kIHVuYXR0YWNoZWQKKyAgICAgIF9TYWZlX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNhZmUgaXRlcmF0b3IgY29uc3RydWN0aW9uIGZyb20gYW4gdW5zYWZlIGl0ZXJhdG9yIGFuZAorICAgICAgICogaXRzIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIEBwcmUgQHAgc2VxIGlzIG5vdCBOVUxMCisgICAgICAgKiBAcG9zdCB0aGlzIGlzIG5vdCBzaW5ndWxhcgorICAgICAgICovCisgICAgICBfU2FmZV9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSwgY29uc3QgX1NlcXVlbmNlKiBfX3NlcSkKKyAgICAgIDogX1NhZmVfaXRlcmF0b3JfYmFzZShfX3NlcSwgX01fY29uc3RhbnQoKSksIF9NX2N1cnJlbnQoX19pKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIHRoaXMtPl9NX3Npbmd1bGFyKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2luaXRfc2luZ3VsYXIpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGNvbnN0cnVjdGlvbi4KKyAgICAgICAqLworICAgICAgX1NhZmVfaXRlcmF0b3IoY29uc3QgX1NhZmVfaXRlcmF0b3ImIF9feCkKKyAgICAgIDogX1NhZmVfaXRlcmF0b3JfYmFzZShfX3gsIF9NX2NvbnN0YW50KCkpLCBfTV9jdXJyZW50KF9feC5fTV9jdXJyZW50KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA0MDguIElzIHZlY3RvcjxyZXZlcnNlX2l0ZXJhdG9yPGNoYXIqPiA+IGZvcmJpZGRlbj8KKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCisJCQkgICAgICB8fCBfX3guX01fY3VycmVudCA9PSBfSXRlcmF0b3IoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfaW5pdF9jb3B5X3Npbmd1bGFyKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpCisJCQkgICAgICAuX01faXRlcmF0b3IoX194LCAib3RoZXIiKSk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBNb3ZlIGNvbnN0cnVjdGlvbi4KKyAgICAgICAqIEBwb3N0IF9feCBpcyBzaW5ndWxhciBhbmQgdW5hdHRhY2hlZAorICAgICAgICovCisgICAgICBfU2FmZV9pdGVyYXRvcihfU2FmZV9pdGVyYXRvciYmIF9feCkgOiBfTV9jdXJyZW50KCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCisJCQkgICAgICB8fCBfX3guX01fY3VycmVudCA9PSBfSXRlcmF0b3IoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfaW5pdF9jb3B5X3Npbmd1bGFyKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpCisJCQkgICAgICAuX01faXRlcmF0b3IoX194LCAib3RoZXIiKSk7CisJc3RkOjpzd2FwKF9NX2N1cnJlbnQsIF9feC5fTV9jdXJyZW50KTsKKwl0aGlzLT5fTV9hdHRhY2goX194Ll9NX3NlcXVlbmNlKTsKKwlfX3guX01fZGV0YWNoKCk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIENvbnZlcnRpbmcgY29uc3RydWN0b3IgZnJvbSBhIG11dGFibGUgaXRlcmF0b3IgdG8gYQorICAgICAgICogIGNvbnN0YW50IGl0ZXJhdG9yLgorICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9NdXRhYmxlSXRlcmF0b3I+CisgICAgICAgIF9TYWZlX2l0ZXJhdG9yKAorICAgICAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9NdXRhYmxlSXRlcmF0b3IsCisgICAgICAgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwoc3RkOjpfX2FyZV9zYW1lPF9NdXRhYmxlSXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1NlcXVlbmNlOjppdGVyYXRvcjo6aXRlcmF0b3JfdHlwZT46Ol9fdmFsdWUpLAorICAgICAgICAgICAgICAgICAgIF9TZXF1ZW5jZT46Ol9fdHlwZT4mIF9feCkKKwk6IF9TYWZlX2l0ZXJhdG9yX2Jhc2UoX194LCBfTV9jb25zdGFudCgpKSwgX01fY3VycmVudChfX3guYmFzZSgpKQorICAgICAgICB7CisJICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAvLyBEUiA0MDguIElzIHZlY3RvcjxyZXZlcnNlX2l0ZXJhdG9yPGNoYXIqPiA+IGZvcmJpZGRlbj8KKwkgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghX194Ll9NX3Npbmd1bGFyKCkKKwkJCQl8fCBfX3guYmFzZSgpID09IF9JdGVyYXRvcigpLAorCQkJCV9NX21lc3NhZ2UoX19tc2dfaW5pdF9jb25zdF9zaW5ndWxhcikKKwkJCQkuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikKKwkJCQkuX01faXRlcmF0b3IoX194LCAib3RoZXIiKSk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGFzc2lnbm1lbnQuCisgICAgICAgKi8KKyAgICAgIF9TYWZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9TYWZlX2l0ZXJhdG9yJiBfX3gpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIERSIDQwOC4gSXMgdmVjdG9yPHJldmVyc2VfaXRlcmF0b3I8Y2hhcio+ID4gZm9yYmlkZGVuPworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSghX194Ll9NX3Npbmd1bGFyKCkKKwkJCSAgICAgIHx8IF9feC5fTV9jdXJyZW50ID09IF9JdGVyYXRvcigpLAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19jb3B5X3Npbmd1bGFyKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpCisJCQkgICAgICAuX01faXRlcmF0b3IoX194LCAib3RoZXIiKSk7CisJX01fY3VycmVudCA9IF9feC5fTV9jdXJyZW50OworCXRoaXMtPl9NX2F0dGFjaChfX3guX01fc2VxdWVuY2UpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIE1vdmUgYXNzaWdubWVudC4KKyAgICAgICAqIEBwb3N0IF9feCBpcyBzaW5ndWxhciBhbmQgdW5hdHRhY2hlZAorICAgICAgICovCisgICAgICBfU2FmZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShfU2FmZV9pdGVyYXRvciYmIF9feCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkodGhpcyAhPSAmX194LAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19zZWxmX21vdmVfYXNzaWduKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCisJCQkgICAgICB8fCBfX3guX01fY3VycmVudCA9PSBfSXRlcmF0b3IoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfY29weV9zaW5ndWxhcikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9feCwgIm90aGVyIikpOworCV9NX2N1cnJlbnQgPSBfX3guX01fY3VycmVudDsKKwlfTV9hdHRhY2goX194Ll9NX3NlcXVlbmNlKTsKKwlfX3guX01fZGV0YWNoKCk7CisJX194Ll9NX2N1cnJlbnQgPSBfSXRlcmF0b3IoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEl0ZXJhdG9yIGRlcmVmZXJlbmNlLgorICAgICAgICogIEBwcmUgaXRlcmF0b3IgaXMgZGVyZWZlcmVuY2VhYmxlCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkodGhpcy0+X01fZGVyZWZlcmVuY2VhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9kZXJlZikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKSk7CisJcmV0dXJuICpfTV9jdXJyZW50OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSXRlcmF0b3IgZGVyZWZlcmVuY2UuCisgICAgICAgKiAgQHByZSBpdGVyYXRvciBpcyBkZXJlZmVyZW5jZWFibGUKKyAgICAgICAqICBAdG9kbyBNYWtlIHRoaXMgY29ycmVjdCB3LnIudC4gaXRlcmF0b3JzIHRoYXQgcmV0dXJuIHByb3hpZXMKKyAgICAgICAqICBAdG9kbyBVc2UgYWRkcmVzc29mKCkgaW5zdGVhZCBvZiAmIG9wZXJhdG9yCisgICAgICAgKi8KKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9kZXJlZmVyZW5jZWFibGUoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfYmFkX2RlcmVmKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKKwlyZXR1cm4gJipfTV9jdXJyZW50OworICAgICAgfQorCisgICAgICAvLyAtLS0tLS0gSW5wdXQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIC0tLS0tLQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEl0ZXJhdG9yIHByZWluY3JlbWVudAorICAgICAgICogIEBwcmUgaXRlcmF0b3IgaXMgaW5jcmVtZW50YWJsZQorICAgICAgICovCisgICAgICBfU2FmZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9pbmNyZW1lbnRhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9pbmMpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOworCSsrX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJdGVyYXRvciBwb3N0aW5jcmVtZW50CisgICAgICAgKiAgQHByZSBpdGVyYXRvciBpcyBpbmNyZW1lbnRhYmxlCisgICAgICAgKi8KKyAgICAgIF9TYWZlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkodGhpcy0+X01faW5jcmVtZW50YWJsZSgpLAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19iYWRfaW5jKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKKwlfU2FmZV9pdGVyYXRvciBfX3RtcCgqdGhpcyk7CisJKytfTV9jdXJyZW50OworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgLy8gLS0tLS0tIEJpZGlyZWN0aW9uYWwgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIC0tLS0tLQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEl0ZXJhdG9yIHByZWRlY3JlbWVudAorICAgICAgICogIEBwcmUgaXRlcmF0b3IgaXMgZGVjcmVtZW50YWJsZQorICAgICAgICovCisgICAgICBfU2FmZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yLS0oKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9kZWNyZW1lbnRhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9kZWMpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOworCS0tX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJdGVyYXRvciBwb3N0ZGVjcmVtZW50CisgICAgICAgKiAgQHByZSBpdGVyYXRvciBpcyBkZWNyZW1lbnRhYmxlCisgICAgICAgKi8KKyAgICAgIF9TYWZlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkodGhpcy0+X01fZGVjcmVtZW50YWJsZSgpLAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19iYWRfZGVjKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKKwlfU2FmZV9pdGVyYXRvciBfX3RtcCgqdGhpcyk7CisJLS1fTV9jdXJyZW50OworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgLy8gLS0tLS0tIFJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIC0tLS0tLQorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9jYW5fYWR2YW5jZShfX24pCisJCQkgICAgICAmJiB0aGlzLT5fTV9jYW5fYWR2YW5jZShfX24rMSksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfc3Vic2NyaXB0X29vYikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcykuX01faW50ZWdlcihfX24pKTsKKworCXJldHVybiBfTV9jdXJyZW50W19fbl07CisgICAgICB9CisKKyAgICAgIF9TYWZlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkodGhpcy0+X01fY2FuX2FkdmFuY2UoX19uKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfYWR2YW5jZV9vb2IpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMpLl9NX2ludGVnZXIoX19uKSk7CisJX01fY3VycmVudCArPSBfX247CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2FmZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAorICAgICAgeworCV9TYWZlX2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwlfX3RtcCArPSBfX247CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICBfU2FmZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZKHRoaXMtPl9NX2Nhbl9hZHZhbmNlKC1fX24pLAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19yZXRyZWF0X29vYikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcykuX01faW50ZWdlcihfX24pKTsKKwlfTV9jdXJyZW50ICs9IC1fX247CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfU2FmZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAorICAgICAgeworCV9TYWZlX2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwlfX3RtcCAtPSBfX247CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICAvLyAtLS0tLS0gVXRpbGl0aWVzIC0tLS0tLQorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yCisgICAgICAgKi8KKyAgICAgIF9JdGVyYXRvcgorICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29udmVyc2lvbiB0byB1bmRlcmx5aW5nIG5vbi1kZWJ1ZyBpdGVyYXRvciB0byBhbGxvdworICAgICAgICogYmV0dGVyIGludGVyYWN0aW9uIHdpdGggbm9uLWRlYnVnIGNvbnRhaW5lcnMuCisgICAgICAgKi8KKyAgICAgIG9wZXJhdG9yIF9JdGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KKworICAgICAgLyoqIEF0dGFjaCBpdGVyYXRvciB0byB0aGUgZ2l2ZW4gc2VxdWVuY2UuICovCisgICAgICB2b2lkCisgICAgICBfTV9hdHRhY2goX1NhZmVfc2VxdWVuY2VfYmFzZSogX19zZXEpCisgICAgICB7CisJX1NhZmVfaXRlcmF0b3JfYmFzZTo6X01fYXR0YWNoKF9fc2VxLCBfTV9jb25zdGFudCgpKTsKKyAgICAgIH0KKworICAgICAgLyoqIExpa2V3aXNlLCBidXQgbm90IHRocmVhZC1zYWZlLiAqLworICAgICAgdm9pZAorICAgICAgX01fYXR0YWNoX3NpbmdsZShfU2FmZV9zZXF1ZW5jZV9iYXNlKiBfX3NlcSkKKyAgICAgIHsKKwlfU2FmZV9pdGVyYXRvcl9iYXNlOjpfTV9hdHRhY2hfc2luZ2xlKF9fc2VxLCBfTV9jb25zdGFudCgpKTsKKyAgICAgIH0KKworICAgICAgLy8vIElzIHRoZSBpdGVyYXRvciBkZXJlZmVyZW5jZWFibGU/CisgICAgICBib29sCisgICAgICBfTV9kZXJlZmVyZW5jZWFibGUoKSBjb25zdAorICAgICAgeyByZXR1cm4gIXRoaXMtPl9NX3Npbmd1bGFyKCkgJiYgIV9NX2lzX2VuZCgpICYmICFfTV9pc19iZWZvcmVfYmVnaW4oKTsgfQorCisgICAgICAvLy8gSXMgdGhlIGl0ZXJhdG9yIGJlZm9yZSBhIGRlcmVmZXJlbmNlYWJsZSBvbmU/CisgICAgICBib29sCisgICAgICBfTV9iZWZvcmVfZGVyZWZlcmVuY2VhYmxlKCkgY29uc3QKKyAgICAgIHsKKwlpZiAodGhpcy0+X01faW5jcmVtZW50YWJsZSgpKQorCXsKKwkgIF9JdGVyYXRvciBfX2Jhc2UgPSBiYXNlKCk7CisJICByZXR1cm4gKytfX2Jhc2UgIT0gX01fZ2V0X3NlcXVlbmNlKCktPl9NX2Jhc2UoKS5lbmQoKTsKKwl9CisJcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICAvLy8gSXMgdGhlIGl0ZXJhdG9yIGluY3JlbWVudGFibGU/CisgICAgICBib29sCisgICAgICBfTV9pbmNyZW1lbnRhYmxlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICF0aGlzLT5fTV9zaW5ndWxhcigpICYmICFfTV9pc19lbmQoKTsgfQorCisgICAgICAvLyBJcyB0aGUgaXRlcmF0b3IgZGVjcmVtZW50YWJsZT8KKyAgICAgIGJvb2wKKyAgICAgIF9NX2RlY3JlbWVudGFibGUoKSBjb25zdCB7IHJldHVybiAhX01fc2luZ3VsYXIoKSAmJiAhX01faXNfYmVnaW4oKTsgfQorCisgICAgICAvLyBDYW4gd2UgYWR2YW5jZSB0aGUgaXRlcmF0b3IgQHAgX19uIHN0ZXBzIChAcCBfX24gbWF5IGJlIG5lZ2F0aXZlKQorICAgICAgYm9vbAorICAgICAgX01fY2FuX2FkdmFuY2UoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0OworCisgICAgICAvLyBJcyB0aGUgaXRlcmF0b3IgcmFuZ2UgWyp0aGlzLCBfX3JocykgdmFsaWQ/CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3RoZXI+CisgICAgICAgIGJvb2wKKyAgICAgICAgX01fdmFsaWRfcmFuZ2UoY29uc3QgX1NhZmVfaXRlcmF0b3I8X090aGVyLCBfU2VxdWVuY2U+JiBfX3JocykgY29uc3Q7CisKKyAgICAgIC8vIFRoZSBzZXF1ZW5jZSB0aGlzIGl0ZXJhdG9yIHJlZmVyZW5jZXMuCisgICAgICBjb25zdCBfU2VxdWVuY2UqCisgICAgICBfTV9nZXRfc2VxdWVuY2UoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX1NlcXVlbmNlKj4oX01fc2VxdWVuY2UpOyB9CisKKyAgICAgIC8vLyBJcyB0aGlzIGl0ZXJhdG9yIGVxdWFsIHRvIHRoZSBzZXF1ZW5jZSdzIGJlZ2luKCkgaXRlcmF0b3I/CisgICAgICBib29sIF9NX2lzX2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGJhc2UoKSA9PSBfTV9nZXRfc2VxdWVuY2UoKS0+X01fYmFzZSgpLmJlZ2luKCk7IH0KKworICAgICAgLy8vIElzIHRoaXMgaXRlcmF0b3IgZXF1YWwgdG8gdGhlIHNlcXVlbmNlJ3MgZW5kKCkgaXRlcmF0b3I/CisgICAgICBib29sIF9NX2lzX2VuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBiYXNlKCkgPT0gX01fZ2V0X3NlcXVlbmNlKCktPl9NX2Jhc2UoKS5lbmQoKTsgfQorCisgICAgICAvLy8gSXMgdGhpcyBpdGVyYXRvciBlcXVhbCB0byB0aGUgc2VxdWVuY2UncyBiZWZvcmVfYmVnaW4oKSBpdGVyYXRvciBpZgorICAgICAgLy8vIGFueT8KKyAgICAgIGJvb2wgX01faXNfYmVmb3JlX2JlZ2luKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX0JlZm9yZUJlZ2luSGVscGVyPF9TZXF1ZW5jZT46Ol9TX0lzKGJhc2UoKSwgX01fZ2V0X3NlcXVlbmNlKCkpOworICAgICAgfQorCisgICAgICAvLy8gSXMgdGhpcyBpdGVyYXRvciBlcXVhbCB0byB0aGUgc2VxdWVuY2UncyBiZWZvcmVfYmVnaW4oKSBpdGVyYXRvciBpZgorICAgICAgLy8vIGFueSBvciBiZWdpbigpIG90aGVyd2lzZT8KKyAgICAgIGJvb2wgX01faXNfYmVnaW5uZXN0KCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX0JlZm9yZUJlZ2luSGVscGVyPF9TZXF1ZW5jZT46Ol9TX0lzX0JlZ2lubmVzdChiYXNlKCksCisJCQkJCQkJICBfTV9nZXRfc2VxdWVuY2UoKSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfY29tcGFyZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9jb21wYXJlX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19jb21wYXJlX2RpZmZlcmVudCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfY29tcGFyZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9jb21wYXJlX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19jb21wYXJlX2RpZmZlcmVudCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgX19saHMuX01fc2luZ3VsYXIoKSAmJiAhIF9fcmhzLl9NX3Npbmd1bGFyKCksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19pdGVyX29yZGVyX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19vcmRlcl9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgX19saHMuX01fc2luZ3VsYXIoKSAmJiAhIF9fcmhzLl9NX3Npbmd1bGFyKCksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19pdGVyX29yZGVyX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19vcmRlcl9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfb3JkZXJfYmFkKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fbGhzLl9NX2Nhbl9jb21wYXJlKF9fcmhzKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX29yZGVyX2RpZmZlcmVudCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKyAgICAgICAgICAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgX19saHMuX01fc2luZ3VsYXIoKSAmJiAhIF9fcmhzLl9NX3Npbmd1bGFyKCksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19pdGVyX29yZGVyX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19vcmRlcl9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9vcmRlcl9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfb3JkZXJfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9vcmRlcl9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfb3JkZXJfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCEgX19saHMuX01fc2luZ3VsYXIoKSAmJiAhIF9fcmhzLl9NX3Npbmd1bGFyKCksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19pdGVyX29yZGVyX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19vcmRlcl9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfaXRlcl9vcmRlcl9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfb3JkZXJfZGlmZmVyZW50KQorCQkJICAgIC5fTV9pdGVyYXRvcihfX2xocywgImxocyIpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7CisgICAgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gQWNjb3JkaW5nIHRvIHRoZSByZXNvbHV0aW9uIG9mIERSMTc5IG5vdCBvbmx5IHRoZSB2YXJpb3VzIGNvbXBhcmlzb24KKyAgLy8gb3BlcmF0b3JzIGJ1dCBhbHNvIG9wZXJhdG9yLSBtdXN0IGFjY2VwdCBtaXhlZCBpdGVyYXRvci9jb25zdF9pdGVyYXRvcgorICAvLyBwYXJhbWV0ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIHR5cGVuYW1lIF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT46OmRpZmZlcmVuY2VfdHlwZQorICAgIG9wZXJhdG9yLShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2Rpc3RhbmNlX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgX01fbWVzc2FnZShfX21zZ19kaXN0YW5jZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICByZXR1cm4gX19saHMuYmFzZSgpIC0gX19yaHMuYmFzZSgpOworICAgIH0KKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgIGlubGluZSB0eXBlbmFtZSBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT46OmRpZmZlcmVuY2VfdHlwZQorICAgICBvcGVyYXRvci0oY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICAgeworICAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWSghIF9fbGhzLl9NX3Npbmd1bGFyKCkgJiYgISBfX3Jocy5fTV9zaW5ndWxhcigpLAorCQkJICAgICBfTV9tZXNzYWdlKF9fbXNnX2Rpc3RhbmNlX2JhZCkKKwkJCSAgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAgLl9NX2l0ZXJhdG9yKF9fcmhzLCAicmhzIikpOworICAgICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX2xocy5fTV9jYW5fY29tcGFyZShfX3JocyksCisJCQkgICAgIF9NX21lc3NhZ2UoX19tc2dfZGlzdGFuY2VfZGlmZmVyZW50KQorCQkJICAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICAgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsKKyAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4KKyAgICBvcGVyYXRvcisodHlwZW5hbWUgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLF9TZXF1ZW5jZT46OmRpZmZlcmVuY2VfdHlwZSBfX24sCisJICAgICAgY29uc3QgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2kpCisgICAgeyByZXR1cm4gX19pICsgX19uOyB9Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZworCisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci50Y2M+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX2l0ZXJhdG9yLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV9pdGVyYXRvci50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhOWM2YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV9pdGVyYXRvci50Y2MKQEAgLTAsMCArMSwxMDYgQEAKKy8vIERlYnVnZ2luZyBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbiAob3V0IG9mIGxpbmUpIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9zYWZlX2l0ZXJhdG9yLnRjYworICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfU0FGRV9JVEVSQVRPUl9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU0FGRV9JVEVSQVRPUl9UQ0MgMQorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgYm9vbAorICAgIF9TYWZlX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPjo6CisgICAgX01fY2FuX2FkdmFuY2UoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2RlYnVnX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25zdF9kZWJ1Z19pdGVyYXRvcjo6aXRlcmF0b3JfdHlwZSBjb25zdF9pdGVyYXRvcjsKKworICAgICAgaWYgKHRoaXMtPl9NX3Npbmd1bGFyKCkpCisJcmV0dXJuIGZhbHNlOworICAgICAgaWYgKF9fbiA9PSAwKQorCXJldHVybiB0cnVlOworICAgICAgaWYgKF9fbiA8IDApCisJeworCSAgY29uc3RfaXRlcmF0b3IgX19iZWdpbiA9IF9NX2dldF9zZXF1ZW5jZSgpLT5fTV9iYXNlKCkuYmVnaW4oKTsKKwkgIHN0ZDo6cGFpcjxkaWZmZXJlbmNlX3R5cGUsIF9EaXN0YW5jZV9wcmVjaXNpb24+IF9fZGlzdCA9CisJICAgIF9fZ2V0X2Rpc3RhbmNlKF9fYmVnaW4sIGJhc2UoKSk7CisJICBib29sIF9fb2sgPSAgKChfX2Rpc3Quc2Vjb25kID09IF9fZHBfZXhhY3QgJiYgX19kaXN0LmZpcnN0ID49IC1fX24pCisJCQl8fCAoX19kaXN0LnNlY29uZCAhPSBfX2RwX2V4YWN0ICYmIF9fZGlzdC5maXJzdCA+IDApKTsKKwkgIHJldHVybiBfX29rOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBjb25zdF9pdGVyYXRvciBfX2VuZCA9IF9NX2dldF9zZXF1ZW5jZSgpLT5fTV9iYXNlKCkuZW5kKCk7CisJICBzdGQ6OnBhaXI8ZGlmZmVyZW5jZV90eXBlLCBfRGlzdGFuY2VfcHJlY2lzaW9uPiBfX2Rpc3QgPQorCSAgICBfX2dldF9kaXN0YW5jZShiYXNlKCksIF9fZW5kKTsKKwkgIGJvb2wgX19vayA9ICgoX19kaXN0LnNlY29uZCA9PSBfX2RwX2V4YWN0ICYmIF9fZGlzdC5maXJzdCA+PSBfX24pCisJCSAgICAgICB8fCAoX19kaXN0LnNlY29uZCAhPSBfX2RwX2V4YWN0ICYmIF9fZGlzdC5maXJzdCA+IDApKTsKKwkgIHJldHVybiBfX29rOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX090aGVyPgorICAgICAgYm9vbAorICAgICAgX1NhZmVfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+OjoKKyAgICAgIF9NX3ZhbGlkX3JhbmdlKGNvbnN0IF9TYWZlX2l0ZXJhdG9yPF9PdGhlciwgX1NlcXVlbmNlPiYgX19yaHMpIGNvbnN0CisgICAgICB7CisJaWYgKCFfTV9jYW5fY29tcGFyZShfX3JocykpCisJICByZXR1cm4gZmFsc2U7CisKKwkvKiBEZXRlcm1pbmUgaWYgd2UgY2FuIG9yZGVyIHRoZSBpdGVyYXRvcnMgd2l0aG91dCB0aGUgaGVscCBvZgorCSAgIHRoZSBjb250YWluZXIgKi8KKwlzdGQ6OnBhaXI8ZGlmZmVyZW5jZV90eXBlLCBfRGlzdGFuY2VfcHJlY2lzaW9uPiBfX2Rpc3QgPQorCSAgX19nZXRfZGlzdGFuY2UoYmFzZSgpLCBfX3Jocy5iYXNlKCkpOworCXN3aXRjaCAoX19kaXN0LnNlY29uZCkgeworCWNhc2UgX19kcF9lcXVhbGl0eToKKwkgIGlmIChfX2Rpc3QuZmlyc3QgPT0gMCkKKwkgICAgcmV0dXJuIHRydWU7CisJICBicmVhazsKKworCWNhc2UgX19kcF9zaWduOgorCWNhc2UgX19kcF9leGFjdDoKKwkgIHJldHVybiBfX2Rpc3QuZmlyc3QgPj0gMDsKKwl9CisKKwkvKiBXZSBjYW4gb25seSB0ZXN0IGZvciBlcXVhbGl0eSwgYnV0IGNoZWNrIGlmIG9uZSBvZiB0aGUKKwkgICBpdGVyYXRvcnMgaXMgYXQgYW4gZXh0cmVtZS4gKi8KKwkvKiBPcHRpbSBmb3IgY2xhc3NpYyBbYmVnaW4sIGl0KSBvciBbaXQsIGVuZCkgcmFuZ2VzLCBsaW1pdCBjaGVja3MKKwkgKiB3aGVuIGNvZGUgaXMgdmFsaWQuICBOb3RlLCBmb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiBmb3J3YXJkX2xpc3QsCisJICogYmVmb3JlX2JlZ2luIHJlcGxhY2VzIHRoZSByb2xlIG9mIGJlZ2luLiAgKi8gCisJaWYgKF9NX2lzX2JlZ2lubmVzdCgpIHx8IF9fcmhzLl9NX2lzX2VuZCgpKQorCSAgcmV0dXJuIHRydWU7CisJaWYgKF9NX2lzX2VuZCgpIHx8IF9fcmhzLl9NX2lzX2JlZ2lubmVzdCgpKQorCSAgcmV0dXJuIGZhbHNlOworCisJLy8gQXNzdW1lIHRoYXQgdGhpcyBpcyBhIHZhbGlkIHJhbmdlOyB3ZSBjYW4ndCBjaGVjayBhbnl0aGluZyBlbHNlCisJcmV0dXJuIHRydWU7CisgICAgICB9Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NhZmVfbG9jYWxfaXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDI2ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLmgKQEAgLTAsMCArMSwzNjkgQEAKKy8vIFNhZmUgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24gIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1NBRkVfTE9DQUxfSVRFUkFUT1JfSAorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19TQUZFX0xPQ0FMX0lURVJBVE9SX0ggMQorCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9tYWNyb3MuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9mdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3Vub3JkZXJlZF9iYXNlLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisKK25hbWVzcGFjZSBfX2dudV9kZWJ1ZworeworICAvKiogXGJyaWVmIFNhZmUgaXRlcmF0b3Igd3JhcHBlci4KKyAgICoKKyAgICogIFRoZSBjbGFzcyB0ZW1wbGF0ZSAlX1NhZmVfbG9jYWxfaXRlcmF0b3IgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbgorICAgKiAgaXRlcmF0b3IgdGhhdCB0cmFja3MgdGhlIGl0ZXJhdG9yJ3MgbW92ZW1lbnQgYW1vbmcgc2VxdWVuY2VzIGFuZAorICAgKiAgY2hlY2tzIHRoYXQgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gdGhlICJzYWZlIiBpdGVyYXRvciBhcmUKKyAgICogIGxlZ2FsLiBJbiBhZGRpdGlvbmFsIHRvIHRoZSBiYXNpYyBpdGVyYXRvciBvcGVyYXRpb25zICh3aGljaCBhcmUKKyAgICogIHZhbGlkYXRlZCwgYW5kIHRoZW4gcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yKSwKKyAgICogICVfU2FmZV9sb2NhbF9pdGVyYXRvciBoYXMgbWVtYmVyIGZ1bmN0aW9ucyBmb3IgaXRlcmF0b3IgaW52YWxpZGF0aW9uLAorICAgKiAgYXR0YWNoaW5nL2RldGFjaGluZyB0aGUgaXRlcmF0b3IgZnJvbSBzZXF1ZW5jZXMsIGFuZCBxdWVyeWluZworICAgKiAgdGhlIGl0ZXJhdG9yJ3Mgc3RhdGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBjbGFzcyBfU2FmZV9sb2NhbF9pdGVyYXRvciA6IHB1YmxpYyBfU2FmZV9sb2NhbF9pdGVyYXRvcl9iYXNlCisgICAgeworICAgICAgdHlwZWRlZiBfU2FmZV9sb2NhbF9pdGVyYXRvciBfU2VsZjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjpzaXplX3R5cGUgc2l6ZV90eXBlOworCisgICAgICAvLy8gVGhlIHVuZGVybHlpbmcgaXRlcmF0b3IKKyAgICAgIF9JdGVyYXRvciBfTV9jdXJyZW50OworCisgICAgICAvLy8gVGhlIGJ1Y2tldCB0aGlzIGxvY2FsIGl0ZXJhdG9yIGJlbG9uZ3MgdG8gCisgICAgICBzaXplX3R5cGUgX01fYnVja2V0OworCisgICAgICAvLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBjb25zdGFudCBpdGVyYXRvci4KKyAgICAgIGJvb2wKKyAgICAgIF9NX2NvbnN0YW50KCkgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6Y29uc3RfbG9jYWxfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisJcmV0dXJuIHN0ZDo6X19hcmVfc2FtZTxjb25zdF9pdGVyYXRvciwgX1NhZmVfbG9jYWxfaXRlcmF0b3I+OjpfX3ZhbHVlOworICAgICAgfQorCisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX1RyYWl0czsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOworCisgICAgICAvLy8gQHBvc3QgdGhlIGl0ZXJhdG9yIGlzIHNpbmd1bGFyIGFuZCB1bmF0dGFjaGVkCisgICAgICBfU2FmZV9sb2NhbF9pdGVyYXRvcigpIDogX01fY3VycmVudCgpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTYWZlIGl0ZXJhdG9yIGNvbnN0cnVjdGlvbiBmcm9tIGFuIHVuc2FmZSBpdGVyYXRvciBhbmQKKyAgICAgICAqIGl0cyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiBAcHJlIEBwIHNlcSBpcyBub3QgTlVMTAorICAgICAgICogQHBvc3QgdGhpcyBpcyBub3Qgc2luZ3VsYXIKKyAgICAgICAqLworICAgICAgX1NhZmVfbG9jYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2ksIHNpemVfdHlwZSBfX2J1Y2tldCwKKwkJCSAgIGNvbnN0IF9TZXF1ZW5jZSogX19zZXEpCisgICAgICA6IF9TYWZlX2xvY2FsX2l0ZXJhdG9yX2Jhc2UoX19zZXEsIF9NX2NvbnN0YW50KCkpLCBfTV9jdXJyZW50KF9faSksCisJX01fYnVja2V0KF9fYnVja2V0KQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSghdGhpcy0+X01fc2luZ3VsYXIoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfaW5pdF9zaW5ndWxhcikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvcHkgY29uc3RydWN0aW9uLgorICAgICAgICovCisgICAgICBfU2FmZV9sb2NhbF9pdGVyYXRvcihjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvciYgX194KQorICAgICAgOiBfU2FmZV9sb2NhbF9pdGVyYXRvcl9iYXNlKF9feCwgX01fY29uc3RhbnQoKSksCisJX01fY3VycmVudChfX3guX01fY3VycmVudCksIF9NX2J1Y2tldChfX3guX01fYnVja2V0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA0MDguIElzIHZlY3RvcjxyZXZlcnNlX2l0ZXJhdG9yPGNoYXIqPiA+IGZvcmJpZGRlbj8KKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCisJCQkgICAgICB8fCBfX3guX01fY3VycmVudCA9PSBfSXRlcmF0b3IoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfaW5pdF9jb3B5X3Npbmd1bGFyKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpCisJCQkgICAgICAuX01faXRlcmF0b3IoX194LCAib3RoZXIiKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBDb252ZXJ0aW5nIGNvbnN0cnVjdG9yIGZyb20gYSBtdXRhYmxlIGl0ZXJhdG9yIHRvIGEKKyAgICAgICAqICBjb25zdGFudCBpdGVyYXRvci4KKyAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTXV0YWJsZUl0ZXJhdG9yPgorCV9TYWZlX2xvY2FsX2l0ZXJhdG9yKAorCSAgY29uc3QgX1NhZmVfbG9jYWxfaXRlcmF0b3I8X011dGFibGVJdGVyYXRvciwKKwkgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8c3RkOjpfX2FyZV9zYW1lPAorCSAgICAgIF9NdXRhYmxlSXRlcmF0b3IsCisJICAgICAgdHlwZW5hbWUgX1NlcXVlbmNlOjpsb2NhbF9pdGVyYXRvcjo6aXRlcmF0b3JfdHlwZT46Ol9fdmFsdWUsCisJCQkJCSAgX1NlcXVlbmNlPjo6X190eXBlPiYgX194KQorCTogX1NhZmVfbG9jYWxfaXRlcmF0b3JfYmFzZShfX3gsIF9NX2NvbnN0YW50KCkpLAorCSAgX01fY3VycmVudChfX3guYmFzZSgpKSwgX01fYnVja2V0KF9feC5fTV9idWNrZXQpCisJeworCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gRFIgNDA4LiBJcyB2ZWN0b3I8cmV2ZXJzZV9pdGVyYXRvcjxjaGFyKj4gPiBmb3JiaWRkZW4/CisJICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCisJCQkJfHwgX194LmJhc2UoKSA9PSBfSXRlcmF0b3IoKSwKKwkJCQlfTV9tZXNzYWdlKF9fbXNnX2luaXRfY29uc3Rfc2luZ3VsYXIpCisJCQkJLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpCisJCQkJLl9NX2l0ZXJhdG9yKF9feCwgIm90aGVyIikpOworCX0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29weSBhc3NpZ25tZW50LgorICAgICAgICovCisgICAgICBfU2FmZV9sb2NhbF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvciYgX194KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA0MDguIElzIHZlY3RvcjxyZXZlcnNlX2l0ZXJhdG9yPGNoYXIqPiA+IGZvcmJpZGRlbj8KKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCisJCQkgICAgICB8fCBfX3guX01fY3VycmVudCA9PSBfSXRlcmF0b3IoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfY29weV9zaW5ndWxhcikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9feCwgIm90aGVyIikpOworCV9NX2N1cnJlbnQgPSBfX3guX01fY3VycmVudDsKKwlfTV9idWNrZXQgPSBfX3guX01fYnVja2V0OworCXRoaXMtPl9NX2F0dGFjaChfX3guX01fc2VxdWVuY2UpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEl0ZXJhdG9yIGRlcmVmZXJlbmNlLgorICAgICAgICogIEBwcmUgaXRlcmF0b3IgaXMgZGVyZWZlcmVuY2VhYmxlCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkodGhpcy0+X01fZGVyZWZlcmVuY2VhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9kZXJlZikKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKSk7CisJcmV0dXJuICpfTV9jdXJyZW50OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSXRlcmF0b3IgZGVyZWZlcmVuY2UuCisgICAgICAgKiAgQHByZSBpdGVyYXRvciBpcyBkZXJlZmVyZW5jZWFibGUKKyAgICAgICAqICBAdG9kbyBNYWtlIHRoaXMgY29ycmVjdCB3LnIudC4gaXRlcmF0b3JzIHRoYXQgcmV0dXJuIHByb3hpZXMKKyAgICAgICAqICBAdG9kbyBVc2UgYWRkcmVzc29mKCkgaW5zdGVhZCBvZiAmIG9wZXJhdG9yCisgICAgICAgKi8KKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9kZXJlZmVyZW5jZWFibGUoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfYmFkX2RlcmVmKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKKwlyZXR1cm4gJipfTV9jdXJyZW50OworICAgICAgfQorCisgICAgICAvLyAtLS0tLS0gSW5wdXQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIC0tLS0tLQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEl0ZXJhdG9yIHByZWluY3JlbWVudAorICAgICAgICogIEBwcmUgaXRlcmF0b3IgaXMgaW5jcmVtZW50YWJsZQorICAgICAgICovCisgICAgICBfU2FmZV9sb2NhbF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9pbmNyZW1lbnRhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9pbmMpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOworCSsrX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJdGVyYXRvciBwb3N0aW5jcmVtZW50CisgICAgICAgKiAgQHByZSBpdGVyYXRvciBpcyBpbmNyZW1lbnRhYmxlCisgICAgICAgKi8KKyAgICAgIF9TYWZlX2xvY2FsX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19WRVJJRlkodGhpcy0+X01faW5jcmVtZW50YWJsZSgpLAorCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19iYWRfaW5jKQorCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKKwlfU2FmZV9sb2NhbF9pdGVyYXRvciBfX3RtcCgqdGhpcyk7CisJKytfTV9jdXJyZW50OworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKworICAgICAgLy8gLS0tLS0tIFV0aWxpdGllcyAtLS0tLS0KKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0aGUgdW5kZXJseWluZyBpdGVyYXRvcgorICAgICAgICovCisgICAgICBfSXRlcmF0b3IKKyAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0aGUgYnVja2V0CisgICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0KCkgY29uc3QgeyByZXR1cm4gX01fYnVja2V0OyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnZlcnNpb24gdG8gdW5kZXJseWluZyBub24tZGVidWcgaXRlcmF0b3IgdG8gYWxsb3cKKyAgICAgICAqIGJldHRlciBpbnRlcmFjdGlvbiB3aXRoIG5vbi1kZWJ1ZyBjb250YWluZXJzLgorICAgICAgICovCisgICAgICBvcGVyYXRvciBfSXRlcmF0b3IoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CisKKyAgICAgIC8qKiBBdHRhY2ggaXRlcmF0b3IgdG8gdGhlIGdpdmVuIHNlcXVlbmNlLiAqLworICAgICAgdm9pZAorICAgICAgX01fYXR0YWNoKF9TYWZlX3NlcXVlbmNlX2Jhc2UqIF9fc2VxKQorICAgICAgeyBfU2FmZV9pdGVyYXRvcl9iYXNlOjpfTV9hdHRhY2goX19zZXEsIF9NX2NvbnN0YW50KCkpOyB9CisKKyAgICAgIC8qKiBMaWtld2lzZSwgYnV0IG5vdCB0aHJlYWQtc2FmZS4gKi8KKyAgICAgIHZvaWQKKyAgICAgIF9NX2F0dGFjaF9zaW5nbGUoX1NhZmVfc2VxdWVuY2VfYmFzZSogX19zZXEpCisgICAgICB7IF9TYWZlX2l0ZXJhdG9yX2Jhc2U6Ol9NX2F0dGFjaF9zaW5nbGUoX19zZXEsIF9NX2NvbnN0YW50KCkpOyB9CisKKyAgICAgIC8vLyBJcyB0aGUgaXRlcmF0b3IgZGVyZWZlcmVuY2VhYmxlPworICAgICAgYm9vbAorICAgICAgX01fZGVyZWZlcmVuY2VhYmxlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICF0aGlzLT5fTV9zaW5ndWxhcigpICYmICFfTV9pc19lbmQoKTsgfQorCisgICAgICAvLy8gSXMgdGhlIGl0ZXJhdG9yIGluY3JlbWVudGFibGU/CisgICAgICBib29sCisgICAgICBfTV9pbmNyZW1lbnRhYmxlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICF0aGlzLT5fTV9zaW5ndWxhcigpICYmICFfTV9pc19lbmQoKTsgfQorCisgICAgICAvLyBJcyB0aGUgaXRlcmF0b3IgcmFuZ2UgWyp0aGlzLCBfX3JocykgdmFsaWQ/CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3RoZXI+CisJYm9vbAorCV9NX3ZhbGlkX3JhbmdlKGNvbnN0IF9TYWZlX2xvY2FsX2l0ZXJhdG9yPF9PdGhlciwKKwkJCQkJCSAgX1NlcXVlbmNlPiYgX19yaHMpIGNvbnN0OworCisgICAgICAvLyBUaGUgc2VxdWVuY2UgdGhpcyBpdGVyYXRvciByZWZlcmVuY2VzLgorICAgICAgY29uc3QgX1NlcXVlbmNlKgorICAgICAgX01fZ2V0X3NlcXVlbmNlKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9TZXF1ZW5jZSo+KF9NX3NlcXVlbmNlKTsgfQorCisgICAgICAvLy8gSXMgdGhpcyBpdGVyYXRvciBlcXVhbCB0byB0aGUgc2VxdWVuY2UncyBiZWdpbigpIGl0ZXJhdG9yPworICAgICAgYm9vbCBfTV9pc19iZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBiYXNlKCkgPT0gX01fZ2V0X3NlcXVlbmNlKCktPl9NX2Jhc2UoKS5iZWdpbihfTV9idWNrZXQpOyB9CisKKyAgICAgIC8vLyBJcyB0aGlzIGl0ZXJhdG9yIGVxdWFsIHRvIHRoZSBzZXF1ZW5jZSdzIGVuZCgpIGl0ZXJhdG9yPworICAgICAgYm9vbCBfTV9pc19lbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gYmFzZSgpID09IF9NX2dldF9zZXF1ZW5jZSgpLT5fTV9iYXNlKCkuZW5kKF9NX2J1Y2tldCk7IH0KKworICAgICAgLy8vIElzIHRoaXMgaXRlcmF0b3IgcGFydCBvZiB0aGUgc2FtZSBidWNrZXQgYXMgdGhlIG90aGVyIG9uZT8KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfT3RoZXI+CisJYm9vbCBfTV9pbl9zYW1lX2J1Y2tldChjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvcjxfT3RoZXIsCisJCQkJCQlfU2VxdWVuY2U+JiBfX290aGVyKSBjb25zdAorCXsgcmV0dXJuIF9NX2J1Y2tldCA9PSBfX290aGVyLmJ1Y2tldCgpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9TYWZlX2xvY2FsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfY29tcGFyZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01faW5fc2FtZV9idWNrZXQoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfbG9jYWxfaXRlcl9jb21wYXJlX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1NhZmVfbG9jYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX1NhZmVfbG9jYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfY29tcGFyZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01faW5fc2FtZV9idWNrZXQoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfbG9jYWxfaXRlcl9jb21wYXJlX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9TYWZlX2xvY2FsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfY29tcGFyZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01faW5fc2FtZV9idWNrZXQoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfbG9jYWxfaXRlcl9jb21wYXJlX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX1NhZmVfbG9jYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX1NhZmVfbG9jYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoISBfX2xocy5fTV9zaW5ndWxhcigpICYmICEgX19yaHMuX01fc2luZ3VsYXIoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fbXNnX2l0ZXJfY29tcGFyZV9iYWQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01fY2FuX2NvbXBhcmUoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfY29tcGFyZV9kaWZmZXJlbnQpCisJCQkgICAgLl9NX2l0ZXJhdG9yKF9fbGhzLCAibGhzIikKKwkJCSAgICAuX01faXRlcmF0b3IoX19yaHMsICJyaHMiKSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19saHMuX01faW5fc2FtZV9idWNrZXQoX19yaHMpLAorCQkJICAgIF9NX21lc3NhZ2UoX19tc2dfbG9jYWxfaXRlcl9jb21wYXJlX2JhZCkKKwkJCSAgICAuX01faXRlcmF0b3IoX19saHMsICJsaHMiKQorCQkJICAgIC5fTV9pdGVyYXRvcihfX3JocywgInJocyIpKTsKKyAgICAgIHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOworICAgIH0KK30gLy8gbmFtZXNwYWNlIF9fZ251X2RlYnVnCisKKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLnRjYz4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NhZmVfbG9jYWxfaXRlcmF0b3IudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWM5NzFlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLnRjYwpAQCAtMCwwICsxLDc1IEBACisvLyBEZWJ1Z2dpbmcgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24gKG91dCBvZiBsaW5lKSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvc2FmZV9sb2NhbF9pdGVyYXRvci50Y2MKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1NBRkVfTE9DQUxfSVRFUkFUT1JfVENDCisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1NBRkVfTE9DQUxfSVRFUkFUT1JfVENDIDEKKworbmFtZXNwYWNlIF9fZ251X2RlYnVnCit7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdGhlcj4KKyAgICAgIGJvb2wKKyAgICAgIF9TYWZlX2xvY2FsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX1NlcXVlbmNlPjo6CisgICAgICBfTV92YWxpZF9yYW5nZShjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvcjxfT3RoZXIsIF9TZXF1ZW5jZT4mIF9fcmhzKSBjb25zdAorICAgICAgeworCWlmICghX01fY2FuX2NvbXBhcmUoX19yaHMpKQorCSAgcmV0dXJuIGZhbHNlOworCWlmIChfTV9idWNrZXQgIT0gX19yaHMuX01fYnVja2V0KQorCSAgcmV0dXJuIGZhbHNlOworCisJLyogRGV0ZXJtaW5lIGlmIHdlIGNhbiBvcmRlciB0aGUgaXRlcmF0b3JzIHdpdGhvdXQgdGhlIGhlbHAgb2YKKwkgICB0aGUgY29udGFpbmVyICovCisJc3RkOjpwYWlyPGRpZmZlcmVuY2VfdHlwZSwgX0Rpc3RhbmNlX3ByZWNpc2lvbj4gX19kaXN0ID0KKwkgIF9fZ2V0X2Rpc3RhbmNlKGJhc2UoKSwgX19yaHMuYmFzZSgpKTsKKwlzd2l0Y2ggKF9fZGlzdC5zZWNvbmQpCisJeworCWNhc2UgX19kcF9lcXVhbGl0eToKKwkgIGlmIChfX2Rpc3QuZmlyc3QgPT0gMCkKKwkgICAgcmV0dXJuIHRydWU7CisJICBicmVhazsKKworCWNhc2UgX19kcF9zaWduOgorCWNhc2UgX19kcF9leGFjdDoKKwkgIHJldHVybiBfX2Rpc3QuZmlyc3QgPj0gMDsKKwl9CisKKwkvKiBXZSBjYW4gb25seSB0ZXN0IGZvciBlcXVhbGl0eSwgYnV0IGNoZWNrIGlmIG9uZSBvZiB0aGUKKwkgICBpdGVyYXRvcnMgaXMgYXQgYW4gZXh0cmVtZS4gKi8KKwkvKiBPcHRpbSBmb3IgY2xhc3NpYyBbYmVnaW4sIGl0KSBvciBbaXQsIGVuZCkgcmFuZ2VzLCBsaW1pdCBjaGVja3MKKwkgKiB3aGVuIGNvZGUgaXMgdmFsaWQuICovCisJaWYgKF9NX2lzX2JlZ2luKCkgfHwgX19yaHMuX01faXNfZW5kKCkpCisJICByZXR1cm4gdHJ1ZTsKKwlpZiAoX01faXNfZW5kKCkgfHwgX19yaHMuX01faXNfYmVnaW4oKSkKKwkgIHJldHVybiBmYWxzZTsKKworCS8vIEFzc3VtZSB0aGF0IHRoaXMgaXMgYSB2YWxpZCByYW5nZTsgd2UgY2FuJ3QgY2hlY2sgYW55dGhpbmcgZWxzZQorCXJldHVybiB0cnVlOworICAgICAgfQorfSAvLyBuYW1lc3BhY2UgX19nbnVfZGVidWcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NhZmVfc2VxdWVuY2UuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV9zZXF1ZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTdlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NhZmVfc2VxdWVuY2UuaApAQCAtMCwwICsxLDEzNCBAQAorLy8gU2FmZSBzZXF1ZW5jZSBpbXBsZW1lbnRhdGlvbiAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3NhZmVfc2VxdWVuY2UuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfU0FGRV9TRVFVRU5DRV9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1NBRkVfU0VRVUVOQ0VfSCAxCisKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRlYnVnL21hY3Jvcy5oPgorI2luY2x1ZGUgPGRlYnVnL2Z1bmN0aW9ucy5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfYmFzZS5oPgorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgY2xhc3MgX1NhZmVfaXRlcmF0b3I7CisKKyAgLyoqIEEgc2ltcGxlIGZ1bmN0aW9uIG9iamVjdCB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkLWluCisgICAqICB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gdGhlIHN0b3JlZCB2YWx1ZS4gSXQgc2F2ZXMgdHlwaW5nIG92ZXIKKyAgICogIHVzaW5nIGJvdGggYmluZDFzdCBhbmQgbm90X2VxdWFsLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CisgICAgY2xhc3MgX05vdF9lcXVhbF90bworICAgIHsKKyAgICAgIF9UeXBlIF9fdmFsdWU7CisKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdCBfTm90X2VxdWFsX3RvKGNvbnN0IF9UeXBlJiBfX3YpIDogX192YWx1ZShfX3YpIHsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UeXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ZhbHVlICE9IF9feDsgfQorICAgIH07CisKKyAgLyoqIEEgc2ltcGxlIGZ1bmN0aW9uIG9iamVjdCB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2VkLWluCisgICAqICB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgc3RvcmVkIHZhbHVlLiAqLworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+CisgICAgY2xhc3MgX0VxdWFsX3RvCisgICAgeworICAgICAgX1R5cGUgX192YWx1ZTsKKworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0IF9FcXVhbF90byhjb25zdCBfVHlwZSYgX192KSA6IF9fdmFsdWUoX192KSB7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX192YWx1ZSA9PSBfX3g7IH0KKyAgICB9OworCisgIC8qKiBBIGZ1bmN0aW9uIG9iamVjdCB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBnaXZlbiByYW5kb20gYWNjZXNzCisgICAgICBpdGVyYXRvciBpcyBhdCBsZWFzdCBAYyBuIHN0ZXBzIGF3YXkgZnJvbSB0aGUgZ2l2ZW4gaXRlcmF0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICBjbGFzcyBfQWZ0ZXJfbnRoX2Zyb20KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICBfSXRlcmF0b3IgX01fYmFzZTsKKyAgICAgIGRpZmZlcmVuY2VfdHlwZSBfTV9uOworCisgICAgcHVibGljOgorICAgICAgX0FmdGVyX250aF9mcm9tKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uLCBjb25zdCBfSXRlcmF0b3ImIF9fYmFzZSkKKyAgICAgIDogX01fYmFzZShfX2Jhc2UpLCBfTV9uKF9fbikgeyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0l0ZXJhdG9yJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggLSBfTV9iYXNlID49IF9NX247IH0KKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgQmFzZSBjbGFzcyBmb3IgY29uc3RydWN0aW5nIGEgQGEgc2FmZSBzZXF1ZW5jZSB0eXBlIHRoYXQKKyAgICogdHJhY2tzIGl0ZXJhdG9ycyB0aGF0IHJlZmVyZW5jZSBpdC4KKyAgICoKKyAgICogVGhlIGNsYXNzIHRlbXBsYXRlICVfU2FmZV9zZXF1ZW5jZSBzaW1wbGlmaWVzIHRoZSBjb25zdHJ1Y3Rpb24gb2YKKyAgICogQGEgc2FmZSBzZXF1ZW5jZXMgdGhhdCB0cmFjayB0aGUgaXRlcmF0b3JzIHRoYXQgcmVmZXJlbmNlIHRoZQorICAgKiBzZXF1ZW5jZSwgc28gdGhhdCB0aGUgaXRlcmF0b3JzIGFyZSBub3RpZmllZCBvZiBjaGFuZ2VzIGluIHRoZQorICAgKiBzZXF1ZW5jZSB0aGF0IG1heSBhZmZlY3QgdGhlaXIgb3BlcmF0aW9uLCBlLmcuLCBpZiB0aGUgY29udGFpbmVyCisgICAqIGludmFsaWRhdGVzIGl0cyBpdGVyYXRvcnMgb3IgaXMgZGVzdHJ1Y3RlZC4gVGhpcyBjbGFzcyB0ZW1wbGF0ZQorICAgKiBtYXkgb25seSBiZSB1c2VkIGJ5IGRlcml2aW5nIGZyb20gaXQgYW5kIHBhc3NpbmcgdGhlIG5hbWUgb2YgdGhlCisgICAqIGRlcml2ZWQgY2xhc3MgYXMgaXRzIHRlbXBsYXRlIHBhcmFtZXRlciB2aWEgdGhlIGN1cmlvdXNseQorICAgKiByZWN1cnJpbmcgdGVtcGxhdGUgcGF0dGVybi4gVGhlIGRlcml2ZWQgY2xhc3MgbXVzdCBoYXZlIEBjCisgICAqIGl0ZXJhdG9yIGFuZCBAYyBjb25zdF9pdGVyYXRvciB0eXBlcyB0aGF0IGFyZSBpbnN0YW50aWF0aW9ucyBvZgorICAgKiBjbGFzcyB0ZW1wbGF0ZSBfU2FmZV9pdGVyYXRvciBmb3IgdGhpcyBzZXF1ZW5jZS4gSXRlcmF0b3JzIHdpbGwKKyAgICogdGhlbiBiZSB0cmFja2VkIGF1dG9tYXRpY2FsbHkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgY2xhc3MgX1NhZmVfc2VxdWVuY2UgOiBwdWJsaWMgX1NhZmVfc2VxdWVuY2VfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvKiogSW52YWxpZGF0ZXMgYWxsIGl0ZXJhdG9ycyBAYyB4IHRoYXQgcmVmZXJlbmNlIHRoaXMgc2VxdWVuY2UsCisJICBhcmUgbm90IHNpbmd1bGFyLCBhbmQgZm9yIHdoaWNoIEBjIF9fcHJlZCh4KSByZXR1cm5zIEBjCisJICB0cnVlLiBAYyBfX3ByZWQgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIG5vcm1hbCBpdGVyYXRvcnMgbmVzdGVkCisJICBpbiB0aGUgc2FmZSBvbmVzLiAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9pbnZhbGlkYXRlX2lmKF9QcmVkaWNhdGUgX19wcmVkKTsKKworICAgICAgLyoqIFRyYW5zZmVycyBhbGwgaXRlcmF0b3JzIEBjIHggdGhhdCByZWZlcmVuY2UgQGMgZnJvbSBzZXF1ZW5jZSwKKwkgIGFyZSBub3Qgc2luZ3VsYXIsIGFuZCBmb3Igd2hpY2ggQGMgX19wcmVkKHgpIHJldHVybnMgQGMKKwkgIHRydWUuIEBjIF9fcHJlZCB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgbm9ybWFsIGl0ZXJhdG9ycyBuZXN0ZWQKKwkgIGluIHRoZSBzYWZlIG9uZXMuICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX3RyYW5zZmVyX2Zyb21faWYoX1NhZmVfc2VxdWVuY2UmIF9fZnJvbSwgX1ByZWRpY2F0ZSBfX3ByZWQpOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZworCisjaW5jbHVkZSA8ZGVidWcvc2FmZV9zZXF1ZW5jZS50Y2M+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX3NlcXVlbmNlLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV9zZXF1ZW5jZS50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmODc0MAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV9zZXF1ZW5jZS50Y2MKQEAgLTAsMCArMSwxNTAgQEAKKy8vIFNhZmUgc2VxdWVuY2UgaW1wbGVtZW50YXRpb24gIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9zYWZlX3NlcXVlbmNlLnRjYworICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfU0FGRV9TRVFVRU5DRV9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU0FGRV9TRVFVRU5DRV9UQ0MgMQorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICB2b2lkCisgICAgICBfU2FmZV9zZXF1ZW5jZTxfU2VxdWVuY2U+OjoKKyAgICAgIF9NX2ludmFsaWRhdGVfaWYoX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgICB7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NlcXVlbmNlOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisJX19nbnVfY3h4OjpfX3Njb3BlZF9sb2NrIHNlbnRyeSh0aGlzLT5fTV9nZXRfbXV0ZXgoKSk7CisgICAgICAgIGZvciAoX1NhZmVfaXRlcmF0b3JfYmFzZSogX19pdGVyID0gX01faXRlcmF0b3JzOyBfX2l0ZXI7KQorCSAgeworCSAgICBpdGVyYXRvciogX192aWN0aW0gPSBzdGF0aWNfY2FzdDxpdGVyYXRvcio+KF9faXRlcik7CisJICAgIF9faXRlciA9IF9faXRlci0+X01fbmV4dDsKKwkgICAgaWYgKCFfX3ZpY3RpbS0+X01fc2luZ3VsYXIoKSAmJiBfX3ByZWQoX192aWN0aW0tPmJhc2UoKSkpCisJICAgICAgeworCQlfX3ZpY3RpbS0+X01faW52YWxpZGF0ZSgpOworCSAgICAgIH0KKwkgIH0KKworICAgICAgICBmb3IgKF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9faXRlcjIgPSBfTV9jb25zdF9pdGVyYXRvcnM7IF9faXRlcjI7KQorCSAgeworCSAgICBjb25zdF9pdGVyYXRvciogX192aWN0aW0gPSBzdGF0aWNfY2FzdDxjb25zdF9pdGVyYXRvcio+KF9faXRlcjIpOworCSAgICBfX2l0ZXIyID0gX19pdGVyMi0+X01fbmV4dDsKKwkgICAgaWYgKCFfX3ZpY3RpbS0+X01fc2luZ3VsYXIoKSAmJiBfX3ByZWQoX192aWN0aW0tPmJhc2UoKSkpCisJICAgICAgeworCQlfX3ZpY3RpbS0+X01faW52YWxpZGF0ZSgpOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICAgIHZvaWQKKyAgICAgIF9TYWZlX3NlcXVlbmNlPF9TZXF1ZW5jZT46OgorICAgICAgX01fdHJhbnNmZXJfZnJvbV9pZihfU2FmZV9zZXF1ZW5jZSYgX19mcm9tLCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICAgIHsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKwlfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX3RyYW5zZmVyZWRfaXRlcmF0b3JzID0gMDsKKwlfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX3RyYW5zZmVyZWRfY29uc3RfaXRlcmF0b3JzID0gMDsKKwlfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2xhc3RfaXRlcmF0b3IgPSAwOworCV9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9fbGFzdF9jb25zdF9pdGVyYXRvciA9IDA7CisJeworCSAgLy8gV2UgbG9jayBfX2Zyb20gZmlyc3QgYW5kIGRldGFjaCBpdGVyYXRvcihzKSB0byB0cmFuc2ZlcgorCSAgX19nbnVfY3h4OjpfX3Njb3BlZF9sb2NrIHNlbnRyeShfX2Zyb20uX01fZ2V0X211dGV4KCkpOworCisgICAgICAgICAgZm9yIChfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2l0ZXIgPSBfX2Zyb20uX01faXRlcmF0b3JzOyBfX2l0ZXI7KQorCSAgICB7CisJICAgICAgaXRlcmF0b3IqIF9fdmljdGltID0gc3RhdGljX2Nhc3Q8aXRlcmF0b3IqPihfX2l0ZXIpOworCSAgICAgIF9faXRlciA9IF9faXRlci0+X01fbmV4dDsKKwkgICAgICBpZiAoIV9fdmljdGltLT5fTV9zaW5ndWxhcigpICYmIF9fcHJlZChfX3ZpY3RpbS0+YmFzZSgpKSkKKwkJeworCQkgIF9fdmljdGltLT5fTV9kZXRhY2hfc2luZ2xlKCk7CisJCSAgaWYgKF9fdHJhbnNmZXJlZF9pdGVyYXRvcnMpCisJCSAgICB7CisJCSAgICAgIF9fdmljdGltLT5fTV9uZXh0ID0gX190cmFuc2ZlcmVkX2l0ZXJhdG9yczsKKwkJICAgICAgX190cmFuc2ZlcmVkX2l0ZXJhdG9ycy0+X01fcHJpb3IgPSBfX3ZpY3RpbTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBfX2xhc3RfaXRlcmF0b3IgPSBfX3ZpY3RpbTsKKwkJICBfX3ZpY3RpbS0+X01fc2VxdWVuY2UgPSB0aGlzOworCQkgIF9fdmljdGltLT5fTV92ZXJzaW9uID0gdGhpcy0+X01fdmVyc2lvbjsKKwkJICBfX3RyYW5zZmVyZWRfaXRlcmF0b3JzID0gX192aWN0aW07CisJCX0KKwkgICAgfQorCisJICBmb3IgKF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9faXRlcjIgPSBfX2Zyb20uX01fY29uc3RfaXRlcmF0b3JzOworCQkgX19pdGVyMjspCisJICAgIHsKKwkgICAgICBjb25zdF9pdGVyYXRvciogX192aWN0aW0gPSBzdGF0aWNfY2FzdDxjb25zdF9pdGVyYXRvcio+KF9faXRlcjIpOworCSAgICAgIF9faXRlcjIgPSBfX2l0ZXIyLT5fTV9uZXh0OworCSAgICAgIGlmICghX192aWN0aW0tPl9NX3Npbmd1bGFyKCkgJiYgX19wcmVkKF9fdmljdGltLT5iYXNlKCkpKQorCQl7CisJCSAgX192aWN0aW0tPl9NX2RldGFjaF9zaW5nbGUoKTsKKwkJICBpZiAoX190cmFuc2ZlcmVkX2NvbnN0X2l0ZXJhdG9ycykKKwkJICAgIHsKKwkJICAgICAgX192aWN0aW0tPl9NX25leHQgPSBfX3RyYW5zZmVyZWRfY29uc3RfaXRlcmF0b3JzOworCQkgICAgICBfX3RyYW5zZmVyZWRfY29uc3RfaXRlcmF0b3JzLT5fTV9wcmlvciA9IF9fdmljdGltOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIF9fbGFzdF9jb25zdF9pdGVyYXRvciA9IF9fdmljdGltOworCQkgIF9fdmljdGltLT5fTV9zZXF1ZW5jZSA9IHRoaXM7CisJCSAgX192aWN0aW0tPl9NX3ZlcnNpb24gPSB0aGlzLT5fTV92ZXJzaW9uOworCQkgIF9fdHJhbnNmZXJlZF9jb25zdF9pdGVyYXRvcnMgPSBfX3ZpY3RpbTsKKwkJfQorCSAgICB9CisJfQorCisJLy8gTm93IHdlIGNhbiBsb2NrICp0aGlzIGFuZCBhZGQgdGhlIHRyYW5zZmVyZWQgaXRlcmF0b3JzIGlmIGFueQorCWlmIChfX2xhc3RfaXRlcmF0b3IgfHwgX19sYXN0X2NvbnN0X2l0ZXJhdG9yKQorCSAgeworCSAgICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgc2VudHJ5KHRoaXMtPl9NX2dldF9tdXRleCgpKTsKKwkgICAgaWYgKF9fbGFzdF9pdGVyYXRvcikKKwkgICAgICB7CisJCWlmICh0aGlzLT5fTV9pdGVyYXRvcnMpCisJCSAgeworCQkgICAgdGhpcy0+X01faXRlcmF0b3JzLT5fTV9wcmlvciA9IF9fbGFzdF9pdGVyYXRvcjsKKwkJICAgIF9fbGFzdF9pdGVyYXRvci0+X01fbmV4dCA9IHRoaXMtPl9NX2l0ZXJhdG9yczsKKwkJICB9CisJCXRoaXMtPl9NX2l0ZXJhdG9ycyA9IF9fdHJhbnNmZXJlZF9pdGVyYXRvcnM7CisJICAgICAgfQorCSAgICBpZiAoX19sYXN0X2NvbnN0X2l0ZXJhdG9yKQorCSAgICAgIHsKKwkJaWYgKHRoaXMtPl9NX2NvbnN0X2l0ZXJhdG9ycykKKwkJICB7CisJCSAgICB0aGlzLT5fTV9jb25zdF9pdGVyYXRvcnMtPl9NX3ByaW9yID0gX19sYXN0X2NvbnN0X2l0ZXJhdG9yOworCQkgICAgX19sYXN0X2NvbnN0X2l0ZXJhdG9yLT5fTV9uZXh0ID0gdGhpcy0+X01fY29uc3RfaXRlcmF0b3JzOworCQkgIH0KKwkJdGhpcy0+X01fY29uc3RfaXRlcmF0b3JzID0gX190cmFuc2ZlcmVkX2NvbnN0X2l0ZXJhdG9yczsKKwkgICAgICB9CisJICB9CisgICAgICB9Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV91bm9yZGVyZWRfYmFzZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX3Vub3JkZXJlZF9iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwMjZjYgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV91bm9yZGVyZWRfYmFzZS5oCkBAIC0wLDAgKzEsMTc1IEBACisvLyBTYWZlIGNvbnRhaW5lci9pdGVyYXRvciBiYXNlIGltcGxlbWVudGF0aW9uICAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvc2FmZV91bm9yZGVyZWRfYmFzZS5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TQUZFX1VOT1JERVJFRF9CQVNFX0gKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU0FGRV9VTk9SREVSRURfQkFTRV9IIDEKKworI2luY2x1ZGUgPGRlYnVnL3NhZmVfYmFzZS5oPgorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgY2xhc3MgX1NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lcl9iYXNlOworCisgIC8qKiBcYnJpZWYgQmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IgYSBAYSBzYWZlIGl0ZXJhdG9yLgorICAgKgorICAgKiAgVGhlICVfU2FmZV9sb2NhbF9pdGVyYXRvcl9iYXNlIGJhc2UgY2xhc3MgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25hbGl0eQorICAgKiAgb2YgYSBzYWZlIGxvY2FsIGl0ZXJhdG9yIHRoYXQgaXMgbm90IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBpdGVyYXRvcgorICAgKiAgdHlwZS4gSXQgY29udGFpbnMgYSBwb2ludGVyIGJhY2sgdG8gdGhlIGNvbnRhaW5lciBpdCByZWZlcmVuY2VzCisgICAqICBhbG9uZyB3aXRoIGl0ZXJhdG9yIHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIHBvaW50ZXJzIHRvIGZvcm0gYQorICAgKiAgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGxvY2FsIGl0ZXJhdG9ycyByZWZlcmVuY2VkIGJ5IHRoZSBjb250YWluZXIuCisgICAqCisgICAqICBUaGlzIGNsYXNzIG11c3Qgbm90IHBlcmZvcm0gYW55IG9wZXJhdGlvbnMgdGhhdCBjYW4gdGhyb3cgYW4KKyAgICogIGV4Y2VwdGlvbiwgb3IgdGhlIGV4Y2VwdGlvbiBndWFyYW50ZWVzIG9mIGRlcml2ZWQgaXRlcmF0b3JzIHdpbGwKKyAgICogIGJlIGJyb2tlbi4KKyAgICovCisgIGNsYXNzIF9TYWZlX2xvY2FsX2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgX1NhZmVfaXRlcmF0b3JfYmFzZQorICB7CisgIHByb3RlY3RlZDoKKyAgICAvKiogSW5pdGlhbGl6ZXMgdGhlIGl0ZXJhdG9yIGFuZCBtYWtlcyBpdCBzaW5ndWxhci4gKi8KKyAgICBfU2FmZV9sb2NhbF9pdGVyYXRvcl9iYXNlKCkKKyAgICB7IH0KKworICAgIC8qKiBJbml0aWFsaXplIHRoZSBpdGVyYXRvciB0byByZWZlcmVuY2UgdGhlIGNvbnRhaW5lciBwb2ludGVkIHRvCisgICAgICogIGJ5IEBwIF9fc2VxLiBAcCBfX2NvbnN0YW50IGlzIHRydWUgd2hlbiB3ZSBhcmUgaW5pdGlhbGl6aW5nIGEKKyAgICAgKiAgY29uc3RhbnQgbG9jYWwgaXRlcmF0b3IsIGFuZCBmYWxzZSBpZiBpdCBpcyBhIG11dGFibGUgbG9jYWwgaXRlcmF0b3IuCisgICAgICogIE5vdGUgdGhhdCBAcCBfX3NlcSBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSB0aGUgaXRlcmF0b3Igd2lsbCBiZQorICAgICAqICBzaW5ndWxhci4gT3RoZXJ3aXNlLCB0aGUgaXRlcmF0b3Igd2lsbCByZWZlcmVuY2UgQHAgX19zZXEgYW5kCisgICAgICogIGJlIG5vbnNpbmd1bGFyLgorICAgICAqLworICAgIF9TYWZlX2xvY2FsX2l0ZXJhdG9yX2Jhc2UoY29uc3QgX1NhZmVfc2VxdWVuY2VfYmFzZSogX19zZXEsIGJvb2wgX19jb25zdGFudCkKKyAgICB7IHRoaXMtPl9NX2F0dGFjaChjb25zdF9jYXN0PF9TYWZlX3NlcXVlbmNlX2Jhc2UqPihfX3NlcSksIF9fY29uc3RhbnQpOyB9CisKKyAgICAvKiogSW5pdGlhbGl6ZXMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyZW5jZSB0aGUgc2FtZSBjb250YWluZXIgdGhhdAorCUBwIF9feCBkb2VzLiBAcCBfX2NvbnN0YW50IGlzIHRydWUgaWYgdGhpcyBpcyBhIGNvbnN0YW50CisJaXRlcmF0b3IsIGFuZCBmYWxzZSBpZiBpdCBpcyBtdXRhYmxlLiAqLworICAgIF9TYWZlX2xvY2FsX2l0ZXJhdG9yX2Jhc2UoY29uc3QgX1NhZmVfbG9jYWxfaXRlcmF0b3JfYmFzZSYgX194LAorCQkJICAgICAgYm9vbCBfX2NvbnN0YW50KQorICAgIHsgdGhpcy0+X01fYXR0YWNoKF9feC5fTV9zZXF1ZW5jZSwgX19jb25zdGFudCk7IH0KKworICAgIF9TYWZlX2xvY2FsX2l0ZXJhdG9yX2Jhc2UmCisgICAgb3BlcmF0b3I9KGNvbnN0IF9TYWZlX2xvY2FsX2l0ZXJhdG9yX2Jhc2UmKTsKKworICAgIGV4cGxpY2l0CisgICAgX1NhZmVfbG9jYWxfaXRlcmF0b3JfYmFzZShjb25zdCBfU2FmZV9sb2NhbF9pdGVyYXRvcl9iYXNlJik7CisKKyAgICB+X1NhZmVfbG9jYWxfaXRlcmF0b3JfYmFzZSgpIHsgdGhpcy0+X01fZGV0YWNoKCk7IH0KKworICAgIF9TYWZlX3Vub3JkZXJlZF9jb250YWluZXJfYmFzZSoKKyAgICBfTV9nZXRfY29udGFpbmVyKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQ7CisKKyAgcHVibGljOgorICAgIC8qKiBBdHRhY2hlcyB0aGlzIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBjb250YWluZXIsIGRldGFjaGluZyBpdAorICAgICAqCWZyb20gd2hhdGV2ZXIgY29udGFpbmVyIGl0IHdhcyBhdHRhY2hlZCB0byBvcmlnaW5hbGx5LiBJZiB0aGUKKyAgICAgKgluZXcgY29udGFpbmVyIGlzIHRoZSBOVUxMIHBvaW50ZXIsIHRoZSBpdGVyYXRvciBpcyBsZWZ0CisgICAgICoJdW5hdHRhY2hlZC4KKyAgICAgKi8KKyAgICB2b2lkIF9NX2F0dGFjaChfU2FmZV9zZXF1ZW5jZV9iYXNlKiBfX3NlcSwgYm9vbCBfX2NvbnN0YW50KTsKKworICAgIC8qKiBMaWtld2lzZSwgYnV0IG5vdCB0aHJlYWQtc2FmZS4gKi8KKyAgICB2b2lkIF9NX2F0dGFjaF9zaW5nbGUoX1NhZmVfc2VxdWVuY2VfYmFzZSogX19zZXEsIGJvb2wgX19jb25zdGFudCkgdGhyb3cgKCk7CisKKyAgICAvKiogRGV0YWNoIHRoZSBpdGVyYXRvciBmb3Igd2hhdGV2ZXIgY29udGFpbmVyIGl0IGlzIGF0dGFjaGVkIHRvLAorICAgICAqCWlmIGFueS4KKyAgICAqLworICAgIHZvaWQgX01fZGV0YWNoKCk7CisKKyAgICAvKiogTGlrZXdpc2UsIGJ1dCBub3QgdGhyZWFkLXNhZmUuICovCisgICAgdm9pZCBfTV9kZXRhY2hfc2luZ2xlKCkgdGhyb3cgKCk7CisgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBCYXNlIGNsYXNzIHRoYXQgc3VwcG9ydHMgdHJhY2tpbmcgb2YgbG9jYWwgaXRlcmF0b3JzIHRoYXQKKyAgICogcmVmZXJlbmNlIGFuIHVub3JkZXJlZCBjb250YWluZXIuCisgICAqCisgICAqIFRoZSAlX1NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lcl9iYXNlIGNsYXNzIHByb3ZpZGVzIGJhc2ljIHN1cHBvcnQgZm9yCisgICAqIHRyYWNraW5nIGl0ZXJhdG9ycyBpbnRvIGFuIHVub3JkZXJlZCBjb250YWluZXIuIENvbnRhaW5lcnMgdGhhdCB0cmFjaworICAgKiBpdGVyYXRvcnMgbXVzdCBkZXJpdmVkIGZyb20gJV9TYWZlX3Vub3JkZXJlZF9jb250YWluZXJfYmFzZSBwdWJsaWNseSwgc28KKyAgICogdGhhdCBzYWZlIGl0ZXJhdG9ycyAod2hpY2ggaW5oZXJpdCBfU2FmZV9pdGVyYXRvcl9iYXNlKSBjYW4KKyAgICogYXR0YWNoIHRvIHRoZW0uIFRoaXMgY2xhc3MgY29udGFpbnMgZm91ciBsaW5rZWQgbGlzdHMgb2YKKyAgICogaXRlcmF0b3JzLCBvbmUgZm9yIGNvbnN0YW50IGl0ZXJhdG9ycywgb25lIGZvciBtdXRhYmxlCisgICAqIGl0ZXJhdG9ycywgb25lIGZvciBjb25zdGFudCBsb2NhbCBpdGVyYXRvcnMsIG9uZSBmb3IgbXV0YWJsZSBsb2NhbAorICAgKiBpdGVyYXRvcnMgYW5kIGEgdmVyc2lvbiBudW1iZXIgdGhhdCBhbGxvd3MgdmVyeSBmYXN0CisgICAqIGludmFsaWRhdGlvbiBvZiBhbGwgaXRlcmF0b3JzIHRoYXQgcmVmZXJlbmNlIHRoZSBjb250YWluZXIuCisgICAqCisgICAqIFRoaXMgY2xhc3MgbXVzdCBlbnN1cmUgdGhhdCBubyBvcGVyYXRpb24gb24gaXQgbWF5IHRocm93IGFuCisgICAqIGV4Y2VwdGlvbiwgb3RoZXJ3aXNlIEBhIHNhZmUgY29udGFpbmVycyBtYXkgZmFpbCB0byBwcm92aWRlIHRoZQorICAgKiBleGNlcHRpb24tc2FmZXR5IGd1YXJhbnRlZXMgcmVxdWlyZWQgYnkgdGhlIEMrKyBzdGFuZGFyZC4KKyAgICovCisgIGNsYXNzIF9TYWZlX3Vub3JkZXJlZF9jb250YWluZXJfYmFzZSA6IHB1YmxpYyBfU2FmZV9zZXF1ZW5jZV9iYXNlCisgIHsKKyAgICB0eXBlZGVmIF9TYWZlX3NlcXVlbmNlX2Jhc2UgX0Jhc2U7CisgIHB1YmxpYzoKKyAgICAvLy8gVGhlIGxpc3Qgb2YgbXV0YWJsZSBsb2NhbCBpdGVyYXRvcnMgdGhhdCByZWZlcmVuY2UgdGhpcyBjb250YWluZXIKKyAgICBfU2FmZV9pdGVyYXRvcl9iYXNlKiBfTV9sb2NhbF9pdGVyYXRvcnM7CisKKyAgICAvLy8gVGhlIGxpc3Qgb2YgY29uc3RhbnQgbG9jYWwgaXRlcmF0b3JzIHRoYXQgcmVmZXJlbmNlIHRoaXMgY29udGFpbmVyCisgICAgX1NhZmVfaXRlcmF0b3JfYmFzZSogX01fY29uc3RfbG9jYWxfaXRlcmF0b3JzOworCisgIHByb3RlY3RlZDoKKyAgICAvLyBJbml0aWFsaXplIHdpdGggYSB2ZXJzaW9uIG51bWJlciBvZiAxIGFuZCBubyBpdGVyYXRvcnMKKyAgICBfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyX2Jhc2UoKQorICAgIDogX01fbG9jYWxfaXRlcmF0b3JzKDApLCBfTV9jb25zdF9sb2NhbF9pdGVyYXRvcnMoMCkKKyAgICB7IH0KKworICAgIC8qKiBOb3RpZnkgYWxsIGl0ZXJhdG9ycyB0aGF0IHJlZmVyZW5jZSB0aGlzIGNvbnRhaW5lciB0aGF0IHRoZQorCWNvbnRhaW5lciBpcyBiZWluZyBkZXN0cm95ZWQuICovCisgICAgfl9TYWZlX3Vub3JkZXJlZF9jb250YWluZXJfYmFzZSgpCisgICAgeyB0aGlzLT5fTV9kZXRhY2hfYWxsKCk7IH0KKworICAgIC8qKiBEZXRhY2ggYWxsIGl0ZXJhdG9ycywgbGVhdmluZyB0aGVtIHNpbmd1bGFyLiAqLworICAgIHZvaWQKKyAgICBfTV9kZXRhY2hfYWxsKCk7CisKKyAgICAvKiogU3dhcCB0aGlzIGNvbnRhaW5lciB3aXRoIHRoZSBnaXZlbiBjb250YWluZXIuIFRoaXMgb3BlcmF0aW9uCisgICAgICogIGFsc28gc3dhcHMgb3duZXJzaGlwIG9mIHRoZSBpdGVyYXRvcnMsIHNvIHRoYXQgd2hlbiB0aGUKKyAgICAgKiAgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIGFsbCBpdGVyYXRvcnMgdGhhdCBvcmlnaW5hbGx5IHJlZmVyZW5jZWQKKyAgICAgKiAgb25lIGNvbnRhaW5lciBub3cgcmVmZXJlbmNlIHRoZSBvdGhlciBjb250YWluZXIuCisgICAgICovCisgICAgdm9pZAorICAgIF9NX3N3YXAoX1NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lcl9iYXNlJiBfX3gpOworCisgIHB1YmxpYzoKKyAgICAvKiogQXR0YWNoIGFuIGl0ZXJhdG9yIHRvIHRoaXMgY29udGFpbmVyLiAqLworICAgIHZvaWQKKyAgICBfTV9hdHRhY2hfbG9jYWwoX1NhZmVfaXRlcmF0b3JfYmFzZSogX19pdCwgYm9vbCBfX2NvbnN0YW50KTsKKworICAgIC8qKiBMaWtld2lzZSBidXQgbm90IHRocmVhZCBzYWZlLiAqLworICAgIHZvaWQKKyAgICBfTV9hdHRhY2hfbG9jYWxfc2luZ2xlKF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9faXQsIGJvb2wgX19jb25zdGFudCkgdGhyb3cgKCk7CisKKyAgICAvKiogRGV0YWNoIGFuIGl0ZXJhdG9yIGZyb20gdGhpcyBjb250YWluZXIgKi8KKyAgICB2b2lkCisgICAgX01fZGV0YWNoX2xvY2FsKF9TYWZlX2l0ZXJhdG9yX2Jhc2UqIF9faXQpOworCisgICAgLyoqIExpa2V3aXNlIGJ1dCBub3QgdGhyZWFkIHNhZmUuICovCisgICAgdm9pZAorICAgIF9NX2RldGFjaF9sb2NhbF9zaW5nbGUoX1NhZmVfaXRlcmF0b3JfYmFzZSogX19pdCkgdGhyb3cgKCk7CisgIH07Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV91bm9yZGVyZWRfY29udGFpbmVyLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MzQ1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lci5oCkBAIC0wLDAgKzEsODEgQEAKKy8vIFNhZmUgY29udGFpbmVyIGltcGxlbWVudGF0aW9uICAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvc2FmZV91bm9yZGVyZWRfY29udGFpbmVyLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1NBRkVfVU5PUkRFUkVEX0NPTlRBSU5FUl9ICisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1NBRkVfVU5PUkRFUkVEX0NPTlRBSU5FUl9IIDEKKworI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaW5jbHVkZSA8ZGVidWcvbWFjcm9zLmg+CisjaW5jbHVkZSA8ZGVidWcvZnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV91bm9yZGVyZWRfYmFzZS5oPgorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgLyoqCisgICAqIEBicmllZiBCYXNlIGNsYXNzIGZvciBjb25zdHJ1Y3RpbmcgYSBAYSBzYWZlIHVub3JkZXJlZCBjb250YWluZXIgdHlwZQorICAgKiB0aGF0IHRyYWNrcyBpdGVyYXRvcnMgdGhhdCByZWZlcmVuY2UgaXQuCisgICAqCisgICAqIFRoZSBjbGFzcyB0ZW1wbGF0ZSAlX1NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lciBzaW1wbGlmaWVzIHRoZQorICAgKiBjb25zdHJ1Y3Rpb24gb2YgQGEgc2FmZSB1bm9yZGVyZWQgY29udGFpbmVycyB0aGF0IHRyYWNrIHRoZSBpdGVyYXRvcnMKKyAgICogdGhhdCByZWZlcmVuY2UgdGhlIGNvbnRhaW5lciwgc28gdGhhdCB0aGUgaXRlcmF0b3JzIGFyZSBub3RpZmllZCBvZgorICAgKiBjaGFuZ2VzIGluIHRoZSBjb250YWluZXIgdGhhdCBtYXkgYWZmZWN0IHRoZWlyIG9wZXJhdGlvbiwgZS5nLiwgaWYKKyAgICogdGhlIGNvbnRhaW5lciBpbnZhbGlkYXRlcyBpdHMgaXRlcmF0b3JzIG9yIGlzIGRlc3RydWN0ZWQuIFRoaXMgY2xhc3MKKyAgICogdGVtcGxhdGUgbWF5IG9ubHkgYmUgdXNlZCBieSBkZXJpdmluZyBmcm9tIGl0IGFuZCBwYXNzaW5nIHRoZSBuYW1lCisgICAqIG9mIHRoZSBkZXJpdmVkIGNsYXNzIGFzIGl0cyB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdmlhIHRoZSBjdXJpb3VzbHkKKyAgICogcmVjdXJyaW5nIHRlbXBsYXRlIHBhdHRlcm4uIFRoZSBkZXJpdmVkIGNsYXNzIG11c3QgaGF2ZSBAYworICAgKiBpdGVyYXRvciBhbmQgQGMgY29uc3RfaXRlcmF0b3IgdHlwZXMgdGhhdCBhcmUgaW5zdGFudGlhdGlvbnMgb2YKKyAgICogY2xhc3MgdGVtcGxhdGUgX1NhZmVfaXRlcmF0b3IgZm9yIHRoaXMgY29udGFpbmVyIGFuZCBAYyBsb2NhbF9pdGVyYXRvcgorICAgKiBhbmQgQGMgY29uc3RfbG9jYWxfaXRlcmF0b3IgdHlwZXMgdGhhdCBhcmUgaW5zdGFudGlhdGlvbnMgb2YgY2xhc3MKKyAgICogdGVtcGxhdGUgX1NhZmVfbG9jYWxfaXRlcmF0b3IgZm9yIHRoaXMgY29udGFpbmVyLiBJdGVyYXRvcnMgd2lsbAorICAgKiB0aGVuIGJlIHRyYWNrZWQgYXV0b21hdGljYWxseS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CisgICAgY2xhc3MgX1NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lciA6IHB1YmxpYyBfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyX2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgLyoqIEludmFsaWRhdGVzIGFsbCBpdGVyYXRvcnMgQGMgeCB0aGF0IHJlZmVyZW5jZSB0aGlzIGNvbnRhaW5lciwKKwkgIGFyZSBub3Qgc2luZ3VsYXIsIGFuZCBmb3Igd2hpY2ggQGMgX19wcmVkKHgpIHJldHVybnMgQGMKKwkgIHRydWUuIEBjIF9fcHJlZCB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgbm9ybWFsIGl0ZXJhdG9ycyBuZXN0ZWQKKwkgIGluIHRoZSBzYWZlIG9uZXMuICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJlZGljYXRlPgorCXZvaWQKKwlfTV9pbnZhbGlkYXRlX2lmKF9QcmVkaWNhdGUgX19wcmVkKTsKKworICAgICAgLyoqIEludmFsaWRhdGVzIGFsbCBsb2NhbCBpdGVyYXRvcnMgQGMgeCB0aGF0IHJlZmVyZW5jZSB0aGlzIGNvbnRhaW5lciwKKwkgIGFyZSBub3Qgc2luZ3VsYXIsIGFuZCBmb3Igd2hpY2ggQGMgX19wcmVkKHgpIHJldHVybnMgQGMKKwkgIHRydWUuIEBjIF9fcHJlZCB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgbm9ybWFsIGlsb2NhbCBpdGVyYXRvcnMKKwkgIG5lc3RlZCBpbiB0aGUgc2FmZSBvbmVzLiAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KKwl2b2lkCisJX01faW52YWxpZGF0ZV9sb2NhbF9pZihfUHJlZGljYXRlIF9fcHJlZCk7CisgICAgfTsKK30gLy8gbmFtZXNwYWNlIF9fZ251X2RlYnVnCisKKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3Vub3JkZXJlZF9jb250YWluZXIudGNjPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV91bm9yZGVyZWRfY29udGFpbmVyLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2FmZV91bm9yZGVyZWRfY29udGFpbmVyLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjNiY2FiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zYWZlX3Vub3JkZXJlZF9jb250YWluZXIudGNjCkBAIC0wLDAgKzEsMTAwIEBACisvLyBTYWZlIGNvbnRhaW5lciBpbXBsZW1lbnRhdGlvbiAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lci50Y2MKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1NBRkVfVU5PUkRFUkVEX0NPTlRBSU5FUl9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU0FGRV9VTk9SREVSRURfQ09OVEFJTkVSX1RDQyAxCisKK25hbWVzcGFjZSBfX2dudV9kZWJ1ZworeworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICB2b2lkCisgICAgICBfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyPF9Db250YWluZXI+OjoKKyAgICAgIF9NX2ludmFsaWRhdGVfaWYoX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyYXRvcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisJX19nbnVfY3h4OjpfX3Njb3BlZF9sb2NrIHNlbnRyeSh0aGlzLT5fTV9nZXRfbXV0ZXgoKSk7CisJZm9yIChfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2l0ZXIgPSBfTV9pdGVyYXRvcnM7IF9faXRlcjspCisJICB7CisJICAgIGl0ZXJhdG9yKiBfX3ZpY3RpbSA9IHN0YXRpY19jYXN0PGl0ZXJhdG9yKj4oX19pdGVyKTsKKwkgICAgX19pdGVyID0gX19pdGVyLT5fTV9uZXh0OworCSAgICBpZiAoIV9fdmljdGltLT5fTV9zaW5ndWxhcigpICYmIF9fcHJlZChfX3ZpY3RpbS0+YmFzZSgpKSkKKwkgICAgICB7CisJCV9fdmljdGltLT5fTV9pbnZhbGlkYXRlKCk7CisJICAgICAgfQorCSAgfQorCisJZm9yIChfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2l0ZXIyID0gX01fY29uc3RfaXRlcmF0b3JzOyBfX2l0ZXIyOykKKwkgIHsKKwkgICAgY29uc3RfaXRlcmF0b3IqIF9fdmljdGltID0gc3RhdGljX2Nhc3Q8Y29uc3RfaXRlcmF0b3IqPihfX2l0ZXIyKTsKKwkgICAgX19pdGVyMiA9IF9faXRlcjItPl9NX25leHQ7CisJICAgIGlmICghX192aWN0aW0tPl9NX3Npbmd1bGFyKCkgJiYgX19wcmVkKF9fdmljdGltLT5iYXNlKCkpKQorCSAgICAgIHsKKwkJX192aWN0aW0tPl9NX2ludmFsaWRhdGUoKTsKKwkgICAgICB9CisJICB9CisgICAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICB2b2lkCisgICAgICBfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyPF9Db250YWluZXI+OjoKKyAgICAgIF9NX2ludmFsaWRhdGVfbG9jYWxfaWYoX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjpsb2NhbF9pdGVyYXRvciBsb2NhbF9pdGVyYXRvcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X2xvY2FsX2l0ZXJhdG9yIGNvbnN0X2xvY2FsX2l0ZXJhdG9yOworCisJX19nbnVfY3h4OjpfX3Njb3BlZF9sb2NrIHNlbnRyeSh0aGlzLT5fTV9nZXRfbXV0ZXgoKSk7CisJZm9yIChfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2l0ZXIgPSBfTV9sb2NhbF9pdGVyYXRvcnM7IF9faXRlcjspCisJICB7CisJICAgIGxvY2FsX2l0ZXJhdG9yKiBfX3ZpY3RpbSA9IHN0YXRpY19jYXN0PGxvY2FsX2l0ZXJhdG9yKj4oX19pdGVyKTsKKwkgICAgX19pdGVyID0gX19pdGVyLT5fTV9uZXh0OworCSAgICBpZiAoIV9fdmljdGltLT5fTV9zaW5ndWxhcigpICYmIF9fcHJlZChfX3ZpY3RpbS0+YmFzZSgpKSkKKwkgICAgICB7CisJCV9fdmljdGltLT5fTV9pbnZhbGlkYXRlKCk7CisJICAgICAgfQorCSAgfQorCisJZm9yIChfU2FmZV9pdGVyYXRvcl9iYXNlKiBfX2l0ZXIyID0gX01fY29uc3RfbG9jYWxfaXRlcmF0b3JzOyBfX2l0ZXIyOykKKwkgIHsKKwkgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IqIF9fdmljdGltID0KKwkgICAgICBzdGF0aWNfY2FzdDxjb25zdF9sb2NhbF9pdGVyYXRvcio+KF9faXRlcjIpOworCSAgICBfX2l0ZXIyID0gX19pdGVyMi0+X01fbmV4dDsKKwkgICAgaWYgKCFfX3ZpY3RpbS0+X01fc2luZ3VsYXIoKSAmJiBfX3ByZWQoX192aWN0aW0tPmJhc2UoKSkpCisJICAgICAgeworCQlfX3ZpY3RpbS0+X01faW52YWxpZGF0ZSgpOworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworfSAvLyBuYW1lc3BhY2UgX19nbnVfZGVidWcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5N2IxM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3NldApAQCAtMCwwICsxLDM2IEBACisvLyBEZWJ1Z2dpbmcgc2V0L211bHRpc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWJ1Zy9zZXQKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1NFVAorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19TRVQgMQorCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPGRlYnVnL3NldC5oPgorI2luY2x1ZGUgPGRlYnVnL211bHRpc2V0Lmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zZXQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlM2YzZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc2V0LmgKQEAgLTAsMCArMSw0NjkgQEAKKy8vIERlYnVnZ2luZyBzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3NldC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TRVRfSAorI2RlZmluZSBfR0xJQkNYWF9ERUJVR19TRVRfSCAxCisKKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KSAKK3sKK25hbWVzcGFjZSBfX2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6OnNldCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlID0gc3RkOjpsZXNzPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3Mgc2V0CisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0M6OnNldDxfS2V5LF9Db21wYXJlLF9BbGxvY2F0b3I+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTxzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9DOjpzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X0VxdWFsX3RvPF9CYXNlX2NvbnN0X2l0ZXJhdG9yPiBfRXF1YWw7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9LZXkJCQkJICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfS2V5CQkJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZQkJCQkgICAga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICB2YWx1ZV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2l0ZXJhdG9yLCBzZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjxfQmFzZV9jb25zdF9pdGVyYXRvciwgc2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4zLjMuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCQkgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisJOiBfQmFzZShfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsCisJCQkJCQkJCSAgICAgX19sYXN0KSksCisJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSwKKwkJX19jb21wLCBfX2EpIHsgfQorCisgICAgICBzZXQoY29uc3Qgc2V0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIHNldChjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc2V0KHNldCYmIF9feCkKKyAgICAgIG5vZXhjZXB0KGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPF9Db21wYXJlPjo6dmFsdWUpCisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKQorICAgICAgeyB0aGlzLT5fTV9zd2FwKF9feCk7IH0KKworICAgICAgc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2NvbXAsIF9fYSkgeyB9CisjZW5kaWYKKworICAgICAgfnNldCgpIF9HTElCQ1hYX05PRVhDRVBUIHsgfQorCisgICAgICBzZXQmCisgICAgICBvcGVyYXRvcj0oY29uc3Qgc2V0JiBfX3gpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzZXQmCisgICAgICBvcGVyYXRvcj0oc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJX19nbGliY3h4X2NoZWNrX3NlbGZfbW92ZV9hc3NpZ24oX194KTsKKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHNldCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBhdXRvIF9fcmVzID0gX0Jhc2U6OmVtcGxhY2Uoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIHJldHVybiBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+KGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCQkJICAgX19yZXMuc2Vjb25kKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9oaW50KGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcG9zKTsKKwkgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW1wbGFjZV9oaW50KF9fcG9zLmJhc2UoKSwKKwkJCQkJICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKKwkJCSAgdGhpcyk7CisJfQorI2VuZGlmCisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBib29sPiBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX194KTsKKwlyZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkJCSBfX3Jlcy5zZWNvbmQpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBib29sPiBfX3JlcworCSAgPSBfQmFzZTo6aW5zZXJ0KHN0ZDo6bW92ZShfX3gpKTsKKwlyZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkJCSBfX3Jlcy5zZWNvbmQpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9feCksIHRoaXMpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlJiYgX194KQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wb3NpdGlvbik7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIHN0ZDo6bW92ZShfX3gpKSwKKwkJCXRoaXMpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICBfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwkgIF9CYXNlOjppbnNlcnQoX19nbnVfZGVidWc6Ol9fYmFzZShfX2ZpcnN0KSwKKwkJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSk7CisJfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fbCk7IH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9fcG9zaXRpb24pOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fcG9zaXRpb24uYmFzZSgpKSk7CisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSksIHRoaXMpOworICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9fcG9zaXRpb24pOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fcG9zaXRpb24uYmFzZSgpKSk7CisJX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJX0Jhc2VfaXRlcmF0b3IgX192aWN0aW0gPSBfQmFzZTo6ZmluZChfX3gpOworCWlmIChfX3ZpY3RpbSA9PSBfQmFzZTo6ZW5kKCkpCisgICAgICAgICAgcmV0dXJuIDA7CisJZWxzZQorCSAgeworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbChfX3ZpY3RpbSkpOworCSAgICBfQmFzZTo6ZXJhc2UoX192aWN0aW0pOworCSAgICByZXR1cm4gMTsKKwkgIH0KKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJZm9yIChfQmFzZV9jb25zdF9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fZmlyc3QuYmFzZSgpOworCSAgICAgX192aWN0aW0gIT0gX19sYXN0LmJhc2UoKTsgKytfX3ZpY3RpbSkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fdmljdGltICE9IF9CYXNlOjplbmQoKSwKKwkJCQkgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3ZhbGlkX3JhbmdlKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fZmlyc3QsICJmaXJzdCIpCisJCQkJICAuX01faXRlcmF0b3IoX19sYXN0LCAibGFzdCIpKTsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZihfRXF1YWwoX192aWN0aW0pKTsKKwkgIH0KKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKSwgdGhpcyk7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorCV9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCWZvciAoX0Jhc2VfaXRlcmF0b3IgX192aWN0aW0gPSBfX2ZpcnN0LmJhc2UoKTsKKwkgICAgIF9fdmljdGltICE9IF9fbGFzdC5iYXNlKCk7ICsrX192aWN0aW0pCisJICB7CisJICAgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWShfX3ZpY3RpbSAhPSBfQmFzZTo6ZW5kKCksCisJCQkJICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ192YWxpZF9yYW5nZSkKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2ZpcnN0LCAiZmlyc3QiKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fbGFzdCwgImxhc3QiKSk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoX0VxdWFsKF9fdmljdGltKSk7CisJICB9CisJX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBzd2FwKHNldCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJdGhpcy0+X01fc3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfQmFzZTo6Y2xlYXIoKTsKKyAgICAgIH0KKworICAgICAgLy8gb2JzZXJ2ZXJzOgorICAgICAgdXNpbmcgX0Jhc2U6OmtleV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXA7CisKKyAgICAgIC8vIHNldCBvcGVyYXRpb25zOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpjb3VudDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6bG93ZXJfYm91bmQoX194KSwgdGhpcyk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpLCB0aGlzKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCksIHRoaXMpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19yZXMgPQorICAgICAgICBfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisgICAgICAgIF9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQsIHRoaXMpKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgX0dMSUJDWFhfTk9FWENFUFQgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2FsbCgpCisgICAgICB7CisJdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X05vdF9lcXVhbF90bzxfQmFzZV9jb25zdF9pdGVyYXRvcj4gX05vdF9lcXVhbDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9Ob3RfZXF1YWwoX01fYmFzZSgpLmVuZCgpKSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPCBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICB2b2lkCisgICAgc3dhcChzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3gsCisJIHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guc3dhcChfX3kpOyB9CisKK30gLy8gbmFtZXNwYWNlIF9fZGVidWcKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc3RyaW5nIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy9zdHJpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1YmY5YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvc3RyaW5nCkBAIC0wLDAgKzEsMTE2MSBAQAorLy8gRGVidWdnaW5nIHN0cmluZyBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVidWcvc3RyaW5nCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGRlYnVnIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9ERUJVR19TVFJJTkcKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfU1RSSU5HIDEKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorCituYW1lc3BhY2UgX19nbnVfZGVidWcKK3sKKyAgLy8vIENsYXNzIHN0ZDo6YmFzaWNfc3RyaW5nIHdpdGggc2FmZXR5L2NoZWNraW5nL2RlYnVnIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX3N0cmluZworICAgIDogcHVibGljIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRvcj4sCisgICAgICBwdWJsaWMgX19nbnVfZGVidWc6Ol9TYWZlX3NlcXVlbmNlPGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsCisJCQkJCQkgICAgICBfQWxsb2NhdG9yPiA+CisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvY2F0b3I+IF9CYXNlOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfc2VxdWVuY2U8YmFzaWNfc3RyaW5nPiAgICAgX1NhZmVfYmFzZTsKKworICBwdWJsaWM6CisgICAgLy8gdHlwZXM6CisgICAgdHlwZWRlZiBfVHJhaXRzCQkJCSAgICAgICB0cmFpdHNfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZQkJICAgICAgIHZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJCSAgICAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOworCisgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8dHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yLCBiYXNpY19zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8dHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJhdG9yOworCisgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgdXNpbmcgX0Jhc2U6Om5wb3M7CisKKyAgICAvLyAyMS4zLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICBleHBsaWNpdCBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgIDogX0Jhc2UoX19hKQorICAgIHsgfQorCisgICAgLy8gUHJvdmlkZXMgY29udmVyc2lvbiBmcm9tIGEgcmVsZWFzZS1tb2RlIHN0cmluZyB0byBhIGRlYnVnLW1vZGUgc3RyaW5nCisgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9CYXNlJiBfX2Jhc2UpIDogX0Jhc2UoX19iYXNlKSB7IH0KKworICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAvLyA0Mi4gc3RyaW5nIGN0b3JzIHNwZWNpZnkgd3JvbmcgZGVmYXVsdCBhbGxvY2F0b3IKKyAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICA6IF9CYXNlKF9fc3RyLCAwLCBfQmFzZTo6bnBvcywgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQorICAgIHsgfQorCisgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgIC8vIDQyLiBzdHJpbmcgY3RvcnMgc3BlY2lmeSB3cm9uZyBkZWZhdWx0IGFsbG9jYXRvcgorICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCisJCSAgIHNpemVfdHlwZSBfX24gPSBfQmFzZTo6bnBvcywKKwkJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgIDogX0Jhc2UoX19zdHIsIF9fcG9zLCBfX24sIF9fYSkKKyAgICB7IH0KKworICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKKwkJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgIDogX0Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfc3RyaW5nKF9fcywgX19uKSwgX19uLCBfX2EpCisgICAgeyB9CisKKyAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICA6IF9CYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3N0cmluZyhfX3MpLCBfX2EpCisgICAgeyB0aGlzLT5hc3NpZ24oX19zKTsgfQorCisgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsCisJCSAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICA6IF9CYXNlKF9fbiwgX19jLCBfX2EpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKKwkJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3ZhbGlkX3JhbmdlKF9fYmVnaW4sCisJCQkJCQkJCSAgIF9fZW5kKSksCisJICAgICAgX19nbnVfZGVidWc6Ol9fYmFzZShfX2VuZCksIF9fYSkKKyAgICAgIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIGJhc2ljX3N0cmluZyhiYXNpY19zdHJpbmcmJiBfX3N0cikgbm9leGNlcHQKKyAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3N0cikpCisgICAgeyB9CisKKyAgICBiYXNpY19zdHJpbmcoc3RkOjppbml0aWFsaXplcl9saXN0PF9DaGFyVD4gX19sLAorCQkgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgIDogX0Jhc2UoX19sLCBfX2EpCisgICAgeyB9CisjZW5kaWYgLy8gQysrMTEKKworICAgIH5iYXNpY19zdHJpbmcoKSBfR0xJQkNYWF9OT0VYQ0VQVCB7IH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICAqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9fc3RyOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgICpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX19zOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpCisgICAgeworICAgICAgKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX2M7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICBiYXNpY19zdHJpbmcmCisgICAgb3BlcmF0b3I9KGJhc2ljX3N0cmluZyYmIF9fc3RyKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zZWxmX21vdmVfYXNzaWduKF9fc3RyKTsKKyAgICAgICpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gc3RkOjptb3ZlKF9fc3RyKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIG9wZXJhdG9yPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgeworICAgICAgKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX2w7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgLy8gMjEuMy4yIGl0ZXJhdG9yczoKKyAgICBpdGVyYXRvcgorICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgaXRlcmF0b3IKKyAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgLy8gMjEuMy4zIGNhcGFjaXR5OgorICAgIHVzaW5nIF9CYXNlOjpzaXplOworICAgIHVzaW5nIF9CYXNlOjpsZW5ndGg7CisgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisgICAgdm9pZAorICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9CYXNlOjpyZXNpemUoX19uLCBfX2MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgcmVzaXplKHNpemVfdHlwZSBfX24pCisgICAgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICB2b2lkCisgICAgc2hyaW5rX3RvX2ZpdCgpCisgICAgeworICAgICAgaWYgKGNhcGFjaXR5KCkgPiBzaXplKCkpCisJeworCSAgX190cnkKKwkgICAgeworCSAgICAgIHJlc2VydmUoMCk7CisJICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgfQorCX0KKyAgICB9CisjZW5kaWYKKworICAgIHVzaW5nIF9CYXNlOjpjYXBhY2l0eTsKKyAgICB1c2luZyBfQmFzZTo6cmVzZXJ2ZTsKKworICAgIHZvaWQKKyAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeworICAgICAgX0Jhc2U6OmNsZWFyKCk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgIH0KKworICAgIHVzaW5nIF9CYXNlOjplbXB0eTsKKworICAgIC8vIDIxLjMuNCBlbGVtZW50IGFjY2VzczoKKyAgICBjb25zdF9yZWZlcmVuY2UKKyAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX19wb3MgPD0gdGhpcy0+c2l6ZSgpLAorCQkJICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3N1YnNjcmlwdF9vb2IpCisJCQkgICAgLl9NX3NlcXVlbmNlKCp0aGlzLCAidGhpcyIpCisJCQkgICAgLl9NX2ludGVnZXIoX19wb3MsICJfX3BvcyIpCisJCQkgICAgLl9NX2ludGVnZXIodGhpcy0+c2l6ZSgpLCAic2l6ZSIpKTsKKyAgICAgIHJldHVybiBfTV9iYXNlKClbX19wb3NdOworICAgIH0KKworICAgIHJlZmVyZW5jZQorICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQorICAgIHsKKyNpZmRlZiBfR0xJQkNYWF9ERUJVR19QRURBTlRJQworICAgICAgX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX3Bvcyk7CisjZWxzZQorICAgICAgLy8gYXMgYW4gZXh0ZW5zaW9uIHYzIGFsbG93cyBzW3Muc2l6ZSgpXSB3aGVuIHMgaXMgbm9uLWNvbnN0LgorICAgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fcG9zIDw9IHRoaXMtPnNpemUoKSwKKwkJCSAgICBfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21zZ19zdWJzY3JpcHRfb29iKQorCQkJICAgIC5fTV9zZXF1ZW5jZSgqdGhpcywgInRoaXMiKQorCQkJICAgIC5fTV9pbnRlZ2VyKF9fcG9zLCAiX19wb3MiKQorCQkJICAgIC5fTV9pbnRlZ2VyKHRoaXMtPnNpemUoKSwgInNpemUiKSk7CisjZW5kaWYKKyAgICAgIHJldHVybiBfTV9iYXNlKClbX19wb3NdOworICAgIH0KKworICAgIHVzaW5nIF9CYXNlOjphdDsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICB1c2luZyBfQmFzZTo6ZnJvbnQ7CisgICAgdXNpbmcgX0Jhc2U6OmJhY2s7CisjZW5kaWYKKworICAgIC8vIDIxLjMuNSBtb2RpZmllcnM6CisgICAgYmFzaWNfc3RyaW5nJgorICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICBfTV9iYXNlKCkgKz0gX19zdHI7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIF9NX2Jhc2UoKSArPSBfX3M7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX01fYmFzZSgpICs9IF9fYzsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIGJhc2ljX3N0cmluZyYKKyAgICBvcGVyYXRvcis9KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICB7CisgICAgICBfTV9iYXNlKCkgKz0gX19sOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYgLy8gQysrMTEKKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICBfQmFzZTo6YXBwZW5kKF9fc3RyKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0Jhc2U6OmFwcGVuZChfX3N0ciwgX19wb3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgX0Jhc2U6OmFwcGVuZChfX3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgX0Jhc2U6OmFwcGVuZChfX3MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX0Jhc2U6OmFwcGVuZChfX24sIF9fYyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlfQmFzZTo6YXBwZW5kKF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCSAgICAgIF9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgLy8gNy4gc3RyaW5nIGNsYXVzZSBtaW5vciBwcm9ibGVtcworICAgIHZvaWQKKyAgICBwdXNoX2JhY2soX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBfQmFzZTo6cHVzaF9iYWNrKF9fYyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3gpCisgICAgeworICAgICAgX0Jhc2U6OmFzc2lnbihfX3gpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGFzc2lnbihiYXNpY19zdHJpbmcmJiBfX3gpCisgICAgeworICAgICAgX0Jhc2U6OmFzc2lnbihzdGQ6Om1vdmUoX194KSk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0Jhc2U6OmFzc2lnbihfX3N0ciwgX19wb3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgX0Jhc2U6OmFzc2lnbihfX3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgX0Jhc2U6OmFzc2lnbihfX3MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX0Jhc2U6OmFzc2lnbihfX24sIF9fYyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgYmFzaWNfc3RyaW5nJgorICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlfQmFzZTo6YXNzaWduKF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCSAgICAgIF9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGFzc2lnbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgeworICAgICAgX0Jhc2U6OmFzc2lnbihfX2wpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYgLy8gQysrMTEKKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zMSwgX19zdHIpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCisJICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zMSwgX19zdHIsIF9fcG9zMiwgX19uKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIF9CYXNlOjppbnNlcnQoX19wb3MsIF9fcywgX19uKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIF9CYXNlOjppbnNlcnQoX19wb3MsIF9fcyk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9CYXNlOjppbnNlcnQoX19wb3MsIF9fbiwgX19jKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgaXRlcmF0b3IKKyAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wKTsKKyAgICAgIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19wLmJhc2UoKSwgX19jKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gaXRlcmF0b3IoX19yZXMsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQKKyAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19wKTsKKyAgICAgIF9CYXNlOjppbnNlcnQoX19wLmJhc2UoKSwgX19uLCBfX2MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X3JhbmdlKF9fcCwgX19maXJzdCwgX19sYXN0KTsKKwlfQmFzZTo6aW5zZXJ0KF9fcC5iYXNlKCksIF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCQkJICBfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCkpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdm9pZAorICAgIGluc2VydChpdGVyYXRvciBfX3AsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9fcCk7CisgICAgICBfQmFzZTo6aW5zZXJ0KF9fcC5iYXNlKCksIF9fbCk7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgIH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBfQmFzZTo6bnBvcykKKyAgICB7CisgICAgICBfQmFzZTo6ZXJhc2UoX19wb3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGl0ZXJhdG9yCisgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19wb3NpdGlvbik7CisgICAgICB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbi5iYXNlKCkpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisgICAgfQorCisgICAgaXRlcmF0b3IKKyAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLAorCQkJCQkJICAgICAgIF9fbGFzdC5iYXNlKCkpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHZvaWQKKyAgICBwb3BfYmFjaygpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX25vbmVtcHR5KCk7CisgICAgICBfQmFzZTo6cG9wX2JhY2soKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgfQorI2VuZGlmIC8vIEMrKzExCisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICBfQmFzZTo6cmVwbGFjZShfX3BvczEsIF9fbjEsIF9fc3RyKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCisJICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQorICAgIHsKKyAgICAgIF9CYXNlOjpyZXBsYWNlKF9fcG9zMSwgX19uMSwgX19zdHIsIF9fcG9zMiwgX19uMik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICBzaXplX3R5cGUgX19uMikKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xlbihfX3MsIF9fbjIpOworICAgICAgX0Jhc2U6OnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywgX19uMik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIF9CYXNlOjpyZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBiYXNpY19zdHJpbmcmCisgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBfQmFzZTo6cmVwbGFjZShfX3BvcywgX19uMSwgX19uMiwgX19jKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19pMSwgX19pMik7CisgICAgICBfQmFzZTo6cmVwbGFjZShfX2kxLmJhc2UoKSwgX19pMi5iYXNlKCksIF9fc3RyKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9faTEsIF9faTIpOworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgX0Jhc2U6OnJlcGxhY2UoX19pMS5iYXNlKCksIF9faTIuYmFzZSgpLCBfX3MsIF9fbik7CisgICAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJhc2ljX3N0cmluZyYKKyAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19lcmFzZV9yYW5nZShfX2kxLCBfX2kyKTsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIF9CYXNlOjpyZXBsYWNlKF9faTEuYmFzZSgpLCBfX2kyLmJhc2UoKSwgX19zKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYmFzaWNfc3RyaW5nJgorICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19pMSwgX19pMik7CisgICAgICBfQmFzZTo6cmVwbGFjZShfX2kxLmJhc2UoKSwgX19pMi5iYXNlKCksIF9fbiwgX19jKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICBiYXNpY19zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCisJICAgICAgX0lucHV0SXRlcmF0b3IgX19qMSwgX0lucHV0SXRlcmF0b3IgX19qMikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19pMSwgX19pMik7CisJX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fajEsIF9fajIpOworCV9CYXNlOjpyZXBsYWNlKF9faTEuYmFzZSgpLCBfX2kyLmJhc2UoKSwgX19qMSwgX19qMik7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBiYXNpY19zdHJpbmcmIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKKwkJCSAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9faTEsIF9faTIpOworCV9CYXNlOjpyZXBsYWNlKF9faTEuYmFzZSgpLCBfX2kyLmJhc2UoKSwgX19sKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgc2l6ZV90eXBlCisgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICByZXR1cm4gX0Jhc2U6OmNvcHkoX19zLCBfX24sIF9fcG9zKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9feCkKKyAgICB7CisgICAgICBfQmFzZTo6c3dhcChfX3gpOworICAgICAgdGhpcy0+X01fc3dhcChfX3gpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIF9feC5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgIH0KKworICAgIC8vIDIxLjMuNiBzdHJpbmcgb3BlcmF0aW9uczoKKyAgICBjb25zdCBfQ2hhclQqCisgICAgY19zdHIoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIGNvbnN0IF9DaGFyVCogX19yZXMgPSBfQmFzZTo6Y19zdHIoKTsKKyAgICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gX19yZXM7CisgICAgfQorCisgICAgY29uc3QgX0NoYXJUKgorICAgIGRhdGEoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIGNvbnN0IF9DaGFyVCogX19yZXMgPSBfQmFzZTo6ZGF0YSgpOworICAgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiBfX3JlczsKKyAgICB9CisKKyAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgIHNpemVfdHlwZQorICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gX0Jhc2U6OmZpbmQoX19zdHIsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIHJldHVybiBfQmFzZTo6ZmluZChfX3MsIF9fcG9zLCBfX24pOworICAgIH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpmaW5kKF9fcywgX19wb3MpOworICAgIH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBfQmFzZTo6ZmluZChfX2MsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gX0Jhc2U6Om5wb3MpIGNvbnN0CisgICAgICBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIF9CYXNlOjpyZmluZChfX3N0ciwgX19wb3MpOyB9CisKKyAgICBzaXplX3R5cGUKKyAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIHJldHVybiBfQmFzZTo6cmZpbmQoX19zLCBfX3BvcywgX19uKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gX0Jhc2U6Om5wb3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpyZmluZChfX3MsIF9fcG9zKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBfQmFzZTo6bnBvcykgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBfQmFzZTo6cmZpbmQoX19jLCBfX3Bvcyk7IH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gX0Jhc2U6OmZpbmRfZmlyc3Rfb2YoX19zdHIsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19zKTsKKyAgICAgIHJldHVybiBfQmFzZTo6ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCBfX24pOworICAgIH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpmaW5kX2ZpcnN0X29mKF9fcywgX19wb3MpOworICAgIH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBfQmFzZTo6ZmluZF9maXJzdF9vZihfX2MsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIAorCQkgc2l6ZV90eXBlIF9fcG9zID0gX0Jhc2U6Om5wb3MpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gX0Jhc2U6OmZpbmRfbGFzdF9vZihfX3N0ciwgX19wb3MpOyB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICByZXR1cm4gX0Jhc2U6OmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCBfX24pOworICAgIH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gX0Jhc2U6Om5wb3MpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpmaW5kX2xhc3Rfb2YoX19zLCBfX3Bvcyk7CisgICAgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IF9CYXNlOjpucG9zKSBjb25zdAorICAgICAgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBfQmFzZTo6ZmluZF9sYXN0X29mKF9fYywgX19wb3MpOyB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgICAgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBfQmFzZTo6ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICByZXR1cm4gX0Jhc2U6OmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIF9fbik7CisgICAgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3MpOworICAgICAgcmV0dXJuIF9CYXNlOjpmaW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIF9CYXNlOjpmaW5kX2ZpcnN0X25vdF9vZihfX2MsIF9fcG9zKTsgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAorCQkJCSAgc2l6ZV90eXBlIF9fcG9zID0gX0Jhc2U6Om5wb3MpIGNvbnN0CisgICAgICBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIF9CYXNlOjpmaW5kX2xhc3Rfbm90X29mKF9fc3RyLCBfX3Bvcyk7IH0KKworICAgIHNpemVfdHlwZQorICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICByZXR1cm4gX0Jhc2U6OmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgX19uKTsKKyAgICB9CisKKyAgICBzaXplX3R5cGUKKyAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBfQmFzZTo6bnBvcykgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICByZXR1cm4gX0Jhc2U6OmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3Bvcyk7CisgICAgfQorCisgICAgc2l6ZV90eXBlCisgICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBfQmFzZTo6bnBvcykgY29uc3QKKyAgICAgIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gX0Jhc2U6OmZpbmRfbGFzdF9ub3Rfb2YoX19jLCBfX3Bvcyk7IH0KKworICAgIGJhc2ljX3N0cmluZworICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gX0Jhc2U6Om5wb3MpIGNvbnN0CisgICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nKF9CYXNlOjpzdWJzdHIoX19wb3MsIF9fbikpOyB9CisKKyAgICBpbnQKKyAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CisgICAgeyByZXR1cm4gX0Jhc2U6OmNvbXBhcmUoX19zdHIpOyB9CisKKyAgICBpbnQKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLAorCQkgIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CisgICAgeyByZXR1cm4gX0Jhc2U6OmNvbXBhcmUoX19wb3MxLCBfX24xLCBfX3N0cik7IH0KKworICAgIGludAorICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCisJICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CisgICAgeyByZXR1cm4gX0Jhc2U6OmNvbXBhcmUoX19wb3MxLCBfX24xLCBfX3N0ciwgX19wb3MyLCBfX24yKTsgfQorCisgICAgaW50CisgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICByZXR1cm4gX0Jhc2U6OmNvbXBhcmUoX19zKTsKKyAgICB9CisKKyAgICAvLyAgX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgIC8vICA1LiBzdHJpbmc6OmNvbXBhcmUgc3BlY2lmaWNhdGlvbiBxdWVzdGlvbmFibGUKKyAgICBpbnQKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfY2hlY2tfc3RyaW5nKF9fcyk7CisgICAgICByZXR1cm4gX0Jhc2U6OmNvbXBhcmUoX19wb3MxLCBfX24xLCBfX3MpOworICAgIH0KKworICAgIC8vICBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgLy8gIDUuIHN0cmluZzo6Y29tcGFyZSBzcGVjaWZpY2F0aW9uIHF1ZXN0aW9uYWJsZQorICAgIGludAorICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsY29uc3QgX0NoYXJUKiBfX3MsCisJICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZ19sZW4oX19zLCBfX24yKTsKKyAgICAgIHJldHVybiBfQmFzZTo6Y29tcGFyZShfX3BvczEsIF9fbjEsIF9fcywgX19uMik7CisgICAgfQorCisgICAgX0Jhc2UmCisgICAgX01fYmFzZSgpIF9HTElCQ1hYX05PRVhDRVBUICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBjb25zdCBfQmFzZSYKKyAgICBfTV9iYXNlKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHVzaW5nIF9TYWZlX2Jhc2U6Ol9NX2ludmFsaWRhdGVfYWxsOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+CisgICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4oX19saHMpICs9IF9fcmhzOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4KKyAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19saHMpOworICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPihfX2xocykgKz0gX19yaHM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+CisgICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPigxLCBfX2xocykgKz0gX19yaHM7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPgorICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3Jocyk7CisgICAgICByZXR1cm4gYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+KF9fbGhzKSArPSBfX3JoczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4KKyAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBfQ2hhclQgX19yaHMpCisgICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+KF9fbGhzKSArPSBfX3JoczsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19saHMpOworICAgICAgcmV0dXJuIF9fbGhzID09IF9fcmhzLl9NX2Jhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3JoczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX2xocyk7CisgICAgICByZXR1cm4gX19saHMgIT0gX19yaHMuX01fYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3Jocyk7CisgICAgICByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX2xocyk7CisgICAgICByZXR1cm4gX19saHMgPCBfX3Jocy5fTV9iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3Jocyk7CisgICAgICByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19saHMpOworICAgICAgcmV0dXJuIF9fbGhzIDw9IF9fcmhzLl9NX2Jhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jaGVja19zdHJpbmcoX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3JoczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX2xocyk7CisgICAgICByZXR1cm4gX19saHMgPj0gX19yaHMuX01fYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3Jocyk7CisgICAgICByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX2xocyk7CisgICAgICByZXR1cm4gX19saHMgPiBfX3Jocy5fTV9iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X2NoZWNrX3N0cmluZyhfX3Jocyk7CisgICAgICByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHM7CisgICAgfQorCisgIC8vIDIxLjMuNy44OgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19saHMsCisJIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPiYgX19zdHIpCisgICAgeyByZXR1cm4gX19vcyA8PCBfX3N0ci5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19zdHIpCisgICAgeworICAgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19yZXMgPSBfX2lzID4+IF9fc3RyLl9NX2Jhc2UoKTsKKyAgICAgIF9fc3RyLl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICByZXR1cm4gX19yZXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgorICAgIGdldGxpbmUoc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pcywKKwkgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvY2F0b3I+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCisgICAgeworICAgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19yZXMgPSBnZXRsaW5lKF9faXMsCisJCQkJCQkJICBfX3N0ci5fTV9iYXNlKCksCisJCQkJCQkJX19kZWxpbSk7CisgICAgICBfX3N0ci5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgcmV0dXJuIF9fcmVzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKKyAgICBnZXRsaW5lKHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faXMsCisJICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2NhdG9yPiYgX19zdHIpCisgICAgeworICAgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19yZXMgPSBnZXRsaW5lKF9faXMsCisJCQkJCQkJICBfX3N0ci5fTV9iYXNlKCkpOworICAgICAgX19zdHIuX01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIHJldHVybiBfX3JlczsKKyAgICB9CisKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gICAgc3RyaW5nOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdHlwZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvdW5vcmRlcmVkX21hcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvdW5vcmRlcmVkX21hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODI2YjAxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy91bm9yZGVyZWRfbWFwCkBAIC0wLDAgKzEsOTAzIEBACisvLyBEZWJ1Z2dpbmcgdW5vcmRlcmVkX21hcC91bm9yZGVyZWRfbXVsdGltYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3Vub3JkZXJlZF9tYXAKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1VOT1JERVJFRF9NQVAKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfVU5PUkRFUkVEX01BUCAxCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorCisjaW5jbHVkZSA8ZGVidWcvc2FmZV91bm9yZGVyZWRfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfbG9jYWxfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19kZWJ1ZworeworICAvLy8gQ2xhc3Mgc3RkOjp1bm9yZGVyZWRfbWFwIHdpdGggc2FmZXR5L2NoZWNraW5nL2RlYnVnIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9IYXNoID0gc3RkOjpoYXNoPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfS2V5PiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX21hcAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9DOjp1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyPHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLAorCQkJCQkJCV9IYXNoLCBfUHJlZCwgX0FsbG9jPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfQzo6dW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLAorCQkJCQkgICAgX1ByZWQsIF9BbGxvYz4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyPHVub3JkZXJlZF9tYXA+IF9TYWZlX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfbG9jYWxfaXRlcmF0b3IgX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpsb2NhbF9pdGVyYXRvciBfQmFzZV9sb2NhbF9pdGVyYXRvcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X3R5cGUgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2l0ZXJhdG9yLAorCQkJCQkgIHVub3JkZXJlZF9tYXA+IGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8X0Jhc2VfY29uc3RfaXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX21hcD4gY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9sb2NhbF9pdGVyYXRvcjxfQmFzZV9sb2NhbF9pdGVyYXRvciwKKwkJCQkJICB1bm9yZGVyZWRfbWFwPiBsb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2xvY2FsX2l0ZXJhdG9yPF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yLAorCQkJCQkgIHVub3JkZXJlZF9tYXA+IGNvbnN0X2xvY2FsX2l0ZXJhdG9yOworCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX21hcChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl1bm9yZGVyZWRfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgCisJCSAgICAgIHNpemVfdHlwZSBfX24gPSAwLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCSAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwgCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19nbnVfZGVidWc6Ol9fYmFzZShfX2dudV9kZWJ1Zzo6X19jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LAorCQkJCQkJCQkgICAgIF9fbGFzdCkpLAorCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCksIF9fbiwKKwkJX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tYXAoY29uc3QgdW5vcmRlcmVkX21hcCYgX194KSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9tYXAoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSB7IH0KKworICAgICAgdW5vcmRlcmVkX21hcCh1bm9yZGVyZWRfbWFwJiYgX194KSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9tYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCSAgICBzaXplX3R5cGUgX19uID0gMCwKKwkJICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7IH0KKworICAgICAgfnVub3JkZXJlZF9tYXAoKSBub2V4Y2VwdCB7IH0KKworICAgICAgdW5vcmRlcmVkX21hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB1bm9yZGVyZWRfbWFwJiBfX3gpCisgICAgICB7CisJKnN0YXRpY19jYXN0PF9CYXNlKj4odGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tYXAmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX21hcCYmIF9feCkKKyAgICAgIHsKKyAgIAkvLyBOQjogRFIgMTIwNC4KKwkvLyBOQjogRFIgNjc1LgorCV9fZ2xpYmN4eF9jaGVja19zZWxmX21vdmVfYXNzaWduKF9feCk7CisJY2xlYXIoKTsKKwlzd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXRoaXMtPmNsZWFyKCk7CisJdGhpcy0+aW5zZXJ0KF9fbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHVub3JkZXJlZF9tYXAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6c3dhcChfX3gpOworCV9TYWZlX2Jhc2U6Ol9NX3N3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBub2V4Y2VwdAorICAgICAgeworCV9CYXNlOjpjbGVhcigpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yIAorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIC8vIGxvY2FsIHZlcnNpb25zCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fYikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfYnVja2V0X2luZGV4KF9fYik7CisJcmV0dXJuIGxvY2FsX2l0ZXJhdG9yKF9CYXNlOjpiZWdpbihfX2IpLCBfX2IsIHRoaXMpOworICAgICAgfQorCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSBfX2IpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2J1Y2tldF9pbmRleChfX2IpOworCXJldHVybiBsb2NhbF9pdGVyYXRvcihfQmFzZTo6ZW5kKF9fYiksIF9fYiwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKF9fYiksIF9fYiwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBlbmQoc2l6ZV90eXBlIF9fYikgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfYnVja2V0X2luZGV4KF9fYik7CisJcmV0dXJuIGNvbnN0X2xvY2FsX2l0ZXJhdG9yKF9CYXNlOjplbmQoX19iKSwgX19iLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGNiZWdpbihzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmNiZWdpbihfX2IpLCBfX2IsIHRoaXMpOworICAgICAgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2VuZChzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmNlbmQoX19iKSwgX19iLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfc2l6ZShzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gX0Jhc2U6OmJ1Y2tldF9zaXplKF9fYik7CisgICAgICB9CisKKyAgICAgIGZsb2F0CisgICAgICBtYXhfbG9hZF9mYWN0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX0Jhc2U6Om1heF9sb2FkX2ZhY3RvcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcihmbG9hdCBfX2YpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX21heF9sb2FkX2ZhY3RvcihfX2YpOworCV9CYXNlOjptYXhfbG9hZF9mYWN0b3IoX19mKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJICBzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIGJvb2w+IF9fcmVzCisJICAgID0gX0Jhc2U6OmVtcGxhY2Uoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIF9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwkgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksIF9fcmVzLnNlY29uZCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2VfaGludChjb25zdF9pdGVyYXRvciBfX2hpbnQsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19oaW50KTsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCSAgX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjplbXBsYWNlX2hpbnQoX19oaW50LmJhc2UoKSwKKwkJCQkJc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIF9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwkgIHJldHVybiBpdGVyYXRvcihfX2l0LCB0aGlzKTsKKwl9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIGJvb2w+IF9fcmVzID0gX0Jhc2U6Omluc2VydChfX29iaik7CisJX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksIF9fcmVzLnNlY29uZCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19oaW50LCBjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9faGludCk7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjppbnNlcnQoX19oaW50LmJhc2UoKSwgX19vYmopOyAKKwlfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9faXQsIHRoaXMpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwKKwkJCQkJCSAgICBfUGFpciYmPjo6dmFsdWU+Ojp0eXBlPgorCXN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKwlpbnNlcnQoX1BhaXImJiBfX29iaikKKwl7CisJICBzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwkgIHN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgYm9vbD4gX19yZXMgPQorCSAgICBfQmFzZTo6aW5zZXJ0KHN0ZDo6Zm9yd2FyZDxfUGFpcj4oX19vYmopKTsKKwkgIF9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwkgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksIF9fcmVzLnNlY29uZCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwKKwkJCQkJCSAgICBfUGFpciYmPjo6dmFsdWU+Ojp0eXBlPgorCWl0ZXJhdG9yCisJaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faGludCwgX1BhaXImJiBfX29iaikKKwl7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9faGludCk7CisJICBzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwkgIF9CYXNlX2l0ZXJhdG9yIF9faXQgPQorCSAgICBfQmFzZTo6aW5zZXJ0KF9faGludC5iYXNlKCksIHN0ZDo6Zm9yd2FyZDxfUGFpcj4oX19vYmopKTsKKwkgIF9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwkgIHJldHVybiBpdGVyYXRvcihfX2l0LCB0aGlzKTsKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCV9CYXNlOjppbnNlcnQoX19sKTsKKwlfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorCXZvaWQKKwlpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCkpOworCSAgX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCX0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX19rZXkpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZmluZChfX2tleSksIHRoaXMpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19yZXMgPQorCSAgX0Jhc2U6OmVxdWFsX3JhbmdlKF9fa2V5KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLCBfQmFzZV9jb25zdF9pdGVyYXRvcj4gX19yZXMgPQorCSAgX0Jhc2U6OmVxdWFsX3JhbmdlKF9fa2V5KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeworCXNpemVfdHlwZSBfX3JldCgwKTsKKwlfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbShfQmFzZTo6ZmluZChfX2tleSkpOworCWlmIChfX3ZpY3RpbSAhPSBfQmFzZTo6ZW5kKCkpCisJICB7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoW19fdmljdGltXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCQkJICAgIHsgcmV0dXJuIF9faXQgPT0gX192aWN0aW07IH0pOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2xvY2FsX2lmKAorCQkJICAgIFtfX3ZpY3RpbV0oX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3IgX19pdCkKKwkJCSAgICB7IHJldHVybiBfX2l0Ll9NX2N1ciA9PSBfX3ZpY3RpbS5fTV9jdXI7IH0pOworCSAgICBzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwkgICAgX0Jhc2U6OmVyYXNlKF9fdmljdGltKTsKKwkgICAgX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCSAgICBfX3JldCA9IDE7CisJICB9CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19pdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19pdCk7CisJX0Jhc2VfY29uc3RfaXRlcmF0b3IgX192aWN0aW0gPSBfX2l0LmJhc2UoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKFtfX3ZpY3RpbV0oX0Jhc2VfY29uc3RfaXRlcmF0b3IgX19pdCkKKwkJCXsgcmV0dXJuIF9faXQgPT0gX192aWN0aW07IH0pOworCXRoaXMtPl9NX2ludmFsaWRhdGVfbG9jYWxfaWYoCisJCQlbX192aWN0aW1dKF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yIF9faXQpCisJCQl7IHJldHVybiBfX2l0Ll9NX2N1ciA9PSBfX3ZpY3RpbS5fTV9jdXI7IH0pOworCXNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCV9CYXNlX2l0ZXJhdG9yIF9fbmV4dCA9IF9CYXNlOjplcmFzZShfX2l0LmJhc2UoKSk7IAorCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19uZXh0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IHJldHVybiBlcmFzZShjb25zdF9pdGVyYXRvcihfX2l0KSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlmb3IgKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX19maXJzdC5iYXNlKCk7CisJICAgICBfX3RtcCAhPSBfX2xhc3QuYmFzZSgpOyArK19fdG1wKQorCSAgeworCSAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX190bXAgIT0gX0Jhc2U6OmVuZCgpLAorCQkJCSAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdmFsaWRfcmFuZ2UpCisJCQkJICAuX01faXRlcmF0b3IoX19maXJzdCwgImZpcnN0IikKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2xhc3QsICJsYXN0IikpOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKFtfX3RtcF0oX0Jhc2VfY29uc3RfaXRlcmF0b3IgX19pdCkKKwkJCSAgICB7IHJldHVybiBfX2l0ID09IF9fdG1wOyB9KTsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9sb2NhbF9pZigKKwkJCSAgICBbX190bXBdKF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yIF9faXQpCisJCQkgICAgeyByZXR1cm4gX19pdC5fTV9jdXIgPT0gX190bXAuX01fY3VyOyB9KTsKKwkgIH0KKwlzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwlfQmFzZV9pdGVyYXRvciBfX25leHQgPSBfQmFzZTo6ZXJhc2UoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCkpOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19uZXh0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgbm9leGNlcHQgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2xvY2FscygpCisgICAgICB7CisJX0Jhc2VfbG9jYWxfaXRlcmF0b3IgX19sb2NhbF9lbmQgPSBfQmFzZTo6ZW5kKDApOworCXRoaXMtPl9NX2ludmFsaWRhdGVfbG9jYWxfaWYoCisJCQlbX19sb2NhbF9lbmRdKF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yIF9faXQpCisJCQl7IHJldHVybiBfX2l0ICE9IF9fbG9jYWxfZW5kOyB9KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCV9CYXNlX2l0ZXJhdG9yIF9fZW5kID0gX0Jhc2U6OmVuZCgpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoW19fZW5kXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCQkJeyByZXR1cm4gX19pdCAhPSBfX2VuZDsgfSk7CisJX01faW52YWxpZGF0ZV9sb2NhbHMoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fY2hlY2tfcmVoYXNoZWQoc2l6ZV90eXBlIF9fcHJldl9jb3VudCkKKyAgICAgIHsKKwlpZiAoX19wcmV2X2NvdW50ICE9IHRoaXMtPmJ1Y2tldF9jb3VudCgpKQorCSAgX01faW52YWxpZGF0ZV9sb2NhbHMoKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fYmFzZSgpID09IF9feS5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworCisgIC8vLyBDbGFzcyBzdGQ6OnVub3JkZXJlZF9tdWx0aW1hcCB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfSGFzaCA9IHN0ZDo6aGFzaDxfS2V5PiwKKwkgICB0eXBlbmFtZSBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X0tleT4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9tdWx0aW1hcAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9DOjp1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwKKwkJCQkJCV9QcmVkLCBfQWxsb2M+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyPHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LAorCQkJCQkJX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0M6OnVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLAorCQkJCQkJIF9QcmVkLCBfQWxsb2M+IF9CYXNlOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lcjx1bm9yZGVyZWRfbXVsdGltYXA+CisJX1NhZmVfYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9sb2NhbF9pdGVyYXRvciBfQmFzZV9jb25zdF9sb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmxvY2FsX2l0ZXJhdG9yIF9CYXNlX2xvY2FsX2l0ZXJhdG9yOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfdHlwZSAgICAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8X0Jhc2VfaXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX211bHRpbWFwPiBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLAorCQkJCQkgIHVub3JkZXJlZF9tdWx0aW1hcD4gY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9sb2NhbF9pdGVyYXRvcjwKKwlfQmFzZV9sb2NhbF9pdGVyYXRvciwgdW5vcmRlcmVkX211bHRpbWFwPiBsb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2xvY2FsX2l0ZXJhdG9yPAorCV9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yLCB1bm9yZGVyZWRfbXVsdGltYXA+IGNvbnN0X2xvY2FsX2l0ZXJhdG9yOworCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX211bHRpbWFwKHNpemVfdHlwZSBfX24gPSAxMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorCXVub3JkZXJlZF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIAorCQkJICAgc2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCQkgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksIAorCQkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsCisJCQkJCQkJCSAgICAgX19sYXN0KSksCisJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSwgX19uLAorCQlfX2hmLCBfX2VxbCwgX19hKSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpbWFwKGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcCYgX194KSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChjb25zdCBfQmFzZSYgX194KSAKKyAgICAgIDogX0Jhc2UoX194KSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpbWFwKHVub3JkZXJlZF9tdWx0aW1hcCYmIF9feCkgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCQkgc2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIH51bm9yZGVyZWRfbXVsdGltYXAoKSBub2V4Y2VwdCB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX211bHRpbWFwJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJX19nbGliY3h4X2NoZWNrX3NlbGZfbW92ZV9hc3NpZ24oX194KTsKKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3dhcCh1bm9yZGVyZWRfbXVsdGltYXAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6c3dhcChfX3gpOworCV9TYWZlX2Jhc2U6Ol9NX3N3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBub2V4Y2VwdAorICAgICAgeworCV9CYXNlOjpjbGVhcigpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yIAorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIC8vIGxvY2FsIHZlcnNpb25zCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fYikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfYnVja2V0X2luZGV4KF9fYik7CisJcmV0dXJuIGxvY2FsX2l0ZXJhdG9yKF9CYXNlOjpiZWdpbihfX2IpLCBfX2IsIHRoaXMpOworICAgICAgfQorCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSBfX2IpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2J1Y2tldF9pbmRleChfX2IpOworCXJldHVybiBsb2NhbF9pdGVyYXRvcihfQmFzZTo6ZW5kKF9fYiksIF9fYiwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKF9fYiksIF9fYiwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBlbmQoc2l6ZV90eXBlIF9fYikgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfYnVja2V0X2luZGV4KF9fYik7CisJcmV0dXJuIGNvbnN0X2xvY2FsX2l0ZXJhdG9yKF9CYXNlOjplbmQoX19iKSwgX19iLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGNiZWdpbihzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmNiZWdpbihfX2IpLCBfX2IsIHRoaXMpOworICAgICAgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2VuZChzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmNlbmQoX19iKSwgX19iLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfc2l6ZShzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gX0Jhc2U6OmJ1Y2tldF9zaXplKF9fYik7CisgICAgICB9CisKKyAgICAgIGZsb2F0CisgICAgICBtYXhfbG9hZF9mYWN0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX0Jhc2U6Om1heF9sb2FkX2ZhY3RvcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcihmbG9hdCBfX2YpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX21heF9sb2FkX2ZhY3RvcihfX2YpOworCV9CYXNlOjptYXhfbG9hZF9mYWN0b3IoX19mKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCSAgX0Jhc2VfaXRlcmF0b3IgX19pdAorCSAgICA9IF9CYXNlOjplbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICBfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisJICByZXR1cm4gaXRlcmF0b3IoX19pdCwgdGhpcyk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2VfaGludChjb25zdF9pdGVyYXRvciBfX2hpbnQsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19oaW50KTsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCSAgX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjplbXBsYWNlX2hpbnQoX19oaW50LmJhc2UoKSwKKwkJCQkJc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIF9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwkgIHJldHVybiBpdGVyYXRvcihfX2l0LCB0aGlzKTsKKwl9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjppbnNlcnQoX19vYmopOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19pdCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19oaW50LCBjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9faGludCk7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjppbnNlcnQoX19oaW50LmJhc2UoKSwgX19vYmopOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19pdCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisJaXRlcmF0b3IKKwlpbnNlcnQoX1BhaXImJiBfX29iaikKKwl7CisJICBzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwkgIF9CYXNlX2l0ZXJhdG9yIF9faXQgPSBfQmFzZTo6aW5zZXJ0KHN0ZDo6Zm9yd2FyZDxfUGFpcj4oX19vYmopKTsKKwkgIF9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwkgIHJldHVybiBpdGVyYXRvcihfX2l0LCB0aGlzKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisJaXRlcmF0b3IKKwlpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19oaW50LCBfUGFpciYmIF9fb2JqKQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19oaW50KTsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCSAgX0Jhc2VfaXRlcmF0b3IgX19pdCA9CisJICAgIF9CYXNlOjppbnNlcnQoX19oaW50LmJhc2UoKSwgc3RkOjpmb3J3YXJkPF9QYWlyPihfX29iaikpOworCSAgX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCSAgcmV0dXJuIGl0ZXJhdG9yKF9faXQsIHRoaXMpOworCX0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IF9CYXNlOjppbnNlcnQoX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl2b2lkCisJaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKwl7CisJICBfX2dsaWJjeHhfY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCSAgX0Jhc2U6Omluc2VydChfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZmlyc3QpLAorCQkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpKTsKKwkgIF9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwl9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9fa2V5KSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX19rZXkpLCB0aGlzKTsgfQorCisgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcmVzID0KKwkgIF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGl0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeworCXN0ZDo6cGFpcjxfQmFzZV9jb25zdF9pdGVyYXRvciwgX0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9fcmVzID0KKwkgIF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsKKwlzaXplX3R5cGUgX19yZXQoMCk7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19wYWlyID0KKwkgIF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJZm9yIChfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fcGFpci5maXJzdDsgX192aWN0aW0gIT0gX19wYWlyLnNlY29uZDspCisJICB7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoW19fdmljdGltXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCQkJICAgIHsgcmV0dXJuIF9faXQgPT0gX192aWN0aW07IH0pOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2xvY2FsX2lmKAorCQkJICAgIFtfX3ZpY3RpbV0oX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3IgX19pdCkKKwkJCSAgICB7IHJldHVybiBfX2l0Ll9NX2N1ciA9PSBfX3ZpY3RpbS5fTV9jdXI7IH0pOworCSAgICBfQmFzZTo6ZXJhc2UoX192aWN0aW0rKyk7CisJICAgICsrX19yZXQ7CisJICB9CisJX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9faXQpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlKF9faXQpOworCV9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9fdmljdGltID0gX19pdC5iYXNlKCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihbX192aWN0aW1dKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJCQl7IHJldHVybiBfX2l0ID09IF9fdmljdGltOyB9KTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2xvY2FsX2lmKAorCQkJW19fdmljdGltXShfQmFzZV9jb25zdF9sb2NhbF9pdGVyYXRvciBfX2l0KQorCQkJeyByZXR1cm4gX19pdC5fTV9jdXIgPT0gX192aWN0aW0uX01fY3VyOyB9KTsKKwlzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwlfQmFzZV9pdGVyYXRvciBfX25leHQgPSBfQmFzZTo6ZXJhc2UoX19pdC5iYXNlKCkpOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19uZXh0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IHJldHVybiBlcmFzZShjb25zdF9pdGVyYXRvcihfX2l0KSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlmb3IgKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX19maXJzdC5iYXNlKCk7CisJICAgICBfX3RtcCAhPSBfX2xhc3QuYmFzZSgpOyArK19fdG1wKQorCSAgeworCSAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX190bXAgIT0gX0Jhc2U6OmVuZCgpLAorCQkJCSAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdmFsaWRfcmFuZ2UpCisJCQkJICAuX01faXRlcmF0b3IoX19maXJzdCwgImZpcnN0IikKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2xhc3QsICJsYXN0IikpOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKFtfX3RtcF0oX0Jhc2VfY29uc3RfaXRlcmF0b3IgX19pdCkKKwkJCSAgICB7IHJldHVybiBfX2l0ID09IF9fdG1wOyB9KTsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9sb2NhbF9pZigKKwkJCSAgICBbX190bXBdKF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yIF9faXQpCisJCQkgICAgeyByZXR1cm4gX19pdC5fTV9jdXIgPT0gX190bXAuX01fY3VyOyB9KTsKKwkgIH0KKwlzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwlfQmFzZV9pdGVyYXRvciBfX25leHQgPSBfQmFzZTo6ZXJhc2UoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCkpOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19uZXh0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgbm9leGNlcHQgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2xvY2FscygpCisgICAgICB7CisJX0Jhc2VfbG9jYWxfaXRlcmF0b3IgX19sb2NhbF9lbmQgPSBfQmFzZTo6ZW5kKDApOworCXRoaXMtPl9NX2ludmFsaWRhdGVfbG9jYWxfaWYoCisJCQlbX19sb2NhbF9lbmRdKF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yIF9faXQpCisJCQl7IHJldHVybiBfX2l0ICE9IF9fbG9jYWxfZW5kOyB9KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCV9CYXNlX2l0ZXJhdG9yIF9fZW5kID0gX0Jhc2U6OmVuZCgpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoW19fZW5kXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCQkJeyByZXR1cm4gX19pdCAhPSBfX2VuZDsgfSk7CisJX01faW52YWxpZGF0ZV9sb2NhbHMoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fY2hlY2tfcmVoYXNoZWQoc2l6ZV90eXBlIF9fcHJldl9jb3VudCkKKyAgICAgIHsKKwlpZiAoX19wcmV2X2NvdW50ICE9IHRoaXMtPmJ1Y2tldF9jb3VudCgpKQorCSAgX01faW52YWxpZGF0ZV9sb2NhbHMoKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9iYXNlKCkgPT0gX195Ll9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19kZWJ1ZworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvdW5vcmRlcmVkX3NldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVidWcvdW5vcmRlcmVkX3NldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTg4YWRkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy91bm9yZGVyZWRfc2V0CkBAIC0wLDAgKzEsODg1IEBACisvLyBEZWJ1Z2dpbmcgdW5vcmRlcmVkX3NldC91bm9yZGVyZWRfbXVsdGlzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3Vub3JkZXJlZF9zZXQKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0RFQlVHX1VOT1JERVJFRF9TRVQKKyNkZWZpbmUgX0dMSUJDWFhfREVCVUdfVU5PUkRFUkVEX1NFVCAxCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorIyBpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSA8ZGVidWcvc2FmZV91bm9yZGVyZWRfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorI2luY2x1ZGUgPGRlYnVnL3NhZmVfbG9jYWxfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19kZWJ1ZworeworICAvLy8gQ2xhc3Mgc3RkOjp1bm9yZGVyZWRfc2V0IHdpdGggc2FmZXR5L2NoZWNraW5nL2RlYnVnIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9IYXNoID0gc3RkOjpoYXNoPF9WYWx1ZT4sCisJICAgdHlwZW5hbWUgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9WYWx1ZT4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X1ZhbHVlPiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX3NldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9DOjp1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyPHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwKKwkJCQkJCSAgICAgICBfUHJlZCwgX0FsbG9jPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfQzo6dW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLAorCQkJCQkgICAgX1ByZWQsIF9BbGxvYz4gX0Jhc2U7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV91bm9yZGVyZWRfY29udGFpbmVyPHVub3JkZXJlZF9zZXQ+IF9TYWZlX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfbG9jYWxfaXRlcmF0b3IgX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpsb2NhbF9pdGVyYXRvciBfQmFzZV9sb2NhbF9pdGVyYXRvcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X3R5cGUgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2l0ZXJhdG9yLAorCQkJCQkgIHVub3JkZXJlZF9zZXQ+IGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8X0Jhc2VfY29uc3RfaXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX3NldD4gY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9sb2NhbF9pdGVyYXRvcjxfQmFzZV9sb2NhbF9pdGVyYXRvciwKKwkJCQkJICB1bm9yZGVyZWRfc2V0PiBsb2NhbF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2xvY2FsX2l0ZXJhdG9yPF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yLAorCQkJCQkgIHVub3JkZXJlZF9zZXQ+IGNvbnN0X2xvY2FsX2l0ZXJhdG9yOworCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX3NldChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdW5vcmRlcmVkX3NldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIAorCQkgICAgICBzaXplX3R5cGUgX19uID0gMCwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksIAorCQkgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksIAorCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fZ251X2RlYnVnOjpfX2Jhc2UoX19nbnVfZGVidWc6Ol9fY2hlY2tfdmFsaWRfcmFuZ2UoX19maXJzdCwKKwkJCQkJCQkJICAgICBfX2xhc3QpKSwKKwkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpLCBfX24sCisJCV9faGYsIF9fZXFsLCBfX2EpIHsgfQorCisgICAgICB1bm9yZGVyZWRfc2V0KGNvbnN0IHVub3JkZXJlZF9zZXQmIF9feCkgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfc2V0KGNvbnN0IF9CYXNlJiBfX3gpIAorICAgICAgOiBfQmFzZShfX3gpIHsgfQorCisgICAgICB1bm9yZGVyZWRfc2V0KHVub3JkZXJlZF9zZXQmJiBfX3gpID0gZGVmYXVsdDsKKworICAgICAgdW5vcmRlcmVkX3NldChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkJICAgIHNpemVfdHlwZSBfX24gPSAwLAorCQkgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpIHsgfQorCisgICAgICB+dW5vcmRlcmVkX3NldCgpIG5vZXhjZXB0IHsgfQorCisgICAgICB1bm9yZGVyZWRfc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHVub3JkZXJlZF9zZXQmIF9feCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9feDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdW5vcmRlcmVkX3NldCYKKyAgICAgIG9wZXJhdG9yPSh1bm9yZGVyZWRfc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJX19nbGliY3h4X2NoZWNrX3NlbGZfbW92ZV9hc3NpZ24oX194KTsKKwljbGVhcigpOworCXN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHVub3JkZXJlZF9zZXQmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5vcmRlcmVkX3NldCYgX194KQorICAgICAgeworCV9CYXNlOjpzd2FwKF9feCk7CisJX1NhZmVfYmFzZTo6X01fc3dhcChfX3gpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIG5vZXhjZXB0CisgICAgICB7CisJX0Jhc2U6OmNsZWFyKCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IgCisgICAgICBiZWdpbigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgLy8gbG9jYWwgdmVyc2lvbnMKKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19iKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKF9fYiksIF9fYiwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGxvY2FsX2l0ZXJhdG9yCisgICAgICBlbmQoc2l6ZV90eXBlIF9fYikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfYnVja2V0X2luZGV4KF9fYik7CisJcmV0dXJuIGxvY2FsX2l0ZXJhdG9yKF9CYXNlOjplbmQoX19iKSwgX19iLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGJlZ2luKHNpemVfdHlwZSBfX2IpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2J1Y2tldF9pbmRleChfX2IpOworCXJldHVybiBjb25zdF9sb2NhbF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oX19iKSwgX19iLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGVuZChzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmVuZChfX2IpLCBfX2IsIHRoaXMpOworICAgICAgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2JlZ2luKHNpemVfdHlwZSBfX2IpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2J1Y2tldF9pbmRleChfX2IpOworCXJldHVybiBjb25zdF9sb2NhbF9pdGVyYXRvcihfQmFzZTo6Y2JlZ2luKF9fYiksIF9fYiwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBjZW5kKHNpemVfdHlwZSBfX2IpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2J1Y2tldF9pbmRleChfX2IpOworCXJldHVybiBjb25zdF9sb2NhbF9pdGVyYXRvcihfQmFzZTo6Y2VuZChfX2IpLCBfX2IsIHRoaXMpOworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGJ1Y2tldF9zaXplKHNpemVfdHlwZSBfX2IpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2J1Y2tldF9pbmRleChfX2IpOworCXJldHVybiBfQmFzZTo6YnVja2V0X3NpemUoX19iKTsKKyAgICAgIH0KKworICAgICAgZmxvYXQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfQmFzZTo6bWF4X2xvYWRfZmFjdG9yKCk7IH0KKworICAgICAgdm9pZAorICAgICAgbWF4X2xvYWRfZmFjdG9yKGZsb2F0IF9fZikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbWF4X2xvYWRfZmFjdG9yKF9fZik7CisJX0Jhc2U6Om1heF9sb2FkX2ZhY3RvcihfX2YpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwkgIHN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgYm9vbD4gX19yZXMKKwkgICAgPSBfQmFzZTo6ZW1wbGFjZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwgX19yZXMuc2Vjb25kKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9oaW50KGNvbnN0X2l0ZXJhdG9yIF9faGludCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgX19nbGliY3h4X2NoZWNrX2luc2VydChfX2hpbnQpOworCSAgc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJICBfQmFzZV9pdGVyYXRvciBfX2l0ID0gX0Jhc2U6OmVtcGxhY2VfaGludChfX2hpbnQuYmFzZSgpLAorCQkJCQlzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCSAgcmV0dXJuIGl0ZXJhdG9yKF9faXQsIHRoaXMpOworCX0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworCXNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCXR5cGVkZWYgc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBib29sPiBfX3BhaXJfdHlwZTsKKwkgIF9fcGFpcl90eXBlIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX29iaik7CisJX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3Jlcy5maXJzdCwgdGhpcyksIF9fcmVzLnNlY29uZCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19oaW50LCBjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9faGludCk7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjppbnNlcnQoX19oaW50LmJhc2UoKSwgX19vYmopOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19pdCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydCh2YWx1ZV90eXBlJiYgX19vYmopCisgICAgICB7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJdHlwZWRlZiBzdGQ6OnBhaXI8dHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yLCBib29sPiBfX3BhaXJfdHlwZTsKKwkgIF9fcGFpcl90eXBlIF9fcmVzID0gX0Jhc2U6Omluc2VydChzdGQ6Om1vdmUoX19vYmopKTsKKwlfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwgX19yZXMuc2Vjb25kKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2hpbnQsIHZhbHVlX3R5cGUmJiBfX29iaikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9faGludCk7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjppbnNlcnQoX19oaW50LmJhc2UoKSwgc3RkOjptb3ZlKF9fb2JqKSk7CisJX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCXJldHVybiBpdGVyYXRvcihfX2l0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2U6Omluc2VydChfX2wpOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdm9pZAorCWluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisJeworCSAgX19nbGliY3h4X2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJICBzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwkgIF9CYXNlOjppbnNlcnQoX19nbnVfZGVidWc6Ol9fYmFzZShfX2ZpcnN0KSwKKwkJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSk7CisJICBfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisJfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZmluZChfX2tleSksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9fa2V5KSwgdGhpcyk7IH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsKKwl0eXBlZGVmIHN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcGFpcl90eXBlOworCV9fcGFpcl90eXBlIF9fcmVzID0gX0Jhc2U6OmVxdWFsX3JhbmdlKF9fa2V5KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7CisJc3RkOjpwYWlyPF9CYXNlX2NvbnN0X2l0ZXJhdG9yLCBfQmFzZV9jb25zdF9pdGVyYXRvcj4KKwkgIF9fcmVzID0gX0Jhc2U6OmVxdWFsX3JhbmdlKF9fa2V5KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoX19yZXMuZmlyc3QsIHRoaXMpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX19yZXMuc2Vjb25kLCB0aGlzKSk7CisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeworCXNpemVfdHlwZSBfX3JldCgwKTsKKwlfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbShfQmFzZTo6ZmluZChfX2tleSkpOworCWlmIChfX3ZpY3RpbSAhPSBfQmFzZTo6ZW5kKCkpCisJICB7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoCisJCQkgICAgW19fdmljdGltXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCQkJICAgIHsgcmV0dXJuIF9faXQgPT0gX192aWN0aW07IH0pOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2xvY2FsX2lmKAorCQkJICAgIFtfX3ZpY3RpbV0oX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3IgX19pdCkKKwkJCSAgICB7IHJldHVybiBfX2l0Ll9NX2N1ciA9PSBfX3ZpY3RpbS5fTV9jdXI7IH0pOworCSAgICBzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwkgICAgX0Jhc2U6OmVyYXNlKF9fdmljdGltKTsKKwkgICAgX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCSAgICBfX3JldCA9IDE7CisJICB9CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19pdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19pdCk7CisJX0Jhc2VfY29uc3RfaXRlcmF0b3IgX192aWN0aW0gPSBfX2l0LmJhc2UoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKAorCQkJW19fdmljdGltXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCQkJeyByZXR1cm4gX19pdCA9PSBfX3ZpY3RpbTsgfSk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9sb2NhbF9pZigKKwkJCVtfX3ZpY3RpbV0oX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3IgX19pdCkKKwkJCXsgcmV0dXJuIF9faXQuX01fY3VyID09IF9fdmljdGltLl9NX2N1cjsgfSk7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19uZXh0ID0gX0Jhc2U6OmVyYXNlKF9faXQuYmFzZSgpKTsKKwlfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fbmV4dCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX2l0KQorICAgICAgeyByZXR1cm4gZXJhc2UoY29uc3RfaXRlcmF0b3IoX19pdCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2VyYXNlX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisJZm9yIChfQmFzZV9jb25zdF9pdGVyYXRvciBfX3RtcCA9IF9fZmlyc3QuYmFzZSgpOworCSAgICAgX190bXAgIT0gX19sYXN0LmJhc2UoKTsgKytfX3RtcCkKKwkgIHsKKwkgICAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKF9fdG1wICE9IF9CYXNlOjplbmQoKSwKKwkJCQkgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX3ZhbGlkX3JhbmdlKQorCQkJCSAgLl9NX2l0ZXJhdG9yKF9fZmlyc3QsICJmaXJzdCIpCisJCQkJICAuX01faXRlcmF0b3IoX19sYXN0LCAibGFzdCIpKTsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9pZigKKwkJCSAgICBbX190bXBdKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJCQkgICAgeyByZXR1cm4gX19pdCA9PSBfX3RtcDsgfSk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfbG9jYWxfaWYoCisJCQkgICAgW19fdG1wXShfQmFzZV9jb25zdF9sb2NhbF9pdGVyYXRvciBfX2l0KQorCQkJICAgIHsgcmV0dXJuIF9faXQuX01fY3VyID09IF9fdG1wLl9NX2N1cjsgfSk7CisJICB9CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19uZXh0ID0gX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLAorCQkJCQkgICAgIF9fbGFzdC5iYXNlKCkpOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19uZXh0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgbm9leGNlcHQgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2xvY2FscygpCisgICAgICB7CisJX0Jhc2VfbG9jYWxfaXRlcmF0b3IgX19sb2NhbF9lbmQgPSBfQmFzZTo6ZW5kKDApOworCXRoaXMtPl9NX2ludmFsaWRhdGVfbG9jYWxfaWYoCisJCQlbX19sb2NhbF9lbmRdKF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yIF9faXQpCisJCQl7IHJldHVybiBfX2l0ICE9IF9fbG9jYWxfZW5kOyB9KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hbGwoKQorICAgICAgeworCV9CYXNlX2l0ZXJhdG9yIF9fZW5kID0gX0Jhc2U6OmVuZCgpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfaWYoCisJCQlbX19lbmRdKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJCQl7IHJldHVybiBfX2l0ICE9IF9fZW5kOyB9KTsKKwlfTV9pbnZhbGlkYXRlX2xvY2FscygpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jaGVja19yZWhhc2hlZChzaXplX3R5cGUgX19wcmV2X2NvdW50KQorICAgICAgeworCWlmIChfX3ByZXZfY291bnQgIT0gdGhpcy0+YnVja2V0X2NvdW50KCkpCisJICBfTV9pbnZhbGlkYXRlX2xvY2FscygpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2Jhc2UoKSA9PSBfX3kuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgdW5vcmRlcmVkX3NldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisKKyAgLy8vIENsYXNzIHN0ZDo6dW5vcmRlcmVkX211bHRpc2V0IHdpdGggc2FmZXR5L2NoZWNraW5nL2RlYnVnIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9IYXNoID0gc3RkOjpoYXNoPF9WYWx1ZT4sCisJICAgdHlwZW5hbWUgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9WYWx1ZT4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8X1ZhbHVlPiA+CisgICAgY2xhc3MgdW5vcmRlcmVkX211bHRpc2V0CisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0M6OnVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiwKKyAgICAgIHB1YmxpYyBfX2dudV9kZWJ1Zzo6X1NhZmVfdW5vcmRlcmVkX2NvbnRhaW5lcjwKKwkJdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9DOjp1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwKKwkJCQkJCSBfUHJlZCwgX0FsbG9jPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX3Vub3JkZXJlZF9jb250YWluZXI8dW5vcmRlcmVkX211bHRpc2V0PgorCQlfU2FmZV9iYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2xvY2FsX2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6bG9jYWxfaXRlcmF0b3IgX0Jhc2VfbG9jYWxfaXRlcmF0b3I7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV90eXBlICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgICAgICB2YWx1ZV90eXBlOworCisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcjxfQmFzZV9pdGVyYXRvciwKKwkJCQkJICB1bm9yZGVyZWRfbXVsdGlzZXQ+IGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8X0Jhc2VfY29uc3RfaXRlcmF0b3IsCisJCQkJCSAgdW5vcmRlcmVkX211bHRpc2V0PiBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2xvY2FsX2l0ZXJhdG9yPAorCV9CYXNlX2xvY2FsX2l0ZXJhdG9yLCB1bm9yZGVyZWRfbXVsdGlzZXQ+IGxvY2FsX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfbG9jYWxfaXRlcmF0b3I8CisJX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3IsIHVub3JkZXJlZF9tdWx0aXNldD4gY29uc3RfbG9jYWxfaXRlcmF0b3I7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHVub3JkZXJlZF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIAorCQkJICAgc2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwgCisJCQkgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksIAorCQkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZ251X2RlYnVnOjpfX2NoZWNrX3ZhbGlkX3JhbmdlKF9fZmlyc3QsCisJCQkJCQkJCSAgICAgX19sYXN0KSksCisJCV9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSwgX19uLAorCQlfX2hmLCBfX2VxbCwgX19hKSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldCYgX194KSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldChjb25zdCBfQmFzZSYgX194KSAKKyAgICAgIDogX0Jhc2UoX194KSB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0KHVub3JkZXJlZF9tdWx0aXNldCYmIF9feCkgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCQkgc2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkgeyB9CisKKyAgICAgIH51bm9yZGVyZWRfbXVsdGlzZXQoKSBub2V4Y2VwdCB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX211bHRpc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorICAgICAgICAvLyBOQjogRFIgNjc1LgorCV9fZ2xpYmN4eF9jaGVja19zZWxmX21vdmVfYXNzaWduKF9feCk7CisJY2xlYXIoKTsKKwlzd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5pbnNlcnQoX19sKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5vcmRlcmVkX211bHRpc2V0JiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKwlfU2FmZV9iYXNlOjpfTV9zd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgbm9leGNlcHQKKyAgICAgIHsKKwlfQmFzZTo6Y2xlYXIoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIC8vIGxvY2FsIHZlcnNpb25zCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fYikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfYnVja2V0X2luZGV4KF9fYik7CisJcmV0dXJuIGxvY2FsX2l0ZXJhdG9yKF9CYXNlOjpiZWdpbihfX2IpLCBfX2IsIHRoaXMpOworICAgICAgfQorCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgZW5kKHNpemVfdHlwZSBfX2IpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2J1Y2tldF9pbmRleChfX2IpOworCXJldHVybiBsb2NhbF9pdGVyYXRvcihfQmFzZTo6ZW5kKF9fYiksIF9fYiwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBiZWdpbihzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKF9fYiksIF9fYiwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2xvY2FsX2l0ZXJhdG9yCisgICAgICBlbmQoc2l6ZV90eXBlIF9fYikgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfYnVja2V0X2luZGV4KF9fYik7CisJcmV0dXJuIGNvbnN0X2xvY2FsX2l0ZXJhdG9yKF9CYXNlOjplbmQoX19iKSwgX19iLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGNiZWdpbihzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmNiZWdpbihfX2IpLCBfX2IsIHRoaXMpOworICAgICAgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgY2VuZChzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gY29uc3RfbG9jYWxfaXRlcmF0b3IoX0Jhc2U6OmNlbmQoX19iKSwgX19iLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfc2l6ZShzaXplX3R5cGUgX19iKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19idWNrZXRfaW5kZXgoX19iKTsKKwlyZXR1cm4gX0Jhc2U6OmJ1Y2tldF9zaXplKF9fYik7CisgICAgICB9CisKKyAgICAgIGZsb2F0CisgICAgICBtYXhfbG9hZF9mYWN0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX0Jhc2U6Om1heF9sb2FkX2ZhY3RvcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcihmbG9hdCBfX2YpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX21heF9sb2FkX2ZhY3RvcihfX2YpOworCV9CYXNlOjptYXhfbG9hZF9mYWN0b3IoX19mKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCSAgX0Jhc2VfaXRlcmF0b3IgX19pdAorCSAgICA9IF9CYXNlOjplbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICBfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisJICByZXR1cm4gaXRlcmF0b3IoX19pdCwgdGhpcyk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2VfaGludChjb25zdF9pdGVyYXRvciBfX2hpbnQsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja19pbnNlcnQoX19oaW50KTsKKwkgIHNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCSAgX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjplbXBsYWNlX2hpbnQoX19oaW50LmJhc2UoKSwKKwkJCQkJc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIF9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwkgIHJldHVybiBpdGVyYXRvcihfX2l0LCB0aGlzKTsKKwl9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjppbnNlcnQoX19vYmopOworCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19pdCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19oaW50LCBjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9faGludCk7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjppbnNlcnQoX19oaW50LmJhc2UoKSwgX19vYmopOyAKKwlfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9faXQsIHRoaXMpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KHZhbHVlX3R5cGUmJiBfX29iaikKKyAgICAgIHsKKwlzaXplX3R5cGUgX19idWNrZXRfY291bnQgPSB0aGlzLT5idWNrZXRfY291bnQoKTsKKwlfQmFzZV9pdGVyYXRvciBfX2l0ID0gX0Jhc2U6Omluc2VydChzdGQ6Om1vdmUoX19vYmopKTsgCisJX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCXJldHVybiBpdGVyYXRvcihfX2l0LCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2hpbnQsIHZhbHVlX3R5cGUmJiBfX29iaikKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0KF9faGludCk7CisJc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJX0Jhc2VfaXRlcmF0b3IgX19pdCA9IF9CYXNlOjppbnNlcnQoX19oaW50LmJhc2UoKSwgc3RkOjptb3ZlKF9fb2JqKSk7IAorCV9NX2NoZWNrX3JlaGFzaGVkKF9fYnVja2V0X2NvdW50KTsKKwlyZXR1cm4gaXRlcmF0b3IoX19pdCwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXNpemVfdHlwZSBfX2J1Y2tldF9jb3VudCA9IHRoaXMtPmJ1Y2tldF9jb3VudCgpOworCV9CYXNlOjppbnNlcnQoX19sKTsKKwlfTV9jaGVja19yZWhhc2hlZChfX2J1Y2tldF9jb3VudCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorCXZvaWQKKwlpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorCXsKKwkgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgc2l6ZV90eXBlIF9fYnVja2V0X2NvdW50ID0gdGhpcy0+YnVja2V0X2NvdW50KCk7CisJICBfQmFzZTo6aW5zZXJ0KF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCkpOworCSAgX01fY2hlY2tfcmVoYXNoZWQoX19idWNrZXRfY291bnQpOworCX0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX19rZXkpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZmluZChfX2tleSksIHRoaXMpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7CisJdHlwZWRlZiBzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3BhaXJfdHlwZTsKKwlfX3BhaXJfdHlwZSBfX3JlcyA9IF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGl0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeworCXN0ZDo6cGFpcjxfQmFzZV9jb25zdF9pdGVyYXRvciwgX0Jhc2VfY29uc3RfaXRlcmF0b3I+CisJICBfX3JlcyA9IF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcmVzLmZpcnN0LCB0aGlzKSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fcmVzLnNlY29uZCwgdGhpcykpOworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsKKwlzaXplX3R5cGUgX19yZXQoMCk7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19wYWlyID0KKwkgIF9CYXNlOjplcXVhbF9yYW5nZShfX2tleSk7CisJZm9yIChfQmFzZV9pdGVyYXRvciBfX3ZpY3RpbSA9IF9fcGFpci5maXJzdDsgX192aWN0aW0gIT0gX19wYWlyLnNlY29uZDspCisJICB7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfaWYoW19fdmljdGltXShfQmFzZV9jb25zdF9pdGVyYXRvciBfX2l0KQorCQkJICAgIHsgcmV0dXJuIF9faXQgPT0gX192aWN0aW07IH0pOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2xvY2FsX2lmKAorCQkJICAgIFtfX3ZpY3RpbV0oX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3IgX19pdCkKKwkJCSAgICB7IHJldHVybiBfX2l0Ll9NX2N1ciA9PSBfX3ZpY3RpbS5fTV9jdXI7IH0pOworCSAgICBfQmFzZTo6ZXJhc2UoX192aWN0aW0rKyk7CisJICAgICsrX19yZXQ7CisJICB9CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19pdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2UoX19pdCk7CisJX0Jhc2VfY29uc3RfaXRlcmF0b3IgX192aWN0aW0gPSBfX2l0LmJhc2UoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKFtfX3ZpY3RpbV0oX0Jhc2VfY29uc3RfaXRlcmF0b3IgX19pdCkKKwkJCXsgcmV0dXJuIF9faXQgPT0gX192aWN0aW07IH0pOworCXRoaXMtPl9NX2ludmFsaWRhdGVfbG9jYWxfaWYoCisJCQlbX192aWN0aW1dKF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yIF9faXQpCisJCQl7IHJldHVybiBfX2l0Ll9NX2N1ciA9PSBfX3ZpY3RpbS5fTV9jdXI7IH0pOworCXJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19pdC5iYXNlKCkpLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9faXQpCisgICAgICB7IHJldHVybiBlcmFzZShjb25zdF9pdGVyYXRvcihfX2l0KSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKwlmb3IgKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX19maXJzdC5iYXNlKCk7CisJICAgICBfX3RtcCAhPSBfX2xhc3QuYmFzZSgpOyArK19fdG1wKQorCSAgeworCSAgICBfR0xJQkNYWF9ERUJVR19WRVJJRlkoX190bXAgIT0gX0Jhc2U6OmVuZCgpLAorCQkJCSAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfdmFsaWRfcmFuZ2UpCisJCQkJICAuX01faXRlcmF0b3IoX19maXJzdCwgImZpcnN0IikKKwkJCQkgIC5fTV9pdGVyYXRvcihfX2xhc3QsICJsYXN0IikpOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKFtfX3RtcF0oX0Jhc2VfY29uc3RfaXRlcmF0b3IgX19pdCkKKwkJCSAgICB7IHJldHVybiBfX2l0ID09IF9fdG1wOyB9KTsKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9sb2NhbF9pZigKKwkJCSAgICBbX190bXBdKF9CYXNlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yIF9faXQpCisJCQkgICAgeyByZXR1cm4gX19pdC5fTV9jdXIgPT0gX190bXAuX01fY3VyOyB9KTsKKwkgIH0KKwlyZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QuYmFzZSgpLAorCQkJCSAgICAgX19sYXN0LmJhc2UoKSksIHRoaXMpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBub2V4Y2VwdCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiAqdGhpczsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2ludmFsaWRhdGVfbG9jYWxzKCkKKyAgICAgIHsKKwlfQmFzZV9sb2NhbF9pdGVyYXRvciBfX2xvY2FsX2VuZCA9IF9CYXNlOjplbmQoMCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9sb2NhbF9pZigKKwkJCVtfX2xvY2FsX2VuZF0oX0Jhc2VfY29uc3RfbG9jYWxfaXRlcmF0b3IgX19pdCkKKwkJCXsgcmV0dXJuIF9faXQgIT0gX19sb2NhbF9lbmQ7IH0pOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9pbnZhbGlkYXRlX2FsbCgpCisgICAgICB7CisJX0Jhc2VfaXRlcmF0b3IgX19lbmQgPSBfQmFzZTo6ZW5kKCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihbX19lbmRdKF9CYXNlX2NvbnN0X2l0ZXJhdG9yIF9faXQpCisJCQl7IHJldHVybiBfX2l0ICE9IF9fZW5kOyB9KTsKKwlfTV9pbnZhbGlkYXRlX2xvY2FscygpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jaGVja19yZWhhc2hlZChzaXplX3R5cGUgX19wcmV2X2NvdW50KQorICAgICAgeworCWlmIChfX3ByZXZfY291bnQgIT0gdGhpcy0+YnVja2V0X2NvdW50KCkpCisJICBfTV9pbnZhbGlkYXRlX2xvY2FscygpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fYmFzZSgpID09IF9feS5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX2RlYnVnCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy92ZWN0b3IgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlYnVnL3ZlY3RvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDczNjg2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWJ1Zy92ZWN0b3IKQEAgLTAsMCArMSw2NTUgQEAKKy8vIERlYnVnZ2luZyB2ZWN0b3IgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGRlYnVnL3ZlY3RvcgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBkZWJ1ZyBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVCVUdfVkVDVE9SCisjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1ZFQ1RPUiAxCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxkZWJ1Zy9zYWZlX3NlcXVlbmNlLmg+CisjaW5jbHVkZSA8ZGVidWcvc2FmZV9pdGVyYXRvci5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX2RlYnVnCit7CisgIC8vLyBDbGFzcyBzdGQ6OnZlY3RvciB3aXRoIHNhZmV0eS9jaGVja2luZy9kZWJ1ZyBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8X1RwPiA+CisgICAgY2xhc3MgdmVjdG9yCisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0M6OnZlY3RvcjxfVHAsIF9BbGxvY2F0b3I+LAorICAgICAgcHVibGljIF9fZ251X2RlYnVnOjpfU2FmZV9zZXF1ZW5jZTx2ZWN0b3I8X1RwLCBfQWxsb2NhdG9yPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfQzo6dmVjdG9yPF9UcCwgX0FsbG9jYXRvcj4gX0Jhc2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgX0Jhc2VfY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZ251X2RlYnVnOjpfRXF1YWxfdG88X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9FcXVhbDsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfQWxsb2NhdG9yPiAgX0FsbG9jX3RyYWl0czsKKyNlbmRpZgorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgX19nbnVfZGVidWc6Ol9TYWZlX2l0ZXJhdG9yPF9CYXNlX2l0ZXJhdG9yLHZlY3Rvcj4KKyAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3I8X0Jhc2VfY29uc3RfaXRlcmF0b3IsdmVjdG9yPgorICAgICAgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgICAgICAgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIF9UcAkJCQkgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvcgkJCSAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4yLjQuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQKKyAgICAgIHZlY3Rvcihjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fYSksIF9NX2d1YXJhbnRlZWRfY2FwYWNpdHkoMCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBleHBsaWNpdAorICAgICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2EpLCBfTV9ndWFyYW50ZWVkX2NhcGFjaXR5KF9fbikgeyB9CisKKyAgICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCisJICAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hKSwgX01fZ3VhcmFudGVlZF9jYXBhY2l0eShfX24pIHsgfQorI2Vsc2UKKyAgICAgIGV4cGxpY2l0CisgICAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlID0gX1RwKCksCisJICAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hKSwgX01fZ3VhcmFudGVlZF9jYXBhY2l0eShfX24pIHsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICAgIDogX0Jhc2UoX19nbnVfZGVidWc6Ol9fYmFzZShfX2dudV9kZWJ1Zzo6X19jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LAorCQkJCQkJCQkgICAgIF9fbGFzdCkpLAorCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCksIF9fYSksCisJICBfTV9ndWFyYW50ZWVkX2NhcGFjaXR5KDApCisgICAgICAgIHsgX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsgfQorCisgICAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCksIF9NX2d1YXJhbnRlZWRfY2FwYWNpdHkoX194LnNpemUoKSkgeyB9CisKKyAgICAgIC8vLyBDb25zdHJ1Y3Rpb24gZnJvbSBhIHJlbGVhc2UtbW9kZSB2ZWN0b3IKKyAgICAgIHZlY3Rvcihjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpLCBfTV9ndWFyYW50ZWVkX2NhcGFjaXR5KF9feC5zaXplKCkpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdmVjdG9yKHZlY3RvciYmIF9feCkgbm9leGNlcHQKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9feCkpLAorCV9NX2d1YXJhbnRlZWRfY2FwYWNpdHkodGhpcy0+c2l6ZSgpKQorICAgICAgeworCXRoaXMtPl9NX3N3YXAoX194KTsKKwlfX3guX01fZ3VhcmFudGVlZF9jYXBhY2l0eSA9IDA7CisgICAgICB9CisKKyAgICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIDogX0Jhc2UoX194LCBfX2EpLCBfTV9ndWFyYW50ZWVkX2NhcGFjaXR5KF9feC5zaXplKCkpIHsgfQorCisgICAgICB2ZWN0b3IodmVjdG9yJiYgX194LCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfQmFzZShzdGQ6Om1vdmUoX194KSwgX19hKSwKKyAgICAgICAgX01fZ3VhcmFudGVlZF9jYXBhY2l0eSh0aGlzLT5zaXplKCkpCisgICAgICB7CisJX194Ll9NX2ludmFsaWRhdGVfYWxsKCk7CisJX194Ll9NX2d1YXJhbnRlZWRfY2FwYWNpdHkgPSAwOworICAgICAgfQorCisgICAgICB2ZWN0b3IoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2EpLAorCV9NX2d1YXJhbnRlZWRfY2FwYWNpdHkoX19sLnNpemUoKSkgeyB9CisjZW5kaWYKKworICAgICAgfnZlY3RvcigpIF9HTElCQ1hYX05PRVhDRVBUIHsgfQorCisgICAgICB2ZWN0b3ImCisgICAgICBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBfX3g7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPSh2ZWN0b3ImJiBfX3gpIG5vZXhjZXB0KF9BbGxvY190cmFpdHM6Ol9TX25vdGhyb3dfbW92ZSgpKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19zZWxmX21vdmVfYXNzaWduKF9feCk7CisJX0Jhc2U6Om9wZXJhdG9yPShzdGQ6Om1vdmUoX194KSk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworCV9feC5fTV9pbnZhbGlkYXRlX2FsbCgpOworCV9feC5fTV9ndWFyYW50ZWVkX2NhcGFjaXR5ID0gMDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfQmFzZSY+KCp0aGlzKSA9IF9fbDsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCV9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICB2b2lkCisgICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9jaGVja192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCSAgX0Jhc2U6OmFzc2lnbihfX2dudV9kZWJ1Zzo6X19iYXNlKF9fZmlyc3QpLAorCQkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpKTsKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJICBfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworCX0KKworICAgICAgdm9pZAorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX191KQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19uLCBfX3UpOworCXRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlfQmFzZTo6YXNzaWduKF9fbCk7CisJdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisjZW5kaWYKKworICAgICAgLy8gMjMuMi40LjIgY2FwYWNpdHk6CisgICAgICB1c2luZyBfQmFzZTo6c2l6ZTsKKyAgICAgIHVzaW5nIF9CYXNlOjptYXhfc2l6ZTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeikKKyAgICAgIHsKKwlib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbihfX3N6KTsKKwlpZiAoX19zeiA8IHRoaXMtPnNpemUoKSkKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWZ0ZXJfbnRoKF9fc3opOworCV9CYXNlOjpyZXNpemUoX19zeik7CisJaWYgKF9fcmVhbGxvYykKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBjb25zdCBfVHAmIF9fYykKKyAgICAgIHsKKwlib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbihfX3N6KTsKKwlpZiAoX19zeiA8IHRoaXMtPnNpemUoKSkKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWZ0ZXJfbnRoKF9fc3opOworCV9CYXNlOjpyZXNpemUoX19zeiwgX19jKTsKKwlpZiAoX19yZWFsbG9jKQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwlfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworICAgICAgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19zeiwgX1RwIF9fYyA9IF9UcCgpKQorICAgICAgeworCWJvb2wgX19yZWFsbG9jID0gX01fcmVxdWlyZXNfcmVhbGxvY2F0aW9uKF9fc3opOworCWlmIChfX3N6IDwgdGhpcy0+c2l6ZSgpKQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hZnRlcl9udGgoX19zeik7CisJX0Jhc2U6OnJlc2l6ZShfX3N6LCBfX2MpOworCWlmIChfX3JlYWxsb2MpCisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCV9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7CisgICAgICB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHNocmlua190b19maXQoKQorICAgICAgeworCWlmIChfQmFzZTo6X01fc2hyaW5rX3RvX2ZpdCgpKQorCSAgeworCSAgICBfTV9ndWFyYW50ZWVkX2NhcGFjaXR5ID0gX0Jhc2U6OmNhcGFjaXR5KCk7CisJICAgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJICB9CisgICAgICB9CisjZW5kaWYKKworICAgICAgc2l6ZV90eXBlCisgICAgICBjYXBhY2l0eSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisjaWZkZWYgX0dMSUJDWFhfREVCVUdfUEVEQU5USUMKKwlyZXR1cm4gX01fZ3VhcmFudGVlZF9jYXBhY2l0eTsKKyNlbHNlCisJcmV0dXJuIF9CYXNlOjpjYXBhY2l0eSgpOworI2VuZGlmCisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjplbXB0eTsKKworICAgICAgdm9pZAorICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKQorICAgICAgeworCWJvb2wgX19yZWFsbG9jID0gX01fcmVxdWlyZXNfcmVhbGxvY2F0aW9uKF9fbik7CisJX0Jhc2U6OnJlc2VydmUoX19uKTsKKwlpZiAoX19uID4gX01fZ3VhcmFudGVlZF9jYXBhY2l0eSkKKwkgIF9NX2d1YXJhbnRlZWRfY2FwYWNpdHkgPSBfX247CisJaWYgKF9fcmVhbGxvYykKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisgICAgICB9CisKKyAgICAgIC8vIGVsZW1lbnQgYWNjZXNzOgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX24pOworCXJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX3N1YnNjcmlwdChfX24pOworCXJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmF0OworCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmZyb250KCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19ub25lbXB0eSgpOworCXJldHVybiBfQmFzZTo6ZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBiYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gRFIgNDY0LiBTdWdnZXN0aW9uIGZvciBuZXcgbWVtYmVyIGZ1bmN0aW9ucyBpbiBzdGFuZGFyZCBjb250YWluZXJzLgorICAgICAgdXNpbmcgX0Jhc2U6OmRhdGE7CisKKyAgICAgIC8vIDIzLjIuNC4zIG1vZGlmaWVyczoKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbih0aGlzLT5zaXplKCkgKyAxKTsKKwlfQmFzZTo6cHVzaF9iYWNrKF9feCk7CisJaWYgKF9fcmVhbGxvYykKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWxsKCk7CisJX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCA9IF9UcD4KKyAgICAgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwhc3RkOjpfX2FyZV9zYW1lPF9VcCwgYm9vbD46Ol9fdmFsdWUsCisJCQkJCXZvaWQ+OjpfX3R5cGUKKyAgICAgICAgcHVzaF9iYWNrKF9UcCYmIF9feCkKKwl7IGVtcGxhY2VfYmFjayhzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgZW1wbGFjZV9iYWNrKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIGJvb2wgX19yZWFsbG9jID0gX01fcmVxdWlyZXNfcmVhbGxvY2F0aW9uKHRoaXMtPnNpemUoKSArIDEpOworCSAgX0Jhc2U6OmVtcGxhY2VfYmFjayhzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgaWYgKF9fcmVhbGxvYykKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwkgIF9NX3VwZGF0ZV9ndWFyYW50ZWVkX2NhcGFjaXR5KCk7CisJfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9iYWNrKCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfY2hlY2tfbm9uZW1wdHkoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2lmKF9FcXVhbCgtLV9CYXNlOjplbmQoKSkpOworCV9CYXNlOjpwb3BfYmFjaygpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGVtcGxhY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwkgIGJvb2wgX19yZWFsbG9jID0gX01fcmVxdWlyZXNfcmVhbGxvY2F0aW9uKHRoaXMtPnNpemUoKSArIDEpOworCSAgZGlmZmVyZW5jZV90eXBlIF9fb2Zmc2V0ID0gX19wb3NpdGlvbi5iYXNlKCkgLSBfQmFzZTo6YmVnaW4oKTsKKwkgIF9CYXNlX2l0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVtcGxhY2UoX19wb3NpdGlvbi5iYXNlKCksCisJCQkJCQlzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgaWYgKF9fcmVhbGxvYykKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwkgIGVsc2UKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hZnRlcl9udGgoX19vZmZzZXQpOworCSAgX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsKKwkgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisJfQorI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwlib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbih0aGlzLT5zaXplKCkgKyAxKTsKKwlkaWZmZXJlbmNlX3R5cGUgX19vZmZzZXQgPSBfX3Bvc2l0aW9uLmJhc2UoKSAtIF9CYXNlOjpiZWdpbigpOworCV9CYXNlX2l0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX194KTsKKwlpZiAoX19yZWFsbG9jKQorCSAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwllbHNlCisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FmdGVyX250aChfX29mZnNldCk7CisJX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsKKwlyZXR1cm4gaXRlcmF0b3IoX19yZXMsIHRoaXMpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwID0gX1RwPgorICAgICAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPCFzdGQ6Ol9fYXJlX3NhbWU8X1VwLCBib29sPjo6X192YWx1ZSwKKwkJCQkJaXRlcmF0b3I+OjpfX3R5cGUKKyAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9UcCYmIF9feCkKKyAgICAgICAgeyByZXR1cm4gZW1wbGFjZShfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyB0aGlzLT5pbnNlcnQoX19wb3NpdGlvbiwgX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJX19nbGliY3h4X2NoZWNrX2luc2VydChfX3Bvc2l0aW9uKTsKKwlib29sIF9fcmVhbGxvYyA9IF9NX3JlcXVpcmVzX3JlYWxsb2NhdGlvbih0aGlzLT5zaXplKCkgKyBfX24pOworCWRpZmZlcmVuY2VfdHlwZSBfX29mZnNldCA9IF9fcG9zaXRpb24uYmFzZSgpIC0gX0Jhc2U6OmJlZ2luKCk7CisJX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLmJhc2UoKSwgX19uLCBfX3gpOworCWlmIChfX3JlYWxsb2MpCisJICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworCWVsc2UKKwkgIHRoaXMtPl9NX2ludmFsaWRhdGVfYWZ0ZXJfbnRoKF9fb2Zmc2V0KTsKKwlfTV91cGRhdGVfZ3VhcmFudGVlZF9jYXBhY2l0eSgpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKKwkgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICBfX2dsaWJjeHhfY2hlY2tfaW5zZXJ0X3JhbmdlKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CisKKwkgIC8qIEhhcmQgdG8gZ3Vlc3MgaWYgaW52YWxpZGF0aW9uIHdpbGwgb2NjdXIsIGJlY2F1c2UgX19sYXN0CisJICAgICAtIF9fZmlyc3QgY2FuJ3QgYmUgY2FsY3VsYXRlZCBpbiBhbGwgY2FzZXMsIHNvIHdlIGp1c3QKKwkgICAgIHB1bnQgaGVyZSBieSBjaGVja2luZyBpZiBpdCBkaWQgb2NjdXIuICovCisJICBfQmFzZV9pdGVyYXRvciBfX29sZF9iZWdpbiA9IF9NX2Jhc2UoKS5iZWdpbigpOworCSAgZGlmZmVyZW5jZV90eXBlIF9fb2Zmc2V0ID0gX19wb3NpdGlvbi5iYXNlKCkgLSBfQmFzZTo6YmVnaW4oKTsKKwkgIF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9fZ251X2RlYnVnOjpfX2Jhc2UoX19maXJzdCksCisJCQkJCSAgIF9fZ251X2RlYnVnOjpfX2Jhc2UoX19sYXN0KSk7CisKKwkgIGlmIChfTV9iYXNlKCkuYmVnaW4oKSAhPSBfX29sZF9iZWdpbikKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hbGwoKTsKKwkgIGVsc2UKKwkgICAgdGhpcy0+X01faW52YWxpZGF0ZV9hZnRlcl9udGgoX19vZmZzZXQpOworCSAgX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKTsKKwl9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9fZ2xpYmN4eF9jaGVja19lcmFzZShfX3Bvc2l0aW9uKTsKKwlkaWZmZXJlbmNlX3R5cGUgX19vZmZzZXQgPSBfX3Bvc2l0aW9uLmJhc2UoKSAtIF9CYXNlOjpiZWdpbigpOworCV9CYXNlX2l0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24uYmFzZSgpKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FmdGVyX250aChfX29mZnNldCk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwlfX2dsaWJjeHhfY2hlY2tfZXJhc2VfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworCWlmIChfX2ZpcnN0LmJhc2UoKSAhPSBfX2xhc3QuYmFzZSgpKQorCSAgeworCSAgICBkaWZmZXJlbmNlX3R5cGUgX19vZmZzZXQgPSBfX2ZpcnN0LmJhc2UoKSAtIF9CYXNlOjpiZWdpbigpOworCSAgICBfQmFzZV9pdGVyYXRvciBfX3JlcyA9IF9CYXNlOjplcmFzZShfX2ZpcnN0LmJhc2UoKSwKKwkJCQkJCV9fbGFzdC5iYXNlKCkpOworCSAgICB0aGlzLT5fTV9pbnZhbGlkYXRlX2FmdGVyX250aChfX29mZnNldCk7CisJICAgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisJICB9CisJZWxzZQorCSAgcmV0dXJuIF9fZmlyc3Q7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodmVjdG9yJiBfX3gpCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCQkJbm9leGNlcHQoX0FsbG9jX3RyYWl0czo6X1Nfbm90aHJvd19zd2FwKCkpCisjZW5kaWYKKyAgICAgIHsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJaWYgKCFfQWxsb2NfdHJhaXRzOjpfU19wcm9wYWdhdGVfb25fc3dhcCgpKQorCSAgX19nbGliY3h4X2NoZWNrX2VxdWFsX2FsbG9jcyhfX3gpOworI2VuZGlmCisJX0Jhc2U6OnN3YXAoX194KTsKKwl0aGlzLT5fTV9zd2FwKF9feCk7CisgICAgICAgIHN0ZDo6c3dhcChfTV9ndWFyYW50ZWVkX2NhcGFjaXR5LCBfX3guX01fZ3VhcmFudGVlZF9jYXBhY2l0eSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfQmFzZTo6Y2xlYXIoKTsKKwl0aGlzLT5fTV9pbnZhbGlkYXRlX2FsbCgpOworICAgICAgICBfTV9ndWFyYW50ZWVkX2NhcGFjaXR5ID0gMDsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgX0dMSUJDWFhfTk9FWENFUFQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHByaXZhdGU6CisgICAgICBzaXplX3R5cGUgX01fZ3VhcmFudGVlZF9jYXBhY2l0eTsKKworICAgICAgYm9vbAorICAgICAgX01fcmVxdWlyZXNfcmVhbGxvY2F0aW9uKHNpemVfdHlwZSBfX2VsZW1lbnRzKQorICAgICAgeyByZXR1cm4gX19lbGVtZW50cyA+IHRoaXMtPmNhcGFjaXR5KCk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fdXBkYXRlX2d1YXJhbnRlZWRfY2FwYWNpdHkoKQorICAgICAgeworCWlmICh0aGlzLT5zaXplKCkgPiBfTV9ndWFyYW50ZWVkX2NhcGFjaXR5KQorCSAgX01fZ3VhcmFudGVlZF9jYXBhY2l0eSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01faW52YWxpZGF0ZV9hZnRlcl9udGgoZGlmZmVyZW5jZV90eXBlIF9fbikKKyAgICAgIHsKKwl0eXBlZGVmIF9fZ251X2RlYnVnOjpfQWZ0ZXJfbnRoX2Zyb208X0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9BZnRlcl9udGg7CisJdGhpcy0+X01faW52YWxpZGF0ZV9pZihfQWZ0ZXJfbnRoKF9fbiwgX0Jhc2U6OmJlZ2luKCkpKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2xocywgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX2RlYnVnCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIC8vIERSIDExODIuCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIHZlY3Rvcjxib29sPi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBoYXNoPF9fZGVidWc6OnZlY3Rvcjxib29sLCBfQWxsb2M+PgorICAgIDogcHVibGljIF9faGFzaF9iYXNlPHNpemVfdCwgX19kZWJ1Zzo6dmVjdG9yPGJvb2wsIF9BbGxvYz4+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9fZGVidWc6OnZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX2IpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Omhhc2g8X0dMSUJDWFhfU1REX0M6OnZlY3Rvcjxib29sLCBfQWxsb2M+PigpCisJICAoX19iLl9NX2Jhc2UoKSk7IH0KKyAgICB9OworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVjaW1hbC9kZWNpbWFsIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZWNpbWFsL2RlY2ltYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4MDUzNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVjaW1hbC9kZWNpbWFsCkBAIC0wLDAgKzEsNDg1IEBACisvLyA8ZGVjaW1hbD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZGVjaW1hbC9kZWNpbWFsCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLyBJU08vSUVDIFRSIDI0NzMzIAorLy8gV3JpdHRlbiBieSBKYW5pcyBKb2huc29uIDxqYW5pczE4N0B1cy5pYm0uY29tPgorCisjaWZuZGVmIF9HTElCQ1hYX0RFQ0lNQUwKKyNkZWZpbmUgX0dMSUJDWFhfREVDSU1BTCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKKyNpZm5kZWYgX0dMSUJDWFhfVVNFX0RFQ0lNQUxfRkxPQVQKKyNlcnJvciBUaGlzIGZpbGUgcmVxdWlyZXMgY29tcGlsZXIgYW5kIGxpYnJhcnkgc3VwcG9ydCBmb3IgSVNPL0lFQyBUUiAyNDczMyBcCit0aGF0IGlzIGN1cnJlbnRseSBub3QgYXZhaWxhYmxlLgorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworICAvKioKKyAgICAqIEBkZWZncm91cCBkZWNpbWFsIERlY2ltYWwgRmxvYXRpbmctUG9pbnQgQXJpdGhtZXRpYworICAgICogQGluZ3JvdXAgbnVtZXJpY3MKKyAgICAqCisgICAgKiBDbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4KKyAgICAqIEB7CisgICAgKi8KKworICAvKiogQG5hbWVzcGFjZSBzdGQ6OmRlY2ltYWwKKyAgICAqIEBicmllZiBJU08vSUVDIFRSIDI0NzMzIERlY2ltYWwgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4KKyAgICAqLworbmFtZXNwYWNlIGRlY2ltYWwKK3sKKyAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICBjbGFzcyBkZWNpbWFsMzI7CisgIGNsYXNzIGRlY2ltYWw2NDsKKyAgY2xhc3MgZGVjaW1hbDEyODsKKworICAvLyAzLjIuNSAgSW5pdGlhbGl6YXRpb24gZnJvbSBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQuCisgIHN0YXRpYyBkZWNpbWFsMzIgbWFrZV9kZWNpbWFsMzIobG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cCk7CisgIHN0YXRpYyBkZWNpbWFsMzIgbWFrZV9kZWNpbWFsMzIodW5zaWduZWQgbG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cCk7CisgIHN0YXRpYyBkZWNpbWFsNjQgbWFrZV9kZWNpbWFsNjQobG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cCk7CisgIHN0YXRpYyBkZWNpbWFsNjQgbWFrZV9kZWNpbWFsNjQodW5zaWduZWQgbG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cCk7CisgIHN0YXRpYyBkZWNpbWFsMTI4IG1ha2VfZGVjaW1hbDEyOChsb25nIGxvbmcgX19jb2VmZiwgaW50IF9fZXhwKTsKKyAgc3RhdGljIGRlY2ltYWwxMjggbWFrZV9kZWNpbWFsMTI4KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NvZWZmLCBpbnQgX19leHApOworCisgIC8vLyBOb24tY29uZm9ybWluZyBleHRlbnNpb246IENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZS4KKyAgbG9uZyBsb25nIGRlY2ltYWwzMl90b19sb25nX2xvbmcoZGVjaW1hbDMyIF9fZCk7CisgIGxvbmcgbG9uZyBkZWNpbWFsNjRfdG9fbG9uZ19sb25nKGRlY2ltYWw2NCBfX2QpOworICBsb25nIGxvbmcgZGVjaW1hbDEyOF90b19sb25nX2xvbmcoZGVjaW1hbDEyOCBfX2QpOworICBsb25nIGxvbmcgZGVjaW1hbF90b19sb25nX2xvbmcoZGVjaW1hbDMyIF9fZCk7CisgIGxvbmcgbG9uZyBkZWNpbWFsX3RvX2xvbmdfbG9uZyhkZWNpbWFsNjQgX19kKTsKKyAgbG9uZyBsb25nIGRlY2ltYWxfdG9fbG9uZ19sb25nKGRlY2ltYWwxMjggX19kKTsKKworICAvLyAzLjIuNiAgQ29udmVyc2lvbiB0byBnZW5lcmljIGZsb2F0aW5nLXBvaW50IHR5cGUuCisgIGZsb2F0IGRlY2ltYWwzMl90b19mbG9hdChkZWNpbWFsMzIgX19kKTsKKyAgZmxvYXQgZGVjaW1hbDY0X3RvX2Zsb2F0KGRlY2ltYWw2NCBfX2QpOworICBmbG9hdCBkZWNpbWFsMTI4X3RvX2Zsb2F0KGRlY2ltYWwxMjggX19kKTsKKyAgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsMzIgX19kKTsKKyAgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsNjQgX19kKTsKKyAgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsMTI4IF9fZCk7CisKKyAgZG91YmxlIGRlY2ltYWwzMl90b19kb3VibGUoZGVjaW1hbDMyIF9fZCk7CisgIGRvdWJsZSBkZWNpbWFsNjRfdG9fZG91YmxlKGRlY2ltYWw2NCBfX2QpOworICBkb3VibGUgZGVjaW1hbDEyOF90b19kb3VibGUoZGVjaW1hbDEyOCBfX2QpOworICBkb3VibGUgZGVjaW1hbF90b19kb3VibGUoZGVjaW1hbDMyIF9fZCk7CisgIGRvdWJsZSBkZWNpbWFsX3RvX2RvdWJsZShkZWNpbWFsNjQgX19kKTsKKyAgZG91YmxlIGRlY2ltYWxfdG9fZG91YmxlKGRlY2ltYWwxMjggX19kKTsKKworICBsb25nIGRvdWJsZSBkZWNpbWFsMzJfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDMyIF9fZCk7CisgIGxvbmcgZG91YmxlIGRlY2ltYWw2NF90b19sb25nX2RvdWJsZShkZWNpbWFsNjQgX19kKTsKKyAgbG9uZyBkb3VibGUgZGVjaW1hbDEyOF90b19sb25nX2RvdWJsZShkZWNpbWFsMTI4IF9fZCk7CisgIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDMyIF9fZCk7CisgIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDY0IF9fZCk7CisgIGxvbmcgZG91YmxlIGRlY2ltYWxfdG9fbG9uZ19kb3VibGUoZGVjaW1hbDEyOCBfX2QpOworCisgIC8vIDMuMi43ICBVbmFyeSBhcml0aG1ldGljIG9wZXJhdG9ycy4KKyAgZGVjaW1hbDMyICBvcGVyYXRvcisoZGVjaW1hbDMyIF9fcmhzKTsKKyAgZGVjaW1hbDY0ICBvcGVyYXRvcisoZGVjaW1hbDY0IF9fcmhzKTsKKyAgZGVjaW1hbDEyOCBvcGVyYXRvcisoZGVjaW1hbDEyOCBfX3Jocyk7CisgIGRlY2ltYWwzMiAgb3BlcmF0b3ItKGRlY2ltYWwzMiBfX3Jocyk7CisgIGRlY2ltYWw2NCAgb3BlcmF0b3ItKGRlY2ltYWw2NCBfX3Jocyk7CisgIGRlY2ltYWwxMjggb3BlcmF0b3ItKGRlY2ltYWwxMjggX19yaHMpOworCisgIC8vIDMuMi44ICBCaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRvcnMuCisjZGVmaW5lIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKF9PcCwgX1QxLCBfVDIsIF9UMykJXAorICBfVDEgb3BlcmF0b3IgX09wKF9UMiBfX2xocywgX1QzIF9fcmhzKTsKKyNkZWZpbmUgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoX09wLCBfVHApCQlcCisgIF9UcCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCBpbnQgX19yaHMpOwkJCVwKKyAgX1RwIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIHVuc2lnbmVkIGludCBfX3Jocyk7CQlcCisgIF9UcCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCBsb25nIF9fcmhzKTsJCQlcCisgIF9UcCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCB1bnNpZ25lZCBsb25nIF9fcmhzKTsJCVwKKyAgX1RwIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIGxvbmcgbG9uZyBfX3Jocyk7CQkJXAorICBfVHAgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgdW5zaWduZWQgbG9uZyBsb25nIF9fcmhzKTsJXAorICBfVHAgb3BlcmF0b3IgX09wKGludCBfX2xocywgX1RwIF9fcmhzKTsJCQlcCisgIF9UcCBvcGVyYXRvciBfT3AodW5zaWduZWQgaW50IF9fbGhzLCBfVHAgX19yaHMpOwkJXAorICBfVHAgb3BlcmF0b3IgX09wKGxvbmcgX19saHMsIF9UcCBfX3Jocyk7CQkJXAorICBfVHAgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGxvbmcgX19saHMsIF9UcCBfX3Jocyk7CQlcCisgIF9UcCBvcGVyYXRvciBfT3AobG9uZyBsb25nIF9fbGhzLCBfVHAgX19yaHMpOwkJCVwKKyAgX1RwIG9wZXJhdG9yIF9PcCh1bnNpZ25lZCBsb25nIGxvbmcgX19saHMsIF9UcCBfX3Jocyk7CisKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDMyLCBkZWNpbWFsMzIsIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKywgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsNjQsIGRlY2ltYWwzMiwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgrLCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWwxMjgsIGRlY2ltYWwzMiwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDEyOCwgZGVjaW1hbDY0LCBkZWNpbWFsMTI4KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKywgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMzIsIGRlY2ltYWwzMiwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgtLCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWw2NCwgZGVjaW1hbDMyLCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKC0sIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDEyOCwgZGVjaW1hbDMyLCBkZWNpbWFsMTI4KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMTI4LCBkZWNpbWFsNjQsIGRlY2ltYWwxMjgpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgtLCBkZWNpbWFsMTI4KQorCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwzMiwgZGVjaW1hbDMyLCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKCosIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDY0LCBkZWNpbWFsMzIsIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKiwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIsIGRlY2ltYWwxMjgpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKCosIGRlY2ltYWwxMjgpCisKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDMyLCBkZWNpbWFsMzIsIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoLywgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsNjQsIGRlY2ltYWwzMiwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgvLCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWwxMjgsIGRlY2ltYWwzMiwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDEyOCwgZGVjaW1hbDY0LCBkZWNpbWFsMTI4KQorICBfREVDTEFSRV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCkKKyAgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoLywgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUNMQVJFX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDCisjdW5kZWYgX0RFQ0xBUkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQKKworICAvLyAzLjIuOSAgQ29tcGFyaXNvbiBvcGVyYXRvcnMuCisjZGVmaW5lIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTihfT3AsIF9UcCkJCQkJXAorICBib29sIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIGRlY2ltYWwzMiBfX3Jocyk7CQkJXAorICBib29sIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIGRlY2ltYWw2NCBfX3Jocyk7CQkJXAorICBib29sIG9wZXJhdG9yIF9PcChfVHAgX19saHMsIGRlY2ltYWwxMjggX19yaHMpOwkJCVwKKyAgYm9vbCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCBpbnQgX19yaHMpOwkJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgdW5zaWduZWQgaW50IF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgbG9uZyBfX3Jocyk7CQkJCVwKKyAgYm9vbCBvcGVyYXRvciBfT3AoX1RwIF9fbGhzLCB1bnNpZ25lZCBsb25nIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgbG9uZyBsb25nIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKF9UcCBfX2xocywgdW5zaWduZWQgbG9uZyBsb25nIF9fcmhzKTsJCVwKKyAgYm9vbCBvcGVyYXRvciBfT3AoaW50IF9fbGhzLCBfVHAgX19yaHMpOwkJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGludCBfX2xocywgX1RwIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKGxvbmcgX19saHMsIF9UcCBfX3Jocyk7CQkJCVwKKyAgYm9vbCBvcGVyYXRvciBfT3AodW5zaWduZWQgbG9uZyBfX2xocywgX1RwIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKGxvbmcgbG9uZyBfX2xocywgX1RwIF9fcmhzKTsJCQlcCisgIGJvb2wgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGxvbmcgbG9uZyBfX2xocywgX1RwIF9fcmhzKTsKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPT0sIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9DT01QQVJJU09OKD09LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTig9PSwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oIT0sIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9DT01QQVJJU09OKCE9LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTighPSwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPCwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPCwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPCwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPj0sIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9DT01QQVJJU09OKD49LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTig+PSwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPiwgZGVjaW1hbDMyKQorICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPiwgZGVjaW1hbDY0KQorICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPiwgZGVjaW1hbDEyOCkKKworICBfREVDTEFSRV9ERUNJTUFMX0NPTVBBUklTT04oPj0sIGRlY2ltYWwzMikKKyAgX0RFQ0xBUkVfREVDSU1BTF9DT01QQVJJU09OKD49LCBkZWNpbWFsNjQpCisgIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTig+PSwgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUNMQVJFX0RFQ0lNQUxfQ09NUEFSSVNPTgorCisgIC8vLyAzLjIuMiAgQ2xhc3MgZGVjaW1hbDMyLgorICBjbGFzcyBkZWNpbWFsMzIKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBmbG9hdCBfX2RlY2Zsb2F0MzIgX19hdHRyaWJ1dGVfXygobW9kZShTRCkpKTsKKworICAgIC8vIDMuMi4yLjIgIENvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kuCisgICAgZGVjaW1hbDMyKCkJCQkJCTogX192YWwoMC5lLTEwMURGKSB7fQorCisgICAgLy8gMy4yLjIuMyAgQ29udmVyc2lvbiBmcm9tIGZsb2F0aW5nLXBvaW50IHR5cGUuCisgICAgZXhwbGljaXQgZGVjaW1hbDMyKGRlY2ltYWw2NCBfX2Q2NCk7CisgICAgZXhwbGljaXQgZGVjaW1hbDMyKGRlY2ltYWwxMjggX19kMTI4KTsKKyAgICBleHBsaWNpdCBkZWNpbWFsMzIoZmxvYXQgX19yKQkJOiBfX3ZhbChfX3IpIHt9CisgICAgZXhwbGljaXQgZGVjaW1hbDMyKGRvdWJsZSBfX3IpCQk6IF9fdmFsKF9fcikge30KKyAgICBleHBsaWNpdCBkZWNpbWFsMzIobG9uZyBkb3VibGUgX19yKQkJOiBfX3ZhbChfX3IpIHt9CisKKyAgICAvLyAzLjIuMi40ICBDb252ZXJzaW9uIGZyb20gaW50ZWdyYWwgdHlwZS4KKyAgICBkZWNpbWFsMzIoaW50IF9feikJCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDMyKHVuc2lnbmVkIGludCBfX3opCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDMyKGxvbmcgX196KQkJCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMzIodW5zaWduZWQgbG9uZyBfX3opCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMzIobG9uZyBsb25nIF9feikJCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMzIodW5zaWduZWQgbG9uZyBsb25nIF9feikJCTogX192YWwoX196KSB7fQorCisgICAgLy8vIENvbmZvcm1pbmcgZXh0ZW5zaW9uOiBDb252ZXJzaW9uIGZyb20gc2NhbGFyIGRlY2ltYWwgdHlwZS4KKyAgICBkZWNpbWFsMzIoX19kZWNmbG9hdDMyIF9feikJCQk6IF9fdmFsKF9feikge30KKworICAgIC8vIDMuMi4yLjUgIENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZS4gKERJU0FCTEVEKQorICAgIC8vb3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyByZXR1cm4gKGxvbmcgbG9uZylfX3ZhbDsgfQorCisgICAgLy8gMy4yLjIuNiAgSW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLgorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IrKygpCisgICAgeworICAgICAgX192YWwgKz0gMTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBkZWNpbWFsMzIgb3BlcmF0b3IrKyhpbnQpCisgICAgeworICAgICAgZGVjaW1hbDMyIF9fdG1wID0gKnRoaXM7CisgICAgICBfX3ZhbCArPSAxOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICAgIGRlY2ltYWwzMiYgb3BlcmF0b3ItLSgpCisgICAgeworICAgICAgX192YWwgLT0gMTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBkZWNpbWFsMzIgICBvcGVyYXRvci0tKGludCkKKyAgICB7CisgICAgICBkZWNpbWFsMzIgX190bXAgPSAqdGhpczsKKyAgICAgIF9fdmFsIC09IDE7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgICAgLy8gMy4yLjIuNyAgQ29tcG91bmQgYXNzaWdubWVudC4KKyNkZWZpbmUgX0RFQ0xBUkVfREVDSU1BTDMyX0NPTVBPVU5EX0FTU0lHTk1FTlQoX09wKQlcCisgICAgZGVjaW1hbDMyJiBvcGVyYXRvciBfT3AoZGVjaW1hbDMyIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMzImIG9wZXJhdG9yIF9PcChkZWNpbWFsNjQgX19yaHMpOwkJXAorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IgX09wKGRlY2ltYWwxMjggX19yaHMpOwkJXAorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IgX09wKGludCBfX3Jocyk7CQkJXAorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGludCBfX3Jocyk7CVwKKyAgICBkZWNpbWFsMzImIG9wZXJhdG9yIF9PcChsb25nIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMzImIG9wZXJhdG9yIF9PcCh1bnNpZ25lZCBsb25nIF9fcmhzKTsJXAorICAgIGRlY2ltYWwzMiYgb3BlcmF0b3IgX09wKGxvbmcgbG9uZyBfX3Jocyk7CQlcCisgICAgZGVjaW1hbDMyJiBvcGVyYXRvciBfT3AodW5zaWduZWQgbG9uZyBsb25nIF9fcmhzKTsKKworICAgIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UKCs9KQorICAgIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UKC09KQorICAgIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UKCo9KQorICAgIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UKC89KQorI3VuZGVmIF9ERUNMQVJFX0RFQ0lNQUwzMl9DT01QT1VORF9BU1NJR05NRU5UCisKKyAgcHJpdmF0ZToKKyAgICBfX2RlY2Zsb2F0MzIgX192YWw7CisKKyAgcHVibGljOgorICAgIF9fZGVjZmxvYXQzMiBfX2dldHZhbCh2b2lkKSB7IHJldHVybiBfX3ZhbDsgfQorICAgIHZvaWQgX19zZXR2YWwoX19kZWNmbG9hdDMyIF9feCkgeyBfX3ZhbCA9IF9feDsgfQorICB9OworCisgIC8vLyAzLjIuMyAgQ2xhc3MgZGVjaW1hbDY0LgorICBjbGFzcyBkZWNpbWFsNjQKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBmbG9hdCBfX2RlY2Zsb2F0NjQgX19hdHRyaWJ1dGVfXygobW9kZShERCkpKTsKKworICAgIC8vIDMuMi4zLjIgIENvbnN0cnVjdC9jb3B5L2Rlc3Ryb3kuCisgICAgZGVjaW1hbDY0KCkJCQkJCTogX192YWwoMC5lLTM5OGRkKSB7fQorCisgICAgLy8gMy4yLjMuMyAgQ29udmVyc2lvbiBmcm9tIGZsb2F0aW5nLXBvaW50IHR5cGUuCisJICAgICBkZWNpbWFsNjQoZGVjaW1hbDMyIGQzMik7CisgICAgZXhwbGljaXQgZGVjaW1hbDY0KGRlY2ltYWwxMjggZDEyOCk7CisgICAgZXhwbGljaXQgZGVjaW1hbDY0KGZsb2F0IF9fcikJCTogX192YWwoX19yKSB7fQorICAgIGV4cGxpY2l0IGRlY2ltYWw2NChkb3VibGUgX19yKQkJOiBfX3ZhbChfX3IpIHt9CisgICAgZXhwbGljaXQgZGVjaW1hbDY0KGxvbmcgZG91YmxlIF9fcikJCTogX192YWwoX19yKSB7fQorCisgICAgLy8gMy4yLjMuNCAgQ29udmVyc2lvbiBmcm9tIGludGVncmFsIHR5cGUuCisgICAgZGVjaW1hbDY0KGludCBfX3opCQkJCTogX192YWwoX196KSB7fQorICAgIGRlY2ltYWw2NCh1bnNpZ25lZCBpbnQgX196KQkJCTogX192YWwoX196KSB7fQorICAgIGRlY2ltYWw2NChsb25nIF9feikJCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDY0KHVuc2lnbmVkIGxvbmcgX196KQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDY0KGxvbmcgbG9uZyBfX3opCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3opCQk6IF9fdmFsKF9feikge30KKworICAgIC8vLyBDb25mb3JtaW5nIGV4dGVuc2lvbjogQ29udmVyc2lvbiBmcm9tIHNjYWxhciBkZWNpbWFsIHR5cGUuCisgICAgZGVjaW1hbDY0KF9fZGVjZmxvYXQ2NCBfX3opCQkJOiBfX3ZhbChfX3opIHt9CisKKyAgICAvLyAzLjIuMy41ICBDb252ZXJzaW9uIHRvIGludGVncmFsIHR5cGUuIChESVNBQkxFRCkKKyAgICAvL29wZXJhdG9yIGxvbmcgbG9uZygpIGNvbnN0IHsgcmV0dXJuIChsb25nIGxvbmcpX192YWw7IH0KKworICAgIC8vIDMuMi4zLjYgIEluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9wZXJhdG9ycy4KKyAgICBkZWNpbWFsNjQmIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgIF9fdmFsICs9IDE7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgZGVjaW1hbDY0IG9wZXJhdG9yKysoaW50KQorICAgIHsKKyAgICAgIGRlY2ltYWw2NCBfX3RtcCA9ICp0aGlzOworICAgICAgX192YWwgKz0gMTsKKyAgICAgIHJldHVybiBfX3RtcDsKKyAgICB9CisKKyAgICBkZWNpbWFsNjQmIG9wZXJhdG9yLS0oKQorICAgIHsKKyAgICAgIF9fdmFsIC09IDE7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgZGVjaW1hbDY0IG9wZXJhdG9yLS0oaW50KQorICAgIHsKKyAgICAgIGRlY2ltYWw2NCBfX3RtcCA9ICp0aGlzOworICAgICAgX192YWwgLT0gMTsKKyAgICAgIHJldHVybiBfX3RtcDsKKyAgICB9CisKKyAgICAvLyAzLjIuMy43ICBDb21wb3VuZCBhc3NpZ25tZW50LgorI2RlZmluZSBfREVDTEFSRV9ERUNJTUFMNjRfQ09NUE9VTkRfQVNTSUdOTUVOVChfT3ApCVwKKyAgICBkZWNpbWFsNjQmIG9wZXJhdG9yIF9PcChkZWNpbWFsMzIgX19yaHMpOwkJXAorICAgIGRlY2ltYWw2NCYgb3BlcmF0b3IgX09wKGRlY2ltYWw2NCBfX3Jocyk7CQlcCisgICAgZGVjaW1hbDY0JiBvcGVyYXRvciBfT3AoZGVjaW1hbDEyOCBfX3Jocyk7CQlcCisgICAgZGVjaW1hbDY0JiBvcGVyYXRvciBfT3AoaW50IF9fcmhzKTsJCQlcCisgICAgZGVjaW1hbDY0JiBvcGVyYXRvciBfT3AodW5zaWduZWQgaW50IF9fcmhzKTsJXAorICAgIGRlY2ltYWw2NCYgb3BlcmF0b3IgX09wKGxvbmcgX19yaHMpOwkJXAorICAgIGRlY2ltYWw2NCYgb3BlcmF0b3IgX09wKHVuc2lnbmVkIGxvbmcgX19yaHMpOwlcCisgICAgZGVjaW1hbDY0JiBvcGVyYXRvciBfT3AobG9uZyBsb25nIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsNjQmIG9wZXJhdG9yIF9PcCh1bnNpZ25lZCBsb25nIGxvbmcgX19yaHMpOworCisgICAgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQoKz0pCisgICAgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQoLT0pCisgICAgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQoKj0pCisgICAgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQoLz0pCisjdW5kZWYgX0RFQ0xBUkVfREVDSU1BTDY0X0NPTVBPVU5EX0FTU0lHTk1FTlQKKworICBwcml2YXRlOgorICAgIF9fZGVjZmxvYXQ2NCBfX3ZhbDsKKworICBwdWJsaWM6CisgICAgX19kZWNmbG9hdDY0IF9fZ2V0dmFsKHZvaWQpIHsgcmV0dXJuIF9fdmFsOyB9CisgICAgdm9pZCBfX3NldHZhbChfX2RlY2Zsb2F0NjQgX194KSB7IF9fdmFsID0gX194OyB9CisgIH07CisKKyAgLy8vIDMuMi40ICBDbGFzcyBkZWNpbWFsMTI4LgorICBjbGFzcyBkZWNpbWFsMTI4CisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgZmxvYXQgX19kZWNmbG9hdDEyOCBfX2F0dHJpYnV0ZV9fKChtb2RlKFREKSkpOworCisgICAgLy8gMy4yLjQuMiAgQ29uc3RydWN0L2NvcHkvZGVzdHJveS4KKyAgICBkZWNpbWFsMTI4KCkJCQkJOiBfX3ZhbCgwLmUtNjE3NkRMKSB7fQorCisgICAgLy8gMy4yLjQuMyAgQ29udmVyc2lvbiBmcm9tIGZsb2F0aW5nLXBvaW50IHR5cGUuCisJICAgICBkZWNpbWFsMTI4KGRlY2ltYWwzMiBkMzIpOworCSAgICAgZGVjaW1hbDEyOChkZWNpbWFsNjQgZDY0KTsKKyAgICBleHBsaWNpdCBkZWNpbWFsMTI4KGZsb2F0IF9fcikJCTogX192YWwoX19yKSB7fQorICAgIGV4cGxpY2l0IGRlY2ltYWwxMjgoZG91YmxlIF9fcikJCTogX192YWwoX19yKSB7fQorICAgIGV4cGxpY2l0IGRlY2ltYWwxMjgobG9uZyBkb3VibGUgX19yKQk6IF9fdmFsKF9fcikge30KKworCisgICAgLy8gMy4yLjQuNCAgQ29udmVyc2lvbiBmcm9tIGludGVncmFsIHR5cGUuCisgICAgZGVjaW1hbDEyOChpbnQgX196KQkJCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMTI4KHVuc2lnbmVkIGludCBfX3opCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMTI4KGxvbmcgX196KQkJCTogX192YWwoX196KSB7fQorICAgIGRlY2ltYWwxMjgodW5zaWduZWQgbG9uZyBfX3opCQk6IF9fdmFsKF9feikge30KKyAgICBkZWNpbWFsMTI4KGxvbmcgbG9uZyBfX3opCQkJOiBfX3ZhbChfX3opIHt9CisgICAgZGVjaW1hbDEyOCh1bnNpZ25lZCBsb25nIGxvbmcgX196KQkJOiBfX3ZhbChfX3opIHt9CisKKyAgICAvLy8gQ29uZm9ybWluZyBleHRlbnNpb246IENvbnZlcnNpb24gZnJvbSBzY2FsYXIgZGVjaW1hbCB0eXBlLgorICAgIGRlY2ltYWwxMjgoX19kZWNmbG9hdDEyOCBfX3opCQk6IF9fdmFsKF9feikge30KKworICAgIC8vIDMuMi40LjUgIENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZS4gKERJU0FCTEVEKQorICAgIC8vb3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyByZXR1cm4gKGxvbmcgbG9uZylfX3ZhbDsgfQorCisgICAgLy8gMy4yLjQuNiAgSW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLgorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yKysoKQorICAgIHsKKyAgICAgIF9fdmFsICs9IDE7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgZGVjaW1hbDEyOCBvcGVyYXRvcisrKGludCkKKyAgICB7CisgICAgICBkZWNpbWFsMTI4IF9fdG1wID0gKnRoaXM7CisgICAgICBfX3ZhbCArPSAxOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKworICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yLS0oKQorICAgIHsKKyAgICAgIF9fdmFsIC09IDE7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgZGVjaW1hbDEyOCAgIG9wZXJhdG9yLS0oaW50KQorICAgIHsKKyAgICAgIGRlY2ltYWwxMjggX190bXAgPSAqdGhpczsKKyAgICAgIF9fdmFsIC09IDE7CisgICAgICByZXR1cm4gX190bXA7CisgICAgfQorCisgICAgLy8gMy4yLjQuNyAgQ29tcG91bmQgYXNzaWdubWVudC4KKyNkZWZpbmUgX0RFQ0xBUkVfREVDSU1BTDEyOF9DT01QT1VORF9BU1NJR05NRU5UKF9PcCkJXAorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yIF9PcChkZWNpbWFsMzIgX19yaHMpOwkJXAorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yIF9PcChkZWNpbWFsNjQgX19yaHMpOwkJXAorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yIF9PcChkZWNpbWFsMTI4IF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AoaW50IF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AodW5zaWduZWQgaW50IF9fcmhzKTsJXAorICAgIGRlY2ltYWwxMjgmIG9wZXJhdG9yIF9PcChsb25nIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AodW5zaWduZWQgbG9uZyBfX3Jocyk7CVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AobG9uZyBsb25nIF9fcmhzKTsJCVwKKyAgICBkZWNpbWFsMTI4JiBvcGVyYXRvciBfT3AodW5zaWduZWQgbG9uZyBsb25nIF9fcmhzKTsKKworICAgIF9ERUNMQVJFX0RFQ0lNQUwxMjhfQ09NUE9VTkRfQVNTSUdOTUVOVCgrPSkKKyAgICBfREVDTEFSRV9ERUNJTUFMMTI4X0NPTVBPVU5EX0FTU0lHTk1FTlQoLT0pCisgICAgX0RFQ0xBUkVfREVDSU1BTDEyOF9DT01QT1VORF9BU1NJR05NRU5UKCo9KQorICAgIF9ERUNMQVJFX0RFQ0lNQUwxMjhfQ09NUE9VTkRfQVNTSUdOTUVOVCgvPSkKKyN1bmRlZiBfREVDTEFSRV9ERUNJTUFMMTI4X0NPTVBPVU5EX0FTU0lHTk1FTlQKKworICBwcml2YXRlOgorICAgIF9fZGVjZmxvYXQxMjggX192YWw7CisKKyAgcHVibGljOgorICAgIF9fZGVjZmxvYXQxMjggX19nZXR2YWwodm9pZCkgeyByZXR1cm4gX192YWw7IH0KKyAgICB2b2lkIF9fc2V0dmFsKF9fZGVjZmxvYXQxMjggX194KSB7IF9fdmFsID0gX194OyB9CisgIH07CisKKyNkZWZpbmUgX0dMSUJDWFhfVVNFX0RFQ0lNQUxfIDEKKworICBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIGRlY2ltYWwKKyAgLy8gQH0gZ3JvdXAgZGVjaW1hbAorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNpbmNsdWRlIDxkZWNpbWFsL2RlY2ltYWwuaD4KKworI2VuZGlmIC8qIF9HTElCQ1hYX0RFQ0lNQUwgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVjaW1hbC9kZWNpbWFsLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlY2ltYWwvZGVjaW1hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzA2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2RlY2ltYWwvZGVjaW1hbC5oCkBAIC0wLDAgKzEsNDY4IEBACisvLyBkZWNpbWFsIGNsYXNzZXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBkZWNpbWFsL2RlY2ltYWwuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2RlY2ltYWx9CisgKi8KKworLy8gSVNPL0lFQyBUUiAyNDczMworLy8gV3JpdHRlbiBieSBKYW5pcyBKb2huc29uIDxqYW5pczE4N0B1cy5pYm0uY29tPgorCisjaWZuZGVmIF9HTElCQ1hYX0RFQ0lNQUxfSU1QTAorI2RlZmluZSBfR0xJQkNYWF9ERUNJTUFMX0lNUEwgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIGRlY2ltYWwKK3sKKyAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBJU08vSUVDIFRSIDI0NzMzICAzLjIuWzIzNF0uMSAgQ29uc3RydWN0L2NvcHkvZGVzdHJveS4KKworICBpbmxpbmUgZGVjaW1hbDMyOjpkZWNpbWFsMzIoZGVjaW1hbDY0IF9fcikJOiBfX3ZhbChfX3IuX19nZXR2YWwoKSkge30KKyAgaW5saW5lIGRlY2ltYWwzMjo6ZGVjaW1hbDMyKGRlY2ltYWwxMjggX19yKQk6IF9fdmFsKF9fci5fX2dldHZhbCgpKSB7fQorICBpbmxpbmUgZGVjaW1hbDY0OjpkZWNpbWFsNjQoZGVjaW1hbDMyIF9fcikJOiBfX3ZhbChfX3IuX19nZXR2YWwoKSkge30KKyAgaW5saW5lIGRlY2ltYWw2NDo6ZGVjaW1hbDY0KGRlY2ltYWwxMjggX19yKQk6IF9fdmFsKF9fci5fX2dldHZhbCgpKSB7fQorICBpbmxpbmUgZGVjaW1hbDEyODo6ZGVjaW1hbDEyOChkZWNpbWFsMzIgX19yKQk6IF9fdmFsKF9fci5fX2dldHZhbCgpKSB7fQorICBpbmxpbmUgZGVjaW1hbDEyODo6ZGVjaW1hbDEyOChkZWNpbWFsNjQgX19yKQk6IF9fdmFsKF9fci5fX2dldHZhbCgpKSB7fQorCisgIC8vIElTTy9JRUMgVFIgMjQ3MzMgIDMuMi5bMjM0XS42ICBDb21wb3VuZCBhc3NpZ25tZW50LgorCisjZGVmaW5lIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0RFQyhfT3AxLCBfT3AyLCBfVDEsIF9UMikJIFwKKyAgaW5saW5lIF9UMSYgX1QxOjpvcGVyYXRvciBfT3AxKF9UMiBfX3JocykJCQkJIFwKKyAgewkJCQkJCQkJCSBcCisgICAgX19zZXR2YWwoX19nZXR2YWwoKSBfT3AyIF9fcmhzLl9fZ2V0dmFsKCkpOwkJCQkgXAorICAgIHJldHVybiAqdGhpczsJCQkJCQkJIFwKKyAgfQorCisjZGVmaW5lIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0lOVChfT3AxLCBfT3AyLCBfVDEsIF9UMikJIFwKKyAgaW5saW5lIF9UMSYgX1QxOjpvcGVyYXRvciBfT3AxKF9UMiBfX3JocykJCQkJIFwKKyAgewkJCQkJCQkJCSBcCisgICAgX19zZXR2YWwoX19nZXR2YWwoKSBfT3AyIF9fcmhzKTsJCQkJCSBcCisgICAgcmV0dXJuICp0aGlzOwkJCQkJCQkgXAorICB9CisKKyNkZWZpbmUgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRTKF9PcDEsIF9PcDIsIF9UMSkJCSBcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0RFQyhfT3AxLCBfT3AyLCBfVDEsIGRlY2ltYWwzMikJIFwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRfREVDKF9PcDEsIF9PcDIsIF9UMSwgZGVjaW1hbDY0KQkgXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9ERUMoX09wMSwgX09wMiwgX1QxLCBkZWNpbWFsMTI4KQkgXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9JTlQoX09wMSwgX09wMiwgX1QxLCBpbnQpCQkgXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVF9JTlQoX09wMSwgX09wMiwgX1QxLCB1bnNpZ25lZCBpbnQpIFwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRfSU5UKF9PcDEsIF9PcDIsIF9UMSwgbG9uZykJIFwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRfSU5UKF9PcDEsIF9PcDIsIF9UMSwgdW5zaWduZWQgbG9uZylcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0lOVChfT3AxLCBfT3AyLCBfVDEsIGxvbmcgbG9uZykJIFwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRfSU5UKF9PcDEsIF9PcDIsIF9UMSwgdW5zaWduZWQgbG9uZyBsb25nKQorCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygrPSwgKywgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoLT0sIC0sIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRTKCo9LCAqLCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygvPSwgLywgZGVjaW1hbDMyKQorCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygrPSwgKywgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoLT0sIC0sIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRTKCo9LCAqLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygvPSwgLywgZGVjaW1hbDY0KQorCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygrPSwgKywgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBPVU5EX0FTU0lHTk1FTlRTKC09LCAtLCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUE9VTkRfQVNTSUdOTUVOVFMoKj0sICosIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUygvPSwgLywgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0RFQworI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UX0lOVAorI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9DT01QT1VORF9BU1NJR05NRU5UUworCisgIC8vIEV4dGVuc2lvbjogQ29udmVyc2lvbiB0byBpbnRlZ3JhbCB0eXBlLgorCisgIGlubGluZSBsb25nIGxvbmcgZGVjaW1hbDMyX3RvX2xvbmdfbG9uZyhkZWNpbWFsMzIgX19kKQorICB7IHJldHVybiAobG9uZyBsb25nKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgbG9uZyBkZWNpbWFsNjRfdG9fbG9uZ19sb25nKGRlY2ltYWw2NCBfX2QpCisgIHsgcmV0dXJuIChsb25nIGxvbmcpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgbG9uZyBsb25nIGRlY2ltYWwxMjhfdG9fbG9uZ19sb25nKGRlY2ltYWwxMjggX19kKQorICB7IHJldHVybiAobG9uZyBsb25nKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgbG9uZyBkZWNpbWFsX3RvX2xvbmdfbG9uZyhkZWNpbWFsMzIgX19kKQorICB7IHJldHVybiAobG9uZyBsb25nKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgbG9uZyBkZWNpbWFsX3RvX2xvbmdfbG9uZyhkZWNpbWFsNjQgX19kKQorICB7IHJldHVybiAobG9uZyBsb25nKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgbG9uZyBkZWNpbWFsX3RvX2xvbmdfbG9uZyhkZWNpbWFsMTI4IF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgbG9uZylfX2QuX19nZXR2YWwoKTsgfQorCisgIC8vIElTTy9JRUMgVFIgMjQ3MzMgIDMuMi41ICBJbml0aWFsaXphdGlvbiBmcm9tIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudC4KKworICBzdGF0aWMgZGVjaW1hbDMyIG1ha2VfZGVjaW1hbDMyKGxvbmcgbG9uZyBfX2NvZWZmLCBpbnQgX19leHBvbmVudCkKKyAgeworICAgIGRlY2ltYWwzMiBfX2RlY2V4cCA9IDEsIF9fbXVsdGlwbGllcjsKKworICAgIGlmIChfX2V4cG9uZW50IDwgMCkKKyAgICAgIHsKKwlfX211bHRpcGxpZXIgPSAxLkUtMURGOworCV9fZXhwb25lbnQgPSAtX19leHBvbmVudDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBfX211bHRpcGxpZXIgPSAxLkUxREY7CisKKyAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX2V4cG9uZW50OyArK19faSkKKyAgICAgIF9fZGVjZXhwICo9IF9fbXVsdGlwbGllcjsKKworICAgIHJldHVybiBfX2NvZWZmICogX19kZWNleHA7CisgIH0KKworICBzdGF0aWMgZGVjaW1hbDMyIG1ha2VfZGVjaW1hbDMyKHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NvZWZmLCBpbnQgX19leHBvbmVudCkKKyAgeworICAgIGRlY2ltYWwzMiBfX2RlY2V4cCA9IDEsIF9fbXVsdGlwbGllcjsKKworICAgIGlmIChfX2V4cG9uZW50IDwgMCkKKyAgICAgIHsKKwlfX211bHRpcGxpZXIgPSAxLkUtMURGOworCV9fZXhwb25lbnQgPSAtX19leHBvbmVudDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBfX211bHRpcGxpZXIgPSAxLkUxREY7CisKKyAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX2V4cG9uZW50OyArK19faSkKKyAgICAgIF9fZGVjZXhwICo9IF9fbXVsdGlwbGllcjsKKworICAgIHJldHVybiBfX2NvZWZmICogX19kZWNleHA7CisgIH0KKworICBzdGF0aWMgZGVjaW1hbDY0IG1ha2VfZGVjaW1hbDY0KGxvbmcgbG9uZyBfX2NvZWZmLCBpbnQgX19leHBvbmVudCkKKyAgeworICAgIGRlY2ltYWw2NCBfX2RlY2V4cCA9IDEsIF9fbXVsdGlwbGllcjsKKworICAgIGlmIChfX2V4cG9uZW50IDwgMCkKKyAgICAgIHsKKwlfX211bHRpcGxpZXIgPSAxLkUtMUREOworCV9fZXhwb25lbnQgPSAtX19leHBvbmVudDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBfX211bHRpcGxpZXIgPSAxLkUxREQ7CisKKyAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX2V4cG9uZW50OyArK19faSkKKyAgICAgIF9fZGVjZXhwICo9IF9fbXVsdGlwbGllcjsKKworICAgIHJldHVybiBfX2NvZWZmICogX19kZWNleHA7CisgIH0KKworICBzdGF0aWMgZGVjaW1hbDY0IG1ha2VfZGVjaW1hbDY0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NvZWZmLCBpbnQgX19leHBvbmVudCkKKyAgeworICAgIGRlY2ltYWw2NCBfX2RlY2V4cCA9IDEsIF9fbXVsdGlwbGllcjsKKworICAgIGlmIChfX2V4cG9uZW50IDwgMCkKKyAgICAgIHsKKwlfX211bHRpcGxpZXIgPSAxLkUtMUREOworCV9fZXhwb25lbnQgPSAtX19leHBvbmVudDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBfX211bHRpcGxpZXIgPSAxLkUxREQ7CisKKyAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX2V4cG9uZW50OyArK19faSkKKyAgICAgIF9fZGVjZXhwICo9IF9fbXVsdGlwbGllcjsKKworICAgIHJldHVybiBfX2NvZWZmICogX19kZWNleHA7CisgIH0KKworICBzdGF0aWMgZGVjaW1hbDEyOCBtYWtlX2RlY2ltYWwxMjgobG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cG9uZW50KQorICB7CisgICAgZGVjaW1hbDEyOCBfX2RlY2V4cCA9IDEsIF9fbXVsdGlwbGllcjsKKworICAgIGlmIChfX2V4cG9uZW50IDwgMCkKKyAgICAgIHsKKwlfX211bHRpcGxpZXIgPSAxLkUtMURMOworCV9fZXhwb25lbnQgPSAtX19leHBvbmVudDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBfX211bHRpcGxpZXIgPSAxLkUxREw7CisKKyAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX2V4cG9uZW50OyArK19faSkKKyAgICAgIF9fZGVjZXhwICo9IF9fbXVsdGlwbGllcjsKKworICAgIHJldHVybiBfX2NvZWZmICogX19kZWNleHA7CisgIH0KKworICBzdGF0aWMgZGVjaW1hbDEyOCBtYWtlX2RlY2ltYWwxMjgodW5zaWduZWQgbG9uZyBsb25nIF9fY29lZmYsIGludCBfX2V4cG9uZW50KQorICB7CisgICAgZGVjaW1hbDEyOCBfX2RlY2V4cCA9IDEsIF9fbXVsdGlwbGllcjsKKworICAgIGlmIChfX2V4cG9uZW50IDwgMCkKKyAgICAgIHsKKwlfX211bHRpcGxpZXIgPSAxLkUtMURMOworCV9fZXhwb25lbnQgPSAtX19leHBvbmVudDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBfX211bHRpcGxpZXIgPSAxLkUxREw7CisKKyAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX2V4cG9uZW50OyArK19faSkKKyAgICAgIF9fZGVjZXhwICo9IF9fbXVsdGlwbGllcjsKKworICAgIHJldHVybiBfX2NvZWZmICogX19kZWNleHA7CisgIH0KKworICAvLyBJU08vSUVDIFRSIDI0NzMzICAzLjIuNiAgQ29udmVyc2lvbiB0byBnZW5lcmljIGZsb2F0aW5nLXBvaW50IHR5cGUuCisKKyAgaW5saW5lIGZsb2F0IGRlY2ltYWwzMl90b19mbG9hdChkZWNpbWFsMzIgX19kKQorICB7IHJldHVybiAoZmxvYXQpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZmxvYXQgZGVjaW1hbDY0X3RvX2Zsb2F0KGRlY2ltYWw2NCBfX2QpCisgIHsgcmV0dXJuIChmbG9hdClfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBmbG9hdCBkZWNpbWFsMTI4X3RvX2Zsb2F0KGRlY2ltYWwxMjggX19kKQorICB7IHJldHVybiAoZmxvYXQpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsMzIgX19kKQorICB7IHJldHVybiAoZmxvYXQpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsNjQgX19kKQorICB7IHJldHVybiAoZmxvYXQpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZmxvYXQgZGVjaW1hbF90b19mbG9hdChkZWNpbWFsMTI4IF9fZCkKKyAgeyByZXR1cm4gKGZsb2F0KV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGRvdWJsZSBkZWNpbWFsMzJfdG9fZG91YmxlKGRlY2ltYWwzMiBfX2QpCisgIHsgcmV0dXJuIChkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZG91YmxlIGRlY2ltYWw2NF90b19kb3VibGUoZGVjaW1hbDY0IF9fZCkKKyAgeyByZXR1cm4gKGRvdWJsZSlfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBkb3VibGUgZGVjaW1hbDEyOF90b19kb3VibGUoZGVjaW1hbDEyOCBfX2QpCisgIHsgcmV0dXJuIChkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZG91YmxlIGRlY2ltYWxfdG9fZG91YmxlKGRlY2ltYWwzMiBfX2QpCisgIHsgcmV0dXJuIChkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZG91YmxlIGRlY2ltYWxfdG9fZG91YmxlKGRlY2ltYWw2NCBfX2QpCisgIHsgcmV0dXJuIChkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgZG91YmxlIGRlY2ltYWxfdG9fZG91YmxlKGRlY2ltYWwxMjggX19kKQorICB7IHJldHVybiAoZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlIGRlY2ltYWwzMl90b19sb25nX2RvdWJsZShkZWNpbWFsMzIgX19kKQorICB7IHJldHVybiAobG9uZyBkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUgZGVjaW1hbDY0X3RvX2xvbmdfZG91YmxlKGRlY2ltYWw2NCBfX2QpCisgIHsgcmV0dXJuIChsb25nIGRvdWJsZSlfX2QuX19nZXR2YWwoKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZSBkZWNpbWFsMTI4X3RvX2xvbmdfZG91YmxlKGRlY2ltYWwxMjggX19kKQorICB7IHJldHVybiAobG9uZyBkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUgZGVjaW1hbF90b19sb25nX2RvdWJsZShkZWNpbWFsMzIgX19kKQorICB7IHJldHVybiAobG9uZyBkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUgZGVjaW1hbF90b19sb25nX2RvdWJsZShkZWNpbWFsNjQgX19kKQorICB7IHJldHVybiAobG9uZyBkb3VibGUpX19kLl9fZ2V0dmFsKCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUgZGVjaW1hbF90b19sb25nX2RvdWJsZShkZWNpbWFsMTI4IF9fZCkKKyAgeyByZXR1cm4gKGxvbmcgZG91YmxlKV9fZC5fX2dldHZhbCgpOyB9CisKKyAgLy8gSVNPL0lFQyBUUiAyNDczMyAgMy4yLjcgIFVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0b3JzLgorCisjZGVmaW5lIF9ERUZJTkVfREVDSU1BTF9VTkFSWV9PUChfT3AsIF9UcCkJXAorICBpbmxpbmUgX1RwIG9wZXJhdG9yIF9PcChfVHAgX19yaHMpCQlcCisgIHsJCQkJCQlcCisgICAgX1RwIF9fdG1wOwkJCQkJXAorICAgIF9fdG1wLl9fc2V0dmFsKF9PcCBfX3Jocy5fX2dldHZhbCgpKTsJXAorICAgIHJldHVybiBfX3RtcDsJCQkJXAorICB9CisKKyAgX0RFRklORV9ERUNJTUFMX1VOQVJZX09QKCssIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX1VOQVJZX09QKCssIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX1VOQVJZX09QKCssIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9VTkFSWV9PUCgtLCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9VTkFSWV9PUCgtLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9VTkFSWV9PUCgtLCBkZWNpbWFsMTI4KQorCisjdW5kZWYgX0RFRklORV9ERUNJTUFMX1VOQVJZX09QCisKKyAgLy8gSVNPL0lFQyBUUiAyNDczMyAgMy4yLjggIEJpbmFyeSBhcml0aG1ldGljIG9wZXJhdG9ycy4KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKF9PcCwgX1QxLCBfVDIsIF9UMykJXAorICBpbmxpbmUgX1QxIG9wZXJhdG9yIF9PcChfVDIgX19saHMsIF9UMyBfX3JocykJCQlcCisgIHsJCQkJCQkJCVwKKyAgICBfVDEgX19yZXR2YWw7CQkJCQkJXAorICAgIF9fcmV0dmFsLl9fc2V0dmFsKF9fbGhzLl9fZ2V0dmFsKCkgX09wIF9fcmhzLl9fZ2V0dmFsKCkpOwlcCisgICAgcmV0dXJuIF9fcmV0dmFsOwkJCQkJCVwKKyAgfQorCisjZGVmaW5lIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfQk9USChfT3AsIF9UMSwgX1QyLCBfVDMpCVwKKyAgaW5saW5lIF9UMSBvcGVyYXRvciBfT3AoX1QyIF9fbGhzLCBfVDMgX19yaHMpCQkJXAorICB7CQkJCQkJCQlcCisgICAgX1QxIF9fcmV0dmFsOwkJCQkJCVwKKyAgICBfX3JldHZhbC5fX3NldHZhbChfX2xocy5fX2dldHZhbCgpIF9PcCBfX3Jocy5fX2dldHZhbCgpKTsJXAorICAgIHJldHVybiBfX3JldHZhbDsJCQkJCQlcCisgIH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX0xIUyhfT3AsIF9UMSwgX1QyKQkJXAorICBpbmxpbmUgX1QxIG9wZXJhdG9yIF9PcChfVDEgX19saHMsIF9UMiBfX3JocykJCQlcCisgIHsJCQkJCQkJCVwKKyAgICBfVDEgX19yZXR2YWw7CQkJCQkJXAorICAgIF9fcmV0dmFsLl9fc2V0dmFsKF9fbGhzLl9fZ2V0dmFsKCkgX09wIF9fcmhzKTsJCVwKKyAgICByZXR1cm4gX19yZXR2YWw7CQkJCQkJXAorICB9CisKKyNkZWZpbmUgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9SSFMoX09wLCBfVDEsIF9UMikJCVwKKyAgaW5saW5lIF9UMSBvcGVyYXRvciBfT3AoX1QyIF9fbGhzLCBfVDEgX19yaHMpCQkJXAorICB7CQkJCQkJCQlcCisgICAgX1QxIF9fcmV0dmFsOwkJCQkJCVwKKyAgICBfX3JldHZhbC5fX3NldHZhbChfX2xocyBfT3AgX19yaHMuX19nZXR2YWwoKSk7CQlcCisgICAgcmV0dXJuIF9fcmV0dmFsOwkJCQkJCVwKKyAgfQorCisjZGVmaW5lIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoX09wLCBfVDEpCQlcCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfTEhTKF9PcCwgX1QxLCBpbnQpOwkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9MSFMoX09wLCBfVDEsIHVuc2lnbmVkIGludCk7CVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9MSFMoX09wLCBfVDEsIGxvbmcpOwkJXAorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX0xIUyhfT3AsIF9UMSwgdW5zaWduZWQgbG9uZyk7CVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9MSFMoX09wLCBfVDEsIGxvbmcgbG9uZyk7CQlcCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfTEhTKF9PcCwgX1QxLCB1bnNpZ25lZCBsb25nIGxvbmcpOwlcCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfUkhTKF9PcCwgX1QxLCBpbnQpOwkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9SSFMoX09wLCBfVDEsIHVuc2lnbmVkIGludCk7CVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9SSFMoX09wLCBfVDEsIGxvbmcpOwkJXAorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1JIUyhfT3AsIF9UMSwgdW5zaWduZWQgbG9uZyk7CVwKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9SSFMoX09wLCBfVDEsIGxvbmcgbG9uZyk7CQlcCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfUkhTKF9PcCwgX1QxLCB1bnNpZ25lZCBsb25nIGxvbmcpOwlcCisKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsMzIsIGRlY2ltYWwzMiwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKCssIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsNjQsIGRlY2ltYWwzMiwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgrLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDEyOCwgZGVjaW1hbDMyLCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygrLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKywgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCssIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKywgZGVjaW1hbDEyOCkKKworICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWwzMiwgZGVjaW1hbDMyLCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoLSwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWw2NCwgZGVjaW1hbDMyLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKC0sIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIsIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDEyOCwgZGVjaW1hbDY0LCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC0sIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygtLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLSwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgtLCBkZWNpbWFsMTI4KQorCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDMyLCBkZWNpbWFsMzIsIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgqLCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDY0LCBkZWNpbWFsMzIsIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsNjQsIGRlY2ltYWw2NCwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoKiwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwxMjgsIGRlY2ltYWwzMiwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsMTI4LCBkZWNpbWFsNjQsIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoKiwgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKCosIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygqLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKCosIGRlY2ltYWwxMjgpCisKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsMzIsIGRlY2ltYWwzMiwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfSU5UKC8sIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsNjQsIGRlY2ltYWwzMiwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWw2NCwgZGVjaW1hbDY0LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDY0LCBkZWNpbWFsNjQsIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVCgvLCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDEyOCwgZGVjaW1hbDMyLCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWwxMjgsIGRlY2ltYWw2NCwgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0RFQygvLCBkZWNpbWFsMTI4LCBkZWNpbWFsMTI4LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMoLywgZGVjaW1hbDEyOCwgZGVjaW1hbDEyOCwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX1dJVEhfREVDKC8sIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgsIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9JTlQoLywgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfV0lUSF9ERUMKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX0JPVEgKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQklOQVJZX09QX0xIUworI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9CSU5BUllfT1BfUkhTCisjdW5kZWYgX0RFRklORV9ERUNJTUFMX0JJTkFSWV9PUF9XSVRIX0lOVAorCisgIC8vIElTTy9JRUMgVFIgMjQ3MzMgIDMuMi45ICBDb21wYXJpc29uIG9wZXJhdG9ycy4KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9CT1RIKF9PcCwgX1QxLCBfVDIpCVwKKyAgaW5saW5lIGJvb2wgb3BlcmF0b3IgX09wKF9UMSBfX2xocywgX1QyIF9fcmhzKQlcCisgIHsgcmV0dXJuIF9fbGhzLl9fZ2V0dmFsKCkgX09wIF9fcmhzLl9fZ2V0dmFsKCk7IH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMoX09wLCBfVDEsIF9UMikJXAorICBpbmxpbmUgYm9vbCBvcGVyYXRvciBfT3AoX1QxIF9fbGhzLCBfVDIgX19yaHMpCVwKKyAgeyByZXR1cm4gX19saHMuX19nZXR2YWwoKSBfT3AgX19yaHM7IH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMoX09wLCBfVDEsIF9UMikJXAorICBpbmxpbmUgYm9vbCBvcGVyYXRvciBfT3AoX1QxIF9fbGhzLCBfVDIgX19yaHMpCVwKKyAgeyByZXR1cm4gX19saHMgX09wIF9fcmhzLl9fZ2V0dmFsKCk7IH0KKworI2RlZmluZSBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoX09wLCBfVHApCQkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9CT1RIKF9PcCwgX1RwLCBkZWNpbWFsMzIpCQlcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OX0JPVEgoX09wLCBfVHAsIGRlY2ltYWw2NCkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fQk9USChfT3AsIF9UcCwgZGVjaW1hbDEyOCkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fTEhTKF9PcCwgX1RwLCBpbnQpCQkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMoX09wLCBfVHAsIHVuc2lnbmVkIGludCkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMoX09wLCBfVHAsIGxvbmcpCQlcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OX0xIUyhfT3AsIF9UcCwgdW5zaWduZWQgbG9uZykJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMoX09wLCBfVHAsIGxvbmcgbG9uZykJCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fTEhTKF9PcCwgX1RwLCB1bnNpZ25lZCBsb25nIGxvbmcpCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fUkhTKF9PcCwgaW50LCBfVHApCQkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMoX09wLCB1bnNpZ25lZCBpbnQsIF9UcCkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMoX09wLCBsb25nLCBfVHApCQlcCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OX1JIUyhfT3AsIHVuc2lnbmVkIGxvbmcsIF9UcCkJXAorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMoX09wLCBsb25nIGxvbmcsIF9UcCkJCVwKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05fUkhTKF9PcCwgdW5zaWduZWQgbG9uZyBsb25nLCBfVHApCisKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKD09LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg9PSwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPT0sIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyghPSwgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoIT0sIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKCE9LCBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPCwgIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKDwsICBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg8LCAgZGVjaW1hbDEyOCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKDw9LCBkZWNpbWFsMzIpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg8PSwgZGVjaW1hbDY0KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPD0sIGRlY2ltYWwxMjgpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg+LCAgZGVjaW1hbDMyKQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPiwgIGRlY2ltYWw2NCkKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKD4sICBkZWNpbWFsMTI4KQorICBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMoPj0sIGRlY2ltYWwzMikKKyAgX0RFRklORV9ERUNJTUFMX0NPTVBBUklTT05TKD49LCBkZWNpbWFsNjQpCisgIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OUyg+PSwgZGVjaW1hbDEyOCkKKworI3VuZGVmIF9ERUZJTkVfREVDSU1BTF9DT01QQVJJU09OX0JPVEgKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9MSFMKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTl9SSFMKKyN1bmRlZiBfREVGSU5FX0RFQ0lNQUxfQ09NUEFSSVNPTlMKKyAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBkZWNpbWFsCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8qIF9HTElCQ1hYX0RFQ0lNQUxfSU1QTCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9kZXF1ZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVxdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc1ODlkNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZGVxdWUKQEAgLTAsMCArMSw3NiBAQAorLy8gPGRlcXVlPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvZGVxdWUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfREVRVUUKKyNkZWZpbmUgX0dMSUJDWFhfREVRVUUgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfY29uc3RydWN0Lmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2RlcXVlLmg+CisjaW5jbHVkZSA8Yml0cy9yYW5nZV9hY2Nlc3MuaD4KKyNpbmNsdWRlIDxiaXRzL2RlcXVlLnRjYz4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjIGluY2x1ZGUgPGRlYnVnL2RlcXVlPgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9QUk9GSUxFCisjIGluY2x1ZGUgPHByb2ZpbGUvZGVxdWU+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX0RFUVVFICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4Y2VwdGlvbiBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMGNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4Y2VwdGlvbgpAQCAtMCwwICsxLDE1NiBAQAorLy8gRXhjZXB0aW9uIEhhbmRsaW5nIHN1cHBvcnQgaGVhZGVyIGZvciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisvLworLy8gR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleGNlcHRpb24KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX19FWENFUFRJT05fXworI2RlZmluZSBfX0VYQ0VQVElPTl9fCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvYXRvbWljX2xvY2tmcmVlX2RlZmluZXMuaD4KKworZXh0ZXJuICJDKysiIHsKKworbmFtZXNwYWNlIHN0ZAoreworICAvKioKKyAgICogQGRlZmdyb3VwIGV4Y2VwdGlvbnMgRXhjZXB0aW9ucworICAgKiBAaW5ncm91cCBkaWFnbm9zdGljcworICAgKgorICAgKiBDbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIHJlcG9ydGluZyBlcnJvcnMgdmlhIGV4Y2VwdGlvbiBjbGFzc2VzLgorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogIEBicmllZiBCYXNlIGNsYXNzIGZvciBhbGwgbGlicmFyeSBleGNlcHRpb25zLgorICAgKgorICAgKiAgVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIGV4Y2VwdGlvbnMgdGhyb3duIGJ5IHRoZSBzdGFuZGFyZAorICAgKiAgbGlicmFyeSwgYW5kIGJ5IGNlcnRhaW4gbGFuZ3VhZ2UgZXhwcmVzc2lvbnMuICBZb3UgYXJlIGZyZWUgdG8gZGVyaXZlCisgICAqICB5b3VyIG93biAlZXhjZXB0aW9uIGNsYXNzZXMsIG9yIHVzZSBhIGRpZmZlcmVudCBoaWVyYXJjaHksIG9yIHRvCisgICAqICB0aHJvdyBub24tY2xhc3MgZGF0YSAoZS5nLiwgZnVuZGFtZW50YWwgdHlwZXMpLgorICAgKi8KKyAgY2xhc3MgZXhjZXB0aW9uCisgIHsKKyAgcHVibGljOgorICAgIGV4Y2VwdGlvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKyAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyAgICAvKiogUmV0dXJucyBhIEMtc3R5bGUgY2hhcmFjdGVyIHN0cmluZyBkZXNjcmliaW5nIHRoZSBnZW5lcmFsIGNhdXNlCisgICAgICogIG9mIHRoZSBjdXJyZW50IGVycm9yLiAgKi8KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisgIH07CisKKyAgLyoqIElmIGFuICVleGNlcHRpb24gaXMgdGhyb3duIHdoaWNoIGlzIG5vdCBsaXN0ZWQgaW4gYSBmdW5jdGlvbidzCisgICAqICAlZXhjZXB0aW9uIHNwZWNpZmljYXRpb24sIG9uZSBvZiB0aGVzZSBtYXkgYmUgdGhyb3duLiAgKi8KKyAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KKyAgeworICBwdWJsaWM6CisgICAgYmFkX2V4Y2VwdGlvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgIC8vIFRoaXMgZGVjbGFyYXRpb24gaXMgbm90IHVzZWxlc3M6CisgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTMuMC4yL2djY182Lmh0bWwjU0VDMTE4CisgICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKworICAgIC8vIFNlZSBjb21tZW50IGluIGVoX2V4Y2VwdGlvbi5jYy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisgIH07CisKKyAgLy8vIElmIHlvdSB3cml0ZSBhIHJlcGxhY2VtZW50ICV0ZXJtaW5hdGUgaGFuZGxlciwgaXQgbXVzdCBiZSBvZiB0aGlzIHR5cGUuCisgIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKKworICAvLy8gSWYgeW91IHdyaXRlIGEgcmVwbGFjZW1lbnQgJXVuZXhwZWN0ZWQgaGFuZGxlciwgaXQgbXVzdCBiZSBvZiB0aGlzIHR5cGUuCisgIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CisKKyAgLy8vIFRha2VzIGEgbmV3IGhhbmRsZXIgZnVuY3Rpb24gYXMgYW4gYXJndW1lbnQsIHJldHVybnMgdGhlIG9sZCBmdW5jdGlvbi4KKyAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworCisgIC8qKiBUaGUgcnVudGltZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiAlZXhjZXB0aW9uIGhhbmRsaW5nIG11c3QgYmUKKyAgICogIGFiYW5kb25lZCBmb3IgYW55IHJlYXNvbi4gIEl0IGNhbiBhbHNvIGJlIGNhbGxlZCBieSB0aGUgdXNlci4gICovCisgIHZvaWQgdGVybWluYXRlKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKworICAvLy8gVGFrZXMgYSBuZXcgaGFuZGxlciBmdW5jdGlvbiBhcyBhbiBhcmd1bWVudCwgcmV0dXJucyB0aGUgb2xkIGZ1bmN0aW9uLgorICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisKKyAgLyoqIFRoZSBydW50aW1lIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIGFuICVleGNlcHRpb24gaXMgdGhyb3duIHdoaWNoCisgICAqICB2aW9sYXRlcyB0aGUgZnVuY3Rpb24ncyAlZXhjZXB0aW9uIHNwZWNpZmljYXRpb24uICAqLworICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CisKKyAgLyoqIFsxOC42LjRdLzE6ICAnUmV0dXJucyB0cnVlIGFmdGVyIGNvbXBsZXRpbmcgZXZhbHVhdGlvbiBvZiBhCisgICAqICB0aHJvdy1leHByZXNzaW9uIHVudGlsIGVpdGhlciBjb21wbGV0aW5nIGluaXRpYWxpemF0aW9uIG9mIHRoZQorICAgKiAgZXhjZXB0aW9uLWRlY2xhcmF0aW9uIGluIHRoZSBtYXRjaGluZyBoYW5kbGVyIG9yIGVudGVyaW5nIEBjIHVuZXhwZWN0ZWQoKQorICAgKiAgZHVlIHRvIHRoZSB0aHJvdzsgb3IgYWZ0ZXIgZW50ZXJpbmcgQGMgdGVybWluYXRlKCkgZm9yIGFueSByZWFzb24KKyAgICogIG90aGVyIHRoYW4gYW4gZXhwbGljaXQgY2FsbCB0byBAYyB0ZXJtaW5hdGUoKS4gIFtOb3RlOiBUaGlzIGluY2x1ZGVzCisgICAqICBzdGFjayB1bndpbmRpbmcgWzE1LjJdLiAgZW5kIG5vdGVdJworICAgKgorICAgKiAgMjogJ1doZW4gQGMgdW5jYXVnaHRfZXhjZXB0aW9uKCkgaXMgdHJ1ZSwgdGhyb3dpbmcgYW4KKyAgICogICVleGNlcHRpb24gY2FuIHJlc3VsdCBpbiBhIGNhbGwgb2YgQGMgdGVybWluYXRlKCkKKyAgICogICgxNS41LjEpLicKKyAgICovCisgIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOworCisgIC8vIEB9IGdyb3VwIGV4Y2VwdGlvbnMKK30gLy8gbmFtZXNwYWNlIHN0ZAorCituYW1lc3BhY2UgX19nbnVfY3h4Cit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiAgQGJyaWVmIEEgcmVwbGFjZW1lbnQgZm9yIHRoZSBzdGFuZGFyZCB0ZXJtaW5hdGVfaGFuZGxlciB3aGljaAorICAgKiAgcHJpbnRzIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlcm1pbmF0aW5nIGV4Y2VwdGlvbiAoaWYgYW55KQorICAgKiAgb24gc3RkZXJyLgorICAgKgorICAgKiAgQGluZ3JvdXAgZXhjZXB0aW9ucworICAgKgorICAgKiAgQ2FsbAorICAgKiAgIEBjb2RlCisgICAqICAgICBzdGQ6OnNldF90ZXJtaW5hdGUoX19nbnVfY3h4OjpfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIpCisgICAqICAgQGVuZGNvZGUKKyAgICogIHRvIHVzZS4gIEZvciBtb3JlIGluZm8sIHNlZQorICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQwMmNoMDZzMDIuaHRtbAorICAgKgorICAgKiAgSW4gMy40IGFuZCBsYXRlciwgdGhpcyBpcyBvbiBieSBkZWZhdWx0LgorICAgKi8KKyAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIoKTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCit9IC8vIGV4dGVybiAiQysrIgorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorCisjaWYgKF9fY3BsdXNwbHVzID49IDIwMTEwM0wpICYmIChBVE9NSUNfSU5UX0xPQ0tfRlJFRSA+IDEpCisjaW5jbHVkZSA8Yml0cy9leGNlcHRpb25fcHRyLmg+CisjaW5jbHVkZSA8Yml0cy9uZXN0ZWRfZXhjZXB0aW9uLmg+CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9hbGdvcml0aG0gYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9hbGdvcml0aG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjMzNiNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2FsZ29yaXRobQpAQCAtMCwwICsxLDYwMyBAQAorLy8gQWxnb3JpdGhtIGV4dGVuc2lvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBleHQvYWxnb3JpdGhtCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkgKHBvc3NpYmx5CisgKiAgY29udGFpbmluZyBleHRlbnNpb25zIGZyb20gdGhlIEhQL1NHSSBTVEwgc3Vic2V0KS4KKyAqLworCisjaWZuZGVmIF9FWFRfQUxHT1JJVEhNCisjZGVmaW5lIF9FWFRfQUxHT1JJVEhNIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdXNpbmcgc3RkOjpwdHJkaWZmX3Q7CisgIHVzaW5nIHN0ZDo6bWluOworICB1c2luZyBzdGQ6OnBhaXI7CisgIHVzaW5nIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnOworICB1c2luZyBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnOworICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKKworICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIGNvcHlfbiAobm90IHBhcnQgb2YgdGhlIEMrKyBzdGFuZGFyZCkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBwYWlyPF9JbnB1dEl0ZXJhdG9yLCBfT3V0cHV0SXRlcmF0b3I+CisgICAgX19jb3B5X24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19jb3VudCwKKwkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpCisJeworCSAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJICArK19fcmVzdWx0OworCX0KKyAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXJhdG9yLCBfT3V0cHV0SXRlcmF0b3I+KF9fZmlyc3QsIF9fcmVzdWx0KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgaW5saW5lIHBhaXI8X1JBSXRlcmF0b3IsIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBfX2NvcHlfbihfUkFJdGVyYXRvciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAorCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorCSAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgX1JBSXRlcmF0b3IgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CisgICAgICByZXR1cm4gcGFpcjxfUkFJdGVyYXRvciwgX091dHB1dEl0ZXJhdG9yPihfX2xhc3QsIHN0ZDo6Y29weShfX2ZpcnN0LAorCQkJCQkJCQkgIF9fbGFzdCwKKwkJCQkJCQkJICBfX3Jlc3VsdCkpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBDb3BpZXMgdGhlIHJhbmdlIFtmaXJzdCxmaXJzdCtjb3VudCkgaW50byBbcmVzdWx0LHJlc3VsdCtjb3VudCkuCisgICAqICBAcGFyYW0gIF9fZmlyc3QgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2NvdW50ICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGNvcHkuCisgICAqICBAcGFyYW0gIF9fcmVzdWx0IEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICBBIHN0ZDo6cGFpciBjb21wb3NlZCBvZiBmaXJzdCtjb3VudCBhbmQgcmVzdWx0K2NvdW50LgorICAgKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgVGhpcyBpbmxpbmUgZnVuY3Rpb24gd2lsbCBib2lsIGRvd24gdG8gYSBjYWxsIHRvIEBjIG1lbW1vdmUgd2hlbmV2ZXIKKyAgICogIHBvc3NpYmxlLiAgRmFpbGluZyB0aGF0LCBpZiByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBhcmUgcGFzc2VkLCB0aGVuIHRoZQorICAgKiAgbG9vcCBjb3VudCB3aWxsIGJlIGtub3duIChhbmQgdGhlcmVmb3JlIGEgY2FuZGlkYXRlIGZvciBjb21waWxlcgorICAgKiAgb3B0aW1pemF0aW9ucyBzdWNoIGFzIHVucm9sbGluZykuCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBwYWlyPF9JbnB1dEl0ZXJhdG9yLCBfT3V0cHV0SXRlcmF0b3I+CisgICAgY29weV9uKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3IsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorCisgICAgICByZXR1cm4gX19nbnVfY3h4OjpfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKKwkJCQkgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjI+CisgICAgaW50CisgICAgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwKKwkJCQkgICBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKKwkJCQkgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsCisJCQkJICAgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKKwl7CisJICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQorCSAgICByZXR1cm4gLTE7CisJICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQorCSAgICByZXR1cm4gMTsKKwkgICsrX19maXJzdDE7CisJICArK19fZmlyc3QyOworCX0KKyAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQorCXJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOworICAgICAgZWxzZQorCXJldHVybiAtMTsKKyAgICB9CisKKyAgaW5saW5lIGludAorICBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQorICB7CisgICAgY29uc3QgcHRyZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKKyAgICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOworICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IF9fYnVpbHRpbl9tZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLAorCQkJCQkgIG1pbihfX2xlbjEsIF9fbGVuMikpOworICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQKKwkJCSA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsKKyAgfQorCisgIGlubGluZSBpbnQKKyAgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAorCQkJCSBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKKyAgeworI2lmIENIQVJfTUFYID09IFNDSEFSX01BWAorICAgIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCisJCQkJCSAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKKwkJCQkJICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKKwkJCQkJICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKKyNlbHNlCisgICAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgoY29uc3QgdW5zaWduZWQgY2hhciopIF9fZmlyc3QxLAorCQkJCQkgIChjb25zdCB1bnNpZ25lZCBjaGFyKikgX19sYXN0MSwKKwkJCQkJICAoY29uc3QgdW5zaWduZWQgY2hhciopIF9fZmlyc3QyLAorCQkJCQkgIChjb25zdCB1bnNpZ25lZCBjaGFyKikgX19sYXN0Mik7CisjZW5kaWYKKyAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEBjIG1lbWNtcCBvbiBzdGVyb2lkcy4KKyAgICogIEBwYXJhbSAgX19maXJzdDEgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHBhcmFtICBfX2xhc3QxICAgQW4gaW5wdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gIF9fZmlyc3QyICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19sYXN0MiAgIEFuIGlucHV0IGl0ZXJhdG9yLgorICAgKiAgQHJldHVybiAgIEFuIGludCwgYXMgd2l0aCBAYyBtZW1jbXAuCisgICAqCisgICAqICBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgbGVzcyB0aGFuIHplcm8gaWYgdGhlIGZpcnN0IHJhbmdlIGlzCisgICAqICA8ZW0+bGV4aWdyYXBoaWNhbGx5IGxlc3MgdGhhbjwvZW0+IHRoZSBzZWNvbmQsIGdyZWF0ZXIgdGhhbiB6ZXJvCisgICAqICBpZiB0aGUgc2Vjb25kIHJhbmdlIGlzIDxlbT5sZXhpZ3JhcGhpY2FsbHkgbGVzcyB0aGFuPC9lbT4gdGhlCisgICAqICBmaXJzdCwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICBpbnQKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwKKwkJCQkgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCisJCQkJIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkJCQkgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IxPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9MZXNzVGhhbkNvbXBhcmFibGVDb25jZXB0PAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKKworICAgICAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsCisJCQkJCSAgICBfX2xhc3QyKTsKKyAgICB9CisKKyAgLy8gY291bnQgYW5kIGNvdW50X2lmOiB0aGlzIHZlcnNpb24sIHdob3NlIHJldHVybiB0eXBlIGlzIHZvaWQsIHdhcyBwcmVzZW50CisgIC8vIGluIHRoZSBIUCBTVEwsIGFuZCBpcyByZXRhaW5lZCBhcyBhbiBleHRlbnNpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9TaXplPgorICAgIHZvaWQKKyAgICBjb3VudChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICBjb25zdCBfVHAmIF9fdmFsdWUsCisJICBfU2l6ZSYgX19uKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRXF1YWxpdHlDb21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSA+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbGl0eUNvbXBhcmFibGVDb25jZXB0PF9UcD4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCWlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQorCSAgKytfX247CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfU2l6ZT4KKyAgICB2b2lkCisgICAgY291bnRfaWYoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCisJICAgICBfU2l6ZSYgX19uKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfVW5hcnlQcmVkaWNhdGVDb25jZXB0PF9QcmVkaWNhdGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlpZiAoX19wcmVkKCpfX2ZpcnN0KSkKKwkgICsrX19uOworICAgIH0KKworICAvLyByYW5kb21fc2FtcGxlIGFuZCByYW5kb21fc2FtcGxlX24gKGV4dGVuc2lvbnMsIG5vdCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCkuCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24pCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvciwKKwkJdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworCisgICAgICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOworCisgICAgICB3aGlsZSAoX19tID4gMCkKKwl7CisJICBpZiAoKHN0ZDo6cmFuZCgpICUgX19yZW1haW5pbmcpIDwgX19tKQorCSAgICB7CisJICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CisJICAgICAgKytfX291dDsKKwkgICAgICAtLV9fbTsKKwkgICAgfQorCSAgLS1fX3JlbWFpbmluZzsKKwkgICsrX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gX19vdXQ7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24sCisJCSAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yLAorCQl0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeUZ1bmN0aW9uQ29uY2VwdDwKKwkJX1JhbmRvbU51bWJlckdlbmVyYXRvciwgX0Rpc3RhbmNlLCBfRGlzdGFuY2U+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9EaXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7CisKKyAgICAgIHdoaWxlIChfX20gPiAwKQorCXsKKwkgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKQorCSAgICB7CisJICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CisJICAgICAgKytfX291dDsKKwkgICAgICAtLV9fbTsKKwkgICAgfQorCSAgLS1fX3JlbWFpbmluZzsKKwkgICsrX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gX19vdXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19vdXQsCisJCSAgICBjb25zdCBfRGlzdGFuY2UgX19uKQorICAgIHsKKyAgICAgIF9EaXN0YW5jZSBfX20gPSAwOworICAgICAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKKyAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQorCV9fb3V0W19fbV0gPSAqX19maXJzdDsKKworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCXsKKwkgICsrX190OworCSAgX0Rpc3RhbmNlIF9fTSA9IHN0ZDo6cmFuZCgpICUgKF9fdCk7CisJICBpZiAoX19NIDwgX19uKQorCSAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CisJICArK19fZmlyc3Q7CisJfQorICAgICAgcmV0dXJuIF9fb3V0ICsgX19tOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IKKyAgICBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fb3V0LAorCQkgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kLAorCQkgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeUZ1bmN0aW9uQ29uY2VwdDwKKwkgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciwgX0Rpc3RhbmNlLCBfRGlzdGFuY2U+KQorCisgICAgICBfRGlzdGFuY2UgX19tID0gMDsKKyAgICAgIF9EaXN0YW5jZSBfX3QgPSBfX247CisgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKKwlfX291dFtfX21dID0gKl9fZmlyc3Q7CisKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwl7CisJICArK19fdDsKKwkgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsKKwkgIGlmIChfX00gPCBfX24pCisJICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKKwkgICsrX19maXJzdDsKKwl9CisgICAgICByZXR1cm4gX19vdXQgKyBfX207CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCisgICAgcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fb3V0X2ZpcnN0LAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX291dF9sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX291dF9maXJzdCwgX19vdXRfbGFzdCk7CisKKyAgICAgIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAorCQkJICAgICBfX291dF9maXJzdCwgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgorICAgIHJhbmRvbV9zYW1wbGUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX291dF9maXJzdCwKKwkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19vdXRfbGFzdCwKKwkJICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9NdXRhYmxlX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0KTsKKworICAgICAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCisJCQkgICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsCisJCQkgICAgIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB1c2luZyBzdGQ6OmlzX2hlYXA7CisjZWxzZQorICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfUmFuZG9tQWNjZXNzSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTGVzc1RoYW5Db21wYXJhYmxlQ29uY2VwdDwKKwkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CisKKyAgICAgIHJldHVybiBzdGQ6Ol9faXNfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgaW5saW5lIGJvb2wKKyAgICBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAorCSAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9SYW5kb21BY2Nlc3NJdGVyYXRvckNvbmNlcHQ8CisJCQkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+KQorICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0PF9TdHJpY3RXZWFrT3JkZXJpbmcsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgcmV0dXJuIHN0ZDo6X19pc19oZWFwKF9fZmlyc3QsIF9fY29tcCwgX19sYXN0IC0gX19maXJzdCk7CisgICAgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHVzaW5nIHN0ZDo6aXNfc29ydGVkOworI2Vsc2UKKyAgLy8gaXNfc29ydGVkLCBhIHByZWRpY2F0ZWQgdGVzdGluZyB3aGV0aGVyIGEgcmFuZ2UgaXMgc29ydGVkIGluCisgIC8vIG5vbmRlc2NlbmRpbmcgb3JkZXIuICBUaGlzIGlzIGFuIGV4dGVuc2lvbiwgbm90IHBhcnQgb2YgdGhlIEMrKworICAvLyBzdGFuZGFyZC4KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CisgICAgYm9vbAorICAgIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0ZvcndhcmRJdGVyYXRvckNvbmNlcHQ8X0ZvcndhcmRJdGVyYXRvcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8CisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiB0cnVlOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkKKwlpZiAoKl9fbmV4dCA8ICpfX2ZpcnN0KQorCSAgcmV0dXJuIGZhbHNlOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KKyAgICBib29sCisgICAgaXNfc29ydGVkKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDxfRm9yd2FyZEl0ZXJhdG9yPikKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmluYXJ5UHJlZGljYXRlQ29uY2VwdDxfU3RyaWN0V2Vha09yZGVyaW5nLAorCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKKworICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCXJldHVybiB0cnVlOworCisgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CisgICAgICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkKKwlpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKKwkgIHJldHVybiBmYWxzZTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZiAgLy8gQysrMTEKKworICAvKioKKyAgICogIEBicmllZiBGaW5kIHRoZSBtZWRpYW4gb2YgdGhyZWUgdmFsdWVzLgorICAgKiAgQHBhcmFtICBfX2EgIEEgdmFsdWUuCisgICAqICBAcGFyYW0gIF9fYiAgQSB2YWx1ZS4KKyAgICogIEBwYXJhbSAgX19jICBBIHZhbHVlLgorICAgKiAgQHJldHVybiBPbmUgb2YgQHAgYSwgQHAgYiBvciBAcCBjLgorICAgKgorICAgKiAgSWYgQGMge2wsbSxufSBpcyBzb21lIGNvbnZvbHV0aW9uIG9mIEBwIHthLGIsY30gc3VjaCB0aGF0IEBjIGw8PW08PW4KKyAgICogIHRoZW4gdGhlIHZhbHVlIHJldHVybmVkIHdpbGwgYmUgQGMgbS4KKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0IF9UcCYKKyAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0xlc3NUaGFuQ29tcGFyYWJsZUNvbmNlcHQ8X1RwPikKKyAgICAgIGlmIChfX2EgPCBfX2IpCisJaWYgKF9fYiA8IF9fYykKKwkgIHJldHVybiBfX2I7CisJZWxzZSBpZiAoX19hIDwgX19jKQorCSAgcmV0dXJuIF9fYzsKKwllbHNlCisJICByZXR1cm4gX19hOworICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQorCXJldHVybiBfX2E7CisgICAgICBlbHNlIGlmIChfX2IgPCBfX2MpCisJcmV0dXJuIF9fYzsKKyAgICAgIGVsc2UKKwlyZXR1cm4gX19iOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBGaW5kIHRoZSBtZWRpYW4gb2YgdGhyZWUgdmFsdWVzIHVzaW5nIGEgcHJlZGljYXRlIGZvciBjb21wYXJpc29uLgorICAgKiAgQHBhcmFtICBfX2EgICAgIEEgdmFsdWUuCisgICAqICBAcGFyYW0gIF9fYiAgICAgQSB2YWx1ZS4KKyAgICogIEBwYXJhbSAgX19jICAgICBBIHZhbHVlLgorICAgKiAgQHBhcmFtICBfX2NvbXAgIEEgYmluYXJ5IHByZWRpY2F0ZS4KKyAgICogIEByZXR1cm4gT25lIG9mIEBwIGEsIEBwIGIgb3IgQHAgYy4KKyAgICoKKyAgICogIElmIEBjIHtsLG0sbn0gaXMgc29tZSBjb252b2x1dGlvbiBvZiBAcCB7YSxiLGN9IHN1Y2ggdGhhdCBAcCBjb21wKGwsbSkKKyAgICogIGFuZCBAcCBjb21wKG0sbikgYXJlIGJvdGggdHJ1ZSB0aGVuIHRoZSB2YWx1ZSByZXR1cm5lZCB3aWxsIGJlIEBjIG0uCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgY29uc3QgX1RwJgorICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9CaW5hcnlGdW5jdGlvbkNvbmNlcHQ8X0NvbXBhcmUsIGJvb2wsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCwgX1RwPikKKyAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQorCWlmIChfX2NvbXAoX19iLCBfX2MpKQorCSAgcmV0dXJuIF9fYjsKKwllbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQorCSAgcmV0dXJuIF9fYzsKKwllbHNlCisJICByZXR1cm4gX19hOworICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKKwlyZXR1cm4gX19hOworICAgICAgZWxzZSBpZiAoX19jb21wKF9fYiwgX19jKSkKKwlyZXR1cm4gX19jOworICAgICAgZWxzZQorCXJldHVybiBfX2I7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfRVhUX0FMR09SSVRITSAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvYWxsb2NfdHJhaXRzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9hbGxvY190cmFpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzM0NzNhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvYWxsb2NfdHJhaXRzLmgKQEAgLTAsMCArMSwyNDIgQEAKKy8vIEFsbG9jYXRvciB0cmFpdHMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9hbGxvY190cmFpdHMuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0VYVF9BTExPQ19UUkFJVFNfSAorI2RlZmluZSBfRVhUX0FMTE9DX1RSQUlUU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL21vdmUuaD4KKyMgaW5jbHVkZSA8Yml0cy9hbGxvY190cmFpdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+ICAvLyBmb3IgX19hbGxvY19zd2FwCisjZW5kaWYKKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9fYWxsb2NhdG9yX2Fsd2F5c19jb21wYXJlc19lcXVhbAorICAgIHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgY29uc3QgYm9vbCBfX2FsbG9jYXRvcl9hbHdheXNfY29tcGFyZXNfZXF1YWw8X0FsbG9jPjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FsbG9jYXRvcl9hbHdheXNfY29tcGFyZXNfZXF1YWw8c3RkOjphbGxvY2F0b3I8X1RwPj4KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3QgYm9vbCBfX2FsbG9jYXRvcl9hbHdheXNfY29tcGFyZXNfZXF1YWw8c3RkOjphbGxvY2F0b3I8X1RwPj46OnZhbHVlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4gc3RydWN0IGFycmF5X2FsbG9jYXRvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BcnJheT4KKyAgICBzdHJ1Y3QgX19hbGxvY2F0b3JfYWx3YXlzX2NvbXBhcmVzX2VxdWFsPGFycmF5X2FsbG9jYXRvcjxfVHAsIF9BcnJheT4+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJyYXk+CisgICAgY29uc3QgYm9vbAorICAgIF9fYWxsb2NhdG9yX2Fsd2F5c19jb21wYXJlc19lcXVhbDxhcnJheV9hbGxvY2F0b3I8X1RwLCBfQXJyYXk+Pjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBiaXRtYXBfYWxsb2NhdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hbGxvY2F0b3JfYWx3YXlzX2NvbXBhcmVzX2VxdWFsPGJpdG1hcF9hbGxvY2F0b3I8X1RwPj4KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3QgYm9vbCBfX2FsbG9jYXRvcl9hbHdheXNfY29tcGFyZXNfZXF1YWw8Yml0bWFwX2FsbG9jYXRvcjxfVHA+Pjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBtYWxsb2NfYWxsb2NhdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hbGxvY2F0b3JfYWx3YXlzX2NvbXBhcmVzX2VxdWFsPG1hbGxvY19hbGxvY2F0b3I8X1RwPj4KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3QgYm9vbCBfX2FsbG9jYXRvcl9hbHdheXNfY29tcGFyZXNfZXF1YWw8bWFsbG9jX2FsbG9jYXRvcjxfVHA+Pjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBtdF9hbGxvY2F0b3I7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FsbG9jYXRvcl9hbHdheXNfY29tcGFyZXNfZXF1YWw8bXRfYWxsb2NhdG9yPF9UcD4+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0IGJvb2wgX19hbGxvY2F0b3JfYWx3YXlzX2NvbXBhcmVzX2VxdWFsPG10X2FsbG9jYXRvcjxfVHA+Pjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBuZXdfYWxsb2NhdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hbGxvY2F0b3JfYWx3YXlzX2NvbXBhcmVzX2VxdWFsPG5ld19hbGxvY2F0b3I8X1RwPj4KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3QgYm9vbCBfX2FsbG9jYXRvcl9hbHdheXNfY29tcGFyZXNfZXF1YWw8bmV3X2FsbG9jYXRvcjxfVHA+Pjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBwb29sX2FsbG9jYXRvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWxsb2NhdG9yX2Fsd2F5c19jb21wYXJlc19lcXVhbDxwb29sX2FsbG9jYXRvcjxfVHA+PgorICAgIHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjb25zdCBib29sIF9fYWxsb2NhdG9yX2Fsd2F5c19jb21wYXJlc19lcXVhbDxwb29sX2FsbG9jYXRvcjxfVHA+Pjo6dmFsdWU7CisjZW5kaWYKKworLyoqCisgKiBAYnJpZWYgIFVuaWZvcm0gaW50ZXJmYWNlIHRvIEMrKzk4IGFuZCBDKysweCBhbGxvY2F0b3JzLgorICogQGluZ3JvdXAgYWxsb2NhdG9ycworKi8KK3RlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgc3RydWN0IF9fYWxsb2NfdHJhaXRzCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICA6IHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+CisjZW5kaWYKKyAgeworICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICB0eXBlZGVmIHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+ICAgICAgICAgICBfQmFzZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2VfdHlwZTo6dmFsdWVfdHlwZSAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZV90eXBlOjpwb2ludGVyICAgICAgICAgICAgcG9pbnRlcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlX3R5cGU6OmNvbnN0X3BvaW50ZXIgICAgICBjb25zdF9wb2ludGVyOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2VfdHlwZTo6c2l6ZV90eXBlICAgICAgICAgIHNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgLy8gQysrMHggYWxsb2NhdG9ycyBkbyBub3QgZGVmaW5lIHJlZmVyZW5jZSBvciBjb25zdF9yZWZlcmVuY2UKKyAgICB0eXBlZGVmIHZhbHVlX3R5cGUmICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgIHVzaW5nIF9CYXNlX3R5cGU6OmFsbG9jYXRlOworICAgIHVzaW5nIF9CYXNlX3R5cGU6OmRlYWxsb2NhdGU7CisgICAgdXNpbmcgX0Jhc2VfdHlwZTo6Y29uc3RydWN0OworICAgIHVzaW5nIF9CYXNlX3R5cGU6OmRlc3Ryb3k7CisgICAgdXNpbmcgX0Jhc2VfdHlwZTo6bWF4X3NpemU7CisKKyAgcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHRyPgorICAgICAgc3RydWN0IF9faXNfY3VzdG9tX3BvaW50ZXIKKyAgICAgIDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxib29sLCBzdGQ6OmlzX3NhbWU8cG9pbnRlciwgX1B0cj46OnZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXN0ZDo6aXNfcG9pbnRlcjxfUHRyPjo6dmFsdWU+CisgICAgICB7IH07CisKKyAgcHVibGljOgorICAgIC8vIG92ZXJsb2FkIGNvbnN0cnVjdCBmb3Igbm9uLXN0YW5kYXJkIHBvaW50ZXIgdHlwZXMKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHRyLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX2lzX2N1c3RvbV9wb2ludGVyPF9QdHI+Ojp2YWx1ZT46OnR5cGUKKyAgICAgIGNvbnN0cnVjdChfQWxsb2MmIF9fYSwgX1B0ciBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgeworCV9CYXNlX3R5cGU6OmNvbnN0cnVjdChfX2EsIHN0ZDo6YWRkcmVzc29mKCpfX3ApLAorCQkJICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICAgIH0KKworICAgIC8vIG92ZXJsb2FkIGRlc3Ryb3kgZm9yIG5vbi1zdGFuZGFyZCBwb2ludGVyIHR5cGVzCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0cj4KKyAgICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX2lzX2N1c3RvbV9wb2ludGVyPF9QdHI+Ojp2YWx1ZT46OnR5cGUKKyAgICAgIGRlc3Ryb3koX0FsbG9jJiBfX2EsIF9QdHIgX19wKQorICAgICAgeyBfQmFzZV90eXBlOjpkZXN0cm95KF9fYSwgc3RkOjphZGRyZXNzb2YoKl9fcCkpOyB9CisKKyAgICBzdGF0aWMgX0FsbG9jIF9TX3NlbGVjdF9vbl9jb3B5KGNvbnN0IF9BbGxvYyYgX19hKQorICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OnNlbGVjdF9vbl9jb250YWluZXJfY29weV9jb25zdHJ1Y3Rpb24oX19hKTsgfQorCisgICAgc3RhdGljIHZvaWQgX1Nfb25fc3dhcChfQWxsb2MmIF9fYSwgX0FsbG9jJiBfX2IpCisgICAgeyBzdGQ6Ol9fYWxsb2Nfb25fc3dhcChfX2EsIF9fYik7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfU19wcm9wYWdhdGVfb25fY29weV9hc3NpZ24oKQorICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OnByb3BhZ2F0ZV9vbl9jb250YWluZXJfY29weV9hc3NpZ25tZW50Ojp2YWx1ZTsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9TX3Byb3BhZ2F0ZV9vbl9tb3ZlX2Fzc2lnbigpCisgICAgeyByZXR1cm4gX0Jhc2VfdHlwZTo6cHJvcGFnYXRlX29uX2NvbnRhaW5lcl9tb3ZlX2Fzc2lnbm1lbnQ6OnZhbHVlOyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX1NfcHJvcGFnYXRlX29uX3N3YXAoKQorICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OnByb3BhZ2F0ZV9vbl9jb250YWluZXJfc3dhcDo6dmFsdWU7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfU19hbHdheXNfZXF1YWwoKQorICAgIHsgcmV0dXJuIF9fYWxsb2NhdG9yX2Fsd2F5c19jb21wYXJlc19lcXVhbDxfQWxsb2M+Ojp2YWx1ZTsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9TX25vdGhyb3dfbW92ZSgpCisgICAgeyByZXR1cm4gX1NfcHJvcGFnYXRlX29uX21vdmVfYXNzaWduKCkgfHwgX1NfYWx3YXlzX2VxdWFsKCk7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfU19ub3Rocm93X3N3YXAoKQorICAgIHsKKyAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAgIHJldHVybiAhX1NfcHJvcGFnYXRlX29uX3N3YXAoKQorICAgICAgIAl8fCBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxfQWxsb2MmPigpLCBzdGQ6OmRlY2x2YWw8X0FsbG9jJj4oKSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIHN0cnVjdCByZWJpbmQKKyAgICAgIHsgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZV90eXBlOjp0ZW1wbGF0ZSByZWJpbmRfYWxsb2M8X1RwPiBvdGhlcjsgfTsKKyNlbHNlCisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciAgICAgICAgICAgICAgICBwb2ludGVyOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyICAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICBzdGF0aWMgcG9pbnRlcgorICAgIGFsbG9jYXRlKF9BbGxvYyYgX19hLCBzaXplX3R5cGUgX19uKQorICAgIHsgcmV0dXJuIF9fYS5hbGxvY2F0ZShfX24pOyB9CisKKyAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9BbGxvYyYgX19hLCBwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKKyAgICB7IF9fYS5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0KF9BbGxvYyYgX19hLCBwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX2FyZykKKyAgICAgIHsgX19hLmNvbnN0cnVjdChfX3AsIF9fYXJnKTsgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShfQWxsb2MmIF9fYSwgcG9pbnRlciBfX3ApCisgICAgeyBfX2EuZGVzdHJveShfX3ApOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90eXBlIG1heF9zaXplKGNvbnN0IF9BbGxvYyYgX19hKQorICAgIHsgcmV0dXJuIF9fYS5tYXhfc2l6ZSgpOyB9CisKKyAgICBzdGF0aWMgY29uc3QgX0FsbG9jJiBfU19zZWxlY3Rfb25fY29weShjb25zdCBfQWxsb2MmIF9fYSkgeyByZXR1cm4gX19hOyB9CisKKyAgICBzdGF0aWMgdm9pZCBfU19vbl9zd2FwKF9BbGxvYyYgX19hLCBfQWxsb2MmIF9fYikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzEuIFN3YXBwaW5nIGNvbnRhaW5lcnMgd2l0aCB1bmVxdWFsIGFsbG9jYXRvcnMuCisgICAgICBzdGQ6Ol9fYWxsb2Nfc3dhcDxfQWxsb2M+OjpfU19kb19pdChfX2EsIF9fYik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgc3RydWN0IHJlYmluZAorICAgICAgeyB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIG90aGVyOyB9OworI2VuZGlmCisgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvYXJyYXlfYWxsb2NhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9hcnJheV9hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWE2YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvYXJyYXlfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8vIGFycmF5IGFsbG9jYXRvciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L2FycmF5X2FsbG9jYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfQVJSQVlfQUxMT0NBVE9SX0gKKyNkZWZpbmUgX0FSUkFZX0FMTE9DQVRPUl9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDx0cjEvYXJyYXk+CisjaW5jbHVkZSA8Yml0cy9tb3ZlLmg+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2VuZGlmCisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworIHVzaW5nIHN0ZDo6c2l6ZV90OworIHVzaW5nIHN0ZDo6cHRyZGlmZl90OworCisgIC8vLyBCYXNlIGNsYXNzLgorIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBhcnJheV9hbGxvY2F0b3JfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNpemVfdCAgICAgCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAqICAgICAgIAlwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIAljb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIAlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYJY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfVHAgICAgICAgIAl2YWx1ZV90eXBlOworCisgICAgICBwb2ludGVyCisgICAgICBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKF9feCk7IH0KKworICAgICAgY29uc3RfcG9pbnRlcgorICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3gpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGUocG9pbnRlciwgc2l6ZV90eXBlKQorICAgICAgeyAKKwkvLyBEb2VzIG5vdGhpbmcuCisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdCBfR0xJQkNYWF9VU0VfTk9FWENFUFQgCisgICAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgY29uc3RydWN0KF9VcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKKwl7IDo6bmV3KCh2b2lkICopX19wKSBfVXAoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHZvaWQgCisgICAgICAgIGRlc3Ryb3koX1VwKiBfX3ApIHsgX19wLT5+X1VwKCk7IH0KKyNlbHNlCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MDIuIHdyb25nIG5ldyBleHByZXNzaW9uIGluIFtzb21lX10gYWxsb2NhdG9yOjpjb25zdHJ1Y3QKKyAgICAgIHZvaWQgCisgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIAorICAgICAgeyA6Om5ldygodm9pZCAqKV9fcCkgdmFsdWVfdHlwZShfX3ZhbCk7IH0KKworICAgICAgdm9pZCAKKyAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KKyNlbmRpZgorICAgIH07ICAKKworICAvKioKKyAgICogIEBicmllZiAgQW4gYWxsb2NhdG9yIHRoYXQgdXNlcyBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkuCisgICAqICBUaGlzIG1lbW9yeSBjYW4gYmUgZXh0ZXJuYWxseSwgZ2xvYmFsbHksIG9yIG90aGVyd2lzZSBhbGxvY2F0ZWQuCisgICAqICBAaW5ncm91cCBhbGxvY2F0b3JzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BcnJheSA9IHN0ZDo6dHIxOjphcnJheTxfVHAsIDE+ID4KKyAgICBjbGFzcyBhcnJheV9hbGxvY2F0b3IgOiBwdWJsaWMgYXJyYXlfYWxsb2NhdG9yX2Jhc2U8X1RwPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNpemVfdCAgICAgCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAqICAgICAgIAlwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIAljb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIAlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgCWNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FycmF5CQlhcnJheV90eXBlOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjEwMy4gc3RkOjphbGxvY2F0b3IgcHJvcGFnYXRlX29uX2NvbnRhaW5lcl9tb3ZlX2Fzc2lnbm1lbnQKKyAgICAgIHR5cGVkZWYgc3RkOjp0cnVlX3R5cGUgcHJvcGFnYXRlX29uX2NvbnRhaW5lcl9tb3ZlX2Fzc2lnbm1lbnQ7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICBhcnJheV90eXBlKiAJX01fYXJyYXk7CisgICAgICBzaXplX3R5cGUgCV9NX3VzZWQ7CisKKyAgICBwdWJsaWM6CisgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9BcnJheTEgPSBfQXJyYXk+CisgICAgICAgIHN0cnVjdCByZWJpbmQKKyAgICAgICAgeyB0eXBlZGVmIGFycmF5X2FsbG9jYXRvcjxfVHAxLCBfQXJyYXkxPiBvdGhlcjsgfTsKKworICAgICAgYXJyYXlfYWxsb2NhdG9yKGFycmF5X3R5cGUqIF9fYXJyYXkgPSAwKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgCisgICAgICA6IF9NX2FycmF5KF9fYXJyYXkpLCBfTV91c2VkKHNpemVfdHlwZSgpKSB7IH0KKworICAgICAgYXJyYXlfYWxsb2NhdG9yKGNvbnN0IGFycmF5X2FsbG9jYXRvciYgX19vKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgCisgICAgICA6IF9NX2FycmF5KF9fby5fTV9hcnJheSksIF9NX3VzZWQoX19vLl9NX3VzZWQpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfQXJyYXkxPgorICAgICAgICBhcnJheV9hbGxvY2F0b3IoY29uc3QgYXJyYXlfYWxsb2NhdG9yPF9UcDEsIF9BcnJheTE+JikKKwlfR0xJQkNYWF9VU0VfTk9FWENFUFQKKwk6IF9NX2FycmF5KDApLCBfTV91c2VkKHNpemVfdHlwZSgpKSB7IH0KKworICAgICAgfmFycmF5X2FsbG9jYXRvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKQorICAgICAgeworCWlmIChfTV9hcnJheSA9PSAwIHx8IF9NX3VzZWQgKyBfX24gPiBfTV9hcnJheS0+c2l6ZSgpKQorCSAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOworCXBvaW50ZXIgX19yZXQgPSBfTV9hcnJheS0+YmVnaW4oKSArIF9NX3VzZWQ7CisJX01fdXNlZCArPSBfX247CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJyYXk+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGFycmF5X2FsbG9jYXRvcjxfVHAsIF9BcnJheT4mLAorCSAgICAgICBjb25zdCBhcnJheV9hbGxvY2F0b3I8X1RwLCBfQXJyYXk+JikKKyAgICB7IHJldHVybiB0cnVlOyB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BcnJheT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgYXJyYXlfYWxsb2NhdG9yPF9UcCwgX0FycmF5PiYsIAorCSAgICAgICBjb25zdCBhcnJheV9hbGxvY2F0b3I8X1RwLCBfQXJyYXk+JikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvYXRvbWljaXR5LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9hdG9taWNpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDM5NjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvYXRvbWljaXR5LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8vIFN1cHBvcnQgZm9yIGF0b21pYyBvcGVyYXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvYXRvbWljaXR5LmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0FUT01JQ0lUWV9ICisjZGVmaW5lIF9HTElCQ1hYX0FUT01JQ0lUWV9ICTEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyNpbmNsdWRlIDxiaXRzL2F0b21pY193b3JkLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBGdW5jdGlvbnMgZm9yIHBvcnRhYmxlIGF0b21pYyBhY2Nlc3MuCisgIC8vIFRvIGFic3RyYWN0IGxvY2tpbmcgcHJpbWl0aXZlcyBhY3Jvc3MgYWxsIHRocmVhZCBwb2xpY2llcywgdXNlOgorICAvLyBfX2V4Y2hhbmdlX2FuZF9hZGRfZGlzcGF0Y2gKKyAgLy8gX19hdG9taWNfYWRkX2Rpc3BhdGNoCisjaWZkZWYgX0dMSUJDWFhfQVRPTUlDX0JVSUxUSU5TCisgIHN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkIAorICBfX2V4Y2hhbmdlX2FuZF9hZGQodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQorICB7IHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoX19tZW0sIF9fdmFsLCBfX0FUT01JQ19BQ1FfUkVMKTsgfQorCisgIHN0YXRpYyBpbmxpbmUgdm9pZAorICBfX2F0b21pY19hZGQodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQorICB7IF9fYXRvbWljX2ZldGNoX2FkZChfX21lbSwgX192YWwsIF9fQVRPTUlDX0FDUV9SRUwpOyB9CisjZWxzZQorICBfQXRvbWljX3dvcmQKKyAgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorICBfX2V4Y2hhbmdlX2FuZF9hZGQodm9sYXRpbGUgX0F0b21pY193b3JkKiwgaW50KSB0aHJvdyAoKTsKKworICB2b2lkCisgIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKyAgX19hdG9taWNfYWRkKHZvbGF0aWxlIF9BdG9taWNfd29yZCosIGludCkgdGhyb3cgKCk7CisjZW5kaWYKKworICBzdGF0aWMgaW5saW5lIF9BdG9taWNfd29yZAorICBfX2V4Y2hhbmdlX2FuZF9hZGRfc2luZ2xlKF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKKyAgeworICAgIF9BdG9taWNfd29yZCBfX3Jlc3VsdCA9ICpfX21lbTsKKyAgICAqX19tZW0gKz0gX192YWw7CisgICAgcmV0dXJuIF9fcmVzdWx0OworICB9CisKKyAgc3RhdGljIGlubGluZSB2b2lkCisgIF9fYXRvbWljX2FkZF9zaW5nbGUoX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQorICB7ICpfX21lbSArPSBfX3ZhbDsgfQorCisgIHN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkCisgIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKyAgX19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoKF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKKyAgeworI2lmZGVmIF9fR1RIUkVBRFMKKyAgICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wKCkpCisgICAgICByZXR1cm4gX19leGNoYW5nZV9hbmRfYWRkKF9fbWVtLCBfX3ZhbCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZF9zaW5nbGUoX19tZW0sIF9fdmFsKTsKKyNlbHNlCisgICAgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZF9zaW5nbGUoX19tZW0sIF9fdmFsKTsKKyNlbmRpZgorICB9CisKKyAgc3RhdGljIGlubGluZSB2b2lkCisgIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKyAgX19hdG9taWNfYWRkX2Rpc3BhdGNoKF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKKyAgeworI2lmZGVmIF9fR1RIUkVBRFMKKyAgICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wKCkpCisgICAgICBfX2F0b21pY19hZGQoX19tZW0sIF9fdmFsKTsKKyAgICBlbHNlCisgICAgICBfX2F0b21pY19hZGRfc2luZ2xlKF9fbWVtLCBfX3ZhbCk7CisjZWxzZQorICAgIF9fYXRvbWljX2FkZF9zaW5nbGUoX19tZW0sIF9fdmFsKTsKKyNlbmRpZgorICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworLy8gRXZlbiBpZiB0aGUgQ1BVIGRvZXNuJ3QgbmVlZCBhIG1lbW9yeSBiYXJyaWVyLCB3ZSBuZWVkIHRvIGVuc3VyZQorLy8gdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCByZW9yZGVyIG1lbW9yeSBhY2Nlc3NlcyBhY3Jvc3MgdGhlCisvLyBiYXJyaWVycy4KKyNpZm5kZWYgX0dMSUJDWFhfUkVBRF9NRU1fQkFSUklFUgorI2RlZmluZSBfR0xJQkNYWF9SRUFEX01FTV9CQVJSSUVSIF9fYXNtIF9fdm9sYXRpbGUgKCIiOjo6Im1lbW9yeSIpCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfV1JJVEVfTUVNX0JBUlJJRVIKKyNkZWZpbmUgX0dMSUJDWFhfV1JJVEVfTUVNX0JBUlJJRVIgX19hc20gX192b2xhdGlsZSAoIiI6OjoibWVtb3J5IikKKyNlbmRpZgorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9iaXRtYXBfYWxsb2NhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9iaXRtYXBfYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThmZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2JpdG1hcF9hbGxvY2F0b3IuaApAQCAtMCwwICsxLDExMTkgQEAKKy8vIEJpdG1hcCBBbGxvY2F0b3IuIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvYml0bWFwX2FsbG9jYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfQklUTUFQX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9CSVRNQVBfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8dXRpbGl0eT4gLy8gRm9yIHN0ZDo6cGFpci4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+IC8vIEZvciBfX3Rocm93X2JhZF9hbGxvYygpLgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+IC8vIEZvciBncmVhdGVyX2VxdWFsLCBhbmQgbGVzc19lcXVhbC4KKyNpbmNsdWRlIDxuZXc+IC8vIEZvciBvcGVyYXRvciBuZXcuCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4gLy8gX0dMSUJDWFhfREVCVUdfQVNTRVJUCisjaW5jbHVkZSA8ZXh0L2NvbmN1cnJlbmNlLmg+CisjaW5jbHVkZSA8Yml0cy9tb3ZlLmg+CisKKy8qKiBAYnJpZWYgVGhlIGNvbnN0YW50IGluIHRoZSBleHByZXNzaW9uIGJlbG93IGlzIHRoZSBhbGlnbm1lbnQKKyAqIHJlcXVpcmVkIGluIGJ5dGVzLgorICovCisjZGVmaW5lIF9CQUxMT0NfQUxJR05fQllURVMgOAorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKKyAgdXNpbmcgc3RkOjpzaXplX3Q7CisgIHVzaW5nIHN0ZDo6cHRyZGlmZl90OworCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICAgLyoqIEBjbGFzcyAgX19taW5pX3ZlY3RvciBiaXRtYXBfYWxsb2NhdG9yLmggYml0bWFwX2FsbG9jYXRvci5oCisgICAgICoKKyAgICAgKiAgQGJyaWVmICBfX21pbmlfdmVjdG9yPD4gaXMgYSBzdHJpcHBlZCBkb3duIHZlcnNpb24gb2YgdGhlCisgICAgICogIGZ1bGwtZmxlZGdlZCBzdGQ6OnZlY3Rvcjw+LgorICAgICAqCisgICAgICogIEl0IGlzIHRvIGJlIHVzZWQgb25seSBmb3IgYnVpbHQtaW4gdHlwZXMgb3IgUE9Ecy4gTm90YWJsZQorICAgICAqICBkaWZmZXJlbmNlcyBhcmU6CisgICAgICogCisgICAgICogIDEuIE5vdCBhbGwgYWNjZXNzb3IgZnVuY3Rpb25zIGFyZSBwcmVzZW50LgorICAgICAqICAyLiBVc2VkIE9OTFkgZm9yIFBPRHMuCisgICAgICogIDMuIE5vIEFsbG9jYXRvciB0ZW1wbGF0ZSBhcmd1bWVudC4gVXNlcyA6Om9wZXJhdG9yIG5ldygpIHRvIGdldAorICAgICAqICBtZW1vcnksIGFuZCA6Om9wZXJhdG9yIGRlbGV0ZSgpIHRvIGZyZWUgaXQuCisgICAgICogIENhdmVhdDogVGhlIGR0b3IgZG9lcyBOT1QgZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCwgc28gdGhpcyBhCisgICAgICogIG1lbW9yeS1sZWFraW5nIHZlY3RvciEKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBjbGFzcyBfX21pbmlfdmVjdG9yCisgICAgICB7CisJX19taW5pX3ZlY3Rvcihjb25zdCBfX21pbmlfdmVjdG9yJik7CisJX19taW5pX3ZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IF9fbWluaV92ZWN0b3ImKTsKKworICAgICAgcHVibGljOgorCXR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CisJdHlwZWRlZiBfVHAqIHBvaW50ZXI7CisJdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKKwl0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOworCXR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKwl0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisJdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOworCisgICAgICBwcml2YXRlOgorCXBvaW50ZXIgX01fc3RhcnQ7CisJcG9pbnRlciBfTV9maW5pc2g7CisJcG9pbnRlciBfTV9lbmRfb2Zfc3RvcmFnZTsKKworCXNpemVfdHlwZQorCV9NX3NwYWNlX2xlZnQoKSBjb25zdCB0aHJvdygpCisJeyByZXR1cm4gX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2g7IH0KKworCXBvaW50ZXIKKwlhbGxvY2F0ZShzaXplX3R5cGUgX19uKQorCXsgcmV0dXJuIHN0YXRpY19jYXN0PHBvaW50ZXI+KDo6b3BlcmF0b3IgbmV3KF9fbiAqIHNpemVvZihfVHApKSk7IH0KKworCXZvaWQKKwlkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUpCisJeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CisKKyAgICAgIHB1YmxpYzoKKwkvLyBNZW1iZXJzIHVzZWQ6IHNpemUoKSwgcHVzaF9iYWNrKCksIHBvcF9iYWNrKCksCisJLy8gaW5zZXJ0KGl0ZXJhdG9yLCBjb25zdF9yZWZlcmVuY2UpLCBlcmFzZShpdGVyYXRvciksCisJLy8gYmVnaW4oKSwgZW5kKCksIGJhY2soKSwgb3BlcmF0b3JbXS4KKworCV9fbWluaV92ZWN0b3IoKQorICAgICAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHsgfQorCisJc2l6ZV90eXBlCisJc2l6ZSgpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybiBfTV9maW5pc2ggLSBfTV9zdGFydDsgfQorCisJaXRlcmF0b3IKKwliZWdpbigpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybiB0aGlzLT5fTV9zdGFydDsgfQorCisJaXRlcmF0b3IKKwllbmQoKSBjb25zdCB0aHJvdygpCisJeyByZXR1cm4gdGhpcy0+X01fZmluaXNoOyB9CisKKwlyZWZlcmVuY2UKKwliYWNrKCkgY29uc3QgdGhyb3coKQorCXsgcmV0dXJuICoodGhpcy0+ZW5kKCkgLSAxKTsgfQorCisJcmVmZXJlbmNlCisJb3BlcmF0b3JbXShjb25zdCBzaXplX3R5cGUgX19wb3MpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybiB0aGlzLT5fTV9zdGFydFtfX3Bvc107IH0KKworCXZvaWQKKwlpbnNlcnQoaXRlcmF0b3IgX19wb3MsIGNvbnN0X3JlZmVyZW5jZSBfX3gpOworCisJdm9pZAorCXB1c2hfYmFjayhjb25zdF9yZWZlcmVuY2UgX194KQorCXsKKwkgIGlmICh0aGlzLT5fTV9zcGFjZV9sZWZ0KCkpCisJICAgIHsKKwkgICAgICAqdGhpcy0+ZW5kKCkgPSBfX3g7CisJICAgICAgKyt0aGlzLT5fTV9maW5pc2g7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgdGhpcy0+aW5zZXJ0KHRoaXMtPmVuZCgpLCBfX3gpOworCX0KKworCXZvaWQKKwlwb3BfYmFjaygpIHRocm93KCkKKwl7IC0tdGhpcy0+X01fZmluaXNoOyB9CisKKwl2b2lkCisJZXJhc2UoaXRlcmF0b3IgX19wb3MpIHRocm93KCk7CisKKwl2b2lkCisJY2xlYXIoKSB0aHJvdygpCisJeyB0aGlzLT5fTV9maW5pc2ggPSB0aGlzLT5fTV9zdGFydDsgfQorICAgICAgfTsKKworICAgIC8vIE91dCBvZiBsaW5lIGZ1bmN0aW9uIGRlZmluaXRpb25zLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIHZvaWQgX19taW5pX3ZlY3RvcjxfVHA+OjoKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgY29uc3RfcmVmZXJlbmNlIF9feCkKKyAgICAgIHsKKwlpZiAodGhpcy0+X01fc3BhY2VfbGVmdCgpKQorCSAgeworCSAgICBzaXplX3R5cGUgX190b19tb3ZlID0gdGhpcy0+X01fZmluaXNoIC0gX19wb3M7CisJICAgIGl0ZXJhdG9yIF9fZGVzdCA9IHRoaXMtPmVuZCgpOworCSAgICBpdGVyYXRvciBfX3NyYyA9IHRoaXMtPmVuZCgpIC0gMTsKKworCSAgICArK3RoaXMtPl9NX2ZpbmlzaDsKKwkgICAgd2hpbGUgKF9fdG9fbW92ZSkKKwkgICAgICB7CisJCSpfX2Rlc3QgPSAqX19zcmM7CisJCS0tX19kZXN0OyAtLV9fc3JjOyAtLV9fdG9fbW92ZTsKKwkgICAgICB9CisJICAgICpfX3BvcyA9IF9feDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIHNpemVfdHlwZSBfX25ld19zaXplID0gdGhpcy0+c2l6ZSgpID8gdGhpcy0+c2l6ZSgpICogMiA6IDE7CisJICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gdGhpcy0+YWxsb2NhdGUoX19uZXdfc2l6ZSk7CisJICAgIGl0ZXJhdG9yIF9fZmlyc3QgPSB0aGlzLT5iZWdpbigpOworCSAgICBpdGVyYXRvciBfX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CisJICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fcG9zKQorCSAgICAgIHsKKwkJKl9fc3RhcnQgPSAqX19maXJzdDsKKwkJKytfX3N0YXJ0OyArK19fZmlyc3Q7CisJICAgICAgfQorCSAgICAqX19zdGFydCA9IF9feDsKKwkgICAgKytfX3N0YXJ0OworCSAgICB3aGlsZSAoX19maXJzdCAhPSB0aGlzLT5lbmQoKSkKKwkgICAgICB7CisJCSpfX3N0YXJ0ID0gKl9fZmlyc3Q7CisJCSsrX19zdGFydDsgKytfX2ZpcnN0OworCSAgICAgIH0KKwkgICAgaWYgKHRoaXMtPl9NX3N0YXJ0KQorCSAgICAgIHRoaXMtPmRlYWxsb2NhdGUodGhpcy0+X01fc3RhcnQsIHRoaXMtPnNpemUoKSk7CisKKwkgICAgdGhpcy0+X01fc3RhcnQgPSBfX25ld19zdGFydDsKKwkgICAgdGhpcy0+X01fZmluaXNoID0gX19zdGFydDsKKwkgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgPSB0aGlzLT5fTV9zdGFydCArIF9fbmV3X3NpemU7CisJICB9CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICB2b2lkIF9fbWluaV92ZWN0b3I8X1RwPjo6CisgICAgICBlcmFzZShpdGVyYXRvciBfX3BvcykgdGhyb3coKQorICAgICAgeworCXdoaWxlIChfX3BvcyArIDEgIT0gdGhpcy0+ZW5kKCkpCisJICB7CisJICAgICpfX3BvcyA9IF9fcG9zWzFdOworCSAgICArK19fcG9zOworCSAgfQorCS0tdGhpcy0+X01fZmluaXNoOworICAgICAgfQorCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdHJ1Y3QgX19tdl9pdGVyX3RyYWl0cworICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX1RwOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfVHA6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgc3RydWN0IF9fbXZfaXRlcl90cmFpdHM8X1RwKj4KKyAgICAgIHsKKwl0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworCXR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIH07CisKKyAgICBlbnVtIAorICAgICAgeyAKKwliaXRzX3Blcl9ieXRlID0gOCwKKwliaXRzX3Blcl9ibG9jayA9IHNpemVvZihzaXplX3QpICogc2l6ZV90KGJpdHNfcGVyX2J5dGUpIAorICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgICBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCisJCSAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfX212X2l0ZXJfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKwkgIF9EaXN0YW5jZVR5cGU7CisKKwlfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKKwlfRGlzdGFuY2VUeXBlIF9faGFsZjsKKwlfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlOworCisJd2hpbGUgKF9fbGVuID4gMCkKKwkgIHsKKwkgICAgX19oYWxmID0gX19sZW4gPj4gMTsKKwkgICAgX19taWRkbGUgPSBfX2ZpcnN0OworCSAgICBfX21pZGRsZSArPSBfX2hhbGY7CisJICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpCisJICAgICAgeworCQlfX2ZpcnN0ID0gX19taWRkbGU7CisJCSsrX19maXJzdDsKKwkJX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgX19sZW4gPSBfX2hhbGY7CisJICB9CisJcmV0dXJuIF9fZmlyc3Q7CisgICAgICB9CisKKyAgICAvKiogQGJyaWVmIFRoZSBudW1iZXIgb2YgQmxvY2tzIHBvaW50ZWQgdG8gYnkgdGhlIGFkZHJlc3MgcGFpcgorICAgICAqICBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BZGRyUGFpcj4KKyAgICAgIGlubGluZSBzaXplX3QKKyAgICAgIF9fbnVtX2Jsb2NrcyhfQWRkclBhaXIgX19hcCkKKyAgICAgIHsgcmV0dXJuIChfX2FwLnNlY29uZCAtIF9fYXAuZmlyc3QpICsgMTsgfQorCisgICAgLyoqIEBicmllZiBUaGUgbnVtYmVyIG9mIEJpdC1tYXBzIHBvaW50ZWQgdG8gYnkgdGhlIGFkZHJlc3MgcGFpcgorICAgICAqICBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BZGRyUGFpcj4KKyAgICAgIGlubGluZSBzaXplX3QKKyAgICAgIF9fbnVtX2JpdG1hcHMoX0FkZHJQYWlyIF9fYXApCisgICAgICB7IHJldHVybiBfX251bV9ibG9ja3MoX19hcCkgLyBzaXplX3QoYml0c19wZXJfYmxvY2spOyB9CisKKyAgICAvLyBfVHAgc2hvdWxkIGJlIGEgcG9pbnRlciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGNsYXNzIF9JbmNsdXNpdmVfYmV0d2VlbiAKKyAgICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpwYWlyPF9UcCwgX1RwPiwgYm9vbD4KKyAgICAgIHsKKwl0eXBlZGVmIF9UcCBwb2ludGVyOworCXBvaW50ZXIgX01fcHRyX3ZhbHVlOworCXR5cGVkZWYgdHlwZW5hbWUgc3RkOjpwYWlyPF9UcCwgX1RwPiBfQmxvY2tfcGFpcjsKKwkKKyAgICAgIHB1YmxpYzoKKwlfSW5jbHVzaXZlX2JldHdlZW4ocG9pbnRlciBfX3B0cikgOiBfTV9wdHJfdmFsdWUoX19wdHIpIAorCXsgfQorCQorCWJvb2wgCisJb3BlcmF0b3IoKShfQmxvY2tfcGFpciBfX2JwKSBjb25zdCB0aHJvdygpCisJeworCSAgaWYgKHN0ZDo6bGVzc19lcXVhbDxwb2ludGVyPigpKF9NX3B0cl92YWx1ZSwgX19icC5zZWNvbmQpIAorCSAgICAgICYmIHN0ZDo6Z3JlYXRlcl9lcXVhbDxwb2ludGVyPigpKF9NX3B0cl92YWx1ZSwgX19icC5maXJzdCkpCisJICAgIHJldHVybiB0cnVlOworCSAgZWxzZQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorICAgICAgfTsKKyAgCisgICAgLy8gVXNlZCB0byBwYXNzIGEgRnVuY3RvciB0byBmdW5jdGlvbnMgYnkgcmVmZXJlbmNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgY2xhc3MgX0Z1bmN0b3JfUmVmIAorICAgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfRnVuY3Rvcjo6YXJndW1lbnRfdHlwZSwgCisJCQkJICAgdHlwZW5hbWUgX0Z1bmN0b3I6OnJlc3VsdF90eXBlPgorICAgICAgeworCV9GdW5jdG9yJiBfTV9mcmVmOworCQorICAgICAgcHVibGljOgorCXR5cGVkZWYgdHlwZW5hbWUgX0Z1bmN0b3I6OmFyZ3VtZW50X3R5cGUgYXJndW1lbnRfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9GdW5jdG9yOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKKworCV9GdW5jdG9yX1JlZihfRnVuY3RvciYgX19mcmVmKSA6IF9NX2ZyZWYoX19mcmVmKSAKKwl7IH0KKworCXJlc3VsdF90eXBlIAorCW9wZXJhdG9yKCkoYXJndW1lbnRfdHlwZSBfX2FyZykgCisJeyByZXR1cm4gX01fZnJlZihfX2FyZyk7IH0KKyAgICAgIH07CisKKyAgICAvKiogQGNsYXNzICBfRmZpdF9maW5kZXIgYml0bWFwX2FsbG9jYXRvci5oIGJpdG1hcF9hbGxvY2F0b3IuaAorICAgICAqCisgICAgICogIEBicmllZiAgVGhlIGNsYXNzIHdoaWNoIGFjdHMgYXMgYSBwcmVkaWNhdGUgZm9yIGFwcGx5aW5nIHRoZQorICAgICAqICBmaXJzdC1maXQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5IGZvciB0aGUgYml0bWFwIGFsbG9jYXRvci4KKyAgICAgKi8KKyAgICAvLyBfVHAgc2hvdWxkIGJlIGEgcG9pbnRlciB0eXBlLCBhbmQgX0FsbG9jIGlzIHRoZSBBbGxvY2F0b3IgZm9yCisgICAgLy8gdGhlIHZlY3Rvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBjbGFzcyBfRmZpdF9maW5kZXIgCisgICAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cGFpcjxfVHAsIF9UcD4sIGJvb2w+CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnBhaXI8X1RwLCBfVHA+IF9CbG9ja19wYWlyOworCXR5cGVkZWYgdHlwZW5hbWUgX19kZXRhaWw6Ol9fbWluaV92ZWN0b3I8X0Jsb2NrX3BhaXI+IF9CUFZlY3RvcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CUFZlY3Rvcjo6ZGlmZmVyZW5jZV90eXBlIF9Db3VudGVyX3R5cGU7CisKKwlzaXplX3QqIF9NX3BiaXRtYXA7CisJX0NvdW50ZXJfdHlwZSBfTV9kYXRhX29mZnNldDsKKworICAgICAgcHVibGljOgorCV9GZml0X2ZpbmRlcigpIDogX01fcGJpdG1hcCgwKSwgX01fZGF0YV9vZmZzZXQoMCkKKwl7IH0KKworCWJvb2wgCisJb3BlcmF0b3IoKShfQmxvY2tfcGFpciBfX2JwKSB0aHJvdygpCisJeworCSAgLy8gU2V0IHRoZSBfcm92ZXIgdG8gdGhlIGxhc3QgcGh5c2ljYWwgbG9jYXRpb24gYml0bWFwLAorCSAgLy8gd2hpY2ggaXMgdGhlIGJpdG1hcCB3aGljaCBiZWxvbmdzIHRvIHRoZSBmaXJzdCBmcmVlCisJICAvLyBibG9jay4gVGh1cywgdGhlIGJpdG1hcHMgYXJlIGluIGV4YWN0IHJldmVyc2Ugb3JkZXIgb2YKKwkgIC8vIHRoZSBhY3R1YWwgbWVtb3J5IGxheW91dC4gU28sIHdlIGNvdW50IGRvd24gdGhlIGJpdG1hcHMsCisJICAvLyB3aGljaCBpcyB0aGUgc2FtZSBhcyBtb3ZpbmcgdXAgdGhlIG1lbW9yeS4KKworCSAgLy8gSWYgdGhlIHVzZWQgY291bnQgc3RvcmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgQml0IE1hcCBoZWFkZXJzCisJICAvLyBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIE9iamVjdHMgdGhhdCB0aGUgY3VycmVudCBCbG9jayBjYW4KKwkgIC8vIHN0b3JlLCB0aGVuIHRoZXJlIGlzIGRlZmluaXRlbHkgbm8gc3BhY2UgZm9yIGFub3RoZXIgc2luZ2xlCisJICAvLyBvYmplY3QsIHNvIGp1c3QgcmV0dXJuIGZhbHNlLgorCSAgX0NvdW50ZXJfdHlwZSBfX2RpZmYgPSBfX2RldGFpbDo6X19udW1fYml0bWFwcyhfX2JwKTsKKworCSAgaWYgKCoocmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPgorCQkoX19icC5maXJzdCkgLSAoX19kaWZmICsgMSkpID09IF9fZGV0YWlsOjpfX251bV9ibG9ja3MoX19icCkpCisJICAgIHJldHVybiBmYWxzZTsKKworCSAgc2l6ZV90KiBfX3JvdmVyID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihfX2JwLmZpcnN0KSAtIDE7CisKKwkgIGZvciAoX0NvdW50ZXJfdHlwZSBfX2kgPSAwOyBfX2kgPCBfX2RpZmY7ICsrX19pKQorCSAgICB7CisJICAgICAgX01fZGF0YV9vZmZzZXQgPSBfX2k7CisJICAgICAgaWYgKCpfX3JvdmVyKQorCQl7CisJCSAgX01fcGJpdG1hcCA9IF9fcm92ZXI7CisJCSAgcmV0dXJuIHRydWU7CisJCX0KKwkgICAgICAtLV9fcm92ZXI7CisJICAgIH0KKwkgIHJldHVybiBmYWxzZTsKKwl9CisgICAgCisJc2l6ZV90KgorCV9NX2dldCgpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybiBfTV9wYml0bWFwOyB9CisKKwlfQ291bnRlcl90eXBlCisJX01fb2Zmc2V0KCkgY29uc3QgdGhyb3coKQorCXsgcmV0dXJuIF9NX2RhdGFfb2Zmc2V0ICogc2l6ZV90KGJpdHNfcGVyX2Jsb2NrKTsgfQorICAgICAgfTsKKworICAgIC8qKiBAY2xhc3MgIF9CaXRtYXBfY291bnRlciBiaXRtYXBfYWxsb2NhdG9yLmggYml0bWFwX2FsbG9jYXRvci5oCisgICAgICoKKyAgICAgKiAgQGJyaWVmICBUaGUgYml0bWFwIGNvdW50ZXIgd2hpY2ggYWN0cyBhcyB0aGUgYml0bWFwCisgICAgICogIG1hbmlwdWxhdG9yLCBhbmQgbWFuYWdlcyB0aGUgYml0LW1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYW5kCisgICAgICogIHRoZSBzZWFyY2hpbmcgYW5kIGlkZW50aWZpY2F0aW9uIGZ1bmN0aW9ucyBvbiB0aGUgYml0LW1hcC4KKyAgICAgKi8KKyAgICAvLyBfVHAgc2hvdWxkIGJlIGEgcG9pbnRlciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGNsYXNzIF9CaXRtYXBfY291bnRlcgorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUKKwlfX2RldGFpbDo6X19taW5pX3ZlY3Rvcjx0eXBlbmFtZSBzdGQ6OnBhaXI8X1RwLCBfVHA+ID4gX0JQVmVjdG9yOworCXR5cGVkZWYgdHlwZW5hbWUgX0JQVmVjdG9yOjpzaXplX3R5cGUgX0luZGV4X3R5cGU7CisJdHlwZWRlZiBfVHAgcG9pbnRlcjsKKworCV9CUFZlY3RvciYgX01fdmJwOworCXNpemVfdCogX01fY3Vycl9ibWFwOworCXNpemVfdCogX01fbGFzdF9ibWFwX2luX2Jsb2NrOworCV9JbmRleF90eXBlIF9NX2N1cnJfaW5kZXg7CisgICAgCisgICAgICBwdWJsaWM6CisJLy8gVXNlIHRoZSAybmQgcGFyYW1ldGVyIHdpdGggY2FyZS4gTWFrZSBzdXJlIHRoYXQgc3VjaCBhbgorCS8vIGVudHJ5IGV4aXN0cyBpbiB0aGUgdmVjdG9yIGJlZm9yZSBwYXNzaW5nIHRoYXQgcGFydGljdWxhcgorCS8vIGluZGV4IHRvIHRoaXMgY3Rvci4KKwlfQml0bWFwX2NvdW50ZXIoX0JQVmVjdG9yJiBSdmJwLCBsb25nIF9faW5kZXggPSAtMSkgOiBfTV92YnAoUnZicCkKKwl7IHRoaXMtPl9NX3Jlc2V0KF9faW5kZXgpOyB9CisgICAgCisJdm9pZCAKKwlfTV9yZXNldChsb25nIF9faW5kZXggPSAtMSkgdGhyb3coKQorCXsKKwkgIGlmIChfX2luZGV4ID09IC0xKQorCSAgICB7CisJICAgICAgX01fY3Vycl9ibWFwID0gMDsKKwkgICAgICBfTV9jdXJyX2luZGV4ID0gc3RhdGljX2Nhc3Q8X0luZGV4X3R5cGU+KC0xKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKworCSAgX01fY3Vycl9pbmRleCA9IF9faW5kZXg7CisJICBfTV9jdXJyX2JtYXAgPSByZWludGVycHJldF9jYXN0PHNpemVfdCo+CisJICAgIChfTV92YnBbX01fY3Vycl9pbmRleF0uZmlyc3QpIC0gMTsKKwkgIAorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9faW5kZXggPD0gKGxvbmcpX01fdmJwLnNpemUoKSAtIDEpOworCQorCSAgX01fbGFzdF9ibWFwX2luX2Jsb2NrID0gX01fY3Vycl9ibWFwCisJICAgIC0gKChfTV92YnBbX01fY3Vycl9pbmRleF0uc2Vjb25kIAorCQktIF9NX3ZicFtfTV9jdXJyX2luZGV4XS5maXJzdCArIDEpIAorCSAgICAgICAvIHNpemVfdChiaXRzX3Blcl9ibG9jaykgLSAxKTsKKwl9CisgICAgCisJLy8gRGFuZ2Vyb3VzIEZ1bmN0aW9uISBVc2Ugd2l0aCBleHRyZW1lIGNhcmUuIFBhc3MgdG8gdGhpcworCS8vIGZ1bmN0aW9uIE9OTFkgdGhvc2UgdmFsdWVzIHRoYXQgYXJlIGtub3duIHRvIGJlIGNvcnJlY3QsCisJLy8gb3RoZXJ3aXNlIHRoaXMgd2lsbCBtZXNzIHVwIGJpZyB0aW1lLgorCXZvaWQKKwlfTV9zZXRfaW50ZXJuYWxfYml0bWFwKHNpemVfdCogX19uZXdfaW50ZXJuYWxfbWFya2VyKSB0aHJvdygpCisJeyBfTV9jdXJyX2JtYXAgPSBfX25ld19pbnRlcm5hbF9tYXJrZXI7IH0KKyAgICAKKwlib29sCisJX01fZmluaXNoZWQoKSBjb25zdCB0aHJvdygpCisJeyByZXR1cm4oX01fY3Vycl9ibWFwID09IDApOyB9CisgICAgCisJX0JpdG1hcF9jb3VudGVyJgorCW9wZXJhdG9yKysoKSB0aHJvdygpCisJeworCSAgaWYgKF9NX2N1cnJfYm1hcCA9PSBfTV9sYXN0X2JtYXBfaW5fYmxvY2spCisJICAgIHsKKwkgICAgICBpZiAoKytfTV9jdXJyX2luZGV4ID09IF9NX3ZicC5zaXplKCkpCisJCV9NX2N1cnJfYm1hcCA9IDA7CisJICAgICAgZWxzZQorCQl0aGlzLT5fTV9yZXNldChfTV9jdXJyX2luZGV4KTsKKwkgICAgfQorCSAgZWxzZQorCSAgICAtLV9NX2N1cnJfYm1hcDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisgICAgCisJc2l6ZV90KgorCV9NX2dldCgpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybiBfTV9jdXJyX2JtYXA7IH0KKyAgICAKKwlwb2ludGVyIAorCV9NX2Jhc2UoKSBjb25zdCB0aHJvdygpCisJeyByZXR1cm4gX01fdmJwW19NX2N1cnJfaW5kZXhdLmZpcnN0OyB9CisKKwlfSW5kZXhfdHlwZQorCV9NX29mZnNldCgpIGNvbnN0IHRocm93KCkKKwl7CisJICByZXR1cm4gc2l6ZV90KGJpdHNfcGVyX2Jsb2NrKQorCSAgICAqICgocmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPih0aGlzLT5fTV9iYXNlKCkpIAorCQktIF9NX2N1cnJfYm1hcCkgLSAxKTsKKwl9CisgICAgCisJX0luZGV4X3R5cGUKKwlfTV93aGVyZSgpIGNvbnN0IHRocm93KCkKKwl7IHJldHVybiBfTV9jdXJyX2luZGV4OyB9CisgICAgICB9OworCisgICAgLyoqIEBicmllZiAgTWFyayBhIG1lbW9yeSBhZGRyZXNzIGFzIGFsbG9jYXRlZCBieSByZS1zZXR0aW5nIHRoZQorICAgICAqICBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgYml0LW1hcC4KKyAgICAgKi8KKyAgICBpbmxpbmUgdm9pZCAKKyAgICBfX2JpdF9hbGxvY2F0ZShzaXplX3QqIF9fcGJtYXAsIHNpemVfdCBfX3BvcykgdGhyb3coKQorICAgIHsKKyAgICAgIHNpemVfdCBfX21hc2sgPSAxIDw8IF9fcG9zOworICAgICAgX19tYXNrID0gfl9fbWFzazsKKyAgICAgICpfX3BibWFwICY9IF9fbWFzazsKKyAgICB9CisgIAorICAgIC8qKiBAYnJpZWYgIE1hcmsgYSBtZW1vcnkgYWRkcmVzcyBhcyBmcmVlIGJ5IHNldHRpbmcgdGhlCisgICAgICogIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBiaXQtbWFwLgorICAgICAqLworICAgIGlubGluZSB2b2lkIAorICAgIF9fYml0X2ZyZWUoc2l6ZV90KiBfX3BibWFwLCBzaXplX3QgX19wb3MpIHRocm93KCkKKyAgICB7CisgICAgICBzaXplX3QgX19tYXNrID0gMSA8PCBfX3BvczsKKyAgICAgICpfX3BibWFwIHw9IF9fbWFzazsKKyAgICB9CisKKyAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgIH0gLy8gbmFtZXNwYWNlIF9fZGV0YWlsCisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqIEBicmllZiAgR2VuZXJpYyBWZXJzaW9uIG9mIHRoZSBic2YgaW5zdHJ1Y3Rpb24uCisgICAqLworICBpbmxpbmUgc2l6ZV90IAorICBfQml0X3NjYW5fZm9yd2FyZChzaXplX3QgX19udW0pCisgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oX19idWlsdGluX2N0emwoX19udW0pKTsgfQorCisgIC8qKiBAY2xhc3MgIGZyZWVfbGlzdCBiaXRtYXBfYWxsb2NhdG9yLmggYml0bWFwX2FsbG9jYXRvci5oCisgICAqCisgICAqICBAYnJpZWYgIFRoZSBmcmVlIGxpc3QgY2xhc3MgZm9yIG1hbmFnaW5nIGNodW5rcyBvZiBtZW1vcnkgdG8gYmUKKyAgICogIGdpdmVuIHRvIGFuZCByZXR1cm5lZCBieSB0aGUgYml0bWFwX2FsbG9jYXRvci4KKyAgICovCisgIGNsYXNzIGZyZWVfbGlzdAorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIHNpemVfdCogCQkJCXZhbHVlX3R5cGU7CisgICAgdHlwZWRlZiBfX2RldGFpbDo6X19taW5pX3ZlY3Rvcjx2YWx1ZV90eXBlPiB2ZWN0b3JfdHlwZTsKKyAgICB0eXBlZGVmIHZlY3Rvcl90eXBlOjppdGVyYXRvciAJCWl0ZXJhdG9yOworICAgIHR5cGVkZWYgX19tdXRleAkJCQlfX211dGV4X3R5cGU7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgX0xUX3BvaW50ZXJfY29tcGFyZQorICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3Qgc2l6ZV90KiBfX3B1aSwgCisJCSBjb25zdCBzaXplX3QgX19jdWkpIGNvbnN0IHRocm93KCkKKyAgICAgIHsgcmV0dXJuICpfX3B1aSA8IF9fY3VpOyB9CisgICAgfTsKKworI2lmIGRlZmluZWQgX19HVEhSRUFEUworICAgIF9fbXV0ZXhfdHlwZSYKKyAgICBfTV9nZXRfbXV0ZXgoKQorICAgIHsKKyAgICAgIHN0YXRpYyBfX211dGV4X3R5cGUgX1NfbXV0ZXg7CisgICAgICByZXR1cm4gX1NfbXV0ZXg7CisgICAgfQorI2VuZGlmCisKKyAgICB2ZWN0b3JfdHlwZSYKKyAgICBfTV9nZXRfZnJlZV9saXN0KCkKKyAgICB7CisgICAgICBzdGF0aWMgdmVjdG9yX3R5cGUgX1NfZnJlZV9saXN0OworICAgICAgcmV0dXJuIF9TX2ZyZWVfbGlzdDsKKyAgICB9CisKKyAgICAvKiogQGJyaWVmICBQZXJmb3JtcyB2YWxpZGF0aW9uIG9mIG1lbW9yeSBiYXNlZCBvbiB0aGVpciBzaXplLgorICAgICAqCisgICAgICogIEBwYXJhbSAgX19hZGRyIFRoZSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgYmxvY2sgdG8gYmUKKyAgICAgKiAgdmFsaWRhdGVkLgorICAgICAqCisgICAgICogIFZhbGlkYXRlcyB0aGUgbWVtb3J5IGJsb2NrIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGFuZAorICAgICAqICBhcHByb3ByaWF0ZWx5IHBlcmZvcm1zIHRoZSBhY3Rpb24gb2YgbWFuYWdpbmcgdGhlIGZyZWUgbGlzdCBvZgorICAgICAqICBibG9ja3MgYnkgYWRkaW5nIHRoaXMgYmxvY2sgdG8gdGhlIGZyZWUgbGlzdCBvciBkZWxldGluZyB0aGlzCisgICAgICogIG9yIGxhcmdlciBibG9ja3MgZnJvbSB0aGUgZnJlZSBsaXN0LgorICAgICAqLworICAgIHZvaWQKKyAgICBfTV92YWxpZGF0ZShzaXplX3QqIF9fYWRkcikgdGhyb3coKQorICAgIHsKKyAgICAgIHZlY3Rvcl90eXBlJiBfX2ZyZWVfbGlzdCA9IF9NX2dldF9mcmVlX2xpc3QoKTsKKyAgICAgIGNvbnN0IHZlY3Rvcl90eXBlOjpzaXplX3R5cGUgX19tYXhfc2l6ZSA9IDY0OworICAgICAgaWYgKF9fZnJlZV9saXN0LnNpemUoKSA+PSBfX21heF9zaXplKQorCXsKKwkgIC8vIE9rLCB0aGUgdGhyZXNob2xkIHZhbHVlIGhhcyBiZWVuIHJlYWNoZWQuICBXZSBkZXRlcm1pbmUKKwkgIC8vIHdoaWNoIGJsb2NrIHRvIHJlbW92ZSBmcm9tIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLgorCSAgaWYgKCpfX2FkZHIgPj0gKl9fZnJlZV9saXN0LmJhY2soKSkKKwkgICAgeworCSAgICAgIC8vIE9rLCB0aGUgbmV3IGJsb2NrIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKKwkgICAgICAvLyBsYXN0IGJsb2NrIGluIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiBXZSBqdXN0IGZyZWUKKwkgICAgICAvLyB0aGUgbmV3IGJsb2NrLgorCSAgICAgIDo6b3BlcmF0b3IgZGVsZXRlKHN0YXRpY19jYXN0PHZvaWQqPihfX2FkZHIpKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8vIERlYWxsb2NhdGUgdGhlIGxhc3QgYmxvY2sgaW4gdGhlIGxpc3Qgb2YgZnJlZSBsaXN0cywKKwkgICAgICAvLyBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lIGluIGl0cyBjb3JyZWN0IHBvc2l0aW9uLgorCSAgICAgIDo6b3BlcmF0b3IgZGVsZXRlKHN0YXRpY19jYXN0PHZvaWQqPihfX2ZyZWVfbGlzdC5iYWNrKCkpKTsKKwkgICAgICBfX2ZyZWVfbGlzdC5wb3BfYmFjaygpOworCSAgICB9CisJfQorCSAgCisgICAgICAvLyBKdXN0IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGxpc3Qgb2YgZnJlZSBsaXN0cyB1bmNvbmRpdGlvbmFsbHkuCisgICAgICBpdGVyYXRvciBfX3RlbXAgPSBfX2RldGFpbDo6X19sb3dlcl9ib3VuZAorCShfX2ZyZWVfbGlzdC5iZWdpbigpLCBfX2ZyZWVfbGlzdC5lbmQoKSwgCisJICpfX2FkZHIsIF9MVF9wb2ludGVyX2NvbXBhcmUoKSk7CisKKyAgICAgIC8vIFdlIG1heSBpbnNlcnQgdGhlIG5ldyBmcmVlIGxpc3QgYmVmb3JlIF90ZW1wOworICAgICAgX19mcmVlX2xpc3QuaW5zZXJ0KF9fdGVtcCwgX19hZGRyKTsKKyAgICB9CisKKyAgICAvKiogQGJyaWVmICBEZWNpZGVzIHdoZXRoZXIgdGhlIHdhc3RhZ2Ugb2YgbWVtb3J5IGlzIGFjY2VwdGFibGUgZm9yCisgICAgICogIHRoZSBjdXJyZW50IG1lbW9yeSByZXF1ZXN0IGFuZCByZXR1cm5zIGFjY29yZGluZ2x5LgorICAgICAqCisgICAgICogIEBwYXJhbSBfX2Jsb2NrX3NpemUgVGhlIHNpemUgb2YgdGhlIGJsb2NrIGF2YWlsYWJsZSBpbiB0aGUgZnJlZQorICAgICAqICBsaXN0LgorICAgICAqCisgICAgICogIEBwYXJhbSBfX3JlcXVpcmVkX3NpemUgVGhlIHJlcXVpcmVkIHNpemUgb2YgdGhlIG1lbW9yeSBibG9jay4KKyAgICAgKgorICAgICAqICBAcmV0dXJuIHRydWUgaWYgdGhlIHdhc3RhZ2UgaW5jdXJyZWQgaXMgYWNjZXB0YWJsZSwgZWxzZSByZXR1cm5zCisgICAgICogIGZhbHNlLgorICAgICAqLworICAgIGJvb2wgCisgICAgX01fc2hvdWxkX2lfZ2l2ZShzaXplX3QgX19ibG9ja19zaXplLCAKKwkJICAgICBzaXplX3QgX19yZXF1aXJlZF9zaXplKSB0aHJvdygpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90IF9fbWF4X3dhc3RhZ2VfcGVyY2VudGFnZSA9IDM2OworICAgICAgaWYgKF9fYmxvY2tfc2l6ZSA+PSBfX3JlcXVpcmVkX3NpemUgJiYgCisJICAoKChfX2Jsb2NrX3NpemUgLSBfX3JlcXVpcmVkX3NpemUpICogMTAwIC8gX19ibG9ja19zaXplKQorCSAgIDwgX19tYXhfd2FzdGFnZV9wZXJjZW50YWdlKSkKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgIHB1YmxpYzoKKyAgICAvKiogQGJyaWVmIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYmxvY2sgb2YgbWVtb3J5IHRvIHRoZQorICAgICAqICBpbnRlcm5hbCBmcmVlIGxpc3QuCisgICAgICoKKyAgICAgKiAgQHBhcmFtICBfX2FkZHIgVGhlIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBibG9jayB0aGF0IHdhcyBnaXZlbgorICAgICAqICBieSBhIGNhbGwgdG8gdGhlIF9NX2dldCBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICBpbmxpbmUgdm9pZCAKKyAgICBfTV9pbnNlcnQoc2l6ZV90KiBfX2FkZHIpIHRocm93KCkKKyAgICB7CisjaWYgZGVmaW5lZCBfX0dUSFJFQURTCisgICAgICBfX3Njb3BlZF9sb2NrIF9fYmZsX2xvY2soX01fZ2V0X211dGV4KCkpOworI2VuZGlmCisgICAgICAvLyBDYWxsIF9NX3ZhbGlkYXRlIHRvIGRlY2lkZSB3aGF0IHNob3VsZCBiZSBkb25lIHdpdGgKKyAgICAgIC8vIHRoaXMgcGFydGljdWxhciBmcmVlIGxpc3QuCisgICAgICB0aGlzLT5fTV92YWxpZGF0ZShyZWludGVycHJldF9jYXN0PHNpemVfdCo+KF9fYWRkcikgLSAxKTsKKyAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGFzIHRvIHdoeSB0aGlzIGlzIDEhCisgICAgfQorICAgIAorICAgIC8qKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIGJsb2NrIG9mIG1lbW9yeSBvZiB0aGUgc3BlY2lmaWVkCisgICAgICogIHNpemUgZnJvbSB0aGUgZnJlZSBsaXN0LgorICAgICAqCisgICAgICogIEBwYXJhbSAgX19zeiBUaGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHJlcXVpcmVkLgorICAgICAqCisgICAgICogIEByZXR1cm4gIEEgcG9pbnRlciB0byB0aGUgbmV3IG1lbW9yeSBibG9jayBvZiBzaXplIGF0IGxlYXN0CisgICAgICogIGVxdWFsIHRvIHRoYXQgcmVxdWVzdGVkLgorICAgICAqLworICAgIHNpemVfdCoKKyAgICBfTV9nZXQoc2l6ZV90IF9fc3opIHRocm93KHN0ZDo6YmFkX2FsbG9jKTsKKworICAgIC8qKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24ganVzdCBjbGVhcnMgdGhlIGludGVybmFsIEZyZWUgTGlzdCwgYW5kCisgICAgICogIGdpdmVzIGJhY2sgYWxsIHRoZSBtZW1vcnkgdG8gdGhlIE9TLgorICAgICAqLworICAgIHZvaWQgCisgICAgX01fY2xlYXIoKTsKKyAgfTsKKworCisgIC8vIEZvcndhcmQgZGVjbGFyZSB0aGUgY2xhc3MuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gCisgICAgY2xhc3MgYml0bWFwX2FsbG9jYXRvcjsKKworICAvLyBTcGVjaWFsaXplIGZvciB2b2lkOgorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgYml0bWFwX2FsbG9jYXRvcjx2b2lkPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIC8vIFJlZmVyZW5jZS10by12b2lkIG1lbWJlcnMgYXJlIGltcG9zc2libGUuCisgICAgICB0eXBlZGVmIHZvaWQgIHZhbHVlX3R5cGU7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisJeworCSAgdHlwZWRlZiBiaXRtYXBfYWxsb2NhdG9yPF9UcDE+IG90aGVyOworCX07CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIEJpdG1hcCBBbGxvY2F0b3IsIHByaW1hcnkgdGVtcGxhdGUuCisgICAqIEBpbmdyb3VwIGFsbG9jYXRvcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBiaXRtYXBfYWxsb2NhdG9yIDogcHJpdmF0ZSBmcmVlX2xpc3QKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAJCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiAgICAgICAgCQlwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAqICAJCWNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIF9UcCYgICAgICAgIAkJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAmICAJCWNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBmcmVlX2xpc3Q6Ol9fbXV0ZXhfdHlwZSAJX19tdXRleF90eXBlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisJeworCSAgdHlwZWRlZiBiaXRtYXBfYWxsb2NhdG9yPF9UcDE+IG90aGVyOworCX07CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTAzLiBwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudAorICAgICAgdHlwZWRlZiBzdGQ6OnRydWVfdHlwZSBwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudDsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHNpemVfdCBfQlNpemUsIHNpemVfdCBfQWxpZ25TaXplPgorICAgICAgICBzdHJ1Y3QgYWxpZ25lZF9zaXplCisJeworCSAgZW51bQorCSAgICB7IAorCSAgICAgIG1vZHVsdXMgPSBfQlNpemUgJSBfQWxpZ25TaXplLAorCSAgICAgIHZhbHVlID0gX0JTaXplICsgKG1vZHVsdXMgPyBfQWxpZ25TaXplIC0gKG1vZHVsdXMpIDogMCkKKwkgICAgfTsKKwl9OworCisgICAgICBzdHJ1Y3QgX0FsbG9jX2Jsb2NrCisgICAgICB7CisJY2hhciBfX01fdW51c2VkW2FsaWduZWRfc2l6ZTxzaXplb2YodmFsdWVfdHlwZSksCisJCQlfQkFMTE9DX0FMSUdOX0JZVEVTPjo6dmFsdWVdOworICAgICAgfTsKKworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cGFpcjxfQWxsb2NfYmxvY2sqLCBfQWxsb2NfYmxvY2sqPiBfQmxvY2tfcGFpcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2RldGFpbDo6X19taW5pX3ZlY3RvcjxfQmxvY2tfcGFpcj4gX0JQVmVjdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQlBWZWN0b3I6Oml0ZXJhdG9yIF9CUGl0ZXI7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgICAgIHN0YXRpYyBfQlBpdGVyCisgICAgICAgIF9TX2ZpbmQoX1ByZWRpY2F0ZSBfX3ApCisgICAgICAgIHsKKwkgIF9CUGl0ZXIgX19maXJzdCA9IF9TX21lbV9ibG9ja3MuYmVnaW4oKTsKKwkgIHdoaWxlIChfX2ZpcnN0ICE9IF9TX21lbV9ibG9ja3MuZW5kKCkgJiYgIV9fcCgqX19maXJzdCkpCisJICAgICsrX19maXJzdDsKKwkgIHJldHVybiBfX2ZpcnN0OworCX0KKworI2lmIGRlZmluZWQgX0dMSUJDWFhfREVCVUcKKyAgICAgIC8vIENvbXBsZXhpdHk6IE8obGcoTikpLiBXaGVyZSwgTiBpcyB0aGUgbnVtYmVyIG9mIGJsb2NrIG9mIHNpemUKKyAgICAgIC8vIHNpemVvZih2YWx1ZV90eXBlKS4KKyAgICAgIHZvaWQgCisgICAgICBfU19jaGVja19mb3JfZnJlZV9ibG9ja3MoKSB0aHJvdygpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfX2RldGFpbDo6X0ZmaXRfZmluZGVyPF9BbGxvY19ibG9jayo+IF9GRkY7CisJX0JQaXRlciBfX2JwaSA9IF9TX2ZpbmQoX0ZGRigpKTsKKworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX2JwaSA9PSBfU19tZW1fYmxvY2tzLmVuZCgpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKiogQGJyaWVmICBSZXNwb25zaWJsZSBmb3IgZXhwb25lbnRpYWxseSBncm93aW5nIHRoZSBpbnRlcm5hbAorICAgICAgICogIG1lbW9yeSBwb29sLgorICAgICAgICoKKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6YmFkX2FsbG9jLiBJZiBtZW1vcnkgY2FuIG5vdCBiZSBhbGxvY2F0ZWQuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHk6IE8oMSksIGJ1dCBpbnRlcm5hbGx5IGRlcGVuZHMgdXBvbiB0aGUKKyAgICAgICAqICBjb21wbGV4aXR5IG9mIHRoZSBmdW5jdGlvbiBmcmVlX2xpc3Q6Ol9NX2dldC4gVGhlIHBhcnQgd2hlcmUKKyAgICAgICAqICB0aGUgYml0bWFwIGhlYWRlcnMgYXJlIHdyaXR0ZW4gaGFzIGNvbXBsZXhpdHk6IE8oWCksd2hlcmUgWAorICAgICAgICogIGlzIHRoZSBudW1iZXIgb2YgYmxvY2tzIG9mIHNpemUgc2l6ZW9mKHZhbHVlX3R5cGUpIHdpdGhpbgorICAgICAgICogIHRoZSBuZXdseSBhY3F1aXJlZCBibG9jay4gSGF2aW5nIGEgdGlnaHQgYm91bmQuCisgICAgICAgKi8KKyAgICAgIHZvaWQgCisgICAgICBfU19yZWZpbGxfcG9vbCgpIHRocm93KHN0ZDo6YmFkX2FsbG9jKQorICAgICAgeworI2lmIGRlZmluZWQgX0dMSUJDWFhfREVCVUcKKwlfU19jaGVja19mb3JfZnJlZV9ibG9ja3MoKTsKKyNlbmRpZgorCisJY29uc3Qgc2l6ZV90IF9fbnVtX2JpdG1hcHMgPSAoX1NfYmxvY2tfc2l6ZQorCQkJCSAgICAgIC8gc2l6ZV90KF9fZGV0YWlsOjpiaXRzX3Blcl9ibG9jaykpOworCWNvbnN0IHNpemVfdCBfX3NpemVfdG9fYWxsb2NhdGUgPSBzaXplb2Yoc2l6ZV90KSAKKwkgICsgX1NfYmxvY2tfc2l6ZSAqIHNpemVvZihfQWxsb2NfYmxvY2spIAorCSAgKyBfX251bV9iaXRtYXBzICogc2l6ZW9mKHNpemVfdCk7CisKKwlzaXplX3QqIF9fdGVtcCA9CisJICByZWludGVycHJldF9jYXN0PHNpemVfdCo+KHRoaXMtPl9NX2dldChfX3NpemVfdG9fYWxsb2NhdGUpKTsKKwkqX190ZW1wID0gMDsKKwkrK19fdGVtcDsKKworCS8vIFRoZSBIZWFkZXIgaW5mb3JtYXRpb24gZ29lcyBhdCB0aGUgQmVnaW5uaW5nIG9mIHRoZSBCbG9jay4KKwlfQmxvY2tfcGFpciBfX2JwID0gCisJICBzdGQ6Om1ha2VfcGFpcihyZWludGVycHJldF9jYXN0PF9BbGxvY19ibG9jayo+CisJCQkgKF9fdGVtcCArIF9fbnVtX2JpdG1hcHMpLCAKKwkJCSByZWludGVycHJldF9jYXN0PF9BbGxvY19ibG9jayo+CisJCQkgKF9fdGVtcCArIF9fbnVtX2JpdG1hcHMpIAorCQkJICsgX1NfYmxvY2tfc2l6ZSAtIDEpOworCQorCS8vIEZpbGwgdGhlIFZlY3RvciB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCisJX1NfbWVtX2Jsb2Nrcy5wdXNoX2JhY2soX19icCk7CisKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iaXRtYXBzOyArK19faSkKKwkgIF9fdGVtcFtfX2ldID0gfnN0YXRpY19jYXN0PHNpemVfdD4oMCk7IC8vIDEgSW5kaWNhdGVzIGFsbCBGcmVlLgorCisJX1NfYmxvY2tfc2l6ZSAqPSAyOworICAgICAgfQorCisgICAgICBzdGF0aWMgX0JQVmVjdG9yIF9TX21lbV9ibG9ja3M7CisgICAgICBzdGF0aWMgc2l6ZV90IF9TX2Jsb2NrX3NpemU7CisgICAgICBzdGF0aWMgX19kZXRhaWw6Ol9CaXRtYXBfY291bnRlcjxfQWxsb2NfYmxvY2sqPiBfU19sYXN0X3JlcXVlc3Q7CisgICAgICBzdGF0aWMgdHlwZW5hbWUgX0JQVmVjdG9yOjpzaXplX3R5cGUgX1NfbGFzdF9kZWFsbG9jX2luZGV4OworI2lmIGRlZmluZWQgX19HVEhSRUFEUworICAgICAgc3RhdGljIF9fbXV0ZXhfdHlwZSBfU19tdXQ7CisjZW5kaWYKKworICAgIHB1YmxpYzoKKworICAgICAgLyoqIEBicmllZiAgQWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBzaW5nbGUgb2JqZWN0IG9mIHNpemUKKyAgICAgICAqICBzaXplb2YoX1RwKS4KKyAgICAgICAqCisgICAgICAgKiAgQHRocm93ICBzdGQ6OmJhZF9hbGxvYy4gSWYgbWVtb3J5IGNhbiBub3QgYmUgYWxsb2NhdGVkLgorICAgICAgICoKKyAgICAgICAqICBDb21wbGV4aXR5OiBXb3JzdCBjYXNlIGNvbXBsZXhpdHkgaXMgTyhOKSwgYnV0IHRoYXQKKyAgICAgICAqICBpcyBoYXJkbHkgZXZlciBoaXQuIElmIGFuZCB3aGVuIHRoaXMgcGFydGljdWxhciBjYXNlIGlzCisgICAgICAgKiAgZW5jb3VudGVyZWQsIHRoZSBuZXh0IGZldyBjYXNlcyBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIGEKKyAgICAgICAqICB3b3JzdCBjYXNlIGNvbXBsZXhpdHkgb2YgTygxKSEgIFRoYXQncyB3aHkgdGhpcyBmdW5jdGlvbgorICAgICAgICogIHBlcmZvcm1zIHZlcnkgd2VsbCBvbiBhdmVyYWdlLiBZb3UgY2FuIGNvbnNpZGVyIHRoaXMKKyAgICAgICAqICBmdW5jdGlvbiB0byBoYXZlIGEgY29tcGxleGl0eSByZWZlcnJlZCB0byBjb21tb25seSBhczoKKyAgICAgICAqICBBbW9ydGl6ZWQgQ29uc3RhbnQgdGltZS4KKyAgICAgICAqLworICAgICAgcG9pbnRlciAKKyAgICAgIF9NX2FsbG9jYXRlX3NpbmdsZV9vYmplY3QoKSB0aHJvdyhzdGQ6OmJhZF9hbGxvYykKKyAgICAgIHsKKyNpZiBkZWZpbmVkIF9fR1RIUkVBRFMKKwlfX3Njb3BlZF9sb2NrIF9fYml0X2xvY2soX1NfbXV0KTsKKyNlbmRpZgorCisJLy8gVGhlIGFsZ29yaXRobSBpcyBzb21ldGhpbmcgbGlrZSB0aGlzOiBUaGUgbGFzdF9yZXF1ZXN0CisJLy8gdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBsYXN0IGFjY2Vzc2VkIEJpdCBNYXAuIFdoZW4gc3VjaCBhCisJLy8gY29uZGl0aW9uIG9jY3Vycywgd2UgdHJ5IHRvIGZpbmQgYSBmcmVlIGJsb2NrIGluIHRoZQorCS8vIGN1cnJlbnQgYml0bWFwLCBvciBzdWNjZWVkaW5nIGJpdG1hcHMgdW50aWwgdGhlIGxhc3QgYml0bWFwCisJLy8gaXMgcmVhY2hlZC4gSWYgbm8gZnJlZSBibG9jayB0dXJucyB1cCwgd2UgcmVzb3J0IHRvIEZpcnN0CisJLy8gRml0IG1ldGhvZC4KKworCS8vIFdBUk5JTkc6IERvIG5vdCByZS1vcmRlciB0aGUgY29uZGl0aW9uIGluIHRoZSB3aGlsZQorCS8vIHN0YXRlbWVudCBiZWxvdywgYmVjYXVzZSBpdCByZWxpZXMgb24gQysrJ3Mgc2hvcnQtY2lyY3VpdAorCS8vIGV2YWx1YXRpb24uIFRoZSByZXR1cm4gZnJvbSBfU19sYXN0X3JlcXVlc3QtPl9NX2dldCgpIHdpbGwKKwkvLyBOT1QgYmUgZGVyZWZlcmVuY2UgYWJsZSBpZiBfU19sYXN0X3JlcXVlc3QtPl9NX2ZpbmlzaGVkKCkKKwkvLyByZXR1cm5zIHRydWUuIFRoaXMgd291bGQgaW5ldml0YWJseSBsZWFkIHRvIGEgTlVMTCBwb2ludGVyCisJLy8gZGVyZWZlcmVuY2UgaWYgdGlua2VyZWQgd2l0aC4KKwl3aGlsZSAoX1NfbGFzdF9yZXF1ZXN0Ll9NX2ZpbmlzaGVkKCkgPT0gZmFsc2UKKwkgICAgICAgJiYgKCooX1NfbGFzdF9yZXF1ZXN0Ll9NX2dldCgpKSA9PSAwKSkKKwkgIF9TX2xhc3RfcmVxdWVzdC5vcGVyYXRvcisrKCk7CisKKwlpZiAoX19idWlsdGluX2V4cGVjdChfU19sYXN0X3JlcXVlc3QuX01fZmluaXNoZWQoKSA9PSB0cnVlLCBmYWxzZSkpCisJICB7CisJICAgIC8vIEZhbGwgQmFjayB0byBGaXJzdCBGaXQgYWxnb3JpdGhtLgorCSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZGV0YWlsOjpfRmZpdF9maW5kZXI8X0FsbG9jX2Jsb2NrKj4gX0ZGRjsKKwkgICAgX0ZGRiBfX2ZmZjsKKwkgICAgX0JQaXRlciBfX2JwaSA9IF9TX2ZpbmQoX19kZXRhaWw6Ol9GdW5jdG9yX1JlZjxfRkZGPihfX2ZmZikpOworCisJICAgIGlmIChfX2JwaSAhPSBfU19tZW1fYmxvY2tzLmVuZCgpKQorCSAgICAgIHsKKwkJLy8gU2VhcmNoIHdhcyBzdWNjZXNzZnVsLiBPaywgbm93IG1hcmsgdGhlIGZpcnN0IGJpdCBmcm9tCisJCS8vIHRoZSByaWdodCBhcyAwLCBtZWFuaW5nIEFsbG9jYXRlZC4gVGhpcyBiaXQgaXMgb2J0YWluZWQKKwkJLy8gYnkgY2FsbGluZyBfTV9nZXQoKSBvbiBfX2ZmZi4KKwkJc2l6ZV90IF9fbnpfYml0ID0gX0JpdF9zY2FuX2ZvcndhcmQoKl9fZmZmLl9NX2dldCgpKTsKKwkJX19kZXRhaWw6Ol9fYml0X2FsbG9jYXRlKF9fZmZmLl9NX2dldCgpLCBfX256X2JpdCk7CisKKwkJX1NfbGFzdF9yZXF1ZXN0Ll9NX3Jlc2V0KF9fYnBpIC0gX1NfbWVtX2Jsb2Nrcy5iZWdpbigpKTsKKworCQkvLyBOb3csIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgYml0IHdlIG1hcmtlZCBhcyBhbGxvY2F0ZWQuCisJCXBvaW50ZXIgX19yZXQgPSByZWludGVycHJldF9jYXN0PHBvaW50ZXI+CisJCSAgKF9fYnBpLT5maXJzdCArIF9fZmZmLl9NX29mZnNldCgpICsgX19uel9iaXQpOworCQlzaXplX3QqIF9fcHVzZV9jb3VudCA9IAorCQkgIHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4KKwkJICAoX19icGktPmZpcnN0KSAtIChfX2RldGFpbDo6X19udW1fYml0bWFwcygqX19icGkpICsgMSk7CisJCQorCQkrKygqX19wdXNlX2NvdW50KTsKKwkJcmV0dXJuIF9fcmV0OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJLy8gU2VhcmNoIHdhcyB1bnN1Y2Nlc3NmdWwuIFdlIEFkZCBtb3JlIG1lbW9yeSB0byB0aGUKKwkJLy8gcG9vbCBieSBjYWxsaW5nIF9TX3JlZmlsbF9wb29sKCkuCisJCV9TX3JlZmlsbF9wb29sKCk7CisKKwkJLy8gX01fUmVzZXQgdGhlIF9TX2xhc3RfcmVxdWVzdCBzdHJ1Y3R1cmUgdG8gdGhlIGZpcnN0CisJCS8vIGZyZWUgYmxvY2sncyBiaXQgbWFwLgorCQlfU19sYXN0X3JlcXVlc3QuX01fcmVzZXQoX1NfbWVtX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKworCQkvLyBOb3csIG1hcmsgdGhhdCBiaXQgYXMgYWxsb2NhdGVkLgorCSAgICAgIH0KKwkgIH0KKworCS8vIF9TX2xhc3RfcmVxdWVzdCBob2xkcyBhIHBvaW50ZXIgdG8gYSB2YWxpZCBiaXQgbWFwLCB0aGF0CisJLy8gcG9pbnRzIHRvIGEgZnJlZSBibG9jayBpbiBtZW1vcnkuCisJc2l6ZV90IF9fbnpfYml0ID0gX0JpdF9zY2FuX2ZvcndhcmQoKl9TX2xhc3RfcmVxdWVzdC5fTV9nZXQoKSk7CisJX19kZXRhaWw6Ol9fYml0X2FsbG9jYXRlKF9TX2xhc3RfcmVxdWVzdC5fTV9nZXQoKSwgX19uel9iaXQpOworCisJcG9pbnRlciBfX3JldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4KKwkgIChfU19sYXN0X3JlcXVlc3QuX01fYmFzZSgpICsgX1NfbGFzdF9yZXF1ZXN0Ll9NX29mZnNldCgpICsgX19uel9iaXQpOworCisJc2l6ZV90KiBfX3B1c2VfY291bnQgPSByZWludGVycHJldF9jYXN0PHNpemVfdCo+CisJICAoX1NfbWVtX2Jsb2Nrc1tfU19sYXN0X3JlcXVlc3QuX01fd2hlcmUoKV0uZmlyc3QpCisJICAtIChfX2RldGFpbDo6CisJICAgICBfX251bV9iaXRtYXBzKF9TX21lbV9ibG9ja3NbX1NfbGFzdF9yZXF1ZXN0Ll9NX3doZXJlKCldKSArIDEpOworCisJKysoKl9fcHVzZV9jb3VudCk7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICAvKiogQGJyaWVmICBEZWFsbG9jYXRlcyBtZW1vcnkgdGhhdCBiZWxvbmdzIHRvIGEgc2luZ2xlIG9iamVjdCBvZgorICAgICAgICogIHNpemUgc2l6ZW9mKF9UcCkuCisgICAgICAgKgorICAgICAgICogIENvbXBsZXhpdHk6IE8obGcoTikpLCBidXQgdGhlIHdvcnN0IGNhc2UgaXMgbm90IGhpdAorICAgICAgICogIG9mdGVuISAgVGhpcyBpcyBiZWNhdXNlIGNvbnRhaW5lcnMgdXN1YWxseSBkZWFsbG9jYXRlIG1lbW9yeQorICAgICAgICogIGNsb3NlIHRvIGVhY2ggb3RoZXIgYW5kIHRoaXMgY2FzZSBpcyBoYW5kbGVkIGluIE8oMSkgdGltZSBieQorICAgICAgICogIHRoZSBkZWFsbG9jYXRlIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB2b2lkIAorICAgICAgX01fZGVhbGxvY2F0ZV9zaW5nbGVfb2JqZWN0KHBvaW50ZXIgX19wKSB0aHJvdygpCisgICAgICB7CisjaWYgZGVmaW5lZCBfX0dUSFJFQURTCisJX19zY29wZWRfbG9jayBfX2JpdF9sb2NrKF9TX211dCk7CisjZW5kaWYKKwlfQWxsb2NfYmxvY2sqIF9fcmVhbF9wID0gcmVpbnRlcnByZXRfY2FzdDxfQWxsb2NfYmxvY2sqPihfX3ApOworCisJdHlwZWRlZiB0eXBlbmFtZSBfQlBWZWN0b3I6Oml0ZXJhdG9yIF9JdGVyYXRvcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CUFZlY3Rvcjo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlX3R5cGU7CisKKwlfRGlmZmVyZW5jZV90eXBlIF9fZGlmZjsKKwlsb25nIF9fZGlzcGxhY2VtZW50OworCisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9TX2xhc3RfZGVhbGxvY19pbmRleCA+PSAwKTsKKworCV9fZGV0YWlsOjpfSW5jbHVzaXZlX2JldHdlZW48X0FsbG9jX2Jsb2NrKj4gX19pYnQoX19yZWFsX3ApOworCWlmIChfX2lidChfU19tZW1fYmxvY2tzW19TX2xhc3RfZGVhbGxvY19pbmRleF0pKQorCSAgeworCSAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX1NfbGFzdF9kZWFsbG9jX2luZGV4CisJCQkJICA8PSBfU19tZW1fYmxvY2tzLnNpemUoKSAtIDEpOworCisJICAgIC8vIEluaXRpYWwgQXNzdW1wdGlvbiB3YXMgY29ycmVjdCEKKwkgICAgX19kaWZmID0gX1NfbGFzdF9kZWFsbG9jX2luZGV4OworCSAgICBfX2Rpc3BsYWNlbWVudCA9IF9fcmVhbF9wIC0gX1NfbWVtX2Jsb2Nrc1tfX2RpZmZdLmZpcnN0OworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgX0l0ZXJhdG9yIF9pdGVyID0gX1NfZmluZChfX2lidCk7CisKKwkgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9pdGVyICE9IF9TX21lbV9ibG9ja3MuZW5kKCkpOworCisJICAgIF9fZGlmZiA9IF9pdGVyIC0gX1NfbWVtX2Jsb2Nrcy5iZWdpbigpOworCSAgICBfX2Rpc3BsYWNlbWVudCA9IF9fcmVhbF9wIC0gX1NfbWVtX2Jsb2Nrc1tfX2RpZmZdLmZpcnN0OworCSAgICBfU19sYXN0X2RlYWxsb2NfaW5kZXggPSBfX2RpZmY7CisJICB9CisKKwkvLyBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBpdGVyYXRvciB0aGF0IGhhcyBiZWVuIGZvdW5kLgorCWNvbnN0IHNpemVfdCBfX3JvdGF0ZSA9IChfX2Rpc3BsYWNlbWVudAorCQkJCSAlIHNpemVfdChfX2RldGFpbDo6Yml0c19wZXJfYmxvY2spKTsKKwlzaXplX3QqIF9fYml0bWFwQyA9IAorCSAgcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPgorCSAgKF9TX21lbV9ibG9ja3NbX19kaWZmXS5maXJzdCkgLSAxOworCV9fYml0bWFwQyAtPSAoX19kaXNwbGFjZW1lbnQgLyBzaXplX3QoX19kZXRhaWw6OmJpdHNfcGVyX2Jsb2NrKSk7CisgICAgICAKKwlfX2RldGFpbDo6X19iaXRfZnJlZShfX2JpdG1hcEMsIF9fcm90YXRlKTsKKwlzaXplX3QqIF9fcHVzZV9jb3VudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4KKwkgIChfU19tZW1fYmxvY2tzW19fZGlmZl0uZmlyc3QpCisJICAtIChfX2RldGFpbDo6X19udW1fYml0bWFwcyhfU19tZW1fYmxvY2tzW19fZGlmZl0pICsgMSk7CisJCisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKCpfX3B1c2VfY291bnQgIT0gMCk7CisKKwktLSgqX19wdXNlX2NvdW50KTsKKworCWlmIChfX2J1aWx0aW5fZXhwZWN0KCpfX3B1c2VfY291bnQgPT0gMCwgZmFsc2UpKQorCSAgeworCSAgICBfU19ibG9ja19zaXplIC89IDI7CisJICAKKwkgICAgLy8gV2UgY2FuIHNhZmVseSByZW1vdmUgdGhpcyBibG9jay4KKwkgICAgLy8gX0Jsb2NrX3BhaXIgX19icCA9IF9TX21lbV9ibG9ja3NbX19kaWZmXTsKKwkgICAgdGhpcy0+X01faW5zZXJ0KF9fcHVzZV9jb3VudCk7CisJICAgIF9TX21lbV9ibG9ja3MuZXJhc2UoX1NfbWVtX2Jsb2Nrcy5iZWdpbigpICsgX19kaWZmKTsKKworCSAgICAvLyBSZXNldCB0aGUgX1NfbGFzdF9yZXF1ZXN0IHZhcmlhYmxlIHRvIHJlZmxlY3QgdGhlCisJICAgIC8vIGVyYXNlZCBibG9jay4gV2UgZG8gdGhpcyB0byBwcm90ZWN0IGZ1dHVyZSByZXF1ZXN0cworCSAgICAvLyBhZnRlciB0aGUgbGFzdCBibG9jayBoYXMgYmVlbiByZW1vdmVkIGZyb20gYSBwYXJ0aWN1bGFyCisJICAgIC8vIG1lbW9yeSBDaHVuaywgd2hpY2ggaW4gdHVybiBoYXMgYmVlbiByZXR1cm5lZCB0byB0aGUKKwkgICAgLy8gZnJlZSBsaXN0LCBhbmQgaGVuY2UgaGFkIGJlZW4gZXJhc2VkIGZyb20gdGhlIHZlY3RvciwKKwkgICAgLy8gc28gdGhlIHNpemUgb2YgdGhlIHZlY3RvciBnZXRzIHJlZHVjZWQgYnkgMS4KKwkgICAgaWYgKChfRGlmZmVyZW5jZV90eXBlKV9TX2xhc3RfcmVxdWVzdC5fTV93aGVyZSgpID49IF9fZGlmZi0tKQorCSAgICAgIF9TX2xhc3RfcmVxdWVzdC5fTV9yZXNldChfX2RpZmYpOyAKKworCSAgICAvLyBJZiB0aGUgSW5kZXggaW50byB0aGUgdmVjdG9yIG9mIHRoZSByZWdpb24gb2YgbWVtb3J5CisJICAgIC8vIHRoYXQgbWlnaHQgaG9sZCB0aGUgbmV4dCBhZGRyZXNzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8KKwkgICAgLy8gZGVhbGxvY2F0ZWQgbWF5IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCBkdWUgdG8gdGhlIGFib3ZlCisJICAgIC8vIGVyYXNlIHByb2NlZHVyZSBiZWluZyBjYWxsZWQgb24gdGhlIHZlY3RvciwgaGVuY2Ugd2UKKwkgICAgLy8gdHJ5IHRvIHJlc3RvcmUgdGhpcyBpbnZhcmlhbnQgdG9vLgorCSAgICBpZiAoX1NfbGFzdF9kZWFsbG9jX2luZGV4ID49IF9TX21lbV9ibG9ja3Muc2l6ZSgpKQorCSAgICAgIHsKKwkJX1NfbGFzdF9kZWFsbG9jX2luZGV4ID0oX19kaWZmICE9IC0xID8gX19kaWZmIDogMCk7CisJCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfU19sYXN0X2RlYWxsb2NfaW5kZXggPj0gMCk7CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgYml0bWFwX2FsbG9jYXRvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyB9CisKKyAgICAgIGJpdG1hcF9hbGxvY2F0b3IoY29uc3QgYml0bWFwX2FsbG9jYXRvciYpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGJpdG1hcF9hbGxvY2F0b3IoY29uc3QgYml0bWFwX2FsbG9jYXRvcjxfVHAxPiYpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgICB7IH0KKworICAgICAgfmJpdG1hcF9hbGxvY2F0b3IoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgfQorCisgICAgICBwb2ludGVyIAorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKKwkgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fbiA9PSAxLCB0cnVlKSkKKwkgIHJldHVybiB0aGlzLT5fTV9hbGxvY2F0ZV9zaW5nbGVfb2JqZWN0KCk7CisJZWxzZQorCSAgeyAKKwkgICAgY29uc3Qgc2l6ZV90eXBlIF9fYiA9IF9fbiAqIHNpemVvZih2YWx1ZV90eXBlKTsKKwkgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cG9pbnRlcj4oOjpvcGVyYXRvciBuZXcoX19iKSk7CisJICB9CisgICAgICB9CisKKyAgICAgIHBvaW50ZXIgCisgICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCB0eXBlbmFtZSBiaXRtYXBfYWxsb2NhdG9yPHZvaWQ+Ojpjb25zdF9wb2ludGVyKQorICAgICAgeyByZXR1cm4gYWxsb2NhdGUoX19uKTsgfQorCisgICAgICB2b2lkIAorICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikgdGhyb3coKQorICAgICAgeworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcCAhPSAwLCB0cnVlKSkKKwkgIHsKKwkgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19uID09IDEsIHRydWUpKQorCSAgICAgIHRoaXMtPl9NX2RlYWxsb2NhdGVfc2luZ2xlX29iamVjdChfX3ApOworCSAgICBlbHNlCisJICAgICAgOjpvcGVyYXRvciBkZWxldGUoX19wKTsKKwkgIH0KKyAgICAgIH0KKworICAgICAgcG9pbnRlciAKKyAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9fcikgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX19yKTsgfQorCisgICAgICBjb25zdF9wb2ludGVyIAorICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX19yKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3IpOyB9CisKKyAgICAgIHNpemVfdHlwZSAKKyAgICAgIG1heF9zaXplKCkgY29uc3QgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKHZhbHVlX3R5cGUpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGNvbnN0cnVjdChfVXAqIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyA6Om5ldygodm9pZCAqKV9fcCkgX1VwKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICB2b2lkIAorICAgICAgICBkZXN0cm95KF9VcCogX19wKQorICAgICAgICB7IF9fcC0+fl9VcCgpOyB9CisjZWxzZQorICAgICAgdm9pZCAKKyAgICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3RfcmVmZXJlbmNlIF9fZGF0YSkKKyAgICAgIHsgOjpuZXcoKHZvaWQgKilfX3ApIHZhbHVlX3R5cGUoX19kYXRhKTsgfQorCisgICAgICB2b2lkIAorICAgICAgZGVzdHJveShwb2ludGVyIF9fcCkKKyAgICAgIHsgX19wLT5+dmFsdWVfdHlwZSgpOyB9CisjZW5kaWYKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgYm9vbCAKKyAgICBvcGVyYXRvcj09KGNvbnN0IGJpdG1hcF9hbGxvY2F0b3I8X1RwMT4mLCAKKwkgICAgICAgY29uc3QgYml0bWFwX2FsbG9jYXRvcjxfVHAyPiYpIHRocm93KCkKKyAgICB7IHJldHVybiB0cnVlOyB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgIGJvb2wgCisgICAgb3BlcmF0b3IhPShjb25zdCBiaXRtYXBfYWxsb2NhdG9yPF9UcDE+JiwgCisJICAgICAgIGNvbnN0IGJpdG1hcF9hbGxvY2F0b3I8X1RwMj4mKSB0aHJvdygpIAorICB7IHJldHVybiBmYWxzZTsgfQorCisgIC8vIFN0YXRpYyBtZW1iZXIgZGVmaW5pdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB0eXBlbmFtZSBiaXRtYXBfYWxsb2NhdG9yPF9UcD46Ol9CUFZlY3RvcgorICAgIGJpdG1hcF9hbGxvY2F0b3I8X1RwPjo6X1NfbWVtX2Jsb2NrczsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc2l6ZV90IGJpdG1hcF9hbGxvY2F0b3I8X1RwPjo6X1NfYmxvY2tfc2l6ZSA9IAorICAgIDIgKiBzaXplX3QoX19kZXRhaWw6OmJpdHNfcGVyX2Jsb2NrKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdHlwZW5hbWUgYml0bWFwX2FsbG9jYXRvcjxfVHA+OjpfQlBWZWN0b3I6OnNpemVfdHlwZSAKKyAgICBiaXRtYXBfYWxsb2NhdG9yPF9UcD46Ol9TX2xhc3RfZGVhbGxvY19pbmRleCA9IDA7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9fZGV0YWlsOjpfQml0bWFwX2NvdW50ZXIKKyAgICAgIDx0eXBlbmFtZSBiaXRtYXBfYWxsb2NhdG9yPF9UcD46Ol9BbGxvY19ibG9jayo+CisgICAgYml0bWFwX2FsbG9jYXRvcjxfVHA+OjpfU19sYXN0X3JlcXVlc3QoX1NfbWVtX2Jsb2Nrcyk7CisKKyNpZiBkZWZpbmVkIF9fR1RIUkVBRFMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHR5cGVuYW1lIGJpdG1hcF9hbGxvY2F0b3I8X1RwPjo6X19tdXRleF90eXBlCisgICAgYml0bWFwX2FsbG9jYXRvcjxfVHA+OjpfU19tdXQ7CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBfX2dudV9jeHgKKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9jYXN0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9jYXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxYTk2MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2Nhc3QuaApAQCAtMCwwICsxLDEyMSBAQAorLy8gPGNhc3QuaD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9jYXN0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtleHQvcG9pbnRlci5ofQorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfQ0FTVF9ICisjZGVmaW5lIF9HTElCQ1hYX0NBU1RfSCAxCisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogVGhlc2UgZnVuY3Rpb25zIGFyZSBoZXJlIHRvIGFsbG93IGNvbnRhaW5lcnMgdG8gc3VwcG9ydCBub24gc3RhbmRhcmQKKyAgICogcG9pbnRlciB0eXBlcy4gIEZvciBub3JtYWwgcG9pbnRlcnMsIHRoZXNlIHJlc29sdmUgdG8gdGhlIHVzZSBvZiB0aGUKKyAgICogc3RhbmRhcmQgY2FzdCBvcGVyYXRpb24uICBGb3Igb3RoZXIgdHlwZXMgdGhlIGZ1bmN0aW9ucyB3aWxsIHBlcmZvcm0KKyAgICogdGhlIGFwcHJwcmlhdGUgY2FzdCB0by9mcm9tIHRoZSBjdXN0b20gcG9pbnRlciBjbGFzcyBzbyBsb25nIGFzIHRoYXQKKyAgICogY2xhc3MgbWVldHMgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgKiAxKSBoYXMgYSB0eXBlZGVmIGVsZW1lbnRfdHlwZSB3aGljaCBuYW1lcyB0ZWhlIHR5cGUgaXQgcG9pbnRzIHRvLgorICAgKiAyKSBoYXMgYSBnZXQoKSBjb25zdCBtZXRob2Qgd2hpY2ggcmV0dXJucyBlbGVtZW50X3R5cGUqLgorICAgKiAzKSBoYXMgYSBjb25zdHJ1Y3RvciB3aGljaCBjYW4gdGFrZSBvbmUgZWxlbWVudF90eXBlKiBhcmd1bWVudC4KKyAgICovCisKKyAgLyoqCisgICAqIFRoaXMgdHlwZSBzdXBwb3J0cyB0aGUgc2VtYW50aWNzIG9mIHRoZSBwb2ludGVyIGNhc3Qgb3BlcmF0b3JzIChiZWxvdy4pCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVG9UeXBlPgorICAgIHN0cnVjdCBfQ2FzdGVyCisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIF9Ub1R5cGU6OmVsZW1lbnRfdHlwZSogIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvVHlwZT4KKyAgICBzdHJ1Y3QgX0Nhc3RlcjxfVG9UeXBlKj4KKyAgICB7IHR5cGVkZWYgX1RvVHlwZSogIHR5cGU7IH07CisKKyAgLyoqCisgICAqIENhc3Rpbmcgb3BlcmF0aW9ucyBmb3IgY2FzZXMgd2hlcmUgX0Zyb21UeXBlIGlzIG5vdCBhIHN0YW5kYXJkIHBvaW50ZXIuCisgICAqIF9Ub1R5cGUgY2FuIGJlIGEgc3RhbmRhcmQgb3Igbm9uLXN0YW5kYXJkIHBvaW50ZXIuICBHaXZlbiB0aGF0IF9Gcm9tVHlwZQorICAgKiBpcyBub3QgYSBwb2ludGVyLCBpdCBtdXN0IGhhdmUgYSBnZXQoKSBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBzdGFuZGFyZAorICAgKiBwb2ludGVyIGVxdWl2YWxlbnQgb2YgdGhlIGFkZHJlc3MgaXQgcG9pbnRzIHRvLCBhbmQgbXVzdCBoYXZlIGFuCisgICAqIGVsZW1lbnRfdHlwZSB0eXBlZGVmIHdoaWNoIG5hbWVzIHRoZSB0eXBlIGl0IHBvaW50cyB0by4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub1R5cGUsIHR5cGVuYW1lIF9Gcm9tVHlwZT4KKyAgICBpbmxpbmUgX1RvVHlwZQorICAgIF9fc3RhdGljX3BvaW50ZXJfY2FzdChjb25zdCBfRnJvbVR5cGUmIF9fYXJnKQorICAgIHsgcmV0dXJuIF9Ub1R5cGUoc3RhdGljX2Nhc3Q8dHlwZW5hbWUgX0Nhc3RlcjxfVG9UeXBlPjo6CisJCSAgICAgdHlwZT4oX19hcmcuZ2V0KCkpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub1R5cGUsIHR5cGVuYW1lIF9Gcm9tVHlwZT4KKyAgICBpbmxpbmUgX1RvVHlwZQorICAgIF9fZHluYW1pY19wb2ludGVyX2Nhc3QoY29uc3QgX0Zyb21UeXBlJiBfX2FyZykKKyAgICB7IHJldHVybiBfVG9UeXBlKGR5bmFtaWNfY2FzdDx0eXBlbmFtZSBfQ2FzdGVyPF9Ub1R5cGU+OjoKKwkJICAgICB0eXBlPihfX2FyZy5nZXQoKSkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvVHlwZSwgdHlwZW5hbWUgX0Zyb21UeXBlPgorICAgIGlubGluZSBfVG9UeXBlCisgICAgX19jb25zdF9wb2ludGVyX2Nhc3QoY29uc3QgX0Zyb21UeXBlJiBfX2FyZykKKyAgICB7IHJldHVybiBfVG9UeXBlKGNvbnN0X2Nhc3Q8dHlwZW5hbWUgX0Nhc3RlcjxfVG9UeXBlPjo6CisJCSAgICAgdHlwZT4oX19hcmcuZ2V0KCkpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ub1R5cGUsIHR5cGVuYW1lIF9Gcm9tVHlwZT4KKyAgICBpbmxpbmUgX1RvVHlwZQorICAgIF9fcmVpbnRlcnByZXRfcG9pbnRlcl9jYXN0KGNvbnN0IF9Gcm9tVHlwZSYgX19hcmcpCisgICAgeyByZXR1cm4gX1RvVHlwZShyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIF9DYXN0ZXI8X1RvVHlwZT46OgorCQkgICAgIHR5cGU+KF9fYXJnLmdldCgpKSk7IH0KKworICAvKioKKyAgICogQ2FzdGluZyBvcGVyYXRpb25zIGZvciBjYXNlcyB3aGVyZSBfRnJvbVR5cGUgaXMgYSBzdGFuZGFyZCBwb2ludGVyLgorICAgKiBfVG9UeXBlIGNhbiBiZSBhIHN0YW5kYXJkIG9yIG5vbi1zdGFuZGFyZCBwb2ludGVyLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvVHlwZSwgdHlwZW5hbWUgX0Zyb21UeXBlPgorICAgIGlubGluZSBfVG9UeXBlCisgICAgX19zdGF0aWNfcG9pbnRlcl9jYXN0KF9Gcm9tVHlwZSogX19hcmcpCisgICAgeyByZXR1cm4gX1RvVHlwZShzdGF0aWNfY2FzdDx0eXBlbmFtZSBfQ2FzdGVyPF9Ub1R5cGU+OjoKKwkJICAgICB0eXBlPihfX2FyZykpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvVHlwZSwgdHlwZW5hbWUgX0Zyb21UeXBlPgorICAgIGlubGluZSBfVG9UeXBlCisgICAgX19keW5hbWljX3BvaW50ZXJfY2FzdChfRnJvbVR5cGUqIF9fYXJnKQorICAgIHsgcmV0dXJuIF9Ub1R5cGUoZHluYW1pY19jYXN0PHR5cGVuYW1lIF9DYXN0ZXI8X1RvVHlwZT46OgorCQkgICAgIHR5cGU+KF9fYXJnKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVG9UeXBlLCB0eXBlbmFtZSBfRnJvbVR5cGU+CisgICAgaW5saW5lIF9Ub1R5cGUKKyAgICBfX2NvbnN0X3BvaW50ZXJfY2FzdChfRnJvbVR5cGUqIF9fYXJnKQorICAgIHsgcmV0dXJuIF9Ub1R5cGUoY29uc3RfY2FzdDx0eXBlbmFtZSBfQ2FzdGVyPF9Ub1R5cGU+OjoKKwkJICAgICB0eXBlPihfX2FyZykpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RvVHlwZSwgdHlwZW5hbWUgX0Zyb21UeXBlPgorICAgIGlubGluZSBfVG9UeXBlCisgICAgX19yZWludGVycHJldF9wb2ludGVyX2Nhc3QoX0Zyb21UeXBlKiBfX2FyZykKKyAgICB7IHJldHVybiBfVG9UeXBlKHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgX0Nhc3RlcjxfVG9UeXBlPjo6CisJCSAgICAgdHlwZT4oX19hcmcpKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9DQVNUX0gKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2NtYXRoIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvY21hdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3YTUzZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2NtYXRoCkBAIC0wLDAgKzEsMTUyIEBACisvLyBNYXRoIGV4dGVuc2lvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvY21hdGgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9FWFRfQ01BVEgKKyNkZWZpbmUgX0VYVF9DTUFUSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIEEgY2xhc3MgZm9yIG1hdGggY29uc3RhbnRzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgc3RydWN0IF9fbWF0aF9jb25zdGFudHMKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgICAvLyBDb25zdGFudCBAZiQgXHBpIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjlMOworICAgICAgLy8gQ29uc3RhbnQgQGYkIFxwaSAvIDIgQGYkLgorICAgICAgc3RhdGljIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19waV9oYWxmID0gMS41NzA3OTYzMjY3OTQ4OTY2MTkyMzEzMjE2OTE2Mzk3NTE0TDsKKyAgICAgIC8vIENvbnN0YW50IEBmJCBccGkgLyAzIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fcGlfdGhpcmQgPSAxLjA0NzE5NzU1MTE5NjU5Nzc0NjE1NDIxNDQ2MTA5MzE2NzZMOworICAgICAgLy8gQ29uc3RhbnQgQGYkIFxwaSAvIDQgQGYkLgorICAgICAgc3RhdGljIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19waV9xdWFydGVyID0gMC43ODUzOTgxNjMzOTc0NDgzMDk2MTU2NjA4NDU4MTk4NzU3TDsKKyAgICAgIC8vIENvbnN0YW50IEBmJCBcc3FydChccGkgLyAyKSBAZiQuCisgICAgICBzdGF0aWMgY29uc3RleHByIF9SZWFsVHlwZSBfX3Jvb3RfcGlfZGl2XzIgPSAxLjI1MzMxNDEzNzMxNTUwMDI1MTIwNzg4MjY0MjQwNTUyMjZMOworICAgICAgLy8gQ29uc3RhbnQgQGYkIDEgLyBccGkgQGYkLgorICAgICAgc3RhdGljIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19vbmVfZGl2X3BpID0gMC4zMTgzMDk4ODYxODM3OTA2NzE1Mzc3Njc1MjY3NDUwMjg3TDsKKyAgICAgIC8vIENvbnN0YW50IEBmJCAyIC8gXHBpIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fdHdvX2Rpdl9waSA9IDAuNjM2NjE5NzcyMzY3NTgxMzQzMDc1NTM1MDUzNDkwMDU3NEw7CisgICAgICAvLyBDb25zdGFudCBAZiQgMiAvIFxzcXJ0KFxwaSkgQGYkLgorICAgICAgc3RhdGljIGNvbnN0ZXhwciBfUmVhbFR5cGUgX190d29fZGl2X3Jvb3RfcGkgPSAxLjEyODM3OTE2NzA5NTUxMjU3Mzg5NjE1ODkwMzEyMTU0NTJMOworCisgICAgICAvLyBDb25zdGFudCBFdWxlcidzIG51bWJlciBAZiQgZSBAZiQuCisgICAgICBzdGF0aWMgY29uc3RleHByIF9SZWFsVHlwZSBfX2UgPSAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MjVMOworICAgICAgLy8gQ29uc3RhbnQgQGYkIDEgLyBlIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fb25lX2Rpdl9lID0gMC4zNjc4Nzk0NDExNzE0NDIzMjE1OTU1MjM3NzAxNjE0NjA4N0w7CisgICAgICAvLyBDb25zdGFudCBAZiQgXGxvZ18yKGUpIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbG9nMl9lID0gMS40NDI2OTUwNDA4ODg5NjM0MDczNTk5MjQ2ODEwMDE4OTIxTDsKKyAgICAgIC8vIENvbnN0YW50IEBmJCBcbG9nXzEwKGUpIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbG9nMTBfZSA9IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MUw7CisgICAgICAvLyBDb25zdGFudCBAZiQgXGxuKDIpIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbG5fMiA9IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2Nkw7CisgICAgICAvLyBDb25zdGFudCBAZiQgXGxuKDMpIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbG5fMyA9IDEuMDk4NjEyMjg4NjY4MTA5NjkxMzk1MjQ1MjM2OTIyNTI1N0w7CisgICAgICAvLyBDb25zdGFudCBAZiQgXGxuKDEwKSBAZiQuCisgICAgICBzdGF0aWMgY29uc3RleHByIF9SZWFsVHlwZSBfX2xuXzEwID0gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyTDsKKworICAgICAgLy8gQ29uc3RhbnQgRXVsZXItTWFzY2hlcm9uaSBAZiQgXGdhbW1hX0UgQGYkLgorICAgICAgc3RhdGljIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19nYW1tYV9lID0gMC41NzcyMTU2NjQ5MDE1MzI4NjA2MDY1MTIwOTAwODI0MDI0TDsKKyAgICAgIC8vIENvbnN0YW50IEdvbGRlbiBSYXRpbyBAZiQgXHBoaSBAZiQuCisgICAgICBzdGF0aWMgY29uc3RleHByIF9SZWFsVHlwZSBfX3BoaSA9IDEuNjE4MDMzOTg4NzQ5ODk0ODQ4MjA0NTg2ODM0MzY1NjM4MUw7CisKKyAgICAgIC8vIENvbnN0YW50IEBmJCBcc3FydCgyKSBAZiQuCisgICAgICBzdGF0aWMgY29uc3RleHByIF9SZWFsVHlwZSBfX3Jvb3RfMiA9IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAxNjg4NzI0MjA5Njk4MUw7CisgICAgICAvLyBDb25zdGFudCBAZiQgXHNxcnQoMykgQGYkLgorICAgICAgc3RhdGljIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19yb290XzMgPSAxLjczMjA1MDgwNzU2ODg3NzI5MzUyNzQ0NjM0MTUwNTg3MjRMOworICAgICAgLy8gQ29uc3RhbnQgQGYkIFxzcXJ0KDUpIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fcm9vdF81ID0gMi4yMzYwNjc5Nzc0OTk3ODk2OTY0MDkxNzM2Njg3MzEyNzYyTDsKKyAgICAgIC8vIENvbnN0YW50IEBmJCBcc3FydCg3KSBAZiQuCisgICAgICBzdGF0aWMgY29uc3RleHByIF9SZWFsVHlwZSBfX3Jvb3RfNyA9IDIuNjQ1NzUxMzExMDY0NTkwNTkwNTAxNjE1NzUzNjM5MjYwNEw7CisgICAgICAvLyBDb25zdGFudCBAZiQgMSAvIFxzcXJ0KDIpIEBmJC4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JlYWxUeXBlIF9fb25lX2Rpdl9yb290XzIgPSAwLjcwNzEwNjc4MTE4NjU0NzUyNDQwMDg0NDM2MjEwNDg0OTBMOworICAgIH07CisKKyAgLy8gQW5kIHRoZSB0ZW1wbGF0ZSBkZWZpbml0aW9ucyBmb3IgdGhlIGNvbnN0YW50cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19tYXRoX2NvbnN0YW50czxfUmVhbFR5cGU+OjpfX3BpOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgY29uc3RleHByIF9SZWFsVHlwZSBfX21hdGhfY29uc3RhbnRzPF9SZWFsVHlwZT46Ol9fcGlfaGFsZjsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19tYXRoX2NvbnN0YW50czxfUmVhbFR5cGU+OjpfX3BpX3RoaXJkOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgY29uc3RleHByIF9SZWFsVHlwZSBfX21hdGhfY29uc3RhbnRzPF9SZWFsVHlwZT46Ol9fcGlfcXVhcnRlcjsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19tYXRoX2NvbnN0YW50czxfUmVhbFR5cGU+OjpfX3Jvb3RfcGlfZGl2XzI7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19vbmVfZGl2X3BpOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgY29uc3RleHByIF9SZWFsVHlwZSBfX21hdGhfY29uc3RhbnRzPF9SZWFsVHlwZT46Ol9fdHdvX2Rpdl9waTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19tYXRoX2NvbnN0YW50czxfUmVhbFR5cGU+OjpfX3R3b19kaXZfcm9vdF9waTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19tYXRoX2NvbnN0YW50czxfUmVhbFR5cGU+OjpfX2U7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19vbmVfZGl2X2U7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19sb2cyX2U7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19sb2cxMF9lOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgY29uc3RleHByIF9SZWFsVHlwZSBfX21hdGhfY29uc3RhbnRzPF9SZWFsVHlwZT46Ol9fbG5fMjsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19tYXRoX2NvbnN0YW50czxfUmVhbFR5cGU+OjpfX2xuXzM7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19sbl8xMDsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGNvbnN0ZXhwciBfUmVhbFR5cGUgX19tYXRoX2NvbnN0YW50czxfUmVhbFR5cGU+OjpfX2dhbW1hX2U7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19waGk7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19yb290XzI7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19yb290XzM7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19yb290XzU7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19yb290Xzc7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBjb25zdGV4cHIgX1JlYWxUeXBlIF9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19vbmVfZGl2X3Jvb3RfMjsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBfX2dudV9jeHgKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfRVhUX0NNQVRICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJkZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaApAQCAtMCwwICsxLDUxMiBAQAorLy8gTG9jYWxlIHN1cHBvcnQgKGNvZGVjdnQpIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSBUZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0CisvLworCisvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorCisvKiogQGZpbGUgZXh0L2NvZGVjdnRfc3BlY2lhbGl6YXRpb25zLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9FWFRfQ09ERUNWVF9TUEVDSUFMSVpBVElPTlNfSAorI2RlZmluZSBfRVhUX0NPREVDVlRfU1BFQ0lBTElaQVRJT05TX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxsb2NhbGU+CisjaW5jbHVkZSA8aWNvbnYuaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vLyBFeHRlbnNpb24gdG8gdXNlIGljb252IGZvciBkZWFsaW5nIHdpdGggY2hhcmFjdGVyIGVuY29kaW5ncy4KKyAgLy8gVGhpcyBpbmNsdWRlcyBjb252ZXJzaW9ucyBhbmQgY29tcGFyaXNvbnMgYmV0d2VlbiB2YXJpb3VzIGNoYXJhY3RlcgorICAvLyBzZXRzLiAgVGhpcyBvYmplY3QgZW5jYXBzdWxhdGVzIGRhdGEgdGhhdCBtYXkgbmVlZCB0byBiZSBzaGFyZWQgYmV0d2VlbgorICAvLyBjaGFyX3RyYWl0cywgY29kZWN2dCBhbmQgY3R5cGUuCisgIGNsYXNzIGVuY29kaW5nX3N0YXRlCisgIHsKKyAgcHVibGljOgorICAgIC8vIFR5cGVzOiAKKyAgICAvLyBOQjogQSBjb252ZXJzaW9uIGRlc2NyaXB0b3Igc3Vic3VtZXMgYW5kIGVuaGFuY2VzIHRoZQorICAgIC8vIGZ1bmN0aW9uYWxpdHkgb2YgYSBzaW1wbGUgc3RhdGUgdHlwZSBzdWNoIGFzIG1ic3RhdGVfdC4KKyAgICB0eXBlZGVmIGljb252X3QJZGVzY3JpcHRvcl90eXBlOworICAgIAorICBwcm90ZWN0ZWQ6CisgICAgLy8gTmFtZSBvZiBpbnRlcm5hbCBjaGFyYWN0ZXIgc2V0IGVuY29kaW5nLgorICAgIHN0ZDo6c3RyaW5nCSAgICAgICAJX01faW50X2VuYzsKKworICAgIC8vIE5hbWUgb2YgZXh0ZXJuYWwgY2hhcmFjdGVyIHNldCBlbmNvZGluZy4KKyAgICBzdGQ6OnN0cmluZyAgCV9NX2V4dF9lbmM7CisKKyAgICAvLyBDb252ZXJzaW9uIGRlc2NyaXB0b3IgYmV0d2VlbiBleHRlcm5hbCBlbmNvZGluZyB0byBpbnRlcm5hbCBlbmNvZGluZy4KKyAgICBkZXNjcmlwdG9yX3R5cGUJX01faW5fZGVzYzsKKworICAgIC8vIENvbnZlcnNpb24gZGVzY3JpcHRvciBiZXR3ZWVuIGludGVybmFsIGVuY29kaW5nIHRvIGV4dGVybmFsIGVuY29kaW5nLgorICAgIGRlc2NyaXB0b3JfdHlwZQlfTV9vdXRfZGVzYzsKKworICAgIC8vIFRoZSBieXRlLW9yZGVyIG1hcmtlciBmb3IgdGhlIGV4dGVybmFsIGVuY29kaW5nLCBpZiBuZWNlc3NhcnkuCisgICAgaW50CQkJX01fZXh0X2JvbTsKKworICAgIC8vIFRoZSBieXRlLW9yZGVyIG1hcmtlciBmb3IgdGhlIGludGVybmFsIGVuY29kaW5nLCBpZiBuZWNlc3NhcnkuCisgICAgaW50CQkJX01faW50X2JvbTsKKworICAgIC8vIE51bWJlciBvZiBleHRlcm5hbCBieXRlcyBuZWVkZWQgdG8gY29uc3RydWN0IG9uZSBjb21wbGV0ZQorICAgIC8vIGNoYXJhY3RlciBpbiB0aGUgaW50ZXJuYWwgZW5jb2RpbmcuCisgICAgLy8gTkI6IC0xIGluZGljYXRlcyB2YXJpYWJsZSwgb3Igc3RhdGVmdWwsIGVuY29kaW5ncy4KKyAgICBpbnQgCQlfTV9ieXRlczsKKworICBwdWJsaWM6CisgICAgZXhwbGljaXQgCisgICAgZW5jb2Rpbmdfc3RhdGUoKSAKKyAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApLCBfTV9ieXRlcygwKQorICAgIHsgfQorCisgICAgZXhwbGljaXQgCisgICAgZW5jb2Rpbmdfc3RhdGUoY29uc3QgY2hhciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LCAKKwkJICAgaW50IF9faWJvbSA9IDAsIGludCBfX2Vib20gPSAwLCBpbnQgX19ieXRlcyA9IDEpCisgICAgOiBfTV9pbnRfZW5jKF9faW50KSwgX01fZXh0X2VuYyhfX2V4dCksIF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApLCAKKyAgICAgIF9NX2V4dF9ib20oX19lYm9tKSwgX01faW50X2JvbShfX2lib20pLCBfTV9ieXRlcyhfX2J5dGVzKQorICAgIHsgaW5pdCgpOyB9CisKKyAgICAvLyAyMS4xLjIgdHJhaXRzIHR5cGVkZWZzCisgICAgLy8gcDQKKyAgICAvLyB0eXBlZGVmIFNUQVRFX1Qgc3RhdGVfdHlwZQorICAgIC8vIHJlcXVpcmVzOiBzdGF0ZV90eXBlIHNoYWxsIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZgorICAgIC8vIENvcHlDb25zdHJ1Y3RpYmxlIHR5cGVzICgyMC4xLjMpCisgICAgLy8gTkI6IFRoaXMgZG9lcyBub3QgcHJlc2VydmUgdGhlIGFjdHVhbCBzdGF0ZSBvZiB0aGUgY29udmVyc2lvbgorICAgIC8vIGRlc2NyaXB0b3IgbWVtYmVyLCBidXQgaXQgZG9lcyBkdXBsaWNhdGUgdGhlIGVuY29kaW5nCisgICAgLy8gaW5mb3JtYXRpb24uCisgICAgZW5jb2Rpbmdfc3RhdGUoY29uc3QgZW5jb2Rpbmdfc3RhdGUmIF9fb2JqKSA6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApCisgICAgeyBjb25zdHJ1Y3QoX19vYmopOyB9CisKKyAgICAvLyBOZWVkIGFzc2lnbm1lbnQgb3BlcmF0b3IgYXMgd2VsbC4KKyAgICBlbmNvZGluZ19zdGF0ZSYKKyAgICBvcGVyYXRvcj0oY29uc3QgZW5jb2Rpbmdfc3RhdGUmIF9fb2JqKQorICAgIHsKKyAgICAgIGNvbnN0cnVjdChfX29iaik7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgfmVuY29kaW5nX3N0YXRlKCkKKyAgICB7IGRlc3Ryb3koKTsgfSAKKworICAgIGJvb2wKKyAgICBnb29kKCkgY29uc3QgdGhyb3coKQorICAgIHsgCisgICAgICBjb25zdCBkZXNjcmlwdG9yX3R5cGUgX19lcnIgPSAoaWNvbnZfdCkoLTEpOworICAgICAgYm9vbCBfX3Rlc3QgPSBfTV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnI7IAorICAgICAgX190ZXN0ICY9ICBfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycjsKKyAgICAgIHJldHVybiBfX3Rlc3Q7CisgICAgfQorICAgIAorICAgIGludAorICAgIGNoYXJhY3Rlcl9yYXRpbygpIGNvbnN0CisgICAgeyByZXR1cm4gX01fYnl0ZXM7IH0KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nCisgICAgaW50ZXJuYWxfZW5jb2RpbmcoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2ludF9lbmM7IH0KKworICAgIGludCAKKyAgICBpbnRlcm5hbF9ib20oKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2ludF9ib207IH0KKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nCisgICAgZXh0ZXJuYWxfZW5jb2RpbmcoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2V4dF9lbmM7IH0KKworICAgIGludCAKKyAgICBleHRlcm5hbF9ib20oKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KKworICAgIGNvbnN0IGRlc2NyaXB0b3JfdHlwZSYKKyAgICBpbl9kZXNjcmlwdG9yKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9pbl9kZXNjOyB9CisKKyAgICBjb25zdCBkZXNjcmlwdG9yX3R5cGUmCisgICAgb3V0X2Rlc2NyaXB0b3IoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX291dF9kZXNjOyB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZvaWQKKyAgICBpbml0KCkKKyAgICB7CisgICAgICBjb25zdCBkZXNjcmlwdG9yX3R5cGUgX19lcnIgPSAoaWNvbnZfdCkoLTEpOworICAgICAgY29uc3QgYm9vbCBfX2hhdmVfZW5jb2RpbmdzID0gX01faW50X2VuYy5zaXplKCkgJiYgX01fZXh0X2VuYy5zaXplKCk7CisgICAgICBpZiAoIV9NX2luX2Rlc2MgJiYgX19oYXZlX2VuY29kaW5ncykKKwl7CisJICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLmNfc3RyKCksIF9NX2V4dF9lbmMuY19zdHIoKSk7CisJICBpZiAoX01faW5fZGVzYyA9PSBfX2VycikKKwkgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJlbmNvZGluZ19zdGF0ZTo6X01faW5pdCAiCisJCQkJICAgICJjcmVhdGluZyBpY29udiBpbnB1dCBkZXNjcmlwdG9yIGZhaWxlZCIpKTsKKwl9CisgICAgICBpZiAoIV9NX291dF9kZXNjICYmIF9faGF2ZV9lbmNvZGluZ3MpCisJeworCSAgX01fb3V0X2Rlc2MgPSBpY29udl9vcGVuKF9NX2V4dF9lbmMuY19zdHIoKSwgX01faW50X2VuYy5jX3N0cigpKTsKKwkgIGlmIChfTV9vdXRfZGVzYyA9PSBfX2VycikKKwkgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJlbmNvZGluZ19zdGF0ZTo6X01faW5pdCAiCisJCQkJICAiY3JlYXRpbmcgaWNvbnYgb3V0cHV0IGRlc2NyaXB0b3IgZmFpbGVkIikpOworCX0KKyAgICB9CisKKyAgICB2b2lkCisgICAgY29uc3RydWN0KGNvbnN0IGVuY29kaW5nX3N0YXRlJiBfX29iaikKKyAgICB7CisgICAgICBkZXN0cm95KCk7CisgICAgICBfTV9pbnRfZW5jID0gX19vYmouX01faW50X2VuYzsKKyAgICAgIF9NX2V4dF9lbmMgPSBfX29iai5fTV9leHRfZW5jOworICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4dF9ib207CisgICAgICBfTV9pbnRfYm9tID0gX19vYmouX01faW50X2JvbTsKKyAgICAgIF9NX2J5dGVzID0gX19vYmouX01fYnl0ZXM7CisgICAgICBpbml0KCk7CisgICAgfQorCisgICAgdm9pZAorICAgIGRlc3Ryb3koKSB0aHJvdygpCisgICAgeworICAgICAgY29uc3QgZGVzY3JpcHRvcl90eXBlIF9fZXJyID0gKGljb252X3QpKC0xKTsKKyAgICAgIGlmIChfTV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnIpIAorCXsKKwkgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOworCSAgX01faW5fZGVzYyA9IDA7CisJfQorICAgICAgaWYgKF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyKSAKKwl7CisJICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CisJICBfTV9vdXRfZGVzYyA9IDA7CisJfQorICAgIH0KKyAgfTsKKworICAvLy8gZW5jb2RpbmdfY2hhcl90cmFpdHMKKyAgLy8gQ3VzdG9tIHRyYWl0cyB0eXBlIHdpdGggZW5jb2Rpbmdfc3RhdGUgZm9yIHRoZSBzdGF0ZSB0eXBlLCBhbmQgdGhlCisgIC8vIGFzc29jaWF0ZWQgZnBvczxlbmNvZGluZ19zdGF0ZT4gZm9yIHRoZSBwb3NpdGlvbiB0eXBlLCBhbGwgb3RoZXIKKyAgLy8gYml0cyBlcXVpdmFsZW50IHRvIHRoZSByZXF1aXJlZCBjaGFyX3RyYWl0cyBpbnN0YW50aWF0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBlbmNvZGluZ19jaGFyX3RyYWl0cyA6IHB1YmxpYyBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4KKyAgICB7CisgICAgICB0eXBlZGVmIGVuY29kaW5nX3N0YXRlCQkJCXN0YXRlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6ZnBvczxzdGF0ZV90eXBlPgkJcG9zX3R5cGU7CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB1c2luZyBfX2dudV9jeHg6OmVuY29kaW5nX3N0YXRlOworCisgIC8vLyBjb2RlY3Z0PEludGVyblQsIF9FeHRlcm5ULCBlbmNvZGluZ19zdGF0ZT4gc3BlY2lhbGl6YXRpb24uCisgIC8vIFRoaXMgcGFydGlhbCBzcGVjaWFsaXphdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YgaWNvbnYgdG8gcHJvdmlkZQorICAvLyBjb2RlIGNvbnZlcnNpb25zIGJldHdlZW4gYSBsYXJnZSBudW1iZXIgb2YgY2hhcmFjdGVyIGVuY29kaW5ncy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgorICAgIGNsYXNzIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBlbmNvZGluZ19zdGF0ZT4KKyAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIGVuY29kaW5nX3N0YXRlPgorICAgIHsKKyAgICBwdWJsaWM6ICAgICAgCisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQJCQlyZXN1bHQ7CisgICAgICB0eXBlZGVmIF9JbnRlcm5UIAkJCQkJaW50ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIF9FeHRlcm5UIAkJCQkJZXh0ZXJuX3R5cGU7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6ZW5jb2Rpbmdfc3RhdGUgCQlzdGF0ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpkZXNjcmlwdG9yX3R5cGUgCQlkZXNjcmlwdG9yX3R5cGU7CisKKyAgICAgIC8vIERhdGEgTWVtYmVyczoKKyAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIAkJaWQ7CisKKyAgICAgIGV4cGxpY2l0IAorICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKKyAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQgCisgICAgICBjb2RlY3Z0KHN0YXRlX3R5cGUmIF9fZW5jLCBzaXplX3QgX19yZWZzID0gMCkKKyAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCisgICAgICB7IH0KKworICAgICBwcm90ZWN0ZWQ6CisgICAgICB2aXJ0dWFsIAorICAgICAgfmNvZGVjdnQoKSB7IH0KKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLCAKKwkgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKKworICAgICAgdmlydHVhbCByZXN1bHQKKyAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIAorCQkgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgcmVzdWx0CisgICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCAKKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsIAorCSAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaW50IAorICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOworCisgICAgICB2aXJ0dWFsIGJvb2wgCisgICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKKworICAgICAgdmlydHVhbCBpbnQgCisgICAgICBkb19sZW5ndGgoc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sIAorCQljb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CisKKyAgICAgIHZpcnR1YWwgaW50IAorICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CisgICAgbG9jYWxlOjppZCAKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjppZDsKKworICAvLyBUaGlzIGFkYXB0b3Igd29ya3MgYXJvdW5kIHRoZSBzaWduYXR1cmUgcHJvYmxlbXMgb2YgdGhlIHNlY29uZAorICAvLyBhcmd1bWVudCB0byBpY29udigpOiAgU1VTdjIgYW5kIG90aGVycyB1c2UgJ2NvbnN0IGNoYXIqKicsIGJ1dCBnbGliYyAyLjIKKyAgLy8gdXNlcyAnY2hhcioqJywgd2hpY2ggbWF0Y2hlcyB0aGUgUE9TSVggMTAwMy4xLTIwMDEgc3RhbmRhcmQuCisgIC8vIFVzaW5nIHRoaXMgYWRhcHRvciwgZysrIHdpbGwgZG8gdGhlIHdvcmsgZm9yIHVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHNpemVfdAorICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYykoaWNvbnZfdCwgX1RwLCBzaXplX3QqLCBjaGFyKiosIHNpemVfdCopLAorICAgICAgICAgICAgICAgICAgICBpY29udl90IF9fY2QsIGNoYXIqKiBfX2luYnVmLCBzaXplX3QqIF9faW5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgY2hhcioqIF9fb3V0YnVmLCBzaXplX3QqIF9fb3V0Ynl0ZXMpCisgICAgeyByZXR1cm4gX19mdW5jKF9fY2QsIChfVHApX19pbmJ1ZiwgX19pbmJ5dGVzLCBfX291dGJ1ZiwgX19vdXRieXRlcyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CisgICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjoKKyAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwgCisJICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisJICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKKwkgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKyAgICB7CisgICAgICByZXN1bHQgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6OmVycm9yOworICAgICAgaWYgKF9fc3RhdGUuZ29vZCgpKQorCXsKKwkgIGNvbnN0IGRlc2NyaXB0b3JfdHlwZSYgX19kZXNjID0gX19zdGF0ZS5vdXRfZGVzY3JpcHRvcigpOworCSAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKKwkgIHNpemVfdCBfX2ZieXRlcyA9IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOworCSAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKTsKKwkgIHNpemVfdCBfX3RieXRlcyA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7IAorCSAgCisJICAvLyBBcmd1bWVudCBsaXN0IGZvciBpY29udiBzcGVjaWZpZXMgYSBieXRlIHNlcXVlbmNlLiBUaHVzLAorCSAgLy8gYWxsIHRvL2Zyb20gYXJyYXlzIG11c3QgYmUgYnJ1dGFsbHkgY2FzdGVkIHRvIGNoYXIqLgorCSAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKKwkgIGNoYXIqIF9fY2Zyb207CisJICBzaXplX3QgX19jb252OworCisJICAvLyBTb21lIGVuY29kaW5ncyBuZWVkIGEgYnl0ZSBvcmRlciBtYXJrZXIgYXMgdGhlIGZpcnN0IGl0ZW0KKwkgIC8vIGluIHRoZSBieXRlIHN0cmVhbSwgdG8gZGVzaWduYXRlIGVuZGlhbi1uZXNzLiBUaGUgZGVmYXVsdAorCSAgLy8gdmFsdWUgZm9yIHRoZSBieXRlIG9yZGVyIG1hcmtlciBpcyBOVUxMLCBzbyBpZiB0aGlzIGlzCisJICAvLyB0aGUgY2FzZSwgaXQncyBub3QgbmVjZXNzYXJ5IGFuZCB3ZSBjYW4ganVzdCBnbyBvbiBvdXIKKwkgIC8vIG1lcnJ5IHdheS4KKwkgIGludCBfX2ludF9ib20gPSBfX3N0YXRlLmludGVybmFsX2JvbSgpOworCSAgaWYgKF9faW50X2JvbSkKKwkgICAgewkgIAorCSAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOworCSAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGludGVybl90eXBlKj4KKwkJKF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOworCSAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CisJICAgICAgY2hhcl90cmFpdHM8aW50ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOworCSAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CisJICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCBfX2Rlc2MsICZfX2Nmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZieXRlcywgJl9fY3RvLCAmX190Ynl0ZXMpOyAKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+KF9fZnJvbSk7CisJICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKKwkgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsIF9fZGVzYywgJl9fY2Zyb20sICZfX2ZieXRlcywgCisJCQkJICAgICAgICZfX2N0bywgJl9fdGJ5dGVzKTsgCisJICAgIH0KKworCSAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQorCSAgICB7CisJICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90eXBlKj4oX19jZnJvbSk7CisJICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKKwkgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6b2s7CisJICAgIH0KKwkgIGVsc2UgCisJICAgIHsKKwkgICAgICBpZiAoX19mYnl0ZXMgPCBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKKwkJeworCQkgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOworCQkgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CisJCSAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWw7CisJCX0KKwkgICAgICBlbHNlCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KKyAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBlbmNvZGluZ19zdGF0ZT46OgorICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIAorCSAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorICAgIHsKKyAgICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CisgICAgICBpZiAoX19zdGF0ZS5nb29kKCkpCisJeworCSAgY29uc3QgZGVzY3JpcHRvcl90eXBlJiBfX2Rlc2MgPSBfX3N0YXRlLmluX2Rlc2NyaXB0b3IoKTsKKwkgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CisJICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsgCisJICAKKwkgIC8vIEFyZ3VtZW50IGxpc3QgZm9yIGljb252IHNwZWNpZmllcyBhIGJ5dGUgc2VxdWVuY2UuIFRodXMsCisJICAvLyBhbGwgdG8vZnJvbSBhcnJheXMgbXVzdCBiZSBicnV0YWxseSBjYXN0ZWQgdG8gY2hhciouCisJICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOworCSAgc2l6ZV90IF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udixfX2Rlc2MsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RsZW4pOyAKKwkgIAorCSAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQorCSAgICB7CisJICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKKwkgICAgICBpZiAoX190bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190bykpCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjpub2NvbnY7CisJICAgICAgZWxzZSBpZiAoX190bGVuID09IDApCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjpvazsKKwkgICAgICBlbHNlCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjpwYXJ0aWFsOworCSAgICB9CisJICBlbHNlIAorCSAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OyAKKyAgICB9CisgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgorICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisgICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIGVuY29kaW5nX3N0YXRlPjo6CisgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgCisJICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwkgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsIAorCSAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisgICAgeyAKKyAgICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CisgICAgICBpZiAoX19zdGF0ZS5nb29kKCkpCisJeworCSAgY29uc3QgZGVzY3JpcHRvcl90eXBlJiBfX2Rlc2MgPSBfX3N0YXRlLmluX2Rlc2NyaXB0b3IoKTsKKwkgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CisJICBzaXplX3QgX19mbGVuID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CisJICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOworCSAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7IAorCSAgCisJICAvLyBBcmd1bWVudCBsaXN0IGZvciBpY29udiBzcGVjaWZpZXMgYSBieXRlIHNlcXVlbmNlLiBUaHVzLAorCSAgLy8gYWxsIHRvL2Zyb20gYXJyYXlzIG11c3QgYmUgYnJ1dGFsbHkgY2FzdGVkIHRvIGNoYXIqLgorCSAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKKwkgIGNoYXIqIF9fY2Zyb207CisJICBzaXplX3QgX19jb252OworCisJICAvLyBTb21lIGVuY29kaW5ncyBuZWVkIGEgYnl0ZSBvcmRlciBtYXJrZXIgYXMgdGhlIGZpcnN0IGl0ZW0KKwkgIC8vIGluIHRoZSBieXRlIHN0cmVhbSwgdG8gZGVzaWduYXRlIGVuZGlhbi1uZXNzLiBUaGUgZGVmYXVsdAorCSAgLy8gdmFsdWUgZm9yIHRoZSBieXRlIG9yZGVyIG1hcmtlciBpcyBOVUxMLCBzbyBpZiB0aGlzIGlzCisJICAvLyB0aGUgY2FzZSwgaXQncyBub3QgbmVjZXNzYXJ5IGFuZCB3ZSBjYW4ganVzdCBnbyBvbiBvdXIKKwkgIC8vIG1lcnJ5IHdheS4KKwkgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLmV4dGVybmFsX2JvbSgpOworCSAgaWYgKF9fZXh0X2JvbSkKKwkgICAgewkgIAorCSAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOworCSAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9ICBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+CisJCShfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAoX19zaXplICsgMSkpKTsKKwkgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBlPihfX2V4dF9ib20pOworCSAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKKwkgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOworCSAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgX19kZXNjLCAmX19jZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7IAorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0PGV4dGVybl90eXBlKj4oX19mcm9tKTsKKwkgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOworCSAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgX19kZXNjLCAmX19jZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7IAorCSAgICB9CisKKwkgIAorCSAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQorCSAgICB7CisJICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CisJICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+KF9fY3RvKTsKKwkgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6b2s7CisJICAgIH0KKwkgIGVsc2UgCisJICAgIHsKKwkgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKKwkJeworCQkgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOworCQkgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CisJCSAgX19yZXQgPSBjb2RlY3Z0X2Jhc2U6OnBhcnRpYWw7CisJCX0KKwkgICAgICBlbHNlCisJCV9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX3JldDsgCisgICAgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgorICAgIGludCAKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjoKKyAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKyAgICB7CisgICAgICBpbnQgX19yZXQgPSAwOworICAgICAgaWYgKHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKKwlfX3JldCA9IHNpemVvZihfSW50ZXJuVCkgLyBzaXplb2YoX0V4dGVyblQpOworICAgICAgcmV0dXJuIF9fcmV0OyAKKyAgICB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CisgICAgYm9vbCAKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjoKKyAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CisgICAgaW50IAorICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBlbmNvZGluZ19zdGF0ZT46OgorICAgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgCisJICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisgICAgeyByZXR1cm4gc3RkOjptaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zyb20pKTsgfQorCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gNzQuICBHYXJibGVkIHRleHQgZm9yIGNvZGVjdnQ6OmRvX21heF9sZW5ndGgKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgorICAgIGludCAKKyAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgZW5jb2Rpbmdfc3RhdGU+OjoKKyAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQorICAgIHsgcmV0dXJuIDE7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2NvbmN1cnJlbmNlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9jb25jdXJyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Yjk1ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9jb25jdXJyZW5jZS5oCkBAIC0wLDAgKzEsMzE4IEBACisvLyBTdXBwb3J0IGZvciBjb25jdXJyZW50IHByb2dyYW1pbmcgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9jb25jdXJyZW5jZS5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfQ09OQ1VSUkVOQ0VfSAorI2RlZmluZSBfQ09OQ1VSUkVOQ0VfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNpbmNsdWRlIDxiaXRzL2d0aHIuaD4gCisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBBdmFpbGFibGUgbG9ja2luZyBwb2xpY2llczoKKyAgLy8gX1Nfc2luZ2xlICAgIHNpbmdsZS10aHJlYWRlZCBjb2RlIHRoYXQgZG9lc24ndCBuZWVkIHRvIGJlIGxvY2tlZC4KKyAgLy8gX1NfbXV0ZXggICAgIG11bHRpLXRocmVhZGVkIGNvZGUgdGhhdCByZXF1aXJlcyBhZGRpdGlvbmFsIHN1cHBvcnQKKyAgLy8gICAgICAgICAgICAgIGZyb20gZ3Roci5oIG9yIGFic3RyYWN0aW9uIGxheWVycyBpbiBjb25jdXJyZW5jZS5oLgorICAvLyBfU19hdG9taWMgICAgbXVsdGktdGhyZWFkZWQgY29kZSB1c2luZyBhdG9taWMgb3BlcmF0aW9ucy4KKyAgZW51bSBfTG9ja19wb2xpY3kgeyBfU19zaW5nbGUsIF9TX211dGV4LCBfU19hdG9taWMgfTsgCisKKyAgLy8gQ29tcGlsZSB0aW1lIGNvbnN0YW50IHRoYXQgaW5kaWNhdGVzIHByZWZlcmVkIGxvY2tpbmcgcG9saWN5IGluCisgIC8vIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgIHN0YXRpYyBjb25zdCBfTG9ja19wb2xpY3kgX19kZWZhdWx0X2xvY2tfcG9saWN5ID0gCisjaWZkZWYgX19HVEhSRUFEUworI2lmIChkZWZpbmVkKF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzIpIFwKKyAgICAgJiYgZGVmaW5lZChfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF80KSkKKyAgX1NfYXRvbWljOworI2Vsc2UKKyAgX1NfbXV0ZXg7CisjZW5kaWYKKyNlbHNlCisgIF9TX3NpbmdsZTsKKyNlbmRpZgorCisgIC8vIE5COiBBcyB0aGlzIGlzIHVzZWQgaW4gbGlic3VwYysrLCBuZWVkIHRvIG9ubHkgZGVwZW5kIG9uCisgIC8vIGV4Y2VwdGlvbi4gTm8gc3RkZXhjZXB0aW9uIGNsYXNzZXMsIG5vIHVzZSBvZiBzdGQ6OnN0cmluZy4KKyAgY2xhc3MgX19jb25jdXJyZW5jZV9sb2NrX2Vycm9yIDogcHVibGljIHN0ZDo6ZXhjZXB0aW9uCisgIHsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgY2hhciBjb25zdCoKKyAgICB3aGF0KCkgY29uc3QgdGhyb3coKQorICAgIHsgcmV0dXJuICJfX2dudV9jeHg6Ol9fY29uY3VycmVuY2VfbG9ja19lcnJvciI7IH0KKyAgfTsKKworICBjbGFzcyBfX2NvbmN1cnJlbmNlX3VubG9ja19lcnJvciA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgorICB7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIGNoYXIgY29uc3QqCisgICAgd2hhdCgpIGNvbnN0IHRocm93KCkKKyAgICB7IHJldHVybiAiX19nbnVfY3h4OjpfX2NvbmN1cnJlbmNlX3VubG9ja19lcnJvciI7IH0KKyAgfTsKKworICBjbGFzcyBfX2NvbmN1cnJlbmNlX2Jyb2FkY2FzdF9lcnJvciA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgorICB7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIGNoYXIgY29uc3QqCisgICAgd2hhdCgpIGNvbnN0IHRocm93KCkKKyAgICB7IHJldHVybiAiX19nbnVfY3h4OjpfX2NvbmN1cnJlbmNlX2Jyb2FkY2FzdF9lcnJvciI7IH0KKyAgfTsKKworICBjbGFzcyBfX2NvbmN1cnJlbmNlX3dhaXRfZXJyb3IgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24KKyAgeworICBwdWJsaWM6CisgICAgdmlydHVhbCBjaGFyIGNvbnN0KgorICAgIHdoYXQoKSBjb25zdCB0aHJvdygpCisgICAgeyByZXR1cm4gIl9fZ251X2N4eDo6X19jb25jdXJyZW5jZV93YWl0X2Vycm9yIjsgfQorICB9OworCisgIC8vIFN1YnN0aXR1dGUgZm9yIGNvbmN1cnJlbmNlX2Vycm9yIG9iamVjdCBpbiB0aGUgY2FzZSBvZiAtZm5vLWV4Y2VwdGlvbnMuCisgIGlubGluZSB2b2lkCisgIF9fdGhyb3dfY29uY3VycmVuY2VfbG9ja19lcnJvcigpCisgIHsgX0dMSUJDWFhfVEhST1dfT1JfQUJPUlQoX19jb25jdXJyZW5jZV9sb2NrX2Vycm9yKCkpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19jb25jdXJyZW5jZV91bmxvY2tfZXJyb3IoKQorICB7IF9HTElCQ1hYX1RIUk9XX09SX0FCT1JUKF9fY29uY3VycmVuY2VfdW5sb2NrX2Vycm9yKCkpOyB9CisKKyNpZmRlZiBfX0dUSFJFQURfSEFTX0NPTkQKKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19jb25jdXJyZW5jZV9icm9hZGNhc3RfZXJyb3IoKQorICB7IF9HTElCQ1hYX1RIUk9XX09SX0FCT1JUKF9fY29uY3VycmVuY2VfYnJvYWRjYXN0X2Vycm9yKCkpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19jb25jdXJyZW5jZV93YWl0X2Vycm9yKCkKKyAgeyBfR0xJQkNYWF9USFJPV19PUl9BQk9SVChfX2NvbmN1cnJlbmNlX3dhaXRfZXJyb3IoKSk7IH0KKyNlbmRpZgorIAorICBjbGFzcyBfX211dGV4IAorICB7CisgIHByaXZhdGU6CisjaWYgX19HVEhSRUFEUyAmJiBkZWZpbmVkIF9fR1RIUkVBRF9NVVRFWF9JTklUCisgICAgX19ndGhyZWFkX211dGV4X3QgX01fbXV0ZXggPSBfX0dUSFJFQURfTVVURVhfSU5JVDsKKyNlbHNlCisgICAgX19ndGhyZWFkX211dGV4X3QgX01fbXV0ZXg7CisjZW5kaWYKKworICAgIF9fbXV0ZXgoY29uc3QgX19tdXRleCYpOworICAgIF9fbXV0ZXgmIG9wZXJhdG9yPShjb25zdCBfX211dGV4Jik7CisKKyAgcHVibGljOgorICAgIF9fbXV0ZXgoKSAKKyAgICB7IAorI2lmIF9fR1RIUkVBRFMgJiYgISBkZWZpbmVkIF9fR1RIUkVBRF9NVVRFWF9JTklUCisgICAgICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wKCkpCisJX19HVEhSRUFEX01VVEVYX0lOSVRfRlVOQ1RJT04oJl9NX211dGV4KTsKKyNlbmRpZgorICAgIH0KKworI2lmIF9fR1RIUkVBRFMgJiYgISBkZWZpbmVkIF9fR1RIUkVBRF9NVVRFWF9JTklUCisgICAgfl9fbXV0ZXgoKSAKKyAgICB7IAorICAgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCV9fZ3RocmVhZF9tdXRleF9kZXN0cm95KCZfTV9tdXRleCk7IAorICAgIH0KKyNlbmRpZiAKKworICAgIHZvaWQgbG9jaygpCisgICAgeworI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisJICBpZiAoX19ndGhyZWFkX211dGV4X2xvY2soJl9NX211dGV4KSAhPSAwKQorCSAgICBfX3Rocm93X2NvbmN1cnJlbmNlX2xvY2tfZXJyb3IoKTsKKwl9CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyNpZiBfX0dUSFJFQURTCisgICAgICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wKCkpCisJeworCSAgaWYgKF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX211dGV4KSAhPSAwKQorCSAgICBfX3Rocm93X2NvbmN1cnJlbmNlX3VubG9ja19lcnJvcigpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIF9fZ3RocmVhZF9tdXRleF90KiBndGhyZWFkX211dGV4KHZvaWQpCisgICAgICB7IHJldHVybiAmX01fbXV0ZXg7IH0KKyAgfTsKKworICBjbGFzcyBfX3JlY3Vyc2l2ZV9tdXRleCAKKyAgeworICBwcml2YXRlOgorI2lmIF9fR1RIUkVBRFMgJiYgZGVmaW5lZCBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQKKyAgICBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgX01fbXV0ZXggPSBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQ7CisjZWxzZQorICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCBfTV9tdXRleDsKKyNlbmRpZgorCisgICAgX19yZWN1cnNpdmVfbXV0ZXgoY29uc3QgX19yZWN1cnNpdmVfbXV0ZXgmKTsKKyAgICBfX3JlY3Vyc2l2ZV9tdXRleCYgb3BlcmF0b3I9KGNvbnN0IF9fcmVjdXJzaXZlX211dGV4Jik7CisKKyAgcHVibGljOgorICAgIF9fcmVjdXJzaXZlX211dGV4KCkgCisgICAgeyAKKyNpZiBfX0dUSFJFQURTICYmICEgZGVmaW5lZCBfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVQKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwlfX0dUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRfRlVOQ1RJT04oJl9NX211dGV4KTsKKyNlbmRpZgorICAgIH0KKworI2lmIF9fR1RIUkVBRFMgJiYgISBkZWZpbmVkIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVAorICAgIH5fX3JlY3Vyc2l2ZV9tdXRleCgpCisgICAgeworICAgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCV9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfZGVzdHJveSgmX01fbXV0ZXgpOworICAgIH0KKyNlbmRpZgorCisgICAgdm9pZCBsb2NrKCkKKyAgICB7IAorI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisJICBpZiAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9sb2NrKCZfTV9tdXRleCkgIT0gMCkKKwkgICAgX190aHJvd19jb25jdXJyZW5jZV9sb2NrX2Vycm9yKCk7CisJfQorI2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgdW5sb2NrKCkKKyAgICB7IAorI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisJICBpZiAoX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF91bmxvY2soJl9NX211dGV4KSAhPSAwKQorCSAgICBfX3Rocm93X2NvbmN1cnJlbmNlX3VubG9ja19lcnJvcigpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdCogZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXgodm9pZCkKKyAgICB7IHJldHVybiAmX01fbXV0ZXg7IH0KKyAgfTsKKworICAvLy8gU2NvcGVkIGxvY2sgaWRpb20uCisgIC8vIEFjcXVpcmUgdGhlIG11dGV4IGhlcmUgd2l0aCBhIGNvbnN0cnVjdG9yIGNhbGwsIHRoZW4gcmVsZWFzZSB3aXRoCisgIC8vIHRoZSBkZXN0cnVjdG9yIGNhbGwgaW4gYWNjb3JkYW5jZSB3aXRoIFJBSUkgc3R5bGUuCisgIGNsYXNzIF9fc2NvcGVkX2xvY2sKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBfX211dGV4IF9fbXV0ZXhfdHlwZTsKKworICBwcml2YXRlOgorICAgIF9fbXV0ZXhfdHlwZSYgX01fZGV2aWNlOworCisgICAgX19zY29wZWRfbG9jayhjb25zdCBfX3Njb3BlZF9sb2NrJik7CisgICAgX19zY29wZWRfbG9jayYgb3BlcmF0b3I9KGNvbnN0IF9fc2NvcGVkX2xvY2smKTsKKworICBwdWJsaWM6CisgICAgZXhwbGljaXQgX19zY29wZWRfbG9jayhfX211dGV4X3R5cGUmIF9fbmFtZSkgOiBfTV9kZXZpY2UoX19uYW1lKQorICAgIHsgX01fZGV2aWNlLmxvY2soKTsgfQorCisgICAgfl9fc2NvcGVkX2xvY2soKSB0aHJvdygpCisgICAgeyBfTV9kZXZpY2UudW5sb2NrKCk7IH0KKyAgfTsKKworI2lmZGVmIF9fR1RIUkVBRF9IQVNfQ09ORAorICBjbGFzcyBfX2NvbmQKKyAgeworICBwcml2YXRlOgorI2lmIF9fR1RIUkVBRFMgJiYgZGVmaW5lZCBfX0dUSFJFQURfQ09ORF9JTklUCisgICAgX19ndGhyZWFkX2NvbmRfdCBfTV9jb25kID0gX19HVEhSRUFEX0NPTkRfSU5JVDsKKyNlbHNlCisgICAgX19ndGhyZWFkX2NvbmRfdCBfTV9jb25kOworI2VuZGlmCisKKyAgICBfX2NvbmQoY29uc3QgX19jb25kJik7CisgICAgX19jb25kJiBvcGVyYXRvcj0oY29uc3QgX19jb25kJik7CisKKyAgcHVibGljOgorICAgIF9fY29uZCgpIAorICAgIHsgCisjaWYgX19HVEhSRUFEUyAmJiAhIGRlZmluZWQgX19HVEhSRUFEX0NPTkRfSU5JVAorICAgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCV9fR1RIUkVBRF9DT05EX0lOSVRfRlVOQ1RJT04oJl9NX2NvbmQpOworI2VuZGlmCisgICAgfQorCisjaWYgX19HVEhSRUFEUyAmJiAhIGRlZmluZWQgX19HVEhSRUFEX0NPTkRfSU5JVAorICAgIH5fX2NvbmQoKSAKKyAgICB7IAorICAgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCV9fZ3RocmVhZF9jb25kX2Rlc3Ryb3koJl9NX2NvbmQpOyAKKyAgICB9CisjZW5kaWYgCisKKyAgICB2b2lkIGJyb2FkY2FzdCgpCisgICAgeworI2lmIF9fR1RIUkVBRFMKKyAgICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwl7CisJICBpZiAoX19ndGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZfTV9jb25kKSAhPSAwKQorCSAgICBfX3Rocm93X2NvbmN1cnJlbmNlX2Jyb2FkY2FzdF9lcnJvcigpOworCX0KKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgd2FpdChfX211dGV4ICptdXRleCkKKyAgICB7CisjaWYgX19HVEhSRUFEUworICAgICAgeworCSAgaWYgKF9fZ3RocmVhZF9jb25kX3dhaXQoJl9NX2NvbmQsIG11dGV4LT5ndGhyZWFkX211dGV4KCkpICE9IDApCisJICAgIF9fdGhyb3dfY29uY3VycmVuY2Vfd2FpdF9lcnJvcigpOworICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgdm9pZCB3YWl0X3JlY3Vyc2l2ZShfX3JlY3Vyc2l2ZV9tdXRleCAqbXV0ZXgpCisgICAgeworI2lmIF9fR1RIUkVBRFMKKyAgICAgIHsKKwkgIGlmIChfX2d0aHJlYWRfY29uZF93YWl0X3JlY3Vyc2l2ZSgmX01fY29uZCwKKwkJCQkJICAgIG11dGV4LT5ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleCgpKQorCSAgICAgICE9IDApCisJICAgIF9fdGhyb3dfY29uY3VycmVuY2Vfd2FpdF9lcnJvcigpOworICAgICAgfQorI2VuZGlmCisgICAgfQorICB9OworI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9kZWJ1Z19hbGxvY2F0b3IuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2RlYnVnX2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOTBkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9kZWJ1Z19hbGxvY2F0b3IuaApAQCAtMCwwICsxLDEyNiBAQAorLy8gQWxsb2NhdG9ycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBleHQvZGVidWdfYWxsb2NhdG9yLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9ERUJVR19BTExPQ0FUT1JfSAorI2RlZmluZSBfREVCVUdfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8c3RkZXhjZXB0PgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdXNpbmcgc3RkOjpzaXplX3Q7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEEgbWV0YS1hbGxvY2F0b3Igd2l0aCBkZWJ1Z2dpbmcgYml0cywgYXMgcGVyIFsyMC40XS4KKyAgICogIEBpbmdyb3VwIGFsbG9jYXRvcnMKKyAgICoKKyAgICogIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBhbGxvY2F0b3IgZGVmaW5lZCBpbiB0aGUgQysrIFN0YW5kYXJkLiAKKyAgICogICAgLSBhbGwgYWxsb2NhdGlvbiBjYWxscyBvcGVyYXRvciBuZXcKKyAgICogICAgLSBhbGwgZGVhbGxvY2F0aW9uIGNhbGxzIG9wZXJhdG9yIGRlbGV0ZQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGRlYnVnX2FsbG9jYXRvcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlICAgICAgIAlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyICAgICAgIAlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgICAgICAgCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp2YWx1ZV90eXBlICAgICAgIHZhbHVlX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gX01fZXh0cmEgaXMgdGhlIG51bWJlciBvZiBvYmplY3RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUKKyAgICAgIC8vIGV4dHJhIHNwYWNlIHdoZXJlIGRlYnVnIGluZm9ybWF0aW9uIGlzIHN0b3JlZC4KKyAgICAgIHNpemVfdHlwZSAJCV9NX2V4dHJhOworICAgICAgCisgICAgICBfQWxsb2MJCQlfTV9hbGxvY2F0b3I7CisKKyAgICBwdWJsaWM6CisgICAgICBkZWJ1Z19hbGxvY2F0b3IoKQorICAgICAgeworCWNvbnN0IHNpemVfdCBfX29ial9zaXplID0gc2l6ZW9mKHZhbHVlX3R5cGUpOworCV9NX2V4dHJhID0gKHNpemVvZihzaXplX3R5cGUpICsgX19vYmpfc2l6ZSAtIDEpIC8gX19vYmpfc2l6ZTsgCisgICAgICB9CisgICAgICAKKyAgICAgIHBvaW50ZXIKKyAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24pCisgICAgICB7CisgICAgICAgIHBvaW50ZXIgX19yZXMgPSBfTV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uICsgX01fZXh0cmEpOyAgICAgIAorCXNpemVfdHlwZSogX19wcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90eXBlKj4oX19yZXMpOworCSpfX3BzID0gX19uOworICAgICAgICByZXR1cm4gX19yZXMgKyBfTV9leHRyYTsKKyAgICAgIH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogX19oaW50KQorICAgICAgeworICAgICAgICBwb2ludGVyIF9fcmVzID0gX01fYWxsb2NhdG9yLmFsbG9jYXRlKF9fbiArIF9NX2V4dHJhLCBfX2hpbnQpOworCXNpemVfdHlwZSogX19wcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90eXBlKj4oX19yZXMpOworCSpfX3BzID0gX19uOworICAgICAgICByZXR1cm4gX19yZXMgKyBfTV9leHRyYTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlpZiAoX19wKQorCSAgeworCSAgICBwb2ludGVyIF9fcmVhbF9wID0gX19wIC0gX01fZXh0cmE7CisJICAgIGlmICgqcmVpbnRlcnByZXRfY2FzdDxzaXplX3R5cGUqPihfX3JlYWxfcCkgIT0gX19uKQorCSAgICAgIHsKKwkJdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJkZWJ1Z19hbGxvY2F0b3I6OmRlYWxsb2NhdGUiCisJCQkJCSAiIHdyb25nIHNpemUiKTsKKwkgICAgICB9CisJICAgIF9NX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyBfTV9leHRyYSk7CisJICB9CisJZWxzZQorCSAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJkZWJ1Z19hbGxvY2F0b3I6OmRlYWxsb2NhdGUgbnVsbCBwb2ludGVyIik7CisgICAgICB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2VuY19maWxlYnVmLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9lbmNfZmlsZWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMWNkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9lbmNfZmlsZWJ1Zi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8vIGZpbGVidWYgd2l0aCBlbmNvZGluZyBzdGF0ZSB0eXBlIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvZW5jX2ZpbGVidWYuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0VYVF9FTkNfRklMRUJVRl9ICisjZGVmaW5lIF9FWFRfRU5DX0ZJTEVCVUZfSCAxCisKKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxleHQvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vLyBjbGFzcyBlbmNfZmlsZWJ1Zi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNsYXNzIGVuY19maWxlYnVmCisgICAgOiBwdWJsaWMgc3RkOjpiYXNpY19maWxlYnVmPF9DaGFyVCwgZW5jb2RpbmdfY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgZW5jb2RpbmdfY2hhcl90cmFpdHM8X0NoYXJUPiAgICAgCXRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZQlzdGF0ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUJcG9zX3R5cGU7CisKKyAgICAgIGVuY19maWxlYnVmKHN0YXRlX3R5cGUmIF9fc3RhdGUpCisgICAgICA6IHN0ZDo6YmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIGVuY29kaW5nX2NoYXJfdHJhaXRzPF9DaGFyVD4gPigpCisgICAgICB7IHRoaXMtPl9NX3N0YXRlX2JlZyA9IF9fc3RhdGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50czoKKyAgICAgIC8vIFNldCBzdGF0ZSB0eXBlIHRvIHNvbWV0aGluZyB1c2VmdWwuCisgICAgICAvLyBTb21ldGhpbmcgbW9yZSB0aGFuIGNvcHljb25zdHJ1Y3RpYmxlIGlzIG5lZWRlZCBoZXJlLCBzbworICAgICAgLy8gcmVxdWlyZSBkZWZhdWx0IGFuZCBjb3B5IGNvbnN0cnVjdGlibGUgKyBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKHN0YXRlX3R5cGUsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvZXh0cHRyX2FsbG9jYXRvci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvZXh0cHRyX2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzgyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9leHRwdHJfYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8vIDxleHRwdHJfYWxsb2NhdG9yLmg+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogIEBmaWxlIGV4dC9leHRwdHJfYWxsb2NhdG9yLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqCisgKiAgQGF1dGhvciBCb2IgV2FsdGVycworICoKKyAqIEFuIGV4YW1wbGUgYWxsb2NhdG9yIHdoaWNoIHVzZXMgYW4gYWx0ZXJuYXRpdmUgcG9pbnRlciB0eXBlIGZyb20KKyAqIGJpdHMvcG9pbnRlci5oLiAgU3VwcG9ydHMgdGVzdCBjYXNlcyB3aGljaCBjb25maXJtIGNvbnRhaW5lciBzdXBwb3J0CisgKiBmb3IgYWx0ZXJuYXRpdmUgcG9pbnRlcnMuCisgKi8KKworI2lmbmRlZiBfRVhUUFRSX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9FWFRQVFJfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPGV4dC9udW1lcmljX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC9wb2ludGVyLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGJyaWVmIEFuIGV4YW1wbGUgYWxsb2NhdG9yIHdoaWNoIHVzZXMgYSBub24tc3RhbmRhcmQgcG9pbnRlciB0eXBlLgorICAgKiBAaW5ncm91cCBhbGxvY2F0b3JzCisgICAqCisgICAqIFRoaXMgYWxsb2NhdG9yIHNwZWNpZmllcyB0aGF0IGNvbnRhaW5lcnMgdXNlIGEgJ3JlbGF0aXZlIHBvaW50ZXInIGFzIGl0J3MKKyAgICogcG9pbnRlciB0eXBlLiAgKFNlZSBleHQvcG9pbnRlci5oKSAgTWVtb3J5IGFsbG9jYXRpb24gaW4gdGhpcyBleGFtcGxlCisgICAqIGlzIHN0aWxsIHBlcmZvcm1lZCB1c2luZyBzdGQ6OmFsbG9jYXRvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfRXh0UHRyX2FsbG9jYXRvcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIC8vIE5vdGUgdGhlIG5vbi1zdGFuZGFyZCBwb2ludGVyIHR5cGVzLgorICAgICAgdHlwZWRlZiBfUG9pbnRlcl9hZGFwdGVyPF9SZWxhdGl2ZV9wb2ludGVyX2ltcGw8X1RwPiA+ICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIF9Qb2ludGVyX2FkYXB0ZXI8X1JlbGF0aXZlX3BvaW50ZXJfaW1wbDxjb25zdCBfVHA+ID4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisgICAgICAgIHsgdHlwZWRlZiBfRXh0UHRyX2FsbG9jYXRvcjxfVXA+IG90aGVyOyB9OworCisgICAgICBfRXh0UHRyX2FsbG9jYXRvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCAKKyAgICAgIDogX01fcmVhbF9hbGxvYygpIHsgfQorCisgICAgICBfRXh0UHRyX2FsbG9jYXRvcihjb25zdCBfRXh0UHRyX2FsbG9jYXRvciYgX19yYXJnKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIDogX01fcmVhbF9hbGxvYyhfX3JhcmcuX01fcmVhbF9hbGxvYykgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgX0V4dFB0cl9hbGxvY2F0b3IoY29uc3QgX0V4dFB0cl9hbGxvY2F0b3I8X1VwPiYgX19yYXJnKQorCV9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgICA6IF9NX3JlYWxfYWxsb2MoX19yYXJnLl9NX2dldFVuZGVybHlpbmdJbXAoKSkgeyB9CisKKyAgICAgIH5fRXh0UHRyX2FsbG9jYXRvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyB9CisKKyAgICAgIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3gpOyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3gpOyB9CisKKyAgICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgdm9pZCogX19oaW50ID0gMCkKKyAgICAgIHsgcmV0dXJuIF9NX3JlYWxfYWxsb2MuYWxsb2NhdGUoX19uLF9faGludCk7IH0KKworICAgICAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQorICAgICAgeyBfTV9yZWFsX2FsbG9jLmRlYWxsb2NhdGUoX19wLmdldCgpLCBfX24pOyB9CisKKyAgICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX19udW1lcmljX3RyYWl0czxzaXplX3R5cGU+OjpfX21heCAvIHNpemVvZihfVHApOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGNvbnN0cnVjdChfVXAqIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyA6Om5ldygodm9pZCAqKV9fcCkgX1VwKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgY29uc3RydWN0KHBvaW50ZXIgX19wLCBfQXJncyYmLi4uIF9fYXJncykKKwl7IGNvbnN0cnVjdChfX3AuZ2V0KCksIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICB2b2lkIAorICAgICAgICBkZXN0cm95KF9VcCogX19wKQorICAgICAgICB7IF9fcC0+fl9VcCgpOyB9CisKKyAgICAgIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkKKyAgICAgIHsgZGVzdHJveShfX3AuZ2V0KCkpOyB9CisKKyNlbHNlCisKKyAgICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKQorICAgICAgeyA6Om5ldyhfX3AuZ2V0KCkpIF9UcChfX3ZhbCk7IH0KKworICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKQorICAgICAgeyBfX3AtPn5fVHAoKTsgfQorI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgaW5saW5lIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBfRXh0UHRyX2FsbG9jYXRvcjxfVXA+JiBfX3JhcmcpCisgICAgICAgIHsgcmV0dXJuIF9NX3JlYWxfYWxsb2MgPT0gX19yYXJnLl9NX2dldFVuZGVybHlpbmdJbXAoKTsgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfRXh0UHRyX2FsbG9jYXRvciYgX19yYXJnKQorICAgICAgeyByZXR1cm4gX01fcmVhbF9hbGxvYyA9PSBfX3JhcmcuX01fcmVhbF9hbGxvYzsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIGlubGluZSBib29sCisgICAgICAgIG9wZXJhdG9yIT0oY29uc3QgX0V4dFB0cl9hbGxvY2F0b3I8X1VwPiYgX19yYXJnKQorICAgICAgICB7IHJldHVybiBfTV9yZWFsX2FsbG9jICE9IF9fcmFyZy5fTV9nZXRVbmRlcmx5aW5nSW1wKCk7IH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgX0V4dFB0cl9hbGxvY2F0b3ImIF9fcmFyZykKKyAgICAgIHsgcmV0dXJuIF9NX3JlYWxfYWxsb2MgIT0gX19yYXJnLl9NX3JlYWxfYWxsb2M7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBpbmxpbmUgZnJpZW5kIHZvaWQKKyAgICAgICAgc3dhcChfRXh0UHRyX2FsbG9jYXRvcjxfVXA+JiwgX0V4dFB0cl9hbGxvY2F0b3I8X1VwPiYpOworCisgICAgICAvLyBBIG1ldGhvZCBzcGVjaWZpYyB0byB0aGlzIGltcGxlbWVudGF0aW9uLgorICAgICAgY29uc3Qgc3RkOjphbGxvY2F0b3I8X1RwPiYKKyAgICAgIF9NX2dldFVuZGVybHlpbmdJbXAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmVhbF9hbGxvYzsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHN0ZDo6YWxsb2NhdG9yPF9UcD4gIF9NX3JlYWxfYWxsb2M7CisgICAgfTsKKworICAvLyBfRXh0UHRyX2FsbG9jYXRvcjx2b2lkPiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIF9FeHRQdHJfYWxsb2NhdG9yPHZvaWQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIC8vIE5vdGUgdGhlIG5vbi1zdGFuZGFyZCBwb2ludGVyIHR5cGVzCisgICAgICB0eXBlZGVmIF9Qb2ludGVyX2FkYXB0ZXI8X1JlbGF0aXZlX3BvaW50ZXJfaW1wbDx2b2lkPiA+ICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIF9Qb2ludGVyX2FkYXB0ZXI8X1JlbGF0aXZlX3BvaW50ZXJfaW1wbDxjb25zdCB2b2lkPiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RydWN0IHJlYmluZAorICAgICAgICB7IHR5cGVkZWYgX0V4dFB0cl9hbGxvY2F0b3I8X1VwPiBvdGhlcjsgfTsKKworICAgIHByaXZhdGU6CisgICAgICBzdGQ6OmFsbG9jYXRvcjx2b2lkPiAgX01fcmVhbF9hbGxvYzsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX0V4dFB0cl9hbGxvY2F0b3I8X1RwPiYgX19sYXJnLCBfRXh0UHRyX2FsbG9jYXRvcjxfVHA+JiBfX3JhcmcpCisgICAgeworICAgICAgc3RkOjphbGxvY2F0b3I8X1RwPiBfX3RtcCggX19yYXJnLl9NX3JlYWxfYWxsb2MgKTsKKyAgICAgIF9fcmFyZy5fTV9yZWFsX2FsbG9jID0gX19sYXJnLl9NX3JlYWxfYWxsb2M7CisgICAgICBfX2xhcmcuX01fcmVhbF9hbGxvYyA9IF9fdG1wOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0VYVFBUUl9BTExPQ0FUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvZnVuY3Rpb25hbCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2Z1bmN0aW9uYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzljODAzNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2Z1bmN0aW9uYWwKQEAgLTAsMCArMSw0MzAgQEAKKy8vIEZ1bmN0aW9uYWwgZXh0ZW5zaW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGV4dC9mdW5jdGlvbmFsCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkgKHBvc3NpYmx5CisgKiAgY29udGFpbmluZyBleHRlbnNpb25zIGZyb20gdGhlIEhQL1NHSSBTVEwgc3Vic2V0KS4KKyAqLworCisjaWZuZGVmIF9FWFRfRlVOQ1RJT05BTAorI2RlZmluZSBfRVhUX0ZVTkNUSU9OQUwgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdXNpbmcgc3RkOjpzaXplX3Q7CisgIHVzaW5nIHN0ZDo6dW5hcnlfZnVuY3Rpb247CisgIHVzaW5nIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uOworICB1c2luZyBzdGQ6Om1lbV9mdW4xX3Q7CisgIHVzaW5nIHN0ZDo6Y29uc3RfbWVtX2Z1bjFfdDsKKyAgdXNpbmcgc3RkOjptZW1fZnVuMV9yZWZfdDsKKyAgdXNpbmcgc3RkOjpjb25zdF9tZW1fZnVuMV9yZWZfdDsKKworICAvKiogVGhlIEBjIGlkZW50aXR5X2VsZW1lbnQgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgQysrCisgICAqICBzdGFuZGFyZDsgU0dJIHByb3ZpZGVkIHRoZW0gYXMgYW4gZXh0ZW5zaW9uLiAgSXRzIGFyZ3VtZW50IGlzIGFuCisgICAqICBvcGVyYXRpb24sIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHRoZSBpZGVudGl0eSBlbGVtZW50IGZvciB0aGF0CisgICAqICBvcGVyYXRpb24uICBJdCBpcyBvdmVybG9hZGVkIGZvciBhZGRpdGlvbiBhbmQgbXVsdGlwbGljYXRpb24sCisgICAqICBhbmQgeW91IGNhbiBvdmVybG9hZCBpdCBmb3IgeW91ciBvd24gbmVmYXJpb3VzIG9wZXJhdGlvbnMuCisgICAqCisgICAqICBAYWRkdG9ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAeworICAgKi8KKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgaWRlbnRpdHlfZWxlbWVudChzdGQ6OnBsdXM8X1RwPikKKyAgICB7IHJldHVybiBfVHAoMCk7IH0KKworICAvLy8gQW4gXGxpbmsgU0dJZXh0ZW5zaW9ucyBTR0kgZXh0ZW5zaW9uIFxlbmRsaW5rLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBpZGVudGl0eV9lbGVtZW50KHN0ZDo6bXVsdGlwbGllczxfVHA+KQorICAgIHsgcmV0dXJuIF9UcCgxKTsgfQorICAvKiogQH0gICovCisgIAorICAvKiogQXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBiaW5kZXJzLCBTR0kgcHJvdmlkZWQgY29tcG9zaXRpb24gZnVuY3RvcnMgYW5kCisgICAqICB3cmFwcGVyIGZ1bmN0aW9ucyB0byBhaWQgaW4gdGhlaXIgY3JlYXRpb24uICBUaGUgQGMgdW5hcnlfY29tcG9zZQorICAgKiAgZnVuY3RvciBpcyBjb25zdHJ1Y3RlZCBmcm9tIHR3byBmdW5jdGlvbnMvZnVuY3RvcnMsIEBjIGYgYW5kIEBjIGcuCisgICAqICBDYWxsaW5nIEBjIG9wZXJhdG9yKCkgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCBAYyB4IHJldHVybnMgQGMgZihnKHgpKS4KKyAgICogIFRoZSBmdW5jdGlvbiBAYyBjb21wb3NlMSB0YWtlcyB0aGUgdHdvIGZ1bmN0aW9ucyBhbmQgY29uc3RydWN0cyBhCisgICAqICBAYyB1bmFyeV9jb21wb3NlIHZhcmlhYmxlIGZvciB5b3UuCisgICAqCisgICAqICBAYyBiaW5hcnlfY29tcG9zZSBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRocmVlIGZ1bmN0b3JzLCBAYyBmLCBAYyBnMSwKKyAgICogIGFuZCBAYyBnMi4gIEl0cyBAYyBvcGVyYXRvcigpIHJldHVybnMgQGMgZihnMSh4KSxnMih4KSkuICBUaGUgZnVuY3Rpb24KKyAgICogIGNvbXBvc2UyIHRha2VzIGYsIGcxLCBhbmQgZzIsIGFuZCBjb25zdHJ1Y3RzIHRoZSBAYyBiaW5hcnlfY29tcG9zZQorICAgKiAgaW5zdGFuY2UgZm9yIHlvdS4gIEZvciBleGFtcGxlLCBpZiBAYyBmIHJldHVybnMgYW4gaW50LCB0aGVuCisgICAqICBcY29kZQorICAgKiAgaW50IGFuc3dlciA9IChjb21wb3NlMihmLGcxLGcyKSkoeCk7CisgICAqICBcZW5kY29kZQorICAgKiAgaXMgZXF1aXZhbGVudCB0bworICAgKiAgXGNvZGUKKyAgICogIGludCB0ZW1wMSA9IGcxKHgpOworICAgKiAgaW50IHRlbXAyID0gZzIoeCk7CisgICAqICBpbnQgYW5zd2VyID0gZih0ZW1wMSx0ZW1wMik7CisgICAqICBcZW5kY29kZQorICAgKiAgQnV0IHRoZSBmaXJzdCBmb3JtIGlzIG1vcmUgY29tcGFjdCwgYW5kIGNhbiBiZSBwYXNzZWQgYXJvdW5kIGFzIGEKKyAgICogIGZ1bmN0b3IgdG8gb3RoZXIgYWxnb3JpdGhtcy4KKyAgICoKKyAgICogIEBhZGR0b2dyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEB7CisgICAqLworICAvLy8gQW4gXGxpbmsgU0dJZXh0ZW5zaW9ucyBTR0kgZXh0ZW5zaW9uIFxlbmRsaW5rLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgorICAgIGNsYXNzIHVuYXJ5X2NvbXBvc2UKKyAgICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKKwkJCSAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9PcGVyYXRpb24xIF9NX2ZuMTsKKyAgICAgIF9PcGVyYXRpb24yIF9NX2ZuMjsKKworICAgIHB1YmxpYzoKKyAgICAgIHVuYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSkKKyAgICAgIDogX01fZm4xKF9feCksIF9NX2ZuMihfX3kpIHt9CisKKyAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gpKTsgfQorICAgIH07CisKKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KKyAgICBpbmxpbmUgdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjI+CisgICAgY29tcG9zZTEoY29uc3QgX09wZXJhdGlvbjEmIF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIpCisgICAgeyByZXR1cm4gdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4oX19mbjEsIF9fZm4yKTsgfQorCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgorICAgIGNsYXNzIGJpbmFyeV9jb21wb3NlCisgICAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCisJCQkgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfT3BlcmF0aW9uMSBfTV9mbjE7CisgICAgICBfT3BlcmF0aW9uMiBfTV9mbjI7CisgICAgICBfT3BlcmF0aW9uMyBfTV9mbjM7CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICBiaW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195LAorCQkgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX3opCisgICAgICA6IF9NX2ZuMShfX3gpLCBfTV9mbjIoX195KSwgX01fZm4zKF9feikgeyB9CisKKyAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gpLCBfTV9mbjMoX194KSk7IH0KKyAgICB9OworCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgorICAgIGlubGluZSBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPgorICAgIGNvbXBvc2UyKGNvbnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjImIF9fZm4yLAorCSAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9fZm4zKQorICAgIHsgcmV0dXJuIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09wZXJhdGlvbjM+CisJKF9fZm4xLCBfX2ZuMiwgX19mbjMpOyB9CisgIC8qKiBAfSAgKi8KKworICAvKiogQXMgYW4gZXh0ZW5zaW9uLCBTR0kgcHJvdmlkZWQgYSBmdW5jdG9yIGNhbGxlZCBAYyBpZGVudGl0eS4gIFdoZW4gYQorICAgKiAgZnVuY3RvciBpcyByZXF1aXJlZCBidXQgbm8gb3BlcmF0aW9ucyBhcmUgZGVzaXJlZCwgdGhpcyBjYW4gYmUgdXNlZCBhcyBhCisgICAqICBwYXNzLXRocm91Z2guICBJdHMgQGMgb3BlcmF0b3IoKSByZXR1cm5zIGl0cyBhcmd1bWVudCB1bmNoYW5nZWQuCisgICAqCisgICAqICBAYWRkdG9ncm91cCBTR0lleHRlbnNpb25zCisgICAqLworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICAgIHN0cnVjdCBpZGVudGl0eQorICAgIDogcHVibGljIHN0ZDo6X0lkZW50aXR5PF9UcD4ge307CisKKyAgLyoqIEBjIHNlbGVjdDFzdCBhbmQgQGMgc2VsZWN0Mm5kIGFyZSBleHRlbnNpb25zIHByb3ZpZGVkIGJ5IFNHSS4gIFRoZWlyCisgICAqICBAYyBvcGVyYXRvcigpcworICAgKiAgdGFrZSBhIEBjIHN0ZDo6cGFpciBhcyBhbiBhcmd1bWVudCwgYW5kIHJldHVybiBlaXRoZXIgdGhlIGZpcnN0IG1lbWJlcgorICAgKiAgb3IgdGhlIHNlY29uZCBtZW1iZXIsIHJlc3BlY3RpdmVseS4gIFRoZXkgY2FuIGJlIHVzZWQgKGVzcGVjaWFsbHkgd2l0aAorICAgKiAgdGhlIGNvbXBvc2l0aW9uIGZ1bmN0b3JzKSB0byBAYSBzdHJpcCBkYXRhIGZyb20gYSBzZXF1ZW5jZSBiZWZvcmUKKyAgICogIHBlcmZvcm1pbmcgdGhlIHJlbWFpbmRlciBvZiBhbiBhbGdvcml0aG0uCisgICAqCisgICAqICBAYWRkdG9ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAeworICAgKi8KKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgorICAgIHN0cnVjdCBzZWxlY3Qxc3QKKyAgICA6IHB1YmxpYyBzdGQ6Ol9TZWxlY3Qxc3Q8X1BhaXI+IHt9OworCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUGFpcj4KKyAgICBzdHJ1Y3Qgc2VsZWN0Mm5kCisgICAgOiBwdWJsaWMgc3RkOjpfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKKworICAvKiogQH0gICovCisKKyAgLy8gZXh0ZW5zaW9uIGRvY3VtZW50ZWQgbmV4dAorICB0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgorICAgIHN0cnVjdCBfUHJvamVjdDFzdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJnMT4KKyAgICB7CisgICAgICBfQXJnMQorICAgICAgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3g7IH0KKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CisgICAgc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPgorICAgIHsKKyAgICAgIF9BcmcyCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9feTsgfQorICAgIH07CisKKyAgLyoqIFRoZSBAYyBvcGVyYXRvcigpIG9mIHRoZSBAYyBwcm9qZWN0MXN0IGZ1bmN0b3IgdGFrZXMgdHdvIGFyYml0cmFyeQorICAgKiAgYXJndW1lbnRzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBvbmUsIHdoaWxlIEBjIHByb2plY3QybmQgcmV0dXJucyB0aGUKKyAgICogIHNlY29uZCBvbmUuICBUaGV5IGFyZSBleHRlbnNpb25zIHByb3ZpZGVkIGJ5IFNHSS4KKyAgICoKKyAgICogIEBhZGR0b2dyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEB7CisgICAqLworCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CisgICAgc3RydWN0IHByb2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7fTsKKworICAvLy8gQW4gXGxpbmsgU0dJZXh0ZW5zaW9ucyBTR0kgZXh0ZW5zaW9uIFxlbmRsaW5rLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgorICAgIHN0cnVjdCBwcm9qZWN0Mm5kIDogcHVibGljIF9Qcm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CisgIC8qKiBAfSAgKi8KKworICAvLyBleHRlbnNpb24gZG9jdW1lbnRlZCBuZXh0CisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgorICAgIHN0cnVjdCBfQ29uc3RhbnRfdm9pZF9mdW4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CisgICAgICByZXN1bHRfdHlwZSBfTV92YWw7CisKKyAgICAgIF9Db25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CisKKyAgICAgIGNvbnN0IHJlc3VsdF90eXBlJgorICAgICAgb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV92YWw7IH0KKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQ+CisgICAgc3RydWN0IF9Db25zdGFudF91bmFyeV9mdW4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Bcmd1bWVudCBhcmd1bWVudF90eXBlOworICAgICAgdHlwZWRlZiAgX1Jlc3VsdCAgcmVzdWx0X3R5cGU7CisgICAgICByZXN1bHRfdHlwZSBfTV92YWw7CisgICAgICAKKyAgICAgIF9Db25zdGFudF91bmFyeV9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfTV92YWwoX192KSB7fQorCisgICAgICBjb25zdCByZXN1bHRfdHlwZSYKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50JikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3ZhbDsgfQorICAgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4KKyAgICBzdHJ1Y3QgX0NvbnN0YW50X2JpbmFyeV9mdW4KKyAgICB7CisgICAgICB0eXBlZGVmICBfQXJnMSAgIGZpcnN0X2FyZ3VtZW50X3R5cGU7CisgICAgICB0eXBlZGVmICBfQXJnMiAgIHNlY29uZF9hcmd1bWVudF90eXBlOworICAgICAgdHlwZWRlZiAgX1Jlc3VsdCByZXN1bHRfdHlwZTsKKyAgICAgIF9SZXN1bHQgX01fdmFsOworCisgICAgICBfQ29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KKyAgICAgIAorICAgICAgY29uc3QgcmVzdWx0X3R5cGUmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdmFsOyB9CisgICAgfTsKKworICAvKiogVGhlc2UgdGhyZWUgZnVuY3RvcnMgYXJlIGVhY2ggY29uc3RydWN0ZWQgZnJvbSBhIHNpbmdsZSBhcmJpdHJhcnkKKyAgICogIHZhcmlhYmxlL3ZhbHVlLiAgTGF0ZXIsIHRoZWlyIEBjIG9wZXJhdG9yKClzIGNvbXBsZXRlbHkgaWdub3JlIGFueQorICAgKiAgYXJndW1lbnRzIHBhc3NlZCwgYW5kIHJldHVybiB0aGUgc3RvcmVkIHZhbHVlLgorICAgKiAgLSBAYyBjb25zdGFudF92b2lkX2Z1bidzIEBjIG9wZXJhdG9yKCkgdGFrZXMgbm8gYXJndW1lbnRzCisgICAqICAtIEBjIGNvbnN0YW50X3VuYXJ5X2Z1bidzIEBjIG9wZXJhdG9yKCkgdGFrZXMgb25lIGFyZ3VtZW50IChpZ25vcmVkKQorICAgKiAgLSBAYyBjb25zdGFudF9iaW5hcnlfZnVuJ3MgQGMgb3BlcmF0b3IoKSB0YWtlcyB0d28gYXJndW1lbnRzIChpZ25vcmVkKQorICAgKgorICAgKiAgVGhlIGhlbHBlciBjcmVhdG9yIGZ1bmN0aW9ucyBAYyBjb25zdGFudDAsIEBjIGNvbnN0YW50MSwgYW5kCisgICAqICBAYyBjb25zdGFudDIgZWFjaCB0YWtlIGEgQGEgcmVzdWx0IGFyZ3VtZW50IGFuZCBjb25zdHJ1Y3QgdmFyaWFibGVzIG9mCisgICAqICB0aGUgYXBwcm9wcmlhdGUgZnVuY3RvciB0eXBlLgorICAgKgorICAgKiAgQGFkZHRvZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQHsKKyAgICovCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgorICAgIHN0cnVjdCBjb25zdGFudF92b2lkX2Z1bgorICAgIDogcHVibGljIF9Db25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PgorICAgIHsKKyAgICAgIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKKyAgICAgIDogX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdikge30KKyAgICB9OworCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0PgorICAgIHN0cnVjdCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJsaWMgX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+CisgICAgeworICAgICAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKKyAgICAgIDogX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+KF9fdikge30KKyAgICB9OworCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsIGNsYXNzIF9BcmcyID0gX0FyZzE+CisgICAgc3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4KKyAgICA6IHB1YmxpYyBfQ29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+CisgICAgeworICAgICAgY29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCisgICAgICA6IF9Db25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4oX192KSB7fQorICAgIH07CisKKyAgLy8vIEFuIFxsaW5rIFNHSWV4dGVuc2lvbnMgU0dJIGV4dGVuc2lvbiBcZW5kbGluay4KKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CisgICAgaW5saW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+CisgICAgY29uc3RhbnQwKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQorICAgIHsgcmV0dXJuIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFsKTsgfQorCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgorICAgIGlubGluZSBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCwgX1Jlc3VsdD4KKyAgICBjb25zdGFudDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCisgICAgeyByZXR1cm4gY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsIF9SZXN1bHQ+KF9fdmFsKTsgfQorCisgIC8vLyBBbiBcbGluayBTR0lleHRlbnNpb25zIFNHSSBleHRlbnNpb24gXGVuZGxpbmsuCisgIHRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgorICAgIGlubGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PgorICAgIGNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKKyAgICB7IHJldHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9SZXN1bHQsIF9SZXN1bHQ+KF9fdmFsKTsgfQorICAvKiogQH0gICovCisKKyAgLyoqIFRoZSBAYyBzdWJ0cmFjdGl2ZV9ybmcgY2xhc3MgaXMgZG9jdW1lbnRlZCBvbgorICAgKiAgPGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsLyI+U0dJJ3Mgc2l0ZTwvYT4uCisgICAqICBOb3RlIHRoYXQgdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBAYyBpbnQgaXMgMzIgYml0cy4KKyAgICoKKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICovCisgIGNsYXNzIHN1YnRyYWN0aXZlX3JuZworICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4KKyAgeworICBwcml2YXRlOgorICAgIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CisgICAgc2l6ZV90IF9NX2luZGV4MTsKKyAgICBzaXplX3QgX01faW5kZXgyOworCisgIHB1YmxpYzoKKyAgICAvLy8gUmV0dXJucyBhIG51bWJlciBsZXNzIHRoYW4gdGhlIGFyZ3VtZW50LgorICAgIHVuc2lnbmVkIGludAorICAgIG9wZXJhdG9yKCkodW5zaWduZWQgaW50IF9fbGltaXQpCisgICAgeworICAgICAgX01faW5kZXgxID0gKF9NX2luZGV4MSArIDEpICUgNTU7CisgICAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1NTsKKyAgICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFibGVbX01faW5kZXgyXTsKKyAgICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOworICAgICAgX01fdGFibGVbNTRdID0gX19zZWVkOworICAgICAgc2l6ZV90IF9faTsKKyAgICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKQorCXsKKwkgIHNpemVfdCBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUpIC0gMTsKKwkgIF9NX3RhYmxlW19faWldID0gX19rOworCSAgX19rID0gX19zZWVkIC0gX19rOworCSAgX19zZWVkID0gX01fdGFibGVbX19paV07CisJfQorICAgICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29wIDwgNDsgX19sb29wKyspCisJeworCSAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCisgICAgICAgICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVdOworCX0KKyAgICAgIF9NX2luZGV4MSA9IDA7CisgICAgICBfTV9pbmRleDIgPSAzMTsKKyAgICB9CisKKyAgICAvLy8gQ3RvciBhbGxvd2luZyB5b3UgdG8gaW5pdGlhbGl6ZSB0aGUgc2VlZC4KKyAgICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2VlZCkKKyAgICB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsgfQorCisgICAgLy8vIERlZmF1bHQgY3RvcjsgaW5pdGlhbGl6ZXMgaXRzIHN0YXRlIHdpdGggc29tZSBudW1iZXIgeW91IGRvbid0IHNlZS4KKyAgICBzdWJ0cmFjdGl2ZV9ybmcoKQorICAgIHsgX01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQorICB9OworCisgIC8vIE1lbV9mdW4gYWRhcHRvciBoZWxwZXIgZnVuY3Rpb25zIG1lbV9mdW4xIGFuZCBtZW1fZnVuMV9yZWYsCisgIC8vIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGV5IGFyZSBubyBsb25nZXIgcGFydCBvZgorICAvLyB0aGUgQysrIHN0YW5kYXJkLgorICAKKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KKyAgICBpbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LCBfVHAsIF9Bcmc+CisgICAgbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKKyAgICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsIF9UcCwgX0FyZz4oX19mKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CisgICAgaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCwgX1RwLCBfQXJnPgorICAgIG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCisgICAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LCBfVHAsIF9Bcmc+KF9fZik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgorICAgIGlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LCBfVHAsIF9Bcmc+CisgICAgbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCisgICAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCwgX1RwLCBfQXJnPihfX2YpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KKyAgICBpbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCwgX1RwLCBfQXJnPgorICAgIG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQorICAgIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsIF9UcCwgX0FyZz4oX19mKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9oYXNoX21hcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2hhc2hfbWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMjg3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9oYXNoX21hcApAQCAtMCwwICsxLDU5OSBAQAorLy8gSGFzaGluZyBtYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICovCisKKy8qKiBAZmlsZSBiYWNrd2FyZC9oYXNoX21hcAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfQkFDS1dBUkRfSEFTSF9NQVAKKyNkZWZpbmUgX0JBQ0tXQVJEX0hBU0hfTUFQIDEKKworI2lmbmRlZiBfR0xJQkNYWF9QRVJNSVRfQkFDS1dBUkRfSEFTSAorI2luY2x1ZGUgImJhY2t3YXJkX3dhcm5pbmcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiYWNrd2FyZC9oYXNodGFibGUuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHVzaW5nIHN0ZDo6ZXF1YWxfdG87CisgIHVzaW5nIHN0ZDo6YWxsb2NhdG9yOworICB1c2luZyBzdGQ6OnBhaXI7CisgIHVzaW5nIHN0ZDo6X1NlbGVjdDFzdDsKKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4gPSBoYXNoPF9LZXk+LAorCSAgIGNsYXNzIF9FcXVhbEtleSA9IGVxdWFsX3RvPF9LZXk+LCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CisgICAgY2xhc3MgaGFzaF9tYXAKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgaGFzaHRhYmxlPHBhaXI8Y29uc3QgX0tleSwgX1RwPixfS2V5LCBfSGFzaEZuLAorCQkJX1NlbGVjdDFzdDxwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwKKwkJCV9FcXVhbEtleSwgX0FsbG9jPiBfSHQ7CisKKyAgICAgIF9IdCBfTV9odDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBoYXNoZXIKKyAgICAgIGhhc2hfZnVuY3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9CisKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICBoYXNoX21hcCgpCisgICAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorICAKKyAgICAgIGV4cGxpY2l0CisgICAgICBoYXNoX21hcChzaXplX3R5cGUgX19uKQorICAgICAgOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9tYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmKQorICAgICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX21hcChzaXplX3R5cGUgX19uLCBjb25zdCBoYXNoZXImIF9faGYsIGNvbnN0IGtleV9lcXVhbCYgX19lcWwsCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpIHt9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKwk6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKKwk6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX21hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJIGNvbnN0IGhhc2hlciYgX19oZikKKwk6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLCBzaXplX3R5cGUgX19uLAorCQkgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LnNpemUoKTsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lm1heF9zaXplKCk7IH0KKyAgICAgIAorICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZW1wdHkoKTsgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoaGFzaF9tYXAmIF9faHMpCisgICAgICB7IF9NX2h0LnN3YXAoX19ocy5fTV9odCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9IRiwgY2xhc3MgX0VxSywgY2xhc3MgX0FsPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09IChjb25zdCBoYXNoX21hcDxfSzEsIF9UMSwgX0hGLCBfRXFLLCBfQWw+JiwKKwkJICAgIGNvbnN0IGhhc2hfbWFwPF9LMSwgX1QxLCBfSEYsIF9FcUssIF9BbD4mKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7IHJldHVybiBfTV9odC5pbnNlcnRfdW5pcXVlKF9fb2JqKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X3VuaXF1ZShfX2YsIF9fbCk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF91bmlxdWVfbm9yZXNpemUoX19vYmopOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CisKKyAgICAgIF9UcCYKKyAgICAgIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZmluZF9vcl9pbnNlcnQodmFsdWVfdHlwZShfX2tleSwgX1RwKCkpKS5zZWNvbmQ7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7IH0KKworICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7cmV0dXJuIF9NX2h0LmVyYXNlKF9fa2V5KTsgfQorCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2l0KQorICAgICAgeyBfTV9odC5lcmFzZShfX2l0KTsgfQorCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2YsIGl0ZXJhdG9yIF9fbCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19mLCBfX2wpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsgX01faHQuY2xlYXIoKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9faGludCkKKyAgICAgIHsgX01faHQucmVzaXplKF9faGludCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuYnVja2V0X2NvdW50KCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lm1heF9idWNrZXRfY291bnQoKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVsZW1zX2luX2J1Y2tldChzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZWxlbXNfaW5fYnVja2V0KF9fbik7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiwgY2xhc3MgX0VxbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0xLAorCSAgICAgICBjb25zdCBoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0yKQorICAgIHsgcmV0dXJuIF9faG0xLl9NX2h0ID09IF9faG0yLl9NX2h0OyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaEZuLCBjbGFzcyBfRXFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTEsCisJICAgICAgIGNvbnN0IGhhc2hfbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCisgICAgeyByZXR1cm4gIShfX2htMSA9PSBfX2htMik7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMSwKKwkgaGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFsS2V5LCBfQWxsb2M+JiBfX2htMikKKyAgICB7IF9faG0xLnN3YXAoX19obTIpOyB9CisKKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCisJICAgY2xhc3MgX0hhc2hGbiA9IGhhc2g8X0tleT4sCisJICAgY2xhc3MgX0VxdWFsS2V5ID0gZXF1YWxfdG88X0tleT4sCisJICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGhhc2hfbXVsdGltYXAKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9LZXksIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVHAsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczMoX0hhc2hGbiwgc2l6ZV90LCBfS2V5LCBfVW5hcnlGdW5jdGlvbkNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9FcXVhbEtleSwgX0tleSwgX0tleSwgX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQpCisJCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgaGFzaHRhYmxlPHBhaXI8Y29uc3QgX0tleSwgX1RwPiwgX0tleSwgX0hhc2hGbiwKKwkJCV9TZWxlY3Qxc3Q8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sIF9FcXVhbEtleSwgX0FsbG9jPgorICAgICAgICAgIF9IdDsKKworICAgICAgX0h0IF9NX2h0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV90eXBlIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOworICAgICAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpwb2ludGVyIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KKworICAgICAga2V5X2VxdWFsCisgICAgICBrZXlfZXEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQua2V5X2VxKCk7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIGhhc2hfbXVsdGltYXAoKQorICAgICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgZXhwbGljaXQKKyAgICAgIGhhc2hfbXVsdGltYXAoc2l6ZV90eXBlIF9fbikKKyAgICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmKQorICAgICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBoYXNoX211bHRpbWFwKHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpIHt9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorCTogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKKwk6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZikKKwk6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5zaXplKCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChoYXNoX211bHRpbWFwJiBfX2hzKQorICAgICAgeyBfTV9odC5zd2FwKF9faHMuX01faHQpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUssIGNsYXNzIF9BbD4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX211bHRpbWFwPF9LMSwgX1QxLCBfSEYsIF9FcUssIF9BbD4mLAorCQkgICBjb25zdCBoYXNoX211bHRpbWFwPF9LMSwgX1QxLCBfSEYsIF9FcUssIF9BbD4mKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7IHJldHVybiBfTV9odC5pbnNlcnRfZXF1YWwoX19vYmopOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLF9fbCk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9ub3Jlc2l6ZShjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsgcmV0dXJuIF9NX2h0Lmluc2VydF9lcXVhbF9ub3Jlc2l6ZShfX29iaik7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZmluZChfX2tleSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5jb3VudChfX2tleSk7IH0KKworICAgICAgcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7IH0KKworICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lcXVhbF9yYW5nZShfX2tleSk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rZXkpCisgICAgICB7IHJldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KKworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19pdCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19pdCk7IH0KKworICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpCisgICAgICB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IF9NX2h0LmNsZWFyKCk7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpCisgICAgICB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfYnVja2V0X2NvdW50KCk7IH0KKyAgICAgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVsZW1zX2luX2J1Y2tldChfX24pOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IRiwgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSEYsIF9FcUtleSwgX0FsbG9jPiYgX19obTEsCisJICAgICAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSEYsIF9FcUtleSwgX0FsbG9jPiYgX19obTIpCisgICAgeyByZXR1cm4gX19obTEuX01faHQgPT0gX19obTIuX01faHQ7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IRiwgY2xhc3MgX0VxS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSEYsIF9FcUtleSwgX0FsbG9jPiYgX19obTEsCisJICAgICAgIGNvbnN0IGhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSEYsIF9FcUtleSwgX0FsbG9jPiYgX19obTIpCisgICAgeyByZXR1cm4gIShfX2htMSA9PSBfX2htMik7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sIGNsYXNzIF9FcWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoaGFzaF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIF9FcWxLZXksIF9BbGxvYz4mIF9faG0xLAorCSBoYXNoX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2hGbiwgX0VxbEtleSwgX0FsbG9jPiYgX19obTIpCisgICAgeyBfX2htMS5zd2FwKF9faG0yKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBTcGVjaWFsaXphdGlvbiBvZiBpbnNlcnRfaXRlcmF0b3Igc28gdGhhdCBpdCB3aWxsIHdvcmsgZm9yIGhhc2hfbWFwCisgIC8vIGFuZCBoYXNoX211bHRpbWFwLgorICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoRm4sICBjbGFzcyBfRXFLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3I8X19nbnVfY3h4OjpoYXNoX21hcDxfS2V5LCBfVHAsIF9IYXNoRm4sIAorCQkJCQkgICAgICBfRXFLZXksIF9BbGxvYz4gPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6aGFzaF9tYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFLZXksIF9BbGxvYz4KKyAgICAgICAgX0NvbnRhaW5lcjsKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpCisgICAgICB7CisJY29udGFpbmVyLT5pbnNlcnQoX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0hhc2hGbiwgIGNsYXNzIF9FcUtleSwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcjxfX2dudV9jeHg6Omhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZuLAorCQkJCQkJICAgX0VxS2V5LCBfQWxsb2M+ID4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Omhhc2hfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaEZuLCBfRXFLZXksIF9BbGxvYz4KKyAgICAgICAgX0NvbnRhaW5lcjsKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKyAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisgICAgICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcikKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+aW5zZXJ0KF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9oYXNoX3NldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2hhc2hfc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOGU4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9oYXNoX3NldApAQCAtMCwwICsxLDU2NyBAQAorLy8gSGFzaGluZyBzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICovCisKKy8qKiBAZmlsZSBiYWNrd2FyZC9oYXNoX3NldAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfQkFDS1dBUkRfSEFTSF9TRVQKKyNkZWZpbmUgX0JBQ0tXQVJEX0hBU0hfU0VUIDEKKworI2lmbmRlZiBfR0xJQkNYWF9QRVJNSVRfQkFDS1dBUkRfSEFTSAorI2luY2x1ZGUgImJhY2t3YXJkX3dhcm5pbmcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiYWNrd2FyZC9oYXNodGFibGUuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHVzaW5nIHN0ZDo6ZXF1YWxfdG87CisgIHVzaW5nIHN0ZDo6YWxsb2NhdG9yOworICB1c2luZyBzdGQ6OnBhaXI7CisgIHVzaW5nIHN0ZDo6X0lkZW50aXR5OworCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24gID0gaGFzaDxfVmFsdWU+LAorCSAgIGNsYXNzIF9FcXVhbEtleSA9IGVxdWFsX3RvPF9WYWx1ZT4sCisJICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWx1ZT4gPgorICAgIGNsYXNzIGhhc2hfc2V0CisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVmFsdWUsIF9TR0lBc3NpZ25hYmxlQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczMoX0hhc2hGY24sIHNpemVfdCwgX1ZhbHVlLCBfVW5hcnlGdW5jdGlvbkNvbmNlcHQpCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMzKF9FcXVhbEtleSwgX1ZhbHVlLCBfVmFsdWUsIF9CaW5hcnlQcmVkaWNhdGVDb25jZXB0KQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgaGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfSGFzaEZjbiwgX0lkZW50aXR5PF9WYWx1ZT4sCisJCQlfRXF1YWxLZXksIF9BbGxvYz4gX0h0OworICAgICAgX0h0IF9NX2h0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV90eXBlIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpoYXNoZXIgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmtleV9lcXVhbCBrZXlfZXF1YWw7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0OjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0h0Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworICAgICAgCisgICAgICBoYXNoZXIKKyAgICAgIGhhc2hfZnVuY3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuaGFzaF9mdW5jdCgpOyB9CisKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmtleV9lcSgpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICBoYXNoX3NldCgpCisgICAgICA6IF9NX2h0KDEwMCwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorCisgICAgICBleHBsaWNpdAorICAgICAgaGFzaF9zZXQoc2l6ZV90eXBlIF9fbikKKyAgICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZikKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgaGFzaF9zZXQoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCSAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKSB7fQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wpCisJOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24pCisJOiBfTV9odChfX24sIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfdW5pcXVlKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSBjb25zdCBoYXNoZXImIF9faGYpCisJOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX3NldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX01faHQoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5zaXplKCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgpOyB9CisgICAgICAKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgc3dhcChoYXNoX3NldCYgX19ocykKKyAgICAgIHsgX01faHQuc3dhcChfX2hzLl9NX2h0KTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfSEYsIGNsYXNzIF9FcUssIGNsYXNzIF9BbD4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBoYXNoX3NldDxfVmFsLCBfSEYsIF9FcUssIF9BbD4mLAorCQkgICBjb25zdCBoYXNoX3NldDxfVmFsLCBfSEYsIF9FcUssIF9BbD4mKTsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJlZ2luKCk7IH0KKyAgICAgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5lbmQoKTsgfQorCisgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworCXBhaXI8dHlwZW5hbWUgX0h0OjppdGVyYXRvciwgYm9vbD4gX19wID0gX01faHQuaW5zZXJ0X3VuaXF1ZShfX29iaik7CisJcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorICAgICAgICB7IF9NX2h0Lmluc2VydF91bmlxdWUoX19mLCBfX2wpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7CisJcGFpcjx0eXBlbmFtZSBfSHQ6Oml0ZXJhdG9yLCBib29sPiBfX3AKKwkgID0gX01faHQuaW5zZXJ0X3VuaXF1ZV9ub3Jlc2l6ZShfX29iaik7CisJcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGJvb2w+KF9fcC5maXJzdCwgX19wLnNlY29uZCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAge3JldHVybiBfTV9odC5lcmFzZShfX2tleSk7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19pdCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19pdCk7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19mLCBpdGVyYXRvciBfX2wpCisgICAgICB7IF9NX2h0LmVyYXNlKF9fZiwgX19sKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBjbGVhcigpCisgICAgICB7IF9NX2h0LmNsZWFyKCk7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX2hpbnQpCisgICAgICB7IF9NX2h0LnJlc2l6ZShfX2hpbnQpOyB9CisgICAgICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9CisgICAgICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfYnVja2V0X2NvdW50KCk7IH0KKyAgICAgIAorICAgICAgc2l6ZV90eXBlCisgICAgICBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVsZW1zX2luX2J1Y2tldChfX24pOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKKwkgICAgICAgY29uc3QgaGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMikKKyAgICB7IHJldHVybiBfX2hzMS5fTV9odCA9PSBfX2hzMi5fTV9odDsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMxLAorCSAgICAgICBjb25zdCBoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLCBfRXF1YWxLZXksIF9BbGxvYz4mIF9faHMyKQorICAgIHsgcmV0dXJuICEoX19oczEgPT0gX19oczIpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hhc2hGY24sIGNsYXNzIF9FcXVhbEtleSwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChoYXNoX3NldDxfVmFsLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+JiBfX2hzMSwKKwkgaGFzaF9zZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCisgICAgeyBfX2hzMS5zd2FwKF9faHMyKTsgfQorCisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLAorCSAgIGNsYXNzIF9IYXNoRmNuID0gaGFzaDxfVmFsdWU+LAorCSAgIGNsYXNzIF9FcXVhbEtleSA9IGVxdWFsX3RvPF9WYWx1ZT4sCisJICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWx1ZT4gPgorICAgIGNsYXNzIGhhc2hfbXVsdGlzZXQKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9WYWx1ZSwgX1NHSUFzc2lnbmFibGVDb25jZXB0KQorICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzMyhfSGFzaEZjbiwgc2l6ZV90LCBfVmFsdWUsIF9VbmFyeUZ1bmN0aW9uQ29uY2VwdCkKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlczMoX0VxdWFsS2V5LCBfVmFsdWUsIF9WYWx1ZSwgX0JpbmFyeVByZWRpY2F0ZUNvbmNlcHQpCisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBoYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9IYXNoRmNuLCBfSWRlbnRpdHk8X1ZhbHVlPiwKKwkJCV9FcXVhbEtleSwgX0FsbG9jPiBfSHQ7CisgICAgICBfSHQgX01faHQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X3R5cGUga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6Omhhc2hlciBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6a2V5X2VxdWFsIGtleV9lcXVhbDsKKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSHQ6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9IdDo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CisgICAgICAKKyAgICAgIGhhc2hlcgorICAgICAgaGFzaF9mdW5jdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5oYXNoX2Z1bmN0KCk7IH0KKyAgICAgIAorICAgICAga2V5X2VxdWFsCisgICAgICBrZXlfZXEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQua2V5X2VxKCk7IH0KKyAgICAgIAorICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZ2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICAgIGhhc2hfbXVsdGlzZXQoKQorICAgICAgOiBfTV9odCgxMDAsIGhhc2hlcigpLCBrZXlfZXF1YWwoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KKworICAgICAgZXhwbGljaXQKKyAgICAgIGhhc2hfbXVsdGlzZXQoc2l6ZV90eXBlIF9fbikKKyAgICAgIDogX01faHQoX19uLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CisKKyAgICAgIGhhc2hfbXVsdGlzZXQoc2l6ZV90eXBlIF9fbiwgY29uc3QgaGFzaGVyJiBfX2hmKQorICAgICAgOiBfTV9odChfX24sIF9faGYsIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQorICAgICAgCisgICAgICBoYXNoX211bHRpc2V0KHNpemVfdHlwZSBfX24sIGNvbnN0IGhhc2hlciYgX19oZiwgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfTV9odChfX24sIF9faGYsIF9fZXFsLCBfX2EpIHt9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBoYXNoX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorCTogX01faHQoMTAwLCBoYXNoZXIoKSwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbikKKwk6IF9NX2h0KF9fbiwgaGFzaGVyKCksIGtleV9lcXVhbCgpLCBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsIF9fbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGhhc2hfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsIHNpemVfdHlwZSBfX24sCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZikKKwk6IF9NX2h0KF9fbiwgX19oZiwga2V5X2VxdWFsKCksIGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIHsgX01faHQuaW5zZXJ0X2VxdWFsKF9fZiwgX19sKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgaGFzaF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwgc2l6ZV90eXBlIF9fbiwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmLCBjb25zdCBrZXlfZXF1YWwmIF9fZXFsLAorCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9NX2h0KF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgICAgeyBfTV9odC5pbnNlcnRfZXF1YWwoX19mLCBfX2wpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5zaXplKCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfc2l6ZSgpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVtcHR5KCk7IH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChoYXNoX211bHRpc2V0JiBocykKKyAgICAgIHsgX01faHQuc3dhcChocy5fTV9odCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1ZhbCwgY2xhc3MgX0hGLCBjbGFzcyBfRXFLLCBjbGFzcyBfQWw+CisgICAgICAgIGZyaWVuZCBib29sCisgICAgICAgIG9wZXJhdG9yPT0oY29uc3QgaGFzaF9tdWx0aXNldDxfVmFsLCBfSEYsIF9FcUssIF9BbD4mLAorCQkgICBjb25zdCBoYXNoX211bHRpc2V0PF9WYWwsIF9IRiwgX0VxSywgX0FsPiYpOworCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuYmVnaW4oKTsgfQorICAgICAgCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVuZCgpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7IHJldHVybiBfTV9odC5pbnNlcnRfZXF1YWwoX19vYmopOyB9CisgIAorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sKQorICAgICAgICB7IF9NX2h0Lmluc2VydF9lcXVhbChfX2YsX19sKTsgfQorICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfbm9yZXNpemUoY29uc3QgdmFsdWVfdHlwZSYgX19vYmopCisgICAgICB7IHJldHVybiBfTV9odC5pbnNlcnRfZXF1YWxfbm9yZXNpemUoX19vYmopOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2tleSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmZpbmQoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuY291bnQoX19rZXkpOyB9CisKKyAgICAgIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gX01faHQuZXF1YWxfcmFuZ2UoX19rZXkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9fa2V5KQorICAgICAgeyByZXR1cm4gX01faHQuZXJhc2UoX19rZXkpOyB9CisgIAorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19pdCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19pdCk7IH0KKyAgCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2YsIGl0ZXJhdG9yIF9fbCkKKyAgICAgIHsgX01faHQuZXJhc2UoX19mLCBfX2wpOyB9CisgIAorICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyBfTV9odC5jbGVhcigpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19oaW50KQorICAgICAgeyBfTV9odC5yZXNpemUoX19oaW50KTsgfQorICAKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X2NvdW50KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmJ1Y2tldF9jb3VudCgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9odC5tYXhfYnVja2V0X2NvdW50KCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBlbGVtc19pbl9idWNrZXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2h0LmVsZW1zX2luX2J1Y2tldChfX24pOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCisJICAgICAgIGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCisgICAgeyByZXR1cm4gX19oczEuX01faHQgPT0gX19oczIuX01faHQ7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCisJICAgICAgIGNvbnN0IGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCisgICAgeyByZXR1cm4gIShfX2hzMSA9PSBfX2hzMik7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczEsCisJIGhhc2hfbXVsdGlzZXQ8X1ZhbCwgX0hhc2hGY24sIF9FcXVhbEtleSwgX0FsbG9jPiYgX19oczIpCisgICAgeyBfX2hzMS5zd2FwKF9faHMyKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBTcGVjaWFsaXphdGlvbiBvZiBpbnNlcnRfaXRlcmF0b3Igc28gdGhhdCBpdCB3aWxsIHdvcmsgZm9yIGhhc2hfc2V0CisgIC8vIGFuZCBoYXNoX211bHRpc2V0LgorICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoRmNuLCBjbGFzcyBfRXF1YWxLZXksIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3I8X19nbnVfY3h4OjpoYXNoX3NldDxfVmFsdWUsIF9IYXNoRmNuLAorCQkJCQkgICAgICBfRXF1YWxLZXksIF9BbGxvYz4gPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6aGFzaF9zZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+CisgICAgICAgIF9Db250YWluZXI7CisgICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisgICAgICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorICAgICAgCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcikKKyAgICAgIDogY29udGFpbmVyKCZfX3gpIHt9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKQorICAgICAgeworCWNvbnRhaW5lci0+aW5zZXJ0KF9fdmFsdWUpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaEZjbiwgY2xhc3MgX0VxdWFsS2V5LCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yPF9fZ251X2N4eDo6aGFzaF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoRmNuLAorCQkJCQkJICAgX0VxdWFsS2V5LCBfQWxsb2M+ID4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Omhhc2hfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaEZjbiwgX0VxdWFsS2V5LCBfQWxsb2M+CisgICAgICAgIF9Db250YWluZXI7CisgICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CisgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOworICAgICAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgCisgICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KQorICAgICAgOiBjb250YWluZXIoJl9feCkge30KKyAgICAgIAorICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IpCisgICAgICA6IGNvbnRhaW5lcigmX194KSB7fQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwljb250YWluZXItPmluc2VydChfX3ZhbHVlKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKKyAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9pdGVyYXRvciBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L2l0ZXJhdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjg1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9pdGVyYXRvcgpAQCAtMCwwICsxLDExNiBAQAorLy8gSFAvU0dJIGl0ZXJhdG9yIGV4dGVuc2lvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OAorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGV4dC9pdGVyYXRvcgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfRVhUX0lURVJBVE9SCisjZGVmaW5lIF9FWFRfSVRFUkFUT1IgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIFRoZXJlIGFyZSB0d28gc2lnbmF0dXJlcyBmb3IgZGlzdGFuY2UuICBJbiBhZGRpdGlvbiB0byB0aGUgb25lCisgIC8vIHRha2luZyB0d28gaXRlcmF0b3JzIGFuZCByZXR1cm5pbmcgYSByZXN1bHQsIHRoZXJlIGlzIGFub3RoZXIKKyAgLy8gdGFraW5nIHR3byBpdGVyYXRvcnMgYW5kIGEgcmVmZXJlbmNlLXRvLXJlc3VsdCB2YXJpYWJsZSwgYW5kCisgIC8vIHJldHVybmluZyBub3RoaW5nLiAgVGhlIGxhdHRlciBzZWVtcyB0byBiZSBhbiBTR0kgZXh0ZW5zaW9uLgorICAvLyAtLSBwZWR3YXJkcworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIGlubGluZSB2b2lkCisgICAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIF9EaXN0YW5jZSYgX19uLCBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICAvLyBjb25jZXB0IHJlcXVpcmVtZW50cworICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcj4pCisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJeworCSAgKytfX2ZpcnN0OworCSAgKytfX247CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIF9EaXN0YW5jZSYgX19uLCBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4pCisgICAgICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgorICAgIGlubGluZSB2b2lkCisgICAgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uKQorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzIC0tIHRha2VuIGNhcmUgb2YgaW4gX19kaXN0YW5jZQorICAgICAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L21hbGxvY19hbGxvY2F0b3IuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L21hbGxvY19hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjA5MzRlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvbWFsbG9jX2FsbG9jYXRvci5oCkBAIC0wLDAgKzEsMTUyIEBACisvLyBBbGxvY2F0b3IgdGhhdCB3cmFwcyAiQyIgbWFsbG9jIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvbWFsbG9jX2FsbG9jYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfTUFMTE9DX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9NQUxMT0NfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNlbmRpZgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdXNpbmcgc3RkOjpzaXplX3Q7CisgIHVzaW5nIHN0ZDo6cHRyZGlmZl90OworCisgIC8qKgorICAgKiAgQGJyaWVmICBBbiBhbGxvY2F0b3IgdGhhdCB1c2VzIG1hbGxvYy4KKyAgICogIEBpbmdyb3VwIGFsbG9jYXRvcnMKKyAgICoKKyAgICogIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBhbGxvY2F0b3IgZGVmaW5lZCBpbiB0aGUgQysrIFN0YW5kYXJkLiAKKyAgICogICAgLSBhbGwgYWxsb2NhdGlvbiBjYWxscyBtYWxsb2MKKyAgICogICAgLSBhbGwgZGVhbGxvY2F0aW9uIGNhbGxzIGZyZWUKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBtYWxsb2NfYWxsb2NhdG9yCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwJiAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHN0cnVjdCByZWJpbmQKKyAgICAgICAgeyB0eXBlZGVmIG1hbGxvY19hbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTAzLiBwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudAorICAgICAgdHlwZWRlZiBzdGQ6OnRydWVfdHlwZSBwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudDsKKyNlbmRpZgorCisgICAgICBtYWxsb2NfYWxsb2NhdG9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorCisgICAgICBtYWxsb2NfYWxsb2NhdG9yKGNvbnN0IG1hbGxvY19hbGxvY2F0b3ImKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIG1hbGxvY19hbGxvY2F0b3IoY29uc3QgbWFsbG9jX2FsbG9jYXRvcjxfVHAxPiYpCisJX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorCisgICAgICB+bWFsbG9jX2FsbG9jYXRvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3gpOyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIKKyAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX194KTsgfQorCisgICAgICAvLyBOQjogX19uIGlzIHBlcm1pdHRlZCB0byBiZSAwLiAgVGhlIEMrKyBzdGFuZGFyZCBzYXlzIG5vdGhpbmcKKyAgICAgIC8vIGFib3V0IHdoYXQgdGhlIHJldHVybiB2YWx1ZSBpcyB3aGVuIF9fbiA9PSAwLgorICAgICAgcG9pbnRlcgorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKQorICAgICAgeworCWlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQorCSAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOworCisJcG9pbnRlciBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KHN0ZDo6bWFsbG9jKF9fbiAqIHNpemVvZihfVHApKSk7CisJaWYgKCFfX3JldCkKKwkgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgICAgIC8vIF9fcCBpcyBub3QgcGVybWl0dGVkIHRvIGJlIGEgbnVsbCBwb2ludGVyLgorICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlKQorICAgICAgeyBzdGQ6OmZyZWUoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdCBfR0xJQkNYWF9VU0VfTk9FWENFUFQgCisgICAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgY29uc3RydWN0KF9VcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKKwl7IDo6bmV3KCh2b2lkICopX19wKSBfVXAoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHZvaWQgCisgICAgICAgIGRlc3Ryb3koX1VwKiBfX3ApIHsgX19wLT5+X1VwKCk7IH0KKyNlbHNlCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MDIuIHdyb25nIG5ldyBleHByZXNzaW9uIGluIFtzb21lX10gYWxsb2NhdG9yOjpjb25zdHJ1Y3QKKyAgICAgIHZvaWQgCisgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIAorICAgICAgeyA6Om5ldygodm9pZCAqKV9fcCkgdmFsdWVfdHlwZShfX3ZhbCk7IH0KKworICAgICAgdm9pZCAKKyAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KKyNlbmRpZgorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBtYWxsb2NfYWxsb2NhdG9yPF9UcD4mLCBjb25zdCBtYWxsb2NfYWxsb2NhdG9yPF9UcD4mKQorICAgIHsgcmV0dXJuIHRydWU7IH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbWFsbG9jX2FsbG9jYXRvcjxfVHA+JiwgY29uc3QgbWFsbG9jX2FsbG9jYXRvcjxfVHA+JikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvbWVtb3J5IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvbWVtb3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOWIwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9tZW1vcnkKQEAgLTAsMCArMSwxOTcgQEAKKy8vIE1lbW9yeSBleHRlbnNpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgZXh0L21lbW9yeQorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IChwb3NzaWJseQorICogIGNvbnRhaW5pbmcgZXh0ZW5zaW9ucyBmcm9tIHRoZSBIUC9TR0kgU1RMIHN1YnNldCkuCisgKi8KKworI2lmbmRlZiBfRVhUX01FTU9SWQorI2RlZmluZSBfRVhUX01FTU9SWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxiaXRzL3N0bF90ZW1wYnVmLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB1c2luZyBzdGQ6OnB0cmRpZmZfdDsKKyAgdXNpbmcgc3RkOjpwYWlyOworICB1c2luZyBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnk7CisgIHVzaW5nIHN0ZDo6X1RlbXBvcmFyeV9idWZmZXI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KKyAgICBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKKwkJCSAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CisgICAgICBfX3RyeQorCXsKKwkgIGZvciAoOyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQorCSAgICBzdGQ6Ol9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOworCSAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2N1cik7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgc3RkOjpfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KKyAgICBpbmxpbmUgcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPgorICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKKwkJCSAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKKwkJCSAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CisgICAgICByZXR1cm4gKHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KKwkgICAgICAoX19sYXN0LCBzdGQ6OnVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgorICAgIGlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKKwkJCSAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKKyAgICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCisJCQkJCSAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvcGllcyB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIGludG8gcmVzdWx0LgorICAgKiAgQHBhcmFtICBfX2ZpcnN0ICBBbiBpbnB1dCBpdGVyYXRvci4KKyAgICogIEBwYXJhbSAgX19jb3VudCAgTGVuZ3RoCisgICAqICBAcGFyYW0gIF9fcmVzdWx0IEFuIG91dHB1dCBpdGVyYXRvci4KKyAgICogIEByZXR1cm4gICBfX3Jlc3VsdCArIChfX2ZpcnN0ICsgX19jb3VudCkKKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICoKKyAgICogIExpa2UgY29weSgpLCBidXQgZG9lcyBub3QgcmVxdWlyZSBhbiBpbml0aWFsaXplZCBvdXRwdXQgcmFuZ2UuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CisgICAgaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgorICAgIHVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKKwkJCSBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCisgICAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAorCQkJCQkgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KKworCisgIC8vIEFuIGFsdGVybmF0aXZlIHZlcnNpb24gb2YgdW5pbml0aWFsaXplZF9jb3B5X24gdGhhdCBjb25zdHJ1Y3RzCisgIC8vIGFuZCBkZXN0cm95cyBvYmplY3RzIHdpdGggYSB1c2VyLXByb3ZpZGVkIGFsbG9jYXRvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uX2EoX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAorCQkJICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCisJCQkgICAgIF9BbGxvY2F0b3IgX19hbGxvYykKKyAgICB7CisgICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKKyAgICAgIF9fdHJ5CisJeworCSAgZm9yICg7IF9fY291bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIpCisJICAgIF9fYWxsb2MuY29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKKwkgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyLCBfX2FsbG9jKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KKyAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9uX2EoX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAorCQkJICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCisJCQkgICAgIHN0ZDo6YWxsb2NhdG9yPF9UcD4pCisgICAgeworICAgICAgcmV0dXJuIF9fZ251X2N4eDo6dW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOworICAgIH0KKworICAvKioKKyAgICogIFRoaXMgY2xhc3MgcHJvdmlkZXMgc2ltaWxhciBiZWhhdmlvciBhbmQgc2VtYW50aWNzIG9mIHRoZSBzdGFuZGFyZAorICAgKiAgZnVuY3Rpb25zIGdldF90ZW1wb3JhcnlfYnVmZmVyKCkgYW5kIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKCksIGJ1dAorICAgKiAgZW5jYXBzdWxhdGVkIGluIGEgdHlwZSB2YWd1ZWx5IHJlc2VtYmxpbmcgYSBzdGFuZGFyZCBjb250YWluZXIuCisgICAqCisgICAqICBCeSBkZWZhdWx0LCBhIHRlbXBvcmFyeV9idWZmZXI8SXRlcj4gc3RvcmVzIHNwYWNlIGZvciBvYmplY3RzIG9mCisgICAqICB3aGF0ZXZlciB0eXBlIHRoZSBJdGVyIGl0ZXJhdG9yIHBvaW50cyB0by4gIEl0IGlzIGNvbnN0cnVjdGVkIGZyb20gYQorICAgKiAgdHlwaWNhbCBbZmlyc3QsbGFzdCkgcmFuZ2UsIGFuZCBwcm92aWRlcyB0aGUgYmVnaW4oKSwgZW5kKCksIHNpemUoKQorICAgKiAgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIHJlcXVlc3RlZF9zaXplKCkuICBGb3Igbm9uLXRyaXZpYWwgdHlwZXMsIGNvcGllcworICAgKiAgb2YgKmZpcnN0IHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBzdG9yYWdlLgorICAgKgorICAgKiAgQGMgbWFsbG9jIGlzIHVzZWQgdG8gb2J0YWluIHVuZGVybHlpbmcgc3RvcmFnZS4KKyAgICoKKyAgICogIExpa2UgZ2V0X3RlbXBvcmFyeV9idWZmZXIoKSwgbm90IGFsbCB0aGUgcmVxdWVzdGVkIG1lbW9yeSBtYXkgYmUKKyAgICogIGF2YWlsYWJsZS4gIElkZWFsbHksIHRoZSBjcmVhdGVkIGJ1ZmZlciB3aWxsIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGEKKyAgICogIGNvcHkgb2YgW2ZpcnN0LGxhc3QpLCBidXQgaWYgc2l6ZSgpIGlzIGxlc3MgdGhhbiByZXF1ZXN0ZWRfc2l6ZSgpLAorICAgKiAgdGhlbiB0aGlzIGRpZG4ndCBoYXBwZW4uCisgICAqCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICovCisgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHAKKwkgICAgPSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSA+CisgICAgc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgorICAgIHsKKyAgICAgIC8vLyBSZXF1ZXN0cyBzdG9yYWdlIGxhcmdlIGVub3VnaCB0byBob2xkIGEgY29weSBvZiBbZmlyc3QsbGFzdCkuCisgICAgICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCisgICAgICA6IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJzdCwgX19sYXN0KSB7IH0KKyAgICAgIAorICAgICAgLy8vIERlc3Ryb3lzIG9iamVjdHMgYW5kIGZyZWVzIHN0b3JhZ2UuCisgICAgICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L210X2FsbG9jYXRvci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvbXRfYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2MTYyMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L210X2FsbG9jYXRvci5oCkBAIC0wLDAgKzEsNzY2IEBACisvLyBNVC1vcHRpbWl6ZWQgYWxsb2NhdG9yIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvbXRfYWxsb2NhdG9yLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9NVF9BTExPQ0FUT1JfSAorI2RlZmluZSBfTVRfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8bmV3PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGV4dC9hdG9taWNpdHkuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjZW5kaWYKKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworICB1c2luZyBzdGQ6OnB0cmRpZmZfdDsKKworICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfaGFuZGxlcikodm9pZCopOworCisgIC8vLyBCYXNlIGNsYXNzIGZvciBwb29sIG9iamVjdC4KKyAgc3RydWN0IF9fcG9vbF9iYXNlCisgIHsKKyAgICAvLyBVc2luZyBzaG9ydCBpbnQgYXMgdHlwZSBmb3IgdGhlIGJpbm1hcCBpbXBsaWVzIHdlIGFyZSBuZXZlcgorICAgIC8vIGNhY2hpbmcgYmxvY2tzIGxhcmdlciB0aGFuIDMyNzY4IHdpdGggdGhpcyBhbGxvY2F0b3IuCisgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX0Jpbm1hcF90eXBlOworCisgICAgLy8gVmFyaWFibGVzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdG9yLAorICAgIC8vIGFzc2lnbmVkIGFuZCBleHBsYWluZWQgaW4gZGV0YWlsIGJlbG93LgorICAgIHN0cnVjdCBfVHVuZQorICAgICB7CisgICAgICAvLyBDb21waWxlIHRpbWUgY29uc3RhbnRzIGZvciB0aGUgZGVmYXVsdCBfVHVuZSB2YWx1ZXMuCisgICAgICBlbnVtIHsgX1NfYWxpZ24gPSA4IH07CisgICAgICBlbnVtIHsgX1NfbWF4X2J5dGVzID0gMTI4IH07CisgICAgICBlbnVtIHsgX1NfbWluX2JpbiA9IDggfTsKKyAgICAgIGVudW0geyBfU19jaHVua19zaXplID0gNDA5NiAtIDQgKiBzaXplb2Yodm9pZCopIH07CisgICAgICBlbnVtIHsgX1NfbWF4X3RocmVhZHMgPSA0MDk2IH07CisgICAgICBlbnVtIHsgX1NfZnJlZWxpc3RfaGVhZHJvb20gPSAxMCB9OworCisgICAgICAvLyBBbGlnbm1lbnQgbmVlZGVkLgorICAgICAgLy8gTkI6IEluIGFueSBjYXNlIG11c3QgYmUgPj0gc2l6ZW9mKF9CbG9ja19yZWNvcmQpLCB0aGF0CisgICAgICAvLyBpcyA0IG9uIDMyIGJpdCBtYWNoaW5lcyBhbmQgOCBvbiA2NCBiaXQgbWFjaGluZXMuCisgICAgICBzaXplX3QJX01fYWxpZ247CisgICAgICAKKyAgICAgIC8vIEFsbG9jYXRpb24gcmVxdWVzdHMgKGFmdGVyIHJvdW5kLXVwIHRvIHBvd2VyIG9mIDIpIGJlbG93CisgICAgICAvLyB0aGlzIHZhbHVlIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgYWxsb2NhdG9yLiBBIHJhdyBuZXcvCisgICAgICAvLyBjYWxsIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdHMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZS4KKyAgICAgIC8vIE5COiBNdXN0IGJlIG11Y2ggc21hbGxlciB0aGFuIF9NX2NodW5rX3NpemUgYW5kIGluIGFueQorICAgICAgLy8gY2FzZSA8PSAzMjc2OC4KKyAgICAgIHNpemVfdAlfTV9tYXhfYnl0ZXM7IAorCisgICAgICAvLyBTaXplIGluIGJ5dGVzIG9mIHRoZSBzbWFsbGVzdCBiaW4uCisgICAgICAvLyBOQjogTXVzdCBiZSBhIHBvd2VyIG9mIDIgYW5kID49IF9NX2FsaWduIChhbmQgb2YgY291cnNlCisgICAgICAvLyBtdWNoIHNtYWxsZXIgdGhhbiBfTV9tYXhfYnl0ZXMpLgorICAgICAgc2l6ZV90CV9NX21pbl9iaW47CisKKyAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGZyYWdtZW50aW5nIGFuZCBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mCisgICAgICAvLyBuZXcoKSBjYWxscyB3ZSBhbHdheXMgcmVxdWVzdCBuZXcgbWVtb3J5IHVzaW5nIHRoaXMKKyAgICAgIC8vIHZhbHVlLiBCYXNlZCBvbiBwcmV2aW91cyBkaXNjdXNzaW9ucyBvbiB0aGUgbGlic3RkYysrCisgICAgICAvLyBtYWlsaW5nIGxpc3Qgd2UgaGF2ZSBjaG9zZW4gdGhlIHZhbHVlIGJlbG93LgorICAgICAgLy8gU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwMS0wNy9tc2cwMDA3Ny5odG1sCisgICAgICAvLyBOQjogQXQgbGVhc3Qgb25lIG9yZGVyIG9mIG1hZ25pdHVkZSA+IF9NX21heF9ieXRlcy4gCisgICAgICBzaXplX3QJX01fY2h1bmtfc2l6ZTsKKworICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCB0aHJlYWRzLiBGb3IKKyAgICAgIC8vIHNpbmdsZS10aHJlYWRlZCBvcGVyYXRpb24sIHVzZSBvbmUuIE1heGltdW0gdmFsdWVzIHdpbGwKKyAgICAgIC8vIHZhcnkgZGVwZW5kaW5nIG9uIGRldGFpbHMgb2YgdGhlIHVuZGVybHlpbmcgc3lzdGVtLiAoRm9yCisgICAgICAvLyBpbnN0YW5jZSwgTGludXggMi40LjE4IHJlcG9ydHMgNDA3MCBpbgorICAgICAgLy8gL3Byb2Mvc3lzL2tlcm5lbC90aHJlYWRzLW1heCwgd2hpbGUgTGludXggMi42LjYgcmVwb3J0cworICAgICAgLy8gNjU1MzQpCisgICAgICBzaXplX3QgCV9NX21heF90aHJlYWRzOworCisgICAgICAvLyBFYWNoIHRpbWUgYSBkZWFsbG9jYXRpb24gb2NjdXJzIGluIGEgdGhyZWFkZWQgYXBwbGljYXRpb24KKyAgICAgIC8vIHdlIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHRoYW4KKyAgICAgIC8vIF9NX2ZyZWVsaXN0X2hlYWRyb29tICUgb2YgdXNlZCBtZW1vcnkgb24gdGhlIGZyZWVsaXN0LiBJZgorICAgICAgLy8gdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIHJlY29yZHMgaXMgbW9yZSB0aGFuCisgICAgICAvLyBfTV9mcmVlbGlzdF9oZWFkcm9vbSAlIG9mIHRoZSBmcmVlbGlzdCwgd2UgbW92ZSB0aGVzZQorICAgICAgLy8gcmVjb3JkcyBiYWNrIHRvIHRoZSBnbG9iYWwgcG9vbC4KKyAgICAgIHNpemVfdCAJX01fZnJlZWxpc3RfaGVhZHJvb207CisgICAgICAKKyAgICAgIC8vIFNldCB0byB0cnVlIGZvcmNlcyBhbGwgYWxsb2NhdGlvbnMgdG8gdXNlIG5ldygpLgorICAgICAgYm9vbCAJX01fZm9yY2VfbmV3OyAKKyAgICAgIAorICAgICAgZXhwbGljaXQKKyAgICAgIF9UdW5lKCkKKyAgICAgIDogX01fYWxpZ24oX1NfYWxpZ24pLCBfTV9tYXhfYnl0ZXMoX1NfbWF4X2J5dGVzKSwgX01fbWluX2JpbihfU19taW5fYmluKSwKKyAgICAgIF9NX2NodW5rX3NpemUoX1NfY2h1bmtfc2l6ZSksIF9NX21heF90aHJlYWRzKF9TX21heF90aHJlYWRzKSwgCisgICAgICBfTV9mcmVlbGlzdF9oZWFkcm9vbShfU19mcmVlbGlzdF9oZWFkcm9vbSksIAorICAgICAgX01fZm9yY2VfbmV3KHN0ZDo6Z2V0ZW52KCJHTElCQ1hYX0ZPUkNFX05FVyIpID8gdHJ1ZSA6IGZhbHNlKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfVHVuZShzaXplX3QgX19hbGlnbiwgc2l6ZV90IF9fbWF4Yiwgc2l6ZV90IF9fbWluYmluLCBzaXplX3QgX19jaHVuaywgCisJICAgIHNpemVfdCBfX21heHRocmVhZHMsIHNpemVfdCBfX2hlYWRyb29tLCBib29sIF9fZm9yY2UpIAorICAgICAgOiBfTV9hbGlnbihfX2FsaWduKSwgX01fbWF4X2J5dGVzKF9fbWF4YiksIF9NX21pbl9iaW4oX19taW5iaW4pLAorICAgICAgX01fY2h1bmtfc2l6ZShfX2NodW5rKSwgX01fbWF4X3RocmVhZHMoX19tYXh0aHJlYWRzKSwKKyAgICAgIF9NX2ZyZWVsaXN0X2hlYWRyb29tKF9faGVhZHJvb20pLCBfTV9mb3JjZV9uZXcoX19mb3JjZSkKKyAgICAgIHsgfQorICAgIH07CisgICAgCisgICAgc3RydWN0IF9CbG9ja19hZGRyZXNzCisgICAgeworICAgICAgdm9pZCogCQkJX01faW5pdGlhbDsKKyAgICAgIF9CbG9ja19hZGRyZXNzKiAJCV9NX25leHQ7CisgICAgfTsKKyAgICAKKyAgICBjb25zdCBfVHVuZSYKKyAgICBfTV9nZXRfb3B0aW9ucygpIGNvbnN0CisgICAgeyByZXR1cm4gX01fb3B0aW9uczsgfQorCisgICAgdm9pZAorICAgIF9NX3NldF9vcHRpb25zKF9UdW5lIF9fdCkKKyAgICB7IAorICAgICAgaWYgKCFfTV9pbml0KQorCV9NX29wdGlvbnMgPSBfX3Q7CisgICAgfQorCisgICAgYm9vbAorICAgIF9NX2NoZWNrX3RocmVzaG9sZChzaXplX3QgX19ieXRlcykKKyAgICB7IHJldHVybiBfX2J5dGVzID4gX01fb3B0aW9ucy5fTV9tYXhfYnl0ZXMgfHwgX01fb3B0aW9ucy5fTV9mb3JjZV9uZXc7IH0KKworICAgIHNpemVfdAorICAgIF9NX2dldF9iaW5tYXAoc2l6ZV90IF9fYnl0ZXMpCisgICAgeyByZXR1cm4gX01fYmlubWFwW19fYnl0ZXNdOyB9CisKKyAgICBzaXplX3QKKyAgICBfTV9nZXRfYWxpZ24oKQorICAgIHsgcmV0dXJuIF9NX29wdGlvbnMuX01fYWxpZ247IH0KKworICAgIGV4cGxpY2l0IAorICAgIF9fcG9vbF9iYXNlKCkgCisgICAgOiBfTV9vcHRpb25zKF9UdW5lKCkpLCBfTV9iaW5tYXAoMCksIF9NX2luaXQoZmFsc2UpIHsgfQorCisgICAgZXhwbGljaXQgCisgICAgX19wb29sX2Jhc2UoY29uc3QgX1R1bmUmIF9fb3B0aW9ucykKKyAgICA6IF9NX29wdGlvbnMoX19vcHRpb25zKSwgX01fYmlubWFwKDApLCBfTV9pbml0KGZhbHNlKSB7IH0KKworICBwcml2YXRlOgorICAgIGV4cGxpY2l0IAorICAgIF9fcG9vbF9iYXNlKGNvbnN0IF9fcG9vbF9iYXNlJik7CisKKyAgICBfX3Bvb2xfYmFzZSYKKyAgICBvcGVyYXRvcj0oY29uc3QgX19wb29sX2Jhc2UmKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8gQ29uZmlndXJhdGlvbiBvcHRpb25zLgorICAgIF9UdW5lIAkgICAgICAgCQlfTV9vcHRpb25zOworICAgIAorICAgIF9CaW5tYXBfdHlwZSogCQlfTV9iaW5tYXA7CisKKyAgICAvLyBDb25maWd1cmF0aW9uIG9mIHRoZSBwb29sIG9iamVjdCB2aWEgX01fb3B0aW9ucyBjYW4gaGFwcGVuCisgICAgLy8gYWZ0ZXIgY29uc3RydWN0aW9uIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uIEFmdGVyCisgICAgLy8gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRydWUuCisgICAgYm9vbCAJCQlfTV9pbml0OworICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgIERhdGEgZGVzY3JpYmluZyB0aGUgdW5kZXJseWluZyBtZW1vcnkgcG9vbCwgcGFyYW1ldGVyaXplZCBvbgorICAgKiAgdGhyZWFkaW5nIHN1cHBvcnQuCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9UaHJlYWQ+CisgICAgY2xhc3MgX19wb29sOworCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3Igc2luZ2xlIHRocmVhZC4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIF9fcG9vbDxmYWxzZT4gOiBwdWJsaWMgX19wb29sX2Jhc2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdW5pb24gX0Jsb2NrX3JlY29yZAorICAgICAgeworCS8vIFBvaW50cyB0byB0aGUgYmxvY2tfcmVjb3JkIG9mIHRoZSBuZXh0IGZyZWUgYmxvY2suCisJX0Jsb2NrX3JlY29yZCogCQkJX01fbmV4dDsKKyAgICAgIH07CisKKyAgICAgIHN0cnVjdCBfQmluX3JlY29yZAorICAgICAgeworCS8vIEFuICJhcnJheSIgb2YgcG9pbnRlcnMgdG8gdGhlIGZpcnN0IGZyZWUgYmxvY2suCisJX0Jsb2NrX3JlY29yZCoqCQkJX01fZmlyc3Q7CisKKwkvLyBBIGxpc3Qgb2YgdGhlIGluaXRpYWwgYWRkcmVzc2VzIG9mIGFsbCBhbGxvY2F0ZWQgYmxvY2tzLgorCV9CbG9ja19hZGRyZXNzKgkJICAgICAJX01fYWRkcmVzczsKKyAgICAgIH07CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfb25jZSgpCisgICAgICB7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QoX01faW5pdCA9PSBmYWxzZSwgZmFsc2UpKQorCSAgX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95KCkgdGhyb3coKTsKKworICAgICAgY2hhciogCisgICAgICBfTV9yZXNlcnZlX2Jsb2NrKHNpemVfdCBfX2J5dGVzLCBjb25zdCBzaXplX3QgX190aHJlYWRfaWQpOworICAgIAorICAgICAgdm9pZAorICAgICAgX01fcmVjbGFpbV9ibG9jayhjaGFyKiBfX3AsIHNpemVfdCBfX2J5dGVzKSB0aHJvdyAoKTsKKyAgICAKKyAgICAgIHNpemVfdCAKKyAgICAgIF9NX2dldF90aHJlYWRfaWQoKSB7IHJldHVybiAwOyB9CisgICAgICAKKyAgICAgIGNvbnN0IF9CaW5fcmVjb3JkJgorICAgICAgX01fZ2V0X2JpbihzaXplX3QgX193aGljaCkKKyAgICAgIHsgcmV0dXJuIF9NX2JpbltfX3doaWNoXTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9hZGp1c3RfZnJlZWxpc3QoY29uc3QgX0Jpbl9yZWNvcmQmLCBfQmxvY2tfcmVjb3JkKiwgc2l6ZV90KQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0IF9fcG9vbCgpIAorICAgICAgOiBfTV9iaW4oMCksIF9NX2Jpbl9zaXplKDEpIHsgfQorCisgICAgICBleHBsaWNpdCBfX3Bvb2woY29uc3QgX19wb29sX2Jhc2U6Ol9UdW5lJiBfX3R1bmUpIAorICAgICAgOiBfX3Bvb2xfYmFzZShfX3R1bmUpLCBfTV9iaW4oMCksIF9NX2Jpbl9zaXplKDEpIHsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIEFuICJhcnJheSIgb2YgYmluX3JlY29yZHMgZWFjaCBvZiB3aGljaCByZXByZXNlbnRzIGEgc3BlY2lmaWMKKyAgICAgIC8vIHBvd2VyIG9mIDIgc2l6ZS4gTWVtb3J5IHRvIHRoaXMgImFycmF5IiBpcyBhbGxvY2F0ZWQgaW4KKyAgICAgIC8vIF9NX2luaXRpYWxpemUoKS4KKyAgICAgIF9CaW5fcmVjb3JkKgkJIF9NX2JpbjsKKyAgICAgIAorICAgICAgLy8gQWN0dWFsIHZhbHVlIGNhbGN1bGF0ZWQgaW4gX01faW5pdGlhbGl6ZSgpLgorICAgICAgc2l6ZV90IAkgICAgICAgCSAgICAgCV9NX2Jpbl9zaXplOyAgICAgCisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemUoKTsKKyAgfTsKKyAKKyNpZmRlZiBfX0dUSFJFQURTCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgdGhyZWFkIGVuYWJsZWQsIHZpYSBndGhyZWFkcy5oLgorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3MgX19wb29sPHRydWU+IDogcHVibGljIF9fcG9vbF9iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIEVhY2ggcmVxdWVzdGluZyB0aHJlYWQgaXMgYXNzaWduZWQgYW4gaWQgcmFuZ2luZyBmcm9tIDEgdG8KKyAgICAgIC8vIF9TX21heF90aHJlYWRzLiBUaHJlYWQgaWQgMCBpcyB1c2VkIGFzIGEgZ2xvYmFsIG1lbW9yeSBwb29sLgorICAgICAgLy8gSW4gb3JkZXIgdG8gZ2V0IGNvbnN0YW50IHBlcmZvcm1hbmNlIG9uIHRoZSB0aHJlYWQgYXNzaWdubWVudAorICAgICAgLy8gcm91dGluZSwgd2Uga2VlcCBhIGxpc3Qgb2YgZnJlZSBpZHMuIFdoZW4gYSB0aHJlYWQgZmlyc3QKKyAgICAgIC8vIHJlcXVlc3RzIG1lbW9yeSB3ZSByZW1vdmUgdGhlIGZpcnN0IHJlY29yZCBpbiB0aGlzIGxpc3QgYW5kCisgICAgICAvLyBzdG9yZXMgdGhlIGFkZHJlc3MgaW4gYSBfX2d0aHJlYWRfa2V5LiBXaGVuIGluaXRpYWxpemluZyB0aGUKKyAgICAgIC8vIF9fZ3RocmVhZF9rZXkgd2Ugc3BlY2lmeSBhIGRlc3RydWN0b3IuIFdoZW4gdGhpcyBkZXN0cnVjdG9yCisgICAgICAvLyAoaS5lLiB0aGUgdGhyZWFkIGRpZXMpIGlzIGNhbGxlZCwgd2UgcmV0dXJuIHRoZSB0aHJlYWQgaWQgdG8KKyAgICAgIC8vIHRoZSBmcm9udCBvZiB0aGlzIGxpc3QuCisgICAgICBzdHJ1Y3QgX1RocmVhZF9yZWNvcmQKKyAgICAgIHsKKwkvLyBQb2ludHMgdG8gbmV4dCBmcmVlIHRocmVhZCBpZCByZWNvcmQuIE5VTEwgaWYgbGFzdCByZWNvcmQgaW4gbGlzdC4KKwlfVGhyZWFkX3JlY29yZCoJCQlfTV9uZXh0OworCQorCS8vIFRocmVhZCBpZCByYW5naW5nIGZyb20gMSB0byBfU19tYXhfdGhyZWFkcy4KKwlzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2lkOworICAgICAgfTsKKyAgICAgIAorICAgICAgdW5pb24gX0Jsb2NrX3JlY29yZAorICAgICAgeworCS8vIFBvaW50cyB0byB0aGUgYmxvY2tfcmVjb3JkIG9mIHRoZSBuZXh0IGZyZWUgYmxvY2suCisJX0Jsb2NrX3JlY29yZCoJCQlfTV9uZXh0OworCQorCS8vIFRoZSB0aHJlYWQgaWQgb2YgdGhlIHRocmVhZCB3aGljaCBoYXMgcmVxdWVzdGVkIHRoaXMgYmxvY2suCisJc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV90aHJlYWRfaWQ7CisgICAgICB9OworICAgICAgCisgICAgICBzdHJ1Y3QgX0Jpbl9yZWNvcmQKKyAgICAgIHsKKwkvLyBBbiAiYXJyYXkiIG9mIHBvaW50ZXJzIHRvIHRoZSBmaXJzdCBmcmVlIGJsb2NrIGZvciBlYWNoCisJLy8gdGhyZWFkIGlkLiBNZW1vcnkgdG8gdGhpcyAiYXJyYXkiIGlzIGFsbG9jYXRlZCBpbgorCS8vIF9TX2luaXRpYWxpemUoKSBmb3IgX1NfbWF4X3RocmVhZHMgKyBnbG9iYWwgcG9vbCAwLgorCV9CbG9ja19yZWNvcmQqKgkJCV9NX2ZpcnN0OworCQorCS8vIEEgbGlzdCBvZiB0aGUgaW5pdGlhbCBhZGRyZXNzZXMgb2YgYWxsIGFsbG9jYXRlZCBibG9ja3MuCisJX0Jsb2NrX2FkZHJlc3MqCQkgICAgIAlfTV9hZGRyZXNzOworCisJLy8gQW4gImFycmF5IiBvZiBjb3VudGVycyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFtb3VudCBvZgorCS8vIGJsb2NrcyB0aGF0IGFyZSBvbiB0aGUgZnJlZWxpc3QvdXNlZCBmb3IgZWFjaCB0aHJlYWQgaWQuCisJLy8gLSBOb3RlIHRoYXQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBhbGxvY2F0ZWQgX01fdXNlZCAiYXJyYXkiCisJLy8gICBhY3R1YWxseSBob3N0cyAoYXRvbWljKSBjb3VudGVycyBvZiByZWNsYWltZWQgYmxvY2tzOiAgaW4KKwkvLyAgIF9NX3Jlc2VydmVfYmxvY2sgYW5kIGluIF9NX3JlY2xhaW1fYmxvY2sgdGhvc2UgbnVtYmVycyBhcmUKKwkvLyAgIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZmlyc3Qgb25lcyB0byBvYnRhaW4gdGhlIGFjdHVhbCBzaXplCisJLy8gICBvZiB0aGUgIndvcmtpbmcgc2V0IiBvZiB0aGUgZ2l2ZW4gdGhyZWFkLgorCS8vIC0gTWVtb3J5IHRvIHRoZXNlICJhcnJheXMiIGlzIGFsbG9jYXRlZCBpbiBfU19pbml0aWFsaXplKCkKKwkvLyAgIGZvciBfU19tYXhfdGhyZWFkcyArIGdsb2JhbCBwb29sIDAuCisJc2l6ZV90KgkJCQlfTV9mcmVlOworCXNpemVfdCoJCQkgICAgICAgIF9NX3VzZWQ7CisJCisJLy8gRWFjaCBiaW4gaGFzIGl0cyBvd24gbXV0ZXggd2hpY2ggaXMgdXNlZCB0byBlbnN1cmUgZGF0YQorCS8vIGludGVncml0eSB3aGlsZSBjaGFuZ2luZyAib3duZXJzaGlwIiBvbiBhIGJsb2NrLiAgVGhlIG11dGV4CisJLy8gaXMgaW5pdGlhbGl6ZWQgaW4gX1NfaW5pdGlhbGl6ZSgpLgorCV9fZ3RocmVhZF9tdXRleF90KiAgICAgICAgICAgICAgX01fbXV0ZXg7CisgICAgICB9OworICAgICAgCisgICAgICAvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZShfX2Rlc3Ryb3lfaGFuZGxlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfb25jZSgpCisgICAgICB7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QoX01faW5pdCA9PSBmYWxzZSwgZmFsc2UpKQorCSAgX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95KCkgdGhyb3coKTsKKworICAgICAgY2hhciogCisgICAgICBfTV9yZXNlcnZlX2Jsb2NrKHNpemVfdCBfX2J5dGVzLCBjb25zdCBzaXplX3QgX190aHJlYWRfaWQpOworICAgIAorICAgICAgdm9pZAorICAgICAgX01fcmVjbGFpbV9ibG9jayhjaGFyKiBfX3AsIHNpemVfdCBfX2J5dGVzKSB0aHJvdyAoKTsKKyAgICAKKyAgICAgIGNvbnN0IF9CaW5fcmVjb3JkJgorICAgICAgX01fZ2V0X2JpbihzaXplX3QgX193aGljaCkKKyAgICAgIHsgcmV0dXJuIF9NX2JpbltfX3doaWNoXTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9hZGp1c3RfZnJlZWxpc3QoY29uc3QgX0Jpbl9yZWNvcmQmIF9fYmluLCBfQmxvY2tfcmVjb3JkKiBfX2Jsb2NrLCAKKwkJCSBzaXplX3QgX190aHJlYWRfaWQpCisgICAgICB7CisJaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCSAgeworCSAgICBfX2Jsb2NrLT5fTV90aHJlYWRfaWQgPSBfX3RocmVhZF9pZDsKKwkgICAgLS1fX2Jpbi5fTV9mcmVlW19fdGhyZWFkX2lkXTsKKwkgICAgKytfX2Jpbi5fTV91c2VkW19fdGhyZWFkX2lkXTsKKwkgIH0KKyAgICAgIH0KKworICAgICAgLy8gWFhYIEdMSUJDWFhfQUJJIERlcHJlY2F0ZWQKKyAgICAgIF9HTElCQ1hYX0NPTlNUIHZvaWQgCisgICAgICBfTV9kZXN0cm95X3RocmVhZF9rZXkodm9pZCopIHRocm93ICgpOworCisgICAgICBzaXplX3QgCisgICAgICBfTV9nZXRfdGhyZWFkX2lkKCk7CisKKyAgICAgIGV4cGxpY2l0IF9fcG9vbCgpIAorICAgICAgOiBfTV9iaW4oMCksIF9NX2Jpbl9zaXplKDEpLCBfTV90aHJlYWRfZnJlZWxpc3QoMCkgCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQgX19wb29sKGNvbnN0IF9fcG9vbF9iYXNlOjpfVHVuZSYgX190dW5lKSAKKyAgICAgIDogX19wb29sX2Jhc2UoX190dW5lKSwgX01fYmluKDApLCBfTV9iaW5fc2l6ZSgxKSwgCisJX01fdGhyZWFkX2ZyZWVsaXN0KDApIAorICAgICAgeyB9CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gQW4gImFycmF5IiBvZiBiaW5fcmVjb3JkcyBlYWNoIG9mIHdoaWNoIHJlcHJlc2VudHMgYSBzcGVjaWZpYworICAgICAgLy8gcG93ZXIgb2YgMiBzaXplLiBNZW1vcnkgdG8gdGhpcyAiYXJyYXkiIGlzIGFsbG9jYXRlZCBpbgorICAgICAgLy8gX01faW5pdGlhbGl6ZSgpLgorICAgICAgX0Jpbl9yZWNvcmQqCQlfTV9iaW47CisKKyAgICAgIC8vIEFjdHVhbCB2YWx1ZSBjYWxjdWxhdGVkIGluIF9NX2luaXRpYWxpemUoKS4KKyAgICAgIHNpemVfdCAJICAgICAgIAkgICAgIAlfTV9iaW5fc2l6ZTsKKworICAgICAgX1RocmVhZF9yZWNvcmQqIAkJX01fdGhyZWFkX2ZyZWVsaXN0OworICAgICAgdm9pZCoJCQlfTV90aHJlYWRfZnJlZWxpc3RfaW5pdGlhbDsKKworICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZSgpOworICAgIH07CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZSA8Ym9vbD4gY2xhc3MgX1Bvb2xUcCwgYm9vbCBfVGhyZWFkPgorICAgIHN0cnVjdCBfX2NvbW1vbl9wb29sCisgICAgeworICAgICAgdHlwZWRlZiBfUG9vbFRwPF9UaHJlYWQ+IAkJcG9vbF90eXBlOworICAgICAgCisgICAgICBzdGF0aWMgcG9vbF90eXBlJgorICAgICAgX1NfZ2V0X3Bvb2woKQorICAgICAgeyAKKwlzdGF0aWMgcG9vbF90eXBlIF9TX3Bvb2w7CisJcmV0dXJuIF9TX3Bvb2w7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZSA8Ym9vbD4gY2xhc3MgX1Bvb2xUcCwgYm9vbCBfVGhyZWFkPgorICAgIHN0cnVjdCBfX2NvbW1vbl9wb29sX2Jhc2U7CisKKyAgdGVtcGxhdGU8dGVtcGxhdGUgPGJvb2w+IGNsYXNzIF9Qb29sVHA+CisgICAgc3RydWN0IF9fY29tbW9uX3Bvb2xfYmFzZTxfUG9vbFRwLCBmYWxzZT4gCisgICAgOiBwdWJsaWMgX19jb21tb25fcG9vbDxfUG9vbFRwLCBmYWxzZT4KKyAgICB7CisgICAgICB1c2luZyAgX19jb21tb25fcG9vbDxfUG9vbFRwLCBmYWxzZT46Ol9TX2dldF9wb29sOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfaW5pdGlhbGl6ZV9vbmNlKCkKKyAgICAgIHsKKwlzdGF0aWMgYm9vbCBfX2luaXQ7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QoX19pbml0ID09IGZhbHNlLCBmYWxzZSkpCisJICB7CisJICAgIF9TX2dldF9wb29sKCkuX01faW5pdGlhbGl6ZV9vbmNlKCk7IAorCSAgICBfX2luaXQgPSB0cnVlOworCSAgfQorICAgICAgfQorICAgIH07CisKKyNpZmRlZiBfX0dUSFJFQURTCisgIHRlbXBsYXRlPHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwPgorICAgIHN0cnVjdCBfX2NvbW1vbl9wb29sX2Jhc2U8X1Bvb2xUcCwgdHJ1ZT4KKyAgICA6IHB1YmxpYyBfX2NvbW1vbl9wb29sPF9Qb29sVHAsIHRydWU+CisgICAgeworICAgICAgdXNpbmcgIF9fY29tbW9uX3Bvb2w8X1Bvb2xUcCwgdHJ1ZT46Ol9TX2dldF9wb29sOworICAgICAgCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfaW5pdGlhbGl6ZSgpIAorICAgICAgeyBfU19nZXRfcG9vbCgpLl9NX2luaXRpYWxpemVfb25jZSgpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19pbml0aWFsaXplX29uY2UoKQorICAgICAgeyAKKwlzdGF0aWMgYm9vbCBfX2luaXQ7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QoX19pbml0ID09IGZhbHNlLCBmYWxzZSkpCisJICB7CisJICAgIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AoKSkKKwkgICAgICB7CisJCS8vIE9uIHNvbWUgcGxhdGZvcm1zLCBfX2d0aHJlYWRfb25jZV90IGlzIGFuIGFnZ3JlZ2F0ZS4KKwkJc3RhdGljIF9fZ3RocmVhZF9vbmNlX3QgX19vbmNlID0gX19HVEhSRUFEX09OQ0VfSU5JVDsKKwkJX19ndGhyZWFkX29uY2UoJl9fb25jZSwgX1NfaW5pdGlhbGl6ZSk7CisJICAgICAgfQorCisJICAgIC8vIERvdWJsZSBjaGVjayBpbml0aWFsaXphdGlvbi4gTWF5IGJlIG5lY2Vzc2FyeSBvbiBzb21lCisJICAgIC8vIHN5c3RlbXMgZm9yIHByb3BlciBjb25zdHJ1Y3Rpb24gd2hlbiBub3QgY29tcGlsaW5nIHdpdGgKKwkgICAgLy8gdGhyZWFkIGZsYWdzLgorCSAgICBfU19nZXRfcG9vbCgpLl9NX2luaXRpYWxpemVfb25jZSgpOyAKKwkgICAgX19pbml0ID0gdHJ1ZTsKKwkgIH0KKyAgICAgIH0KKyAgICB9OworI2VuZGlmCisKKyAgLy8vIFBvbGljeSBmb3Igc2hhcmVkIF9fcG9vbCBvYmplY3RzLgorICB0ZW1wbGF0ZTx0ZW1wbGF0ZSA8Ym9vbD4gY2xhc3MgX1Bvb2xUcCwgYm9vbCBfVGhyZWFkPgorICAgIHN0cnVjdCBfX2NvbW1vbl9wb29sX3BvbGljeSA6IHB1YmxpYyBfX2NvbW1vbl9wb29sX2Jhc2U8X1Bvb2xUcCwgX1RocmVhZD4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0ZW1wbGF0ZSA8Ym9vbD4gY2xhc3MgX1Bvb2xUcDEgPSBfUG9vbFRwLCAKKwkgICAgICAgYm9vbCBfVGhyZWFkMSA9IF9UaHJlYWQ+CisgICAgICAgIHN0cnVjdCBfTV9yZWJpbmQKKyAgICAgICAgeyB0eXBlZGVmIF9fY29tbW9uX3Bvb2xfcG9saWN5PF9Qb29sVHAxLCBfVGhyZWFkMT4gb3RoZXI7IH07CisKKyAgICAgIHVzaW5nICBfX2NvbW1vbl9wb29sX2Jhc2U8X1Bvb2xUcCwgX1RocmVhZD46Ol9TX2dldF9wb29sOworICAgICAgdXNpbmcgIF9fY29tbW9uX3Bvb2xfYmFzZTxfUG9vbFRwLCBfVGhyZWFkPjo6X1NfaW5pdGlhbGl6ZV9vbmNlOworICB9OworIAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdGVtcGxhdGUgPGJvb2w+IGNsYXNzIF9Qb29sVHAsIGJvb2wgX1RocmVhZD4KKyAgICBzdHJ1Y3QgX19wZXJfdHlwZV9wb29sCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgCQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1Bvb2xUcDxfVGhyZWFkPiAJCXBvb2xfdHlwZTsKKyAgICAgIAorICAgICAgc3RhdGljIHBvb2xfdHlwZSYKKyAgICAgIF9TX2dldF9wb29sKCkKKyAgICAgIHsgCisJLy8gU2FuZSBkZWZhdWx0cyBmb3IgdGhlIF9Qb29sVHAuCisJdHlwZWRlZiB0eXBlbmFtZSBwb29sX3R5cGU6Ol9CbG9ja19yZWNvcmQgX0Jsb2NrX3JlY29yZDsKKwljb25zdCBzdGF0aWMgc2l6ZV90IF9fYSA9IChfX2FsaWdub2ZfXyhfVHApID49IHNpemVvZihfQmxvY2tfcmVjb3JkKQorCQkJCSAgID8gX19hbGlnbm9mX18oX1RwKSA6IHNpemVvZihfQmxvY2tfcmVjb3JkKSk7CisKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcG9vbF9iYXNlOjpfVHVuZSBfVHVuZTsKKwlzdGF0aWMgX1R1bmUgX1NfdHVuZShfX2EsIHNpemVvZihfVHApICogNjQsCisJCQkgICAgIHNpemVvZihfVHApICogMiA+PSBfX2EgPyBzaXplb2YoX1RwKSAqIDIgOiBfX2EsCisJCQkgICAgIHNpemVvZihfVHApICogc2l6ZV90KF9UdW5lOjpfU19jaHVua19zaXplKSwKKwkJCSAgICAgX1R1bmU6Ol9TX21heF90aHJlYWRzLAorCQkJICAgICBfVHVuZTo6X1NfZnJlZWxpc3RfaGVhZHJvb20sCisJCQkgICAgIHN0ZDo6Z2V0ZW52KCJHTElCQ1hYX0ZPUkNFX05FVyIpID8gdHJ1ZSA6IGZhbHNlKTsKKwlzdGF0aWMgcG9vbF90eXBlIF9TX3Bvb2woX1NfdHVuZSk7CisJcmV0dXJuIF9TX3Bvb2w7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwLCBib29sIF9UaHJlYWQ+CisgICAgc3RydWN0IF9fcGVyX3R5cGVfcG9vbF9iYXNlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdGVtcGxhdGUgPGJvb2w+IGNsYXNzIF9Qb29sVHA+CisgICAgc3RydWN0IF9fcGVyX3R5cGVfcG9vbF9iYXNlPF9UcCwgX1Bvb2xUcCwgZmFsc2U+IAorICAgIDogcHVibGljIF9fcGVyX3R5cGVfcG9vbDxfVHAsIF9Qb29sVHAsIGZhbHNlPiAKKyAgICB7CisgICAgICB1c2luZyAgX19wZXJfdHlwZV9wb29sPF9UcCwgX1Bvb2xUcCwgZmFsc2U+OjpfU19nZXRfcG9vbDsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2luaXRpYWxpemVfb25jZSgpCisgICAgICB7CisJc3RhdGljIGJvb2wgX19pbml0OworCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9faW5pdCA9PSBmYWxzZSwgZmFsc2UpKQorCSAgeworCSAgICBfU19nZXRfcG9vbCgpLl9NX2luaXRpYWxpemVfb25jZSgpOyAKKwkgICAgX19pbml0ID0gdHJ1ZTsKKwkgIH0KKyAgICAgIH0KKyAgICB9OworCisgI2lmZGVmIF9fR1RIUkVBRFMKKyB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwPgorICAgIHN0cnVjdCBfX3Blcl90eXBlX3Bvb2xfYmFzZTxfVHAsIF9Qb29sVHAsIHRydWU+IAorICAgIDogcHVibGljIF9fcGVyX3R5cGVfcG9vbDxfVHAsIF9Qb29sVHAsIHRydWU+IAorICAgIHsKKyAgICAgIHVzaW5nICBfX3Blcl90eXBlX3Bvb2w8X1RwLCBfUG9vbFRwLCB0cnVlPjo6X1NfZ2V0X3Bvb2w7CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19pbml0aWFsaXplKCkgCisgICAgICB7IF9TX2dldF9wb29sKCkuX01faW5pdGlhbGl6ZV9vbmNlKCk7IH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2luaXRpYWxpemVfb25jZSgpCisgICAgICB7IAorCXN0YXRpYyBib29sIF9faW5pdDsKKwlpZiAoX19idWlsdGluX2V4cGVjdChfX2luaXQgPT0gZmFsc2UsIGZhbHNlKSkKKwkgIHsKKwkgICAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCgpKQorCSAgICAgIHsKKwkJLy8gT24gc29tZSBwbGF0Zm9ybXMsIF9fZ3RocmVhZF9vbmNlX3QgaXMgYW4gYWdncmVnYXRlLgorCQlzdGF0aWMgX19ndGhyZWFkX29uY2VfdCBfX29uY2UgPSBfX0dUSFJFQURfT05DRV9JTklUOworCQlfX2d0aHJlYWRfb25jZSgmX19vbmNlLCBfU19pbml0aWFsaXplKTsKKwkgICAgICB9CisKKwkgICAgLy8gRG91YmxlIGNoZWNrIGluaXRpYWxpemF0aW9uLiBNYXkgYmUgbmVjZXNzYXJ5IG9uIHNvbWUKKwkgICAgLy8gc3lzdGVtcyBmb3IgcHJvcGVyIGNvbnN0cnVjdGlvbiB3aGVuIG5vdCBjb21waWxpbmcgd2l0aAorCSAgICAvLyB0aHJlYWQgZmxhZ3MuCisJICAgIF9TX2dldF9wb29sKCkuX01faW5pdGlhbGl6ZV9vbmNlKCk7IAorCSAgICBfX2luaXQgPSB0cnVlOworCSAgfQorICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAvLy8gUG9saWN5IGZvciBpbmRpdmlkdWFsIF9fcG9vbCBvYmplY3RzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwLCBib29sIF9UaHJlYWQ+CisgICAgc3RydWN0IF9fcGVyX3R5cGVfcG9vbF9wb2xpY3kgCisgICAgOiBwdWJsaWMgX19wZXJfdHlwZV9wb29sX2Jhc2U8X1RwLCBfUG9vbFRwLCBfVGhyZWFkPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHRlbXBsYXRlIDxib29sPiBjbGFzcyBfUG9vbFRwMSA9IF9Qb29sVHAsIAorCSAgICAgICBib29sIF9UaHJlYWQxID0gX1RocmVhZD4KKyAgICAgICAgc3RydWN0IF9NX3JlYmluZAorICAgICAgICB7IHR5cGVkZWYgX19wZXJfdHlwZV9wb29sX3BvbGljeTxfVHAxLCBfUG9vbFRwMSwgX1RocmVhZDE+IG90aGVyOyB9OworCisgICAgICB1c2luZyAgX19wZXJfdHlwZV9wb29sX2Jhc2U8X1RwLCBfUG9vbFRwLCBfVGhyZWFkPjo6X1NfZ2V0X3Bvb2w7CisgICAgICB1c2luZyAgX19wZXJfdHlwZV9wb29sX2Jhc2U8X1RwLCBfUG9vbFRwLCBfVGhyZWFkPjo6X1NfaW5pdGlhbGl6ZV9vbmNlOworICB9OworCisKKyAgLy8vIEJhc2UgY2xhc3MgZm9yIF9UcCBkZXBlbmRlbnQgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIF9fbXRfYWxsb2NfYmFzZSAKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxMDMuIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50CisgICAgICB0eXBlZGVmIHN0ZDo6dHJ1ZV90eXBlIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50OworI2VuZGlmCisKKyAgICAgIHBvaW50ZXIKKyAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX194KTsgfQorCisgICAgICBjb25zdF9wb2ludGVyCisgICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKF9feCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCAKKyAgICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZAorICAgICAgICBjb25zdHJ1Y3QoX1VwKiBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsgOjpuZXcoKHZvaWQgKilfX3ApIF9VcChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgdm9pZCAKKyAgICAgICAgZGVzdHJveShfVXAqIF9fcCkgeyBfX3AtPn5fVXAoKTsgfQorI2Vsc2UKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQwMi4gd3JvbmcgbmV3IGV4cHJlc3Npb24gaW4gW3NvbWVfXSBhbGxvY2F0b3I6OmNvbnN0cnVjdAorICAgICAgdm9pZCAKKyAgICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgCisgICAgICB7IDo6bmV3KCh2b2lkICopX19wKSBfVHAoX192YWwpOyB9CisKKyAgICAgIHZvaWQgCisgICAgICBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CisjZW5kaWYKKyAgICB9OworCisjaWZkZWYgX19HVEhSRUFEUworI2RlZmluZSBfX3RocmVhZF9kZWZhdWx0IHRydWUKKyNlbHNlCisjZGVmaW5lIF9fdGhyZWFkX2RlZmF1bHQgZmFsc2UKKyNlbmRpZgorCisgIC8qKgorICAgKiAgQGJyaWVmICBUaGlzIGlzIGEgZml4ZWQgc2l6ZSAocG93ZXIgb2YgMikgYWxsb2NhdG9yIHdoaWNoIC0gd2hlbgorICAgKiAgY29tcGlsZWQgd2l0aCB0aHJlYWQgc3VwcG9ydCAtIHdpbGwgbWFpbnRhaW4gb25lIGZyZWVsaXN0IHBlcgorICAgKiAgc2l6ZSBwZXIgdGhyZWFkIHBsdXMgYSBAYSBnbG9iYWwgb25lLiBTdGVwcyBhcmUgdGFrZW4gdG8gbGltaXQKKyAgICogIHRoZSBwZXIgdGhyZWFkIGZyZWVsaXN0IHNpemVzIChieSByZXR1cm5pbmcgZXhjZXNzIGJhY2sgdG8KKyAgICogIHRoZSBAYSBnbG9iYWwgbGlzdCkuCisgICAqICBAaW5ncm91cCBhbGxvY2F0b3JzCisgICAqCisgICAqICBGdXJ0aGVyIGRldGFpbHM6CisgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDEyY2gzMi5odG1sCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIAorCSAgIHR5cGVuYW1lIF9Qb29scCA9IF9fY29tbW9uX3Bvb2xfcG9saWN5PF9fcG9vbCwgX190aHJlYWRfZGVmYXVsdD4gPgorICAgIGNsYXNzIF9fbXRfYWxsb2MgOiBwdWJsaWMgX19tdF9hbGxvY19iYXNlPF9UcD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICAgICAgICAgIAlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgICAgICAgICAgCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAgICAJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgICAgICAgIAljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Qb29scCAgICAgIAkJCV9fcG9saWN5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Qb29scDo6cG9vbF90eXBlCV9fcG9vbF90eXBlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfUG9vbHAxID0gX1Bvb2xwPgorICAgICAgICBzdHJ1Y3QgcmViaW5kCisgICAgICAgIHsgCisJICB0eXBlZGVmIHR5cGVuYW1lIF9Qb29scDE6OnRlbXBsYXRlIF9NX3JlYmluZDxfVHAxPjo6b3RoZXIgcG9sX3R5cGU7CisJICB0eXBlZGVmIF9fbXRfYWxsb2M8X1RwMSwgcG9sX3R5cGU+IG90aGVyOworCX07CisKKyAgICAgIF9fbXRfYWxsb2MoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyB9CisKKyAgICAgIF9fbXRfYWxsb2MoY29uc3QgX19tdF9hbGxvYyYpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1Bvb2xwMT4KKyAgICAgICAgX19tdF9hbGxvYyhjb25zdCBfX210X2FsbG9jPF9UcDEsIF9Qb29scDE+JikgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorCisgICAgICB+X19tdF9hbGxvYygpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKTsKKworICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIGNvbnN0IF9fcG9vbF9iYXNlOjpfVHVuZQorICAgICAgX01fZ2V0X29wdGlvbnMoKQorICAgICAgeyAKKwkvLyBSZXR1cm4gYSBjb3B5LCBub3QgYSByZWZlcmVuY2UsIGZvciBleHRlcm5hbCBjb25zdW1wdGlvbi4KKwlyZXR1cm4gX19wb2xpY3lfdHlwZTo6X1NfZ2V0X3Bvb2woKS5fTV9nZXRfb3B0aW9ucygpOworICAgICAgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfb3B0aW9ucyhfX3Bvb2xfYmFzZTo6X1R1bmUgX190KQorICAgICAgeyBfX3BvbGljeV90eXBlOjpfU19nZXRfcG9vbCgpLl9NX3NldF9vcHRpb25zKF9fdCk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1Bvb2xwPgorICAgIHR5cGVuYW1lIF9fbXRfYWxsb2M8X1RwLCBfUG9vbHA+Ojpwb2ludGVyCisgICAgX19tdF9hbGxvYzxfVHAsIF9Qb29scD46OgorICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqKQorICAgIHsKKyAgICAgIGlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQorCXN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKworICAgICAgX19wb2xpY3lfdHlwZTo6X1NfaW5pdGlhbGl6ZV9vbmNlKCk7CisKKyAgICAgIC8vIFJlcXVlc3RzIGxhcmdlciB0aGFuIF9NX21heF9ieXRlcyBhcmUgaGFuZGxlZCBieSBvcGVyYXRvcgorICAgICAgLy8gbmV3L2RlbGV0ZSBkaXJlY3RseS4KKyAgICAgIF9fcG9vbF90eXBlJiBfX3Bvb2wgPSBfX3BvbGljeV90eXBlOjpfU19nZXRfcG9vbCgpOworICAgICAgY29uc3Qgc2l6ZV90IF9fYnl0ZXMgPSBfX24gKiBzaXplb2YoX1RwKTsKKyAgICAgIGlmIChfX3Bvb2wuX01fY2hlY2tfdGhyZXNob2xkKF9fYnl0ZXMpKQorCXsKKwkgIHZvaWQqIF9fcmV0ID0gOjpvcGVyYXRvciBuZXcoX19ieXRlcyk7CisJICByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwKj4oX19yZXQpOworCX0KKyAgICAgIAorICAgICAgLy8gUm91bmQgdXAgdG8gcG93ZXIgb2YgMiBhbmQgZmlndXJlIG91dCB3aGljaCBiaW4gdG8gdXNlLgorICAgICAgY29uc3Qgc2l6ZV90IF9fd2hpY2ggPSBfX3Bvb2wuX01fZ2V0X2Jpbm1hcChfX2J5dGVzKTsKKyAgICAgIGNvbnN0IHNpemVfdCBfX3RocmVhZF9pZCA9IF9fcG9vbC5fTV9nZXRfdGhyZWFkX2lkKCk7CisgICAgICAKKyAgICAgIC8vIEZpbmQgb3V0IGlmIHdlIGhhdmUgYmxvY2tzIG9uIG91ciBmcmVlbGlzdC4gIElmIHNvLCBnbyBhaGVhZAorICAgICAgLy8gYW5kIHVzZSB0aGVtIGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRvIGxvY2sgYW55dGhpbmcuCisgICAgICBjaGFyKiBfX2M7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcG9vbF90eXBlOjpfQmluX3JlY29yZCBfQmluX3JlY29yZDsKKyAgICAgIGNvbnN0IF9CaW5fcmVjb3JkJiBfX2JpbiA9IF9fcG9vbC5fTV9nZXRfYmluKF9fd2hpY2gpOworICAgICAgaWYgKF9fYmluLl9NX2ZpcnN0W19fdGhyZWFkX2lkXSkKKwl7CisJICAvLyBBbHJlYWR5IHJlc2VydmVkLgorCSAgdHlwZWRlZiB0eXBlbmFtZSBfX3Bvb2xfdHlwZTo6X0Jsb2NrX3JlY29yZCBfQmxvY2tfcmVjb3JkOworCSAgX0Jsb2NrX3JlY29yZCogX19ibG9jayA9IF9fYmluLl9NX2ZpcnN0W19fdGhyZWFkX2lkXTsKKwkgIF9fYmluLl9NX2ZpcnN0W19fdGhyZWFkX2lkXSA9IF9fYmxvY2stPl9NX25leHQ7CisJICAKKwkgIF9fcG9vbC5fTV9hZGp1c3RfZnJlZWxpc3QoX19iaW4sIF9fYmxvY2ssIF9fdGhyZWFkX2lkKTsKKwkgIF9fYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fYmxvY2spICsgX19wb29sLl9NX2dldF9hbGlnbigpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvLyBOdWxsLCByZXNlcnZlLgorCSAgX19jID0gX19wb29sLl9NX3Jlc2VydmVfYmxvY2soX19ieXRlcywgX190aHJlYWRfaWQpOworCX0KKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHAqPihzdGF0aWNfY2FzdDx2b2lkKj4oX19jKSk7CisgICAgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUG9vbHA+CisgICAgdm9pZAorICAgIF9fbXRfYWxsb2M8X1RwLCBfUG9vbHA+OjoKKyAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcCAhPSAwLCB0cnVlKSkKKwl7CisJICAvLyBSZXF1ZXN0cyBsYXJnZXIgdGhhbiBfTV9tYXhfYnl0ZXMgYXJlIGhhbmRsZWQgYnkKKwkgIC8vIG9wZXJhdG9ycyBuZXcvZGVsZXRlIGRpcmVjdGx5LgorCSAgX19wb29sX3R5cGUmIF9fcG9vbCA9IF9fcG9saWN5X3R5cGU6Ol9TX2dldF9wb29sKCk7CisJICBjb25zdCBzaXplX3QgX19ieXRlcyA9IF9fbiAqIHNpemVvZihfVHApOworCSAgaWYgKF9fcG9vbC5fTV9jaGVja190aHJlc2hvbGQoX19ieXRlcykpCisJICAgIDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7CisJICBlbHNlCisJICAgIF9fcG9vbC5fTV9yZWNsYWltX2Jsb2NrKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcCksIF9fYnl0ZXMpOworCX0KKyAgICB9CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Qb29scD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX19tdF9hbGxvYzxfVHAsIF9Qb29scD4mLCBjb25zdCBfX210X2FsbG9jPF9UcCwgX1Bvb2xwPiYpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUG9vbHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9fbXRfYWxsb2M8X1RwLCBfUG9vbHA+JiwgY29uc3QgX19tdF9hbGxvYzxfVHAsIF9Qb29scD4mKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyN1bmRlZiBfX3RocmVhZF9kZWZhdWx0CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9uZXdfYWxsb2NhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9uZXdfYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2NmZlZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L25ld19hbGxvY2F0b3IuaApAQCAtMCwwICsxLDE1MCBAQAorLy8gQWxsb2NhdG9yIHRoYXQgd3JhcHMgb3BlcmF0b3IgbmV3IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvbmV3X2FsbG9jYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfTkVXX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9ORVdfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNlbmRpZgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdXNpbmcgc3RkOjpzaXplX3Q7CisgIHVzaW5nIHN0ZDo6cHRyZGlmZl90OworCisgIC8qKgorICAgKiAgQGJyaWVmICBBbiBhbGxvY2F0b3IgdGhhdCB1c2VzIGdsb2JhbCBuZXcsIGFzIHBlciBbMjAuNF0uCisgICAqICBAaW5ncm91cCBhbGxvY2F0b3JzCisgICAqCisgICAqICBUaGlzIGlzIHByZWNpc2VseSB0aGUgYWxsb2NhdG9yIGRlZmluZWQgaW4gdGhlIEMrKyBTdGFuZGFyZC4gCisgICAqICAgIC0gYWxsIGFsbG9jYXRpb24gY2FsbHMgb3BlcmF0b3IgbmV3CisgICAqICAgIC0gYWxsIGRlYWxsb2NhdGlvbiBjYWxscyBvcGVyYXRvciBkZWxldGUKKyAgICoKKyAgICogIEB0cGFyYW0gIF9UcCAgVHlwZSBvZiBhbGxvY2F0ZWQgb2JqZWN0LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIG5ld19hbGxvY2F0b3IKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90ICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc3RydWN0IHJlYmluZAorICAgICAgICB7IHR5cGVkZWYgbmV3X2FsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxMDMuIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50CisgICAgICB0eXBlZGVmIHN0ZDo6dHJ1ZV90eXBlIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50OworI2VuZGlmCisKKyAgICAgIG5ld19hbGxvY2F0b3IoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyB9CisKKyAgICAgIG5ld19hbGxvY2F0b3IoY29uc3QgbmV3X2FsbG9jYXRvciYpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgbmV3X2FsbG9jYXRvcihjb25zdCBuZXdfYWxsb2NhdG9yPF9UcDE+JikgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorCisgICAgICB+bmV3X2FsbG9jYXRvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3gpOyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIKKyAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX194KTsgfQorCisgICAgICAvLyBOQjogX19uIGlzIHBlcm1pdHRlZCB0byBiZSAwLiAgVGhlIEMrKyBzdGFuZGFyZCBzYXlzIG5vdGhpbmcKKyAgICAgIC8vIGFib3V0IHdoYXQgdGhlIHJldHVybiB2YWx1ZSBpcyB3aGVuIF9fbiA9PSAwLgorICAgICAgcG9pbnRlcgorICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKQorICAgICAgeyAKKwlpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKKwkgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKworCXJldHVybiBzdGF0aWNfY2FzdDxfVHAqPig6Om9wZXJhdG9yIG5ldyhfX24gKiBzaXplb2YoX1RwKSkpOworICAgICAgfQorCisgICAgICAvLyBfX3AgaXMgbm90IHBlcm1pdHRlZCB0byBiZSBhIG51bGwgcG9pbnRlci4KKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSkKKyAgICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgY29uc3RydWN0KF9VcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKKwl7IDo6bmV3KCh2b2lkICopX19wKSBfVXAoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHZvaWQgCisgICAgICAgIGRlc3Ryb3koX1VwKiBfX3ApIHsgX19wLT5+X1VwKCk7IH0KKyNlbHNlCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MDIuIHdyb25nIG5ldyBleHByZXNzaW9uIGluIFtzb21lX10gYWxsb2NhdG9yOjpjb25zdHJ1Y3QKKyAgICAgIHZvaWQgCisgICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIAorICAgICAgeyA6Om5ldygodm9pZCAqKV9fcCkgX1RwKF9fdmFsKTsgfQorCisgICAgICB2b2lkIAorICAgICAgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQorI2VuZGlmCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG5ld19hbGxvY2F0b3I8X1RwPiYsIGNvbnN0IG5ld19hbGxvY2F0b3I8X1RwPiYpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBuZXdfYWxsb2NhdG9yPF9UcD4mLCBjb25zdCBuZXdfYWxsb2NhdG9yPF9UcD4mKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9udW1lcmljIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvbnVtZXJpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDlkZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvbnVtZXJpYwpAQCAtMCwwICsxLDE1MiBAQAorLy8gTnVtZXJpYyBleHRlbnNpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgZXh0L251bWVyaWMKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLiAKKyAqLworCisjaWZuZGVmIF9FWFRfTlVNRVJJQworI2RlZmluZSBfRVhUX05VTUVSSUMgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKyNpbmNsdWRlIDxudW1lcmljPgorCisjaW5jbHVkZSA8ZXh0L2Z1bmN0aW9uYWw+IC8vIEZvciBpZGVudGl0eV9lbGVtZW50CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBSZXR1cm5zIF9feCAqKiBfX24sIHdoZXJlIF9fbiA+PSAwLiAgX05vdGUgdGhhdCAibXVsdGlwbGljYXRpb24iCisgIC8vIGlzIHJlcXVpcmVkIHRvIGJlIGFzc29jaWF0aXZlLCBidXQgbm90IG5lY2Vzc2FyaWx5IGNvbW11dGF0aXZlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfTW9ub2lkT3BlcmF0aW9uPgorICAgIF9UcAorICAgIF9fcG93ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uLCBfTW9ub2lkT3BlcmF0aW9uIF9fbW9ub2lkX29wKQorICAgIHsKKyAgICAgIGlmIChfX24gPT0gMCkKKwlyZXR1cm4gaWRlbnRpdHlfZWxlbWVudChfX21vbm9pZF9vcCk7CisgICAgICBlbHNlCisJeworCSAgd2hpbGUgKChfX24gJiAxKSA9PSAwKQorCSAgICB7CisJICAgICAgX19uID4+PSAxOworCSAgICAgIF9feCA9IF9fbW9ub2lkX29wKF9feCwgX194KTsKKwkgICAgfQorCisJICBfVHAgX19yZXN1bHQgPSBfX3g7CisJICBfX24gPj49IDE7CisJICB3aGlsZSAoX19uICE9IDApCisJICAgIHsKKwkgICAgICBfX3ggPSBfX21vbm9pZF9vcChfX3gsIF9feCk7CisJICAgICAgaWYgKChfX24gJiAxKSAhPSAwKQorCQlfX3Jlc3VsdCA9IF9fbW9ub2lkX29wKF9fcmVzdWx0LCBfX3gpOworCSAgICAgIF9fbiA+Pj0gMTsKKwkgICAgfQorCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICBpbmxpbmUgX1RwCisgICAgX19wb3dlcihfVHAgX194LCBfSW50ZWdlciBfX24pCisgICAgeyByZXR1cm4gX19wb3dlcihfX3gsIF9fbiwgc3RkOjptdWx0aXBsaWVzPF9UcD4oKSk7IH0KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICovCisgIC8vIEFsaWFzIGZvciB0aGUgaW50ZXJuYWwgbmFtZSBfX3Bvd2VyLiAgTm90ZSB0aGF0IHBvd2VyIGlzIGFuIGV4dGVuc2lvbiwKKyAgLy8gbm90IHBhcnQgb2YgdGhlIEMrKyBzdGFuZGFyZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX01vbm9pZE9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX1RwCisgICAgcG93ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uLCBfTW9ub2lkT3BlcmF0aW9uIF9fbW9ub2lkX29wKQorICAgIHsgcmV0dXJuIF9fcG93ZXIoX194LCBfX24sIF9fbW9ub2lkX29wKTsgfQorCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW50ZWdlcj4KKyAgICBpbmxpbmUgX1RwCisgICAgcG93ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uKQorICAgIHsgcmV0dXJuIF9fcG93ZXIoX194LCBfX24pOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHVzaW5nIHN0ZDo6aW90YTsKKyNlbHNlCisgIC8qKgorICAgKiAgVGhpcyBpcyBhbiBTR0kgZXh0ZW5zaW9uLgorICAgKiAgQGluZ3JvdXAgU0dJZXh0ZW5zaW9ucworICAgKiAgQGRvY3RvZG8KKyAgKi8KKyAgLy8gaW90YSBpcyBub3QgcGFydCBvZiB0aGUgQysrIHN0YW5kYXJkLiAgSXQgaXMgYW4gZXh0ZW5zaW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgaW90YShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX1RwIF9fdmFsdWUpCisgICAgeworICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMKKyAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PF9Gb3J3YXJkSXRlcj4pCisgICAgICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAsCisJICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGU+KQorCisgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCisJKl9fZmlyc3QrKyA9IF9fdmFsdWUrKzsKKyAgICB9CisjZW5kaWYgIC8vIEMrKzExCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9udW1lcmljX3RyYWl0cy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvbnVtZXJpY190cmFpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGMxOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvbnVtZXJpY190cmFpdHMuaApAQCAtMCwwICsxLDEzOCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9udW1lcmljX3RyYWl0cy5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfRVhUX05VTUVSSUNfVFJBSVRTCisjZGVmaW5lIF9FWFRfTlVNRVJJQ19UUkFJVFMgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gQ29tcGlsZSB0aW1lIGNvbnN0YW50cyBmb3IgYnVpbHRpbiB0eXBlcy4KKyAgLy8gU2FkbHkgc3RkOjpudW1lcmljX2xpbWl0cyBtZW1iZXIgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2VkIGZvciB0aGlzLgorI2RlZmluZSBfX2dsaWJjeHhfc2lnbmVkKF9UcCkgKChfVHApKC0xKSA8IDApCisjZGVmaW5lIF9fZ2xpYmN4eF9kaWdpdHMoX1RwKSBcCisgIChzaXplb2YoX1RwKSAqIF9fQ0hBUl9CSVRfXyAtIF9fZ2xpYmN4eF9zaWduZWQoX1RwKSkKKworI2RlZmluZSBfX2dsaWJjeHhfbWluKF9UcCkgXAorICAoX19nbGliY3h4X3NpZ25lZChfVHApID8gKF9UcCkxIDw8IF9fZ2xpYmN4eF9kaWdpdHMoX1RwKSA6IChfVHApMCkKKworI2RlZmluZSBfX2dsaWJjeHhfbWF4KF9UcCkgXAorICAoX19nbGliY3h4X3NpZ25lZChfVHApID8gXAorICAgKCgoKChfVHApMSA8PCAoX19nbGliY3h4X2RpZ2l0cyhfVHApIC0gMSkpIC0gMSkgPDwgMSkgKyAxKSA6IH4oX1RwKTApCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIHN0cnVjdCBfX251bWVyaWNfdHJhaXRzX2ludGVnZXIKKyAgICB7CisgICAgICAvLyBPbmx5IGludGVnZXJzIGZvciBpbml0aWFsaXphdGlvbiBvZiBtZW1iZXIgY29uc3RhbnQuCisgICAgICBzdGF0aWMgY29uc3QgX1ZhbHVlIF9fbWluID0gX19nbGliY3h4X21pbihfVmFsdWUpOworICAgICAgc3RhdGljIGNvbnN0IF9WYWx1ZSBfX21heCA9IF9fZ2xpYmN4eF9tYXgoX1ZhbHVlKTsKKworICAgICAgLy8gTkI6IHRoZXNlIHR3byBhbHNvIGF2YWlsYWJsZSBpbiBzdGQ6Om51bWVyaWNfbGltaXRzIGFzIGNvbXBpbGUKKyAgICAgIC8vIHRpbWUgY29uc3RhbnRzLCBidXQgPGxpbWl0cz4gaXMgYmlnIGFuZCB3ZSBhdm9pZCBpbmNsdWRpbmcgaXQuCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX2lzX3NpZ25lZCA9IF9fZ2xpYmN4eF9zaWduZWQoX1ZhbHVlKTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgX19kaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzKF9WYWx1ZSk7ICAgICAgCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgX1ZhbHVlIF9fbnVtZXJpY190cmFpdHNfaW50ZWdlcjxfVmFsdWU+OjpfX21pbjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgX1ZhbHVlIF9fbnVtZXJpY190cmFpdHNfaW50ZWdlcjxfVmFsdWU+OjpfX21heDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgYm9vbCBfX251bWVyaWNfdHJhaXRzX2ludGVnZXI8X1ZhbHVlPjo6X19pc19zaWduZWQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgorICAgIGNvbnN0IGludCBfX251bWVyaWNfdHJhaXRzX2ludGVnZXI8X1ZhbHVlPjo6X19kaWdpdHM7CisKKyN1bmRlZiBfX2dsaWJjeHhfc2lnbmVkCisjdW5kZWYgX19nbGliY3h4X2RpZ2l0cworI3VuZGVmIF9fZ2xpYmN4eF9taW4KKyN1bmRlZiBfX2dsaWJjeHhfbWF4CisKKyNkZWZpbmUgX19nbGliY3h4X2Zsb2F0aW5nKF9UcCwgX0Z2YWwsIF9EdmFsLCBfTER2YWwpIFwKKyAgKHN0ZDo6X19hcmVfc2FtZTxfVHAsIGZsb2F0Pjo6X192YWx1ZSA/IF9GdmFsIFwKKyAgIDogc3RkOjpfX2FyZV9zYW1lPF9UcCwgZG91YmxlPjo6X192YWx1ZSA/IF9EdmFsIDogX0xEdmFsKQorCisjZGVmaW5lIF9fZ2xpYmN4eF9tYXhfZGlnaXRzMTAoX1RwKSBcCisgICgyICsgX19nbGliY3h4X2Zsb2F0aW5nKF9UcCwgX19GTFRfTUFOVF9ESUdfXywgX19EQkxfTUFOVF9ESUdfXywgXAorCQkJICBfX0xEQkxfTUFOVF9ESUdfXykgKiA2NDNMIC8gMjEzNikKKworI2RlZmluZSBfX2dsaWJjeHhfZGlnaXRzMTAoX1RwKSBcCisgIF9fZ2xpYmN4eF9mbG9hdGluZyhfVHAsIF9fRkxUX0RJR19fLCBfX0RCTF9ESUdfXywgX19MREJMX0RJR19fKQorCisjZGVmaW5lIF9fZ2xpYmN4eF9tYXhfZXhwb25lbnQxMChfVHApIFwKKyAgX19nbGliY3h4X2Zsb2F0aW5nKF9UcCwgX19GTFRfTUFYXzEwX0VYUF9fLCBfX0RCTF9NQVhfMTBfRVhQX18sIFwKKwkJICAgICBfX0xEQkxfTUFYXzEwX0VYUF9fKQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBzdHJ1Y3QgX19udW1lcmljX3RyYWl0c19mbG9hdGluZworICAgIHsKKyAgICAgIC8vIE9ubHkgZmxvYXRpbmcgcG9pbnQgdHlwZXMuIFNlZSBOMTgyMi4gCisgICAgICBzdGF0aWMgY29uc3QgaW50IF9fbWF4X2RpZ2l0czEwID0gX19nbGliY3h4X21heF9kaWdpdHMxMChfVmFsdWUpOworCisgICAgICAvLyBTZWUgYWJvdmUgY29tbWVudC4uLgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX19pc19zaWduZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0IGludCBfX2RpZ2l0czEwID0gX19nbGliY3h4X2RpZ2l0czEwKF9WYWx1ZSk7CisgICAgICBzdGF0aWMgY29uc3QgaW50IF9fbWF4X2V4cG9uZW50MTAgPSBfX2dsaWJjeHhfbWF4X2V4cG9uZW50MTAoX1ZhbHVlKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBjb25zdCBpbnQgX19udW1lcmljX3RyYWl0c19mbG9hdGluZzxfVmFsdWU+OjpfX21heF9kaWdpdHMxMDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgY29uc3QgYm9vbCBfX251bWVyaWNfdHJhaXRzX2Zsb2F0aW5nPF9WYWx1ZT46Ol9faXNfc2lnbmVkOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBjb25zdCBpbnQgX19udW1lcmljX3RyYWl0c19mbG9hdGluZzxfVmFsdWU+OjpfX2RpZ2l0czEwOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBjb25zdCBpbnQgX19udW1lcmljX3RyYWl0c19mbG9hdGluZzxfVmFsdWU+OjpfX21heF9leHBvbmVudDEwOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBzdHJ1Y3QgX19udW1lcmljX3RyYWl0cworICAgIDogcHVibGljIF9fY29uZGl0aW9uYWxfdHlwZTxzdGQ6Ol9faXNfaW50ZWdlcjxfVmFsdWU+OjpfX3ZhbHVlLAorCQkJCV9fbnVtZXJpY190cmFpdHNfaW50ZWdlcjxfVmFsdWU+LAorCQkJCV9fbnVtZXJpY190cmFpdHNfZmxvYXRpbmc8X1ZhbHVlPiA+OjpfX3R5cGUKKyAgICB7IH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI3VuZGVmIF9fZ2xpYmN4eF9mbG9hdGluZworI3VuZGVmIF9fZ2xpYmN4eF9tYXhfZGlnaXRzMTAKKyN1bmRlZiBfX2dsaWJjeHhfZGlnaXRzMTAKKyN1bmRlZiBfX2dsaWJjeHhfbWF4X2V4cG9uZW50MTAKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2ZWJhMQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHAKQEAgLTAsMCArMSw4NjEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYXNzb2NfY29udGFpbmVyLmhwcAorICogQ29udGFpbnMgYXNzb2NpYXRpdmUgY29udGFpbmVycy4KKyAqLworCisjaWZuZGVmIFBCX0RTX0FTU09DX0NOVE5SX0hQUAorI2RlZmluZSBQQl9EU19BU1NPQ19DTlROUl9IUFAKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8ZXh0L3R5cGVsaXN0Lmg+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2guaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS90cmFpdHMuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICAvKioKKyAgICogIEBkZWZncm91cCBjb250YWluZXJzLXBiZHMgQ29udGFpbmVycworICAgKiAgQGluZ3JvdXAgcGJkcworICAgKiAgQHsKKyAgICovCisKKyAgLyoqCisgICAqICBAZGVmZ3JvdXAgaGFzaC1iYXNlZCBIYXNoLUJhc2VkCisgICAqICBAaW5ncm91cCBjb250YWluZXJzLXBiZHMKKyAgICogIEB7CisgICAqLworI2RlZmluZSBQQl9EU19IQVNIX0JBU0UgXAorICBkZXRhaWw6OmNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBfQWxsb2MsIFRhZywgXAorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmFwcGVuZDwgXAorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNyZWF0ZTQ8SGFzaF9GbiwgRXFfRm4sIFJlc2l6ZV9Qb2xpY3ksIFwKKyAgICBkZXRhaWw6OmludGVncmFsX2NvbnN0YW50PGludCwgU3RvcmVfSGFzaD4gPjo6dHlwZSwgUG9saWN5X1RsPjo6dHlwZT46OnR5cGUKKworICAvKioKKyAgICogIEBkZWZncm91cCBoYXNoLWRldGFpbCBCYXNlIGFuZCBQb2xpY3kgQ2xhc3NlcworICAgKiAgQGluZ3JvdXAgaGFzaC1iYXNlZAorICAgKi8KKworICAvKioKKyAgICogIEEgaGFzaGVkIGNvbnRhaW5lciBhYnN0cmFjdGlvbi4KKyAgICoKKyAgICogIEB0cGFyYW0gS2V5IAkgICAgCUtleSB0eXBlLgorICAgKiAgQHRwYXJhbSBNYXBwZWQgCSAgICAJTWFwIHR5cGUuCisgICAqICBAdHBhcmFtIEhhc2hfRm4JICAgIAlIYXNoaW5nIGZ1bmN0b3IuCisgICAqICBAdHBhcmFtIEVxX0ZuCSAgICAJRXF1YWwgZnVuY3Rvci4KKyAgICogIEB0cGFyYW0gUmVzaXplX1BvbGljeSAJUmVzaXplcyBoYXNoLgorICAgKiAgQHRwYXJhbSBTdG9yZV9IYXNoICAgIAlJbmRpY2F0ZXMgd2hldGhlciB0aGUgaGFzaCB2YWx1ZQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHN0b3JlZCBhbG9uZyB3aXRoIGVhY2gga2V5LgorICAgKiAgQHRwYXJhbSBUYWcgCSAgICAJSW5zdGFudGlhdGluZyBkYXRhIHN0cnVjdHVyZSB0eXBlLAorICAgKgkJCSAgICAJc2VlIGNvbnRhaW5lcl90YWcuCisgICAqICBAdHBhcmFtIFBvbGljeV9UTAkgICAgCVBvbGljeSB0eXBlbGlzdC4KKyAgICogIEB0cGFyYW0gX0FsbG9jIAkgICAgCUFsbG9jYXRvciB0eXBlLgorICAgKgorICAgKiAgQmFzZSBpcyBkaXNwYXRjaGVkIGF0IGNvbXBpbGUgdGltZSB2aWEgVGFnLCBmcm9tIHRoZSBmb2xsb3dpbmcKKyAgICogIGNob2ljZXM6IGNjX2hhc2hfdGFnLCBncF9oYXNoX3RhZywgYW5kIGRlc2NlbmRhbnRzIG9mIGJhc2ljX2hhc2hfdGFnLgorICAgKgorICAgKiAgQmFzZSBjaG9pY2VzIGFyZTogZGV0YWlsOjpjY19odF9tYXAsIGRldGFpbDo6Z3BfaHRfbWFwCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgIHR5cGVuYW1lIEhhc2hfRm4sCisJICAgdHlwZW5hbWUgRXFfRm4sCisJICAgdHlwZW5hbWUgUmVzaXplX1BvbGljeSwKKwkgICBib29sIFN0b3JlX0hhc2gsCisJICAgdHlwZW5hbWUgVGFnLAorCSAgIHR5cGVuYW1lIFBvbGljeV9UbCwKKwkgICB0eXBlbmFtZSBfQWxsb2M+CisgIGNsYXNzIGJhc2ljX2hhc2hfdGFibGUgOiBwdWJsaWMgUEJfRFNfSEFTSF9CQVNFCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX0hBU0hfQkFTRSAJCWJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdmlydHVhbAorICAgIH5iYXNpY19oYXNoX3RhYmxlKCkgeyB9CisKKyAgcHJvdGVjdGVkOgorICAgIGJhc2ljX2hhc2hfdGFibGUoKSB7IH0KKworICAgIGJhc2ljX2hhc2hfdGFibGUoY29uc3QgYmFzaWNfaGFzaF90YWJsZSYgb3RoZXIpCisgICAgOiBiYXNlX3R5cGUoKGNvbnN0IGJhc2VfdHlwZSYpb3RoZXIpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDA+CisgICAgICBiYXNpY19oYXNoX3RhYmxlKFQwIHQwKSA6IGJhc2VfdHlwZSh0MCkgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDE+CisgICAgICBiYXNpY19oYXNoX3RhYmxlKFQwIHQwLCBUMSB0MSkgOiBiYXNlX3R5cGUodDAsIHQxKSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgICBiYXNpY19oYXNoX3RhYmxlKFQwIHQwLCBUMSB0MSwgVDIgdDIpIDogYmFzZV90eXBlKHQwLCB0MSwgdDIpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDM+CisgICAgICBiYXNpY19oYXNoX3RhYmxlKFQwIHQwLCBUMSB0MSwgVDIgdDIsIFQzIHQzKQorICAgICAgOiBiYXNlX3R5cGUodDAsIHQxLCB0MiwgdDMpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0PgorICAgICAgYmFzaWNfaGFzaF90YWJsZShUMCB0MCwgVDEgdDEsIFQyIHQyLCBUMyB0MywgVDQgdDQpCisgICAgICA6IGJhc2VfdHlwZSh0MCwgdDEsIHQyLCB0MywgdDQpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LAorCSAgICAgdHlwZW5hbWUgVDU+CisgICAgICBiYXNpY19oYXNoX3RhYmxlKFQwIHQwLCBUMSB0MSwgVDIgdDIsIFQzIHQzLCBUNCB0NCwgVDUgdDUpCisgICAgICA6IGJhc2VfdHlwZSh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1KSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKKwkgICAgIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNj4KKyAgICAgIGJhc2ljX2hhc2hfdGFibGUoVDAgdDAsIFQxIHQxLCBUMiB0MiwgVDMgdDMsIFQ0IHQ0LCBUNSB0NSwgVDYgdDYpCisgICAgICA6IGJhc2VfdHlwZSh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCisJICAgICB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3PgorICAgICAgYmFzaWNfaGFzaF90YWJsZShUMCB0MCwgVDEgdDEsIFQyIHQyLCBUMyB0MywgVDQgdDQsIFQ1IHQ1LCBUNiB0NiwgVDcgdDcpCisgICAgICA6IGJhc2VfdHlwZSh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LAorCSAgICAgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDg+CisgICAgICBiYXNpY19oYXNoX3RhYmxlKFQwIHQwLCBUMSB0MSwgVDIgdDIsIFQzIHQzLCBUNCB0NCwgVDUgdDUsIFQ2IHQ2LAorCQkgICAgICAgVDcgdDcsIFQ4IHQ4KQorICAgICAgOiBiYXNlX3R5cGUodDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCkKKyAgICAgIHsgfQorCisgIHByaXZhdGU6CisgICAgYmFzaWNfaGFzaF90YWJsZSYKKyAgICBvcGVyYXRvcj0oY29uc3QgYmFzZV90eXBlJik7CisgIH07CisKKyN1bmRlZiBQQl9EU19IQVNIX0JBU0UKKworCisjZGVmaW5lIFBCX0RTX0NDX0hBU0hfQkFTRSBcCisgIGJhc2ljX2hhc2hfdGFibGU8S2V5LCBNYXBwZWQsCUhhc2hfRm4sIEVxX0ZuLCBSZXNpemVfUG9saWN5LCBTdG9yZV9IYXNoLCBcCisJCSAgIGNjX2hhc2hfdGFnLAlcCisJICB0eXBlbmFtZSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjcmVhdGUxPENvbWJfSGFzaF9Gbj46OnR5cGUsIF9BbGxvYz4KKworCisgIC8qKgorICAgKiAgQSBjb2xsaXNpb24tY2hhaW5pbmcgaGFzaC1iYXNlZCBhc3NvY2lhdGl2ZSBjb250YWluZXIuCisgICAqCisgICAqICBAdHBhcmFtIEtleSAJICAgIAlLZXkgdHlwZS4KKyAgICogIEB0cGFyYW0gTWFwcGVkIAkgICAgCU1hcCB0eXBlLgorICAgKiAgQHRwYXJhbSBIYXNoX0ZuCSAgICAJSGFzaGluZyBmdW5jdG9yLgorICAgKiAgQHRwYXJhbSBFcV9GbgkgICAgCUVxdWFsIGZ1bmN0b3IuCisgICAqICBAdHBhcmFtIENvbWJfSGFzaF9GbglDb21iaW5pbmcgaGFzaCBmdW5jdG9yLgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBIYXNoX0ZuIGlzIG5vdCBudWxsX3R5cGUsIHRoZW4gdGhpcworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgcmFuZ2VkLWhhc2ggZnVuY3Rvcjsgb3RoZXJ3aXNlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHRoZSByYW5nZS1oYXNoaW5nIGZ1bmN0b3IuCisgICAqICAgICAgICAgICAgICAgICAgICBYWFgoU2VlIERlc2lnbjo6SGFzaC1CYXNlZCBDb250YWluZXJzOjpIYXNoIFBvbGljaWVzLikKKyAgICogIEB0cGFyYW0gUmVzaXplX1BvbGljeSAJUmVzaXplcyBoYXNoLgorICAgKiAgQHRwYXJhbSBTdG9yZV9IYXNoICAgIAlJbmRpY2F0ZXMgd2hldGhlciB0aGUgaGFzaCB2YWx1ZQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHN0b3JlZCBhbG9uZyB3aXRoIGVhY2gga2V5LgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBIYXNoX0ZuIGlzIG51bGxfdHlwZSwgdGhlbiB0aGUKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyIHdpbGwgbm90IGNvbXBpbGUgaWYgdGhpcworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyB0cnVlCisgICAqICBAdHBhcmFtIF9BbGxvYyAJICAgIAlBbGxvY2F0b3IgdHlwZS4KKyAgICoKKyAgICogIEJhc2UgdGFnIGNob2ljZXMgYXJlOiAJY2NfaGFzaF90YWcuCisgICAqCisgICAqICBCYXNlIGlzIGJhc2ljX2hhc2hfdGFibGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgIHR5cGVuYW1lIEhhc2hfRm4gPSB0eXBlbmFtZSBkZXRhaWw6OmRlZmF1bHRfaGFzaF9mbjxLZXk+Ojp0eXBlLAorCSAgIHR5cGVuYW1lIEVxX0ZuID0gdHlwZW5hbWUgZGV0YWlsOjpkZWZhdWx0X2VxX2ZuPEtleT46OnR5cGUsCisJICAgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuID0gZGV0YWlsOjpkZWZhdWx0X2NvbWJfaGFzaF9mbjo6dHlwZSwKKwkgICB0eXBlbmFtZSBSZXNpemVfUG9saWN5ID0gdHlwZW5hbWUgZGV0YWlsOjpkZWZhdWx0X3Jlc2l6ZV9wb2xpY3k8Q29tYl9IYXNoX0ZuPjo6dHlwZSwKKwkgICBib29sIFN0b3JlX0hhc2ggPSBkZXRhaWw6OmRlZmF1bHRfc3RvcmVfaGFzaCwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgIGNsYXNzIGNjX2hhc2hfdGFibGUgOiAgcHVibGljIFBCX0RTX0NDX0hBU0hfQkFTRQorICB7CisgIHByaXZhdGU6CisgICAgdHlwZWRlZiBQQl9EU19DQ19IQVNIX0JBU0UgCQkJYmFzZV90eXBlOworCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIGNjX2hhc2hfdGFnCSAgICAgICAJCQljb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBIYXNoX0ZuIAkJCQloYXNoX2ZuOworICAgIHR5cGVkZWYgRXFfRm4gCQkJCWVxX2ZuOworICAgIHR5cGVkZWYgUmVzaXplX1BvbGljeSAJCQlyZXNpemVfcG9saWN5OworICAgIHR5cGVkZWYgQ29tYl9IYXNoX0ZuIAkJCWNvbWJfaGFzaF9mbjsKKworICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgIGNjX2hhc2hfdGFibGUoKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9oYXNoX2ZuIHdpbGwgYmUKKyAgICAvLy8gY29waWVkIGJ5IHRoZSBIYXNoX0ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICBjY19oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgpCisgICAgOiBiYXNlX3R5cGUoaCkgeyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfaGFzaF9mbiB3aWxsIGJlCisgICAgLy8vIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsIGFuZAorICAgIC8vLyByX2VxX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vLyBvYmplY3QuCisgICAgY2NfaGFzaF90YWJsZShjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSkKKyAgICA6IGJhc2VfdHlwZShoLCBlKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9oYXNoX2ZuIHdpbGwgYmUKKyAgICAvLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgcl9lcV9mbgorICAgIC8vLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LAorICAgIC8vLyBhbmQgcl9jb21iX2hhc2hfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNvbWJfaGFzaF9mbiBvYmplY3QKKyAgICAvLy8gb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgY2NfaGFzaF90YWJsZShjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSwgY29uc3QgY29tYl9oYXNoX2ZuJiBjaCkKKyAgICA6IGJhc2VfdHlwZShoLCBlLCBjaCkgeyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWN5IG9iamVjdHMuIHJfaGFzaF9mbiB3aWxsIGJlCisgICAgLy8vIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsIHJfZXFfZm4KKyAgICAvLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGVxX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLy8gcl9jb21iX2hhc2hfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNvbWJfaGFzaF9mbiBvYmplY3Qgb2YKKyAgICAvLy8gdGhlIGNvbnRhaW5lciBvYmplY3QsIGFuZCByX3Jlc2l6ZV9wb2xpY3kgd2lsbCBiZSBjb3BpZWQgYnkKKyAgICAvLy8gdGhlIHJlc2l6ZV9wb2xpY3kgb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIGNjX2hhc2hfdGFibGUoY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUsIGNvbnN0IGNvbWJfaGFzaF9mbiYgY2gsCisJCSAgY29uc3QgcmVzaXplX3BvbGljeSYgcnApCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY2gsIHJwKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcy4gVGhlCisgICAgLy8vIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvCisgICAgLy8vIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGNjX2hhc2hfdGFibGUoSXQgZmlyc3QsIEl0IGxhc3QpCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcyBhbmQKKyAgICAvLy8gc29tZSBwb2xpY3kgb2JqZWN0cy4gVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8vIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGNjX2hhc2hfdGFibGUoSXQgZmlyc3QsIEl0IGxhc3QsIGNvbnN0IGhhc2hfZm4mIGgpCisgICAgOiBiYXNlX3R5cGUoaCkKKyAgICB7IHRoaXMtPmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcyBhbmQKKyAgICAvLy8gc29tZSBwb2xpY3kgb2JqZWN0cyBUaGUgdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQKKyAgICAvLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsCisgICAgLy8vIGFuZCByX2VxX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlCisgICAgLy8vIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgY2NfaGFzaF90YWJsZShJdCBmaXJzdCwgSXQgbGFzdCwgY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUpCisgICAgOiBiYXNlX3R5cGUoaCwgZSkKKyAgICB7IHRoaXMtPmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcyBhbmQKKyAgICAvLy8gc29tZSBwb2xpY3kgb2JqZWN0cyBUaGUgdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQKKyAgICAvLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsCisgICAgLy8vIHJfZXFfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGVxX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyCisgICAgLy8vIG9iamVjdCwgYW5kIHJfY29tYl9oYXNoX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBjb21iX2hhc2hfZm4KKyAgICAvLy8gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGNjX2hhc2hfdGFibGUoSXQgZmlyc3QsIEl0IGxhc3QsIGNvbnN0IGhhc2hfZm4mIGgsIGNvbnN0IGVxX2ZuJiBlLAorCQkgIGNvbnN0IGNvbWJfaGFzaF9mbiYgY2gpCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY2gpCisgICAgeyB0aGlzLT5jb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMgYW5kCisgICAgLy8vIHNvbWUgcG9saWN5IG9iamVjdHMgVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8vIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgb2JqZWN0LiByX2hhc2hfZm4KKyAgICAvLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGhhc2hfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LAorICAgIC8vLyByX2VxX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vLyBvYmplY3QsIHJfY29tYl9oYXNoX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBjb21iX2hhc2hfZm4KKyAgICAvLy8gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LCBhbmQgcl9yZXNpemVfcG9saWN5IHdpbGwgYmUKKyAgICAvLy8gY29waWVkIGJ5IHRoZSByZXNpemVfcG9saWN5IG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBjY19oYXNoX3RhYmxlKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSwKKwkJICBjb25zdCBjb21iX2hhc2hfZm4mIGNoLCBjb25zdCByZXNpemVfcG9saWN5JiBycCkKKyAgICA6IGJhc2VfdHlwZShoLCBlLCBjaCwgcnApCisgICAgeyB0aGlzLT5jb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICBjY19oYXNoX3RhYmxlKGNvbnN0IGNjX2hhc2hfdGFibGUmIG90aGVyKQorICAgIDogYmFzZV90eXBlKChjb25zdCBiYXNlX3R5cGUmKW90aGVyKQorICAgIHsgfQorCisgICAgdmlydHVhbAorICAgIH5jY19oYXNoX3RhYmxlKCkgeyB9CisKKyAgICBjY19oYXNoX3RhYmxlJgorICAgIG9wZXJhdG9yPShjb25zdCBjY19oYXNoX3RhYmxlJiBvdGhlcikKKyAgICB7CisgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCisJeworCSAgY2NfaGFzaF90YWJsZSB0bXAob3RoZXIpOworCSAgc3dhcCh0bXApOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lkCisgICAgc3dhcChjY19oYXNoX3RhYmxlJiBvdGhlcikKKyAgICB7IGJhc2VfdHlwZTo6c3dhcChvdGhlcik7IH0KKyAgfTsKKworI3VuZGVmIFBCX0RTX0NDX0hBU0hfQkFTRQorCisKKyNkZWZpbmUgUEJfRFNfR1BfSEFTSF9CQVNFIFwKKyAgYmFzaWNfaGFzaF90YWJsZTxLZXksIE1hcHBlZCwJSGFzaF9GbiwgRXFfRm4sIFJlc2l6ZV9Qb2xpY3ksIFN0b3JlX0hhc2gsIFwKKwkJICAgZ3BfaGFzaF90YWcsIFwKKyAgdHlwZW5hbWUgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y3JlYXRlMjxDb21iX1Byb2JlX0ZuLCBQcm9iZV9Gbj46OnR5cGUsIF9BbGxvYz4KKworCisgIC8qKgorICAgKiAgQSBnZW5lcmFsLXByb2JpbmcgaGFzaC1iYXNlZCBhc3NvY2lhdGl2ZSBjb250YWluZXIuCisgICAqCisgICAqICBAdHBhcmFtIEtleSAJICAgIAlLZXkgdHlwZS4KKyAgICogIEB0cGFyYW0gTWFwcGVkIAkgICAgCU1hcCB0eXBlLgorICAgKiAgQHRwYXJhbSBIYXNoX0ZuCSAgICAJSGFzaGluZyBmdW5jdG9yLgorICAgKiAgQHRwYXJhbSBFcV9GbgkgICAgCUVxdWFsIGZ1bmN0b3IuCisgICAqICBAdHBhcmFtIENvbWJfUHJvYmVfRm4JQ29tYmluaW5nIHByb2JlIGZ1bmN0b3IuCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIEhhc2hfRm4gaXMgbm90IG51bGxfdHlwZSwgdGhlbiB0aGlzCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSByYW5nZWQtcHJvYmUgZnVuY3Rvcjsgb3RoZXJ3aXNlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHRoZSByYW5nZS1oYXNoaW5nIGZ1bmN0b3IuCisgICAqICAgICAgICAgICAgICAgICAgICBYWFggU2VlIERlc2lnbjo6SGFzaC1CYXNlZCBDb250YWluZXJzOjpIYXNoIFBvbGljaWVzLgorICAgKiAgQHRwYXJhbSBQcm9iZV9GbgkJUHJvYmUgZnVuY3Rvci4KKyAgICogIEB0cGFyYW0gUmVzaXplX1BvbGljeSAJUmVzaXplcyBoYXNoLgorICAgKiAgQHRwYXJhbSBTdG9yZV9IYXNoICAgIAlJbmRpY2F0ZXMgd2hldGhlciB0aGUgaGFzaCB2YWx1ZQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHN0b3JlZCBhbG9uZyB3aXRoIGVhY2gga2V5LgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBIYXNoX0ZuIGlzIG51bGxfdHlwZSwgdGhlbiB0aGUKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyIHdpbGwgbm90IGNvbXBpbGUgaWYgdGhpcworICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyB0cnVlCisgICAqICBAdHBhcmFtIF9BbGxvYyAJICAgIAlBbGxvY2F0b3IgdHlwZS4KKyAgICoKKyAgICogIEJhc2UgdGFnIGNob2ljZXMgYXJlOiAJZ3BfaGFzaF90YWcuCisgICAqCisgICAqICBCYXNlIGlzIGJhc2ljX2hhc2hfdGFibGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgIHR5cGVuYW1lIEhhc2hfRm4gPSB0eXBlbmFtZSBkZXRhaWw6OmRlZmF1bHRfaGFzaF9mbjxLZXk+Ojp0eXBlLAorCSAgIHR5cGVuYW1lIEVxX0ZuID0gdHlwZW5hbWUgZGV0YWlsOjpkZWZhdWx0X2VxX2ZuPEtleT46OnR5cGUsCisJICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiA9IGRldGFpbDo6ZGVmYXVsdF9jb21iX2hhc2hfZm46OnR5cGUsCisJICAgdHlwZW5hbWUgUHJvYmVfRm4gPSB0eXBlbmFtZSBkZXRhaWw6OmRlZmF1bHRfcHJvYmVfZm48Q29tYl9Qcm9iZV9Gbj46OnR5cGUsCisJICAgdHlwZW5hbWUgUmVzaXplX1BvbGljeSA9IHR5cGVuYW1lIGRldGFpbDo6ZGVmYXVsdF9yZXNpemVfcG9saWN5PENvbWJfUHJvYmVfRm4+Ojp0eXBlLAorCSAgIGJvb2wgU3RvcmVfSGFzaCA9IGRldGFpbDo6ZGVmYXVsdF9zdG9yZV9oYXNoLAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgY2xhc3MgZ3BfaGFzaF90YWJsZSA6IHB1YmxpYyBQQl9EU19HUF9IQVNIX0JBU0UKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgUEJfRFNfR1BfSEFTSF9CQVNFIAkJCWJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBncF9oYXNoX3RhZwkgICAgICAgCQkJY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgSGFzaF9GbiAJCQkJaGFzaF9mbjsKKyAgICB0eXBlZGVmIEVxX0ZuIAkJCQllcV9mbjsKKyAgICB0eXBlZGVmIENvbWJfUHJvYmVfRm4JCQljb21iX3Byb2JlX2ZuOworICAgIHR5cGVkZWYgUHJvYmVfRm4gCQkJCXByb2JlX2ZuOworICAgIHR5cGVkZWYgUmVzaXplX1BvbGljeSAJCQlyZXNpemVfcG9saWN5OworCisgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgZ3BfaGFzaF90YWJsZSgpIHsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBzb21lIHBvbGljeSBvYmplY3RzLiByX2hhc2hfZm4gd2lsbCBiZQorICAgIC8vLyBjb3BpZWQgYnkgdGhlIGhhc2hfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIGdwX2hhc2hfdGFibGUoY29uc3QgaGFzaF9mbiYgaCkKKyAgICA6IGJhc2VfdHlwZShoKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9oYXNoX2ZuIHdpbGwgYmUKKyAgICAvLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgYW5kCisgICAgLy8vIHJfZXFfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGVxX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyCisgICAgLy8vIG9iamVjdC4KKyAgICBncF9oYXNoX3RhYmxlKGNvbnN0IGhhc2hfZm4mIGgsIGNvbnN0IGVxX2ZuJiBlKQorICAgIDogYmFzZV90eXBlKGgsIGUpIHsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBzb21lIHBvbGljeSBvYmplY3RzLiByX2hhc2hfZm4gd2lsbCBiZQorICAgIC8vLyBjb3BpZWQgYnkgdGhlIGhhc2hfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LCByX2VxX2ZuCisgICAgLy8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsCisgICAgLy8vIGFuZCByX2NvbWJfcHJvYmVfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNvbWJfcHJvYmVfZm4gb2JqZWN0CisgICAgLy8vIG9mIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIGdwX2hhc2hfdGFibGUoY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUsIGNvbnN0IGNvbWJfcHJvYmVfZm4mIGNwKQorICAgIDogYmFzZV90eXBlKGgsIGUsIGNwKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9oYXNoX2ZuIHdpbGwgYmUKKyAgICAvLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgcl9lcV9mbgorICAgIC8vLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LAorICAgIC8vLyByX2NvbWJfcHJvYmVfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNvbWJfcHJvYmVfZm4gb2JqZWN0IG9mCisgICAgLy8vIHRoZSBjb250YWluZXIgb2JqZWN0LCBhbmQgcl9wcm9iZV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUKKyAgICAvLy8gcHJvYmVfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIGdwX2hhc2hfdGFibGUoY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUsIGNvbnN0IGNvbWJfcHJvYmVfZm4mIGNwLAorCQkgIGNvbnN0IHByb2JlX2ZuJiBwKQorICAgIDogYmFzZV90eXBlKGgsIGUsIGNwLCBwKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9oYXNoX2ZuIHdpbGwgYmUKKyAgICAvLy8gY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgcl9lcV9mbgorICAgIC8vLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LAorICAgIC8vLyByX2NvbWJfcHJvYmVfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNvbWJfcHJvYmVfZm4gb2JqZWN0IG9mCisgICAgLy8vIHRoZSBjb250YWluZXIgb2JqZWN0LCByX3Byb2JlX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZQorICAgIC8vLyBwcm9iZV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsIGFuZCByX3Jlc2l6ZV9wb2xpY3kKKyAgICAvLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIFJlc2l6ZV9Qb2xpY3kgb2JqZWN0IG9mIHRoZSBjb250YWluZXIKKyAgICAvLy8gb2JqZWN0LgorICAgIGdwX2hhc2hfdGFibGUoY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUsIGNvbnN0IGNvbWJfcHJvYmVfZm4mIGNwLAorCQkgIGNvbnN0IHByb2JlX2ZuJiBwLCBjb25zdCByZXNpemVfcG9saWN5JiBycCkKKyAgICA6IGJhc2VfdHlwZShoLCBlLCBjcCwgcCwgcnApIHsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzLiBUaGUKKyAgICAvLy8gdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQgbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8KKyAgICAvLy8gdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgZ3BfaGFzaF90YWJsZShJdCBmaXJzdCwgSXQgbGFzdCkKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vLyBzb21lIHBvbGljeSBvYmplY3RzLiBUaGUgdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQKKyAgICAvLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgZ3BfaGFzaF90YWJsZShJdCBmaXJzdCwgSXQgbGFzdCwgY29uc3QgaGFzaF9mbiYgaCkKKyAgICA6IGJhc2VfdHlwZShoKQorICAgIHsgYmFzZV90eXBlOjpjb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMgYW5kCisgICAgLy8vIHNvbWUgcG9saWN5IG9iamVjdHMuIFRoZSB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZAorICAgIC8vLyBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyIG9iamVjdC4gcl9oYXNoX2ZuCisgICAgLy8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLy8gYW5kIHJfZXFfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGVxX2ZuIG9iamVjdCBvZiB0aGUKKyAgICAvLy8gY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBncF9oYXNoX3RhYmxlKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSkKKyAgICA6IGJhc2VfdHlwZShoLCBlKQorICAgIHsgYmFzZV90eXBlOjpjb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMgYW5kCisgICAgLy8vIHNvbWUgcG9saWN5IG9iamVjdHMuIFRoZSB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZAorICAgIC8vLyBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyIG9iamVjdC4gcl9oYXNoX2ZuCisgICAgLy8vIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBoYXNoX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwKKyAgICAvLy8gcl9lcV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgZXFfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIKKyAgICAvLy8gb2JqZWN0LCBhbmQgcl9jb21iX3Byb2JlX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZQorICAgIC8vLyBjb21iX3Byb2JlX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBncF9oYXNoX3RhYmxlKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSwKKwkJICBjb25zdCBjb21iX3Byb2JlX2ZuJiBjcCkKKyAgICA6IGJhc2VfdHlwZShoLCBlLCBjcCkKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vLyBzb21lIHBvbGljeSBvYmplY3RzLiBUaGUgdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQKKyAgICAvLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuIHJfaGFzaF9mbgorICAgIC8vLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgaGFzaF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsCisgICAgLy8vIHJfZXFfZm4gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGVxX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyCisgICAgLy8vIG9iamVjdCwgcl9jb21iX3Byb2JlX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBjb21iX3Byb2JlX2ZuCisgICAgLy8vIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgYW5kIHJfcHJvYmVfZm4gd2lsbCBiZSBjb3BpZWQKKyAgICAvLy8gYnkgdGhlIHByb2JlX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBncF9oYXNoX3RhYmxlKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBoYXNoX2ZuJiBoLCBjb25zdCBlcV9mbiYgZSwKKwkJICBjb25zdCBjb21iX3Byb2JlX2ZuJiBjcCwgY29uc3QgcHJvYmVfZm4mIHApCisgICAgOiBiYXNlX3R5cGUoaCwgZSwgY3AsIHApCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdCwgbGFzdCk7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcyBhbmQKKyAgICAvLy8gc29tZSBwb2xpY3kgb2JqZWN0cy4gVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8vIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgb2JqZWN0LiByX2hhc2hfZm4KKyAgICAvLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGhhc2hfZm4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIgb2JqZWN0LAorICAgIC8vLyByX2VxX2ZuIHdpbGwgYmUgY29waWVkIGJ5IHRoZSBlcV9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vLyBvYmplY3QsIHJfY29tYl9wcm9iZV9mbiB3aWxsIGJlIGNvcGllZCBieSB0aGUgY29tYl9wcm9iZV9mbgorICAgIC8vLyBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QsIHJfcHJvYmVfZm4gd2lsbCBiZSBjb3BpZWQgYnkKKyAgICAvLy8gdGhlIHByb2JlX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdCwgYW5kCisgICAgLy8vIHJfcmVzaXplX3BvbGljeSB3aWxsIGJlIGNvcGllZCBieSB0aGUgcmVzaXplX3BvbGljeSBvYmplY3Qgb2YKKyAgICAvLy8gdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgZ3BfaGFzaF90YWJsZShJdCBmaXJzdCwgSXQgbGFzdCwgY29uc3QgaGFzaF9mbiYgaCwgY29uc3QgZXFfZm4mIGUsCisJCSAgY29uc3QgY29tYl9wcm9iZV9mbiYgY3AsIGNvbnN0IHByb2JlX2ZuJiBwLAorCQkgIGNvbnN0IHJlc2l6ZV9wb2xpY3kmIHJwKQorICAgIDogYmFzZV90eXBlKGgsIGUsIGNwLCBwLCBycCkKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgZ3BfaGFzaF90YWJsZShjb25zdCBncF9oYXNoX3RhYmxlJiBvdGhlcikKKyAgICA6IGJhc2VfdHlwZSgoY29uc3QgYmFzZV90eXBlJilvdGhlcikKKyAgICB7IH0KKworICAgIHZpcnR1YWwKKyAgICB+Z3BfaGFzaF90YWJsZSgpIHsgfQorCisgICAgZ3BfaGFzaF90YWJsZSYKKyAgICBvcGVyYXRvcj0oY29uc3QgZ3BfaGFzaF90YWJsZSYgb3RoZXIpCisgICAgeworICAgICAgaWYgKHRoaXMgIT0gJm90aGVyKQorCXsKKwkgIGdwX2hhc2hfdGFibGUgdG1wKG90aGVyKTsKKwkgIHN3YXAodG1wKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZAorICAgIHN3YXAoZ3BfaGFzaF90YWJsZSYgb3RoZXIpCisgICAgeyBiYXNlX3R5cGU6OnN3YXAob3RoZXIpOyB9CisgIH07CisgIC8vQH0gaGFzaC1iYXNlZAorI3VuZGVmIFBCX0RTX0dQX0hBU0hfQkFTRQorCisKKyAgLyoqCisgICAqICBAZGVmZ3JvdXAgYnJhbmNoLWJhc2VkIEJyYW5jaC1CYXNlZAorICAgKiAgQGluZ3JvdXAgY29udGFpbmVycy1wYmRzCisgICAqICBAeworICAgKi8KKyNkZWZpbmUgUEJfRFNfQlJBTkNIX0JBU0UgXAorICBkZXRhaWw6OmNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBfQWxsb2MsIFRhZywgUG9saWN5X1RsPjo6dHlwZQorCisgIC8qKgorICAgKiAgQGRlZmdyb3VwIGJyYW5jaC1kZXRhaWwgQmFzZSBhbmQgUG9saWN5IENsYXNzZXMKKyAgICogIEBpbmdyb3VwIGJyYW5jaC1iYXNlZAorICAgKi8KKworICAvKioKKyAgICogIEEgYnJhbmNoZWQsIHRyZWUtbGlrZSAodHJlZSwgdHJpZSkgY29udGFpbmVyIGFic3RyYWN0aW9uLgorICAgKgorICAgKiAgQHRwYXJhbSBLZXkgCSAgCUtleSB0eXBlLgorICAgKiAgQHRwYXJhbSBNYXBwZWQgCSAgCU1hcCB0eXBlLgorICAgKiAgQHRwYXJhbSBUYWcgCSAgCUluc3RhbnRpYXRpbmcgZGF0YSBzdHJ1Y3R1cmUgdHlwZSwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGNvbnRhaW5lcl90YWcuCisgICAqICBAdHBhcmFtIE5vZGVfVXBkYXRlIAlVcGRhdGVzIG5vZGVzLCByZXN0b3JlcyBpbnZhcmlhbnRzLgorICAgKiAgQHRwYXJhbSBQb2xpY3lfVEwgICAgICAgICBQb2xpY3kgdHlwZWxpc3QuCisgICAqICBAdHBhcmFtIF9BbGxvYyAJICAJQWxsb2NhdG9yIHR5cGUuCisgICAqCisgICAqICBCYXNlIGlzIGRpc3BhdGNoZWQgYXQgY29tcGlsZSB0aW1lIHZpYSBUYWcsIGZyb20gdGhlIGZvbGxvd2luZworICAgKiAgY2hvaWNlczogdHJlZV90YWcsIHRyaWVfdGFnLCBhbmQgdGhlaXIgZGVzY2VuZGFudHMuCisgICAqCisgICAqICBCYXNlIGNob2ljZXMgYXJlOiBkZXRhaWw6Om92X3RyZWVfbWFwLCBkZXRhaWw6OnJiX3RyZWVfbWFwLAorICAgKgkJICAgICAgIAlkZXRhaWw6OnNwbGF5X3RyZWVfbWFwLCBhbmQgZGV0YWlsOjpwYXRfdHJpZV9tYXAuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgVGFnLAorCSAgIHR5cGVuYW1lIE5vZGVfVXBkYXRlLCB0eXBlbmFtZSBQb2xpY3lfVGwsIHR5cGVuYW1lIF9BbGxvYz4KKyAgY2xhc3MgYmFzaWNfYnJhbmNoIDogcHVibGljIFBCX0RTX0JSQU5DSF9CQVNFCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX0JSQU5DSF9CQVNFIAkgICAgICAgCWJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBOb2RlX1VwZGF0ZSAJCQlub2RlX3VwZGF0ZTsKKworICAgIHZpcnR1YWwKKyAgICB+YmFzaWNfYnJhbmNoKCkgeyB9CisKKyAgcHJvdGVjdGVkOgorICAgIGJhc2ljX2JyYW5jaCgpIHsgfQorCisgICAgYmFzaWNfYnJhbmNoKGNvbnN0IGJhc2ljX2JyYW5jaCYgb3RoZXIpCisgICAgOiBiYXNlX3R5cGUoKGNvbnN0IGJhc2VfdHlwZSYpb3RoZXIpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDA+CisgICAgICBiYXNpY19icmFuY2goVDAgdDApIDogYmFzZV90eXBlKHQwKSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMT4KKyAgICAgIGJhc2ljX2JyYW5jaChUMCB0MCwgVDEgdDEpIDogYmFzZV90eXBlKHQwLCB0MSkgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorICAgICAgYmFzaWNfYnJhbmNoKFQwIHQwLCBUMSB0MSwgVDIgdDIpIDogYmFzZV90eXBlKHQwLCB0MSwgdDIpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDM+CisgICAgICBiYXNpY19icmFuY2goVDAgdDAsIFQxIHQxLCBUMiB0MiwgVDMgdDMpCisgICAgICA6IGJhc2VfdHlwZSh0MCwgdDEsIHQyLCB0MykgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQ+CisgICAgICBiYXNpY19icmFuY2goVDAgdDAsIFQxIHQxLCBUMiB0MiwgVDMgdDMsIFQ0IHQ0KQorICAgICAgOiBiYXNlX3R5cGUodDAsIHQxLCB0MiwgdDMsIHQ0KSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKKwkgICAgIHR5cGVuYW1lIFQ1PgorICAgICAgYmFzaWNfYnJhbmNoKFQwIHQwLCBUMSB0MSwgVDIgdDIsIFQzIHQzLCBUNCB0NCwgVDUgdDUpCisgICAgICA6IGJhc2VfdHlwZSh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1KSB7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwKKwkgICAgIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBUNj4KKyAgICAgIGJhc2ljX2JyYW5jaChUMCB0MCwgVDEgdDEsIFQyIHQyLCBUMyB0MywgVDQgdDQsIFQ1IHQ1LCBUNiB0NikKKyAgICAgIDogYmFzZV90eXBlKHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2KSB7IH0KKyAgfTsKKyN1bmRlZiBQQl9EU19CUkFOQ0hfQkFTRQorCisKKyNkZWZpbmUgUEJfRFNfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFMgXAorICBkZXRhaWw6OnRyZWVfdHJhaXRzPEtleSwgTWFwcGVkLENtcF9GbixOb2RlX1VwZGF0ZSxUYWcsX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX1RSRUVfQkFTRSBcCisgIGJhc2ljX2JyYW5jaDxLZXksTWFwcGVkLCBUYWcsIFwKKwkgICAgICAgdHlwZW5hbWUgUEJfRFNfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFM6Om5vZGVfdXBkYXRlLCBcCisJICAgICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNyZWF0ZTI8Q21wX0ZuLCBcCisJICAgICAgIFBCX0RTX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTPjo6dHlwZSwgX0FsbG9jPgorCisKKyAgLyoqCisgICAqICBBIHRyZWUtYmFzZWQgY29udGFpbmVyLgorICAgKgorICAgKiAgQHRwYXJhbSBLZXkgCSAJS2V5IHR5cGUuCisgICAqICBAdHBhcmFtIE1hcHBlZCAJIAlNYXAgdHlwZS4KKyAgICogIEB0cGFyYW0gQ21wX0ZuCSAJQ29tcGFyaXNvbiBmdW5jdG9yLgorICAgKiAgQHRwYXJhbSBUYWcgCSAJSW5zdGFudGlhdGluZyBkYXRhIHN0cnVjdHVyZSB0eXBlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWUgY29udGFpbmVyX3RhZy4KKyAgICogIEB0cGFyYW0gTm9kZV9VcGRhdGUgCVVwZGF0ZXMgdHJlZSBpbnRlcm5hbC1ub2RlcywKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZXMgaW52YXJpYW50cyB3aGVuIGludmFsaWRhdGVkLgorICAgKiAgICAgICAgICAgICAgICAgICAgIFhYWCBTZWUgZGVzaWduOjp0cmVlLWJhc2VkLWNvbnRhaW5lcnM6Om5vZGUgaW52YXJpYW50cy4KKyAgICogIEB0cGFyYW0gX0FsbG9jIAkgCUFsbG9jYXRvciB0eXBlLgorICAgKgorICAgKiAgQmFzZSB0YWcgY2hvaWNlcyBhcmU6IG92X3RyZWVfdGFnLCByYl90cmVlX3RhZywgc3BsYXlfdHJlZV90YWcuCisgICAqCisgICAqICBCYXNlIGlzIGJhc2ljX2JyYW5jaC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBDbXBfRm4gPSBzdGQ6Omxlc3M8S2V5PiwKKwkgICB0eXBlbmFtZSBUYWcgPSByYl90cmVlX3RhZywKKwkgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsIHR5cGVuYW1lIE5vZGVfSXRyLAorCQkgICAgdHlwZW5hbWUgQ21wX0ZuXywgdHlwZW5hbWUgX0FsbG9jXz4KKwkgICBjbGFzcyBOb2RlX1VwZGF0ZSA9IG51bGxfbm9kZV91cGRhdGUsCisJICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICBjbGFzcyB0cmVlIDogcHVibGljIFBCX0RTX1RSRUVfQkFTRQorICB7CisgIHByaXZhdGU6CisgICAgdHlwZWRlZiBQQl9EU19UUkVFX0JBU0UgCQkJYmFzZV90eXBlOworCisgIHB1YmxpYzoKKyAgICAvLy8gQ29tcGFyaXNvbiBmdW5jdG9yIHR5cGUuCisgICAgdHlwZWRlZiBDbXBfRm4gCQkJCWNtcF9mbjsKKworICAgIHRyZWUoKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9jbXBfZm4gd2lsbCBiZQorICAgIC8vLyBjb3BpZWQgYnkgdGhlIENtcF9GbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdHJlZShjb25zdCBjbXBfZm4mIGMpCisgICAgOiBiYXNlX3R5cGUoYykgeyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMuIFRoZQorICAgIC8vLyB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZCBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50bworICAgIC8vLyB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICB0cmVlKEl0IGZpcnN0LCBJdCBsYXN0KQorICAgIHsgYmFzZV90eXBlOjpjb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMgYW5kCisgICAgLy8vIHNvbWUgcG9saWN5IG9iamVjdHMgVGhlIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kCisgICAgLy8vIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIgb2JqZWN0LiByX2NtcF9mbgorICAgIC8vLyB3aWxsIGJlIGNvcGllZCBieSB0aGUgY21wX2ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICB0cmVlKEl0IGZpcnN0LCBJdCBsYXN0LCBjb25zdCBjbXBfZm4mIGMpCisgICAgOiBiYXNlX3R5cGUoYykKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgdHJlZShjb25zdCB0cmVlJiBvdGhlcikKKyAgICA6IGJhc2VfdHlwZSgoY29uc3QgYmFzZV90eXBlJilvdGhlcikgeyB9CisKKyAgICB2aXJ0dWFsCisgICAgfnRyZWUoKSB7IH0KKworICAgIHRyZWUmCisgICAgb3BlcmF0b3I9KGNvbnN0IHRyZWUmIG90aGVyKQorICAgIHsKKyAgICAgIGlmICh0aGlzICE9ICZvdGhlcikKKwl7CisJICB0cmVlIHRtcChvdGhlcik7CisJICBzd2FwKHRtcCk7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHZvaWQKKyAgICBzd2FwKHRyZWUmIG90aGVyKQorICAgIHsgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsgfQorICB9OworCisjdW5kZWYgUEJfRFNfVFJFRV9CQVNFCisjdW5kZWYgUEJfRFNfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFMKKworCisjZGVmaW5lIFBCX0RTX1RSSUVfTk9ERV9BTkRfSVRfVFJBSVRTIFwKKyAgZGV0YWlsOjp0cmllX3RyYWl0czxLZXksTWFwcGVkLF9BVHJhaXRzLE5vZGVfVXBkYXRlLFRhZyxfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfVFJJRV9CQVNFIFwKKyAgYmFzaWNfYnJhbmNoPEtleSxNYXBwZWQsVGFnLCBcCisJICAgICAgIHR5cGVuYW1lIFBCX0RTX1RSSUVfTk9ERV9BTkRfSVRfVFJBSVRTOjpub2RlX3VwZGF0ZSwgXAorCSAgICAgICB0eXBlbmFtZSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjcmVhdGUyPF9BVHJhaXRzLCBcCisJICAgICAgIFBCX0RTX1RSSUVfTk9ERV9BTkRfSVRfVFJBSVRTID46OnR5cGUsIF9BbGxvYz4KKworCisgIC8qKgorICAgKiAgQSB0cmllLWJhc2VkIGNvbnRhaW5lci4KKyAgICoKKyAgICogIEB0cGFyYW0gS2V5IAkgIAlLZXkgdHlwZS4KKyAgICogIEB0cGFyYW0gTWFwcGVkIAkgIAlNYXAgdHlwZS4KKyAgICogIEB0cGFyYW0gX0FUcmFpdHMJICAJRWxlbWVudCBhY2Nlc3MgdHJhaXRzLgorICAgKiAgQHRwYXJhbSBUYWcgCSAgCUluc3RhbnRpYXRpbmcgZGF0YSBzdHJ1Y3R1cmUgdHlwZSwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGNvbnRhaW5lcl90YWcuCisgICAqICBAdHBhcmFtIE5vZGVfVXBkYXRlIAlVcGRhdGVzIHRyaWUgaW50ZXJuYWwtbm9kZXMsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVzIGludmFyaWFudHMgd2hlbiBpbnZhbGlkYXRlZC4KKyAgICogICAgICAgICAgICAgICAgICAgICBYWFggU2VlIGRlc2lnbjo6dHJlZS1iYXNlZC1jb250YWluZXJzOjpub2RlIGludmFyaWFudHMuCisgICAqICBAdHBhcmFtIF9BbGxvYyAJICAJQWxsb2NhdG9yIHR5cGUuCisgICAqCisgICAqICBCYXNlIHRhZyBjaG9pY2UgaXMgcGF0X3RyaWVfdGFnLgorICAgKgorICAgKiAgQmFzZSBpcyBiYXNpY19icmFuY2guCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgIHR5cGVuYW1lIF9BVHJhaXRzID0gXAorCQkgICAgdHlwZW5hbWUgZGV0YWlsOjpkZWZhdWx0X3RyaWVfYWNjZXNzX3RyYWl0czxLZXk+Ojp0eXBlLAorCSAgIHR5cGVuYW1lIFRhZyA9IHBhdF90cmllX3RhZywKKwkgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsCisJCSAgICB0eXBlbmFtZSBOb2RlX0l0ciwKKwkJICAgIHR5cGVuYW1lIF9BVHJhaXRzXywKKwkJICAgIHR5cGVuYW1lIF9BbGxvY18+CisJICAgY2xhc3MgTm9kZV9VcGRhdGUgPSBudWxsX25vZGVfdXBkYXRlLAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgY2xhc3MgdHJpZSA6IHB1YmxpYyBQQl9EU19UUklFX0JBU0UKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgUEJfRFNfVFJJRV9CQVNFCQkJYmFzZV90eXBlOworCisgIHB1YmxpYzoKKyAgICAvLy8gRWxlbWVudCBhY2Nlc3MgdHJhaXRzIHR5cGUuCisgICAgdHlwZWRlZiBfQVRyYWl0cyAJCQkJYWNjZXNzX3RyYWl0czsKKworICAgIHRyaWUoKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgc29tZSBwb2xpY3kgb2JqZWN0cy4gcl9hY2Nlc3NfdHJhaXRzIHdpbGwKKyAgICAvLy8gYmUgY29waWVkIGJ5IHRoZSBfQVRyYWl0cyBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdHJpZShjb25zdCBhY2Nlc3NfdHJhaXRzJiB0KQorICAgIDogYmFzZV90eXBlKHQpIHsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzLiBUaGUKKyAgICAvLy8gdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQgbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8KKyAgICAvLy8gdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgdHJpZShJdCBmaXJzdCwgSXQgbGFzdCkKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0LCBsYXN0KTsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vLyBzb21lIHBvbGljeSBvYmplY3RzLiBUaGUgdmFsdWVfdHlwZXMgYmV0d2VlbiBmaXJzdF9pdCBhbmQKKyAgICAvLy8gbGFzdF9pdCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgdHJpZShJdCBmaXJzdCwgSXQgbGFzdCwgY29uc3QgYWNjZXNzX3RyYWl0cyYgdCkKKyAgICA6IGJhc2VfdHlwZSh0KQorICAgIHsgYmFzZV90eXBlOjpjb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICB0cmllKGNvbnN0IHRyaWUmIG90aGVyKQorICAgIDogYmFzZV90eXBlKChjb25zdCBiYXNlX3R5cGUmKW90aGVyKSB7IH0KKworICAgIHZpcnR1YWwKKyAgICB+dHJpZSgpIHsgfQorCisgICAgdHJpZSYKKyAgICBvcGVyYXRvcj0oY29uc3QgdHJpZSYgb3RoZXIpCisgICAgeworICAgICAgaWYgKHRoaXMgIT0gJm90aGVyKQorCXsKKwkgIHRyaWUgdG1wKG90aGVyKTsKKwkgIHN3YXAodG1wKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZAorICAgIHN3YXAodHJpZSYgb3RoZXIpCisgICAgeyBiYXNlX3R5cGU6OnN3YXAob3RoZXIpOyB9CisgIH07CisgIC8vQH0gYnJhbmNoLWJhc2VkCisjdW5kZWYgUEJfRFNfVFJJRV9CQVNFCisjdW5kZWYgUEJfRFNfVFJJRV9OT0RFX0FORF9JVF9UUkFJVFMKKworCisgIC8qKgorICAgKiAgQGRlZmdyb3VwIGxpc3QtYmFzZWQgTGlzdC1CYXNlZAorICAgKiAgQGluZ3JvdXAgY29udGFpbmVycy1wYmRzCisgICAqICBAeworICAgKi8KKyNkZWZpbmUgUEJfRFNfTFVfQkFTRSBcCisgIGRldGFpbDo6Y29udGFpbmVyX2Jhc2VfZGlzcGF0Y2g8S2V5LCBNYXBwZWQsIF9BbGxvYywgbGlzdF91cGRhdGVfdGFnLAlcCisgICAgdHlwZW5hbWUgX19nbnVfY3h4Ojp0eXBlbGlzdDo6Y3JlYXRlMjxFcV9GbiwgVXBkYXRlX1BvbGljeT46OnR5cGU+Ojp0eXBlCisKKworICAvKioKKyAgICogIEEgbGlzdC11cGRhdGUgYmFzZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyLgorICAgKgorICAgKiAgQHRwYXJhbSBLZXkgCSAgICAJS2V5IHR5cGUuCisgICAqICBAdHBhcmFtIE1hcHBlZCAJICAgIAlNYXAgdHlwZS4KKyAgICogIEB0cGFyYW0gRXFfRm4JICAgIAlFcXVhbCBmdW5jdG9yLgorICAgKiAgQHRwYXJhbSBVcGRhdGVfUG9saWN5CVVwZGF0ZSBwb2xpY3ksIGRldGVybWluZXMgd2hlbiBhbiBlbGVtZW50CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgbW92ZWQgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0LgorICAgKiAgQHRwYXJhbSBfQWxsb2MgCSAgICAJQWxsb2NhdG9yIHR5cGUuCisgICAqCisgICAqICBCYXNlIGlzIGRldGFpbDo6bHVfbWFwLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgIHR5cGVuYW1lIE1hcHBlZCwKKwkgICBjbGFzcyBFcV9GbiA9IHR5cGVuYW1lIGRldGFpbDo6ZGVmYXVsdF9lcV9mbjxLZXk+Ojp0eXBlLAorCSAgIGNsYXNzIFVwZGF0ZV9Qb2xpY3kgPSBkZXRhaWw6OmRlZmF1bHRfdXBkYXRlX3BvbGljeTo6dHlwZSwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+CisgIGNsYXNzIGxpc3RfdXBkYXRlIDogcHVibGljIFBCX0RTX0xVX0JBU0UKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgdHlwZW5hbWUgUEJfRFNfTFVfQkFTRSAJCWJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBsaXN0X3VwZGF0ZV90YWcJICAgICAgIAkJY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgRXFfRm4gCQkJCWVxX2ZuOworICAgIHR5cGVkZWYgVXBkYXRlX1BvbGljeSAJCQl1cGRhdGVfcG9saWN5OworCisgICAgbGlzdF91cGRhdGUoKSB7IH0KKworICAgIC8vLyBDb25zdHJ1Y3RvciB0YWtpbmcgX19pdGVyYXRvcnMgdG8gYSByYW5nZSBvZiB2YWx1ZV90eXBlcy4gVGhlCisgICAgLy8vIHZhbHVlX3R5cGVzIGJldHdlZW4gZmlyc3RfaXQgYW5kIGxhc3RfaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvCisgICAgLy8vIHRoZSBjb250YWluZXIgb2JqZWN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgIGxpc3RfdXBkYXRlKEl0IGZpcnN0LCBJdCBsYXN0KQorICAgIHsgYmFzZV90eXBlOjpjb3B5X2Zyb21fcmFuZ2UoZmlyc3QsIGxhc3QpOyB9CisKKyAgICBsaXN0X3VwZGF0ZShjb25zdCBsaXN0X3VwZGF0ZSYgb3RoZXIpCisgICAgOiBiYXNlX3R5cGUoKGNvbnN0IGJhc2VfdHlwZSYpb3RoZXIpIHsgfQorCisgICAgdmlydHVhbAorICAgIH5saXN0X3VwZGF0ZSgpIHsgfQorCisgICAgbGlzdF91cGRhdGUmCisgICAgb3BlcmF0b3I9KGNvbnN0IGxpc3RfdXBkYXRlJiBvdGhlcikKKyAgICB7CisgICAgICBpZiAodGhpcyAhPSYgb3RoZXIpCisJeworCSAgbGlzdF91cGRhdGUgdG1wKG90aGVyKTsKKwkgIHN3YXAodG1wKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZAorICAgIHN3YXAobGlzdF91cGRhdGUmIG90aGVyKQorICAgIHsgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsgfQorICB9OworICAvL0B9IGxpc3QtYmFzZWQKKyN1bmRlZiBQQl9EU19MVV9CQVNFCisKKyAgLy8gQH0gZ3JvdXAgY29udGFpbmVycy1wYmRzCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vYmluX3NlYXJjaF90cmVlXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9iaW5fc2VhcmNoX3RyZWVfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTU4MzliCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vYmluX3NlYXJjaF90cmVlXy5ocHAKQEAgLTAsMCArMSw0MjggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogIEBmaWxlIGJpbl9zZWFyY2hfdHJlZV8vYmluX3NlYXJjaF90cmVlXy5ocHAKKyAqICBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluYXJ5IHNlYXJjaCB0cmVlLgorICovCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZXhjZXB0aW9uLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZXFfZm4vZXFfYnlfbGVzcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29uZF9kZWFsdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHJlZV90cmFjZV9iYXNlLmhwcD4KKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZGVidWdfbWFwX2Jhc2UuaHBwPgorI2VuZGlmCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQklOX1RSRUVfTkFNRSBiaW5fc2VhcmNoX3RyZWVfbWFwCisjZW5kaWYKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0JJTl9UUkVFX05BTUUgYmluX3NlYXJjaF90cmVlX3NldAorI2VuZGlmCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBDbXBfRm4sIFwKKwkgICAgIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBQQl9EU19CSU5fVFJFRV9OQU1FPEtleSwgTWFwcGVkLCBDbXBfRm4sIE5vZGVfQW5kX0l0X1RyYWl0cywgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX0JJTl9UUkVFX1RSQUlUU19CQVNFIFwKKyAgICB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIF9BbGxvYywgZmFsc2U+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyAgXAorICAgIGRlYnVnX21hcF9iYXNlPEtleSwJZXFfYnlfbGVzczxLZXksIENtcF9Gbj4sIFwKKwkgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlPgorI2VuZGlmCisKKyNpZmRlZiBQQl9EU19UUkVFX1RSQUNFCisjZGVmaW5lIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9DX0RFQyBcCisgICAgdHJlZV90cmFjZV9iYXNlPHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6bm9kZV9jb25zdF9pdGVyYXRvciwgXAorCQkgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX2l0ZXJhdG9yLAkgICAgICBcCisJCSAgICBDbXBfRm4sIHRydWUsIF9BbGxvYz4KKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqICBAYnJpZWYgQmluYXJ5IHNlYXJjaCB0cmVlIChCU1QpLgorICAgICAqCisgICAgICogIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBhbiBpZGVhIGZyb20gdGhlIFNHSSBTVEwgKHVzaW5nIGEgQGEKKyAgICAgKiAgaGVhZGVyIG5vZGUgd2hpY2ggaXMgbmVlZGVkIGZvciBlZmZpY2llbnQgaXRlcmF0aW9uKS4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgQ21wX0ZuLAorCSAgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgUEJfRFNfQklOX1RSRUVfTkFNRSA6CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHB1YmxpYyBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQywKKyNlbmRpZgorI2lmZGVmIFBCX0RTX1RSRUVfVFJBQ0UKKyAgICAgIHB1YmxpYyBQQl9EU19UUkVFX1RSQUNFX0JBU0VfQ19ERUMsCisjZW5kaWYKKyAgICAgIHB1YmxpYyBDbXBfRm4sCisgICAgICBwdWJsaWMgUEJfRFNfQklOX1RSRUVfVFJBSVRTX0JBU0UsCisgICAgICBwdWJsaWMgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX3VwZGF0ZQorICAgIHsKKyAgICAgIHR5cGVkZWYgTm9kZV9BbmRfSXRfVHJhaXRzIAkJCXRyYWl0c190eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBQQl9EU19CSU5fVFJFRV9UUkFJVFNfQkFTRSAJICAgICAgIAl0cmFpdHNfYmFzZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dHlwZW5hbWUgdHJhaXRzX3R5cGU6Om5vZGU+OjpvdGhlcgorICAgICAgbm9kZV9hbGxvY2F0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9hbGxvY2F0b3I6OnZhbHVlX3R5cGUgCW5vZGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfYWxsb2NhdG9yOjpwb2ludGVyIAkJbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIKKyAgICAgIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlcjsKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGNvbmRfZGVhbHRvcjxub2RlLCBfQWxsb2M+IAkJY29uZF9kZWFsdG9yX3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyAJCWRlYnVnX2Jhc2U7CisjZW5kaWYKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIAlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfdHlwZSAJCWtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3BvaW50ZXIgCWtleV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X2NvbnN0X3BvaW50ZXIgCWtleV9jb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3JlZmVyZW5jZSAJa2V5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9jb25zdF9yZWZlcmVuY2Uga2V5X2NvbnN0X3JlZmVyZW5jZTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF90eXBlIAltYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9wb2ludGVyIAltYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9jb25zdF9wb2ludGVyIG1hcHBlZF9jb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3JlZmVyZW5jZSAJbWFwcGVkX3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9jb25zdF9yZWZlcmVuY2UgbWFwcGVkX2NvbnN0X3JlZmVyZW5jZTsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIAkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnBvaW50ZXIgCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnJlZmVyZW5jZSAJCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAJY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9pbnRfY29uc3RfaXRlcmF0b3IgcG9pbnRfY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgcG9pbnRfY29uc3RfaXRlcmF0b3IgCQkJY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb2ludF9pdGVyYXRvciAJcG9pbnRfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHBvaW50X2l0ZXJhdG9yIAkJCQlpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIAlyZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6bm9kZV9jb25zdF9pdGVyYXRvciBub2RlX2NvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6bm9kZV9pdGVyYXRvciAJbm9kZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om5vZGVfdXBkYXRlIAlub2RlX3VwZGF0ZTsKKworICAgICAgdHlwZWRlZiBDbXBfRm4gCQkJCQljbXBfZm47CisgICAgICB0eXBlZGVmIF9BbGxvYyAJCQkJCWFsbG9jYXRvcl90eXBlOworCisgICAgICBQQl9EU19CSU5fVFJFRV9OQU1FKCk7CisKKyAgICAgIFBCX0RTX0JJTl9UUkVFX05BTUUoY29uc3QgQ21wX0ZuJik7CisKKyAgICAgIFBCX0RTX0JJTl9UUkVFX05BTUUoY29uc3QgQ21wX0ZuJiwgY29uc3Qgbm9kZV91cGRhdGUmKTsKKworICAgICAgUEJfRFNfQklOX1RSRUVfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIH5QQl9EU19CSU5fVFJFRV9OQU1FKCk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIENtcF9GbiYKKyAgICAgIGdldF9jbXBfZm4oKTsKKworICAgICAgY29uc3QgQ21wX0ZuJgorICAgICAgZ2V0X2NtcF9mbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgcG9pbnRfY29uc3RfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGtleV9jb25zdF9yZWZlcmVuY2UpIGNvbnN0OworCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgcG9pbnRfY29uc3RfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGtleV9jb25zdF9yZWZlcmVuY2UpIGNvbnN0OworCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBwb2ludF9jb25zdF9pdGVyYXRvcgorICAgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKTsKKworICAgICAgaW5saW5lIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpOworCisgICAgICBpbmxpbmUgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0OworCisgICAgICAvLy8gUmV0dXJucyBhIGNvbnN0IG5vZGVfaXRlcmF0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSBhdCB0aGUKKyAgICAgIC8vLyByb290IG9mIHRoZSB0cmVlLgorICAgICAgaW5saW5lIG5vZGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG5vZGVfYmVnaW4oKSBjb25zdDsKKworICAgICAgLy8vIFJldHVybnMgYSBub2RlX2l0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vZGUgYXQgdGhlCisgICAgICAvLy8gcm9vdCBvZiB0aGUgdHJlZS4KKyAgICAgIGlubGluZSBub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2JlZ2luKCk7CisKKyAgICAgIC8vLyBSZXR1cm5zIGEgY29uc3Qgbm9kZV9pdGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIGEgbm9kZSBqdXN0CisgICAgICAvLy8gYWZ0ZXIgYSBsZWFmIG9mIHRoZSB0cmVlLgorICAgICAgaW5saW5lIG5vZGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG5vZGVfZW5kKCkgY29uc3Q7CisKKyAgICAgIC8vLyBSZXR1cm5zIGEgbm9kZV9pdGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIGEgbm9kZSBqdXN0CisgICAgICAvLy8gYWZ0ZXIgYSBsZWFmIG9mIHRoZSB0cmVlLgorICAgICAgaW5saW5lIG5vZGVfaXRlcmF0b3IKKyAgICAgIG5vZGVfZW5kKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2b2lkCisgICAgICB2YWx1ZV9zd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZvaWQKKyAgICAgIGluaXRpYWxpemVfbWluX21heCgpOworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGluc2VydF9pbXBfZW1wdHkoY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBpbnNlcnRfbGVhZl9uZXcoY29uc3RfcmVmZXJlbmNlLCBub2RlX3BvaW50ZXIsIGJvb2wpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBnZXRfbmV3X25vZGVfZm9yX2xlYWZfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9uZXdfbm9kZV9mb3JfbGVhZl9pbnNlcnQoY29uc3RfcmVmZXJlbmNlLCB0cnVlX3R5cGUpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgYWN0dWFsX2VyYXNlX25vZGUobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxub2RlX3BvaW50ZXIsIGJvb2w+CisgICAgICBlcmFzZShub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgdXBkYXRlX21pbl9tYXhfZm9yX2VyYXNlZF9ub2RlKG5vZGVfcG9pbnRlcik7CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBjbGVhcl9pbXAobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9sZWFmKGNvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByb3RhdGVfbGVmdChub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgcm90YXRlX3JpZ2h0KG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByb3RhdGVfcGFyZW50KG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBhcHBseV91cGRhdGUobm9kZV9wb2ludGVyLCBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+CisJaW5saW5lIHZvaWQKKwlhcHBseV91cGRhdGUobm9kZV9wb2ludGVyLCBOb2RlX1VwZGF0ZV8qKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHVwZGF0ZV90b190b3Aobm9kZV9wb2ludGVyLCBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+CisJaW5saW5lIHZvaWQKKwl1cGRhdGVfdG9fdG9wKG5vZGVfcG9pbnRlciwgTm9kZV9VcGRhdGVfKik7CisKKyAgICAgIGJvb2wKKyAgICAgIGpvaW5fcHJlcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBqb2luX2ZpbmlzaChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICBib29sCisgICAgICBzcGxpdF9wcmVwKGtleV9jb25zdF9yZWZlcmVuY2UsIFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0X2ZpbmlzaChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICBzaXplX3R5cGUKKyAgICAgIHJlY3Vyc2l2ZV9jb3VudChub2RlX3BvaW50ZXIpIGNvbnN0OworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZChjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KGNvbnN0IG5vZGVfcG9pbnRlciwgY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9pdGVyYXRvcnMoY29uc3QgY2hhciosIGludCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9jb25zaXN0ZW50X3dpdGhfZGVidWdfYmFzZShjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X25vZGVfY29uc2lzdGVudF93aXRoX2xlZnQoY29uc3Qgbm9kZV9wb2ludGVyLAorCQkJCSAgICAgICBjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X25vZGVfY29uc2lzdGVudF93aXRoX3JpZ2h0KGNvbnN0IG5vZGVfcG9pbnRlciwKKwkJCQkJY29uc3QgY2hhciosIGludCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9jb25zaXN0ZW50X3dpdGhfZGVidWdfYmFzZShjb25zdCBub2RlX3BvaW50ZXIsCisJCQkJCWNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbWluKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbWluX2ltcChjb25zdCBub2RlX3BvaW50ZXIsIGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbWF4KGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbWF4X2ltcChjb25zdCBub2RlX3BvaW50ZXIsIGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfc2l6ZShjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3RfcG9pbnRlciwgY29uc3RfcG9pbnRlcj4gbm9kZV9jb25zaXN0ZW50X3Q7CisKKyAgICAgIG5vZGVfY29uc2lzdGVudF90CisgICAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50Xyhjb25zdCBub2RlX3BvaW50ZXIsIGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGluaXRpYWxpemUoKTsKKworICAgICAgbm9kZV9wb2ludGVyCisgICAgICByZWN1cnNpdmVfY29weV9ub2RlKGNvbnN0IG5vZGVfcG9pbnRlcik7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBub2RlX3BvaW50ZXIgCQltX3BfaGVhZDsKKyAgICAgIHNpemVfdHlwZSAJCW1fc2l6ZTsKKyAgICAgIHN0YXRpYyBub2RlX2FsbG9jYXRvciAJc19ub2RlX2FsbG9jYXRvcjsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRChYKQkJCQlcCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoWC5zdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisKKyNkZWZpbmUgUEJfRFNfQVNTRVJUX05PREVfQ09OU0lTVEVOVChfTm9kZSkJCQkJXAorICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQoX05vZGUsIF9fRklMRV9fLCBfX0xJTkVfXyk7KQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pdGVyYXRvcnNfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pbnNlcnRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pbmZvX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9yb3RhdGVfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHA+CisKKyN1bmRlZiBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UCisjdW5kZWYgUEJfRFNfU1RSVUNUX09OTFlfQVNTRVJUX1ZBTElECisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0JJTl9UUkVFX05BTUUKKyN1bmRlZiBQQl9EU19CSU5fVFJFRV9UUkFJVFNfQkFTRQorI3VuZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDCisKKyNpZmRlZiBQQl9EU19UUkVFX1RSQUNFCisjdW5kZWYgUEJfRFNfVFJFRV9UUkFDRV9CQVNFX0NfREVDCisjZW5kaWYKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYWFmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDIxOCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5fc2VhcmNoX3RyZWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfYWxsb2NhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19ub2RlX2FsbG9jYXRvcjsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0JJTl9UUkVFX05BTUUoKSA6IG1fcF9oZWFkKHNfbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSkpLCBtX3NpemUoMCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19TVFJVQ1RfT05MWV9BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0JJTl9UUkVFX05BTUUoY29uc3QgQ21wX0ZuJiByX2NtcF9mbikgOgorICBDbXBfRm4ocl9jbXBfZm4pLCBtX3BfaGVhZChzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpKSwgbV9zaXplKDApCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfU1RSVUNUX09OTFlfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19CSU5fVFJFRV9OQU1FKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4sIGNvbnN0IG5vZGVfdXBkYXRlJiByX25vZGVfdXBkYXRlKSA6CisgIENtcF9GbihyX2NtcF9mbiksCisgIG5vZGVfdXBkYXRlKHJfbm9kZV91cGRhdGUpLAorICBtX3BfaGVhZChzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpKSwKKyAgbV9zaXplKDApCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfU1RSVUNUX09OTFlfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19CSU5fVFJFRV9OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGRlYnVnX2Jhc2Uob3RoZXIpLAorI2VuZGlmIAorI2lmZGVmIFBCX0RTX1RSRUVfVFJBQ0UKKyAgUEJfRFNfVFJFRV9UUkFDRV9CQVNFX0NfREVDKG90aGVyKSwKKyNlbmRpZiAKKyAgQ21wX0ZuKG90aGVyKSwKKyAgbm9kZV91cGRhdGUob3RoZXIpLAorICBtX3BfaGVhZChzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpKSwKKyAgbV9zaXplKDApCit7CisgIGluaXRpYWxpemUoKTsKKyAgbV9zaXplID0gb3RoZXIubV9zaXplOworICBQQl9EU19TVFJVQ1RfT05MWV9BU1NFUlRfVkFMSUQob3RoZXIpCisKKyAgICBfX3RyeQorICAgICAgeworICAgICAgICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9IHJlY3Vyc2l2ZV9jb3B5X25vZGUob3RoZXIubV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICAgICAgICBpZiAobV9wX2hlYWQtPm1fcF9wYXJlbnQgIT0gMCkKKwkgIG1fcF9oZWFkLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50ID0gbV9wX2hlYWQ7CisgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgaW5pdGlhbGl6ZV9taW5fbWF4KCk7CisgICAgICB9CisgICAgX19jYXRjaCguLi4pCisgICAgICB7CisgICAgICAgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2xlYXIoKTspCisJc19ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fcF9oZWFkLCAxKTsKKyAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICB9CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19TVFJVQ1RfT05MWV9BU1NFUlRfVkFMSUQob3RoZXIpCisgIHZhbHVlX3N3YXAob3RoZXIpOworICBzdGQ6OnN3YXAoKENtcF9GbiYgKSgqdGhpcyksIChDbXBfRm4mIClvdGhlcik7CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19TVFJVQ1RfT05MWV9BU1NFUlRfVkFMSUQob3RoZXIpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit2YWx1ZV9zd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpzd2FwKG90aGVyKTspCisgIHN0ZDo6c3dhcChtX3BfaGVhZCwgb3RoZXIubV9wX2hlYWQpOworICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorflBCX0RTX0JJTl9UUkVFX05BTUUoKQoreworICBjbGVhcigpOworICBzX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUobV9wX2hlYWQsIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5pdGlhbGl6ZSgpCit7CisgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gMDsKKyAgbV9wX2hlYWQtPm1fcF9sZWZ0ID0gbV9wX2hlYWQ7CisgIG1fcF9oZWFkLT5tX3BfcmlnaHQgPSBtX3BfaGVhZDsKKyAgbV9zaXplID0gMDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY3Vyc2l2ZV9jb3B5X25vZGUoY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kID09IDApCisgICAgcmV0dXJuICgwKTsKKworICBub2RlX3BvaW50ZXIgcF9yZXQgPSBzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICBfX3RyeQorICAgIHsKKyAgICAgIG5ldyAocF9yZXQpIG5vZGUoKnBfbmQpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgc19ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfcmV0LCAxKTsKKyAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgIH0KKworICBwX3JldC0+bV9wX2xlZnQgPSBwX3JldC0+bV9wX3JpZ2h0ID0gMDsKKworICBfX3RyeQorICAgIHsKKyAgICAgIHBfcmV0LT5tX3BfbGVmdCA9IHJlY3Vyc2l2ZV9jb3B5X25vZGUocF9uZC0+bV9wX2xlZnQpOworICAgICAgcF9yZXQtPm1fcF9yaWdodCA9IHJlY3Vyc2l2ZV9jb3B5X25vZGUocF9uZC0+bV9wX3JpZ2h0KTsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIGNsZWFyX2ltcChwX3JldCk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgaWYgKHBfcmV0LT5tX3BfbGVmdCAhPSAwKQorICAgIHBfcmV0LT5tX3BfbGVmdC0+bV9wX3BhcmVudCA9IHBfcmV0OworCisgIGlmIChwX3JldC0+bV9wX3JpZ2h0ICE9IDApCisgICAgcF9yZXQtPm1fcF9yaWdodC0+bV9wX3BhcmVudCA9IHBfcmV0OworCisgIFBCX0RTX0FTU0VSVF9OT0RFX0NPTlNJU1RFTlQocF9yZXQpCisgIHJldHVybiBwX3JldDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemVfbWluX21heCgpCit7CisgIGlmIChtX3BfaGVhZC0+bV9wX3BhcmVudCA9PSAwKQorICAgIHsKKyAgICAgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IG1fcF9oZWFkLT5tX3BfcmlnaHQgPSBtX3BfaGVhZDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgeworICAgIG5vZGVfcG9pbnRlciBwX21pbiA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworICAgIHdoaWxlIChwX21pbi0+bV9wX2xlZnQgIT0gMCkKKyAgICAgIHBfbWluID0gcF9taW4tPm1fcF9sZWZ0OworICAgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IHBfbWluOworICB9CisKKyAgeworICAgIG5vZGVfcG9pbnRlciBwX21heCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworICAgIHdoaWxlIChwX21heC0+bV9wX3JpZ2h0ICE9IDApCisgICAgICBwX21heCA9IHBfbWF4LT5tX3BfcmlnaHQ7CisgICAgbV9wX2hlYWQtPm1fcF9yaWdodCA9IHBfbWF4OworICB9Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1NmQyMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjc3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbl9zZWFyY2hfdHJlZV8vZGVidWdfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKF9fZmlsZSwgX19saW5lKTsKKyAgYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKF9fZmlsZSwgX19saW5lKTsKKyAgYXNzZXJ0X3NpemUoX19maWxlLCBfX2xpbmUpOworICBhc3NlcnRfaXRlcmF0b3JzKF9fZmlsZSwgX19saW5lKTsKKyAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ID09IDApCisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKG1fc2l6ZSA9PSAwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkobV9zaXplID4gMCk7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3RydWN0dXJlX29ubHlfYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgUEJfRFNfREVCVUdfVkVSSUZZKG1fcF9oZWFkICE9IDApOworICBpZiAobV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gMCkKKyAgICB7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkobV9wX2hlYWQtPm1fcF9sZWZ0ID09IG1fcF9oZWFkKTsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShtX3BfaGVhZC0+bV9wX3JpZ2h0ID09IG1fcF9oZWFkKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkobV9wX2hlYWQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPT0gbV9wX2hlYWQpOworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKG1fcF9oZWFkLT5tX3BfbGVmdCAhPSBtX3BfaGVhZCk7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkobV9wX2hlYWQtPm1fcF9yaWdodCAhPSBtX3BfaGVhZCk7CisgICAgfQorCisgIGlmIChtX3BfaGVhZC0+bV9wX3BhcmVudCAhPSAwKQorICAgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQobV9wX2hlYWQtPm1fcF9wYXJlbnQsIF9fZmlsZSwgX19saW5lKTsKKyAgYXNzZXJ0X21pbihfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9tYXgoX19maWxlLCBfX2xpbmUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X25vZGVfY29uc2lzdGVudChjb25zdCBub2RlX3BvaW50ZXIgcF9uZCwKKwkJICAgICAgIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgYXNzZXJ0X25vZGVfY29uc2lzdGVudF8ocF9uZCwgX19maWxlLCBfX2xpbmUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfY29uc2lzdGVudF90CitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfbm9kZV9jb25zaXN0ZW50Xyhjb25zdCBub2RlX3BvaW50ZXIgcF9uZCwKKwkJCWNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm4gKHN0ZDo6bWFrZV9wYWlyKChjb25zdF9wb2ludGVyKTAsKGNvbnN0X3BvaW50ZXIpMCkpOworCisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnRfd2l0aF9sZWZ0KHBfbmQsIF9fZmlsZSwgX19saW5lKTsKKyAgYXNzZXJ0X25vZGVfY29uc2lzdGVudF93aXRoX3JpZ2h0KHBfbmQsIF9fZmlsZSwgX19saW5lKTsKKworICBjb25zdCBzdGQ6OnBhaXI8Y29uc3RfcG9pbnRlciwgY29uc3RfcG9pbnRlcj4KKyAgICBsX3JhbmdlID0gYXNzZXJ0X25vZGVfY29uc2lzdGVudF8ocF9uZC0+bV9wX2xlZnQsIF9fZmlsZSwgX19saW5lKTsKKworICBpZiAobF9yYW5nZS5zZWNvbmQgIT0gMCkKKyAgICBQQl9EU19ERUJVR19WRVJJRlkoQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRigqbF9yYW5nZS5zZWNvbmQpLAorCQkJCQkgIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSkpOworCisgIGNvbnN0IHN0ZDo6cGFpcjxjb25zdF9wb2ludGVyLCBjb25zdF9wb2ludGVyPgorICAgIHJfcmFuZ2UgPSBhc3NlcnRfbm9kZV9jb25zaXN0ZW50XyhwX25kLT5tX3BfcmlnaHQsIF9fZmlsZSwgX19saW5lKTsKKworICBpZiAocl9yYW5nZS5maXJzdCAhPSAwKQorICAgIFBCX0RTX0RFQlVHX1ZFUklGWShDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpLAorCQkJCQkgICAgIFBCX0RTX1YyRigqcl9yYW5nZS5maXJzdCkpKTsKKworICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKGxfcmFuZ2UuZmlyc3QgIT0gMCkgPyBsX3JhbmdlLmZpcnN0IDogJnBfbmQtPm1fdmFsdWUsCisJCQkocl9yYW5nZS5zZWNvbmQgIT0gMCk/IHJfcmFuZ2Uuc2Vjb25kIDogJnBfbmQtPm1fdmFsdWUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X25vZGVfY29uc2lzdGVudF93aXRoX2xlZnQoY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQsCisJCQkJIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgaWYgKHBfbmQtPm1fcF9sZWZ0ID09IDApCisgICAgcmV0dXJuOworICBQQl9EU19ERUJVR19WRVJJRlkocF9uZC0+bV9wX2xlZnQtPm1fcF9wYXJlbnQgPT0gcF9uZCk7CisgIFBCX0RTX0RFQlVHX1ZFUklGWSghQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSwKKwkJCQkJIFBCX0RTX1YyRihwX25kLT5tX3BfbGVmdC0+bV92YWx1ZSkpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9ub2RlX2NvbnNpc3RlbnRfd2l0aF9yaWdodChjb25zdCBub2RlX3BvaW50ZXIgcF9uZCwKKwkJCQkgIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgaWYgKHBfbmQtPm1fcF9yaWdodCA9PSAwKQorICAgIHJldHVybjsKKyAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmQtPm1fcF9yaWdodC0+bV9wX3BhcmVudCA9PSBwX25kKTsKKyAgUEJfRFNfREVCVUdfVkVSSUZZKCFDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfbmQtPm1fcF9yaWdodC0+bV92YWx1ZSksCisJCQkJCSBQQl9EU19WMkYocF9uZC0+bV92YWx1ZSkpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9taW4oY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBhc3NlcnRfbWluX2ltcChtX3BfaGVhZC0+bV9wX3BhcmVudCwgX19maWxlLCBfX2xpbmUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X21pbl9pbXAoY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQsIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICB7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkobV9wX2hlYWQtPm1fcF9sZWZ0ID09IG1fcF9oZWFkKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHBfbmQtPm1fcF9sZWZ0ID09IDApCisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmQgPT0gbV9wX2hlYWQtPm1fcF9sZWZ0KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGFzc2VydF9taW5faW1wKHBfbmQtPm1fcF9sZWZ0LCBfX2ZpbGUsIF9fbGluZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfbWF4KGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgYXNzZXJ0X21heF9pbXAobV9wX2hlYWQtPm1fcF9wYXJlbnQsIF9fZmlsZSwgX19saW5lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9tYXhfaW1wKGNvbnN0IG5vZGVfcG9pbnRlciBwX25kLAorCSAgICAgICBjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIGlmIChwX25kID09IDApCisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKG1fcF9oZWFkLT5tX3BfcmlnaHQgPT0gbV9wX2hlYWQpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAocF9uZC0+bV9wX3JpZ2h0ID09IDApCisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmQgPT0gbV9wX2hlYWQtPm1fcF9yaWdodCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGFzc2VydF9tYXhfaW1wKHBfbmQtPm1fcF9yaWdodCwgX19maWxlLCBfX2xpbmUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X2l0ZXJhdG9ycyhjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBpdGVyYXRlZF9udW0gPSAwOworICBjb25zdF9pdGVyYXRvciBwcmV2X2l0ID0gZW5kKCk7CisgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmQoKTsgKytpdCkKKyAgICB7CisgICAgICArK2l0ZXJhdGVkX251bTsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShsb3dlcl9ib3VuZChQQl9EU19WMkYoKml0KSkubV9wX25kID09IGl0Lm1fcF9uZCk7CisgICAgICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZF9pdCA9IHVwcGVyX2JvdW5kKFBCX0RTX1YyRigqaXQpKTsKKyAgICAgIC0tdXBwZXJfYm91bmRfaXQ7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkodXBwZXJfYm91bmRfaXQubV9wX25kID09IGl0Lm1fcF9uZCk7CisKKyAgICAgIGlmIChwcmV2X2l0ICE9IGVuZCgpKQorCVBCX0RTX0RFQlVHX1ZFUklGWShDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKCpwcmV2X2l0KSwKKwkJCQkJICAgICAgUEJfRFNfVjJGKCppdCkpKTsKKyAgICAgIHByZXZfaXQgPSBpdDsKKyAgICB9CisKKyAgUEJfRFNfREVCVUdfVkVSSUZZKGl0ZXJhdGVkX251bSA9PSBtX3NpemUpOworICBzaXplX3R5cGUgcmV2ZXJzZV9pdGVyYXRlZF9udW0gPSAwOworICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfcHJldl9pdCA9IHJlbmQoKTsKKyAgZm9yIChjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXQgPSByYmVnaW4oKTsgcmV2ZXJzZV9pdCAhPSByZW5kKCk7CisgICAgICAgKytyZXZlcnNlX2l0KQorICAgIHsKKyAgICAgICsrcmV2ZXJzZV9pdGVyYXRlZF9udW07CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkobG93ZXJfYm91bmQoCisJCQkJICAgUEJfRFNfVjJGKCpyZXZlcnNlX2l0KSkubV9wX25kID09IHJldmVyc2VfaXQubV9wX25kKTsKKworICAgICAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmRfaXQgPSB1cHBlcl9ib3VuZChQQl9EU19WMkYoKnJldmVyc2VfaXQpKTsKKyAgICAgIC0tdXBwZXJfYm91bmRfaXQ7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkodXBwZXJfYm91bmRfaXQubV9wX25kID09IHJldmVyc2VfaXQubV9wX25kKTsKKyAgICAgIGlmIChyZXZlcnNlX3ByZXZfaXQgIT0gcmVuZCgpKQorCVBCX0RTX0RFQlVHX1ZFUklGWSghQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRigqcmV2ZXJzZV9wcmV2X2l0KSwKKwkJCQkJICAgICAgIFBCX0RTX1YyRigqcmV2ZXJzZV9pdCkpKTsKKyAgICAgIHJldmVyc2VfcHJldl9pdCA9IHJldmVyc2VfaXQ7CisgICAgfQorICBQQl9EU19ERUJVR19WRVJJRlkocmV2ZXJzZV9pdGVyYXRlZF9udW0gPT0gbV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9jb25zaXN0ZW50X3dpdGhfZGVidWdfYmFzZShjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIGRlYnVnX2Jhc2U6OmNoZWNrX3NpemUobV9zaXplLCBfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9jb25zaXN0ZW50X3dpdGhfZGVidWdfYmFzZShtX3BfaGVhZC0+bV9wX3BhcmVudCwgX19maWxlLCBfX2xpbmUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKGNvbnN0IG5vZGVfcG9pbnRlciBwX25kLAorCQkJCSAgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBpZiAocF9uZCA9PSAwKQorICAgIHJldHVybjsKKyAgZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2V4aXN0cyhQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksIF9fZmlsZSwgX19saW5lKTsKKyAgYXNzZXJ0X2NvbnNpc3RlbnRfd2l0aF9kZWJ1Z19iYXNlKHBfbmQtPm1fcF9sZWZ0LCBfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9jb25zaXN0ZW50X3dpdGhfZGVidWdfYmFzZShwX25kLT5tX3BfcmlnaHQsIF9fZmlsZSwgX19saW5lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9zaXplKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sgUEJfRFNfREVCVUdfVkVSSUZZKHJlY3Vyc2l2ZV9jb3VudChtX3BfaGVhZC0+bV9wX3BhcmVudCkgPT0gbV9zaXplKTsgfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiOTA4MwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbl9zZWFyY2hfdHJlZV8vZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYWN0dWFsX2VyYXNlX25vZGUobm9kZV9wb2ludGVyIHBfeikKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICAtLW1fc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjplcmFzZV9leGlzdGluZyhQQl9EU19WMkYocF96LT5tX3ZhbHVlKSk7KQorICBwX3otPn5ub2RlKCk7CisgIHNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX3osIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZV9taW5fbWF4X2Zvcl9lcmFzZWRfbm9kZShub2RlX3BvaW50ZXIgcF96KQoreworICBpZiAobV9zaXplID09IDEpCisgICAgeworICAgICAgbV9wX2hlYWQtPm1fcF9sZWZ0ID0gbV9wX2hlYWQtPm1fcF9yaWdodCA9IG1fcF9oZWFkOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAobV9wX2hlYWQtPm1fcF9sZWZ0ID09IHBfeikKKyAgICB7CisgICAgICBpdGVyYXRvciBpdChwX3opOworICAgICAgKytpdDsKKyAgICAgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IGl0Lm1fcF9uZDsKKyAgICB9CisgIGVsc2UgaWYgKG1fcF9oZWFkLT5tX3BfcmlnaHQgPT0gcF96KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIGl0KHBfeik7CisgICAgICAtLWl0OworICAgICAgbV9wX2hlYWQtPm1fcF9yaWdodCA9IGl0Lm1fcF9uZDsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcigpCit7CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBjbGVhcl9pbXAobV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICBtX3NpemUgPSAwOworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2xlYXIoKTspCisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXJfaW1wKG5vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZCA9PSAwKQorICAgIHJldHVybjsKKworICBjbGVhcl9pbXAocF9uZC0+bV9wX2xlZnQpOworICBjbGVhcl9pbXAocF9uZC0+bV9wX3JpZ2h0KTsKKyAgcF9uZC0+fm5vZGUoKTsKKyAgc19ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfbmQsIDEpOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vZmluZF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2ZpbmRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxZWY5OAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2ZpbmRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNzEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluX3NlYXJjaF90cmVlXy9maW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbG93ZXJfYm91bmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgbm9kZV9wb2ludGVyIHBfcG90ID0gbV9wX2hlYWQ7CisgIG5vZGVfcG9pbnRlciBwX25kID0gbV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gMCkKKyAgICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSwgcl9rZXkpKQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKyAgICBlbHNlCisgICAgICB7CisJcF9wb3QgPSBwX25kOworCXBfbmQgPSBwX25kLT5tX3BfbGVmdDsKKyAgICAgIH0KKyAgcmV0dXJuIGl0ZXJhdG9yKHBfcG90KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xvd2VyX2JvdW5kKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIG5vZGVfcG9pbnRlciBwX3BvdCA9IG1fcF9oZWFkOworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworCisgIHdoaWxlIChwX25kICE9IDApCisgICAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICAgIHBfbmQgPSBwX25kLT5tX3BfcmlnaHQ7CisgICAgZWxzZQorICAgICAgeworCXBfcG90ID0gcF9uZDsKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgIHJldHVybiBpdGVyYXRvcihwX3BvdCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Cit1cHBlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAoreworICBub2RlX3BvaW50ZXIgcF9wb3QgPSBtX3BfaGVhZDsKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfaGVhZC0+bV9wX3BhcmVudDsKKworICB3aGlsZSAocF9uZCAhPSAwKQorICAgIGlmIChDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSkpCisgICAgICB7CisJcF9wb3QgPSBwX25kOworCXBfbmQgPSBwX25kLT5tX3BfbGVmdDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworICByZXR1cm4gY29uc3RfaXRlcmF0b3IocF9wb3QpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBwZXJfYm91bmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgbm9kZV9wb2ludGVyIHBfcG90ID0gbV9wX2hlYWQ7CisgIG5vZGVfcG9pbnRlciBwX25kID0gbV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gMCkKKyAgICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKHJfa2V5LCBQQl9EU19WMkYocF9uZC0+bV92YWx1ZSkpKQorICAgICAgeworCXBfcG90ID0gcF9uZDsKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKyAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfcG90KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgUEJfRFNfU1RSVUNUX09OTFlfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIG5vZGVfcG9pbnRlciBwX3BvdCA9IG1fcF9oZWFkOworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworCisgIHdoaWxlIChwX25kICE9IDApCisgICAgaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpLCByX2tleSkpCisgICAgICB7CisJcF9wb3QgPSBwX25kOworCXBfbmQgPSBwX25kLT5tX3BfbGVmdDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworCisgIG5vZGVfcG9pbnRlciByZXQgPSBwX3BvdDsKKyAgaWYgKHBfcG90ICE9IG1fcF9oZWFkKQorICAgIHsKKyAgICAgIGNvbnN0IGJvb2wgX19jbXAgPSBDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRihwX3BvdC0+bV92YWx1ZSkpOworICAgICAgaWYgKF9fY21wKQorCXJldCA9IG1fcF9oZWFkOworICAgIH0KKyAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHJldCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBub2RlX3BvaW50ZXIgcF9wb3QgPSBtX3BfaGVhZDsKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfaGVhZC0+bV9wX3BhcmVudDsKKworICB3aGlsZSAocF9uZCAhPSAwKQorICAgIGlmICghQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSwgcl9rZXkpKQorICAgICAgeworCXBfcG90ID0gcF9uZDsKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKworICBub2RlX3BvaW50ZXIgcmV0ID0gcF9wb3Q7CisgIGlmIChwX3BvdCAhPSBtX3BfaGVhZCkKKyAgICB7CisgICAgICBjb25zdCBib29sIF9fY21wID0gQ21wX0ZuOjpvcGVyYXRvcigpKHJfa2V5LCBQQl9EU19WMkYocF9wb3QtPm1fdmFsdWUpKTsKKyAgICAgIGlmIChfX2NtcCkKKwlyZXQgPSBtX3BfaGVhZDsKKyAgICB9CisgIHJldHVybiBwb2ludF9jb25zdF9pdGVyYXRvcihyZXQpOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vaW5mb19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2luZm9fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1YzRlMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2luZm9fZm5faW1wcy5ocHAKQEAgLTAsMCArMSw2NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5fc2VhcmNoX3RyZWVfL2luZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW1wdHkoKSBjb25zdAoreworICByZXR1cm4gKG1fc2l6ZSA9PSAwKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitzaXplKCkgY29uc3QKK3sKKyAgcmV0dXJuIChtX3NpemUpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21heF9zaXplKCkgY29uc3QKK3sKKyAgcmV0dXJuIChzX25vZGVfYWxsb2NhdG9yLm1heF9zaXplKCkpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pbnNlcnRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxN2RiMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2luc2VydF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE4MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5fc2VhcmNoX3RyZWVfL2luc2VydF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbl9zZWFyY2hfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8dHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yLCBib29sPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0X2xlYWYoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUpCit7CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorCisgIGlmIChtX3NpemUgPT0gMCkKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5zZXJ0X2ltcF9lbXB0eShyX3ZhbHVlKSwKKwkJCSAgdHJ1ZSk7CisKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfaGVhZC0+bV9wX3BhcmVudDsKKyAgbm9kZV9wb2ludGVyIHBfcG90ID0gbV9wX2hlYWQ7CisKKyAgd2hpbGUgKHBfbmQgIT0gMCkKKyAgICBpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksCisJCQkgICAgUEJfRFNfVjJGKHJfdmFsdWUpKSkKKyAgICAgIHsKKwlwX3BvdCA9IHBfbmQ7CisKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKworICBpZiAocF9wb3QgPT0gbV9wX2hlYWQpCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluc2VydF9sZWFmX25ldyhyX3ZhbHVlLCBtX3BfaGVhZC0+bV9wX3JpZ2h0LCBmYWxzZSksCisJCQkgIHRydWUpOworCisgIGlmICghQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihyX3ZhbHVlKSwKKwkJCSAgUEJfRFNfVjJGKHBfcG90LT5tX3ZhbHVlKSkpCisgICAgeworICAgICAgUEJfRFNfU1RSVUNUX09OTFlfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKFBCX0RTX1YyRihyX3ZhbHVlKSkKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwX3BvdCwgZmFsc2UpOworICAgIH0KKworICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1QoUEJfRFNfVjJGKHJfdmFsdWUpKQorCisgIHBfbmQgPSBwX3BvdC0+bV9wX2xlZnQ7CisgIGlmIChwX25kID09IDApCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluc2VydF9sZWFmX25ldyhyX3ZhbHVlLCBwX3BvdCwgdHJ1ZSksCisJCQkgIHRydWUpOworCisgIHdoaWxlIChwX25kLT5tX3BfcmlnaHQgIT0gMCkKKyAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworCisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbnNlcnRfbGVhZl9uZXcocl92YWx1ZSwgcF9uZCwgZmFsc2UpLAorCQkJdHJ1ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfbGVhZl9uZXcoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUsIG5vZGVfcG9pbnRlciBwX25kLCBib29sIGxlZnRfbmQpCit7CisgIG5vZGVfcG9pbnRlciBwX25ld19uZCA9CisgICAgZ2V0X25ld19ub2RlX2Zvcl9sZWFmX2luc2VydChyX3ZhbHVlLAorCQkJCSB0cmFpdHNfYmFzZTo6bV9ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKworICBpZiAobGVmdF9uZCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX2xlZnQgPT0gMCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihyX3ZhbHVlKSwKKwkJCQkJICAgICAgIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSkpOworCisgICAgICBwX25kLT5tX3BfbGVmdCA9IHBfbmV3X25kOworICAgICAgaWYgKG1fcF9oZWFkLT5tX3BfbGVmdCA9PSBwX25kKQorCW1fcF9oZWFkLT5tX3BfbGVmdCA9IHBfbmV3X25kOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3BfcmlnaHQgPT0gMCk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSwKKwkJCQkJICAgICAgIFBCX0RTX1YyRihyX3ZhbHVlKSkpOworCisgICAgICBwX25kLT5tX3BfcmlnaHQgPSBwX25ld19uZDsKKyAgICAgIGlmIChtX3BfaGVhZC0+bV9wX3JpZ2h0ID09IHBfbmQpCisJbV9wX2hlYWQtPm1fcF9yaWdodCA9IHBfbmV3X25kOworICAgIH0KKworICBwX25ld19uZC0+bV9wX3BhcmVudCA9IHBfbmQ7CisgIHBfbmV3X25kLT5tX3BfbGVmdCA9IHBfbmV3X25kLT5tX3BfcmlnaHQgPSAwOworICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmQpCisKKyAgdXBkYXRlX3RvX3RvcChwX25ld19uZCwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYocl92YWx1ZSkpOykKKyAgcmV0dXJuIGl0ZXJhdG9yKHBfbmV3X25kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF9pbXBfZW1wdHkoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUpCit7CisgIG5vZGVfcG9pbnRlciBwX25ld19ub2RlID0KKyAgICBnZXRfbmV3X25vZGVfZm9yX2xlYWZfaW5zZXJ0KHJfdmFsdWUsIHRyYWl0c19iYXNlOjptX25vX3Rocm93X2NvcGllc19pbmRpY2F0b3IpOworCisgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IG1fcF9oZWFkLT5tX3BfcmlnaHQgPQorICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF9uZXdfbm9kZTsKKworICBwX25ld19ub2RlLT5tX3BfcGFyZW50ID0gbV9wX2hlYWQ7CisgIHBfbmV3X25vZGUtPm1fcF9sZWZ0ID0gcF9uZXdfbm9kZS0+bV9wX3JpZ2h0ID0gMDsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KFBCX0RTX1YyRihyX3ZhbHVlKSk7KQorCisgIHVwZGF0ZV90b190b3AobV9wX2hlYWQtPm1fcF9wYXJlbnQsIChub2RlX3VwZGF0ZSopdGhpcyk7CisgIHJldHVybiBpdGVyYXRvcihwX25ld19ub2RlKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfbmV3X25vZGVfZm9yX2xlYWZfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgZmFsc2VfdHlwZSkKK3sKKyAgbm9kZV9wb2ludGVyIHBfbmV3X25kID0gc19ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKyAgY29uZF9kZWFsdG9yX3QgY29uZChwX25ld19uZCk7CisKKyAgbmV3IChjb25zdF9jYXN0PHZvaWQqID4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCogPigmcF9uZXdfbmQtPm1fdmFsdWUpKSkKKyAgICB0eXBlbmFtZSBub2RlOjp2YWx1ZV90eXBlKHJfdmFsKTsKKworICBjb25kLnNldF9ub19hY3Rpb24oKTsKKyAgcF9uZXdfbmQtPm1fcF9sZWZ0ID0gcF9uZXdfbmQtPm1fcF9yaWdodCA9IDA7CisgICsrbV9zaXplOworICByZXR1cm4gcF9uZXdfbmQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X25ld19ub2RlX2Zvcl9sZWFmX2luc2VydChjb25zdF9yZWZlcmVuY2Ugcl92YWwsIHRydWVfdHlwZSkKK3sKKyAgbm9kZV9wb2ludGVyIHBfbmV3X25kID0gc19ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKworICBuZXcgKGNvbnN0X2Nhc3Q8dm9pZCogPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KCZwX25ld19uZC0+bV92YWx1ZSkpKQorICAgIHR5cGVuYW1lIG5vZGU6OnZhbHVlX3R5cGUocl92YWwpOworCisgIHBfbmV3X25kLT5tX3BfbGVmdCA9IHBfbmV3X25kLT5tX3BfcmlnaHQgPSAwOworICArK21fc2l6ZTsKKyAgcmV0dXJuIHBfbmV3X25kOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjdjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMzYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluX3NlYXJjaF90cmVlXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpCit7CisgIHJldHVybiAoaXRlcmF0b3IobV9wX2hlYWQtPm1fcF9sZWZ0KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpIGNvbnN0Cit7CisgIHJldHVybiAoY29uc3RfaXRlcmF0b3IobV9wX2hlYWQtPm1fcF9sZWZ0KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKQoreworICByZXR1cm4gKGl0ZXJhdG9yKG1fcF9oZWFkKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreworICByZXR1cm4gKGNvbnN0X2l0ZXJhdG9yKG1fcF9oZWFkKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JiZWdpbigpIGNvbnN0Cit7CisgIHJldHVybiAoY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihtX3BfaGVhZC0+bV9wX3JpZ2h0KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnJldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JiZWdpbigpCit7CisgIHJldHVybiAocmV2ZXJzZV9pdGVyYXRvcihtX3BfaGVhZC0+bV9wX3JpZ2h0KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnJldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlbmQoKQoreworICByZXR1cm4gKHJldmVyc2VfaXRlcmF0b3IobV9wX2hlYWQpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVuZCgpIGNvbnN0Cit7CisgIHJldHVybiAoY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihtX3BfaGVhZCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2JlZ2luKCkgY29uc3QKK3sKKyAgcmV0dXJuIChub2RlX2NvbnN0X2l0ZXJhdG9yKG1fcF9oZWFkLT5tX3BfcGFyZW50KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfYmVnaW4oKQoreworICByZXR1cm4gKG5vZGVfaXRlcmF0b3IobV9wX2hlYWQtPm1fcF9wYXJlbnQpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm9kZV9lbmQoKSBjb25zdAoreworICByZXR1cm4gKG5vZGVfY29uc3RfaXRlcmF0b3IoMCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2VuZCgpCit7CisgIHJldHVybiAobm9kZV9pdGVyYXRvcigwKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL25vZGVfaXRlcmF0b3JzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL25vZGVfaXRlcmF0b3JzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzg3YjhlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vbm9kZV9pdGVyYXRvcnMuaHBwCkBAIC0wLDAgKzEsMTg5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbl9zZWFyY2hfdHJlZV8vbm9kZV9pdGVyYXRvcnMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCisjaWZuZGVmIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9OT0RFX0lURVJBVE9SU19IUFAKKyNkZWZpbmUgUEJfRFNfQklOX1NFQVJDSF9UUkVFX05PREVfSVRFUkFUT1JTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNkZWZpbmUgUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDIFwKKyAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3Rfbm9kZV9pdF88Tm9kZSwgQ29uc3RfSXRlcmF0b3IsIEl0ZXJhdG9yLCBfQWxsb2M+CisKKyAgICAvLy8gQ29uc3Qgbm9kZSBpdGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlLAorCSAgICAgY2xhc3MgQ29uc3RfSXRlcmF0b3IsCisJICAgICBjbGFzcyBJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBiaW5fc2VhcmNoX3RyZWVfY29uc3Rfbm9kZV9pdF8KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgTm9kZT46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gQ2F0ZWdvcnkuCisgICAgICB0eXBlZGVmIHRyaXZpYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICAvLy8gRGlmZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX2RpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIHZhbHVlIHR5cGUuCisgICAgICB0eXBlZGVmIENvbnN0X0l0ZXJhdG9yIHZhbHVlX3R5cGU7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiBDb25zdF9JdGVyYXRvciByZWZlcmVuY2U7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIF9fY29uc3QgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIENvbnN0X0l0ZXJhdG9yIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgLy8vIE1ldGFkYXRhIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6Om1ldGFkYXRhX3R5cGUgbWV0YWRhdGFfdHlwZTsKKworICAgICAgLy8vIENvbnN0IG1ldGFkYXRhIHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8bWV0YWRhdGFfdHlwZT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIG1ldGFkYXRhX2NvbnN0X3JlZmVyZW5jZTsKKworCisgICAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3Rfbm9kZV9pdF8oY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQgPSAwKQorICAgICAgOiBtX3BfbmQoY29uc3RfY2FzdDxub2RlX3BvaW50ZXI+KHBfbmQpKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBBY2Nlc3MuCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiBDb25zdF9JdGVyYXRvcihtX3BfbmQpOyB9CisKKyAgICAgIC8vLyBNZXRhZGF0YSBhY2Nlc3MuCisgICAgICBtZXRhZGF0YV9jb25zdF9yZWZlcmVuY2UKKyAgICAgIGdldF9tZXRhZGF0YSgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3BfbmQtPmdldF9tZXRhZGF0YSgpOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBfX2NvbnN0IG5vZGUgaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBsZWZ0IG5vZGUuCisgICAgICBQQl9EU19UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUMKKyAgICAgIGdldF9sX2NoaWxkKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIFBCX0RTX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQyhtX3BfbmQtPm1fcF9sZWZ0KTsgfQorCisgICAgICAvLy8gUmV0dXJucyB0aGUgX19jb25zdCBub2RlIGl0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmlnaHQgbm9kZS4KKyAgICAgIFBCX0RTX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQworICAgICAgZ2V0X3JfY2hpbGQoKSBjb25zdAorICAgICAgeyByZXR1cm4gUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDKG1fcF9uZC0+bV9wX3JpZ2h0KTsgfQorCisgICAgICAvLy8gQ29tcGFyZXMgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBQQl9EU19UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kID09IG90aGVyLm1fcF9uZDsgfQorCisgICAgICAvLy8gQ29tcGFyZXMgKG5lZ2F0aXZlbHkpIHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9uZCAhPSBvdGhlci5tX3BfbmQ7IH0KKworICAgICAgbm9kZV9wb2ludGVyIG1fcF9uZDsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX1RSRUVfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQyBcCisgICAgYmluX3NlYXJjaF90cmVlX25vZGVfaXRfPE5vZGUsIENvbnN0X0l0ZXJhdG9yLCBJdGVyYXRvciwgX0FsbG9jPgorCisgICAgLy8vIE5vZGUgaXRlcmF0b3IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZSwKKwkgICAgIGNsYXNzIENvbnN0X0l0ZXJhdG9yLAorCSAgICAgY2xhc3MgSXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgYmluX3NlYXJjaF90cmVlX25vZGVfaXRfCisgICAgOiBwdWJsaWMgUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIE5vZGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgbm9kZV9wb2ludGVyOworCisgICAgcHVibGljOgorICAgICAgLy8vIEl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KKyAgICAgIHR5cGVkZWYgSXRlcmF0b3IgdmFsdWVfdHlwZTsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIEl0ZXJhdG9yIHJlZmVyZW5jZTsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgX19jb25zdCByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgSXRlcmF0b3IgY29uc3RfcmVmZXJlbmNlOworCisgICAgICBpbmxpbmUKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9ub2RlX2l0Xyhjb25zdCBub2RlX3BvaW50ZXIgcF9uZCA9IDApCisgICAgICA6IFBCX0RTX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQyhjb25zdF9jYXN0PG5vZGVfcG9pbnRlcj4ocF9uZCkpCisgICAgICB7IH0KKworICAgICAgLy8vIEFjY2Vzcy4KKyAgICAgIEl0ZXJhdG9yCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gSXRlcmF0b3IoUEJfRFNfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDOjptX3BfbmQpOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBub2RlIGl0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGVmdCBub2RlLgorICAgICAgUEJfRFNfVFJFRV9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDCisgICAgICBnZXRfbF9jaGlsZCgpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIFBCX0RTX1RSRUVfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQygKKwkJCQkJCSAgICBQQl9EU19UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUM6Om1fcF9uZC0+bV9wX2xlZnQpOworICAgICAgfQorCisgICAgICAvLy8gUmV0dXJucyB0aGUgbm9kZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IG5vZGUuCisgICAgICBQQl9EU19UUkVFX05PREVfSVRFUkFUT1JfQ0xBU1NfQ19ERUMKKyAgICAgIGdldF9yX2NoaWxkKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gUEJfRFNfVFJFRV9OT0RFX0lURVJBVE9SX0NMQVNTX0NfREVDKAorCQkJCQkJICAgIFBCX0RTX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQzo6bV9wX25kLT5tX3BfcmlnaHQpOworICAgICAgfQorCisgICAgfTsKKworI3VuZGVmIFBCX0RTX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX1RSRUVfTk9ERV9JVEVSQVRPUl9DTEFTU19DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19CSU5fU0VBUkNIX1RSRUVfTk9ERV9JVEVSQVRPUlNfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9wb2ludF9pdGVyYXRvcnMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcG9pbnRfaXRlcmF0b3JzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2U0YWIzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcG9pbnRfaXRlcmF0b3JzLmhwcApAQCAtMCwwICsxLDM2NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5fc2VhcmNoX3RyZWVfL3BvaW50X2l0ZXJhdG9ycy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKKyNpZm5kZWYgUEJfRFNfQklOX1NFQVJDSF9UUkVFX0ZJTkRfSVRFUkFUT1JTX0hQUAorI2RlZmluZSBQQl9EU19CSU5fU0VBUkNIX1RSRUVfRklORF9JVEVSQVRPUlNfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHA+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQwkJCQkJXAorICAgIGJpbl9zZWFyY2hfdHJlZV9jb25zdF9pdF88CQkJCQkJXAorCQkJCQkJTm9kZV9Qb2ludGVyLAkJXAorCQkJCQkJVmFsdWVfVHlwZSwJCVwKKwkJCQkJCVBvaW50ZXIsCQlcCisJCQkJCQlDb25zdF9Qb2ludGVyLAkJXAorCQkJCQkJUmVmZXJlbmNlLAkJXAorCQkJCQkJQ29uc3RfUmVmZXJlbmNlLAlcCisJCQkJCQlJc19Gb3J3YXJkX0l0ZXJhdG9yLAlcCisJCQkJCQlfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfVFJFRV9DT05TVF9PRElSX0lUX0NfREVDCQkJCQlcCisgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0XzwJCQkJCQlcCisJCQkJCQlOb2RlX1BvaW50ZXIsCQlcCisJCQkJCQlWYWx1ZV9UeXBlLAkJXAorCQkJCQkJUG9pbnRlciwJCVwKKwkJCQkJCUNvbnN0X1BvaW50ZXIsCQlcCisJCQkJCQlSZWZlcmVuY2UsCQlcCisJCQkJCQlDb25zdF9SZWZlcmVuY2UsCVwKKwkJCQkJCSFJc19Gb3J3YXJkX0l0ZXJhdG9yLAlcCisJCQkJCQlfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfVFJFRV9JVF9DX0RFQwkJCQkJCVwKKyAgICBiaW5fc2VhcmNoX3RyZWVfaXRfPAkJCQkJCVwKKwkJCQkJCU5vZGVfUG9pbnRlciwJCVwKKwkJCQkJCVZhbHVlX1R5cGUsCQlcCisJCQkJCQlQb2ludGVyLAkJXAorCQkJCQkJQ29uc3RfUG9pbnRlciwJCVwKKwkJCQkJCVJlZmVyZW5jZSwJCVwKKwkJCQkJCUNvbnN0X1JlZmVyZW5jZSwJXAorCQkJCQkJSXNfRm9yd2FyZF9JdGVyYXRvciwJXAorCQkJCQkJX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX1RSRUVfT0RJUl9JVF9DX0RFQwkJCQkJXAorICAgIGJpbl9zZWFyY2hfdHJlZV9pdF88CQkJCQkJXAorCQkJCQkJCU5vZGVfUG9pbnRlciwJXAorCQkJCQkJCVZhbHVlX1R5cGUsCVwKKwkJCQkJCQlQb2ludGVyLAlcCisJCQkJCQkJQ29uc3RfUG9pbnRlciwJXAorCQkJCQkJCVJlZmVyZW5jZSwJXAorCQkJCQkJCUNvbnN0X1JlZmVyZW5jZSwgXAorCQkJCQkJCSFJc19Gb3J3YXJkX0l0ZXJhdG9yLCBcCisJCQkJCQkJX0FsbG9jPgorCisgICAgLy8vIENvbnN0IGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfUG9pbnRlciwKKwkgICAgIHR5cGVuYW1lIFZhbHVlX1R5cGUsCisJICAgICB0eXBlbmFtZSBQb2ludGVyLAorCSAgICAgdHlwZW5hbWUgQ29uc3RfUG9pbnRlciwKKwkgICAgIHR5cGVuYW1lIFJlZmVyZW5jZSwKKwkgICAgIHR5cGVuYW1lIENvbnN0X1JlZmVyZW5jZSwKKwkgICAgIGJvb2wgSXNfRm9yd2FyZF9JdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBiaW5fc2VhcmNoX3RyZWVfY29uc3RfaXRfCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyAJCWl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSAJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIAkJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBQb2ludGVyIAkJCQkJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgQ29uc3RfUG9pbnRlciAJCQkJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgUmVmZXJlbmNlIAkJCQlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIENvbnN0X1JlZmVyZW5jZSAJCQkJY29uc3RfcmVmZXJlbmNlOworCisgICAgICBpbmxpbmUKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9jb25zdF9pdF8oY29uc3QgTm9kZV9Qb2ludGVyIHBfbmQgPSAwKSAKKyAgICAgIDogbV9wX25kKGNvbnN0X2Nhc3Q8Tm9kZV9Qb2ludGVyPihwX25kKSkKKyAgICAgIHsgfQorCisgICAgICBpbmxpbmUKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9jb25zdF9pdF8oY29uc3QgUEJfRFNfVFJFRV9DT05TVF9PRElSX0lUX0NfREVDJiBvdGhlcikgCisgICAgICA6IG1fcF9uZChvdGhlci5tX3BfbmQpCisgICAgICB7IH0KKworICAgICAgaW5saW5lCisgICAgICBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yPShjb25zdCBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDJiBvdGhlcikKKyAgICAgIHsKKwltX3BfbmQgPSBvdGhlci5tX3BfbmQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUKKyAgICAgIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMmIAorICAgICAgb3BlcmF0b3I9KGNvbnN0IFBCX0RTX1RSRUVfQ09OU1RfT0RJUl9JVF9DX0RFQyYgb3RoZXIpCisgICAgICB7CisJbV9wX25kID0gb3RoZXIubV9wX25kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbmQgIT0gMCk7CisJcmV0dXJuICZtX3BfbmQtPm1fdmFsdWU7CisgICAgICB9CisKKyAgICAgIGlubGluZSBjb25zdF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9uZCAhPSAwKTsKKwlyZXR1cm4gbV9wX25kLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDICYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3BfbmQgPT0gb3RoZXIubV9wX25kOyB9CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IFBCX0RTX1RSRUVfQ09OU1RfT0RJUl9JVF9DX0RFQyAmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kID09IG90aGVyLm1fcF9uZDsgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9uZCAhPSBvdGhlci5tX3BfbmQ7IH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3QgUEJfRFNfVFJFRV9DT05TVF9PRElSX0lUX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9uZCAhPSBvdGhlci5tX3BfbmQ7IH0KKworICAgICAgaW5saW5lIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMmIAorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9uZCAhPSAwKTsKKwlpbmMoaW50ZWdyYWxfY29uc3RhbnQ8aW50LElzX0ZvcndhcmRfSXRlcmF0b3I+KCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCVBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMgcmV0X2l0KG1fcF9uZCk7CisJb3BlcmF0b3IrKygpOworCXJldHVybiByZXRfaXQ7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yLS0oKQorICAgICAgeworCWRlYyhpbnRlZ3JhbF9jb25zdGFudDxpbnQsSXNfRm9yd2FyZF9JdGVyYXRvcj4oKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQworICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQyByZXRfaXQobV9wX25kKTsKKwlvcGVyYXRvci0tKCk7CisJcmV0dXJuIHJldF9pdDsKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBpbmMoZmFsc2VfdHlwZSkKKyAgICAgIHsgZGVjKHRydWVfdHlwZSgpKTsgfQorCisgICAgICB2b2lkCisgICAgICBpbmModHJ1ZV90eXBlKQorICAgICAgeworCWlmIChtX3BfbmQtPnNwZWNpYWwoKSYmIAorCSAgICBtX3BfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPT0gbV9wX25kKQorCSAgeworCSAgICBtX3BfbmQgPSBtX3BfbmQtPm1fcF9sZWZ0OworCSAgICByZXR1cm47CisJICB9CisKKwlpZiAobV9wX25kLT5tX3BfcmlnaHQgIT0gMCkKKwkgIHsKKwkgICAgbV9wX25kID0gbV9wX25kLT5tX3BfcmlnaHQ7CisJICAgIHdoaWxlIChtX3BfbmQtPm1fcF9sZWZ0ICE9IDApCisJICAgICAgbV9wX25kID0gbV9wX25kLT5tX3BfbGVmdDsKKwkgICAgcmV0dXJuOworCSAgfQorCisJTm9kZV9Qb2ludGVyIHBfeSA9IG1fcF9uZC0+bV9wX3BhcmVudDsKKwl3aGlsZSAobV9wX25kID09IHBfeS0+bV9wX3JpZ2h0KQorCSAgeworCSAgICBtX3BfbmQgPSBwX3k7CisJICAgIHBfeSA9IHBfeS0+bV9wX3BhcmVudDsKKwkgIH0KKworCWlmIChtX3BfbmQtPm1fcF9yaWdodCAhPSBwX3kpCisJICBtX3BfbmQgPSBwX3k7CisgICAgICB9CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBkZWMoZmFsc2VfdHlwZSkKKyAgICAgIHsgaW5jKHRydWVfdHlwZSgpKTsgfQorCisgICAgICB2b2lkCisgICAgICBkZWModHJ1ZV90eXBlKQorICAgICAgeworCWlmIChtX3BfbmQtPnNwZWNpYWwoKSAmJiBtX3BfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPT0gbV9wX25kKQorCSAgeworCSAgICBtX3BfbmQgPSBtX3BfbmQtPm1fcF9yaWdodDsKKwkgICAgcmV0dXJuOworCSAgfQorCisJaWYgKG1fcF9uZC0+bV9wX2xlZnQgIT0gMCkKKwkgIHsKKwkgICAgTm9kZV9Qb2ludGVyIHBfeSA9IG1fcF9uZC0+bV9wX2xlZnQ7CisJICAgIHdoaWxlIChwX3ktPm1fcF9yaWdodCAhPSAwKQorCSAgICAgIHBfeSA9IHBfeS0+bV9wX3JpZ2h0OworCSAgICBtX3BfbmQgPSBwX3k7CisJICAgIHJldHVybjsKKwkgIH0KKworCU5vZGVfUG9pbnRlciBwX3kgPSBtX3BfbmQtPm1fcF9wYXJlbnQ7CisJd2hpbGUgKG1fcF9uZCA9PSBwX3ktPm1fcF9sZWZ0KQorCSAgeworCSAgICBtX3BfbmQgPSBwX3k7CisJICAgIHBfeSA9IHBfeS0+bV9wX3BhcmVudDsKKwkgIH0KKwlpZiAobV9wX25kLT5tX3BfbGVmdCAhPSBwX3kpCisJICBtX3BfbmQgPSBwX3k7CisgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICBOb2RlX1BvaW50ZXIgbV9wX25kOworICAgIH07CisKKyAgICAvLy8gSXRlcmF0b3IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9Qb2ludGVyLAorCSAgICAgdHlwZW5hbWUgVmFsdWVfVHlwZSwKKwkgICAgIHR5cGVuYW1lIFBvaW50ZXIsCisJICAgICB0eXBlbmFtZSBDb25zdF9Qb2ludGVyLAorCSAgICAgdHlwZW5hbWUgUmVmZXJlbmNlLAorCSAgICAgdHlwZW5hbWUgQ29uc3RfUmVmZXJlbmNlLAorCSAgICAgYm9vbCBJc19Gb3J3YXJkX0l0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGJpbl9zZWFyY2hfdHJlZV9pdF8gOiBwdWJsaWMgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQworICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBpbmxpbmUKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9pdF8oY29uc3QgTm9kZV9Qb2ludGVyIHBfbmQgPSAwKSAKKyAgICAgIDogUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQygoTm9kZV9Qb2ludGVyKXBfbmQpCisgICAgICB7IH0KKworICAgICAgaW5saW5lCisgICAgICBiaW5fc2VhcmNoX3RyZWVfaXRfKGNvbnN0IFBCX0RTX1RSRUVfT0RJUl9JVF9DX0RFQyYgb3RoZXIpIAorICAgICAgOiBQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDKG90aGVyLm1fcF9uZCkKKyAgICAgIHsgfQorCisgICAgICBpbmxpbmUKKyAgICAgIFBCX0RTX1RSRUVfSVRfQ19ERUMmIAorICAgICAgb3BlcmF0b3I9KGNvbnN0IFBCX0RTX1RSRUVfSVRfQ19ERUMmIG90aGVyKQorICAgICAgeworCWJhc2VfaXRfdHlwZTo6bV9wX25kID0gb3RoZXIubV9wX25kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lCisgICAgICBQQl9EU19UUkVFX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yPShjb25zdCBQQl9EU19UUkVFX09ESVJfSVRfQ19ERUMmIG90aGVyKQorICAgICAgeworCWJhc2VfaXRfdHlwZTo6bV9wX25kID0gb3RoZXIubV9wX25kOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUM6OnBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX2l0X3R5cGU6Om1fcF9uZCAhPSAwKTsKKwlyZXR1cm4gJmJhc2VfaXRfdHlwZTo6bV9wX25kLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQzo6cmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX2l0X3R5cGU6Om1fcF9uZCAhPSAwKTsKKwlyZXR1cm4gYmFzZV9pdF90eXBlOjptX3BfbmQtPm1fdmFsdWU7CisgICAgICB9CisKKyAgICAgIGlubGluZSBQQl9EU19UUkVFX0lUX0NfREVDJiAKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCVBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUM6OiBvcGVyYXRvcisrKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfVFJFRV9JVF9DX0RFQworICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJUEJfRFNfVFJFRV9JVF9DX0RFQyByZXRfaXQoYmFzZV9pdF90eXBlOjptX3BfbmQpOworCW9wZXJhdG9yKysoKTsKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisgICAgICBpbmxpbmUgUEJfRFNfVFJFRV9JVF9DX0RFQyYgCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlQQl9EU19UUkVFX0NPTlNUX0lUX0NfREVDOjogb3BlcmF0b3ItLSgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lIFBCX0RTX1RSRUVfSVRfQ19ERUMKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworCVBCX0RTX1RSRUVfSVRfQ19ERUMgcmV0X2l0KGJhc2VfaXRfdHlwZTo6bV9wX25kKTsKKwlvcGVyYXRvci0tKCk7CisJcmV0dXJuIHJldF9pdDsKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgUEJfRFNfVFJFRV9DT05TVF9JVF9DX0RFQyBiYXNlX2l0X3R5cGU7CisgICAgfTsKKworI3VuZGVmIFBCX0RTX1RSRUVfQ09OU1RfSVRfQ19ERUMKKyN1bmRlZiBQQl9EU19UUkVFX0NPTlNUX09ESVJfSVRfQ19ERUMKKyN1bmRlZiBQQl9EU19UUkVFX0lUX0NfREVDCisjdW5kZWYgUEJfRFNfVFJFRV9PRElSX0lUX0NfREVDCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzdkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluX3NlYXJjaF90cmVlXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYmluX3NlYXJjaF90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworQ21wX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jbXBfZm4oKQoreyByZXR1cm4gKCp0aGlzKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgQ21wX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jbXBfZm4oKSBjb25zdAoreyByZXR1cm4gKCp0aGlzKTsgfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9yX2VyYXNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcl9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTcxMTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcl9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5fc2VhcmNoX3RyZWVfL3JfZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYWN0dWFsX2VyYXNlX25vZGUobm9kZV9wb2ludGVyIHBfeikKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICAtLW1fc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShlcmFzZV9leGlzdGluZyhQQl9EU19WMkYocF96LT5tX3ZhbHVlKSk7KQorICBwX3otPn5ub2RlKCk7CisgIHNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX3osIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZV9taW5fbWF4X2Zvcl9lcmFzZWRfbm9kZShub2RlX3BvaW50ZXIgcF96KQoreworICBpZiAobV9zaXplID09IDEpCisgICAgeworICAgICAgbV9wX2hlYWQtPm1fcF9sZWZ0ID0gbV9wX2hlYWQtPm1fcF9yaWdodCA9IG1fcF9oZWFkOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAobV9wX2hlYWQtPm1fcF9sZWZ0ID09IHBfeikKKyAgICB7CisgICAgICBpdGVyYXRvciBpdChwX3opOworICAgICAgKytpdDsKKyAgICAgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IGl0Lm1fcF9uZDsKKyAgICB9CisgIGVsc2UgaWYgKG1fcF9oZWFkLT5tX3BfcmlnaHQgPT0gcF96KQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIGl0KHBfeik7CisgICAgICAtLWl0OworICAgICAgbV9wX2hlYWQtPm1fcF9yaWdodCA9IGl0Lm1fcF9uZDsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcigpCit7CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBjbGVhcl9pbXAobV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICBtX3NpemUgPSAwOworICBpbml0aWFsaXplKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6Y2xlYXIoKTspCisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXJfaW1wKG5vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZCA9PSAwKQorICAgIHJldHVybjsKKworICBjbGVhcl9pbXAocF9uZC0+bV9wX2xlZnQpOworICBjbGVhcl9pbXAocF9uZC0+bV9wX3JpZ2h0KTsKKyAgcF9uZC0+fk5vZGUoKTsKKyAgc19ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfbmQsIDEpOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcm90YXRlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vcm90YXRlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTRjMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9yb3RhdGVfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNTUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluX3NlYXJjaF90cmVlXy9yb3RhdGVfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcHMgZm9yIHJvdGF0aW5nIG5vZGVzLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorcm90YXRlX2xlZnQobm9kZV9wb2ludGVyIHBfeCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfeSA9IHBfeC0+bV9wX3JpZ2h0OworCisgIHBfeC0+bV9wX3JpZ2h0ID0gcF95LT5tX3BfbGVmdDsKKworICBpZiAocF95LT5tX3BfbGVmdCAhPSAwKQorICAgIHBfeS0+bV9wX2xlZnQtPm1fcF9wYXJlbnQgPSBwX3g7CisKKyAgcF95LT5tX3BfcGFyZW50ID0gcF94LT5tX3BfcGFyZW50OworCisgIGlmIChwX3ggPT0gbV9wX2hlYWQtPm1fcF9wYXJlbnQpCisgICAgbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX3k7CisgIGVsc2UgaWYgKHBfeCA9PSBwX3gtPm1fcF9wYXJlbnQtPm1fcF9sZWZ0KQorICAgIHBfeC0+bV9wX3BhcmVudC0+bV9wX2xlZnQgPSBwX3k7CisgIGVsc2UKKyAgICBwX3gtPm1fcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfeTsKKworICBwX3ktPm1fcF9sZWZ0ID0gcF94OworICBwX3gtPm1fcF9wYXJlbnQgPSBwX3k7CisKKyAgUEJfRFNfQVNTRVJUX05PREVfQ09OU0lTVEVOVChwX3gpCisgIFBCX0RTX0FTU0VSVF9OT0RFX0NPTlNJU1RFTlQocF95KQorCisgIGFwcGx5X3VwZGF0ZShwX3gsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICBhcHBseV91cGRhdGUocF94LT5tX3BfcGFyZW50LCAobm9kZV91cGRhdGUqICl0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cityb3RhdGVfcmlnaHQobm9kZV9wb2ludGVyIHBfeCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfeSA9IHBfeC0+bV9wX2xlZnQ7CisKKyAgcF94LT5tX3BfbGVmdCA9IHBfeS0+bV9wX3JpZ2h0OworCisgIGlmIChwX3ktPm1fcF9yaWdodCAhPSAwKQorICAgIHBfeS0+bV9wX3JpZ2h0LT5tX3BfcGFyZW50ID0gcF94OworCisgIHBfeS0+bV9wX3BhcmVudCA9IHBfeC0+bV9wX3BhcmVudDsKKworICBpZiAocF94ID09IG1fcF9oZWFkLT5tX3BfcGFyZW50KQorICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF95OworICBlbHNlIGlmIChwX3ggPT0gcF94LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQpCisgICAgcF94LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQgPSBwX3k7CisgIGVsc2UKKyAgICBwX3gtPm1fcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF95OworCisgIHBfeS0+bV9wX3JpZ2h0ID0gcF94OworICBwX3gtPm1fcF9wYXJlbnQgPSBwX3k7CisKKyAgUEJfRFNfQVNTRVJUX05PREVfQ09OU0lTVEVOVChwX3gpCisgIFBCX0RTX0FTU0VSVF9OT0RFX0NPTlNJU1RFTlQocF95KQorCisgIGFwcGx5X3VwZGF0ZShwX3gsIChub2RlX3VwZGF0ZSogKXRoaXMpOworICBhcHBseV91cGRhdGUocF94LT5tX3BfcGFyZW50LCAobm9kZV91cGRhdGUqICl0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cityb3RhdGVfcGFyZW50KG5vZGVfcG9pbnRlciBwX25kKQoreworICBub2RlX3BvaW50ZXIgcF9wYXJlbnQgPSBwX25kLT5tX3BfcGFyZW50OworCisgIGlmIChwX25kID09IHBfcGFyZW50LT5tX3BfbGVmdCkKKyAgICByb3RhdGVfcmlnaHQocF9wYXJlbnQpOworICBlbHNlCisgICAgcm90YXRlX2xlZnQocF9wYXJlbnQpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudC0+bV9wX3BhcmVudCA9IHBfbmQpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX2xlZnQgPT0gcF9wYXJlbnQgfHwKKwkJICAgcF9uZC0+bV9wX3JpZ2h0ID09IHBfcGFyZW50KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CithcHBseV91cGRhdGUobm9kZV9wb2ludGVyIC8qcF9uZCovLCBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIgLypwX3VwZGF0ZSovKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+CitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXBwbHlfdXBkYXRlKG5vZGVfcG9pbnRlciBwX25kLCBOb2RlX1VwZGF0ZV8qICAvKnBfdXBkYXRlKi8pCit7CisgIG5vZGVfdXBkYXRlOjpvcGVyYXRvcigpKG5vZGVfaXRlcmF0b3IocF9uZCksCisJCQkgIG5vZGVfY29uc3RfaXRlcmF0b3Ioc3RhdGljX2Nhc3Q8bm9kZV9wb2ludGVyPigwKSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9VcGRhdGVfPgoraW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZV90b190b3Aobm9kZV9wb2ludGVyIHBfbmQsIE5vZGVfVXBkYXRlXyogcF91cGRhdGUpCit7CisgIHdoaWxlIChwX25kICE9IG1fcF9oZWFkKQorICAgIHsKKyAgICAgIGFwcGx5X3VwZGF0ZShwX25kLCBwX3VwZGF0ZSk7CisKKyAgICAgIHBfbmQgPSBwX25kLT5tX3BfcGFyZW50OworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit1cGRhdGVfdG9fdG9wKG5vZGVfcG9pbnRlciAvKnBfbmQqLywgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyIC8qcF91cGRhdGUqLykKK3sgfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGU3NDY0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE1MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5fc2VhcmNoX3RyZWVfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitib29sCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luX3ByZXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICBpZiAob3RoZXIubV9zaXplID09IDApCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChtX3NpemUgPT0gMCkKKyAgICB7CisgICAgICB2YWx1ZV9zd2FwKG90aGVyKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgY29uc3QgYm9vbCBncmVhdGVyID0KKyAgICBDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKG1fcF9oZWFkLT5tX3BfcmlnaHQtPm1fdmFsdWUpLAorCQkgICAgICAgUEJfRFNfVjJGKG90aGVyLm1fcF9oZWFkLT5tX3BfbGVmdC0+bV92YWx1ZSkpOworCisgIGNvbnN0IGJvb2wgbGVzc2VyID0KKyAgICBDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKG90aGVyLm1fcF9oZWFkLT5tX3BfcmlnaHQtPm1fdmFsdWUpLAorCQkgICAgICAgUEJfRFNfVjJGKG1fcF9oZWFkLT5tX3BfbGVmdC0+bV92YWx1ZSkpOworCisgIGlmICghZ3JlYXRlciAmJiAhbGVzc2VyKQorICAgIF9fdGhyb3dfam9pbl9lcnJvcigpOworCisgIGlmIChsZXNzZXIpCisgICAgdmFsdWVfc3dhcChvdGhlcik7CisKKyAgbV9zaXplICs9IG90aGVyLm1fc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpqb2luKG90aGVyKTspCisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbl9maW5pc2goUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBpbml0aWFsaXplX21pbl9tYXgoKTsKKyAgb3RoZXIuaW5pdGlhbGl6ZSgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXRfcHJlcChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5LCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgIG90aGVyLmNsZWFyKCk7CisKKyAgaWYgKG1fc2l6ZSA9PSAwKQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKHJfa2V5LCBQQl9EU19WMkYobV9wX2hlYWQtPm1fcF9sZWZ0LT5tX3ZhbHVlKSkpCisgICAgeworICAgICAgdmFsdWVfc3dhcChvdGhlcik7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRihtX3BfaGVhZC0+bV9wX3JpZ2h0LT5tX3ZhbHVlKSkpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIGlmIChtX3NpemUgPT0gMSkKKyAgICB7CisgICAgICB2YWx1ZV9zd2FwKG90aGVyKTsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OnNwbGl0KHJfa2V5LChDbXBfRm4mICkoKnRoaXMpLCBvdGhlcik7KQorICByZXR1cm4gdHJ1ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0X2ZpbmlzaChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIG90aGVyLmluaXRpYWxpemVfbWluX21heCgpOworICBvdGhlci5tX3NpemUgPSBzdGQ6OmRpc3RhbmNlKG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpKTsKKyAgbV9zaXplIC09IG90aGVyLm1fc2l6ZTsKKyAgaW5pdGlhbGl6ZV9taW5fbWF4KCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CityZWN1cnNpdmVfY291bnQobm9kZV9wb2ludGVyIHApIGNvbnN0Cit7CisgIGlmIChwID09IDApCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAxICsgcmVjdXJzaXZlX2NvdW50KHAtPm1fcF9sZWZ0KSArIHJlY3Vyc2l2ZV9jb3VudChwLT5tX3BfcmlnaHQpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy90cmFpdHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vdHJhaXRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzVhN2MzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbl9zZWFyY2hfdHJlZV8vdHJhaXRzLmhwcApAQCAtMCwwICsxLDI0MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5fc2VhcmNoX3RyZWVfL3RyYWl0cy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciBiaW5fc2VhcmNoX3RyZWVfLgorICovCisKKyNpZm5kZWYgUEJfRFNfQklOX1NFQVJDSF9UUkVFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKyNkZWZpbmUgUEJfRFNfQklOX1NFQVJDSF9UUkVFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9wb2ludF9pdGVyYXRvcnMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluX3NlYXJjaF90cmVlXy9ub2RlX2l0ZXJhdG9ycy5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBCaW5hcnkgc2VhcmNoIHRyZWUgdHJhaXRzLCBwcmltYXJ5IHRlbXBsYXRlCisgICAgLy8vIEBpbmdyb3VwIHRyYWl0cworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIHR5cGVuYW1lIE1hcHBlZCwKKwkgICAgIGNsYXNzIENtcF9GbiwKKwkgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfQ0l0ciwKKwkJICAgICAgY2xhc3MgTm9kZV9JdHIsCisJCSAgICAgIGNsYXNzIENtcF9GbiwKKwkJICAgICAgdHlwZW5hbWUgX0FsbG9jPgorCSAgICAgY2xhc3MgTm9kZV9VcGRhdGUsCisJICAgICBjbGFzcyBOb2RlLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBiaW5fc2VhcmNoX3RyZWVfdHJhaXRzCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVzX3RyYWl0czxLZXksIE1hcHBlZCwgX0FsbG9jLCBmYWxzZT4gdHlwZV90cmFpdHM7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIE5vZGUgbm9kZTsKKworICAgICAgdHlwZWRlZgorICAgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0XzwKKwl0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKwlub2RlPjo6b3RoZXI6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnZhbHVlX3R5cGUsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3BvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnJlZmVyZW5jZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlLAorCXRydWUsCisJX0FsbG9jPgorICAgICAgcG9pbnRfY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9pdF88CisJdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8CisJbm9kZT46Om90aGVyOjpwb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjp2YWx1ZV90eXBlLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpwb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpjb25zdF9wb2ludGVyLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpyZWZlcmVuY2UsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3JlZmVyZW5jZSwKKwl0cnVlLAorCV9BbGxvYz4KKyAgICAgIHBvaW50X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3RfaXRfPAorCXR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPAorCW5vZGU+OjpvdGhlcjo6cG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6dmFsdWVfdHlwZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6cG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6cmVmZXJlbmNlLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpjb25zdF9yZWZlcmVuY2UsCisJZmFsc2UsCisJX0FsbG9jPgorICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgYmluX3NlYXJjaF90cmVlX2l0XzwKKwl0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKwlub2RlPjo6b3RoZXI6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnZhbHVlX3R5cGUsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3BvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnJlZmVyZW5jZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlLAorCWZhbHNlLAorCV9BbGxvYz4KKyAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vLyBUaGlzIGlzIGFuIGl0ZXJhdG9yIHRvIGFuIGl0ZXJhdG9yOiBpdCBpdGVyYXRlcyBvdmVyIG5vZGVzLAorICAgICAgLy8vIGFuZCBkZS1yZWZlcmVuY2luZyBpdCByZXR1cm5zIG9uZSBvZiB0aGUgdHJlZSdzIGl0ZXJhdG9ycy4KKyAgICAgIHR5cGVkZWYKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9jb25zdF9ub2RlX2l0XzwKKwlOb2RlLAorCXBvaW50X2NvbnN0X2l0ZXJhdG9yLAorCXBvaW50X2l0ZXJhdG9yLAorCV9BbGxvYz4KKyAgICAgIG5vZGVfY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIGJpbl9zZWFyY2hfdHJlZV9ub2RlX2l0XzwKKwlOb2RlLAorCXBvaW50X2NvbnN0X2l0ZXJhdG9yLAorCXBvaW50X2l0ZXJhdG9yLAorCV9BbGxvYz4KKyAgICAgIG5vZGVfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIE5vZGVfVXBkYXRlPAorCW5vZGVfY29uc3RfaXRlcmF0b3IsCisJbm9kZV9pdGVyYXRvciwKKwlDbXBfRm4sCisJX0FsbG9jPgorICAgICAgbm9kZV91cGRhdGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIF9fZ251X3BiZHM6Om51bGxfbm9kZV91cGRhdGU8CisJbm9kZV9jb25zdF9pdGVyYXRvciwKKwlub2RlX2l0ZXJhdG9yLAorCUNtcF9GbiwKKwlfQWxsb2M+KiAKKyAgICAgIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlcjsKKyAgICB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uLgorICAgIC8vLyBAaW5ncm91cCB0cmFpdHMKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsCisJCSAgICAgIGNsYXNzIE5vZGVfSXRyLAorCQkgICAgICBjbGFzcyBDbXBfRm4sCisJCSAgICAgIHR5cGVuYW1lIF9BbGxvYz4KKwkgICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgY2xhc3MgTm9kZSwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgYmluX3NlYXJjaF90cmVlX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfdHlwZSwKKyAgICAgIENtcF9GbiwKKyAgICAgIE5vZGVfVXBkYXRlLAorICAgICAgTm9kZSwKKyAgICAgIF9BbGxvYz4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZXNfdHJhaXRzPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIGZhbHNlPiB0eXBlX3RyYWl0czsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgTm9kZSBub2RlOworCisgICAgICB0eXBlZGVmCisgICAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3RfaXRfPAorCXR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPAorCW5vZGU+OjpvdGhlcjo6cG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6dmFsdWVfdHlwZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6cG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcG9pbnRlciwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6cmVmZXJlbmNlLAorCXR5cGVuYW1lIHR5cGVfdHJhaXRzOjpjb25zdF9yZWZlcmVuY2UsCisJdHJ1ZSwKKwlfQWxsb2M+CisgICAgICBwb2ludF9jb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBwb2ludF9jb25zdF9pdGVyYXRvciBwb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgYmluX3NlYXJjaF90cmVlX2NvbnN0X2l0XzwKKwl0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKwlub2RlPjo6b3RoZXI6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnZhbHVlX3R5cGUsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnBvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3BvaW50ZXIsCisJdHlwZW5hbWUgdHlwZV90cmFpdHM6OnJlZmVyZW5jZSwKKwl0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlLAorCWZhbHNlLAorCV9BbGxvYz4KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLy8gVGhpcyBpcyBhbiBpdGVyYXRvciB0byBhbiBpdGVyYXRvcjogaXQgaXRlcmF0ZXMgb3ZlciBub2RlcywKKyAgICAgIC8vLyBhbmQgZGUtcmVmZXJlbmNpbmcgaXQgcmV0dXJucyBvbmUgb2YgdGhlIHRyZWUncyBpdGVyYXRvcnMuCisgICAgICB0eXBlZGVmCisgICAgICBiaW5fc2VhcmNoX3RyZWVfY29uc3Rfbm9kZV9pdF88CisJTm9kZSwKKwlwb2ludF9jb25zdF9pdGVyYXRvciwKKwlwb2ludF9pdGVyYXRvciwKKwlfQWxsb2M+CisgICAgICBub2RlX2NvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIG5vZGVfY29uc3RfaXRlcmF0b3Igbm9kZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZgorICAgICAgTm9kZV9VcGRhdGU8bm9kZV9jb25zdF9pdGVyYXRvciwgbm9kZV9pdGVyYXRvciwgQ21wX0ZuLCBfQWxsb2M+CisgICAgICBub2RlX3VwZGF0ZTsKKworICAgICAgdHlwZWRlZgorICAgICAgX19nbnVfcGJkczo6bnVsbF9ub2RlX3VwZGF0ZTwKKwlub2RlX2NvbnN0X2l0ZXJhdG9yLAorCW5vZGVfaXRlcmF0b3IsCisJQ21wX0ZuLAorCV9BbGxvYz4qIAorICAgICAgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyOworICAgIH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2JpbmFyeV9oZWFwXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2JpbmFyeV9oZWFwXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2NzcyYgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vYmluYXJ5X2hlYXBfLmhwcApAQCAtMCwwICsxLDM1MiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5hcnlfaGVhcF8vYmluYXJ5X2hlYXBfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5IGhlYXAuCisgKi8KKworI2lmbmRlZiBQQl9EU19CSU5BUllfSEVBUF9IUFAKKyNkZWZpbmUgUEJfRFNfQklOQVJZX0hFQVBfSFBQCisKKyNpbmNsdWRlIDxxdWV1ZT4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29uZF9kZWFsdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VudHJ5X2NtcC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZW50cnlfcHJlZC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcmVzaXplX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcG9pbnRfY29uc3RfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcD4KKyNpZmRlZiBQQl9EU19CSU5BUllfSEVBUF9UUkFDRV8KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNlbmRpZgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgYmluYXJ5X2hlYXA8VmFsdWVfVHlwZSwgQ21wX0ZuLCBfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfRU5UUllfQ01QX0RFQyBcCisgICAgZW50cnlfY21wPFZhbHVlX1R5cGUsIENtcF9GbiwgX0FsbG9jLCBpc19zaW1wbGU8VmFsdWVfVHlwZT46OnZhbHVlPjo6dHlwZQorCisjZGVmaW5lIFBCX0RTX1JFU0laRV9QT0xJQ1lfREVDCVwKKyAgICBfX2dudV9wYmRzOjpkZXRhaWw6OnJlc2l6ZV9wb2xpY3k8dHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGU+CisKKyAgICAvKioKKyAgICAgKiAgQmluYXJ5IGhlYXBzIGNvbXBvc2VkIG9mIHJlc2l6ZSBhbmQgY29tcGFyZSBwb2xpY2llcy4KKyAgICAgKgorICAgICAqICBAaW5ncm91cCBoZWFwLWRldGFpbAorICAgICAqCisgICAgICogIEJhc2VkIG9uIENMUlMuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgdHlwZW5hbWUgQ21wX0ZuLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgYmluYXJ5X2hlYXAKKyAgICA6IHB1YmxpYyBQQl9EU19FTlRSWV9DTVBfREVDLCBwdWJsaWMgUEJfRFNfUkVTSVpFX1BPTElDWV9ERUMKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIAkJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBDbXBfRm4gCQkJCQljbXBfZm47CisgICAgICB0eXBlZGVmIF9BbGxvYyAJCQkJCWFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSAJCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgCQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFBCX0RTX0VOVFJZX0NNUF9ERUMgCQllbnRyeV9jbXA7CisgICAgICB0eXBlZGVmIFBCX0RTX1JFU0laRV9QT0xJQ1lfREVDIAkJCXJlc2l6ZV9wb2xpY3k7CisgICAgICB0eXBlZGVmIGNvbmRfZGVhbHRvcjx2YWx1ZV90eXBlLCBfQWxsb2M+IAkJY29uZF9kZWFsdG9yX3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgZW51bQorCXsKKwkgIHNpbXBsZV92YWx1ZSA9IGlzX3NpbXBsZTx2YWx1ZV90eXBlPjo6dmFsdWUKKwl9OworCisgICAgICB0eXBlZGVmIGludGVncmFsX2NvbnN0YW50PGludCwgc2ltcGxlX3ZhbHVlPiAJbm9fdGhyb3dfY29waWVzX3Q7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT4JX19yZWJpbmRfdjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdjo6b3RoZXIgCQl2YWx1ZV9hbGxvY2F0b3I7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX2FsbG9jYXRvcjo6cG9pbnRlcgkJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyCWNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHZhbHVlX2FsbG9jYXRvcjo6cmVmZXJlbmNlCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UJY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uZGl0aW9uYWxfdHlwZTxzaW1wbGVfdmFsdWUsCisJCQkJCSAgdmFsdWVfdHlwZSwgcG9pbnRlcj46Ol9fdHlwZQorICAgICAgCQkJCQkJCWVudHJ5OworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGVudHJ5Pjo6b3RoZXIKKyAgICAgIAkJCQkJCQllbnRyeV9hbGxvY2F0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpwb2ludGVyIAllbnRyeV9wb2ludGVyOworCisgICAgICB0eXBlZGVmIGJpbmFyeV9oZWFwX3BvaW50X2NvbnN0X2l0ZXJhdG9yXzx2YWx1ZV90eXBlLCBlbnRyeSwKKwkJCQkJCXNpbXBsZV92YWx1ZSwgX0FsbG9jPgorICAgICAgCQkJCQkJCXBvaW50X2NvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHBvaW50X2NvbnN0X2l0ZXJhdG9yIAkJCXBvaW50X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIGJpbmFyeV9oZWFwX2NvbnN0X2l0ZXJhdG9yXzx2YWx1ZV90eXBlLCBlbnRyeSwKKwkJCQkJICBzaW1wbGVfdmFsdWUsIF9BbGxvYz4KKyAgICAgIAkJCQkJCQljb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvciAJCQkJaXRlcmF0b3I7CisKKworICAgICAgYmluYXJ5X2hlYXAoKTsKKworICAgICAgYmluYXJ5X2hlYXAoY29uc3QgY21wX2ZuJik7CisKKyAgICAgIGJpbmFyeV9oZWFwKGNvbnN0IGJpbmFyeV9oZWFwJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoYmluYXJ5X2hlYXAmKTsKKworICAgICAgfmJpbmFyeV9oZWFwKCk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIENtcF9GbiYKKyAgICAgIGdldF9jbXBfZm4oKTsKKworICAgICAgY29uc3QgQ21wX0ZuJgorICAgICAgZ2V0X2NtcF9mbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIHB1c2goY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgdm9pZAorICAgICAgbW9kaWZ5KHBvaW50X2l0ZXJhdG9yLCBjb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgY29uc3RfcmVmZXJlbmNlCisgICAgICB0b3AoKSBjb25zdDsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHBvcCgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZXJhc2UocG9pbnRfaXRlcmF0b3IpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorCXNpemVfdHlwZQorCWVyYXNlX2lmKFByZWQpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZXJhc2VfYXQoZW50cnlfcG9pbnRlciwgc2l6ZV90eXBlLCBmYWxzZV90eXBlKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGVyYXNlX2F0KGVudHJ5X3BvaW50ZXIsIHNpemVfdHlwZSwgdHJ1ZV90eXBlKTsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisJdm9pZAorCXNwbGl0KFByZWQsIGJpbmFyeV9oZWFwJik7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oYmluYXJ5X2hlYXAmKTsKKworI2lmZGVmIFBCX0RTX0JJTkFSWV9IRUFQX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdDsKKyNlbmRpZgorCisgICAgcHJvdGVjdGVkOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisJdm9pZAorCWNvcHlfZnJvbV9yYW5nZShJdCwgSXQpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIHZhbHVlX3N3YXAoYmluYXJ5X2hlYXAmKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGluc2VydF92YWx1ZShjb25zdF9yZWZlcmVuY2UsIGZhbHNlX3R5cGUpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgaW5zZXJ0X3ZhbHVlKHZhbHVlX3R5cGUsIHRydWVfdHlwZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByZXNpemVfZm9yX2luc2VydF9pZl9uZWVkZWQoKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHN3YXBfdmFsdWVfaW1wKGVudHJ5X3BvaW50ZXIsIHZhbHVlX3R5cGUsIHRydWVfdHlwZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzd2FwX3ZhbHVlX2ltcChlbnRyeV9wb2ludGVyLCBjb25zdF9yZWZlcmVuY2UsIGZhbHNlX3R5cGUpOworCisgICAgICB2b2lkCisgICAgICBmaXgoZW50cnlfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHRvcF9pbXAodHJ1ZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICAgICAgdG9wX2ltcChmYWxzZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIHN0YXRpYyBzaXplX3R5cGUKKyAgICAgIGxlZnRfY2hpbGQoc2l6ZV90eXBlKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBzaXplX3R5cGUKKyAgICAgIHJpZ2h0X2NoaWxkKHNpemVfdHlwZSk7CisKKyAgICAgIGlubGluZSBzdGF0aWMgc2l6ZV90eXBlCisgICAgICBwYXJlbnQoc2l6ZV90eXBlKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHJlc2l6ZV9mb3JfZXJhc2VfaWZfbmVlZGVkKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBzaXplX3R5cGUKKyAgICAgIHBhcnRpdGlvbihQcmVkKTsKKworICAgICAgdm9pZAorICAgICAgbWFrZV9oZWFwKCkKKyAgICAgIHsKKwljb25zdCBlbnRyeV9jbXAmIG1fY21wID0gc3RhdGljX2Nhc3Q8ZW50cnlfY21wJj4oKnRoaXMpOworCWVudHJ5X3BvaW50ZXIgZW5kID0gbV9hX2VudHJpZXMgKyBtX3NpemU7CisJc3RkOjptYWtlX2hlYXAobV9hX2VudHJpZXMsIGVuZCwgbV9jbXApOworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChpc19oZWFwKCkpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBwdXNoX2hlYXAoKQorICAgICAgeworCWlmICghaXNfaGVhcCgpKQorCSAgbWFrZV9oZWFwKCk7CisJZWxzZQorCSAgeworCSAgICBjb25zdCBlbnRyeV9jbXAmIG1fY21wID0gc3RhdGljX2Nhc3Q8ZW50cnlfY21wJj4oKnRoaXMpOworCSAgICBlbnRyeV9wb2ludGVyIGVuZCA9IG1fYV9lbnRyaWVzICsgbV9zaXplOworCSAgICBzdGQ6OnB1c2hfaGVhcChtX2FfZW50cmllcywgZW5kLCBtX2NtcCk7CisJICB9CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9oZWFwKCkKKyAgICAgIHsKKwljb25zdCBlbnRyeV9jbXAmIG1fY21wID0gc3RhdGljX2Nhc3Q8ZW50cnlfY21wJj4oKnRoaXMpOworCWVudHJ5X3BvaW50ZXIgZW5kID0gbV9hX2VudHJpZXMgKyBtX3NpemU7CisJc3RkOjpwb3BfaGVhcChtX2FfZW50cmllcywgZW5kLCBtX2NtcCk7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIGlzX2hlYXAoKQorICAgICAgeworCWNvbnN0IGVudHJ5X2NtcCYgbV9jbXAgPSBzdGF0aWNfY2FzdDxlbnRyeV9jbXAmPigqdGhpcyk7CisJZW50cnlfcG9pbnRlciBlbmQgPSBtX2FfZW50cmllcyArIG1fc2l6ZTsKKwlib29sIHAgPSBzdGQ6Ol9faXNfaGVhcChtX2FfZW50cmllcywgZW5kLCBtX2NtcCk7CisJcmV0dXJuIHA7CisgICAgICB9CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworI2VuZGlmCisKKyNpZmRlZiBQQl9EU19CSU5BUllfSEVBUF9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlX2VudHJ5KGNvbnN0IGVudHJ5JiwgZmFsc2VfdHlwZSkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlX2VudHJ5KGNvbnN0IGVudHJ5JiwgdHJ1ZV90eXBlKSBjb25zdDsKKyNlbmRpZgorCisgICAgICBzdGF0aWMgZW50cnlfYWxsb2NhdG9yIAlzX2VudHJ5X2FsbG9jYXRvcjsKKyAgICAgIHN0YXRpYyB2YWx1ZV9hbGxvY2F0b3IgCXNfdmFsdWVfYWxsb2NhdG9yOworICAgICAgc3RhdGljIG5vX3Rocm93X2NvcGllc190IAlzX25vX3Rocm93X2NvcGllc19pbmQ7CisKKyAgICAgIHNpemVfdHlwZSAJCW1fc2l6ZTsKKyAgICAgIHNpemVfdHlwZSAJCW1fYWN0dWFsX3NpemU7CisgICAgICBlbnRyeV9wb2ludGVyIAkJbV9hX2VudHJpZXM7CisgICAgfTsKKworI2RlZmluZSBQQl9EU19BU1NFUlRfVkFMSUQoWCkgXAorICBfR0xJQkNYWF9ERUJVR19PTkxZKFguYXNzZXJ0X3ZhbGlkKF9fRklMRV9fLCBfX0xJTkVfXyk7KQorCisjZGVmaW5lIFBCX0RTX0RFQlVHX1ZFUklGWShfQ29uZCkJCQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfVkVSSUZZX0FUKF9Db25kLAkJCQkJXAorCQkJICAgX01fbWVzc2FnZSgjX0NvbmQiIGFzc2VydGlvbiBmcm9tICUxOzolMjsiKQlcCisJCQkgICAuX01fc3RyaW5nKF9fRklMRV9fKS5fTV9pbnRlZ2VyKF9fTElORV9fKQlcCisJCQkgICAsX19maWxlLF9fbGluZSkKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vdHJhY2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaW5mb19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19FTlRSWV9DTVBfREVDCisjdW5kZWYgUEJfRFNfUkVTSVpFX1BPTElDWV9ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vY29uc3RfaXRlcmF0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDAzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcApAQCAtMCwwICsxLDEzOSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5hcnlfaGVhcF8vY29uc3RfaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhbiBpdGVyYXRvciBjbGFzcyByZXR1cm5lZCBieSB0aGUgdGFibGUncyBjb25zdCBmaW5kIGFuZCBpbnNlcnQKKyAqICAgICBtZXRob2RzLgorICovCisKKyNpZm5kZWYgUEJfRFNfQklOQVJZX0hFQVBfQ09OU1RfSVRFUkFUT1JfSFBQCisjZGVmaW5lIFBCX0RTX0JJTkFSWV9IRUFQX0NPTlNUX0lURVJBVE9SX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcG9pbnRfY29uc3RfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2RlZmluZSBQQl9EU19CSU5fSEVBUF9DSVRfQkFTRSBcCisgICAgYmluYXJ5X2hlYXBfcG9pbnRfY29uc3RfaXRlcmF0b3JfPFZhbHVlX1R5cGUsIEVudHJ5LCBTaW1wbGUsIF9BbGxvYz4KKworICAgIC8vLyBDb25zdCBwb2ludC10eXBlIGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsCisJICAgICB0eXBlbmFtZSBFbnRyeSwKKwkgICAgIGJvb2wgU2ltcGxlLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGJpbmFyeV9oZWFwX2NvbnN0X2l0ZXJhdG9yXyA6IHB1YmxpYyBQQl9EU19CSU5fSEVBUF9DSVRfQkFTRQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19CSU5fSEVBUF9DSVRfQkFTRSAJCSAgICAgICAJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmVudHJ5X3BvaW50ZXIgCWVudHJ5X3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gQ2F0ZWdvcnkuCisgICAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgCQlpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgLy8vIERpZmZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgCQlkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIHZhbHVlIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6dmFsdWVfdHlwZSAJCXZhbHVlX3R5cGU7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIHBvaW50ZXIgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludGVyIAkJcG9pbnRlcjsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgY29uc3QgcG9pbnRlciB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3BvaW50ZXIgCWNvbnN0X3BvaW50ZXI7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnJlZmVyZW5jZSAJCXJlZmVyZW5jZTsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgY29uc3QgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIGlubGluZQorICAgICAgYmluYXJ5X2hlYXBfY29uc3RfaXRlcmF0b3JfKGVudHJ5X3BvaW50ZXIgcF9lKSA6IGJhc2VfdHlwZShwX2UpCisgICAgICB7IH0KKworICAgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICBpbmxpbmUKKyAgICAgIGJpbmFyeV9oZWFwX2NvbnN0X2l0ZXJhdG9yXygpCisgICAgICB7IH0KKworICAgICAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgICAgICBpbmxpbmUKKyAgICAgIGJpbmFyeV9oZWFwX2NvbnN0X2l0ZXJhdG9yXyhjb25zdCBiaW5hcnlfaGVhcF9jb25zdF9pdGVyYXRvcl8mIG90aGVyKSAKKyAgICAgIDogYmFzZV90eXBlKG90aGVyKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBDb21wYXJlcyBjb250ZW50IHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGJpbmFyeV9oZWFwX2NvbnN0X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiBiYXNlX3R5cGU6Om1fcF9lID09IG90aGVyLm1fcF9lOyB9CisKKyAgICAgIC8vLyBDb21wYXJlcyBjb250ZW50IChuZWdhdGl2ZWx5KSB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBiaW5hcnlfaGVhcF9jb25zdF9pdGVyYXRvcl8mIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gYmFzZV90eXBlOjptX3BfZSAhPSBvdGhlci5tX3BfZTsgfQorCisgICAgICBpbmxpbmUgYmluYXJ5X2hlYXBfY29uc3RfaXRlcmF0b3JfJiAKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6Om1fcF9lICE9IDApOworCWluYygpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgaW5saW5lIGJpbmFyeV9oZWFwX2NvbnN0X2l0ZXJhdG9yXworICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJYmluYXJ5X2hlYXBfY29uc3RfaXRlcmF0b3JfIHJldF9pdChiYXNlX3R5cGU6Om1fcF9lKTsKKwlvcGVyYXRvcisrKCk7CisJcmV0dXJuIHJldF9pdDsKKyAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBpbmMoKQorICAgICAgeyArK2Jhc2VfdHlwZTo6bV9wX2U7IH0KKyAgICB9OworCisjdW5kZWYgUEJfRFNfQklOX0hFQVBfQ0lUX0JBU0UKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDRkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTM5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGJpbmFyeV9oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmVudHJ5X2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfZW50cnlfYWxsb2NhdG9yOworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnZhbHVlX2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfdmFsdWVfYWxsb2NhdG9yOworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vX3Rocm93X2NvcGllc190CitQQl9EU19DTEFTU19DX0RFQzo6c19ub190aHJvd19jb3BpZXNfaW5kOworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIHdoaWxlIChmaXJzdF9pdCAhPSBsYXN0X2l0KQorICAgIHsKKyAgICAgIGluc2VydF92YWx1ZSgqZmlyc3RfaXQsIHNfbm9fdGhyb3dfY29waWVzX2luZCk7CisgICAgICArK2ZpcnN0X2l0OworICAgIH0KKyAgbWFrZV9oZWFwKCk7CisgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitiaW5hcnlfaGVhcCgpCis6IG1fc2l6ZSgwKSwgbV9hY3R1YWxfc2l6ZShyZXNpemVfcG9saWN5OjptaW5fc2l6ZSksCisgIG1fYV9lbnRyaWVzKHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKG1fYWN0dWFsX3NpemUpKQoreyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmluYXJ5X2hlYXAoY29uc3QgQ21wX0ZuJiByX2NtcF9mbikKKzogZW50cnlfY21wKHJfY21wX2ZuKSwgbV9zaXplKDApLCBtX2FjdHVhbF9zaXplKHJlc2l6ZV9wb2xpY3k6Om1pbl9zaXplKSwKKyAgbV9hX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9hY3R1YWxfc2l6ZSkpCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitiaW5hcnlfaGVhcChjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCis6IGVudHJ5X2NtcChvdGhlciksIHJlc2l6ZV9wb2xpY3kob3RoZXIpLCBtX3NpemUoMCksCisgIG1fYWN0dWFsX3NpemUob3RoZXIubV9hY3R1YWxfc2l6ZSksCisgIG1fYV9lbnRyaWVzKHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKG1fYWN0dWFsX3NpemUpKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX2FfZW50cmllcyAhPSBvdGhlci5tX2FfZW50cmllcyk7CisKKyAgX190cnkKKyAgICB7CisgICAgICBjb3B5X2Zyb21fcmFuZ2Uob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCkpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKKwllcmFzZV9hdChtX2FfZW50cmllcywgaSwgc19ub190aHJvd19jb3BpZXNfaW5kKTsKKworICAgICAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX2FfZW50cmllcywgbV9hY3R1YWxfc2l6ZSk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX2FfZW50cmllcyAhPSBvdGhlci5tX2FfZW50cmllcyk7CisgIHZhbHVlX3N3YXAob3RoZXIpOworICBzdGQ6OnN3YXAoKGVudHJ5X2NtcCYpKCp0aGlzKSwgKGVudHJ5X2NtcCYpb3RoZXIpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordmFsdWVfc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIHN0ZDo6c3dhcChtX2FfZW50cmllcywgb3RoZXIubV9hX2VudHJpZXMpOworICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOworICBzdGQ6OnN3YXAobV9hY3R1YWxfc2l6ZSwgb3RoZXIubV9hY3R1YWxfc2l6ZSk7CisgIHN0YXRpY19jYXN0PHJlc2l6ZV9wb2xpY3kqPih0aGlzKS0+c3dhcChvdGhlcik7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+YmluYXJ5X2hlYXAoKQoreworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgIGVyYXNlX2F0KG1fYV9lbnRyaWVzLCBpLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDMyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluYXJ5X2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZChjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisjaWZkZWYgUEJfRFNfUkVHUkVTU0lPTgorICBzX2VudHJ5X2FsbG9jYXRvci5jaGVja19hbGxvY2F0ZWQobV9hX2VudHJpZXMsIG1fYWN0dWFsX3NpemUpOworI2VuZGlmCisKKyAgcmVzaXplX3BvbGljeTo6YXNzZXJ0X3ZhbGlkKF9fZmlsZSwgX19saW5lKTsKKyAgUEJfRFNfREVCVUdfVkVSSUZZKG1fc2l6ZSA8PSBtX2FjdHVhbF9zaXplKTsKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKKyAgICB7CisjaWZkZWYgUEJfRFNfUkVHUkVTU0lPTgorICAgICAgc192YWx1ZV9hbGxvY2F0b3IuY2hlY2tfYWxsb2NhdGVkKG1fYV9lbnRyaWVzW2ldLCAxKTsKKyNlbmRpZgorCisgICAgICBpZiAobGVmdF9jaGlsZChpKSA8IG1fc2l6ZSkKKwlQQl9EU19ERUJVR19WRVJJRlkoIWVudHJ5X2NtcDo6b3BlcmF0b3IoKShtX2FfZW50cmllc1tpXSwgbV9hX2VudHJpZXNbbGVmdF9jaGlsZChpKV0pKTsKKworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBhcmVudChsZWZ0X2NoaWxkKGkpKSA9PSBpKTsKKworICAgICAgaWYgKHJpZ2h0X2NoaWxkKGkpIDwgbV9zaXplKQorCVBCX0RTX0RFQlVHX1ZFUklGWSghZW50cnlfY21wOjpvcGVyYXRvcigpKG1fYV9lbnRyaWVzW2ldLCBtX2FfZW50cmllc1tyaWdodF9jaGlsZChpKV0pKTsKKworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBhcmVudChyaWdodF9jaGlsZChpKSkgPT0gaSk7CisgICAgfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZW50cnlfY21wLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZW50cnlfY21wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmUxMDAxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9lbnRyeV9jbXAuaHBwCkBAIC0wLDAgKzEsODUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluYXJ5X2hlYXBfL2VudHJ5X2NtcC5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJpbmFyeV9oZWFwLgorICovCisKKyNpZm5kZWYgUEJfRFNfQklOQVJZX0hFQVBfRU5UUllfQ01QX0hQUAorI2RlZmluZSBQQl9EU19CSU5BUllfSEVBUF9FTlRSWV9DTVBfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBFbnRyeSBjb21wYXJlLCBwcmltYXJ5IHRlbXBsYXRlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WVHAsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jLCBib29sIE5vX1Rocm93PgorICAgICAgc3RydWN0IGVudHJ5X2NtcDsKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiwgdHJ1ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVlRwLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgIHN0cnVjdCBlbnRyeV9jbXA8X1ZUcCwgQ21wX0ZuLCBfQWxsb2MsIHRydWU+CisgICAgICB7CisJLy8vIENvbXBhcmUuCisJdHlwZWRlZiBDbXBfRm4gCQkJCQkJdHlwZTsKKyAgICAgIH07CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24sIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WVHAsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgc3RydWN0IGVudHJ5X2NtcDxfVlRwLCBDbXBfRm4sIF9BbGxvYywgZmFsc2U+CisgICAgICB7CisgICAgICBwcml2YXRlOgorCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1ZUcD4JCV9fcmViaW5kX3Y7CisKKyAgICAgIHB1YmxpYzoKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3Y6Om90aGVyOjpjb25zdF9wb2ludGVyCWVudHJ5OworCisJLy8vIENvbXBhcmUgcGx1cyBlbnRyeS4KKwlzdHJ1Y3QgdHlwZSA6IHB1YmxpYyBDbXBfRm4KKwl7CisJICB0eXBlKCkgeyB9CisKKwkgIHR5cGUoY29uc3QgQ21wX0ZuJiBvdGhlcikgOiBDbXBfRm4ob3RoZXIpIHsgfQorCisJICBib29sCisJICBvcGVyYXRvcigpKGVudHJ5IGxocywgZW50cnkgcmhzKSBjb25zdAorCSAgeyByZXR1cm4gQ21wX0ZuOjpvcGVyYXRvcigpKCpsaHMsICpyaHMpOyB9CisJfTsKKyAgICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19CSU5BUllfSEVBUF9FTlRSWV9DTVBfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VudHJ5X3ByZWQuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9lbnRyeV9wcmVkLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQ3YzA2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9lbnRyeV9wcmVkLmhwcApAQCAtMCwwICsxLDg1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy9lbnRyeV9wcmVkLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5X2hlYXAuCisgKi8KKworI2lmbmRlZiBQQl9EU19CSU5BUllfSEVBUF9FTlRSWV9QUkVEX0hQUAorI2RlZmluZSBQQl9EU19CSU5BUllfSEVBUF9FTlRSWV9QUkVEX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gRW50cnkgcHJlZGljYXRlIHByaW1hcnkgY2xhc3MgdGVtcGxhdGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZUcCwgdHlwZW5hbWUgUHJlZCwgdHlwZW5hbWUgX0FsbG9jLCBib29sIE5vX1Rocm93PgorICAgICAgc3RydWN0IGVudHJ5X3ByZWQ7CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24sIHRydWUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZUcCwgdHlwZW5hbWUgUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgc3RydWN0IGVudHJ5X3ByZWQ8X1ZUcCwgUHJlZCwgX0FsbG9jLCB0cnVlPgorICAgICAgeworCXR5cGVkZWYgUHJlZCAJCQkJCQl0eXBlOworICAgICAgfTsKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiwgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZUcCwgdHlwZW5hbWUgUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgc3RydWN0IGVudHJ5X3ByZWQ8X1ZUcCwgUHJlZCwgX0FsbG9jLCBmYWxzZT4KKyAgICAgIHsKKyAgICAgIHByaXZhdGU6CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfVlRwPgkJX19yZWJpbmRfdjsKKworICAgICAgcHVibGljOgorCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIJZW50cnk7CisKKwlzdHJ1Y3QgdHlwZSA6IHB1YmxpYyBQcmVkCisJeworCSAgaW5saW5lCisJICB0eXBlKCkgeyB9CisKKwkgIGlubGluZQorCSAgdHlwZShjb25zdCBQcmVkJiBvdGhlcikgOiBQcmVkKG90aGVyKSB7IH0KKworCSAgaW5saW5lIGJvb2wKKwkgIG9wZXJhdG9yKCkoZW50cnkgcF92KSBjb25zdAorCSAgeyByZXR1cm4gUHJlZDo6b3BlcmF0b3IoKSgqcF92KTsgfQorCX07CisgICAgICB9OworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfQklOQVJZX0hFQVBfRU5UUllfUFJFRF9IUFAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0N2Q3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjA4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5X2hlYXAuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKKyAgICBlcmFzZV9hdChtX2FfZW50cmllcywgaSwgc19ub190aHJvd19jb3BpZXNfaW5kKTsKKworICBfX3RyeQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBuZXdfc2l6ZSA9IHJlc2l6ZV9wb2xpY3k6OmdldF9uZXdfc2l6ZV9mb3JfYXJiaXRyYXJ5KDApOworICAgICAgZW50cnlfcG9pbnRlciBuZXdfZW50cmllcyA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKG5ld19zaXplKTsKKyAgICAgIHJlc2l6ZV9wb2xpY3k6Om5vdGlmeV9hcmJpdHJhcnkobmV3X3NpemUpOworICAgICAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX2FfZW50cmllcywgbV9hY3R1YWxfc2l6ZSk7CisgICAgICBtX2FjdHVhbF9zaXplID0gbmV3X3NpemU7CisgICAgICBtX2FfZW50cmllcyA9IG5ld19lbnRyaWVzOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeyB9CisKKyAgbV9zaXplID0gMDsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9hdChlbnRyeV9wb2ludGVyIGFfZW50cmllcywgc2l6ZV90eXBlIGksIGZhbHNlX3R5cGUpCit7CisgIGFfZW50cmllc1tpXS0+fnZhbHVlX3R5cGUoKTsKKyAgc192YWx1ZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShhX2VudHJpZXNbaV0sIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfYXQoZW50cnlfcG9pbnRlciwgc2l6ZV90eXBlLCB0cnVlX3R5cGUpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citwb3AoKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFlbXB0eSgpKTsKKworICBwb3BfaGVhcCgpOworICBlcmFzZV9hdChtX2FfZW50cmllcywgbV9zaXplIC0gMSwgc19ub190aHJvd19jb3BpZXNfaW5kKTsKKyAgcmVzaXplX2Zvcl9lcmFzZV9pZl9uZWVkZWQoKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICAtLW1fc2l6ZTsKKworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorCisgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfcHJlZDx2YWx1ZV90eXBlLCBQcmVkLCBfQWxsb2MsIHNpbXBsZV92YWx1ZT46OnR5cGUKKyAgICBwcmVkX3Q7CisKKyAgY29uc3Qgc2l6ZV90eXBlIGxlZnQgPSBwYXJ0aXRpb24ocHJlZF90KHByZWQpKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+PSBsZWZ0KTsKKyAgY29uc3Qgc2l6ZV90eXBlIGVyc2QgPSBtX3NpemUgLSBsZWZ0OworICBmb3IgKHNpemVfdHlwZSBpID0gbGVmdDsgaSA8IG1fc2l6ZTsgKytpKQorICAgIGVyYXNlX2F0KG1fYV9lbnRyaWVzLCBpLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworCisgIF9fdHJ5CisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIG5ld19zaXplID0KKwlyZXNpemVfcG9saWN5OjpnZXRfbmV3X3NpemVfZm9yX2FyYml0cmFyeShsZWZ0KTsKKworICAgICAgZW50cnlfcG9pbnRlciBuZXdfZW50cmllcyA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKG5ld19zaXplKTsKKyAgICAgIHN0ZDo6Y29weShtX2FfZW50cmllcywgbV9hX2VudHJpZXMgKyBsZWZ0LCBuZXdfZW50cmllcyk7CisgICAgICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKKyAgICAgIG1fYWN0dWFsX3NpemUgPSBuZXdfc2l6ZTsKKyAgICAgIHJlc2l6ZV9wb2xpY3k6Om5vdGlmeV9hcmJpdHJhcnkobV9hY3R1YWxfc2l6ZSk7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7IH07CisKKyAgbV9zaXplID0gbGVmdDsKKyAgbWFrZV9oZWFwKCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZXR1cm4gZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShwb2ludF9pdGVyYXRvciBpdCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghZW1wdHkoKSk7CisKKyAgY29uc3Qgc2l6ZV90eXBlIGZpeF9wb3MgPSBpdC5tX3BfZSAtIG1fYV9lbnRyaWVzOworICBzdGQ6OnN3YXAoKml0Lm1fcF9lLCBtX2FfZW50cmllc1ttX3NpemUgLSAxXSk7CisgIGVyYXNlX2F0KG1fYV9lbnRyaWVzLCBtX3NpemUgLSAxLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworICByZXNpemVfZm9yX2VyYXNlX2lmX25lZWRlZCgpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3NpemUgPiAwKTsKKyAgLS1tX3NpemU7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChmaXhfcG9zIDw9IG1fc2l6ZSk7CisKKyAgaWYgKGZpeF9wb3MgIT0gbV9zaXplKQorICAgIGZpeChtX2FfZW50cmllcyArIGZpeF9wb3MpOworCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3Jlc2l6ZV9mb3JfZXJhc2VfaWZfbmVlZGVkKCkKK3sKKyAgaWYgKCFyZXNpemVfcG9saWN5OjpyZXNpemVfbmVlZGVkX2Zvcl9zaHJpbmsobV9zaXplKSkKKyAgICByZXR1cm47CisKKyAgX190cnkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgbmV3X3NpemUgPSByZXNpemVfcG9saWN5OjpnZXRfbmV3X3NpemVfZm9yX3NocmluaygpOworICAgICAgZW50cnlfcG9pbnRlciBuZXdfZW50cmllcyA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKG5ld19zaXplKTsKKyAgICAgIHJlc2l6ZV9wb2xpY3k6Om5vdGlmeV9zaHJpbmtfcmVzaXplKCk7CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3NpemUgPiAwKTsKKyAgICAgIHN0ZDo6Y29weShtX2FfZW50cmllcywgbV9hX2VudHJpZXMgKyBtX3NpemUgLSAxLCBuZXdfZW50cmllcyk7CisgICAgICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKKyAgICAgIG1fYWN0dWFsX3NpemUgPSBuZXdfc2l6ZTsKKyAgICAgIG1fYV9lbnRyaWVzID0gbmV3X2VudHJpZXM7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7IH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitwYXJ0aXRpb24oUHJlZCBwcmVkKQoreworICBzaXplX3R5cGUgbGVmdCA9IDA7CisgIHNpemVfdHlwZSByaWdodCA9IG1fc2l6ZSAtIDE7CisKKyAgd2hpbGUgKHJpZ2h0ICsgMSAhPSBsZWZ0KQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChsZWZ0IDw9IG1fc2l6ZSk7CisKKyAgICAgIGlmICghcHJlZChtX2FfZW50cmllc1tsZWZ0XSkpCisJKytsZWZ0OworICAgICAgZWxzZSBpZiAocHJlZChtX2FfZW50cmllc1tyaWdodF0pKQorCS0tcmlnaHQ7CisgICAgICBlbHNlCisJeworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGxlZnQgPCByaWdodCk7CisJICBzdGQ6OnN3YXAobV9hX2VudHJpZXNbbGVmdF0sIG1fYV9lbnRyaWVzW3JpZ2h0XSk7CisJICArK2xlZnQ7CisJICAtLXJpZ2h0OworCX0KKyAgICB9CisKKyAgcmV0dXJuIGxlZnQ7Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2ZpbmRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2ZpbmRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzMGUzYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDc5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9yZWZlcmVuY2UKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RvcCgpIGNvbnN0Cit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWVtcHR5KCkpOworICByZXR1cm4gdG9wX2ltcChzX25vX3Rocm93X2NvcGllc19pbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9yZWZlcmVuY2UKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RvcF9pbXAodHJ1ZV90eXBlKSBjb25zdAoreyByZXR1cm4gKm1fYV9lbnRyaWVzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3JlZmVyZW5jZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgordG9wX2ltcChmYWxzZV90eXBlKSBjb25zdAoreyByZXR1cm4gKiptX2FfZW50cmllczsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRfY2hpbGQoc2l6ZV90eXBlIGkpCit7IHJldHVybiBpICogMiArIDE7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CityaWdodF9jaGlsZChzaXplX3R5cGUgaSkKK3sgcmV0dXJuIGkgKiAyICsgMjsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3BhcmVudChzaXplX3R5cGUgaSkKK3sgcmV0dXJuIChpIC0gMSkgLyAyOyB9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2luZm9fZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2luZm9fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlOWZhNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaW5mb19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy9pbmZvX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VtcHR5KCkgY29uc3QKK3sgcmV0dXJuIG1fc2l6ZSA9PSAwOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBtX3NpemU7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBzX2VudHJ5X2FsbG9jYXRvci5tYXhfc2l6ZSgpOyB9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlZjRlMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTc0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJpbmFyeV9oZWFwLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitwdXNoKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGluc2VydF92YWx1ZShyX3ZhbCwgc19ub190aHJvd19jb3BpZXNfaW5kKTsKKyAgcHVzaF9oZWFwKCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZXR1cm4gcG9pbnRfaXRlcmF0b3IobV9hX2VudHJpZXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF92YWx1ZSh2YWx1ZV90eXBlIHZhbCwgdHJ1ZV90eXBlKQoreworICByZXNpemVfZm9yX2luc2VydF9pZl9uZWVkZWQoKTsKKyAgbV9hX2VudHJpZXNbbV9zaXplKytdID0gdmFsOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF92YWx1ZShjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpCit7CisgIHJlc2l6ZV9mb3JfaW5zZXJ0X2lmX25lZWRlZCgpOworICBwb2ludGVyIHBfbmV3ID0gc192YWx1ZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7CisgIGNvbmRfZGVhbHRvcl90IGNvbmQocF9uZXcpOworICBuZXcgKHBfbmV3KSB2YWx1ZV90eXBlKHJfdmFsKTsKKyAgY29uZC5zZXRfbm9fYWN0aW9uKCk7CisgIG1fYV9lbnRyaWVzW21fc2l6ZSsrXSA9IHBfbmV3OworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3Jlc2l6ZV9mb3JfaW5zZXJ0X2lmX25lZWRlZCgpCit7CisgIGlmICghcmVzaXplX3BvbGljeTo6cmVzaXplX25lZWRlZF9mb3JfZ3JvdyhtX3NpemUpKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3NpemUgPCBtX2FjdHVhbF9zaXplKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgY29uc3Qgc2l6ZV90eXBlIG5ld19zaXplID0gcmVzaXplX3BvbGljeTo6Z2V0X25ld19zaXplX2Zvcl9ncm93KCk7CisgIGVudHJ5X3BvaW50ZXIgbmV3X2VudHJpZXMgPSBzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShuZXdfc2l6ZSk7CisgIHJlc2l6ZV9wb2xpY3k6Om5vdGlmeV9ncm93X3Jlc2l6ZSgpOworCisgIHN0ZDo6Y29weShtX2FfZW50cmllcywgbV9hX2VudHJpZXMgKyBtX3NpemUsIG5ld19lbnRyaWVzKTsKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX2FfZW50cmllcywgbV9hY3R1YWxfc2l6ZSk7CisgIG1fYWN0dWFsX3NpemUgPSBuZXdfc2l6ZTsKKyAgbV9hX2VudHJpZXMgPSBuZXdfZW50cmllczsKKyAgbWFrZV9oZWFwKCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cittb2RpZnkocG9pbnRfaXRlcmF0b3IgaXQsIGNvbnN0X3JlZmVyZW5jZSByX25ld192YWwpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBzd2FwX3ZhbHVlX2ltcChpdC5tX3BfZSwgcl9uZXdfdmFsLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworICBmaXgoaXQubV9wX2UpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGlzX2hlYXAoKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitmaXgoZW50cnlfcG9pbnRlciBwX2UpCit7CisgIHNpemVfdHlwZSBpID0gcF9lIC0gbV9hX2VudHJpZXM7CisgIGlmIChpID4gMCAmJiBlbnRyeV9jbXA6Om9wZXJhdG9yKCkobV9hX2VudHJpZXNbcGFyZW50KGkpXSwgbV9hX2VudHJpZXNbaV0pKQorICAgIHsKKyAgICAgIHNpemVfdHlwZSBwYXJlbnRfaSA9IHBhcmVudChpKTsKKyAgICAgIHdoaWxlIChpID4gMAorCSAgICAgJiYgZW50cnlfY21wOjpvcGVyYXRvcigpKG1fYV9lbnRyaWVzW3BhcmVudF9pXSwgbV9hX2VudHJpZXNbaV0pKQorCXsKKwkgIHN0ZDo6c3dhcChtX2FfZW50cmllc1tpXSwgbV9hX2VudHJpZXNbcGFyZW50X2ldKTsKKwkgIGkgPSBwYXJlbnRfaTsKKwkgIHBhcmVudF9pID0gcGFyZW50KGkpOworCX0KKworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICByZXR1cm47CisgICAgfQorCisgIHdoaWxlIChpIDwgbV9zaXplKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBsY2hpbGRfaSA9IGxlZnRfY2hpbGQoaSk7CisgICAgICBjb25zdCBzaXplX3R5cGUgcmNoaWxkX2kgPSByaWdodF9jaGlsZChpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChyY2hpbGRfaSA+IGxjaGlsZF9pKTsKKworICAgICAgY29uc3QgYm9vbCBzbWFsbGVyX3RoYW5fbGNoaWxkID0gbGNoaWxkX2kgPCBtX3NpemUgJiYKKwllbnRyeV9jbXA6Om9wZXJhdG9yKCkobV9hX2VudHJpZXNbaV0sIG1fYV9lbnRyaWVzW2xjaGlsZF9pXSk7CisKKyAgICAgIGNvbnN0IGJvb2wgc21hbGxlcl90aGFuX3JjaGlsZCA9IHJjaGlsZF9pIDwgbV9zaXplICYmCisJZW50cnlfY21wOjpvcGVyYXRvcigpKG1fYV9lbnRyaWVzW2ldLCBtX2FfZW50cmllc1tyY2hpbGRfaV0pOworCisgICAgICBjb25zdCBib29sIHN3YXBfd2l0aF9yY2hpbGQgPSBzbWFsbGVyX3RoYW5fcmNoaWxkICYmICghc21hbGxlcl90aGFuX2xjaGlsZCB8fCBlbnRyeV9jbXA6Om9wZXJhdG9yKCkobV9hX2VudHJpZXNbbGNoaWxkX2ldLCBtX2FfZW50cmllc1tyY2hpbGRfaV0pKTsKKworICAgICAgY29uc3QgYm9vbCBzd2FwX3dpdGhfbGNoaWxkID0gIXN3YXBfd2l0aF9yY2hpbGQgJiYgc21hbGxlcl90aGFuX2xjaGlsZDsKKworICAgICAgaWYgKHN3YXBfd2l0aF9sY2hpbGQpCisJeworCSAgc3RkOjpzd2FwKG1fYV9lbnRyaWVzW2ldLCBtX2FfZW50cmllc1tsY2hpbGRfaV0pOworCSAgaSA9IGxjaGlsZF9pOworCX0KKyAgICAgIGVsc2UgaWYgKHN3YXBfd2l0aF9yY2hpbGQpCisJeworCSAgc3RkOjpzd2FwKG1fYV9lbnRyaWVzW2ldLCBtX2FfZW50cmllc1tyY2hpbGRfaV0pOworCSAgaSA9IHJjaGlsZF9pOworCX0KKyAgICAgIGVsc2UKKwlpID0gbV9zaXplOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwX3ZhbHVlX2ltcChlbnRyeV9wb2ludGVyIHBfZSwgdmFsdWVfdHlwZSBuZXdfdmFsLCB0cnVlX3R5cGUpCit7ICpwX2UgPSBuZXdfdmFsOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcF92YWx1ZV9pbXAoZW50cnlfcG9pbnRlciBwX2UsIGNvbnN0X3JlZmVyZW5jZSByX25ld192YWwsIGZhbHNlX3R5cGUpCit7CisgIHZhbHVlX3R5cGUgdG1wKHJfbmV3X3ZhbCk7CisgICgqcF9lKS0+c3dhcCh0bXApOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDAzMmM4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw2NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5hcnlfaGVhcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW4oKQoreyByZXR1cm4gaXRlcmF0b3IobV9hX2VudHJpZXMpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpIGNvbnN0Cit7IHJldHVybiBjb25zdF9pdGVyYXRvcihtX2FfZW50cmllcyk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VuZCgpCit7IHJldHVybiBpdGVyYXRvcihtX2FfZW50cmllcyArIG1fc2l6ZSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VuZCgpIGNvbnN0Cit7IHJldHVybiBjb25zdF9pdGVyYXRvcihtX2FfZW50cmllcyArIG1fc2l6ZSk7IH0KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9wb2ludF9jb25zdF9pdGVyYXRvci5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3BvaW50X2NvbnN0X2l0ZXJhdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmMzNjBmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9wb2ludF9jb25zdF9pdGVyYXRvci5ocHAKQEAgLTAsMCArMSwxNDQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluYXJ5X2hlYXBfL3BvaW50X2NvbnN0X2l0ZXJhdG9yLmhwcAorICogQ29udGFpbnMgYW4gaXRlcmF0b3IgY2xhc3MgcmV0dXJuZWQgYnkgdGhlIHRhYmxlJ3MgY29uc3QgZmluZCBhbmQgaW5zZXJ0CisgKiBtZXRob2RzLgorICovCisKKyNpZm5kZWYgUEJfRFNfQklOQVJZX0hFQVBfQ09OU1RfRklORF9JVEVSQVRPUl9IUFAKKyNkZWZpbmUgUEJfRFNfQklOQVJZX0hFQVBfQ09OU1RfRklORF9JVEVSQVRPUl9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gQ29uc3QgcG9pbnQtdHlwZSBpdGVyYXRvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBFbnRyeSwgYm9vbCBTaW1wbGUsIAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGJpbmFyeV9oZWFwX3BvaW50X2NvbnN0X2l0ZXJhdG9yXworICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPEVudHJ5Pjo6b3RoZXI6OnBvaW50ZXIgZW50cnlfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBDYXRlZ29yeS4KKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIC8vLyBEaWZmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIHRyaXZpYWxfaXRlcmF0b3JfZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KKyAgICAgIHR5cGVkZWYgVmFsdWVfVHlwZSB2YWx1ZV90eXBlOworCisgICAgICAvLy8gSXRlcmF0b3IncyBwb2ludGVyIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPHZhbHVlX3R5cGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgcG9pbnRlcjsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgY29uc3QgcG9pbnRlciB0eXBlLgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICAvLy8gSXRlcmF0b3IncyByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPHZhbHVlX3R5cGU+OjpvdGhlcjo6cmVmZXJlbmNlCisgICAgICByZWZlcmVuY2U7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIGNvbnN0IHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgaW5saW5lCisgICAgICBiaW5hcnlfaGVhcF9wb2ludF9jb25zdF9pdGVyYXRvcl8oZW50cnlfcG9pbnRlciBwX2UpIDogbV9wX2UocF9lKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgaW5saW5lCisgICAgICBiaW5hcnlfaGVhcF9wb2ludF9jb25zdF9pdGVyYXRvcl8oKSA6IG1fcF9lKDApIHsgfQorCisgICAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgICAgIGlubGluZQorICAgICAgYmluYXJ5X2hlYXBfcG9pbnRfY29uc3RfaXRlcmF0b3JfKGNvbnN0IGJpbmFyeV9oZWFwX3BvaW50X2NvbnN0X2l0ZXJhdG9yXyYgb3RoZXIpCisgICAgICA6IG1fcF9lKG90aGVyLm1fcF9lKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBBY2Nlc3MuCisgICAgICBpbmxpbmUgY29uc3RfcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9lICE9IDApOworCXJldHVybiB0b19wdHIoaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBTaW1wbGU+KCkpOworICAgICAgfQorCisgICAgICAvLy8gQWNjZXNzLgorICAgICAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX2UgIT0gMCk7CisJcmV0dXJuICp0b19wdHIoaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBTaW1wbGU+KCkpOworICAgICAgfQorCisgICAgICAvLy8gQ29tcGFyZXMgY29udGVudCB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBiaW5hcnlfaGVhcF9wb2ludF9jb25zdF9pdGVyYXRvcl8mIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX2UgPT0gb3RoZXIubV9wX2U7IH0KKworICAgICAgLy8vIENvbXBhcmVzIGNvbnRlbnQgKG5lZ2F0aXZlbHkpIHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IGJpbmFyeV9oZWFwX3BvaW50X2NvbnN0X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3BfZSAhPSBvdGhlci5tX3BfZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGlubGluZSBjb25zdF9wb2ludGVyCisgICAgICB0b19wdHIodHJ1ZV90eXBlKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX2U7IH0KKworICAgICAgaW5saW5lIGNvbnN0X3BvaW50ZXIKKyAgICAgIHRvX3B0cihmYWxzZV90eXBlKSBjb25zdAorICAgICAgeyByZXR1cm4gKm1fcF9lOyB9CisKKyAgICBwdWJsaWM6CisgICAgICBlbnRyeV9wb2ludGVyIG1fcF9lOworICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlMTBlMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiaW5hcnlfaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworQ21wX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jbXBfZm4oKQoreworICByZXR1cm4gKCp0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IENtcF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfY21wX2ZuKCkgY29uc3QKK3sKKyAgcmV0dXJuICgqdGhpcyk7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vcmVzaXplX3BvbGljeS5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3Jlc2l6ZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZTMyN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3Jlc2l6ZV9wb2xpY3kuaHBwCkBAIC0wLDAgKzEsMjQwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy9yZXNpemVfcG9saWN5LmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5X2hlYXAuCisgKi8KKworI2lmbmRlZiBQQl9EU19CSU5BUllfSEVBUF9SRVNJWkVfUE9MSUNZX0hQUAorI2RlZmluZSBQQl9EU19CSU5BUllfSEVBUF9SRVNJWkVfUE9MSUNZX0hQUAorCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLy8vIFJlc2l6ZSBwb2xpY3kgZm9yIGJpbmFyeSBoZWFwLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyByZXNpemVfcG9saWN5CisgICAgeworICAgIHByaXZhdGU6CisgICAgICBlbnVtCisJeworCSAgcmF0aW8gPSA4LAorCSAgZmFjdG9yID0gMgorCX07CisKKyAgICAgIC8vLyBOZXh0IHNocmluayBzaXplLgorICAgICAgX1RwIAkJbV9zaHJpbmtfc2l6ZTsKKworICAgICAgLy8vIE5leHQgZ3JvdyBzaXplLgorICAgICAgX1RwIAkJbV9ncm93X3NpemU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcAlzaXplX3R5cGU7CisKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAJbWluX3NpemUgPSAxNjsKKworICAgICAgcmVzaXplX3BvbGljeSgpIDogbV9zaHJpbmtfc2l6ZSgwKSwgbV9ncm93X3NpemUobWluX3NpemUpCisgICAgICB7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKKyAgICAgIHJlc2l6ZV9wb2xpY3koY29uc3QgcmVzaXplX3BvbGljeSYgb3RoZXIpCisgICAgICA6IG1fc2hyaW5rX3NpemUob3RoZXIubV9zaHJpbmtfc2l6ZSksIG1fZ3Jvd19zaXplKG90aGVyLm1fZ3Jvd19zaXplKQorICAgICAgeyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc3dhcChyZXNpemVfcG9saWN5PF9UcD4mKTsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIHJlc2l6ZV9uZWVkZWRfZm9yX2dyb3coc2l6ZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIHJlc2l6ZV9uZWVkZWRfZm9yX3NocmluayhzaXplX3R5cGUpIGNvbnN0OworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZ3Jvd19uZWVkZWQoc2l6ZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIHNocmlua19uZWVkZWQoc2l6ZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZ2V0X25ld19zaXplX2Zvcl9ncm93KCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIGdldF9uZXdfc2l6ZV9mb3Jfc2hyaW5rKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIGdldF9uZXdfc2l6ZV9mb3JfYXJiaXRyYXJ5KHNpemVfdHlwZSkgY29uc3Q7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBub3RpZnlfZ3Jvd19yZXNpemUoKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIG5vdGlmeV9zaHJpbmtfcmVzaXplKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIG5vdGlmeV9hcmJpdHJhcnkoc2l6ZV90eXBlKTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX0JJTkFSWV9IRUFQX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdDsKKyNlbmRpZgorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBjb25zdCBfVHAgcmVzaXplX3BvbGljeTxfVHA+OjptaW5fc2l6ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHJlc2l6ZV9wb2xpY3k8X1RwPjo6CisgICAgc3dhcChyZXNpemVfcG9saWN5PF9UcD4mIG90aGVyKQorICAgIHsKKyAgICAgIHN0ZDo6c3dhcChtX3Nocmlua19zaXplLCBvdGhlci5tX3Nocmlua19zaXplKTsKKyAgICAgIHN0ZDo6c3dhcChtX2dyb3dfc2l6ZSwgb3RoZXIubV9ncm93X3NpemUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlc2l6ZV9wb2xpY3k8X1RwPjo6CisgICAgcmVzaXplX25lZWRlZF9mb3JfZ3JvdyhzaXplX3R5cGUgc2l6ZSkgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc2l6ZSA8PSBtX2dyb3dfc2l6ZSk7CisgICAgICByZXR1cm4gc2l6ZSA9PSBtX2dyb3dfc2l6ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICByZXNpemVfcG9saWN5PF9UcD46OgorICAgIHJlc2l6ZV9uZWVkZWRfZm9yX3NocmluayhzaXplX3R5cGUgc2l6ZSkgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc2l6ZSA8PSBtX2dyb3dfc2l6ZSk7CisgICAgICByZXR1cm4gc2l6ZSA9PSBtX3Nocmlua19zaXplOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgcmVzaXplX3BvbGljeTxfVHA+OjpzaXplX3R5cGUKKyAgICByZXNpemVfcG9saWN5PF9UcD46OgorICAgIGdldF9uZXdfc2l6ZV9mb3JfZ3JvdygpIGNvbnN0CisgICAgeyByZXR1cm4gbV9ncm93X3NpemUgKiBmYWN0b3I7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgcmVzaXplX3BvbGljeTxfVHA+OjpzaXplX3R5cGUKKyAgICByZXNpemVfcG9saWN5PF9UcD46OgorICAgIGdldF9uZXdfc2l6ZV9mb3Jfc2hyaW5rKCkgY29uc3QKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgaGFsZl9zaXplID0gbV9ncm93X3NpemUgLyBmYWN0b3I7CisgICAgICByZXR1cm4gc3RkOjptYXgobWluX3NpemUsIGhhbGZfc2l6ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSByZXNpemVfcG9saWN5PF9UcD46OnNpemVfdHlwZQorICAgIHJlc2l6ZV9wb2xpY3k8X1RwPjo6CisgICAgZ2V0X25ld19zaXplX2Zvcl9hcmJpdHJhcnkoc2l6ZV90eXBlIHNpemUpIGNvbnN0CisgICAgeworICAgICAgc2l6ZV90eXBlIHJldCA9IG1pbl9zaXplOworICAgICAgd2hpbGUgKHJldCA8IHNpemUpCisJcmV0ICo9IGZhY3RvcjsKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgcmVzaXplX3BvbGljeTxfVHA+OjoKKyAgICBub3RpZnlfZ3Jvd19yZXNpemUoKQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fZ3Jvd19zaXplID49IG1pbl9zaXplKTsKKyAgICAgIG1fZ3Jvd19zaXplICo9IGZhY3RvcjsKKyAgICAgIG1fc2hyaW5rX3NpemUgPSBtX2dyb3dfc2l6ZSAvIHJhdGlvOworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgcmVzaXplX3BvbGljeTxfVHA+OjoKKyAgICBub3RpZnlfc2hyaW5rX3Jlc2l6ZSgpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBtX3Nocmlua19zaXplIC89IGZhY3RvcjsKKyAgICAgIGlmIChtX3Nocmlua19zaXplID09IDEpCisJbV9zaHJpbmtfc2l6ZSA9IDA7CisgICAgICBtX2dyb3dfc2l6ZSA9IHN0ZDo6bWF4KG1fZ3Jvd19zaXplIC8gZmFjdG9yLCBtaW5fc2l6ZSk7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICByZXNpemVfcG9saWN5PF9UcD46OgorICAgIG5vdGlmeV9hcmJpdHJhcnkoc2l6ZV90eXBlIGFjdHVhbF9zaXplKQorICAgIHsKKyAgICAgIG1fZ3Jvd19zaXplID0gYWN0dWFsX3NpemU7CisgICAgICBtX3Nocmlua19zaXplID0gbV9ncm93X3NpemUgLyByYXRpbzsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICByZXNpemVfcG9saWN5PF9UcD46OgorICAgIGFzc2VydF92YWxpZChjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0CisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKG1fc2hyaW5rX3NpemUgPT0gMAorCQkJIHx8IG1fc2hyaW5rX3NpemUgKiByYXRpbyA9PSBtX2dyb3dfc2l6ZSk7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkobV9ncm93X3NpemUgPj0gbWluX3NpemUpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgUEJfRFNfQklOQVJZX0hFQVBfVFJBQ0VfCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICByZXNpemVfcG9saWN5PF9UcD46OgorICAgIHRyYWNlKCkgY29uc3QKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgInNocmluayA9ICIgPDwgbV9zaHJpbmtfc2l6ZQorCQk8PCAiIGdyb3cgPSAiIDw8IG1fZ3Jvd19zaXplIDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzE2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNjAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmluYXJ5X2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJpbmFyeV9oZWFwLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXQoUHJlZCBwcmVkLCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorCisgIHR5cGVkZWYKKyAgICB0eXBlbmFtZSBlbnRyeV9wcmVkPHZhbHVlX3R5cGUsIFByZWQsIF9BbGxvYywgc2ltcGxlX3ZhbHVlPjo6dHlwZQorICAgIHByZWRfdDsKKworICBjb25zdCBzaXplX3R5cGUgbGVmdCA9IHBhcnRpdGlvbihwcmVkX3QocHJlZCkpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID49IGxlZnQpOworCisgIGNvbnN0IHNpemVfdHlwZSBlcnNkID0gbV9zaXplIC0gbGVmdDsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+PSBlcnNkKTsKKworICBjb25zdCBzaXplX3R5cGUgbmV3X3NpemUgPSByZXNpemVfcG9saWN5OjpnZXRfbmV3X3NpemVfZm9yX2FyYml0cmFyeShsZWZ0KTsKKyAgY29uc3Qgc2l6ZV90eXBlIG90aGVyX2FjdHVhbF9zaXplID0gb3RoZXIuZ2V0X25ld19zaXplX2Zvcl9hcmJpdHJhcnkoZXJzZCk7CisKKyAgZW50cnlfcG9pbnRlciBhX2VudHJpZXMgPSAwOworICBlbnRyeV9wb2ludGVyIGFfb3RoZXJfZW50cmllcyA9IDA7CisKKyAgX190cnkKKyAgICB7CisgICAgICBhX2VudHJpZXMgPSBzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShuZXdfc2l6ZSk7CisgICAgICBhX290aGVyX2VudHJpZXMgPSBzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShvdGhlcl9hY3R1YWxfc2l6ZSk7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7CisgICAgICBpZiAoYV9lbnRyaWVzICE9IDApCisJc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShhX2VudHJpZXMsIG5ld19zaXplKTsKKworICAgICAgaWYgKGFfb3RoZXJfZW50cmllcyAhPSAwKQorCXNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUoYV9vdGhlcl9lbnRyaWVzLCBvdGhlcl9hY3R1YWxfc2l6ZSk7CisKKyAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgIH07CisKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBvdGhlci5tX3NpemU7ICsraSkKKyAgICBlcmFzZV9hdChvdGhlci5tX2FfZW50cmllcywgaSwgc19ub190aHJvd19jb3BpZXNfaW5kKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobmV3X3NpemUgPj0gbGVmdCk7CisgIHN0ZDo6Y29weShtX2FfZW50cmllcywgbV9hX2VudHJpZXMgKyBsZWZ0LCBhX2VudHJpZXMpOworICBzdGQ6OmNvcHkobV9hX2VudHJpZXMgKyBsZWZ0LCBtX2FfZW50cmllcyArIG1fc2l6ZSwgYV9vdGhlcl9lbnRyaWVzKTsKKworICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShvdGhlci5tX2FfZW50cmllcywgb3RoZXIubV9hY3R1YWxfc2l6ZSk7CisKKyAgbV9hY3R1YWxfc2l6ZSA9IG5ld19zaXplOworICBvdGhlci5tX2FjdHVhbF9zaXplID0gb3RoZXJfYWN0dWFsX3NpemU7CisKKyAgbV9zaXplID0gbGVmdDsKKyAgb3RoZXIubV9zaXplID0gZXJzZDsKKworICBtX2FfZW50cmllcyA9IGFfZW50cmllczsKKyAgb3RoZXIubV9hX2VudHJpZXMgPSBhX290aGVyX2VudHJpZXM7CisKKyAgbWFrZV9oZWFwKCk7CisgIG90aGVyLm1ha2VfaGVhcCgpOworCisgIHJlc2l6ZV9wb2xpY3k6Om5vdGlmeV9hcmJpdHJhcnkobV9hY3R1YWxfc2l6ZSk7CisgIG90aGVyLm5vdGlmeV9hcmJpdHJhcnkob3RoZXIubV9hY3R1YWxfc2l6ZSk7CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKworICBjb25zdCBzaXplX3R5cGUgbGVuID0gbV9zaXplICsgb3RoZXIubV9zaXplOworICBjb25zdCBzaXplX3R5cGUgbmV3X3NpemUgPSByZXNpemVfcG9saWN5OjpnZXRfbmV3X3NpemVfZm9yX2FyYml0cmFyeShsZW4pOworCisgIGVudHJ5X3BvaW50ZXIgYV9lbnRyaWVzID0gMDsKKyAgZW50cnlfcG9pbnRlciBhX290aGVyX2VudHJpZXMgPSAwOworCisgIF9fdHJ5CisgICAgeworICAgICAgYV9lbnRyaWVzID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobmV3X3NpemUpOworICAgICAgYV9vdGhlcl9lbnRyaWVzID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUocmVzaXplX3BvbGljeTo6bWluX3NpemUpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgaWYgKGFfZW50cmllcyAhPSAwKQorCXNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUoYV9lbnRyaWVzLCBuZXdfc2l6ZSk7CisKKyAgICAgIGlmIChhX290aGVyX2VudHJpZXMgIT0gMCkKKwlzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKGFfb3RoZXJfZW50cmllcywgcmVzaXplX3BvbGljeTo6bWluX3NpemUpOworCisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgc3RkOjpjb3B5KG1fYV9lbnRyaWVzLCBtX2FfZW50cmllcyArIG1fc2l6ZSwgYV9lbnRyaWVzKTsKKyAgc3RkOjpjb3B5KG90aGVyLm1fYV9lbnRyaWVzLCBvdGhlci5tX2FfZW50cmllcyArIG90aGVyLm1fc2l6ZSwKKwkgICAgYV9lbnRyaWVzICsgbV9zaXplKTsKKworICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fYV9lbnRyaWVzLCBtX2FjdHVhbF9zaXplKTsKKyAgbV9hX2VudHJpZXMgPSBhX2VudHJpZXM7CisgIG1fc2l6ZSA9IGxlbjsKKyAgbV9hY3R1YWxfc2l6ZSA9IG5ld19zaXplOworICByZXNpemVfcG9saWN5Ojpub3RpZnlfYXJiaXRyYXJ5KG5ld19zaXplKTsKKyAgbWFrZV9oZWFwKCk7CisKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShvdGhlci5tX2FfZW50cmllcywgb3RoZXIubV9hY3R1YWxfc2l6ZSk7CisgIG90aGVyLm1fYV9lbnRyaWVzID0gYV9vdGhlcl9lbnRyaWVzOworICBvdGhlci5tX3NpemUgPSAwOworICBvdGhlci5tX2FjdHVhbF9zaXplID0gcmVzaXplX3BvbGljeTo6bWluX3NpemU7CisgIG90aGVyLm5vdGlmeV9hcmJpdHJhcnkocmVzaXplX3BvbGljeTo6bWluX3NpemUpOworICBvdGhlci5tYWtlX2hlYXAoKTsKKyAgCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmluYXJ5X2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTBkNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JpbmFyeV9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDc4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbmFyeV9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmluYXJ5X2hlYXAuCisgKi8KKworI2lmZGVmIFBCX0RTX0JJTkFSWV9IRUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBzdGQ6OmNlcnIgPDwgdGhpcyA8PCBzdGQ6OmVuZGw7CisKKyAgc3RkOjpjZXJyIDw8IG1fYV9lbnRyaWVzIDw8IHN0ZDo6ZW5kbDsKKworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgIHRyYWNlX2VudHJ5KG1fYV9lbnRyaWVzW2ldLCBzX25vX3Rocm93X2NvcGllc19pbmQpOworCisgIHN0ZDo6Y2VyciA8PCBzdGQ6OmVuZGw7CisKKyAgc3RkOjpjZXJyIDw8ICJzaXplID0gIiA8PCBtX3NpemUgPDwgIiAiIDw8ICJhY3R1YWxfc2l6ZSA9ICIgPDwgbV9hY3R1YWxfc2l6ZSA8PCBzdGQ6OmVuZGw7CisKKyAgcmVzaXplX3BvbGljeTo6dHJhY2UoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX2VudHJ5KGNvbnN0IGVudHJ5JiByX2UsIGZhbHNlX3R5cGUpIGNvbnN0Cit7CisgIHN0ZDo6Y291dCA8PCByX2UgPDwgIiAiIDw8KiByX2UgPDwgc3RkOjplbmRsOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2VfZW50cnkoY29uc3QgZW50cnkmIHJfZSwgdHJ1ZV90eXBlKSBjb25zdAoreworICBzdGQ6OmNvdXQgPDwgcl9lIDw8IHN0ZDo6ZW5kbDsKK30KKworI2VuZGlmIC8vICNpZmRlZiBQQl9EU19CSU5BUllfSEVBUF9UUkFDRV8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9iaW5vbWlhbF9oZWFwXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF8vYmlub21pYWxfaGVhcF8uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZDJlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF8vYmlub21pYWxfaGVhcF8uaHBwCkBAIC0wLDAgKzEsMTEyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbm9taWFsX2hlYXBfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmlub21pYWwgaGVhcC4KKyAqLworCisvKgorICogQmlub21pYWwgaGVhcC4KKyAqIFZ1aWxsZW1pbiBKIGlzIHRoZSBtYXN0YWguCisgKiBNb2RpZmllZCBmcm9tIENMUlMuCisgKi8KKworI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2Jpbm9taWFsX2hlYXBfYmFzZV8uaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBiaW5vbWlhbF9oZWFwPFZhbHVlX1R5cGUsIENtcF9GbiwgX0FsbG9jPgorCisgICAgLyoqCisgICAgICogIEJpbm9taWFsIGhlYXAuCisgICAgICoKKyAgICAgKiAgQGluZ3JvdXAgaGVhcC1kZXRhaWwKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBiaW5vbWlhbF9oZWFwCisgICAgOiBwdWJsaWMgYmlub21pYWxfaGVhcF9iYXNlPFZhbHVlX1R5cGUsIENtcF9GbiwgX0FsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBiaW5vbWlhbF9oZWFwX2Jhc2U8VmFsdWVfVHlwZSwgQ21wX0ZuLCBfQWxsb2M+IAliYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZV9wb2ludGVyIAkJbm9kZV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfY29uc3RfcG9pbnRlciAJbm9kZV9jb25zdF9wb2ludGVyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIAkJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSAJCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgCQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRlciAJCXBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpyZWZlcmVuY2UgCQlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRfY29uc3RfaXRlcmF0b3IgCXBvaW50X2NvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50X2l0ZXJhdG9yIAlwb2ludF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciAJY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6aXRlcmF0b3IgCQlpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjbXBfZm4gCQljbXBfZm47CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6YWxsb2NhdG9yX3R5cGUgCWFsbG9jYXRvcl90eXBlOworCisgICAgICBiaW5vbWlhbF9oZWFwKCk7CisKKyAgICAgIGJpbm9taWFsX2hlYXAoY29uc3QgQ21wX0ZuJik7CisKKyAgICAgIGJpbm9taWFsX2hlYXAoY29uc3QgYmlub21pYWxfaGVhcCYpOworCisgICAgICB+Ymlub21pYWxfaGVhcCgpOworCisgICAgcHJvdGVjdGVkOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM1YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNjAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgYmlub21pYWxfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Jpbm9taWFsX2hlYXAoKQoreyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmlub21pYWxfaGVhcChjb25zdCBDbXBfRm4mIHJfY21wX2ZuKQorOiBiYXNlX3R5cGUocl9jbXBfZm4pCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitiaW5vbWlhbF9oZWFwKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKzogYmFzZV90eXBlKG90aGVyKQoreyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorfmJpbm9taWFsX2hlYXAoKSB7IH0KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmVjZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNDkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGV0YWlsL2Jpbm9taWFsX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgYmlub21pYWxfaGVhcF8uCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreyBiYXNlX3R5cGU6OmFzc2VydF92YWxpZCh0cnVlLCBfX2ZpbGUsIF9fbGluZSk7IH0KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vYmlub21pYWxfaGVhcF9iYXNlXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9iaW5vbWlhbF9oZWFwX2Jhc2VfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2U1MTQxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vYmlub21pYWxfaGVhcF9iYXNlXy5ocHAKQEAgLTAsMCArMSwyMTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmlub21pYWxfaGVhcF9iYXNlXy9iaW5vbWlhbF9oZWFwX2Jhc2VfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmFzZSBvZiBiaW5vbWlhbCBoZWFwcy4KKyAqLworCisjaWZuZGVmIFBCX0RTX0JJTk9NSUFMX0hFQVBfQkFTRV9IUFAKKyNkZWZpbmUgUEJfRFNfQklOT01JQUxfSEVBUF9CQVNFX0hQUAorCisvKgorICogQmlub21pYWwgaGVhcCBiYXNlLgorICogVnVpbGxlbWluIEogaXMgdGhlIG1hc3RhaC4KKyAqIE1vZGlmaWVkIGZyb20gQ0xSUy4KKyAqLworCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgYmlub21pYWxfaGVhcF9iYXNlPFZhbHVlX1R5cGUsIENtcF9GbiwgX0FsbG9jPgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNkZWZpbmUgUEJfRFNfQl9IRUFQX0JBU0UgXAorICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwPFZhbHVlX1R5cGUsIENtcF9GbiwgXAorCQkJCXR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlLCAgX0FsbG9jLCBmYWxzZT4KKyNlbHNlCisjZGVmaW5lIFBCX0RTX0JfSEVBUF9CQVNFIFwKKyAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcDxWYWx1ZV9UeXBlLCBDbXBfRm4sIFwKKwkJCQl0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSwgX0FsbG9jPgorI2VuZGlmCisKKyAgICAvLy8gQmFzZSBjbGFzcyBmb3IgYmlub21pYWwgaGVhcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBiaW5vbWlhbF9oZWFwX2Jhc2UKKyAgICA6IHB1YmxpYyBQQl9EU19CX0hFQVBfQkFTRQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxWYWx1ZV9UeXBlPjo6b3RoZXIgX19yZWJpbmRfdjsKKyAgICAgIHR5cGVkZWYgUEJfRFNfQl9IRUFQX0JBU0UJICAJCQliYXNlX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZSAJCQlub2RlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfcG9pbnRlciAJCW5vZGVfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlX2NvbnN0X3BvaW50ZXIgCW5vZGVfY29uc3RfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgVmFsdWVfVHlwZSAJCQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgQ21wX0ZuIAkJCQkJY21wX2ZuOworICAgICAgdHlwZWRlZiBfQWxsb2MgCQkJCQlhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIAkJZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3Y6OnBvaW50ZXIgCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92Ojpjb25zdF9wb2ludGVyIAljb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92OjpyZWZlcmVuY2UgCQlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3Y6OmNvbnN0X3JlZmVyZW5jZSAgIAljb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludF9jb25zdF9pdGVyYXRvciAJcG9pbnRfY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRfaXRlcmF0b3IgCXBvaW50X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIAljb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjppdGVyYXRvciAJCWl0ZXJhdG9yOworCisgICAgcHVibGljOgorCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIHB1c2goY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgdm9pZAorICAgICAgbW9kaWZ5KHBvaW50X2l0ZXJhdG9yLCBjb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgY29uc3RfcmVmZXJlbmNlCisgICAgICB0b3AoKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgcG9wKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKHBvaW50X2l0ZXJhdG9yKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlX2lmKFByZWQpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgdm9pZAorICAgICAgc3BsaXQoUHJlZCwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgam9pbihQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgcHJvdGVjdGVkOgorCisgICAgICBiaW5vbWlhbF9oZWFwX2Jhc2UoKTsKKworICAgICAgYmlub21pYWxfaGVhcF9iYXNlKGNvbnN0IENtcF9GbiYpOworCisgICAgICBiaW5vbWlhbF9oZWFwX2Jhc2UoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB+Ymlub21pYWxfaGVhcF9iYXNlKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX3JhbmdlKEl0LCBJdCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBmaW5kX21heCgpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZChib29sLCBjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X21heChjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgZml4KG5vZGVfcG9pbnRlcikgY29uc3Q7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBpbnNlcnRfbm9kZShub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgcmVtb3ZlX3BhcmVudGxlc3Nfbm9kZShub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBqb2luKG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyKSBjb25zdDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KG5vZGVfY29uc3RfcG9pbnRlciwgYm9vbCwgYm9vbCwKKwkJCSAgICAgY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworICAgIHByb3RlY3RlZDoKKyAgICAgIG5vZGVfcG9pbnRlciAJbV9wX21heDsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX0FTU0VSVF9WQUxJRF9DT05EKFgsIF9TdHJpY3RseUJpbm9taWFsKQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfT05MWShYLmFzc2VydF92YWxpZChfU3RyaWN0bHlCaW5vbWlhbCxfX0ZJTEVfXywgX19MSU5FX18pOykKKworI2RlZmluZSBQQl9EU19BU1NFUlRfQkFTRV9OT0RFX0NPTlNJU1RFTlQoX05vZGUsIF9Cb29sKQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OmFzc2VydF9ub2RlX2NvbnNpc3RlbnQoX05vZGUsIF9Cb29sLAlcCisJCQkJCQkJX19GSUxFX18sIF9fTElORV9fKTspCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9pbnNlcnRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQVNTRVJUX0JBU0VfTk9ERV9DT05TSVNURU5UCisjdW5kZWYgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQl9IRUFQX0JBU0UKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTIyOGRmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw4NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5vbWlhbF9oZWFwX2Jhc2VfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBiYXNlIG9mIGJpbm9taWFsIGhlYXBzLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvcHlfZnJvbV9yYW5nZShJdCBmaXJzdF9pdCwgSXQgbGFzdF9pdCkKK3sKKyAgd2hpbGUgKGZpcnN0X2l0ICE9IGxhc3RfaXQpCisgICAgcHVzaCgqKGZpcnN0X2l0KyspKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQoKCp0aGlzKSxmYWxzZSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Jpbm9taWFsX2hlYXBfYmFzZSgpIDogbV9wX21heCgwKQoreworICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLGZhbHNlKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmlub21pYWxfaGVhcF9iYXNlKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pCis6IGJhc2VfdHlwZShyX2NtcF9mbiksIG1fcF9tYXgoMCkKK3sgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQoKCp0aGlzKSxmYWxzZSkgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmlub21pYWxfaGVhcF9iYXNlKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKzogYmFzZV90eXBlKG90aGVyKSwgbV9wX21heCgwKQoreyBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLGZhbHNlKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQoKCp0aGlzKSxmYWxzZSkKKyAgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsKKyAgc3RkOjpzd2FwKG1fcF9tYXgsIG90aGVyLm1fcF9tYXgpOworICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLGZhbHNlKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorfmJpbm9taWFsX2hlYXBfYmFzZSgpCit7IH0KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxM2YyOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJpbm9taWFsX2hlYXBfYmFzZV8vZGVidWdfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJhc2Ugb2YgYmlub21pYWwgaGVhcHMuCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoYm9vbCBzdHJpY3RseV9iaW5vbWlhbCwgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBiYXNlX3R5cGU6OmFzc2VydF92YWxpZChfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQoYmFzZV90eXBlOjptX3Bfcm9vdCwgc3RyaWN0bHlfYmlub21pYWwsIHRydWUsCisJCQkgX19maWxlLCBfX2xpbmUpOworICBhc3NlcnRfbWF4KF9fZmlsZSwgX19saW5lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9tYXgoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBpZiAobV9wX21heCA9PSAwKQorICAgIHJldHVybjsKKyAgUEJfRFNfREVCVUdfVkVSSUZZKGJhc2VfdHlwZTo6cGFyZW50KG1fcF9tYXgpID09IDApOworICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gYmFzZV90eXBlOjpiZWdpbigpOyBpdCAhPSBiYXNlX3R5cGU6OmVuZCgpOyArK2l0KQorICAgIFBCX0RTX0RFQlVHX1ZFUklGWSghQ21wX0ZuOjpvcGVyYXRvcigpKG1fcF9tYXgtPm1fdmFsdWUsCisJCQkJCSAgIGl0Lm1fcF9uZC0+bV92YWx1ZSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X25vZGVfY29uc2lzdGVudChub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCwgYm9vbCBzdHJpY3RseV9iaW5vbWlhbCwKKwkJICAgICAgIGJvb2wgaW5jcmVhc2luZywgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBQQl9EU19ERUJVR19WRVJJRlkoaW5jcmVhc2luZyB8fCBzdHJpY3RseV9iaW5vbWlhbCk7CisgIGJhc2VfdHlwZTo6YXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kLCBmYWxzZSwgX19maWxlLCBfX2xpbmUpOworICBpZiAocF9uZCA9PSAwKQorICAgIHJldHVybjsKKyAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmQtPm1fbWV0YWRhdGEgPT0gYmFzZV90eXBlOjpkZWdyZWUocF9uZCkpOworICBQQl9EU19ERUJVR19WRVJJRlkoYmFzZV90eXBlOjpzaXplX3VuZGVyX25vZGUocF9uZCkgPT0KKwkJICAgc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigxIDw8IHBfbmQtPm1fbWV0YWRhdGEpKTsKKyAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kLT5tX3BfbmV4dF9zaWJsaW5nLCBzdHJpY3RseV9iaW5vbWlhbCwgaW5jcmVhc2luZywKKwkJCSBfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZC0+bV9wX2xfY2hpbGQsIHRydWUsIGZhbHNlLCBfX2ZpbGUsIF9fbGluZSk7CisgIGlmIChwX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IDApCisgICAgeworICAgICAgaWYgKGluY3JlYXNpbmcpCisJeworCSAgaWYgKHN0cmljdGx5X2Jpbm9taWFsKQorCSAgICBQQl9EU19ERUJVR19WRVJJRlkocF9uZC0+bV9tZXRhZGF0YQorCQkJCSAgPCBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX21ldGFkYXRhKTsKKwkgIGVsc2UKKwkgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmQtPm1fbWV0YWRhdGEKKwkJCQkgIDw9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fbWV0YWRhdGEpOworCX0KKyAgICAgIGVsc2UKKwlQQl9EU19ERUJVR19WRVJJRlkocF9uZC0+bV9tZXRhZGF0YQorCQkJICAgICAgPiBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX21ldGFkYXRhKTsKKyAgICB9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZXJhc2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JjYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmlub21pYWxfaGVhcF9iYXNlXy9lcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgYmFzZSBvZiBiaW5vbWlhbCBoZWFwcy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcG9wKCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQoKCp0aGlzKSx0cnVlKQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisKKyAgaWYgKG1fcF9tYXggPT0gMCkKKyAgICBmaW5kX21heCgpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbWF4ICE9IDApOworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9tYXg7CisgIHJlbW92ZV9wYXJlbnRsZXNzX25vZGUobV9wX21heCk7CisgIGJhc2VfdHlwZTo6YWN0dWFsX2VyYXNlX25vZGUocF9uZCk7CisgIG1fcF9tYXggPSAwOworICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLHRydWUpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZW1vdmVfcGFyZW50bGVzc19ub2RlKG5vZGVfcG9pbnRlciBwX25kKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSAwKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6cGFyZW50KHBfbmQpID09IDApOworCisgIG5vZGVfcG9pbnRlciBwX2N1cl9yb290ID0gcF9uZCA9PSBiYXNlX3R5cGU6Om1fcF9yb290PworICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgOiBiYXNlX3R5cGU6Om1fcF9yb290OworCisgIGlmIChwX2N1cl9yb290ICE9IDApCisgICAgcF9jdXJfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gMDsKKworICBpZiAocF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50ICE9IDApCisgICAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKworICBpZiAocF9uZC0+bV9wX25leHRfc2libGluZyAhPSAwKQorICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudDsKKworICBub2RlX3BvaW50ZXIgcF9jaGlsZCA9IHBfbmQtPm1fcF9sX2NoaWxkOworICBpZiAocF9jaGlsZCAhPSAwKQorICAgIHsKKyAgICAgIHBfY2hpbGQtPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisgICAgICB3aGlsZSAocF9jaGlsZC0+bV9wX25leHRfc2libGluZyAhPSAwKQorCXBfY2hpbGQgPSBwX2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KKworICBtX3BfbWF4ID0gMDsKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IGpvaW4ocF9jdXJfcm9vdCwgcF9jaGlsZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBiYXNlX3R5cGU6OmNsZWFyKCk7CisgIG1fcF9tYXggPSAwOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UocG9pbnRfaXRlcmF0b3IgaXQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRF9DT05EKCgqdGhpcyksdHJ1ZSkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworCisgIGJhc2VfdHlwZTo6YnViYmxlX3RvX3RvcChpdC5tX3BfbmQpOworICByZW1vdmVfcGFyZW50bGVzc19ub2RlKGl0Lm1fcF9uZCk7CisgIGJhc2VfdHlwZTo6YWN0dWFsX2VyYXNlX25vZGUoaXQubV9wX25kKTsKKyAgbV9wX21heCA9IDA7CisgIFBCX0RTX0FTU0VSVF9WQUxJRF9DT05EKCgqdGhpcyksdHJ1ZSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRF9DT05EKCgqdGhpcyksdHJ1ZSkKKworICBpZiAoYmFzZV90eXBlOjplbXB0eSgpKQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRF9DT05EKCgqdGhpcyksdHJ1ZSkKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBiYXNlX3R5cGU6OnRvX2xpbmtlZF9saXN0KCk7CisgIG5vZGVfcG9pbnRlciBwX291dCA9IGJhc2VfdHlwZTo6cHJ1bmUocHJlZCk7CisgIHNpemVfdHlwZSBlcnNkID0gMDsKKyAgd2hpbGUgKHBfb3V0ICE9IDApCisgICAgeworICAgICAgKytlcnNkOworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfb3V0LT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgYmFzZV90eXBlOjphY3R1YWxfZXJhc2Vfbm9kZShwX291dCk7CisgICAgICBwX291dCA9IHBfbmV4dDsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfY3VyID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IDA7CisgIHdoaWxlIChwX2N1ciAhPSAwKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHQgPSBwX2N1ci0+bV9wX25leHRfc2libGluZzsKKyAgICAgIHBfY3VyLT5tX3BfbF9jaGlsZCA9IHBfY3VyLT5tX3BfcHJldl9vcl9wYXJlbnQgPSAwOworICAgICAgcF9jdXItPm1fbWV0YWRhdGEgPSAwOworICAgICAgcF9jdXItPm1fcF9uZXh0X3NpYmxpbmcgPSBiYXNlX3R5cGU6Om1fcF9yb290OworCisgICAgICBpZiAoYmFzZV90eXBlOjptX3Bfcm9vdCAhPSAwKQorCWJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfY3VyOworCisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290ID0gcF9jdXI7CisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290ID0gZml4KGJhc2VfdHlwZTo6bV9wX3Jvb3QpOworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorCisgIG1fcF9tYXggPSAwOworICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLHRydWUpCisgIHJldHVybiBlcnNkOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vZmluZF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2ZpbmRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjczODVhNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwX2Jhc2VfL2ZpbmRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5vbWlhbF9oZWFwX2Jhc2VfL2ZpbmRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJhc2Ugb2YgYmlub21pYWwgaGVhcHMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcmVmZXJlbmNlCitQQl9EU19DTEFTU19DX0RFQzo6Cit0b3AoKSBjb25zdAoreworICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLGZhbHNlKQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisKKyAgaWYgKG1fcF9tYXggPT0gMCkKKyAgICBjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKiA+KHRoaXMpLT5maW5kX21heCgpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbWF4ICE9IDApOworICByZXR1cm4gbV9wX21heC0+bV92YWx1ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfbWF4KCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfY3VyID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKyAgbV9wX21heCA9IHBfY3VyOworICB3aGlsZSAocF9jdXIgIT0gMCkKKyAgICB7CisgICAgICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKG1fcF9tYXgtPm1fdmFsdWUsIHBfY3VyLT5tX3ZhbHVlKSkKKwltX3BfbWF4ID0gcF9jdXI7CisgICAgICBwX2N1ciA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZmIwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNzggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYmlub21pYWxfaGVhcF9iYXNlXy9pbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJhc2Ugb2YgYmlub21pYWwgaGVhcHMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3B1c2goY29uc3RfcmVmZXJlbmNlIHJfdmFsKQoreworICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLHRydWUpCisgIG5vZGVfcG9pbnRlciBwX25kID0gYmFzZV90eXBlOjpnZXRfbmV3X25vZGVfZm9yX2luc2VydChyX3ZhbCk7CisgIGluc2VydF9ub2RlKHBfbmQpOworICBtX3BfbWF4ID0gMDsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQoKCp0aGlzKSx0cnVlKQorICByZXR1cm4gcG9pbnRfaXRlcmF0b3IocF9uZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0X25vZGUobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ID09IDApCisgICAgeworICAgICAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IDA7CisgICAgICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPSAwOworICAgICAgcF9uZC0+bV9wX2xfY2hpbGQgPSAwOworICAgICAgcF9uZC0+bV9tZXRhZGF0YSA9IDA7CisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fbWV0YWRhdGEgPiAwKQorICAgIHsKKyAgICAgIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQtPm1fcF9sX2NoaWxkID0gMDsKKyAgICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBiYXNlX3R5cGU6Om1fcF9yb290OworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZDsKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX25kOworICAgICAgcF9uZC0+bV9tZXRhZGF0YSA9IDA7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChDbXBfRm46Om9wZXJhdG9yKCkoYmFzZV90eXBlOjptX3Bfcm9vdC0+bV92YWx1ZSwgcF9uZC0+bV92YWx1ZSkpCisgICAgeworICAgICAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPSAwOworICAgICAgcF9uZC0+bV9tZXRhZGF0YSA9IDE7CisgICAgICBwX25kLT5tX3BfbF9jaGlsZCA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kOworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX25leHRfc2libGluZyA9IDA7CisgICAgICBiYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nID0gMDsKKyAgICAgIHBfbmQtPm1fcF9sX2NoaWxkID0gMDsKKyAgICAgIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisgICAgICBwX25kLT5tX21ldGFkYXRhID0gMDsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6Om1fcF9yb290LT5tX3BfbF9jaGlsZCA9PSAwKTsKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fcF9sX2NoaWxkID0gcF9uZDsKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fbWV0YWRhdGEgPSAxOworICAgIH0KKworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gZml4KGJhc2VfdHlwZTo6bV9wX3Jvb3QpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpeChub2RlX3BvaW50ZXIgcF9uZCkgY29uc3QKK3sKKyAgd2hpbGUgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gMCAmJgorCSBwX25kLT5tX21ldGFkYXRhID09IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fbWV0YWRhdGEpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKHBfbmQtPm1fdmFsdWUsIHBfbmV4dC0+bV92YWx1ZSkpCisJeworCSAgcF9uZXh0LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisKKwkgIGlmIChwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gMCkKKwkgICAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZXh0OworCisJICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2YocF9uZCwgcF9uZXh0KTsKKwkgICsrcF9uZXh0LT5tX21ldGFkYXRhOworCSAgcF9uZCA9IHBfbmV4dDsKKwl9CisgICAgICBlbHNlCisJeworCSAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IHBfbmV4dC0+bV9wX25leHRfc2libGluZzsKKworCSAgaWYgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gMCkKKwkgICAgcF9uZXh0LT5tX3BfbmV4dF9zaWJsaW5nID0gMDsKKworCSAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmV4dCwgcF9uZCk7CisJICArK3BfbmQtPm1fbWV0YWRhdGE7CisJfQorICAgIH0KKworICBpZiAocF9uZC0+bV9wX25leHRfc2libGluZyAhPSAwKQorICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQ7CisKKyAgcmV0dXJuIHBfbmQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cittb2RpZnkocG9pbnRfaXRlcmF0b3IgaXQsIGNvbnN0X3JlZmVyZW5jZSByX25ld192YWwpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRF9DT05EKCgqdGhpcyksdHJ1ZSkKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBpdC5tX3BfbmQ7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gMCk7CisgIFBCX0RTX0FTU0VSVF9CQVNFX05PREVfQ09OU0lTVEVOVChwX25kLCBmYWxzZSkKKworICBjb25zdCBib29sIGJ1YmJsZV91cCA9IENtcF9Gbjo6b3BlcmF0b3IoKShwX25kLT5tX3ZhbHVlLCByX25ld192YWwpOworICBwX25kLT5tX3ZhbHVlID0gcl9uZXdfdmFsOworCisgIGlmIChidWJibGVfdXApCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gYmFzZV90eXBlOjpwYXJlbnQocF9uZCk7CisgICAgICB3aGlsZSAocF9wYXJlbnQgIT0gMCAmJgorCSAgICAgQ21wX0ZuOjpvcGVyYXRvcigpKHBfcGFyZW50LT5tX3ZhbHVlLCBwX25kLT5tX3ZhbHVlKSkKKwl7CisJICBiYXNlX3R5cGU6OnN3YXBfd2l0aF9wYXJlbnQocF9uZCwgcF9wYXJlbnQpOworCSAgcF9wYXJlbnQgPSBiYXNlX3R5cGU6OnBhcmVudChwX25kKTsKKwl9CisKKyAgICAgIGlmIChwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gMCkKKwliYXNlX3R5cGU6Om1fcF9yb290ID0gcF9uZDsKKworICAgICAgbV9wX21heCA9IDA7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLHRydWUpCisgICAgICByZXR1cm47CisgICAgfQorCisgIGJhc2VfdHlwZTo6YnViYmxlX3RvX3RvcChwX25kKTsKKyAgcmVtb3ZlX3BhcmVudGxlc3Nfbm9kZShwX25kKTsKKyAgaW5zZXJ0X25vZGUocF9uZCk7CisgIG1fcF9tYXggPSAwOworICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORCgoKnRoaXMpLHRydWUpCit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGMxODUwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2Jpbm9taWFsX2hlYXBfYmFzZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE5NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBiaW5vbWlhbF9oZWFwX2Jhc2VfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJhc2Ugb2YgYmlub21pYWwgaGVhcHMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdChQcmVkIHByZWQsIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQoKCp0aGlzKSx0cnVlKQorICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORChvdGhlcix0cnVlKQorCisgIG90aGVyLmNsZWFyKCk7CisgIGlmIChiYXNlX3R5cGU6OmVtcHR5KCkpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQoKCp0aGlzKSx0cnVlKQorICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQob3RoZXIsdHJ1ZSkKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgYmFzZV90eXBlOjp0b19saW5rZWRfbGlzdCgpOworICBub2RlX3BvaW50ZXIgcF9vdXQgPSBiYXNlX3R5cGU6OnBydW5lKHByZWQpOworICB3aGlsZSAocF9vdXQgIT0gMCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3NpemUgPiAwKTsKKyAgICAgIC0tYmFzZV90eXBlOjptX3NpemU7CisgICAgICArK290aGVyLm1fc2l6ZTsKKworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfb3V0LT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgcF9vdXQtPm1fcF9sX2NoaWxkID0gcF9vdXQtPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisgICAgICBwX291dC0+bV9tZXRhZGF0YSA9IDA7CisKKyAgICAgIHBfb3V0LT5tX3BfbmV4dF9zaWJsaW5nID0gb3RoZXIubV9wX3Jvb3Q7CisgICAgICBpZiAob3RoZXIubV9wX3Jvb3QgIT0gMCkKKwlvdGhlci5tX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9vdXQ7CisKKyAgICAgIG90aGVyLm1fcF9yb290ID0gcF9vdXQ7CisgICAgICBvdGhlci5tX3Bfcm9vdCA9IG90aGVyLmZpeChvdGhlci5tX3Bfcm9vdCk7CisgICAgICBwX291dCA9IHBfbmV4dDsKKyAgICB9CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQob3RoZXIsdHJ1ZSkKKyAgbm9kZV9wb2ludGVyIHBfY3VyID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IDA7CisKKyAgd2hpbGUgKHBfY3VyICE9IDApCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgcF9jdXItPm1fcF9sX2NoaWxkID0gcF9jdXItPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisgICAgICBwX2N1ci0+bV9tZXRhZGF0YSA9IDA7CisgICAgICBwX2N1ci0+bV9wX25leHRfc2libGluZyA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisKKyAgICAgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ICE9IDApCisJYmFzZV90eXBlOjptX3Bfcm9vdC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9jdXI7CisKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX2N1cjsKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBmaXgoYmFzZV90eXBlOjptX3Bfcm9vdCk7CisgICAgICBwX2N1ciA9IHBfbmV4dDsKKyAgICB9CisKKyAgbV9wX21heCA9IDA7CisgIFBCX0RTX0FTU0VSVF9WQUxJRF9DT05EKCgqdGhpcyksdHJ1ZSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQob3RoZXIsdHJ1ZSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQoKCp0aGlzKSx0cnVlKQorICBQQl9EU19BU1NFUlRfVkFMSURfQ09ORChvdGhlcix0cnVlKQorCisgIG5vZGVfcG9pbnRlciBwX290aGVyID0gb3RoZXIubV9wX3Jvb3Q7CisgIGlmIChwX290aGVyICE9IDApCisgICAgZG8KKyAgICAgIHsKKwlub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9vdGhlci0+bV9wX25leHRfc2libGluZzsKKwlzdGQ6OnN3YXAocF9vdGhlci0+bV9wX25leHRfc2libGluZywgcF9vdGhlci0+bV9wX3ByZXZfb3JfcGFyZW50KTsKKwlwX290aGVyID0gcF9uZXh0OworICAgICAgfQorICAgIHdoaWxlIChwX290aGVyICE9IDApOworCisgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBqb2luKGJhc2VfdHlwZTo6bV9wX3Jvb3QsIG90aGVyLm1fcF9yb290KTsKKyAgYmFzZV90eXBlOjptX3NpemUgKz0gb3RoZXIubV9zaXplOworICBtX3BfbWF4ID0gMDsKKworICBvdGhlci5tX3Bfcm9vdCA9IDA7CisgIG90aGVyLm1fc2l6ZSA9IDA7CisgIG90aGVyLm1fcF9tYXggPSAwOworCisgIFBCX0RTX0FTU0VSVF9WQUxJRF9DT05EKCgqdGhpcyksdHJ1ZSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEX0NPTkQob3RoZXIsdHJ1ZSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKG5vZGVfcG9pbnRlciBwX2xocywgbm9kZV9wb2ludGVyIHBfcmhzKSBjb25zdAoreworICBub2RlX3BvaW50ZXIgcF9yZXQgPSAwOworICBub2RlX3BvaW50ZXIgcF9jdXIgPSAwOworCisgIHdoaWxlIChwX2xocyAhPSAwIHx8IHBfcmhzICE9IDApCisgICAgeworICAgICAgaWYgKHBfcmhzID09IDApCisJeworCSAgaWYgKHBfY3VyID09IDApCisJICAgIHBfcmV0ID0gcF9jdXIgPSBwX2xoczsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9saHM7CisJICAgICAgcF9saHMtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfY3VyOworCSAgICB9CisJICBwX2N1ciA9IHBfbGhzID0gMDsKKwl9CisgICAgICBlbHNlIGlmIChwX2xocyA9PSAwIHx8IHBfcmhzLT5tX21ldGFkYXRhIDwgcF9saHMtPm1fbWV0YWRhdGEpCisJeworCSAgaWYgKHBfY3VyID09IDApCisJICAgIHsKKwkgICAgICBwX3JldCA9IHBfY3VyID0gcF9yaHM7CisJICAgICAgcF9yaHMgPSBwX3Jocy0+bV9wX3ByZXZfb3JfcGFyZW50OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBwX2N1ci0+bV9wX25leHRfc2libGluZyA9IHBfcmhzOworCSAgICAgIHBfcmhzID0gcF9yaHMtPm1fcF9wcmV2X29yX3BhcmVudDsKKwkgICAgICBwX2N1ci0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9jdXI7CisJICAgICAgcF9jdXIgPSBwX2N1ci0+bV9wX25leHRfc2libGluZzsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHBfbGhzLT5tX21ldGFkYXRhIDwgcF9yaHMtPm1fbWV0YWRhdGEpCisJeworCSAgaWYgKHBfY3VyID09IDApCisJICAgIHBfcmV0ID0gcF9jdXIgPSBwX2xoczsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9saHM7CisJICAgICAgcF9saHMtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfY3VyOworCSAgICAgIHBfY3VyID0gcF9jdXItPm1fcF9uZXh0X3NpYmxpbmc7CisJICAgIH0KKwkgIHBfbGhzID0gcF9jdXItPm1fcF9uZXh0X3NpYmxpbmc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG5vZGVfcG9pbnRlciBwX25leHRfcmhzID0gcF9yaHMtPm1fcF9wcmV2X29yX3BhcmVudDsKKwkgIHBfcmhzLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9saHM7CisJICBwX2xocyA9IGZpeChwX3Jocyk7CisJICBwX3JocyA9IHBfbmV4dF9yaHM7CisJfQorICAgIH0KKworICBpZiAocF9jdXIgIT0gMCkKKyAgICBwX2N1ci0+bV9wX25leHRfc2libGluZyA9IDA7CisKKyAgaWYgKHBfcmV0ICE9IDApCisgICAgcF9yZXQtPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisKKyAgcmV0dXJuIHBfcmV0OworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JyYW5jaF9wb2xpY3kvYnJhbmNoX3BvbGljeS5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS9icmFuY2hfcG9saWN5LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmVkYzIyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JyYW5jaF9wb2xpY3kvYnJhbmNoX3BvbGljeS5ocHAKQEAgLTAsMCArMSwxMTkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgYnJhbmNoX3BvbGljeS9icmFuY2hfcG9saWN5LmhwcAorICogQ29udGFpbnMgYSBiYXNlIGNsYXNzIGZvciBicmFuY2ggcG9saWNpZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19CUkFOQ0hfUE9MSUNZX0JBU0VfSFBQCisjZGVmaW5lIFBCX0RTX0JSQU5DSF9QT0xJQ1lfQkFTRV9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLy8vIFByaW1hcnkgdGVtcGxhdGUsIGJhc2UgY2xhc3MgZm9yIGJyYW5jaCBzdHJ1Y3R1cmUgcG9saWNpZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLCB0eXBlbmFtZSBOb2RlX0l0ciwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgc3RydWN0IGJyYW5jaF9wb2xpY3kKKyAgICAgIHsKKyAgICAgIHByb3RlY3RlZDoKKwl0eXBlZGVmIHR5cGVuYW1lIE5vZGVfSXRyOjp2YWx1ZV90eXBlIAkJaXRfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPGl0X3R5cGU+Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSB2YWx1ZV90eXBlOjpmaXJzdF90eXBlIAlrZXlfdHlwZTsKKworCXR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PHZhbHVlX3R5cGU+Ojp0eXBlCXJjdmFsdWVfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jb25zdDxrZXlfdHlwZT46OnR5cGUJcmNrZXlfdHlwZTsKKworCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8cmN2YWx1ZV90eXBlPjo6b3RoZXIgcmViaW5kX3Y7CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxyY2tleV90eXBlPjo6b3RoZXIgICByZWJpbmRfazsKKworCXR5cGVkZWYJdHlwZW5hbWUgcmViaW5kX3Y6OnJlZmVyZW5jZSAJCXJlZmVyZW5jZTsKKwl0eXBlZGVmCXR5cGVuYW1lIHJlYmluZF92Ojpjb25zdF9yZWZlcmVuY2UgCWNvbnN0X3JlZmVyZW5jZTsKKwl0eXBlZGVmCXR5cGVuYW1lIHJlYmluZF92Ojpjb25zdF9wb2ludGVyCWNvbnN0X3BvaW50ZXI7CisKKwl0eXBlZGVmCXR5cGVuYW1lIHJlYmluZF9rOjpjb25zdF9yZWZlcmVuY2UgCWtleV9jb25zdF9yZWZlcmVuY2U7CisKKwlzdGF0aWMgaW5saW5lIGtleV9jb25zdF9yZWZlcmVuY2UKKwlleHRyYWN0X2tleShjb25zdF9yZWZlcmVuY2Ugcl92YWwpCisJeyByZXR1cm4gcl92YWwuZmlyc3Q7IH0KKworCXZpcnR1YWwgaXRfdHlwZQorCWVuZCgpID0gMDsKKworCWl0X3R5cGUKKwllbmRfaXRlcmF0b3IoKSBjb25zdAorCXsgcmV0dXJuIGNvbnN0X2Nhc3Q8YnJhbmNoX3BvbGljeSo+KHRoaXMpLT5lbmQoKTsgfQorCisJdmlydHVhbAorCX5icmFuY2hfcG9saWN5KCkgeyB9CisgICAgICB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBjb25zdCBpdGVyYXRvcnMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgICBzdHJ1Y3QgYnJhbmNoX3BvbGljeTxOb2RlX0NJdHIsIE5vZGVfQ0l0ciwgX0FsbG9jPgorICAgICAgeworICAgICAgcHJvdGVjdGVkOgorCXR5cGVkZWYgdHlwZW5hbWUgTm9kZV9DSXRyOjp2YWx1ZV90eXBlIAkJICAgaXRfdHlwZTsKKyAgICAgICAJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxpdF90eXBlPjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PHZhbHVlX3R5cGU+Ojp0eXBlCQkgICByY3ZhbHVlX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxyY3ZhbHVlX3R5cGU+OjpvdGhlciByZWJpbmRfdjsKKwl0eXBlZGVmCXR5cGVuYW1lIHJlYmluZF92OjpyZWZlcmVuY2UgCQlyZWZlcmVuY2U7CisJdHlwZWRlZgl0eXBlbmFtZSByZWJpbmRfdjo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9yZWZlcmVuY2U7CisJdHlwZWRlZgl0eXBlbmFtZSByZWJpbmRfdjo6Y29uc3RfcG9pbnRlcgljb25zdF9wb2ludGVyOworCisJdHlwZWRlZiB2YWx1ZV90eXBlIAkJCQlrZXlfdHlwZTsKKwl0eXBlZGVmCXR5cGVuYW1lIHJlYmluZF92Ojpjb25zdF9yZWZlcmVuY2UgCWtleV9jb25zdF9yZWZlcmVuY2U7CisKKwlzdGF0aWMgaW5saW5lIGtleV9jb25zdF9yZWZlcmVuY2UKKwlleHRyYWN0X2tleShjb25zdF9yZWZlcmVuY2Ugcl92YWwpCisJeyByZXR1cm4gcl92YWw7IH0KKworCXZpcnR1YWwgaXRfdHlwZQorCWVuZCgpIGNvbnN0ID0gMDsKKworCWl0X3R5cGUKKwllbmRfaXRlcmF0b3IoKSBjb25zdAorCXsgcmV0dXJuIGVuZCgpOyB9CisKKwl2aXJ0dWFsCisJfmJyYW5jaF9wb2xpY3koKSB7IH0KKyAgICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19CUkFOQ0hfUE9MSUNZX0JBU0VfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS9udWxsX25vZGVfbWV0YWRhdGEuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JyYW5jaF9wb2xpY3kvbnVsbF9ub2RlX21ldGFkYXRhLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y3NjNlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JyYW5jaF9wb2xpY3kvbnVsbF9ub2RlX21ldGFkYXRhLmhwcApAQCAtMCwwICsxLDY2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJyYW5jaF9wb2xpY3kvbnVsbF9ub2RlX21ldGFkYXRhLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRyZWUtbGlrZSBjbGFzc2VzLgorICovCisKKyNpZm5kZWYgUEJfRFNfMF9OT0RFX01FVEFEQVRBX0hQUAorI2RlZmluZSBQQl9EU18wX05PREVfTUVUQURBVEFfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVzX3RyYWl0cy5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBDb25zdGFudCBub2RlIGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgRGF0YSwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgc3RydWN0IGR1bW5vZGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIHsKKyAgICAgIHByaXZhdGU6CisJdHlwZWRlZiB0eXBlc190cmFpdHM8S2V5LCBEYXRhLCBfQWxsb2MsIGZhbHNlPglfX3RyYWl0c190eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6cG9pbnRlciAgICAgICAgCWNvbnN0X2l0ZXJhdG9yOworCQorICAgICAgcHVibGljOgorCXR5cGVkZWYgY29uc3RfaXRlcmF0b3IgCQkJCXZhbHVlX3R5cGU7CisJdHlwZWRlZiBjb25zdF9pdGVyYXRvciAJCQkJY29uc3RfcmVmZXJlbmNlOworCXR5cGVkZWYgY29uc3RfcmVmZXJlbmNlIAkgICAgICAgCQlyZWZlcmVuY2U7CisgICAgICB9OworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS90cmFpdHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JyYW5jaF9wb2xpY3kvdHJhaXRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNiMGM1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2JyYW5jaF9wb2xpY3kvdHJhaXRzLmhwcApAQCAtMCwwICsxLDk1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGJyYW5jaF9wb2xpY3kvdHJhaXRzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRyZWUtbGlrZSBjbGFzc2VzLgorICovCisKKyNpZm5kZWYgUEJfRFNfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUAorI2RlZmluZSBQQl9EU19OT0RFX0FORF9JVF9UUkFJVFNfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVzX3RyYWl0cy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3RyYWl0cy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90cmVlX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L25vZGVfbWV0YWRhdGFfc2VsZWN0b3IuaHBwPgorCisjZGVmaW5lIFBCX0RTX0RFQlVHX1ZFUklGWShfQ29uZCkJCQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfVkVSSUZZX0FUKF9Db25kLAkJCQkJXAorCQkJICAgX01fbWVzc2FnZSgjX0NvbmQiIGFzc2VydGlvbiBmcm9tICUxOzolMjsiKQlcCisJCQkgICAuX01fc3RyaW5nKF9fRklMRV9fKS5fTV9pbnRlZ2VyKF9fTElORV9fKQlcCisJCQkgICAsX19maWxlLF9fbGluZSkKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLy8vIFRyZWUgdHJhaXRzIGNsYXNzLCBwcmltYXJ5IHRlbXBsYXRlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIHR5cGVuYW1lIERhdGEsCisJICAgICB0eXBlbmFtZSBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsCisJCSAgICAgIHR5cGVuYW1lIE5vZGVfSXRyLAorCQkgICAgICB0eXBlbmFtZSBDbXBfRm5fLAorCQkgICAgICB0eXBlbmFtZSBfQWxsb2M+CisJICAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIHR5cGVuYW1lIFRhZywKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdHJlZV90cmFpdHM7CisKKyAgICAvLy8gVHJpZSB0cmFpdHMgY2xhc3MsIHByaW1hcnkgdGVtcGxhdGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgRGF0YSwKKwkgICAgIHR5cGVuYW1lIF9BVHJhaXRzLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLAorCQkgICAgICB0eXBlbmFtZSBOb2RlX0l0ciwKKwkJICAgICAgdHlwZW5hbWUgX0FUcmFpdHNfLAorCQkgICAgICB0eXBlbmFtZSBfQWxsb2M+CisJICAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIHR5cGVuYW1lIFRhZywKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdHJpZV90cmFpdHM7CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy90cmFpdHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy90cmFpdHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3RyYWl0cy5ocHA+CisKKyN1bmRlZiBQQl9EU19ERUJVR19WRVJJRlkKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jY19odF9tYXBfLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY2NfaHRfbWFwXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwNTdmZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY2NfaHRfbWFwXy5ocHAKQEAgLTAsMCArMSw2NzkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2NjX2h0X21hcF8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgY2NfaHRfbWFwXy4KKyAqLworCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9yYW5nZWRfaGFzaF9mbi5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZXFfZm4vaGFzaF9lcV9mbi5ocHA+CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2RlYnVnX21hcF9iYXNlLmhwcD4KKyNlbmRpZgorI2lmZGVmIFBCX0RTX0hUX01BUF9UUkFDRV8KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNlbmRpZgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfQ0NfSEFTSF9OQU1FIGNjX2h0X21hcAorI2VuZGlmCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19DQ19IQVNIX05BTUUgY2NfaHRfc2V0CisjZW5kaWYKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEhhc2hfRm4sIFwKKwkgICAgIHR5cGVuYW1lIEVxX0ZuLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wgU3RvcmVfSGFzaCwgXAorCSAgICAgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuLCB0eXBlbmFtZSBSZXNpemVfUG9saWN5PgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBQQl9EU19DQ19IQVNIX05BTUU8S2V5LCBNYXBwZWQsIEhhc2hfRm4sIEVxX0ZuLCBfQWxsb2MsCVwKKwkJICAgICBTdG9yZV9IYXNoLCBDb21iX0hhc2hfRm4sIFJlc2l6ZV9Qb2xpY3k+CisKKyNkZWZpbmUgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyBcCisgICAgaGFzaF9lcV9mbjxLZXksIEVxX0ZuLCBfQWxsb2MsIFN0b3JlX0hhc2g+CisKKyNkZWZpbmUgUEJfRFNfUkFOR0VEX0hBU0hfRk5fQ19ERUMgXAorICAgIHJhbmdlZF9oYXNoX2ZuPEtleSwJSGFzaF9GbiwgX0FsbG9jLCBDb21iX0hhc2hfRm4sIFN0b3JlX0hhc2g+CisKKyNkZWZpbmUgUEJfRFNfQ0NfSEFTSF9UUkFJVFNfQkFTRSBcCisgICAgdHlwZXNfdHJhaXRzPEtleSwgTWFwcGVkLCBfQWxsb2MsIFN0b3JlX0hhc2g+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBcCisgICAgZGVidWdfbWFwX2Jhc2U8S2V5LAlFcV9GbiwgXAorCQkgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPEtleT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2U+CisjZW5kaWYKKworCisgICAgLyoqCisgICAgICogIEEgY29sbGlzaW9uLWNoYWluaW5nIGhhc2gtYmFzZWQgY29udGFpbmVyLgorICAgICAqCisgICAgICoKKyAgICAgKiAgQGluZ3JvdXAgaGFzaC1kZXRhaWwKKyAgICAgKgorICAgICAqICBAdHBhcmFtIEtleSAJICAgIAlLZXkgdHlwZS4KKyAgICAgKgorICAgICAqICBAdHBhcmFtIE1hcHBlZCAJICAgIAlNYXAgdHlwZS4KKyAgICAgKgorICAgICAqICBAdHBhcmFtIEhhc2hfRm4JICAgICAgCUhhc2hpbmcgZnVuY3Rvci4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpcyBfX2dudV9jeHg6Omhhc2guCisgICAgICoKKyAgICAgKiAgQHRwYXJhbSBFcV9GbgkgICAgICAJRXF1YWwgZnVuY3Rvci4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBzdGQ6OmVxdWFsX3RvPEtleT4KKyAgICAgKgorICAgICAqICBAdHBhcmFtIF9BbGxvYyAJICAgIAlBbGxvY2F0b3IgdHlwZS4KKyAgICAgKgorICAgICAqICBAdHBhcmFtIFN0b3JlX0hhc2ggICAgCUlmIGtleSB0eXBlIHN0b3JlcyBleHRyYSBtZXRhZGF0YS4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gZmFsc2UuCisgICAgICoKKyAgICAgKiAgQHRwYXJhbSBDb21iX0hhc2hfRm4JQ29tYmluaW5nIGhhc2ggZnVuY3Rvci4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgSGFzaF9GbiBpcyBub3QgbnVsbF90eXBlLCB0aGVuIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHJhbmdlZC1oYXNoIGZ1bmN0b3I7IG90aGVyd2lzZSwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgcmFuZ2UtaGFzaGluZyBmdW5jdG9yLgorICAgICAqICAgICAgICAgICAgICAgICAgICBYWFgoU2VlIERlc2lnbjo6SGFzaC1CYXNlZCBDb250YWluZXJzOjpIYXNoIFBvbGljaWVzLikKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBkaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nLgorICAgICAqCisgICAgICogIEB0cGFyYW0gUmVzaXplX1BvbGljeSAJUmVzaXplcyBoYXNoLgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBoYXNoX3N0YW5kYXJkX3Jlc2l6ZV9wb2xpY3ksCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGhhc2hfZXhwb25lbnRpYWxfc2l6ZV9wb2xpY3kgYW5kCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlci4KKyAgICAgKgorICAgICAqCisgICAgICogIEJhc2VzIGFyZTogZGV0YWlsOjpoYXNoX2VxX2ZuLCBSZXNpemVfUG9saWN5LCBkZXRhaWw6OnJhbmdlZF9oYXNoX2ZuLAorICAgICAqICAgICAgICAgICAgIGRldGFpbDo6dHlwZXNfdHJhaXRzLiAoT3B0aW9uYWw6IGRldGFpbDo6ZGVidWdfbWFwX2Jhc2UuKQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIHR5cGVuYW1lIE1hcHBlZCwKKwkgICAgIHR5cGVuYW1lIEhhc2hfRm4sCisJICAgICB0eXBlbmFtZSBFcV9GbiwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYywKKwkgICAgIGJvb2wgU3RvcmVfSGFzaCwKKwkgICAgIHR5cGVuYW1lIENvbWJfSGFzaF9GbiwKKwkgICAgIHR5cGVuYW1lIFJlc2l6ZV9Qb2xpY3kgPgorICAgIGNsYXNzIFBCX0RTX0NDX0hBU0hfTkFNRToKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgcHJvdGVjdGVkIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDLAorI2VuZGlmCisgICAgICBwdWJsaWMgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQywKKyAgICAgIHB1YmxpYyBSZXNpemVfUG9saWN5LAorICAgICAgcHVibGljIFBCX0RTX1JBTkdFRF9IQVNIX0ZOX0NfREVDLAorICAgICAgcHVibGljIFBCX0RTX0NDX0hBU0hfVFJBSVRTX0JBU0UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfQ0NfSEFTSF9UUkFJVFNfQkFTRQkgICAgICAgCXRyYWl0c19iYXNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29tcF9oYXNoIAljb21wX2hhc2g7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIAl2YWx1ZV90eXBlXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnBvaW50ZXIgCXBvaW50ZXJfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnJlZmVyZW5jZSAJcmVmZXJlbmNlXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2VfOworCisgICAgICBzdHJ1Y3QgZW50cnkgOiBwdWJsaWMgdHJhaXRzX2Jhc2U6OnN0b3JlZF9kYXRhX3R5cGUKKyAgICAgIHsKKwl0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxlbnRyeT46Om90aGVyOjpwb2ludGVyIG1fcF9uZXh0OworICAgICAgfTsKKworICAgICAgdHlwZWRlZiBjb25kX2RlYWx0b3I8ZW50cnksIF9BbGxvYz4gCWNvbmRfZGVhbHRvcl90OworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGVudHJ5Pjo6b3RoZXIgZW50cnlfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OnBvaW50ZXIgZW50cnlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyIGNvbnN0X2VudHJ5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6cmVmZXJlbmNlIGVudHJ5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfZW50cnlfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGVudHJ5X3BvaW50ZXI+OjpvdGhlciBlbnRyeV9wb2ludGVyX2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfcG9pbnRlcl9hbGxvY2F0b3I6OnBvaW50ZXIgZW50cnlfcG9pbnRlcl9hcnJheTsKKworICAgICAgdHlwZWRlZiBQQl9EU19SQU5HRURfSEFTSF9GTl9DX0RFQyByYW5nZWRfaGFzaF9mbl9iYXNlOworICAgICAgdHlwZWRlZiBQQl9EU19IQVNIX0VRX0ZOX0NfREVDIGhhc2hfZXFfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgUmVzaXplX1BvbGljeSByZXNpemVfYmFzZTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB0eXBlZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDIAlkZWJ1Z19iYXNlOworI2VuZGlmCisKKyNkZWZpbmUgUEJfRFNfR0VOX1BPUyBzdGQ6OnBhaXI8ZW50cnlfcG9pbnRlciwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGU+CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9wb2ludF9jb25zdF9pdGVyYXRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvcG9pbnRfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2NvbnN0X2l0ZXJhdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9pdGVyYXRvci5ocHA+CisKKyN1bmRlZiBQQl9EU19HRU5fUE9TCisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9BbGxvYyAJCQkJYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIAlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIEhhc2hfRm4gCQkJCWhhc2hfZm47CisgICAgICB0eXBlZGVmIEVxX0ZuIAkJCQllcV9mbjsKKyAgICAgIHR5cGVkZWYgQ29tYl9IYXNoX0ZuIAkJCWNvbWJfaGFzaF9mbjsKKyAgICAgIHR5cGVkZWYgUmVzaXplX1BvbGljeSAJCQlyZXNpemVfcG9saWN5OworCisgICAgICAvLy8gVmFsdWUgc3RvcmVzIGhhc2gsIHRydWUgb3IgZmFsc2UuCisgICAgICBlbnVtCisJeworCSAgc3RvcmVfaGFzaCA9IFN0b3JlX0hhc2gKKwl9OworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9wb2ludGVyIGtleV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X2NvbnN0X3BvaW50ZXIga2V5X2NvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfcmVmZXJlbmNlIGtleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfY29uc3RfcmVmZXJlbmNlIGtleV9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9wb2ludGVyIG1hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX2NvbnN0X3BvaW50ZXIgbWFwcGVkX2NvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfcmVmZXJlbmNlIG1hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfY29uc3RfcmVmZXJlbmNlIG1hcHBlZF9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIAl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cG9pbnRlciAJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnJlZmVyZW5jZSAJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgcG9pbnRfaXRlcmF0b3JfIAkJCXBvaW50X2l0ZXJhdG9yOworI2VuZGlmCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBwb2ludF9jb25zdF9pdGVyYXRvcl8gCQlwb2ludF9pdGVyYXRvcjsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIHBvaW50X2NvbnN0X2l0ZXJhdG9yXyAJCXBvaW50X2NvbnN0X2l0ZXJhdG9yOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBpdGVyYXRvcl8gCQkJaXRlcmF0b3I7CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisgICAgICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yXyAJCQlpdGVyYXRvcjsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yXyAJCQljb25zdF9pdGVyYXRvcjsKKworICAgICAgUEJfRFNfQ0NfSEFTSF9OQU1FKCk7CisKKyAgICAgIFBCX0RTX0NDX0hBU0hfTkFNRShjb25zdCBIYXNoX0ZuJik7CisKKyAgICAgIFBCX0RTX0NDX0hBU0hfTkFNRShjb25zdCBIYXNoX0ZuJiwgY29uc3QgRXFfRm4mKTsKKworICAgICAgUEJfRFNfQ0NfSEFTSF9OQU1FKGNvbnN0IEhhc2hfRm4mLCBjb25zdCBFcV9GbiYsIGNvbnN0IENvbWJfSGFzaF9GbiYpOworCisgICAgICBQQl9EU19DQ19IQVNIX05BTUUoY29uc3QgSGFzaF9GbiYsIGNvbnN0IEVxX0ZuJiwgY29uc3QgQ29tYl9IYXNoX0ZuJiwKKwkJICAgICAgIGNvbnN0IFJlc2l6ZV9Qb2xpY3kmKTsKKworICAgICAgUEJfRFNfQ0NfSEFTSF9OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5QQl9EU19DQ19IQVNIX05BTUUoKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICAgIHZvaWQKKyAgICAgIGNvcHlfZnJvbV9yYW5nZShJdCwgSXQpOworCisgICAgICB2b2lkCisgICAgICBpbml0aWFsaXplKCk7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdDsKKworICAgICAgLy8vIFRydWUgaWYgc2l6ZSgpID09IDAuCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdDsKKworICAgICAgLy8vIFJldHVybiBjdXJyZW50IGhhc2hfZm4uCisgICAgICBIYXNoX0ZuJgorICAgICAgZ2V0X2hhc2hfZm4oKTsKKworICAgICAgLy8vIFJldHVybiBjdXJyZW50IGNvbnN0IGhhc2hfZm4uCisgICAgICBjb25zdCBIYXNoX0ZuJgorICAgICAgZ2V0X2hhc2hfZm4oKSBjb25zdDsKKworICAgICAgLy8vIFJldHVybiBjdXJyZW50IGVxX2ZuLgorICAgICAgRXFfRm4mCisgICAgICBnZXRfZXFfZm4oKTsKKworICAgICAgLy8vIFJldHVybiBjdXJyZW50IGNvbnN0IGVxX2ZuLgorICAgICAgY29uc3QgRXFfRm4mCisgICAgICBnZXRfZXFfZm4oKSBjb25zdDsKKworICAgICAgLy8vIFJldHVybiBjdXJyZW50IGNvbWJfaGFzaF9mbi4KKyAgICAgIENvbWJfSGFzaF9GbiYKKyAgICAgIGdldF9jb21iX2hhc2hfZm4oKTsKKworICAgICAgLy8vIFJldHVybiBjdXJyZW50IGNvbnN0IGNvbWJfaGFzaF9mbi4KKyAgICAgIGNvbnN0IENvbWJfSGFzaF9GbiYKKyAgICAgIGdldF9jb21iX2hhc2hfZm4oKSBjb25zdDsKKworICAgICAgLy8vIFJldHVybiBjdXJyZW50IHJlc2l6ZV9wb2xpY3kuCisgICAgICBSZXNpemVfUG9saWN5JgorICAgICAgZ2V0X3Jlc2l6ZV9wb2xpY3koKTsKKworICAgICAgLy8vIFJldHVybiBjdXJyZW50IGNvbnN0IHJlc2l6ZV9wb2xpY3kuCisgICAgICBjb25zdCBSZXNpemVfUG9saWN5JgorICAgICAgZ2V0X3Jlc2l6ZV9wb2xpY3koKSBjb25zdDsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdF9yZWZlcmVuY2Ugcl92YWwpCisgICAgICB7IHJldHVybiBpbnNlcnRfaW1wKHJfdmFsLCB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOyB9CisKKyAgICAgIGlubGluZSBtYXBwZWRfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorCXJldHVybiAoc3Vic2NyaXB0X2ltcChyX2tleSwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKSk7CisjZWxzZQorCWluc2VydChyX2tleSk7CisJcmV0dXJuIHRyYWl0c19iYXNlOjpzX251bGxfdHlwZTsKKyNlbmRpZgorICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBwb2ludF9jb25zdF9pdGVyYXRvcgorICAgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kX2VuZCgpOworCisgICAgICBpbmxpbmUgcG9pbnRfY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmRfZW5kKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlcmFzZShrZXlfY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIGVyYXNlX2lmKFByZWQpOworCisgICAgICB2b2lkCisgICAgICBjbGVhcigpOworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdDsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBlbmQoKTsKKworICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX0hUX01BUF9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBkZWFsbG9jYXRlX2FsbCgpOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZG9fcmVzaXplX2lmX25lZWRlZCgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworCisgICAgICB2b2lkCisgICAgICByZXNpemVfaW1wKHNpemVfdHlwZSk7CisKKyAgICAgIHZvaWQKKyAgICAgIGRvX3Jlc2l6ZShzaXplX3R5cGUpOworCisgICAgICB2b2lkCisgICAgICByZXNpemVfaW1wX25vX2V4Y2VwdGlvbnMoc2l6ZV90eXBlLCBlbnRyeV9wb2ludGVyX2FycmF5LCBzaXplX3R5cGUpOworCisgICAgICBpbmxpbmUgZW50cnlfcG9pbnRlcgorICAgICAgcmVzaXplX2ltcF9ub19leGNlcHRpb25zX3JlYXNzaWduX3BvaW50ZXIoZW50cnlfcG9pbnRlciwKKwkJCQkJCWVudHJ5X3BvaW50ZXJfYXJyYXksCisJCQkJCQlmYWxzZV90eXBlKTsKKworICAgICAgaW5saW5lIGVudHJ5X3BvaW50ZXIKKyAgICAgIHJlc2l6ZV9pbXBfbm9fZXhjZXB0aW9uc19yZWFzc2lnbl9wb2ludGVyKGVudHJ5X3BvaW50ZXIsCisJCQkJCQllbnRyeV9wb2ludGVyX2FycmF5LAorCQkJCQkJdHJ1ZV90eXBlKTsKKworICAgICAgdm9pZAorICAgICAgZGVhbGxvY2F0ZV9saW5rc19pbl9saXN0KGVudHJ5X3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgZW50cnlfcG9pbnRlcgorICAgICAgZ2V0X2VudHJ5KGNvbnN0X3JlZmVyZW5jZSwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSBlbnRyeV9wb2ludGVyCisgICAgICBnZXRfZW50cnkoY29uc3RfcmVmZXJlbmNlLCB0cnVlX3R5cGUpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgcmVsc19lbnRyeShlbnRyeV9wb2ludGVyKTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIGlubGluZSBtYXBwZWRfcmVmZXJlbmNlCisgICAgICBzdWJzY3JpcHRfaW1wKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXksIGZhbHNlX3R5cGUpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisJY29uc3Qgc2l6ZV90eXBlIHBvcyA9IHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpOworCWVudHJ5X3BvaW50ZXIgcF9lID0gbV9lbnRyaWVzW3Bvc107CisJcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisKKwl3aGlsZSAocF9lICE9IDAKKwkgICAgICAgJiYgIWhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShwX2UtPm1fdmFsdWUuZmlyc3QsIHJfa2V5KSkKKwkgIHsKKwkgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOworCSAgICBwX2UgPSBwX2UtPm1fcF9uZXh0OworCSAgfQorCisJcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCWlmIChwX2UgIT0gMCkKKwkgIHsKKwkgICAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhyX2tleSkKKwkgICAgcmV0dXJuIChwX2UtPm1fdmFsdWUuc2Vjb25kKTsKKwkgIH0KKworCVBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChyX2tleSkKKwlyZXR1cm4gaW5zZXJ0X25ld19pbXAodmFsdWVfdHlwZShyX2tleSwgbWFwcGVkX3R5cGUoKSksIHBvcyktPnNlY29uZDsKKyAgICAgIH0KKworICAgICAgaW5saW5lIG1hcHBlZF9yZWZlcmVuY2UKKyAgICAgIHN1YnNjcmlwdF9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgdHJ1ZV90eXBlKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKF9fRklMRV9fLCBfX0xJTkVfXyk7KQorCWNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSk7CisJZW50cnlfcG9pbnRlciBwX2UgPSBtX2VudHJpZXNbcG9zX2hhc2hfcGFpci5maXJzdF07CisJcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisJd2hpbGUgKHBfZSAhPSAwICYmCisJICAgICAgICFoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocF9lLT5tX3ZhbHVlLmZpcnN0LCBwX2UtPm1faGFzaCwKKwkJCQkJICAgIHJfa2V5LCBwb3NfaGFzaF9wYWlyLnNlY29uZCkpCisJICB7CisJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKwkgICAgcF9lID0gcF9lLT5tX3BfbmV4dDsKKwkgIH0KKworCXJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKwlpZiAocF9lICE9IDApCisJICB7CisJICAgIFBCX0RTX0NIRUNLX0tFWV9FWElTVFMocl9rZXkpCisJICAgIHJldHVybiBwX2UtPm1fdmFsdWUuc2Vjb25kOworCSAgfQorCisJUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKHJfa2V5KQorCXJldHVybiBpbnNlcnRfbmV3X2ltcCh2YWx1ZV90eXBlKHJfa2V5LCBtYXBwZWRfdHlwZSgpKSwKKwkJCSAgICAgIHBvc19oYXNoX3BhaXIpLT5zZWNvbmQ7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlLCBmYWxzZV90eXBlKTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlLCB0cnVlX3R5cGUpOworCisgICAgICBpbmxpbmUgcG9pbnRlcgorICAgICAgaW5zZXJ0X25ld19pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBzaXplX3R5cGUgcG9zKQorICAgICAgeworCWlmIChkb19yZXNpemVfaWZfbmVlZGVkKCkpCisJICBwb3MgPSByYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihyX3ZhbCkpOworCisJLy8gRm9sbG93aW5nIGxpbmVzIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbi4KKwllbnRyeV9wb2ludGVyIHBfZSA9IGdldF9lbnRyeShyX3ZhbCwKKwkJCQkgICAgICB0cmFpdHNfYmFzZTo6bV9ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKworCS8vIEF0IHRoaXMgcG9pbnQgbm8gZXhjZXB0aW9ucyBjYW4gYmUgdGhyb3duLgorCXBfZS0+bV9wX25leHQgPSBtX2VudHJpZXNbcG9zXTsKKwltX2VudHJpZXNbcG9zXSA9IHBfZTsKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydGVkKCsrbV9udW1fdXNlZF9lKTsKKworCV9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYocl92YWwpKTspCisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisJcmV0dXJuICZwX2UtPm1fdmFsdWU7CisgICAgICB9CisKKyAgICAgIGlubGluZSBwb2ludGVyCisgICAgICBpbnNlcnRfbmV3X2ltcChjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGNvbXBfaGFzaCYgcl9wb3NfaGFzaF9wYWlyKQorICAgICAgeworCS8vIEZvbGxvd2luZyBsaW5lcyBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisJaWYgKGRvX3Jlc2l6ZV9pZl9uZWVkZWQoKSkKKwkgIHJfcG9zX2hhc2hfcGFpciA9IHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHJfdmFsKSk7CisKKwllbnRyeV9wb2ludGVyIHBfZSA9IGdldF9lbnRyeShyX3ZhbCwKKwkJCQkgICAgICB0cmFpdHNfYmFzZTo6bV9ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKworCS8vIEF0IHRoaXMgcG9pbnQgbm8gZXhjZXB0aW9ucyBjYW4gYmUgdGhyb3duLgorCXBfZS0+bV9oYXNoID0gcl9wb3NfaGFzaF9wYWlyLnNlY29uZDsKKwlwX2UtPm1fcF9uZXh0ID0gbV9lbnRyaWVzW3JfcG9zX2hhc2hfcGFpci5maXJzdF07CisJbV9lbnRyaWVzW3JfcG9zX2hhc2hfcGFpci5maXJzdF0gPSBwX2U7CisJcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRlZCgrK21fbnVtX3VzZWRfZSk7CisJX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KFBCX0RTX1YyRihyX3ZhbCkpOykKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKwlyZXR1cm4gJnBfZS0+bV92YWx1ZTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50ZXIKKyAgICAgIGZpbmRfa2V5X3BvaW50ZXIoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgZmFsc2VfdHlwZSkKKyAgICAgIHsKKwllbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1tyYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KV07CisJcmVzaXplX2Jhc2U6Om5vdGlmeV9maW5kX3NlYXJjaF9zdGFydCgpOworCXdoaWxlIChwX2UgIT0gMCAmJgorCSAgICAgICAhaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLCByX2tleSkpCisJICB7CisJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfY29sbGlzaW9uKCk7CisJICAgIHBfZSA9IHBfZS0+bV9wX25leHQ7CisJICB9CisKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKwlpZiAocF9lID09IDApCisJICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisJZWxzZQorCSAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhyX2tleSkKKyNlbmRpZgorCXJldHVybiAmcF9lLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRlcgorICAgICAgZmluZF9rZXlfcG9pbnRlcihrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5LCB0cnVlX3R5cGUpCisgICAgICB7CisJY29tcF9oYXNoIHBvc19oYXNoX3BhaXIgPSByYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KTsKKwllbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NfaGFzaF9wYWlyLmZpcnN0XTsKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7CisJd2hpbGUgKHBfZSAhPSAwICYmCisJICAgICAgICFoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksCisJCQkJCSAgICBwX2UtPm1faGFzaCwKKwkJCQkJICAgIHJfa2V5LCBwb3NfaGFzaF9wYWlyLnNlY29uZCkpCisJICB7CisJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfY29sbGlzaW9uKCk7CisJICAgIHBfZSA9IHBfZS0+bV9wX25leHQ7CisJICB9CisKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKwlpZiAocF9lID09IDApCisJICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisJZWxzZQorCSAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhyX2tleSkKKyNlbmRpZgorCXJldHVybiAmcF9lLT5tX3ZhbHVlOworICAgICAgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2VfaW5fcG9zX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlLCBzaXplX3R5cGUpOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2VfaW5fcG9zX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlLCBjb25zdCBjb21wX2hhc2gmKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGVyYXNlX2VudHJ5X3BvaW50ZXIoZW50cnlfcG9pbnRlciYpOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgdm9pZAorICAgICAgaW5jX2l0X3N0YXRlKHBvaW50ZXImIHJfcF92YWx1ZSwKKwkJICAgc3RkOjpwYWlyPGVudHJ5X3BvaW50ZXIsIHNpemVfdHlwZT4mIHJfcG9zKSBjb25zdAorICAgICAgeworCWluY19pdF9zdGF0ZSgobWFwcGVkX2NvbnN0X3BvaW50ZXImIClyX3BfdmFsdWUsIHJfcG9zKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBpbmNfaXRfc3RhdGUoY29uc3RfcG9pbnRlciYgcl9wX3ZhbHVlLAorCQkgICBzdGQ6OnBhaXI8ZW50cnlfcG9pbnRlciwgc2l6ZV90eXBlPiYgcl9wb3MpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKHJfcF92YWx1ZSAhPSAwKTsKKwlyX3Bvcy5maXJzdCA9IHJfcG9zLmZpcnN0LT5tX3BfbmV4dDsKKwlpZiAocl9wb3MuZmlyc3QgIT0gMCkKKwkgIHsKKwkgICAgcl9wX3ZhbHVlID0gJnJfcG9zLmZpcnN0LT5tX3ZhbHVlOworCSAgICByZXR1cm47CisJICB9CisKKwlmb3IgKCsrcl9wb3Muc2Vjb25kOyByX3Bvcy5zZWNvbmQgPCBtX251bV9lOyArK3JfcG9zLnNlY29uZCkKKwkgIGlmIChtX2VudHJpZXNbcl9wb3Muc2Vjb25kXSAhPSAwKQorCSAgICB7CisJICAgICAgcl9wb3MuZmlyc3QgPSBtX2VudHJpZXNbcl9wb3Muc2Vjb25kXTsKKwkgICAgICByX3BfdmFsdWUgPSAmcl9wb3MuZmlyc3QtPm1fdmFsdWU7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJcl9wX3ZhbHVlID0gMDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgZ2V0X3N0YXJ0X2l0X3N0YXRlKHBvaW50ZXImIHJfcF92YWx1ZSwKKwkJCSBzdGQ6OnBhaXI8ZW50cnlfcG9pbnRlciwgc2l6ZV90eXBlPiYgcl9wb3MpIGNvbnN0CisgICAgICB7CisJZm9yIChyX3Bvcy5zZWNvbmQgPSAwOyByX3Bvcy5zZWNvbmQgPCBtX251bV9lOyArK3JfcG9zLnNlY29uZCkKKwkgIGlmIChtX2VudHJpZXNbcl9wb3Muc2Vjb25kXSAhPSAwKQorCSAgICB7CisJICAgICAgcl9wb3MuZmlyc3QgPSBtX2VudHJpZXNbcl9wb3Muc2Vjb25kXTsKKwkgICAgICByX3BfdmFsdWUgPSAmcl9wb3MuZmlyc3QtPm1fdmFsdWU7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJcl9wX3ZhbHVlID0gMDsKKyAgICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfZW50cnlfcG9pbnRlcl9hcnJheV92YWxpZChjb25zdCBlbnRyeV9wb2ludGVyX2FycmF5LAorCQkJCSAgICAgICBjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X2VudHJ5X3BvaW50ZXJfdmFsaWQoY29uc3QgZW50cnlfcG9pbnRlciwgdHJ1ZV90eXBlLAorCQkJCSBjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X2VudHJ5X3BvaW50ZXJfdmFsaWQoY29uc3QgZW50cnlfcG9pbnRlciwgZmFsc2VfdHlwZSwKKwkJCQkgY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX0hUX01BUF9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlX2xpc3QoY29uc3RfZW50cnlfcG9pbnRlcikgY29uc3Q7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgZnJpZW5kIGNsYXNzIGl0ZXJhdG9yXzsKKyNlbmRpZgorCisgICAgICBmcmllbmQgY2xhc3MgY29uc3RfaXRlcmF0b3JfOworCisgICAgICBzdGF0aWMgZW50cnlfYWxsb2NhdG9yIAkJc19lbnRyeV9hbGxvY2F0b3I7CisgICAgICBzdGF0aWMgZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IgCXNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3I7CisgICAgICBzdGF0aWMgaXRlcmF0b3IgCQkJc19lbmRfaXQ7CisgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgCQlzX2NvbnN0X2VuZF9pdDsKKyAgICAgIHN0YXRpYyBwb2ludF9pdGVyYXRvciAJCXNfZmluZF9lbmRfaXQ7CisgICAgICBzdGF0aWMgcG9pbnRfY29uc3RfaXRlcmF0b3IgCXNfY29uc3RfZmluZF9lbmRfaXQ7CisKKyAgICAgIHNpemVfdHlwZSAJCQltX251bV9lOworICAgICAgc2l6ZV90eXBlIAkJCW1fbnVtX3VzZWRfZTsKKyAgICAgIGVudHJ5X3BvaW50ZXJfYXJyYXkgCQltX2VudHJpZXM7CisKKyAgICAgIGVudW0KKwl7CisJICBzdG9yZV9oYXNoX29rID0gIVN0b3JlX0hhc2gKKwkJCSAgfHwgIWlzX3NhbWU8SGFzaF9GbiwgX19nbnVfcGJkczo6bnVsbF90eXBlPjo6dmFsdWUKKwl9OworCisgICAgICBQQl9EU19TVEFUSUNfQVNTRVJUKHN0aCwgc3RvcmVfaGFzaF9vayk7CisgICAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZW50cnlfbGlzdF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9zaXplX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZXJhc2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy90cmFjZV9mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19IQVNIX0VRX0ZOX0NfREVDCisjdW5kZWYgUEJfRFNfUkFOR0VEX0hBU0hfRk5fQ19ERUMKKyN1bmRlZiBQQl9EU19DQ19IQVNIX1RSQUlUU19CQVNFCisjdW5kZWYgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMKKyN1bmRlZiBQQl9EU19DQ19IQVNIX05BTUUKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NtcF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY21wX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOGEyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NtcF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDgzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9jbXBfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZW50aXJlIGNvbnRhaW5lciBjb21wYXJpc29uIHJlbGF0ZWQKKyAqICAgIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfSFRfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcj09KGNvbnN0IE90aGVyX0hUX01hcF9UeXBlJiBvdGhlcikgY29uc3QKK3sgcmV0dXJuIGNtcF93aXRoX290aGVyKG90aGVyKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitjbXBfd2l0aF9vdGhlcihjb25zdCBPdGhlcl9NYXBfVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgIHJldHVybiBmYWxzZTsKKworICBmb3IgKHR5cGVuYW1lIE90aGVyX01hcF9UeXBlOjpjb25zdF9pdGVyYXRvciBpdCA9IG90aGVyLmJlZ2luKCk7CisgICAgICAgaXQgIT0gb3RoZXIuZW5kKCk7ICsraXQpCisgICAgeworICAgICAga2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSA9IGtleV9jb25zdF9yZWZlcmVuY2UoUEJfRFNfVjJGKCppdCkpOworCisgICAgICBtYXBwZWRfY29uc3RfcG9pbnRlciBwX21hcHBlZF92YWx1ZSA9CisJY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyYgPigqdGhpcykuCisJZmluZF9rZXlfcG9pbnRlcihyX2tleSwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKKworICAgICAgaWYgKHBfbWFwcGVkX3ZhbHVlID09IDApCisJcmV0dXJuIGZhbHNlOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgaWYgKHBfbWFwcGVkX3ZhbHVlLT5zZWNvbmQgIT0gaXQtPnNlY29uZCkKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfSFRfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvciE9KGNvbnN0IE90aGVyX0hUX01hcF9UeXBlJiBvdGhlcikgY29uc3QKK3sgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25kX2tleV9kdG9yX2VudHJ5X2RlYWx0b3IuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25kX2tleV9kdG9yX2VudHJ5X2RlYWx0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1Y2Y5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbmRfa2V5X2R0b3JfZW50cnlfZGVhbHRvci5ocHAKQEAgLTAsMCArMSw5MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjY19oYXNoX3RhYmxlX21hcF8vY29uZF9rZXlfZHRvcl9lbnRyeV9kZWFsdG9yLmhwcAorICogQ29udGFpbnMgYSBjb25kaXRpb25hbCBrZXkgZGVzdHJ1Y3RvciwgdXNlZCBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgorICovCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBDb25kaXRpb25hbCBkZXkgZGVzdHJ1Y3RvciwgY2NfaGFzaC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIVF9NYXA+CisgICAgY2xhc3MgY29uZF9kZWFsdG9yCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSFRfTWFwOjplbnRyeSAJCWVudHJ5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIVF9NYXA6OmVudHJ5X2FsbG9jYXRvciAJZW50cnlfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIVF9NYXA6OmtleV90eXBlIAlrZXlfdHlwZTsKKworICAgICAgY29uZF9kZWFsdG9yKGVudHJ5X2FsbG9jYXRvciogcF9hLCBlbnRyeSogcF9lKQorICAgICAgOiBtX3BfYShwX2EpLCBtX3BfZShwX2UpLCBtX2tleV9kZXN0cnVjdChmYWxzZSksCisJbV9ub19hY3Rpb25fZGVzdHJ1Y3RvcihmYWxzZSkKKyAgICAgIHsgfQorCisgICAgICBpbmxpbmUKKyAgICAgIH5jb25kX2RlYWx0b3IoKTsKKworICAgICAgdm9pZAorICAgICAgc2V0X2tleV9kZXN0cnVjdCgpCisgICAgICB7IG1fa2V5X2Rlc3RydWN0ID0gdHJ1ZTsgfQorCisgICAgICB2b2lkCisgICAgICBzZXRfbm9fYWN0aW9uX2Rlc3RydWN0b3IoKQorICAgICAgeyBtX25vX2FjdGlvbl9kZXN0cnVjdG9yID0gdHJ1ZTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgZW50cnlfYWxsb2NhdG9yKiBjb25zdCAJCQltX3BfYTsKKyAgICAgIGVudHJ5KiBjb25zdCAJCQkJbV9wX2U7CisKKyAgICAgIGJvb2wgCQkJCQltX2tleV9kZXN0cnVjdDsKKyAgICAgIGJvb2wgCQkJCQltX25vX2FjdGlvbl9kZXN0cnVjdG9yOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIVF9NYXA+CisgICAgaW5saW5lCisgICAgY29uZF9kZWFsdG9yPEhUX01hcD46OgorICAgIH5jb25kX2RlYWx0b3IoKQorICAgIHsKKyAgICAgIGlmIChtX25vX2FjdGlvbl9kZXN0cnVjdG9yKQorCXJldHVybjsKKyAgICAgIGlmIChtX2tleV9kZXN0cnVjdCkKKwltX3BfZS0+bV92YWx1ZS5maXJzdC5+a2V5X3R5cGUoKTsKKyAgICAgIG1fcF9hLT5kZWFsbG9jYXRlKG1fcF9lLCAxKTsKKyAgICB9CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmUzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxOTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgY29uc3RydWN0b3JzLCBkZXN0cnVjdG9yLAorICogYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6ZW50cnlfYWxsb2NhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19lbnRyeV9hbGxvY2F0b3I7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6ZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2VudHJ5X3BvaW50ZXJfYWxsb2NhdG9yOworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIHdoaWxlIChmaXJzdF9pdCAhPSBsYXN0X2l0KQorICAgIGluc2VydCgqKGZpcnN0X2l0KyspKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0NDX0hBU0hfTkFNRSgpIDoKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLAorICBtX251bV9lKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksIG1fbnVtX3VzZWRfZSgwKSwKKyAgbV9lbnRyaWVzKHNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DQ19IQVNIX05BTUUoY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuKSA6CisgIHJhbmdlZF9oYXNoX2ZuX2Jhc2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpLCByX2hhc2hfZm4pLAorICBtX251bV9lKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksIG1fbnVtX3VzZWRfZSgwKSwKKyAgbV9lbnRyaWVzKHNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DQ19IQVNIX05BTUUoY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuLCBjb25zdCBFcV9GbiYgcl9lcV9mbikgOgorICBQQl9EU19IQVNIX0VRX0ZOX0NfREVDKHJfZXFfZm4pLAorICByYW5nZWRfaGFzaF9mbl9iYXNlKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSwgcl9oYXNoX2ZuKSwKKyAgbV9udW1fZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLCBtX251bV91c2VkX2UoMCksCisgIG1fZW50cmllcyhzX2VudHJ5X3BvaW50ZXJfYWxsb2NhdG9yLmFsbG9jYXRlKG1fbnVtX2UpKQoreworICBzdGQ6OmZpbGwobV9lbnRyaWVzLCBtX2VudHJpZXMgKyBtX251bV9lLCAoZW50cnlfcG9pbnRlcikwKTsKKyAgUmVzaXplX1BvbGljeTo6bm90aWZ5X2NsZWFyZWQoKTsKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQobV9udW1fZSk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0NfSEFTSF9OQU1FKGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgY29uc3QgRXFfRm4mIHJfZXFfZm4sIAorCQkgICBjb25zdCBDb21iX0hhc2hfRm4mIHJfY29tYl9oYXNoX2ZuKSA6CisgIFBCX0RTX0hBU0hfRVFfRk5fQ19ERUMocl9lcV9mbiksCisgIHJhbmdlZF9oYXNoX2ZuX2Jhc2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpLAorCQkgICAgICByX2hhc2hfZm4sIHJfY29tYl9oYXNoX2ZuKSwKKyAgbV9udW1fZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLCBtX251bV91c2VkX2UoMCksCisgIG1fZW50cmllcyhzX2VudHJ5X3BvaW50ZXJfYWxsb2NhdG9yLmFsbG9jYXRlKG1fbnVtX2UpKQoreworICBpbml0aWFsaXplKCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfQ0NfSEFTSF9OQU1FKGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgY29uc3QgRXFfRm4mIHJfZXFfZm4sIAorCQkgICBjb25zdCBDb21iX0hhc2hfRm4mIHJfY29tYl9oYXNoX2ZuLCAKKwkJICAgY29uc3QgUmVzaXplX1BvbGljeSYgcl9yZXNpemVfcG9saWN5KSA6CisgIFBCX0RTX0hBU0hfRVFfRk5fQ19ERUMocl9lcV9mbiksCisgIFJlc2l6ZV9Qb2xpY3kocl9yZXNpemVfcG9saWN5KSwKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksCisJCSAgICAgIHJfaGFzaF9mbiwgcl9jb21iX2hhc2hfZm4pLAorICBtX251bV9lKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksIG1fbnVtX3VzZWRfZSgwKSwKKyAgbV9lbnRyaWVzKHNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19DQ19IQVNIX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisgIFBCX0RTX0hBU0hfRVFfRk5fQ19ERUMob3RoZXIpLAorICByZXNpemVfYmFzZShvdGhlciksIHJhbmdlZF9oYXNoX2ZuX2Jhc2Uob3RoZXIpLAorICBtX251bV9lKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksIG1fbnVtX3VzZWRfZSgwKSwKKyAgbV9lbnRyaWVzKHNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgX190cnkKKyAgICAgIHsKKwljb3B5X2Zyb21fcmFuZ2Uob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCkpOworICAgICAgfQorICAgIF9fY2F0Y2goLi4uKQorICAgICAgeworCWRlYWxsb2NhdGVfYWxsKCk7CisJX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgICB9CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorflBCX0RTX0NDX0hBU0hfTkFNRSgpCit7IGRlYWxsb2NhdGVfYWxsKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorCisgIHN0ZDo6c3dhcChtX2VudHJpZXMsIG90aGVyLm1fZW50cmllcyk7CisgIHN0ZDo6c3dhcChtX251bV9lLCBvdGhlci5tX251bV9lKTsKKyAgc3RkOjpzd2FwKG1fbnVtX3VzZWRfZSwgb3RoZXIubV9udW1fdXNlZF9lKTsKKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZTo6c3dhcChvdGhlcik7CisgIGhhc2hfZXFfZm5fYmFzZTo6c3dhcChvdGhlcik7CisgIHJlc2l6ZV9iYXNlOjpzd2FwKG90aGVyKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OnN3YXAob3RoZXIpKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2RlYWxsb2NhdGVfYWxsKCkKK3sKKyAgY2xlYXIoKTsKKyAgc19lbnRyeV9wb2ludGVyX2FsbG9jYXRvci5kZWFsbG9jYXRlKG1fZW50cmllcywgbV9udW1fZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0aWFsaXplKCkKK3sKKyAgc3RkOjpmaWxsKG1fZW50cmllcywgbV9lbnRyaWVzICsgbV9udW1fZSwgZW50cnlfcG9pbnRlcigwKSk7CisgIFJlc2l6ZV9Qb2xpY3k6Om5vdGlmeV9yZXNpemVkKG1fbnVtX2UpOworICBSZXNpemVfUG9saWN5Ojpub3RpZnlfY2xlYXJlZCgpOworICByYW5nZWRfaGFzaF9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChtX251bV9lKTsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkYTQ0MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3IsCisgKiAgICBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb25zdHJ1Y3Rvcl9pbnNlcnRfbmV3X2ltcChtYXBwZWRfY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBzaXplX3R5cGUgcG9zLCAKKwkJCSAgIGZhbHNlX3R5cGUpCit7CisgIC8vIEZvbGxvd2luZyBsaW5lcyBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisgIGVudHJ5X3BvaW50ZXIgcCA9IGdldF9lbnRyeShyX3ZhbCwgdHJhaXRzX2Jhc2U6OnNfbm9fdGhyb3dfY29waWVzX2luZGljYXRvcik7CisKKyAgLy8gQXQgdGhpcyBwb2ludCBubyBleGNlcHRpb25zIGNhbiBiZSB0aHJvd24uCisgIHAtPm1fcF9uZXh0ID0gbV9lbnRyaWVzW3Bvc107CisgIG1fZW50cmllc1twb3NdID0gcDsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KHJfa2V5KTspCit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NTU4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgY29uc3RydWN0b3JzLCBkZXN0cnVjdG9yLAorICogYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29uc3RydWN0b3JfaW5zZXJ0X25ld19pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBzaXplX3R5cGUgcG9zLCB0cnVlX3R5cGUpCit7CisgIC8vIEZvbGxvd2luZyBsaW5lcyBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisgIGVudHJ5X3BvaW50ZXIgcCA9IGdldF9lbnRyeShyX3ZhbCwgdHJhaXRzX2Jhc2U6OnNfbm9fdGhyb3dfY29waWVzX2luZGljYXRvcik7CisKKyAgLy8gQXQgdGhpcyBwb2ludCBubyBleGNlcHRpb25zIGNhbiBiZSB0aHJvd24uCisgIHAtPm1fcF9uZXh0ID0gbV9lbnRyaWVzW3Bvc107CisgIHAtPm1faGFzaCA9IHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoKGtleV9jb25zdF9yZWZlcmVuY2UpKFBCX0RTX1YyRihwLT5tX3ZhbHVlKSkpLnNlY29uZDsKKworICBtX2VudHJpZXNbcG9zXSA9IHA7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhyX2tleSk7KQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmYmI5YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZGVidWdfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3NiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjY19oYXNoX3RhYmxlX21hcF8vZGVidWdfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZGVidWctbW9kZSBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBkZWJ1Z19iYXNlOjpjaGVja19zaXplKG1fbnVtX3VzZWRfZSwgX19maWxlLCBfX2xpbmUpOworICBhc3NlcnRfZW50cnlfcG9pbnRlcl9hcnJheV92YWxpZChtX2VudHJpZXMsIF9fZmlsZSwgX19saW5lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9lbnRyeV9wb2ludGVyX2FycmF5X3ZhbGlkKGNvbnN0IGVudHJ5X3BvaW50ZXJfYXJyYXkgYV9wX2VudHJpZXMsCisJCQkJIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgc2l6ZV90eXBlIGl0ZXJhdGVkX251bV91c2VkX2UgPSAwOworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBtX251bV9lOyArK3BvcykKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfZSA9IGFfcF9lbnRyaWVzW3Bvc107CisgICAgICB3aGlsZSAocF9lICE9IDApCisgICAgICAgIHsKKwkgICsraXRlcmF0ZWRfbnVtX3VzZWRfZTsKKwkgIGFzc2VydF9lbnRyeV9wb2ludGVyX3ZhbGlkKHBfZSwgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yLAorCQkJCSAgICAgX19maWxlLCBfX2xpbmUpOworCSAgcF9lID0gcF9lLT5tX3BfbmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgUEJfRFNfREVCVUdfVkVSSUZZKGl0ZXJhdGVkX251bV91c2VkX2UgPT0gbV9udW1fdXNlZF9lKTsKK30KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2RlYnVnX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZGVidWdfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcD4KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzRiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2RlYnVnX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjY19oYXNoX3RhYmxlX21hcF8vZGVidWdfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBkZWJ1Zy1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9lbnRyeV9wb2ludGVyX3ZhbGlkKGNvbnN0IGVudHJ5X3BvaW50ZXIgcCwgZmFsc2VfdHlwZSwKKwkJCSAgIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sgZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2V4aXN0cyhQQl9EU19WMkYocC0+bV92YWx1ZSksIF9fZmlsZSwgX19saW5lKTsgfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzIxZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2RlYnVnX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZGVidWctbW9kZSBmdW5jdGlvbnMuCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfZW50cnlfcG9pbnRlcl92YWxpZChjb25zdCBlbnRyeV9wb2ludGVyIHBfZSwgdHJ1ZV90eXBlLAorCQkJICAgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLCBfX2ZpbGUsIF9fbGluZSk7CisgIGNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSk7CisgIFBCX0RTX0RFQlVHX1ZFUklGWShwX2UtPm1faGFzaCA9PSBwb3NfaGFzaF9wYWlyLnNlY29uZCk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZW50cnlfbGlzdF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZW50cnlfbGlzdF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTk4M2I5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lbnRyeV9saXN0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsOTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2VudHJ5X2xpc3RfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZW50cnktbGlzdCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZGVhbGxvY2F0ZV9saW5rc19pbl9saXN0KGVudHJ5X3BvaW50ZXIgcF9lKQoreworICB3aGlsZSAocF9lICE9IDApCisgICAgeworICAgICAgZW50cnlfcG9pbnRlciBwX2RlYWxsb2NfZSA9IHBfZTsKKyAgICAgIHBfZSA9IHBfZS0+bV9wX25leHQ7CisgICAgICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfZGVhbGxvY19lLCAxKTsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmVudHJ5X3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9lbnRyeShjb25zdF9yZWZlcmVuY2Ugcl92YWwsIHRydWVfdHlwZSkKK3sKKyAgLy8gRm9sbG93aW5nIGxpbmUgbWlnaHQgdGhyb3cgYW4gZXhjZXB0aW9uLgorICBlbnRyeV9wb2ludGVyIHBfZSA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworCisgIC8vIEZvbGxvd2luZyBsaW5lcyogY2Fubm90KiB0aHJvdyBhbiBleGNlcHRpb24uCisgIG5ldyAoJnBfZS0+bV92YWx1ZSkgdmFsdWVfdHlwZShyX3ZhbCk7CisgIHJldHVybiBwX2U7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmVudHJ5X3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9lbnRyeShjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpCit7CisgIC8vIEZvbGxvd2luZyBsaW5lIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbi4KKyAgZW50cnlfcG9pbnRlciBwX2UgPSBzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKyAgY29uZF9kZWFsdG9yX3QgY29uZChwX2UpOworCisgIC8vIEZvbGxvd2luZyBsaW5lcyBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCisgIG5ldyAoJnBfZS0+bV92YWx1ZSkgdmFsdWVfdHlwZShyX3ZhbCk7CisgIGNvbmQuc2V0X25vX2FjdGlvbigpOworICByZXR1cm4gcF9lOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlbHNfZW50cnkoZW50cnlfcG9pbnRlciBwX2UpCit7CisgIC8vIFRoZSBmb2xsb3dpbmcgbGluZXMgY2Fubm90IHRocm93IGV4Y2VwdGlvbnMgKHVubGVzcyBpZiBrZXktZGF0YSBkdG9ycyBkbykuCisgIHBfZS0+bV92YWx1ZS5+dmFsdWVfdHlwZSgpOworICBzX2VudHJ5X2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfZSwgMSk7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjdlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBlcmFzZSByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2VudHJ5X3BvaW50ZXIoZW50cnlfcG9pbnRlciYgcl9wX2UpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6ZXJhc2VfZXhpc3RpbmcoUEJfRFNfVjJGKHJfcF9lLT5tX3ZhbHVlKSkpOworCisgIGVudHJ5X3BvaW50ZXIgcF9lID0gcl9wX2U7CisgIHJfcF9lID0gcl9wX2UtPm1fcF9uZXh0OworICByZWxzX2VudHJ5KHBfZSk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX251bV91c2VkX2UgPiAwKTsKKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZWQoLS1tX251bV91c2VkX2UpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIHNpemVfdHlwZSBudW1fZXJzZCA9IDA7CisgIGZvciAoc2l6ZV90eXBlIHBvcyA9IDA7IHBvcyA8IG1fbnVtX2U7ICsrcG9zKQorICAgIHsKKyAgICAgIHdoaWxlIChtX2VudHJpZXNbcG9zXSAhPSAwICYmIHByZWQobV9lbnRyaWVzW3Bvc10tPm1fdmFsdWUpKQorICAgICAgICB7CisJICArK251bV9lcnNkOworCSAgZW50cnlfcG9pbnRlciBwX25leHRfZSA9IG1fZW50cmllc1twb3NdLT5tX3BfbmV4dDsKKwkgIGVyYXNlX2VudHJ5X3BvaW50ZXIobV9lbnRyaWVzW3Bvc10pOworCSAgbV9lbnRyaWVzW3Bvc10gPSBwX25leHRfZTsKKyAgICAgICAgfQorCisgICAgICBlbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NdOworICAgICAgd2hpbGUgKHBfZSAhPSAwICYmIHBfZS0+bV9wX25leHQgIT0gMCkKKyAgICAgICAgeworCSAgaWYgKHByZWQocF9lLT5tX3BfbmV4dC0+bV92YWx1ZSkpCisgICAgICAgICAgICB7CisJICAgICAgKytudW1fZXJzZDsKKwkgICAgICBlcmFzZV9lbnRyeV9wb2ludGVyKHBfZS0+bV9wX25leHQpOworICAgICAgICAgICAgfQorCSAgZWxzZQorCSAgICBwX2UgPSBwX2UtPm1fcF9uZXh0OworICAgICAgICB9CisgICAgfQorCisgIGRvX3Jlc2l6ZV9pZl9uZWVkZWRfbm9fdGhyb3coKTsKKyAgcmV0dXJuIG51bV9lcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBtX251bV9lOyArK3BvcykKKyAgICB3aGlsZSAobV9lbnRyaWVzW3Bvc10gIT0gMCkKKyAgICAgIGVyYXNlX2VudHJ5X3BvaW50ZXIobV9lbnRyaWVzW3Bvc10pOworICBkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCk7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfY2xlYXJlZCgpOworfQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZXJhc2Vfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwPgorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2MTAyNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZXJhc2Vfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjY19oYXNoX3RhYmxlX21hcF8vZXJhc2Vfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBlcmFzZSByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgbm90IHN0b3JlZC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZXR1cm4gZXJhc2VfaW5fcG9zX2ltcChyX2tleSwgcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2luX3Bvc19pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgc2l6ZV90eXBlIHBvcykKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGVudHJ5X3BvaW50ZXIgcF9lID0gbV9lbnRyaWVzW3Bvc107CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX3N0YXJ0KCk7CisgIGlmIChwX2UgPT0gMCkKKyAgICB7CisgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKyAgICAgIFBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChyX2tleSkKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBpZiAoaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLCByX2tleSkpCisgICAgeworICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisgICAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKHJfa2V5KQorICAgICAgZXJhc2VfZW50cnlfcG9pbnRlcihtX2VudHJpZXNbcG9zXSk7CisgICAgICBkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCk7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV4dF9lID0gcF9lLT5tX3BfbmV4dDsKKyAgICAgIGlmIChwX25leHRfZSA9PSAwKQorCXsKKwkgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworCSAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKHJfa2V5KQorCSAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisJICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgICBpZiAoaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25leHRfZS0+bV92YWx1ZSksIHJfa2V5KSkKKwl7CisJICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKwkgIFBCX0RTX0NIRUNLX0tFWV9FWElTVFMocl9rZXkpCisJICBlcmFzZV9lbnRyeV9wb2ludGVyKHBfZS0+bV9wX25leHQpOworCSAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworCSAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKyAgICAgIHBfZSA9IHBfbmV4dF9lOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZXJhc2Vfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZXJhc2Vfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU1YjUzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsOTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2VyYXNlX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZXJhc2UgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIHN0b3JlZC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2luX3Bvc19pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgY29uc3QgY29tcF9oYXNoJiByX3Bvc19oYXNoX3BhaXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBlbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1tyX3Bvc19oYXNoX3BhaXIuZmlyc3RdOworICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOworICBpZiAocF9lID09IDApCisgICAgeworICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisgICAgICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgaWYgKGhhc2hfZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSwgcF9lLT5tX2hhc2gsCisJCQkJICByX2tleSwgcl9wb3NfaGFzaF9wYWlyLnNlY29uZCkpCisgICAgeworICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisgICAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKHJfa2V5KQorICAgICAgZXJhc2VfZW50cnlfcG9pbnRlcihtX2VudHJpZXNbcl9wb3NfaGFzaF9wYWlyLmZpcnN0XSk7CisgICAgICBkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCk7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV4dF9lID0gcF9lLT5tX3BfbmV4dDsKKyAgICAgIGlmIChwX25leHRfZSA9PSAwKQorCXsKKwkgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworCSAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKHJfa2V5KQorCSAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisJICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgICBpZiAoaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25leHRfZS0+bV92YWx1ZSksCisJCQkJICAgICAgcF9uZXh0X2UtPm1faGFzaCwgcl9rZXksCisJCQkJICAgICAgcl9wb3NfaGFzaF9wYWlyLnNlY29uZCkpCisJeworCSAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisJICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKHJfa2V5KQorCSAgZXJhc2VfZW50cnlfcG9pbnRlcihwX2UtPm1fcF9uZXh0KTsKKwkgIGRvX3Jlc2l6ZV9pZl9uZWVkZWRfbm9fdGhyb3coKTsKKwkgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfY29sbGlzaW9uKCk7CisgICAgICBwX2UgPSBwX25leHRfZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVlYzliNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDcxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGZpbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiBmaW5kX2tleV9wb2ludGVyKHJfa2V5LCB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMmID4oKnRoaXMpLmZpbmRfa2V5X3BvaW50ZXIocl9rZXksIAorCQkJCQl0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9lbmQoKQoreyByZXR1cm4gMDsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9lbmQoKSBjb25zdAoreyByZXR1cm4gMDsgfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2ZpbmRfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vZmluZF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YzRhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2ZpbmRfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDQxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9maW5kX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgZmluZCByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgc3RvcmVkLgorICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5mb19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5mb19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDEyNTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGVudGlyZSBjb250YWluZXIgaW5mbyByZWxhdGVkCisgKiBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitzaXplKCkgY29uc3QKK3sgcmV0dXJuIG1fbnVtX3VzZWRfZTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21heF9zaXplKCkgY29uc3QKK3sgcmV0dXJuIG1fZW50cnlfYWxsb2NhdG9yLm1heF9zaXplKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlbXB0eSgpIGNvbnN0Cit7IHJldHVybiAoc2l6ZSgpID09IDApOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlcl9IVF9NYXBfVHlwZT4KK2Jvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK29wZXJhdG9yPT0oY29uc3QgT3RoZXJfSFRfTWFwX1R5cGUmIG90aGVyKSBjb25zdAoreyByZXR1cm4gY21wX3dpdGhfb3RoZXIob3RoZXIpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlcl9NYXBfVHlwZT4KK2Jvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NtcF93aXRoX290aGVyKGNvbnN0IE90aGVyX01hcF9UeXBlJiBvdGhlcikgY29uc3QKK3sKKyAgaWYgKHNpemUoKSAhPSBvdGhlci5zaXplKCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGZvciAodHlwZW5hbWUgT3RoZXJfTWFwX1R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb3RoZXIuYmVnaW4oKTsKKyAgICAgICBpdCAhPSBvdGhlci5lbmQoKTsgKytpdCkKKyAgICB7CisgICAgICBrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5ID0oa2V5X2NvbnN0X3JlZmVyZW5jZSlQQl9EU19WMkYoKml0KTsKKyAgICAgIG1hcHBlZF9jb25zdF9wb2ludGVyIHBfbWFwcGVkX3ZhbHVlID0KKwljb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDJiA+KCp0aGlzKS4KKwlmaW5kX2tleV9wb2ludGVyKHJfa2V5LCB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworCisgICAgICBpZiAocF9tYXBwZWRfdmFsdWUgPT0gMCkKKwlyZXR1cm4gZmFsc2U7CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICBpZiAocF9tYXBwZWRfdmFsdWUtPnNlY29uZCAhPSBpdC0+c2Vjb25kKQorCXJldHVybiBmYWxzZTsKKyNlbmRpZiAKKyAgICB9CisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJfSFRfTWFwX1R5cGU+Citib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvciE9KGNvbnN0IE90aGVyX0hUX01hcF9UeXBlJiBvdGhlcikgY29uc3QKK3sgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzY2ODE0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw0MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGluc2VydCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNmQwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGluc2VydCByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgbm90IHN0b3JlZC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHN0ZDo6cGFpcjx0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IsIGJvb2w+CitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfaW1wKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgZmFsc2VfdHlwZSkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkgPSBQQl9EU19WMkYocl92YWwpOworICBjb25zdCBzaXplX3R5cGUgcG9zID0gcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSk7CisgIGVudHJ5X3BvaW50ZXIgcF9lID0gbV9lbnRyaWVzW3Bvc107CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpOworCisgIHdoaWxlIChwX2UgIT0gMCAmJiAhaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLCAKKwkJCQkJCSAgICAgcl9rZXkpKQorICAgIHsKKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKyAgICAgIHBfZSA9IHBfZS0+bV9wX25leHQ7CisgICAgfQorCisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKyAgaWYgKHBfZSAhPSAwKQorICAgIHsKKyAgICAgIFBCX0RTX0NIRUNLX0tFWV9FWElTVFMocl9rZXkpCisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoJnBfZS0+bV92YWx1ZSwgZmFsc2UpOworICAgIH0KKworICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbnNlcnRfbmV3X2ltcChyX3ZhbCwgcG9zKSwgdHJ1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTY1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGluc2VydCByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgc3RvcmVkLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgc3RkOjpwYWlyPHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvciwgYm9vbD4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCB0cnVlX3R5cGUpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBrZXlfY29uc3RfcmVmZXJlbmNlIGtleSA9IFBCX0RTX1YyRihyX3ZhbCk7CisgIGNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gcmFuZ2VkX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShrZXkpOworICBlbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NfaGFzaF9wYWlyLmZpcnN0XTsKKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgd2hpbGUgKHBfZSAhPSAwICYmICFoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksCisJCQkJCQkgICAgIHBfZS0+bV9oYXNoLAorCQkJCQkJICAgIGtleSwgcG9zX2hhc2hfcGFpci5zZWNvbmQpKQorICAgIHsKKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKyAgICAgIHBfZSA9IHBfZS0+bV9wX25leHQ7CisgICAgfQorCisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKyAgaWYgKHBfZSAhPSAwKQorICAgIHsKKyAgICAgIFBCX0RTX0NIRUNLX0tFWV9FWElTVFMoa2V5KQorICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCZwX2UtPm1fdmFsdWUsIGZhbHNlKTsKKyAgICB9CisKKyAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKGtleSkKKyAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluc2VydF9uZXdfaW1wKHJfdmFsLCBwb3NfaGFzaF9wYWlyKSwgdHJ1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2ZDE2MAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsODMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBpdGVyYXRvcnMgcmVsYXRlZCBmdW5jdGlvbnMsIGUuZy4sCisgKiBiZWdpbigpLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2VuZF9pdDsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfY29uc3RfZW5kX2l0OworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW4oKQoreworICBwb2ludGVyIHBfdmFsdWU7CisgIHN0ZDo6cGFpcjxlbnRyeV9wb2ludGVyLCBzaXplX3R5cGU+IHBvczsKKyAgZ2V0X3N0YXJ0X2l0X3N0YXRlKHBfdmFsdWUsIHBvcyk7CisgIHJldHVybiBpdGVyYXRvcihwX3ZhbHVlLCBwb3MsIHRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW5kKCkKK3sgcmV0dXJuIHNfZW5kX2l0OyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpIGNvbnN0Cit7CisgIHBvaW50ZXIgcF92YWx1ZTsKKyAgc3RkOjpwYWlyPGVudHJ5X3BvaW50ZXIsIHNpemVfdHlwZT4gcG9zOworICBnZXRfc3RhcnRfaXRfc3RhdGUocF92YWx1ZSwgcG9zKTsKKyAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHBfdmFsdWUsIHBvcywgdGhpcyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreyByZXR1cm4gc19jb25zdF9lbmRfaXQ7IH0KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MDViYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw4OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBjY19oYXNoX3RhYmxlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyBwb2xpY3kgYWNjZXNzCisgKiAgICBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK0hhc2hfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2hhc2hfZm4oKQoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IEhhc2hfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2hhc2hfZm4oKSBjb25zdAoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK0VxX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9lcV9mbigpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgRXFfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2VxX2ZuKCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitDb21iX0hhc2hfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2NvbWJfaGFzaF9mbigpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgQ29tYl9IYXNoX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jb21iX2hhc2hfZm4oKSBjb25zdAoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1Jlc2l6ZV9Qb2xpY3kmIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X3Jlc2l6ZV9wb2xpY3koKQoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IFJlc2l6ZV9Qb2xpY3kmIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X3Jlc2l6ZV9wb2xpY3koKSBjb25zdAoreyByZXR1cm4gKnRoaXM7IH0KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcmVzaXplX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkZmVmMgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcmVzaXplX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTM0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBjY19odF9tYXBfJ3MgcmVzaXplIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZG9fcmVzaXplX2lmX25lZWRlZCgpCit7CisgIGlmICghcmVzaXplX2Jhc2U6OmlzX3Jlc2l6ZV9uZWVkZWQoKSkKKyAgICByZXR1cm4gZmFsc2U7CisgIHJlc2l6ZV9pbXAocmVzaXplX2Jhc2U6OmdldF9uZXdfc2l6ZShtX251bV9lLCBtX251bV91c2VkX2UpKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citkb19yZXNpemUoc2l6ZV90eXBlIGxlbikKK3sgcmVzaXplX2ltcChyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUobGVuKSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCkKK3sKKyAgaWYgKCFyZXNpemVfYmFzZTo6aXNfcmVzaXplX25lZWRlZCgpKQorICAgIHJldHVybjsKKworICBfX3RyeQorICAgIHsKKyAgICAgIHJlc2l6ZV9pbXAocmVzaXplX2Jhc2U6OmdldF9uZXdfc2l6ZShtX251bV9lLCBtX251bV91c2VkX2UpKTsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsgfQorCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVzaXplX2ltcChzaXplX3R5cGUgbmV3X3NpemUpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBpZiAobmV3X3NpemUgPT0gbV9udW1fZSkKKyAgICByZXR1cm47CisKKyAgY29uc3Qgc2l6ZV90eXBlIG9sZF9zaXplID0gbV9udW1fZTsKKyAgZW50cnlfcG9pbnRlcl9hcnJheSBhX3BfZW50cmllc19yZXNpemVkOworCisgIC8vIEZvbGxvd2luZyBsaW5lIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbi4KKyAgcmFuZ2VkX2hhc2hfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQobmV3X3NpemUpOworCisgIF9fdHJ5CisgICAgeworICAgICAgLy8gRm9sbG93aW5nIGxpbmUgbWlnaHQgdGhyb3cgYW4gZXhjZXB0aW9uLgorICAgICAgYV9wX2VudHJpZXNfcmVzaXplZCA9IHNfZW50cnlfcG9pbnRlcl9hbGxvY2F0b3IuYWxsb2NhdGUobmV3X3NpemUpOworICAgICAgbV9udW1fZSA9IG5ld19zaXplOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgcmFuZ2VkX2hhc2hfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQob2xkX3NpemUpOworICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgfQorCisgIC8vIEF0IHRoaXMgcG9pbnQgbm8gZXhjZXB0aW9ucyBjYW4gYmUgdGhyb3duLgorICByZXNpemVfaW1wX25vX2V4Y2VwdGlvbnMobmV3X3NpemUsIGFfcF9lbnRyaWVzX3Jlc2l6ZWQsIG9sZF9zaXplKTsKKyAgUmVzaXplX1BvbGljeTo6bm90aWZ5X3Jlc2l6ZWQobmV3X3NpemUpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3Jlc2l6ZV9pbXBfbm9fZXhjZXB0aW9ucyhzaXplX3R5cGUgbmV3X3NpemUsIGVudHJ5X3BvaW50ZXJfYXJyYXkgYV9wX2VudHJpZXNfcmVzaXplZCwgc2l6ZV90eXBlIG9sZF9zaXplKQoreworICBzdGQ6OmZpbGwoYV9wX2VudHJpZXNfcmVzaXplZCwgYV9wX2VudHJpZXNfcmVzaXplZCArIG1fbnVtX2UsCisJICAgIGVudHJ5X3BvaW50ZXIoMCkpOworCisgIGZvciAoc2l6ZV90eXBlIHBvcyA9IDA7IHBvcyA8IG9sZF9zaXplOyArK3BvcykKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfZSA9IG1fZW50cmllc1twb3NdOworICAgICAgd2hpbGUgKHBfZSAhPSAwKQorCXBfZSA9IHJlc2l6ZV9pbXBfbm9fZXhjZXB0aW9uc19yZWFzc2lnbl9wb2ludGVyKHBfZSwgYV9wX2VudHJpZXNfcmVzaXplZCwgIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisgICAgfQorCisgIG1fbnVtX2UgPSBuZXdfc2l6ZTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfZW50cnlfcG9pbnRlcl9hcnJheV92YWxpZChhX3BfZW50cmllc19yZXNpemVkLAorCQkJCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7KQorICBzX2VudHJ5X3BvaW50ZXJfYWxsb2NhdG9yLmRlYWxsb2NhdGUobV9lbnRyaWVzLCBvbGRfc2l6ZSk7CisgIG1fZW50cmllcyA9IGFfcF9lbnRyaWVzX3Jlc2l6ZWQ7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcmVzaXplX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vcmVzaXplX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTgyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIHJlc2l6ZSByZWxhdGVkIGZ1bmN0aW9ucywgd2hlbiB0aGUKKyAqIGhhc2ggdmFsdWUgaXMgbm90IHN0b3JlZC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CityZXNpemVfaW1wX25vX2V4Y2VwdGlvbnNfcmVhc3NpZ25fcG9pbnRlcihlbnRyeV9wb2ludGVyIHBfZSwgZW50cnlfcG9pbnRlcl9hcnJheSBhX3BfZW50cmllc19yZXNpemVkLCBmYWxzZV90eXBlKQoreworICBjb25zdCBzaXplX3R5cGUgaGFzaF9wb3MgPQorICAgIHJhbmdlZF9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSkpOworCisgIGVudHJ5X3BvaW50ZXIgY29uc3QgcF9uZXh0X2UgPSBwX2UtPm1fcF9uZXh0OworICBwX2UtPm1fcF9uZXh0ID0gYV9wX2VudHJpZXNfcmVzaXplZFtoYXNoX3Bvc107CisgIGFfcF9lbnRyaWVzX3Jlc2l6ZWRbaGFzaF9wb3NdID0gcF9lOworICByZXR1cm4gcF9uZXh0X2U7Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGFlN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGNjX2h0X21hcF8ncyByZXNpemUgcmVsYXRlZCBmdW5jdGlvbnMsIHdoZW4gdGhlCisgKiBoYXNoIHZhbHVlIGlzIHN0b3JlZC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjplbnRyeV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CityZXNpemVfaW1wX25vX2V4Y2VwdGlvbnNfcmVhc3NpZ25fcG9pbnRlcihlbnRyeV9wb2ludGVyIHBfZSwgZW50cnlfcG9pbnRlcl9hcnJheSBhX3BfZW50cmllc19yZXNpemVkLCB0cnVlX3R5cGUpCit7CisgIGNvbnN0IGNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0KKyAgICByYW5nZWRfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLCBwX2UtPm1faGFzaCk7CisKKyAgZW50cnlfcG9pbnRlciBjb25zdCBwX25leHRfZSA9IHBfZS0+bV9wX25leHQ7CisgIHBfZS0+bV9wX25leHQgPSBhX3BfZW50cmllc19yZXNpemVkW3Bvc19oYXNoX3BhaXIuZmlyc3RdOworICBhX3BfZW50cmllc19yZXNpemVkW3Bvc19oYXNoX3BhaXIuZmlyc3RdID0gcF9lOworICByZXR1cm4gcF9uZXh0X2U7Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3NpemVfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3NpemVfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkN2U4YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vc2l6ZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGNjX2hhc2hfdGFibGVfbWFwXy9zaXplX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGVudGlyZSBjb250YWluZXIgc2l6ZSByZWxhdGVkCisgKiBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitzaXplKCkgY29uc3QKK3sgcmV0dXJuIG1fbnVtX3VzZWRfZTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VtcHR5KCkgY29uc3QKK3sgcmV0dXJuIChzaXplKCkgPT0gMCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBzX2VudHJ5X2FsbG9jYXRvci5tYXhfc2l6ZSgpOyB9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jY19oYXNoX3RhYmxlX21hcF8vdHJhY2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MjFlNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIHRyYWNlLW1vZGUgZnVuY3Rpb25zLgorICovCisKKyNpZmRlZiBQQl9EU19IVF9NQVBfVFJBQ0VfCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit0cmFjZSgpIGNvbnN0Cit7CisgIHN0ZDo6Y2VyciA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX251bV9lKSA8PCAiICIgCisJICAgIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fbnVtX3VzZWRfZSkgPDwgc3RkOjplbmRsOworCisgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihpKSA8PCAiICI7CisgICAgICB0cmFjZV9saXN0KG1fZW50cmllc1tpXSk7CisgICAgICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX2xpc3QoY29uc3RfZW50cnlfcG9pbnRlciBwX2wpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBpdGVyYXRlZF9udW1fdXNlZF9lID0gMDsKKyAgd2hpbGUgKHBfbCAhPSAwKQorICAgIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCBQQl9EU19WMkYocF9sLT5tX3ZhbHVlKSA8PCAiICI7CisgICAgICBwX2wgPSBwX2wtPm1fcF9uZXh0OworICAgIH0KK30KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvY29uZF9kZWFsdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDZjMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHAKQEAgLTAsMCArMSw4NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZXRhaWwvY29uZF9kZWFsdG9yLmhwcAorICogQ29udGFpbnMgYSBjb25kaXRpb25hbCBkZWFsbG9jYXRvci4KKyAqLworCisjaWZuZGVmIFBCX0RTX0NPTkRfREVBTFRPUl9IUFAKKyNkZWZpbmUgUEJfRFNfQ09ORF9ERUFMVE9SX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gQ29uZGl0aW9uYWwgZGVhbGxvY2F0ZSBjb25zdHJ1Y3RvciBhcmd1bWVudC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeSwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgY2xhc3MgY29uZF9kZWFsdG9yCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxFbnRyeT4JX19yZWJpbmRfZTsKKworICAgICAgcHVibGljOgorCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfZTo6b3RoZXIgCQllbnRyeV9hbGxvY2F0b3I7CisJdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OnBvaW50ZXIgCWVudHJ5X3BvaW50ZXI7CisKKwljb25kX2RlYWx0b3IoZW50cnlfcG9pbnRlciBwX2UpCisJOiBtX3BfZShwX2UpLCBtX25vX2FjdGlvbl9kZXN0cnVjdG9yKGZhbHNlKSB7IH0KKworCX5jb25kX2RlYWx0b3IoKQorCXsKKwkgIGlmIChtX25vX2FjdGlvbl9kZXN0cnVjdG9yKQorCSAgICByZXR1cm47CisJICBzX2FsbG9jLmRlYWxsb2NhdGUobV9wX2UsIDEpOworCX0KKworCXZvaWQKKwlzZXRfbm9fYWN0aW9uKCkKKwl7IG1fbm9fYWN0aW9uX2Rlc3RydWN0b3IgPSB0cnVlOyB9CisKKyAgICAgIHByaXZhdGU6CisJZW50cnlfcG9pbnRlciAJCW1fcF9lOworCWJvb2wgCQkJbV9ub19hY3Rpb25fZGVzdHJ1Y3RvcjsKKwlzdGF0aWMgZW50cnlfYWxsb2NhdG9yIAlzX2FsbG9jOworICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5LCBjbGFzcyBfQWxsb2M+CisgICAgICB0eXBlbmFtZSBjb25kX2RlYWx0b3I8RW50cnksIF9BbGxvYz46OmVudHJ5X2FsbG9jYXRvcgorICAgICAgY29uZF9kZWFsdG9yPEVudHJ5LCBfQWxsb2M+OjpzX2FsbG9jOworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfQ09ORF9ERUFMVE9SX0hQUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2NvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jb250YWluZXJfYmFzZV9kaXNwYXRjaC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2MzNhOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9jb250YWluZXJfYmFzZV9kaXNwYXRjaC5ocHAKQEAgLTAsMCArMSwzNTIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2guaHBwCisgKiBDb250YWlucyBhc3NvY2lhdGl2ZSBjb250YWluZXIgZGlzcGF0Y2hpbmcuCisgKi8KKworI2lmbmRlZiBQQl9EU19BU1NPQ19DTlROUl9CQVNFX0RTX0RJU1BBVENIRVJfSFBQCisjZGVmaW5lIFBCX0RTX0FTU09DX0NOVE5SX0JBU0VfRFNfRElTUEFUQ0hFUl9IUFAKKworI2luY2x1ZGUgPGV4dC90eXBlbGlzdC5oPgorCisjZGVmaW5lIFBCX0RTX0FTU0VSVF9WQUxJRChYKQkJCQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfT05MWShYLmFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKworI2RlZmluZSBQQl9EU19ERUJVR19WRVJJRlkoX0NvbmQpCQkJCQlcCisgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9BVChfQ29uZCwJCQkJCVwKKwkJCSAgIF9NX21lc3NhZ2UoI19Db25kIiBhc3NlcnRpb24gZnJvbSAlMTs6JTI7IikJXAorCQkJICAgLl9NX3N0cmluZyhfX0ZJTEVfXykuX01faW50ZWdlcihfX0xJTkVfXykJXAorCQkJICAgLF9fZmlsZSxfX2xpbmUpCisKKyNkZWZpbmUgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhfS2V5KQkJCQkJXAorICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMoX0tleSwgX19GSUxFX18sIF9fTElORV9fKTspCisKKyNkZWZpbmUgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKF9LZXkpCQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjaGVja19rZXlfZG9lc19ub3RfZXhpc3QoX0tleSwJXAorCQkJCQkJCSAgIF9fRklMRV9fLCBfX0xJTkVfXyk7KQorCisjZGVmaW5lIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfVjJGKFgpIChYKS5maXJzdAorI2RlZmluZSBQQl9EU19WMlMoWCkgKFgpLnNlY29uZAorI2RlZmluZSBQQl9EU19FUDJWUChYKSYgKChYKS0+bV92YWx1ZSkKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vbHVfbWFwXy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2Jpbl9zZWFyY2hfdHJlZV8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3JiX3RyZWVfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGF5X3RyZWVfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9vdl90cmVlX21hcF8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NjX2h0X21hcF8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2dwX2h0X21hcF8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3BhdF90cmllXy5ocHA+CisjdW5kZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI3VuZGVmIFBCX0RTX1YyRgorI3VuZGVmIFBCX0RTX1YyUworI3VuZGVmIFBCX0RTX0VQMlZQCisKKyNkZWZpbmUgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfVjJGKFgpIChYKQorI2RlZmluZSBQQl9EU19WMlMoWCkgTWFwcGVkX0RhdGEoKQorI2RlZmluZSBQQl9EU19FUDJWUChYKSYgKChYKS0+bV92YWx1ZS5maXJzdCkKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vbHVfbWFwXy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL2Jpbl9zZWFyY2hfdHJlZV8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3JiX3RyZWVfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGF5X3RyZWVfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9vdl90cmVlX21hcF8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY2NfaGFzaF90YWJsZV9tYXBfL2NjX2h0X21hcF8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2dwX2h0X21hcF8uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3BhdF90cmllXy5ocHA+CisjdW5kZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyN1bmRlZiBQQl9EU19WMkYKKyN1bmRlZiBQQl9EU19WMlMKKyN1bmRlZiBQQl9EU19FUDJWUAorCisjdW5kZWYgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUCisjdW5kZWYgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUworI3VuZGVmIFBCX0RTX0RFQlVHX1ZFUklGWQorI3VuZGVmIFBCX0RTX0FTU0VSVF9WQUxJRAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworbmFtZXNwYWNlIGRldGFpbAoreworICAvLy8gU3BlY2lhbGl6YXRpb24gZm9yIGxpc3QtdXBkYXRlIG1hcC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgUG9saWN5X1RsPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIE1hcHBlZCwgX0FsbG9jLCBsaXN0X3VwZGF0ZV90YWcsCisJCQkJICAgUG9saWN5X1RsPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDA+CWF0MDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQwOjp0eXBlCQkJICAgIAlhdDB0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDE+IAlhdDE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MTo6dHlwZQkJCSAgICAJYXQxdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBEaXNwYXRjaGVkIHR5cGUuCisgICAgICB0eXBlZGVmIGx1X21hcDxLZXksIE1hcHBlZCwgYXQwdCwgX0FsbG9jLCBhdDF0Pgl0eXBlOworICAgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBsaXN0LXVwZGF0ZSBzZXQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBQb2xpY3lfVGw+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIGxpc3RfdXBkYXRlX3RhZywKKwkJCQkgICBQb2xpY3lfVGw+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworCisgICAgcHVibGljOgorICAgICAgLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgbHVfc2V0PEtleSwgbnVsbF90eXBlLCBhdDB0LCBfQWxsb2MsIGF0MXQ+IHR5cGU7CisgICAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24gZm9yIFBBVFJJQ0lBIHRyaWUgbWFwLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBQb2xpY3lfVGw+CisgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIE1hcHBlZCwgX0FsbG9jLCBwYXRfdHJpZV90YWcsIFBvbGljeV9UbD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHBhdF90cmllX21hcDxLZXksIE1hcHBlZCwgYXQxdCwgX0FsbG9jPiAJCXR5cGU7CisgICAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24gZm9yIFBBVFJJQ0lBIHRyaWUgc2V0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgUG9saWN5X1RsPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIG51bGxfdHlwZSwgX0FsbG9jLCBwYXRfdHJpZV90YWcsCisJCQkJICAgUG9saWN5X1RsPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDE+IAlhdDE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MTo6dHlwZQkJCSAgICAJYXQxdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBEaXNwYXRjaGVkIHR5cGUuCisgICAgICB0eXBlZGVmIHBhdF90cmllX3NldDxLZXksIG51bGxfdHlwZSwgYXQxdCwgX0FsbG9jPiB0eXBlOworICAgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBSLUIgdHJlZSBtYXAuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIFBvbGljeV9UbD4KKyAgICBzdHJ1Y3QgY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2g8S2V5LCBNYXBwZWQsIF9BbGxvYywgcmJfdHJlZV90YWcsIFBvbGljeV9UbD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gRGlzcGF0Y2hlZCB0eXBlLgorICAgICAgdHlwZWRlZiByYl90cmVlX21hcDxLZXksIE1hcHBlZCwgYXQwdCwgYXQxdCwgX0FsbG9jPiAJdHlwZTsKKyAgICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgUi1CIHRyZWUgc2V0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgUG9saWN5X1RsPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIG51bGxfdHlwZSwgX0FsbG9jLCByYl90cmVlX3RhZywKKwkJCQkgICBQb2xpY3lfVGw+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiByYl90cmVlX3NldDxLZXksIG51bGxfdHlwZSwgYXQwdCwgYXQxdCwgX0FsbG9jPiB0eXBlOworICAgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uIHNwbGF5IHRyZWUgbWFwLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBQb2xpY3lfVGw+CisgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIE1hcHBlZCwgX0FsbG9jLCBzcGxheV90cmVlX3RhZywKKwkJCQkgICBQb2xpY3lfVGw+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworCisgICAgcHVibGljOgorICAgICAgLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgc3BsYXlfdHJlZV9tYXA8S2V5LCBNYXBwZWQsIGF0MHQsIGF0MXQsIF9BbGxvYz4gCXR5cGU7CisgICAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24gc3BsYXkgdHJlZSBzZXQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBQb2xpY3lfVGw+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIHNwbGF5X3RyZWVfdGFnLAorCQkJCSAgIFBvbGljeV9UbD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gRGlzcGF0Y2hlZCB0eXBlLgorICAgICAgdHlwZWRlZiBzcGxheV90cmVlX3NldDxLZXksIG51bGxfdHlwZSwgYXQwdCwgYXQxdCwgX0FsbG9jPiB0eXBlOworICB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIG9yZGVyZWQtdmVjdG9yIHRyZWUgbWFwLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBQb2xpY3lfVGw+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBfQWxsb2MsIG92X3RyZWVfdGFnLCBQb2xpY3lfVGw+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworCisgICAgcHVibGljOgorICAgICAgLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgb3ZfdHJlZV9tYXA8S2V5LCBNYXBwZWQsIGF0MHQsIGF0MXQsIF9BbGxvYz4gCXR5cGU7CisgIH07CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24gb3JkZXJlZC12ZWN0b3IgdHJlZSBzZXQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBQb2xpY3lfVGw+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIG92X3RyZWVfdGFnLAorCQkJCSAgIFBvbGljeV9UbD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gRGlzcGF0Y2hlZCB0eXBlLgorICAgICAgdHlwZWRlZiBvdl90cmVlX3NldDxLZXksIG51bGxfdHlwZSwgYXQwdCwgYXQxdCwgX0FsbG9jPiB0eXBlOworICB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGNvbGlzaW9uLWNoYWluaW5nIGhhc2ggbWFwLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBQb2xpY3lfVGw+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBfQWxsb2MsIGNjX2hhc2hfdGFnLCBQb2xpY3lfVGw+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDI+CWF0MjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQyOjp0eXBlCQkJICAgIAlhdDJ0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDM+CWF0MzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQzOjp0eXBlCQkJCWF0M3Q7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgND4gCWF0NDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQ0Ojp0eXBlCQkJICAgIAlhdDR0OworCisgICAgcHVibGljOgorICAgICAgLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgY2NfaHRfbWFwPEtleSwgTWFwcGVkLCBhdDB0LCBhdDF0LCBfQWxsb2MsIAorCQkJYXQzdDo6dmFsdWUsIGF0NHQsIGF0MnQ+IAkgICAgICAgCXR5cGU7CisgIH07CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24gY29saXNpb24tY2hhaW5pbmcgaGFzaCBzZXQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBQb2xpY3lfVGw+CisgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIGNjX2hhc2hfdGFnLAorCQkJCSAgIFBvbGljeV9UbD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMj4JYXQyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDI6OnR5cGUJCQkgICAgCWF0MnQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMz4JYXQzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDM6OnR5cGUJCQkJYXQzdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCA0PiAJYXQ0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDQ6OnR5cGUJCQkgICAgCWF0NHQ7CisKKyAgICBwdWJsaWM6CisgICAgICAvLy8gRGlzcGF0Y2hlZCB0eXBlLgorICAgICAgdHlwZWRlZiBjY19odF9zZXQ8S2V5LCBudWxsX3R5cGUsIGF0MHQsIGF0MXQsIF9BbGxvYywKKwkJCQkgYXQzdDo6dmFsdWUsIGF0NHQsIGF0MnQ+ICAgIAl0eXBlOworICB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGdlbmVyYWwtcHJvYmUgaGFzaCBtYXAuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIFBvbGljeV9UbD4KKyAgICBzdHJ1Y3QgY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2g8S2V5LCBNYXBwZWQsIF9BbGxvYywgZ3BfaGFzaF90YWcsIFBvbGljeV9UbD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAwPglhdDA7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0MDo6dHlwZQkJCSAgICAJYXQwdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCAxPiAJYXQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDE6OnR5cGUJCQkgICAgCWF0MXQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMj4JYXQyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDI6OnR5cGUJCQkgICAgCWF0MnQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMz4JYXQzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDM6OnR5cGUJCQkJYXQzdDsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojp0eXBlbGlzdDo6YXRfaW5kZXg8UG9saWN5X1RsLCA0PiAJYXQ0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDQ6OnR5cGUJCQkgICAgCWF0NHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgNT4gCWF0NTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQ1Ojp0eXBlCQkJICAgIAlhdDV0OworCisgICAgcHVibGljOgorICAgICAgLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgZ3BfaHRfbWFwPEtleSwgTWFwcGVkLCBhdDB0LCBhdDF0LCBfQWxsb2MsIAorCQkJYXQzdDo6dmFsdWUsIGF0NHQsIGF0NXQsIGF0MnQ+IAkJdHlwZTsKKyAgfTsKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiBnZW5lcmFsLXByb2JlIGhhc2ggc2V0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgUG9saWN5X1RsPgorICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxLZXksIG51bGxfdHlwZSwgX0FsbG9jLCBncF9oYXNoX3RhZywKKwkJCQkgICBQb2xpY3lfVGw+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMD4JYXQwOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdDA6OnR5cGUJCQkgICAgCWF0MHQ7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgMT4gCWF0MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQxOjp0eXBlCQkJICAgIAlhdDF0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDI+CWF0MjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQyOjp0eXBlCQkJICAgIAlhdDJ0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDM+CWF0MzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQzOjp0eXBlCQkJCWF0M3Q7CisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmF0X2luZGV4PFBvbGljeV9UbCwgND4gCWF0NDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXQ0Ojp0eXBlCQkJICAgIAlhdDR0OworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OnR5cGVsaXN0OjphdF9pbmRleDxQb2xpY3lfVGwsIDU+IAlhdDU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF0NTo6dHlwZQkJCSAgICAJYXQ1dDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBEaXNwYXRjaGVkIHR5cGUuCisgICAgICB0eXBlZGVmIGdwX2h0X3NldDxLZXksIG51bGxfdHlwZSwgYXQwdCwgYXQxdCwgX0FsbG9jLAorCQkJYXQzdDo6dmFsdWUsIGF0NHQsIGF0NXQsIGF0MnQ+CQl0eXBlOworICB9OworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2RlYnVnX21hcF9iYXNlLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9kZWJ1Z19tYXBfYmFzZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJmN2FhZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9kZWJ1Z19tYXBfYmFzZS5ocHAKQEAgLTAsMCArMSwzNDkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGV0YWlsL2RlYnVnX21hcF9iYXNlLmhwcAorICogQ29udGFpbnMgYSBkZWJ1Zy1tb2RlIGJhc2UgZm9yIGFsbCBtYXBzLgorICovCisKKyNpZm5kZWYgUEJfRFNfREVCVUdfTUFQX0JBU0VfSFBQCisjZGVmaW5lIFBCX0RTX0RFQlVHX01BUF9CQVNFX0hQUAorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGV4dC90aHJvd19hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLyBOZWVkIHN0ZDo6cGFpciBvc3RyZWFtIGV4dHJhY3Rvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgaW5saW5lIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAorCSAgICAgICBjb25zdCBzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mIHApCisgICAgeyByZXR1cm4gKF9fb3V0IDw8ICcoJyA8PCBwLmZpcnN0IDw8ICcsJyA8PCBwLnNlY29uZCA8PCAnKScpOyB9CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgRXFfRm4sIHR5cGVuYW1lIENvbnN0X0tleV9SZWZlcmVuY2U+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIGRlYnVnX21hcF9iYXNlPEtleSwgRXFfRm4sIENvbnN0X0tleV9SZWZlcmVuY2U+CisKKyAgICAvLy8gRGVidWcgYmFzZSBjbGFzcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEVxX0ZuLCB0eXBlbmFtZSBDb25zdF9LZXlfUmVmZXJlbmNlPgorICAgIGNsYXNzIGRlYnVnX21hcF9iYXNlCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIENvbnN0X0tleV9SZWZlcmVuY2UgCQkJa2V5X2NvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpfR0xJQkNYWF9TVERfQzo6bGlzdDxLZXk+IAkJa2V5X3JlcG9zaXRvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9yZXBvc2l0b3J5OjpzaXplX3R5cGUgICAgICAgCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X3JlcG9zaXRvcnk6Oml0ZXJhdG9yCSAgICAgICAJaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9yZXBvc2l0b3J5Ojpjb25zdF9pdGVyYXRvciAgCWNvbnN0X2l0ZXJhdG9yOworCisgICAgcHJvdGVjdGVkOgorICAgICAgZGVidWdfbWFwX2Jhc2UoKTsKKworICAgICAgZGVidWdfbWFwX2Jhc2UoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgfmRlYnVnX21hcF9iYXNlKCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBpbnNlcnRfbmV3KGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZXJhc2VfZXhpc3Rpbmcoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBjaGVja19rZXlfZXhpc3RzKGtleV9jb25zdF9yZWZlcmVuY2UsIGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgY2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0KGtleV9jb25zdF9yZWZlcmVuY2UsIGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgY2hlY2tfc2l6ZShzaXplX3R5cGUsIGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENtcF9Gbj4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0KGtleV9jb25zdF9yZWZlcmVuY2UsIENtcF9GbiwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgam9pbihQQl9EU19DTEFTU19DX0RFQyYsIGJvb2wgd2l0aF9jbGVhbnVwID0gdHJ1ZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGtleV9yZXBvc2l0b3J5IAltX2tleXM7CisgICAgICBFcV9GbiAJCW1fZXE7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGRlYnVnX21hcF9iYXNlKCkKKyAgICB7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBkZWJ1Z19tYXBfYmFzZShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgOiBtX2tleXMob3RoZXIubV9rZXlzKSwgbV9lcShvdGhlci5tX2VxKQorICAgIHsgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIH5kZWJ1Z19tYXBfYmFzZSgpCisgICAgeyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBpbnNlcnRfbmV3KGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisKKyAgICAgIGlmIChmaW5kKHJfa2V5KSAhPSBtX2tleXMuZW5kKCkpCisJeworCSAgc3RkOjpjZXJyIDw8ICJpbnNlcnRfbmV3IGtleSBhbHJlYWR5IHByZXNlbnQgIiA8PCByX2tleSA8PCBzdGQ6OmVuZGw7CisJICBzdGQ6OmFib3J0KCk7CisJfQorCisgICAgICBfX3RyeQorCXsKKwkgIG1fa2V5cy5wdXNoX2JhY2socl9rZXkpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIHN0ZDo6Y2VyciA8PCAiaW5zZXJ0X25ldyAiIDw8IHJfa2V5IDw8IHN0ZDo6ZW5kbDsKKwkgIHN0ZDo6YWJvcnQoKTsKKwl9CisKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZXJhc2VfZXhpc3Rpbmcoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKKyAgICB7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIGl0ZXJhdG9yIGl0ID0gZmluZChyX2tleSk7CisgICAgICBpZiAoaXQgPT0gbV9rZXlzLmVuZCgpKQorCXsKKwkgIHN0ZDo6Y2VyciA8PCAiZXJhc2VfZXhpc3RpbmciIDw8IHJfa2V5IDw8IHN0ZDo6ZW5kbDsKKwkgIHN0ZDo6YWJvcnQoKTsKKwl9CisgICAgICBtX2tleXMuZXJhc2UoaXQpOworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGNsZWFyKCkKKyAgICB7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIG1fa2V5cy5jbGVhcigpOworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBjaGVja19rZXlfZXhpc3RzKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXksCisJCSAgICAgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAorICAgIHsKKyAgICAgIGFzc2VydF92YWxpZChfX2ZpbGUsIF9fbGluZSk7CisgICAgICBpZiAoZmluZChyX2tleSkgPT0gbV9rZXlzLmVuZCgpKQorCXsKKwkgIHN0ZDo6Y2VyciA8PCBfX2ZpbGUgPDwgJzonIDw8IF9fbGluZSA8PCAiOiBjaGVja19rZXlfZXhpc3RzICIKKwkJICAgIDw8IHJfa2V5IDw8IHN0ZDo6ZW5kbDsKKwkgIHN0ZDo6YWJvcnQoKTsKKwl9CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBjaGVja19rZXlfZG9lc19ub3RfZXhpc3Qoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwKKwkJCSAgICAgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAorICAgIHsKKyAgICAgIGFzc2VydF92YWxpZChfX2ZpbGUsIF9fbGluZSk7CisgICAgICBpZiAoZmluZChyX2tleSkgIT0gbV9rZXlzLmVuZCgpKQorCXsKKwkgIHVzaW5nIHN0ZDo6Y2VycjsKKwkgIHVzaW5nIHN0ZDo6ZW5kbDsKKwkgIGNlcnIgPDwgX19maWxlIDw8ICc6JyA8PCBfX2xpbmUgPDwgIjogY2hlY2tfa2V5X2RvZXNfbm90X2V4aXN0ICIKKwkgICAgICAgPDwgcl9rZXkgPDwgZW5kbDsKKwkgIHN0ZDo6YWJvcnQoKTsKKwl9CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBjaGVja19zaXplKHNpemVfdHlwZSBzaXplLCBjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0CisgICAgeworICAgICAgYXNzZXJ0X3ZhbGlkKF9fZmlsZSwgX19saW5lKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBrZXlzX3NpemUgPSBtX2tleXMuc2l6ZSgpOworICAgICAgaWYgKHNpemUgIT0ga2V5c19zaXplKQorCXsKKwkgIHN0ZDo6Y2VyciA8PCBfX2ZpbGUgPDwgJzonIDw8IF9fbGluZSA8PCAiOiBjaGVja19zaXplICIKKwkJICAgIDw8IHNpemUgPDwgIiAhPSAiIDw8IGtleXNfc2l6ZSA8PCBzdGQ6OmVuZGw7CisJICBzdGQ6OmFib3J0KCk7CisJfQorICAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBtX2tleXMuc3dhcChvdGhlci5tX2tleXMpOworICAgICAgc3RkOjpzd2FwKG1fZXEsIG90aGVyLm1fZXEpOworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvciBpdGVyYXRvcl90eXBlOworICAgICAgZm9yIChpdGVyYXRvcl90eXBlIGl0ID0gbV9rZXlzLmJlZ2luKCk7IGl0ICE9IG1fa2V5cy5lbmQoKTsgKytpdCkKKwlpZiAobV9lcSgqaXQsIHJfa2V5KSkKKwkgIHJldHVybiBpdDsKKyAgICAgIHJldHVybiBtX2tleXMuZW5kKCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgaXRlcmF0b3IgaXQgPSBtX2tleXMuYmVnaW4oKTsKKyAgICAgIHdoaWxlIChpdCAhPSBtX2tleXMuZW5kKCkpCisJeworCSAgaWYgKG1fZXEoKml0LCByX2tleSkpCisJICAgIHJldHVybiBpdDsKKwkgICsraXQ7CisJfQorICAgICAgcmV0dXJuIGl0OworICAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKKyAgICB7CisgICAgICBjb25zdF9pdGVyYXRvciBwcmltZV9pdCA9IG1fa2V5cy5iZWdpbigpOworICAgICAgd2hpbGUgKHByaW1lX2l0ICE9IG1fa2V5cy5lbmQoKSkKKwl7CisJICBjb25zdF9pdGVyYXRvciBzZWNfaXQgPSBwcmltZV9pdDsKKwkgICsrc2VjX2l0OworCSAgd2hpbGUgKHNlY19pdCAhPSBtX2tleXMuZW5kKCkpCisJICAgIHsKKwkgICAgICBQQl9EU19ERUJVR19WRVJJRlkoIW1fZXEoKnNlY19pdCwgKnByaW1lX2l0KSk7CisJICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKCFtX2VxKCpwcmltZV9pdCwgKnNlY19pdCkpOworCSAgICAgICsrc2VjX2l0OworCSAgICB9CisJICArK3ByaW1lX2l0OworCX0KKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENtcF9Gbj4KKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHNwbGl0KGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXksIENtcF9GbiBjbXBfZm4sIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKyAgICB7CisgICAgICBvdGhlci5jbGVhcigpOworICAgICAgaXRlcmF0b3IgaXQgPSBtX2tleXMuYmVnaW4oKTsKKyAgICAgIHdoaWxlIChpdCAhPSBtX2tleXMuZW5kKCkpCisJaWYgKGNtcF9mbihyX2tleSwgKml0KSkKKwkgIHsKKwkgICAgb3RoZXIuaW5zZXJ0X25ldygqaXQpOworCSAgICBpdCA9IG1fa2V5cy5lcmFzZShpdCk7CisJICB9CisJZWxzZQorCSAgKytpdDsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgam9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIsIGJvb2wgd2l0aF9jbGVhbnVwKQorICAgIHsKKyAgICAgIGl0ZXJhdG9yIGl0ID0gb3RoZXIubV9rZXlzLmJlZ2luKCk7CisgICAgICB3aGlsZSAoaXQgIT0gb3RoZXIubV9rZXlzLmVuZCgpKQorCXsKKwkgIGluc2VydF9uZXcoKml0KTsKKwkgIGlmICh3aXRoX2NsZWFudXApCisJICAgIGl0ID0gb3RoZXIubV9rZXlzLmVyYXNlKGl0KTsKKwkgIGVsc2UKKwkgICAgKytpdDsKKwl9CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIXdpdGhfY2xlYW51cCB8fCBvdGhlci5tX2tleXMuZW1wdHkoKSk7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCit9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZXFfZm4vZXFfYnlfbGVzcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZXFfZm4vZXFfYnlfbGVzcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzNTZhZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9lcV9mbi9lcV9ieV9sZXNzLmhwcApAQCAtMCwwICsxLDY5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGVxX2J5X2xlc3MuaHBwCisgKiBDb250YWlucyBhbiBlcXVpdmFsZW5jZSBmdW5jdGlvbi4KKyAqLworCisjaWZuZGVmIFBCX0RTX0VRX0JZX0xFU1NfSFBQCisjZGVmaW5lIFBCX0RTX0VRX0JZX0xFU1NfSFBQCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLy8vIEVxdWl2YWxlbmNlIGZ1bmN0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ21wX0ZuPgorICAgIHN0cnVjdCBlcV9ieV9sZXNzIDogcHJpdmF0ZSBDbXBfRm4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IEtleSYgcl9saHMsIGNvbnN0IEtleSYgcl9yaHMpIGNvbnN0CisgICAgICB7CisJY29uc3QgYm9vbCBsID0gQ21wX0ZuOjpvcGVyYXRvcigpKHJfbGhzLCByX3Jocyk7CisJY29uc3QgYm9vbCBnID0gQ21wX0ZuOjpvcGVyYXRvcigpKHJfcmhzLCByX2xocyk7CisJcmV0dXJuICEobCB8fCBnKTsKKyAgICAgIH0KKyAgICB9OworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfRVFfQllfTEVTU19IUFAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9lcV9mbi9oYXNoX2VxX2ZuLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9lcV9mbi9oYXNoX2VxX2ZuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzJiOGRiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2VxX2ZuL2hhc2hfZXFfZm4uaHBwCkBAIC0wLDAgKzEsMTEwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfZXFfZm4uaHBwCisgKiBDb250YWlucyAyIGVxaXZhbGVuY2UgZnVuY3Rpb25zLCBvbmUgZW1wbG95aW5nIGEgaGFzaCB2YWx1ZSwKKyAqIGFuZCBvbmUgaWdub3JpbmcgaXQuCisgKi8KKworI2lmbmRlZiBQQl9EU19IQVNIX0VRX0ZOX0hQUAorI2RlZmluZSBQQl9EU19IQVNIX0VRX0ZOX0hQUAorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEVxX0ZuLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wgU3RvcmVfSGFzaD4KKyAgICAgIHN0cnVjdCBoYXNoX2VxX2ZuOworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIDEgLSBUaGUgY2xpZW50IHJlcXVlc3RzIHRoYXQgaGFzaCB2YWx1ZXMgbm90IGJlIHN0b3JlZC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEVxX0ZuLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IGhhc2hfZXFfZm48S2V5LCBFcV9GbiwgX0FsbG9jLCBmYWxzZT4gOiBwdWJsaWMgRXFfRm4KKyAgICB7CisgICAgICB0eXBlZGVmIEVxX0ZuIAkJCQkJICAgZXFfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXIga2V5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIAkgICBrZXlfY29uc3RfcmVmZXJlbmNlOworCisgICAgICBoYXNoX2VxX2ZuKCkgeyB9CisKKyAgICAgIGhhc2hfZXFfZm4oY29uc3QgRXFfRm4mIHJfZXFfZm4pIDogRXFfRm4ocl9lcV9mbikgeyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2xoc19rZXksIAorCQkga2V5X2NvbnN0X3JlZmVyZW5jZSByX3Joc19rZXkpIGNvbnN0CisgICAgICB7IHJldHVybiBlcV9mbl9iYXNlOjpvcGVyYXRvcigpKHJfbGhzX2tleSwgcl9yaHNfa2V5KTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGNvbnN0IGhhc2hfZXFfZm4mIG90aGVyKQorICAgICAgeyBzdGQ6OnN3YXAoKEVxX0ZuJikoKnRoaXMpLCAoRXFfRm4mKW90aGVyKTsgfQorICAgIH07CisKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiAyIC0gVGhlIGNsaWVudCByZXF1ZXN0cyB0aGF0IGhhc2ggdmFsdWVzIGJlIHN0b3JlZC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIEVxX0ZuLCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IGhhc2hfZXFfZm48S2V5LCBFcV9GbiwgX0FsbG9jLCB0cnVlPiA6IHB1YmxpYyBFcV9GbgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCQkgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIEVxX0ZuIAkJCQkJICAgZXFfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXIga2V5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIAkgICBrZXlfY29uc3RfcmVmZXJlbmNlOworCisgICAgICBoYXNoX2VxX2ZuKCkgeyB9CisKKyAgICAgIGhhc2hfZXFfZm4oY29uc3QgRXFfRm4mIHJfZXFfZm4pIDogRXFfRm4ocl9lcV9mbikgeyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2xoc19rZXksIHNpemVfdHlwZSBsaHNfaGFzaCwgCisJCSBrZXlfY29uc3RfcmVmZXJlbmNlIHJfcmhzX2tleSwgc2l6ZV90eXBlIHJoc19oYXNoKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVCghZXFfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2xoc19rZXksIHJfcmhzX2tleSkgCisJCQkgICAgICB8fCBsaHNfaGFzaCA9PSByaHNfaGFzaCk7CisKKwlyZXR1cm4gKGxoc19oYXNoID09IHJoc19oYXNoICYmIAorCQllcV9mbl9iYXNlOjpvcGVyYXRvcigpKHJfbGhzX2tleSwgcl9yaHNfa2V5KSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoY29uc3QgaGFzaF9lcV9mbiYgb3RoZXIpCisgICAgICB7IHN0ZDo6c3dhcCgoRXFfRm4mKSgqdGhpcyksIChFcV9GbiYpKG90aGVyKSk7IH0KKyAgICB9OworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2EwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwyMjMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgY29uc3RydWN0b3JzLCBkZXN0cnVjdG9yLAorICogYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6ZW50cnlfYWxsb2NhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19lbnRyeV9hbGxvY2F0b3I7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvcHlfZnJvbV9yYW5nZShJdCBmaXJzdF9pdCwgSXQgbGFzdF9pdCkKK3sKKyAgd2hpbGUgKGZpcnN0X2l0ICE9IGxhc3RfaXQpCisgICAgaW5zZXJ0KCooZmlyc3RfaXQrKykpOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfR1BfSEFTSF9OQU1FKCkgCis6IHJhbmdlZF9wcm9iZV9mbl9iYXNlKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19HUF9IQVNIX05BTUUoY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuKSAgICAKKzogcmFuZ2VkX3Byb2JlX2ZuX2Jhc2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpLCByX2hhc2hfZm4pLAorICBtX251bV9lKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSksIG1fbnVtX3VzZWRfZSgwKSwKKyAgbV9lbnRyaWVzKHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKG1fbnVtX2UpKQoreworICBpbml0aWFsaXplKCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfR1BfSEFTSF9OQU1FKGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgY29uc3QgRXFfRm4mIHJfZXFfZm4pIAorOiBoYXNoX2VxX2ZuX2Jhc2Uocl9lcV9mbiksCisgIHJhbmdlZF9wcm9iZV9mbl9iYXNlKHJlc2l6ZV9iYXNlOjpnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZSgxKSwgcl9oYXNoX2ZuKSwKKyAgbV9udW1fZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLCBtX251bV91c2VkX2UoMCksCisgIG1fZW50cmllcyhzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShtX251bV9lKSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0dQX0hBU0hfTkFNRShjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4sIGNvbnN0IEVxX0ZuJiByX2VxX2ZuLCAKKwkJIGNvbnN0IENvbWJfUHJvYmVfRm4mIHJfY29tYl9oYXNoX2ZuKSAKKzogaGFzaF9lcV9mbl9iYXNlKHJfZXFfZm4pLAorICByYW5nZWRfcHJvYmVfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksCisJCSAgICAgICByX2hhc2hfZm4sIHJfY29tYl9oYXNoX2ZuKSwKKyAgbV9udW1fZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLCBtX251bV91c2VkX2UoMCksCisgIG1fZW50cmllcyhzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShtX251bV9lKSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0dQX0hBU0hfTkFNRShjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4sIGNvbnN0IEVxX0ZuJiByX2VxX2ZuLCAKKwkJIGNvbnN0IENvbWJfUHJvYmVfRm4mIGNvbWJfaGFzaF9mbiwgY29uc3QgUHJvYmVfRm4mIHByb2JlcikgCis6IGhhc2hfZXFfZm5fYmFzZShyX2VxX2ZuKSwKKyAgcmFuZ2VkX3Byb2JlX2ZuX2Jhc2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpLAorCQkgICAgICAgcl9oYXNoX2ZuLCBjb21iX2hhc2hfZm4sIHByb2JlciksCisgIG1fbnVtX2UocmVzaXplX2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKSwgbV9udW1fdXNlZF9lKDApLAorICBtX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19HUF9IQVNIX05BTUUoY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuLCBjb25zdCBFcV9GbiYgcl9lcV9mbiwgCisJCSBjb25zdCBDb21iX1Byb2JlX0ZuJiBjb21iX2hhc2hfZm4sIGNvbnN0IFByb2JlX0ZuJiBwcm9iZXIsIAorCQkgY29uc3QgUmVzaXplX1BvbGljeSYgcl9yZXNpemVfcG9saWN5KSAKKzogaGFzaF9lcV9mbl9iYXNlKHJfZXFfZm4pLCByZXNpemVfYmFzZShyX3Jlc2l6ZV9wb2xpY3kpLAorICByYW5nZWRfcHJvYmVfZm5fYmFzZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSksCisJCSAgICAgICByX2hhc2hfZm4sIGNvbWJfaGFzaF9mbiwgcHJvYmVyKSwKKyAgbV9udW1fZShyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpLCBtX251bV91c2VkX2UoMCksCisgIG1fZW50cmllcyhzX2VudHJ5X2FsbG9jYXRvci5hbGxvY2F0ZShtX251bV9lKSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0dQX0hBU0hfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDoKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBkZWJ1Z19iYXNlKG90aGVyKSwKKyNlbmRpZiAKKyAgaGFzaF9lcV9mbl9iYXNlKG90aGVyKSwKKyAgcmVzaXplX2Jhc2Uob3RoZXIpLAorICByYW5nZWRfcHJvYmVfZm5fYmFzZShvdGhlciksCisgIG1fbnVtX2Uob3RoZXIubV9udW1fZSksCisgIG1fbnVtX3VzZWRfZShvdGhlci5tX251bV91c2VkX2UpLAorICBtX2VudHJpZXMoc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUobV9udW1fZSkpCit7CisgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIG1fZW50cmllc1tpXS5tX3N0YXQgPSAoZW50cnlfc3RhdHVzKWVtcHR5X2VudHJ5X3N0YXR1czsKKworICBfX3RyeQorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgICAgICB7CisJICBtX2VudHJpZXNbaV0ubV9zdGF0ID0gb3RoZXIubV9lbnRyaWVzW2ldLm1fc3RhdDsKKwkgIGlmIChtX2VudHJpZXNbaV0ubV9zdGF0ID09IHZhbGlkX2VudHJ5X3N0YXR1cykKKwkgICAgbmV3IChtX2VudHJpZXMgKyBpKSBlbnRyeShvdGhlci5tX2VudHJpZXNbaV0pOworICAgICAgICB9CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7CisgICAgICBkZWFsbG9jYXRlX2FsbCgpOworICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgfQorICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK35QQl9EU19HUF9IQVNIX05BTUUoKQoreyBkZWFsbG9jYXRlX2FsbCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgc3RkOjpzd2FwKG1fbnVtX2UsIG90aGVyLm1fbnVtX2UpOworICBzdGQ6OnN3YXAobV9udW1fdXNlZF9lLCBvdGhlci5tX251bV91c2VkX2UpOworICBzdGQ6OnN3YXAobV9lbnRyaWVzLCBvdGhlci5tX2VudHJpZXMpOworICByYW5nZWRfcHJvYmVfZm5fYmFzZTo6c3dhcChvdGhlcik7CisgIGhhc2hfZXFfZm5fYmFzZTo6c3dhcChvdGhlcik7CisgIHJlc2l6ZV9iYXNlOjpzd2FwKG90aGVyKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpzd2FwKG90aGVyKSk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitkZWFsbG9jYXRlX2FsbCgpCit7CisgIGNsZWFyKCk7CisgIGVyYXNlX2FsbF92YWxpZF9lbnRyaWVzKG1fZW50cmllcywgbV9udW1fZSk7CisgIHNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUobV9lbnRyaWVzLCBtX251bV9lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2FsbF92YWxpZF9lbnRyaWVzKGVudHJ5X2FycmF5IGFfZW50cmllc19yZXNpemVkLCBzaXplX3R5cGUgbGVuKQoreworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBsZW47ICsrcG9zKQorICAgIHsKKyAgICAgIGVudHJ5X3BvaW50ZXIgcF9lID0gJmFfZW50cmllc19yZXNpemVkW3Bvc107CisgICAgICBpZiAocF9lLT5tX3N0YXQgPT0gdmFsaWRfZW50cnlfc3RhdHVzKQorCXBfZS0+bV92YWx1ZS5+dmFsdWVfdHlwZSgpOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemUoKQoreworICBSZXNpemVfUG9saWN5Ojpub3RpZnlfcmVzaXplZChtX251bV9lKTsKKyAgUmVzaXplX1BvbGljeTo6bm90aWZ5X2NsZWFyZWQoKTsKKyAgcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKG1fbnVtX2UpOworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKyAgICBtX2VudHJpZXNbaV0ubV9zdGF0ID0gZW1wdHlfZW50cnlfc3RhdHVzOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMjM2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDUzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGdwX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgY29uc3RydWN0b3JzLCBkZXN0cnVjdG9yLAorICogICAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29uc3RydWN0b3JfaW5zZXJ0X25ld19pbXAobWFwcGVkX2NvbnN0X3JlZmVyZW5jZSByX3ZhbCwgc2l6ZV90eXBlIHBvcywgCisJCQkgICBmYWxzZV90eXBlKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9lbnRyaWVzW3Bvc10ubV9zdGF0ICE9IHZhbGlkX2VudHJ5X3N0YXR1cylrOworICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICBuZXcgKCZwX2UtPm1fdmFsdWUpIG1hcHBlZF92YWx1ZV90eXBlKHJfdmFsKTsKKyAgcF9lLT5tX3N0YXQgPSB2YWxpZF9lbnRyeV9zdGF0dXM7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhwX2UtPm1fdmFsdWUuZmlyc3QpOykKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3MjdkMgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3Jfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3IsCisgKiBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb25zdHJ1Y3Rvcl9pbnNlcnRfbmV3X2ltcChtYXBwZWRfY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBzaXplX3R5cGUgcG9zLCAKKwkJCSAgIHRydWVfdHlwZSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fZW50cmllc1twb3NdLm1fc3RhdCAhPSB2YWxpZF9lbnRyeV9zdGF0dXMpOworICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICBuZXcgKCZwX2UtPm1fdmFsdWUpIG1hcHBlZF92YWx1ZV90eXBlKHJfdmFsKTsKKyAgcF9lLT5tX2hhc2ggPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShQQl9EU19WMkYocl92YWwpKS5zZWNvbmQ7CisgIHBfZS0+bV9zdGF0ID0gdmFsaWRfZW50cnlfc3RhdHVzOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcocF9lLT5tX3ZhbHVlLmZpcnN0KTspCit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTFiYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDU2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGdwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBkZWJ1Zy1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZChjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIGRlYnVnX2Jhc2U6OmNoZWNrX3NpemUobV9udW1fdXNlZF9lLCBfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9lbnRyeV9hcnJheV92YWxpZChtX2VudHJpZXMsIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvciwKKwkJCSAgIF9fZmlsZSwgX19saW5lKTsKK30KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2RlYnVnX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcD4KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MmM4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2RlYnVnX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3MiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vZGVidWdfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBkZWJ1Zy1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9lbnRyeV9hcnJheV92YWxpZChjb25zdCBlbnRyeV9hcnJheSBhX2VudHJpZXMsIGZhbHNlX3R5cGUsCisJCQkgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBzaXplX3R5cGUgaXRlcmF0ZWRfbnVtX3VzZWRfZSA9IDA7CisgIGZvciAoc2l6ZV90eXBlIHBvcyA9IDA7IHBvcyA8IG1fbnVtX2U7ICsrcG9zKQorICAgIHsKKyAgICAgIGNvbnN0X2VudHJ5X3BvaW50ZXIgcF9lID0gJmFfZW50cmllc1twb3NdOworICAgICAgc3dpdGNoKHBfZS0+bV9zdGF0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorICAgICAgICBjYXNlIGVyYXNlZF9lbnRyeV9zdGF0dXM6CisJICBicmVhazsKKyAgICAgICAgY2FzZSB2YWxpZF9lbnRyeV9zdGF0dXM6CisJICB7CisJICAgIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkgPSBQQl9EU19WMkYocF9lLT5tX3ZhbHVlKTsKKwkgICAgZGVidWdfYmFzZTo6Y2hlY2tfa2V5X2V4aXN0cyhyX2tleSwgX19maWxlLCBfX2xpbmUpOworCSAgICArK2l0ZXJhdGVkX251bV91c2VkX2U7CisJICAgIGJyZWFrOworCSAgfQorICAgICAgICBkZWZhdWx0OgorCSAgUEJfRFNfREVCVUdfVkVSSUZZKDApOworICAgICAgICB9OworICAgIH0KKyAgUEJfRFNfREVCVUdfVkVSSUZZKGl0ZXJhdGVkX251bV91c2VkX2UgPT0gbV9udW1fdXNlZF9lKTsKK30KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9kZWJ1Z19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NTU2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2RlYnVnX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vZGVidWdfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBkZWJ1Zy1tb2RlIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9lbnRyeV9hcnJheV92YWxpZChjb25zdCBlbnRyeV9hcnJheSBhX2VudHJpZXMsIHRydWVfdHlwZSwKKwkJCSBjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBpdGVyYXRlZF9udW1fdXNlZF9lID0gMDsKKworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBtX251bV9lOyArK3BvcykKKyAgICB7CisgICAgICBjb25zdF9lbnRyeV9wb2ludGVyIHBfZSA9JiBhX2VudHJpZXNbcG9zXTsKKyAgICAgIHN3aXRjaChwX2UtPm1fc3RhdCkKKyAgICAgICAgeworICAgICAgICBjYXNlIGVtcHR5X2VudHJ5X3N0YXR1czoKKyAgICAgICAgY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCSAgYnJlYWs7CisgICAgICAgIGNhc2UgdmFsaWRfZW50cnlfc3RhdHVzOgorCSAgeworCSAgICBrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5ID0gUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSk7CisJICAgIGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMocl9rZXksIF9fZmlsZSwgX19saW5lKTsKKworCSAgICBjb25zdCBjb21wX2hhc2ggcG9zX2hhc2hfcGFpciA9IHJhbmdlZF9wcm9iZV9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KTsKKworCSAgICBQQl9EU19ERUJVR19WRVJJRlkocF9lLT5tX2hhc2ggPT0gcG9zX2hhc2hfcGFpci5zZWNvbmQpOworCSAgICArK2l0ZXJhdGVkX251bV91c2VkX2U7CisJICAgIGJyZWFrOworCSAgfQorICAgICAgICBkZWZhdWx0OgorCSAgUEJfRFNfREVCVUdfVkVSSUZZKDApOworICAgICAgICB9OworICAgIH0KKworICBQQl9EU19ERUJVR19WRVJJRlkoaXRlcmF0ZWRfbnVtX3VzZWRfZSA9PSBtX251bV91c2VkX2UpOworfQorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmNmNmZkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgZXJhc2UgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9lbnRyeShlbnRyeV9wb2ludGVyIHBfZSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfZS0+bV9zdGF0ID0gdmFsaWRfZW50cnlfc3RhdHVzKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjplcmFzZV9leGlzdGluZyhQQl9EU19WMkYocF9lLT5tX3ZhbHVlKSk7KQorICBwX2UtPm1fdmFsdWUufnZhbHVlX3R5cGUoKTsKKyAgcF9lLT5tX3N0YXQgPSBlcmFzZWRfZW50cnlfc3RhdHVzOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9udW1fdXNlZF9lID4gMCk7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2VkKC0tbV9udW1fdXNlZF9lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgZm9yIChzaXplX3R5cGUgcG9zID0gMDsgcG9zIDwgbV9udW1fZTsgKytwb3MpCisgICAgeworICAgICAgZW50cnlfcG9pbnRlciBwX2UgPSAmbV9lbnRyaWVzW3Bvc107CisgICAgICBpZiAocF9lLT5tX3N0YXQgPT0gdmFsaWRfZW50cnlfc3RhdHVzKQorCWVyYXNlX2VudHJ5KHBfZSk7CisgICAgfQorICBkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCk7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfY2xlYXJlZCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBzaXplX3R5cGUgbnVtX2Vyc2QgPSAwOworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBtX251bV9lOyArK3BvcykKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfZSA9ICZtX2VudHJpZXNbcG9zXTsKKyAgICAgIGlmIChwX2UtPm1fc3RhdCA9PSB2YWxpZF9lbnRyeV9zdGF0dXMpCisJaWYgKHByZWQocF9lLT5tX3ZhbHVlKSkKKwkgIHsKKwkgICAgKytudW1fZXJzZDsKKwkgICAgZXJhc2VfZW50cnkocF9lKTsKKwkgIH0KKyAgICB9CisKKyAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIG51bV9lcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCit7IHJldHVybiBlcmFzZV9pbXAocl9rZXksIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7IH0KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZXJhc2Vfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcD4KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZXJhc2Vfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZXJhc2Vfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NlZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsODQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgZXJhc2UgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIG5vdCBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgIGZhbHNlX3R5cGUpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBzaXplX3R5cGUgaGFzaCA9IHJhbmdlZF9wcm9iZV9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KTsKKyAgc2l6ZV90eXBlIGk7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX3N0YXJ0KCk7CisKKyAgZm9yIChpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgcG9zID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXksICBoYXNoLCBpKTsKKyAgICAgIGVudHJ5KiBjb25zdCBwX2UgPSBtX2VudHJpZXMgKyBwb3M7CisgICAgICBzd2l0Y2gocF9lLT5tX3N0YXQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBlbXB0eV9lbnRyeV9zdGF0dXM6CisJICB7CisJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworCSAgICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisJICAgIHJldHVybiBmYWxzZTsKKwkgIH0KKwkgIGJyZWFrOworICAgICAgICBjYXNlIHZhbGlkX2VudHJ5X3N0YXR1czoKKwkgIGlmIChoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICAgICAgICAgIHsKKwkgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKwkgICAgICBlcmFzZV9lbnRyeShwX2UpOworCSAgICAgIGRvX3Jlc2l6ZV9pZl9uZWVkZWRfbm9fdGhyb3coKTsKKwkgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKwkgIGJyZWFrOworICAgICAgICBjYXNlIGVyYXNlZF9lbnRyeV9zdGF0dXM6CisJICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgwKTsKKyAgICAgICAgfTsKKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2NvbGxpc2lvbigpOworICAgIH0KKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisgIHJldHVybiBmYWxzZTsKK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9lcmFzZV9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMmMyZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw4NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vZXJhc2Vfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBlcmFzZSByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgc3RvcmVkLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfaW1wKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXksIHRydWVfdHlwZSkKK3sKKyAgY29uc3QgY29tcF9oYXNoIHBvc19oYXNoX3BhaXIgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSk7CisgIHNpemVfdHlwZSBpOworICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOworICBmb3IgKGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgcG9zX2hhc2hfcGFpci5zZWNvbmQsIGkpOworCisgICAgICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICAgICAgc3dpdGNoKHBfZS0+bV9zdGF0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCSAgeworCSAgICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKwkgICAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKHJfa2V5KQorCSAgICByZXR1cm4gZmFsc2U7CisJICB9CisJICBicmVhazsKKyAgICAgICAgY2FzZSB2YWxpZF9lbnRyeV9zdGF0dXM6CisJICBpZiAoaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLCBwX2UtPm1faGFzaCwKKwkJCQkJICByX2tleSwgcG9zX2hhc2hfcGFpci5zZWNvbmQpKQorICAgICAgICAgICAgeworCSAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworCSAgICAgIGVyYXNlX2VudHJ5KHBfZSk7CisJICAgICAgZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpOworCSAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCSAgYnJlYWs7CisgICAgICAgIGNhc2UgZXJhc2VkX2VudHJ5X3N0YXR1czoKKwkgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKDApOworICAgICAgICB9OworCisgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKyAgICB9CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworICByZXR1cm4gZmFsc2U7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTNlZjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgZmluZCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIGZpbmRfa2V5X3BvaW50ZXIocl9rZXksIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0Cit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZXR1cm4gY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyY+KCp0aGlzKS5maW5kX2tleV9wb2ludGVyKHJfa2V5LCB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9lbmQoKQoreyByZXR1cm4gMDsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9lbmQoKSBjb25zdAoreyByZXR1cm4gMDsgfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2ZpbmRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODQ2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2ZpbmRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDQ2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGdwX2hhc2hfdGFibGVfbWFwXy9maW5kX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgZmluZCByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgbm90IHN0b3JlZC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2tleV9wb2ludGVyKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXksIGZhbHNlX3R5cGUpCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9maW5kX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1YjNhMgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNDAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL2ZpbmRfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBpbnNlcnQgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIHN0b3JlZC4KKyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9ncF9odF9tYXBfLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZ3BfaHRfbWFwXy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczMzU4MwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZ3BfaHRfbWFwXy5ocHAKQEAgLTAsMCArMSw3MTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL2dwX2h0X21hcF8uaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgZ2VuZXJhbCBwcm9iaW5nIGhhc2guCisgKi8KKworI2luY2x1ZGUgPGV4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcmFuZ2VkX3Byb2JlX2ZuLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVzX3RyYWl0cy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2V4Y2VwdGlvbi5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9lcV9mbi9oYXNoX2VxX2ZuLmhwcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2lmZGVmIFBCX0RTX0hUX01BUF9UUkFDRV8KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNlbmRpZgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9kZWJ1Z19tYXBfYmFzZS5ocHA+CisjZW5kaWYKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0dQX0hBU0hfTkFNRSBncF9odF9tYXAKKyNlbmRpZgorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfR1BfSEFTSF9OQU1FIGdwX2h0X3NldAorI2VuZGlmCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEhhc2hfRm4sIHR5cGVuYW1lIEVxX0ZuLCBcCisJICAgIHR5cGVuYW1lIF9BbGxvYywgYm9vbCBTdG9yZV9IYXNoLCB0eXBlbmFtZSBDb21iX1Byb2JlX0ZuLCBcCisJICAgIHR5cGVuYW1lIFByb2JlX0ZuLAl0eXBlbmFtZSBSZXNpemVfUG9saWN5PgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgIFBCX0RTX0dQX0hBU0hfTkFNRTxLZXksIE1hcHBlZCwgSGFzaF9GbiwgRXFfRm4sIF9BbGxvYywgXAorCQkgICAgU3RvcmVfSGFzaCwgQ29tYl9Qcm9iZV9GbiwgUHJvYmVfRm4sIFJlc2l6ZV9Qb2xpY3k+CisKKyNkZWZpbmUgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQyBcCisgICAgaGFzaF9lcV9mbjxLZXksIEVxX0ZuLCBfQWxsb2MsIFN0b3JlX0hhc2g+CisKKyNkZWZpbmUgUEJfRFNfUkFOR0VEX1BST0JFX0ZOX0NfREVDIFwKKyAgIHJhbmdlZF9wcm9iZV9mbjxLZXksIEhhc2hfRm4sIF9BbGxvYywgQ29tYl9Qcm9iZV9GbiwgUHJvYmVfRm4sIFN0b3JlX0hhc2g+CisKKyNkZWZpbmUgUEJfRFNfR1BfSEFTSF9UUkFJVFNfQkFTRSBcCisgICB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIF9BbGxvYywgU3RvcmVfSGFzaD4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjZGVmaW5lIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDIFwKKyAgIGRlYnVnX21hcF9iYXNlPEtleSwgRXFfRm4sIFwKKwkJICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlPgorI2VuZGlmCisKKworICAgIC8qKgorICAgICAqICBBIGdlbmVyYWwtcHJvYmluZyBoYXNoLWJhc2VkIGNvbnRhaW5lci4KKyAgICAgKgorICAgICAqCisgICAgICogIEBpbmdyb3VwIGhhc2gtZGV0YWlsCisgICAgICoKKyAgICAgKiAgQHRwYXJhbSBLZXkgCSAgICAJS2V5IHR5cGUuCisgICAgICoKKyAgICAgKiAgQHRwYXJhbSBNYXBwZWQgCSAgICAJTWFwIHR5cGUuCisgICAgICoKKyAgICAgKiAgQHRwYXJhbSBIYXNoX0ZuCSAgICAgIAlIYXNoaW5nIGZ1bmN0b3IuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgaXMgX19nbnVfY3h4OjpoYXNoLgorICAgICAqCisgICAgICogIEB0cGFyYW0gRXFfRm4JICAgICAgCUVxdWFsIGZ1bmN0b3IuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgc3RkOjplcXVhbF90bzxLZXk+CisgICAgICoKKyAgICAgKiAgQHRwYXJhbSBfQWxsb2MgCSAgICAJQWxsb2NhdG9yIHR5cGUuCisgICAgICoKKyAgICAgKiAgQHRwYXJhbSBTdG9yZV9IYXNoICAgIAlJZiBrZXkgdHlwZSBzdG9yZXMgZXh0cmEgbWV0YWRhdGEuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGZhbHNlLgorICAgICAqCisgICAgICogIEB0cGFyYW0gQ29tYl9Qcm9iZV9GbglDb21iaW5pbmcgcHJvYmUgZnVuY3Rvci4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgSGFzaF9GbiBpcyBub3QgbnVsbF90eXBlLCB0aGVuIHRoaXMKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHJhbmdlZC1wcm9iZSBmdW5jdG9yOyBvdGhlcndpc2UsCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgdGhlIHJhbmdlLWhhc2hpbmcgZnVuY3Rvci4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgWFhYIFNlZSBEZXNpZ246Okhhc2gtQmFzZWQgQ29udGFpbmVyczo6SGFzaCBQb2xpY2llcy4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBkaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nLgorICAgICAqCisgICAgICogIEB0cGFyYW0gUHJvYmVfRm4gICAgICAgCVByb2JlIGZ1bmN0b3IuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGxpbmVhcl9wcm9iZV9mbiwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBxdWFkcmF0aWNfcHJvYmVfZm4uCisgICAgICoKKyAgICAgKiAgQHRwYXJhbSBSZXNpemVfUG9saWN5IAlSZXNpemVzIGhhc2guCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeSwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeSBhbmQKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyLgorICAgICAqCisgICAgICoKKyAgICAgKiAgQmFzZXMgYXJlOiBkZXRhaWw6Omhhc2hfZXFfZm4sIFJlc2l6ZV9Qb2xpY3ksIGRldGFpbDo6cmFuZ2VkX3Byb2JlX2ZuLAorICAgICAqICAgICAgICAgICAgIGRldGFpbDo6dHlwZXNfdHJhaXRzLiAoT3B0aW9uYWw6IGRldGFpbDo6ZGVidWdfbWFwX2Jhc2UuKQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIHR5cGVuYW1lIE1hcHBlZCwKKwkgICAgIHR5cGVuYW1lIEhhc2hfRm4sCisJICAgICB0eXBlbmFtZSBFcV9GbiwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYywKKwkgICAgIGJvb2wgU3RvcmVfSGFzaCwKKwkgICAgIHR5cGVuYW1lIENvbWJfUHJvYmVfRm4sCisJICAgICB0eXBlbmFtZSBQcm9iZV9GbiwKKwkgICAgIHR5cGVuYW1lIFJlc2l6ZV9Qb2xpY3k+CisgICAgY2xhc3MgUEJfRFNfR1BfSEFTSF9OQU1FIDoKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgcHJvdGVjdGVkIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDLAorI2VuZGlmCisgICAgICBwdWJsaWMgUEJfRFNfSEFTSF9FUV9GTl9DX0RFQywKKyAgICAgIHB1YmxpYyBSZXNpemVfUG9saWN5LAorICAgICAgcHVibGljIFBCX0RTX1JBTkdFRF9QUk9CRV9GTl9DX0RFQywKKyAgICAgIHB1YmxpYyBQQl9EU19HUF9IQVNIX1RSQUlUU19CQVNFCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIFBCX0RTX0dQX0hBU0hfVFJBSVRTX0JBU0UJICAgICAgIAl0cmFpdHNfYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnZhbHVlX3R5cGUgCXZhbHVlX3R5cGVfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cG9pbnRlciAJcG9pbnRlcl87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXJfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cmVmZXJlbmNlIAlyZWZlcmVuY2VfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZV87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb21wX2hhc2gJY29tcF9oYXNoOworCisgICAgICBlbnVtIGVudHJ5X3N0YXR1cworCXsKKwkgIGVtcHR5X2VudHJ5X3N0YXR1cywKKwkgIHZhbGlkX2VudHJ5X3N0YXR1cywKKwkgIGVyYXNlZF9lbnRyeV9zdGF0dXMKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworICAgICAgc3RydWN0IGVudHJ5IDogcHVibGljIHRyYWl0c19iYXNlOjpzdG9yZWRfZGF0YV90eXBlCisgICAgICB7CisJZW50cnlfc3RhdHVzIG1fc3RhdDsKKyAgICAgIH07CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8ZW50cnk+OjpvdGhlciBlbnRyeV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6cG9pbnRlciBlbnRyeV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OmNvbnN0X3BvaW50ZXIgY29uc3RfZW50cnlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpyZWZlcmVuY2UgZW50cnlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9lbnRyeV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6cG9pbnRlciBlbnRyeV9hcnJheTsKKworICAgICAgdHlwZWRlZiBQQl9EU19SQU5HRURfUFJPQkVfRk5fQ19ERUMgCXJhbmdlZF9wcm9iZV9mbl9iYXNlOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHR5cGVkZWYgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMgCWRlYnVnX2Jhc2U7CisjZW5kaWYKKworICAgICAgdHlwZWRlZiBQQl9EU19IQVNIX0VRX0ZOX0NfREVDIAkJaGFzaF9lcV9mbl9iYXNlOworICAgICAgdHlwZWRlZiBSZXNpemVfUG9saWN5IAkJCXJlc2l6ZV9iYXNlOworCisjZGVmaW5lIFBCX0RTX0dFTl9QT1MgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2NvbnN0X2l0ZXJhdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9wb2ludF9pdGVyYXRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2l0ZXJhdG9yLmhwcD4KKworI3VuZGVmIFBCX0RTX0dFTl9QT1MKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0FsbG9jIAkJCQlhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgSGFzaF9GbiAJCQkJaGFzaF9mbjsKKyAgICAgIHR5cGVkZWYgRXFfRm4gCQkJCWVxX2ZuOworICAgICAgdHlwZWRlZiBQcm9iZV9GbiAJCQkJcHJvYmVfZm47CisgICAgICB0eXBlZGVmIENvbWJfUHJvYmVfRm4gCQkJY29tYl9wcm9iZV9mbjsKKyAgICAgIHR5cGVkZWYgUmVzaXplX1BvbGljeSAJCQlyZXNpemVfcG9saWN5OworCisgICAgICAvLy8gVmFsdWUgc3RvcmVzIGhhc2gsIHRydWUgb3IgZmFsc2UuCisgICAgICBlbnVtCisJeworCSAgc3RvcmVfaGFzaCA9IFN0b3JlX0hhc2gKKwl9OworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfdHlwZSAJa2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfcG9pbnRlciBrZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9jb25zdF9wb2ludGVyIGtleV9jb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3JlZmVyZW5jZSBrZXlfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X2NvbnN0X3JlZmVyZW5jZSBrZXlfY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3R5cGUgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfcG9pbnRlciBtYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9jb25zdF9wb2ludGVyIG1hcHBlZF9jb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX3JlZmVyZW5jZSBtYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX2NvbnN0X3JlZmVyZW5jZSBtYXBwZWRfY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cG9pbnRlciBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICB0eXBlZGVmIHBvaW50X2l0ZXJhdG9yXyAJCQlwb2ludF9pdGVyYXRvcjsKKyNlbmRpZgorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgcG9pbnRfY29uc3RfaXRlcmF0b3JfIAkJcG9pbnRfaXRlcmF0b3I7CisjZW5kaWYKKworICAgICAgdHlwZWRlZiBwb2ludF9jb25zdF9pdGVyYXRvcl8gCQlwb2ludF9jb25zdF9pdGVyYXRvcjsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfIAkJCWl0ZXJhdG9yOworI2VuZGlmCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvcl8gCQkJaXRlcmF0b3I7CisjZW5kaWYKKworICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvcl8gCQkJY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIFBCX0RTX0dQX0hBU0hfTkFNRSgpOworCisgICAgICBQQl9EU19HUF9IQVNIX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgUEJfRFNfR1BfSEFTSF9OQU1FKGNvbnN0IEhhc2hfRm4mKTsKKworICAgICAgUEJfRFNfR1BfSEFTSF9OQU1FKGNvbnN0IEhhc2hfRm4mLCBjb25zdCBFcV9GbiYpOworCisgICAgICBQQl9EU19HUF9IQVNIX05BTUUoY29uc3QgSGFzaF9GbiYsIGNvbnN0IEVxX0ZuJiwgY29uc3QgQ29tYl9Qcm9iZV9GbiYpOworCisgICAgICBQQl9EU19HUF9IQVNIX05BTUUoY29uc3QgSGFzaF9GbiYsIGNvbnN0IEVxX0ZuJiwgY29uc3QgQ29tYl9Qcm9iZV9GbiYsCisJCQkgY29uc3QgUHJvYmVfRm4mKTsKKworICAgICAgUEJfRFNfR1BfSEFTSF9OQU1FKGNvbnN0IEhhc2hfRm4mLCBjb25zdCBFcV9GbiYsIGNvbnN0IENvbWJfUHJvYmVfRm4mLAorCQkJIGNvbnN0IFByb2JlX0ZuJiwgY29uc3QgUmVzaXplX1BvbGljeSYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICAgIHZvaWQKKyAgICAgIGNvcHlfZnJvbV9yYW5nZShJdCwgSXQpOworCisgICAgICB2aXJ0dWFsCisgICAgICB+UEJfRFNfR1BfSEFTSF9OQU1FKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0OworCisgICAgICAvLy8gVHJ1ZSBpZiBzaXplKCkgPT0gMC4KKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgaGFzaF9mbi4KKyAgICAgIEhhc2hfRm4mCisgICAgICBnZXRfaGFzaF9mbigpOworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgY29uc3QgaGFzaF9mbi4KKyAgICAgIGNvbnN0IEhhc2hfRm4mCisgICAgICBnZXRfaGFzaF9mbigpIGNvbnN0OworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgZXFfZm4uCisgICAgICBFcV9GbiYKKyAgICAgIGdldF9lcV9mbigpOworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgY29uc3QgZXFfZm4uCisgICAgICBjb25zdCBFcV9GbiYKKyAgICAgIGdldF9lcV9mbigpIGNvbnN0OworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgcHJvYmVfZm4uCisgICAgICBQcm9iZV9GbiYKKyAgICAgIGdldF9wcm9iZV9mbigpOworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgY29uc3QgcHJvYmVfZm4uCisgICAgICBjb25zdCBQcm9iZV9GbiYKKyAgICAgIGdldF9wcm9iZV9mbigpIGNvbnN0OworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgY29tYl9wcm9iZV9mbi4KKyAgICAgIENvbWJfUHJvYmVfRm4mCisgICAgICBnZXRfY29tYl9wcm9iZV9mbigpOworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgY29uc3QgY29tYl9wcm9iZV9mbi4KKyAgICAgIGNvbnN0IENvbWJfUHJvYmVfRm4mCisgICAgICBnZXRfY29tYl9wcm9iZV9mbigpIGNvbnN0OworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgcmVzaXplX3BvbGljeS4KKyAgICAgIFJlc2l6ZV9Qb2xpY3kmCisgICAgICBnZXRfcmVzaXplX3BvbGljeSgpOworCisgICAgICAvLy8gUmV0dXJuIGN1cnJlbnQgY29uc3QgcmVzaXplX3BvbGljeS4KKyAgICAgIGNvbnN0IFJlc2l6ZV9Qb2xpY3kmCisgICAgICBnZXRfcmVzaXplX3BvbGljeSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCkKKyAgICAgIHsKKyAgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKFBCX0RTX0NMQVNTX0NfREVDOjphc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisJcmV0dXJuIGluc2VydF9pbXAocl92YWwsIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisgICAgICB9CisKKyAgICAgIGlubGluZSBtYXBwZWRfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorCXJldHVybiBzdWJzY3JpcHRfaW1wKHJfa2V5LCB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworI2Vsc2UKKwlpbnNlcnQocl9rZXkpOworCXJldHVybiB0cmFpdHNfYmFzZTo6c19udWxsX3R5cGU7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgcG9pbnRfY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSkgY29uc3Q7CisKKyAgICAgIGlubGluZSBwb2ludF9pdGVyYXRvcgorICAgICAgZmluZF9lbmQoKTsKKworICAgICAgaW5saW5lIHBvaW50X2NvbnN0X2l0ZXJhdG9yCisgICAgICBmaW5kX2VuZCgpIGNvbnN0OworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2Uoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgYmVnaW4oKTsKKworICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGVuZCgpOworICAgICAgCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0OworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZChjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKyNlbmRpZgorCisjaWZkZWYgUEJfRFNfSFRfTUFQX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdDsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICBmcmllbmQgY2xhc3MgaXRlcmF0b3JfOworI2VuZGlmCisKKyAgICAgIGZyaWVuZCBjbGFzcyBjb25zdF9pdGVyYXRvcl87CisKKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGVfYWxsKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGluaXRpYWxpemUoKTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2VfYWxsX3ZhbGlkX2VudHJpZXMoZW50cnlfYXJyYXksIHNpemVfdHlwZSk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBkb19yZXNpemVfaWZfbmVlZGVkKCk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBkb19yZXNpemVfaWZfbmVlZGVkX25vX3Rocm93KCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZV9pbXAoc2l6ZV90eXBlKTsKKworICAgICAgdmlydHVhbCB2b2lkCisgICAgICBkb19yZXNpemUoc2l6ZV90eXBlKTsKKworICAgICAgdm9pZAorICAgICAgcmVzaXplX2ltcChlbnRyeV9hcnJheSwgc2l6ZV90eXBlKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHJlc2l6ZV9pbXBfcmVhc3NpZ24oZW50cnlfcG9pbnRlciwgZW50cnlfYXJyYXksIGZhbHNlX3R5cGUpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgcmVzaXplX2ltcF9yZWFzc2lnbihlbnRyeV9wb2ludGVyLCBlbnRyeV9hcnJheSwgdHJ1ZV90eXBlKTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZmluZF9pbnNfcG9zKGtleV9jb25zdF9yZWZlcmVuY2UsIGZhbHNlX3R5cGUpOworCisgICAgICBpbmxpbmUgY29tcF9oYXNoCisgICAgICBmaW5kX2luc19wb3Moa2V5X2NvbnN0X3JlZmVyZW5jZSwgdHJ1ZV90eXBlKTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlLCBmYWxzZV90eXBlKTsKKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlLCB0cnVlX3R5cGUpOworCisgICAgICBpbmxpbmUgcG9pbnRlcgorICAgICAgaW5zZXJ0X25ld19pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBzaXplX3R5cGUgcG9zKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX2VudHJpZXNbcG9zXS5tX3N0YXQgIT0gdmFsaWRfZW50cnlfc3RhdHVzKTsKKworCWlmIChkb19yZXNpemVfaWZfbmVlZGVkKCkpCisJICBwb3MgPSBmaW5kX2luc19wb3MoUEJfRFNfVjJGKHJfdmFsKSwKKwkJCSAgICAgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKKworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX2VudHJpZXNbcG9zXS5tX3N0YXQgIT0gdmFsaWRfZW50cnlfc3RhdHVzKTsKKwllbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworCW5ldyAoJnBfZS0+bV92YWx1ZSkgdmFsdWVfdHlwZShyX3ZhbCk7CisJcF9lLT5tX3N0YXQgPSB2YWxpZF9lbnRyeV9zdGF0dXM7CisJcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRlZCgrK21fbnVtX3VzZWRfZSk7CisKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSkpOykKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKwlyZXR1cm4gJnBfZS0+bV92YWx1ZTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50ZXIKKyAgICAgIGluc2VydF9uZXdfaW1wKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgY29tcF9oYXNoJiByX3Bvc19oYXNoX3BhaXIpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fZW50cmllc1tyX3Bvc19oYXNoX3BhaXIuZmlyc3RdLm1fc3RhdCAhPQorCQkJICAgICAgdmFsaWRfZW50cnlfc3RhdHVzKTsKKworCWlmIChkb19yZXNpemVfaWZfbmVlZGVkKCkpCisJICByX3Bvc19oYXNoX3BhaXIgPSBmaW5kX2luc19wb3MoUEJfRFNfVjJGKHJfdmFsKSwKKwkJCQkJIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9lbnRyaWVzW3JfcG9zX2hhc2hfcGFpci5maXJzdF0ubV9zdGF0ICE9CisJCQkgICAgICB2YWxpZF9lbnRyeV9zdGF0dXMpOworCisJZW50cnkqIGNvbnN0IHBfZSA9IG1fZW50cmllcyArIHJfcG9zX2hhc2hfcGFpci5maXJzdDsKKwluZXcgKCZwX2UtPm1fdmFsdWUpIHZhbHVlX3R5cGUocl92YWwpOworCXBfZS0+bV9oYXNoID0gcl9wb3NfaGFzaF9wYWlyLnNlY29uZDsKKwlwX2UtPm1fc3RhdCA9IHZhbGlkX2VudHJ5X3N0YXR1czsKKworCXJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0ZWQoKyttX251bV91c2VkX2UpOworCisJX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpKTspCisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisJcmV0dXJuICZwX2UtPm1fdmFsdWU7CisgICAgICB9CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgc3Vic2NyaXB0X2ltcChrZXlfY29uc3RfcmVmZXJlbmNlIGtleSwgZmFsc2VfdHlwZSkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKworCWNvbnN0IHNpemVfdHlwZSBwb3MgPSBmaW5kX2luc19wb3Moa2V5LAorCQkJCQkgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yKTsKKworCWVudHJ5X3BvaW50ZXIgcF9lID0gJm1fZW50cmllc1twb3NdOworCWlmIChwX2UtPm1fc3RhdCAhPSB2YWxpZF9lbnRyeV9zdGF0dXMpCisJICByZXR1cm4gaW5zZXJ0X25ld19pbXAodmFsdWVfdHlwZShrZXksIG1hcHBlZF90eXBlKCkpLCBwb3MpLT5zZWNvbmQ7CisKKwlQQl9EU19DSEVDS19LRVlfRVhJU1RTKGtleSkKKwlyZXR1cm4gcF9lLT5tX3ZhbHVlLnNlY29uZDsKKyAgICAgIH0KKworICAgICAgaW5saW5lIG1hcHBlZF9yZWZlcmVuY2UKKyAgICAgIHN1YnNjcmlwdF9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSBrZXksIHRydWVfdHlwZSkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKworCWNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gZmluZF9pbnNfcG9zKGtleSwKKwkJCQkJIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisKKwlpZiAobV9lbnRyaWVzW3Bvc19oYXNoX3BhaXIuZmlyc3RdLm1fc3RhdCAhPSB2YWxpZF9lbnRyeV9zdGF0dXMpCisJICByZXR1cm4gaW5zZXJ0X25ld19pbXAodmFsdWVfdHlwZShrZXksIG1hcHBlZF90eXBlKCkpLAorCQkJCSBwb3NfaGFzaF9wYWlyKS0+c2Vjb25kOworCisJUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhrZXkpCisJcmV0dXJuIChtX2VudHJpZXMgKyBwb3NfaGFzaF9wYWlyLmZpcnN0KS0+bV92YWx1ZS5zZWNvbmQ7CisgICAgICB9CisjZW5kaWYKKworICAgICAgaW5saW5lIHBvaW50ZXIKKyAgICAgIGZpbmRfa2V5X3BvaW50ZXIoa2V5X2NvbnN0X3JlZmVyZW5jZSBrZXksIGZhbHNlX3R5cGUpCisgICAgICB7CisJY29uc3Qgc2l6ZV90eXBlIGhhc2ggPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShrZXkpOworCXJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfc3RhcnQoKTsKKworCS8vIExvb3AgdW50aWwgZW50cnkgaXMgZm91bmQgb3IgdW50aWwgYWxsIHBvc3NpYmxlIGVudHJpZXMgYWNjZXNzZWQuCisJZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBtX251bV9lOyArK2kpCisJICB7CisJICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShrZXksCisJCQkJCQkJCSAgIGhhc2gsIGkpOworCisJICAgIGVudHJ5KiBjb25zdCBwX2UgPSBtX2VudHJpZXMgKyBwb3M7CisJICAgIHN3aXRjaCAocF9lLT5tX3N0YXQpCisJICAgICAgeworCSAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCQl7CisJCSAgcmVzaXplX2Jhc2U6Om5vdGlmeV9maW5kX3NlYXJjaF9lbmQoKTsKKwkJICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qoa2V5KQorCQkgIHJldHVybiAwOworCQl9CisJCWJyZWFrOworCSAgICAgIGNhc2UgdmFsaWRfZW50cnlfc3RhdHVzOgorCQlpZiAoaGFzaF9lcV9mbl9iYXNlOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX2UtPm1fdmFsdWUpLCBrZXkpKQorCQkgIHsKKwkJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfZW5kKCk7CisJCSAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKGtleSkKKwkJICAgIHJldHVybiBwb2ludGVyKCZwX2UtPm1fdmFsdWUpOworCQkgIH0KKwkJYnJlYWs7CisJICAgICAgY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQlfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisJICAgICAgfTsKKworCSAgICByZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2NvbGxpc2lvbigpOworCSAgfQorCisJUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKGtleSkKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCXJldHVybiAwOworICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRlcgorICAgICAgZmluZF9rZXlfcG9pbnRlcihrZXlfY29uc3RfcmVmZXJlbmNlIGtleSwgdHJ1ZV90eXBlKQorICAgICAgeworCWNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoa2V5KTsKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7CisKKwkvLyBMb29wIHVudGlsIGVudHJ5IGlzIGZvdW5kIG9yIHVudGlsIGFsbCBwb3NzaWJsZSBlbnRyaWVzIGFjY2Vzc2VkLgorCWZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorCSAgeworCSAgICBjb25zdCBzaXplX3R5cGUgcG9zID0KKwkgICAgICByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShrZXksIHBvc19oYXNoX3BhaXIuc2Vjb25kLCBpKTsKKworCSAgICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworCisJICAgIHN3aXRjaChwX2UtPm1fc3RhdCkKKwkgICAgICB7CisJICAgICAgY2FzZSBlbXB0eV9lbnRyeV9zdGF0dXM6CisJCXsKKwkJICByZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCQkgIFBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChrZXkpCisJCSAgcmV0dXJuIDA7CisJCX0KKwkJYnJlYWs7CisJICAgICAgY2FzZSB2YWxpZF9lbnRyeV9zdGF0dXM6CisJCWlmIChoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksCisJCQkJCQlwX2UtPm1faGFzaCwKKwkJCQkJCWtleSwgcG9zX2hhc2hfcGFpci5zZWNvbmQpKQorCQkgIHsKKwkJICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfZmluZF9zZWFyY2hfZW5kKCk7CisJCSAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKGtleSkKKwkJICAgIHJldHVybiBwb2ludGVyKCZwX2UtPm1fdmFsdWUpOworCQkgIH0KKwkJYnJlYWs7CisJICAgICAgY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQlfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisJICAgICAgfTsKKworCSAgICByZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2NvbGxpc2lvbigpOworCSAgfQorCisJUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKGtleSkKKwlyZXNpemVfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCXJldHVybiAwOworICAgICAgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2VfaW1wKGtleV9jb25zdF9yZWZlcmVuY2UsIHRydWVfdHlwZSk7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlcmFzZV9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBlcmFzZV9lbnRyeShlbnRyeV9wb2ludGVyKTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHZvaWQKKyAgICAgIGluY19pdF9zdGF0ZShwb2ludGVyJiByX3BfdmFsdWUsIHNpemVfdHlwZSYgcl9wb3MpIGNvbnN0CisgICAgICB7IGluY19pdF9zdGF0ZSgobWFwcGVkX2NvbnN0X3BvaW50ZXImIClyX3BfdmFsdWUsIHJfcG9zKTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGluY19pdF9zdGF0ZShjb25zdF9wb2ludGVyJiByX3BfdmFsdWUsIHNpemVfdHlwZSYgcl9wb3MpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKHJfcF92YWx1ZSAhPSAwKTsKKwlmb3IgKCsrcl9wb3M7IHJfcG9zIDwgbV9udW1fZTsgKytyX3BvcykKKwkgIHsKKwkgICAgY29uc3RfZW50cnlfcG9pbnRlciBwX2UgPSYgbV9lbnRyaWVzW3JfcG9zXTsKKwkgICAgaWYgKHBfZS0+bV9zdGF0ID09IHZhbGlkX2VudHJ5X3N0YXR1cykKKwkgICAgICB7CisJCXJfcF92YWx1ZSA9JiBwX2UtPm1fdmFsdWU7CisJCXJldHVybjsKKwkgICAgICB9CisJICB9CisJcl9wX3ZhbHVlID0gMDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgZ2V0X3N0YXJ0X2l0X3N0YXRlKGNvbnN0X3BvaW50ZXImIHJfcF92YWx1ZSwgc2l6ZV90eXBlJiByX3BvcykgY29uc3QKKyAgICAgIHsKKwlmb3IgKHJfcG9zID0gMDsgcl9wb3MgPCBtX251bV9lOyArK3JfcG9zKQorCSAgeworCSAgICBjb25zdF9lbnRyeV9wb2ludGVyIHBfZSA9ICZtX2VudHJpZXNbcl9wb3NdOworCSAgICBpZiAocF9lLT5tX3N0YXQgPT0gdmFsaWRfZW50cnlfc3RhdHVzKQorCSAgICAgIHsKKwkJcl9wX3ZhbHVlID0gJnBfZS0+bV92YWx1ZTsKKwkJcmV0dXJuOworCSAgICAgIH0KKwkgIH0KKwlyX3BfdmFsdWUgPSAwOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBnZXRfc3RhcnRfaXRfc3RhdGUocG9pbnRlciYgcl9wX3ZhbHVlLCBzaXplX3R5cGUmIHJfcG9zKQorICAgICAgeworCWZvciAocl9wb3MgPSAwOyByX3BvcyA8IG1fbnVtX2U7ICsrcl9wb3MpCisJICB7CisJICAgIGVudHJ5X3BvaW50ZXIgcF9lID0gJm1fZW50cmllc1tyX3Bvc107CisJICAgIGlmIChwX2UtPm1fc3RhdCA9PSB2YWxpZF9lbnRyeV9zdGF0dXMpCisJICAgICAgeworCQlyX3BfdmFsdWUgPSAmcF9lLT5tX3ZhbHVlOworCQlyZXR1cm47CisJICAgICAgfQorCSAgfQorCXJfcF92YWx1ZSA9IDA7CisgICAgICB9CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X2VudHJ5X2FycmF5X3ZhbGlkKGNvbnN0IGVudHJ5X2FycmF5LCBmYWxzZV90eXBlLAorCQkJICAgICAgIGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfZW50cnlfYXJyYXlfdmFsaWQoY29uc3QgZW50cnlfYXJyYXksIHRydWVfdHlwZSwKKwkJCSAgICAgICBjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKyNlbmRpZgorCisgICAgICBzdGF0aWMgZW50cnlfYWxsb2NhdG9yIAlzX2VudHJ5X2FsbG9jYXRvcjsKKyAgICAgIHN0YXRpYyBpdGVyYXRvciAJCXNfZW5kX2l0OworICAgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIAlzX2NvbnN0X2VuZF9pdDsKKworICAgICAgc2l6ZV90eXBlIAkJbV9udW1fZTsKKyAgICAgIHNpemVfdHlwZSAJCW1fbnVtX3VzZWRfZTsKKyAgICAgIGVudHJ5X3BvaW50ZXIgCQltX2VudHJpZXM7CisKKyAgICAgIGVudW0KKwl7CisJICBzdG9yZV9oYXNoX29rID0gIVN0b3JlX0hhc2gKKwkJCSAgfHwgIWlzX3NhbWU8SGFzaF9GbiwgX19nbnVfcGJkczo6bnVsbF90eXBlPjo6dmFsdWUKKwl9OworCisgICAgICBQQl9EU19TVEFUSUNfQVNTRVJUKHN0aCwgc3RvcmVfaGFzaF9vayk7CisgICAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZmluZF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5mb19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2l0ZXJhdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy90cmFjZV9mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19IQVNIX0VRX0ZOX0NfREVDCisjdW5kZWYgUEJfRFNfUkFOR0VEX1BST0JFX0ZOX0NfREVDCisjdW5kZWYgUEJfRFNfR1BfSEFTSF9UUkFJVFNfQkFTRQorI3VuZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDCisjdW5kZWYgUEJfRFNfR1BfSEFTSF9OQU1FCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMGZmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luZm9fZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vaW5mb19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBlbnRpcmUgY29udGFpbmVyIGluZm8gcmVsYXRlZAorICogZnVuY3Rpb25zLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBtX251bV91c2VkX2U7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBzX2VudHJ5X2FsbG9jYXRvci5tYXhfc2l6ZSgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW1wdHkoKSBjb25zdAoreyByZXR1cm4gKHNpemUoKSA9PSAwKTsgfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTA1NjdkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw0MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIGluc2VydCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTA5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTExIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGdwX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfbm9fc3RvcmVfaGFzaF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBpbnNlcnQgcmVsYXRlZCBmdW5jdGlvbnMsCisgKiB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIG5vdCBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2luc19wb3Moa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgZmFsc2VfdHlwZSkKK3sKKyAgc2l6ZV90eXBlIGhhc2ggPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSk7CisgIHNpemVfdHlwZSBpOworCisgIC8qIFRoZSBpbnNlcnRpb24gcG9zaXRpb24gaXMgaW5pdHRlZCB0byBhIG5vbi1sZWdhbCB2YWx1ZSB0byBpbmRpY2F0ZQorICAgKiAgICAgdGhhdCBpdCBoYXMgbm90IGJlZW4gaW5pdHRlZCB5ZXQuCisgICAqLworICBzaXplX3R5cGUgaW5zX3BvcyA9IG1fbnVtX2U7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpOworICBmb3IgKGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgaGFzaCwgaSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocG9zIDwgbV9udW1fZSk7CisgICAgICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICAgICAgc3dpdGNoKHBfZS0+bV9zdGF0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCSAgeworICAgICAgICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCSAgICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisJICAgIHJldHVybiAoaW5zX3BvcyA9PSBtX251bV9lKSA/IHBvcyA6IGluc19wb3M7CisJICB9CisJICBicmVhazsKKyAgICAgICAgY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCSAgaWYgKGluc19wb3MgPT0gbV9udW1fZSkKKwkgICAgaW5zX3BvcyA9IHBvczsKKwkgIGJyZWFrOworICAgICAgICBjYXNlIHZhbGlkX2VudHJ5X3N0YXR1czoKKwkgIGlmIChoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICAgICAgICAgIHsKKwkgICAgICByZXNpemVfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCk7CisJICAgICAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhyX2tleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zOworICAgICAgICAgICAgfQorCSAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisgICAgICAgIH07CisKKyAgICAgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKyAgICB9CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKTsKKyAgaWYgKGluc19wb3MgPT0gbV9udW1fZSkKKyAgICBfX3Rocm93X2luc2VydF9lcnJvcigpOworICByZXR1cm4gaW5zX3BvczsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8dHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yLCBib29sPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0X2ltcChjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpCit7CisgIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkgPSBQQl9EU19WMkYocl92YWwpOworICBjb25zdCBzaXplX3R5cGUgcG9zID0gZmluZF9pbnNfcG9zKHJfa2V5LCAKKwkJCQkgICAgIHRyYWl0c19iYXNlOjptX3N0b3JlX2V4dHJhX2luZGljYXRvcik7CisKKyAgaWYgKG1fZW50cmllc1twb3NdLm1fc3RhdCA9PSB2YWxpZF9lbnRyeV9zdGF0dXMpCisgICAgeworICAgICAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhyX2tleSkKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigmKG1fZW50cmllcyArIHBvcyktPm1fdmFsdWUsIGZhbHNlKTsKKyAgICB9CisKKyAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKHJfa2V5KQorICByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5zZXJ0X25ld19pbXAocl92YWwsIHBvcyksIHRydWUpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL2luc2VydF9zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDAyMDAyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pbnNlcnRfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDExOCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vaW5zZXJ0X3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgZmluZCByZWxhdGVkIGZ1bmN0aW9ucywKKyAqIHdoZW4gdGhlIGhhc2ggdmFsdWUgaXMgc3RvcmVkLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbXBfaGFzaAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9pbnNfcG9zKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXksIHRydWVfdHlwZSkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGNvbXBfaGFzaCBwb3NfaGFzaF9wYWlyID0gcmFuZ2VkX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpOworCisgIHNpemVfdHlwZSBpOworCisgIC8qIFRoZSBpbnNlcnRpb24gcG9zaXRpb24gaXMgaW5pdHRlZCB0byBhIG5vbi1sZWdhbCB2YWx1ZSB0byBpbmRpY2F0ZQorICAgKiAgICAgdGhhdCBpdCBoYXMgbm90IGJlZW4gaW5pdHRlZCB5ZXQuCisgICAqLworICBzaXplX3R5cGUgaW5zX3BvcyA9IG1fbnVtX2U7CisgIHJlc2l6ZV9iYXNlOjpub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpOworICBmb3IgKGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgcG9zX2hhc2hfcGFpci5zZWNvbmQsIGkpOworCisgICAgICBlbnRyeSogY29uc3QgcF9lID0gbV9lbnRyaWVzICsgcG9zOworICAgICAgc3dpdGNoKHBfZS0+bV9zdGF0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCSAgeworICAgICAgICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCSAgICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisKKwkgICAgcmV0dXJuICgoaW5zX3BvcyA9PSBtX251bV9lKSA/CisJCSAgICAgc3RkOjptYWtlX3BhaXIocG9zLCBwb3NfaGFzaF9wYWlyLnNlY29uZCkgOgorCQkgICAgIHN0ZDo6bWFrZV9wYWlyKGluc19wb3MsIHBvc19oYXNoX3BhaXIuc2Vjb25kKSk7CisJICB9CisJICBicmVhazsKKyAgICAgICAgY2FzZSBlcmFzZWRfZW50cnlfc3RhdHVzOgorCSAgaWYgKGluc19wb3MgPT0gbV9udW1fZSkKKwkgICAgaW5zX3BvcyA9IHBvczsKKwkgIGJyZWFrOworICAgICAgICBjYXNlIHZhbGlkX2VudHJ5X3N0YXR1czoKKwkgIGlmIChoYXNoX2VxX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfZS0+bV92YWx1ZSksIHBfZS0+bV9oYXNoLAorCQkJCQkgIHJfa2V5LCBwb3NfaGFzaF9wYWlyLnNlY29uZCkpCisgICAgICAgICAgICB7CisJICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCSAgICAgIFBCX0RTX0NIRUNLX0tFWV9FWElTVFMocl9rZXkpCisgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwb3MsIHBvc19oYXNoX3BhaXIuc2Vjb25kKTsKKyAgICAgICAgICAgIH0KKwkgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKDApOworICAgICAgICB9OworICAgICAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOworICAgIH0KKyAgcmVzaXplX2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworICBpZiAoaW5zX3BvcyA9PSBtX251bV9lKQorICAgIF9fdGhyb3dfaW5zZXJ0X2Vycm9yKCk7CisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbnNfcG9zLCBwb3NfaGFzaF9wYWlyLnNlY29uZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgc3RkOjpwYWlyPHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvciwgYm9vbD4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF9pbXAoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCB0cnVlX3R5cGUpCit7CisgIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkgPSBQQl9EU19WMkYocl92YWwpOworICBjb21wX2hhc2ggcG9zX2hhc2hfcGFpciA9IGZpbmRfaW5zX3BvcyhyX2tleSwgCisJCQkJCSB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwb3NfaGFzaF9wYWlyLmZpcnN0IDwgbV9udW1fZSk7CisgIGVudHJ5X3BvaW50ZXIgcF9lID0mIG1fZW50cmllc1twb3NfaGFzaF9wYWlyLmZpcnN0XTsKKyAgaWYgKHBfZS0+bV9zdGF0ID09IHZhbGlkX2VudHJ5X3N0YXR1cykKKyAgICB7CisgICAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKHJfa2V5KQorICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCZwX2UtPm1fdmFsdWUsIGZhbHNlKTsKKyAgICB9CisKKyAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKHJfa2V5KQorICByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5zZXJ0X25ld19pbXAocl92YWwsIHBvc19oYXNoX3BhaXIpLCB0cnVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9pdGVyYXRvcl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaXRlcmF0b3JfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2NDE0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vaXRlcmF0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw4MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vaXRlcmF0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgaXRlcmF0b3JzIHJlbGF0ZWQgZnVuY3Rpb25zLCBlLmcuLAorICogYmVnaW4oKS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19lbmRfaXQ7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2NvbnN0X2VuZF9pdDsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKCkKK3sKKyAgcG9pbnRlcl8gcF92YWx1ZTsKKyAgc2l6ZV90eXBlIHBvczsKKyAgZ2V0X3N0YXJ0X2l0X3N0YXRlKHBfdmFsdWUsIHBvcyk7CisgIHJldHVybiBpdGVyYXRvcihwX3ZhbHVlLCBwb3MsIHRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW5kKCkKK3sgcmV0dXJuIHNfZW5kX2l0OyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpIGNvbnN0Cit7CisgIGNvbnN0X3BvaW50ZXJfIHBfdmFsdWU7CisgIHNpemVfdHlwZSBwb3M7CisgIGdldF9zdGFydF9pdF9zdGF0ZShwX3ZhbHVlLCBwb3MpOworICByZXR1cm4gY29uc3RfaXRlcmF0b3IocF92YWx1ZSwgcG9zLCB0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VuZCgpIGNvbnN0Cit7IHJldHVybiBzX2NvbnN0X2VuZF9pdDsgfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmM2M1NwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyBwb2xpY3kgYWdwZXNzCisgKiBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK0hhc2hfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2hhc2hfZm4oKQoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IEhhc2hfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2hhc2hfZm4oKSBjb25zdAoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK0VxX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9lcV9mbigpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgRXFfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2VxX2ZuKCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQcm9iZV9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfcHJvYmVfZm4oKQoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IFByb2JlX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9wcm9iZV9mbigpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworQ29tYl9Qcm9iZV9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfY29tYl9wcm9iZV9mbigpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgQ29tYl9Qcm9iZV9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfY29tYl9wcm9iZV9mbigpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworUmVzaXplX1BvbGljeSYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfcmVzaXplX3BvbGljeSgpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgUmVzaXplX1BvbGljeSYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfcmVzaXplX3BvbGljeSgpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTk4MDlmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMzkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGdwX2h0X21hcF8ncyByZXNpemUgcmVsYXRlZCBmdW5jdGlvbnMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6Citkb19yZXNpemVfaWZfbmVlZGVkKCkKK3sKKyAgaWYgKCFyZXNpemVfYmFzZTo6aXNfcmVzaXplX25lZWRlZCgpKQorICAgIHJldHVybiBmYWxzZTsKKyAgcmVzaXplX2ltcChyZXNpemVfYmFzZTo6Z2V0X25ld19zaXplKG1fbnVtX2UsIG1fbnVtX3VzZWRfZSkpOworICByZXR1cm4gdHJ1ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2RvX3Jlc2l6ZShzaXplX3R5cGUgbikKK3sgcmVzaXplX2ltcChyZXNpemVfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUobikpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZG9fcmVzaXplX2lmX25lZWRlZF9ub190aHJvdygpCit7CisgIGlmICghcmVzaXplX2Jhc2U6OmlzX3Jlc2l6ZV9uZWVkZWQoKSkKKyAgICByZXR1cm47CisKKyAgX190cnkKKyAgICB7CisgICAgICByZXNpemVfaW1wKHJlc2l6ZV9iYXNlOjpnZXRfbmV3X3NpemUobV9udW1fZSwgbV9udW1fdXNlZF9lKSk7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7IH0KKworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3Jlc2l6ZV9pbXAoc2l6ZV90eXBlIG5ld19zaXplKQoreworI2lmZGVmIFBCX0RTX1JFR1JFU1NJT04KKyAgdHlwZW5hbWUgX0FsbG9jOjpncm91cF9hZGp1c3RvciBhZGp1c3QobV9udW1fZSk7CisjZW5kaWYgCisKKyAgaWYgKG5ld19zaXplID09IG1fbnVtX2UpCisgICAgcmV0dXJuOworCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBjb25zdCBzaXplX3R5cGUgb2xkX3NpemUgPSBtX251bV9lOworICBlbnRyeV9hcnJheSBhX2VudHJpZXNfcmVzaXplZCA9IDA7CisKKyAgLy8gRm9sbG93aW5nIGxpbmUgbWlnaHQgdGhyb3cgYW4gZXhjZXB0aW9uLgorICBhX2VudHJpZXNfcmVzaXplZCA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKG5ld19zaXplKTsKKworICByYW5nZWRfcHJvYmVfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQobmV3X3NpemUpOworICBtX251bV9lID0gbmV3X3NpemU7CisKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBtX251bV9lOyArK2kpCisgICAgYV9lbnRyaWVzX3Jlc2l6ZWRbaV0ubV9zdGF0ID0gZW1wdHlfZW50cnlfc3RhdHVzOworCisgIF9fdHJ5CisgICAgeworICAgICAgcmVzaXplX2ltcChhX2VudHJpZXNfcmVzaXplZCwgb2xkX3NpemUpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgZXJhc2VfYWxsX3ZhbGlkX2VudHJpZXMoYV9lbnRyaWVzX3Jlc2l6ZWQsIG5ld19zaXplKTsKKyAgICAgIG1fbnVtX2UgPSBvbGRfc2l6ZTsKKyAgICAgIHNfZW50cnlfYWxsb2NhdG9yLmRlYWxsb2NhdGUoYV9lbnRyaWVzX3Jlc2l6ZWQsIG5ld19zaXplKTsKKyAgICAgIHJhbmdlZF9wcm9iZV9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChvbGRfc2l6ZSk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgLy8gQXQgdGhpcyBwb2ludCBubyBleGNlcHRpb25zIGNhbiBiZSB0aHJvd24uCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X2VudHJ5X2FycmF5X3ZhbGlkKGFfZW50cmllc19yZXNpemVkLAorCQkJCQkgICAgICAgdHJhaXRzX2Jhc2U6Om1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yLAorCQkJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fKTspCisKKyAgUmVzaXplX1BvbGljeTo6bm90aWZ5X3Jlc2l6ZWQobmV3X3NpemUpOworICBlcmFzZV9hbGxfdmFsaWRfZW50cmllcyhtX2VudHJpZXMsIG9sZF9zaXplKTsKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX2VudHJpZXMsIG9sZF9zaXplKTsKKyAgbV9lbnRyaWVzID0gYV9lbnRyaWVzX3Jlc2l6ZWQ7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVzaXplX2ltcChlbnRyeV9hcnJheSBhX2VudHJpZXNfcmVzaXplZCwgc2l6ZV90eXBlIG9sZF9zaXplKQoreworICBmb3IgKHNpemVfdHlwZSBwb3MgPSAwOyBwb3MgPCBvbGRfc2l6ZTsgKytwb3MpCisgICAgaWYgKG1fZW50cmllc1twb3NdLm1fc3RhdCA9PSB2YWxpZF9lbnRyeV9zdGF0dXMpCisgICAgICByZXNpemVfaW1wX3JlYXNzaWduKG1fZW50cmllcyArIHBvcywgYV9lbnRyaWVzX3Jlc2l6ZWQsIAorCQkJICB0cmFpdHNfYmFzZTo6bV9zdG9yZV9leHRyYV9pbmRpY2F0b3IpOworfQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcmVzaXplX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHA+CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcmVzaXplX25vX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNzY5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL3Jlc2l6ZV9ub19zdG9yZV9oYXNoX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIHJlc2l6ZSByZWxhdGVkIGZ1bmN0aW9ucywgd2hlbiB0aGUKKyAqIGhhc2ggdmFsdWUgaXMgbm90IHN0b3JlZC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3Jlc2l6ZV9pbXBfcmVhc3NpZ24oZW50cnlfcG9pbnRlciBwX2UsIGVudHJ5X2FycmF5IGFfZW50cmllc19yZXNpemVkLCAKKwkJICAgIGZhbHNlX3R5cGUpCit7CisgIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkgPSBQQl9EU19WMkYocF9lLT5tX3ZhbHVlKTsKKyAgc2l6ZV90eXBlIGhhc2ggPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSk7CisgIHNpemVfdHlwZSBpOworICBmb3IgKGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgaGFzaCwgaSk7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV3X2UgPSBhX2VudHJpZXNfcmVzaXplZCArIHBvczsKKyAgICAgIHN3aXRjaChwX25ld19lLT5tX3N0YXQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBlbXB0eV9lbnRyeV9zdGF0dXM6CisJICBuZXcgKCZwX25ld19lLT5tX3ZhbHVlKSB2YWx1ZV90eXBlKHBfZS0+bV92YWx1ZSk7CisJICBwX25ld19lLT5tX3N0YXQgPSB2YWxpZF9lbnRyeV9zdGF0dXM7CisJICByZXR1cm47CisgICAgICAgIGNhc2UgZXJhc2VkX2VudHJ5X3N0YXR1czoKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgwKTsKKwkgIGJyZWFrOworICAgICAgICBjYXNlIHZhbGlkX2VudHJ5X3N0YXR1czoKKwkgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKDApOworICAgICAgICB9OworICAgIH0KKyAgX190aHJvd19pbnNlcnRfZXJyb3IoKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2dwX2hhc2hfdGFibGVfbWFwXy9yZXNpemVfc3RvcmVfaGFzaF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1MWRmNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw3NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBncF9oYXNoX3RhYmxlX21hcF8vcmVzaXplX3N0b3JlX2hhc2hfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBncF9odF9tYXBfJ3MgcmVzaXplIHJlbGF0ZWQgZnVuY3Rpb25zLCB3aGVuIHRoZQorICogaGFzaCB2YWx1ZSBpcyBzdG9yZWQuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZXNpemVfaW1wX3JlYXNzaWduKGVudHJ5X3BvaW50ZXIgcF9lLCBlbnRyeV9hcnJheSBhX2VudHJpZXNfcmVzaXplZCwgCisJCSAgICB0cnVlX3R5cGUpCit7CisgIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkgPSBQQl9EU19WMkYocF9lLT5tX3ZhbHVlKTsKKyAgc2l6ZV90eXBlIGhhc2ggPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgcF9lLT5tX2hhc2gpOworCisgIHNpemVfdHlwZSBpOworICBmb3IgKGkgPSAwOyBpIDwgbV9udW1fZTsgKytpKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBwb3MgPSByYW5nZWRfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShyX2tleSwgaGFzaCwgaSk7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV3X2UgPSBhX2VudHJpZXNfcmVzaXplZCArIHBvczsKKyAgICAgIHN3aXRjaChwX25ld19lLT5tX3N0YXQpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBlbXB0eV9lbnRyeV9zdGF0dXM6CisJICBuZXcgKCZwX25ld19lLT5tX3ZhbHVlKSB2YWx1ZV90eXBlKHBfZS0+bV92YWx1ZSk7CisJICBwX25ld19lLT5tX2hhc2ggPSBoYXNoOworCSAgcF9uZXdfZS0+bV9zdGF0ID0gdmFsaWRfZW50cnlfc3RhdHVzOworCSAgcmV0dXJuOworICAgICAgICBjYXNlIGVyYXNlZF9lbnRyeV9zdGF0dXM6CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisJICBicmVhazsKKyAgICAgICAgY2FzZSB2YWxpZF9lbnRyeV9zdGF0dXM6CisJICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgwKTsKKyAgICAgICAgfTsKKyAgICB9CisgIF9fdGhyb3dfaW5zZXJ0X2Vycm9yKCk7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9ncF9oYXNoX3RhYmxlX21hcF8vdHJhY2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTMxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvZ3BfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZ3BfaGFzaF90YWJsZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgZ3BfaHRfbWFwXydzIHRyYWNlLW1vZGUgZnVuY3Rpb25zLgorICovCisKKyNpZmRlZiBQQl9EU19IVF9NQVBfVFJBQ0VfCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit0cmFjZSgpIGNvbnN0Cit7CisgIHN0ZDo6Y2VyciA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX251bV9lKSA8PCAiICIgPDwKKyAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX251bV91c2VkX2UpIDw8IHN0ZDo6ZW5kbDsKKworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fbnVtX2U7ICsraSkKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oaSkgPDwgIiAiOworCisgICAgICBzd2l0Y2gobV9lbnRyaWVzW2ldLm1fc3RhdCkKKyAgICAgICAgeworCWNhc2UgZW1wdHlfZW50cnlfc3RhdHVzOgorCSAgc3RkOjpjZXJyIDw8ICI8ZW1wdHk+IjsKKwkgIGJyZWFrOworCWNhc2UgZXJhc2VkX2VudHJ5X3N0YXR1czoKKwkgIHN0ZDo6Y2VyciA8PCAiPGVyYXNlZD4iOworCSAgYnJlYWs7CisJY2FzZSB2YWxpZF9lbnRyeV9zdGF0dXM6CisJICBzdGQ6OmNlcnIgPDwgUEJfRFNfVjJGKG1fZW50cmllc1tpXS5tX3ZhbHVlKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisJfTsKKworICAgICAgc3RkOjpjZXJyIDw8IHN0ZDo6ZW5kbDsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyAjaWZkZWYgUEJfRFNfSFRfTUFQX1RSQUNFXwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vZGlyZWN0X21hc2tfcmFuZ2VfaGFzaGluZ19pbXAuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vZGlyZWN0X21hc2tfcmFuZ2VfaGFzaGluZ19pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODcxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nX2ltcC5ocHAKQEAgLTAsMCArMSw1OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nX2ltcC5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2UtaGFzaGluZyBwb2xpY3kgaW1wbGVtZW50YXRpb24KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7IG1hc2tfYmFzZWRfYmFzZTo6c3dhcChvdGhlcik7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBzaXplKQoreyBtYXNrX2Jhc2VkX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorb3BlcmF0b3IoKShzaXplX3R5cGUgaGFzaCkgY29uc3QKK3sgcmV0dXJuIG1hc2tfYmFzZWRfYmFzZTo6cmFuZ2VfaGFzaChoYXNoKTsgfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbW9kX3JhbmdlX2hhc2hpbmdfaW1wLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL2RpcmVjdF9tb2RfcmFuZ2VfaGFzaGluZ19pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDQ0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbW9kX3JhbmdlX2hhc2hpbmdfaW1wLmhwcApAQCAtMCwwICsxLDU4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGRpcmVjdF9tb2RfcmFuZ2VfaGFzaGluZ19pbXAuaHBwCisgKiBDb250YWlucyBhIHJhbmdlLWhhc2hpbmcgcG9saWN5IGltcGxlbWVudGF0aW9uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreyBtb2RfYmFzZWRfYmFzZTo6c3dhcChvdGhlcik7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBuKQoreyBtb2RfYmFzZWRfYmFzZTo6bm90aWZ5X3Jlc2l6ZWQobik7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcigpKHNpemVfdHlwZSBoYXNoKSBjb25zdAoreyByZXR1cm4gbW9kX2Jhc2VkX2Jhc2U6OnJhbmdlX2hhc2goaGFzaCk7IH0KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbGluZWFyX3Byb2JlX2ZuX2ltcC5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9saW5lYXJfcHJvYmVfZm5faW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ3NjkyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbGluZWFyX3Byb2JlX2ZuX2ltcC5ocHAKQEAgLTAsMCArMSw1MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsaW5lYXJfcHJvYmVfZm5faW1wLmhwcAorICogQ29udGFpbnMgYSBwcm9iZSBwb2xpY3kgaW1wbGVtZW50YXRpb24KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorb3BlcmF0b3IoKShzaXplX3R5cGUgaSkgY29uc3QKK3sKKyAgcmV0dXJuIChpKTsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9tYXNrX2Jhc2VkX3JhbmdlX2hhc2hpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTg5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9tYXNrX2Jhc2VkX3JhbmdlX2hhc2hpbmcuaHBwCkBAIC0wLDAgKzEsMTAxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG1hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2UgaGFzaGluZyBwb2xpY3kgYmFzZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX01BU0tfQkFTRURfUkFOR0VfSEFTSElOR19IUFAKKyNkZWZpbmUgUEJfRFNfTUFTS19CQVNFRF9SQU5HRV9IQVNISU5HX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gUmFuZ2UgaGFzaGluZyBwb2xpY3kuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorICAgIGNsYXNzIG1hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZworICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIFNpemVfVHlwZSAJc2l6ZV90eXBlOworCisgICAgICB2b2lkCisgICAgICBzd2FwKG1hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZyYgb3RoZXIpCisgICAgICB7IHN0ZDo6c3dhcChtX21hc2ssIG90aGVyLm1fbWFzayk7IH0KKworICAgICAgdm9pZAorICAgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpOworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICByYW5nZV9oYXNoKHNpemVfdHlwZSBoYXNoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZV90eXBlKGhhc2ggJiBtX21hc2spOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgc2l6ZV90eXBlIAkJbV9tYXNrOworICAgICAgY29uc3Qgc3RhdGljIHNpemVfdHlwZSAJc19udW1fYml0c19pbl9zaXplX3R5cGU7CisgICAgICBjb25zdCBzdGF0aWMgc2l6ZV90eXBlIAlzX2hpZ2hlc3RfYml0XzE7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyAgICBjb25zdCB0eXBlbmFtZSBtYXNrX2Jhc2VkX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPjo6c2l6ZV90eXBlCisgICAgbWFza19iYXNlZF9yYW5nZV9oYXNoaW5nPFNpemVfVHlwZT46OnNfbnVtX2JpdHNfaW5fc2l6ZV90eXBlID0KKyAgICAgIHNpemVvZih0eXBlbmFtZSBtYXNrX2Jhc2VkX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPjo6c2l6ZV90eXBlKSA8PCAzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorICAgIGNvbnN0IHR5cGVuYW1lIG1hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZzxTaXplX1R5cGU+OjpzaXplX3R5cGUgbWFza19iYXNlZF9yYW5nZV9oYXNoaW5nPFNpemVfVHlwZT46OnNfaGlnaGVzdF9iaXRfMSA9IHN0YXRpY19jYXN0PHR5cGVuYW1lIG1hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZzxTaXplX1R5cGU+OjpzaXplX3R5cGU+KDEpIDw8IChzX251bV9iaXRzX2luX3NpemVfdHlwZSAtIDEpOworCisgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorICAgIHZvaWQKKyAgICBtYXNrX2Jhc2VkX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPjo6CisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpCisgICAgeworICAgICAgc2l6ZV90eXBlIGkgPSAwOworICAgICAgd2hpbGUgKHNpemUgXiBzX2hpZ2hlc3RfYml0XzEpCisJeworCSAgc2l6ZSA8PD0gMTsKKwkgICsraTsKKwl9CisKKyAgICAgIG1fbWFzayA9IDE7CisgICAgICBpICs9IDI7CisgICAgICB3aGlsZSAoaSsrIDwgc19udW1fYml0c19pbl9zaXplX3R5cGUpCisgICAgICAgIG1fbWFzayA9IChtX21hc2sgPDwgMSkgXiAxOworICAgIH0KKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbW9kX2Jhc2VkX3JhbmdlX2hhc2hpbmcuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbW9kX2Jhc2VkX3JhbmdlX2hhc2hpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2Y2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9tb2RfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHAKQEAgLTAsMCArMSw3NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBtb2RfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2UgaGFzaGluZyBwb2xpY3kgYmFzZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX01PRF9CQVNFRF9SQU5HRV9IQVNISU5HX0hQUAorI2RlZmluZSBQQl9EU19NT0RfQkFTRURfUkFOR0VfSEFTSElOR19IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLy8vIE1vZCBiYXNlZCByYW5nZSBoYXNoaW5nLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyAgICBjbGFzcyBtb2RfYmFzZWRfcmFuZ2VfaGFzaGluZworICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIFNpemVfVHlwZSAJc2l6ZV90eXBlOworCisgICAgICB2b2lkCisgICAgICBzd2FwKG1vZF9iYXNlZF9yYW5nZV9oYXNoaW5nJiBvdGhlcikKKyAgICAgIHsgc3RkOjpzd2FwKG1fc2l6ZSwgb3RoZXIubV9zaXplKTsgfQorCisgICAgICB2b2lkCisgICAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgcykKKyAgICAgIHsgbV9zaXplID0gczsgfQorCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICByYW5nZV9oYXNoKHNpemVfdHlwZSBzKSBjb25zdAorICAgICAgeyByZXR1cm4gcyAlIG1fc2l6ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHNpemVfdHlwZSBtX3NpemU7CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfTU9EX0JBU0VEX1JBTkdFX0hBU0hJTkdfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9wcm9iZV9mbl9iYXNlLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3Byb2JlX2ZuX2Jhc2UuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YWI5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9wcm9iZV9mbl9iYXNlLmhwcApAQCAtMCwwICsxLDYwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHByb2JlX2ZuX2Jhc2UuaHBwCisgKiBDb250YWlucyBhIHByb2JlIHBvbGljeSBiYXNlLgorICovCisKKyNpZm5kZWYgUEJfRFNfUFJPQkVfRk5fQkFTRV9IUFAKKyNkZWZpbmUgUEJfRFNfUFJPQkVfRk5fQkFTRV9IUFAKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBQcm9iZSBmdW5jdG9yIGJhc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIHByb2JlX2ZuX2Jhc2UKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgfnByb2JlX2ZuX2Jhc2UoKSB7IH0KKyAgICB9OworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3F1YWRyYXRpY19wcm9iZV9mbl9pbXAuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcXVhZHJhdGljX3Byb2JlX2ZuX2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhODNhZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3F1YWRyYXRpY19wcm9iZV9mbl9pbXAuaHBwCkBAIC0wLDAgKzEsNTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcXVhZHJhdGljX3Byb2JlX2ZuX2ltcC5ocHAKKyAqIENvbnRhaW5zIGEgcHJvYmUgcG9saWN5IGltcGxlbWVudGF0aW9uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK29wZXJhdG9yKCkoc2l6ZV90eXBlIGkpIGNvbnN0Cit7CisgIHJldHVybiAoaSogIGkpOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcmFuZ2VkX2hhc2hfZm4uaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcmFuZ2VkX2hhc2hfZm4uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmI2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9yYW5nZWRfaGFzaF9mbi5ocHAKQEAgLTAsMCArMSwzNTkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmFuZ2VkX2hhc2hfZm4uaHBwCisgKiBDb250YWlucyBhIHVuaWZpZWQgcmFuZ2VkIGhhc2ggZnVuY3RvciwgYWxsb3dpbmcgdGhlIGhhc2ggdGFibGVzCisgKiB0byBkZWFsIHdpdGggYSBzaW5nbGUgY2xhc3MgZm9yIHJhbmdlZCBoYXNoaW5nLgorICovCisKKyNpZm5kZWYgUEJfRFNfUkFOR0VEX0hBU0hfRk5fSFBQCisjZGVmaW5lIFBCX0RTX1JBTkdFRF9IQVNIX0ZOX0hQUAorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEhhc2hfRm4sIHR5cGVuYW1lIF9BbGxvYywgCisJICAgICB0eXBlbmFtZSBDb21iX0hhc2hfRm4sIGJvb2wgU3RvcmVfSGFzaD4KKyAgICBjbGFzcyByYW5nZWRfaGFzaF9mbjsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBIYXNoX0ZuLCB0eXBlbmFtZSBfQWxsb2MsIFwKKwkgICAgIHR5cGVuYW1lIENvbWJfSGFzaF9Gbj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgcmFuZ2VkX2hhc2hfZm48S2V5LAlIYXNoX0ZuLCBfQWxsb2MsIENvbWJfSGFzaF9GbiwgZmFsc2U+CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiAxCisgICAgICogVGhlIGNsaWVudCBzdXBwbGllcyBhIGhhc2ggZnVuY3Rpb24gYW5kIGEgcmFuZ2VkIGhhc2ggZnVuY3Rpb24sCisgICAgICogYW5kIHJlcXVlc3RzIHRoYXQgaGFzaCB2YWx1ZXMgbm90IGJlIHN0b3JlZC4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBIYXNoX0ZuLCB0eXBlbmFtZSBfQWxsb2MsIAorCSAgICAgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuPgorICAgIGNsYXNzIHJhbmdlZF9oYXNoX2ZuPCBLZXksIEhhc2hfRm4sIF9BbGxvYywgQ29tYl9IYXNoX0ZuLCBmYWxzZT4gCisgICAgOiBwdWJsaWMgSGFzaF9GbiwgcHVibGljIENvbWJfSGFzaF9GbgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgSGFzaF9GbiBoYXNoX2ZuX2Jhc2U7CisgICAgICB0eXBlZGVmIENvbWJfSGFzaF9GbiBjb21iX2hhc2hfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8IEtleT46Om90aGVyIGtleV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBrZXlfY29uc3RfcmVmZXJlbmNlOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUpOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUsIGNvbnN0IEhhc2hfRm4mKTsKKworICAgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlLCBjb25zdCBIYXNoX0ZuJiwgY29uc3QgQ29tYl9IYXNoX0ZuJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlKTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKyAgICB9OworCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUpCisgICAgeyBDb21iX0hhc2hfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuKSAKKyAgICA6IEhhc2hfRm4ocl9oYXNoX2ZuKQorICAgIHsgQ29tYl9IYXNoX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgCisJCSAgIGNvbnN0IENvbWJfSGFzaF9GbiYgcl9jb21iX2hhc2hfZm4pIAorICAgIDogSGFzaF9GbihyX2hhc2hfZm4pLCBDb21iX0hhc2hfRm4ocl9jb21iX2hhc2hfZm4pCisgICAgeyBjb21iX2hhc2hfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKyAgICB7CisgICAgICBjb21iX2hhc2hfZm5fYmFzZTo6c3dhcChvdGhlcik7CisgICAgICBzdGQ6OnN3YXAoKEhhc2hfRm4mICkoKnRoaXMpLCAoSGFzaF9GbiYgKW90aGVyKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpCisgICAgeyBjb21iX2hhc2hfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgIHsgcmV0dXJuIChjb21iX2hhc2hfZm5fYmFzZTo6b3BlcmF0b3IoKShoYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpKSk7fQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEhhc2hfRm4sIHR5cGVuYW1lIF9BbGxvYywgXAorCSAgICAgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICByYW5nZWRfaGFzaF9mbjxLZXksSGFzaF9GbiwJX0FsbG9jLCBDb21iX0hhc2hfRm4sIHRydWU+CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiAyCisgICAgICogVGhlIGNsaWVudCBzdXBwbGllcyBhIGhhc2ggZnVuY3Rpb24gYW5kIGEgcmFuZ2VkIGhhc2ggZnVuY3Rpb24sCisgICAgICogYW5kIHJlcXVlc3RzIHRoYXQgaGFzaCB2YWx1ZXMgYmUgc3RvcmVkLgorICAgICAqKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEhhc2hfRm4sIHR5cGVuYW1lIF9BbGxvYywKKwkgICAgIHR5cGVuYW1lIENvbWJfSGFzaF9Gbj4KKyAgICBjbGFzcyByYW5nZWRfaGFzaF9mbjxLZXksIEhhc2hfRm4sIF9BbGxvYywgQ29tYl9IYXNoX0ZuLCB0cnVlPiAKKyAgICA6IHB1YmxpYyBIYXNoX0ZuLCBwdWJsaWMgQ29tYl9IYXNoX0ZuCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8c2l6ZV90eXBlLCBzaXplX3R5cGU+IGNvbXBfaGFzaDsKKyAgICAgIHR5cGVkZWYgSGFzaF9GbiBoYXNoX2ZuX2Jhc2U7CisgICAgICB0eXBlZGVmIENvbWJfSGFzaF9GbiBjb21iX2hhc2hfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXIga2V5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGtleV9jb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSk7CisKKyAgICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSwgY29uc3QgSGFzaF9GbiYpOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUsIGNvbnN0IEhhc2hfRm4mLCBjb25zdCBDb21iX0hhc2hfRm4mKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUpOworCisgICAgICBpbmxpbmUgY29tcF9oYXNoCisgICAgICBvcGVyYXRvcigpKGtleV9jb25zdF9yZWZlcmVuY2UpIGNvbnN0OworCisgICAgICBpbmxpbmUgY29tcF9oYXNoCisgICAgICBvcGVyYXRvcigpKGtleV9jb25zdF9yZWZlcmVuY2UsIHNpemVfdHlwZSkgY29uc3Q7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSBzaXplKQorICAgIHsgQ29tYl9IYXNoX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbikgOgorICAgICAgSGFzaF9GbihyX2hhc2hfZm4pCisgICAgeyBDb21iX0hhc2hfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuLCAKKwkJICAgY29uc3QgQ29tYl9IYXNoX0ZuJiByX2NvbWJfaGFzaF9mbikgCisgICAgOiBIYXNoX0ZuKHJfaGFzaF9mbiksIENvbWJfSGFzaF9GbihyX2NvbWJfaGFzaF9mbikKKyAgICB7IGNvbWJfaGFzaF9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQorICAgIHsKKyAgICAgIGNvbWJfaGFzaF9mbl9iYXNlOjpzd2FwKG90aGVyKTsKKyAgICAgIHN0ZDo6c3dhcCgoSGFzaF9GbiYgKSgqdGhpcyksIChIYXNoX0ZuJiApb3RoZXIpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgc2l6ZSkKKyAgICB7IGNvbWJfaGFzaF9mbl9iYXNlOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbXBfaGFzaAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBvcGVyYXRvcigpKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpIGNvbnN0CisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIGhhc2ggPSBoYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpOworICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbWJfaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKGhhc2gpLCBoYXNoKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29tcF9oYXNoCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIG9wZXJhdG9yKCkKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXksIHNpemVfdHlwZSBoYXNoKSBjb25zdAorI2Vsc2UgCisgICAgICAoa2V5X2NvbnN0X3JlZmVyZW5jZSAvKnJfa2V5Ki8sIHNpemVfdHlwZSBoYXNoKSBjb25zdAorI2VuZGlmCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGhhc2ggPT0gaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KSk7CisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoY29tYl9oYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoaGFzaCksIGhhc2gpOworICAgIH0KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIENvbWJfSGFzaF9Gbj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgcmFuZ2VkX2hhc2hfZm48S2V5LAludWxsX3R5cGUsIF9BbGxvYywgQ29tYl9IYXNoX0ZuLCBmYWxzZT4KKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIDMKKyAgICAgKiBUaGUgY2xpZW50IGRvZXMgbm90IHN1cHBseSBhIGhhc2ggZnVuY3Rpb24gKGJ5IHNwZWNpZnlpbmcKKyAgICAgKiBudWxsX3R5cGUgYXMgdGhlIEhhc2hfRm4gcGFyYW1ldGVyKSwgYW5kIHJlcXVlc3RzIHRoYXQgaGFzaAorICAgICAqIHZhbHVlcyBub3QgYmUgc3RvcmVkLgorICAgICAqKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgQ29tYl9IYXNoX0ZuPgorICAgIGNsYXNzIHJhbmdlZF9oYXNoX2ZuPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIENvbWJfSGFzaF9GbiwgZmFsc2U+IAorICAgIDogcHVibGljIENvbWJfSGFzaF9GbgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgQ29tYl9IYXNoX0ZuIGNvbWJfaGFzaF9mbl9iYXNlOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUpOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUsIGNvbnN0IENvbWJfSGFzaF9GbiYpOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUsIGNvbnN0IG51bGxfdHlwZSYsIGNvbnN0IENvbWJfSGFzaF9GbiYpOworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSBzaXplKQorICAgIHsgQ29tYl9IYXNoX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IENvbWJfSGFzaF9GbiYgcl9jb21iX2hhc2hfZm4pIDoKKyAgICAgIENvbWJfSGFzaF9GbihyX2NvbWJfaGFzaF9mbikKKyAgICB7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSBzaXplLCBjb25zdCBudWxsX3R5cGUmIHJfbnVsbF90eXBlLCAKKwkJICAgY29uc3QgQ29tYl9IYXNoX0ZuJiByX2NvbWJfaGFzaF9mbikgCisgICAgOiBDb21iX0hhc2hfRm4ocl9jb21iX2hhc2hfZm4pCisgICAgeyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgeyBjb21iX2hhc2hfZm5fYmFzZTo6c3dhcChvdGhlcik7IH0KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIENvbWJfSGFzaF9Gbj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgcmFuZ2VkX2hhc2hfZm48S2V5LAludWxsX3R5cGUsIF9BbGxvYywgQ29tYl9IYXNoX0ZuLCB0cnVlPgorCisgICAgLyoqCisgICAgICogU3BlY2lhbGl6YXRpb24gNAorICAgICAqIFRoZSBjbGllbnQgZG9lcyBub3Qgc3VwcGx5IGEgaGFzaCBmdW5jdGlvbiAoYnkgc3BlY2lmeWluZworICAgICAqIG51bGxfdHlwZSBhcyB0aGUgSGFzaF9GbiBwYXJhbWV0ZXIpLCBhbmQgcmVxdWVzdHMgdGhhdCBoYXNoCisgICAgICogdmFsdWVzIGJlIHN0b3JlZC4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIENvbWJfSGFzaF9Gbj4KKyAgICBjbGFzcyByYW5nZWRfaGFzaF9mbjxLZXksIG51bGxfdHlwZSwgX0FsbG9jLCBDb21iX0hhc2hfRm4sIHRydWU+IAorICAgIDogcHVibGljIENvbWJfSGFzaF9GbgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgQ29tYl9IYXNoX0ZuIGNvbWJfaGFzaF9mbl9iYXNlOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUpOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUsIGNvbnN0IENvbWJfSGFzaF9GbiYpOworCisgICAgICByYW5nZWRfaGFzaF9mbihzaXplX3R5cGUsIGNvbnN0IG51bGxfdHlwZSYsIGNvbnN0IENvbWJfSGFzaF9GbiYpOworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9oYXNoX2ZuKHNpemVfdHlwZSBzaXplKQorICAgIHsgQ29tYl9IYXNoX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IENvbWJfSGFzaF9GbiYgcl9jb21iX2hhc2hfZm4pIAorICAgIDogQ29tYl9IYXNoX0ZuKHJfY29tYl9oYXNoX2ZuKQorICAgIHsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX2hhc2hfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IG51bGxfdHlwZSYgcl9udWxsX3R5cGUsIAorCQkgICBjb25zdCBDb21iX0hhc2hfRm4mIHJfY29tYl9oYXNoX2ZuKSAKKyAgICA6IENvbWJfSGFzaF9GbihyX2NvbWJfaGFzaF9mbikKKyAgICB7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKyAgICB7IGNvbWJfaGFzaF9mbl9iYXNlOjpzd2FwKG90aGVyKTsgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9yYW5nZWRfcHJvYmVfZm4uaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcmFuZ2VkX3Byb2JlX2ZuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTZlOGFlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcmFuZ2VkX3Byb2JlX2ZuLmhwcApAQCAtMCwwICsxLDMyNyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByYW5nZWRfcHJvYmVfZm4uaHBwCisgKiBDb250YWlucyBhIHVuaWZpZWQgcmFuZ2VkIHByb2JlIGZ1bmN0b3IsIGFsbG93aW5nIHRoZSBwcm9iZSB0YWJsZXMgdG8gZGVhbCB3aXRoCisgKiAgICBhIHNpbmdsZSBjbGFzcyBmb3IgcmFuZ2VkIHByb2JlaW5nLgorICovCisKKyNpZm5kZWYgUEJfRFNfUkFOR0VEX1BST0JFX0ZOX0hQUAorI2RlZmluZSBQQl9EU19SQU5HRURfUFJPQkVfRk5fSFBQCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBQcmltYXJ5IHRlbXBsYXRlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgX0FsbG9jLAorCSAgICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiwgdHlwZW5hbWUgUHJvYmVfRm4sIGJvb2wgU3RvcmVfSGFzaD4KKyAgICBjbGFzcyByYW5nZWRfcHJvYmVfZm47CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgX0FsbG9jLCBcCisJICAgICB0eXBlbmFtZSBDb21iX1Byb2JlX0ZuLCB0eXBlbmFtZSBQcm9iZV9Gbj4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgcmFuZ2VkX3Byb2JlX2ZuPEtleSwgSGFzaF9GbiwgX0FsbG9jLCBDb21iX1Byb2JlX0ZuLCBQcm9iZV9GbiwgZmFsc2U+CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiAxICAgICAKKyAgICAgKiBUaGUgY2xpZW50IHN1cHBsaWVzIGEgcHJvYmUgZnVuY3Rpb24gYW5kIGEgcmFuZ2VkIHByb2JlCisgICAgICogZnVuY3Rpb24sIGFuZCByZXF1ZXN0cyB0aGF0IGhhc2ggdmFsdWVzIG5vdCBiZSBzdG9yZWQuCisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgX0FsbG9jLAorCSAgICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiwgdHlwZW5hbWUgUHJvYmVfRm4+CisgICAgY2xhc3MgcmFuZ2VkX3Byb2JlX2ZuPEtleSwgSGFzaF9GbiwgX0FsbG9jLCBDb21iX1Byb2JlX0ZuLAorCQkJICBQcm9iZV9GbiwgZmFsc2U+IAorICAgIDogcHVibGljIEhhc2hfRm4sIHB1YmxpYyBDb21iX1Byb2JlX0ZuLCBwdWJsaWMgUHJvYmVfRm4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIENvbWJfUHJvYmVfRm4gY29tYl9wcm9iZV9mbl9iYXNlOworICAgICAgdHlwZWRlZiBIYXNoX0ZuIGhhc2hfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgUHJvYmVfRm4gcHJvYmVfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXIga2V5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGtleV9jb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUpOworCisgICAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlLCBjb25zdCBIYXNoX0ZuJik7CisKKyAgICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUsIGNvbnN0IEhhc2hfRm4mLCBjb25zdCBDb21iX1Byb2JlX0ZuJik7CisKKyAgICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUsIGNvbnN0IEhhc2hfRm4mLCBjb25zdCBDb21iX1Byb2JlX0ZuJiwgCisJCSAgICAgIGNvbnN0IFByb2JlX0ZuJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlKTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlLCBzaXplX3R5cGUsIHNpemVfdHlwZSkgY29uc3Q7CisgICAgfTsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUgc2l6ZSkKKyAgICB7IENvbWJfUHJvYmVfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbikgCisgICAgOiBIYXNoX0ZuKHJfaGFzaF9mbikKKyAgICB7IENvbWJfUHJvYmVfRm46Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgCisJCSAgICBjb25zdCBDb21iX1Byb2JlX0ZuJiByX2NvbWJfcHJvYmVfZm4pIAorICAgIDogSGFzaF9GbihyX2hhc2hfZm4pLCBDb21iX1Byb2JlX0ZuKHJfY29tYl9wcm9iZV9mbikKKyAgICB7IGNvbWJfcHJvYmVfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUgc2l6ZSwgY29uc3QgSGFzaF9GbiYgcl9oYXNoX2ZuLCAKKwkJICAgIGNvbnN0IENvbWJfUHJvYmVfRm4mIHJfY29tYl9wcm9iZV9mbiwgCisJCSAgICBjb25zdCBQcm9iZV9GbiYgcl9wcm9iZV9mbikgCisgICAgOiBIYXNoX0ZuKHJfaGFzaF9mbiksIENvbWJfUHJvYmVfRm4ocl9jb21iX3Byb2JlX2ZuKSwgUHJvYmVfRm4ocl9wcm9iZV9mbikKKyAgICB7IGNvbWJfcHJvYmVfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKKyAgICB7CisgICAgICBjb21iX3Byb2JlX2ZuX2Jhc2U6OnN3YXAob3RoZXIpOworICAgICAgc3RkOjpzd2FwKChIYXNoX0ZuJiApKCp0aGlzKSwgKEhhc2hfRm4mKW90aGVyKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpCisgICAgeyBjb21iX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIG9wZXJhdG9yKCkoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkgY29uc3QKKyAgICB7IHJldHVybiBjb21iX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlLCBzaXplX3R5cGUgaGFzaCwgc2l6ZV90eXBlIGkpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIGNvbWJfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShoYXNoICsgcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShpKSk7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIEhhc2hfRm4sIHR5cGVuYW1lIF9BbGxvYywgXAorCSAgICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiwgdHlwZW5hbWUgUHJvYmVfRm4+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIHJhbmdlZF9wcm9iZV9mbjxLZXksIEhhc2hfRm4sIF9BbGxvYywgQ29tYl9Qcm9iZV9GbiwgUHJvYmVfRm4sIHRydWU+CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiAyLSBUaGUgY2xpZW50IHN1cHBsaWVzIGEgcHJvYmUgZnVuY3Rpb24gYW5kIGEgcmFuZ2VkCisgICAgICogICAgcHJvYmUgZnVuY3Rpb24sIGFuZCByZXF1ZXN0cyB0aGF0IGhhc2ggdmFsdWVzIG5vdCBiZSBzdG9yZWQuCisgICAgICoqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgSGFzaF9GbiwgdHlwZW5hbWUgX0FsbG9jLAorCSAgICAgdHlwZW5hbWUgQ29tYl9Qcm9iZV9GbiwgdHlwZW5hbWUgUHJvYmVfRm4+CisgICAgY2xhc3MgcmFuZ2VkX3Byb2JlX2ZuPEtleSwgSGFzaF9GbiwgX0FsbG9jLCBDb21iX1Byb2JlX0ZuLCAKKwkJCSAgUHJvYmVfRm4sIHRydWU+IAorICAgIDogcHVibGljIEhhc2hfRm4sIHB1YmxpYyBDb21iX1Byb2JlX0ZuLCBwdWJsaWMgUHJvYmVfRm4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxzaXplX3R5cGUsIHNpemVfdHlwZT4gY29tcF9oYXNoOworICAgICAgdHlwZWRlZiBDb21iX1Byb2JlX0ZuIGNvbWJfcHJvYmVfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgSGFzaF9GbiBoYXNoX2ZuX2Jhc2U7CisgICAgICB0eXBlZGVmIFByb2JlX0ZuIHByb2JlX2ZuX2Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPEtleT46Om90aGVyIGtleV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGtleV9hbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSBrZXlfY29uc3RfcmVmZXJlbmNlOworCisgICAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlKTsKKworICAgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSwgY29uc3QgSGFzaF9GbiYpOworCisgICAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlLCBjb25zdCBIYXNoX0ZuJiwgCisJCSAgICAgIGNvbnN0IENvbWJfUHJvYmVfRm4mKTsKKworICAgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSwgY29uc3QgSGFzaF9GbiYsIGNvbnN0IENvbWJfUHJvYmVfRm4mLCAKKwkJICAgICAgY29uc3QgUHJvYmVfRm4mKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUpOworCisgICAgICBpbmxpbmUgY29tcF9oYXNoCisgICAgICBvcGVyYXRvcigpKGtleV9jb25zdF9yZWZlcmVuY2UpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBvcGVyYXRvcigpKGtleV9jb25zdF9yZWZlcmVuY2UsIHNpemVfdHlwZSwgc2l6ZV90eXBlKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlLCBzaXplX3R5cGUpIGNvbnN0OworICAgIH07CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlIHNpemUpCisgICAgeyBDb21iX1Byb2JlX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSBzaXplLCBjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4pIAorICAgIDogSGFzaF9GbihyX2hhc2hfZm4pCisgICAgeyBDb21iX1Byb2JlX0ZuOjpub3RpZnlfcmVzaXplZChzaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSBzaXplLCBjb25zdCBIYXNoX0ZuJiByX2hhc2hfZm4sIAorCQkgICAgY29uc3QgQ29tYl9Qcm9iZV9GbiYgcl9jb21iX3Byb2JlX2ZuKSAKKyAgICA6IEhhc2hfRm4ocl9oYXNoX2ZuKSwgQ29tYl9Qcm9iZV9GbihyX2NvbWJfcHJvYmVfZm4pCisgICAgeyBjb21iX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlIHNpemUsIGNvbnN0IEhhc2hfRm4mIHJfaGFzaF9mbiwgCisJCSAgICBjb25zdCBDb21iX1Byb2JlX0ZuJiByX2NvbWJfcHJvYmVfZm4sIAorCQkgICAgY29uc3QgUHJvYmVfRm4mIHJfcHJvYmVfZm4pIAorICAgIDogSGFzaF9GbihyX2hhc2hfZm4pLCBDb21iX1Byb2JlX0ZuKHJfY29tYl9wcm9iZV9mbiksIFByb2JlX0ZuKHJfcHJvYmVfZm4pCisgICAgeyBjb21iX3Byb2JlX2ZuX2Jhc2U6Om5vdGlmeV9yZXNpemVkKHNpemUpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCisgICAgeworICAgICAgY29tYl9wcm9iZV9mbl9iYXNlOjpzd2FwKG90aGVyKTsKKyAgICAgIHN0ZDo6c3dhcCgoSGFzaF9GbiYgKSgqdGhpcyksIChIYXNoX0ZuJiApb3RoZXIpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBub3RpZnlfcmVzaXplZChzaXplX3R5cGUgc2l6ZSkKKyAgICB7IGNvbWJfcHJvYmVfZm5fYmFzZTo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb21wX2hhc2gKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBoYXNoID0gaGFzaF9mbl9iYXNlOjpvcGVyYXRvcigpKHJfa2V5KTsKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihjb21iX3Byb2JlX2ZuX2Jhc2U6Om9wZXJhdG9yKCkoaGFzaCksIGhhc2gpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlLCBzaXplX3R5cGUgaGFzaCwgc2l6ZV90eXBlIGkpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIGNvbWJfcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShoYXNoICsgcHJvYmVfZm5fYmFzZTo6b3BlcmF0b3IoKShpKSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBvcGVyYXRvcigpCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5LCBzaXplX3R5cGUgaGFzaCkgY29uc3QKKyNlbHNlIAorICAgICAgKGtleV9jb25zdF9yZWZlcmVuY2UgLypyX2tleSovLCBzaXplX3R5cGUgaGFzaCkgY29uc3QKKyNlbmRpZiAKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaGFzaCA9PSBoYXNoX2ZuX2Jhc2U6Om9wZXJhdG9yKCkocl9rZXkpKTsKKyAgICAgIHJldHVybiBoYXNoOworICAgIH0KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIDMgYW5kIDQKKyAgICAgKiBUaGUgY2xpZW50IGRvZXMgbm90IHN1cHBseSBhIGhhc2ggZnVuY3Rpb24gb3IgcHJvYmUgZnVuY3Rpb24sCisgICAgICogYW5kIHJlcXVlc3RzIHRoYXQgaGFzaCB2YWx1ZXMgbm90IGJlIHN0b3JlZC4KKyAgICAgKiovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIENvbWJfUHJvYmVfRm4+CisgICAgY2xhc3MgcmFuZ2VkX3Byb2JlX2ZuPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIENvbWJfUHJvYmVfRm4sIAorCQkJICBudWxsX3R5cGUsIGZhbHNlPiAKKyAgICA6IHB1YmxpYyBDb21iX1Byb2JlX0ZuCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBDb21iX1Byb2JlX0ZuIGNvbWJfcHJvYmVfZm5fYmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXIga2V5X2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUga2V5X2FsbG9jYXRvcjo6Y29uc3RfcmVmZXJlbmNlIGtleV9jb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHJhbmdlZF9wcm9iZV9mbihzaXplX3R5cGUgc2l6ZSkKKyAgICAgIHsgQ29tYl9Qcm9iZV9Gbjo6bm90aWZ5X3Jlc2l6ZWQoc2l6ZSk7IH0KKworICAgICAgcmFuZ2VkX3Byb2JlX2ZuKHNpemVfdHlwZSwgY29uc3QgQ29tYl9Qcm9iZV9GbiYgcl9jb21iX3Byb2JlX2ZuKQorICAgICAgOiBDb21iX1Byb2JlX0ZuKHJfY29tYl9wcm9iZV9mbikKKyAgICAgIHsgfQorCisgICAgICByYW5nZWRfcHJvYmVfZm4oc2l6ZV90eXBlLCBjb25zdCBudWxsX3R5cGUmLCAKKwkJICAgICAgY29uc3QgQ29tYl9Qcm9iZV9GbiYgcl9jb21iX3Byb2JlX2ZuLCAKKwkJICAgICAgY29uc3QgbnVsbF90eXBlJikKKyAgICAgIDogQ29tYl9Qcm9iZV9GbihyX2NvbWJfcHJvYmVfZm4pCisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChyYW5nZWRfcHJvYmVfZm4mIG90aGVyKQorICAgICAgeyBjb21iX3Byb2JlX2ZuX2Jhc2U6OnN3YXAob3RoZXIpOyB9CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcHJvYmVfZm4uaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3Byb2JlX2ZuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDNmNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3Byb2JlX2ZuLmhwcApAQCAtMCwwICsxLDY4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNhbXBsZV9wcm9iZV9mbi5ocHAKKyAqIENvbnRhaW5zIGEgc2FtcGxlIHByb2JlIHBvbGljeS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NBTVBMRV9QUk9CRV9GTl9IUFAKKyNkZWZpbmUgUEJfRFNfU0FNUExFX1BST0JFX0ZOX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICAvLy8gQSBzYW1wbGUgcHJvYmUgcG9saWN5LgorICBjbGFzcyBzYW1wbGVfcHJvYmVfZm4KKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBzaXplX3R5cGU7CisKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBzYW1wbGVfcHJvYmVfZm4oKTsKKworICAgIC8vLyBDb3B5IGNvbnN0cnVjdG9yLgorICAgIHNhbXBsZV9wcm9iZV9mbihjb25zdCBzYW1wbGVfcHJvYmVfZm4mKTsKKworICAgIC8vLyBTd2FwcyBjb250ZW50LgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChzYW1wbGVfcHJvYmVfZm4mKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8vIFJldHVybnMgdGhlIGktdGggb2Zmc2V0IGZyb20gdGhlIGhhc2ggdmFsdWUgb2Ygc29tZSBrZXkgcl9rZXkuCisgICAgaW5saW5lIHNpemVfdHlwZQorICAgIG9wZXJhdG9yKCkoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgc2l6ZV90eXBlIGkpIGNvbnN0OworICB9OworfQorI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU0FNUExFX1BST0JFX0ZOX0hQUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlX2hhc2hpbmcuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlX2hhc2hpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MDQwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcmFuZ2VfaGFzaGluZy5ocHAKQEAgLTAsMCArMSw3NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzYW1wbGVfcmFuZ2VfaGFzaGluZy5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2UgaGFzaGluZyBwb2xpY3kuCisgKi8KKworI2lmbmRlZiBQQl9EU19TQU1QTEVfUkFOR0VfSEFTSElOR19IUFAKKyNkZWZpbmUgUEJfRFNfU0FNUExFX1JBTkdFX0hBU0hJTkdfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIC8vLyBBIHNhbXBsZSByYW5nZS1oYXNoaW5nIGZ1bmN0b3IuCisgIGNsYXNzIHNhbXBsZV9yYW5nZV9oYXNoaW5nCisgIHsKKyAgcHVibGljOgorICAgIC8vLyBTaXplIHR5cGUuCisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBzaXplX3R5cGU7CisKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBzYW1wbGVfcmFuZ2VfaGFzaGluZygpOworCisgICAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgICAgc2FtcGxlX3JhbmdlX2hhc2hpbmcoY29uc3Qgc2FtcGxlX3JhbmdlX2hhc2hpbmcmIG90aGVyKTsKKworICAgIC8vLyBTd2FwcyBjb250ZW50LgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChzYW1wbGVfcmFuZ2VfaGFzaGluZyYgb3RoZXIpOworCisgIHByb3RlY3RlZDoKKyAgICAvLy8gTm90aWZpZXMgdGhlIHBvbGljeSBvYmplY3QgdGhhdCB0aGUgY29udGFpbmVyJ3Mgc2l6ZSBoYXMKKyAgICAvLy8gY2hhbmdlZCB0byBhcmd1bWVudCdzIHNpemUuCisgICAgdm9pZAorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSk7CisKKyAgICAvLy8gVHJhbnNmb3JtcyB0aGUgX19oYXNoIHZhbHVlIGhhc2ggaW50byBhIHJhbmdlZC1oYXNoIHZhbHVlLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBvcGVyYXRvcigpKHNpemVfdHlwZSApIGNvbnN0OworICB9OworfQorI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU0FNUExFX1JBTkdFX0hBU0hJTkdfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcmFuZ2VkX2hhc2hfZm4uaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlZF9oYXNoX2ZuLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDJjYmMwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vc2FtcGxlX3JhbmdlZF9oYXNoX2ZuLmhwcApAQCAtMCwwICsxLDc1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNhbXBsZV9yYW5nZWRfaGFzaF9mbi5ocHAKKyAqIENvbnRhaW5zIGEgcmFuZ2VkIGhhc2ggcG9saWN5LgorICovCisKKyNpZm5kZWYgUEJfRFNfU0FNUExFX1JBTkdFRF9IQVNIX0ZOX0hQUAorI2RlZmluZSBQQl9EU19TQU1QTEVfUkFOR0VEX0hBU0hfRk5fSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIC8vLyBBIHNhbXBsZSByYW5nZWQtaGFzaCBmdW5jdG9yLgorICBjbGFzcyBzYW1wbGVfcmFuZ2VkX2hhc2hfZm4KKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBzaXplX3R5cGU7CisKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBzYW1wbGVfcmFuZ2VkX2hhc2hfZm4oKTsKKworICAgIC8vLyBDb3B5IGNvbnN0cnVjdG9yLgorICAgIHNhbXBsZV9yYW5nZWRfaGFzaF9mbihjb25zdCBzYW1wbGVfcmFuZ2VkX2hhc2hfZm4mKTsKKworICAgIC8vLyBTd2FwcyBjb250ZW50LgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChzYW1wbGVfcmFuZ2VkX2hhc2hfZm4mKTsKKworICBwcm90ZWN0ZWQ6CisKKyAgICAvLy8gTm90aWZpZXMgdGhlIHBvbGljeSBvYmplY3QgdGhhdCB0aGUgY29udGFpbmVyJ3MgX19zaXplIGhhcworICAgIC8vLyBjaGFuZ2VkIHRvIHNpemUuCisgICAgdm9pZAorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSk7CisKKyAgICAvLy8gVHJhbnNmb3JtcyBrZXlfY29uc3RfcmVmZXJlbmNlIGludG8gYSBwb3NpdGlvbiB3aXRoaW4gdGhlIHRhYmxlLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBvcGVyYXRvcigpKGtleV9jb25zdF9yZWZlcmVuY2UpIGNvbnN0OworCisgIH07Cit9CisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19TQU1QTEVfUkFOR0VEX0hBU0hfRk5fSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcmFuZ2VkX3Byb2JlX2ZuLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL3NhbXBsZV9yYW5nZWRfcHJvYmVfZm4uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NTQzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9zYW1wbGVfcmFuZ2VkX3Byb2JlX2ZuLmhwcApAQCAtMCwwICsxLDc3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNhbXBsZV9yYW5nZWRfcHJvYmVfZm4uaHBwCisgKiBDb250YWlucyBhIHJhbmdlZCBwcm9iZSBwb2xpY3kuCisgKi8KKworI2lmbmRlZiBQQl9EU19TQU1QTEVfUkFOR0VEX1BST0JFX0ZOX0hQUAorI2RlZmluZSBQQl9EU19TQU1QTEVfUkFOR0VEX1BST0JFX0ZOX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICAvLy8gQSBzYW1wbGUgcmFuZ2VkLXByb2JlIGZ1bmN0b3IuCisgIGNsYXNzIHNhbXBsZV9yYW5nZWRfcHJvYmVfZm4KKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAJc2l6ZV90eXBlOworCisgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBzYW1wbGVfcmFuZ2VkX3Byb2JlX2ZuKCk7CisKKyAgICAvLyBDb3B5IGNvbnN0cnVjdG9yLgorICAgIHNhbXBsZV9yYW5nZWRfcHJvYmVfZm4oY29uc3Qgc2FtcGxlX3JhbmdlZF9wcm9iZV9mbiYpOworCisgICAgLy8gU3dhcHMgY29udGVudC4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoc2FtcGxlX3JhbmdlZF9wcm9iZV9mbiYpOworCisgIHByb3RlY3RlZDoKKworICAgIC8vIE5vdGlmaWVzIHRoZSBwb2xpY3kgb2JqZWN0IHRoYXQgdGhlIGNvbnRhaW5lcidzIF9fc2l6ZSBoYXMKKyAgICAvLyBjaGFuZ2VkIHRvIHNpemUuCisgICAgdm9pZAorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSk7CisKKyAgICAvLyBUcmFuc2Zvcm1zIHRoZSBjb25zdCBrZXkgcmVmZXJlbmNlIHJfa2V5IGludG8gdGhlIGktdGggcG9zaXRpb24KKyAgICAvLyB3aXRoaW4gdGhlIHRhYmxlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZm9yIGVhY2ggY29sbGlzaW9uIHdpdGhpbgorICAgIC8vIHRoZSBwcm9iZSBzZXF1ZW5jZS4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgb3BlcmF0b3IoKShrZXlfY29uc3RfcmVmZXJlbmNlLCBzdGQ6OnNpemVfdCwgc2l6ZV90eXBlKSBjb25zdDsKKworICB9OworfQorI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU0FNUExFX1JBTkdFRF9QUk9CRV9GTl9IUFAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9jb25zdF9pdGVyYXRvci5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RfaXRlcmF0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDdhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RfaXRlcmF0b3IuaHBwCkBAIC0wLDAgKzEsMTU5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcAorICogQ29udGFpbnMgYW4gaXRlcmF0b3IgY2xhc3MgcmV0dXJuZWQgYnkgdGhlIHRhYmxlJ3MgY29uc3QgZmluZCBhbmQgaW5zZXJ0CisgKiBtZXRob2RzLgorICovCisKKyNpZm5kZWYgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9DT05TVF9JVEVSQVRPUl9IUFAKKyNkZWZpbmUgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9DT05TVF9JVEVSQVRPUl9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vcG9pbnRfY29uc3RfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyAgXAorICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfY29uc3RfaXRlcmF0b3JfPE5vZGUsIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19CQVNJQ19IRUFQX0NJVF9CQVNFIFwKKyAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfcG9pbnRfY29uc3RfaXRlcmF0b3JfPE5vZGUsIF9BbGxvYz4KKworICAgIC8vLyBDb25zdCBwb2ludC10eXBlIGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX2NvbnN0X2l0ZXJhdG9yXworICAgIDogcHVibGljIFBCX0RTX0JBU0lDX0hFQVBfQ0lUX0JBU0UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfQkFTSUNfSEVBUF9DSVRfQkFTRSAJICAgICAgCWJhc2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlX3BvaW50ZXIJCW5vZGVfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vLyBDYXRlZ29yeS4KKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAJCWl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICAvLy8gRGlmZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSAJCWRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjp2YWx1ZV90eXBlIAkJdmFsdWVfdHlwZTsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgcG9pbnRlciB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50ZXIgCQlwb2ludGVyOworCisgICAgICAvLy8gSXRlcmF0b3IncyBjb25zdCBwb2ludGVyIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cmVmZXJlbmNlIAkJcmVmZXJlbmNlOworCisgICAgICAvLy8gSXRlcmF0b3IncyBjb25zdCByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9yZWZlcmVuY2UgCWNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgaW5saW5lCisgICAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX2NvbnN0X2l0ZXJhdG9yXyhub2RlX3BvaW50ZXIgcF9uZCkKKyAgICAgIDogYmFzZV90eXBlKHBfbmQpCisgICAgICB7IH0KKworICAgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICBpbmxpbmUKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfY29uc3RfaXRlcmF0b3JfKCkKKyAgICAgIHsgfQorCisgICAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgICAgIGlubGluZQorICAgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9jb25zdF9pdGVyYXRvcl8oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6IGJhc2VfdHlwZShvdGhlcikKKyAgICAgIHsgfQorCisgICAgICAvLy8gQ29tcGFyZXMgY29udGVudCB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIChiYXNlX3R5cGU6Om1fcF9uZCA9PSBvdGhlci5tX3BfbmQpOyB9CisKKyAgICAgIC8vLyBDb21wYXJlcyBjb250ZW50IChuZWdhdGl2ZWx5KSB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIChiYXNlX3R5cGU6Om1fcF9uZCAhPSBvdGhlci5tX3BfbmQpOyB9CisKKyAgICAgIFBCX0RTX0NMQVNTX0NfREVDJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6bV9wX25kICE9IDApOworCWluYygpOworCXJldHVybiAoKnRoaXMpOworICAgICAgfQorCisgICAgICBQQl9EU19DTEFTU19DX0RFQworICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJUEJfRFNfQ0xBU1NfQ19ERUMgcmV0X2l0KGJhc2VfdHlwZTo6bV9wX25kKTsKKwlvcGVyYXRvcisrKCk7CisJcmV0dXJuIChyZXRfaXQpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIGluYygpCisgICAgICB7CisJaWYgKGJhc2VfdHlwZTo6bV9wX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IDApCisJICB7CisJICAgIGJhc2VfdHlwZTo6bV9wX25kID0gYmFzZV90eXBlOjptX3BfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisJICAgIHdoaWxlIChiYXNlX3R5cGU6Om1fcF9uZC0+bV9wX2xfY2hpbGQgIT0gMCkKKwkgICAgICBiYXNlX3R5cGU6Om1fcF9uZCA9IGJhc2VfdHlwZTo6bV9wX25kLT5tX3BfbF9jaGlsZDsKKwkgICAgcmV0dXJuOworCSAgfQorCisJd2hpbGUgKHRydWUpCisJICB7CisJICAgIG5vZGVfcG9pbnRlciBwX25leHQgPSBiYXNlX3R5cGU6Om1fcF9uZDsKKwkgICAgYmFzZV90eXBlOjptX3BfbmQgPSBiYXNlX3R5cGU6Om1fcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworCSAgICBpZiAoYmFzZV90eXBlOjptX3BfbmQgPT0gMAorCQl8fCBiYXNlX3R5cGU6Om1fcF9uZC0+bV9wX2xfY2hpbGQgPT0gcF9uZXh0KQorCSAgICAgIHJldHVybjsKKwkgIH0KKyAgICAgIH0KKyAgICB9OworCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19CQVNJQ19IRUFQX0NJVF9CQVNFCisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGRhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNTIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfYWxsb2NhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19ub2RlX2FsbG9jYXRvcjsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub190aHJvd19jb3BpZXNfdAorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfbm9fdGhyb3dfY29waWVzX2luZDsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXAoKSA6CisgIG1fcF9yb290KDApLAorICBtX3NpemUoMCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4pIDoKKyAgQ21wX0ZuKHJfY21wX2ZuKSwKKyAgbV9wX3Jvb3QoMCksCisgIG1fc2l6ZSgwKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXAoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSAKKzogQ21wX0ZuKG90aGVyKSwgbV9wX3Jvb3QoMCksIG1fc2l6ZSgwKQoreworICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgbV9wX3Jvb3QgPSByZWN1cnNpdmVfY29weV9ub2RlKG90aGVyLm1fcF9yb290KTsKKyAgbV9zaXplID0gb3RoZXIubV9zaXplOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICB2YWx1ZV9zd2FwKG90aGVyKTsKKyAgc3RkOjpzd2FwKChDbXBfRm4mICkoKnRoaXMpLCAoQ21wX0ZuJiApb3RoZXIpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordmFsdWVfc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIHN0ZDo6c3dhcChtX3Bfcm9vdCwgb3RoZXIubV9wX3Jvb3QpOworICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorfmxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXAoKQoreworICBjbGVhcigpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjdXJzaXZlX2NvcHlfbm9kZShub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCkKK3sKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm4gKDApOworCisgIG5vZGVfcG9pbnRlciBwX3JldCA9IHNfbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7CisKKyAgX190cnkKKyAgICB7CisgICAgICBuZXcgKHBfcmV0KSBub2RlKCpwX25kKTsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIHNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX3JldCwgMSk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgcF9yZXQtPm1fcF9sX2NoaWxkID0gcF9yZXQtPm1fcF9uZXh0X3NpYmxpbmcgPQorICAgIHBfcmV0LT5tX3BfcHJldl9vcl9wYXJlbnQgPSAwOworCisgIF9fdHJ5CisgICAgeworICAgICAgcF9yZXQtPm1fcF9sX2NoaWxkID0gcmVjdXJzaXZlX2NvcHlfbm9kZShwX25kLT5tX3BfbF9jaGlsZCk7CisgICAgICBwX3JldC0+bV9wX25leHRfc2libGluZyA9IHJlY3Vyc2l2ZV9jb3B5X25vZGUocF9uZC0+bV9wX25leHRfc2libGluZyk7CisgICAgfQorICBfX2NhdGNoKC4uLikKKyAgICB7CisgICAgICBjbGVhcl9pbXAocF9yZXQpOworICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgICAgfQorCisgIGlmIChwX3JldC0+bV9wX2xfY2hpbGQgIT0gMCkKKyAgICBwX3JldC0+bV9wX2xfY2hpbGQtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfcmV0OworCisgIGlmIChwX3JldC0+bV9wX25leHRfc2libGluZyAhPSAwKQorICAgIHBfcmV0LT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPQorICAgICAgcF9uZC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID09IHBfbmQgPyBwX3JldCA6IDA7CisKKyAgcmV0dXJuIHBfcmV0OworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjY2IxYQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEzNyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgUEJfRFNfREVCVUdfVkVSSUZZKG1fcF9yb290ID09IDAgfHwgbV9wX3Jvb3QtPm1fcF9wcmV2X29yX3BhcmVudCA9PSAwKTsKKworICBpZiAobV9wX3Jvb3QgIT0gMCkKKyAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KG1fcF9yb290LCBTaW5nbGVfTGlua19Sb290cywgX19maWxlLCBfX2xpbmUpOworICBhc3NlcnRfc2l6ZShfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9pdGVyYXRvcnMoX19maWxlLCBfX2xpbmUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X25vZGVfY29uc2lzdGVudChub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCwgYm9vbCBzaW5nbGVfbGluaywKKwkJICAgICAgIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm47CisKKyAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kLT5tX3BfbF9jaGlsZCwgZmFsc2UsIF9fZmlsZSwgX19saW5lKTsKKyAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kLT5tX3BfbmV4dF9zaWJsaW5nLCBzaW5nbGVfbGluaywgX19maWxlLCBfX2xpbmUpOworCisgIGlmIChzaW5nbGVfbGluaykKKyAgICBQQl9EU19ERUJVR19WRVJJRlkocF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50ID09IDApOworICBlbHNlIGlmIChwX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IDApCisgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9PSBwX25kKTsKKworICBpZiAocF9uZC0+bV9wX2xfY2hpbGQgPT0gMCkKKyAgICByZXR1cm47CisKKyAgbm9kZV9jb25zdF9wb2ludGVyIHBfY2hpbGQgPSBwX25kLT5tX3BfbF9jaGlsZDsKKyAgd2hpbGUgKHBfY2hpbGQgIT0gMCkKKyAgICB7CisgICAgICBub2RlX2NvbnN0X3BvaW50ZXIgcF9uZXh0X2NoaWxkID0gcF9jaGlsZC0+bV9wX25leHRfc2libGluZzsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWSghQ21wX0ZuOjpvcGVyYXRvcigpKHBfbmQtPm1fdmFsdWUsIHBfY2hpbGQtPm1fdmFsdWUpKTsKKyAgICAgIHBfY2hpbGQgPSBwX25leHRfY2hpbGQ7CisgICAgfQorICBQQl9EU19ERUJVR19WRVJJRlkocF9uZC0+bV9wX2xfY2hpbGQtPm1fcF9wcmV2X29yX3BhcmVudCA9PSBwX25kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9pdGVyYXRvcnMoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBQQl9EU19ERUJVR19WRVJJRlkoc3RkOjpkaXN0YW5jZShiZWdpbigpLCBlbmQoKSkgPT0gc2l6ZSgpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9zaXplKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgUEJfRFNfREVCVUdfVkVSSUZZKHNpemVfZnJvbV9ub2RlKG1fcF9yb290KSA9PSBtX3NpemUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZV91bmRlcl9ub2RlKG5vZGVfY29uc3RfcG9pbnRlciBwX25kKQoreyByZXR1cm4gMSArIHNpemVfZnJvbV9ub2RlKHBfbmQtPm1fcF9sX2NoaWxkKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc2l6ZV9mcm9tX25vZGUobm9kZV9jb25zdF9wb2ludGVyIHBfbmQpCit7CisgIHNpemVfdHlwZSByZXQgPSAwOworICB3aGlsZSAocF9uZCAhPSAwKQorICAgIHsKKyAgICAgIHJldCArPSAxICsgc2l6ZV9mcm9tX25vZGUocF9uZC0+bV9wX2xfY2hpbGQpOworICAgICAgcF9uZCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgfQorICByZXR1cm4gcmV0OworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZGVncmVlKG5vZGVfY29uc3RfcG9pbnRlciBwX25kKQoreworICBzaXplX3R5cGUgcmV0ID0gMDsKKyAgbm9kZV9jb25zdF9wb2ludGVyIHBfY2hpbGQgPSBwX25kLT5tX3BfbF9jaGlsZDsKKyAgd2hpbGUgKHBfY2hpbGQgIT0gMCkKKyAgICB7CisgICAgICArK3JldDsKKyAgICAgIHBfY2hpbGQgPSBwX2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KKyAgcmV0dXJuIHJldDsKK30KKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjIyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBjbGVhcl9pbXAobV9wX3Jvb3QpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9zaXplID09IDApOworICBtX3Bfcm9vdCA9IDA7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYWN0dWFsX2VyYXNlX25vZGUobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3NpemUgPiAwKTsKKyAgLS1tX3NpemU7CisgIHBfbmQtPn5ub2RlKCk7CisgIHNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX25kLCAxKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyX2ltcChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgd2hpbGUgKHBfbmQgIT0gMCkKKyAgICB7CisgICAgICBjbGVhcl9pbXAocF9uZC0+bV9wX2xfY2hpbGQpOworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBhY3R1YWxfZXJhc2Vfbm9kZShwX25kKTsKKyAgICAgIHBfbmQgPSBwX25leHQ7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordG9fbGlua2VkX2xpc3QoKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgbm9kZV9wb2ludGVyIHBfY3VyID0gbV9wX3Jvb3Q7CisgIHdoaWxlIChwX2N1ciAhPSAwKQorICAgIGlmIChwX2N1ci0+bV9wX2xfY2hpbGQgIT0gMCkKKyAgICAgIHsKKwlub2RlX3BvaW50ZXIgcF9jaGlsZF9uZXh0ID0gcF9jdXItPm1fcF9sX2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nOworCXBfY3VyLT5tX3BfbF9jaGlsZC0+bV9wX25leHRfc2libGluZyA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworCXBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9jdXItPm1fcF9sX2NoaWxkOworCXBfY3VyLT5tX3BfbF9jaGlsZCA9IHBfY2hpbGRfbmV4dDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwX2N1ciA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgbm9kZV9jb25zdF9wb2ludGVyIHBfY291bnRlciA9IG1fcF9yb290OworICBzaXplX3R5cGUgY291bnQgPSAwOworICB3aGlsZSAocF9jb3VudGVyICE9IDApCisgICAgeworICAgICAgKytjb3VudDsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2NvdW50ZXItPm1fcF9sX2NoaWxkID09IDApOworICAgICAgcF9jb3VudGVyID0gcF9jb3VudGVyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGNvdW50ID09IG1fc2l6ZSk7CisjZW5kaWYgCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHJ1bmUoUHJlZCBwcmVkKQoreworICBub2RlX3BvaW50ZXIgcF9jdXIgPSBtX3Bfcm9vdDsKKyAgbV9wX3Jvb3QgPSAwOworICBub2RlX3BvaW50ZXIgcF9vdXQgPSAwOworICB3aGlsZSAocF9jdXIgIT0gMCkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9jdXItPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBpZiAocHJlZChwX2N1ci0+bV92YWx1ZSkpCisgICAgICAgIHsKKwkgIHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9vdXQ7CisJICBpZiAocF9vdXQgIT0gMCkKKwkgICAgcF9vdXQtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfY3VyOworCSAgcF9vdXQgPSBwX2N1cjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisJICBwX2N1ci0+bV9wX25leHRfc2libGluZyA9IG1fcF9yb290OworCSAgaWYgKG1fcF9yb290ICE9IDApCisJICAgIG1fcF9yb290LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX2N1cjsKKwkgIG1fcF9yb290ID0gcF9jdXI7CisgICAgICAgIH0KKyAgICAgIHBfY3VyID0gcF9uZXh0OworICAgIH0KKyAgcmV0dXJuIHBfb3V0OworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYnViYmxlX3RvX3RvcChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gcGFyZW50KHBfbmQpOworICB3aGlsZSAocF9wYXJlbnQgIT0gMCkKKyAgICB7CisgICAgICBzd2FwX3dpdGhfcGFyZW50KHBfbmQsIHBfcGFyZW50KTsKKyAgICAgIHBfcGFyZW50ID0gcGFyZW50KHBfbmQpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2luZm9fZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vaW5mb19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjhiMTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2luZm9fZm5faW1wcy5ocHAKQEAgLTAsMCArMSw2NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9pbmZvX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlbXB0eSgpIGNvbnN0Cit7CisgIHJldHVybiAobV9zaXplID09IDApOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NpemUoKSBjb25zdAoreworICByZXR1cm4gKG1fc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbWF4X3NpemUoKSBjb25zdAoreworICByZXR1cm4gKHNfbm9kZV9hbGxvY2F0b3IubWF4X3NpemUoKSk7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmY2U1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTc1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X25ld19ub2RlX2Zvcl9pbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsKQoreworICByZXR1cm4gZ2V0X25ld19ub2RlX2Zvcl9pbnNlcnQocl92YWwsIHNfbm9fdGhyb3dfY29waWVzX2luZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X25ld19ub2RlX2Zvcl9pbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCBmYWxzZV90eXBlKQoreworICBub2RlX3BvaW50ZXIgcF9uZXdfbmQgPSBzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworCisgIGNvbmRfZGVhbHRvcl90IGNvbmQocF9uZXdfbmQpOworCisgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KAorCQkJICBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KCZwX25ld19uZC0+bV92YWx1ZSkpKQorICAgIHR5cGVuYW1lIG5vZGU6OnZhbHVlX3R5cGUocl92YWwpOworCisgIGNvbmQuc2V0X25vX2FjdGlvbigpOworCisgICsrbV9zaXplOworCisgIHJldHVybiAocF9uZXdfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgdHJ1ZV90eXBlKQoreworICBub2RlX3BvaW50ZXIgcF9uZXdfbmQgPSBzX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworCisgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KAorCQkJICBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KCZwX25ld19uZC0+bV92YWx1ZSkpKQorICAgIHR5cGVuYW1lIG5vZGU6OnZhbHVlX3R5cGUocl92YWwpOworCisgICsrbV9zaXplOworCisgIHJldHVybiAocF9uZXdfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21ha2VfY2hpbGRfb2Yobm9kZV9wb2ludGVyIHBfbmQsIG5vZGVfcG9pbnRlciBwX25ld19wYXJlbnQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kICE9IDApOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZXdfcGFyZW50ICE9IDApOworCisgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25ld19wYXJlbnQtPm1fcF9sX2NoaWxkOworCisgIGlmIChwX25ld19wYXJlbnQtPm1fcF9sX2NoaWxkICE9IDApCisgICAgcF9uZXdfcGFyZW50LT5tX3BfbF9jaGlsZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZDsKKworICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25ld19wYXJlbnQ7CisKKyAgcF9uZXdfcGFyZW50LT5tX3BfbF9jaGlsZCA9IHBfbmQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcGFyZW50KG5vZGVfcG9pbnRlciBwX25kKQoreworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9wb3QgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisKKyAgICAgIGlmIChwX3BvdCA9PSAwIHx8IHBfcG90LT5tX3BfbF9jaGlsZCA9PSBwX25kKQorCXJldHVybiBwX3BvdDsKKworICAgICAgcF9uZCA9IHBfcG90OworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwX3dpdGhfcGFyZW50KG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9wYXJlbnQpCit7CisgIGlmIChwX3BhcmVudCA9PSBtX3Bfcm9vdCkKKyAgICBtX3Bfcm9vdCA9IHBfbmQ7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudCAhPSAwKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBhcmVudChwX25kKSA9PSBwX3BhcmVudCk7CisKKyAgY29uc3QgYm9vbCBuZF9kaXJlY3RfY2hpbGQgPSBwX3BhcmVudC0+bV9wX2xfY2hpbGQgPT0gcF9uZDsKKyAgY29uc3QgYm9vbCBwYXJlbnRfcm9vdCA9IHBfcGFyZW50LT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gMDsKKyAgY29uc3QgYm9vbCBwYXJlbnRfZGlyZWN0X2NoaWxkID0KKyAgICAhcGFyZW50X3Jvb3QmJiAgcF9wYXJlbnQtPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX2xfY2hpbGQgPT0gcF9wYXJlbnQ7CisKKyAgc3RkOjpzd2FwKHBfcGFyZW50LT5tX3BfcHJldl9vcl9wYXJlbnQsIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCk7CisgIHN0ZDo6c3dhcChwX3BhcmVudC0+bV9wX25leHRfc2libGluZywgcF9uZC0+bV9wX25leHRfc2libGluZyk7CisgIHN0ZDo6c3dhcChwX3BhcmVudC0+bV9wX2xfY2hpbGQsIHBfbmQtPm1fcF9sX2NoaWxkKTsKKyAgc3RkOjpzd2FwKHBfcGFyZW50LT5tX21ldGFkYXRhLCBwX25kLT5tX21ldGFkYXRhKTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9wX2xfY2hpbGQgIT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudC0+bV9wX3ByZXZfb3JfcGFyZW50ICE9IDApOworCisgIGlmIChwX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IDApCisgICAgcF9uZC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZDsKKworICBpZiAocF9wYXJlbnQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gMCkKKyAgICBwX3BhcmVudC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9wYXJlbnQ7CisKKyAgaWYgKHBfcGFyZW50LT5tX3BfbF9jaGlsZCAhPSAwKQorICAgIHBfcGFyZW50LT5tX3BfbF9jaGlsZC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9wYXJlbnQ7CisKKyAgaWYgKHBhcmVudF9kaXJlY3RfY2hpbGQpCisgICAgcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbF9jaGlsZCA9IHBfbmQ7CisgIGVsc2UgaWYgKCFwYXJlbnRfcm9vdCkKKyAgICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25kOworCisgIGlmICghbmRfZGlyZWN0X2NoaWxkKQorICAgIHsKKyAgICAgIHBfbmQtPm1fcF9sX2NoaWxkLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kOworCisgICAgICBwX3BhcmVudC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9wYXJlbnQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9sX2NoaWxkID09IHBfbmQpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcGFyZW50LT5tX3BfcHJldl9vcl9wYXJlbnQgPT0gcF9wYXJlbnQpOworCisgICAgICBwX25kLT5tX3BfbF9jaGlsZCA9IHBfcGFyZW50OworICAgICAgcF9wYXJlbnQtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwYXJlbnQocF9wYXJlbnQpID09IHBfbmQpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDY0ZTAxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDg4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpCit7CisgIG5vZGVfcG9pbnRlciBwX25kID0gbV9wX3Jvb3Q7CisKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm4gKGl0ZXJhdG9yKDApKTsKKworICB3aGlsZSAocF9uZC0+bV9wX2xfY2hpbGQgIT0gMCkKKyAgICBwX25kID0gcF9uZC0+bV9wX2xfY2hpbGQ7CisKKyAgcmV0dXJuIChpdGVyYXRvcihwX25kKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpIGNvbnN0Cit7CisgIG5vZGVfcG9pbnRlciBwX25kID0gbV9wX3Jvb3Q7CisKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm4gKGNvbnN0X2l0ZXJhdG9yKDApKTsKKworICB3aGlsZSAocF9uZC0+bV9wX2xfY2hpbGQgIT0gMCkKKyAgICBwX25kID0gcF9uZC0+bV9wX2xfY2hpbGQ7CisKKyAgcmV0dXJuIChjb25zdF9pdGVyYXRvcihwX25kKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKQoreworICByZXR1cm4gKGl0ZXJhdG9yKDApKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VuZCgpIGNvbnN0Cit7CisgIHJldHVybiAoY29uc3RfaXRlcmF0b3IoMCkpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8uaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzU0MWU4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfLmhwcApAQCAtMCwwICsxLDI4NiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIGJhc2ljIGhlYXAuCisgKi8KKworI2lmbmRlZiBQQl9EU19MRUZUX0NISUxEX05FWFRfU0lCTElOR19IRUFQX0hQUAorI2RlZmluZSBQQl9EU19MRUZUX0NISUxEX05FWFRfU0lCTElOR19IRUFQX0hQUAorCisvKgorICogQmFzZWQgb24gQ0xSUy4KKyAqLworCisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9ub2RlLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL3BvaW50X2NvbnN0X2l0ZXJhdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2NvbnN0X2l0ZXJhdG9yLmhwcD4KKyNpZmRlZiBQQl9EU19MQ19OU19IRUFQX1RSQUNFXworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2VuZGlmCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgTm9kZV9NZXRhZGF0YSwgXAorCSAgICAgdHlwZW5hbWUgX0FsbG9jLCBib29sIFNpbmdsZV9MaW5rX1Jvb3RzPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwPFZhbHVlX1R5cGUsIENtcF9GbiwgTm9kZV9NZXRhZGF0YSwJXAorCQkJCSAgX0FsbG9jLCBTaW5nbGVfTGlua19Sb290cz4KKyNlbHNlCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIE5vZGVfTWV0YWRhdGEsIFwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcDxWYWx1ZV9UeXBlLCBDbXBfRm4sIE5vZGVfTWV0YWRhdGEsIF9BbGxvYz4KKyNlbmRpZgorCisgICAgLy8vIEJhc2UgY2xhc3MgZm9yIGEgYmFzaWMgaGVhcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLAorCSAgICAgdHlwZW5hbWUgQ21wX0ZuLAorCSAgICAgdHlwZW5hbWUgTm9kZV9NZXRhZGF0YSwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisJICAgICAsYm9vbCBTaW5nbGVfTGlua19Sb290cz4KKyNlbHNlCisJICAgICA+CisjZW5kaWYKKyAgICBjbGFzcyBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwIDogcHVibGljIENtcF9GbgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV88VmFsdWVfVHlwZSwgTm9kZV9NZXRhZGF0YSwKKwkJCQkJIF9BbGxvYz4gPjo6b3RoZXIKKyAgICAgIG5vZGVfYWxsb2NhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfYWxsb2NhdG9yOjp2YWx1ZV90eXBlICAgICAJbm9kZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9hbGxvY2F0b3I6OnBvaW50ZXIgCQlub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyCW5vZGVfY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgTm9kZV9NZXRhZGF0YSBub2RlX21ldGFkYXRhOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8IG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyPiAJbm9kZV9wb2ludGVyX3BhaXI7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBjb25kX2RlYWx0b3I8IG5vZGUsIF9BbGxvYz4gCQljb25kX2RlYWx0b3JfdDsKKworICAgICAgZW51bQorCXsKKwkgIHNpbXBsZV92YWx1ZSA9IGlzX3NpbXBsZTxWYWx1ZV9UeXBlPjo6dmFsdWUKKwl9OworCisgICAgICB0eXBlZGVmIGludGVncmFsX2NvbnN0YW50PGludCwgc2ltcGxlX3ZhbHVlPiAJbm9fdGhyb3dfY29waWVzX3Q7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPFZhbHVlX1R5cGU+CV9fcmViaW5kX3Y7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSAJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIAkJCQl2YWx1ZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3Y6Om90aGVyOjpwb2ludGVyIAlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92OjpvdGhlcjo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92OjpvdGhlcjo6cmVmZXJlbmNlCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlX3BvaW50X2NvbnN0X2l0ZXJhdG9yXzxub2RlLCBfQWxsb2M+CisgICAgICBwb2ludF9jb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBwb2ludF9jb25zdF9pdGVyYXRvciAJCQlwb2ludF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX2NvbnN0X2l0ZXJhdG9yXzxub2RlLCBfQWxsb2M+CisgICAgICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBjb25zdF9pdGVyYXRvciAJCQkJaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIENtcF9GbiAJCQkJCWNtcF9mbjsKKyAgICAgIHR5cGVkZWYgX0FsbG9jIAkJCQkJYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXAoKTsKKyAgICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXAoY29uc3QgQ21wX0ZuJik7CisgICAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwKGNvbnN0IGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXAmKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB+bGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcCgpOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0OworCisgICAgICBDbXBfRm4mCisgICAgICBnZXRfY21wX2ZuKCk7CisKKyAgICAgIGNvbnN0IENtcF9GbiYKKyAgICAgIGdldF9jbXBfZm4oKSBjb25zdDsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCk7CisKKyNpZmRlZiBQQl9EU19MQ19OU19IRUFQX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdDsKKyNlbmRpZgorCisgICAgcHJvdGVjdGVkOgorICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgZ2V0X25ld19ub2RlX2Zvcl9pbnNlcnQoY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBtYWtlX2NoaWxkX29mKG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgdmFsdWVfc3dhcChsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwJik7CisKKyAgICAgIGlubGluZSBzdGF0aWMgbm9kZV9wb2ludGVyCisgICAgICBwYXJlbnQobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHN3YXBfd2l0aF9wYXJlbnQobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBidWJibGVfdG9fdG9wKG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBhY3R1YWxfZXJhc2Vfbm9kZShub2RlX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBjbGVhcl9pbXAobm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgdG9fbGlua2VkX2xpc3QoKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcHJ1bmUoUHJlZCk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KG5vZGVfY29uc3RfcG9pbnRlciwgYm9vbCwgY29uc3QgY2hhciosIGludCkgY29uc3Q7CisKKyAgICAgIHN0YXRpYyBzaXplX3R5cGUKKyAgICAgIHNpemVfdW5kZXJfbm9kZShub2RlX2NvbnN0X3BvaW50ZXIpOworCisgICAgICBzdGF0aWMgc2l6ZV90eXBlCisgICAgICBkZWdyZWUobm9kZV9jb25zdF9wb2ludGVyKTsKKyNlbmRpZgorCisjaWZkZWYgUEJfRFNfTENfTlNfSEVBUF9UUkFDRV8KKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICB0cmFjZV9ub2RlKG5vZGVfY29uc3RfcG9pbnRlciwgc2l6ZV90eXBlKTsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X2l0ZXJhdG9ycyhjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3NpemUoY29uc3QgY2hhciosIGludCkgY29uc3Q7CisKKyAgICAgIHN0YXRpYyBzaXplX3R5cGUKKyAgICAgIHNpemVfZnJvbV9ub2RlKG5vZGVfY29uc3RfcG9pbnRlcik7CisjZW5kaWYKKworICAgICAgbm9kZV9wb2ludGVyCisgICAgICByZWN1cnNpdmVfY29weV9ub2RlKG5vZGVfY29uc3RfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSwgZmFsc2VfdHlwZSk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSwgdHJ1ZV90eXBlKTsKKworI2lmZGVmIFBCX0RTX0xDX05TX0hFQVBfVFJBQ0VfCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YV8+CisgICAgICBzdGF0aWMgdm9pZAorICAgICAgdHJhY2Vfbm9kZV9tZXRhZGF0YShub2RlX2NvbnN0X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YV8+KTsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIHRyYWNlX25vZGVfbWV0YWRhdGEobm9kZV9jb25zdF9wb2ludGVyLCB0eXBlX3RvX3R5cGU8bnVsbF90eXBlPik7CisjZW5kaWYKKworICAgICAgc3RhdGljIG5vZGVfYWxsb2NhdG9yIAlzX25vZGVfYWxsb2NhdG9yOworICAgICAgc3RhdGljIG5vX3Rocm93X2NvcGllc190IAlzX25vX3Rocm93X2NvcGllc19pbmQ7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBub2RlX3BvaW50ZXIgCQltX3Bfcm9vdDsKKyAgICAgIHNpemVfdHlwZSAJCW1fc2l6ZTsKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vdHJhY2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL2luZm9fZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9ub2RlLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9ub2RlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDg5MTAxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL25vZGUuaHBwCkBAIC0wLDAgKzEsOTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vbm9kZS5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIHN0cnVjdCBmb3IgdGhpcyB0eXBlIG9mIGhlYXAncyBub2RlLgorICovCisKKyNpZm5kZWYgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9OT0RFX0hQUAorI2RlZmluZSBQQl9EU19MRUZUX0NISUxEX05FWFRfU0lCTElOR19IRUFQX05PREVfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBOb2RlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX01ldGFkYXRhLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV8KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlXzxfVmFsdWUsIF9NZXRhZGF0YSwgX0FsbG9jPiB0aGlzX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9WYWx1ZSAJCQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX01ldGFkYXRhIAkJCW1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dGhpc190eXBlPjo6b3RoZXI6OnBvaW50ZXIgbm9kZV9wb2ludGVyOworCisgICAgICB2YWx1ZV90eXBlIAltX3ZhbHVlOworICAgICAgbWV0YWRhdGFfdHlwZSAJbV9tZXRhZGF0YTsKKyAgICAgIG5vZGVfcG9pbnRlciAJbV9wX2xfY2hpbGQ7CisgICAgICBub2RlX3BvaW50ZXIgCW1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBub2RlX3BvaW50ZXIgCW1fcF9wcmV2X29yX3BhcmVudDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV88X1ZhbHVlLCBudWxsX3R5cGUsIF9BbGxvYz4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlXzxfVmFsdWUsIG51bGxfdHlwZSwgX0FsbG9jPiB0aGlzX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9WYWx1ZSAJCQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCXNpemVfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDx0aGlzX3R5cGU+OjpvdGhlcjo6cG9pbnRlciBub2RlX3BvaW50ZXI7CisKKyAgICAgIHZhbHVlX3R5cGUgCW1fdmFsdWU7CisgICAgICBub2RlX3BvaW50ZXIgCW1fcF9sX2NoaWxkOworICAgICAgbm9kZV9wb2ludGVyIAltX3BfbmV4dF9zaWJsaW5nOworICAgICAgbm9kZV9wb2ludGVyIAltX3BfcHJldl9vcl9wYXJlbnQ7CisgICAgfTsKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfTEVGVF9DSElMRF9ORVhUX1NJQkxJTkdfSEVBUF9OT0RFX0hQUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL3BvaW50X2NvbnN0X2l0ZXJhdG9yLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9wb2ludF9jb25zdF9pdGVyYXRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjMTVjZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9wb2ludF9jb25zdF9pdGVyYXRvci5ocHAKQEAgLTAsMCArMSwxNDkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vcG9pbnRfY29uc3RfaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhbiBpdGVyYXRvciBjbGFzcyByZXR1cm5lZCBieSB0aGUgdGFibGUncyBjb25zdCBmaW5kIGFuZCBpbnNlcnQKKyAqIG1ldGhvZHMuCisgKi8KKworI2lmbmRlZiBQQl9EU19MRUZUX0NISUxEX05FWFRfU0lCTElOR19IRUFQX0NPTlNUX0ZJTkRfSVRFUkFUT1JfSFBQCisjZGVmaW5lIFBCX0RTX0xFRlRfQ0hJTERfTkVYVF9TSUJMSU5HX0hFQVBfQ09OU1RfRklORF9JVEVSQVRPUl9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQwkJCVwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlLCB0eXBlbmFtZSBfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV9wb2ludF9jb25zdF9pdGVyYXRvcl88Tm9kZSwgX0FsbG9jPgorCisgICAgLy8vIENvbnN0IHBvaW50LXR5cGUgaXRlcmF0b3IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfbm9kZV9wb2ludF9jb25zdF9pdGVyYXRvcl8KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxOb2RlPjo6b3RoZXI6OnBvaW50ZXIgbm9kZV9wb2ludGVyOworCisgICAgcHVibGljOgorICAgICAgLy8vIENhdGVnb3J5LgorICAgICAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgLy8vIERpZmZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl9kaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICAvLy8gSXRlcmF0b3IncyB2YWx1ZSB0eXBlLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBOb2RlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIHBvaW50ZXIgdHlwZS4KKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgcG9pbnRlcjsKKworICAgICAgLy8vIEl0ZXJhdG9yJ3MgY29uc3QgcG9pbnRlciB0eXBlLgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICAvLy8gSXRlcmF0b3IncyByZWZlcmVuY2UgdHlwZS4KKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPAorCXZhbHVlX3R5cGU+OjpvdGhlcjo6cmVmZXJlbmNlCisgICAgICByZWZlcmVuY2U7CisKKyAgICAgIC8vLyBJdGVyYXRvcidzIGNvbnN0IHJlZmVyZW5jZSB0eXBlLgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8CisJdmFsdWVfdHlwZT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgaW5saW5lCisgICAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfcG9pbnRfY29uc3RfaXRlcmF0b3JfKG5vZGVfcG9pbnRlciBwX25kKSA6IG1fcF9uZChwX25kKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgaW5saW5lCisgICAgICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwX25vZGVfcG9pbnRfY29uc3RfaXRlcmF0b3JfKCkgOiBtX3BfbmQoMCkKKyAgICAgIHsgfQorCisgICAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgICAgIGlubGluZQorICAgICAgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF9ub2RlX3BvaW50X2NvbnN0X2l0ZXJhdG9yXyhjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIDogbV9wX25kKG90aGVyLm1fcF9uZCkKKyAgICAgIHsgfQorCisgICAgICAvLy8gQWNjZXNzLgorICAgICAgY29uc3RfcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9uZCAhPSAwKTsKKwlyZXR1cm4gJm1fcF9uZC0+bV92YWx1ZTsKKyAgICAgIH0KKworICAgICAgLy8vIEFjY2Vzcy4KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX25kICE9IDApOworCXJldHVybiBtX3BfbmQtPm1fdmFsdWU7CisgICAgICB9CisKKyAgICAgIC8vLyBDb21wYXJlcyBjb250ZW50IHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kID09IG90aGVyLm1fcF9uZDsgfQorCisgICAgICAvLy8gQ29tcGFyZXMgY29udGVudCAobmVnYXRpdmVseSkgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3BfbmQgIT0gb3RoZXIubV9wX25kOyB9CisKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbmQ7CisgICAgfTsKKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzkwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDUyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworQ21wX0ZuJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9jbXBfZm4oKQoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IENtcF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfY21wX2ZuKCkgY29uc3QKK3sgcmV0dXJuICp0aGlzOyB9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy90cmFjZV9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2IzNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsOTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vdHJhY2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy4KKyAqLworCisjaWZkZWYgUEJfRFNfTENfTlNfSEVBUF9UUkFDRV8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlKCkgY29uc3QKK3sKKyAgc3RkOjpjZXJyIDw8IHN0ZDo6ZW5kbDsKKyAgdHJhY2Vfbm9kZShtX3Bfcm9vdCwgMCk7CisgIHN0ZDo6Y2VyciA8PCBzdGQ6OmVuZGw7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit0cmFjZV9ub2RlKG5vZGVfY29uc3RfcG9pbnRlciBwX25kLCBzaXplX3R5cGUgbGV2ZWwpCit7CisgIHdoaWxlIChwX25kICE9IDApCisgICAgeworICAgICAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBsZXZlbDsgKytpKQorCXN0ZDo6Y2VyciA8PCAnICc7CisKKyAgICAgIHN0ZDo6Y2VyciA8PCBwX25kIDw8CisJIiBwcmV2ID0gIiA8PCBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPDwKKwkiIG5leHQgIiA8PCBwX25kLT5tX3BfbmV4dF9zaWJsaW5nIDw8CisJIiBsZWZ0ID0gIiA8PCBwX25kLT5tX3BfbF9jaGlsZCA8PCAiICI7CisKKyAgICAgIHRyYWNlX25vZGVfbWV0YWRhdGEocF9uZCwgdHlwZV90b190eXBlPG5vZGVfbWV0YWRhdGE+KCkpOworICAgICAgc3RkOjpjZXJyIDw8IHBfbmQtPm1fdmFsdWUgPDwgc3RkOjplbmRsOworICAgICAgdHJhY2Vfbm9kZShwX25kLT5tX3BfbF9jaGlsZCwgbGV2ZWwgKyAxKTsKKyAgICAgIHBfbmQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhXz4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX25vZGVfbWV0YWRhdGEobm9kZV9jb25zdF9wb2ludGVyIHBfbmQsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YV8+KQoreworICBzdGQ6OmNlcnIgPDwgIigiIDw8IHBfbmQtPm1fbWV0YWRhdGEgPDwgIikgIjsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RyYWNlX25vZGVfbWV0YWRhdGEobm9kZV9jb25zdF9wb2ludGVyLCB0eXBlX3RvX3R5cGU8bnVsbF90eXBlPikKK3sgfQorCisjZW5kaWYgLy8gI2lmZGVmIFBCX0RTX0xDX05TX0hFQVBfVFJBQ0VfCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9jb25zdHJ1Y3Rvcl9kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2M2MjgzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vY29uc3RydWN0b3JfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEzNiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsaXN0X3VwZGF0ZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmVudHJ5X2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfZW50cnlfYWxsb2NhdG9yOworCitQQl9EU19DTEFTU19UX0RFQworRXFfRm4gUEJfRFNfQ0xBU1NfQ19ERUM6OnNfZXFfZm47CisKK1BCX0RTX0NMQVNTX1RfREVDCitudWxsX3R5cGUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNfbnVsbF90eXBlOworCitQQl9EU19DTEFTU19UX0RFQworVXBkYXRlX1BvbGljeSBQQl9EU19DTEFTU19DX0RFQzo6c191cGRhdGVfcG9saWN5OworCitQQl9EU19DTEFTU19UX0RFQwordHlwZV90b190eXBlPAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6dXBkYXRlX21ldGFkYXRhPiBQQl9EU19DTEFTU19DX0RFQzo6c19tZXRhZGF0YV90eXBlX2luZGljYXRvcjsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0Pgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KQoreworICB3aGlsZSAoZmlyc3RfaXQgIT0gbGFzdF9pdCkKKyAgICBpbnNlcnQoKihmaXJzdF9pdCsrKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19MVV9OQU1FKCkgOiBtX3BfbCgwKQoreyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+CitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19MVV9OQU1FKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KSA6IG1fcF9sKDApCit7CisgIGNvcHlfZnJvbV9yYW5nZShmaXJzdF9pdCwgbGFzdF9pdCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX0xVX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CittX3BfbCgwKQoreworICBfX3RyeQorICAgIHsKKyAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBvdGhlci5iZWdpbigpOyBpdCAhPSBvdGhlci5lbmQoKTsgKytpdCkKKwl7CisJICBlbnRyeV9wb2ludGVyIHBfbCA9IGFsbG9jYXRlX25ld19lbnRyeSgqaXQsCisJCQkJICAgICAgdHJhaXRzX2Jhc2U6Om1fbm9fdGhyb3dfY29waWVzX2luZGljYXRvcik7CisKKwkgIHBfbC0+bV9wX25leHQgPSBtX3BfbDsKKwkgIG1fcF9sID0gcF9sOworCX0KKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIGRlYWxsb2NhdGVfYWxsKCk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6c3dhcChvdGhlcik7KQorICBzdGQ6OnN3YXAobV9wX2wsIG90aGVyLm1fcF9sKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2RlYWxsb2NhdGVfYWxsKCkKK3sKKyAgZW50cnlfcG9pbnRlciBwX2wgPSBtX3BfbDsKKyAgd2hpbGUgKHBfbCAhPSAwKQorICAgIHsKKyAgICAgIGVudHJ5X3BvaW50ZXIgcF9uZXh0X2wgPSBwX2wtPm1fcF9uZXh0OworICAgICAgYWN0dWFsX2VyYXNlX2VudHJ5KHBfbCk7CisgICAgICBwX2wgPSBwX25leHRfbDsKKyAgICB9CisgIG1fcF9sID0gMDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK35QQl9EU19MVV9OQU1FKCkKK3sgZGVhbGxvY2F0ZV9hbGwoKTsgfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmRiNThmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZGVidWdfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsaXN0X3VwZGF0ZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgY2NfaHRfbWFwXydzIGRlYnVnLW1vZGUgZnVuY3Rpb25zLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgc2l6ZV90eXBlIGNhbGNfc2l6ZSA9IDA7CisgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmQoKTsgKytpdCkKKyAgICB7CisgICAgICBkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKFBCX0RTX1YyRigqaXQpLCBfX2ZpbGUsIF9fbGluZSk7CisgICAgICArK2NhbGNfc2l6ZTsKKyAgICB9CisgIGRlYnVnX2Jhc2U6OmNoZWNrX3NpemUoY2FsY19zaXplLCBfX2ZpbGUsIF9fbGluZSk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2VudHJ5X21ldGFkYXRhX2Jhc2UuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZW50cnlfbWV0YWRhdGFfYmFzZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1MzBmNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2VudHJ5X21ldGFkYXRhX2Jhc2UuaHBwCkBAIC0wLDAgKzEsNjAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGlzdF91cGRhdGVfbWFwXy9lbnRyeV9tZXRhZGF0YV9iYXNlLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIGEgbGlzdCB1cGRhdGUgbWFwLgorICovCisKKyNpZm5kZWYgUEJfRFNfTFVfTUFQX0VOVFJZX01FVEFEQVRBX0JBU0VfSFBQCisjZGVmaW5lIFBCX0RTX0xVX01BUF9FTlRSWV9NRVRBREFUQV9CQVNFX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KKyAgICBzdHJ1Y3QgbHVfbWFwX2VudHJ5X21ldGFkYXRhX2Jhc2UKKyAgICB7CisgICAgICBNZXRhZGF0YSBtX3VwZGF0ZV9tZXRhZGF0YTsKKyAgICB9OworICAgIAorICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbHVfbWFwX2VudHJ5X21ldGFkYXRhX2Jhc2U8bnVsbF90eXBlPgorICAgIHsgfTsgIAorICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGEzNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMzQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGlzdF91cGRhdGVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGx1X21hcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgaWYgKG1fcF9sID09IDApCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChzX2VxX2ZuKHJfa2V5LCBQQl9EU19WMkYobV9wX2wtPm1fdmFsdWUpKSkKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV4dCA9IG1fcF9sLT5tX3BfbmV4dDsKKyAgICAgIGFjdHVhbF9lcmFzZV9lbnRyeShtX3BfbCk7CisgICAgICBtX3BfbCA9IHBfbmV4dDsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBlbnRyeV9wb2ludGVyIHBfbCA9IG1fcF9sOworICB3aGlsZSAocF9sLT5tX3BfbmV4dCAhPSAwKQorICAgIGlmIChzX2VxX2ZuKHJfa2V5LCBQQl9EU19WMkYocF9sLT5tX3BfbmV4dC0+bV92YWx1ZSkpKQorICAgICAgeworCWVyYXNlX25leHQocF9sKTsKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwX2wgPSBwX2wtPm1fcF9uZXh0OworICByZXR1cm4gZmFsc2U7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitjbGVhcigpCit7CisgIGRlYWxsb2NhdGVfYWxsKCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgoraW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHNpemVfdHlwZSBudW1fZXJzZCA9IDA7CisgIHdoaWxlIChtX3BfbCAhPSAwICYmIHByZWQobV9wX2wtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIGVudHJ5X3BvaW50ZXIgcF9uZXh0ID0gbV9wX2wtPm1fcF9uZXh0OworICAgICAgKytudW1fZXJzZDsKKyAgICAgIGFjdHVhbF9lcmFzZV9lbnRyeShtX3BfbCk7CisgICAgICBtX3BfbCA9IHBfbmV4dDsKKyAgICB9CisKKyAgaWYgKG1fcF9sID09IDApCisgICAgcmV0dXJuIG51bV9lcnNkOworCisgIGVudHJ5X3BvaW50ZXIgcF9sID0gbV9wX2w7CisgIHdoaWxlIChwX2wtPm1fcF9uZXh0ICE9IDApCisgICAgeworICAgICAgaWYgKHByZWQocF9sLT5tX3BfbmV4dC0+bV92YWx1ZSkpCisgICAgICAgIHsKKwkgICsrbnVtX2Vyc2Q7CisJICBlcmFzZV9uZXh0KHBfbCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwlwX2wgPSBwX2wtPm1fcF9uZXh0OworICAgIH0KKworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIG51bV9lcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfbmV4dChlbnRyeV9wb2ludGVyIHBfbCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbCAhPSAwKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbC0+bV9wX25leHQgIT0gMCk7CisgIGVudHJ5X3BvaW50ZXIgcF9uZXh0X2wgPSBwX2wtPm1fcF9uZXh0LT5tX3BfbmV4dDsKKyAgYWN0dWFsX2VyYXNlX2VudHJ5KHBfbC0+bV9wX25leHQpOworICBwX2wtPm1fcF9uZXh0ID0gcF9uZXh0X2w7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CithY3R1YWxfZXJhc2VfZW50cnkoZW50cnlfcG9pbnRlciBwX2wpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6ZXJhc2VfZXhpc3RpbmcoUEJfRFNfVjJGKHBfbC0+bV92YWx1ZSkpOykKKyAgcF9sLT5+ZW50cnkoKTsKKyAgc19lbnRyeV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX2wsIDEpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZmluZF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDRjNDUwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vZmluZF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDkwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxpc3RfdXBkYXRlX21hcF8vZmluZF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGx1X21hcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6ZW50cnlfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgaWYgKG1fcF9sID09IDApCisgICAgcmV0dXJuIDA7CisgIGlmIChzX2VxX2ZuKHJfa2V5LCBQQl9EU19WMkYobV9wX2wtPm1fdmFsdWUpKSkKKyAgICB7CisgICAgICBhcHBseV91cGRhdGUobV9wX2wsIHNfbWV0YWRhdGFfdHlwZV9pbmRpY2F0b3IpOworICAgICAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhyX2tleSkKKyAgICAgIHJldHVybiBtX3BfbDsKKyAgICB9CisKKyAgZW50cnlfcG9pbnRlciBwX2wgPSBtX3BfbDsKKyAgd2hpbGUgKHBfbC0+bV9wX25leHQgIT0gMCkKKyAgICB7CisgICAgICBlbnRyeV9wb2ludGVyIHBfbmV4dCA9IHBfbC0+bV9wX25leHQ7CisgICAgICBpZiAoc19lcV9mbihyX2tleSwgUEJfRFNfVjJGKHBfbmV4dC0+bV92YWx1ZSkpKQorICAgICAgICB7CisJICBpZiAoYXBwbHlfdXBkYXRlKHBfbmV4dCwgc19tZXRhZGF0YV90eXBlX2luZGljYXRvcikpCisgICAgICAgICAgICB7CisJICAgICAgcF9sLT5tX3BfbmV4dCA9IHBfbmV4dC0+bV9wX25leHQ7CisJICAgICAgcF9uZXh0LT5tX3BfbmV4dCA9IG1fcF9sOworCSAgICAgIG1fcF9sID0gcF9uZXh0OworCSAgICAgIHJldHVybiBtX3BfbDsKKyAgICAgICAgICAgIH0KKwkgIHJldHVybiBwX25leHQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwlwX2wgPSBwX25leHQ7CisgICAgfQorCisgIFBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChyX2tleSkKKyAgcmV0dXJuIDA7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CithcHBseV91cGRhdGUoZW50cnlfcG9pbnRlciBwX2wsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YT4pCit7IHJldHVybiBzX3VwZGF0ZV9wb2xpY3kocF9sLT5tX3VwZGF0ZV9tZXRhZGF0YSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CithcHBseV91cGRhdGUoZW50cnlfcG9pbnRlciwgdHlwZV90b190eXBlPG51bGxfdHlwZT4pCit7IHJldHVybiBzX3VwZGF0ZV9wb2xpY3koc19udWxsX3R5cGUpOyB9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2luZm9fZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTYxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGlzdF91cGRhdGVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgbHVfbWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NpemUoKSBjb25zdAoreyByZXR1cm4gc3RkOjpkaXN0YW5jZShiZWdpbigpLCBlbmQoKSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBzX2VudHJ5X2FsbG9jYXRvci5tYXhfc2l6ZSgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW1wdHkoKSBjb25zdAoreyByZXR1cm4gKG1fcF9sID09IDApOyB9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQxNzY5MAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwNiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsaXN0X3VwZGF0ZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wbGVtZW50YXRpb25zIG9mIGx1X21hcF8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8CisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvciwKKyAgYm9vbD4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydChjb25zdF9yZWZlcmVuY2Ugcl92YWwpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBlbnRyeV9wb2ludGVyIHBfbCA9IGZpbmRfaW1wKFBCX0RTX1YyRihyX3ZhbCkpOworCisgIGlmIChwX2wgIT0gMCkKKyAgICB7CisgICAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKFBCX0RTX1YyRihyX3ZhbCkpCisgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocG9pbnRfaXRlcmF0b3IoJnBfbC0+bV92YWx1ZSksIGZhbHNlKTsKKyAgICB9CisKKyAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKFBCX0RTX1YyRihyX3ZhbCkpCisKKyAgcF9sID0gYWxsb2NhdGVfbmV3X2VudHJ5KHJfdmFsLCB0cmFpdHNfYmFzZTo6bV9ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yKTsKKyAgcF9sLT5tX3BfbmV4dCA9IG1fcF9sOworICBtX3BfbCA9IHBfbDsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwb2ludF9pdGVyYXRvcigmcF9sLT5tX3ZhbHVlKSwgdHJ1ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmVudHJ5X3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2FsbG9jYXRlX25ld19lbnRyeShjb25zdF9yZWZlcmVuY2Ugcl92YWwsIGZhbHNlX3R5cGUpCit7CisgIGVudHJ5X3BvaW50ZXIgcF9sID0gc19lbnRyeV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7CisgIGNvbmRfZGVhbHRvcl90IGNvbmQocF9sKTsKKyAgbmV3IChjb25zdF9jYXN0PHZvaWQqID4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCogPigmcF9sLT5tX3ZhbHVlKSkpCisgICAgdmFsdWVfdHlwZShyX3ZhbCk7CisKKyAgY29uZC5zZXRfbm9fYWN0aW9uKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYocl92YWwpKTspCisgIGluaXRfZW50cnlfbWV0YWRhdGEocF9sLCBzX21ldGFkYXRhX3R5cGVfaW5kaWNhdG9yKTsKKyAgcmV0dXJuIHBfbDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6ZW50cnlfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYWxsb2NhdGVfbmV3X2VudHJ5KGNvbnN0X3JlZmVyZW5jZSAgICByX3ZhbCwgdHJ1ZV90eXBlKQoreworICBlbnRyeV9wb2ludGVyIHBfbCA9IHNfZW50cnlfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICBuZXcgKCZwX2wtPm1fdmFsdWUpIHZhbHVlX3R5cGUocl92YWwpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoUEJfRFNfVjJGKHJfdmFsKSk7KQorICBpbml0X2VudHJ5X21ldGFkYXRhKHBfbCwgc19tZXRhZGF0YV90eXBlX2luZGljYXRvcik7CisgIHJldHVybiBwX2w7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0X2VudHJ5X21ldGFkYXRhKGVudHJ5X3BvaW50ZXIgcF9sLCB0eXBlX3RvX3R5cGU8TWV0YWRhdGE+KQoreyBuZXcgKCZwX2wtPm1fdXBkYXRlX21ldGFkYXRhKSBNZXRhZGF0YShzX3VwZGF0ZV9wb2xpY3koKSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0X2VudHJ5X21ldGFkYXRhKGVudHJ5X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxudWxsX3R5cGU+KQoreyB9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGZlZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsODAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGlzdF91cGRhdGVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9ucyBvZiBsdV9tYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbigpCit7CisgIGlmIChtX3BfbCA9PSAwKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChlbXB0eSgpKTsKKyAgICAgIHJldHVybiBlbmQoKTsKKyAgICB9CisgIHJldHVybiBpdGVyYXRvcigmbV9wX2wtPm1fdmFsdWUsIG1fcF9sLCB0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKCkgY29uc3QKK3sKKyAgaWYgKG1fcF9sID09IDApCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGVtcHR5KCkpOworICAgICAgcmV0dXJuIGVuZCgpOworICAgIH0KKyAgcmV0dXJuIGl0ZXJhdG9yKCZtX3BfbC0+bV92YWx1ZSwgbV9wX2wsIGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqID4odGhpcykpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW5kKCkKK3sgcmV0dXJuIGl0ZXJhdG9yKDAsIDAsIHRoaXMpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreworICByZXR1cm4gY29uc3RfaXRlcmF0b3IoMCwgMCwgY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyogY29uc3Q+KHRoaXMpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vbHVfbWFwXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9sdV9tYXBfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDQ3Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vbHVfbWFwXy5ocHAKQEAgLTAsMCArMSwzNDMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgbGlzdF91cGRhdGVfbWFwXy9sdV9tYXBfLmhwcAorICogQ29udGFpbnMgYSBsaXN0IHVwZGF0ZSBtYXAuCisgKi8KKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVzX3RyYWl0cy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2VudHJ5X21ldGFkYXRhX2Jhc2UuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9kZWJ1Z19tYXBfYmFzZS5ocHA+CisjZW5kaWYKKyNpZmRlZiBQQl9EU19MVV9NQVBfVFJBQ0VfCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjZW5kaWYKKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0xVX05BTUUgbHVfbWFwCisjZW5kaWYKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX0xVX05BTUUgbHVfc2V0CisjZW5kaWYKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEVxX0ZuLCBcCisJICAgICB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIFVwZGF0ZV9Qb2xpY3k+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIFBCX0RTX0xVX05BTUU8S2V5LCBNYXBwZWQsIEVxX0ZuLCBfQWxsb2MsIFVwZGF0ZV9Qb2xpY3k+CisKKyNkZWZpbmUgUEJfRFNfTFVfVFJBSVRTX0JBU0UgXAorICAgIHR5cGVzX3RyYWl0czxLZXksIE1hcHBlZCwgX0FsbG9jLCBmYWxzZT4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjZGVmaW5lIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDIFwKKyAgICBkZWJ1Z19tYXBfYmFzZTxLZXksIEVxX0ZuLCBcCisJICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8S2V5Pjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZT4KKyNlbmRpZgorCisgICAgLy8vIGxpc3QtYmFzZWQgKHdpdGggdXBkYXRlcykgYXNzb2NpYXRpdmUgY29udGFpbmVyLgorICAgIC8vLyBTa2lwIHRvIHRoZSBsdSwgbXkgZGFybGluZy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBNYXBwZWQsCisJICAgICB0eXBlbmFtZSBFcV9GbiwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYywKKwkgICAgIHR5cGVuYW1lIFVwZGF0ZV9Qb2xpY3k+CisgICAgY2xhc3MgUEJfRFNfTFVfTkFNRSA6CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHByb3RlY3RlZCBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQywKKyNlbmRpZgorICAgICAgcHVibGljIFBCX0RTX0xVX1RSQUlUU19CQVNFCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIFBCX0RTX0xVX1RSQUlUU19CQVNFIAkgICAgICAgCXRyYWl0c19iYXNlOworCisgICAgICBzdHJ1Y3QgZW50cnkKKyAgICAgOiBwdWJsaWMgbHVfbWFwX2VudHJ5X21ldGFkYXRhX2Jhc2U8dHlwZW5hbWUgVXBkYXRlX1BvbGljeTo6bWV0YWRhdGFfdHlwZT4KKyAgICAgIHsKKwl0eXBlbmFtZSB0cmFpdHNfYmFzZTo6dmFsdWVfdHlwZSBtX3ZhbHVlOworCXR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGVudHJ5Pjo6b3RoZXI6OnBvaW50ZXIgbV9wX25leHQ7CisgICAgICB9OworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGVudHJ5Pjo6b3RoZXIgZW50cnlfYWxsb2NhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBlbnRyeV9hbGxvY2F0b3I6OnBvaW50ZXIgZW50cnlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyIGNvbnN0X2VudHJ5X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGVudHJ5X2FsbG9jYXRvcjo6cmVmZXJlbmNlIGVudHJ5X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfZW50cnlfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGVudHJ5X3BvaW50ZXI+OjpvdGhlciBlbnRyeV9wb2ludGVyX2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZW50cnlfcG9pbnRlcl9hbGxvY2F0b3I6OnBvaW50ZXIgZW50cnlfcG9pbnRlcl9hcnJheTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlXzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnBvaW50ZXIgcG9pbnRlcl87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXJfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6cmVmZXJlbmNlIHJlZmVyZW5jZV87CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlXzsKKworI2RlZmluZSBQQl9EU19HRU5fUE9TIGVudHJ5X3BvaW50ZXIKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2NvbnN0X2l0ZXJhdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9wb2ludF9pdGVyYXRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2l0ZXJhdG9yLmhwcD4KKworI3VuZGVmIFBCX0RTX0dFTl9QT1MKKworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHR5cGVkZWYgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMgZGVidWdfYmFzZTsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIGNvbmRfZGVhbHRvcjxlbnRyeSwgX0FsbG9jPiBjb25kX2RlYWx0b3JfdDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgRXFfRm4gZXFfZm47CisgICAgICB0eXBlZGVmIFVwZGF0ZV9Qb2xpY3kgdXBkYXRlX3BvbGljeTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVXBkYXRlX1BvbGljeTo6bWV0YWRhdGFfdHlwZSB1cGRhdGVfbWV0YWRhdGE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfdHlwZSBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9wb2ludGVyIGtleV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X2NvbnN0X3BvaW50ZXIga2V5X2NvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfcmVmZXJlbmNlIGtleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfY29uc3RfcmVmZXJlbmNlIGtleV9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9wb2ludGVyIG1hcHBlZF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6bWFwcGVkX2NvbnN0X3BvaW50ZXIgbWFwcGVkX2NvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfcmVmZXJlbmNlIG1hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfY29uc3RfcmVmZXJlbmNlIG1hcHBlZF9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpwb2ludGVyIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgcG9pbnRfaXRlcmF0b3JfIAkJCXBvaW50X2l0ZXJhdG9yOworI2VuZGlmCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBwb2ludF9jb25zdF9pdGVyYXRvcl8gCQlwb2ludF9pdGVyYXRvcjsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIHBvaW50X2NvbnN0X2l0ZXJhdG9yXyAJCXBvaW50X2NvbnN0X2l0ZXJhdG9yOworCisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorICAgICAgdHlwZWRlZiBpdGVyYXRvcl8gCQkJaXRlcmF0b3I7CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisgICAgICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yXyAJCQlpdGVyYXRvcjsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yXyAJCQljb25zdF9pdGVyYXRvcjsKKworICAgIHB1YmxpYzoKKyAgICAgIFBCX0RTX0xVX05BTUUoKTsKKworICAgICAgUEJfRFNfTFVfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2aXJ0dWFsCisgICAgICB+UEJfRFNfTFVfTkFNRSgpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICAgIFBCX0RTX0xVX05BTUUoSXQsIEl0KTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQorICAgICAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKwlyZXR1cm4gaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHJfa2V5LCBtYXBwZWRfdHlwZSgpKSkuZmlyc3QtPnNlY29uZDsKKyNlbHNlCisJaW5zZXJ0KHJfa2V5KTsKKwlyZXR1cm4gdHJhaXRzX2Jhc2U6OnNfbnVsbF90eXBlOworI2VuZGlmCisgICAgICB9CisKKyAgICAgIGlubGluZSBzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisJZW50cnlfcG9pbnRlciBwX2UgPSBmaW5kX2ltcChyX2tleSk7CisJcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfZSA9PSAwID8gMDogJnBfZS0+bV92YWx1ZSk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBwb2ludF9jb25zdF9pdGVyYXRvcgorICAgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3ZhbGlkKF9fRklMRV9fLCBfX0xJTkVfXyk7KQorCWVudHJ5X3BvaW50ZXIgcF9lID0gZmluZF9pbXAocl9rZXkpOworCXJldHVybiBwb2ludF9jb25zdF9pdGVyYXRvcihwX2UgPT0gMCA/IDA6ICZwX2UtPm1fdmFsdWUpOworICAgICAgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXJhc2Uoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBlcmFzZV9pZihQcmVkKTsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKSBjb25zdDsKKyNlbmRpZgorCisjaWZkZWYgUEJfRFNfTFVfTUFQX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdDsKKyNlbmRpZgorCisgICAgcHJvdGVjdGVkOgorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICAgIHZvaWQKKyAgICAgIGNvcHlfZnJvbV9yYW5nZShJdCwgSXQpOworCisgICAgcHJpdmF0ZToKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisgICAgICBmcmllbmQgY2xhc3MgaXRlcmF0b3JfOworI2VuZGlmCisKKyAgICAgIGZyaWVuZCBjbGFzcyBjb25zdF9pdGVyYXRvcl87CisKKyAgICAgIGlubGluZSBlbnRyeV9wb2ludGVyCisgICAgICBhbGxvY2F0ZV9uZXdfZW50cnkoY29uc3RfcmVmZXJlbmNlLCBmYWxzZV90eXBlKTsKKworICAgICAgaW5saW5lIGVudHJ5X3BvaW50ZXIKKyAgICAgIGFsbG9jYXRlX25ld19lbnRyeShjb25zdF9yZWZlcmVuY2UsIHRydWVfdHlwZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgorICAgICAgaW5saW5lIHN0YXRpYyB2b2lkCisgICAgICBpbml0X2VudHJ5X21ldGFkYXRhKGVudHJ5X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YT4pOworCisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQKKyAgICAgIGluaXRfZW50cnlfbWV0YWRhdGEoZW50cnlfcG9pbnRlciwgdHlwZV90b190eXBlPG51bGxfdHlwZT4pOworCisgICAgICB2b2lkCisgICAgICBkZWFsbG9jYXRlX2FsbCgpOworCisgICAgICB2b2lkCisgICAgICBlcmFzZV9uZXh0KGVudHJ5X3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBhY3R1YWxfZXJhc2VfZW50cnkoZW50cnlfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGluY19pdF9zdGF0ZShjb25zdF9wb2ludGVyJiByX3BfdmFsdWUsIGVudHJ5X3BvaW50ZXImIHJfcG9zKSBjb25zdAorICAgICAgeworCXJfcG9zID0gcl9wb3MtPm1fcF9uZXh0OworCXJfcF92YWx1ZSA9IChyX3BvcyA9PSAwKSA/IDAgOiAmcl9wb3MtPm1fdmFsdWU7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhPgorICAgICAgaW5saW5lIHN0YXRpYyBib29sCisgICAgICBhcHBseV91cGRhdGUoZW50cnlfcG9pbnRlciwgdHlwZV90b190eXBlPE1ldGFkYXRhPik7CisKKyAgICAgIGlubGluZSBzdGF0aWMgYm9vbAorICAgICAgYXBwbHlfdXBkYXRlKGVudHJ5X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxudWxsX3R5cGU+KTsKKworICAgICAgaW5saW5lIGVudHJ5X3BvaW50ZXIKKyAgICAgIGZpbmRfaW1wKGtleV9jb25zdF9yZWZlcmVuY2UpIGNvbnN0OworCisgICAgICBzdGF0aWMgZW50cnlfYWxsb2NhdG9yIAkJCXNfZW50cnlfYWxsb2NhdG9yOworICAgICAgc3RhdGljIEVxX0ZuIAkJCQlzX2VxX2ZuOworICAgICAgc3RhdGljIFVwZGF0ZV9Qb2xpY3kgCQkJc191cGRhdGVfcG9saWN5OworICAgICAgc3RhdGljIHR5cGVfdG9fdHlwZTx1cGRhdGVfbWV0YWRhdGE+IAlzX21ldGFkYXRhX3R5cGVfaW5kaWNhdG9yOworICAgICAgc3RhdGljIG51bGxfdHlwZSAJCQkJc19udWxsX3R5cGU7CisKKyAgICAgIG11dGFibGUgZW50cnlfcG9pbnRlciAJCQltX3BfbDsKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2NvbnN0cnVjdG9yX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2luZm9fZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pdGVyYXRvcnNfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0xVX1RSQUlUU19CQVNFCisjdW5kZWYgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMKKyN1bmRlZiBQQl9EU19MVV9OQU1FCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vdHJhY2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfbWFwXy90cmFjZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWQ2ZDYyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX21hcF8vdHJhY2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBsaXN0X3VwZGF0ZV9tYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgbHVfbWFwXy4KKyAqLworCisjaWZkZWYgUEJfRFNfTFVfTUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBzdGQ6OmNlcnIgPDwgbV9wX2wgPDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKKyAgY29uc3RfZW50cnlfcG9pbnRlciBwX2wgPSBtX3BfbDsKKyAgd2hpbGUgKHBfbCAhPSAwKQorICAgIHsKKyAgICAgIHN0ZDo6Y2VyciA8PCBQQl9EU19WMkYocF9sLT5tX3ZhbHVlKSA8PCBzdGQ6OmVuZGw7CisgICAgICBwX2wgPSBwX2wtPm1fcF9uZXh0OworICAgIH0KKyAgc3RkOjpjZXJyIDw8IHN0ZDo6ZW5kbDsKK30KKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfcG9saWN5L2x1X2NvdW50ZXJfbWV0YWRhdGEuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX3BvbGljeS9sdV9jb3VudGVyX21ldGFkYXRhLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFmZmNkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL2xpc3RfdXBkYXRlX3BvbGljeS9sdV9jb3VudGVyX21ldGFkYXRhLmhwcApAQCAtMCwwICsxLDg3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGx1X2NvdW50ZXJfbWV0YWRhdGEuaHBwCisgKiBDb250YWlucyBpbXBsZW1lbnRhdGlvbiBvZiBhIGx1IGNvdW50ZXIgcG9saWN5J3MgbWV0YWRhdGEuCisgKi8KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorICAgICAgY2xhc3MgbHVfY291bnRlcl9wb2xpY3lfYmFzZTsKKworICAgIC8vLyBBIGxpc3QtdXBkYXRlIG1ldGFkYXRhIHR5cGUgdGhhdCBtb3ZlcyBlbGVtZW50cyB0byB0aGUgZnJvbnQgb2YKKyAgICAvLy8gdGhlIGxpc3QgYmFzZWQgb24gdGhlIGNvdW50ZXIgYWxnb3JpdGhtLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZSA9IHN0ZDo6c2l6ZV90PgorICAgICAgY2xhc3MgbHVfY291bnRlcl9tZXRhZGF0YQorICAgICAgeworICAgICAgcHVibGljOgorCXR5cGVkZWYgU2l6ZV9UeXBlIAlzaXplX3R5cGU7CisKKyAgICAgIHByaXZhdGU6CisJbHVfY291bnRlcl9tZXRhZGF0YShzaXplX3R5cGUgaW5pdF9jb3VudCkgOiBtX2NvdW50KGluaXRfY291bnQpCisJeyB9CisKKwlmcmllbmQgY2xhc3MgbHVfY291bnRlcl9wb2xpY3lfYmFzZTxzaXplX3R5cGU+OworCisJbXV0YWJsZSBzaXplX3R5cGUgCW1fY291bnQ7CisgICAgfTsKKworICAgIC8vLyBCYXNlIGNsYXNzIGZvciBsaXN0LXVwZGF0ZSBjb3VudGVyIHBvbGljeS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisgICAgICBjbGFzcyBsdV9jb3VudGVyX3BvbGljeV9iYXNlCisgICAgICB7CisgICAgICBwcm90ZWN0ZWQ6CisJdHlwZWRlZiBTaXplX1R5cGUgCXNpemVfdHlwZTsKKworCWx1X2NvdW50ZXJfbWV0YWRhdGE8c2l6ZV90eXBlPgorCW9wZXJhdG9yKCkoc2l6ZV90eXBlIG1heF9zaXplKSBjb25zdAorCXsgcmV0dXJuIGx1X2NvdW50ZXJfbWV0YWRhdGE8U2l6ZV9UeXBlPihzdGQ6OnJhbmQoKSAlIG1heF9zaXplKTsgfQorCisJdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGFfUmVmZXJlbmNlPgorCWJvb2wKKwlvcGVyYXRvcigpKE1ldGFkYXRhX1JlZmVyZW5jZSByX2RhdGEsIHNpemVfdHlwZSBtX21heF9jb3VudCkgY29uc3QKKwl7CisJICBpZiAoKytyX2RhdGEubV9jb3VudCAhPSBtX21heF9jb3VudCkKKwkgICAgcmV0dXJuIGZhbHNlOworCSAgcl9kYXRhLm1fY291bnQgPSAwOworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfcG9saWN5L3NhbXBsZV91cGRhdGVfcG9saWN5LmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9wb2xpY3kvc2FtcGxlX3VwZGF0ZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZDc4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvbGlzdF91cGRhdGVfcG9saWN5L3NhbXBsZV91cGRhdGVfcG9saWN5LmhwcApAQCAtMCwwICsxLDc2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNhbXBsZV91cGRhdGVfcG9saWN5LmhwcAorICogQ29udGFpbnMgYSBzYW1wbGUgcG9saWN5IGZvciBsaXN0IHVwZGF0ZSBjb250YWluZXJzLgorICovCisKKyNpZm5kZWYgUEJfRFNfU0FNUExFX1VQREFURV9QT0xJQ1lfSFBQCisjZGVmaW5lIFBCX0RTX1NBTVBMRV9VUERBVEVfUE9MSUNZX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICAvLy8gQSBzYW1wbGUgbGlzdC11cGRhdGUgcG9saWN5LgorICBzdHJ1Y3Qgc2FtcGxlX3VwZGF0ZV9wb2xpY3kKKyAgeworICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgIHNhbXBsZV91cGRhdGVfcG9saWN5KCk7CisKKyAgICAvLy8gQ29weSBjb25zdHJ1Y3Rvci4KKyAgICBzYW1wbGVfdXBkYXRlX3BvbGljeShjb25zdCBzYW1wbGVfdXBkYXRlX3BvbGljeSYpOworCisgICAgLy8vIFN3YXBzIGNvbnRlbnQuCisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHNhbXBsZV91cGRhdGVfcG9saWN5JiBvdGhlcik7CisKKyAgcHJvdGVjdGVkOgorICAgIC8vLyBNZXRhZGF0YSBvbiB3aGljaCB0aGlzIGZ1bmN0b3Igb3BlcmF0ZXMuCisgICAgdHlwZWRlZiBzb21lX21ldGFkYXRhX3R5cGUgbWV0YWRhdGFfdHlwZTsKKworICAgIC8vLyBDcmVhdGVzIGEgbWV0YWRhdGEgb2JqZWN0LgorICAgIG1ldGFkYXRhX3R5cGUKKyAgICBvcGVyYXRvcigpKCkgY29uc3Q7CisKKyAgICAvLy8gRGVjaWRlcyB3aGV0aGVyIGEgbWV0YWRhdGEgb2JqZWN0IHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgZnJvbnQKKyAgICAvLy8gb2YgdGhlIGxpc3QuIEEgbGlzdC11cGRhdGUgYmFzZWQgY29udGFpbmVycyBvYmplY3Qgd2lsbCBjYWxsCisgICAgLy8vIHRoaXMgbWV0aG9kIHRvIGRlY2lkZSB3aGV0aGVyIHRvIG1vdmUgYSBub2RlIHRvIHRoZSBmcm9udCBvZgorICAgIC8vLyB0aGUgbGlzdC4gVGhlIG1ldGhvZCBzaG91bGUgcmV0dXJuIHRydWUgaWYgdGhlIG5vZGUgc2hvdWxkIGJlCisgICAgLy8vIG1vdmVkIHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4KKyAgICBib29sCisgICAgb3BlcmF0b3IoKShtZXRhZGF0YV9yZWZlcmVuY2UpIGNvbnN0OworICB9OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjFlNTBmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDI1NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBvdl90cmVlX21hcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBvdl90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnZhbHVlX2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfdmFsdWVfYWxsb2M7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bWV0YWRhdGFfYWxsb2NhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19tZXRhZGF0YV9hbGxvYzsKKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX09WX1RSRUVfTkFNRSgpIDoKKyAgbV9hX3ZhbHVlcygwKSwKKyAgbV9hX21ldGFkYXRhKDApLAorICBtX2VuZF9pdCgwKSwKKyAgbV9zaXplKDApCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19PVl9UUkVFX05BTUUoY29uc3QgQ21wX0ZuJiByX2NtcF9mbikgOgorICBjbXBfZm4ocl9jbXBfZm4pLAorICBtX2FfdmFsdWVzKDApLAorICBtX2FfbWV0YWRhdGEoMCksCisgIG1fZW5kX2l0KDApLAorICBtX3NpemUoMCkKK3sgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX09WX1RSRUVfTkFNRShjb25zdCBDbXBfRm4mIHJfY21wX2ZuLCBjb25zdCBub2RlX3VwZGF0ZSYgcl9ub2RldSkgOgorICBjbXBfZm4ocl9jbXBfZm4pLAorICBub2RlX3VwZGF0ZShyX25vZGV1KSwKKyAgbV9hX3ZhbHVlcygwKSwKKyAgbV9hX21ldGFkYXRhKDApLAorICBtX2VuZF9pdCgwKSwKKyAgbV9zaXplKDApCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19PVl9UUkVFX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorICB0cmFjZV9iYXNlKG90aGVyKSwKKyNlbmRpZgorICBjbXBfZm4ob3RoZXIpLAorICBub2RlX3VwZGF0ZShvdGhlciksCisgIG1fYV92YWx1ZXMoMCksCisgIG1fYV9tZXRhZGF0YSgwKSwKKyAgbV9lbmRfaXQoMCksCisgIG1fc2l6ZSgwKQoreworICBjb3B5X2Zyb21fb3JkZXJlZF9yYW5nZShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+CitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KQoreworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgdHlwZWRlZiBzdGQ6Om1hcDxrZXlfdHlwZSwgbWFwcGVkX3R5cGUsIENtcF9GbiwKKwkJICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT46Om90aGVyPgorICAgIG1hcF90eXBlOworI2Vsc2UKKyAgdHlwZWRlZiBzdGQ6OnNldDxrZXlfdHlwZSwgQ21wX0ZuLAorCQkgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlcj4KKyAgICBtYXBfdHlwZTsKKyNlbmRpZgorCisgIG1hcF90eXBlIG0oZmlyc3RfaXQsIGxhc3RfaXQpOworICBjb3B5X2Zyb21fb3JkZXJlZF9yYW5nZShtLmJlZ2luKCksIG0uZW5kKCkpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0Pgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX29yZGVyZWRfcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBzdGQ6OmRpc3RhbmNlKGZpcnN0X2l0LCBsYXN0X2l0KTsKKyAgaWYgKGxlbiA9PSAwKQorICAgIHJldHVybjsKKworICB2YWx1ZV92ZWN0b3IgYV92YWx1ZXMgPSBzX3ZhbHVlX2FsbG9jLmFsbG9jYXRlKGxlbik7CisgIGl0ZXJhdG9yIHRhcmdldF9pdCA9IGFfdmFsdWVzOworICBJdCBzb3VyY2VfaXQgPSBmaXJzdF9pdDsKKyAgSXQgc291cmNlX2VuZF9pdCA9IGxhc3RfaXQ7CisKKyAgY29uZF9kdG9yPHNpemVfdHlwZT4gY2QoYV92YWx1ZXMsIHRhcmdldF9pdCwgbGVuKTsKKyAgd2hpbGUgKHNvdXJjZV9pdCAhPSBzb3VyY2VfZW5kX2l0KQorICAgIHsKKyAgICAgIHZvaWQqIF9fdiA9IGNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPih0YXJnZXRfaXQpKTsKKyAgICAgIG5ldyAoX192KSB2YWx1ZV90eXBlKCpzb3VyY2VfaXQrKyk7CisgICAgICArK3RhcmdldF9pdDsKKyAgICB9CisKKyAgcmVhbGxvY2F0ZV9tZXRhZGF0YSgobm9kZV91cGRhdGUqKXRoaXMsIGxlbik7CisgIGNkLnNldF9ub19hY3Rpb24oKTsKKyAgbV9hX3ZhbHVlcyA9IGFfdmFsdWVzOworICBtX3NpemUgPSBsZW47CisgIG1fZW5kX2l0ID0gbV9hX3ZhbHVlcyArIG1fc2l6ZTsKKyAgdXBkYXRlKFBCX0RTX25vZGVfYmVnaW5faW1wKCksIChub2RlX3VwZGF0ZSopdGhpcyk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGRiZ19pdCA9IG1fYV92YWx1ZXM7IGRiZ19pdCAhPSBtX2VuZF9pdDsgKytkYmdfaXQpCisgICAgZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYoKmRiZ19pdCkpOworI2VuZGlmCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvcHlfZnJvbV9vcmRlcmVkX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0LCBJdCBvdGhlcl9maXJzdF9pdCwKKwkJCUl0IG90aGVyX2xhc3RfaXQpCit7CisgIGNsZWFyKCk7CisgIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBzdGQ6OmRpc3RhbmNlKGZpcnN0X2l0LCBsYXN0X2l0KQorICAgIAkJCSArIHN0ZDo6ZGlzdGFuY2Uob3RoZXJfZmlyc3RfaXQsIG90aGVyX2xhc3RfaXQpOworCisgIHZhbHVlX3ZlY3RvciBhX3ZhbHVlcyA9IHNfdmFsdWVfYWxsb2MuYWxsb2NhdGUobGVuKTsKKworICBpdGVyYXRvciB0YXJnZXRfaXQgPSBhX3ZhbHVlczsKKyAgSXQgc291cmNlX2l0ID0gZmlyc3RfaXQ7CisgIEl0IHNvdXJjZV9lbmRfaXQgPSBsYXN0X2l0OworCisgIGNvbmRfZHRvcjxzaXplX3R5cGU+IGNkKGFfdmFsdWVzLCB0YXJnZXRfaXQsIGxlbik7CisgIHdoaWxlIChzb3VyY2VfaXQgIT0gc291cmNlX2VuZF9pdCkKKyAgICB7CisgICAgICBuZXcgKGNvbnN0X2Nhc3Q8dm9pZCogPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKiA+KHRhcmdldF9pdCkpKQorCXZhbHVlX3R5cGUoKnNvdXJjZV9pdCsrKTsKKyAgICAgICsrdGFyZ2V0X2l0OworICAgIH0KKworICBzb3VyY2VfaXQgPSBvdGhlcl9maXJzdF9pdDsKKyAgc291cmNlX2VuZF9pdCA9IG90aGVyX2xhc3RfaXQ7CisKKyAgd2hpbGUgKHNvdXJjZV9pdCAhPSBzb3VyY2VfZW5kX2l0KQorICAgIHsKKyAgICAgIG5ldyAoY29uc3RfY2FzdDx2b2lkKiA+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqID4odGFyZ2V0X2l0KSkpCisJdmFsdWVfdHlwZSgqc291cmNlX2l0KyspOworICAgICAgKyt0YXJnZXRfaXQ7CisgICAgfQorCisgIHJlYWxsb2NhdGVfbWV0YWRhdGEoKG5vZGVfdXBkYXRlKiApdGhpcywgbGVuKTsKKyAgY2Quc2V0X25vX2FjdGlvbigpOworICBtX2FfdmFsdWVzID0gYV92YWx1ZXM7CisgIG1fc2l6ZSA9IGxlbjsKKyAgbV9lbmRfaXQgPSBtX2FfdmFsdWVzICsgbV9zaXplOworICB1cGRhdGUoUEJfRFNfbm9kZV9iZWdpbl9pbXAoKSwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGRiZ19pdCA9IG1fYV92YWx1ZXM7IGRiZ19pdCAhPSBtX2VuZF9pdDsgKytkYmdfaXQpCisgICAgZGVidWdfYmFzZTo6aW5zZXJ0X25ldyhQQl9EU19WMkYoKmRiZ19pdCkpOworI2VuZGlmCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgdmFsdWVfc3dhcChvdGhlcik7CisgIHN0ZDo6c3dhcChzdGF0aWNfY2FzdDxjbXBfZm4mPigqdGhpcyksCisJICAgIHN0YXRpY19jYXN0PGNtcF9mbiY+KG90aGVyKSk7CisgIHN0ZDo6c3dhcChzdGF0aWNfY2FzdDx0cmFpdHNfYmFzZSY+KCp0aGlzKSwKKwkgICAgc3RhdGljX2Nhc3Q8dHJhaXRzX2Jhc2UmPihvdGhlcikpOworICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordmFsdWVfc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6c3dhcChvdGhlcik7KQorICBzdGQ6OnN3YXAobV9hX3ZhbHVlcywgb3RoZXIubV9hX3ZhbHVlcyk7CisgIHN0ZDo6c3dhcChtX2FfbWV0YWRhdGEsIG90aGVyLm1fYV9tZXRhZGF0YSk7CisgIHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7CisgIHN0ZDo6c3dhcChtX2VuZF9pdCwgb3RoZXIubV9lbmRfaXQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorflBCX0RTX09WX1RSRUVfTkFNRSgpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBjb25kX2R0b3I8c2l6ZV90eXBlPiBjZChtX2FfdmFsdWVzLCBtX2VuZF9pdCwgbV9zaXplKTsKKyAgcmVhbGxvY2F0ZV9tZXRhZGF0YSgobm9kZV91cGRhdGUqKXRoaXMsIDApOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZShub2RlX2l0ZXJhdG9yLCBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlPgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlKG5vZGVfaXRlcmF0b3IgbmRfaXQsIE5vZGVfVXBkYXRlKiBwX3VwZGF0ZSkKK3sKKyAgbm9kZV9jb25zdF9pdGVyYXRvciBlbmRfaXQgPSBQQl9EU19ub2RlX2VuZF9pbXAoKTsKKyAgaWYgKG5kX2l0ICE9IGVuZF9pdCkKKyAgICB7CisgICAgICB1cGRhdGUobmRfaXQuZ2V0X2xfY2hpbGQoKSwgcF91cGRhdGUpOworICAgICAgdXBkYXRlKG5kX2l0LmdldF9yX2NoaWxkKCksIHBfdXBkYXRlKTsKKyAgICAgIG5vZGVfdXBkYXRlOjpvcGVyYXRvcigpKG5kX2l0LCBlbmRfaXQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4Nzc0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgb3ZfdHJlZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBpZiAobV9hX3ZhbHVlcyA9PSAwIHx8IG1fZW5kX2l0ID09IDAgfHwgbV9zaXplID09IDApCisgICAgUEJfRFNfREVCVUdfVkVSSUZZKG1fYV92YWx1ZXMgPT0gMCAmJiAgbV9lbmRfaXQgPT0gMCAmJiBtX3NpemUgPT0gMCk7CisKKyAgYXNzZXJ0X2l0ZXJhdG9ycyhfX2ZpbGUsIF9fbGluZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfaXRlcmF0b3JzKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgZGVidWdfYmFzZTo6Y2hlY2tfc2l6ZShtX3NpemUsIF9fZmlsZSwgX19saW5lKTsKKyAgc2l6ZV90eXBlIGl0ZXJhdGVkX251bSA9IDA7CisgIGNvbnN0X2l0ZXJhdG9yIHByZXZfaXQgPSBlbmQoKTsKKyAgUEJfRFNfREVCVUdfVkVSSUZZKG1fZW5kX2l0ID09IG1fYV92YWx1ZXMgKyBtX3NpemUpOworICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kKCk7ICsraXQpCisgICAgeworICAgICAgKytpdGVyYXRlZF9udW07CisgICAgICBkZWJ1Z19iYXNlOjpjaGVja19rZXlfZXhpc3RzKFBCX0RTX1YyRigqaXQpLCBfX2ZpbGUsIF9fbGluZSk7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkobG93ZXJfYm91bmQoUEJfRFNfVjJGKCppdCkpID09IGl0KTsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kX2l0ID0gdXBwZXJfYm91bmQoUEJfRFNfVjJGKCppdCkpOworICAgICAgLS11cHBlcl9ib3VuZF9pdDsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWSh1cHBlcl9ib3VuZF9pdCA9PSBpdCk7CisgICAgICBpZiAocHJldl9pdCAhPSBlbmQoKSkKKwlQQl9EU19ERUJVR19WRVJJRlkoQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRigqcHJldl9pdCksCisJCQkJCSAgICAgIFBCX0RTX1YyRigqaXQpKSk7CisgICAgICBwcmV2X2l0ID0gaXQ7CisgICAgfQorICBQQl9EU19ERUJVR19WRVJJRlkoaXRlcmF0ZWRfbnVtID09IG1fc2l6ZSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3ZjEzNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxOTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgb3ZfdHJlZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGlmIChtX3NpemUgPT0gMCkKKyAgICB7CisgICAgICByZXR1cm47CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcmVhbGxvY2F0ZV9tZXRhZGF0YSgobm9kZV91cGRhdGUqICl0aGlzLCAwKTsKKyAgICAgIGNvbmRfZHRvcjxzaXplX3R5cGU+IGNkKG1fYV92YWx1ZXMsIG1fZW5kX2l0LCBtX3NpemUpOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNsZWFyKCk7KQorICBtX2FfdmFsdWVzID0gMDsKKyAgbV9zaXplID0gMDsKKyAgbV9lbmRfaXQgPSBtX2FfdmFsdWVzOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfaWYoUHJlZCBwcmVkKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKworI2lmZGVmIFBCX0RTX1JFR1JFU1NJT04KKyAgICB0eXBlbmFtZSBfQWxsb2M6Omdyb3VwX2FkanVzdG9yIGFkanVzdChtX3NpemUpOworI2VuZGlmCisKKyAgc2l6ZV90eXBlIG5ld19zaXplID0gMDsKKyAgc2l6ZV90eXBlIG51bV92YWxfZXJzZCA9IDA7CisKKyAgZm9yIChpdGVyYXRvciBzb3VyY2VfaXQgPSBiZWdpbigpOyBzb3VyY2VfaXQgIT0gbV9lbmRfaXQ7ICsrc291cmNlX2l0KQorICAgIGlmICghcHJlZCgqc291cmNlX2l0KSkKKyAgICAgICsrbmV3X3NpemU7CisgICAgZWxzZQorICAgICAgKytudW1fdmFsX2Vyc2Q7CisKKyAgaWYgKG5ld19zaXplID09IDApCisgICAgeworICAgICAgY2xlYXIoKTsKKyAgICAgIHJldHVybiBudW1fdmFsX2Vyc2Q7CisgICAgfQorCisgIHZhbHVlX3ZlY3RvciBhX25ld192YWx1ZXMgPSBzX3ZhbHVlX2FsbG9jLmFsbG9jYXRlKG5ld19zaXplKTsKKyAgaXRlcmF0b3IgdGFyZ2V0X2l0ID0gYV9uZXdfdmFsdWVzOworICBjb25kX2R0b3I8c2l6ZV90eXBlPiBjZChhX25ld192YWx1ZXMsIHRhcmdldF9pdCwgbmV3X3NpemUpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmNsZWFyKCkpOworICBmb3IgKGl0ZXJhdG9yIHNvdXJjZV9pdCA9IGJlZ2luKCk7IHNvdXJjZV9pdCAhPSBtX2VuZF9pdDsgKytzb3VyY2VfaXQpCisgICAgeworICAgICAgaWYgKCFwcmVkKCpzb3VyY2VfaXQpKQorCXsKKwkgIG5ldyAoY29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KHRhcmdldF9pdCkpKQorCSAgICB2YWx1ZV90eXBlKCpzb3VyY2VfaXQpOworCisJICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6Omluc2VydF9uZXcoUEJfRFNfVjJGKCpzb3VyY2VfaXQpKSk7CisJICArK3RhcmdldF9pdDsKKwl9CisgICAgfQorCisgIHJlYWxsb2NhdGVfbWV0YWRhdGEoKG5vZGVfdXBkYXRlKil0aGlzLCBuZXdfc2l6ZSk7CisgIGNkLnNldF9ub19hY3Rpb24oKTsKKworICB7CisgICAgY29uZF9kdG9yPHNpemVfdHlwZT4gY2QxKG1fYV92YWx1ZXMsIG1fZW5kX2l0LCBtX3NpemUpOworICB9CisKKyAgbV9hX3ZhbHVlcyA9IGFfbmV3X3ZhbHVlczsKKyAgbV9zaXplID0gbmV3X3NpemU7CisgIG1fZW5kX2l0ID0gdGFyZ2V0X2l0OworICB1cGRhdGUobm9kZV9iZWdpbigpLCAobm9kZV91cGRhdGUqKXRoaXMpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIG51bV92YWxfZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0PgorSXQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2ltcChJdCBpdCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGlmIChpdCA9PSBlbmQoKSkKKyAgICByZXR1cm4gZW5kKCk7CisKKyAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhQQl9EU19WMkYoKml0KSkKKworI2lmZGVmIFBCX0RTX1JFR1JFU1NJT04KKyAgICB0eXBlbmFtZSBfQWxsb2M6Omdyb3VwX2FkanVzdG9yIGFkanVzdChtX3NpemUpOworI2VuZGlmCisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fc2l6ZSA+IDApOworICB2YWx1ZV92ZWN0b3IgYV92YWx1ZXMgPSBzX3ZhbHVlX2FsbG9jLmFsbG9jYXRlKG1fc2l6ZSAtIDEpOworICBpdGVyYXRvciBzb3VyY2VfaXQgPSBiZWdpbigpOworICBpdGVyYXRvciBzb3VyY2VfZW5kX2l0ID0gZW5kKCk7CisgIGl0ZXJhdG9yIHRhcmdldF9pdCA9IGFfdmFsdWVzOworICBpdGVyYXRvciByZXRfaXQgPSBlbmQoKTsKKworICBjb25kX2R0b3I8c2l6ZV90eXBlPiBjZChhX3ZhbHVlcywgdGFyZ2V0X2l0LCBtX3NpemUgLSAxKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKHNpemVfdHlwZSBjbnQgPSAwOykKKworICB3aGlsZSAoc291cmNlX2l0ICE9IHNvdXJjZV9lbmRfaXQpCisgICAgeworICAgICAgaWYgKHNvdXJjZV9pdCAhPSBpdCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19PTkxZKCsrY250OykKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChjbnQgIT0gbV9zaXplKTsKKwkgIG5ldyAoY29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KHRhcmdldF9pdCkpKQorCSAgICAgIHZhbHVlX3R5cGUoKnNvdXJjZV9pdCk7CisKKwkgICsrdGFyZ2V0X2l0OworCX0KKyAgICAgIGVsc2UKKwlyZXRfaXQgPSB0YXJnZXRfaXQ7CisgICAgKytzb3VyY2VfaXQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3NpemUgPiAwKTsKKyAgcmVhbGxvY2F0ZV9tZXRhZGF0YSgobm9kZV91cGRhdGUqKXRoaXMsIG1fc2l6ZSAtIDEpOworICBjZC5zZXRfbm9fYWN0aW9uKCk7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6ZXJhc2VfZXhpc3RpbmcoUEJfRFNfVjJGKCppdCkpOykKKyAgeworICAgIGNvbmRfZHRvcjxzaXplX3R5cGU+IGNkMShtX2FfdmFsdWVzLCBtX2VuZF9pdCwgbV9zaXplKTsKKyAgfQorCisgIG1fYV92YWx1ZXMgPSBhX3ZhbHVlczsKKyAgLS1tX3NpemU7CisgIG1fZW5kX2l0ID0gbV9hX3ZhbHVlcyArIG1fc2l6ZTsKKyAgdXBkYXRlKG5vZGVfYmVnaW4oKSwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiBJdChyZXRfaXQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2Uoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgcG9pbnRfaXRlcmF0b3IgaXQgPSBmaW5kKHJfa2V5KTsKKyAgaWYgKGl0ID09IGVuZCgpKQorICAgIHJldHVybiBmYWxzZTsKKyAgZXJhc2UoaXQpOworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vaW5mb19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vaW5mb19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTgyMjhlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNjAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgb3ZfdHJlZV9tYXBfL2luZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBvdl90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NpemUoKSBjb25zdAoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIG1fc2l6ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CittYXhfc2l6ZSgpIGNvbnN0Cit7IHJldHVybiBzX3ZhbHVlX2FsbG9jLm1heF9zaXplKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlbXB0eSgpIGNvbnN0Cit7IHJldHVybiBzaXplKCkgPT0gMDsgfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWY3OTk1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw2MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBvdl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlYWxsb2NhdGVfbWV0YWRhdGEobnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyLCBzaXplX3R5cGUpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlXz4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlYWxsb2NhdGVfbWV0YWRhdGEoTm9kZV9VcGRhdGVfKiAsIHNpemVfdHlwZSBuZXdfc2l6ZSkKK3sKKyAgbWV0YWRhdGFfcG9pbnRlciBhX25ld19tZXRhZGF0YV92ZWMgPShuZXdfc2l6ZSA9PSAwKSA/IDAgOiBzX21ldGFkYXRhX2FsbG9jLmFsbG9jYXRlKG5ld19zaXplKTsKKworICBpZiAobV9hX21ldGFkYXRhICE9IDApCisgICAgeworICAgICAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKKwltX2FfbWV0YWRhdGFbaV0ufm1ldGFkYXRhX3R5cGUoKTsKKyAgICAgIHNfbWV0YWRhdGFfYWxsb2MuZGVhbGxvY2F0ZShtX2FfbWV0YWRhdGEsIG1fc2l6ZSk7CisgICAgfQorICBzdGQ6OnN3YXAobV9hX21ldGFkYXRhLCBhX25ld19tZXRhZGF0YV92ZWMpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYTZhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwMyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBvdl90cmVlX21hcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm9kZV9iZWdpbigpIGNvbnN0Cit7IHJldHVybiBQQl9EU19ub2RlX2JlZ2luX2ltcCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfY29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfZW5kKCkgY29uc3QKK3sgcmV0dXJuIFBCX0RTX25vZGVfZW5kX2ltcCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfYmVnaW4oKQoreyByZXR1cm4gUEJfRFNfbm9kZV9iZWdpbl9pbXAoKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2VuZCgpCit7IHJldHVybiBQQl9EU19ub2RlX2VuZF9pbXAoKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19ub2RlX2JlZ2luX2ltcCgpIGNvbnN0Cit7CisgIHJldHVybiBub2RlX2NvbnN0X2l0ZXJhdG9yKGNvbnN0X2Nhc3Q8cG9pbnRlcj4obWlkX3BvaW50ZXIoYmVnaW4oKSwgZW5kKCkpKSwKKwkJCSAgICAgIGNvbnN0X2Nhc3Q8cG9pbnRlcj4oYmVnaW4oKSksCisJCQkgICAgICBjb25zdF9jYXN0PHBvaW50ZXI+KGVuZCgpKSwobV9hX21ldGFkYXRhID09IDApPworCQkJICAgICAgMCA6CisJCQkgICAgICBtaWRfcG9pbnRlcihtX2FfbWV0YWRhdGEsIG1fYV9tZXRhZGF0YSArIG1fc2l6ZSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19ub2RlX2VuZF9pbXAoKSBjb25zdAoreworICByZXR1cm4gbm9kZV9jb25zdF9pdGVyYXRvcihlbmQoKSwgZW5kKCksIGVuZCgpLAorCQkgICAgIChtX2FfbWV0YWRhdGEgPT0gMCkgPyAwIDogbV9hX21ldGFkYXRhICsgbV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfbm9kZV9iZWdpbl9pbXAoKQoreworICByZXR1cm4gbm9kZV9pdGVyYXRvcihtaWRfcG9pbnRlcihiZWdpbigpLCBlbmQoKSksIGJlZ2luKCksIGVuZCgpLAorCQkgICAgICAgKG1fYV9tZXRhZGF0YSA9PSAwKSA/IDAgOiBtaWRfcG9pbnRlcihtX2FfbWV0YWRhdGEsIG1fYV9tZXRhZGF0YSArIG1fc2l6ZSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19ub2RlX2VuZF9pbXAoKQoreworICByZXR1cm4gbm9kZV9pdGVyYXRvcihlbmQoKSwgZW5kKCksCisJCSAgZW5kKCksKG1fYV9tZXRhZGF0YSA9PSAwKSA/IDAgOiBtX2FfbWV0YWRhdGEgKyBtX3NpemUpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL25vZGVfaXRlcmF0b3JzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vbm9kZV9pdGVyYXRvcnMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODQ1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL25vZGVfaXRlcmF0b3JzLmhwcApAQCAtMCwwICsxLDI5MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBvdl90cmVlX21hcF8vbm9kZV9pdGVyYXRvcnMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworI2lmbmRlZiBQQl9EU19PVl9UUkVFX05PREVfSVRFUkFUT1JTX0hQUAorI2RlZmluZSBQQl9EU19PVl9UUkVFX05PREVfSVRFUkFUT1JTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX09WX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DX0RFQwlcCisgICAgb3ZfdHJlZV9ub2RlX2NvbnN0X2l0XzxWYWx1ZV9UeXBlLCBNZXRhZGF0YV9UeXBlLCBfQWxsb2M+CisKKyAgICAvLy8gQ29uc3Qgbm9kZSByZWZlcmVuY2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVfVHlwZSwgdHlwZW5hbWUgTWV0YWRhdGFfVHlwZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIG92X3RyZWVfbm9kZV9jb25zdF9pdF8KKyAgICB7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIFZhbHVlX1R5cGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8CisJVmFsdWVfVHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKwlNZXRhZGF0YV9UeXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIGNvbnN0X21ldGFkYXRhX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgUEJfRFNfT1ZfVFJFRV9DT05TVF9OT0RFX0lURVJBVE9SX0NfREVDIHRoaXNfdHlwZTsKKworICAgIHByb3RlY3RlZDoKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyPgorICAgICAgaW5saW5lIHN0YXRpYyBQdHIKKyAgICAgIG1pZF9wb2ludGVyKFB0ciBwX2JlZ2luLCBQdHIgcF9lbmQpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfZW5kID49IHBfYmVnaW4pOworCXJldHVybiAocF9iZWdpbiArIChwX2VuZCAtIHBfYmVnaW4pIC8gMik7CisgICAgICB9CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl9kaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKwlWYWx1ZV9UeXBlPjo6b3RoZXI6OmNvbnN0X3BvaW50ZXIKKyAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPAorCXR5cGVuYW1lIHJlbW92ZV9jb25zdDwKKwlWYWx1ZV9UeXBlPjo6dHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICByZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPAorCXR5cGVuYW1lIHJlbW92ZV9jb25zdDwKKwlWYWx1ZV9UeXBlPjo6dHlwZT46Om90aGVyOjpjb25zdF9wb2ludGVyCisgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgTWV0YWRhdGFfVHlwZSBtZXRhZGF0YV90eXBlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKwltZXRhZGF0YV90eXBlPjo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQorICAgICAgbWV0YWRhdGFfY29uc3RfcmVmZXJlbmNlOworCisgICAgcHVibGljOgorICAgICAgaW5saW5lCisgICAgICBvdl90cmVlX25vZGVfY29uc3RfaXRfKGNvbnN0X3BvaW50ZXIgcF9uZCA9IDAsICBjb25zdF9wb2ludGVyIHBfYmVnaW5fbmQgPSAwLCAgY29uc3RfcG9pbnRlciBwX2VuZF9uZCA9IDAsICBjb25zdF9tZXRhZGF0YV9wb2ludGVyIHBfbWV0YWRhdGEgPSAwKSA6IG1fcF92YWx1ZShjb25zdF9jYXN0PHBvaW50ZXI+KHBfbmQpKSwgbV9wX2JlZ2luX3ZhbHVlKGNvbnN0X2Nhc3Q8cG9pbnRlcj4ocF9iZWdpbl9uZCkpLCBtX3BfZW5kX3ZhbHVlKGNvbnN0X2Nhc3Q8cG9pbnRlcj4ocF9lbmRfbmQpKSwgbV9wX21ldGFkYXRhKHBfbWV0YWRhdGEpCisgICAgICB7IH0KKworICAgICAgaW5saW5lIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF92YWx1ZTsgfQorCisgICAgICBpbmxpbmUgbWV0YWRhdGFfY29uc3RfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKSBjb25zdAorICAgICAgeworCWVudW0KKwkgIHsKKwkgICAgaGFzX21ldGFkYXRhID0gIWlzX3NhbWU8TWV0YWRhdGFfVHlwZSwgbnVsbF90eXBlPjo6dmFsdWUKKwkgIH07CisKKwlQQl9EU19TVEFUSUNfQVNTRVJUKHNob3VsZF9oYXZlX21ldGFkYXRhLCBoYXNfbWV0YWRhdGEpOworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbWV0YWRhdGEgIT0gMCk7CisJcmV0dXJuICptX3BfbWV0YWRhdGE7CisgICAgICB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBub2RlIGl0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGVmdCBub2RlLgorICAgICAgaW5saW5lIHRoaXNfdHlwZQorICAgICAgZ2V0X2xfY2hpbGQoKSBjb25zdAorICAgICAgeworCWlmIChtX3BfYmVnaW5fdmFsdWUgPT0gbV9wX3ZhbHVlKQorCSAgcmV0dXJuICh0aGlzX3R5cGUobV9wX2JlZ2luX3ZhbHVlLCBtX3BfYmVnaW5fdmFsdWUsIG1fcF9iZWdpbl92YWx1ZSkpOworCisJY29uc3RfbWV0YWRhdGFfcG9pbnRlciBwX2JlZ2luX21ldGFkYXRhID0KKwkgIG1fcF9tZXRhZGF0YSAtIChtX3BfdmFsdWUgLSBtX3BfYmVnaW5fdmFsdWUpOworCisJcmV0dXJuICh0aGlzX3R5cGUobWlkX3BvaW50ZXIobV9wX2JlZ2luX3ZhbHVlLCBtX3BfdmFsdWUpLAorCQkJICBtX3BfYmVnaW5fdmFsdWUsCisJCQkgIG1fcF92YWx1ZSwKKwkJCSAgbWlkX3BvaW50ZXIocF9iZWdpbl9tZXRhZGF0YSwgbV9wX21ldGFkYXRhKSkpOworICAgICAgfQorCisgICAgICAvLy8gUmV0dXJucyB0aGUgbm9kZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IG5vZGUuCisgICAgICBpbmxpbmUgdGhpc190eXBlCisgICAgICBnZXRfcl9jaGlsZCgpIGNvbnN0CisgICAgICB7CisJaWYgKG1fcF92YWx1ZSA9PSBtX3BfZW5kX3ZhbHVlKQorCSAgcmV0dXJuICh0aGlzX3R5cGUobV9wX2VuZF92YWx1ZSwgbV9wX2VuZF92YWx1ZSwgbV9wX2VuZF92YWx1ZSkpOworCisJY29uc3RfbWV0YWRhdGFfcG9pbnRlciBwX2VuZF9tZXRhZGF0YSA9CisJICBtX3BfbWV0YWRhdGEgKyAobV9wX2VuZF92YWx1ZSAtIG1fcF92YWx1ZSk7CisKKwlyZXR1cm4gKHRoaXNfdHlwZShtaWRfcG9pbnRlcihtX3BfdmFsdWUgKyAxLCBtX3BfZW5kX3ZhbHVlKSwKKwkJCSAgbV9wX3ZhbHVlICsgMSwKKwkJCSAgbV9wX2VuZF92YWx1ZSwobV9wX21ldGFkYXRhID09IDApID8KKwkJCSAgMCA6IG1pZF9wb2ludGVyKG1fcF9tZXRhZGF0YSArIDEsIHBfZW5kX21ldGFkYXRhKSkpOworICAgICAgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCB0aGlzX3R5cGUmIG90aGVyKSBjb25zdAorICAgICAgeworCWNvbnN0IGJvb2wgaXNfZW5kID0gbV9wX2JlZ2luX3ZhbHVlID09IG1fcF9lbmRfdmFsdWU7CisJY29uc3QgYm9vbCBpc19vdGhlcl9lbmQgPSBvdGhlci5tX3BfYmVnaW5fdmFsdWUgPT0gb3RoZXIubV9wX2VuZF92YWx1ZTsKKworCWlmIChpc19lbmQpCisJICByZXR1cm4gKGlzX290aGVyX2VuZCk7CisKKwlpZiAoaXNfb3RoZXJfZW5kKQorCSAgcmV0dXJuIChpc19lbmQpOworCisJcmV0dXJuIG1fcF92YWx1ZSA9PSBvdGhlci5tX3BfdmFsdWU7CisgICAgICB9CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IHRoaXNfdHlwZSYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIHBvaW50ZXIgbV9wX3ZhbHVlOworICAgICAgcG9pbnRlciBtX3BfYmVnaW5fdmFsdWU7CisgICAgICBwb2ludGVyIG1fcF9lbmRfdmFsdWU7CisKKyAgICAgIGNvbnN0X21ldGFkYXRhX3BvaW50ZXIgbV9wX21ldGFkYXRhOworICAgIH07CisKKyNkZWZpbmUgUEJfRFNfT1ZfVFJFRV9OT0RFX0lURVJBVE9SX0NfREVDIFwKKyAgICBvdl90cmVlX25vZGVfaXRfPFZhbHVlX1R5cGUsIE1ldGFkYXRhX1R5cGUsIF9BbGxvYz4KKworICAgIC8vLyBOb2RlIHJlZmVyZW5jZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBNZXRhZGF0YV9UeXBlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3Mgb3ZfdHJlZV9ub2RlX2l0XyA6IHB1YmxpYyBQQl9EU19PVl9UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfT1ZfVFJFRV9OT0RFX0lURVJBVE9SX0NfREVDIHRoaXNfdHlwZTsKKworICAgICAgdHlwZWRlZiBQQl9EU19PVl9UUkVFX0NPTlNUX05PREVfSVRFUkFUT1JfQ19ERUMgYmFzZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRlciBwb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X21ldGFkYXRhX3BvaW50ZXIKKyAgICAgIGNvbnN0X21ldGFkYXRhX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHRyaXZpYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICB0eXBlZGVmIHRyaXZpYWxfaXRlcmF0b3JfZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8CisJVmFsdWVfVHlwZT46Om90aGVyOjpwb2ludGVyCisgICAgICB2YWx1ZV90eXBlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKwl0eXBlbmFtZSByZW1vdmVfY29uc3Q8CisJVmFsdWVfVHlwZT46OnR5cGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKwl0eXBlbmFtZSByZW1vdmVfY29uc3Q8CisJVmFsdWVfVHlwZT46OnR5cGU+OjpvdGhlcjo6cG9pbnRlcgorICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICBpbmxpbmUKKyAgICAgIG92X3RyZWVfbm9kZV9pdF8oY29uc3RfcG9pbnRlciBwX25kID0gMCwgIGNvbnN0X3BvaW50ZXIgcF9iZWdpbl9uZCA9IDAsICBjb25zdF9wb2ludGVyIHBfZW5kX25kID0gMCwgIGNvbnN0X21ldGFkYXRhX3BvaW50ZXIgcF9tZXRhZGF0YSA9IDApIDogYmFzZV90eXBlKHBfbmQsICBwX2JlZ2luX25kLCAgcF9lbmRfbmQsICBwX21ldGFkYXRhKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBBY2Nlc3MuCisgICAgICBpbmxpbmUgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gcmVmZXJlbmNlKGJhc2VfdHlwZTo6bV9wX3ZhbHVlKTsgfQorCisgICAgICAvLy8gUmV0dXJucyB0aGUgbm9kZSByZWZlcmVuY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBsZWZ0IG5vZGUuCisgICAgICBpbmxpbmUgb3ZfdHJlZV9ub2RlX2l0XworICAgICAgZ2V0X2xfY2hpbGQoKSBjb25zdAorICAgICAgeworCWlmIChiYXNlX3R5cGU6Om1fcF9iZWdpbl92YWx1ZSA9PSBiYXNlX3R5cGU6Om1fcF92YWx1ZSkKKwkgIHJldHVybiAodGhpc190eXBlKGJhc2VfdHlwZTo6bV9wX2JlZ2luX3ZhbHVlLCAgYmFzZV90eXBlOjptX3BfYmVnaW5fdmFsdWUsICBiYXNlX3R5cGU6Om1fcF9iZWdpbl92YWx1ZSkpOworCisJY29uc3RfbWV0YWRhdGFfcG9pbnRlciBwX2JlZ2luX21ldGFkYXRhID0KKwkgIGJhc2VfdHlwZTo6bV9wX21ldGFkYXRhIC0gKGJhc2VfdHlwZTo6bV9wX3ZhbHVlIC0gYmFzZV90eXBlOjptX3BfYmVnaW5fdmFsdWUpOworCisJcmV0dXJuICh0aGlzX3R5cGUoYmFzZV90eXBlOjptaWRfcG9pbnRlcihiYXNlX3R5cGU6Om1fcF9iZWdpbl92YWx1ZSwgYmFzZV90eXBlOjptX3BfdmFsdWUpLAorCQkJICBiYXNlX3R5cGU6Om1fcF9iZWdpbl92YWx1ZSwKKwkJCSAgYmFzZV90eXBlOjptX3BfdmFsdWUsCisJCQkgIGJhc2VfdHlwZTo6bWlkX3BvaW50ZXIocF9iZWdpbl9tZXRhZGF0YSwgYmFzZV90eXBlOjptX3BfbWV0YWRhdGEpKSk7CisgICAgICB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSBub2RlIHJlZmVyZW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IG5vZGUuCisgICAgICBpbmxpbmUgb3ZfdHJlZV9ub2RlX2l0XworICAgICAgZ2V0X3JfY2hpbGQoKSBjb25zdAorICAgICAgeworCWlmIChiYXNlX3R5cGU6Om1fcF92YWx1ZSA9PSBiYXNlX3R5cGU6Om1fcF9lbmRfdmFsdWUpCisJICByZXR1cm4gdGhpc190eXBlKGJhc2VfdHlwZTo6bV9wX2VuZF92YWx1ZSwgYmFzZV90eXBlOjptX3BfZW5kX3ZhbHVlLCAgCisJCQkgICBiYXNlX3R5cGU6Om1fcF9lbmRfdmFsdWUpOworCisJY29uc3RfbWV0YWRhdGFfcG9pbnRlciBwX2VuZF9tZXRhZGF0YSA9CisJICBiYXNlX3R5cGU6Om1fcF9tZXRhZGF0YSArIChiYXNlX3R5cGU6Om1fcF9lbmRfdmFsdWUgLSBiYXNlX3R5cGU6Om1fcF92YWx1ZSk7CisKKwlyZXR1cm4gKHRoaXNfdHlwZShiYXNlX3R5cGU6Om1pZF9wb2ludGVyKGJhc2VfdHlwZTo6bV9wX3ZhbHVlICsgMSwgYmFzZV90eXBlOjptX3BfZW5kX3ZhbHVlKSwKKwkJCSAgYmFzZV90eXBlOjptX3BfdmFsdWUgKyAxLAorCQkJICBiYXNlX3R5cGU6Om1fcF9lbmRfdmFsdWUsKGJhc2VfdHlwZTo6bV9wX21ldGFkYXRhID09IDApPworCQkJICAwIDogYmFzZV90eXBlOjptaWRfcG9pbnRlcihiYXNlX3R5cGU6Om1fcF9tZXRhZGF0YSArIDEsIHBfZW5kX21ldGFkYXRhKSkpOworICAgICAgfQorCisgICAgfTsKKworI3VuZGVmIFBCX0RTX09WX1RSRUVfTk9ERV9JVEVSQVRPUl9DX0RFQworI3VuZGVmIFBCX0RTX09WX1RSRUVfQ09OU1RfTk9ERV9JVEVSQVRPUl9DX0RFQworCit9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9vdl90cmVlX21hcF8uaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9vdl90cmVlX21hcF8uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjNlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL292X3RyZWVfbWFwXy5ocHAKQEAgLTAsMCArMSw1NDIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgb3ZfdHJlZV9tYXBfL292X3RyZWVfbWFwXy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBvdl90cmVlLgorICovCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9lcV9mbi9lcV9ieV9sZXNzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVzX3RyYWl0cy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RyZWVfdHJhY2VfYmFzZS5ocHA+CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2RlYnVnX21hcF9iYXNlLmhwcD4KKyNlbmRpZgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyNkZWZpbmUgUEJfRFNfT1ZfVFJFRV9OQU1FIG92X3RyZWVfbWFwCisjZGVmaW5lIFBCX0RTX0NPTlNUX05PREVfSVRFUkFUT1JfTkFNRSBvdl90cmVlX25vZGVfY29uc3RfaXRlcmF0b3JfbWFwCisjZW5kaWYKKworI2lmZGVmIFBCX0RTX0RBVEFfRkFMU0VfSU5ESUNBVE9SCisjZGVmaW5lIFBCX0RTX09WX1RSRUVfTkFNRSBvdl90cmVlX3NldAorI2RlZmluZSBQQl9EU19DT05TVF9OT0RFX0lURVJBVE9SX05BTUUgb3ZfdHJlZV9ub2RlX2NvbnN0X2l0ZXJhdG9yX3NldAorI2VuZGlmCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBDbXBfRm4sIFwKKwkgICAgIHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgIFBCX0RTX09WX1RSRUVfTkFNRTxLZXksIE1hcHBlZCwgQ21wX0ZuLCBOb2RlX0FuZF9JdF9UcmFpdHMsIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19PVl9UUkVFX1RSQUlUU19CQVNFIFwKKyAgICB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIF9BbGxvYywgZmFsc2U+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2RlZmluZSBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyBcCisgICAgZGVidWdfbWFwX2Jhc2U8S2V5LCBlcV9ieV9sZXNzPEtleSwgQ21wX0ZuPiwgXAorICAgICAgIAl0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlPgorI2VuZGlmCisKKyNpZmRlZiBQQl9EU19UUkVFX1RSQUNFCisjZGVmaW5lIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9DX0RFQyBcCisgICAgdHJlZV90cmFjZV9iYXNlPHR5cGVuYW1lIE5vZGVfQW5kX0l0X1RyYWl0czo6bm9kZV9jb25zdF9pdGVyYXRvciwJXAorCQkgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX2l0ZXJhdG9yLAkJXAorCQkgICAgQ21wX0ZuLCBmYWxzZSwgX0FsbG9jPgorI2VuZGlmCisKKyNpZm5kZWYgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUworIyAgZXJyb3IgTWlzc2luZyBkZWZpbml0aW9uCisjZW5kaWYKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgT3JkZXJlZC12ZWN0b3IgdHJlZSBhc3NvY2lhdGl2ZS1jb250YWluZXIuCisgICAgICogIEBpbmdyb3VwIGJyYW5jaC1kZXRhaWwKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgQ21wX0ZuLAorCSAgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgUEJfRFNfT1ZfVFJFRV9OQU1FIDoKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgcHJvdGVjdGVkIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDLAorI2VuZGlmCisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorICAgICAgcHVibGljIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9DX0RFQywKKyNlbmRpZgorICAgICAgcHVibGljIENtcF9GbiwKKyAgICAgIHB1YmxpYyBOb2RlX0FuZF9JdF9UcmFpdHM6Om5vZGVfdXBkYXRlLAorICAgICAgcHVibGljIFBCX0RTX09WX1RSRUVfVFJBSVRTX0JBU0UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfT1ZfVFJFRV9UUkFJVFNfQkFTRQkgICAgICAgCQl0cmFpdHNfYmFzZTsKKyAgICAgIHR5cGVkZWYgTm9kZV9BbmRfSXRfVHJhaXRzCQkJdHJhaXRzX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlPjo6dHlwZSBub25fY29uc3RfdmFsdWVfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxub25fY29uc3RfdmFsdWVfdHlwZT46Om90aGVyIHZhbHVlX2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdmFsdWVfYWxsb2NhdG9yOjpwb2ludGVyIAl2YWx1ZV92ZWN0b3I7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiBQQl9EU19ERUJVR19NQVBfQkFTRV9DX0RFQyAJCWRlYnVnX2Jhc2U7CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX1RSRUVfVFJBQ0UKKyAgICAgIHR5cGVkZWYgUEJfRFNfVFJFRV9UUkFDRV9CQVNFX0NfREVDIAkJdHJhY2VfYmFzZTsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjpwb2ludGVyIAkJbWFwcGVkX3BvaW50ZXJfOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcG9pbnRlciAJbWFwcGVkX2NvbnN0X3BvaW50ZXJfOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjptZXRhZGF0YV90eXBlIAltZXRhZGF0YV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPG1ldGFkYXRhX3R5cGU+OjpvdGhlciBtZXRhZGF0YV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIG1ldGFkYXRhX2FsbG9jYXRvcjo6cG9pbnRlciAJbWV0YWRhdGFfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbWV0YWRhdGFfYWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgbWV0YWRhdGFfY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBtZXRhZGF0YV9hbGxvY2F0b3I6OnJlZmVyZW5jZSAJbWV0YWRhdGFfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIKKyAgICAgIG51bGxfbm9kZV91cGRhdGVfcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgb3ZfdHJlZV90YWcgCQkJCSBjb250YWluZXJfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIF9BbGxvYyAJCQkJCWFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSAJCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgCQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIENtcF9GbiAJCQkJCWNtcF9mbjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3R5cGUgCQlrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9wb2ludGVyIAlrZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9jb25zdF9wb2ludGVyIAlrZXlfY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9yZWZlcmVuY2UgCWtleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfY29uc3RfcmVmZXJlbmNlIGtleV9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfdHlwZSAJbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfcG9pbnRlciAJbWFwcGVkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfY29uc3RfcG9pbnRlciBtYXBwZWRfY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9yZWZlcmVuY2UgCW1hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfY29uc3RfcmVmZXJlbmNlIG1hcHBlZF9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIAkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnBvaW50ZXIgCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnJlZmVyZW5jZSAJCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAJY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIGNvbnN0X3BvaW50ZXIgCQkJCXBvaW50X2NvbnN0X2l0ZXJhdG9yOworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIHR5cGVkZWYgcG9pbnRlciAJCQkJCXBvaW50X2l0ZXJhdG9yOworI2Vsc2UKKyAgICAgIHR5cGVkZWYgcG9pbnRfY29uc3RfaXRlcmF0b3IgCQkJcG9pbnRfaXRlcmF0b3I7CisjZW5kaWYKKworICAgICAgdHlwZWRlZiBwb2ludF9pdGVyYXRvciAJCQkJaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHBvaW50X2NvbnN0X2l0ZXJhdG9yIAkJCWNvbnN0X2l0ZXJhdG9yOworCisgICAgICAvLy8gQ29uZGl0aW9uYWwgZGVzdHJ1Y3Rvci4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyAgICAgICAgY2xhc3MgY29uZF9kdG9yCisgICAgICAgIHsKKwlwdWJsaWM6CisJICBjb25kX2R0b3IodmFsdWVfdmVjdG9yIGFfdmVjLCBpdGVyYXRvciYgcl9sYXN0X2l0LCAKKwkJICAgIFNpemVfVHlwZSB0b3RhbF9zaXplKSAKKwkgIDogbV9hX3ZlYyhhX3ZlYyksIG1fcl9sYXN0X2l0KHJfbGFzdF9pdCksIG1fbWF4X3NpemUodG90YWxfc2l6ZSksCisJICAgIG1fbm9fYWN0aW9uKGZhbHNlKQorCSAgeyB9CisKKwkgIH5jb25kX2R0b3IoKQorCSAgeworCSAgICBpZiAobV9ub19hY3Rpb24pCisJICAgICAgcmV0dXJuOworCSAgICBpdGVyYXRvciBpdCA9IG1fYV92ZWM7CisJICAgIHdoaWxlIChpdCAhPSBtX3JfbGFzdF9pdCkKKwkgICAgICB7CisJCWl0LT5+dmFsdWVfdHlwZSgpOworCQkrK2l0OworCSAgICAgIH0KKwkgICAgCisJICAgIGlmIChtX21heF9zaXplID4gMCkKKwkgICAgICB2YWx1ZV9hbGxvY2F0b3IoKS5kZWFsbG9jYXRlKG1fYV92ZWMsIG1fbWF4X3NpemUpOworCSAgfQorCisJICBpbmxpbmUgdm9pZAorCSAgc2V0X25vX2FjdGlvbigpCisJICB7IG1fbm9fYWN0aW9uID0gdHJ1ZTsgfQorCSAgCisJcHJvdGVjdGVkOgorCSAgdmFsdWVfdmVjdG9yIAkJbV9hX3ZlYzsKKwkgIGl0ZXJhdG9yJiAJCW1fcl9sYXN0X2l0OworCSAgY29uc3QgU2l6ZV9UeXBlIAltX21heF9zaXplOworCSAgYm9vbCAJCQltX25vX2FjdGlvbjsKKyAgICAgICB9OworICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpub2RlX3VwZGF0ZSAJbm9kZV91cGRhdGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpub2RlX2l0ZXJhdG9yIAlub2RlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6bm9kZV9jb25zdF9pdGVyYXRvcglub2RlX2NvbnN0X2l0ZXJhdG9yOworCisKKyAgICAgIFBCX0RTX09WX1RSRUVfTkFNRSgpOworCisgICAgICBQQl9EU19PVl9UUkVFX05BTUUoY29uc3QgQ21wX0ZuJik7CisKKyAgICAgIFBCX0RTX09WX1RSRUVfTkFNRShjb25zdCBDbXBfRm4mLCBjb25zdCBub2RlX3VwZGF0ZSYpOworCisgICAgICBQQl9EU19PVl9UUkVFX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgflBCX0RTX09WX1RSRUVfTkFNRSgpOworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX3JhbmdlKEl0LCBJdCk7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBlbXB0eSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Q7CisKKyAgICAgIENtcF9GbiYKKyAgICAgIGdldF9jbXBfZm4oKTsKKworICAgICAgY29uc3QgQ21wX0ZuJgorICAgICAgZ2V0X2NtcF9mbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQorICAgICAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKwlQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKwlwb2ludF9pdGVyYXRvciBpdCA9IGxvd2VyX2JvdW5kKHJfa2V5KTsKKwlpZiAoaXQgIT0gZW5kKCkgJiYgIUNtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKCppdCkpKQorCSAgeworCSAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKHJfa2V5KQorCSAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKwkgICAgIHJldHVybiBpdC0+c2Vjb25kOworCSAgfQorCXJldHVybiBpbnNlcnRfbmV3X3ZhbChpdCwgc3RkOjptYWtlX3BhaXIocl9rZXksIG1hcHBlZF90eXBlKCkpKS0+c2Vjb25kOworI2Vsc2UKKwlpbnNlcnQocl9rZXkpOworCXJldHVybiB0cmFpdHNfYmFzZTo6c19udWxsX3R5cGU7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgaW5saW5lIHN0ZDo6cGFpcjxwb2ludF9pdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdF9yZWZlcmVuY2Ugcl92YWx1ZSkKKyAgICAgIHsKKwlQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKwlrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5ID0gUEJfRFNfVjJGKHJfdmFsdWUpOworCXBvaW50X2l0ZXJhdG9yIGl0ID0gbG93ZXJfYm91bmQocl9rZXkpOworCisJaWYgKGl0ICE9IGVuZCgpJiYgICFDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRigqaXQpKSkKKwkgIHsKKwkgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisJICAgIFBCX0RTX0NIRUNLX0tFWV9FWElTVFMocl9rZXkpCisJICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdCwgZmFsc2UpOworCSAgfQorCisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluc2VydF9uZXdfdmFsKGl0LCByX3ZhbHVlKSwgdHJ1ZSk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBwb2ludF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKKyAgICAgIHsKKwlwb2ludGVyIGl0ID0gbV9hX3ZhbHVlczsKKwlwb2ludGVyIGVfaXQgPSBtX2FfdmFsdWVzICsgbV9zaXplOworCXdoaWxlIChpdCAhPSBlX2l0KQorCSAgeworCSAgICBwb2ludGVyIG1pZF9pdCA9IGl0ICsgKChlX2l0IC0gaXQpID4+IDEpOworCSAgICBpZiAoY21wX2ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRigqbWlkX2l0KSwgcl9rZXkpKQorCSAgICAgIGl0ID0gKyttaWRfaXQ7CisJICAgIGVsc2UKKwkgICAgICBlX2l0ID0gbWlkX2l0OworCSAgfQorCXJldHVybiBpdDsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50X2NvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyYgPigqdGhpcykubG93ZXJfYm91bmQocl9rZXkpOyB9CisKKyAgICAgIGlubGluZSBwb2ludF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKKyAgICAgIHsKKwlpdGVyYXRvciBwb3RfaXQgPSBsb3dlcl9ib3VuZChyX2tleSk7CisJaWYgKHBvdF9pdCAhPSBlbmQoKSAmJiAhQ21wX0ZuOjpvcGVyYXRvcigpKHJfa2V5LCBQQl9EU19WMkYoKnBvdF9pdCkpKQorCSAgeworCSAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKHJfa2V5KQorCSAgICByZXR1cm4gKytwb3RfaXQ7CisJICB9CisKKwlQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisJcmV0dXJuIHBvdF9pdDsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHBvaW50X2NvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyY+KCp0aGlzKS51cHBlcl9ib3VuZChyX2tleSk7IH0KKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBmaW5kKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCisgICAgICB7CisJUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisJaXRlcmF0b3IgcG90X2l0ID0gbG93ZXJfYm91bmQocl9rZXkpOworCWlmIChwb3RfaXQgIT0gZW5kKCkgJiYgIUNtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKCpwb3RfaXQpKSkKKwkgIHsKKwkgICAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhyX2tleSkKKwkgICAgcmV0dXJuIHBvdF9pdDsKKwkgIH0KKworCVBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChyX2tleSkKKwlyZXR1cm4gZW5kKCk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBwb2ludF9jb25zdF9pdGVyYXRvcgorICAgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gKGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMmPigqdGhpcykuZmluZChyX2tleSkpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGVyYXNlKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgaXQpCisgICAgICB7IHJldHVybiBlcmFzZV9pbXA8aXRlcmF0b3I+KGl0KTsgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpOworCisgICAgICB2b2lkCisgICAgICBqb2luKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0KGtleV9jb25zdF9yZWZlcmVuY2UsIFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gbV9hX3ZhbHVlczsgfQorCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fYV92YWx1ZXM7IH0KKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gbV9lbmRfaXQ7IH0KKworICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9lbmRfaXQ7IH0KKworICAgICAgLy8vIFJldHVybnMgYSBjb25zdCBub2RlX2l0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vZGUgYXQgdGhlCisgICAgICAvLy8gcm9vdCBvZiB0aGUgdHJlZS4KKyAgICAgIGlubGluZSBub2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgICBub2RlX2JlZ2luKCkgY29uc3Q7CisKKyAgICAgIC8vLyBSZXR1cm5zIGEgbm9kZV9pdGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBub2RlIGF0IHRoZQorICAgICAgLy8vIHJvb3Qgb2YgdGhlIHRyZWUuCisgICAgICBpbmxpbmUgbm9kZV9pdGVyYXRvcgorICAgICAgbm9kZV9iZWdpbigpOworCisgICAgICAvLy8gUmV0dXJucyBhIGNvbnN0IG5vZGVfaXRlcmF0b3IgY29ycmVzcG9uZGluZyB0byBhIG5vZGUganVzdAorICAgICAgLy8vIGFmdGVyIGEgbGVhZiBvZiB0aGUgdHJlZS4KKyAgICAgIGlubGluZSBub2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgICBub2RlX2VuZCgpIGNvbnN0OworCisgICAgICAvLy8gUmV0dXJucyBhIG5vZGVfaXRlcmF0b3IgY29ycmVzcG9uZGluZyB0byBhIG5vZGUganVzdAorICAgICAgLy8vIGFmdGVyIGEgbGVhZiBvZiB0aGUgdHJlZS4KKyAgICAgIGlubGluZSBub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2VuZCgpOworCisgICAgcHJpdmF0ZToKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHVwZGF0ZShub2RlX2l0ZXJhdG9yLCBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZT4KKyAgICAgIHZvaWQKKyAgICAgIHVwZGF0ZShub2RlX2l0ZXJhdG9yLCBOb2RlX1VwZGF0ZSopOworCisgICAgICB2b2lkCisgICAgICByZWFsbG9jYXRlX21ldGFkYXRhKG51bGxfbm9kZV91cGRhdGVfcG9pbnRlciwgc2l6ZV90eXBlKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9VcGRhdGVfPgorICAgICAgdm9pZAorICAgICAgcmVhbGxvY2F0ZV9tZXRhZGF0YShOb2RlX1VwZGF0ZV8qLCBzaXplX3R5cGUpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICAgIHZvaWQKKyAgICAgIGNvcHlfZnJvbV9vcmRlcmVkX3JhbmdlKEl0LCBJdCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHZhbHVlX3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fb3JkZXJlZF9yYW5nZShJdCwgSXQsIEl0LCBJdCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFB0cj4KKyAgICAgIGlubGluZSBzdGF0aWMgUHRyCisgICAgICBtaWRfcG9pbnRlcihQdHIgcF9iZWdpbiwgUHRyIHBfZW5kKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2VuZCA+PSBwX2JlZ2luKTsKKwlyZXR1cm4gKHBfYmVnaW4gKyAocF9lbmQgLSBwX2JlZ2luKSAvIDIpOworICAgICAgfQorCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGluc2VydF9uZXdfdmFsKGl0ZXJhdG9yIGl0LCBjb25zdF9yZWZlcmVuY2Ugcl92YWx1ZSkKKyAgICAgIHsKKyNpZmRlZiBQQl9EU19SRUdSRVNTSU9OCisJdHlwZW5hbWUgX0FsbG9jOjpncm91cF9hZGp1c3RvciBhZGp1c3QobV9zaXplKTsKKyNlbmRpZgorCisJUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKFBCX0RTX1YyRihyX3ZhbHVlKSkKKworCXZhbHVlX3ZlY3RvciBhX3ZhbHVlcyA9IHNfdmFsdWVfYWxsb2MuYWxsb2NhdGUobV9zaXplICsgMSk7CisKKwlpdGVyYXRvciBzb3VyY2VfaXQgPSBiZWdpbigpOworCWl0ZXJhdG9yIHNvdXJjZV9lbmRfaXQgPSBlbmQoKTsKKwlpdGVyYXRvciB0YXJnZXRfaXQgPSBhX3ZhbHVlczsKKwlpdGVyYXRvciByZXRfaXQ7CisKKwljb25kX2R0b3I8c2l6ZV90eXBlPiBjZChhX3ZhbHVlcywgdGFyZ2V0X2l0LCBtX3NpemUgKyAxKTsKKwl3aGlsZSAoc291cmNlX2l0ICE9IGl0KQorCSAgeworCSAgICBuZXcgKGNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPih0YXJnZXRfaXQpKSkKKwkgICAgICB2YWx1ZV90eXBlKCpzb3VyY2VfaXQrKyk7CisJICAgICsrdGFyZ2V0X2l0OworCSAgfQorCisJbmV3IChjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4ocmV0X2l0ID0gdGFyZ2V0X2l0KSkpCisJICB2YWx1ZV90eXBlKHJfdmFsdWUpOworCSsrdGFyZ2V0X2l0OworCisJd2hpbGUgKHNvdXJjZV9pdCAhPSBzb3VyY2VfZW5kX2l0KQorCSAgeworCSAgICBuZXcgKGNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPih0YXJnZXRfaXQpKSkKKwkgICAgICB2YWx1ZV90eXBlKCpzb3VyY2VfaXQrKyk7CisJICAgICsrdGFyZ2V0X2l0OworCSAgfQorCisJcmVhbGxvY2F0ZV9tZXRhZGF0YSgobm9kZV91cGRhdGUqKXRoaXMsIG1fc2l6ZSArIDEpOworCWNkLnNldF9ub19hY3Rpb24oKTsKKwlpZiAobV9zaXplICE9IDApCisJICB7CisJICAgIGNvbmRfZHRvcjxzaXplX3R5cGU+IGNkMShtX2FfdmFsdWVzLCBtX2VuZF9pdCwgbV9zaXplKTsKKwkgIH0KKworCSsrbV9zaXplOworCW1fYV92YWx1ZXMgPSBhX3ZhbHVlczsKKwltX2VuZF9pdCA9IG1fYV92YWx1ZXMgKyBtX3NpemU7CisJX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KFBCX0RTX1YyRihyX3ZhbHVlKSkpOworCXVwZGF0ZShub2RlX2JlZ2luKCksIChub2RlX3VwZGF0ZSogKXRoaXMpOworCVBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorCXJldHVybiByZXRfaXQ7CisgICAgICB9CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfaXRlcmF0b3JzKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgSXQKKyAgICAgIGVyYXNlX2ltcChJdCk7CisKKyAgICAgIGlubGluZSBub2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgICBQQl9EU19ub2RlX2JlZ2luX2ltcCgpIGNvbnN0OworCisgICAgICBpbmxpbmUgbm9kZV9jb25zdF9pdGVyYXRvcgorICAgICAgUEJfRFNfbm9kZV9lbmRfaW1wKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBub2RlX2l0ZXJhdG9yCisgICAgICBQQl9EU19ub2RlX2JlZ2luX2ltcCgpOworCisgICAgICBpbmxpbmUgbm9kZV9pdGVyYXRvcgorICAgICAgUEJfRFNfbm9kZV9lbmRfaW1wKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgc3RhdGljIHZhbHVlX2FsbG9jYXRvciAJc192YWx1ZV9hbGxvYzsKKyAgICAgIHN0YXRpYyBtZXRhZGF0YV9hbGxvY2F0b3Igc19tZXRhZGF0YV9hbGxvYzsKKworICAgICAgdmFsdWVfdmVjdG9yIAkJbV9hX3ZhbHVlczsKKyAgICAgIG1ldGFkYXRhX3BvaW50ZXIgCQltX2FfbWV0YWRhdGE7CisgICAgICBpdGVyYXRvciAJCQltX2VuZF9pdDsKKyAgICAgIHNpemVfdHlwZSAJCW1fc2l6ZTsKKyAgICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5fc2VhcmNoX3RyZWVfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfT1ZfVFJFRV9OQU1FCisjdW5kZWYgUEJfRFNfT1ZfVFJFRV9UUkFJVFNfQkFTRQorI3VuZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDCisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorI3VuZGVmIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9DX0RFQworI2VuZGlmCisjdW5kZWYgUEJfRFNfQ09OU1RfTk9ERV9JVEVSQVRPUl9OQU1FCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTkwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBvdl90cmVlX21hcF8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIG92X3RyZWUuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK0NtcF9GbiYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfY21wX2ZuKCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBDbXBfRm4mIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2NtcF9mbigpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MmM1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvb3ZfdHJlZV9tYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgb3ZfdHJlZV9tYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBvdl90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorCisgIGlmIChtX3NpemUgPT0gMCkKKyAgICB7CisgICAgICBvdGhlci5jbGVhcigpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKHJfa2V5LCBQQl9EU19WMkYoKmJlZ2luKCkpKSkKKyAgICB7CisgICAgICB2YWx1ZV9zd2FwKG90aGVyKTsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKCooZW5kKCkgLSAxKSkpKQorICAgIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKG1fc2l6ZSA9PSAxKQorICAgIHsKKyAgICAgIHZhbHVlX3N3YXAob3RoZXIpOworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm47CisgICAgfQorCisgIGl0ZXJhdG9yIGl0ID0gdXBwZXJfYm91bmQocl9rZXkpOworICBQQl9EU19DTEFTU19DX0RFQyBuZXdfb3RoZXIob3RoZXIsIG90aGVyKTsKKyAgbmV3X290aGVyLmNvcHlfZnJvbV9vcmRlcmVkX3JhbmdlKGl0LCBlbmQoKSk7CisgIFBCX0RTX0NMQVNTX0NfREVDIG5ld190aGlzKCp0aGlzLCAqdGhpcyk7CisgIG5ld190aGlzLmNvcHlfZnJvbV9vcmRlcmVkX3JhbmdlKGJlZ2luKCksIGl0KTsKKworICAvLyBObyBleGNlcHRpb25zIGZyb20gdGhpcyBwb2ludC4KKyAgb3RoZXIudXBkYXRlKG90aGVyLm5vZGVfYmVnaW4oKSwgKG5vZGVfdXBkYXRlKikoJm90aGVyKSk7CisgIHVwZGF0ZShub2RlX2JlZ2luKCksIChub2RlX3VwZGF0ZSopdGhpcyk7CisgIG90aGVyLnZhbHVlX3N3YXAobmV3X290aGVyKTsKKyAgdmFsdWVfc3dhcChuZXdfdGhpcyk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgaWYgKG90aGVyLm1fc2l6ZSA9PSAwKQorICAgIHJldHVybjsKKworICBpZiAobV9zaXplID09IDApCisgICAgeworICAgICAgdmFsdWVfc3dhcChvdGhlcik7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgY29uc3QgYm9vbCBncmVhdGVyID0gQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRigqKGVuZCgpIC0gMSkpLAorCQkJCQkgIFBCX0RTX1YyRigqb3RoZXIuYmVnaW4oKSkpOworCisgIGNvbnN0IGJvb2wgbGVzc2VyID0gQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRigqKG90aGVyLmVuZCgpIC0gMSkpLAorCQkJCQkgUEJfRFNfVjJGKCpiZWdpbigpKSk7CisKKyAgaWYgKCFncmVhdGVyICYmICFsZXNzZXIpCisgICAgX190aHJvd19qb2luX2Vycm9yKCk7CisKKyAgUEJfRFNfQ0xBU1NfQ19ERUMgbmV3X3RoaXMoKnRoaXMsICp0aGlzKTsKKworICBpZiAoZ3JlYXRlcikKKyAgICBuZXdfdGhpcy5jb3B5X2Zyb21fb3JkZXJlZF9yYW5nZShiZWdpbigpLCBlbmQoKSwKKwkJCQkgICAgIG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpKTsKKyAgZWxzZQorICAgIG5ld190aGlzLmNvcHlfZnJvbV9vcmRlcmVkX3JhbmdlKG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLAorCQkJCSAgICAgYmVnaW4oKSwgZW5kKCkpOworCisgIC8vIE5vIGV4Y2VwdGlvbnMgZnJvbSB0aGlzIHBvaW50LgorICB2YWx1ZV9zd2FwKG5ld190aGlzKTsKKyAgb3RoZXIuY2xlYXIoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vdHJhaXRzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9vdl90cmVlX21hcF8vdHJhaXRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBjMGNjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy90cmFpdHMuaHBwCkBAIC0wLDAgKzEsMTkwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIG92X3RyZWVfbWFwXy90cmFpdHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igb3ZfdHJlZV8uCisgKi8KKworI2lmbmRlZiBQQl9EU19PVl9UUkVFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKyNkZWZpbmUgUEJfRFNfT1ZfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL292X3RyZWVfbWFwXy9ub2RlX2l0ZXJhdG9ycy5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBUcmVlIHRyYWl0cy4KKyAgICAvLy8gQGluZ3JvdXAgdHJhaXRzCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgICAgY2xhc3MgQ21wX0ZuLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ciwKKwkJICAgICAgY2xhc3MgQ21wX0ZuXywKKwkJICAgICAgdHlwZW5hbWUgX0FsbG9jXz4KKyAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdHJlZV90cmFpdHM8CisgICAgICBLZXksCisgICAgICBNYXBwZWQsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIG92X3RyZWVfdGFnLAorICAgICAgX0FsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgdHlwZXNfdHJhaXRzPAorICAgICAgS2V5LAorICAgICAgTWFwcGVkLAorICAgICAgX0FsbG9jLAorICAgICAgZmFsc2U+Ojp2YWx1ZV90eXBlCisgICAgICB2YWx1ZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgdHJlZV9ub2RlX21ldGFkYXRhX2Rpc3BhdGNoPAorICAgICAgS2V5LAorICAgICAgTWFwcGVkLAorICAgICAgQ21wX0ZuLAorICAgICAgTm9kZV9VcGRhdGUsCisgICAgICBfQWxsb2M+Ojp0eXBlCisgICAgICBtZXRhZGF0YV90eXBlOworCisgICAgICAvLy8gVGhpcyBpcyBhbiBpdGVyYXRvciB0byBhbiBpdGVyYXRvcjogaXQgaXRlcmF0ZXMgb3ZlciBub2RlcywKKyAgICAgIC8vLyBhbmQgZGUtcmVmZXJlbmNpbmcgaXQgcmV0dXJucyBvbmUgb2YgdGhlIHRyZWUncyBpdGVyYXRvcnMuCisgICAgICB0eXBlZGVmCisgICAgICBvdl90cmVlX25vZGVfY29uc3RfaXRfPAorCXZhbHVlX3R5cGUsCisJbWV0YWRhdGFfdHlwZSwKKwlfQWxsb2M+CisgICAgICBub2RlX2NvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBvdl90cmVlX25vZGVfaXRfPAorCXZhbHVlX3R5cGUsCisJbWV0YWRhdGFfdHlwZSwKKwlfQWxsb2M+CisgICAgICBub2RlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBOb2RlX1VwZGF0ZTwKKwlub2RlX2NvbnN0X2l0ZXJhdG9yLAorCW5vZGVfaXRlcmF0b3IsCisJQ21wX0ZuLAorCV9BbGxvYz4KKyAgICAgIG5vZGVfdXBkYXRlOworCisgICAgICB0eXBlZGVmCisgICAgICBfX2dudV9wYmRzOjpudWxsX25vZGVfdXBkYXRlPAorCW5vZGVfY29uc3RfaXRlcmF0b3IsCisJbm9kZV9pdGVyYXRvciwKKwlDbXBfRm4sCisJX0FsbG9jPiogCisgICAgICBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXI7CisgICAgfTsKKworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uLgorICAgIC8vLyBAaW5ncm91cCB0cmFpdHMKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICBjbGFzcyBDbXBfRm4sCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsCisJCSAgICAgIGNsYXNzIE5vZGVfSXRyLAorCQkgICAgICBjbGFzcyBDbXBfRm5fLAorCQkgICAgICB0eXBlbmFtZSBfQWxsb2NfPgorICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCB0cmVlX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfdHlwZSwKKyAgICAgIENtcF9GbiwKKyAgICAgIE5vZGVfVXBkYXRlLAorICAgICAgb3ZfdHJlZV90YWcsCisgICAgICBfQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSB0eXBlc190cmFpdHM8CisgICAgICBLZXksCisgICAgICBudWxsX3R5cGUsCisgICAgICBfQWxsb2MsCisgICAgICBmYWxzZT46OnZhbHVlX3R5cGUKKyAgICAgIHZhbHVlX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSB0cmVlX25vZGVfbWV0YWRhdGFfZGlzcGF0Y2g8CisgICAgICBLZXksCisgICAgICBudWxsX3R5cGUsCisgICAgICBDbXBfRm4sCisgICAgICBOb2RlX1VwZGF0ZSwKKyAgICAgIF9BbGxvYz46OnR5cGUKKyAgICAgIG1ldGFkYXRhX3R5cGU7CisKKyAgICAgIC8vLyBUaGlzIGlzIGFuIGl0ZXJhdG9yIHRvIGFuIGl0ZXJhdG9yOiBpdCBpdGVyYXRlcyBvdmVyIG5vZGVzLAorICAgICAgLy8vIGFuZCBkZS1yZWZlcmVuY2luZyBpdCByZXR1cm5zIG9uZSBvZiB0aGUgdHJlZSdzIGl0ZXJhdG9ycy4KKyAgICAgIHR5cGVkZWYKKyAgICAgIG92X3RyZWVfbm9kZV9jb25zdF9pdF88CisJdmFsdWVfdHlwZSwKKwltZXRhZGF0YV90eXBlLAorCV9BbGxvYz4KKyAgICAgIG5vZGVfY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgbm9kZV9jb25zdF9pdGVyYXRvciBub2RlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmCisgICAgICBOb2RlX1VwZGF0ZTwKKwlub2RlX2NvbnN0X2l0ZXJhdG9yLAorCW5vZGVfY29uc3RfaXRlcmF0b3IsCisJQ21wX0ZuLAorCV9BbGxvYz4KKyAgICAgIG5vZGVfdXBkYXRlOworCisgICAgICB0eXBlZGVmCisgICAgICBfX2dudV9wYmRzOjpudWxsX25vZGVfdXBkYXRlPAorCW5vZGVfY29uc3RfaXRlcmF0b3IsCisJbm9kZV9pdGVyYXRvciwKKwlDbXBfRm4sCisJX0FsbG9jPiogCisgICAgICBudWxsX25vZGVfdXBkYXRlX3BvaW50ZXI7CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX09WX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUAorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWJhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDgyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhaXJpbmdfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhaXJpbmcgaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIHdoaWxlIChmaXJzdF9pdCAhPSBsYXN0X2l0KQorICAgIHB1c2goKihmaXJzdF9pdCsrKSk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorcGFpcmluZ19oZWFwKCkKK3sgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3BhaXJpbmdfaGVhcChjb25zdCBDbXBfRm4mIHJfY21wX2ZuKQorOiBiYXNlX3R5cGUocl9jbXBfZm4pCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitwYWlyaW5nX2hlYXAoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQorOiBiYXNlX3R5cGUob3RoZXIpCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGJhc2VfdHlwZTo6c3dhcChvdGhlcik7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorfnBhaXJpbmdfaGVhcCgpCit7IH0KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhM2QxYgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGFpcmluZ19oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgcGFpcmluZyBoZWFwLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgUEJfRFNfREVCVUdfVkVSSUZZKGJhc2VfdHlwZTo6bV9wX3Jvb3QgPT0gMCAKKwkJICAgICAgICB8fCBiYXNlX3R5cGU6Om1fcF9yb290LT5tX3BfbmV4dF9zaWJsaW5nID09IDApOworICBiYXNlX3R5cGU6OmFzc2VydF92YWxpZChfX2ZpbGUsIF9fbGluZSk7Cit9CisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyMzkzNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjMzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhaXJpbmdfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhaXJpbmcgaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcG9wKCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghYmFzZV90eXBlOjplbXB0eSgpKTsKKworICBub2RlX3BvaW50ZXIgcF9uZXdfcm9vdCA9IGpvaW5fbm9kZV9jaGlsZHJlbihiYXNlX3R5cGU6Om1fcF9yb290KTsKKyAgUEJfRFNfQVNTRVJUX05PREVfQ09OU0lTVEVOVChwX25ld19yb290LCBmYWxzZSkKKyAgaWYgKHBfbmV3X3Jvb3QgIT0gMCkKKyAgICBwX25ld19yb290LT5tX3BfcHJldl9vcl9wYXJlbnQgPSAwOworCisgIGJhc2VfdHlwZTo6YWN0dWFsX2VyYXNlX25vZGUoYmFzZV90eXBlOjptX3Bfcm9vdCk7CisgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX25ld19yb290OworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKHBvaW50X2l0ZXJhdG9yIGl0KQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworICByZW1vdmVfbm9kZShpdC5tX3BfbmQpOworICBiYXNlX3R5cGU6OmFjdHVhbF9lcmFzZV9ub2RlKGl0Lm1fcF9uZCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVtb3ZlX25vZGUobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisgIG5vZGVfcG9pbnRlciBwX25ld19jaGlsZCA9IGpvaW5fbm9kZV9jaGlsZHJlbihwX25kKTsKKworICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmV3X2NoaWxkLCBmYWxzZSkKKworICBpZiAocF9uZCA9PSBiYXNlX3R5cGU6Om1fcF9yb290KQorICAgIHsKKyAgICAgIGlmIChwX25ld19jaGlsZCAhPSAwKQorCXBfbmV3X2NoaWxkLT5tX3BfcHJldl9vcl9wYXJlbnQgPSAwOworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmV3X2NoaWxkOworICAgICAgUEJfRFNfQVNTRVJUX05PREVfQ09OU0lTVEVOVChiYXNlX3R5cGU6Om1fcF9yb290LCBmYWxzZSkKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCAhPSAwKTsKKyAgaWYgKHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX2xfY2hpbGQgPT0gcF9uZCkKKyAgICB7CisgICAgICBpZiAocF9uZXdfY2hpbGQgIT0gMCkKKyAgICAgICAgeworCSAgcF9uZXdfY2hpbGQtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudDsKKwkgIHBfbmV3X2NoaWxkLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKwkgIGlmIChwX25ld19jaGlsZC0+bV9wX25leHRfc2libGluZyAhPSAwKQorCSAgICBwX25ld19jaGlsZC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZXdfY2hpbGQ7CisJICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQtPm1fcF9sX2NoaWxkID0gcF9uZXdfY2hpbGQ7CisJICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCwgZmFsc2UpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX2xfY2hpbGQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgaWYgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gMCkKKwlwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisgICAgICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCwgZmFsc2UpCisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChwX25ld19jaGlsZCAhPSAwKQorICAgIHsKKyAgICAgIHBfbmV3X2NoaWxkLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisgICAgICBwX25ld19jaGlsZC0+bV9wX25leHRfc2libGluZyA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBpZiAocF9uZXdfY2hpbGQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gMCkKKwlwX25ld19jaGlsZC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZXdfY2hpbGQ7CisgICAgICBwX25ld19jaGlsZC0+bV9wX3ByZXZfb3JfcGFyZW50LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZXdfY2hpbGQ7CisgICAgICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCwgZmFsc2UpCisgICAgICByZXR1cm47CisgICAgfQorCisgIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX25leHRfc2libGluZyA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisgIGlmIChwX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IDApCisgICAgcF9uZC0+bV9wX25leHRfc2libGluZy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCwgZmFsc2UpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luX25vZGVfY2hpbGRyZW4obm9kZV9wb2ludGVyIHBfbmQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kICE9IDApOworICBub2RlX3BvaW50ZXIgcF9yZXQgPSBwX25kLT5tX3BfbF9jaGlsZDsKKyAgaWYgKHBfcmV0ID09IDApCisgICAgcmV0dXJuIDA7CisgIHdoaWxlIChwX3JldC0+bV9wX25leHRfc2libGluZyAhPSAwKQorICAgIHBfcmV0ID0gZm9yd2FyZF9qb2luKHBfcmV0LCBwX3JldC0+bV9wX25leHRfc2libGluZyk7CisgIHdoaWxlIChwX3JldC0+bV9wX3ByZXZfb3JfcGFyZW50ICE9IHBfbmQpCisgICAgcF9yZXQgPSBiYWNrX2pvaW4ocF9yZXQtPm1fcF9wcmV2X29yX3BhcmVudCwgcF9yZXQpOworICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfcmV0LCBmYWxzZSkKKyAgcmV0dXJuIHBfcmV0OworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZm9yd2FyZF9qb2luKG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9uZXh0KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSAwKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPT0gcF9uZXh0KTsKKyAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShwX25kLT5tX3ZhbHVlLCBwX25leHQtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIHBfbmV4dC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworICAgICAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmQsIHBfbmV4dCk7CisgICAgICByZXR1cm4gcF9uZXh0LT5tX3BfbmV4dF9zaWJsaW5nID09IDAgCisJPyBwX25leHQgOiBwX25leHQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgfQorCisgIGlmIChwX25leHQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gMCkKKyAgICB7CisgICAgICBwX25leHQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQ7CisgICAgICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZXh0LT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmV4dCwgcF9uZCk7CisgICAgICByZXR1cm4gcF9uZC0+bV9wX25leHRfc2libGluZzsKKyAgICB9CisKKyAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IDA7CisgIGJhc2VfdHlwZTo6bWFrZV9jaGlsZF9vZihwX25leHQsIHBfbmQpOworICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmQsIGZhbHNlKQorICByZXR1cm4gcF9uZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JhY2tfam9pbihub2RlX3BvaW50ZXIgcF9uZCwgbm9kZV9wb2ludGVyIHBfbmV4dCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25leHQtPm1fcF9uZXh0X3NpYmxpbmcgPT0gMCk7CisKKyAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShwX25kLT5tX3ZhbHVlLCBwX25leHQtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIHBfbmV4dC0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF9uZC0+bV9wX3ByZXZfb3JfcGFyZW50OworICAgICAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmQsIHBfbmV4dCk7CisgICAgICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmV4dCwgZmFsc2UpCisgICAgICByZXR1cm4gcF9uZXh0OworICAgIH0KKworICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nID0gMDsKKyAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmV4dCwgcF9uZCk7CisgIFBCX0RTX0FTU0VSVF9OT0RFX0NPTlNJU1RFTlQocF9uZCwgZmFsc2UpCisgIHJldHVybiBwX25kOworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgaWYgKGJhc2VfdHlwZTo6ZW1wdHkoKSkKKyAgICAgIHsKKyAgICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisJcmV0dXJuIDA7CisgICAgICB9CisgIGJhc2VfdHlwZTo6dG9fbGlua2VkX2xpc3QoKTsKKyAgbm9kZV9wb2ludGVyIHBfb3V0ID0gYmFzZV90eXBlOjpwcnVuZShwcmVkKTsKKyAgc2l6ZV90eXBlIGVyc2QgPSAwOworICB3aGlsZSAocF9vdXQgIT0gMCkKKyAgICB7CisgICAgICArK2Vyc2Q7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9vdXQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBiYXNlX3R5cGU6OmFjdHVhbF9lcmFzZV9ub2RlKHBfb3V0KTsKKyAgICAgIHBfb3V0ID0gcF9uZXh0OworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF9jdXIgPSBiYXNlX3R5cGU6Om1fcF9yb290OworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gMDsKKyAgd2hpbGUgKHBfY3VyICE9IDApCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgcF9jdXItPm1fcF9sX2NoaWxkID0gcF9jdXItPm1fcF9uZXh0X3NpYmxpbmcgPSBwX2N1ci0+bV9wX3ByZXZfb3JfcGFyZW50ID0gMDsKKworICAgICAgcHVzaF9pbXAocF9jdXIpOworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIGVyc2Q7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2ZpbmRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NWYzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNDkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGFpcmluZ19oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBwYWlyaW5nIGhlYXAuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfcmVmZXJlbmNlCitQQl9EU19DTEFTU19DX0RFQzo6Cit0b3AoKSBjb25zdAoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworICByZXR1cm4gYmFzZV90eXBlOjptX3Bfcm9vdC0+bV92YWx1ZTsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmFmNDVmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsODggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGFpcmluZ19oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhaXJpbmcgaGVhcC4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHVzaChjb25zdF9yZWZlcmVuY2Ugcl92YWwpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBub2RlX3BvaW50ZXIgcF9uZXdfbmQgPSBiYXNlX3R5cGU6OmdldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KHJfdmFsKTsKKyAgcHVzaF9pbXAocF9uZXdfbmQpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfbmV3X25kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitwdXNoX2ltcChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgcF9uZC0+bV9wX2xfY2hpbGQgPSAwOworICBpZiAoYmFzZV90eXBlOjptX3Bfcm9vdCA9PSAwKQorICAgIHsKKyAgICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPSAwOworICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmQ7CisgICAgfQorICBlbHNlIGlmIChDbXBfRm46Om9wZXJhdG9yKCkoYmFzZV90eXBlOjptX3Bfcm9vdC0+bV92YWx1ZSwgcF9uZC0+bV92YWx1ZSkpCisgICAgeworICAgICAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisgICAgICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2YoYmFzZV90eXBlOjptX3Bfcm9vdCwgcF9uZCk7CisgICAgICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfbmQsIGZhbHNlKQorICAgICAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgYmFzZV90eXBlOjptYWtlX2NoaWxkX29mKHBfbmQsIGJhc2VfdHlwZTo6bV9wX3Jvb3QpOworICAgICAgUEJfRFNfQVNTRVJUX05PREVfQ09OU0lTVEVOVChiYXNlX3R5cGU6Om1fcF9yb290LCBmYWxzZSkKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cittb2RpZnkocG9pbnRfaXRlcmF0b3IgaXQsIGNvbnN0X3JlZmVyZW5jZSByX25ld192YWwpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZW1vdmVfbm9kZShpdC5tX3BfbmQpOworICBpdC5tX3BfbmQtPm1fdmFsdWUgPSByX25ld192YWw7CisgIHB1c2hfaW1wKGl0Lm1fcF9uZCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vcGFpcmluZ19oZWFwXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9wYWlyaW5nX2hlYXBfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzY0YjdjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vcGFpcmluZ19oZWFwXy5ocHAKQEAgLTAsMCArMSwxODUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGFpcmluZ19oZWFwXy9wYWlyaW5nX2hlYXBfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgcGFpcmluZyBoZWFwLgorICovCisKKy8qCisgKiBQYWlyaW5nIGhlYXA6CisgKiBNaWNoYWVsIEwuIEZyZWRtYW4sIFJvYmVydCBTZWRnZXdpY2ssIERhbmllbCBEb21pbmljIFNsZWF0b3IsCisgKiAgICBhbmQgUm9iZXJ0IEVuZHJlIFRhcmphbiwgVGhlIFBhaXJpbmcgSGVhcDoKKyAqICAgIEEgTmV3IEZvcm0gb2YgU2VsZi1BZGp1c3RpbmcgSGVhcCwgQWxnb3JpdGhtaWNhLCAxKDEpOjExMS0xMjksIDE5ODYuCisgKi8KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29uZF9kZWFsdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8vbGVmdF9jaGlsZF9uZXh0X3NpYmxpbmdfaGVhcF8uaHBwPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgcGFpcmluZ19oZWFwPFZhbHVlX1R5cGUsIENtcF9GbiwgX0FsbG9jPgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNkZWZpbmUgUEJfRFNfUF9IRUFQX0JBU0UgXAorICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwPFZhbHVlX1R5cGUsIENtcF9GbiwgbnVsbF90eXBlLCBfQWxsb2MsIGZhbHNlPgorI2Vsc2UKKyNkZWZpbmUgUEJfRFNfUF9IRUFQX0JBU0UgXAorICBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwPFZhbHVlX1R5cGUsIENtcF9GbiwgbnVsbF90eXBlLCBfQWxsb2M+CisjZW5kaWYKKworICAgIC8qKgorICAgICAqICBQYWlyaW5nIGhlYXAuCisgICAgICoKKyAgICAgKiAgQGluZ3JvdXAgaGVhcC1kZXRhaWwKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBwYWlyaW5nX2hlYXAgOiBwdWJsaWMgUEJfRFNfUF9IRUFQX0JBU0UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfUF9IRUFQX0JBU0UJCQkJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfcG9pbnRlciAJCW5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxWYWx1ZV9UeXBlPjo6b3RoZXIgX19yZWJpbmRfYTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgVmFsdWVfVHlwZSAJCQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgQ21wX0ZuIAkJCQkJY21wX2ZuOworICAgICAgdHlwZWRlZiBfQWxsb2MgCQkJCQlhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIAkJZGlmZmVyZW5jZV90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2E6OnBvaW50ZXIgCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hOjpjb25zdF9wb2ludGVyIAljb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hOjpyZWZlcmVuY2UJCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfYTo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludF9jb25zdF9pdGVyYXRvcglwb2ludF9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludF9pdGVyYXRvciAJcG9pbnRfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgCWNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Oml0ZXJhdG9yIAkJaXRlcmF0b3I7CisKKyAgICAgIHBhaXJpbmdfaGVhcCgpOworCisgICAgICBwYWlyaW5nX2hlYXAoY29uc3QgQ21wX0ZuJik7CisKKyAgICAgIHBhaXJpbmdfaGVhcChjb25zdCBwYWlyaW5nX2hlYXAmKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChwYWlyaW5nX2hlYXAmKTsKKworICAgICAgfnBhaXJpbmdfaGVhcCgpOworCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIHB1c2goY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgdm9pZAorICAgICAgbW9kaWZ5KHBvaW50X2l0ZXJhdG9yLCBjb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgY29uc3RfcmVmZXJlbmNlCisgICAgICB0b3AoKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgcG9wKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKHBvaW50X2l0ZXJhdG9yKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICB2b2lkCisgICAgICBzcGxpdChQcmVkLCBwYWlyaW5nX2hlYXAmKTsKKworICAgICAgdm9pZAorICAgICAgam9pbihwYWlyaW5nX2hlYXAmKTsKKworICAgIHByb3RlY3RlZDoKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgICB2b2lkCisgICAgICBjb3B5X2Zyb21fcmFuZ2UoSXQsIEl0KTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBwdXNoX2ltcChub2RlX3BvaW50ZXIpOworCisgICAgICBub2RlX3BvaW50ZXIKKyAgICAgIGpvaW5fbm9kZV9jaGlsZHJlbihub2RlX3BvaW50ZXIpOworCisgICAgICBub2RlX3BvaW50ZXIKKyAgICAgIGZvcndhcmRfam9pbihub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcik7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgYmFja19qb2luKG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlX25vZGUobm9kZV9wb2ludGVyKTsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX0FTU0VSVF9OT0RFX0NPTlNJU1RFTlQoX05vZGUsIF9Cb29sKSBcCisgX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OmFzc2VydF9ub2RlX2NvbnNpc3RlbnQoX05vZGUsIF9Cb29sLAlcCisJCQkJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fKTspCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGFpcmluZ19oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQVNTRVJUX05PREVfQ09OU0lTVEVOVAorI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19QX0hFQVBfQkFTRQorCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0ZWYzMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYWlyaW5nX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMjMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGFpcmluZ19oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgYSBwYWlyaW5nIGhlYXAuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdChQcmVkIHByZWQsIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKworICBvdGhlci5jbGVhcigpOworCisgIGlmIChiYXNlX3R5cGU6OmVtcHR5KCkpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm47CisgICAgfQorCisgIGJhc2VfdHlwZTo6dG9fbGlua2VkX2xpc3QoKTsKKyAgbm9kZV9wb2ludGVyIHBfb3V0ID0gYmFzZV90eXBlOjpwcnVuZShwcmVkKTsKKyAgd2hpbGUgKHBfb3V0ICE9IDApCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGJhc2VfdHlwZTo6bV9zaXplID4gMCk7CisgICAgICAtLWJhc2VfdHlwZTo6bV9zaXplOworICAgICAgKytvdGhlci5tX3NpemU7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9vdXQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBwX291dC0+bV9wX2xfY2hpbGQgPSBwX291dC0+bV9wX25leHRfc2libGluZyA9IHBfb3V0LT5tX3BfcHJldl9vcl9wYXJlbnQgPSAwOworCisgICAgICBvdGhlci5wdXNoX2ltcChwX291dCk7CisgICAgICBwX291dCA9IHBfbmV4dDsKKyAgICB9CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICBub2RlX3BvaW50ZXIgcF9jdXIgPSBiYXNlX3R5cGU6Om1fcF9yb290OworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gMDsKKyAgd2hpbGUgKHBfY3VyICE9IDApCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfY3VyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgcF9jdXItPm1fcF9sX2NoaWxkID0gcF9jdXItPm1fcF9uZXh0X3NpYmxpbmcgPSBwX2N1ci0+bV9wX3ByZXZfb3JfcGFyZW50ID0gMDsKKworICAgICAgcHVzaF9pbXAocF9jdXIpOworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisKKyAgaWYgKG90aGVyLm1fcF9yb290ID09IDApCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ID09IDApCisgICAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IG90aGVyLm1fcF9yb290OworICBlbHNlIGlmIChDbXBfRm46Om9wZXJhdG9yKCkoYmFzZV90eXBlOjptX3Bfcm9vdC0+bV92YWx1ZSwgb3RoZXIubV9wX3Jvb3QtPm1fdmFsdWUpKQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6bWFrZV9jaGlsZF9vZihiYXNlX3R5cGU6Om1fcF9yb290LCBvdGhlci5tX3Bfcm9vdCk7CisgICAgICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKG90aGVyLm1fcF9yb290LCBmYWxzZSkKKyAgICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBvdGhlci5tX3Bfcm9vdDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2Yob3RoZXIubV9wX3Jvb3QsIGJhc2VfdHlwZTo6bV9wX3Jvb3QpOworICAgICAgUEJfRFNfQVNTRVJUX05PREVfQ09OU0lTVEVOVChiYXNlX3R5cGU6Om1fcF9yb290LCBmYWxzZSkKKyAgICB9CisKKyAgYmFzZV90eXBlOjptX3NpemUgKz0gb3RoZXIubV9zaXplOworICBvdGhlci5tX3Bfcm9vdCA9IDA7CisgIG90aGVyLm1fc2l6ZSA9IDA7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTNhNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDIxNCBAQAorIC8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGF0X3RyaWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWUuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpoZWFkX2FsbG9jYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OnNfaGVhZF9hbGxvY2F0b3I7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aW5vZGVfYWxsb2NhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6c19pbm9kZV9hbGxvY2F0b3I7CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bGVhZl9hbGxvY2F0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjpzX2xlYWZfYWxsb2NhdG9yOworCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfUEFUX1RSSUVfTkFNRSgpIDoKKyAgbV9wX2hlYWQoc19oZWFkX2FsbG9jYXRvci5hbGxvY2F0ZSgxKSksCisgIG1fc2l6ZSgwKQoreworICBpbml0aWFsaXplKCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfUEFUX1RSSUVfTkFNRShjb25zdCBhY2Nlc3NfdHJhaXRzJiByX2FjY2Vzc190cmFpdHMpIDoKKyAgc3ludGhfYWNjZXNzX3RyYWl0cyhyX2FjY2Vzc190cmFpdHMpLAorICBtX3BfaGVhZChzX2hlYWRfYWxsb2NhdG9yLmFsbG9jYXRlKDEpKSwKKyAgbV9zaXplKDApCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19QQVRfVFJJRV9OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGRlYnVnX2Jhc2Uob3RoZXIpLAorI2VuZGlmCisgIHN5bnRoX2FjY2Vzc190cmFpdHMob3RoZXIpLAorICBub2RlX3VwZGF0ZShvdGhlciksCisgIG1fcF9oZWFkKHNfaGVhZF9hbGxvY2F0b3IuYWxsb2NhdGUoMSkpLAorICBtX3NpemUoMCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgICBpZiAob3RoZXIubV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gMCkKKyAgICAgIHsKKwlQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKwlyZXR1cm47CisgICAgICB9CisgIF9fdHJ5CisgICAgeworICAgICAgbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSByZWN1cnNpdmVfY29weV9ub2RlKG90aGVyLm1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgICB9CisgIF9fY2F0Y2goLi4uKQorICAgIHsKKyAgICAgIHNfaGVhZF9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX3BfaGVhZCwgMSk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgbV9wX2hlYWQtPm1fcF9taW4gPSBsZWZ0bW9zdF9kZXNjZW5kYW50KG1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgbV9wX2hlYWQtPm1fcF9tYXggPSByaWdodG1vc3RfZGVzY2VuZGFudChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgIG1fcF9oZWFkLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50ID0gbV9wX2hlYWQ7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgIHZhbHVlX3N3YXAob3RoZXIpOworICBzdGQ6OnN3YXAoKGFjY2Vzc190cmFpdHMmICkoKnRoaXMpLCAoYWNjZXNzX3RyYWl0cyYgKW90aGVyKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3ZhbHVlX3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OnN3YXAob3RoZXIpOykKKyAgc3RkOjpzd2FwKG1fcF9oZWFkLCBvdGhlci5tX3BfaGVhZCk7CisgIHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit+UEJfRFNfUEFUX1RSSUVfTkFNRSgpCit7CisgIGNsZWFyKCk7CisgIHNfaGVhZF9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX3BfaGVhZCwgMSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0aWFsaXplKCkKK3sKKyAgbmV3IChtX3BfaGVhZCkgaGVhZCgpOworICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9IDA7CisgIG1fcF9oZWFkLT5tX3BfbWluID0gbV9wX2hlYWQ7CisgIG1fcF9oZWFkLT5tX3BfbWF4ID0gbV9wX2hlYWQ7CisgIG1fc2l6ZSA9IDA7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvcHlfZnJvbV9yYW5nZShJdCBmaXJzdF9pdCwgSXQgbGFzdF9pdCkKK3sKKyAgd2hpbGUgKGZpcnN0X2l0ICE9IGxhc3RfaXQpCisgICAgaW5zZXJ0KCooZmlyc3RfaXQrKykpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjdXJzaXZlX2NvcHlfbm9kZShub2RlX2NvbnN0X3BvaW50ZXIgcF9uY3ApCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25jcCAhPSAwKTsKKyAgaWYgKHBfbmNwLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorICAgIHsKKyAgICAgIGxlYWZfY29uc3RfcG9pbnRlciBwX290aGVyX2xmID0gc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihwX25jcCk7CisgICAgICBsZWFmX3BvaW50ZXIgcF9uZXdfbGYgPSBzX2xlYWZfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICAgICAgY29uZF9kZWFsdG9yIGNvbmQocF9uZXdfbGYpOworICAgICAgbmV3IChwX25ld19sZikgbGVhZihwX290aGVyX2xmLT52YWx1ZSgpKTsKKyAgICAgIGFwcGx5X3VwZGF0ZShwX25ld19sZiwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgICAgIGNvbmQuc2V0X25vX2FjdGlvbl9kdG9yKCk7CisgICAgICByZXR1cm4gKHBfbmV3X2xmKTsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmNwLT5tX3R5cGUgPT0gaV9ub2RlKTsKKyAgbm9kZV9wb2ludGVyIGFfcF9jaGlsZHJlbltpbm9kZTo6YXJyX3NpemVdOworICBzaXplX3R5cGUgY2hpbGRfaSA9IDA7CisgIGlub2RlX2NvbnN0X3BvaW50ZXIgcF9pY3AgPSBzdGF0aWNfY2FzdDxpbm9kZV9jb25zdF9wb2ludGVyPihwX25jcCk7CisKKyAgdHlwZW5hbWUgaW5vZGU6OmNvbnN0X2l0ZXJhdG9yIGNoaWxkX2l0ID0gcF9pY3AtPmJlZ2luKCk7CisKKyAgaW5vZGVfcG9pbnRlciBwX3JldDsKKyAgX190cnkKKyAgICB7CisgICAgICB3aGlsZSAoY2hpbGRfaXQgIT0gcF9pY3AtPmVuZCgpKQorCXsKKwkgIGFfcF9jaGlsZHJlbltjaGlsZF9pXSA9IHJlY3Vyc2l2ZV9jb3B5X25vZGUoKihjaGlsZF9pdCkpOworCSAgY2hpbGRfaSsrOworCSAgY2hpbGRfaXQrKzsKKwl9CisgICAgICBwX3JldCA9IHNfaW5vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgd2hpbGUgKGNoaWxkX2ktLSA+IDApCisJY2xlYXJfaW1wKGFfcF9jaGlsZHJlbltjaGlsZF9pXSk7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9CisKKyAgbmV3IChwX3JldCkgaW5vZGUocF9pY3AtPmdldF9lX2luZCgpLCBwcmVmX2JlZ2luKGFfcF9jaGlsZHJlblswXSkpOworCisgIC0tY2hpbGRfaTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGNoaWxkX2kgPj0gMSk7CisgIGRvCisgICAgcF9yZXQtPmFkZF9jaGlsZChhX3BfY2hpbGRyZW5bY2hpbGRfaV0sIHByZWZfYmVnaW4oYV9wX2NoaWxkcmVuW2NoaWxkX2ldKSwKKwkJICAgICBwcmVmX2VuZChhX3BfY2hpbGRyZW5bY2hpbGRfaV0pLCB0aGlzKTsKKyAgd2hpbGUgKGNoaWxkX2ktLSA+IDApOworICBhcHBseV91cGRhdGUocF9yZXQsIChub2RlX3VwZGF0ZSopdGhpcyk7CisgIHJldHVybiBwX3JldDsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vZGVidWdfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2RlYnVnX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzZkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2RlYnVnX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTE1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhdF90cmllXy9kZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHBhdF90cmllXy4KKyAqLworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZChjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIGlmIChtX3BfaGVhZC0+bV9wX3BhcmVudCAhPSAwKQorICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50LT5hc3NlcnRfdmFsaWQodGhpcywgX19maWxlLCBfX2xpbmUpOworICBhc3NlcnRfaXRlcmF0b3JzKF9fZmlsZSwgX19saW5lKTsKKyAgYXNzZXJ0X3JldmVyc2VfaXRlcmF0b3JzKF9fZmlsZSwgX19saW5lKTsKKyAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ID09IDApCisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKG1fcF9oZWFkLT5tX3BfbWluID09IG1fcF9oZWFkKTsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShtX3BfaGVhZC0+bV9wX21heCA9PSBtX3BfaGVhZCk7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkoZW1wdHkoKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIFBCX0RTX0RFQlVHX1ZFUklGWShtX3BfaGVhZC0+bV9wX21pbi0+bV90eXBlID09IGxlYWZfbm9kZSk7CisgIFBCX0RTX0RFQlVHX1ZFUklGWShtX3BfaGVhZC0+bV9wX21heC0+bV90eXBlID09IGxlYWZfbm9kZSk7CisgIFBCX0RTX0RFQlVHX1ZFUklGWSghZW1wdHkoKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfaXRlcmF0b3JzKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgc2l6ZV90eXBlIGNhbGNfc2l6ZSA9IDA7CisgIGZvciAoY29uc3RfaXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmQoKTsgKytpdCkKKyAgICB7CisgICAgICArK2NhbGNfc2l6ZTsKKyAgICAgIGRlYnVnX2Jhc2U6OmNoZWNrX2tleV9leGlzdHMoUEJfRFNfVjJGKCppdCksIF9fZmlsZSwgX19saW5lKTsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShsb3dlcl9ib3VuZChQQl9EU19WMkYoKml0KSkgPT0gaXQpOworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKC0tdXBwZXJfYm91bmQoUEJfRFNfVjJGKCppdCkpID09IGl0KTsKKyAgICB9CisgIFBCX0RTX0RFQlVHX1ZFUklGWShjYWxjX3NpemUgPT0gbV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9yZXZlcnNlX2l0ZXJhdG9ycyhjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIHNpemVfdHlwZSBjYWxjX3NpemUgPSAwOworICBmb3IgKGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQgPSByYmVnaW4oKTsgaXQgIT0gcmVuZCgpOyArK2l0KQorICAgIHsKKyAgICAgICsrY2FsY19zaXplOworICAgICAgbm9kZV9jb25zdF9wb2ludGVyIHBfbmQgPQorCWNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqPih0aGlzKS0+ZmluZF9pbXAoUEJfRFNfVjJGKCppdCkpOworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmQgPT0gaXQubV9wX25kKTsKKyAgICB9CisgIFBCX0RTX0RFQlVHX1ZFUklGWShjYWxjX3NpemUgPT0gbV9zaXplKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY3Vyc2l2ZV9jb3VudF9sZWFmcyhub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCwgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKQoreworICBpZiAocF9uZCA9PSAwKQorICAgIHJldHVybiAoMCk7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorICAgIHJldHVybiAoMSk7CisgIFBCX0RTX0RFQlVHX1ZFUklGWShwX25kLT5tX3R5cGUgPT0gaV9ub2RlKTsKKyAgc2l6ZV90eXBlIHJldCA9IDA7CisgIGZvciAodHlwZW5hbWUgaW5vZGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RhdGljX2Nhc3Q8aW5vZGVfY29uc3RfcG9pbnRlcj4ocF9uZCktPmJlZ2luKCk7CisgICAgICAgaXQgIT0gc3RhdGljX2Nhc3Q8aW5vZGVfY29uc3RfcG9pbnRlcj4ocF9uZCktPmVuZCgpOworICAgICAgICsraXQpCisgICAgcmV0ICs9IHJlY3Vyc2l2ZV9jb3VudF9sZWFmcygqaXQsIF9fZmlsZSwgX19saW5lKTsKKyAgcmV0dXJuIHJldDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2VyYXNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9lcmFzZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWRiMTQwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDMxNSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwYXRfdHJpZV8vZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBwYXRfdHJpZS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIG5vZGVfcG9pbnRlciBwX25kID0gZmluZF9pbXAocl9rZXkpOworICBpZiAocF9uZCA9PSAwIHx8IHBfbmQtPm1fdHlwZSA9PSBpX25vZGUpCisgICAgeworICAgICAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKHJfa2V5KQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSk7CisgIGlmICghc3ludGhfYWNjZXNzX3RyYWl0czo6ZXF1YWxfa2V5cyhQQl9EU19WMkYocmVpbnRlcnByZXRfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpLT52YWx1ZSgpKSwgcl9rZXkpKQorICAgIHsKKyAgICAgIFBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChyX2tleSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgUEJfRFNfQ0hFQ0tfS0VZX0VYSVNUUyhyX2tleSkKKyAgZXJhc2VfbGVhZihzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfZml4dXAoaW5vZGVfcG9pbnRlciBwX25kKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc3RkOjpkaXN0YW5jZShwX25kLT5iZWdpbigpLCBwX25kLT5lbmQoKSkgPj0gMSk7CisgIGlmIChzdGQ6OmRpc3RhbmNlKHBfbmQtPmJlZ2luKCksIHBfbmQtPmVuZCgpKSA9PSAxKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX3BhcmVudCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisgICAgICBpZiAocF9wYXJlbnQgPT0gbV9wX2hlYWQpCisJbV9wX2hlYWQtPm1fcF9wYXJlbnQgPSAqcF9uZC0+YmVnaW4oKTsKKyAgICAgIGVsc2UKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQtPm1fdHlwZSA9PSBpX25vZGUpOworCSAgbm9kZV9wb2ludGVyIHBfbmV3X2NoaWxkID0gKnBfbmQtPmJlZ2luKCk7CisKKwkgIHR5cGVkZWYgaW5vZGVfcG9pbnRlciBpbm9kZV9wdHI7CisJICBpbm9kZV9wdHIgcF9pbnRlcm5hbCA9IHN0YXRpY19jYXN0PGlub2RlX3B0cj4ocF9wYXJlbnQpOworCSAgcF9pbnRlcm5hbC0+cmVwbGFjZV9jaGlsZChwX25ld19jaGlsZCwgcHJlZl9iZWdpbihwX25ld19jaGlsZCksCisJCQkJICAgIHByZWZfZW5kKHBfbmV3X2NoaWxkKSwgdGhpcyk7CisJfQorICAgICAgKCpwX25kLT5iZWdpbigpKS0+bV9wX3BhcmVudCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisgICAgICBwX25kLT5+aW5vZGUoKTsKKyAgICAgIHNfaW5vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUocF9uZCwgMSk7CisKKyAgICAgIGlmIChwX3BhcmVudCA9PSBtX3BfaGVhZCkKKwlyZXR1cm47CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudC0+bV90eXBlID09IGlfbm9kZSk7CisgICAgICBwX25kID0gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9wYXJlbnQpOworICAgIH0KKworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc3RkOjpkaXN0YW5jZShwX25kLT5iZWdpbigpLCBwX25kLT5lbmQoKSkgPiAxKTsKKyAgICAgIHBfbmQtPnVwZGF0ZV9wcmVmaXhlcyh0aGlzKTsKKyAgICAgIGFwcGx5X3VwZGF0ZShwX25kLCAobm9kZV91cGRhdGUqKXRoaXMpOworICAgICAgUEJfRFNfQVNTRVJUX05PREVfVkFMSUQocF9uZCkKKyAgICAgIGlmIChwX25kLT5tX3BfcGFyZW50LT5tX3R5cGUgPT0gaGVhZF9ub2RlKQorCXJldHVybjsKKworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fcF9wYXJlbnQtPm1fdHlwZSA9PSBpX25vZGUpOworCisgICAgICBwX25kID0gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9uZC0+bV9wX3BhcmVudCk7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2FjdHVhbF9lcmFzZV9sZWFmKGxlYWZfcG9pbnRlciBwX2wpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3NpemUgPiAwKTsKKyAgLS1tX3NpemU7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6ZXJhc2VfZXhpc3RpbmcoUEJfRFNfVjJGKHBfbC0+dmFsdWUoKSkpKTsKKyAgcF9sLT5+bGVhZigpOworICBzX2xlYWZfYWxsb2NhdG9yLmRlYWxsb2NhdGUocF9sLCAxKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgaWYgKCFlbXB0eSgpKQorICAgIHsKKyAgICAgIGNsZWFyX2ltcChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgICAgICBtX3NpemUgPSAwOworICAgICAgaW5pdGlhbGl6ZSgpOworICAgICAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjbGVhcigpOykKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyX2ltcChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgaWYgKHBfbmQtPm1fdHlwZSA9PSBpX25vZGUpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fdHlwZSA9PSBpX25vZGUpOworICAgICAgZm9yICh0eXBlbmFtZSBpbm9kZTo6aXRlcmF0b3IgaXQgPQorCSAgICAgc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9uZCktPmJlZ2luKCk7CisJICAgaXQgIT0gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9uZCktPmVuZCgpOworCSAgICsraXQpCisJeworCSAgbm9kZV9wb2ludGVyIHBfY2hpbGQgPSogaXQ7CisJICBjbGVhcl9pbXAocF9jaGlsZCk7CisJfQorICAgICAgc19pbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX25kKSwgMSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKTsKKyAgc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX25kKS0+fmxlYWYoKTsKKyAgc19sZWFmX2FsbG9jYXRvci5kZWFsbG9jYXRlKHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4ocF9uZCksIDEpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UoY29uc3RfaXRlcmF0b3IgaXQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorCisgIGlmIChpdCA9PSBlbmQoKSkKKyAgICByZXR1cm4gaXQ7CisKKyAgY29uc3RfaXRlcmF0b3IgcmV0X2l0ID0gaXQ7CisgICsrcmV0X2l0OworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXQubV9wX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKTsKKyAgZXJhc2VfbGVhZihzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KGl0Lm1fcF9uZCkpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIHJldF9pdDsKK30KKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShpdGVyYXRvciBpdCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisKKyAgaWYgKGl0ID09IGVuZCgpKQorICAgIHJldHVybiBpdDsKKyAgaXRlcmF0b3IgcmV0X2l0ID0gaXQ7CisgICsrcmV0X2l0OworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXQubV9wX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKTsKKyAgZXJhc2VfbGVhZihzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KGl0Lm1fcF9uZCkpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIHJldF9pdDsKK30KKyNlbmRpZiAvLyAjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGl0KQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKworICBpZiAoaXQubV9wX25kID09IG1fcF9oZWFkKQorICAgIHJldHVybiBpdDsKKyAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZXRfaXQgPSBpdDsKKyAgKytyZXRfaXQ7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGl0Lm1fcF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSk7CisgIGVyYXNlX2xlYWYoc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihpdC5tX3BfbmQpKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiByZXRfaXQ7Cit9CisKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpyZXZlcnNlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShyZXZlcnNlX2l0ZXJhdG9yIGl0KQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKworICBpZiAoaXQubV9wX25kID09IG1fcF9oZWFkKQorICAgIHJldHVybiBpdDsKKyAgcmV2ZXJzZV9pdGVyYXRvciByZXRfaXQgPSBpdDsKKyAgKytyZXRfaXQ7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGl0Lm1fcF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSk7CisgIGVyYXNlX2xlYWYoc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihpdC5tX3BfbmQpKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiByZXRfaXQ7Cit9CisjZW5kaWYgLy8gI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfaWYoUHJlZCBwcmVkKQoreworICBzaXplX3R5cGUgbnVtX2Vyc2QgPSAwOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKworICBpdGVyYXRvciBpdCA9IGJlZ2luKCk7CisgIHdoaWxlIChpdCAhPSBlbmQoKSkKKyAgICB7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIGlmIChwcmVkKCppdCkpCisJeworCSAgKytudW1fZXJzZDsKKwkgIGl0ID0gZXJhc2UoaXQpOworCX0KKyAgICAgIGVsc2UKKwkrK2l0OworICAgIH0KKworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIG51bV9lcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfbGVhZihsZWFmX3BvaW50ZXIgcF9sKQoreworICB1cGRhdGVfbWluX21heF9mb3JfZXJhc2VkX2xlYWYocF9sKTsKKyAgaWYgKHBfbC0+bV9wX3BhcmVudC0+bV90eXBlID09IGhlYWRfbm9kZSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc2l6ZSgpID09IDEpOworICAgICAgY2xlYXIoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHNpemUoKSA+IDEpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sLT5tX3BfcGFyZW50LT5tX3R5cGUgPT0gaV9ub2RlKTsKKworICBpbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9sLT5tX3BfcGFyZW50KTsKKworICBwX3BhcmVudC0+cmVtb3ZlX2NoaWxkKHBfbCk7CisgIGVyYXNlX2ZpeHVwKHBfcGFyZW50KTsKKyAgYWN0dWFsX2VyYXNlX2xlYWYocF9sKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3VwZGF0ZV9taW5fbWF4X2Zvcl9lcmFzZWRfbGVhZihsZWFmX3BvaW50ZXIgcF9sKQoreworICBpZiAobV9zaXplID09IDEpCisgICAgeworICAgICAgbV9wX2hlYWQtPm1fcF9taW4gPSBtX3BfaGVhZDsKKyAgICAgIG1fcF9oZWFkLT5tX3BfbWF4ID0gbV9wX2hlYWQ7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChwX2wgPT0gc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihtX3BfaGVhZC0+bV9wX21pbikpCisgICAgeworICAgICAgaXRlcmF0b3IgaXQocF9sKTsKKyAgICAgICsraXQ7CisgICAgICBtX3BfaGVhZC0+bV9wX21pbiA9IGl0Lm1fcF9uZDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHBfbCA9PSBzdGF0aWNfY2FzdDxsZWFmX2NvbnN0X3BvaW50ZXI+KG1fcF9oZWFkLT5tX3BfbWF4KSkKKyAgICB7CisgICAgICBpdGVyYXRvciBpdChwX2wpOworICAgICAgLS1pdDsKKyAgICAgIG1fcF9oZWFkLT5tX3BfbWF4ID0gaXQubV9wX25kOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vZmluZF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vZmluZF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc3YmY1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9maW5kX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMjY5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhdF90cmllXy9maW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWUuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cG9pbnRfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIG5vZGVfcG9pbnRlciBwX25kID0gZmluZF9pbXAocl9rZXkpOworCisgIGlmIChwX25kID09IDAgfHwgcF9uZC0+bV90eXBlICE9IGxlYWZfbm9kZSkKKyAgICB7CisgICAgICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1Qocl9rZXkpCisgICAgICByZXR1cm4gZW5kKCk7CisgICAgfQorCisgIGlmIChzeW50aF9hY2Nlc3NfdHJhaXRzOjplcXVhbF9rZXlzKFBCX0RTX1YyRihzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpLT52YWx1ZSgpKSwgcl9rZXkpKQorICAgIHsKKyAgICAgIFBCX0RTX0NIRUNLX0tFWV9FWElTVFMocl9rZXkpCisgICAgICByZXR1cm4gaXRlcmF0b3IocF9uZCk7CisgICAgfQorCisgIFBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChyX2tleSkKKyAgcmV0dXJuIGVuZCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKworICBub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCA9IGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqID4odGhpcyktPmZpbmRfaW1wKHJfa2V5KTsKKworICBpZiAocF9uZCA9PSAwIHx8IHBfbmQtPm1fdHlwZSAhPSBsZWFmX25vZGUpCisgICAgeworICAgICAgUEJfRFNfQ0hFQ0tfS0VZX0RPRVNfTk9UX0VYSVNUKHJfa2V5KQorICAgICAgcmV0dXJuIGVuZCgpOworICAgIH0KKworICBpZiAoc3ludGhfYWNjZXNzX3RyYWl0czo6ZXF1YWxfa2V5cyhQQl9EU19WMkYoc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihwX25kKS0+dmFsdWUoKSksIHJfa2V5KSkKKyAgICB7CisgICAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKHJfa2V5KQorICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKGNvbnN0X2Nhc3Q8bm9kZV9wb2ludGVyPihwX25kKSk7CisgICAgfQorCisgIFBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChyX2tleSkKKyAgcmV0dXJuIGVuZCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfaW1wKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiAwOworCisgIHR5cGVuYW1lIHN5bnRoX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGJfaXQgPQorICAgIHN5bnRoX2FjY2Vzc190cmFpdHM6OmJlZ2luKHJfa2V5KTsKKyAgdHlwZW5hbWUgc3ludGhfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZV9pdCA9CisgICAgc3ludGhfYWNjZXNzX3RyYWl0czo6ZW5kKHJfa2V5KTsKKworICBub2RlX3BvaW50ZXIgcF9uZCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50OworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSAwKTsKKworICB3aGlsZSAocF9uZC0+bV90eXBlICE9IGxlYWZfbm9kZSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IGlfbm9kZSk7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0X25kID0gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9uZCktPmdldF9jaGlsZF9ub2RlKGJfaXQsICBlX2l0LCAgdGhpcyk7CisKKyAgICAgIGlmIChwX25leHRfbmQgPT0gMCkKKwlyZXR1cm4gcF9uZDsKKyAgICAgIHBfbmQgPSBwX25leHRfbmQ7CisgICAgfQorICByZXR1cm4gcF9uZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6Citsb3dlcl9ib3VuZF9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuIChtX3BfaGVhZCk7CisKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfaGVhZC0+bV9wX3BhcmVudDsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgIT0gMCk7CisKKyAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmFfY29uc3RfaXRlcmF0b3IgYl9pdCA9CisgICAgc3ludGhfYWNjZXNzX3RyYWl0czo6YmVnaW4ocl9rZXkpOworCisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjphX2NvbnN0X2l0ZXJhdG9yIGVfaXQgPQorICAgIHN5bnRoX2FjY2Vzc190cmFpdHM6OmVuZChyX2tleSk7CisKKyAgc2l6ZV90eXBlIGNoZWNrZWRfaW5kID0gMDsKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgaWYgKHBfbmQtPm1fdHlwZSA9PSBsZWFmX25vZGUpCisgICAgICAgIHsKKwkgIGlmICghc3ludGhfYWNjZXNzX3RyYWl0czo6Y21wX2tleXMoUEJfRFNfVjJGKHN0YXRpY19jYXN0PGxlYWZfY29uc3RfcG9pbnRlcj4ocF9uZCktPnZhbHVlKCkpLCByX2tleSkpCisJICAgIHJldHVybiBwX25kOworCSAgaXRlcmF0b3IgaXQocF9uZCk7CisJICArK2l0OworCSAgcmV0dXJuIGl0Lm1fcF9uZDsKKyAgICAgICAgfQorCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IGlfbm9kZSk7CisgICAgICBjb25zdCBzaXplX3R5cGUgbmV3X2NoZWNrZWRfaW5kID0KKwlzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX25kKS0+Z2V0X2VfaW5kKCk7CisKKyAgICAgIHBfbmQgPQorCXN0YXRpY19jYXN0PGlub2RlX3BvaW50ZXI+KHBfbmQpLT5nZXRfbG93ZXJfYm91bmRfY2hpbGRfbm9kZSggICAgICAgICAgICAgICAgYl9pdCwgZV9pdCwgY2hlY2tlZF9pbmQsIHRoaXMpOworICAgICAgY2hlY2tlZF9pbmQgPSBuZXdfY2hlY2tlZF9pbmQ7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbG93ZXJfYm91bmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKGxvd2VyX2JvdW5kX2ltcChyX2tleSkpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citsb3dlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAoreworICByZXR1cm4gcG9pbnRfY29uc3RfaXRlcmF0b3IoY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyogPih0aGlzKS0+bG93ZXJfYm91bmRfaW1wKHJfa2V5KSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Cit1cHBlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQoreworICBwb2ludF9pdGVyYXRvciBsX2JvdW5kX2l0ID0gbG93ZXJfYm91bmQocl9rZXkpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChsX2JvdW5kX2l0ID09IGVuZCgpIHx8CisJCSAgICFzeW50aF9hY2Nlc3NfdHJhaXRzOjpjbXBfa2V5cyhQQl9EU19WMkYoKmxfYm91bmRfaXQpLAorCQkJCQkJICAgIHJfa2V5KSk7CisKKyAgaWYgKGxfYm91bmRfaXQgPT0gZW5kKCkgfHwKKyAgICAgIHN5bnRoX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKHJfa2V5LCBQQl9EU19WMkYoKmxfYm91bmRfaXQpKSkKKyAgICByZXR1cm4gbF9ib3VuZF9pdDsKKworICByZXR1cm4gKytsX2JvdW5kX2l0OworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBwZXJfYm91bmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgcG9pbnRfY29uc3RfaXRlcmF0b3IgbF9ib3VuZF9pdCA9IGxvd2VyX2JvdW5kKHJfa2V5KTsKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobF9ib3VuZF9pdCA9PSBlbmQoKSB8fAorCQkgICAhc3ludGhfYWNjZXNzX3RyYWl0czo6Y21wX2tleXMoUEJfRFNfVjJGKCpsX2JvdW5kX2l0KSwKKwkJCQkJCSAgICByX2tleSkpOworCisgIGlmIChsX2JvdW5kX2l0ID09IGVuZCgpIHx8CisgICAgICBzeW50aF9hY2Nlc3NfdHJhaXRzOjpjbXBfa2V5cyhyX2tleSwgUEJfRFNfVjJGKCpsX2JvdW5kX2l0KSkpCisgICAgcmV0dXJuIGxfYm91bmRfaXQ7CisgIHJldHVybiArK2xfYm91bmRfaXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmFfY29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3ByZWZfYmVnaW4obm9kZV9jb25zdF9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorICAgIHJldHVybiAoc3ludGhfYWNjZXNzX3RyYWl0czo6YmVnaW4oUEJfRFNfVjJGKHN0YXRpY19jYXN0PGxlYWZfY29uc3RfcG9pbnRlcj4ocF9uZCktPnZhbHVlKCkpKSk7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fdHlwZSA9PSBpX25vZGUpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8aW5vZGVfY29uc3RfcG9pbnRlcj4ocF9uZCktPnByZWZfYl9pdCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjphX2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitwcmVmX2VuZChub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCkKK3sKKyAgaWYgKHBfbmQtPm1fdHlwZSA9PSBsZWFmX25vZGUpCisgICAgcmV0dXJuIChzeW50aF9hY2Nlc3NfdHJhaXRzOjplbmQoUEJfRFNfVjJGKHN0YXRpY19jYXN0PGxlYWZfY29uc3RfcG9pbnRlcj4ocF9uZCktPnZhbHVlKCkpKSk7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fdHlwZSA9PSBpX25vZGUpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8aW5vZGVfY29uc3RfcG9pbnRlcj4ocF9uZCktPnByZWZfZV9pdCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpsZWFmX2NvbnN0X3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRtb3N0X2Rlc2NlbmRhbnQobm9kZV9jb25zdF9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxsZWFmX2NvbnN0X3BvaW50ZXI+KHBfbmQpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8aW5vZGVfY29uc3RfcG9pbnRlcj4ocF9uZCktPmxlZnRtb3N0X2Rlc2NlbmRhbnQoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bGVhZl9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitsZWZ0bW9zdF9kZXNjZW5kYW50KG5vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX25kKTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGlub2RlX3BvaW50ZXI+KHBfbmQpLT5sZWZ0bW9zdF9kZXNjZW5kYW50KCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmxlYWZfY29uc3RfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmlnaHRtb3N0X2Rlc2NlbmRhbnQobm9kZV9jb25zdF9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxsZWFmX2NvbnN0X3BvaW50ZXI+KHBfbmQpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8aW5vZGVfY29uc3RfcG9pbnRlcj4ocF9uZCktPnJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmxlYWZfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmlnaHRtb3N0X2Rlc2NlbmRhbnQobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfbmQpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9uZCktPnJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7Cit9CisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaW5mb19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaW5mb19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjBhYWQyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGF0X3RyaWVfL2luZm9fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBwYXRfdHJpZS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VtcHR5KCkgY29uc3QKK3sgcmV0dXJuIChtX3NpemUgPT0gMCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitzaXplKCkgY29uc3QKK3sgcmV0dXJuIG1fc2l6ZTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21heF9zaXplKCkgY29uc3QKK3sgcmV0dXJuIHNfaW5vZGVfYWxsb2NhdG9yLm1heF9zaXplKCk7IH0KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9pbnNlcnRfam9pbl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaW5zZXJ0X2pvaW5fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhYWM3NQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaW5zZXJ0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSw0NzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGF0X3RyaWVfL2luc2VydF9qb2luX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWUuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2pvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICBicmFuY2hfYmFnIGJhZzsKKyAgaWYgKCFqb2luX3ByZXAob3RoZXIsIGJhZykpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm47CisgICAgfQorCisgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcmVjX2pvaW4obV9wX2hlYWQtPm1fcF9wYXJlbnQsCisJCQkJICBvdGhlci5tX3BfaGVhZC0+bV9wX3BhcmVudCwgMCwgYmFnKTsKKworICBtX3BfaGVhZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudCA9IG1fcF9oZWFkOworICBtX3NpemUgKz0gb3RoZXIubV9zaXplOworICBvdGhlci5pbml0aWFsaXplKCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgbV9wX2hlYWQtPm1fcF9taW4gPSBsZWZ0bW9zdF9kZXNjZW5kYW50KG1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKyAgbV9wX2hlYWQtPm1fcF9tYXggPSByaWdodG1vc3RfZGVzY2VuZGFudChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbl9wcmVwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlciwgYnJhbmNoX2JhZyYgcl9iYWcpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgIGlmIChvdGhlci5tX3NpemUgPT0gMCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKG1fc2l6ZSA9PSAwKQorICAgIHsKKyAgICAgIHZhbHVlX3N3YXAob3RoZXIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICBjb25zdCBib29sIGdyZWF0ZXIgPQorICAgIHN5bnRoX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKFBCX0RTX1YyRihzdGF0aWNfY2FzdDxsZWFmX2NvbnN0X3BvaW50ZXI+KG1fcF9oZWFkLT5tX3BfbWF4KS0+dmFsdWUoKSksCisJCQkJICAgIFBCX0RTX1YyRihzdGF0aWNfY2FzdDxsZWFmX2NvbnN0X3BvaW50ZXI+KG90aGVyLm1fcF9oZWFkLT5tX3BfbWluKS0+dmFsdWUoKSkpOworCisgIGNvbnN0IGJvb2wgbGVzc2VyID0KKyAgICBzeW50aF9hY2Nlc3NfdHJhaXRzOjpjbXBfa2V5cyhQQl9EU19WMkYoc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihvdGhlci5tX3BfaGVhZC0+bV9wX21heCktPnZhbHVlKCkpLAorCQkJCSAgICBQQl9EU19WMkYoc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihtX3BfaGVhZC0+bV9wX21pbiktPnZhbHVlKCkpKTsKKworICBpZiAoIWdyZWF0ZXIgJiYgIWxlc3NlcikKKyAgICBfX3Rocm93X2pvaW5fZXJyb3IoKTsKKworICByZWNfam9pbl9wcmVwKG1fcF9oZWFkLT5tX3BfcGFyZW50LCBvdGhlci5tX3BfaGVhZC0+bV9wX3BhcmVudCwgcl9iYWcpOworICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OmpvaW4ob3RoZXIsIGZhbHNlKTspCisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjX2pvaW5fcHJlcChub2RlX2NvbnN0X3BvaW50ZXIgcF9sLCBub2RlX2NvbnN0X3BvaW50ZXIgcF9yLCAKKwkgICAgICBicmFuY2hfYmFnJiByX2JhZykKK3sKKyAgaWYgKHBfbC0+bV90eXBlID09IGxlYWZfbm9kZSkKKyAgICB7CisgICAgICBpZiAocF9yLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorCXsKKwkgIHJlY19qb2luX3ByZXAoc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihwX2wpLAorCQkJc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihwX3IpLCByX2JhZyk7CisJICByZXR1cm47CisJfQorCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9yLT5tX3R5cGUgPT0gaV9ub2RlKTsKKyAgICAgIHJlY19qb2luX3ByZXAoc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihwX2wpLAorCQkgICAgc3RhdGljX2Nhc3Q8aW5vZGVfY29uc3RfcG9pbnRlcj4ocF9yKSwgcl9iYWcpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sLT5tX3R5cGUgPT0gaV9ub2RlKTsKKyAgaWYgKHBfci0+bV90eXBlID09IGxlYWZfbm9kZSkKKyAgICB7CisgICAgICByZWNfam9pbl9wcmVwKHN0YXRpY19jYXN0PGlub2RlX2NvbnN0X3BvaW50ZXI+KHBfbCksCisJCSAgICBzdGF0aWNfY2FzdDxsZWFmX2NvbnN0X3BvaW50ZXI+KHBfciksIHJfYmFnKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfci0+bV90eXBlID09IGlfbm9kZSk7CisKKyAgcmVjX2pvaW5fcHJlcChzdGF0aWNfY2FzdDxpbm9kZV9jb25zdF9wb2ludGVyPihwX2wpLAorCQlzdGF0aWNfY2FzdDxpbm9kZV9jb25zdF9wb2ludGVyPihwX3IpLCByX2JhZyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZWNfam9pbl9wcmVwKGxlYWZfY29uc3RfcG9pbnRlciAvKnBfbCovLCBsZWFmX2NvbnN0X3BvaW50ZXIgLypwX3IqLywKKwkgICAgICBicmFuY2hfYmFnJiByX2JhZykKK3sgcl9iYWcuYWRkX2JyYW5jaCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CityZWNfam9pbl9wcmVwKGxlYWZfY29uc3RfcG9pbnRlciAvKnBfbCovLCBpbm9kZV9jb25zdF9wb2ludGVyIC8qcF9yKi8sCisJICAgICAgYnJhbmNoX2JhZyYgcl9iYWcpCit7IHJfYmFnLmFkZF9icmFuY2goKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjX2pvaW5fcHJlcChpbm9kZV9jb25zdF9wb2ludGVyIC8qcF9sKi8sIGxlYWZfY29uc3RfcG9pbnRlciAvKnBfciovLAorCSAgICAgIGJyYW5jaF9iYWcmIHJfYmFnKQoreyByX2JhZy5hZGRfYnJhbmNoKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY19qb2luX3ByZXAoaW5vZGVfY29uc3RfcG9pbnRlciBwX2wsIGlub2RlX2NvbnN0X3BvaW50ZXIgcF9yLAorCSAgICAgIGJyYW5jaF9iYWcmIHJfYmFnKQoreworICBpZiAocF9sLT5nZXRfZV9pbmQoKSA9PSBwX3ItPmdldF9lX2luZCgpICYmCisgICAgICBzeW50aF9hY2Nlc3NfdHJhaXRzOjplcXVhbF9wcmVmaXhlcyhwX2wtPnByZWZfYl9pdCgpLCBwX2wtPnByZWZfZV9pdCgpLAorCQkJCQkgICAgcF9yLT5wcmVmX2JfaXQoKSwgcF9yLT5wcmVmX2VfaXQoKSkpCisgICAgeworICAgICAgZm9yICh0eXBlbmFtZSBpbm9kZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwX3ItPmJlZ2luKCk7CisJICAgaXQgIT0gcF9yLT5lbmQoKTsgKysgaXQpCisJeworCSAgbm9kZV9jb25zdF9wb2ludGVyIHBfbF9qb2luX2NoaWxkID0gcF9sLT5nZXRfam9pbl9jaGlsZCgqaXQsIHRoaXMpOworCSAgaWYgKHBfbF9qb2luX2NoaWxkICE9IDApCisJICAgIHJlY19qb2luX3ByZXAocF9sX2pvaW5fY2hpbGQsICogaXQsIHJfYmFnKTsKKwl9CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChwX3ItPmdldF9lX2luZCgpIDwgcF9sLT5nZXRfZV9pbmQoKSAmJgorICAgICAgcF9yLT5zaG91bGRfYmVfbWluZShwX2wtPnByZWZfYl9pdCgpLCBwX2wtPnByZWZfZV9pdCgpLCAwLCB0aGlzKSkKKyAgICB7CisgICAgICBub2RlX2NvbnN0X3BvaW50ZXIgcF9yX2pvaW5fY2hpbGQgPSBwX3ItPmdldF9qb2luX2NoaWxkKHBfbCwgdGhpcyk7CisgICAgICBpZiAocF9yX2pvaW5fY2hpbGQgIT0gMCkKKwlyZWNfam9pbl9wcmVwKHBfcl9qb2luX2NoaWxkLCBwX2wsIHJfYmFnKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHBfci0+Z2V0X2VfaW5kKCkgPCBwX2wtPmdldF9lX2luZCgpICYmCisgICAgICBwX3ItPnNob3VsZF9iZV9taW5lKHBfbC0+cHJlZl9iX2l0KCksIHBfbC0+cHJlZl9lX2l0KCksIDAsIHRoaXMpKQorICAgIHsKKyAgICAgIG5vZGVfY29uc3RfcG9pbnRlciBwX3Jfam9pbl9jaGlsZCA9IHBfci0+Z2V0X2pvaW5fY2hpbGQocF9sLCB0aGlzKTsKKyAgICAgIGlmIChwX3Jfam9pbl9jaGlsZCAhPSAwKQorCXJlY19qb2luX3ByZXAocF9yX2pvaW5fY2hpbGQsIHBfbCwgcl9iYWcpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgcl9iYWcuYWRkX2JyYW5jaCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjX2pvaW4obm9kZV9wb2ludGVyIHBfbCwgbm9kZV9wb2ludGVyIHBfciwgc2l6ZV90eXBlIGNoZWNrZWRfaW5kLCAKKwkgYnJhbmNoX2JhZyYgcl9iYWcpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3IgIT0gMCk7CisgIGlmIChwX2wgPT0gMCkKKyAgICB7CisgICAgICBhcHBseV91cGRhdGUocF9yLCAobm9kZV91cGRhdGUqKXRoaXMpOworICAgICAgcmV0dXJuIChwX3IpOworICAgIH0KKworICBpZiAocF9sLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorICAgIHsKKyAgICAgIGlmIChwX3ItPm1fdHlwZSA9PSBsZWFmX25vZGUpCisJeworCSAgbm9kZV9wb2ludGVyIHBfcmV0ID0gcmVjX2pvaW4oc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX2wpLAorCQkJCQlzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfciksIHJfYmFnKTsKKwkgIGFwcGx5X3VwZGF0ZShwX3JldCwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKwkgIHJldHVybiBwX3JldDsKKwl9CisKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ItPm1fdHlwZSA9PSBpX25vZGUpOworICAgICAgbm9kZV9wb2ludGVyIHBfcmV0ID0gcmVjX2pvaW4oc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX2wpLAorCQkJCSAgICBzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX3IpLAorCQkJCSAgICBjaGVja2VkX2luZCwgcl9iYWcpOworICAgICAgYXBwbHlfdXBkYXRlKHBfcmV0LCAobm9kZV91cGRhdGUqKXRoaXMpOworICAgICAgcmV0dXJuIHBfcmV0OworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sLT5tX3R5cGUgPT0gaV9ub2RlKTsKKyAgaWYgKHBfci0+bV90eXBlID09IGxlYWZfbm9kZSkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9yZXQgPSByZWNfam9pbihzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX2wpLAorCQkJCSAgICBzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KHBfciksCisJCQkJICAgIGNoZWNrZWRfaW5kLCByX2JhZyk7CisgICAgICBhcHBseV91cGRhdGUocF9yZXQsIChub2RlX3VwZGF0ZSopdGhpcyk7CisgICAgICByZXR1cm4gcF9yZXQ7CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ItPm1fdHlwZSA9PSBpX25vZGUpOworICBub2RlX3BvaW50ZXIgcF9yZXQgPSByZWNfam9pbihzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX2wpLAorCQkJCXN0YXRpY19jYXN0PGlub2RlX3BvaW50ZXI+KHBfciksCisJCQkJcl9iYWcpOworCisgIGFwcGx5X3VwZGF0ZShwX3JldCwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgcmV0dXJuIHBfcmV0OworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjX2pvaW4obGVhZl9wb2ludGVyIHBfbCwgbGVhZl9wb2ludGVyIHBfciwgYnJhbmNoX2JhZyYgcl9iYWcpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3IgIT0gMCk7CisgIGlmIChwX2wgPT0gMCkKKyAgICByZXR1cm4gKHBfcik7CisgIG5vZGVfcG9pbnRlciBwX3JldCA9IGluc2VydF9icmFuY2gocF9sLCBwX3IsIHJfYmFnKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKFBCX0RTX1JFQ1VSU0lWRV9DT1VOVF9MRUFGUyhwX3JldCkgPT0gMik7CisgIHJldHVybiBwX3JldDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY19qb2luKGxlYWZfcG9pbnRlciBwX2wsIGlub2RlX3BvaW50ZXIgcF9yLCBzaXplX3R5cGUgY2hlY2tlZF9pbmQsCisJIGJyYW5jaF9iYWcmIHJfYmFnKQoreworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGNvbnN0IHNpemVfdHlwZSBsaHNfbGVhZnMgPSBQQl9EU19SRUNVUlNJVkVfQ09VTlRfTEVBRlMocF9sKTsKKyAgY29uc3Qgc2l6ZV90eXBlIHJoc19sZWFmcyA9IFBCX0RTX1JFQ1VSU0lWRV9DT1VOVF9MRUFGUyhwX3IpOworI2VuZGlmCisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfciAhPSAwKTsKKyAgbm9kZV9wb2ludGVyIHBfcmV0ID0gcmVjX2pvaW4ocF9yLCBwX2wsIGNoZWNrZWRfaW5kLCByX2JhZyk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChQQl9EU19SRUNVUlNJVkVfQ09VTlRfTEVBRlMocF9yZXQpID09IGxoc19sZWFmcyArIHJoc19sZWFmcyk7CisgIHJldHVybiBwX3JldDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlY19qb2luKGlub2RlX3BvaW50ZXIgcF9sLCBsZWFmX3BvaW50ZXIgcF9yLCBzaXplX3R5cGUgY2hlY2tlZF9pbmQsIGJyYW5jaF9iYWcmIHJfYmFnKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sICE9IDApOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9yICE9IDApOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgY29uc3Qgc2l6ZV90eXBlIGxoc19sZWFmcyA9IFBCX0RTX1JFQ1VSU0lWRV9DT1VOVF9MRUFGUyhwX2wpOworICBjb25zdCBzaXplX3R5cGUgcmhzX2xlYWZzID0gUEJfRFNfUkVDVVJTSVZFX0NPVU5UX0xFQUZTKHBfcik7CisjZW5kaWYKKworICBpZiAoIXBfbC0+c2hvdWxkX2JlX21pbmUocHJlZl9iZWdpbihwX3IpLCBwcmVmX2VuZChwX3IpLCBjaGVja2VkX2luZCwgdGhpcykpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfcmV0ID0gaW5zZXJ0X2JyYW5jaChwX2wsIHBfciwgcl9iYWcpOworICAgICAgUEJfRFNfQVNTRVJUX05PREVfVkFMSUQocF9yZXQpCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoUEJfRFNfUkVDVVJTSVZFX0NPVU5UX0xFQUZTKHBfcmV0KSA9PQorICAgICAgIAkJCSAgICBsaHNfbGVhZnMgKyByaHNfbGVhZnMpOworICAgICAgcmV0dXJuIHBfcmV0OworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF9wb3RfY2hpbGQgPSBwX2wtPmFkZF9jaGlsZChwX3IsIHByZWZfYmVnaW4ocF9yKSwKKwkJCQkJICAgIHByZWZfZW5kKHBfciksIHRoaXMpOworICBpZiAocF9wb3RfY2hpbGQgIT0gcF9yKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25ld19jaGlsZCA9IHJlY19qb2luKHBfcG90X2NoaWxkLCBwX3IsIHBfbC0+Z2V0X2VfaW5kKCksCisJCQkJCSAgcl9iYWcpOworCisgICAgICBwX2wtPnJlcGxhY2VfY2hpbGQocF9uZXdfY2hpbGQsIHByZWZfYmVnaW4ocF9uZXdfY2hpbGQpLAorCQkJIHByZWZfZW5kKHBfbmV3X2NoaWxkKSwgdGhpcyk7CisgICAgfQorCisgIFBCX0RTX0FTU0VSVF9OT0RFX1ZBTElEKHBfbCkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKFBCX0RTX1JFQ1VSU0lWRV9DT1VOVF9MRUFGUyhwX2wpID09IGxoc19sZWFmcyArIHJoc19sZWFmcyk7CisgIHJldHVybiBwX2w7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CityZWNfam9pbihpbm9kZV9wb2ludGVyIHBfbCwgaW5vZGVfcG9pbnRlciBwX3IsIAorCSBicmFuY2hfYmFnJiByX2JhZykKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbCAhPSAwKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfciAhPSAwKTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgIGNvbnN0IHNpemVfdHlwZSBsaHNfbGVhZnMgPSBQQl9EU19SRUNVUlNJVkVfQ09VTlRfTEVBRlMocF9sKTsKKyAgY29uc3Qgc2l6ZV90eXBlIHJoc19sZWFmcyA9IFBCX0RTX1JFQ1VSU0lWRV9DT1VOVF9MRUFGUyhwX3IpOworI2VuZGlmCisKKyAgaWYgKHBfbC0+Z2V0X2VfaW5kKCkgPT0gcF9yLT5nZXRfZV9pbmQoKSAmJgorICAgICAgc3ludGhfYWNjZXNzX3RyYWl0czo6ZXF1YWxfcHJlZml4ZXMocF9sLT5wcmVmX2JfaXQoKSwgcF9sLT5wcmVmX2VfaXQoKSwKKwkJCQkJICAgIHBfci0+cHJlZl9iX2l0KCksIHBfci0+cHJlZl9lX2l0KCkpKQorICAgIHsKKyAgICAgIGZvciAodHlwZW5hbWUgaW5vZGU6Oml0ZXJhdG9yIGl0ID0gcF9yLT5iZWdpbigpOworCSAgIGl0ICE9IHBfci0+ZW5kKCk7ICsrIGl0KQorCXsKKwkgIG5vZGVfcG9pbnRlciBwX25ld19jaGlsZCA9IHJlY19qb2luKHBfbC0+Z2V0X2pvaW5fY2hpbGQoKml0LCB0aGlzKSwKKwkJCQkJICAgICAgKiBpdCwgMCwgcl9iYWcpOworCSAgcF9sLT5yZXBsYWNlX2NoaWxkKHBfbmV3X2NoaWxkLCBwcmVmX2JlZ2luKHBfbmV3X2NoaWxkKSwKKwkJCSAgICAgcHJlZl9lbmQocF9uZXdfY2hpbGQpLCB0aGlzKTsKKwl9CisKKyAgICAgIHBfci0+fmlub2RlKCk7CisgICAgICBzX2lub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfciwgMSk7CisgICAgICBQQl9EU19BU1NFUlRfTk9ERV9WQUxJRChwX2wpCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoUEJfRFNfUkVDVVJTSVZFX0NPVU5UX0xFQUZTKHBfbCkgPT0gbGhzX2xlYWZzICsgcmhzX2xlYWZzKTsKKyAgICAgIHJldHVybiBwX2w7CisgICAgfQorCisgIGlmIChwX2wtPmdldF9lX2luZCgpIDwgcF9yLT5nZXRfZV9pbmQoKSAmJgorICAgICAgcF9sLT5zaG91bGRfYmVfbWluZShwX3ItPnByZWZfYl9pdCgpLCBwX3ItPnByZWZfZV9pdCgpLCAwLCB0aGlzKSkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXdfY2hpbGQgPSByZWNfam9pbihwX2wtPmdldF9qb2luX2NoaWxkKHBfciwgdGhpcyksCisJCQkJCSAgcF9yLCAwLCByX2JhZyk7CisgICAgICBwX2wtPnJlcGxhY2VfY2hpbGQocF9uZXdfY2hpbGQsIHByZWZfYmVnaW4ocF9uZXdfY2hpbGQpLAorCQkJIHByZWZfZW5kKHBfbmV3X2NoaWxkKSwgdGhpcyk7CisgICAgICBQQl9EU19BU1NFUlRfTk9ERV9WQUxJRChwX2wpCisgICAgICByZXR1cm4gcF9sOworICAgIH0KKworICBpZiAocF9yLT5nZXRfZV9pbmQoKSA8IHBfbC0+Z2V0X2VfaW5kKCkgJiYKKyAgICAgIHBfci0+c2hvdWxkX2JlX21pbmUocF9sLT5wcmVmX2JfaXQoKSwgcF9sLT5wcmVmX2VfaXQoKSwgMCwgdGhpcykpCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV3X2NoaWxkID0gcmVjX2pvaW4ocF9yLT5nZXRfam9pbl9jaGlsZChwX2wsIHRoaXMpLCBwX2wsCisJCQkJCSAgMCwgcl9iYWcpOworCisgICAgICBwX3ItPnJlcGxhY2VfY2hpbGQocF9uZXdfY2hpbGQsIHByZWZfYmVnaW4ocF9uZXdfY2hpbGQpLAorCQkJIHByZWZfZW5kKHBfbmV3X2NoaWxkKSwgdGhpcyk7CisKKyAgICAgIFBCX0RTX0FTU0VSVF9OT0RFX1ZBTElEKHBfcikKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChQQl9EU19SRUNVUlNJVkVfQ09VTlRfTEVBRlMocF9yKSA9PSBsaHNfbGVhZnMgKyByaHNfbGVhZnMpOworICAgICAgcmV0dXJuIHBfcjsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfcmV0ID0gaW5zZXJ0X2JyYW5jaChwX2wsIHBfciwgcl9iYWcpOworICBQQl9EU19BU1NFUlRfTk9ERV9WQUxJRChwX3JldCkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKFBCX0RTX1JFQ1VSU0lWRV9DT1VOVF9MRUFGUyhwX3JldCkgPT0gbGhzX2xlYWZzICsgcmhzX2xlYWZzKTsKKyAgcmV0dXJuIHBfcmV0OworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHN0ZDo6cGFpcjx0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IsIGJvb2w+CitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsKQoreworICBub2RlX3BvaW50ZXIgcF9sZiA9IGZpbmRfaW1wKFBCX0RTX1YyRihyX3ZhbCkpOworICBpZiAocF9sZiAhPSAwICYmIHBfbGYtPm1fdHlwZSA9PSBsZWFmX25vZGUgJiYKKyAgICAgIHN5bnRoX2FjY2Vzc190cmFpdHM6OmVxdWFsX2tleXMoUEJfRFNfVjJGKHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4ocF9sZiktPnZhbHVlKCkpLCBQQl9EU19WMkYocl92YWwpKSkKKyAgICB7CisgICAgICBQQl9EU19DSEVDS19LRVlfRVhJU1RTKFBCX0RTX1YyRihyX3ZhbCkpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihwX2xmKSwgZmFsc2UpOworICAgIH0KKworICBQQl9EU19DSEVDS19LRVlfRE9FU19OT1RfRVhJU1QoUEJfRFNfVjJGKHJfdmFsKSkKKworICBsZWFmX3BvaW50ZXIgcF9uZXdfbGYgPSBzX2xlYWZfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICBjb25kX2RlYWx0b3IgY29uZChwX25ld19sZik7CisKKyAgbmV3IChwX25ld19sZikgbGVhZihyX3ZhbCk7CisgIGFwcGx5X3VwZGF0ZShwX25ld19sZiwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgY29uZC5zZXRfY2FsbF9kZXN0cnVjdG9yKCk7CisgIGJyYW5jaF9iYWcgYmFnOworICBiYWcuYWRkX2JyYW5jaCgpOworICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9IHJlY19qb2luKG1fcF9oZWFkLT5tX3BfcGFyZW50LCBwX25ld19sZiwgMCwgYmFnKTsKKyAgbV9wX2hlYWQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPSBtX3BfaGVhZDsKKyAgY29uZC5zZXRfbm9fYWN0aW9uX2R0b3IoKTsKKyAgKyttX3NpemU7CisgIHVwZGF0ZV9taW5fbWF4X2Zvcl9pbnNlcnRlZF9sZWFmKHBfbmV3X2xmKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjppbnNlcnRfbmV3KFBCX0RTX1YyRihyX3ZhbCkpOykKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwb2ludF9pdGVyYXRvcihwX25ld19sZiksIHRydWUpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6Ogora2V5c19kaWZmX2luZCh0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBiX2wsCisJICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZV9sLAorCSAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGJfciwKKwkgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlX3IpCit7CisgIHNpemVfdHlwZSBkaWZmX3BvcyA9IDA7CisgIHdoaWxlIChiX2wgIT0gZV9sKQorICAgIHsKKyAgICAgIGlmIChiX3IgPT0gZV9yKQorCXJldHVybiAoZGlmZl9wb3MpOworICAgICAgaWYgKGFjY2Vzc190cmFpdHM6OmVfcG9zKCpiX2wpICE9IGFjY2Vzc190cmFpdHM6OmVfcG9zKCpiX3IpKQorCXJldHVybiAoZGlmZl9wb3MpOworICAgICAgKytiX2w7CisgICAgICArK2JfcjsKKyAgICAgICsrZGlmZl9wb3M7CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYl9yICE9IGVfcik7CisgIHJldHVybiBkaWZmX3BvczsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppbm9kZV9wb2ludGVyCitQQl9EU19DTEFTU19DX0RFQzo6CitpbnNlcnRfYnJhbmNoKG5vZGVfcG9pbnRlciBwX2wsIG5vZGVfcG9pbnRlciBwX3IsIGJyYW5jaF9iYWcmIHJfYmFnKQoreworICB0eXBlbmFtZSBzeW50aF9hY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBsZWZ0X2JfaXQgPSBwcmVmX2JlZ2luKHBfbCk7CisgIHR5cGVuYW1lIHN5bnRoX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGxlZnRfZV9pdCA9IHByZWZfZW5kKHBfbCk7CisgIHR5cGVuYW1lIHN5bnRoX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIHJpZ2h0X2JfaXQgPSBwcmVmX2JlZ2luKHBfcik7CisgIHR5cGVuYW1lIHN5bnRoX2FjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIHJpZ2h0X2VfaXQgPSBwcmVmX2VuZChwX3IpOworCisgIGNvbnN0IHNpemVfdHlwZSBkaWZmX2luZCA9IGtleXNfZGlmZl9pbmQobGVmdF9iX2l0LCBsZWZ0X2VfaXQsCisJCQkJCSAgIHJpZ2h0X2JfaXQsIHJpZ2h0X2VfaXQpOworCisgIGlub2RlX3BvaW50ZXIgcF9uZXdfbmQgPSByX2JhZy5nZXRfYnJhbmNoKCk7CisgIG5ldyAocF9uZXdfbmQpIGlub2RlKGRpZmZfaW5kLCBsZWZ0X2JfaXQpOworICBwX25ld19uZC0+YWRkX2NoaWxkKHBfbCwgbGVmdF9iX2l0LCBsZWZ0X2VfaXQsIHRoaXMpOworICBwX25ld19uZC0+YWRkX2NoaWxkKHBfciwgcmlnaHRfYl9pdCwgcmlnaHRfZV9pdCwgdGhpcyk7CisgIHBfbC0+bV9wX3BhcmVudCA9IHBfbmV3X25kOworICBwX3ItPm1fcF9wYXJlbnQgPSBwX25ld19uZDsKKyAgUEJfRFNfQVNTRVJUX05PREVfVkFMSUQocF9uZXdfbmQpCisgIHJldHVybiAocF9uZXdfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlX21pbl9tYXhfZm9yX2luc2VydGVkX2xlYWYobGVhZl9wb2ludGVyIHBfbmV3X2xmKQoreworICBpZiAobV9wX2hlYWQtPm1fcF9taW4gPT0gbV9wX2hlYWQgfHwKKyAgICAgIHN5bnRoX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKFBCX0RTX1YyRihwX25ld19sZi0+dmFsdWUoKSksCisJCQkJICAgICAgUEJfRFNfVjJGKHN0YXRpY19jYXN0PGxlYWZfY29uc3RfcG9pbnRlcj4obV9wX2hlYWQtPm1fcF9taW4pLT52YWx1ZSgpKSkpCisgICAgbV9wX2hlYWQtPm1fcF9taW4gPSBwX25ld19sZjsKKworICBpZiAobV9wX2hlYWQtPm1fcF9tYXggPT0gbV9wX2hlYWQgfHwKKyAgICAgIHN5bnRoX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKFBCX0RTX1YyRihzdGF0aWNfY2FzdDxsZWFmX2NvbnN0X3BvaW50ZXI+KG1fcF9oZWFkLT5tX3BfbWF4KS0+dmFsdWUoKSksIFBCX0RTX1YyRihwX25ld19sZi0+dmFsdWUoKSkpKQorICAgIG1fcF9oZWFkLT5tX3BfbWF4ID0gcF9uZXdfbGY7Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNWJhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2l0ZXJhdG9yc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEyMCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwYXRfdHJpZV8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWUuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luKCkKK3sgcmV0dXJuIGl0ZXJhdG9yKG1fcF9oZWFkLT5tX3BfbWluKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYmVnaW4oKSBjb25zdAoreyByZXR1cm4gY29uc3RfaXRlcmF0b3IobV9wX2hlYWQtPm1fcF9taW4pOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKQoreyByZXR1cm4gaXRlcmF0b3IobV9wX2hlYWQpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoKSBjb25zdAoreyByZXR1cm4gY29uc3RfaXRlcmF0b3IobV9wX2hlYWQpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JiZWdpbigpIGNvbnN0Cit7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiByZW5kKCk7CisgIHJldHVybiAtLWVuZCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpyZXZlcnNlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CityYmVnaW4oKQoreworICBpZiAoZW1wdHkoKSkKKyAgICByZXR1cm4gcmVuZCgpOworICByZXR1cm4gLS1lbmQoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cmV2ZXJzZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVuZCgpCit7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKG1fcF9oZWFkKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CityZW5kKCkgY29uc3QKK3sgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IobV9wX2hlYWQpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfY29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfYmVnaW4oKSBjb25zdAoreyByZXR1cm4gbm9kZV9jb25zdF9pdGVyYXRvcihtX3BfaGVhZC0+bV9wX3BhcmVudCwgdGhpcyk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm9kZV9iZWdpbigpCit7IHJldHVybiBub2RlX2l0ZXJhdG9yKG1fcF9oZWFkLT5tX3BfcGFyZW50LCB0aGlzKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2NvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6Citub2RlX2VuZCgpIGNvbnN0Cit7IHJldHVybiBub2RlX2NvbnN0X2l0ZXJhdG9yKDAsIHRoaXMpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vZGVfZW5kKCkKK3sgcmV0dXJuIG5vZGVfaXRlcmF0b3IoMCwgdGhpcyk7IH0KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wYXRfdHJpZV8uaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wYXRfdHJpZV8uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODFjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3BhdF90cmllXy5ocHAKQEAgLTAsMCArMSw1OTYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGF0X3RyaWVfL3BhdF90cmllXy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBhIHBhdHJpY2lhIHRyZWUuCisgKi8KKworI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZXhjZXB0aW9uLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2NvbmRfZGVhbHRvci5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVzX3RyYWl0cy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9lcV9mbi9lcV9ieV9sZXNzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9zeW50aF9hY2Nlc3NfdHJhaXRzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wYXRfdHJpZV9iYXNlLmhwcD4KKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvZGVidWdfbWFwX2Jhc2UuaHBwPgorI2VuZGlmCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjaWZkZWYgUEJfRFNfREFUQV9UUlVFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19QQVRfVFJJRV9OQU1FIHBhdF90cmllX21hcAorI2VuZGlmCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorI2RlZmluZSBQQl9EU19QQVRfVFJJRV9OQU1FIHBhdF90cmllX3NldAorI2VuZGlmCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHMsIFwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgUEJfRFNfUEFUX1RSSUVfTkFNRTxLZXksIE1hcHBlZCwgTm9kZV9BbmRfSXRfVHJhaXRzLCBfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfUEFUX1RSSUVfVFJBSVRTX0JBU0UgXAorICAgIHR5cGVzX3RyYWl0czxLZXksIE1hcHBlZCwgX0FsbG9jLCBmYWxzZT4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjZGVmaW5lIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDIFwKKyAgICBkZWJ1Z19tYXBfYmFzZTxLZXksCWVxX2J5X2xlc3M8S2V5LCBzdGQ6Omxlc3M8S2V5PiA+LCBcCisJCSB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxLZXk+OjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlPgorI2VuZGlmCisKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgUEFUUklDSUEgdHJpZS4KKyAgICAgKiAgQGluZ3JvdXAgYnJhbmNoLWRldGFpbAorICAgICAqCisgICAgICogIFRoaXMgaW1wbGVtZW50YXRpb24gbG9vc2VseSBib3Jyb3dzIGlkZWFzIGZyb206CisgICAgICogIDEpIEZhc3QgTWVyZ2VhYmxlIEludGVnZXIgTWFwcywgT2thc2FraSwgR2lsbCAxOTk4CisgICAgICogIDIpIFB0c2V0OiBTZXRzIG9mIGludGVnZXJzIGltcGxlbWVudGVkIGFzIFBhdHJpY2lhIHRyZWVzLAorICAgICAqICAgICBKZWFuLUNocmlzdG9waGUgRmlsbGlhdHIsIDIwMDAKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIFBCX0RTX1BBVF9UUklFX05BTUUgOgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICBwdWJsaWMgUEJfRFNfREVCVUdfTUFQX0JBU0VfQ19ERUMsCisjZW5kaWYKKyAgICAgIHB1YmxpYyBOb2RlX0FuZF9JdF9UcmFpdHM6OnN5bnRoX2FjY2Vzc190cmFpdHMsCisgICAgICBwdWJsaWMgTm9kZV9BbmRfSXRfVHJhaXRzOjpub2RlX3VwZGF0ZSwKKyAgICAgIHB1YmxpYyBQQl9EU19QQVRfVFJJRV9UUkFJVFNfQkFTRSwKKyAgICAgIHB1YmxpYyBwYXRfdHJpZV9iYXNlCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHBhdF90cmllX2Jhc2UJCQkJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiBQQl9EU19QQVRfVFJJRV9UUkFJVFNfQkFTRSAJICAgICAgIAl0cmFpdHNfYmFzZTsKKyAgICAgIHR5cGVkZWYgTm9kZV9BbmRfSXRfVHJhaXRzCQkJdHJhaXRzX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN5bnRoX2FjY2Vzc190cmFpdHMgc3ludGhfYWNjZXNzX3RyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3ludGhfYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgYV9jb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6bm9kZSAJCW5vZGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPG5vZGU+CV9fcmViaW5kX247CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX246Om90aGVyOjpjb25zdF9wb2ludGVyIG5vZGVfY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbjo6b3RoZXI6OnBvaW50ZXIgCW5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aGVhZCAJCWhlYWQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGhlYWQ+CV9fcmViaW5kX2g7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2g6Om90aGVyIAkJaGVhZF9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGhlYWRfYWxsb2NhdG9yOjpwb2ludGVyIAkJaGVhZF9wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpsZWFmIAkJbGVhZjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8bGVhZj4JX19yZWJpbmRfbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbDo6b3RoZXIgCQlsZWFmX2FsbG9jYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbGVhZl9hbGxvY2F0b3I6OnBvaW50ZXIgCQlsZWFmX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGxlYWZfYWxsb2NhdG9yOjpjb25zdF9wb2ludGVyIAlsZWFmX2NvbnN0X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Omlub2RlIAkJaW5vZGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGlub2RlOjppdGVyYXRvciAJCQlpbm9kZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8aW5vZGU+IAlfX3JlYmluZF9pbjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfaW46Om90aGVyIAkJX19yZWJpbmRfaW5hOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9pbjo6b3RoZXIgICAgICAJICAgICAgIAlpbm9kZV9hbGxvY2F0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2luYTo6cG9pbnRlciAJCWlub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2luYTo6Y29uc3RfcG9pbnRlciAJaW5vZGVfY29uc3RfcG9pbnRlcjsKKworCisgICAgICAvLy8gQ29uZGl0aW9uYWwgZGVhbGxvY2F0b3IuCisgICAgICBjbGFzcyBjb25kX2RlYWx0b3IKKyAgICAgIHsKKyAgICAgIHByb3RlY3RlZDoKKwlsZWFmX3BvaW50ZXIgCQltX3BfbmQ7CisJYm9vbCAJCQltX25vX2FjdGlvbl9kdG9yOworCWJvb2wgCQkJbV9jYWxsX2Rlc3RydWN0b3I7CisKKyAgICAgIHB1YmxpYzoKKwljb25kX2RlYWx0b3IobGVhZl9wb2ludGVyIHBfbmQpCisJOiBtX3BfbmQocF9uZCksIG1fbm9fYWN0aW9uX2R0b3IoZmFsc2UpLCBtX2NhbGxfZGVzdHJ1Y3RvcihmYWxzZSkKKwl7IH0KKworCXZvaWQKKwlzZXRfbm9fYWN0aW9uX2R0b3IoKQorCXsgbV9ub19hY3Rpb25fZHRvciA9IHRydWU7IH0KKworCXZvaWQKKwlzZXRfY2FsbF9kZXN0cnVjdG9yKCkKKwl7IG1fY2FsbF9kZXN0cnVjdG9yID0gdHJ1ZTsgfQorCisJfmNvbmRfZGVhbHRvcigpCisJeworCSAgaWYgKG1fbm9fYWN0aW9uX2R0b3IpCisJICAgIHJldHVybjsKKworCSAgaWYgKG1fY2FsbF9kZXN0cnVjdG9yKQorCSAgICBtX3BfbmQtPn5sZWFmKCk7CisKKwkgIHNfbGVhZl9hbGxvY2F0b3IuZGVhbGxvY2F0ZShtX3BfbmQsIDEpOworCX0KKyAgICAgIH07CisKKworICAgICAgLy8vIEJyYW5jaCBiYWcsIGZvciBzcGxpdC1qb2luLgorICAgICAgY2xhc3MgYnJhbmNoX2JhZworICAgICAgeworICAgICAgcHJpdmF0ZToKKwl0eXBlZGVmIGlub2RlX3BvaW50ZXIgCQkJICAgICAgIAlfX2lucDsKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9faW5wPjo6b3RoZXIgCV9fcmViaW5kX2lucDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisJdHlwZWRlZiBzdGQ6Ol9HTElCQ1hYX1NURF9DOjpsaXN0PF9faW5wLCBfX3JlYmluZF9pbnA+IAliYWdfdHlwZTsKKyNlbHNlCisJdHlwZWRlZiBzdGQ6Omxpc3Q8X19pbnAsIF9fcmViaW5kX2lucD4gCQkJYmFnX3R5cGU7CisjZW5kaWYKKworCWJhZ190eXBlIAkJCQkJCW1fYmFnOworICAgICAgcHVibGljOgorCXZvaWQKKwlhZGRfYnJhbmNoKCkKKwl7CisJICBpbm9kZV9wb2ludGVyIHBfbmQgPSBzX2lub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBtX2JhZy5wdXNoX2JhY2socF9uZCk7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgc19pbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX25kLCAxKTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKworCWlub2RlX3BvaW50ZXIKKwlnZXRfYnJhbmNoKCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIW1fYmFnLmVtcHR5KCkpOworCSAgaW5vZGVfcG9pbnRlciBwX25kID0gKm1fYmFnLmJlZ2luKCk7CisJICBtX2JhZy5wb3BfZnJvbnQoKTsKKwkgIHJldHVybiBwX25kOworCX0KKworCX5icmFuY2hfYmFnKCkKKwl7CisJICB3aGlsZSAoIW1fYmFnLmVtcHR5KCkpCisJICAgIHsKKwkgICAgICBpbm9kZV9wb2ludGVyIHBfbmQgPSAqbV9iYWcuYmVnaW4oKTsKKwkgICAgICBzX2lub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKHBfbmQsIDEpOworCSAgICAgIG1fYmFnLnBvcF9mcm9udCgpOworCSAgICB9CisJfQorCisJaW5saW5lIGJvb2wKKwllbXB0eSgpIGNvbnN0CisJeyByZXR1cm4gbV9iYWcuZW1wdHkoKTsgfQorICAgICAgfTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB0eXBlZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDIAkJZGVidWdfYmFzZTsKKyNlbmRpZgorCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpudWxsX25vZGVfdXBkYXRlX3BvaW50ZXIgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBwYXRfdHJpZV90YWcgCQkJCWNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jIAkJCQkJYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSAJCWRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6a2V5X3R5cGUgCQlrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9wb2ludGVyIAlrZXlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9jb25zdF9wb2ludGVyIAlrZXlfY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmtleV9yZWZlcmVuY2UgCWtleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjprZXlfY29uc3RfcmVmZXJlbmNlIGtleV9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfdHlwZSAJbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfcG9pbnRlciAJbWFwcGVkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfY29uc3RfcG9pbnRlciBtYXBwZWRfY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6Om1hcHBlZF9yZWZlcmVuY2UgCW1hcHBlZF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjptYXBwZWRfY29uc3RfcmVmZXJlbmNlIG1hcHBlZF9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c19iYXNlOjp2YWx1ZV90eXBlIAkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnBvaW50ZXIgCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfYmFzZTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OnJlZmVyZW5jZSAJCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX2Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAJY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjphY2Nlc3NfdHJhaXRzIAlhY2Nlc3NfdHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6Y29uc3RfaXRlcmF0b3IgCXBvaW50X2NvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aXRlcmF0b3IgCQlwb2ludF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgcG9pbnRfY29uc3RfaXRlcmF0b3IgCQkJY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHBvaW50X2l0ZXJhdG9yIAkJCQlpdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciAJcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om5vZGVfY29uc3RfaXRlcmF0b3Igbm9kZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om5vZGVfaXRlcmF0b3IgCW5vZGVfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpub2RlX3VwZGF0ZSAJbm9kZV91cGRhdGU7CisKKyAgICAgIFBCX0RTX1BBVF9UUklFX05BTUUoKTsKKworICAgICAgUEJfRFNfUEFUX1RSSUVfTkFNRShjb25zdCBhY2Nlc3NfdHJhaXRzJik7CisKKyAgICAgIFBCX0RTX1BBVF9UUklFX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB+UEJfRFNfUEFUX1RSSUVfTkFNRSgpOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdDsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0OworCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0OworCisgICAgICBhY2Nlc3NfdHJhaXRzJgorICAgICAgZ2V0X2FjY2Vzc190cmFpdHMoKTsKKworICAgICAgY29uc3QgYWNjZXNzX3RyYWl0cyYKKyAgICAgIGdldF9hY2Nlc3NfdHJhaXRzKCkgY29uc3Q7CisKKyAgICAgIG5vZGVfdXBkYXRlJgorICAgICAgZ2V0X25vZGVfdXBkYXRlKCk7CisKKyAgICAgIGNvbnN0IG5vZGVfdXBkYXRlJgorICAgICAgZ2V0X25vZGVfdXBkYXRlKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIG1hcHBlZF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKKyAgICAgIHsKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisJcmV0dXJuIGluc2VydChzdGQ6Om1ha2VfcGFpcihyX2tleSwgbWFwcGVkX3R5cGUoKSkpLmZpcnN0LT5zZWNvbmQ7CisjZWxzZQorCWluc2VydChyX2tleSk7CisJcmV0dXJuIHRyYWl0c19iYXNlOjpzX251bGxfdHlwZTsKKyNlbmRpZgorICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBwb2ludF9jb25zdF9pdGVyYXRvcgorICAgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIHBvaW50X2NvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIHBvaW50X2NvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVyYXNlKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yKTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IpOworI2VuZGlmCisKKyAgICAgIGlubGluZSBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKTsKKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyAgICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBlcmFzZShyZXZlcnNlX2l0ZXJhdG9yKTsKKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3BsaXQoa2V5X2NvbnN0X3JlZmVyZW5jZSwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBpdGVyYXRvcgorICAgICAgZW5kKCk7CisKKyAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKTsKKworICAgICAgaW5saW5lIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0OworCisgICAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpOworCisgICAgICBpbmxpbmUgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0OworCisgICAgICAvLy8gUmV0dXJucyBhIGNvbnN0IG5vZGVfaXRlcmF0b3IgY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSBhdCB0aGUKKyAgICAgIC8vLyByb290IG9mIHRoZSB0cmVlLgorICAgICAgaW5saW5lIG5vZGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG5vZGVfYmVnaW4oKSBjb25zdDsKKworICAgICAgLy8vIFJldHVybnMgYSBub2RlX2l0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vZGUgYXQgdGhlCisgICAgICAvLy8gcm9vdCBvZiB0aGUgdHJlZS4KKyAgICAgIGlubGluZSBub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2JlZ2luKCk7CisKKyAgICAgIC8vLyBSZXR1cm5zIGEgY29uc3Qgbm9kZV9pdGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIGEgbm9kZSBqdXN0CisgICAgICAvLy8gYWZ0ZXIgYSBsZWFmIG9mIHRoZSB0cmVlLgorICAgICAgaW5saW5lIG5vZGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG5vZGVfZW5kKCkgY29uc3Q7CisKKyAgICAgIC8vLyBSZXR1cm5zIGEgbm9kZV9pdGVyYXRvciBjb3JyZXNwb25kaW5nIHRvIGEgbm9kZSBqdXN0CisgICAgICAvLy8gYWZ0ZXIgYSBsZWFmIG9mIHRoZSB0cmVlLgorICAgICAgaW5saW5lIG5vZGVfaXRlcmF0b3IKKyAgICAgIG5vZGVfZW5kKCk7CisKKyNpZmRlZiBQQl9EU19QQVRfVFJJRV9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX3JhbmdlKEl0LCBJdCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHZhbHVlX3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgbm9kZV9wb2ludGVyCisgICAgICByZWN1cnNpdmVfY29weV9ub2RlKG5vZGVfY29uc3RfcG9pbnRlcik7CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgaW5pdGlhbGl6ZSgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgYXBwbHlfdXBkYXRlKG5vZGVfcG9pbnRlciwgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9VcGRhdGVfPgorICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGFwcGx5X3VwZGF0ZShub2RlX3BvaW50ZXIsIE5vZGVfVXBkYXRlXyopOworCisgICAgICBib29sCisgICAgICBqb2luX3ByZXAoUEJfRFNfQ0xBU1NfQ19ERUMmLCBicmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlY19qb2luX3ByZXAobm9kZV9jb25zdF9wb2ludGVyLCBub2RlX2NvbnN0X3BvaW50ZXIsIGJyYW5jaF9iYWcmKTsKKworICAgICAgdm9pZAorICAgICAgcmVjX2pvaW5fcHJlcChsZWFmX2NvbnN0X3BvaW50ZXIsIGxlYWZfY29uc3RfcG9pbnRlciwgYnJhbmNoX2JhZyYpOworCisgICAgICB2b2lkCisgICAgICByZWNfam9pbl9wcmVwKGxlYWZfY29uc3RfcG9pbnRlciwgaW5vZGVfY29uc3RfcG9pbnRlciwgYnJhbmNoX2JhZyYpOworCisgICAgICB2b2lkCisgICAgICByZWNfam9pbl9wcmVwKGlub2RlX2NvbnN0X3BvaW50ZXIsIGxlYWZfY29uc3RfcG9pbnRlciwgYnJhbmNoX2JhZyYpOworCisgICAgICB2b2lkCisgICAgICByZWNfam9pbl9wcmVwKGlub2RlX2NvbnN0X3BvaW50ZXIsIGlub2RlX2NvbnN0X3BvaW50ZXIsIGJyYW5jaF9iYWcmKTsKKworICAgICAgbm9kZV9wb2ludGVyCisgICAgICByZWNfam9pbihub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlciwgc2l6ZV90eXBlLCBicmFuY2hfYmFnJik7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcmVjX2pvaW4obGVhZl9wb2ludGVyLCBsZWFmX3BvaW50ZXIsIGJyYW5jaF9iYWcmKTsKKworICAgICAgbm9kZV9wb2ludGVyCisgICAgICByZWNfam9pbihsZWFmX3BvaW50ZXIsIGlub2RlX3BvaW50ZXIsIHNpemVfdHlwZSwgYnJhbmNoX2JhZyYpOworCisgICAgICBub2RlX3BvaW50ZXIKKyAgICAgIHJlY19qb2luKGlub2RlX3BvaW50ZXIsIGxlYWZfcG9pbnRlciwgc2l6ZV90eXBlLCBicmFuY2hfYmFnJik7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcmVjX2pvaW4oaW5vZGVfcG9pbnRlciwgaW5vZGVfcG9pbnRlciwgYnJhbmNoX2JhZyYpOworCisgICAgICBzaXplX3R5cGUKKyAgICAgIGtleXNfZGlmZl9pbmQodHlwZW5hbWUgYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IsCisJCSAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciwKKwkJICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yLAorCQkgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IpOworCisgICAgICBpbm9kZV9wb2ludGVyCisgICAgICBpbnNlcnRfYnJhbmNoKG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyLCBicmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHVwZGF0ZV9taW5fbWF4X2Zvcl9pbnNlcnRlZF9sZWFmKGxlYWZfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlX2xlYWYobGVhZl9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGFjdHVhbF9lcmFzZV9sZWFmKGxlYWZfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyX2ltcChub2RlX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBlcmFzZV9maXh1cChpbm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgdXBkYXRlX21pbl9tYXhfZm9yX2VyYXNlZF9sZWFmKGxlYWZfcG9pbnRlcik7CisKKyAgICAgIHN0YXRpYyBpbmxpbmUgYV9jb25zdF9pdGVyYXRvcgorICAgICAgcHJlZl9iZWdpbihub2RlX2NvbnN0X3BvaW50ZXIpOworCisgICAgICBzdGF0aWMgaW5saW5lIGFfY29uc3RfaXRlcmF0b3IKKyAgICAgIHByZWZfZW5kKG5vZGVfY29uc3RfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGZpbmRfaW1wKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBsb3dlcl9ib3VuZF9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIHVwcGVyX2JvdW5kX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBsZWFmX2NvbnN0X3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQobm9kZV9jb25zdF9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBsZWFmX3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBsZWFmX2NvbnN0X3BvaW50ZXIKKyAgICAgIHJpZ2h0bW9zdF9kZXNjZW5kYW50KG5vZGVfY29uc3RfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSBzdGF0aWMgbGVhZl9wb2ludGVyCisgICAgICByaWdodG1vc3RfZGVzY2VuZGFudChub2RlX3BvaW50ZXIpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF92YWxpZChjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X2l0ZXJhdG9ycyhjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3JldmVyc2VfaXRlcmF0b3JzKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICBzdGF0aWMgc2l6ZV90eXBlCisgICAgICByZWN1cnNpdmVfY291bnRfbGVhZnMobm9kZV9jb25zdF9wb2ludGVyLCBjb25zdCBjaGFyKiwgaW50KTsKKyNlbmRpZgorCisjaWZkZWYgUEJfRFNfUEFUX1RSSUVfVFJBQ0VfCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgdHJhY2Vfbm9kZShub2RlX2NvbnN0X3BvaW50ZXIsIHNpemVfdHlwZSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhXz4KKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICB0cmFjZV9ub2RlX21ldGFkYXRhKG5vZGVfY29uc3RfcG9pbnRlciwgdHlwZV90b190eXBlPE1ldGFkYXRhXz4pOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgdHJhY2Vfbm9kZV9tZXRhZGF0YShub2RlX2NvbnN0X3BvaW50ZXIsIHR5cGVfdG9fdHlwZTxudWxsX3R5cGU+KTsKKyNlbmRpZgorCisgICAgICBsZWFmX3BvaW50ZXIKKyAgICAgIHNwbGl0X3ByZXAoa2V5X2NvbnN0X3JlZmVyZW5jZSwgUEJfRFNfQ0xBU1NfQ19ERUMmLCBicmFuY2hfYmFnJik7CisKKyAgICAgIG5vZGVfcG9pbnRlcgorICAgICAgcmVjX3NwbGl0KG5vZGVfcG9pbnRlciwgYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9pdGVyYXRvciwKKwkJUEJfRFNfQ0xBU1NfQ19ERUMmLCBicmFuY2hfYmFnJik7CisKKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0X2luc2VydF9icmFuY2goc2l6ZV90eXBlLCBhX2NvbnN0X2l0ZXJhdG9yLCBpbm9kZV9pdGVyYXRvciwKKwkJCSAgc2l6ZV90eXBlLCBicmFuY2hfYmFnJik7CisKKyAgICAgIHN0YXRpYyBoZWFkX2FsbG9jYXRvciAJCXNfaGVhZF9hbGxvY2F0b3I7CisgICAgICBzdGF0aWMgaW5vZGVfYWxsb2NhdG9yIAkJc19pbm9kZV9hbGxvY2F0b3I7CisgICAgICBzdGF0aWMgbGVhZl9hbGxvY2F0b3IgCQlzX2xlYWZfYWxsb2NhdG9yOworCisgICAgICBoZWFkX3BvaW50ZXIgCQkJbV9wX2hlYWQ7CisgICAgICBzaXplX3R5cGUgCQkJbV9zaXplOworICAgIH07CisKKyNkZWZpbmUgUEJfRFNfQVNTRVJUX05PREVfVkFMSUQoWCkgXAorICBfR0xJQkNYWF9ERUJVR19PTkxZKFgtPmFzc2VydF92YWxpZCh0aGlzLCBfX0ZJTEVfXywgX19MSU5FX18pOykKKworI2RlZmluZSBQQl9EU19SRUNVUlNJVkVfQ09VTlRfTEVBRlMoWCkgXAorICByZWN1cnNpdmVfY291bnRfbGVhZnMoWCwgX19GSUxFX18sIF9fTElORV9fKQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaXRlcmF0b3JzX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2luc2VydF9qb2luX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2VyYXNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2ZpbmRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vaW5mb19mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3NwbGl0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3RyYWNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3VwZGF0ZV9mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX1JFQ1VSU0lWRV9DT1VOVF9MRUFGUworI3VuZGVmIFBCX0RTX0FTU0VSVF9OT0RFX1ZBTElECisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX1BBVF9UUklFX05BTUUKKyN1bmRlZiBQQl9EU19QQVRfVFJJRV9UUkFJVFNfQkFTRQorI3VuZGVmIFBCX0RTX0RFQlVHX01BUF9CQVNFX0NfREVDCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9wYXRfdHJpZV9iYXNlLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcGF0X3RyaWVfYmFzZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcGF0X3RyaWVfYmFzZS5ocHAKQEAgLTAsMCArMSwxMzYxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhdF90cmllXy9wYXRfdHJpZV9iYXNlLmhwcAorICogQ29udGFpbnMgdGhlIGJhc2UgY2xhc3MgZm9yIGEgcGF0cmljaWEgdHJlZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BBVF9UUklFX0JBU0UKKyNkZWZpbmUgUEJfRFNfUEFUX1RSSUVfQkFTRQorCisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLy8vIEJhc2UgdHlwZSBmb3IgUEFUUklDSUEgdHJlZXMuCisgICAgc3RydWN0IHBhdF90cmllX2Jhc2UKKyAgICB7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRocmVlIHR5cGVzIG9mIG5vZGVzLgorICAgICAgICoKKyAgICAgICAqICBpX25vZGUgaXMgdXNlZCBieSBfSW5vZGUsIGxlYWZfbm9kZSBieSBfTGVhZiwgYW5kIGhlYWRfbm9kZSBieSBfSGVhZC4KKyAgICAgICAqLworICAgICAgZW51bSBub2RlX3R5cGUKKwl7CisJICBpX25vZGUsCisJICBsZWFmX25vZGUsCisJICBoZWFkX25vZGUKKwl9OworCisgICAgICAvLy8gTWV0YWRhdGEgYmFzZSBwcmltYXJ5IHRlbXBsYXRlLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGEsIHR5cGVuYW1lIF9BbGxvYz4KKwlzdHJ1Y3QgX01ldGFkYXRhCisJeworCSAgdHlwZWRlZiBNZXRhZGF0YSAgICAgCQkJCQltZXRhZGF0YV90eXBlOworCSAgdHlwZWRlZiBfQWxsb2MgICAgIAkJCQkJYWxsb2NhdG9yX3R5cGU7CisJICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPE1ldGFkYXRhPglfX3JlYmluZF9tOworCSAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9tOjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlICBjb25zdF9yZWZlcmVuY2U7CisKKwkgIGNvbnN0X3JlZmVyZW5jZQorCSAgZ2V0X21ldGFkYXRhKCkgY29uc3QKKwkgIHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KKworCSAgbWV0YWRhdGFfdHlwZSAJCQkJCW1fbWV0YWRhdGE7CisJfTsKKworICAgICAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBudWxsIG1ldGFkYXRhLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorCXN0cnVjdCBfTWV0YWRhdGE8bnVsbF90eXBlLCBfQWxsb2M+CisJeworCSAgdHlwZWRlZiBudWxsX3R5cGUgCQkJCQltZXRhZGF0YV90eXBlOworCSAgdHlwZWRlZiBfQWxsb2MgICAgIAkJCQkJYWxsb2NhdG9yX3R5cGU7CisJfTsKKworCisgICAgICAvLy8gTm9kZSBiYXNlLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FUcmFpdHMsIHR5cGVuYW1lIE1ldGFkYXRhPgorICAgICAgc3RydWN0IF9Ob2RlX2Jhc2UKKyAgICAgIDogcHVibGljIE1ldGFkYXRhCisgICAgICB7CisgICAgICBwcml2YXRlOgorCXR5cGVkZWYgdHlwZW5hbWUgTWV0YWRhdGE6OmFsbG9jYXRvcl90eXBlCQlfQWxsb2M7CisKKyAgICAgIHB1YmxpYzoKKwl0eXBlZGVmIF9BbGxvYwkJCQkJCWFsbG9jYXRvcl90eXBlOworCXR5cGVkZWYgX0FUcmFpdHMJCQkJCWFjY2Vzc190cmFpdHM7CisJdHlwZWRlZiB0eXBlbmFtZSBfQVRyYWl0czo6dHlwZV90cmFpdHMJCQl0eXBlX3RyYWl0czsKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9Ob2RlX2Jhc2U+CV9fcmViaW5kX247CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9uOjpvdGhlcjo6cG9pbnRlciAJCW5vZGVfcG9pbnRlcjsKKworCW5vZGVfcG9pbnRlciAJCQkJCQltX3BfcGFyZW50OworCWNvbnN0IG5vZGVfdHlwZSAJICAgICAgIAkJCQltX3R5cGU7CisKKwlfTm9kZV9iYXNlKG5vZGVfdHlwZSB0eXBlKSA6IG1fdHlwZSh0eXBlKQorCXsgfQorCisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfQVRyYWl0cz4gICAgX19yZWJpbmRfYXQ7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hdDo6b3RoZXI6OmNvbnN0X3BvaW50ZXIgICAgYV9jb25zdF9wb2ludGVyOworCXR5cGVkZWYgdHlwZW5hbWUgX0FUcmFpdHM6OmNvbnN0X2l0ZXJhdG9yCSAgICAgIGFfY29uc3RfaXRlcmF0b3I7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCXR5cGVkZWYgc3RkOjpwYWlyPGFfY29uc3RfaXRlcmF0b3IsIGFfY29uc3RfaXRlcmF0b3I+IG5vZGVfZGVidWdfaW5mbzsKKworCXZvaWQKKwlhc3NlcnRfdmFsaWQoYV9jb25zdF9wb2ludGVyIHBfdHJhaXRzLAorCQkgICAgIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKKwl7IGFzc2VydF92YWxpZF9pbXAocF90cmFpdHMsIF9fZmlsZSwgX19saW5lKTsgfQorCisJdmlydHVhbCBub2RlX2RlYnVnX2luZm8KKwlhc3NlcnRfdmFsaWRfaW1wKGFfY29uc3RfcG9pbnRlciwgY29uc3QgY2hhciosIGludCkgY29uc3QgPSAwOworI2VuZGlmCisgICAgICB9OworCisKKyAgICAvLy8gSGVhZCBub2RlIGZvciBQQVRSSUNJQSB0cmVlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BVHJhaXRzLCB0eXBlbmFtZSBNZXRhZGF0YT4KKyAgICBzdHJ1Y3QgX0hlYWQKKyAgICA6IHB1YmxpYyBfTm9kZV9iYXNlPF9BVHJhaXRzLCBNZXRhZGF0YT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Ob2RlX2Jhc2U8X0FUcmFpdHMsIE1ldGFkYXRhPiAJCQliYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6dHlwZV90cmFpdHMJCQl0eXBlX3RyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlX3BvaW50ZXIJCQlub2RlX3BvaW50ZXI7CisKKyAgICAgIG5vZGVfcG9pbnRlcgkJCQkJCW1fcF9taW47CisgICAgICBub2RlX3BvaW50ZXIJCQkJCQltX3BfbWF4OworCisgICAgICBfSGVhZCgpIDogYmFzZV90eXBlKGhlYWRfbm9kZSkgeyB9CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfZGVidWdfaW5mbyAgICAgIAkgICAgICAgbm9kZV9kZWJ1Z19pbmZvOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmFfY29uc3RfcG9pbnRlciAJICAgICAgIGFfY29uc3RfcG9pbnRlcjsKKworICAgICAgdmlydHVhbCBub2RlX2RlYnVnX2luZm8KKyAgICAgIGFzc2VydF92YWxpZF9pbXAoYV9jb25zdF9wb2ludGVyLCBjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfVkVSSUZZX0FUKGZhbHNlLAorCQkJCSBfTV9tZXNzYWdlKCJBc3NlcnRpb24gZnJvbSAlMTs6JTI7IikKKwkJCQkgLl9NX3N0cmluZyhfX0ZJTEVfXykuX01faW50ZWdlcihfX0xJTkVfXyksCisJCQkJIF9fZmlsZSwgX19saW5lKTsKKwlyZXR1cm4gbm9kZV9kZWJ1Z19pbmZvKCk7CisgICAgICB9CisjZW5kaWYKKyAgICB9OworCisKKyAgICAvLy8gTGVhZiBub2RlIGZvciBQQVRSSUNJQSB0cmVlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BVHJhaXRzLCB0eXBlbmFtZSBNZXRhZGF0YT4KKyAgICBzdHJ1Y3QgX0xlYWYKKyAgICA6IHB1YmxpYyBfTm9kZV9iYXNlPF9BVHJhaXRzLCBNZXRhZGF0YT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Ob2RlX2Jhc2U8X0FUcmFpdHMsIE1ldGFkYXRhPiAJICAgCSAgICAJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnR5cGVfdHJhaXRzCQkJdHlwZV90cmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVfdHJhaXRzOjp2YWx1ZV90eXBlCQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZV90cmFpdHM6OnJlZmVyZW5jZQkJCXJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZV90cmFpdHM6OmNvbnN0X3JlZmVyZW5jZSAgICAJCWNvbnN0X3JlZmVyZW5jZTsKKworICAgIHByaXZhdGU6CisgICAgICB2YWx1ZV90eXBlCQkJCQkJbV92YWx1ZTsKKworICAgICAgX0xlYWYoY29uc3QgX0xlYWYmKTsKKworICAgIHB1YmxpYzoKKyAgICAgIF9MZWFmKGNvbnN0X3JlZmVyZW5jZSBvdGhlcikKKyAgICAgIDogYmFzZV90eXBlKGxlYWZfbm9kZSksIG1fdmFsdWUob3RoZXIpIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIHZhbHVlKCkKKyAgICAgIHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICB2YWx1ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfZGVidWdfaW5mbyAgICAgIAkJbm9kZV9kZWJ1Z19pbmZvOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmFfY29uc3RfcG9pbnRlciAgICAgIAkJYV9jb25zdF9wb2ludGVyOworCisgICAgICB2aXJ0dWFsIG5vZGVfZGVidWdfaW5mbworICAgICAgYXNzZXJ0X3ZhbGlkX2ltcChhX2NvbnN0X3BvaW50ZXIgcF90cmFpdHMsCisJCSAgICAgICBjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0CisgICAgICB7CisJUEJfRFNfREVCVUdfVkVSSUZZKGJhc2VfdHlwZTo6bV90eXBlID09IGxlYWZfbm9kZSk7CisJbm9kZV9kZWJ1Z19pbmZvIHJldDsKKwljb25zdF9yZWZlcmVuY2Ugcl92YWwgPSB2YWx1ZSgpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihwX3RyYWl0cy0+YmVnaW4ocF90cmFpdHMtPmV4dHJhY3Rfa2V5KHJfdmFsKSksCisJCQkgICAgICBwX3RyYWl0cy0+ZW5kKHBfdHJhaXRzLT5leHRyYWN0X2tleShyX3ZhbCkpKTsKKyAgICAgIH0KKworICAgICAgdmlydHVhbAorICAgICAgfl9MZWFmKCkgeyB9CisjZW5kaWYKKyAgICB9OworCisKKyAgICAvLy8gSW50ZXJuYWwgbm9kZSB0eXBlLCBQQVRSSUNJQSB0cmVlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BVHJhaXRzLCB0eXBlbmFtZSBNZXRhZGF0YT4KKyAgICBzdHJ1Y3QgX0lub2RlCisgICAgOiBwdWJsaWMgX05vZGVfYmFzZTxfQVRyYWl0cywgTWV0YWRhdGE+CisgICAgeworICAgICAgdHlwZWRlZiBfTm9kZV9iYXNlPF9BVHJhaXRzLCBNZXRhZGF0YT4gCQkJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnR5cGVfdHJhaXRzCQkJdHlwZV90cmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6YWNjZXNzX3RyYWl0cwkgICAgICAgCQlhY2Nlc3NfdHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlX3RyYWl0czo6dmFsdWVfdHlwZSAJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmFsbG9jYXRvcl90eXBlCQlfQWxsb2M7CisgICAgICB0eXBlZGVmIF9BbGxvYwkJCQkJCWFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSAJCQlzaXplX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmFfY29uc3RfcG9pbnRlciAgICAgIAkgICAgICAgYV9jb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmFfY29uc3RfaXRlcmF0b3IgICAgIAkgICAgICBhX2NvbnN0X2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZV9wb2ludGVyCQkJbm9kZV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxiYXNlX3R5cGU+CV9fcmViaW5kX247CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX246Om90aGVyOjpjb25zdF9wb2ludGVyICAgICAgbm9kZV9jb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmIF9MZWFmPF9BVHJhaXRzLCBNZXRhZGF0YT4JIAkJCWxlYWY7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGxlYWY+OjpvdGhlciAJX19yZWJpbmRfbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbDo6cG9pbnRlciAJCQlsZWFmX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2w6OmNvbnN0X3BvaW50ZXIgCSAgICBsZWFmX2NvbnN0X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X0lub2RlPjo6b3RoZXIgCV9fcmViaW5kX2luOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9pbjo6cG9pbnRlciAJCQlpbm9kZV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9pbjo6Y29uc3RfcG9pbnRlciAJICAgIGlub2RlX2NvbnN0X3BvaW50ZXI7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIGdldF9wcmVmX3BvcyhhX2NvbnN0X2l0ZXJhdG9yLCBhX2NvbnN0X2l0ZXJhdG9yLCBhX2NvbnN0X3BvaW50ZXIpIGNvbnN0OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxub2RlX3BvaW50ZXI+OjpvdGhlciBfX3JlYmluZF9ucDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbnA6OnBvaW50ZXIgCQlub2RlX3BvaW50ZXJfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbnA6OnJlZmVyZW5jZSAJCW5vZGVfcG9pbnRlcl9yZWZlcmVuY2U7CisKKyAgICAgIGVudW0KKwl7CisJICBhcnJfc2l6ZSA9IF9BVHJhaXRzOjptYXhfc2l6ZSArIDEKKwl9OworICAgICAgUEJfRFNfU1RBVElDX0FTU0VSVChtaW5fYXJyX3NpemUsIGFycl9zaXplID49IDIpOworCisKKyAgICAgIC8vLyBDb25zdGFudCBjaGlsZCBpdGVyYXRvci4KKyAgICAgIHN0cnVjdCBjb25zdF9pdGVyYXRvcgorICAgICAgeworCW5vZGVfcG9pbnRlcl9wb2ludGVyIAkJCQltX3BfcF9jdXI7CisJbm9kZV9wb2ludGVyX3BvaW50ZXIgCQkJCW1fcF9wX2VuZDsKKworCXR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAJCWl0ZXJhdG9yX2NhdGVnb3J5OworCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgCWRpZmZlcmVuY2VfdHlwZTsKKwl0eXBlZGVmIG5vZGVfcG9pbnRlciAJCQkJdmFsdWVfdHlwZTsKKwl0eXBlZGVmIG5vZGVfcG9pbnRlcl9wb2ludGVyIAkJCXBvaW50ZXI7CisJdHlwZWRlZiBub2RlX3BvaW50ZXJfcmVmZXJlbmNlIAkJCXJlZmVyZW5jZTsKKworCWNvbnN0X2l0ZXJhdG9yKG5vZGVfcG9pbnRlcl9wb2ludGVyIHBfcF9jdXIgPSAwLAorCQkgICAgICAgbm9kZV9wb2ludGVyX3BvaW50ZXIgcF9wX2VuZCA9IDApCisJOiBtX3BfcF9jdXIocF9wX2N1ciksIG1fcF9wX2VuZChwX3BfZW5kKQorCXsgfQorCisJYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorCXsgcmV0dXJuIG1fcF9wX2N1ciA9PSBvdGhlci5tX3BfcF9jdXI7IH0KKworCWJvb2wKKwlvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKwl7IHJldHVybiBtX3BfcF9jdXIgIT0gb3RoZXIubV9wX3BfY3VyOyB9CisKKwljb25zdF9pdGVyYXRvciYKKwlvcGVyYXRvcisrKCkKKwl7CisJICBkbworCSAgICArK21fcF9wX2N1cjsKKwkgIHdoaWxlIChtX3BfcF9jdXIgIT0gbV9wX3BfZW5kICYmICptX3BfcF9jdXIgPT0gMCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisJY29uc3RfaXRlcmF0b3IKKwlvcGVyYXRvcisrKGludCkKKwl7CisJICBjb25zdF9pdGVyYXRvciByZXRfaXQoKnRoaXMpOworCSAgb3BlcmF0b3IrKygpOworCSAgcmV0dXJuIHJldF9pdDsKKwl9CisKKwljb25zdCBub2RlX3BvaW50ZXJfcG9pbnRlcgorCW9wZXJhdG9yLT4oKSBjb25zdAorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X3JlZmVyZW5jaWJsZSgpOykKKwkgIHJldHVybiBtX3BfcF9jdXI7CisJfQorCisJbm9kZV9jb25zdF9wb2ludGVyCisJb3BlcmF0b3IqKCkgY29uc3QKKwl7CisJICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9yZWZlcmVuY2libGUoKTspCisJICByZXR1cm4gKm1fcF9wX2N1cjsKKwl9CisKKyAgICAgIHByb3RlY3RlZDoKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCXZvaWQKKwlhc3NlcnRfcmVmZXJlbmNpYmxlKCkgY29uc3QKKwl7IF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfcF9jdXIgIT0gbV9wX3BfZW5kICYmICptX3BfcF9jdXIgIT0gMCk7IH0KKyNlbmRpZgorICAgICAgfTsKKworCisgICAgICAvLy8gQ2hpbGQgaXRlcmF0b3IuCisgICAgICBzdHJ1Y3QgaXRlcmF0b3IgOiBwdWJsaWMgY29uc3RfaXRlcmF0b3IKKyAgICAgIHsKKyAgICAgIHB1YmxpYzoKKwl0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgCQlpdGVyYXRvcl9jYXRlZ29yeTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIAlkaWZmZXJlbmNlX3R5cGU7CisJdHlwZWRlZiBub2RlX3BvaW50ZXIgCQkJCXZhbHVlX3R5cGU7CisJdHlwZWRlZiBub2RlX3BvaW50ZXJfcG9pbnRlciAJCQlwb2ludGVyOworCXR5cGVkZWYgbm9kZV9wb2ludGVyX3JlZmVyZW5jZSAJCQlyZWZlcmVuY2U7CisKKwlpbmxpbmUKKwlpdGVyYXRvcihub2RlX3BvaW50ZXJfcG9pbnRlciBwX3BfY3VyID0gMCwKKwkJIG5vZGVfcG9pbnRlcl9wb2ludGVyIHBfcF9lbmQgPSAwKQorCTogY29uc3RfaXRlcmF0b3IocF9wX2N1ciwgcF9wX2VuZCkgeyB9CisKKwlib29sCisJb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisJeyByZXR1cm4gY29uc3RfaXRlcmF0b3I6Om1fcF9wX2N1ciA9PSBvdGhlci5tX3BfcF9jdXI7IH0KKworCWJvb2wKKwlvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKwl7IHJldHVybiBjb25zdF9pdGVyYXRvcjo6bV9wX3BfY3VyICE9IG90aGVyLm1fcF9wX2N1cjsgfQorCisJaXRlcmF0b3ImCisJb3BlcmF0b3IrKygpCisJeworCSAgY29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKysoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwlpdGVyYXRvcgorCW9wZXJhdG9yKysoaW50KQorCXsKKwkgIGl0ZXJhdG9yIHJldF9pdCgqdGhpcyk7CisJICBvcGVyYXRvcisrKCk7CisJICByZXR1cm4gcmV0X2l0OworCX0KKworCW5vZGVfcG9pbnRlcl9wb2ludGVyCisJb3BlcmF0b3ItPigpCisJeworCSAgX0dMSUJDWFhfREVCVUdfT05MWShjb25zdF9pdGVyYXRvcjo6YXNzZXJ0X3JlZmVyZW5jaWJsZSgpOykKKwkgIHJldHVybiBjb25zdF9pdGVyYXRvcjo6bV9wX3BfY3VyOworCX0KKworCW5vZGVfcG9pbnRlcgorCW9wZXJhdG9yKigpCisJeworCSAgX0dMSUJDWFhfREVCVUdfT05MWShjb25zdF9pdGVyYXRvcjo6YXNzZXJ0X3JlZmVyZW5jaWJsZSgpOykKKwkgIHJldHVybiAqY29uc3RfaXRlcmF0b3I6Om1fcF9wX2N1cjsKKwl9CisgICAgICB9OworCisKKyAgICAgIF9Jbm9kZShzaXplX3R5cGUsIGNvbnN0IGFfY29uc3RfaXRlcmF0b3IpOworCisgICAgICB2b2lkCisgICAgICB1cGRhdGVfcHJlZml4ZXMoYV9jb25zdF9wb2ludGVyKTsKKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpOworCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Q7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKTsKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgZ2V0X2NoaWxkX25vZGUoYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9wb2ludGVyKTsKKworICAgICAgaW5saW5lIG5vZGVfY29uc3RfcG9pbnRlcgorICAgICAgZ2V0X2NoaWxkX25vZGUoYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9wb2ludGVyKSBjb25zdDsKKworICAgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgICBnZXRfY2hpbGRfaXQoYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9wb2ludGVyKTsKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgZ2V0X2xvd2VyX2JvdW5kX2NoaWxkX25vZGUoYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9pdGVyYXRvciwKKwkJCQkgc2l6ZV90eXBlLCBhX2NvbnN0X3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBhZGRfY2hpbGQobm9kZV9wb2ludGVyLCBhX2NvbnN0X2l0ZXJhdG9yLCBhX2NvbnN0X2l0ZXJhdG9yLAorCQlhX2NvbnN0X3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgbm9kZV9jb25zdF9wb2ludGVyCisgICAgICBnZXRfam9pbl9jaGlsZChub2RlX2NvbnN0X3BvaW50ZXIsIGFfY29uc3RfcG9pbnRlcikgY29uc3Q7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9qb2luX2NoaWxkKG5vZGVfcG9pbnRlciwgYV9jb25zdF9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlX2NoaWxkKG5vZGVfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlbW92ZV9jaGlsZChpdGVyYXRvcik7CisKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2VfY2hpbGQobm9kZV9wb2ludGVyLCBhX2NvbnN0X2l0ZXJhdG9yLCBhX2NvbnN0X2l0ZXJhdG9yLAorCQkgICAgYV9jb25zdF9wb2ludGVyKTsKKworICAgICAgaW5saW5lIGFfY29uc3RfaXRlcmF0b3IKKyAgICAgIHByZWZfYl9pdCgpIGNvbnN0OworCisgICAgICBpbmxpbmUgYV9jb25zdF9pdGVyYXRvcgorICAgICAgcHJlZl9lX2l0KCkgY29uc3Q7CisKKyAgICAgIGJvb2wKKyAgICAgIHNob3VsZF9iZV9taW5lKGFfY29uc3RfaXRlcmF0b3IsIGFfY29uc3RfaXRlcmF0b3IsIHNpemVfdHlwZSwKKwkJICAgICBhX2NvbnN0X3BvaW50ZXIpIGNvbnN0OworCisgICAgICBsZWFmX3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQoKTsKKworICAgICAgbGVhZl9jb25zdF9wb2ludGVyCisgICAgICBsZWZ0bW9zdF9kZXNjZW5kYW50KCkgY29uc3Q7CisKKyAgICAgIGxlYWZfcG9pbnRlcgorICAgICAgcmlnaHRtb3N0X2Rlc2NlbmRhbnQoKTsKKworICAgICAgbGVhZl9jb25zdF9wb2ludGVyCisgICAgICByaWdodG1vc3RfZGVzY2VuZGFudCgpIGNvbnN0OworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlX2RlYnVnX2luZm8gCSAgICAgICBub2RlX2RlYnVnX2luZm87CisKKyAgICAgIHZpcnR1YWwgbm9kZV9kZWJ1Z19pbmZvCisgICAgICBhc3NlcnRfdmFsaWRfaW1wKGFfY29uc3RfcG9pbnRlciwgY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworICAgICAgc2l6ZV90eXBlCisgICAgICBnZXRfZV9pbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9lX2luZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9Jbm9kZShjb25zdCBfSW5vZGUmKTsKKworICAgICAgc2l6ZV90eXBlCisgICAgICBnZXRfYmVnaW5fcG9zKCkgY29uc3Q7CisKKyAgICAgIHN0YXRpYyBfX3JlYmluZF9sCQkJc19sZWFmX2FsbG9jOworICAgICAgc3RhdGljIF9fcmViaW5kX2luIAkJc19pbm9kZV9hbGxvYzsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIAkJCW1fZV9pbmQ7CisgICAgICBhX2NvbnN0X2l0ZXJhdG9yIAkJCW1fcHJlZl9iX2l0OworICAgICAgYV9jb25zdF9pdGVyYXRvciAJCQltX3ByZWZfZV9pdDsKKyAgICAgIG5vZGVfcG9pbnRlciAJCQltX2FfcF9jaGlsZHJlblthcnJfc2l6ZV07CisgICAgfTsKKworI2RlZmluZSBQQl9EU19DT05TVF9JVF9DX0RFQyBcCisgICAgX0NJdGVyPE5vZGUsIExlYWYsIEhlYWQsIElub2RlLCBJc19Gb3J3YXJkX0l0ZXJhdG9yPgorCisjZGVmaW5lIFBCX0RTX0NPTlNUX09ESVJfSVRfQ19ERUMgXAorICAgIF9DSXRlcjxOb2RlLCBMZWFmLCBIZWFkLCBJbm9kZSwgIUlzX0ZvcndhcmRfSXRlcmF0b3I+CisKKyNkZWZpbmUgUEJfRFNfSVRfQ19ERUMgXAorICAgIF9JdGVyPE5vZGUsIExlYWYsIEhlYWQsIElub2RlLCBJc19Gb3J3YXJkX0l0ZXJhdG9yPgorCisjZGVmaW5lIFBCX0RTX09ESVJfSVRfQ19ERUMgXAorICAgIF9JdGVyPE5vZGUsIExlYWYsIEhlYWQsIElub2RlLCAhSXNfRm9yd2FyZF9JdGVyYXRvcj4KKworCisgICAgLy8vIENvbnN0IGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsIHR5cGVuYW1lIExlYWYsIHR5cGVuYW1lIEhlYWQsIHR5cGVuYW1lIElub2RlLAorCSAgICAgYm9vbCBJc19Gb3J3YXJkX0l0ZXJhdG9yPgorICAgIGNsYXNzIF9DSXRlcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUaGVzZSB0eXBlcyBhcmUgYWxsIHRoZSBzYW1lIGZvciB0aGUgZmlyc3QgZm91ciB0ZW1wbGF0ZSBhcmd1bWVudHMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6OmFsbG9jYXRvcl90eXBlCQlhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZTo6dHlwZV90cmFpdHMJCXR5cGVfdHJhaXRzOworCisgICAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgCQlpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OmRpZmZlcmVuY2VfdHlwZQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVfdHJhaXRzOjp2YWx1ZV90eXBlCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlX3RyYWl0czo6cG9pbnRlciAJCXBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVfdHJhaXRzOjpyZWZlcmVuY2UgCQlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVfdHJhaXRzOjpjb25zdF9wb2ludGVyIAljb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlX3RyYWl0czo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgYWxsb2NhdG9yX3R5cGUJCQkJX0FsbG9jOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxOb2RlPglfX3JlYmluZF9uOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9uOjpvdGhlcjo6cG9pbnRlcglub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPExlYWY+CV9fcmViaW5kX2w7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2w6Om90aGVyOjpwb2ludGVyCWxlYWZfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbDo6b3RoZXI6OmNvbnN0X3BvaW50ZXIJbGVhZl9jb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxIZWFkPglfX3JlYmluZF9oOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9oOjpvdGhlcjo6cG9pbnRlcgloZWFkX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8SW5vZGU+IF9fcmViaW5kX2luOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9pbjo6b3RoZXI6OnBvaW50ZXIgCWlub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIElub2RlOjppdGVyYXRvcgkJCWlub2RlX2l0ZXJhdG9yOworCisgICAgICBub2RlX3BvaW50ZXIgCQkJCQltX3BfbmQ7CisKKyAgICAgIF9DSXRlcihub2RlX3BvaW50ZXIgcF9uZCA9IDApIDogbV9wX25kKHBfbmQpCisgICAgICB7IH0KKworICAgICAgX0NJdGVyKGNvbnN0IFBCX0RTX0NPTlNUX09ESVJfSVRfQ19ERUMmIG90aGVyKQorICAgICAgOiBtX3BfbmQob3RoZXIubV9wX25kKQorICAgICAgeyB9CisKKyAgICAgIF9DSXRlciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfQ0l0ZXImIG90aGVyKQorICAgICAgeworCW1fcF9uZCA9IG90aGVyLm1fcF9uZDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9DSXRlciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBQQl9EU19DT05TVF9PRElSX0lUX0NfREVDJiBvdGhlcikKKyAgICAgIHsKKwltX3BfbmQgPSBvdGhlci5tX3BfbmQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBjb25zdF9wb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKTsKKwlyZXR1cm4gJnN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4obV9wX25kKS0+dmFsdWUoKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbmQtPm1fdHlwZSA9PSBsZWFmX25vZGUpOworCXJldHVybiBzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KG1fcF9uZCktPnZhbHVlKCk7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX0NJdGVyJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9uZCA9PSBvdGhlci5tX3BfbmQ7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBQQl9EU19DT05TVF9PRElSX0lUX0NfREVDJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9uZCA9PSBvdGhlci5tX3BfbmQ7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfQ0l0ZXImIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kICE9IG90aGVyLm1fcF9uZDsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IFBCX0RTX0NPTlNUX09ESVJfSVRfQ19ERUMmIG90aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kICE9IG90aGVyLm1fcF9uZDsgfQorCisgICAgICBfQ0l0ZXImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwlpbmMoaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBJc19Gb3J3YXJkX0l0ZXJhdG9yPigpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9DSXRlcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisJX0NJdGVyIHJldF9pdChtX3BfbmQpOworCW9wZXJhdG9yKysoKTsKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisgICAgICBfQ0l0ZXImCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlkZWMoaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBJc19Gb3J3YXJkX0l0ZXJhdG9yPigpKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9DSXRlcgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJX0NJdGVyIHJldF9pdChtX3BfbmQpOworCW9wZXJhdG9yLS0oKTsKKwlyZXR1cm4gcmV0X2l0OworICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdm9pZAorICAgICAgaW5jKGZhbHNlX3R5cGUpCisgICAgICB7IGRlYyh0cnVlX3R5cGUoKSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5jKHRydWVfdHlwZSkKKyAgICAgIHsKKwlpZiAobV9wX25kLT5tX3R5cGUgPT0gaGVhZF9ub2RlKQorCSAgeworCSAgICBtX3BfbmQgPSBzdGF0aWNfY2FzdDxoZWFkX3BvaW50ZXI+KG1fcF9uZCktPm1fcF9taW47CisJICAgIHJldHVybjsKKwkgIH0KKworCW5vZGVfcG9pbnRlciBwX3kgPSBtX3BfbmQtPm1fcF9wYXJlbnQ7CisJd2hpbGUgKHBfeS0+bV90eXBlICE9IGhlYWRfbm9kZSAmJiBnZXRfbGFyZ2VyX3NpYmxpbmcobV9wX25kKSA9PSAwKQorCSAgeworCSAgICBtX3BfbmQgPSBwX3k7CisJICAgIHBfeSA9IHBfeS0+bV9wX3BhcmVudDsKKwkgIH0KKworCWlmIChwX3ktPm1fdHlwZSA9PSBoZWFkX25vZGUpCisJICB7CisJICAgIG1fcF9uZCA9IHBfeTsKKwkgICAgcmV0dXJuOworCSAgfQorCW1fcF9uZCA9IGxlZnRtb3N0X2Rlc2NlbmRhbnQoZ2V0X2xhcmdlcl9zaWJsaW5nKG1fcF9uZCkpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBkZWMoZmFsc2VfdHlwZSkKKyAgICAgIHsgaW5jKHRydWVfdHlwZSgpKTsgfQorCisgICAgICB2b2lkCisgICAgICBkZWModHJ1ZV90eXBlKQorICAgICAgeworCWlmIChtX3BfbmQtPm1fdHlwZSA9PSBoZWFkX25vZGUpCisJICB7CisJICAgIG1fcF9uZCA9IHN0YXRpY19jYXN0PGhlYWRfcG9pbnRlcj4obV9wX25kKS0+bV9wX21heDsKKwkgICAgcmV0dXJuOworCSAgfQorCisJbm9kZV9wb2ludGVyIHBfeSA9IG1fcF9uZC0+bV9wX3BhcmVudDsKKwl3aGlsZSAocF95LT5tX3R5cGUgIT0gaGVhZF9ub2RlICYmIGdldF9zbWFsbGVyX3NpYmxpbmcobV9wX25kKSA9PSAwKQorCSAgeworCSAgICBtX3BfbmQgPSBwX3k7CisJICAgIHBfeSA9IHBfeS0+bV9wX3BhcmVudDsKKwkgIH0KKworCWlmIChwX3ktPm1fdHlwZSA9PSBoZWFkX25vZGUpCisJICB7CisJICAgIG1fcF9uZCA9IHBfeTsKKwkgICAgcmV0dXJuOworCSAgfQorCW1fcF9uZCA9IHJpZ2h0bW9zdF9kZXNjZW5kYW50KGdldF9zbWFsbGVyX3NpYmxpbmcobV9wX25kKSk7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9sYXJnZXJfc2libGluZyhub2RlX3BvaW50ZXIgcF9uZCkKKyAgICAgIHsKKwlpbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9uZC0+bV9wX3BhcmVudCk7CisKKwlpbm9kZV9pdGVyYXRvciBpdCA9IHBfcGFyZW50LT5iZWdpbigpOworCXdoaWxlICgqaXQgIT0gcF9uZCkKKwkgICsraXQ7CisKKwlpbm9kZV9pdGVyYXRvciBuZXh0X2l0ID0gaXQ7CisJKytuZXh0X2l0OworCXJldHVybiAobmV4dF9pdCA9PSBwX3BhcmVudC0+ZW5kKCkpPyAwIDogKm5leHRfaXQ7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBub2RlX3BvaW50ZXIKKyAgICAgIGdldF9zbWFsbGVyX3NpYmxpbmcobm9kZV9wb2ludGVyIHBfbmQpCisgICAgICB7CisJaW5vZGVfcG9pbnRlciBwX3BhcmVudCA9IHN0YXRpY19jYXN0PGlub2RlX3BvaW50ZXI+KHBfbmQtPm1fcF9wYXJlbnQpOworCisJaW5vZGVfaXRlcmF0b3IgaXQgPSBwX3BhcmVudC0+YmVnaW4oKTsKKwlpZiAoKml0ID09IHBfbmQpCisJICByZXR1cm4gMDsKKworCWlub2RlX2l0ZXJhdG9yIHByZXZfaXQ7CisJZG8KKwkgIHsKKwkgICAgcHJldl9pdCA9IGl0OworCSAgICArK2l0OworCSAgICBpZiAoKml0ID09IHBfbmQpCisJICAgICAgcmV0dXJuICpwcmV2X2l0OworCSAgfQorCXdoaWxlICh0cnVlKTsKKworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChmYWxzZSk7CisJcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyBsZWFmX3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQobm9kZV9wb2ludGVyIHBfbmQpCisgICAgICB7CisJaWYgKHBfbmQtPm1fdHlwZSA9PSBsZWFmX25vZGUpCisJICByZXR1cm4gc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX25kKTsKKwlyZXR1cm4gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9uZCktPmxlZnRtb3N0X2Rlc2NlbmRhbnQoKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGxlYWZfcG9pbnRlcgorICAgICAgcmlnaHRtb3N0X2Rlc2NlbmRhbnQobm9kZV9wb2ludGVyIHBfbmQpCisgICAgICB7CisJaWYgKHBfbmQtPm1fdHlwZSA9PSBsZWFmX25vZGUpCisJICByZXR1cm4gc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX25kKTsKKwlyZXR1cm4gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4ocF9uZCktPnJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7CisgICAgICB9CisgICAgfTsKKworCisgICAgLy8vIEl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsIHR5cGVuYW1lIExlYWYsIHR5cGVuYW1lIEhlYWQsIHR5cGVuYW1lIElub2RlLAorCSAgICAgYm9vbCBJc19Gb3J3YXJkX0l0ZXJhdG9yPgorICAgIGNsYXNzIF9JdGVyCisgICAgOiBwdWJsaWMgX0NJdGVyPE5vZGUsIExlYWYsIEhlYWQsIElub2RlLCBJc19Gb3J3YXJkX0l0ZXJhdG9yPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9DSXRlcjxOb2RlLCBMZWFmLCBIZWFkLCBJbm9kZSwgSXNfRm9yd2FyZF9JdGVyYXRvcj4KKyAgICAgIAkJCQkJCQliYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6YWxsb2NhdG9yX3R5cGUJYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6dHlwZV90cmFpdHMJCXR5cGVfdHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlX3RyYWl0czo6dmFsdWVfdHlwZQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZV90cmFpdHM6OnBvaW50ZXIgCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0eXBlX3RyYWl0czo6cmVmZXJlbmNlIAkJcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZV9wb2ludGVyCQlub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bGVhZl9wb2ludGVyCQlsZWFmX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bGVhZl9jb25zdF9wb2ludGVyCWxlYWZfY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpoZWFkX3BvaW50ZXIJCWhlYWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjppbm9kZV9wb2ludGVyIAlpbm9kZV9wb2ludGVyOworCisgICAgICBfSXRlcihub2RlX3BvaW50ZXIgcF9uZCA9IDApCisgICAgICA6IGJhc2VfdHlwZShwX25kKSB7IH0KKworICAgICAgX0l0ZXIoY29uc3QgUEJfRFNfT0RJUl9JVF9DX0RFQyYgb3RoZXIpCisgICAgICA6IGJhc2VfdHlwZShvdGhlci5tX3BfbmQpIHsgfQorCisgICAgICBfSXRlciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfSXRlciYgb3RoZXIpCisgICAgICB7CisJYmFzZV90eXBlOjptX3BfbmQgPSBvdGhlci5tX3BfbmQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfSXRlciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBQQl9EU19PRElSX0lUX0NfREVDJiBvdGhlcikKKyAgICAgIHsKKwliYXNlX3R5cGU6Om1fcF9uZCA9IG90aGVyLm1fcF9uZDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6Om1fcF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSk7CisJcmV0dXJuICZzdGF0aWNfY2FzdDxsZWFmX3BvaW50ZXI+KGJhc2VfdHlwZTo6bV9wX25kKS0+dmFsdWUoKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6Om1fcF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSk7CisJcmV0dXJuIHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4oYmFzZV90eXBlOjptX3BfbmQpLT52YWx1ZSgpOworICAgICAgfQorCisgICAgICBfSXRlciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCWJhc2VfdHlwZTo6b3BlcmF0b3IrKygpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX0l0ZXIKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCV9JdGVyIHJldChiYXNlX3R5cGU6Om1fcF9uZCk7CisJb3BlcmF0b3IrKygpOworCXJldHVybiByZXQ7CisgICAgICB9CisKKyAgICAgIF9JdGVyJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisJYmFzZV90eXBlOjpvcGVyYXRvci0tKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfSXRlcgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJX0l0ZXIgcmV0KGJhc2VfdHlwZTo6bV9wX25kKTsKKwlvcGVyYXRvci0tKCk7CisJcmV0dXJuIHJldDsKKyAgICAgIH0KKyAgICB9OworCisjdW5kZWYgUEJfRFNfQ09OU1RfT0RJUl9JVF9DX0RFQworI3VuZGVmIFBCX0RTX09ESVJfSVRfQ19ERUMKKworCisjZGVmaW5lIFBCX0RTX1BBVF9UUklFX05PREVfQ09OU1RfSVRFUkFUT1JfQ19ERUMgXAorICAgIF9Ob2RlX2NpdGVyPE5vZGUsIExlYWYsIEhlYWQsIElub2RlLCBfQ0l0ZXJhdG9yLCBJdGVyYXRvciwgX0FUcmFpdHMsIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19QQVRfVFJJRV9OT0RFX0lURVJBVE9SX0NfREVDIFwKKyAgICBfTm9kZV9pdGVyPE5vZGUsIExlYWYsIEhlYWQsIElub2RlLCBfQ0l0ZXJhdG9yLCBJdGVyYXRvciwgX0FUcmFpdHMsIF9BbGxvYz4KKworICAgIC8vLyBOb2RlIGNvbnN0IGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsCisJICAgICB0eXBlbmFtZSBMZWFmLAorCSAgICAgdHlwZW5hbWUgSGVhZCwKKwkgICAgIHR5cGVuYW1lIElub2RlLAorCSAgICAgdHlwZW5hbWUgX0NJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIF9Ob2RlX2NpdGVyCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Tm9kZT4JX19yZWJpbmRfbjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbjo6b3RoZXI6OnBvaW50ZXIJbm9kZV9wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPExlYWY+CV9fcmViaW5kX2w7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2w6Om90aGVyOjpwb2ludGVyCWxlYWZfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbDo6b3RoZXI6OmNvbnN0X3BvaW50ZXIJbGVhZl9jb25zdF9wb2ludGVyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPElub2RlPiAJX19yZWJpbmRfaW47CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2luOjpvdGhlcjo6cG9pbnRlciAJaW5vZGVfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfaW46Om90aGVyOjpjb25zdF9wb2ludGVyIGlub2RlX2NvbnN0X3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTm9kZTo6YV9jb25zdF9wb2ludGVyCQlhX2NvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6OmFfY29uc3RfaXRlcmF0b3IJCWFfY29uc3RfaXRlcmF0b3I7CisKKyAgICBwcml2YXRlOgorICAgICAgYV9jb25zdF9pdGVyYXRvcgorICAgICAgcHJlZl9iZWdpbigpIGNvbnN0CisgICAgICB7CisJaWYgKG1fcF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSkKKwkgIHsKKwkgICAgbGVhZl9jb25zdF9wb2ludGVyIGxjcCA9IHN0YXRpY19jYXN0PGxlYWZfY29uc3RfcG9pbnRlcj4obV9wX25kKTsKKwkgICAgcmV0dXJuIG1fcF90cmFpdHMtPmJlZ2luKG1fcF90cmFpdHMtPmV4dHJhY3Rfa2V5KGxjcC0+dmFsdWUoKSkpOworCSAgfQorCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbmQtPm1fdHlwZSA9PSBpX25vZGUpOworCXJldHVybiBzdGF0aWNfY2FzdDxpbm9kZV9jb25zdF9wb2ludGVyPihtX3BfbmQpLT5wcmVmX2JfaXQoKTsKKyAgICAgIH0KKworICAgICAgYV9jb25zdF9pdGVyYXRvcgorICAgICAgcHJlZl9lbmQoKSBjb25zdAorICAgICAgeworCWlmIChtX3BfbmQtPm1fdHlwZSA9PSBsZWFmX25vZGUpCisJICB7CisJICAgIGxlYWZfY29uc3RfcG9pbnRlciBsY3AgPSBzdGF0aWNfY2FzdDxsZWFmX2NvbnN0X3BvaW50ZXI+KG1fcF9uZCk7CisJICAgIHJldHVybiBtX3BfdHJhaXRzLT5lbmQobV9wX3RyYWl0cy0+ZXh0cmFjdF9rZXkobGNwLT52YWx1ZSgpKSk7CisJICB9CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9uZC0+bV90eXBlID09IGlfbm9kZSk7CisJcmV0dXJuIHN0YXRpY19jYXN0PGlub2RlX2NvbnN0X3BvaW50ZXI+KG1fcF9uZCktPnByZWZfZV9pdCgpOworICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX3RhZyAJCQlpdGVyYXRvcl9jYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl9kaWZmZXJlbmNlX3R5cGUgCQlkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworCisgICAgICB0eXBlZGVmIF9DSXRlcmF0b3IgCQkgICAgICAgCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlIAkJCQlyZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgCQkJCWNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgLy8vIE1ldGFkYXRhIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6Om1ldGFkYXRhX3R5cGUgCQltZXRhZGF0YV90eXBlOworCisgICAgICAvLy8gQ29uc3QgbWV0YWRhdGEgcmVmZXJlbmNlIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPG1ldGFkYXRhX3R5cGU+IF9fcmViaW5kX207CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX206Om90aGVyIAkJX19yZWJpbmRfbWE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX21hOjpjb25zdF9yZWZlcmVuY2UgICAgbWV0YWRhdGFfY29uc3RfcmVmZXJlbmNlOworCisgICAgICBpbmxpbmUKKyAgICAgIF9Ob2RlX2NpdGVyKG5vZGVfcG9pbnRlciBwX25kID0gMCwgYV9jb25zdF9wb2ludGVyIHBfdHJhaXRzID0gMCkKKyAgICAgIDogbV9wX25kKGNvbnN0X2Nhc3Q8bm9kZV9wb2ludGVyPihwX25kKSksIG1fcF90cmFpdHMocF90cmFpdHMpCisgICAgICB7IH0KKworICAgICAgLy8vIFN1YnRyZWUgdmFsaWQgcHJlZml4LgorICAgICAgc3RkOjpwYWlyPGFfY29uc3RfaXRlcmF0b3IsIGFfY29uc3RfaXRlcmF0b3I+CisgICAgICB2YWxpZF9wcmVmaXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIocHJlZl9iZWdpbigpLCBwcmVmX2VuZCgpKTsgfQorCisgICAgICAvLy8gQ29uc3QgYWNjZXNzOyByZXR1cm5zIHRoZSBfX2NvbnN0IGl0ZXJhdG9yKiBhc3NvY2lhdGVkIHdpdGgKKyAgICAgIC8vLyB0aGUgY3VycmVudCBsZWFmLgorICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChudW1fY2hpbGRyZW4oKSA9PSAwKTsKKwlyZXR1cm4gX0NJdGVyYXRvcihtX3BfbmQpOworICAgICAgfQorCisgICAgICAvLy8gTWV0YWRhdGEgYWNjZXNzLgorICAgICAgbWV0YWRhdGFfY29uc3RfcmVmZXJlbmNlCisgICAgICBnZXRfbWV0YWRhdGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gbV9wX25kLT5nZXRfbWV0YWRhdGEoKTsgfQorCisgICAgICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUuCisgICAgICBzaXplX3R5cGUKKyAgICAgIG51bV9jaGlsZHJlbigpIGNvbnN0CisgICAgICB7CisJaWYgKG1fcF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSkKKwkgIHJldHVybiAwOworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbmQtPm1fdHlwZSA9PSBpX25vZGUpOworCWlub2RlX3BvaW50ZXIgaW5wID0gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4obV9wX25kKTsKKwlyZXR1cm4gc3RkOjpkaXN0YW5jZShpbnAtPmJlZ2luKCksIGlucC0+ZW5kKCkpOworICAgICAgfQorCisgICAgICAvLy8gUmV0dXJucyBhIF9fY29uc3Qgbm9kZSBfX2l0ZXJhdG9yIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUncworICAgICAgLy8vIGktdGggY2hpbGQuCisgICAgICBfTm9kZV9jaXRlcgorICAgICAgZ2V0X2NoaWxkKHNpemVfdHlwZSBpKSBjb25zdAorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfbmQtPm1fdHlwZSA9PSBpX25vZGUpOworCWlub2RlX3BvaW50ZXIgaW5wID0gc3RhdGljX2Nhc3Q8aW5vZGVfcG9pbnRlcj4obV9wX25kKTsKKwl0eXBlbmFtZSBJbm9kZTo6aXRlcmF0b3IgaXQgPSBpbnAtPmJlZ2luKCk7CisJc3RkOjphZHZhbmNlKGl0LCBpKTsKKwlyZXR1cm4gX05vZGVfY2l0ZXIoKml0LCBtX3BfdHJhaXRzKTsKKyAgICAgIH0KKworICAgICAgLy8vIENvbXBhcmVzIGNvbnRlbnQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfTm9kZV9jaXRlciYgb3RoZXIpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3BfbmQgPT0gb3RoZXIubV9wX25kOyB9CisKKyAgICAgIC8vLyBDb21wYXJlcyBjb250ZW50IChuZWdhdGl2ZWx5KSB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IF9Ob2RlX2NpdGVyJiBvdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fcF9uZCAhPSBvdGhlci5tX3BfbmQ7IH0KKworICAgICAgbm9kZV9wb2ludGVyIAkJCW1fcF9uZDsKKyAgICAgIGFfY29uc3RfcG9pbnRlciAJCQltX3BfdHJhaXRzOworICAgIH07CisKKworICAgIC8vLyBOb2RlIGl0ZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsCisJICAgICB0eXBlbmFtZSBMZWFmLAorCSAgICAgdHlwZW5hbWUgSGVhZCwKKwkgICAgIHR5cGVuYW1lIElub2RlLAorCSAgICAgdHlwZW5hbWUgX0NJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIF9Ob2RlX2l0ZXIKKyAgICA6IHB1YmxpYyBfTm9kZV9jaXRlcjxOb2RlLCBMZWFmLCBIZWFkLCBJbm9kZSwgX0NJdGVyYXRvciwgSXRlcmF0b3IsIF9BbGxvYz4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX05vZGVfY2l0ZXI8Tm9kZSwgTGVhZiwgSGVhZCwgSW5vZGUsCisJCQkgIF9DSXRlcmF0b3IsIEl0ZXJhdG9yLCBfQWxsb2M+CWJhc2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Tm9kZT4JX19yZWJpbmRfbjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbjo6b3RoZXI6OnBvaW50ZXIJbm9kZV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Omlub2RlX3BvaW50ZXIgCWlub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6YV9jb25zdF9wb2ludGVyIAlhX2NvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIEl0ZXJhdG9yIAkJCQkJaXRlcmF0b3I7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworCisgICAgICB0eXBlZGVmIEl0ZXJhdG9yIAkJCQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSAJCQkJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlIAkJCQljb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIF9Ob2RlX2l0ZXIobm9kZV9wb2ludGVyIHBfbmQgPSAwLCBhX2NvbnN0X3BvaW50ZXIgcF90cmFpdHMgPSAwKQorICAgICAgOiBiYXNlX3R5cGUocF9uZCwgcF90cmFpdHMpCisgICAgICB7IH0KKworICAgICAgLy8vIEFjY2VzczsgcmV0dXJucyB0aGUgaXRlcmF0b3IqICBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgbGVhZi4KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjpudW1fY2hpbGRyZW4oKSA9PSAwKTsKKwlyZXR1cm4gaXRlcmF0b3IoYmFzZV90eXBlOjptX3BfbmQpOworICAgICAgfQorCisgICAgICAvLy8gUmV0dXJucyBhIG5vZGUgX19pdGVyYXRvciB0byB0aGUgY29ycmVzcG9uZGluZyBub2RlJ3MgaS10aCBjaGlsZC4KKyAgICAgIF9Ob2RlX2l0ZXIKKyAgICAgIGdldF9jaGlsZChzaXplX3R5cGUgaSkgY29uc3QKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3BfbmQtPm1fdHlwZSA9PSBpX25vZGUpOworCisJdHlwZW5hbWUgSW5vZGU6Oml0ZXJhdG9yIGl0ID0KKwkgIHN0YXRpY19jYXN0PGlub2RlX3BvaW50ZXI+KGJhc2VfdHlwZTo6bV9wX25kKS0+YmVnaW4oKTsKKworCXN0ZDo6YWR2YW5jZShpdCwgaSk7CisJcmV0dXJuIF9Ob2RlX2l0ZXIoKml0LCBiYXNlX3R5cGU6Om1fcF90cmFpdHMpOworICAgICAgfQorICAgIH07CisgICAgfTsKKworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQVRyYWl0cywgdHlwZW5hbWUgTWV0YWRhdGE+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICAgIHBhdF90cmllX2Jhc2U6Ol9Jbm9kZTxfQVRyYWl0cywgTWV0YWRhdGE+CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpfX3JlYmluZF9sCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OnNfbGVhZl9hbGxvYzsKKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Ol9fcmViaW5kX2luCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OnNfaW5vZGVfYWxsb2M7CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGdldF9wcmVmX3BvcyhhX2NvbnN0X2l0ZXJhdG9yIGJfaXQsIGFfY29uc3RfaXRlcmF0b3IgZV9pdCwKKwkJIGFfY29uc3RfcG9pbnRlciBwX3RyYWl0cykgY29uc3QKKyAgICB7CisgICAgICBpZiAoc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KHN0ZDo6ZGlzdGFuY2UoYl9pdCwgZV9pdCkpIDw9IG1fZV9pbmQpCisJcmV0dXJuIDA7CisgICAgICBzdGQ6OmFkdmFuY2UoYl9pdCwgbV9lX2luZCk7CisgICAgICByZXR1cm4gMSArIHBfdHJhaXRzLT5lX3BvcygqYl9pdCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgX0lub2RlKHNpemVfdHlwZSBsZW4sIGNvbnN0IGFfY29uc3RfaXRlcmF0b3IgaXQpCisgICAgOiBiYXNlX3R5cGUoaV9ub2RlKSwgbV9lX2luZChsZW4pLCBtX3ByZWZfYl9pdChpdCksIG1fcHJlZl9lX2l0KGl0KQorICAgIHsKKyAgICAgIHN0ZDo6YWR2YW5jZShtX3ByZWZfZV9pdCwgbV9lX2luZCk7CisgICAgICBzdGQ6OmZpbGwobV9hX3BfY2hpbGRyZW4sIG1fYV9wX2NoaWxkcmVuICsgYXJyX3NpemUsCisJCXN0YXRpY19jYXN0PG5vZGVfcG9pbnRlcj4oMCkpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICB1cGRhdGVfcHJlZml4ZXMoYV9jb25zdF9wb2ludGVyIHBfdHJhaXRzKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX2ZpcnN0ID0gKmJlZ2luKCk7CisgICAgICBpZiAocF9maXJzdC0+bV90eXBlID09IGxlYWZfbm9kZSkKKwl7CisJICBsZWFmX2NvbnN0X3BvaW50ZXIgcCA9IHN0YXRpY19jYXN0PGxlYWZfY29uc3RfcG9pbnRlcj4ocF9maXJzdCk7CisJICBtX3ByZWZfYl9pdCA9IHBfdHJhaXRzLT5iZWdpbihhY2Nlc3NfdHJhaXRzOjpleHRyYWN0X2tleShwLT52YWx1ZSgpKSk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlub2RlX3BvaW50ZXIgcCA9IHN0YXRpY19jYXN0PGlub2RlX3BvaW50ZXI+KHBfZmlyc3QpOworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfZmlyc3QtPm1fdHlwZSA9PSBpX25vZGUpOworCSAgbV9wcmVmX2JfaXQgPSBwLT5wcmVmX2JfaXQoKTsKKwl9CisgICAgICBtX3ByZWZfZV9pdCA9IG1fcHJlZl9iX2l0OworICAgICAgc3RkOjphZHZhbmNlKG1fcHJlZl9lX2l0LCBtX2VfaW5kKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgdHlwZWRlZiBub2RlX3BvaW50ZXJfcG9pbnRlciBwb2ludGVyX3R5cGU7CisgICAgICBwb2ludGVyX3R5cGUgcCA9IGNvbnN0X2Nhc3Q8cG9pbnRlcl90eXBlPihtX2FfcF9jaGlsZHJlbik7CisgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IocCArIGdldF9iZWdpbl9wb3MoKSwgcCArIGFycl9zaXplKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBiZWdpbigpCisgICAgeworICAgICAgcmV0dXJuIGl0ZXJhdG9yKG1fYV9wX2NoaWxkcmVuICsgZ2V0X2JlZ2luX3BvcygpLAorCQkgICAgICBtX2FfcF9jaGlsZHJlbiArIGFycl9zaXplKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgbm9kZV9wb2ludGVyX3BvaW50ZXIgcG9pbnRlcl90eXBlOworICAgICAgcG9pbnRlcl90eXBlIHAgPSBjb25zdF9jYXN0PHBvaW50ZXJfdHlwZT4obV9hX3BfY2hpbGRyZW4pICsgYXJyX3NpemU7CisgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IocCwgcCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZW5kKCkKKyAgICB7IHJldHVybiBpdGVyYXRvcihtX2FfcF9jaGlsZHJlbiArIGFycl9zaXplLCBtX2FfcF9jaGlsZHJlbiArIGFycl9zaXplKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBnZXRfY2hpbGRfbm9kZShhX2NvbnN0X2l0ZXJhdG9yIGJfaXQsIGFfY29uc3RfaXRlcmF0b3IgZV9pdCwKKwkJICAgYV9jb25zdF9wb2ludGVyIHBfdHJhaXRzKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBpID0gZ2V0X3ByZWZfcG9zKGJfaXQsIGVfaXQsIHBfdHJhaXRzKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChpIDwgYXJyX3NpemUpOworICAgICAgcmV0dXJuIG1fYV9wX2NoaWxkcmVuW2ldOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBnZXRfY2hpbGRfaXQoYV9jb25zdF9pdGVyYXRvciBiX2l0LCBhX2NvbnN0X2l0ZXJhdG9yIGVfaXQsCisJCSBhX2NvbnN0X3BvaW50ZXIgcF90cmFpdHMpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIGkgPSBnZXRfcHJlZl9wb3MoYl9pdCwgZV9pdCwgcF90cmFpdHMpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGkgPCBhcnJfc2l6ZSk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9hX3BfY2hpbGRyZW5baV0gIT0gMCk7CisgICAgICByZXR1cm4gaXRlcmF0b3IobV9hX3BfY2hpbGRyZW4gKyBpLCBtX2FfcF9jaGlsZHJlbiArIGkpOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2NvbnN0X3BvaW50ZXIKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZ2V0X2NoaWxkX25vZGUoYV9jb25zdF9pdGVyYXRvciBiX2l0LCBhX2NvbnN0X2l0ZXJhdG9yIGVfaXQsCisJCSAgIGFfY29uc3RfcG9pbnRlciBwX3RyYWl0cykgY29uc3QKKyAgICB7IHJldHVybiBjb25zdF9jYXN0PG5vZGVfcG9pbnRlcj4oZ2V0X2NoaWxkX25vZGUoYl9pdCwgZV9pdCwgcF90cmFpdHMpKTsgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGdldF9sb3dlcl9ib3VuZF9jaGlsZF9ub2RlKGFfY29uc3RfaXRlcmF0b3IgYl9pdCwgYV9jb25zdF9pdGVyYXRvciBlX2l0LAorCQkJICAgICAgIHNpemVfdHlwZSBjaGVja2VkX2luZCwKKwkJCSAgICAgICBhX2NvbnN0X3BvaW50ZXIgcF90cmFpdHMpCisgICAgeworICAgICAgaWYgKCFzaG91bGRfYmVfbWluZShiX2l0LCBlX2l0LCBjaGVja2VkX2luZCwgcF90cmFpdHMpKQorCXsKKwkgIGlmIChwX3RyYWl0cy0+Y21wX3ByZWZpeGVzKGJfaXQsIGVfaXQsIG1fcHJlZl9iX2l0LAorCQkJCSAgICAgbV9wcmVmX2VfaXQsIHRydWUpKQorCSAgICByZXR1cm4gbGVmdG1vc3RfZGVzY2VuZGFudCgpOworCSAgcmV0dXJuIHJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7CisJfQorCisgICAgICBzaXplX3R5cGUgaSA9IGdldF9wcmVmX3BvcyhiX2l0LCBlX2l0LCBwX3RyYWl0cyk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaSA8IGFycl9zaXplKTsKKworICAgICAgaWYgKG1fYV9wX2NoaWxkcmVuW2ldICE9IDApCisJcmV0dXJuIG1fYV9wX2NoaWxkcmVuW2ldOworCisgICAgICB3aGlsZSAoKytpIDwgYXJyX3NpemUpCisJaWYgKG1fYV9wX2NoaWxkcmVuW2ldICE9IDApCisJICB7CisJICAgIGNvbnN0IG5vZGVfdHlwZSYgX19udCA9IG1fYV9wX2NoaWxkcmVuW2ldLT5tX3R5cGU7CisJICAgIG5vZGVfcG9pbnRlciByZXQgPSBtX2FfcF9jaGlsZHJlbltpXTsKKworCSAgICBpZiAoX19udCA9PSBsZWFmX25vZGUpCisJICAgICAgcmV0dXJuIHJldDsKKworCSAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX19udCA9PSBpX25vZGUpOworCSAgICBpbm9kZV9wb2ludGVyIGlucCA9IHN0YXRpY19jYXN0PGlub2RlX3BvaW50ZXI+KHJldCk7CisJICAgIHJldHVybiBpbnAtPmxlZnRtb3N0X2Rlc2NlbmRhbnQoKTsKKwkgIH0KKworICAgICAgcmV0dXJuIHJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBhZGRfY2hpbGQobm9kZV9wb2ludGVyIHBfbmQsIGFfY29uc3RfaXRlcmF0b3IgYl9pdCwgYV9jb25zdF9pdGVyYXRvciBlX2l0LAorCSAgICAgIGFfY29uc3RfcG9pbnRlciBwX3RyYWl0cykKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgaSA9IGdldF9wcmVmX3BvcyhiX2l0LCBlX2l0LCBwX3RyYWl0cyk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaSA8IGFycl9zaXplKTsKKyAgICAgIGlmIChtX2FfcF9jaGlsZHJlbltpXSA9PSAwKQorCXsKKwkgIG1fYV9wX2NoaWxkcmVuW2ldID0gcF9uZDsKKwkgIHBfbmQtPm1fcF9wYXJlbnQgPSB0aGlzOworCSAgcmV0dXJuIHBfbmQ7CisJfQorICAgICAgcmV0dXJuIG1fYV9wX2NoaWxkcmVuW2ldOworICAgIH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfY29uc3RfcG9pbnRlcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBnZXRfam9pbl9jaGlsZChub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCwKKwkJICAgYV9jb25zdF9wb2ludGVyIHBfdHIpIGNvbnN0CisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHAgPSBjb25zdF9jYXN0PG5vZGVfcG9pbnRlcj4ocF9uZCk7CisgICAgICByZXR1cm4gY29uc3RfY2FzdDxpbm9kZV9wb2ludGVyPih0aGlzKS0+Z2V0X2pvaW5fY2hpbGQocCwgcF90cik7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGdldF9qb2luX2NoaWxkKG5vZGVfcG9pbnRlciBwX25kLCBhX2NvbnN0X3BvaW50ZXIgcF90cmFpdHMpCisgICAgeworICAgICAgc2l6ZV90eXBlIGk7CisgICAgICBhX2NvbnN0X2l0ZXJhdG9yIGJfaXQ7CisgICAgICBhX2NvbnN0X2l0ZXJhdG9yIGVfaXQ7CisgICAgICBpZiAocF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSkKKwl7CisJICBsZWFmX2NvbnN0X3BvaW50ZXIgcCA9IHN0YXRpY19jYXN0PGxlYWZfY29uc3RfcG9pbnRlcj4ocF9uZCk7CisKKwkgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZV90cmFpdHM6OmtleV9jb25zdF9yZWZlcmVuY2Uga2NyOworCSAga2NyIHJfa2V5ID0gYWNjZXNzX3RyYWl0czo6ZXh0cmFjdF9rZXkocC0+dmFsdWUoKSk7CisJICBiX2l0ID0gcF90cmFpdHMtPmJlZ2luKHJfa2V5KTsKKwkgIGVfaXQgPSBwX3RyYWl0cy0+ZW5kKHJfa2V5KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgYl9pdCA9IHN0YXRpY19jYXN0PGlub2RlX3BvaW50ZXI+KHBfbmQpLT5wcmVmX2JfaXQoKTsKKwkgIGVfaXQgPSBzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX25kKS0+cHJlZl9lX2l0KCk7CisJfQorICAgICAgaSA9IGdldF9wcmVmX3BvcyhiX2l0LCBlX2l0LCBwX3RyYWl0cyk7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaSA8IGFycl9zaXplKTsKKyAgICAgIHJldHVybiBtX2FfcF9jaGlsZHJlbltpXTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmVtb3ZlX2NoaWxkKG5vZGVfcG9pbnRlciBwX25kKQorICAgIHsKKyAgICAgIHNpemVfdHlwZSBpID0gMDsKKyAgICAgIGZvciAoOyBpIDwgYXJyX3NpemU7ICsraSkKKwlpZiAobV9hX3BfY2hpbGRyZW5baV0gPT0gcF9uZCkKKwkgIHsKKwkgICAgbV9hX3BfY2hpbGRyZW5baV0gPSAwOworCSAgICByZXR1cm47CisJICB9CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaSAhPSBhcnJfc2l6ZSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJlbW92ZV9jaGlsZChpdGVyYXRvciBpdCkKKyAgICB7ICppdC5tX3BfcF9jdXIgPSAwOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmVwbGFjZV9jaGlsZChub2RlX3BvaW50ZXIgcF9uZCwgYV9jb25zdF9pdGVyYXRvciBiX2l0LAorCQkgIGFfY29uc3RfaXRlcmF0b3IgZV9pdCwKKwkJICBhX2NvbnN0X3BvaW50ZXIgcF90cmFpdHMpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIGkgPSBnZXRfcHJlZl9wb3MoYl9pdCwgZV9pdCwgcF90cmFpdHMpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGkgPCBhcnJfc2l6ZSk7CisgICAgICBtX2FfcF9jaGlsZHJlbltpXSA9IHBfbmQ7CisgICAgICBwX25kLT5tX3BfcGFyZW50ID0gdGhpczsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6YV9jb25zdF9pdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBwcmVmX2JfaXQoKSBjb25zdAorICAgIHsgcmV0dXJuIG1fcHJlZl9iX2l0OyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6YV9jb25zdF9pdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBwcmVmX2VfaXQoKSBjb25zdAorICAgIHsgcmV0dXJuIG1fcHJlZl9lX2l0OyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIGJvb2wKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgc2hvdWxkX2JlX21pbmUoYV9jb25zdF9pdGVyYXRvciBiX2l0LCBhX2NvbnN0X2l0ZXJhdG9yIGVfaXQsCisJCSAgIHNpemVfdHlwZSBjaGVja2VkX2luZCwKKwkJICAgYV9jb25zdF9wb2ludGVyIHBfdHJhaXRzKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChtX2VfaW5kID09IDApCisJcmV0dXJuIHRydWU7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBudW1fZXMgPSBzdGQ6OmRpc3RhbmNlKGJfaXQsIGVfaXQpOworICAgICAgaWYgKG51bV9lcyA8IG1fZV9pbmQpCisJcmV0dXJuIGZhbHNlOworCisgICAgICBhX2NvbnN0X2l0ZXJhdG9yIGtleV9iX2l0ID0gYl9pdDsKKyAgICAgIHN0ZDo6YWR2YW5jZShrZXlfYl9pdCwgY2hlY2tlZF9pbmQpOworICAgICAgYV9jb25zdF9pdGVyYXRvciBrZXlfZV9pdCA9IGJfaXQ7CisgICAgICBzdGQ6OmFkdmFuY2Uoa2V5X2VfaXQsIG1fZV9pbmQpOworCisgICAgICBhX2NvbnN0X2l0ZXJhdG9yIHZhbHVlX2JfaXQgPSBtX3ByZWZfYl9pdDsKKyAgICAgIHN0ZDo6YWR2YW5jZSh2YWx1ZV9iX2l0LCBjaGVja2VkX2luZCk7CisgICAgICBhX2NvbnN0X2l0ZXJhdG9yIHZhbHVlX2VfaXQgPSBtX3ByZWZfYl9pdDsKKyAgICAgIHN0ZDo6YWR2YW5jZSh2YWx1ZV9lX2l0LCBtX2VfaW5kKTsKKworICAgICAgcmV0dXJuIHBfdHJhaXRzLT5lcXVhbF9wcmVmaXhlcyhrZXlfYl9pdCwga2V5X2VfaXQsIHZhbHVlX2JfaXQsCisJCQkJICAgICAgdmFsdWVfZV9pdCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bGVhZl9wb2ludGVyCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGxlZnRtb3N0X2Rlc2NlbmRhbnQoKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX3BvdCA9ICpiZWdpbigpOworICAgICAgaWYgKHBfcG90LT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorCXJldHVybiAoc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX3BvdCkpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcG90LT5tX3R5cGUgPT0gaV9ub2RlKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX3BvdCktPmxlZnRtb3N0X2Rlc2NlbmRhbnQoKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpsZWFmX2NvbnN0X3BvaW50ZXIKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbGVmdG1vc3RfZGVzY2VuZGFudCgpIGNvbnN0CisgICAgeyByZXR1cm4gY29uc3RfY2FzdDxpbm9kZV9wb2ludGVyPih0aGlzKS0+bGVmdG1vc3RfZGVzY2VuZGFudCgpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpsZWFmX3BvaW50ZXIKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcmlnaHRtb3N0X2Rlc2NlbmRhbnQoKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBudW1fY2hpbGRyZW4gPSBzdGQ6OmRpc3RhbmNlKGJlZ2luKCksIGVuZCgpKTsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChudW1fY2hpbGRyZW4gPj0gMik7CisKKyAgICAgIGl0ZXJhdG9yIGl0ID0gYmVnaW4oKTsKKyAgICAgIHN0ZDo6YWR2YW5jZShpdCwgbnVtX2NoaWxkcmVuIC0gMSk7CisgICAgICBub2RlX3BvaW50ZXIgcF9wb3QgPSogaXQ7CisgICAgICBpZiAocF9wb3QtPm1fdHlwZSA9PSBsZWFmX25vZGUpCisJcmV0dXJuIHN0YXRpY19jYXN0PGxlYWZfcG9pbnRlcj4ocF9wb3QpOworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcG90LT5tX3R5cGUgPT0gaV9ub2RlKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX3BvdCktPnJpZ2h0bW9zdF9kZXNjZW5kYW50KCk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bGVhZl9jb25zdF9wb2ludGVyCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHJpZ2h0bW9zdF9kZXNjZW5kYW50KCkgY29uc3QKKyAgICB7IHJldHVybiBjb25zdF9jYXN0PGlub2RlX3BvaW50ZXI+KHRoaXMpLT5yaWdodG1vc3RfZGVzY2VuZGFudCgpOyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgZ2V0X2JlZ2luX3BvcygpIGNvbnN0CisgICAgeworICAgICAgc2l6ZV90eXBlIGkgPSAwOworICAgICAgZm9yICg7IGkgPCBhcnJfc2l6ZSAmJiBtX2FfcF9jaGlsZHJlbltpXSA9PSAwOyArK2kpCisJOworICAgICAgcmV0dXJuIGk7CisgICAgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2RlYnVnX2luZm8KKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgYXNzZXJ0X3ZhbGlkX2ltcChhX2NvbnN0X3BvaW50ZXIgcF90cmFpdHMsCisJCSAgICAgY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAorICAgIHsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShiYXNlX3R5cGU6Om1fdHlwZSA9PSBpX25vZGUpOworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpkaXN0YW5jZShwcmVmX2JfaXQoKSwgcHJlZl9lX2l0KCkpKSA9PSBtX2VfaW5kKTsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShzdGQ6OmRpc3RhbmNlKGJlZ2luKCksIGVuZCgpKSA+PSAyKTsKKworICAgICAgZm9yICh0eXBlbmFtZSBfSW5vZGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kKCk7ICsraXQpCisJeworCSAgbm9kZV9jb25zdF9wb2ludGVyIHBfbmQgPSAqaXQ7CisJICBQQl9EU19ERUJVR19WRVJJRlkocF9uZC0+bV9wX3BhcmVudCA9PSB0aGlzKTsKKwkgIG5vZGVfZGVidWdfaW5mbyBjaGlsZF9yZXQgPSBwX25kLT5hc3NlcnRfdmFsaWRfaW1wKHBfdHJhaXRzLAorCQkJCQkJCSAgICAgX19maWxlLCBfX2xpbmUpOworCisJICBQQl9EU19ERUJVR19WRVJJRlkoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihzdGQ6OmRpc3RhbmNlKGNoaWxkX3JldC5maXJzdCwgY2hpbGRfcmV0LnNlY29uZCkpID49IG1fZV9pbmQpOworCSAgUEJfRFNfREVCVUdfVkVSSUZZKHNob3VsZF9iZV9taW5lKGNoaWxkX3JldC5maXJzdCwgY2hpbGRfcmV0LnNlY29uZCwgMCwgcF90cmFpdHMpKTsKKwkgIFBCX0RTX0RFQlVHX1ZFUklGWShnZXRfcHJlZl9wb3MoY2hpbGRfcmV0LmZpcnN0LCBjaGlsZF9yZXQuc2Vjb25kLCBwX3RyYWl0cykgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihpdC5tX3BfcF9jdXIgLSBtX2FfcF9jaGlsZHJlbikpOworCX0KKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwcmVmX2JfaXQoKSwgcHJlZl9lX2l0KCkpOworICAgIH0KKyNlbmRpZgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3BvbGljeV9hY2Nlc3NfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5NzYxZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcG9saWN5X2FjY2Vzc19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDYzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhdF90cmllXy9wb2xpY3lfYWNjZXNzX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWUuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjphY2Nlc3NfdHJhaXRzJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9hY2Nlc3NfdHJhaXRzKCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6YWNjZXNzX3RyYWl0cyYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfYWNjZXNzX3RyYWl0cygpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfdXBkYXRlJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9ub2RlX3VwZGF0ZSgpCit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworY29uc3QgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfdXBkYXRlJiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9ub2RlX3VwZGF0ZSgpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9yX2VyYXNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9yX2VyYXNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDY2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3JfZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMDMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGF0X3RyaWVfL3JfZXJhc2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBwYXRfdHJpZS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2FjdHVhbF9lcmFzZV9ub2RlKG5vZGVfcG9pbnRlciBwX3opCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3NpemUgPiAwKTsKKyAgLS1tX3NpemU7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoZGVidWdfYmFzZTo6ZXJhc2VfZXhpc3RpbmcoUEJfRFNfVjJGKHBfei0+bV92YWx1ZSkpKTsKKyAgcF96LT5+bm9kZSgpOworICBzX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUocF96LCAxKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit1cGRhdGVfbWluX21heF9mb3JfZXJhc2VkX25vZGUobm9kZV9wb2ludGVyIHBfeikKK3sKKyAgaWYgKG1fc2l6ZSA9PSAxKQorICAgIHsKKyAgICAgIG1fcF9oZWFkLT5tX3BfbGVmdCA9IG1fcF9oZWFkLT5tX3BfcmlnaHQgPSBtX3BfaGVhZDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKG1fcF9oZWFkLT5tX3BfbGVmdCA9PSBwX3opCisgICAgeworICAgICAgaXRlcmF0b3IgaXQocF96KTsKKyAgICAgICsraXQ7CisgICAgICBtX3BfaGVhZC0+bV9wX2xlZnQgPSBpdC5tX3BfbmQ7CisgICAgfQorICBlbHNlIGlmIChtX3BfaGVhZC0+bV9wX3JpZ2h0ID09IHBfeikKKyAgICB7CisgICAgICBpdGVyYXRvciBpdChwX3opOworICAgICAgLS1pdDsKKyAgICAgIG1fcF9oZWFkLT5tX3BfcmlnaHQgPSBpdC5tX3BfbmQ7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZCh0cnVlLCB0cnVlKTspCisgIGNsZWFyX2ltcChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgIG1fc2l6ZSA9IDA7CisgIGluaXRpYWxpemUoKTsKKyAgX0dMSUJDWFhfREVCVUdfT05MWShkZWJ1Z19iYXNlOjpjbGVhcigpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQodHJ1ZSwgdHJ1ZSk7KQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXJfaW1wKG5vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZCA9PSAwKQorICAgIHJldHVybjsKKyAgY2xlYXJfaW1wKHBfbmQtPm1fcF9sZWZ0KTsKKyAgY2xlYXJfaW1wKHBfbmQtPm1fcF9yaWdodCk7CisgIHBfbmQtPn5Ob2RlKCk7CisgIHNfbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX25kLCAxKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9yb3RhdGVfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3JvdGF0ZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWZjMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9yb3RhdGVfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxNTAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcGF0X3RyaWVfL3JvdGF0ZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgaW1wcyBmb3Igcm90YXRpbmcgbm9kZXMuCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cityb3RhdGVfbGVmdChub2RlX3BvaW50ZXIgcF94KQoreworICBub2RlX3BvaW50ZXIgcF95ID0gcF94LT5tX3BfcmlnaHQ7CisgIHBfeC0+bV9wX3JpZ2h0ID0gcF95LT5tX3BfbGVmdDsKKworICBpZiAocF95LT5tX3BfbGVmdCAhPSAwKQorICAgIHBfeS0+bV9wX2xlZnQtPm1fcF9wYXJlbnQgPSBwX3g7CisKKyAgcF95LT5tX3BfcGFyZW50ID0gcF94LT5tX3BfcGFyZW50OworICBpZiAocF94ID09IG1fcF9oZWFkLT5tX3BfcGFyZW50KQorICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF95OworICBlbHNlIGlmIChwX3ggPT0gcF94LT5tX3BfcGFyZW50LT5tX3BfbGVmdCkKKyAgICBwX3gtPm1fcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF95OworICBlbHNlCisgICAgcF94LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQgPSBwX3k7CisKKyAgcF95LT5tX3BfbGVmdCA9IHBfeDsKKyAgcF94LT5tX3BfcGFyZW50ID0gcF95OworCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX3gpOykKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfeSk7KQorCisgIGFwcGx5X3VwZGF0ZShwX3gsIChOb2RlX1VwZGF0ZSopdGhpcyk7CisgIGFwcGx5X3VwZGF0ZShwX3gtPm1fcF9wYXJlbnQsIChOb2RlX1VwZGF0ZSopdGhpcyk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorcm90YXRlX3JpZ2h0KG5vZGVfcG9pbnRlciBwX3gpCit7CisgIG5vZGVfcG9pbnRlciBwX3kgPSBwX3gtPm1fcF9sZWZ0OworICBwX3gtPm1fcF9sZWZ0ID0gcF95LT5tX3BfcmlnaHQ7CisKKyAgaWYgKHBfeS0+bV9wX3JpZ2h0ICE9IDApCisgICAgcF95LT5tX3BfcmlnaHQtPm1fcF9wYXJlbnQgPSBwX3g7CisKKyAgcF95LT5tX3BfcGFyZW50ID0gcF94LT5tX3BfcGFyZW50OworICBpZiAocF94ID09IG1fcF9oZWFkLT5tX3BfcGFyZW50KQorICAgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF95OworICBlbHNlIGlmIChwX3ggPT0gcF94LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQpCisgICAgcF94LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQgPSBwX3k7CisgIGVsc2UKKyAgICBwX3gtPm1fcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF95OworCisgIHBfeS0+bV9wX3JpZ2h0ID0gcF94OworICBwX3gtPm1fcF9wYXJlbnQgPSBwX3k7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfeCk7KQorICBfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF95KTspCisKKyAgYXBwbHlfdXBkYXRlKHBfeCwgKE5vZGVfVXBkYXRlKil0aGlzKTsKKyAgYXBwbHlfdXBkYXRlKHBfeC0+bV9wX3BhcmVudCwgKE5vZGVfVXBkYXRlKil0aGlzKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cityb3RhdGVfcGFyZW50KG5vZGVfcG9pbnRlciBwX25kKQoreworICBub2RlX3BvaW50ZXIgcF9wYXJlbnQgPSBwX25kLT5tX3BfcGFyZW50OworICBpZiAocF9uZCA9PSBwX3BhcmVudC0+bV9wX2xlZnQpCisgICAgcm90YXRlX3JpZ2h0KHBfcGFyZW50KTsKKyAgZWxzZQorICAgIHJvdGF0ZV9sZWZ0KHBfcGFyZW50KTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfcGFyZW50LT5tX3BfcGFyZW50ID0gcF9uZCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3BfbGVmdCA9PSBwX3BhcmVudCB8fCBwX25kLT5tX3BfcmlnaHQgPT0gcF9wYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2FwcGx5X3VwZGF0ZShub2RlX3BvaW50ZXIgLypwX25kKi8sIF9fZ251X3BiZHM6Om51bGxfbm9kZV91cGRhdGUqICAvKnBfdXBkYXRlKi8pCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIE5vZGVfVXBkYXRlXz4KK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CithcHBseV91cGRhdGUobm9kZV9wb2ludGVyIHBfbmQsIE5vZGVfVXBkYXRlXyogcF91cGRhdGUpCit7CisgIHBfdXBkYXRlLT5vcGVyYXRvcigpKCYgUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpLChwX25kLT5tX3BfbGVmdCA9PSAwKSA/CisJCQkwIDoKKwkJCSYgUEJfRFNfVjJGKHBfbmQtPm1fcF9sZWZ0LT5tX3ZhbHVlKSwocF9uZC0+bV9wX3JpZ2h0ID09IDApID8KKwkJCTAgOgorCQkJJiBQQl9EU19WMkYocF9uZC0+bV9wX3JpZ2h0LT5tX3ZhbHVlKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+CitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordXBkYXRlX3RvX3RvcChub2RlX3BvaW50ZXIgcF9uZCwgTm9kZV9VcGRhdGVfKiBwX3VwZGF0ZSkKK3sKKyAgd2hpbGUgKHBfbmQgIT0gbV9wX2hlYWQpCisgICAgeworICAgICAgYXBwbHlfdXBkYXRlKHBfbmQsIHBfdXBkYXRlKTsKKyAgICAgIHBfbmQgPSBwX25kLT5tX3BfcGFyZW50OworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit1cGRhdGVfdG9fdG9wKG5vZGVfcG9pbnRlciAvKnBfbmQqLywgX19nbnVfcGJkczo6bnVsbF9ub2RlX3VwZGF0ZSogIC8qcF91cGRhdGUqLykKK3sgfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3NwbGl0X2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9zcGxpdF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmE5NzlmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy9zcGxpdF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDI1MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwYXRfdHJpZV8vc3BsaXRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBwYXRfdHJpZS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICBicmFuY2hfYmFnIGJhZzsKKyAgbGVhZl9wb2ludGVyIHBfc3BsaXRfbGYgPSBzcGxpdF9wcmVwKHJfa2V5LCBvdGhlciwgYmFnKTsKKyAgaWYgKHBfc3BsaXRfbGYgPT0gMCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFnLmVtcHR5KCkpOworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm47CisgICAgfQorCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghYmFnLmVtcHR5KCkpOworICBvdGhlci5jbGVhcigpOworCisgIG1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcmVjX3NwbGl0KG1fcF9oZWFkLT5tX3BfcGFyZW50LCBwcmVmX2JlZ2luKHBfc3BsaXRfbGYpLAorCQkJCSAgIHByZWZfZW5kKHBfc3BsaXRfbGYpLCBvdGhlciwgYmFnKTsKKworICBtX3BfaGVhZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudCA9IG1fcF9oZWFkOworCisgIGhlYWRfcG9pbnRlciBfX29oZWFkID0gb3RoZXIubV9wX2hlYWQ7CisgIF9fb2hlYWQtPm1fcF9tYXggPSBtX3BfaGVhZC0+bV9wX21heDsKKyAgbV9wX2hlYWQtPm1fcF9tYXggPSByaWdodG1vc3RfZGVzY2VuZGFudChtX3BfaGVhZC0+bV9wX3BhcmVudCk7CisgIF9fb2hlYWQtPm1fcF9taW4gPSBvdGhlci5sZWZ0bW9zdF9kZXNjZW5kYW50KF9fb2hlYWQtPm1fcF9wYXJlbnQpOworCisgIG90aGVyLm1fc2l6ZSA9IHN0ZDo6ZGlzdGFuY2Uob3RoZXIuUEJfRFNfQ0xBU1NfQ19ERUM6OmJlZ2luKCksCisJCQkgICAgICAgb3RoZXIuUEJfRFNfQ0xBU1NfQ19ERUM6OmVuZCgpKTsKKyAgbV9zaXplIC09IG90aGVyLm1fc2l6ZTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpsZWFmX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0X3ByZXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyLAorCSAgIGJyYW5jaF9iYWcmIHJfYmFnKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocl9iYWcuZW1wdHkoKSk7CisgIGlmIChtX3NpemUgPT0gMCkKKyAgICB7CisgICAgICBvdGhlci5jbGVhcigpOworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKHN5bnRoX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKHJfa2V5LAorCQkJCSAgICBQQl9EU19WMkYoc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihtX3BfaGVhZC0+bV9wX21pbiktPnZhbHVlKCkpKSkKKyAgICB7CisgICAgICBvdGhlci5jbGVhcigpOworICAgICAgdmFsdWVfc3dhcChvdGhlcik7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBpZiAoIXN5bnRoX2FjY2Vzc190cmFpdHM6OmNtcF9rZXlzKHJfa2V5LAorCQkJCSAgICAgICBQQl9EU19WMkYoc3RhdGljX2Nhc3Q8bGVhZl9jb25zdF9wb2ludGVyPihtX3BfaGVhZC0+bV9wX21heCktPnZhbHVlKCkpKSkKKyAgICB7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBpdGVyYXRvciBpdCA9IGxvd2VyX2JvdW5kKHJfa2V5KTsKKworICBpZiAoIXN5bnRoX2FjY2Vzc190cmFpdHM6OmVxdWFsX2tleXMoUEJfRFNfVjJGKCppdCksIHJfa2V5KSkKKyAgICAtLWl0OworCisgIG5vZGVfcG9pbnRlciBwX25kID0gaXQubV9wX25kOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IGxlYWZfbm9kZSk7CisgIGxlYWZfcG9pbnRlciBwX3JldF9sID0gc3RhdGljX2Nhc3Q8bGVhZl9wb2ludGVyPihwX25kKTsKKyAgd2hpbGUgKHBfbmQtPm1fdHlwZSAhPSBoZWFkX25vZGUpCisgICAgeworICAgICAgcl9iYWcuYWRkX2JyYW5jaCgpOworICAgICAgcF9uZCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisgICAgfQorICBfR0xJQkNYWF9ERUJVR19PTkxZKGRlYnVnX2Jhc2U6OnNwbGl0KHJfa2V5LChzeW50aF9hY2Nlc3NfdHJhaXRzJikoKnRoaXMpLCBvdGhlcik7KQorCisgIHJldHVybiBwX3JldF9sOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVjX3NwbGl0KG5vZGVfcG9pbnRlciBwX25kLCBhX2NvbnN0X2l0ZXJhdG9yIGJfaXQsIGFfY29uc3RfaXRlcmF0b3IgZV9pdCwKKwkgIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlciwgYnJhbmNoX2JhZyYgcl9iYWcpCit7CisgIGlmIChwX25kLT5tX3R5cGUgPT0gbGVhZl9ub2RlKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChvdGhlci5tX3BfaGVhZC0+bV9wX3BhcmVudCA9PSAwKTsKKyAgICAgIHJldHVybiBwX25kOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV90eXBlID09IGlfbm9kZSk7CisgIGlub2RlX3BvaW50ZXIgcF9pbmQgPSBzdGF0aWNfY2FzdDxpbm9kZV9wb2ludGVyPihwX25kKTsKKworICBub2RlX3BvaW50ZXIgcGZpcnN0ID0gcF9pbmQtPmdldF9jaGlsZF9ub2RlKGJfaXQsIGVfaXQsIHRoaXMpOworICBub2RlX3BvaW50ZXIgcF9jaGlsZF9yZXQgPSByZWNfc3BsaXQocGZpcnN0LCBiX2l0LCBlX2l0LCBvdGhlciwgcl9iYWcpOworICBQQl9EU19BU1NFUlRfTk9ERV9WQUxJRChwX2NoaWxkX3JldCkKKyAgcF9pbmQtPnJlcGxhY2VfY2hpbGQocF9jaGlsZF9yZXQsIGJfaXQsIGVfaXQsIHRoaXMpOworICBhcHBseV91cGRhdGUocF9pbmQsIChub2RlX3VwZGF0ZSopdGhpcyk7CisKKyAgaW5vZGVfaXRlcmF0b3IgY2hpbGRfaXQgPSBwX2luZC0+Z2V0X2NoaWxkX2l0KGJfaXQsIGVfaXQsIHRoaXMpOworICBjb25zdCBzaXplX3R5cGUgbGhzX2Rpc3QgPSBzdGQ6OmRpc3RhbmNlKHBfaW5kLT5iZWdpbigpLCBjaGlsZF9pdCk7CisgIGNvbnN0IHNpemVfdHlwZSBsaHNfbnVtX2NoaWxkcmVuID0gbGhzX2Rpc3QgKyAxOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobGhzX251bV9jaGlsZHJlbiA+IDApOworCisgIGNvbnN0IHNpemVfdHlwZSByaHNfZGlzdCA9ICBzdGQ6OmRpc3RhbmNlKHBfaW5kLT5iZWdpbigpLCBwX2luZC0+ZW5kKCkpOworICBzaXplX3R5cGUgcmhzX251bV9jaGlsZHJlbiA9IHJoc19kaXN0IC0gbGhzX251bV9jaGlsZHJlbjsKKyAgaWYgKHJoc19udW1fY2hpbGRyZW4gPT0gMCkKKyAgICB7CisgICAgICBhcHBseV91cGRhdGUocF9pbmQsIChub2RlX3VwZGF0ZSopdGhpcyk7CisgICAgICByZXR1cm4gcF9pbmQ7CisgICAgfQorCisgIG90aGVyLnNwbGl0X2luc2VydF9icmFuY2gocF9pbmQtPmdldF9lX2luZCgpLCBiX2l0LCBjaGlsZF9pdCwKKwkJCSAgICByaHNfbnVtX2NoaWxkcmVuLCByX2JhZyk7CisKKyAgY2hpbGRfaXQgPSBwX2luZC0+Z2V0X2NoaWxkX2l0KGJfaXQsIGVfaXQsIHRoaXMpOworICB3aGlsZSAocmhzX251bV9jaGlsZHJlbiAhPSAwKQorICAgIHsKKyAgICAgICsrY2hpbGRfaXQ7CisgICAgICBwX2luZC0+cmVtb3ZlX2NoaWxkKGNoaWxkX2l0KTsKKyAgICAgIC0tcmhzX251bV9jaGlsZHJlbjsKKyAgICB9CisgIGFwcGx5X3VwZGF0ZShwX2luZCwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKworICBjb25zdCBzaXplX3R5cGUgaW50X2Rpc3QgPSBzdGQ6OmRpc3RhbmNlKHBfaW5kLT5iZWdpbigpLCBwX2luZC0+ZW5kKCkpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaW50X2Rpc3QgPj0gMSk7CisgIGlmIChpbnRfZGlzdCA+IDEpCisgICAgeworICAgICAgcF9pbmQtPnVwZGF0ZV9wcmVmaXhlcyh0aGlzKTsKKyAgICAgIFBCX0RTX0FTU0VSVF9OT0RFX1ZBTElEKHBfaW5kKQorICAgICAgYXBwbHlfdXBkYXRlKHBfaW5kLCAobm9kZV91cGRhdGUqKXRoaXMpOworICAgICAgcmV0dXJuIHBfaW5kOworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF9yZXQgPSAqcF9pbmQtPmJlZ2luKCk7CisgIHBfaW5kLT5+aW5vZGUoKTsKKyAgc19pbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShwX2luZCwgMSk7CisgIGFwcGx5X3VwZGF0ZShwX3JldCwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgcmV0dXJuIHBfcmV0OworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXRfaW5zZXJ0X2JyYW5jaChzaXplX3R5cGUgZV9pbmQsIGFfY29uc3RfaXRlcmF0b3IgYl9pdCwKKwkJICAgIGlub2RlX2l0ZXJhdG9yIGNoaWxkX2JfaXQsCisJCSAgICBzaXplX3R5cGUgbnVtX2NoaWxkcmVuLCBicmFuY2hfYmFnJiByX2JhZykKK3sKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICBpZiAobV9wX2hlYWQtPm1fcF9wYXJlbnQgIT0gMCkKKyAgICBQQl9EU19BU1NFUlRfTk9ERV9WQUxJRChtX3BfaGVhZC0+bV9wX3BhcmVudCkKKyNlbmRpZgorCisgIGNvbnN0IHNpemVfdHlwZSBzdGFydCA9IG1fcF9oZWFkLT5tX3BfcGFyZW50ID09IDAgPyAwIDogMTsKKyAgY29uc3Qgc2l6ZV90eXBlIHRvdGFsX251bV9jaGlsZHJlbiA9IHN0YXJ0ICsgbnVtX2NoaWxkcmVuOworICBpZiAodG90YWxfbnVtX2NoaWxkcmVuID09IDApCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9oZWFkLT5tX3BfcGFyZW50ID09IDApOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAodG90YWxfbnVtX2NoaWxkcmVuID09IDEpCisgICAgeworICAgICAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ICE9IDApCisJeworCSAgUEJfRFNfQVNTRVJUX05PREVfVkFMSUQobV9wX2hlYWQtPm1fcF9wYXJlbnQpCisJICByZXR1cm47CisJfQorCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gMCk7CisgICAgICArK2NoaWxkX2JfaXQ7CisgICAgICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9ICpjaGlsZF9iX2l0OworICAgICAgbV9wX2hlYWQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQgPSBtX3BfaGVhZDsKKyAgICAgIGFwcGx5X3VwZGF0ZShtX3BfaGVhZC0+bV9wX3BhcmVudCwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgICAgIFBCX0RTX0FTU0VSVF9OT0RFX1ZBTElEKG1fcF9oZWFkLT5tX3BfcGFyZW50KQorICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQodG90YWxfbnVtX2NoaWxkcmVuID4gMSk7CisgIGlub2RlX3BvaW50ZXIgcF9uZXdfcm9vdCA9IHJfYmFnLmdldF9icmFuY2goKTsKKyAgbmV3IChwX25ld19yb290KSBpbm9kZShlX2luZCwgYl9pdCk7CisgIHNpemVfdHlwZSBudW1faW5zZXJ0ZWQgPSAwOworICB3aGlsZSAobnVtX2luc2VydGVkKysgPCBudW1fY2hpbGRyZW4pCisgICAgeworICAgICAgKytjaGlsZF9iX2l0OworICAgICAgUEJfRFNfQVNTRVJUX05PREVfVkFMSUQoKCpjaGlsZF9iX2l0KSkKKyAgICAgIHBfbmV3X3Jvb3QtPmFkZF9jaGlsZCgqY2hpbGRfYl9pdCwgcHJlZl9iZWdpbigqY2hpbGRfYl9pdCksCisJCQkgICAgcHJlZl9lbmQoKmNoaWxkX2JfaXQpLCB0aGlzKTsKKyAgICB9CisKKyAgaWYgKG1fcF9oZWFkLT5tX3BfcGFyZW50ICE9IDApCisgICAgcF9uZXdfcm9vdC0+YWRkX2NoaWxkKG1fcF9oZWFkLT5tX3BfcGFyZW50LAorCQkJICBwcmVmX2JlZ2luKG1fcF9oZWFkLT5tX3BfcGFyZW50KSwKKwkJCSAgcHJlZl9lbmQobV9wX2hlYWQtPm1fcF9wYXJlbnQpLCB0aGlzKTsKKworICBtX3BfaGVhZC0+bV9wX3BhcmVudCA9IHBfbmV3X3Jvb3Q7CisgIHBfbmV3X3Jvb3QtPm1fcF9wYXJlbnQgPSBtX3BfaGVhZDsKKyAgYXBwbHlfdXBkYXRlKG1fcF9oZWFkLT5tX3BfcGFyZW50LCAobm9kZV91cGRhdGUqKXRoaXMpOworICBQQl9EU19BU1NFUlRfTk9ERV9WQUxJRChtX3BfaGVhZC0+bV9wX3BhcmVudCkKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vc3ludGhfYWNjZXNzX3RyYWl0cy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3N5bnRoX2FjY2Vzc190cmFpdHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMzlhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3N5bnRoX2FjY2Vzc190cmFpdHMuaHBwCkBAIC0wLDAgKzEsMjE4IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHBhdF90cmllXy9zeW50aF9hY2Nlc3NfdHJhaXRzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgcGF0cmljaWEgdHJlZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19IUFAKKyNkZWZpbmUgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisKKyNkZWZpbmUgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlX1RyYWl0cywgYm9vbCBTZXQsIHR5cGVuYW1lIF9BVHJhaXRzPgorCisjZGVmaW5lIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19DX0RFQyBcCisgICAgc3ludGhfYWNjZXNzX3RyYWl0czxUeXBlX1RyYWl0cywgU2V0LCBfQVRyYWl0cz4KKworICAgIC8vLyBTeW50aGV0aWMgZWxlbWVudCBhY2Nlc3MgdHJhaXRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVfVHJhaXRzLCBib29sIFNldCwgdHlwZW5hbWUgX0FUcmFpdHM+CisgICAgc3RydWN0IHN5bnRoX2FjY2Vzc190cmFpdHMgOiBwdWJsaWMgX0FUcmFpdHMKKyAgICB7CisgICAgICB0eXBlZGVmIF9BVHJhaXRzIAkJCQkJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yCWNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBUeXBlX1RyYWl0cyAJCQkJdHlwZV90cmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHR5cGVfdHJhaXRzOjpjb25zdF9yZWZlcmVuY2UgCWNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHlwZV90cmFpdHM6OmtleV9jb25zdF9yZWZlcmVuY2Uga2V5X2NvbnN0X3JlZmVyZW5jZTsKKworICAgICAgc3ludGhfYWNjZXNzX3RyYWl0cygpOworCisgICAgICBzeW50aF9hY2Nlc3NfdHJhaXRzKGNvbnN0IGJhc2VfdHlwZSYpOworCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgZXF1YWxfcHJlZml4ZXMoY29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvciwKKwkJICAgICBjb25zdF9pdGVyYXRvciwgYm9vbCBjb21wYXJlX2FmdGVyID0gdHJ1ZSkgY29uc3Q7CisKKyAgICAgIGJvb2wKKyAgICAgIGVxdWFsX2tleXMoa2V5X2NvbnN0X3JlZmVyZW5jZSwga2V5X2NvbnN0X3JlZmVyZW5jZSkgY29uc3Q7CisKKyAgICAgIGJvb2wKKyAgICAgIGNtcF9wcmVmaXhlcyhjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yLAorCQkgICBjb25zdF9pdGVyYXRvciwgYm9vbCBjb21wYXJlX2FmdGVyID0gZmFsc2UpIGNvbnN0OworCisgICAgICBib29sCisgICAgICBjbXBfa2V5cyhrZXlfY29uc3RfcmVmZXJlbmNlLCBrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIHN0YXRpYyBrZXlfY29uc3RfcmVmZXJlbmNlCisgICAgICBleHRyYWN0X2tleShjb25zdF9yZWZlcmVuY2UpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoa2V5X2NvbnN0X3JlZmVyZW5jZSwga2V5X2NvbnN0X3JlZmVyZW5jZSk7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICBpbmxpbmUgc3RhdGljIGtleV9jb25zdF9yZWZlcmVuY2UKKyAgICAgIGV4dHJhY3Rfa2V5KGNvbnN0X3JlZmVyZW5jZSwgdHJ1ZV90eXBlKTsKKworICAgICAgaW5saW5lIHN0YXRpYyBrZXlfY29uc3RfcmVmZXJlbmNlCisgICAgICBleHRyYWN0X2tleShjb25zdF9yZWZlcmVuY2UsIGZhbHNlX3R5cGUpOworCisgICAgICBzdGF0aWMgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBTZXQ+IHNfc2V0X2luZDsKKyAgICB9OworCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDCisgICAgaW50ZWdyYWxfY29uc3RhbnQ8aW50LFNldD4KKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OnNfc2V0X2luZDsKKworICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19UX0RFQworICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19DX0RFQzo6CisgICAgc3ludGhfYWNjZXNzX3RyYWl0cygpCisgICAgeyB9CisKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OgorICAgIHN5bnRoX2FjY2Vzc190cmFpdHMoY29uc3QgX0FUcmFpdHMmIHJfdHJhaXRzKSAKKyAgICA6IF9BVHJhaXRzKHJfdHJhaXRzKQorICAgIHsgfQorCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDCisgICAgaW5saW5lIGJvb2wKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OgorICAgIGVxdWFsX3ByZWZpeGVzKGNvbnN0X2l0ZXJhdG9yIGJfbCwgY29uc3RfaXRlcmF0b3IgZV9sLCBjb25zdF9pdGVyYXRvciBiX3IsCisJCSAgIGNvbnN0X2l0ZXJhdG9yIGVfciwgYm9vbCBjb21wYXJlX2FmdGVyIC8qPSBmYWxzZSAqLykgY29uc3QKKyAgICB7CisgICAgICB3aGlsZSAoYl9sICE9IGVfbCkKKwl7CisJICBpZiAoYl9yID09IGVfcikKKwkgICAgcmV0dXJuIGZhbHNlOworCSAgaWYgKGJhc2VfdHlwZTo6ZV9wb3MoKmJfbCkgIT0gYmFzZV90eXBlOjplX3BvcygqYl9yKSkKKwkgICAgcmV0dXJuIGZhbHNlOworCSAgKytiX2w7CisJICArK2JfcjsKKwl9CisgICAgICByZXR1cm4gKCFjb21wYXJlX2FmdGVyIHx8IGJfciA9PSBlX3IpOworICAgIH0KKworICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19UX0RFQworICAgIGJvb2wKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OgorICAgIGVxdWFsX2tleXMoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2xoc19rZXksCisJICAgICAgIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9yaHNfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBlcXVhbF9wcmVmaXhlcyhiYXNlX3R5cGU6OmJlZ2luKHJfbGhzX2tleSksCisJCQkgICAgYmFzZV90eXBlOjplbmQocl9saHNfa2V5KSwKKwkJCSAgICBiYXNlX3R5cGU6OmJlZ2luKHJfcmhzX2tleSksCisJCQkgICAgYmFzZV90eXBlOjplbmQocl9yaHNfa2V5KSwKKwkJCSAgICB0cnVlKTsKKyAgICB9CisKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBib29sCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBjbXBfcHJlZml4ZXMoY29uc3RfaXRlcmF0b3IgYl9sLCBjb25zdF9pdGVyYXRvciBlX2wsIGNvbnN0X2l0ZXJhdG9yIGJfciwKKwkJIGNvbnN0X2l0ZXJhdG9yIGVfciwgYm9vbCBjb21wYXJlX2FmdGVyIC8qID0gZmFsc2UqLykgY29uc3QKKyAgICB7CisgICAgICB3aGlsZSAoYl9sICE9IGVfbCkKKwl7CisJICBpZiAoYl9yID09IGVfcikKKwkgICAgcmV0dXJuIGZhbHNlOworCisJICBjb25zdCB0eXBlbmFtZSBiYXNlX3R5cGU6OnNpemVfdHlwZSBsX3BvcyA9IGJhc2VfdHlwZTo6ZV9wb3MoKmJfbCk7CisJICBjb25zdCB0eXBlbmFtZSBiYXNlX3R5cGU6OnNpemVfdHlwZSByX3BvcyA9IGJhc2VfdHlwZTo6ZV9wb3MoKmJfcik7CisJICBpZiAobF9wb3MgIT0gcl9wb3MpCisJICAgIHJldHVybiBsX3BvcyA8IHJfcG9zOworCSAgKytiX2w7CisJICArK2JfcjsKKwl9CisKKyAgICAgIGlmICghY29tcGFyZV9hZnRlcikKKwlyZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gYl9yICE9IGVfcjsKKyAgICB9CisKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBib29sCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBjbXBfa2V5cyhrZXlfY29uc3RfcmVmZXJlbmNlIHJfbGhzX2tleSwKKwkgICAgIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9yaHNfa2V5KSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBjbXBfcHJlZml4ZXMoYmFzZV90eXBlOjpiZWdpbihyX2xoc19rZXkpLAorCQkJICBiYXNlX3R5cGU6OmVuZChyX2xoc19rZXkpLAorCQkJICBiYXNlX3R5cGU6OmJlZ2luKHJfcmhzX2tleSksCisJCQkgIGJhc2VfdHlwZTo6ZW5kKHJfcmhzX2tleSksCisJCQkgIHRydWUpOworICAgIH0KKworICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OmtleV9jb25zdF9yZWZlcmVuY2UKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OgorICAgIGV4dHJhY3Rfa2V5KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCkKKyAgICB7IHJldHVybiBleHRyYWN0X2tleShyX3ZhbCwgc19zZXRfaW5kKTsgfQorCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX1RfREVDCisgICAgaW5saW5lIHR5cGVuYW1lIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19DX0RFQzo6a2V5X2NvbnN0X3JlZmVyZW5jZQorICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19DX0RFQzo6CisgICAgZXh0cmFjdF9rZXkoY29uc3RfcmVmZXJlbmNlIHJfdmFsLCB0cnVlX3R5cGUpCisgICAgeyByZXR1cm4gcl92YWw7IH0KKworICAgIFBCX0RTX1NZTlRIX0VfQUNDRVNTX1RSQUlUU19UX0RFQworICAgIGlubGluZSB0eXBlbmFtZSBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OmtleV9jb25zdF9yZWZlcmVuY2UKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUM6OgorICAgIGV4dHJhY3Rfa2V5KGNvbnN0X3JlZmVyZW5jZSByX3ZhbCwgZmFsc2VfdHlwZSkKKyAgICB7IHJldHVybiByX3ZhbC5maXJzdDsgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyAgICBib29sCisgICAgUEJfRFNfU1lOVEhfRV9BQ0NFU1NfVFJBSVRTX0NfREVDOjoKKyAgICBvcGVyYXRvcigpKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9saHMsIGtleV9jb25zdF9yZWZlcmVuY2Ugcl9yaHMpCisgICAgeyByZXR1cm4gY21wX2tleXMocl9saHMsIHJfcmhzKTsgfQorI2VuZGlmCisKKyN1bmRlZiBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfVF9ERUMKKyN1bmRlZiBQQl9EU19TWU5USF9FX0FDQ0VTU19UUkFJVFNfQ19ERUMKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3RyYWNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy90cmFjZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmI1MDcwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy90cmFjZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDExMSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwYXRfdHJpZV8vdHJhY2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBwYXRfdHJpZV8uCisgKi8KKworI2lmZGVmIFBCX0RTX1BBVF9UUklFX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworICBpZiAobV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gMCkKKyAgICByZXR1cm47CisgIHRyYWNlX25vZGUobV9wX2hlYWQtPm1fcF9wYXJlbnQsIDApOworICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2Vfbm9kZShub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCwgc2l6ZV90eXBlIGxldmVsKQoreworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IGxldmVsOyArK2kpCisgICAgc3RkOjpjZXJyIDw8ICcgJzsKKyAgc3RkOjpjZXJyIDw8IHBfbmQgPDwgIiAiOworICBzdGQ6OmNlcnIgPDwgKChwX25kLT5tX3R5cGUgPT0gcGF0X3RyaWVfbGVhZl9ub2RlX3R5cGUpID8gImwgIiA6ICJpICIpOworCisgIHRyYWNlX25vZGVfbWV0YWRhdGEocF9uZCwgdHlwZV90b190eXBlPHR5cGVuYW1lIG5vZGU6Om1ldGFkYXRhX3R5cGU+KCkpOworICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlbF9pdCA9IHByZWZfYmVnaW4ocF9uZCk7CisgIHdoaWxlIChlbF9pdCAhPSBwcmVmX2VuZChwX25kKSkKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwqIGVsX2l0OworICAgICAgKytlbF9pdDsKKyAgICB9CisKKyAgaWYgKHBfbmQtPm1fdHlwZSA9PSBwYXRfdHJpZV9sZWFmX25vZGVfdHlwZSkKKyAgICB7CisgICAgICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpbm9kZV9jb25zdF9wb2ludGVyIHBfaW50ZXJuYWwgPSBzdGF0aWNfY2FzdDxpbm9kZV9jb25zdF9wb2ludGVyPihwX25kKTsKKworICBzdGQ6OmNlcnIgPDwgIiAiIDw8CisgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocF9pbnRlcm5hbC0+Z2V0X2VfaW5kKCkpIDw8IHN0ZDo6ZW5kbDsKKworICBjb25zdCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuID0gc3RkOjpkaXN0YW5jZShwX2ludGVybmFsLT5iZWdpbigpLAorCQkJCQkgICAgICAgcF9pbnRlcm5hbC0+ZW5kKCkpOworCisgIGZvciAoc2l6ZV90eXBlIGNoaWxkX2kgPSAwOyBjaGlsZF9pIDwgbnVtX2NoaWxkcmVuOyArK2NoaWxkX2kpCisgICAgeworICAgICAgdHlwZW5hbWUgaW5vZGU6OmNvbnN0X2l0ZXJhdG9yIGNoaWxkX2l0ID0gcF9pbnRlcm5hbC0+YmVnaW4oKTsKKyAgICAgIHN0ZDo6YWR2YW5jZShjaGlsZF9pdCwgbnVtX2NoaWxkcmVuIC0gY2hpbGRfaSAtIDEpOworICAgICAgdHJhY2Vfbm9kZSgqY2hpbGRfaXQsIGxldmVsICsgMSk7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGFfPgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2Vfbm9kZV9tZXRhZGF0YShub2RlX2NvbnN0X3BvaW50ZXIgcF9uZCwgdHlwZV90b190eXBlPE1ldGFkYXRhXz4pCit7CisgIHN0ZDo6Y2VyciA8PCAiKCIgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ocF9uZC0+Z2V0X21ldGFkYXRhKCkpIDw8ICIpICI7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit0cmFjZV9ub2RlX21ldGFkYXRhKG5vZGVfY29uc3RfcG9pbnRlciwgdHlwZV90b190eXBlPG51bGxfdHlwZT4pCit7IH0KKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3RyYWl0cy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3RyYWl0cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0YjkzZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vdHJhaXRzLmhwcApAQCAtMCwwICsxLDE0OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwYXRfdHJpZV8vdHJhaXRzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHBhdF90cmllXy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BBVF9UUklFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKyNkZWZpbmUgUEJfRFNfUEFUX1RSSUVfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vcGF0X3RyaWVfYmFzZS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9wYXRfdHJpZV8vc3ludGhfYWNjZXNzX3RyYWl0cy5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBTcGVjaWFsaXphdGlvbi4KKyAgICAvLy8gQGluZ3JvdXAgdHJhaXRzCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgICAgdHlwZW5hbWUgX0FUcmFpdHMsCisJICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsCisJCSAgICAgIHR5cGVuYW1lIE5vZGVfSXRyLAorCQkgICAgICB0eXBlbmFtZSBDbXBfRm5fLAorCQkgICAgICB0eXBlbmFtZSBfQWxsb2NfPgorCSAgICAgY2xhc3MgTm9kZV9VcGRhdGUsCisJICAgICB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IHRyaWVfdHJhaXRzPEtleSwgTWFwcGVkLCBfQVRyYWl0cywgTm9kZV9VcGRhdGUsIHBhdF90cmllX3RhZywgX0FsbG9jPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBwYXRfdHJpZV9iYXNlCQkJCSAgICAJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIF9BbGxvYywgZmFsc2U+IAkJdHlwZV90cmFpdHM7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyaWVfbm9kZV9tZXRhZGF0YV9kaXNwYXRjaDxLZXksIE1hcHBlZCwgX0FUcmFpdHMsIE5vZGVfVXBkYXRlLCBfQWxsb2M+Ojp0eXBlIG1ldGFkYXRhX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2VfdHlwZTo6X01ldGFkYXRhPG1ldGFkYXRhX3R5cGUsIF9BbGxvYz4gICAgICAJbWV0YWRhdGE7CisgICAgICB0eXBlZGVmIF9BVHJhaXRzIAkJICAgICAgIAkJCSAgICAgICAJYWNjZXNzX3RyYWl0czsKKworICAgICAgLy8vIFR5cGUgZm9yIHN5bnRoZXNpemVkIHRyYWl0cy4KKyAgICAgIHR5cGVkZWYgX19nbnVfcGJkczo6ZGV0YWlsOjpzeW50aF9hY2Nlc3NfdHJhaXRzPHR5cGVfdHJhaXRzLCBmYWxzZSwgYWNjZXNzX3RyYWl0cz4gICBzeW50aF9hY2Nlc3NfdHJhaXRzOworCisgICAgICB0eXBlZGVmIGJhc2VfdHlwZTo6X05vZGVfYmFzZTxzeW50aF9hY2Nlc3NfdHJhaXRzLCBtZXRhZGF0YT4gICAgIAlub2RlOworICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9IZWFkPHN5bnRoX2FjY2Vzc190cmFpdHMsIG1ldGFkYXRhPgkgICAgICAgCWhlYWQ7CisgICAgICB0eXBlZGVmIGJhc2VfdHlwZTo6X0xlYWY8c3ludGhfYWNjZXNzX3RyYWl0cywgbWV0YWRhdGE+CSAgICAgICAJbGVhZjsKKyAgICAgIHR5cGVkZWYgYmFzZV90eXBlOjpfSW5vZGU8c3ludGhfYWNjZXNzX3RyYWl0cywgbWV0YWRhdGE+IAkJaW5vZGU7CisKKyAgICAgIHR5cGVkZWYgYmFzZV90eXBlOjpfSXRlcjxub2RlLCBsZWFmLCBoZWFkLCBpbm9kZSwgdHJ1ZT4JICAgICAgIAlpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgYmFzZV90eXBlOjpfQ0l0ZXI8bm9kZSwgbGVhZiwgaGVhZCwgaW5vZGUsIHRydWU+IAkgCWNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9JdGVyPG5vZGUsIGxlYWYsIGhlYWQsIGlub2RlLCBmYWxzZT4gCQlyZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9DSXRlcjxub2RlLCBsZWFmLCBoZWFkLCBpbm9kZSwgZmFsc2U+CSAJY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgLy8vIFRoaXMgaXMgYW4gaXRlcmF0b3IgdG8gYW4gaXRlcmF0b3I6IGl0IGl0ZXJhdGVzIG92ZXIgbm9kZXMsCisgICAgICAvLy8gYW5kIGRlLXJlZmVyZW5jaW5nIGl0IHJldHVybnMgb25lIG9mIHRoZSB0cmVlJ3MgaXRlcmF0b3JzLgorICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9Ob2RlX2NpdGVyPG5vZGUsIGxlYWYsIGhlYWQsIGlub2RlLCBjb25zdF9pdGVyYXRvciwgaXRlcmF0b3IsIF9BbGxvYz4gbm9kZV9jb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9Ob2RlX2l0ZXI8bm9kZSwgbGVhZiwgaGVhZCwgaW5vZGUsIGNvbnN0X2l0ZXJhdG9yLCBpdGVyYXRvciwgX0FsbG9jPiBub2RlX2l0ZXJhdG9yOworCisgICAgICAvLy8gVHlwZSBmb3Igbm9kZSB1cGRhdGUuCisgICAgICB0eXBlZGVmIE5vZGVfVXBkYXRlPG5vZGVfY29uc3RfaXRlcmF0b3IsIG5vZGVfaXRlcmF0b3IsIF9BVHJhaXRzLCBfQWxsb2M+IAkJbm9kZV91cGRhdGU7CisKKyAgICAgIHR5cGVkZWYgbnVsbF9ub2RlX3VwZGF0ZTxub2RlX2NvbnN0X2l0ZXJhdG9yLCBub2RlX2l0ZXJhdG9yLCBfQVRyYWl0cywgX0FsbG9jPiogCQludWxsX25vZGVfdXBkYXRlX3BvaW50ZXI7CisgICAgfTsKKworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uLgorICAgIC8vLyBAaW5ncm91cCB0cmFpdHMKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBfQVRyYWl0cywKKwkgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfQ0l0ciwKKwkJICAgICAgdHlwZW5hbWUgTm9kZV9JdHIsCisJCSAgICAgIHR5cGVuYW1lIENtcF9Gbl8sCisJCSAgICAgIHR5cGVuYW1lIF9BbGxvY18+CisJICAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdHJpZV90cmFpdHM8S2V5LCBudWxsX3R5cGUsIF9BVHJhaXRzLCBOb2RlX1VwZGF0ZSwgcGF0X3RyaWVfdGFnLCBfQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHBhdF90cmllX2Jhc2UJCQkJCWJhc2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZXNfdHJhaXRzPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIGZhbHNlPiAJdHlwZV90cmFpdHM7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyaWVfbm9kZV9tZXRhZGF0YV9kaXNwYXRjaDxLZXksIG51bGxfdHlwZSwgX0FUcmFpdHMsIE5vZGVfVXBkYXRlLCBfQWxsb2M+Ojp0eXBlIG1ldGFkYXRhX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2VfdHlwZTo6X01ldGFkYXRhPG1ldGFkYXRhX3R5cGUsIF9BbGxvYz4JCQkJbWV0YWRhdGE7CisgICAgICB0eXBlZGVmIF9BVHJhaXRzIAkJCQkgICAgIAkJCQkJYWNjZXNzX3RyYWl0czsKKworICAgICAgLy8vIFR5cGUgZm9yIHN5bnRoZXNpemVkIHRyYWl0cy4KKyAgICAgIHR5cGVkZWYgX19nbnVfcGJkczo6ZGV0YWlsOjpzeW50aF9hY2Nlc3NfdHJhaXRzPHR5cGVfdHJhaXRzLCB0cnVlLCBhY2Nlc3NfdHJhaXRzPiBzeW50aF9hY2Nlc3NfdHJhaXRzOworCisgICAgICB0eXBlZGVmIGJhc2VfdHlwZTo6X05vZGVfYmFzZTxzeW50aF9hY2Nlc3NfdHJhaXRzLCBtZXRhZGF0YT4gICAgIAlub2RlOworICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9IZWFkPHN5bnRoX2FjY2Vzc190cmFpdHMsIG1ldGFkYXRhPiAJICAgICAgIAloZWFkOworICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9MZWFmPHN5bnRoX2FjY2Vzc190cmFpdHMsIG1ldGFkYXRhPiAJICAgICAgIAlsZWFmOworICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9Jbm9kZTxzeW50aF9hY2Nlc3NfdHJhaXRzLCBtZXRhZGF0YT4gCSAgICAgICAJaW5vZGU7CisKKyAgICAgIHR5cGVkZWYgYmFzZV90eXBlOjpfQ0l0ZXI8bm9kZSwgbGVhZiwgaGVhZCwgaW5vZGUsIHRydWU+IAkJY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yIAkJCQkJICAgICAgIAlpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgYmFzZV90eXBlOjpfQ0l0ZXI8bm9kZSwgbGVhZiwgaGVhZCwgaW5vZGUsIGZhbHNlPgkgICAgICAgCWNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCQkJICAgICAgIAkJcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgLy8vIFRoaXMgaXMgYW4gaXRlcmF0b3IgdG8gYW4gaXRlcmF0b3I6IGl0IGl0ZXJhdGVzIG92ZXIgbm9kZXMsCisgICAgICAvLy8gYW5kIGRlLXJlZmVyZW5jaW5nIGl0IHJldHVybnMgb25lIG9mIHRoZSB0cmVlJ3MgaXRlcmF0b3JzLgorICAgICAgdHlwZWRlZiBiYXNlX3R5cGU6Ol9Ob2RlX2NpdGVyPG5vZGUsIGxlYWYsIGhlYWQsIGlub2RlLCBjb25zdF9pdGVyYXRvciwgaXRlcmF0b3IsIF9BbGxvYz4gbm9kZV9jb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiBub2RlX2NvbnN0X2l0ZXJhdG9yIAkJCQkJCQkJbm9kZV9pdGVyYXRvcjsKKworICAgICAgLy8vIFR5cGUgZm9yIG5vZGUgdXBkYXRlLgorICAgICAgdHlwZWRlZiBOb2RlX1VwZGF0ZTxub2RlX2NvbnN0X2l0ZXJhdG9yLCBub2RlX2l0ZXJhdG9yLCBfQVRyYWl0cywgX0FsbG9jPiAJCW5vZGVfdXBkYXRlOworCisgICAgICB0eXBlZGVmIG51bGxfbm9kZV91cGRhdGU8bm9kZV9jb25zdF9pdGVyYXRvciwgbm9kZV9jb25zdF9pdGVyYXRvciwgX0FUcmFpdHMsIF9BbGxvYz4qIAludWxsX25vZGVfdXBkYXRlX3BvaW50ZXI7CisgICAgfTsKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfUEFUX1RSSUVfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy91cGRhdGVfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcGF0X3RyaWVfL3VwZGF0ZV9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2MwZmJjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3BhdF90cmllXy91cGRhdGVfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwYXRfdHJpZV8vdXBkYXRlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgcGF0X3RyaWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXBwbHlfdXBkYXRlKG5vZGVfcG9pbnRlciwgbnVsbF9ub2RlX3VwZGF0ZV9wb2ludGVyKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZV8+CitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXBwbHlfdXBkYXRlKG5vZGVfcG9pbnRlciBwX25kLCBOb2RlX1VwZGF0ZV8qKQoreworICBOb2RlX1VwZGF0ZV86Om9wZXJhdG9yKCkobm9kZV9pdGVyYXRvcihwX25kLCB0aGlzKSwKKwkJCSAgIG5vZGVfY29uc3RfaXRlcmF0b3IoMCwgdGhpcykpOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3ByaW9yaXR5X3F1ZXVlX2Jhc2VfZGlzcGF0Y2guaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3ByaW9yaXR5X3F1ZXVlX2Jhc2VfZGlzcGF0Y2guaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZTkxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcHJpb3JpdHlfcXVldWVfYmFzZV9kaXNwYXRjaC5ocHAKQEAgLTAsMCArMSwxMTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGV0YWlsL3ByaW9yaXR5X3F1ZXVlX2Jhc2VfZGlzcGF0Y2guaHBwCisgKiBDb250YWlucyBhbiBwcWlhdGl2ZSBjb250YWluZXIgZGlzcGF0Y2hpbmcgYmFzZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1BSSU9SSVRZX1FVRVVFX0JBU0VfRFNfRElTUEFUQ0hFUl9IUFAKKyNkZWZpbmUgUEJfRFNfUFJJT1JJVFlfUVVFVUVfQkFTRV9EU19ESVNQQVRDSEVSX0hQUAorCisjZGVmaW5lIFBCX0RTX0FTU0VSVF9WQUxJRChYKQkJCQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfT05MWShYLmFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKworI2RlZmluZSBQQl9EU19ERUJVR19WRVJJRlkoX0NvbmQpCQkJCQlcCisgIF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9BVChfQ29uZCwJCQkJCVwKKwkJCSAgIF9NX21lc3NhZ2UoI19Db25kIiBhc3NlcnRpb24gZnJvbSAlMTs6JTI7IikJXAorCQkJICAgLl9NX3N0cmluZyhfX0ZJTEVfXykuX01faW50ZWdlcihfX0xJTkVfXykJXAorCQkJICAgLF9fZmlsZSxfX2xpbmUpCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3BhaXJpbmdfaGVhcF8vcGFpcmluZ19oZWFwXy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5vbWlhbF9oZWFwXy9iaW5vbWlhbF9oZWFwXy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9yY19iaW5vbWlhbF9oZWFwXy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9iaW5hcnlfaGVhcF8vYmluYXJ5X2hlYXBfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vdGhpbl9oZWFwXy5ocHA+CisKKyN1bmRlZiBQQl9EU19ERUJVR19WRVJJRlkKKyN1bmRlZiBQQl9EU19BU1NFUlRfVkFMSUQKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBwYWlyaW5nX2hlYXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZUcCwgdHlwZW5hbWUgQ21wX0ZuLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgICBzdHJ1Y3QgY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2g8X1ZUcCwgQ21wX0ZuLCBfQWxsb2MsIHBhaXJpbmdfaGVhcF90YWcsCisJCQkJICAgICBudWxsX3R5cGU+CisgICAgICB7CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKwl0eXBlZGVmIHBhaXJpbmdfaGVhcDxfVlRwLCBDbXBfRm4sIF9BbGxvYz4gCQl0eXBlOworICAgICAgfTsKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbiBmb3IgYmlub21pYWxfaGVhcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVlRwLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxfVlRwLCBDbXBfRm4sIF9BbGxvYywgYmlub21pYWxfaGVhcF90YWcsCisJCQkJICAgICBudWxsX3R5cGU+CisgICAgICB7CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKwl0eXBlZGVmIGJpbm9taWFsX2hlYXA8X1ZUcCwgQ21wX0ZuLCBfQWxsb2M+IAkJdHlwZTsKKyAgICAgIH07CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24gZm9yIHJjX2JpbmFyeV9oZWFwLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WVHAsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgc3RydWN0IGNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPF9WVHAsIENtcF9GbiwgX0FsbG9jLCByY19iaW5vbWlhbF9oZWFwX3RhZywKKyAgCQkJCSAgICAgbnVsbF90eXBlPgorICAgICAgeworCS8vLyBEaXNwYXRjaGVkIHR5cGUuCisJdHlwZWRlZiByY19iaW5vbWlhbF9oZWFwPF9WVHAsIENtcF9GbiwgX0FsbG9jPgkgICAgICAgCXR5cGU7CisgICAgICB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBiaW5hcnlfaGVhcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVlRwLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDxfVlRwLCBDbXBfRm4sIF9BbGxvYywgYmluYXJ5X2hlYXBfdGFnLAorICAJCQkJICAgICBudWxsX3R5cGU+CisgICAgICB7CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKwl0eXBlZGVmIGJpbmFyeV9oZWFwPF9WVHAsIENtcF9GbiwgX0FsbG9jPiAJCXR5cGU7CisgICAgICB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciB0aGluX2hlYXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZUcCwgdHlwZW5hbWUgQ21wX0ZuLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgICBzdHJ1Y3QgY29udGFpbmVyX2Jhc2VfZGlzcGF0Y2g8X1ZUcCwgQ21wX0ZuLCBfQWxsb2MsIHRoaW5faGVhcF90YWcsCisgIAkJCQkgICAgIG51bGxfdHlwZT4gICAgCisgICAgICB7CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKwl0eXBlZGVmIHRoaW5faGVhcDxfVlRwLCBDbXBfRm4sIF9BbGxvYz4gCQl0eXBlOworICAgICAgfTsKKyAgICAvL0B9IGdyb3VwIHBiZHMKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1BSSU9SSVRZX1FVRVVFX0JBU0VfRFNfRElTUEFUQ0hFUl9IUFAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDIxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJiX3RyZWVfbWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJiX3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NvcHlfZnJvbV9yYW5nZShJdCBmaXJzdF9pdCwgSXQgbGFzdF9pdCkKK3sKKyAgd2hpbGUgKGZpcnN0X2l0ICE9IGxhc3RfaXQpCisgICAgaW5zZXJ0KCooZmlyc3RfaXQrKykpOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorUEJfRFNfUkJfVFJFRV9OQU1FKCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX1JCX1RSRUVfTkFNRShjb25zdCBDbXBfRm4mIHJfY21wX2ZuKSA6CisgIGJhc2VfdHlwZShyX2NtcF9mbikKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX1JCX1RSRUVfTkFNRShjb25zdCBDbXBfRm4mIHJfY21wX2ZuLCBjb25zdCBub2RlX3VwZGF0ZSYgcl9ub2RlX3VwZGF0ZSkgOgorICBiYXNlX3R5cGUocl9jbXBfZm4sIHJfbm9kZV91cGRhdGUpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19SQl9UUkVFX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSA6CisgIGJhc2VfdHlwZShvdGhlcikKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0aWFsaXplKCkKK3sgYmFzZV90eXBlOjptX3BfaGVhZC0+bV9yZWQgPSB0cnVlOyB9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2RlYnVnX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWFlODMzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDgxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJiX3RyZWVfbWFwXy9kZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJiX3RyZWVfLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X25vZGVfY29uc2lzdGVudChjb25zdCBub2RlX3BvaW50ZXIgcF9uZCwgY29uc3QgY2hhciogX19maWxlLAorCQkJCQkJaW50IF9fbGluZSkgY29uc3QKK3sKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm4gMTsKKworICBjb25zdCBzaXplX3R5cGUgbF9oZWlnaHQgPQorICAgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZC0+bV9wX2xlZnQsIF9fZmlsZSwgX19saW5lKTsKKyAgY29uc3Qgc2l6ZV90eXBlIHJfaGVpZ2h0ID0KKyAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQtPm1fcF9yaWdodCwgX19maWxlLCBfX2xpbmUpOworICBpZiAocF9uZC0+bV9yZWQpCisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKGlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfbmQtPm1fcF9sZWZ0KSk7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkoaXNfZWZmZWN0aXZlbHlfYmxhY2socF9uZC0+bV9wX3JpZ2h0KSk7CisgICAgfQorICBQQl9EU19ERUJVR19WRVJJRlkobF9oZWlnaHQgPT0gcl9oZWlnaHQpOworICByZXR1cm4gKHBfbmQtPm1fcmVkID8gMCA6IDEpICsgbF9oZWlnaHQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBiYXNlX3R5cGU6OmFzc2VydF92YWxpZChfX2ZpbGUsIF9fbGluZSk7CisgIGNvbnN0IG5vZGVfcG9pbnRlciBwX2hlYWQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICBQQl9EU19ERUJVR19WRVJJRlkocF9oZWFkLT5tX3JlZCk7CisgIGlmIChwX2hlYWQtPm1fcF9wYXJlbnQgIT0gMCkKKyAgICB7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkoIXBfaGVhZC0+bV9wX3BhcmVudC0+bV9yZWQpOworICAgICAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX2hlYWQtPm1fcF9wYXJlbnQsIF9fZmlsZSwgX19saW5lKTsKKyAgICB9Cit9CisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9lcmFzZV9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyMjBjMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vZXJhc2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwyODkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmJfdHJlZV9tYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQoreworICBwb2ludF9pdGVyYXRvciBpdCA9IHRoaXMtPmZpbmQocl9rZXkpOworICBpZiAoaXQgPT0gYmFzZV90eXBlOjplbmQoKSkKKyAgICByZXR1cm4gZmFsc2U7CisgIGVyYXNlKGl0KTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZShpdGVyYXRvciBpdCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGlmIChpdCA9PSBiYXNlX3R5cGU6OmVuZCgpKQorICAgIHJldHVybiBpdDsKKworICBpdGVyYXRvciByZXRfaXQgPSBpdDsKKyAgKytyZXRfaXQ7CisgIGVyYXNlX25vZGUoaXQubV9wX25kKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiByZXRfaXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnJldmVyc2VfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKHJldmVyc2VfaXRlcmF0b3IgaXQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBpZiAoaXQubV9wX25kID09IGJhc2VfdHlwZTo6bV9wX2hlYWQpCisgICAgcmV0dXJuIGl0OworCisgIHJldmVyc2VfaXRlcmF0b3IgcmV0X2l0ID0gaXQ7CisgICsrcmV0X2l0OworICBlcmFzZV9ub2RlKGl0Lm1fcF9uZCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZXR1cm4gcmV0X2l0OworfQorCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBzaXplX3R5cGUgbnVtX2Vyc2QgPSAwOworICBpdGVyYXRvciBpdCA9IGJhc2VfdHlwZTo6YmVnaW4oKTsKKyAgd2hpbGUgKGl0ICE9IGJhc2VfdHlwZTo6ZW5kKCkpCisgICAgeworICAgICAgaWYgKHByZWQoKml0KSkKKyAgICAgICAgeworCSAgKytudW1fZXJzZDsKKwkgIGl0ID0gZXJhc2UoaXQpOworICAgICAgICB9CisgICAgICBlbHNlCisJKytpdDsKKyAgICB9CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiBudW1fZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX25vZGUobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIHJlbW92ZV9ub2RlKHBfbmQpOworICBiYXNlX3R5cGU6OmFjdHVhbF9lcmFzZV9ub2RlKHBfbmQpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlbW92ZV9ub2RlKG5vZGVfcG9pbnRlciBwX3opCit7CisgIHRoaXMtPnVwZGF0ZV9taW5fbWF4X2Zvcl9lcmFzZWRfbm9kZShwX3opOworICBub2RlX3BvaW50ZXIgcF95ID0gcF96OworICBub2RlX3BvaW50ZXIgcF94ID0gMDsKKyAgbm9kZV9wb2ludGVyIHBfbmV3X3hfcGFyZW50ID0gMDsKKworICBpZiAocF95LT5tX3BfbGVmdCA9PSAwKQorICAgIHBfeCA9IHBfeS0+bV9wX3JpZ2h0OworICBlbHNlIGlmIChwX3ktPm1fcF9yaWdodCA9PSAwKQorICAgIHBfeCA9IHBfeS0+bV9wX2xlZnQ7CisgIGVsc2UKKyAgICB7CisgICAgICBwX3kgPSBwX3ktPm1fcF9yaWdodDsKKyAgICAgIHdoaWxlIChwX3ktPm1fcF9sZWZ0ICE9IDApCisJcF95ID0gcF95LT5tX3BfbGVmdDsKKyAgICAgIHBfeCA9IHBfeS0+bV9wX3JpZ2h0OworICAgIH0KKworICBpZiAocF95ID09IHBfeikKKyAgICB7CisgICAgICBwX25ld194X3BhcmVudCA9IHBfeS0+bV9wX3BhcmVudDsKKyAgICAgIGlmIChwX3ggIT0gMCkKKwlwX3gtPm1fcF9wYXJlbnQgPSBwX3ktPm1fcF9wYXJlbnQ7CisKKyAgICAgIGlmIChiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID09IHBfeikKKwliYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF94OworICAgICAgZWxzZSBpZiAocF96LT5tX3BfcGFyZW50LT5tX3BfbGVmdCA9PSBwX3opCisgICAgICAgIHsKKwkgIHBfeS0+bV9wX2xlZnQgPSBwX3otPm1fcF9wYXJlbnQ7CisJICBwX3otPm1fcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF94OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIHBfeS0+bV9wX2xlZnQgPSAwOworCSAgcF96LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQgPSBwX3g7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwX3otPm1fcF9sZWZ0LT5tX3BfcGFyZW50ID0gcF95OworICAgICAgcF95LT5tX3BfbGVmdCA9IHBfei0+bV9wX2xlZnQ7CisgICAgICBpZiAocF95ICE9IHBfei0+bV9wX3JpZ2h0KQorICAgICAgICB7CisJICBwX25ld194X3BhcmVudCA9IHBfeS0+bV9wX3BhcmVudDsKKwkgIGlmIChwX3ggIT0gMCkKKwkgICAgcF94LT5tX3BfcGFyZW50ID0gcF95LT5tX3BfcGFyZW50OworCSAgcF95LT5tX3BfcGFyZW50LT5tX3BfbGVmdCA9IHBfeDsKKwkgIHBfeS0+bV9wX3JpZ2h0ID0gcF96LT5tX3BfcmlnaHQ7CisJICBwX3otPm1fcF9yaWdodC0+bV9wX3BhcmVudCA9IHBfeTsKKyAgICAgICAgfQorICAgICAgZWxzZQorCXBfbmV3X3hfcGFyZW50ID0gcF95OworCisgICAgICBpZiAoYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCA9PSBwX3opCisJYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCA9IHBfeTsKKyAgICAgIGVsc2UgaWYgKHBfei0+bV9wX3BhcmVudC0+bV9wX2xlZnQgPT0gcF96KQorCXBfei0+bV9wX3BhcmVudC0+bV9wX2xlZnQgPSBwX3k7CisgICAgICBlbHNlCisJcF96LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQgPSBwX3k7CisKKyAgICAgIHBfeS0+bV9wX3BhcmVudCA9IHBfei0+bV9wX3BhcmVudDsKKyAgICAgIHN0ZDo6c3dhcChwX3ktPm1fcmVkLCBwX3otPm1fcmVkKTsKKyAgICAgIHBfeSA9IHBfejsKKyAgICB9CisKKyAgdGhpcy0+dXBkYXRlX3RvX3RvcChwX25ld194X3BhcmVudCwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisKKyAgaWYgKHBfeS0+bV9yZWQpCisgICAgcmV0dXJuOworCisgIHJlbW92ZV9maXh1cChwX3gsIHBfbmV3X3hfcGFyZW50KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JlbW92ZV9maXh1cChub2RlX3BvaW50ZXIgcF94LCBub2RlX3BvaW50ZXIgcF9uZXdfeF9wYXJlbnQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ggPT0gMCB8fCBwX3gtPm1fcF9wYXJlbnQgPT0gcF9uZXdfeF9wYXJlbnQpOworCisgIHdoaWxlIChwX3ggIT0gYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCAmJiBpc19lZmZlY3RpdmVseV9ibGFjayhwX3gpKQorICAgIGlmIChwX3ggPT0gcF9uZXdfeF9wYXJlbnQtPm1fcF9sZWZ0KQorICAgICAgeworCW5vZGVfcG9pbnRlciBwX3cgPSBwX25ld194X3BhcmVudC0+bV9wX3JpZ2h0OworCWlmIChwX3ctPm1fcmVkKQorCSAgeworCSAgICBwX3ctPm1fcmVkID0gZmFsc2U7CisJICAgIHBfbmV3X3hfcGFyZW50LT5tX3JlZCA9IHRydWU7CisJICAgIGJhc2VfdHlwZTo6cm90YXRlX2xlZnQocF9uZXdfeF9wYXJlbnQpOworCSAgICBwX3cgPSBwX25ld194X3BhcmVudC0+bV9wX3JpZ2h0OworCSAgfQorCisJaWYgKGlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfdy0+bV9wX2xlZnQpIAorCSAgICAmJiBpc19lZmZlY3RpdmVseV9ibGFjayhwX3ctPm1fcF9yaWdodCkpCisJICB7CisJICAgIHBfdy0+bV9yZWQgPSB0cnVlOworCSAgICBwX3ggPSBwX25ld194X3BhcmVudDsKKwkgICAgcF9uZXdfeF9wYXJlbnQgPSBwX25ld194X3BhcmVudC0+bV9wX3BhcmVudDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGlmIChpc19lZmZlY3RpdmVseV9ibGFjayhwX3ctPm1fcF9yaWdodCkpCisJICAgICAgeworCQlpZiAocF93LT5tX3BfbGVmdCAhPSAwKQorCQkgIHBfdy0+bV9wX2xlZnQtPm1fcmVkID0gZmFsc2U7CisKKwkJcF93LT5tX3JlZCA9IHRydWU7CisJCWJhc2VfdHlwZTo6cm90YXRlX3JpZ2h0KHBfdyk7CisJCXBfdyA9IHBfbmV3X3hfcGFyZW50LT5tX3BfcmlnaHQ7CisJICAgICAgfQorCisJICAgIHBfdy0+bV9yZWQgPSBwX25ld194X3BhcmVudC0+bV9yZWQ7CisJICAgIHBfbmV3X3hfcGFyZW50LT5tX3JlZCA9IGZhbHNlOworCisJICAgIGlmIChwX3ctPm1fcF9yaWdodCAhPSAwKQorCSAgICAgIHBfdy0+bV9wX3JpZ2h0LT5tX3JlZCA9IGZhbHNlOworCisJICAgIGJhc2VfdHlwZTo6cm90YXRlX2xlZnQocF9uZXdfeF9wYXJlbnQpOworCSAgICB0aGlzLT51cGRhdGVfdG9fdG9wKHBfbmV3X3hfcGFyZW50LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKwkgICAgYnJlYWs7CisJICB9CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworCW5vZGVfcG9pbnRlciBwX3cgPSBwX25ld194X3BhcmVudC0+bV9wX2xlZnQ7CisJaWYgKHBfdy0+bV9yZWQgPT0gdHJ1ZSkKKwkgIHsKKwkgICAgcF93LT5tX3JlZCA9IGZhbHNlOworCSAgICBwX25ld194X3BhcmVudC0+bV9yZWQgPSB0cnVlOworCSAgICBiYXNlX3R5cGU6OnJvdGF0ZV9yaWdodChwX25ld194X3BhcmVudCk7CisJICAgIHBfdyA9IHBfbmV3X3hfcGFyZW50LT5tX3BfbGVmdDsKKwkgIH0KKworCWlmIChpc19lZmZlY3RpdmVseV9ibGFjayhwX3ctPm1fcF9yaWdodCkgCisJICAgICYmIGlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfdy0+bV9wX2xlZnQpKQorCSAgeworCSAgICBwX3ctPm1fcmVkID0gdHJ1ZTsKKwkgICAgcF94ID0gcF9uZXdfeF9wYXJlbnQ7CisJICAgIHBfbmV3X3hfcGFyZW50ID0gcF9uZXdfeF9wYXJlbnQtPm1fcF9wYXJlbnQ7CisJICB9CisJZWxzZQorCSAgeworCSAgICBpZiAoaXNfZWZmZWN0aXZlbHlfYmxhY2socF93LT5tX3BfbGVmdCkpCisJICAgICAgeworCQlpZiAocF93LT5tX3BfcmlnaHQgIT0gMCkKKwkJICBwX3ctPm1fcF9yaWdodC0+bV9yZWQgPSBmYWxzZTsKKworCQlwX3ctPm1fcmVkID0gdHJ1ZTsKKwkJYmFzZV90eXBlOjpyb3RhdGVfbGVmdChwX3cpOworCQlwX3cgPSBwX25ld194X3BhcmVudC0+bV9wX2xlZnQ7CisJICAgICAgfQorCisJICAgIHBfdy0+bV9yZWQgPSBwX25ld194X3BhcmVudC0+bV9yZWQ7CisJICAgIHBfbmV3X3hfcGFyZW50LT5tX3JlZCA9IGZhbHNlOworCisJICAgIGlmIChwX3ctPm1fcF9sZWZ0ICE9IDApCisJICAgICAgcF93LT5tX3BfbGVmdC0+bV9yZWQgPSBmYWxzZTsKKworCSAgICBiYXNlX3R5cGU6OnJvdGF0ZV9yaWdodChwX25ld194X3BhcmVudCk7CisJICAgIHRoaXMtPnVwZGF0ZV90b190b3AocF9uZXdfeF9wYXJlbnQsIChub2RlX3VwZGF0ZSogKXRoaXMpOworCSAgICBicmVhazsKKwkgIH0KKyAgICAgIH0KKworICBpZiAocF94ICE9IDApCisgICAgcF94LT5tX3JlZCA9IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzc4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2ZpbmRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwzOSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByYl90cmVlX21hcF8vZmluZF9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJiX3RyZWVfLgorICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2luZm9fZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2luZm9fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwOTA5OQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vaW5mb19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDQ2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJiX3RyZWVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6Citpc19lZmZlY3RpdmVseV9ibGFjayhjb25zdCBub2RlX3BvaW50ZXIgcF9uZCkKK3sgcmV0dXJuIChwX25kID09IDAgfHwgIXBfbmQtPm1fcmVkKTsgfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YmExOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL2luc2VydF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDExNSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByYl90cmVlX21hcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmJfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8dHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yLCBib29sPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbHVlKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPiBpbnNfcGFpciA9IGJhc2VfdHlwZTo6aW5zZXJ0X2xlYWYocl92YWx1ZSk7CisgIGlmIChpbnNfcGFpci5zZWNvbmQgPT0gdHJ1ZSkKKyAgICB7CisgICAgICBpbnNfcGFpci5maXJzdC5tX3BfbmQtPm1fcmVkID0gdHJ1ZTsKKyAgICAgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgaW5zZXJ0X2ZpeHVwKGluc19wYWlyLmZpcnN0Lm1fcF9uZCk7CisgICAgfQorCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZXR1cm4gaW5zX3BhaXI7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0X2ZpeHVwKG5vZGVfcG9pbnRlciBwX25kKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9yZWQgPT0gdHJ1ZSk7CisgIHdoaWxlIChwX25kICE9IGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgJiYgcF9uZC0+bV9wX3BhcmVudC0+bV9yZWQpCisgICAgeworICAgICAgaWYgKHBfbmQtPm1fcF9wYXJlbnQgPT0gcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudC0+bV9wX2xlZnQpCisgICAgICAgIHsKKwkgIG5vZGVfcG9pbnRlciBwX3kgPSBwX25kLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQ7CisJICBpZiAocF95ICE9IDAgJiYgcF95LT5tX3JlZCkKKyAgICAgICAgICAgIHsKKwkgICAgICBwX25kLT5tX3BfcGFyZW50LT5tX3JlZCA9IGZhbHNlOworCSAgICAgIHBfeS0+bV9yZWQgPSBmYWxzZTsKKwkgICAgICBwX25kLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50LT5tX3JlZCA9IHRydWU7CisJICAgICAgcF9uZCA9IHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQ7CisgICAgICAgICAgICB9CisJICBlbHNlCisgICAgICAgICAgICB7CisJICAgICAgaWYgKHBfbmQgPT0gcF9uZC0+bV9wX3BhcmVudC0+bV9wX3JpZ2h0KQorICAgICAgICAgICAgICAgIHsKKwkJICBwX25kID0gcF9uZC0+bV9wX3BhcmVudDsKKwkJICBiYXNlX3R5cGU6OnJvdGF0ZV9sZWZ0KHBfbmQpOworICAgICAgICAgICAgICAgIH0KKwkgICAgICBwX25kLT5tX3BfcGFyZW50LT5tX3JlZCA9IGZhbHNlOworCSAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQtPm1fcmVkID0gdHJ1ZTsKKwkgICAgICBiYXNlX3R5cGU6OnJvdGF0ZV9yaWdodChwX25kLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisJICBub2RlX3BvaW50ZXIgcF95ID0gcF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudC0+bV9wX2xlZnQ7CisJICBpZiAocF95ICE9IDAgJiYgcF95LT5tX3JlZCkKKyAgICAgICAgICAgIHsKKwkgICAgICBwX25kLT5tX3BfcGFyZW50LT5tX3JlZCA9IGZhbHNlOworCSAgICAgIHBfeS0+bV9yZWQgPSBmYWxzZTsKKwkgICAgICBwX25kLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50LT5tX3JlZCA9IHRydWU7CisJICAgICAgcF9uZCA9IHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQ7CisgICAgICAgICAgICB9CisJICBlbHNlCisgICAgICAgICAgICB7CisJICAgICAgaWYgKHBfbmQgPT0gcF9uZC0+bV9wX3BhcmVudC0+bV9wX2xlZnQpCisgICAgICAgICAgICAgICAgeworCQkgIHBfbmQgPSBwX25kLT5tX3BfcGFyZW50OworCQkgIGJhc2VfdHlwZTo6cm90YXRlX3JpZ2h0KHBfbmQpOworICAgICAgICAgICAgICAgIH0KKwkgICAgICBwX25kLT5tX3BfcGFyZW50LT5tX3JlZCA9IGZhbHNlOworCSAgICAgIHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQtPm1fcmVkID0gdHJ1ZTsKKwkgICAgICBiYXNlX3R5cGU6OnJvdGF0ZV9sZWZ0KHBfbmQtPm1fcF9wYXJlbnQtPm1fcF9wYXJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIGJhc2VfdHlwZTo6dXBkYXRlX3RvX3RvcChwX25kLCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudC0+bV9yZWQgPSBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vbm9kZS5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL25vZGUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDcxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL25vZGUuaHBwCkBAIC0wLDAgKzEsMTM5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJiX3RyZWVfbWFwXy9ub2RlLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJiX3RyZWVfLgorICovCisKKyNpZm5kZWYgUEJfRFNfUkJfVFJFRV9OT0RFX0hQUAorI2RlZmluZSBQQl9EU19SQl9UUkVFX05PREVfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JyYW5jaF9wb2xpY3kvbnVsbF9ub2RlX21ldGFkYXRhLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLy8vIE5vZGUgZm9yIFJlZC1CbGFjayB0cmVlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCBjbGFzcyBNZXRhZGF0YSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCByYl90cmVlX25vZGVfCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgVmFsdWVfVHlwZSAJCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIE1ldGFkYXRhIAkJCW1ldGFkYXRhX3R5cGU7CisKKyAgICAgIHR5cGVkZWYKKyAgICAgIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPAorICAgICAgcmJfdHJlZV9ub2RlXzwKKyAgICAgIFZhbHVlX1R5cGUsCisgICAgICBNZXRhZGF0YSwKKyAgICAgIF9BbGxvYz4gPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIG5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8CisJbWV0YWRhdGFfdHlwZT46Om90aGVyOjpyZWZlcmVuY2UKKyAgICAgIG1ldGFkYXRhX3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8CisJbWV0YWRhdGFfdHlwZT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIG1ldGFkYXRhX2NvbnN0X3JlZmVyZW5jZTsKKworICAgICAgYm9vbAorICAgICAgc3BlY2lhbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3JlZDsgfQorCisgICAgICBtZXRhZGF0YV9jb25zdF9yZWZlcmVuY2UKKyAgICAgIGdldF9tZXRhZGF0YSgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX21ldGFkYXRhOyB9CisKKyAgICAgIG1ldGFkYXRhX3JlZmVyZW5jZQorICAgICAgZ2V0X21ldGFkYXRhKCkKKyAgICAgIHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KKworI2lmZGVmIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlKCkgY29uc3QKKyAgICAgIHsKKwlzdGQ6OmNvdXQgPDwgUEJfRFNfVjJGKG1fdmFsdWUpIDw8KG1fcmVkPyAiIDxyPiAiIDogIiA8Yj4gIikgCisJCSAgPDwgIigiIDw8IG1fbWV0YWRhdGEgPDwgIikiOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIG5vZGVfcG9pbnRlciAJbV9wX2xlZnQ7CisgICAgICBub2RlX3BvaW50ZXIgCW1fcF9yaWdodDsKKyAgICAgIG5vZGVfcG9pbnRlciAJbV9wX3BhcmVudDsKKyAgICAgIHZhbHVlX3R5cGUgCW1fdmFsdWU7CisgICAgICBib29sIAkJbV9yZWQ7CisgICAgICBtZXRhZGF0YV90eXBlIAltX21ldGFkYXRhOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IHJiX3RyZWVfbm9kZV88VmFsdWVfVHlwZSwgbnVsbF90eXBlLCBfQWxsb2M+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgVmFsdWVfVHlwZSAJCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIG51bGxfdHlwZSAJbWV0YWRhdGFfdHlwZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8CisgICAgICByYl90cmVlX25vZGVfPAorICAgICAgVmFsdWVfVHlwZSwKKyAgICAgIG51bGxfdHlwZSwKKyAgICAgIF9BbGxvYz4gPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIG5vZGVfcG9pbnRlcjsKKworICAgICAgYm9vbAorICAgICAgc3BlY2lhbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3JlZDsgfQorCisjaWZkZWYgUEJfRFNfQklOX1NFQVJDSF9UUkVFX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdAorICAgICAgeyBzdGQ6OmNvdXQgPDwgUEJfRFNfVjJGKG1fdmFsdWUpIDw8KG1fcmVkPyAiIDxyPiAiIDogIiA8Yj4gIik7IH0KKyNlbmRpZiAKKworICAgICAgbm9kZV9wb2ludGVyIAltX3BfbGVmdDsKKyAgICAgIG5vZGVfcG9pbnRlciAJbV9wX3JpZ2h0OworICAgICAgbm9kZV9wb2ludGVyIAltX3BfcGFyZW50OworICAgICAgdmFsdWVfdHlwZSAJbV92YWx1ZTsKKyAgICAgIGJvb2wgCQltX3JlZDsKKyAgICB9OworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9yYl90cmVlXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3JiX3RyZWVfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2UyYmFiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9yYl90cmVlXy5ocHAKQEAgLTAsMCArMSwyNDggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmJfdHJlZV9tYXBfL3JiX3RyZWVfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIFJlZCBCbGFjayB0cmVlcy4KKyAqLworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9zdGFuZGFyZF9wb2xpY2llcy5ocHA+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgQ21wX0ZuLCBcCisJICAgICB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyMgZGVmaW5lIFBCX0RTX1JCX1RSRUVfTkFNRSByYl90cmVlX21hcAorIyBkZWZpbmUgUEJfRFNfUkJfVFJFRV9CQVNFX05BTUUgYmluX3NlYXJjaF90cmVlX21hcAorI2VuZGlmCisKKyNpZmRlZiBQQl9EU19EQVRBX0ZBTFNFX0lORElDQVRPUgorIyBkZWZpbmUgUEJfRFNfUkJfVFJFRV9OQU1FIHJiX3RyZWVfc2V0CisjIGRlZmluZSBQQl9EU19SQl9UUkVFX0JBU0VfTkFNRSBiaW5fc2VhcmNoX3RyZWVfc2V0CisjZW5kaWYKKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgUEJfRFNfUkJfVFJFRV9OQU1FPEtleSwgTWFwcGVkLCBDbXBfRm4sIE5vZGVfQW5kX0l0X1RyYWl0cywgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX1JCX1RSRUVfQkFTRSBcCisgICAgUEJfRFNfUkJfVFJFRV9CQVNFX05BTUU8S2V5LCBNYXBwZWQsIENtcF9GbiwgTm9kZV9BbmRfSXRfVHJhaXRzLCBfQWxsb2M+CisKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgUmVkLUJsYWNrIHRyZWUuCisgICAgICogIEBpbmdyb3VwIGJyYW5jaC1kZXRhaWwKKyAgICAgKgorICAgICAqICBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgYW4gaWRlYSBmcm9tIHRoZSBTR0kgU1RMICh1c2luZyBhCisgICAgICogIEBhIGhlYWRlciBub2RlIHdoaWNoIGlzIG5lZWRlZCBmb3IgZWZmaWNpZW50IGl0ZXJhdGlvbikuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgICAgdHlwZW5hbWUgQ21wX0ZuLAorCSAgICAgdHlwZW5hbWUgTm9kZV9BbmRfSXRfVHJhaXRzLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIFBCX0RTX1JCX1RSRUVfTkFNRSA6IHB1YmxpYyBQQl9EU19SQl9UUkVFX0JBU0UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgUEJfRFNfUkJfVFJFRV9CQVNFIAkJICAgICAgIAkgYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfcG9pbnRlciAJCSBub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHJiX3RyZWVfdGFnIAkJCQkgY29udGFpbmVyX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiBDbXBfRm4gCQkJCQkgY21wX2ZuOworICAgICAgdHlwZWRlZiBfQWxsb2MgCQkJCQkgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgCQkgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV90eXBlIAkJIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV9wb2ludGVyIAkJIGtleV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV9jb25zdF9wb2ludGVyIAkga2V5X2NvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X3JlZmVyZW5jZSAJIGtleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X2NvbnN0X3JlZmVyZW5jZSAJIGtleV9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bWFwcGVkX3R5cGUgCQkgbWFwcGVkX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bWFwcGVkX3BvaW50ZXIgCSBtYXBwZWRfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjptYXBwZWRfY29uc3RfcG9pbnRlciAJIG1hcHBlZF9jb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om1hcHBlZF9yZWZlcmVuY2UgCSBtYXBwZWRfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om1hcHBlZF9jb25zdF9yZWZlcmVuY2UgbWFwcGVkX2NvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjp2YWx1ZV90eXBlIAkJIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRlciAJCSBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3BvaW50ZXIgCSBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnJlZmVyZW5jZSAJCSByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIAkgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50X2l0ZXJhdG9yIAkgcG9pbnRfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgCSBwb2ludF9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjppdGVyYXRvciAJCSBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciAJIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgCSByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlX3VwZGF0ZSAJCSBub2RlX3VwZGF0ZTsKKworICAgICAgUEJfRFNfUkJfVFJFRV9OQU1FKCk7CisKKyAgICAgIFBCX0RTX1JCX1RSRUVfTkFNRShjb25zdCBDbXBfRm4mKTsKKworICAgICAgUEJfRFNfUkJfVFJFRV9OQU1FKGNvbnN0IENtcF9GbiYsIGNvbnN0IG5vZGVfdXBkYXRlJik7CisKKyAgICAgIFBCX0RTX1JCX1RSRUVfTkFNRShjb25zdCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX3JhbmdlKEl0LCBJdCk7CisKKyAgICAgIGlubGluZSBzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIG1hcHBlZF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKKyAgICAgIHsKKyNpZmRlZiBQQl9EU19EQVRBX1RSVUVfSU5ESUNBVE9SCisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisJc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPiBpbnNfcGFpciA9CisJYmFzZV90eXBlOjppbnNlcnRfbGVhZih2YWx1ZV90eXBlKHJfa2V5LCBtYXBwZWRfdHlwZSgpKSk7CisKKwlpZiAoaW5zX3BhaXIuc2Vjb25kID09IHRydWUpCisJICB7CisJICAgIGluc19wYWlyLmZpcnN0Lm1fcF9uZC0+bV9yZWQgPSB0cnVlOworCSAgICBfR0xJQkNYWF9ERUJVR19PTkxZKHRoaXMtPnN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKwkgICAgaW5zZXJ0X2ZpeHVwKGluc19wYWlyLmZpcnN0Lm1fcF9uZCk7CisJICB9CisJX0dMSUJDWFhfREVCVUdfT05MWShhc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisJcmV0dXJuIGluc19wYWlyLmZpcnN0Lm1fcF9uZC0+bV92YWx1ZS5zZWNvbmQ7CisjZWxzZQorCWluc2VydChyX2tleSk7CisJcmV0dXJuIGJhc2VfdHlwZTo6c19udWxsX3R5cGU7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVyYXNlKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yKTsKKworICAgICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIGVyYXNlKHJldmVyc2VfaXRlcmF0b3IpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3BsaXQoa2V5X2NvbnN0X3JlZmVyZW5jZSwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgIHByaXZhdGU6CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICBzaXplX3R5cGUKKyAgICAgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQoY29uc3Qgbm9kZV9wb2ludGVyLCBjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKyNlbmRpZgorCisgICAgICBpbmxpbmUgc3RhdGljIGJvb2wKKyAgICAgIGlzX2VmZmVjdGl2ZWx5X2JsYWNrKGNvbnN0IG5vZGVfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGluaXRpYWxpemUoKTsKKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0X2ZpeHVwKG5vZGVfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlX25vZGUobm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlX25vZGUobm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlX2ZpeHVwKG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyKTsKKworICAgICAgdm9pZAorICAgICAgc3BsaXRfaW1wKG5vZGVfcG9pbnRlciwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgc3BsaXRfbWluKCk7CisKKyAgICAgIHN0ZDo6cGFpcjxub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcj4KKyAgICAgIHNwbGl0X21pbl9pbXAoKTsKKworICAgICAgdm9pZAorICAgICAgam9pbl9pbXAobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIpOworCisgICAgICBzdGQ6OnBhaXI8bm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXI+CisgICAgICBmaW5kX2pvaW5fcG9zX3JpZ2h0KG5vZGVfcG9pbnRlciwgc2l6ZV90eXBlLCBzaXplX3R5cGUpOworCisgICAgICBzdGQ6OnBhaXI8bm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXI+CisgICAgICBmaW5kX2pvaW5fcG9zX2xlZnQobm9kZV9wb2ludGVyLCBzaXplX3R5cGUsIHNpemVfdHlwZSk7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIGJsYWNrX2hlaWdodChub2RlX3BvaW50ZXIpOworCisgICAgICB2b2lkCisgICAgICBzcGxpdF9hdF9ub2RlKG5vZGVfcG9pbnRlciwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRChYKQkJCQlcCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoWC5zdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKTspCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9pbnNlcnRfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vZXJhc2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9pbmZvX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfU1RSVUNUX09OTFlfQVNTRVJUX1ZBTElECisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX1JCX1RSRUVfTkFNRQorI3VuZGVmIFBCX0RTX1JCX1RSRUVfQkFTRV9OQU1FCisjdW5kZWYgUEJfRFNfUkJfVFJFRV9CQVNFCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JiX3RyZWVfbWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYjA2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSwzMDYgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmJfdHJlZV9tYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciByYl90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2pvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICBpZiAoYmFzZV90eXBlOjpqb2luX3ByZXAob3RoZXIpID09IGZhbHNlKQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICAgICAgcmV0dXJuOworICAgIH0KKworICBjb25zdCBub2RlX3BvaW50ZXIgcF94ID0gb3RoZXIuc3BsaXRfbWluKCk7CisgIGpvaW5faW1wKHBfeCwgb3RoZXIubV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICBiYXNlX3R5cGU6OmpvaW5fZmluaXNoKG90aGVyKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luX2ltcChub2RlX3BvaW50ZXIgcF94LCBub2RlX3BvaW50ZXIgcF9yKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF94ICE9IDApOworICBpZiAocF9yICE9IDApCisgICAgcF9yLT5tX3JlZCA9IGZhbHNlOworCisgIGNvbnN0IHNpemVfdHlwZSBoID0gYmxhY2tfaGVpZ2h0KGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICBjb25zdCBzaXplX3R5cGUgb3RoZXJfaCA9IGJsYWNrX2hlaWdodChwX3IpOworICBub2RlX3BvaW50ZXIgcF94X2w7CisgIG5vZGVfcG9pbnRlciBwX3hfcjsKKyAgc3RkOjpwYWlyPG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyPiBqb2luX3BvczsKKyAgY29uc3QgYm9vbCByaWdodF9qb2luID0gaCA+PSBvdGhlcl9oOworICBpZiAocmlnaHRfam9pbikKKyAgICB7CisgICAgICBqb2luX3BvcyA9IGZpbmRfam9pbl9wb3NfcmlnaHQoYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCwgCisJCQkJICAgICBoLCBvdGhlcl9oKTsKKyAgICAgIHBfeF9sID0gam9pbl9wb3MuZmlyc3Q7CisgICAgICBwX3hfciA9IHBfcjsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwX3hfbCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisgICAgICBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF9yOworICAgICAgaWYgKHBfciAhPSAwKQorCXBfci0+bV9wX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisKKyAgICAgIGpvaW5fcG9zID0gZmluZF9qb2luX3Bvc19sZWZ0KGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQsIAorCQkJCSAgICBoLCBvdGhlcl9oKTsKKyAgICAgIHBfeF9yID0gam9pbl9wb3MuZmlyc3Q7CisgICAgfQorCisgIG5vZGVfcG9pbnRlciBwX3BhcmVudCA9IGpvaW5fcG9zLnNlY29uZDsKKyAgaWYgKHBfcGFyZW50ID09IGJhc2VfdHlwZTo6bV9wX2hlYWQpCisgICAgeworICAgICAgYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudCA9IHBfeDsKKyAgICAgIHBfeC0+bV9wX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcF94LT5tX3BfcGFyZW50ID0gcF9wYXJlbnQ7CisgICAgICBpZiAocmlnaHRfam9pbikKKwlwX3gtPm1fcF9wYXJlbnQtPm1fcF9yaWdodCA9IHBfeDsKKyAgICAgIGVsc2UKKwlwX3gtPm1fcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF94OworICAgIH0KKworICBwX3gtPm1fcF9sZWZ0ID0gcF94X2w7CisgIGlmIChwX3hfbCAhPSAwKQorICAgIHBfeF9sLT5tX3BfcGFyZW50ID0gcF94OworCisgIHBfeC0+bV9wX3JpZ2h0ID0gcF94X3I7CisgIGlmIChwX3hfciAhPSAwKQorICAgIHBfeF9yLT5tX3BfcGFyZW50ID0gcF94OworCisgIHBfeC0+bV9yZWQgPSB0cnVlOworCisgIGJhc2VfdHlwZTo6aW5pdGlhbGl6ZV9taW5fbWF4KCk7CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBiYXNlX3R5cGU6OnVwZGF0ZV90b190b3AocF94LCAobm9kZV91cGRhdGUqICl0aGlzKTsKKyAgaW5zZXJ0X2ZpeHVwKHBfeCk7CisgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0X21pbigpCit7CisgIG5vZGVfcG9pbnRlciBwX21pbiA9IGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9sZWZ0OworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgY29uc3Qgbm9kZV9wb2ludGVyIHBfaGVhZCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX21pbiAhPSBwX2hlYWQpOworI2VuZGlmIAorCisgIHJlbW92ZV9ub2RlKHBfbWluKTsKKyAgcmV0dXJuIHBfbWluOworfQorCitQQl9EU19DTEFTU19UX0RFQworc3RkOjpwYWlyPAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyLAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6bm9kZV9wb2ludGVyPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9qb2luX3Bvc19yaWdodChub2RlX3BvaW50ZXIgcF9sLCBzaXplX3R5cGUgaF9sLCBzaXplX3R5cGUgaF9yKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaF9sID49IGhfcik7CisKKyAgaWYgKGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gMCkKKyAgICByZXR1cm4gKHN0ZDo6bWFrZV9wYWlyKChub2RlX3BvaW50ZXIpMCwgYmFzZV90eXBlOjptX3BfaGVhZCkpOworCisgIG5vZGVfcG9pbnRlciBwX2xfcGFyZW50ID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKyAgd2hpbGUgKGhfbCA+IGhfcikKKyAgICB7CisgICAgICBpZiAocF9sLT5tX3JlZCA9PSBmYWxzZSkKKyAgICAgICAgeworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGhfbCA+IDApOworCSAgLS1oX2w7CisgICAgICAgIH0KKworICAgICAgcF9sX3BhcmVudCA9IHBfbDsKKyAgICAgIHBfbCA9IHBfbC0+bV9wX3JpZ2h0OworICAgIH0KKworICBpZiAoIWlzX2VmZmVjdGl2ZWx5X2JsYWNrKHBfbCkpCisgICAgeworICAgICAgcF9sX3BhcmVudCA9IHBfbDsKKyAgICAgIHBfbCA9IHBfbC0+bV9wX3JpZ2h0OworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXNfZWZmZWN0aXZlbHlfYmxhY2socF9sKSk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChibGFja19oZWlnaHQocF9sKSA9PSBoX3IpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9sID09IDAgfHwgcF9sLT5tX3BfcGFyZW50ID09IHBfbF9wYXJlbnQpOworICByZXR1cm4gc3RkOjptYWtlX3BhaXIocF9sLCBwX2xfcGFyZW50KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3N0ZDo6cGFpcjwKKyAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlciwKKyAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcj4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfam9pbl9wb3NfbGVmdChub2RlX3BvaW50ZXIgcF9yLCBzaXplX3R5cGUgaF9sLCBzaXplX3R5cGUgaF9yKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaF9yID4gaF9sKTsKKyAgaWYgKGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPT0gMCkKKyAgICByZXR1cm4gKHN0ZDo6bWFrZV9wYWlyKChub2RlX3BvaW50ZXIpMCwKKwkJCSAgIGJhc2VfdHlwZTo6bV9wX2hlYWQpKTsKKyAgbm9kZV9wb2ludGVyIHBfcl9wYXJlbnQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICB3aGlsZSAoaF9yID4gaF9sKQorICAgIHsKKyAgICAgIGlmIChwX3ItPm1fcmVkID09IGZhbHNlKQorICAgICAgICB7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaF9yID4gMCk7CisJICAtLWhfcjsKKyAgICAgICAgfQorCisgICAgICBwX3JfcGFyZW50ID0gcF9yOworICAgICAgcF9yID0gcF9yLT5tX3BfbGVmdDsKKyAgICB9CisKKyAgaWYgKCFpc19lZmZlY3RpdmVseV9ibGFjayhwX3IpKQorICAgIHsKKyAgICAgIHBfcl9wYXJlbnQgPSBwX3I7CisgICAgICBwX3IgPSBwX3ItPm1fcF9sZWZ0OworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoaXNfZWZmZWN0aXZlbHlfYmxhY2socF9yKSk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChibGFja19oZWlnaHQocF9yKSA9PSBoX2wpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9yID09IDAgfHwgcF9yLT5tX3BfcGFyZW50ID09IHBfcl9wYXJlbnQpOworICByZXR1cm4gc3RkOjptYWtlX3BhaXIocF9yLCBwX3JfcGFyZW50KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitibGFja19oZWlnaHQobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIHNpemVfdHlwZSBoID0gMTsKKyAgd2hpbGUgKHBfbmQgIT0gMCkKKyAgICB7CisgICAgICBpZiAocF9uZC0+bV9yZWQgPT0gZmFsc2UpCisJKytoOworICAgICAgcF9uZCA9IHBfbmQtPm1fcF9sZWZ0OworICAgIH0KKyAgcmV0dXJuIGg7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxpdChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5LCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisKKyAgaWYgKGJhc2VfdHlwZTo6c3BsaXRfcHJlcChyX2tleSwgb3RoZXIpID09IGZhbHNlKQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICAgICAgcmV0dXJuOworICAgIH0KKworICBQQl9EU19TVFJVQ1RfT05MWV9BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfU1RSVUNUX09OTFlfQVNTRVJUX1ZBTElEKG90aGVyKQorICBub2RlX3BvaW50ZXIgcF9uZCA9IHRoaXMtPnVwcGVyX2JvdW5kKHJfa2V5KS5tX3BfbmQ7CisgIGRvCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dF9uZCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisgICAgICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKHJfa2V5LCBQQl9EU19WMkYocF9uZC0+bV92YWx1ZSkpKQorCXNwbGl0X2F0X25vZGUocF9uZCwgb3RoZXIpOworCisgICAgICBQQl9EU19TVFJVQ1RfT05MWV9BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIFBCX0RTX1NUUlVDVF9PTkxZX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgICAgIHBfbmQgPSBwX25leHRfbmQ7CisgICAgfQorICB3aGlsZSAocF9uZCAhPSBiYXNlX3R5cGU6Om1fcF9oZWFkKTsKKworICBiYXNlX3R5cGU6OnNwbGl0X2ZpbmlzaChvdGhlcik7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXRfYXRfbm9kZShub2RlX3BvaW50ZXIgcF9uZCwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSAwKTsKKworICBub2RlX3BvaW50ZXIgcF9sID0gcF9uZC0+bV9wX2xlZnQ7CisgIG5vZGVfcG9pbnRlciBwX3IgPSBwX25kLT5tX3BfcmlnaHQ7CisgIG5vZGVfcG9pbnRlciBwX3BhcmVudCA9IHBfbmQtPm1fcF9wYXJlbnQ7CisgIGlmIChwX3BhcmVudCA9PSBiYXNlX3R5cGU6Om1fcF9oZWFkKQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX2w7CisgICAgICBpZiAocF9sICE9IDApCisgICAgICAgIHsKKwkgIHBfbC0+bV9wX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisJICBwX2wtPm1fcmVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAocF9wYXJlbnQtPm1fcF9sZWZ0ID09IHBfbmQpCisJcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF9sOworICAgICAgZWxzZQorCXBfcGFyZW50LT5tX3BfcmlnaHQgPSBwX2w7CisKKyAgICAgIGlmIChwX2wgIT0gMCkKKwlwX2wtPm1fcF9wYXJlbnQgPSBwX3BhcmVudDsKKworICAgICAgdGhpcy0+dXBkYXRlX3RvX3RvcChwX3BhcmVudCwgKG5vZGVfdXBkYXRlKiApdGhpcyk7CisKKyAgICAgIGlmICghcF9uZC0+bV9yZWQpCisJcmVtb3ZlX2ZpeHVwKHBfbCwgcF9wYXJlbnQpOworICAgIH0KKworICBiYXNlX3R5cGU6OmluaXRpYWxpemVfbWluX21heCgpOworICBvdGhlci5qb2luX2ltcChwX25kLCBwX3IpOworICBQQl9EU19TVFJVQ1RfT05MWV9BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfU1RSVUNUX09OTFlfQVNTRVJUX1ZBTElEKG90aGVyKQorfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3RyYWl0cy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmJfdHJlZV9tYXBfL3RyYWl0cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyN2Q1OQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vdHJhaXRzLmhwcApAQCAtMCwwICsxLDEwMiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByYl90cmVlX21hcF8vdHJhaXRzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJiX3RyZWVfLgorICovCisKKyNpZm5kZWYgUEJfRFNfUkJfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCisjZGVmaW5lIFBCX0RTX1JCX1RSRUVfTk9ERV9BTkRfSVRfVFJBSVRTX0hQUAorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yYl90cmVlX21hcF8vbm9kZS5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBTcGVjaWFsaXphdGlvbi4KKyAgICAvLy8gQGluZ3JvdXAgdHJhaXRzCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgdHlwZW5hbWUgTWFwcGVkLAorCSAgICAgdHlwZW5hbWUgQ21wX0ZuLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLAorCQkgICAgICB0eXBlbmFtZSBOb2RlX0l0ciwKKwkJICAgICAgdHlwZW5hbWUgQ21wX0ZuXywKKwkJICAgICAgdHlwZW5hbWUgX0FsbG9jXz4KKwkgICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCB0cmVlX3RyYWl0czxLZXksIE1hcHBlZCwgQ21wX0ZuLCBOb2RlX1VwZGF0ZSwgcmJfdHJlZV90YWcsX0FsbG9jPiAKKyAgICA6IHB1YmxpYyBiaW5fc2VhcmNoX3RyZWVfdHJhaXRzPAorICAgICAgS2V5LAorICAgICAgTWFwcGVkLAorICAgICAgQ21wX0ZuLAorICAgICAgTm9kZV9VcGRhdGUsCisgICAgICByYl90cmVlX25vZGVfPAorCXR5cGVuYW1lIHR5cGVzX3RyYWl0czxLZXksIE1hcHBlZCwgX0FsbG9jLCBmYWxzZT46OnZhbHVlX3R5cGUsCisJdHlwZW5hbWUgdHJlZV9ub2RlX21ldGFkYXRhX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBDbXBfRm4sIE5vZGVfVXBkYXRlLAorCQkJCQkgICAgIF9BbGxvYz46OnR5cGUsCisJX0FsbG9jPiwKKyAgICAgIF9BbGxvYz4KKyAgICB7IH07CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24uCisgICAgLy8vIEBpbmdyb3VwIHRyYWl0cworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIHR5cGVuYW1lIENtcF9GbiwKKwkgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfQ0l0ciwKKwkJICAgICAgdHlwZW5hbWUgTm9kZV9JdHIsCisJCSAgICAgIHR5cGVuYW1lIENtcF9Gbl8sCisJCSAgICAgIHR5cGVuYW1lIF9BbGxvY18+CisJICAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdHJlZV90cmFpdHM8S2V5LCBudWxsX3R5cGUsIENtcF9GbiwgTm9kZV9VcGRhdGUsIHJiX3RyZWVfdGFnLF9BbGxvYz4gCisgICAgOiBwdWJsaWMgYmluX3NlYXJjaF90cmVlX3RyYWl0czwKKyAgICAgIEtleSwKKyAgICAgIG51bGxfdHlwZSwKKyAgICAgIENtcF9GbiwKKyAgICAgIE5vZGVfVXBkYXRlLAorICAgICAgcmJfdHJlZV9ub2RlXzwKKyAgICAgIHR5cGVuYW1lIHR5cGVzX3RyYWl0czxLZXksIG51bGxfdHlwZSwgX0FsbG9jLCBmYWxzZT46OnZhbHVlX3R5cGUsCisgICAgICB0eXBlbmFtZSB0cmVlX25vZGVfbWV0YWRhdGFfZGlzcGF0Y2g8S2V5LCBudWxsX3R5cGUsIENtcF9GbiwgTm9kZV9VcGRhdGUsCisJCQkJCSAgIF9BbGxvYz46OnR5cGUsCisJX0FsbG9jPiwKKwkgIF9BbGxvYz4KKyAgICB7IH07CisKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDYyZmJhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsODQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmNfYmlub21pYWxfaGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciByY19iaW5vbWlhbF9oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmNfYmlub21pYWxfaGVhcCgpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmNfYmlub21pYWxfaGVhcChjb25zdCBDbXBfRm4mIHJfY21wX2ZuKSAKKzogYmFzZV90eXBlKHJfY21wX2ZuKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3JjX2Jpbm9taWFsX2hlYXAoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKSAKKzogYmFzZV90eXBlKG90aGVyKQoreworICBtYWtlX2Jpbm9taWFsX2hlYXAoKTsKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK35yY19iaW5vbWlhbF9oZWFwKCkKK3sgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisKKyAgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsKKyAgbV9yYy5zd2FwKG90aGVyLm1fcmMpOworCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4NzEzOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEyMSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByY19iaW5vbWlhbF9oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJjX2Jpbm9taWFsX2hlYXBfLgorICovCisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgYmFzZV90eXBlOjphc3NlcnRfdmFsaWQoZmFsc2UsIF9fZmlsZSwgX19saW5lKTsKKyAgaWYgKCFiYXNlX3R5cGU6OmVtcHR5KCkpCisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKGJhc2VfdHlwZTo6bV9wX21heCAhPSAwKTsKKyAgICAgIGJhc2VfdHlwZTo6YXNzZXJ0X21heChfX2ZpbGUsIF9fbGluZSk7CisgICAgfQorCisgIG1fcmMuYXNzZXJ0X3ZhbGlkKF9fZmlsZSwgX19saW5lKTsKKworICBpZiAobV9yYy5lbXB0eSgpKQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6YXNzZXJ0X3ZhbGlkKHRydWUsIF9fZmlsZSwgX19saW5lKTsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShuZXh0XzJfcG9pbnRlcihiYXNlX3R5cGU6Om1fcF9yb290KSA9PSAwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbm9kZV9jb25zdF9wb2ludGVyIHBfbmQgPSBuZXh0XzJfcG9pbnRlcihiYXNlX3R5cGU6Om1fcF9yb290KTsKKyAgdHlwZW5hbWUgcmNfdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JjLmVuZCgpOworICAtLWl0OworCisgIHdoaWxlIChwX25kICE9IDApCisgICAgeworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKCppdCA9PSBwX25kKTsKKyAgICAgIG5vZGVfY29uc3RfcG9pbnRlciBwX25leHQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmV4dCAhPSAwKTsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShwX25kLT5tX21ldGFkYXRhID09IHBfbmV4dC0+bV9tZXRhZGF0YSk7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkocF9uZXh0LT5tX3BfbmV4dF9zaWJsaW5nID09IDAgfHwKKwkJICAgICAgIHBfbmV4dC0+bV9tZXRhZGF0YSA8IHBfbmV4dC0+bV9wX25leHRfc2libGluZy0+bV9tZXRhZGF0YSk7CisKKyAgICAgIC0taXQ7CisgICAgICBwX25kID0gbmV4dF8yX3BvaW50ZXIobmV4dF9hZnRlcl8wX3BvaW50ZXIocF9uZCkpOworICAgIH0KKyAgUEJfRFNfREVCVUdfVkVSSUZZKGl0ICsgMSA9PSBtX3JjLmJlZ2luKCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfY29uc3RfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbmV4dF8yX3BvaW50ZXIobm9kZV9jb25zdF9wb2ludGVyIHBfbmQpCit7CisgIGlmIChwX25kID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgaWYgKHBfbmV4dCA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChwX25kLT5tX21ldGFkYXRhID09IHBfbmV4dC0+bV9tZXRhZGF0YSkKKyAgICByZXR1cm4gcF9uZDsKKworICByZXR1cm4gbmV4dF8yX3BvaW50ZXIocF9uZXh0KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX2NvbnN0X3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25leHRfYWZ0ZXJfMF9wb2ludGVyKG5vZGVfY29uc3RfcG9pbnRlciBwX25kKQoreworICBpZiAocF9uZCA9PSAwKQorICAgIHJldHVybiAwOworCisgIG5vZGVfcG9pbnRlciBwX25leHQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworCisgIGlmIChwX25leHQgPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAocF9uZC0+bV9tZXRhZGF0YSA8IHBfbmV4dC0+bV9tZXRhZGF0YSkKKyAgICByZXR1cm4gcF9uZXh0OworCisgIHJldHVybiBuZXh0X2FmdGVyXzBfcG9pbnRlcihwX25leHQpOworfQorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0N2JlNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwNyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByY19iaW5vbWlhbF9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJjX2Jpbm9taWFsX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcG9wKCkKK3sKKyAgbWFrZV9iaW5vbWlhbF9oZWFwKCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghYmFzZV90eXBlOjplbXB0eSgpKTsKKyAgYmFzZV90eXBlOjpwb3AoKTsKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2xlYXIoKQoreworICBiYXNlX3R5cGU6OmNsZWFyKCk7CisgIG1fcmMuY2xlYXIoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21ha2VfYmlub21pYWxfaGVhcCgpCit7CisgIG5vZGVfcG9pbnRlciBwX25kID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKyAgd2hpbGUgKHBfbmQgIT0gMCkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKyAgICAgIGlmIChwX25leHQgPT0gMCkKKwlwX25kID0gcF9uZXh0OworICAgICAgZWxzZSBpZiAocF9uZC0+bV9tZXRhZGF0YSA9PSBwX25leHQtPm1fbWV0YWRhdGEpCisJcF9uZCA9IGxpbmtfd2l0aF9uZXh0X3NpYmxpbmcocF9uZCk7CisgICAgICBlbHNlIGlmIChwX25kLT5tX21ldGFkYXRhIDwgcF9uZXh0LT5tX21ldGFkYXRhKQorCXBfbmQgPSBwX25leHQ7CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIGVsc2UKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoMCk7CisjZW5kaWYgCisgICAgfQorCisgIG1fcmMuY2xlYXIoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWQ+Cit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitlcmFzZV9pZihQcmVkIHByZWQpCit7CisgIG1ha2VfYmlub21pYWxfaGVhcCgpOworICBjb25zdCBzaXplX3R5cGUgZXJzZCA9IGJhc2VfdHlwZTo6ZXJhc2VfaWYocHJlZCk7CisgIGJhc2VfdHlwZTo6ZmluZF9tYXgoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiBlcnNkOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UocG9pbnRfaXRlcmF0b3IgaXQpCit7CisgIG1ha2VfYmlub21pYWxfaGVhcCgpOworICBiYXNlX3R5cGU6OmVyYXNlKGl0KTsKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjU5MDVmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2luc2VydF9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE1NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByY19iaW5vbWlhbF9oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciByY19iaW5vbWlhbF9oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHVzaChjb25zdF9yZWZlcmVuY2Ugcl92YWwpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorCisgIG1ha2VfMF9leHBvc2VkKCk7CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBiYXNlX3R5cGU6OmdldF9uZXdfbm9kZV9mb3JfaW5zZXJ0KHJfdmFsKTsKKworICBwX25kLT5tX3BfbF9jaGlsZCA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisgIHBfbmQtPm1fbWV0YWRhdGEgPSAwOworCisgIGlmIChiYXNlX3R5cGU6Om1fcF9tYXggPT0gMCB8fCBDbXBfRm46Om9wZXJhdG9yKCkoYmFzZV90eXBlOjptX3BfbWF4LT5tX3ZhbHVlLCByX3ZhbCkpCisgICAgYmFzZV90eXBlOjptX3BfbWF4ID0gcF9uZDsKKworICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKworICBpZiAoYmFzZV90eXBlOjptX3Bfcm9vdCAhPSAwKQorICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQ7CisKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmQ7CisKKyAgaWYgKHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgIT0gMCYmICBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX21ldGFkYXRhID09IDApCisgICAgbV9yYy5wdXNoKHBfbmQpOworCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorCisgIHJldHVybiBwb2ludF9pdGVyYXRvcihwX25kKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21vZGlmeShwb2ludF9pdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisKKyAgbWFrZV9iaW5vbWlhbF9oZWFwKCk7CisKKyAgYmFzZV90eXBlOjptb2RpZnkoaXQsIHJfbmV3X3ZhbCk7CisKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xpbmtfd2l0aF9uZXh0X3NpYmxpbmcobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIG5vZGVfcG9pbnRlciBwX25leHQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25leHQgIT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25leHQtPm1fcF9wcmV2X29yX3BhcmVudCA9PSBwX25kKTsKKworICBpZiAoQ21wX0ZuOjpvcGVyYXRvcigpKHBfbmQtPm1fdmFsdWUsIHBfbmV4dC0+bV92YWx1ZSkpCisgICAgeworICAgICAgcF9uZXh0LT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQ7CisKKyAgICAgIGlmIChwX25leHQtPm1fcF9wcmV2X29yX3BhcmVudCA9PSAwKQorCWJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX25leHQ7CisgICAgICBlbHNlCisJcF9uZXh0LT5tX3BfcHJldl9vcl9wYXJlbnQtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25leHQ7CisKKyAgICAgIGlmIChiYXNlX3R5cGU6Om1fcF9tYXggPT0gcF9uZCkKKwliYXNlX3R5cGU6Om1fcF9tYXggPSBwX25leHQ7CisKKyAgICAgIGJhc2VfdHlwZTo6bWFrZV9jaGlsZF9vZihwX25kLCBwX25leHQpOworCisgICAgICArK3BfbmV4dC0+bV9tZXRhZGF0YTsKKworICAgICAgcmV0dXJuIHBfbmV4dDsKKyAgICB9CisKKyAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IHBfbmV4dC0+bV9wX25leHRfc2libGluZzsKKworICBpZiAocF9uZC0+bV9wX25leHRfc2libGluZyAhPSAwKQorICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfbmQ7CisKKyAgaWYgKGJhc2VfdHlwZTo6bV9wX21heCA9PSBwX25leHQpCisgICAgYmFzZV90eXBlOjptX3BfbWF4ID0gcF9uZDsKKworICBiYXNlX3R5cGU6Om1ha2VfY2hpbGRfb2YocF9uZXh0LCBwX25kKTsKKworICArK3BfbmQtPm1fbWV0YWRhdGE7CisKKyAgcmV0dXJuIHBfbmQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CittYWtlXzBfZXhwb3NlZCgpCit7CisgIGlmIChtX3JjLmVtcHR5KCkpCisgICAgcmV0dXJuOworCisgIG5vZGVfcG9pbnRlciBwX25kID0gbV9yYy50b3AoKTsKKworICBtX3JjLnBvcCgpOworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kLT5tX3BfbmV4dF9zaWJsaW5nICE9IDApOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9tZXRhZGF0YSA9PSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nLT5tX21ldGFkYXRhKTsKKworICBub2RlX3BvaW50ZXIgcF9yZXMgPSBsaW5rX3dpdGhfbmV4dF9zaWJsaW5nKHBfbmQpOworCisgIGlmIChwX3Jlcy0+bV9wX25leHRfc2libGluZyAhPSAwJiYgIHBfcmVzLT5tX21ldGFkYXRhID09IHBfcmVzLT5tX3BfbmV4dF9zaWJsaW5nLT5tX21ldGFkYXRhKQorICAgIG1fcmMucHVzaChwX3Jlcyk7Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vcmMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3JjLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDgyNThkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3JjLmhwcApAQCAtMCwwICsxLDI0MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByY19iaW5vbWlhbF9oZWFwXy9yYy5ocHAKKyAqIENvbnRhaW5zIGEgcmVkdW5kYW50IChiaW5hcnkgY291bnRlcikuCisgKi8KKworI2lmbmRlZiBQQl9EU19SQ19IUFAKKyNkZWZpbmUgUEJfRFNfUkNfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBSZWR1bmRhbnQgYmluYXJ5IGNvdW50ZXIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyByYworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfQWxsb2MgCQkJCQkgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpzaXplX3R5cGUgCSBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIF9Ob2RlIAkJCQkJIG5vZGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8bm9kZT4JIF9fcmViaW5kX247CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX246Om90aGVyOjpwb2ludGVyICAgICAgCSBub2RlX3BvaW50ZXI7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8bm9kZV9wb2ludGVyPiAgX19yZWJpbmRfbnA7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbnA6Om90aGVyOjpwb2ludGVyIAkgZW50cnlfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbnA6Om90aGVyOjpjb25zdF9wb2ludGVyIGVudHJ5X2NvbnN0X3BvaW50ZXI7CisKKyAgICAgIGVudW0KKwl7CisJICBtYXhfZW50cmllcyA9IHNpemVvZihzaXplX3R5cGUpIDw8IDMKKwl9OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlX3BvaW50ZXIgCQkJCSBlbnRyeTsKKyAgICAgIHR5cGVkZWYgZW50cnlfY29uc3RfcG9pbnRlciAJCQkgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIHJjKCk7CisKKyAgICAgIHJjKGNvbnN0IHJjJik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzd2FwKHJjJik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBwdXNoKGVudHJ5KTsKKworICAgICAgaW5saW5lIG5vZGVfcG9pbnRlcgorICAgICAgdG9wKCkgY29uc3Q7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBwb3AoKTsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3Q7CisKKyAgICAgIGlubGluZSBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdDsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgY29uc3QgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Q7CisKKyAgICAgIGNvbnN0IGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX1JDX0JJTk9NSUFMX0hFQVBfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0OworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgbm9kZV9wb2ludGVyIAltX2FfZW50cmllc1ttYXhfZW50cmllc107CisgICAgICBzaXplX3R5cGUgCW1fb3Zlcl90b3A7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ob2RlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgcmM8X05vZGUsIF9BbGxvYz46OgorICAgIHJjKCkgOiBtX292ZXJfdG9wKDApCisgICAgeyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICByYzxfTm9kZSwgX0FsbG9jPjo6CisgICAgcmMoY29uc3QgcmM8X05vZGUsIF9BbGxvYz4mIG90aGVyKSA6IG1fb3Zlcl90b3AoMCkKKyAgICB7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTm9kZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgcmM8X05vZGUsIF9BbGxvYz46OgorICAgIHN3YXAocmM8X05vZGUsIF9BbGxvYz4mIG90aGVyKQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorCisgICAgICBjb25zdCBzaXplX3R5cGUgb3Zlcl90b3AgPSBzdGQ6Om1heChtX292ZXJfdG9wLCBvdGhlci5tX292ZXJfdG9wKTsKKworICAgICAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBvdmVyX3RvcDsgKytpKQorCXN0ZDo6c3dhcChtX2FfZW50cmllc1tpXSwgb3RoZXIubV9hX2VudHJpZXNbaV0pOworCisgICAgICBzdGQ6OnN3YXAobV9vdmVyX3RvcCwgb3RoZXIubV9vdmVyX3RvcCk7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHJjPF9Ob2RlLCBfQWxsb2M+OjoKKyAgICBwdXNoKGVudHJ5IHBfbmQpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9vdmVyX3RvcCA8IG1heF9lbnRyaWVzKTsKKyAgICAgIG1fYV9lbnRyaWVzW21fb3Zlcl90b3ArK10gPSBwX25kOworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHJjPF9Ob2RlLCBfQWxsb2M+OjoKKyAgICBwb3AoKQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFlbXB0eSgpKTsKKyAgICAgIC0tbV9vdmVyX3RvcDsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ob2RlLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHR5cGVuYW1lIHJjPF9Ob2RlLCBfQWxsb2M+Ojpub2RlX3BvaW50ZXIKKyAgICByYzxfTm9kZSwgX0FsbG9jPjo6CisgICAgdG9wKCkgY29uc3QKKyAgICB7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghZW1wdHkoKSk7CisgICAgICByZXR1cm4gKihtX2FfZW50cmllcyArIG1fb3Zlcl90b3AgLSAxKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTm9kZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgcmM8X05vZGUsIF9BbGxvYz46OgorICAgIGVtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybiBtX292ZXJfdG9wID09IDA7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdHlwZW5hbWUgcmM8X05vZGUsIF9BbGxvYz46OnNpemVfdHlwZQorICAgIHJjPF9Ob2RlLCBfQWxsb2M+OjoKKyAgICBzaXplKCkgY29uc3QKKyAgICB7IHJldHVybiBtX292ZXJfdG9wOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTm9kZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICByYzxfTm9kZSwgX0FsbG9jPjo6CisgICAgY2xlYXIoKQorICAgIHsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgbV9vdmVyX3RvcCA9IDA7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTm9kZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNvbnN0IHR5cGVuYW1lIHJjPF9Ob2RlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgorICAgIHJjPF9Ob2RlLCBfQWxsb2M+OjoKKyAgICBiZWdpbigpIGNvbnN0CisgICAgeyByZXR1cm4mIG1fYV9lbnRyaWVzWzBdOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTm9kZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNvbnN0IHR5cGVuYW1lIHJjPF9Ob2RlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgorICAgIHJjPF9Ob2RlLCBfQWxsb2M+OjoKKyAgICBlbmQoKSBjb25zdAorICAgIHsgcmV0dXJuJiBtX2FfZW50cmllc1ttX292ZXJfdG9wXTsgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTm9kZSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICByYzxfTm9kZSwgX0FsbG9jPjo6CisgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKKyAgICB7IFBCX0RTX0RFQlVHX1ZFUklGWShtX292ZXJfdG9wIDwgbWF4X2VudHJpZXMpOyB9CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX1JDX0JJTk9NSUFMX0hFQVBfVFJBQ0VfCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgcmM8X05vZGUsIF9BbGxvYz46OgorICAgIHRyYWNlKCkgY29uc3QKKyAgICB7CisgICAgICBzdGQ6OmNvdXQgPDwgInJjIiA8PCBzdGQ6OmVuZGw7CisgICAgICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG1fb3Zlcl90b3A7ICsraSkKKwlzdGQ6OmNlcnIgPDwgbV9hX2VudHJpZXNbaV0gPDwgc3RkOjplbmRsOworICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKKyAgICB9CisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9yY19iaW5vbWlhbF9oZWFwXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vcmNfYmlub21pYWxfaGVhcF8uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGI5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vcmNfYmlub21pYWxfaGVhcF8uaHBwCkBAIC0wLDAgKzEsMTcxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHJjX2Jpbm9taWFsX2hlYXBfL3JjX2Jpbm9taWFsX2hlYXBfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJlZHVuZGFudC1jb3VudGVyIGJpbm9taWFsIGhlYXAuCisgKi8KKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvY29uZF9kZWFsdG9yLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYmlub21pYWxfaGVhcF9iYXNlXy9iaW5vbWlhbF9oZWFwX2Jhc2VfLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3JjLmhwcD4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICByY19iaW5vbWlhbF9oZWFwPFZhbHVlX1R5cGUsIENtcF9GbiwgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX1JDX0NfREVDIFwKKyAgICByYzx0eXBlbmFtZSBiaW5vbWlhbF9oZWFwX2Jhc2U8VmFsdWVfVHlwZSwgQ21wX0ZuLCBfQWxsb2M+Ojpub2RlLCBfQWxsb2M+CisKKyAgICAvKioKKyAgICAgKiAgUmVkdW5kYW50LWNvdW50ZXIgYmlub21pYWwgaGVhcC4KKyAgICAgKgorICAgICAqICBAaW5ncm91cCBoZWFwLWRldGFpbAorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIHJjX2Jpbm9taWFsX2hlYXAKKyAgICA6IHB1YmxpYyBiaW5vbWlhbF9oZWFwX2Jhc2U8VmFsdWVfVHlwZSwgQ21wX0ZuLCBfQWxsb2M+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIGJpbm9taWFsX2hlYXBfYmFzZTxWYWx1ZV9UeXBlLCBDbXBfRm4sIF9BbGxvYz4KKyAgICAgIAkJCQkJCQliYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZV9wb2ludGVyIAkJbm9kZV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfY29uc3RfcG9pbnRlciAJbm9kZV9jb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBQQl9EU19SQ19DX0RFQyAJCQkJcmNfdDsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgVmFsdWVfVHlwZSAJCQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCQlzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIAkJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50ZXIgCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3BvaW50ZXIgCWNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cmVmZXJlbmNlIAkJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAJY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50X2NvbnN0X2l0ZXJhdG9yIAlwb2ludF9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludF9pdGVyYXRvciAJcG9pbnRfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgCWNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Oml0ZXJhdG9yIAkJaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y21wX2ZuIAkJY21wX2ZuOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmFsbG9jYXRvcl90eXBlIAlhbGxvY2F0b3JfdHlwZTsKKworICAgICAgcmNfYmlub21pYWxfaGVhcCgpOworCisgICAgICByY19iaW5vbWlhbF9oZWFwKGNvbnN0IENtcF9GbiYpOworCisgICAgICByY19iaW5vbWlhbF9oZWFwKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIH5yY19iaW5vbWlhbF9oZWFwKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgaW5saW5lIHBvaW50X2l0ZXJhdG9yCisgICAgICBwdXNoKGNvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIHZvaWQKKyAgICAgIG1vZGlmeShwb2ludF9pdGVyYXRvciwgY29uc3RfcmVmZXJlbmNlKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHBvcCgpOworCisgICAgICB2b2lkCisgICAgICBlcmFzZShwb2ludF9pdGVyYXRvcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBjbGVhcigpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgc2l6ZV90eXBlCisgICAgICBlcmFzZV9pZihQcmVkKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGl0KFByZWQsIFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoY29uc3QgY2hhciosIGludCkgY29uc3Q7CisjZW5kaWYKKworI2lmZGVmIFBCX0RTX1JDX0JJTk9NSUFMX0hFQVBfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0OworI2VuZGlmCisKKyAgICBwcml2YXRlOgorCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBsaW5rX3dpdGhfbmV4dF9zaWJsaW5nKG5vZGVfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIG1ha2VfMF9leHBvc2VkKCk7CisKKyAgICAgIHZvaWQKKyAgICAgIG1ha2VfYmlub21pYWxfaGVhcCgpOworCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHN0YXRpYyBub2RlX2NvbnN0X3BvaW50ZXIKKyAgICAgIG5leHRfMl9wb2ludGVyKG5vZGVfY29uc3RfcG9pbnRlcik7CisKKyAgICAgIHN0YXRpYyBub2RlX2NvbnN0X3BvaW50ZXIKKyAgICAgIG5leHRfYWZ0ZXJfMF9wb2ludGVyKG5vZGVfY29uc3RfcG9pbnRlcik7CisjZW5kaWYKKworICAgICAgcmNfdCAJCQltX3JjOworICAgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19SQ19DX0RFQworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhZWU5OAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yY19iaW5vbWlhbF9oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNzcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcmNfYmlub21pYWxfaGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJjX2Jpbm9taWFsX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsaXQoUHJlZCBwcmVkLCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisKKyAgbWFrZV9iaW5vbWlhbF9oZWFwKCk7CisgIG90aGVyLm1ha2VfYmlub21pYWxfaGVhcCgpOworICBiYXNlX3R5cGU6OnNwbGl0KHByZWQsIG90aGVyKTsKKyAgYmFzZV90eXBlOjpmaW5kX21heCgpOworICBvdGhlci5maW5kX21heCgpOworCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisKKyAgbWFrZV9iaW5vbWlhbF9oZWFwKCk7CisgIG90aGVyLm1ha2VfYmlub21pYWxfaGVhcCgpOworICBiYXNlX3R5cGU6OmpvaW4ob3RoZXIpOworICBiYXNlX3R5cGU6OmZpbmRfbWF4KCk7CisgIG90aGVyLmZpbmRfbWF4KCk7CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3JjX2Jpbm9taWFsX2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzlhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmNfYmlub21pYWxfaGVhcF8vdHJhY2VfZm5faW1wcy5ocHAKQEAgLTAsMCArMSw1MiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSByY19iaW5vbWlhbF9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHJjX2Jpbm9taWFsX2hlYXBfLgorICovCisKKyNpZmRlZiBQQl9EU19SQ19CSU5PTUlBTF9IRUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBiYXNlX3R5cGU6OnRyYWNlKCk7CisgIG1fcmMudHJhY2UoKTsKK30KKworI2VuZGlmIC8vICNpZmRlZiBQQl9EU19SQ19CSU5PTUlBTF9IRUFQX1RSQUNFXwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvY2NfaGFzaF9tYXhfY29sbGlzaW9uX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX2ltcC5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9jY19oYXNoX21heF9jb2xsaXNpb25fY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWI0YTgwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvY2NfaGFzaF9tYXhfY29sbGlzaW9uX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX2ltcC5ocHAKQEAgLTAsMCArMSwyMTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgY2NfaGFzaF9tYXhfY29sbGlzaW9uX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX2ltcC5ocHAKKyAqIENvbnRhaW5zIGEgcmVzaXplIHRyaWdnZXIgaW1wbGVtZW50YXRpb24uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NjX2hhc2hfbWF4X2NvbGxpc2lvbl9jaGVja19yZXNpemVfdHJpZ2dlcihmbG9hdCBsb2FkKSA6CisgIG1fbG9hZChsb2FkKSwKKyAgbV9zaXplKDApLAorICBtX251bV9jb2woMCksCisgIG1fbWF4X2NvbCgwKSwKKyAgbV9yZXNpemVfbmVlZGVkKGZhbHNlKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCkKK3sgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpCit7IG1fbnVtX2NvbCA9IDA7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKQoreyArK21fbnVtX2NvbDsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpCit7IGNhbGNfcmVzaXplX25lZWRlZCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXJhc2Vfc2VhcmNoX2NvbGxpc2lvbigpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0ZWQoc2l6ZV90eXBlKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlZChzaXplX3R5cGUpCit7IG1fcmVzaXplX25lZWRlZCA9IHRydWU7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9jbGVhcmVkKCkKK3sgbV9yZXNpemVfbmVlZGVkID0gZmFsc2U7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6Citpc19yZXNpemVfbmVlZGVkKCkgY29uc3QKK3sgcmV0dXJuIG1fcmVzaXplX25lZWRlZDsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2lzX2dyb3dfbmVlZGVkKHNpemVfdHlwZSAvKnNpemUqLywgc2l6ZV90eXBlIC8qbnVtX3VzZWRfZSovKSBjb25zdAoreyByZXR1cm4gbV9udW1fY29sID49IG1fbWF4X2NvbDsgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKQoreworICBtX3NpemUgPSBuZXdfc2l6ZTsKKworI2lmZGVmIFBCX0RTX0hUX01BUF9SRVNJWkVfVFJBQ0VfCisgIHN0ZDo6Y2VyciA8PCAiY2htY2NydDo6bm90aWZ5X3Jlc2l6ZWQgIiAKKwkgICAgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obmV3X3NpemUpIDw8IHN0ZDo6ZW5kbDsKKyNlbmRpZiAKKworICBjYWxjX21heF9udW1fY29sbCgpOworICBjYWxjX3Jlc2l6ZV9uZWVkZWQoKTsKKyAgbV9udW1fY29sID0gMDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NhbGNfbWF4X251bV9jb2xsKCkKK3sKKyAgLy8gbWF4X2NvbCA8LS0gXHNxcnR7MiBsb2FkIFxsbiggMiBtIFxsbiggbSApICkgfQorICBjb25zdCBkb3VibGUgbG5fYXJnID0gMiAqIG1fc2l6ZSAqIHN0ZDo6bG9nKGRvdWJsZShtX3NpemUpKTsKKyAgbV9tYXhfY29sID0gc2l6ZV90eXBlKHN0ZDo6Y2VpbChzdGQ6OnNxcnQoMiAqIG1fbG9hZCAqIHN0ZDo6bG9nKGxuX2FyZykpKSk7CisKKyNpZmRlZiBQQl9EU19IVF9NQVBfUkVTSVpFX1RSQUNFXworICBzdGQ6OmNlcnIgPDwgImNobWNjcnQ6OmNhbGNfbWF4X251bV9jb2xsICIgCisJICAgIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fc2l6ZSkgPDwgICAgIiAgICAiIAorCSAgICA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX21heF9jb2wpIDw8IHN0ZDo6ZW5kbDsKKyNlbmRpZiAKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9leHRlcm5hbGx5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKQoreyBub3RpZnlfcmVzaXplZChuZXdfc2l6ZSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBzdGQ6OnN3YXAobV9sb2FkLCBvdGhlci5tX2xvYWQpOworICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOworICBzdGQ6OnN3YXAobV9udW1fY29sLCBvdGhlci5tX251bV9jb2wpOworICBzdGQ6OnN3YXAobV9tYXhfY29sLCBvdGhlci5tX21heF9jb2wpOworICBzdGQ6OnN3YXAobV9yZXNpemVfbmVlZGVkLCBvdGhlci5tX3Jlc2l6ZV9uZWVkZWQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGZsb2F0CitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfbG9hZCgpIGNvbnN0Cit7CisgIFBCX0RTX1NUQVRJQ19BU1NFUlQoYWNjZXNzLCBleHRlcm5hbF9sb2FkX2FjY2Vzcyk7CisgIHJldHVybiBtX2xvYWQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY2FsY19yZXNpemVfbmVlZGVkKCkKK3sgbV9yZXNpemVfbmVlZGVkID0gbV9yZXNpemVfbmVlZGVkIHx8IG1fbnVtX2NvbCA+PSBtX21heF9jb2w7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NldF9sb2FkKGZsb2F0IGxvYWQpCit7CisgIFBCX0RTX1NUQVRJQ19BU1NFUlQoYWNjZXNzLCBleHRlcm5hbF9sb2FkX2FjY2Vzcyk7CisgIG1fbG9hZCA9IGxvYWQ7CisgIGNhbGNfbWF4X251bV9jb2xsKCk7CisgIGNhbGNfcmVzaXplX25lZWRlZCgpOworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2V4cG9uZW50aWFsX3NpemVfcG9saWN5X2ltcC5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2V4cG9uZW50aWFsX3NpemVfcG9saWN5X2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1Njg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2hhc2hfZXhwb25lbnRpYWxfc2l6ZV9wb2xpY3lfaW1wLmhwcApAQCAtMCwwICsxLDkwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfZXhwb25lbnRpYWxfc2l6ZV9wb2xpY3lfaW1wLmhwcAorICogQ29udGFpbnMgYSByZXNpemUgc2l6ZSBwb2xpY3kgaW1wbGVtZW50YXRpb24uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfZXhwb25lbnRpYWxfc2l6ZV9wb2xpY3koc2l6ZV90eXBlIHN0YXJ0X3NpemUsIHNpemVfdHlwZSBncm93X2ZhY3RvcikgOgorICBtX3N0YXJ0X3NpemUoc3RhcnRfc2l6ZSksCisgIG1fZ3Jvd19mYWN0b3IoZ3Jvd19mYWN0b3IpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBzdGQ6OnN3YXAobV9zdGFydF9zaXplLCBvdGhlci5tX3N0YXJ0X3NpemUpOworICBzdGQ6OnN3YXAobV9ncm93X2ZhY3Rvciwgb3RoZXIubV9ncm93X2ZhY3Rvcik7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZShzaXplX3R5cGUgc2l6ZSkgY29uc3QKK3sKKyAgc2l6ZV90eXBlIHJldCA9IG1fc3RhcnRfc2l6ZTsKKyAgd2hpbGUgKHJldCA8PSBzaXplKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBuZXh0X3JldCA9IHJldCogIG1fZ3Jvd19mYWN0b3I7CisgICAgICBpZiAobmV4dF9yZXQgPCByZXQpCisJX190aHJvd19pbnNlcnRfZXJyb3IoKTsKKyAgICAgIHJldCA9IG5leHRfcmV0OworICAgIH0KKyAgcmV0dXJuIHJldDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZWFyZXN0X3NtYWxsZXJfc2l6ZShzaXplX3R5cGUgc2l6ZSkgY29uc3QKK3sKKyAgc2l6ZV90eXBlIHJldCA9IG1fc3RhcnRfc2l6ZTsKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIG5leHRfcmV0ID0gcmV0KiAgbV9ncm93X2ZhY3RvcjsKKyAgICAgIGlmIChuZXh0X3JldCA8IHJldCkKKwlfX3Rocm93X3Jlc2l6ZV9lcnJvcigpOworICAgICAgaWYgKG5leHRfcmV0ID49IHNpemUpCisJcmV0dXJuIChyZXQpOworICAgICAgcmV0ID0gbmV4dF9yZXQ7CisgICAgfQorICByZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2hhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcl9pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NGM0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcApAQCAtMCwwICsxLDI5MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcAorICogQ29udGFpbnMgYSByZXNpemUgdHJpZ2dlciBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjZGVmaW5lIFBCX0RTX0FTU0VSVF9WQUxJRChYKQkJCQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfT05MWShYLmFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcihmbG9hdCBsb2FkX21pbiwgZmxvYXQgbG9hZF9tYXgpCis6IG1fbG9hZF9taW4obG9hZF9taW4pLCBtX2xvYWRfbWF4KGxvYWRfbWF4KSwgbV9uZXh0X3Nocmlua19zaXplKDApLAorICBtX25leHRfZ3Jvd19zaXplKDApLCBtX3Jlc2l6ZV9uZWVkZWQoZmFsc2UpCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCkKK3sgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZmluZF9zZWFyY2hfY29sbGlzaW9uKCkKK3sgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZmluZF9zZWFyY2hfZW5kKCkKK3sgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2luc2VydF9zZWFyY2hfY29sbGlzaW9uKCkKK3sgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfaW5zZXJ0X3NlYXJjaF9lbmQoKQoreyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9lcmFzZV9zZWFyY2hfc3RhcnQoKQoreyBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9lcmFzZV9zZWFyY2hfY29sbGlzaW9uKCkKK3sgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpIH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpCit7IFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKSB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZW50cmllcykKK3sKKyAgbV9yZXNpemVfbmVlZGVkID0gKG51bV9lbnRyaWVzID49IG1fbmV4dF9ncm93X3NpemUpOworICBzaXplX2Jhc2U6OnNldF9zaXplKG51bV9lbnRyaWVzKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlZChzaXplX3R5cGUgbnVtX2VudHJpZXMpCit7CisgIHNpemVfYmFzZTo6c2V0X3NpemUobnVtX2VudHJpZXMpOworICBtX3Jlc2l6ZV9uZWVkZWQgPSBudW1fZW50cmllcyA8PSBtX25leHRfc2hyaW5rX3NpemU7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIGJvb2wKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2lzX3Jlc2l6ZV9uZWVkZWQoKSBjb25zdAoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIG1fcmVzaXplX25lZWRlZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBib29sCitQQl9EU19DTEFTU19DX0RFQzo6Citpc19ncm93X25lZWRlZChzaXplX3R5cGUgLypzaXplKi8sIHNpemVfdHlwZSBudW1fZW50cmllcykgY29uc3QKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcmVzaXplX25lZWRlZCk7CisgIHJldHVybiBudW1fZW50cmllcyA+PSBtX25leHRfZ3Jvd19zaXplOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6Ogorfmhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcigpIHsgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKQoreworICBtX3Jlc2l6ZV9uZWVkZWQgPSBmYWxzZTsKKyAgbV9uZXh0X2dyb3dfc2l6ZSA9IHNpemVfdHlwZShtX2xvYWRfbWF4ICogbmV3X3NpemUgLSAxKTsKKyAgbV9uZXh0X3Nocmlua19zaXplID0gc2l6ZV90eXBlKG1fbG9hZF9taW4gKiBuZXdfc2l6ZSk7CisKKyNpZmRlZiBQQl9EU19IVF9NQVBfUkVTSVpFX1RSQUNFXworICBzdGQ6OmNlcnIgPDwgImhsY3J0Ojpub3RpZnlfcmVzaXplZCAiICA8PCBzdGQ6OmVuZGwKKwkgICAgPDwgIjEgIiA8PCBuZXdfc2l6ZSA8PCBzdGQ6OmVuZGwKKwkgICAgPDwgIjIgIiA8PCBtX2xvYWRfbWluIDw8IHN0ZDo6ZW5kbAorCSAgICA8PCAiMyAiIDw8IG1fbG9hZF9tYXggPDwgc3RkOjplbmRsCisJICAgIDw8ICI0ICIgPDwgbV9uZXh0X3Nocmlua19zaXplIDw8IHN0ZDo6ZW5kbAorCSAgICA8PCAiNSAiIDw8IG1fbmV4dF9ncm93X3NpemUgPDwgc3RkOjplbmRsOworI2VuZGlmCisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkKHNpemVfdHlwZSBuZXdfc2l6ZSkKK3sKKyAgbV9yZXNpemVfbmVlZGVkID0gZmFsc2U7CisgIHNpemVfdHlwZSBuZXdfZ3Jvd19zaXplID0gc2l6ZV90eXBlKG1fbG9hZF9tYXggKiBuZXdfc2l6ZSAtIDEpOworICBzaXplX3R5cGUgbmV3X3Nocmlua19zaXplID0gc2l6ZV90eXBlKG1fbG9hZF9taW4gKiBuZXdfc2l6ZSk7CisKKyNpZmRlZiBQQl9EU19IVF9NQVBfUkVTSVpFX1RSQUNFXworICBzdGQ6OmNlcnIgPDwgImhsY3J0Ojpub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkICIgIDw8IHN0ZDo6ZW5kbAorCSAgICA8PCAiMSAiIDw8IG5ld19zaXplIDw8IHN0ZDo6ZW5kbAorCSAgICA8PCAiMiAiIDw8IG1fbG9hZF9taW4gPDwgc3RkOjplbmRsCisJICAgIDw8ICIzICIgPDwgbV9sb2FkX21heCA8PCBzdGQ6OmVuZGwKKwkgICAgPDwgIjQgIiA8PCBtX25leHRfc2hyaW5rX3NpemUgPDwgc3RkOjplbmRsCisJICAgIDw8ICI1ICIgPDwgbV9uZXh0X2dyb3dfc2l6ZSA8PCBzdGQ6OmVuZGwKKwkgICAgPDwgIjYgIiA8PCBuZXdfc2hyaW5rX3NpemUgPDwgc3RkOjplbmRsCisJICAgIDw8ICI3ICIgPDwgbmV3X2dyb3dfc2l6ZSA8PCBzdGQ6OmVuZGw7CisjZW5kaWYKKworICBpZiAobmV3X2dyb3dfc2l6ZSA+PSBtX25leHRfZ3Jvd19zaXplKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChuZXdfc2hyaW5rX3NpemUgPj0gbV9uZXh0X3Nocmlua19zaXplKTsKKyAgICAgIG1fbmV4dF9ncm93X3NpemUgPSBuZXdfZ3Jvd19zaXplOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChuZXdfc2hyaW5rX3NpemUgPD0gbV9uZXh0X3Nocmlua19zaXplKTsKKyAgICAgIG1fbmV4dF9zaHJpbmtfc2l6ZSA9IG5ld19zaHJpbmtfc2l6ZTsKKyAgICB9CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfY2xlYXJlZCgpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBzaXplX2Jhc2U6OnNldF9zaXplKDApOworICBtX3Jlc2l6ZV9uZWVkZWQgPSAoMCA8IG1fbmV4dF9zaHJpbmtfc2l6ZSk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisKKyAgc2l6ZV9iYXNlOjpzd2FwKG90aGVyKTsKKyAgc3RkOjpzd2FwKG1fbG9hZF9taW4sIG90aGVyLm1fbG9hZF9taW4pOworICBzdGQ6OnN3YXAobV9sb2FkX21heCwgb3RoZXIubV9sb2FkX21heCk7CisgIHN0ZDo6c3dhcChtX3Jlc2l6ZV9uZWVkZWQsIG90aGVyLm1fcmVzaXplX25lZWRlZCk7CisgIHN0ZDo6c3dhcChtX25leHRfZ3Jvd19zaXplLCBvdGhlci5tX25leHRfZ3Jvd19zaXplKTsKKyAgc3RkOjpzd2FwKG1fbmV4dF9zaHJpbmtfc2l6ZSwgb3RoZXIubV9uZXh0X3Nocmlua19zaXplKTsKKworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+CitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfbG9hZHMoKSBjb25zdAoreworICBQQl9EU19TVEFUSUNfQVNTRVJUKGFjY2VzcywgZXh0ZXJuYWxfbG9hZF9hY2Nlc3MpOworICByZXR1cm4gc3RkOjptYWtlX3BhaXIobV9sb2FkX21pbiwgbV9sb2FkX21heCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzZXRfbG9hZHMoc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gbG9hZF9wYWlyKQoreworICBQQl9EU19TVEFUSUNfQVNTRVJUKGFjY2VzcywgZXh0ZXJuYWxfbG9hZF9hY2Nlc3MpOworICBjb25zdCBmbG9hdCBvbGRfbG9hZF9taW4gPSBtX2xvYWRfbWluOworICBjb25zdCBmbG9hdCBvbGRfbG9hZF9tYXggPSBtX2xvYWRfbWF4OworICBjb25zdCBzaXplX3R5cGUgb2xkX25leHRfc2hyaW5rX3NpemUgPSBtX25leHRfc2hyaW5rX3NpemU7CisgIGNvbnN0IHNpemVfdHlwZSBvbGRfbmV4dF9ncm93X3NpemUgPSBtX25leHRfZ3Jvd19zaXplOworICBjb25zdCBib29sIG9sZF9yZXNpemVfbmVlZGVkID0gbV9yZXNpemVfbmVlZGVkOworCisgIF9fdHJ5CisgICAgeworICAgICAgbV9sb2FkX21pbiA9IGxvYWRfcGFpci5maXJzdDsKKyAgICAgIG1fbG9hZF9tYXggPSBsb2FkX3BhaXIuc2Vjb25kOworICAgICAgZG9fcmVzaXplKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc2l6ZV9iYXNlOjpnZXRfc2l6ZSgpIC8gKChtX2xvYWRfbWluICsgbV9sb2FkX21heCkgLyAyKSkpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgbV9sb2FkX21pbiA9IG9sZF9sb2FkX21pbjsKKyAgICAgIG1fbG9hZF9tYXggPSBvbGRfbG9hZF9tYXg7CisgICAgICBtX25leHRfc2hyaW5rX3NpemUgPSBvbGRfbmV4dF9zaHJpbmtfc2l6ZTsKKyAgICAgIG1fbmV4dF9ncm93X3NpemUgPSBvbGRfbmV4dF9ncm93X3NpemU7CisgICAgICBtX3Jlc2l6ZV9uZWVkZWQgPSBvbGRfcmVzaXplX25lZWRlZDsKKyAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2RvX3Jlc2l6ZShzaXplX3R5cGUpCit7IHN0ZDo6YWJvcnQoKTsgfQorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyMgZGVmaW5lIFBCX0RTX0RFQlVHX1ZFUklGWShfQ29uZCkJCQkJCVwKKyAgX0dMSUJDWFhfREVCVUdfVkVSSUZZX0FUKF9Db25kLAkJCQkJXAorCQkJICAgX01fbWVzc2FnZSgjX0NvbmQiIGFzc2VydGlvbiBmcm9tICUxOzolMjsiKQlcCisJCQkgICAuX01fc3RyaW5nKF9fRklMRV9fKS5fTV9pbnRlZ2VyKF9fTElORV9fKQlcCisJCQkgICAsX19maWxlLF9fbGluZSkKKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF92YWxpZChjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIFBCX0RTX0RFQlVHX1ZFUklGWShtX2xvYWRfbWF4ID4gbV9sb2FkX21pbik7CisgIFBCX0RTX0RFQlVHX1ZFUklGWShtX25leHRfZ3Jvd19zaXplID49IG1fbmV4dF9zaHJpbmtfc2l6ZSk7Cit9CisjIHVuZGVmIFBCX0RTX0RFQlVHX1ZFUklGWQorI2VuZGlmCisjdW5kZWYgUEJfRFNfQVNTRVJUX1ZBTElECmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2hhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcl9zaXplX2Jhc2UuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzJkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlLmhwcApAQCAtMCwwICsxLDk0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcl9zaXplX2Jhc2UuaHBwCisgKiBDb250YWlucyBhbiBiYXNlIGhvbGRpbmcgc2l6ZSBmb3Igc29tZSByZXNpemUgcG9saWNpZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19IQVNIX0xPQURfQ0hFQ0tfUkVTSVpFX1RSSUdHRVJfU0laRV9CQVNFX0hQUAorI2RlZmluZSBQQl9EU19IQVNIX0xPQURfQ0hFQ0tfUkVTSVpFX1RSSUdHRVJfU0laRV9CQVNFX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGUsIGJvb2wgSG9sZF9TaXplPgorICAgIGNsYXNzIGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcl9zaXplX2Jhc2U7CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb25zLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyAgICBjbGFzcyBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlPFNpemVfVHlwZSwgdHJ1ZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBTaXplX1R5cGUgc2l6ZV90eXBlOworCisgICAgICBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlKCk6IG1fc2l6ZSgwKQorICAgICAgeyB9CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzd2FwKGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcl9zaXplX2Jhc2UmIG90aGVyKQorICAgICAgeyBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3NpemUpOyB9CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzZXRfc2l6ZShzaXplX3R5cGUgc2l6ZSkKKyAgICAgIHsgbV9zaXplID0gc2l6ZTsgfQorCisgICAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgICBnZXRfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHByaXZhdGU6CisgICAgICBzaXplX3R5cGUgbV9zaXplOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisgICAgY2xhc3MgaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX3NpemVfYmFzZTxTaXplX1R5cGUsIGZhbHNlPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc3dhcChoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlJiBvdGhlcikgeyB9CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzZXRfc2l6ZShzaXplX3R5cGUgc2l6ZSkgeyB9CisgICAgfTsKKyAgfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9wcmltZV9zaXplX3BvbGljeV9pbXAuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9wcmltZV9zaXplX3BvbGljeV9pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzkyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX3ByaW1lX3NpemVfcG9saWN5X2ltcC5ocHAKQEAgLTAsMCArMSwxNjEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaGFzaF9wcmltZV9zaXplX3BvbGljeV9pbXAuaHBwCisgKiBDb250YWlucyBhIHJlc2l6ZSBzaXplIHBvbGljeSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKK25hbWVzcGFjZSBkZXRhaWwKK3sKKyAgZW51bQorICAgIHsKKyAgICAgIG51bV9kaXN0aW5jdF9zaXplc18zMl9iaXQgPSAzMCwKKyAgICAgIG51bV9kaXN0aW5jdF9zaXplc182NF9iaXQgPSA2MiwKKyAgICAgIG51bV9kaXN0aW5jdF9zaXplcyA9IHNpemVvZihzdGQ6OnNpemVfdCkgIT0gOCA/IAorICAgICAgICAgICAgbnVtX2Rpc3RpbmN0X3NpemVzXzMyX2JpdCA6IG51bV9kaXN0aW5jdF9zaXplc182NF9iaXQsCQorICAgIH07CisKKyAgLy8gT3JpZ2luYWxseSB0YWtlbiBmcm9tIHRoZSBTR0kgaW1wbGVtZW50YXRpb247IGFja25vd2xlZGdlZCBpbiB0aGUgZG9jcy4KKyAgLy8gRnVydGhlciBtb2RpZmllZCAoZm9yIDY0IGJpdHMpIGZyb20gdHIxJ3MgaGFzaHRhYmxlLgorICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZ19hX3NpemVzW251bV9kaXN0aW5jdF9zaXplc182NF9iaXRdID0KKyAgICB7CisgICAgICAvKiAwICAgICAqLyAgICAgICAgICAgICAgNXVsLAorICAgICAgLyogMSAgICAgKi8gICAgICAgICAgICAgIDExdWwsIAorICAgICAgLyogMiAgICAgKi8gICAgICAgICAgICAgIDIzdWwsIAorICAgICAgLyogMyAgICAgKi8gICAgICAgICAgICAgIDQ3dWwsIAorICAgICAgLyogNCAgICAgKi8gICAgICAgICAgICAgIDk3dWwsIAorICAgICAgLyogNSAgICAgKi8gICAgICAgICAgICAgIDE5OXVsLCAKKyAgICAgIC8qIDYgICAgICovICAgICAgICAgICAgICA0MDl1bCwgCisgICAgICAvKiA3ICAgICAqLyAgICAgICAgICAgICAgODIzdWwsIAorICAgICAgLyogOCAgICAgKi8gICAgICAgICAgICAgIDE3NDF1bCwgCisgICAgICAvKiA5ICAgICAqLyAgICAgICAgICAgICAgMzQ2OXVsLCAKKyAgICAgIC8qIDEwICAgICovICAgICAgICAgICAgICA2OTQ5dWwsIAorICAgICAgLyogMTEgICAgKi8gICAgICAgICAgICAgIDE0MDMzdWwsIAorICAgICAgLyogMTIgICAgKi8gICAgICAgICAgICAgIDI4NDExdWwsIAorICAgICAgLyogMTMgICAgKi8gICAgICAgICAgICAgIDU3NTU3dWwsIAorICAgICAgLyogMTQgICAgKi8gICAgICAgICAgICAgIDExNjczMXVsLCAKKyAgICAgIC8qIDE1ICAgICovICAgICAgICAgICAgICAyMzY4OTd1bCwKKyAgICAgIC8qIDE2ICAgICovICAgICAgICAgICAgICA0ODA4ODF1bCwgCisgICAgICAvKiAxNyAgICAqLyAgICAgICAgICAgICAgOTc2MzY5dWwsCisgICAgICAvKiAxOCAgICAqLyAgICAgICAgICAgICAgMTk4MjYyN3VsLCAKKyAgICAgIC8qIDE5ICAgICovICAgICAgICAgICAgICA0MDI2MDMxdWwsCisgICAgICAvKiAyMCAgICAqLyAgICAgICAgICAgICAgODE3NTM4M3VsLCAKKyAgICAgIC8qIDIxICAgICovICAgICAgICAgICAgICAxNjYwMTU5M3VsLCAKKyAgICAgIC8qIDIyICAgICovICAgICAgICAgICAgICAzMzcxMjcyOXVsLAorICAgICAgLyogMjMgICAgKi8gICAgICAgICAgICAgIDY4NDYwMzkxdWwsIAorICAgICAgLyogMjQgICAgKi8gICAgICAgICAgICAgIDEzOTAyMjQxN3VsLCAKKyAgICAgIC8qIDI1ICAgICovICAgICAgICAgICAgICAyODIzMTI3OTl1bCwgCisgICAgICAvKiAyNiAgICAqLyAgICAgICAgICAgICAgNTczMjkyODE3dWwsIAorICAgICAgLyogMjcgICAgKi8gICAgICAgICAgICAgIDExNjQxODYyMTd1bCwKKyAgICAgIC8qIDI4ICAgICovICAgICAgICAgICAgICAyMzY0MTE0MjE3dWwsIAorICAgICAgLyogMjkgICAgKi8gICAgICAgICAgICAgIDQyOTQ5NjcyOTF1bCwKKyAgICAgIC8qIDMwICAgICovIChzdGQ6OnNpemVfdCk4NTg5OTM0NTgzdWxsLAorICAgICAgLyogMzEgICAgKi8gKHN0ZDo6c2l6ZV90KTE3MTc5ODY5MTQzdWxsLAorICAgICAgLyogMzIgICAgKi8gKHN0ZDo6c2l6ZV90KTM0MzU5NzM4MzM3dWxsLAorICAgICAgLyogMzMgICAgKi8gKHN0ZDo6c2l6ZV90KTY4NzE5NDc2NzMxdWxsLAorICAgICAgLyogMzQgICAgKi8gKHN0ZDo6c2l6ZV90KTEzNzQzODk1MzQ0N3VsbCwKKyAgICAgIC8qIDM1ICAgICovIChzdGQ6OnNpemVfdCkyNzQ4Nzc5MDY4OTl1bGwsCisgICAgICAvKiAzNiAgICAqLyAoc3RkOjpzaXplX3QpNTQ5NzU1ODEzODgxdWxsLAorICAgICAgLyogMzcgICAgKi8gKHN0ZDo6c2l6ZV90KTEwOTk1MTE2Mjc2ODl1bGwsCisgICAgICAvKiAzOCAgICAqLyAoc3RkOjpzaXplX3QpMjE5OTAyMzI1NTUzMXVsbCwKKyAgICAgIC8qIDM5ICAgICovIChzdGQ6OnNpemVfdCk0Mzk4MDQ2NTExMDkzdWxsLAorICAgICAgLyogNDAgICAgKi8gKHN0ZDo6c2l6ZV90KTg3OTYwOTMwMjIxNTF1bGwsCisgICAgICAvKiA0MSAgICAqLyAoc3RkOjpzaXplX3QpMTc1OTIxODYwNDQzOTl1bGwsCisgICAgICAvKiA0MiAgICAqLyAoc3RkOjpzaXplX3QpMzUxODQzNzIwODg3Nzd1bGwsCisgICAgICAvKiA0MyAgICAqLyAoc3RkOjpzaXplX3QpNzAzNjg3NDQxNzc2NDN1bGwsCisgICAgICAvKiA0NCAgICAqLyAoc3RkOjpzaXplX3QpMTQwNzM3NDg4MzU1MjEzdWxsLAorICAgICAgLyogNDUgICAgKi8gKHN0ZDo6c2l6ZV90KTI4MTQ3NDk3NjcxMDU5N3VsbCwKKyAgICAgIC8qIDQ2ICAgICovIChzdGQ6OnNpemVfdCk1NjI5NDk5NTM0MjEyMzF1bGwsIAorICAgICAgLyogNDcgICAgKi8gKHN0ZDo6c2l6ZV90KTExMjU4OTk5MDY4NDI1OTd1bGwsCisgICAgICAvKiA0OCAgICAqLyAoc3RkOjpzaXplX3QpMjI1MTc5OTgxMzY4NTExOXVsbCwgCisgICAgICAvKiA0OSAgICAqLyAoc3RkOjpzaXplX3QpNDUwMzU5OTYyNzM3MDQ0OXVsbCwKKyAgICAgIC8qIDUwICAgICovIChzdGQ6OnNpemVfdCk5MDA3MTk5MjU0NzQwODgxdWxsLCAKKyAgICAgIC8qIDUxICAgICovIChzdGQ6OnNpemVfdCkxODAxNDM5ODUwOTQ4MTk1MXVsbCwKKyAgICAgIC8qIDUyICAgICovIChzdGQ6OnNpemVfdCkzNjAyODc5NzAxODk2MzkxM3VsbCwgCisgICAgICAvKiA1MyAgICAqLyAoc3RkOjpzaXplX3QpNzIwNTc1OTQwMzc5Mjc5MzF1bGwsCisgICAgICAvKiA1NCAgICAqLyAoc3RkOjpzaXplX3QpMTQ0MTE1MTg4MDc1ODU1ODU5dWxsLAorICAgICAgLyogNTUgICAgKi8gKHN0ZDo6c2l6ZV90KTI4ODIzMDM3NjE1MTcxMTcxN3VsbCwKKyAgICAgIC8qIDU2ICAgICovIChzdGQ6OnNpemVfdCk1NzY0NjA3NTIzMDM0MjM0MzN1bGwsCisgICAgICAvKiA1NyAgICAqLyAoc3RkOjpzaXplX3QpMTE1MjkyMTUwNDYwNjg0Njg4M3VsbCwKKyAgICAgIC8qIDU4ICAgICovIChzdGQ6OnNpemVfdCkyMzA1ODQzMDA5MjEzNjkzOTUxdWxsLAorICAgICAgLyogNTkgICAgKi8gKHN0ZDo6c2l6ZV90KTQ2MTE2ODYwMTg0MjczODc4NDd1bGwsCisgICAgICAvKiA2MCAgICAqLyAoc3RkOjpzaXplX3QpOTIyMzM3MjAzNjg1NDc3NTc4M3VsbCwKKyAgICAgIC8qIDYxICAgICovIChzdGQ6OnNpemVfdCkxODQ0Njc0NDA3MzcwOTU1MTU1N3VsbCwKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraGFzaF9wcmltZV9zaXplX3BvbGljeShzaXplX3R5cGUgbikgOiBtX3N0YXJ0X3NpemUobikKK3sgbV9zdGFydF9zaXplID0gZ2V0X25lYXJlc3RfbGFyZ2VyX3NpemUobik7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sgc3RkOjpzd2FwKG1fc3RhcnRfc2l6ZSwgb3RoZXIubV9zdGFydF9zaXplKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZWFyZXN0X2xhcmdlcl9zaXplKHNpemVfdHlwZSBuKSBjb25zdAoreworICBjb25zdCBzdGQ6OnNpemVfdCogY29uc3QgcF91cHBlciA9IHN0ZDo6dXBwZXJfYm91bmQoZGV0YWlsOjpnX2Ffc2l6ZXMsIAorCQkgICAgIGRldGFpbDo6Z19hX3NpemVzICsgZGV0YWlsOjpudW1fZGlzdGluY3Rfc2l6ZXMsIG4pOworCisgIGlmIChwX3VwcGVyID09IGRldGFpbDo6Z19hX3NpemVzICsgZGV0YWlsOjpudW1fZGlzdGluY3Rfc2l6ZXMpCisgICAgX190aHJvd19yZXNpemVfZXJyb3IoKTsKKyAgcmV0dXJuICpwX3VwcGVyOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZWFyZXN0X3NtYWxsZXJfc2l6ZShzaXplX3R5cGUgbikgY29uc3QKK3sKKyAgY29uc3Qgc3RkOjpzaXplX3QqIHBfbG93ZXIgPSBzdGQ6Omxvd2VyX2JvdW5kKGRldGFpbDo6Z19hX3NpemVzLCAKKwkJICAgICAgIGRldGFpbDo6Z19hX3NpemVzICsgZGV0YWlsOjpudW1fZGlzdGluY3Rfc2l6ZXMsIG4pOworCisgIGlmICgqcF9sb3dlciA+PSBuICYmICBwX2xvd2VyICE9IGRldGFpbDo6Z19hX3NpemVzKQorICAgIC0tcF9sb3dlcjsKKyAgaWYgKCpwX2xvd2VyIDwgbV9zdGFydF9zaXplKQorICAgIHJldHVybiBtX3N0YXJ0X3NpemU7CisgIHJldHVybiAqcF9sb3dlcjsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeV9pbXAuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5X2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhODNmNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeV9pbXAuaHBwCkBAIC0wLDAgKzEsMjQ5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeV9pbXAuaHBwCisgKiBDb250YWlucyBhIHJlc2l6ZSBwb2xpY3kgaW1wbGVtZW50YXRpb24uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeSgpIAorOiBtX3NpemUoU2l6ZV9Qb2xpY3k6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkKG1fc2l6ZSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeShjb25zdCBTaXplX1BvbGljeSYgcl9zaXplX3BvbGljeSkgCis6IFNpemVfUG9saWN5KHJfc2l6ZV9wb2xpY3kpLCBtX3NpemUoU2l6ZV9Qb2xpY3k6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkKG1fc2l6ZSk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2hhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeShjb25zdCBTaXplX1BvbGljeSYgcl9zaXplX3BvbGljeSwgCisJCQkgICAgY29uc3QgVHJpZ2dlcl9Qb2xpY3kmIHJfdHJpZ2dlcl9wb2xpY3kpIAorOiBTaXplX1BvbGljeShyX3NpemVfcG9saWN5KSwgVHJpZ2dlcl9Qb2xpY3kocl90cmlnZ2VyX3BvbGljeSksCisgIG1fc2l6ZShTaXplX1BvbGljeTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoMSkpCit7IHRyaWdnZXJfcG9saWN5X2Jhc2U6Om5vdGlmeV9leHRlcm5hbGx5X3Jlc2l6ZWQobV9zaXplKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6Ogorfmhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeSgpCit7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICB0cmlnZ2VyX3BvbGljeV9iYXNlOjpzd2FwKG90aGVyKTsKKyAgc2l6ZV9wb2xpY3lfYmFzZTo6c3dhcChvdGhlcik7CisgIHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX3N0YXJ0KCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZmluZF9zZWFyY2hfY29sbGlzaW9uKCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2ZpbmRfc2VhcmNoX2NvbGxpc2lvbigpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpCit7IHRyaWdnZXJfcG9saWN5X2Jhc2U6Om5vdGlmeV9maW5kX3NlYXJjaF9lbmQoKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfc3RhcnQoKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpCit7IHRyaWdnZXJfcG9saWN5X2Jhc2U6Om5vdGlmeV9pbnNlcnRfc2VhcmNoX2NvbGxpc2lvbigpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfZXJhc2Vfc2VhcmNoX3N0YXJ0KCkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2NvbGxpc2lvbigpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZSkKK3sgdHJpZ2dlcl9wb2xpY3lfYmFzZTo6bm90aWZ5X2luc2VydGVkKG51bV9lKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25vdGlmeV9lcmFzZWQoc2l6ZV90eXBlIG51bV9lKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfZXJhc2VkKG51bV9lKTsgfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorbm90aWZ5X2NsZWFyZWQoKQoreyB0cmlnZ2VyX3BvbGljeV9iYXNlOjpub3RpZnlfY2xlYXJlZCgpOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraXNfcmVzaXplX25lZWRlZCgpIGNvbnN0Cit7IHJldHVybiB0cmlnZ2VyX3BvbGljeV9iYXNlOjppc19yZXNpemVfbmVlZGVkKCk7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3R5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF9uZXdfc2l6ZShzaXplX3R5cGUgc2l6ZSwgc2l6ZV90eXBlIG51bV91c2VkX2UpIGNvbnN0Cit7CisgIGlmICh0cmlnZ2VyX3BvbGljeV9iYXNlOjppc19ncm93X25lZWRlZChzaXplLCBudW1fdXNlZF9lKSkKKyAgICByZXR1cm4gc2l6ZV9wb2xpY3lfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoc2l6ZSk7CisgIHJldHVybiBzaXplX3BvbGljeV9iYXNlOjpnZXRfbmVhcmVzdF9zbWFsbGVyX3NpemUoc2l6ZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citub3RpZnlfcmVzaXplZChzaXplX3R5cGUgbmV3X3NpemUpCit7CisgIHRyaWdnZXJfcG9saWN5X2Jhc2U6Om5vdGlmeV9yZXNpemVkKG5ld19zaXplKTsKKyAgbV9zaXplID0gbmV3X3NpemU7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X2FjdHVhbF9zaXplKCkgY29uc3QKK3sKKyAgUEJfRFNfU1RBVElDX0FTU0VSVChhY2Nlc3MsIGV4dGVybmFsX3NpemVfYWNjZXNzKTsKKyAgcmV0dXJuIG1fc2l6ZTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3Jlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUpCit7CisgIFBCX0RTX1NUQVRJQ19BU1NFUlQoYWNjZXNzLCBleHRlcm5hbF9zaXplX2FjY2Vzcyk7CisgIHNpemVfdHlwZSBhY3R1YWxfc2l6ZSA9IHNpemVfcG9saWN5X2Jhc2U6OmdldF9uZWFyZXN0X2xhcmdlcl9zaXplKDEpOworICB3aGlsZSAoYWN0dWFsX3NpemUgPCBuZXdfc2l6ZSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgcG90ID0gc2l6ZV9wb2xpY3lfYmFzZTo6Z2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoYWN0dWFsX3NpemUpOworCisgICAgICBpZiAocG90ID09IGFjdHVhbF9zaXplICYmIHBvdCA8IG5ld19zaXplKQorCV9fdGhyb3dfcmVzaXplX2Vycm9yKCk7CisgICAgICBhY3R1YWxfc2l6ZSA9IHBvdDsKKyAgICB9CisKKyAgaWYgKGFjdHVhbF9zaXplID4gMCkKKyAgICAtLWFjdHVhbF9zaXplOworCisgIGNvbnN0IHNpemVfdHlwZSBvbGRfc2l6ZSA9IG1fc2l6ZTsKKyAgX190cnkKKyAgICB7CisgICAgICBkb19yZXNpemUoYWN0dWFsX3NpemUgLSAxKTsKKyAgICB9CisgIF9fY2F0Y2goaW5zZXJ0X2Vycm9yJiApCisgICAgeworICAgICAgbV9zaXplID0gb2xkX3NpemU7CisgICAgICBfX3Rocm93X3Jlc2l6ZV9lcnJvcigpOworICAgIH0KKyAgX19jYXRjaCguLi4pCisgICAgeworICAgICAgbV9zaXplID0gb2xkX3NpemU7CisgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citkb19yZXNpemUoc2l6ZV90eXBlKQoreworICAvLyBEbyBub3RoaW5nCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitUcmlnZ2VyX1BvbGljeSYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfdHJpZ2dlcl9wb2xpY3koKQoreyByZXR1cm4gKnRoaXM7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2NvbnN0IFRyaWdnZXJfUG9saWN5JiAKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2dldF90cmlnZ2VyX3BvbGljeSgpIGNvbnN0Cit7IHJldHVybiAqdGhpczsgfQorCitQQl9EU19DTEFTU19UX0RFQworU2l6ZV9Qb2xpY3kmIAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZ2V0X3NpemVfcG9saWN5KCkKK3sgcmV0dXJuICp0aGlzOyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCitjb25zdCBTaXplX1BvbGljeSYgCitQQl9EU19DTEFTU19DX0RFQzo6CitnZXRfc2l6ZV9wb2xpY3koKSBjb25zdAoreyByZXR1cm4gKnRoaXM7IH0KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3Jlc2l6ZV9wb2xpY3kuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3Jlc2l6ZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYTM4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9zYW1wbGVfcmVzaXplX3BvbGljeS5ocHAKQEAgLTAsMCArMSwxMjUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc2FtcGxlX3Jlc2l6ZV9wb2xpY3kuaHBwCisgKiBDb250YWlucyBhIHNhbXBsZSByZXNpemUgcG9saWN5IGZvciBoYXNoIHRhYmxlcy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NBTVBMRV9SRVNJWkVfUE9MSUNZX0hQUAorI2RlZmluZSBQQl9EU19TQU1QTEVfUkVTSVpFX1BPTElDWV9IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLy8vIEEgc2FtcGxlIHJlc2l6ZSBwb2xpY3kuCisgIGNsYXNzIHNhbXBsZV9yZXNpemVfcG9saWN5CisgIHsKKyAgcHVibGljOgorICAgIC8vLyBTaXplIHR5cGUuCisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBzaXplX3R5cGU7CisKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBzYW1wbGVfcmVzaXplX3BvbGljeSgpOworCisgICAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgICAgc2FtcGxlX3JhbmdlX2hhc2hpbmcoY29uc3Qgc2FtcGxlX3Jlc2l6ZV9wb2xpY3kmIG90aGVyKTsKKworICAgIC8vLyBTd2FwcyBjb250ZW50LgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChzYW1wbGVfcmVzaXplX3BvbGljeSYgb3RoZXIpOworCisgIHByb3RlY3RlZDoKKyAgICAvLy8gTm90aWZpZXMgYSBzZWFyY2ggc3RhcnRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICAvLy8gTm90aWZpZXMgYSBzZWFyY2ggZW5jb3VudGVyZWQgYSBjb2xsaXNpb24uCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCisgICAgLy8vIE5vdGlmaWVzIGEgc2VhcmNoIHN0YXJ0ZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZmluZF9zZWFyY2hfc3RhcnQoKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmNvdW50ZXJlZCBhIGNvbGxpc2lvbi4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9lbmQoKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBzdGFydGVkLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOworCisgICAgLy8vIE5vdGlmaWVzIGEgc2VhcmNoIGVuY291bnRlcmVkIGEgY29sbGlzaW9uLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisKKyAgICAvLy8gTm90aWZpZXMgYW4gZWxlbWVudCB3YXMgaW5zZXJ0ZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0ZWQoc2l6ZV90eXBlIG51bV9lKTsKKworICAgIC8vLyBOb3RpZmllcyBhbiBlbGVtZW50IHdhcyBlcmFzZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZXJhc2VkKHNpemVfdHlwZSBudW1fZSk7CisKKyAgICAvLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyBjbGVhcmVkLgorICAgIHZvaWQKKyAgICBub3RpZnlfY2xlYXJlZCgpOworCisgICAgLy8vIE5vdGlmaWVzIHRoZSB0YWJsZSB3YXMgcmVzaXplZCB0byBuZXdfc2l6ZS4KKyAgICB2b2lkCisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgIC8vLyBRdWVyaWVzIHdoZXRoZXIgYSByZXNpemUgaXMgbmVlZGVkLgorICAgIGlubGluZSBib29sCisgICAgaXNfcmVzaXplX25lZWRlZCgpIGNvbnN0OworCisgICAgLy8vIFF1ZXJpZXMgd2hhdCB0aGUgbmV3IHNpemUgc2hvdWxkIGJlLgorICAgIHNpemVfdHlwZQorICAgIGdldF9uZXdfc2l6ZShzaXplX3R5cGUgc2l6ZSwgc2l6ZV90eXBlIG51bV91c2VkX2UpIGNvbnN0OworICB9OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9zYW1wbGVfcmVzaXplX3RyaWdnZXIuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3Jlc2l6ZV90cmlnZ2VyLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQwOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3Jlc2l6ZV90cmlnZ2VyLmhwcApAQCAtMCwwICsxLDEzNiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzYW1wbGVfcmVzaXplX3RyaWdnZXIuaHBwCisgKiBDb250YWlucyBhIHNhbXBsZSByZXNpemUgdHJpZ2dlciBwb2xpY3kgY2xhc3MuCisgKi8KKworI2lmbmRlZiBQQl9EU19TQU1QTEVfUkVTSVpFX1RSSUdHRVJfSFBQCisjZGVmaW5lIFBCX0RTX1NBTVBMRV9SRVNJWkVfVFJJR0dFUl9IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLy8vIEEgc2FtcGxlIHJlc2l6ZSB0cmlnZ2VyIHBvbGljeS4KKyAgY2xhc3Mgc2FtcGxlX3Jlc2l6ZV90cmlnZ2VyCisgIHsKKyAgcHVibGljOgorICAgIC8vLyBTaXplIHR5cGUuCisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBzaXplX3R5cGU7CisKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBzYW1wbGVfcmVzaXplX3RyaWdnZXIoKTsKKworICAgIC8vLyBDb3B5IGNvbnN0cnVjdG9yLgorICAgIHNhbXBsZV9yYW5nZV9oYXNoaW5nKGNvbnN0IHNhbXBsZV9yZXNpemVfdHJpZ2dlciYpOworCisgICAgLy8vIFN3YXBzIGNvbnRlbnQuCisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHNhbXBsZV9yZXNpemVfdHJpZ2dlciYpOworCisgIHByb3RlY3RlZDoKKyAgICAvLy8gTm90aWZpZXMgYSBzZWFyY2ggc3RhcnRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICAvLy8gTm90aWZpZXMgYSBzZWFyY2ggZW5jb3VudGVyZWQgYSBjb2xsaXNpb24uCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCisgICAgLy8vIE5vdGlmaWVzIGEgc2VhcmNoIHN0YXJ0ZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZmluZF9zZWFyY2hfc3RhcnQoKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmNvdW50ZXJlZCBhIGNvbGxpc2lvbi4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9lbmQoKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBzdGFydGVkLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOworCisgICAgLy8vIE5vdGlmaWVzIGEgc2VhcmNoIGVuY291bnRlcmVkIGEgY29sbGlzaW9uLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisKKyAgICAvLy8gTm90aWZpZXMgYW4gZWxlbWVudCB3YXMgaW5zZXJ0ZWQuIHRoZSB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbgorICAgIC8vLyB0aGUgdGFibGUgaXMgbnVtX2VudHJpZXMuCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0ZWQoc2l6ZV90eXBlIG51bV9lbnRyaWVzKTsKKworICAgIC8vLyBOb3RpZmllcyBhbiBlbGVtZW50IHdhcyBlcmFzZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZXJhc2VkKHNpemVfdHlwZSBudW1fZW50cmllcyk7CisKKyAgICAvLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyBjbGVhcmVkLgorICAgIHZvaWQKKyAgICBub3RpZnlfY2xlYXJlZCgpOworCisgICAgLy8vIE5vdGlmaWVzIHRoZSB0YWJsZSB3YXMgcmVzaXplZCBhcyBhIHJlc3VsdCBvZiB0aGlzIG9iamVjdCdzCisgICAgLy8vIHNpZ25pZnlpbmcgdGhhdCBhIHJlc2l6ZSBpcyBuZWVkZWQuCisgICAgdm9pZAorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBuZXdfc2l6ZSk7CisKKyAgICAvLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyByZXNpemVkIGV4dGVybmFsbHkuCisgICAgdm9pZAorICAgIG5vdGlmeV9leHRlcm5hbGx5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgIC8vLyBRdWVyaWVzIHdoZXRoZXIgYSByZXNpemUgaXMgbmVlZGVkLgorICAgIGlubGluZSBib29sCisgICAgaXNfcmVzaXplX25lZWRlZCgpIGNvbnN0OworCisgICAgLy8vIFF1ZXJpZXMgd2hldGhlciBhIGdyb3cgaXMgbmVlZGVkLgorICAgIGlubGluZSBib29sCisgICAgaXNfZ3Jvd19uZWVkZWQoc2l6ZV90eXBlIHNpemUsIHNpemVfdHlwZSBudW1fZW50cmllcykgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICAvLy8gUmVzaXplcyB0byBuZXdfc2l6ZS4KKyAgICB2aXJ0dWFsIHZvaWQKKyAgICBkb19yZXNpemUoc2l6ZV90eXBlKTsKKyAgfTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvc2FtcGxlX3NpemVfcG9saWN5LmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L3NhbXBsZV9zaXplX3BvbGljeS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3OGZiMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9yZXNpemVfcG9saWN5L3NhbXBsZV9zaXplX3BvbGljeS5ocHAKQEAgLTAsMCArMSw3MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzYW1wbGVfc2l6ZV9wb2xpY3kuaHBwCisgKiBDb250YWlucyBhIHNhbXBsZSBzaXplIHJlc2l6ZS1wb2xpY3kuCisgKi8KKworI2lmbmRlZiBQQl9EU19TQU1QTEVfU0laRV9QT0xJQ1lfSFBQCisjZGVmaW5lIFBCX0RTX1NBTVBMRV9TSVpFX1BPTElDWV9IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLy8vIEEgc2FtcGxlIHNpemUgcG9saWN5LgorICBjbGFzcyBzYW1wbGVfc2l6ZV9wb2xpY3kKKyAgeworICBwdWJsaWM6CisgICAgLy8vIFNpemUgdHlwZS4KKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90IHNpemVfdHlwZTsKKworICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgIHNhbXBsZV9zaXplX3BvbGljeSgpOworCisgICAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgICAgc2FtcGxlX3JhbmdlX2hhc2hpbmcoY29uc3Qgc2FtcGxlX3NpemVfcG9saWN5Jik7CisKKyAgICAvLy8gU3dhcHMgY29udGVudC4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoc2FtcGxlX3NpemVfcG9saWN5JiBvdGhlcik7CisKKyAgcHJvdGVjdGVkOgorICAgIC8vLyBHaXZlbiBhIF9fc2l6ZSBzaXplLCByZXR1cm5zIGEgX19zaXplIHRoYXQgaXMgbGFyZ2VyLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZShzaXplX3R5cGUgc2l6ZSkgY29uc3Q7CisKKyAgICAvLy8gR2l2ZW4gYSBfX3NpemUgc2l6ZSwgcmV0dXJucyBhIF9fc2l6ZSB0aGF0IGlzIHNtYWxsZXIuCisgICAgaW5saW5lIHNpemVfdHlwZQorICAgIGdldF9uZWFyZXN0X3NtYWxsZXJfc2l6ZShzaXplX3R5cGUgc2l6ZSkgY29uc3Q7CisgIH07Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTJkNDlkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNwbGF5X3RyZWVfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igc3BsYXlfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3RlbXBsYXRlPHR5cGVuYW1lIEl0Pgordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorY29weV9mcm9tX3JhbmdlKEl0IGZpcnN0X2l0LCBJdCBsYXN0X2l0KQoreworICB3aGlsZSAoZmlyc3RfaXQgIT0gbGFzdF9pdCkKKyAgICBpbnNlcnQoKihmaXJzdF9pdCsrKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19TX1RSRUVfTkFNRSgpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6CitQQl9EU19TX1RSRUVfTkFNRShjb25zdCBDbXBfRm4mIHJfY21wX2ZuKSA6CisgIGJhc2VfdHlwZShyX2NtcF9mbikKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX1NfVFJFRV9OQU1FKGNvbnN0IENtcF9GbiYgcl9jbXBfZm4sIGNvbnN0IG5vZGVfdXBkYXRlJiByX25vZGVfdXBkYXRlKSA6CisgIGJhc2VfdHlwZShyX2NtcF9mbiwgcl9ub2RlX3VwZGF0ZSkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK1BCX0RTX1NfVFJFRV9OQU1FKGNvbnN0IFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikgOgorICBiYXNlX3R5cGUob3RoZXIpCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKyAgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luaXRpYWxpemUoKQoreyBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3NwZWNpYWwgPSB0cnVlOyB9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZGVidWdfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZGVidWdfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwNzdmMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9kZWJ1Z19mbl9pbXBzLmhwcApAQCAtMCwwICsxLDc1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNwbGF5X3RyZWVfL2RlYnVnX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igc3BsYXlfdHJlZV8uCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBiYXNlX3R5cGU6OmFzc2VydF92YWxpZChfX2ZpbGUsIF9fbGluZSk7CisgIGNvbnN0IG5vZGVfcG9pbnRlciBwX2hlYWQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICBhc3NlcnRfc3BlY2lhbF9pbXAocF9oZWFkLCBfX2ZpbGUsIF9fbGluZSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfc3BlY2lhbF9pbXAoY29uc3Qgbm9kZV9wb2ludGVyIHBfbmQsCisJCSAgIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm47CisKKyAgaWYgKHBfbmQgPT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICB7CisgICAgICBQQl9EU19ERUJVR19WRVJJRlkocF9uZC0+bV9zcGVjaWFsKTsKKyAgICAgIGFzc2VydF9zcGVjaWFsX2ltcChwX25kLT5tX3BfcGFyZW50LCBfX2ZpbGUsIF9fbGluZSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIFBCX0RTX0RFQlVHX1ZFUklGWSghcF9uZC0+bV9zcGVjaWFsKTsKKyAgYXNzZXJ0X3NwZWNpYWxfaW1wKHBfbmQtPm1fcF9sZWZ0LCBfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9zcGVjaWFsX2ltcChwX25kLT5tX3BfcmlnaHQsIF9fZmlsZSwgX19saW5lKTsKK30KKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZXJhc2VfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZXJhc2VfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwMWE2MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDE1NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxheV90cmVlXy9lcmFzZV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHNwbGF5X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgYm9vbAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2Uoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgcG9pbnRfaXRlcmF0b3IgaXQgPSBmaW5kKHJfa2V5KTsKKyAgaWYgKGl0ID09IGJhc2VfdHlwZTo6ZW5kKCkpCisgICAgcmV0dXJuIGZhbHNlOworICBlcmFzZShpdCk7CisgIHJldHVybiB0cnVlOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UoaXRlcmF0b3IgaXQpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBpZiAoaXQgPT0gYmFzZV90eXBlOjplbmQoKSkKKyAgICByZXR1cm4gaXQ7CisgIGl0ZXJhdG9yIHJldF9pdCA9IGl0OworICArK3JldF9pdDsKKyAgZXJhc2Vfbm9kZShpdC5tX3BfbmQpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIHJldF9pdDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6cmV2ZXJzZV9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2UocmV2ZXJzZV9pdGVyYXRvciBpdCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIGlmIChpdC5tX3BfbmQgPT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICByZXR1cm4gKGl0KTsKKyAgcmV2ZXJzZV9pdGVyYXRvciByZXRfaXQgPSBpdDsKKyAgKytyZXRfaXQ7CisgIGVyYXNlX25vZGUoaXQubV9wX25kKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiByZXRfaXQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgoraW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX2lmKFByZWQgcHJlZCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHNpemVfdHlwZSBudW1fZXJzZCA9IDA7CisgIGl0ZXJhdG9yIGl0ID0gYmFzZV90eXBlOjpiZWdpbigpOworICB3aGlsZSAoaXQgIT0gYmFzZV90eXBlOjplbmQoKSkKKyAgICB7CisgICAgICBpZiAocHJlZCgqaXQpKQorICAgICAgICB7CisJICArK251bV9lcnNkOworCSAgaXQgPSBlcmFzZShpdCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwkrK2l0OworICAgIH0KKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHJldHVybiBudW1fZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlX25vZGUobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kICE9IDApOworICBzcGxheShwX25kKTsKKworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQgPT0gdGhpcy0+bV9wX2hlYWQtPm1fcF9wYXJlbnQpOworCisgIG5vZGVfcG9pbnRlciBwX2wgPSBwX25kLT5tX3BfbGVmdDsKKyAgbm9kZV9wb2ludGVyIHBfciA9IHBfbmQtPm1fcF9yaWdodDsKKworICBiYXNlX3R5cGU6OnVwZGF0ZV9taW5fbWF4X2Zvcl9lcmFzZWRfbm9kZShwX25kKTsKKyAgYmFzZV90eXBlOjphY3R1YWxfZXJhc2Vfbm9kZShwX25kKTsKKyAgaWYgKHBfciA9PSAwKQorICAgIHsKKyAgICAgIGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX2w7CisgICAgICBpZiAocF9sICE9IDApCisJcF9sLT5tX3BfcGFyZW50ID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKyAgICAgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICAgICAgcmV0dXJuOworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF90YXJnZXRfciA9IGxlZnRtb3N0KHBfcik7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3RhcmdldF9yICE9IDApOworICBwX3ItPm1fcF9wYXJlbnQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF9yOworICBzcGxheShwX3RhcmdldF9yKTsKKworICBfR0xJQkNYWF9ERUJVR19PTkxZKHBfdGFyZ2V0X3ItPm1fcF9sZWZ0ID0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3RhcmdldF9yLT5tX3BfcGFyZW50ID09IHRoaXMtPm1fcF9oZWFkKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHRoaXMtPm1fcF9oZWFkLT5tX3BfcGFyZW50ID09IHBfdGFyZ2V0X3IpOworCisgIHBfdGFyZ2V0X3ItPm1fcF9sZWZ0ID0gcF9sOworICBpZiAocF9sICE9IDApCisgICAgcF9sLT5tX3BfcGFyZW50ID0gcF90YXJnZXRfcjsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHRoaXMtPmFwcGx5X3VwZGF0ZShwX3RhcmdldF9yLCAobm9kZV91cGRhdGUqKXRoaXMpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2xlZnRtb3N0KG5vZGVfcG9pbnRlciBwX25kKQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSAwKTsKKyAgd2hpbGUgKHBfbmQtPm1fcF9sZWZ0ICE9IDApCisgICAgcF9uZCA9IHBfbmQtPm1fcF9sZWZ0OworICByZXR1cm4gcF9uZDsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9maW5kX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2ZpbmRfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0NDU0MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9maW5kX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMTAwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNwbGF5X3RyZWVfL2ZpbmRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBzcGxheV90cmVlXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQoreworICBub2RlX3BvaW50ZXIgcF9mb3VuZCA9IGZpbmRfaW1wKHJfa2V5KTsKKyAgaWYgKHBfZm91bmQgIT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICBzcGxheShwX2ZvdW5kKTsKKyAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfZm91bmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9jb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAoreworICBjb25zdCBub2RlX3BvaW50ZXIgcF9mb3VuZCA9IGZpbmRfaW1wKHJfa2V5KTsKKyAgaWYgKHBfZm91bmQgIT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICBjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKiA+KHRoaXMpLT5zcGxheShwX2ZvdW5kKTsKKyAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfZm91bmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpub2RlX3BvaW50ZXIKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfaW1wKGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXkpCit7CisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjpzdHJ1Y3R1cmVfb25seV9hc3NlcnRfdmFsaWQoX19GSUxFX18sCisJCQkJCQkJICAgICBfX0xJTkVfXyk7KQorICBub2RlX3BvaW50ZXIgcF9uZCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQ7CisgIHdoaWxlIChwX25kICE9IDApCisgICAgaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkoUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpLCByX2tleSkpCisgICAgICB7CisJaWYgKCFDbXBfRm46Om9wZXJhdG9yKCkocl9rZXksIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSkpCisJICByZXR1cm4gcF9uZDsKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKyAgcmV0dXJuIGJhc2VfdHlwZTo6bV9wX2hlYWQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgY29uc3QgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfcG9pbnRlcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZmluZF9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIG5vZGVfcG9pbnRlciBwX25kID0gYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudDsKKyAgd2hpbGUgKHBfbmQgIT0gMCkKKyAgICBpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocF9uZC0+bV92YWx1ZSksIHJfa2V5KSkKKyAgICAgIHsKKwlpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShyX2tleSwgUEJfRFNfVjJGKHBfbmQtPm1fdmFsdWUpKSkKKwkgIHJldHVybiBwX25kOworCXBfbmQgPSBwX25kLT5tX3BfbGVmdDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworICByZXR1cm4gYmFzZV90eXBlOjptX3BfaGVhZDsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9pbmZvX2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2luZm9fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMmVlZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9pbmZvX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsMzkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3BsYXlfdHJlZV8vaW5mb19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24uCisgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9pbnNlcnRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjMwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsOTQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3BsYXlfdHJlZV8vaW5zZXJ0X2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3Igc3BsYXlfdHJlZV8uCisgKi8KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSBzdGQ6OnBhaXI8dHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yLCBib29sPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgoraW5zZXJ0KGNvbnN0X3JlZmVyZW5jZSByX3ZhbHVlKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPiBpbnNfcGFpciA9IGluc2VydF9sZWFmX2ltcChyX3ZhbHVlKTsKKyAgaW5zX3BhaXIuZmlyc3QubV9wX25kLT5tX3NwZWNpYWwgPSBmYWxzZTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIHNwbGF5KGluc19wYWlyLmZpcnN0Lm1fcF9uZCk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZXR1cm4gaW5zX3BhaXI7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgc3RkOjpwYWlyPHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpwb2ludF9pdGVyYXRvciwgYm9vbD4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK2luc2VydF9sZWFmX2ltcChjb25zdF9yZWZlcmVuY2Ugcl92YWx1ZSkKK3sKKyAgX0dMSUJDWFhfREVCVUdfT05MWShiYXNlX3R5cGU6OnN0cnVjdHVyZV9vbmx5X2Fzc2VydF92YWxpZChfX0ZJTEVfXywKKwkJCQkJCQkgICAgIF9fTElORV9fKTspCisgIGlmIChiYXNlX3R5cGU6Om1fc2l6ZSA9PSAwKQorICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihiYXNlX3R5cGU6Omluc2VydF9pbXBfZW1wdHkocl92YWx1ZSksIHRydWUpOworCisgIG5vZGVfcG9pbnRlciBwX25kID0gYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudDsKKyAgbm9kZV9wb2ludGVyIHBfcG90ID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKworICB3aGlsZSAocF9uZCAhPSAwKQorICAgIGlmICghQ21wX0ZuOjpvcGVyYXRvcigpKFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSwgUEJfRFNfVjJGKHJfdmFsdWUpKSkKKyAgICAgIHsKKwlpZiAoIUNtcF9Gbjo6b3BlcmF0b3IoKShQQl9EU19WMkYocl92YWx1ZSksIFBCX0RTX1YyRihwX25kLT5tX3ZhbHVlKSkpCisJICB7CisJICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihwb2ludF9pdGVyYXRvcihwX25kKSwgZmFsc2UpOworCSAgfQorCXBfcG90ID0gcF9uZDsKKwlwX25kID0gcF9uZC0+bV9wX2xlZnQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcF9uZCA9IHBfbmQtPm1fcF9yaWdodDsKKworICBpZiAocF9wb3QgPT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoYmFzZV90eXBlOjppbnNlcnRfbGVhZl9uZXcocl92YWx1ZSwgYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3JpZ2h0LCBmYWxzZSksIHRydWUpOworCisgIFBCX0RTX0NIRUNLX0tFWV9ET0VTX05PVF9FWElTVChQQl9EU19WMkYocl92YWx1ZSkpCisKKyAgcF9uZCA9IHBfcG90LT5tX3BfbGVmdDsKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm4gKHN0ZDo6bWFrZV9wYWlyKGJhc2VfdHlwZTo6aW5zZXJ0X2xlYWZfbmV3KHJfdmFsdWUsIHBfcG90LCB0cnVlKSwgdHJ1ZSkpOworCisgIHdoaWxlIChwX25kLT5tX3BfcmlnaHQgIT0gMCkKKyAgICBwX25kID0gcF9uZC0+bV9wX3JpZ2h0OworCisgIHJldHVybiBzdGQ6Om1ha2VfcGFpcih0aGlzLT5pbnNlcnRfbGVhZl9uZXcocl92YWx1ZSwgcF9uZCwgZmFsc2UpLCB0cnVlKTsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9ub2RlLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9ub2RlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJlMzAwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL25vZGUuaHBwCkBAIC0wLDAgKzEsMTI2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHNwbGF5X3RyZWVfL25vZGUuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBzdHJ1Y3QgZm9yIHNwbGF5X3RyZWVfJ3Mgbm9kZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NQTEFZX1RSRUVfTk9ERV9IUFAKKyNkZWZpbmUgUEJfRFNfU1BMQVlfVFJFRV9OT0RFX0hQUAorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gTm9kZSBmb3Igc3BsYXkgdHJlZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCBjbGFzcyBNZXRhZGF0YSwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBzcGxheV90cmVlX25vZGVfCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgVmFsdWVfVHlwZSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBNZXRhZGF0YSBtZXRhZGF0YV90eXBlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIHNwbGF5X3RyZWVfbm9kZV88VmFsdWVfVHlwZSwgTWV0YWRhdGEsIF9BbGxvYz4gPjo6b3RoZXI6OnBvaW50ZXIKKyAgICAgIG5vZGVfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8bWV0YWRhdGFfdHlwZT46Om90aGVyOjpyZWZlcmVuY2UKKyAgICAgIG1ldGFkYXRhX3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZgorICAgICAgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8bWV0YWRhdGFfdHlwZT46Om90aGVyOjpjb25zdF9yZWZlcmVuY2UKKyAgICAgIG1ldGFkYXRhX2NvbnN0X3JlZmVyZW5jZTsKKworI2lmZGVmIFBCX0RTX0JJTl9TRUFSQ0hfVFJFRV9UUkFDRV8KKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlKCkgY29uc3QKKyAgICAgIHsgc3RkOjpjb3V0IDw8IFBCX0RTX1YyRihtX3ZhbHVlKSA8PCAiKCIgPDwgbV9tZXRhZGF0YSA8PCAiKSI7IH0KKyNlbmRpZgorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgc3BlY2lhbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBtX3NwZWNpYWw7IH0KKworICAgICAgaW5saW5lIG1ldGFkYXRhX2NvbnN0X3JlZmVyZW5jZQorICAgICAgZ2V0X21ldGFkYXRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KKworICAgICAgaW5saW5lIG1ldGFkYXRhX3JlZmVyZW5jZQorICAgICAgZ2V0X21ldGFkYXRhKCkKKyAgICAgIHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KKworICAgICAgdmFsdWVfdHlwZSBtX3ZhbHVlOworICAgICAgYm9vbCBtX3NwZWNpYWw7CisgICAgICBub2RlX3BvaW50ZXIgbV9wX2xlZnQ7CisgICAgICBub2RlX3BvaW50ZXIgbV9wX3JpZ2h0OworICAgICAgbm9kZV9wb2ludGVyIG1fcF9wYXJlbnQ7CisgICAgICBtZXRhZGF0YV90eXBlIG1fbWV0YWRhdGE7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3Qgc3BsYXlfdHJlZV9ub2RlXzxWYWx1ZV9UeXBlLCBudWxsX3R5cGUsIF9BbGxvYz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBWYWx1ZV9UeXBlIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIG51bGxfdHlwZSBtZXRhZGF0YV90eXBlOworCisgICAgICB0eXBlZGVmCisgICAgICB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDwKKyAgICAgIHNwbGF5X3RyZWVfbm9kZV88VmFsdWVfVHlwZSwgbnVsbF90eXBlLCBfQWxsb2M+ID46Om90aGVyOjpwb2ludGVyCisgICAgICBub2RlX3BvaW50ZXI7CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBzcGVjaWFsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1fc3BlY2lhbDsgfQorCisjaWZkZWYgUEJfRFNfQklOX1NFQVJDSF9UUkVFX1RSQUNFXworICAgICAgdm9pZAorICAgICAgdHJhY2UoKSBjb25zdAorICAgICAgeyBzdGQ6OmNvdXQgPDwgUEJfRFNfVjJGKG1fdmFsdWUpOyB9CisjZW5kaWYgCisKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfbGVmdDsKKyAgICAgIG5vZGVfcG9pbnRlciBtX3BfcmlnaHQ7CisgICAgICBub2RlX3BvaW50ZXIgbV9wX3BhcmVudDsKKyAgICAgIHZhbHVlX3R5cGUgbV92YWx1ZTsKKyAgICAgIGJvb2wgbV9zcGVjaWFsOworICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsYXlfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsYXlfZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzZDNjMgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9zcGxheV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDI4MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxheV90cmVlXy9zcGxheV9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHNwbGF5X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitzcGxheShub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgd2hpbGUgKHBfbmQtPm1fcF9wYXJlbnQgIT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICB7CisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyAgICAgIHsKKwlub2RlX3BvaW50ZXIgcF9oZWFkID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKwlhc3NlcnRfc3BlY2lhbF9pbXAocF9oZWFkLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIFBCX0RTX0FTU0VSVF9CQVNFX05PREVfQ09OU0lTVEVOVChwX25kKQorCisgICAgICBpZiAocF9uZC0+bV9wX3BhcmVudC0+bV9wX3BhcmVudCA9PSBiYXNlX3R5cGU6Om1fcF9oZWFkKQorCXsKKwkgIGJhc2VfdHlwZTo6cm90YXRlX3BhcmVudChwX25kKTsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kID09IHRoaXMtPm1fcF9oZWFkLT5tX3BfcGFyZW50KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgY29uc3Qgbm9kZV9wb2ludGVyIHBfcGFyZW50ID0gcF9uZC0+bV9wX3BhcmVudDsKKwkgIGNvbnN0IG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50ID0gcF9wYXJlbnQtPm1fcF9wYXJlbnQ7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworCSAgY29uc3Qgc2l6ZV90eXBlIHRvdGFsID0KKwkgICAgYmFzZV90eXBlOjpyZWN1cnNpdmVfY291bnQocF9ncmFuZHBhcmVudCk7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQodG90YWwgPj0gMyk7CisjZW5kaWYKKworCSAgaWYgKHBfcGFyZW50LT5tX3BfbGVmdCA9PSBwX25kICYmCisJICAgICAgcF9ncmFuZHBhcmVudC0+bV9wX3JpZ2h0ID09IHBfcGFyZW50KQorCSAgICBzcGxheV96aWdfemFnX2xlZnQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworCSAgZWxzZSBpZiAocF9wYXJlbnQtPm1fcF9yaWdodCA9PSBwX25kICYmCisJCSAgIHBfZ3JhbmRwYXJlbnQtPm1fcF9sZWZ0ID09IHBfcGFyZW50KQorCSAgICBzcGxheV96aWdfemFnX3JpZ2h0KHBfbmQsIHBfcGFyZW50LCBwX2dyYW5kcGFyZW50KTsKKwkgIGVsc2UgaWYgKHBfcGFyZW50LT5tX3BfbGVmdCA9PSBwX25kICYmCisJCSAgIHBfZ3JhbmRwYXJlbnQtPm1fcF9sZWZ0ID09IHBfcGFyZW50KQorCSAgICBzcGxheV96aWdfemlnX2xlZnQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworCSAgZWxzZQorCSAgICBzcGxheV96aWdfemlnX3JpZ2h0KHBfbmQsIHBfcGFyZW50LCBwX2dyYW5kcGFyZW50KTsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCh0b3RhbCA9PXRoaXMtPnJlY3Vyc2l2ZV9jb3VudChwX25kKSk7CisJfQorCisgICAgICBQQl9EU19BU1NFUlRfQkFTRV9OT0RFX0NPTlNJU1RFTlQocF9uZCkKKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsYXlfemlnX3phZ19sZWZ0KG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9wYXJlbnQsCisJCSAgIG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQgPT0gcF9uZC0+bV9wX3BhcmVudCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2dyYW5kcGFyZW50ID09IHBfcGFyZW50LT5tX3BfcGFyZW50KTsKKworICBQQl9EU19BU1NFUlRfQkFTRV9OT0RFX0NPTlNJU1RFTlQocF9ncmFuZHBhcmVudCkKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQtPm1fcF9sZWZ0ID09IHBfbmQgJiYKKwkJCXBfZ3JhbmRwYXJlbnQtPm1fcF9yaWdodCA9PSBwX3BhcmVudCk7CisKKyAgc3BsYXlfenpfc3RhcnQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworCisgIG5vZGVfcG9pbnRlciBwX2IgPSBwX25kLT5tX3BfcmlnaHQ7CisgIG5vZGVfcG9pbnRlciBwX2MgPSBwX25kLT5tX3BfbGVmdDsKKworICBwX25kLT5tX3BfcmlnaHQgPSBwX3BhcmVudDsKKyAgcF9wYXJlbnQtPm1fcF9wYXJlbnQgPSBwX25kOworCisgIHBfbmQtPm1fcF9sZWZ0ID0gcF9ncmFuZHBhcmVudDsKKyAgcF9ncmFuZHBhcmVudC0+bV9wX3BhcmVudCA9IHBfbmQ7CisKKyAgcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF9iOworICBpZiAocF9iICE9IDApCisgICAgcF9iLT5tX3BfcGFyZW50ID0gcF9wYXJlbnQ7CisKKyAgcF9ncmFuZHBhcmVudC0+bV9wX3JpZ2h0ID0gcF9jOworICBpZiAocF9jICE9IDApCisgICAgcF9jLT5tX3BfcGFyZW50ID0gcF9ncmFuZHBhcmVudDsKKworICBzcGxheV96el9lbmQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGF5X3ppZ196YWdfcmlnaHQobm9kZV9wb2ludGVyIHBfbmQsIG5vZGVfcG9pbnRlciBwX3BhcmVudCwKKwkJICAgIG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQgPT0gcF9uZC0+bV9wX3BhcmVudCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2dyYW5kcGFyZW50ID09IHBfcGFyZW50LT5tX3BfcGFyZW50KTsKKworICBQQl9EU19BU1NFUlRfQkFTRV9OT0RFX0NPTlNJU1RFTlQocF9ncmFuZHBhcmVudCkKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQtPm1fcF9yaWdodCA9PSBwX25kICYmCisJICAJCXBfZ3JhbmRwYXJlbnQtPm1fcF9sZWZ0ID09IHBfcGFyZW50KTsKKworICBzcGxheV96el9zdGFydChwX25kLCBwX3BhcmVudCwgcF9ncmFuZHBhcmVudCk7CisKKyAgbm9kZV9wb2ludGVyIHBfYiA9IHBfbmQtPm1fcF9sZWZ0OworICBub2RlX3BvaW50ZXIgcF9jID0gcF9uZC0+bV9wX3JpZ2h0OworCisgIHBfbmQtPm1fcF9sZWZ0ID0gcF9wYXJlbnQ7CisgIHBfcGFyZW50LT5tX3BfcGFyZW50ID0gcF9uZDsKKworICBwX25kLT5tX3BfcmlnaHQgPSBwX2dyYW5kcGFyZW50OworICBwX2dyYW5kcGFyZW50LT5tX3BfcGFyZW50ID0gcF9uZDsKKworICBwX3BhcmVudC0+bV9wX3JpZ2h0ID0gcF9iOworICBpZiAocF9iICE9IDApCisgICAgcF9iLT5tX3BfcGFyZW50ID0gcF9wYXJlbnQ7CisKKyAgcF9ncmFuZHBhcmVudC0+bV9wX2xlZnQgPSBwX2M7CisgIGlmIChwX2MgIT0gMCkKKyAgICBwX2MtPm1fcF9wYXJlbnQgPSBwX2dyYW5kcGFyZW50OworCisgIHNwbGF5X3p6X2VuZChwX25kLCBwX3BhcmVudCwgcF9ncmFuZHBhcmVudCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsYXlfemlnX3ppZ19sZWZ0KG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9wYXJlbnQsCisJCSAgIG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQgPT0gcF9uZC0+bV9wX3BhcmVudCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2dyYW5kcGFyZW50ID09IHBfcGFyZW50LT5tX3BfcGFyZW50KTsKKworICBQQl9EU19BU1NFUlRfQkFTRV9OT0RFX0NPTlNJU1RFTlQocF9ncmFuZHBhcmVudCkKKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQtPm1fcF9sZWZ0ID09IHBfbmQgJiYKKwkJICAgICBwX25kLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50LT5tX3BfbGVmdCA9PSBwX25kLT5tX3BfcGFyZW50KTsKKworICBzcGxheV96el9zdGFydChwX25kLCBwX3BhcmVudCwgcF9ncmFuZHBhcmVudCk7CisKKyAgbm9kZV9wb2ludGVyIHBfYiA9IHBfbmQtPm1fcF9yaWdodDsKKyAgbm9kZV9wb2ludGVyIHBfYyA9IHBfcGFyZW50LT5tX3BfcmlnaHQ7CisKKyAgcF9uZC0+bV9wX3JpZ2h0ID0gcF9wYXJlbnQ7CisgIHBfcGFyZW50LT5tX3BfcGFyZW50ID0gcF9uZDsKKworICBwX3BhcmVudC0+bV9wX3JpZ2h0ID0gcF9ncmFuZHBhcmVudDsKKyAgcF9ncmFuZHBhcmVudC0+bV9wX3BhcmVudCA9IHBfcGFyZW50OworCisgIHBfcGFyZW50LT5tX3BfbGVmdCA9IHBfYjsKKyAgaWYgKHBfYiAhPSAwKQorICAgIHBfYi0+bV9wX3BhcmVudCA9IHBfcGFyZW50OworCisgIHBfZ3JhbmRwYXJlbnQtPm1fcF9sZWZ0ID0gcF9jOworICBpZiAocF9jICE9IDApCisgICAgcF9jLT5tX3BfcGFyZW50ID0gcF9ncmFuZHBhcmVudDsKKworICBzcGxheV96el9lbmQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGF5X3ppZ196aWdfcmlnaHQobm9kZV9wb2ludGVyIHBfbmQsIG5vZGVfcG9pbnRlciBwX3BhcmVudCwKKwkJICAgIG5vZGVfcG9pbnRlciBwX2dyYW5kcGFyZW50KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQgPT0gcF9uZC0+bV9wX3BhcmVudCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2dyYW5kcGFyZW50ID09IHBfcGFyZW50LT5tX3BfcGFyZW50KTsKKyAgUEJfRFNfQVNTRVJUX0JBU0VfTk9ERV9DT05TSVNURU5UKHBfZ3JhbmRwYXJlbnQpCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3BhcmVudC0+bV9wX3JpZ2h0ID09IHBfbmQgJiYKKwkJICBwX25kLT5tX3BfcGFyZW50LT5tX3BfcGFyZW50LT5tX3BfcmlnaHQgPT0gcF9uZC0+bV9wX3BhcmVudCk7CisKKyAgc3BsYXlfenpfc3RhcnQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworCisgIG5vZGVfcG9pbnRlciBwX2IgPSBwX25kLT5tX3BfbGVmdDsKKyAgbm9kZV9wb2ludGVyIHBfYyA9IHBfcGFyZW50LT5tX3BfbGVmdDsKKworICBwX25kLT5tX3BfbGVmdCA9IHBfcGFyZW50OworICBwX3BhcmVudC0+bV9wX3BhcmVudCA9IHBfbmQ7CisKKyAgcF9wYXJlbnQtPm1fcF9sZWZ0ID0gcF9ncmFuZHBhcmVudDsKKyAgcF9ncmFuZHBhcmVudC0+bV9wX3BhcmVudCA9IHBfcGFyZW50OworCisgIHBfcGFyZW50LT5tX3BfcmlnaHQgPSBwX2I7CisgIGlmIChwX2IgIT0gMCkKKyAgICBwX2ItPm1fcF9wYXJlbnQgPSBwX3BhcmVudDsKKworICBwX2dyYW5kcGFyZW50LT5tX3BfcmlnaHQgPSBwX2M7CisgIGlmIChwX2MgIT0gMCkKKyAgICBwX2MtPm1fcF9wYXJlbnQgPSBwX2dyYW5kcGFyZW50OworCisgIGJhc2VfdHlwZTo6dXBkYXRlX3RvX3RvcChwX2dyYW5kcGFyZW50LCAobm9kZV91cGRhdGUqKXRoaXMpOworICBzcGxheV96el9lbmQocF9uZCwgcF9wYXJlbnQsIHBfZ3JhbmRwYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGF5X3p6X3N0YXJ0KG5vZGVfcG9pbnRlciBwX25kLAorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisJICAgICAgIG5vZGVfcG9pbnRlciBwX3BhcmVudCwKKyNlbHNlCisJICAgICAgIG5vZGVfcG9pbnRlciAvKnBfcGFyZW50Ki8sCisjZW5kaWYKKwkgICAgICAgbm9kZV9wb2ludGVyIHBfZ3JhbmRwYXJlbnQpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX25kICE9IDApOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9wYXJlbnQgIT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX2dyYW5kcGFyZW50ICE9IDApOworCisgIGNvbnN0IGJvb2wgZ3JhbmRwYXJlbnRfaGVhZCA9IHBfZ3JhbmRwYXJlbnQtPm1fcF9wYXJlbnQgPT0gYmFzZV90eXBlOjptX3BfaGVhZDsKKworICBpZiAoZ3JhbmRwYXJlbnRfaGVhZCkKKyAgICB7CisgICAgICBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gYmFzZV90eXBlOjptX3BfaGVhZC0+bV9wX3BhcmVudDsKKyAgICAgIHBfbmQtPm1fcF9wYXJlbnQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkOworICAgICAgcmV0dXJuOworICAgIH0KKworICBub2RlX3BvaW50ZXIgcF9ncmVhdGdyYW5kcGFyZW50ID0gcF9ncmFuZHBhcmVudC0+bV9wX3BhcmVudDsKKworICBwX25kLT5tX3BfcGFyZW50ID0gcF9ncmVhdGdyYW5kcGFyZW50OworCisgIGlmIChwX2dyYW5kcGFyZW50ID09IHBfZ3JlYXRncmFuZHBhcmVudC0+bV9wX2xlZnQpCisgICAgcF9ncmVhdGdyYW5kcGFyZW50LT5tX3BfbGVmdCA9IHBfbmQ7CisgIGVsc2UKKyAgICBwX2dyZWF0Z3JhbmRwYXJlbnQtPm1fcF9yaWdodCA9IHBfbmQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorc3BsYXlfenpfZW5kKG5vZGVfcG9pbnRlciBwX25kLCBub2RlX3BvaW50ZXIgcF9wYXJlbnQsCisJICAgICBub2RlX3BvaW50ZXIgcF9ncmFuZHBhcmVudCkKK3sKKyAgaWYgKHBfbmQtPm1fcF9wYXJlbnQgPT0gYmFzZV90eXBlOjptX3BfaGVhZCkKKyAgICBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF9uZDsKKworICB0aGlzLT5hcHBseV91cGRhdGUocF9ncmFuZHBhcmVudCwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgdGhpcy0+YXBwbHlfdXBkYXRlKHBfcGFyZW50LCAobm9kZV91cGRhdGUqKXRoaXMpOworICB0aGlzLT5hcHBseV91cGRhdGUocF9uZCwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgUEJfRFNfQVNTRVJUX0JBU0VfTk9ERV9DT05TSVNURU5UKHBfbmQpCit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsYXlfdHJlZV8uaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGF5X3RyZWVfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzBkNmIwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGF5X3RyZWVfLmhwcApAQCAtMCwwICsxLDI3NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxheV90cmVlXy9zcGxheV90cmVlXy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBzcGxheSB0cmVlcy4KKyAqLworLyoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBhbiBpZGVhIGZyb20gdGhlIFNHSSBTVEwgKHVzaW5nIGEgQGEgaGVhZGVyIG5vZGUKKyAqICAgIHdoaWNoIGlzIG5lZWRlZCBmb3IgZWZmaWNpZW50IGl0ZXJhdGlvbikuIEZvbGxvd2luZyBpcyB0aGUgU0dJIFNUTAorICogICAgY29weXJpZ2h0LgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gICAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICAgIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gICAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKi8KKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKyMgZGVmaW5lIFBCX0RTX1NfVFJFRV9OQU1FIHNwbGF5X3RyZWVfbWFwCisjIGRlZmluZSBQQl9EU19TX1RSRUVfQkFTRV9OQU1FIGJpbl9zZWFyY2hfdHJlZV9tYXAKKyNlbmRpZgorCisjaWZkZWYgUEJfRFNfREFUQV9GQUxTRV9JTkRJQ0FUT1IKKyMgZGVmaW5lIFBCX0RTX1NfVFJFRV9OQU1FIHNwbGF5X3RyZWVfc2V0CisjIGRlZmluZSBQQl9EU19TX1RSRUVfQkFTRV9OQU1FIGJpbl9zZWFyY2hfdHJlZV9zZXQKKyNlbmRpZgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgQ21wX0ZuLCBcCisJICAgICB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgUEJfRFNfU19UUkVFX05BTUU8S2V5LCBNYXBwZWQsIENtcF9GbiwgTm9kZV9BbmRfSXRfVHJhaXRzLCBfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfU19UUkVFX0JBU0UgXAorICAgIFBCX0RTX1NfVFJFRV9CQVNFX05BTUU8S2V5LCBNYXBwZWQsIENtcF9GbiwgTm9kZV9BbmRfSXRfVHJhaXRzLCBfQWxsb2M+CisKKworICAgIC8qKgorICAgICAqICBAYnJpZWYgU3BsYXkgdHJlZS4KKyAgICAgKiAgQGluZ3JvdXAgYnJhbmNoLWRldGFpbAorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBDbXBfRm4sCisJICAgICB0eXBlbmFtZSBOb2RlX0FuZF9JdF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBQQl9EU19TX1RSRUVfTkFNRSA6IHB1YmxpYyBQQl9EU19TX1RSRUVfQkFTRQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19TX1RSRUVfQkFTRSAJCSAgICAgICAJIGJhc2VfdHlwZTsKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdHlwZWRlZiBiYXNlX3R5cGUgZGVidWdfYmFzZTsKKyNlbmRpZgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfcG9pbnRlciAJCSBub2RlX3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNwbGF5X3RyZWVfdGFnIAkJCQkgY29udGFpbmVyX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiBfQWxsb2MgCQkJCQkgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgCQkgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBDbXBfRm4gCQkJCQkgY21wX2ZuOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV90eXBlIAkJIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV9wb2ludGVyIAkJIGtleV9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV9jb25zdF9wb2ludGVyIAkga2V5X2NvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X3JlZmVyZW5jZSAJIGtleV9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X2NvbnN0X3JlZmVyZW5jZSAJIGtleV9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bWFwcGVkX3R5cGUgCSAJIG1hcHBlZF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om1hcHBlZF9wb2ludGVyIAkgbWFwcGVkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bWFwcGVkX2NvbnN0X3BvaW50ZXIgCSBtYXBwZWRfY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjptYXBwZWRfcmVmZXJlbmNlIAkgbWFwcGVkX3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjptYXBwZWRfY29uc3RfcmVmZXJlbmNlIG1hcHBlZF9jb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6dmFsdWVfdHlwZSAJCSB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OnBvaW50ZXIgCQkgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9wb2ludGVyIAkgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpyZWZlcmVuY2UgCSAJIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9yZWZlcmVuY2UgCSBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRfaXRlcmF0b3IgCSBwb2ludF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciAJIHBvaW50X2NvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Oml0ZXJhdG9yIAkJIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIAkgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciAJIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGVfdXBkYXRlIAkJIG5vZGVfdXBkYXRlOworCisgICAgICBQQl9EU19TX1RSRUVfTkFNRSgpOworCisgICAgICBQQl9EU19TX1RSRUVfTkFNRShjb25zdCBDbXBfRm4mKTsKKworICAgICAgUEJfRFNfU19UUkVFX05BTUUoY29uc3QgQ21wX0ZuJiwgY29uc3Qgbm9kZV91cGRhdGUmKTsKKworICAgICAgUEJfRFNfU19UUkVFX05BTUUoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICAgIHZvaWQKKyAgICAgIGNvcHlfZnJvbV9yYW5nZShJdCwgSXQpOworCisgICAgICB2b2lkCisgICAgICBpbml0aWFsaXplKCk7CisKKyAgICAgIGlubGluZSBzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+CisgICAgICBpbnNlcnQoY29uc3RfcmVmZXJlbmNlIHJfdmFsdWUpOworCisgICAgICBpbmxpbmUgbWFwcGVkX3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQorICAgICAgeworI2lmZGVmIFBCX0RTX0RBVEFfVFJVRV9JTkRJQ0FUT1IKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKwlzdGQ6OnBhaXI8cG9pbnRfaXRlcmF0b3IsIGJvb2w+IGluc19wYWlyID0KKwkgIGluc2VydF9sZWFmX2ltcCh2YWx1ZV90eXBlKHJfa2V5LCBtYXBwZWRfdHlwZSgpKSk7CisKKwlpbnNfcGFpci5maXJzdC5tX3BfbmQtPm1fc3BlY2lhbCA9IGZhbHNlOworCV9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfdmFsaWQoX19GSUxFX18sIF9fTElORV9fKSk7CisJc3BsYXkoaW5zX3BhaXIuZmlyc3QubV9wX25kKTsKKwlfR0xJQkNYWF9ERUJVR19PTkxZKGFzc2VydF92YWxpZChfX0ZJTEVfXywgX19MSU5FX18pOykKKwlyZXR1cm4gaW5zX3BhaXIuZmlyc3QubV9wX25kLT5tX3ZhbHVlLnNlY29uZDsKKyNlbHNlCisJaW5zZXJ0KHJfa2V5KTsKKwlyZXR1cm4gYmFzZV90eXBlOjpzX251bGxfdHlwZTsKKyNlbmRpZgorICAgICAgfQorCisgICAgICBpbmxpbmUgcG9pbnRfaXRlcmF0b3IKKyAgICAgIGZpbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBwb2ludF9jb25zdF9pdGVyYXRvcgorICAgICAgZmluZChrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIGVyYXNlKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIGl0KTsKKworICAgICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIGVyYXNlKHJldmVyc2VfaXRlcmF0b3IpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgorICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIHZvaWQKKyAgICAgIGpvaW4oUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3BsaXQoa2V5X2NvbnN0X3JlZmVyZW5jZSwgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgIHByaXZhdGU6CisgICAgICBpbmxpbmUgc3RkOjpwYWlyPHBvaW50X2l0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0X2xlYWZfaW1wKGNvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGZpbmRfaW1wKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgICBpbmxpbmUgY29uc3Qgbm9kZV9wb2ludGVyCisgICAgICBmaW5kX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlKSBjb25zdDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfdmFsaWQoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfc3BlY2lhbF9pbXAoY29uc3Qgbm9kZV9wb2ludGVyLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkgY29uc3Q7CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc3BsYXkobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHNwbGF5X3ppZ196YWdfbGVmdChub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHNwbGF5X3ppZ196YWdfcmlnaHQobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzcGxheV96aWdfemlnX2xlZnQobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzcGxheV96aWdfemlnX3JpZ2h0KG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc3BsYXlfenpfc3RhcnQobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzcGxheV96el9lbmQobm9kZV9wb2ludGVyLCBub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSBub2RlX3BvaW50ZXIKKyAgICAgIGxlZnRtb3N0KG5vZGVfcG9pbnRlcik7CisKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlX25vZGUobm9kZV9wb2ludGVyKTsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX0FTU0VSVF9CQVNFX05PREVfQ09OU0lTVEVOVChfTm9kZSkJCQlcCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KF9Ob2RlLAkJXAorCQkJCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7KQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL2luc2VydF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGF5X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZXJhc2VfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9maW5kX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vZGVidWdfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9zcGxheV90cmVlXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwPgorCisjdW5kZWYgUEJfRFNfQVNTRVJUX0JBU0VfTk9ERV9DT05TSVNURU5UCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX1NfVFJFRV9OQU1FCisjdW5kZWYgUEJfRFNfU19UUkVFX0JBU0VfTkFNRQorI3VuZGVmIFBCX0RTX1NfVFJFRV9CQVNFCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGE2NTMxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMTIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgc3BsYXlfdHJlZV8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHNwbGF5X3RyZWVfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogoram9pbihQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpCit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgIGlmIChiYXNlX3R5cGU6OmpvaW5fcHJlcChvdGhlcikgPT0gZmFsc2UpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm47CisgICAgfQorCisgIG5vZGVfcG9pbnRlciBwX3RhcmdldF9yID0gb3RoZXIubGVmdG1vc3Qob3RoZXIubV9wX2hlYWQpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF90YXJnZXRfciAhPSAwKTsKKyAgb3RoZXIuc3BsYXkocF90YXJnZXRfcik7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfdGFyZ2V0X3IgPT0gb3RoZXIubV9wX2hlYWQtPm1fcF9wYXJlbnQpOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF90YXJnZXRfci0+bV9wX2xlZnQgPT0gMCk7CisKKyAgcF90YXJnZXRfci0+bV9wX2xlZnQgPSBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50OworCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3RhcmdldF9yLT5tX3BfbGVmdCAhPSAwKTsKKyAgcF90YXJnZXRfci0+bV9wX2xlZnQtPm1fcF9wYXJlbnQgPSBwX3RhcmdldF9yOworCisgIGJhc2VfdHlwZTo6bV9wX2hlYWQtPm1fcF9wYXJlbnQgPSBwX3RhcmdldF9yOworICBwX3RhcmdldF9yLT5tX3BfcGFyZW50ID0gYmFzZV90eXBlOjptX3BfaGVhZDsKKworICB0aGlzLT5hcHBseV91cGRhdGUocF90YXJnZXRfciwgKG5vZGVfdXBkYXRlKil0aGlzKTsKKyAgYmFzZV90eXBlOjpqb2luX2ZpbmlzaChvdGhlcik7CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0KGtleV9jb25zdF9yZWZlcmVuY2Ugcl9rZXksIFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKworICBpZiAoYmFzZV90eXBlOjpzcGxpdF9wcmVwKHJfa2V5LCBvdGhlcikgPT0gZmFsc2UpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm47CisgICAgfQorCisgIG5vZGVfcG9pbnRlciBwX3VwcGVyX2JvdW5kID0gdGhpcy0+dXBwZXJfYm91bmQocl9rZXkpLm1fcF9uZDsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfdXBwZXJfYm91bmQgIT0gMCk7CisKKyAgc3BsYXkocF91cHBlcl9ib3VuZCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3VwcGVyX2JvdW5kLT5tX3BfcGFyZW50ID09IHRoaXMtPm1fcF9oZWFkKTsKKworICBub2RlX3BvaW50ZXIgcF9uZXdfcm9vdCA9IHBfdXBwZXJfYm91bmQtPm1fcF9sZWZ0OworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZXdfcm9vdCAhPSAwKTsKKworICBiYXNlX3R5cGU6Om1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF9uZXdfcm9vdDsKKyAgcF9uZXdfcm9vdC0+bV9wX3BhcmVudCA9IGJhc2VfdHlwZTo6bV9wX2hlYWQ7CisgIG90aGVyLm1fcF9oZWFkLT5tX3BfcGFyZW50ID0gcF91cHBlcl9ib3VuZDsKKyAgcF91cHBlcl9ib3VuZC0+bV9wX3BhcmVudCA9IG90aGVyLm1fcF9oZWFkOworICBwX3VwcGVyX2JvdW5kLT5tX3BfbGVmdCA9IDA7CisgIHRoaXMtPmFwcGx5X3VwZGF0ZShwX3VwcGVyX2JvdW5kLCAobm9kZV91cGRhdGUqKXRoaXMpOworICBiYXNlX3R5cGU6OnNwbGl0X2ZpbmlzaChvdGhlcik7CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3RyYWl0cy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3BsYXlfdHJlZV8vdHJhaXRzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjhlZDQxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL3RyYWl0cy5ocHAKQEAgLTAsMCArMSw5NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBzcGxheV90cmVlXy90cmFpdHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3Igc3BsYXlfdHJlZV8uCisgKi8KKworI2lmbmRlZiBQQl9EU19TUExBWV9UUkVFX05PREVfQU5EX0lUX1RSQUlUU19IUFAKKyNkZWZpbmUgUEJfRFNfU1BMQVlfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3NwbGF5X3RyZWVfL25vZGUuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24uCisgICAgLy8vIEBpbmdyb3VwIHRyYWl0cworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwKKwkgICAgIHR5cGVuYW1lIE1hcHBlZCwKKwkgICAgIHR5cGVuYW1lIENtcF9GbiwKKwkgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfQ0l0ciwKKwkJICAgICAgdHlwZW5hbWUgTm9kZV9JdHIsCisJCSAgICAgIHR5cGVuYW1lIENtcF9Gbl8sCisJCSAgICAgIHR5cGVuYW1lIF9BbGxvY18+CisJICAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdHJlZV90cmFpdHM8S2V5LCBNYXBwZWQsIENtcF9GbiwgTm9kZV9VcGRhdGUsIHNwbGF5X3RyZWVfdGFnLCBfQWxsb2M+IAorICAgIDogcHVibGljIGJpbl9zZWFyY2hfdHJlZV90cmFpdHM8S2V5LCBNYXBwZWQsIENtcF9GbiwgTm9kZV9VcGRhdGUsCisJCQkJICAgIHNwbGF5X3RyZWVfbm9kZV88CisgICAgICB0eXBlbmFtZSB0eXBlc190cmFpdHM8S2V5LCBNYXBwZWQsIF9BbGxvYywgZmFsc2U+Ojp2YWx1ZV90eXBlLAorICAgICAgdHlwZW5hbWUgdHJlZV9ub2RlX21ldGFkYXRhX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBDbXBfRm4sIE5vZGVfVXBkYXRlLAorCQkJCQkgICBfQWxsb2M+Ojp0eXBlLAorCQkJCSAgICAgIF9BbGxvYz4sCisJCQkJICAgICAgX0FsbG9jPgorICAgIHsgfTsKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbi4KKyAgICAvLy8gQGluZ3JvdXAgdHJhaXRzCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LAorCSAgICAgY2xhc3MgQ21wX0ZuLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLAorCQkgICAgICBjbGFzcyBOb2RlX0l0ciwKKwkJICAgICAgY2xhc3MgQ21wX0ZuXywKKwkJICAgICAgdHlwZW5hbWUgX0FsbG9jXz4KKyAgICAgICAgICAgICBjbGFzcyBOb2RlX1VwZGF0ZSwKKwkgICAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdHJlZV90cmFpdHM8S2V5LCBudWxsX3R5cGUsIENtcF9GbiwgTm9kZV9VcGRhdGUsCisJCSAgICAgICBzcGxheV90cmVlX3RhZywgX0FsbG9jPiAKKyAgICA6IHB1YmxpYyBiaW5fc2VhcmNoX3RyZWVfdHJhaXRzPEtleSwgbnVsbF90eXBlLCBDbXBfRm4sIE5vZGVfVXBkYXRlLCAKKwkJCQkgICAgc3BsYXlfdHJlZV9ub2RlXzwKKyAgICAgIHR5cGVuYW1lIHR5cGVzX3RyYWl0czxLZXksIG51bGxfdHlwZSwgX0FsbG9jLCBmYWxzZT46OnZhbHVlX3R5cGUsCisgICAgICB0eXBlbmFtZSB0cmVlX25vZGVfbWV0YWRhdGFfZGlzcGF0Y2g8S2V5LCBudWxsX3R5cGUsIENtcF9GbiwgTm9kZV9VcGRhdGUsCisJCQkJCSAgIF9BbGxvYz46OnR5cGUsCisJCQkJICAgICAgX0FsbG9jPiwKKwkJCQkgICAgX0FsbG9jPgorICAgIHsgfTsKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU1BMQVlfVFJFRV9OT0RFX0FORF9JVF9UUkFJVFNfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3N0YW5kYXJkX3BvbGljaWVzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjE3ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3N0YW5kYXJkX3BvbGljaWVzLmhwcApAQCAtMCwwICsxLDE1OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwCisgKiBDb250YWlucyBzdGFuZGFyZCBwb2xpY2llcyBmb3IgY29udGFpbmVycy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1NUQU5EQVJEX1BPTElDSUVTX0hQUAorI2RlZmluZSBQQl9EU19TVEFOREFSRF9QT0xJQ0lFU19IUFAKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxleHQvcGJfZHMvaGFzaF9wb2xpY3kuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9saXN0X3VwZGF0ZV9wb2xpY3kuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS9udWxsX25vZGVfbWV0YWRhdGEuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RyaWVfcG9saWN5LmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHA+CisjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBQcmltYXJ5IHRlbXBsYXRlLCBkZWZhdWx0X2hhc2hfZm4uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5PgorICAgIHN0cnVjdCBkZWZhdWx0X2hhc2hfZm4KKyAgICB7CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgc3RkOjp0cjE6Omhhc2g8S2V5PiAJCQkJdHlwZTsKKyAgICB9OworCisgICAgLy8vIFByaW1hcnkgdGVtcGxhdGUsIGRlZmF1bHRfZXFfZm4uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5PgorICAgIHN0cnVjdCBkZWZhdWx0X2VxX2ZuCisgICAgeworCS8vLyBEaXNwYXRjaGVkIHR5cGUuCisgICAgICB0eXBlZGVmIHN0ZDo6ZXF1YWxfdG88S2V5PiAJCQkJdHlwZTsKKyAgICB9OworCisgICAgLy8vIEVudW1lcmF0aW9uIGZvciBkZWZhdWx0IGJlaGF2aW9yIG9mIHN0b3JlZCBoYXNoIGRhdGEuCisgICAgZW51bQorICAgICAgeworCWRlZmF1bHRfc3RvcmVfaGFzaCA9IGZhbHNlCisgICAgICB9OworCisgICAgLy8vIFByaW1hcnkgdGVtcGxhdGUsIGRlZmF1bHRfY29tYl9oYXNoX2ZuLgorICAgIHN0cnVjdCBkZWZhdWx0X2NvbWJfaGFzaF9mbgorICAgIHsKKwkvLy8gRGlzcGF0Y2hlZCB0eXBlLgorICAgICAgdHlwZWRlZiBkaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nPD4gCQkJdHlwZTsKKyAgICB9OworCisgICAgLy8vIFByaW1hcnkgdGVtcGxhdGUsIGRlZmF1bHRfcmVzaXplX3BvbGljeS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21iX0hhc2hfRm4+CisgICAgc3RydWN0IGRlZmF1bHRfcmVzaXplX3BvbGljeQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb21iX0hhc2hfRm46OnNpemVfdHlwZSAJCQlzaXplX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgZGlyZWN0X21hc2tfcmFuZ2VfaGFzaGluZzxzaXplX3R5cGU+IAkJZGVmYXVsdF9mbjsKKyAgICAgIHR5cGVkZWYgaXNfc2FtZTxkZWZhdWx0X2ZuLCBDb21iX0hhc2hfRm4+IAkJc2FtZV90eXBlOworICAgICAgdHlwZWRlZiBoYXNoX2V4cG9uZW50aWFsX3NpemVfcG9saWN5PHNpemVfdHlwZT4gCQlpZnRydWU7CisgICAgICB0eXBlZGVmIGhhc2hfcHJpbWVfc2l6ZV9wb2xpY3kgCQkJCWlmZmFsc2U7CisgICAgICB0eXBlZGVmIF9fY29uZGl0aW9uYWxfdHlwZTxzYW1lX3R5cGU6OnZhbHVlLCBpZnRydWUsIGlmZmFsc2U+IGNvbmRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29uZF90eXBlOjpfX3R5cGUgCQkgICAgICAgc2l6ZV9wb2xpY3lfdHlwZTsKKworICAgICAgdHlwZWRlZiBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXI8ZmFsc2UsIHNpemVfdHlwZT4gCXRyaWdnZXI7CisKKyAgICBwdWJsaWM6CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgaGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5PHNpemVfcG9saWN5X3R5cGUsIHRyaWdnZXIsIAorCQkJCQkgIGZhbHNlLCBzaXplX3R5cGU+IAl0eXBlOworICAgIH07CisKKyAgICAvLy8gRGVmYXVsdCB1cGRhdGUgcG9saWN5LgorICAgIHN0cnVjdCBkZWZhdWx0X3VwZGF0ZV9wb2xpY3kKKyAgICB7CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgbHVfbW92ZV90b19mcm9udF9wb2xpY3k8PiAJCQl0eXBlOworICAgIH07CisKKyAgICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZSwgZGVmYXVsdF9wcm9iZV9mbi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21iX1Byb2JlX0ZuPgorICAgIHN0cnVjdCBkZWZhdWx0X3Byb2JlX2ZuCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbWJfUHJvYmVfRm46OnNpemVfdHlwZSAJCXNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgZGlyZWN0X21hc2tfcmFuZ2VfaGFzaGluZzxzaXplX3R5cGU+IAkJZGVmYXVsdF9mbjsKKyAgICAgIHR5cGVkZWYgaXNfc2FtZTxkZWZhdWx0X2ZuLCBDb21iX1Byb2JlX0ZuPiAJCXNhbWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgbGluZWFyX3Byb2JlX2ZuPHNpemVfdHlwZT4gCQkJaWZ0cnVlOworICAgICAgdHlwZWRlZiBxdWFkcmF0aWNfcHJvYmVfZm48c2l6ZV90eXBlPiAJCQlpZmZhbHNlOworICAgICAgdHlwZWRlZiBfX2NvbmRpdGlvbmFsX3R5cGU8c2FtZV90eXBlOjp2YWx1ZSwgaWZ0cnVlLCBpZmZhbHNlPiBjb25kX3R5cGU7CisKKyAgICBwdWJsaWM6CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29uZF90eXBlOjpfX3R5cGUgCQkJdHlwZTsKKyAgICB9OworCisKKyAgICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZSwgZGVmYXVsdF90cmllX2FjY2Vzc190cmFpdHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5PgorICAgICAgc3RydWN0IGRlZmF1bHRfdHJpZV9hY2Nlc3NfdHJhaXRzOworCisjZGVmaW5lIF9fZHRyaWVfYWxsb2Mgc3RkOjphbGxvY2F0b3I8Y2hhcj4gIAorI2RlZmluZSBfX2R0cmllX3N0cmluZyBzdGQ6OmJhc2ljX3N0cmluZzxDaGFyLCBDaGFyX1RyYWl0cywgX19kdHJpZV9hbGxvYz4gCisKKyAgICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiwgZGVmYXVsdF90cmllX2FjY2Vzc190cmFpdHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhciwgdHlwZW5hbWUgQ2hhcl9UcmFpdHM+CisgICAgICBzdHJ1Y3QgZGVmYXVsdF90cmllX2FjY2Vzc190cmFpdHM8X19kdHJpZV9zdHJpbmc+CisgICAgICB7CisgICAgICBwcml2YXRlOgorCXR5cGVkZWYgX19kdHJpZV9zdHJpbmcJCQkJCXN0cmluZ190eXBlOworCisgICAgICBwdWJsaWM6CisJLy8vIERpc3BhdGNoZWQgdHlwZS4KKwl0eXBlZGVmIHRyaWVfc3RyaW5nX2FjY2Vzc190cmFpdHM8c3RyaW5nX3R5cGU+IAkJdHlwZTsKKyAgICAgIH07CisKKyN1bmRlZiBfX2R0cmllX2FsbG9jCisjdW5kZWYgX19kdHJpZV9zdHJpbmcKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU1RBTkRBUkRfUE9MSUNJRVNfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmODM1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9jb25zdHJ1Y3RvcnNfZGVzdHJ1Y3Rvcl9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDEwNSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0aGluX2hlYXBfL2NvbnN0cnVjdG9yc19kZXN0cnVjdG9yX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpbl9oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgSXQ+Cit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citjb3B5X2Zyb21fcmFuZ2UoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQpCit7CisgIHdoaWxlIChmaXJzdF9pdCAhPSBsYXN0X2l0KQorICAgIHB1c2goKihmaXJzdF9pdCsrKSk7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgordGhpbl9oZWFwKCkgOiBtX3BfbWF4KDApCit7CisgIGluaXRpYWxpemUoKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitQQl9EU19DTEFTU19DX0RFQzo6Cit0aGluX2hlYXAoY29uc3QgQ21wX0ZuJiByX2NtcF9mbikgCis6IGJhc2VfdHlwZShyX2NtcF9mbiksIG1fcF9tYXgoMCkKK3sKKyAgaW5pdGlhbGl6ZSgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RoaW5faGVhcChjb25zdCBQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpIAorOiBiYXNlX3R5cGUob3RoZXIpCit7CisgIGluaXRpYWxpemUoKTsKKyAgbV9wX21heCA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisgIGZvciAobm9kZV9wb2ludGVyIHBfbmQgPSBiYXNlX3R5cGU6Om1fcF9yb290OyBwX25kICE9IDA7IAorICAgICAgIHBfbmQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nKQorICAgIGlmIChDbXBfRm46Om9wZXJhdG9yKCkobV9wX21heC0+bV92YWx1ZSwgcF9uZC0+bV92YWx1ZSkpCisgICAgICBtX3BfbWF4ID0gcF9uZDsKKworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3N3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsKKyAgc3RkOjpzd2FwKG1fcF9tYXgsIG90aGVyLm1fcF9tYXgpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK1BCX0RTX0NMQVNTX0NfREVDOjoKK350aGluX2hlYXAoKQoreyB9CisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citpbml0aWFsaXplKCkKK3sgc3RkOjpmaWxsKG1fYV9hdXgsIG1fYV9hdXggKyBtYXhfcmFuaywgc3RhdGljX2Nhc3Q8bm9kZV9wb2ludGVyPigwKSk7IH0KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vZGVidWdfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDk3YTZjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vZGVidWdfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMTkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdGhpbl9oZWFwXy9kZWJ1Z19mbl9pbXBzLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoaW5faGVhcF8uCisgKi8KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisKK1BCX0RTX0NMQVNTX1RfREVDCit2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cithc3NlcnRfdmFsaWQoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBiYXNlX3R5cGU6OmFzc2VydF92YWxpZChfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQoYmFzZV90eXBlOjptX3Bfcm9vdCwgdHJ1ZSwgX19maWxlLCBfX2xpbmUpOworICBhc3NlcnRfbWF4KF9fZmlsZSwgX19saW5lKTsKKyAgYXNzZXJ0X2F1eF9udWxsKF9fZmlsZSwgX19saW5lKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9hdXhfbnVsbChjb25zdCBjaGFyKiBfX2ZpbGUsIGludCBfX2xpbmUpIGNvbnN0Cit7CisgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbWF4X3Jhbms7ICsraSkKKyAgICBQQl9EU19ERUJVR19WRVJJRlkobV9hX2F1eFtpXSA9PSAwKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9tYXgoY29uc3QgY2hhciogX19maWxlLCBpbnQgX19saW5lKSBjb25zdAoreworICBpZiAobV9wX21heCA9PSAwKQorICAgIHsKKyAgICAgIFBCX0RTX0RFQlVHX1ZFUklGWShiYXNlX3R5cGU6OmVtcHR5KCkpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBQQl9EU19ERUJVR19WRVJJRlkoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisgIFBCX0RTX0RFQlVHX1ZFUklGWShiYXNlX3R5cGU6OnBhcmVudChtX3BfbWF4KSA9PSAwKTsKKyAgUEJfRFNfREVCVUdfVkVSSUZZKG1fcF9tYXgtPm1fcF9wcmV2X29yX3BhcmVudCA9PSAwKTsKKyAgZm9yIChjb25zdF9pdGVyYXRvciBpdCA9IGJhc2VfdHlwZTo6YmVnaW4oKTsgaXQgIT0gYmFzZV90eXBlOjplbmQoKTsgKytpdCkKKyAgICBQQl9EU19ERUJVR19WRVJJRlkoIUNtcF9Gbjo6b3BlcmF0b3IoKShtX3BfbWF4LT5tX3ZhbHVlLCBpdC5tX3BfbmQtPm1fdmFsdWUpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2Fzc2VydF9ub2RlX2NvbnNpc3RlbnQobm9kZV9jb25zdF9wb2ludGVyIHBfbmQsIGJvb2wgcm9vdCwKKwkJICAgICAgIGNvbnN0IGNoYXIqIF9fZmlsZSwgaW50IF9fbGluZSkgY29uc3QKK3sKKyAgYmFzZV90eXBlOjphc3NlcnRfbm9kZV9jb25zaXN0ZW50KHBfbmQsIHJvb3QsIF9fZmlsZSwgX19saW5lKTsKKyAgaWYgKHBfbmQgPT0gMCkKKyAgICByZXR1cm47CisKKyAgYXNzZXJ0X25vZGVfY29uc2lzdGVudChwX25kLT5tX3BfbmV4dF9zaWJsaW5nLCByb290LCBfX2ZpbGUsIF9fbGluZSk7CisgIGFzc2VydF9ub2RlX2NvbnNpc3RlbnQocF9uZC0+bV9wX2xfY2hpbGQsIGZhbHNlLCBfX2ZpbGUsIF9fbGluZSk7CisgIGlmICghcm9vdCkKKyAgICB7CisgICAgICBpZiAocF9uZC0+bV9tZXRhZGF0YSA9PSAwKQorCVBCX0RTX0RFQlVHX1ZFUklGWShwX25kLT5tX3BfbmV4dF9zaWJsaW5nID09IDApOworICAgICAgZWxzZQorCVBCX0RTX0RFQlVHX1ZFUklGWShwX25kLT5tX21ldGFkYXRhID09IHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fbWV0YWRhdGEgKyAxKTsKKyAgICB9CisKKyAgaWYgKHBfbmQtPm1fcF9sX2NoaWxkICE9IDApCisgICAgUEJfRFNfREVCVUdfVkVSSUZZKHBfbmQtPm1fcF9sX2NoaWxkLT5tX21ldGFkYXRhICsgMSA9PSBiYXNlX3R5cGU6OmRlZ3JlZShwX25kKSk7CisKKyAgY29uc3QgYm9vbCB1bm1hcmtlZF92YWxpZCA9CisgICAgKHBfbmQtPm1fcF9sX2NoaWxkID09IDAgJiYgcF9uZC0+bV9tZXRhZGF0YSA9PSAwKQorICAgIHx8IChwX25kLT5tX3BfbF9jaGlsZCAhPSAwCisJICYmIHBfbmQtPm1fbWV0YWRhdGEgPT0gcF9uZC0+bV9wX2xfY2hpbGQtPm1fbWV0YWRhdGEgKyAxKTsKKworICBjb25zdCBib29sIG1hcmtlZF92YWxpZCA9CisgICAgKHBfbmQtPm1fcF9sX2NoaWxkID09IDAgJiYgcF9uZC0+bV9tZXRhZGF0YSA9PSAxKQorICAgIHx8IChwX25kLT5tX3BfbF9jaGlsZCAhPSAwCisJJiYgcF9uZC0+bV9tZXRhZGF0YSA9PSBwX25kLT5tX3BfbF9jaGlsZC0+bV9tZXRhZGF0YSArIDIpOworCisgIFBCX0RTX0RFQlVHX1ZFUklGWSh1bm1hcmtlZF92YWxpZCB8fCBtYXJrZWRfdmFsaWQpOworICBpZiAocm9vdCkKKyAgICBQQl9EU19ERUJVR19WRVJJRlkodW5tYXJrZWRfdmFsaWQpOworfQorCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OWIzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDI1NSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0aGluX2hlYXBfL2VyYXNlX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpbl9oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcG9wKCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCghYmFzZV90eXBlOjplbXB0eSgpKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9tYXggIT0gMCk7CisKKyAgbm9kZV9wb2ludGVyIHBfbmQgPSBtX3BfbWF4OworICByZW1vdmVfbWF4X25vZGUoKTsKKyAgYmFzZV90eXBlOjphY3R1YWxfZXJhc2Vfbm9kZShwX25kKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVtb3ZlX21heF9ub2RlKCkKK3sKKyAgdG9fYXV4X2V4Y2VwdF9tYXgoKTsKKyAgbWFrZV9mcm9tX2F1eCgpOworfQorCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordG9fYXV4X2V4Y2VwdF9tYXgoKQoreworICBub2RlX3BvaW50ZXIgcF9hZGQgPSBiYXNlX3R5cGU6Om1fcF9yb290OworICB3aGlsZSAocF9hZGQgIT0gbV9wX21heCkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0X2FkZCA9IHBfYWRkLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgYWRkX3RvX2F1eChwX2FkZCk7CisgICAgICBwX2FkZCA9IHBfbmV4dF9hZGQ7CisgICAgfQorCisgIHBfYWRkID0gbV9wX21heC0+bV9wX2xfY2hpbGQ7CisgIHdoaWxlIChwX2FkZCAhPSAwKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHRfYWRkID0gcF9hZGQtPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBwX2FkZC0+bV9tZXRhZGF0YSA9IHBfYWRkLT5tX3BfbF9jaGlsZCA9PSAwID8KKwkwIDogcF9hZGQtPm1fcF9sX2NoaWxkLT5tX21ldGFkYXRhICsgMTsKKworICAgICAgYWRkX3RvX2F1eChwX2FkZCk7CisgICAgICBwX2FkZCA9IHBfbmV4dF9hZGQ7CisgICAgfQorCisgIHBfYWRkID0gbV9wX21heC0+bV9wX25leHRfc2libGluZzsKKyAgd2hpbGUgKHBfYWRkICE9IDApCisgICAgeworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dF9hZGQgPSBwX2FkZC0+bV9wX25leHRfc2libGluZzsKKyAgICAgIGFkZF90b19hdXgocF9hZGQpOworICAgICAgcF9hZGQgPSBwX25leHRfYWRkOworICAgIH0KK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CithZGRfdG9fYXV4KG5vZGVfcG9pbnRlciBwX25kKQoreworICBzaXplX3R5cGUgciA9IHBfbmQtPm1fbWV0YWRhdGE7CisgIHdoaWxlIChtX2FfYXV4W3JdICE9IDApCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fbWV0YWRhdGEgPCByYW5rX2JvdW5kKCkpOworICAgICAgaWYgKENtcF9Gbjo6b3BlcmF0b3IoKShtX2FfYXV4W3JdLT5tX3ZhbHVlLCBwX25kLT5tX3ZhbHVlKSkKKwltYWtlX2NoaWxkX29mKG1fYV9hdXhbcl0sIHBfbmQpOworICAgICAgZWxzZQorCXsKKwkgIG1ha2VfY2hpbGRfb2YocF9uZCwgbV9hX2F1eFtyXSk7CisJICBwX25kID0gbV9hX2F1eFtyXTsKKwl9CisKKyAgICAgIG1fYV9hdXhbcl0gPSAwOworICAgICAgKytyOworICAgIH0KKworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZC0+bV9tZXRhZGF0YSA8IHJhbmtfYm91bmQoKSk7CisKKyAgbV9hX2F1eFtyXSA9IHBfbmQ7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbWFrZV9jaGlsZF9vZihub2RlX3BvaW50ZXIgcF9uZCwgbm9kZV9wb2ludGVyIHBfbmV3X3BhcmVudCkKK3sKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfbmQtPm1fbWV0YWRhdGEgPT0gcF9uZXdfcGFyZW50LT5tX21ldGFkYXRhKTsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fYV9hdXhbcF9uZC0+bV9tZXRhZGF0YV0gPT0gcF9uZCB8fAorCQkgICBtX2FfYXV4W3BfbmQtPm1fbWV0YWRhdGFdID09IHBfbmV3X3BhcmVudCk7CisKKyAgKytwX25ld19wYXJlbnQtPm1fbWV0YWRhdGE7CisgIGJhc2VfdHlwZTo6bWFrZV9jaGlsZF9vZihwX25kLCBwX25ld19wYXJlbnQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21ha2VfZnJvbV9hdXgoKQoreworICBiYXNlX3R5cGU6Om1fcF9yb290ID0gbV9wX21heCA9IDA7CisgIGNvbnN0IHNpemVfdHlwZSBybmtfYm5kID0gcmFua19ib3VuZCgpOworICBzaXplX3R5cGUgaSA9IDA7CisgIHdoaWxlIChpIDwgcm5rX2JuZCkKKyAgICB7CisgICAgICBpZiAobV9hX2F1eFtpXSAhPSAwKQorCXsKKwkgIG1ha2Vfcm9vdF9hbmRfbGluayhtX2FfYXV4W2ldKTsKKwkgIG1fYV9hdXhbaV0gPSAwOworCX0KKyAgICAgICsraTsKKyAgICB9CisKKyAgUEJfRFNfQVNTRVJUX0FVWF9OVUxMKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcmVtb3ZlX25vZGUobm9kZV9wb2ludGVyIHBfbmQpCit7CisgIG5vZGVfcG9pbnRlciBwX3BhcmVudCA9IHBfbmQ7CisgIHdoaWxlIChiYXNlX3R5cGU6OnBhcmVudChwX3BhcmVudCkgIT0gMCkKKyAgICBwX3BhcmVudCA9IGJhc2VfdHlwZTo6cGFyZW50KHBfcGFyZW50KTsKKworICBiYXNlX3R5cGU6OmJ1YmJsZV90b190b3AocF9uZCk7CisgIG1fcF9tYXggPSBwX25kOworCisgIG5vZGVfcG9pbnRlciBwX2ZpeCA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisgIHdoaWxlIChwX2ZpeCAhPSAwJiYgIHBfZml4LT5tX3BfbmV4dF9zaWJsaW5nICE9IHBfcGFyZW50KQorICAgIHBfZml4ID0gcF9maXgtPm1fcF9uZXh0X3NpYmxpbmc7CisKKyAgaWYgKHBfZml4ICE9IDApCisgICAgcF9maXgtPm1fcF9uZXh0X3NpYmxpbmcgPSBwX25kOworCisgIHJlbW92ZV9tYXhfbm9kZSgpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2NsZWFyKCkKK3sKKyAgYmFzZV90eXBlOjpjbGVhcigpOworICBtX3BfbWF4ID0gMDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2VyYXNlKHBvaW50X2l0ZXJhdG9yIGl0KQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKCFiYXNlX3R5cGU6OmVtcHR5KCkpOworCisgIG5vZGVfcG9pbnRlciBwX25kID0gaXQubV9wX25kOworICByZW1vdmVfbm9kZShwX25kKTsKKyAgYmFzZV90eXBlOjphY3R1YWxfZXJhc2Vfbm9kZShwX25kKTsKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkPgordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZXJhc2VfaWYoUHJlZCBwcmVkKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgaWYgKGJhc2VfdHlwZTo6ZW1wdHkoKSkKKyAgICB7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBiYXNlX3R5cGU6OnRvX2xpbmtlZF9saXN0KCk7CisgIG5vZGVfcG9pbnRlciBwX291dCA9IGJhc2VfdHlwZTo6cHJ1bmUocHJlZCk7CisgIHNpemVfdHlwZSBlcnNkID0gMDsKKyAgd2hpbGUgKHBfb3V0ICE9IDApCisgICAgeworICAgICAgKytlcnNkOworICAgICAgbm9kZV9wb2ludGVyIHBfbmV4dCA9IHBfb3V0LT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgYmFzZV90eXBlOjphY3R1YWxfZXJhc2Vfbm9kZShwX291dCk7CisgICAgICBwX291dCA9IHBfbmV4dDsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfY3VyID0gYmFzZV90eXBlOjptX3Bfcm9vdDsKKyAgbV9wX21heCA9IGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSAwOworICB3aGlsZSAocF9jdXIgIT0gMCkKKyAgICB7CisgICAgICBub2RlX3BvaW50ZXIgcF9uZXh0ID0gcF9jdXItPm1fcF9uZXh0X3NpYmxpbmc7CisgICAgICBtYWtlX3Jvb3RfYW5kX2xpbmsocF9jdXIpOworICAgICAgcF9jdXIgPSBwX25leHQ7CisgICAgfQorCisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICByZXR1cm4gZXJzZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CityYW5rX2JvdW5kKCkKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAgY29uc3Qgc2l6ZV90KiBjb25zdCBwX3VwcGVyID0KKyAgICBzdGQ6OnVwcGVyX2JvdW5kKGdfYV9yYW5rX2JvdW5kcywKKwkJICAgICBnX2FfcmFua19ib3VuZHMgKyBudW1fZGlzdGluY3RfcmFua19ib3VuZHMsCisJCSAgICAgYmFzZV90eXBlOjptX3NpemUpOworCisgIGlmIChwX3VwcGVyID09IGdfYV9yYW5rX2JvdW5kcyArIG51bV9kaXN0aW5jdF9yYW5rX2JvdW5kcykKKyAgICByZXR1cm4gbWF4X3Jhbms7CisKKyAgcmV0dXJuIChwX3VwcGVyIC0gZ19hX3JhbmtfYm91bmRzKTsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2ZpbmRfZm5faW1wcy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmN2Y3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCkBAIC0wLDAgKzEsNTEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdGhpbl9oZWFwXy9maW5kX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpbl9oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9yZWZlcmVuY2UKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3RvcCgpIGNvbnN0Cit7CisgIFBCX0RTX0FTU0VSVF9WQUxJRCgoKnRoaXMpKQorICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoIWJhc2VfdHlwZTo6ZW1wdHkoKSk7CisKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF9tYXggIT0gMCk7CisgIHJldHVybiBtX3BfbWF4LT5tX3ZhbHVlOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTE5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKQEAgLTAsMCArMSwyODAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdGhpbl9oZWFwXy9pbnNlcnRfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGluX2hlYXBfLgorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnBvaW50X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitwdXNoKGNvbnN0X3JlZmVyZW5jZSByX3ZhbCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIG5vZGVfcG9pbnRlciBwX25kID0gYmFzZV90eXBlOjpnZXRfbmV3X25vZGVfZm9yX2luc2VydChyX3ZhbCk7CisgIHBfbmQtPm1fbWV0YWRhdGEgPSAwOworICBwX25kLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX25kLT5tX3BfbF9jaGlsZCA9IDA7CisgIGlmIChiYXNlX3R5cGU6Om1fcF9yb290ID09IDApCisgICAgeworICAgICAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IDA7CisgICAgICBtX3BfbWF4ID0gYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmQ7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybiBwb2ludF9pdGVyYXRvcihwX25kKTsKKyAgICB9CisKKyAgcF9uZC0+bV9wX25leHRfc2libGluZyA9IGJhc2VfdHlwZTo6bV9wX3Jvb3Q7CisgIGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisgIGJhc2VfdHlwZTo6bV9wX3Jvb3QgPSBwX25kOworICB1cGRhdGVfbWF4KHBfbmQpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgcmV0dXJuIHBvaW50X2l0ZXJhdG9yKHBfbmQpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21ha2Vfcm9vdChub2RlX3BvaW50ZXIgcF9uZCkKK3sKKyAgcF9uZC0+bV9tZXRhZGF0YSA9IHBfbmQtPm1fcF9sX2NoaWxkID09IDAgCisgICAgICAgICAgICAgICAgICAgICA/IDAgOiAxICsgcF9uZC0+bV9wX2xfY2hpbGQtPm1fbWV0YWRhdGE7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorbWFrZV9yb290X2FuZF9saW5rKG5vZGVfcG9pbnRlciBwX25kKQoreworICBtYWtlX3Jvb3QocF9uZCk7CisgIHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmcgPSBiYXNlX3R5cGU6Om1fcF9yb290OworICBpZiAoYmFzZV90eXBlOjptX3Bfcm9vdCAhPSAwKQorICAgIGJhc2VfdHlwZTo6bV9wX3Jvb3QtPm1fcF9wcmV2X29yX3BhcmVudCA9IDA7CisKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IHBfbmQ7CisgIHVwZGF0ZV9tYXgocF9uZCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZml4KG5vZGVfcG9pbnRlciBwX3kpCit7CisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIGlmIChwX3ktPm1fcF9wcmV2X29yX3BhcmVudCA9PSAwKQorICAgICAgICB7CisJICBmaXhfcm9vdChwX3kpOworCSAgcmV0dXJuOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChwX3ktPm1fbWV0YWRhdGEgPT0gMSYmICBwX3ktPm1fcF9uZXh0X3NpYmxpbmcgPT0gMCkKKyAgICAgICAgeworCSAgaWYgKHBfeS0+bV9wX2xfY2hpbGQgIT0gMCkKKyAgICAgICAgICAgIHsKKwkgICAgICBmaXhfc2libGluZ19yYW5rXzFfdW5tYXJrZWQocF95KTsKKwkgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKwkgIGZpeF9zaWJsaW5nX3JhbmtfMV9tYXJrZWQocF95KTsKKwkgIHBfeSA9IHBfeS0+bV9wX3ByZXZfb3JfcGFyZW50OworICAgICAgICB9CisgICAgICBlbHNlIGlmIChwX3ktPm1fbWV0YWRhdGEgPiBwX3ktPm1fcF9uZXh0X3NpYmxpbmctPm1fbWV0YWRhdGEgKyAxKQorICAgICAgICB7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF95LT5tX3BfbF9jaGlsZCAhPSAwKTsKKwkgIGlmIChwX3ktPm1fbWV0YWRhdGEgIT0gcF95LT5tX3BfbF9jaGlsZC0+bV9tZXRhZGF0YSArIDIpCisgICAgICAgICAgICB7CisJICAgICAgZml4X3NpYmxpbmdfZ2VuZXJhbF91bm1hcmtlZChwX3kpOworCSAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworCSAgZml4X3NpYmxpbmdfZ2VuZXJhbF9tYXJrZWQocF95KTsKKwkgIHBfeSA9IHBfeS0+bV9wX3ByZXZfb3JfcGFyZW50OworICAgICAgICB9CisgICAgICBlbHNlIGlmICgocF95LT5tX3BfbF9jaGlsZCA9PSAwJiYgCisgICAgICAgICAgICAgICAgcF95LT5tX21ldGFkYXRhID09IDIpIHx8KHBfeS0+bV9wX2xfY2hpbGQgIT0gMCYmIAorCQkJCQkgcF95LT5tX21ldGFkYXRhID09IHBfeS0+bV9wX2xfY2hpbGQtPm1fbWV0YWRhdGEgKyAzKSkKKyAgICAgICAgeworCSAgbm9kZV9wb2ludGVyIHBfeiA9IHBfeS0+bV9wX3ByZXZfb3JfcGFyZW50OworCSAgZml4X2NoaWxkKHBfeSk7CisJICBwX3kgPSBwX3o7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKwlyZXR1cm47CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpeF9yb290KG5vZGVfcG9pbnRlciBwX3kpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ktPm1fcF9wcmV2X29yX3BhcmVudCA9PSAwKTsKKyAgbWFrZV9yb290KHBfeSk7CisgIFBCX0RTX0FTU0VSVF9OT0RFX0NPTlNJU1RFTlQocF95LCB0cnVlKQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpeF9zaWJsaW5nX3JhbmtfMV91bm1hcmtlZChub2RlX3BvaW50ZXIgcF95KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF95LT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gMCk7CisKKyAgX0dMSUJDWFhfREVCVUdfT05MWShub2RlX3BvaW50ZXIgcF93ID0gcF95LT5tX3BfbF9jaGlsZDspCisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3cgIT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ctPm1fcF9uZXh0X3NpYmxpbmcgPT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ktPm1fcF9uZXh0X3NpYmxpbmcgPT0gMCk7CisKKyAgcF95LT5tX3BfbmV4dF9zaWJsaW5nID0gcF95LT5tX3BfbF9jaGlsZDsKKyAgcF95LT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX3k7CisgIHBfeS0+bV9wX2xfY2hpbGQgPSAwOworICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfeSwgZmFsc2UpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZml4X3NpYmxpbmdfcmFua18xX21hcmtlZChub2RlX3BvaW50ZXIgcF95KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF95LT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ktPm1fcF9sX2NoaWxkID09IDApOworICBwX3ktPm1fbWV0YWRhdGEgPSAwOworICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfeSwgZmFsc2UpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZml4X3NpYmxpbmdfZ2VuZXJhbF91bm1hcmtlZChub2RlX3BvaW50ZXIgcF95KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF95LT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gMCk7CisKKyAgbm9kZV9wb2ludGVyIHBfdyA9IHBfeS0+bV9wX2xfY2hpbGQ7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3cgIT0gMCk7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ctPm1fcF9uZXh0X3NpYmxpbmcgIT0gMCk7CisKKyAgcF95LT5tX3BfbF9jaGlsZCA9IHBfdy0+bV9wX25leHRfc2libGluZzsKKyAgcF93LT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX3k7CisKKyAgcF93LT5tX3BfbmV4dF9zaWJsaW5nID0gcF95LT5tX3BfbmV4dF9zaWJsaW5nOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF93LT5tX3BfbmV4dF9zaWJsaW5nICE9IDApOworICBwX3ctPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfdzsKKworICBwX3ktPm1fcF9uZXh0X3NpYmxpbmcgPSBwX3c7CisgIHBfdy0+bV9wX3ByZXZfb3JfcGFyZW50ID0gcF95OworCisgIFBCX0RTX0FTU0VSVF9OT0RFX0NPTlNJU1RFTlQocF95LCBmYWxzZSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitmaXhfc2libGluZ19nZW5lcmFsX21hcmtlZChub2RlX3BvaW50ZXIgcF95KQoreworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF95LT5tX3BfcHJldl9vcl9wYXJlbnQgIT0gMCk7CisgIC0tcF95LT5tX21ldGFkYXRhOworICBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKHBfeSwgZmFsc2UpCit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZml4X2NoaWxkKG5vZGVfcG9pbnRlciBwX3kpCit7CisgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChwX3ktPm1fcF9wcmV2X29yX3BhcmVudCAhPSAwKTsKKworICBpZiAocF95LT5tX3BfbmV4dF9zaWJsaW5nICE9IDApCisgICAgcF95LT5tX3BfbmV4dF9zaWJsaW5nLT5tX3BfcHJldl9vcl9wYXJlbnQgPSBwX3ktPm1fcF9wcmV2X29yX3BhcmVudDsKKworICBpZiAocF95LT5tX3BfcHJldl9vcl9wYXJlbnQtPm1fcF9sX2NoaWxkID09IHBfeSkKKyAgICBwX3ktPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX2xfY2hpbGQgPSBwX3ktPm1fcF9uZXh0X3NpYmxpbmc7CisgIGVsc2UKKyAgICBwX3ktPm1fcF9wcmV2X29yX3BhcmVudC0+bV9wX25leHRfc2libGluZyA9IHBfeS0+bV9wX25leHRfc2libGluZzsKKworICBtYWtlX3Jvb3RfYW5kX2xpbmsocF95KTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK21vZGlmeShwb2ludF9pdGVyYXRvciBpdCwgY29uc3RfcmVmZXJlbmNlIHJfbmV3X3ZhbCkKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIG5vZGVfcG9pbnRlciBwX25kID0gaXQubV9wX25kOworICBfR0xJQkNYWF9ERUJVR19BU1NFUlQocF9uZCAhPSAwKTsKKworICBjb25zdCBib29sIHNtYWxsZXIgPSBDbXBfRm46Om9wZXJhdG9yKCkocl9uZXdfdmFsLCBwX25kLT5tX3ZhbHVlKTsKKyAgcF9uZC0+bV92YWx1ZSA9IHJfbmV3X3ZhbDsKKyAgaWYgKHNtYWxsZXIpCisgICAgeworICAgICAgcmVtb3ZlX25vZGUocF9uZCk7CisgICAgICBwX25kLT5tX3BfbF9jaGlsZCA9IDA7CisgICAgICBtYWtlX3Jvb3RfYW5kX2xpbmsocF9uZCk7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgaWYgKHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudCA9PSAwKQorICAgIHsKKyAgICAgIHVwZGF0ZV9tYXgocF9uZCk7CisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbm9kZV9wb2ludGVyIHBfeSA9IHBfbmQtPm1fcF9wcmV2X29yX3BhcmVudDsKKyAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKHBfeSAhPSAwKTsKKworICBpZiAocF9uZC0+bV9wX25leHRfc2libGluZyAhPSAwKQorICAgIHBfbmQtPm1fcF9uZXh0X3NpYmxpbmctPm1fcF9wcmV2X29yX3BhcmVudCA9IHBfeTsKKworICBpZiAocF95LT5tX3BfbF9jaGlsZCA9PSBwX25kKQorICAgIHBfeS0+bV9wX2xfY2hpbGQgPSBwX25kLT5tX3BfbmV4dF9zaWJsaW5nOworICBlbHNlCisgICAgcF95LT5tX3BfbmV4dF9zaWJsaW5nID0gcF9uZC0+bV9wX25leHRfc2libGluZzsKKworICBmaXgocF95KTsKKyAgbWFrZV9yb290X2FuZF9saW5rKHBfbmQpOworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Cit1cGRhdGVfbWF4KG5vZGVfcG9pbnRlciBwX25kKQoreworICBpZiAobV9wX21heCA9PSAwIHx8IENtcF9Gbjo6b3BlcmF0b3IoKShtX3BfbWF4LT5tX3ZhbHVlLCBwX25kLT5tX3ZhbHVlKSkKKyAgICBtX3BfbWF4ID0gcF9uZDsKK30KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjNDkzNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL3NwbGl0X2pvaW5fZm5faW1wcy5ocHAKQEAgLTAsMCArMSwxMDggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdGhpbl9oZWFwXy9zcGxpdF9qb2luX2ZuX2ltcHMuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpbl9oZWFwXy4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQwordGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KK3ZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK3NwbGl0KFByZWQgcHJlZCwgUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKQoreworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorCisgIG90aGVyLmNsZWFyKCk7CisgIGlmIChiYXNlX3R5cGU6OmVtcHR5KCkpCisgICAgeworICAgICAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgICAgICBQQl9EU19BU1NFUlRfVkFMSUQob3RoZXIpCisgICAgICByZXR1cm47CisgICAgfQorCisgIGJhc2VfdHlwZTo6dG9fbGlua2VkX2xpc3QoKTsKKyAgbm9kZV9wb2ludGVyIHBfb3V0ID0gYmFzZV90eXBlOjpwcnVuZShwcmVkKTsKKworICB3aGlsZSAocF9vdXQgIT0gMCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3NpemUgPiAwKTsKKyAgICAgIC0tYmFzZV90eXBlOjptX3NpemU7CisgICAgICArK290aGVyLm1fc2l6ZTsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHQgPSBwX291dC0+bV9wX25leHRfc2libGluZzsKKyAgICAgIG90aGVyLm1ha2Vfcm9vdF9hbmRfbGluayhwX291dCk7CisgICAgICBwX291dCA9IHBfbmV4dDsKKyAgICB9CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorICBub2RlX3BvaW50ZXIgcF9jdXIgPSBiYXNlX3R5cGU6Om1fcF9yb290OworICBtX3BfbWF4ID0gMDsKKyAgYmFzZV90eXBlOjptX3Bfcm9vdCA9IDA7CisgIHdoaWxlIChwX2N1ciAhPSAwKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHQgPSBwX2N1ci0+bV9wX25leHRfc2libGluZzsKKyAgICAgIG1ha2Vfcm9vdF9hbmRfbGluayhwX2N1cik7CisgICAgICBwX2N1ciA9IHBfbmV4dDsKKyAgICB9CisKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6Citqb2luKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcikKK3sKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKCgqdGhpcykpCisgIFBCX0RTX0FTU0VSVF9WQUxJRChvdGhlcikKKworICBub2RlX3BvaW50ZXIgcF9vdGhlciA9IG90aGVyLm1fcF9yb290OworICB3aGlsZSAocF9vdGhlciAhPSAwKQorICAgIHsKKyAgICAgIG5vZGVfcG9pbnRlciBwX25leHQgPSBwX290aGVyLT5tX3BfbmV4dF9zaWJsaW5nOworICAgICAgbWFrZV9yb290X2FuZF9saW5rKHBfb3RoZXIpOworICAgICAgcF9vdGhlciA9IHBfbmV4dDsKKyAgICB9CisgIGJhc2VfdHlwZTo6bV9zaXplICs9IG90aGVyLm1fc2l6ZTsKKyAgb3RoZXIubV9wX3Jvb3QgPSAwOworICBvdGhlci5tX3NpemUgPSAwOworICBvdGhlci5tX3BfbWF4ID0gMDsKKworICBQQl9EU19BU1NFUlRfVkFMSUQoKCp0aGlzKSkKKyAgUEJfRFNfQVNTRVJUX1ZBTElEKG90aGVyKQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vdGhpbl9oZWFwXy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy90aGluX2hlYXBfLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjRhZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vdGhpbl9oZWFwXy5ocHAKQEAgLTAsMCArMSwzMjQgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdGhpbl9oZWFwXy90aGluX2hlYXBfLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIGEgdGhpbiBoZWFwLgorICovCisKKyNpZm5kZWYgUEJfRFNfVEhJTl9IRUFQX0hQUAorI2RlZmluZSBQQl9EU19USElOX0hFQVBfSFBQCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9jb25kX2RlYWx0b3IuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy9sZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy5ocHA+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZV9UeXBlLCB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBcCisgICAgdGhpbl9oZWFwPFZhbHVlX1R5cGUsIENtcF9GbiwgX0FsbG9jPgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyNkZWZpbmUgUEJfRFNfQkFTRV9UX1AgXAorICAgIDxWYWx1ZV9UeXBlLCBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlLCBfQWxsb2MsIHRydWU+CisjZWxzZQorI2RlZmluZSBQQl9EU19CQVNFX1RfUCBcCisgICAgPFZhbHVlX1R5cGUsIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUsIF9BbGxvYz4KKyNlbmRpZgorCisKKyAgICAvKioKKyAgICAgKiAgVGhpbiBoZWFwLgorICAgICAqCisgICAgICogIEBpbmdyb3VwIGhlYXAtZGV0YWlsCisgICAgICoKKyAgICAgKiAgU2VlIFRhcmphbiBhbmQgS2FwbGFuLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlX1R5cGUsIHR5cGVuYW1lIENtcF9GbiwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIHRoaW5faGVhcAorICAgIDogcHVibGljIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXAgUEJfRFNfQkFTRV9UX1AKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8VmFsdWVfVHlwZT46Om90aGVyIF9fcmViaW5kX2E7CisgICAgICB0eXBlZGVmIGxlZnRfY2hpbGRfbmV4dF9zaWJsaW5nX2hlYXAgUEJfRFNfQkFTRV9UX1AgYmFzZV90eXBlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Om5vZGUgCQkJbm9kZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpub2RlX3BvaW50ZXIgCQlub2RlX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6bm9kZV9jb25zdF9wb2ludGVyIAlub2RlX2NvbnN0X3BvaW50ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIFZhbHVlX1R5cGUgCQkJCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIENtcF9GbiAJCQkJCWNtcF9mbjsKKyAgICAgIHR5cGVkZWYgX0FsbG9jIAkJCQkJYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSAJCWRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hOjpwb2ludGVyCQlwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hOjpjb25zdF9wb2ludGVyCWNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2E6OnJlZmVyZW5jZQkJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hOjpjb25zdF9yZWZlcmVuY2UgICAgIAljb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludF9pdGVyYXRvciAJcG9pbnRfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6cG9pbnRfY29uc3RfaXRlcmF0b3IgCXBvaW50X2NvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Oml0ZXJhdG9yIAkJaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgCWNvbnN0X2l0ZXJhdG9yOworCisKKyAgICAgIGlubGluZSBwb2ludF9pdGVyYXRvcgorICAgICAgcHVzaChjb25zdF9yZWZlcmVuY2UpOworCisgICAgICB2b2lkCisgICAgICBtb2RpZnkocG9pbnRfaXRlcmF0b3IsIGNvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAgIGlubGluZSBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHRvcCgpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBwb3AoKTsKKworICAgICAgdm9pZAorICAgICAgZXJhc2UocG9pbnRfaXRlcmF0b3IpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZD4KKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2VfaWYoUHJlZCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWQ+CisgICAgICB2b2lkCisgICAgICBzcGxpdChQcmVkLCBQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB2b2lkCisgICAgICBqb2luKFBCX0RTX0NMQVNTX0NfREVDJik7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB0aGluX2hlYXAoKTsKKworICAgICAgdGhpbl9oZWFwKGNvbnN0IENtcF9GbiYpOworCisgICAgICB0aGluX2hlYXAoY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMmKTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYpOworCisgICAgICB+dGhpbl9oZWFwKCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0PgorICAgICAgdm9pZAorICAgICAgY29weV9mcm9tX3JhbmdlKEl0LCBJdCk7CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworICAgICAgdm9pZAorICAgICAgYXNzZXJ0X3ZhbGlkKGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbWF4KGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0OworI2VuZGlmCisKKyNpZmRlZiBQQl9EU19USElOX0hFQVBfVFJBQ0VfCisgICAgICB2b2lkCisgICAgICB0cmFjZSgpIGNvbnN0OworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgZW51bQorCXsKKwkgIG1heF9yYW5rID0gKHNpemVvZihzaXplX3R5cGUpIDw8IDQpICsgMgorCX07CisKKyAgICAgIHZvaWQKKyAgICAgIGluaXRpYWxpemUoKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIHVwZGF0ZV9tYXgobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGZpeChub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZml4X3Jvb3Qobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGZpeF9zaWJsaW5nX3JhbmtfMV91bm1hcmtlZChub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZml4X3NpYmxpbmdfcmFua18xX21hcmtlZChub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZml4X3NpYmxpbmdfZ2VuZXJhbF91bm1hcmtlZChub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgZml4X3NpYmxpbmdfZ2VuZXJhbF9tYXJrZWQobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGZpeF9jaGlsZChub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQKKyAgICAgIG1ha2Vfcm9vdChub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgbWFrZV9yb290X2FuZF9saW5rKG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByZW1vdmVfbWF4X25vZGUoKTsKKworICAgICAgdm9pZAorICAgICAgdG9fYXV4X2V4Y2VwdF9tYXgoKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIGFkZF90b19hdXgobm9kZV9wb2ludGVyKTsKKworICAgICAgaW5saW5lIHZvaWQKKyAgICAgIG1ha2VfZnJvbV9hdXgoKTsKKworICAgICAgaW5saW5lIHNpemVfdHlwZQorICAgICAgcmFua19ib3VuZCgpOworCisgICAgICBpbmxpbmUgdm9pZAorICAgICAgbWFrZV9jaGlsZF9vZihub2RlX3BvaW50ZXIsIG5vZGVfcG9pbnRlcik7CisKKyAgICAgIGlubGluZSB2b2lkCisgICAgICByZW1vdmVfbm9kZShub2RlX3BvaW50ZXIpOworCisgICAgICBpbmxpbmUgbm9kZV9wb2ludGVyCisgICAgICBqb2luKG5vZGVfcG9pbnRlciwgbm9kZV9wb2ludGVyKSBjb25zdDsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgICB2b2lkCisgICAgICBhc3NlcnRfbm9kZV9jb25zaXN0ZW50KG5vZGVfY29uc3RfcG9pbnRlciwgYm9vbCwgY29uc3QgY2hhciosIGludCkgY29uc3Q7CisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2VydF9hdXhfbnVsbChjb25zdCBjaGFyKiwgaW50KSBjb25zdDsKKyNlbmRpZgorCisgICAgICBub2RlX3BvaW50ZXIgCW1fcF9tYXg7CisgICAgICBub2RlX3BvaW50ZXIgCW1fYV9hdXhbbWF4X3JhbmtdOworICAgIH07CisKKyAgICBlbnVtCisgICAgICB7CisJbnVtX2Rpc3RpbmN0X3JhbmtfYm91bmRzID0gNDgKKyAgICAgIH07CisKKyAgICAvLyBUYWtlbiBmcm9tIHRoZSBTR0kgaW1wbGVtZW50YXRpb247IGFja25vd2xlZGdlZCBpbiB0aGUgZG9jcy4KKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgZ19hX3JhbmtfYm91bmRzW251bV9kaXN0aW5jdF9yYW5rX2JvdW5kc10gPQorICAgICAgeworCS8qIERlYWxpbmcgY2FyZHMuLi4gKi8KKwkvKiAwICAgICAqLyAwdWwsCisJLyogMSAgICAgKi8gMXVsLAorCS8qIDIgICAgICovIDF1bCwKKwkvKiAzICAgICAqLyAydWwsCisJLyogNCAgICAgKi8gNHVsLAorCS8qIDUgICAgICovIDZ1bCwKKwkvKiA2ICAgICAqLyAxMXVsLAorCS8qIDcgICAgICovIDE3dWwsCisJLyogOCAgICAgKi8gMjl1bCwKKwkvKiA5ICAgICAqLyA0NnVsLAorCS8qIDEwICAgICovIDc2dWwsCisJLyogMTEgICAgKi8gMTIydWwsCisJLyogMTIgICAgKi8gMTk5dWwsCisJLyogMTMgICAgKi8gMzIxdWwsCisJLyogMTQgICAgKi8gNTIxdWwsCisJLyogMTUgICAgKi8gODQydWwsCisJLyogMTYgICAgKi8gMTM2NHVsLAorCS8qIDE3ICAgICovIDIyMDZ1bCwKKwkvKiAxOCAgICAqLyAzNTcxdWwsCisJLyogMTkgICAgKi8gNTc3N3VsLAorCS8qIDIwICAgICovIDkzNDl1bCwKKwkvKiAyMSAgICAqLyAxNTEyNnVsLAorCS8qIDIyICAgICovIDI0NDc2dWwsCisJLyogMjMgICAgKi8gMzk2MDJ1bCwKKwkvKiAyNCAgICAqLyA2NDA3OXVsLAorCS8qIDI1ICAgICovIDEwMzY4MXVsLAorCS8qIDI2ICAgICovIDE2Nzc2MXVsLAorCS8qIDI3ICAgICovIDI3MTQ0MnVsLAorCS8qIDI4ICAgICovIDQzOTIwNHVsLAorCS8qIDI5ICAgICovIDcxMDY0NnVsLAorCS8qIDMwICAgICovIDExNDk4NTF1bCwKKwkvKiAzMSAgICAqLyAxODYwNDk3dWwsCisJLyogMzIgICAgKi8gMzAxMDM0OXVsLAorCS8qIDMzICAgICovIDQ4NzA4NDZ1bCwKKwkvKiAzNCAgICAqLyA3ODgxMTk2dWwsCisJLyogMzUgICAgKi8gMTI3NTIwNDJ1bCwKKwkvKiAzNiAgICAqLyAyMDYzMzIzOXVsLAorCS8qIDM3ICAgICovIDMzMzg1MjgydWwsCisJLyogMzggICAgKi8gNTQwMTg1MjF1bCwKKwkvKiAzOSAgICAqLyA4NzQwMzgwM3VsLAorCS8qIDQwICAgICovIDE0MTQyMjMyNHVsLAorCS8qIDQxICAgICovIDIyODgyNjEyN3VsLAorCS8qIDQyICAgICovIDM3MDI0ODQ1MXVsLAorCS8qIDQzICAgICovIDU5OTA3NDU3OHVsLAorCS8qIDQ0ICAgICovIDk2OTMyMzAyOXVsLAorCS8qIDQ1ICAgICovIDE1NjgzOTc2MDd1bCwKKwkvKiA0NiAgICAqLyAyNTM3NzIwNjM2dWwsCisJLyogNDcgICAgKi8gNDEwNjExODI0M3VsCisJLyogUG90J3MgZ29vZCwgbGV0J3MgcGxheSAqLworICAgICAgfTsKKworI2RlZmluZSBQQl9EU19BU1NFUlRfTk9ERV9DT05TSVNURU5UKF9Ob2RlLCBfQm9vbCkJCQlcCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoYXNzZXJ0X25vZGVfY29uc2lzdGVudChfTm9kZSwgX0Jvb2wsCQlcCisJCQkJCSAgICAgX19GSUxFX18sIF9fTElORV9fKTspCisKKyNkZWZpbmUgUEJfRFNfQVNTRVJUX0FVWF9OVUxMKFgpCQkJCQlcCisgIF9HTElCQ1hYX0RFQlVHX09OTFkoWC5hc3NlcnRfYXV4X251bGwoX19GSUxFX18sIF9fTElORV9fKTspCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vY29uc3RydWN0b3JzX2Rlc3RydWN0b3JfZm5faW1wcy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL2RlYnVnX2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vZmluZF9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vaW5zZXJ0X2ZuX2ltcHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy9lcmFzZV9mbl9pbXBzLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RoaW5faGVhcF8vc3BsaXRfam9pbl9mbl9pbXBzLmhwcD4KKworI3VuZGVmIFBCX0RTX0FTU0VSVF9BVVhfTlVMTAorI3VuZGVmIFBCX0RTX0FTU0VSVF9OT0RFX0NPTlNJU1RFTlQKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQkFTRV9UX1AKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90aGluX2hlYXBfL3RyYWNlX2ZuX2ltcHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDJkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdGhpbl9oZWFwXy90cmFjZV9mbl9pbXBzLmhwcApAQCAtMCwwICsxLDUzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRoaW5faGVhcF8vdHJhY2VfZm5faW1wcy5ocHAKKyAqIENvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBsZWZ0X2NoaWxkX25leHRfc2libGluZ19oZWFwXy4KKyAqLworCisjaWZkZWYgUEJfRFNfVEhJTl9IRUFQX1RSQUNFXworCitQQl9EU19DTEFTU19UX0RFQwordm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6OgordHJhY2UoKSBjb25zdAoreworICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworICBzdGQ6OmNlcnIgPDwgIm1fcF9tYXggIiA8PCBtX3BfbWF4IDw8IHN0ZDo6ZW5kbDsKKyAgYmFzZV90eXBlOjp0cmFjZSgpOworfQorCisjZW5kaWYgLy8gI2lmZGVmIFBCX0RTX1RISU5fSEVBUF9UUkFDRV8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmVlX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmVlX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVkMmNlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L25vZGVfbWV0YWRhdGFfc2VsZWN0b3IuaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyZWVfcG9saWN5L25vZGVfbWV0YWRhdGFfc2VsZWN0b3IuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdHJlZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19UUkVFX05PREVfTUVUQURBVEFfRElTUEFUQ0hfSFBQCisjZGVmaW5lIFBCX0RTX1RSRUVfTk9ERV9NRVRBREFUQV9ESVNQQVRDSF9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS9udWxsX25vZGVfbWV0YWRhdGEuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLyoqCisgICAgICogIEBhZGR0b2dyb3VwIHRyYWl0cyBUcmFpdHMKKyAgICAgKiAgQHsKKyAgICAgKi8KKworICAgIC8vLyBUcmVlIG1ldGFkYXRhIGhlbHBlci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZSwgYm9vbCBfQlRwPgorICAgICAgc3RydWN0IHRyZWVfbWV0YWRhdGFfaGVscGVyOworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uLCBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZT4KKyAgICAgIHN0cnVjdCB0cmVlX21ldGFkYXRhX2hlbHBlcjxOb2RlX1VwZGF0ZSwgZmFsc2U+CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBOb2RlX1VwZGF0ZTo6bWV0YWRhdGFfdHlwZSAJdHlwZTsKKyAgICAgIH07CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24sIHRydWUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9VcGRhdGU+CisgICAgICBzdHJ1Y3QgdHJlZV9tZXRhZGF0YV9oZWxwZXI8Tm9kZV9VcGRhdGUsIHRydWU+CisgICAgICB7CisJdHlwZWRlZiBudWxsX3R5cGUgCQkJCXR5cGU7CisgICAgICB9OworCisgICAgLy8vIFRyZWUgbm9kZSBtZXRhZGF0YSBkaXNwYXRjaC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBEYXRhLAorCSAgICAgdHlwZW5hbWUgQ21wX0ZuLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLAorCQkgICAgICB0eXBlbmFtZSBDb25zdF9JdGVyYXRvciwKKwkJICAgICAgdHlwZW5hbWUgQ21wX0ZuXywKKwkJICAgICAgdHlwZW5hbWUgX0FsbG9jXz4KKwkgICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCB0cmVlX25vZGVfbWV0YWRhdGFfZGlzcGF0Y2gKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgZHVtbm9kZV9jb25zdF9pdGVyYXRvcjxLZXksIERhdGEsIF9BbGxvYz4JCV9faXRfdHlwZTsKKyAgICAgIHR5cGVkZWYgTm9kZV9VcGRhdGU8X19pdF90eXBlLCBfX2l0X3R5cGUsIENtcF9GbiwgX0FsbG9jPglfX25vZGVfdTsKKyAgICAgIHR5cGVkZWYgbnVsbF9ub2RlX3VwZGF0ZTxfX2l0X3R5cGUsIF9faXRfdHlwZSwgQ21wX0ZuLCBfQWxsb2M+IF9fbm5vZGVfdTsKKworICAgICAgZW51bQorCXsKKwkgIG51bGxfdXBkYXRlID0gaXNfc2FtZTxfX25vZGVfdSwgX19ubm9kZV91Pjo6dmFsdWUKKwl9OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmVlX21ldGFkYXRhX2hlbHBlcjxfX25vZGVfdSwgbnVsbF91cGRhdGU+Ojp0eXBlIHR5cGU7CisgICAgfTsKKyAgICAvL0B9CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19UUkVFX05PREVfTUVUQURBVEFfRElTUEFUQ0hfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV9wb2xpY3kvb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L29yZGVyX3N0YXRpc3RpY3NfaW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjgwZWZkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfcG9saWN5L29yZGVyX3N0YXRpc3RpY3NfaW1wLmhwcApAQCAtMCwwICsxLDEyMSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmVlX3BvbGljeS9vcmRlcl9zdGF0aXN0aWNzX2ltcC5ocHAKKyAqIENvbnRhaW5zIGZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBvcmRlcl9zdGF0aXN0aWNzX2tleQorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2J5X29yZGVyKHNpemVfdHlwZSBvcmRlcikKK3sKKyAgbm9kZV9pdGVyYXRvciBpdCA9IG5vZGVfYmVnaW4oKTsKKyAgbm9kZV9pdGVyYXRvciBlbmRfaXQgPSBub2RlX2VuZCgpOworCisgIHdoaWxlIChpdCAhPSBlbmRfaXQpCisgICAgeworICAgICAgbm9kZV9pdGVyYXRvciBsX2l0ID0gaXQuZ2V0X2xfY2hpbGQoKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBvID0gKGxfaXQgPT0gZW5kX2l0KT8gMCA6IGxfaXQuZ2V0X21ldGFkYXRhKCk7CisKKyAgICAgIGlmIChvcmRlciA9PSBvKQorCXJldHVybiAqaXQ7CisgICAgICBlbHNlIGlmIChvcmRlciA8IG8pCisJaXQgPSBsX2l0OworICAgICAgZWxzZQorICAgICAgICB7CisJICBvcmRlciAtPSBvICsgMTsKKwkgIGl0ID0gaXQuZ2V0X3JfY2hpbGQoKTsKKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4gYmFzZV90eXBlOjplbmRfaXRlcmF0b3IoKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2ZpbmRfYnlfb3JkZXIoc2l6ZV90eXBlIG9yZGVyKSBjb25zdAoreyByZXR1cm4gY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyo+KHRoaXMpLT5maW5kX2J5X29yZGVyKG9yZGVyKTsgfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKK1BCX0RTX0NMQVNTX0NfREVDOjoKK29yZGVyX29mX2tleShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAoreworICBub2RlX2NvbnN0X2l0ZXJhdG9yIGl0ID0gbm9kZV9iZWdpbigpOworICBub2RlX2NvbnN0X2l0ZXJhdG9yIGVuZF9pdCA9IG5vZGVfZW5kKCk7CisKKyAgY29uc3QgY21wX2ZuJiByX2NtcF9mbiA9IGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqPih0aGlzKS0+Z2V0X2NtcF9mbigpOworICBzaXplX3R5cGUgb3JkID0gMDsKKyAgd2hpbGUgKGl0ICE9IGVuZF9pdCkKKyAgICB7CisgICAgICBub2RlX2NvbnN0X2l0ZXJhdG9yIGxfaXQgPSBpdC5nZXRfbF9jaGlsZCgpOworCisgICAgICBpZiAocl9jbXBfZm4ocl9rZXksIHRoaXMtPmV4dHJhY3Rfa2V5KCooKml0KSkpKQorCWl0ID0gbF9pdDsKKyAgICAgIGVsc2UgaWYgKHJfY21wX2ZuKHRoaXMtPmV4dHJhY3Rfa2V5KCooKml0KSksIHJfa2V5KSkKKyAgICAgICAgeworCSAgb3JkICs9IChsX2l0ID09IGVuZF9pdCk/IDEgOiAxICsgbF9pdC5nZXRfbWV0YWRhdGEoKTsKKwkgIGl0ID0gaXQuZ2V0X3JfY2hpbGQoKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisJICBvcmQgKz0gKGxfaXQgPT0gZW5kX2l0KT8gMCA6IGxfaXQuZ2V0X21ldGFkYXRhKCk7CisJICBpdCA9IGVuZF9pdDsKKyAgICAgICAgfQorICAgIH0KKyAgcmV0dXJuIG9yZDsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB2b2lkCitQQl9EU19DTEFTU19DX0RFQzo6CitvcGVyYXRvcigpKG5vZGVfaXRlcmF0b3Igbm9kZV9pdCwgbm9kZV9jb25zdF9pdGVyYXRvciBlbmRfbmRfaXQpIGNvbnN0Cit7CisgIG5vZGVfaXRlcmF0b3IgbF9pdCA9IG5vZGVfaXQuZ2V0X2xfY2hpbGQoKTsKKyAgY29uc3Qgc2l6ZV90eXBlIGxfcmFuayA9IChsX2l0ID09IGVuZF9uZF9pdCkgPyAwIDogbF9pdC5nZXRfbWV0YWRhdGEoKTsKKworICBub2RlX2l0ZXJhdG9yIHJfaXQgPSBub2RlX2l0LmdldF9yX2NoaWxkKCk7CisgIGNvbnN0IHNpemVfdHlwZSByX3JhbmsgPSAocl9pdCA9PSBlbmRfbmRfaXQpID8gMCA6IHJfaXQuZ2V0X21ldGFkYXRhKCk7CisKKyAgY29uc3RfY2FzdDxtZXRhZGF0YV9yZWZlcmVuY2U+KG5vZGVfaXQuZ2V0X21ldGFkYXRhKCkpPSAxICsgbF9yYW5rICsgcl9yYW5rOworfQorCitQQl9EU19DTEFTU19UX0RFQworUEJfRFNfQ0xBU1NfQ19ERUM6OgorfnRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZSgpCit7IH0KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmVlX3BvbGljeS9zYW1wbGVfdHJlZV9ub2RlX3VwZGF0ZS5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV9wb2xpY3kvc2FtcGxlX3RyZWVfbm9kZV91cGRhdGUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTZhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV9wb2xpY3kvc2FtcGxlX3RyZWVfbm9kZV91cGRhdGUuaHBwCkBAIC0wLDAgKzEsNjIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdHJlZV9wb2xpY3kvc2FtcGxlX3RyZWVfbm9kZV91cGRhdGUuaHBwCisgKiBDb250YWlucyBhIHNhbWxlIG5vZGUgdXBkYXRlIGZ1bmN0b3IuCisgKi8KKworI2lmbmRlZiBQQl9EU19TQU1QTEVfVFJFRV9OT0RFX1VQREFUT1JfSFBQCisjZGVmaW5lIFBCX0RTX1NBTVBMRV9UUkVFX05PREVfVVBEQVRPUl9IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLy8vIEEgc2FtcGxlIG5vZGUgdXBkYXRvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgQ29uc3RfTm9kZV9JdGVyLCB0eXBlbmFtZSBOb2RlX0l0ZXIsIHR5cGVuYW1lIENtcF9GbiwKKwkgICB0eXBlbmFtZSBfQWxsb2M+CisgIGNsYXNzIHNhbXBsZV90cmVlX25vZGVfdXBkYXRlCisgIHsKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90IG1ldGFkYXRhX3R5cGU7CisKKyAgICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBzYW1wbGVfdHJlZV9ub2RlX3VwZGF0ZSgpOworCisgICAgLy8vIFVwZGF0ZXMgdGhlIHJhbmsgb2YgYSBub2RlIHRocm91Z2ggYSBub2RlX2l0ZXJhdG9yIG5vZGVfaXQ7CisgICAgLy8vIGVuZF9uZF9pdCBpcyB0aGUgZW5kIG5vZGUgaXRlcmF0b3IuCisgICAgaW5saW5lIHZvaWQKKyAgICBvcGVyYXRvcigpKG5vZGVfaXRlcmF0b3Igbm9kZV9pdCwgbm9kZV9jb25zdF9pdGVyYXRvciBlbmRfbmRfaXQpIGNvbnN0OworICB9OworfQorI2VuZGlmIC8vICNpZm5kZWYgUEJfRFNfU0FNUExFX1RSRUVfTk9ERV9VUERBVE9SX0hQUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfdHJhY2VfYmFzZS5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJlZV90cmFjZV9iYXNlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQzMDRkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyZWVfdHJhY2VfYmFzZS5ocHAKQEAgLTAsMCArMSwxNzkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGV0YWlsL3RyZWVfdHJhY2VfYmFzZS5ocHAKKyAqIENvbnRhaW5zIHRyZWUtcmVsYXRlZCBwb2xpY2llcy4KKyAqLworCisjaWZuZGVmIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9IUFAKKyNkZWZpbmUgUEJfRFNfVFJFRV9UUkFDRV9CQVNFX0hQUAorCisjaWZkZWYgUEJfRFNfVFJFRV9UUkFDRQorCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9icmFuY2hfcG9saWN5L2JyYW5jaF9wb2xpY3kuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS9udWxsX25vZGVfbWV0YWRhdGEuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyNpZmRlZiBQQl9EU19UUkVFX1RSQUNFCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMJCQkJCQlcCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLCB0eXBlbmFtZSBOb2RlX0l0ciwJXAorCSAgICAgdHlwZW5hbWUgQ21wX0ZuLCBib29sIE5vZGVfQmFzZWQsIHR5cGVuYW1lIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQwkJCQkJCVwKKyAgICB0cmVlX3RyYWNlX2Jhc2U8Tm9kZV9DSXRyLCBOb2RlX0l0ciwgQ21wX0ZuLCAgICAgICAgIFwKKwkJICAgIE5vZGVfQmFzZWQsIF9BbGxvYz4KKworI2RlZmluZSBQQl9EU19UUkFDRV9CQVNFIFwKKyAgICBicmFuY2hfcG9saWN5PE5vZGVfQ0l0ciwgTm9kZV9JdHIsIF9BbGxvYz4KKworICAgIC8vLyBUcmFjaW5nIGJhc2UgY2xhc3MuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLCB0eXBlbmFtZSBOb2RlX0l0ciwKKwkgICAgIHR5cGVuYW1lIENtcF9GbiwgYm9vbCBOb2RlX0Jhc2VkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgdHJlZV90cmFjZV9iYXNlIDogcHJpdmF0ZSBQQl9EU19UUkFDRV9CQVNFCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHZvaWQKKyAgICAgIHRyYWNlKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBQQl9EU19UUkFDRV9CQVNFIAkJCWJhc2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgTm9kZV9DSXRyIAkJbm9kZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCXNpemVfdHlwZTsKKworICAgICAgdm9pZAorICAgICAgdHJhY2Vfbm9kZShub2RlX2NvbnN0X2l0ZXJhdG9yLCBzaXplX3R5cGUpIGNvbnN0OworCisgICAgICB2aXJ0dWFsIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QgPSAwOworCisgICAgICB2aXJ0dWFsIG5vZGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG5vZGVfYmVnaW4oKSBjb25zdCA9IDA7CisKKyAgICAgIHZpcnR1YWwgbm9kZV9jb25zdF9pdGVyYXRvcgorICAgICAgbm9kZV9lbmQoKSBjb25zdCA9IDA7CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBwcmludF9ub2RlX3BvaW50ZXIoTm9kZV9DSXRyLCBpbnRlZ3JhbF9jb25zdGFudDxpbnQsdHJ1ZT4pOworCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgcHJpbnRfbm9kZV9wb2ludGVyKE5vZGVfQ0l0ciwgaW50ZWdyYWxfY29uc3RhbnQ8aW50LGZhbHNlPik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhXz4KKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICB0cmFjZV9pdF9tZXRhZGF0YShOb2RlX0NJdHIsIHR5cGVfdG9fdHlwZTxNZXRhZGF0YV8+KTsKKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIHRyYWNlX2l0X21ldGFkYXRhKE5vZGVfQ0l0ciwgdHlwZV90b190eXBlPG51bGxfdHlwZT4pOworICAgIH07CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgdHJhY2UoKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChlbXB0eSgpKQorCXJldHVybjsKKyAgICAgIHRyYWNlX25vZGUobm9kZV9iZWdpbigpLCAwKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgdHJhY2Vfbm9kZShub2RlX2NvbnN0X2l0ZXJhdG9yIG5kX2l0LCBzaXplX3R5cGUgbGV2ZWwpIGNvbnN0CisgICAgeworICAgICAgaWYgKG5kX2l0LmdldF9yX2NoaWxkKCkgIT0gbm9kZV9lbmQoKSkKKwl0cmFjZV9ub2RlKG5kX2l0LmdldF9yX2NoaWxkKCksIGxldmVsICsgMSk7CisKKyAgICAgIGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbGV2ZWw7ICsraSkKKwlzdGQ6OmNlcnIgPDwgJyAnOworCisgICAgICBwcmludF9ub2RlX3BvaW50ZXIobmRfaXQsIGludGVncmFsX2NvbnN0YW50PGludCxOb2RlX0Jhc2VkPigpKTsKKyAgICAgIHN0ZDo6Y2VyciA8PCBiYXNlX3R5cGU6OmV4dHJhY3Rfa2V5KCooKm5kX2l0KSk7CisKKyAgICAgIHR5cGVkZWYgdHlwZV90b190eXBlPHR5cGVuYW1lIG5vZGVfY29uc3RfaXRlcmF0b3I6Om1ldGFkYXRhX3R5cGU+CisJbV90eXBlX2luZF90OworCisgICAgICB0cmFjZV9pdF9tZXRhZGF0YShuZF9pdCwgbV90eXBlX2luZF90KCkpOworCisgICAgICBzdGQ6OmNlcnIgPDwgc3RkOjplbmRsOworCisgICAgICBpZiAobmRfaXQuZ2V0X2xfY2hpbGQoKSAhPSBub2RlX2VuZCgpKQorCXRyYWNlX25vZGUobmRfaXQuZ2V0X2xfY2hpbGQoKSwgbGV2ZWwgKyAxKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhXz4KKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHRyYWNlX2l0X21ldGFkYXRhKE5vZGVfQ0l0ciBuZF9pdCwgdHlwZV90b190eXBlPE1ldGFkYXRhXz4pCisgICAgeworICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyB1bCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG5kX2l0LmdldF9tZXRhZGF0YSgpKTsKKyAgICAgIHN0ZDo6Y2VyciA8PCAiICgiIDw8IHVsIDw8ICIpICI7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB2b2lkCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIHRyYWNlX2l0X21ldGFkYXRhKE5vZGVfQ0l0ciwgdHlwZV90b190eXBlPG51bGxfdHlwZT4pCisgICAgeyB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHZvaWQKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgcHJpbnRfbm9kZV9wb2ludGVyKE5vZGVfQ0l0ciBuZF9pdCwgaW50ZWdyYWxfY29uc3RhbnQ8aW50LHRydWU+KQorICAgIHsgc3RkOjpjZXJyIDw8IG5kX2l0Lm1fcF9uZCA8PCAiICI7IH0KKworICAgIFBCX0RTX0NMQVNTX1RfREVDCisgICAgdm9pZAorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICBwcmludF9ub2RlX3BvaW50ZXIoTm9kZV9DSXRyIG5kX2l0LCBpbnRlZ3JhbF9jb25zdGFudDxpbnQsZmFsc2U+KQorICAgIHsgc3RkOjpjZXJyIDw8ICpuZF9pdCA8PCAiICI7IH0KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKyN1bmRlZiBQQl9EU19UUkFDRV9CQVNFCisjZW5kaWYgLy8gI2lmZGVmICAgIFBCX0RTX1RSRUVfVFJBQ0UKKworICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIC8vICNpZmRlZiBQQl9EU19UUkVFX1RSQUNFCisKKyNlbmRpZiAvLyAjaWZuZGVmIFBCX0RTX1RSRUVfVFJBQ0VfQkFTRV9IUFAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9ub2RlX21ldGFkYXRhX3NlbGVjdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RmZGUyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L25vZGVfbWV0YWRhdGFfc2VsZWN0b3IuaHBwCkBAIC0wLDAgKzEsMTAzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyaWVfcG9saWN5L25vZGVfbWV0YWRhdGFfc2VsZWN0b3IuaHBwCisgKiBDb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdHJpZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19UUklFX05PREVfTUVUQURBVEFfRElTUEFUQ0hfSFBQCisjZGVmaW5lIFBCX0RTX1RSSUVfTk9ERV9NRVRBREFUQV9ESVNQQVRDSF9IUFAKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS9udWxsX25vZGVfbWV0YWRhdGEuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgbmFtZXNwYWNlIGRldGFpbAorICB7CisgICAgLyoqCisgICAgICogIEBhZGR0b2dyb3VwIHRyYWl0cyBUcmFpdHMKKyAgICAgKiAgQHsKKyAgICAgKi8KKworICAgIC8vLyBUcmllIG1ldGFkYXRhIGhlbHBlci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZSwgYm9vbCBfQlRwPgorICAgICAgc3RydWN0IHRyaWVfbWV0YWRhdGFfaGVscGVyOworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uLCBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX1VwZGF0ZT4KKyAgICAgIHN0cnVjdCB0cmllX21ldGFkYXRhX2hlbHBlcjxOb2RlX1VwZGF0ZSwgZmFsc2U+CisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBOb2RlX1VwZGF0ZTo6bWV0YWRhdGFfdHlwZSAJdHlwZTsKKyAgICAgIH07CisKKyAgICAvLy8gU3BlY2lhbGl6YXRpb24sIHRydWUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9VcGRhdGU+CisgICAgICBzdHJ1Y3QgdHJpZV9tZXRhZGF0YV9oZWxwZXI8Tm9kZV9VcGRhdGUsIHRydWU+CisgICAgICB7CisJdHlwZWRlZiBudWxsX3R5cGUgCQkJCXR5cGU7CisgICAgICB9OworCisgICAgLy8vIFRyaWUgbm9kZSBtZXRhZGF0YSBkaXNwYXRjaC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksCisJICAgICB0eXBlbmFtZSBEYXRhLAorCSAgICAgdHlwZW5hbWUgQ21wX0ZuLAorCSAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLAorCQkgICAgICB0eXBlbmFtZSBDb25zdF9JdGVyYXRvciwKKwkJICAgICAgdHlwZW5hbWUgQ21wX0ZuXywKKwkJICAgICAgdHlwZW5hbWUgX0FsbG9jXz4KKwkgICAgIGNsYXNzIE5vZGVfVXBkYXRlLAorCSAgICAgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCB0cmllX25vZGVfbWV0YWRhdGFfZGlzcGF0Y2gKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgZHVtbm9kZV9jb25zdF9pdGVyYXRvcjxLZXksIERhdGEsIF9BbGxvYz4JCV9faXRfdHlwZTsKKyAgICAgIHR5cGVkZWYgTm9kZV9VcGRhdGU8X19pdF90eXBlLCBfX2l0X3R5cGUsIENtcF9GbiwgX0FsbG9jPglfX25vZGVfdTsKKyAgICAgIHR5cGVkZWYgbnVsbF9ub2RlX3VwZGF0ZTxfX2l0X3R5cGUsIF9faXRfdHlwZSwgQ21wX0ZuLCBfQWxsb2M+IF9fbm5vZGVfdTsKKworICAgICAgZW51bQorCXsKKwkgIG51bGxfdXBkYXRlID0gaXNfc2FtZTxfX25vZGVfdSwgX19ubm9kZV91Pjo6dmFsdWUKKwl9OworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmllX21ldGFkYXRhX2hlbHBlcjxfX25vZGVfdSwgbnVsbF91cGRhdGU+Ojp0eXBlIHR5cGU7CisgICAgfTsKKyAgICAvL0B9CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19UUklFX05PREVfTUVUQURBVEFfRElTUEFUQ0hfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L29yZGVyX3N0YXRpc3RpY3NfaW1wLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI2YWNjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L29yZGVyX3N0YXRpc3RpY3NfaW1wLmhwcApAQCAtMCwwICsxLDE2MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmllX3BvbGljeS9vcmRlcl9zdGF0aXN0aWNzX2ltcC5ocHAKKyAqIENvbnRhaW5zIGZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBvcmRlcl9zdGF0aXN0aWNzX2tleQorICovCisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2J5X29yZGVyKHNpemVfdHlwZSBvcmRlcikKK3sKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuIGVuZCgpOworCisgICsrb3JkZXI7CisgIG5vZGVfaXRlcmF0b3IgbmRfaXQgPSBub2RlX2JlZ2luKCk7CisKKyAgd2hpbGUgKHRydWUpCisgICAgeworICAgICAgaWYgKG9yZGVyID4gbmRfaXQuZ2V0X21ldGFkYXRhKCkpCisJcmV0dXJuICsrYmFzZV90eXBlOjpyaWdodG1vc3RfaXQobmRfaXQpOworCisgICAgICBjb25zdCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuID0gbmRfaXQubnVtX2NoaWxkcmVuKCk7CisgICAgICBpZiAobnVtX2NoaWxkcmVuID09IDApCisJcmV0dXJuICpuZF9pdDsKKworICAgICAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBudW1fY2hpbGRyZW47ICsraSkKKwl7CisJICBub2RlX2l0ZXJhdG9yIGNoaWxkX25kX2l0ID0gbmRfaXQuZ2V0X2NoaWxkKGkpOworCSAgaWYgKG9yZGVyIDw9IGNoaWxkX25kX2l0LmdldF9tZXRhZGF0YSgpKQorCSAgICB7CisJICAgICAgaSA9IG51bV9jaGlsZHJlbjsKKwkgICAgICBuZF9pdCA9IGNoaWxkX25kX2l0OworCSAgICB9CisJICBlbHNlCisJICAgIG9yZGVyIC09IGNoaWxkX25kX2l0LmdldF9tZXRhZGF0YSgpOworCX0KKyAgICB9Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitmaW5kX2J5X29yZGVyKHNpemVfdHlwZSBvcmRlcikgY29uc3QKK3sgcmV0dXJuIGNvbnN0X2Nhc3Q8UEJfRFNfQ0xBU1NfQ19ERUMqPih0aGlzKS0+ZmluZF9ieV9vcmRlcihvcmRlcik7IH0KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitvcmRlcl9vZl9rZXkoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkgY29uc3QKK3sKKyAgY29uc3QgX0FUcmFpdHMmIHJfdHJhaXRzID0KKyAgICBjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKiA+KHRoaXMpLT5nZXRfYWNjZXNzX3RyYWl0cygpOworCisgIHJldHVybiBvcmRlcl9vZl9wcmVmaXgocl90cmFpdHMuYmVnaW4ocl9rZXkpLCByX3RyYWl0cy5lbmQocl9rZXkpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6c2l6ZV90eXBlCitQQl9EU19DTEFTU19DX0RFQzo6CitvcmRlcl9vZl9wcmVmaXgodHlwZW5hbWUgYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgYiwKKwkJdHlwZW5hbWUgYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZSkgY29uc3QKK3sKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuIDA7CisKKyAgY29uc3QgX0FUcmFpdHMmIHJfdHJhaXRzID0KKyAgICBjb25zdF9jYXN0PFBCX0RTX0NMQVNTX0NfREVDKj4odGhpcyktPmdldF9hY2Nlc3NfdHJhaXRzKCk7CisKKyAgbm9kZV9jb25zdF9pdGVyYXRvciBuZF9pdCA9IG5vZGVfYmVnaW4oKTsKKyAgbm9kZV9jb25zdF9pdGVyYXRvciBlbmRfbmRfaXQgPSBub2RlX2VuZCgpOworICBzaXplX3R5cGUgb3JkID0gMDsKKworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuID0gbmRfaXQubnVtX2NoaWxkcmVuKCk7CisgICAgICBpZiAobnVtX2NoaWxkcmVuID09IDApCisJeworCSAga2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSA9IGJhc2VfdHlwZTo6ZXh0cmFjdF9rZXkoKigqbmRfaXQpKTsKKwkgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGtleV9iID0KKwkgICAgcl90cmFpdHMuYmVnaW4ocl9rZXkpOworCisJICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBrZXlfZSA9CisJICAgIHJfdHJhaXRzLmVuZChyX2tleSk7CisKKwkgIHJldHVybiAoYmFzZV90eXBlOjpsZXNzKGtleV9iLCBrZXlfZSwgIGIsIGUsICByX3RyYWl0cykpID8KKwkJICBvcmQgKyAxIDogb3JkOworCX0KKworICAgICAgbm9kZV9jb25zdF9pdGVyYXRvciBuZXh0X25kX2l0ID0gZW5kX25kX2l0OworICAgICAgc2l6ZV90eXBlIGkgPSBudW1fY2hpbGRyZW4gLSAxOworCisgICAgICBkbworCXsKKwkgIG5vZGVfY29uc3RfaXRlcmF0b3IgY2hpbGRfbmRfaXQgPSBuZF9pdC5nZXRfY2hpbGQoaSk7CisKKwkgIGlmIChuZXh0X25kX2l0ICE9IGVuZF9uZF9pdCkKKwkgICAgb3JkICs9IGNoaWxkX25kX2l0LmdldF9tZXRhZGF0YSgpOworCSAgZWxzZSBpZiAoIWJhc2VfdHlwZTo6bGVzcyhiLCBlLAorCQkJCSAgICBjaGlsZF9uZF9pdC52YWxpZF9wcmVmaXgoKS5maXJzdCwKKwkJCQkgICAgY2hpbGRfbmRfaXQudmFsaWRfcHJlZml4KCkuc2Vjb25kLAorCQkJCSAgICByX3RyYWl0cykpCisJICAgIG5leHRfbmRfaXQgPSBjaGlsZF9uZF9pdDsKKwl9CisgICAgICB3aGlsZSAoaS0tID4gMCk7CisKKyAgICAgIGlmIChuZXh0X25kX2l0ID09IGVuZF9uZF9pdCkKKwlyZXR1cm4gb3JkOworCisgICAgICBuZF9pdCA9IG5leHRfbmRfaXQ7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHZvaWQKK1BCX0RTX0NMQVNTX0NfREVDOjoKK29wZXJhdG9yKCkobm9kZV9pdGVyYXRvciBuZF9pdCwgbm9kZV9jb25zdF9pdGVyYXRvciAvKmVuZF9uZF9pdCovKSBjb25zdAoreworICBjb25zdCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuID0gbmRfaXQubnVtX2NoaWxkcmVuKCk7CisgIHNpemVfdHlwZSBjaGlsZHJlbl9yYW5rID0gMDsKKyAgZm9yIChzaXplX3R5cGUgaSA9IDA7IGkgPCBudW1fY2hpbGRyZW47ICsraSkKKyAgICBjaGlsZHJlbl9yYW5rICs9IG5kX2l0LmdldF9jaGlsZChpKS5nZXRfbWV0YWRhdGEoKTsKKworICBjb25zdCBzaXplX3R5cGUgcmVzID0gKG51bV9jaGlsZHJlbiA9PSAwKSA/IDEgOiBjaGlsZHJlbl9yYW5rOworICBjb25zdF9jYXN0PHNpemVfdHlwZSY+KG5kX2l0LmdldF9tZXRhZGF0YSgpKSA9IHJlczsKK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9wcmVmaXhfc2VhcmNoX25vZGVfdXBkYXRlX2ltcC5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvcHJlZml4X3NlYXJjaF9ub2RlX3VwZGF0ZV9pbXAuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOTYxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvcHJlZml4X3NlYXJjaF9ub2RlX3VwZGF0ZV9pbXAuaHBwCkBAIC0wLDAgKzEsMTM5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyaWVfcG9saWN5L3ByZWZpeF9zZWFyY2hfbm9kZV91cGRhdGVfaW1wLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgcHJlZml4X3NlYXJjaF9ub2RlX3VwZGF0ZS4KKyAqLworCitQQl9EU19DTEFTU19UX0RFQworc3RkOjpwYWlyPAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IsCisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcj4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK3ByZWZpeF9yYW5nZShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KSBjb25zdAoreworICBjb25zdCBhY2Nlc3NfdHJhaXRzJiByX3RyYWl0cyA9IGdldF9hY2Nlc3NfdHJhaXRzKCk7CisgIHJldHVybiAocHJlZml4X3JhbmdlKHJfdHJhaXRzLmJlZ2luKHJfa2V5KSwgcl90cmFpdHMuZW5kKHJfa2V5KSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworc3RkOjpwYWlyPAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IsCisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcj4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK3ByZWZpeF9yYW5nZShrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQoreworICByZXR1cm4gKHByZWZpeF9yYW5nZShnZXRfYWNjZXNzX3RyYWl0cygpLmJlZ2luKHJfa2V5KSwKKwkJICAgICAgIGdldF9hY2Nlc3NfdHJhaXRzKCkuZW5kKHJfa2V5KSkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworc3RkOjpwYWlyPAorICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IsCisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcj4KK1BCX0RTX0NMQVNTX0NfREVDOjoKK3ByZWZpeF9yYW5nZSh0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBiLAorCSAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgZSkgY29uc3QKK3sKKyAgY29uc3Qgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gbm9uX2NvbnN0X3JldCA9CisgICAgY29uc3RfY2FzdDxQQl9EU19DTEFTU19DX0RFQyogPih0aGlzKS0+cHJlZml4X3JhbmdlKGIsIGUpOworCisgIHJldHVybiAoc3RkOjptYWtlX3BhaXIoY29uc3RfaXRlcmF0b3Iobm9uX2NvbnN0X3JldC5maXJzdCksCisJCQkgY29uc3RfaXRlcmF0b3Iobm9uX2NvbnN0X3JldC5zZWNvbmQpKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitzdGQ6OnBhaXI8CisgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvciwKKyAgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Oml0ZXJhdG9yPgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorcHJlZml4X3JhbmdlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIGIsCisJICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlKQoreworICBOb2RlX0l0ciBuZF9pdCA9IG5vZGVfYmVnaW4oKTsKKyAgTm9kZV9JdHIgZW5kX25kX2l0ID0gbm9kZV9lbmQoKTsKKworICBjb25zdCBhY2Nlc3NfdHJhaXRzJiByX3RyYWl0cyA9IGdldF9hY2Nlc3NfdHJhaXRzKCk7CisgIGNvbnN0IHNpemVfdHlwZSBnaXZlbl9yYW5nZV9sZW5ndGggPSBzdGQ6OmRpc3RhbmNlKGIsIGUpOworCisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIGlmIChuZF9pdCA9PSBlbmRfbmRfaXQpCisJcmV0dXJuIChzdGQ6Om1ha2VfcGFpcihlbmQoKSwgZW5kKCkpKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIGNvbW1vbl9yYW5nZV9sZW5ndGggPQorCWJhc2VfdHlwZTo6Y29tbW9uX3ByZWZpeF9sZW4obmRfaXQsIGIsIGUsIHJfdHJhaXRzKTsKKworICAgICAgaWYgKGNvbW1vbl9yYW5nZV9sZW5ndGggPj0gZ2l2ZW5fcmFuZ2VfbGVuZ3RoKQorCXsKKwkgIGl0ZXJhdG9yIHJldF9iID0gdGhpcy0+bGVmdG1vc3RfaXQobmRfaXQpOworCSAgaXRlcmF0b3IgcmV0X2UgPSB0aGlzLT5yaWdodG1vc3RfaXQobmRfaXQpOworCSAgcmV0dXJuIChzdGQ6Om1ha2VfcGFpcihyZXRfYiwgKytyZXRfZSkpOworCX0KKyAgICAgIG5kX2l0ID0gbmV4dF9jaGlsZChuZF9pdCwgYiwgZSwgZW5kX25kX2l0LCByX3RyYWl0cyk7CisgICAgfQorfQorCitQQl9EU19DTEFTU19UX0RFQwordHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6Om5vZGVfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK25leHRfY2hpbGQobm9kZV9pdGVyYXRvciBuZF9pdCwgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgYiwKKwkgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzOjpjb25zdF9pdGVyYXRvciBlLCBub2RlX2l0ZXJhdG9yIGVuZF9uZF9pdCwKKwkgICBjb25zdCBhY2Nlc3NfdHJhaXRzJiByX3RyYWl0cykKK3sKKyAgY29uc3Qgc2l6ZV90eXBlIG51bV9jaGlsZHJlbiA9IG5kX2l0Lm51bV9jaGlsZHJlbigpOworICBub2RlX2l0ZXJhdG9yIHJldCA9IGVuZF9uZF9pdDsKKyAgc2l6ZV90eXBlIG1heF9sZW5ndGggPSAwOworICBmb3IgKHNpemVfdHlwZSBpID0gMDsgaSA8IG51bV9jaGlsZHJlbjsgKytpKQorICAgIHsKKyAgICAgIG5vZGVfaXRlcmF0b3IgcG90ID0gbmRfaXQuZ2V0X2NoaWxkKGkpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIGNvbW1vbl9yYW5nZV9sZW5ndGggPQorCWJhc2VfdHlwZTo6Y29tbW9uX3ByZWZpeF9sZW4ocG90LCBiLCBlLCByX3RyYWl0cyk7CisKKyAgICAgIGlmIChjb21tb25fcmFuZ2VfbGVuZ3RoID4gbWF4X2xlbmd0aCkKKwl7CisJICByZXQgPSBwb3Q7CisJICBtYXhfbGVuZ3RoID0gY29tbW9uX3JhbmdlX2xlbmd0aDsKKwl9CisgICAgfQorICByZXR1cm4gKHJldCk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdm9pZAorUEJfRFNfQ0xBU1NfQ19ERUM6Ogorb3BlcmF0b3IoKShub2RlX2l0ZXJhdG9yIC8qbmRfaXQqLywgbm9kZV9jb25zdF9pdGVyYXRvciAvKmVuZF9uZF9pdCovKSBjb25zdAoreyB9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvc2FtcGxlX3RyaWVfYWNjZXNzX3RyYWl0cy5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvc2FtcGxlX3RyaWVfYWNjZXNzX3RyYWl0cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllZjJjNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9zYW1wbGVfdHJpZV9hY2Nlc3NfdHJhaXRzLmhwcApAQCAtMCwwICsxLDc3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyaWVfcG9saWN5L3NhbXBsZV90cmllX2FjY2Vzc190cmFpdHMuaHBwCisgKiBDb250YWlucyBhIHNhbXBsZSBwcm9iZSBwb2xpY3kuCisgKi8KKworI2lmbmRlZiBQQl9EU19TQU1QTEVfVFJJRV9FX0FDQ0VTU19UUkFJVFNfSFBQCisjZGVmaW5lIFBCX0RTX1NBTVBMRV9UUklFX0VfQUNDRVNTX1RSQUlUU19IUFAKKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLy8vIEEgc2FtcGxlIHRyaWUgZWxlbWVudCBhY2Nlc3MgdHJhaXRzLgorICBzdHJ1Y3Qgc2FtcGxlX3RyaWVfYWNjZXNzX3RyYWl0cworICB7CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAJCSAgICAgICAJCXNpemVfdHlwZTsKKyAgICB0eXBlZGVmIHN0ZDo6c3RyaW5nIAkJCSAgICAgICAJa2V5X3R5cGU7CisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGtleV90eXBlPglfX3JlYmluZF9rOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfazo6b3RoZXI6OmNvbnN0X3JlZmVyZW5jZQlrZXlfY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgc3RkOjpzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIAkJY29uc3RfaXRlcmF0b3I7CisKKyAgICAvLy8gRWxlbWVudCB0eXBlLgorICAgIHR5cGVkZWYgY2hhciAJCQkJICAgICAgIAllX3R5cGU7CisKKyAgICBlbnVtCisgICAgICB7CisJbWF4X3NpemUgPSA0CisgICAgICB9OworCisgICAgLy8vIFJldHVybnMgYSBjb25zdF9pdGVyYXRvciB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiByX2tleS4KKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0X2l0ZXJhdG9yCisgICAgYmVnaW4oa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAvLy8gUmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZSBhZnRlci1sYXN0IGVsZW1lbnQgb2Ygcl9rZXkuCisgICAgaW5saW5lIHN0YXRpYyBjb25zdF9pdGVyYXRvcgorICAgIGVuZChrZXlfY29uc3RfcmVmZXJlbmNlKTsKKworICAgIC8vLyBNYXBzIGFuIGVsZW1lbnQgdG8gYSBwb3NpdGlvbi4KKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdHlwZQorICAgIGVfcG9zKGVfdHlwZSk7CisgIH07Cit9CisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19TQU1QTEVfVFJJRV9FX0FDQ0VTU19UUkFJVFNfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvc2FtcGxlX3RyaWVfbm9kZV91cGRhdGUuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3NhbXBsZV90cmllX25vZGVfdXBkYXRlLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQ0ODdlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3NhbXBsZV90cmllX25vZGVfdXBkYXRlLmhwcApAQCAtMCwwICsxLDY0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyaWVfcG9saWN5L3NhbXBsZV90cmllX25vZGVfdXBkYXRlLmhwcAorICogQ29udGFpbnMgYSBzYW1sZSBub2RlIHVwZGF0ZSBmdW5jdG9yLgorICovCisKKyNpZm5kZWYgUEJfRFNfU0FNUExFX1RSSUVfTk9ERV9VUERBVE9SX0hQUAorI2RlZmluZSBQQl9EU19TQU1QTEVfVFJJRV9OT0RFX1VQREFUT1JfSFBQCisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIC8vLyBBIHNhbXBsZSBub2RlIHVwZGF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfQ0l0ciwgdHlwZW5hbWUgTm9kZV9JdHIsCisJICAgdHlwZW5hbWUgX0FUcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgY2xhc3Mgc2FtcGxlX3RyaWVfbm9kZV91cGRhdGUKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAJCW1ldGFkYXRhX3R5cGU7CisKKyAgcHJvdGVjdGVkOgorICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgIHNhbXBsZV90cmllX25vZGVfdXBkYXRlKCk7CisKKyAgICAvLy8gVXBkYXRlcyB0aGUgcmFuayBvZiBhIG5vZGUgdGhyb3VnaCBhIG5vZGVfaXRlcmF0b3Igbm9kZV9pdDsKKyAgICAvLy8gZW5kX25kX2l0IGlzIHRoZSBlbmQgbm9kZSBpdGVyYXRvci4KKyAgICBpbmxpbmUgdm9pZAorICAgIG9wZXJhdG9yKCkobm9kZV9pdGVyYXRvciwgbm9kZV9jb25zdF9pdGVyYXRvcikgY29uc3Q7CisgIH07Cit9CisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19TQU1QTEVfVFJJRV9OT0RFX1VQREFUT1JfSFBQCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvdHJpZV9wb2xpY3lfYmFzZS5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvdHJpZV9wb2xpY3lfYmFzZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxYzRhOQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS90cmllX3BvbGljeV9iYXNlLmhwcApAQCAtMCwwICsxLDIwNyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmllX3BvbGljeS90cmllX3BvbGljeV9iYXNlLmhwcAorICogQ29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgdHJpZV9wb2xpY3lfYmFzZS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1RSSUVfUE9MSUNZX0JBU0VfSFBQCisjZGVmaW5lIFBCX0RTX1RSSUVfUE9MSUNZX0JBU0VfSFBQCisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2JyYW5jaF9wb2xpY3kvYnJhbmNoX3BvbGljeS5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBCYXNlIGNsYXNzIGZvciB0cmllIHBvbGljaWVzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfQ0l0ciwgdHlwZW5hbWUgTm9kZV9JdHIsCisJICAgICB0eXBlbmFtZSBfQVRyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIHRyaWVfcG9saWN5X2Jhc2UKKyAgICA6IHB1YmxpYyBicmFuY2hfcG9saWN5PE5vZGVfQ0l0ciwgTm9kZV9JdHIsIF9BbGxvYz4KKyAgICB7CisgICAgICB0eXBlZGVmIGJyYW5jaF9wb2xpY3k8Tm9kZV9DSXRyLCBOb2RlX0l0ciwgX0FsbG9jPiBiYXNlX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9BVHJhaXRzIAkJCQlhY2Nlc3NfdHJhaXRzOworICAgICAgdHlwZWRlZiBfQWxsb2MgCQkJCQlhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnNpemVfdHlwZSAJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBudWxsX3R5cGUgCQkJCW1ldGFkYXRhX3R5cGU7CisgICAgICB0eXBlZGVmIE5vZGVfQ0l0ciAJCQkJbm9kZV9jb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgTm9kZV9JdHIgCQkJCQlub2RlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX2NvbnN0X2l0ZXJhdG9yOjp2YWx1ZV90eXBlIAljb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9pdGVyYXRvcjo6dmFsdWVfdHlwZSAJaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6a2V5X3R5cGUgCQlrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjprZXlfY29uc3RfcmVmZXJlbmNlIAlrZXlfY29uc3RfcmVmZXJlbmNlOworCisgICAgcHJvdGVjdGVkOgorICAgICAgdmlydHVhbCBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgPSAwOworCisgICAgICB2aXJ0dWFsIGl0ZXJhdG9yCisgICAgICBlbmQoKSA9IDA7CisKKyAgICAgIHZpcnR1YWwgbm9kZV9jb25zdF9pdGVyYXRvcgorICAgICAgbm9kZV9iZWdpbigpIGNvbnN0ID0gMDsKKworICAgICAgdmlydHVhbCBub2RlX2l0ZXJhdG9yCisgICAgICBub2RlX2JlZ2luKCkgPSAwOworCisgICAgICB2aXJ0dWFsIG5vZGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG5vZGVfZW5kKCkgY29uc3QgPSAwOworCisgICAgICB2aXJ0dWFsIG5vZGVfaXRlcmF0b3IKKyAgICAgIG5vZGVfZW5kKCkgPSAwOworCisgICAgICB2aXJ0dWFsIGNvbnN0IGFjY2Vzc190cmFpdHMmCisgICAgICBnZXRfYWNjZXNzX3RyYWl0cygpIGNvbnN0ID0gMDsKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIAllX2NvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8ZV9jb25zdF9pdGVyYXRvciwgZV9jb25zdF9pdGVyYXRvcj4gcHJlZml4X3JhbmdlX3Q7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBzdGF0aWMgc2l6ZV90eXBlCisgICAgICBjb21tb25fcHJlZml4X2xlbihub2RlX2l0ZXJhdG9yLCBlX2NvbnN0X2l0ZXJhdG9yLAorCQkJZV9jb25zdF9pdGVyYXRvciwgY29uc3QgYWNjZXNzX3RyYWl0cyYpOworCisgICAgICBzdGF0aWMgaXRlcmF0b3IKKyAgICAgIGxlZnRtb3N0X2l0KG5vZGVfaXRlcmF0b3IpOworCisgICAgICBzdGF0aWMgaXRlcmF0b3IKKyAgICAgIHJpZ2h0bW9zdF9pdChub2RlX2l0ZXJhdG9yKTsKKworICAgICAgc3RhdGljIGJvb2wKKyAgICAgIGxlc3MoZV9jb25zdF9pdGVyYXRvciwgZV9jb25zdF9pdGVyYXRvciwgZV9jb25zdF9pdGVyYXRvciwKKwkgICBlX2NvbnN0X2l0ZXJhdG9yLCBjb25zdCBhY2Nlc3NfdHJhaXRzJik7CisgICAgfTsKKworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsIHR5cGVuYW1lIE5vZGVfSXRyLCBcCisJICAgICB0eXBlbmFtZSBfQVRyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgICB0cmllX3BvbGljeV9iYXNlPE5vZGVfQ0l0ciwgTm9kZV9JdHIsIF9BVHJhaXRzLCBfQWxsb2M+CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpzaXplX3R5cGUKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgY29tbW9uX3ByZWZpeF9sZW4obm9kZV9pdGVyYXRvciBuZF9pdCwgZV9jb25zdF9pdGVyYXRvciBiX3IsCisJCSAgICAgIGVfY29uc3RfaXRlcmF0b3IgZV9yLCBjb25zdCBhY2Nlc3NfdHJhaXRzJiByX3RyYWl0cykKKyAgICB7CisgICAgICBwcmVmaXhfcmFuZ2VfdCBwcmVmX3JhbmdlID0gbmRfaXQudmFsaWRfcHJlZml4KCk7CisKKyAgICAgIGVfY29uc3RfaXRlcmF0b3IgYl9sID0gcHJlZl9yYW5nZS5maXJzdDsKKyAgICAgIGVfY29uc3RfaXRlcmF0b3IgZV9sID0gcHJlZl9yYW5nZS5zZWNvbmQ7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSByYW5nZV9sZW5ndGhfbCA9IHN0ZDo6ZGlzdGFuY2UoYl9sLCBlX2wpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIHJhbmdlX2xlbmd0aF9yID0gc3RkOjpkaXN0YW5jZShiX3IsIGVfcik7CisKKyAgICAgIGlmIChyYW5nZV9sZW5ndGhfciA8IHJhbmdlX2xlbmd0aF9sKQorCXsKKwkgIHN0ZDo6c3dhcChiX2wsIGJfcik7CisJICBzdGQ6OnN3YXAoZV9sLCBlX3IpOworCX0KKworICAgICAgc2l6ZV90eXBlIHJldCA9IDA7CisgICAgICB3aGlsZSAoYl9sICE9IGVfbCkKKwl7CisJICBpZiAocl90cmFpdHMuZV9wb3MoKmJfbCkgIT0gcl90cmFpdHMuZV9wb3MoKmJfcikpCisJICAgIHJldHVybiByZXQ7CisKKwkgICsrcmV0OworCSAgKytiX2w7CisJICArK2JfcjsKKwl9CisKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6aXRlcmF0b3IKKyAgICBQQl9EU19DTEFTU19DX0RFQzo6CisgICAgbGVmdG1vc3RfaXQobm9kZV9pdGVyYXRvciBuZF9pdCkKKyAgICB7CisgICAgICBpZiAobmRfaXQubnVtX2NoaWxkcmVuKCkgPT0gMCkKKwlyZXR1cm4gKm5kX2l0OworCisgICAgICByZXR1cm4gbGVmdG1vc3RfaXQobmRfaXQuZ2V0X2NoaWxkKDApKTsKKyAgICB9CisKKyAgICBQQl9EU19DTEFTU19UX0RFQworICAgIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjppdGVyYXRvcgorICAgIFBCX0RTX0NMQVNTX0NfREVDOjoKKyAgICByaWdodG1vc3RfaXQobm9kZV9pdGVyYXRvciBuZF9pdCkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgbnVtX2NoaWxkcmVuID0gbmRfaXQubnVtX2NoaWxkcmVuKCk7CisKKyAgICAgIGlmIChudW1fY2hpbGRyZW4gPT0gMCkKKwlyZXR1cm4gKm5kX2l0OworCisgICAgICByZXR1cm4gcmlnaHRtb3N0X2l0KG5kX2l0LmdldF9jaGlsZChudW1fY2hpbGRyZW4gLSAxKSk7CisgICAgfQorCisgICAgUEJfRFNfQ0xBU1NfVF9ERUMKKyAgICBib29sCisgICAgUEJfRFNfQ0xBU1NfQ19ERUM6OgorICAgIGxlc3MoZV9jb25zdF9pdGVyYXRvciBiX2wsIGVfY29uc3RfaXRlcmF0b3IgZV9sLAorCSBlX2NvbnN0X2l0ZXJhdG9yIGJfciwgZV9jb25zdF9pdGVyYXRvciBlX3IsCisJIGNvbnN0IGFjY2Vzc190cmFpdHMmIHJfdHJhaXRzKQorICAgIHsKKyAgICAgIHdoaWxlIChiX2wgIT0gZV9sKQorCXsKKwkgIGlmIChiX3IgPT0gZV9yKQorCSAgICByZXR1cm4gZmFsc2U7CisKKwkgIHNpemVfdHlwZSBsX3BvcyA9IHJfdHJhaXRzLmVfcG9zKCpiX2wpOworCSAgc2l6ZV90eXBlIHJfcG9zID0gcl90cmFpdHMuZV9wb3MoKmJfcik7CisJICBpZiAobF9wb3MgIT0gcl9wb3MpCisJICAgIHJldHVybiAobF9wb3MgPCByX3Bvcyk7CisKKwkgICsrYl9sOworCSAgKytiX3I7CisJfQorICAgICAgcmV0dXJuIGJfciAhPSBlX3I7CisgICAgfQorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgLy8gI2lmbmRlZiBQQl9EU19UUklFX1BPTElDWV9CQVNFX0hQUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3RyaWVfc3RyaW5nX2FjY2Vzc190cmFpdHNfaW1wLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS90cmllX3N0cmluZ19hY2Nlc3NfdHJhaXRzX2ltcC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2MmRjMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS90cmllX3N0cmluZ19hY2Nlc3NfdHJhaXRzX2ltcC5ocHAKQEAgLTAsMCArMSw5OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0cmllX3BvbGljeS90cmllX3N0cmluZ19hY2Nlc3NfdHJhaXRzX2ltcC5ocHAKKyAqIENvbnRhaW5zIGEgcG9saWN5IGZvciBleHRyYWN0aW5nIGNoYXJhY3RlciBwb3NpdGlvbnMgZnJvbQorICogICAgYSBzdHJpbmcgZm9yIGEgdmVjdG9yLWJhc2VkIFBBVFJJQ0lBIHRyZWUKKyAqLworCitQQl9EU19DTEFTU19UX0RFQworZGV0YWlsOjppbnRlZ3JhbF9jb25zdGFudDxpbnQsIFJldmVyc2U+IFBCX0RTX0NMQVNTX0NfREVDOjpzX3Jldl9pbmQ7CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OnNpemVfdHlwZQorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZV9wb3MoZV90eXBlIGUpCit7CisgIHJldHVybiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihlIC0gbWluX2VfdmFsKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbihrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5KQoreworICByZXR1cm4gKGJlZ2luX2ltcChyX2tleSwgc19yZXZfaW5kKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitlbmQoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSkKK3sKKyAgcmV0dXJuIChlbmRfaW1wKHJfa2V5LCBzX3Jldl9pbmQpKTsKK30KKworUEJfRFNfQ0xBU1NfVF9ERUMKK2lubGluZSB0eXBlbmFtZSBQQl9EU19DTEFTU19DX0RFQzo6Y29uc3RfaXRlcmF0b3IKK1BCX0RTX0NMQVNTX0NfREVDOjoKK2JlZ2luX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5LCBkZXRhaWw6OmZhbHNlX3R5cGUpCit7CisgIHJldHVybiAocl9rZXkuYmVnaW4oKSk7Cit9CisKK1BCX0RTX0NMQVNTX1RfREVDCitpbmxpbmUgdHlwZW5hbWUgUEJfRFNfQ0xBU1NfQ19ERUM6OmNvbnN0X2l0ZXJhdG9yCitQQl9EU19DTEFTU19DX0RFQzo6CitiZWdpbl9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSByX2tleSwgZGV0YWlsOjp0cnVlX3R5cGUpCit7CisgIHJldHVybiAocl9rZXkucmJlZ2luKCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW5kX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5LCBkZXRhaWw6OmZhbHNlX3R5cGUpCit7CisgIHJldHVybiAocl9rZXkuZW5kKCkpOworfQorCitQQl9EU19DTEFTU19UX0RFQworaW5saW5lIHR5cGVuYW1lIFBCX0RTX0NMQVNTX0NfREVDOjpjb25zdF9pdGVyYXRvcgorUEJfRFNfQ0xBU1NfQ19ERUM6OgorZW5kX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlIHJfa2V5LCBkZXRhaWw6OnRydWVfdHlwZSkKK3sKKyAgcmV0dXJuIChyX2tleS5yZW5kKCkpOworfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDYxMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHAKQEAgLTAsMCArMSwxNjcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZGV0YWlsL3R5cGVfdXRpbHMuaHBwCisgKiBDb250YWlucyB1dGlsaXRpZXMgZm9yIGhhbmRubGluZyB0eXBlcy4gQWxsIG9mIHRoZXNlIGNsYXNzZXMgYXJlIGJhc2VkIG9uCisgKiBNb2Rlcm4gQysrIGJ5IEFuZHJlaSBBbHhhbmRyZXNjdS4KKyAqLworCisjaWZuZGVmIFBCX0RTX1RZUEVfVVRJTFNfSFBQCisjZGVmaW5lIFBCX0RTX1RZUEVfVVRJTFNfSFBQCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dHIxL3R5cGVfdHJhaXRzPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC9udW1lcmljX3RyYWl0cy5oPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICB1c2luZyBzdGQ6OnRyMTo6aXNfc2FtZTsKKyAgICB1c2luZyBzdGQ6OnRyMTo6aXNfY29uc3Q7CisgICAgdXNpbmcgc3RkOjp0cjE6OmlzX3BvaW50ZXI7CisgICAgdXNpbmcgc3RkOjp0cjE6OmlzX3JlZmVyZW5jZTsKKyAgICB1c2luZyBzdGQ6OnRyMTo6aXNfZnVuZGFtZW50YWw7CisgICAgdXNpbmcgc3RkOjp0cjE6OmlzX21lbWJlcl9vYmplY3RfcG9pbnRlcjsKKyAgICB1c2luZyBzdGQ6OnRyMTo6aXNfbWVtYmVyX3BvaW50ZXI7CisgICAgdXNpbmcgc3RkOjp0cjE6OmlzX2Jhc2Vfb2Y7CisgICAgdXNpbmcgc3RkOjp0cjE6OnJlbW92ZV9jb25zdDsKKyAgICB1c2luZyBzdGQ6OnRyMTo6cmVtb3ZlX3JlZmVyZW5jZTsKKworICAgIC8vIE5lZWQgaW50ZWdyYWxfY29uc3Q8Ym9vbCwgdHJ1ZT4gPC0+IGludGVncmFsX2NvbnN0PGludCwgMT4sIHNvCisgICAgLy8gYmVjYXVzZSBvZiB0aGlzIHVzZSB0aGUgZm9sbG93aW5nIHR5cGVkZWZzIGluc3RlYWQgb2YgaW1wb3J0aW5nCisgICAgLy8gc3RkOjp0cjEncy4KKyAgICB1c2luZyBzdGQ6OnRyMTo6aW50ZWdyYWxfY29uc3RhbnQ7CisgICAgdHlwZWRlZiBzdGQ6OnRyMTo6aW50ZWdyYWxfY29uc3RhbnQ8aW50LCAxPiB0cnVlX3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6OnRyMTo6aW50ZWdyYWxfY29uc3RhbnQ8aW50LCAwPiBmYWxzZV90eXBlOworCisgICAgdXNpbmcgX19nbnVfY3h4OjpfX2NvbmRpdGlvbmFsX3R5cGU7CisgICAgdXNpbmcgX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgaXNfY29uc3RfcG9pbnRlcgorICAgIHsKKyAgICAgIGVudW0KKwl7CisJICB2YWx1ZSA9IGlzX2NvbnN0PFQ+Ojp2YWx1ZSAmJiBpc19wb2ludGVyPFQ+Ojp2YWx1ZQorCX07CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX2NvbnN0X3JlZmVyZW5jZQorICAgIHsKKyAgICAgIGVudW0KKwl7CisJICB2YWx1ZSA9IGlzX2NvbnN0PFQ+Ojp2YWx1ZSAmJiBpc19yZWZlcmVuY2U8VD46OnZhbHVlCisJfTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgaXNfc2ltcGxlCisgICAgeworICAgICAgZW51bQorCXsKKwkgIHZhbHVlID0gaXNfZnVuZGFtZW50YWw8dHlwZW5hbWUgcmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlPjo6dmFsdWUgCisJICB8fCBpc19wb2ludGVyPHR5cGVuYW1lIHJlbW92ZV9jb25zdDxUPjo6dHlwZT46OnZhbHVlIAorCSAgfHwgaXNfbWVtYmVyX3BvaW50ZXI8VD46OnZhbHVlIAorCX07CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgaXNfcGFpcgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICAgIHN0cnVjdCBpc19wYWlyX2ltcAorICAgICAgeworCWVudW0KKwkgIHsKKwkgICAgdmFsdWUgPSAwCisJICB9OworICAgICAgfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KKyAgICAgIHN0cnVjdCBpc19wYWlyX2ltcDxzdGQ6OnBhaXI8VSxWPiA+CisgICAgICB7CisJZW51bQorCSAgeworCSAgICB2YWx1ZSA9IDEKKwkgIH07CisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgZW51bQorCXsKKwkgIHZhbHVlID0gaXNfcGFpcl9pbXA8VD46OnZhbHVlCisJfTsKKyAgICB9OworCisgICAgLy8gVXNlIEMrKzB4J3Mgc3RhdGljX2Fzc2VydCBpZiBwb3NzaWJsZS4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjZGVmaW5lIFBCX0RTX1NUQVRJQ19BU1NFUlQoVU5JUVVFLCBFKSAgc3RhdGljX2Fzc2VydChFLCAjVU5JUVVFKQorI2Vsc2UKKyAgICB0ZW1wbGF0ZTxib29sPgorICAgIHN0cnVjdCBfX3N0YXRpY19hc3NlcnQ7CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fc3RhdGljX2Fzc2VydDx0cnVlPgorICAgIHsgfTsKKworICAgIHRlbXBsYXRlPGludD4KKyAgICBzdHJ1Y3QgX19zdGF0aWNfYXNzZXJ0X2R1bWNsYXNzCisgICAgeworICAgICAgZW51bQorCXsKKwkgIHYgPSAxCisJfTsKKyAgICB9OworCisjZGVmaW5lIFBCX0RTX1NUQVRJQ19BU1NFUlQoVU5JUVVFLCBFKSAgXAorICAgIHR5cGVkZWYgX19nbnVfcGJkczo6ZGV0YWlsOjpfX3N0YXRpY19hc3NlcnRfZHVtY2xhc3M8c2l6ZW9mKF9fZ251X3BiZHM6OmRldGFpbDo6X19zdGF0aWNfYXNzZXJ0PGJvb2woRSk+KT4gVU5JUVVFIyNfX3N0YXRpY19hc3NlcnRfdHlwZQorCisjZW5kaWYKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CisgICAgc3RydWN0IHR5cGVfdG9fdHlwZQorICAgIHsKKyAgICAgIHR5cGVkZWYgVHlwZSB0eXBlOworICAgIH07CisgIH0gLy8gbmFtZXNwYWNlIGRldGFpbAorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC90eXBlc190cmFpdHMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDVhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdHlwZXNfdHJhaXRzLmhwcApAQCAtMCwwICsxLDI4OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBkZXRhaWwvdHlwZXNfdHJhaXRzLmhwcAorICogQ29udGFpbnMgYSB0cmFpdHMgY2xhc3Mgb2YgdHlwZXMgdXNlZCBieSBjb250YWluZXJzLgorICovCisKKyNpZm5kZWYgUEJfRFNfVFlQRVNfVFJBSVRTX0hQUAorI2RlZmluZSBQQl9EU19UWVBFU19UUkFJVFNfSFBQCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxleHQvcGJfZHMvdGFnX2FuZF90cmFpdC5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICBuYW1lc3BhY2UgZGV0YWlsCisgIHsKKyAgICAvKioKKyAgICAgKiAgQGFkZHRvZ3JvdXAgdHJhaXRzIFRyYWl0cworICAgICAqICBAeworICAgICAqLworCisgICAgLy8vIFByaW1hcnkgdGVtcGxhdGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQ+CisgICAgICBzdHJ1Y3Qgbm9fdGhyb3dfY29waWVzCisgICAgICB7CisJc3RhdGljIGNvbnN0IGJvb2wgX19zaW1wbGUgPSBpc19zaW1wbGU8S2V5Pjo6dmFsdWUKKwkJCSAgIAkgJiYgaXNfc2ltcGxlPE1hcHBlZD46OnZhbHVlOworCXR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBfX3NpbXBsZT4gCSAgICAgICAJaW5kaWNhdG9yOworICAgICAgfTsKKworICAgIC8vLyBTcGVjaWFsaXphdGlvbi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXk+CisgICAgICBzdHJ1Y3Qgbm9fdGhyb3dfY29waWVzPEtleSwgbnVsbF90eXBlPgorICAgICAgeworCXR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBpc19zaW1wbGU8S2V5Pjo6dmFsdWU+IAlpbmRpY2F0b3I7CisgICAgICB9OworCisKKyAgICAvLy8gU3RvcmVkIHZhbHVlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKyAgICAgIHN0cnVjdCBzdG9yZWRfdmFsdWUKKyAgICAgIHsKKwl0eXBlZGVmIF9UdiAJdmFsdWVfdHlwZTsKKwl2YWx1ZV90eXBlIAltX3ZhbHVlOworICAgICAgfTsKKworICAgIC8vLyBTdG9yZWQgaGFzaC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVGg+CisgICAgICBzdHJ1Y3Qgc3RvcmVkX2hhc2gKKyAgICAgIHsKKwl0eXBlZGVmIF9UaCAJaGFzaF90eXBlOworCWhhc2hfdHlwZSAJbV9oYXNoOworICAgICAgfTsKKworICAgIC8vLyBQcmltYXJ5IHRlbXBsYXRlIGZvciByZXByZXNlbnRhdGlvbiBvZiBzdG9yZWQgZGF0YS4KKyAgICAvLy8gVHdvIHR5cGVzIG9mIGRhdGEgY2FuIGJlIHN0b3JlZDogdmFsdWUgYW5kIGhhc2guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2LCB0eXBlbmFtZSBfVGg+CisgICAgICBzdHJ1Y3Qgc3RvcmVkX2RhdGEKKyAgICAgIDogcHVibGljIHN0b3JlZF92YWx1ZTxfVHY+LCBwdWJsaWMgc3RvcmVkX2hhc2g8X1RoPgorICAgICAgeyB9OworCisgICAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciByZXByZXNlbnRhdGlvbiBvZiBzdG9yZWQgZGF0YSBvZiBqdXN0IHZhbHVlIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorICAgICAgc3RydWN0IHN0b3JlZF9kYXRhPF9UdiwgbnVsbF90eXBlPgorICAgICAgOiBwdWJsaWMgc3RvcmVkX3ZhbHVlPF9Udj4KKyAgICAgIHsgfTsKKworICAgIC8vLyBQcmltYXJ5IHRlbXBsYXRlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wgU3RvcmVfSGFzaD4KKyAgICAgIHN0cnVjdCB0eXBlX2Jhc2U7CisKKyAgICAvKioKKyAgICAgKiBTcGVjaWFsaXphdGlvbiBvZiB0eXBlX2Jhc2UgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBoYXNoIHZhbHVlCisgICAgICogaXMgbm90IHN0b3JlZCBhbG9uZ3NpZGUgZWFjaCB2YWx1ZS4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgc3RydWN0IHR5cGVfYmFzZTxLZXksIE1hcHBlZCwgX0FsbG9jLCBmYWxzZT4KKyAgICAgIHsKKyAgICAgIHB1YmxpYzoKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworCisgICAgICBwcml2YXRlOgorCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8TWFwcGVkPglfX3JlYmluZF9tOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbTo6b3RoZXIJCQlfX3JlYmluZF9tYTsKKwl0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBLZXksIE1hcHBlZD4JCQlfX3ZhbHVlX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfX3ZhbHVlX3R5cGU+CV9fcmViaW5kX3Y7CisgICAgICAgCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdjo6b3RoZXIJCQlfX3JlYmluZF92YTsKKworICAgICAgcHVibGljOgorCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OnZhbHVlX3R5cGUgICAgICAgCW1hcHBlZF90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OnBvaW50ZXIgCQltYXBwZWRfcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX21hOjpjb25zdF9wb2ludGVyIAltYXBwZWRfY29uc3RfcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX21hOjpyZWZlcmVuY2UJICAgICAgIAltYXBwZWRfcmVmZXJlbmNlOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OmNvbnN0X3JlZmVyZW5jZSAJbWFwcGVkX2NvbnN0X3JlZmVyZW5jZTsKKworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdmE6OnZhbHVlX3R5cGUgCXZhbHVlX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6cG9pbnRlciAJCXBvaW50ZXI7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpyZWZlcmVuY2UgCXJlZmVyZW5jZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpjb25zdF9yZWZlcmVuY2UgCWNvbnN0X3JlZmVyZW5jZTsKKworCXR5cGVkZWYgc3RvcmVkX2RhdGE8dmFsdWVfdHlwZSwgbnVsbF90eXBlPglzdG9yZWRfZGF0YV90eXBlOworICAgICAgfTsKKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIG9mIHR5cGVfYmFzZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGhhc2ggdmFsdWUKKyAgICAgKiBpcyBzdG9yZWQgYWxvbmdzaWRlIGVhY2ggdmFsdWUuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgIHN0cnVjdCB0eXBlX2Jhc2U8S2V5LCBNYXBwZWQsIF9BbGxvYywgdHJ1ZT4KKyAgICAgIHsKKyAgICAgIHB1YmxpYzoKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworCisgICAgICBwcml2YXRlOgorCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8TWFwcGVkPglfX3JlYmluZF9tOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbTo6b3RoZXIJCQlfX3JlYmluZF9tYTsKKwl0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBLZXksIE1hcHBlZD4JCQlfX3ZhbHVlX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfX3ZhbHVlX3R5cGU+CV9fcmViaW5kX3Y7CisgICAgICAgCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdjo6b3RoZXIJCQlfX3JlYmluZF92YTsKKworICAgICAgcHVibGljOgorCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OnZhbHVlX3R5cGUgICAgICAgCW1hcHBlZF90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OnBvaW50ZXIgCQltYXBwZWRfcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX21hOjpjb25zdF9wb2ludGVyIAltYXBwZWRfY29uc3RfcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX21hOjpyZWZlcmVuY2UJICAgICAgIAltYXBwZWRfcmVmZXJlbmNlOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OmNvbnN0X3JlZmVyZW5jZSAJbWFwcGVkX2NvbnN0X3JlZmVyZW5jZTsKKworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdmE6OnZhbHVlX3R5cGUgCXZhbHVlX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6cG9pbnRlciAJCXBvaW50ZXI7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpyZWZlcmVuY2UgCXJlZmVyZW5jZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpjb25zdF9yZWZlcmVuY2UgCWNvbnN0X3JlZmVyZW5jZTsKKworCXR5cGVkZWYgc3RvcmVkX2RhdGE8dmFsdWVfdHlwZSwgc2l6ZV90eXBlPglzdG9yZWRfZGF0YV90eXBlOworICAgICAgfTsKKworCisgICAgLyoqCisgICAgICogU3BlY2lhbGl6YXRpb24gb2YgdHlwZV9iYXNlIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgaGFzaCB2YWx1ZQorICAgICAqIGlzIG5vdCBzdG9yZWQgYWxvbmdzaWRlIGVhY2ggdmFsdWUuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBfQWxsb2M+CisgICAgICBzdHJ1Y3QgdHlwZV9iYXNlPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIGZhbHNlPgorICAgICAgeworICAgICAgcHVibGljOgorCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgCQlzaXplX3R5cGU7CisJdHlwZWRlZiBLZXkgCQkJCQl2YWx1ZV90eXBlOworCisgICAgICBwcml2YXRlOgorCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8bnVsbF90eXBlPiAgCV9fcmViaW5kX207CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9tOjpvdGhlcgkJCV9fcmViaW5kX21hOworCXR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8dmFsdWVfdHlwZT4JX19yZWJpbmRfdjsKKyAgICAgICAJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92OjpvdGhlcgkJCV9fcmViaW5kX3ZhOworCisgICAgICBwdWJsaWM6CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9tYTo6dmFsdWVfdHlwZSAgICAgICAJbWFwcGVkX3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9tYTo6cG9pbnRlciAJCW1hcHBlZF9wb2ludGVyOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OmNvbnN0X3BvaW50ZXIgCW1hcHBlZF9jb25zdF9wb2ludGVyOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OnJlZmVyZW5jZQkgICAgICAgCW1hcHBlZF9yZWZlcmVuY2U7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9tYTo6Y29uc3RfcmVmZXJlbmNlIAltYXBwZWRfY29uc3RfcmVmZXJlbmNlOworCisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6cG9pbnRlciAJCXBvaW50ZXI7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpyZWZlcmVuY2UgCXJlZmVyZW5jZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpjb25zdF9yZWZlcmVuY2UgCWNvbnN0X3JlZmVyZW5jZTsKKworCXR5cGVkZWYgc3RvcmVkX2RhdGE8dmFsdWVfdHlwZSwgbnVsbF90eXBlPglzdG9yZWRfZGF0YV90eXBlOworCisJc3RhdGljIG51bGxfdHlwZSAJCQlzX251bGxfdHlwZTsKKyAgICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgIG51bGxfdHlwZQorICAgICAgdHlwZV9iYXNlPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIGZhbHNlPjo6c19udWxsX3R5cGU7CisKKworICAgIC8qKgorICAgICAqIFNwZWNpYWxpemF0aW9uIG9mIHR5cGVfYmFzZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGhhc2ggdmFsdWUKKyAgICAgKiBpcyBzdG9yZWQgYWxvbmdzaWRlIGVhY2ggdmFsdWUuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBfQWxsb2M+CisgICAgICBzdHJ1Y3QgdHlwZV9iYXNlPEtleSwgbnVsbF90eXBlLCBfQWxsb2MsIHRydWU+CisgICAgICB7CisgICAgICBwdWJsaWM6CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSAJCXNpemVfdHlwZTsKKwl0eXBlZGVmIEtleSAJCQkJCXZhbHVlX3R5cGU7CisKKyAgICAgIHByaXZhdGU6CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxudWxsX3R5cGU+ICAJX19yZWJpbmRfbTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX206Om90aGVyCQkJX19yZWJpbmRfbWE7CisJdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDx2YWx1ZV90eXBlPglfX3JlYmluZF92OworICAgICAgIAl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3Y6Om90aGVyCQkJX19yZWJpbmRfdmE7CisKKyAgICAgIHB1YmxpYzoKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX21hOjp2YWx1ZV90eXBlICAgICAgIAltYXBwZWRfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX21hOjpwb2ludGVyIAkJbWFwcGVkX3BvaW50ZXI7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9tYTo6Y29uc3RfcG9pbnRlciAJbWFwcGVkX2NvbnN0X3BvaW50ZXI7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9tYTo6cmVmZXJlbmNlCSAgICAgICAJbWFwcGVkX3JlZmVyZW5jZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX21hOjpjb25zdF9yZWZlcmVuY2UgCW1hcHBlZF9jb25zdF9yZWZlcmVuY2U7CisKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpwb2ludGVyIAkJcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpjb25zdF9wb2ludGVyIAljb25zdF9wb2ludGVyOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdmE6OnJlZmVyZW5jZSAJcmVmZXJlbmNlOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdmE6OmNvbnN0X3JlZmVyZW5jZSAJY29uc3RfcmVmZXJlbmNlOworCisJdHlwZWRlZiBzdG9yZWRfZGF0YTx2YWx1ZV90eXBlLCBzaXplX3R5cGU+CXN0b3JlZF9kYXRhX3R5cGU7CisKKwlzdGF0aWMgbnVsbF90eXBlIAkJICAgICAgCXNfbnVsbF90eXBlOworICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgbnVsbF90eXBlCisgICAgICB0eXBlX2Jhc2U8S2V5LCBudWxsX3R5cGUsIF9BbGxvYywgdHJ1ZT46OnNfbnVsbF90eXBlOworCisKKyAgICAvLy8gVHlwZSBiYXNlIGRpc3BhdGNoLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wgU3RvcmVfSGFzaD4KKyAgICAgIHN0cnVjdCB0eXBlX2Rpc3BhdGNoCisgICAgICB7CisJdHlwZWRlZiB0eXBlX2Jhc2U8S2V5LCBNYXBwZWQsIF9BbGxvYywgU3RvcmVfSGFzaD4gdHlwZTsKKyAgICAgIH07CisKKyAgICAvLy8gVHJhaXRzIGZvciBhYnN0cmFjdCB0eXBlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgX0FsbG9jLCBib29sIFN0b3JlX0hhc2g+CisgICAgICBzdHJ1Y3QgdHlwZXNfdHJhaXRzCisgICAgICA6IHB1YmxpYyB0eXBlX2Rpc3BhdGNoPEtleSwgTWFwcGVkLCBfQWxsb2MsIFN0b3JlX0hhc2g+Ojp0eXBlCisgICAgICB7CisgICAgICBwcml2YXRlOgorCXR5cGVkZWYgbm9fdGhyb3dfY29waWVzPEtleSwgTWFwcGVkPgkJX19ub3Rocm93Y29weTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPEtleT46Om90aGVyIF9fcmViaW5kX2E7CisKKyAgICAgIHB1YmxpYzoKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfYTo6dmFsdWVfdHlwZSAJa2V5X3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hOjpwb2ludGVyIAkJa2V5X3BvaW50ZXI7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hOjpjb25zdF9wb2ludGVyIAlrZXlfY29uc3RfcG9pbnRlcjsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX2E6OnJlZmVyZW5jZSAJCWtleV9yZWZlcmVuY2U7CisJdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9hOjpjb25zdF9yZWZlcmVuY2UgCWtleV9jb25zdF9yZWZlcmVuY2U7CisJdHlwZWRlZiBzdGQ6OnBhaXI8c2l6ZV90eXBlLCBzaXplX3R5cGU+IAljb21wX2hhc2g7CisJdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxpbnQsIFN0b3JlX0hhc2g+IAlzdG9yZV9leHRyYTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fbm90aHJvd2NvcHk6OmluZGljYXRvciAJbm9fdGhyb3dfaW5kaWNhdG9yOworCisJc3RvcmVfZXh0cmEJCQkgICAgICAgCW1fc3RvcmVfZXh0cmFfaW5kaWNhdG9yOworCW5vX3Rocm93X2luZGljYXRvciAJCSAJbV9ub190aHJvd19jb3BpZXNfaW5kaWNhdG9yOworICAgIH07CisgICAgLy9AfQorICB9IC8vIG5hbWVzcGFjZSBkZXRhaWwKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2NvbnN0X2l0ZXJhdG9yLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWUwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2NvbnN0X2l0ZXJhdG9yLmhwcApAQCAtMCwwICsxLDExMSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB1bm9yZGVyZWRfaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhbiBpdGVyYXRvciBjbGFzcyB1c2VkIGZvciBjb25zdCByYW5naW5nIG92ZXIgdGhlIGVsZW1lbnRzIG9mIHRoZQorICogdGFibGUuCisgKi8KKworLy8vIENvbnN0IHJhbmdlLXR5cGUgaXRlcmF0b3IuCitjbGFzcyBjb25zdF9pdGVyYXRvcl8KKzogcHVibGljIHBvaW50X2NvbnN0X2l0ZXJhdG9yXworeworcHVibGljOgorICAvLy8gQ2F0ZWdvcnkuCisgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAvLy8gRGlmZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKKworICAvLy8gSXRlcmF0b3IncyB2YWx1ZSB0eXBlLgorICB0eXBlZGVmIHZhbHVlX3R5cGVfIHZhbHVlX3R5cGU7CisKKyAgLy8vIEl0ZXJhdG9yJ3MgcG9pbnRlciB0eXBlLgorICB0eXBlZGVmIHBvaW50ZXJfIHBvaW50ZXI7CisKKyAgLy8vIEl0ZXJhdG9yJ3MgY29uc3QgcG9pbnRlciB0eXBlLgorICB0eXBlZGVmIGNvbnN0X3BvaW50ZXJfIGNvbnN0X3BvaW50ZXI7CisKKyAgLy8vIEl0ZXJhdG9yJ3MgcmVmZXJlbmNlIHR5cGUuCisgIHR5cGVkZWYgcmVmZXJlbmNlXyByZWZlcmVuY2U7CisKKyAgLy8vIEl0ZXJhdG9yJ3MgY29uc3QgcmVmZXJlbmNlIHR5cGUuCisgIHR5cGVkZWYgY29uc3RfcmVmZXJlbmNlXyBjb25zdF9yZWZlcmVuY2U7CisKKyAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgIGNvbnN0X2l0ZXJhdG9yXygpIDogbV9wX3RibCgwKQorICB7IH0KKworICAvLy8gSW5jcmVtZW50cy4KKyAgY29uc3RfaXRlcmF0b3JfJgorICBvcGVyYXRvcisrKCkKKyAgeworICAgIG1fcF90YmwtPmluY19pdF9zdGF0ZShiYXNlX3R5cGU6Om1fcF92YWx1ZSwgbV9wb3MpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vLyBJbmNyZW1lbnRzLgorICBjb25zdF9pdGVyYXRvcl8KKyAgb3BlcmF0b3IrKyhpbnQpCisgIHsKKyAgICBjb25zdF9pdGVyYXRvcl8gcmV0ID0qIHRoaXM7CisgICAgbV9wX3RibC0+aW5jX2l0X3N0YXRlKGJhc2VfdHlwZTo6bV9wX3ZhbHVlLCBtX3Bvcyk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorCitwcm90ZWN0ZWQ6CisgIHR5cGVkZWYgcG9pbnRfY29uc3RfaXRlcmF0b3JfIGJhc2VfdHlwZTsKKworICAvKioKKyAgICogIENvbnN0cnVjdG9yIHVzZWQgYnkgdGhlIHRhYmxlIHRvIGluaXRpYXRlIHRoZSBnZW5lcmFsaXplZAorICAgKiAgICAgIHBvaW50ZXIgYW5kIHBvc2l0aW9uIChlLmcuLCB0aGlzIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiBhIGZpbmQoKQorICAgKiAgICAgIG9mIGEgdGFibGUuCisgICAqICovCisgIGNvbnN0X2l0ZXJhdG9yXyhjb25zdF9wb2ludGVyXyBwX3ZhbHVlLCAgUEJfRFNfR0VOX1BPUyBwb3MsCisJCSAgY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMqIHBfdGJsKQorICA6IHBvaW50X2NvbnN0X2l0ZXJhdG9yXyhwX3ZhbHVlKSwgbV9wX3RibChwX3RibCksIG1fcG9zKHBvcykKKyAgeyB9CisKKyAgLyoqCisgICAqICBQb2ludGVyIHRvIHRoZSB0YWJsZSBvYmplY3Qgd2hpY2ggY3JlYXRlZCB0aGUgaXRlcmF0b3IgKHVzZWQgZm9yCisgICAqICAgICAgaW5jcmVtZW50aW5nIGl0cyBwb3NpdGlvbi4KKyAgICogKi8KKyAgY29uc3QgUEJfRFNfQ0xBU1NfQ19ERUMqIG1fcF90Ymw7CisKKyAgUEJfRFNfR0VOX1BPUyBtX3BvczsKKworICBmcmllbmQgY2xhc3MgUEJfRFNfQ0xBU1NfQ19ERUM7Cit9OwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9pdGVyYXRvci5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL2l0ZXJhdG9yLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjhiZjVlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9pdGVyYXRvci5ocHAKQEAgLTAsMCArMSwxMzAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgaXRlcmF0b3IuaHBwCisgKiBDb250YWlucyBhbiBpdGVyYXRvcl8gY2xhc3MgdXNlZCBmb3IgcmFuZ2luZyBvdmVyIHRoZSBlbGVtZW50cyBvZiB0aGUKKyAqICAgIHRhYmxlLgorICovCisKKy8vLyBSYW5nZS10eXBlIGl0ZXJhdG9yLgorY2xhc3MgaXRlcmF0b3JfCis6IHB1YmxpYyBjb25zdF9pdGVyYXRvcl8KK3sKK3B1YmxpYzoKKyAgLy8vIENhdGVnb3J5LgorICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgLy8vIERpZmZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgLy8vIEl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KKyAgdHlwZWRlZiB2YWx1ZV90eXBlXyB2YWx1ZV90eXBlOworCisgIC8vLyBJdGVyYXRvcidzIHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBwb2ludGVyXyBwb2ludGVyOworCisgIC8vLyBJdGVyYXRvcidzIGNvbnN0IHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBjb25zdF9wb2ludGVyXyBjb25zdF9wb2ludGVyOworCisgIC8vLyBJdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIHJlZmVyZW5jZV8gcmVmZXJlbmNlOworCisgIC8vLyBJdGVyYXRvcidzIGNvbnN0IHJlZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIGNvbnN0X3JlZmVyZW5jZV8gY29uc3RfcmVmZXJlbmNlOworCisgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICBpbmxpbmUKKyAgaXRlcmF0b3JfKCkKKyAgOiBjb25zdF9pdGVyYXRvcl8oMCwgUEJfRFNfR0VOX1BPUygpLCAwKSB7IH0KKworICAvLy8gQ29udmVyc2lvbiB0byBhIHBvaW50LXR5cGUgaXRlcmF0b3IuCisgIGlubGluZQorICBvcGVyYXRvciBwb2ludF9pdGVyYXRvcl8oKQorICB7IHJldHVybiBwb2ludF9pdGVyYXRvcl8oY29uc3RfY2FzdDxwb2ludGVyPihjb25zdF9pdGVyYXRvcl86Om1fcF92YWx1ZSkpOyB9CisKKyAgLy8vIENvbnZlcnNpb24gdG8gYSBwb2ludC10eXBlIGl0ZXJhdG9yLgorICBpbmxpbmUKKyAgb3BlcmF0b3IgY29uc3QgcG9pbnRfaXRlcmF0b3JfKCkgY29uc3QKKyAgeyByZXR1cm4gcG9pbnRfaXRlcmF0b3JfKGNvbnN0X2Nhc3Q8cG9pbnRlcj4oY29uc3RfaXRlcmF0b3JfOjptX3BfdmFsdWUpKTsgfQorCisgIC8vLyBBY2Nlc3MuCisgIHBvaW50ZXIKKyAgb3BlcmF0b3ItPigpIGNvbnN0CisgIHsKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoYmFzZV90eXBlOjptX3BfdmFsdWUgIT0gMCk7CisgICAgcmV0dXJuIChjb25zdF9jYXN0PHBvaW50ZXI+KGJhc2VfdHlwZTo6bV9wX3ZhbHVlKSk7CisgIH0KKworICAvLy8gQWNjZXNzLgorICByZWZlcmVuY2UKKyAgb3BlcmF0b3IqKCkgY29uc3QKKyAgeworICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChiYXNlX3R5cGU6Om1fcF92YWx1ZSAhPSAwKTsKKyAgICByZXR1cm4gKGNvbnN0X2Nhc3Q8cmVmZXJlbmNlPigqYmFzZV90eXBlOjptX3BfdmFsdWUpKTsKKyAgfQorCisgIC8vLyBJbmNyZW1lbnRzLgorICBpdGVyYXRvcl8mCisgIG9wZXJhdG9yKysoKQorICB7CisgICAgYmFzZV90eXBlOjptX3BfdGJsLT5pbmNfaXRfc3RhdGUoYmFzZV90eXBlOjptX3BfdmFsdWUsIGJhc2VfdHlwZTo6bV9wb3MpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vLyBJbmNyZW1lbnRzLgorICBpdGVyYXRvcl8KKyAgb3BlcmF0b3IrKyhpbnQpCisgIHsKKyAgICBpdGVyYXRvcl8gcmV0ID0qIHRoaXM7CisgICAgYmFzZV90eXBlOjptX3BfdGJsLT5pbmNfaXRfc3RhdGUoYmFzZV90eXBlOjptX3BfdmFsdWUsIGJhc2VfdHlwZTo6bV9wb3MpOworICAgIHJldHVybiByZXQ7CisgIH0KKworcHJvdGVjdGVkOgorICB0eXBlZGVmIGNvbnN0X2l0ZXJhdG9yXyBiYXNlX3R5cGU7CisKKyAgLyoqCisgICAqICBDb25zdHJ1Y3RvciB1c2VkIGJ5IHRoZSB0YWJsZSB0byBpbml0aWF0ZSB0aGUgZ2VuZXJhbGl6ZWQKKyAgICogICAgICBwb2ludGVyIGFuZCBwb3NpdGlvbiAoZS5nLiwgdGhpcyBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYSBmaW5kKCkKKyAgICogICAgICBvZiBhIHRhYmxlLgorICAgKiAqLworICBpbmxpbmUKKyAgaXRlcmF0b3JfKHBvaW50ZXIgcF92YWx1ZSwgUEJfRFNfR0VOX1BPUyBwb3MsIFBCX0RTX0NMQVNTX0NfREVDKiBwX3RibCkKKyAgOiBjb25zdF9pdGVyYXRvcl8ocF92YWx1ZSwgcG9zLCBwX3RibCkKKyAgeyB9CisKKyAgZnJpZW5kIGNsYXNzIFBCX0RTX0NMQVNTX0NfREVDOworfTsKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvcG9pbnRfY29uc3RfaXRlcmF0b3IuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvZGV0YWlsL3Vub3JkZXJlZF9pdGVyYXRvci9wb2ludF9jb25zdF9pdGVyYXRvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiMTgzYQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvcG9pbnRfY29uc3RfaXRlcmF0b3IuaHBwCkBAIC0wLDAgKzEsMTMzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHVub3JkZXJlZF9pdGVyYXRvci9wb2ludF9jb25zdF9pdGVyYXRvci5ocHAKKyAqIENvbnRhaW5zIGFuIGl0ZXJhdG9yIGNsYXNzIHJldHVybmVkIGJ5IHRoZSB0YWJsZXMnIGNvbnN0IGZpbmQgYW5kIGluc2VydAorICogICAgIG1ldGhvZHMuCisgKi8KKworY2xhc3MgcG9pbnRfaXRlcmF0b3JfOworCisvLy8gQ29uc3QgcG9pbnQtdHlwZSBpdGVyYXRvci4KK2NsYXNzIHBvaW50X2NvbnN0X2l0ZXJhdG9yXworeworcHVibGljOgorICAvLy8gQ2F0ZWdvcnkuCisgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgLy8vIERpZmZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX2RpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgLy8vIEl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KKyAgdHlwZWRlZiB2YWx1ZV90eXBlXyB2YWx1ZV90eXBlOworCisgIC8vLyBJdGVyYXRvcidzIHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBwb2ludGVyXyBwb2ludGVyOworCisgIC8vLyBJdGVyYXRvcidzIGNvbnN0IHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBjb25zdF9wb2ludGVyXyBjb25zdF9wb2ludGVyOworCisgIC8vLyBJdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIHJlZmVyZW5jZV8gcmVmZXJlbmNlOworCisgIC8vLyBJdGVyYXRvcidzIGNvbnN0IHJlZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIGNvbnN0X3JlZmVyZW5jZV8gY29uc3RfcmVmZXJlbmNlOworCisgIGlubGluZQorICBwb2ludF9jb25zdF9pdGVyYXRvcl8oY29uc3RfcG9pbnRlciBwX3ZhbHVlKSA6IG1fcF92YWx1ZShwX3ZhbHVlKQorICB7IH0KKworICAvLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgaW5saW5lCisgIHBvaW50X2NvbnN0X2l0ZXJhdG9yXygpIDogbV9wX3ZhbHVlKDApCisgIHsgfQorCisgIC8vLyBDb3B5IGNvbnN0cnVjdG9yLgorICBpbmxpbmUKKyAgcG9pbnRfY29uc3RfaXRlcmF0b3JfKGNvbnN0IHBvaW50X2NvbnN0X2l0ZXJhdG9yXyYgb3RoZXIpCisgIDogbV9wX3ZhbHVlKG90aGVyLm1fcF92YWx1ZSkKKyAgeyB9CisKKyAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgIGlubGluZQorICBwb2ludF9jb25zdF9pdGVyYXRvcl8oY29uc3QgcG9pbnRfaXRlcmF0b3JfJiBvdGhlcikKKyAgOiBtX3BfdmFsdWUob3RoZXIubV9wX3ZhbHVlKQorICB7IH0KKworICAvLy8gQWNjZXNzLgorICBjb25zdF9wb2ludGVyCisgIG9wZXJhdG9yLT4oKSBjb25zdAorICB7CisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF92YWx1ZSAhPSAwKTsKKyAgICByZXR1cm4gbV9wX3ZhbHVlOworICB9CisKKyAgLy8vIEFjY2Vzcy4KKyAgY29uc3RfcmVmZXJlbmNlCisgIG9wZXJhdG9yKigpIGNvbnN0CisgIHsKKyAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQobV9wX3ZhbHVlICE9IDApOworICAgIHJldHVybiAqbV9wX3ZhbHVlOworICB9CisKKyAgLy8vIENvbXBhcmVzIGNvbnRlbnQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgcG9pbnRfaXRlcmF0b3JfJiBvdGhlcikgY29uc3QKKyAgeyByZXR1cm4gbV9wX3ZhbHVlID09IG90aGVyLm1fcF92YWx1ZTsgfQorCisgIC8vLyBDb21wYXJlcyBjb250ZW50IHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IHBvaW50X2NvbnN0X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgIHsgcmV0dXJuIG1fcF92YWx1ZSA9PSBvdGhlci5tX3BfdmFsdWU7IH0KKworICAvLy8gQ29tcGFyZXMgY29udGVudCAobmVnYXRpdmVseSkgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICBib29sCisgIG9wZXJhdG9yIT0oY29uc3QgcG9pbnRfaXRlcmF0b3JfJiBvdGhlcikgY29uc3QKKyAgeyByZXR1cm4gbV9wX3ZhbHVlICE9IG90aGVyLm1fcF92YWx1ZTsgfQorCisgIC8vLyBDb21wYXJlcyBjb250ZW50IChuZWdhdGl2ZWx5KSB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgIGJvb2wKKyAgb3BlcmF0b3IhPShjb25zdCBwb2ludF9jb25zdF9pdGVyYXRvcl8mIG90aGVyKSBjb25zdAorICB7IHJldHVybiBtX3BfdmFsdWUgIT0gb3RoZXIubV9wX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgY29uc3RfcG9pbnRlciBtX3BfdmFsdWU7CisKKyAgZnJpZW5kIGNsYXNzIHBvaW50X2l0ZXJhdG9yXzsKKworICBmcmllbmQgY2xhc3MgUEJfRFNfQ0xBU1NfQ19ERUM7Cit9OworCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2l0ZXJhdG9yLmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2RldGFpbC91bm9yZGVyZWRfaXRlcmF0b3IvcG9pbnRfaXRlcmF0b3IuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjM4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9kZXRhaWwvdW5vcmRlcmVkX2l0ZXJhdG9yL3BvaW50X2l0ZXJhdG9yLmhwcApAQCAtMCwwICsxLDEyNiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSBwb2ludF9pdGVyYXRvci5ocHAKKyAqIENvbnRhaW5zIGFuIGl0ZXJhdG9yIGNsYXNzIHJldHVybmVkIGJ5IHRoZSB0YWJsZXMnIGZpbmQgYW5kIGluc2VydAorICogICAgIG1ldGhvZHMuCisgKi8KKworLy8vIEZpbmQgdHlwZSBpdGVyYXRvci4KK2NsYXNzIHBvaW50X2l0ZXJhdG9yXworeworcHVibGljOgorICAvLy8gQ2F0ZWdvcnkuCisgIHR5cGVkZWYgdHJpdmlhbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgLy8vIERpZmZlcmVuY2UgdHlwZS4KKyAgdHlwZWRlZiB0cml2aWFsX2l0ZXJhdG9yX2RpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisKKyAgLy8vIEl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KKyAgdHlwZWRlZiB2YWx1ZV90eXBlXyB2YWx1ZV90eXBlOworCisgIC8vLyBJdGVyYXRvcidzIHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBwb2ludGVyXyBwb2ludGVyOworCisgIC8vLyBJdGVyYXRvcidzIGNvbnN0IHBvaW50ZXIgdHlwZS4KKyAgdHlwZWRlZiBjb25zdF9wb2ludGVyXyBjb25zdF9wb2ludGVyOworCisgIC8vLyBJdGVyYXRvcidzIHJlZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIHJlZmVyZW5jZV8gcmVmZXJlbmNlOworCisgIC8vLyBJdGVyYXRvcidzIGNvbnN0IHJlZmVyZW5jZSB0eXBlLgorICB0eXBlZGVmIGNvbnN0X3JlZmVyZW5jZV8gY29uc3RfcmVmZXJlbmNlOworCisgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICBpbmxpbmUKKyAgcG9pbnRfaXRlcmF0b3JfKCkKKyAgOiBtX3BfdmFsdWUoMCkKKyAgeyB9CisKKyAgLy8vIENvcHkgY29uc3RydWN0b3IuCisgIGlubGluZQorICBwb2ludF9pdGVyYXRvcl8oY29uc3QgcG9pbnRfaXRlcmF0b3JfJiBvdGhlcikKKyAgOiBtX3BfdmFsdWUob3RoZXIubV9wX3ZhbHVlKQorICB7IH0KKworICAvLy8gQWNjZXNzLgorICBwb2ludGVyCisgIG9wZXJhdG9yLT4oKSBjb25zdAorICB7CisgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKG1fcF92YWx1ZSAhPSAwKTsKKyAgICByZXR1cm4gKG1fcF92YWx1ZSk7CisgIH0KKworICAvLy8gQWNjZXNzLgorICByZWZlcmVuY2UKKyAgb3BlcmF0b3IqKCkgY29uc3QKKyAgeworICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChtX3BfdmFsdWUgIT0gMCk7CisgICAgcmV0dXJuICgqbV9wX3ZhbHVlKTsKKyAgfQorCisgIC8vLyBDb21wYXJlcyBjb250ZW50IHRvIGEgZGlmZmVyZW50IGl0ZXJhdG9yIG9iamVjdC4KKyAgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IHBvaW50X2l0ZXJhdG9yXyYgb3RoZXIpIGNvbnN0CisgIHsgcmV0dXJuIG1fcF92YWx1ZSA9PSBvdGhlci5tX3BfdmFsdWU7IH0KKworICAvLy8gQ29tcGFyZXMgY29udGVudCB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBwb2ludF9jb25zdF9pdGVyYXRvcl8mIG90aGVyKSBjb25zdAorICB7IHJldHVybiBtX3BfdmFsdWUgPT0gb3RoZXIubV9wX3ZhbHVlOyB9CisKKyAgLy8vIENvbXBhcmVzIGNvbnRlbnQgdG8gYSBkaWZmZXJlbnQgaXRlcmF0b3Igb2JqZWN0LgorICBib29sCisgIG9wZXJhdG9yIT0oY29uc3QgcG9pbnRfaXRlcmF0b3JfJiBvdGhlcikgY29uc3QKKyAgeyByZXR1cm4gbV9wX3ZhbHVlICE9IG90aGVyLm1fcF92YWx1ZTsgfQorCisgIC8vLyBDb21wYXJlcyBjb250ZW50IChuZWdhdGl2ZWx5KSB0byBhIGRpZmZlcmVudCBpdGVyYXRvciBvYmplY3QuCisgIGJvb2wKKyAgb3BlcmF0b3IhPShjb25zdCBwb2ludF9jb25zdF9pdGVyYXRvcl8mIG90aGVyKSBjb25zdAorICB7IHJldHVybiBtX3BfdmFsdWUgIT0gb3RoZXIubV9wX3ZhbHVlOyB9CisKKyAgaW5saW5lCisgIHBvaW50X2l0ZXJhdG9yXyhwb2ludGVyIHBfdmFsdWUpIDogbV9wX3ZhbHVlKHBfdmFsdWUpCisgIHsgfQorCitwcm90ZWN0ZWQ6CisgIGZyaWVuZCBjbGFzcyBwb2ludF9jb25zdF9pdGVyYXRvcl87CisKKyAgZnJpZW5kIGNsYXNzIFBCX0RTX0NMQVNTX0NfREVDOworCitwcm90ZWN0ZWQ6CisgIHBvaW50ZXIgbV9wX3ZhbHVlOworfTsKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2V4Y2VwdGlvbi5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9leGNlcHRpb24uaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYTQzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9leGNlcHRpb24uaHBwCkBAIC0wLDAgKzEsOTMgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgZXhjZXB0aW9uLmhwcAorICogQ29udGFpbnMgZXhjZXB0aW9uIGNsYXNzZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19FWENFUFRJT05fSFBQCisjZGVmaW5lIFBCX0RTX0VYQ0VQVElPTl9IUFAKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPGNzdGRsaWI+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisgIC8qKgorICAgKiAgQGRlZmdyb3VwIGV4Y2VwdGlvbnMtcGJkcyBFeGNlcHRpb25zCisgICAqICBAaW5ncm91cCBwYmRzCisgICAqICBAeworICAgKi8KKworICAvLy8gQmFzZSBjbGFzcyBmb3IgZXhjZXB0aW9ucy4KKyAgc3RydWN0IGNvbnRhaW5lcl9lcnJvciA6IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vycm9yCisgIHsKKyAgICBjb250YWluZXJfZXJyb3IoKQorICAgIDogc3RkOjpsb2dpY19lcnJvcihfX04oIl9fZ251X3BiZHM6OmNvbnRhaW5lcl9lcnJvciIpKSB7IH0KKyAgfTsKKworICAvLy8gQW4gZW50cnkgY2Fubm90IGJlIGluc2VydGVkIGludG8gYSBjb250YWluZXIgb2JqZWN0IGZvciBsb2dpY2FsCisgIC8vLyByZWFzb25zIChub3QsIGUuZy4sIGlmIG1lbW9yeSBpcyB1bmFidmFpbGFibGUsIGluIHdoaWNoIGNhc2UKKyAgLy8vIHRoZSBhbGxvY2F0b3JfdHlwZSdzIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bikuCisgIHN0cnVjdCBpbnNlcnRfZXJyb3IgOiBwdWJsaWMgY29udGFpbmVyX2Vycm9yIHsgfTsKKworICAvLy8gQSBqb2luIGNhbm5vdCBiZSBwZXJmb3JtZWQgbG9naWNhbCByZWFzb25zIChpLmUuLCB0aGUgcmFuZ2VzIG9mCisgIC8vLyB0aGUgdHdvIGNvbnRhaW5lciBvYmplY3RzIGJlaW5nIGpvaW5lZCBvdmVybGFwcy4KKyAgc3RydWN0IGpvaW5fZXJyb3IgOiBwdWJsaWMgY29udGFpbmVyX2Vycm9yIHsgfTsKKworICAvLy8gQSBjb250YWluZXIgY2Fubm90IGJlIHJlc2l6ZWQuCisgIHN0cnVjdCByZXNpemVfZXJyb3IgOiBwdWJsaWMgY29udGFpbmVyX2Vycm9yIHsgfTsKKworICBpbmxpbmUgdm9pZAorICBfX3Rocm93X2NvbnRhaW5lcl9lcnJvcigpCisgIHsgX0dMSUJDWFhfVEhST1dfT1JfQUJPUlQoY29udGFpbmVyX2Vycm9yKCkpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19pbnNlcnRfZXJyb3IoKQorICB7IF9HTElCQ1hYX1RIUk9XX09SX0FCT1JUKGluc2VydF9lcnJvcigpKTsgfQorCisgIGlubGluZSB2b2lkCisgIF9fdGhyb3dfam9pbl9lcnJvcigpCisgIHsgX0dMSUJDWFhfVEhST1dfT1JfQUJPUlQoam9pbl9lcnJvcigpKTsgfQorCisgIGlubGluZSB2b2lkCisgIF9fdGhyb3dfcmVzaXplX2Vycm9yKCkKKyAgeyBfR0xJQkNYWF9USFJPV19PUl9BQk9SVChyZXNpemVfZXJyb3IoKSk7IH0KKyAgLy9AfQorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2hhc2hfcG9saWN5LmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2hhc2hfcG9saWN5LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWE0ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvaGFzaF9wb2xpY3kuaHBwCkBAIC0wLDAgKzEsNjE3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGhhc2hfcG9saWN5LmhwcAorICogQ29udGFpbnMgaGFzaC1yZWxhdGVkIHBvbGljaWVzLgorICovCisKKyNpZm5kZWYgUEJfRFNfSEFTSF9QT0xJQ1lfSFBQCisjZGVmaW5lIFBCX0RTX0hBU0hfUE9MSUNZX0hQUAorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9leGNlcHRpb24uaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHlwZV91dGlscy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZy5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9oYXNoX2ZuL21vZF9iYXNlZF9yYW5nZV9oYXNoaW5nLmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX3NpemVfYmFzZS5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZT4KKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgbGluZWFyX3Byb2JlX2ZuPFNpemVfVHlwZT4KKworICAvLy8gQSBwcm9iZSBzZXF1ZW5jZSBwb2xpY3kgdXNpbmcgZml4ZWQgaW5jcmVtZW50cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlID0gc3RkOjpzaXplX3Q+CisgIGNsYXNzIGxpbmVhcl9wcm9iZV9mbgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICB2b2lkCisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgIHByb3RlY3RlZDoKKyAgICAvLy8gUmV0dXJucyB0aGUgaS10aCBvZmZzZXQgZnJvbSB0aGUgaGFzaCB2YWx1ZS4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgb3BlcmF0b3IoKShzaXplX3R5cGUgaSkgY29uc3Q7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vbGluZWFyX3Byb2JlX2ZuX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBxdWFkcmF0aWNfcHJvYmVfZm48U2l6ZV9UeXBlPgorCisgIC8vLyBBIHByb2JlIHNlcXVlbmNlIHBvbGljeSB1c2luZyBzcXVhcmUgaW5jcmVtZW50cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlID0gc3RkOjpzaXplX3Q+CisgIGNsYXNzIHF1YWRyYXRpY19wcm9iZV9mbgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICB2b2lkCisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgIHByb3RlY3RlZDoKKyAgICAvLy8gUmV0dXJucyB0aGUgaS10aCBvZmZzZXQgZnJvbSB0aGUgaGFzaCB2YWx1ZS4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgb3BlcmF0b3IoKShzaXplX3R5cGUgaSkgY29uc3Q7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL2hhc2hfZm4vcXVhZHJhdGljX3Byb2JlX2ZuX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBkaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nPFNpemVfVHlwZT4KKworICAvLy8gQSBtYXNrIHJhbmdlLWhhc2hpbmcgY2xhc3MgKHVzZXMgYSBiaXRtYXNrKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlID0gc3RkOjpzaXplX3Q+CisgIGNsYXNzIGRpcmVjdF9tYXNrX3JhbmdlX2hhc2hpbmcKKyAgOiBwdWJsaWMgZGV0YWlsOjptYXNrX2Jhc2VkX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPgorICB7CisgIHByaXZhdGU6CisgICAgdHlwZWRlZiBkZXRhaWw6Om1hc2tfYmFzZWRfcmFuZ2VfaGFzaGluZzxTaXplX1R5cGU+IG1hc2tfYmFzZWRfYmFzZTsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBTaXplX1R5cGUgc2l6ZV90eXBlOworCisgICAgdm9pZAorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdm9pZAorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBzaXplKTsKKworICAgIC8vLyBUcmFuc2Zvcm1zIHRoZSBfX2hhc2ggdmFsdWUgaGFzaCBpbnRvIGEgcmFuZ2VkLWhhc2ggdmFsdWUKKyAgICAvLy8gKHVzaW5nIGEgYml0LW1hc2spLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBvcGVyYXRvcigpKHNpemVfdHlwZSBoYXNoKSBjb25zdDsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbWFza19yYW5nZV9oYXNoaW5nX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9UeXBlPgorI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBkaXJlY3RfbW9kX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPgorCisgIC8vLyBBIG1vZCByYW5nZS1oYXNoaW5nIGNsYXNzICh1c2VzIHRoZSBtb2R1bG8gZnVuY3Rpb24pLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGUgPSBzdGQ6OnNpemVfdD4KKyAgY2xhc3MgZGlyZWN0X21vZF9yYW5nZV9oYXNoaW5nCisgIDogcHVibGljIGRldGFpbDo6bW9kX2Jhc2VkX3JhbmdlX2hhc2hpbmc8U2l6ZV9UeXBlPgorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIFNpemVfVHlwZSBzaXplX3R5cGU7CisKKyAgICB2b2lkCisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgIHByb3RlY3RlZDoKKyAgICB2b2lkCisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIHNpemUpOworCisgICAgLy8vIFRyYW5zZm9ybXMgdGhlIF9faGFzaCB2YWx1ZSBoYXNoIGludG8gYSByYW5nZWQtaGFzaCB2YWx1ZQorICAgIC8vLyAodXNpbmcgYSBtb2R1bG8gb3BlcmF0aW9uKS4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgb3BlcmF0b3IoKShzaXplX3R5cGUgaGFzaCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIGRldGFpbDo6bW9kX2Jhc2VkX3JhbmdlX2hhc2hpbmc8c2l6ZV90eXBlPiBtb2RfYmFzZWRfYmFzZTsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvaGFzaF9mbi9kaXJlY3RfbW9kX3JhbmdlX2hhc2hpbmdfaW1wLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTxib29sIEV4dGVybmFsX0xvYWRfQWNjZXNzLCB0eXBlbmFtZSBTaXplX1R5cGU+CisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGhhc2hfbG9hZF9jaGVja19yZXNpemVfdHJpZ2dlcjxFeHRlcm5hbF9Mb2FkX0FjY2VzcywgU2l6ZV9UeXBlPgorI2RlZmluZSBQQl9EU19TSVpFX0JBU0VfQ19ERUMgZGV0YWlsOjpoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXJfc2l6ZV9iYXNlPFNpemVfVHlwZSwgRXh0ZXJuYWxfTG9hZF9BY2Nlc3M+CisKKyAgLy8vIEEgcmVzaXplIHRyaWdnZXIgcG9saWN5IGJhc2VkIG9uIGEgbG9hZCBjaGVjay4gSXQga2VlcHMgdGhlCisgIC8vLyBsb2FkIGZhY3RvciBiZXR3ZWVuIHNvbWUgbG9hZCBmYWN0b3JzIGxvYWRfbWluIGFuZCBsb2FkX21heC4KKyAgdGVtcGxhdGU8Ym9vbCBFeHRlcm5hbF9Mb2FkX0FjY2VzcyA9IGZhbHNlLCB0eXBlbmFtZSBTaXplX1R5cGUgPSBzdGQ6OnNpemVfdD4KKyAgY2xhc3MgaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyIDogcHJpdmF0ZSBQQl9EU19TSVpFX0JBU0VfQ19ERUMKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBTaXplX1R5cGUgc2l6ZV90eXBlOworCisgICAgZW51bQorICAgICAgeworCS8vLyBTcGVjaWZpZXMgd2hldGhlciB0aGUgbG9hZCBmYWN0b3IgY2FuIGJlIGFjY2Vzc2VkCisJLy8vIGV4dGVybmFsbHkuIFRoZSB0d28gb3B0aW9ucyBoYXZlIGRpZmZlcmVudCB0cmFkZS1vZmZzIGluCisJLy8vIHRlcm1zIG9mIGZsZXhpYmlsaXR5LCBnZW5lcmljaXR5LCBhbmQgZW5jYXBzdWxhdGlvbi4KKwlleHRlcm5hbF9sb2FkX2FjY2VzcyA9IEV4dGVybmFsX0xvYWRfQWNjZXNzCisgICAgICB9OworCisgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IsIG9yIGNvbnN0cnVjdG9yIHRha2luZyBsb2FkX21pbiBhbmQKKyAgICAvLy8gbG9hZF9tYXggbG9hZCBmYWN0b3JzIGJldHdlZW4gd2hpY2ggdGhpcyBwb2xpY3kgd2lsbCBrZWVwIHRoZQorICAgIC8vLyBhY3R1YWwgbG9hZC4KKyAgICBoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXIoZmxvYXQgbG9hZF9taW4gPSAwLjEyNSwKKwkJCQkgICBmbG9hdCBsb2FkX21heCA9IDAuNSk7CisKKyAgICB2b2lkCisgICAgc3dhcChoYXNoX2xvYWRfY2hlY2tfcmVzaXplX3RyaWdnZXImIG90aGVyKTsKKworICAgIHZpcnR1YWwKKyAgICB+aGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyKCk7CisKKyAgICAvLy8gUmV0dXJucyBhIHBhaXIgb2YgdGhlIG1pbmltYWwgYW5kIG1heGltYWwgbG9hZHMsIHJlc3BlY3RpdmVseS4KKyAgICBpbmxpbmUgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4KKyAgICBnZXRfbG9hZHMoKSBjb25zdDsKKworICAgIC8vLyBTZXRzIHRoZSBsb2FkcyB0aHJvdWdoIGEgcGFpciBvZiB0aGUgbWluaW1hbCBhbmQgbWF4aW1hbAorICAgIC8vLyBsb2FkcywgcmVzcGVjdGl2ZWx5LgorICAgIHZvaWQKKyAgICBzZXRfbG9hZHMoc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gbG9hZF9wYWlyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9zdGFydCgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydF9zZWFyY2hfZW5kKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9zdGFydCgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZmluZF9zZWFyY2hfY29sbGlzaW9uKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9lbmQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZXJhc2Vfc2VhcmNoX2NvbGxpc2lvbigpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZXJhc2Vfc2VhcmNoX2VuZCgpOworCisgICAgLy8vIE5vdGlmaWVzIGFuIGVsZW1lbnQgd2FzIGluc2VydGVkLiBUaGUgdG90YWwgbnVtYmVyIG9mIGVudHJpZXMKKyAgICAvLy8gaW4gdGhlIHRhYmxlIGlzIG51bV9lbnRyaWVzLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZW50cmllcyk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZWQoc2l6ZV90eXBlIG51bV9lbnRyaWVzKTsKKworICAgIC8vLyBOb3RpZmllcyB0aGUgdGFibGUgd2FzIGNsZWFyZWQuCisgICAgdm9pZAorICAgIG5vdGlmeV9jbGVhcmVkKCk7CisKKyAgICAvLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyByZXNpemVkIGFzIGEgcmVzdWx0IG9mIHRoaXMgb2JqZWN0J3MKKyAgICAvLy8gc2lnbmlmeWluZyB0aGF0IGEgcmVzaXplIGlzIG5lZWRlZC4KKyAgICB2b2lkCisgICAgbm90aWZ5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgIHZvaWQKKyAgICBub3RpZnlfZXh0ZXJuYWxseV9yZXNpemVkKHNpemVfdHlwZSBuZXdfc2l6ZSk7CisKKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX3Jlc2l6ZV9uZWVkZWQoKSBjb25zdDsKKworICAgIGlubGluZSBib29sCisgICAgaXNfZ3Jvd19uZWVkZWQoc2l6ZV90eXBlIHNpemUsIHNpemVfdHlwZSBudW1fZW50cmllcykgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQKKyAgICBkb19yZXNpemUoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgIHR5cGVkZWYgUEJfRFNfU0laRV9CQVNFX0NfREVDIHNpemVfYmFzZTsKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisgICAgdm9pZAorICAgIGFzc2VydF92YWxpZChjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSkgY29uc3Q7CisjZW5kaWYKKworICAgIGZsb2F0IAltX2xvYWRfbWluOworICAgIGZsb2F0IAltX2xvYWRfbWF4OworICAgIHNpemVfdHlwZSAJbV9uZXh0X3Nocmlua19zaXplOworICAgIHNpemVfdHlwZSAJbV9uZXh0X2dyb3dfc2l6ZTsKKyAgICBib29sIAltX3Jlc2l6ZV9uZWVkZWQ7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisjdW5kZWYgUEJfRFNfU0laRV9CQVNFX0NfREVDCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgdGVtcGxhdGU8Ym9vbCBFeHRlcm5hbF9Mb2FkX0FjY2VzcywgdHlwZW5hbWUgU2l6ZV9UeXBlPgorI2RlZmluZSBQQl9EU19DTEFTU19DX0RFQyBjY19oYXNoX21heF9jb2xsaXNpb25fY2hlY2tfcmVzaXplX3RyaWdnZXI8RXh0ZXJuYWxfTG9hZF9BY2Nlc3MsIFNpemVfVHlwZT4KKworICAvLy8gQSByZXNpemUgdHJpZ2dlciBwb2xpY3kgYmFzZWQgb24gY29sbGlzaW9uIGNoZWNrcy4gSXQga2VlcHMgdGhlCisgIC8vLyBzaW11bGF0ZWQgbG9hZCBmYWN0b3IgbG93ZXIgdGhhbiBzb21lIGdpdmVuIGxvYWQgZmFjdG9yLgorICB0ZW1wbGF0ZTxib29sIEV4dGVybmFsX0xvYWRfQWNjZXNzID0gZmFsc2UsIHR5cGVuYW1lIFNpemVfVHlwZSA9IHN0ZDo6c2l6ZV90PgorICBjbGFzcyBjY19oYXNoX21heF9jb2xsaXNpb25fY2hlY2tfcmVzaXplX3RyaWdnZXIKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBTaXplX1R5cGUgCXNpemVfdHlwZTsKKworICAgIGVudW0KKyAgICAgIHsKKwkvLy8gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGxvYWQgZmFjdG9yIGNhbiBiZSBhY2Nlc3NlZAorCS8vLyBleHRlcm5hbGx5LiBUaGUgdHdvIG9wdGlvbnMgaGF2ZSBkaWZmZXJlbnQgdHJhZGUtb2ZmcyBpbgorCS8vLyB0ZXJtcyBvZiBmbGV4aWJpbGl0eSwgZ2VuZXJpY2l0eSwgYW5kIGVuY2Fwc3VsYXRpb24uCisJZXh0ZXJuYWxfbG9hZF9hY2Nlc3MgPSBFeHRlcm5hbF9Mb2FkX0FjY2VzcworICAgICAgfTsKKworICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLCBvciBjb25zdHJ1Y3RvciB0YWtpbmcgbG9hZCwgYSBfX2xvYWQKKyAgICAvLy8gZmFjdG9yIHdoaWNoIGl0IHdpbGwgYXR0ZW1wdCB0byBtYWludGFpbi4KKyAgICBjY19oYXNoX21heF9jb2xsaXNpb25fY2hlY2tfcmVzaXplX3RyaWdnZXIoZmxvYXQgbG9hZCA9IDAuNSk7CisKKyAgICB2b2lkCisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgICAgLy8vIFJldHVybnMgdGhlIGN1cnJlbnQgbG9hZC4KKyAgICBpbmxpbmUgZmxvYXQKKyAgICBnZXRfbG9hZCgpIGNvbnN0OworCisgICAgLy8vIFNldHMgdGhlIGxvYWQ7IGRvZXMgbm90IHJlc2l6ZSB0aGUgY29udGFpbmVyLgorICAgIHZvaWQKKyAgICBzZXRfbG9hZChmbG9hdCBsb2FkKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8vIE5vdGlmaWVzIGFuIGluc2VydCBzZWFyY2ggc3RhcnRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX3N0YXJ0KCk7CisKKyAgICAvLy8gTm90aWZpZXMgYSBzZWFyY2ggZW5jb3VudGVyZWQgYSBjb2xsaXNpb24uCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0X3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCisgICAgLy8vIE5vdGlmaWVzIGEgZmluZCBzZWFyY2ggc3RhcnRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9maW5kX3NlYXJjaF9zdGFydCgpOworCisgICAgLy8vIE5vdGlmaWVzIGEgc2VhcmNoIGVuY291bnRlcmVkIGEgY29sbGlzaW9uLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2ZpbmRfc2VhcmNoX2NvbGxpc2lvbigpOworCisgICAgLy8vIE5vdGlmaWVzIGEgc2VhcmNoIGVuZGVkLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2ZpbmRfc2VhcmNoX2VuZCgpOworCisgICAgLy8vIE5vdGlmaWVzIGFuIGVyYXNlIHNlYXJjaCBzdGFydGVkLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9zdGFydCgpOworCisgICAgLy8vIE5vdGlmaWVzIGEgc2VhcmNoIGVuY291bnRlcmVkIGEgY29sbGlzaW9uLgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIC8vLyBOb3RpZmllcyBhIHNlYXJjaCBlbmRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfZW5kKCk7CisKKyAgICAvLy8gTm90aWZpZXMgYW4gZWxlbWVudCB3YXMgaW5zZXJ0ZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfaW5zZXJ0ZWQoc2l6ZV90eXBlIG51bV9lbnRyaWVzKTsKKworICAgIC8vLyBOb3RpZmllcyBhbiBlbGVtZW50IHdhcyBlcmFzZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZXJhc2VkKHNpemVfdHlwZSBudW1fZW50cmllcyk7CisKKyAgICAvLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyBjbGVhcmVkLgorICAgIHZvaWQKKyAgICBub3RpZnlfY2xlYXJlZCgpOworCisgICAgLy8vIE5vdGlmaWVzIHRoZSB0YWJsZSB3YXMgcmVzaXplZCBhcyBhIHJlc3VsdCBvZiB0aGlzIG9iamVjdCdzCisgICAgLy8vIHNpZ25pZnlpbmcgdGhhdCBhIHJlc2l6ZSBpcyBuZWVkZWQuCisgICAgdm9pZAorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBuZXdfc2l6ZSk7CisKKyAgICAvLy8gTm90aWZpZXMgdGhlIHRhYmxlIHdhcyByZXNpemVkIGV4dGVybmFsbHkuCisgICAgdm9pZAorICAgIG5vdGlmeV9leHRlcm5hbGx5X3Jlc2l6ZWQoc2l6ZV90eXBlIG5ld19zaXplKTsKKworICAgIC8vLyBRdWVyaWVzIHdoZXRoZXIgYSByZXNpemUgaXMgbmVlZGVkLgorICAgIGlubGluZSBib29sCisgICAgaXNfcmVzaXplX25lZWRlZCgpIGNvbnN0OworCisgICAgLy8vIFF1ZXJpZXMgd2hldGhlciBhIGdyb3cgaXMgbmVlZGVkLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25seQorICAgIC8vLyBpZiB0aGlzIG9iamVjdCBpbmRpY2F0ZWQgaXMgbmVlZGVkLgorICAgIGlubGluZSBib29sCisgICAgaXNfZ3Jvd19uZWVkZWQoc2l6ZV90eXBlIHNpemUsIHNpemVfdHlwZSBudW1fZW50cmllcykgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkCisgICAgY2FsY19tYXhfbnVtX2NvbGwoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgY2FsY19yZXNpemVfbmVlZGVkKCk7CisKKyAgICBmbG9hdCAJbV9sb2FkOworICAgIHNpemVfdHlwZSAJbV9zaXplOworICAgIHNpemVfdHlwZSAJbV9udW1fY29sOworICAgIHNpemVfdHlwZSAJbV9tYXhfY29sOworICAgIGJvb2wgCW1fcmVzaXplX25lZWRlZDsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9jY19oYXNoX21heF9jb2xsaXNpb25fY2hlY2tfcmVzaXplX3RyaWdnZXJfaW1wLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplX1R5cGU+CisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGhhc2hfZXhwb25lbnRpYWxfc2l6ZV9wb2xpY3k8U2l6ZV9UeXBlPgorCisgIC8vLyBBIHNpemUgcG9saWN5IHdob3NlIHNlcXVlbmNlIG9mIHNpemVzIGZvcm0gYW4gZXhwb25lbnRpYWwKKyAgLy8vIHNlcXVlbmNlICh0eXBpY2FsbHkgcG93ZXJzIG9mIDIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfVHlwZSA9IHN0ZDo6c2l6ZV90PgorICBjbGFzcyBoYXNoX2V4cG9uZW50aWFsX3NpemVfcG9saWN5CisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgU2l6ZV9UeXBlIHNpemVfdHlwZTsKKworICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLCBvciBvbnN0cnVjdG9yIHRha2luZyBhIHN0YXJ0X3NpemUsIG9yCisgICAgLy8vIGNvbnN0cnVjdG9yIHRha2luZyBhIHN0YXJ0IHNpemUgYW5kIGdyb3dfZmFjdG9yLiBUaGUgcG9saWN5CisgICAgLy8vIHdpbGwgdXNlIHRoZSBzZXF1ZW5jZSBvZiBzaXplcyBzdGFydF9zaXplLCBzdGFydF9zaXplKgorICAgIC8vLyBncm93X2ZhY3Rvciwgc3RhcnRfc2l6ZSogZ3Jvd19mYWN0b3JeMiwgLi4uCisgICAgaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeShzaXplX3R5cGUgc3RhcnRfc2l6ZSA9IDgsCisJCQkJIHNpemVfdHlwZSBncm93X2ZhY3RvciA9IDIpOworCisgICAgdm9pZAorICAgIHN3YXAoUEJfRFNfQ0xBU1NfQ19ERUMmIG90aGVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgc2l6ZV90eXBlCisgICAgZ2V0X25lYXJlc3RfbGFyZ2VyX3NpemUoc2l6ZV90eXBlIHNpemUpIGNvbnN0OworCisgICAgc2l6ZV90eXBlCisgICAgZ2V0X25lYXJlc3Rfc21hbGxlcl9zaXplKHNpemVfdHlwZSBzaXplKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIHNpemVfdHlwZSBtX3N0YXJ0X3NpemU7CisgICAgc2l6ZV90eXBlIG1fZ3Jvd19mYWN0b3I7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3Jlc2l6ZV9wb2xpY3kvaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeV9pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIGhhc2hfcHJpbWVfc2l6ZV9wb2xpY3kKKworICAvLy8gQSBzaXplIHBvbGljeSB3aG9zZSBzZXF1ZW5jZSBvZiBzaXplcyBmb3JtIGEgbmVhcmx5LWV4cG9uZW50aWFsCisgIC8vLyBzZXF1ZW5jZSBvZiBwcmltZXMuCisgIGNsYXNzIGhhc2hfcHJpbWVfc2l6ZV9wb2xpY3kKKyAgeworICBwdWJsaWM6CisgICAgLy8vIFNpemUgdHlwZS4KKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90IHNpemVfdHlwZTsKKworICAgIC8vLyBEZWZhdWx0IGNvbnN0cnVjdG9yLCBvciBvbnN0cnVjdG9yIHRha2luZyBhIHN0YXJ0X3NpemUgVGhlCisgICAgLy8vIHBvbGljeSB3aWxsIHVzZSB0aGUgc2VxdWVuY2Ugb2Ygc2l6ZXMgYXBwcm94aW1hdGVseQorICAgIC8vLyBzdGFydF9zaXplLCBzdGFydF9zaXplKiAyLCBzdGFydF9zaXplKiAyXjIsIC4uLgorICAgIGhhc2hfcHJpbWVfc2l6ZV9wb2xpY3koc2l6ZV90eXBlIHN0YXJ0X3NpemUgPSA4KTsKKworICAgIGlubGluZSB2b2lkCisgICAgc3dhcChQQl9EU19DTEFTU19DX0RFQyYgb3RoZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBzaXplX3R5cGUKKyAgICBnZXRfbmVhcmVzdF9sYXJnZXJfc2l6ZShzaXplX3R5cGUgc2l6ZSkgY29uc3Q7CisKKyAgICBzaXplX3R5cGUKKyAgICBnZXRfbmVhcmVzdF9zbWFsbGVyX3NpemUoc2l6ZV90eXBlIHNpemUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgc2l6ZV90eXBlIG1fc3RhcnRfc2l6ZTsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX3ByaW1lX3NpemVfcG9saWN5X2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgdGVtcGxhdGU8dHlwZW5hbWUgU2l6ZV9Qb2xpY3ksIHR5cGVuYW1lIFRyaWdnZXJfUG9saWN5LCBib29sIEV4dGVybmFsX1NpemVfQWNjZXNzLCB0eXBlbmFtZSBTaXplX1R5cGU+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgaGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5PFNpemVfUG9saWN5LCBUcmlnZ2VyX1BvbGljeSwgRXh0ZXJuYWxfU2l6ZV9BY2Nlc3MsIFNpemVfVHlwZT4KKworICAvLy8gQSByZXNpemUgcG9saWN5IHdoaWNoIGRlbGVnYXRlcyBvcGVyYXRpb25zIHRvIHNpemUgYW5kIHRyaWdnZXIgcG9saWNpZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVfUG9saWN5ID0gaGFzaF9leHBvbmVudGlhbF9zaXplX3BvbGljeTw+LAorCSAgIHR5cGVuYW1lIFRyaWdnZXJfUG9saWN5ID0gaGFzaF9sb2FkX2NoZWNrX3Jlc2l6ZV90cmlnZ2VyPD4sCisJICAgYm9vbCBFeHRlcm5hbF9TaXplX0FjY2VzcyA9IGZhbHNlLAorCSAgIHR5cGVuYW1lIFNpemVfVHlwZSA9IHN0ZDo6c2l6ZV90PgorICBjbGFzcyBoYXNoX3N0YW5kYXJkX3Jlc2l6ZV9wb2xpY3kKKyAgOiBwdWJsaWMgU2l6ZV9Qb2xpY3ksIHB1YmxpYyBUcmlnZ2VyX1BvbGljeQorICB7CisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIFNpemVfVHlwZSAJCXNpemVfdHlwZTsKKyAgICB0eXBlZGVmIFRyaWdnZXJfUG9saWN5IAl0cmlnZ2VyX3BvbGljeTsKKyAgICB0eXBlZGVmIFNpemVfUG9saWN5IAlzaXplX3BvbGljeTsKKworICAgIGVudW0KKyAgICAgIHsKKwlleHRlcm5hbF9zaXplX2FjY2VzcyA9IEV4dGVybmFsX1NpemVfQWNjZXNzCisgICAgICB9OworCisgICAgLy8vIERlZmF1bHQgY29uc3RydWN0b3IuCisgICAgaGFzaF9zdGFuZGFyZF9yZXNpemVfcG9saWN5KCk7CisKKyAgICAvLy8gY29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWNpZXMgcl9zaXplX3BvbGljeSB3aWxsIGJlIGNvcGllZAorICAgIC8vLyBieSB0aGUgU2l6ZV9Qb2xpY3kgb2JqZWN0IG9mIHRoaXMgb2JqZWN0LgorICAgIGhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeShjb25zdCBTaXplX1BvbGljeSYgcl9zaXplX3BvbGljeSk7CisKKyAgICAvLy8gY29uc3RydWN0b3IgdGFraW5nIHNvbWUgcG9saWNpZXMuIHJfc2l6ZV9wb2xpY3kgd2lsbCBiZQorICAgIC8vLyBjb3BpZWQgYnkgdGhlIFNpemVfUG9saWN5IG9iamVjdCBvZiB0aGlzCisgICAgLy8vIG9iamVjdC4gcl90cmlnZ2VyX3BvbGljeSB3aWxsIGJlIGNvcGllZCBieSB0aGUgVHJpZ2dlcl9Qb2xpY3kKKyAgICAvLy8gb2JqZWN0IG9mIHRoaXMgb2JqZWN0LgorICAgIGhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeShjb25zdCBTaXplX1BvbGljeSYgcl9zaXplX3BvbGljeSwKKwkJCQljb25zdCBUcmlnZ2VyX1BvbGljeSYgcl90cmlnZ2VyX3BvbGljeSk7CisKKyAgICB2aXJ0dWFsCisgICAgfmhhc2hfc3RhbmRhcmRfcmVzaXplX3BvbGljeSgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKFBCX0RTX0NMQVNTX0NfREVDJiBvdGhlcik7CisKKyAgICAvLy8gQWNjZXNzIHRvIHRoZSBTaXplX1BvbGljeSBvYmplY3QgdXNlZC4KKyAgICBTaXplX1BvbGljeSYKKyAgICBnZXRfc2l6ZV9wb2xpY3koKTsKKworICAgIC8vLyBDb25zdCBhY2Nlc3MgdG8gdGhlIFNpemVfUG9saWN5IG9iamVjdCB1c2VkLgorICAgIGNvbnN0IFNpemVfUG9saWN5JgorICAgIGdldF9zaXplX3BvbGljeSgpIGNvbnN0OworCisgICAgLy8vIEFjY2VzcyB0byB0aGUgVHJpZ2dlcl9Qb2xpY3kgb2JqZWN0IHVzZWQuCisgICAgVHJpZ2dlcl9Qb2xpY3kmCisgICAgZ2V0X3RyaWdnZXJfcG9saWN5KCk7CisKKyAgICAvLy8gQWNjZXNzIHRvIHRoZSBUcmlnZ2VyX1BvbGljeSBvYmplY3QgdXNlZC4KKyAgICBjb25zdCBUcmlnZ2VyX1BvbGljeSYKKyAgICBnZXRfdHJpZ2dlcl9wb2xpY3koKSBjb25zdDsKKworICAgIC8vLyBSZXR1cm5zIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBnZXRfYWN0dWFsX3NpemUoKSBjb25zdDsKKworICAgIC8vLyBSZXNpemVzIHRoZSBjb250YWluZXIgdG8gc3VnZ2VzdGVkX25ld19zaXplLCBhIHN1Z2dlc3RlZCBzaXplCisgICAgLy8vICh0aGUgYWN0dWFsIHNpemUgd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBTaXplX1BvbGljeQorICAgIC8vLyBvYmplY3QpLgorICAgIHZvaWQKKyAgICByZXNpemUoc2l6ZV90eXBlIHN1Z2dlc3RlZF9uZXdfc2l6ZSk7CisKKyAgcHJvdGVjdGVkOgorICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydF9zZWFyY2hfc3RhcnQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydF9zZWFyY2hfY29sbGlzaW9uKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9pbnNlcnRfc2VhcmNoX2VuZCgpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZmluZF9zZWFyY2hfc3RhcnQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2ZpbmRfc2VhcmNoX2NvbGxpc2lvbigpOworCisgICAgaW5saW5lIHZvaWQKKyAgICBub3RpZnlfZmluZF9zZWFyY2hfZW5kKCk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZV9zZWFyY2hfc3RhcnQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9jb2xsaXNpb24oKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2VyYXNlX3NlYXJjaF9lbmQoKTsKKworICAgIGlubGluZSB2b2lkCisgICAgbm90aWZ5X2luc2VydGVkKHNpemVfdHlwZSBudW1fZSk7CisKKyAgICBpbmxpbmUgdm9pZAorICAgIG5vdGlmeV9lcmFzZWQoc2l6ZV90eXBlIG51bV9lKTsKKworICAgIHZvaWQKKyAgICBub3RpZnlfY2xlYXJlZCgpOworCisgICAgdm9pZAorICAgIG5vdGlmeV9yZXNpemVkKHNpemVfdHlwZSBuZXdfc2l6ZSk7CisKKyAgICBpbmxpbmUgYm9vbAorICAgIGlzX3Jlc2l6ZV9uZWVkZWQoKSBjb25zdDsKKworICAgIC8vLyBRdWVyaWVzIHdoYXQgdGhlIG5ldyBzaXplIHNob3VsZCBiZSwgd2hlbiB0aGUgY29udGFpbmVyIGlzCisgICAgLy8vIHJlc2l6ZWQgbmF0dXJhbGx5LiBUaGUgY3VycmVudCBfX3NpemUgb2YgdGhlIGNvbnRhaW5lciBpcworICAgIC8vLyBzaXplLCBhbmQgdGhlIG51bWJlciBvZiB1c2VkIGVudHJpZXMgd2l0aGluIHRoZSBjb250YWluZXIgaXMKKyAgICAvLy8gbnVtX3VzZWRfZS4KKyAgICBzaXplX3R5cGUKKyAgICBnZXRfbmV3X3NpemUoc2l6ZV90eXBlIHNpemUsIHNpemVfdHlwZSBudW1fdXNlZF9lKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIC8vLyBSZXNpemVzIHRvIG5ld19zaXplLgorICAgIHZpcnR1YWwgdm9pZAorICAgIGRvX3Jlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUpOworCisgICAgdHlwZWRlZiBUcmlnZ2VyX1BvbGljeSB0cmlnZ2VyX3BvbGljeV9iYXNlOworCisgICAgdHlwZWRlZiBTaXplX1BvbGljeSBzaXplX3BvbGljeV9iYXNlOworCisgICAgc2l6ZV90eXBlIG1fc2l6ZTsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvcmVzaXplX3BvbGljeS9oYXNoX3N0YW5kYXJkX3Jlc2l6ZV9wb2xpY3lfaW1wLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL2xpc3RfdXBkYXRlX3BvbGljeS5ocHAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9saXN0X3VwZGF0ZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NWVkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9saXN0X3VwZGF0ZV9wb2xpY3kuaHBwCkBAIC0wLDAgKzEsMTMwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIGxpc3RfdXBkYXRlX3BvbGljeS5ocHAKKyAqIENvbnRhaW5zIHBvbGljaWVzIGZvciBsaXN0IHVwZGF0ZSBjb250YWluZXJzLgorICovCisKKyNpZm5kZWYgUEJfRFNfTFVfUE9MSUNZX0hQUAorI2RlZmluZSBQQl9EU19MVV9QT0xJQ1lfSFBQCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC9saXN0X3VwZGF0ZV9wb2xpY3kvbHVfY291bnRlcl9tZXRhZGF0YS5ocHA+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICAvKioKKyAgICogIEEgbGlzdC11cGRhdGUgcG9saWN5IHRoYXQgdW5jb25kaXRpb25hbGx5IG1vdmVzIGVsZW1lbnRzIHRvIHRoZQorICAgKiAgZnJvbnQgb2YgdGhlIGxpc3QuIEEgbnVsbCB0eXBlIG1lYW5zIHRoYXQgZWFjaCBsaW5rIGluIGEKKyAgICogIGxpc3QtYmFzZWQgY29udGFpbmVyIGRvZXMgbm90IGFjdHVhbGx5IG5lZWQgbWV0YWRhdGEuCisgICAqLworIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgIGNsYXNzIGx1X21vdmVfdG9fZnJvbnRfcG9saWN5CisgICB7CisgICBwdWJsaWM6CisgICAgIHR5cGVkZWYgX0FsbG9jIAkJCQkJYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgLy8vIE1ldGFkYXRhIG9uIHdoaWNoIHRoaXMgZnVuY3RvciBvcGVyYXRlcy4KKyAgICAgdHlwZWRlZiBudWxsX3R5cGUgCQkJCQltZXRhZGF0YV90eXBlOworCisgICBwcml2YXRlOgorICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPG1ldGFkYXRhX3R5cGU+IF9fcmViaW5kX207CisKKyAgIHB1YmxpYzoKKyAgICAgLy8vIFJlZmVyZW5jZSB0byBtZXRhZGF0YSBvbiB3aGljaCB0aGlzIGZ1bmN0b3Igb3BlcmF0ZXMuCisgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbTo6b3RoZXI6OnJlZmVyZW5jZSAJbWV0YWRhdGFfcmVmZXJlbmNlOworCisgICAgIC8vLyBDcmVhdGVzIGEgbWV0YWRhdGEgb2JqZWN0LgorICAgICBtZXRhZGF0YV90eXBlCisgICAgIG9wZXJhdG9yKCkoKSBjb25zdAorICAgICB7IHJldHVybiBzX21ldGFkYXRhOyB9CisKKyAgICAgLy8vIERlY2lkZXMgd2hldGhlciBhIG1ldGFkYXRhIG9iamVjdCBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIGZyb250CisgICAgIC8vLyBvZiB0aGUgbGlzdC4KKyAgICAgaW5saW5lIGJvb2wKKyAgICAgb3BlcmF0b3IoKShtZXRhZGF0YV9yZWZlcmVuY2Ugcl9tZXRhZGF0YSkgY29uc3QKKyAgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgICBwcml2YXRlOgorICAgICBzdGF0aWMgbnVsbF90eXBlIAkJCQkJc19tZXRhZGF0YTsKKyAgIH07CisKKyAgLyoqCisgICAqICBBIGxpc3QtdXBkYXRlIHBvbGljeSB0aGF0IG1vdmVzIGVsZW1lbnRzIHRvIHRoZSBmcm9udCBvZiB0aGUKKyAgICogIGxpc3QgYmFzZWQgb24gdGhlIGNvdW50ZXIgYWxnb3JpdGhtLgorICAgKi8KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgTWF4X0NvdW50ID0gNSwgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICAgIGNsYXNzIGx1X2NvdW50ZXJfcG9saWN5CisgICAgOiBwcml2YXRlIGRldGFpbDo6bHVfY291bnRlcl9wb2xpY3lfYmFzZTx0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZT4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQWxsb2MgCQkJCQlhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OnNpemVfdHlwZSAgICAgICAJc2l6ZV90eXBlOworCisgICAgICBlbnVtCisJeworCSAgLy8vIFdoZW4gc29tZSBlbGVtZW50IGlzIGFjY2Vzc2VkIHRoaXMgbnVtYmVyIG9mIHRpbWVzLCBpdAorCSAgLy8vIHdpbGwgYmUgbW92ZWQgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0LgorCSAgbWF4X2NvdW50ID0gTWF4X0NvdW50CisJfTsKKworICAgICAgLy8vIE1ldGFkYXRhIG9uIHdoaWNoIHRoaXMgZnVuY3RvciBvcGVyYXRlcy4KKyAgICAgIHR5cGVkZWYgZGV0YWlsOjpsdV9jb3VudGVyX21ldGFkYXRhPHNpemVfdHlwZT4gCW1ldGFkYXRhX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBkZXRhaWw6Omx1X2NvdW50ZXJfcG9saWN5X2Jhc2U8c2l6ZV90eXBlPiAJYmFzZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxtZXRhZGF0YV90eXBlPiBfX3JlYmluZF9tOworCisgICAgcHVibGljOgorICAgICAgLy8vIFJlZmVyZW5jZSB0byBtZXRhZGF0YSBvbiB3aGljaCB0aGlzIGZ1bmN0b3Igb3BlcmF0ZXMuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX206Om90aGVyOjpyZWZlcmVuY2UgCW1ldGFkYXRhX3JlZmVyZW5jZTsKKworICAgICAgLy8vIENyZWF0ZXMgYSBtZXRhZGF0YSBvYmplY3QuCisgICAgICBtZXRhZGF0YV90eXBlCisgICAgICBvcGVyYXRvcigpKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGJhc2VfdHlwZTo6b3BlcmF0b3IoKShtYXhfY291bnQpOyB9CisKKyAgICAgIC8vLyBEZWNpZGVzIHdoZXRoZXIgYSBtZXRhZGF0YSBvYmplY3Qgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBmcm9udAorICAgICAgLy8vIG9mIHRoZSBsaXN0LgorICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShtZXRhZGF0YV9yZWZlcmVuY2Ugcl9kYXRhKSBjb25zdAorICAgICAgeyByZXR1cm4gYmFzZV90eXBlOjpvcGVyYXRvcigpKHJfZGF0YSwgbWF4X2NvdW50KTsgfQorICAgIH07Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYmRzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvcHJpb3JpdHlfcXVldWUuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvcHJpb3JpdHlfcXVldWUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTg3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy9wcmlvcml0eV9xdWV1ZS5ocHAKQEAgLTAsMCArMSwxNTcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgcHJpb3JpdHlfcXVldWUuaHBwCisgKiBDb250YWlucyBwcmlvcml0eV9xdWV1ZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19QUklPUklUWV9RVUVVRV9IUFAKKyNkZWZpbmUgUEJfRFNfUFJJT1JJVFlfUVVFVUVfSFBQCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGV4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcD4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3ByaW9yaXR5X3F1ZXVlX2Jhc2VfZGlzcGF0Y2guaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvc3RhbmRhcmRfcG9saWNpZXMuaHBwPgorCituYW1lc3BhY2UgX19nbnVfcGJkcworeworICAvKioKKyAgICogIEBkZWZncm91cCBoZWFwLWJhc2VkIEhlYXAtQmFzZWQKKyAgICogIEBpbmdyb3VwIGNvbnRhaW5lcnMtcGJkcworICAgKiAgQHsKKyAgICovCisKKyAgLyoqCisgICAqICBAZGVmZ3JvdXAgaGVhcC1kZXRhaWwgQmFzZSBhbmQgUG9saWN5IENsYXNzZXMKKyAgICogIEBpbmdyb3VwIGhlYXAtYmFzZWQKKyAgICovCisKKyAgLyoqCisgICAqICBBIHByaW9yaXR5IHF1ZXVlIGNvbXBvc2VkIG9mIG9uZSBzcGVjaWZpYyBoZWFwIHBvbGljeS4KKyAgICoKKyAgICogIEB0cGFyYW0gX1R2IAkgICAgCVZhbHVlIHR5cGUuCisgICAqICBAdHBhcmFtIENtcF9GbgkgICAgCUNvbXBhcmlzb24gZnVuY3Rvci4KKyAgICogIEB0cGFyYW0gVGFnIAkgICAgCUluc3RhbnRpYXRpbmcgZGF0YSBzdHJ1Y3R1cmUgdHlwZSwKKyAgICoJCQkgICAgCXNlZSBjb250YWluZXJfdGFnLgorICAgKiAgQHRwYXJhbSBfQWxsb2MgCSAgICAJQWxsb2NhdG9yIHR5cGUuCisgICAqCisgICAqICBCYXNlIGlzIGRpc3BhdGNoZWQgYXQgY29tcGlsZSB0aW1lIHZpYSBUYWcsIGZyb20gdGhlIGZvbGxvd2luZworICAgKiAgY2hvaWNlczogYmluYXJ5X2hlYXBfdGFnLCBiaW5vbWlhbF9oZWFwX3RhZywgcGFpcmluZ19oZWFwX3RhZywKKyAgICogICAgICAgICAgIHJjX2Jpbm9taWFsX2hlYXBfdGFnLCB0aGluX2hlYXBfdGFnCisgICAqCisgICAqICBCYXNlIGNob2ljZXMgYXJlOiBkZXRhaWw6OmJpbmFyeV9oZWFwLCBkZXRhaWw6OmJpbm9taWFsX2hlYXAsCisgICAqICAgICAgICAgICAgICAgICAgICBkZXRhaWw6OnBhaXJpbmdfaGVhcCwgZGV0YWlsOjpyY19iaW5vbWlhbF9oZWFwLAorICAgKiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOjp0aGluX2hlYXAuCisgICAqLworICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2LAorCSAgIHR5cGVuYW1lIENtcF9GbiA9IHN0ZDo6bGVzczxfVHY+LAorCSAgIHR5cGVuYW1lIFRhZyA9IHBhaXJpbmdfaGVhcF90YWcsCisJICAgdHlwZW5hbWUgX0FsbG9jID0gc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICBjbGFzcyBwcmlvcml0eV9xdWV1ZQorICA6IHB1YmxpYyBkZXRhaWw6OmNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPF9UdiwgQ21wX0ZuLCBfQWxsb2MsIFRhZz46OnR5cGUKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBfVHYgCQkJCQl2YWx1ZV90eXBlOworICAgIHR5cGVkZWYgQ21wX0ZuIAkJCQkJY21wX2ZuOworICAgIHR5cGVkZWYgVGFnIAkJCQkJY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgX0FsbG9jIAkJCQkJYWxsb2NhdG9yX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSAJZGlmZmVyZW5jZV90eXBlOworCisgIHByaXZhdGU6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmNvbnRhaW5lcl9iYXNlX2Rpc3BhdGNoPF9UdiwgQ21wX0ZuLCBfQWxsb2MsCisJCQkJCQkgICAgIFRhZz46OnR5cGUKKyAJCQkJCQkJYmFzZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8X1R2PiAgIAlfX3JlYmluZF92OworICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfdjo6b3RoZXIJCQlfX3JlYmluZF92YTsKKworIHB1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX3ZhOjpyZWZlcmVuY2UgCQlyZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9yZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6cG9pbnRlciAJICAgCXBvaW50ZXI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF92YTo6Y29uc3RfcG9pbnRlciAJY29uc3RfcG9pbnRlcjsKKworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludF9pdGVyYXRvciAJCXBvaW50X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpwb2ludF9jb25zdF9pdGVyYXRvciAJcG9pbnRfY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6Oml0ZXJhdG9yIAkJaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIAkJY29uc3RfaXRlcmF0b3I7CisKKyAgICBwcmlvcml0eV9xdWV1ZSgpIHsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBzb21lIHBvbGljeSBvYmplY3RzLiByX2NtcF9mbiB3aWxsIGJlCisgICAgLy8vIGNvcGllZCBieSB0aGUgQ21wX0ZuIG9iamVjdCBvZiB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICBwcmlvcml0eV9xdWV1ZShjb25zdCBjbXBfZm4mIHJfY21wX2ZuKSA6IGJhc2VfdHlwZShyX2NtcF9mbikgeyB9CisKKyAgICAvLy8gQ29uc3RydWN0b3IgdGFraW5nIF9faXRlcmF0b3JzIHRvIGEgcmFuZ2Ugb2YgdmFsdWVfdHlwZXMuIFRoZQorICAgIC8vLyB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZCBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50bworICAgIC8vLyB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdD4KKyAgICBwcmlvcml0eV9xdWV1ZShJdCBmaXJzdF9pdCwgSXQgbGFzdF9pdCkKKyAgICB7IGJhc2VfdHlwZTo6Y29weV9mcm9tX3JhbmdlKGZpcnN0X2l0LCBsYXN0X2l0KTsgfQorCisgICAgLy8vIENvbnN0cnVjdG9yIHRha2luZyBfX2l0ZXJhdG9ycyB0byBhIHJhbmdlIG9mIHZhbHVlX3R5cGVzIGFuZAorICAgIC8vLyBzb21lIHBvbGljeSBvYmplY3RzIFRoZSB2YWx1ZV90eXBlcyBiZXR3ZWVuIGZpcnN0X2l0IGFuZAorICAgIC8vLyBsYXN0X2l0IHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyIG9iamVjdC4gcl9jbXBfZm4KKyAgICAvLy8gd2lsbCBiZSBjb3BpZWQgYnkgdGhlIGNtcF9mbiBvYmplY3Qgb2YgdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXQ+CisgICAgcHJpb3JpdHlfcXVldWUoSXQgZmlyc3RfaXQsIEl0IGxhc3RfaXQsIGNvbnN0IGNtcF9mbiYgcl9jbXBfZm4pCisgICAgOiBiYXNlX3R5cGUocl9jbXBfZm4pCisgICAgeyBiYXNlX3R5cGU6OmNvcHlfZnJvbV9yYW5nZShmaXJzdF9pdCwgbGFzdF9pdCk7IH0KKworICAgIHByaW9yaXR5X3F1ZXVlKGNvbnN0IHByaW9yaXR5X3F1ZXVlJiBvdGhlcikKKyAgICA6IGJhc2VfdHlwZSgoY29uc3QgYmFzZV90eXBlJiApb3RoZXIpIHsgfQorCisgICAgdmlydHVhbAorICAgIH5wcmlvcml0eV9xdWV1ZSgpIHsgfQorCisgICAgcHJpb3JpdHlfcXVldWUmCisgICAgb3BlcmF0b3I9KGNvbnN0IHByaW9yaXR5X3F1ZXVlJiBvdGhlcikKKyAgICB7CisgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCisJeworCSAgcHJpb3JpdHlfcXVldWUgdG1wKG90aGVyKTsKKwkgIHN3YXAodG1wKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZAorICAgIHN3YXAocHJpb3JpdHlfcXVldWUmIG90aGVyKQorICAgIHsgYmFzZV90eXBlOjpzd2FwKG90aGVyKTsgfQorICB9OworfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworIC8vQH0gaGVhcC1iYXNlZAorI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL3RhZ19hbmRfdHJhaXQuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmRhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy90YWdfYW5kX3RyYWl0LmhwcApAQCAtMCwwICsxLDQ1NCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0IEFtaSBUYXZvcnkgYW5kIFZsYWRpbWlyIERyZWl6aW4sIElCTS1IUkwuCisKKy8vIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIHNlbGwsIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKy8vIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlCisvLyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBOb25lCisvLyBvZiB0aGUgYWJvdmUgYXV0aG9ycywgbm9yIElCTSBIYWlmYSBSZXNlYXJjaCBMYWJvcmF0b3JpZXMsIG1ha2UgYW55CisvLyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisvLyBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkCisvLyB3YXJyYW50eS4KKworLyoqCisgKiBAZmlsZSB0YWdfYW5kX3RyYWl0LmhwcAorICogQ29udGFpbnMgdGFncyBhbmQgdHJhaXRzLCBlLmcuLCBvbmVzIGRlc2NyaWJpbmcgdW5kZXJseWluZworICogZGF0YSBzdHJ1Y3R1cmVzLgorICovCisKKyNpZm5kZWYgUEJfRFNfVEFHX0FORF9UUkFJVF9IUFAKKyNkZWZpbmUgUEJfRFNfVEFHX0FORF9UUkFJVF9IUFAKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90eXBlX3V0aWxzLmhwcD4KKworLyoqCisgKiBAbmFtZXNwYWNlIF9fZ251X3BiZHMKKyAqIEBicmllZiBHTlUgZXh0ZW5zaW9ucyBmb3IgcG9saWN5LWJhc2VkIGRhdGEgc3RydWN0dXJlcyBmb3IgcHVibGljIHVzZS4KKyAqLworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyAgLyoqIEBkZWZncm91cCBwYmRzIFBvbGljeS1CYXNlZCBEYXRhIFN0cnVjdHVyZXMKKyAgICogIEBpbmdyb3VwIGV4dGVuc2lvbnMKKyAgICoKKyAgICogIFRoaXMgaXMgYSBsaWJyYXJ5IG9mIHBvbGljeS1iYXNlZCBlbGVtZW50YXJ5IGRhdGEgc3RydWN0dXJlczoKKyAgICogIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgYW5kIHByaW9yaXR5IHF1ZXVlcy4gSXQgaXMgZGVzaWduZWQgZm9yCisgICAqICBoaWdoLXBlcmZvcm1hbmNlLCBmbGV4aWJpbGl0eSwgc2VtYW50aWMgc2FmZXR5LCBhbmQgY29uZm9ybWFuY2UKKyAgICogIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRhaW5lcnMgaW4gc3RkIChleGNlcHQgZm9yIHNvbWUgcG9pbnRzCisgICAqICB3aGVyZSBpdCBkaWZmZXJzIGJ5IGRlc2lnbikuCisgICAqCisgICAqICBGb3IgZGV0YWlscywgc2VlOgorICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL2V4dC9wYl9kcy9pbmRleC5odG1sCisgICAqCisgICAqICBAeworICAgKi8KKworICAvKioKKyAgICogIEBkZWZncm91cCB0YWdzIFRhZ3MKKyAgICogIEB7ICAgCisgICAqLworICAvLy8gQSB0cml2aWFsIGl0ZXJhdG9yIHRhZy4gU2lnbmlmaWVzIHRoYXQgdGhlIGl0ZXJhdG9ycyBoYXMgbm9uZSBvZgorICAvLy8gc3RkOjppdGVyYXRvcnMncyBtb3ZlbWVudCBhYmlsaXRpZXMuCisgIHN0cnVjdCB0cml2aWFsX2l0ZXJhdG9yX3RhZworICB7IH07CisKKyAgLy8vIFByb2hpYml0IG1vdmluZyB0cml2aWFsIGl0ZXJhdG9ycy4KKyAgdHlwZWRlZiB2b2lkIHRyaXZpYWxfaXRlcmF0b3JfZGlmZmVyZW5jZV90eXBlOworCisKKyAgLyoqCisgICAqICBAZGVmZ3JvdXAgaW52YWxpZGF0aW9uX3RhZ3MgIEludmFsaWRhdGlvbiBHdWFyYW50ZWVzCisgICAqICBAaW5ncm91cCB0YWdzCisgICAqICBAeworICAgKi8KKworICAvKioKKyAgICogIFNpZ25pZmllcyBhIGJhc2ljIGludmFsaWRhdGlvbiBndWFyYW50ZWUgdGhhdCBhbnkgaXRlcmF0b3IsCisgICAqICBwb2ludGVyLCBvciByZWZlcmVuY2UgdG8gYSBjb250YWluZXIgb2JqZWN0J3MgbWFwcGVkIHZhbHVlIHR5cGUKKyAgICogIGlzIHZhbGlkIGFzIGxvbmcgYXMgdGhlIGNvbnRhaW5lciBpcyBub3QgbW9kaWZpZWQuCisgICAqLworICBzdHJ1Y3QgYmFzaWNfaW52YWxpZGF0aW9uX2d1YXJhbnRlZQorICB7IH07CisKKyAgLyoqCisgICAqICBTaWduaWZpZXMgYW4gaW52YWxpZGF0aW9uIGd1YXJhbnRlZSB0aGF0IGluY2x1ZGVzIGFsbCB0aG9zZSBvZgorICAgKiAgaXRzIGJhc2UsIGFuZCBhZGRpdGlvbmFsbHksIHRoYXQgYW55IHBvaW50LXR5cGUgaXRlcmF0b3IsCisgICAqICBwb2ludGVyLCBvciByZWZlcmVuY2UgdG8gYSBjb250YWluZXIgb2JqZWN0J3MgbWFwcGVkIHZhbHVlIHR5cGUKKyAgICogIGlzIHZhbGlkIGFzIGxvbmcgYXMgaXRzIGNvcnJlc3BvbmRpbmcgZW50cnkgaGFzIG5vdCBiZSBlcmFzZWQsCisgICAqICByZWdhcmRsZXNzIG9mIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNvbnRhaW5lciBvYmplY3QuCisgICAqLworICBzdHJ1Y3QgcG9pbnRfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSA6IHB1YmxpYyBiYXNpY19pbnZhbGlkYXRpb25fZ3VhcmFudGVlCisgIHsgfTsKKworICAvKioKKyAgICogIFNpZ25pZmllcyBhbiBpbnZhbGlkYXRpb24gZ3VhcmFudGVlIHRoYXQgaW5jbHVkZXMgYWxsIHRob3NlIG9mCisgICAqICBpdHMgYmFzZSwgYW5kIGFkZGl0aW9uYWxseSwgdGhhdCBhbnkgcmFuZ2UtdHlwZSBpdGVyYXRvcgorICAgKiAgKGluY2x1ZGluZyB0aGUgcmV0dXJucyBvZiBiZWdpbigpIGFuZCBlbmQoKSkgaXMgaW4gdGhlIGNvcnJlY3QKKyAgICogIHJlbGF0aXZlIHBvc2l0aW9ucyB0byBvdGhlciByYW5nZS10eXBlIGl0ZXJhdG9ycyBhcyBsb25nIGFzIGl0cworICAgKiAgY29ycmVzcG9uZGluZyBlbnRyeSBoYXMgbm90IGJlIGVyYXNlZCwgcmVnYXJkbGVzcyBvZgorICAgKiAgbW9kaWZpY2F0aW9ucyB0byB0aGUgY29udGFpbmVyIG9iamVjdC4KKyAgICovCisgIHN0cnVjdCByYW5nZV9pbnZhbGlkYXRpb25fZ3VhcmFudGVlIDogcHVibGljIHBvaW50X2ludmFsaWRhdGlvbl9ndWFyYW50ZWUKKyAgeyB9OworICAvL0B9CisKKworICAvKioKKyAgICogIEBkZWZncm91cCBkc190YWdzIERhdGEgU3RydWN0dXJlIFR5cGUKKyAgICogIEBpbmdyb3VwIHRhZ3MKKyAgICogIEB7CisgICAqLworICAvLy8gQmFzZSBkYXRhIHN0cnVjdHVyZSB0YWcuCisgIHN0cnVjdCBjb250YWluZXJfdGFnCisgIHsgfTsKKworICAvLy8gQmFzaWMgc2VxdWVuY2UuCisgIHN0cnVjdCBzZXF1ZW5jZV90YWcgOiBwdWJsaWMgY29udGFpbmVyX3RhZyB7IH07CisKKyAgLy8vIEJhc2ljIHN0cmluZyBjb250YWluZXIsIGluY2x1c2l2ZSBvZiBzdHJpbmdzLCByb3BlcywgZXRjLgorICBzdHJ1Y3Qgc3RyaW5nX3RhZyA6IHB1YmxpYyBzZXF1ZW5jZV90YWcgeyB9OworCisgIC8vLyBCYXNpYyBhc3NvY2lhdGl2ZS1jb250YWluZXIuCisgIHN0cnVjdCBhc3NvY2lhdGl2ZV90YWcgOiBwdWJsaWMgY29udGFpbmVyX3RhZyB7IH07CisKKyAgLy8vIEJhc2ljIGhhc2ggc3RydWN0dXJlLgorICBzdHJ1Y3QgYmFzaWNfaGFzaF90YWcgOiBwdWJsaWMgYXNzb2NpYXRpdmVfdGFnIHsgfTsKKworICAvLy8gQ29sbGlzaW9uLWNoYWluaW5nIGhhc2guCisgIHN0cnVjdCBjY19oYXNoX3RhZyA6IHB1YmxpYyBiYXNpY19oYXNoX3RhZyB7IH07CisKKyAgLy8vIEdlbmVyYWwtcHJvYmluZyBoYXNoLgorICBzdHJ1Y3QgZ3BfaGFzaF90YWcgOiBwdWJsaWMgYmFzaWNfaGFzaF90YWcgeyB9OworCisgIC8vLyBCYXNpYyBicmFuY2ggc3RydWN0dXJlLgorICBzdHJ1Y3QgYmFzaWNfYnJhbmNoX3RhZyA6IHB1YmxpYyBhc3NvY2lhdGl2ZV90YWcgeyB9OworCisgIC8vLyBCYXNpYyB0cmVlIHN0cnVjdHVyZS4KKyAgc3RydWN0IHRyZWVfdGFnIDogcHVibGljIGJhc2ljX2JyYW5jaF90YWcgeyB9OworCisgIC8vLyBSZWQtYmxhY2sgdHJlZS4KKyAgc3RydWN0IHJiX3RyZWVfdGFnIDogcHVibGljIHRyZWVfdGFnIHsgfTsKKworICAvLy8gU3BsYXkgdHJlZS4KKyAgc3RydWN0IHNwbGF5X3RyZWVfdGFnIDogcHVibGljIHRyZWVfdGFnIHsgfTsKKworICAvLy8gT3JkZXJlZC12ZWN0b3IgdHJlZS4KKyAgc3RydWN0IG92X3RyZWVfdGFnIDogcHVibGljIHRyZWVfdGFnIHsgfTsKKworICAvLy8gQmFzaWMgdHJpZSBzdHJ1Y3R1cmUuCisgIHN0cnVjdCB0cmllX3RhZyA6IHB1YmxpYyBiYXNpY19icmFuY2hfdGFnIHsgfTsKKworICAvLy8gUEFUUklDSUEgdHJpZS4KKyAgc3RydWN0IHBhdF90cmllX3RhZyA6IHB1YmxpYyB0cmllX3RhZyB7IH07CisKKyAgLy8vIExpc3QtdXBkYXRlLgorICBzdHJ1Y3QgbGlzdF91cGRhdGVfdGFnIDogcHVibGljIGFzc29jaWF0aXZlX3RhZyB7IH07CisKKyAgLy8vIEJhc2ljIHByaW9yaXR5LXF1ZXVlLgorICBzdHJ1Y3QgcHJpb3JpdHlfcXVldWVfdGFnIDogcHVibGljIGNvbnRhaW5lcl90YWcgeyB9OworCisgIC8vLyBQYWlyaW5nLWhlYXAuCisgIHN0cnVjdCBwYWlyaW5nX2hlYXBfdGFnIDogcHVibGljIHByaW9yaXR5X3F1ZXVlX3RhZyB7IH07CisKKyAgLy8vIEJpbm9taWFsLWhlYXAuCisgIHN0cnVjdCBiaW5vbWlhbF9oZWFwX3RhZyA6IHB1YmxpYyBwcmlvcml0eV9xdWV1ZV90YWcgeyB9OworCisgIC8vLyBSZWR1bmRhbnQtY291bnRlciBiaW5vbWlhbC1oZWFwLgorICBzdHJ1Y3QgcmNfYmlub21pYWxfaGVhcF90YWcgOiBwdWJsaWMgcHJpb3JpdHlfcXVldWVfdGFnIHsgfTsKKworICAvLy8gQmluYXJ5LWhlYXAgKGFycmF5LWJhc2VkKS4KKyAgc3RydWN0IGJpbmFyeV9oZWFwX3RhZyA6IHB1YmxpYyBwcmlvcml0eV9xdWV1ZV90YWcgeyB9OworCisgIC8vLyBUaGluIGhlYXAuCisgIHN0cnVjdCB0aGluX2hlYXBfdGFnIDogcHVibGljIHByaW9yaXR5X3F1ZXVlX3RhZyB7IH07CisgIC8vQH0KKyAgLy9AfQorCisKKyAgLyoqCisgICAqICBAZGVmZ3JvdXAgdHJhaXRzIFRyYWl0cworICAgKiAgQHsKKyAgICovCisKKyAgLyoqCisgICAqICBAYnJpZWYgUmVwcmVzZW50cyBubyB0eXBlLCBvciBhYnNlbmNlIG9mIHR5cGUsIGZvciB0ZW1wbGF0ZSB0cmlja3MuCisgICAqCisgICAqICBJbiBhIG1hcHBlZC1wb2xpY3ksIGluZGljYXRlcyB0aGF0IGFuIGFzc29jaWF0aXZlIGNvbnRhaW5lciBpcyBhIHNldC4KKyAgICoKKyAgICogIEluIGEgbGlzdC11cGRhdGUgcG9saWN5LCBpbmRpY2F0ZXMgdGhhdCBlYWNoIGxpbmsgZG9lcyBub3QgbmVlZAorICAgKiAgbWV0YWRhdGEuCisgICAqCisgICAqICBJbiBhIGhhc2ggcG9saWN5LCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tYmluaW5nIGhhc2ggZnVuY3Rpb24KKyAgICogIGlzIGFjdHVhbGx5IGEgcmFuZ2VkIGhhc2ggZnVuY3Rpb24uCisgICAqCisgICAqICBJbiBhIHByb2JlIHBvbGljeSwgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbWJpbmluZyBwcm9iZSBmdW5jdGlvbgorICAgKiAgaXMgYWN0dWFsbHkgYSByYW5nZWQgcHJvYmUgZnVuY3Rpb24uCisgICAqLworICBzdHJ1Y3QgbnVsbF90eXBlIHsgfTsKKworICAvLy8gQSBudWxsIG5vZGUgdXBkYXRvciwgaW5kaWNhdGluZyB0aGF0IG5vIG5vZGUgdXBkYXRlcyBhcmUgcmVxdWlyZWQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDIsIHR5cGVuYW1lIF9UcDMsIHR5cGVuYW1lIF9UcDQ+CisgICAgc3RydWN0IG51bGxfbm9kZV91cGRhdGUgOiBwdWJsaWMgbnVsbF90eXBlCisgICAgeyB9OworCisKKyAgLy8vIFByaW1hcnkgdGVtcGxhdGUsIGNvbnRhaW5lciB0cmFpdHMgYmFzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RhZz4KKyAgICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0c19iYXNlOworCisgIC8vLyBTcGVjaWFsaXphdGlvbiwgY2MgaGFzaC4KKyAgdGVtcGxhdGU8PgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0c19iYXNlPGNjX2hhc2hfdGFnPgorICB7CisgICAgdHlwZWRlZiBjY19oYXNoX3RhZyAJCQkJY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgcG9pbnRfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSAJCWludmFsaWRhdGlvbl9ndWFyYW50ZWU7CisKKyAgICBlbnVtCisgICAgICB7CisJb3JkZXJfcHJlc2VydmluZyA9IGZhbHNlLAorCWVyYXNlX2Nhbl90aHJvdyA9IGZhbHNlLAorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gZmFsc2UsCisJcmV2ZXJzZV9pdGVyYXRpb24gPSBmYWxzZQorICAgICAgfTsKKyAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24sIGdwIGhhc2guCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxncF9oYXNoX3RhZz4KKyAgeworICAgIHR5cGVkZWYgZ3BfaGFzaF90YWcgCQkJCWNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICB0eXBlZGVmIGJhc2ljX2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgCQlpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworCW9yZGVyX3ByZXNlcnZpbmcgPSBmYWxzZSwKKwllcmFzZV9jYW5fdGhyb3cgPSBmYWxzZSwKKwlzcGxpdF9qb2luX2Nhbl90aHJvdyA9IGZhbHNlLAorCXJldmVyc2VfaXRlcmF0aW9uID0gZmFsc2UKKyAgICAgIH07CisgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uLCByYiB0cmVlLgorICB0ZW1wbGF0ZTw+CisgIHN0cnVjdCBjb250YWluZXJfdHJhaXRzX2Jhc2U8cmJfdHJlZV90YWc+CisgIHsKKyAgICB0eXBlZGVmIHJiX3RyZWVfdGFnIAkJCQljb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiByYW5nZV9pbnZhbGlkYXRpb25fZ3VhcmFudGVlIAkJaW52YWxpZGF0aW9uX2d1YXJhbnRlZTsKKworICAgIGVudW0KKyAgICAgIHsKKwlvcmRlcl9wcmVzZXJ2aW5nID0gdHJ1ZSwKKwllcmFzZV9jYW5fdGhyb3cgPSBmYWxzZSwKKwlzcGxpdF9qb2luX2Nhbl90aHJvdyA9IGZhbHNlLAorCXJldmVyc2VfaXRlcmF0aW9uID0gdHJ1ZQorICAgICAgfTsKKyAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24sIHNwbGF5IHRyZWUuCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxzcGxheV90cmVlX3RhZz4KKyAgeworICAgIHR5cGVkZWYgc3BsYXlfdHJlZV90YWcgCQkJCWNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICB0eXBlZGVmIHJhbmdlX2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgCQlpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworCW9yZGVyX3ByZXNlcnZpbmcgPSB0cnVlLAorCWVyYXNlX2Nhbl90aHJvdyA9IGZhbHNlLAorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gZmFsc2UsCisJcmV2ZXJzZV9pdGVyYXRpb24gPSB0cnVlCisgICAgICB9OworICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiwgb3YgdHJlZS4KKyAgdGVtcGxhdGU8PgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0c19iYXNlPG92X3RyZWVfdGFnPgorICB7CisgICAgdHlwZWRlZiBvdl90cmVlX3RhZyAJCQkJY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgYmFzaWNfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSAJCWludmFsaWRhdGlvbl9ndWFyYW50ZWU7CisKKyAgICBlbnVtCisgICAgICB7CisJb3JkZXJfcHJlc2VydmluZyA9IHRydWUsCisJZXJhc2VfY2FuX3Rocm93ID0gdHJ1ZSwKKwlzcGxpdF9qb2luX2Nhbl90aHJvdyA9IHRydWUsCisJcmV2ZXJzZV9pdGVyYXRpb24gPSBmYWxzZQorICAgICAgfTsKKyAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24sIHBhdCB0cmllLgorICB0ZW1wbGF0ZTw+CisgIHN0cnVjdCBjb250YWluZXJfdHJhaXRzX2Jhc2U8cGF0X3RyaWVfdGFnPgorICB7CisgICAgdHlwZWRlZiBwYXRfdHJpZV90YWcgCQkJCWNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICB0eXBlZGVmIHJhbmdlX2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgCQlpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworCW9yZGVyX3ByZXNlcnZpbmcgPSB0cnVlLAorCWVyYXNlX2Nhbl90aHJvdyA9IGZhbHNlLAorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gdHJ1ZSwKKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IHRydWUKKyAgICAgIH07CisgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uLCBsaXN0IHVwZGF0ZS4KKyAgdGVtcGxhdGU8PgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0c19iYXNlPGxpc3RfdXBkYXRlX3RhZz4KKyAgeworICAgIHR5cGVkZWYgbGlzdF91cGRhdGVfdGFnIAkJCQljb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBwb2ludF9pbnZhbGlkYXRpb25fZ3VhcmFudGVlIAkJaW52YWxpZGF0aW9uX2d1YXJhbnRlZTsKKworICAgIGVudW0KKyAgICAgIHsKKwlvcmRlcl9wcmVzZXJ2aW5nID0gZmFsc2UsCisJZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisJc3BsaXRfam9pbl9jYW5fdGhyb3cgPSBmYWxzZSwKKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IGZhbHNlCisgICAgICB9OworICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiwgcGFpcmluZyBoZWFwLgorICB0ZW1wbGF0ZTw+CisgIHN0cnVjdCBjb250YWluZXJfdHJhaXRzX2Jhc2U8cGFpcmluZ19oZWFwX3RhZz4KKyAgeworICAgIHR5cGVkZWYgcGFpcmluZ19oZWFwX3RhZyAJCQkJY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgcG9pbnRfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSAJCWludmFsaWRhdGlvbl9ndWFyYW50ZWU7CisKKyAgICBlbnVtCisgICAgICB7CisJb3JkZXJfcHJlc2VydmluZyA9IGZhbHNlLAorCWVyYXNlX2Nhbl90aHJvdyA9IGZhbHNlLAorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gZmFsc2UsCisJcmV2ZXJzZV9pdGVyYXRpb24gPSBmYWxzZQorICAgICAgfTsKKyAgfTsKKworICAvLy8gU3BlY2lhbGl6YXRpb24sIHRoaW4gaGVhcC4KKyAgdGVtcGxhdGU8PgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0c19iYXNlPHRoaW5faGVhcF90YWc+CisgIHsKKyAgICB0eXBlZGVmIHRoaW5faGVhcF90YWcgCQkJCWNvbnRhaW5lcl9jYXRlZ29yeTsKKyAgICB0eXBlZGVmIHBvaW50X2ludmFsaWRhdGlvbl9ndWFyYW50ZWUgCQlpbnZhbGlkYXRpb25fZ3VhcmFudGVlOworCisgICAgZW51bQorICAgICAgeworCW9yZGVyX3ByZXNlcnZpbmcgPSBmYWxzZSwKKwllcmFzZV9jYW5fdGhyb3cgPSBmYWxzZSwKKwlzcGxpdF9qb2luX2Nhbl90aHJvdyA9IGZhbHNlLAorCXJldmVyc2VfaXRlcmF0aW9uID0gZmFsc2UKKyAgICAgIH07CisgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uLCBiaW5vbWlhbCBoZWFwLgorICB0ZW1wbGF0ZTw+CisgIHN0cnVjdCBjb250YWluZXJfdHJhaXRzX2Jhc2U8Ymlub21pYWxfaGVhcF90YWc+CisgIHsKKyAgICB0eXBlZGVmIGJpbm9taWFsX2hlYXBfdGFnIAkJCQljb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBwb2ludF9pbnZhbGlkYXRpb25fZ3VhcmFudGVlIAkJaW52YWxpZGF0aW9uX2d1YXJhbnRlZTsKKworICAgIGVudW0KKyAgICAgIHsKKwlvcmRlcl9wcmVzZXJ2aW5nID0gZmFsc2UsCisJZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisJc3BsaXRfam9pbl9jYW5fdGhyb3cgPSBmYWxzZSwKKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IGZhbHNlCisgICAgICB9OworICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiwgcmMgYmlub21pYWwgaGVhcC4KKyAgdGVtcGxhdGU8PgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0c19iYXNlPHJjX2Jpbm9taWFsX2hlYXBfdGFnPgorICB7CisgICAgdHlwZWRlZiByY19iaW5vbWlhbF9oZWFwX3RhZyAJCQljb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBwb2ludF9pbnZhbGlkYXRpb25fZ3VhcmFudGVlIAkJaW52YWxpZGF0aW9uX2d1YXJhbnRlZTsKKworICAgIGVudW0KKyAgICAgIHsKKwlvcmRlcl9wcmVzZXJ2aW5nID0gZmFsc2UsCisJZXJhc2VfY2FuX3Rocm93ID0gZmFsc2UsCisJc3BsaXRfam9pbl9jYW5fdGhyb3cgPSBmYWxzZSwKKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IGZhbHNlCisgICAgICB9OworICB9OworCisgIC8vLyBTcGVjaWFsaXphdGlvbiwgYmluYXJ5IGhlYXAuCisgIHRlbXBsYXRlPD4KKyAgc3RydWN0IGNvbnRhaW5lcl90cmFpdHNfYmFzZTxiaW5hcnlfaGVhcF90YWc+CisgIHsKKyAgICB0eXBlZGVmIGJpbmFyeV9oZWFwX3RhZyAJCQkJY29udGFpbmVyX2NhdGVnb3J5OworICAgIHR5cGVkZWYgYmFzaWNfaW52YWxpZGF0aW9uX2d1YXJhbnRlZSAJCWludmFsaWRhdGlvbl9ndWFyYW50ZWU7CisKKyAgICBlbnVtCisgICAgICB7CisJb3JkZXJfcHJlc2VydmluZyA9IGZhbHNlLAorCWVyYXNlX2Nhbl90aHJvdyA9IGZhbHNlLAorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gdHJ1ZSwKKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IGZhbHNlCisgICAgICB9OworICB9OworCisKKyAgLy8vIENvbnRhaW5lciB0cmFpdHMuCisgIC8vIFNlZSBNYXR0IEF1c3Rlcm4gZm9yIHRoZSBuYW1lLCBTLiBNZXllcnMgTUVGQysrICMyLCBvdGhlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIENudG5yPgorICBzdHJ1Y3QgY29udGFpbmVyX3RyYWl0cworICA6IHB1YmxpYyBjb250YWluZXJfdHJhaXRzX2Jhc2U8dHlwZW5hbWUgQ250bnI6OmNvbnRhaW5lcl9jYXRlZ29yeT4KKyAgeworICAgIHR5cGVkZWYgQ250bnIgCQkJCSAgICAgICBjb250YWluZXJfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENudG5yOjpjb250YWluZXJfY2F0ZWdvcnkgICAgICAgICBjb250YWluZXJfY2F0ZWdvcnk7CisgICAgdHlwZWRlZiBjb250YWluZXJfdHJhaXRzX2Jhc2U8Y29udGFpbmVyX2NhdGVnb3J5PiAgYmFzZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjppbnZhbGlkYXRpb25fZ3VhcmFudGVlIGludmFsaWRhdGlvbl9ndWFyYW50ZWU7CisKKyAgICBlbnVtCisgICAgICB7CisJLy8vIFRydWUgb25seSBpZiBDbnRuciBvYmplY3RzIGd1YXJhbnRlZSBzdG9yaW5nICBrZXlzIGJ5IG9yZGVyLgorCW9yZGVyX3ByZXNlcnZpbmcgPSBiYXNlX3R5cGU6Om9yZGVyX3ByZXNlcnZpbmcsCisKKwkvLy8gVHJ1ZSBvbmx5IGlmIGVyYXNpbmcgYSBrZXkgY2FuIHRocm93LgorCWVyYXNlX2Nhbl90aHJvdyA9IGJhc2VfdHlwZTo6ZXJhc2VfY2FuX3Rocm93LAorCisJLy8vIFRydWUgb25seSBpZiBzcGxpdCBvciBqb2luIG9wZXJhdGlvbnMgY2FuIHRocm93LgorCXNwbGl0X2pvaW5fY2FuX3Rocm93ID0gYmFzZV90eXBlOjpzcGxpdF9qb2luX2Nhbl90aHJvdywKKworCS8vLyBUcnVlIG9ubHkgcmV2ZXJzZSBpdGVyYXRvcnMgYXJlIHN1cHBvcnRlZC4KKwlyZXZlcnNlX2l0ZXJhdGlvbiA9IGJhc2VfdHlwZTo6cmV2ZXJzZV9pdGVyYXRpb24KKyAgICAgIH07CisgIH07CisgIC8vQH0KKworCisgIG5hbWVzcGFjZSBkZXRhaWwKKyAgeworICAgIC8vLyBEaXNwYXRjaCBtZWNoYW5pc20sIHByaW1hcnkgdGVtcGxhdGUgZm9yIGFzc29jaWF0aXZlIHR5cGVzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIFRhZywKKwkgICAgIHR5cGVuYW1lIFBvbGljeV9UbCA9IG51bGxfdHlwZT4KKyAgICAgIHN0cnVjdCBjb250YWluZXJfYmFzZV9kaXNwYXRjaDsKKyAgfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKKyAgLy9AfQorfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjE1MTNlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwCkBAIC0wLDAgKzEsMTU3IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKioKKyAqIEBmaWxlIHRyZWVfcG9saWN5LmhwcAorICogQ29udGFpbnMgdHJlZS1yZWxhdGVkIHBvbGljaWVzLgorICovCisKKyNpZm5kZWYgUEJfRFNfVFJFRV9QT0xJQ1lfSFBQCisjZGVmaW5lIFBCX0RTX1RSRUVfUE9MSUNZX0hQUAorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvYnJhbmNoX3BvbGljeS9icmFuY2hfcG9saWN5LmhwcD4KKworbmFtZXNwYWNlIF9fZ251X3BiZHMKK3sKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfVF9ERUMgXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsIHR5cGVuYW1lIE5vZGVfSXRyLCB0eXBlbmFtZSBDbXBfRm4sIFwKKwkgICB0eXBlbmFtZSBfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU8Tm9kZV9DSXRyLCBOb2RlX0l0ciwgQ21wX0ZuLCBfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfQlJBTkNIX1BPTElDWV9CQVNFIFwKKyAgZGV0YWlsOjpicmFuY2hfcG9saWN5PE5vZGVfQ0l0ciwgTm9kZV9JdHIsIF9BbGxvYz4KKworICAvLy8gRnVuY3RvciB1cGRhdGluZyByYW5rcyBvZiBlbnRyZWVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsIHR5cGVuYW1lIE5vZGVfSXRyLCAKKwkgICB0eXBlbmFtZSBDbXBfRm4sIHR5cGVuYW1lIF9BbGxvYz4KKyAgY2xhc3MgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlIDogcHJpdmF0ZSBQQl9EU19CUkFOQ0hfUE9MSUNZX0JBU0UKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgUEJfRFNfQlJBTkNIX1BPTElDWV9CQVNFIAkJICAgICAgIAliYXNlX3R5cGU7CisKKyAgcHVibGljOgorICAgIHR5cGVkZWYgQ21wX0ZuIAkJCQkJY21wX2ZuOworICAgIHR5cGVkZWYgX0FsbG9jIAkJCQkJYWxsb2NhdG9yX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6c2l6ZV90eXBlIAkJc2l6ZV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjprZXlfdHlwZSAJCWtleV90eXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjprZXlfY29uc3RfcmVmZXJlbmNlIAlrZXlfY29uc3RfcmVmZXJlbmNlOworCisgICAgdHlwZWRlZiBzaXplX3R5cGUgCQkJCQltZXRhZGF0YV90eXBlOworICAgIHR5cGVkZWYgTm9kZV9DSXRyIAkgICAgICAgCQkJbm9kZV9jb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIE5vZGVfSXRyIAkJCQkJbm9kZV9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfY29uc3RfaXRlcmF0b3I6OnZhbHVlX3R5cGUgCWNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9pdGVyYXRvcjo6dmFsdWVfdHlwZSAJCWl0ZXJhdG9yOworCisgICAgLy8vIEZpbmRzIGFuIGVudHJ5IGJ5IF9fb3JkZXIuIFJldHVybnMgYSBjb25zdF9pdGVyYXRvciB0byB0aGUKKyAgICAvLy8gZW50cnkgd2l0aCB0aGUgX19vcmRlciBvcmRlciwgb3IgYSBjb25zdF9pdGVyYXRvciB0byB0aGUKKyAgICAvLy8gY29udGFpbmVyIG9iamVjdCdzIGVuZCBpZiBvcmRlciBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUKKyAgICAvLy8gY29udGFpbmVyIG9iamVjdC4KKyAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3IKKyAgICBmaW5kX2J5X29yZGVyKHNpemVfdHlwZSkgY29uc3Q7CisKKyAgICAvLy8gRmluZHMgYW4gZW50cnkgYnkgX19vcmRlci4gUmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgZW50cnkKKyAgICAvLy8gd2l0aCB0aGUgX19vcmRlciBvcmRlciwgb3IgYW4gaXRlcmF0b3IgdG8gdGhlIGNvbnRhaW5lcgorICAgIC8vLyBvYmplY3QncyBlbmQgaWYgb3JkZXIgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcgorICAgIC8vLyBvYmplY3QuCisgICAgaW5saW5lIGl0ZXJhdG9yCisgICAgZmluZF9ieV9vcmRlcihzaXplX3R5cGUpOworCisgICAgLy8vIFJldHVybnMgdGhlIG9yZGVyIG9mIGEga2V5IHdpdGhpbiBhIHNlcXVlbmNlLiBGb3IgZXhhcG1sZSwgaWYKKyAgICAvLy8gcl9rZXkgaXMgdGhlIHNtYWxsZXN0IGtleSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gMDsgaWYgcl9rZXkKKyAgICAvLy8gaXMgYSBrZXkgYmV0d2VlbiB0aGUgc21hbGxlc3QgYW5kIG5leHQga2V5LCB0aGlzIG1ldGhvZCB3aWxsCisgICAgLy8vIHJldHVybiAxOyBpZiByX2tleSBpcyBhIGtleSBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCBrZXksIHRoaXMKKyAgICAvLy8gbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBzaXplIG9mIHJfYy4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgb3JkZXJfb2Zfa2V5KGtleV9jb25zdF9yZWZlcmVuY2UpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgLy8vIENvbnN0IHJlZmVyZW5jZSB0byB0aGUgY29udGFpbmVyJ3MgdmFsdWUtdHlwZS4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9yZWZlcmVuY2U7CisKKyAgICAvLy8gQ29uc3QgcG9pbnRlciB0byB0aGUgY29udGFpbmVyJ3MgdmFsdWUtdHlwZS4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcG9pbnRlciAJCWNvbnN0X3BvaW50ZXI7CisKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPG1ldGFkYXRhX3R5cGU+OjpvdGhlciBfX3JlYmluZF9tOworCisgICAgLy8vIENvbnN0IG1ldGFkYXRhIHJlZmVyZW5jZS4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmViaW5kX206OmNvbnN0X3JlZmVyZW5jZSAgICAgICBtZXRhZGF0YV9jb25zdF9yZWZlcmVuY2U7CisKKyAgICAvLy8gTWV0YWRhdGEgcmVmZXJlbmNlLgorICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbTo6cmVmZXJlbmNlIAkJbWV0YWRhdGFfcmVmZXJlbmNlOworCisgICAgLy8vIFJldHVybnMgdGhlIG5vZGVfY29uc3RfaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSB0cmVlJ3Mgcm9vdCBub2RlLgorICAgIHZpcnR1YWwgbm9kZV9jb25zdF9pdGVyYXRvcgorICAgIG5vZGVfYmVnaW4oKSBjb25zdCA9IDA7CisKKyAgICAvLy8gUmV0dXJucyB0aGUgbm9kZV9pdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHRyZWUncyByb290IG5vZGUuCisgICAgdmlydHVhbCBub2RlX2l0ZXJhdG9yCisgICAgbm9kZV9iZWdpbigpID0gMDsKKworICAgIC8vLyBSZXR1cm5zIHRoZSBub2RlX2NvbnN0X2l0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCBhIGp1c3QtYWZ0ZXIgbGVhZiBub2RlLgorICAgIHZpcnR1YWwgbm9kZV9jb25zdF9pdGVyYXRvcgorICAgIG5vZGVfZW5kKCkgY29uc3QgPSAwOworCisgICAgLy8vIFJldHVybnMgdGhlIG5vZGVfaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIGEganVzdC1hZnRlciBsZWFmIG5vZGUuCisgICAgdmlydHVhbCBub2RlX2l0ZXJhdG9yCisgICAgbm9kZV9lbmQoKSA9IDA7CisKKyAgICAvLy8gQWNjZXNzIHRvIHRoZSBjbXBfZm4gb2JqZWN0LgorICAgIHZpcnR1YWwgY21wX2ZuJiAKKyAgICBnZXRfY21wX2ZuKCkgPSAwOworCisgIHByb3RlY3RlZDoKKyAgICAvLy8gVXBkYXRlcyB0aGUgcmFuayBvZiBhIG5vZGUgdGhyb3VnaCBhIG5vZGVfaXRlcmF0b3Igbm9kZV9pdDsKKyAgICAvLy8gZW5kX25kX2l0IGlzIHRoZSBlbmQgbm9kZSBpdGVyYXRvci4KKyAgICBpbmxpbmUgdm9pZAorICAgIG9wZXJhdG9yKCkobm9kZV9pdGVyYXRvciwgbm9kZV9jb25zdF9pdGVyYXRvcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsCisgICAgfnRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZSgpOworICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90cmVlX3BvbGljeS9vcmRlcl9zdGF0aXN0aWNzX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19UX0RFQworI3VuZGVmIFBCX0RTX0NMQVNTX0NfREVDCisjdW5kZWYgUEJfRFNfQlJBTkNIX1BPTElDWV9CQVNFCisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3BiZHMKKworI2VuZGlmIApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvdHJpZV9wb2xpY3kuaHBwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcGJfZHMvdHJpZV9wb2xpY3kuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MGFlMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wYl9kcy90cmllX3BvbGljeS5ocHAKQEAgLTAsMCArMSwzNjAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIENvcHlyaWdodCAoQykgMjAwNCBBbWkgVGF2b3J5IGFuZCBWbGFkaW1pciBEcmVpemluLCBJQk0tSFJMLgorCisvLyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBzZWxsLCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisvLyBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZQorLy8gYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gTm9uZQorLy8gb2YgdGhlIGFib3ZlIGF1dGhvcnMsIG5vciBJQk0gSGFpZmEgUmVzZWFyY2ggTGFib3JhdG9yaWVzLCBtYWtlIGFueQorLy8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorLy8gcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorLy8gd2FycmFudHkuCisKKy8qKgorICogQGZpbGUgdHJpZV9wb2xpY3kuaHBwCisgKiBDb250YWlucyB0cmllLXJlbGF0ZWQgcG9saWNpZXMuCisgKi8KKworI2lmbmRlZiBQQl9EU19UUklFX1BPTElDWV9IUFAKKyNkZWZpbmUgUEJfRFNfVFJJRV9QT0xJQ1lfSFBQCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3R5cGVfdXRpbHMuaHBwPgorI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvdHJpZV9wb2xpY3lfYmFzZS5ocHA+CisKK25hbWVzcGFjZSBfX2dudV9wYmRzCit7CisjZGVmaW5lIFBCX0RTX0NMQVNTX1RfREVDIFwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nLCB0eXBlbmFtZSBTdHJpbmc6OnZhbHVlX3R5cGUgTWluX0VfVmFsLCBcCisJICAgdHlwZW5hbWUgU3RyaW5nOjp2YWx1ZV90eXBlIE1heF9FX1ZhbCwgYm9vbCBSZXZlcnNlLCBcCisJICAgdHlwZW5hbWUgX0FsbG9jPgorCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgdHJpZV9zdHJpbmdfYWNjZXNzX3RyYWl0czxTdHJpbmcsIE1pbl9FX1ZhbCxNYXhfRV9WYWwsUmV2ZXJzZSxfQWxsb2M+CisKKyAgLyoqCisgICAqICBFbGVtZW50IGFjY2VzcyB0cmFpdHMgZm9yIHN0cmluZyB0eXBlcy4KKyAgICoKKyAgICogIEB0cGFyYW0gU3RyaW5nIAkgICAgCVN0cmluZyB0eXBlLgorICAgKiAgQHRwYXJhbSBNaW5fRV9WYWwgICAgICAgIAlNaW5pbWFsIGVsZW1lbnQgdmFsdWUuCisgICAqICBAdHBhcmFtIE1heF9FX1ZhbAkgICAgCU1heGltdW0gZWxlbWVudCB2YWx1ZS4KKyAgICogIEB0cGFyYW0gUmV2ZXJzZQkgICAgICAgIFJldmVyc2UgaXRlcmF0aW9uIHNob3VsZCBiZSB1c2VkLgorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiBmYWxzZS4KKyAgICogIEB0cGFyYW0gX0FsbG9jIAkgICAgCUFsbG9jYXRvciB0eXBlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nID0gc3RkOjpzdHJpbmcsCisJICAgdHlwZW5hbWUgU3RyaW5nOjp2YWx1ZV90eXBlIE1pbl9FX1ZhbCA9IGRldGFpbDo6X19udW1lcmljX3RyYWl0czx0eXBlbmFtZSBTdHJpbmc6OnZhbHVlX3R5cGU+OjpfX21pbiwKKwkgICB0eXBlbmFtZSBTdHJpbmc6OnZhbHVlX3R5cGUgTWF4X0VfVmFsID0gZGV0YWlsOjpfX251bWVyaWNfdHJhaXRzPHR5cGVuYW1lIFN0cmluZzo6dmFsdWVfdHlwZT46Ol9fbWF4LAorCSAgIGJvb2wgUmV2ZXJzZSA9IGZhbHNlLAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgc3RydWN0IHRyaWVfc3RyaW5nX2FjY2Vzc190cmFpdHMKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZQkJCSAgc2l6ZV90eXBlOworICAgIHR5cGVkZWYgU3RyaW5nIAkJCQkJICBrZXlfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGtleV90eXBlPgkgIF9fcmViaW5kX2s7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9rOjpvdGhlcjo6Y29uc3RfcmVmZXJlbmNlICAga2V5X2NvbnN0X3JlZmVyZW5jZTsKKworICAgIGVudW0KKyAgICAgIHsKKwlyZXZlcnNlID0gUmV2ZXJzZQorICAgICAgfTsKKworICAgIC8vLyBFbGVtZW50IGNvbnN0IGl0ZXJhdG9yIHR5cGUuCisgICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6Ol9fY29uZGl0aW9uYWxfdHlwZTxSZXZlcnNlLCBcCisJCSAgICAgICB0eXBlbmFtZSBTdHJpbmc6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IsIFwKKwkJICAgICAgIHR5cGVuYW1lIFN0cmluZzo6Y29uc3RfaXRlcmF0b3I+OjpfX3R5cGUgY29uc3RfaXRlcmF0b3I7CisKKyAgICAvLy8gRWxlbWVudCB0eXBlLgorICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8Y29uc3RfaXRlcmF0b3I+Ojp2YWx1ZV90eXBlIGVfdHlwZTsKKworICAgIGVudW0KKyAgICAgIHsKKwltaW5fZV92YWwgPSBNaW5fRV9WYWwsCisJbWF4X2VfdmFsID0gTWF4X0VfVmFsLAorCW1heF9zaXplID0gbWF4X2VfdmFsIC0gbWluX2VfdmFsICsgMQorICAgICAgfTsKKyAgICBQQl9EU19TVEFUSUNfQVNTRVJUKG1pbl9tYXhfc2l6ZSwgbWF4X3NpemUgPj0gMik7CisKKyAgICAvLy8gUmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mCisgICAgLy8vIGtleV9jb25zdF9yZWZlcmVuY2UgYWd1bW5ldC4KKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0X2l0ZXJhdG9yCisgICAgYmVnaW4oa2V5X2NvbnN0X3JlZmVyZW5jZSk7CisKKyAgICAvLy8gUmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZSBhZnRlci1sYXN0IGVsZW1lbnQgb2YKKyAgICAvLy8ga2V5X2NvbnN0X3JlZmVyZW5jZSBhcmd1bWVudC4KKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0X2l0ZXJhdG9yCisgICAgZW5kKGtleV9jb25zdF9yZWZlcmVuY2UpOworCisgICAgLy8vIE1hcHMgYW4gZWxlbWVudCB0byBhIHBvc2l0aW9uLgorICAgIGlubGluZSBzdGF0aWMgc2l6ZV90eXBlCisgICAgZV9wb3MoZV90eXBlIGUpOworCisgIHByaXZhdGU6CisgICAgaW5saW5lIHN0YXRpYyBjb25zdF9pdGVyYXRvcgorICAgIGJlZ2luX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlLCBkZXRhaWw6OmZhbHNlX3R5cGUpOworCisgICAgaW5saW5lIHN0YXRpYyBjb25zdF9pdGVyYXRvcgorICAgIGJlZ2luX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlLCBkZXRhaWw6OnRydWVfdHlwZSk7CisKKyAgICBpbmxpbmUgc3RhdGljIGNvbnN0X2l0ZXJhdG9yCisgICAgZW5kX2ltcChrZXlfY29uc3RfcmVmZXJlbmNlLCBkZXRhaWw6OmZhbHNlX3R5cGUpOworCisgICAgaW5saW5lIHN0YXRpYyBjb25zdF9pdGVyYXRvcgorICAgIGVuZF9pbXAoa2V5X2NvbnN0X3JlZmVyZW5jZSwgZGV0YWlsOjp0cnVlX3R5cGUpOworCisgICAgc3RhdGljIGRldGFpbDo6aW50ZWdyYWxfY29uc3RhbnQ8aW50LCBSZXZlcnNlPiBzX3Jldl9pbmQ7CisgIH07CisKKyNpbmNsdWRlIDxleHQvcGJfZHMvZGV0YWlsL3RyaWVfcG9saWN5L3RyaWVfc3RyaW5nX2FjY2Vzc190cmFpdHNfaW1wLmhwcD4KKworI3VuZGVmIFBCX0RTX0NMQVNTX1RfREVDCisjdW5kZWYgUEJfRFNfQ0xBU1NfQ19ERUMKKworI2RlZmluZSBQQl9EU19DTEFTU19UX0RFQyBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVfQ0l0cix0eXBlbmFtZSBOb2RlX0l0ciwgXAorCSAgIHR5cGVuYW1lIF9BVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfQ0xBU1NfQ19ERUMgXAorICB0cmllX3ByZWZpeF9zZWFyY2hfbm9kZV91cGRhdGU8Tm9kZV9DSXRyLCBOb2RlX0l0ciwgXAorCQkJCSBfQVRyYWl0cyxfQWxsb2M+CisKKyNkZWZpbmUgUEJfRFNfVFJJRV9QT0xJQ1lfQkFTRSBcCisgIGRldGFpbDo6dHJpZV9wb2xpY3lfYmFzZTxOb2RlX0NJdHIsTm9kZV9JdHIsX0FUcmFpdHMsIF9BbGxvYz4KKworICAvLy8gQSBub2RlIHVwZGF0b3IgdGhhdCBhbGxvd3MgdHJpZXMgdG8gYmUgc2VhcmNoZWQgZm9yIHRoZSByYW5nZSBvZgorICAvLy8gdmFsdWVzIHRoYXQgbWF0Y2ggYSBjZXJ0YWluIHByZWZpeC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZV9DSXRyLAorCSAgIHR5cGVuYW1lIE5vZGVfSXRyLAorCSAgIHR5cGVuYW1lIF9BVHJhaXRzLAorCSAgIHR5cGVuYW1lIF9BbGxvYz4KKyAgY2xhc3MgdHJpZV9wcmVmaXhfc2VhcmNoX25vZGVfdXBkYXRlIDogcHJpdmF0ZSBQQl9EU19UUklFX1BPTElDWV9CQVNFCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIFBCX0RTX1RSSUVfUE9MSUNZX0JBU0UgCQkgICAgICAgCWJhc2VfdHlwZTsKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV90eXBlIAkJa2V5X3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV9jb25zdF9yZWZlcmVuY2UgCWtleV9jb25zdF9yZWZlcmVuY2U7CisKKyAgICAvLy8gRWxlbWVudCBhY2Nlc3MgdHJhaXRzLgorICAgIHR5cGVkZWYgX0FUcmFpdHMgCQkJCWFjY2Vzc190cmFpdHM7CisKKyAgICAvLy8gQ29uc3QgZWxlbWVudCBpdGVyYXRvci4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM6OmNvbnN0X2l0ZXJhdG9yIAlhX2NvbnN0X2l0ZXJhdG9yOworCisgICAgLy8vIF9BbGxvYyB0eXBlLgorICAgIHR5cGVkZWYgX0FsbG9jIAkgICAgICAgCQkJCWFsbG9jYXRvcl90eXBlOworCisgICAgLy8vIFNpemUgdHlwZS4KKyAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpzaXplX3R5cGUgCQlzaXplX3R5cGU7CisgICAgdHlwZWRlZiBudWxsX3R5cGUgCQkJCQltZXRhZGF0YV90eXBlOworICAgIHR5cGVkZWYgTm9kZV9JdHIgCQkJCQlub2RlX2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTm9kZV9DSXRyIAkJCQkJbm9kZV9jb25zdF9pdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfaXRlcmF0b3I6OnZhbHVlX3R5cGUgCQlpdGVyYXRvcjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIG5vZGVfY29uc3RfaXRlcmF0b3I6OnZhbHVlX3R5cGUgCWNvbnN0X2l0ZXJhdG9yOworCisgICAgLy8vIEZpbmRzIHRoZSBjb25zdCBpdGVyYXRvciByYW5nZSBjb3JyZXNwb25kaW5nIHRvIGFsbCB2YWx1ZXMKKyAgICAvLy8gd2hvc2UgcHJlZml4ZXMgbWF0Y2ggcl9rZXkuCisgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4KKyAgICBwcmVmaXhfcmFuZ2Uoa2V5X2NvbnN0X3JlZmVyZW5jZSkgY29uc3Q7CisKKyAgICAvLy8gRmluZHMgdGhlIGl0ZXJhdG9yIHJhbmdlIGNvcnJlc3BvbmRpbmcgdG8gYWxsIHZhbHVlcyB3aG9zZQorICAgIC8vLyBwcmVmaXhlcyBtYXRjaCByX2tleS4KKyAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgIHByZWZpeF9yYW5nZShrZXlfY29uc3RfcmVmZXJlbmNlKTsKKworICAgIC8vLyBGaW5kcyB0aGUgY29uc3QgaXRlcmF0b3IgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbGwgdmFsdWVzCisgICAgLy8vIHdob3NlIHByZWZpeGVzIG1hdGNoIFtiLCBlKS4KKyAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgIHByZWZpeF9yYW5nZShhX2NvbnN0X2l0ZXJhdG9yLCBhX2NvbnN0X2l0ZXJhdG9yKSBjb25zdDsKKworICAgIC8vLyBGaW5kcyB0aGUgaXRlcmF0b3IgcmFuZ2UgY29ycmVzcG9uZGluZyB0byBhbGwgdmFsdWVzIHdob3NlCisgICAgLy8vIHByZWZpeGVzIG1hdGNoIFtiLCBlKS4KKyAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPgorICAgIHByZWZpeF9yYW5nZShhX2NvbnN0X2l0ZXJhdG9yLCBhX2NvbnN0X2l0ZXJhdG9yKTsKKworICBwcm90ZWN0ZWQ6CisgICAgLy8vIENhbGxlZCB0byB1cGRhdGUgYSBub2RlJ3MgbWV0YWRhdGEuCisgICAgaW5saW5lIHZvaWQKKyAgICBvcGVyYXRvcigpKG5vZGVfaXRlcmF0b3Igbm9kZV9pdCwgbm9kZV9jb25zdF9pdGVyYXRvciBlbmRfbmRfaXQpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgbm9kZV9pdGVyYXRvcgorICAgIG5leHRfY2hpbGQobm9kZV9pdGVyYXRvciwgYV9jb25zdF9pdGVyYXRvciwgYV9jb25zdF9pdGVyYXRvciwKKwkgICAgICAgbm9kZV9pdGVyYXRvciwgY29uc3QgYWNjZXNzX3RyYWl0cyYpOworCisgICAgLy8vIFJldHVybnMgdGhlIGNvbnN0IGl0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUganVzdC1hZnRlciBsYXN0IGVsZW1lbnQuCisgICAgdmlydHVhbCBjb25zdF9pdGVyYXRvcgorICAgIGVuZCgpIGNvbnN0ID0gMDsKKworICAgIC8vLyBSZXR1cm5zIHRoZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGp1c3QtYWZ0ZXIgbGFzdCBlbGVtZW50LgorICAgIHZpcnR1YWwgaXRlcmF0b3IKKyAgICBlbmQoKSA9IDA7CisKKyAgICAvLy8gUmV0dXJucyB0aGUgbm9kZV9jb25zdF9pdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHRyaWUncyByb290IG5vZGUuCisgICAgdmlydHVhbCBub2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgbm9kZV9iZWdpbigpIGNvbnN0ID0gMDsKKworICAgIC8vLyBSZXR1cm5zIHRoZSBub2RlX2l0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJpZSdzIHJvb3Qgbm9kZS4KKyAgICB2aXJ0dWFsIG5vZGVfaXRlcmF0b3IKKyAgICBub2RlX2JlZ2luKCkgPSAwOworCisgICAgLy8vIFJldHVybnMgdGhlIG5vZGVfY29uc3RfaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIGEganVzdC1hZnRlciBsZWFmIG5vZGUuCisgICAgdmlydHVhbCBub2RlX2NvbnN0X2l0ZXJhdG9yCisgICAgbm9kZV9lbmQoKSBjb25zdCA9IDA7CisKKyAgICAvLy8gUmV0dXJucyB0aGUgbm9kZV9pdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggYSBqdXN0LWFmdGVyIGxlYWYgbm9kZS4KKyAgICB2aXJ0dWFsIG5vZGVfaXRlcmF0b3IKKyAgICBub2RlX2VuZCgpID0gMDsKKworICAgIC8vLyBBY2Nlc3MgdG8gdGhlIGNtcF9mbiBvYmplY3QuCisgICAgdmlydHVhbCBjb25zdCBhY2Nlc3NfdHJhaXRzJgorICAgIGdldF9hY2Nlc3NfdHJhaXRzKCkgY29uc3QgPSAwOworICB9OworCisjaW5jbHVkZSA8ZXh0L3BiX2RzL2RldGFpbC90cmllX3BvbGljeS9wcmVmaXhfc2VhcmNoX25vZGVfdXBkYXRlX2ltcC5ocHA+CisKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworCisjZGVmaW5lIFBCX0RTX0NMQVNTX0NfREVDIFwKKyAgdHJpZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPE5vZGVfQ0l0ciwgTm9kZV9JdHIsIFwKKwkJCQkgICAgX0FUcmFpdHMsIF9BbGxvYz4KKworICAvLy8gRnVuY3RvciB1cGRhdGluZyByYW5rcyBvZiBlbnRyZWVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlX0NJdHIsCisJICAgdHlwZW5hbWUgTm9kZV9JdHIsCisJICAgdHlwZW5hbWUgX0FUcmFpdHMsCisJICAgdHlwZW5hbWUgX0FsbG9jPgorICBjbGFzcyB0cmllX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGUgOiBwcml2YXRlIFBCX0RTX1RSSUVfUE9MSUNZX0JBU0UKKyAgeworICBwcml2YXRlOgorICAgIHR5cGVkZWYgUEJfRFNfVFJJRV9QT0xJQ1lfQkFTRSAJCSAgICAgICAJYmFzZV90eXBlOworCisgIHB1YmxpYzoKKyAgICB0eXBlZGVmIF9BVHJhaXRzIAkJCQlhY2Nlc3NfdHJhaXRzOworICAgIHR5cGVkZWYgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czo6Y29uc3RfaXRlcmF0b3IgCWFfY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiBfQWxsb2MgCQkJCQlhbGxvY2F0b3JfdHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpzaXplX3R5cGUgCQlzaXplX3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV90eXBlIAkJa2V5X3R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmtleV9jb25zdF9yZWZlcmVuY2UgCWtleV9jb25zdF9yZWZlcmVuY2U7CisKKyAgICB0eXBlZGVmIHNpemVfdHlwZSAJCQkJCW1ldGFkYXRhX3R5cGU7CisgICAgdHlwZWRlZiBOb2RlX0NJdHIgCQkJCQlub2RlX2NvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgTm9kZV9JdHIgCQkJCQlub2RlX2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgbm9kZV9jb25zdF9pdGVyYXRvcjo6dmFsdWVfdHlwZSAJY29uc3RfaXRlcmF0b3I7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBub2RlX2l0ZXJhdG9yOjp2YWx1ZV90eXBlIAkJaXRlcmF0b3I7CisKKyAgICAvLy8gRmluZHMgYW4gZW50cnkgYnkgX19vcmRlci4gUmV0dXJucyBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZQorICAgIC8vLyBlbnRyeSB3aXRoIHRoZSBfX29yZGVyIG9yZGVyLCBvciBhIGNvbnN0X2l0ZXJhdG9yIHRvIHRoZQorICAgIC8vLyBjb250YWluZXIgb2JqZWN0J3MgZW5kIGlmIG9yZGVyIGlzIGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZQorICAgIC8vLyBjb250YWluZXIgb2JqZWN0LgorICAgIGlubGluZSBjb25zdF9pdGVyYXRvcgorICAgIGZpbmRfYnlfb3JkZXIoc2l6ZV90eXBlKSBjb25zdDsKKworICAgIC8vLyBGaW5kcyBhbiBlbnRyeSBieSBfX29yZGVyLiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBlbnRyeQorICAgIC8vLyB3aXRoIHRoZSBfX29yZGVyIG9yZGVyLCBvciBhbiBpdGVyYXRvciB0byB0aGUgY29udGFpbmVyCisgICAgLy8vIG9iamVjdCdzIGVuZCBpZiBvcmRlciBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyCisgICAgLy8vIG9iamVjdC4KKyAgICBpbmxpbmUgaXRlcmF0b3IKKyAgICBmaW5kX2J5X29yZGVyKHNpemVfdHlwZSk7CisKKyAgICAvLy8gUmV0dXJucyB0aGUgb3JkZXIgb2YgYSBrZXkgd2l0aGluIGEgc2VxdWVuY2UuIEZvciBleGFwbWxlLCBpZgorICAgIC8vLyByX2tleSBpcyB0aGUgc21hbGxlc3Qga2V5LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiAwOyBpZiByX2tleQorICAgIC8vLyBpcyBhIGtleSBiZXR3ZWVuIHRoZSBzbWFsbGVzdCBhbmQgbmV4dCBrZXksIHRoaXMgbWV0aG9kIHdpbGwKKyAgICAvLy8gcmV0dXJuIDE7IGlmIHJfa2V5IGlzIGEga2V5IGxhcmdlciB0aGFuIHRoZSBsYXJnZXN0IGtleSwgdGhpcworICAgIC8vLyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNpemUgb2Ygcl9jLgorICAgIGlubGluZSBzaXplX3R5cGUKKyAgICBvcmRlcl9vZl9rZXkoa2V5X2NvbnN0X3JlZmVyZW5jZSkgY29uc3Q7CisKKyAgICAvLy8gUmV0dXJucyB0aGUgb3JkZXIgb2YgYSBwcmVmaXggd2l0aGluIGEgc2VxdWVuY2UuIEZvciBleGFwbWxlLAorICAgIC8vLyBpZiBbYiwgZV0gaXMgdGhlIHNtYWxsZXN0IHByZWZpeCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gMDsgaWYKKyAgICAvLy8gcl9rZXkgaXMgYSBrZXkgYmV0d2VlbiB0aGUgc21hbGxlc3QgYW5kIG5leHQga2V5LCB0aGlzIG1ldGhvZAorICAgIC8vLyB3aWxsIHJldHVybiAxOyBpZiByX2tleSBpcyBhIGtleSBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCBrZXksCisgICAgLy8vIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBzaXplIG9mIHJfYy4KKyAgICBpbmxpbmUgc2l6ZV90eXBlCisgICAgb3JkZXJfb2ZfcHJlZml4KGFfY29uc3RfaXRlcmF0b3IsIGFfY29uc3RfaXRlcmF0b3IpIGNvbnN0OworCisgIHByb3RlY3RlZDoKKyAgICAvLy8gVXBkYXRlcyB0aGUgcmFuayBvZiBhIG5vZGUgdGhyb3VnaCBhIG5vZGVfaXRlcmF0b3Igbm9kZV9pdDsKKyAgICAvLy8gZW5kX25kX2l0IGlzIHRoZSBlbmQgbm9kZSBpdGVyYXRvci4KKyAgICBpbmxpbmUgdm9pZAorICAgIG9wZXJhdG9yKCkobm9kZV9pdGVyYXRvciwgbm9kZV9jb25zdF9pdGVyYXRvcikgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2VfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIAljb25zdF9yZWZlcmVuY2U7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBiYXNlX3R5cGU6OmNvbnN0X3BvaW50ZXIgCQljb25zdF9wb2ludGVyOworCisgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxtZXRhZGF0YV90eXBlPiBfX3JlYmluZF9tOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbTo6b3RoZXIgCQkJX19yZWJpbmRfbWE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JlYmluZF9tYTo6Y29uc3RfcmVmZXJlbmNlICAgICAgbWV0YWRhdGFfY29uc3RfcmVmZXJlbmNlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yZWJpbmRfbWE6OnJlZmVyZW5jZSAJCW1ldGFkYXRhX3JlZmVyZW5jZTsKKworICAgIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRhaW5lciBpcyBlbXB0eS4KKyAgICB2aXJ0dWFsIGJvb2wKKyAgICBlbXB0eSgpIGNvbnN0ID0gMDsKKworICAgIC8vLyBSZXR1cm5zIHRoZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHRyaWUncyBmaXJzdCBlbGVtZW50LgorICAgIHZpcnR1YWwgaXRlcmF0b3IKKyAgICBiZWdpbigpID0gMDsKKworICAgIC8vLyBSZXR1cm5zIHRoZSBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHRyaWUncworICAgIC8vLyBqdXN0LWFmdGVyLWxhc3QgZWxlbWVudC4KKyAgICB2aXJ0dWFsIGl0ZXJhdG9yCisgICAgZW5kKCkgPSAwOworCisgICAgLy8vIFJldHVybnMgdGhlIG5vZGVfY29uc3RfaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSB0cmllJ3Mgcm9vdCBub2RlLgorICAgIHZpcnR1YWwgbm9kZV9jb25zdF9pdGVyYXRvcgorICAgIG5vZGVfYmVnaW4oKSBjb25zdCA9IDA7CisKKyAgICAvLy8gUmV0dXJucyB0aGUgbm9kZV9pdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHRyaWUncyByb290IG5vZGUuCisgICAgdmlydHVhbCBub2RlX2l0ZXJhdG9yCisgICAgbm9kZV9iZWdpbigpID0gMDsKKworICAgIC8vLyBSZXR1cm5zIHRoZSBub2RlX2NvbnN0X2l0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCBhIGp1c3QtYWZ0ZXIKKyAgICAvLy8gbGVhZiBub2RlLgorICAgIHZpcnR1YWwgbm9kZV9jb25zdF9pdGVyYXRvcgorICAgIG5vZGVfZW5kKCkgY29uc3QgPSAwOworCisgICAgLy8vIFJldHVybnMgdGhlIG5vZGVfaXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIGEganVzdC1hZnRlciBsZWFmIG5vZGUuCisgICAgdmlydHVhbCBub2RlX2l0ZXJhdG9yCisgICAgbm9kZV9lbmQoKSA9IDA7CisKKyAgICAvLy8gQWNjZXNzIHRvIHRoZSBjbXBfZm4gb2JqZWN0LgorICAgIHZpcnR1YWwgYWNjZXNzX3RyYWl0cyYKKyAgICBnZXRfYWNjZXNzX3RyYWl0cygpID0gMDsKKyAgfTsKKworI2luY2x1ZGUgPGV4dC9wYl9kcy9kZXRhaWwvdHJpZV9wb2xpY3kvb3JkZXJfc3RhdGlzdGljc19pbXAuaHBwPgorCisjdW5kZWYgUEJfRFNfQ0xBU1NfVF9ERUMKKyN1bmRlZiBQQl9EU19DTEFTU19DX0RFQworI3VuZGVmIFBCX0RTX1RSSUVfUE9MSUNZX0JBU0UKKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcGJkcworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BvZF9jaGFyX3RyYWl0cy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcG9kX2NoYXJfdHJhaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkODZmZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3BvZF9jaGFyX3RyYWl0cy5oCkBAIC0wLDAgKzEsMTkwIEBACisvLyBQT0QgY2hhcmFjdGVyLCBzdGQ6OmNoYXJfdHJhaXRzIHNwZWNpYWxpemF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvcG9kX2NoYXJfdHJhaXRzLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBHYWJyaWVsIERvcyBSZWlzIDxnZHJAaW50ZWdyYWJsZS1zb2x1dGlvbnMubmV0PgorLy8gQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisKKyNpZm5kZWYgX1BPRF9DSEFSX1RSQUlUU19ICisjZGVmaW5lIF9QT0RfQ0hBUl9UUkFJVFNfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIFBPRCBjaGFyYWN0ZXIgYWJzdHJhY3Rpb24uCisgIC8vIE5COiBUaGUgY2hhcl90eXBlIHBhcmFtZXRlciBpcyBhIHN1YnNldCBvZiBpbnRfdHlwZSwgYXMgdG8gYWxsb3cKKyAgLy8gaW50X3R5cGUgdG8gcHJvcGVybHkgaG9sZCB0aGUgZnVsbCByYW5nZSBvZiBjaGFyX3R5cGUgdmFsdWVzIGFzCisgIC8vIHdlbGwgYXMgRU9GLgorICAvLy8gQGJyaWVmIEEgUE9EIGNsYXNzIHRoYXQgc2VydmVzIGFzIGEgY2hhcmFjdGVyIGFic3RyYWN0aW9uIGNsYXNzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBWLCB0eXBlbmFtZSBJLCB0eXBlbmFtZSBTID0gc3RkOjptYnN0YXRlX3Q+CisgICAgc3RydWN0IGNoYXJhY3RlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgVgkJCQl2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBJCQkJCWludF90eXBlOworICAgICAgdHlwZWRlZiBTCQkJCXN0YXRlX3R5cGU7CisgICAgICB0eXBlZGVmIGNoYXJhY3RlcjxWLCBJLCBTPgljaGFyX3R5cGU7CisKKyAgICAgIHZhbHVlX3R5cGUJdmFsdWU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYyPgorICAgICAgICBzdGF0aWMgY2hhcl90eXBlCisgICAgICAgIGZyb20oY29uc3QgVjImIHYpCisgICAgICAgIHsKKwkgIGNoYXJfdHlwZSByZXQgPSB7IHN0YXRpY19jYXN0PHZhbHVlX3R5cGU+KHYpIH07CisJICByZXR1cm4gcmV0OworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVjI+CisgICAgICAgIHN0YXRpYyBWMgorICAgICAgICB0byhjb25zdCBjaGFyX3R5cGUmIGMpCisgICAgICAgIHsKKwkgIFYyIHJldCA9IHsgc3RhdGljX2Nhc3Q8VjI+KGMudmFsdWUpIH07CisJICByZXR1cm4gcmV0OworCX0KKworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgViwgdHlwZW5hbWUgSSwgdHlwZW5hbWUgUz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgY2hhcmFjdGVyPFYsIEksIFM+JiBsaHMsIGNvbnN0IGNoYXJhY3RlcjxWLCBJLCBTPiYgcmhzKQorICAgIHsgcmV0dXJuIGxocy52YWx1ZSA9PSByaHMudmFsdWU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBWLCB0eXBlbmFtZSBJLCB0eXBlbmFtZSBTPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGNoYXJhY3RlcjxWLCBJLCBTPiYgbGhzLCBjb25zdCBjaGFyYWN0ZXI8ViwgSSwgUz4mIHJocykKKyAgICB7IHJldHVybiBsaHMudmFsdWUgPCByaHMudmFsdWU7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8vIGNoYXJfdHJhaXRzPF9fZ251X2N4eDo6Y2hhcmFjdGVyPiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgViwgdHlwZW5hbWUgSSwgdHlwZW5hbWUgUz4KKyAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8X19nbnVfY3h4OjpjaGFyYWN0ZXI8ViwgSSwgUz4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpjaGFyYWN0ZXI8ViwgSSwgUz4JY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjaGFyX3R5cGU6OmludF90eXBlCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjaGFyX3R5cGU6OnN0YXRlX3R5cGUJc3RhdGVfdHlwZTsKKyAgICAgIHR5cGVkZWYgZnBvczxzdGF0ZV90eXBlPgkJCXBvc190eXBlOworICAgICAgdHlwZWRlZiBzdHJlYW1vZmYJCQkJb2ZmX3R5cGU7CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCisgICAgICB7IF9fYzEgPSBfX2MyOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKKyAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCisgICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQorCisgICAgICBzdGF0aWMgaW50CisgICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkKKwkgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDogMTsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgc3RhdGljIHNpemVfdAorICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQorICAgICAgeworCWNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOworCXdoaWxlIChfX3AtPnZhbHVlKQorCSAgKytfX3A7CisJcmV0dXJuIChfX3AgLSBfX3MpOworICAgICAgfQorCisgICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgorICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCisgICAgICB7CisJZm9yIChjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsgc2l6ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQorCSAgaWYgKCpfX3AgPT0gX19hKQorCSAgICByZXR1cm4gX19wOworCXJldHVybiAwOworICAgICAgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKKyAgICAgIHsgCisJcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+CisJICAoX19idWlsdGluX21lbW1vdmUoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNoYXJfdHlwZSoKKyAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCisgICAgICB7CisJc3RkOjpjb3B5KF9fczIsIF9fczIgKyBfX24sIF9fczEpOworCXJldHVybiBfX3MxOworICAgICAgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlKgorICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQorICAgICAgeworCXN0ZDo6ZmlsbF9uKF9fcywgX19uLCBfX2EpOworICAgICAgICByZXR1cm4gX19zOworICAgICAgfQorCisgICAgICBzdGF0aWMgY2hhcl90eXBlCisgICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9faSkKKyAgICAgIHsgcmV0dXJuIGNoYXJfdHlwZTo6dGVtcGxhdGUgZnJvbShfX2kpOyB9CisKKyAgICAgIHN0YXRpYyBpbnRfdHlwZQorICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBjaGFyX3R5cGU6OnRlbXBsYXRlIHRvPGludF90eXBlPihfX2MpOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCisgICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KKworICAgICAgc3RhdGljIGludF90eXBlCisgICAgICBlb2YoKSAKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3IgPSB7IC0xIH07CisJcmV0dXJuIF9fcjsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGludF90eXBlCisgICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCisgICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IGludF90eXBlKCkgOiBfX2M7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcG9pbnRlci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcG9pbnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYmM3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wb2ludGVyLmgKQEAgLTAsMCArMSw1OTMgQEAKKy8vIEN1c3RvbSBwb2ludGVyIGFkYXB0ZXIgYW5kIHNhbXBsZSBzdG9yYWdlIHBvbGljaWVzCisKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogIEBmaWxlIGV4dC9wb2ludGVyLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqCisgKiAgQGF1dGhvciBCb2IgV2FsdGVycworICoKKyAqIFByb3ZpZGVzIHJldXNhYmxlIF9Qb2ludGVyX2FkYXB0ZXIgZm9yIGFzc2lzdGluZyBpbiB0aGUgZGV2ZWxvcG1lbnQgb2YKKyAqIGN1c3RvbSBwb2ludGVyIHR5cGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgc3RhbmRhcmQgY29udGFpbmVycyB2aWEKKyAqIHRoZSBhbGxvY2F0b3I6OnBvaW50ZXIgYW5kIGFsbG9jYXRvcjo6Y29uc3RfcG9pbnRlciB0eXBlZGVmcy4KKyAqLworCisjaWZuZGVmIF9QT0lOVEVSX0gKKyNkZWZpbmUgX1BPSU5URVJfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmg+CisjaW5jbHVkZSA8ZXh0L2Nhc3QuaD4KKyNpbmNsdWRlIDxleHQvdHlwZV90cmFpdHMuaD4KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvbW92ZS5oPgorIyBpbmNsdWRlIDxiaXRzL3B0cl90cmFpdHMuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqIAorICAgKiBAYnJpZWYgQSBzdG9yYWdlIHBvbGljeSBmb3IgdXNlIHdpdGggX1BvaW50ZXJfYWRhcHRlcjw+IHdoaWNoIHlpZWxkcyBhCisgICAqICAgICAgICBzdGFuZGFyZCBwb2ludGVyLgorICAgKiAKKyAgICogIEEgX1N0b3JhZ2VfcG9saWN5IGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgNCB0aGluZ3M6CisgICAqICAgIDEpIEEgZ2V0KCkgQVBJIGZvciByZXR1cm5pbmcgdGhlIHN0b3JlZCBwb2ludGVyIHZhbHVlLgorICAgKiAgICAyKSBBbiBzZXQoKSBBUEkgZm9yIHN0b3JpbmcgYSBwb2ludGVyIHZhbHVlLgorICAgKiAgICAzKSBBbiBlbGVtZW50X3R5cGUgdHlwZWRlZiB0byBkZWZpbmUgdGhlIHR5cGUgdGhpcyBwb2ludHMgdG8uCisgICAqICAgIDQpIEFuIG9wZXJhdG9yPCgpIHRvIHN1cHBvcnQgcG9pbnRlciBjb21wYXJpc29uLgorICAgKiAgICA1KSBBbiBvcGVyYXRvcj09KCkgdG8gc3VwcG9ydCBwb2ludGVyIGNvbXBhcmlzb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIGNsYXNzIF9TdGRfcG9pbnRlcl9pbXBsIAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyB0aGUgdHlwZSB0aGlzIHBvaW50ZXIgcG9pbnRzIHRvLgorICAgICAgdHlwZWRlZiBfVHAgZWxlbWVudF90eXBlOworICAKKyAgICAgIC8vIEEgbWV0aG9kIHRvIGZldGNoIHRoZSBwb2ludGVyIHZhbHVlIGFzIGEgc3RhbmRhcmQgVCogdmFsdWU7CisgICAgICBpbmxpbmUgX1RwKiAKKyAgICAgIGdldCgpIGNvbnN0IAorICAgICAgeyByZXR1cm4gX01fdmFsdWU7IH0KKyAgCisgICAgICAvLyBBIG1ldGhvZCB0byBzZXQgdGhlIHBvaW50ZXIgdmFsdWUsIGZyb20gYSBzdGFuZGFyZCBUKiB2YWx1ZTsKKyAgICAgIGlubGluZSB2b2lkIAorICAgICAgc2V0KGVsZW1lbnRfdHlwZSogX19hcmcpIAorICAgICAgeyBfTV92YWx1ZSA9IF9fYXJnOyB9CisgIAorICAgICAgLy8gQ29tcGFyaXNvbiBvZiBwb2ludGVycworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPChjb25zdCBfU3RkX3BvaW50ZXJfaW1wbCYgX19yYXJnKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9NX3ZhbHVlIDwgX19yYXJnLl9NX3ZhbHVlKTsgfQorICAKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9TdGRfcG9pbnRlcl9pbXBsJiBfX3JhcmcpIGNvbnN0CisgICAgICB7IHJldHVybiAoX01fdmFsdWUgPT0gX19yYXJnLl9NX3ZhbHVlKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGVsZW1lbnRfdHlwZSogX01fdmFsdWU7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIEEgc3RvcmFnZSBwb2xpY3kgZm9yIHVzZSB3aXRoIF9Qb2ludGVyX2FkYXB0ZXI8PiB3aGljaCBzdG9yZXMKKyAgICogICAgICAgIHRoZSBwb2ludGVyJ3MgYWRkcmVzcyBhcyBhbiBvZmZzZXQgdmFsdWUgd2hpY2ggaXMgcmVsYXRpdmUgdG8KKyAgICogICAgICAgIGl0cyBvd24gYWRkcmVzcy4KKyAgICogCisgICAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHBvaW50ZXJzIHdpdGhpbiBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMgd2hpY2gKKyAgICogbWlnaHQgYmUgbWFwcGVkIGF0IGRpZmZlcmVudCBhZGRyZXNzZXMgYnkgZGlmZmVyZW50IHByb2Nlc3Nlcy4KKyAgICogRm9yIG51bGwgcG9pbnRlcnMsIGEgdmFsdWUgb2YgMSBpcyB1c2VkLiAgKDAgaXMgbGVnaXRpbWF0ZQorICAgKiBzb21ldGltZXMgZm9yIG5vZGVzIGluIGNpcmN1bGFybHkgbGlua2VkIGxpc3RzKSBUaGlzIHZhbHVlIHdhcworICAgKiBjaG9zZW4gYXMgdGhlIGxlYXN0IGxpa2VseSB0byBnZW5lcmF0ZSBhbiBpbmNvcnJlY3QgbnVsbCwgQXMKKyAgICogdGhlcmUgaXMgbm8gcmVhc29uIHdoeSBhbnkgbm9ybWFsIHBvaW50ZXIgd291bGQgcG9pbnQgMSBieXRlIGludG8KKyAgICogaXRzIG93biBwb2ludGVyIGFkZHJlc3MuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIGNsYXNzIF9SZWxhdGl2ZV9wb2ludGVyX2ltcGwgCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKKyAgCisgICAgICBfVHAqCisgICAgICBnZXQoKSBjb25zdCAKKyAgICAgIHsKKyAgICAgICAgaWYgKF9NX2RpZmYgPT0gMSkKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PF9UcCo+KHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPih0aGlzKQorCQkJCQkrIF9NX2RpZmYpOworICAgICAgfQorICAKKyAgICAgIHZvaWQgCisgICAgICBzZXQoX1RwKiBfX2FyZykKKyAgICAgIHsKKyAgICAgICAgaWYgKCFfX2FyZykKKyAgICAgICAgICBfTV9kaWZmID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9NX2RpZmYgPSByZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4oX19hcmcpIAorICAgICAgICAgICAgICAgICAgICAtIHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPih0aGlzKTsKKyAgICAgIH0KKyAgCisgICAgICAvLyBDb21wYXJpc29uIG9mIHBvaW50ZXJzCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I8KGNvbnN0IF9SZWxhdGl2ZV9wb2ludGVyX2ltcGwmIF9fcmFyZykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChyZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4odGhpcy0+Z2V0KCkpCisJCTwgcmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KF9fcmFyZy5nZXQoKSkpOyB9CisKKyAgICAgIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9SZWxhdGl2ZV9wb2ludGVyX2ltcGwmIF9fcmFyZykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChyZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4odGhpcy0+Z2V0KCkpCisJCT09IHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPihfX3JhcmcuZ2V0KCkpKTsgfQorCisgICAgcHJpdmF0ZToKKyNpZmRlZiBfR0xJQkNYWF9VU0VfTE9OR19MT05HCisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlPAorCSAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID49IHNpemVvZih2b2lkKikpLAorCSB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmc+OjpfX3R5cGUgX1VJbnRQdHJUeXBlOworI2Vsc2UKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfVUludFB0clR5cGU7CisjZW5kaWYKKyAgICAgIF9VSW50UHRyVHlwZSBfTV9kaWZmOworICAgIH07CisgIAorICAvKioKKyAgICogUmVsYXRpdmVfcG9pbnRlcl9pbXBsIG5lZWRzIGEgc3BlY2lhbGl6YXRpb24gZm9yIGNvbnN0IFQgYmVjYXVzZSBvZgorICAgKiB0aGUgY2FzdGluZyBkb25lIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIGNsYXNzIF9SZWxhdGl2ZV9wb2ludGVyX2ltcGw8Y29uc3QgX1RwPiAKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBjb25zdCBfVHAgZWxlbWVudF90eXBlOworICAKKyAgICAgIGNvbnN0IF9UcCoKKyAgICAgIGdldCgpIGNvbnN0CisgICAgICB7CisgICAgICAgIGlmIChfTV9kaWZmID09IDEpCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBfVHAqPgorCSAgICAgIChyZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4odGhpcykgKyBfTV9kaWZmKTsKKyAgICAgIH0KKyAgCisgICAgICB2b2lkIAorICAgICAgc2V0KGNvbnN0IF9UcCogX19hcmcpCisgICAgICB7CisgICAgICAgIGlmICghX19hcmcpCisgICAgICAgICAgX01fZGlmZiA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTV9kaWZmID0gcmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KF9fYXJnKSAKKyAgICAgICAgICAgICAgICAgICAgLSByZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4odGhpcyk7CisgICAgICB9CisgIAorICAgICAgLy8gQ29tcGFyaXNvbiBvZiBwb2ludGVycworICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPChjb25zdCBfUmVsYXRpdmVfcG9pbnRlcl9pbXBsJiBfX3JhcmcpIGNvbnN0CisgICAgICB7IHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KHRoaXMtPmdldCgpKQorCQk8IHJlaW50ZXJwcmV0X2Nhc3Q8X1VJbnRQdHJUeXBlPihfX3JhcmcuZ2V0KCkpKTsgfQorCisgICAgICBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfUmVsYXRpdmVfcG9pbnRlcl9pbXBsJiBfX3JhcmcpIGNvbnN0CisgICAgICB7IHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxfVUludFB0clR5cGU+KHRoaXMtPmdldCgpKQorCQk9PSByZWludGVycHJldF9jYXN0PF9VSW50UHRyVHlwZT4oX19yYXJnLmdldCgpKSk7IH0KKyAgCisgICAgcHJpdmF0ZToKKyNpZmRlZiBfR0xJQkNYWF9VU0VfTE9OR19MT05HCisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlPAorCSAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID49IHNpemVvZih2b2lkKikpLAorCSB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmc+OjpfX3R5cGUgX1VJbnRQdHJUeXBlOworI2Vsc2UKKyAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfVUludFB0clR5cGU7CisjZW5kaWYKKyAgICAgICBfVUludFB0clR5cGUgX01fZGlmZjsKKyAgICB9OworCisgIC8qKgorICAgKiBUaGUgc3BlY2lhbGl6YXRpb24gb24gdGhpcyB0eXBlIGhlbHBzIHJlc29sdmUgdGhlIHByb2JsZW0gb2YKKyAgICogcmVmZXJlbmNlIHRvIHZvaWQsIGFuZCBlbGltaW5hdGVzIHRoZSBuZWVkIHRvIHNwZWNpYWxpemUKKyAgICogX1BvaW50ZXJfYWRhcHRlciBmb3IgY2FzZXMgb2Ygdm9pZCosIGNvbnN0IHZvaWQqLCBhbmQgc28gb24uCisgICAqLworICBzdHJ1Y3QgX0ludmFsaWRfdHlwZSB7IH07CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2VfdHlwZSAKKyAgICB7IHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7IH07CisKKyAgdGVtcGxhdGU8PiAKKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV90eXBlPHZvaWQ+IAorICAgIHsgdHlwZWRlZiBfSW52YWxpZF90eXBlJiByZWZlcmVuY2U7IH07CisKKyAgdGVtcGxhdGU8PiAKKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV90eXBlPGNvbnN0IHZvaWQ+IAorICAgIHsgdHlwZWRlZiBjb25zdCBfSW52YWxpZF90eXBlJiByZWZlcmVuY2U7IH07CisKKyAgdGVtcGxhdGU8PiAKKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV90eXBlPHZvbGF0aWxlIHZvaWQ+IAorICAgIHsgdHlwZWRlZiB2b2xhdGlsZSBfSW52YWxpZF90eXBlJiAgcmVmZXJlbmNlOyB9OworCisgIHRlbXBsYXRlPD4gCisgICAgc3RydWN0IF9SZWZlcmVuY2VfdHlwZTx2b2xhdGlsZSBjb25zdCB2b2lkPiAKKyAgICB7IHR5cGVkZWYgY29uc3Qgdm9sYXRpbGUgX0ludmFsaWRfdHlwZSYgIHJlZmVyZW5jZTsgfTsKKworICAvKioKKyAgICogVGhpcyBzdHJ1Y3R1cmUgYWNjb21tb2RhdGVzIHRoZSB3YXkgaW4gd2hpY2gKKyAgICogc3RkOjppdGVyYXRvcl90cmFpdHM8PiBpcyBub3JtYWxseSBzcGVjaWFsaXplZCBmb3IgY29uc3QgVCosIHNvCisgICAqIHRoYXQgdmFsdWVfdHlwZSBpcyBzdGlsbCBULgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiAKKyAgICBzdHJ1Y3QgX1VucXVhbGlmaWVkX3R5cGUgCisgICAgeyB0eXBlZGVmIF9UcCB0eXBlOyB9OworICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIHN0cnVjdCBfVW5xdWFsaWZpZWRfdHlwZTxjb25zdCBfVHA+IAorICAgIHsgdHlwZWRlZiBfVHAgdHlwZTsgfTsKKyAgICAKKyAgLyoqCisgICAqIFRoZSBmb2xsb3dpbmcgcHJvdmlkZXMgYW4gJ2FsdGVybmF0aXZlIHBvaW50ZXInIHRoYXQgd29ya3Mgd2l0aAorICAgKiB0aGUgY29udGFpbmVycyB3aGVuIHNwZWNpZmllZCBhcyB0aGUgcG9pbnRlciB0eXBlZGVmIG9mIHRoZQorICAgKiBhbGxvY2F0b3IuCisgICAqCisgICAqIFRoZSBwb2ludGVyIHR5cGUgdXNlZCB3aXRoIHRoZSBjb250YWluZXJzIGRvZXNuJ3QgaGF2ZSB0byBiZSB0aGlzCisgICAqIGNsYXNzLCBidXQgaXQgbXVzdCBzdXBwb3J0IHRoZSBpbXBsaWNpdCBjb252ZXJzaW9ucywgcG9pbnRlcgorICAgKiBhcml0aG1ldGljLCBjb21wYXJpc29uIG9wZXJhdG9ycywgZXRjLiB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhpcworICAgKiBjbGFzcywgYW5kIGF2b2lkIHJhaXNpbmcgY29tcGlsZS10aW1lIGFtYmlndWl0aWVzLiAgQmVjYXVzZQorICAgKiBjcmVhdGluZyBhIHdvcmtpbmcgcG9pbnRlciBjYW4gYmUgY2hhbGxlbmdpbmcsIHRoaXMgcG9pbnRlcgorICAgKiB0ZW1wbGF0ZSB3YXMgZGVzaWduZWQgdG8gd3JhcHBlciBhbiBlYXNpZXIgc3RvcmFnZSBwb2xpY3kgdHlwZSwKKyAgICogc28gdGhhdCBpdCBiZWNvbWVzIHJldXNhYmxlIGZvciBjcmVhdGluZyBvdGhlciBwb2ludGVyIHR5cGVzLgorICAgKgorICAgKiBBIGtleSBwb2ludCBvZiB0aGlzIGNsYXNzIGlzIGFsc28gdGhhdCBpdCBhbGxvd3MgY29udGFpbmVyCisgICAqIHdyaXRlcnMgdG8gJ2Fzc3VtZScgQWxsb2NhdG9yOjpwb2ludGVyIGlzIGEgdHlwZWRlZiBmb3IgYSBub3JtYWwKKyAgICogcG9pbnRlci4gIFRoaXMgY2xhc3Mgc3VwcG9ydHMgbW9zdCBvZiB0aGUgY29udmVudGlvbnMgb2YgYSB0cnVlCisgICAqIHBvaW50ZXIsIGFuZCBjYW4sIGZvciBpbnN0YW5jZSBoYW5kbGUgaW1wbGljaXQgY29udmVyc2lvbiB0bworICAgKiBjb25zdCBhbmQgYmFzZSBjbGFzcyBwb2ludGVyIHR5cGVzLiAgVGhlIG9ubHkgaW1wb3NpdGlvbnMgb24KKyAgICogY29udGFpbmVyIHdyaXRlcnMgdG8gc3VwcG9ydCBleHRlbmRlZCBwb2ludGVycyBhcmU6IDEpIHVzZSB0aGUKKyAgICogQWxsb2NhdG9yOjpwb2ludGVyIHR5cGVkZWYgYXBwcm9wcmlhdGVseSBmb3IgcG9pbnRlciB0eXBlcy4gIDIpCisgICAqIGlmIHlvdSBuZWVkIHBvaW50ZXIgY2FzdGluZywgdXNlIHRoZSBfX3BvaW50ZXJfY2FzdDw+IGZ1bmN0aW9ucworICAgKiBmcm9tIGV4dC9jYXN0LmguICBUaGlzIGFsbG93cyBwb2ludGVyIGNhc3Qgb3BlcmF0aW9ucyB0byBiZQorICAgKiBvdmVybG9hZGVkIGFzIG5lY2Vzc2FyeSBieSBjdXN0b20gcG9pbnRlcnMuCisgICAqCisgICAqIE5vdGU6IFRoZSBjb25zdCBxdWFsaWZpZXIgd29ya3Mgd2l0aCB0aGlzIHBvaW50ZXIgYWRhcHRlciBhcworICAgKiBmb2xsb3dzOgorICAgKgorICAgKiBfVHAqICAgICAgICAgICAgID09IF9Qb2ludGVyX2FkYXB0ZXI8X1N0ZF9wb2ludGVyX2ltcGw8X1RwPiA+OworICAgKiBjb25zdCBfVHAqICAgICAgID09IF9Qb2ludGVyX2FkYXB0ZXI8X1N0ZF9wb2ludGVyX2ltcGw8Y29uc3QgX1RwPiA+OworICAgKiBfVHAqIGNvbnN0ICAgICAgID09IGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1N0ZF9wb2ludGVyX2ltcGw8X1RwPiA+OworICAgKiBjb25zdCBfVHAqIGNvbnN0ID09IGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1N0ZF9wb2ludGVyX2ltcGw8Y29uc3QgX1RwPiA+OworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0b3JhZ2VfcG9saWN5PgorICAgIGNsYXNzIF9Qb2ludGVyX2FkYXB0ZXIgOiBwdWJsaWMgX1N0b3JhZ2VfcG9saWN5IAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TdG9yYWdlX3BvbGljeTo6ZWxlbWVudF90eXBlIGVsZW1lbnRfdHlwZTsKKworICAgICAgLy8gVGhlc2UgYXJlIG5lZWRlZCBmb3IgaXRlcmF0b3JfdHJhaXRzCisgICAgICB0eXBlZGVmIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgICAgICAgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9VbnF1YWxpZmllZF90eXBlPGVsZW1lbnRfdHlwZT46OnR5cGUgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9Qb2ludGVyX2FkYXB0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlZmVyZW5jZV90eXBlPGVsZW1lbnRfdHlwZT46OnJlZmVyZW5jZSAgcmVmZXJlbmNlOworCisgICAgICAvLyBSZW1pbmRlcjogJ2NvbnN0JyBtZXRob2RzIG1lYW4gdGhhdCB0aGUgbWV0aG9kIGlzIHZhbGlkIHdoZW4gdGhlIAorICAgICAgLy8gcG9pbnRlciBpcyBpbW11dGFibGUsIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHdoZXRoZXIgdGhlIAorICAgICAgLy8gJ3BvaW50ZWUnIGlzIGNvbnN0LgorCisgICAgICAvLyBEZWZhdWx0IENvbnN0cnVjdG9yIChDb252ZXJ0IGZyb20gZWxlbWVudF90eXBlKikKKyAgICAgIF9Qb2ludGVyX2FkYXB0ZXIoZWxlbWVudF90eXBlKiBfX2FyZyA9IDApCisgICAgICB7IF9TdG9yYWdlX3BvbGljeTo6c2V0KF9fYXJnKTsgfQorCisgICAgICAvLyBDb3B5IGNvbnN0cnVjdG9yIGZyb20gX1BvaW50ZXJfYWRhcHRlciBvZiBzYW1lIHR5cGUuCisgICAgICBfUG9pbnRlcl9hZGFwdGVyKGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXImIF9fYXJnKSAKKyAgICAgIHsgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX19hcmcuZ2V0KCkpOyB9CisKKyAgICAgIC8vIENvbnZlcnQgZnJvbSBfVXAqIGlmIGNvbnZlcnNpb24gdG8gZWxlbWVudF90eXBlKiBpcyB2YWxpZC4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgX1BvaW50ZXJfYWRhcHRlcihfVXAqIF9fYXJnKQorICAgICAgICB7IF9TdG9yYWdlX3BvbGljeTo6c2V0KF9fYXJnKTsgfQorCisgICAgICAvLyBDb252ZXJzaW9uIGZyb20gYW5vdGhlciBfUG9pbnRlcl9hZGFwdGVyIGlmIF9VcCBpZiBzdGF0aWMgY2FzdCBpcworICAgICAgLy8gdmFsaWQuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIF9Qb2ludGVyX2FkYXB0ZXIoY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVXA+JiBfX2FyZykKKyAgICAgICAgeyBfU3RvcmFnZV9wb2xpY3k6OnNldChfX2FyZy5nZXQoKSk7IH0KKworICAgICAgLy8gRGVzdHJ1Y3RvcgorICAgICAgfl9Qb2ludGVyX2FkYXB0ZXIoKSB7IH0KKyAgCisgICAgICAvLyBBc3NpZ25tZW50IG9wZXJhdG9yCisgICAgICBfUG9pbnRlcl9hZGFwdGVyJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXImIF9fYXJnKSAKKyAgICAgIHsKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX19hcmcuZ2V0KCkpOyAKKyAgICAgICAgcmV0dXJuICp0aGlzOyAKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBfUG9pbnRlcl9hZGFwdGVyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVXA+JiBfX2FyZykKKyAgICAgICAgeworICAgICAgICAgIF9TdG9yYWdlX3BvbGljeTo6c2V0KF9fYXJnLmdldCgpKTsgCisgICAgICAgICAgcmV0dXJuICp0aGlzOyAKKyAgICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIF9Qb2ludGVyX2FkYXB0ZXImCisgICAgICAgIG9wZXJhdG9yPShfVXAqIF9fYXJnKQorICAgICAgICB7CisgICAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX19hcmcpOyAKKyAgICAgICAgICByZXR1cm4gKnRoaXM7IAorICAgICAgICB9CisKKyAgICAgIC8vIE9wZXJhdG9yKiwgcmV0dXJucyBlbGVtZW50X3R5cGUmCisgICAgICBpbmxpbmUgcmVmZXJlbmNlIAorICAgICAgb3BlcmF0b3IqKCkgY29uc3QgCisgICAgICB7IHJldHVybiAqKF9TdG9yYWdlX3BvbGljeTo6Z2V0KCkpOyB9CisKKyAgICAgIC8vIE9wZXJhdG9yLT4sIHJldHVybnMgZWxlbWVudF90eXBlKgorICAgICAgaW5saW5lIGVsZW1lbnRfdHlwZSogCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QgCisgICAgICB7IHJldHVybiBfU3RvcmFnZV9wb2xpY3k6OmdldCgpOyB9CisKKyAgICAgIC8vIE9wZXJhdG9yW10sIHJldHVybnMgYSBlbGVtZW50X3R5cGUmIHRvIHRoZSBpdGVtIGF0IHRoYXQgbG9jLgorICAgICAgaW5saW5lIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzdGQ6OnB0cmRpZmZfdCBfX2luZGV4KSBjb25zdAorICAgICAgeyByZXR1cm4gX1N0b3JhZ2VfcG9saWN5OjpnZXQoKVtfX2luZGV4XTsgfQorCisgICAgICAvLyBUbyBhbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvICJib29sIiwgZm9yICJpZiAocHRyKS4uLiIKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBlbGVtZW50X3R5cGUqKF9Qb2ludGVyX2FkYXB0ZXI6OipfX3Vuc3BlY2lmaWVkX2Jvb2xfdHlwZSkoKSBjb25zdDsKKworICAgIHB1YmxpYzoKKyAgICAgIG9wZXJhdG9yIF9fdW5zcGVjaWZpZWRfYm9vbF90eXBlKCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIF9TdG9yYWdlX3BvbGljeTo6Z2V0KCkgPT0gMCA/IDAgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAmX1BvaW50ZXJfYWRhcHRlcjo6b3BlcmF0b3ItPjsgCisgICAgICB9CisKKyAgICAgIC8vICEgb3BlcmF0b3IgKGZvcjogaWYgKCFwdHIpLi4uKQorICAgICAgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yISgpIGNvbnN0IAorICAgICAgeyByZXR1cm4gKF9TdG9yYWdlX3BvbGljeTo6Z2V0KCkgPT0gMCk7IH0KKyAgCisgICAgICAvLyBQb2ludGVyIGRpZmZlcmVuY2VzCisgICAgICBpbmxpbmUgZnJpZW5kIHN0ZDo6cHRyZGlmZl90IAorICAgICAgb3BlcmF0b3ItKGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXImIF9fbGhzLCBlbGVtZW50X3R5cGUqIF9fcmhzKSAKKyAgICAgIHsgcmV0dXJuIChfX2xocy5nZXQoKSAtIF9fcmhzKTsgfQorICAKKyAgICAgIGlubGluZSBmcmllbmQgc3RkOjpwdHJkaWZmX3QgCisgICAgICBvcGVyYXRvci0oZWxlbWVudF90eXBlKiBfX2xocywgY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19yaHMpIAorICAgICAgeyByZXR1cm4gKF9fbGhzIC0gX19yaHMuZ2V0KCkpOyB9CisgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBpbmxpbmUgZnJpZW5kIHN0ZDo6cHRyZGlmZl90IAorICAgICAgICBvcGVyYXRvci0oY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19saHMsIF9VcCogX19yaHMpIAorICAgICAgICB7IHJldHVybiAoX19saHMuZ2V0KCkgLSBfX3Jocyk7IH0KKyAgICAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KKyAgICAgICAgaW5saW5lIGZyaWVuZCBzdGQ6OnB0cmRpZmZfdCAKKyAgICAgICAgb3BlcmF0b3ItKF9VcCogX19saHMsIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXImIF9fcmhzKQorICAgICAgICB7IHJldHVybiAoX19saHMgLSBfX3Jocy5nZXQoKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICBpbmxpbmUgc3RkOjpwdHJkaWZmX3QgCisgICAgICAgIG9wZXJhdG9yLShjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9VcD4mIF9fcmhzKSBjb25zdCAKKyAgICAgICAgeyByZXR1cm4gKF9TdG9yYWdlX3BvbGljeTo6Z2V0KCkgLSBfX3Jocy5nZXQoKSk7IH0KKyAgCisgICAgICAvLyBQb2ludGVyIG1hdGgKKyAgICAgIC8vIE5vdGU6IFRoZXJlIGlzIGEgcmVhc29uIGZvciBhbGwgdGhpcyBvdmVybG9hZGluZyBiYXNlZCBvbiBkaWZmZXJlbnQKKyAgICAgIC8vIGludGVnZXIgdHlwZXMuICBJbiBzb21lIGxpYnN0ZGMrKy12MyB0ZXN0IGNhc2VzLCBhIHRlbXBsYXRlZAorICAgICAgLy8gb3BlcmF0b3IrIGlzIGRlY2xhcmVkIHdoaWNoIGNhbiBtYXRjaCBhbnkgdHlwZXMuICBUaGlzIG9wZXJhdG9yCisgICAgICAvLyB0ZW5kcyB0byAic3RlYWwiIHRoZSByZWNvZ25pdGlvbiBvZiBfUG9pbnRlcl9hZGFwdGVyJ3Mgb3duIG9wZXJhdG9yKyAKKyAgICAgIC8vIHVubGVzcyB0aGUgaW50ZWdlciB0eXBlIG1hdGNoZXMgcGVyZmVjdGx5LgorCisjZGVmaW5lIF9DWFhfUE9JTlRFUl9BUklUSF9PUEVSQVRPUl9TRVQoSU5UX1RZUEUpIFwKKyAgICAgIGlubGluZSBmcmllbmQgX1BvaW50ZXJfYWRhcHRlciBcCisgICAgICBvcGVyYXRvcisoY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19saHMsIElOVF9UWVBFIF9fb2Zmc2V0KSBcCisgICAgICB7IHJldHVybiBfUG9pbnRlcl9hZGFwdGVyKF9fbGhzLmdldCgpICsgX19vZmZzZXQpOyB9IFwKK1wKKyAgICAgIGlubGluZSBmcmllbmQgX1BvaW50ZXJfYWRhcHRlciBcCisgICAgICBvcGVyYXRvcisoSU5UX1RZUEUgX19vZmZzZXQsIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXImIF9fcmhzKSBcCisgICAgICB7IHJldHVybiBfUG9pbnRlcl9hZGFwdGVyKF9fcmhzLmdldCgpICsgX19vZmZzZXQpOyB9IFwKK1wKKyAgICAgIGlubGluZSBmcmllbmQgX1BvaW50ZXJfYWRhcHRlciBcCisgICAgICBvcGVyYXRvci0oY29uc3QgX1BvaW50ZXJfYWRhcHRlciYgX19saHMsIElOVF9UWVBFIF9fb2Zmc2V0KSBcCisgICAgICB7IHJldHVybiBfUG9pbnRlcl9hZGFwdGVyKF9fbGhzLmdldCgpIC0gX19vZmZzZXQpOyB9IFwKK1wKKyAgICAgIGlubGluZSBfUG9pbnRlcl9hZGFwdGVyJiBcCisgICAgICBvcGVyYXRvcis9KElOVF9UWVBFIF9fb2Zmc2V0KSBcCisgICAgICB7IFwKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSArIF9fb2Zmc2V0KTsgXAorICAgICAgICByZXR1cm4gKnRoaXM7IFwKKyAgICAgIH0gXAorXAorICAgICAgaW5saW5lIF9Qb2ludGVyX2FkYXB0ZXImIFwKKyAgICAgIG9wZXJhdG9yLT0oSU5UX1RZUEUgX19vZmZzZXQpIFwKKyAgICAgIHsgXAorICAgICAgICBfU3RvcmFnZV9wb2xpY3k6OnNldChfU3RvcmFnZV9wb2xpY3k6OmdldCgpIC0gX19vZmZzZXQpOyBcCisgICAgICAgIHJldHVybiAqdGhpczsgXAorICAgICAgfSBcCisvLyBFTkQgb2YgX0NYWF9QT0lOVEVSX0FSSVRIX09QRVJBVE9SX1NFVCBtYWNybworICAKKyAgICAgIC8vIEV4cGFuZCBpbnRvIHRoZSB2YXJpb3VzIHBvaW50ZXIgYXJpdGhtZXRpYyBvcGVyYXRvcnMgbmVlZGVkLgorICAgICAgX0NYWF9QT0lOVEVSX0FSSVRIX09QRVJBVE9SX1NFVChzaG9ydCk7CisgICAgICBfQ1hYX1BPSU5URVJfQVJJVEhfT1BFUkFUT1JfU0VUKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIF9DWFhfUE9JTlRFUl9BUklUSF9PUEVSQVRPUl9TRVQoaW50KTsKKyAgICAgIF9DWFhfUE9JTlRFUl9BUklUSF9PUEVSQVRPUl9TRVQodW5zaWduZWQgaW50KTsKKyAgICAgIF9DWFhfUE9JTlRFUl9BUklUSF9PUEVSQVRPUl9TRVQobG9uZyk7CisgICAgICBfQ1hYX1BPSU5URVJfQVJJVEhfT1BFUkFUT1JfU0VUKHVuc2lnbmVkIGxvbmcpOworCisgICAgICAvLyBNYXRoZW1hdGljYWwgTWFuaXB1bGF0b3JzCisgICAgICBpbmxpbmUgX1BvaW50ZXJfYWRhcHRlciYgCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSArIDEpOyAKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorICAKKyAgICAgIGlubGluZSBfUG9pbnRlcl9hZGFwdGVyIAorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisgICAgICAgIF9Qb2ludGVyX2FkYXB0ZXIgdG1wKCp0aGlzKTsKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSArIDEpOworICAgICAgICByZXR1cm4gdG1wOworICAgICAgfQorICAKKyAgICAgIGlubGluZSBfUG9pbnRlcl9hZGFwdGVyJiAKKyAgICAgIG9wZXJhdG9yLS0oKSAKKyAgICAgIHsKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSAtIDEpOyAKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorICAKKyAgICAgIGlubGluZSBfUG9pbnRlcl9hZGFwdGVyCisgICAgICBvcGVyYXRvci0tKGludCkgCisgICAgICB7CisgICAgICAgIF9Qb2ludGVyX2FkYXB0ZXIgdG1wKCp0aGlzKTsKKyAgICAgICAgX1N0b3JhZ2VfcG9saWN5OjpzZXQoX1N0b3JhZ2VfcG9saWN5OjpnZXQoKSAtIDEpOworICAgICAgICByZXR1cm4gdG1wOworICAgICAgfQorICAKKyAgICB9OyAvLyBjbGFzcyBfUG9pbnRlcl9hZGFwdGVyCisKKworI2RlZmluZSBfR0NDX0NYWF9QT0lOVEVSX0NPTVBBUklTT05fT1BFUkFUSU9OX1NFVChPUEVSQVRPUikgXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBcCisgICAgaW5saW5lIGJvb2wgXAorICAgIG9wZXJhdG9yIE9QRVJBVE9SKGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwMT4mIF9fbGhzLCBfVHAyIF9fcmhzKSBcCisgICAgeyByZXR1cm4gX19saHMuZ2V0KCkgT1BFUkFUT1IgX19yaHM7IH0gXAorXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBcCisgICAgaW5saW5lIGJvb2wgXAorICAgIG9wZXJhdG9yIE9QRVJBVE9SKF9UcDEgX19saHMsIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwMj4mIF9fcmhzKSBcCisgICAgeyByZXR1cm4gX19saHMgT1BFUkFUT1IgX19yaHMuZ2V0KCk7IH0gXAorXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBcCisgICAgaW5saW5lIGJvb2wgXAorICAgIG9wZXJhdG9yIE9QRVJBVE9SKGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwMT4mIF9fbGhzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcDI+JiBfX3JocykgXAorICAgIHsgcmV0dXJuIF9fbGhzLmdldCgpIE9QRVJBVE9SIF9fcmhzLmdldCgpOyB9IFwKK1wKKy8vIEVuZCBHQ0NfQ1hYX1BPSU5URVJfQ09NUEFSSVNPTl9PUEVSQVRJT05fU0VUIE1hY3JvCisgIAorICAvLyBFeHBhbmQgaW50byB0aGUgdmFyaW91cyBjb21wYXJpc29uIG9wZXJhdG9ycyBuZWVkZWQuCisgIF9HQ0NfQ1hYX1BPSU5URVJfQ09NUEFSSVNPTl9PUEVSQVRJT05fU0VUKD09KQorICBfR0NDX0NYWF9QT0lOVEVSX0NPTVBBUklTT05fT1BFUkFUSU9OX1NFVCghPSkKKyAgX0dDQ19DWFhfUE9JTlRFUl9DT01QQVJJU09OX09QRVJBVElPTl9TRVQoPCkKKyAgX0dDQ19DWFhfUE9JTlRFUl9DT01QQVJJU09OX09QRVJBVElPTl9TRVQoPD0pCisgIF9HQ0NfQ1hYX1BPSU5URVJfQ09NUEFSSVNPTl9PUEVSQVRJT05fU0VUKD4pCisgIF9HQ0NfQ1hYX1BPSU5URVJfQ09NUEFSSVNPTl9PUEVSQVRJT05fU0VUKD49KQorCisgIC8vIFRoZXNlIGFyZSBoZXJlIGZvciBleHByZXNzaW9ucyBsaWtlICJwdHIgPT0gMCIsICJwdHIgIT0gMCIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fbGhzLCBpbnQgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuZ2V0KCkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19yaHMpOyB9IAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oaW50IF9fbGhzLCBjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fcmhzLmdldCgpID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fbGhzKTsgfSAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19saHMsIGludCBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5nZXQoKSAhPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3Jocyk7IH0gCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShpbnQgX19saHMsIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuZ2V0KCkgIT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19saHMpOyB9IAorCisgIC8qKgorICAgKiBDb21wYXJpc29uIG9wZXJhdG9ycyBmb3IgX1BvaW50ZXJfYWRhcHRlciBkZWZlciB0byB0aGUgYmFzZSBjbGFzcycKKyAgICogY29tcGFyaXNvbiBvcGVyYXRvcnMsIHdoZW4gcG9zc2libGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19saHMsIAorICAgICAgICAgICAgICAgY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVHA+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fVHA6Om9wZXJhdG9yPT0oX19yaHMpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX1RwOjpvcGVyYXRvcjwoX19yaHMpIHx8IF9fbGhzLl9UcDo6b3BlcmF0b3I9PShfX3Jocyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19saHMsIAorICAgICAgICAgICAgICAgY29uc3QgX1BvaW50ZXJfYWRhcHRlcjxfVHA+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzLl9UcDo6b3BlcmF0b3I9PShfX3JocykpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19saHMsIAorICAgICAgICAgICAgICBjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMuX1RwOjpvcGVyYXRvcjwoX19yaHMpIHx8IF9fbGhzLl9UcDo6b3BlcmF0b3I9PShfX3JocykpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfUG9pbnRlcl9hZGFwdGVyPF9UcD4mIF9fbGhzLCAKKyAgICAgICAgICAgICAgIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1RwPiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocy5fVHA6Om9wZXJhdG9yPChfX3JocykpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfU3RvcmVUPgorICAgIGlubGluZSBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCAKKyAgICAgICAgICAgICAgIGNvbnN0IF9Qb2ludGVyX2FkYXB0ZXI8X1N0b3JlVD4mIF9fcCkKKyAgICB7IHJldHVybiAoX19vcyA8PCBfX3AuZ2V0KCkpOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RvcmFnZV9wb2xpY3k+CisgICAgc3RydWN0IHBvaW50ZXJfdHJhaXRzPF9fZ251X2N4eDo6X1BvaW50ZXJfYWRhcHRlcjxfU3RvcmFnZV9wb2xpY3k+PgorICAgIHsKKyAgICAgIC8vLyBUaGUgcG9pbnRlciB0eXBlCisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X1BvaW50ZXJfYWRhcHRlcjxfU3RvcmFnZV9wb2xpY3k+ICAgICAgICAgcG9pbnRlcjsKKyAgICAgIC8vLyBUaGUgdHlwZSBwb2ludGVkIHRvCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHBvaW50ZXI6OmVsZW1lbnRfdHlwZSAgICAgICAgICAgIGVsZW1lbnRfdHlwZTsKKyAgICAgIC8vLyBUeXBlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHBvaW50ZXJzCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHBvaW50ZXI6OmRpZmZlcmVuY2VfdHlwZSAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICB1c2luZyByZWJpbmQgPSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9Qb2ludGVyX2FkYXB0ZXI8CisJdHlwZW5hbWUgcG9pbnRlcl90cmFpdHM8X1N0b3JhZ2VfcG9saWN5Pjo6cmViaW5kPF9VcD4+OworCisgICAgICBzdGF0aWMgcG9pbnRlciBwb2ludGVyX3RvKHR5cGVuYW1lIHBvaW50ZXI6OnJlZmVyZW5jZSBfX3IpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBwb2ludGVyKHN0ZDo6YWRkcmVzc29mKF9fcikpOyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorI2VuZGlmCisKKyNlbmRpZiAvLyBfUE9JTlRFUl9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9wb29sX2FsbG9jYXRvci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcG9vbF9hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmM1MWE2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcG9vbF9hbGxvY2F0b3IuaApAQCAtMCwwICsxLDI4MCBAQAorLy8gQWxsb2NhdG9ycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBleHQvcG9vbF9hbGxvY2F0b3IuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX1BPT0xfQUxMT0NBVE9SX0gKKyNkZWZpbmUgX1BPT0xfQUxMT0NBVE9SX0ggMQorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8ZXh0L2F0b21pY2l0eS5oPgorI2luY2x1ZGUgPGV4dC9jb25jdXJyZW5jZS5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNlbmRpZgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdXNpbmcgc3RkOjpzaXplX3Q7CisgIHVzaW5nIHN0ZDo6cHRyZGlmZl90OworCisgIC8qKgorICAgKiAgQGJyaWVmICBCYXNlIGNsYXNzIGZvciBfX3Bvb2xfYWxsb2MuCisgICAqCisgICAqICBVc2VzIHZhcmlvdXMgYWxsb2NhdG9ycyB0byBmdWxmaWxsIHVuZGVybHlpbmcgcmVxdWVzdHMgKGFuZCBtYWtlcyBhcworICAgKiAgZmV3IHJlcXVlc3RzIGFzIHBvc3NpYmxlIHdoZW4gaW4gZGVmYXVsdCBoaWdoLXNwZWVkIHBvb2wgbW9kZSkuCisgICAqCisgICAqICBJbXBvcnRhbnQgaW1wbGVtZW50YXRpb24gcHJvcGVydGllczoKKyAgICogIDAuIElmIGdsb2JhbGx5IG1hbmRhdGVkLCB0aGVuIGFsbG9jYXRlIG9iamVjdHMgZnJvbSBuZXcKKyAgICogIDEuIElmIHRoZSBjbGllbnRzIHJlcXVlc3QgYW4gb2JqZWN0IG9mIHNpemUgPiBfU19tYXhfYnl0ZXMsIHRoZSByZXN1bHRpbmcKKyAgICogICAgIG9iamVjdCB3aWxsIGJlIG9idGFpbmVkIGRpcmVjdGx5IGZyb20gbmV3CisgICAqICAyLiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlIGFsbG9jYXRlIGFuIG9iamVjdCBvZiBzaXplIGV4YWN0bHkKKyAgICogICAgIF9TX3JvdW5kX3VwKHJlcXVlc3RlZF9zaXplKS4gIFRodXMgdGhlIGNsaWVudCBoYXMgZW5vdWdoIHNpemUKKyAgICogICAgIGluZm9ybWF0aW9uIHRoYXQgd2UgY2FuIHJldHVybiB0aGUgb2JqZWN0IHRvIHRoZSBwcm9wZXIgZnJlZSBsaXN0CisgICAqICAgICB3aXRob3V0IHBlcm1hbmVudGx5IGxvc2luZyBwYXJ0IG9mIHRoZSBvYmplY3QuCisgICAqLworICAgIGNsYXNzIF9fcG9vbF9hbGxvY19iYXNlCisgICAgeworICAgIHByb3RlY3RlZDoKKworICAgICAgZW51bSB7IF9TX2FsaWduID0gOCB9OworICAgICAgZW51bSB7IF9TX21heF9ieXRlcyA9IDEyOCB9OworICAgICAgZW51bSB7IF9TX2ZyZWVfbGlzdF9zaXplID0gKHNpemVfdClfU19tYXhfYnl0ZXMgLyAoc2l6ZV90KV9TX2FsaWduIH07CisgICAgICAKKyAgICAgIHVuaW9uIF9PYmoKKyAgICAgIHsKKwl1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKKwljaGFyICAgICAgICBfTV9jbGllbnRfZGF0YVsxXTsgICAgLy8gVGhlIGNsaWVudCBzZWVzIHRoaXMuCisgICAgICB9OworICAgICAgCisgICAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgICAgICAgICBfU19mcmVlX2xpc3RbX1NfZnJlZV9saXN0X3NpemVdOworCisgICAgICAvLyBDaHVuayBhbGxvY2F0aW9uIHN0YXRlLgorICAgICAgc3RhdGljIGNoYXIqICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZTsKKyAgICAgIHN0YXRpYyBjaGFyKiAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlOworICAgICAgc3RhdGljIHNpemVfdCAgICAgICAgICAgICAgICAgX1NfaGVhcF9zaXplOyAgICAgCisgICAgICAKKyAgICAgIHNpemVfdAorICAgICAgX01fcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCisgICAgICB7IHJldHVybiAoKF9fYnl0ZXMgKyAoc2l6ZV90KV9TX2FsaWduIC0gMSkgJiB+KChzaXplX3QpX1NfYWxpZ24gLSAxKSk7IH0KKyAgICAgIAorICAgICAgX0dMSUJDWFhfQ09OU1QgX09iaiogdm9sYXRpbGUqCisgICAgICBfTV9nZXRfZnJlZV9saXN0KHNpemVfdCBfX2J5dGVzKSB0aHJvdyAoKTsKKyAgICAKKyAgICAgIF9fbXV0ZXgmCisgICAgICBfTV9nZXRfbXV0ZXgoKSB0aHJvdyAoKTsKKworICAgICAgLy8gUmV0dXJucyBhbiBvYmplY3Qgb2Ygc2l6ZSBfX24sIGFuZCBvcHRpb25hbGx5IGFkZHMgdG8gc2l6ZSBfX24KKyAgICAgIC8vIGZyZWUgbGlzdC4KKyAgICAgIHZvaWQqCisgICAgICBfTV9yZWZpbGwoc2l6ZV90IF9fbik7CisgICAgICAKKyAgICAgIC8vIEFsbG9jYXRlcyBhIGNodW5rIGZvciBub2JqcyBvZiBzaXplIHNpemUuICBub2JqcyBtYXkgYmUgcmVkdWNlZAorICAgICAgLy8gaWYgaXQgaXMgaW5jb252ZW5pZW50IHRvIGFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyLgorICAgICAgY2hhcioKKyAgICAgIF9NX2FsbG9jYXRlX2NodW5rKHNpemVfdCBfX24sIGludCYgX19ub2Jqcyk7CisgICAgfTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgIEFsbG9jYXRvciB1c2luZyBhIG1lbW9yeSBwb29sIHdpdGggYSBzaW5nbGUgbG9jay4KKyAgICogQGluZ3JvdXAgYWxsb2NhdG9ycworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIF9fcG9vbF9hbGxvYyA6IHByaXZhdGUgX19wb29sX2FsbG9jX2Jhc2UKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHN0YXRpYyBfQXRvbWljX3dvcmQJICAgIF9TX2ZvcmNlX25ldzsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgc2l6ZV90ICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1RwJiAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHN0cnVjdCByZWJpbmQKKyAgICAgICAgeyB0eXBlZGVmIF9fcG9vbF9hbGxvYzxfVHAxPiBvdGhlcjsgfTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxMDMuIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50CisgICAgICB0eXBlZGVmIHN0ZDo6dHJ1ZV90eXBlIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50OworI2VuZGlmCisKKyAgICAgIF9fcG9vbF9hbGxvYygpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgX19wb29sX2FsbG9jKGNvbnN0IF9fcG9vbF9hbGxvYyYpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX19wb29sX2FsbG9jKGNvbnN0IF9fcG9vbF9hbGxvYzxfVHAxPiYpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgfl9fcG9vbF9hbGxvYygpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3gpOyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIKKyAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX194KTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QgX0dMSUJDWFhfVVNFX05PRVhDRVBUIAorICAgICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGNvbnN0cnVjdChfVXAqIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyA6Om5ldygodm9pZCAqKV9fcCkgX1VwKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgorICAgICAgICB2b2lkIAorICAgICAgICBkZXN0cm95KF9VcCogX19wKSB7IF9fcC0+fl9VcCgpOyB9CisjZWxzZQorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDAyLiB3cm9uZyBuZXcgZXhwcmVzc2lvbiBpbiBbc29tZV9dIGFsbG9jYXRvcjo6Y29uc3RydWN0CisgICAgICB2b2lkIAorICAgICAgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSAKKyAgICAgIHsgOjpuZXcoKHZvaWQgKilfX3ApIF9UcChfX3ZhbCk7IH0KKworICAgICAgdm9pZCAKKyAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KKyNlbmRpZgorCisgICAgICBwb2ludGVyCisgICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApOworCisgICAgICB2b2lkCisgICAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKTsgICAgICAKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX19wb29sX2FsbG9jPF9UcD4mLCBjb25zdCBfX3Bvb2xfYWxsb2M8X1RwPiYpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19wb29sX2FsbG9jPF9UcD4mLCBjb25zdCBfX3Bvb2xfYWxsb2M8X1RwPiYpCisgICAgeyByZXR1cm4gZmFsc2U7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX0F0b21pY193b3JkCisgICAgX19wb29sX2FsbG9jPF9UcD46Ol9TX2ZvcmNlX25ldzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwKgorICAgIF9fcG9vbF9hbGxvYzxfVHA+OjphbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKikKKyAgICB7CisgICAgICBwb2ludGVyIF9fcmV0ID0gMDsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fbiAhPSAwLCB0cnVlKSkKKwl7CisJICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKKwkgICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOworCisJICAvLyBJZiB0aGVyZSBpcyBhIHJhY2UgdGhyb3VnaCBoZXJlLCBhc3N1bWUgYW5zd2VyIGZyb20gZ2V0ZW52CisJICAvLyB3aWxsIHJlc29sdmUgaW4gc2FtZSBkaXJlY3Rpb24uICBJbnNwaXJlZCBieSB0ZWNobmlxdWVzCisJICAvLyB0byBlZmZpY2llbnRseSBzdXBwb3J0IHRocmVhZGluZyBmb3VuZCBpbiBiYXNpY19zdHJpbmcuaC4KKwkgIGlmIChfU19mb3JjZV9uZXcgPT0gMCkKKwkgICAgeworCSAgICAgIGlmIChzdGQ6OmdldGVudigiR0xJQkNYWF9GT1JDRV9ORVciKSkKKwkJX19hdG9taWNfYWRkX2Rpc3BhdGNoKCZfU19mb3JjZV9uZXcsIDEpOworCSAgICAgIGVsc2UKKwkJX19hdG9taWNfYWRkX2Rpc3BhdGNoKCZfU19mb3JjZV9uZXcsIC0xKTsKKwkgICAgfQorCisJICBjb25zdCBzaXplX3QgX19ieXRlcyA9IF9fbiAqIHNpemVvZihfVHApOwkgICAgICAKKwkgIGlmIChfX2J5dGVzID4gc2l6ZV90KF9TX21heF9ieXRlcykgfHwgX1NfZm9yY2VfbmV3ID4gMCkKKwkgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPig6Om9wZXJhdG9yIG5ldyhfX2J5dGVzKSk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfT2JqKiB2b2xhdGlsZSogX19mcmVlX2xpc3QgPSBfTV9nZXRfZnJlZV9saXN0KF9fYnl0ZXMpOworCSAgICAgIAorCSAgICAgIF9fc2NvcGVkX2xvY2sgc2VudHJ5KF9NX2dldF9tdXRleCgpKTsKKwkgICAgICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1bHQgPSAqX19mcmVlX2xpc3Q7CisJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCisJCV9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX01fcmVmaWxsKF9NX3JvdW5kX3VwKF9fYnl0ZXMpKSk7CisJICAgICAgZWxzZQorCQl7CisJCSAgKl9fZnJlZV9saXN0ID0gX19yZXN1bHQtPl9NX2ZyZWVfbGlzdF9saW5rOworCQkgIF9fcmV0ID0gcmVpbnRlcnByZXRfY2FzdDxfVHAqPihfX3Jlc3VsdCk7CisJCX0KKwkgICAgICBpZiAoX19yZXQgPT0gMCkKKwkJc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOworCSAgICB9CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fcG9vbF9hbGxvYzxfVHA+OjpkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fbiAhPSAwICYmIF9fcCAhPSAwLCB0cnVlKSkKKwl7CisJICBjb25zdCBzaXplX3QgX19ieXRlcyA9IF9fbiAqIHNpemVvZihfVHApOworCSAgaWYgKF9fYnl0ZXMgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9TX21heF9ieXRlcykgfHwgX1NfZm9yY2VfbmV3ID4gMCkKKwkgICAgOjpvcGVyYXRvciBkZWxldGUoX19wKTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX2ZyZWVfbGlzdCA9IF9NX2dldF9mcmVlX2xpc3QoX19ieXRlcyk7CisJICAgICAgX09iaiogX19xID0gcmVpbnRlcnByZXRfY2FzdDxfT2JqKj4oX19wKTsKKworCSAgICAgIF9fc2NvcGVkX2xvY2sgc2VudHJ5KF9NX2dldF9tdXRleCgpKTsKKwkgICAgICBfX3EgLT5fTV9mcmVlX2xpc3RfbGluayA9ICpfX2ZyZWVfbGlzdDsKKwkgICAgICAqX19mcmVlX2xpc3QgPSBfX3E7CisJICAgIH0KKwl9CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcmFuZG9tIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcmFuZG9tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0N2ViZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9yYW5kb20KQEAgLTAsMCArMSwyODU4IEBACisvLyBSYW5kb20gbnVtYmVyIGV4dGVuc2lvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9yYW5kb20KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9FWFRfUkFORE9NCisjZGVmaW5lIF9FWFRfUkFORE9NIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPHJhbmRvbT4KKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxleHQvY21hdGg+CisjaWZkZWYgX19TU0UyX18KKyMgaW5jbHVkZSA8eDg2aW50cmluLmg+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyNpZiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXworCisgIC8qIE1lcnNlbm5lIHR3aXN0ZXIgaW1wbGVtZW50YXRpb24gb3B0aW1pemVkIGZvciB2ZWN0b3Igb3BlcmF0aW9ucy4KKyAgICoKKyAgICogUmVmZXJlbmNlOiBodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9TRk1ULworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX19tLAorCSAgIHNpemVfdCBfX3BvczEsIHNpemVfdCBfX3NsMSwgc2l6ZV90IF9fc2wyLAorCSAgIHNpemVfdCBfX3NyMSwgc2l6ZV90IF9fc3IyLAorCSAgIHVpbnQzMl90IF9fbXNrMSwgdWludDMyX3QgX19tc2syLAorCSAgIHVpbnQzMl90IF9fbXNrMywgdWludDMyX3QgX19tc2s0LAorCSAgIHVpbnQzMl90IF9fcGFyaXR5MSwgdWludDMyX3QgX19wYXJpdHkyLAorCSAgIHVpbnQzMl90IF9fcGFyaXR5MywgdWludDMyX3QgX19wYXJpdHk0PgorICAgIGNsYXNzIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZQorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxfVUludFR5cGU+Ojp2YWx1ZSwgInRlbXBsYXRlIGFyZ3VtZW50ICIKKwkJICAgICJzdWJzdGl0dXRpbmcgX1VJbnRUeXBlIG5vdCBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fc3IxIDwgMzIsICJmaXJzdCByaWdodCBzaGlmdCB0b28gbGFyZ2UiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19zcjIgPCAxNiwgInNlY29uZCByaWdodCBzaGlmdCB0b28gbGFyZ2UiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19zbDEgPCAzMiwgImZpcnN0IGxlZnQgc2hpZnQgdG9vIGxhcmdlIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fc2wyIDwgMTYsICJzZWNvbmQgbGVmdCBzaGlmdCB0b28gbGFyZ2UiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1VJbnRUeXBlIHJlc3VsdF90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1fdyA9IHNpemVvZihyZXN1bHRfdHlwZSkgKiA4OworICAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX01fbnN0YXRlID0gX19tIC8gMTI4ICsgMTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9NX25zdGF0ZTMyID0gX01fbnN0YXRlICogNDsKKworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPF9VSW50VHlwZT46OnZhbHVlLCAidGVtcGxhdGUgYXJndW1lbnQgIgorCQkgICAgInN1YnN0aXR1dGluZyBfVUludFR5cGUgbm90IGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19wb3MxIDwgX01fbnN0YXRlLCAiUE9TMSBub3Qgc21hbGxlciB0aGFuIHN0YXRlIHNpemUiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoMTYgJSBzaXplb2YoX1VJbnRUeXBlKSA9PSAwLAorCQkgICAgIlVJbnRUeXBlIHNpemUgbXVzdCBkaXZpZGUgMTYiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHN0YXRlX3NpemUgPSBfTV9uc3RhdGUgKiAoMTYKKwkJCQkJCQkvIHNpemVvZihyZXN1bHRfdHlwZSkpOworICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZSBkZWZhdWx0X3NlZWQgPSA1NDg5dTsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIGV4cGxpY2l0CisgICAgICBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUocmVzdWx0X3R5cGUgX19zZCA9IGRlZmF1bHRfc2VlZCkKKyAgICAgIHsgc2VlZChfX3NkKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcSwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCXN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8X1NzZXEsCisJCQkJICAgICBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU+Ojp2YWx1ZT4KKwkgICAgICAgOjp0eXBlPgorCWV4cGxpY2l0CisJc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lKF9Tc2VxJiBfX3EpCisJeyBzZWVkKF9fcSk7IH0KKworICAgICAgdm9pZAorICAgICAgc2VlZChyZXN1bHRfdHlwZSBfX3NkID0gZGVmYXVsdF9zZWVkKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NzZXE+CisJdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jbGFzczxfU3NlcT46OnZhbHVlPjo6dHlwZQorCXNlZWQoX1NzZXEmIF9fcSk7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpCisgICAgICB7IHJldHVybiAwOyB9OworCisgICAgICBzdGF0aWMgY29uc3RleHByIHJlc3VsdF90eXBlCisgICAgICBtYXgoKQorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGRpc2NhcmQodW5zaWduZWQgbG9uZyBsb25nIF9feik7CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCkKKyAgICAgIHsKKwlpZiAoX19idWlsdGluX2V4cGVjdChfTV9wb3MgPj0gc3RhdGVfc2l6ZSwgMCkpCisJICBfTV9nZW5fcmFuZCgpOworCisJcmV0dXJuIF9NX3N0YXRlVFtfTV9wb3MrK107CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZV8yLCBzaXplX3QgX19tXzIsCisJICAgICAgIHNpemVfdCBfX3BvczFfMiwgc2l6ZV90IF9fc2wxXzIsIHNpemVfdCBfX3NsMl8yLAorCSAgICAgICBzaXplX3QgX19zcjFfMiwgc2l6ZV90IF9fc3IyXzIsCisJICAgICAgIHVpbnQzMl90IF9fbXNrMV8yLCB1aW50MzJfdCBfX21zazJfMiwKKwkgICAgICAgdWludDMyX3QgX19tc2szXzIsIHVpbnQzMl90IF9fbXNrNF8yLAorCSAgICAgICB1aW50MzJfdCBfX3Bhcml0eTFfMiwgdWludDMyX3QgX19wYXJpdHkyXzIsCisJICAgICAgIHVpbnQzMl90IF9fcGFyaXR5M18yLCB1aW50MzJfdCBfX3Bhcml0eTRfMj4KKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3Qgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZV8yLAorCQkgICBfX21fMiwgX19wb3MxXzIsIF9fc2wxXzIsIF9fc2wyXzIsIF9fc3IxXzIsIF9fc3IyXzIsCisJCSAgIF9fbXNrMV8yLCBfX21zazJfMiwgX19tc2szXzIsIF9fbXNrNF8yLAorCQkgICBfX3Bhcml0eTFfMiwgX19wYXJpdHkyXzIsIF9fcGFyaXR5M18yLCBfX3Bhcml0eTRfMj4mIF9fbGhzLAorCQkgICBjb25zdCBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlXzIsCisJCSAgIF9fbV8yLCBfX3BvczFfMiwgX19zbDFfMiwgX19zbDJfMiwgX19zcjFfMiwgX19zcjJfMiwKKwkJICAgX19tc2sxXzIsIF9fbXNrMl8yLCBfX21zazNfMiwgX19tc2s0XzIsCisJCSAgIF9fcGFyaXR5MV8yLCBfX3Bhcml0eTJfMiwgX19wYXJpdHkzXzIsIF9fcGFyaXR5NF8yPiYgX19yaHMpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGVfMiwgc2l6ZV90IF9fbV8yLAorCSAgICAgICBzaXplX3QgX19wb3MxXzIsIHNpemVfdCBfX3NsMV8yLCBzaXplX3QgX19zbDJfMiwKKwkgICAgICAgc2l6ZV90IF9fc3IxXzIsIHNpemVfdCBfX3NyMl8yLAorCSAgICAgICB1aW50MzJfdCBfX21zazFfMiwgdWludDMyX3QgX19tc2syXzIsCisJICAgICAgIHVpbnQzMl90IF9fbXNrM18yLCB1aW50MzJfdCBfX21zazRfMiwKKwkgICAgICAgdWludDMyX3QgX19wYXJpdHkxXzIsIHVpbnQzMl90IF9fcGFyaXR5Ml8yLAorCSAgICAgICB1aW50MzJfdCBfX3Bhcml0eTNfMiwgdWludDMyX3QgX19wYXJpdHk0XzIsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgX19nbnVfY3h4OjpzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUKKwkJICAgPF9VSW50VHlwZV8yLAorCQkgICBfX21fMiwgX19wb3MxXzIsIF9fc2wxXzIsIF9fc2wyXzIsIF9fc3IxXzIsIF9fc3IyXzIsCisJCSAgIF9fbXNrMV8yLCBfX21zazJfMiwgX19tc2szXzIsIF9fbXNrNF8yLAorCQkgICBfX3Bhcml0eTFfMiwgX19wYXJpdHkyXzIsIF9fcGFyaXR5M18yLCBfX3Bhcml0eTRfMj4mIF9feCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZV8yLCBzaXplX3QgX19tXzIsCisJICAgICAgIHNpemVfdCBfX3BvczFfMiwgc2l6ZV90IF9fc2wxXzIsIHNpemVfdCBfX3NsMl8yLAorCSAgICAgICBzaXplX3QgX19zcjFfMiwgc2l6ZV90IF9fc3IyXzIsCisJICAgICAgIHVpbnQzMl90IF9fbXNrMV8yLCB1aW50MzJfdCBfX21zazJfMiwKKwkgICAgICAgdWludDMyX3QgX19tc2szXzIsIHVpbnQzMl90IF9fbXNrNF8yLAorCSAgICAgICB1aW50MzJfdCBfX3Bhcml0eTFfMiwgdWludDMyX3QgX19wYXJpdHkyXzIsCisJICAgICAgIHVpbnQzMl90IF9fcGFyaXR5M18yLCB1aW50MzJfdCBfX3Bhcml0eTRfMiwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBfX2dudV9jeHg6OnNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGVfMiwKKwkJICAgX19tXzIsIF9fcG9zMV8yLCBfX3NsMV8yLCBfX3NsMl8yLCBfX3NyMV8yLCBfX3NyMl8yLAorCQkgICBfX21zazFfMiwgX19tc2syXzIsIF9fbXNrM18yLCBfX21zazRfMiwKKwkJICAgX19wYXJpdHkxXzIsIF9fcGFyaXR5Ml8yLCBfX3Bhcml0eTNfMiwgX19wYXJpdHk0XzI+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHVuaW9uCisgICAgICB7CisjaWZkZWYgX19TU0UyX18KKwlfX20xMjhpIF9NX3N0YXRlW19NX25zdGF0ZV07CisjZW5kaWYKKwl1aW50MzJfdCBfTV9zdGF0ZTMyW19NX25zdGF0ZTMyXTsKKwlyZXN1bHRfdHlwZSBfTV9zdGF0ZVRbc3RhdGVfc2l6ZV07CisgICAgICB9IF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXyAoMTYpKSk7CisgICAgICBzaXplX3QgX01fcG9zOworCisgICAgICB2b2lkIF9NX2dlbl9yYW5kKHZvaWQpOworICAgICAgdm9pZCBfTV9wZXJpb2RfY2VydGlmaWNhdGlvbigpOworICB9OworCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX19tLAorCSAgIHNpemVfdCBfX3BvczEsIHNpemVfdCBfX3NsMSwgc2l6ZV90IF9fc2wyLAorCSAgIHNpemVfdCBfX3NyMSwgc2l6ZV90IF9fc3IyLAorCSAgIHVpbnQzMl90IF9fbXNrMSwgdWludDMyX3QgX19tc2syLAorCSAgIHVpbnQzMl90IF9fbXNrMywgdWludDMyX3QgX19tc2s0LAorCSAgIHVpbnQzMl90IF9fcGFyaXR5MSwgdWludDMyX3QgX19wYXJpdHkyLAorCSAgIHVpbnQzMl90IF9fcGFyaXR5MywgdWludDMyX3QgX19wYXJpdHk0PgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfX2dudV9jeHg6OnNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsCisJICAgICAgIF9fbSwgX19wb3MxLCBfX3NsMSwgX19zbDIsIF9fc3IxLCBfX3NyMiwgX19tc2sxLCBfX21zazIsIF9fbXNrMywKKwkgICAgICAgX19tc2s0LCBfX3Bhcml0eTEsIF9fcGFyaXR5MiwgX19wYXJpdHkzLCBfX3Bhcml0eTQ+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19nbnVfY3h4OjpzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLAorCSAgICAgICBfX20sIF9fcG9zMSwgX19zbDEsIF9fc2wyLCBfX3NyMSwgX19zcjIsIF9fbXNrMSwgX19tc2syLCBfX21zazMsCisJICAgICAgIF9fbXNrNCwgX19wYXJpdHkxLCBfX3Bhcml0eTIsIF9fcGFyaXR5MywgX19wYXJpdHk0PiYgX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworCisgIC8qIERlZmluaXRpb25zIGZvciB0aGUgU0lNRC1vcmllbnRlZCBGYXN0IE1lcnNlbm5lIFR3aXN0ZXIgYXMgZGVmaW5lZAorICAgKiBpbiB0aGUgQyBpbXBsZW1lbnRhdGlvbiBieSBEYWl0byBhbmQgTWF0c3Vtb3RvLCBhcyBib3RoIGEgMzItYml0CisgICAqIGFuZCA2NC1iaXQgdmVyc2lvbi4KKyAgICovCisgIHR5cGVkZWYgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPHVpbnQzMl90LCA2MDcsIDIsCisJCQkJCSAgICAxNSwgMywgMTMsIDMsCisJCQkJCSAgICAweGZkZmYzN2ZmVSwgMHhlZjdmM2Y3ZFUsCisJCQkJCSAgICAweGZmNzc3YjdkVSwgMHg3ZmY3ZmIyZlUsCisJCQkJCSAgICAweDAwMDAwMDAxVSwgMHgwMDAwMDAwMFUsCisJCQkJCSAgICAweDAwMDAwMDAwVSwgMHg1OTg2ZjA1NFU+CisgICAgc2ZtdDYwNzsKKworICB0eXBlZGVmIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTx1aW50NjRfdCwgNjA3LCAyLAorCQkJCQkgICAgMTUsIDMsIDEzLCAzLAorCQkJCQkgICAgMHhmZGZmMzdmZlUsIDB4ZWY3ZjNmN2RVLAorCQkJCQkgICAgMHhmZjc3N2I3ZFUsIDB4N2ZmN2ZiMmZVLAorCQkJCQkgICAgMHgwMDAwMDAwMVUsIDB4MDAwMDAwMDBVLAorCQkJCQkgICAgMHgwMDAwMDAwMFUsIDB4NTk4NmYwNTRVPgorICAgIHNmbXQ2MDdfNjQ7CisKKworICB0eXBlZGVmIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTx1aW50MzJfdCwgMTI3OSwgNywKKwkJCQkJICAgIDE0LCAzLCA1LCAxLAorCQkJCQkgICAgMHhmN2ZlZmZmZFUsIDB4N2ZlZmNmZmZVLAorCQkJCQkgICAgMHhhZmYzZWYzZlUsIDB4YjVmZmZmN2ZVLAorCQkJCQkgICAgMHgwMDAwMDAwMVUsIDB4MDAwMDAwMDBVLAorCQkJCQkgICAgMHgwMDAwMDAwMFUsIDB4MjAwMDAwMDBVPgorICAgIHNmbXQxMjc5OworCisgIHR5cGVkZWYgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPHVpbnQ2NF90LCAxMjc5LCA3LAorCQkJCQkgICAgMTQsIDMsIDUsIDEsCisJCQkJCSAgICAweGY3ZmVmZmZkVSwgMHg3ZmVmY2ZmZlUsCisJCQkJCSAgICAweGFmZjNlZjNmVSwgMHhiNWZmZmY3ZlUsCisJCQkJCSAgICAweDAwMDAwMDAxVSwgMHgwMDAwMDAwMFUsCisJCQkJCSAgICAweDAwMDAwMDAwVSwgMHgyMDAwMDAwMFU+CisgICAgc2ZtdDEyNzlfNjQ7CisKKworICB0eXBlZGVmIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTx1aW50MzJfdCwgMjI4MSwgMTIsCisJCQkJCSAgICAxOSwgMSwgNSwgMSwKKwkJCQkJICAgIDB4YmZmN2ZmYmZVLCAweGZkZmZmZmZlVSwKKwkJCQkJICAgIDB4ZjdmZmVmN2ZVLCAweGYyZjdjYmJmVSwKKwkJCQkJICAgIDB4MDAwMDAwMDFVLCAweDAwMDAwMDAwVSwKKwkJCQkJICAgIDB4MDAwMDAwMDBVLCAweDQxZGZhNjAwVT4KKyAgICBzZm10MjI4MTsKKworICB0eXBlZGVmIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTx1aW50NjRfdCwgMjI4MSwgMTIsCisJCQkJCSAgICAxOSwgMSwgNSwgMSwKKwkJCQkJICAgIDB4YmZmN2ZmYmZVLCAweGZkZmZmZmZlVSwKKwkJCQkJICAgIDB4ZjdmZmVmN2ZVLCAweGYyZjdjYmJmVSwKKwkJCQkJICAgIDB4MDAwMDAwMDFVLCAweDAwMDAwMDAwVSwKKwkJCQkJICAgIDB4MDAwMDAwMDBVLCAweDQxZGZhNjAwVT4KKyAgICBzZm10MjI4MV82NDsKKworCisgIHR5cGVkZWYgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPHVpbnQzMl90LCA0MjUzLCAxNywKKwkJCQkJICAgIDIwLCAxLCA3LCAxLAorCQkJCQkgICAgMHg5ZjdiZmZmZlUsIDB4OWZmZmZmNWZVLAorCQkJCQkgICAgMHgzZWZmZmZmYlUsIDB4ZmZmZmY3YmJVLAorCQkJCQkgICAgMHhhODAwMDAwMVUsIDB4YWY1MzkwYTNVLAorCQkJCQkgICAgMHhiNzQwYjNmOFUsIDB4NmMxMTQ4NmRVPgorICAgIHNmbXQ0MjUzOworCisgIHR5cGVkZWYgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPHVpbnQ2NF90LCA0MjUzLCAxNywKKwkJCQkJICAgIDIwLCAxLCA3LCAxLAorCQkJCQkgICAgMHg5ZjdiZmZmZlUsIDB4OWZmZmZmNWZVLAorCQkJCQkgICAgMHgzZWZmZmZmYlUsIDB4ZmZmZmY3YmJVLAorCQkJCQkgICAgMHhhODAwMDAwMVUsIDB4YWY1MzkwYTNVLAorCQkJCQkgICAgMHhiNzQwYjNmOFUsIDB4NmMxMTQ4NmRVPgorICAgIHNmbXQ0MjUzXzY0OworCisKKyAgdHlwZWRlZiBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8dWludDMyX3QsIDExMjEzLCA2OCwKKwkJCQkJICAgIDE0LCAzLCA3LCAzLAorCQkJCQkgICAgMHhlZmZmZjdmYlUsIDB4ZmZmZmZmZWZVLAorCQkJCQkgICAgMHhkZmRmYmZmZlUsIDB4N2ZmZmRiZmRVLAorCQkJCQkgICAgMHgwMDAwMDAwMVUsIDB4MDAwMDAwMDBVLAorCQkJCQkgICAgMHhlODE0ODAwMFUsIDB4ZDBjN2FmYTNVPgorICAgIHNmbXQxMTIxMzsKKworICB0eXBlZGVmIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTx1aW50NjRfdCwgMTEyMTMsIDY4LAorCQkJCQkgICAgMTQsIDMsIDcsIDMsCisJCQkJCSAgICAweGVmZmZmN2ZiVSwgMHhmZmZmZmZlZlUsCisJCQkJCSAgICAweGRmZGZiZmZmVSwgMHg3ZmZmZGJmZFUsCisJCQkJCSAgICAweDAwMDAwMDAxVSwgMHgwMDAwMDAwMFUsCisJCQkJCSAgICAweGU4MTQ4MDAwVSwgMHhkMGM3YWZhM1U+CisgICAgc2ZtdDExMjEzXzY0OworCisKKyAgdHlwZWRlZiBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8dWludDMyX3QsIDE5OTM3LCAxMjIsCisJCQkJCSAgICAxOCwgMSwgMTEsIDEsCisJCQkJCSAgICAweGRmZmZmZmVmVSwgMHhkZGZlY2I3ZlUsCisJCQkJCSAgICAweGJmZmFmZmZmVSwgMHhiZmZmZmZmNlUsCisJCQkJCSAgICAweDAwMDAwMDAxVSwgMHgwMDAwMDAwMFUsCisJCQkJCSAgICAweDAwMDAwMDAwVSwgMHgxM2M5ZTY4NFU+CisgICAgc2ZtdDE5OTM3OworCisgIHR5cGVkZWYgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPHVpbnQ2NF90LCAxOTkzNywgMTIyLAorCQkJCQkgICAgMTgsIDEsIDExLCAxLAorCQkJCQkgICAgMHhkZmZmZmZlZlUsIDB4ZGRmZWNiN2ZVLAorCQkJCQkgICAgMHhiZmZhZmZmZlUsIDB4YmZmZmZmZjZVLAorCQkJCQkgICAgMHgwMDAwMDAwMVUsIDB4MDAwMDAwMDBVLAorCQkJCQkgICAgMHgwMDAwMDAwMFUsIDB4MTNjOWU2ODRVPgorICAgIHNmbXQxOTkzN182NDsKKworCisgIHR5cGVkZWYgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPHVpbnQzMl90LCA0NDQ5NywgMzMwLAorCQkJCQkgICAgNSwgMywgOSwgMywKKwkJCQkJICAgIDB4ZWZmZmZmZmJVLCAweGRmYmViZmZmVSwKKwkJCQkJICAgIDB4YmZiZjdiZWZVLCAweDlmZmQ3YmZmVSwKKwkJCQkJICAgIDB4MDAwMDAwMDFVLCAweDAwMDAwMDAwVSwKKwkJCQkJICAgIDB4YTNhYzQwMDBVLCAweGVjYzEzMjdhVT4KKyAgICBzZm10NDQ0OTc7CisKKyAgdHlwZWRlZiBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8dWludDY0X3QsIDQ0NDk3LCAzMzAsCisJCQkJCSAgICA1LCAzLCA5LCAzLAorCQkJCQkgICAgMHhlZmZmZmZmYlUsIDB4ZGZiZWJmZmZVLAorCQkJCQkgICAgMHhiZmJmN2JlZlUsIDB4OWZmZDdiZmZVLAorCQkJCQkgICAgMHgwMDAwMDAwMVUsIDB4MDAwMDAwMDBVLAorCQkJCQkgICAgMHhhM2FjNDAwMFUsIDB4ZWNjMTMyN2FVPgorICAgIHNmbXQ0NDQ5N182NDsKKworCisgIHR5cGVkZWYgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPHVpbnQzMl90LCA4NjI0MywgMzY2LAorCQkJCQkgICAgNiwgNywgMTksIDEsCisJCQkJCSAgICAweGZkYmZmYmZmVSwgMHhiZmY3ZmYzZlUsCisJCQkJCSAgICAweGZkNzdlZmZmVSwgMHhiZjlmZjNmZlUsCisJCQkJCSAgICAweDAwMDAwMDAxVSwgMHgwMDAwMDAwMFUsCisJCQkJCSAgICAweDAwMDAwMDAwVSwgMHhlOTUyOGQ4NVU+CisgICAgc2ZtdDg2MjQzOworCisgIHR5cGVkZWYgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPHVpbnQ2NF90LCA4NjI0MywgMzY2LAorCQkJCQkgICAgNiwgNywgMTksIDEsCisJCQkJCSAgICAweGZkYmZmYmZmVSwgMHhiZmY3ZmYzZlUsCisJCQkJCSAgICAweGZkNzdlZmZmVSwgMHhiZjlmZjNmZlUsCisJCQkJCSAgICAweDAwMDAwMDAxVSwgMHgwMDAwMDAwMFUsCisJCQkJCSAgICAweDAwMDAwMDAwVSwgMHhlOTUyOGQ4NVU+CisgICAgc2ZtdDg2MjQzXzY0OworCisKKyAgdHlwZWRlZiBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8dWludDMyX3QsIDEzMjA0OSwgMTEwLAorCQkJCQkgICAgMTksIDEsIDIxLCAxLAorCQkJCQkgICAgMHhmZmZmYmI1ZlUsIDB4ZmI2ZWJmOTVVLAorCQkJCQkgICAgMHhmZmZlZmZmYVUsIDB4Y2ZmNzdmZmZVLAorCQkJCQkgICAgMHgwMDAwMDAwMVUsIDB4MDAwMDAwMDBVLAorCQkJCQkgICAgMHhjYjUyMDAwMFUsIDB4YzdlOTFjN2RVPgorICAgIHNmbXQxMzIwNDk7CisKKyAgdHlwZWRlZiBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8dWludDY0X3QsIDEzMjA0OSwgMTEwLAorCQkJCQkgICAgMTksIDEsIDIxLCAxLAorCQkJCQkgICAgMHhmZmZmYmI1ZlUsIDB4ZmI2ZWJmOTVVLAorCQkJCQkgICAgMHhmZmZlZmZmYVUsIDB4Y2ZmNzdmZmZVLAorCQkJCQkgICAgMHgwMDAwMDAwMVUsIDB4MDAwMDAwMDBVLAorCQkJCQkgICAgMHhjYjUyMDAwMFUsIDB4YzdlOTFjN2RVPgorICAgIHNmbXQxMzIwNDlfNjQ7CisKKworICB0eXBlZGVmIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTx1aW50MzJfdCwgMjE2MDkxLCA2MjcsCisJCQkJCSAgICAxMSwgMywgMTAsIDEsCisJCQkJCSAgICAweGJmZjdiZmY3VSwgMHhiZmZmZmZmZlUsCisJCQkJCSAgICAweGJmZmZmYTdmVSwgMHhmZmRkZmJmYlUsCisJCQkJCSAgICAweGY4MDAwMDAxVSwgMHg4OWU4MDcwOVUsCisJCQkJCSAgICAweDNiZDJiNjRiVSwgMHgwYzY0YjFlNFU+CisgICAgc2ZtdDIxNjA5MTsKKworICB0eXBlZGVmIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTx1aW50NjRfdCwgMjE2MDkxLCA2MjcsCisJCQkJCSAgICAxMSwgMywgMTAsIDEsCisJCQkJCSAgICAweGJmZjdiZmY3VSwgMHhiZmZmZmZmZlUsCisJCQkJCSAgICAweGJmZmZmYTdmVSwgMHhmZmRkZmJmYlUsCisJCQkJCSAgICAweGY4MDAwMDAxVSwgMHg4OWU4MDcwOVUsCisJCQkJCSAgICAweDNiZDJiNjRiVSwgMHgwYzY0YjFlNFU+CisgICAgc2ZtdDIxNjA5MV82NDsKKworI2VuZGlmIC8vIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fCisKKyAgLyoqCisgICAqIEBicmllZiBBIGJldGEgY29udGludW91cyBkaXN0cmlidXRpb24gZm9yIHJhbmRvbSBudW1iZXJzLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIGJldGEgcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpczoKKyAgICogQGZbCisgICAqICAgICBwKHh8XGFscGhhLFxiZXRhKSA9IFxmcmFjezF9e0IoXGFscGhhLFxiZXRhKX0KKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgeF57XGFscGhhIC0gMX0gKDEgLSB4KV57XGJldGEgLSAxfQorICAgKiBAZl0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBiZXRhX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBiZXRhX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCWZyaWVuZCBjbGFzcyBiZXRhX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OworCisJZXhwbGljaXQKKwlwYXJhbV90eXBlKF9SZWFsVHlwZSBfX2FscGhhX3ZhbCA9IF9SZWFsVHlwZSgxKSwKKwkJICAgX1JlYWxUeXBlIF9fYmV0YV92YWwgPSBfUmVhbFR5cGUoMSkpCisJOiBfTV9hbHBoYShfX2FscGhhX3ZhbCksIF9NX2JldGEoX19iZXRhX3ZhbCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fYWxwaGEgPiBfUmVhbFR5cGUoMCkpOworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX2JldGEgPiBfUmVhbFR5cGUoMCkpOworCX0KKworCV9SZWFsVHlwZQorCWFscGhhKCkgY29uc3QKKwl7IHJldHVybiBfTV9hbHBoYTsgfQorCisJX1JlYWxUeXBlCisJYmV0YSgpIGNvbnN0CisJeyByZXR1cm4gX01fYmV0YTsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gKF9fcDEuX01fYWxwaGEgPT0gX19wMi5fTV9hbHBoYQorCQkgICYmIF9fcDEuX01fYmV0YSA9PSBfX3AyLl9NX2JldGEpOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZAorCV9NX2luaXRpYWxpemUoKTsKKworCV9SZWFsVHlwZSBfTV9hbHBoYTsKKwlfUmVhbFR5cGUgX01fYmV0YTsKKyAgICAgIH07CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgYmV0YSBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzCisgICAgICAgKiBAZiRcYWxwaGFAZiQgYW5kIEBmJFxiZXRhQGYkLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmV0YV9kaXN0cmlidXRpb24oX1JlYWxUeXBlIF9fYWxwaGFfdmFsID0gX1JlYWxUeXBlKDEpLAorCQkJX1JlYWxUeXBlIF9fYmV0YV92YWwgPSBfUmVhbFR5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fYWxwaGFfdmFsLCBfX2JldGFfdmFsKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBiZXRhX2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIEBmJFxhbHBoYUBmJCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIGFscGhhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmFscGhhKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgQGYkXGJldGFAZiQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBiZXRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmJldGEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDEpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBiZXRhIGRpc3RyaWJ1dGlvbnMgaGF2ZSB0aGUgc2FtZQorICAgICAgICogICAgICAgIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZCBiZSBnZW5lcmF0ZWQKKyAgICAgICAqICAgICAgICBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGJldGFfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgYmV0YV9kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiBfX2QxLl9NX3BhcmFtID09IF9fZDIuX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyBhICViZXRhX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlYmV0YV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBfX2dudV9jeHg6OmJldGFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICViZXRhX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWJldGFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBfX2dudV9jeHg6OmJldGFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBiZXRhIGRpc3RyaWJ1dGlvbnMgYXJlIGRpZmZlcmVudC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19nbnVfY3h4OjpiZXRhX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBfX2dudV9jeHg6OmJldGFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBtdWx0aS12YXJpYXRlIG5vcm1hbCBjb250aW51b3VzIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbm9ybWFsIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb24gaXMKKyAgICogQGZbCisgICAqICAgICBwKFxvdmVycmlnaHRhcnJvd3t4fXxcb3ZlcnJpZ2h0YXJyb3d7XG11IH0sXFNpZ21hKSA9CisgICAqICAgICAgIFxmcmFjezF9e1xzcXJ0eygyXHBpIClea1xkZXQoXFNpZ21hKSl9fQorICAgKiAgICAgICBlXnstXGZyYWN7MX17Mn0oXG92ZXJyaWdodGFycm93e3h9LVxvdmVycmlnaHRhcnJvd3tcbXV9KV5cdGV4dHtUfQorICAgKiAgICAgICAgICBcU2lnbWEgXnstMX0oXG92ZXJyaWdodGFycm93e3h9LVxvdmVycmlnaHRhcnJvd3tcbXV9KX0KKyAgICogQGZdCisgICAqCisgICAqIHdoZXJlIEBmJFxvdmVycmlnaHRhcnJvd3t4fUBmJCBhbmQgQGYkXG92ZXJyaWdodGFycm93e1xtdX1AZiQgYXJlCisgICAqIHZlY3RvcnMgb2YgZGltZW5zaW9uIEBmJGtAZiQgYW5kIEBmJFxTaWdtYUBmJCBpcyB0aGUgY292YXJpYW5jZQorICAgKiBtYXRyaXggKHdoaWNoIG11c3QgYmUgcG9zaXRpdmUtZGVmaW5pdGUpLgorICAgKi8KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0RpbWVuLCB0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3Mgbm9ybWFsX212X2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9EaW1lbiAhPSAwLCAiZGltZW5zaW9uIGlzIHplcm8iKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgc3RkOjphcnJheTxfUmVhbFR5cGUsIF9EaW1lbj4gcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBjbGFzcyBwYXJhbV90eXBlCisgICAgICB7CisJc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX01fdF9zaXplID0gX0RpbWVuICogKF9EaW1lbiArIDEpIC8gMjsKKworICAgICAgcHVibGljOgorCXR5cGVkZWYgbm9ybWFsX212X2Rpc3RyaWJ1dGlvbjxfRGltZW4sIF9SZWFsVHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisJZnJpZW5kIGNsYXNzIG5vcm1hbF9tdl9kaXN0cmlidXRpb248X0RpbWVuLCBfUmVhbFR5cGU+OworCisJcGFyYW1fdHlwZSgpCisJeworCSAgc3RkOjpmaWxsKF9NX21lYW4uYmVnaW4oKSwgX01fbWVhbi5lbmQoKSwgX1JlYWxUeXBlKDApKTsKKwkgIGF1dG8gX19pdCA9IF9NX3QuYmVnaW4oKTsKKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9EaW1lbjsgKytfX2kpCisJICAgIHsKKwkgICAgICBzdGQ6OmZpbGxfbihfX2l0LCBfX2ksIF9SZWFsVHlwZSgwKSk7CisJICAgICAgX19pdCArPSBfX2k7CisJICAgICAgKl9faXQrKyA9IF9SZWFsVHlwZSgxKTsKKwkgICAgfQorCX0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMj4KKwkgIHBhcmFtX3R5cGUoX0ZvcndhcmRJdGVyYXRvcjEgX19tZWFuYmVnaW4sCisJCSAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19tZWFuZW5kLAorCQkgICAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fdmFyY292YmVnaW4sCisJCSAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX192YXJjb3ZlbmQpCisJeworCSAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IxPikKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfRm9yd2FyZEl0ZXJhdG9yQ29uY2VwdDwKKwkJCQkgICAgICBfRm9yd2FyZEl0ZXJhdG9yMj4pCisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoc3RkOjpkaXN0YW5jZShfX21lYW5iZWdpbiwgX19tZWFuZW5kKQorCQkJCTw9IF9EaW1lbik7CisJICBjb25zdCBhdXRvIF9fZGlzdCA9IHN0ZDo6ZGlzdGFuY2UoX192YXJjb3ZiZWdpbiwgX192YXJjb3ZlbmQpOworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fZGlzdCA9PSBfRGltZW4gKiBfRGltZW4KKwkJCQl8fCBfX2Rpc3QgPT0gX0RpbWVuICogKF9EaW1lbiArIDEpIC8gMgorCQkJCXx8IF9fZGlzdCA9PSBfRGltZW4pOworCisJICBpZiAoX19kaXN0ID09IF9EaW1lbiAqIF9EaW1lbikKKwkgICAgX01faW5pdF9mdWxsKF9fbWVhbmJlZ2luLCBfX21lYW5lbmQsIF9fdmFyY292YmVnaW4sIF9fdmFyY292ZW5kKTsKKwkgIGVsc2UgaWYgKF9fZGlzdCA9PSBfRGltZW4gKiAoX0RpbWVuICsgMSkgLyAyKQorCSAgICBfTV9pbml0X2xvd2VyKF9fbWVhbmJlZ2luLCBfX21lYW5lbmQsIF9fdmFyY292YmVnaW4sIF9fdmFyY292ZW5kKTsKKwkgIGVsc2UKKwkgICAgX01faW5pdF9kaWFnb25hbChfX21lYW5iZWdpbiwgX19tZWFuZW5kLAorCQkJICAgICBfX3ZhcmNvdmJlZ2luLCBfX3ZhcmNvdmVuZCk7CisJfQorCisJcGFyYW1fdHlwZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX21lYW4sCisJCSAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfUmVhbFR5cGU+IF9fdmFyY292KQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX21lYW4uc2l6ZSgpIDw9IF9EaW1lbik7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX192YXJjb3Yuc2l6ZSgpID09IF9EaW1lbiAqIF9EaW1lbgorCQkJCXx8IF9fdmFyY292LnNpemUoKSA9PSBfRGltZW4gKiAoX0RpbWVuICsgMSkgLyAyCisJCQkJfHwgX192YXJjb3Yuc2l6ZSgpID09IF9EaW1lbik7CisKKwkgIGlmIChfX3ZhcmNvdi5zaXplKCkgPT0gX0RpbWVuICogX0RpbWVuKQorCSAgICBfTV9pbml0X2Z1bGwoX19tZWFuLmJlZ2luKCksIF9fbWVhbi5lbmQoKSwKKwkJCSBfX3ZhcmNvdi5iZWdpbigpLCBfX3ZhcmNvdi5lbmQoKSk7CisJICBlbHNlIGlmIChfX3ZhcmNvdi5zaXplKCkgPT0gX0RpbWVuICogKF9EaW1lbiArIDEpIC8gMikKKwkgICAgX01faW5pdF9sb3dlcihfX21lYW4uYmVnaW4oKSwgX19tZWFuLmVuZCgpLAorCQkJICBfX3ZhcmNvdi5iZWdpbigpLCBfX3ZhcmNvdi5lbmQoKSk7CisJICBlbHNlCisJICAgIF9NX2luaXRfZGlhZ29uYWwoX19tZWFuLmJlZ2luKCksIF9fbWVhbi5lbmQoKSwKKwkJCSAgICAgX192YXJjb3YuYmVnaW4oKSwgX192YXJjb3YuZW5kKCkpOworCX0KKworCXN0ZDo6YXJyYXk8X1JlYWxUeXBlLCBfRGltZW4+CisJbWVhbigpIGNvbnN0CisJeyByZXR1cm4gX01fbWVhbjsgfQorCisJc3RkOjphcnJheTxfUmVhbFR5cGUsIF9NX3Rfc2l6ZT4KKwl2YXJjb3YoKSBjb25zdAorCXsgcmV0dXJuIF9NX3Q7IH0KKworCWZyaWVuZCBib29sCisJb3BlcmF0b3I9PShjb25zdCBwYXJhbV90eXBlJiBfX3AxLCBjb25zdCBwYXJhbV90eXBlJiBfX3AyKQorCXsgcmV0dXJuIF9fcDEuX01fbWVhbiA9PSBfX3AyLl9NX21lYW4gJiYgX19wMS5fTV90ID09IF9fcDIuX01fdDsgfQorCisgICAgICBwcml2YXRlOgorCXRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4KKwkgIHZvaWQgX01faW5pdF9mdWxsKF9JbnB1dEl0ZXJhdG9yMSBfX21lYW5iZWdpbiwKKwkJCSAgICBfSW5wdXRJdGVyYXRvcjEgX19tZWFuZW5kLAorCQkJICAgIF9JbnB1dEl0ZXJhdG9yMiBfX3ZhcmNvdmJlZ2luLAorCQkJICAgIF9JbnB1dEl0ZXJhdG9yMiBfX3ZhcmNvdmVuZCk7CisJdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyPgorCSAgdm9pZCBfTV9pbml0X2xvd2VyKF9JbnB1dEl0ZXJhdG9yMSBfX21lYW5iZWdpbiwKKwkJCSAgICAgX0lucHV0SXRlcmF0b3IxIF9fbWVhbmVuZCwKKwkJCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fdmFyY292YmVnaW4sCisJCQkgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX3ZhcmNvdmVuZCk7CisJdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyPgorCSAgdm9pZCBfTV9pbml0X2RpYWdvbmFsKF9JbnB1dEl0ZXJhdG9yMSBfX21lYW5iZWdpbiwKKwkJCQlfSW5wdXRJdGVyYXRvcjEgX19tZWFuZW5kLAorCQkJCV9JbnB1dEl0ZXJhdG9yMiBfX3ZhcmJlZ2luLAorCQkJCV9JbnB1dEl0ZXJhdG9yMiBfX3ZhcmVuZCk7CisKKwlzdGQ6OmFycmF5PF9SZWFsVHlwZSwgX0RpbWVuPiBfTV9tZWFuOworCXN0ZDo6YXJyYXk8X1JlYWxUeXBlLCBfTV90X3NpemU+IF9NX3Q7CisgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgbm9ybWFsX212X2Rpc3RyaWJ1dGlvbigpCisgICAgICA6IF9NX3BhcmFtKCksIF9NX25kKCkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjI+CisJbm9ybWFsX212X2Rpc3RyaWJ1dGlvbihfRm9yd2FyZEl0ZXJhdG9yMSBfX21lYW5iZWdpbiwKKwkJCSAgICAgICBfRm9yd2FyZEl0ZXJhdG9yMSBfX21lYW5lbmQsCisJCQkgICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX192YXJjb3ZiZWdpbiwKKwkJCSAgICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX3ZhcmNvdmVuZCkKKwk6IF9NX3BhcmFtKF9fbWVhbmJlZ2luLCBfX21lYW5lbmQsIF9fdmFyY292YmVnaW4sIF9fdmFyY292ZW5kKSwKKwkgIF9NX25kKCkKKwl7IH0KKworICAgICAgbm9ybWFsX212X2Rpc3RyaWJ1dGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1JlYWxUeXBlPiBfX21lYW4sCisJCQkgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfUmVhbFR5cGU+IF9fdmFyY292KQorICAgICAgOiBfTV9wYXJhbShfX21lYW4sIF9fdmFyY292KSwgX01fbmQoKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBub3JtYWxfbXZfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKSwgX01fbmQoKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IF9NX25kLnJlc2V0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgbWVhbiBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWVhbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5tZWFuKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgY29tcGFjdCBmb3JtIG9mIHRoZSB2YXJpYW5jZS9jb3ZhcmlhbmNlCisgICAgICAgKiBtYXRyaXggb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgc3RkOjphcnJheTxfUmVhbFR5cGUsIF9EaW1lbiAqIChfRGltZW4gKyAxKSAvIDI+CisgICAgICB2YXJjb3YoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0udmFyY292KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXN1bHRfdHlwZSBfX3JlczsKKwlfX3Jlcy5maWxsKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bG93ZXN0KCkpOworCXJldHVybiBfX3JlczsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmVzdWx0X3R5cGUgX19yZXM7CisJX19yZXMuZmlsbChzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heCgpKTsKKwlyZXR1cm4gX19yZXM7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHJldHVybiB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgcmV0dXJuIHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBtdWx0aS12YXJpYW50IG5vcm1hbCBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQKKyAgICAgICAqICAgICAgICBiZSBnZW5lcmF0ZWQgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxzaXplX3QgX0RpbWVuMSwgdHlwZW5hbWUgX1JlYWxUeXBlMT4KKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QKKwkJICAgX19nbnVfY3h4Ojpub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbjEsIF9SZWFsVHlwZTE+JgorCQkgICBfX2QxLAorCQkgICBjb25zdAorCQkgICBfX2dudV9jeHg6Om5vcm1hbF9tdl9kaXN0cmlidXRpb248X0RpbWVuMSwgX1JlYWxUeXBlMT4mCisJCSAgIF9fZDIpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJW5vcm1hbF9tdl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJW5vcm1hbF9tdl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8c2l6ZV90IF9EaW1lbjEsIHR5cGVuYW1lIF9SZWFsVHlwZTEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QKKwkJICAgX19nbnVfY3h4Ojpub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbjEsIF9SZWFsVHlwZTE+JgorCQkgICBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVub3JtYWxfbXZfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlbm9ybWFsX212X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3IKKyAgICAgICAqICAgICAgICAgIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxzaXplX3QgX0RpbWVuMSwgdHlwZW5hbWUgX1JlYWxUeXBlMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBfX2dudV9jeHg6Om5vcm1hbF9tdl9kaXN0cmlidXRpb248X0RpbWVuMSwgX1JlYWxUeXBlMT4mCisJCSAgIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICAgIHN0ZDo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+IF9NX25kOworICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIG11bHRpLXZhcmlhdGUgbm9ybWFsIGRpc3RyaWJ1dGlvbnMgYXJlCisgICAqIGRpZmZlcmVudC4KKyAgICovCisgIHRlbXBsYXRlPHNpemVfdCBfRGltZW4sIHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19nbnVfY3h4Ojpub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPiYKKwkgICAgICAgX19kMSwKKwkgICAgICAgY29uc3QgX19nbnVfY3h4Ojpub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPiYKKwkgICAgICAgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBSaWNlIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBSaWNlIHByb2JhYmlsaXR5IGRlbnNpdHkgZnVuY3Rpb24gaXMKKyAgICogQGZbCisgICAqICAgICBwKHh8XG51LFxzaWdtYSkgPSBcZnJhY3t4fXtcc2lnbWFeMn0KKyAgICogICAgICAgICAgICAgICAgICAgICAgIFxleHBcbGVmdCgtXGZyYWN7eF4yK1xudV4yfXsyXHNpZ21hXjJ9XHJpZ2h0KQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgSV8wXGxlZnQoXGZyYWN7eCBcbnV9e1xzaWdtYV4yfVxyaWdodCkKKyAgICogQGZdCisgICAqIHdoZXJlIEBmJElfMCh6KUBmJCBpcyB0aGUgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kCisgICAqIG9mIG9yZGVyIDAgYW5kIEBmJFxudSA+PSAwQGYkIGFuZCBAZiRcc2lnbWEgPiAwQGYkLgorICAgKgorICAgKiA8dGFibGUgYm9yZGVyPTEgY2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MD4KKyAgICogPGNhcHRpb24gYWxpZ249dG9wPkRpc3RyaWJ1dGlvbiBTdGF0aXN0aWNzPC9jYXB0aW9uPgorICAgKiA8dHI+PHRkPk1lYW48L3RkPjx0ZD5AZiRcc3FydHtccGkvMn1MX3sxLzJ9KC1cbnVeMi8yXHNpZ21hXjIpQGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlZhcmlhbmNlPC90ZD48dGQ+QGYkMlxzaWdtYV4yICsgXG51XjIKKyAgICogICAgICAgICAgICAgICAgICAgKyAoXHBpXHNpZ21hXjIvMilMXjJfezEvMn0oLVxudV4yLzJcc2lnbWFeMilAZiQ8L3RkPjwvdHI+CisgICAqIDx0cj48dGQ+UmFuZ2U8L3RkPjx0ZD5AZiRbMCwgXGluZnR5KUBmJDwvdGQ+PC90cj4KKyAgICogPC90YWJsZT4KKyAgICogd2hlcmUgQGYkTF97MS8yfSh4KUBmJCBpcyB0aGUgTGFndWVycmUgcG9seW5vbWlhbCBvZiBvcmRlciAxLzIuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MKKyAgICByaWNlX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgcmljZV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJcGFyYW1fdHlwZShyZXN1bHRfdHlwZSBfX251X3ZhbCA9IHJlc3VsdF90eXBlKDApLAorCQkgICByZXN1bHRfdHlwZSBfX3NpZ21hX3ZhbCA9IHJlc3VsdF90eXBlKDEpKQorCTogX01fbnUoX19udV92YWwpLCBfTV9zaWdtYShfX3NpZ21hX3ZhbCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fbnUgPj0gcmVzdWx0X3R5cGUoMCkpOworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3NpZ21hID4gcmVzdWx0X3R5cGUoMCkpOworCX0KKworCXJlc3VsdF90eXBlCisJbnUoKSBjb25zdAorCXsgcmV0dXJuIF9NX251OyB9CisKKwlyZXN1bHRfdHlwZQorCXNpZ21hKCkgY29uc3QKKwl7IHJldHVybiBfTV9zaWdtYTsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9udSA9PSBfX3AyLl9NX251CisJICAgICAgJiYgX19wMS5fTV9zaWdtYSA9PSBfX3AyLl9NX3NpZ21hOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZCBfTV9pbml0aWFsaXplKCk7CisKKwlyZXN1bHRfdHlwZSBfTV9udTsKKwlyZXN1bHRfdHlwZSBfTV9zaWdtYTsKKyAgICAgIH07CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdG9ycy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHJpY2VfZGlzdHJpYnV0aW9uKHJlc3VsdF90eXBlIF9fbnVfdmFsID0gcmVzdWx0X3R5cGUoMCksCisJCQlyZXN1bHRfdHlwZSBfX3NpZ21hX3ZhbCA9IHJlc3VsdF90eXBlKDEpKQorICAgICAgOiBfTV9wYXJhbShfX251X3ZhbCwgX19zaWdtYV92YWwpLAorCV9NX25keChfX251X3ZhbCwgX19zaWdtYV92YWwpLAorCV9NX25keShyZXN1bHRfdHlwZSgwKSwgX19zaWdtYV92YWwpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHJpY2VfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKSwKKwlfTV9uZHgoX19wLm51KCksIF9fcC5zaWdtYSgpKSwKKwlfTV9uZHkocmVzdWx0X3R5cGUoMCksIF9fcC5zaWdtYSgpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7CisJX01fbmR4LnJlc2V0KCk7CisJX01fbmR5LnJlc2V0KCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbnUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ubnUoKTsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgc2lnbWEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uc2lnbWEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeworCSAgcmVzdWx0X3R5cGUgX194ID0gdGhpcy0+X01fbmR4KF9fdXJuZyk7CisJICByZXN1bHRfdHlwZSBfX3kgPSB0aGlzLT5fTV9uZHkoX191cm5nKTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJICByZXR1cm4gc3RkOjpoeXBvdChfX3gsIF9feSk7CisjZWxzZQorCSAgcmV0dXJuIHN0ZDo6c3FydChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOworI2VuZGlmCisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsKKwkgIHR5cGVuYW1lIHN0ZDo6bm9ybWFsX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT46OnBhcmFtX3R5cGUKKwkgICAgX19weChfX3AubnUoKSwgX19wLnNpZ21hKCkpLCBfX3B5KHJlc3VsdF90eXBlKDApLCBfX3Auc2lnbWEoKSk7CisJICByZXN1bHRfdHlwZSBfX3ggPSB0aGlzLT5fTV9uZHgoX19weCwgX191cm5nKTsKKwkgIHJlc3VsdF90eXBlIF9feSA9IHRoaXMtPl9NX25keShfX3B5LCBfX3VybmcpOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwkgIHJldHVybiBzdGQ6Omh5cG90KF9feCwgX195KTsKKyNlbHNlCisJICByZXR1cm4gc3RkOjpzcXJ0KF9feCAqIF9feCArIF9feSAqIF9feSk7CisjZW5kaWYKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHRoaXMtPl9fZ2VuZXJhdGUoX19mLCBfX3QsIF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUocmVzdWx0X3R5cGUqIF9fZiwgcmVzdWx0X3R5cGUqIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIFJpY2UgZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgICAgKiAgICAgICAgdGhlIHNhbWUgcGFyYW1ldGVycyBhbmQgdGhlIHNlcXVlbmNlcyB0aGF0IHdvdWxkCisgICAgICAgKiAgICAgICAgYmUgZ2VuZXJhdGVkIGFyZSBlcXVhbC4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgcmljZV9kaXN0cmlidXRpb24mIF9fZDEsCisJCSBjb25zdCByaWNlX2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgICAgIHsgcmV0dXJuIChfX2QxLl9NX3BhcmFtID09IF9fZDIuX01fcGFyYW0KKwkJJiYgX19kMS5fTV9uZHggPT0gX19kMi5fTV9uZHgKKwkJJiYgX19kMS5fTV9uZHkgPT0gX19kMi5fTV9uZHkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlcmljZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXJpY2VfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGNvbnN0IHJpY2VfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJXJpY2VfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCBBICVyaWNlX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIHJpY2VfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKworICAgICAgc3RkOjpub3JtYWxfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfTV9uZHg7CisgICAgICBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9NX25keTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIFJpY2UgZGlzdHJpYnV0aW9ucyBhcmUgbm90IGVxdWFsLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgcmljZV9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9fZDEsCisJICAgICAgIGNvbnN0IHJpY2VfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIE5ha2FnYW1pIGNvbnRpbnVvdXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBOYWthZ2FtaSBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzCisgICAqIEBmWworICAgKiAgICAgcCh4fFxtdSxcb21lZ2EpID0gXGZyYWN7MlxtdV5cbXV9e1xHYW1tYShcbXUpXG9tZWdhXlxtdX0KKyAgICogICAgICAgICAgICAgICAgICAgICAgIHheezJcbXUtMX1lXnstXG11IHggLyBcb21lZ2F9CisgICAqIEBmXQorICAgKiB3aGVyZSBAZiRcR2FtbWEoeilAZiQgaXMgdGhlIGdhbW1hIGZ1bmN0aW9uIGFuZCBAZiRcbXUgPj0gMC41QGYkCisgICAqIGFuZCBAZiRcb21lZ2EgPiAwQGYkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzCisgICAgbmFrYWdhbWlfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlwYXJhbV90eXBlKHJlc3VsdF90eXBlIF9fbXVfdmFsID0gcmVzdWx0X3R5cGUoMSksCisJCSAgIHJlc3VsdF90eXBlIF9fb21lZ2FfdmFsID0gcmVzdWx0X3R5cGUoMSkpCisJOiBfTV9tdShfX211X3ZhbCksIF9NX29tZWdhKF9fb21lZ2FfdmFsKQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9tdSA+PSByZXN1bHRfdHlwZSgwLjVMKSk7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fb21lZ2EgPiByZXN1bHRfdHlwZSgwKSk7CisJfQorCisJcmVzdWx0X3R5cGUKKwltdSgpIGNvbnN0CisJeyByZXR1cm4gX01fbXU7IH0KKworCXJlc3VsdF90eXBlCisJb21lZ2EoKSBjb25zdAorCXsgcmV0dXJuIF9NX29tZWdhOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX211ID09IF9fcDIuX01fbXUKKwkgICAgICAmJiBfX3AxLl9NX29tZWdhID09IF9fcDIuX01fb21lZ2E7IH0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkIF9NX2luaXRpYWxpemUoKTsKKworCXJlc3VsdF90eXBlIF9NX211OworCXJlc3VsdF90eXBlIF9NX29tZWdhOworICAgICAgfTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0b3JzLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbmFrYWdhbWlfZGlzdHJpYnV0aW9uKHJlc3VsdF90eXBlIF9fbXVfdmFsID0gcmVzdWx0X3R5cGUoMSksCisJCQkgICAgcmVzdWx0X3R5cGUgX19vbWVnYV92YWwgPSByZXN1bHRfdHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19tdV92YWwsIF9fb21lZ2FfdmFsKSwKKwlfTV9nZChfX211X3ZhbCwgX19vbWVnYV92YWwgLyBfX211X3ZhbCkKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgbmFrYWdhbWlfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKSwKKwlfTV9nZChfX3AubXUoKSwgX19wLm9tZWdhKCkgLyBfX3AubXUoKSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeyBfTV9nZC5yZXNldCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbXUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ubXUoKTsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb21lZ2EoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ub21lZ2EoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiByZXN1bHRfdHlwZSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZW5lcmF0aW5nIGZ1bmN0aW9ucy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyByZXR1cm4gc3RkOjpzcXJ0KHRoaXMtPl9NX2dkKF9fdXJuZykpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeworCSAgdHlwZW5hbWUgc3RkOjpnYW1tYV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+OjpwYXJhbV90eXBlCisJICAgIF9fcGcoX19wLm11KCksIF9fcC5vbWVnYSgpIC8gX19wLm11KCkpOworCSAgcmV0dXJuIHN0ZDo6c3FydCh0aGlzLT5fTV9nZChfX3BnLCBfX3VybmcpKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHRoaXMtPl9fZ2VuZXJhdGUoX19mLCBfX3QsIF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUocmVzdWx0X3R5cGUqIF9fZiwgcmVzdWx0X3R5cGUqIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIE5ha2FnYW1pIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZAorICAgICAgICogICAgICAgIGJlIGdlbmVyYXRlZCBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkJIGNvbnN0IG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgICAgIHsgcmV0dXJuIChfX2QxLl9NX3BhcmFtID09IF9fZDIuX01fcGFyYW0KKwkJJiYgX19kMS5fTV9nZCA9PSBfX2QyLl9NX2dkKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJW5ha2FnYW1pX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlbmFrYWdhbWlfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGNvbnN0IG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVuYWthZ2FtaV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194IEEgJW5ha2FnYW1pX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisKKyAgICAgIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfTV9nZDsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIE5ha2FnYW1pIGRpc3RyaWJ1dGlvbnMgYXJlIG5vdCBlcXVhbC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbmFrYWdhbWlfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIFBhcmV0byBjb250aW51b3VzIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgUGFyZXRvIGN1bXVsYXRpdmUgcHJvYmFiaWxpdHkgZnVuY3Rpb24gaXMKKyAgICogQGZbCisgICAqICAgICBQKHh8XGFscGhhLFxtdSkgPSAxIC0gXGxlZnQoXGZyYWN7XG11fXt4fVxyaWdodCleXGFscGhhCisgICAqIEBmXQorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIFBhcmV0byBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzCisgICAqIEBmWworICAgKiAgICAgcCh4fFxhbHBoYSxcbXUpID0gXGZyYWN7XGFscGhhICsgMX17XG11fQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgXGxlZnQoXGZyYWN7XG11fXt4fVxyaWdodClee1xhbHBoYSArIDF9CisgICAqIEBmXQorICAgKiB3aGVyZSBAZiR4ID49IFxtdUBmJCBhbmQgQGYkXG11ID4gMEBmJCwgQGYkXGFscGhhID4gMEBmJC4KKyAgICoKKyAgICogPHRhYmxlIGJvcmRlcj0xIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTA+CisgICAqIDxjYXB0aW9uIGFsaWduPXRvcD5EaXN0cmlidXRpb24gU3RhdGlzdGljczwvY2FwdGlvbj4KKyAgICogPHRyPjx0ZD5NZWFuPC90ZD48dGQ+QGYkXGFscGhhIFxtdSAvIChcYWxwaGEgLSAxKUBmJAorICAgKiAgICAgICAgICAgICAgZm9yIEBmJFxhbHBoYSA+IDFAZiQ8L3RkPjwvdHI+CisgICAqIDx0cj48dGQ+VmFyaWFuY2U8L3RkPjx0ZD5AZiRcYWxwaGEgXG11XjIgLyBbKFxhbHBoYSAtIDEpXjIoXGFscGhhIC0gMildQGYkCisgICAqICAgICAgICAgICAgICBmb3IgQGYkXGFscGhhID4gMkBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5SYW5nZTwvdGQ+PHRkPkBmJFtcbXUsIFxpbmZ0eSlAZiQ8L3RkPjwvdHI+CisgICAqIDwvdGFibGU+CisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MKKyAgICBwYXJldG9fZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIHBhcmV0b19kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJcGFyYW1fdHlwZShyZXN1bHRfdHlwZSBfX2FscGhhX3ZhbCA9IHJlc3VsdF90eXBlKDEpLAorCQkgICByZXN1bHRfdHlwZSBfX211X3ZhbCA9IHJlc3VsdF90eXBlKDEpKQorCTogX01fYWxwaGEoX19hbHBoYV92YWwpLCBfTV9tdShfX211X3ZhbCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fYWxwaGEgPiByZXN1bHRfdHlwZSgwKSk7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fbXUgPiByZXN1bHRfdHlwZSgwKSk7CisJfQorCisJcmVzdWx0X3R5cGUKKwlhbHBoYSgpIGNvbnN0CisJeyByZXR1cm4gX01fYWxwaGE7IH0KKworCXJlc3VsdF90eXBlCisJbXUoKSBjb25zdAorCXsgcmV0dXJuIF9NX211OyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX2FscGhhID09IF9fcDIuX01fYWxwaGEgJiYgX19wMS5fTV9tdSA9PSBfX3AyLl9NX211OyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZCBfTV9pbml0aWFsaXplKCk7CisKKwlyZXN1bHRfdHlwZSBfTV9hbHBoYTsKKwlyZXN1bHRfdHlwZSBfTV9tdTsKKyAgICAgIH07CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdG9ycy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHBhcmV0b19kaXN0cmlidXRpb24ocmVzdWx0X3R5cGUgX19hbHBoYV92YWwgPSByZXN1bHRfdHlwZSgxKSwKKwkJCSAgcmVzdWx0X3R5cGUgX19tdV92YWwgPSByZXN1bHRfdHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19hbHBoYV92YWwsIF9fbXVfdmFsKSwKKwlfTV91ZCgpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHBhcmV0b19kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLAorCV9NX3VkKCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXNldHMgdGhlIGRpc3RyaWJ1dGlvbiBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzZXQoKQorICAgICAgeworCV9NX3VkLnJlc2V0KCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgYWxwaGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYWxwaGEoKTsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbXUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ubXUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5tdSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7CisJICByZXR1cm4gdGhpcy0+bXUoKSAqIHN0ZDo6cG93KHRoaXMtPl9NX3VkKF9fdXJuZyksCisJCQkJICAgICAgIC1yZXN1bHRfdHlwZSgxKSAvIHRoaXMtPmFscGhhKCkpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7CisJICByZXR1cm4gX19wLm11KCkgKiBzdGQ6OnBvdyh0aGlzLT5fTV91ZChfX3VybmcpLAorCQkJCQkgICAtcmVzdWx0X3R5cGUoMSkgLyBfX3AuYWxwaGEoKSk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBQYXJldG8gZGlzdHJpYnV0aW9ucyBoYXZlCisgICAgICAgKiAgICAgICAgdGhlIHNhbWUgcGFyYW1ldGVycyBhbmQgdGhlIHNlcXVlbmNlcyB0aGF0IHdvdWxkCisgICAgICAgKiAgICAgICAgYmUgZ2VuZXJhdGVkIGFyZSBlcXVhbC4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgcGFyZXRvX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkJIGNvbnN0IHBhcmV0b19kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiAoX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtCisJCSYmIF9fZDEuX01fdWQgPT0gX19kMi5fTV91ZCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW5zZXJ0cyBhICVwYXJldG9fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVwYXJldG9fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGNvbnN0IHBhcmV0b19kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRXh0cmFjdHMgYSAlcGFyZXRvX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggQSAlcGFyZXRvX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIHBhcmV0b19kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mKTsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZV9pbXBsKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCQljb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICBwYXJhbV90eXBlIF9NX3BhcmFtOworCisgICAgICBzdGQ6OnVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IF9NX3VkOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gUGFyZXRvIGRpc3RyaWJ1dGlvbnMgYXJlIG5vdCBlcXVhbC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgcGFyZXRvX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBwYXJldG9fZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKioKKyAgICogQGJyaWVmIEEgSyBjb250aW51b3VzIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgSyBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzCisgICAqIEBmWworICAgKiAgICAgcCh4fFxsYW1iZGEsIFxtdSwgXG51KSA9IFxmcmFjezJ9e3h9CisgICAqICAgICAgICAgICAgIFxsZWZ0KFxmcmFje1xsYW1iZGFcbnUgeH17XG11fVxyaWdodClee1xmcmFje1xsYW1iZGEgKyBcbnV9ezJ9fQorICAgKiAgICAgICAgICAgICBcZnJhY3sxfXtcR2FtbWEoXGxhbWJkYSlcR2FtbWEoXG51KX0KKyAgICogICAgICAgICAgICAgS197XG51IC0gXGxhbWJkYX1cbGVmdCgyXHNxcnR7XGZyYWN7XGxhbWJkYVxudSB4fXtcbXV9fVxyaWdodCkKKyAgICogQGZdCisgICAqIHdoZXJlIEBmJElfMCh6KUBmJCBpcyB0aGUgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZAorICAgKiBvZiBvcmRlciBAZiRcbnUgLSBcbGFtYmRhQGYkIGFuZCBAZiRcbGFtYmRhID4gMEBmJCwgQGYkXG11ID4gMEBmJAorICAgKiBhbmQgQGYkXG51ID4gMEBmJC4KKyAgICoKKyAgICogPHRhYmxlIGJvcmRlcj0xIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTA+CisgICAqIDxjYXB0aW9uIGFsaWduPXRvcD5EaXN0cmlidXRpb24gU3RhdGlzdGljczwvY2FwdGlvbj4KKyAgICogPHRyPjx0ZD5NZWFuPC90ZD48dGQ+QGYkXG11QGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlZhcmlhbmNlPC90ZD48dGQ+QGYkXG11XjJcZnJhY3tcbGFtYmRhICsgXG51ICsgMX17XGxhbWJkYVxudX1AZiQ8L3RkPjwvdHI+CisgICAqIDx0cj48dGQ+UmFuZ2U8L3RkPjx0ZD5AZiRbMCwgXGluZnR5KUBmJDwvdGQ+PC90cj4KKyAgICogPC90YWJsZT4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcworICAgIGtfZGlzdHJpYnV0aW9uCisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PF9SZWFsVHlwZT46OnZhbHVlLAorCQkgICAgInRlbXBsYXRlIGFyZ3VtZW50IG5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUiKTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKi8KKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworICAgICAgLyoqIFBhcmFtZXRlciB0eXBlLiAqLworICAgICAgc3RydWN0IHBhcmFtX3R5cGUKKyAgICAgIHsKKwl0eXBlZGVmIGtfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBkaXN0cmlidXRpb25fdHlwZTsKKworCXBhcmFtX3R5cGUocmVzdWx0X3R5cGUgX19sYW1iZGFfdmFsID0gcmVzdWx0X3R5cGUoMSksCisJCSAgIHJlc3VsdF90eXBlIF9fbXVfdmFsID0gcmVzdWx0X3R5cGUoMSksCisJCSAgIHJlc3VsdF90eXBlIF9fbnVfdmFsID0gcmVzdWx0X3R5cGUoMSkpCisJOiBfTV9sYW1iZGEoX19sYW1iZGFfdmFsKSwgX01fbXUoX19tdV92YWwpLCBfTV9udShfX251X3ZhbCkKKwl7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fbGFtYmRhID4gcmVzdWx0X3R5cGUoMCkpOworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX211ID4gcmVzdWx0X3R5cGUoMCkpOworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX251ID4gcmVzdWx0X3R5cGUoMCkpOworCX0KKworCXJlc3VsdF90eXBlCisJbGFtYmRhKCkgY29uc3QKKwl7IHJldHVybiBfTV9sYW1iZGE7IH0KKworCXJlc3VsdF90eXBlCisJbXUoKSBjb25zdAorCXsgcmV0dXJuIF9NX211OyB9CisKKwlyZXN1bHRfdHlwZQorCW51KCkgY29uc3QKKwl7IHJldHVybiBfTV9udTsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gX19wMS5fTV9sYW1iZGEgPT0gX19wMi5fTV9sYW1iZGEKKwkgICAgICAmJiBfX3AxLl9NX211ID09IF9fcDIuX01fbXUKKwkgICAgICAmJiBfX3AxLl9NX251ID09IF9fcDIuX01fbnU7IH0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkIF9NX2luaXRpYWxpemUoKTsKKworCXJlc3VsdF90eXBlIF9NX2xhbWJkYTsKKwlyZXN1bHRfdHlwZSBfTV9tdTsKKwlyZXN1bHRfdHlwZSBfTV9udTsKKyAgICAgIH07CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdG9ycy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGtfZGlzdHJpYnV0aW9uKHJlc3VsdF90eXBlIF9fbGFtYmRhX3ZhbCA9IHJlc3VsdF90eXBlKDEpLAorCQkgICAgIHJlc3VsdF90eXBlIF9fbXVfdmFsID0gcmVzdWx0X3R5cGUoMSksCisJCSAgICAgcmVzdWx0X3R5cGUgX19udV92YWwgPSByZXN1bHRfdHlwZSgxKSkKKyAgICAgIDogX01fcGFyYW0oX19sYW1iZGFfdmFsLCBfX211X3ZhbCwgX19udV92YWwpLAorCV9NX2dkMShfX2xhbWJkYV92YWwsIHJlc3VsdF90eXBlKDEpIC8gX19sYW1iZGFfdmFsKSwKKwlfTV9nZDIoX19udV92YWwsIF9fbXVfdmFsIC8gX19udV92YWwpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGtfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKSwKKwlfTV9nZDEoX19wLmxhbWJkYSgpLCByZXN1bHRfdHlwZSgxKSAvIF9fcC5sYW1iZGEoKSksCisJX01fZ2QyKF9fcC5udSgpLCBfX3AubXUoKSAvIF9fcC5udSgpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7CisJX01fZ2QxLnJlc2V0KCk7CisJX01fZ2QyLnJlc2V0KCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbGFtYmRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmxhbWJkYSgpOyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtdSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5tdSgpOyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBudSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5udSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiwgY29uc3QgcGFyYW1fdHlwZSYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBLIGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZAorICAgICAgICogICAgICAgIGJlIGdlbmVyYXRlZCBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGtfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3Qga19kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiAoX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtCisJCSYmIF9fZDEuX01fZ2QxID09IF9fZDIuX01fZ2QxCisJCSYmIF9fZDEuX01fZ2QyID09IF9fZDIuX01fZ2QyKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJWtfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVrX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBjb25zdCBrX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBFeHRyYWN0cyBhICVrX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggQSAla19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mLAorCQkgICBrX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkJX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJCWNvbnN0IHBhcmFtX3R5cGUmIF9fcCk7CisKKyAgICAgIHBhcmFtX3R5cGUgX01fcGFyYW07CisKKyAgICAgIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfTV9nZDE7CisgICAgICBzdGQ6OmdhbW1hX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX01fZ2QyOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gSyBkaXN0cmlidXRpb25zIGFyZSBub3QgZXF1YWwuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGtfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDEsCisJICAgICAgIGNvbnN0IGtfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICAgeyByZXR1cm4gIShfX2QxID09IF9fZDIpOyB9CisKKworICAvKioKKyAgICogQGJyaWVmIEFuIGFyY3NpbmUgY29udGludW91cyBkaXN0cmlidXRpb24gZm9yIHJhbmRvbSBudW1iZXJzLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIGFyY3NpbmUgcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpcworICAgKiBAZlsKKyAgICogICAgIHAoeHxhLGIpID0gXGZyYWN7MX17XHBpIFxzcXJ0eyh4IC0gYSkoYiAtIHgpfX0KKyAgICogQGZdCisgICAqIHdoZXJlIEBmJHggPj0gYUBmJCBhbmQgQGYkeCA8PSBiQGYkLgorICAgKgorICAgKiA8dGFibGUgYm9yZGVyPTEgY2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MD4KKyAgICogPGNhcHRpb24gYWxpZ249dG9wPkRpc3RyaWJ1dGlvbiBTdGF0aXN0aWNzPC9jYXB0aW9uPgorICAgKiA8dHI+PHRkPk1lYW48L3RkPjx0ZD5AZiQgKGEgKyBiKSAvIDIgQGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlZhcmlhbmNlPC90ZD48dGQ+QGYkIChiIC0gYSleMiAvIDggQGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlJhbmdlPC90ZD48dGQ+QGYkW2EsIGJdQGYkPC90ZD48L3RyPgorICAgKiA8L3RhYmxlPgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzCisgICAgYXJjc2luZV9kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCXR5cGVkZWYgYXJjc2luZV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+IGRpc3RyaWJ1dGlvbl90eXBlOworCisJcGFyYW1fdHlwZShyZXN1bHRfdHlwZSBfX2EgPSByZXN1bHRfdHlwZSgwKSwKKwkJICAgcmVzdWx0X3R5cGUgX19iID0gcmVzdWx0X3R5cGUoMSkpCisJOiBfTV9hKF9fYSksIF9NX2IoX19iKQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9hIDw9IF9NX2IpOworCX0KKworCXJlc3VsdF90eXBlCisJYSgpIGNvbnN0CisJeyByZXR1cm4gX01fYTsgfQorCisJcmVzdWx0X3R5cGUKKwliKCkgY29uc3QKKwl7IHJldHVybiBfTV9iOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX2EgPT0gX19wMi5fTV9hICYmIF9fcDEuX01fYiA9PSBfX3AyLl9NX2I7IH0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkIF9NX2luaXRpYWxpemUoKTsKKworCXJlc3VsdF90eXBlIF9NX2E7CisJcmVzdWx0X3R5cGUgX01fYjsKKyAgICAgIH07CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdG9ycy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGFyY3NpbmVfZGlzdHJpYnV0aW9uKHJlc3VsdF90eXBlIF9fYSA9IHJlc3VsdF90eXBlKDApLAorCQkJICAgcmVzdWx0X3R5cGUgX19iID0gcmVzdWx0X3R5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fYSwgX19iKSwKKwlfTV91ZCgtMS41NzA3OTYzMjY3OTQ4OTY2MTkyMzEzMjE2OTE2Mzk3NTE0TCwKKwkgICAgICArMS41NzA3OTYzMjY3OTQ4OTY2MTkyMzEzMjE2OTE2Mzk3NTE0TCkKKyAgICAgIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgYXJjc2luZV9kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApLAorCV9NX3VkKC0xLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTRMLAorCSAgICAgICsxLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTRMKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IF9NX3VkLnJlc2V0KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmEoKTsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgYigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5iKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+YSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+YigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7CisJICByZXN1bHRfdHlwZSBfX3ggPSBzdGQ6OnNpbih0aGlzLT5fTV91ZChfX3VybmcpKTsKKwkgIHJldHVybiAoX194ICogKHRoaXMtPmIoKSAtIHRoaXMtPmEoKSkKKwkJICArIHRoaXMtPmEoKSArIHRoaXMtPmIoKSkgLyByZXN1bHRfdHlwZSgyKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeworCSAgcmVzdWx0X3R5cGUgX194ID0gc3RkOjpzaW4odGhpcy0+X01fdWQoX191cm5nKSk7CisJICByZXR1cm4gKF9feCAqIChfX3AuYigpIC0gX19wLmEoKSkKKwkJICArIF9fcC5hKCkgKyBfX3AuYigpKSAvIHJlc3VsdF90eXBlKDIpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZShfX2YsIF9fdCwgX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gYXJjc2luZSBkaXN0cmlidXRpb25zIGhhdmUKKyAgICAgICAqICAgICAgICB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQKKyAgICAgICAqICAgICAgICBiZSBnZW5lcmF0ZWQgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBhcmNzaW5lX2Rpc3RyaWJ1dGlvbiYgX19kMSwKKwkJIGNvbnN0IGFyY3NpbmVfZGlzdHJpYnV0aW9uJiBfX2QyKQorICAgICAgeyByZXR1cm4gKF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbQorCQkmJiBfX2QxLl9NX3VkID09IF9fZDIuX01fdWQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlYXJjc2luZV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWFyY3NpbmVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGNvbnN0IGFyY3NpbmVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWFyY3NpbmVfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCBBICVhcmNzaW5lX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGFyY3NpbmVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKworICAgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPiBfTV91ZDsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIGFyY3NpbmUgZGlzdHJpYnV0aW9ucyBhcmUgbm90IGVxdWFsLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBhcmNzaW5lX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBhcmNzaW5lX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QyKQorICAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCisKKyAgLyoqCisgICAqIEBicmllZiBBIEhveXQgY29udGludW91cyBkaXN0cmlidXRpb24gZm9yIHJhbmRvbSBudW1iZXJzLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIEhveXQgcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpcworICAgKiBAZlsKKyAgICogICAgIHAoeHxxLFxvbWVnYSkgPSBcZnJhY3soMSArIHFeMil4fXtxXG9tZWdhfQorICAgKiAgICAgICAgICAgICAgICAgICAgIFxleHBcbGVmdCgtXGZyYWN7KDEgKyBxXjIpXjIgeF4yfXs0IHFeMiBcb21lZ2F9XHJpZ2h0KQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgSV8wXGxlZnQoXGZyYWN7KDEgLSBxXjQpIHheMn17NCBxXjIgXG9tZWdhfVxyaWdodCkKKyAgICogQGZdCisgICAqIHdoZXJlIEBmJElfMCh6KUBmJCBpcyB0aGUgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kCisgICAqIG9mIG9yZGVyIDAgYW5kIEBmJDAgPCBxIDwgMUBmJC4KKyAgICoKKyAgICogPHRhYmxlIGJvcmRlcj0xIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTA+CisgICAqIDxjYXB0aW9uIGFsaWduPXRvcD5EaXN0cmlidXRpb24gU3RhdGlzdGljczwvY2FwdGlvbj4KKyAgICogPHRyPjx0ZD5NZWFuPC90ZD48dGQ+QGYkIFxzcXJ0e1xmcmFjezJ9e1xwaX19IFxzcXJ0e1xmcmFje1xvbWVnYX17MSArIHFeMn19CisgICAqICAgICAgICAgICAgICAgICAgICAgICBFKDEgLSBxXjIpIEBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5WYXJpYW5jZTwvdGQ+PHRkPkBmJCBcb21lZ2EgXGxlZnQoMSAtIFxmcmFjezJFXjIoMSAtIHFeMil9CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHBpICgxICsgcV4yKX1ccmlnaHQpIEBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5SYW5nZTwvdGQ+PHRkPkBmJFswLCBcaW5mdHkpQGYkPC90ZD48L3RyPgorICAgKiA8L3RhYmxlPgorICAgKiB3aGVyZSBAZiRFKHgpQGYkIGlzIHRoZSBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MKKyAgICBob3l0X2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJdHlwZWRlZiBob3l0X2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gZGlzdHJpYnV0aW9uX3R5cGU7CisKKwlwYXJhbV90eXBlKHJlc3VsdF90eXBlIF9fcSA9IHJlc3VsdF90eXBlKDAuNUwpLAorCQkgICByZXN1bHRfdHlwZSBfX29tZWdhID0gcmVzdWx0X3R5cGUoMSkpCisJOiBfTV9xKF9fcSksIF9NX29tZWdhKF9fb21lZ2EpCisJeworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3EgPiByZXN1bHRfdHlwZSgwKSk7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fcSA8IHJlc3VsdF90eXBlKDEpKTsKKwl9CisKKwlyZXN1bHRfdHlwZQorCXEoKSBjb25zdAorCXsgcmV0dXJuIF9NX3E7IH0KKworCXJlc3VsdF90eXBlCisJb21lZ2EoKSBjb25zdAorCXsgcmV0dXJuIF9NX29tZWdhOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiBfX3AxLl9NX3EgPT0gX19wMi5fTV9xCisJICAgICAgJiYgX19wMS5fTV9vbWVnYSA9PSBfX3AyLl9NX29tZWdhOyB9CisKKyAgICAgIHByaXZhdGU6CisJdm9pZCBfTV9pbml0aWFsaXplKCk7CisKKwlyZXN1bHRfdHlwZSBfTV9xOworCXJlc3VsdF90eXBlIF9NX29tZWdhOworICAgICAgfTsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0b3JzLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgaG95dF9kaXN0cmlidXRpb24ocmVzdWx0X3R5cGUgX19xID0gcmVzdWx0X3R5cGUoMC41TCksCisJCQlyZXN1bHRfdHlwZSBfX29tZWdhID0gcmVzdWx0X3R5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fcSwgX19vbWVnYSksCisJX01fYWQocmVzdWx0X3R5cGUoMC41TCkgKiAocmVzdWx0X3R5cGUoMSkgKyBfX3EgKiBfX3EpLAorCSAgICAgIHJlc3VsdF90eXBlKDAuNUwpICogKHJlc3VsdF90eXBlKDEpICsgX19xICogX19xKQorCQkJCS8gKF9fcSAqIF9fcSkpLAorCV9NX2VkKHJlc3VsdF90eXBlKDEpKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBob3l0X2Rpc3RyaWJ1dGlvbihjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICA6IF9NX3BhcmFtKF9fcCksCisJX01fYWQocmVzdWx0X3R5cGUoMC41TCkgKiAocmVzdWx0X3R5cGUoMSkgKyBfX3AucSgpICogX19wLnEoKSksCisJICAgICAgcmVzdWx0X3R5cGUoMC41TCkgKiAocmVzdWx0X3R5cGUoMSkgKyBfX3AucSgpICogX19wLnEoKSkKKwkJCQkvIChfX3AucSgpICogX19wLnEoKSkpLAorCV9NX2VkKHJlc3VsdF90eXBlKDEpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7CisJX01fYWQucmVzZXQoKTsKKwlfTV9lZC5yZXNldCgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIHEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ucSgpOyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvbWVnYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5vbWVnYSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcGFyYW1fdHlwZQorICAgICAgcGFyYW0oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU2V0cyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogQHBhcmFtIF9fcGFyYW0gVGhlIG5ldyBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHBhcmFtKGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7IF9NX3BhcmFtID0gX19wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBncmVhdGVzdCBsb3dlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHJlc3VsdF90eXBlKDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdlbmVyYXRpbmcgZnVuY3Rpb25zLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZyk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisJeyB0aGlzLT5fX2dlbmVyYXRlKF9fZiwgX190LCBfX3VybmcsIF9NX3BhcmFtKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKHJlc3VsdF90eXBlKiBfX2YsIHJlc3VsdF90eXBlKiBfX3QsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7IHRoaXMtPl9fZ2VuZXJhdGVfaW1wbChfX2YsIF9fdCwgX191cm5nLCBfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBIb3l0IGRpc3RyaWJ1dGlvbnMgaGF2ZQorICAgICAgICogICAgICAgIHRoZSBzYW1lIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZXMgdGhhdCB3b3VsZAorICAgICAgICogICAgICAgIGJlIGdlbmVyYXRlZCBhcmUgZXF1YWwuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGhveXRfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3QgaG95dF9kaXN0cmlidXRpb24mIF9fZDIpCisgICAgICB7IHJldHVybiAoX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtCisJCSYmIF9fZDEuX01fYWQgPT0gX19kMi5fTV9hZAorCQkmJiBfX2QxLl9NX2VkID09IF9fZDIuX01fZWQpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluc2VydHMgYSAlaG95dF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWhveXRfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGNvbnN0IGhveXRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJWhveXRfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCBBICVob3l0X2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwlmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisJb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYsCisJCSAgIGhveXRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+Jik7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKworICAgICAgX19nbnVfY3h4OjphcmNzaW5lX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX01fYWQ7CisgICAgICBzdGQ6OmV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbjxyZXN1bHRfdHlwZT4gX01fZWQ7CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFJldHVybiB0cnVlIGlmIHR3byBIb3l0IGRpc3RyaWJ1dGlvbnMgYXJlIG5vdCBlcXVhbC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgaG95dF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMSwKKwkgICAgICAgY29uc3QgaG95dF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSB0cmlhbmd1bGFyIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgdHJpYW5ndWxhciBwcm9iYWJpbGl0eSBkZW5zaXR5IGZ1bmN0aW9uIGlzCisgICAqIEBmWworICAgKiAgICAgICAgICAgICAgICAgIC8gMCAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggPCBhCisgICAqICAgICBwKHh8YSxiLGMpID0gfCBcZnJhY3syKHgtYSl9eyhjLWEpKGItYSl9ICBmb3IgYSA8PSB4IDw9IGIKKyAgICogICAgICAgICAgICAgICAgICB8IFxmcmFjezIoYy14KX17KGMtYSkoYy1iKX0gIGZvciBiIDwgeCA8PSBjCisgICAqICAgICAgICAgICAgICAgICAgXCAwICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYyA8IHgKKyAgICogQGZdCisgICAqCisgICAqIDx0YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz0xMCBjZWxsc3BhY2luZz0wPgorICAgKiA8Y2FwdGlvbiBhbGlnbj10b3A+RGlzdHJpYnV0aW9uIFN0YXRpc3RpY3M8L2NhcHRpb24+CisgICAqIDx0cj48dGQ+TWVhbjwvdGQ+PHRkPkBmJCBcZnJhY3thK2IrY317Mn0gQGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlZhcmlhbmNlPC90ZD48dGQ+QGYkIFxmcmFje2FeMitiXjIrY14yLWFiLWFjLWJjfQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezE4fUBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5SYW5nZTwvdGQ+PHRkPkBmJFthLCBjXUBmJDwvdGQ+PC90cj4KKyAgICogPC90YWJsZT4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyB0cmlhbmd1bGFyX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxfUmVhbFR5cGU+Ojp2YWx1ZSwKKwkJICAgICJ0ZW1wbGF0ZSBhcmd1bWVudCBub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHJhbmdlIG9mIHRoZSBkaXN0cmlidXRpb24uICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIC8qKiBQYXJhbWV0ZXIgdHlwZS4gKi8KKyAgICAgIHN0cnVjdCBwYXJhbV90eXBlCisgICAgICB7CisJZnJpZW5kIGNsYXNzIHRyaWFuZ3VsYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT47CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fYSA9IF9SZWFsVHlwZSgwKSwKKwkJICAgX1JlYWxUeXBlIF9fYiA9IF9SZWFsVHlwZSgwLjUpLAorCQkgICBfUmVhbFR5cGUgX19jID0gX1JlYWxUeXBlKDEpKQorCTogX01fYShfX2EpLCBfTV9iKF9fYiksIF9NX2MoX19jKQorCXsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9hIDw9IF9NX2IpOworCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX2IgPD0gX01fYyk7CisJICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fYSA8IF9NX2MpOworCisJICBfTV9yX2FiID0gKF9NX2IgLSBfTV9hKSAvIChfTV9jIC0gX01fYSk7CisJICBfTV9mX2FiX2FjID0gKF9NX2IgLSBfTV9hKSAqIChfTV9jIC0gX01fYSk7CisJICBfTV9mX2JjX2FjID0gKF9NX2MgLSBfTV9iKSAqIChfTV9jIC0gX01fYSk7CisJfQorCisJX1JlYWxUeXBlCisJYSgpIGNvbnN0CisJeyByZXR1cm4gX01fYTsgfQorCisJX1JlYWxUeXBlCisJYigpIGNvbnN0CisJeyByZXR1cm4gX01fYjsgfQorCisJX1JlYWxUeXBlCisJYygpIGNvbnN0CisJeyByZXR1cm4gX01fYzsgfQorCisJZnJpZW5kIGJvb2wKKwlvcGVyYXRvcj09KGNvbnN0IHBhcmFtX3R5cGUmIF9fcDEsIGNvbnN0IHBhcmFtX3R5cGUmIF9fcDIpCisJeyByZXR1cm4gKF9fcDEuX01fYSA9PSBfX3AyLl9NX2EgJiYgX19wMS5fTV9iID09IF9fcDIuX01fYgorCQkgICYmIF9fcDEuX01fYyA9PSBfX3AyLl9NX2MpOyB9CisKKyAgICAgIHByaXZhdGU6CisKKwlfUmVhbFR5cGUgX01fYTsKKwlfUmVhbFR5cGUgX01fYjsKKwlfUmVhbFR5cGUgX01fYzsKKwlfUmVhbFR5cGUgX01fcl9hYjsKKwlfUmVhbFR5cGUgX01fZl9hYl9hYzsKKwlfUmVhbFR5cGUgX01fZl9iY19hYzsKKyAgICAgIH07CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSB0cmlhbmdsZSBkaXN0cmlidXRpb24gd2l0aCBwYXJhbWV0ZXJzCisgICAgICAgKiBAZiQgYSBAZiQsIEBmJCBiIEBmJCBhbmQgQGYkIGMgQGYkLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdHJpYW5ndWxhcl9kaXN0cmlidXRpb24ocmVzdWx0X3R5cGUgX19hID0gcmVzdWx0X3R5cGUoMCksCisJCQkgICAgICByZXN1bHRfdHlwZSBfX2IgPSByZXN1bHRfdHlwZSgwLjUpLAorCQkJICAgICAgcmVzdWx0X3R5cGUgX19jID0gcmVzdWx0X3R5cGUoMSkpCisgICAgICA6IF9NX3BhcmFtKF9fYSwgX19iLCBfX2MpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHRyaWFuZ3VsYXJfZGlzdHJpYnV0aW9uKGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIDogX01fcGFyYW0oX19wKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgQGYkIGEgQGYkIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLmEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBAZiQgYiBAZiQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIGIoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uYigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIEBmJCBjIEBmJCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgYygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbS5jKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBwYXJhbV90eXBlCisgICAgICBwYXJhbSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTZXRzIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBAcGFyYW0gX19wYXJhbSBUaGUgbmV3IHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcGFyYW0oY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsgX01fcGFyYW0gPSBfX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFJldHVybnMgdGhlIGdyZWF0ZXN0IGxvd2VyIGJvdW5kIHZhbHVlIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0uX01fYTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtLl9NX2M7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7CisJICBzdGQ6Ol9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgcmVzdWx0X3R5cGU+CisJICAgIF9fYXVybmcoX191cm5nKTsKKwkgIHJlc3VsdF90eXBlIF9fcm5kID0gX19hdXJuZygpOworCSAgaWYgKF9fcm5kIDw9IF9fcC5fTV9yX2FiKQorCSAgICByZXR1cm4gX19wLmEoKSArIHN0ZDo6c3FydChfX3JuZCAqIF9fcC5fTV9mX2FiX2FjKTsKKwkgIGVsc2UKKwkgICAgcmV0dXJuIF9fcC5jKCkgLSBzdGQ6OnNxcnQoKHJlc3VsdF90eXBlKDEpIC0gX19ybmQpCisJCQkJICAgICAgICogX19wLl9NX2ZfYmNfYWMpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgdGhpcy0+X19nZW5lcmF0ZShfX2YsIF9fdCwgX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKwl2b2lkCisJX19nZW5lcmF0ZShyZXN1bHRfdHlwZSogX19mLCByZXN1bHRfdHlwZSogX190LAorCQkgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisJeyB0aGlzLT5fX2dlbmVyYXRlX2ltcGwoX19mLCBfX3QsIF9fdXJuZywgX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm4gdHJ1ZSBpZiB0d28gdHJpYW5nbGUgZGlzdHJpYnV0aW9ucyBoYXZlIHRoZSBzYW1lCisgICAgICAgKiAgICAgICAgcGFyYW1ldGVycyBhbmQgdGhlIHNlcXVlbmNlcyB0aGF0IHdvdWxkIGJlIGdlbmVyYXRlZAorICAgICAgICogICAgICAgIGFyZSBlcXVhbC4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgdHJpYW5ndWxhcl9kaXN0cmlidXRpb24mIF9fZDEsCisJCSBjb25zdCB0cmlhbmd1bGFyX2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgICAgIHsgcmV0dXJuIF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJXRyaWFuZ3VsYXJfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICV0cmlhbmd1bGFyX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IF9fZ251X2N4eDo6dHJpYW5ndWxhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJXRyaWFuZ3VsYXJfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAldHJpYW5ndWxhcl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisJZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorCW9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIF9fZ251X2N4eDo6dHJpYW5ndWxhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIHRyaWFuZ2xlIGRpc3RyaWJ1dGlvbnMgYXJlIGRpZmZlcmVudC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19nbnVfY3h4Ojp0cmlhbmd1bGFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBfX2dudV9jeHg6OnRyaWFuZ3VsYXJfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9fZDIpCisgICB7IHJldHVybiAhKF9fZDEgPT0gX19kMik7IH0KKworCisgIC8qKgorICAgKiBAYnJpZWYgQSB2b24gTWlzZXMgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSB2b24gTWlzZXMgcHJvYmFiaWxpdHkgZGVuc2l0eSBmdW5jdGlvbiBpcworICAgKiBAZlsKKyAgICogICAgIHAoeHxcbXUsXGthcHBhKSA9IFxmcmFje2Vee1xrYXBwYSBcY29zKHgtXG11KX19CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsyXHBpIElfMChca2FwcGEpfQorICAgKiBAZl0KKyAgICoKKyAgICogVGhlIGdlbmVyYXRpbmcgZnVuY3Rpb25zIHVzZSB0aGUgbWV0aG9kIGFjY29yZGluZyB0bzoKKyAgICoKKyAgICogRC4gSi4gQmVzdCBhbmQgTi4gSS4gRmlzaGVyLCAxOTc5LiAiRWZmaWNpZW50IFNpbXVsYXRpb24gb2YgdGhlCisgICAqIHZvbiBNaXNlcyBEaXN0cmlidXRpb24iLCBKb3VybmFsIG9mIHRoZSBSb3lhbCBTdGF0aXN0aWNhbCBTb2NpZXR5LgorICAgKiBTZXJpZXMgQyAoQXBwbGllZCBTdGF0aXN0aWNzKSwgVm9sLiAyOCwgTm8uIDIsIHBwLiAxNTItMTU3LgorICAgKgorICAgKiA8dGFibGUgYm9yZGVyPTEgY2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MD4KKyAgICogPGNhcHRpb24gYWxpZ249dG9wPkRpc3RyaWJ1dGlvbiBTdGF0aXN0aWNzPC9jYXB0aW9uPgorICAgKiA8dHI+PHRkPk1lYW48L3RkPjx0ZD5AZiQgXG11IEBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5WYXJpYW5jZTwvdGQ+PHRkPkBmJCAxLUlfMShca2FwcGEpL0lfMChca2FwcGEpIEBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5SYW5nZTwvdGQ+PHRkPkBmJFstXHBpLCBccGldQGYkPC90ZD48L3RyPgorICAgKiA8L3RhYmxlPgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIHZvbl9taXNlc19kaXN0cmlidXRpb24KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8X1JlYWxUeXBlPjo6dmFsdWUsCisJCSAgICAidGVtcGxhdGUgYXJndW1lbnQgbm90IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSIpOworCisgICAgcHVibGljOgorICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisgICAgICAvKiogUGFyYW1ldGVyIHR5cGUuICovCisgICAgICBzdHJ1Y3QgcGFyYW1fdHlwZQorICAgICAgeworCWZyaWVuZCBjbGFzcyB2b25fbWlzZXNfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT47CisKKwlleHBsaWNpdAorCXBhcmFtX3R5cGUoX1JlYWxUeXBlIF9fbXUgPSBfUmVhbFR5cGUoMCksCisJCSAgIF9SZWFsVHlwZSBfX2thcHBhID0gX1JlYWxUeXBlKDEpKQorCTogX01fbXUoX19tdSksIF9NX2thcHBhKF9fa2FwcGEpCisJeworCSAgY29uc3QgX1JlYWxUeXBlIF9fcGkgPSBfX2dudV9jeHg6Ol9fbWF0aF9jb25zdGFudHM8X1JlYWxUeXBlPjo6X19waTsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9tdSA+PSAtX19waSAmJiBfTV9tdSA8PSBfX3BpKTsKKwkgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9rYXBwYSA+PSBfUmVhbFR5cGUoMCkpOworCisJICBhdXRvIF9fdGF1ID0gc3RkOjpzcXJ0KF9SZWFsVHlwZSg0KSAqIF9NX2thcHBhICogX01fa2FwcGEKKwkJCQkgKyBfUmVhbFR5cGUoMSkpICsgX1JlYWxUeXBlKDEpOworCSAgYXV0byBfX3JobyA9ICgoX190YXUgLSBzdGQ6OnNxcnQoX1JlYWxUeXBlKDIpICogX190YXUpKQorCQkJLyAoX1JlYWxUeXBlKDIpICogX01fa2FwcGEpKTsKKwkgIF9NX3IgPSAoX1JlYWxUeXBlKDEpICsgX19yaG8gKiBfX3JobykgLyAoX1JlYWxUeXBlKDIpICogX19yaG8pOworCX0KKworCV9SZWFsVHlwZQorCW11KCkgY29uc3QKKwl7IHJldHVybiBfTV9tdTsgfQorCisJX1JlYWxUeXBlCisJa2FwcGEoKSBjb25zdAorCXsgcmV0dXJuIF9NX2thcHBhOyB9CisKKwlmcmllbmQgYm9vbAorCW9wZXJhdG9yPT0oY29uc3QgcGFyYW1fdHlwZSYgX19wMSwgY29uc3QgcGFyYW1fdHlwZSYgX19wMikKKwl7IHJldHVybiAoX19wMS5fTV9tdSA9PSBfX3AyLl9NX211CisJCSAgJiYgX19wMS5fTV9rYXBwYSA9PSBfX3AyLl9NX2thcHBhKTsgfQorCisgICAgICBwcml2YXRlOgorCV9SZWFsVHlwZSBfTV9tdTsKKwlfUmVhbFR5cGUgX01fa2FwcGE7CisJX1JlYWxUeXBlIF9NX3I7CisgICAgICB9OworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgdm9uIE1pc2VzIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMKKyAgICAgICAqIEBmJFxtdUBmJCBhbmQgQGYkXGthcHBhQGYkLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgdm9uX21pc2VzX2Rpc3RyaWJ1dGlvbihyZXN1bHRfdHlwZSBfX211ID0gcmVzdWx0X3R5cGUoMCksCisJCQkgICAgIHJlc3VsdF90eXBlIF9fa2FwcGEgPSByZXN1bHRfdHlwZSgxKSkKKwk6IF9NX3BhcmFtKF9fbXUsIF9fa2FwcGEpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHZvbl9taXNlc19kaXN0cmlidXRpb24oY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgOiBfTV9wYXJhbShfX3ApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBAZiQgXG11IEBmJCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbXUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ubXUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBAZiQgXGthcHBhIEBmJCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAga2FwcGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcGFyYW0ua2FwcGEoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXIgc2V0IG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHBhcmFtX3R5cGUKKyAgICAgIHBhcmFtKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BhcmFtOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNldHMgdGhlIHBhcmFtZXRlciBzZXQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX3BhcmFtIFRoZSBuZXcgcGFyYW1ldGVyIHNldCBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBwYXJhbShjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeyBfTV9wYXJhbSA9IF9fcGFyYW07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJucyB0aGUgZ3JlYXRlc3QgbG93ZXIgYm91bmQgdmFsdWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIC1fX2dudV9jeHg6Ol9fbWF0aF9jb25zdGFudHM8cmVzdWx0X3R5cGU+OjpfX3BpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCB2YWx1ZSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX19nbnVfY3h4OjpfX21hdGhfY29uc3RhbnRzPHJlc3VsdF90eXBlPjo6X19waTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2VuZXJhdGluZyBmdW5jdGlvbnMuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorCXsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCBfTV9wYXJhbSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKwl7CisJICBjb25zdCByZXN1bHRfdHlwZSBfX3BpCisJICAgID0gX19nbnVfY3h4OjpfX21hdGhfY29uc3RhbnRzPHJlc3VsdF90eXBlPjo6X19waTsKKwkgIHN0ZDo6X19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgICAgX19hdXJuZyhfX3VybmcpOworCisJICByZXN1bHRfdHlwZSBfX2Y7CisJICB3aGlsZSAoMSkKKwkgICAgeworCSAgICAgIHJlc3VsdF90eXBlIF9fcm5kID0gc3RkOjpjb3MoX19waSAqIF9fYXVybmcoKSk7CisJICAgICAgX19mID0gKHJlc3VsdF90eXBlKDEpICsgX19wLl9NX3IgKiBfX3JuZCkgLyAoX19wLl9NX3IgKyBfX3JuZCk7CisJICAgICAgcmVzdWx0X3R5cGUgX19jID0gX19wLl9NX2thcHBhICogKF9fcC5fTV9yIC0gX19mKTsKKworCSAgICAgIHJlc3VsdF90eXBlIF9fcm5kMiA9IF9fYXVybmcoKTsKKwkgICAgICBpZiAoX19jICogKHJlc3VsdF90eXBlKDIpIC0gX19jKSA+IF9fcm5kMikKKwkJYnJlYWs7CisJICAgICAgaWYgKHN0ZDo6bG9nKF9fYyAvIF9fcm5kMikgPj0gX19jIC0gcmVzdWx0X3R5cGUoMSkpCisJCWJyZWFrOworCSAgICB9CisKKwkgIHJlc3VsdF90eXBlIF9fcmVzID0gc3RkOjphY29zKF9fZik7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorCSAgX19yZXMgPSBzdGQ6OmNvcHlzaWduKF9fcmVzLCBfX2F1cm5nKCkgLSByZXN1bHRfdHlwZSgwLjUpKTsKKyNlbHNlCisJICBpZiAoX19hdXJuZygpIDwgcmVzdWx0X3R5cGUoMC41KSkKKwkgICAgX19yZXMgPSAtX19yZXM7CisjZW5kaWYKKwkgIF9fcmVzICs9IF9fcC5fTV9tdTsKKwkgIGlmIChfX3JlcyA+IF9fcGkpCisJICAgIF9fcmVzIC09IHJlc3VsdF90eXBlKDIpICogX19waTsKKwkgIGVsc2UgaWYgKF9fcmVzIDwgLV9fcGkpCisJICAgIF9fcmVzICs9IHJlc3VsdF90eXBlKDIpICogX19waTsKKwkgIHJldHVybiBfX3JlczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKwl7IHRoaXMtPl9fZ2VuZXJhdGUoX19mLCBfX3QsIF9fdXJuZywgX01fcGFyYW0pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorCXZvaWQKKwlfX2dlbmVyYXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19mLCBfRm9yd2FyZEl0ZXJhdG9yIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGUocmVzdWx0X3R5cGUqIF9fZiwgcmVzdWx0X3R5cGUqIF9fdCwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorCXsgdGhpcy0+X19nZW5lcmF0ZV9pbXBsKF9fZiwgX190LCBfX3VybmcsIF9fcCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIHZvbiBNaXNlcyBkaXN0cmlidXRpb25zIGhhdmUgdGhlIHNhbWUKKyAgICAgICAqICAgICAgICBwYXJhbWV0ZXJzIGFuZCB0aGUgc2VxdWVuY2VzIHRoYXQgd291bGQgYmUgZ2VuZXJhdGVkCisgICAgICAgKiAgICAgICAgYXJlIGVxdWFsLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCB2b25fbWlzZXNfZGlzdHJpYnV0aW9uJiBfX2QxLAorCQkgY29uc3Qgdm9uX21pc2VzX2Rpc3RyaWJ1dGlvbiYgX19kMikKKyAgICAgIHsgcmV0dXJuIF9fZDEuX01fcGFyYW0gPT0gX19kMi5fTV9wYXJhbTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbnNlcnRzIGEgJXZvbl9taXNlc19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXZvbl9taXNlc19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBfX2dudV9jeHg6OnZvbl9taXNlc19kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEV4dHJhY3RzIGEgJXZvbl9taXNlc19kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICV2b25fbWlzZXNfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorCWZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBfX2dudV9jeHg6OnZvbl9taXNlc19kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisJdm9pZAorCV9fZ2VuZXJhdGVfaW1wbChfRm9yd2FyZEl0ZXJhdG9yIF9fZiwgX0ZvcndhcmRJdGVyYXRvciBfX3QsCisJCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkJY29uc3QgcGFyYW1fdHlwZSYgX19wKTsKKworICAgICAgcGFyYW1fdHlwZSBfTV9wYXJhbTsKKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgUmV0dXJuIHRydWUgaWYgdHdvIHZvbiBNaXNlcyBkaXN0cmlidXRpb25zIGFyZSBkaWZmZXJlbnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9fZ251X2N4eDo6dm9uX21pc2VzX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX2QxLAorCSAgICAgICBjb25zdCBfX2dudV9jeHg6OnZvbl9taXNlc19kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX19kMikKKyAgIHsgcmV0dXJuICEoX19kMSA9PSBfX2QyKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIF9fZ251X2N4eAorCisjaW5jbHVkZSAiZXh0L29wdF9yYW5kb20uaCIKKyNpbmNsdWRlICJyYW5kb20udGNjIgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYgLy8gX0VYVF9SQU5ET00KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3JhbmRvbS50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9yYW5kb20udGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOWUwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9yYW5kb20udGNjCkBAIC0wLDAgKzEsMTMxNCBAQAorLy8gUmFuZG9tIG51bWJlciBleHRlbnNpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvcmFuZG9tLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2V4dC9yYW5kb219CisgKi8KKworI2lmbmRlZiBfRVhUX1JBTkRPTV9UQ0MKKyNkZWZpbmUgX0VYVF9SQU5ET01fVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworI2lmIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBzaXplX3QgX19tLAorCSAgIHNpemVfdCBfX3BvczEsIHNpemVfdCBfX3NsMSwgc2l6ZV90IF9fc2wyLAorCSAgIHNpemVfdCBfX3NyMSwgc2l6ZV90IF9fc3IyLAorCSAgIHVpbnQzMl90IF9fbXNrMSwgdWludDMyX3QgX19tc2syLAorCSAgIHVpbnQzMl90IF9fbXNrMywgdWludDMyX3QgX19tc2s0LAorCSAgIHVpbnQzMl90IF9fcGFyaXR5MSwgdWludDMyX3QgX19wYXJpdHkyLAorCSAgIHVpbnQzMl90IF9fcGFyaXR5MywgdWludDMyX3QgX19wYXJpdHk0PgorICAgIHZvaWQgc2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwgX19tLAorCQkJCQkgICBfX3BvczEsIF9fc2wxLCBfX3NsMiwgX19zcjEsIF9fc3IyLAorCQkJCQkgICBfX21zazEsIF9fbXNrMiwgX19tc2szLCBfX21zazQsCisJCQkJCSAgIF9fcGFyaXR5MSwgX19wYXJpdHkyLCBfX3Bhcml0eTMsCisJCQkJCSAgIF9fcGFyaXR5ND46OgorICAgIHNlZWQoX1VJbnRUeXBlIF9fc2VlZCkKKyAgICB7CisgICAgICBfTV9zdGF0ZTMyWzBdID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KF9fc2VlZCk7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAxOyBfX2kgPCBfTV9uc3RhdGUzMjsgKytfX2kpCisJX01fc3RhdGUzMltfX2ldID0gKDE4MTI0MzMyNTNVTAorCQkJICAgKiAoX01fc3RhdGUzMltfX2kgLSAxXSBeIChfTV9zdGF0ZTMyW19faSAtIDFdID4+IDMwKSkKKwkJCSAgICsgX19pKTsKKyAgICAgIF9NX3BvcyA9IHN0YXRlX3NpemU7CisgICAgICBfTV9wZXJpb2RfY2VydGlmaWNhdGlvbigpOworICAgIH0KKworCisgIG5hbWVzcGFjZSB7CisKKyAgICBpbmxpbmUgdWludDMyX3QgX0Z1bmMxKHVpbnQzMl90IF9feCkKKyAgICB7CisgICAgICByZXR1cm4gKF9feCBeIChfX3ggPj4gMjcpKSAqIFVJTlQzMl9DKDE2NjQ1MjUpOworICAgIH0KKworICAgIGlubGluZSB1aW50MzJfdCBfRnVuYzIodWludDMyX3QgX194KQorICAgIHsKKyAgICAgIHJldHVybiAoX194IF4gKF9feCA+PiAyNykpICogVUlOVDMyX0MoMTU2NjA4Mzk0MSk7CisgICAgfQorCisgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fbSwKKwkgICBzaXplX3QgX19wb3MxLCBzaXplX3QgX19zbDEsIHNpemVfdCBfX3NsMiwKKwkgICBzaXplX3QgX19zcjEsIHNpemVfdCBfX3NyMiwKKwkgICB1aW50MzJfdCBfX21zazEsIHVpbnQzMl90IF9fbXNrMiwKKwkgICB1aW50MzJfdCBfX21zazMsIHVpbnQzMl90IF9fbXNrNCwKKwkgICB1aW50MzJfdCBfX3Bhcml0eTEsIHVpbnQzMl90IF9fcGFyaXR5MiwKKwkgICB1aW50MzJfdCBfX3Bhcml0eTMsIHVpbnQzMl90IF9fcGFyaXR5ND4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3NlcT4KKyAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY2xhc3M8X1NzZXE+Ojp2YWx1ZT46OnR5cGUKKyAgICAgIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fbSwKKwkJCQkJX19wb3MxLCBfX3NsMSwgX19zbDIsIF9fc3IxLCBfX3NyMiwKKwkJCQkJX19tc2sxLCBfX21zazIsIF9fbXNrMywgX19tc2s0LAorCQkJCQlfX3Bhcml0eTEsIF9fcGFyaXR5MiwgX19wYXJpdHkzLAorCQkJCQlfX3Bhcml0eTQ+OjoKKyAgICAgIHNlZWQoX1NzZXEmIF9fcSkKKyAgICAgIHsKKwlzaXplX3QgX19sYWc7CisKKwlpZiAoX01fbnN0YXRlMzIgPj0gNjIzKQorCSAgX19sYWcgPSAxMTsKKwllbHNlIGlmIChfTV9uc3RhdGUzMiA+PSA2OCkKKwkgIF9fbGFnID0gNzsKKwllbHNlIGlmIChfTV9uc3RhdGUzMiA+PSAzOSkKKwkgIF9fbGFnID0gNTsKKwllbHNlCisJICBfX2xhZyA9IDM7CisJY29uc3Qgc2l6ZV90IF9fbWlkID0gKF9NX25zdGF0ZTMyIC0gX19sYWcpIC8gMjsKKworCXN0ZDo6ZmlsbChfTV9zdGF0ZTMyLCBfTV9zdGF0ZTMyICsgX01fbnN0YXRlMzIsIFVJTlQzMl9DKDB4OGI4YjhiOGIpKTsKKwl1aW50MzJfdCBfX2FycltfTV9uc3RhdGUzMl07CisJX19xLmdlbmVyYXRlKF9fYXJyICsgMCwgX19hcnIgKyBfTV9uc3RhdGUzMik7CisKKwl1aW50MzJfdCBfX3IgPSBfRnVuYzEoX01fc3RhdGUzMlswXSBeIF9NX3N0YXRlMzJbX19taWRdCisJCQkgICAgICBeIF9NX3N0YXRlMzJbX01fbnN0YXRlMzIgIC0gMV0pOworCV9NX3N0YXRlMzJbX19taWRdICs9IF9fcjsKKwlfX3IgKz0gX01fbnN0YXRlMzI7CisJX01fc3RhdGUzMltfX21pZCArIF9fbGFnXSArPSBfX3I7CisJX01fc3RhdGUzMlswXSA9IF9fcjsKKworCWZvciAoc2l6ZV90IF9faSA9IDEsIF9faiA9IDA7IF9faiA8IF9NX25zdGF0ZTMyOyArK19faikKKwkgIHsKKwkgICAgX19yID0gX0Z1bmMxKF9NX3N0YXRlMzJbX19pXQorCQkJIF4gX01fc3RhdGUzMlsoX19pICsgX19taWQpICUgX01fbnN0YXRlMzJdCisJCQkgXiBfTV9zdGF0ZTMyWyhfX2kgKyBfTV9uc3RhdGUzMiAtIDEpICUgX01fbnN0YXRlMzJdKTsKKwkgICAgX01fc3RhdGUzMlsoX19pICsgX19taWQpICUgX01fbnN0YXRlMzJdICs9IF9fcjsKKwkgICAgX19yICs9IF9fYXJyW19fal0gKyBfX2k7CisJICAgIF9NX3N0YXRlMzJbKF9faSArIF9fbWlkICsgX19sYWcpICUgX01fbnN0YXRlMzJdICs9IF9fcjsKKwkgICAgX01fc3RhdGUzMltfX2ldID0gX19yOworCSAgICBfX2kgPSAoX19pICsgMSkgJSBfTV9uc3RhdGUzMjsKKwkgIH0KKwlmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfTV9uc3RhdGUzMjsgKytfX2opCisJICB7CisJICAgIGNvbnN0IHNpemVfdCBfX2kgPSAoX19qICsgMSkgJSBfTV9uc3RhdGUzMjsKKwkgICAgX19yID0gX0Z1bmMyKF9NX3N0YXRlMzJbX19pXQorCQkJICsgX01fc3RhdGUzMlsoX19pICsgX19taWQpICUgX01fbnN0YXRlMzJdCisJCQkgKyBfTV9zdGF0ZTMyWyhfX2kgKyBfTV9uc3RhdGUzMiAtIDEpICUgX01fbnN0YXRlMzJdKTsKKwkgICAgX01fc3RhdGUzMlsoX19pICsgX19taWQpICUgX01fbnN0YXRlMzJdIF49IF9fcjsKKwkgICAgX19yIC09IF9faTsKKwkgICAgX01fc3RhdGUzMlsoX19pICsgX19taWQgKyBfX2xhZykgJSBfTV9uc3RhdGUzMl0gXj0gX19yOworCSAgICBfTV9zdGF0ZTMyW19faV0gPSBfX3I7CisJICB9CisKKwlfTV9wb3MgPSBzdGF0ZV9zaXplOworCV9NX3BlcmlvZF9jZXJ0aWZpY2F0aW9uKCk7CisgICAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX20sCisJICAgc2l6ZV90IF9fcG9zMSwgc2l6ZV90IF9fc2wxLCBzaXplX3QgX19zbDIsCisJICAgc2l6ZV90IF9fc3IxLCBzaXplX3QgX19zcjIsCisJICAgdWludDMyX3QgX19tc2sxLCB1aW50MzJfdCBfX21zazIsCisJICAgdWludDMyX3QgX19tc2szLCB1aW50MzJfdCBfX21zazQsCisJICAgdWludDMyX3QgX19wYXJpdHkxLCB1aW50MzJfdCBfX3Bhcml0eTIsCisJICAgdWludDMyX3QgX19wYXJpdHkzLCB1aW50MzJfdCBfX3Bhcml0eTQ+CisgICAgdm9pZCBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX20sCisJCQkJCSAgIF9fcG9zMSwgX19zbDEsIF9fc2wyLCBfX3NyMSwgX19zcjIsCisJCQkJCSAgIF9fbXNrMSwgX19tc2syLCBfX21zazMsIF9fbXNrNCwKKwkJCQkJICAgX19wYXJpdHkxLCBfX3Bhcml0eTIsIF9fcGFyaXR5MywKKwkJCQkJICAgX19wYXJpdHk0Pjo6CisgICAgX01fcGVyaW9kX2NlcnRpZmljYXRpb24odm9pZCkKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgX19wYXJpdHlbNF0gPSB7IF9fcGFyaXR5MSwgX19wYXJpdHkyLAorCQkJCQkgICAgX19wYXJpdHkzLCBfX3Bhcml0eTQgfTsKKyAgICAgIHVpbnQzMl90IF9faW5uZXIgPSAwOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgNDsgKytfX2kpCisJaWYgKF9fcGFyaXR5W19faV0gIT0gMCkKKwkgIF9faW5uZXIgXj0gX01fc3RhdGUzMltfX2ldICYgX19wYXJpdHlbX19pXTsKKworICAgICAgaWYgKF9fYnVpbHRpbl9wYXJpdHkoX19pbm5lcikgJiAxKQorCXJldHVybjsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQorCWlmIChfX3Bhcml0eVtfX2ldICE9IDApCisJICB7CisJICAgIF9NX3N0YXRlMzJbX19pXSBePSAxIDw8IChfX2J1aWx0aW5fZmZzKF9fcGFyaXR5W19faV0pIC0gMSk7CisJICAgIHJldHVybjsKKwkgIH0KKyAgICAgIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fbSwKKwkgICBzaXplX3QgX19wb3MxLCBzaXplX3QgX19zbDEsIHNpemVfdCBfX3NsMiwKKwkgICBzaXplX3QgX19zcjEsIHNpemVfdCBfX3NyMiwKKwkgICB1aW50MzJfdCBfX21zazEsIHVpbnQzMl90IF9fbXNrMiwKKwkgICB1aW50MzJfdCBfX21zazMsIHVpbnQzMl90IF9fbXNrNCwKKwkgICB1aW50MzJfdCBfX3Bhcml0eTEsIHVpbnQzMl90IF9fcGFyaXR5MiwKKwkgICB1aW50MzJfdCBfX3Bhcml0eTMsIHVpbnQzMl90IF9fcGFyaXR5ND4KKyAgICB2b2lkIHNpbWRfZmFzdF9tZXJzZW5uZV90d2lzdGVyX2VuZ2luZTxfVUludFR5cGUsIF9fbSwKKwkJCQkJICAgX19wb3MxLCBfX3NsMSwgX19zbDIsIF9fc3IxLCBfX3NyMiwKKwkJCQkJICAgX19tc2sxLCBfX21zazIsIF9fbXNrMywgX19tc2s0LAorCQkJCQkgICBfX3Bhcml0eTEsIF9fcGFyaXR5MiwgX19wYXJpdHkzLAorCQkJCQkgICBfX3Bhcml0eTQ+OjoKKyAgICBkaXNjYXJkKHVuc2lnbmVkIGxvbmcgbG9uZyBfX3opCisgICAgeworICAgICAgd2hpbGUgKF9feiA+IHN0YXRlX3NpemUgLSBfTV9wb3MpCisJeworCSAgX196IC09IHN0YXRlX3NpemUgLSBfTV9wb3M7CisKKwkgIF9NX2dlbl9yYW5kKCk7CisJfQorCisgICAgICBfTV9wb3MgKz0gX196OworICAgIH0KKworCisjaWZuZGVmICBfR0xJQkNYWF9PUFRfSEFWRV9SQU5ET01fU0ZNVF9HRU5fUkVBRAorCisgIG5hbWVzcGFjZSB7CisKKyAgICB0ZW1wbGF0ZTxzaXplX3QgX19zaGlmdD4KKyAgICAgIGlubGluZSB2b2lkIF9fcnNoaWZ0KHVpbnQzMl90ICpfX291dCwgY29uc3QgdWludDMyX3QgKl9faW4pCisgICAgICB7CisJdWludDY0X3QgX190aCA9ICgoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KF9faW5bM10pIDw8IDMyKQorCQkJIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KF9faW5bMl0pKTsKKwl1aW50NjRfdCBfX3RsID0gKChzdGF0aWNfY2FzdDx1aW50NjRfdD4oX19pblsxXSkgPDwgMzIpCisJCQkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oX19pblswXSkpOworCisJdWludDY0X3QgX19vaCA9IF9fdGggPj4gKF9fc2hpZnQgKiA4KTsKKwl1aW50NjRfdCBfX29sID0gX190bCA+PiAoX19zaGlmdCAqIDgpOworCV9fb2wgfD0gX190aCA8PCAoNjQgLSBfX3NoaWZ0ICogOCk7CisJX19vdXRbMV0gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oX19vbCA+PiAzMik7CisJX19vdXRbMF0gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oX19vbCk7CisJX19vdXRbM10gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oX19vaCA+PiAzMik7CisJX19vdXRbMl0gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oX19vaCk7CisgICAgICB9CisKKworICAgIHRlbXBsYXRlPHNpemVfdCBfX3NoaWZ0PgorICAgICAgaW5saW5lIHZvaWQgX19sc2hpZnQodWludDMyX3QgKl9fb3V0LCBjb25zdCB1aW50MzJfdCAqX19pbikKKyAgICAgIHsKKwl1aW50NjRfdCBfX3RoID0gKChzdGF0aWNfY2FzdDx1aW50NjRfdD4oX19pblszXSkgPDwgMzIpCisJCQkgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oX19pblsyXSkpOworCXVpbnQ2NF90IF9fdGwgPSAoKHN0YXRpY19jYXN0PHVpbnQ2NF90PihfX2luWzFdKSA8PCAzMikKKwkJCSB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihfX2luWzBdKSk7CisKKwl1aW50NjRfdCBfX29oID0gX190aCA8PCAoX19zaGlmdCAqIDgpOworCXVpbnQ2NF90IF9fb2wgPSBfX3RsIDw8IChfX3NoaWZ0ICogOCk7CisJX19vaCB8PSBfX3RsID4+ICg2NCAtIF9fc2hpZnQgKiA4KTsKKwlfX291dFsxXSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihfX29sID4+IDMyKTsKKwlfX291dFswXSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihfX29sKTsKKwlfX291dFszXSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihfX29oID4+IDMyKTsKKwlfX291dFsyXSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihfX29oKTsKKyAgICAgIH0KKworCisgICAgdGVtcGxhdGU8c2l6ZV90IF9fc2wxLCBzaXplX3QgX19zbDIsIHNpemVfdCBfX3NyMSwgc2l6ZV90IF9fc3IyLAorCSAgICAgdWludDMyX3QgX19tc2sxLCB1aW50MzJfdCBfX21zazIsIHVpbnQzMl90IF9fbXNrMywgdWludDMyX3QgX19tc2s0PgorICAgICAgaW5saW5lIHZvaWQgX19yZWN1cnNpb24odWludDMyX3QgKl9fciwKKwkJCSAgICAgIGNvbnN0IHVpbnQzMl90ICpfX2EsIGNvbnN0IHVpbnQzMl90ICpfX2IsCisJCQkgICAgICBjb25zdCB1aW50MzJfdCAqX19jLCBjb25zdCB1aW50MzJfdCAqX19kKQorICAgICAgeworCXVpbnQzMl90IF9feFs0XTsKKwl1aW50MzJfdCBfX3lbNF07CisKKwlfX2xzaGlmdDxfX3NsMj4oX194LCBfX2EpOworCV9fcnNoaWZ0PF9fc3IyPihfX3ksIF9fYyk7CisJX19yWzBdID0gKF9fYVswXSBeIF9feFswXSBeICgoX19iWzBdID4+IF9fc3IxKSAmIF9fbXNrMSkKKwkJICBeIF9feVswXSBeIChfX2RbMF0gPDwgX19zbDEpKTsKKwlfX3JbMV0gPSAoX19hWzFdIF4gX194WzFdIF4gKChfX2JbMV0gPj4gX19zcjEpICYgX19tc2syKQorCQkgIF4gX195WzFdIF4gKF9fZFsxXSA8PCBfX3NsMSkpOworCV9fclsyXSA9IChfX2FbMl0gXiBfX3hbMl0gXiAoKF9fYlsyXSA+PiBfX3NyMSkgJiBfX21zazMpCisJCSAgXiBfX3lbMl0gXiAoX19kWzJdIDw8IF9fc2wxKSk7CisJX19yWzNdID0gKF9fYVszXSBeIF9feFszXSBeICgoX19iWzNdID4+IF9fc3IxKSAmIF9fbXNrNCkKKwkJICBeIF9feVszXSBeIChfX2RbM10gPDwgX19zbDEpKTsKKyAgICAgIH0KKworICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX20sCisJICAgc2l6ZV90IF9fcG9zMSwgc2l6ZV90IF9fc2wxLCBzaXplX3QgX19zbDIsCisJICAgc2l6ZV90IF9fc3IxLCBzaXplX3QgX19zcjIsCisJICAgdWludDMyX3QgX19tc2sxLCB1aW50MzJfdCBfX21zazIsCisJICAgdWludDMyX3QgX19tc2szLCB1aW50MzJfdCBfX21zazQsCisJICAgdWludDMyX3QgX19wYXJpdHkxLCB1aW50MzJfdCBfX3Bhcml0eTIsCisJICAgdWludDMyX3QgX19wYXJpdHkzLCB1aW50MzJfdCBfX3Bhcml0eTQ+CisgICAgdm9pZCBzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLCBfX20sCisJCQkJCSAgIF9fcG9zMSwgX19zbDEsIF9fc2wyLCBfX3NyMSwgX19zcjIsCisJCQkJCSAgIF9fbXNrMSwgX19tc2syLCBfX21zazMsIF9fbXNrNCwKKwkJCQkJICAgX19wYXJpdHkxLCBfX3Bhcml0eTIsIF9fcGFyaXR5MywKKwkJCQkJICAgX19wYXJpdHk0Pjo6CisgICAgX01fZ2VuX3JhbmQodm9pZCkKKyAgICB7CisgICAgICBjb25zdCB1aW50MzJfdCAqX19yMSA9ICZfTV9zdGF0ZTMyW19NX25zdGF0ZTMyIC0gOF07CisgICAgICBjb25zdCB1aW50MzJfdCAqX19yMiA9ICZfTV9zdGF0ZTMyW19NX25zdGF0ZTMyIC0gNF07CisgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX3BvczFfMzIgPSBfX3BvczEgKiA0OworCisgICAgICBzaXplX3QgX19pOworICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCBfTV9uc3RhdGUzMiAtIF9fcG9zMV8zMjsgX19pICs9IDQpCisJeworCSAgX19yZWN1cnNpb248X19zbDEsIF9fc2wyLCBfX3NyMSwgX19zcjIsCisJCSAgICAgIF9fbXNrMSwgX19tc2syLCBfX21zazMsIF9fbXNrND4KKwkgICAgKCZfTV9zdGF0ZTMyW19faV0sICZfTV9zdGF0ZTMyW19faV0sCisJICAgICAmX01fc3RhdGUzMltfX2kgKyBfX3BvczFfMzJdLCBfX3IxLCBfX3IyKTsKKwkgIF9fcjEgPSBfX3IyOworCSAgX19yMiA9ICZfTV9zdGF0ZTMyW19faV07CisJfQorCisgICAgICBmb3IgKDsgX19pIDwgX01fbnN0YXRlMzI7IF9faSArPSA0KQorCXsKKwkgIF9fcmVjdXJzaW9uPF9fc2wxLCBfX3NsMiwgX19zcjEsIF9fc3IyLAorCQkgICAgICBfX21zazEsIF9fbXNrMiwgX19tc2szLCBfX21zazQ+CisJICAgICgmX01fc3RhdGUzMltfX2ldLCAmX01fc3RhdGUzMltfX2ldLAorCSAgICAgJl9NX3N0YXRlMzJbX19pICsgX19wb3MxXzMyIC0gX01fbnN0YXRlMzJdLCBfX3IxLCBfX3IyKTsKKwkgIF9fcjEgPSBfX3IyOworCSAgX19yMiA9ICZfTV9zdGF0ZTMyW19faV07CisJfQorCisgICAgICBfTV9wb3MgPSAwOworICAgIH0KKworI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfT1BUX0hBVkVfUkFORE9NX1NGTVRfT1BFUkFUT1JFUVVBTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIHNpemVfdCBfX20sCisJICAgc2l6ZV90IF9fcG9zMSwgc2l6ZV90IF9fc2wxLCBzaXplX3QgX19zbDIsCisJICAgc2l6ZV90IF9fc3IxLCBzaXplX3QgX19zcjIsCisJICAgdWludDMyX3QgX19tc2sxLCB1aW50MzJfdCBfX21zazIsCisJICAgdWludDMyX3QgX19tc2szLCB1aW50MzJfdCBfX21zazQsCisJICAgdWludDMyX3QgX19wYXJpdHkxLCB1aW50MzJfdCBfX3Bhcml0eTIsCisJICAgdWludDMyX3QgX19wYXJpdHkzLCB1aW50MzJfdCBfX3Bhcml0eTQ+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX19nbnVfY3h4OjpzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLAorCSAgICAgICBfX20sIF9fcG9zMSwgX19zbDEsIF9fc2wyLCBfX3NyMSwgX19zcjIsCisJICAgICAgIF9fbXNrMSwgX19tc2syLCBfX21zazMsIF9fbXNrNCwKKwkgICAgICAgX19wYXJpdHkxLCBfX3Bhcml0eTIsIF9fcGFyaXR5MywgX19wYXJpdHk0PiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fZ251X2N4eDo6c2ltZF9mYXN0X21lcnNlbm5lX3R3aXN0ZXJfZW5naW5lPF9VSW50VHlwZSwKKwkgICAgICAgX19tLCBfX3BvczEsIF9fc2wxLCBfX3NsMiwgX19zcjEsIF9fc3IyLAorCSAgICAgICBfX21zazEsIF9fbXNrMiwgX19tc2szLCBfX21zazQsCisJICAgICAgIF9fcGFyaXR5MSwgX19wYXJpdHkyLCBfX3Bhcml0eTMsIF9fcGFyaXR5ND4mIF9fcmhzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLAorCSAgICAgICBfX20sIF9fcG9zMSwgX19zbDEsIF9fc2wyLCBfX3NyMSwgX19zcjIsCisJICAgICAgIF9fbXNrMSwgX19tc2syLCBfX21zazMsIF9fbXNrNCwKKwkgICAgICAgX19wYXJpdHkxLCBfX3Bhcml0eTIsIF9fcGFyaXR5MywgX19wYXJpdHk0PiBfX2VuZ2luZTsKKyAgICAgIHJldHVybiAoc3RkOjplcXVhbChfX2xocy5fTV9zdGF0ZVQsCisJCQkgX19saHMuX01fc3RhdGVUICsgX19lbmdpbmU6OnN0YXRlX3NpemUsCisJCQkgX19yaHMuX01fc3RhdGVUKQorCSAgICAgICYmIF9fbGhzLl9NX3BvcyA9PSBfX3Jocy5fTV9wb3MpOworICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fbSwKKwkgICBzaXplX3QgX19wb3MxLCBzaXplX3QgX19zbDEsIHNpemVfdCBfX3NsMiwKKwkgICBzaXplX3QgX19zcjEsIHNpemVfdCBfX3NyMiwKKwkgICB1aW50MzJfdCBfX21zazEsIHVpbnQzMl90IF9fbXNrMiwKKwkgICB1aW50MzJfdCBfX21zazMsIHVpbnQzMl90IF9fbXNrNCwKKwkgICB1aW50MzJfdCBfX3Bhcml0eTEsIHVpbnQzMl90IF9fcGFyaXR5MiwKKwkgICB1aW50MzJfdCBfX3Bhcml0eTMsIHVpbnQzMl90IF9fcGFyaXR5NCwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgX19nbnVfY3h4OjpzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLAorCSAgICAgICBfX20sIF9fcG9zMSwgX19zbDEsIF9fc2wyLCBfX3NyMSwgX19zcjIsCisJICAgICAgIF9fbXNrMSwgX19tc2syLCBfX21zazMsIF9fbXNrNCwKKwkgICAgICAgX19wYXJpdHkxLCBfX3Bhcml0eTIsIF9fcGFyaXR5MywgX19wYXJpdHk0PiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OmZpeGVkIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9feC5fTV9uc3RhdGUzMjsgKytfX2kpCisJX19vcyA8PCBfX3guX01fc3RhdGUzMltfX2ldIDw8IF9fc3BhY2U7CisgICAgICBfX29zIDw8IF9feC5fTV9wb3M7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSW50VHlwZSwgc2l6ZV90IF9fbSwKKwkgICBzaXplX3QgX19wb3MxLCBzaXplX3QgX19zbDEsIHNpemVfdCBfX3NsMiwKKwkgICBzaXplX3QgX19zcjEsIHNpemVfdCBfX3NyMiwKKwkgICB1aW50MzJfdCBfX21zazEsIHVpbnQzMl90IF9fbXNrMiwKKwkgICB1aW50MzJfdCBfX21zazMsIHVpbnQzMl90IF9fbXNrNCwKKwkgICB1aW50MzJfdCBfX3Bhcml0eTEsIHVpbnQzMl90IF9fcGFyaXR5MiwKKwkgICB1aW50MzJfdCBfX3Bhcml0eTMsIHVpbnQzMl90IF9fcGFyaXR5NCwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgX19nbnVfY3h4OjpzaW1kX2Zhc3RfbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmU8X1VJbnRUeXBlLAorCSAgICAgICBfX20sIF9fcG9zMSwgX19zbDEsIF9fc2wyLCBfX3NyMSwgX19zcjIsCisJICAgICAgIF9fbXNrMSwgX19tc2syLCBfX21zazMsIF9fbXNrNCwKKwkgICAgICAgX19wYXJpdHkxLCBfX3Bhcml0eTIsIF9fcGFyaXR5MywgX19wYXJpdHk0PiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX3guX01fbnN0YXRlMzI7ICsrX19pKQorCV9faXMgPj4gX194Ll9NX3N0YXRlMzJbX19pXTsKKyAgICAgIF9faXMgPj4gX194Ll9NX3BvczsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworI2VuZGlmIC8vIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fCisKKyAgLyoqCisgICAqIEl0ZXJhdGlvbiBtZXRob2QgZHVlIHRvIE0uRC4gSjxvOj5obmsuCisgICAqCisgICAqIE0uRC4gSjxvOj5obmssIEVyemV1Z3VuZyB2b24gYmV0YXZlcnRlaWx0ZW4gdW5kIGdhbW1hdmVydGVpbHRlbgorICAgKiBadWZhbGxzemFobGVuLCBNZXRyaWthLCBWb2x1bWUgOCwgMTk2NAorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgYmV0YV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGJldGFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlzdGQ6Ol9fZGV0YWlsOjpfQWRhcHRvcjxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgcmVzdWx0X3R5cGU+CisJICBfX2F1cm5nKF9fdXJuZyk7CisKKwlyZXN1bHRfdHlwZSBfX3gsIF9feTsKKwlkbworCSAgeworCSAgICBfX3ggPSBzdGQ6OmV4cChzdGQ6OmxvZyhfX2F1cm5nKCkpIC8gX19wYXJhbS5hbHBoYSgpKTsKKwkgICAgX195ID0gc3RkOjpleHAoc3RkOjpsb2coX19hdXJuZygpKSAvIF9fcGFyYW0uYmV0YSgpKTsKKwkgIH0KKwl3aGlsZSAoX194ICsgX195ID4gcmVzdWx0X3R5cGUoMSkpOworCisJcmV0dXJuIF9feCAvIChfX3ggKyBfX3kpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGJldGFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9PdXRwdXRJdGVyYXRvciBfX2YsIF9PdXRwdXRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yPikKKworCXN0ZDo6X19kZXRhaWw6Ol9BZGFwdG9yPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCByZXN1bHRfdHlwZT4KKwkgIF9fYXVybmcoX191cm5nKTsKKworCXdoaWxlIChfX2YgIT0gX190KQorCSAgeworCSAgICByZXN1bHRfdHlwZSBfX3gsIF9feTsKKwkgICAgZG8KKwkgICAgICB7CisJCV9feCA9IHN0ZDo6ZXhwKHN0ZDo6bG9nKF9fYXVybmcoKSkgLyBfX3BhcmFtLmFscGhhKCkpOworCQlfX3kgPSBzdGQ6OmV4cChzdGQ6OmxvZyhfX2F1cm5nKCkpIC8gX19wYXJhbS5iZXRhKCkpOworCSAgICAgIH0KKwkgICAgd2hpbGUgKF9feCArIF9feSA+IHJlc3VsdF90eXBlKDEpKTsKKworCSAgICAqX19mKysgPSBfX3ggLyAoX194ICsgX195KTsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBfX2dudV9jeHg6OmJldGFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guYWxwaGEoKSA8PCBfX3NwYWNlIDw8IF9feC5iZXRhKCk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBfX2dudV9jeHg6OmJldGFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9SZWFsVHlwZSBfX2FscGhhX3ZhbCwgX19iZXRhX3ZhbDsKKyAgICAgIF9faXMgPj4gX19hbHBoYV92YWwgPj4gX19iZXRhX3ZhbDsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBfX2dudV9jeHg6OmJldGFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fYWxwaGFfdmFsLCBfX2JldGFfdmFsKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfRGltZW4sIHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICAgIHZvaWQKKyAgICAgIG5vcm1hbF9tdl9kaXN0cmlidXRpb248X0RpbWVuLCBfUmVhbFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICAgIF9NX2luaXRfZnVsbChfSW5wdXRJdGVyYXRvcjEgX19tZWFuYmVnaW4sIF9JbnB1dEl0ZXJhdG9yMSBfX21lYW5lbmQsCisJCSAgIF9JbnB1dEl0ZXJhdG9yMiBfX3ZhcmNvdmJlZ2luLCBfSW5wdXRJdGVyYXRvcjIgX192YXJjb3ZlbmQpCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKwlzdGQ6OmZpbGwoc3RkOjpjb3B5KF9fbWVhbmJlZ2luLCBfX21lYW5lbmQsIF9NX21lYW4uYmVnaW4oKSksCisJCSAgX01fbWVhbi5lbmQoKSwgX1JlYWxUeXBlKDApKTsKKworCS8vIFBlcmZvcm0gdGhlIENob2xlc2t5IGRlY29tcG9zaXRpb24KKwlhdXRvIF9fdyA9IF9NX3QuYmVnaW4oKTsKKwlmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfRGltZW47ICsrX19qKQorCSAgeworCSAgICBfUmVhbFR5cGUgX19zdW0gPSBfUmVhbFR5cGUoMCk7CisKKwkgICAgYXV0byBfX3NsaXRiZWdpbiA9IF9fdzsKKwkgICAgYXV0byBfX2NpdCA9IF9NX3QuYmVnaW4oKTsKKwkgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19qOyArK19faSkKKwkgICAgICB7CisJCWF1dG8gX19zbGl0ID0gX19zbGl0YmVnaW47CisJCV9SZWFsVHlwZSBfX3MgPSAqX192YXJjb3ZiZWdpbisrOworCQlmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX2k7ICsrX19rKQorCQkgIF9fcyAtPSAqX19zbGl0KysgKiAqX19jaXQrKzsKKworCQkqX193KysgPSBfX3MgLz0gKl9fY2l0Kys7CisJCV9fc3VtICs9IF9fcyAqIF9fczsKKwkgICAgICB9CisKKwkgICAgX19zdW0gPSAqX192YXJjb3ZiZWdpbiAtIF9fc3VtOworCSAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3N1bSA8PSBfUmVhbFR5cGUoMCksIDApKQorCSAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigibm9ybWFsX212X2Rpc3RyaWJ1dGlvbjo6IgorCQkJCQkgICAgICJwYXJhbV90eXBlOjpfTV9pbml0X2Z1bGwiKSk7CisJICAgICpfX3crKyA9IHN0ZDo6c3FydChfX3N1bSk7CisKKwkgICAgc3RkOjphZHZhbmNlKF9fdmFyY292YmVnaW4sIF9EaW1lbiAtIF9faik7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0RpbWVuLCB0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjI+CisgICAgICB2b2lkCisgICAgICBub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPjo6cGFyYW1fdHlwZTo6CisgICAgICBfTV9pbml0X2xvd2VyKF9JbnB1dEl0ZXJhdG9yMSBfX21lYW5iZWdpbiwgX0lucHV0SXRlcmF0b3IxIF9fbWVhbmVuZCwKKwkJICAgIF9JbnB1dEl0ZXJhdG9yMiBfX3ZhcmNvdmJlZ2luLCBfSW5wdXRJdGVyYXRvcjIgX192YXJjb3ZlbmQpCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjE+KQorCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfSW5wdXRJdGVyYXRvckNvbmNlcHQ8X0lucHV0SXRlcmF0b3IyPikKKwlzdGQ6OmZpbGwoc3RkOjpjb3B5KF9fbWVhbmJlZ2luLCBfX21lYW5lbmQsIF9NX21lYW4uYmVnaW4oKSksCisJCSAgX01fbWVhbi5lbmQoKSwgX1JlYWxUeXBlKDApKTsKKworCS8vIFBlcmZvcm0gdGhlIENob2xlc2t5IGRlY29tcG9zaXRpb24KKwlhdXRvIF9fdyA9IF9NX3QuYmVnaW4oKTsKKwlmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfRGltZW47ICsrX19qKQorCSAgeworCSAgICBfUmVhbFR5cGUgX19zdW0gPSBfUmVhbFR5cGUoMCk7CisKKwkgICAgYXV0byBfX3NsaXRiZWdpbiA9IF9fdzsKKwkgICAgYXV0byBfX2NpdCA9IF9NX3QuYmVnaW4oKTsKKwkgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19qOyArK19faSkKKwkgICAgICB7CisJCWF1dG8gX19zbGl0ID0gX19zbGl0YmVnaW47CisJCV9SZWFsVHlwZSBfX3MgPSAqX192YXJjb3ZiZWdpbisrOworCQlmb3IgKHNpemVfdCBfX2sgPSAwOyBfX2sgPCBfX2k7ICsrX19rKQorCQkgIF9fcyAtPSAqX19zbGl0KysgKiAqX19jaXQrKzsKKworCQkqX193KysgPSBfX3MgLz0gKl9fY2l0Kys7CisJCV9fc3VtICs9IF9fcyAqIF9fczsKKwkgICAgICB9CisKKwkgICAgX19zdW0gPSAqX192YXJjb3ZiZWdpbisrIC0gX19zdW07CisJICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fc3VtIDw9IF9SZWFsVHlwZSgwKSwgMCkpCisJICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJub3JtYWxfbXZfZGlzdHJpYnV0aW9uOjoiCisJCQkJCSAgICAgInBhcmFtX3R5cGU6Ol9NX2luaXRfZnVsbCIpKTsKKwkgICAgKl9fdysrID0gc3RkOjpzcXJ0KF9fc3VtKTsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfRGltZW4sIHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4KKyAgICAgIHZvaWQKKyAgICAgIG5vcm1hbF9tdl9kaXN0cmlidXRpb248X0RpbWVuLCBfUmVhbFR5cGU+OjpwYXJhbV90eXBlOjoKKyAgICAgIF9NX2luaXRfZGlhZ29uYWwoX0lucHV0SXRlcmF0b3IxIF9fbWVhbmJlZ2luLCBfSW5wdXRJdGVyYXRvcjEgX19tZWFuZW5kLAorCQkgICAgICAgX0lucHV0SXRlcmF0b3IyIF9fdmFyYmVnaW4sIF9JbnB1dEl0ZXJhdG9yMiBfX3ZhcmVuZCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0lucHV0SXRlcmF0b3JDb25jZXB0PF9JbnB1dEl0ZXJhdG9yMT4pCisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9JbnB1dEl0ZXJhdG9yQ29uY2VwdDxfSW5wdXRJdGVyYXRvcjI+KQorCXN0ZDo6ZmlsbChzdGQ6OmNvcHkoX19tZWFuYmVnaW4sIF9fbWVhbmVuZCwgX01fbWVhbi5iZWdpbigpKSwKKwkJICBfTV9tZWFuLmVuZCgpLCBfUmVhbFR5cGUoMCkpOworCisJYXV0byBfX3cgPSBfTV90LmJlZ2luKCk7CisJc2l6ZV90IF9fc3RlcCA9IDA7CisJd2hpbGUgKF9fdmFyYmVnaW4gIT0gX192YXJlbmQpCisJICB7CisJICAgIHN0ZDo6ZmlsbF9uKF9fdywgX19zdGVwLCBfUmVhbFR5cGUoMCkpOworCSAgICBfX3cgKz0gX19zdGVwKys7CisJICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KCpfX3ZhcmJlZ2luIDwgX1JlYWxUeXBlKDApLCAwKSkKKwkgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIm5vcm1hbF9tdl9kaXN0cmlidXRpb246OiIKKwkJCQkJICAgICAicGFyYW1fdHlwZTo6X01faW5pdF9kaWFnb25hbCIpKTsKKwkgICAgKl9fdysrID0gc3RkOjpzcXJ0KCpfX3ZhcmJlZ2luKyspOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9EaW1lbiwgdHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgbm9ybWFsX212X2Rpc3RyaWJ1dGlvbjxfRGltZW4sIF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeworCXJlc3VsdF90eXBlIF9fcmV0OworCisJX01fbmQuX19nZW5lcmF0ZShfX3JldC5iZWdpbigpLCBfX3JldC5lbmQoKSwgX191cm5nKTsKKworCWF1dG8gX190X2l0ID0gX19wYXJhbS5fTV90LmNyYmVnaW4oKTsKKwlmb3IgKHNpemVfdCBfX2kgPSBfRGltZW47IF9faSA+IDA7IC0tX19pKQorCSAgeworCSAgICBfUmVhbFR5cGUgX19zdW0gPSBfUmVhbFR5cGUoMCk7CisJICAgIGZvciAoc2l6ZV90IF9faiA9IF9faTsgX19qID4gMDsgLS1fX2opCisJICAgICAgX19zdW0gKz0gX19yZXRbX19qIC0gMV0gKiAqX190X2l0Kys7CisJICAgIF9fcmV0W19faSAtIDFdID0gX19zdW07CisJICB9CisKKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0RpbWVuLCB0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX0ZvcndhcmRJdGVyYXRvciBfX2YsIF9Gb3J3YXJkSXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3BhcmFtKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfTXV0YWJsZV9Gb3J3YXJkSXRlcmF0b3JDb25jZXB0PAorCQkJCSAgICBfRm9yd2FyZEl0ZXJhdG9yPikKKwl3aGlsZSAoX19mICE9IF9fdCkKKwkgICpfX2YrKyA9IHRoaXMtPm9wZXJhdG9yKCkoX191cm5nLCBfX3BhcmFtKTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTxzaXplX3QgX0RpbWVuLCB0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX19nbnVfY3h4Ojpub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPiYKKwkgICAgICAgX19kMSwKKwkgICAgICAgY29uc3QgX19nbnVfY3h4Ojpub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPiYKKwkgICAgICAgX19kMikKKyAgICB7CisgICAgICByZXR1cm4gX19kMS5fTV9wYXJhbSA9PSBfX2QyLl9NX3BhcmFtICYmIF9fZDEuX01fbmQgPT0gX19kMi5fTV9uZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9EaW1lbiwgdHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgX19nbnVfY3h4Ojpub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBhdXRvIF9fbWVhbiA9IF9feC5fTV9wYXJhbS5tZWFuKCk7CisgICAgICBmb3IgKGF1dG8gX19pdCA6IF9fbWVhbikKKwlfX29zIDw8IF9faXQgPDwgX19zcGFjZTsKKyAgICAgIGF1dG8gX190ID0gX194Ll9NX3BhcmFtLnZhcmNvdigpOworICAgICAgZm9yIChhdXRvIF9faXQgOiBfX3QpCisJX19vcyA8PCBfX2l0IDw8IF9fc3BhY2U7CisKKyAgICAgIF9fb3MgPDwgX194Ll9NX25kOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9EaW1lbiwgdHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgX19nbnVfY3h4Ojpub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgc3RkOjphcnJheTxfUmVhbFR5cGUsIF9EaW1lbj4gX19tZWFuOworICAgICAgZm9yIChhdXRvJiBfX2l0IDogX19tZWFuKQorCV9faXMgPj4gX19pdDsKKyAgICAgIHN0ZDo6YXJyYXk8X1JlYWxUeXBlLCBfRGltZW4gKiAoX0RpbWVuICsgMSkgLyAyPiBfX3ZhcmNvdjsKKyAgICAgIGZvciAoYXV0byYgX19pdCA6IF9fdmFyY292KQorCV9faXMgPj4gX19pdDsKKworICAgICAgX19pcyA+PiBfX3guX01fbmQ7CisKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBub3JtYWxfbXZfZGlzdHJpYnV0aW9uPF9EaW1lbiwgX1JlYWxUeXBlPjo6CisJCXBhcmFtX3R5cGUoX19tZWFuLmJlZ2luKCksIF9fbWVhbi5lbmQoKSwKKwkJCSAgIF9fdmFyY292LmJlZ2luKCksIF9fdmFyY292LmVuZCgpKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICByaWNlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfT3V0cHV0SXRlcmF0b3IgX19mLCBfT3V0cHV0SXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yPikKKworCXdoaWxlIChfX2YgIT0gX190KQorCSAgeworCSAgICB0eXBlbmFtZSBzdGQ6Om5vcm1hbF9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+OjpwYXJhbV90eXBlCisJICAgICAgX19weChfX3AubnUoKSwgX19wLnNpZ21hKCkpLCBfX3B5KHJlc3VsdF90eXBlKDApLCBfX3Auc2lnbWEoKSk7CisJICAgIHJlc3VsdF90eXBlIF9feCA9IHRoaXMtPl9NX25keChfX3B4LCBfX3VybmcpOworCSAgICByZXN1bHRfdHlwZSBfX3kgPSB0aGlzLT5fTV9uZHkoX19weSwgX191cm5nKTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJICAgICpfX2YrKyA9IHN0ZDo6aHlwb3QoX194LCBfX3kpOworI2Vsc2UKKwkgICAgKl9fZisrID0gc3RkOjpzcXJ0KF9feCAqIF9feCArIF9feSAqIF9feSk7CisjZW5kaWYKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCByaWNlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Lm51KCkgPDwgX19zcGFjZSA8PCBfX3guc2lnbWEoKTsKKyAgICAgIF9fb3MgPDwgX19zcGFjZSA8PCBfX3guX01fbmR4OworICAgICAgX19vcyA8PCBfX3NwYWNlIDw8IF9feC5fTV9uZHk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICByaWNlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19udV92YWwsIF9fc2lnbWFfdmFsOworICAgICAgX19pcyA+PiBfX251X3ZhbCA+PiBfX3NpZ21hX3ZhbDsKKyAgICAgIF9faXMgPj4gX194Ll9NX25keDsKKyAgICAgIF9faXMgPj4gX194Ll9NX25keTsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSByaWNlX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX251X3ZhbCwgX19zaWdtYV92YWwpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfT3V0cHV0SXRlcmF0b3IgX19mLCBfT3V0cHV0SXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yPikKKworCXR5cGVuYW1lIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZQorCSAgX19wZyhfX3AubXUoKSwgX19wLm9tZWdhKCkgLyBfX3AubXUoKSk7CisJd2hpbGUgKF9fZiAhPSBfX3QpCisJICAqX19mKysgPSBzdGQ6OnNxcnQodGhpcy0+X01fZ2QoX19wZywgX191cm5nKSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgbmFrYWdhbWlfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubXUoKSA8PCBfX3NwYWNlIDw8IF9feC5vbWVnYSgpOworICAgICAgX19vcyA8PCBfX3NwYWNlIDw8IF9feC5fTV9nZDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19tdV92YWwsIF9fb21lZ2FfdmFsOworICAgICAgX19pcyA+PiBfX211X3ZhbCA+PiBfX29tZWdhX3ZhbDsKKyAgICAgIF9faXMgPj4gX194Ll9NX2dkOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIG5ha2FnYW1pX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX211X3ZhbCwgX19vbWVnYV92YWwpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHBhcmV0b19kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX091dHB1dEl0ZXJhdG9yIF9fZiwgX091dHB1dEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCV9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfT3V0cHV0SXRlcmF0b3JDb25jZXB0PF9PdXRwdXRJdGVyYXRvcj4pCisKKwlyZXN1bHRfdHlwZSBfX211X3ZhbCA9IF9fcC5tdSgpOworCXJlc3VsdF90eXBlIF9fbWFscGhpbnYgPSAtcmVzdWx0X3R5cGUoMSkgLyBfX3AuYWxwaGEoKTsKKwl3aGlsZSAoX19mICE9IF9fdCkKKwkgICpfX2YrKyA9IF9fbXVfdmFsICogc3RkOjpwb3codGhpcy0+X01fdWQoX191cm5nKSwgX19tYWxwaGludik7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgcGFyZXRvX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194LmFscGhhKCkgPDwgX19zcGFjZSA8PCBfX3gubXUoKTsKKyAgICAgIF9fb3MgPDwgX19zcGFjZSA8PCBfX3guX01fdWQ7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBwYXJldG9fZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9SZWFsVHlwZSBfX2FscGhhX3ZhbCwgX19tdV92YWw7CisgICAgICBfX2lzID4+IF9fYWxwaGFfdmFsID4+IF9fbXVfdmFsOworICAgICAgX19pcyA+PiBfX3guX01fdWQ7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgcGFyZXRvX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2FscGhhX3ZhbCwgX19tdV92YWwpKTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHR5cGVuYW1lIGtfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBrX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsKKwlyZXN1bHRfdHlwZSBfX3ggPSB0aGlzLT5fTV9nZDEoX191cm5nKTsKKwlyZXN1bHRfdHlwZSBfX3kgPSB0aGlzLT5fTV9nZDIoX191cm5nKTsKKwlyZXR1cm4gc3RkOjpzcXJ0KF9feCAqIF9feSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUga19kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGtfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgY29uc3QgcGFyYW1fdHlwZSYgX19wKQorICAgICAgeworCXR5cGVuYW1lIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZQorCSAgX19wMShfX3AubGFtYmRhKCksIHJlc3VsdF90eXBlKDEpIC8gX19wLmxhbWJkYSgpKSwKKwkgIF9fcDIoX19wLm51KCksIF9fcC5tdSgpIC8gX19wLm51KCkpOworCXJlc3VsdF90eXBlIF9feCA9IHRoaXMtPl9NX2dkMShfX3AxLCBfX3VybmcpOworCXJlc3VsdF90eXBlIF9feSA9IHRoaXMtPl9NX2dkMihfX3AyLCBfX3VybmcpOworCXJldHVybiBzdGQ6OnNxcnQoX194ICogX195KTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBrX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfT3V0cHV0SXRlcmF0b3IgX19mLCBfT3V0cHV0SXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yPikKKworCXR5cGVuYW1lIHN0ZDo6Z2FtbWFfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZQorCSAgX19wMShfX3AubGFtYmRhKCksIHJlc3VsdF90eXBlKDEpIC8gX19wLmxhbWJkYSgpKSwKKwkgIF9fcDIoX19wLm51KCksIF9fcC5tdSgpIC8gX19wLm51KCkpOworCXdoaWxlIChfX2YgIT0gX190KQorCSAgeworCSAgICByZXN1bHRfdHlwZSBfX3ggPSB0aGlzLT5fTV9nZDEoX19wMSwgX191cm5nKTsKKwkgICAgcmVzdWx0X3R5cGUgX195ID0gdGhpcy0+X01fZ2QyKF9fcDIsIF9fdXJuZyk7CisJICAgICpfX2YrKyA9IHN0ZDo6c3FydChfX3ggKiBfX3kpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGtfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubGFtYmRhKCkgPDwgX19zcGFjZSA8PCBfX3gubXUoKSA8PCBfX3NwYWNlIDw8IF9feC5udSgpOworICAgICAgX19vcyA8PCBfX3NwYWNlIDw8IF9feC5fTV9nZDE7CisgICAgICBfX29zIDw8IF9fc3BhY2UgPDwgX194Ll9NX2dkMjsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIGtfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9SZWFsVHlwZSBfX2xhbWJkYV92YWwsIF9fbXVfdmFsLCBfX251X3ZhbDsKKyAgICAgIF9faXMgPj4gX19sYW1iZGFfdmFsID4+IF9fbXVfdmFsID4+IF9fbnVfdmFsOworICAgICAgX19pcyA+PiBfX3guX01fZ2QxOworICAgICAgX19pcyA+PiBfX3guX01fZ2QyOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGtfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fbGFtYmRhX3ZhbCwgX19tdV92YWwsIF9fbnVfdmFsKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICBhcmNzaW5lX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKyAgICAgIF9fZ2VuZXJhdGVfaW1wbChfT3V0cHV0SXRlcmF0b3IgX19mLCBfT3V0cHV0SXRlcmF0b3IgX190LAorCQkgICAgICBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQkgICAgICBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yPikKKworCXJlc3VsdF90eXBlIF9fZGlmID0gX19wLmIoKSAtIF9fcC5hKCk7CisJcmVzdWx0X3R5cGUgX19zdW0gPSBfX3AuYSgpICsgX19wLmIoKTsKKwl3aGlsZSAoX19mICE9IF9fdCkKKwkgIHsKKwkgICAgcmVzdWx0X3R5cGUgX194ID0gc3RkOjpzaW4odGhpcy0+X01fdWQoX191cm5nKSk7CisJICAgICpfX2YrKyA9IChfX3ggKiBfX2RpZiArIF9fc3VtKSAvIHJlc3VsdF90eXBlKDIpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGFyY3NpbmVfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6bWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guYSgpIDw8IF9fc3BhY2UgPDwgX194LmIoKTsKKyAgICAgIF9fb3MgPDwgX19zcGFjZSA8PCBfX3guX01fdWQ7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBhcmNzaW5lX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19hLCBfX2I7CisgICAgICBfX2lzID4+IF9fYSA+PiBfX2I7CisgICAgICBfX2lzID4+IF9feC5fTV91ZDsKKyAgICAgIF9feC5wYXJhbSh0eXBlbmFtZSBhcmNzaW5lX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2EsIF9fYikpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgaG95dF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGhveXRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgeworCXJlc3VsdF90eXBlIF9feCA9IHRoaXMtPl9NX2FkKF9fdXJuZyk7CisJcmVzdWx0X3R5cGUgX195ID0gdGhpcy0+X01fZWQoX191cm5nKTsKKwlyZXR1cm4gKHJlc3VsdF90eXBlKDIpICogdGhpcy0+cSgpCisJCSAgLyAocmVzdWx0X3R5cGUoMSkgKyB0aGlzLT5xKCkgKiB0aGlzLT5xKCkpKQorCSAgICAgICAqIHN0ZDo6c3FydCh0aGlzLT5vbWVnYSgpICogX194ICogX195KTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBob3l0X2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgaG95dF9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSBjb25zdCBwYXJhbV90eXBlJiBfX3ApCisgICAgICB7CisJcmVzdWx0X3R5cGUgX19xMiA9IF9fcC5xKCkgKiBfX3AucSgpOworCXJlc3VsdF90eXBlIF9fbnVtID0gcmVzdWx0X3R5cGUoMC41TCkgKiAocmVzdWx0X3R5cGUoMSkgKyBfX3EyKTsKKwl0eXBlbmFtZSBfX2dudV9jeHg6OmFyY3NpbmVfZGlzdHJpYnV0aW9uPHJlc3VsdF90eXBlPjo6cGFyYW1fdHlwZQorCSAgX19wYShfX251bSwgX19udW0gLyBfX3EyKTsKKwlyZXN1bHRfdHlwZSBfX3ggPSB0aGlzLT5fTV9hZChfX3BhLCBfX3VybmcpOworCXJlc3VsdF90eXBlIF9feSA9IHRoaXMtPl9NX2VkKF9fdXJuZyk7CisJcmV0dXJuIChyZXN1bHRfdHlwZSgyKSAqIF9fcC5xKCkgLyAocmVzdWx0X3R5cGUoMSkgKyBfX3EyKSkKKwkgICAgICAgKiBzdGQ6OnNxcnQoX19wLm9tZWdhKCkgKiBfX3ggKiBfX3kpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgICB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIGhveXRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9PdXRwdXRJdGVyYXRvciBfX2YsIF9PdXRwdXRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcCkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3I+KQorCisJcmVzdWx0X3R5cGUgX18ycSA9IHJlc3VsdF90eXBlKDIpICogX19wLnEoKTsKKwlyZXN1bHRfdHlwZSBfX3EyID0gX19wLnEoKSAqIF9fcC5xKCk7CisJcmVzdWx0X3R5cGUgX19xMnAxID0gcmVzdWx0X3R5cGUoMSkgKyBfX3EyOworCXJlc3VsdF90eXBlIF9fbnVtID0gcmVzdWx0X3R5cGUoMC41TCkgKiBfX3EycDE7CisJcmVzdWx0X3R5cGUgX19vbWVnYSA9IF9fcC5vbWVnYSgpOworCXR5cGVuYW1lIF9fZ251X2N4eDo6YXJjc2luZV9kaXN0cmlidXRpb248cmVzdWx0X3R5cGU+OjpwYXJhbV90eXBlCisJICBfX3BhKF9fbnVtLCBfX251bSAvIF9fcTIpOworCXdoaWxlIChfX2YgIT0gX190KQorCSAgeworCSAgICByZXN1bHRfdHlwZSBfX3ggPSB0aGlzLT5fTV9hZChfX3BhLCBfX3VybmcpOworCSAgICByZXN1bHRfdHlwZSBfX3kgPSB0aGlzLT5fTV9lZChfX3VybmcpOworCSAgICAqX19mKysgPSAoX18ycSAvIF9fcTJwMSkgKiBzdGQ6OnNxcnQoX19vbWVnYSAqIF9feCAqIF9feSk7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgaG95dF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0czxfUmVhbFR5cGU+OjptYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC5xKCkgPDwgX19zcGFjZSA8PCBfX3gub21lZ2EoKTsKKyAgICAgIF9fb3MgPDwgX19zcGFjZSA8PCBfX3guX01fYWQ7CisgICAgICBfX29zIDw8IF9fc3BhY2UgPDwgX194Ll9NX2VkOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgaG95dF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX1JlYWxUeXBlIF9fcSwgX19vbWVnYTsKKyAgICAgIF9faXMgPj4gX19xID4+IF9fb21lZ2E7CisgICAgICBfX2lzID4+IF9feC5fTV9hZDsKKyAgICAgIF9faXMgPj4gX194Ll9NX2VkOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIGhveXRfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorCQlwYXJhbV90eXBlKF9fcSwgX19vbWVnYSkpOworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICAgIHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgdHJpYW5ndWxhcl9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBfX2dlbmVyYXRlX2ltcGwoX091dHB1dEl0ZXJhdG9yIF9fZiwgX091dHB1dEl0ZXJhdG9yIF9fdCwKKwkJICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJICAgICAgY29uc3QgcGFyYW1fdHlwZSYgX19wYXJhbSkKKyAgICAgIHsKKwlfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX091dHB1dEl0ZXJhdG9yQ29uY2VwdDxfT3V0cHV0SXRlcmF0b3I+KQorCisJd2hpbGUgKF9fZiAhPSBfX3QpCisJICAqX19mKysgPSB0aGlzLT5vcGVyYXRvcigpKF9fdXJuZywgX19wYXJhbSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgX19nbnVfY3h4Ojp0cmlhbmd1bGFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194LmEoKSA8PCBfX3NwYWNlIDw8IF9feC5iKCkgPDwgX19zcGFjZSA8PCBfX3guYygpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgX19nbnVfY3h4Ojp0cmlhbmd1bGFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19hLCBfX2IsIF9fYzsKKyAgICAgIF9faXMgPj4gX19hID4+IF9fYiA+PiBfX2M7CisgICAgICBfX3gucGFyYW0odHlwZW5hbWUgX19nbnVfY3h4Ojp0cmlhbmd1bGFyX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX2EsIF9fYiwgX19jKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgICAgdHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB2b2lkCisgICAgICB2b25fbWlzZXNfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgX19nZW5lcmF0ZV9pbXBsKF9PdXRwdXRJdGVyYXRvciBfX2YsIF9PdXRwdXRJdGVyYXRvciBfX3QsCisJCSAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsCisJCSAgICAgIGNvbnN0IHBhcmFtX3R5cGUmIF9fcGFyYW0pCisgICAgICB7CisJX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9PdXRwdXRJdGVyYXRvckNvbmNlcHQ8X091dHB1dEl0ZXJhdG9yPikKKworCXdoaWxlIChfX2YgIT0gX190KQorCSAgKl9fZisrID0gdGhpcy0+b3BlcmF0b3IoKShfX3VybmcsIF9fcGFyYW0pOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IF9fZ251X2N4eDo6dm9uX21pc2VzX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46Om1heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Lm11KCkgPDwgX19zcGFjZSA8PCBfX3gua2FwcGEoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIF9fZ251X2N4eDo6dm9uX21pc2VzX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfUmVhbFR5cGUgX19tdSwgX19rYXBwYTsKKyAgICAgIF9faXMgPj4gX19tdSA+PiBfX2thcHBhOworICAgICAgX194LnBhcmFtKHR5cGVuYW1lIF9fZ251X2N4eDo6dm9uX21pc2VzX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+OjoKKwkJcGFyYW1fdHlwZShfX211LCBfX2thcHBhKSk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworCisjZW5kaWYgLy8gX0VYVF9SQU5ET01fVENDCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9yYl90cmVlIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcmJfdHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzczZGFkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcmJfdHJlZQpAQCAtMCwwICsxLDk2IEBACisvLyByYl90cmVlIGV4dGVuc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NgorICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGV4dC9yYl90cmVlCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkgKHBvc3NpYmx5CisgKiAgY29udGFpbmluZyBleHRlbnNpb25zIGZyb20gdGhlIEhQL1NHSSBTVEwgc3Vic2V0KS4gCisgKi8KKworI2lmbmRlZiBfUkJfVFJFRQorI2RlZmluZSBfUkJfVFJFRSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvc3RsX3RyZWUuaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHVzaW5nIHN0ZDo6X1JiX3RyZWU7CisgIHVzaW5nIHN0ZDo6YWxsb2NhdG9yOworCisgIC8vIENsYXNzIHJiX3RyZWUgaXMgbm90IHBhcnQgb2YgdGhlIEMrKyBzdGFuZGFyZC4gIEl0IGlzIHByb3ZpZGVkIGZvcgorICAvLyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIEhQIFNUTC4KKworICAvKioKKyAgICogIFRoaXMgaXMgYW4gU0dJIGV4dGVuc2lvbi4KKyAgICogIEBpbmdyb3VwIFNHSWV4dGVuc2lvbnMKKyAgICogIEBkb2N0b2RvCisgICAqLworICB0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBhcmUsCisJICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBzdHJ1Y3QgcmJfdHJlZQorICAgIDogcHVibGljIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+CisgICAgeworICAgICAgdHlwZWRlZiBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworCisgICAgICByYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIH5yYl90cmVlKCkgeyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3JjX3N0cmluZ19iYXNlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9yY19zdHJpbmdfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNTY0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9yY19zdHJpbmdfYmFzZS5oCkBAIC0wLDAgKzEsNzMyIEBACisvLyBSZWZlcmVuY2UtY291bnRlZCB2ZXJzYXRpbGUgc3RyaW5nIGJhc2UgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9yY19zdHJpbmdfYmFzZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7ZXh0L3ZzdHJpbmcuaH0KKyAqLworCisjaWZuZGVmIF9SQ19TVFJJTkdfQkFTRV9ICisjZGVmaW5lIF9SQ19TVFJJTkdfQkFTRV9IIDEKKworI2luY2x1ZGUgPGV4dC9hdG9taWNpdHkuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIERvY3VtZW50YXRpb24/ICBXaGF0J3MgdGhhdD8KKyAgICogIE5hdGhhbiBNeWVycyA8bmNtQGNhbnRyaXAub3JnPi4KKyAgICoKKyAgICogIEEgc3RyaW5nIGxvb2tzIGxpa2UgdGhpczoKKyAgICoKKyAgICogIEBjb2RlCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfUmVwXQorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9sZW5ndGgKKyAgICogICBbX19yY19zdHJpbmdfYmFzZTxjaGFyX3R5cGU+XSAgICAgICAgX01fY2FwYWNpdHkKKyAgICogICBfTV9kYXRhcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgX01fcmVmY291bnQKKyAgICogICBfTV9wIC0tLS0tLS0tLS0tLS0tLS0+ICAgICAgICAgICAgICAgdW5uYW1lZCBhcnJheSBvZiBjaGFyX3R5cGUKKyAgICogIEBlbmRjb2RlCisgICAqCisgICAqICBXaGVyZSB0aGUgX01fcCBwb2ludHMgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLCBhbmQKKyAgICogIHlvdSBjYXN0IGl0IHRvIGEgcG9pbnRlci10by1fUmVwIGFuZCBzdWJ0cmFjdCAxIHRvIGdldCBhCisgICAqICBwb2ludGVyIHRvIHRoZSBoZWFkZXIuCisgICAqCisgICAqICBUaGlzIGFwcHJvYWNoIGhhcyB0aGUgZW5vcm1vdXMgYWR2YW50YWdlIHRoYXQgYSBzdHJpbmcgb2JqZWN0CisgICAqICByZXF1aXJlcyBvbmx5IG9uZSBhbGxvY2F0aW9uLiAgQWxsIHRoZSB1Z2xpbmVzcyBpcyBjb25maW5lZAorICAgKiAgd2l0aGluIGEgc2luZ2xlIHBhaXIgb2YgaW5saW5lIGZ1bmN0aW9ucywgd2hpY2ggZWFjaCBjb21waWxlIHRvCisgICAqICBhIHNpbmdsZSBAYSBhZGQgaW5zdHJ1Y3Rpb246IF9SZXA6Ol9NX3JlZmRhdGEoKSwgYW5kCisgICAqICBfX3JjX3N0cmluZ19iYXNlOjpfTV9yZXAoKTsgYW5kIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHdoaWNoIGdldHMgYQorICAgKiAgYmxvY2sgb2YgcmF3IGJ5dGVzIGFuZCB3aXRoIHJvb20gZW5vdWdoIGFuZCBjb25zdHJ1Y3RzIGEgX1JlcAorICAgKiAgb2JqZWN0IGF0IHRoZSBmcm9udC4KKyAgICoKKyAgICogIFRoZSByZWFzb24geW91IHdhbnQgX01fZGF0YSBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVyIGFycmF5IGFuZAorICAgKiAgbm90IHRoZSBfUmVwIGlzIHNvIHRoYXQgdGhlIGRlYnVnZ2VyIGNhbiBzZWUgdGhlIHN0cmluZworICAgKiAgY29udGVudHMuIChQcm9iYWJseSB3ZSBzaG91bGQgYWRkIGEgbm9uLWlubGluZSBtZW1iZXIgdG8gZ2V0CisgICAqICB0aGUgX1JlcCBmb3IgdGhlIGRlYnVnZ2VyIHRvIHVzZSwgc28gdXNlcnMgY2FuIGNoZWNrIHRoZSBhY3R1YWwKKyAgICogIHN0cmluZyBsZW5ndGguKQorICAgKgorICAgKiAgTm90ZSB0aGF0IHRoZSBfUmVwIG9iamVjdCBpcyBhIFBPRCBzbyB0aGF0IHlvdSBjYW4gaGF2ZSBhCisgICAqICBzdGF0aWMgPGVtPmVtcHR5IHN0cmluZzwvZW0+IF9SZXAgb2JqZWN0IGFscmVhZHkgQGEgY29uc3RydWN0ZWQgYmVmb3JlCisgICAqICBzdGF0aWMgY29uc3RydWN0b3JzIGhhdmUgcnVuLiAgVGhlIHJlZmVyZW5jZS1jb3VudCBlbmNvZGluZyBpcworICAgKiAgY2hvc2VuIHNvIHRoYXQgYSAwIGluZGljYXRlcyBvbmUgcmVmZXJlbmNlLCBzbyB5b3UgbmV2ZXIgdHJ5IHRvCisgICAqICBkZXN0cm95IHRoZSBlbXB0eS1zdHJpbmcgX1JlcCBvYmplY3QuCisgICAqCisgICAqICBBbGwgYnV0IHRoZSBsYXN0IHBhcmFncmFwaCBpcyBjb25zaWRlcmVkIHByZXR0eSBjb252ZW50aW9uYWwKKyAgICogIGZvciBhIEMrKyBzdHJpbmcgaW1wbGVtZW50YXRpb24uCisgICovCisgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX19yY19zdHJpbmdfYmFzZQorICAgIDogcHJvdGVjdGVkIF9fdnN0cmluZ191dGlsaXR5PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcmFpdHMJCQkJCSAgICB0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlCQkgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jCQkJCQkgICAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX192c3RyaW5nX3V0aWxpdHk8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ICAgIF9VdGlsX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9VdGlsX0Jhc2U6Ol9DaGFyVF9hbGxvY190eXBlICAgICAgICBfQ2hhclRfYWxsb2NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnNpemVfdHlwZQkgICAgc2l6ZV90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIF9SZXA6IHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgICAgLy8gICBJbnZhcmlhbnRzOgorICAgICAgLy8gICAxLiBTdHJpbmcgcmVhbGx5IGNvbnRhaW5zIF9NX2xlbmd0aCArIDEgY2hhcmFjdGVyczogZHVlIHRvIDIxLjMuNAorICAgICAgLy8gICAgICBtdXN0IGJlIGtlcHQgbnVsbC10ZXJtaW5hdGVkLgorICAgICAgLy8gICAyLiBfTV9jYXBhY2l0eSA+PSBfTV9sZW5ndGgKKyAgICAgIC8vICAgICAgQWxsb2NhdGVkIG1lbW9yeSBpcyBhbHdheXMgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKS4KKyAgICAgIC8vICAgMy4gX01fcmVmY291bnQgaGFzIHRocmVlIHN0YXRlczoKKyAgICAgIC8vICAgICAgLTE6IGxlYWtlZCwgb25lIHJlZmVyZW5jZSwgbm8gcmVmLWNvcGllcyBhbGxvd2VkLCBub24tY29uc3QuCisgICAgICAvLyAgICAgICAwOiBvbmUgcmVmZXJlbmNlLCBub24tY29uc3QuCisgICAgICAvLyAgICAgbj4wOiBuICsgMSByZWZlcmVuY2VzLCBvcGVyYXRpb25zIHJlcXVpcmUgYSBsb2NrLCBjb25zdC4KKyAgICAgIC8vICAgNC4gQWxsIGZpZWxkcyA9PSAwIGlzIGFuIGVtcHR5IHN0cmluZywgZ2l2ZW4gdGhlIGV4dHJhIHN0b3JhZ2UKKyAgICAgIC8vICAgICAgYmV5b25kLXRoZS1lbmQgZm9yIGEgbnVsbCB0ZXJtaW5hdG9yOyB0aHVzLCB0aGUgc2hhcmVkCisgICAgICAvLyAgICAgIGVtcHR5IHN0cmluZyByZXByZXNlbnRhdGlvbiBuZWVkcyBubyBjb25zdHJ1Y3Rvci4KKyAgICAgIHN0cnVjdCBfUmVwCisgICAgICB7CisJdW5pb24KKwl7CisJICBzdHJ1Y3QKKwkgIHsKKwkgICAgc2l6ZV90eXBlCSAgICBfTV9sZW5ndGg7CisJICAgIHNpemVfdHlwZQkgICAgX01fY2FwYWNpdHk7CisJICAgIF9BdG9taWNfd29yZCAgICBfTV9yZWZjb3VudDsKKwkgIH0gICAgICAgICAgICAgICAgIF9NX2luZm87CisKKwkgIC8vIE9ubHkgZm9yIGFsaWdubWVudCBwdXJwb3Nlcy4KKwkgIF9DaGFyVCAgICAgICAgICAgIF9NX2FsaWduOworCX07CisKKwl0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9SZXA+OjpvdGhlciBfUmVwX2FsbG9jX3R5cGU7CisKKyAJX0NoYXJUKgorCV9NX3JlZmRhdGEoKSB0aHJvdygpCisJeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0KKworCV9DaGFyVCoKKwlfTV9yZWZjb3B5KCkgdGhyb3coKQorCXsKKwkgIF9fYXRvbWljX2FkZF9kaXNwYXRjaCgmX01faW5mby5fTV9yZWZjb3VudCwgMSk7CisJICByZXR1cm4gX01fcmVmZGF0YSgpOworCX0gIC8vIFhYWCBNVAorCisJdm9pZAorCV9NX3NldF9sZW5ndGgoc2l6ZV90eXBlIF9fbikKKwl7CisJICBfTV9pbmZvLl9NX3JlZmNvdW50ID0gMDsgIC8vIE9uZSByZWZlcmVuY2UuCisJICBfTV9pbmZvLl9NX2xlbmd0aCA9IF9fbjsKKwkgIC8vIGdycnIuIChwZXIgMjEuMy40KQorCSAgLy8gWW91IGNhbm5vdCBsZWF2ZSB0aG9zZSBMV0cgcGVvcGxlIGFsb25lIGZvciBhIHNlY29uZC4KKwkgIHRyYWl0c190eXBlOjphc3NpZ24oX01fcmVmZGF0YSgpW19fbl0sIF9DaGFyVCgpKTsKKwl9CisKKwkvLyBDcmVhdGUgJiBEZXN0cm95CisJc3RhdGljIF9SZXAqCisJX1NfY3JlYXRlKHNpemVfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBfQWxsb2MmKTsKKworCXZvaWQKKwlfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7CisKKwlfQ2hhclQqCisJX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CisgICAgICB9OworCisgICAgICBzdHJ1Y3QgX1JlcF9lbXB0eQorICAgICAgOiBwdWJsaWMgX1JlcAorICAgICAgeworCV9DaGFyVCAgICAgICAgICAgICAgX01fdGVybWluYWw7CisgICAgICB9OworCisgICAgICBzdGF0aWMgX1JlcF9lbXB0eSAgICAgX1NfZW1wdHlfcmVwOworCisgICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5kaXZpZHVhbCBjaGFyX3R5cGUgZWxlbWVudHMgb2YgYW4KKyAgICAgIC8vIGluZGl2aWR1YWwgc3RyaW5nIGlzIGRldGVybWluZWQgYnkgX1NfbWF4X3NpemUuIFRoaXMgaXMgdGhlCisgICAgICAvLyB2YWx1ZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgYnkgbWF4X3NpemUoKS4gIChXaGVyZWFzIG5wb3MKKyAgICAgIC8vIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGUgYWxsb2NhdG9yIGNhbiBhbGxvY2F0ZS4pCisgICAgICAvLyBJZiBvbmUgd2FzIHRvIGRpdnZ5IHVwIHRoZSB0aGVvcmV0aWNhbCBsYXJnZXN0IHNpemUgc3RyaW5nLAorICAgICAgLy8gd2l0aCBhIHRlcm1pbmF0aW5nIGNoYXJhY3RlciBhbmQgbSBfQ2hhclQgZWxlbWVudHMsIGl0J2QKKyAgICAgIC8vIGxvb2sgbGlrZSB0aGlzOgorICAgICAgLy8gbnBvcyA9IHNpemVvZihfUmVwKSArIChtICogc2l6ZW9mKF9DaGFyVCkpICsgc2l6ZW9mKF9DaGFyVCkKKyAgICAgIC8vICAgICAgICArIHNpemVvZihfUmVwKSAtIDEKKyAgICAgIC8vIChOQjogbGFzdCB0d28gdGVybXMgZm9yIHJvdW5kaW5nIHJlYXNvbnMsIHNlZSBfTV9jcmVhdGUgYmVsb3cpCisgICAgICAvLyBTb2x2aW5nIGZvciBtOgorICAgICAgLy8gbSA9ICgobnBvcyAtIDIgKiBzaXplb2YoX1JlcCkgKyAxKSAvIHNpemVvZihfQ2hhclQpKSAtIDEKKyAgICAgIC8vIEluIGFkZGl0aW9uLCB0aGlzIGltcGxlbWVudGF0aW9uIGhhbHZlcyB0aGlzIGFtb3VudC4KKyAgICAgIGVudW0geyBfU19tYXhfc2l6ZSA9ICgoKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpIC0gMiAqIHNpemVvZihfUmVwKQorCQkJICAgICAgKyAxKSAvIHNpemVvZihfQ2hhclQpKSAtIDEpIC8gMiB9OworCisgICAgICAvLyBEYXRhIE1lbWJlciAocHJpdmF0ZSk6CisgICAgICBtdXRhYmxlIHR5cGVuYW1lIF9VdGlsX0Jhc2U6OnRlbXBsYXRlIF9BbGxvY19oaWRlcjxfQWxsb2M+ICBfTV9kYXRhcGx1czsKKworICAgICAgdm9pZAorICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKKyAgICAgIHsgX01fZGF0YXBsdXMuX01fcCA9IF9fcDsgfQorCisgICAgICBfUmVwKgorICAgICAgX01fcmVwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KF9NX2RhdGEoKSkpWy0xXSk7IH0KKworICAgICAgX0NoYXJUKgorICAgICAgX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MpIGNvbnN0CisgICAgICB7CisJcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX01fZ2V0X2FsbG9jYXRvcigpID09IF9fYWxsb2MpCisJCT8gX01fcmVwKCktPl9NX3JlZmNvcHkoKSA6IF9NX3JlcCgpLT5fTV9jbG9uZShfX2FsbG9jKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZGlzcG9zZSgpCisgICAgICB7CisJLy8gQmUgcmFjZS1kZXRlY3Rvci1mcmllbmRseS4gIEZvciBtb3JlIGluZm8gc2VlIGJpdHMvYysrY29uZmlnLgorCV9HTElCQ1hYX1NZTkNIUk9OSVpBVElPTl9IQVBQRU5TX0JFRk9SRSgmX01fcmVwKCktPl9NX2luZm8uCisJCQkJCQlfTV9yZWZjb3VudCk7CisJaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fcmVwKCktPl9NX2luZm8uX01fcmVmY291bnQsCisJCQkJCS0xKSA8PSAwKQorCSAgeworCSAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19BRlRFUigmX01fcmVwKCktPl9NX2luZm8uCisJCQkJCQkgICBfTV9yZWZjb3VudCk7CisJICAgIF9NX3JlcCgpLT5fTV9kZXN0cm95KF9NX2dldF9hbGxvY2F0b3IoKSk7CisJICB9CisgICAgICB9ICAvLyBYWFggTVQKKworICAgICAgYm9vbAorICAgICAgX01faXNfbGVha2VkKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9pbmZvLl9NX3JlZmNvdW50IDwgMDsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfc2hhcmFibGUoKQorICAgICAgeyBfTV9yZXAoKS0+X01faW5mby5fTV9yZWZjb3VudCA9IDA7IH0KKworICAgICAgdm9pZAorICAgICAgX01fbGVha19oYXJkKCk7CisKKyAgICAgIC8vIF9TX2NvbnN0cnVjdF9hdXggaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIDIxLjMuMSBwYXJhIDE1IHdoaWNoCisgICAgICAvLyByZXF1aXJlcyBzcGVjaWFsIGJlaGF2aW91ciBpZiBfSW5JdGVyYXRvciBpcyBhbiBpbnRlZ3JhbCB0eXBlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKwlzdGF0aWMgX0NoYXJUKgorCV9TX2NvbnN0cnVjdF9hdXgoX0luSXRlcmF0b3IgX19iZWcsIF9Jbkl0ZXJhdG9yIF9fZW5kLAorCQkJIGNvbnN0IF9BbGxvYyYgX19hLCBzdGQ6Ol9fZmFsc2VfdHlwZSkKKwl7CisJICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CisJICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOworCX0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisJc3RhdGljIF9DaGFyVCoKKwlfU19jb25zdHJ1Y3RfYXV4KF9JbnRlZ2VyIF9fYmVnLCBfSW50ZWdlciBfX2VuZCwKKwkJCSBjb25zdCBfQWxsb2MmIF9fYSwgc3RkOjpfX3RydWVfdHlwZSkKKwl7IHJldHVybiBfU19jb25zdHJ1Y3RfYXV4XzIoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksCisJCQkJICAgIF9fZW5kLCBfX2EpOyB9CisKKyAgICAgIHN0YXRpYyBfQ2hhclQqCisgICAgICBfU19jb25zdHJ1Y3RfYXV4XzIoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICAgIHsgcmV0dXJuIF9TX2NvbnN0cnVjdChfX3JlcSwgX19jLCBfX2EpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXJhdG9yPgorCXN0YXRpYyBfQ2hhclQqCisJX1NfY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCisJeworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5JdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOworCX0KKworICAgICAgLy8gRm9yIElucHV0IEl0ZXJhdG9ycywgdXNlZCBpbiBpc3RyZWFtYnVmX2l0ZXJhdG9ycywgZXRjLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisJc3RhdGljIF9DaGFyVCoKKwkgX1NfY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCisJCSAgICAgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgLy8gRm9yIGZvcndhcmRfaXRlcmF0b3JzIHVwIHRvIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JzLCB1c2VkIGZvcgorICAgICAgLy8gc3RyaW5nOjppdGVyYXRvciwgX0NoYXJUKiwgZXRjLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z3ZEl0ZXJhdG9yPgorCXN0YXRpYyBfQ2hhclQqCisJX1NfY29uc3RydWN0KF9Gd2RJdGVyYXRvciBfX2JlZywgX0Z3ZEl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkJICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKTsKKworICAgICAgc3RhdGljIF9DaGFyVCoKKyAgICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZV90eXBlKF9TX21heF9zaXplKTsgfQorCisgICAgICBfQ2hhclQqCisgICAgICBfTV9kYXRhKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9sZW5ndGgoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmVwKCktPl9NX2luZm8uX01fbGVuZ3RoOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fY2FwYWNpdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmVwKCktPl9NX2luZm8uX01fY2FwYWNpdHk7IH0KKworICAgICAgYm9vbAorICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9pbmZvLl9NX3JlZmNvdW50ID4gMDsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfbGVha2VkKCkKKyAgICAgIHsgX01fcmVwKCktPl9NX2luZm8uX01fcmVmY291bnQgPSAtMTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9sZWFrKCkgICAgLy8gZm9yIHVzZSBpbiBiZWdpbigpICYgbm9uLWNvbnN0IG9wW10KKyAgICAgIHsKKwlpZiAoIV9NX2lzX2xlYWtlZCgpKQorCSAgX01fbGVha19oYXJkKCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldF9sZW5ndGgoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgX01fcmVwKCktPl9NX3NldF9sZW5ndGgoX19uKTsgfQorCisgICAgICBfX3JjX3N0cmluZ19iYXNlKCkKKyAgICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwLl9NX3JlZmNvcHkoKSkgeyB9CisKKyAgICAgIF9fcmNfc3RyaW5nX2Jhc2UoY29uc3QgX0FsbG9jJiBfX2EpOworCisgICAgICBfX3JjX3N0cmluZ19iYXNlKGNvbnN0IF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIF9fcmNfc3RyaW5nX2Jhc2UoX19yY19zdHJpbmdfYmFzZSYmIF9fcmNzKQorICAgICAgOiBfTV9kYXRhcGx1cyhfX3Jjcy5fTV9kYXRhcGx1cykKKyAgICAgIHsgX19yY3MuX01fZGF0YShfU19lbXB0eV9yZXAuX01fcmVmY29weSgpKTsgfQorI2VuZGlmCisKKyAgICAgIF9fcmNfc3RyaW5nX2Jhc2Uoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwlfX3JjX3N0cmluZ19iYXNlKF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKKwkJCSBjb25zdCBfQWxsb2MmIF9fYSk7CisKKyAgICAgIH5fX3JjX3N0cmluZ19iYXNlKCkKKyAgICAgIHsgX01fZGlzcG9zZSgpOyB9CisKKyAgICAgIGFsbG9jYXRvcl90eXBlJgorICAgICAgX01fZ2V0X2FsbG9jYXRvcigpCisgICAgICB7IHJldHVybiBfTV9kYXRhcGx1czsgfQorCisgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYKKyAgICAgIF9NX2dldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3dhcChfX3JjX3N0cmluZ19iYXNlJiBfX3Jjcyk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbihjb25zdCBfX3JjX3N0cmluZ19iYXNlJiBfX3Jjcyk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3Jlc2VydmUoc2l6ZV90eXBlIF9fcmVzKTsKKworICAgICAgdm9pZAorICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJCXNpemVfdHlwZSBfX2xlbjIpOworCisgICAgICB2b2lkCisgICAgICBfTV9lcmFzZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOworCisgICAgICB2b2lkCisgICAgICBfTV9jbGVhcigpCisgICAgICB7IF9NX2VyYXNlKHNpemVfdHlwZSgwKSwgX01fbGVuZ3RoKCkpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2NvbXBhcmUoY29uc3QgX19yY19zdHJpbmdfYmFzZSYpIGNvbnN0CisgICAgICB7IHJldHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdHlwZW5hbWUgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXBfZW1wdHkKKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHR5cGVuYW1lIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKKyAgICBfU19jcmVhdGUoc2l6ZV90eXBlIF9fY2FwYWNpdHksIHNpemVfdHlwZSBfX29sZF9jYXBhY2l0eSwKKwkgICAgICBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gODMuICBTdHJpbmc6Om5wb3MgdnMuIHN0cmluZzo6bWF4X3NpemUoKQorICAgICAgaWYgKF9fY2FwYWNpdHkgPiBzaXplX3R5cGUoX1NfbWF4X3NpemUpKQorCXN0ZDo6X190aHJvd19sZW5ndGhfZXJyb3IoX19OKCJfX3JjX3N0cmluZ19iYXNlOjpfUmVwOjpfU19jcmVhdGUiKSk7CisKKyAgICAgIC8vIFRoZSBzdGFuZGFyZCBwbGFjZXMgbm8gcmVzdHJpY3Rpb24gb24gYWxsb2NhdGluZyBtb3JlIG1lbW9yeQorICAgICAgLy8gdGhhbiBpcyBzdHJpY3RseSBuZWVkZWQgd2l0aGluIHRoaXMgbGF5ZXIgYXQgdGhlIG1vbWVudCBvciBhcworICAgICAgLy8gcmVxdWVzdGVkIGJ5IGFuIGV4cGxpY2l0IGFwcGxpY2F0aW9uIGNhbGwgdG8gcmVzZXJ2ZSgpLgorCisgICAgICAvLyBNYW55IG1hbGxvYyBpbXBsZW1lbnRhdGlvbnMgcGVyZm9ybSBxdWl0ZSBwb29ybHkgd2hlbiBhbgorICAgICAgLy8gYXBwbGljYXRpb24gYXR0ZW1wdHMgdG8gYWxsb2NhdGUgbWVtb3J5IGluIGEgc3RlcHdpc2UgZmFzaGlvbgorICAgICAgLy8gZ3Jvd2luZyBlYWNoIGFsbG9jYXRpb24gc2l6ZSBieSBvbmx5IDEgY2hhci4gIEFkZGl0aW9uYWxseSwKKyAgICAgIC8vIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byBhbGxvY2F0ZSBsZXNzIGxpbmVhciBtZW1vcnkgdGhhbiB0aGUKKyAgICAgIC8vIG5hdHVyYWwgYmxvY2tpbmcgc2l6ZSBvZiB0aGUgbWFsbG9jIGltcGxlbWVudGF0aW9uLgorICAgICAgLy8gVW5mb3J0dW5hdGVseSwgd2Ugd291bGQgbmVlZCBhIHNvbWV3aGF0IGxvdy1sZXZlbCBjYWxjdWxhdGlvbgorICAgICAgLy8gd2l0aCB0dW5lZCBwYXJhbWV0ZXJzIHRvIGdldCB0aGlzIHBlcmZlY3QgZm9yIGFueSBwYXJ0aWN1bGFyCisgICAgICAvLyBtYWxsb2MgaW1wbGVtZW50YXRpb24uICBGb3J0dW5hdGVseSwgZ2VuZXJhbGl6YXRpb25zIGFib3V0CisgICAgICAvLyBjb21tb24gZmVhdHVyZXMgc2VlbiBhbW9uZyBpbXBsZW1lbnRhdGlvbnMgc2VlbXMgdG8gc3VmZmljZS4KKworICAgICAgLy8gX19wYWdlc2l6ZSBuZWVkIG5vdCBtYXRjaCB0aGUgYWN0dWFsIFZNIHBhZ2Ugc2l6ZSBmb3IgZ29vZAorICAgICAgLy8gcmVzdWx0cyBpbiBwcmFjdGljZSwgdGh1cyB3ZSBwaWNrIGEgY29tbW9uIHZhbHVlIG9uIHRoZSBsb3cKKyAgICAgIC8vIHNpZGUuICBfX21hbGxvY19oZWFkZXJfc2l6ZSBpcyBhbiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mCisgICAgICAvLyBvdmVyaGVhZCBwZXIgbWVtb3J5IGFsbG9jYXRpb24gKGluIHByYWN0aWNlIHNlZW4gTiAqIHNpemVvZgorICAgICAgLy8gKHZvaWQqKSB3aGVyZSBOIGlzIDAsIDIgb3IgNCkuICBBY2NvcmRpbmcgdG8gZm9sa2xvcmUsCisgICAgICAvLyBwaWNraW5nIHRoaXMgdmFsdWUgb24gdGhlIGhpZ2ggc2lkZSBpcyBiZXR0ZXIgdGhhbgorICAgICAgLy8gbG93LWJhbGxpbmcgaXQgKGVzcGVjaWFsbHkgd2hlbiB0aGlzIGFsZ29yaXRobSBpcyB1c2VkIHdpdGgKKyAgICAgIC8vIG1hbGxvYyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhbGxvY2F0ZSBtZW1vcnkgYmxvY2tzIHJvdW5kZWQgdXAKKyAgICAgIC8vIHRvIGEgc2l6ZSB3aGljaCBpcyBhIHBvd2VyIG9mIDIpLgorICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZih2b2lkKik7CisKKyAgICAgIC8vIFRoZSBiZWxvdyBpbXBsZW1lbnRzIGFuIGV4cG9uZW50aWFsIGdyb3d0aCBwb2xpY3ksIG5lY2Vzc2FyeSB0bworICAgICAgLy8gbWVldCBhbW9ydGl6ZWQgbGluZWFyIHRpbWUgcmVxdWlyZW1lbnRzIG9mIHRoZSBsaWJyYXJ5OiBzZWUKKyAgICAgIC8vIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9saWJzdGRjKysvMjAwMS0wNy9tc2cwMDA4NS5odG1sLgorICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfX29sZF9jYXBhY2l0eSAmJiBfX2NhcGFjaXR5IDwgMiAqIF9fb2xkX2NhcGFjaXR5KQorCXsKKwkgIF9fY2FwYWNpdHkgPSAyICogX19vbGRfY2FwYWNpdHk7CisJICAvLyBOZXZlciBhbGxvY2F0ZSBhIHN0cmluZyBiaWdnZXIgdGhhbiBfU19tYXhfc2l6ZS4KKwkgIGlmIChfX2NhcGFjaXR5ID4gc2l6ZV90eXBlKF9TX21heF9zaXplKSkKKwkgICAgX19jYXBhY2l0eSA9IHNpemVfdHlwZShfU19tYXhfc2l6ZSk7CisJfQorCisgICAgICAvLyBOQjogTmVlZCBhbiBhcnJheSBvZiBjaGFyX3R5cGVbX19jYXBhY2l0eV0sIHBsdXMgYSB0ZXJtaW5hdGluZworICAgICAgLy8gbnVsbCBjaGFyX3R5cGUoKSBlbGVtZW50LCBwbHVzIGVub3VnaCBmb3IgdGhlIF9SZXAgZGF0YSBzdHJ1Y3R1cmUsCisgICAgICAvLyBwbHVzIHNpemVvZihfUmVwKSAtIDEgdG8gdXBwZXIgcm91bmQgdG8gYSBzaXplIG11bHRpcGxlIG9mCisgICAgICAvLyBzaXplb2YoX1JlcCkuCisgICAgICAvLyBXaGV3LiBTZWVtaW5nbHkgc28gbmVlZHksIHlldCBzbyBlbGVtZW50YWwuCisgICAgICBzaXplX3R5cGUgX19zaXplID0gKChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKQorCQkJICArIDIgKiBzaXplb2YoX1JlcCkgLSAxKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fYWRqX3NpemUgPSBfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZTsKKyAgICAgIGlmIChfX2Fkal9zaXplID4gX19wYWdlc2l6ZSAmJiBfX2NhcGFjaXR5ID4gX19vbGRfY2FwYWNpdHkpCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fZXh0cmEgPSBfX3BhZ2VzaXplIC0gX19hZGpfc2l6ZSAlIF9fcGFnZXNpemU7CisJICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsKKwkgIGlmIChfX2NhcGFjaXR5ID4gc2l6ZV90eXBlKF9TX21heF9zaXplKSkKKwkgICAgX19jYXBhY2l0eSA9IHNpemVfdHlwZShfU19tYXhfc2l6ZSk7CisJICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyAyICogc2l6ZW9mKF9SZXApIC0gMTsKKwl9CisKKyAgICAgIC8vIE5COiBNaWdodCB0aHJvdywgYnV0IG5vIHdvcnJpZXMgYWJvdXQgYSBsZWFrLCBtYXRlOiBfUmVwKCkKKyAgICAgIC8vIGRvZXMgbm90IHRocm93LgorICAgICAgX1JlcCogX19wbGFjZSA9IF9SZXBfYWxsb2NfdHlwZShfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUgLyBzaXplb2YoX1JlcCkpOworICAgICAgX1JlcCogX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOworICAgICAgX19wLT5fTV9pbmZvLl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKKyAgICAgIHJldHVybiBfX3A7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CisgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gKChfTV9pbmZvLl9NX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKQorCQkJCSsgMiAqIHNpemVvZihfUmVwKSAtIDEpOworICAgICAgX1JlcF9hbGxvY190eXBlKF9fYSkuZGVhbGxvY2F0ZSh0aGlzLCBfX3NpemUgLyBzaXplb2YoX1JlcCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfQ2hhclQqCisgICAgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgorICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQorICAgIHsKKyAgICAgIC8vIFJlcXVlc3RlZCBjYXBhY2l0eSBvZiB0aGUgY2xvbmUuCisgICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2FwID0gX01faW5mby5fTV9sZW5ndGggKyBfX3JlczsKKyAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9NX2luZm8uX01fY2FwYWNpdHksCisJCQkJICBfX2FsbG9jKTsKKworICAgICAgaWYgKF9NX2luZm8uX01fbGVuZ3RoKQorCV9fcmNfc3RyaW5nX2Jhc2U6Ol9TX2NvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01faW5mby5fTV9sZW5ndGgpOworCisgICAgICBfX3ItPl9NX3NldF9sZW5ndGgoX01faW5mby5fTV9sZW5ndGgpOworICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX19yY19zdHJpbmdfYmFzZShjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9fYSwgX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSkgeyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9fcmNfc3RyaW5nX2Jhc2UoY29uc3QgX19yY19zdHJpbmdfYmFzZSYgX19yY3MpCisgICAgOiBfTV9kYXRhcGx1cyhfX3Jjcy5fTV9nZXRfYWxsb2NhdG9yKCksCisJCSAgX19yY3MuX01fZ3JhYihfX3Jjcy5fTV9nZXRfYWxsb2NhdG9yKCkpKSB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX19yY19zdHJpbmdfYmFzZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9fYSwgX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpKSB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX19yY19zdHJpbmdfYmFzZShfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCisJCSAgICAgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgOiBfTV9kYXRhcGx1cyhfX2EsIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSkpIHsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fbGVha19oYXJkKCkKKyAgICB7CisgICAgICBpZiAoX01faXNfc2hhcmVkKCkpCisJX01fZXJhc2UoMCwgMCk7CisgICAgICBfTV9zZXRfbGVha2VkKCk7CisgICAgfQorCisgIC8vIE5COiBUaGlzIGlzIHRoZSBzcGVjaWFsIGNhc2UgZm9yIElucHV0IEl0ZXJhdG9ycywgdXNlZCBpbgorICAvLyBpc3RyZWFtYnVmX2l0ZXJhdG9ycywgZXRjLgorICAvLyBJbnB1dCBJdGVyYXRvcnMgaGF2ZSBhIGNvc3Qgc3RydWN0dXJlIHZlcnkgZGlmZmVyZW50IGZyb20KKyAgLy8gcG9pbnRlcnMsIGNhbGxpbmcgZm9yIGEgZGlmZmVyZW50IGNvZGluZyBzdHlsZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisgICAgICBfQ2hhclQqCisgICAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlcmF0b3IgX19iZWcsIF9Jbkl0ZXJhdG9yIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkJICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKKwkgIHJldHVybiBfU19lbXB0eV9yZXAuX01fcmVmY29weSgpOworCisJLy8gQXZvaWQgcmVhbGxvY2F0aW9uIGZvciBjb21tb24gY2FzZS4KKwlfQ2hhclQgX19idWZbMTI4XTsKKwlzaXplX3R5cGUgX19sZW4gPSAwOworCXdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2xlbiA8IHNpemVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKKwkgIHsKKwkgICAgX19idWZbX19sZW4rK10gPSAqX19iZWc7CisJICAgICsrX19iZWc7CisJICB9CisJX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuLCBzaXplX3R5cGUoMCksIF9fYSk7CisJX1NfY29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9fbGVuKTsKKwlfX3RyeQorCSAgeworCSAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCisJICAgICAgeworCQlpZiAoX19sZW4gPT0gX19yLT5fTV9pbmZvLl9NX2NhcGFjaXR5KQorCQkgIHsKKwkJICAgIC8vIEFsbG9jYXRlIG1vcmUgc3BhY2UuCisJCSAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2xlbiwgX19hKTsKKwkJICAgIF9TX2NvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CisJCSAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKKwkJICAgIF9fciA9IF9fYW5vdGhlcjsKKwkJICB9CisJCV9fci0+X01fcmVmZGF0YSgpW19fbGVuKytdID0gKl9fYmVnOworCQkrK19fYmVnOworCSAgICAgIH0KKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorCV9fci0+X01fc2V0X2xlbmd0aChfX2xlbik7CisJcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXJhdG9yPgorICAgICAgX0NoYXJUKgorICAgICAgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCisJCSAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKKwkgIHJldHVybiBfU19lbXB0eV9yZXAuX01fcmVmY29weSgpOworCisJLy8gTkI6IE5vdCByZXF1aXJlZCwgYnV0IGNvbnNpZGVyZWQgYmVzdCBwcmFjdGljZS4KKwlpZiAoX19pc19udWxsX3BvaW50ZXIoX19iZWcpICYmIF9fYmVnICE9IF9fZW5kKQorCSAgc3RkOjpfX3Rocm93X2xvZ2ljX2Vycm9yKF9fTigiX19yY19zdHJpbmdfYmFzZTo6IgorCQkJCSAgICAgICAiX1NfY29uc3RydWN0IG51bGwgbm90IHZhbGlkIikpOworCisJY29uc3Qgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpkaXN0YW5jZShfX2JlZywKKwkJCQkJCQkJICAgICAgX19lbmQpKTsKKwkvLyBDaGVjayBmb3Igb3V0X29mX3JhbmdlIGFuZCBsZW5ndGhfZXJyb3IgZXhjZXB0aW9ucy4KKwlfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19kbmV3LCBzaXplX3R5cGUoMCksIF9fYSk7CisJX190cnkKKwkgIHsgX19yY19zdHJpbmdfYmFzZTo6X1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisJX19yLT5fTV9zZXRfbGVuZ3RoKF9fZG5ldyk7CisJcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9DaGFyVCoKKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgIHsKKyAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCisJcmV0dXJuIF9TX2VtcHR5X3JlcC5fTV9yZWZjb3B5KCk7CisKKyAgICAgIC8vIENoZWNrIGZvciBvdXRfb2ZfcmFuZ2UgYW5kIGxlbmd0aF9lcnJvciBleGNlcHRpb25zLgorICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgc2l6ZV90eXBlKDApLCBfX2EpOworICAgICAgaWYgKF9fbikKKwlfX3JjX3N0cmluZ19iYXNlOjpfU19hc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsKKworICAgICAgX19yLT5fTV9zZXRfbGVuZ3RoKF9fbik7CisgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fc3dhcChfX3JjX3N0cmluZ19iYXNlJiBfX3JjcykKKyAgICB7CisgICAgICBpZiAoX01faXNfbGVha2VkKCkpCisJX01fc2V0X3NoYXJhYmxlKCk7CisgICAgICBpZiAoX19yY3MuX01faXNfbGVha2VkKCkpCisJX19yY3MuX01fc2V0X3NoYXJhYmxlKCk7CisKKyAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CisgICAgICBfTV9kYXRhKF9fcmNzLl9NX2RhdGEoKSk7CisgICAgICBfX3Jjcy5fTV9kYXRhKF9fdG1wKTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDMxLiBTd2FwcGluZyBjb250YWluZXJzIHdpdGggdW5lcXVhbCBhbGxvY2F0b3JzLgorICAgICAgc3RkOjpfX2FsbG9jX3N3YXA8YWxsb2NhdG9yX3R5cGU+OjpfU19kb19pdChfTV9nZXRfYWxsb2NhdG9yKCksCisJCQkJCQkgIF9fcmNzLl9NX2dldF9hbGxvY2F0b3IoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfX3JjX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fYXNzaWduKGNvbnN0IF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKQorICAgIHsKKyAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3Jjcy5fTV9yZXAoKSkKKwl7CisJICBfQ2hhclQqIF9fdG1wID0gX19yY3MuX01fZ3JhYihfTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgX01fZGlzcG9zZSgpOworCSAgX01fZGF0YShfX3RtcCk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX3Jlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQorICAgIHsKKyAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBzaHJpbmsgYmVsb3cgdGhlIGN1cnJlbnQgc2l6ZS4KKyAgICAgIGlmIChfX3JlcyA8IF9NX2xlbmd0aCgpKQorCV9fcmVzID0gX01fbGVuZ3RoKCk7CisKKyAgICAgIGlmIChfX3JlcyAhPSBfTV9jYXBhY2l0eSgpIHx8IF9NX2lzX3NoYXJlZCgpKQorCXsKKwkgIF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX01fZ2V0X2FsbG9jYXRvcigpLAorCQkJCQkgICAgIF9fcmVzIC0gX01fbGVuZ3RoKCkpOworCSAgX01fZGlzcG9zZSgpOworCSAgX01fZGF0YShfX3RtcCk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX19yY19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICAgIHNpemVfdHlwZSBfX2xlbjIpCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfTV9sZW5ndGgoKSAtIF9fcG9zIC0gX19sZW4xOworCisgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX01fbGVuZ3RoKCkgKyBfX2xlbjIgLSBfX2xlbjEsCisJCQkJICBfTV9jYXBhY2l0eSgpLCBfTV9nZXRfYWxsb2NhdG9yKCkpOworCisgICAgICBpZiAoX19wb3MpCisJdGhpcy0+X1NfY29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CisgICAgICBpZiAoX19zICYmIF9fbGVuMikKKwl0aGlzLT5fU19jb3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4yKTsKKyAgICAgIGlmIChfX2hvd19tdWNoKQorCXRoaXMtPl9TX2NvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKKwkJX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjEsIF9faG93X211Y2gpOworCisgICAgICBfTV9kaXNwb3NlKCk7CisgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fcmNfc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9lcmFzZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfTV9sZW5ndGgoKSAtIF9fbjsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX01fbGVuZ3RoKCkgLSBfX3BvcyAtIF9fbjsKKworICAgICAgaWYgKF9NX2lzX3NoYXJlZCgpKQorCXsKKwkgIC8vIE11c3QgcmVhbGxvY2F0ZS4KKwkgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfTV9jYXBhY2l0eSgpLAorCQkJCSAgICAgIF9NX2dldF9hbGxvY2F0b3IoKSk7CisKKwkgIGlmIChfX3BvcykKKwkgICAgdGhpcy0+X1NfY29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CisJICBpZiAoX19ob3dfbXVjaCkKKwkgICAgdGhpcy0+X1NfY29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zLAorCQkgICAgX01fZGF0YSgpICsgX19wb3MgKyBfX24sIF9faG93X211Y2gpOworCisJICBfTV9kaXNwb3NlKCk7CisJICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKKwl9CisgICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbikKKwl7CisJICAvLyBXb3JrIGluLXBsYWNlLgorCSAgdGhpcy0+X1NfbW92ZShfTV9kYXRhKCkgKyBfX3BvcywKKwkJICBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbiwgX19ob3dfbXVjaCk7CisJfQorCisgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlbmd0aChfX25ld19zaXplKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBib29sCisgICAgX19yY19zdHJpbmdfYmFzZTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LAorCQkgICAgIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID46OgorICAgIF9NX2NvbXBhcmUoY29uc3QgX19yY19zdHJpbmdfYmFzZSYgX19yY3MpIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX3JlcCgpID09IF9fcmNzLl9NX3JlcCgpKQorCXJldHVybiB0cnVlOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fcmNfc3RyaW5nX2Jhc2U8d2NoYXJfdCwgc3RkOjpjaGFyX3RyYWl0czx3Y2hhcl90PiwKKwkJICAgICBzdGQ6OmFsbG9jYXRvcjx3Y2hhcl90PiA+OjoKKyAgICBfTV9jb21wYXJlKGNvbnN0IF9fcmNfc3RyaW5nX2Jhc2UmIF9fcmNzKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfTV9yZXAoKSA9PSBfX3Jjcy5fTV9yZXAoKSkKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX1JDX1NUUklOR19CQVNFX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3JvcGUgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9yb3BlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWIxZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9yb3BlCkBAIC0wLDAgKzEsMjk3NiBAQAorLy8gU0dJJ3Mgcm9wZSBjbGFzcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgZXh0L3JvcGUKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeSAocG9zc2libHkKKyAqICBjb250YWluaW5nIGV4dGVuc2lvbnMgZnJvbSB0aGUgSFAvU0dJIFNUTCBzdWJzZXQpLiAKKyAqLworCisjaWZuZGVmIF9ST1BFCisjZGVmaW5lIF9ST1BFIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9jb25zdHJ1Y3QuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF91bmluaXRpYWxpemVkLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9udW1lcmljLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKworIyBpZmRlZiBfX0dDCisjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyMgZWxzZQorIyAgIGRlZmluZSBfX0dDX0NPTlNUICAgLy8gY29uc3RhbnQgZXhjZXB0IGZvciBkZWFsbG9jYXRpb24KKyMgZW5kaWYKKworI2luY2x1ZGUgPGV4dC9tZW1vcnk+IC8vIEZvciB1bmluaXRpYWxpemVkX2NvcHlfbgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKyAgICBlbnVtIHsgX1NfbWF4X3JvcGVfZGVwdGggPSA0NSB9OworICAgIGVudW0gX1RhZyB7X1NfbGVhZiwgX1NfY29uY2F0LCBfU19zdWJzdHJpbmdmbiwgX1NfZnVuY3Rpb259OworICB9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworICB1c2luZyBzdGQ6OnB0cmRpZmZfdDsKKyAgdXNpbmcgc3RkOjphbGxvY2F0b3I7CisgIHVzaW5nIHN0ZDo6X0Rlc3Ryb3k7CisKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gU2VlIGxpYnN0ZGMrKy8zNjgzMi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICB2b2lkCisgICAgX0Rlc3Ryb3lfY29uc3QoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAorCQkgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX0FsbG9jYXRvciBfX2FsbG9jKQorICAgIHsKKyAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQorCV9fYWxsb2MuZGVzdHJveSgmKl9fZmlyc3QpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICBfRGVzdHJveV9jb25zdChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCisJCSAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBhbGxvY2F0b3I8X1RwPikKKyAgICB7IF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAvLyBUaGUgX1NfZW9zIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0CisgIC8vIGNvbnZlcnQgdG8vZnJvbSBDLWxpa2Ugc3RyaW5ncyB0byBkZXRlY3QgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorICAKKyAgLy8gVGhlIGVuZC1vZi1DLXN0cmluZyBjaGFyYWN0ZXIuCisgIC8vIFRoaXMgaXMgd2hhdCB0aGUgZHJhZnQgc3RhbmRhcmQgc2F5cyBpdCBzaG91bGQgYmUuCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQ+CisgICAgaW5saW5lIF9DaGFyVAorICAgIF9TX2VvcyhfQ2hhclQqKQorICAgIHsgcmV0dXJuIF9DaGFyVCgpOyB9CisKKyAgLy8gVGVzdCBmb3IgYmFzaWMgY2hhcmFjdGVyIHR5cGVzLgorICAvLyBGb3IgYmFzaWMgY2hhcmFjdGVyIHR5cGVzIGxlYXZlcyBoYXZpbmcgYSB0cmFpbGluZyBlb3MuCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBfU19pc19iYXNpY19jaGFyX3R5cGUoX0NoYXJUKikKKyAgICB7IHJldHVybiBmYWxzZTsgfQorICAKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVD4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9TX2lzX29uZV9ieXRlX2NoYXJfdHlwZShfQ2hhclQqKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgX1NfaXNfYmFzaWNfY2hhcl90eXBlKGNoYXIqKQorICB7IHJldHVybiB0cnVlOyB9CisgIAorICBpbmxpbmUgYm9vbAorICBfU19pc19vbmVfYnl0ZV9jaGFyX3R5cGUoY2hhciopCisgIHsgcmV0dXJuIHRydWU7IH0KKyAgCisgIGlubGluZSBib29sCisgIF9TX2lzX2Jhc2ljX2NoYXJfdHlwZSh3Y2hhcl90KikKKyAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIC8vIFN0b3JlIGFuIGVvcyBpZmYgX0NoYXJUIGlzIGEgYmFzaWMgY2hhcmFjdGVyIHR5cGUuCisgIC8vIERvIG5vdCByZWZlcmVuY2UgX1NfZW9zIGlmIGl0IGlzbid0LgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJUPgorICAgIGlubGluZSB2b2lkCisgICAgX1NfY29uZF9zdG9yZV9lb3MoX0NoYXJUJikgeyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX1NfY29uZF9zdG9yZV9lb3MoY2hhciYgX19jKQorICB7IF9fYyA9IDA7IH0KKworICBpbmxpbmUgdm9pZAorICBfU19jb25kX3N0b3JlX2Vvcyh3Y2hhcl90JiBfX2MpCisgIHsgX19jID0gMDsgfQorCisgIC8vIGNoYXJfcHJvZHVjZXJzIGFyZSBsb2dpY2FsbHkgZnVuY3Rpb25zIHRoYXQgZ2VuZXJhdGUgYSBzZWN0aW9uIG9mCisgIC8vIGEgc3RyaW5nLiAgVGhlc2UgY2FuIGJlIGNvbnZlcnRlZCB0byByb3Blcy4gIFRoZSByZXN1bHRpbmcgcm9wZQorICAvLyBpbnZva2VzIHRoZSBjaGFyX3Byb2R1Y2VyIG9uIGRlbWFuZC4gIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwKKyAgLy8gZmlsZXMgdG8gYmUgdmlld2VkIGFzIHJvcGVzIHdpdGhvdXQgcmVhZGluZyB0aGUgZW50aXJlIGZpbGUuCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQ+CisgICAgY2xhc3MgY2hhcl9wcm9kdWNlcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB2aXJ0dWFsIH5jaGFyX3Byb2R1Y2VyKCkgeyB9OworCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoc2l6ZV90IF9fc3RhcnRfcG9zLCBzaXplX3QgX19sZW4sCisJCSBfQ2hhclQqIF9fYnVmZmVyKSA9IDA7CisgICAgICAvLyBCdWZmZXIgc2hvdWxkIHJlYWxseSBiZSBhbiBhcmJpdHJhcnkgb3V0cHV0IGl0ZXJhdG9yLgorICAgICAgLy8gVGhhdCB3YXkgd2UgY291bGQgZmxhdHRlbiBkaXJlY3RseSBpbnRvIGFuIG9zdHJlYW0sIGV0Yy4KKyAgICAgIC8vIFRoaXMgaXMgdGhvcm91Z2hseSBpbXBvc3NpYmxlLCBzaW5jZSBpdGVyYXRvciB0eXBlcyBkb24ndAorICAgICAgLy8gaGF2ZSBydW50aW1lIGRlc2NyaXB0aW9ucy4KKyAgICB9OworCisgIC8vIFNlcXVlbmNlIGJ1ZmZlcnM6CisgIC8vCisgIC8vIFNlcXVlbmNlIG11c3QgcHJvdmlkZSBhbiBhcHBlbmQgb3BlcmF0aW9uIHRoYXQgYXBwZW5kcyBhbgorICAvLyBhcnJheSB0byB0aGUgc2VxdWVuY2UuICBTZXF1ZW5jZSBidWZmZXJzIGFyZSB1c2VmdWwgb25seSBpZgorICAvLyBhcHBlbmRpbmcgYW4gZW50aXJlIGFycmF5IGlzIGNoZWFwZXIgdGhhbiBhcHBlbmRpbmcgZWxlbWVudCBieSBlbGVtZW50LgorICAvLyBUaGlzIGlzIHRydWUgZm9yIG1hbnkgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy4KKyAgLy8gVGhpcyBzaG91bGQgIHBlcmhhcHMgaW5oZXJpdCBmcm9tIG9zdHJlYW08c2VxdWVuY2U6OnZhbHVlX3R5cGU+CisgIC8vIGFuZCBiZSBpbXBsZW1lbnRlZCBjb3JyZXNwb25kaW5nbHksIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZAorICAvLyBmb3IgZm9ybWF0dGVkLiAgRm9yIHRoZSBzYWtlIG9mIHBvcnRhYmlsaXR5LCB3ZSBkb24ndCBkbyB0aGlzIHlldC4KKyAgLy8KKyAgLy8gRm9yIG5vdywgc2VxdWVuY2UgYnVmZmVycyBiZWhhdmUgYXMgb3V0cHV0IGl0ZXJhdG9ycy4gIEJ1dCB0aGV5IGFsc28KKyAgLy8gYmVoYXZlIGEgbGl0dGxlIGxpa2UgYmFzaWNfb3N0cmluZ3N0cmVhbTxzZXF1ZW5jZTo6dmFsdWVfdHlwZT4gYW5kIGEKKyAgLy8gbGl0dGxlIGxpa2UgY29udGFpbmVycy4KKworICB0ZW1wbGF0ZTxjbGFzcyBfU2VxdWVuY2UsIHNpemVfdCBfQnVmX3N6ID0gMTAwPgorICAgIGNsYXNzIHNlcXVlbmNlX2J1ZmZlcgorICAgIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOworICAgIHByb3RlY3RlZDoKKyAgICAgIF9TZXF1ZW5jZSogX01fcHJlZml4OworICAgICAgdmFsdWVfdHlwZSBfTV9idWZmZXJbX0J1Zl9zel07CisgICAgICBzaXplX3QgICAgIF9NX2J1Zl9jb3VudDsKKyAgICBwdWJsaWM6CisKKyAgICAgIHZvaWQKKyAgICAgIGZsdXNoKCkKKyAgICAgIHsKKwlfTV9wcmVmaXgtPmFwcGVuZChfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2J1Zl9jb3VudCk7CisJX01fYnVmX2NvdW50ID0gMDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgfnNlcXVlbmNlX2J1ZmZlcigpCisgICAgICB7IGZsdXNoKCk7IH0KKyAgICAgIAorICAgICAgc2VxdWVuY2VfYnVmZmVyKCkKKyAgICAgIDogX01fcHJlZml4KDApLCBfTV9idWZfY291bnQoMCkgeyB9CisKKyAgICAgIHNlcXVlbmNlX2J1ZmZlcihjb25zdCBzZXF1ZW5jZV9idWZmZXImIF9feCkKKyAgICAgIHsKKwlfTV9wcmVmaXggPSBfX3guX01fcHJlZml4OworCV9NX2J1Zl9jb3VudCA9IF9feC5fTV9idWZfY291bnQ7CisJc3RkOjpjb3B5KF9feC5fTV9idWZmZXIsIF9feC5fTV9idWZmZXIgKyBfX3guX01fYnVmX2NvdW50LCBfTV9idWZmZXIpOworICAgICAgfQorICAgICAgCisgICAgICBzZXF1ZW5jZV9idWZmZXIoc2VxdWVuY2VfYnVmZmVyJiBfX3gpCisgICAgICB7CisJX194LmZsdXNoKCk7CisJX01fcHJlZml4ID0gX194Ll9NX3ByZWZpeDsKKwlfTV9idWZfY291bnQgPSAwOworICAgICAgfQorICAgICAgCisgICAgICBzZXF1ZW5jZV9idWZmZXIoX1NlcXVlbmNlJiBfX3MpCisgICAgICA6IF9NX3ByZWZpeCgmX19zKSwgX01fYnVmX2NvdW50KDApIHsgfQorICAgICAgCisgICAgICBzZXF1ZW5jZV9idWZmZXImCisgICAgICBvcGVyYXRvcj0oc2VxdWVuY2VfYnVmZmVyJiBfX3gpCisgICAgICB7CisJX194LmZsdXNoKCk7CisJX01fcHJlZml4ID0gX194Ll9NX3ByZWZpeDsKKwlfTV9idWZfY291bnQgPSAwOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgc2VxdWVuY2VfYnVmZmVyJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHNlcXVlbmNlX2J1ZmZlciYgX194KQorICAgICAgeworCV9NX3ByZWZpeCA9IF9feC5fTV9wcmVmaXg7CisJX01fYnVmX2NvdW50ID0gX194Ll9NX2J1Zl9jb3VudDsKKwlzdGQ6OmNvcHkoX194Ll9NX2J1ZmZlciwgX194Ll9NX2J1ZmZlciArIF9feC5fTV9idWZfY291bnQsIF9NX2J1ZmZlcik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBwdXNoX2JhY2sodmFsdWVfdHlwZSBfX3gpCisgICAgICB7CisJaWYgKF9NX2J1Zl9jb3VudCA8IF9CdWZfc3opCisJICB7CisJICAgIF9NX2J1ZmZlcltfTV9idWZfY291bnRdID0gX194OworCSAgICArK19NX2J1Zl9jb3VudDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGZsdXNoKCk7CisJICAgIF9NX2J1ZmZlclswXSA9IF9feDsKKwkgICAgX01fYnVmX2NvdW50ID0gMTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgYXBwZW5kKHZhbHVlX3R5cGUqIF9fcywgc2l6ZV90IF9fbGVuKQorICAgICAgeworCWlmIChfX2xlbiArIF9NX2J1Zl9jb3VudCA8PSBfQnVmX3N6KQorCSAgeworCSAgICBzaXplX3QgX19pID0gX01fYnVmX2NvdW50OworCSAgICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBfX2xlbjsgX19pKyssIF9faisrKQorCSAgICAgIF9NX2J1ZmZlcltfX2ldID0gX19zW19fal07CisJICAgIF9NX2J1Zl9jb3VudCArPSBfX2xlbjsKKwkgIH0KKwllbHNlIGlmICgwID09IF9NX2J1Zl9jb3VudCkKKwkgIF9NX3ByZWZpeC0+YXBwZW5kKF9fcywgX19zICsgX19sZW4pOworCWVsc2UKKwkgIHsKKwkgICAgZmx1c2goKTsKKwkgICAgYXBwZW5kKF9fcywgX19sZW4pOworCSAgfQorICAgICAgfQorCisgICAgICBzZXF1ZW5jZV9idWZmZXImCisgICAgICB3cml0ZSh2YWx1ZV90eXBlKiBfX3MsIHNpemVfdCBfX2xlbikKKyAgICAgIHsKKwlhcHBlbmQoX19zLCBfX2xlbik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgICAgCisgICAgICBzZXF1ZW5jZV9idWZmZXImCisgICAgICBwdXQodmFsdWVfdHlwZSBfX3gpCisgICAgICB7CisJcHVzaF9iYWNrKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgICAgCisgICAgICBzZXF1ZW5jZV9idWZmZXImCisgICAgICBvcGVyYXRvcj0oY29uc3QgdmFsdWVfdHlwZSYgX19yaHMpCisgICAgICB7CisJcHVzaF9iYWNrKF9fcmhzKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgICAKKyAgICAgIHNlcXVlbmNlX2J1ZmZlciYKKyAgICAgIG9wZXJhdG9yKigpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgICAgCisgICAgICBzZXF1ZW5jZV9idWZmZXImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAKKyAgICAgIHNlcXVlbmNlX2J1ZmZlcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisgIAorICAvLyBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSB0cmVhdGVkIGFzIHByaXZhdGUsIGF0IGxlYXN0IGZvciBub3cuCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KKyAgICBjbGFzcyBfUm9wZV9jaGFyX2NvbnN1bWVyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIElmIHdlIGhhZCBtZW1iZXIgdGVtcGxhdGVzLCB0aGVzZSBzaG91bGQgbm90IGJlIHZpcnR1YWwuCisgICAgICAvLyBGb3Igbm93IHdlIG5lZWQgdG8gdXNlIHJ1bi10aW1lIHBhcmFtZXRyaXphdGlvbiB3aGVyZQorICAgICAgLy8gY29tcGlsZS10aW1lIHdvdWxkIGRvLiAgSGVuY2UgdGhpcyBzaG91bGQgYWxsIGJlIHByaXZhdGUKKyAgICAgIC8vIGZvciBub3cuCisgICAgICAvLyBUaGUgc3ltbWV0cnkgd2l0aCBjaGFyX3Byb2R1Y2VyIGlzIGFjY2lkZW50YWwgYW5kIHRlbXBvcmFyeS4KKyAgICAgIHZpcnR1YWwgfl9Sb3BlX2NoYXJfY29uc3VtZXIoKSB7IH07CisgIAorICAgICAgdmlydHVhbCBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DaGFyVCogX19idWZmZXIsIHNpemVfdCBfX2xlbikgPSAwOworICAgIH07CisgIAorICAvLyBGaXJzdCBhIGxvdCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4gIFRoZSBzdGFuZGFyZCBzZWVtcyB0byByZXF1aXJlCisgIC8vIG11Y2ggc3RyaWN0ZXIgImRlY2xhcmF0aW9uIGJlZm9yZSB1c2UiIHRoYW4gbWFueSBvZiB0aGUgaW1wbGVtZW50YXRpb25zCisgIC8vIHRoYXQgcHJlY2VkZWQgaXQuCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIHJvcGU7CisgIAorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1JvcGVfUm9wZUNvbmNhdGVuYXRpb247CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX1JvcGVMZWFmOworICAKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX1JvcGVGdW5jdGlvbjsKKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9Sb3BlU3Vic3RyaW5nOworICAKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgX1JvcGVfaXRlcmF0b3I7CisgIAorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBfUm9wZV9jb25zdF9pdGVyYXRvcjsKKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIF9Sb3BlX2NoYXJfcmVmX3Byb3h5OworICAKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgY2xhc3MgX1JvcGVfY2hhcl9wdHJfcHJveHk7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiYgX195KTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvci0oY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgcHRyZGlmZl90IF9fbik7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgIHB0cmRpZmZfdCBfX24pOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLAorCSAgICAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194KTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpOworICAKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgcHRyZGlmZl90CisgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvci0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsIHB0cmRpZmZfdCBfX24pOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwgcHRyZGlmZl90IF9fbik7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194KTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHB0cmRpZmZfdAorICAgIG9wZXJhdG9yLShjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSk7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisoY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwKKwkgICAgICBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19yaWdodCk7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisoY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwgY29uc3QgX0NoYXJUKiBfX3JpZ2h0KTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19sZWZ0LCBfQ2hhclQgX19yaWdodCk7CisKKyAgLy8gU29tZSBoZWxwZXJzLCBzbyB3ZSBjYW4gdXNlIHBvd2VyIG9uIHJvcGVzLgorICAvLyBTZWUgYmVsb3cgZm9yIHdoeSB0aGlzIGlzbid0IGxvY2FsIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgCisgIC8vIFRoaXMgdXNlcyBhIG5vbnN0YW5kYXJkIHJlZmNvdW50IGNvbnZlbnRpb24uCisgIC8vIFRoZSByZXN1bHQgaGFzIHJlZmNvdW50IDAuCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9Db25jYXRfZm4KKyAgICA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxyb3BlPF9DaGFyVCwgX0FsbG9jPiwgcm9wZTxfQ2hhclQsIF9BbGxvYz4sCisJCQkJICByb3BlPF9DaGFyVCwgX0FsbG9jPiA+CisgICAgeworICAgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4KKyAgICAgIG9wZXJhdG9yKCkoY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkJIGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgICB7IHJldHVybiBfX3ggKyBfX3k7IH0KKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgcm9wZTxfQ2hhclQsIF9BbGxvYz4KKyAgICBpZGVudGl0eV9lbGVtZW50KF9Sb3BlX0NvbmNhdF9mbjxfQ2hhclQsIF9BbGxvYz4pCisgICAgeyByZXR1cm4gcm9wZTxfQ2hhclQsIF9BbGxvYz4oKTsgfQorCisgIC8vIENsYXNzIF9SZWZjb3VudF9CYXNlIHByb3ZpZGVzIGEgdHlwZSwgX1JDX3QsIGEgZGF0YSBtZW1iZXIsCisgIC8vIF9NX3JlZl9jb3VudCwgYW5kIG1lbWJlciBmdW5jdGlvbnMgX01faW5jciBhbmQgX01fZGVjciwgd2hpY2ggcGVyZm9ybQorICAvLyBhdG9taWMgcHJlaW5jcmVtZW50L3ByZWRlY3JlbWVudC4gIFRoZSBjb25zdHJ1Y3RvciBpbml0aWFsaXplcworICAvLyBfTV9yZWZfY291bnQuCisgIHN0cnVjdCBfUmVmY291bnRfQmFzZQorICB7CisgICAgLy8gVGhlIHR5cGUgX1JDX3QKKyAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKKyAgICAKKyAgICAvLyBUaGUgZGF0YSBtZW1iZXIgX01fcmVmX2NvdW50CisgICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OworCisgICAgLy8gQ29uc3RydWN0b3IKKyNpZmRlZiBfX0dUSFJFQURfTVVURVhfSU5JVAorICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrID0gX19HVEhSRUFEX01VVEVYX0lOSVQ7CisjZWxzZQorICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOworI2VuZGlmCisKKyAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikKKyAgICB7CisjaWZuZGVmIF9fR1RIUkVBRF9NVVRFWF9JTklUCisjaWZkZWYgX19HVEhSRUFEX01VVEVYX0lOSVRfRlVOQ1RJT04KKyAgICAgIF9fR1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9OICgmX01fcmVmX2NvdW50X2xvY2spOworI2Vsc2UKKyNlcnJvciBfX0dUSFJFQURfTVVURVhfSU5JVCBvciBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTiBzaG91bGQgYmUgZGVmaW5lZCBieSBndGhyLmggYWJzdHJhY3Rpb24gbGF5ZXIsIHJlcG9ydCBwcm9ibGVtIHRvIGxpYnN0ZGMrK0BnY2MuZ251Lm9yZy4KKyNlbmRpZgorI2VuZGlmCisgICAgfQorCisjaWZuZGVmIF9fR1RIUkVBRF9NVVRFWF9JTklUCisgICAgfl9SZWZjb3VudF9CYXNlKCkKKyAgICB7IF9fZ3RocmVhZF9tdXRleF9kZXN0cm95KCZfTV9yZWZfY291bnRfbG9jayk7IH0KKyNlbmRpZgorCisgICAgdm9pZAorICAgIF9NX2luY3IoKQorICAgIHsKKyAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CisgICAgICArK19NX3JlZl9jb3VudDsKKyAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKKyAgICB9CisKKyAgICBfUkNfdAorICAgIF9NX2RlY3IoKQorICAgIHsKKyAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CisgICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OworICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOworICAgICAgcmV0dXJuIF9fdG1wOworICAgIH0KKyAgfTsKKworICAvLworICAvLyBXaGF0IGZvbGxvd3Mgc2hvdWxkIHJlYWxseSBiZSBsb2NhbCB0byByb3BlLiAgVW5mb3J0dW5hdGVseSwKKyAgLy8gdGhhdCBkb2Vzbid0IHdvcmssIHNpbmNlIGl0IG1ha2VzIGl0IGltcG9zc2libGUgdG8gZGVmaW5lIGdlbmVyaWMKKyAgLy8gZXF1YWxpdHkgb24gcm9wZSBpdGVyYXRvcnMuICBBY2NvcmRpbmcgdG8gdGhlIGRyYWZ0IHN0YW5kYXJkLCB0aGUKKyAgLy8gdGVtcGxhdGUgcGFyYW1ldGVycyBmb3Igc3VjaCBhbiBlcXVhbGl0eSBvcGVyYXRvciBjYW5ub3QgYmUgaW5mZXJyZWQKKyAgLy8gZnJvbSB0aGUgb2NjdXJyZW5jZSBvZiBhIG1lbWJlciBjbGFzcyBhcyBhIHBhcmFtZXRlci4KKyAgLy8gKFNHSSBjb21waWxlcnMgaW4gZmFjdCBhbGxvdyB0aGlzLCBidXQgdGhlIF9fcmVzdWx0IHdvdWxkbid0IGJlCisgIC8vIHBvcnRhYmxlLikKKyAgLy8gU2ltaWxhcmx5LCBzb21lIG9mIHRoZSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyBhcmUgbWVtYmVyIGZ1bmN0aW9ucworICAvLyBvbmx5IHRvIGF2b2lkIHBvbGx1dGluZyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgYW5kIHRvIGNpcmN1bXZlbnQKKyAgLy8gcmVzdHJpY3Rpb25zIG9uIHR5cGUgaW5mZXJlbmNlIGZvciB0ZW1wbGF0ZSBmdW5jdGlvbnMuCisgIC8vCisKKyAgLy8KKyAgLy8gVGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGZvciByZXByZXNlbnRpbmcgYSByb3BlLiAgVGhpcyBpcworICAvLyBwcml2YXRlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gIEEgcm9wZSBpcyByZWFsbHkganVzdCBhIHBvaW50ZXIKKyAgLy8gdG8gb25lIG9mIHRoZXNlLgorICAvLworICAvLyBBIGZldyBiYXNpYyBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyB0aGlzIGRhdGEgc3RydWN0dXJlCisgIC8vIGFyZSBtZW1iZXJzIG9mIF9Sb3BlUmVwLiAgTW9zdCBvZiB0aGUgbW9yZSBjb21wbGV4IGFsZ29yaXRobXMKKyAgLy8gYXJlIGltcGxlbWVudGVkIGFzIHJvcGUgbWVtYmVycy4KKyAgLy8KKyAgLy8gU29tZSBvZiB0aGUgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgb2YgX1JvcGVSZXAgaGF2ZSBpZGVudGljYWxseQorICAvLyBuYW1lZCBmdW5jdGlvbnMgaW4gcm9wZSB0aGF0IHNpbXBseSBpbnZva2UgdGhlIF9Sb3BlUmVwIHZlcnNpb25zLgorCisjZGVmaW5lIF9fUk9QRV9ERUZJTkVfQUxMT0NTKF9fYSkgXAorICAgICAgICBfX1JPUEVfREVGSU5FX0FMTE9DKF9DaGFyVCxfRGF0YSkgLyogY2hhcmFjdGVyIGRhdGEgKi8gXAorICAgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uPF9DaGFyVCxfX2E+IF9fQzsgXAorICAgICAgICBfX1JPUEVfREVGSU5FX0FMTE9DKF9fQyxfQykgXAorICAgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVMZWFmPF9DaGFyVCxfX2E+IF9fTDsgXAorICAgICAgICBfX1JPUEVfREVGSU5FX0FMTE9DKF9fTCxfTCkgXAorICAgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVGdW5jdGlvbjxfQ2hhclQsX19hPiBfX0Y7IFwKKyAgICAgICAgX19ST1BFX0RFRklORV9BTExPQyhfX0YsX0YpIFwKKyAgICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlU3Vic3RyaW5nPF9DaGFyVCxfX2E+IF9fUzsgXAorICAgICAgICBfX1JPUEVfREVGSU5FX0FMTE9DKF9fUyxfUykKKworICAvLyAgSW50ZXJuYWwgcm9wZSBub2RlcyBwb3RlbnRpYWxseSBzdG9yZSBhIGNvcHkgb2YgdGhlIGFsbG9jYXRvcgorICAvLyAgaW5zdGFuY2UgdXNlZCB0byBhbGxvY2F0ZSB0aGVtLiAgVGhpcyBpcyBtb3N0bHkgcmVkdW5kYW50LgorICAvLyAgQnV0IHRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBwYXNzIGFsbG9jYXRvciBpbnN0YW5jZXMgYXJvdW5kCisgIC8vICBpbiBzb21lIGZvcm0gdG8gbmVhcmx5IGFsbCBpbnRlcm5hbCBmdW5jdGlvbnMsIHNpbmNlIGFueSBwb2ludGVyCisgIC8vICBhc3NpZ25tZW50IG1heSByZXN1bHQgaW4gYSB6ZXJvIHJlZmVyZW5jZSBjb3VudCBhbmQgdGh1cyByZXF1aXJlCisgIC8vICBkZWFsbG9jYXRpb24uCisKKyNkZWZpbmUgX19TVEFUSUNfSUZfU0dJX0FMTE9DICAvKiBub3Qgc3RhdGljICovCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9yZXBfYmFzZQorICAgIDogcHVibGljIF9BbGxvYworICAgIHsKKyAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOworCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX0FsbG9jKj4odGhpcyk7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUmCisgICAgICBfTV9nZXRfYWxsb2NhdG9yKCkKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfQWxsb2MqPih0aGlzKTsgfQorCisgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYKKyAgICAgIF9NX2dldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9BbGxvYyo+KHRoaXMpOyB9CisKKyAgICAgIF9Sb3BlX3JlcF9iYXNlKHNpemVfdCBfX3NpemUsIGNvbnN0IGFsbG9jYXRvcl90eXBlJikKKyAgICAgIDogX01fc2l6ZShfX3NpemUpIHsgfQorCisgICAgICBzaXplX3QgX01fc2l6ZTsKKworIyBkZWZpbmUgX19ST1BFX0RFRklORV9BTExPQyhfVHAsIF9fbmFtZSkgXAorICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFwKKyAgICAgICAgICBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBfX25hbWUjI0FsbG9jOyBcCisgICAgICAgIHN0YXRpYyBfVHAqIF9fbmFtZSMjX2FsbG9jYXRlKHNpemVfdCBfX24pIFwKKyAgICAgICAgICB7IHJldHVybiBfX25hbWUjI0FsbG9jKCkuYWxsb2NhdGUoX19uKTsgfSBcCisgICAgICAgIHN0YXRpYyB2b2lkIF9fbmFtZSMjX2RlYWxsb2NhdGUoX1RwICpfX3AsIHNpemVfdCBfX24pIFwKKyAgICAgICAgICB7IF9fbmFtZSMjQWxsb2MoKS5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQorICAgICAgX19ST1BFX0RFRklORV9BTExPQ1MoX0FsbG9jKQorIyB1bmRlZiBfX1JPUEVfREVGSU5FX0FMTE9DCisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1JvcGVfUm9wZVJlcAorICAgIDogcHVibGljIF9Sb3BlX3JlcF9iYXNlPF9DaGFyVCwgX0FsbG9jPgorIyBpZm5kZWYgX19HQworCSAgICAgLCBfUmVmY291bnRfQmFzZQorIyBlbmRpZgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBfX2RldGFpbDo6X1RhZyBfTV90YWc6ODsKKyAgICAgIGJvb2wgX01faXNfYmFsYW5jZWQ6ODsKKyAgICAgIHVuc2lnbmVkIGNoYXIgX01fZGVwdGg7CisgICAgICBfX0dDX0NPTlNUIF9DaGFyVCogX01fY19zdHJpbmc7CisjaWZkZWYgX19HVEhSRUFEX01VVEVYX0lOSVQKKyAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2Nfc3RyaW5nX2xvY2sgPSBfX0dUSFJFQURfTVVURVhfSU5JVDsKKyNlbHNlCisgICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9jX3N0cmluZ19sb2NrOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGF0dGVuZWQgdmVyc2lvbiBvZiBzdHJpbmcsIGlmIG5lZWRlZC4gICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0eXBpY2FsbHkgMC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBpdCdzIG5vdCAwLCB0aGVuIHRoZSBtZW1vcnkgaXMgb3duZWQgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBieSB0aGlzIG5vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiB0aGUgY2FzZSBvZiBhIGxlYWYsIHRoaXMgbWF5IHBvaW50IHRvICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgc2FtZSBtZW1vcnkgYXMgdGhlIGRhdGEgZmllbGQuICAgICAgICovCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Sb3BlX3JlcF9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKKyAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIHVzaW5nIF9Sb3BlX3JlcF9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6Z2V0X2FsbG9jYXRvcjsKKyAgICAgIHVzaW5nIF9Sb3BlX3JlcF9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6X01fZ2V0X2FsbG9jYXRvcjsKKworICAgICAgX1JvcGVfUm9wZVJlcChfX2RldGFpbDo6X1RhZyBfX3QsIGludCBfX2QsIGJvb2wgX19iLCBzaXplX3QgX19zaXplLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICAgIDogX1JvcGVfcmVwX2Jhc2U8X0NoYXJULCBfQWxsb2M+KF9fc2l6ZSwgX19hKSwKKyNpZm5kZWYgX19HQworCV9SZWZjb3VudF9CYXNlKDEpLAorI2VuZGlmCisJX01fdGFnKF9fdCksIF9NX2lzX2JhbGFuY2VkKF9fYiksIF9NX2RlcHRoKF9fZCksIF9NX2Nfc3RyaW5nKDApCisjaWZkZWYgX19HVEhSRUFEX01VVEVYX0lOSVQKKyAgICAgIHsgfQorI2Vsc2UKKyAgICAgIHsgX19HVEhSRUFEX01VVEVYX0lOSVRfRlVOQ1RJT04gKCZfTV9jX3N0cmluZ19sb2NrKTsgfQorICAgICAgfl9Sb3BlX1JvcGVSZXAoKQorICAgICAgeyBfX2d0aHJlYWRfbXV0ZXhfZGVzdHJveSAoJl9NX2Nfc3RyaW5nX2xvY2spOyB9CisjZW5kaWYKKyNpZmRlZiBfX0dDCisgICAgICB2b2lkCisgICAgICBfTV9pbmNyICgpIHsgfQorI2VuZGlmCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfZnJlZV9zdHJpbmcoX19HQ19DT05TVCBfQ2hhclQqLCBzaXplX3QgX19sZW4sCisJCSAgICAgYWxsb2NhdG9yX3R5cGUmIF9fYSk7CisjZGVmaW5lIF9fU1RMX0ZSRUVfU1RSSU5HKF9fcywgX19sLCBfX2EpIF9TX2ZyZWVfc3RyaW5nKF9fcywgX19sLCBfX2EpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVhbGxvY2F0ZSBkYXRhIHNlY3Rpb24gb2YgYSBsZWFmLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXQgaXRzIGhhcmQgdG8gZG8gYW55dGhpbmcgZWxzZSBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vbWVudCwgYmVjYXVzZSBpdCdzIHRlbXBsYXRpemVkIHcuci50LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW4gYWxsb2NhdG9yLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9lcyBub3RoaW5nIGlmIF9fR0MgaXMgZGVmaW5lZC4KKyNpZm5kZWYgX19HQworICAgICAgdm9pZCBfTV9mcmVlX2Nfc3RyaW5nKCk7CisgICAgICB2b2lkIF9NX2ZyZWVfdHJlZSgpOworICAgICAgLy8gRGVhbGxvY2F0ZSB0LiBBc3N1bWVzIHQgaXMgbm90IDAuCisgICAgICB2b2lkCisgICAgICBfTV91bnJlZl9ub25uaWwoKQorICAgICAgeworCWlmICgwID09IF9NX2RlY3IoKSkKKwkgIF9NX2ZyZWVfdHJlZSgpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9yZWZfbm9ubmlsKCkKKyAgICAgIHsgX01faW5jcigpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU191bnJlZihfUm9wZV9Sb3BlUmVwKiBfX3QpCisgICAgICB7CisJaWYgKDAgIT0gX190KQorCSAgX190LT5fTV91bnJlZl9ub25uaWwoKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX3JlZihfUm9wZV9Sb3BlUmVwKiBfX3QpCisgICAgICB7CisJaWYgKDAgIT0gX190KQorCSAgX190LT5fTV9pbmNyKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19mcmVlX2lmX3VucmVmKF9Sb3BlX1JvcGVSZXAqIF9fdCkKKyAgICAgIHsKKwlpZiAoMCAhPSBfX3QgJiYgMCA9PSBfX3QtPl9NX3JlZl9jb3VudCkKKwkgIF9fdC0+X01fZnJlZV90cmVlKCk7CisgICAgICB9CisjICAgZWxzZSAvKiBfX0dDICovCisgICAgICB2b2lkIF9NX3VucmVmX25vbm5pbCgpIHsgfQorICAgICAgdm9pZCBfTV9yZWZfbm9ubmlsKCkgeyB9CisgICAgICBzdGF0aWMgdm9pZCBfU191bnJlZihfUm9wZV9Sb3BlUmVwKikgeyB9CisgICAgICBzdGF0aWMgdm9pZCBfU19yZWYoX1JvcGVfUm9wZVJlcCopIHsgfQorICAgICAgc3RhdGljIHZvaWQgX1NfZnJlZV9pZl91bnJlZihfUm9wZV9Sb3BlUmVwKikgeyB9CisjICAgZW5kaWYKK3Byb3RlY3RlZDoKKyAgICAgIF9Sb3BlX1JvcGVSZXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1JvcGVfUm9wZVJlcCYpOworCisgICAgICBfUm9wZV9Sb3BlUmVwKGNvbnN0IF9Sb3BlX1JvcGVSZXAmKTsKKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHN0cnVjdCBfUm9wZV9Sb3BlTGVhZgorICAgIDogcHVibGljIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIEFwcGFyZW50bHkgbmVlZGVkIGJ5IFZDKysKKyAgICAgIC8vIFRoZSBkYXRhIGZpZWxkcyBvZiBsZWF2ZXMgYXJlIGFsbG9jYXRlZCB3aXRoIHNvbWUKKyAgICAgIC8vIGV4dHJhIHNwYWNlLCB0byBhY2NvbW1vZGF0ZSBmdXR1cmUgZ3Jvd3RoIGFuZCBmb3IgYmFzaWMKKyAgICAgIC8vIGNoYXJhY3RlciB0eXBlcywgdG8gaG9sZCBhIHRyYWlsaW5nIGVvcyBjaGFyYWN0ZXIuCisgICAgICBlbnVtIHsgX1NfYWxsb2NfZ3JhbnVsYXJpdHkgPSA4IH07CisgICAgICAKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIF9TX3JvdW5kZWRfdXBfc2l6ZShzaXplX3QgX19uKQorICAgICAgeworICAgICAgICBzaXplX3QgX19zaXplX3dpdGhfZW9zOworCQorICAgICAgICBpZiAoX1NfaXNfYmFzaWNfY2hhcl90eXBlKChfQ2hhclQqKTApKQorCSAgX19zaXplX3dpdGhfZW9zID0gX19uICsgMTsKKwllbHNlCisJICBfX3NpemVfd2l0aF9lb3MgPSBfX247CisjaWZkZWYgX19HQworCXJldHVybiBfX3NpemVfd2l0aF9lb3M7CisjZWxzZQorCS8vIEFsbG93IHNsb3AgZm9yIGluLXBsYWNlIGV4cGFuc2lvbi4KKwlyZXR1cm4gKChfX3NpemVfd2l0aF9lb3MgKyBzaXplX3QoX1NfYWxsb2NfZ3JhbnVsYXJpdHkpIC0gMSkKKwkJJn4gKHNpemVfdChfU19hbGxvY19ncmFudWxhcml0eSkgLSAxKSk7CisjZW5kaWYKKyAgICAgIH0KKyAgICAgIF9fR0NfQ09OU1QgX0NoYXJUKiBfTV9kYXRhOyAvKiBOb3QgbmVjZXNzYXJpbHkgMCB0ZXJtaW5hdGVkLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBhbGxvY2F0ZWQgc2l6ZSBpcyAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX1Nfcm91bmRlZF91cF9zaXplKHNpemUpLCBleGNlcHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiB0aGUgR0MgY2FzZSwgaW4gd2hpY2ggaXQgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvZXNuJ3QgbWF0dGVyLiAgICAgICAgICAgICAgICovCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Sb3BlX3JlcF9iYXNlPF9DaGFyVCxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQorICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgX1JvcGVfUm9wZUxlYWYoX19HQ19DT05TVCBfQ2hhclQqIF9fZCwgc2l6ZV90IF9fc2l6ZSwKKwkJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPihfX2RldGFpbDo6X1NfbGVhZiwgMCwgdHJ1ZSwKKwkJCQkgICAgICBfX3NpemUsIF9fYSksIF9NX2RhdGEoX19kKQorICAgICAgeworICAgICAgICBpZiAoX1NfaXNfYmFzaWNfY2hhcl90eXBlKChfQ2hhclQgKikwKSkKKwkgIHsKKyAgICAgICAgICAgIC8vIGFscmVhZHkgZW9zIHRlcm1pbmF0ZWQuCisgICAgICAgICAgICB0aGlzLT5fTV9jX3N0cmluZyA9IF9fZDsKKwkgIH0KKyAgICAgIH0KKyAgICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBhc3N1bWVzIHRoYXQgZCBoYXMgYmVlbiBhbGxvY2F0ZWQgd2l0aAorICAgICAgLy8gdGhlIHByb3BlciBhbGxvY2F0b3IgYW5kIHRoZSBwcm9wZXJseSBwYWRkZWQgc2l6ZS4KKyAgICAgIC8vIEluIGNvbnRyYXN0LCB0aGUgZGVzdHJ1Y3RvciBkZWFsbG9jYXRlcyB0aGUgZGF0YToKKyNpZm5kZWYgX19HQworICAgICAgfl9Sb3BlX1JvcGVMZWFmKCkgdGhyb3coKQorICAgICAgeworICAgICAgICBpZiAoX01fZGF0YSAhPSB0aGlzLT5fTV9jX3N0cmluZykKKwkgIHRoaXMtPl9NX2ZyZWVfY19zdHJpbmcoKTsKKwkKKwl0aGlzLT5fX1NUTF9GUkVFX1NUUklORyhfTV9kYXRhLCB0aGlzLT5fTV9zaXplLCB0aGlzLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgfQorI2VuZGlmCitwcm90ZWN0ZWQ6CisgICAgICBfUm9wZV9Sb3BlTGVhZiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfUm9wZV9Sb3BlTGVhZiYpOworCisgICAgICBfUm9wZV9Sb3BlTGVhZihjb25zdCBfUm9wZV9Sb3BlTGVhZiYpOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uCisgICAgOiBwdWJsaWMgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4qIF9NX2xlZnQ7CisgICAgICBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiogX01fcmlnaHQ7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JvcGVfcmVwX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQorICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgX1JvcGVfUm9wZUNvbmNhdGVuYXRpb24oX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4qIF9fbCwKKwkJCSAgICAgIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KiBfX3IsCisJCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorCTogX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4oX19kZXRhaWw6Ol9TX2NvbmNhdCwKKwkJCQkgICAgICBzdGQ6Om1heChfX2wtPl9NX2RlcHRoLAorCQkJCQkgICAgICAgX19yLT5fTV9kZXB0aCkgKyAxLAorCQkJCSAgICAgIGZhbHNlLAorCQkJCSAgICAgIF9fbC0+X01fc2l6ZSArIF9fci0+X01fc2l6ZSwgX19hKSwKKyAgICAgICAgX01fbGVmdChfX2wpLCBfTV9yaWdodChfX3IpCisgICAgICB7IH0KKyNpZm5kZWYgX19HQworICAgICAgfl9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uKCkgdGhyb3coKQorICAgICAgeworCXRoaXMtPl9NX2ZyZWVfY19zdHJpbmcoKTsKKwlfTV9sZWZ0LT5fTV91bnJlZl9ub25uaWwoKTsKKwlfTV9yaWdodC0+X01fdW5yZWZfbm9ubmlsKCk7CisgICAgICB9CisjZW5kaWYKK3Byb3RlY3RlZDoKKyAgICAgIF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uJik7CisgICAgICAKKyAgICAgIF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uKGNvbnN0IF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uJik7CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1JvcGVfUm9wZUZ1bmN0aW9uCisgICAgOiBwdWJsaWMgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgY2hhcl9wcm9kdWNlcjxfQ2hhclQ+KiBfTV9mbjsKKyNpZm5kZWYgX19HQworICAgICAgYm9vbCBfTV9kZWxldGVfd2hlbl9kb25lOyAvLyBDaGFyX3Byb2R1Y2VyIGlzIG93bmVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3BlIGFuZCBzaG91bGQgYmUgZXhwbGljaXRseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGVkIHdoZW4gdGhlIHJvcGUgYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmFjY2Vzc2libGUuCisjZWxzZQorICAgICAgLy8gSW4gdGhlIEdDIGNhc2UsIHdlIGVpdGhlciByZWdpc3RlciB0aGUgcm9wZSBmb3IKKyAgICAgIC8vIGZpbmFsaXphdGlvbiwgb3Igbm90LiAgVGh1cyB0aGUgZmllbGQgaXMgdW5uZWNlc3Nhcnk7CisgICAgICAvLyB0aGUgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIHRoZSBjb2xsZWN0b3IgZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgLy8gV2UgZG8gbmVlZCBhIGZpbmFsaXphdGlvbiBwcm9jZWR1cmUgdG8gYmUgaW52b2tlZCBieSB0aGUKKyAgICAgIC8vIGNvbGxlY3Rvci4KKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19mbl9maW5hbGl6YXRpb25fcHJvYyh2b2lkICogX190cmVlLCB2b2lkICopCisgICAgICB7IGRlbGV0ZSAoKF9Sb3BlX1JvcGVGdW5jdGlvbiAqKV9fdHJlZSkgLT4gX01fZm47IH0KKyNlbmRpZgorICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JvcGVfcmVwX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQorICAgICAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9Sb3BlX1JvcGVGdW5jdGlvbihjaGFyX3Byb2R1Y2VyPF9DaGFyVD4qIF9fZiwgc2l6ZV90IF9fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgX19kLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPihfX2RldGFpbDo6X1NfZnVuY3Rpb24sIDAsIHRydWUsIF9fc2l6ZSwgX19hKQorCSwgX01fZm4oX19mKQorI2lmbmRlZiBfX0dDCisJLCBfTV9kZWxldGVfd2hlbl9kb25lKF9fZCkKKyNlbmRpZgorICAgICAgeworI2lmZGVmIF9fR0MKKwlpZiAoX19kKQorCSAgeworCSAgICBHQ19SRUdJU1RFUl9GSU5BTElaRVIodGhpcywgX1JvcGVfUm9wZUZ1bmN0aW9uOjoKKwkJCQkgIF9TX2ZuX2ZpbmFsaXphdGlvbl9wcm9jLCAwLCAwLCAwKTsKKwkgIH0KKyNlbmRpZgorICAgICAgfQorI2lmbmRlZiBfX0dDCisgICAgICB+X1JvcGVfUm9wZUZ1bmN0aW9uKCkgdGhyb3coKQorICAgICAgeworCXRoaXMtPl9NX2ZyZWVfY19zdHJpbmcoKTsKKwlpZiAoX01fZGVsZXRlX3doZW5fZG9uZSkKKwkgIGRlbGV0ZSBfTV9mbjsKKyAgICAgIH0KKyMgZW5kaWYKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfUm9wZV9Sb3BlRnVuY3Rpb24mCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1JvcGVfUm9wZUZ1bmN0aW9uJik7CisKKyAgICAgIF9Sb3BlX1JvcGVGdW5jdGlvbihjb25zdCBfUm9wZV9Sb3BlRnVuY3Rpb24mKTsKKyAgICB9OworICAvLyBTdWJzdHJpbmcgcmVzdWx0cyBhcmUgdXN1YWxseSByZXByZXNlbnRlZCB1c2luZyBqdXN0CisgIC8vIGNvbmNhdGVuYXRpb24gbm9kZXMuICBCdXQgaW4gdGhlIGNhc2Ugb2YgdmVyeSBsb25nIGZsYXQgcm9wZXMKKyAgLy8gb3Igcm9wZXMgd2l0aCBhIGZ1bmN0aW9uYWwgcmVwcmVzZW50YXRpb24gdGhhdCBpc24ndCBwcmFjdGljYWwuCisgIC8vIEluIHRoYXQgY2FzZSwgd2UgcmVwcmVzZW50IHRoZSBfX3Jlc3VsdCBhcyBhIHNwZWNpYWwgY2FzZSBvZgorICAvLyBSb3BlRnVuY3Rpb24sIHdob3NlIGNoYXJfcHJvZHVjZXIgcG9pbnRzIGJhY2sgdG8gdGhlIHJvcGUgaXRzZWxmLgorICAvLyBJbiBhbGwgY2FzZXMgZXhjZXB0IHJlcGVhdGVkIHN1YnN0cmluZyBvcGVyYXRpb25zIGFuZAorICAvLyBkZWFsbG9jYXRpb24sIHdlIHRyZWF0IHRoZSBfX3Jlc3VsdCBhcyBhIFJvcGVGdW5jdGlvbi4KKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX1JvcGVTdWJzdHJpbmcKKyAgICA6IHB1YmxpYyBfUm9wZV9Sb3BlRnVuY3Rpb248X0NoYXJULCBfQWxsb2M+LAorICAgICAgcHVibGljIGNoYXJfcHJvZHVjZXI8X0NoYXJUPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBYWFggdGhpcyB3aG9sZSBjbGFzcyBzaG91bGQgYmUgcmV3cml0dGVuLgorICAgICAgX1JvcGVfUm9wZVJlcDxfQ2hhclQsX0FsbG9jPiogX01fYmFzZTsgICAgICAvLyBub3QgMAorICAgICAgc2l6ZV90IF9NX3N0YXJ0OworCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoc2l6ZV90IF9fc3RhcnRfcG9zLCBzaXplX3QgX19yZXFfbGVuLAorCQkgX0NoYXJUKiBfX2J1ZmZlcikKKyAgICAgIHsKKyAgICAgICAgc3dpdGNoKF9NX2Jhc2UtPl9NX3RhZykKKwkgIHsKKwkgIGNhc2UgX19kZXRhaWw6Ol9TX2Z1bmN0aW9uOgorCSAgY2FzZSBfX2RldGFpbDo6X1Nfc3Vic3RyaW5nZm46CisJICAgIHsKKwkgICAgICBjaGFyX3Byb2R1Y2VyPF9DaGFyVD4qIF9fZm4gPQorCQkoKF9Sb3BlX1JvcGVGdW5jdGlvbjxfQ2hhclQsX0FsbG9jPiopX01fYmFzZSktPl9NX2ZuOworCSAgICAgICgqX19mbikoX19zdGFydF9wb3MgKyBfTV9zdGFydCwgX19yZXFfbGVuLCBfX2J1ZmZlcik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIF9fZGV0YWlsOjpfU19sZWFmOgorCSAgICB7CisJICAgICAgX19HQ19DT05TVCBfQ2hhclQqIF9fcyA9CisJCSgoX1JvcGVfUm9wZUxlYWY8X0NoYXJULF9BbGxvYz4qKV9NX2Jhc2UpLT5fTV9kYXRhOworCSAgICAgIHVuaW5pdGlhbGl6ZWRfY29weV9uKF9fcyArIF9fc3RhcnRfcG9zICsgX01fc3RhcnQsIF9fcmVxX2xlbiwKKwkJCQkgICBfX2J1ZmZlcik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgorCSAgICBicmVhazsKKwkgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUm9wZV9yZXBfYmFzZTxfQ2hhclQsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlCisgICAgICAgIGFsbG9jYXRvcl90eXBlOworCisgICAgICBfUm9wZV9Sb3BlU3Vic3RyaW5nKF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KiBfX2IsIHNpemVfdCBfX3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2wsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9Sb3BlX1JvcGVGdW5jdGlvbjxfQ2hhclQsIF9BbGxvYz4odGhpcywgX19sLCBmYWxzZSwgX19hKSwKKyAgICAgICAgY2hhcl9wcm9kdWNlcjxfQ2hhclQ+KCksIF9NX2Jhc2UoX19iKSwgX01fc3RhcnQoX19zKQorICAgICAgeworI2lmbmRlZiBfX0dDCisJX01fYmFzZS0+X01fcmVmX25vbm5pbCgpOworI2VuZGlmCisgICAgICAgIHRoaXMtPl9NX3RhZyA9IF9fZGV0YWlsOjpfU19zdWJzdHJpbmdmbjsKKyAgICAgIH0KKyAgICB2aXJ0dWFsIH5fUm9wZV9Sb3BlU3Vic3RyaW5nKCkgdGhyb3coKQorICAgICAgeworI2lmbmRlZiBfX0dDCisJX01fYmFzZS0+X01fdW5yZWZfbm9ubmlsKCk7CisJLy8gX01fZnJlZV9jX3N0cmluZygpOyAgLS0gZG9uZSBieSBwYXJlbnQgY2xhc3MKKyNlbmRpZgorICAgICAgfQorICAgIH07CisKKyAgLy8gU2VsZi1kZXN0cnVjdGluZyBwb2ludGVycyB0byBSb3BlX3JlcC4KKyAgLy8gVGhlc2UgYXJlIG5vdCBjb252ZW50aW9uYWwgc21hcnQgcG9pbnRlcnMuICBUaGVpcgorICAvLyBvbmx5IHB1cnBvc2UgaW4gbGlmZSBpcyB0byBlbnN1cmUgdGhhdCB1bnJlZiBpcyBjYWxsZWQKKyAgLy8gb24gdGhlIHBvaW50ZXIgZWl0aGVyIGF0IG5vcm1hbCBleGl0IG9yIGlmIGFuIGV4Y2VwdGlvbgorICAvLyBpcyByYWlzZWQuICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8KKyAgLy8gYWRqdXN0IHJlZmVyZW5jZSBjb3VudHMgd2hlbiB0aGVzZSBwb2ludGVycyBhcmUgaW5pdGlhbGl6ZWQKKyAgLy8gb3IgYXNzaWduZWQgdG8uICAoVGhpcyBjb252ZW50aW9uIHNpZ25pZmljYW50bHkgcmVkdWNlcworICAvLyB0aGUgbnVtYmVyIG9mIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSByZWZlcmVuY2UgY291bnQKKyAgLy8gdXBkYXRlcy4pCisjaWZuZGVmIF9fR0MKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc3RydWN0IF9Sb3BlX3NlbGZfZGVzdHJ1Y3RfcHRyCisgICAgeworICAgICAgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4qIF9NX3B0cjsKKworICAgICAgfl9Sb3BlX3NlbGZfZGVzdHJ1Y3RfcHRyKCkKKyAgICAgIHsgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz46Ol9TX3VucmVmKF9NX3B0cik7IH0KKyNpZmRlZiBfX0VYQ0VQVElPTlMKKyAgICAgIF9Sb3BlX3NlbGZfZGVzdHJ1Y3RfcHRyKCkgOiBfTV9wdHIoMCkgeyB9OworI2Vsc2UKKyAgICAgIF9Sb3BlX3NlbGZfZGVzdHJ1Y3RfcHRyKCkgeyB9OworI2VuZGlmCisgICAgICBfUm9wZV9zZWxmX2Rlc3RydWN0X3B0cihfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiogX19wKQorICAgICAgOiBfTV9wdHIoX19wKSB7IH0KKyAgICAKKyAgICAgIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+JgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICpfTV9wdHI7IH0KKyAgICAKKyAgICAgIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KgorICAgICAgb3BlcmF0b3ItPigpCisgICAgICB7IHJldHVybiBfTV9wdHI7IH0KKyAgICAKKyAgICAgIG9wZXJhdG9yIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KigpCisgICAgICB7IHJldHVybiBfTV9wdHI7IH0KKyAgICAKKyAgICAgIF9Sb3BlX3NlbGZfZGVzdHJ1Y3RfcHRyJgorICAgICAgb3BlcmF0b3I9KF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+KiBfX3gpCisgICAgICB7IF9NX3B0ciA9IF9feDsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKyNlbmRpZgorCisgIC8vIERlcmVmZXJlbmNpbmcgYSBub25jb25zdCBpdGVyYXRvciBoYXMgdG8gcmV0dXJuIHNvbWV0aGluZworICAvLyB0aGF0IGJlaGF2ZXMgYWxtb3N0IGxpa2UgYSByZWZlcmVuY2UuICBJdCdzIG5vdCBwb3NzaWJsZSB0bworICAvLyByZXR1cm4gYW4gYWN0dWFsIHJlZmVyZW5jZSBzaW5jZSBhc3NpZ25tZW50IHJlcXVpcmVzIGV4dHJhCisgIC8vIHdvcmsuICBBbmQgd2Ugd291bGQgZ2V0IGludG8gdGhlIHNhbWUgcHJvYmxlbXMgYXMgd2l0aCB0aGUKKyAgLy8gQ0QyIHZlcnNpb24gb2YgYmFzaWNfc3RyaW5nLgorICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBfUm9wZV9jaGFyX3JlZl9wcm94eQorICAgIHsKKyAgICAgIGZyaWVuZCBjbGFzcyByb3BlPF9DaGFyVCwgX0FsbG9jPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz47CisgICAgICBmcmllbmQgY2xhc3MgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+OworI2lmZGVmIF9fR0MKKyAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4qIF9TZWxmX2Rlc3RydWN0X3B0cjsKKyNlbHNlCisgICAgICB0eXBlZGVmIF9Sb3BlX3NlbGZfZGVzdHJ1Y3RfcHRyPF9DaGFyVCwgX0FsbG9jPiBfU2VsZl9kZXN0cnVjdF9wdHI7CisjZW5kaWYKKyAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4gX1JvcGVSZXA7CisgICAgICB0eXBlZGVmIHJvcGU8X0NoYXJULCBfQWxsb2M+IF9NeV9yb3BlOworICAgICAgc2l6ZV90IF9NX3BvczsKKyAgICAgIF9DaGFyVCBfTV9jdXJyZW50OworICAgICAgYm9vbCBfTV9jdXJyZW50X3ZhbGlkOworICAgICAgX015X3JvcGUqIF9NX3Jvb3Q7ICAgICAvLyBUaGUgd2hvbGUgcm9wZS4KKyAgICBwdWJsaWM6CisgICAgICBfUm9wZV9jaGFyX3JlZl9wcm94eShfTXlfcm9wZSogX19yLCBzaXplX3QgX19wKQorICAgICAgOiAgX01fcG9zKF9fcCksIF9NX2N1cnJlbnQoKSwgX01fY3VycmVudF92YWxpZChmYWxzZSksIF9NX3Jvb3QoX19yKSB7IH0KKworICAgICAgX1JvcGVfY2hhcl9yZWZfcHJveHkoY29uc3QgX1JvcGVfY2hhcl9yZWZfcHJveHkmIF9feCkKKyAgICAgIDogX01fcG9zKF9feC5fTV9wb3MpLCBfTV9jdXJyZW50KF9feC5fTV9jdXJyZW50KSwgCisJX01fY3VycmVudF92YWxpZChmYWxzZSksIF9NX3Jvb3QoX194Ll9NX3Jvb3QpIHsgfQorCisgICAgICAvLyBEb24ndCBwcmVzZXJ2ZSBjYWNoZSBpZiB0aGUgcmVmZXJlbmNlIGNhbiBvdXRsaXZlIHRoZQorICAgICAgLy8gZXhwcmVzc2lvbi4gIFdlIGNsYWltIHRoYXQncyBub3QgcG9zc2libGUgd2l0aG91dCBjYWxsaW5nCisgICAgICAvLyBhIGNvcHkgY29uc3RydWN0b3Igb3IgZ2VuZXJhdGluZyByZWZlcmVuY2UgdG8gYSBwcm94eQorICAgICAgLy8gcmVmZXJlbmNlLiAgV2UgZGVjbGFyZSB0aGUgbGF0dGVyIHRvIGhhdmUgdW5kZWZpbmVkIHNlbWFudGljcy4KKyAgICAgIF9Sb3BlX2NoYXJfcmVmX3Byb3h5KF9NeV9yb3BlKiBfX3IsIHNpemVfdCBfX3AsIF9DaGFyVCBfX2MpCisgICAgICA6IF9NX3BvcyhfX3ApLCBfTV9jdXJyZW50KF9fYyksIF9NX2N1cnJlbnRfdmFsaWQodHJ1ZSksIF9NX3Jvb3QoX19yKSB7IH0KKworICAgICAgaW5saW5lIG9wZXJhdG9yIF9DaGFyVCAoKSBjb25zdDsKKworICAgICAgX1JvcGVfY2hhcl9yZWZfcHJveHkmCisgICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CisgICAgCisgICAgICBfUm9wZV9jaGFyX3B0cl9wcm94eTxfQ2hhclQsIF9BbGxvYz4gb3BlcmF0b3ImKCkgY29uc3Q7CisgICAgICAKKyAgICAgIF9Sb3BlX2NoYXJfcmVmX3Byb3h5JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9Sb3BlX2NoYXJfcmVmX3Byb3h5JiBfX2MpCisgICAgICB7IHJldHVybiBvcGVyYXRvcj0oKF9DaGFyVClfX2MpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9fQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKF9Sb3BlX2NoYXJfcmVmX3Byb3h5IDxfQ2hhclQsIF9fQWxsb2MgPiBfX2EsCisJIF9Sb3BlX2NoYXJfcmVmX3Byb3h5IDxfQ2hhclQsIF9fQWxsb2MgPiBfX2IpCisgICAgeworICAgICAgX0NoYXJUIF9fdG1wID0gX19hOworICAgICAgX19hID0gX19iOworICAgICAgX19iID0gX190bXA7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIF9Sb3BlX2NoYXJfcHRyX3Byb3h5CisgICAgeworICAgICAgLy8gWFhYIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIHJld3JpdHRlbi4KKyAgICAgIGZyaWVuZCBjbGFzcyBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz47CisgICAgICBzaXplX3QgX01fcG9zOworICAgICAgcm9wZTxfQ2hhclQsX0FsbG9jPiogX01fcm9vdDsgICAgIC8vIFRoZSB3aG9sZSByb3BlLgorICAgIHB1YmxpYzoKKyAgICAgIF9Sb3BlX2NoYXJfcHRyX3Byb3h5KGNvbnN0IF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCxfQWxsb2M+JiBfX3gpCisgICAgICA6IF9NX3BvcyhfX3guX01fcG9zKSwgX01fcm9vdChfX3guX01fcm9vdCkgeyB9CisKKyAgICAgIF9Sb3BlX2NoYXJfcHRyX3Byb3h5KGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5JiBfX3gpCisgICAgICA6IF9NX3BvcyhfX3guX01fcG9zKSwgX01fcm9vdChfX3guX01fcm9vdCkgeyB9CisKKyAgICAgIF9Sb3BlX2NoYXJfcHRyX3Byb3h5KCkgeyB9CisgICAgICAKKyAgICAgIF9Sb3BlX2NoYXJfcHRyX3Byb3h5KF9DaGFyVCogX194KQorICAgICAgOiBfTV9yb290KDApLCBfTV9wb3MoMCkgeyB9CisKKyAgICAgIF9Sb3BlX2NoYXJfcHRyX3Byb3h5JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5JiBfX3gpCisgICAgICB7CisgICAgICAgIF9NX3BvcyA9IF9feC5fTV9wb3M7CisgICAgICAgIF9NX3Jvb3QgPSBfX3guX01fcm9vdDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsCisJCSAgIGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVDIsIF9BbGxvYzI+JiBfX3kpOworCisgICAgICBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz4gb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPihfTV9yb290LCBfTV9wb3MpOyB9CisgICAgfTsKKworICAvLyBSb3BlIGl0ZXJhdG9yczoKKyAgLy8gVW5saWtlIGluIHRoZSBDIHZlcnNpb24sIHdlIGNhY2hlIG9ubHkgcGFydCBvZiB0aGUgc3RhY2sKKyAgLy8gZm9yIHJvcGUgaXRlcmF0b3JzLCBzaW5jZSB0aGV5IG11c3QgYmUgZWZmaWNpZW50bHkgY29weWFibGUuCisgIC8vIFdoZW4gd2UgcnVuIG91dCBvZiBjYWNoZSwgd2UgaGF2ZSB0byByZWNvbnN0cnVjdCB0aGUgaXRlcmF0b3IKKyAgLy8gdmFsdWUuCisgIC8vIFBvaW50ZXJzIGZyb20gaXRlcmF0b3JzIGFyZSBub3QgaW5jbHVkZWQgaW4gcmVmZXJlbmNlIGNvdW50cy4KKyAgLy8gSXRlcmF0b3JzIGFyZSBhc3N1bWVkIHRvIGJlIHRocmVhZCBwcml2YXRlLiAgUm9wZXMgY2FuCisgIC8vIGJlIHNoYXJlZC4KKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIF9Sb3BlX2l0ZXJhdG9yX2Jhc2UKKyAgICA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIF9DaGFyVD4KKyAgICB7CisgICAgICBmcmllbmQgY2xhc3Mgcm9wZTxfQ2hhclQsIF9BbGxvYz47CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQWxsb2MgX2FsbG9jYXRvcl90eXBlOyAvLyB1c2VkIGluIF9Sb3BlX3JvdGF0ZSwgVkMrKyB3b3JrYXJvdW5kCisgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+IF9Sb3BlUmVwOworICAgICAgLy8gQm9ybGFuZCBkb2Vzbid0IHdhbnQgdGhpcyB0byBiZSBwcm90ZWN0ZWQuCisgICAgcHJvdGVjdGVkOgorICAgICAgZW51bSB7IF9TX3BhdGhfY2FjaGVfbGVuID0gNCB9OyAvLyBNdXN0IGJlIDw9IDkuCisgICAgICBlbnVtIHsgX1NfaXRlcmF0b3JfYnVmX2xlbiA9IDE1IH07CisgICAgICBzaXplX3QgX01fY3VycmVudF9wb3M7CisgICAgICBfUm9wZVJlcCogX01fcm9vdDsgICAgIC8vIFRoZSB3aG9sZSByb3BlLgorICAgICAgc2l6ZV90IF9NX2xlYWZfcG9zOyAgICAvLyBTdGFydGluZyBwb3NpdGlvbiBmb3IgY3VycmVudCBsZWFmCisgICAgICBfX0dDX0NPTlNUIF9DaGFyVCogX01fYnVmX3N0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdWZmZXIgcG9zc2libHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGFpbmluZyBjdXJyZW50IGNoYXIuCisgICAgICBfX0dDX0NPTlNUIF9DaGFyVCogX01fYnVmX3B0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9pbnRlciB0byBjdXJyZW50IGNoYXIgaW4gYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAhPSAwID09PiBidWZmZXIgdmFsaWQuCisgICAgICBfX0dDX0NPTlNUIF9DaGFyVCogX01fYnVmX2VuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25lIHBhc3QgX19sYXN0IHZhbGlkIGNoYXIgaW4gYnVmZmVyLgorICAgICAgLy8gV2hhdCBmb2xsb3dzIGlzIHRoZSBwYXRoIGNhY2hlLiAgV2UgZ28gb3V0IG9mIG91cgorICAgICAgLy8gd2F5IHRvIG1ha2UgdGhpcyBjb21wYWN0LgorICAgICAgLy8gUGF0aF9lbmQgY29udGFpbnMgdGhlIGJvdHRvbSBzZWN0aW9uIG9mIHRoZSBwYXRoIGZyb20KKyAgICAgIC8vIHRoZSByb290IHRvIHRoZSBjdXJyZW50IGxlYWYuCisgICAgICBjb25zdCBfUm9wZVJlcCogX01fcGF0aF9lbmRbX1NfcGF0aF9jYWNoZV9sZW5dOworICAgICAgaW50IF9NX2xlYWZfaW5kZXg7ICAgICAvLyBMYXN0IHZhbGlkIF9fcG9zIGluIHBhdGhfZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBfTV9wYXRoX2VuZFswXSAuLi4gX01fcGF0aF9lbmRbbGVhZl9pbmRleC0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2ludCB0byBjb25jYXRlbmF0aW9uIG5vZGVzLgorICAgICAgdW5zaWduZWQgY2hhciBfTV9wYXRoX2RpcmVjdGlvbnM7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChwYXRoX2RpcmVjdGlvbnMgPj4gX19pKSAmIDEgaXMgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZmYgd2UgZ290IGZyb20gX01fcGF0aF9lbmRbbGVhZl9pbmRleCAtIF9faSAtIDFdCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIF9NX3BhdGhfZW5kW2xlYWZfaW5kZXggLSBfX2ldIGJ5IGdvaW5nIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBfX3JpZ2h0LiBBc3N1bWVzIHBhdGhfY2FjaGVfbGVuIDw9IDkuCisgICAgICBfQ2hhclQgX01fdG1wX2J1ZltfU19pdGVyYXRvcl9idWZfbGVuXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3J0IGJ1ZmZlciBmb3Igc3Vycm91bmRpbmcgY2hhcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWZ1bCBwcmltYXJpbHkgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3BlRnVuY3Rpb25zLiAgV2UgcHV0IHRoZSBidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlcmUgdG8gYXZvaWQgbG9ja2luZyBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11bHRpdGhyZWFkZWQgY2FzZS4KKyAgICAgIC8vIFRoZSBjYWNoZWQgcGF0aCBpcyBnZW5lcmFsbHkgYXNzdW1lZCB0byBiZSB2YWxpZAorICAgICAgLy8gb25seSBpZiB0aGUgYnVmZmVyIGlzIHZhbGlkLgorICAgICAgc3RhdGljIHZvaWQgX1Nfc2V0YnVmKF9Sb3BlX2l0ZXJhdG9yX2Jhc2UmIF9feCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGJ1ZmZlciBjb250ZW50cyBnaXZlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhdGggY2FjaGUuCisgICAgICBzdGF0aWMgdm9pZCBfU19zZXRjYWNoZShfUm9wZV9pdGVyYXRvcl9iYXNlJiBfX3gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBidWZmZXIgY29udGVudHMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGF0aCBjYWNoZS4KKyAgICAgIHN0YXRpYyB2b2lkIF9TX3NldGNhY2hlX2Zvcl9pbmNyKF9Sb3BlX2l0ZXJhdG9yX2Jhc2UmIF9feCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgYWJvdmUsIGJ1dCBhc3N1bWVzIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWNoZSBpcyB2YWxpZCBmb3IgcHJldmlvdXMgcG9zbi4KKyAgICAgIF9Sb3BlX2l0ZXJhdG9yX2Jhc2UoKSB7IH0KKworICAgICAgX1JvcGVfaXRlcmF0b3JfYmFzZShfUm9wZVJlcCogX19yb290LCBzaXplX3QgX19wb3MpCisgICAgICA6IF9NX2N1cnJlbnRfcG9zKF9fcG9zKSwgX01fcm9vdChfX3Jvb3QpLCBfTV9idWZfcHRyKDApIHsgfQorCisgICAgICB2b2lkIF9NX2luY3Ioc2l6ZV90IF9fbik7CisgICAgICB2b2lkIF9NX2RlY3Ioc2l6ZV90IF9fbik7CisgICAgcHVibGljOgorICAgICAgc2l6ZV90CisgICAgICBpbmRleCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9jdXJyZW50X3BvczsgfQorICAgIAorICAgICAgX1JvcGVfaXRlcmF0b3JfYmFzZShjb25zdCBfUm9wZV9pdGVyYXRvcl9iYXNlJiBfX3gpCisgICAgICB7CisgICAgICAgIGlmICgwICE9IF9feC5fTV9idWZfcHRyKQorCSAgKnRoaXMgPSBfX3g7CisJZWxzZQorCSAgeworICAgICAgICAgICAgX01fY3VycmVudF9wb3MgPSBfX3guX01fY3VycmVudF9wb3M7CisgICAgICAgICAgICBfTV9yb290ID0gX194Ll9NX3Jvb3Q7CisgICAgICAgICAgICBfTV9idWZfcHRyID0gMDsKKwkgIH0KKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIF9Sb3BlX2l0ZXJhdG9yOworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4KKyAgICB7CisgICAgICBmcmllbmQgY2xhc3Mgcm9wZTxfQ2hhclQsIF9BbGxvYz47CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiBfUm9wZVJlcDsKKyAgICAgIC8vIFRoZSBvbmUgZnJvbSB0aGUgYmFzZSBjbGFzcyBtYXkgbm90IGJlIGRpcmVjdGx5IHZpc2libGUuCisgICAgICBfUm9wZV9jb25zdF9pdGVyYXRvcihjb25zdCBfUm9wZVJlcCogX19yb290LCBzaXplX3QgX19wb3MpCisgICAgICA6IF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+KGNvbnN0X2Nhc3Q8X1JvcGVSZXAqPihfX3Jvb3QpLAorCQkJCQkgICAgX19wb3MpCisgICAgICAgICAgICAgICAgICAgLy8gT25seSBub25jb25zdCBpdGVyYXRvcnMgbW9kaWZ5IHJvb3QgcmVmIGNvdW50CisgICAgICB7IH0KKyAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ2hhclQgcmVmZXJlbmNlOyAgIC8vIFJlYWxseSBhIHZhbHVlLiAgUmV0dXJuaW5nIGEgcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV291bGQgYmUgYSBtZXNzLCBzaW5jZSBpdCB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgaW5jbHVkZWQgaW4gcmVmY291bnQuCisgICAgICB0eXBlZGVmIGNvbnN0IF9DaGFyVCogcG9pbnRlcjsKKworICAgIHB1YmxpYzoKKyAgICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yKCkgeyB9OworCisgICAgICBfUm9wZV9jb25zdF9pdGVyYXRvcihjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvciYgX194KQorICAgICAgOiBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCxfQWxsb2M+KF9feCkgeyB9CisKKyAgICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCxfQWxsb2M+JiBfX3gpOworICAgIAorICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3IoY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fciwgc2l6ZV90IF9fcG9zKQorICAgICAgOiBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCxfQWxsb2M+KF9fci5fTV90cmVlX3B0ciwgX19wb3MpIHsgfQorCisgICAgICBfUm9wZV9jb25zdF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvciYgX194KQorICAgICAgeworICAgICAgICBpZiAoMCAhPSBfX3guX01fYnVmX3B0cikKKwkgICooc3RhdGljX2Nhc3Q8X1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4qPih0aGlzKSkgPSBfX3g7CisJZWxzZQorCSAgeworICAgICAgICAgICAgdGhpcy0+X01fY3VycmVudF9wb3MgPSBfX3guX01fY3VycmVudF9wb3M7CisgICAgICAgICAgICB0aGlzLT5fTV9yb290ID0gX194Ll9NX3Jvb3Q7CisgICAgICAgICAgICB0aGlzLT5fTV9idWZfcHRyID0gMDsKKwkgIH0KKyAgICAgICAgcmV0dXJuKCp0aGlzKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKQorICAgICAgeworICAgICAgICBpZiAoMCA9PSB0aGlzLT5fTV9idWZfcHRyKQorCSAgdGhpcy0+X1Nfc2V0Y2FjaGUoKnRoaXMpOworICAgICAgICByZXR1cm4gKnRoaXMtPl9NX2J1Zl9wdHI7CisgICAgICB9CisKKyAgICAgIC8vIFdpdGhvdXQgdGhpcyBjb25zdCB2ZXJzaW9uLCBSb3BlIGl0ZXJhdG9ycyBkbyBub3QgbWVldCB0aGUKKyAgICAgIC8vIHJlcXVpcmVtZW50cyBvZiBhbiBJbnB1dCBJdGVyYXRvci4KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gKmNvbnN0X2Nhc3Q8X1JvcGVfY29uc3RfaXRlcmF0b3ImPigqdGhpcyk7CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisgICAgICAgIF9fR0NfQ09OU1QgX0NoYXJUKiBfX25leHQ7CisgICAgICAgIGlmICgwICE9IHRoaXMtPl9NX2J1Zl9wdHIKKwkgICAgJiYgKF9fbmV4dCA9IHRoaXMtPl9NX2J1Zl9wdHIgKyAxKSA8IHRoaXMtPl9NX2J1Zl9lbmQpCisJICB7CisgICAgICAgICAgICB0aGlzLT5fTV9idWZfcHRyID0gX19uZXh0OworICAgICAgICAgICAgKyt0aGlzLT5fTV9jdXJyZW50X3BvczsKKwkgIH0KKwllbHNlCisJICB0aGlzLT5fTV9pbmNyKDEpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcis9KHB0cmRpZmZfdCBfX24pCisgICAgICB7CisgICAgICAgIGlmIChfX24gPj0gMCkKKwkgIHRoaXMtPl9NX2luY3IoX19uKTsKKwllbHNlCisJICB0aGlzLT5fTV9kZWNyKC1fX24pOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKyAgICAgICAgdGhpcy0+X01fZGVjcigxKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfUm9wZV9jb25zdF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yLT0ocHRyZGlmZl90IF9fbikKKyAgICAgIHsKKyAgICAgICAgaWYgKF9fbiA+PSAwKQorCSAgdGhpcy0+X01fZGVjcihfX24pOworCWVsc2UKKwkgIHRoaXMtPl9NX2luY3IoLV9fbik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfUm9wZV9jb25zdF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7CisgICAgICAgIHNpemVfdCBfX29sZF9wb3MgPSB0aGlzLT5fTV9jdXJyZW50X3BvczsKKyAgICAgICAgdGhpcy0+X01faW5jcigxKTsKKyAgICAgICAgcmV0dXJuIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCxfQWxsb2M+KHRoaXMtPl9NX3Jvb3QsIF9fb2xkX3Bvcyk7CisgICAgICAgIC8vIFRoaXMgbWFrZXMgYSBzdWJzZXF1ZW50IGRlcmVmZXJlbmNlIGV4cGVuc2l2ZS4KKyAgICAgICAgLy8gUGVyaGFwcyB3ZSBzaG91bGQgaW5zdGVhZCBjb3B5IHRoZSBpdGVyYXRvcgorICAgICAgICAvLyBpZiBpdCBoYXMgYSB2YWxpZCBjYWNoZT8KKyAgICAgIH0KKworICAgICAgX1JvcGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeworICAgICAgICBzaXplX3QgX19vbGRfcG9zID0gdGhpcy0+X01fY3VycmVudF9wb3M7CisgICAgICAgIHRoaXMtPl9NX2RlY3IoMSk7CisgICAgICAgIHJldHVybiBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsX0FsbG9jPih0aGlzLT5fTV9yb290LCBfX29sZF9wb3MpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4KKyAgICAgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsCisJCSAgcHRyZGlmZl90IF9fbik7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPgorICAgICAgICBvcGVyYXRvcisoY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feCwKKwkJICBwdHJkaWZmX3QgX19uKTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUMiwgY2xhc3MgX0FsbG9jMj4KKyAgICAgICAgZnJpZW5kIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+CisgICAgICAgIG9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLAorCQkgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gpOworCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fbikKKyAgICAgIHsgcmV0dXJuIHJvcGU8X0NoYXJULCBfQWxsb2M+OjpfU19mZXRjaCh0aGlzLT5fTV9yb290LAorCQkJCQkgICAgICB0aGlzLT5fTV9jdXJyZW50X3BvcyArIF9fbik7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUMiwgY2xhc3MgX0FsbG9jMj4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX194LAorCQkgICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX195KTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUMiwgY2xhc3MgX0FsbG9jMj4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I8KGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsCisJCSAgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feSk7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBwdHJkaWZmX3QKKyAgICAgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsCisJCSAgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feSk7CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBjbGFzcyBfUm9wZV9pdGVyYXRvcgorICAgIDogcHVibGljIF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+CisgICAgeworICAgICAgZnJpZW5kIGNsYXNzIHJvcGU8X0NoYXJULCBfQWxsb2M+OworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz46Ol9Sb3BlUmVwIF9Sb3BlUmVwOworICAgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4qIF9NX3Jvb3Rfcm9wZTsKKworICAgICAgLy8gcm9vdCBpcyB0cmVhdGVkIGFzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhpcywgYW5kIGlzIHVzZWQgdG8KKyAgICAgIC8vIGRldGVjdCBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIHJvcGUuCisKKyAgICAgIC8vIFJvb3QgaXMgaW5jbHVkZWQgaW4gdGhlIHJlZmVyZW5jZSBjb3VudC4gIFRoaXMgaXMgbmVjZXNzYXJ5CisgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBkZXRlY3QgY2hhbmdlcyByZWxpYWJseS4gIFVuZm9ydHVuYXRlbHksIGl0CisgICAgICAvLyByZXF1aXJlcyBjYXJlZnVsIGJvb2trZWVwaW5nIGZvciB0aGUgbm9uR0MgY2FzZS4KKyAgICAgIF9Sb3BlX2l0ZXJhdG9yKHJvcGU8X0NoYXJULCBfQWxsb2M+KiBfX3IsIHNpemVfdCBfX3BvcykKKyAgICAgIDogX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4oX19yLT5fTV90cmVlX3B0ciwgX19wb3MpLAorICAgICAgICBfTV9yb290X3JvcGUoX19yKQorICAgICAgeyBfUm9wZVJlcDo6X1NfcmVmKHRoaXMtPl9NX3Jvb3QpOworICAgICAgICBpZiAoIShfX3IgLT4gZW1wdHkoKSkpCisJICB0aGlzLT5fU19zZXRjYWNoZSgqdGhpcyk7CisgICAgICB9CisKKyAgICAgIHZvaWQgX01fY2hlY2soKTsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBfUm9wZV9jaGFyX3JlZl9wcm94eTxfQ2hhclQsIF9BbGxvYz4qIHBvaW50ZXI7CisKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+JgorICAgICAgY29udGFpbmVyKCkKKyAgICAgIHsgcmV0dXJuICpfTV9yb290X3JvcGU7IH0KKworICAgICAgX1JvcGVfaXRlcmF0b3IoKQorICAgICAgeworICAgICAgICB0aGlzLT5fTV9yb290ID0gMDsgIC8vIE5lZWRlZCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nLgorICAgICAgfTsKKworICAgICAgX1JvcGVfaXRlcmF0b3IoY29uc3QgX1JvcGVfaXRlcmF0b3ImIF9feCkKKyAgICAgIDogX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4oX194KQorICAgICAgeworICAgICAgICBfTV9yb290X3JvcGUgPSBfX3guX01fcm9vdF9yb3BlOworICAgICAgICBfUm9wZVJlcDo6X1NfcmVmKHRoaXMtPl9NX3Jvb3QpOworICAgICAgfQorCisgICAgICBfUm9wZV9pdGVyYXRvcihyb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19yLCBzaXplX3QgX19wb3MpOworCisgICAgICB+X1JvcGVfaXRlcmF0b3IoKQorICAgICAgeyBfUm9wZVJlcDo6X1NfdW5yZWYodGhpcy0+X01fcm9vdCk7IH0KKworICAgICAgX1JvcGVfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1JvcGVfaXRlcmF0b3ImIF9feCkKKyAgICAgIHsKKyAgICAgICAgX1JvcGVSZXAqIF9fb2xkID0gdGhpcy0+X01fcm9vdDsKKwkKKyAgICAgICAgX1JvcGVSZXA6Ol9TX3JlZihfX3guX01fcm9vdCk7CisgICAgICAgIGlmICgwICE9IF9feC5fTV9idWZfcHRyKQorCSAgeworICAgICAgICAgICAgX01fcm9vdF9yb3BlID0gX194Ll9NX3Jvb3Rfcm9wZTsKKyAgICAgICAgICAgICooc3RhdGljX2Nhc3Q8X1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4qPih0aGlzKSkgPSBfX3g7CisJICB9CisJZWxzZQorCSAgeworCSAgICB0aGlzLT5fTV9jdXJyZW50X3BvcyA9IF9feC5fTV9jdXJyZW50X3BvczsKKyAgICAgICAgICAgIHRoaXMtPl9NX3Jvb3QgPSBfX3guX01fcm9vdDsKKyAgICAgICAgICAgIF9NX3Jvb3Rfcm9wZSA9IF9feC5fTV9yb290X3JvcGU7CisgICAgICAgICAgICB0aGlzLT5fTV9idWZfcHRyID0gMDsKKwkgIH0KKyAgICAgICAgX1JvcGVSZXA6Ol9TX3VucmVmKF9fb2xkKTsKKyAgICAgICAgcmV0dXJuKCp0aGlzKTsKKyAgICAgIH0KKworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvciooKQorICAgICAgeworICAgICAgICBfTV9jaGVjaygpOworICAgICAgICBpZiAoMCA9PSB0aGlzLT5fTV9idWZfcHRyKQorCSAgcmV0dXJuIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPihfTV9yb290X3JvcGUsCisJCQkJCQkgICAgICB0aGlzLT5fTV9jdXJyZW50X3Bvcyk7CisJZWxzZQorCSAgcmV0dXJuIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPihfTV9yb290X3JvcGUsCisJCQkJCQkgICAgICB0aGlzLT5fTV9jdXJyZW50X3BvcywKKwkJCQkJCSAgICAgICp0aGlzLT5fTV9idWZfcHRyKTsKKyAgICAgIH0KKworICAgICAgLy8gU2VlIGFib3ZlIGNvbW1lbnQuCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7CisJcmV0dXJuICpjb25zdF9jYXN0PF9Sb3BlX2l0ZXJhdG9yJj4oKnRoaXMpOworICAgICAgfQorCisgICAgICBfUm9wZV9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworICAgICAgICB0aGlzLT5fTV9pbmNyKDEpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrPShwdHJkaWZmX3QgX19uKQorICAgICAgeworICAgICAgICBpZiAoX19uID49IDApCisJICB0aGlzLT5fTV9pbmNyKF9fbik7CisJZWxzZQorCSAgdGhpcy0+X01fZGVjcigtX19uKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisgICAgICAgIHRoaXMtPl9NX2RlY3IoMSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1JvcGVfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvci09KHB0cmRpZmZfdCBfX24pCisgICAgICB7CisgICAgICAgIGlmIChfX24gPj0gMCkKKwkgIHRoaXMtPl9NX2RlY3IoX19uKTsKKwllbHNlCisJICB0aGlzLT5fTV9pbmNyKC1fX24pOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1JvcGVfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworICAgICAgICBzaXplX3QgX19vbGRfcG9zID0gdGhpcy0+X01fY3VycmVudF9wb3M7CisgICAgICAgIHRoaXMtPl9NX2luY3IoMSk7CisgICAgICAgIHJldHVybiBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsX0FsbG9jPihfTV9yb290X3JvcGUsIF9fb2xkX3Bvcyk7CisgICAgICB9CisKKyAgICAgIF9Sb3BlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90IF9fb2xkX3BvcyA9IHRoaXMtPl9NX2N1cnJlbnRfcG9zOworICAgICAgICB0aGlzLT5fTV9kZWNyKDEpOworICAgICAgICByZXR1cm4gX1JvcGVfaXRlcmF0b3I8X0NoYXJULF9BbGxvYz4oX01fcm9vdF9yb3BlLCBfX29sZF9wb3MpOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10ocHRyZGlmZl90IF9fbikKKyAgICAgIHsgcmV0dXJuIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPihfTV9yb290X3JvcGUsCisJCQkJCQkgICAgdGhpcy0+X01fY3VycmVudF9wb3MKKwkJCQkJCSAgICArIF9fbik7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUMiwgY2xhc3MgX0FsbG9jMj4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I9PShjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX194LAorCQkgICBjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPiYgX195KTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUMiwgY2xhc3MgX0FsbG9jMj4KKyAgICAgICAgZnJpZW5kIGJvb2wKKyAgICAgICAgb3BlcmF0b3I8KGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsCisJCSAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feSk7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBwdHJkaWZmX3QKKyAgICAgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVDIsIF9BbGxvYzI+JiBfX3gsCisJCSAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feSk7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPgorICAgICAgICBvcGVyYXRvci0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feCwgcHRyZGlmZl90IF9fbik7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPgorICAgICAgICBvcGVyYXRvcisoY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feCwgcHRyZGlmZl90IF9fbik7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQyLCBfQWxsb2MyPgorICAgICAgICBvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJUMiwgX0FsbG9jMj4mIF9feCk7CisgICAgfTsKKworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1JvcGVfYmFzZQorICAgIDogcHVibGljIF9BbGxvYworICAgIHsKKyAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOworCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX0FsbG9jKj4odGhpcyk7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUmCisgICAgICBfTV9nZXRfYWxsb2NhdG9yKCkKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfQWxsb2MqPih0aGlzKTsgfQorCisgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYKKyAgICAgIF9NX2dldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9BbGxvYyo+KHRoaXMpOyB9CisKKyAgICAgIHR5cGVkZWYgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz4gX1JvcGVSZXA7CisgICAgICAvLyBUaGUgb25lIGluIF9CYXNlIG1heSBub3QgYmUgdmlzaWJsZSBkdWUgdG8gdGVtcGxhdGUgcnVsZXMuCisKKyAgICAgIF9Sb3BlX2Jhc2UoX1JvcGVSZXAqIF9fdCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmKQorICAgICAgOiBfTV90cmVlX3B0cihfX3QpIHsgfQorCisgICAgICBfUm9wZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgeyB9CisKKyAgICAgIC8vIFRoZSBvbmx5IGRhdGEgbWVtYmVyIG9mIGEgcm9wZToKKyAgICAgIF9Sb3BlUmVwICpfTV90cmVlX3B0cjsKKworI2RlZmluZSBfX1JPUEVfREVGSU5FX0FMTE9DKF9UcCwgX19uYW1lKSBcCisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgXAorICAgICAgICAgIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIF9fbmFtZSMjQWxsb2M7IFwKKyAgICAgICAgc3RhdGljIF9UcCogX19uYW1lIyNfYWxsb2NhdGUoc2l6ZV90IF9fbikgXAorICAgICAgICAgIHsgcmV0dXJuIF9fbmFtZSMjQWxsb2MoKS5hbGxvY2F0ZShfX24pOyB9IFwKKyAgICAgICAgc3RhdGljIHZvaWQgX19uYW1lIyNfZGVhbGxvY2F0ZShfVHAgKl9fcCwgc2l6ZV90IF9fbikgXAorICAgICAgICAgIHsgX19uYW1lIyNBbGxvYygpLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9CisgICAgICBfX1JPUEVfREVGSU5FX0FMTE9DUyhfQWxsb2MpCisjdW5kZWYgX19ST1BFX0RFRklORV9BTExPQworCisJcHJvdGVjdGVkOgorICAgICAgX1JvcGVfYmFzZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfUm9wZV9iYXNlJik7CisgICAgICAKKyAgICAgIF9Sb3BlX2Jhc2UoY29uc3QgX1JvcGVfYmFzZSYpOworICAgIH07CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIHJvcGUgOiBwdWJsaWMgX1JvcGVfYmFzZTxfQ2hhclQsIF9BbGxvYz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ2hhclQgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NoYXJUIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX0NoYXJUKiBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4gaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX1JvcGVfY2hhcl9yZWZfcHJveHk8X0NoYXJULCBfQWxsb2M+IHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+IHBvaW50ZXI7CisKKyAgICAgIGZyaWVuZCBjbGFzcyBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz47CisgICAgICBmcmllbmQgY2xhc3MgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+OworICAgICAgZnJpZW5kIHN0cnVjdCBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBfUm9wZV9jaGFyX3B0cl9wcm94eTxfQ2hhclQsIF9BbGxvYz47CisgICAgICBmcmllbmQgY2xhc3MgX1JvcGVfY2hhcl9yZWZfcHJveHk8X0NoYXJULCBfQWxsb2M+OworICAgICAgZnJpZW5kIHN0cnVjdCBfUm9wZV9Sb3BlU3Vic3RyaW5nPF9DaGFyVCwgX0FsbG9jPjsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgX1JvcGVfYmFzZTxfQ2hhclQsIF9BbGxvYz4gX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV90cmVlX3B0cjsKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9hbGxvY2F0b3I7ICAgICAgCisgICAgICB0eXBlZGVmIF9fR0NfQ09OU1QgX0NoYXJUKiBfQ3N0cnB0cjsKKyAgICAgIAorICAgICAgc3RhdGljIF9DaGFyVCBfU19lbXB0eV9jX3N0clsxXTsKKyAgICAgIAorICAgICAgc3RhdGljIGJvb2wKKyAgICAgIF9TX2lzMChfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX19jID09IF9TX2VvcygoX0NoYXJUKikwKTsgfQorICAgICAgCisgICAgICBlbnVtIHsgX1NfY29weV9tYXggPSAyMyB9OworICAgICAgICAgICAgICAgIC8vIEZvciBzdHJpbmdzIHNob3J0ZXIgdGhhbiBfU19jb3B5X21heCwgd2UgY29weSB0bworICAgICAgICAgICAgICAgIC8vIGNvbmNhdGVuYXRlLgorCisgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVSZXA8X0NoYXJULCBfQWxsb2M+IF9Sb3BlUmVwOworICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbjxfQ2hhclQsIF9BbGxvYz4gX1JvcGVDb25jYXRlbmF0aW9uOworICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlTGVhZjxfQ2hhclQsIF9BbGxvYz4gX1JvcGVMZWFmOworICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlRnVuY3Rpb248X0NoYXJULCBfQWxsb2M+IF9Sb3BlRnVuY3Rpb247CisgICAgICB0eXBlZGVmIF9Sb3BlX1JvcGVTdWJzdHJpbmc8X0NoYXJULCBfQWxsb2M+IF9Sb3BlU3Vic3RyaW5nOworCisgICAgICAvLyBSZXRyaWV2ZSBhIGNoYXJhY3RlciBhdCB0aGUgaW5kaWNhdGVkIHBvc2l0aW9uLgorICAgICAgc3RhdGljIF9DaGFyVCBfU19mZXRjaChfUm9wZVJlcCogX19yLCBzaXplX3R5cGUgX19wb3MpOworCisjaWZuZGVmIF9fR0MKKyAgICAgIC8vIE9idGFpbiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgaW5kaWNhdGVkIHBvc2l0aW9uLgorICAgICAgLy8gVGhlIHBvaW50ZXIgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBjaGFyYWN0ZXIuCisgICAgICAvLyBJZiBzdWNoIGEgcG9pbnRlciBjYW5ub3QgYmUgcHJvZHVjZWQsIGFzIGlzIGZyZXF1ZW50bHkgdGhlCisgICAgICAvLyBjYXNlLCAwIGlzIHJldHVybmVkIGluc3RlYWQuCisgICAgICAvLyAoUmV0dXJucyBub256ZXJvIG9ubHkgaWYgYWxsIG5vZGVzIGluIHRoZSBwYXRoIGhhdmUgYSByZWZjb3VudAorICAgICAgLy8gb2YgMS4pCisgICAgICBzdGF0aWMgX0NoYXJUKiBfU19mZXRjaF9wdHIoX1JvcGVSZXAqIF9fciwgc2l6ZV90eXBlIF9fcG9zKTsKKyNlbmRpZgorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgX1NfYXBwbHlfdG9fcGllY2VzKC8vIHNob3VsZCBiZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIKKwkJCSBfUm9wZV9jaGFyX2NvbnN1bWVyPF9DaGFyVD4mIF9fYywKKwkJCSBjb25zdCBfUm9wZVJlcCogX19yLAorCQkJIHNpemVfdCBfX2JlZ2luLCBzaXplX3QgX19lbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZ2luIGFuZCBlbmQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gcmFuZ2UuCisKKyNpZm5kZWYgX19HQworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX3VucmVmKF9Sb3BlUmVwKiBfX3QpCisgICAgICB7IF9Sb3BlUmVwOjpfU191bnJlZihfX3QpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19yZWYoX1JvcGVSZXAqIF9fdCkKKyAgICAgIHsgX1JvcGVSZXA6Ol9TX3JlZihfX3QpOyB9CisKKyNlbHNlIC8qIF9fR0MgKi8KKyAgICAgIHN0YXRpYyB2b2lkIF9TX3VucmVmKF9Sb3BlUmVwKikgeyB9CisgICAgICBzdGF0aWMgdm9pZCBfU19yZWYoX1JvcGVSZXAqKSB7IH0KKyNlbmRpZgorCisjaWZkZWYgX19HQworICAgICAgdHlwZWRlZiBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPiogX1NlbGZfZGVzdHJ1Y3RfcHRyOworI2Vsc2UKKyAgICAgIHR5cGVkZWYgX1JvcGVfc2VsZl9kZXN0cnVjdF9wdHI8X0NoYXJULCBfQWxsb2M+IF9TZWxmX2Rlc3RydWN0X3B0cjsKKyNlbmRpZgorCisgICAgICAvLyBfUmVzdWx0IGlzIGNvdW50ZWQgaW4gcmVmY291bnQuCisgICAgICBzdGF0aWMgX1JvcGVSZXAqIF9TX3N1YnN0cmluZyhfUm9wZVJlcCogX19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhcnQsIHNpemVfdCBfX2VuZHAxKTsKKworICAgICAgc3RhdGljIF9Sb3BlUmVwKiBfU19jb25jYXRfY2hhcl9pdGVyKF9Sb3BlUmVwKiBfX3IsCisJCQkJCSAgIGNvbnN0IF9DaGFyVCogX19pdGVyLCBzaXplX3QgX19zbGVuKTsKKyAgICAgIC8vIENvbmNhdGVuYXRlIHJvcGUgYW5kIGNoYXIgcHRyLCBjb3B5aW5nIF9fcy4KKyAgICAgIC8vIFNob3VsZCByZWFsbHkgdGFrZSBhbiBhcmJpdHJhcnkgaXRlcmF0b3IuCisgICAgICAvLyBSZXN1bHQgaXMgY291bnRlZCBpbiByZWZjb3VudC4KKyAgICAgIHN0YXRpYyBfUm9wZVJlcCogX1NfZGVzdHJfY29uY2F0X2NoYXJfaXRlcihfUm9wZVJlcCogX19yLAorCQkJCQkJIGNvbnN0IF9DaGFyVCogX19pdGVyLAorCQkJCQkJIHNpemVfdCBfX3NsZW4pCisJLy8gQXMgYWJvdmUsIGJ1dCBvbmUgcmVmZXJlbmNlIHRvIF9fciBpcyBhYm91dCB0byBiZQorCS8vIGRlc3Ryb3llZC4gIFRodXMgdGhlIHBpZWNlcyBtYXkgYmUgcmVjeWNsZWQgaWYgYWxsCisJLy8gcmVsZXZhbnQgcmVmZXJlbmNlIGNvdW50cyBhcmUgMS4KKyNpZmRlZiBfX0dDCisJLy8gV2UgY2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIHNpbmNlIHJlZmNvdW50cyBhcmUgdW5hdmFpbGFibGUuCisgICAgICB7IHJldHVybiBfU19jb25jYXRfY2hhcl9pdGVyKF9fciwgX19pdGVyLCBfX3NsZW4pOyB9CisjZWxzZQorICAgICAgOworI2VuZGlmCisKKyAgICAgIHN0YXRpYyBfUm9wZVJlcCogX1NfY29uY2F0KF9Sb3BlUmVwKiBfX2xlZnQsIF9Sb3BlUmVwKiBfX3JpZ2h0KTsKKyAgICAgIC8vIEdlbmVyYWwgY29uY2F0ZW5hdGlvbiBvbiBfUm9wZVJlcC4gIF9SZXN1bHQKKyAgICAgIC8vIGhhcyByZWZjb3VudCBvZiAxLiAgQWRqdXN0cyBhcmd1bWVudCByZWZjb3VudHMuCisKKyAgIHB1YmxpYzoKKyAgICAgIHZvaWQKKyAgICAgIGFwcGx5X3RvX3BpZWNlcyhzaXplX3QgX19iZWdpbiwgc2l6ZV90IF9fZW5kLAorCQkgICAgICBfUm9wZV9jaGFyX2NvbnN1bWVyPF9DaGFyVD4mIF9fYykgY29uc3QKKyAgICAgIHsgX1NfYXBwbHlfdG9fcGllY2VzKF9fYywgdGhpcy0+X01fdHJlZV9wdHIsIF9fYmVnaW4sIF9fZW5kKTsgfQorCisgICBwcm90ZWN0ZWQ6CisKKyAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgIF9TX3JvdW5kZWRfdXBfc2l6ZShzaXplX3QgX19uKQorICAgICAgeyByZXR1cm4gX1JvcGVMZWFmOjpfU19yb3VuZGVkX3VwX3NpemUoX19uKTsgfQorCisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBfU19hbGxvY2F0ZWRfY2FwYWNpdHkoc2l6ZV90IF9fbikKKyAgICAgIHsKKwlpZiAoX1NfaXNfYmFzaWNfY2hhcl90eXBlKChfQ2hhclQqKTApKQorCSAgcmV0dXJuIF9TX3JvdW5kZWRfdXBfc2l6ZShfX24pIC0gMTsKKwllbHNlCisJICByZXR1cm4gX1Nfcm91bmRlZF91cF9zaXplKF9fbik7CisJCisgICAgICB9CisKKyAgICAgIC8vIEFsbG9jYXRlIGFuZCBjb25zdHJ1Y3QgYSBSb3BlTGVhZiB1c2luZyB0aGUgc3VwcGxpZWQgYWxsb2NhdG9yCisgICAgICAvLyBUYWtlcyBvd25lcnNoaXAgb2YgcyBpbnN0ZWFkIG9mIGNvcHlpbmcuCisgICAgICBzdGF0aWMgX1JvcGVMZWFmKgorICAgICAgX1NfbmV3X1JvcGVMZWFmKF9fR0NfQ09OU1QgX0NoYXJUICpfX3MsCisJCSAgICAgIHNpemVfdCBfX3NpemUsIGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICB7CisJX1JvcGVMZWFmKiBfX3NwYWNlID0gdHlwZW5hbWUgX0Jhc2U6Ol9MQWxsb2MoX19hKS5hbGxvY2F0ZSgxKTsKKwlyZXR1cm4gbmV3KF9fc3BhY2UpIF9Sb3BlTGVhZihfX3MsIF9fc2l6ZSwgX19hKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIF9Sb3BlQ29uY2F0ZW5hdGlvbioKKyAgICAgIF9TX25ld19Sb3BlQ29uY2F0ZW5hdGlvbihfUm9wZVJlcCogX19sZWZ0LCBfUm9wZVJlcCogX19yaWdodCwKKwkJCSAgICAgICBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgeworCV9Sb3BlQ29uY2F0ZW5hdGlvbiogX19zcGFjZSA9IHR5cGVuYW1lIF9CYXNlOjpfQ0FsbG9jKF9fYSkuYWxsb2NhdGUoMSk7CisJcmV0dXJuIG5ldyhfX3NwYWNlKSBfUm9wZUNvbmNhdGVuYXRpb24oX19sZWZ0LCBfX3JpZ2h0LCBfX2EpOworICAgICAgfQorCisgICAgICBzdGF0aWMgX1JvcGVGdW5jdGlvbioKKyAgICAgIF9TX25ld19Sb3BlRnVuY3Rpb24oY2hhcl9wcm9kdWNlcjxfQ2hhclQ+KiBfX2YsCisJCQkgIHNpemVfdCBfX3NpemUsIGJvb2wgX19kLCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgeworCV9Sb3BlRnVuY3Rpb24qIF9fc3BhY2UgPSB0eXBlbmFtZSBfQmFzZTo6X0ZBbGxvYyhfX2EpLmFsbG9jYXRlKDEpOworCXJldHVybiBuZXcoX19zcGFjZSkgX1JvcGVGdW5jdGlvbihfX2YsIF9fc2l6ZSwgX19kLCBfX2EpOworICAgICAgfQorCisgICAgICBzdGF0aWMgX1JvcGVTdWJzdHJpbmcqCisgICAgICBfU19uZXdfUm9wZVN1YnN0cmluZyhfUm9wZV9Sb3BlUmVwPF9DaGFyVCxfQWxsb2M+KiBfX2IsIHNpemVfdCBfX3MsCisJCQkgICBzaXplX3QgX19sLCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgeworCV9Sb3BlU3Vic3RyaW5nKiBfX3NwYWNlID0gdHlwZW5hbWUgX0Jhc2U6Ol9TQWxsb2MoX19hKS5hbGxvY2F0ZSgxKTsKKwlyZXR1cm4gbmV3KF9fc3BhY2UpIF9Sb3BlU3Vic3RyaW5nKF9fYiwgX19zLCBfX2wsIF9fYSk7CisgICAgICB9CisgICAgICAKKyAgICAgIHN0YXRpYyBfUm9wZUxlYWYqCisgICAgICBfU19Sb3BlTGVhZl9mcm9tX3Vub3duZWRfY2hhcl9wdHIoY29uc3QgX0NoYXJUICpfX3MsCisJCQkJCXNpemVfdCBfX3NpemUsIGFsbG9jYXRvcl90eXBlJiBfX2EpCisjZGVmaW5lIF9fU1RMX1JPUEVfRlJPTV9VTk9XTkVEX0NIQVJfUFRSKF9fcywgX19zaXplLCBfX2EpIFwKKyAgICAgICAgICAgICAgICBfU19Sb3BlTGVhZl9mcm9tX3Vub3duZWRfY2hhcl9wdHIoX19zLCBfX3NpemUsIF9fYSkKKyAgICAgIHsKKwlpZiAoMCA9PSBfX3NpemUpCisJICByZXR1cm4gMDsKKwlfQ2hhclQqIF9fYnVmID0gX19hLmFsbG9jYXRlKF9TX3JvdW5kZWRfdXBfc2l6ZShfX3NpemUpKTsKKwkKKwlfX3VuaW5pdGlhbGl6ZWRfY29weV9uX2EoX19zLCBfX3NpemUsIF9fYnVmLCBfX2EpOworCV9TX2NvbmRfc3RvcmVfZW9zKF9fYnVmW19fc2l6ZV0pOworCV9fdHJ5CisJICB7IHJldHVybiBfU19uZXdfUm9wZUxlYWYoX19idWYsIF9fc2l6ZSwgX19hKTsgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfUm9wZVJlcDo6X19TVExfRlJFRV9TVFJJTkcoX19idWYsIF9fc2l6ZSwgX19hKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICB9CisKKyAgICAgIC8vIENvbmNhdGVuYXRpb24gb2Ygbm9uZW1wdHkgc3RyaW5ncy4KKyAgICAgIC8vIEFsd2F5cyBidWlsZHMgYSBjb25jYXRlbmF0aW9uIG5vZGUuCisgICAgICAvLyBSZWJhbGFuY2VzIGlmIHRoZSByZXN1bHQgaXMgdG9vIGRlZXAuCisgICAgICAvLyBSZXN1bHQgaGFzIHJlZmNvdW50IDEuCisgICAgICAvLyBEb2VzIG5vdCBpbmNyZW1lbnQgbGVmdCBhbmQgcmlnaHQgcmVmIGNvdW50cyBldmVuIHRob3VnaAorICAgICAgLy8gdGhleSBhcmUgcmVmZXJlbmNlZC4KKyAgICAgIHN0YXRpYyBfUm9wZVJlcCoKKyAgICAgIF9TX3RyZWVfY29uY2F0KF9Sb3BlUmVwKiBfX2xlZnQsIF9Sb3BlUmVwKiBfX3JpZ2h0KTsKKworICAgICAgLy8gQ29uY2F0ZW5hdGlvbiBoZWxwZXIgZnVuY3Rpb25zCisgICAgICBzdGF0aWMgX1JvcGVMZWFmKgorICAgICAgX1NfbGVhZl9jb25jYXRfY2hhcl9pdGVyKF9Sb3BlTGVhZiogX19yLAorCQkJICAgICAgIGNvbnN0IF9DaGFyVCogX19pdGVyLCBzaXplX3QgX19zbGVuKTsKKyAgICAgIC8vIENvbmNhdGVuYXRlIGJ5IGNvcHlpbmcgbGVhZi4KKyAgICAgIC8vIHNob3VsZCB0YWtlIGFuIGFyYml0cmFyeSBpdGVyYXRvcgorICAgICAgLy8gcmVzdWx0IGhhcyByZWZjb3VudCAxLgorI2lmbmRlZiBfX0dDCisgICAgICBzdGF0aWMgX1JvcGVMZWFmKgorICAgICAgX1NfZGVzdHJfbGVhZl9jb25jYXRfY2hhcl9pdGVyKF9Sb3BlTGVhZiogX19yLAorCQkJCSAgICAgY29uc3QgX0NoYXJUKiBfX2l0ZXIsIHNpemVfdCBfX3NsZW4pOworICAgICAgLy8gQSB2ZXJzaW9uIHRoYXQgcG90ZW50aWFsbHkgY2xvYmJlcnMgX19yIGlmIF9fci0+X01fcmVmX2NvdW50ID09IDEuCisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAKKyAgICAgIHN0YXRpYyBzaXplX3QgX1NfY2hhcl9wdHJfbGVuKGNvbnN0IF9DaGFyVCogX19zKTsKKyAgICAgIC8vIHNsaWdodGx5IGdlbmVyYWxpemVkIHN0cmxlbgorCisgICAgICByb3BlKF9Sb3BlUmVwKiBfX3QsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX3QsIF9fYSkgeyB9CisKKworICAgICAgLy8gQ29weSBfX3IgdG8gdGhlIF9DaGFyVCBidWZmZXIuCisgICAgICAvLyBSZXR1cm5zIF9fYnVmZmVyICsgX19yLT5fTV9zaXplLgorICAgICAgLy8gQXNzdW1lcyB0aGF0IGJ1ZmZlciBpcyB1bmluaXRpYWxpemVkLgorICAgICAgc3RhdGljIF9DaGFyVCogX1NfZmxhdHRlbihfUm9wZVJlcCogX19yLCBfQ2hhclQqIF9fYnVmZmVyKTsKKworICAgICAgLy8gQWdhaW4sIHdpdGggZXhwbGljaXQgc3RhcnRpbmcgcG9zaXRpb24gYW5kIGxlbmd0aC4KKyAgICAgIC8vIEFzc3VtZXMgdGhhdCBidWZmZXIgaXMgdW5pbml0aWFsaXplZC4KKyAgICAgIHN0YXRpYyBfQ2hhclQqIF9TX2ZsYXR0ZW4oX1JvcGVSZXAqIF9fciwKKwkJCQlzaXplX3QgX19zdGFydCwgc2l6ZV90IF9fbGVuLAorCQkJCV9DaGFyVCogX19idWZmZXIpOworCisgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZworICAgICAgX1NfbWluX2xlbltfX2RldGFpbDo6X1NfbWF4X3JvcGVfZGVwdGggKyAxXTsKKyAgICAgIAorICAgICAgc3RhdGljIGJvb2wKKyAgICAgIF9TX2lzX2JhbGFuY2VkKF9Sb3BlUmVwKiBfX3IpCisgICAgICB7IHJldHVybiAoX19yLT5fTV9zaXplID49IF9TX21pbl9sZW5bX19yLT5fTV9kZXB0aF0pOyB9CisKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfU19pc19hbG1vc3RfYmFsYW5jZWQoX1JvcGVSZXAqIF9fcikKKyAgICAgIHsgcmV0dXJuIChfX3ItPl9NX2RlcHRoID09IDAKKwkJfHwgX19yLT5fTV9zaXplID49IF9TX21pbl9sZW5bX19yLT5fTV9kZXB0aCAtIDFdKTsgfQorCisgICAgICBzdGF0aWMgYm9vbAorICAgICAgX1NfaXNfcm91Z2hseV9iYWxhbmNlZChfUm9wZVJlcCogX19yKQorICAgICAgeyByZXR1cm4gKF9fci0+X01fZGVwdGggPD0gMQorCQl8fCBfX3ItPl9NX3NpemUgPj0gX1NfbWluX2xlbltfX3ItPl9NX2RlcHRoIC0gMl0pOyB9CisKKyAgICAgIC8vIEFzc3VtZXMgdGhlIHJlc3VsdCBpcyBub3QgZW1wdHkuCisgICAgICBzdGF0aWMgX1JvcGVSZXAqCisgICAgICBfU19jb25jYXRfYW5kX3NldF9iYWxhbmNlZChfUm9wZVJlcCogX19sZWZ0LCBfUm9wZVJlcCogX19yaWdodCkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19yZXN1bHQgPSBfU19jb25jYXQoX19sZWZ0LCBfX3JpZ2h0KTsKKwlpZiAoX1NfaXNfYmFsYW5jZWQoX19yZXN1bHQpKQorCSAgX19yZXN1bHQtPl9NX2lzX2JhbGFuY2VkID0gdHJ1ZTsKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICB9CisKKyAgICAgIC8vIFRoZSBiYXNpYyByZWJhbGFuY2luZyBvcGVyYXRpb24uICBMb2dpY2FsbHkgY29waWVzIHRoZQorICAgICAgLy8gcm9wZS4gIFRoZSByZXN1bHQgaGFzIHJlZmNvdW50IG9mIDEuICBUaGUgY2xpZW50IHdpbGwKKyAgICAgIC8vIHVzdWFsbHkgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgX19yLgorICAgICAgLy8gVGhlIHJlc3VsdCBpcyB3aXRoaW4gaGVpZ2h0IDIgb2YgYmFsYW5jZWQgYnkgdGhlIGFib3ZlCisgICAgICAvLyBkZWZpbml0aW9uLgorICAgICAgc3RhdGljIF9Sb3BlUmVwKiBfU19iYWxhbmNlKF9Sb3BlUmVwKiBfX3IpOworCisgICAgICAvLyBBZGQgYWxsIHVuYmFsYW5jZWQgc3VidHJlZXMgdG8gdGhlIGZvcmVzdCBvZiBiYWxhbmNlZCB0cmVlcy4KKyAgICAgIC8vIFVzZWQgb25seSBieSBiYWxhbmNlLgorICAgICAgc3RhdGljIHZvaWQgX1NfYWRkX3RvX2ZvcmVzdChfUm9wZVJlcCpfX3IsIF9Sb3BlUmVwKiogX19mb3Jlc3QpOworCisgICAgICAvLyBBZGQgX19yIHRvIGZvcmVzdCwgYXNzdW1pbmcgX19yIGlzIGFscmVhZHkgYmFsYW5jZWQuCisgICAgICBzdGF0aWMgdm9pZCBfU19hZGRfbGVhZl90b19mb3Jlc3QoX1JvcGVSZXAqIF9fciwgX1JvcGVSZXAqKiBfX2ZvcmVzdCk7CisgICAgICAKKyAgICAgIC8vIFByaW50IHRvIHN0ZG91dCwgZXhwb3Npbmcgc3RydWN0dXJlCisgICAgICBzdGF0aWMgdm9pZCBfU19kdW1wKF9Sb3BlUmVwKiBfX3IsIGludCBfX2luZGVudCA9IDApOworICAgICAgCisgICAgICAvLyBSZXR1cm4gLTEsIDAsIG9yIDEgaWYgX194IDwgX195LCBfX3ggPT0gX195LCBvciBfX3ggPiBfX3kgcmVzcC4KKyAgICAgIHN0YXRpYyBpbnQgX1NfY29tcGFyZShjb25zdCBfUm9wZVJlcCogX194LCBjb25zdCBfUm9wZVJlcCogX195KTsKKyAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDAgPT0gdGhpcy0+X01fdHJlZV9wdHI7IH0KKyAgICAgIAorICAgICAgLy8gQ29tcGFyaXNvbiBtZW1iZXIgZnVuY3Rpb24uICBUaGlzIGlzIHB1YmxpYyBvbmx5IGZvciB0aG9zZQorICAgICAgLy8gY2xpZW50cyB0aGF0IG5lZWQgYSB0ZXJuYXJ5IGNvbXBhcmlzb24uICBPdGhlcnMKKyAgICAgIC8vIHNob3VsZCB1c2UgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIGJlbG93LgorICAgICAgaW50CisgICAgICBjb21wYXJlKGNvbnN0IHJvcGUmIF9feSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9TX2NvbXBhcmUodGhpcy0+X01fdHJlZV9wdHIsIF9feS5fTV90cmVlX3B0cik7IH0KKworICAgICAgcm9wZShjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fYSkKKyAgICAgIHsKKwl0aGlzLT5fTV90cmVlX3B0ciA9CisJICBfX1NUTF9ST1BFX0ZST01fVU5PV05FRF9DSEFSX1BUUihfX3MsIF9TX2NoYXJfcHRyX2xlbihfX3MpLAorCQkJCQkgICBfTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisgICAgICByb3BlKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3QgX19sZW4sCisJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fYSkKKyAgICAgIHsKKwl0aGlzLT5fTV90cmVlX3B0ciA9CisJICBfX1NUTF9ST1BFX0ZST01fVU5PV05FRF9DSEFSX1BUUihfX3MsIF9fbGVuLCBfTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgfQorCisgICAgICAvLyBTaG91bGQgcGVyaGFwcyBiZSB0ZW1wbGF0aXplZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGl0ZXJhdG9yIHR5cGUKKyAgICAgIC8vIGFuZCB1c2UgU2VxdWVuY2VfYnVmZmVyLiAgKEl0IHNob3VsZCBwZXJoYXBzIHVzZSBzZXF1ZW5jZV9idWZmZXIKKyAgICAgIC8vIGV2ZW4gbm93LikKKyAgICAgIHJvcGUoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9DaGFyVCogX19lLAorCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7CisJdGhpcy0+X01fdHJlZV9wdHIgPQorCSAgX19TVExfUk9QRV9GUk9NX1VOT1dORURfQ0hBUl9QVFIoX19zLCBfX2UgLSBfX3MsIF9NX2dldF9hbGxvY2F0b3IoKSk7CisgICAgICB9CisKKyAgICAgIHJvcGUoY29uc3QgY29uc3RfaXRlcmF0b3ImIF9fcywgY29uc3QgY29uc3RfaXRlcmF0b3ImIF9fZSwKKwkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX1Nfc3Vic3RyaW5nKF9fcy5fTV9yb290LCBfX3MuX01fY3VycmVudF9wb3MsCisJCQkgICBfX2UuX01fY3VycmVudF9wb3MpLCBfX2EpCisgICAgICB7IH0KKworICAgICAgcm9wZShjb25zdCBpdGVyYXRvciYgX19zLCBjb25zdCBpdGVyYXRvciYgX19lLAorCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfU19zdWJzdHJpbmcoX19zLl9NX3Jvb3QsIF9fcy5fTV9jdXJyZW50X3BvcywKKwkJCSAgIF9fZS5fTV9jdXJyZW50X3BvcyksIF9fYSkKKyAgICAgIHsgfQorCisgICAgICByb3BlKF9DaGFyVCBfX2MsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7CisJX0NoYXJUKiBfX2J1ZiA9IHRoaXMtPl9EYXRhX2FsbG9jYXRlKF9TX3JvdW5kZWRfdXBfc2l6ZSgxKSk7CisJCisJX01fZ2V0X2FsbG9jYXRvcigpLmNvbnN0cnVjdChfX2J1ZiwgX19jKTsKKwlfX3RyeQorCSAgeworCSAgICB0aGlzLT5fTV90cmVlX3B0ciA9IF9TX25ld19Sb3BlTGVhZihfX2J1ZiwgMSwKKwkJCQkJCV9NX2dldF9hbGxvY2F0b3IoKSk7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9Sb3BlUmVwOjpfX1NUTF9GUkVFX1NUUklORyhfX2J1ZiwgMSwgX01fZ2V0X2FsbG9jYXRvcigpKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICB9CisKKyAgICAgIHJvcGUoc2l6ZV90IF9fbiwgX0NoYXJUIF9fYywKKwkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSk7CisKKyAgICAgIHJvcGUoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKDAsIF9fYSkgeyB9CisKKyAgICAgIC8vIENvbnN0cnVjdCBhIHJvcGUgZnJvbSBhIGZ1bmN0aW9uIHRoYXQgY2FuIGNvbXB1dGUgaXRzIG1lbWJlcnMKKyAgICAgIHJvcGUoY2hhcl9wcm9kdWNlcjxfQ2hhclQ+ICpfX2ZuLCBzaXplX3QgX19sZW4sIGJvb2wgX19kZWxldGVfZm4sCisJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fYSkKKyAgICAgIHsKKwl0aGlzLT5fTV90cmVlX3B0ciA9ICgwID09IF9fbGVuKSA/CisJICAwIDogX1NfbmV3X1JvcGVGdW5jdGlvbihfX2ZuLCBfX2xlbiwgX19kZWxldGVfZm4sIF9fYSk7CisgICAgICB9CisKKyAgICAgIHJvcGUoY29uc3Qgcm9wZSYgX194LCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX194Ll9NX3RyZWVfcHRyLCBfX2EpCisgICAgICB7IF9TX3JlZih0aGlzLT5fTV90cmVlX3B0cik7IH0KKworICAgICAgfnJvcGUoKSB0aHJvdygpCisgICAgICB7IF9TX3VucmVmKHRoaXMtPl9NX3RyZWVfcHRyKTsgfQorCisgICAgICByb3BlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHJvcGUmIF9feCkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19vbGQgPSB0aGlzLT5fTV90cmVlX3B0cjsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9feC5fTV90cmVlX3B0cjsKKwlfU19yZWYodGhpcy0+X01fdHJlZV9wdHIpOworCV9TX3VucmVmKF9fb2xkKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkKKyAgICAgIHsKKwlfU191bnJlZih0aGlzLT5fTV90cmVlX3B0cik7CisJdGhpcy0+X01fdHJlZV9wdHIgPSAwOworICAgICAgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBwdXNoX2JhY2soX0NoYXJUIF9feCkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19vbGQgPSB0aGlzLT5fTV90cmVlX3B0cjsKKwl0aGlzLT5fTV90cmVlX3B0cgorCSAgPSBfU19kZXN0cl9jb25jYXRfY2hhcl9pdGVyKHRoaXMtPl9NX3RyZWVfcHRyLCAmX194LCAxKTsKKwlfU191bnJlZihfX29sZCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9iYWNrKCkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19vbGQgPSB0aGlzLT5fTV90cmVlX3B0cjsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9TX3N1YnN0cmluZyh0aGlzLT5fTV90cmVlX3B0ciwKKwkJCQkJIDAsIHRoaXMtPl9NX3RyZWVfcHRyLT5fTV9zaXplIC0gMSk7CisJX1NfdW5yZWYoX19vbGQpOworICAgICAgfQorCisgICAgICBfQ2hhclQKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeyByZXR1cm4gX1NfZmV0Y2godGhpcy0+X01fdHJlZV9wdHIsIHRoaXMtPl9NX3RyZWVfcHRyLT5fTV9zaXplIC0gMSk7IH0KKworICAgICAgdm9pZAorICAgICAgcHVzaF9mcm9udChfQ2hhclQgX194KQorICAgICAgeworCV9Sb3BlUmVwKiBfX29sZCA9IHRoaXMtPl9NX3RyZWVfcHRyOworCV9Sb3BlUmVwKiBfX2xlZnQgPQorCSAgX19TVExfUk9QRV9GUk9NX1VOT1dORURfQ0hBUl9QVFIoJl9feCwgMSwgX01fZ2V0X2FsbG9jYXRvcigpKTsKKwlfX3RyeQorCSAgeworCSAgICB0aGlzLT5fTV90cmVlX3B0ciA9IF9TX2NvbmNhdChfX2xlZnQsIHRoaXMtPl9NX3RyZWVfcHRyKTsKKwkgICAgX1NfdW5yZWYoX19vbGQpOworCSAgICBfU191bnJlZihfX2xlZnQpOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfU191bnJlZihfX2xlZnQpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19vbGQgPSB0aGlzLT5fTV90cmVlX3B0cjsKKwl0aGlzLT5fTV90cmVlX3B0cgorCSAgPSBfU19zdWJzdHJpbmcodGhpcy0+X01fdHJlZV9wdHIsIDEsIHRoaXMtPl9NX3RyZWVfcHRyLT5fTV9zaXplKTsKKwlfU191bnJlZihfX29sZCk7CisgICAgICB9CisKKyAgICAgIF9DaGFyVAorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX1NfZmV0Y2godGhpcy0+X01fdHJlZV9wdHIsIDApOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGJhbGFuY2UoKQorICAgICAgeworCV9Sb3BlUmVwKiBfX29sZCA9IHRoaXMtPl9NX3RyZWVfcHRyOworCXRoaXMtPl9NX3RyZWVfcHRyID0gX1NfYmFsYW5jZSh0aGlzLT5fTV90cmVlX3B0cik7CisJX1NfdW5yZWYoX19vbGQpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjb3B5KF9DaGFyVCogX19idWZmZXIpIGNvbnN0CisgICAgICB7CisJX0Rlc3Ryb3lfY29uc3QoX19idWZmZXIsIF9fYnVmZmVyICsgc2l6ZSgpLCBfTV9nZXRfYWxsb2NhdG9yKCkpOworCV9TX2ZsYXR0ZW4odGhpcy0+X01fdHJlZV9wdHIsIF9fYnVmZmVyKTsKKyAgICAgIH0KKworICAgICAgLy8gVGhpcyBpcyB0aGUgY29weSBmdW5jdGlvbiBmcm9tIHRoZSBzdGFuZGFyZCwgYnV0CisgICAgICAvLyB3aXRoIHRoZSBhcmd1bWVudHMgcmVvcmRlcmVkIHRvIG1ha2UgaXQgY29uc2lzdGVudCB3aXRoIHRoZQorICAgICAgLy8gcmVzdCBvZiB0aGUgaW50ZXJmYWNlLgorICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZ3VhcmFudGVlZCBub3QgdG8gY29tcGlsZSBpZiB0aGUgZHJhZnQgc3RhbmRhcmQKKyAgICAgIC8vIG9yZGVyIGlzIGFzc3VtZWQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvcHkoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQqIF9fYnVmZmVyKSBjb25zdAorICAgICAgeworCXNpemVfdCBfX3NpemUgPSBzaXplKCk7CisJc2l6ZV90IF9fbGVuID0gKF9fcG9zICsgX19uID4gX19zaXplPyBfX3NpemUgLSBfX3BvcyA6IF9fbik7CisKKwlfRGVzdHJveV9jb25zdChfX2J1ZmZlciwgX19idWZmZXIgKyBfX2xlbiwgX01fZ2V0X2FsbG9jYXRvcigpKTsKKwlfU19mbGF0dGVuKHRoaXMtPl9NX3RyZWVfcHRyLCBfX3BvcywgX19sZW4sIF9fYnVmZmVyKTsKKwlyZXR1cm4gX19sZW47CisgICAgICB9CisKKyAgICAgIC8vIFByaW50IHRvIHN0ZG91dCwgZXhwb3Npbmcgc3RydWN0dXJlLiAgTWF5IGJlIHVzZWZ1bCBmb3IKKyAgICAgIC8vIHBlcmZvcm1hbmNlIGRlYnVnZ2luZy4KKyAgICAgIHZvaWQKKyAgICAgIGR1bXAoKQorICAgICAgeyBfU19kdW1wKHRoaXMtPl9NX3RyZWVfcHRyKTsgfQorICAgICAgCisgICAgICAvLyBDb252ZXJ0IHRvIDAgdGVybWluYXRlZCBzdHJpbmcgaW4gbmV3IGFsbG9jYXRlZCBtZW1vcnkuCisgICAgICAvLyBFbWJlZGRlZCAwcyBpbiB0aGUgaW5wdXQgZG8gbm90IHRlcm1pbmF0ZSB0aGUgY29weS4KKyAgICAgIGNvbnN0IF9DaGFyVCogY19zdHIoKSBjb25zdDsKKworICAgICAgLy8gQXMgYWJvdmUsIGJ1dCBhbHNvIHVzZSB0aGUgZmxhdHRlbmVkIHJlcHJlc2VudGF0aW9uIGFzCisgICAgICAvLyB0aGUgbmV3IHJvcGUgcmVwcmVzZW50YXRpb24uCisgICAgICBjb25zdCBfQ2hhclQqIHJlcGxhY2Vfd2l0aF9jX3N0cigpOworICAgICAgCisgICAgICAvLyBSZWNsYWltIG1lbW9yeSBmb3IgdGhlIGNfc3RyIGdlbmVyYXRlZCBmbGF0dGVuZWQgc3RyaW5nLgorICAgICAgLy8gSW50ZW50aW9uYWxseSB1bmRvY3VtZW50ZWQsIHNpbmNlIGl0J3MgaGFyZCB0byBzYXkgd2hlbiB0aGlzCisgICAgICAvLyBpcyBzYWZlIGZvciBtdWx0aXBsZSB0aHJlYWRzLgorICAgICAgdm9pZAorICAgICAgZGVsZXRlX2Nfc3RyICgpCisgICAgICB7CisJaWYgKDAgPT0gdGhpcy0+X01fdHJlZV9wdHIpCisJICByZXR1cm47CisJaWYgKF9fZGV0YWlsOjpfU19sZWFmID09IHRoaXMtPl9NX3RyZWVfcHRyLT5fTV90YWcgJiYKKwkgICAgKChfUm9wZUxlYWYqKXRoaXMtPl9NX3RyZWVfcHRyKS0+X01fZGF0YSA9PQorCSAgICB0aGlzLT5fTV90cmVlX3B0ci0+X01fY19zdHJpbmcpCisJICB7CisJICAgIC8vIFJlcHJlc2VudGF0aW9uIHNoYXJlZAorCSAgICByZXR1cm47CisJICB9CisjaWZuZGVmIF9fR0MKKwl0aGlzLT5fTV90cmVlX3B0ci0+X01fZnJlZV9jX3N0cmluZygpOworI2VuZGlmCisJdGhpcy0+X01fdHJlZV9wdHItPl9NX2Nfc3RyaW5nID0gMDsKKyAgICAgIH0KKworICAgICAgX0NoYXJUCisgICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiBfU19mZXRjaCh0aGlzLT5fTV90cmVlX3B0ciwgX19wb3MpOyB9CisKKyAgICAgIF9DaGFyVAorICAgICAgYXQoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgICAgeworCS8vIGlmIChfX3BvcyA+PSBzaXplKCkpIHRocm93IG91dF9vZl9yYW5nZTsgIC8vIFhYWAorCXJldHVybiAoKnRoaXMpW19fcG9zXTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuKGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX3RyZWVfcHRyLCAwKSk7IH0KKworICAgICAgLy8gQW4gZWFzeSB3YXkgdG8gZ2V0IGEgY29uc3QgaXRlcmF0b3IgZnJvbSBhIG5vbi1jb25zdCBjb250YWluZXIuCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY29uc3RfYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4oY29uc3RfaXRlcmF0b3IodGhpcy0+X01fdHJlZV9wdHIsIDApKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuKGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX3RyZWVfcHRyLCBzaXplKCkpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY29uc3RfZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuKGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX3RyZWVfcHRyLCBzaXplKCkpKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgewlyZXR1cm4oMCA9PSB0aGlzLT5fTV90cmVlX3B0cj8gMCA6IHRoaXMtPl9NX3RyZWVfcHRyLT5fTV9zaXplKTsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGxlbmd0aCgpIGNvbnN0CisgICAgICB7CXJldHVybiBzaXplKCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9TX21pbl9sZW5baW50KF9fZGV0YWlsOjpfU19tYXhfcm9wZV9kZXB0aCkgLSAxXSAtIDE7CisJLy8gIEd1YXJhbnRlZXMgdGhhdCB0aGUgcmVzdWx0IGNhbiBiZSBzdWZmaWNpZW50bHkKKwkvLyAgYmFsYW5jZWQuICBMb25nZXIgcm9wZXMgd2lsbCBwcm9iYWJseSBzdGlsbCB3b3JrLAorCS8vICBidXQgaXQncyBoYXJkZXIgdG8gbWFrZSBndWFyYW50ZWVzLgorICAgICAgfQorCisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNvbnN0X3JiZWdpbigpIGNvbnN0CisgICAgICB7CXJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyAgICAgIAorICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY29uc3RfcmVuZCgpIGNvbnN0CisgICAgICB7CXJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCByb3BlPF9DaGFyVDIsIF9BbGxvYzI+CisgICAgICAgIG9wZXJhdG9yKyhjb25zdCByb3BlPF9DaGFyVDIsIF9BbGxvYzI+JiBfX2xlZnQsCisJCSAgY29uc3Qgcm9wZTxfQ2hhclQyLCBfQWxsb2MyPiYgX19yaWdodCk7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVDIsIGNsYXNzIF9BbGxvYzI+CisgICAgICAgIGZyaWVuZCByb3BlPF9DaGFyVDIsIF9BbGxvYzI+CisgICAgICAgIG9wZXJhdG9yKyhjb25zdCByb3BlPF9DaGFyVDIsIF9BbGxvYzI+JiBfX2xlZnQsIGNvbnN0IF9DaGFyVDIqIF9fcmlnaHQpOworCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQyLCBjbGFzcyBfQWxsb2MyPgorICAgICAgICBmcmllbmQgcm9wZTxfQ2hhclQyLCBfQWxsb2MyPgorICAgICAgICBvcGVyYXRvcisoY29uc3Qgcm9wZTxfQ2hhclQyLCBfQWxsb2MyPiYgX19sZWZ0LCBfQ2hhclQyIF9fcmlnaHQpOworCisgICAgICAvLyBUaGUgc3ltbWV0cmljIGNhc2VzIGFyZSBpbnRlbnRpb25hbGx5IG9taXR0ZWQsIHNpbmNlIHRoZXkncmUKKyAgICAgIC8vIHByZXN1bWVkIHRvIGJlIGxlc3MgY29tbW9uLCBhbmQgd2UgZG9uJ3QgaGFuZGxlIHRoZW0gYXMgd2VsbC4KKworICAgICAgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgcmVhbGx5IGJlIHRlbXBsYXRpemVkLiAgVGhlIGZpcnN0CisgICAgICAvLyBhcmd1bWVudCBzaG91bGQgYmUgYW4gaW5wdXQgaXRlcmF0b3Igb3IgZm9yd2FyZCBpdGVyYXRvciB3aXRoCisgICAgICAvLyB2YWx1ZV90eXBlIF9DaGFyVC4KKyAgICAgIHJvcGUmCisgICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX2l0ZXIsIHNpemVfdCBfX24pCisgICAgICB7CisJX1JvcGVSZXAqIF9fcmVzdWx0ID0KKwkgIF9TX2Rlc3RyX2NvbmNhdF9jaGFyX2l0ZXIodGhpcy0+X01fdHJlZV9wdHIsIF9faXRlciwgX19uKTsKKwlfU191bnJlZih0aGlzLT5fTV90cmVlX3B0cik7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfX3Jlc3VsdDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHJvcGUmCisgICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX2Nfc3RyaW5nKQorICAgICAgeworCXNpemVfdCBfX2xlbiA9IF9TX2NoYXJfcHRyX2xlbihfX2Nfc3RyaW5nKTsKKwlhcHBlbmQoX19jX3N0cmluZywgX19sZW4pOworCXJldHVybigqdGhpcyk7CisgICAgICB9CisKKyAgICAgIHJvcGUmCisgICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9DaGFyVCogX19lKQorICAgICAgeworCV9Sb3BlUmVwKiBfX3Jlc3VsdCA9CisJICBfU19kZXN0cl9jb25jYXRfY2hhcl9pdGVyKHRoaXMtPl9NX3RyZWVfcHRyLCBfX3MsIF9fZSAtIF9fcyk7CisJX1NfdW5yZWYodGhpcy0+X01fdHJlZV9wdHIpOworCXRoaXMtPl9NX3RyZWVfcHRyID0gX19yZXN1bHQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICByb3BlJgorICAgICAgYXBwZW5kKGNvbnN0X2l0ZXJhdG9yIF9fcywgY29uc3RfaXRlcmF0b3IgX19lKQorICAgICAgeworCV9TZWxmX2Rlc3RydWN0X3B0ciBfX2FwcGVuZGVlKF9TX3N1YnN0cmluZyhfX3MuX01fcm9vdCwKKwkJCQkJCSAgIF9fcy5fTV9jdXJyZW50X3BvcywKKwkJCQkJCSAgIF9fZS5fTV9jdXJyZW50X3BvcykpOworCV9Sb3BlUmVwKiBfX3Jlc3VsdCA9IF9TX2NvbmNhdCh0aGlzLT5fTV90cmVlX3B0ciwgCisJCQkJICAgICAgIChfUm9wZVJlcCopX19hcHBlbmRlZSk7CisJX1NfdW5yZWYodGhpcy0+X01fdHJlZV9wdHIpOworCXRoaXMtPl9NX3RyZWVfcHRyID0gX19yZXN1bHQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICByb3BlJgorICAgICAgYXBwZW5kKF9DaGFyVCBfX2MpCisgICAgICB7CisJX1JvcGVSZXAqIF9fcmVzdWx0ID0KKwkgIF9TX2Rlc3RyX2NvbmNhdF9jaGFyX2l0ZXIodGhpcy0+X01fdHJlZV9wdHIsICZfX2MsIDEpOworCV9TX3VucmVmKHRoaXMtPl9NX3RyZWVfcHRyKTsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9fcmVzdWx0OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgcm9wZSYKKyAgICAgIGFwcGVuZCgpCisgICAgICB7IHJldHVybiBhcHBlbmQoX0NoYXJUKCkpOyB9ICAvLyBYWFggd2h5PworCisgICAgICByb3BlJgorICAgICAgYXBwZW5kKGNvbnN0IHJvcGUmIF9feSkKKyAgICAgIHsKKwlfUm9wZVJlcCogX19yZXN1bHQgPSBfU19jb25jYXQodGhpcy0+X01fdHJlZV9wdHIsIF9feS5fTV90cmVlX3B0cik7CisJX1NfdW5yZWYodGhpcy0+X01fdHJlZV9wdHIpOworCXRoaXMtPl9NX3RyZWVfcHRyID0gX19yZXN1bHQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICByb3BlJgorICAgICAgYXBwZW5kKHNpemVfdCBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7CisJcm9wZTxfQ2hhclQsX0FsbG9jPiBfX2xhc3QoX19uLCBfX2MpOworCXJldHVybiBhcHBlbmQoX19sYXN0KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChyb3BlJiBfX2IpCisgICAgICB7CisJX1JvcGVSZXAqIF9fdG1wID0gdGhpcy0+X01fdHJlZV9wdHI7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfX2IuX01fdHJlZV9wdHI7CisJX19iLl9NX3RyZWVfcHRyID0gX190bXA7CisgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBSZXN1bHQgaXMgaW5jbHVkZWQgaW4gcmVmY291bnQuCisgICAgICBzdGF0aWMgX1JvcGVSZXAqCisgICAgICByZXBsYWNlKF9Sb3BlUmVwKiBfX29sZCwgc2l6ZV90IF9fcG9zMSwKKwkgICAgICBzaXplX3QgX19wb3MyLCBfUm9wZVJlcCogX19yKQorICAgICAgeworCWlmICgwID09IF9fb2xkKQorCSAgeworCSAgICBfU19yZWYoX19yKTsKKwkgICAgcmV0dXJuIF9fcjsKKwkgIH0KKwlfU2VsZl9kZXN0cnVjdF9wdHIgX19sZWZ0KF9TX3N1YnN0cmluZyhfX29sZCwgMCwgX19wb3MxKSk7CisJX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fcmlnaHQoX1Nfc3Vic3RyaW5nKF9fb2xkLCBfX3BvczIsIF9fb2xkLT5fTV9zaXplKSk7CisJX1JvcGVSZXAqIF9fcmVzdWx0OworCisJaWYgKDAgPT0gX19yKQorCSAgX19yZXN1bHQgPSBfU19jb25jYXQoX19sZWZ0LCBfX3JpZ2h0KTsKKwllbHNlCisJICB7CisJICAgIF9TZWxmX2Rlc3RydWN0X3B0ciBfX2xlZnRfcmVzdWx0KF9TX2NvbmNhdChfX2xlZnQsIF9fcikpOworCSAgICBfX3Jlc3VsdCA9IF9TX2NvbmNhdChfX2xlZnRfcmVzdWx0LCBfX3JpZ2h0KTsKKwkgIH0KKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc2l6ZV90IF9fcCwgY29uc3Qgcm9wZSYgX19yKQorICAgICAgeworCV9Sb3BlUmVwKiBfX3Jlc3VsdCA9CisJICByZXBsYWNlKHRoaXMtPl9NX3RyZWVfcHRyLCBfX3AsIF9fcCwgX19yLl9NX3RyZWVfcHRyKTsKKwlfU191bnJlZih0aGlzLT5fTV90cmVlX3B0cik7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfX3Jlc3VsdDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHNpemVfdCBfX3AsIHNpemVfdCBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7CisJcm9wZTxfQ2hhclQsX0FsbG9jPiBfX3IoX19uLF9fYyk7CisJaW5zZXJ0KF9fcCwgX19yKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHNpemVfdCBfX3AsIGNvbnN0IF9DaGFyVCogX19pLCBzaXplX3QgX19uKQorICAgICAgeworCV9TZWxmX2Rlc3RydWN0X3B0ciBfX2xlZnQoX1Nfc3Vic3RyaW5nKHRoaXMtPl9NX3RyZWVfcHRyLCAwLCBfX3ApKTsKKwlfU2VsZl9kZXN0cnVjdF9wdHIgX19yaWdodChfU19zdWJzdHJpbmcodGhpcy0+X01fdHJlZV9wdHIsCisJCQkJCQlfX3AsIHNpemUoKSkpOworCV9TZWxmX2Rlc3RydWN0X3B0ciBfX2xlZnRfcmVzdWx0KF9TX2NvbmNhdF9jaGFyX2l0ZXIoX19sZWZ0LCBfX2ksIF9fbikpOworCS8vIF9TXyBkZXN0cl9jb25jYXRfY2hhcl9pdGVyIHNob3VsZCBiZSBzYWZlIGhlcmUuCisJLy8gQnV0IGFzIGl0IHN0YW5kcyBpdCdzIHByb2JhYmx5IG5vdCBhIHdpbiwgc2luY2UgX19sZWZ0CisJLy8gaXMgbGlrZWx5IHRvIGhhdmUgYWRkaXRpb25hbCByZWZlcmVuY2VzLgorCV9Sb3BlUmVwKiBfX3Jlc3VsdCA9IF9TX2NvbmNhdChfX2xlZnRfcmVzdWx0LCBfX3JpZ2h0KTsKKwlfU191bnJlZih0aGlzLT5fTV90cmVlX3B0cik7CisJdGhpcy0+X01fdHJlZV9wdHIgPSBfX3Jlc3VsdDsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHNpemVfdCBfX3AsIGNvbnN0IF9DaGFyVCogX19jX3N0cmluZykKKyAgICAgIHsJaW5zZXJ0KF9fcCwgX19jX3N0cmluZywgX1NfY2hhcl9wdHJfbGVuKF9fY19zdHJpbmcpKTsgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc2l6ZV90IF9fcCwgX0NoYXJUIF9fYykKKyAgICAgIHsgaW5zZXJ0KF9fcCwgJl9fYywgMSk7IH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHNpemVfdCBfX3ApCisgICAgICB7CisJX0NoYXJUIF9fYyA9IF9DaGFyVCgpOworCWluc2VydChfX3AsICZfX2MsIDEpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc2l6ZV90IF9fcCwgY29uc3QgX0NoYXJUKiBfX2ksIGNvbnN0IF9DaGFyVCogX19qKQorICAgICAgeworCXJvcGUgX19yKF9faSwgX19qKTsKKwlpbnNlcnQoX19wLCBfX3IpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc2l6ZV90IF9fcCwgY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faSwKKwkgICAgIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2opCisgICAgICB7CisJcm9wZSBfX3IoX19pLCBfX2opOworCWluc2VydChfX3AsIF9fcik7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzaXplX3QgX19wLCBjb25zdCBpdGVyYXRvciYgX19pLAorCSAgICAgY29uc3QgaXRlcmF0b3ImIF9faikKKyAgICAgIHsKKwlyb3BlIF9fcihfX2ksIF9faik7CisJaW5zZXJ0KF9fcCwgX19yKTsKKyAgICAgIH0KKworICAgICAgLy8gKHBvc2l0aW9uLCBsZW5ndGgpIHZlcnNpb25zIG9mIHJlcGxhY2Ugb3BlcmF0aW9uczoKKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBzaXplX3QgX19uLCBjb25zdCByb3BlJiBfX3IpCisgICAgICB7CisJX1JvcGVSZXAqIF9fcmVzdWx0ID0KKwkgIHJlcGxhY2UodGhpcy0+X01fdHJlZV9wdHIsIF9fcCwgX19wICsgX19uLCBfX3IuX01fdHJlZV9wdHIpOworCV9TX3VucmVmKHRoaXMtPl9NX3RyZWVfcHRyKTsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9fcmVzdWx0OworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKHNpemVfdCBfX3AsIHNpemVfdCBfX24sCisJICAgICAgY29uc3QgX0NoYXJUKiBfX2ksIHNpemVfdCBfX2lfbGVuKQorICAgICAgeworCXJvcGUgX19yKF9faSwgX19pX2xlbik7CisJcmVwbGFjZShfX3AsIF9fbiwgX19yKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBzaXplX3QgX19uLCBfQ2hhclQgX19jKQorICAgICAgeworCXJvcGUgX19yKF9fYyk7CisJcmVwbGFjZShfX3AsIF9fbiwgX19yKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBzaXplX3QgX19uLCBjb25zdCBfQ2hhclQqIF9fY19zdHJpbmcpCisgICAgICB7CisJcm9wZSBfX3IoX19jX3N0cmluZyk7CisJcmVwbGFjZShfX3AsIF9fbiwgX19yKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBzaXplX3QgX19uLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19pLCBjb25zdCBfQ2hhclQqIF9faikKKyAgICAgIHsKKwlyb3BlIF9fcihfX2ksIF9faik7CisJcmVwbGFjZShfX3AsIF9fbiwgX19yKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBzaXplX3QgX19uLAorCSAgICAgIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2ksIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2opCisgICAgICB7CisJcm9wZSBfX3IoX19pLCBfX2opOworCXJlcGxhY2UoX19wLCBfX24sIF9fcik7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgc2l6ZV90IF9fbiwKKwkgICAgICBjb25zdCBpdGVyYXRvciYgX19pLCBjb25zdCBpdGVyYXRvciYgX19qKQorICAgICAgeworCXJvcGUgX19yKF9faSwgX19qKTsKKwlyZXBsYWNlKF9fcCwgX19uLCBfX3IpOworICAgICAgfQorCisgICAgICAvLyBTaW5nbGUgY2hhcmFjdGVyIHZhcmlhbnRzOgorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBfQ2hhclQgX19jKQorICAgICAgeworCWl0ZXJhdG9yIF9faSh0aGlzLCBfX3ApOworCSpfX2kgPSBfX2M7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2Uoc2l6ZV90IF9fcCwgY29uc3Qgcm9wZSYgX19yKQorICAgICAgeyByZXBsYWNlKF9fcCwgMSwgX19yKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKHNpemVfdCBfX3AsIGNvbnN0IF9DaGFyVCogX19pLCBzaXplX3QgX19pX2xlbikKKyAgICAgIHsgcmVwbGFjZShfX3AsIDEsIF9faSwgX19pX2xlbik7IH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShzaXplX3QgX19wLCBjb25zdCBfQ2hhclQqIF9fY19zdHJpbmcpCisgICAgICB7CXJlcGxhY2UoX19wLCAxLCBfX2Nfc3RyaW5nKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKHNpemVfdCBfX3AsIGNvbnN0IF9DaGFyVCogX19pLCBjb25zdCBfQ2hhclQqIF9faikKKyAgICAgIHsJcmVwbGFjZShfX3AsIDEsIF9faSwgX19qKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKHNpemVfdCBfX3AsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX2ksCisJICAgICAgY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faikKKyAgICAgIHsgcmVwbGFjZShfX3AsIDEsIF9faSwgX19qKTsgfQorCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKHNpemVfdCBfX3AsIGNvbnN0IGl0ZXJhdG9yJiBfX2ksCisJICAgICAgY29uc3QgaXRlcmF0b3ImIF9faikKKyAgICAgIHsgcmVwbGFjZShfX3AsIDEsIF9faSwgX19qKTsgfQorCisgICAgICAvLyBFcmFzZSwgKHBvc2l0aW9uLCBzaXplKSB2YXJpYW50LgorICAgICAgdm9pZAorICAgICAgZXJhc2Uoc2l6ZV90IF9fcCwgc2l6ZV90IF9fbikKKyAgICAgIHsKKwlfUm9wZVJlcCogX19yZXN1bHQgPSByZXBsYWNlKHRoaXMtPl9NX3RyZWVfcHRyLCBfX3AsCisJCQkJICAgICBfX3AgKyBfX24sIDApOworCV9TX3VucmVmKHRoaXMtPl9NX3RyZWVfcHRyKTsKKwl0aGlzLT5fTV90cmVlX3B0ciA9IF9fcmVzdWx0OworICAgICAgfQorCisgICAgICAvLyBFcmFzZSwgc2luZ2xlIGNoYXJhY3RlcgorICAgICAgdm9pZAorICAgICAgZXJhc2Uoc2l6ZV90IF9fcCkKKyAgICAgIHsgZXJhc2UoX19wLCBfX3AgKyAxKTsgfQorCisgICAgICAvLyBJbnNlcnQsIGl0ZXJhdG9yIHZhcmlhbnRzLgorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCBpdGVyYXRvciYgX19wLCBjb25zdCByb3BlJiBfX3IpCisgICAgICB7CisJaW5zZXJ0KF9fcC5pbmRleCgpLCBfX3IpOworCXJldHVybiBfX3A7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgaXRlcmF0b3ImIF9fcCwgc2l6ZV90IF9fbiwgX0NoYXJUIF9fYykKKyAgICAgIHsKKwlpbnNlcnQoX19wLmluZGV4KCksIF9fbiwgX19jKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorCisgICAgICBpdGVyYXRvciBpbnNlcnQoY29uc3QgaXRlcmF0b3ImIF9fcCwgX0NoYXJUIF9fYykKKyAgICAgIHsKKwlpbnNlcnQoX19wLmluZGV4KCksIF9fYyk7CisJcmV0dXJuIF9fcDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCBpdGVyYXRvciYgX19wICkKKyAgICAgIHsKKwlpbnNlcnQoX19wLmluZGV4KCkpOworCXJldHVybiBfX3A7CisgICAgICB9CisgICAgICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgX0NoYXJUKiBjX3N0cmluZykKKyAgICAgIHsKKwlpbnNlcnQoX19wLmluZGV4KCksIGNfc3RyaW5nKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorICAgICAgCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IF9DaGFyVCogX19pLCBzaXplX3QgX19uKQorICAgICAgeworCWluc2VydChfX3AuaW5kZXgoKSwgX19pLCBfX24pOworCXJldHVybiBfX3A7CisgICAgICB9CisgICAgICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgX0NoYXJUKiBfX2ksCisJICAgICBjb25zdCBfQ2hhclQqIF9faikKKyAgICAgIHsKKwlpbnNlcnQoX19wLmluZGV4KCksIF9faSwgX19qKTsgCisJcmV0dXJuIF9fcDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCBpdGVyYXRvciYgX19wLAorCSAgICAgY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faSwgY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faikKKyAgICAgIHsKKwlpbnNlcnQoX19wLmluZGV4KCksIF9faSwgX19qKTsKKwlyZXR1cm4gX19wOworICAgICAgfQorICAgICAgCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IGl0ZXJhdG9yJiBfX3AsCisJICAgICBjb25zdCBpdGVyYXRvciYgX19pLCBjb25zdCBpdGVyYXRvciYgX19qKQorICAgICAgeworCWluc2VydChfX3AuaW5kZXgoKSwgX19pLCBfX2opOworCXJldHVybiBfX3A7CisgICAgICB9CisKKyAgICAgIC8vIFJlcGxhY2UsIHJhbmdlIHZhcmlhbnRzLgorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShjb25zdCBpdGVyYXRvciYgX19wLCBjb25zdCBpdGVyYXRvciYgX19xLCBjb25zdCByb3BlJiBfX3IpCisgICAgICB7CXJlcGxhY2UoX19wLmluZGV4KCksIF9fcS5pbmRleCgpIC0gX19wLmluZGV4KCksIF9fcik7IH0KKworICAgICAgdm9pZAorICAgICAgcmVwbGFjZShjb25zdCBpdGVyYXRvciYgX19wLCBjb25zdCBpdGVyYXRvciYgX19xLCBfQ2hhclQgX19jKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX3EuaW5kZXgoKSAtIF9fcC5pbmRleCgpLCBfX2MpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgaXRlcmF0b3ImIF9fcSwKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fY19zdHJpbmcpCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9fcS5pbmRleCgpIC0gX19wLmluZGV4KCksIF9fY19zdHJpbmcpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgaXRlcmF0b3ImIF9fcSwKKwkgICAgICBjb25zdCBfQ2hhclQqIF9faSwgc2l6ZV90IF9fbikKKyAgICAgIHsgcmVwbGFjZShfX3AuaW5kZXgoKSwgX19xLmluZGV4KCkgLSBfX3AuaW5kZXgoKSwgX19pLCBfX24pOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgaXRlcmF0b3ImIF9fcSwKKwkgICAgICBjb25zdCBfQ2hhclQqIF9faSwgY29uc3QgX0NoYXJUKiBfX2opCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9fcS5pbmRleCgpIC0gX19wLmluZGV4KCksIF9faSwgX19qKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IGl0ZXJhdG9yJiBfX3EsCisJICAgICAgY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faSwgY29uc3QgY29uc3RfaXRlcmF0b3ImIF9faikKKyAgICAgIHsgcmVwbGFjZShfX3AuaW5kZXgoKSwgX19xLmluZGV4KCkgLSBfX3AuaW5kZXgoKSwgX19pLCBfX2opOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgaXRlcmF0b3ImIF9fcSwKKwkgICAgICBjb25zdCBpdGVyYXRvciYgX19pLCBjb25zdCBpdGVyYXRvciYgX19qKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX3EuaW5kZXgoKSAtIF9fcC5pbmRleCgpLCBfX2ksIF9faik7IH0KKworICAgICAgLy8gUmVwbGFjZSwgaXRlcmF0b3IgdmFyaWFudHMuCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IHJvcGUmIF9fcikKKyAgICAgIHsgcmVwbGFjZShfX3AuaW5kZXgoKSwgX19yKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIF9DaGFyVCBfX2MpCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9fYyk7IH0KKyAgICAgIAorICAgICAgdm9pZAorICAgICAgcmVwbGFjZShjb25zdCBpdGVyYXRvciYgX19wLCBjb25zdCBfQ2hhclQqIF9fY19zdHJpbmcpCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9fY19zdHJpbmcpOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgX0NoYXJUKiBfX2ksIHNpemVfdCBfX24pCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9faSwgX19uKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGNvbnN0IF9DaGFyVCogX19pLCBjb25zdCBfQ2hhclQqIF9faikKKyAgICAgIHsgcmVwbGFjZShfX3AuaW5kZXgoKSwgX19pLCBfX2opOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlcGxhY2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3RfaXRlcmF0b3IgX19pLCBjb25zdF9pdGVyYXRvciBfX2opCisgICAgICB7IHJlcGxhY2UoX19wLmluZGV4KCksIF9faSwgX19qKTsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICByZXBsYWNlKGNvbnN0IGl0ZXJhdG9yJiBfX3AsIGl0ZXJhdG9yIF9faSwgaXRlcmF0b3IgX19qKQorICAgICAgeyByZXBsYWNlKF9fcC5pbmRleCgpLCBfX2ksIF9faik7IH0KKworICAgICAgLy8gSXRlcmF0b3IgYW5kIHJhbmdlIHZhcmlhbnRzIG9mIGVyYXNlCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3QgaXRlcmF0b3ImIF9fcCwgY29uc3QgaXRlcmF0b3ImIF9fcSkKKyAgICAgIHsKKwlzaXplX3QgX19wX2luZGV4ID0gX19wLmluZGV4KCk7CisJZXJhc2UoX19wX2luZGV4LCBfX3EuaW5kZXgoKSAtIF9fcF9pbmRleCk7CisJcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIF9fcF9pbmRleCk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdCBpdGVyYXRvciYgX19wKQorICAgICAgeworCXNpemVfdCBfX3BfaW5kZXggPSBfX3AuaW5kZXgoKTsKKwllcmFzZShfX3BfaW5kZXgsIDEpOworCXJldHVybiBpdGVyYXRvcih0aGlzLCBfX3BfaW5kZXgpOworICAgICAgfQorCisgICAgICByb3BlCisgICAgICBzdWJzdHIoc2l6ZV90IF9fc3RhcnQsIHNpemVfdCBfX2xlbiA9IDEpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHJvcGU8X0NoYXJULCBfQWxsb2M+KF9TX3N1YnN0cmluZyh0aGlzLT5fTV90cmVlX3B0ciwKKwkJCQkJCSBfX3N0YXJ0LAorCQkJCQkJIF9fc3RhcnQgKyBfX2xlbikpOworICAgICAgfQorCisgICAgICByb3BlCisgICAgICBzdWJzdHIoaXRlcmF0b3IgX19zdGFydCwgaXRlcmF0b3IgX19lbmQpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHJvcGU8X0NoYXJULCBfQWxsb2M+KF9TX3N1YnN0cmluZyh0aGlzLT5fTV90cmVlX3B0ciwKKwkJCQkJCSBfX3N0YXJ0LmluZGV4KCksCisJCQkJCQkgX19lbmQuaW5kZXgoKSkpOworICAgICAgfQorCisgICAgICByb3BlCisgICAgICBzdWJzdHIoaXRlcmF0b3IgX19zdGFydCkgY29uc3QKKyAgICAgIHsKKwlzaXplX3QgX19wb3MgPSBfX3N0YXJ0LmluZGV4KCk7CisJcmV0dXJuIHJvcGU8X0NoYXJULCBfQWxsb2M+KF9TX3N1YnN0cmluZyh0aGlzLT5fTV90cmVlX3B0ciwKKwkJCQkJCSBfX3BvcywgX19wb3MgKyAxKSk7CisgICAgICB9CisKKyAgICAgIHJvcGUKKyAgICAgIHN1YnN0cihjb25zdF9pdGVyYXRvciBfX3N0YXJ0LCBjb25zdF9pdGVyYXRvciBfX2VuZCkgY29uc3QKKyAgICAgIHsKKwkvLyBUaGlzIG1pZ2h0IGV2ZW50dWFsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGNhY2hlIGluIHRoZQorCS8vIGl0ZXJhdG9yLgorCXJldHVybiByb3BlPF9DaGFyVCwgX0FsbG9jPihfU19zdWJzdHJpbmcodGhpcy0+X01fdHJlZV9wdHIsCisJCQkJCQkgX19zdGFydC5pbmRleCgpLAorCQkJCQkJIF9fZW5kLmluZGV4KCkpKTsKKyAgICAgIH0KKworICAgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4KKyAgICAgIHN1YnN0cihjb25zdF9pdGVyYXRvciBfX3N0YXJ0KQorICAgICAgeworCXNpemVfdCBfX3BvcyA9IF9fc3RhcnQuaW5kZXgoKTsKKwlyZXR1cm4gcm9wZTxfQ2hhclQsIF9BbGxvYz4oX1Nfc3Vic3RyaW5nKHRoaXMtPl9NX3RyZWVfcHRyLAorCQkJCQkJIF9fcG9zLCBfX3BvcyArIDEpKTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zOworCisgICAgICBzaXplX3R5cGUgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKKworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgICAgeworCXNpemVfdHlwZSBfX3Jlc3VsdF9wb3M7CisJY29uc3RfaXRlcmF0b3IgX19yZXN1bHQgPQorCSAgc3RkOjpzZWFyY2goY29uc3RfYmVnaW4oKSArIF9fcG9zLCBjb25zdF9lbmQoKSwKKwkJICAgICAgX19zLCBfX3MgKyBfU19jaGFyX3B0cl9sZW4oX19zKSk7CisJX19yZXN1bHRfcG9zID0gX19yZXN1bHQuaW5kZXgoKTsKKyNpZm5kZWYgX19TVExfT0xEX1JPUEVfU0VNQU5USUNTCisJaWYgKF9fcmVzdWx0X3BvcyA9PSBzaXplKCkpCisJICBfX3Jlc3VsdF9wb3MgPSBucG9zOworI2VuZGlmCisJcmV0dXJuIF9fcmVzdWx0X3BvczsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIG11dGFibGVfYmVnaW4oKQorICAgICAgeyByZXR1cm4oaXRlcmF0b3IodGhpcywgMCkpOyB9CisgICAgICAKKyAgICAgIGl0ZXJhdG9yCisgICAgICBtdXRhYmxlX2VuZCgpCisgICAgICB7IHJldHVybihpdGVyYXRvcih0aGlzLCBzaXplKCkpKTsgfQorCisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIAorICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgbXV0YWJsZV9yYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihtdXRhYmxlX2VuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICBtdXRhYmxlX3JlbmQoKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihtdXRhYmxlX2JlZ2luKCkpOyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgbXV0YWJsZV9yZWZlcmVuY2VfYXQoc2l6ZV90eXBlIF9fcG9zKQorICAgICAgeyByZXR1cm4gcmVmZXJlbmNlKHRoaXMsIF9fcG9zKTsgfQorCisjaWZkZWYgX19TVERfU1RVRkYKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKQorICAgICAgeyByZXR1cm4gX2NoYXJfcmVmX3Byb3h5KHRoaXMsIF9fcG9zKTsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX3BvcykKKyAgICAgIHsKKwkvLyBpZiAoX19wb3MgPj0gc2l6ZSgpKSB0aHJvdyBvdXRfb2ZfcmFuZ2U7ICAvLyBYWFgKKwlyZXR1cm4gKCp0aGlzKVtfX3Bvc107CisgICAgICB9CisgICAgICAKKyAgICAgIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpIHsgfQorICAgICAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB9CisgICAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApIHsgfQorICAgICAgCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNhcGFjaXR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG1heF9zaXplKCk7IH0KKworICAgICAgLy8gU3R1ZmYgYmVsb3cgdGhpcyBsaW5lIGlzIGRhbmdlcm91cyBiZWNhdXNlIGl0J3MgZXJyb3IgcHJvbmUuCisgICAgICAvLyBJIHdvdWxkIHJlYWxseSBsaWtlIHRvIGdldCByaWQgb2YgaXQuCisgICAgICAvLyBjb3B5IGZ1bmN0aW9uIHdpdGggZnVubnkgYXJnIG9yZGVyaW5nLgorICAgICAgc2l6ZV90eXBlCisgICAgICBjb3B5KF9DaGFyVCogX19idWZmZXIsIHNpemVfdHlwZSBfX24sCisJICAgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvcHkoX19wb3MsIF9fbiwgX19idWZmZXIpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gbXV0YWJsZV9lbmQoKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gbXV0YWJsZV9iZWdpbigpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKQorICAgICAgeyByZXR1cm4gbXV0YWJsZV9yZW5kKCk7IH0KKyAgICAgIAorICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIG11dGFibGVfcmJlZ2luKCk7IH0KKworI2Vsc2UKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKQorICAgICAgeyByZXR1cm4gY29uc3RfZW5kKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2JlZ2luKCk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpCisgICAgICB7IHJldHVybiBjb25zdF9yZW5kKCk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JiZWdpbigpOyB9CisKKyNlbmRpZgorICAgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNvbnN0IHR5cGVuYW1lIHJvcGU8X0NoYXJULCBfQWxsb2M+OjpzaXplX3R5cGUKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6bnBvcyA9IChzaXplX3R5cGUpKC0xKTsKKyAgCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCQkJICAgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gKF9feC5fTV9jdXJyZW50X3BvcyA9PSBfX3kuX01fY3VycmVudF9wb3MKKwkgICAgICAmJiBfX3guX01fcm9vdCA9PSBfX3kuX01fcm9vdCk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCQkJICBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAoX194Ll9NX2N1cnJlbnRfcG9zIDwgX195Ll9NX2N1cnJlbnRfcG9zKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCQkJICAgY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJCQkgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgcHRyZGlmZl90CisgICAgb3BlcmF0b3ItKGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIChwdHJkaWZmX3QpX194Ll9NX2N1cnJlbnRfcG9zIC0gKHB0cmRpZmZfdClfX3kuX01fY3VycmVudF9wb3M7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yLShjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwgcHRyZGlmZl90IF9fbikKKyAgICB7IHJldHVybiBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4oX194Ll9NX3Jvb3QsCisJCQkJCQkgIF9feC5fTV9jdXJyZW50X3BvcyAtIF9fbik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwgcHRyZGlmZl90IF9fbikKKyAgICB7IHJldHVybiBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4oX194Ll9NX3Jvb3QsCisJCQkJCQkgIF9feC5fTV9jdXJyZW50X3BvcyArIF9fbik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCkKKyAgeyByZXR1cm4gX1JvcGVfY29uc3RfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+KF9feC5fTV9yb290LAorCQkJCQkJX194Ll9NX2N1cnJlbnRfcG9zICsgX19uKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHtyZXR1cm4gKF9feC5fTV9jdXJyZW50X3BvcyA9PSBfX3kuX01fY3VycmVudF9wb3MKKwkgICAgICYmIF9feC5fTV9yb290X3JvcGUgPT0gX195Ll9NX3Jvb3Rfcm9wZSk7IH0KKyAgCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAoX194Ll9NX2N1cnJlbnRfcG9zIDwgX195Ll9NX2N1cnJlbnRfcG9zKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gX195IDwgX194OyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBwdHJkaWZmX3QKKyAgICBvcGVyYXRvci0oY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gKChwdHJkaWZmX3QpX194Ll9NX2N1cnJlbnRfcG9zCisJICAgICAgLSAocHRyZGlmZl90KV9feS5fTV9jdXJyZW50X3Bvcyk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yLShjb25zdCBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICBwdHJkaWZmX3QgX19uKQorICAgIHsgcmV0dXJuIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPihfX3guX01fcm9vdF9yb3BlLAorCQkJCQkgICAgX194Ll9NX2N1cnJlbnRfcG9zIC0gX19uKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194LCBwdHJkaWZmX3QgX19uKQorICAgIHsgcmV0dXJuIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPihfX3guX01fcm9vdF9yb3BlLAorCQkJCQkgICAgX194Ll9NX2N1cnJlbnRfcG9zICsgX19uKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgX1JvcGVfaXRlcmF0b3I8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194KQorICAgIHsgcmV0dXJuIF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPihfX3guX01fcm9vdF9yb3BlLAorCQkJCQkgICAgX194Ll9NX2N1cnJlbnRfcG9zICsgX19uKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgcm9wZTxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisoY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwKKwkgICAgICBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19yaWdodCkKKyAgICB7CisgICAgICAvLyBJbmxpbmluZyB0aGlzIHNob3VsZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGtlZXAgX19sZWZ0IGFuZAorICAgICAgLy8gX19yaWdodCBpbiByZWdpc3RlcnMuCisgICAgICB0eXBlZGVmIHJvcGU8X0NoYXJULCBfQWxsb2M+IHJvcGVfdHlwZTsKKyAgICAgIHJldHVybiByb3BlX3R5cGUocm9wZV90eXBlOjpfU19jb25jYXQoX19sZWZ0Ll9NX3RyZWVfcHRyLCAKKwkJCQkJICAgIF9fcmlnaHQuX01fdHJlZV9wdHIpKTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSByb3BlPF9DaGFyVCwgX0FsbG9jPiYKKyAgICBvcGVyYXRvcis9KHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsCisJICAgICAgIGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3JpZ2h0KQorICAgIHsKKyAgICAgIF9fbGVmdC5hcHBlbmQoX19yaWdodCk7CisgICAgICByZXR1cm4gX19sZWZ0OworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHJvcGU8X0NoYXJULCBfQWxsb2M+CisgICAgb3BlcmF0b3IrKGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX2xlZnQsCisJICAgICAgY29uc3QgX0NoYXJUKiBfX3JpZ2h0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgcm9wZTxfQ2hhclQsIF9BbGxvYz4gcm9wZV90eXBlOworICAgICAgc2l6ZV90IF9fcmxlbiA9IHJvcGVfdHlwZTo6X1NfY2hhcl9wdHJfbGVuKF9fcmlnaHQpOworICAgICAgcmV0dXJuIHJvcGVfdHlwZShyb3BlX3R5cGU6Ol9TX2NvbmNhdF9jaGFyX2l0ZXIoX19sZWZ0Ll9NX3RyZWVfcHRyLAorCQkJCQkJICAgICAgX19yaWdodCwgX19ybGVuKSk7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgcm9wZTxfQ2hhclQsIF9BbGxvYz4mCisgICAgb3BlcmF0b3IrPShyb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19sZWZ0LAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmlnaHQpCisgICAgeworICAgICAgX19sZWZ0LmFwcGVuZChfX3JpZ2h0KTsKKyAgICAgIHJldHVybiBfX2xlZnQ7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgcm9wZTxfQ2hhclQsIF9BbGxvYz4KKyAgICBvcGVyYXRvcisoY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwgX0NoYXJUIF9fcmlnaHQpCisgICAgeworICAgICAgdHlwZWRlZiByb3BlPF9DaGFyVCwgX0FsbG9jPiByb3BlX3R5cGU7CisgICAgICByZXR1cm4gcm9wZV90eXBlKHJvcGVfdHlwZTo6X1NfY29uY2F0X2NoYXJfaXRlcihfX2xlZnQuX01fdHJlZV9wdHIsCisJCQkJCQkgICAgICAmX19yaWdodCwgMSkpOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHJvcGU8X0NoYXJULCBfQWxsb2M+JgorICAgIG9wZXJhdG9yKz0ocm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwgX0NoYXJUIF9fcmlnaHQpCisgICAgeworICAgICAgX19sZWZ0LmFwcGVuZChfX3JpZ2h0KTsKKyAgICAgIHJldHVybiBfX2xlZnQ7CisgICAgfQorICAKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwKKwkgICAgICBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX19yaWdodCkKKyAgICB7IHJldHVybiBfX2xlZnQuY29tcGFyZShfX3JpZ2h0KSA8IDA7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fbGVmdCwKKwkgICAgICAgY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fcmlnaHQpCisgICAgeyByZXR1cm4gX19sZWZ0LmNvbXBhcmUoX19yaWdodCkgPT0gMDsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIChfX3guX01fcG9zID09IF9feS5fTV9wb3MgJiYgX194Ll9NX3Jvb3QgPT0gX195Ll9NX3Jvb3QpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCByb3BlPF9DaGFyVCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfUm9wZV9jaGFyX3B0cl9wcm94eTxfQ2hhclQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fbywKKwkgICAgICAgY29uc3Qgcm9wZTxfQ2hhclQsIF9BbGxvYz4mIF9fcik7CisKKyAgdHlwZWRlZiByb3BlPGNoYXI+IGNyb3BlOworICB0eXBlZGVmIHJvcGU8d2NoYXJfdD4gd3JvcGU7CisKKyAgaW5saW5lIGNyb3BlOjpyZWZlcmVuY2UKKyAgX19tdXRhYmxlX3JlZmVyZW5jZV9hdChjcm9wZSYgX19jLCBzaXplX3QgX19pKQorICB7IHJldHVybiBfX2MubXV0YWJsZV9yZWZlcmVuY2VfYXQoX19pKTsgfQorCisgIGlubGluZSB3cm9wZTo6cmVmZXJlbmNlCisgIF9fbXV0YWJsZV9yZWZlcmVuY2VfYXQod3JvcGUmIF9fYywgc2l6ZV90IF9faSkKKyAgeyByZXR1cm4gX19jLm11dGFibGVfcmVmZXJlbmNlX2F0KF9faSk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3gsIHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sgCituYW1lc3BhY2UgdHIxCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxfX2dudV9jeHg6OmNyb3BlPgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX2dudV9jeHg6OmNyb3BlJiBfX3N0cikgY29uc3QKKyAgICAgIHsKKwlzaXplX3QgX19zaXplID0gX19zdHIuc2l6ZSgpOworCWlmICgwID09IF9fc2l6ZSkKKwkgIHJldHVybiAwOworCXJldHVybiAxMyAqIF9fc3RyWzBdICsgNSAqIF9fc3RyW19fc2l6ZSAtIDFdICsgX19zaXplOworICAgICAgfQorICAgIH07CisKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8X19nbnVfY3h4Ojp3cm9wZT4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX19nbnVfY3h4Ojp3cm9wZSYgX19zdHIpIGNvbnN0CisgICAgICB7CisJc2l6ZV90IF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKKwlpZiAoMCA9PSBfX3NpemUpCisJICByZXR1cm4gMDsKKwlyZXR1cm4gMTMgKiBfX3N0clswXSArIDUgKiBfX3N0cltfX3NpemUgLSAxXSArIF9fc2l6ZTsKKyAgICAgIH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHRyMQorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyMgaW5jbHVkZSA8ZXh0L3JvcGVpbXBsLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvcm9wZWltcGwuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3JvcGVpbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiNWNiZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3JvcGVpbXBsLmgKQEAgLTAsMCArMSwxNzAzIEBACisvLyBTR0kncyByb3BlIGNsYXNzIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSByb3BlaW1wbC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7ZXh0L3JvcGV9CisgKi8KKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKworI2luY2x1ZGUgPGV4dC9hbGdvcml0aG0+IC8vIEZvciBjb3B5X24gYW5kIGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkKKyNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyNpbmNsdWRlIDxleHQvbnVtZXJpYz4gLy8gRm9yIHBvd2VyCisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB1c2luZyBzdGQ6OnNpemVfdDsKKyAgdXNpbmcgc3RkOjpwcmludGY7CisgIHVzaW5nIHN0ZDo6YmFzaWNfb3N0cmVhbTsKKyAgdXNpbmcgc3RkOjpfX3Rocm93X2xlbmd0aF9lcnJvcjsKKyAgdXNpbmcgc3RkOjpfRGVzdHJveTsKKyAgdXNpbmcgc3RkOjpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2E7CisKKyAgLy8gU2V0IGJ1Zl9zdGFydCwgYnVmX2VuZCwgYW5kIGJ1Zl9wdHIgYXBwcm9wcmlhdGVseSwgZmlsbGluZyB0bXBfYnVmCisgIC8vIGlmIG5lY2Vzc2FyeS4gIEFzc3VtZXMgX01fcGF0aF9lbmRbbGVhZl9pbmRleF0gYW5kIGxlYWZfcG9zIGFyZSBjb3JyZWN0LgorICAvLyBSZXN1bHRzIGluIGEgdmFsaWQgYnVmX3B0ciBpZiB0aGUgaXRlcmF0b3IgY2FuIGJlIGxlZ2l0aW1hdGVseQorICAvLyBkZXJlZmVyZW5jZWQuCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX3NldGJ1ZihfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPiYgX194KQorICAgIHsKKyAgICAgIGNvbnN0IF9Sb3BlUmVwKiBfX2xlYWYgPSBfX3guX01fcGF0aF9lbmRbX194Ll9NX2xlYWZfaW5kZXhdOworICAgICAgc2l6ZV90IF9fbGVhZl9wb3MgPSBfX3guX01fbGVhZl9wb3M7CisgICAgICBzaXplX3QgX19wb3MgPSBfX3guX01fY3VycmVudF9wb3M7CisKKyAgICAgIHN3aXRjaChfX2xlYWYtPl9NX3RhZykKKwl7CisJY2FzZSBfX2RldGFpbDo6X1NfbGVhZjoKKwkgIF9feC5fTV9idWZfc3RhcnQgPSAoKF9Sb3BlX1JvcGVMZWFmPF9DaGFyVCwgX0FsbG9jPiopX19sZWFmKS0+X01fZGF0YTsKKwkgIF9feC5fTV9idWZfcHRyID0gX194Ll9NX2J1Zl9zdGFydCArIChfX3BvcyAtIF9fbGVhZl9wb3MpOworCSAgX194Ll9NX2J1Zl9lbmQgPSBfX3guX01fYnVmX3N0YXJ0ICsgX19sZWFmLT5fTV9zaXplOworCSAgYnJlYWs7CisJY2FzZSBfX2RldGFpbDo6X1NfZnVuY3Rpb246CisJY2FzZSBfX2RldGFpbDo6X1Nfc3Vic3RyaW5nZm46CisJICB7CisJICAgIHNpemVfdCBfX2xlbiA9IF9TX2l0ZXJhdG9yX2J1Zl9sZW47CisJICAgIHNpemVfdCBfX2J1Zl9zdGFydF9wb3MgPSBfX2xlYWZfcG9zOworCSAgICBzaXplX3QgX19sZWFmX2VuZCA9IF9fbGVhZl9wb3MgKyBfX2xlYWYtPl9NX3NpemU7CisJICAgIGNoYXJfcHJvZHVjZXI8X0NoYXJUPiogX19mbiA9ICgoX1JvcGVfUm9wZUZ1bmN0aW9uPF9DaGFyVCwKKwkJCQkJICAgIF9BbGxvYz4qKV9fbGVhZiktPl9NX2ZuOworCSAgICBpZiAoX19idWZfc3RhcnRfcG9zICsgX19sZW4gPD0gX19wb3MpCisJICAgICAgeworCQlfX2J1Zl9zdGFydF9wb3MgPSBfX3BvcyAtIF9fbGVuIC8gNDsKKwkJaWYgKF9fYnVmX3N0YXJ0X3BvcyArIF9fbGVuID4gX19sZWFmX2VuZCkKKwkJICBfX2J1Zl9zdGFydF9wb3MgPSBfX2xlYWZfZW5kIC0gX19sZW47CisJICAgICAgfQorCSAgICBpZiAoX19idWZfc3RhcnRfcG9zICsgX19sZW4gPiBfX2xlYWZfZW5kKQorCSAgICAgIF9fbGVuID0gX19sZWFmX2VuZCAtIF9fYnVmX3N0YXJ0X3BvczsKKwkgICAgKCpfX2ZuKShfX2J1Zl9zdGFydF9wb3MgLSBfX2xlYWZfcG9zLCBfX2xlbiwgX194Ll9NX3RtcF9idWYpOworCSAgICBfX3guX01fYnVmX3B0ciA9IF9feC5fTV90bXBfYnVmICsgKF9fcG9zIC0gX19idWZfc3RhcnRfcG9zKTsKKwkgICAgX194Ll9NX2J1Zl9zdGFydCA9IF9feC5fTV90bXBfYnVmOworCSAgICBfX3guX01fYnVmX2VuZCA9IF9feC5fTV90bXBfYnVmICsgX19sZW47CisJICB9CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgYnJlYWs7CisJfQorICAgIH0KKworICAvLyBTZXQgcGF0aCBhbmQgYnVmZmVyIGluc2lkZSBhIHJvcGUgaXRlcmF0b3IuICBXZSBhc3N1bWUgdGhhdAorICAvLyBwb3MgYW5kIHJvb3QgYXJlIGFscmVhZHkgc2V0LgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19zZXRjYWNoZShfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPiYgX194KQorICAgIHsKKyAgICAgIGNvbnN0IF9Sb3BlUmVwKiBfX3BhdGhbaW50KF9fZGV0YWlsOjpfU19tYXhfcm9wZV9kZXB0aCkgKyAxXTsKKyAgICAgIGNvbnN0IF9Sb3BlUmVwKiBfX2N1cnJfcm9wZTsKKyAgICAgIGludCBfX2N1cnJfZGVwdGggPSAtMTsgIC8qIGluZGV4IGludG8gcGF0aCAgICAqLworICAgICAgc2l6ZV90IF9fY3Vycl9zdGFydF9wb3MgPSAwOworICAgICAgc2l6ZV90IF9fcG9zID0gX194Ll9NX2N1cnJlbnRfcG9zOworICAgICAgdW5zaWduZWQgY2hhciBfX2Rpcm5zID0gMDsgLy8gQml0IHZlY3RvciBtYXJraW5nIHJpZ2h0IHR1cm5zIGluIHRoZSBwYXRoCisKKyAgICAgIGlmIChfX3BvcyA+PSBfX3guX01fcm9vdC0+X01fc2l6ZSkKKwl7CisJICBfX3guX01fYnVmX3B0ciA9IDA7CisJICByZXR1cm47CisJfQorICAgICAgX19jdXJyX3JvcGUgPSBfX3guX01fcm9vdDsKKyAgICAgIGlmICgwICE9IF9fY3Vycl9yb3BlLT5fTV9jX3N0cmluZykKKwl7CisJICAvKiBUcmVhdCB0aGUgcm9vdCBhcyBhIGxlYWYuICovCisJICBfX3guX01fYnVmX3N0YXJ0ID0gX19jdXJyX3JvcGUtPl9NX2Nfc3RyaW5nOworCSAgX194Ll9NX2J1Zl9lbmQgPSBfX2N1cnJfcm9wZS0+X01fY19zdHJpbmcgKyBfX2N1cnJfcm9wZS0+X01fc2l6ZTsKKwkgIF9feC5fTV9idWZfcHRyID0gX19jdXJyX3JvcGUtPl9NX2Nfc3RyaW5nICsgX19wb3M7CisJICBfX3guX01fcGF0aF9lbmRbMF0gPSBfX2N1cnJfcm9wZTsKKwkgIF9feC5fTV9sZWFmX2luZGV4ID0gMDsKKwkgIF9feC5fTV9sZWFmX3BvcyA9IDA7CisJICByZXR1cm47CisJfQorICAgICAgZm9yKDs7KQorCXsKKwkgICsrX19jdXJyX2RlcHRoOworCSAgX19wYXRoW19fY3Vycl9kZXB0aF0gPSBfX2N1cnJfcm9wZTsKKwkgIHN3aXRjaChfX2N1cnJfcm9wZS0+X01fdGFnKQorCSAgICB7CisJICAgIGNhc2UgX19kZXRhaWw6Ol9TX2xlYWY6CisJICAgIGNhc2UgX19kZXRhaWw6Ol9TX2Z1bmN0aW9uOgorCSAgICBjYXNlIF9fZGV0YWlsOjpfU19zdWJzdHJpbmdmbjoKKwkgICAgICBfX3guX01fbGVhZl9wb3MgPSBfX2N1cnJfc3RhcnRfcG9zOworCSAgICAgIGdvdG8gZG9uZTsKKwkgICAgY2FzZSBfX2RldGFpbDo6X1NfY29uY2F0OgorCSAgICAgIHsKKwkJX1JvcGVfUm9wZUNvbmNhdGVuYXRpb248X0NoYXJULCBfQWxsb2M+KiBfX2MgPQorCQkgIChfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbjxfQ2hhclQsIF9BbGxvYz4qKV9fY3Vycl9yb3BlOworCQlfUm9wZVJlcCogX19sZWZ0ID0gX19jLT5fTV9sZWZ0OworCQlzaXplX3QgX19sZWZ0X2xlbiA9IF9fbGVmdC0+X01fc2l6ZTsKKworCQlfX2Rpcm5zIDw8PSAxOworCQlpZiAoX19wb3MgPj0gX19jdXJyX3N0YXJ0X3BvcyArIF9fbGVmdF9sZW4pCisJCSAgeworCQkgICAgX19kaXJucyB8PSAxOworCQkgICAgX19jdXJyX3JvcGUgPSBfX2MtPl9NX3JpZ2h0OworCQkgICAgX19jdXJyX3N0YXJ0X3BvcyArPSBfX2xlZnRfbGVuOworCQkgIH0KKwkJZWxzZQorCQkgIF9fY3Vycl9yb3BlID0gX19sZWZ0OworCSAgICAgIH0KKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICBkb25lOgorICAgICAgLy8gQ29weSBsYXN0IHNlY3Rpb24gb2YgcGF0aCBpbnRvIF9NX3BhdGhfZW5kLgorICAgICAgeworCWludCBfX2kgPSAtMTsKKwlpbnQgX19qID0gX19jdXJyX2RlcHRoICsgMSAtIGludChfU19wYXRoX2NhY2hlX2xlbik7CisKKwlpZiAoX19qIDwgMCkgX19qID0gMDsKKwl3aGlsZSAoX19qIDw9IF9fY3Vycl9kZXB0aCkKKwkgIF9feC5fTV9wYXRoX2VuZFsrK19faV0gPSBfX3BhdGhbX19qKytdOworCV9feC5fTV9sZWFmX2luZGV4ID0gX19pOworICAgICAgfQorICAgICAgX194Ll9NX3BhdGhfZGlyZWN0aW9ucyA9IF9fZGlybnM7CisgICAgICBfU19zZXRidWYoX194KTsKKyAgICB9CisKKyAgLy8gU3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgYWJvdmUuICBBc3N1bWVzIHRoYXQKKyAgLy8gdGhlIHBhdGggY2FjaGUgaXMgdmFsaWQgZm9yIHRoZSBwcmV2aW91cyBwb3NpdGlvbi4KKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1Nfc2V0Y2FjaGVfZm9yX2luY3IoX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4mIF9feCkKKyAgICB7CisgICAgICBpbnQgX19jdXJyZW50X2luZGV4ID0gX194Ll9NX2xlYWZfaW5kZXg7CisgICAgICBjb25zdCBfUm9wZVJlcCogX19jdXJyZW50X25vZGUgPSBfX3guX01fcGF0aF9lbmRbX19jdXJyZW50X2luZGV4XTsKKyAgICAgIHNpemVfdCBfX2xlbiA9IF9fY3VycmVudF9ub2RlLT5fTV9zaXplOworICAgICAgc2l6ZV90IF9fbm9kZV9zdGFydF9wb3MgPSBfX3guX01fbGVhZl9wb3M7CisgICAgICB1bnNpZ25lZCBjaGFyIF9fZGlybnMgPSBfX3guX01fcGF0aF9kaXJlY3Rpb25zOworICAgICAgX1JvcGVfUm9wZUNvbmNhdGVuYXRpb248X0NoYXJULCBfQWxsb2M+KiBfX2M7CisKKyAgICAgIGlmIChfX3guX01fY3VycmVudF9wb3MgLSBfX25vZGVfc3RhcnRfcG9zIDwgX19sZW4pCisJeworCSAgLyogTW9yZSBzdHVmZiBpbiB0aGlzIGxlYWYsIHdlIGp1c3QgZGlkbid0IGNhY2hlIGl0LiAqLworCSAgX1Nfc2V0YnVmKF9feCk7CisJICByZXR1cm47CisJfQorICAgICAgLy8gIG5vZGVfc3RhcnRfcG9zIGlzIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGxhc3Rfbm9kZS4KKyAgICAgIHdoaWxlICgtLV9fY3VycmVudF9pbmRleCA+PSAwKQorCXsKKwkgIGlmICghKF9fZGlybnMgJiAxKSAvKiBQYXRoIHR1cm5lZCBsZWZ0ICovKQorCSAgICBicmVhazsKKwkgIF9fY3VycmVudF9ub2RlID0gX194Ll9NX3BhdGhfZW5kW19fY3VycmVudF9pbmRleF07CisJICBfX2MgPSAoX1JvcGVfUm9wZUNvbmNhdGVuYXRpb248X0NoYXJULCBfQWxsb2M+KilfX2N1cnJlbnRfbm9kZTsKKwkgIC8vIE90aGVyd2lzZSB3ZSB3ZXJlIGluIHRoZSByaWdodCBjaGlsZC4gIFRodXMgd2Ugc2hvdWxkIHBvcAorCSAgLy8gdGhlIGNvbmNhdGVuYXRpb24gbm9kZS4KKwkgIF9fbm9kZV9zdGFydF9wb3MgLT0gX19jLT5fTV9sZWZ0LT5fTV9zaXplOworCSAgX19kaXJucyA+Pj0gMTsKKwl9CisgICAgICBpZiAoX19jdXJyZW50X2luZGV4IDwgMCkKKwl7CisJICAvLyBXZSB1bmRlcmZsb3dlZCB0aGUgY2FjaGUuIFB1bnQuCisJICBfU19zZXRjYWNoZShfX3gpOworCSAgcmV0dXJuOworCX0KKyAgICAgIF9fY3VycmVudF9ub2RlID0gX194Ll9NX3BhdGhfZW5kW19fY3VycmVudF9pbmRleF07CisgICAgICBfX2MgPSAoX1JvcGVfUm9wZUNvbmNhdGVuYXRpb248X0NoYXJULCBfQWxsb2M+KilfX2N1cnJlbnRfbm9kZTsKKyAgICAgIC8vIGN1cnJlbnRfbm9kZSBpcyBhIGNvbmNhdGVuYXRpb24gbm9kZS4gIFdlIGFyZSBwb3NpdGlvbmVkIG9uIHRoZSBmaXJzdAorICAgICAgLy8gY2hhcmFjdGVyIGluIGl0cyByaWdodCBjaGlsZC4KKyAgICAgIC8vIG5vZGVfc3RhcnRfcG9zIGlzIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGN1cnJlbnRfbm9kZS4KKyAgICAgIF9fbm9kZV9zdGFydF9wb3MgKz0gX19jLT5fTV9sZWZ0LT5fTV9zaXplOworICAgICAgX19jdXJyZW50X25vZGUgPSBfX2MtPl9NX3JpZ2h0OworICAgICAgX194Ll9NX3BhdGhfZW5kWysrX19jdXJyZW50X2luZGV4XSA9IF9fY3VycmVudF9ub2RlOworICAgICAgX19kaXJucyB8PSAxOworICAgICAgd2hpbGUgKF9fZGV0YWlsOjpfU19jb25jYXQgPT0gX19jdXJyZW50X25vZGUtPl9NX3RhZykKKwl7CisJICArK19fY3VycmVudF9pbmRleDsKKwkgIGlmIChpbnQoX1NfcGF0aF9jYWNoZV9sZW4pID09IF9fY3VycmVudF9pbmRleCkKKwkgICAgeworCSAgICAgIGludCBfX2k7CisJICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCBpbnQoX1NfcGF0aF9jYWNoZV9sZW4pIC0gMTsgX19pKyspCisJCV9feC5fTV9wYXRoX2VuZFtfX2ldID0gX194Ll9NX3BhdGhfZW5kW19faSsxXTsKKwkgICAgICAtLV9fY3VycmVudF9pbmRleDsKKwkgICAgfQorCSAgX19jdXJyZW50X25vZGUgPQorCSAgICAoKF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uPF9DaGFyVCwgX0FsbG9jPiopX19jdXJyZW50X25vZGUpLT5fTV9sZWZ0OworCSAgX194Ll9NX3BhdGhfZW5kW19fY3VycmVudF9pbmRleF0gPSBfX2N1cnJlbnRfbm9kZTsKKwkgIF9fZGlybnMgPDw9IDE7CisJICAvLyBub2RlX3N0YXJ0X3BvcyBpcyB1bmNoYW5nZWQuCisJfQorICAgICAgX194Ll9NX2xlYWZfaW5kZXggPSBfX2N1cnJlbnRfaW5kZXg7CisgICAgICBfX3guX01fbGVhZl9wb3MgPSBfX25vZGVfc3RhcnRfcG9zOworICAgICAgX194Ll9NX3BhdGhfZGlyZWN0aW9ucyA9IF9fZGlybnM7CisgICAgICBfU19zZXRidWYoX194KTsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX01faW5jcihzaXplX3QgX19uKQorICAgIHsKKyAgICAgIF9NX2N1cnJlbnRfcG9zICs9IF9fbjsKKyAgICAgIGlmICgwICE9IF9NX2J1Zl9wdHIpCisJeworCSAgc2l6ZV90IF9fY2hhcnNfbGVmdCA9IF9NX2J1Zl9lbmQgLSBfTV9idWZfcHRyOworCSAgaWYgKF9fY2hhcnNfbGVmdCA+IF9fbikKKwkgICAgX01fYnVmX3B0ciArPSBfX247CisJICBlbHNlIGlmIChfX2NoYXJzX2xlZnQgPT0gX19uKQorCSAgICB7CisJICAgICAgX01fYnVmX3B0ciArPSBfX247CisJICAgICAgX1Nfc2V0Y2FjaGVfZm9yX2luY3IoKnRoaXMpOworCSAgICB9CisJICBlbHNlCisJICAgIF9NX2J1Zl9wdHIgPSAwOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfUm9wZV9pdGVyYXRvcl9iYXNlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX01fZGVjcihzaXplX3QgX19uKQorICAgIHsKKyAgICAgIGlmICgwICE9IF9NX2J1Zl9wdHIpCisJeworCSAgc2l6ZV90IF9fY2hhcnNfbGVmdCA9IF9NX2J1Zl9wdHIgLSBfTV9idWZfc3RhcnQ7CisJICBpZiAoX19jaGFyc19sZWZ0ID49IF9fbikKKwkgICAgX01fYnVmX3B0ciAtPSBfX247CisJICBlbHNlCisJICAgIF9NX2J1Zl9wdHIgPSAwOworCX0KKyAgICAgIF9NX2N1cnJlbnRfcG9zIC09IF9fbjsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9NX2NoZWNrKCkKKyAgICB7CisgICAgICBpZiAoX01fcm9vdF9yb3BlLT5fTV90cmVlX3B0ciAhPSB0aGlzLT5fTV9yb290KQorCXsKKwkgIC8vIF9Sb3BlIHdhcyBtb2RpZmllZC4gIEdldCB0aGluZ3MgZml4ZWQgdXAuCisJICBfUm9wZVJlcDo6X1NfdW5yZWYodGhpcy0+X01fcm9vdCk7CisJICB0aGlzLT5fTV9yb290ID0gX01fcm9vdF9yb3BlLT5fTV90cmVlX3B0cjsKKwkgIF9Sb3BlUmVwOjpfU19yZWYodGhpcy0+X01fcm9vdCk7CisJICB0aGlzLT5fTV9idWZfcHRyID0gMDsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUKKyAgICBfUm9wZV9jb25zdF9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9Sb3BlX2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9Sb3BlX2l0ZXJhdG9yPF9DaGFyVCwgX0FsbG9jPiYgX194KQorICAgIDogX1JvcGVfaXRlcmF0b3JfYmFzZTxfQ2hhclQsIF9BbGxvYz4oX194KQorICAgIHsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUKKyAgICBfUm9wZV9pdGVyYXRvcjxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9Sb3BlX2l0ZXJhdG9yKHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3IsIHNpemVfdCBfX3BvcykKKyAgICA6IF9Sb3BlX2l0ZXJhdG9yX2Jhc2U8X0NoYXJULF9BbGxvYz4oX19yLl9NX3RyZWVfcHRyLCBfX3BvcyksCisgICAgICBfTV9yb290X3JvcGUoJl9fcikKKyAgICB7IF9Sb3BlUmVwOjpfU19yZWYodGhpcy0+X01fcm9vdCk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHNpemVfdAorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19jaGFyX3B0cl9sZW4oY29uc3QgX0NoYXJUKiBfX3MpCisgICAgeworICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSBfX3M7CisgICAgICAKKyAgICAgIHdoaWxlICghX1NfaXMwKCpfX3ApKQorCSsrX19wOworICAgICAgcmV0dXJuIChfX3AgLSBfX3MpOworICAgIH0KKworCisjaWZuZGVmIF9fR0MKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX01fZnJlZV9jX3N0cmluZygpCisgICAgeworICAgICAgX0NoYXJUKiBfX2NzdHIgPSBfTV9jX3N0cmluZzsKKyAgICAgIGlmICgwICE9IF9fY3N0cikKKwl7CisJICBzaXplX3QgX19zaXplID0gdGhpcy0+X01fc2l6ZSArIDE7CisJICBfRGVzdHJveShfX2NzdHIsIF9fY3N0ciArIF9fc2l6ZSwgX01fZ2V0X2FsbG9jYXRvcigpKTsKKwkgIHRoaXMtPl9EYXRhX2RlYWxsb2NhdGUoX19jc3RyLCBfX3NpemUpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2ZyZWVfc3RyaW5nKF9DaGFyVCogX19zLCBzaXplX3QgX19uLCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgIHsKKyAgICAgIGlmICghX1NfaXNfYmFzaWNfY2hhcl90eXBlKChfQ2hhclQqKTApKQorCV9EZXN0cm95KF9fcywgX19zICsgX19uLCBfX2EpOworICAgICAgCisgICAgICAvLyAgVGhpcyBoYXMgdG8gYmUgYSBzdGF0aWMgbWVtYmVyLCBzbyB0aGlzIGdldHMgYSBiaXQgbWVzc3kKKyAgICAgIF9fYS5kZWFsbG9jYXRlKF9fcywKKwkJICAgICBfUm9wZV9Sb3BlTGVhZjxfQ2hhclQsIF9BbGxvYz46Ol9TX3JvdW5kZWRfdXBfc2l6ZShfX24pKTsKKyAgICB9CisKKyAgLy8gIFRoZXJlIGFyZSBzZXZlcmFsIHJlYXNvbnMgZm9yIG5vdCBkb2luZyB0aGlzIHdpdGggdmlydHVhbCBkZXN0cnVjdG9ycworICAvLyAgYW5kIGEgY2xhc3Mgc3BlY2lmaWMgZGVsZXRlIG9wZXJhdG9yOgorICAvLyAgLSBBIGNsYXNzIHNwZWNpZmljIGRlbGV0ZSBvcGVyYXRvciBjYW4ndCBlYXNpbHkgZ2V0IGFjY2VzcyB0bworICAvLyAgICBhbGxvY2F0b3IgaW5zdGFuY2VzIGlmIHdlIG5lZWQgdGhlbS4KKyAgLy8gIC0gQW55IHZpcnR1YWwgZnVuY3Rpb24gd291bGQgbmVlZCBhIDQgb3IgYnl0ZSB2dGFibGUgcG9pbnRlcjsKKyAgLy8gICAgdGhpcyBvbmx5IHJlcXVpcmVzIGEgb25lIGJ5dGUgdGFnIHBlciBvYmplY3QuCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX1JvcGVfUm9wZVJlcDxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9NX2ZyZWVfdHJlZSgpCisgICAgeworICAgICAgc3dpdGNoKF9NX3RhZykKKwl7CisJY2FzZSBfX2RldGFpbDo6X1NfbGVhZjoKKwkgIHsKKwkgICAgX1JvcGVfUm9wZUxlYWY8X0NoYXJULCBfQWxsb2M+KiBfX2wKKwkgICAgICA9IChfUm9wZV9Sb3BlTGVhZjxfQ2hhclQsIF9BbGxvYz4qKXRoaXM7CisJICAgIF9fbC0+X1JvcGVfUm9wZUxlYWY8X0NoYXJULCBfQWxsb2M+Ojp+X1JvcGVfUm9wZUxlYWYoKTsKKwkgICAgdGhpcy0+X0xfZGVhbGxvY2F0ZShfX2wsIDEpOworCSAgICBicmVhazsKKwkgIH0KKwljYXNlIF9fZGV0YWlsOjpfU19jb25jYXQ6CisJICB7CisJICAgIF9Sb3BlX1JvcGVDb25jYXRlbmF0aW9uPF9DaGFyVCxfQWxsb2M+KiBfX2MKKwkgICAgICA9IChfUm9wZV9Sb3BlQ29uY2F0ZW5hdGlvbjxfQ2hhclQsIF9BbGxvYz4qKXRoaXM7CisJICAgIF9fYy0+X1JvcGVfUm9wZUNvbmNhdGVuYXRpb248X0NoYXJULCBfQWxsb2M+OjoKKwkgICAgICB+X1JvcGVfUm9wZUNvbmNhdGVuYXRpb24oKTsKKwkgICAgdGhpcy0+X0NfZGVhbGxvY2F0ZShfX2MsIDEpOworCSAgICBicmVhazsKKwkgIH0KKwljYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwkgIHsKKwkgICAgX1JvcGVfUm9wZUZ1bmN0aW9uPF9DaGFyVCwgX0FsbG9jPiogX19mCisJICAgICAgPSAoX1JvcGVfUm9wZUZ1bmN0aW9uPF9DaGFyVCwgX0FsbG9jPiopdGhpczsKKwkgICAgX19mLT5fUm9wZV9Sb3BlRnVuY3Rpb248X0NoYXJULCBfQWxsb2M+Ojp+X1JvcGVfUm9wZUZ1bmN0aW9uKCk7CisJICAgIHRoaXMtPl9GX2RlYWxsb2NhdGUoX19mLCAxKTsKKwkgICAgYnJlYWs7CisJICB9CisJY2FzZSBfX2RldGFpbDo6X1Nfc3Vic3RyaW5nZm46CisJICB7CisJICAgIF9Sb3BlX1JvcGVTdWJzdHJpbmc8X0NoYXJULCBfQWxsb2M+KiBfX3NzID0KKwkgICAgICAoX1JvcGVfUm9wZVN1YnN0cmluZzxfQ2hhclQsIF9BbGxvYz4qKXRoaXM7CisJICAgIF9fc3MtPl9Sb3BlX1JvcGVTdWJzdHJpbmc8X0NoYXJULCBfQWxsb2M+OjoKKwkgICAgICB+X1JvcGVfUm9wZVN1YnN0cmluZygpOworCSAgICB0aGlzLT5fU19kZWFsbG9jYXRlKF9fc3MsIDEpOworCSAgICBicmVhazsKKwkgIH0KKwl9CisgICAgfQorI2Vsc2UKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBfUm9wZV9Sb3BlUmVwPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfZnJlZV9zdHJpbmcoY29uc3QgX0NoYXJUKiwgc2l6ZV90LCBhbGxvY2F0b3JfdHlwZSkKKyAgICB7IH0KKworI2VuZGlmCisKKyAgLy8gQ29uY2F0ZW5hdGUgYSBDIHN0cmluZyBvbnRvIGEgbGVhZiByb3BlIGJ5IGNvcHlpbmcgdGhlIHJvcGUgZGF0YS4KKyAgLy8gVXNlZCBmb3Igc2hvcnQgcm9wZXMuCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSByb3BlPF9DaGFyVCwgX0FsbG9jPjo6X1JvcGVMZWFmKgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19sZWFmX2NvbmNhdF9jaGFyX2l0ZXIoX1JvcGVMZWFmKiBfX3IsIGNvbnN0IF9DaGFyVCogX19pdGVyLCBzaXplX3QgX19sZW4pCisgICAgeworICAgICAgc2l6ZV90IF9fb2xkX2xlbiA9IF9fci0+X01fc2l6ZTsKKyAgICAgIF9DaGFyVCogX19uZXdfZGF0YSA9IChfQ2hhclQqKQorCXJvcGU6Ol9EYXRhX2FsbG9jYXRlKF9TX3JvdW5kZWRfdXBfc2l6ZShfX29sZF9sZW4gKyBfX2xlbikpOworICAgICAgX1JvcGVMZWFmKiBfX3Jlc3VsdDsKKworICAgICAgdW5pbml0aWFsaXplZF9jb3B5X24oX19yLT5fTV9kYXRhLCBfX29sZF9sZW4sIF9fbmV3X2RhdGEpOworICAgICAgdW5pbml0aWFsaXplZF9jb3B5X24oX19pdGVyLCBfX2xlbiwgX19uZXdfZGF0YSArIF9fb2xkX2xlbik7CisgICAgICBfU19jb25kX3N0b3JlX2VvcyhfX25ld19kYXRhW19fb2xkX2xlbiArIF9fbGVuXSk7CisgICAgICBfX3RyeQorCXsKKwkgIF9fcmVzdWx0ID0gX1NfbmV3X1JvcGVMZWFmKF9fbmV3X2RhdGEsIF9fb2xkX2xlbiArIF9fbGVuLAorCQkJCSAgICAgX19yLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9Sb3BlUmVwOjpfX1NUTF9GUkVFX1NUUklORyhfX25ld19kYXRhLCBfX29sZF9sZW4gKyBfX2xlbiwKKwkJCQkgICAgICBfX3ItPl9NX2dldF9hbGxvY2F0b3IoKSk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisjaWZuZGVmIF9fR0MKKyAgLy8gQXMgYWJvdmUsIGJ1dCBpdCdzIE9LIHRvIGNsb2JiZXIgb3JpZ2luYWwgaWYgcmVmY291bnQgaXMgMQorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgcm9wZTxfQ2hhclQsX0FsbG9jPjo6X1JvcGVMZWFmKgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19kZXN0cl9sZWFmX2NvbmNhdF9jaGFyX2l0ZXIoX1JvcGVMZWFmKiBfX3IsIGNvbnN0IF9DaGFyVCogX19pdGVyLAorCQkJCSAgIHNpemVfdCBfX2xlbikKKyAgICB7CisgICAgICBpZiAoX19yLT5fTV9yZWZfY291bnQgPiAxKQorCXJldHVybiBfU19sZWFmX2NvbmNhdF9jaGFyX2l0ZXIoX19yLCBfX2l0ZXIsIF9fbGVuKTsKKyAgICAgIHNpemVfdCBfX29sZF9sZW4gPSBfX3ItPl9NX3NpemU7CisgICAgICBpZiAoX1NfYWxsb2NhdGVkX2NhcGFjaXR5KF9fb2xkX2xlbikgPj0gX19vbGRfbGVuICsgX19sZW4pCisJeworCSAgLy8gVGhlIHNwYWNlIGhhcyBiZWVuIHBhcnRpYWxseSBpbml0aWFsaXplZCBmb3IgdGhlIHN0YW5kYXJkCisJICAvLyBjaGFyYWN0ZXIgdHlwZXMuICBCdXQgdGhhdCBkb2Vzbid0IG1hdHRlciBmb3IgdGhvc2UgdHlwZXMuCisJICB1bmluaXRpYWxpemVkX2NvcHlfbihfX2l0ZXIsIF9fbGVuLCBfX3ItPl9NX2RhdGEgKyBfX29sZF9sZW4pOworCSAgaWYgKF9TX2lzX2Jhc2ljX2NoYXJfdHlwZSgoX0NoYXJUKikwKSkKKwkgICAgX1NfY29uZF9zdG9yZV9lb3MoX19yLT5fTV9kYXRhW19fb2xkX2xlbiArIF9fbGVuXSk7CisJICBlbHNlIGlmIChfX3ItPl9NX2Nfc3RyaW5nICE9IF9fci0+X01fZGF0YSAmJiAwICE9IF9fci0+X01fY19zdHJpbmcpCisJICAgIHsKKwkgICAgICBfX3ItPl9NX2ZyZWVfY19zdHJpbmcoKTsKKwkgICAgICBfX3ItPl9NX2Nfc3RyaW5nID0gMDsKKwkgICAgfQorCSAgX19yLT5fTV9zaXplID0gX19vbGRfbGVuICsgX19sZW47CisJICBfX3ItPl9NX3JlZl9jb3VudCA9IDI7CisJICByZXR1cm4gX19yOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfUm9wZUxlYWYqIF9fcmVzdWx0ID0gX1NfbGVhZl9jb25jYXRfY2hhcl9pdGVyKF9fciwgX19pdGVyLCBfX2xlbik7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorICAgIH0KKyNlbmRpZgorCisgIC8vIEFzc3VtZXMgbGVmdCBhbmQgcmlnaHQgYXJlIG5vdCAwLgorICAvLyBEb2VzIG5vdCBpbmNyZW1lbnQgKG5vciBkZWNyZW1lbnQgb24gZXhjZXB0aW9uKSBjaGlsZCByZWZlcmVuY2UgY291bnRzLgorICAvLyBSZXN1bHQgaGFzIHJlZiBjb3VudCAxLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgcm9wZTxfQ2hhclQsIF9BbGxvYz46Ol9Sb3BlUmVwKgorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU190cmVlX2NvbmNhdChfUm9wZVJlcCogX19sZWZ0LCBfUm9wZVJlcCogX19yaWdodCkKKyAgICB7CisgICAgICBfUm9wZUNvbmNhdGVuYXRpb24qIF9fcmVzdWx0ID0gX1NfbmV3X1JvcGVDb25jYXRlbmF0aW9uKF9fbGVmdCwgX19yaWdodCwKKwkJCQkJCQkgICAgICBfX2xlZnQtPgorCQkJCQkJCSAgICAgIF9NX2dldF9hbGxvY2F0b3IoKSk7CisgICAgICBzaXplX3QgX19kZXB0aCA9IF9fcmVzdWx0LT5fTV9kZXB0aDsKKyAgICAgIAorICAgICAgaWYgKF9fZGVwdGggPiAyMAorCSAgJiYgKF9fcmVzdWx0LT5fTV9zaXplIDwgMTAwMAorCSAgICAgIHx8IF9fZGVwdGggPiBzaXplX3QoX19kZXRhaWw6Ol9TX21heF9yb3BlX2RlcHRoKSkpCisJeworCSAgX1JvcGVSZXAqIF9fYmFsYW5jZWQ7CisKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBfX2JhbGFuY2VkID0gX1NfYmFsYW5jZShfX3Jlc3VsdCk7CisJICAgICAgX19yZXN1bHQtPl9NX3VucmVmX25vbm5pbCgpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIHJvcGU6Ol9DX2RlYWxsb2NhdGUoX19yZXN1bHQsMSk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIC8vIEluIGNhc2Ugb2YgZXhjZXB0aW9uLCB3ZSBuZWVkIHRvIGRlYWxsb2NhdGUKKwkgIC8vIG90aGVyd2lzZSBkYW5nbGluZyByZXN1bHQgbm9kZS4gIEJ1dCBjYWxsZXIKKwkgIC8vIHN0aWxsIG93bnMgaXRzIGNoaWxkcmVuLiAgVGh1cyB1bnJlZiBpcworCSAgLy8gaW5hcHByb3ByaWF0ZS4KKwkgIHJldHVybiBfX2JhbGFuY2VkOworCX0KKyAgICAgIGVsc2UKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSByb3BlPF9DaGFyVCwgX0FsbG9jPjo6X1JvcGVSZXAqCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2NvbmNhdF9jaGFyX2l0ZXIoX1JvcGVSZXAqIF9fciwgY29uc3QgX0NoYXJUKl9fcywgc2l6ZV90IF9fc2xlbikKKyAgICB7CisgICAgICBfUm9wZVJlcCogX19yZXN1bHQ7CisgICAgICBpZiAoMCA9PSBfX3NsZW4pCisJeworCSAgX1NfcmVmKF9fcik7CisJICByZXR1cm4gX19yOworCX0KKyAgICAgIGlmICgwID09IF9fcikKKwlyZXR1cm4gX19TVExfUk9QRV9GUk9NX1VOT1dORURfQ0hBUl9QVFIoX19zLCBfX3NsZW4sCisJCQkJCQlfX3ItPl9NX2dldF9hbGxvY2F0b3IoKSk7CisgICAgICBpZiAoX19yLT5fTV90YWcgPT0gX19kZXRhaWw6Ol9TX2xlYWYKKwkgICYmIF9fci0+X01fc2l6ZSArIF9fc2xlbiA8PSBzaXplX3QoX1NfY29weV9tYXgpKQorCXsKKwkgIF9fcmVzdWx0ID0gX1NfbGVhZl9jb25jYXRfY2hhcl9pdGVyKChfUm9wZUxlYWYqKV9fciwgX19zLCBfX3NsZW4pOworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICAgIGlmIChfX2RldGFpbDo6X1NfY29uY2F0ID09IF9fci0+X01fdGFnCisJICAmJiBfX2RldGFpbDo6X1NfbGVhZiA9PSAoKF9Sb3BlQ29uY2F0ZW5hdGlvbiopIF9fciktPl9NX3JpZ2h0LT5fTV90YWcpCisJeworCSAgX1JvcGVMZWFmKiBfX3JpZ2h0ID0KKwkgICAgKF9Sb3BlTGVhZiogKSgoKF9Sb3BlQ29uY2F0ZW5hdGlvbiogKV9fciktPl9NX3JpZ2h0KTsKKwkgIGlmIChfX3JpZ2h0LT5fTV9zaXplICsgX19zbGVuIDw9IHNpemVfdChfU19jb3B5X21heCkpCisJICAgIHsKKwkgICAgICBfUm9wZVJlcCogX19sZWZ0ID0gKChfUm9wZUNvbmNhdGVuYXRpb24qKV9fciktPl9NX2xlZnQ7CisJICAgICAgX1JvcGVSZXAqIF9fbnJpZ2h0ID0KKwkJX1NfbGVhZl9jb25jYXRfY2hhcl9pdGVyKChfUm9wZUxlYWYqKV9fcmlnaHQsIF9fcywgX19zbGVuKTsKKwkgICAgICBfX2xlZnQtPl9NX3JlZl9ub25uaWwoKTsKKwkgICAgICBfX3RyeQorCQl7IF9fcmVzdWx0ID0gX1NfdHJlZV9jb25jYXQoX19sZWZ0LCBfX25yaWdodCk7IH0KKwkgICAgICBfX2NhdGNoKC4uLikKKwkJeworCQkgIF9TX3VucmVmKF9fbGVmdCk7CisJCSAgX1NfdW5yZWYoX19ucmlnaHQpOworCQkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCQl9CisJICAgICAgcmV0dXJuIF9fcmVzdWx0OworCSAgICB9CisJfQorICAgICAgX1JvcGVSZXAqIF9fbnJpZ2h0ID0KKwlfX1NUTF9ST1BFX0ZST01fVU5PV05FRF9DSEFSX1BUUihfX3MsIF9fc2xlbiwgX19yLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgX190cnkKKwl7CisJICBfX3ItPl9NX3JlZl9ub25uaWwoKTsKKwkgIF9fcmVzdWx0ID0gX1NfdHJlZV9jb25jYXQoX19yLCBfX25yaWdodCk7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgX1NfdW5yZWYoX19yKTsKKwkgIF9TX3VucmVmKF9fbnJpZ2h0KTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyNpZm5kZWYgX19HQworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdHlwZW5hbWUgcm9wZTxfQ2hhclQsX0FsbG9jPjo6X1JvcGVSZXAqCisgICAgcm9wZTxfQ2hhclQsX0FsbG9jPjo6CisgICAgX1NfZGVzdHJfY29uY2F0X2NoYXJfaXRlcihfUm9wZVJlcCogX19yLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90IF9fc2xlbikKKyAgICB7CisgICAgICBfUm9wZVJlcCogX19yZXN1bHQ7CisgICAgICBpZiAoMCA9PSBfX3IpCisJcmV0dXJuIF9fU1RMX1JPUEVfRlJPTV9VTk9XTkVEX0NIQVJfUFRSKF9fcywgX19zbGVuLAorCQkJCQkJX19yLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworICAgICAgc2l6ZV90IF9fY291bnQgPSBfX3ItPl9NX3JlZl9jb3VudDsKKyAgICAgIHNpemVfdCBfX29yaWdfc2l6ZSA9IF9fci0+X01fc2l6ZTsKKyAgICAgIGlmIChfX2NvdW50ID4gMSkKKwlyZXR1cm4gX1NfY29uY2F0X2NoYXJfaXRlcihfX3IsIF9fcywgX19zbGVuKTsKKyAgICAgIGlmICgwID09IF9fc2xlbikKKwl7CisJICBfX3ItPl9NX3JlZl9jb3VudCA9IDI7ICAgICAgLy8gT25lIG1vcmUgdGhhbiBiZWZvcmUKKwkgIHJldHVybiBfX3I7CisJfQorICAgICAgaWYgKF9fb3JpZ19zaXplICsgX19zbGVuIDw9IHNpemVfdChfU19jb3B5X21heCkKKwkgICYmIF9fZGV0YWlsOjpfU19sZWFmID09IF9fci0+X01fdGFnKQorCXsKKwkgIF9fcmVzdWx0ID0gX1NfZGVzdHJfbGVhZl9jb25jYXRfY2hhcl9pdGVyKChfUm9wZUxlYWYqKV9fciwgX19zLCAKKwkJCQkJCSAgICBfX3NsZW4pOworCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICAgIGlmIChfX2RldGFpbDo6X1NfY29uY2F0ID09IF9fci0+X01fdGFnKQorCXsKKwkgIF9Sb3BlTGVhZiogX19yaWdodCA9IChfUm9wZUxlYWYqKSgoKF9Sb3BlQ29uY2F0ZW5hdGlvbiopCisJCQkJCSAgICAgX19yKS0+X01fcmlnaHQpOworCSAgaWYgKF9fZGV0YWlsOjpfU19sZWFmID09IF9fcmlnaHQtPl9NX3RhZworCSAgICAgICYmIF9fcmlnaHQtPl9NX3NpemUgKyBfX3NsZW4gPD0gc2l6ZV90KF9TX2NvcHlfbWF4KSkKKwkgICAgeworCSAgICAgIF9Sb3BlUmVwKiBfX25ld19yaWdodCA9CisJCV9TX2Rlc3RyX2xlYWZfY29uY2F0X2NoYXJfaXRlcihfX3JpZ2h0LCBfX3MsIF9fc2xlbik7CisJICAgICAgaWYgKF9fcmlnaHQgPT0gX19uZXdfcmlnaHQpCisJCV9fbmV3X3JpZ2h0LT5fTV9yZWZfY291bnQgPSAxOworCSAgICAgIGVsc2UKKwkJX19yaWdodC0+X01fdW5yZWZfbm9ubmlsKCk7CisJICAgICAgX19yLT5fTV9yZWZfY291bnQgPSAyOyAgICAvLyBPbmUgbW9yZSB0aGFuIGJlZm9yZS4KKwkgICAgICAoKF9Sb3BlQ29uY2F0ZW5hdGlvbiopX19yKS0+X01fcmlnaHQgPSBfX25ld19yaWdodDsKKwkgICAgICBfX3ItPl9NX3NpemUgPSBfX29yaWdfc2l6ZSArIF9fc2xlbjsKKwkgICAgICBpZiAoMCAhPSBfX3ItPl9NX2Nfc3RyaW5nKQorCQl7CisJCSAgX19yLT5fTV9mcmVlX2Nfc3RyaW5nKCk7CisJCSAgX19yLT5fTV9jX3N0cmluZyA9IDA7CisJCX0KKwkgICAgICByZXR1cm4gX19yOworCSAgICB9CisJfQorICAgICAgX1JvcGVSZXAqIF9fcmlnaHQgPQorCV9fU1RMX1JPUEVfRlJPTV9VTk9XTkVEX0NIQVJfUFRSKF9fcywgX19zbGVuLCBfX3ItPl9NX2dldF9hbGxvY2F0b3IoKSk7CisgICAgICBfX3ItPl9NX3JlZl9ub25uaWwoKTsKKyAgICAgIF9fdHJ5CisJeyBfX3Jlc3VsdCA9IF9TX3RyZWVfY29uY2F0KF9fciwgX19yaWdodCk7IH0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9TX3VucmVmKF9fcik7CisJICBfU191bnJlZihfX3JpZ2h0KTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisjZW5kaWYgLyogIV9fR0MgKi8KKyAgCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSByb3BlPF9DaGFyVCwgX0FsbG9jPjo6X1JvcGVSZXAqCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2NvbmNhdChfUm9wZVJlcCogX19sZWZ0LCBfUm9wZVJlcCogX19yaWdodCkKKyAgICB7CisgICAgICBpZiAoMCA9PSBfX2xlZnQpCisJeworCSAgX1NfcmVmKF9fcmlnaHQpOworCSAgcmV0dXJuIF9fcmlnaHQ7CisJfQorICAgICAgaWYgKDAgPT0gX19yaWdodCkKKwl7CisJICBfX2xlZnQtPl9NX3JlZl9ub25uaWwoKTsKKwkgIHJldHVybiBfX2xlZnQ7CisJfQorICAgICAgaWYgKF9fZGV0YWlsOjpfU19sZWFmID09IF9fcmlnaHQtPl9NX3RhZykKKwl7CisJICBpZiAoX19kZXRhaWw6Ol9TX2xlYWYgPT0gX19sZWZ0LT5fTV90YWcpCisJICAgIHsKKwkgICAgICBpZiAoX19yaWdodC0+X01fc2l6ZSArIF9fbGVmdC0+X01fc2l6ZSA8PSBzaXplX3QoX1NfY29weV9tYXgpKQorCQlyZXR1cm4gX1NfbGVhZl9jb25jYXRfY2hhcl9pdGVyKChfUm9wZUxlYWYqKV9fbGVmdCwKKwkJCQkJCSgoX1JvcGVMZWFmKilfX3JpZ2h0KS0+X01fZGF0YSwKKwkJCQkJCV9fcmlnaHQtPl9NX3NpemUpOworCSAgICB9CisJICBlbHNlIGlmIChfX2RldGFpbDo6X1NfY29uY2F0ID09IF9fbGVmdC0+X01fdGFnCisJCSAgICYmIF9fZGV0YWlsOjpfU19sZWFmID09ICgoX1JvcGVDb25jYXRlbmF0aW9uKikKKwkJCQkJCSAgIF9fbGVmdCktPl9NX3JpZ2h0LT5fTV90YWcpCisJICAgIHsKKwkgICAgICBfUm9wZUxlYWYqIF9fbGVmdHJpZ2h0ID0KKwkJKF9Sb3BlTGVhZiopKCgoX1JvcGVDb25jYXRlbmF0aW9uKilfX2xlZnQpLT5fTV9yaWdodCk7CisJICAgICAgaWYgKF9fbGVmdHJpZ2h0LT5fTV9zaXplCisJCSAgKyBfX3JpZ2h0LT5fTV9zaXplIDw9IHNpemVfdChfU19jb3B5X21heCkpCisJCXsKKwkJICBfUm9wZVJlcCogX19sZWZ0bGVmdCA9ICgoX1JvcGVDb25jYXRlbmF0aW9uKilfX2xlZnQpLT5fTV9sZWZ0OworCQkgIF9Sb3BlUmVwKiBfX3Jlc3QgPSBfU19sZWFmX2NvbmNhdF9jaGFyX2l0ZXIoX19sZWZ0cmlnaHQsCisJCQkJCQkJICAgICAgKChfUm9wZUxlYWYqKQorCQkJCQkJCSAgICAgICBfX3JpZ2h0KS0+CisJCQkJCQkJICAgICAgX01fZGF0YSwKKwkJCQkJCQkgICAgICBfX3JpZ2h0LT5fTV9zaXplKTsKKwkJICBfX2xlZnRsZWZ0LT5fTV9yZWZfbm9ubmlsKCk7CisJCSAgX190cnkKKwkJICAgIHsgcmV0dXJuKF9TX3RyZWVfY29uY2F0KF9fbGVmdGxlZnQsIF9fcmVzdCkpOyB9CisJCSAgX19jYXRjaCguLi4pCisJCSAgICB7CisJCSAgICAgIF9TX3VucmVmKF9fbGVmdGxlZnQpOworCQkgICAgICBfU191bnJlZihfX3Jlc3QpOworCQkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgICAgX19sZWZ0LT5fTV9yZWZfbm9ubmlsKCk7CisgICAgICBfX3JpZ2h0LT5fTV9yZWZfbm9ubmlsKCk7CisgICAgICBfX3RyeQorCXsgcmV0dXJuKF9TX3RyZWVfY29uY2F0KF9fbGVmdCwgX19yaWdodCkpOyB9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfU191bnJlZihfX2xlZnQpOworCSAgX1NfdW5yZWYoX19yaWdodCk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSByb3BlPF9DaGFyVCwgX0FsbG9jPjo6X1JvcGVSZXAqCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX3N1YnN0cmluZyhfUm9wZVJlcCogX19iYXNlLCBzaXplX3QgX19zdGFydCwgc2l6ZV90IF9fZW5kcDEpCisgICAgeworICAgICAgaWYgKDAgPT0gX19iYXNlKQorCXJldHVybiAwOworICAgICAgc2l6ZV90IF9fbGVuID0gX19iYXNlLT5fTV9zaXplOworICAgICAgc2l6ZV90IF9fYWRqX2VuZHAxOworICAgICAgY29uc3Qgc2l6ZV90IF9fbGF6eV90aHJlc2hvbGQgPSAxMjg7CisgICAgICAKKyAgICAgIGlmIChfX2VuZHAxID49IF9fbGVuKQorCXsKKwkgIGlmICgwID09IF9fc3RhcnQpCisJICAgIHsKKwkgICAgICBfX2Jhc2UtPl9NX3JlZl9ub25uaWwoKTsKKwkgICAgICByZXR1cm4gX19iYXNlOworCSAgICB9CisJICBlbHNlCisJICAgIF9fYWRqX2VuZHAxID0gX19sZW47CisJICAKKwl9CisgICAgICBlbHNlCisJX19hZGpfZW5kcDEgPSBfX2VuZHAxOworCisgICAgICBzd2l0Y2goX19iYXNlLT5fTV90YWcpCisJeworCWNhc2UgX19kZXRhaWw6Ol9TX2NvbmNhdDoKKwkgICAgeworCSAgICAgIF9Sb3BlQ29uY2F0ZW5hdGlvbiogX19jID0gKF9Sb3BlQ29uY2F0ZW5hdGlvbiopX19iYXNlOworCSAgICAgIF9Sb3BlUmVwKiBfX2xlZnQgPSBfX2MtPl9NX2xlZnQ7CisJICAgICAgX1JvcGVSZXAqIF9fcmlnaHQgPSBfX2MtPl9NX3JpZ2h0OworCSAgICAgIHNpemVfdCBfX2xlZnRfbGVuID0gX19sZWZ0LT5fTV9zaXplOworCSAgICAgIF9Sb3BlUmVwKiBfX3Jlc3VsdDsKKwkgICAgICAKKwkgICAgICBpZiAoX19hZGpfZW5kcDEgPD0gX19sZWZ0X2xlbikKKwkJcmV0dXJuIF9TX3N1YnN0cmluZyhfX2xlZnQsIF9fc3RhcnQsIF9fZW5kcDEpOworCSAgICAgIGVsc2UgaWYgKF9fc3RhcnQgPj0gX19sZWZ0X2xlbikKKwkJcmV0dXJuIF9TX3N1YnN0cmluZyhfX3JpZ2h0LCBfX3N0YXJ0IC0gX19sZWZ0X2xlbiwKKwkJCQkgICAgX19hZGpfZW5kcDEgLSBfX2xlZnRfbGVuKTsKKwkgICAgICBfU2VsZl9kZXN0cnVjdF9wdHIgX19sZWZ0X3Jlc3VsdChfU19zdWJzdHJpbmcoX19sZWZ0LAorCQkJCQkJCSAgICBfX3N0YXJ0LAorCQkJCQkJCSAgICBfX2xlZnRfbGVuKSk7CisJICAgICAgX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fcmlnaHRfcmVzdWx0KF9TX3N1YnN0cmluZyhfX3JpZ2h0LCAwLAorCQkJCQkJCSAgICAgX19lbmRwMSAKKwkJCQkJCQkgICAgIC0gX19sZWZ0X2xlbikpOworCSAgICAgIF9fcmVzdWx0ID0gX1NfY29uY2F0KF9fbGVmdF9yZXN1bHQsIF9fcmlnaHRfcmVzdWx0KTsKKwkgICAgICByZXR1cm4gX19yZXN1bHQ7CisJICAgIH0KKwljYXNlIF9fZGV0YWlsOjpfU19sZWFmOgorCSAgeworCSAgICBfUm9wZUxlYWYqIF9fbCA9IChfUm9wZUxlYWYqKV9fYmFzZTsKKwkgICAgX1JvcGVMZWFmKiBfX3Jlc3VsdDsKKwkgICAgc2l6ZV90IF9fcmVzdWx0X2xlbjsKKwkgICAgaWYgKF9fc3RhcnQgPj0gX19hZGpfZW5kcDEpCisJICAgICAgcmV0dXJuIDA7CisJICAgIF9fcmVzdWx0X2xlbiA9IF9fYWRqX2VuZHAxIC0gX19zdGFydDsKKwkgICAgaWYgKF9fcmVzdWx0X2xlbiA+IF9fbGF6eV90aHJlc2hvbGQpCisJICAgICAgZ290byBsYXp5OworI2lmZGVmIF9fR0MKKwkgICAgY29uc3QgX0NoYXJUKiBfX3NlY3Rpb24gPSBfX2wtPl9NX2RhdGEgKyBfX3N0YXJ0OworCSAgICBfX3Jlc3VsdCA9IF9TX25ld19Sb3BlTGVhZihfX3NlY3Rpb24sIF9fcmVzdWx0X2xlbiwKKwkJCQkgICAgICAgX19iYXNlLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgICBfX3Jlc3VsdC0+X01fY19zdHJpbmcgPSAwOyAgLy8gTm90IGVvcyB0ZXJtaW5hdGVkLgorI2Vsc2UKKwkgICAgLy8gV2Ugc2hvdWxkIHNvbWV0aW1lcyBjcmVhdGUgc3Vic3RyaW5nIG5vZGUgaW5zdGVhZC4KKwkgICAgX19yZXN1bHQgPSBfX1NUTF9ST1BFX0ZST01fVU5PV05FRF9DSEFSX1BUUihfX2wtPl9NX2RhdGEgKyBfX3N0YXJ0LAorCQkJCQkJCV9fcmVzdWx0X2xlbiwKKwkJCQkJCQlfX2Jhc2UtPgorCQkJCQkJCV9NX2dldF9hbGxvY2F0b3IoKSk7CisjZW5kaWYKKwkgICAgcmV0dXJuIF9fcmVzdWx0OworCSAgfQorCWNhc2UgX19kZXRhaWw6Ol9TX3N1YnN0cmluZ2ZuOgorCSAgLy8gQXZvaWQgaW50cm9kdWNpbmcgbXVsdGlwbGUgbGF5ZXJzIG9mIHN1YnN0cmluZyBub2Rlcy4KKwkgIHsKKwkgICAgX1JvcGVTdWJzdHJpbmcqIF9fb2xkID0gKF9Sb3BlU3Vic3RyaW5nKilfX2Jhc2U7CisJICAgIHNpemVfdCBfX3Jlc3VsdF9sZW47CisJICAgIGlmIChfX3N0YXJ0ID49IF9fYWRqX2VuZHAxKQorCSAgICAgIHJldHVybiAwOworCSAgICBfX3Jlc3VsdF9sZW4gPSBfX2Fkal9lbmRwMSAtIF9fc3RhcnQ7CisJICAgIGlmIChfX3Jlc3VsdF9sZW4gPiBfX2xhenlfdGhyZXNob2xkKQorCSAgICAgIHsKKwkJX1JvcGVTdWJzdHJpbmcqIF9fcmVzdWx0ID0KKwkJICBfU19uZXdfUm9wZVN1YnN0cmluZyhfX29sZC0+X01fYmFzZSwKKwkJCQkgICAgICAgX19zdGFydCArIF9fb2xkLT5fTV9zdGFydCwKKwkJCQkgICAgICAgX19hZGpfZW5kcDEgLSBfX3N0YXJ0LAorCQkJCSAgICAgICBfX2Jhc2UtPl9NX2dldF9hbGxvY2F0b3IoKSk7CisJCXJldHVybiBfX3Jlc3VsdDsKKwkJCisJICAgICAgfSAvLyAqKiogZWxzZSBmYWxsIHRocm91Z2g6ICoqKgorCSAgfQorCWNhc2UgX19kZXRhaWw6Ol9TX2Z1bmN0aW9uOgorCSAgeworCSAgICBfUm9wZUZ1bmN0aW9uKiBfX2YgPSAoX1JvcGVGdW5jdGlvbiopX19iYXNlOworCSAgICBfQ2hhclQqIF9fc2VjdGlvbjsKKwkgICAgc2l6ZV90IF9fcmVzdWx0X2xlbjsKKwkgICAgaWYgKF9fc3RhcnQgPj0gX19hZGpfZW5kcDEpCisJICAgICAgcmV0dXJuIDA7CisJICAgIF9fcmVzdWx0X2xlbiA9IF9fYWRqX2VuZHAxIC0gX19zdGFydDsKKwkgICAgCisJICAgIGlmIChfX3Jlc3VsdF9sZW4gPiBfX2xhenlfdGhyZXNob2xkKQorCSAgICAgIGdvdG8gbGF6eTsKKwkgICAgX19zZWN0aW9uID0gKF9DaGFyVCopCisJICAgICAgcm9wZTo6X0RhdGFfYWxsb2NhdGUoX1Nfcm91bmRlZF91cF9zaXplKF9fcmVzdWx0X2xlbikpOworCSAgICBfX3RyeQorCSAgICAgIHsJKCooX19mLT5fTV9mbikpKF9fc3RhcnQsIF9fcmVzdWx0X2xlbiwgX19zZWN0aW9uKTsgfQorCSAgICBfX2NhdGNoKC4uLikKKwkgICAgICB7CisJCV9Sb3BlUmVwOjpfX1NUTF9GUkVFX1NUUklORyhfX3NlY3Rpb24sIF9fcmVzdWx0X2xlbiwKKwkJCQkJICAgIF9fYmFzZS0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKwkJX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgICAgfQorCSAgICBfU19jb25kX3N0b3JlX2VvcyhfX3NlY3Rpb25bX19yZXN1bHRfbGVuXSk7CisJICAgIHJldHVybiBfU19uZXdfUm9wZUxlYWYoX19zZWN0aW9uLCBfX3Jlc3VsdF9sZW4sCisJCQkJICAgX19iYXNlLT5fTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgfQorCX0KKyAgICBsYXp5OgorICAgICAgeworCS8vIENyZWF0ZSBzdWJzdHJpbmcgbm9kZS4KKwlyZXR1cm4gX1NfbmV3X1JvcGVTdWJzdHJpbmcoX19iYXNlLCBfX3N0YXJ0LCBfX2Fkal9lbmRwMSAtIF9fc3RhcnQsCisJCQkJICAgIF9fYmFzZS0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgorICAgIGNsYXNzIF9Sb3BlX2ZsYXR0ZW5fY2hhcl9jb25zdW1lcgorICAgIDogcHVibGljIF9Sb3BlX2NoYXJfY29uc3VtZXI8X0NoYXJUPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgX0NoYXJUKiBfTV9idWZfcHRyOworICAgIHB1YmxpYzoKKyAgICAgIAorICAgICAgX1JvcGVfZmxhdHRlbl9jaGFyX2NvbnN1bWVyKF9DaGFyVCogX19idWZmZXIpCisgICAgICB7IF9NX2J1Zl9wdHIgPSBfX2J1ZmZlcjsgfTsKKworICAgICAgfl9Sb3BlX2ZsYXR0ZW5fY2hhcl9jb25zdW1lcigpIHt9CisgICAgICAKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0NoYXJUKiBfX2xlYWYsIHNpemVfdCBfX24pCisgICAgICB7CisJdW5pbml0aWFsaXplZF9jb3B5X24oX19sZWFmLCBfX24sIF9NX2J1Zl9wdHIpOworCV9NX2J1Zl9wdHIgKz0gX19uOworCXJldHVybiB0cnVlOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgorICAgIGNsYXNzIF9Sb3BlX2ZpbmRfY2hhcl9jaGFyX2NvbnN1bWVyCisgICAgOiBwdWJsaWMgX1JvcGVfY2hhcl9jb25zdW1lcjxfQ2hhclQ+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICBfQ2hhclQgX01fcGF0dGVybjsKKyAgICBwdWJsaWM6CisgICAgICBzaXplX3QgX01fY291bnQ7ICAvLyBOdW1iZXIgb2Ygbm9ubWF0Y2hpbmcgY2hhcmFjdGVycworICAgICAgCisgICAgICBfUm9wZV9maW5kX2NoYXJfY2hhcl9jb25zdW1lcihfQ2hhclQgX19wKQorICAgICAgOiBfTV9wYXR0ZXJuKF9fcCksIF9NX2NvdW50KDApIHt9CisJCisgICAgICB+X1JvcGVfZmluZF9jaGFyX2NoYXJfY29uc3VtZXIoKSB7fQorICAgICAgCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DaGFyVCogX19sZWFmLCBzaXplX3QgX19uKQorICAgICAgeworCXNpemVfdCBfX2k7CisJZm9yIChfX2kgPSAwOyBfX2kgPCBfX247IF9faSsrKQorCSAgeworCSAgICBpZiAoX19sZWFmW19faV0gPT0gX01fcGF0dGVybikKKwkgICAgICB7CisJCV9NX2NvdW50ICs9IF9faTsKKwkJcmV0dXJuIGZhbHNlOworCSAgICAgIH0KKwkgIH0KKwlfTV9jb3VudCArPSBfX247IHJldHVybiB0cnVlOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgorICAvLyBIZXJlIF9DaGFyVCBpcyBib3RoIHRoZSBzdHJlYW0gYW5kIHJvcGUgY2hhcmFjdGVyIHR5cGUuCisgICAgY2xhc3MgX1JvcGVfaW5zZXJ0X2NoYXJfY29uc3VtZXIKKyAgICA6IHB1YmxpYyBfUm9wZV9jaGFyX2NvbnN1bWVyPF9DaGFyVD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4gX0luc2VydF9vc3RyZWFtOworICAgICAgX0luc2VydF9vc3RyZWFtJiBfTV9vOworICAgIHB1YmxpYzoKKyAgICAgIF9Sb3BlX2luc2VydF9jaGFyX2NvbnN1bWVyKF9JbnNlcnRfb3N0cmVhbSYgX193cml0ZXIpCisJOiBfTV9vKF9fd3JpdGVyKSB7fTsKKyAgICAgIH5fUm9wZV9pbnNlcnRfY2hhcl9jb25zdW1lcigpIHsgfTsKKyAgICAgIC8vIENhbGxlciBpcyBwcmVzdW1lZCB0byBvd24gdGhlIG9zdHJlYW0KKyAgICAgIGJvb2wgb3BlcmF0b3IoKSAoY29uc3QgX0NoYXJUKiBfX2xlYWYsIHNpemVfdCBfX24pOworICAgICAgLy8gUmV0dXJucyB0cnVlIHRvIGNvbnRpbnVlIHRyYXZlcnNhbC4KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgICBib29sCisgICAgX1JvcGVfaW5zZXJ0X2NoYXJfY29uc3VtZXI8X0NoYXJULCBfVHJhaXRzPjo6CisgICAgb3BlcmF0b3IoKShjb25zdCBfQ2hhclQqIF9fbGVhZiwgc2l6ZV90IF9fbikKKyAgICB7CisgICAgICBzaXplX3QgX19pOworICAgICAgLy8gIFdlIGFzc3VtZSB0aGF0IGZvcm1hdHRpbmcgaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgZWFjaCBlbGVtZW50LgorICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCBfX247IF9faSsrKQorCV9NX28ucHV0KF9fbGVhZltfX2ldKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgYm9vbAorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19hcHBseV90b19waWVjZXMoX1JvcGVfY2hhcl9jb25zdW1lcjxfQ2hhclQ+JiBfX2MsCisJCSAgICAgICBjb25zdCBfUm9wZVJlcCogX19yLCBzaXplX3QgX19iZWdpbiwgc2l6ZV90IF9fZW5kKQorICAgIHsKKyAgICAgIGlmICgwID09IF9fcikKKwlyZXR1cm4gdHJ1ZTsKKyAgICAgIHN3aXRjaChfX3ItPl9NX3RhZykKKwl7CisJY2FzZSBfX2RldGFpbDo6X1NfY29uY2F0OgorCSAgeworCSAgICBfUm9wZUNvbmNhdGVuYXRpb24qIF9fY29uYyA9IChfUm9wZUNvbmNhdGVuYXRpb24qKV9fcjsKKwkgICAgX1JvcGVSZXAqIF9fbGVmdCA9ICBfX2NvbmMtPl9NX2xlZnQ7CisJICAgIHNpemVfdCBfX2xlZnRfbGVuID0gX19sZWZ0LT5fTV9zaXplOworCSAgICBpZiAoX19iZWdpbiA8IF9fbGVmdF9sZW4pCisJICAgICAgeworCQlzaXplX3QgX19sZWZ0X2VuZCA9IHN0ZDo6bWluKF9fbGVmdF9sZW4sIF9fZW5kKTsKKwkJaWYgKCFfU19hcHBseV90b19waWVjZXMoX19jLCBfX2xlZnQsIF9fYmVnaW4sIF9fbGVmdF9lbmQpKQorCQkgIHJldHVybiBmYWxzZTsKKwkgICAgICB9CisJICAgIGlmIChfX2VuZCA+IF9fbGVmdF9sZW4pCisJICAgICAgeworCQlfUm9wZVJlcCogX19yaWdodCA9ICBfX2NvbmMtPl9NX3JpZ2h0OworCQlzaXplX3QgX19yaWdodF9zdGFydCA9IHN0ZDo6bWF4KF9fbGVmdF9sZW4sIF9fYmVnaW4pOworCQlpZiAoIV9TX2FwcGx5X3RvX3BpZWNlcyhfX2MsIF9fcmlnaHQsCisJCQkJCV9fcmlnaHRfc3RhcnQgLSBfX2xlZnRfbGVuLAorCQkJCQlfX2VuZCAtIF9fbGVmdF9sZW4pKQorCQkgIHJldHVybiBmYWxzZTsKKwkgICAgICB9CisJICB9CisJICByZXR1cm4gdHJ1ZTsKKwljYXNlIF9fZGV0YWlsOjpfU19sZWFmOgorCSAgeworCSAgICBfUm9wZUxlYWYqIF9fbCA9IChfUm9wZUxlYWYqKV9fcjsKKwkgICAgcmV0dXJuIF9fYyhfX2wtPl9NX2RhdGEgKyBfX2JlZ2luLCBfX2VuZCAtIF9fYmVnaW4pOworCSAgfQorCWNhc2UgX19kZXRhaWw6Ol9TX2Z1bmN0aW9uOgorCWNhc2UgX19kZXRhaWw6Ol9TX3N1YnN0cmluZ2ZuOgorCSAgICB7CisJICAgICAgX1JvcGVGdW5jdGlvbiogX19mID0gKF9Sb3BlRnVuY3Rpb24qKV9fcjsKKwkgICAgICBzaXplX3QgX19sZW4gPSBfX2VuZCAtIF9fYmVnaW47CisJICAgICAgYm9vbCBfX3Jlc3VsdDsKKwkgICAgICBfQ2hhclQqIF9fYnVmZmVyID0KKwkJKF9DaGFyVCopX0FsbG9jKCkuYWxsb2NhdGUoX19sZW4gKiBzaXplb2YoX0NoYXJUKSk7CisJICAgICAgX190cnkKKwkJeworCQkgICgqKF9fZi0+X01fZm4pKShfX2JlZ2luLCBfX2xlbiwgX19idWZmZXIpOworCQkgIF9fcmVzdWx0ID0gX19jKF9fYnVmZmVyLCBfX2xlbik7CisgICAgICAgICAgICAgICAgICBfQWxsb2MoKS5kZWFsbG9jYXRlKF9fYnVmZmVyLCBfX2xlbiAqIHNpemVvZihfQ2hhclQpKTsKKyAgICAgICAgICAgICAgICB9CisJICAgICAgX19jYXRjaCguLi4pCisJCXsKKwkJICBfQWxsb2MoKS5kZWFsbG9jYXRlKF9fYnVmZmVyLCBfX2xlbiAqIHNpemVvZihfQ2hhclQpKTsKKwkJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkJfQorCSAgICAgIHJldHVybiBfX3Jlc3VsdDsKKwkgICAgfQorCWRlZmF1bHQ6CisJICByZXR1cm4gZmFsc2U7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgICAgaW5saW5lIHZvaWQKKyAgICBfUm9wZV9maWxsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vLCBzaXplX3QgX19uKQorICAgIHsKKyAgICAgIGNoYXIgX19mID0gX19vLmZpbGwoKTsKKyAgICAgIHNpemVfdCBfX2k7CisgICAgICAKKyAgICAgIGZvciAoX19pID0gMDsgX19pIDwgX19uOyBfX2krKykKKwlfX28ucHV0KF9fZik7CisgICAgfQorCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVD4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9Sb3BlX2lzX3NpbXBsZShfQ2hhclQqKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgX1JvcGVfaXNfc2ltcGxlKGNoYXIqKQorICB7IHJldHVybiB0cnVlOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgX1JvcGVfaXNfc2ltcGxlKHdjaGFyX3QqKQorICB7IHJldHVybiB0cnVlOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX28sCisJICAgICAgIGNvbnN0IHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3IpCisgICAgeworICAgICAgc2l6ZV90IF9fdyA9IF9fby53aWR0aCgpOworICAgICAgYm9vbCBfX2xlZnQgPSBib29sKF9fby5mbGFncygpICYgc3RkOjppb3M6OmxlZnQpOworICAgICAgc2l6ZV90IF9fcGFkX2xlbjsKKyAgICAgIHNpemVfdCBfX3JvcGVfbGVuID0gX19yLnNpemUoKTsKKyAgICAgIF9Sb3BlX2luc2VydF9jaGFyX2NvbnN1bWVyPF9DaGFyVCwgX1RyYWl0cz4gX19jKF9fbyk7CisgICAgICBib29sIF9faXNfc2ltcGxlID0gX1JvcGVfaXNfc2ltcGxlKChfQ2hhclQqKTApOworICAgICAgCisgICAgICBpZiAoX19yb3BlX2xlbiA8IF9fdykKKwlfX3BhZF9sZW4gPSBfX3cgLSBfX3JvcGVfbGVuOworICAgICAgZWxzZQorCV9fcGFkX2xlbiA9IDA7CisKKyAgICAgIGlmICghX19pc19zaW1wbGUpCisJX19vLndpZHRoKF9fdyAvIF9fcm9wZV9sZW4pOworICAgICAgX190cnkKKwl7CisJICBpZiAoX19pc19zaW1wbGUgJiYgIV9fbGVmdCAmJiBfX3BhZF9sZW4gPiAwKQorCSAgICBfUm9wZV9maWxsKF9fbywgX19wYWRfbGVuKTsKKwkgIF9fci5hcHBseV90b19waWVjZXMoMCwgX19yLnNpemUoKSwgX19jKTsKKwkgIGlmIChfX2lzX3NpbXBsZSAmJiBfX2xlZnQgJiYgX19wYWRfbGVuID4gMCkKKwkgICAgX1JvcGVfZmlsbChfX28sIF9fcGFkX2xlbik7CisJICBpZiAoIV9faXNfc2ltcGxlKQorCSAgICBfX28ud2lkdGgoX193KTsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBpZiAoIV9faXNfc2ltcGxlKQorCSAgICBfX28ud2lkdGgoX193KTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICAgIHJldHVybiBfX287CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBfQ2hhclQqCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2ZsYXR0ZW4oX1JvcGVSZXAqIF9fciwgc2l6ZV90IF9fc3RhcnQsIHNpemVfdCBfX2xlbiwKKwkgICAgICAgX0NoYXJUKiBfX2J1ZmZlcikKKyAgICB7CisgICAgICBfUm9wZV9mbGF0dGVuX2NoYXJfY29uc3VtZXI8X0NoYXJUPiBfX2MoX19idWZmZXIpOworICAgICAgX1NfYXBwbHlfdG9fcGllY2VzKF9fYywgX19yLCBfX3N0YXJ0LCBfX3N0YXJ0ICsgX19sZW4pOworICAgICAgcmV0dXJuKF9fYnVmZmVyICsgX19sZW4pOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgc2l6ZV90CisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIGZpbmQoX0NoYXJUIF9fcGF0dGVybiwgc2l6ZV90IF9fc3RhcnQpIGNvbnN0CisgICAgeworICAgICAgX1JvcGVfZmluZF9jaGFyX2NoYXJfY29uc3VtZXI8X0NoYXJUPiBfX2MoX19wYXR0ZXJuKTsKKyAgICAgIF9TX2FwcGx5X3RvX3BpZWNlcyhfX2MsIHRoaXMtPl9NX3RyZWVfcHRyLCBfX3N0YXJ0LCBzaXplKCkpOworICAgICAgc2l6ZV90eXBlIF9fcmVzdWx0X3BvcyA9IF9fc3RhcnQgKyBfX2MuX01fY291bnQ7CisjaWZuZGVmIF9fU1RMX09MRF9ST1BFX1NFTUFOVElDUworICAgICAgaWYgKF9fcmVzdWx0X3BvcyA9PSBzaXplKCkpCisJX19yZXN1bHRfcG9zID0gbnBvczsKKyNlbmRpZgorICAgICAgcmV0dXJuIF9fcmVzdWx0X3BvczsKKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9DaGFyVCoKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfZmxhdHRlbihfUm9wZVJlcCogX19yLCBfQ2hhclQqIF9fYnVmZmVyKQorICAgIHsKKyAgICAgIGlmICgwID09IF9fcikKKwlyZXR1cm4gX19idWZmZXI7CisgICAgICBzd2l0Y2goX19yLT5fTV90YWcpCisJeworCWNhc2UgX19kZXRhaWw6Ol9TX2NvbmNhdDoKKwkgIHsKKwkgICAgX1JvcGVDb25jYXRlbmF0aW9uKiBfX2MgPSAoX1JvcGVDb25jYXRlbmF0aW9uKilfX3I7CisJICAgIF9Sb3BlUmVwKiBfX2xlZnQgPSBfX2MtPl9NX2xlZnQ7CisJICAgIF9Sb3BlUmVwKiBfX3JpZ2h0ID0gX19jLT5fTV9yaWdodDsKKwkgICAgX0NoYXJUKiBfX3Jlc3QgPSBfU19mbGF0dGVuKF9fbGVmdCwgX19idWZmZXIpOworCSAgICByZXR1cm4gX1NfZmxhdHRlbihfX3JpZ2h0LCBfX3Jlc3QpOworCSAgfQorCWNhc2UgX19kZXRhaWw6Ol9TX2xlYWY6CisJICB7CisJICAgIF9Sb3BlTGVhZiogX19sID0gKF9Sb3BlTGVhZiopX19yOworCSAgICByZXR1cm4gY29weV9uKF9fbC0+X01fZGF0YSwgX19sLT5fTV9zaXplLCBfX2J1ZmZlcikuc2Vjb25kOworCSAgfQorCWNhc2UgX19kZXRhaWw6Ol9TX2Z1bmN0aW9uOgorCWNhc2UgX19kZXRhaWw6Ol9TX3N1YnN0cmluZ2ZuOgorCSAgLy8gV2UgZG9uJ3QgeWV0IGRvIGFueXRoaW5nIHdpdGggc3Vic3RyaW5nIG5vZGVzLgorCSAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBiZWZvcmUgcm9wZWZpbGVzIHdpbGwgd29yayB3ZWxsLgorCSAgeworCSAgICBfUm9wZUZ1bmN0aW9uKiBfX2YgPSAoX1JvcGVGdW5jdGlvbiopX19yOworCSAgICAoKihfX2YtPl9NX2ZuKSkoMCwgX19mLT5fTV9zaXplLCBfX2J1ZmZlcik7CisJICAgIHJldHVybiBfX2J1ZmZlciArIF9fZi0+X01fc2l6ZTsKKwkgIH0KKwlkZWZhdWx0OgorCSAgcmV0dXJuIDA7CisJfQorICAgIH0KKworICAvLyBUaGlzIG5lZWRzIHdvcmsgZm9yIF9DaGFyVCAhPSBjaGFyCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2R1bXAoX1JvcGVSZXAqIF9fciwgaW50IF9faW5kZW50KQorICAgIHsKKyAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9faW5kZW50OyBfX2krKykKKwlwdXRjaGFyKCcgJyk7CisgICAgICBpZiAoMCA9PSBfX3IpCisJeworCSAgcHJpbnRmKCJOVUxMXG4iKTsKKwkgIHJldHVybjsKKwl9CisgICAgICBpZiAoX1NfY29uY2F0ID09IF9fci0+X01fdGFnKQorCXsKKwkgIF9Sb3BlQ29uY2F0ZW5hdGlvbiogX19jID0gKF9Sb3BlQ29uY2F0ZW5hdGlvbiopX19yOworCSAgX1JvcGVSZXAqIF9fbGVmdCA9IF9fYy0+X01fbGVmdDsKKwkgIF9Sb3BlUmVwKiBfX3JpZ2h0ID0gX19jLT5fTV9yaWdodDsKKwkgIAorI2lmZGVmIF9fR0MKKwkgIHByaW50ZigiQ29uY2F0ZW5hdGlvbiAlcCAoZGVwdGggPSAlZCwgbGVuID0gJWxkLCAlcyBiYWxhbmNlZClcbiIsCisJCSBfX3IsIF9fci0+X01fZGVwdGgsIF9fci0+X01fc2l6ZSwKKwkJIF9fci0+X01faXNfYmFsYW5jZWQ/ICIiIDogIm5vdCIpOworI2Vsc2UKKwkgIHByaW50ZigiQ29uY2F0ZW5hdGlvbiAlcCAocmMgPSAlbGQsIGRlcHRoID0gJWQsICIKKwkJICJsZW4gPSAlbGQsICVzIGJhbGFuY2VkKVxuIiwKKwkJIF9fciwgX19yLT5fTV9yZWZfY291bnQsIF9fci0+X01fZGVwdGgsIF9fci0+X01fc2l6ZSwKKwkJIF9fci0+X01faXNfYmFsYW5jZWQ/ICIiIDogIm5vdCIpOworI2VuZGlmCisJICBfU19kdW1wKF9fbGVmdCwgX19pbmRlbnQgKyAyKTsKKwkgIF9TX2R1bXAoX19yaWdodCwgX19pbmRlbnQgKyAyKTsKKwkgIHJldHVybjsKKwl9CisgICAgICBlbHNlCisJeworCSAgY2hhciogX19raW5kOworCSAgCisJICBzd2l0Y2ggKF9fci0+X01fdGFnKQorCSAgICB7CisJICAgIGNhc2UgX19kZXRhaWw6Ol9TX2xlYWY6CisJICAgICAgX19raW5kID0gIkxlYWYiOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwkgICAgICBfX2tpbmQgPSAiRnVuY3Rpb24iOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIF9fZGV0YWlsOjpfU19zdWJzdHJpbmdmbjoKKwkgICAgICBfX2tpbmQgPSAiRnVuY3Rpb24gcmVwcmVzZW50aW5nIHN1YnN0cmluZyI7CisJICAgICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJICAgICAgX19raW5kID0gIihjb3JydXB0ZWQga2luZCBmaWVsZCEpIjsKKwkgICAgfQorI2lmZGVmIF9fR0MKKwkgIHByaW50ZigiJXMgJXAgKGRlcHRoID0gJWQsIGxlbiA9ICVsZCkgIiwKKwkJIF9fa2luZCwgX19yLCBfX3ItPl9NX2RlcHRoLCBfX3ItPl9NX3NpemUpOworI2Vsc2UKKwkgIHByaW50ZigiJXMgJXAgKHJjID0gJWxkLCBkZXB0aCA9ICVkLCBsZW4gPSAlbGQpICIsCisJCSBfX2tpbmQsIF9fciwgX19yLT5fTV9yZWZfY291bnQsIF9fci0+X01fZGVwdGgsIF9fci0+X01fc2l6ZSk7CisjZW5kaWYKKwkgIGlmIChfU19pc19vbmVfYnl0ZV9jaGFyX3R5cGUoKF9DaGFyVCopMCkpCisJICAgIHsKKwkgICAgICBjb25zdCBpbnQgX19tYXhfbGVuID0gNDA7CisJICAgICAgX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fcHJlZml4KF9TX3N1YnN0cmluZyhfX3IsIDAsIF9fbWF4X2xlbikpOworCSAgICAgIF9DaGFyVCBfX2J1ZmZlcltfX21heF9sZW4gKyAxXTsKKwkgICAgICBib29sIF9fdG9vX2JpZyA9IF9fci0+X01fc2l6ZSA+IF9fcHJlZml4LT5fTV9zaXplOworCSAgICAgIAorCSAgICAgIF9TX2ZsYXR0ZW4oX19wcmVmaXgsIF9fYnVmZmVyKTsKKwkgICAgICBfX2J1ZmZlcltfX3ByZWZpeC0+X01fc2l6ZV0gPSBfU19lb3MoKF9DaGFyVCopMCk7CisJICAgICAgcHJpbnRmKCIlcyVzXG4iLCAoY2hhciopX19idWZmZXIsCisJCSAgICAgX190b29fYmlnPyAiLi4uXG4iIDogIlxuIik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgcHJpbnRmKCJcbiIpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfbWluX2xlbltpbnQoX19kZXRhaWw6Ol9TX21heF9yb3BlX2RlcHRoKSArIDFdID0geworICAgICAgLyogMCAqLzEsIC8qIDEgKi8yLCAvKiAyICovMywgLyogMyAqLzUsIC8qIDQgKi84LCAvKiA1ICovMTMsIC8qIDYgKi8yMSwKKyAgICAgIC8qIDcgKi8zNCwgLyogOCAqLzU1LCAvKiA5ICovODksIC8qIDEwICovMTQ0LCAvKiAxMSAqLzIzMywgLyogMTIgKi8zNzcsCisgICAgICAvKiAxMyAqLzYxMCwgLyogMTQgKi85ODcsIC8qIDE1ICovMTU5NywgLyogMTYgKi8yNTg0LCAvKiAxNyAqLzQxODEsCisgICAgICAvKiAxOCAqLzY3NjUsIC8qIDE5ICovMTA5NDYsIC8qIDIwICovMTc3MTEsIC8qIDIxICovMjg2NTcsIC8qIDIyICovNDYzNjgsCisgICAgICAvKiAyMyAqLzc1MDI1LCAvKiAyNCAqLzEyMTM5MywgLyogMjUgKi8xOTY0MTgsIC8qIDI2ICovMzE3ODExLAorICAgICAgLyogMjcgKi81MTQyMjksIC8qIDI4ICovODMyMDQwLCAvKiAyOSAqLzEzNDYyNjksIC8qIDMwICovMjE3ODMwOSwKKyAgICAgIC8qIDMxICovMzUyNDU3OCwgLyogMzIgKi81NzAyODg3LCAvKiAzMyAqLzkyMjc0NjUsIC8qIDM0ICovMTQ5MzAzNTIsCisgICAgICAvKiAzNSAqLzI0MTU3ODE3LCAvKiAzNiAqLzM5MDg4MTY5LCAvKiAzNyAqLzYzMjQ1OTg2LCAvKiAzOCAqLzEwMjMzNDE1NSwKKyAgICAgIC8qIDM5ICovMTY1NTgwMTQxLCAvKiA0MCAqLzI2NzkxNDI5NiwgLyogNDEgKi80MzM0OTQ0MzcsCisgICAgICAvKiA0MiAqLzcwMTQwODczMywgLyogNDMgKi8xMTM0OTAzMTcwLCAvKiA0NCAqLzE4MzYzMTE5MDMsCisgICAgICAvKiA0NSAqLzI5NzEyMTUwNzN1IH07CisgIC8vIFRoZXNlIGFyZSBGaWJvbmFjY2kgbnVtYmVycyA8IDIqKjMyLgorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICB0eXBlbmFtZSByb3BlPF9DaGFyVCwgX0FsbG9jPjo6X1JvcGVSZXAqCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIF9TX2JhbGFuY2UoX1JvcGVSZXAqIF9fcikKKyAgICB7CisgICAgICBfUm9wZVJlcCogX19mb3Jlc3RbaW50KF9fZGV0YWlsOjpfU19tYXhfcm9wZV9kZXB0aCkgKyAxXTsKKyAgICAgIF9Sb3BlUmVwKiBfX3Jlc3VsdCA9IDA7CisgICAgICBpbnQgX19pOworICAgICAgLy8gSW52YXJpYW50OgorICAgICAgLy8gVGhlIGNvbmNhdGVuYXRpb24gb2YgZm9yZXN0IGluIGRlc2NlbmRpbmcgb3JkZXIgaXMgZXF1YWwgdG8gX19yLgorICAgICAgLy8gX19mb3Jlc3RbX19pXS5fTV9zaXplID49IF9TX21pbl9sZW5bX19pXQorICAgICAgLy8gX19mb3Jlc3RbX19pXS5fTV9kZXB0aCA9IF9faQorICAgICAgLy8gUmVmZXJlbmNlcyBmcm9tIGZvcmVzdCBhcmUgaW5jbHVkZWQgaW4gcmVmY291bnQuCisgICAgICAKKyAgICAgIGZvciAoX19pID0gMDsgX19pIDw9IGludChfX2RldGFpbDo6X1NfbWF4X3JvcGVfZGVwdGgpOyArK19faSkKKwlfX2ZvcmVzdFtfX2ldID0gMDsKKyAgICAgIF9fdHJ5CisJeworCSAgX1NfYWRkX3RvX2ZvcmVzdChfX3IsIF9fZm9yZXN0KTsKKwkgIGZvciAoX19pID0gMDsgX19pIDw9IGludChfX2RldGFpbDo6X1NfbWF4X3JvcGVfZGVwdGgpOyArK19faSkKKwkgICAgaWYgKDAgIT0gX19mb3Jlc3RbX19pXSkKKwkgICAgICB7CisjaWZuZGVmIF9fR0MKKwkJX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fb2xkKF9fcmVzdWx0KTsKKyNlbmRpZgorCQlfX3Jlc3VsdCA9IF9TX2NvbmNhdChfX2ZvcmVzdFtfX2ldLCBfX3Jlc3VsdCk7CisJCV9fZm9yZXN0W19faV0tPl9NX3VucmVmX25vbm5pbCgpOworI2lmICFkZWZpbmVkKF9fR0MpICYmIGRlZmluZWQoX19FWENFUFRJT05TKQorCQlfX2ZvcmVzdFtfX2ldID0gMDsKKyNlbmRpZgorCSAgICAgIH0KKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBmb3IoX19pID0gMDsgX19pIDw9IGludChfX2RldGFpbDo6X1NfbWF4X3JvcGVfZGVwdGgpOyBfX2krKykKKwkgICAgX1NfdW5yZWYoX19mb3Jlc3RbX19pXSk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgICAKKyAgICAgIGlmIChfX3Jlc3VsdC0+X01fZGVwdGggPiBpbnQoX19kZXRhaWw6Ol9TX21heF9yb3BlX2RlcHRoKSkKKwlfX3Rocm93X2xlbmd0aF9lcnJvcihfX04oInJvcGU6Ol9TX2JhbGFuY2UiKSk7CisgICAgICByZXR1cm4oX19yZXN1bHQpOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19hZGRfdG9fZm9yZXN0KF9Sb3BlUmVwKiBfX3IsIF9Sb3BlUmVwKiogX19mb3Jlc3QpCisgICAgeworICAgICAgaWYgKF9fci0+X01faXNfYmFsYW5jZWQpCisJeworCSAgX1NfYWRkX2xlYWZfdG9fZm9yZXN0KF9fciwgX19mb3Jlc3QpOworCSAgcmV0dXJuOworCX0KKworICAgICAgeworCV9Sb3BlQ29uY2F0ZW5hdGlvbiogX19jID0gKF9Sb3BlQ29uY2F0ZW5hdGlvbiopX19yOworCQorCV9TX2FkZF90b19mb3Jlc3QoX19jLT5fTV9sZWZ0LCBfX2ZvcmVzdCk7CisJX1NfYWRkX3RvX2ZvcmVzdChfX2MtPl9NX3JpZ2h0LCBfX2ZvcmVzdCk7CisgICAgICB9CisgICAgfQorCisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfYWRkX2xlYWZfdG9fZm9yZXN0KF9Sb3BlUmVwKiBfX3IsIF9Sb3BlUmVwKiogX19mb3Jlc3QpCisgICAgeworICAgICAgX1JvcGVSZXAqIF9faW5zZXJ0ZWU7CQkvLyBpbmNsdWRlZCBpbiByZWZjb3VudAorICAgICAgX1JvcGVSZXAqIF9fdG9vX3RpbnkgPSAwOwkJLy8gaW5jbHVkZWQgaW4gcmVmY291bnQKKyAgICAgIGludCBfX2k7CQkJCS8vIGZvcmVzdFswLi5fX2ktMV0gaXMgZW1wdHkKKyAgICAgIHNpemVfdCBfX3MgPSBfX3ItPl9NX3NpemU7CisgICAgICAKKyAgICAgIGZvciAoX19pID0gMDsgX19zID49IF9TX21pbl9sZW5bX19pKzFdLyogbm90IHRoaXMgYnVja2V0ICovOyArK19faSkKKwl7CisJICBpZiAoMCAhPSBfX2ZvcmVzdFtfX2ldKQorCSAgICB7CisjaWZuZGVmIF9fR0MKKwkgICAgICBfU2VsZl9kZXN0cnVjdF9wdHIgX19vbGQoX190b29fdGlueSk7CisjZW5kaWYKKwkgICAgICBfX3Rvb190aW55ID0gX1NfY29uY2F0X2FuZF9zZXRfYmFsYW5jZWQoX19mb3Jlc3RbX19pXSwKKwkJCQkJCSAgICAgIF9fdG9vX3RpbnkpOworCSAgICAgIF9fZm9yZXN0W19faV0tPl9NX3VucmVmX25vbm5pbCgpOworCSAgICAgIF9fZm9yZXN0W19faV0gPSAwOworCSAgICB9CisJfQorICAgICAgeworI2lmbmRlZiBfX0dDCisJX1NlbGZfZGVzdHJ1Y3RfcHRyIF9fb2xkKF9fdG9vX3RpbnkpOworI2VuZGlmCisJX19pbnNlcnRlZSA9IF9TX2NvbmNhdF9hbmRfc2V0X2JhbGFuY2VkKF9fdG9vX3RpbnksIF9fcik7CisgICAgICB9CisgICAgICAvLyBUb29fdGlueSBkZWFkLCBhbmQgbm8gbG9uZ2VyIGluY2x1ZGVkIGluIHJlZmNvdW50LgorICAgICAgLy8gSW5zZXJ0ZWUgaXMgbGl2ZSBhbmQgaW5jbHVkZWQuCisgICAgICBmb3IgKDs7ICsrX19pKQorCXsKKwkgIGlmICgwICE9IF9fZm9yZXN0W19faV0pCisJICAgIHsKKyNpZm5kZWYgX19HQworCSAgICAgIF9TZWxmX2Rlc3RydWN0X3B0ciBfX29sZChfX2luc2VydGVlKTsKKyNlbmRpZgorCSAgICAgIF9faW5zZXJ0ZWUgPSBfU19jb25jYXRfYW5kX3NldF9iYWxhbmNlZChfX2ZvcmVzdFtfX2ldLAorCQkJCQkJICAgICAgX19pbnNlcnRlZSk7CisJICAgICAgX19mb3Jlc3RbX19pXS0+X01fdW5yZWZfbm9ubmlsKCk7CisJICAgICAgX19mb3Jlc3RbX19pXSA9IDA7CisJICAgIH0KKwkgIGlmIChfX2kgPT0gaW50KF9fZGV0YWlsOjpfU19tYXhfcm9wZV9kZXB0aCkKKwkgICAgICB8fCBfX2luc2VydGVlLT5fTV9zaXplIDwgX1NfbWluX2xlbltfX2krMV0pCisJICAgIHsKKwkgICAgICBfX2ZvcmVzdFtfX2ldID0gX19pbnNlcnRlZTsKKwkgICAgICAvLyByZWZjb3VudCBpcyBPSyBzaW5jZSBfX2luc2VydGVlIGlzIG5vdyBkZWFkLgorCSAgICAgIHJldHVybjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9DaGFyVAorICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBfU19mZXRjaChfUm9wZVJlcCogX19yLCBzaXplX3R5cGUgX19pKQorICAgIHsKKyAgICAgIF9fR0NfQ09OU1QgX0NoYXJUKiBfX2NzdHIgPSBfX3ItPl9NX2Nfc3RyaW5nOworICAgICAgCisgICAgICBpZiAoMCAhPSBfX2NzdHIpCisJcmV0dXJuIF9fY3N0cltfX2ldOworICAgICAgZm9yKDs7KQorCXsKKwkgIHN3aXRjaChfX3ItPl9NX3RhZykKKwkgICAgeworCSAgICBjYXNlIF9fZGV0YWlsOjpfU19jb25jYXQ6CisJICAgICAgeworCQlfUm9wZUNvbmNhdGVuYXRpb24qIF9fYyA9IChfUm9wZUNvbmNhdGVuYXRpb24qKV9fcjsKKwkJX1JvcGVSZXAqIF9fbGVmdCA9IF9fYy0+X01fbGVmdDsKKwkJc2l6ZV90IF9fbGVmdF9sZW4gPSBfX2xlZnQtPl9NX3NpemU7CisJCQorCQlpZiAoX19pID49IF9fbGVmdF9sZW4pCisJCSAgeworCQkgICAgX19pIC09IF9fbGVmdF9sZW47CisJCSAgICBfX3IgPSBfX2MtPl9NX3JpZ2h0OworCQkgIH0gCisJCWVsc2UKKwkJICBfX3IgPSBfX2xlZnQ7CisJICAgICAgfQorCSAgICAgIGJyZWFrOworCSAgICBjYXNlIF9fZGV0YWlsOjpfU19sZWFmOgorCSAgICAgIHsKKwkJX1JvcGVMZWFmKiBfX2wgPSAoX1JvcGVMZWFmKilfX3I7CisJCXJldHVybiBfX2wtPl9NX2RhdGFbX19pXTsKKwkgICAgICB9CisJICAgIGNhc2UgX19kZXRhaWw6Ol9TX2Z1bmN0aW9uOgorCSAgICBjYXNlIF9fZGV0YWlsOjpfU19zdWJzdHJpbmdmbjoKKwkgICAgICB7CisJCV9Sb3BlRnVuY3Rpb24qIF9fZiA9IChfUm9wZUZ1bmN0aW9uKilfX3I7CisJCV9DaGFyVCBfX3Jlc3VsdDsKKwkJCisJCSgqKF9fZi0+X01fZm4pKShfX2ksIDEsICZfX3Jlc3VsdCk7CisJCXJldHVybiBfX3Jlc3VsdDsKKwkgICAgICB9CisJICAgIH0KKwl9CisgICAgfQorICAKKyNpZm5kZWYgX19HQworICAvLyBSZXR1cm4gYSB1bmlxdWVseSByZWZlcmVuY2VkIGNoYXJhY3RlciBzbG90IGZvciB0aGUgZ2l2ZW4KKyAgLy8gcG9zaXRpb24sIG9yIDAgaWYgdGhhdCdzIG5vdCBwb3NzaWJsZS4KKyAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIF9DaGFyVCoKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfZmV0Y2hfcHRyKF9Sb3BlUmVwKiBfX3IsIHNpemVfdHlwZSBfX2kpCisgICAgeworICAgICAgX1JvcGVSZXAqIF9fY2xyc3RhY2tbX19kZXRhaWw6Ol9TX21heF9yb3BlX2RlcHRoXTsKKyAgICAgIHNpemVfdCBfX2NzcHRyID0gMDsKKyAgICAgIAorICAgICAgZm9yKDs7KQorCXsKKwkgIGlmIChfX3ItPl9NX3JlZl9jb3VudCA+IDEpCisJICAgIHJldHVybiAwOworCSAgc3dpdGNoKF9fci0+X01fdGFnKQorCSAgICB7CisJICAgIGNhc2UgX19kZXRhaWw6Ol9TX2NvbmNhdDoKKwkgICAgICB7CisJCV9Sb3BlQ29uY2F0ZW5hdGlvbiogX19jID0gKF9Sb3BlQ29uY2F0ZW5hdGlvbiopX19yOworCQlfUm9wZVJlcCogX19sZWZ0ID0gX19jLT5fTV9sZWZ0OworCQlzaXplX3QgX19sZWZ0X2xlbiA9IF9fbGVmdC0+X01fc2l6ZTsKKwkJCisJCWlmIChfX2MtPl9NX2Nfc3RyaW5nICE9IDApCisJCSAgX19jbHJzdGFja1tfX2NzcHRyKytdID0gX19jOworCQlpZiAoX19pID49IF9fbGVmdF9sZW4pCisJCSAgeworCQkgICAgX19pIC09IF9fbGVmdF9sZW47CisJCSAgICBfX3IgPSBfX2MtPl9NX3JpZ2h0OworCQkgIH0gCisJCWVsc2UKKwkJICBfX3IgPSBfX2xlZnQ7CisJICAgICAgfQorCSAgICAgIGJyZWFrOworCSAgICBjYXNlIF9fZGV0YWlsOjpfU19sZWFmOgorCSAgICAgIHsKKwkJX1JvcGVMZWFmKiBfX2wgPSAoX1JvcGVMZWFmKilfX3I7CisJCWlmIChfX2wtPl9NX2Nfc3RyaW5nICE9IF9fbC0+X01fZGF0YSAmJiBfX2wtPl9NX2Nfc3RyaW5nICE9IDApCisJCSAgX19jbHJzdGFja1tfX2NzcHRyKytdID0gX19sOworCQl3aGlsZSAoX19jc3B0ciA+IDApCisJCSAgeworCQkgICAgLS0gX19jc3B0cjsKKwkJICAgIF9Sb3BlUmVwKiBfX2QgPSBfX2NscnN0YWNrW19fY3NwdHJdOworCQkgICAgX19kLT5fTV9mcmVlX2Nfc3RyaW5nKCk7CisJCSAgICBfX2QtPl9NX2Nfc3RyaW5nID0gMDsKKwkJICB9CisJCXJldHVybiBfX2wtPl9NX2RhdGEgKyBfX2k7CisJICAgICAgfQorCSAgICBjYXNlIF9fZGV0YWlsOjpfU19mdW5jdGlvbjoKKwkgICAgY2FzZSBfX2RldGFpbDo6X1Nfc3Vic3RyaW5nZm46CisJICAgICAgcmV0dXJuIDA7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIF9fR0MgKi8KKworICAvLyBUaGUgZm9sbG93aW5nIGNvdWxkIGJlIGltcGxlbWVudGVkIHRyaXZpYWxseSB1c2luZworICAvLyBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5LgorICAvLyBXZSBkbyBhIGxpdHRsZSBtb3JlIHdvcmsgdG8gYXZvaWQgZGVhbGluZyB3aXRoIHJvcGUgaXRlcmF0b3JzIGZvcgorICAvLyBmbGF0IHN0cmluZ3MuCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbnQKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgX1NfY29tcGFyZSAoY29uc3QgX1JvcGVSZXAqIF9fbGVmdCwgY29uc3QgX1JvcGVSZXAqIF9fcmlnaHQpCisgICAgeworICAgICAgc2l6ZV90IF9fbGVmdF9sZW47CisgICAgICBzaXplX3QgX19yaWdodF9sZW47CisgICAgICAKKyAgICAgIGlmICgwID09IF9fcmlnaHQpCisJcmV0dXJuIDAgIT0gX19sZWZ0OworICAgICAgaWYgKDAgPT0gX19sZWZ0KQorCXJldHVybiAtMTsKKyAgICAgIF9fbGVmdF9sZW4gPSBfX2xlZnQtPl9NX3NpemU7CisgICAgICBfX3JpZ2h0X2xlbiA9IF9fcmlnaHQtPl9NX3NpemU7CisgICAgICBpZiAoX19kZXRhaWw6Ol9TX2xlYWYgPT0gX19sZWZ0LT5fTV90YWcpCisJeworCSAgX1JvcGVMZWFmKiBfX2wgPSAoX1JvcGVMZWFmKikgX19sZWZ0OworCSAgaWYgKF9fZGV0YWlsOjpfU19sZWFmID09IF9fcmlnaHQtPl9NX3RhZykKKwkgICAgeworCSAgICAgIF9Sb3BlTGVhZiogX19yID0gKF9Sb3BlTGVhZiopIF9fcmlnaHQ7CisJICAgICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19sLT5fTV9kYXRhLAorCQkJCQkJICBfX2wtPl9NX2RhdGEgKyBfX2xlZnRfbGVuLAorCQkJCQkJICBfX3ItPl9NX2RhdGEsIF9fci0+X01fZGF0YQorCQkJCQkJICArIF9fcmlnaHRfbGVuKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgY29uc3RfaXRlcmF0b3IgX19yc3RhcnQoX19yaWdodCwgMCk7CisJICAgICAgY29uc3RfaXRlcmF0b3IgX19yZW5kKF9fcmlnaHQsIF9fcmlnaHRfbGVuKTsKKwkgICAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2wtPl9NX2RhdGEsIF9fbC0+X01fZGF0YQorCQkJCQkJICArIF9fbGVmdF9sZW4sCisJCQkJCQkgIF9fcnN0YXJ0LCBfX3JlbmQpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNvbnN0X2l0ZXJhdG9yIF9fbHN0YXJ0KF9fbGVmdCwgMCk7CisJICBjb25zdF9pdGVyYXRvciBfX2xlbmQoX19sZWZ0LCBfX2xlZnRfbGVuKTsKKwkgIGlmIChfX2RldGFpbDo6X1NfbGVhZiA9PSBfX3JpZ2h0LT5fTV90YWcpCisJICAgIHsKKwkgICAgICBfUm9wZUxlYWYqIF9fciA9IChfUm9wZUxlYWYqKSBfX3JpZ2h0OworCSAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fbHN0YXJ0LCBfX2xlbmQsCisJCQkJCQkgIF9fci0+X01fZGF0YSwgX19yLT5fTV9kYXRhCisJCQkJCQkgICsgX19yaWdodF9sZW4pOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdF9pdGVyYXRvciBfX3JzdGFydChfX3JpZ2h0LCAwKTsKKwkgICAgICBjb25zdF9pdGVyYXRvciBfX3JlbmQoX19yaWdodCwgX19yaWdodF9sZW4pOworCSAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fbHN0YXJ0LCBfX2xlbmQsCisJCQkJCQkgIF9fcnN0YXJ0LCBfX3JlbmQpOworCSAgICB9CisJfQorICAgIH0KKworICAvLyBBc3NpZ25tZW50IHRvIHJlZmVyZW5jZSBwcm94aWVzLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgX1JvcGVfY2hhcl9yZWZfcHJveHk8X0NoYXJULCBfQWxsb2M+JgorICAgIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpCisgICAgeworICAgICAgX1JvcGVSZXAqIF9fb2xkID0gX01fcm9vdC0+X01fdHJlZV9wdHI7CisjaWZuZGVmIF9fR0MKKyAgICAgIC8vIEZpcnN0IGNoZWNrIGZvciB0aGUgY2FzZSBpbiB3aGljaCBldmVyeXRoaW5nIGlzIHVuaXF1ZWx5CisgICAgICAvLyByZWZlcmVuY2VkLiAgSW4gdGhhdCBjYXNlIHdlIGNhbiBkbyB0aGlzIGRlc3RydWN0aXZlbHkuCisgICAgICBfQ2hhclQqIF9fcHRyID0gX015X3JvcGU6Ol9TX2ZldGNoX3B0cihfX29sZCwgX01fcG9zKTsKKyAgICAgIGlmICgwICE9IF9fcHRyKQorCXsKKwkgICpfX3B0ciA9IF9fYzsKKwkgIHJldHVybiAqdGhpczsKKwl9CisjZW5kaWYKKyAgICAgIF9TZWxmX2Rlc3RydWN0X3B0ciBfX2xlZnQoX015X3JvcGU6Ol9TX3N1YnN0cmluZyhfX29sZCwgMCwgX01fcG9zKSk7CisgICAgICBfU2VsZl9kZXN0cnVjdF9wdHIgX19yaWdodChfTXlfcm9wZTo6X1Nfc3Vic3RyaW5nKF9fb2xkLCBfTV9wb3MgKyAxLAorCQkJCQkJCV9fb2xkLT5fTV9zaXplKSk7CisgICAgICBfU2VsZl9kZXN0cnVjdF9wdHIgX19yZXN1bHRfbGVmdChfTXlfcm9wZTo6CisJCQkJICAgICAgIF9TX2Rlc3RyX2NvbmNhdF9jaGFyX2l0ZXIoX19sZWZ0LAorCQkJCQkJCQkgJl9fYywgMSkpOworCisgICAgICBfUm9wZVJlcCogX19yZXN1bHQgPSBfTXlfcm9wZTo6X1NfY29uY2F0KF9fcmVzdWx0X2xlZnQsIF9fcmlnaHQpOworI2lmbmRlZiBfX0dDCisgICAgICBfUm9wZVJlcDo6X1NfdW5yZWYoX19vbGQpOworI2VuZGlmCisgICAgICBfTV9yb290LT5fTV90cmVlX3B0ciA9IF9fcmVzdWx0OworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIF9Sb3BlX2NoYXJfcmVmX3Byb3h5PF9DaGFyVCwgX0FsbG9jPjo6CisgICAgb3BlcmF0b3IgX0NoYXJUKCkgY29uc3QKKyAgICB7CisgICAgICBpZiAoX01fY3VycmVudF92YWxpZCkKKwlyZXR1cm4gX01fY3VycmVudDsKKyAgICAgIGVsc2UKKwlyZXR1cm4gX015X3JvcGU6Ol9TX2ZldGNoKF9NX3Jvb3QtPl9NX3RyZWVfcHRyLCBfTV9wb3MpOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgX1JvcGVfY2hhcl9wdHJfcHJveHk8X0NoYXJULCBfQWxsb2M+CisgICAgX1JvcGVfY2hhcl9yZWZfcHJveHk8X0NoYXJULCBfQWxsb2M+OjoKKyAgICBvcGVyYXRvciYoKSBjb25zdAorICAgIHsgcmV0dXJuIF9Sb3BlX2NoYXJfcHRyX3Byb3h5PF9DaGFyVCwgX0FsbG9jPigqdGhpcyk7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIHJvcGUoc2l6ZV90IF9fbiwgX0NoYXJUIF9fYywgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKKyAgICA6IF9CYXNlKF9fYSkKKyAgICB7CisgICAgICByb3BlPF9DaGFyVCxfQWxsb2M+IF9fcmVzdWx0OworICAgICAgY29uc3Qgc2l6ZV90IF9fZXhwb25lbnRpYXRlX3RocmVzaG9sZCA9IDMyOworICAgICAgc2l6ZV90IF9fZXhwb25lbnQ7CisgICAgICBzaXplX3QgX19yZXN0OworICAgICAgX0NoYXJUKiBfX3Jlc3RfYnVmZmVyOworICAgICAgX1JvcGVSZXAqIF9fcmVtYWluZGVyOworICAgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4gX19yZW1haW5kZXJfcm9wZTsKKworICAgICAgaWYgKDAgPT0gX19uKQorCXJldHVybjsKKworICAgICAgX19leHBvbmVudCA9IF9fbiAvIF9fZXhwb25lbnRpYXRlX3RocmVzaG9sZDsKKyAgICAgIF9fcmVzdCA9IF9fbiAlIF9fZXhwb25lbnRpYXRlX3RocmVzaG9sZDsKKyAgICAgIGlmICgwID09IF9fcmVzdCkKKwlfX3JlbWFpbmRlciA9IDA7CisgICAgICBlbHNlCisJeworCSAgX19yZXN0X2J1ZmZlciA9IHRoaXMtPl9EYXRhX2FsbG9jYXRlKF9TX3JvdW5kZWRfdXBfc2l6ZShfX3Jlc3QpKTsKKwkgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYShfX3Jlc3RfYnVmZmVyLCBfX3Jlc3QsIF9fYywKKwkJCQkgICBfTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgX1NfY29uZF9zdG9yZV9lb3MoX19yZXN0X2J1ZmZlcltfX3Jlc3RdKTsKKwkgIF9fdHJ5CisJICAgIHsgX19yZW1haW5kZXIgPSBfU19uZXdfUm9wZUxlYWYoX19yZXN0X2J1ZmZlciwgX19yZXN0LAorCQkJCQkgICAgX01fZ2V0X2FsbG9jYXRvcigpKTsgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBfUm9wZVJlcDo6X19TVExfRlJFRV9TVFJJTkcoX19yZXN0X2J1ZmZlciwgX19yZXN0LAorCQkJCQkgIF9NX2dldF9hbGxvY2F0b3IoKSk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwl9CisgICAgICBfX3JlbWFpbmRlcl9yb3BlLl9NX3RyZWVfcHRyID0gX19yZW1haW5kZXI7CisgICAgICBpZiAoX19leHBvbmVudCAhPSAwKQorCXsKKwkgIF9DaGFyVCogX19iYXNlX2J1ZmZlciA9CisJICAgIHRoaXMtPl9EYXRhX2FsbG9jYXRlKF9TX3JvdW5kZWRfdXBfc2l6ZShfX2V4cG9uZW50aWF0ZV90aHJlc2hvbGQpKTsKKwkgIF9Sb3BlTGVhZiogX19iYXNlX2xlYWY7CisJICByb3BlIF9fYmFzZV9yb3BlOworCSAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hKF9fYmFzZV9idWZmZXIsIF9fZXhwb25lbnRpYXRlX3RocmVzaG9sZCwgX19jLAorCQkJCSAgIF9NX2dldF9hbGxvY2F0b3IoKSk7CisJICBfU19jb25kX3N0b3JlX2VvcyhfX2Jhc2VfYnVmZmVyW19fZXhwb25lbnRpYXRlX3RocmVzaG9sZF0pOworCSAgX190cnkKKwkgICAgeworCSAgICAgIF9fYmFzZV9sZWFmID0gX1NfbmV3X1JvcGVMZWFmKF9fYmFzZV9idWZmZXIsCisJCQkJCSAgICBfX2V4cG9uZW50aWF0ZV90aHJlc2hvbGQsCisJCQkJCSAgICBfTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIF9Sb3BlUmVwOjpfX1NUTF9GUkVFX1NUUklORyhfX2Jhc2VfYnVmZmVyLAorCQkJCQkgIF9fZXhwb25lbnRpYXRlX3RocmVzaG9sZCwKKwkJCQkJICBfTV9nZXRfYWxsb2NhdG9yKCkpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2Jhc2Vfcm9wZS5fTV90cmVlX3B0ciA9IF9fYmFzZV9sZWFmOworCSAgaWYgKDEgPT0gX19leHBvbmVudCkKKwkgICAgX19yZXN1bHQgPSBfX2Jhc2Vfcm9wZTsKKwkgIGVsc2UKKwkgICAgX19yZXN1bHQgPSBwb3dlcihfX2Jhc2Vfcm9wZSwgX19leHBvbmVudCwKKwkJCSAgICAgX1JvcGVfQ29uY2F0X2ZuPF9DaGFyVCwgX0FsbG9jPigpKTsKKwkgICAgCisJICBpZiAoMCAhPSBfX3JlbWFpbmRlcikKKwkgICAgX19yZXN1bHQgKz0gX19yZW1haW5kZXJfcm9wZTsKKwl9CisgICAgICBlbHNlCisJX19yZXN1bHQgPSBfX3JlbWFpbmRlcl9yb3BlOworCSAgCisgICAgICB0aGlzLT5fTV90cmVlX3B0ciA9IF9fcmVzdWx0Ll9NX3RyZWVfcHRyOworICAgICAgdGhpcy0+X01fdHJlZV9wdHItPl9NX3JlZl9ub25uaWwoKTsKKyAgICB9CisgICAgICAKKyAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfQWxsb2M+CisgICAgX0NoYXJUCisgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz46Ol9TX2VtcHR5X2Nfc3RyWzFdOworICAgICAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNvbnN0IF9DaGFyVCoKKyAgICByb3BlPF9DaGFyVCwgX0FsbG9jPjo6CisgICAgY19zdHIoKSBjb25zdAorICAgIHsKKyAgICAgIGlmICgwID09IHRoaXMtPl9NX3RyZWVfcHRyKQorCXsKKwkgIF9TX2VtcHR5X2Nfc3RyWzBdID0gX1NfZW9zKChfQ2hhclQqKTApOyAgLy8gUG9zc2libHkgcmVkdW5kYW50LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgcHJvYmFibHkgZmFzdC4KKwkgIHJldHVybiBfU19lbXB0eV9jX3N0cjsKKwl9CisgICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jayAoJnRoaXMtPl9NX3RyZWVfcHRyLT5fTV9jX3N0cmluZ19sb2NrKTsKKyAgICAgIF9fR0NfQ09OU1QgX0NoYXJUKiBfX3Jlc3VsdCA9IHRoaXMtPl9NX3RyZWVfcHRyLT5fTV9jX3N0cmluZzsKKyAgICAgIGlmICgwID09IF9fcmVzdWx0KQorCXsKKwkgIHNpemVfdCBfX3MgPSBzaXplKCk7CisJICBfX3Jlc3VsdCA9IHRoaXMtPl9EYXRhX2FsbG9jYXRlKF9fcyArIDEpOworCSAgX1NfZmxhdHRlbih0aGlzLT5fTV90cmVlX3B0ciwgX19yZXN1bHQpOworCSAgX19yZXN1bHRbX19zXSA9IF9TX2VvcygoX0NoYXJUKikwKTsKKwkgIHRoaXMtPl9NX3RyZWVfcHRyLT5fTV9jX3N0cmluZyA9IF9fcmVzdWx0OworCX0KKyAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2sgKCZ0aGlzLT5fTV90cmVlX3B0ci0+X01fY19zdHJpbmdfbG9jayk7CisgICAgICByZXR1cm4oX19yZXN1bHQpOworICAgIH0KKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0FsbG9jPgorICAgIGNvbnN0IF9DaGFyVCogcm9wZTxfQ2hhclQsIF9BbGxvYz46OgorICAgIHJlcGxhY2Vfd2l0aF9jX3N0cigpCisgICAgeworICAgICAgaWYgKDAgPT0gdGhpcy0+X01fdHJlZV9wdHIpCisJeworCSAgX1NfZW1wdHlfY19zdHJbMF0gPSBfU19lb3MoKF9DaGFyVCopMCk7CisJICByZXR1cm4gX1NfZW1wdHlfY19zdHI7CisJfQorICAgICAgX19HQ19DT05TVCBfQ2hhclQqIF9fb2xkX2Nfc3RyaW5nID0gdGhpcy0+X01fdHJlZV9wdHItPl9NX2Nfc3RyaW5nOworICAgICAgaWYgKF9fZGV0YWlsOjpfU19sZWFmID09IHRoaXMtPl9NX3RyZWVfcHRyLT5fTV90YWcKKwkgICYmIDAgIT0gX19vbGRfY19zdHJpbmcpCisJcmV0dXJuKF9fb2xkX2Nfc3RyaW5nKTsKKyAgICAgIHNpemVfdCBfX3MgPSBzaXplKCk7CisgICAgICBfQ2hhclQqIF9fcmVzdWx0ID0gdGhpcy0+X0RhdGFfYWxsb2NhdGUoX1Nfcm91bmRlZF91cF9zaXplKF9fcykpOworICAgICAgX1NfZmxhdHRlbih0aGlzLT5fTV90cmVlX3B0ciwgX19yZXN1bHQpOworICAgICAgX19yZXN1bHRbX19zXSA9IF9TX2VvcygoX0NoYXJUKikwKTsKKyAgICAgIHRoaXMtPl9NX3RyZWVfcHRyLT5fTV91bnJlZl9ub25uaWwoKTsKKyAgICAgIHRoaXMtPl9NX3RyZWVfcHRyID0gX1NfbmV3X1JvcGVMZWFmKF9fcmVzdWx0LCBfX3MsCisJCQkJCSAgdGhpcy0+X01fZ2V0X2FsbG9jYXRvcigpKTsKKyAgICAgIHJldHVybihfX3Jlc3VsdCk7CisgICAgfQorCisgIC8vIEFsZ29yaXRobSBzcGVjaWFsaXphdGlvbnMuICBNb3JlIHNob3VsZCBiZSBhZGRlZC4KKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9Sb3BlX2l0ZXJhdG9yPiAgLy8gd2FzIHRlbXBsYXRlZCBvbiBDaGFyVCBhbmQgQWxsb2MKKyAgICB2b2lkCQkgICAgICAgICAgLy8gVkMrKyB3b3JrYXJvdW5kCisgICAgX1JvcGVfcm90YXRlKF9Sb3BlX2l0ZXJhdG9yIF9fZmlyc3QsCisJCSBfUm9wZV9pdGVyYXRvciBfX21pZGRsZSwKKwkJIF9Sb3BlX2l0ZXJhdG9yIF9fbGFzdCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Sb3BlX2l0ZXJhdG9yOjp2YWx1ZV90eXBlIF9DaGFyVDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JvcGVfaXRlcmF0b3I6Ol9hbGxvY2F0b3JfdHlwZSBfQWxsb2M7CisgICAgICAKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+JiBfX3IoX19maXJzdC5jb250YWluZXIoKSk7CisgICAgICByb3BlPF9DaGFyVCwgX0FsbG9jPiBfX3ByZWZpeCA9IF9fci5zdWJzdHIoMCwgX19maXJzdC5pbmRleCgpKTsKKyAgICAgIHJvcGU8X0NoYXJULCBfQWxsb2M+IF9fc3VmZml4ID0KKwlfX3Iuc3Vic3RyKF9fbGFzdC5pbmRleCgpLCBfX3Iuc2l6ZSgpIC0gX19sYXN0LmluZGV4KCkpOworICAgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4gX19wYXJ0MSA9CisJX19yLnN1YnN0cihfX21pZGRsZS5pbmRleCgpLCBfX2xhc3QuaW5kZXgoKSAtIF9fbWlkZGxlLmluZGV4KCkpOworICAgICAgcm9wZTxfQ2hhclQsIF9BbGxvYz4gX19wYXJ0MiA9CisJX19yLnN1YnN0cihfX2ZpcnN0LmluZGV4KCksIF9fbWlkZGxlLmluZGV4KCkgLSBfX2ZpcnN0LmluZGV4KCkpOworICAgICAgX19yID0gX19wcmVmaXg7CisgICAgICBfX3IgKz0gX19wYXJ0MTsKKyAgICAgIF9fciArPSBfX3BhcnQyOworICAgICAgX19yICs9IF9fc3VmZml4OworICAgIH0KKworI2lmICFkZWZpbmVkKF9fR05VQ19fKQorICAvLyBBcHBlYXJzIHRvIGNvbmZ1c2UgZysrCisgIGlubGluZSB2b2lkCisgIHJvdGF0ZShfUm9wZV9pdGVyYXRvcjxjaGFyLCBfX1NUTF9ERUZBVUxUX0FMTE9DQVRPUihjaGFyKT4gX19maXJzdCwKKwkgX1JvcGVfaXRlcmF0b3I8Y2hhciwgX19TVExfREVGQVVMVF9BTExPQ0FUT1IoY2hhcik+IF9fbWlkZGxlLAorCSBfUm9wZV9pdGVyYXRvcjxjaGFyLCBfX1NUTF9ERUZBVUxUX0FMTE9DQVRPUihjaGFyKT4gX19sYXN0KQorICB7IF9Sb3BlX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsgfQorI2VuZGlmCisKKyMgaWYgMAorICAvLyBQcm9iYWJseSBub3QgdXNlZnVsIGZvciBzZXZlcmFsIHJlYXNvbnM6CisgIC8vIC0gZm9yIFNHSXMgNy4xIGNvbXBpbGVyIGFuZCBwcm9iYWJseSBzb21lIG90aGVycywKKyAgLy8gICB0aGlzIGZvcmNlcyBsb3RzIG9mIHJvcGU8d2NoYXJfdCwgLi4uPiBpbnN0YW50aWF0aW9ucywgY3JlYXRpbmcgYQorICAvLyAgIGNvZGUgYmxvYXQgYW5kIGNvbXBpbGUgdGltZSBwcm9ibGVtLiAgKEZpeGVkIGluIDcuMi4pCisgIC8vIC0gd2NoYXJfdCBpcyA0IGJ5dGVzIHdpZGUgb24gbW9zdCBVTklYIHBsYXRmb3JtcywgbWFraW5nIGl0CisgIC8vICAgdW5hdHRyYWN0aXZlIGZvciB1bmljb2RlIHN0cmluZ3MuICBVbnNpZ25lZCBzaG9ydCBtYXkgYmUgYSBiZXR0ZXIKKyAgLy8gICBjaGFyYWN0ZXIgdHlwZS4KKyAgaW5saW5lIHZvaWQKKyAgcm90YXRlKF9Sb3BlX2l0ZXJhdG9yPHdjaGFyX3QsIF9fU1RMX0RFRkFVTFRfQUxMT0NBVE9SKGNoYXIpPiBfX2ZpcnN0LAorCSBfUm9wZV9pdGVyYXRvcjx3Y2hhcl90LCBfX1NUTF9ERUZBVUxUX0FMTE9DQVRPUihjaGFyKT4gX19taWRkbGUsCisJIF9Sb3BlX2l0ZXJhdG9yPHdjaGFyX3QsIF9fU1RMX0RFRkFVTFRfQUxMT0NBVE9SKGNoYXIpPiBfX2xhc3QpCisgIHsgX1JvcGVfcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOyB9CisjIGVuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3NsaXN0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvc2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmYWM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3NsaXN0CkBAIC0wLDAgKzEsMTA4MiBAQAorLy8gU2luZ2x5LWxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgZXh0L3NsaXN0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkgKHBvc3NpYmx5CisgKiAgY29udGFpbmluZyBleHRlbnNpb25zIGZyb20gdGhlIEhQL1NHSSBTVEwgc3Vic2V0KS4gCisgKi8KKworI2lmbmRlZiBfU0xJU1QKKyNkZWZpbmUgX1NMSVNUIDEKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2NvbnN0cnVjdC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaD4KKyNpbmNsdWRlIDxiaXRzL2NvbmNlcHRfY2hlY2suaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHVzaW5nIHN0ZDo6c2l6ZV90OworICB1c2luZyBzdGQ6OnB0cmRpZmZfdDsKKyAgdXNpbmcgc3RkOjpfQ29uc3RydWN0OworICB1c2luZyBzdGQ6Ol9EZXN0cm95OworICB1c2luZyBzdGQ6OmFsbG9jYXRvcjsKKyAgdXNpbmcgc3RkOjpfX3RydWVfdHlwZTsKKyAgdXNpbmcgc3RkOjpfX2ZhbHNlX3R5cGU7CisKKyAgc3RydWN0IF9TbGlzdF9ub2RlX2Jhc2UKKyAgeworICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9NX25leHQ7CisgIH07CisgIAorICBpbmxpbmUgX1NsaXN0X25vZGVfYmFzZSoKKyAgX19zbGlzdF9tYWtlX2xpbmsoX1NsaXN0X25vZGVfYmFzZSogX19wcmV2X25vZGUsCisJCSAgICBfU2xpc3Rfbm9kZV9iYXNlKiBfX25ld19ub2RlKQorICB7CisgICAgX19uZXdfbm9kZS0+X01fbmV4dCA9IF9fcHJldl9ub2RlLT5fTV9uZXh0OworICAgIF9fcHJldl9ub2RlLT5fTV9uZXh0ID0gX19uZXdfbm9kZTsKKyAgICByZXR1cm4gX19uZXdfbm9kZTsKKyAgfQorCisgIGlubGluZSBfU2xpc3Rfbm9kZV9iYXNlKgorICBfX3NsaXN0X3ByZXZpb3VzKF9TbGlzdF9ub2RlX2Jhc2UqIF9faGVhZCwKKwkJICAgY29uc3QgX1NsaXN0X25vZGVfYmFzZSogX19ub2RlKQorICB7CisgICAgd2hpbGUgKF9faGVhZCAmJiBfX2hlYWQtPl9NX25leHQgIT0gX19ub2RlKQorICAgICAgX19oZWFkID0gX19oZWFkLT5fTV9uZXh0OworICAgIHJldHVybiBfX2hlYWQ7CisgIH0KKworICBpbmxpbmUgY29uc3QgX1NsaXN0X25vZGVfYmFzZSoKKyAgX19zbGlzdF9wcmV2aW91cyhjb25zdCBfU2xpc3Rfbm9kZV9iYXNlKiBfX2hlYWQsCisJCSAgIGNvbnN0IF9TbGlzdF9ub2RlX2Jhc2UqIF9fbm9kZSkKKyAgeworICAgIHdoaWxlIChfX2hlYWQgJiYgX19oZWFkLT5fTV9uZXh0ICE9IF9fbm9kZSkKKyAgICAgIF9faGVhZCA9IF9faGVhZC0+X01fbmV4dDsKKyAgICByZXR1cm4gX19oZWFkOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoX1NsaXN0X25vZGVfYmFzZSogX19wb3MsCisJCSAgICAgICBfU2xpc3Rfbm9kZV9iYXNlKiBfX2JlZm9yZV9maXJzdCwKKwkJICAgICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fYmVmb3JlX2xhc3QpCisgIHsKKyAgICBpZiAoX19wb3MgIT0gX19iZWZvcmVfZmlyc3QgJiYgX19wb3MgIT0gX19iZWZvcmVfbGFzdCkKKyAgICAgIHsKKwlfU2xpc3Rfbm9kZV9iYXNlKiBfX2ZpcnN0ID0gX19iZWZvcmVfZmlyc3QtPl9NX25leHQ7CisJX1NsaXN0X25vZGVfYmFzZSogX19hZnRlciA9IF9fcG9zLT5fTV9uZXh0OworCV9fYmVmb3JlX2ZpcnN0LT5fTV9uZXh0ID0gX19iZWZvcmVfbGFzdC0+X01fbmV4dDsKKwlfX3Bvcy0+X01fbmV4dCA9IF9fZmlyc3Q7CisJX19iZWZvcmVfbGFzdC0+X01fbmV4dCA9IF9fYWZ0ZXI7CisgICAgICB9CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3NsaXN0X3NwbGljZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNlKiBfX3BvcywgX1NsaXN0X25vZGVfYmFzZSogX19oZWFkKQorICB7CisgICAgX1NsaXN0X25vZGVfYmFzZSogX19iZWZvcmVfbGFzdCA9IF9fc2xpc3RfcHJldmlvdXMoX19oZWFkLCAwKTsKKyAgICBpZiAoX19iZWZvcmVfbGFzdCAhPSBfX2hlYWQpCisgICAgICB7CisJX1NsaXN0X25vZGVfYmFzZSogX19hZnRlciA9IF9fcG9zLT5fTV9uZXh0OworCV9fcG9zLT5fTV9uZXh0ID0gX19oZWFkLT5fTV9uZXh0OworCV9faGVhZC0+X01fbmV4dCA9IDA7CisJX19iZWZvcmVfbGFzdC0+X01fbmV4dCA9IF9fYWZ0ZXI7CisgICAgICB9CisgIH0KKworICBpbmxpbmUgX1NsaXN0X25vZGVfYmFzZSoKKyAgX19zbGlzdF9yZXZlcnNlKF9TbGlzdF9ub2RlX2Jhc2UqIF9fbm9kZSkKKyAgeworICAgIF9TbGlzdF9ub2RlX2Jhc2UqIF9fcmVzdWx0ID0gX19ub2RlOworICAgIF9fbm9kZSA9IF9fbm9kZS0+X01fbmV4dDsKKyAgICBfX3Jlc3VsdC0+X01fbmV4dCA9IDA7CisgICAgd2hpbGUoX19ub2RlKQorICAgICAgeworCV9TbGlzdF9ub2RlX2Jhc2UqIF9fbmV4dCA9IF9fbm9kZS0+X01fbmV4dDsKKwlfX25vZGUtPl9NX25leHQgPSBfX3Jlc3VsdDsKKwlfX3Jlc3VsdCA9IF9fbm9kZTsKKwlfX25vZGUgPSBfX25leHQ7CisgICAgICB9CisgICAgcmV0dXJuIF9fcmVzdWx0OworICB9CisKKyAgaW5saW5lIHNpemVfdAorICBfX3NsaXN0X3NpemUoX1NsaXN0X25vZGVfYmFzZSogX19ub2RlKQorICB7CisgICAgc2l6ZV90IF9fcmVzdWx0ID0gMDsKKyAgICBmb3IgKDsgX19ub2RlICE9IDA7IF9fbm9kZSA9IF9fbm9kZS0+X01fbmV4dCkKKyAgICAgICsrX19yZXN1bHQ7CisgICAgcmV0dXJuIF9fcmVzdWx0OworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICBzdHJ1Y3QgX1NsaXN0X25vZGUgOiBwdWJsaWMgX1NsaXN0X25vZGVfYmFzZQorICAgIHsKKyAgICAgIF9UcCBfTV9kYXRhOworICAgIH07CisKKyAgc3RydWN0IF9TbGlzdF9pdGVyYXRvcl9iYXNlCisgIHsKKyAgICB0eXBlZGVmIHNpemVfdCAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgX1NsaXN0X25vZGVfYmFzZSogX01fbm9kZTsKKyAgICAKKyAgICBfU2xpc3RfaXRlcmF0b3JfYmFzZShfU2xpc3Rfbm9kZV9iYXNlKiBfX3gpCisgICAgOiBfTV9ub2RlKF9feCkge30KKworICAgIHZvaWQKKyAgICBfTV9pbmNyKCkKKyAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfU2xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdAorICAgIHsgcmV0dXJuIF9NX25vZGUgPT0gX194Ll9NX25vZGU7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9TbGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0CisgICAgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQorICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CisgICAgc3RydWN0IF9TbGlzdF9pdGVyYXRvciA6IHB1YmxpYyBfU2xpc3RfaXRlcmF0b3JfYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9TbGlzdF9pdGVyYXRvcjxfVHAsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfU2xpc3RfaXRlcmF0b3I8X1RwLCBfUmVmLCBfUHRyPiAgICAgICAgICAgICBfU2VsZjsKKworICAgICAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIF9QdHIgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX1JlZiAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIF9TbGlzdF9ub2RlPF9UcD4gX05vZGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfU2xpc3RfaXRlcmF0b3IoX05vZGUqIF9feCkKKyAgICAgIDogX1NsaXN0X2l0ZXJhdG9yX2Jhc2UoX194KSB7fQorCisgICAgICBfU2xpc3RfaXRlcmF0b3IoKQorICAgICAgOiBfU2xpc3RfaXRlcmF0b3JfYmFzZSgwKSB7fQorCisgICAgICBfU2xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkKKyAgICAgIDogX1NsaXN0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX25vZGUpIHt9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICgoX05vZGUqKSBfTV9ub2RlKS0+X01fZGF0YTsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CisKKyAgICAgIF9TZWxmJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJX01faW5jcigpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX1NlbGYKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeworCV9TZWxmIF9fdG1wID0gKnRoaXM7CisJX01faW5jcigpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX1NsaXN0X2Jhc2UKKyAgICA6IHB1YmxpYyBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfU2xpc3Rfbm9kZTxfVHA+ID46Om90aGVyCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfU2xpc3Rfbm9kZTxfVHA+ID46Om90aGVyCisgICAgICAgIF9Ob2RlX2FsbG9jOworICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfTm9kZV9hbGxvYyo+KHRoaXMpOyB9CisKKyAgICAgIF9TbGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgICA6IF9Ob2RlX2FsbG9jKF9fYSkKKyAgICAgIHsgdGhpcy0+X01faGVhZC5fTV9uZXh0ID0gMDsgfQorCisgICAgICB+X1NsaXN0X2Jhc2UoKQorICAgICAgeyBfTV9lcmFzZV9hZnRlcigmdGhpcy0+X01faGVhZCwgMCk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9TbGlzdF9ub2RlX2Jhc2UgX01faGVhZDsKKworICAgICAgX1NsaXN0X25vZGU8X1RwPioKKyAgICAgIF9NX2dldF9ub2RlKCkKKyAgICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jOjphbGxvY2F0ZSgxKTsgfQorICAKKyAgICAgIHZvaWQKKyAgICAgIF9NX3B1dF9ub2RlKF9TbGlzdF9ub2RlPF9UcD4qIF9fcCkKKyAgICAgIHsgX05vZGVfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgX1NsaXN0X25vZGVfYmFzZSogX01fZXJhc2VfYWZ0ZXIoX1NsaXN0X25vZGVfYmFzZSogX19wb3MpCisgICAgICB7CisJX1NsaXN0X25vZGU8X1RwPiogX19uZXh0ID0gKF9TbGlzdF9ub2RlPF9UcD4qKSAoX19wb3MtPl9NX25leHQpOworCV9TbGlzdF9ub2RlX2Jhc2UqIF9fbmV4dF9uZXh0ID0gX19uZXh0LT5fTV9uZXh0OworCV9fcG9zLT5fTV9uZXh0ID0gX19uZXh0X25leHQ7CisJZ2V0X2FsbG9jYXRvcigpLmRlc3Ryb3koJl9fbmV4dC0+X01fZGF0YSk7CisJX01fcHV0X25vZGUoX19uZXh0KTsKKwlyZXR1cm4gX19uZXh0X25leHQ7CisgICAgICB9CisgICAgICBfU2xpc3Rfbm9kZV9iYXNlKiBfTV9lcmFzZV9hZnRlcihfU2xpc3Rfbm9kZV9iYXNlKiwgX1NsaXN0X25vZGVfYmFzZSopOworICAgIH07CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIF9TbGlzdF9ub2RlX2Jhc2UqCisgICAgX1NsaXN0X2Jhc2U8X1RwLF9BbGxvYz46Ol9NX2VyYXNlX2FmdGVyKF9TbGlzdF9ub2RlX2Jhc2UqIF9fYmVmb3JlX2ZpcnN0LAorCQkJCQkgICAgX1NsaXN0X25vZGVfYmFzZSogX19sYXN0X25vZGUpCisgICAgeworICAgICAgX1NsaXN0X25vZGU8X1RwPiogX19jdXIgPSAoX1NsaXN0X25vZGU8X1RwPiopIChfX2JlZm9yZV9maXJzdC0+X01fbmV4dCk7CisgICAgICB3aGlsZSAoX19jdXIgIT0gX19sYXN0X25vZGUpCisJeworCSAgX1NsaXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1cjsKKwkgIF9fY3VyID0gKF9TbGlzdF9ub2RlPF9UcD4qKSBfX2N1ci0+X01fbmV4dDsKKwkgIGdldF9hbGxvY2F0b3IoKS5kZXN0cm95KCZfX3RtcC0+X01fZGF0YSk7CisJICBfTV9wdXRfbm9kZShfX3RtcCk7CisJfQorICAgICAgX19iZWZvcmVfZmlyc3QtPl9NX25leHQgPSBfX2xhc3Rfbm9kZTsKKyAgICAgIHJldHVybiBfX2xhc3Rfbm9kZTsKKyAgICB9CisKKyAgLyoqCisgICAqICBUaGlzIGlzIGFuIFNHSSBleHRlbnNpb24uCisgICAqICBAaW5ncm91cCBTR0lleHRlbnNpb25zCisgICAqICBAZG9jdG9kbworICAgKi8KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIHNsaXN0IDogcHJpdmF0ZSBfU2xpc3RfYmFzZTxfVHAsX0FsbG9jPgorICAgIHsKKyAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1lbnRzCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX1RwLCBfU0dJQXNzaWduYWJsZUNvbmNlcHQpCisJCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX1NsaXN0X2Jhc2U8X1RwLF9BbGxvYz4gX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHB0cmRpZmZfdCAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIAorICAgICAgdHlwZWRlZiBfU2xpc3RfaXRlcmF0b3I8X1RwLCBfVHAmLCBfVHAqPiAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgX1NsaXN0X2l0ZXJhdG9yPF9UcCwgY29uc3QgX1RwJiwgY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOworCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfU2xpc3Rfbm9kZTxfVHA+ICAgICAgX05vZGU7CisgICAgICB0eXBlZGVmIF9TbGlzdF9ub2RlX2Jhc2UgICAgICBfTm9kZV9iYXNlOworICAgICAgdHlwZWRlZiBfU2xpc3RfaXRlcmF0b3JfYmFzZSAgX0l0ZXJhdG9yX2Jhc2U7CisgICAgICAKKyAgICAgIF9Ob2RlKgorICAgICAgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCV9Ob2RlKiBfX25vZGUgPSB0aGlzLT5fTV9nZXRfbm9kZSgpOworCV9fdHJ5CisJICB7CisJICAgIGdldF9hbGxvY2F0b3IoKS5jb25zdHJ1Y3QoJl9fbm9kZS0+X01fZGF0YSwgX194KTsKKwkgICAgX19ub2RlLT5fTV9uZXh0ID0gMDsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgdGhpcy0+X01fcHV0X25vZGUoX19ub2RlKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisJcmV0dXJuIF9fbm9kZTsKKyAgICAgIH0KKworICAgICAgX05vZGUqCisgICAgICBfTV9jcmVhdGVfbm9kZSgpCisgICAgICB7CisJX05vZGUqIF9fbm9kZSA9IHRoaXMtPl9NX2dldF9ub2RlKCk7CisJX190cnkKKwkgIHsKKwkgICAgZ2V0X2FsbG9jYXRvcigpLmNvbnN0cnVjdCgmX19ub2RlLT5fTV9kYXRhLCB2YWx1ZV90eXBlKCkpOworCSAgICBfX25vZGUtPl9NX25leHQgPSAwOworCSAgfQorCV9fY2F0Y2goLi4uKQorCSAgeworCSAgICB0aGlzLT5fTV9wdXRfbm9kZShfX25vZGUpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKwlyZXR1cm4gX19ub2RlOworICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIHNsaXN0KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpIHt9CisKKyAgICAgIHNsaXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCwKKwkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9ICBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2EpCisgICAgICB7IF9NX2luc2VydF9hZnRlcl9maWxsKCZ0aGlzLT5fTV9oZWFkLCBfX24sIF9feCk7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIHNsaXN0KHNpemVfdHlwZSBfX24pCisgICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCisgICAgICB7IF9NX2luc2VydF9hZnRlcl9maWxsKCZ0aGlzLT5fTV9oZWFkLCBfX24sIHZhbHVlX3R5cGUoKSk7IH0KKworICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbnkgZGlzcGF0Y2hpbmcgdHJpY2tzIGhlcmUsIGJlY2F1c2UKKyAgICAgIC8vIF9NX2luc2VydF9hZnRlcl9yYW5nZSBhbHJlYWR5IGRvZXMgdGhlbS4KKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgc2xpc3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSAgYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fYSkKKyAgICAgICAgeyBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UoJnRoaXMtPl9NX2hlYWQsIF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgc2xpc3QoY29uc3Qgc2xpc3QmIF9feCkKKyAgICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkKKyAgICAgIHsgX01faW5zZXJ0X2FmdGVyX3JhbmdlKCZ0aGlzLT5fTV9oZWFkLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsgfQorCisgICAgICBzbGlzdCYKKyAgICAgIG9wZXJhdG9yPSAoY29uc3Qgc2xpc3QmIF9feCk7CisKKyAgICAgIH5zbGlzdCgpIHt9CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBhc3NpZ24oKSwgYSBnZW5lcmFsaXplZCBhc3NpZ25tZW50IG1lbWJlciBmdW5jdGlvbi4gIFR3bworICAgICAgLy8gdmVyc2lvbnM6IG9uZSB0aGF0IHRha2VzIGEgY291bnQsIGFuZCBvbmUgdGhhdCB0YWtlcyBhIHJhbmdlLgorICAgICAgLy8gVGhlIHJhbmdlIHZlcnNpb24gaXMgYSBtZW1iZXIgdGVtcGxhdGUsIHNvIHdlIGRpc3BhdGNoIG9uIHdoZXRoZXIKKyAgICAgIC8vIG9yIG5vdCB0aGUgdHlwZSBpcyBhbiBpbnRlZ2VyLgorICAgICAgCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICAgIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKKyAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJCSBfX2ZhbHNlX3R5cGUpOworCisgICAgcHVibGljOgorCisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKil0aGlzLT5fTV9oZWFkLl9NX25leHQpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigoX05vZGUqKXRoaXMtPl9NX2hlYWQuX01fbmV4dCk7fQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKDApOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoMCk7IH0KKworICAgICAgLy8gRXhwZXJpbWVudGFsIG5ldyBmZWF0dXJlOiBiZWZvcmVfYmVnaW4oKSByZXR1cm5zIGEKKyAgICAgIC8vIG5vbi1kZXJlZmVyZW5jZWFibGUgaXRlcmF0b3IgdGhhdCwgd2hlbiBpbmNyZW1lbnRlZCwgeWllbGRzCisgICAgICAvLyBiZWdpbigpLiAgVGhpcyBpdGVyYXRvciBtYXkgYmUgdXNlZCBhcyB0aGUgYXJndW1lbnQgdG8KKyAgICAgIC8vIGluc2VydF9hZnRlciwgZXJhc2VfYWZ0ZXIsIGV0Yy4gIE5vdGUgdGhhdCBldmVuIGZvciBhbiBlbXB0eQorICAgICAgLy8gc2xpc3QsIGJlZm9yZV9iZWdpbigpIGlzIG5vdCB0aGUgc2FtZSBpdGVyYXRvciBhcyBlbmQoKS4gIEl0CisgICAgICAvLyBpcyBhbHdheXMgbmVjZXNzYXJ5IHRvIGluY3JlbWVudCBiZWZvcmVfYmVnaW4oKSBhdCBsZWFzdCBvbmNlIHRvCisgICAgICAvLyBvYnRhaW4gZW5kKCkuCisgICAgICBpdGVyYXRvcgorICAgICAgYmVmb3JlX2JlZ2luKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKChfTm9kZSopICZ0aGlzLT5fTV9oZWFkKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVmb3JlX2JlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKChfTm9kZSopICZ0aGlzLT5fTV9oZWFkKTsgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIHNpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX19zbGlzdF9zaXplKHRoaXMtPl9NX2hlYWQuX01fbmV4dCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9PSAwOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAoc2xpc3QmIF9feCkKKyAgICAgIHsgc3RkOjpzd2FwKHRoaXMtPl9NX2hlYWQuX01fbmV4dCwgX194Ll9NX2hlYWQuX01fbmV4dCk7IH0KKworICAgIHB1YmxpYzoKKworICAgICAgcmVmZXJlbmNlCisgICAgICBmcm9udCgpCisgICAgICB7IHJldHVybiAoKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0KS0+X01fZGF0YTsgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICgoX05vZGUqKSB0aGlzLT5fTV9oZWFkLl9NX25leHQpLT5fTV9kYXRhOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyBfX3NsaXN0X21ha2VfbGluaygmdGhpcy0+X01faGVhZCwgX01fY3JlYXRlX25vZGUoX194KSk7IH0KKworICAgICAgdm9pZAorICAgICAgcHVzaF9mcm9udCgpCisgICAgICB7IF9fc2xpc3RfbWFrZV9saW5rKCZ0aGlzLT5fTV9oZWFkLCBfTV9jcmVhdGVfbm9kZSgpKTsgfQorCisgICAgICB2b2lkCisgICAgICBwb3BfZnJvbnQoKQorICAgICAgeworCV9Ob2RlKiBfX25vZGUgPSAoX05vZGUqKSB0aGlzLT5fTV9oZWFkLl9NX25leHQ7CisJdGhpcy0+X01faGVhZC5fTV9uZXh0ID0gX19ub2RlLT5fTV9uZXh0OworCWdldF9hbGxvY2F0b3IoKS5kZXN0cm95KCZfX25vZGUtPl9NX2RhdGEpOworCXRoaXMtPl9NX3B1dF9ub2RlKF9fbm9kZSk7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBwcmV2aW91cyhjb25zdF9pdGVyYXRvciBfX3BvcykKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKChfTm9kZSopIF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsCisJCQkJCQkgIF9fcG9zLl9NX25vZGUpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgcHJldmlvdXMoY29uc3RfaXRlcmF0b3IgX19wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcigoX05vZGUqKSBfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLAorCQkJCQkJCV9fcG9zLl9NX25vZGUpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9Ob2RlKgorICAgICAgX01faW5zZXJ0X2FmdGVyKF9Ob2RlX2Jhc2UqIF9fcG9zLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiAoX05vZGUqKSAoX19zbGlzdF9tYWtlX2xpbmsoX19wb3MsIF9NX2NyZWF0ZV9ub2RlKF9feCkpKTsgfQorCisgICAgICBfTm9kZSoKKyAgICAgIF9NX2luc2VydF9hZnRlcihfTm9kZV9iYXNlKiBfX3BvcykKKyAgICAgIHsgcmV0dXJuIChfTm9kZSopIChfX3NsaXN0X21ha2VfbGluayhfX3BvcywgX01fY3JlYXRlX25vZGUoKSkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luc2VydF9hZnRlcl9maWxsKF9Ob2RlX2Jhc2UqIF9fcG9zLAorCQkJICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeworCWZvciAoc2l6ZV90eXBlIF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJICBfX3BvcyA9IF9fc2xpc3RfbWFrZV9saW5rKF9fcG9zLCBfTV9jcmVhdGVfbm9kZShfX3gpKTsKKyAgICAgIH0KKworICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCdzIGFuIGludGVncmFsIHR5cGUuICBJZiBzbywgaXQncyBub3QgYW4gaXRlcmF0b3IuCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9Ob2RlX2Jhc2UqIF9fcG9zLAorCQkJICAgICAgX0luSXRlcmF0b3IgX19maXJzdCwgX0luSXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9Jbkl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIF9NX2luc2VydF9hZnRlcl9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CisJfQorCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9Ob2RlX2Jhc2UqIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKKwkJCSAgICAgIF9fdHJ1ZV90eXBlKQorICAgICAgICB7IF9NX2luc2VydF9hZnRlcl9maWxsKF9fcG9zLCBfX24sIF9feCk7IH0KKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIF9NX2luc2VydF9hZnRlcl9yYW5nZShfTm9kZV9iYXNlKiBfX3BvcywKKwkJCSAgICAgIF9Jbkl0ZXJhdG9yIF9fZmlyc3QsIF9Jbkl0ZXJhdG9yIF9fbGFzdCwKKwkJCSAgICAgIF9fZmFsc2VfdHlwZSkKKyAgICAgICAgeworCSAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgICB7CisJICAgICAgX19wb3MgPSBfX3NsaXN0X21ha2VfbGluayhfX3BvcywgX01fY3JlYXRlX25vZGUoKl9fZmlyc3QpKTsKKwkgICAgICArK19fZmlyc3Q7CisJICAgIH0KKwl9CisKKyAgICBwdWJsaWM6CisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0X2FmdGVyKGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfTV9pbnNlcnRfYWZ0ZXIoX19wb3MuX01fbm9kZSwgX194KSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydF9hZnRlcihpdGVyYXRvciBfX3BvcykKKyAgICAgIHsgcmV0dXJuIGluc2VydF9hZnRlcihfX3BvcywgdmFsdWVfdHlwZSgpKTsgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnRfYWZ0ZXIoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgX01faW5zZXJ0X2FmdGVyX2ZpbGwoX19wb3MuX01fbm9kZSwgX19uLCBfX3gpOyB9CisKKyAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW55IGRpc3BhdGNoaW5nIHRyaWNrcyBoZXJlLCBiZWNhdXNlCisgICAgICAvLyBfTV9pbnNlcnRfYWZ0ZXJfcmFuZ2UgYWxyZWFkeSBkb2VzIHRoZW0uCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0X2FmdGVyKGl0ZXJhdG9yIF9fcG9zLCBfSW5JdGVyYXRvciBfX2ZpcnN0LCBfSW5JdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9fcG9zLl9NX25vZGUsIF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX01faW5zZXJ0X2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsCisJCQkJCQkJIF9fcG9zLl9NX25vZGUpLAorCQkJCQlfX3gpKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX01faW5zZXJ0X2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsCisJCQkJCQkJIF9fcG9zLl9NX25vZGUpLAorCQkJCQl2YWx1ZV90eXBlKCkpKTsgfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgX01faW5zZXJ0X2FmdGVyX2ZpbGwoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9kZSksCisJCQkgICAgIF9fbiwgX194KTsgfQorCisgICAgICAvLyBXZSBkb24ndCBuZWVkIGFueSBkaXNwYXRjaGluZyB0cmlja3MgaGVyZSwgYmVjYXVzZQorICAgICAgLy8gX01faW5zZXJ0X2FmdGVyX3JhbmdlIGFscmVhZHkgZG9lcyB0aGVtLgorICAgICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXJhdG9yPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgX0luSXRlcmF0b3IgX19maXJzdCwgX0luSXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7IF9NX2luc2VydF9hZnRlcl9yYW5nZShfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLCBfX3Bvcy5fTV9ub2RlKSwKKwkJCQlfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyAgICBwdWJsaWM6CisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2VfYWZ0ZXIoaXRlcmF0b3IgX19wb3MpCisgICAgICB7IHJldHVybiBpdGVyYXRvcigoX05vZGUqKSB0aGlzLT5fTV9lcmFzZV9hZnRlcihfX3Bvcy5fTV9ub2RlKSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlX2FmdGVyKGl0ZXJhdG9yIF9fYmVmb3JlX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IAorCXJldHVybiBpdGVyYXRvcigoX05vZGUqKSB0aGlzLT5fTV9lcmFzZV9hZnRlcihfX2JlZm9yZV9maXJzdC5fTV9ub2RlLAorCQkJCQkJICAgICAgX19sYXN0Ll9NX25vZGUpKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zKQorICAgICAgeyAKKwlyZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgdGhpcy0+X01fZXJhc2VfYWZ0ZXIKKwkJCShfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLCBfX3Bvcy5fTV9ub2RlKSkpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyAKKwlyZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgdGhpcy0+X01fZXJhc2VfYWZ0ZXIKKwkJCShfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLCBfX2ZpcnN0Ll9NX25vZGUpLAorCQkJIF9fbGFzdC5fTV9ub2RlKSk7CisgICAgICB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsKKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBuZXdfc2l6ZSkKKyAgICAgIHsgcmVzaXplKG5ld19zaXplLCBfVHAoKSk7IH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeyB0aGlzLT5fTV9lcmFzZV9hZnRlcigmdGhpcy0+X01faGVhZCwgMCk7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIC8vIE1vdmVzIHRoZSByYW5nZSBbX19iZWZvcmVfZmlyc3QgKyAxLCBfX2JlZm9yZV9sYXN0ICsgMSkgdG8gKnRoaXMsCisgICAgICAvLyAgaW5zZXJ0aW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIF9fcG9zLiAgVGhpcyBpcyBjb25zdGFudCB0aW1lLgorICAgICAgdm9pZAorICAgICAgc3BsaWNlX2FmdGVyKGl0ZXJhdG9yIF9fcG9zLAorCQkgICBpdGVyYXRvciBfX2JlZm9yZV9maXJzdCwgaXRlcmF0b3IgX19iZWZvcmVfbGFzdCkKKyAgICAgIHsKKwlpZiAoX19iZWZvcmVfZmlyc3QgIT0gX19iZWZvcmVfbGFzdCkKKwkgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fcG9zLl9NX25vZGUsIF9fYmVmb3JlX2ZpcnN0Ll9NX25vZGUsCisJCQkgICAgICAgX19iZWZvcmVfbGFzdC5fTV9ub2RlKTsKKyAgICAgIH0KKworICAgICAgLy8gTW92ZXMgdGhlIGVsZW1lbnQgdGhhdCBmb2xsb3dzIF9fcHJldiB0byAqdGhpcywgaW5zZXJ0aW5nIGl0CisgICAgICAvLyBpbW1lZGlhdGVseSBhZnRlciBfX3Bvcy4gIFRoaXMgaXMgY29uc3RhbnQgdGltZS4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZV9hZnRlcihpdGVyYXRvciBfX3BvcywgaXRlcmF0b3IgX19wcmV2KQorICAgICAgeyBfX3NsaXN0X3NwbGljZV9hZnRlcihfX3Bvcy5fTV9ub2RlLAorCQkJICAgICBfX3ByZXYuX01fbm9kZSwgX19wcmV2Ll9NX25vZGUtPl9NX25leHQpOyB9CisKKyAgICAgIC8vIFJlbW92ZXMgYWxsIG9mIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBsaXN0IF9feCB0byAqdGhpcywgaW5zZXJ0aW5nCisgICAgICAvLyB0aGVtIGltbWVkaWF0ZWx5IGFmdGVyIF9fcG9zLiAgX194IG11c3Qgbm90IGJlICp0aGlzLiAgQ29tcGxleGl0eToKKyAgICAgIC8vIGxpbmVhciBpbiBfX3guc2l6ZSgpLgorICAgICAgdm9pZAorICAgICAgc3BsaWNlX2FmdGVyKGl0ZXJhdG9yIF9fcG9zLCBzbGlzdCYgX194KQorICAgICAgeyBfX3NsaXN0X3NwbGljZV9hZnRlcihfX3Bvcy5fTV9ub2RlLCAmX194Ll9NX2hlYWQpOyB9CisKKyAgICAgIC8vIExpbmVhciBpbiBkaXN0YW5jZShiZWdpbigpLCBfX3BvcyksIGFuZCBsaW5lYXIgaW4gX194LnNpemUoKS4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvcywgc2xpc3QmIF9feCkKKyAgICAgIHsKKwlpZiAoX194Ll9NX2hlYWQuX01fbmV4dCkKKwkgIF9fc2xpc3Rfc3BsaWNlX2FmdGVyKF9fc2xpc3RfcHJldmlvdXMoJnRoaXMtPl9NX2hlYWQsIF9fcG9zLl9NX25vZGUpLAorCQkJICAgICAgICZfX3guX01faGVhZCwKKwkJCSAgICAgICBfX3NsaXN0X3ByZXZpb3VzKCZfX3guX01faGVhZCwgMCkpOyB9CisKKyAgICAgIC8vIExpbmVhciBpbiBkaXN0YW5jZShiZWdpbigpLCBfX3BvcyksIGFuZCBpbiBkaXN0YW5jZShfX3guYmVnaW4oKSwgX19pKS4KKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvcywgc2xpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorICAgICAgeyBfX3NsaXN0X3NwbGljZV9hZnRlcihfX3NsaXN0X3ByZXZpb3VzKCZ0aGlzLT5fTV9oZWFkLCBfX3Bvcy5fTV9ub2RlKSwKKwkJCSAgICAgX19zbGlzdF9wcmV2aW91cygmX194Ll9NX2hlYWQsIF9faS5fTV9ub2RlKSwKKwkJCSAgICAgX19pLl9NX25vZGUpOyB9CisKKyAgICAgIC8vIExpbmVhciBpbiBkaXN0YW5jZShiZWdpbigpLCBfX3BvcyksIGluIGRpc3RhbmNlKF9feC5iZWdpbigpLCBfX2ZpcnN0KSwKKyAgICAgIC8vIGFuZCBpbiBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpLgorICAgICAgdm9pZAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zLCBzbGlzdCYgX194LCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoX19zbGlzdF9wcmV2aW91cygmdGhpcy0+X01faGVhZCwgX19wb3MuX01fbm9kZSksCisJCQkgICAgICAgX19zbGlzdF9wcmV2aW91cygmX194Ll9NX2hlYWQsIF9fZmlyc3QuX01fbm9kZSksCisJCQkgICAgICAgX19zbGlzdF9wcmV2aW91cyhfX2ZpcnN0Ll9NX25vZGUsCisJCQkJCQlfX2xhc3QuX01fbm9kZSkpOworICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgdm9pZAorICAgICAgcmV2ZXJzZSgpCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2hlYWQuX01fbmV4dCkKKwkgIHRoaXMtPl9NX2hlYWQuX01fbmV4dCA9IF9fc2xpc3RfcmV2ZXJzZSh0aGlzLT5fTV9oZWFkLl9NX25leHQpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbCk7CisKKyAgICAgIHZvaWQKKyAgICAgIHVuaXF1ZSgpOworICAgICAgCisgICAgICB2b2lkCisgICAgICBtZXJnZShzbGlzdCYgX194KTsKKyAgICAgIAorICAgICAgdm9pZAorICAgICAgc29ydCgpOworCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KKyAgICAgICAgdm9pZAorICAgICAgICByZW1vdmVfaWYoX1ByZWRpY2F0ZSBfX3ByZWQpOworCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICAgICAgdm9pZAorICAgICAgICB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX3ByZWQpOworCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KKyAgICAgICAgdm9pZAorICAgICAgICBtZXJnZShzbGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOworCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KKyAgICAgICAgdm9pZAorICAgICAgICBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKTsKKyAgICB9OworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBzbGlzdDxfVHAsIF9BbGxvYz4mCisgICAgc2xpc3Q8X1RwLCBfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3Qgc2xpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpCisgICAgeworICAgICAgaWYgKCZfX3ggIT0gdGhpcykKKwl7CisJICBfTm9kZV9iYXNlKiBfX3AxID0gJnRoaXMtPl9NX2hlYWQ7CisJICBfTm9kZSogX19uMSA9IChfTm9kZSopIHRoaXMtPl9NX2hlYWQuX01fbmV4dDsKKwkgIGNvbnN0IF9Ob2RlKiBfX24yID0gKGNvbnN0IF9Ob2RlKikgX194Ll9NX2hlYWQuX01fbmV4dDsKKwkgIHdoaWxlIChfX24xICYmIF9fbjIpCisJICAgIHsKKwkgICAgICBfX24xLT5fTV9kYXRhID0gX19uMi0+X01fZGF0YTsKKwkgICAgICBfX3AxID0gX19uMTsKKwkgICAgICBfX24xID0gKF9Ob2RlKikgX19uMS0+X01fbmV4dDsKKwkgICAgICBfX24yID0gKGNvbnN0IF9Ob2RlKikgX19uMi0+X01fbmV4dDsKKwkgICAgfQorCSAgaWYgKF9fbjIgPT0gMCkKKwkgICAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19wMSwgMCk7CisJICBlbHNlCisJICAgIF9NX2luc2VydF9hZnRlcl9yYW5nZShfX3AxLCBjb25zdF9pdGVyYXRvcigoX05vZGUqKV9fbjIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yKDApKTsKKwl9CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgc2xpc3Q8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKQorICAgIHsKKyAgICAgIF9Ob2RlX2Jhc2UqIF9fcHJldiA9ICZ0aGlzLT5fTV9oZWFkOworICAgICAgX05vZGUqIF9fbm9kZSA9IChfTm9kZSopIHRoaXMtPl9NX2hlYWQuX01fbmV4dDsKKyAgICAgIGZvciAoOyBfX25vZGUgIT0gMCAmJiBfX24gPiAwOyAtLV9fbikKKwl7CisJICBfX25vZGUtPl9NX2RhdGEgPSBfX3ZhbDsKKwkgIF9fcHJldiA9IF9fbm9kZTsKKwkgIF9fbm9kZSA9IChfTm9kZSopIF9fbm9kZS0+X01fbmV4dDsKKwl9CisgICAgICBpZiAoX19uID4gMCkKKwlfTV9pbnNlcnRfYWZ0ZXJfZmlsbChfX3ByZXYsIF9fbiwgX192YWwpOworICAgICAgZWxzZQorCXRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fcHJldiwgMCk7CisgICAgfQorICAKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIHNsaXN0PF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCisJCQkJCSAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkJCQkgICAgIF9fZmFsc2VfdHlwZSkKKyAgICAgIHsKKwlfTm9kZV9iYXNlKiBfX3ByZXYgPSAmdGhpcy0+X01faGVhZDsKKwlfTm9kZSogX19ub2RlID0gKF9Ob2RlKikgdGhpcy0+X01faGVhZC5fTV9uZXh0OworCXdoaWxlIChfX25vZGUgIT0gMCAmJiBfX2ZpcnN0ICE9IF9fbGFzdCkKKwkgIHsKKwkgICAgX19ub2RlLT5fTV9kYXRhID0gKl9fZmlyc3Q7CisJICAgIF9fcHJldiA9IF9fbm9kZTsKKwkgICAgX19ub2RlID0gKF9Ob2RlKikgX19ub2RlLT5fTV9uZXh0OworCSAgICArK19fZmlyc3Q7CisJICB9CisJaWYgKF9fZmlyc3QgIT0gX19sYXN0KQorCSAgX01faW5zZXJ0X2FmdGVyX3JhbmdlKF9fcHJldiwgX19maXJzdCwgX19sYXN0KTsKKwllbHNlCisJICB0aGlzLT5fTV9lcmFzZV9hZnRlcihfX3ByZXYsIDApOworICAgICAgfQorICAKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDEsIGNvbnN0IHNsaXN0PF9UcCwgX0FsbG9jPiYgX1NMMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHNsaXN0PF9UcCxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9TTDEuZW5kKCk7CisgICAgICBjb25zdF9pdGVyYXRvciBfX2VuZDIgPSBfU0wyLmVuZCgpOworICAgICAgCisgICAgICBjb25zdF9pdGVyYXRvciBfX2kxID0gX1NMMS5iZWdpbigpOworICAgICAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9TTDIuYmVnaW4oKTsKKyAgICAgIHdoaWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAqX19pMikKKwl7CisJICArK19faTE7CisJICArK19faTI7CisJfQorICAgICAgcmV0dXJuIF9faTEgPT0gX19lbmQxICYmIF9faTIgPT0gX19lbmQyOworICAgIH0KKworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDEsIGNvbnN0IHNsaXN0PF9UcCwgX0FsbG9jPiYgX1NMMikKKyAgICB7IHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9TTDEuYmVnaW4oKSwgX1NMMS5lbmQoKSwKKwkJCQkJICBfU0wyLmJlZ2luKCksIF9TTDIuZW5kKCkpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDEsIGNvbnN0IHNsaXN0PF9UcCwgX0FsbG9jPiYgX1NMMikKKyAgICB7IHJldHVybiAhKF9TTDEgPT0gX1NMMik7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc2xpc3Q8X1RwLCBfQWxsb2M+JiBfU0wxLCBjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDIpCisgICAgeyByZXR1cm4gX1NMMiA8IF9TTDE7IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHNsaXN0PF9UcCwgX0FsbG9jPiYgX1NMMSwgY29uc3Qgc2xpc3Q8X1RwLCBfQWxsb2M+JiBfU0wyKQorICAgIHsgcmV0dXJuICEoX1NMMiA8IF9TTDEpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBzbGlzdDxfVHAsIF9BbGxvYz4mIF9TTDEsIGNvbnN0IHNsaXN0PF9UcCwgX0FsbG9jPiYgX1NMMikKKyAgICB7IHJldHVybiAhKF9TTDEgPCBfU0wyKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoc2xpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIHNsaXN0PF9UcCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgc2xpc3Q8X1RwLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbGVuLCBjb25zdCBfVHAmIF9feCkKKyAgICB7CisgICAgICBfTm9kZV9iYXNlKiBfX2N1ciA9ICZ0aGlzLT5fTV9oZWFkOworICAgICAgd2hpbGUgKF9fY3VyLT5fTV9uZXh0ICE9IDAgJiYgX19sZW4gPiAwKQorCXsKKwkgIC0tX19sZW47CisJICBfX2N1ciA9IF9fY3VyLT5fTV9uZXh0OworCX0KKyAgICAgIGlmIChfX2N1ci0+X01fbmV4dCkKKwl0aGlzLT5fTV9lcmFzZV9hZnRlcihfX2N1ciwgMCk7CisgICAgICBlbHNlCisJX01faW5zZXJ0X2FmdGVyX2ZpbGwoX19jdXIsIF9fbGVuLCBfX3gpOworICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdm9pZAorICAgIHNsaXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9UcCYgX192YWwpCisgICAgeyAKKyAgICAgIF9Ob2RlX2Jhc2UqIF9fY3VyID0gJnRoaXMtPl9NX2hlYWQ7CisgICAgICB3aGlsZSAoX19jdXIgJiYgX19jdXItPl9NX25leHQpCisJeworCSAgaWYgKCgoX05vZGUqKSBfX2N1ci0+X01fbmV4dCktPl9NX2RhdGEgPT0gX192YWwpCisJICAgIHRoaXMtPl9NX2VyYXNlX2FmdGVyKF9fY3VyKTsKKwkgIGVsc2UKKwkgICAgX19jdXIgPSBfX2N1ci0+X01fbmV4dDsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgc2xpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoKQorICAgIHsKKyAgICAgIF9Ob2RlX2Jhc2UqIF9fY3VyID0gdGhpcy0+X01faGVhZC5fTV9uZXh0OworICAgICAgaWYgKF9fY3VyKQorCXsKKwkgIHdoaWxlIChfX2N1ci0+X01fbmV4dCkKKwkgICAgeworCSAgICAgIGlmICgoKF9Ob2RlKilfX2N1ciktPl9NX2RhdGEKKwkJICA9PSAoKF9Ob2RlKikoX19jdXItPl9NX25leHQpKS0+X01fZGF0YSkKKwkJdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19jdXIpOworCSAgICAgIGVsc2UKKwkJX19jdXIgPSBfX2N1ci0+X01fbmV4dDsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIHZvaWQKKyAgICBzbGlzdDxfVHAsIF9BbGxvYz46Om1lcmdlKHNsaXN0PF9UcCwgX0FsbG9jPiYgX194KQorICAgIHsKKyAgICAgIF9Ob2RlX2Jhc2UqIF9fbjEgPSAmdGhpcy0+X01faGVhZDsKKyAgICAgIHdoaWxlIChfX24xLT5fTV9uZXh0ICYmIF9feC5fTV9oZWFkLl9NX25leHQpCisJeworCSAgaWYgKCgoX05vZGUqKSBfX3guX01faGVhZC5fTV9uZXh0KS0+X01fZGF0YQorCSAgICAgIDwgKChfTm9kZSopIF9fbjEtPl9NX25leHQpLT5fTV9kYXRhKQorCSAgICBfX3NsaXN0X3NwbGljZV9hZnRlcihfX24xLCAmX194Ll9NX2hlYWQsIF9feC5fTV9oZWFkLl9NX25leHQpOworCSAgX19uMSA9IF9fbjEtPl9NX25leHQ7CisJfQorICAgICAgaWYgKF9feC5fTV9oZWFkLl9NX25leHQpCisJeworCSAgX19uMS0+X01fbmV4dCA9IF9feC5fTV9oZWFkLl9NX25leHQ7CisJICBfX3guX01faGVhZC5fTV9uZXh0ID0gMDsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB2b2lkCisgICAgc2xpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KCkKKyAgICB7CisgICAgICBpZiAodGhpcy0+X01faGVhZC5fTV9uZXh0ICYmIHRoaXMtPl9NX2hlYWQuX01fbmV4dC0+X01fbmV4dCkKKwl7CisJICBzbGlzdCBfX2NhcnJ5OworCSAgc2xpc3QgX19jb3VudGVyWzY0XTsKKwkgIGludCBfX2ZpbGwgPSAwOworCSAgd2hpbGUgKCFlbXB0eSgpKQorCSAgICB7CisJICAgICAgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoJl9fY2FycnkuX01faGVhZCwKKwkJCQkgICAmdGhpcy0+X01faGVhZCwgdGhpcy0+X01faGVhZC5fTV9uZXh0KTsKKwkgICAgICBpbnQgX19pID0gMDsKKwkgICAgICB3aGlsZSAoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKQorCQl7CisJCSAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSk7CisJCSAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKKwkJICArK19faTsKKwkJfQorCSAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CisJICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpCisJCSsrX19maWxsOworCSAgICB9CisJICAKKwkgIGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9fZmlsbDsgKytfX2kpCisJICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0pOworCSAgdGhpcy0+c3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KKyAgICAgIHZvaWQgc2xpc3Q8X1RwLCBfQWxsb2M+OjpyZW1vdmVfaWYoX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgICB7CisJX05vZGVfYmFzZSogX19jdXIgPSAmdGhpcy0+X01faGVhZDsKKwl3aGlsZSAoX19jdXItPl9NX25leHQpCisJICB7CisJICAgIGlmIChfX3ByZWQoKChfTm9kZSopIF9fY3VyLT5fTV9uZXh0KS0+X01fZGF0YSkpCisJICAgICAgdGhpcy0+X01fZXJhc2VfYWZ0ZXIoX19jdXIpOworCSAgICBlbHNlCisJICAgICAgX19jdXIgPSBfX2N1ci0+X01fbmV4dDsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgICB2b2lkCisgICAgICBzbGlzdDxfVHAsIF9BbGxvYz46OnVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fcHJlZCkKKyAgICAgIHsKKwlfTm9kZSogX19jdXIgPSAoX05vZGUqKSB0aGlzLT5fTV9oZWFkLl9NX25leHQ7CisJaWYgKF9fY3VyKQorCSAgeworCSAgICB3aGlsZSAoX19jdXItPl9NX25leHQpCisJICAgICAgeworCQlpZiAoX19wcmVkKCgoX05vZGUqKV9fY3VyKS0+X01fZGF0YSwKKwkJCSAgICgoX05vZGUqKShfX2N1ci0+X01fbmV4dCkpLT5fTV9kYXRhKSkKKwkJICB0aGlzLT5fTV9lcmFzZV9hZnRlcihfX2N1cik7CisJCWVsc2UKKwkJICBfX2N1ciA9IChfTm9kZSopIF9fY3VyLT5fTV9uZXh0OworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICB2b2lkCisgICAgICBzbGlzdDxfVHAsIF9BbGxvYz46Om1lcmdlKHNsaXN0PF9UcCwgX0FsbG9jPiYgX194LAorCQkJICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQorICAgICAgeworCV9Ob2RlX2Jhc2UqIF9fbjEgPSAmdGhpcy0+X01faGVhZDsKKwl3aGlsZSAoX19uMS0+X01fbmV4dCAmJiBfX3guX01faGVhZC5fTV9uZXh0KQorCSAgeworCSAgICBpZiAoX19jb21wKCgoX05vZGUqKSBfX3guX01faGVhZC5fTV9uZXh0KS0+X01fZGF0YSwKKwkJICAgICAgICgoX05vZGUqKSBfX24xLT5fTV9uZXh0KS0+X01fZGF0YSkpCisJICAgICAgX19zbGlzdF9zcGxpY2VfYWZ0ZXIoX19uMSwgJl9feC5fTV9oZWFkLCBfX3guX01faGVhZC5fTV9uZXh0KTsKKwkgICAgX19uMSA9IF9fbjEtPl9NX25leHQ7CisJICB9CisJaWYgKF9feC5fTV9oZWFkLl9NX25leHQpCisJICB7CisJICAgIF9fbjEtPl9NX25leHQgPSBfX3guX01faGVhZC5fTV9uZXh0OworCSAgICBfX3guX01faGVhZC5fTV9uZXh0ID0gMDsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CisgICAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgICB2b2lkCisgICAgICBzbGlzdDxfVHAsIF9BbGxvYz46OnNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCisgICAgICB7CisJaWYgKHRoaXMtPl9NX2hlYWQuX01fbmV4dCAmJiB0aGlzLT5fTV9oZWFkLl9NX25leHQtPl9NX25leHQpCisJICB7CisJICAgIHNsaXN0IF9fY2Fycnk7CisJICAgIHNsaXN0IF9fY291bnRlcls2NF07CisJICAgIGludCBfX2ZpbGwgPSAwOworCSAgICB3aGlsZSAoIWVtcHR5KCkpCisJICAgICAgeworCQlfX3NsaXN0X3NwbGljZV9hZnRlcigmX19jYXJyeS5fTV9oZWFkLAorCQkJCSAgICAgJnRoaXMtPl9NX2hlYWQsIHRoaXMtPl9NX2hlYWQuX01fbmV4dCk7CisJCWludCBfX2kgPSAwOworCQl3aGlsZSAoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKQorCQkgIHsKKwkJICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29tcCk7CisJCSAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOworCQkgICAgKytfX2k7CisJCSAgfQorCQlfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOworCQlpZiAoX19pID09IF9fZmlsbCkKKwkJICArK19fZmlsbDsKKwkgICAgICB9CisKKwkgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKKwkgICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdLCBfX2NvbXApOworCSAgICB0aGlzLT5zd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOworCSAgfQorICAgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBTcGVjaWFsaXphdGlvbiBvZiBpbnNlcnRfaXRlcmF0b3Igc28gdGhhdCBpbnNlcnRpb25zIHdpbGwgYmUgY29uc3RhbnQKKyAgLy8gdGltZSByYXRoZXIgdGhhbiBsaW5lYXIgdGltZS4KKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgorICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcjxfX2dudV9jeHg6OnNsaXN0PF9UcCwgX0FsbG9jPiA+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpzbGlzdDxfVHAsIF9BbGxvYz4gX0NvbnRhaW5lcjsKKyAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKKyAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CisgICAgICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisKKyAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKKyAgICAgIDogY29udGFpbmVyKCZfX3gpCisgICAgICB7CisJaWYgKF9faSA9PSBfX3guYmVnaW4oKSkKKwkgIGl0ZXIgPSBfX3guYmVmb3JlX2JlZ2luKCk7CisJZWxzZQorCSAgaXRlciA9IF9feC5wcmV2aW91cyhfX2kpOworICAgICAgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkKKyAgICAgIHsKKwlpdGVyID0gY29udGFpbmVyLT5pbnNlcnRfYWZ0ZXIoaXRlciwgX192YWx1ZSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvciooKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3Nzb19zdHJpbmdfYmFzZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvc3NvX3N0cmluZ19iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiNDMwMgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3Nzb19zdHJpbmdfYmFzZS5oCkBAIC0wLDAgKzEsNTc2IEBACisvLyBTaG9ydC1zdHJpbmctb3B0aW1pemVkIHZlcnNhdGlsZSBzdHJpbmcgYmFzZSAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3Nzb19zdHJpbmdfYmFzZS5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7ZXh0L3ZzdHJpbmcuaH0KKyAqLworCisjaWZuZGVmIF9TU09fU1RSSU5HX0JBU0VfSAorI2RlZmluZSBfU1NPX1NUUklOR19CQVNFX0ggMQorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX19zc29fc3RyaW5nX2Jhc2UKKyAgICA6IHByb3RlY3RlZCBfX3ZzdHJpbmdfdXRpbGl0eTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCQkgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZQkJICAgIHZhbHVlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX192c3RyaW5nX3V0aWxpdHk8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ICAgIF9VdGlsX0Jhc2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9VdGlsX0Jhc2U6Ol9DaGFyVF9hbGxvY190eXBlICAgICAgICBfQ2hhclRfYWxsb2NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnNpemVfdHlwZQkgICAgc2l6ZV90eXBlOworICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIERhdGEgTWVtYmVyczoKKyAgICAgIHR5cGVuYW1lIF9VdGlsX0Jhc2U6OnRlbXBsYXRlIF9BbGxvY19oaWRlcjxfQ2hhclRfYWxsb2NfdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGFwbHVzOworICAgICAgc2l6ZV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fc3RyaW5nX2xlbmd0aDsKKworICAgICAgZW51bSB7IF9TX2xvY2FsX2NhcGFjaXR5ID0gMTUgfTsKKyAgICAgIAorICAgICAgdW5pb24KKyAgICAgIHsKKwlfQ2hhclQgICAgICAgICAgIF9NX2xvY2FsX2RhdGFbX1NfbG9jYWxfY2FwYWNpdHkgKyAxXTsKKwlzaXplX3R5cGUgICAgICAgIF9NX2FsbG9jYXRlZF9jYXBhY2l0eTsKKyAgICAgIH07CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApCisgICAgICB7IF9NX2RhdGFwbHVzLl9NX3AgPSBfX3A7IH0KKworICAgICAgdm9pZAorICAgICAgX01fbGVuZ3RoKHNpemVfdHlwZSBfX2xlbmd0aCkKKyAgICAgIHsgX01fc3RyaW5nX2xlbmd0aCA9IF9fbGVuZ3RoOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NhcGFjaXR5KHNpemVfdHlwZSBfX2NhcGFjaXR5KQorICAgICAgeyBfTV9hbGxvY2F0ZWRfY2FwYWNpdHkgPSBfX2NhcGFjaXR5OyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX2xvY2FsKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKSA9PSBfTV9sb2NhbF9kYXRhOyB9CisKKyAgICAgIC8vIENyZWF0ZSAmIERlc3Ryb3kKKyAgICAgIF9DaGFyVCoKKyAgICAgIF9NX2NyZWF0ZShzaXplX3R5cGUmLCBzaXplX3R5cGUpOworICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9kaXNwb3NlKCkKKyAgICAgIHsKKwlpZiAoIV9NX2lzX2xvY2FsKCkpCisJICBfTV9kZXN0cm95KF9NX2FsbG9jYXRlZF9jYXBhY2l0eSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2Rlc3Ryb3koc2l6ZV90eXBlIF9fc2l6ZSkgdGhyb3coKQorICAgICAgeyBfTV9nZXRfYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShfTV9kYXRhKCksIF9fc2l6ZSArIDEpOyB9CisKKyAgICAgIC8vIF9NX2NvbnN0cnVjdF9hdXggaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIDIxLjMuMSBwYXJhIDE1IHdoaWNoCisgICAgICAvLyByZXF1aXJlcyBzcGVjaWFsIGJlaGF2aW91ciBpZiBfSW5JdGVyYXRvciBpcyBhbiBpbnRlZ3JhbCB0eXBlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwgCisJCQkgc3RkOjpfX2ZhbHNlX3R5cGUpCisJeworICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKKyAgICAgICAgICBfTV9jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfVGFnKCkpOworCX0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNDM4LiBBbWJpZ3VpdHkgaW4gdGhlICJkbyB0aGUgcmlnaHQgdGhpbmciIGNsYXVzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fY29uc3RydWN0X2F1eChfSW50ZWdlciBfX2JlZywgX0ludGVnZXIgX19lbmQsIHN0ZDo6X190cnVlX3R5cGUpCisJeyBfTV9jb25zdHJ1Y3RfYXV4XzIoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksIF9fZW5kKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jb25zdHJ1Y3RfYXV4XzIoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jKQorICAgICAgeyBfTV9jb25zdHJ1Y3QoX19yZXEsIF9fYyk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCkKKwl7CisJICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X19pc19pbnRlZ2VyPF9Jbkl0ZXJhdG9yPjo6X190eXBlIF9JbnRlZ3JhbDsKKwkgIF9NX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfSW50ZWdyYWwoKSk7CisgICAgICAgIH0KKworICAgICAgLy8gRm9yIElucHV0IEl0ZXJhdG9ycywgdXNlZCBpbiBpc3RyZWFtYnVmX2l0ZXJhdG9ycywgZXRjLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcmF0b3I+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fY29uc3RydWN0KF9Jbkl0ZXJhdG9yIF9fYmVnLCBfSW5JdGVyYXRvciBfX2VuZCwKKwkJICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZyk7CisgICAgICAKKyAgICAgIC8vIEZvciBmb3J3YXJkX2l0ZXJhdG9ycyB1cCB0byByYW5kb21fYWNjZXNzX2l0ZXJhdG9ycywgdXNlZCBmb3IKKyAgICAgIC8vIHN0cmluZzo6aXRlcmF0b3IsIF9DaGFyVCosIGV0Yy4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RJdGVyYXRvcj4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV9jb25zdHJ1Y3QoX0Z3ZEl0ZXJhdG9yIF9fYmVnLCBfRndkSXRlcmF0b3IgX19lbmQsCisJCSAgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MpOworCisgICAgcHVibGljOgorICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9tYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiAoX01fZ2V0X2FsbG9jYXRvcigpLm1heF9zaXplKCkgLSAxKSAvIDI7IH0KKworICAgICAgX0NoYXJUKgorICAgICAgX01fZGF0YSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgX01fbGVuZ3RoKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ19sZW5ndGg7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9jYXBhY2l0eSgpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9NX2lzX2xvY2FsKCkgPyBzaXplX3R5cGUoX1NfbG9jYWxfY2FwYWNpdHkpCisJICAgICAgICAgICAgICAgICAgICAgOiBfTV9hbGxvY2F0ZWRfY2FwYWNpdHk7IAorICAgICAgfQorCisgICAgICBib29sCisgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAorICAgICAgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc2V0X2xlYWtlZCgpIHsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9sZWFrKCkgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3NldF9sZW5ndGgoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlfTV9sZW5ndGgoX19uKTsKKwl0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfQ2hhclQoKSk7CisgICAgICB9CisKKyAgICAgIF9fc3NvX3N0cmluZ19iYXNlKCkKKyAgICAgIDogX01fZGF0YXBsdXMoX01fbG9jYWxfZGF0YSkKKyAgICAgIHsgX01fc2V0X2xlbmd0aCgwKTsgfQorCisgICAgICBfX3Nzb19zdHJpbmdfYmFzZShjb25zdCBfQWxsb2MmIF9fYSk7CisKKyAgICAgIF9fc3NvX3N0cmluZ19iYXNlKGNvbnN0IF9fc3NvX3N0cmluZ19iYXNlJiBfX3Jjcyk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBfX3Nzb19zdHJpbmdfYmFzZShfX3Nzb19zdHJpbmdfYmFzZSYmIF9fcmNzKTsKKyNlbmRpZgorCisgICAgICBfX3Nzb19zdHJpbmdfYmFzZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBfX3Nzb19zdHJpbmdfYmFzZShfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCisJCQkgIGNvbnN0IF9BbGxvYyYgX19hKTsKKworICAgICAgfl9fc3NvX3N0cmluZ19iYXNlKCkKKyAgICAgIHsgX01fZGlzcG9zZSgpOyB9CisKKyAgICAgIF9DaGFyVF9hbGxvY190eXBlJgorICAgICAgX01fZ2V0X2FsbG9jYXRvcigpCisgICAgICB7IHJldHVybiBfTV9kYXRhcGx1czsgfQorCisgICAgICBjb25zdCBfQ2hhclRfYWxsb2NfdHlwZSYKKyAgICAgIF9NX2dldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3dhcChfX3Nzb19zdHJpbmdfYmFzZSYgX19yY3MpOworCisgICAgICB2b2lkCisgICAgICBfTV9hc3NpZ24oY29uc3QgX19zc29fc3RyaW5nX2Jhc2UmIF9fcmNzKTsKKworICAgICAgdm9pZAorICAgICAgX01fcmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpOworCisgICAgICB2b2lkCisgICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkJc2l6ZV90eXBlIF9fbGVuMik7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2VyYXNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NsZWFyKCkKKyAgICAgIHsgX01fc2V0X2xlbmd0aCgwKTsgfQorCisgICAgICBib29sCisgICAgICBfTV9jb21wYXJlKGNvbnN0IF9fc3NvX3N0cmluZ19iYXNlJikgY29uc3QKKyAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX19zc29fc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9zd2FwKF9fc3NvX3N0cmluZ19iYXNlJiBfX3JjcykKKyAgICB7CisgICAgICBpZiAodGhpcyA9PSAmX19yY3MpCisJcmV0dXJuOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA0MzEuIFN3YXBwaW5nIGNvbnRhaW5lcnMgd2l0aCB1bmVxdWFsIGFsbG9jYXRvcnMuCisgICAgICBzdGQ6Ol9fYWxsb2Nfc3dhcDxfQ2hhclRfYWxsb2NfdHlwZT46Ol9TX2RvX2l0KF9NX2dldF9hbGxvY2F0b3IoKSwKKwkJCQkJCSAgICAgX19yY3MuX01fZ2V0X2FsbG9jYXRvcigpKTsKKworICAgICAgaWYgKF9NX2lzX2xvY2FsKCkpCisJaWYgKF9fcmNzLl9NX2lzX2xvY2FsKCkpCisJICB7CisJICAgIGlmIChfTV9sZW5ndGgoKSAmJiBfX3Jjcy5fTV9sZW5ndGgoKSkKKwkgICAgICB7CisJCV9DaGFyVCBfX3RtcF9kYXRhW19TX2xvY2FsX2NhcGFjaXR5ICsgMV07CisJCXRyYWl0c190eXBlOjpjb3B5KF9fdG1wX2RhdGEsIF9fcmNzLl9NX2xvY2FsX2RhdGEsCisJCQkJICBfU19sb2NhbF9jYXBhY2l0eSArIDEpOworCQl0cmFpdHNfdHlwZTo6Y29weShfX3Jjcy5fTV9sb2NhbF9kYXRhLCBfTV9sb2NhbF9kYXRhLAorCQkJCSAgX1NfbG9jYWxfY2FwYWNpdHkgKyAxKTsKKwkJdHJhaXRzX3R5cGU6OmNvcHkoX01fbG9jYWxfZGF0YSwgX190bXBfZGF0YSwKKwkJCQkgIF9TX2xvY2FsX2NhcGFjaXR5ICsgMSk7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChfX3Jjcy5fTV9sZW5ndGgoKSkKKwkgICAgICB7CisJCXRyYWl0c190eXBlOjpjb3B5KF9NX2xvY2FsX2RhdGEsIF9fcmNzLl9NX2xvY2FsX2RhdGEsCisJCQkJICBfU19sb2NhbF9jYXBhY2l0eSArIDEpOworCQlfTV9sZW5ndGgoX19yY3MuX01fbGVuZ3RoKCkpOworCQlfX3Jjcy5fTV9zZXRfbGVuZ3RoKDApOworCQlyZXR1cm47CisJICAgICAgfQorCSAgICBlbHNlIGlmIChfTV9sZW5ndGgoKSkKKwkgICAgICB7CisJCXRyYWl0c190eXBlOjpjb3B5KF9fcmNzLl9NX2xvY2FsX2RhdGEsIF9NX2xvY2FsX2RhdGEsCisJCQkJICBfU19sb2NhbF9jYXBhY2l0eSArIDEpOworCQlfX3Jjcy5fTV9sZW5ndGgoX01fbGVuZ3RoKCkpOworCQlfTV9zZXRfbGVuZ3RoKDApOworCQlyZXR1cm47CisJICAgICAgfQorCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgY29uc3Qgc2l6ZV90eXBlIF9fdG1wX2NhcGFjaXR5ID0gX19yY3MuX01fYWxsb2NhdGVkX2NhcGFjaXR5OworCSAgICB0cmFpdHNfdHlwZTo6Y29weShfX3Jjcy5fTV9sb2NhbF9kYXRhLCBfTV9sb2NhbF9kYXRhLAorCQkJICAgICAgX1NfbG9jYWxfY2FwYWNpdHkgKyAxKTsKKwkgICAgX01fZGF0YShfX3Jjcy5fTV9kYXRhKCkpOworCSAgICBfX3Jjcy5fTV9kYXRhKF9fcmNzLl9NX2xvY2FsX2RhdGEpOworCSAgICBfTV9jYXBhY2l0eShfX3RtcF9jYXBhY2l0eSk7CisJICB9CisgICAgICBlbHNlCisJeworCSAgY29uc3Qgc2l6ZV90eXBlIF9fdG1wX2NhcGFjaXR5ID0gX01fYWxsb2NhdGVkX2NhcGFjaXR5OworCSAgaWYgKF9fcmNzLl9NX2lzX2xvY2FsKCkpCisJICAgIHsKKwkgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9sb2NhbF9kYXRhLCBfX3Jjcy5fTV9sb2NhbF9kYXRhLAorCQkJCV9TX2xvY2FsX2NhcGFjaXR5ICsgMSk7CisJICAgICAgX19yY3MuX01fZGF0YShfTV9kYXRhKCkpOworCSAgICAgIF9NX2RhdGEoX01fbG9jYWxfZGF0YSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9DaGFyVCogX190bXBfcHRyID0gX01fZGF0YSgpOworCSAgICAgIF9NX2RhdGEoX19yY3MuX01fZGF0YSgpKTsKKwkgICAgICBfX3Jjcy5fTV9kYXRhKF9fdG1wX3B0cik7CisJICAgICAgX01fY2FwYWNpdHkoX19yY3MuX01fYWxsb2NhdGVkX2NhcGFjaXR5KTsKKwkgICAgfQorCSAgX19yY3MuX01fY2FwYWNpdHkoX190bXBfY2FwYWNpdHkpOworCX0KKworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fdG1wX2xlbmd0aCA9IF9NX2xlbmd0aCgpOworICAgICAgX01fbGVuZ3RoKF9fcmNzLl9NX2xlbmd0aCgpKTsKKyAgICAgIF9fcmNzLl9NX2xlbmd0aChfX3RtcF9sZW5ndGgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfQ2hhclQqCisgICAgX19zc29fc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9jcmVhdGUoc2l6ZV90eXBlJiBfX2NhcGFjaXR5LCBzaXplX3R5cGUgX19vbGRfY2FwYWNpdHkpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gODMuICBTdHJpbmc6Om5wb3MgdnMuIHN0cmluZzo6bWF4X3NpemUoKQorICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfTV9tYXhfc2l6ZSgpKQorCXN0ZDo6X190aHJvd19sZW5ndGhfZXJyb3IoX19OKCJfX3Nzb19zdHJpbmdfYmFzZTo6X01fY3JlYXRlIikpOworCisgICAgICAvLyBUaGUgYmVsb3cgaW1wbGVtZW50cyBhbiBleHBvbmVudGlhbCBncm93dGggcG9saWN5LCBuZWNlc3NhcnkgdG8KKyAgICAgIC8vIG1lZXQgYW1vcnRpemVkIGxpbmVhciB0aW1lIHJlcXVpcmVtZW50cyBvZiB0aGUgbGlicmFyeTogc2VlCisgICAgICAvLyBodHRwOi8vZ2NjLmdudS5vcmcvbWwvbGlic3RkYysrLzIwMDEtMDcvbXNnMDAwODUuaHRtbC4KKyAgICAgIGlmIChfX2NhcGFjaXR5ID4gX19vbGRfY2FwYWNpdHkgJiYgX19jYXBhY2l0eSA8IDIgKiBfX29sZF9jYXBhY2l0eSkKKwl7CisJICBfX2NhcGFjaXR5ID0gMiAqIF9fb2xkX2NhcGFjaXR5OworCSAgLy8gTmV2ZXIgYWxsb2NhdGUgYSBzdHJpbmcgYmlnZ2VyIHRoYW4gbWF4X3NpemUuCisJICBpZiAoX19jYXBhY2l0eSA+IF9NX21heF9zaXplKCkpCisJICAgIF9fY2FwYWNpdHkgPSBfTV9tYXhfc2l6ZSgpOworCX0KKworICAgICAgLy8gTkI6IE5lZWQgYW4gYXJyYXkgb2YgY2hhcl90eXBlW19fY2FwYWNpdHldLCBwbHVzIGEgdGVybWluYXRpbmcKKyAgICAgIC8vIG51bGwgY2hhcl90eXBlKCkgZWxlbWVudC4KKyAgICAgIHJldHVybiBfTV9nZXRfYWxsb2NhdG9yKCkuYWxsb2NhdGUoX19jYXBhY2l0eSArIDEpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfX3Nzb19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9fc3NvX3N0cmluZ19iYXNlKGNvbnN0IF9BbGxvYyYgX19hKQorICAgIDogX01fZGF0YXBsdXMoX19hLCBfTV9sb2NhbF9kYXRhKQorICAgIHsgX01fc2V0X2xlbmd0aCgwKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX19zc29fc3RyaW5nX2Jhc2UoY29uc3QgX19zc29fc3RyaW5nX2Jhc2UmIF9fcmNzKQorICAgIDogX01fZGF0YXBsdXMoX19yY3MuX01fZ2V0X2FsbG9jYXRvcigpLCBfTV9sb2NhbF9kYXRhKQorICAgIHsgX01fY29uc3RydWN0KF9fcmNzLl9NX2RhdGEoKSwgX19yY3MuX01fZGF0YSgpICsgX19yY3MuX01fbGVuZ3RoKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX19zc29fc3RyaW5nX2Jhc2UoX19zc29fc3RyaW5nX2Jhc2UmJiBfX3JjcykKKyAgICA6IF9NX2RhdGFwbHVzKF9fcmNzLl9NX2dldF9hbGxvY2F0b3IoKSwgX01fbG9jYWxfZGF0YSkKKyAgICB7CisgICAgICBpZiAoX19yY3MuX01faXNfbG9jYWwoKSkKKwl7CisJICBpZiAoX19yY3MuX01fbGVuZ3RoKCkpCisJICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX2xvY2FsX2RhdGEsIF9fcmNzLl9NX2xvY2FsX2RhdGEsCisJCQkgICAgICBfU19sb2NhbF9jYXBhY2l0eSArIDEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfTV9kYXRhKF9fcmNzLl9NX2RhdGEoKSk7CisJICBfTV9jYXBhY2l0eShfX3Jjcy5fTV9hbGxvY2F0ZWRfY2FwYWNpdHkpOworCX0KKworICAgICAgX01fc2V0X2xlbmd0aChfX3Jjcy5fTV9sZW5ndGgoKSk7CisgICAgICBfX3Jjcy5fTV9kYXRhKF9fcmNzLl9NX2xvY2FsX2RhdGEpOworICAgICAgX19yY3MuX01fc2V0X2xlbmd0aCgwKTsKKyAgICB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBfX3Nzb19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9fc3NvX3N0cmluZ19iYXNlKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQorICAgIDogX01fZGF0YXBsdXMoX19hLCBfTV9sb2NhbF9kYXRhKQorICAgIHsgX01fY29uc3RydWN0KF9fbiwgX19jKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX19zc29fc3RyaW5nX2Jhc2UoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAorCQkgICAgICBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICA6IF9NX2RhdGFwbHVzKF9fYSwgX01fbG9jYWxfZGF0YSkKKyAgICB7IF9NX2NvbnN0cnVjdChfX2JlZywgX19lbmQpOyB9CisKKyAgLy8gTkI6IFRoaXMgaXMgdGhlIHNwZWNpYWwgY2FzZSBmb3IgSW5wdXQgSXRlcmF0b3JzLCB1c2VkIGluCisgIC8vIGlzdHJlYW1idWZfaXRlcmF0b3JzLCBldGMuCisgIC8vIElucHV0IEl0ZXJhdG9ycyBoYXZlIGEgY29zdCBzdHJ1Y3R1cmUgdmVyeSBkaWZmZXJlbnQgZnJvbQorICAvLyBwb2ludGVycywgY2FsbGluZyBmb3IgYSBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyYXRvcj4KKyAgICAgIHZvaWQKKyAgICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgICBfTV9jb25zdHJ1Y3QoX0luSXRlcmF0b3IgX19iZWcsIF9Jbkl0ZXJhdG9yIF9fZW5kLAorCQkgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKKyAgICAgIHsKKwlzaXplX3R5cGUgX19sZW4gPSAwOworCXNpemVfdHlwZSBfX2NhcGFjaXR5ID0gc2l6ZV90eXBlKF9TX2xvY2FsX2NhcGFjaXR5KTsKKworCXdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2xlbiA8IF9fY2FwYWNpdHkpCisJICB7CisJICAgIF9NX2RhdGEoKVtfX2xlbisrXSA9ICpfX2JlZzsKKwkgICAgKytfX2JlZzsKKwkgIH0KKwkKKwlfX3RyeQorCSAgeworCSAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCisJICAgICAgeworCQlpZiAoX19sZW4gPT0gX19jYXBhY2l0eSkKKwkJICB7CisJCSAgICAvLyBBbGxvY2F0ZSBtb3JlIHNwYWNlLgorCQkgICAgX19jYXBhY2l0eSA9IF9fbGVuICsgMTsKKwkJICAgIF9DaGFyVCogX19hbm90aGVyID0gX01fY3JlYXRlKF9fY2FwYWNpdHksIF9fbGVuKTsKKwkJICAgIHRoaXMtPl9TX2NvcHkoX19hbm90aGVyLCBfTV9kYXRhKCksIF9fbGVuKTsKKwkJICAgIF9NX2Rpc3Bvc2UoKTsKKwkJICAgIF9NX2RhdGEoX19hbm90aGVyKTsKKwkJICAgIF9NX2NhcGFjaXR5KF9fY2FwYWNpdHkpOworCQkgIH0KKwkJX01fZGF0YSgpW19fbGVuKytdID0gKl9fYmVnOworCQkrK19fYmVnOworCSAgICAgIH0KKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX01fZGlzcG9zZSgpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKworCV9NX3NldF9sZW5ndGgoX19sZW4pOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXJhdG9yPgorICAgICAgdm9pZAorICAgICAgX19zc29fc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICAgIF9NX2NvbnN0cnVjdChfSW5JdGVyYXRvciBfX2JlZywgX0luSXRlcmF0b3IgX19lbmQsCisJCSAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcpCisgICAgICB7CisJLy8gTkI6IE5vdCByZXF1aXJlZCwgYnV0IGNvbnNpZGVyZWQgYmVzdCBwcmFjdGljZS4KKwlpZiAoX19pc19udWxsX3BvaW50ZXIoX19iZWcpICYmIF9fYmVnICE9IF9fZW5kKQorCSAgc3RkOjpfX3Rocm93X2xvZ2ljX2Vycm9yKF9fTigiX19zc29fc3RyaW5nX2Jhc2U6OiIKKwkJCQkgICAgICAgIl9NX2NvbnN0cnVjdCBudWxsIG5vdCB2YWxpZCIpKTsKKworCXNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CisKKwlpZiAoX19kbmV3ID4gc2l6ZV90eXBlKF9TX2xvY2FsX2NhcGFjaXR5KSkKKwkgIHsKKwkgICAgX01fZGF0YShfTV9jcmVhdGUoX19kbmV3LCBzaXplX3R5cGUoMCkpKTsKKwkgICAgX01fY2FwYWNpdHkoX19kbmV3KTsKKwkgIH0KKworCS8vIENoZWNrIGZvciBvdXRfb2ZfcmFuZ2UgYW5kIGxlbmd0aF9lcnJvciBleGNlcHRpb25zLgorCV9fdHJ5CisJICB7IHRoaXMtPl9TX2NvcHlfY2hhcnMoX01fZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX2Rpc3Bvc2UoKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisKKwlfTV9zZXRfbGVuZ3RoKF9fZG5ldyk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgeworICAgICAgaWYgKF9fbiA+IHNpemVfdHlwZShfU19sb2NhbF9jYXBhY2l0eSkpCisJeworCSAgX01fZGF0YShfTV9jcmVhdGUoX19uLCBzaXplX3R5cGUoMCkpKTsKKwkgIF9NX2NhcGFjaXR5KF9fbik7CisJfQorCisgICAgICBpZiAoX19uKQorCXRoaXMtPl9TX2Fzc2lnbihfTV9kYXRhKCksIF9fbiwgX19jKTsKKworICAgICAgX01fc2V0X2xlbmd0aChfX24pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB2b2lkCisgICAgX19zc29fc3RyaW5nX2Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKKyAgICBfTV9hc3NpZ24oY29uc3QgX19zc29fc3RyaW5nX2Jhc2UmIF9fcmNzKQorICAgIHsKKyAgICAgIGlmICh0aGlzICE9ICZfX3JjcykKKwl7CisJICBjb25zdCBzaXplX3R5cGUgX19yc2l6ZSA9IF9fcmNzLl9NX2xlbmd0aCgpOworCSAgY29uc3Qgc2l6ZV90eXBlIF9fY2FwYWNpdHkgPSBfTV9jYXBhY2l0eSgpOworCisJICBpZiAoX19yc2l6ZSA+IF9fY2FwYWNpdHkpCisJICAgIHsKKwkgICAgICBzaXplX3R5cGUgX19uZXdfY2FwYWNpdHkgPSBfX3JzaXplOworCSAgICAgIF9DaGFyVCogX190bXAgPSBfTV9jcmVhdGUoX19uZXdfY2FwYWNpdHksIF9fY2FwYWNpdHkpOworCSAgICAgIF9NX2Rpc3Bvc2UoKTsKKwkgICAgICBfTV9kYXRhKF9fdG1wKTsKKwkgICAgICBfTV9jYXBhY2l0eShfX25ld19jYXBhY2l0eSk7CisJICAgIH0KKworCSAgaWYgKF9fcnNpemUpCisJICAgIHRoaXMtPl9TX2NvcHkoX01fZGF0YSgpLCBfX3Jjcy5fTV9kYXRhKCksIF9fcnNpemUpOworCisJICBfTV9zZXRfbGVuZ3RoKF9fcnNpemUpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fcmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCisgICAgeworICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHNocmluayBiZWxvdyB0aGUgY3VycmVudCBzaXplLgorICAgICAgaWYgKF9fcmVzIDwgX01fbGVuZ3RoKCkpCisJX19yZXMgPSBfTV9sZW5ndGgoKTsKKworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fY2FwYWNpdHkgPSBfTV9jYXBhY2l0eSgpOworICAgICAgaWYgKF9fcmVzICE9IF9fY2FwYWNpdHkpCisJeworCSAgaWYgKF9fcmVzID4gX19jYXBhY2l0eQorCSAgICAgIHx8IF9fcmVzID4gc2l6ZV90eXBlKF9TX2xvY2FsX2NhcGFjaXR5KSkKKwkgICAgeworCSAgICAgIF9DaGFyVCogX190bXAgPSBfTV9jcmVhdGUoX19yZXMsIF9fY2FwYWNpdHkpOworCSAgICAgIHRoaXMtPl9TX2NvcHkoX190bXAsIF9NX2RhdGEoKSwgX01fbGVuZ3RoKCkgKyAxKTsKKwkgICAgICBfTV9kaXNwb3NlKCk7CisJICAgICAgX01fZGF0YShfX3RtcCk7CisJICAgICAgX01fY2FwYWNpdHkoX19yZXMpOworCSAgICB9CisJICBlbHNlIGlmICghX01faXNfbG9jYWwoKSkKKwkgICAgeworCSAgICAgIHRoaXMtPl9TX2NvcHkoX01fbG9jYWxfZGF0YSwgX01fZGF0YSgpLCBfTV9sZW5ndGgoKSArIDEpOworCSAgICAgIF9NX2Rlc3Ryb3koX19jYXBhY2l0eSk7CisJICAgICAgX01fZGF0YShfTV9sb2NhbF9kYXRhKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fc3NvX3N0cmluZ19iYXNlPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CisgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJICAgICAgc2l6ZV90eXBlIF9fbGVuMikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9NX2xlbmd0aCgpIC0gX19wb3MgLSBfX2xlbjE7CisgICAgICAKKyAgICAgIHNpemVfdHlwZSBfX25ld19jYXBhY2l0eSA9IF9NX2xlbmd0aCgpICsgX19sZW4yIC0gX19sZW4xOworICAgICAgX0NoYXJUKiBfX3IgPSBfTV9jcmVhdGUoX19uZXdfY2FwYWNpdHksIF9NX2NhcGFjaXR5KCkpOworCisgICAgICBpZiAoX19wb3MpCisJdGhpcy0+X1NfY29weShfX3IsIF9NX2RhdGEoKSwgX19wb3MpOworICAgICAgaWYgKF9fcyAmJiBfX2xlbjIpCisJdGhpcy0+X1NfY29weShfX3IgKyBfX3BvcywgX19zLCBfX2xlbjIpOworICAgICAgaWYgKF9faG93X211Y2gpCisJdGhpcy0+X1NfY29weShfX3IgKyBfX3BvcyArIF9fbGVuMiwKKwkJICAgICAgX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjEsIF9faG93X211Y2gpOworICAgICAgCisgICAgICBfTV9kaXNwb3NlKCk7CisgICAgICBfTV9kYXRhKF9fcik7CisgICAgICBfTV9jYXBhY2l0eShfX25ld19jYXBhY2l0eSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfX3Nzb19zdHJpbmdfYmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgorICAgIF9NX2VyYXNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9NX2xlbmd0aCgpIC0gX19wb3MgLSBfX247CisKKyAgICAgIGlmIChfX2hvd19tdWNoICYmIF9fbikKKwl0aGlzLT5fU19tb3ZlKF9NX2RhdGEoKSArIF9fcG9zLCBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbiwgX19ob3dfbXVjaCk7CisKKyAgICAgIF9NX3NldF9sZW5ndGgoX01fbGVuZ3RoKCkgLSBfX24pOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX1NTT19TVFJJTkdfQkFTRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9zdGRpb19maWxlYnVmLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9zdGRpb19maWxlYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkNjZhZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3N0ZGlvX2ZpbGVidWYuaApAQCAtMCwwICsxLDE2MiBAQAorLy8gRmlsZSBkZXNjcmlwdG9yIGxheWVyIGZvciBmaWxlYnVmIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBleHQvc3RkaW9fZmlsZWJ1Zi5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfU1RESU9fRklMRUJVRl9ICisjZGVmaW5lIF9TVERJT19GSUxFQlVGX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxmc3RyZWFtPgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYnJpZWYgUHJvdmlkZXMgYSBsYXllciBvZiBjb21wYXRpYmlsaXR5IGZvciBDL1BPU0lYLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIFRoaXMgR05VIGV4dGVuc2lvbiBwcm92aWRlcyBleHRlbnNpb25zIGZvciB3b3JraW5nIHdpdGggc3RhbmRhcmQgQworICAgKiAgRklMRSoncyBhbmQgUE9TSVggZmlsZSBkZXNjcmlwdG9ycy4gIEl0IG11c3QgYmUgaW5zdGFudGlhdGVkIGJ5IHRoZQorICAgKiAgdXNlciB3aXRoIHRoZSB0eXBlIG9mIGNoYXJhY3RlciB1c2VkIGluIHRoZSBmaWxlIHN0cmVhbSwgZS5nLiwKKyAgICogIHN0ZGlvX2ZpbGVidWY8Y2hhcj4uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3Mgc3RkaW9fZmlsZWJ1ZiA6IHB1YmxpYyBzdGQ6OmJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJCSAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCSAgICAgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZQkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZQkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZQkJb2ZmX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24KKyAgICAgICovCisgICAgICBzdGRpb19maWxlYnVmKCkgOiBzdGQ6OmJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPigpIHt9CisKKyAgICAgIC8qKgorICAgICAgICogIEBwYXJhbSAgX19mZCAgQW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIFNhbWUgbWVhbmluZyBhcyBpbiBhIHN0YW5kYXJkIGZpbGVidWYuCisgICAgICAgKiAgQHBhcmFtICBfX3NpemUgT3B0aW1hbCBvciBwcmVmZXJyZWQgc2l6ZSBvZiBpbnRlcm5hbCBidWZmZXIsCisgICAgICAgKiAgICAgICAgICAgICAgICAgaW4gY2hhcnMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgY29uc3RydWN0b3IgYXNzb2NpYXRlcyBhIGZpbGUgc3RyZWFtIGJ1ZmZlciB3aXRoIGFuIG9wZW4KKyAgICAgICAqICBQT1NJWCBmaWxlIGRlc2NyaXB0b3IuIFRoZSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSBhdXRvbWF0aWNhbGx5CisgICAgICAgKiAgY2xvc2VkIHdoZW4gdGhlIHN0ZGlvX2ZpbGVidWYgaXMgY2xvc2VkL2Rlc3Ryb3llZC4KKyAgICAgICovCisgICAgICBzdGRpb19maWxlYnVmKGludCBfX2ZkLCBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUsCisJCSAgICBzaXplX3QgX19zaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihCVUZTSVopKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQHBhcmFtICBfX2YgIEFuIG9wZW4gQGMgRklMRSouCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIFNhbWUgbWVhbmluZyBhcyBpbiBhIHN0YW5kYXJkIGZpbGVidWYuCisgICAgICAgKiAgQHBhcmFtICBfX3NpemUgT3B0aW1hbCBvciBwcmVmZXJyZWQgc2l6ZSBvZiBpbnRlcm5hbCBidWZmZXIsCisgICAgICAgKiAgICAgICAgICAgICAgICAgaW4gY2hhcnMuICBEZWZhdWx0cyB0byBzeXN0ZW0ncyBAYyBCVUZTSVouCisgICAgICAgKgorICAgICAgICogIFRoaXMgY29uc3RydWN0b3IgYXNzb2NpYXRlcyBhIGZpbGUgc3RyZWFtIGJ1ZmZlciB3aXRoIGFuIG9wZW4KKyAgICAgICAqICBDIEBjIEZJTEUqLiAgVGhlIEBjIEZJTEUqIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gdGhlCisgICAgICAgKiAgc3RkaW9fZmlsZWJ1ZiBpcyBjbG9zZWQvZGVzdHJveWVkLgorICAgICAgKi8KKyAgICAgIHN0ZGlvX2ZpbGVidWYoc3RkOjpfX2NfZmlsZSogX19mLCBzdGQ6Omlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUsCisJCSAgICBzaXplX3QgX19zaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihCVUZTSVopKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQ2xvc2VzIHRoZSBleHRlcm5hbCBkYXRhIHN0cmVhbSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGNvbnN0cnVjdG9yCisgICAgICAgKiAgd2FzIHVzZWQuCisgICAgICAqLworICAgICAgdmlydHVhbAorICAgICAgfnN0ZGlvX2ZpbGVidWYoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQHJldHVybiAgVGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICoKKyAgICAgICAqICBPbmNlIGFzc29jaWF0ZWQgd2l0aCBhbiBleHRlcm5hbCBkYXRhIHN0cmVhbSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUKKyAgICAgICAqICB1c2VkIHRvIGFjY2VzcyB0aGUgdW5kZXJseWluZyBQT1NJWCBmaWxlIGRlc2NyaXB0b3IuICBOb3RlIHRoYXQKKyAgICAgICAqICB0aGVyZSBpcyBubyB3YXkgZm9yIHRoZSBsaWJyYXJ5IHRvIHRyYWNrIHdoYXQgeW91IGRvIHdpdGggdGhlCisgICAgICAgKiAgZGVzY3JpcHRvciwgc28gYmUgY2FyZWZ1bC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGZkKCkgeyByZXR1cm4gdGhpcy0+X01fZmlsZS5mZCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEByZXR1cm4gIFRoZSB1bmRlcmx5aW5nIEZJTEUqLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgdW5kZXJseWluZyAiQyIgZmlsZSBwb2ludGVyLgorICAgICAgICogIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgZm9yIHRoZSBsaWJyYXJ5IHRvIHRyYWNrIHdoYXQgeW91IGRvCisgICAgICAgKiAgd2l0aCB0aGUgZmlsZSwgc28gYmUgY2FyZWZ1bC4KKyAgICAgICAqLworICAgICAgc3RkOjpfX2NfZmlsZSoKKyAgICAgIGZpbGUoKSB7IHJldHVybiB0aGlzLT5fTV9maWxlLmZpbGUoKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZGlvX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6fnN0ZGlvX2ZpbGVidWYoKQorICAgIHsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGRpb19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgorICAgIHN0ZGlvX2ZpbGVidWYoaW50IF9fZmQsIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgc2l6ZV90IF9fc2l6ZSkKKyAgICB7CisgICAgICB0aGlzLT5fTV9maWxlLnN5c19vcGVuKF9fZmQsIF9fbW9kZSk7CisgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQorCXsKKwkgIHRoaXMtPl9NX21vZGUgPSBfX21vZGU7CisJICB0aGlzLT5fTV9idWZfc2l6ZSA9IF9fc2l6ZTsKKwkgIHRoaXMtPl9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpOworCSAgdGhpcy0+X01fcmVhZGluZyA9IGZhbHNlOworCSAgdGhpcy0+X01fd3JpdGluZyA9IGZhbHNlOworCSAgdGhpcy0+X01fc2V0X2J1ZmZlcigtMSk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkaW9fZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKKyAgICBzdGRpb19maWxlYnVmKHN0ZDo6X19jX2ZpbGUqIF9fZiwgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlLAorCQkgIHNpemVfdCBfX3NpemUpCisgICAgeworICAgICAgdGhpcy0+X01fZmlsZS5zeXNfb3BlbihfX2YsIF9fbW9kZSk7CisgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQorCXsKKwkgIHRoaXMtPl9NX21vZGUgPSBfX21vZGU7CisJICB0aGlzLT5fTV9idWZfc2l6ZSA9IF9fc2l6ZTsKKwkgIHRoaXMtPl9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpOworCSAgdGhpcy0+X01fcmVhZGluZyA9IGZhbHNlOworCSAgdGhpcy0+X01fd3JpdGluZyA9IGZhbHNlOworCSAgdGhpcy0+X01fc2V0X2J1ZmZlcigtMSk7CisJfQorICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3N0ZGlvX3N5bmNfZmlsZWJ1Zi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvc3RkaW9fc3luY19maWxlYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1M2MwMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3N0ZGlvX3N5bmNfZmlsZWJ1Zi5oCkBAIC0wLDAgKzEsMjg5IEBACisvLyBJb3N0cmVhbXMgd3JhcHBlciBmb3Igc3RkaW8gRklMRSogLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC9zdGRpb19zeW5jX2ZpbGVidWYuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX1NURElPX1NZTkNfRklMRUJVRl9ICisjZGVmaW5lIF9TVERJT19TWU5DX0ZJTEVCVUZfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHN0cmVhbWJ1Zj4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Yml0cy9jKytpby5oPiAgLy8gRm9yIF9fY19maWxlCisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorI2luY2x1ZGUgPGN3Y2hhcj4KKyNlbmRpZgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYnJpZWYgUHJvdmlkZXMgYSBsYXllciBvZiBjb21wYXRpYmlsaXR5IGZvciBDLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIFRoaXMgR05VIGV4dGVuc2lvbiBwcm92aWRlcyBleHRlbnNpb25zIGZvciB3b3JraW5nIHdpdGggc3RhbmRhcmQKKyAgICogIEMgRklMRSoncy4gIEl0IG11c3QgYmUgaW5zdGFudGlhdGVkIGJ5IHRoZSB1c2VyIHdpdGggdGhlIHR5cGUgb2YKKyAgICogIGNoYXJhY3RlciB1c2VkIGluIHRoZSBmaWxlIHN0cmVhbSwgZS5nLiwgc3RkaW9fZmlsZWJ1ZjxjaGFyPi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBzdGRpb19zeW5jX2ZpbGVidWYgOiBwdWJsaWMgc3RkOjpiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMJCQkJCXRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUJCW9mZl90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIFVuZGVybHlpbmcgc3RkaW8gRklMRQorICAgICAgc3RkOjpfX2NfZmlsZSogY29uc3QgX01fZmlsZTsKKworICAgICAgLy8gTGFzdCBjaGFyYWN0ZXIgZ290dGVuLiBUaGlzIGlzIHVzZWQgd2hlbiBwYmFja2ZhaWwgaXMKKyAgICAgIC8vIGNhbGxlZCBmcm9tIGJhc2ljX3N0cmVhbWJ1Zjo6c3VuZ2V0YygpCisgICAgICBpbnRfdHlwZSBfTV91bmdldF9idWY7CisKKyAgICBwdWJsaWM6CisgICAgICBleHBsaWNpdAorICAgICAgc3RkaW9fc3luY19maWxlYnVmKHN0ZDo6X19jX2ZpbGUqIF9fZikKKyAgICAgIDogX01fZmlsZShfX2YpLCBfTV91bmdldF9idWYodHJhaXRzX3R5cGU6OmVvZigpKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEByZXR1cm4gIFRoZSB1bmRlcmx5aW5nIEZJTEUqLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgdW5kZXJseWluZyBDIGZpbGUgcG9pbnRlci4KKyAgICAgICAqICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgbGlicmFyeSB0byB0cmFjayB3aGF0IHlvdSBkbworICAgICAgICogIHdpdGggdGhlIGZpbGUsIHNvIGJlIGNhcmVmdWwuCisgICAgICAgKi8KKyAgICAgIHN0ZDo6X19jX2ZpbGUqIGNvbnN0CisgICAgICBmaWxlKCkgeyByZXR1cm4gdGhpcy0+X01fZmlsZTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgaW50X3R5cGUKKyAgICAgIHN5bmNnZXRjKCk7CisKKyAgICAgIGludF90eXBlCisgICAgICBzeW5jdW5nZXRjKGludF90eXBlIF9fYyk7CisKKyAgICAgIGludF90eXBlCisgICAgICBzeW5jcHV0YyhpbnRfdHlwZSBfX2MpOworCisgICAgICB2aXJ0dWFsIGludF90eXBlCisgICAgICB1bmRlcmZsb3coKQorICAgICAgeworCWludF90eXBlIF9fYyA9IHRoaXMtPnN5bmNnZXRjKCk7CisJcmV0dXJuIHRoaXMtPnN5bmN1bmdldGMoX19jKTsKKyAgICAgIH0KKworICAgICAgdmlydHVhbCBpbnRfdHlwZQorICAgICAgdWZsb3coKQorICAgICAgeworCS8vIFN0b3JlIHRoZSBnb3R0ZW4gY2hhcmFjdGVyIGluIGNhc2Ugd2UgbmVlZCB0byB1bmdldCBpdC4KKwlfTV91bmdldF9idWYgPSB0aGlzLT5zeW5jZ2V0YygpOworCXJldHVybiBfTV91bmdldF9idWY7CisgICAgICB9CisKKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCisgICAgICB7CisJaW50X3R5cGUgX19yZXQ7CisJY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisKKwkvLyBDaGVjayBpZiB0aGUgdW5nZXQgb3IgcHV0YmFjayB3YXMgcmVxdWVzdGVkCisJaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkgLy8gdW5nZXQKKwkgIHsKKwkgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fdW5nZXRfYnVmLCBfX2VvZikpCisJICAgICAgX19yZXQgPSB0aGlzLT5zeW5jdW5nZXRjKF9NX3VuZ2V0X2J1Zik7CisJICAgIGVsc2UgLy8gYnVmZmVyIGludmFsaWQsIGZhaWwuCisJICAgICAgX19yZXQgPSBfX2VvZjsKKwkgIH0KKwllbHNlIC8vIHB1dGJhY2sKKwkgIF9fcmV0ID0gdGhpcy0+c3luY3VuZ2V0YyhfX2MpOworCisJLy8gVGhlIGJ1ZmZlcmVkIGNoYXJhY3RlciBpcyBubyBsb25nZXIgdmFsaWQsIGRpc2NhcmQgaXQuCisJX01fdW5nZXRfYnVmID0gX19lb2Y7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICB2aXJ0dWFsIHN0ZDo6c3RyZWFtc2l6ZQorICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdGQ6OnN0cmVhbXNpemUgX19uKTsKKworICAgICAgdmlydHVhbCBpbnRfdHlwZQorICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpKQorICAgICAgeworCWludF90eXBlIF9fcmV0OworCWlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQorCSAgeworCSAgICBpZiAoc3RkOjpmZmx1c2goX01fZmlsZSkpCisJICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisJICAgIGVsc2UKKwkgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CisJICB9CisJZWxzZQorCSAgX19yZXQgPSB0aGlzLT5zeW5jcHV0YyhfX2MpOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgdmlydHVhbCBzdGQ6OnN0cmVhbXNpemUKKyAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RkOjpzdHJlYW1zaXplIF9fbik7CisKKyAgICAgIHZpcnR1YWwgaW50CisgICAgICBzeW5jKCkKKyAgICAgIHsgcmV0dXJuIHN0ZDo6ZmZsdXNoKF9NX2ZpbGUpOyB9CisKKyAgICAgIHZpcnR1YWwgc3RkOjpzdHJlYW1wb3MKKyAgICAgIHNlZWtvZmYoc3RkOjpzdHJlYW1vZmYgX19vZmYsIHN0ZDo6aW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIsCisJICAgICAgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgPSBzdGQ6Omlvc19iYXNlOjppbiB8IHN0ZDo6aW9zX2Jhc2U6Om91dCkKKyAgICAgIHsKKwlzdGQ6OnN0cmVhbXBvcyBfX3JldChzdGQ6OnN0cmVhbW9mZigtMSkpOworCWludCBfX3doZW5jZTsKKwlpZiAoX19kaXIgPT0gc3RkOjppb3NfYmFzZTo6YmVnKQorCSAgX193aGVuY2UgPSBTRUVLX1NFVDsKKwllbHNlIGlmIChfX2RpciA9PSBzdGQ6Omlvc19iYXNlOjpjdXIpCisJICBfX3doZW5jZSA9IFNFRUtfQ1VSOworCWVsc2UKKwkgIF9fd2hlbmNlID0gU0VFS19FTkQ7CisjaWZkZWYgX0dMSUJDWFhfVVNFX0xGUworCWlmICghZnNlZWtvNjQoX01fZmlsZSwgX19vZmYsIF9fd2hlbmNlKSkKKwkgIF9fcmV0ID0gc3RkOjpzdHJlYW1wb3MoZnRlbGxvNjQoX01fZmlsZSkpOworI2Vsc2UKKwlpZiAoIWZzZWVrKF9NX2ZpbGUsIF9fb2ZmLCBfX3doZW5jZSkpCisJICBfX3JldCA9IHN0ZDo6c3RyZWFtcG9zKHN0ZDo6ZnRlbGwoX01fZmlsZSkpOworI2VuZGlmCisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICB2aXJ0dWFsIHN0ZDo6c3RyZWFtcG9zCisgICAgICBzZWVrcG9zKHN0ZDo6c3RyZWFtcG9zIF9fcG9zLAorCSAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9CisJICAgICAgc3RkOjppb3NfYmFzZTo6aW4gfCBzdGQ6Omlvc19iYXNlOjpvdXQpCisgICAgICB7IHJldHVybiBzZWVrb2ZmKHN0ZDo6c3RyZWFtb2ZmKF9fcG9zKSwgc3RkOjppb3NfYmFzZTo6YmVnLCBfX21vZGUpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHN0ZGlvX3N5bmNfZmlsZWJ1ZjxjaGFyPjo6aW50X3R5cGUKKyAgICBzdGRpb19zeW5jX2ZpbGVidWY8Y2hhcj46OnN5bmNnZXRjKCkKKyAgICB7IHJldHVybiBzdGQ6OmdldGMoX01fZmlsZSk7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHN0ZGlvX3N5bmNfZmlsZWJ1ZjxjaGFyPjo6aW50X3R5cGUKKyAgICBzdGRpb19zeW5jX2ZpbGVidWY8Y2hhcj46OnN5bmN1bmdldGMoaW50X3R5cGUgX19jKQorICAgIHsgcmV0dXJuIHN0ZDo6dW5nZXRjKF9fYywgX01fZmlsZSk7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHN0ZGlvX3N5bmNfZmlsZWJ1ZjxjaGFyPjo6aW50X3R5cGUKKyAgICBzdGRpb19zeW5jX2ZpbGVidWY8Y2hhcj46OnN5bmNwdXRjKGludF90eXBlIF9fYykKKyAgICB7IHJldHVybiBzdGQ6OnB1dGMoX19jLCBfTV9maWxlKTsgfQorCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc3RkOjpzdHJlYW1zaXplCisgICAgc3RkaW9fc3luY19maWxlYnVmPGNoYXI+Ojp4c2dldG4oY2hhciogX19zLCBzdGQ6OnN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIHN0ZDo6c3RyZWFtc2l6ZSBfX3JldCA9IHN0ZDo6ZnJlYWQoX19zLCAxLCBfX24sIF9NX2ZpbGUpOworICAgICAgaWYgKF9fcmV0ID4gMCkKKwlfTV91bmdldF9idWYgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19zW19fcmV0IC0gMV0pOworICAgICAgZWxzZQorCV9NX3VuZ2V0X2J1ZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBzdGQ6OnN0cmVhbXNpemUKKyAgICBzdGRpb19zeW5jX2ZpbGVidWY8Y2hhcj46OnhzcHV0bihjb25zdCBjaGFyKiBfX3MsIHN0ZDo6c3RyZWFtc2l6ZSBfX24pCisgICAgeyByZXR1cm4gc3RkOjpmd3JpdGUoX19zLCAxLCBfX24sIF9NX2ZpbGUpOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHN0ZGlvX3N5bmNfZmlsZWJ1Zjx3Y2hhcl90Pjo6aW50X3R5cGUKKyAgICBzdGRpb19zeW5jX2ZpbGVidWY8d2NoYXJfdD46OnN5bmNnZXRjKCkKKyAgICB7IHJldHVybiBzdGQ6OmdldHdjKF9NX2ZpbGUpOyB9CisKKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBzdGRpb19zeW5jX2ZpbGVidWY8d2NoYXJfdD46OmludF90eXBlCisgICAgc3RkaW9fc3luY19maWxlYnVmPHdjaGFyX3Q+OjpzeW5jdW5nZXRjKGludF90eXBlIF9fYykKKyAgICB7IHJldHVybiBzdGQ6OnVuZ2V0d2MoX19jLCBfTV9maWxlKTsgfQorCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc3RkaW9fc3luY19maWxlYnVmPHdjaGFyX3Q+OjppbnRfdHlwZQorICAgIHN0ZGlvX3N5bmNfZmlsZWJ1Zjx3Y2hhcl90Pjo6c3luY3B1dGMoaW50X3R5cGUgX19jKQorICAgIHsgcmV0dXJuIHN0ZDo6cHV0d2MoX19jLCBfTV9maWxlKTsgfQorCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc3RkOjpzdHJlYW1zaXplCisgICAgc3RkaW9fc3luY19maWxlYnVmPHdjaGFyX3Q+Ojp4c2dldG4od2NoYXJfdCogX19zLCBzdGQ6OnN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIHN0ZDo6c3RyZWFtc2l6ZSBfX3JldCA9IDA7CisgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgIHdoaWxlIChfX24tLSkKKwl7CisJICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5zeW5jZ2V0YygpOworCSAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkgICAgYnJlYWs7CisJICBfX3NbX19yZXRdID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOworCSAgKytfX3JldDsKKwl9CisKKyAgICAgIGlmIChfX3JldCA+IDApCisJX01fdW5nZXRfYnVmID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fc1tfX3JldCAtIDFdKTsKKyAgICAgIGVsc2UKKwlfTV91bmdldF9idWYgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc3RkOjpzdHJlYW1zaXplCisgICAgc3RkaW9fc3luY19maWxlYnVmPHdjaGFyX3Q+Ojp4c3B1dG4oY29uc3Qgd2NoYXJfdCogX19zLAorCQkJCQlzdGQ6OnN0cmVhbXNpemUgX19uKQorICAgIHsKKyAgICAgIHN0ZDo6c3RyZWFtc2l6ZSBfX3JldCA9IDA7CisgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKKyAgICAgIHdoaWxlIChfX24tLSkKKwl7CisJICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnN5bmNwdXRjKCpfX3MrKyksIF9fZW9mKSkKKwkgICAgYnJlYWs7CisJICArK19fcmV0OworCX0KKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisjZW5kaWYKKworI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc3RkaW9fc3luY19maWxlYnVmPGNoYXI+OworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBzdGRpb19zeW5jX2ZpbGVidWY8d2NoYXJfdD47CisjZW5kaWYKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvc3RyaW5nX2NvbnZlcnNpb25zLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC9zdHJpbmdfY29udmVyc2lvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWE3N2MwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvc3RyaW5nX2NvbnZlcnNpb25zLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8vIFN0cmluZyBDb252ZXJzaW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3N0cmluZ19jb252ZXJzaW9ucy5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfU1RSSU5HX0NPTlZFUlNJT05TX0gKKyNkZWZpbmUgX1NUUklOR19DT05WRVJTSU9OU19IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8ZXh0L251bWVyaWNfdHJhaXRzLmg+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3djaGFyPgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjZXJybm8+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBIZWxwZXIgZm9yIGFsbCB0aGUgc3RvKiBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UUmV0LCB0eXBlbmFtZSBfUmV0ID0gX1RSZXQsIHR5cGVuYW1lIF9DaGFyVCwKKwkgICB0eXBlbmFtZS4uLiBfQmFzZT4KKyAgICBfUmV0CisgICAgX19zdG9hKF9UUmV0ICgqX19jb252ZikgKGNvbnN0IF9DaGFyVCosIF9DaGFyVCoqLCBfQmFzZS4uLiksCisJICAgY29uc3QgY2hhciogX19uYW1lLCBjb25zdCBfQ2hhclQqIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHgsCisJICAgX0Jhc2UuLi4gX19iYXNlKQorICAgIHsKKyAgICAgIF9SZXQgX19yZXQ7CisKKyAgICAgIF9DaGFyVCogX19lbmRwdHI7CisgICAgICBlcnJubyA9IDA7CisgICAgICBjb25zdCBfVFJldCBfX3RtcCA9IF9fY29udmYoX19zdHIsICZfX2VuZHB0ciwgX19iYXNlLi4uKTsKKworICAgICAgaWYgKF9fZW5kcHRyID09IF9fc3RyKQorCXN0ZDo6X190aHJvd19pbnZhbGlkX2FyZ3VtZW50KF9fbmFtZSk7CisgICAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UKKwkgICAgICAgfHwgKHN0ZDo6X19hcmVfc2FtZTxfUmV0LCBpbnQ+OjpfX3ZhbHVlCisJCSAgICYmIChfX3RtcCA8IF9fbnVtZXJpY190cmFpdHM8aW50Pjo6X19taW4KKwkJICAgICAgIHx8IF9fdG1wID4gX19udW1lcmljX3RyYWl0czxpbnQ+OjpfX21heCkpKQorCXN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoX19uYW1lKTsKKyAgICAgIGVsc2UKKwlfX3JldCA9IF9fdG1wOworCisgICAgICBpZiAoX19pZHgpCisJKl9faWR4ID0gX19lbmRwdHIgLSBfX3N0cjsKKworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICAvLyBIZWxwZXIgZm9yIHRoZSB0b19zdHJpbmcgLyB0b193c3RyaW5nIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0cmluZywgdHlwZW5hbWUgX0NoYXJUID0gdHlwZW5hbWUgX1N0cmluZzo6dmFsdWVfdHlwZT4KKyAgICBfU3RyaW5nCisgICAgX190b194c3RyaW5nKGludCAoKl9fY29udmYpIChfQ2hhclQqLCBzdGQ6OnNpemVfdCwgY29uc3QgX0NoYXJUKiwKKwkJCQkgX19idWlsdGluX3ZhX2xpc3QpLCBzdGQ6OnNpemVfdCBfX24sCisJCSBjb25zdCBfQ2hhclQqIF9fZm10LCAuLi4pCisgICAgeworICAgICAgLy8gWFhYIEV2ZW50dWFsbHkgdGhlIHJlc3VsdCB3aWxsIGJlIGNvbnN0cnVjdGVkIGluIHBsYWNlIGluCisgICAgICAvLyB0aGUgQysrMHggc3RyaW5nLCBsaWtlbHkgd2l0aCB0aGUgaGVscCBvZiBpbnRlcm5hbCBob29rcy4KKyAgICAgIF9DaGFyVCogX19zID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQorCQkJCQkJCSAgKiBfX24pKTsKKworICAgICAgX19idWlsdGluX3ZhX2xpc3QgX19hcmdzOworICAgICAgX19idWlsdGluX3ZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworCisgICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2NvbnZmKF9fcywgX19uLCBfX2ZtdCwgX19hcmdzKTsKKworICAgICAgX19idWlsdGluX3ZhX2VuZChfX2FyZ3MpOworCisgICAgICByZXR1cm4gX1N0cmluZyhfX3MsIF9fcyArIF9fbGVuKTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfU1RSSU5HX0NPTlZFUlNJT05TX0gKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3Rocm93X2FsbG9jYXRvci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvdGhyb3dfYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2MTBlZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3Rocm93X2FsbG9jYXRvci5oCkBAIC0wLDAgKzEsODE2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UKKy8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUKKy8vIG9mIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKKy8vIHdhcnJhbnR5LgorCisvKiogQGZpbGUgZXh0L3Rocm93X2FsbG9jYXRvci5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKgorICogIENvbnRhaW5zIHR3byBleGNlcHRpb24tZ2VuZXJhdGluZyB0eXBlcyAodGhyb3dfdmFsdWUsIHRocm93X2FsbG9jYXRvcikKKyAqICBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHZhbHVlIGFuZCBhbGxvY2F0b3IgdHlwZXMgd2hpbGUgdGVzdGluZworICogIGV4Y2VwdGlvbiBzYWZldHkgaW4gdGVtcGxhdGl6ZWQgY29udGFpbmVycyBhbmQgYWxnb3JpdGhtcy4gVGhlCisgKiAgYWxsb2NhdG9yIGhhcyBhZGRpdGlvbmFsIGxvZyBhbmQgZGVidWcgZmVhdHVyZXMuIFRoZSBleGNlcHRpb24KKyAqICBnZW5lcmF0ZWQgaXMgb2YgdHlwZSBmb3JjZWRfZXhjZXB0aW9uX2Vycm9yLgorICovCisKKyNpZm5kZWYgX1RIUk9XX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9USFJPV19BTExPQ0FUT1JfSCAxCisKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxjdGltZT4KKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgaW5jbHVkZSA8cmFuZG9tPgorI2Vsc2UKKyMgaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWw+CisjIGluY2x1ZGUgPHRyMS9yYW5kb20+CisjZW5kaWYKKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiAgQGJyaWVmIFRob3duIGJ5IGV4Y2VwdGlvbiBzYWZldHkgbWFjaGluZXJ5LgorICAgKiAgQGluZ3JvdXAgZXhjZXB0aW9ucworICAgKi8KKyAgc3RydWN0IGZvcmNlZF9lcnJvciA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgorICB7IH07CisKKyAgLy8gU3Vic3RpdHV0ZSBmb3IgZm9yY2VkX2Vycm9yIG9iamVjdCB3aGVuIC1mbm8tZXhjZXB0aW9ucy4KKyAgaW5saW5lIHZvaWQKKyAgX190aHJvd19mb3JjZWRfZXJyb3IoKQorICB7IF9HTElCQ1hYX1RIUk9XX09SX0FCT1JUKGZvcmNlZF9lcnJvcigpKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEJhc2UgY2xhc3MgZm9yIGNoZWNraW5nIGFkZHJlc3MgYW5kIGxhYmVsIGluZm9ybWF0aW9uCisgICAqICBhYm91dCBhbGxvY2F0aW9ucy4gQ3JlYXRlIGEgc3RkOjptYXAgYmV0d2VlbiB0aGUgYWxsb2NhdGVkCisgICAqICBhZGRyZXNzICh2b2lkKikgYW5kIGEgZGF0dW0gZm9yIGFubm90YXRpb25zLCB3aGljaCBhcmUgYSBwYWlyIG9mCisgICAqICBudW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gbGFiZWwgYW5kIGFsbG9jYXRlZCBzaXplLgorICAgKi8KKyAgc3RydWN0IGFubm90YXRlX2Jhc2UKKyAgeworICAgIGFubm90YXRlX2Jhc2UoKQorICAgIHsKKyAgICAgIGxhYmVsKCk7CisgICAgICBtYXAoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZAorICAgIHNldF9sYWJlbChzaXplX3QgbCkKKyAgICB7IGxhYmVsKCkgPSBsOyB9CisKKyAgICBzdGF0aWMgc2l6ZV90CisgICAgZ2V0X2xhYmVsKCkKKyAgICB7IHJldHVybiBsYWJlbCgpOyB9CisKKyAgICB2b2lkCisgICAgaW5zZXJ0KHZvaWQqIHAsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgIGlmICghcCkKKwl7CisJICBzdGQ6OnN0cmluZyBlcnJvcigiYW5ub3RhdGVfYmFzZTo6aW5zZXJ0IG51bGwgaW5zZXJ0IVxuIik7CisJICBsb2dfdG9fc3RyaW5nKGVycm9yLCBtYWtlX2VudHJ5KHAsIHNpemUpKTsKKwkgIHN0ZDo6X190aHJvd19sb2dpY19lcnJvcihlcnJvci5jX3N0cigpKTsKKwl9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gbWFwKCkuZmluZChwKTsKKyAgICAgIGlmIChmb3VuZCAhPSBtYXAoKS5lbmQoKSkKKwl7CisJICBzdGQ6OnN0cmluZyBlcnJvcigiYW5ub3RhdGVfYmFzZTo6aW5zZXJ0IGRvdWJsZSBpbnNlcnQhXG4iKTsKKwkgIGxvZ190b19zdHJpbmcoZXJyb3IsIG1ha2VfZW50cnkocCwgc2l6ZSkpOworCSAgbG9nX3RvX3N0cmluZyhlcnJvciwgKmZvdW5kKTsKKwkgIHN0ZDo6X190aHJvd19sb2dpY19lcnJvcihlcnJvci5jX3N0cigpKTsKKwl9CisKKyAgICAgIG1hcCgpLmluc2VydChtYWtlX2VudHJ5KHAsIHNpemUpKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgZXJhc2Uodm9pZCogcCwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgY2hlY2tfYWxsb2NhdGVkKHAsIHNpemUpOworICAgICAgbWFwKCkuZXJhc2UocCk7CisgICAgfQorCisgICAgLy8gU2VlIGlmIGEgcGFydGljdWxhciBhZGRyZXNzIGFuZCBhbGxvY2F0aW9uIHNpemUgaGFzIGJlZW4gc2F2ZWQuCisgICAgaW5saW5lIHZvaWQKKyAgICBjaGVja19hbGxvY2F0ZWQodm9pZCogcCwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgY29uc3RfaXRlcmF0b3IgZm91bmQgPSBtYXAoKS5maW5kKHApOworICAgICAgaWYgKGZvdW5kID09IG1hcCgpLmVuZCgpKQorCXsKKwkgIHN0ZDo6c3RyaW5nIGVycm9yKCJhbm5vdGF0ZV9iYXNlOjpjaGVja19hbGxvY2F0ZWQgYnkgdmFsdWUgIgorCQkJICAgICJudWxsIGVyYXNlIVxuIik7CisJICBsb2dfdG9fc3RyaW5nKGVycm9yLCBtYWtlX2VudHJ5KHAsIHNpemUpKTsKKwkgIHN0ZDo6X190aHJvd19sb2dpY19lcnJvcihlcnJvci5jX3N0cigpKTsKKwl9CisKKyAgICAgIGlmIChmb3VuZC0+c2Vjb25kLnNlY29uZCAhPSBzaXplKQorCXsKKwkgIHN0ZDo6c3RyaW5nIGVycm9yKCJhbm5vdGF0ZV9iYXNlOjpjaGVja19hbGxvY2F0ZWQgYnkgdmFsdWUgIgorCQkJICAgICJ3cm9uZy1zaXplIGVyYXNlIVxuIik7CisJICBsb2dfdG9fc3RyaW5nKGVycm9yLCBtYWtlX2VudHJ5KHAsIHNpemUpKTsKKwkgIGxvZ190b19zdHJpbmcoZXJyb3IsICpmb3VuZCk7CisJICBzdGQ6Ol9fdGhyb3dfbG9naWNfZXJyb3IoZXJyb3IuY19zdHIoKSk7CisJfQorICAgIH0KKworICAgIC8vIFNlZSBpZiBhIGdpdmVuIGxhYmVsIGhhcyBiZWVuIGFsbG9jYXRlZC4KKyAgICBpbmxpbmUgdm9pZAorICAgIGNoZWNrX2FsbG9jYXRlZChzaXplX3QgbGFiZWwpCisgICAgeworICAgICAgY29uc3RfaXRlcmF0b3IgYmVnID0gbWFwKCkuYmVnaW4oKTsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcCgpLmVuZCgpOworICAgICAgc3RkOjpzdHJpbmcgZm91bmQ7CisgICAgICB3aGlsZSAoYmVnICE9IGVuZCkKKwl7CisJICBpZiAoYmVnLT5zZWNvbmQuZmlyc3QgPT0gbGFiZWwpCisJICAgIGxvZ190b19zdHJpbmcoZm91bmQsICpiZWcpOworCSAgKytiZWc7CisJfQorCisgICAgICBpZiAoIWZvdW5kLmVtcHR5KCkpCisJeworCSAgc3RkOjpzdHJpbmcgZXJyb3IoImFubm90YXRlX2Jhc2U6OmNoZWNrX2FsbG9jYXRlZCBieSBsYWJlbFxuIik7CisJICBlcnJvciArPSBmb3VuZDsKKwkgIHN0ZDo6X190aHJvd19sb2dpY19lcnJvcihlcnJvci5jX3N0cigpKTsKKwl9CisgICAgfQorCisgIHByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8c2l6ZV90LCBzaXplX3Q+IAkJZGF0YV90eXBlOworICAgIHR5cGVkZWYgc3RkOjptYXA8dm9pZCosIGRhdGFfdHlwZT4gCQltYXBfdHlwZTsKKyAgICB0eXBlZGVmIG1hcF90eXBlOjp2YWx1ZV90eXBlIAkJZW50cnlfdHlwZTsKKyAgICB0eXBlZGVmIG1hcF90eXBlOjpjb25zdF9pdGVyYXRvciAJCWNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgbWFwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSAJCWNvbnN0X3JlZmVyZW5jZTsKKworICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mCisgICAgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBjb25zdCBhbm5vdGF0ZV9iYXNlJik7CisKKyAgICBlbnRyeV90eXBlCisgICAgbWFrZV9lbnRyeSh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkKKyAgICB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihwLCBkYXRhX3R5cGUoZ2V0X2xhYmVsKCksIHNpemUpKTsgfQorCisgICAgdm9pZAorICAgIGxvZ190b19zdHJpbmcoc3RkOjpzdHJpbmcmIHMsIGNvbnN0X3JlZmVyZW5jZSByZWYpIGNvbnN0CisgICAgeworICAgICAgY2hhciBidWZbNDBdOworICAgICAgY29uc3QgY2hhciB0YWIoJ1x0Jyk7CisgICAgICBzICs9ICJsYWJlbDogIjsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHJlZi5zZWNvbmQuZmlyc3QpOworICAgICAgX19idWlsdGluX3NwcmludGYoYnVmLCAiJWx1IiwgbCk7CisgICAgICBzICs9IGJ1ZjsKKyAgICAgIHMgKz0gdGFiOworICAgICAgcyArPSAic2l6ZTogIjsKKyAgICAgIGwgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihyZWYuc2Vjb25kLnNlY29uZCk7CisgICAgICBfX2J1aWx0aW5fc3ByaW50ZihidWYsICIlbHUiLCBsKTsKKyAgICAgIHMgKz0gYnVmOworICAgICAgcyArPSB0YWI7CisgICAgICBzICs9ICJhZGRyZXNzOiAiOworICAgICAgX19idWlsdGluX3NwcmludGYoYnVmLCAiJXAiLCByZWYuZmlyc3QpOworICAgICAgcyArPSBidWY7CisgICAgICBzICs9ICdcbic7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCYKKyAgICBsYWJlbCgpCisgICAgeworICAgICAgc3RhdGljIHNpemVfdCBfU19sYWJlbChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAgICAgIHJldHVybiBfU19sYWJlbDsKKyAgICB9CisKKyAgICBzdGF0aWMgbWFwX3R5cGUmCisgICAgbWFwKCkKKyAgICB7CisgICAgICBzdGF0aWMgbWFwX3R5cGUgX1NfbWFwOworICAgICAgcmV0dXJuIF9TX21hcDsKKyAgICB9CisgIH07CisKKyAgaW5saW5lIHN0ZDo6b3N0cmVhbSYKKyAgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBhbm5vdGF0ZV9iYXNlJiBfX2IpCisgIHsKKyAgICBzdGQ6OnN0cmluZyBlcnJvcjsKKyAgICB0eXBlZGVmIGFubm90YXRlX2Jhc2UgYmFzZV90eXBlOworICAgIGJhc2VfdHlwZTo6Y29uc3RfaXRlcmF0b3IgYmVnID0gX19iLm1hcCgpLmJlZ2luKCk7CisgICAgYmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBfX2IubWFwKCkuZW5kKCk7CisgICAgZm9yICg7IGJlZyAhPSBlbmQ7ICsrYmVnKQorICAgICAgX19iLmxvZ190b19zdHJpbmcoZXJyb3IsICpiZWcpOworICAgIHJldHVybiBvcyA8PCBlcnJvcjsKKyAgfQorCisKKyAgLyoqCisgICAqICBAYnJpZWYgQmFzZSBzdHJ1Y3QgZm9yIGNvbmRpdGlvbiBwb2xpY3kuCisgICAqCisgICAqIFJlcXVpcmVzIGEgcHVibGljIG1lbWJlciBmdW5jdGlvbiB3aXRoIHRoZSBzaWduYXR1cmUKKyAgICogdm9pZCB0aHJvd19jb25kaXRpb25hbGx5KCkKKyAgICovCisgIHN0cnVjdCBjb25kaXRpb25fYmFzZQorICB7CisgICAgdmlydHVhbCB+Y29uZGl0aW9uX2Jhc2UoKSB7IH07CisgIH07CisKKworICAvKioKKyAgICogIEBicmllZiBCYXNlIGNsYXNzIGZvciBpbmNyZW1lbnRhbCBjb250cm9sIGFuZCB0aHJvdy4KKyAgICovCisgIHN0cnVjdCBsaW1pdF9jb25kaXRpb24gOiBwdWJsaWMgY29uZGl0aW9uX2Jhc2UKKyAgeworICAgIC8vIFNjb3BlLWxldmVsIGFkanVzdG9yIG9iamVjdHM6IHNldCBsaW1pdCBmb3IgdGhyb3cgYXQgdGhlCisgICAgLy8gYmVnaW5uaW5nIG9mIGEgc2NvcGUgYmxvY2ssIGFuZCByZXN0b3JlcyB0byBwcmV2aW91cyBsaW1pdCB3aGVuCisgICAgLy8gb2JqZWN0IGlzIGRlc3Ryb3llZCBvbiBleGl0aW5nIHRoZSBibG9jay4KKyAgICBzdHJ1Y3QgYWRqdXN0b3JfYmFzZQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgY29uc3Qgc2l6ZV90IF9NX29yaWc7CisKKyAgICBwdWJsaWM6CisgICAgICBhZGp1c3Rvcl9iYXNlKCkgOiBfTV9vcmlnKGxpbWl0KCkpIHsgfQorCisgICAgICB2aXJ0dWFsCisgICAgICB+YWRqdXN0b3JfYmFzZSgpIHsgc2V0X2xpbWl0KF9NX29yaWcpOyB9CisgICAgfTsKKworICAgIC8vLyBOZXZlciBlbnRlciB0aGUgY29uZGl0aW9uLgorICAgIHN0cnVjdCBuZXZlcl9hZGp1c3RvciA6IHB1YmxpYyBhZGp1c3Rvcl9iYXNlCisgICAgeworICAgICAgbmV2ZXJfYWRqdXN0b3IoKSB7IHNldF9saW1pdChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsgfQorICAgIH07CisKKyAgICAvLy8gQWx3YXlzIGVudGVyIHRoZSBjb25kaXRpb24uCisgICAgc3RydWN0IGFsd2F5c19hZGp1c3RvciA6IHB1YmxpYyBhZGp1c3Rvcl9iYXNlCisgICAgeworICAgICAgYWx3YXlzX2FkanVzdG9yKCkgeyBzZXRfbGltaXQoY291bnQoKSk7IH0KKyAgICB9OworCisgICAgLy8vIEVudGVyIHRoZSBudGggY29uZGl0aW9uLgorICAgIHN0cnVjdCBsaW1pdF9hZGp1c3RvciA6IHB1YmxpYyBhZGp1c3Rvcl9iYXNlCisgICAgeworICAgICAgbGltaXRfYWRqdXN0b3IoY29uc3Qgc2l6ZV90IF9fbCkgeyBzZXRfbGltaXQoX19sKTsgfQorICAgIH07CisKKyAgICAvLyBJbmNyZW1lbnQgX1NfY291bnQgZXZlcnkgdGltZSBjYWxsZWQuCisgICAgLy8gSWYgX1NfY291bnQgbWF0Y2hlcyB0aGUgbGltaXQgY291bnQsIHRocm93LgorICAgIHN0YXRpYyB2b2lkCisgICAgdGhyb3dfY29uZGl0aW9uYWxseSgpCisgICAgeworICAgICAgaWYgKGNvdW50KCkgPT0gbGltaXQoKSkKKwlfX3Rocm93X2ZvcmNlZF9lcnJvcigpOworICAgICAgKytjb3VudCgpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QmCisgICAgY291bnQoKQorICAgIHsKKyAgICAgIHN0YXRpYyBzaXplX3QgX1NfY291bnQoMCk7CisgICAgICByZXR1cm4gX1NfY291bnQ7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCYKKyAgICBsaW1pdCgpCisgICAgeworICAgICAgc3RhdGljIHNpemVfdCBfU19saW1pdChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKyAgICAgIHJldHVybiBfU19saW1pdDsKKyAgICB9CisKKyAgICAvLyBaZXJvIHRoZSB0aHJvdyBjb3VudGVyLCBzZXQgbGltaXQgdG8gYXJndW1lbnQuCisgICAgc3RhdGljIHZvaWQKKyAgICBzZXRfbGltaXQoY29uc3Qgc2l6ZV90IF9fbCkKKyAgICB7CisgICAgICBsaW1pdCgpID0gX19sOworICAgICAgY291bnQoKSA9IDA7CisgICAgfQorICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgQmFzZSBjbGFzcyBmb3IgcmFuZG9tIHByb2JhYmlsaXR5IGNvbnRyb2wgYW5kIHRocm93LgorICAgKi8KKyAgc3RydWN0IHJhbmRvbV9jb25kaXRpb24gOiBwdWJsaWMgY29uZGl0aW9uX2Jhc2UKKyAgeworICAgIC8vIFNjb3BlLWxldmVsIGFkanVzdG9yIG9iamVjdHM6IHNldCBwcm9iYWJpbGl0eSBmb3IgdGhyb3cgYXQgdGhlCisgICAgLy8gYmVnaW5uaW5nIG9mIGEgc2NvcGUgYmxvY2ssIGFuZCByZXN0b3JlcyB0byBwcmV2aW91cworICAgIC8vIHByb2JhYmlsaXR5IHdoZW4gb2JqZWN0IGlzIGRlc3Ryb3llZCBvbiBleGl0aW5nIHRoZSBibG9jay4KKyAgICBzdHJ1Y3QgYWRqdXN0b3JfYmFzZQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgZG91YmxlIF9NX29yaWc7CisKKyAgICBwdWJsaWM6CisgICAgICBhZGp1c3Rvcl9iYXNlKCkgOiBfTV9vcmlnKHByb2JhYmlsaXR5KCkpIHsgfQorCisgICAgICB2aXJ0dWFsIH5hZGp1c3Rvcl9iYXNlKCkKKyAgICAgIHsgc2V0X3Byb2JhYmlsaXR5KF9NX29yaWcpOyB9CisgICAgfTsKKworICAgIC8vLyBHcm91cCBjb25kaXRpb24uCisgICAgc3RydWN0IGdyb3VwX2FkanVzdG9yIDogcHVibGljIGFkanVzdG9yX2Jhc2UKKyAgICB7CisgICAgICBncm91cF9hZGp1c3RvcihzaXplX3Qgc2l6ZSkKKyAgICAgIHsgc2V0X3Byb2JhYmlsaXR5KDEgLSBzdGQ6OnBvdyhkb3VibGUoMSAtIHByb2JhYmlsaXR5KCkpLAorCQkJCSAgICAgZG91YmxlKDAuNSAvIChzaXplICsgMSkpKSk7CisgICAgICB9CisgICAgfTsKKworICAgIC8vLyBOZXZlciBlbnRlciB0aGUgY29uZGl0aW9uLgorICAgIHN0cnVjdCBuZXZlcl9hZGp1c3RvciA6IHB1YmxpYyBhZGp1c3Rvcl9iYXNlCisgICAgeworICAgICAgbmV2ZXJfYWRqdXN0b3IoKSB7IHNldF9wcm9iYWJpbGl0eSgwKTsgfQorICAgIH07CisKKyAgICAvLy8gQWx3YXlzIGVudGVyIHRoZSBjb25kaXRpb24uCisgICAgc3RydWN0IGFsd2F5c19hZGp1c3RvciA6IHB1YmxpYyBhZGp1c3Rvcl9iYXNlCisgICAgeworICAgICAgYWx3YXlzX2FkanVzdG9yKCkgeyBzZXRfcHJvYmFiaWxpdHkoMSk7IH0KKyAgICB9OworCisgICAgcmFuZG9tX2NvbmRpdGlvbigpCisgICAgeworICAgICAgcHJvYmFiaWxpdHkoKTsKKyAgICAgIGVuZ2luZSgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkCisgICAgc2V0X3Byb2JhYmlsaXR5KGRvdWJsZSBfX3ApCisgICAgeyBwcm9iYWJpbGl0eSgpID0gX19wOyB9CisKKyAgICBzdGF0aWMgdm9pZAorICAgIHRocm93X2NvbmRpdGlvbmFsbHkoKQorICAgIHsKKyAgICAgIGlmIChnZW5lcmF0ZSgpIDwgcHJvYmFiaWxpdHkoKSkKKwlfX3Rocm93X2ZvcmNlZF9lcnJvcigpOworICAgIH0KKworICAgIHZvaWQKKyAgICBzZWVkKHVuc2lnbmVkIGxvbmcgX19zKQorICAgIHsgZW5naW5lKCkuc2VlZChfX3MpOyB9CisKKyAgcHJpdmF0ZToKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdHlwZWRlZiBzdGQ6OnVuaWZvcm1fcmVhbF9kaXN0cmlidXRpb248ZG91YmxlPiAJZGlzdHJpYnV0aW9uX3R5cGU7CisgICAgdHlwZWRlZiBzdGQ6Om10MTk5MzcgCQkJCWVuZ2luZV90eXBlOworI2Vsc2UKKyAgICB0eXBlZGVmIHN0ZDo6dHIxOjp1bmlmb3JtX3JlYWw8ZG91YmxlPiAJCWRpc3RyaWJ1dGlvbl90eXBlOworICAgIHR5cGVkZWYgc3RkOjp0cjE6Om10MTk5MzcgCQkJCWVuZ2luZV90eXBlOworI2VuZGlmCisKKyAgICBzdGF0aWMgZG91YmxlCisgICAgZ2VuZXJhdGUoKQorICAgIHsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdCBkaXN0cmlidXRpb25fdHlwZSBkaXN0cmlidXRpb24oMCwgMSk7CisgICAgICBzdGF0aWMgYXV0byBnZW5lcmF0b3IgPSBzdGQ6OmJpbmQoZGlzdHJpYnV0aW9uLCBlbmdpbmUoKSk7CisjZWxzZQorICAgICAgLy8gVXNlIHZhcmlhdGVfZ2VuZXJhdG9yIHRvIGdldCBub3JtYWxpemVkIHJlc3VsdHMuCisgICAgICB0eXBlZGVmIHN0ZDo6dHIxOjp2YXJpYXRlX2dlbmVyYXRvcjxlbmdpbmVfdHlwZSwgZGlzdHJpYnV0aW9uX3R5cGU+IGdlbl90OworICAgICAgZGlzdHJpYnV0aW9uX3R5cGUgZGlzdHJpYnV0aW9uKDAsIDEpOworICAgICAgc3RhdGljIGdlbl90IGdlbmVyYXRvcihlbmdpbmUoKSwgZGlzdHJpYnV0aW9uKTsKKyNlbmRpZgorCisgICAgICBkb3VibGUgcmFuZG9tID0gZ2VuZXJhdG9yKCk7CisgICAgICBpZiAocmFuZG9tIDwgZGlzdHJpYnV0aW9uLm1pbigpIHx8IHJhbmRvbSA+IGRpc3RyaWJ1dGlvbi5tYXgoKSkKKwl7CisJICBzdGQ6OnN0cmluZyBfX3MoInJhbmRvbV9jb25kaXRpb246OmdlbmVyYXRlIik7CisJICBfX3MgKz0gIlxuIjsKKwkgIF9fcyArPSAicmFuZG9tIG51bWJlciBnZW5lcmF0ZWQgaXM6ICI7CisJICBjaGFyIGJ1Zls0MF07CisJICBfX2J1aWx0aW5fc3ByaW50ZihidWYsICIlZiIsIHJhbmRvbSk7CisJICBfX3MgKz0gYnVmOworCSAgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX3MuY19zdHIoKSk7CisJfQorCisgICAgICByZXR1cm4gcmFuZG9tOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUmCisgICAgcHJvYmFiaWxpdHkoKQorICAgIHsKKyAgICAgIHN0YXRpYyBkb3VibGUgX1NfcDsKKyAgICAgIHJldHVybiBfU19wOworICAgIH0KKworICAgIHN0YXRpYyBlbmdpbmVfdHlwZSYKKyAgICBlbmdpbmUoKQorICAgIHsKKyAgICAgIHN0YXRpYyBlbmdpbmVfdHlwZSBfU19lOworICAgICAgcmV0dXJuIF9TX2U7CisgICAgfQorICB9OworCisKKyAgLyoqCisgICAqICBAYnJpZWYgQ2xhc3Mgd2l0aCBleGNlcHRpb24gZ2VuZXJhdGlvbiBjb250cm9sLiBJbnRlbmRlZCB0byBiZQorICAgKiAgdXNlZCBhcyBhIHZhbHVlX3R5cGUgaW4gdGVtcGxhdGl6ZWQgY29kZS4KKyAgICoKKyAgICogIE5vdGU6IERlc3RydWN0b3Igbm90IGFsbG93ZWQgdG8gdGhyb3cuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29uZD4KKyAgICBzdHJ1Y3QgdGhyb3dfdmFsdWVfYmFzZSA6IHB1YmxpYyBfQ29uZAorICAgIHsKKyAgICAgIHR5cGVkZWYgX0NvbmQgIAkJCQljb25kaXRpb25fdHlwZTsKKworICAgICAgdXNpbmcgY29uZGl0aW9uX3R5cGU6OnRocm93X2NvbmRpdGlvbmFsbHk7CisKKyAgICAgIHN0ZDo6c2l6ZV90CQkJICAgICAgIAlfTV9pOworCisjaWZuZGVmIF9HTElCQ1hYX0lTX0FHR1JFR0FURQorICAgICAgdGhyb3dfdmFsdWVfYmFzZSgpIDogX01faSgwKQorICAgICAgeyB0aHJvd19jb25kaXRpb25hbGx5KCk7IH0KKworICAgICAgdGhyb3dfdmFsdWVfYmFzZShjb25zdCB0aHJvd192YWx1ZV9iYXNlJiBfX3YpIDogX01faShfX3YuX01faSkKKyAgICAgIHsgdGhyb3dfY29uZGl0aW9uYWxseSgpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLyBTaGFsbCBub3QgdGhyb3cuCisgICAgICB0aHJvd192YWx1ZV9iYXNlKHRocm93X3ZhbHVlX2Jhc2UmJikgPSBkZWZhdWx0OworI2VuZGlmCisKKyAgICAgIGV4cGxpY2l0IHRocm93X3ZhbHVlX2Jhc2UoY29uc3Qgc3RkOjpzaXplX3QgX19pKSA6IF9NX2koX19pKQorICAgICAgeyB0aHJvd19jb25kaXRpb25hbGx5KCk7IH0KKyNlbmRpZgorCisgICAgICB0aHJvd192YWx1ZV9iYXNlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHRocm93X3ZhbHVlX2Jhc2UmIF9fdikKKyAgICAgIHsKKwl0aHJvd19jb25kaXRpb25hbGx5KCk7CisJX01faSA9IF9fdi5fTV9pOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIFNoYWxsIG5vdCB0aHJvdy4KKyAgICAgIHRocm93X3ZhbHVlX2Jhc2UmCisgICAgICBvcGVyYXRvcj0odGhyb3dfdmFsdWVfYmFzZSYmKSA9IGRlZmF1bHQ7CisjZW5kaWYKKworICAgICAgdGhyb3dfdmFsdWVfYmFzZSYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCXRocm93X2NvbmRpdGlvbmFsbHkoKTsKKwkrK19NX2k7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbmQ+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2EsIHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2IpCisgICAgeworICAgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiB0aHJvd192YWx1ZTsKKyAgICAgIHRocm93X3ZhbHVlOjp0aHJvd19jb25kaXRpb25hbGx5KCk7CisgICAgICB0aHJvd192YWx1ZSBvcmlnKF9fYSk7CisgICAgICBfX2EgPSBfX2I7CisgICAgICBfX2IgPSBvcmlnOworICAgIH0KKworICAvLyBHZW5lcmFsIGluc3RhbnRpYWJsZSB0eXBlcyByZXF1aXJlbWVudHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db25kPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19hLAorCSAgICAgICBjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19iKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4gdGhyb3dfdmFsdWU7CisgICAgICB0aHJvd192YWx1ZTo6dGhyb3dfY29uZGl0aW9uYWxseSgpOworICAgICAgYm9vbCBfX3JldCA9IF9fYS5fTV9pID09IF9fYi5fTV9pOworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29uZD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19hLAorCSAgICAgIGNvbnN0IHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2IpCisgICAgeworICAgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiB0aHJvd192YWx1ZTsKKyAgICAgIHRocm93X3ZhbHVlOjp0aHJvd19jb25kaXRpb25hbGx5KCk7CisgICAgICBib29sIF9fcmV0ID0gX19hLl9NX2kgPCBfX2IuX01faTsKKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgLy8gTnVtZXJpYyBhbGdvcml0aG1zIGluc3RhbnRpYWJsZSB0eXBlcyByZXF1aXJlbWVudHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db25kPgorICAgIGlubGluZSB0aHJvd192YWx1ZV9iYXNlPF9Db25kPgorICAgIG9wZXJhdG9yKyhjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19hLAorCSAgICAgIGNvbnN0IHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2IpCisgICAgeworICAgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiB0aHJvd192YWx1ZTsKKyAgICAgIHRocm93X3ZhbHVlOjp0aHJvd19jb25kaXRpb25hbGx5KCk7CisgICAgICB0aHJvd192YWx1ZSBfX3JldChfX2EuX01faSArIF9fYi5fTV9pKTsKKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbmQ+CisgICAgaW5saW5lIHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+CisgICAgb3BlcmF0b3ItKGNvbnN0IHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+JiBfX2EsCisJICAgICAgY29uc3QgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4mIF9fYikKKyAgICB7CisgICAgICB0eXBlZGVmIHRocm93X3ZhbHVlX2Jhc2U8X0NvbmQ+IHRocm93X3ZhbHVlOworICAgICAgdGhyb3dfdmFsdWU6OnRocm93X2NvbmRpdGlvbmFsbHkoKTsKKyAgICAgIHRocm93X3ZhbHVlIF9fcmV0KF9fYS5fTV9pIC0gX19iLl9NX2kpOworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29uZD4KKyAgICBpbmxpbmUgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4KKyAgICBvcGVyYXRvciooY29uc3QgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4mIF9fYSwKKwkgICAgICBjb25zdCB0aHJvd192YWx1ZV9iYXNlPF9Db25kPiYgX19iKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdGhyb3dfdmFsdWVfYmFzZTxfQ29uZD4gdGhyb3dfdmFsdWU7CisgICAgICB0aHJvd192YWx1ZTo6dGhyb3dfY29uZGl0aW9uYWxseSgpOworICAgICAgdGhyb3dfdmFsdWUgX19yZXQoX19hLl9NX2kgKiBfX2IuX01faSk7CisgICAgICByZXR1cm4gX19yZXQ7CisgICAgfQorCisKKyAgLy8vIFR5cGUgdGhyb3dpbmcgdmlhIGxpbWl0IGNvbmRpdGlvbi4KKyAgc3RydWN0IHRocm93X3ZhbHVlX2xpbWl0IDogcHVibGljIHRocm93X3ZhbHVlX2Jhc2U8bGltaXRfY29uZGl0aW9uPgorICB7CisgICAgdHlwZWRlZiB0aHJvd192YWx1ZV9iYXNlPGxpbWl0X2NvbmRpdGlvbj4gYmFzZV90eXBlOworCisjaWZuZGVmIF9HTElCQ1hYX0lTX0FHR1JFR0FURQorICAgIHRocm93X3ZhbHVlX2xpbWl0KCkgeyB9CisKKyAgICB0aHJvd192YWx1ZV9saW1pdChjb25zdCB0aHJvd192YWx1ZV9saW1pdCYgX19vdGhlcikKKyAgICA6IGJhc2VfdHlwZShfX290aGVyLl9NX2kpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRocm93X3ZhbHVlX2xpbWl0KHRocm93X3ZhbHVlX2xpbWl0JiYpID0gZGVmYXVsdDsKKyNlbmRpZgorCisgICAgZXhwbGljaXQgdGhyb3dfdmFsdWVfbGltaXQoY29uc3Qgc3RkOjpzaXplX3QgX19pKSA6IGJhc2VfdHlwZShfX2kpIHsgfQorI2VuZGlmCisKKyAgICB0aHJvd192YWx1ZV9saW1pdCYKKyAgICBvcGVyYXRvcj0oY29uc3QgdGhyb3dfdmFsdWVfbGltaXQmIF9fb3RoZXIpCisgICAgeworICAgICAgYmFzZV90eXBlOjpvcGVyYXRvcj0oX19vdGhlcik7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRocm93X3ZhbHVlX2xpbWl0JgorICAgIG9wZXJhdG9yPSh0aHJvd192YWx1ZV9saW1pdCYmKSA9IGRlZmF1bHQ7CisjZW5kaWYKKyAgfTsKKworICAvLy8gVHlwZSB0aHJvd2luZyB2aWEgcmFuZG9tIGNvbmRpdGlvbi4KKyAgc3RydWN0IHRocm93X3ZhbHVlX3JhbmRvbSA6IHB1YmxpYyB0aHJvd192YWx1ZV9iYXNlPHJhbmRvbV9jb25kaXRpb24+CisgIHsKKyAgICB0eXBlZGVmIHRocm93X3ZhbHVlX2Jhc2U8cmFuZG9tX2NvbmRpdGlvbj4gYmFzZV90eXBlOworCisjaWZuZGVmIF9HTElCQ1hYX0lTX0FHR1JFR0FURQorICAgIHRocm93X3ZhbHVlX3JhbmRvbSgpIHsgfQorCisgICAgdGhyb3dfdmFsdWVfcmFuZG9tKGNvbnN0IHRocm93X3ZhbHVlX3JhbmRvbSYgX19vdGhlcikKKyAgICA6IGJhc2VfdHlwZShfX290aGVyLl9NX2kpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIHRocm93X3ZhbHVlX3JhbmRvbSh0aHJvd192YWx1ZV9yYW5kb20mJikgPSBkZWZhdWx0OworI2VuZGlmCisKKyAgICBleHBsaWNpdCB0aHJvd192YWx1ZV9yYW5kb20oY29uc3Qgc3RkOjpzaXplX3QgX19pKSA6IGJhc2VfdHlwZShfX2kpIHsgfQorI2VuZGlmCisKKyAgICB0aHJvd192YWx1ZV9yYW5kb20mCisgICAgb3BlcmF0b3I9KGNvbnN0IHRocm93X3ZhbHVlX3JhbmRvbSYgX19vdGhlcikKKyAgICB7CisgICAgICBiYXNlX3R5cGU6Om9wZXJhdG9yPShfX290aGVyKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgdGhyb3dfdmFsdWVfcmFuZG9tJgorICAgIG9wZXJhdG9yPSh0aHJvd192YWx1ZV9yYW5kb20mJikgPSBkZWZhdWx0OworI2VuZGlmCisgIH07CisKKworICAvKioKKyAgICogIEBicmllZiBBbGxvY2F0b3IgY2xhc3Mgd2l0aCBsb2dnaW5nIGFuZCBleGNlcHRpb24gZ2VuZXJhdGlvbiBjb250cm9sLgorICAgKiBJbnRlbmRlZCB0byBiZSB1c2VkIGFzIGFuIGFsbG9jYXRvcl90eXBlIGluIHRlbXBsYXRpemVkIGNvZGUuCisgICAqICBAaW5ncm91cCBhbGxvY2F0b3JzCisgICAqCisgICAqICBOb3RlOiBEZWFsbG9jYXRlIG5vdCBhbGxvd2VkIHRvIHRocm93LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29uZD4KKyAgICBjbGFzcyB0aHJvd19hbGxvY2F0b3JfYmFzZQorICAgIDogcHVibGljIGFubm90YXRlX2Jhc2UsIHB1YmxpYyBfQ29uZAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNpemVfdCAJCQkJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgCQkJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBfVHAgCQkJCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIAkJCXBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIAkJY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgCQkJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAJCWNvbnN0X3JlZmVyZW5jZTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxMDMuIHN0ZDo6YWxsb2NhdG9yIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50CisgICAgICB0eXBlZGVmIHN0ZDo6dHJ1ZV90eXBlIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50OworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfQ29uZAkJCQljb25kaXRpb25fdHlwZTsKKworICAgICAgc3RkOjphbGxvY2F0b3I8dmFsdWVfdHlwZT4gCQlfTV9hbGxvY2F0b3I7CisKKyAgICAgIHVzaW5nIGNvbmRpdGlvbl90eXBlOjp0aHJvd19jb25kaXRpb25hbGx5OworCisgICAgcHVibGljOgorICAgICAgc2l6ZV90eXBlCisgICAgICBtYXhfc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX01fYWxsb2NhdG9yLm1heF9zaXplKCk7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3gpOyB9CisKKyAgICAgIGNvbnN0X3BvaW50ZXIKKyAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX194KTsgfQorCisgICAgICBwb2ludGVyCisgICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBzdGQ6OmFsbG9jYXRvcjx2b2lkPjo6Y29uc3RfcG9pbnRlciBoaW50ID0gMCkKKyAgICAgIHsKKwlpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKKwkgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKKworCXRocm93X2NvbmRpdGlvbmFsbHkoKTsKKwlwb2ludGVyIGNvbnN0IGEgPSBfTV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uLCBoaW50KTsKKwlpbnNlcnQoYSwgc2l6ZW9mKHZhbHVlX3R5cGUpICogX19uKTsKKwlyZXR1cm4gYTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQKKyAgICAgICAgY29uc3RydWN0KF9VcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKKwl7IHJldHVybiBfTV9hbGxvY2F0b3IuY29uc3RydWN0KF9fcCwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHZvaWQgCisgICAgICAgIGRlc3Ryb3koX1VwKiBfX3ApCisgICAgICAgIHsgX01fYWxsb2NhdG9yLmRlc3Ryb3koX19wKTsgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgdmFsdWVfdHlwZSYgdmFsKQorICAgICAgeyByZXR1cm4gX01fYWxsb2NhdG9yLmNvbnN0cnVjdChfX3AsIHZhbCk7IH0KKworICAgICAgdm9pZAorICAgICAgZGVzdHJveShwb2ludGVyIF9fcCkKKyAgICAgIHsgX01fYWxsb2NhdG9yLmRlc3Ryb3koX19wKTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCisgICAgICB7CisJZXJhc2UoX19wLCBzaXplb2YodmFsdWVfdHlwZSkgKiBfX24pOworCV9NX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2hlY2tfYWxsb2NhdGVkKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCXNpemVfdHlwZSBfX3QgPSBzaXplb2YodmFsdWVfdHlwZSkgKiBfX247CisJYW5ub3RhdGVfYmFzZTo6Y2hlY2tfYWxsb2NhdGVkKF9fcCwgX190KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2hlY2tfYWxsb2NhdGVkKHNpemVfdHlwZSBfX24pCisgICAgICB7IGFubm90YXRlX2Jhc2U6OmNoZWNrX2FsbG9jYXRlZChfX24pOyB9CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29uZD4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdGhyb3dfYWxsb2NhdG9yX2Jhc2U8X1RwLCBfQ29uZD4mLAorCSAgICAgICBjb25zdCB0aHJvd19hbGxvY2F0b3JfYmFzZTxfVHAsIF9Db25kPiYpCisgICAgeyByZXR1cm4gdHJ1ZTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbmQ+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHRocm93X2FsbG9jYXRvcl9iYXNlPF9UcCwgX0NvbmQ+JiwKKwkgICAgICAgY29uc3QgdGhyb3dfYWxsb2NhdG9yX2Jhc2U8X1RwLCBfQ29uZD4mKQorICAgIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgLy8vIEFsbG9jYXRvciB0aHJvd2luZyB2aWEgbGltaXQgY29uZGl0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHRocm93X2FsbG9jYXRvcl9saW1pdAorICAgIDogcHVibGljIHRocm93X2FsbG9jYXRvcl9iYXNlPF9UcCwgbGltaXRfY29uZGl0aW9uPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJc3RydWN0IHJlYmluZAorCXsgdHlwZWRlZiB0aHJvd19hbGxvY2F0b3JfbGltaXQ8X1RwMT4gb3RoZXI7IH07CisKKyAgICAgIHRocm93X2FsbG9jYXRvcl9saW1pdCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgICAgdGhyb3dfYWxsb2NhdG9yX2xpbWl0KGNvbnN0IHRocm93X2FsbG9jYXRvcl9saW1pdCYpCisgICAgICBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJdGhyb3dfYWxsb2NhdG9yX2xpbWl0KGNvbnN0IHRocm93X2FsbG9jYXRvcl9saW1pdDxfVHAxPiYpCisJX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorCisgICAgICB+dGhyb3dfYWxsb2NhdG9yX2xpbWl0KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorICAgIH07CisKKyAgLy8vIEFsbG9jYXRvciB0aHJvd2luZyB2aWEgcmFuZG9tIGNvbmRpdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCB0aHJvd19hbGxvY2F0b3JfcmFuZG9tCisgICAgOiBwdWJsaWMgdGhyb3dfYWxsb2NhdG9yX2Jhc2U8X1RwLCByYW5kb21fY29uZGl0aW9uPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisJc3RydWN0IHJlYmluZAorCXsgdHlwZWRlZiB0aHJvd19hbGxvY2F0b3JfcmFuZG9tPF9UcDE+IG90aGVyOyB9OworCisgICAgICB0aHJvd19hbGxvY2F0b3JfcmFuZG9tKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorCisgICAgICB0aHJvd19hbGxvY2F0b3JfcmFuZG9tKGNvbnN0IHRocm93X2FsbG9jYXRvcl9yYW5kb20mKQorICAgICAgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorCXRocm93X2FsbG9jYXRvcl9yYW5kb20oY29uc3QgdGhyb3dfYWxsb2NhdG9yX3JhbmRvbTxfVHAxPiYpCisJX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQorCisgICAgICB+dGhyb3dfYWxsb2NhdG9yX3JhbmRvbSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisKKyMgaW5jbHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2guaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBvZiBzdGQ6Omhhc2ggZm9yIF9fZ251X2N4eDo6dGhyb3dfdmFsdWVfbGltaXQuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxfX2dudV9jeHg6OnRocm93X3ZhbHVlX2xpbWl0PgorICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248X19nbnVfY3h4Ojp0aHJvd192YWx1ZV9saW1pdCwgc2l6ZV90PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX2dudV9jeHg6OnRocm93X3ZhbHVlX2xpbWl0JiBfX3ZhbCkgY29uc3QKKyAgICAgIHsKKwlzdGQ6Omhhc2g8c3RkOjpzaXplX3Q+IF9faDsKKwlzaXplX3QgX19yZXN1bHQgPSBfX2goX192YWwuX01faSk7CisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgfQorICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mIHN0ZDo6aGFzaCBmb3IgX19nbnVfY3h4Ojp0aHJvd192YWx1ZV9saW1pdC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPF9fZ251X2N4eDo6dGhyb3dfdmFsdWVfcmFuZG9tPgorICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248X19nbnVfY3h4Ojp0aHJvd192YWx1ZV9yYW5kb20sIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX19nbnVfY3h4Ojp0aHJvd192YWx1ZV9yYW5kb20mIF9fdmFsKSBjb25zdAorICAgICAgeworCXN0ZDo6aGFzaDxzdGQ6OnNpemVfdD4gX19oOworCXNpemVfdCBfX3Jlc3VsdCA9IF9faChfX3ZhbC5fTV9pKTsKKwlyZXR1cm4gX19yZXN1bHQ7CisgICAgICB9CisgICAgfTsKK30gLy8gZW5kIG5hbWVzcGFjZSBzdGQKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3R5cGVfdHJhaXRzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC90eXBlX3RyYWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODQwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC90eXBlX3RyYWl0cy5oCkBAIC0wLDAgKzEsMjEzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3R5cGVfdHJhaXRzLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9FWFRfVFlQRV9UUkFJVFMKKyNkZWZpbmUgX0VYVF9UWVBFX1RSQUlUUyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9jcHBfdHlwZV90cmFpdHMuaD4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIERlZmluZSBhIG5lc3RlZCB0eXBlIGlmIHNvbWUgcHJlZGljYXRlIGhvbGRzLgorICB0ZW1wbGF0ZTxib29sLCB0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19lbmFibGVfaWYgCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19lbmFibGVfaWY8dHJ1ZSwgX1RwPgorICAgIHsgdHlwZWRlZiBfVHAgX190eXBlOyB9OworCisKKyAgLy8gQ29uZGl0aW9uYWwgZXhwcmVzc2lvbiBmb3IgdHlwZXMuIElmIHRydWUsIGZpcnN0LCBpZiBmYWxzZSwgc2Vjb25kLgorICB0ZW1wbGF0ZTxib29sIF9Db25kLCB0eXBlbmFtZSBfSWZ0cnVlLCB0eXBlbmFtZSBfSWZmYWxzZT4KKyAgICBzdHJ1Y3QgX19jb25kaXRpb25hbF90eXBlCisgICAgeyB0eXBlZGVmIF9JZnRydWUgX190eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JZnRydWUsIHR5cGVuYW1lIF9JZmZhbHNlPgorICAgIHN0cnVjdCBfX2NvbmRpdGlvbmFsX3R5cGU8ZmFsc2UsIF9JZnRydWUsIF9JZmZhbHNlPgorICAgIHsgdHlwZWRlZiBfSWZmYWxzZSBfX3R5cGU7IH07CisKKworICAvLyBHaXZlbiBhbiBpbnRlZ3JhbCBidWlsdGluIHR5cGUsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB1bnNpZ25lZCB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX3Vuc2lnbmVkCisgICAgeyAKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2VuYWJsZV9pZjxzdGQ6Ol9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCBfVHA+IF9faWZfdHlwZTsKKyAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pZl90eXBlOjpfX3R5cGUgX190eXBlOyAKKyAgICB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19hZGRfdW5zaWduZWQ8Y2hhcj4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2FkZF91bnNpZ25lZDxzaWduZWQgY2hhcj4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2FkZF91bnNpZ25lZDxzaG9ydD4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19hZGRfdW5zaWduZWQ8aW50PgorICAgIHsgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19hZGRfdW5zaWduZWQ8bG9uZz4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2FkZF91bnNpZ25lZDxsb25nIGxvbmc+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3R5cGU7IH07CisKKyAgLy8gRGVjbGFyZSBidXQgZG9uJ3QgZGVmaW5lLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fYWRkX3Vuc2lnbmVkPGJvb2w+OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19hZGRfdW5zaWduZWQ8d2NoYXJfdD47CisKKworICAvLyBHaXZlbiBhbiBpbnRlZ3JhbCBidWlsdGluIHR5cGUsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBzaWduZWQgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX3JlbW92ZV91bnNpZ25lZAorICAgIHsgCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19lbmFibGVfaWY8c3RkOjpfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgX1RwPiBfX2lmX3R5cGU7CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faWZfdHlwZTo6X190eXBlIF9fdHlwZTsgCisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcmVtb3ZlX3Vuc2lnbmVkPGNoYXI+CisgICAgeyB0eXBlZGVmIHNpZ25lZCBjaGFyIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcmVtb3ZlX3Vuc2lnbmVkPHVuc2lnbmVkIGNoYXI+CisgICAgeyB0eXBlZGVmIHNpZ25lZCBjaGFyIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcmVtb3ZlX3Vuc2lnbmVkPHVuc2lnbmVkIHNob3J0PgorICAgIHsgdHlwZWRlZiBzaG9ydCBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3JlbW92ZV91bnNpZ25lZDx1bnNpZ25lZCBpbnQ+CisgICAgeyB0eXBlZGVmIGludCBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3JlbW92ZV91bnNpZ25lZDx1bnNpZ25lZCBsb25nPgorICAgIHsgdHlwZWRlZiBsb25nIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcmVtb3ZlX3Vuc2lnbmVkPHVuc2lnbmVkIGxvbmcgbG9uZz4KKyAgICB7IHR5cGVkZWYgbG9uZyBsb25nIF9fdHlwZTsgfTsKKworICAvLyBEZWNsYXJlIGJ1dCBkb24ndCBkZWZpbmUuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19yZW1vdmVfdW5zaWduZWQ8Ym9vbD47CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3JlbW92ZV91bnNpZ25lZDx3Y2hhcl90PjsKKworCisgIC8vIEZvciB1c2UgaW4gc3RyaW5nIGFuZCB2c3RyaW5nLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9faXNfbnVsbF9wb2ludGVyKF9UeXBlKiBfX3B0cikKKyAgICB7IHJldHVybiBfX3B0ciA9PSAwOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2lzX251bGxfcG9pbnRlcihfVHlwZSkKKyAgICB7IHJldHVybiBmYWxzZTsgfQorCisKKyAgLy8gRm9yIGNvbXBsZXggYW5kIGNtYXRoCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbCA9IHN0ZDo6X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWU+CisgICAgc3RydWN0IF9fcHJvbW90ZQorICAgIHsgdHlwZWRlZiBkb3VibGUgX190eXBlOyB9OworCisgIC8vIE5vIG5lc3RlZCBfX3R5cGUgbWVtYmVyIGZvciBub24taW50ZWdlciBub24tZmxvYXRpbmcgcG9pbnQgdHlwZXMsCisgIC8vIGFsbG93cyB0aGlzIHR5cGUgdG8gYmUgdXNlZCBmb3IgU0ZJTkFFIHRvIGNvbnN0cmFpbiBvdmVybG9hZHMgaW4KKyAgLy8gPGNtYXRoPiBhbmQgPGNvbXBsZXg+IHRvIG9ubHkgdGhlIGludGVuZGVkIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fcHJvbW90ZTxfVHAsIGZhbHNlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcHJvbW90ZTxsb25nIGRvdWJsZT4KKyAgICB7IHR5cGVkZWYgbG9uZyBkb3VibGUgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19wcm9tb3RlPGRvdWJsZT4KKyAgICB7IHR5cGVkZWYgZG91YmxlIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcHJvbW90ZTxmbG9hdD4KKyAgICB7IHR5cGVkZWYgZmxvYXQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwLAorICAgICAgICAgICB0eXBlbmFtZSBfVHAyID0gdHlwZW5hbWUgX19wcm9tb3RlPF9UcD46Ol9fdHlwZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX1VwMiA9IHR5cGVuYW1lIF9fcHJvbW90ZTxfVXA+OjpfX3R5cGU+CisgICAgc3RydWN0IF9fcHJvbW90ZV8yCisgICAgeworICAgICAgdHlwZWRlZiBfX3R5cGVvZl9fKF9UcDIoKSArIF9VcDIoKSkgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXAsIHR5cGVuYW1lIF9WcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX1RwMiA9IHR5cGVuYW1lIF9fcHJvbW90ZTxfVHA+OjpfX3R5cGUsCisgICAgICAgICAgIHR5cGVuYW1lIF9VcDIgPSB0eXBlbmFtZSBfX3Byb21vdGU8X1VwPjo6X190eXBlLAorICAgICAgICAgICB0eXBlbmFtZSBfVnAyID0gdHlwZW5hbWUgX19wcm9tb3RlPF9WcD46Ol9fdHlwZT4KKyAgICBzdHJ1Y3QgX19wcm9tb3RlXzMKKyAgICB7CisgICAgICB0eXBlZGVmIF9fdHlwZW9mX18oX1RwMigpICsgX1VwMigpICsgX1ZwMigpKSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX1ZwLCB0eXBlbmFtZSBfV3AsCisgICAgICAgICAgIHR5cGVuYW1lIF9UcDIgPSB0eXBlbmFtZSBfX3Byb21vdGU8X1RwPjo6X190eXBlLAorICAgICAgICAgICB0eXBlbmFtZSBfVXAyID0gdHlwZW5hbWUgX19wcm9tb3RlPF9VcD46Ol9fdHlwZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ZwMiA9IHR5cGVuYW1lIF9fcHJvbW90ZTxfVnA+OjpfX3R5cGUsCisgICAgICAgICAgIHR5cGVuYW1lIF9XcDIgPSB0eXBlbmFtZSBfX3Byb21vdGU8X1dwPjo6X190eXBlPgorICAgIHN0cnVjdCBfX3Byb21vdGVfNAorICAgIHsKKyAgICAgIHR5cGVkZWYgX190eXBlb2ZfXyhfVHAyKCkgKyBfVXAyKCkgKyBfVnAyKCkgKyBfV3AyKCkpIF9fdHlwZTsKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3R5cGVsaXN0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC90eXBlbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NmI5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC90eXBlbGlzdC5oCkBAIC0wLDAgKzEsNTU5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDQgQW1pIFRhdm9yeSBhbmQgVmxhZGltaXIgRHJlaXppbiwgSUJNLUhSTC4KKworLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgc2VsbCwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorLy8gaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kCisvLyB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIE5vbmUgb2YKKy8vIHRoZSBhYm92ZSBhdXRob3JzLCBub3IgSUJNIEhhaWZhIFJlc2VhcmNoIExhYm9yYXRvcmllcywgbWFrZSBhbnkKKy8vIHJlcHJlc2VudGF0aW9uIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKy8vIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKKy8qKgorICogIEBmaWxlIGV4dC90eXBlbGlzdC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKgorICogIENvbnRhaW5zIHR5cGVsaXN0X2NoYWluIGRlZmluaXRpb25zLgorICogIFR5cGVsaXN0cyBhcmUgYW4gaWRlYSBieSBBbmRyZWkgQWxleGFuZHJlc2N1LgorICovCisKKyNpZm5kZWYgX1RZUEVMSVNUX0gKKyNkZWZpbmUgX1RZUEVMSVNUX0ggMQorCisjaW5jbHVkZSA8ZXh0L3R5cGVfdHJhaXRzLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworLyoqIEBuYW1lc3BhY2UgX19nbnVfY3h4Ojp0eXBlbGlzdAorICogIEBicmllZiBHTlUgdHlwZWxpc3QgZXh0ZW5zaW9ucyBmb3IgcHVibGljIGNvbXBpbGUtdGltZSB1c2UuCisqLworbmFtZXNwYWNlIHR5cGVsaXN0Cit7CisgIHN0cnVjdCBudWxsX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFJvb3Q+CisgICAgc3RydWN0IG5vZGUKKyAgICB7CisgICAgICB0eXBlZGVmIFJvb3QgCXJvb3Q7CisgICAgfTsKKworICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBmdW5jdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQsIHR5cGVuYW1lIFR5cGVsaXN0PgorICAgIHN0cnVjdCBjaGFpbgorICAgIHsKKyAgICAgIHR5cGVkZWYgSGQgCWhlYWQ7CisgICAgICB0eXBlZGVmIFR5cGVsaXN0IAl0YWlsOworICAgIH07CisKKyAgLy8gQXBwbHkgYWxsIHR5cGVsaXN0IHR5cGVzIHRvIHVuYXJ5IGZ1bmN0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEZuLCB0eXBlbmFtZSBUeXBlbGlzdD4KKyAgICB2b2lkCisgICAgYXBwbHkoRm4mLCBUeXBlbGlzdCk7CisKKyAgLy8vIEFwcGx5IGFsbCB0eXBlbGlzdCB0eXBlcyB0byBnZW5lcmF0b3IgZnVuY3Rvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgR24sIHR5cGVuYW1lIFR5cGVsaXN0PgorICAgIHZvaWQKKyAgICBhcHBseV9nZW5lcmF0b3IoR24mLCBUeXBlbGlzdCk7CisKKyAgLy8gQXBwbHkgYWxsIHR5cGVsaXN0IHR5cGVzIGFuZCB2YWx1ZXMgdG8gZ2VuZXJhdG9yIGZ1bmN0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIEduLCB0eXBlbmFtZSBUeXBlbGlzdFQsIHR5cGVuYW1lIFR5cGVsaXN0Vj4KKyAgICB2b2lkCisgICAgYXBwbHlfZ2VuZXJhdG9yKEduJiwgVHlwZWxpc3RULCBUeXBlbGlzdFYpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0MCwgdHlwZW5hbWUgVHlwZWxpc3QxPgorICAgIHN0cnVjdCBhcHBlbmQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfVHlwZWxpc3Q+CisgICAgc3RydWN0IGFwcGVuZF90eXBlbGlzdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdCwgdHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgY29udGFpbnM7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3QsIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFByZWQ+CisgICAgc3RydWN0IGZpbHRlcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdCwgaW50IGk+CisgICAgc3RydWN0IGF0X2luZGV4OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0LCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBUcmFuc2Zvcm0+CisgICAgc3RydWN0IHRyYW5zZm9ybTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdF9UeXBlbGlzdD4KKyAgICBzdHJ1Y3QgZmxhdHRlbjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdD4KKyAgICBzdHJ1Y3QgZnJvbV9maXJzdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMT4KKyAgICBzdHJ1Y3QgY3JlYXRlMTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgc3RydWN0IGNyZWF0ZTI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMz4KKyAgICBzdHJ1Y3QgY3JlYXRlMzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUND4KKyAgICBzdHJ1Y3QgY3JlYXRlNDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDU+CisgICAgc3RydWN0IGNyZWF0ZTU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywKKwkgICB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2PgorICAgIHN0cnVjdCBjcmVhdGU2OworfSAvLyBuYW1lc3BhY2UgdHlwZWxpc3QKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworbmFtZXNwYWNlIHR5cGVsaXN0Cit7CituYW1lc3BhY2UgZGV0YWlsCit7CisgIHRlbXBsYXRlPHR5cGVuYW1lIEZuLCB0eXBlbmFtZSBUeXBlbGlzdF9DaGFpbj4KKyAgICBzdHJ1Y3QgYXBwbHlfOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEZuLCB0eXBlbmFtZSBIZCwgdHlwZW5hbWUgVGw+CisgICAgc3RydWN0IGFwcGx5XzxGbiwgY2hhaW48SGQsIFRsPiA+CisgICAgeworICAgICAgdm9pZAorICAgICAgb3BlcmF0b3IoKShGbiYgZikKKyAgICAgIHsKKwlmLm9wZXJhdG9yKCkoSGQoKSk7CisJYXBwbHlfPEZuLCBUbD4gbmV4dDsKKwluZXh0KGYpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgRm4+CisgICAgc3RydWN0IGFwcGx5XzxGbiwgbnVsbF90eXBlPgorICAgIHsKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoRm4mKSB7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEduLCB0eXBlbmFtZSBUeXBlbGlzdF9DaGFpbj4KKyAgICBzdHJ1Y3QgYXBwbHlfZ2VuZXJhdG9yMV87CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgR24sIHR5cGVuYW1lIEhkLCB0eXBlbmFtZSBUbD4KKyAgICBzdHJ1Y3QgYXBwbHlfZ2VuZXJhdG9yMV88R24sIGNoYWluPEhkLCBUbD4gPgorICAgIHsKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoR24mIGcpCisgICAgICB7CisJZy50ZW1wbGF0ZSBvcGVyYXRvcigpPEhkPigpOworCWFwcGx5X2dlbmVyYXRvcjFfPEduLCBUbD4gbmV4dDsKKwluZXh0KGcpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgR24+CisgICAgc3RydWN0IGFwcGx5X2dlbmVyYXRvcjFfPEduLCBudWxsX3R5cGU+CisgICAgeworICAgICAgdm9pZAorICAgICAgb3BlcmF0b3IoKShHbiYpIHsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgR24sIHR5cGVuYW1lIFR5cGVsaXN0VF9DaGFpbiwgdHlwZW5hbWUgVHlwZWxpc3RWX0NoYWluPgorICAgIHN0cnVjdCBhcHBseV9nZW5lcmF0b3IyXzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBHbiwgdHlwZW5hbWUgSGQxLCB0eXBlbmFtZSBUbFQsIHR5cGVuYW1lIEhkMiwgdHlwZW5hbWUgVGxWPgorICAgIHN0cnVjdCBhcHBseV9nZW5lcmF0b3IyXzxHbiwgY2hhaW48SGQxLCBUbFQ+LCBjaGFpbjxIZDIsIFRsVj4gPgorICAgIHsKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoR24mIGcpCisgICAgICB7CisJZy50ZW1wbGF0ZSBvcGVyYXRvcigpPEhkMSwgSGQyPigpOworCWFwcGx5X2dlbmVyYXRvcjJfPEduLCBUbFQsIFRsVj4gbmV4dDsKKwluZXh0KGcpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgR24+CisgICAgc3RydWN0IGFwcGx5X2dlbmVyYXRvcjJfPEduLCBudWxsX3R5cGUsIG51bGxfdHlwZT4KKyAgICB7CisgICAgICB2b2lkCisgICAgICBvcGVyYXRvcigpKEduJikgeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdF9DaGFpbjAsIHR5cGVuYW1lIFR5cGVsaXN0X0NoYWluMT4KKyAgICBzdHJ1Y3QgYXBwZW5kXzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBIZCwgdHlwZW5hbWUgVGwsIHR5cGVuYW1lIFR5cGVsaXN0X0NoYWluPgorICAgIHN0cnVjdCBhcHBlbmRfPGNoYWluPEhkLCBUbD4sIFR5cGVsaXN0X0NoYWluPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBhcHBlbmRfPFRsLCBUeXBlbGlzdF9DaGFpbj4gCQkJYXBwZW5kX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIGNoYWluPEhkLCB0eXBlbmFtZSBhcHBlbmRfdHlwZTo6dHlwZT4gCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfQ2hhaW4+CisgICAgc3RydWN0IGFwcGVuZF88bnVsbF90eXBlLCBUeXBlbGlzdF9DaGFpbj4KKyAgICB7CisgICAgICB0eXBlZGVmIFR5cGVsaXN0X0NoYWluIAkJCSAgICAgIAkJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0X0NoYWluPgorICAgIHN0cnVjdCBhcHBlbmRfPFR5cGVsaXN0X0NoYWluLCBudWxsX3R5cGU+CisgICAgeworICAgICAgdHlwZWRlZiBUeXBlbGlzdF9DaGFpbiAJCQkJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGFwcGVuZF88bnVsbF90eXBlLCBudWxsX3R5cGU+CisgICAgeworICAgICAgdHlwZWRlZiBudWxsX3R5cGUgCQkJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfVHlwZWxpc3RfQ2hhaW4+CisgICAgc3RydWN0IGFwcGVuZF90eXBlbGlzdF87CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQ+CisgICAgc3RydWN0IGFwcGVuZF90eXBlbGlzdF88Y2hhaW48SGQsIG51bGxfdHlwZT4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgY2hhaW48SGQsIG51bGxfdHlwZT4gCQkJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBIZCwgdHlwZW5hbWUgVGw+CisgICAgc3RydWN0IGFwcGVuZF90eXBlbGlzdF88Y2hhaW48IEhkLCBUbD4gPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBlbmRfdHlwZWxpc3RfPFRsPjo6dHlwZSAJCXJlc3RfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwZW5kPEhkLCBub2RlPHJlc3RfdHlwZT4gPjo6dHlwZTo6cm9vdAl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfQ2hhaW4sIHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNvbnRhaW5zXzsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBjb250YWluc188bnVsbF90eXBlLCBUPgorICAgIHsKKyAgICAgIGVudW0KKwl7CisJICB2YWx1ZSA9IGZhbHNlCisJfTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIEhkLCB0eXBlbmFtZSBUbCwgdHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgY29udGFpbnNfPGNoYWluPEhkLCBUbD4sIFQ+CisgICAgeworICAgICAgZW51bQorCXsKKwkgIHZhbHVlID0gY29udGFpbnNfPFRsLCBUPjo6dmFsdWUKKwl9OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVGwsIHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNvbnRhaW5zXzxjaGFpbjxULCBUbD4sIFQ+CisgICAgeworICAgICAgZW51bQorCXsKKwkgIHZhbHVlID0gdHJ1ZQorCX07CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdF9DaGFpbiwgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUHJlZD4KKyAgICBzdHJ1Y3QgY2hhaW5fZmlsdGVyXzsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQcmVkPgorICAgIHN0cnVjdCBjaGFpbl9maWx0ZXJfPG51bGxfdHlwZSwgUHJlZD4KKyAgICB7CisgICAgICB0eXBlZGVmIG51bGxfdHlwZSAJCQkJCXR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQsIHR5cGVuYW1lIFRsLCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQcmVkPgorICAgIHN0cnVjdCBjaGFpbl9maWx0ZXJfPGNoYWluPEhkLCBUbD4sIFByZWQ+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICBlbnVtCisJeworCSAgaW5jbHVkZV9oZCA9IFByZWQ8SGQ+Ojp2YWx1ZQorCX07CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hhaW5fZmlsdGVyXzxUbCwgUHJlZD46OnR5cGUgCQlyZXN0X3R5cGU7CisgICAgICB0eXBlZGVmIGNoYWluPEhkLCByZXN0X3R5cGU+IAkJCQljaGFpbl90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbmRpdGlvbmFsX3R5cGU8aW5jbHVkZV9oZCwgY2hhaW5fdHlwZSwgcmVzdF90eXBlPjo6X190eXBlIHR5cGU7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3RfQ2hhaW4sIGludCBpPgorICAgIHN0cnVjdCBjaGFpbl9hdF9pbmRleF87CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGQsIHR5cGVuYW1lIFRsPgorICAgIHN0cnVjdCBjaGFpbl9hdF9pbmRleF88Y2hhaW48SGQsIFRsPiwgMD4KKyAgICB7CisgICAgICB0eXBlZGVmIEhkIAkJCQkJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBIZCwgdHlwZW5hbWUgVGwsIGludCBpPgorICAgIHN0cnVjdCBjaGFpbl9hdF9pbmRleF88Y2hhaW48SGQsIFRsPiwgaT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNoYWluX2F0X2luZGV4XzxUbCwgaSAtIDE+Ojp0eXBlIAl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgVHlwZWxpc3RfQ2hhaW4sIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFRyYW5zZm9ybT4KKyAgICBzdHJ1Y3QgY2hhaW5fdHJhbnNmb3JtXzsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBUcmFuc2Zvcm0+CisgICAgc3RydWN0IGNoYWluX3RyYW5zZm9ybV88bnVsbF90eXBlLCBUcmFuc2Zvcm0+CisgICAgeworICAgICAgdHlwZWRlZiBudWxsX3R5cGUgCQkJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgSGQsIGNsYXNzIFRsLCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBUcmFuc2Zvcm0+CisgICAgc3RydWN0IGNoYWluX3RyYW5zZm9ybV88Y2hhaW48SGQsIFRsPiwgVHJhbnNmb3JtPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjaGFpbl90cmFuc2Zvcm1fPFRsLCBUcmFuc2Zvcm0+Ojp0eXBlIAlyZXN0X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYW5zZm9ybTxIZD46OnR5cGUgCQkJdHJhbnNmb3JtX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIGNoYWluPHRyYW5zZm9ybV90eXBlLCByZXN0X3R5cGU+IAkJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdF9UeXBlbGlzdF9DaGFpbj4KKyAgICBzdHJ1Y3QgY2hhaW5fZmxhdHRlbl87CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGRfVGw+CisgICAgc3RydWN0IGNoYWluX2ZsYXR0ZW5fPGNoYWluPEhkX1RsLCBudWxsX3R5cGU+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIEhkX1RsOjpyb290IAkJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgSGRfVHlwZWxpc3QsIGNsYXNzIFRsX1R5cGVsaXN0PgorICAgIHN0cnVjdCBjaGFpbl9mbGF0dGVuXzxjaGFpbjxIZF9UeXBlbGlzdCwgVGxfVHlwZWxpc3Q+ID4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY2hhaW5fZmxhdHRlbl88VGxfVHlwZWxpc3Q+Ojp0eXBlIAlyZXN0X3R5cGU7CisgICAgICB0eXBlZGVmIGFwcGVuZDxIZF9UeXBlbGlzdCwgbm9kZTxyZXN0X3R5cGU+ID4JCWFwcGVuZF90eXBlOworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXBwZW5kX3R5cGU6OnR5cGU6OnJvb3QgCQkJdHlwZTsKKyAgICB9OworfSAvLyBuYW1lc3BhY2UgZGV0YWlsCit9IC8vIG5hbWVzcGFjZSB0eXBlbGlzdAorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xKFgwKSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX19nbnVfY3h4Ojp0eXBlbGlzdDo6bnVsbF90eXBlPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjIoWDAsIFgxKSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xKFgxKSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMyhYMCwgWDEsIFgyKSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4yKFgxLCBYMikgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjQoWDAsIFgxLCBYMiwgWDMpIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNoYWluPFgwLCBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjMoWDEsIFgyLCBYMykgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjUoWDAsIFgxLCBYMiwgWDMsIFg0KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU40KFgxLCBYMiwgWDMsIFg0KSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlONihYMCwgWDEsIFgyLCBYMywgWDQsIFg1KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU41KFgxLCBYMiwgWDMsIFg0LCBYNSkgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjcoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYpIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNoYWluPFgwLCBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjYoWDEsIFgyLCBYMywgWDQsIFg1LCBYNikgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjgoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU43KFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3KSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOOShYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU44KFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCkgPgorI2RlZmluZSBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjEwKFgwLCBYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU45KFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDkpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xMShYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwKSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xMChYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5LCBYMTApID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xMihYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwLCBYMTEpIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNoYWluPFgwLCBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjExKFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExKSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTMoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIpIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNoYWluPFgwLCBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjEyKFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xNChYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwLCBYMTEsIFgxMiwgWDEzKSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xMyhYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5LCBYMTAsIFgxMSwgWDEyLCBYMTMpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xNShYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwLCBYMTEsIFgxMiwgWDEzLCBYMTQpIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNoYWluPFgwLCBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjE0KFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIsIFgxMywgWDE0KSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTYoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIsIFgxMywgWDE0LCBYMTUpIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNoYWluPFgwLCBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjE1KFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIsIFgxMywgWDE0LCBYMTUpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xNyhYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwLCBYMTEsIFgxMiwgWDEzLCBYMTQsIFgxNSwgWDE2KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xNihYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5LCBYMTAsIFgxMSwgWDEyLCBYMTMsIFgxNCwgWDE1LCBYMTYpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xOChYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwLCBYMTEsIFgxMiwgWDEzLCBYMTQsIFgxNSwgWDE2LCBYMTcpIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNoYWluPFgwLCBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjE3KFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIsIFgxMywgWDE0LCBYMTUsIFgxNiwgWDE3KSA+CisjZGVmaW5lIF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlOMTkoWDAsIFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIsIFgxMywgWDE0LCBYMTUsIFgxNiwgWDE3LCBYMTgpIF9fZ251X2N4eDo6dHlwZWxpc3Q6OmNoYWluPFgwLCBfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjE4KFgxLCBYMiwgWDMsIFg0LCBYNSwgWDYsIFg3LCBYOCwgWDksIFgxMCwgWDExLCBYMTIsIFgxMywgWDE0LCBYMTUsIFgxNiwgWDE3LCBYMTgpID4KKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4yMChYMCwgWDEsIFgyLCBYMywgWDQsIFg1LCBYNiwgWDcsIFg4LCBYOSwgWDEwLCBYMTEsIFgxMiwgWDEzLCBYMTQsIFgxNSwgWDE2LCBYMTcsIFgxOCwgWDE5KSBfX2dudV9jeHg6OnR5cGVsaXN0OjpjaGFpbjxYMCwgX0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4xOShYMSwgWDIsIFgzLCBYNCwgWDUsIFg2LCBYNywgWDgsIFg5LCBYMTAsIFgxMSwgWDEyLCBYMTMsIFgxNCwgWDE1LCBYMTYsIFgxNywgWDE4LCBYMTkpID4KKworbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCituYW1lc3BhY2UgdHlwZWxpc3QKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgRm4sIHR5cGVuYW1lIFR5cGVsaXN0PgorICAgIHZvaWQKKyAgICBhcHBseShGbiYgZm4sIFR5cGVsaXN0KQorICAgIHsKKyAgICAgIGRldGFpbDo6YXBwbHlfPEZuLCB0eXBlbmFtZSBUeXBlbGlzdDo6cm9vdD4gYTsKKyAgICAgIGEoZm4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBGbiwgdHlwZW5hbWUgVHlwZWxpc3Q+CisgICAgdm9pZAorICAgIGFwcGx5X2dlbmVyYXRvcihGbiYgZm4sIFR5cGVsaXN0KQorICAgIHsKKyAgICAgIGRldGFpbDo6YXBwbHlfZ2VuZXJhdG9yMV88Rm4sIHR5cGVuYW1lIFR5cGVsaXN0Ojpyb290PiBhOworICAgICAgYShmbik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIEZuLCB0eXBlbmFtZSBUeXBlbGlzdFQsIHR5cGVuYW1lIFR5cGVsaXN0Vj4KKyAgICB2b2lkCisgICAgYXBwbHlfZ2VuZXJhdG9yKEZuJiBmbiwgVHlwZWxpc3RULCBUeXBlbGlzdFYpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlbGlzdFQ6OnJvb3Qgcm9vdFQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0Vjo6cm9vdCByb290VjsKKyAgICAgIGRldGFpbDo6YXBwbHlfZ2VuZXJhdG9yMl88Rm4sIHJvb3RULCByb290Vj4gYTsKKyAgICAgIGEoZm4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdDAsIHR5cGVuYW1lIFR5cGVsaXN0MT4KKyAgICBzdHJ1Y3QgYXBwZW5kCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0MDo6cm9vdCAJCQkJcm9vdDBfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZWxpc3QxOjpyb290IAkJCQlyb290MV90eXBlOworICAgICAgdHlwZWRlZiBkZXRhaWw6OmFwcGVuZF88cm9vdDBfdHlwZSwgcm9vdDFfdHlwZT4gCQlhcHBlbmRfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgbm9kZTx0eXBlbmFtZSBhcHBlbmRfdHlwZTo6dHlwZT4gCQkJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGVsaXN0X1R5cGVsaXN0PgorICAgIHN0cnVjdCBhcHBlbmRfdHlwZWxpc3QKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZWxpc3RfVHlwZWxpc3Q6OnJvb3QgCQkgICAgICAJcm9vdF90eXBlOworICAgICAgdHlwZWRlZiBkZXRhaWw6OmFwcGVuZF90eXBlbGlzdF88cm9vdF90eXBlPiAJCWFwcGVuZF90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlPHR5cGVuYW1lIGFwcGVuZF90eXBlOjp0eXBlPiAJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3QsIHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGNvbnRhaW5zCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0Ojpyb290IAkJCQlyb290X3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICBlbnVtCisJeworCSAgdmFsdWUgPSBkZXRhaWw6OmNvbnRhaW5zXzxyb290X3R5cGUsIFQ+Ojp2YWx1ZQorCX07CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdCwgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUHJlZD4KKyAgICBzdHJ1Y3QgZmlsdGVyCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0Ojpyb290IAkJCQlyb290X3R5cGU7CisgICAgICB0eXBlZGVmIGRldGFpbDo6Y2hhaW5fZmlsdGVyXzxyb290X3R5cGUsIFByZWQ+IAkJZmlsdGVyX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIG5vZGU8dHlwZW5hbWUgZmlsdGVyX3R5cGU6OnR5cGU+IAkgICAgICAgCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3QsIGludCBpPgorICAgIHN0cnVjdCBhdF9pbmRleAorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlbGlzdDo6cm9vdCAJCQkJcm9vdF90eXBlOworICAgICAgdHlwZWRlZiBkZXRhaWw6OmNoYWluX2F0X2luZGV4Xzxyb290X3R5cGUsIGk+IAkJaW5kZXhfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaW5kZXhfdHlwZTo6dHlwZSAJCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZWxpc3QsIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFRyYW5zZm9ybT4KKyAgICBzdHJ1Y3QgdHJhbnNmb3JtCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVsaXN0Ojpyb290IAkJCQlyb290X3R5cGU7CisgICAgICB0eXBlZGVmIGRldGFpbDo6Y2hhaW5fdHJhbnNmb3JtXzxyb290X3R5cGUsIFRyYW5zZm9ybT4gCXRyYW5zZm9ybV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlPHR5cGVuYW1lIHRyYW5zZm9ybV90eXBlOjp0eXBlPiAJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdF9UeXBlbGlzdD4KKyAgICBzdHJ1Y3QgZmxhdHRlbgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlbGlzdF9UeXBlbGlzdDo6cm9vdCAJCSAgICAgIAlyb290X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6Y2hhaW5fZmxhdHRlbl88cm9vdF90eXBlPjo6dHlwZSAJZmxhdHRlbl90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlPGZsYXR0ZW5fdHlwZT4gCQkJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlbGlzdD4KKyAgICBzdHJ1Y3QgZnJvbV9maXJzdAorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdF9pbmRleDxUeXBlbGlzdCwgMD46OnR5cGUgCQlmaXJzdF90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBub2RlPGNoYWluPGZpcnN0X3R5cGUsIG51bGxfdHlwZT4gPiAJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMT4KKyAgICBzdHJ1Y3QgY3JlYXRlMQorICAgIHsKKyAgICAgIHR5cGVkZWYgbm9kZTxfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjEoVDEpPiAJCXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CisgICAgc3RydWN0IGNyZWF0ZTIKKyAgICB7CisgICAgICB0eXBlZGVmIG5vZGU8X0dMSUJDWFhfVFlQRUxJU1RfQ0hBSU4yKFQxLFQyKT4gCQl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMz4KKyAgICBzdHJ1Y3QgY3JlYXRlMworICAgIHsKKyAgICAgIHR5cGVkZWYgbm9kZTxfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjMoVDEsVDIsVDMpPgkJdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0PgorICAgIHN0cnVjdCBjcmVhdGU0CisgICAgeworICAgICAgdHlwZWRlZiBub2RlPF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlONChUMSxUMixUMyxUNCk+CXR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLAorCSAgIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNT4KKyAgICBzdHJ1Y3QgY3JlYXRlNQorICAgIHsKKyAgICAgIHR5cGVkZWYgbm9kZTxfR0xJQkNYWF9UWVBFTElTVF9DSEFJTjUoVDEsVDIsVDMsVDQsVDUpPgl0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywKKwkgICB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2PgorICAgIHN0cnVjdCBjcmVhdGU2CisgICAgeworICAgICAgdHlwZWRlZiBub2RlPF9HTElCQ1hYX1RZUEVMSVNUX0NIQUlONihUMSxUMixUMyxUNCxUNSxUNik+CXR5cGU7CisgICAgfTsKK30gLy8gbmFtZXNwYWNlIHR5cGVsaXN0CitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC92c3RyaW5nLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC92c3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2YTk5NgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3ZzdHJpbmcuaApAQCAtMCwwICsxLDI4NTQgQEAKKy8vIFZlcnNhdGlsZSBzdHJpbmcgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC92c3RyaW5nLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9WU1RSSU5HX0gKKyNkZWZpbmUgX1ZTVFJJTkdfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2VuZGlmCisKKyNpbmNsdWRlIDxleHQvdnN0cmluZ191dGlsLmg+CisjaW5jbHVkZSA8ZXh0L3JjX3N0cmluZ19iYXNlLmg+CisjaW5jbHVkZSA8ZXh0L3Nzb19zdHJpbmdfYmFzZS5oPgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAY2xhc3MgX192ZXJzYV9zdHJpbmcgdnN0cmluZy5oCisgICAqICBAYnJpZWYgIFRlbXBsYXRlIGNsYXNzIF9fdmVyc2Ffc3RyaW5nLiAKKyAgICogIEBpbmdyb3VwIGV4dGVuc2lvbnMKKyAgICoKKyAgICogIERhdGEgc3RydWN0dXJlIG1hbmFnaW5nIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzIGFuZAorICAgKiAgY2hhcmFjdGVyLWxpa2Ugb2JqZWN0cy4gCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgY2xhc3MgX192ZXJzYV9zdHJpbmcKKyAgICA6IHByaXZhdGUgX0Jhc2U8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisgICAgeworICAgICAgdHlwZWRlZiBfQmFzZTxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gICAgICAgICAgICAgICAgX192c3RyaW5nX2Jhc2U7ICAgIAorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3ZzdHJpbmdfYmFzZTo6X0NoYXJUX2FsbG9jX3R5cGUgICAgX0NoYXJUX2FsbG9jX3R5cGU7CisKKyAgICAgIC8vIFR5cGVzOgorICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RyYWl0cwkJCQkJICAgIHRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQWxsb2MJCQkJCSAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnNpemVfdHlwZQkgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhclRfYWxsb2NfdHlwZTo6ZGlmZmVyZW5jZV90eXBlICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgIAkgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpwb2ludGVyCSAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2hhclRfYWxsb2NfdHlwZTo6Y29uc3RfcG9pbnRlcgkgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBfX3ZlcnNhX3N0cmluZz4gIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIF9fdmVyc2Ffc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4JY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPgkJICAgIHJldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIERhdGEgTWVtYmVyIChwdWJsaWMpOgorICAgICAgLy8vICBWYWx1ZSByZXR1cm5lZCBieSB2YXJpb3VzIG1lbWJlciBmdW5jdGlvbnMgd2hlbiB0aGV5IGZhaWwuCisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlCW5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKKworICAgIHByaXZhdGU6CisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcywgY29uc3QgY2hhciogX19zKSBjb25zdAorICAgICAgeworCWlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKKwkgIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKF9fcykpOworCXJldHVybiBfX3BvczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fY2hlY2tfbGVuZ3RoKHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgY29uc3QgY2hhciogX19zKSBjb25zdAorICAgICAgeworCWlmICh0aGlzLT5tYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDwgX19uMikKKwkgIHN0ZDo6X190aHJvd19sZW5ndGhfZXJyb3IoX19OKF9fcykpOworICAgICAgfQorCisgICAgICAvLyBOQjogX01fbGltaXQgZG9lc24ndCBjaGVjayBmb3IgYSBiYWQgX19wb3MgdmFsdWUuCisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX2xpbWl0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAorICAgICAgeworCWNvbnN0IGJvb2wgX190ZXN0b2ZmID0gIF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CisJcmV0dXJuIF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CisgICAgICB9CisKKyAgICAgIC8vIFRydWUgaWYgX1JlcCBhbmQgc291cmNlIGRvIG5vdCBvdmVybGFwLgorICAgICAgYm9vbAorICAgICAgX01fZGlzanVuY3QoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIChzdGQ6Omxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIHRoaXMtPl9NX2RhdGEoKSkKKwkJfHwgc3RkOjpsZXNzPGNvbnN0IF9DaGFyVCo+KCkodGhpcy0+X01fZGF0YSgpCisJCQkJCSAgICAgICsgdGhpcy0+c2l6ZSgpLCBfX3MpKTsKKyAgICAgIH0KKworICAgICAgLy8gRm9yIHRoZSBpbnRlcm5hbCB1c2Ugd2UgaGF2ZSBmdW5jdGlvbnMgc2ltaWxhciB0byBgYmVnaW4nL2BlbmQnCisgICAgICAvLyBidXQgdGhleSBkbyBub3QgY2FsbCBfTV9sZWFrLgorICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2liZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSArIHRoaXMtPl9NX2xlbmd0aCgpKTsgfQorCisgICAgcHVibGljOgorICAgICAgLy8gQ29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICAgIC8vIE5COiBXZSBvdmVybG9hZCBjdG9ycyBpbiBzb21lIGNhc2VzIGluc3RlYWQgb2YgdXNpbmcgZGVmYXVsdAorICAgICAgLy8gYXJndW1lbnRzLCBwZXIgMTcuNC40LjQgcGFyYS4gMiBpdGVtIDIuCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBjcmVhdGVzIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcoKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZSgpIHsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBhbiBlbXB0eSBzdHJpbmcgdXNpbmcgYWxsb2NhdG9yIEBhIGEuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3ZlcnNhX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKKyAgICAgIDogX192c3RyaW5nX2Jhc2UoX19hKSB7IH0KKworICAgICAgLy8gTkI6IHBlciBMV0cgaXNzdWUgNDIsIHNlbWFudGljcyBkaWZmZXJlbnQgZnJvbSBJUzoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyB3aXRoIGNvcHkgb2YgdmFsdWUgb2YgQGEgX19zdHIuCisgICAgICAgKiAgQHBhcmFtICBfX3N0ciAgU291cmNlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZShfX3N0cikgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN0cmluZyBtb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jb25zdHJ1Y3RlZCAlc3RyaW5nIGNvbnRhaW5zIHRoZSBleGFjdCBjb250ZW50cyBvZgorICAgICAgICogIEBhIF9fc3RyLiAgVGhlIGNvbnRlbnRzIG9mIEBhIF9fc3RyIGFyZSBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nKF9fdmVyc2Ffc3RyaW5nJiYgX19zdHIpIG5vZXhjZXB0CisgICAgICA6IF9fdnN0cmluZ19iYXNlKHN0ZDo6bW92ZShfX3N0cikpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgZnJvbSBhbiBpbml0aWFsaXplciBsaXN0LgorICAgICAgICogIEBwYXJhbSAgX19sICBzdGQ6OmluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQWxsb2NhdG9yIHRvIHVzZSAoZGVmYXVsdCBpcyBkZWZhdWx0IGFsbG9jYXRvcikuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCwKKwkJICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBfX2EpIHsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyBhcyBjb3B5IG9mIGEgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIGNvcHkgZnJvbS4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29weSAoZGVmYXVsdCByZW1haW5kZXIpLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyhjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKKwkJICAgICBzaXplX3R5cGUgX19uID0gbnBvcykKKyAgICAgIDogX192c3RyaW5nX2Jhc2UoX19zdHIuX01fZGF0YSgpCisJCSAgICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zLAorCQkJCQkiX192ZXJzYV9zdHJpbmc6Ol9fdmVyc2Ffc3RyaW5nIiksCisJCSAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3N0ci5fTV9saW1pdChfX3BvcywgX19uKQorCQkgICAgICAgKyBfX3BvcywgX0FsbG9jKCkpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgY29weSBvZiBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBTb3VyY2Ugc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciB0byBjb3B5IGZyb20uCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFsbG9jYXRvciB0byB1c2UuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nKGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAorCQkgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZShfX3N0ci5fTV9kYXRhKCkKKwkJICAgICAgICsgX19zdHIuX01fY2hlY2soX19wb3MsCisJCQkJCSJfX3ZlcnNhX3N0cmluZzo6X192ZXJzYV9zdHJpbmciKSwKKwkJICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9fc3RyLl9NX2xpbWl0KF9fcG9zLCBfX24pCisJCSAgICAgICArIF9fcG9zLCBfX2EpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgaW5pdGlhbGl6ZWQgYnkgYSBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFNvdXJjZSBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvcHkuCisgICAgICAgKiAgQHBhcmFtICBfX2EgIEFsbG9jYXRvciB0byB1c2UgKGRlZmF1bHQgaXMgZGVmYXVsdCBhbGxvY2F0b3IpLgorICAgICAgICoKKyAgICAgICAqICBOQjogQGEgX19zIG11c3QgaGF2ZSBhdCBsZWFzdCBAYSBfX24gY2hhcmFjdGVycywgJ1xcMCcgaGFzIG5vIHNwZWNpYWwKKyAgICAgICAqICBtZWFuaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKKwkJICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKQorICAgICAgOiBfX3ZzdHJpbmdfYmFzZShfX3MsIF9fcyArIF9fbiwgX19hKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3Qgc3RyaW5nIGFzIGNvcHkgb2YgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgU291cmNlIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19hICBBbGxvY2F0b3IgdG8gdXNlIChkZWZhdWx0IGlzIGRlZmF1bHQgYWxsb2NhdG9yKS4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpCisgICAgICA6IF9fdnN0cmluZ19iYXNlKF9fcywgX19zID8gX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDoKKwkJICAgICAgIF9fcyArIG5wb3MsIF9fYSkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3RydWN0IHN0cmluZyBhcyBtdWx0aXBsZSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSAgX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fYyAgQ2hhcmFjdGVyIHRvIHVzZS4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQWxsb2NhdG9yIHRvIHVzZSAoZGVmYXVsdCBpcyBkZWZhdWx0IGFsbG9jYXRvcikuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpCisgICAgICA6IF9fdnN0cmluZ19iYXNlKF9fbiwgX19jLCBfX2EpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdCBzdHJpbmcgYXMgY29weSBvZiBhIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19iZWcgIFN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSAgX19lbmQgIEVuZCBvZiByYW5nZS4KKyAgICAgICAqICBAcGFyYW0gIF9fYSAgQWxsb2NhdG9yIHRvIHVzZSAoZGVmYXVsdCBpcyBkZWZhdWx0IGFsbG9jYXRvcikuCisgICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICBfX3ZlcnNhX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQsCisJCSAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKQorCTogX192c3RyaW5nX2Jhc2UoX19iZWcsIF9fZW5kLCBfX2EpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlc3Ryb3kgdGhlIHN0cmluZyBpbnN0YW5jZS4KKyAgICAgICAqLworICAgICAgfl9fdmVyc2Ffc3RyaW5nKCkgX0dMSUJDWFhfTk9FWENFUFQgeyB9CQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbiB0aGUgdmFsdWUgb2YgQGEgc3RyIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0cikgCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN0cmluZyBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtICBfX3N0ciAgU291cmNlIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGNvbnRlbnRzIG9mIEBhIF9fc3RyIGFyZSBtb3ZlZCBpbnRvIHRoaXMgc3RyaW5nICh3aXRob3V0CisgICAgICAgKiAgY29weWluZykuICBAYSBfX3N0ciBpcyBhIHZhbGlkLCBidXQgdW5zcGVjaWZpZWQgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShfX3ZlcnNhX3N0cmluZyYmIF9fc3RyKQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCXRoaXMtPnN3YXAoX19zdHIpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gc3RyaW5nIGNvbnN0cnVjdGVkIGZyb20gaW5pdGlhbGl6ZXIgbGlzdC4KKyAgICAgICAqICBAcGFyYW0gIF9fbCAgc3RkOjppbml0aWFsaXplcl9saXN0LgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7CisJdGhpcy0+YXNzaWduKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvcHkgY29udGVudHMgb2YgQGEgX19zIGludG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFNvdXJjZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBzdHJpbmcgb2YgbGVuZ3RoIDEuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIFNvdXJjZSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIEFzc2lnbmluZyB0byBhIGNoYXJhY3RlciBtYWtlcyB0aGlzIHN0cmluZyBsZW5ndGggMSBhbmQKKyAgICAgICAqICAoKnRoaXMpWzBdID09IEBhIF9fYy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgCisgICAgICB7IAorCXRoaXMtPmFzc2lnbigxLCBfX2MpOyAKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vIEl0ZXJhdG9yczoKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkL3dyaXRlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4KKyAgICAgICAqICB0aGUgJXN0cmluZy4gIFVuc2hhcmVzIHRoZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJdGhpcy0+X01fbGVhaygpOworCXJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcy0+X01fZGF0YSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSBpdGVyYXRvciB0aGF0IHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdAorICAgICAgICogIGNoYXJhY3RlciBpbiB0aGUgJXN0cmluZy4gIFVuc2hhcmVzIHRoZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCXRoaXMtPl9NX2xlYWsoKTsKKwlyZXR1cm4gaXRlcmF0b3IodGhpcy0+X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZQorICAgICAgICogIGxhc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmV2ZXJzZSBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgbGFzdAorICAgICAgICogIGNoYXJhY3RlciBpbiB0aGUgJXN0cmluZy4gIEl0ZXJhdGlvbiBpcyBkb25lIGluIHJldmVyc2UgZWxlbWVudAorICAgICAgICogIG9yZGVyLiAgVW5zaGFyZXMgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIG9uZSBiZWZvcmUgdGhlCisgICAgICAgKiAgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZQorICAgICAgICogIGVsZW1lbnQgb3JkZXIuICBVbnNoYXJlcyB0aGUgc3RyaW5nLgorICAgICAgICovCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byBvbmUgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24KKyAgICAgICAqICBpcyBkb25lIGluIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIGZpcnN0CisgICAgICAgKiAgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIGl0ZXJhdG9yIHRoYXQgcG9pbnRzIG9uZSBwYXN0IHRoZQorICAgICAgICogIGxhc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybnMgYSByZWFkLW9ubHkgKGNvbnN0YW50KSByZXZlcnNlIGl0ZXJhdG9yIHRoYXQgcG9pbnRzCisgICAgICAgKiAgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSAlc3RyaW5nLiAgSXRlcmF0aW9uIGlzIGRvbmUgaW4KKyAgICAgICAqICByZXZlcnNlIGVsZW1lbnQgb3JkZXIuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQtb25seSAoY29uc3RhbnQpIHJldmVyc2UgaXRlcmF0b3IgdGhhdCBwb2ludHMKKyAgICAgICAqICB0byBvbmUgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlICVzdHJpbmcuICBJdGVyYXRpb24KKyAgICAgICAqICBpcyBkb25lIGluIHJldmVyc2UgZWxlbWVudCBvcmRlci4KKyAgICAgICAqLworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDYXBhY2l0eToKKyAgICAgIC8vLyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZywgbm90IGluY2x1ZGluZyBhbnkKKyAgICAgIC8vLyAgbnVsbC10ZXJtaW5hdGlvbi4KKyAgICAgIHNpemVfdHlwZQorICAgICAgc2l6ZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9sZW5ndGgoKTsgfQorCisgICAgICAvLy8gIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgYW55CisgICAgICAvLy8gIG51bGwtdGVybWluYXRpb24uCisgICAgICBzaXplX3R5cGUKKyAgICAgIGxlbmd0aCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5fTV9sZW5ndGgoKTsgfQorCisgICAgICAvLy8gUmV0dXJucyB0aGUgc2l6ZSgpIG9mIHRoZSBsYXJnZXN0IHBvc3NpYmxlICVzdHJpbmcuCisgICAgICBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX21heF9zaXplKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemVzIHRoZSAlc3RyaW5nIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRoZSAlc3RyaW5nIHNob3VsZCBjb250YWluLgorICAgICAgICogIEBwYXJhbSAgX19jICBDaGFyYWN0ZXIgdG8gZmlsbCBhbnkgbmV3IGVsZW1lbnRzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgJXJlc2l6ZSB0aGUgJXN0cmluZyB0byB0aGUgc3BlY2lmaWVkCisgICAgICAgKiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMuICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAqICAlc3RyaW5nJ3MgY3VycmVudCBzaXplIHRoZSAlc3RyaW5nIGlzIHRydW5jYXRlZCwgb3RoZXJ3aXNlCisgICAgICAgKiAgdGhlICVzdHJpbmcgaXMgZXh0ZW5kZWQgYW5kIG5ldyBlbGVtZW50cyBhcmUgc2V0IHRvIEBhIF9fYy4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlc2l6ZXMgdGhlICVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhlICVzdHJpbmcgc2hvdWxkIGNvbnRhaW4uCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZXNpemUgdGhlICVzdHJpbmcgdG8gdGhlIHNwZWNpZmllZAorICAgICAgICogIGxlbmd0aC4gIElmIHRoZSBuZXcgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhlICVzdHJpbmcncworICAgICAgICogIGN1cnJlbnQgc2l6ZSB0aGUgJXN0cmluZyBpcyB0cnVuY2F0ZWQsIG90aGVyd2lzZSB0aGUgJXN0cmluZworICAgICAgICogIGlzIGV4dGVuZGVkIGFuZCBuZXcgY2hhcmFjdGVycyBhcmUgZGVmYXVsdC1jb25zdHJ1Y3RlZC4gIEZvcgorICAgICAgICogIGJhc2ljIHR5cGVzIHN1Y2ggYXMgY2hhciwgdGhpcyBtZWFucyBzZXR0aW5nIHRoZW0gdG8gMC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pCisgICAgICB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLy8vIEEgbm9uLWJpbmRpbmcgcmVxdWVzdCB0byByZWR1Y2UgY2FwYWNpdHkoKSB0byBzaXplKCkuCisgICAgICB2b2lkCisgICAgICBzaHJpbmtfdG9fZml0KCkKKyAgICAgIHsKKwlpZiAoY2FwYWNpdHkoKSA+IHNpemUoKSkKKwkgIHsKKwkgICAgX190cnkKKwkgICAgICB7IHRoaXMtPnJlc2VydmUoMCk7IH0KKwkgICAgX19jYXRjaCguLi4pCisJICAgICAgeyB9CisJICB9CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB0aGUgJXN0cmluZyBjYW4KKyAgICAgICAqICBob2xkIGJlZm9yZSBuZWVkaW5nIHRvIGFsbG9jYXRlIG1vcmUgbWVtb3J5LgorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNhcGFjaXR5KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2NhcGFjaXR5KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBdHRlbXB0IHRvIHByZWFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAqICAgICAgICAgIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX3Jlc19hcmcgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIEBhIF9fcmVzX2FyZyBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gcmVzZXJ2ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUKKyAgICAgICAqICAlc3RyaW5nIHRvIGhvbGQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycy4gIElmIHRoZQorICAgICAgICogIG51bWJlciByZXF1ZXN0ZWQgaXMgbW9yZSB0aGFuIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcworICAgICAgICogIHRocm93bi4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRoYXQgaWYgb3B0aW1hbCBjb2RlIGlzIGEKKyAgICAgICAqICBuZWNlc3NpdHkgYW5kIHRoZSB1c2VyIGNhbiBkZXRlcm1pbmUgdGhlIHN0cmluZyBsZW5ndGggdGhhdAorICAgICAgICogIHdpbGwgYmUgcmVxdWlyZWQsIHRoZSB1c2VyIGNhbiByZXNlcnZlIHRoZSBtZW1vcnkgaW4KKyAgICAgICAqICAlYWR2YW5jZSwgYW5kIHRodXMgcHJldmVudCBhIHBvc3NpYmxlIHJlYWxsb2NhdGlvbiBvZiBtZW1vcnkKKyAgICAgICAqICBhbmQgY29weWluZyBvZiAlc3RyaW5nIGRhdGEuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApCisgICAgICB7IHRoaXMtPl9NX3Jlc2VydmUoX19yZXNfYXJnKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBFcmFzZXMgdGhlIHN0cmluZywgbWFraW5nIGl0IGVtcHR5LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHRoaXMtPl9NX2NsZWFyKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyB0cnVlIGlmIHRoZSAlc3RyaW5nIGlzIGVtcHR5LiAgRXF1aXZhbGVudCB0byAKKyAgICAgICAqICA8Y29kZT4qdGhpcyA9PSAiIjwvY29kZT4uCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CisKKyAgICAgIC8vIEVsZW1lbnQgYWNjZXNzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdWJzY3JpcHQgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fcG9zICBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB0byBhY2Nlc3MuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikKKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fcG9zIDw9IHRoaXMtPnNpemUoKSk7CisJcmV0dXJuIHRoaXMtPl9NX2RhdGEoKVtfX3Bvc107CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3Vic2NyaXB0IGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgdG8gYWNjZXNzLgorICAgICAgICogIEByZXR1cm4gIFJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBlYXN5LCBhcnJheS1zdHlsZSwgZGF0YSBhY2Nlc3MuCisgICAgICAgKiAgTm90ZSB0aGF0IGRhdGEgYWNjZXNzIHdpdGggdGhpcyBvcGVyYXRvciBpcyB1bmNoZWNrZWQgYW5kCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGxvb2t1cHMgYXJlIG5vdCBkZWZpbmVkLiAoRm9yIGNoZWNrZWQgbG9va3VwcworICAgICAgICogIHNlZSBhdCgpLikgIFVuc2hhcmVzIHRoZSBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCisgICAgICB7CisgICAgICAgIC8vIGFsbG93IHBvcyA9PSBzaXplKCkgYXMgdjMgZXh0ZW5zaW9uOgorCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX3BvcyA8PSB0aGlzLT5zaXplKCkpOworICAgICAgICAvLyBidXQgYmUgc3RyaWN0IGluIHBlZGFudGljIG1vZGU6CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fcG9zIDwgdGhpcy0+c2l6ZSgpKTsKKwl0aGlzLT5fTV9sZWFrKCk7CisJcmV0dXJuIHRoaXMtPl9NX2RhdGEoKVtfX3Bvc107CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgJXN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19uIFRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHRvIGFjY2Vzcy4KKyAgICAgICAqICBAcmV0dXJuICBSZWFkLW9ubHkgKGNvbnN0KSByZWZlcmVuY2UgdG8gdGhlIGNoYXJhY3Rlci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX24gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyCisgICAgICAgKiAgaXMgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgc3RyaW5nLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhyb3dzIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlpZiAoX19uID49IHRoaXMtPnNpemUoKSkKKwkgIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJfX3ZlcnNhX3N0cmluZzo6YXQiKSk7CisJcmV0dXJuIHRoaXMtPl9NX2RhdGEoKVtfX25dOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlICVzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fbiBUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciB0byBhY2Nlc3MuCisgICAgICAgKiAgQHJldHVybiAgUmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGNoYXJhY3Rlci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX24gaXMgYW4gaW52YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBmb3Igc2FmZXIgZGF0YSBhY2Nlc3MuICBUaGUgcGFyYW1ldGVyCisgICAgICAgKiAgaXMgZmlyc3QgY2hlY2tlZCB0aGF0IGl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgc3RyaW5nLiAgVGhlCisgICAgICAgKiAgZnVuY3Rpb24gdGhyb3dzIG91dF9vZl9yYW5nZSBpZiB0aGUgY2hlY2sgZmFpbHMuICBTdWNjZXNzCisgICAgICAgKiAgcmVzdWx0cyBpbiB1bnNoYXJpbmcgdGhlIHN0cmluZy4KKyAgICAgICAqLworICAgICAgcmVmZXJlbmNlCisgICAgICBhdChzaXplX3R5cGUgX19uKQorICAgICAgeworCWlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQorCSAgc3RkOjpfX3Rocm93X291dF9vZl9yYW5nZShfX04oIl9fdmVyc2Ffc3RyaW5nOjphdCIpKTsKKwl0aGlzLT5fTV9sZWFrKCk7CisJcmV0dXJuIHRoaXMtPl9NX2RhdGEoKVtfX25dOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgUmV0dXJucyBhIHJlYWQvd3JpdGUgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgZnJvbnQoKQorICAgICAgeyByZXR1cm4gb3BlcmF0b3JbXSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZSBmaXJzdAorICAgICAgICogIGVsZW1lbnQgb2YgdGhlICVzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgZnJvbnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gb3BlcmF0b3JbXSgwKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC93cml0ZSByZWZlcmVuY2UgdG8gdGhlIGRhdGEgYXQgdGhlIGxhc3QKKyAgICAgICAqICBlbGVtZW50IG9mIHRoZSAlc3RyaW5nLgorICAgICAgICovCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeyByZXR1cm4gb3BlcmF0b3JbXSh0aGlzLT5zaXplKCkgLSAxKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBSZXR1cm5zIGEgcmVhZC1vbmx5IChjb25zdGFudCkgcmVmZXJlbmNlIHRvIHRoZSBkYXRhIGF0IHRoZQorICAgICAgICogIGxhc3QgZWxlbWVudCBvZiB0aGUgJXN0cmluZy4KKyAgICAgICAqLworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIG9wZXJhdG9yW10odGhpcy0+c2l6ZSgpIC0gMSk7IH0KKyNlbmRpZgorCisgICAgICAvLyBNb2RpZmllcnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIHN0cmluZyB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBvcGVyYXRvcis9KGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0cikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBUaGUgQyBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKQorICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJhY3RlciB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykKKyAgICAgIHsgCisJdGhpcy0+cHVzaF9iYWNrKF9fYyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYW4gaW5pdGlhbGl6ZXJfbGlzdCBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX2wgIFRoZSBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMgdG8gYmUgYXBwZW5kZWQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIG9wZXJhdG9yKz0oc3RkOjppbml0aWFsaXplcl9saXN0PF9DaGFyVD4gX19sKQorICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYgLy8gQysrMTEKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBzdHJpbmcgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBUaGUgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXBwZW5kKGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0cikKKyAgICAgIHsgcmV0dXJuIF9NX2FwcGVuZChfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBUaGUgc3RyaW5nIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3RyIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcGFyYW0gX19uICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYXBwZW5kLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlIGlmIEBhIHBvcyBpcyBub3QgYSB2YWxpZCBpbmRleC4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiBhcHBlbmRzIEBhIF9fbiBjaGFyYWN0ZXJzIGZyb20gQGEgX19zdHIKKyAgICAgICAqICBzdGFydGluZyBhdCBAYSBfX3BvcyB0byB0aGlzIHN0cmluZy4gIElmIEBhIF9fbiBpcyBpcyBsYXJnZXIKKyAgICAgICAqICB0aGFuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNoYXJhY3RlcnMgaW4gQGEgX19zdHIsIHRoZQorICAgICAgICogIHJlbWFpbmRlciBvZiBAYSBfX3N0ciBpcyBhcHBlbmRlZC4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBhcHBlbmQoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiBfTV9hcHBlbmQoX19zdHIuX01fZGF0YSgpCisJCQkgKyBfX3N0ci5fTV9jaGVjayhfX3BvcywgIl9fdmVyc2Ffc3RyaW5nOjphcHBlbmQiKSwKKwkJCSBfX3N0ci5fTV9saW1pdChfX3BvcywgX19uKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBUaGUgQyBzdHJpbmcgdG8gYXBwZW5kLgorICAgICAgICogIEBwYXJhbSBfX24gIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisJX01fY2hlY2tfbGVuZ3RoKHNpemVfdHlwZSgwKSwgX19uLCAiX192ZXJzYV9zdHJpbmc6OmFwcGVuZCIpOworCXJldHVybiBfTV9hcHBlbmQoX19zLCBfX24pOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFRoZSBDIHN0cmluZyB0byBhcHBlbmQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJY29uc3Qgc2l6ZV90eXBlIF9fbiA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKKwlfTV9jaGVja19sZW5ndGgoc2l6ZV90eXBlKDApLCBfX24sICJfX3ZlcnNhX3N0cmluZzo6YXBwZW5kIik7CisJcmV0dXJuIF9NX2FwcGVuZChfX3MsIF9fbik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIG11bHRpcGxlIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhcmFjdGVyIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEFwcGVuZHMgbiBjb3BpZXMgb2YgYyB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKKyAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2VfYXV4KHRoaXMtPnNpemUoKSwgc2l6ZV90eXBlKDApLCBfX24sIF9fYyk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19sICBUaGUgaW5pdGlhbGl6ZXJfbGlzdCBvZiBjaGFyYWN0ZXJzIHRvIGFwcGVuZC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXBwZW5kKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfQ2hhclQ+IF9fbCkKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmIC8vIEMrKzExCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwZW5kIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19maXJzdCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBhcHBlbmQuCisgICAgICAgKiAgQHBhcmFtIF9fbGFzdCAgSXRlcmF0b3IgbWFya2luZyB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEFwcGVuZHMgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LGxhc3QpIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICAgIGFwcGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBcHBlbmQgYSBzaW5nbGUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBhcHBlbmQuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQorICAgICAgeyAKKwljb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworCWlmIChfX3NpemUgKyAxID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCB0aGlzLT5fTV9pc19zaGFyZWQoKSkKKwkgIHRoaXMtPl9NX211dGF0ZShfX3NpemUsIHNpemVfdHlwZSgwKSwgMCwgc2l6ZV90eXBlKDEpKTsKKwl0cmFpdHNfdHlwZTo6YXNzaWduKHRoaXMtPl9NX2RhdGEoKVtfX3NpemVdLCBfX2MpOworCXRoaXMtPl9NX3NldF9sZW5ndGgoX19zaXplICsgMSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGNvbnRlbnRzIG9mIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIFNvdXJjZSBzdHJpbmcgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBhc3NpZ24oY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKQorICAgICAgeworCXRoaXMtPl9NX2Fzc2lnbihfX3N0cik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gY29udGVudHMgb2YgYW5vdGhlciBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtICBfX3N0ciAgU291cmNlIHN0cmluZyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhpcyBzdHJpbmcgdG8gdGhlIGV4YWN0IGNvbnRlbnRzIG9mIEBhIF9fc3RyLgorICAgICAgICogIEBhIF9fc3RyIGlzIGEgdmFsaWQsIGJ1dCB1bnNwZWNpZmllZCBzdHJpbmcuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXNzaWduKF9fdmVyc2Ffc3RyaW5nJiYgX19zdHIpCisgICAgICB7CisJdGhpcy0+c3dhcChfX3N0cik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorI2VuZGlmIC8vIEMrKzExCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGEgc3Vic3RyaW5nIG9mIGEgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgVGhlIHN0cmluZyB0byB1c2UuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHN0ci4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgQGEgX19wb3MgaXMgbm90IGEgdmFsaWQgaW5kZXguCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGlzIHN0cmluZyB0byB0aGUgc3Vic3RyaW5nIG9mIEBhIF9fc3RyCisgICAgICAgKiAgY29uc2lzdGluZyBvZiBAYSBfX24gY2hhcmFjdGVycyBhdCBAYSBfX3Bvcy4gIElmIEBhIF9fbiBpcworICAgICAgICogIGlzIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNoYXJhY3RlcnMgaW4gQGEKKyAgICAgICAqICBfX3N0ciwgdGhlIHJlbWFpbmRlciBvZiBAYSBfX3N0ciBpcyB1c2VkLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFzc2lnbihjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2Uoc2l6ZV90eXBlKDApLCB0aGlzLT5zaXplKCksIF9fc3RyLl9NX2RhdGEoKQorCQkJICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OmFzc2lnbiIpLAorCQkJICBfX3N0ci5fTV9saW1pdChfX3BvcywgX19uKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXQgdmFsdWUgdG8gYSBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBUaGUgQyBzdHJpbmcgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBzdHJpbmcgdG8gdGhlIGZpcnN0IEBhCisgICAgICAgKiAgX19uIGNoYXJhY3RlcnMgb2YgQGEgX19zLiAgSWYgQGEgX19uIGlzIGlzIGxhcmdlciB0aGFuIHRoZQorICAgICAgICogIG51bWJlciBvZiBhdmFpbGFibGUgY2hhcmFjdGVycyBpbiBAYSBfX3MsIHRoZSByZW1haW5kZXIgb2YKKyAgICAgICAqICBAYSBfX3MgaXMgdXNlZC4KKyAgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworCXJldHVybiBfTV9yZXBsYWNlKHNpemVfdHlwZSgwKSwgdGhpcy0+c2l6ZSgpLCBfX3MsIF9fbik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGNvbnRlbnRzIG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBzdHJpbmcgdG8gdGhlIHZhbHVlIG9mCisgICAgICAgKiAgQGEgX19zLiAgVGhlIGRhdGEgaXMgY29waWVkLCBzbyB0aGVyZSBpcyBubyBkZXBlbmRlbmNlIG9uIEBhCisgICAgICAgKiAgX19zIG9uY2UgdGhlIGZ1bmN0aW9uIHJldHVybnMuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zKQorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gX01fcmVwbGFjZShzaXplX3R5cGUoMCksIHRoaXMtPnNpemUoKSwgX19zLAorCQkJICB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBtdWx0aXBsZSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX24gIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19jICBUaGUgY2hhcmFjdGVyIHRvIHVzZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBzdHJpbmcgdG8gQGEgX19uIGNvcGllcyBvZgorICAgICAgICogIGNoYXJhY3RlciBAYSBfX2MuCisgICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7IHJldHVybiBfTV9yZXBsYWNlX2F1eChzaXplX3R5cGUoMCksIHRoaXMtPnNpemUoKSwgX19uLCBfX2MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0IHZhbHVlIHRvIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19maXJzdCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBhcHBlbmQuCisgICAgICAgKiAgQHBhcmFtIF9fbGFzdCAgSXRlcmF0b3IgbWFya2luZyB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIFNldHMgdmFsdWUgb2Ygc3RyaW5nIHRvIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlCisgICAgICAgKiAgW2ZpcnN0LGxhc3QpLgorICAgICAgKi8KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldCB2YWx1ZSB0byBhbiBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBhc3NpZ24uCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGFzc2lnbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7IH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBtdWx0aXBsZSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX3AgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGxvY2F0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0CisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIEluc2VydHMgQGEgX19uIGNvcGllcyBvZiBjaGFyYWN0ZXIgQGEgX19jIHN0YXJ0aW5nIGF0IHRoZQorICAgICAgICogIHBvc2l0aW9uIHJlZmVyZW5jZWQgYnkgaXRlcmF0b3IgQGEgX19wLiAgSWYgYWRkaW5nCisgICAgICAgKiAgY2hhcmFjdGVycyBjYXVzZXMgdGhlIGxlbmd0aCB0byBleGNlZWQgbWF4X3NpemUoKSwKKyAgICAgICAqICBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndAorICAgICAgICogIGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKKyAgICAgIHsJdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBhIHJhbmdlIG9mIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fcCAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gX19iZWcgIFN0YXJ0IG9mIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2VuZCAgRW5kIG9mIHJhbmdlLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIGNoYXJhY3RlcnMgaW4gcmFuZ2UgW2JlZyxlbmQpLiAgSWYgYWRkaW5nIGNoYXJhY3RlcnMKKyAgICAgICAqICBjYXVzZXMgdGhlIGxlbmd0aCB0byBleGNlZWQgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzCisgICAgICAgKiAgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IKKyAgICAgICAqICBpcyB0aHJvd24uCisgICAgICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQorICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW5zZXJ0IGFuIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19wICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBpbiBzdHJpbmcgdG8gaW5zZXJ0IGF0LgorICAgICAgICogIEBwYXJhbSBfX2wgIFRoZSBpbml0aWFsaXplcl9saXN0IG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHRoaXMtPmluc2VydChfX3AsIF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYgLy8gQysrMTEKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgdmFsdWUgb2YgYSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyB2YWx1ZSBvZiBAYSBfX3N0ciBzdGFydGluZyBhdCBAYSBfX3BvczEuICBJZiBhZGRpbmcKKyAgICAgICAqICBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZCBtYXhfc2l6ZSgpLAorICAgICAgICogIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0CisgICAgICAgKiAgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIpCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgc2l6ZV90eXBlKDApLAorCQkJICAgICBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFRoZSBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX3BvczIgIFN0YXJ0IG9mIGNoYXJhY3RlcnMgaW4gc3RyIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zMSA+IHNpemUoKSBvcgorICAgICAgICogIEBhIF9fcG9zMiA+IEBhIF9fc3RyLnNpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgYXQgQGEgX19wb3MxLCBpbnNlcnQgQGEgX19uIGNoYXJhY3RlciBvZiBAYSBfX3N0cgorICAgICAgICogIGJlZ2lubmluZyB3aXRoIEBhIF9fcG9zMi4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUKKyAgICAgICAqICBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYQorICAgICAgICogIF9fcG9zMSBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzIHN0cmluZyBvciBAYSBfX3BvczIgaXMKKyAgICAgICAqICBiZXlvbmQgdGhlIGVuZCBvZiBAYSBfX3N0ciwgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZQorICAgICAgICogIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwKKwkgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgc2l6ZV90eXBlKDApLCBfX3N0ci5fTV9kYXRhKCkKKwkJCSAgICAgKyBfX3N0ci5fTV9jaGVjayhfX3BvczIsICJfX3ZlcnNhX3N0cmluZzo6aW5zZXJ0IiksCisJCQkgICAgIF9fc3RyLl9NX2xpbWl0KF9fcG9zMiwgX19uKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgYSBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGxvY2F0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgVGhlIEMgc3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19uICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIHRoZSBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgc3RhcnRpbmcgYXQgQGEKKyAgICAgICAqICBfX3Bvcy4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZAorICAgICAgICogIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQKKyAgICAgICAqICBlbmQoKSwgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nCisgICAgICAgKiAgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBzaXplX3R5cGUoMCksIF9fcywgX19uKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbG9jYXRpb24gaW4gc3RyaW5nIHRvIGluc2VydCBhdC4KKyAgICAgICAqICBAcGFyYW0gX19zICBUaGUgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBJbnNlcnRzIHRoZSBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgc3RhcnRpbmcgYXQgQGEKKyAgICAgICAqICBfX3Bvcy4gIElmIGFkZGluZyBjaGFyYWN0ZXJzIGNhdXNlcyB0aGUgbGVuZ3RoIHRvIGV4Y2VlZAorICAgICAgICogIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQKKyAgICAgICAqICBlbmQoKSwgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nCisgICAgICAgKiAgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBzaXplX3R5cGUoMCksIF9fcywKKwkJCSAgICAgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnNlcnQgbXVsdGlwbGUgY2hhcmFjdGVycy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0CisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogIEluc2VydHMgQGEgX19uIGNvcGllcyBvZiBjaGFyYWN0ZXIgQGEgX19jIHN0YXJ0aW5nIGF0IGluZGV4CisgICAgICAgKiAgQGEgX19wb3MuICBJZiBhZGRpbmcgY2hhcmFjdGVycyBjYXVzZXMgdGhlIGxlbmd0aCB0byBleGNlZWQKKyAgICAgICAqICBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgSWYgQGEgX19wb3MgPiBsZW5ndGgoKSwKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndAorICAgICAgICogIGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX01fY2hlY2soX19wb3MsICJfX3ZlcnNhX3N0cmluZzo6aW5zZXJ0IiksCisJCQkgICAgICBzaXplX3R5cGUoMCksIF9fbiwgX19jKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEluc2VydCBvbmUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX3AgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHBvc2l0aW9uIGluIHN0cmluZyB0byBpbnNlcnQgYXQuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgVGhlIGNoYXJhY3RlciB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgbmV3bHkgaW5zZXJ0ZWQgY2hhci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgSW5zZXJ0cyBjaGFyYWN0ZXIgQGEgX19jIGF0IHBvc2l0aW9uIHJlZmVyZW5jZWQgYnkgQGEgX19wLgorICAgICAgICogIElmIGFkZGluZyBjaGFyYWN0ZXIgY2F1c2VzIHRoZSBsZW5ndGggdG8gZXhjZWVkIG1heF9zaXplKCksCisgICAgICAgKiAgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIElmIEBhIF9fcCBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndAorICAgICAgICogIGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9fcCA+PSBfTV9pYmVnaW4oKSAmJiBfX3AgPD0gX01faWVuZCgpKTsKKwljb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKKwlfTV9yZXBsYWNlX2F1eChfX3Bvcywgc2l6ZV90eXBlKDApLCBzaXplX3R5cGUoMSksIF9fYyk7CisJdGhpcy0+X01fc2V0X2xlYWtlZCgpOworCXJldHVybiBpdGVyYXRvcih0aGlzLT5fTV9kYXRhKCkgKyBfX3Bvcyk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIGNoYXJhY3RlcnMuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVtb3ZlIChkZWZhdWx0IDApLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlbW92ZSAoZGVmYXVsdCByZW1haW5kZXIpLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzCisgICAgICAgKiAgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIEBhIF9fbiBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzdHJpbmcgc3RhcnRpbmcgYXQgQGEKKyAgICAgICAqICBfX3Bvcy4gIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpcyByZWR1Y2VkIGJ5IEBhIF9fbi4gIElmCisgICAgICAgKiAgdGhlcmUgYXJlIDwgQGEgX19uIGNoYXJhY3RlcnMgdG8gcmVtb3ZlLCB0aGUgcmVtYWluZGVyIG9mCisgICAgICAgKiAgdGhlIHN0cmluZyBpcyB0cnVuY2F0ZWQuICBJZiBAYSBfX3AgaXMgYmV5b25kIGVuZCBvZiBzdHJpbmcsCisgICAgICAgKiAgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QKKyAgICAgICAqICBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpCisgICAgICB7IAorCXRoaXMtPl9NX2VyYXNlKF9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OmVyYXNlIiksCisJCSAgICAgICBfTV9saW1pdChfX3BvcywgX19uKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlbW92ZSBvbmUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX3Bvc2l0aW9uICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgY2hhcmFjdGVyIHRvIHJlbW92ZS4KKyAgICAgICAqICBAcmV0dXJuICBpdGVyYXRvciByZWZlcmVuY2luZyBzYW1lIGxvY2F0aW9uIGFmdGVyIHJlbW92YWwuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlciBhdCBAYSBfX3Bvc2l0aW9uIGZyb20gdGhpcyBzdHJpbmcuIFRoZQorICAgICAgICogIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfX3Bvc2l0aW9uID49IF9NX2liZWdpbigpCisJCQkJICYmIF9fcG9zaXRpb24gPCBfTV9pZW5kKCkpOworCWNvbnN0IHNpemVfdHlwZSBfX3BvcyA9IF9fcG9zaXRpb24gLSBfTV9pYmVnaW4oKTsKKwl0aGlzLT5fTV9lcmFzZShfX3Bvcywgc2l6ZV90eXBlKDEpKTsKKwl0aGlzLT5fTV9zZXRfbGVha2VkKCk7CisJcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZW1vdmUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX2ZpcnN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIHJlbW92ZS4KKyAgICAgICAqICBAcGFyYW0gX19sYXN0ICBJdGVyYXRvciByZWZlcmVuY2luZyB0aGUgZW5kIG9mIHRoZSByYW5nZS4KKyAgICAgICAqICBAcmV0dXJuICBJdGVyYXRvciByZWZlcmVuY2luZyBsb2NhdGlvbiBvZiBmaXJzdCBhZnRlciByZW1vdmFsLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbZmlyc3QsbGFzdCkgZnJvbSB0aGlzCisgICAgICAgKiAgc3RyaW5nLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IKKyAgICAgICAqICBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX19maXJzdCA+PSBfTV9pYmVnaW4oKSAmJiBfX2ZpcnN0IDw9IF9fbGFzdAorCQkJCSAmJiBfX2xhc3QgPD0gX01faWVuZCgpKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19maXJzdCAtIF9NX2liZWdpbigpOworCXRoaXMtPl9NX2VyYXNlKF9fcG9zLCBfX2xhc3QgLSBfX2ZpcnN0KTsKKwl0aGlzLT5fTV9zZXRfbGVha2VkKCk7CisJcmV0dXJuIGl0ZXJhdG9yKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVtb3ZlIHRoZSBsYXN0IGNoYXJhY3Rlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIHN0cmluZyBtdXN0IGJlIG5vbi1lbXB0eS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcG9wX2JhY2soKQorICAgICAgeyB0aGlzLT5fTV9lcmFzZShzaXplKCktMSwgMSk7IH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIGZyb20gYW5vdGhlciBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSByZXBsYWNlZC4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoaXMKKyAgICAgICAqICBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtwb3MscG9zK24pIGZyb20gdGhpcworICAgICAgICogIHN0cmluZy4gIEluIHBsYWNlLCB0aGUgdmFsdWUgb2YgQGEgX19zdHIgaXMgaW5zZXJ0ZWQuICBJZiBAYQorICAgICAgICogIF9fcG9zIGlzIGJleW9uZCBlbmQgb2Ygc3RyaW5nLCBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLiAgSWYKKyAgICAgICAqICB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMKKyAgICAgICAqICB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvcgorICAgICAgICogIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIpCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIGZyb20gYW5vdGhlciBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zMSAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbjEgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlcGxhY2VkLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MyICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3RyIHRvIHVzZS4KKyAgICAgICAqICBAcGFyYW0gX19uMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzdHIgdG8gdXNlLgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvczEgPiBzaXplKCkgb3IgQGEgX19wb3MyID4KKyAgICAgICAqICBzdHIuc2l6ZSgpLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbcG9zMSxwb3MxICsgbikgZnJvbQorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSW4gcGxhY2UsIHRoZSB2YWx1ZSBvZiBAYSBfX3N0ciBpcyBpbnNlcnRlZC4KKyAgICAgICAqICBJZiBAYSBfX3BvcyBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywgb3V0X29mX3JhbmdlIGlzIHRocm93bi4KKyAgICAgICAqICBJZiB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IKKyAgICAgICAqICBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbgorICAgICAgICogIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwKKwkgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikKKyAgICAgIHsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsIF9fc3RyLl9NX2RhdGEoKQorCQkJICAgICArIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiwKKwkJCQkJICAgICAgIl9fdmVyc2Ffc3RyaW5nOjpyZXBsYWNlIiksCisJCQkgICAgIF9fc3RyLl9NX2xpbWl0KF9fcG9zMiwgX19uMikpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIG9mIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVwbGFjZWQuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX24yICBOdW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIEBhIF9fcyB0byB1c2UuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zMSA+IHNpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW3Bvcyxwb3MgKyBuMSkgZnJvbSB0aGlzCisgICAgICAgKiAgc3RyaW5nLiAgSW4gcGxhY2UsIHRoZSBmaXJzdCBAYSBfX24yIGNoYXJhY3RlcnMgb2YgQGEgX19zCisgICAgICAgKiAgYXJlIGluc2VydGVkLCBvciBhbGwgb2YgQGEgX19zIGlmIEBhIF9fbjIgaXMgdG9vIGxhcmdlLiAgSWYKKyAgICAgICAqICBAYSBfX3BvcyBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywgb3V0X29mX3JhbmdlIGlzIHRocm93bi4KKyAgICAgICAqICBJZiB0aGUgbGVuZ3RoIG9mIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcworICAgICAgICogIHRocm93bi4gIFRoZSB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yCisgICAgICAgKiAgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKKwkgICAgICBzaXplX3R5cGUgX19uMikKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbjIpOworCXJldHVybiBfTV9yZXBsYWNlKF9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OnJlcGxhY2UiKSwKKwkJCSAgX01fbGltaXQoX19wb3MsIF9fbjEpLCBfX3MsIF9fbjIpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgY2hhcmFjdGVycyB3aXRoIHZhbHVlIG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVwbGFjZWQuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyA+IHNpemUoKS4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW3Bvcyxwb3MgKyBuMSkgZnJvbSB0aGlzCisgICAgICAgKiAgc3RyaW5nLiAgSW4gcGxhY2UsIHRoZSBjaGFyYWN0ZXJzIG9mIEBhIF9fcyBhcmUgaW5zZXJ0ZWQuICBJZgorICAgICAgICogIEBhIHBvcyBpcyBiZXlvbmQgZW5kIG9mIHN0cmluZywgb3V0X29mX3JhbmdlIGlzIHRocm93bi4gIElmCisgICAgICAgKiAgdGhlIGxlbmd0aCBvZiByZXN1bHQgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgCisgICAgICAgKiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIGNoYXJhY3RlcnMgd2l0aCBtdWx0aXBsZSBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbjEgIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlcGxhY2VkLgorICAgICAgICogIEBwYXJhbSBfX24yICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgX19wb3MgPiBzaXplKCkuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtwb3MscG9zICsgbjEpIGZyb20gdGhpcworICAgICAgICogIHN0cmluZy4gIEluIHBsYWNlLCBAYSBfX24yIGNvcGllcyBvZiBAYSBfX2MgYXJlIGluc2VydGVkLgorICAgICAgICogIElmIEBhIF9fcG9zIGlzIGJleW9uZCBlbmQgb2Ygc3RyaW5nLCBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLgorICAgICAgICogIElmIHRoZSBsZW5ndGggb2YgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzCisgICAgICAgKiAgdGhyb3duLiAgVGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IKKyAgICAgICAqICBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQorICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX01fY2hlY2soX19wb3MsICJfX3ZlcnNhX3N0cmluZzo6cmVwbGFjZSIpLAorCQkJICAgICAgX01fbGltaXQoX19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX2kxICBJdGVyYXRvciByZWZlcmVuY2luZyBzdGFydCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX2kyICBJdGVyYXRvciByZWZlcmVuY2luZyBlbmQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyB2YWx1ZSB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbaTEsaTIpLiAgSW4gcGxhY2UsIHRoZQorICAgICAgICogIHZhbHVlIG9mIEBhIF9fc3RyIGlzIGluc2VydGVkLiAgSWYgdGhlIGxlbmd0aCBvZiByZXN1bHQKKyAgICAgICAqICBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YKKyAgICAgICAqICB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKQorICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIHJhbmdlIG9mIGNoYXJhY3RlcnMgd2l0aCBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19pMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdmFsdWUgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbaTEsaTIpLiAgSW4gcGxhY2UsIHRoZQorICAgICAgICogIGZpcnN0IEBhIG4gY2hhcmFjdGVycyBvZiBAYSBfX3MgYXJlIGluc2VydGVkLiAgSWYgdGhlIGxlbmd0aAorICAgICAgICogIG9mIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUKKyAgICAgICAqICB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9NX2liZWdpbigpIDw9IF9faTEgJiYgX19pMSA8PSBfX2kyCisJCQkJICYmIF9faTIgPD0gX01faWVuZCgpKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9faTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9faTIgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGVuZCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHZhbHVlIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhpcyBzdHJpbmcuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Omxlbmd0aF9lcnJvciAgSWYgbmV3IGxlbmd0aCBleGNlZWRzIEBjIG1heF9zaXplKCkuCisgICAgICAgKgorICAgICAgICogIFJlbW92ZXMgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtpMSxpMikuICBJbiBwbGFjZSwgdGhlCisgICAgICAgKiAgY2hhcmFjdGVycyBvZiBAYSBfX3MgYXJlIGluc2VydGVkLiAgSWYgdGhlIGxlbmd0aCBvZiByZXN1bHQKKyAgICAgICAqICBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUgdmFsdWUgb2YKKyAgICAgICAqICB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXBsYWNlIHJhbmdlIG9mIGNoYXJhY3RlcnMgd2l0aCBtdWx0aXBsZSBjaGFyYWN0ZXJzCisgICAgICAgKiAgQHBhcmFtIF9faTEgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIHN0YXJ0IG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9faTIgIEl0ZXJhdG9yIHJlZmVyZW5jaW5nIGVuZCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4KKyAgICAgICAqICBAcGFyYW0gX19jICBDaGFyYWN0ZXIgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2kxLGkyKS4gIEluIHBsYWNlLCBAYQorICAgICAgICogIF9fbiBjb3BpZXMgb2YgQGEgX19jIGFyZSBpbnNlcnRlZC4gIElmIHRoZSBsZW5ndGggb2YgcmVzdWx0CisgICAgICAgKiAgZXhjZWVkcyBtYXhfc2l6ZSgpLCBsZW5ndGhfZXJyb3IgaXMgdGhyb3duLiAgVGhlIHZhbHVlIG9mCisgICAgICAgKiAgdGhlIHN0cmluZyBkb2Vzbid0IGNoYW5nZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9NX2liZWdpbigpIDw9IF9faTEgJiYgX19pMSA8PSBfX2kyCisJCQkJICYmIF9faTIgPD0gX01faWVuZCgpKTsKKwlyZXR1cm4gX01fcmVwbGFjZV9hdXgoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19uLCBfX2MpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJlcGxhY2UgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3aXRoIHJhbmdlLgorICAgICAgICogIEBwYXJhbSBfX2kxICBJdGVyYXRvciByZWZlcmVuY2luZyBzdGFydCBvZiByYW5nZSB0byByZXBsYWNlLgorICAgICAgICogIEBwYXJhbSBfX2kyICBJdGVyYXRvciByZWZlcmVuY2luZyBlbmQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19rMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSBfX2syICBJdGVyYXRvciByZWZlcmVuY2luZyBlbmQgb2YgcmFuZ2UgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGlzIHN0cmluZy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6bGVuZ3RoX2Vycm9yICBJZiBuZXcgbGVuZ3RoIGV4Y2VlZHMgQGMgbWF4X3NpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgUmVtb3ZlcyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2kxLGkyKS4gIEluIHBsYWNlLAorICAgICAgICogIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFtrMSxrMikgYXJlIGluc2VydGVkLiAgSWYgdGhlIGxlbmd0aAorICAgICAgICogIG9mIHJlc3VsdCBleGNlZWRzIG1heF9zaXplKCksIGxlbmd0aF9lcnJvciBpcyB0aHJvd24uICBUaGUKKyAgICAgICAqICB2YWx1ZSBvZiB0aGUgc3RyaW5nIGRvZXNuJ3QgY2hhbmdlIGlmIGFuIGVycm9yIGlzIHRocm93bi4KKyAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisgICAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCisJCV9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCisgICAgICAgIHsKKwkgIF9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAgICYmIF9faTIgPD0gX01faWVuZCgpKTsKKwkgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwkgIHJldHVybiB0aGlzLT5fTV9yZXBsYWNlX2Rpc3BhdGNoKF9faTEsIF9faTIsIF9fazEsIF9fazIsCisJCQkJCSAgIHN0ZDo6X19mYWxzZV90eXBlKCkpOworCX0KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKKwkJX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19rMikKKyAgICAgICAgeworCSAgX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9NX2liZWdpbigpIDw9IF9faTEgJiYgX19pMSA8PSBfX2kyCisJCQkJICAgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCSAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fazEsIF9fazIpOworCSAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Ol9faXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9fdHlwZSBfSW50ZWdyYWw7CisJICByZXR1cm4gdGhpcy0+X01fcmVwbGFjZV9kaXNwYXRjaChfX2kxLCBfX2kyLCBfX2sxLCBfX2syLCBfSW50ZWdyYWwoKSk7CisJfQorI2VuZGlmCisKKyAgICAgIC8vIFNwZWNpYWxpemF0aW9ucyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIHBvaW50ZXIgYW5kIGl0ZXJhdG9yOgorICAgICAgLy8gdXNlZnVsIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB0ZW1wb3JhcnkgYnVmZmVyaW5nIGluIF9NX3JlcGxhY2UuCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9NX2liZWdpbigpIDw9IF9faTEgJiYgX19pMSA8PSBfX2kyCisJCQkJICYmIF9faTIgPD0gX01faWVuZCgpKTsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19rMSwgX19rMik7CisJcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKKwkJCSAgICAgX19rMSwgX19rMiAtIF9fazEpOworICAgICAgfQorCisgICAgICBfX3ZlcnNhX3N0cmluZyYKKyAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19QRURBU1NFUlQoX01faWJlZ2luKCkgPD0gX19pMSAmJiBfX2kxIDw9IF9faTIKKwkJCQkgJiYgX19pMiA8PSBfTV9pZW5kKCkpOworCV9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2sxLCBfX2syKTsKKwlyZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAorCQkJICAgICBfX2sxLCBfX2syIC0gX19rMSk7CisgICAgICB9CisKKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX1BFREFTU0VSVChfTV9pYmVnaW4oKSA8PSBfX2kxICYmIF9faTEgPD0gX19pMgorCQkJCSAmJiBfX2kyIDw9IF9NX2llbmQoKSk7CisJX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fazEsIF9fazIpOworCXJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCisJCQkgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7CisgICAgICB9CisKKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAorCSAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfUEVEQVNTRVJUKF9NX2liZWdpbigpIDw9IF9faTEgJiYgX19pMSA8PSBfX2kyCisJCQkJICYmIF9faTIgPD0gX01faWVuZCgpKTsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19rMSwgX19rMik7CisJcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKKwkJCSAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKKyAgICAgIH0KKyAgICAgIAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmVwbGFjZSByYW5nZSBvZiBjaGFyYWN0ZXJzIHdpdGggaW5pdGlhbGl6ZXJfbGlzdC4KKyAgICAgICAqICBAcGFyYW0gX19pMSAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgc3RhcnQgb2YgcmFuZ2UgdG8gcmVwbGFjZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiAgSXRlcmF0b3IgcmVmZXJlbmNpbmcgZW5kIG9mIHJhbmdlIHRvIHJlcGxhY2UuCisgICAgICAgKiAgQHBhcmFtIF9fbCAgVGhlIGluaXRpYWxpemVyX2xpc3Qgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuCisgICAgICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoaXMgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpsZW5ndGhfZXJyb3IgIElmIG5ldyBsZW5ndGggZXhjZWVkcyBAYyBtYXhfc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBSZW1vdmVzIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBbaTEsaTIpLiAgSW4gcGxhY2UsCisgICAgICAgKiAgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgW2sxLGsyKSBhcmUgaW5zZXJ0ZWQuICBJZiB0aGUgbGVuZ3RoCisgICAgICAgKiAgb2YgcmVzdWx0IGV4Y2VlZHMgbWF4X3NpemUoKSwgbGVuZ3RoX2Vycm9yIGlzIHRocm93bi4gIFRoZQorICAgICAgICogIHZhbHVlIG9mIHRoZSBzdHJpbmcgZG9lc24ndCBjaGFuZ2UgaWYgYW4gZXJyb3IgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIF9fdmVyc2Ffc3RyaW5nJiByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCisJCQkgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X0NoYXJUPiBfX2wpCisgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fbC5iZWdpbigpLCBfX2wuZW5kKCkpOyB9CisjZW5kaWYgLy8gQysrMTEKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KKwlfX3ZlcnNhX3N0cmluZyYKKwlfTV9yZXBsYWNlX2Rpc3BhdGNoKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnRlZ2VyIF9fbiwKKwkJCSAgICBfSW50ZWdlciBfX3ZhbCwgc3RkOjpfX3RydWVfdHlwZSkKKyAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZV9hdXgoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19uLCBfX3ZhbCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisJX192ZXJzYV9zdHJpbmcmCisJX01fcmVwbGFjZV9kaXNwYXRjaChpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAorCQkJICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIHN0ZDo6X19mYWxzZV90eXBlKTsKKworICAgICAgX192ZXJzYV9zdHJpbmcmCisgICAgICBfTV9yZXBsYWNlX2F1eChzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9fbjIsCisJCSAgICAgX0NoYXJUIF9fYyk7CisKKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgX01fcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCQkgY29uc3Qgc2l6ZV90eXBlIF9fbGVuMik7CisKKyAgICAgIF9fdmVyc2Ffc3RyaW5nJgorICAgICAgX01fYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKKworICAgIHB1YmxpYzoKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb3B5IHN1YnN0cmluZyBpbnRvIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGNvcHkgdmFsdWUgaW50by4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIHRvIGNvcHkuCisgICAgICAgKiAgQHJldHVybiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgY29waWVkCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgcG9zID4gc2l6ZSgpLgorICAgICAgICoKKyAgICAgICAqICBDb3BpZXMgdXAgdG8gQGEgX19uIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MgaW50byB0aGUKKyAgICAgICAqICBDIHN0cmluZyBAYSBzLiAgSWYgQGEgX19wb3MgaXMgZ3JlYXRlciB0aGFuIHNpemUoKSwKKyAgICAgICAqICBvdXRfb2ZfcmFuZ2UgaXMgdGhyb3duLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3dhcCBjb250ZW50cyB3aXRoIGFub3RoZXIgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFN0cmluZyB0byBzd2FwIHdpdGguCisgICAgICAgKgorICAgICAgICogIEV4Y2hhbmdlcyB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJpbmcgd2l0aCB0aGF0IG9mIEBhIF9fcyBpbgorICAgICAgICogIGNvbnN0YW50IHRpbWUuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChfX3ZlcnNhX3N0cmluZyYgX19zKQorICAgICAgeyB0aGlzLT5fTV9zd2FwKF9fcyk7IH0KKworICAgICAgLy8gU3RyaW5nIG9wZXJhdGlvbnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBjb25zdCBwb2ludGVyIHRvIG51bGwtdGVybWluYXRlZCBjb250ZW50cy4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBpcyBhIGhhbmRsZSB0byBpbnRlcm5hbCBkYXRhLiAgRG8gbm90IG1vZGlmeSBvciBkaXJlIHRoaW5ncyBtYXkKKyAgICAgICAqICBoYXBwZW4uCisgICAgICAqLworICAgICAgY29uc3QgX0NoYXJUKgorICAgICAgY19zdHIoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZGF0YSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGNvbnN0IHBvaW50ZXIgdG8gY29udGVudHMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaXMgYSBoYW5kbGUgdG8gaW50ZXJuYWwgZGF0YS4gIERvIG5vdCBtb2RpZnkgb3IgZGlyZSB0aGluZ3MgbWF5CisgICAgICAgKiAgaGFwcGVuLgorICAgICAgKi8KKyAgICAgIGNvbnN0IF9DaGFyVCoKKyAgICAgIGRhdGEoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZGF0YSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGNvcHkgb2YgYWxsb2NhdG9yIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgc3RyaW5nLgorICAgICAgKi8KKyAgICAgIGFsbG9jYXRvcl90eXBlCisgICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKHRoaXMtPl9NX2dldF9hbGxvY2F0b3IoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gQGEgX19zIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgdGhlIGZpcnN0IEBhCisgICAgICAgKiAgX19uIGNoYXJhY3RlcnMgaW4gQGEgX19zIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IGJlZ2lucy4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIHZhbHVlIG9mIEBhCisgICAgICAgKiAgX19zdHIgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlCisgICAgICAgKiAgaXQgYmVnaW5zLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKwlfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBzdGFydCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciB0aGUgdmFsdWUgb2YgQGEKKyAgICAgICAqICBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlCisgICAgICAgKiAgaXQgYmVnaW5zLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBAYSBfX2Mgd2l0aGluCisgICAgICAgKiAgdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzCisgICAgICAgKiAgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tIChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2Ygc3RhcnQgb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgdmFsdWUgb2YgQGEKKyAgICAgICAqICBfX3N0ciB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUKKyAgICAgICAqICBpdCBiZWdpbnMuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIHJmaW5kKGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKKwlfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBzZWFyY2ggZm9yLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIHRoZSBmaXJzdCBAYQorICAgICAgICogIF9fbiBjaGFyYWN0ZXJzIGluIEBhIF9fcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwKKyAgICAgICAqICByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCBiZWdpbnMuICBJZiBub3QgZm91bmQsIHJldHVybnMKKyAgICAgICAqICBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgQyBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHN0YXJ0IHNlYXJjaCBhdCAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIHN0YXJ0IG9mICBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGJhY2t3YXJkIGZvciB0aGUgdmFsdWUgb2YKKyAgICAgICAqICBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4CisgICAgICAgKiAgd2hlcmUgaXQgYmVnaW5zLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKKyAgICAgIHsKKwlfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisJcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSBfX2MgIENoYXJhY3RlciB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIEBhIF9fYyB3aXRoaW4KKyAgICAgICAqICB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMKKyAgICAgICAqICBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBvZiBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBvbmUgb2YgdGhlIGNoYXJhY3RlcnMgb2YKKyAgICAgICAqICBAYSBfX3N0ciB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzCisgICAgICAgKiAgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorCV9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG9mIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIFN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gcyB0byBzZWFyY2ggZm9yLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYKKyAgICAgICAqICBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLAorICAgICAgICogIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBvZiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciBvbmUgb2YgdGhlCisgICAgICAgKiAgY2hhcmFjdGVycyBvZiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMKKyAgICAgICAqICB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbSAoZGVmYXVsdCAwKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBmb3J3YXJkIGZvciB0aGUgY2hhcmFjdGVyCisgICAgICAgKiAgQGEgX19jIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleAorICAgICAgICogIHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBucG9zLgorICAgICAgICoKKyAgICAgICAqICBOb3RlOiBlcXVpdmFsZW50IHRvIGZpbmQoYywgcG9zKS4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgb2Ygc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBsb2NhdGUuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIG9uZSBvZiB0aGUKKyAgICAgICAqICBjaGFyYWN0ZXJzIG9mIEBhIF9fc3RyIHdpdGhpbiB0aGlzIHN0cmluZy4gIElmIGZvdW5kLAorICAgICAgICogIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcyBmb3VuZC4gIElmIG5vdCBmb3VuZCwgcmV0dXJucworICAgICAgICogIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAorCV9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBvZiBDIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20uCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIHNlYXJjaCBmb3IuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3Igb25lIG9mIHRoZQorICAgICAgICogIGZpcnN0IEBhIF9fbiBjaGFyYWN0ZXJzIG9mIEBhIF9fcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZgorICAgICAgICogIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsCisgICAgICAgKiAgcmV0dXJucyBucG9zLgorICAgICAgKi8KKyAgICAgIHNpemVfdHlwZQorICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBvZiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gbG9jYXRlLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20gKGRlZmF1bHQgZW5kKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGJhY2t3YXJkIGZvciBvbmUgb2YgdGhlCisgICAgICAgKiAgY2hhcmFjdGVycyBvZiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMKKyAgICAgICAqICB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIGxhc3QgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHBhcmFtIF9fYyAgQ2hhcmFjdGVyIHRvIGxvY2F0ZS4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggYmFjayBmcm9tIChkZWZhdWx0IGVuZCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgbGFzdCBvY2N1cnJlbmNlLgorICAgICAgICoKKyAgICAgICAqICBTdGFydGluZyBmcm9tIEBhIF9fcG9zLCBzZWFyY2hlcyBiYWNrd2FyZCBmb3IgQGEgX19jIHdpdGhpbgorICAgICAgICogIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0IHdhcworICAgICAgICogIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAgKgorICAgICAgICogIE5vdGU6IGVxdWl2YWxlbnQgdG8gcmZpbmQoYywgcG9zKS4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBmcm9tIChkZWZhdWx0IDApLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGZpcnN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGZvcndhcmQgZm9yIGEgY2hhcmFjdGVyIG5vdAorICAgICAgICogIGNvbnRhaW5lZCBpbiBAYSBfX3N0ciB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucworICAgICAgICogIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKKwlfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgcG9zaXRpb24gb2YgYSBjaGFyYWN0ZXIgbm90IGluIEMgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBhdm9pZC4KKyAgICAgICAqICBAcGFyYW0gX19wb3MgIEluZGV4IG9mIGNoYXJhY3RlciB0byBzZWFyY2ggZnJvbS4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIHMgdG8gY29uc2lkZXIuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgYSBjaGFyYWN0ZXIgbm90CisgICAgICAgKiAgY29udGFpbmVkIGluIHRoZSBmaXJzdCBAYSBfX24gY2hhcmFjdGVycyBvZiBAYSBfX3Mgd2l0aGluCisgICAgICAgKiAgdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzCisgICAgICAgKiAgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCisJCQlzaXplX3R5cGUgX19uKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgYSBjaGFyYWN0ZXIgbm90CisgICAgICAgKiAgY29udGFpbmVkIGluIEBhIF9fcyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucworICAgICAgICogIHRoZSBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAorICAgICAgeworCV9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKwlyZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kIHBvc2l0aW9uIG9mIGEgZGlmZmVyZW50IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gX19jICBDaGFyYWN0ZXIgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGZyb20gKGRlZmF1bHQgMCkuCisgICAgICAgKiAgQHJldHVybiAgSW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgZm9yd2FyZCBmb3IgYSBjaGFyYWN0ZXIKKyAgICAgICAqICBvdGhlciB0aGFuIEBhIF9fYyB3aXRoaW4gdGhpcyBzdHJpbmcuICBJZiBmb3VuZCwgcmV0dXJucyB0aGUKKyAgICAgICAqICBpbmRleCB3aGVyZSBpdCB3YXMgZm91bmQuICBJZiBub3QgZm91bmQsIHJldHVybnMgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CisJX0dMSUJDWFhfTk9FWENFUFQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20gKGRlZmF1bHQgZW5kKS4KKyAgICAgICAqICBAcmV0dXJuICBJbmRleCBvZiBsYXN0IG9jY3VycmVuY2UuCisgICAgICAgKgorICAgICAgICogIFN0YXJ0aW5nIGZyb20gQGEgX19wb3MsIHNlYXJjaGVzIGJhY2t3YXJkIGZvciBhIGNoYXJhY3RlcgorICAgICAgICogIG5vdCBjb250YWluZWQgaW4gQGEgX19zdHIgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsCisgICAgICAgKiAgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyLAorCQkgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZpbmQgbGFzdCBwb3NpdGlvbiBvZiBhIGNoYXJhY3RlciBub3QgaW4gQyBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgQyBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGF2b2lkLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgY2hhcmFjdGVyIHRvIHNlYXJjaCBiYWNrIGZyb20uCisgICAgICAgKiAgQHBhcmFtIF9fbiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBzIHRvIGNvbnNpZGVyLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyCisgICAgICAgKiAgbm90IGNvbnRhaW5lZCBpbiB0aGUgZmlyc3QgQGEgX19uIGNoYXJhY3RlcnMgb2YgQGEgX19zCisgICAgICAgKiAgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlIGluZGV4IHdoZXJlIGl0CisgICAgICAgKiAgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCisJCSAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgY2hhcmFjdGVyIG5vdCBpbiBDIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19zICBDIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyCisgICAgICAgKiAgbm90IGNvbnRhaW5lZCBpbiBAYSBfX3Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsCisgICAgICAgKiAgcmV0dXJucyB0aGUgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zCisgICAgICAgKiAgbnBvcy4KKyAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisgICAgICB7CisJX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3MpOworCXJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmluZCBsYXN0IHBvc2l0aW9uIG9mIGEgZGlmZmVyZW50IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcGFyYW0gX19jICBDaGFyYWN0ZXIgdG8gYXZvaWQuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJhY2sgZnJvbSAoZGVmYXVsdCBlbmQpLgorICAgICAgICogIEByZXR1cm4gIEluZGV4IG9mIGxhc3Qgb2NjdXJyZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgU3RhcnRpbmcgZnJvbSBAYSBfX3Bvcywgc2VhcmNoZXMgYmFja3dhcmQgZm9yIGEgY2hhcmFjdGVyCisgICAgICAgKiAgb3RoZXIgdGhhbiBAYSBfX2Mgd2l0aGluIHRoaXMgc3RyaW5nLiAgSWYgZm91bmQsIHJldHVybnMgdGhlCisgICAgICAgKiAgaW5kZXggd2hlcmUgaXQgd2FzIGZvdW5kLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIG5wb3MuCisgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CisJX0dMSUJDWFhfTk9FWENFUFQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgR2V0IGEgc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIChkZWZhdWx0IDApLgorICAgICAgICogIEBwYXJhbSBfX24gIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHN1YnN0cmluZyAoZGVmYXVsdCByZW1haW5kZXIpLgorICAgICAgICogIEByZXR1cm4gIFRoZSBuZXcgc3RyaW5nLgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIHBvcyA+IHNpemUoKS4KKyAgICAgICAqCisgICAgICAgKiAgQ29uc3RydWN0IGFuZCByZXR1cm4gYSBuZXcgc3RyaW5nIHVzaW5nIHRoZSBAYSBfX24KKyAgICAgICAqICBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IEBhIF9fcG9zLiAgSWYgdGhlIHN0cmluZyBpcyB0b28KKyAgICAgICAqICBzaG9ydCwgdXNlIHRoZSByZW1haW5kZXIgb2YgdGhlIGNoYXJhY3RlcnMuICBJZiBAYSBfX3BvcyBpcworICAgICAgICogIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIG91dF9vZl9yYW5nZSBpcyB0aHJvd24uCisgICAgICAqLworICAgICAgX192ZXJzYV9zdHJpbmcKKyAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX192ZXJzYV9zdHJpbmcoKnRoaXMsIF9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OnN1YnN0ciIpLAorCQkJICAgICAgX19uKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHRvIGEgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3N0ciAgU3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoaXMgc3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlIEBhCisgICAgICAgKiAgX19zdHIsIDAgaWYgdGhlaXIgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhpcworICAgICAgICogIHN0cmluZyBpcyBvcmRlcmVkIGFmdGVyIEBhIF9fc3RyLiAgRGV0ZXJtaW5lcyB0aGUgZWZmZWN0aXZlCisgICAgICAgKiAgbGVuZ3RoIHJsZW4gb2YgdGhlIHN0cmluZ3MgdG8gY29tcGFyZSBhcyB0aGUgc21hbGxlc3Qgb2YKKyAgICAgICAqICBzaXplKCkgYW5kIHN0ci5zaXplKCkuICBUaGUgZnVuY3Rpb24gdGhlbiBjb21wYXJlcyB0aGUgdHdvCisgICAgICAgKiAgc3RyaW5ncyBieSBjYWxsaW5nIHRyYWl0czo6Y29tcGFyZShkYXRhKCksIHN0ci5kYXRhKCkscmxlbikuCisgICAgICAgKiAgSWYgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyBub256ZXJvIHJldHVybnMgaXQsCisgICAgICAgKiAgb3RoZXJ3aXNlIHRoZSBzaG9ydGVyIG9uZSBpcyBvcmRlcmVkIGZpcnN0LgorICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIpIGNvbnN0CisgICAgICB7CisJaWYgKHRoaXMtPl9NX2NvbXBhcmUoX19zdHIpKQorCSAgcmV0dXJuIDA7CisKKwljb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworCWNvbnN0IHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOworCWNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CisKKwlpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUodGhpcy0+X01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKKwlpZiAoIV9fcikKKwkgIF9fciA9IHRoaXMtPl9TX2NvbXBhcmUoX19zaXplLCBfX29zaXplKTsKKwlyZXR1cm4gX19yOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbXBhcmUgc3Vic3RyaW5nIHRvIGEgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEByZXR1cm4gIEludGVnZXIgPCAwLCAwLCBvciA+IDAuCisgICAgICAgKgorICAgICAgICogIEZvcm0gdGhlIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyBmcm9tIHRoZSBAYSBfX24gY2hhcmFjdGVycworICAgICAgICogIHN0YXJ0aW5nIGF0IEBhIF9fcG9zLiAgUmV0dXJucyBhbiBpbnRlZ2VyIDwgMCBpZiB0aGUKKyAgICAgICAqICBzdWJzdHJpbmcgaXMgb3JkZXJlZCBiZWZvcmUgQGEgX19zdHIsIDAgaWYgdGhlaXIgdmFsdWVzIGFyZQorICAgICAgICogIGVxdWl2YWxlbnQsIG9yID4gMCBpZiB0aGUgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYWZ0ZXIgQGEKKyAgICAgICAqICBfX3N0ci4gIERldGVybWluZXMgdGhlIGVmZmVjdGl2ZSBsZW5ndGggcmxlbiBvZiB0aGUgc3RyaW5ncworICAgICAgICogIHRvIGNvbXBhcmUgYXMgdGhlIHNtYWxsZXN0IG9mIHRoZSBsZW5ndGggb2YgdGhlIHN1YnN0cmluZworICAgICAgICogIGFuZCBAYSBfX3N0ci5zaXplKCkuICBUaGUgZnVuY3Rpb24gdGhlbiBjb21wYXJlcyB0aGUgdHdvCisgICAgICAgKiAgc3RyaW5ncyBieSBjYWxsaW5nCisgICAgICAgKiAgdHJhaXRzOjpjb21wYXJlKHN1YnN0cmluZy5kYXRhKCksc3RyLmRhdGEoKSxybGVuKS4gIElmIHRoZQorICAgICAgICogIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyBub256ZXJvIHJldHVybnMgaXQsIG90aGVyd2lzZQorICAgICAgICogIHRoZSBzaG9ydGVyIG9uZSBpcyBvcmRlcmVkIGZpcnN0LgorICAgICAgKi8KKyAgICAgIGludAorICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sCisJICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmcmIF9fc3RyKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHN1YnN0cmluZyB0byBhIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19wb3MxICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX24xICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fc3RyICBTdHJpbmcgdG8gY29tcGFyZSBhZ2FpbnN0LgorICAgICAgICogIEBwYXJhbSBfX3BvczIgIEluZGV4IG9mIGZpcnN0IGNoYXJhY3RlciBvZiBzdWJzdHJpbmcgb2Ygc3RyLgorICAgICAgICogIEBwYXJhbSBfX24yICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdWJzdHJpbmcgb2Ygc3RyLgorICAgICAgICogIEByZXR1cm4gIEludGVnZXIgPCAwLCAwLCBvciA+IDAuCisgICAgICAgKgorICAgICAgICogIEZvcm0gdGhlIHN1YnN0cmluZyBvZiB0aGlzIHN0cmluZyBmcm9tIHRoZSBAYSBfX24xCisgICAgICAgKiAgY2hhcmFjdGVycyBzdGFydGluZyBhdCBAYSBfX3BvczEuICBGb3JtIHRoZSBzdWJzdHJpbmcgb2YgQGEKKyAgICAgICAqICBfX3N0ciBmcm9tIHRoZSBAYSBfX24yIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MyLgorICAgICAgICogIFJldHVybnMgYW4gaW50ZWdlciA8IDAgaWYgdGhpcyBzdWJzdHJpbmcgaXMgb3JkZXJlZCBiZWZvcmUKKyAgICAgICAqICB0aGUgc3Vic3RyaW5nIG9mIEBhIF9fc3RyLCAwIGlmIHRoZWlyIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwKKyAgICAgICAqICBvciA+IDAgaWYgdGhpcyBzdWJzdHJpbmcgaXMgb3JkZXJlZCBhZnRlciB0aGUgc3Vic3RyaW5nIG9mCisgICAgICAgKiAgQGEgX19zdHIuICBEZXRlcm1pbmVzIHRoZSBlZmZlY3RpdmUgbGVuZ3RoIHJsZW4gb2YgdGhlCisgICAgICAgKiAgc3RyaW5ncyB0byBjb21wYXJlIGFzIHRoZSBzbWFsbGVzdCBvZiB0aGUgbGVuZ3RocyBvZiB0aGUKKyAgICAgICAqICBzdWJzdHJpbmdzLiAgVGhlIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3byBzdHJpbmdzIGJ5CisgICAgICAgKiAgY2FsbGluZworICAgICAgICogIHRyYWl0czo6Y29tcGFyZShzdWJzdHJpbmcuZGF0YSgpLHN0ci5zdWJzdHIocG9zMixuMikuZGF0YSgpLHJsZW4pLgorICAgICAgICogIElmIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LAorICAgICAgICogIG90aGVyd2lzZSB0aGUgc2hvcnRlciBvbmUgaXMgb3JkZXJlZCBmaXJzdC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9fdmVyc2Ffc3RyaW5nJiBfX3N0ciwKKwkgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29tcGFyZSB0byBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmIHRoaXMgc3RyaW5nIGlzIG9yZGVyZWQgYmVmb3JlIEBhCisgICAgICAgKiAgX19zLCAwIGlmIHRoZWlyIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgb3IgPiAwIGlmIHRoaXMgc3RyaW5nCisgICAgICAgKiAgaXMgb3JkZXJlZCBhZnRlciBAYSBfX3MuICBEZXRlcm1pbmVzIHRoZSBlZmZlY3RpdmUgbGVuZ3RoCisgICAgICAgKiAgcmxlbiBvZiB0aGUgc3RyaW5ncyB0byBjb21wYXJlIGFzIHRoZSBzbWFsbGVzdCBvZiBzaXplKCkgYW5kCisgICAgICAgKiAgdGhlIGxlbmd0aCBvZiBhIHN0cmluZyBjb25zdHJ1Y3RlZCBmcm9tIEBhIF9fcy4gIFRoZQorICAgICAgICogIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3byBzdHJpbmdzIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoZGF0YSgpLHMscmxlbikuICBJZiB0aGUgcmVzdWx0IG9mIHRoZQorICAgICAgICogIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LCBvdGhlcndpc2UgdGhlIHNob3J0ZXIgb25lCisgICAgICAgKiAgaXMgb3JkZXJlZCBmaXJzdC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA1IFN0cmluZzo6Y29tcGFyZSBzcGVjaWZpY2F0aW9uIHF1ZXN0aW9uYWJsZQorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb21wYXJlIHN1YnN0cmluZyB0byBhIEMgc3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3BvcyAgSW5kZXggb2YgZmlyc3QgY2hhcmFjdGVyIG9mIHN1YnN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gX19uMSAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX3MgIEMgc3RyaW5nIHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBGb3JtIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgZnJvbSB0aGUgQGEgX19uMQorICAgICAgICogIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MuICBSZXR1cm5zIGFuIGludGVnZXIgPCAwIGlmCisgICAgICAgKiAgdGhlIHN1YnN0cmluZyBpcyBvcmRlcmVkIGJlZm9yZSBAYSBfX3MsIDAgaWYgdGhlaXIgdmFsdWVzCisgICAgICAgKiAgYXJlIGVxdWl2YWxlbnQsIG9yID4gMCBpZiB0aGUgc3Vic3RyaW5nIGlzIG9yZGVyZWQgYWZ0ZXIgQGEKKyAgICAgICAqICBfX3MuICBEZXRlcm1pbmVzIHRoZSBlZmZlY3RpdmUgbGVuZ3RoIHJsZW4gb2YgdGhlIHN0cmluZ3MgdG8KKyAgICAgICAqICBjb21wYXJlIGFzIHRoZSBzbWFsbGVzdCBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJzdHJpbmcgYW5kCisgICAgICAgKiAgdGhlIGxlbmd0aCBvZiBhIHN0cmluZyBjb25zdHJ1Y3RlZCBmcm9tIEBhIF9fcy4gIFRoZQorICAgICAgICogIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3byBzdHJpbmcgYnkgY2FsbGluZworICAgICAgICogIHRyYWl0czo6Y29tcGFyZShzdWJzdHJpbmcuZGF0YSgpLHMscmxlbikuICBJZiB0aGUgcmVzdWx0IG9mCisgICAgICAgKiAgdGhlIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LCBvdGhlcndpc2UgdGhlIHNob3J0ZXIKKyAgICAgICAqICBvbmUgaXMgb3JkZXJlZCBmaXJzdC4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbXBhcmUgc3Vic3RyaW5nIGFnYWluc3QgYSBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICAgKiAgQHBhcmFtIF9fcG9zICBJbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgb2Ygc3Vic3RyaW5nLgorICAgICAgICogIEBwYXJhbSBfX24xICBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdWJzdHJpbmcuCisgICAgICAgKiAgQHBhcmFtIF9fcyAgY2hhcmFjdGVyIGFycmF5IHRvIGNvbXBhcmUgYWdhaW5zdC4KKyAgICAgICAqICBAcGFyYW0gX19uMiAgTnVtYmVyIG9mIGNoYXJhY3RlcnMgb2Ygcy4KKyAgICAgICAqICBAcmV0dXJuICBJbnRlZ2VyIDwgMCwgMCwgb3IgPiAwLgorICAgICAgICoKKyAgICAgICAqICBGb3JtIHRoZSBzdWJzdHJpbmcgb2YgdGhpcyBzdHJpbmcgZnJvbSB0aGUgQGEgX19uMQorICAgICAgICogIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgQGEgX19wb3MuICBGb3JtIGEgc3RyaW5nIGZyb20gdGhlCisgICAgICAgKiAgZmlyc3QgQGEgX19uMiBjaGFyYWN0ZXJzIG9mIEBhIF9fcy4gIFJldHVybnMgYW4gaW50ZWdlciA8IDAKKyAgICAgICAqICBpZiB0aGlzIHN1YnN0cmluZyBpcyBvcmRlcmVkIGJlZm9yZSB0aGUgc3RyaW5nIGZyb20gQGEgX19zLAorICAgICAgICogIDAgaWYgdGhlaXIgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBvciA+IDAgaWYgdGhpcyBzdWJzdHJpbmcKKyAgICAgICAqICBpcyBvcmRlcmVkIGFmdGVyIHRoZSBzdHJpbmcgZnJvbSBAYSBfX3MuICBEZXRlcm1pbmVzIHRoZQorICAgICAgICogIGVmZmVjdGl2ZSBsZW5ndGggcmxlbiBvZiB0aGUgc3RyaW5ncyB0byBjb21wYXJlIGFzIHRoZQorICAgICAgICogIHNtYWxsZXN0IG9mIHRoZSBsZW5ndGggb2YgdGhlIHN1YnN0cmluZyBhbmQgQGEgX19uMi4gIFRoZQorICAgICAgICogIGZ1bmN0aW9uIHRoZW4gY29tcGFyZXMgdGhlIHR3byBzdHJpbmdzIGJ5IGNhbGxpbmcKKyAgICAgICAqICB0cmFpdHM6OmNvbXBhcmUoc3Vic3RyaW5nLmRhdGEoKSxfX3MscmxlbikuICBJZiB0aGUgcmVzdWx0IG9mCisgICAgICAgKiAgdGhlIGNvbXBhcmlzb24gaXMgbm9uemVybyByZXR1cm5zIGl0LCBvdGhlcndpc2UgdGhlIHNob3J0ZXIKKyAgICAgICAqICBvbmUgaXMgb3JkZXJlZCBmaXJzdC4KKyAgICAgICAqCisgICAgICAgKiAgTkI6IF9fcyBtdXN0IGhhdmUgYXQgbGVhc3QgbjIgY2hhcmFjdGVycywgPGVtPlxcMDwvZW0+IGhhcyBubyBzcGVjaWFsCisgICAgICAgKiAgbWVhbmluZy4KKyAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCisJICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OworICAgIH07CisKKyAgLy8gb3BlcmF0b3IrCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSB0d28gc3RyaW5ncy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCB2YWx1ZSBvZiBAYSBfX2xocyBmb2xsb3dlZCBieSBAYSBfX3Jocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKTsKKworICAvKioKKyAgICogIEBicmllZiAgQ29uY2F0ZW5hdGUgQyBzdHJpbmcgYW5kIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCB2YWx1ZSBvZiBAYSBfX2xocyBmb2xsb3dlZCBieSBAYSBfX3Jocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCisJICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpOworCisgIC8qKgorICAgKiAgQGJyaWVmICBDb25jYXRlbmF0ZSBjaGFyYWN0ZXIgYW5kIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBMYXN0IHN0cmluZy4KKyAgICogIEByZXR1cm4gIE5ldyBzdHJpbmcgd2l0aCBAYSBfX2xocyBmb2xsb3dlZCBieSBAYSBfX3Jocy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywKKwkgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3Jocyk7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIENvbmNhdGVuYXRlIHN0cmluZyBhbmQgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgTGFzdCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBOZXcgc3RyaW5nIHdpdGggQGEgX19saHMgZm9sbG93ZWQgYnkgQGEgX19yaHMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPgorICAgIG9wZXJhdG9yKyhjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKTsKKworICAvKioKKyAgICogIEBicmllZiAgQ29uY2F0ZW5hdGUgc3RyaW5nIGFuZCBjaGFyYWN0ZXIuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgTGFzdCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBOZXcgc3RyaW5nIHdpdGggQGEgX19saHMgZm9sbG93ZWQgYnkgQGEgX19yaHMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPgorICAgIG9wZXJhdG9yKyhjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICBfQ2hhclQgX19yaHMpOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYmIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIHN0ZDo6bW92ZShfX2xocy5hcHBlbmQoX19yaHMpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPgorICAgIG9wZXJhdG9yKyhjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiYgX19yaHMpCisgICAgeyByZXR1cm4gc3RkOjptb3ZlKF9fcmhzLmluc2VydCgwLCBfX2xocykpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mJiBfX2xocywKKwkgICAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiYgX19yaHMpCisgICAgeworICAgICAgY29uc3QgYXV0byBfX3NpemUgPSBfX2xocy5zaXplKCkgKyBfX3Jocy5zaXplKCk7CisgICAgICBjb25zdCBib29sIF9fY29uZCA9IChfX3NpemUgPiBfX2xocy5jYXBhY2l0eSgpCisJCQkgICAmJiBfX3NpemUgPD0gX19yaHMuY2FwYWNpdHkoKSk7CisgICAgICByZXR1cm4gX19jb25kID8gc3RkOjptb3ZlKF9fcmhzLmluc2VydCgwLCBfX2xocykpCisJICAgICAgICAgICAgOiBzdGQ6Om1vdmUoX19saHMuYXBwZW5kKF9fcmhzKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPgorICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mJiBfX3JocykKKyAgICB7IHJldHVybiBzdGQ6Om1vdmUoX19yaHMuaW5zZXJ0KDAsIF9fbGhzKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLAorCSAgICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mJiBfX3JocykKKyAgICB7IHJldHVybiBzdGQ6Om1vdmUoX19yaHMuaW5zZXJ0KDAsIDEsIF9fbGhzKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYmIF9fbGhzLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeyByZXR1cm4gc3RkOjptb3ZlKF9fbGhzLmFwcGVuZChfX3JocykpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mJiBfX2xocywKKwkgICAgICBfQ2hhclQgX19yaHMpCisgICAgeyByZXR1cm4gc3RkOjptb3ZlKF9fbGhzLmFwcGVuZCgxLCBfX3JocykpOyB9CisjZW5kaWYKKworICAvLyBvcGVyYXRvciA9PQorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBlcXVpdmFsZW5jZSBvZiB0d28gc3RyaW5ncy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocy5jb21wYXJlKEBhIF9fcmhzKSA9PSAwLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZW5hYmxlX2lmPHN0ZDo6X19pc19jaGFyPF9DaGFyVD46Ol9fdmFsdWUsIGJvb2w+OjpfX3R5cGUKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgc3RkOjpjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+LCBfQmFzZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiwgX0Jhc2U+JiBfX3JocykKKyAgICB7IHJldHVybiAoX19saHMuc2l6ZSgpID09IF9fcmhzLnNpemUoKQorCSAgICAgICYmICFzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD46OmNvbXBhcmUoX19saHMuZGF0YSgpLCBfX3Jocy5kYXRhKCksCisJCQkJCQkgICAgX19saHMuc2l6ZSgpKSk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBlcXVpdmFsZW5jZSBvZiBDIHN0cmluZyBhbmQgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX3Jocy5jb21wYXJlKEBhIF9fbGhzKSA9PSAwLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgZXF1aXZhbGVuY2Ugb2Ygc3RyaW5nIGFuZCBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgU3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMuY29tcGFyZShAYSBfX3JocykgPT0gMC4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQorCisgIC8vIG9wZXJhdG9yICE9CisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGRpZmZlcmVuY2Ugb2YgdHdvIHN0cmluZ3MuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMuY29tcGFyZShAYSBfX3JocykgIT0gMC4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgZGlmZmVyZW5jZSBvZiBDIHN0cmluZyBhbmQgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX3Jocy5jb21wYXJlKEBhIF9fbGhzKSAhPSAwLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGRpZmZlcmVuY2Ugb2Ygc3RyaW5nIGFuZCBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgU3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMuY29tcGFyZShAYSBfX3JocykgIT0gMC4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAvLyBvcGVyYXRvciA8CisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBwcmVjZWRlcyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgcHJlY2VkZXMgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgc3RyaW5nIHByZWNlZGVzIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBTdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIEMgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBwcmVjZWRlcyBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIEMgc3RyaW5nIHByZWNlZGVzIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgcHJlY2VkZXMgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KKworICAvLyBvcGVyYXRvciA+CisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBmb2xsb3dzIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgRmlyc3Qgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTZWNvbmQgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBmb2xsb3dzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBmb2xsb3dzIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBTdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIEMgc3RyaW5nLgorICAgKiAgQHJldHVybiAgVHJ1ZSBpZiBAYSBfX2xocyBmb2xsb3dzIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgQyBzdHJpbmcgZm9sbG93cyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGZvbGxvd3MgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KKworICAvLyBvcGVyYXRvciA8PQorICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBzdHJpbmcgZG9lc24ndCBmb2xsb3cgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFNlY29uZCBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGRvZXNuJ3QgZm9sbG93IEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBkb2Vzbid0IGZvbGxvdyBDIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2xocyAgU3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBDIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgZG9lc24ndCBmb2xsb3cgQGEgX19yaHMuICBGYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KKworICAvKioKKyAgICogIEBicmllZiAgVGVzdCBpZiBDIHN0cmluZyBkb2Vzbid0IGZvbGxvdyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGRvZXNuJ3QgZm9sbG93IEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAorCSAgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CisKKyAgLy8gb3BlcmF0b3IgPj0KKyAgLyoqCisgICAqICBAYnJpZWYgIFRlc3QgaWYgc3RyaW5nIGRvZXNuJ3QgcHJlY2VkZSBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEZpcnN0IHN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgU2Vjb25kIHN0cmluZy4KKyAgICogIEByZXR1cm4gIFRydWUgaWYgQGEgX19saHMgZG9lc24ndCBwcmVjZWRlIEBhIF9fcmhzLiAgRmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIHN0cmluZyBkb2Vzbid0IHByZWNlZGUgQyBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIFN0cmluZy4KKyAgICogIEBwYXJhbSBfX3JocyAgQyBzdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGRvZXNuJ3QgcHJlY2VkZSBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZXN0IGlmIEMgc3RyaW5nIGRvZXNuJ3QgcHJlY2VkZSBzdHJpbmcuCisgICAqICBAcGFyYW0gX19saHMgIEMgc3RyaW5nLgorICAgKiAgQHBhcmFtIF9fcmhzICBTdHJpbmcuCisgICAqICBAcmV0dXJuICBUcnVlIGlmIEBhIF9fbGhzIGRvZXNuJ3QgcHJlY2VkZSBAYSBfX3Jocy4gIEZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICAgY29uc3QgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBTd2FwIGNvbnRlbnRzIG9mIHR3byBzdHJpbmdzLgorICAgKiAgQHBhcmFtIF9fbGhzICBGaXJzdCBzdHJpbmcuCisgICAqICBAcGFyYW0gX19yaHMgIFNlY29uZCBzdHJpbmcuCisgICAqCisgICAqICBFeGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIEBhIF9fbGhzIGFuZCBAYSBfX3JocyBpbiBjb25zdGFudCB0aW1lLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX2xocywKKwkgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBicmllZiAgUmVhZCBzdHJlYW0gaW50byBhIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2lzICBJbnB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gX19zdHIgIEJ1ZmZlciB0byBzdG9yZSBpbnRvLgorICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICBTdG9yZXMgY2hhcmFjdGVycyBmcm9tIEBhIF9faXMgaW50byBAYSBfX3N0ciB1bnRpbCB3aGl0ZXNwYWNlIGlzCisgICAqICBmb3VuZCwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGlzIGVuY291bnRlcmVkLCBvciBzdHIubWF4X3NpemUoKQorICAgKiAgaXMgcmVhY2hlZC4gIElmIGlzLndpZHRoKCkgaXMgbm9uLXplcm8sIHRoYXQgaXMgdGhlIGxpbWl0IG9uIHRoZQorICAgKiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc3RvcmVkIGludG8gQGEgX19zdHIuICBBbnkgcHJldmlvdXMKKyAgICogIGNvbnRlbnRzIG9mIEBhIF9fc3RyIGFyZSBlcmFzZWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKyAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgX19nbnVfY3h4OjpfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jLCBfQmFzZT4mIF9fc3RyKTsKKworICAvKioKKyAgICogIEBicmllZiAgV3JpdGUgc3RyaW5nIHRvIGEgc3RyZWFtLgorICAgKiAgQHBhcmFtIF9fb3MgIE91dHB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gX19zdHIgIFN0cmluZyB0byB3cml0ZSBvdXQuCisgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhlIG91dHB1dCBzdHJlYW0uCisgICAqCisgICAqICBPdXRwdXQgY2hhcmFjdGVycyBvZiBAYSBfX3N0ciBpbnRvIG9zIGZvbGxvd2luZyB0aGUgc2FtZSBydWxlcyBhcyBmb3IKKyAgICogIHdyaXRpbmcgYSBDIHN0cmluZy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBfX2dudV9jeHg6Ol9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLAorCSAgICAgICBfQmFzZT4mIF9fc3RyKQorICAgIHsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDU4Ni4gc3RyaW5nIGluc2VydGVyIG5vdCBhIGZvcm1hdHRlZCBmdW5jdGlvbgorICAgICAgcmV0dXJuIF9fb3N0cmVhbV9pbnNlcnQoX19vcywgX19zdHIuZGF0YSgpLCBfX3N0ci5zaXplKCkpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiAgUmVhZCBhIGxpbmUgZnJvbSBzdHJlYW0gaW50byBhIHN0cmluZy4KKyAgICogIEBwYXJhbSBfX2lzICBJbnB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gX19zdHIgIEJ1ZmZlciB0byBzdG9yZSBpbnRvLgorICAgKiAgQHBhcmFtIF9fZGVsaW0gIENoYXJhY3RlciBtYXJraW5nIGVuZCBvZiBsaW5lLgorICAgKiAgQHJldHVybiAgUmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAqCisgICAqICBTdG9yZXMgY2hhcmFjdGVycyBmcm9tIEBhIF9faXMgaW50byBAYSBfX3N0ciB1bnRpbCBAYSBfX2RlbGltIGlzCisgICAqICBmb3VuZCwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGlzIGVuY291bnRlcmVkLCBvciBzdHIubWF4X3NpemUoKQorICAgKiAgaXMgcmVhY2hlZC4gIElmIGlzLndpZHRoKCkgaXMgbm9uLXplcm8sIHRoYXQgaXMgdGhlIGxpbWl0IG9uIHRoZQorICAgKiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc3RvcmVkIGludG8gQGEgX19zdHIuICBBbnkgcHJldmlvdXMKKyAgICogIGNvbnRlbnRzIG9mIEBhIF9fc3RyIGFyZSBlcmFzZWQuICBJZiBAYSBkZWxpbSB3YXMgZW5jb3VudGVyZWQsCisgICAqICBpdCBpcyBleHRyYWN0ZWQgYnV0IG5vdCBzdG9yZWQgaW50byBAYSBfX3N0ci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICBfX2dudV9jeHg6Ol9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fc3RyLAorCSAgICBfQ2hhclQgX19kZWxpbSk7CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJlYWQgYSBsaW5lIGZyb20gc3RyZWFtIGludG8gYSBzdHJpbmcuCisgICAqICBAcGFyYW0gX19pcyAgSW5wdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtIF9fc3RyICBCdWZmZXIgdG8gc3RvcmUgaW50by4KKyAgICogIEByZXR1cm4gIFJlZmVyZW5jZSB0byB0aGUgaW5wdXQgc3RyZWFtLgorICAgKgorICAgKiAgU3RvcmVzIGNoYXJhY3RlcnMgZnJvbSBpcyBpbnRvIEBhIF9fc3RyIHVudGlsICZhcG9zO1xuJmFwb3M7IGlzCisgICAqICBmb3VuZCwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGlzIGVuY291bnRlcmVkLCBvciBzdHIubWF4X3NpemUoKQorICAgKiAgaXMgcmVhY2hlZC4gIElmIGlzLndpZHRoKCkgaXMgbm9uLXplcm8sIHRoYXQgaXMgdGhlIGxpbWl0IG9uIHRoZQorICAgKiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc3RvcmVkIGludG8gQGEgX19zdHIuICBBbnkgcHJldmlvdXMKKyAgICogIGNvbnRlbnRzIG9mIEBhIF9fc3RyIGFyZSBlcmFzZWQuICBJZiBlbmQgb2YgbGluZSB3YXMKKyAgICogIGVuY291bnRlcmVkLCBpdCBpcyBleHRyYWN0ZWQgYnV0IG5vdCBzdG9yZWQgaW50byBAYSBfX3N0ci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgX19nbnVfY3h4OjpfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3N0cikKKyAgICB7IHJldHVybiBnZXRsaW5lKF9faXMsIF9fc3RyLCBfX2lzLndpZGVuKCdcbicpKTsgfSAgICAgIAorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNpZiAoKF9fY3BsdXNwbHVzID49IDIwMTEwM0wpICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OSkpCisKKyNpbmNsdWRlIDxleHQvc3RyaW5nX2NvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyAyMS40IE51bWVyaWMgQ29udmVyc2lvbnMgW3N0cmluZy5jb252ZXJzaW9uc10uCisgIGlubGluZSBpbnQKKyAgc3RvaShjb25zdCBfX3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hPGxvbmcsIGludD4oJnN0ZDo6c3RydG9sLCAic3RvaSIsIF9fc3RyLmNfc3RyKCksCisJCQkJCV9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIGxvbmcKKyAgc3RvbChjb25zdCBfX3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6OnN0cnRvbCwgInN0b2wiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSB1bnNpZ25lZCBsb25nCisgIHN0b3VsKGNvbnN0IF9fdnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDAsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG91bCwgInN0b3VsIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIHN0b2xsKGNvbnN0IF9fdnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDAsCWludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9sbCwgInN0b2xsIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nCisgIHN0b3VsbChjb25zdCBfX3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHgsIGludCBfX2Jhc2UgPSAxMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG91bGwsICJzdG91bGwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIC8vIE5COiBzdHJ0b2YgdnMgc3RydG9kLgorICBpbmxpbmUgZmxvYXQKKyAgc3RvZihjb25zdCBfX3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjpzdHJ0b2YsICJzdG9mIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyAgaW5saW5lIGRvdWJsZQorICBzdG9kKGNvbnN0IF9fdnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6OnN0cnRvZCwgInN0b2QiLCBfX3N0ci5jX3N0cigpLCBfX2lkeCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgc3RvbGQoY29uc3QgX192c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3N0b2EoJnN0ZDo6c3RydG9sZCwgInN0b2xkIiwgX19zdHIuY19zdHIoKSwgX19pZHgpOyB9CisKKyAgLy8gTkI6ICh2KXNucHJpbnRmIHZzIHNwcmludGYuCisKKyAgLy8gRFIgMTI2MS4KKyAgaW5saW5lIF9fdnN0cmluZworICB0b19zdHJpbmcoaW50IF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3ZzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwgNCAqIHNpemVvZihpbnQpLAorCQkJCQkgICAgICAiJWQiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgX192c3RyaW5nCisgIHRvX3N0cmluZyh1bnNpZ25lZCBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X192c3RyaW5nPigmc3RkOjp2c25wcmludGYsCisJCQkJCSAgICAgIDQgKiBzaXplb2YodW5zaWduZWQpLAorCQkJCQkgICAgICAiJXUiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgX192c3RyaW5nCisgIHRvX3N0cmluZyhsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3ZzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwKKwkJCQkJICAgICAgNCAqIHNpemVvZihsb25nKSwKKwkJCQkJICAgICAgIiVsZCIsIF9fdmFsKTsgfQorCisgIGlubGluZSBfX3ZzdHJpbmcKKyAgdG9fc3RyaW5nKHVuc2lnbmVkIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fdnN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLAorCQkJCQkgICAgICA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgICAiJWx1IiwgX192YWwpOyB9CisKKworICBpbmxpbmUgX192c3RyaW5nCisgIHRvX3N0cmluZyhsb25nIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fdnN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLAorCQkJCQkgICAgICA0ICogc2l6ZW9mKGxvbmcgbG9uZyksCisJCQkJCSAgICAgICIlbGxkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIF9fdnN0cmluZworICB0b19zdHJpbmcodW5zaWduZWQgbG9uZyBsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3ZzdHJpbmc+KCZzdGQ6OnZzbnByaW50ZiwKKwkJCQkJICAgICAgNCAqIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpLAorCQkJCQkgICAgICAiJWxsdSIsIF9fdmFsKTsgfQorCisgIGlubGluZSBfX3ZzdHJpbmcKKyAgdG9fc3RyaW5nKGZsb2F0IF9fdmFsKQorICB7CisgICAgY29uc3QgaW50IF9fbiA9IF9fbnVtZXJpY190cmFpdHM8ZmxvYXQ+OjpfX21heF9leHBvbmVudDEwICsgMjA7CisgICAgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fdnN0cmluZz4oJnN0ZDo6dnNucHJpbnRmLCBfX24sCisJCQkJCSAgICAgICIlZiIsIF9fdmFsKTsKKyAgfQorCisgIGlubGluZSBfX3ZzdHJpbmcKKyAgdG9fc3RyaW5nKGRvdWJsZSBfX3ZhbCkKKyAgeworICAgIGNvbnN0IGludCBfX24gPSBfX251bWVyaWNfdHJhaXRzPGRvdWJsZT46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X192c3RyaW5nPigmc3RkOjp2c25wcmludGYsIF9fbiwKKwkJCQkJICAgICAgIiVmIiwgX192YWwpOworICB9CisKKyAgaW5saW5lIF9fdnN0cmluZworICB0b19zdHJpbmcobG9uZyBkb3VibGUgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0gX19udW1lcmljX3RyYWl0czxsb25nIGRvdWJsZT46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X192c3RyaW5nPigmc3RkOjp2c25wcmludGYsIF9fbiwKKwkJCQkJICAgICAgIiVMZiIsIF9fdmFsKTsKKyAgfQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgaW5saW5lIGludCAKKyAgc3RvaShjb25zdCBfX3d2c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYTxsb25nLCBpbnQ+KCZzdGQ6Ondjc3RvbCwgInN0b2kiLCBfX3N0ci5jX3N0cigpLAorCQkJCQlfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSBsb25nIAorICBzdG9sKGNvbnN0IF9fd3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvbCwgInN0b2wiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSB1bnNpZ25lZCBsb25nCisgIHN0b3VsKGNvbnN0IF9fd3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvdWwsICJzdG91bCIsIF9fc3RyLmNfc3RyKCksCisJCQkgICAgIF9faWR4LCBfX2Jhc2UpOyB9CisKKyAgaW5saW5lIGxvbmcgbG9uZworICBzdG9sbChjb25zdCBfX3d2c3RyaW5nJiBfX3N0ciwgc3RkOjpzaXplX3QqIF9faWR4ID0gMCwgaW50IF9fYmFzZSA9IDEwKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fc3RvYSgmc3RkOjp3Y3N0b2xsLCAic3RvbGwiLCBfX3N0ci5jX3N0cigpLAorCQkJICAgICBfX2lkeCwgX19iYXNlKTsgfQorCisgIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcKKyAgc3RvdWxsKGNvbnN0IF9fd3ZzdHJpbmcmIF9fc3RyLCBzdGQ6OnNpemVfdCogX19pZHggPSAwLCBpbnQgX19iYXNlID0gMTApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvdWxsLCAic3RvdWxsIiwgX19zdHIuY19zdHIoKSwKKwkJCSAgICAgX19pZHgsIF9fYmFzZSk7IH0KKworICAvLyBOQjogd2NzdG9mIHZzIHdjc3RvZC4KKyAgaW5saW5lIGZsb2F0CisgIHN0b2YoY29uc3QgX193dnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvZiwgInN0b2YiLCBfX3N0ci5jX3N0cigpLCBfX2lkeCk7IH0KKworICBpbmxpbmUgZG91YmxlCisgIHN0b2QoY29uc3QgX193dnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvZCwgInN0b2QiLCBfX3N0ci5jX3N0cigpLCBfX2lkeCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgc3RvbGQoY29uc3QgX193dnN0cmluZyYgX19zdHIsIHN0ZDo6c2l6ZV90KiBfX2lkeCA9IDApCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19zdG9hKCZzdGQ6Ondjc3RvbGQsICJzdG9sZCIsIF9fc3RyLmNfc3RyKCksIF9faWR4KTsgfQorCisjaWZuZGVmIF9HTElCQ1hYX0hBVkVfQlJPS0VOX1ZTV1BSSU5URgorICAvLyBEUiAxMjYxLgorICBpbmxpbmUgX193dnN0cmluZworICB0b193c3RyaW5nKGludCBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X193dnN0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLAorCQkJCQkgICAgICAgNCAqIHNpemVvZihpbnQpLAorCQkJCQkgICAgICAgTCIlZCIsIF9fdmFsKTsgfQorCisgIGlubGluZSBfX3d2c3RyaW5nCisgIHRvX3dzdHJpbmcodW5zaWduZWQgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fd3ZzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwKKwkJCQkJICAgICAgIDQgKiBzaXplb2YodW5zaWduZWQpLAorCQkJCQkgICAgICAgTCIldSIsIF9fdmFsKTsgfQorCisgIGlubGluZSBfX3d2c3RyaW5nCisgIHRvX3dzdHJpbmcobG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X193dnN0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLAorCQkJCQkgICAgICAgNCAqIHNpemVvZihsb25nKSwKKwkJCQkJICAgICAgIEwiJWxkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIF9fd3ZzdHJpbmcKKyAgdG9fd3N0cmluZyh1bnNpZ25lZCBsb25nIF9fdmFsKQorICB7IHJldHVybiBfX2dudV9jeHg6Ol9fdG9feHN0cmluZzxfX3d2c3RyaW5nPigmc3RkOjp2c3dwcmludGYsCisJCQkJCSAgICAgICA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgICAgTCIlbHUiLCBfX3ZhbCk7IH0KKworICBpbmxpbmUgX193dnN0cmluZworICB0b193c3RyaW5nKGxvbmcgbG9uZyBfX3ZhbCkKKyAgeyByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X193dnN0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLAorCQkJCQkgICAgICAgNCAqIHNpemVvZihsb25nIGxvbmcpLAorCQkJCQkgICAgICAgTCIlbGxkIiwgX192YWwpOyB9CisKKyAgaW5saW5lIF9fd3ZzdHJpbmcKKyAgdG9fd3N0cmluZyh1bnNpZ25lZCBsb25nIGxvbmcgX192YWwpCisgIHsgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fd3ZzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwKKwkJCQkJICAgICAgIDQgKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSwKKwkJCQkJICAgICAgIEwiJWxsdSIsIF9fdmFsKTsgfQorCisgIGlubGluZSBfX3d2c3RyaW5nCisgIHRvX3dzdHJpbmcoZmxvYXQgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0gX19udW1lcmljX3RyYWl0czxmbG9hdD46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X193dnN0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLCBfX24sCisJCQkJCSAgICAgICBMIiVmIiwgX192YWwpOworICB9CisKKyAgaW5saW5lIF9fd3ZzdHJpbmcKKyAgdG9fd3N0cmluZyhkb3VibGUgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0gX19udW1lcmljX3RyYWl0czxkb3VibGU+OjpfX21heF9leHBvbmVudDEwICsgMjA7CisgICAgcmV0dXJuIF9fZ251X2N4eDo6X190b194c3RyaW5nPF9fd3ZzdHJpbmc+KCZzdGQ6OnZzd3ByaW50ZiwgX19uLAorCQkJCQkgICAgICAgTCIlZiIsIF9fdmFsKTsKKyAgfQorCisgIGlubGluZSBfX3d2c3RyaW5nCisgIHRvX3dzdHJpbmcobG9uZyBkb3VibGUgX192YWwpCisgIHsKKyAgICBjb25zdCBpbnQgX19uID0gX19udW1lcmljX3RyYWl0czxsb25nIGRvdWJsZT46Ol9fbWF4X2V4cG9uZW50MTAgKyAyMDsKKyAgICByZXR1cm4gX19nbnVfY3h4OjpfX3RvX3hzdHJpbmc8X193dnN0cmluZz4oJnN0ZDo6dnN3cHJpbnRmLCBfX24sCisJCQkJCSAgICAgICBMIiVMZiIsIF9fdmFsKTsKKyAgfQorI2VuZGlmCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworI2luY2x1ZGUgPGJpdHMvZnVuY3Rpb25hbF9oYXNoLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLy8gc3RkOjpoYXNoIHNwZWNpYWxpemF0aW9uIGZvciBfX3ZzdHJpbmcuCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgaGFzaDxfX2dudV9jeHg6Ol9fdnN0cmluZz4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIF9fZ251X2N4eDo6X192c3RyaW5nPgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX2dudV9jeHg6Ol9fdnN0cmluZyYgX19zKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gc3RkOjpfSGFzaF9pbXBsOjpoYXNoKF9fcy5kYXRhKCksIF9fcy5sZW5ndGgoKSk7IH0KKyAgICB9OworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgX193dnN0cmluZy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPF9fZ251X2N4eDo6X193dnN0cmluZz4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIF9fZ251X2N4eDo6X193dnN0cmluZz4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX19nbnVfY3h4OjpfX3d2c3RyaW5nJiBfX3MpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX19zLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MubGVuZ3RoKCkgKiBzaXplb2Yod2NoYXJfdCkpOyB9CisgICAgfTsKKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIF9fdTE2dnN0cmluZy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPF9fZ251X2N4eDo6X191MTZ2c3RyaW5nPgorICAgIDogcHVibGljIF9faGFzaF9iYXNlPHNpemVfdCwgX19nbnVfY3h4OjpfX3UxNnZzdHJpbmc+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9fZ251X2N4eDo6X191MTZ2c3RyaW5nJiBfX3MpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX19zLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MubGVuZ3RoKCkgKiBzaXplb2YoY2hhcjE2X3QpKTsgfQorICAgIH07CisKKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgX191MzJ2c3RyaW5nLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8X19nbnVfY3h4OjpfX3UzMnZzdHJpbmc+CisgICAgOiBwdWJsaWMgX19oYXNoX2Jhc2U8c2l6ZV90LCBfX2dudV9jeHg6Ol9fdTMydnN0cmluZz4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX19nbnVfY3h4OjpfX3UzMnZzdHJpbmcmIF9fcykgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X0hhc2hfaW1wbDo6aGFzaChfX3MuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcy5sZW5ndGgoKSAqIHNpemVvZihjaGFyMzJfdCkpOyB9CisgICAgfTsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBDKysxMQorCisjaW5jbHVkZSAidnN0cmluZy50Y2MiIAorCisjZW5kaWYgLyogX1ZTVFJJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvdnN0cmluZy50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC92c3RyaW5nLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGNkMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvdnN0cmluZy50Y2MKQEAgLTAsMCArMSw3MDEgQEAKKy8vIFZlcnNhdGlsZSBzdHJpbmcgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC92c3RyaW5nLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2V4dC92c3RyaW5nLmh9CisgKi8KKworI2lmbmRlZiBfVlNUUklOR19UQ0MKKyNkZWZpbmUgX1ZTVFJJTkdfVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jeHhhYmlfZm9yY2VkLmg+CisKK25hbWVzcGFjZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgY29uc3QgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6bnBvczsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdm9pZAorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBpZiAoX19zaXplIDwgX19uKQorCXRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CisgICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCisJdGhpcy0+X01fZXJhc2UoX19uLCBfX3NpemUgLSBfX24pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiYKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBfTV9hcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOworCisgICAgICBpZiAoX19sZW4gPD0gdGhpcy0+Y2FwYWNpdHkoKSAmJiAhdGhpcy0+X01faXNfc2hhcmVkKCkpCisJeworCSAgaWYgKF9fbikKKwkgICAgdGhpcy0+X1NfY29weSh0aGlzLT5fTV9kYXRhKCkgKyB0aGlzLT5zaXplKCksIF9fcywgX19uKTsKKwl9CisgICAgICBlbHNlCisJdGhpcy0+X01fbXV0YXRlKHRoaXMtPnNpemUoKSwgc2l6ZV90eXBlKDApLCBfX3MsIF9fbik7CisKKyAgICAgIHRoaXMtPl9NX3NldF9sZW5ndGgoX19sZW4pOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JgorICAgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgICBfTV9yZXBsYWNlX2Rpc3BhdGNoKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCisJCQkgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIHN0ZDo6X19mYWxzZV90eXBlKQorICAgICAgeworCWNvbnN0IF9fdmVyc2Ffc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKKwljb25zdCBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOworCXJldHVybiBfTV9yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19uMSwgX19zLl9NX2RhdGEoKSwKKwkJCSAgX19zLnNpemUoKSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgX01fcmVwbGFjZV9hdXgoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLAorCQkgICBfQ2hhclQgX19jKQorICAgIHsKKyAgICAgIF9NX2NoZWNrX2xlbmd0aChfX24xLCBfX24yLCAiX192ZXJzYV9zdHJpbmc6Ol9NX3JlcGxhY2VfYXV4Iik7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19uMiAtIF9fbjE7CisKKyAgICAgIGlmIChfX25ld19zaXplIDw9IHRoaXMtPmNhcGFjaXR5KCkgJiYgIXRoaXMtPl9NX2lzX3NoYXJlZCgpKQorCXsKKwkgIF9DaGFyVCogX19wID0gdGhpcy0+X01fZGF0YSgpICsgX19wb3MxOworCisJICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvczEgLSBfX24xOworCSAgaWYgKF9faG93X211Y2ggJiYgX19uMSAhPSBfX24yKQorCSAgICB0aGlzLT5fU19tb3ZlKF9fcCArIF9fbjIsIF9fcCArIF9fbjEsIF9faG93X211Y2gpOworCX0KKyAgICAgIGVsc2UKKwl0aGlzLT5fTV9tdXRhdGUoX19wb3MxLCBfX24xLCAwLCBfX24yKTsKKworICAgICAgaWYgKF9fbjIpCisJdGhpcy0+X1NfYXNzaWduKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zMSwgX19uMiwgX19jKTsKKworICAgICAgdGhpcy0+X01fc2V0X2xlbmd0aChfX25ld19zaXplKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgX01fcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4yKQorICAgIHsKKyAgICAgIF9NX2NoZWNrX2xlbmd0aChfX2xlbjEsIF9fbGVuMiwgIl9fdmVyc2Ffc3RyaW5nOjpfTV9yZXBsYWNlIik7CisKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOworICAgICAgCisgICAgICBpZiAoX19uZXdfc2l6ZSA8PSB0aGlzLT5jYXBhY2l0eSgpICYmICF0aGlzLT5fTV9pc19zaGFyZWQoKSkKKwl7CisJICBfQ2hhclQqIF9fcCA9IHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zOworCisJICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKKwkgIGlmIChfTV9kaXNqdW5jdChfX3MpKQorCSAgICB7CisJICAgICAgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKKwkJdGhpcy0+X1NfbW92ZShfX3AgKyBfX2xlbjIsIF9fcCArIF9fbGVuMSwgX19ob3dfbXVjaCk7CisJICAgICAgaWYgKF9fbGVuMikKKwkJdGhpcy0+X1NfY29weShfX3AsIF9fcywgX19sZW4yKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gV29yayBpbi1wbGFjZS4KKwkgICAgICBpZiAoX19sZW4yICYmIF9fbGVuMiA8PSBfX2xlbjEpCisJCXRoaXMtPl9TX21vdmUoX19wLCBfX3MsIF9fbGVuMik7CisJICAgICAgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKKwkJdGhpcy0+X1NfbW92ZShfX3AgKyBfX2xlbjIsIF9fcCArIF9fbGVuMSwgX19ob3dfbXVjaCk7CisJICAgICAgaWYgKF9fbGVuMiA+IF9fbGVuMSkKKwkJeworCQkgIGlmIChfX3MgKyBfX2xlbjIgPD0gX19wICsgX19sZW4xKQorCQkgICAgdGhpcy0+X1NfbW92ZShfX3AsIF9fcywgX19sZW4yKTsKKwkJICBlbHNlIGlmIChfX3MgPj0gX19wICsgX19sZW4xKQorCQkgICAgdGhpcy0+X1NfY29weShfX3AsIF9fcyArIF9fbGVuMiAtIF9fbGVuMSwgX19sZW4yKTsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25sZWZ0ID0gKF9fcCArIF9fbGVuMSkgLSBfX3M7CisJCSAgICAgIHRoaXMtPl9TX21vdmUoX19wLCBfX3MsIF9fbmxlZnQpOworCQkgICAgICB0aGlzLT5fU19jb3B5KF9fcCArIF9fbmxlZnQsIF9fcCArIF9fbGVuMiwKKwkJCQkgICAgX19sZW4yIC0gX19ubGVmdCk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl0aGlzLT5fTV9tdXRhdGUoX19wb3MsIF9fbGVuMSwgX19zLCBfX2xlbjIpOworCisgICAgICB0aGlzLT5fTV9zZXRfbGVuZ3RoKF9fbmV3X3NpemUpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4gX19zdHI7CisgICAgICBfX3N0ci5yZXNlcnZlKF9fbGhzLnNpemUoKSArIF9fcmhzLnNpemUoKSk7CisgICAgICBfX3N0ci5hcHBlbmQoX19saHMpOworICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKKyAgICAgIHJldHVybiBfX3N0cjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKKwkgICAgICBjb25zdCBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+JiBfX3JocykKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fbGhzKTsKKyAgICAgIHR5cGVkZWYgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPiBfX3N0cmluZ190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUJICBfX3NpemVfdHlwZTsKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsKKyAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CisgICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX2xocywgX19sZW4pOworICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKKyAgICAgIHJldHVybiBfX3N0cjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKyAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLAorCSAgICAgIGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4gX19zdHI7CisgICAgICBfX3N0ci5yZXNlcnZlKF9fcmhzLnNpemUoKSArIDEpOworICAgICAgX19zdHIucHVzaF9iYWNrKF9fbGhzKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CisgICAgICByZXR1cm4gX19zdHI7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZyhfX3Jocyk7CisgICAgICB0eXBlZGVmIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4gX19zdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlCSAgX19zaXplX3R5cGU7CisgICAgICBjb25zdCBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX3Jocyk7CisgICAgICBfX3N0cmluZ190eXBlIF9fc3RyOworICAgICAgX19zdHIucmVzZXJ2ZShfX2xocy5zaXplKCkgKyBfX2xlbik7CisgICAgICBfX3N0ci5hcHBlbmQoX19saHMpOworICAgICAgX19zdHIuYXBwZW5kKF9fcmhzLCBfX2xlbik7CisgICAgICByZXR1cm4gX19zdHI7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+CisgICAgb3BlcmF0b3IrKGNvbnN0IF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fbGhzLAorCSAgICAgIF9DaGFyVCBfX3JocykKKyAgICB7CisgICAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+IF9fc3RyOworICAgICAgX19zdHIucmVzZXJ2ZShfX2xocy5zaXplKCkgKyAxKTsKKyAgICAgIF9fc3RyLmFwcGVuZChfX2xocyk7CisgICAgICBfX3N0ci5wdXNoX2JhY2soX19yaHMpOworICAgICAgcmV0dXJuIF9fc3RyOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgIHsKKyAgICAgIF9NX2NoZWNrKF9fcG9zLCAiX192ZXJzYV9zdHJpbmc6OmNvcHkiKTsKKyAgICAgIF9fbiA9IF9NX2xpbWl0KF9fcG9zLCBfX24pOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgaWYgKF9fbikKKwl0aGlzLT5fU19jb3B5KF9fcywgdGhpcy0+X01fZGF0YSgpICsgX19wb3MsIF9fbik7CisgICAgICAvLyAyMS4zLjUuNyBwYXIgMzogZG8gbm90IGFwcGVuZCBudWxsLiAgKGdvb2QuKQorICAgICAgcmV0dXJuIF9fbjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIHR5cGVuYW1lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OnNpemVfdHlwZQorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSB0aGlzLT5fTV9kYXRhKCk7CisKKyAgICAgIGlmIChfX24gPT0gMCkKKwlyZXR1cm4gX19wb3MgPD0gX19zaXplID8gX19wb3MgOiBucG9zOworCisgICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKKwl7CisJICBmb3IgKDsgX19wb3MgPD0gX19zaXplIC0gX19uOyArK19fcG9zKQorCSAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9fZGF0YVtfX3Bvc10sIF9fc1swXSkKKwkJJiYgdHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MgKyAxLAorCQkJCQlfX3MgKyAxLCBfX24gLSAxKSA9PSAwKQorCSAgICAgIHJldHVybiBfX3BvczsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIHR5cGVuYW1lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OnNpemVfdHlwZQorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5wb3M7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQorCXsKKwkgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gdGhpcy0+X01fZGF0YSgpOworCSAgY29uc3Qgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOworCSAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOworCSAgaWYgKF9fcCkKKwkgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCisJeworCSAgX19wb3MgPSBzdGQ6Om1pbihzaXplX3R5cGUoX19zaXplIC0gX19uKSwgX19wb3MpOworCSAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSB0aGlzLT5fTV9kYXRhKCk7CisJICBkbworCSAgICB7CisJICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKKwkJcmV0dXJuIF9fcG9zOworCSAgICB9CisJICB3aGlsZSAoX19wb3MtLSA+IDApOworCX0KKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBpZiAoX19zaXplKQorCXsKKwkgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQorCSAgICBfX3NpemUgPSBfX3BvczsKKwkgIGZvciAoKytfX3NpemU7IF9fc2l6ZS0tID4gMDsgKQorCSAgICBpZiAodHJhaXRzX3R5cGU6OmVxKHRoaXMtPl9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQorCSAgICAgIHJldHVybiBfX3NpemU7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICB0eXBlbmFtZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjpzaXplX3R5cGUKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKKwl7CisJICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLAorCQkJCQkJdGhpcy0+X01fZGF0YSgpW19fcG9zXSk7CisJICBpZiAoX19wKQorCSAgICByZXR1cm4gX19wb3M7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICB0eXBlbmFtZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjpzaXplX3R5cGUKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbik7CisgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOworICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCisJeworCSAgaWYgKC0tX19zaXplID4gX19wb3MpCisJICAgIF9fc2l6ZSA9IF9fcG9zOworCSAgZG8KKwkgICAgeworCSAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgdGhpcy0+X01fZGF0YSgpW19fc2l6ZV0pKQorCQlyZXR1cm4gX19zaXplOworCSAgICB9CisJICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CisJfQorICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICB0eXBlbmFtZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjpzaXplX3R5cGUKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmdfbGVuKF9fcywgX19uKTsKKyAgICAgIGZvciAoOyBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKKwlpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCB0aGlzLT5fTV9kYXRhKClbX19wb3NdKSkKKwkgIHJldHVybiBfX3BvczsKKyAgICAgIHJldHVybiBucG9zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYywKKwkgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgdHlwZW5hbWUgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6c2l6ZV90eXBlCisgICAgX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIGZvciAoOyBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKKwlpZiAoIXRyYWl0c190eXBlOjplcSh0aGlzLT5fTV9kYXRhKClbX19wb3NdLCBfX2MpKQorCSAgcmV0dXJuIF9fcG9zOworICAgICAgcmV0dXJuIG5wb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICB0eXBlbmFtZSBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjpzaXplX3R5cGUKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgeworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N0cmluZ19sZW4oX19zLCBfX24pOworICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICAgIGlmIChfX3NpemUpCisJeworCSAgaWYgKC0tX19zaXplID4gX19wb3MpCisJICAgIF9fc2l6ZSA9IF9fcG9zOworCSAgZG8KKwkgICAgeworCSAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIHRoaXMtPl9NX2RhdGEoKVtfX3NpemVdKSkKKwkJcmV0dXJuIF9fc2l6ZTsKKwkgICAgfQorCSAgd2hpbGUgKF9fc2l6ZS0tKTsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIHR5cGVuYW1lIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OnNpemVfdHlwZQorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBpZiAoX19zaXplKQorCXsKKwkgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQorCSAgICBfX3NpemUgPSBfX3BvczsKKwkgIGRvCisJICAgIHsKKwkgICAgICBpZiAoIXRyYWl0c190eXBlOjplcSh0aGlzLT5fTV9kYXRhKClbX19zaXplXSwgX19jKSkKKwkJcmV0dXJuIF9fc2l6ZTsKKwkgICAgfQorCSAgd2hpbGUgKF9fc2l6ZS0tKTsKKwl9CisgICAgICByZXR1cm4gbnBvczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGludAorICAgIF9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT46OgorICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIpIGNvbnN0CisgICAgeworICAgICAgX01fY2hlY2soX19wb3MsICJfX3ZlcnNhX3N0cmluZzo6Y29tcGFyZSIpOworICAgICAgX19uID0gX01fbGltaXQoX19wb3MsIF9fbik7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbiwgX19vc2l6ZSk7CisgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUodGhpcy0+X01fZGF0YSgpICsgX19wb3MsCisJCQkJICAgICBfX3N0ci5kYXRhKCksIF9fbGVuKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IHRoaXMtPl9TX2NvbXBhcmUoX19uLCBfX29zaXplKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbnQKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfX3ZlcnNhX3N0cmluZyYgX19zdHIsCisJICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAorICAgIHsKKyAgICAgIF9NX2NoZWNrKF9fcG9zMSwgIl9fdmVyc2Ffc3RyaW5nOjpjb21wYXJlIik7CisgICAgICBfX3N0ci5fTV9jaGVjayhfX3BvczIsICJfX3ZlcnNhX3N0cmluZzo6Y29tcGFyZSIpOworICAgICAgX19uMSA9IF9NX2xpbWl0KF9fcG9zMSwgX19uMSk7CisgICAgICBfX24yID0gX19zdHIuX01fbGltaXQoX19wb3MyLCBfX24yKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbjEsIF9fbjIpOworICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zMSwKKwkJCQkgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOworICAgICAgaWYgKCFfX3IpCisJX19yID0gdGhpcy0+X1NfY29tcGFyZShfX24xLCBfX24yKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbnQKKyAgICBfX3ZlcnNhX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19zdHJpbmcoX19zKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CisgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUodGhpcy0+X01fZGF0YSgpLCBfX3MsIF9fbGVuKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IHRoaXMtPl9TX2NvbXBhcmUoX19zaXplLCBfX29zaXplKTsKKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorCSAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBpbnQKKyAgICBfX3ZlcnNhX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsIF9CYXNlPjo6CisgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nKF9fcyk7CisgICAgICBfTV9jaGVjayhfX3BvcywgIl9fdmVyc2Ffc3RyaW5nOjpjb21wYXJlIik7CisgICAgICBfX24xID0gX01fbGltaXQoX19wb3MsIF9fbjEpOworICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CisgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX24xLCBfX29zaXplKTsKKyAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZSh0aGlzLT5fTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CisgICAgICBpZiAoIV9fcikKKwlfX3IgPSB0aGlzLT5fU19jb21wYXJlKF9fbjEsIF9fb3NpemUpOworICAgICAgcmV0dXJuIF9fcjsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisJICAgdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CYXNlPgorICAgIGludAorICAgIF9fdmVyc2Ffc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYywgX0Jhc2U+OjoKKyAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAorCSAgICBzaXplX3R5cGUgX19uMikgY29uc3QKKyAgICB7CisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3RyaW5nX2xlbihfX3MsIF9fbjIpOworICAgICAgX01fY2hlY2soX19wb3MsICJfX3ZlcnNhX3N0cmluZzo6Y29tcGFyZSIpOworICAgICAgX19uMSA9IF9NX2xpbWl0KF9fcG9zLCBfX24xKTsKKyAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fbjEsIF9fbjIpOworICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKHRoaXMtPl9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKKyAgICAgIGlmICghX19yKQorCV9fciA9IHRoaXMtPl9TX2NvbXBhcmUoX19uMSwgX19uMik7CisgICAgICByZXR1cm4gX19yOworICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MsCisgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBjbGFzcyBfQmFzZT4KKyAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCisJICAgICAgIF9fZ251X2N4eDo6X192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvYywgX0Jhc2U+JiBfX3N0cikKKyAgICB7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgICAgICAgICAgIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgICAgICBfX2lvc19iYXNlOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmluZ190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUJCV9faW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkJX19zaXplX3R5cGU7CisgICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4JCQkJX19jdHlwZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2N0eXBlX3R5cGU6OmN0eXBlX2Jhc2UgICAgICAgICBfX2N0eXBlX2Jhc2U7CisKKyAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKKyAgICAgIHR5cGVuYW1lIF9faW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBfX2lvc19iYXNlOjpnb29kYml0OworICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgLy8gQXZvaWQgcmVhbGxvY2F0aW9uIGZvciBjb21tb24gY2FzZS4KKwkgICAgICBfX3N0ci5lcmFzZSgpOworCSAgICAgIF9DaGFyVCBfX2J1ZlsxMjhdOworCSAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gMDsKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKKwkgICAgICBjb25zdCBfX3NpemVfdHlwZSBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX3N0ci5tYXhfc2l6ZSgpOworCSAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdCA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOworCSAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKKwkgICAgICBfX2ludF90eXBlIF9fYyA9IF9faW4ucmRidWYoKS0+c2dldGMoKTsKKworCSAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbgorCQkgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQorCQkgICAgICYmICFfX2N0LmlzKF9fY3R5cGVfYmFzZTo6c3BhY2UsCisJCQkJIF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpKSkKKwkJeworCQkgIGlmIChfX2xlbiA9PSBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCisJCSAgICB7CisJCSAgICAgIF9fc3RyLmFwcGVuZChfX2J1Ziwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKTsKKwkJICAgICAgX19sZW4gPSAwOworCQkgICAgfQorCQkgIF9fYnVmW19fbGVuKytdID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CisJCSAgKytfX2V4dHJhY3RlZDsKKwkJICBfX2MgPSBfX2luLnJkYnVmKCktPnNuZXh0YygpOworCQl9CisJICAgICAgX19zdHIuYXBwZW5kKF9fYnVmLCBfX2xlbik7CisKKwkgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCisJCV9fZXJyIHw9IF9faW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgICBfX2luLndpZHRoKDApOworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICBfX2luLl9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgICAgIC8vIDkxLiBEZXNjcmlwdGlvbiBvZiBvcGVyYXRvcj4+IGFuZCBnZXRsaW5lKCkgZm9yIHN0cmluZzw+CisJICAgICAgLy8gbWlnaHQgY2F1c2UgZW5kbGVzcyBsb29wCisJICAgICAgX19pbi5fTV9zZXRzdGF0ZShfX2lvc19iYXNlOjpiYWRiaXQpOworCSAgICB9CisJfQorICAgICAgLy8gMjExLiAgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc3RyaW5nJikgZG9lc24ndCBzZXQgZmFpbGJpdAorICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKKwlfX2VyciB8PSBfX2lvc19iYXNlOjpmYWlsYml0OworICAgICAgaWYgKF9fZXJyKQorCV9faW4uc2V0c3RhdGUoX19lcnIpOworICAgICAgcmV0dXJuIF9faW47CisgICAgfSAgICAgIAorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jLAorICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2U+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAorCSAgICBfX2dudV9jeHg6Ol9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4mIF9fc3RyLAorCSAgICBfQ2hhclQgX19kZWxpbSkKKyAgICB7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgkgICAgICAgIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgICAgICBfX2lvc19iYXNlOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLCBfQmFzZT4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmluZ190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUJCV9faW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkJX19zaXplX3R5cGU7CisKKyAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKKyAgICAgIGNvbnN0IF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CisgICAgICB0eXBlbmFtZSBfX2lvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gX19pb3NfYmFzZTo6Z29vZGJpdDsKKyAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgLy8gQXZvaWQgcmVhbGxvY2F0aW9uIGZvciBjb21tb24gY2FzZS4KKwkgICAgICBfX3N0ci5lcmFzZSgpOworCSAgICAgIF9DaGFyVCBfX2J1ZlsxMjhdOworCSAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gMDsKKwkgICAgICBjb25zdCBfX2ludF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7CisJICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOworCSAgICAgIF9faW50X3R5cGUgX19jID0gX19pbi5yZGJ1ZigpLT5zZ2V0YygpOworCisJICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uCisJCSAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCisJCSAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQorCQl7CisJCSAgaWYgKF9fbGVuID09IHNpemVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKKwkJICAgIHsKKwkJICAgICAgX19zdHIuYXBwZW5kKF9fYnVmLCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpOworCQkgICAgICBfX2xlbiA9IDA7CisJCSAgICB9CisJCSAgX19idWZbX19sZW4rK10gPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKKwkJICArK19fZXh0cmFjdGVkOworCQkgIF9fYyA9IF9faW4ucmRidWYoKS0+c25leHRjKCk7CisJCX0KKwkgICAgICBfX3N0ci5hcHBlbmQoX19idWYsIF9fbGVuKTsKKworCSAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKKwkJX19lcnIgfD0gX19pb3NfYmFzZTo6ZW9mYml0OworCSAgICAgIGVsc2UgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQorCQl7CisJCSAgKytfX2V4dHJhY3RlZDsJCSAgCisJCSAgX19pbi5yZGJ1ZigpLT5zYnVtcGMoKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJX19lcnIgfD0gX19pb3NfYmFzZTo6ZmFpbGJpdDsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgX19pbi5fTV9zZXRzdGF0ZShfX2lvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgICAgICAvLyA5MS4gRGVzY3JpcHRpb24gb2Ygb3BlcmF0b3I+PiBhbmQgZ2V0bGluZSgpIGZvciBzdHJpbmc8PgorCSAgICAgIC8vIG1pZ2h0IGNhdXNlIGVuZGxlc3MgbG9vcAorCSAgICAgIF9faW4uX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgfQorCX0KKyAgICAgIGlmICghX19leHRyYWN0ZWQpCisJX19lcnIgfD0gX19pb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgIGlmIChfX2VycikKKwlfX2luLnNldHN0YXRlKF9fZXJyKTsKKyAgICAgIHJldHVybiBfX2luOworICAgIH0gICAgICAKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gX1ZTVFJJTkdfVENDCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2V4dC92c3RyaW5nX2Z3ZC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvdnN0cmluZ19md2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTE3ZTkzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvdnN0cmluZ19md2QuaApAQCAtMCwwICsxLDg5IEBACisvLyA8dnN0cmluZy5oPiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXh0L3ZzdHJpbmdfZndkLmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtleHQvdnN0cmluZy5ofQorICovCisKKyNpZm5kZWYgX1ZTVFJJTkdfRldEX0gKKyNkZWZpbmUgX1ZTVFJJTkdfRldEX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvY2hhcl90cmFpdHMuaD4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX19zc29fc3RyaW5nX2Jhc2U7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgX19yY19zdHJpbmdfYmFzZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4sCisJICAgdGVtcGxhdGUKKwkgICA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgX0Jhc2UgPSBfX3Nzb19zdHJpbmdfYmFzZT4KKyAgICBjbGFzcyBfX3ZlcnNhX3N0cmluZzsKKworICB0eXBlZGVmIF9fdmVyc2Ffc3RyaW5nPGNoYXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192c3RyaW5nOworICB0eXBlZGVmIF9fdnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zc29fc3RyaW5nOworICB0eXBlZGVmIAorICBfX3ZlcnNhX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LAorCQkgc3RkOjphbGxvY2F0b3I8Y2hhcj4sIF9fcmNfc3RyaW5nX2Jhc2U+ICAgIF9fcmNfc3RyaW5nOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdHlwZWRlZiBfX3ZlcnNhX3N0cmluZzx3Y2hhcl90PiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3ZzdHJpbmc7CisgIHR5cGVkZWYgX193dnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzc29fc3RyaW5nOworICB0eXBlZGVmCisgIF9fdmVyc2Ffc3RyaW5nPHdjaGFyX3QsIHN0ZDo6Y2hhcl90cmFpdHM8d2NoYXJfdD4sCisJCSBzdGQ6OmFsbG9jYXRvcjx3Y2hhcl90PiwgX19yY19zdHJpbmdfYmFzZT4gX193cmNfc3RyaW5nOworI2VuZGlmICAKKworI2lmICgoX19jcGx1c3BsdXMgPj0gMjAxMTAzTCkgXAorICAgICAmJiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMSkpCisKKyAgdHlwZWRlZiBfX3ZlcnNhX3N0cmluZzxjaGFyMTZfdD4gICAgICAgICAgICAgICAgICAgICAgICAgIF9fdTE2dnN0cmluZzsKKyAgdHlwZWRlZiBfX3UxNnZzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdTE2c3NvX3N0cmluZzsKKyAgdHlwZWRlZiAKKyAgX192ZXJzYV9zdHJpbmc8Y2hhcjE2X3QsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcjE2X3Q+LAorCQkgc3RkOjphbGxvY2F0b3I8Y2hhcjE2X3Q+LCBfX3JjX3N0cmluZ19iYXNlPiBfX3UxNnJjX3N0cmluZzsKKworICB0eXBlZGVmIF9fdmVyc2Ffc3RyaW5nPGNoYXIzMl90PiAgICAgICAgICAgICAgICAgICAgICAgICAgX191MzJ2c3RyaW5nOworICB0eXBlZGVmIF9fdTMydnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191MzJzc29fc3RyaW5nOworICB0eXBlZGVmIAorICBfX3ZlcnNhX3N0cmluZzxjaGFyMzJfdCwgc3RkOjpjaGFyX3RyYWl0czxjaGFyMzJfdD4sCisJCSBzdGQ6OmFsbG9jYXRvcjxjaGFyMzJfdD4sIF9fcmNfc3RyaW5nX2Jhc2U+IF9fdTMycmNfc3RyaW5nOworCisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX1ZTVFJJTkdfRldEX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3ZzdHJpbmdfdXRpbC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9leHQvdnN0cmluZ191dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyODIzNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZXh0L3ZzdHJpbmdfdXRpbC5oCkBAIC0wLDAgKzEsMTgzIEBACisvLyBWZXJzYXRpbGUgc3RyaW5nIHV0aWxpdHkgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGV4dC92c3RyaW5nX3V0aWwuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2V4dC92c3RyaW5nLmh9CisgKi8KKworI2lmbmRlZiBfVlNUUklOR19VVElMX0gKKyNkZWZpbmUgX1ZTVFJJTkdfVVRJTF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8ZXh0L3ZzdHJpbmdfZndkLmg+CisjaW5jbHVkZSA8ZGVidWcvZGVidWcuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPiAgLy8gRm9yIGxlc3MKKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4KKyNpbmNsdWRlIDxiaXRzL29zdHJlYW1faW5zZXJ0Lmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxleHQvbnVtZXJpY190cmFpdHMuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKyNpbmNsdWRlIDxiaXRzL3JhbmdlX2FjY2Vzcy5oPgorCituYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9fdnN0cmluZ191dGlsaXR5CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxfQ2hhclQ+OjpvdGhlciBfQ2hhclRfYWxsb2NfdHlwZTsKKworICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJCQkgICAgdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZQkJICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpzaXplX3R5cGUJICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0NoYXJUX2FsbG9jX3R5cGU6OnBvaW50ZXIJICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9DaGFyVF9hbGxvY190eXBlOjpjb25zdF9wb2ludGVyCSAgICBjb25zdF9wb2ludGVyOworCisgICAgICAvLyBGb3IgX19zc29fc3RyaW5nLgorICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OgorICAgICAgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgX19nbnVfY3h4OjoKKwkJCV9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLAorCQkJCSAgICAgICBfX3Nzb19zdHJpbmdfYmFzZT4gPgorCV9fc3NvX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OgorICAgICAgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgX19nbnVfY3h4OjoKKwkJCV9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLAorCQkJCSAgICAgICBfX3Nzb19zdHJpbmdfYmFzZT4gPgorCV9fY29uc3Rfc3NvX2l0ZXJhdG9yOworCisgICAgICAvLyBGb3IgX19yY19zdHJpbmcuCisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6CisgICAgICBfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBfX2dudV9jeHg6OgorCQkJX192ZXJzYV9zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MsCisJCQkJICAgICAgIF9fcmNfc3RyaW5nX2Jhc2U+ID4KKwlfX3JjX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2dudV9jeHg6OgorICAgICAgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgX19nbnVfY3h4OjoKKwkJCV9fdmVyc2Ffc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jLAorCQkJCSAgICAgICBfX3JjX3N0cmluZ19iYXNlPiA+CisJX19jb25zdF9yY19pdGVyYXRvcjsKKworICAgICAgLy8gTkI6ICBXaGVuIHRoZSBhbGxvY2F0b3IgaXMgZW1wdHksIGRlcml2aW5nIGZyb20gaXQgc2F2ZXMgc3BhY2UKKyAgICAgIC8vIChodHRwOi8vd3d3LmNhbnRyaXAub3JnL2VtcHR5b3B0Lmh0bWwpLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jMT4KKwlzdHJ1Y3QgX0FsbG9jX2hpZGVyCisJOiBwdWJsaWMgX0FsbG9jMQorCXsKKwkgIF9BbGxvY19oaWRlcihfQ2hhclQqIF9fcHRyKQorCSAgOiBfQWxsb2MxKCksIF9NX3AoX19wdHIpIHsgfQorCisJICBfQWxsb2NfaGlkZXIoY29uc3QgX0FsbG9jMSYgX19hLCBfQ2hhclQqIF9fcHRyKQorCSAgOiBfQWxsb2MxKF9fYSksIF9NX3AoX19wdHIpIHsgfQorCisJICBfQ2hhclQqICBfTV9wOyAvLyBUaGUgYWN0dWFsIGRhdGEuCisJfTsKKworICAgICAgLy8gV2hlbiBfX24gPSAxIHdheSBmYXN0ZXIgdGhhbiB0aGUgZ2VuZXJhbCBtdWx0aWNoYXIKKyAgICAgIC8vIHRyYWl0c190eXBlOjpjb3B5L21vdmUvYXNzaWduLgorICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2NvcHkoX0NoYXJUKiBfX2QsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQorICAgICAgeworCWlmIChfX24gPT0gMSkKKwkgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fZCwgKl9fcyk7CisJZWxzZQorCSAgdHJhaXRzX3R5cGU6OmNvcHkoX19kLCBfX3MsIF9fbik7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19tb3ZlKF9DaGFyVCogX19kLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlpZiAoX19uID09IDEpCisJICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX2QsICpfX3MpOworCWVsc2UKKwkgIHRyYWl0c190eXBlOjptb3ZlKF9fZCwgX19zLCBfX24pOworICAgICAgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfYXNzaWduKF9DaGFyVCogX19kLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQorICAgICAgeworCWlmIChfX24gPT0gMSkKKwkgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fZCwgX19jKTsKKwllbHNlCisJICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fZCwgX19uLCBfX2MpOworICAgICAgfQorCisgICAgICAvLyBfU19jb3B5X2NoYXJzIGlzIGEgc2VwYXJhdGUgdGVtcGxhdGUgdG8gcGVybWl0IHNwZWNpYWxpemF0aW9uCisgICAgICAvLyB0byBvcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIHBvaW50ZXJzIGFzIGl0ZXJhdG9ycy4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKwlzdGF0aWMgdm9pZAorCV9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKKwl7CisJICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQorCSAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsgLy8gVGhlc2UgdHlwZXMgYXJlIG9mZi4KKwl9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfX3Nzb19pdGVyYXRvciBfX2sxLCBfX3Nzb19pdGVyYXRvciBfX2syKQorICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX19jb25zdF9zc29faXRlcmF0b3IgX19rMSwKKwkJICAgIF9fY29uc3Rfc3NvX2l0ZXJhdG9yIF9fazIpCisgICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfX3JjX2l0ZXJhdG9yIF9fazEsIF9fcmNfaXRlcmF0b3IgX19rMikKKyAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9fY29uc3RfcmNfaXRlcmF0b3IgX19rMSwKKwkJICAgIF9fY29uc3RfcmNfaXRlcmF0b3IgX19rMikKKyAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQorICAgICAgeyBfU19jb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKKyAgICAgIHsgX1NfY29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQorCisgICAgICBzdGF0aWMgaW50CisgICAgICBfU19jb21wYXJlKHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMikKKyAgICAgIHsKKwljb25zdCBkaWZmZXJlbmNlX3R5cGUgX19kID0gZGlmZmVyZW5jZV90eXBlKF9fbjEgLSBfX24yKTsKKworCWlmIChfX2QgPiBfX251bWVyaWNfdHJhaXRzX2ludGVnZXI8aW50Pjo6X19tYXgpCisJICByZXR1cm4gX19udW1lcmljX3RyYWl0c19pbnRlZ2VyPGludD46Ol9fbWF4OworCWVsc2UgaWYgKF9fZCA8IF9fbnVtZXJpY190cmFpdHNfaW50ZWdlcjxpbnQ+OjpfX21pbikKKwkgIHJldHVybiBfX251bWVyaWNfdHJhaXRzX2ludGVnZXI8aW50Pjo6X19taW47CisJZWxzZQorCSAgcmV0dXJuIGludChfX2QpOworICAgICAgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9WU1RSSU5HX1VUSUxfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9mZW52LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2ZlbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGI4MjVkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9mZW52LmgKQEAgLTAsMCArMSw4MSBAQAorLy8gLSotIEMrKyAtKi0gY29tcGF0aWJpbGl0eSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBmZW52LmgKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfRkVOVl9ICisjZGVmaW5lIF9HTElCQ1hYX0ZFTlZfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaWYgX0dMSUJDWFhfSEFWRV9GRU5WX0gKKyMgaW5jbHVkZV9uZXh0IDxmZW52Lmg+CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfRkVOVl9UUjEKKworI3VuZGVmIGZlY2xlYXJleGNlcHQKKyN1bmRlZiBmZWdldGV4Y2VwdGZsYWcKKyN1bmRlZiBmZXJhaXNlZXhjZXB0CisjdW5kZWYgZmVzZXRleGNlcHRmbGFnCisjdW5kZWYgZmV0ZXN0ZXhjZXB0CisjdW5kZWYgZmVnZXRyb3VuZAorI3VuZGVmIGZlc2V0cm91bmQKKyN1bmRlZiBmZWdldGVudgorI3VuZGVmIGZlaG9sZGV4Y2VwdAorI3VuZGVmIGZlc2V0ZW52CisjdW5kZWYgZmV1cGRhdGVlbnYKKworbmFtZXNwYWNlIHN0ZAoreworICAvLyB0eXBlcworICB1c2luZyA6OmZlbnZfdDsKKyAgdXNpbmcgOjpmZXhjZXB0X3Q7CisKKyAgLy8gZnVuY3Rpb25zCisgIHVzaW5nIDo6ZmVjbGVhcmV4Y2VwdDsKKyAgdXNpbmcgOjpmZWdldGV4Y2VwdGZsYWc7CisgIHVzaW5nIDo6ZmVyYWlzZWV4Y2VwdDsKKyAgdXNpbmcgOjpmZXNldGV4Y2VwdGZsYWc7CisgIHVzaW5nIDo6ZmV0ZXN0ZXhjZXB0OworCisgIHVzaW5nIDo6ZmVnZXRyb3VuZDsKKyAgdXNpbmcgOjpmZXNldHJvdW5kOworCisgIHVzaW5nIDo6ZmVnZXRlbnY7CisgIHVzaW5nIDo6ZmVob2xkZXhjZXB0OworICB1c2luZyA6OmZlc2V0ZW52OworICB1c2luZyA6OmZldXBkYXRlZW52OworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9DOTlfRkVOVl9UUjEKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9GRU5WX0gKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZm9yd2FyZF9saXN0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9mb3J3YXJkX2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlZDJhZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZm9yd2FyZF9saXN0CkBAIC0wLDAgKzEsNTIgQEAKKy8vIDxmb3J3YXJkX2xpc3Q+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2ZvcndhcmRfbGlzdAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9GT1JXQVJEX0xJU1QKKyNkZWZpbmUgX0dMSUJDWFhfRk9SV0FSRF9MSVNUIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPGJpdHMvZm9yd2FyZF9saXN0Lmg+CisjaW5jbHVkZSA8Yml0cy9yYW5nZV9hY2Nlc3MuaD4KKyNpbmNsdWRlIDxiaXRzL2ZvcndhcmRfbGlzdC50Y2M+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBpbmNsdWRlIDxkZWJ1Zy9mb3J3YXJkX2xpc3Q+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1BST0ZJTEUKKyMgaW5jbHVkZSA8cHJvZmlsZS9mb3J3YXJkX2xpc3Q+CisjZW5kaWYKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9GT1JXQVJEX0xJU1QKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZnN0cmVhbSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZnN0cmVhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGU1YzNkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9mc3RyZWFtCkBAIC0wLDAgKzEsOTM4IEBACisvLyBGaWxlIGJhc2VkIHN0cmVhbXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvZnN0cmVhbQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjggIEZpbGUtYmFzZWQgc3RyZWFtcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9GU1RSRUFNCisjZGVmaW5lIF9HTElCQ1hYX0ZTVFJFQU0gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxpc3RyZWFtPgorI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8Yml0cy9jb2RlY3Z0Lmg+CisjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAvLyBGb3IgQlVGU0laCisjaW5jbHVkZSA8Yml0cy9iYXNpY19maWxlLmg+ICAvLyBGb3IgX19iYXNpY19maWxlLCBfX2NfbG9jaworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpbmNsdWRlIDxzdHJpbmc+ICAgICAgICAgICAgIC8vIEZvciBzdGQ6OnN0cmluZyBvdmVybG9hZHMuCisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIFsyNy44LjEuMV0gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZmlsZWJ1ZgorICAvKioKKyAgICogIEBicmllZiAgVGhlIGFjdHVhbCB3b3JrIG9mIGlucHV0IGFuZCBvdXRwdXQgKGZvciBmaWxlcykuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgQHRwYXJhbSBfQ2hhclQgIFR5cGUgb2YgY2hhcmFjdGVyIHN0cmVhbS4KKyAgICogIEB0cGFyYW0gX1RyYWl0cyAgVHJhaXRzIGZvciBjaGFyYWN0ZXIgdHlwZSwgZGVmYXVsdHMgdG8KKyAgICogICAgICAgICAgICAgICAgICAgY2hhcl90cmFpdHM8X0NoYXJUPi4KKyAgICoKKyAgICogIFRoaXMgY2xhc3MgYXNzb2NpYXRlcyBib3RoIGl0cyBpbnB1dCBhbmQgb3V0cHV0IHNlcXVlbmNlIHdpdGggYW4KKyAgICogIGV4dGVybmFsIGRpc2sgZmlsZSwgYW5kIG1haW50YWlucyBhIGpvaW50IGZpbGUgcG9zaXRpb24gZm9yIGJvdGgKKyAgICogIHNlcXVlbmNlcy4gIE1hbnkgb2YgaXRzIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIHRlcm1zIG9mIHNpbWlsYXIKKyAgICogIGJlaGF2aW9yIGluIHRoZSBTdGFuZGFyZCBDIExpYnJhcnkncyBAYyBGSUxFIHN0cmVhbXMuCisgICAqCisgICAqICBSZXF1aXJlbWVudHMgb24gdHJhaXRzX3R5cGUsIHNwZWNpZmljIHRvIHRoaXMgY2xhc3M6CisgICAqICAtIHRyYWl0c190eXBlOjpwb3NfdHlwZSBtdXN0IGJlIGZwb3M8dHJhaXRzX3R5cGU6OnN0YXRlX3R5cGU+CisgICAqICAtIHRyYWl0c190eXBlOjpvZmZfdHlwZSBtdXN0IGJlIHN0cmVhbW9mZgorICAgKiAgLSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBtdXN0IGJlIEFzc2lnbmFibGUgYW5kIERlZmF1bHRDb25zdHJ1Y3RpYmxlLAorICAgKiAgLSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSgpIG11c3QgYmUgdGhlIGluaXRpYWwgc3RhdGUgZm9yIGNvZGVjdnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZiA6IHB1YmxpYyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUICAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzICAgICAgICAgICAgICAgICAgICAJICAgICAgICB0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgCQlvZmZfdHlwZTsKKworICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gIAlfX3N0cmVhbWJ1Zl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+ICAgICBfX2ZpbGVidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgX19iYXNpY19maWxlPGNoYXI+CQkgICAgICAgIF9fZmlsZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSAgICAgICAgICBfX3N0YXRlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90eXBlLCBjaGFyLCBfX3N0YXRlX3R5cGU+ICAgIF9fY29kZWN2dF90eXBlOworCisgICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7IC8vIEZvciBzeW5jX3dpdGhfc3RkaW8uCisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBEYXRhIE1lbWJlcnM6CisgICAgICAvLyBNVCBsb2NrIGluaGVyaXRlZCBmcm9tIGxpYmlvIG9yIG90aGVyIGxvdy1sZXZlbCBpbyBsaWJyYXJ5LgorICAgICAgX19jX2xvY2sgICAgICAgICAgCV9NX2xvY2s7CisKKyAgICAgIC8vIEV4dGVybmFsIGJ1ZmZlci4KKyAgICAgIF9fZmlsZV90eXBlIAkJX01fZmlsZTsKKworICAgICAgLy8vIFBsYWNlIHRvIHN0YXNoIGluIHx8IG91dCB8fCBpbiB8IG91dCBzZXR0aW5ncyBmb3IgY3VycmVudCBmaWxlYnVmLgorICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIAlfTV9tb2RlOworCisgICAgICAvLyBCZWdpbm5pbmcgc3RhdGUgdHlwZSBmb3IgY29kZWN2dC4KKyAgICAgIF9fc3RhdGVfdHlwZSAJCV9NX3N0YXRlX2JlZzsKKworICAgICAgLy8gRHVyaW5nIG91dHB1dCwgdGhlIHN0YXRlIHRoYXQgY29ycmVzcG9uZHMgdG8gcHB0cigpLAorICAgICAgLy8gZHVyaW5nIGlucHV0LCB0aGUgc3RhdGUgdGhhdCBjb3JyZXNwb25kcyB0byBlZ3B0cigpIGFuZAorICAgICAgLy8gX01fZXh0X25leHQuCisgICAgICBfX3N0YXRlX3R5cGUJCV9NX3N0YXRlX2N1cjsKKworICAgICAgLy8gTm90IHVzZWQgZm9yIG91dHB1dC4gRHVyaW5nIGlucHV0LCB0aGUgc3RhdGUgdGhhdCBjb3JyZXNwb25kcworICAgICAgLy8gdG8gZWJhY2soKSBhbmQgX01fZXh0X2J1Zi4KKyAgICAgIF9fc3RhdGVfdHlwZQkJX01fc3RhdGVfbGFzdDsKKworICAgICAgLy8vIFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBpbnRlcm5hbCBidWZmZXIuCisgICAgICBjaGFyX3R5cGUqCQlfTV9idWY7IAkKKworICAgICAgLyoqCisgICAgICAgKiAgQWN0dWFsIHNpemUgb2YgaW50ZXJuYWwgYnVmZmVyLiBUaGlzIG51bWJlciBpcyBlcXVhbCB0byB0aGUgc2l6ZQorICAgICAgICogIG9mIHRoZSBwdXQgYXJlYSArIDEgcG9zaXRpb24sIHJlc2VydmVkIGZvciB0aGUgb3ZlcmZsb3cgY2hhciBvZgorICAgICAgICogIGEgZnVsbCBhcmVhLgorICAgICAgICovCisgICAgICBzaXplX3QJCQlfTV9idWZfc2l6ZTsKKworICAgICAgLy8gU2V0IGlmZiBfTV9idWYgaXMgYWxsb2NhdGVkIG1lbW9yeSBmcm9tIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlci4KKyAgICAgIGJvb2wJCQlfTV9idWZfYWxsb2NhdGVkOworCisgICAgICAvKioKKyAgICAgICAqICBfTV9yZWFkaW5nID09IGZhbHNlICYmIF9NX3dyaXRpbmcgPT0gZmFsc2UgZm9yIEBiIHVuY29tbWl0dGVkIG1vZGU7CisgICAgICAgKiAgX01fcmVhZGluZyA9PSB0cnVlIGZvciBAYiByZWFkIG1vZGU7CisgICAgICAgKiAgX01fd3JpdGluZyA9PSB0cnVlIGZvciBAYiB3cml0ZSBtb2RlOworICAgICAgICoKKyAgICAgICAqICBOQjogX01fcmVhZGluZyA9PSB0cnVlICYmIF9NX3dyaXRpbmcgPT0gdHJ1ZSBpcyB1bnVzZWQuCisgICAgICAgKi8KKyAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgX01fcmVhZGluZzsKKyAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgX01fd3JpdGluZzsKKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgTmVjZXNzYXJ5IGJpdHMgZm9yIHB1dGJhY2sgYnVmZmVyIG1hbmFnZW1lbnQuCisgICAgICAgKgorICAgICAgICogIEBub3RlIHBiYWNrcyBvZiBvdmVyIG9uZSBjaGFyYWN0ZXIgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorICAgICAgICovCisgICAgICBjaGFyX3R5cGUJCQlfTV9wYmFjazsKKyAgICAgIGNoYXJfdHlwZSoJCV9NX3BiYWNrX2N1cl9zYXZlOworICAgICAgY2hhcl90eXBlKgkJX01fcGJhY2tfZW5kX3NhdmU7CisgICAgICBib29sCQkJX01fcGJhY2tfaW5pdDsKKyAgICAgIC8vQH0KKworICAgICAgLy8gQ2FjaGVkIGNvZGVjdnQgZmFjZXQuCisgICAgICBjb25zdCBfX2NvZGVjdnRfdHlwZSogCV9NX2NvZGVjdnQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEJ1ZmZlciBmb3IgZXh0ZXJuYWwgY2hhcmFjdGVycy4gVXNlZCBmb3IgaW5wdXQgd2hlbgorICAgICAgICogIGNvZGVjdnQ6OmFsd2F5c19ub2NvbnYoKSA9PSBmYWxzZS4gV2hlbiB2YWxpZCwgdGhpcyBjb3JyZXNwb25kcworICAgICAgICogIHRvIGViYWNrKCkuCisgICAgICAgKi8KKyAgICAgIGNoYXIqCQkJX01fZXh0X2J1ZjsKKworICAgICAgLyoqCisgICAgICAgKiAgU2l6ZSBvZiBidWZmZXIgaGVsZCBieSBfTV9leHRfYnVmLgorICAgICAgICovCisgICAgICBzdHJlYW1zaXplCQlfTV9leHRfYnVmX3NpemU7CisKKyAgICAgIC8qKgorICAgICAgICogIFBvaW50ZXJzIGludG8gdGhlIGJ1ZmZlciBoZWxkIGJ5IF9NX2V4dF9idWYgdGhhdCBkZWxpbWl0IGEKKyAgICAgICAqICBzdWJzZXF1ZW5jZSBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiByZWFkIGJ1dCBub3QgeWV0IGNvbnZlcnRlZC4KKyAgICAgICAqICBXaGVuIHZhbGlkLCBfTV9leHRfbmV4dCBjb3JyZXNwb25kcyB0byBlZ3B0cigpLgorICAgICAgICovCisgICAgICBjb25zdCBjaGFyKgkJX01fZXh0X25leHQ7CisgICAgICBjaGFyKgkJCV9NX2V4dF9lbmQ7CisKKyAgICAgIC8qKgorICAgICAgICogIEluaXRpYWxpemVzIHBiYWNrIGJ1ZmZlcnMsIGFuZCBtb3ZlcyBub3JtYWwgYnVmZmVycyB0byBzYWZldHkuCisgICAgICAgKiAgQXNzdW1wdGlvbnM6CisgICAgICAgKiAgX01faW5fY3VyIGhhcyBhbHJlYWR5IGJlZW4gbW92ZWQgYmFjaworICAgICAgICovCisgICAgICB2b2lkCisgICAgICBfTV9jcmVhdGVfcGJhY2soKQorICAgICAgeworCWlmICghX01fcGJhY2tfaW5pdCkKKwkgIHsKKwkgICAgX01fcGJhY2tfY3VyX3NhdmUgPSB0aGlzLT5ncHRyKCk7CisJICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gdGhpcy0+ZWdwdHIoKTsKKwkgICAgdGhpcy0+c2V0ZygmX01fcGJhY2ssICZfTV9wYmFjaywgJl9NX3BiYWNrICsgMSk7CisJICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOworCSAgfQorICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBEZWFjdGl2YXRlcyBwYmFjayBidWZmZXIgY29udGVudHMsIGFuZCByZXN0b3JlcyBub3JtYWwgYnVmZmVyLgorICAgICAgICogIEFzc3VtcHRpb25zOgorICAgICAgICogIFRoZSBwYmFjayBidWZmZXIgaGFzIG9ubHkgbW92ZWQgZm9yd2FyZC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgX01fZGVzdHJveV9wYmFjaygpIHRocm93KCkKKyAgICAgIHsKKwlpZiAoX01fcGJhY2tfaW5pdCkKKwkgIHsKKwkgICAgLy8gTGVuZ3RoIF9NX2luX2N1ciBtb3ZlZCBpbiB0aGUgcGJhY2sgYnVmZmVyLgorCSAgICBfTV9wYmFja19jdXJfc2F2ZSArPSB0aGlzLT5ncHRyKCkgIT0gdGhpcy0+ZWJhY2soKTsKKwkgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlLCBfTV9wYmFja19lbmRfc2F2ZSk7CisJICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKKwkgIH0KKyAgICAgIH0KKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9ycy9kZXN0cnVjdG9yOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEb2VzIG5vdCBvcGVuIGFueSBmaWxlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIHBhcmVudCBjbGFzcyB1c2luZyBpdHMKKyAgICAgICAqICBvd24gZGVmYXVsdCBjdG9yLgorICAgICAgICovCisgICAgICBiYXNpY19maWxlYnVmKCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhlIGRlc3RydWN0b3IgY2xvc2VzIHRoZSBmaWxlIGZpcnN0LgorICAgICAgICovCisgICAgICB2aXJ0dWFsCisgICAgICB+YmFzaWNfZmlsZWJ1ZigpCisgICAgICB7IHRoaXMtPmNsb3NlKCk7IH0KKworICAgICAgLy8gTWVtYmVyczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJucyB0cnVlIGlmIHRoZSBleHRlcm5hbCBmaWxlIGlzIG9wZW4uCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGlzX29wZW4oKSBjb25zdCB0aHJvdygpCisgICAgICB7IHJldHVybiBfTV9maWxlLmlzX29wZW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE9wZW5zIGFuIGV4dGVybmFsIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgICAgICogIEBwYXJhbSAgX19tb2RlICBUaGUgb3BlbiBtb2RlIGZsYWdzLgorICAgICAgICogIEByZXR1cm4gIEBjIHRoaXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgICAgICAgKgorICAgICAgICogIElmIGEgZmlsZSBpcyBhbHJlYWR5IG9wZW4sIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgZmFpbHMuCisgICAgICAgKiAgT3RoZXJ3aXNlIGl0IHRyaWVzIHRvIG9wZW4gdGhlIGZpbGUgbmFtZWQgQGEgX19zIHVzaW5nIHRoZSBmbGFncworICAgICAgICogIGdpdmVuIGluIEBhIF9fbW9kZS4KKyAgICAgICAqCisgICAgICAgKiAgVGFibGUgOTIsIGFkYXB0ZWQgaGVyZSwgZ2l2ZXMgdGhlIHJlbGF0aW9uIGJldHdlZW4gb3Blbm1vZGUKKyAgICAgICAqICBjb21iaW5hdGlvbnMgYW5kIHRoZSBlcXVpdmFsZW50IGZvcGVuKCkgZmxhZ3MuCisgICAgICAgKiAgKE5COiBsaW5lcyBhcHAsIGlufG91dHxhcHAsIGlufGFwcCwgYmluYXJ5fGFwcCwgYmluYXJ5fGlufG91dHxhcHAsCisgICAgICAgKiAgYW5kIGJpbmFyeXxpbnxhcHAgcGVyIERSIDU5NikKKyAgICAgICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICogIHwgaW9zX2Jhc2UgRmxhZyBjb21iaW5hdGlvbiAgICAgICAgICAgIHN0ZGlvIGVxdWl2YWxlbnQgICB8CisgICAgICAgKiAgfGJpbmFyeSAgaW4gIG91dCAgdHJ1bmMgIGFwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICogIHwgICAgICAgICAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHcgICAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICAgICAgICAgICArICAgICAgICAgICArICAgICAgICAgICAgYSAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICAgICBhICAgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICAgICAgICAgICAgKyAgICAgKyAgICAgICAgICAgICAgICAgIHcgICAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICAgICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgICAgICAgKyAgICsgICAgICAgICAgICAgICAgICAgICAgICByKyAgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICAgICAgICArICAgKyAgICAgKyAgICAgICAgICAgICAgICAgIHcrICAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICAgICAgICsgICArICAgICAgICAgICArICAgICAgICAgICAgYSsgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgICAgICAgKyAgICAgICAgICAgICAgICsgICAgICAgICAgICBhKyAgICAgICAgICAgICAgICAgfAorICAgICAgICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgKiAgfCAgICsgICAgICAgICArICAgICAgICAgICAgICAgICAgICAgICAgd2IgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgKyAgICAgICAgICsgICAgICAgICAgICsgICAgICAgICAgICBhYiAgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICArICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgICAgIGFiICAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICsgICAgICAgICArICAgICArICAgICAgICAgICAgICAgICAgd2IgICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgKyAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYiAgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICArICAgICArICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHIrYiAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgfCAgICsgICAgICsgICArICAgICArICAgICAgICAgICAgICAgICAgdytiICAgICAgICAgICAgICAgIHwKKyAgICAgICAqICB8ICAgKyAgICAgKyAgICsgICAgICAgICAgICsgICAgICAgICAgICBhK2IgICAgICAgICAgICAgICAgfAorICAgICAgICogIHwgICArICAgICArICAgICAgICAgICAgICAgKyAgICAgICAgICAgIGErYiAgICAgICAgICAgICAgICB8CisgICAgICAgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAqLworICAgICAgX19maWxlYnVmX3R5cGUqCisgICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE9wZW5zIGFuIGV4dGVybmFsIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgICAgICogIEBwYXJhbSAgX19tb2RlICBUaGUgb3BlbiBtb2RlIGZsYWdzLgorICAgICAgICogIEByZXR1cm4gIEBjIHRoaXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgICAgICAgKi8KKyAgICAgIF9fZmlsZWJ1Zl90eXBlKgorICAgICAgb3Blbihjb25zdCBzdGQ6OnN0cmluZyYgX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQorICAgICAgeyByZXR1cm4gb3BlbihfX3MuY19zdHIoKSwgX19tb2RlKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2xvc2VzIHRoZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBmaWxlLgorICAgICAgICogIEByZXR1cm4gIEBjIHRoaXMgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlCisgICAgICAgKgorICAgICAgICogIElmIG5vIGZpbGUgaXMgY3VycmVudGx5IG9wZW4sIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgZmFpbHMuCisgICAgICAgKgorICAgICAgICogIElmIGEgPGVtPnB1dCBidWZmZXIgYXJlYTwvZW0+IGV4aXN0cywgQGMgb3ZlcmZsb3coZW9mKSBpcworICAgICAgICogIGNhbGxlZCB0byBmbHVzaCBhbGwgdGhlIGNoYXJhY3RlcnMuICBUaGUgZmlsZSBpcyB0aGVuCisgICAgICAgKiAgY2xvc2VkLgorICAgICAgICoKKyAgICAgICAqICBJZiBhbnkgb3BlcmF0aW9ucyBmYWlsLCB0aGlzIGZ1bmN0aW9uIGFsc28gZmFpbHMuCisgICAgICAgKi8KKyAgICAgIF9fZmlsZWJ1Zl90eXBlKgorICAgICAgY2xvc2UoKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIHZvaWQKKyAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpOworCisgICAgICB2b2lkCisgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpIHRocm93KCk7CisKKyAgICAgIC8vIFsyNy44LjEuNF0gb3ZlcnJpZGRlbiB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgdmlydHVhbCBzdHJlYW1zaXplCisgICAgICBzaG93bWFueWMoKTsKKworICAgICAgLy8gU3Ryb3VzdHJ1cCwgMTk5OCwgcC4gNjI4CisgICAgICAvLyB1bmRlcmZsb3coKSBhbmQgdWZsb3coKSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byBnZXQgdGhlIG5leHQKKyAgICAgIC8vIGNoYXJhY3RlciBmcm9tIHRoZSByZWFsIGlucHV0IHNvdXJjZSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICAvLyBCdWZmZXJlZCBpbnB1dCB1c2VzIHVuZGVyZmxvdygpCisKKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIHVuZGVyZmxvdygpOworCisgICAgICB2aXJ0dWFsIGludF90eXBlCisgICAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOworCisgICAgICAvLyBTdHJvdXN0cnVwLCAxOTk4LCBwIDY0OAorICAgICAgLy8gVGhlIG92ZXJmbG93KCkgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHRyYW5zZmVyIGNoYXJhY3RlcnMgdG8gdGhlCisgICAgICAvLyByZWFsIG91dHB1dCBkZXN0aW5hdGlvbiB3aGVuIHRoZSBidWZmZXIgaXMgZnVsbC4gQSBjYWxsIHRvCisgICAgICAvLyBvdmVyZmxvdyhjKSBvdXRwdXRzIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHBsdXMgdGhlCisgICAgICAvLyBjaGFyYWN0ZXIgYy4KKyAgICAgIC8vIDI3LjUuMi40LjUKKyAgICAgIC8vIENvbnN1bWUgc29tZSBzZXF1ZW5jZSBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgcGVuZGluZyBzZXF1ZW5jZS4KKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKKworICAgICAgLy8gQ29udmVydCBpbnRlcm5hbCBieXRlIHNlcXVlbmNlIHRvIGV4dGVybmFsLCBjaGFyLWJhc2VkCisgICAgICAvLyBzZXF1ZW5jZSB2aWEgY29kZWN2dC4KKyAgICAgIGJvb2wKKyAgICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWFuaXB1bGF0ZXMgdGhlIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgUG9pbnRlciB0byBhIGJ1ZmZlciBhcmVhLgorICAgICAgICogIEBwYXJhbSAgX19uICBTaXplIG9mIEBhIF9fcy4KKyAgICAgICAqICBAcmV0dXJuICBAYyB0aGlzCisgICAgICAgKgorICAgICAgICogIElmIG5vIGZpbGUgaGFzIGJlZW4gb3BlbmVkLCBhbmQgYm90aCBAYSBfX3MgYW5kIEBhIF9fbiBhcmUgemVybywgdGhlbgorICAgICAgICogIHRoZSBzdHJlYW0gYmVjb21lcyB1bmJ1ZmZlcmVkLiAgT3RoZXJ3aXNlLCBAYyBfX3MgaXMgdXNlZCBhcyBhCisgICAgICAgKiAgYnVmZmVyOyBzZWUKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNXMwMi5odG1sCisgICAgICAgKiAgZm9yIG1vcmUuCisgICAgICAgKi8KKyAgICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoKKyAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOworCisgICAgICB2aXJ0dWFsIHBvc190eXBlCisgICAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKKwkgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CisKKyAgICAgIHZpcnR1YWwgcG9zX3R5cGUKKyAgICAgIHNlZWtwb3MocG9zX3R5cGUgX19wb3MsCisJICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOworCisgICAgICAvLyBDb21tb24gY29kZSBmb3Igc2Vla29mZiwgc2Vla3BvcywgYW5kIG92ZXJmbG93CisgICAgICBwb3NfdHlwZQorICAgICAgX01fc2VlayhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIF9fc3RhdGVfdHlwZSBfX3N0YXRlKTsKKyAgICAgIAorICAgICAgaW50CisgICAgICBfTV9nZXRfZXh0X3BvcyhfX3N0YXRlX3R5cGUgJl9fc3RhdGUpOworCisgICAgICB2aXJ0dWFsIGludAorICAgICAgc3luYygpOworCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOworCisgICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKKyAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOworCisgICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKKyAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOworCisgICAgICAvLyBGbHVzaGVzIG91dHB1dCBidWZmZXIsIHRoZW4gd3JpdGVzIHVuc2hpZnQgc2VxdWVuY2UuCisgICAgICBib29sCisgICAgICBfTV90ZXJtaW5hdGVfb3V0cHV0KCk7CisKKyAgICAgIC8qKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcG9pbnRlcnMgb2YgdGhlIGludGVybmFsIGJ1ZmZlciwgYm90aCBnZXQKKyAgICAgICAqICBhbmQgcHV0IGFyZWFzLiBUeXBpY2FsbHk6CisgICAgICAgKgorICAgICAgICogICBfX29mZiA9PSBlZ3B0cigpIC0gZWJhY2soKSB1cG9uIHVuZGVyZmxvdy91ZmxvdyAoQGIgcmVhZCBtb2RlKTsKKyAgICAgICAqICAgX19vZmYgPT0gMCB1cG9uIG92ZXJmbG93IChAYiB3cml0ZSBtb2RlKTsKKyAgICAgICAqICAgX19vZmYgPT0gLTEgdXBvbiBvcGVuLCBzZXRidWYsIHNlZWtvZmYvcG9zIChAYiB1bmNvbW1pdHRlZCBtb2RlKS4KKyAgICAgICAqCisgICAgICAgKiAgTkI6IGVwcHRyKCkgLSBwYmFzZSgpID09IF9NX2J1Zl9zaXplIC0gMSwgc2luY2UgX01fYnVmX3NpemUKKyAgICAgICAqICByZWZsZWN0cyB0aGUgYWN0dWFsIGFsbG9jYXRlZCBtZW1vcnkgYW5kIHRoZSBsYXN0IGNlbGwgaXMgcmVzZXJ2ZWQKKyAgICAgICAqICBmb3IgdGhlIG92ZXJmbG93IGNoYXIgb2YgYSBmdWxsIHB1dCBhcmVhLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfYnVmZmVyKHN0cmVhbXNpemUgX19vZmYpCisgICAgICB7CisgCWNvbnN0IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOworIAljb25zdCBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OworCQorCWlmIChfX3Rlc3RpbiAmJiBfX29mZiA+IDApCisJICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CisJZWxzZQorCSAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmKTsKKworCWlmIChfX3Rlc3RvdXQgJiYgX19vZmYgPT0gMCAmJiBfTV9idWZfc2l6ZSA+IDEgKQorCSAgdGhpcy0+c2V0cChfTV9idWYsIF9NX2J1ZiArIF9NX2J1Zl9zaXplIC0gMSk7CisJZWxzZQorCSAgdGhpcy0+c2V0cCgwLCAwKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8vIFsyNy44LjEuNV0gVGVtcGxhdGUgY2xhc3MgYmFzaWNfaWZzdHJlYW0KKyAgLyoqCisgICAqICBAYnJpZWYgIENvbnRyb2xsaW5nIGlucHV0IGZvciBmaWxlcy4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBAdHBhcmFtIF9DaGFyVCAgVHlwZSBvZiBjaGFyYWN0ZXIgc3RyZWFtLgorICAgKiAgQHRwYXJhbSBfVHJhaXRzICBUcmFpdHMgZm9yIGNoYXJhY3RlciB0eXBlLCBkZWZhdWx0cyB0bworICAgKiAgICAgICAgICAgICAgICAgICBjaGFyX3RyYWl0czxfQ2hhclQ+LgorICAgKgorICAgKiAgVGhpcyBjbGFzcyBzdXBwb3J0cyByZWFkaW5nIGZyb20gbmFtZWQgZmlsZXMsIHVzaW5nIHRoZSBpbmhlcml0ZWQKKyAgICogIGZ1bmN0aW9ucyBmcm9tIHN0ZDo6YmFzaWNfaXN0cmVhbS4gIFRvIGNvbnRyb2wgdGhlIGFzc29jaWF0ZWQKKyAgICogIHNlcXVlbmNlLCBhbiBpbnN0YW5jZSBvZiBzdGQ6OmJhc2ljX2ZpbGVidWYgaXMgdXNlZCwgd2hpY2ggdGhpcyBwYWdlCisgICAqICByZWZlcnMgdG8gYXMgQGMgc2IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgYmFzaWNfaWZzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgCQlvZmZfdHlwZTsKKworICAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVzOgorICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IAlfX2ZpbGVidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX2lzdHJlYW1fdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBfX2ZpbGVidWZfdHlwZQlfTV9maWxlYnVmOworCisgICAgcHVibGljOgorICAgICAgLy8gQ29uc3RydWN0b3JzL0Rlc3RydWN0b3JzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBpdHMgZGVmYXVsdCBjb25zdHJ1Y3RvciwgYW5kIHBhc3NlcworICAgICAgICogIEBjICZzYiB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4gIERvZXMgbm90IG9wZW4gYW55IGZpbGVzCisgICAgICAgKiAgKHlvdSBoYXZlbid0IGdpdmVuIGl0IGEgZmlsZW5hbWUgdG8gb3BlbikuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX2lmc3RyZWFtKCkgOiBfX2lzdHJlYW1fdHlwZSgpLCBfTV9maWxlYnVmKCkKKyAgICAgIHsgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGUgYW4gaW5wdXQgZmlsZSBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBfX3MgIE51bGwgdGVybWluYXRlZCBzdHJpbmcgc3BlY2lmeWluZyB0aGUgZmlsZW5hbWUuCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIE9wZW4gZmlsZSBpbiBzcGVjaWZpZWQgbW9kZSAoc2VlIHN0ZDo6aW9zX2Jhc2UpLgorICAgICAgICoKKyAgICAgICAqICBAYyBpb3NfYmFzZTo6aW4gaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBpbiBAYSBfX21vZGUuCisgICAgICAgKgorICAgICAgICogIFRpcDogIFdoZW4gdXNpbmcgc3RkOjpzdHJpbmcgdG8gaG9sZCB0aGUgZmlsZW5hbWUsIHlvdSBtdXN0IHVzZQorICAgICAgICogIC5jX3N0cigpIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHRoaXMgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19pZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCisgICAgICA6IF9faXN0cmVhbV90eXBlKCksIF9NX2ZpbGVidWYoKQorICAgICAgeworCXRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOworCXRoaXMtPm9wZW4oX19zLCBfX21vZGUpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGUgYW4gaW5wdXQgZmlsZSBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBfX3MgIHN0ZDo6c3RyaW5nIHNwZWNpZnlpbmcgdGhlIGZpbGVuYW1lLgorICAgICAgICogIEBwYXJhbSAgX19tb2RlICBPcGVuIGZpbGUgaW4gc3BlY2lmaWVkIG1vZGUgKHNlZSBzdGQ6Omlvc19iYXNlKS4KKyAgICAgICAqCisgICAgICAgKiAgQGMgaW9zX2Jhc2U6OmluIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4gQGEgX19tb2RlLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfaWZzdHJlYW0oY29uc3Qgc3RkOjpzdHJpbmcmIF9fcywKKwkJICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQorICAgICAgOiBfX2lzdHJlYW1fdHlwZSgpLCBfTV9maWxlYnVmKCkKKyAgICAgIHsKKwl0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsKKwl0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSBkZXN0cnVjdG9yIGRvZXMgbm90aGluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGZpbGUgaXMgY2xvc2VkIGJ5IHRoZSBmaWxlYnVmIG9iamVjdCwgbm90IHRoZSBmb3JtYXR0aW5nCisgICAgICAgKiAgc3RyZWFtLgorICAgICAgICovCisgICAgICB+YmFzaWNfaWZzdHJlYW0oKQorICAgICAgeyB9CisKKyAgICAgIC8vIE1lbWJlcnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFjY2Vzc2luZyB0aGUgdW5kZXJseWluZyBidWZmZXIuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGN1cnJlbnQgYmFzaWNfZmlsZWJ1ZiBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaGlkZXMgYm90aCBzaWduYXR1cmVzIG9mIHN0ZDo6YmFzaWNfaW9zOjpyZGJ1ZigpLgorICAgICAgICovCisgICAgICBfX2ZpbGVidWZfdHlwZSoKKyAgICAgIHJkYnVmKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBXcmFwcGVyIHRvIHRlc3QgZm9yIGFuIG9wZW4gZmlsZS4KKyAgICAgICAqICBAcmV0dXJuICBAYyByZGJ1ZigpLT5pc19vcGVuKCkKKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgaXNfb3BlbigpCisgICAgICB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4oKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAzNjUuIExhY2sgb2YgY29uc3QtcXVhbGlmaWNhdGlvbiBpbiBjbGF1c2UgMjcKKyAgICAgIGJvb2wKKyAgICAgIGlzX29wZW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPcGVucyBhbiBleHRlcm5hbCBmaWxlLgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fbW9kZSAgVGhlIG9wZW4gbW9kZSBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgc3RkOjpiYXNpY19maWxlYnVmOjpvcGVuKHMsX19tb2RlfGluKS4gIElmIHRoYXQgZnVuY3Rpb24KKyAgICAgICAqICBmYWlscywgQGMgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqICBUaXA6ICBXaGVuIHVzaW5nIHN0ZDo6c3RyaW5nIHRvIGhvbGQgdGhlIGZpbGVuYW1lLCB5b3UgbXVzdCB1c2UKKyAgICAgICAqICAuY19zdHIoKSBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGlzIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikKKyAgICAgIHsKKwlpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19iYXNlOjppbikpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJZWxzZQorCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gNDA5LiBDbG9zaW5nIGFuIGZzdHJlYW0gc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlCisJICB0aGlzLT5jbGVhcigpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPcGVucyBhbiBleHRlcm5hbCBmaWxlLgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fbW9kZSAgVGhlIG9wZW4gbW9kZSBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgc3RkOjpiYXNpY19maWxlYnVmOjpvcGVuKF9fcyxfX21vZGV8aW4pLiAgSWYgdGhhdCBmdW5jdGlvbgorICAgICAgICogIGZhaWxzLCBAYyBmYWlsYml0IGlzIHNldCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIG9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikKKyAgICAgIHsKKwlpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19iYXNlOjppbikpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJZWxzZQorCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gNDA5LiBDbG9zaW5nIGFuIGZzdHJlYW0gc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlCisJICB0aGlzLT5jbGVhcigpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2xvc2UgdGhlIGZpbGUuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHN0ZDo6YmFzaWNfZmlsZWJ1Zjo6Y2xvc2UoKS4gIElmIHRoYXQgZnVuY3Rpb24KKyAgICAgICAqICBmYWlscywgQGMgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbG9zZSgpCisgICAgICB7CisJaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisgICAgICB9CisgICAgfTsKKworCisgIC8vIFsyNy44LjEuOF0gVGVtcGxhdGUgY2xhc3MgYmFzaWNfb2ZzdHJlYW0KKyAgLyoqCisgICAqICBAYnJpZWYgIENvbnRyb2xsaW5nIG91dHB1dCBmb3IgZmlsZXMuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgQHRwYXJhbSBfQ2hhclQgIFR5cGUgb2YgY2hhcmFjdGVyIHN0cmVhbS4KKyAgICogIEB0cGFyYW0gX1RyYWl0cyAgVHJhaXRzIGZvciBjaGFyYWN0ZXIgdHlwZSwgZGVmYXVsdHMgdG8KKyAgICogICAgICAgICAgICAgICAgICAgY2hhcl90cmFpdHM8X0NoYXJUPi4KKyAgICoKKyAgICogIFRoaXMgY2xhc3Mgc3VwcG9ydHMgcmVhZGluZyBmcm9tIG5hbWVkIGZpbGVzLCB1c2luZyB0aGUgaW5oZXJpdGVkCisgICAqICBmdW5jdGlvbnMgZnJvbSBzdGQ6OmJhc2ljX29zdHJlYW0uICBUbyBjb250cm9sIHRoZSBhc3NvY2lhdGVkCisgICAqICBzZXF1ZW5jZSwgYW4gaW5zdGFuY2Ugb2Ygc3RkOjpiYXNpY19maWxlYnVmIGlzIHVzZWQsIHdoaWNoIHRoaXMgcGFnZQorICAgKiAgcmVmZXJzIHRvIGFzIEBjIHNiLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtIDogcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgCQlvZmZfdHlwZTsKKworICAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVzOgorICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IAlfX2ZpbGVidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX29zdHJlYW1fdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBfX2ZpbGVidWZfdHlwZQlfTV9maWxlYnVmOworCisgICAgcHVibGljOgorICAgICAgLy8gQ29uc3RydWN0b3JzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBpdHMgZGVmYXVsdCBjb25zdHJ1Y3RvciwgYW5kIHBhc3NlcworICAgICAgICogIEBjICZzYiB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4gIERvZXMgbm90IG9wZW4gYW55IGZpbGVzCisgICAgICAgKiAgKHlvdSBoYXZlbid0IGdpdmVuIGl0IGEgZmlsZW5hbWUgdG8gb3BlbikuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX29mc3RyZWFtKCk6IF9fb3N0cmVhbV90eXBlKCksIF9NX2ZpbGVidWYoKQorICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENyZWF0ZSBhbiBvdXRwdXQgZmlsZSBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBfX3MgIE51bGwgdGVybWluYXRlZCBzdHJpbmcgc3BlY2lmeWluZyB0aGUgZmlsZW5hbWUuCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIE9wZW4gZmlsZSBpbiBzcGVjaWZpZWQgbW9kZSAoc2VlIHN0ZDo6aW9zX2Jhc2UpLgorICAgICAgICoKKyAgICAgICAqICBAYyBpb3NfYmFzZTo6b3V0IHwgQGMgaW9zX2Jhc2U6OnRydW5jIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4KKyAgICAgICAqICBAYSBfX21vZGUuCisgICAgICAgKgorICAgICAgICogIFRpcDogIFdoZW4gdXNpbmcgc3RkOjpzdHJpbmcgdG8gaG9sZCB0aGUgZmlsZW5hbWUsIHlvdSBtdXN0IHVzZQorICAgICAgICogIC5jX3N0cigpIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHRoaXMgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19vZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCisJCSAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6OnRydW5jKQorICAgICAgOiBfX29zdHJlYW1fdHlwZSgpLCBfTV9maWxlYnVmKCkKKyAgICAgIHsKKwl0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsKKwl0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlIGFuIG91dHB1dCBmaWxlIHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgc3RkOjpzdHJpbmcgc3BlY2lmeWluZyB0aGUgZmlsZW5hbWUuCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIE9wZW4gZmlsZSBpbiBzcGVjaWZpZWQgbW9kZSAoc2VlIHN0ZDo6aW9zX2Jhc2UpLgorICAgICAgICoKKyAgICAgICAqICBAYyBpb3NfYmFzZTo6b3V0IHwgQGMgaW9zX2Jhc2U6OnRydW5jIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4KKyAgICAgICAqICBAYSBfX21vZGUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19vZnN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgX19zLAorCQkgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0fGlvc19iYXNlOjp0cnVuYykKKyAgICAgIDogX19vc3RyZWFtX3R5cGUoKSwgX01fZmlsZWJ1ZigpCisgICAgICB7CisJdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CisJdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CisgICAgICB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgZGVzdHJ1Y3RvciBkb2VzIG5vdGhpbmcuCisgICAgICAgKgorICAgICAgICogIFRoZSBmaWxlIGlzIGNsb3NlZCBieSB0aGUgZmlsZWJ1ZiBvYmplY3QsIG5vdCB0aGUgZm9ybWF0dGluZworICAgICAgICogIHN0cmVhbS4KKyAgICAgICAqLworICAgICAgfmJhc2ljX29mc3RyZWFtKCkKKyAgICAgIHsgfQorCisgICAgICAvLyBNZW1iZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3NpbmcgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGJhc2ljX2ZpbGVidWYgYnVmZmVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGhpZGVzIGJvdGggc2lnbmF0dXJlcyBvZiBzdGQ6OmJhc2ljX2lvczo6cmRidWYoKS4KKyAgICAgICAqLworICAgICAgX19maWxlYnVmX3R5cGUqCisgICAgICByZGJ1ZigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV3JhcHBlciB0byB0ZXN0IGZvciBhbiBvcGVuIGZpbGUuCisgICAgICAgKiAgQHJldHVybiAgQGMgcmRidWYoKS0+aXNfb3BlbigpCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGlzX29wZW4oKQorICAgICAgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzY1LiBMYWNrIG9mIGNvbnN0LXF1YWxpZmljYXRpb24gaW4gY2xhdXNlIDI3CisgICAgICBib29sCisgICAgICBpc19vcGVuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgT3BlbnMgYW4gZXh0ZXJuYWwgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgVGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIFRoZSBvcGVuIG1vZGUgZmxhZ3MuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHN0ZDo6YmFzaWNfZmlsZWJ1Zjo6b3BlbihfX3MsX19tb2RlfG91dHx0cnVuYykuICBJZiB0aGF0CisgICAgICAgKiAgZnVuY3Rpb24gZmFpbHMsIEBjIGZhaWxiaXQgaXMgc2V0IGluIHRoZSBzdHJlYW0ncyBlcnJvciBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGlwOiAgV2hlbiB1c2luZyBzdGQ6OnN0cmluZyB0byBob2xkIHRoZSBmaWxlbmFtZSwgeW91IG11c3QgdXNlCisgICAgICAgKiAgLmNfc3RyKCkgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhpcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsCisJICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQgfCBpb3NfYmFzZTo6dHJ1bmMpCisgICAgICB7CisJaWYgKCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6b3V0KSkKKwkgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKKwllbHNlCisJICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAvLyA0MDkuIENsb3NpbmcgYW4gZnN0cmVhbSBzaG91bGQgY2xlYXIgZXJyb3Igc3RhdGUKKwkgIHRoaXMtPmNsZWFyKCk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE9wZW5zIGFuIGV4dGVybmFsIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICAgICAgICogIEBwYXJhbSAgX19tb2RlICBUaGUgb3BlbiBtb2RlIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyBAYyBzdGQ6OmJhc2ljX2ZpbGVidWY6Om9wZW4ocyxtb2RlfG91dHx0cnVuYykuICBJZiB0aGF0CisgICAgICAgKiAgZnVuY3Rpb24gZmFpbHMsIEBjIGZhaWxiaXQgaXMgc2V0IGluIHRoZSBzdHJlYW0ncyBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgb3Blbihjb25zdCBzdGQ6OnN0cmluZyYgX19zLAorCSAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQorICAgICAgeworCWlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwgaW9zX2Jhc2U6Om91dCkpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJZWxzZQorCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gNDA5LiBDbG9zaW5nIGFuIGZzdHJlYW0gc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlCisJICB0aGlzLT5jbGVhcigpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2xvc2UgdGhlIGZpbGUuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHN0ZDo6YmFzaWNfZmlsZWJ1Zjo6Y2xvc2UoKS4gIElmIHRoYXQgZnVuY3Rpb24KKyAgICAgICAqICBmYWlscywgQGMgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbG9zZSgpCisgICAgICB7CisJaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisgICAgICB9CisgICAgfTsKKworCisgIC8vIFsyNy44LjEuMTFdIFRlbXBsYXRlIGNsYXNzIGJhc2ljX2ZzdHJlYW0KKyAgLyoqCisgICAqICBAYnJpZWYgIENvbnRyb2xsaW5nIGlucHV0IGFuZCBvdXRwdXQgZm9yIGZpbGVzLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIEB0cGFyYW0gX0NoYXJUICBUeXBlIG9mIGNoYXJhY3RlciBzdHJlYW0uCisgICAqICBAdHBhcmFtIF9UcmFpdHMgIFRyYWl0cyBmb3IgY2hhcmFjdGVyIHR5cGUsIGRlZmF1bHRzIHRvCisgICAqICAgICAgICAgICAgICAgICAgIGNoYXJfdHJhaXRzPF9DaGFyVD4uCisgICAqCisgICAqICBUaGlzIGNsYXNzIHN1cHBvcnRzIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byBuYW1lZCBmaWxlcywgdXNpbmcKKyAgICogIHRoZSBpbmhlcml0ZWQgZnVuY3Rpb25zIGZyb20gc3RkOjpiYXNpY19pb3N0cmVhbS4gIFRvIGNvbnRyb2wgdGhlCisgICAqICBhc3NvY2lhdGVkIHNlcXVlbmNlLCBhbiBpbnN0YW5jZSBvZiBzdGQ6OmJhc2ljX2ZpbGVidWYgaXMgdXNlZCwgd2hpY2gKKyAgICogIHRoaXMgcGFnZSByZWZlcnMgdG8gYXMgQGMgc2IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgYmFzaWNfZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgCQlvZmZfdHlwZTsKKworICAgICAgLy8gTm9uLXN0YW5kYXJkIHR5cGVzOgorICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IAlfX2ZpbGVidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+CQlfX2lvc190eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX2lvc3RyZWFtX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX19maWxlYnVmX3R5cGUJX01fZmlsZWJ1ZjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9ycy9kZXN0cnVjdG9yOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBpdHMgZGVmYXVsdCBjb25zdHJ1Y3RvciwgYW5kIHBhc3NlcworICAgICAgICogIEBjICZzYiB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4gIERvZXMgbm90IG9wZW4gYW55IGZpbGVzCisgICAgICAgKiAgKHlvdSBoYXZlbid0IGdpdmVuIGl0IGEgZmlsZW5hbWUgdG8gb3BlbikuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX2ZzdHJlYW0oKQorICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoKSwgX01fZmlsZWJ1ZigpCisgICAgICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ3JlYXRlIGFuIGlucHV0L291dHB1dCBmaWxlIHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgTnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBmaWxlbmFtZS4KKyAgICAgICAqICBAcGFyYW0gIF9fbW9kZSAgT3BlbiBmaWxlIGluIHNwZWNpZmllZCBtb2RlIChzZWUgc3RkOjppb3NfYmFzZSkuCisgICAgICAgKgorICAgICAgICogIFRpcDogIFdoZW4gdXNpbmcgc3RkOjpzdHJpbmcgdG8gaG9sZCB0aGUgZmlsZW5hbWUsIHlvdSBtdXN0IHVzZQorICAgICAgICogIC5jX3N0cigpIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHRoaXMgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19mc3RyZWFtKGNvbnN0IGNoYXIqIF9fcywKKwkJICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQorICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoMCksIF9NX2ZpbGVidWYoKQorICAgICAgeworCXRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOworCXRoaXMtPm9wZW4oX19zLCBfX21vZGUpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDcmVhdGUgYW4gaW5wdXQvb3V0cHV0IGZpbGUgc3RyZWFtLgorICAgICAgICogIEBwYXJhbSAgX19zICBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGZpbGVuYW1lLgorICAgICAgICogIEBwYXJhbSAgX19tb2RlICBPcGVuIGZpbGUgaW4gc3BlY2lmaWVkIG1vZGUgKHNlZSBzdGQ6Omlvc19iYXNlKS4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX2ZzdHJlYW0oY29uc3Qgc3RkOjpzdHJpbmcmIF9fcywKKwkJICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQorICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoMCksIF9NX2ZpbGVidWYoKQorICAgICAgeworCXRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOworCXRoaXMtPm9wZW4oX19zLCBfX21vZGUpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVGhlIGRlc3RydWN0b3IgZG9lcyBub3RoaW5nLgorICAgICAgICoKKyAgICAgICAqICBUaGUgZmlsZSBpcyBjbG9zZWQgYnkgdGhlIGZpbGVidWYgb2JqZWN0LCBub3QgdGhlIGZvcm1hdHRpbmcKKyAgICAgICAqICBzdHJlYW0uCisgICAgICAgKi8KKyAgICAgIH5iYXNpY19mc3RyZWFtKCkKKyAgICAgIHsgfQorCisgICAgICAvLyBNZW1iZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3NpbmcgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGJhc2ljX2ZpbGVidWYgYnVmZmVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGhpZGVzIGJvdGggc2lnbmF0dXJlcyBvZiBzdGQ6OmJhc2ljX2lvczo6cmRidWYoKS4KKyAgICAgICAqLworICAgICAgX19maWxlYnVmX3R5cGUqCisgICAgICByZGJ1ZigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgV3JhcHBlciB0byB0ZXN0IGZvciBhbiBvcGVuIGZpbGUuCisgICAgICAgKiAgQHJldHVybiAgQGMgcmRidWYoKS0+aXNfb3BlbigpCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGlzX29wZW4oKQorICAgICAgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzY1LiBMYWNrIG9mIGNvbnN0LXF1YWxpZmljYXRpb24gaW4gY2xhdXNlIDI3CisgICAgICBib29sCisgICAgICBpc19vcGVuKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgT3BlbnMgYW4gZXh0ZXJuYWwgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgVGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIFRoZSBvcGVuIG1vZGUgZmxhZ3MuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHN0ZDo6YmFzaWNfZmlsZWJ1Zjo6b3BlbihfX3MsX19tb2RlKS4gIElmIHRoYXQKKyAgICAgICAqICBmdW5jdGlvbiBmYWlscywgQGMgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqICBUaXA6ICBXaGVuIHVzaW5nIHN0ZDo6c3RyaW5nIHRvIGhvbGQgdGhlIGZpbGVuYW1lLCB5b3UgbXVzdCB1c2UKKyAgICAgICAqICAuY19zdHIoKSBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGlzIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywKKwkgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKKyAgICAgIHsKKwlpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJZWxzZQorCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gNDA5LiBDbG9zaW5nIGFuIGZzdHJlYW0gc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlCisJICB0aGlzLT5jbGVhcigpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBPcGVucyBhbiBleHRlcm5hbCBmaWxlLgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgICAgICAqICBAcGFyYW0gIF9fbW9kZSAgVGhlIG9wZW4gbW9kZSBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgc3RkOjpiYXNpY19maWxlYnVmOjpvcGVuKF9fcyxfX21vZGUpLiAgSWYgdGhhdAorICAgICAgICogIGZ1bmN0aW9uIGZhaWxzLCBAYyBmYWlsYml0IGlzIHNldCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIG9wZW4oY29uc3Qgc3RkOjpzdHJpbmcmIF9fcywKKwkgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKKyAgICAgIHsKKwlpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisJZWxzZQorCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gNDA5LiBDbG9zaW5nIGFuIGZzdHJlYW0gc2hvdWxkIGNsZWFyIGVycm9yIHN0YXRlCisJICB0aGlzLT5jbGVhcigpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2xvc2UgdGhlIGZpbGUuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHN0ZDo6YmFzaWNfZmlsZWJ1Zjo6Y2xvc2UoKS4gIElmIHRoYXQgZnVuY3Rpb24KKyAgICAgICAqICBmYWlscywgQGMgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBjbG9zZSgpCisgICAgICB7CisJaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCisJICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CisgICAgICB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjaW5jbHVkZSA8Yml0cy9mc3RyZWFtLnRjYz4KKworI2VuZGlmIC8qIF9HTElCQ1hYX0ZTVFJFQU0gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZnVuY3Rpb25hbCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZnVuY3Rpb25hbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGI2ZGFlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9mdW5jdGlvbmFsCkBAIC0wLDAgKzEsMjU3NCBAQAorLy8gPGZ1bmN0aW9uYWw+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS9mdW5jdGlvbmFsCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0ZVTkNUSU9OQUwKKyNkZWZpbmUgX0dMSUJDWFhfRlVOQ1RJT05BTCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKworI2luY2x1ZGUgPHR5cGVpbmZvPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2guaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1iZXJQb2ludGVyPgorICAgIGNsYXNzIF9NZW1fZm47CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NsYXNzPgorICAgIF9NZW1fZm48X1RwIF9DbGFzczo6Kj4KKyAgICBtZW1fZm4oX1RwIF9DbGFzczo6Kikgbm9leGNlcHQ7CisKK19HTElCQ1hYX0hBU19ORVNURURfVFlQRShyZXN1bHRfdHlwZSkKKworICAvLy8gSWYgd2UgaGF2ZSBmb3VuZCBhIHJlc3VsdF90eXBlLCBleHRyYWN0IGl0LgorICB0ZW1wbGF0ZTxib29sIF9IYXNfcmVzdWx0X3R5cGUsIHR5cGVuYW1lIF9GdW5jdG9yPgorICAgIHN0cnVjdCBfTWF5YmVfZ2V0X3Jlc3VsdF90eXBlCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgIHN0cnVjdCBfTWF5YmVfZ2V0X3Jlc3VsdF90eXBlPHRydWUsIF9GdW5jdG9yPgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSBfRnVuY3Rvcjo6cmVzdWx0X3R5cGUgcmVzdWx0X3R5cGU7IH07CisKKyAgLyoqCisgICAqICBCYXNlIGNsYXNzIGZvciBhbnkgZnVuY3Rpb24gb2JqZWN0IHRoYXQgaGFzIGEgd2VhayByZXN1bHQgdHlwZSwgYXMKKyAgICogIGRlZmluZWQgaW4gMy4zLzMgb2YgVFIxLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbAorICAgIDogX01heWJlX2dldF9yZXN1bHRfdHlwZTxfX2hhc19yZXN1bHRfdHlwZTxfRnVuY3Rvcj46OnZhbHVlLCBfRnVuY3Rvcj4KKyAgICB7IH07CisKKyAgLy8vIFJldHJpZXZlIHRoZSByZXN1bHQgdHlwZSBmb3IgYSBmdW5jdGlvbiB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyhfQXJnVHlwZXMuLi4pPgorICAgIHsgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzKF9BcmdUeXBlcy4uLi4uLik+CisgICAgeyB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoX0FyZ1R5cGVzLi4uKSBjb25zdD4KKyAgICB7IHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyhfQXJnVHlwZXMuLi4uLi4pIGNvbnN0PgorICAgIHsgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzKF9BcmdUeXBlcy4uLikgdm9sYXRpbGU+CisgICAgeyB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoX0FyZ1R5cGVzLi4uLi4uKSB2b2xhdGlsZT4KKyAgICB7IHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyhfQXJnVHlwZXMuLi4pIGNvbnN0IHZvbGF0aWxlPgorICAgIHsgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzKF9BcmdUeXBlcy4uLi4uLikgY29uc3Qgdm9sYXRpbGU+CisgICAgeyB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7IH07CisKKyAgLy8vIFJldHJpZXZlIHRoZSByZXN1bHQgdHlwZSBmb3IgYSBmdW5jdGlvbiByZWZlcmVuY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzKCYpKF9BcmdUeXBlcy4uLik+CisgICAgeyB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoJikoX0FyZ1R5cGVzLi4uLi4uKT4KKyAgICB7IHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsgfTsKKworICAvLy8gUmV0cmlldmUgdGhlIHJlc3VsdCB0eXBlIGZvciBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzKCopKF9BcmdUeXBlcy4uLik+CisgICAgeyB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoKikoX0FyZ1R5cGVzLi4uLi4uKT4KKyAgICB7IHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsgfTsKKworICAvLy8gUmV0cmlldmUgcmVzdWx0IHR5cGUgZm9yIGEgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKT4KKyAgICB7IHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLi4uLik+CisgICAgeyB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7IH07CisKKyAgLy8vIFJldHJpZXZlIHJlc3VsdCB0eXBlIGZvciBhIGNvbnN0IG1lbWJlciBmdW5jdGlvbiBwb2ludGVyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgY29uc3Q+CisgICAgeyB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4uLi4pIGNvbnN0PgorICAgIHsgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOyB9OworCisgIC8vLyBSZXRyaWV2ZSByZXN1bHQgdHlwZSBmb3IgYSB2b2xhdGlsZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pIHZvbGF0aWxlPgorICAgIHsgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uLi4uKSB2b2xhdGlsZT4KKyAgICB7IHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsgfTsKKworICAvLy8gUmV0cmlldmUgcmVzdWx0IHR5cGUgZm9yIGEgY29uc3Qgdm9sYXRpbGUgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKQorCQkJCSAgY29uc3Qgdm9sYXRpbGU+CisgICAgeyB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4uLi4pCisJCQkJICBjb25zdCB2b2xhdGlsZT4KKyAgICB7IHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsgfTsKKworICAvKioKKyAgICogIFN0cmlwIHRvcC1sZXZlbCBjdi1xdWFsaWZpZXJzIGZyb20gdGhlIGZ1bmN0aW9uIG9iamVjdCBhbmQgbGV0CisgICAqICBfV2Vha19yZXN1bHRfdHlwZV9pbXBsIHBlcmZvcm0gdGhlIHJlYWwgd29yay4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlCisgICAgOiBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPHR5cGVuYW1lIHJlbW92ZV9jdjxfRnVuY3Rvcj46OnR5cGU+CisgICAgeyB9OworCisgIC8vLyBEZXRlcm1pbmVzIGlmIHRoZSB0eXBlIF9UcCBkZXJpdmVzIGZyb20gdW5hcnlfZnVuY3Rpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Rlcml2ZXNfZnJvbV91bmFyeV9mdW5jdGlvbiA6IF9fc2ZpbmFlX3R5cGVzCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9SZXM+CisJc3RhdGljIF9fb25lIF9fdGVzdChjb25zdCB2b2xhdGlsZSB1bmFyeV9mdW5jdGlvbjxfVDEsIF9SZXM+Kik7CisKKyAgICAgIC8vIEl0J3MgdGVtcHRpbmcgdG8gY2hhbmdlICIuLi4iIHRvIGNvbnN0IHZvbGF0aWxlIHZvaWQqLCBidXQKKyAgICAgIC8vIHRoYXQgZmFpbHMgd2hlbiBfVHAgaXMgYSBmdW5jdGlvbiB0eXBlLgorICAgICAgc3RhdGljIF9fdHdvIF9fdGVzdCguLi4pOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoX190ZXN0KChfVHAqKTApKSA9PSAxOworICAgIH07CisKKyAgLy8vIERldGVybWluZXMgaWYgdGhlIHR5cGUgX1RwIGRlcml2ZXMgZnJvbSBiaW5hcnlfZnVuY3Rpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Rlcml2ZXNfZnJvbV9iaW5hcnlfZnVuY3Rpb24gOiBfX3NmaW5hZV90eXBlcworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDIsIHR5cGVuYW1lIF9SZXM+CisJc3RhdGljIF9fb25lIF9fdGVzdChjb25zdCB2b2xhdGlsZSBiaW5hcnlfZnVuY3Rpb248X1QxLCBfVDIsIF9SZXM+Kik7CisKKyAgICAgIC8vIEl0J3MgdGVtcHRpbmcgdG8gY2hhbmdlICIuLi4iIHRvIGNvbnN0IHZvbGF0aWxlIHZvaWQqLCBidXQKKyAgICAgIC8vIHRoYXQgZmFpbHMgd2hlbiBfVHAgaXMgYSBmdW5jdGlvbiB0eXBlLgorICAgICAgc3RhdGljIF9fdHdvIF9fdGVzdCguLi4pOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoX190ZXN0KChfVHAqKTApKSA9PSAxOworICAgIH07CisKKyAgLyoqCisgICAqIEludm9rZSBhIGZ1bmN0aW9uIG9iamVjdCwgd2hpY2ggbWF5IGJlIGVpdGhlciBhIG1lbWJlciBwb2ludGVyIG9yIGEKKyAgICogZnVuY3Rpb24gb2JqZWN0LiBUaGUgZmlyc3QgcGFyYW1ldGVyIHdpbGwgdGVsbCB3aGljaC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8CisJICAgICAoIWlzX21lbWJlcl9wb2ludGVyPF9GdW5jdG9yPjo6dmFsdWUKKwkgICAgICAmJiAhaXNfZnVuY3Rpb248X0Z1bmN0b3I+Ojp2YWx1ZQorCSAgICAgICYmICFpc19mdW5jdGlvbjx0eXBlbmFtZSByZW1vdmVfcG9pbnRlcjxfRnVuY3Rvcj46OnR5cGU+Ojp2YWx1ZSksCisJICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8X0Z1bmN0b3ImKF9BcmdzJiYuLi4pPjo6dHlwZQorCSAgID46OnR5cGUKKyAgICBfX2ludm9rZShfRnVuY3RvciYgX19mLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisgICAgICByZXR1cm4gX19mKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8CisgICAgICAgICAgICAgKGlzX21lbWJlcl9wb2ludGVyPF9GdW5jdG9yPjo6dmFsdWUKKyAgICAgICAgICAgICAgJiYgIWlzX2Z1bmN0aW9uPF9GdW5jdG9yPjo6dmFsdWUKKyAgICAgICAgICAgICAgJiYgIWlzX2Z1bmN0aW9uPHR5cGVuYW1lIHJlbW92ZV9wb2ludGVyPF9GdW5jdG9yPjo6dHlwZT46OnZhbHVlKSwKKyAgICAgICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8X0Z1bmN0b3IoX0FyZ3MmJi4uLik+Ojp0eXBlCisgICAgICAgICAgID46OnR5cGUKKyAgICBfX2ludm9rZShfRnVuY3RvciYgX19mLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisgICAgICByZXR1cm4gc3RkOjptZW1fZm4oX19mKShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgIH0KKworICAvLyBUbyBwaWNrIHVwIGZ1bmN0aW9uIHJlZmVyZW5jZXMgKHRoYXQgd2lsbCBiZWNvbWUgZnVuY3Rpb24gcG9pbnRlcnMpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8CisJICAgICAoaXNfcG9pbnRlcjxfRnVuY3Rvcj46OnZhbHVlCisJICAgICAgJiYgaXNfZnVuY3Rpb248dHlwZW5hbWUgcmVtb3ZlX3BvaW50ZXI8X0Z1bmN0b3I+Ojp0eXBlPjo6dmFsdWUpLAorCSAgICAgdHlwZW5hbWUgcmVzdWx0X29mPF9GdW5jdG9yKF9BcmdzJiYuLi4pPjo6dHlwZQorCSAgID46OnR5cGUKKyAgICBfX2ludm9rZShfRnVuY3RvciBfX2YsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHJldHVybiBfX2Yoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBLbm93aW5nIHdoaWNoIG9mIHVuYXJ5X2Z1bmN0aW9uIGFuZCBiaW5hcnlfZnVuY3Rpb24gX1RwIGRlcml2ZXMKKyAgICogIGZyb20sIGRlcml2ZXMgZnJvbSB0aGUgc2FtZSBhbmQgZW5zdXJlcyB0aGF0IHJlZmVyZW5jZV93cmFwcGVyCisgICAqICB3aWxsIGhhdmUgYSB3ZWFrIHJlc3VsdCB0eXBlLiBTZWUgY2FzZXMgYmVsb3cuCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9VbmFyeSwgYm9vbCBfQmluYXJ5LCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlX2ltcGw7CisKKyAgLy8gTm9uZSBvZiB0aGUgbmVzdGVkIGFyZ3VtZW50IHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlX2ltcGw8ZmFsc2UsIGZhbHNlLCBfVHA+CisgICAgOiBfV2Vha19yZXN1bHRfdHlwZTxfVHA+CisgICAgeyB9OworCisgIC8vIE5lc3RlZCBhcmd1bWVudF90eXBlIG9ubHkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2VfaW1wbDx0cnVlLCBmYWxzZSwgX1RwPgorICAgIDogX1dlYWtfcmVzdWx0X3R5cGU8X1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwOjphcmd1bWVudF90eXBlIGFyZ3VtZW50X3R5cGU7CisgICAgfTsKKworICAvLyBOZXN0ZWQgZmlyc3RfYXJndW1lbnRfdHlwZSBhbmQgc2Vjb25kX2FyZ3VtZW50X3R5cGUgb25seS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZV9pbXBsPGZhbHNlLCB0cnVlLCBfVHA+CisgICAgOiBfV2Vha19yZXN1bHRfdHlwZTxfVHA+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHA6OmZpcnN0X2FyZ3VtZW50X3R5cGUgZmlyc3RfYXJndW1lbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBzZWNvbmRfYXJndW1lbnRfdHlwZTsKKyAgICB9OworCisgIC8vIEFsbCB0aGUgbmVzdGVkIGFyZ3VtZW50IHR5cGVzLgorICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZV9pbXBsPHRydWUsIHRydWUsIF9UcD4KKyAgICA6IF9XZWFrX3Jlc3VsdF90eXBlPF9UcD4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcDo6YXJndW1lbnRfdHlwZSBhcmd1bWVudF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHA6OmZpcnN0X2FyZ3VtZW50X3R5cGUgZmlyc3RfYXJndW1lbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBzZWNvbmRfYXJndW1lbnRfdHlwZTsKKyAgICB9OworCisgIF9HTElCQ1hYX0hBU19ORVNURURfVFlQRShhcmd1bWVudF90eXBlKQorICBfR0xJQkNYWF9IQVNfTkVTVEVEX1RZUEUoZmlyc3RfYXJndW1lbnRfdHlwZSkKKyAgX0dMSUJDWFhfSEFTX05FU1RFRF9UWVBFKHNlY29uZF9hcmd1bWVudF90eXBlKQorCisgIC8qKgorICAgKiAgRGVyaXZlcyBmcm9tIHVuYXJ5X2Z1bmN0aW9uIG9yIGJpbmFyeV9mdW5jdGlvbiB3aGVuIGl0CisgICAqICBjYW4uIFNwZWNpYWxpemF0aW9ucyBoYW5kbGUgYWxsIG9mIHRoZSBlYXN5IGNhc2VzLiBUaGUgcHJpbWFyeQorICAgKiAgdGVtcGxhdGUgZGV0ZXJtaW5lcyB3aGF0IHRvIGRvIHdpdGggYSBjbGFzcyB0eXBlLCB3aGljaCBtYXkKKyAgICogIGRlcml2ZSBmcm9tIGJvdGggdW5hcnlfZnVuY3Rpb24gYW5kIGJpbmFyeV9mdW5jdGlvbi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZQorICAgIDogX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2VfaW1wbDwKKyAgICAgIF9faGFzX2FyZ3VtZW50X3R5cGU8X1RwPjo6dmFsdWUsCisgICAgICBfX2hhc19maXJzdF9hcmd1bWVudF90eXBlPF9UcD46OnZhbHVlCisgICAgICAmJiBfX2hhc19zZWNvbmRfYXJndW1lbnRfdHlwZTxfVHA+Ojp2YWx1ZSwKKyAgICAgIF9UcD4KKyAgICB7IH07CisKKyAgLy8gLSBhIGZ1bmN0aW9uIHR5cGUgKHVuYXJ5KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoX1QxKT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPF9UMSwgX1Jlcz4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzKF9UMSkgY29uc3Q+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxfVDEsIF9SZXM+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyhfVDEpIHZvbGF0aWxlPgorICAgIDogdW5hcnlfZnVuY3Rpb248X1QxLCBfUmVzPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoX1QxKSBjb25zdCB2b2xhdGlsZT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPF9UMSwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIGZ1bmN0aW9uIHR5cGUgKGJpbmFyeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoX1QxLCBfVDIpPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyhfVDEsIF9UMikgY29uc3Q+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248X1QxLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzKF9UMSwgX1QyKSB2b2xhdGlsZT4KKyAgICA6IGJpbmFyeV9mdW5jdGlvbjxfVDEsIF9UMiwgX1Jlcz4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoX1QxLCBfVDIpIGNvbnN0IHZvbGF0aWxlPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgZnVuY3Rpb24gcG9pbnRlciB0eXBlICh1bmFyeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzKCopKF9UMSk+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxfVDEsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgKGJpbmFyeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoKikoX1QxLCBfVDIpPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAodW5hcnksIG5vIHF1YWxpZmllcnMpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKSgpPgorICAgIDogdW5hcnlfZnVuY3Rpb248X1QxKiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKGJpbmFyeSwgbm8gcXVhbGlmaWVycykKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoX1QyKT4KKyAgICA6IGJpbmFyeV9mdW5jdGlvbjxfVDEqLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlICh1bmFyeSwgY29uc3QpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKSgpIGNvbnN0PgorICAgIDogdW5hcnlfZnVuY3Rpb248Y29uc3QgX1QxKiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKGJpbmFyeSwgY29uc3QpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKF9UMikgY29uc3Q+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1QxKiwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAodW5hcnksIHZvbGF0aWxlKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoKSB2b2xhdGlsZT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPHZvbGF0aWxlIF9UMSosIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlIChiaW5hcnksIHZvbGF0aWxlKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKShfVDIpIHZvbGF0aWxlPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPHZvbGF0aWxlIF9UMSosIF9UMiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKHVuYXJ5LCBjb25zdCB2b2xhdGlsZSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKCkgY29uc3Qgdm9sYXRpbGU+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxjb25zdCB2b2xhdGlsZSBfVDEqLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAoYmluYXJ5LCBjb25zdCB2b2xhdGlsZSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoX1QyKSBjb25zdCB2b2xhdGlsZT4KKyAgICA6IGJpbmFyeV9mdW5jdGlvbjxjb25zdCB2b2xhdGlsZSBfVDEqLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIFByaW1hcnkgY2xhc3MgdGVtcGxhdGUgZm9yIHJlZmVyZW5jZV93cmFwcGVyLgorICAgKiAgQGluZ3JvdXAgZnVuY3RvcnMKKyAgICogIEB7CisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgcmVmZXJlbmNlX3dyYXBwZXIKKyAgICA6IHB1YmxpYyBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTx0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT4KKyAgICB7CisgICAgICBfVHAqIF9NX2RhdGE7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB0eXBlOworCisgICAgICByZWZlcmVuY2Vfd3JhcHBlcihfVHAmIF9faW5kYXRhKSBub2V4Y2VwdAorICAgICAgOiBfTV9kYXRhKHN0ZDo6X19hZGRyZXNzb2YoX19pbmRhdGEpKQorICAgICAgeyB9CisKKyAgICAgIHJlZmVyZW5jZV93cmFwcGVyKF9UcCYmKSA9IGRlbGV0ZTsKKworICAgICAgcmVmZXJlbmNlX3dyYXBwZXIoY29uc3QgcmVmZXJlbmNlX3dyYXBwZXI8X1RwPiYgX19pbnJlZikgbm9leGNlcHQKKyAgICAgIDogX01fZGF0YShfX2lucmVmLl9NX2RhdGEpCisgICAgICB7IH0KKworICAgICAgcmVmZXJlbmNlX3dyYXBwZXImCisgICAgICBvcGVyYXRvcj0oY29uc3QgcmVmZXJlbmNlX3dyYXBwZXI8X1RwPiYgX19pbnJlZikgbm9leGNlcHQKKyAgICAgIHsKKwlfTV9kYXRhID0gX19pbnJlZi5fTV9kYXRhOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgb3BlcmF0b3IgX1RwJigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiB0aGlzLT5nZXQoKTsgfQorCisgICAgICBfVHAmCisgICAgICBnZXQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gKl9NX2RhdGE7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJdHlwZW5hbWUgcmVzdWx0X29mPF9UcCYoX0FyZ3MmJi4uLik+Ojp0eXBlCisJb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7CisJICByZXR1cm4gX19pbnZva2UoZ2V0KCksIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorICAgIH07CisKKworICAvLy8gRGVub3RlcyBhIHJlZmVyZW5jZSBzaG91bGQgYmUgdGFrZW4gdG8gYSB2YXJpYWJsZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+CisgICAgcmVmKF9UcCYgX190KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIHJlZmVyZW5jZV93cmFwcGVyPF9UcD4oX190KTsgfQorCisgIC8vLyBEZW5vdGVzIGEgY29uc3QgcmVmZXJlbmNlIHNob3VsZCBiZSB0YWtlbiB0byBhIHZhcmlhYmxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IF9UcD4KKyAgICBjcmVmKGNvbnN0IF9UcCYgX190KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIHJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IF9UcD4oX190KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkIHJlZihjb25zdCBfVHAmJikgPSBkZWxldGU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQgY3JlZihjb25zdCBfVHAmJikgPSBkZWxldGU7CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgcmVmZXJlbmNlX3dyYXBwZXI8X1RwPgorICAgIHJlZihyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+IF9fdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiByZWYoX190LmdldCgpKTsgfQorCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IF9UcD4KKyAgICBjcmVmKHJlZmVyZW5jZV93cmFwcGVyPF9UcD4gX190KSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIGNyZWYoX190LmdldCgpKTsgfQorCisgIC8vIEB9IGdyb3VwIGZ1bmN0b3JzCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1R5cGVzPgorICAgIHN0cnVjdCBfUGFjayA6IGludGVncmFsX2NvbnN0YW50PHNpemVfdCwgc2l6ZW9mLi4uKF9UeXBlcyk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8sIGJvb2wgPSBfRnJvbTo6dmFsdWUgPT0gX1RvOjp2YWx1ZT4KKyAgICBzdHJ1Y3QgX0FsbENvbnZlcnRpYmxlIDogZmFsc2VfdHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfRnJvbSwgdHlwZW5hbWUuLi4gX1RvPgorICAgIHN0cnVjdCBfQWxsQ29udmVydGlibGU8X1BhY2s8X0Zyb20uLi4+LCBfUGFjazxfVG8uLi4+LCB0cnVlPgorICAgIDogX19hbmRfPGlzX2NvbnZlcnRpYmxlPF9Gcm9tLCBfVG8+Li4uPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgIHVzaW5nIF9Ob3RTYW1lID0gX19ub3RfPGlzX3NhbWU8dHlwZW5hbWUgc3RkOjpkZWNheTxfVHAxPjo6dHlwZSwKKwkJCQkgICAgdHlwZW5hbWUgc3RkOjpkZWNheTxfVHAyPjo6dHlwZT4+OworCisgIC8qKgorICAgKiBEZXJpdmVzIGZyb20gQGMgdW5hcnlfZnVuY3Rpb24gb3IgQGMgYmluYXJ5X2Z1bmN0aW9uLCBvciBwZXJoYXBzCisgICAqIG5vdGhpbmcsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwcm92aWRlZC4gVGhlCisgICAqIHByaW1hcnkgdGVtcGxhdGUgaXMgdGhlIGJhc2lzIGNhc2UsIHdoaWNoIGRlcml2ZXMgbm90aGluZy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbiB7IH07CisKKyAgLy8vIERlcml2ZXMgZnJvbSBAYyB1bmFyeV9mdW5jdGlvbiwgYXMgYXBwcm9wcmlhdGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBfVDE+CisgICAgOiBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9UMSwgX1Jlcz4geyB9OworCisgIC8vLyBEZXJpdmVzIGZyb20gQGMgYmluYXJ5X2Z1bmN0aW9uLCBhcyBhcHByb3ByaWF0ZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248X1JlcywgX1QxLCBfVDI+CisgICAgOiBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxfVDEsIF9UMiwgX1Jlcz4geyB9OworCisgIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBAYyBtZW1fZm4gZm9yIG1lbWJlciBmdW5jdGlvbiBwb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX01lbV9mbjxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLik+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBfQ2xhc3MqLCBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlfUmVzCisJX01fY2FsbChfVHAmJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosCisJCV9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsKKwkgIHJldHVybiAoc3RkOjpmb3J3YXJkPF9UcD4oX19vYmplY3QpLipfX3BtZikKKwkgICAgKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorCV9SZXMKKwlfTV9jYWxsKF9UcCYmIF9fcHRyLCBjb25zdCB2b2xhdGlsZSB2b2lkICosIF9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsgcmV0dXJuICgoKl9fcHRyKS4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLy8gUmVxdWlyZSBlYWNoIF9BcmdzIHRvIGJlIGNvbnZlcnRpYmxlIHRvIGNvcnJlc3BvbmRpbmcgX0FyZ1R5cGVzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwl1c2luZyBfUmVxdWlyZVZhbGlkQXJncworCSAgPSBfUmVxdWlyZTxfQWxsQ29udmVydGlibGU8X1BhY2s8X0FyZ3MuLi4+LCBfUGFjazxfQXJnVHlwZXMuLi4+Pj47CisKKyAgICAgIC8vIFJlcXVpcmUgZWFjaCBfQXJncyB0byBiZSBjb252ZXJ0aWJsZSB0byBjb3JyZXNwb25kaW5nIF9BcmdUeXBlcworICAgICAgLy8gYW5kIHJlcXVpcmUgX1RwIGlzIG5vdCBfQ2xhc3MsIF9DbGFzcyYgb3IgX0NsYXNzKgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwl1c2luZyBfUmVxdWlyZVZhbGlkQXJnczIKKwkgID0gX1JlcXVpcmU8X05vdFNhbWU8X0NsYXNzLCBfVHA+LCBfTm90U2FtZTxfQ2xhc3MqLCBfVHA+LAorCQkgICAgIF9BbGxDb252ZXJ0aWJsZTxfUGFjazxfQXJncy4uLj4sIF9QYWNrPF9BcmdUeXBlcy4uLj4+PjsKKworICAgICAgLy8gUmVxdWlyZSBlYWNoIF9BcmdzIHRvIGJlIGNvbnZlcnRpYmxlIHRvIGNvcnJlc3BvbmRpbmcgX0FyZ1R5cGVzCisgICAgICAvLyBhbmQgcmVxdWlyZSBfVHAgaXMgX0NsYXNzIG9yIGRlcml2ZWQgZnJvbSBfQ2xhc3MKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX1JlcXVpcmVWYWxpZEFyZ3MzCisJICA9IF9SZXF1aXJlPGlzX2Jhc2Vfb2Y8X0NsYXNzLCBfVHA+LAorCQkgICAgIF9BbGxDb252ZXJ0aWJsZTxfUGFjazxfQXJncy4uLj4sIF9QYWNrPF9BcmdUeXBlcy4uLj4+PjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKworICAgICAgZXhwbGljaXQgX01lbV9mbihfRnVuY3RvciBfX3BtZikgOiBfX3BtZihfX3BtZikgeyB9CisKKyAgICAgIC8vIEhhbmRsZSBvYmplY3RzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzPF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShfQ2xhc3MmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCB0eXBlbmFtZSBfUmVxID0gX1JlcXVpcmVWYWxpZEFyZ3M8X0FyZ3MuLi4+PgorCV9SZXMKKwlvcGVyYXRvcigpKF9DbGFzcyYmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7CisJICByZXR1cm4gKHN0ZDo6bW92ZShfX29iamVjdCkuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKworICAgICAgLy8gSGFuZGxlIHBvaW50ZXJzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzPF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShfQ2xhc3MqIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiAoX19vYmplY3QtPipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgc21hcnQgcG9pbnRlcnMsIHJlZmVyZW5jZXMgYW5kIHBvaW50ZXJzIHRvIGRlcml2ZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3MsCisJICAgICAgIHR5cGVuYW1lIF9SZXEgPSBfUmVxdWlyZVZhbGlkQXJnczI8X1RwLCBfQXJncy4uLj4+CisJX1JlcworCW9wZXJhdG9yKCkoX1RwJiYgX19vYmplY3QsIF9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsKKwkgIHJldHVybiBfTV9jYWxsKHN0ZDo6Zm9yd2FyZDxfVHA+KF9fb2JqZWN0KSwgJl9fb2JqZWN0LAorCSAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzLAorCSAgICAgICB0eXBlbmFtZSBfUmVxID0gX1JlcXVpcmVWYWxpZEFyZ3MzPF9UcCwgX0FyZ3MuLi4+PgorCV9SZXMKKwlvcGVyYXRvcigpKHJlZmVyZW5jZV93cmFwcGVyPF9UcD4gX19yZWYsIF9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsgcmV0dXJuIG9wZXJhdG9yKCkoX19yZWYuZ2V0KCksIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfRnVuY3RvciBfX3BtZjsKKyAgICB9OworCisgIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBAYyBtZW1fZm4gZm9yIGNvbnN0IG1lbWJlciBmdW5jdGlvbiBwb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX01lbV9mbjxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgY29uc3Q+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBjb25zdCBfQ2xhc3MqLAorCQkJCQkgICAgIF9BcmdUeXBlcy4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgKF9DbGFzczo6Kl9GdW5jdG9yKShfQXJnVHlwZXMuLi4pIGNvbnN0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorCV9SZXMKKwlfTV9jYWxsKF9UcCYmIF9fb2JqZWN0LCBjb25zdCB2b2xhdGlsZSBfQ2xhc3MgKiwKKwkJX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0CisJeworCSAgcmV0dXJuIChzdGQ6OmZvcndhcmQ8X1RwPihfX29iamVjdCkuKl9fcG1mKQorCSAgICAoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJX1JlcworCV9NX2NhbGwoX1RwJiYgX19wdHIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiwgX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0CisJeyByZXR1cm4gKCgqX19wdHIpLipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwl1c2luZyBfUmVxdWlyZVZhbGlkQXJncworCSAgPSBfUmVxdWlyZTxfQWxsQ29udmVydGlibGU8X1BhY2s8X0FyZ3MuLi4+LCBfUGFjazxfQXJnVHlwZXMuLi4+Pj47CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX1JlcXVpcmVWYWxpZEFyZ3MyCisJICA9IF9SZXF1aXJlPF9Ob3RTYW1lPF9DbGFzcywgX1RwPiwgX05vdFNhbWU8Y29uc3QgX0NsYXNzKiwgX1RwPiwKKwkJICAgICBfQWxsQ29udmVydGlibGU8X1BhY2s8X0FyZ3MuLi4+LCBfUGFjazxfQXJnVHlwZXMuLi4+Pj47CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX1JlcXVpcmVWYWxpZEFyZ3MzCisJICA9IF9SZXF1aXJlPGlzX2Jhc2Vfb2Y8X0NsYXNzLCBfVHA+LAorCQkgICAgIF9BbGxDb252ZXJ0aWJsZTxfUGFjazxfQXJncy4uLj4sIF9QYWNrPF9BcmdUeXBlcy4uLj4+PjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKworICAgICAgZXhwbGljaXQgX01lbV9mbihfRnVuY3RvciBfX3BtZikgOiBfX3BtZihfX3BtZikgeyB9CisKKyAgICAgIC8vIEhhbmRsZSBvYmplY3RzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzPF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShjb25zdCBfQ2xhc3MmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCB0eXBlbmFtZSBfUmVxID0gX1JlcXVpcmVWYWxpZEFyZ3M8X0FyZ3MuLi4+PgorCV9SZXMKKwlvcGVyYXRvcigpKGNvbnN0IF9DbGFzcyYmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7CisJICByZXR1cm4gKHN0ZDo6bW92ZShfX29iamVjdCkuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKworICAgICAgLy8gSGFuZGxlIHBvaW50ZXJzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzPF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShjb25zdCBfQ2xhc3MqIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiAoX19vYmplY3QtPipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgc21hcnQgcG9pbnRlcnMsIHJlZmVyZW5jZXMgYW5kIHBvaW50ZXJzIHRvIGRlcml2ZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3MsCisJICAgICAgIHR5cGVuYW1lIF9SZXEgPSBfUmVxdWlyZVZhbGlkQXJnczI8X1RwLCBfQXJncy4uLj4+CisJX1JlcyBvcGVyYXRvcigpKF9UcCYmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7CisJICByZXR1cm4gX01fY2FsbChzdGQ6OmZvcndhcmQ8X1RwPihfX29iamVjdCksICZfX29iamVjdCwKKwkgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncywKKwkgICAgICAgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzMzxfVHAsIF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+IF9fcmVmLCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiBvcGVyYXRvcigpKF9fcmVmLmdldCgpLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Z1bmN0b3IgX19wbWY7CisgICAgfTsKKworICAvLy8gSW1wbGVtZW50YXRpb24gb2YgQGMgbWVtX2ZuIGZvciB2b2xhdGlsZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9NZW1fZm48X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pIHZvbGF0aWxlPgorICAgIDogcHVibGljIF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248X1Jlcywgdm9sYXRpbGUgX0NsYXNzKiwKKwkJCQkJICAgICBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKSB2b2xhdGlsZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlfUmVzCisJX01fY2FsbChfVHAmJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosCisJCV9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsKKwkgIHJldHVybiAoc3RkOjpmb3J3YXJkPF9UcD4oX19vYmplY3QpLipfX3BtZikKKwkgICAgKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorCV9SZXMKKwlfTV9jYWxsKF9UcCYmIF9fcHRyLCBjb25zdCB2b2xhdGlsZSB2b2lkICosIF9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsgcmV0dXJuICgoKl9fcHRyKS4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX1JlcXVpcmVWYWxpZEFyZ3MKKwkgID0gX1JlcXVpcmU8X0FsbENvbnZlcnRpYmxlPF9QYWNrPF9BcmdzLi4uPiwgX1BhY2s8X0FyZ1R5cGVzLi4uPj4+OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorCXVzaW5nIF9SZXF1aXJlVmFsaWRBcmdzMgorCSAgPSBfUmVxdWlyZTxfTm90U2FtZTxfQ2xhc3MsIF9UcD4sIF9Ob3RTYW1lPHZvbGF0aWxlIF9DbGFzcyosIF9UcD4sCisJCSAgICAgX0FsbENvbnZlcnRpYmxlPF9QYWNrPF9BcmdzLi4uPiwgX1BhY2s8X0FyZ1R5cGVzLi4uPj4+OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorCXVzaW5nIF9SZXF1aXJlVmFsaWRBcmdzMworCSAgPSBfUmVxdWlyZTxpc19iYXNlX29mPF9DbGFzcywgX1RwPiwKKwkJICAgICBfQWxsQ29udmVydGlibGU8X1BhY2s8X0FyZ3MuLi4+LCBfUGFjazxfQXJnVHlwZXMuLi4+Pj47CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisKKyAgICAgIGV4cGxpY2l0IF9NZW1fZm4oX0Z1bmN0b3IgX19wbWYpIDogX19wbWYoX19wbWYpIHsgfQorCisgICAgICAvLyBIYW5kbGUgb2JqZWN0cworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsIHR5cGVuYW1lIF9SZXEgPSBfUmVxdWlyZVZhbGlkQXJnczxfQXJncy4uLj4+CisJX1JlcworCW9wZXJhdG9yKCkodm9sYXRpbGUgX0NsYXNzJiBfX29iamVjdCwgX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0CisJeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzPF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKSh2b2xhdGlsZSBfQ2xhc3MmJiBfX29iamVjdCwgX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0CisJeworCSAgcmV0dXJuIChzdGQ6Om1vdmUoX19vYmplY3QpLipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgIC8vIEhhbmRsZSBwb2ludGVycworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsIHR5cGVuYW1lIF9SZXEgPSBfUmVxdWlyZVZhbGlkQXJnczxfQXJncy4uLj4+CisJX1JlcworCW9wZXJhdG9yKCkodm9sYXRpbGUgX0NsYXNzKiBfX29iamVjdCwgX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0CisJeyByZXR1cm4gKF9fb2JqZWN0LT4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgLy8gSGFuZGxlIHNtYXJ0IHBvaW50ZXJzLCByZWZlcmVuY2VzIGFuZCBwb2ludGVycyB0byBkZXJpdmVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzLAorCSAgICAgICB0eXBlbmFtZSBfUmVxID0gX1JlcXVpcmVWYWxpZEFyZ3MyPF9UcCwgX0FyZ3MuLi4+PgorCV9SZXMKKwlvcGVyYXRvcigpKF9UcCYmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7CisJICByZXR1cm4gX01fY2FsbChzdGQ6OmZvcndhcmQ8X1RwPihfX29iamVjdCksICZfX29iamVjdCwKKwkgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncywKKwkgICAgICAgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzMzxfVHAsIF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+IF9fcmVmLCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiBvcGVyYXRvcigpKF9fcmVmLmdldCgpLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Z1bmN0b3IgX19wbWY7CisgICAgfTsKKworICAvLy8gSW1wbGVtZW50YXRpb24gb2YgQGMgbWVtX2ZuIGZvciBjb25zdCB2b2xhdGlsZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9NZW1fZm48X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pIGNvbnN0IHZvbGF0aWxlPgorICAgIDogcHVibGljIF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb248X1JlcywgY29uc3Qgdm9sYXRpbGUgX0NsYXNzKiwKKwkJCQkJICAgICBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKSBjb25zdCB2b2xhdGlsZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKwlfUmVzCisJX01fY2FsbChfVHAmJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosCisJCV9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsKKwkgIHJldHVybiAoc3RkOjpmb3J3YXJkPF9UcD4oX19vYmplY3QpLipfX3BtZikKKwkgICAgKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorCV9SZXMKKwlfTV9jYWxsKF9UcCYmIF9fcHRyLCBjb25zdCB2b2xhdGlsZSB2b2lkICosIF9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsgcmV0dXJuICgoKl9fcHRyKS4qX19wbWYpKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX1JlcXVpcmVWYWxpZEFyZ3MKKwkgID0gX1JlcXVpcmU8X0FsbENvbnZlcnRpYmxlPF9QYWNrPF9BcmdzLi4uPiwgX1BhY2s8X0FyZ1R5cGVzLi4uPj4+OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorCXVzaW5nIF9SZXF1aXJlVmFsaWRBcmdzMgorCSAgPSBfUmVxdWlyZTxfTm90U2FtZTxfQ2xhc3MsIF9UcD4sCisJCSAgICAgX05vdFNhbWU8Y29uc3Qgdm9sYXRpbGUgX0NsYXNzKiwgX1RwPiwKKwkJICAgICBfQWxsQ29udmVydGlibGU8X1BhY2s8X0FyZ3MuLi4+LCBfUGFjazxfQXJnVHlwZXMuLi4+Pj47CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX1JlcXVpcmVWYWxpZEFyZ3MzCisJICA9IF9SZXF1aXJlPGlzX2Jhc2Vfb2Y8X0NsYXNzLCBfVHA+LAorCQkgICAgIF9BbGxDb252ZXJ0aWJsZTxfUGFjazxfQXJncy4uLj4sIF9QYWNrPF9BcmdUeXBlcy4uLj4+PjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKworICAgICAgZXhwbGljaXQgX01lbV9mbihfRnVuY3RvciBfX3BtZikgOiBfX3BtZihfX3BtZikgeyB9CisKKyAgICAgIC8vIEhhbmRsZSBvYmplY3RzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzPF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShjb25zdCB2b2xhdGlsZSBfQ2xhc3MmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCB0eXBlbmFtZSBfUmVxID0gX1JlcXVpcmVWYWxpZEFyZ3M8X0FyZ3MuLi4+PgorCV9SZXMKKwlvcGVyYXRvcigpKGNvbnN0IHZvbGF0aWxlIF9DbGFzcyYmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7CisJICByZXR1cm4gKHN0ZDo6bW92ZShfX29iamVjdCkuKl9fcG1mKShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKworICAgICAgLy8gSGFuZGxlIHBvaW50ZXJzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzPF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShjb25zdCB2b2xhdGlsZSBfQ2xhc3MqIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiAoX19vYmplY3QtPipfX3BtZikoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgc21hcnQgcG9pbnRlcnMsIHJlZmVyZW5jZXMgYW5kIHBvaW50ZXJzIHRvIGRlcml2ZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3MsCisJICAgICAgIHR5cGVuYW1lIF9SZXEgPSBfUmVxdWlyZVZhbGlkQXJnczI8X1RwLCBfQXJncy4uLj4+CisJX1JlcyBvcGVyYXRvcigpKF9UcCYmIF9fb2JqZWN0LCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7CisJICByZXR1cm4gX01fY2FsbChzdGQ6OmZvcndhcmQ8X1RwPihfX29iamVjdCksICZfX29iamVjdCwKKwkgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncywKKwkgICAgICAgdHlwZW5hbWUgX1JlcSA9IF9SZXF1aXJlVmFsaWRBcmdzMzxfVHAsIF9BcmdzLi4uPj4KKwlfUmVzCisJb3BlcmF0b3IoKShyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+IF9fcmVmLCBfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7IHJldHVybiBvcGVyYXRvcigpKF9fcmVmLmdldCgpLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgX0Z1bmN0b3IgX19wbWY7CisgICAgfTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KKyAgICBzdHJ1Y3QgX01lbV9mbl9jb25zdF9vcl9ub24KKyAgICB7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX01lbV9mbl9jb25zdF9vcl9ub248X1RwLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCYgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBjbGFzcyBfTWVtX2ZuPF9SZXMgX0NsYXNzOjoqPgorICAgIHsKKyAgICAgIHVzaW5nIF9fcG1fdHlwZSA9IF9SZXMgX0NsYXNzOjoqOworCisgICAgICAvLyBUaGlzIGJpdCBvZiBnZW5pdXMgaXMgZHVlIHRvIFBldGVyIERpbW92LCBpbXByb3ZlZCBzbGlnaHRseSBieQorICAgICAgLy8gRG91Z2xhcyBHcmVnb3IuCisgICAgICAvLyBNYWRlIGxlc3MgZWxlZ2FudCB0byBzdXBwb3J0IHBlcmZlY3QgZm9yd2FyZGluZyBhbmQgbm9leGNlcHQuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisJYXV0bworCV9NX2NhbGwoX1RwJiYgX19vYmplY3QsIGNvbnN0IF9DbGFzcyAqKSBjb25zdCBub2V4Y2VwdAorCS0+IGRlY2x0eXBlKHN0ZDo6Zm9yd2FyZDxfVHA+KF9fb2JqZWN0KS4qc3RkOjpkZWNsdmFsPF9fcG1fdHlwZSY+KCkpCisJeyByZXR1cm4gc3RkOjpmb3J3YXJkPF9UcD4oX19vYmplY3QpLipfX3BtOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorCWF1dG8KKwlfTV9jYWxsKF9UcCYmIF9fb2JqZWN0LCBfVXAgKiBjb25zdCAqKSBjb25zdCBub2V4Y2VwdAorCS0+IGRlY2x0eXBlKCgqc3RkOjpmb3J3YXJkPF9UcD4oX19vYmplY3QpKS4qc3RkOjpkZWNsdmFsPF9fcG1fdHlwZSY+KCkpCisJeyByZXR1cm4gKCpzdGQ6OmZvcndhcmQ8X1RwPihfX29iamVjdCkpLipfX3BtOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKwlhdXRvCisJX01fY2FsbChfVHAmJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCopIGNvbnN0CisJbm9leGNlcHQobm9leGNlcHQoKCpfX3B0cikuKnN0ZDo6ZGVjbHZhbDxfX3BtX3R5cGUmPigpKSkKKwktPiBkZWNsdHlwZSgoKl9fcHRyKS4qc3RkOjpkZWNsdmFsPF9fcG1fdHlwZSY+KCkpCisJeyByZXR1cm4gKCpfX3B0cikuKl9fcG07IH0KKworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0CisgICAgICBfTWVtX2ZuKF9SZXMgX0NsYXNzOjoqX19wbSkgbm9leGNlcHQgOiBfX3BtKF9fcG0pIHsgfQorCisgICAgICAvLyBIYW5kbGUgb2JqZWN0cworICAgICAgX1JlcyYKKyAgICAgIG9wZXJhdG9yKCkoX0NsYXNzJiBfX29iamVjdCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LipfX3BtOyB9CisKKyAgICAgIGNvbnN0IF9SZXMmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DbGFzcyYgX19vYmplY3QpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX29iamVjdC4qX19wbTsgfQorCisgICAgICBfUmVzJiYKKyAgICAgIG9wZXJhdG9yKCkoX0NsYXNzJiYgX19vYmplY3QpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6OmZvcndhcmQ8X0NsYXNzPihfX29iamVjdCkuKl9fcG07IH0KKworICAgICAgY29uc3QgX1JlcyYmCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DbGFzcyYmIF9fb2JqZWN0KSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gc3RkOjpmb3J3YXJkPGNvbnN0IF9DbGFzcz4oX19vYmplY3QpLipfX3BtOyB9CisKKyAgICAgIC8vIEhhbmRsZSBwb2ludGVycworICAgICAgX1JlcyYKKyAgICAgIG9wZXJhdG9yKCkoX0NsYXNzKiBfX29iamVjdCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LT4qX19wbTsgfQorCisgICAgICBjb25zdCBfUmVzJgorICAgICAgb3BlcmF0b3IoKShjb25zdCBfQ2xhc3MqIF9fb2JqZWN0KSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19vYmplY3QtPipfX3BtOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycyBhbmQgZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfUmVxID0gX1JlcXVpcmU8X05vdFNhbWU8X0NsYXNzKiwgX1RwPj4+CisJYXV0bworCW9wZXJhdG9yKCkoX1RwJiYgX191bmtub3duKSBjb25zdAorCW5vZXhjZXB0KG5vZXhjZXB0KHN0ZDo6ZGVjbHZhbDxfTWVtX2ZuKj4oKS0+X01fY2FsbAorCQkJICAoc3RkOjpmb3J3YXJkPF9UcD4oX191bmtub3duKSwgJl9fdW5rbm93bikpKQorCS0+IGRlY2x0eXBlKHRoaXMtPl9NX2NhbGwoc3RkOjpmb3J3YXJkPF9UcD4oX191bmtub3duKSwgJl9fdW5rbm93bikpCisJeyByZXR1cm4gX01fY2FsbChzdGQ6OmZvcndhcmQ8X1RwPihfX3Vua25vd24pLCAmX191bmtub3duKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9SZXEgPSBfUmVxdWlyZTxpc19iYXNlX29mPF9DbGFzcywgX1RwPj4+CisJYXV0bworCW9wZXJhdG9yKCkocmVmZXJlbmNlX3dyYXBwZXI8X1RwPiBfX3JlZikgY29uc3QKKwlub2V4Y2VwdChub2V4Y2VwdChzdGQ6OmRlY2x2YWw8X01lbV9mbiY+KCkoX19yZWYuZ2V0KCkpKSkKKwktPiBkZWNsdHlwZSgoKnRoaXMpKF9fcmVmLmdldCgpKSkKKwl7IHJldHVybiAoKnRoaXMpKF9fcmVmLmdldCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9SZXMgX0NsYXNzOjoqX19wbTsKKyAgICB9OworCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gMjA0OC4gIFVubmVjZXNzYXJ5IG1lbV9mbiBvdmVybG9hZHMKKyAgLyoqCisgICAqICBAYnJpZWYgUmV0dXJucyBhIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGZvcndhcmRzIHRvIHRoZSBtZW1iZXIKKyAgICogIHBvaW50ZXIgQGEgcG0uCisgICAqICBAaW5ncm91cCBmdW5jdG9ycworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2xhc3M+CisgICAgaW5saW5lIF9NZW1fZm48X1RwIF9DbGFzczo6Kj4KKyAgICBtZW1fZm4oX1RwIF9DbGFzczo6KiBfX3BtKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHJldHVybiBfTWVtX2ZuPF9UcCBfQ2xhc3M6Oio+KF9fcG0pOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0eXBlIF9UcCBpcyBhIGZ1bmN0aW9uIG9iamVjdAorICAgKiAgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzdWJleHByZXNzaW9uIHdoZW4gZXZhbHVhdGluZyBjYWxscyB0bworICAgKiAgZnVuY3Rpb24gb2JqZWN0cyByZXR1cm5lZCBieSBiaW5kKCkuIFtUUjEgMy42LjFdCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHR5cGUgX1RwIGlzIGEgcGxhY2Vob2xkZXIgaW4gYQorICAgKiAgYmluZCgpIGV4cHJlc3Npb24gYW5kLCBpZiBzbywgd2hpY2ggcGxhY2Vob2xkZXIgaXQgaXMuIFtUUjEgMy42LjJdCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3BsYWNlaG9sZGVyCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8aW50LCAwPgorICAgIHsgfTsKKworICAvKiogQGJyaWVmIFRoZSB0eXBlIG9mIHBsYWNlaG9sZGVyIG9iamVjdHMgZGVmaW5lZCBieSBsaWJzdGRjKysuCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX051bT4gc3RydWN0IF9QbGFjZWhvbGRlciB7IH07CisKKyAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqIEBuYW1lc3BhY2Ugc3RkOjpwbGFjZWhvbGRlcnMKKyAgICogIEBicmllZiBJU08gQysrMTEgZW50aXRpZXMgc3ViLW5hbWVzcGFjZSBmb3IgZnVuY3Rpb25hbC4KKyAgICogIEBpbmdyb3VwIGJpbmRlcnMKKyAgICovCisgIG5hbWVzcGFjZSBwbGFjZWhvbGRlcnMKKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAvKiBEZWZpbmUgYSBsYXJnZSBudW1iZXIgb2YgcGxhY2Vob2xkZXJzLiBUaGVyZSBpcyBubyB3YXkgdG8KKyAgICogc2ltcGxpZnkgdGhpcyB3aXRoIHZhcmlhZGljIHRlbXBsYXRlcywgYmVjYXVzZSB3ZSdyZSBpbnRyb2R1Y2luZworICAgKiB1bmlxdWUgbmFtZXMgZm9yIGVhY2guCisgICAqLworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8MT4gXzE7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjwyPiBfMjsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDM+IF8zOworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8ND4gXzQ7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjw1PiBfNTsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDY+IF82OworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8Nz4gXzc7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjw4PiBfODsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDk+IF85OworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8MTA+IF8xMDsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDExPiBfMTE7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjwxMj4gXzEyOworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8MTM+IF8xMzsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDE0PiBfMTQ7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjwxNT4gXzE1OworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8MTY+IF8xNjsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDE3PiBfMTc7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjwxOD4gXzE4OworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8MTk+IF8xOTsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDIwPiBfMjA7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjwyMT4gXzIxOworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8MjI+IF8yMjsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDIzPiBfMjM7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjwyND4gXzI0OworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8MjU+IF8yNTsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDI2PiBfMjY7CisgICAgZXh0ZXJuIGNvbnN0IF9QbGFjZWhvbGRlcjwyNz4gXzI3OworICAgIGV4dGVybiBjb25zdCBfUGxhY2Vob2xkZXI8Mjg+IF8yODsKKyAgICBleHRlcm4gY29uc3QgX1BsYWNlaG9sZGVyPDI5PiBfMjk7CisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9CisKKyAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgaXNfcGxhY2Vob2xkZXIgdGhhdCBwcm92aWRlcyB0aGUgcGxhY2Vob2xkZXIKKyAgICogIG51bWJlciBmb3IgdGhlIHBsYWNlaG9sZGVyIG9iamVjdHMgZGVmaW5lZCBieSBsaWJzdGRjKysuCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX051bT4KKyAgICBzdHJ1Y3QgaXNfcGxhY2Vob2xkZXI8X1BsYWNlaG9sZGVyPF9OdW0+ID4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxpbnQsIF9OdW0+CisgICAgeyB9OworCisgIHRlbXBsYXRlPGludCBfTnVtPgorICAgIHN0cnVjdCBpc19wbGFjZWhvbGRlcjxjb25zdCBfUGxhY2Vob2xkZXI8X051bT4gPgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGludCwgX051bT4KKyAgICB7IH07CisKKyAgLyoqCisgICAqIFVzZWQgYnkgX1NhZmVfdHVwbGVfZWxlbWVudCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIG5vIHR1cGxlCisgICAqIGVsZW1lbnQgYXQgdGhpcyBwb3NpdGlvbi4KKyAgICovCisgIHN0cnVjdCBfTm9fdHVwbGVfZWxlbWVudDsKKworICAvKioKKyAgICogSW1wbGVtZW50YXRpb24gaGVscGVyIGZvciBfU2FmZV90dXBsZV9lbGVtZW50LiBUaGlzIHByaW1hcnkKKyAgICogdGVtcGxhdGUgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBpdCBpcyBzYWZlIHRvIHVzZSBAYworICAgKiB0dXBsZV9lbGVtZW50LgorICAgKi8KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZSBfVHVwbGUsIGJvb2wgX0lzU2FmZT4KKyAgICBzdHJ1Y3QgX1NhZmVfdHVwbGVfZWxlbWVudF9pbXBsCisgICAgOiB0dXBsZV9lbGVtZW50PF9faSwgX1R1cGxlPiB7IH07CisKKyAgLyoqCisgICAqIEltcGxlbWVudGF0aW9uIGhlbHBlciBmb3IgX1NhZmVfdHVwbGVfZWxlbWVudC4gVGhpcyBwYXJ0aWFsCisgICAqIHNwZWNpYWxpemF0aW9uIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgaXQgaXMgbm90IHNhZmUgdG8gdXNlIEBjCisgICAqIHR1cGxlX2VsZW1lbnQuIFdlIGp1c3QgcmV0dXJuIEBjIF9Ob190dXBsZV9lbGVtZW50LgorICAgKi8KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZSBfVHVwbGU+CisgICAgc3RydWN0IF9TYWZlX3R1cGxlX2VsZW1lbnRfaW1wbDxfX2ksIF9UdXBsZSwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfTm9fdHVwbGVfZWxlbWVudCB0eXBlOworICAgIH07CisKKyAgLyoqCisgICAqIExpa2UgdHVwbGVfZWxlbWVudCwgYnV0IHJldHVybnMgQGMgX05vX3R1cGxlX2VsZW1lbnQgd2hlbgorICAgKiB0dXBsZV9lbGVtZW50IHdvdWxkIHJldHVybiBhbiBlcnJvci4KKyAgICovCisgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZSBfVHVwbGU+CisgICBzdHJ1Y3QgX1NhZmVfdHVwbGVfZWxlbWVudAorICAgOiBfU2FmZV90dXBsZV9lbGVtZW50X2ltcGw8X19pLCBfVHVwbGUsCisJCQkgICAgICAoX19pIDwgdHVwbGVfc2l6ZTxfVHVwbGU+Ojp2YWx1ZSk+CisgICB7IH07CisKKyAgLyoqCisgICAqICBNYXBzIGFuIGFyZ3VtZW50IHRvIGJpbmQoKSBpbnRvIGFuIGFjdHVhbCBhcmd1bWVudCB0byB0aGUgYm91bmQKKyAgICogIGZ1bmN0aW9uIG9iamVjdCBbVFIxIDMuNi4zLzVdLiBPbmx5IHRoZSBmaXJzdCBwYXJhbWV0ZXIgc2hvdWxkCisgICAqICBiZSBzcGVjaWZpZWQ6IHRoZSByZXN0IGFyZSB1c2VkIHRvIGRldGVybWluZSBhbW9uZyB0aGUgdmFyaW91cworICAgKiAgaW1wbGVtZW50YXRpb25zLiBOb3RlIHRoYXQsIGFsdGhvdWdoIHRoaXMgY2xhc3MgaXMgYSBmdW5jdGlvbgorICAgKiAgb2JqZWN0LCBpdCBpc24ndCBlbnRpcmVseSBub3JtYWwgYmVjYXVzZSBpdCB0YWtlcyBvbmx5IHR3bworICAgKiAgcGFyYW1ldGVycyByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlCisgICAqICBiaW5kIGV4cHJlc3Npb24uIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIGJvdW5kIGFyZ3VtZW50IGFuZAorICAgKiAgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgYSB0dXBsZSBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gdGhlCisgICAqICByZXN0IG9mIHRoZSBhcmd1bWVudHMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnLAorCSAgIGJvb2wgX0lzQmluZEV4cCA9IGlzX2JpbmRfZXhwcmVzc2lvbjxfQXJnPjo6dmFsdWUsCisJICAgYm9vbCBfSXNQbGFjZWhvbGRlciA9IChpc19wbGFjZWhvbGRlcjxfQXJnPjo6dmFsdWUgPiAwKT4KKyAgICBjbGFzcyBfTXU7CisKKyAgLyoqCisgICAqICBJZiB0aGUgYXJndW1lbnQgaXMgcmVmZXJlbmNlX3dyYXBwZXI8X1RwPiwgcmV0dXJucyB0aGUKKyAgICogIHVuZGVybHlpbmcgcmVmZXJlbmNlLiBbVFIxIDMuNi4zLzUgYnVsbGV0IDFdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX011PHJlZmVyZW5jZV93cmFwcGVyPF9UcD4sIGZhbHNlLCBmYWxzZT4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAmIHJlc3VsdF90eXBlOworCisgICAgICAvKiBOb3RlOiBUaGlzIHdvbid0IGFjdHVhbGx5IHdvcmsgZm9yIGNvbnN0IHZvbGF0aWxlCisgICAgICAgKiByZWZlcmVuY2Vfd3JhcHBlcnMsIGJlY2F1c2UgcmVmZXJlbmNlX3dyYXBwZXI6OmdldCgpIGlzIGNvbnN0CisgICAgICAgKiBidXQgbm90IHZvbGF0aWxlLXF1YWxpZmllZC4gVGhpcyBtaWdodCBiZSBhIGRlZmVjdCBpbiB0aGUgVFIuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVlJlZiwgdHlwZW5hbWUgX1R1cGxlPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfQ1ZSZWYmIF9fYXJnLCBfVHVwbGUmKSBjb25zdCB2b2xhdGlsZQorCXsgcmV0dXJuIF9fYXJnLmdldCgpOyB9CisgICAgfTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyBhIGJpbmQgZXhwcmVzc2lvbiwgd2UgaW52b2tlIHRoZSB1bmRlcmx5aW5nCisgICAqICBmdW5jdGlvbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBjdi1xdWFsaWZpZXJzIGFzIHdlIGFyZSBnaXZlbiBhbmQKKyAgICogIHBhc3MgYWxvbmcgYWxsIG9mIG91ciBhcmd1bWVudHMgKHVud3JhcHBlZCkuIFtUUjEgMy42LjMvNSBidWxsZXQgMl0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgY2xhc3MgX011PF9BcmcsIHRydWUsIGZhbHNlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lLi4uIF9BcmdzPgorCWF1dG8KKwlvcGVyYXRvcigpKF9DVkFyZyYgX19hcmcsCisJCSAgIHR1cGxlPF9BcmdzLi4uPiYgX190dXBsZSkgY29uc3Qgdm9sYXRpbGUKKwktPiBkZWNsdHlwZShfX2FyZyhkZWNsdmFsPF9BcmdzPigpLi4uKSkKKwl7CisJICAvLyBDb25zdHJ1Y3QgYW4gaW5kZXggdHVwbGUgYW5kIGZvcndhcmQgdG8gX19jYWxsCisJICB0eXBlZGVmIHR5cGVuYW1lIF9CdWlsZF9pbmRleF90dXBsZTxzaXplb2YuLi4oX0FyZ3MpPjo6X190eXBlCisJICAgIF9JbmRleGVzOworCSAgcmV0dXJuIHRoaXMtPl9fY2FsbChfX2FyZywgX190dXBsZSwgX0luZGV4ZXMoKSk7CisJfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIEludm9rZXMgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0IF9fYXJnIGJ5IHVucGFja2luZyBhbGwKKyAgICAgIC8vIG9mIHRoZSBhcmd1bWVudHMgaW4gdGhlIHR1cGxlLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWQXJnLCB0eXBlbmFtZS4uLiBfQXJncywgc3RkOjpzaXplX3QuLi4gX0luZGV4ZXM+CisJYXV0bworCV9fY2FsbChfQ1ZBcmcmIF9fYXJnLCB0dXBsZTxfQXJncy4uLj4mIF9fdHVwbGUsCisJICAgICAgIGNvbnN0IF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4mKSBjb25zdCB2b2xhdGlsZQorCS0+IGRlY2x0eXBlKF9fYXJnKGRlY2x2YWw8X0FyZ3M+KCkuLi4pKQorCXsKKwkgIHJldHVybiBfX2FyZyhzdGQ6OmZvcndhcmQ8X0FyZ3M+KGdldDxfSW5kZXhlcz4oX190dXBsZSkpLi4uKTsKKwl9CisgICAgfTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgTnRoIGFyZ3VtZW50LCByZXR1cm5zCisgICAqICBhIHJlZmVyZW5jZSB0byB0aGUgTnRoIGFyZ3VtZW50IHRvIHRoZSBiaW5kIGZ1bmN0aW9uIG9iamVjdC4KKyAgICogIFtUUjEgMy42LjMvNSBidWxsZXQgM10KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgY2xhc3MgX011PF9BcmcsIGZhbHNlLCB0cnVlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPiBjbGFzcyByZXN1bHQ7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk11LCB0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lIF9UdXBsZT4KKwljbGFzcyByZXN1bHQ8X0NWTXUoX0NWQXJnLCBfVHVwbGUpPgorCXsKKwkgIC8vIEFkZCBhIHJlZmVyZW5jZSwgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lIGZvciB1cy4KKwkgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGJlIGEgbGl0dGxlIGJpdCBzbG9wcHkgaW4gY29uc3RydWN0aW5nCisJICAvLyB0aGUgdHVwbGUgdGhhdCB3ZSBwYXNzIHRvIHJlc3VsdF9vZjwuLi4+LgorCSAgdHlwZWRlZiB0eXBlbmFtZSBfU2FmZV90dXBsZV9lbGVtZW50PChpc19wbGFjZWhvbGRlcjxfQXJnPjo6dmFsdWUKKwkJCQkJCS0gMSksIF9UdXBsZT46OnR5cGUKKwkgICAgX19iYXNlX3R5cGU7CisKKwlwdWJsaWM6CisJICB0eXBlZGVmIHR5cGVuYW1lIGFkZF9ydmFsdWVfcmVmZXJlbmNlPF9fYmFzZV90eXBlPjo6dHlwZSB0eXBlOworCX07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UdXBsZT4KKwl0eXBlbmFtZSByZXN1bHQ8X011KF9BcmcsIF9UdXBsZSk+Ojp0eXBlCisJb3BlcmF0b3IoKShjb25zdCB2b2xhdGlsZSBfQXJnJiwgX1R1cGxlJiBfX3R1cGxlKSBjb25zdCB2b2xhdGlsZQorCXsKKwkgIHJldHVybiBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgcmVzdWx0PF9NdShfQXJnLCBfVHVwbGUpPjo6dHlwZT4oCisJICAgICAgOjpzdGQ6OmdldDwoaXNfcGxhY2Vob2xkZXI8X0FyZz46OnZhbHVlIC0gMSk+KF9fdHVwbGUpKTsKKwl9CisgICAgfTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyBqdXN0IGEgdmFsdWUsIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhhdAorICAgKiAgdmFsdWUuIFRoZSBjdi1xdWFsaWZpZXJzIG9uIHRoZSByZWZlcmVuY2UgYXJlIHRoZSBzYW1lIGFzIHRoZQorICAgKiAgY3YtcXVhbGlmaWVycyBvbiB0aGUgX011IG9iamVjdC4gW1RSMSAzLjYuMy81IGJ1bGxldCA0XQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBfTXU8X0FyZywgZmFsc2UsIGZhbHNlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPiBzdHJ1Y3QgcmVzdWx0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ1ZNdSwgdHlwZW5hbWUgX0NWQXJnLCB0eXBlbmFtZSBfVHVwbGU+CisJc3RydWN0IHJlc3VsdDxfQ1ZNdShfQ1ZBcmcsIF9UdXBsZSk+CisJeworCSAgdHlwZWRlZiB0eXBlbmFtZSBhZGRfbHZhbHVlX3JlZmVyZW5jZTxfQ1ZBcmc+Ojp0eXBlIHR5cGU7CisJfTsKKworICAgICAgLy8gUGljayB1cCB0aGUgY3YtcXVhbGlmaWVycyBvZiB0aGUgYXJndW1lbnQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUgX1R1cGxlPgorCV9DVkFyZyYmCisJb3BlcmF0b3IoKShfQ1ZBcmcmJiBfX2FyZywgX1R1cGxlJikgY29uc3Qgdm9sYXRpbGUKKwl7IHJldHVybiBzdGQ6OmZvcndhcmQ8X0NWQXJnPihfX2FyZyk7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgTWFwcyBtZW1iZXIgcG9pbnRlcnMgaW50byBpbnN0YW5jZXMgb2YgX01lbV9mbiBidXQgbGVhdmVzIGFsbAorICAgKiAgb3RoZXIgZnVuY3Rpb24gb2JqZWN0cyB1bnRvdWNoZWQuIFVzZWQgYnkgdHIxOjpiaW5kKCkuIFRoZQorICAgKiAgcHJpbWFyeSB0ZW1wbGF0ZSBoYW5kbGVzIHRoZSBub24tLW1lbWJlci1wb2ludGVyIGNhc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9NYXliZV93cmFwX21lbWJlcl9wb2ludGVyCisgICAgeworICAgICAgdHlwZWRlZiBfVHAgdHlwZTsKKworICAgICAgc3RhdGljIGNvbnN0IF9UcCYKKyAgICAgIF9fZG9fd3JhcChjb25zdCBfVHAmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9feDsgfQorCisgICAgICBzdGF0aWMgX1RwJiYKKyAgICAgIF9fZG9fd3JhcChfVHAmJiBfX3gpCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHAmJj4oX194KTsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBNYXBzIG1lbWJlciBwb2ludGVycyBpbnRvIGluc3RhbmNlcyBvZiBfTWVtX2ZuIGJ1dCBsZWF2ZXMgYWxsCisgICAqICBvdGhlciBmdW5jdGlvbiBvYmplY3RzIHVudG91Y2hlZC4gVXNlZCBieSB0cjE6OmJpbmQoKS4gVGhpcworICAgKiAgcGFydGlhbCBzcGVjaWFsaXphdGlvbiBoYW5kbGVzIHRoZSBtZW1iZXIgcG9pbnRlciBjYXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2xhc3M+CisgICAgc3RydWN0IF9NYXliZV93cmFwX21lbWJlcl9wb2ludGVyPF9UcCBfQ2xhc3M6Oio+CisgICAgeworICAgICAgdHlwZWRlZiBfTWVtX2ZuPF9UcCBfQ2xhc3M6Oio+IHR5cGU7CisKKyAgICAgIHN0YXRpYyB0eXBlCisgICAgICBfX2RvX3dyYXAoX1RwIF9DbGFzczo6KiBfX3BtKQorICAgICAgeyByZXR1cm4gdHlwZShfX3BtKTsgfQorICAgIH07CisKKyAgLy8gU3BlY2lhbGl6YXRpb24gbmVlZGVkIHRvIHByZXZlbnQgImZvcm1pbmcgcmVmZXJlbmNlIHRvIHZvaWQiIGVycm9ycyB3aGVuCisgIC8vIGJpbmQ8dm9pZD4oKSBpcyBjYWxsZWQsIGJlY2F1c2UgYXJndW1lbnQgZGVkdWN0aW9uIGluc3RhbnRpYXRlcworICAvLyBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjx2b2lkPiBvdXRzaWRlIHRoZSBpbW1lZGlhdGUgY29udGV4dCB3aGVyZQorICAvLyBTRklOQUUgYXBwbGllcy4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjx2b2lkPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdm9pZCB0eXBlOworICAgIH07CisKKyAgLy8gc3RkOjpnZXQ8ST4gZm9yIHZvbGF0aWxlLXF1YWxpZmllZCB0dXBsZXMKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0luZCwgdHlwZW5hbWUuLi4gX1RwPgorICAgIGlubGluZSBhdXRvCisgICAgX192b2xnZXQodm9sYXRpbGUgdHVwbGU8X1RwLi4uPiYgX190dXBsZSkKKyAgICAtPiB0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9JbmQsIHR1cGxlPF9UcC4uLj4+Ojp0eXBlIHZvbGF0aWxlJgorICAgIHsgcmV0dXJuIHN0ZDo6Z2V0PF9JbmQ+KGNvbnN0X2Nhc3Q8dHVwbGU8X1RwLi4uPiY+KF9fdHVwbGUpKTsgfQorCisgIC8vIHN0ZDo6Z2V0PEk+IGZvciBjb25zdC12b2xhdGlsZS1xdWFsaWZpZWQgdHVwbGVzCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbmQsIHR5cGVuYW1lLi4uIF9UcD4KKyAgICBpbmxpbmUgYXV0bworICAgIF9fdm9sZ2V0KGNvbnN0IHZvbGF0aWxlIHR1cGxlPF9UcC4uLj4mIF9fdHVwbGUpCisgICAgLT4gdHlwZW5hbWUgdHVwbGVfZWxlbWVudDxfSW5kLCB0dXBsZTxfVHAuLi4+Pjo6dHlwZSBjb25zdCB2b2xhdGlsZSYKKyAgICB7IHJldHVybiBzdGQ6OmdldDxfSW5kPihjb25zdF9jYXN0PGNvbnN0IHR1cGxlPF9UcC4uLj4mPihfX3R1cGxlKSk7IH0KKworICAvLy8gVHlwZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0IHJldHVybmVkIGZyb20gYmluZCgpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBfQmluZDsKKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9Cb3VuZF9hcmdzPgorICAgIGNsYXNzIF9CaW5kPF9GdW5jdG9yKF9Cb3VuZF9hcmdzLi4uKT4KKyAgICA6IHB1YmxpYyBfV2Vha19yZXN1bHRfdHlwZTxfRnVuY3Rvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5kIF9fc2VsZl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQnVpbGRfaW5kZXhfdHVwbGU8c2l6ZW9mLi4uKF9Cb3VuZF9hcmdzKT46Ol9fdHlwZQorCV9Cb3VuZF9pbmRleGVzOworCisgICAgICBfRnVuY3RvciBfTV9mOworICAgICAgdHVwbGU8X0JvdW5kX2FyZ3MuLi4+IF9NX2JvdW5kX2FyZ3M7CisKKyAgICAgIC8vIENhbGwgdW5xdWFsaWZpZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lLi4uIF9BcmdzLCBzdGQ6OnNpemVfdC4uLiBfSW5kZXhlcz4KKwlfUmVzdWx0CisJX19jYWxsKHR1cGxlPF9BcmdzLi4uPiYmIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikKKwl7CisJICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKwkJICAgICAgKGdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworCX0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUuLi4gX0FyZ3MsIHN0ZDo6c2l6ZV90Li4uIF9JbmRleGVzPgorCV9SZXN1bHQKKwlfX2NhbGxfYyh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4pIGNvbnN0CisJeworCSAgcmV0dXJuIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisJCSAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgIC8vIENhbGwgYXMgdm9sYXRpbGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lLi4uIF9BcmdzLCBzdGQ6OnNpemVfdC4uLiBfSW5kZXhlcz4KKwlfUmVzdWx0CisJX19jYWxsX3YodHVwbGU8X0FyZ3MuLi4+JiYgX19hcmdzLAorCQkgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikgdm9sYXRpbGUKKwl7CisJICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKwkJICAgICAgKF9fdm9sZ2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgX19hcmdzKS4uLik7CisJfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0IHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZS4uLiBfQXJncywgc3RkOjpzaXplX3QuLi4gX0luZGV4ZXM+CisJX1Jlc3VsdAorCV9fY2FsbF9jX3YodHVwbGU8X0FyZ3MuLi4+JiYgX19hcmdzLAorCQkgICBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+KSBjb25zdCB2b2xhdGlsZQorCXsKKwkgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorCQkgICAgICAoX192b2xnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgcHVibGljOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJZXhwbGljaXQgX0JpbmQoY29uc3QgX0Z1bmN0b3ImIF9fZiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfTV9mKF9fZiksIF9NX2JvdW5kX2FyZ3Moc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKQorCXsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlleHBsaWNpdCBfQmluZChfRnVuY3RvciYmIF9fZiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJOiBfTV9mKHN0ZDo6bW92ZShfX2YpKSwgX01fYm91bmRfYXJncyhzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pCisJeyB9CisKKyAgICAgIF9CaW5kKGNvbnN0IF9CaW5kJikgPSBkZWZhdWx0OworCisgICAgICBfQmluZChfQmluZCYmIF9fYikKKyAgICAgIDogX01fZihzdGQ6Om1vdmUoX19iLl9NX2YpKSwgX01fYm91bmRfYXJncyhzdGQ6Om1vdmUoX19iLl9NX2JvdW5kX2FyZ3MpKQorICAgICAgeyB9CisKKyAgICAgIC8vIENhbGwgdW5xdWFsaWZpZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCB0eXBlbmFtZSBfUmVzdWx0CisJPSBkZWNsdHlwZSggc3RkOjpkZWNsdmFsPF9GdW5jdG9yPigpKAorCSAgICAgIF9NdTxfQm91bmRfYXJncz4oKSggc3RkOjpkZWNsdmFsPF9Cb3VuZF9hcmdzJj4oKSwKKwkJCQkgIHN0ZDo6ZGVjbHZhbDx0dXBsZTxfQXJncy4uLj4mPigpICkuLi4gKSApPgorCV9SZXN1bHQKKwlvcGVyYXRvcigpKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHJldHVybiB0aGlzLT5fX2NhbGw8X1Jlc3VsdD4oCisJICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisJICAgICAgX0JvdW5kX2luZGV4ZXMoKSk7CisJfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1Jlc3VsdAorCT0gZGVjbHR5cGUoIHN0ZDo6ZGVjbHZhbDx0eXBlbmFtZSBlbmFibGVfaWY8KHNpemVvZi4uLihfQXJncykgPj0gMCksCisJCSAgICAgICB0eXBlbmFtZSBhZGRfY29uc3Q8X0Z1bmN0b3I+Ojp0eXBlPjo6dHlwZT4oKSgKKwkgICAgICBfTXU8X0JvdW5kX2FyZ3M+KCkoIHN0ZDo6ZGVjbHZhbDxjb25zdCBfQm91bmRfYXJncyY+KCksCisJCQkJICBzdGQ6OmRlY2x2YWw8dHVwbGU8X0FyZ3MuLi4+Jj4oKSApLi4uICkgKT4KKwlfUmVzdWx0CisJb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgY29uc3QKKwl7CisJICByZXR1cm4gdGhpcy0+X19jYWxsX2M8X1Jlc3VsdD4oCisJICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisJICAgICAgX0JvdW5kX2luZGV4ZXMoKSk7CisJfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgdHlwZW5hbWUgX1Jlc3VsdAorCT0gZGVjbHR5cGUoIHN0ZDo6ZGVjbHZhbDx0eXBlbmFtZSBlbmFibGVfaWY8KHNpemVvZi4uLihfQXJncykgPj0gMCksCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGFkZF92b2xhdGlsZTxfRnVuY3Rvcj46OnR5cGU+Ojp0eXBlPigpKAorCSAgICAgIF9NdTxfQm91bmRfYXJncz4oKSggc3RkOjpkZWNsdmFsPHZvbGF0aWxlIF9Cb3VuZF9hcmdzJj4oKSwKKwkJCQkgIHN0ZDo6ZGVjbHZhbDx0dXBsZTxfQXJncy4uLj4mPigpICkuLi4gKSApPgorCV9SZXN1bHQKKwlvcGVyYXRvcigpKF9BcmdzJiYuLi4gX19hcmdzKSB2b2xhdGlsZQorCXsKKwkgIHJldHVybiB0aGlzLT5fX2NhbGxfdjxfUmVzdWx0PigKKwkgICAgICBzdGQ6OmZvcndhcmRfYXNfdHVwbGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKKwkgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKwl9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3Qgdm9sYXRpbGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCB0eXBlbmFtZSBfUmVzdWx0CisJPSBkZWNsdHlwZSggc3RkOjpkZWNsdmFsPHR5cGVuYW1lIGVuYWJsZV9pZjwoc2l6ZW9mLi4uKF9BcmdzKSA+PSAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgYWRkX2N2PF9GdW5jdG9yPjo6dHlwZT46OnR5cGU+KCkoCisJICAgICAgX011PF9Cb3VuZF9hcmdzPigpKCBzdGQ6OmRlY2x2YWw8Y29uc3Qgdm9sYXRpbGUgX0JvdW5kX2FyZ3MmPigpLAorCQkJCSAgc3RkOjpkZWNsdmFsPHR1cGxlPF9BcmdzLi4uPiY+KCkgKS4uLiApICk+CisJX1Jlc3VsdAorCW9wZXJhdG9yKCkoX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0IHZvbGF0aWxlCisJeworCSAgcmV0dXJuIHRoaXMtPl9fY2FsbF9jX3Y8X1Jlc3VsdD4oCisJICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisJICAgICAgX0JvdW5kX2luZGV4ZXMoKSk7CisJfQorICAgIH07CisKKyAgLy8vIFR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdCByZXR1cm5lZCBmcm9tIGJpbmQ8Uj4oKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgX0JpbmRfcmVzdWx0OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQm91bmRfYXJncz4KKyAgICBjbGFzcyBfQmluZF9yZXN1bHQ8X1Jlc3VsdCwgX0Z1bmN0b3IoX0JvdW5kX2FyZ3MuLi4pPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0JpbmRfcmVzdWx0IF9fc2VsZl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQnVpbGRfaW5kZXhfdHVwbGU8c2l6ZW9mLi4uKF9Cb3VuZF9hcmdzKT46Ol9fdHlwZQorCV9Cb3VuZF9pbmRleGVzOworCisgICAgICBfRnVuY3RvciBfTV9mOworICAgICAgdHVwbGU8X0JvdW5kX2FyZ3MuLi4+IF9NX2JvdW5kX2FyZ3M7CisKKyAgICAgIC8vIHNmaW5hZSB0eXBlcworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKwlzdHJ1Y3QgX19lbmFibGVfaWZfdm9pZCA6IGVuYWJsZV9pZjxpc192b2lkPF9SZXM+Ojp2YWx1ZSwgaW50PiB7IH07CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorCXN0cnVjdCBfX2Rpc2FibGVfaWZfdm9pZCA6IGVuYWJsZV9pZjwhaXNfdm9pZDxfUmVzPjo6dmFsdWUsIGludD4geyB9OworCisgICAgICAvLyBDYWxsIHVucXVhbGlmaWVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncywgc3RkOjpzaXplX3QuLi4gX0luZGV4ZXM+CisJX1Jlc3VsdAorCV9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisJICAgIHR5cGVuYW1lIF9fZGlzYWJsZV9pZl92b2lkPF9SZXM+Ojp0eXBlID0gMCkKKwl7CisJICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKwkJICAgICAgKGdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworCX0KKworICAgICAgLy8gQ2FsbCB1bnF1YWxpZmllZCwgcmV0dXJuIHZvaWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzLCBzdGQ6OnNpemVfdC4uLiBfSW5kZXhlcz4KKwl2b2lkCisJX19jYWxsKHR1cGxlPF9BcmdzLi4uPiYmIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPiwKKwkgICAgdHlwZW5hbWUgX19lbmFibGVfaWZfdm9pZDxfUmVzPjo6dHlwZSA9IDApCisJeworCSAgX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKwkgICAgICAgKGdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworCX0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ3MsIHN0ZDo6c2l6ZV90Li4uIF9JbmRleGVzPgorCV9SZXN1bHQKKwlfX2NhbGwodHVwbGU8X0FyZ3MuLi4+JiYgX19hcmdzLCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+LAorCSAgICB0eXBlbmFtZSBfX2Rpc2FibGVfaWZfdm9pZDxfUmVzPjo6dHlwZSA9IDApIGNvbnN0CisJeworCSAgcmV0dXJuIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisJCSAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3QsIHJldHVybiB2b2lkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncywgc3RkOjpzaXplX3QuLi4gX0luZGV4ZXM+CisJdm9pZAorCV9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisJICAgIHR5cGVuYW1lIF9fZW5hYmxlX2lmX3ZvaWQ8X1Jlcz46OnR5cGUgPSAwKSBjb25zdAorCXsKKwkgIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisJICAgICAgIChnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCAgX19hcmdzKS4uLik7CisJfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncywgc3RkOjpzaXplX3QuLi4gX0luZGV4ZXM+CisJX1Jlc3VsdAorCV9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisJICAgIHR5cGVuYW1lIF9fZGlzYWJsZV9pZl92b2lkPF9SZXM+Ojp0eXBlID0gMCkgdm9sYXRpbGUKKwl7CisJICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKwkJICAgICAgKF9fdm9sZ2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgX19hcmdzKS4uLik7CisJfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlLCByZXR1cm4gdm9pZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ3MsIHN0ZDo6c2l6ZV90Li4uIF9JbmRleGVzPgorCXZvaWQKKwlfX2NhbGwodHVwbGU8X0FyZ3MuLi4+JiYgX19hcmdzLCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+LAorCSAgICB0eXBlbmFtZSBfX2VuYWJsZV9pZl92b2lkPF9SZXM+Ojp0eXBlID0gMCkgdm9sYXRpbGUKKwl7CisJICBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorCSAgICAgICAoX192b2xnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3Qgdm9sYXRpbGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzLCBzdGQ6OnNpemVfdC4uLiBfSW5kZXhlcz4KKwlfUmVzdWx0CisJX19jYWxsKHR1cGxlPF9BcmdzLi4uPiYmIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPiwKKwkgICAgdHlwZW5hbWUgX19kaXNhYmxlX2lmX3ZvaWQ8X1Jlcz46OnR5cGUgPSAwKSBjb25zdCB2b2xhdGlsZQorCXsKKwkgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorCQkgICAgICAoX192b2xnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3Qgdm9sYXRpbGUsIHJldHVybiB2b2lkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncywgc3RkOjpzaXplX3QuLi4gX0luZGV4ZXM+CisJdm9pZAorCV9fY2FsbCh0dXBsZTxfQXJncy4uLj4mJiBfX2FyZ3MsCisJICAgICAgIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4sCisJICAgIHR5cGVuYW1lIF9fZW5hYmxlX2lmX3ZvaWQ8X1Jlcz46OnR5cGUgPSAwKSBjb25zdCB2b2xhdGlsZQorCXsKKwkgIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisJICAgICAgIChfX3ZvbGdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworCX0KKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJZXhwbGljaXQgX0JpbmRfcmVzdWx0KGNvbnN0IF9GdW5jdG9yJiBfX2YsIF9BcmdzJiYuLi4gX19hcmdzKQorCTogX01fZihfX2YpLCBfTV9ib3VuZF9hcmdzKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikKKwl7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJZXhwbGljaXQgX0JpbmRfcmVzdWx0KF9GdW5jdG9yJiYgX19mLCBfQXJncyYmLi4uIF9fYXJncykKKwk6IF9NX2Yoc3RkOjptb3ZlKF9fZikpLCBfTV9ib3VuZF9hcmdzKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikKKwl7IH0KKworICAgICAgX0JpbmRfcmVzdWx0KGNvbnN0IF9CaW5kX3Jlc3VsdCYpID0gZGVmYXVsdDsKKworICAgICAgX0JpbmRfcmVzdWx0KF9CaW5kX3Jlc3VsdCYmIF9fYikKKyAgICAgIDogX01fZihzdGQ6Om1vdmUoX19iLl9NX2YpKSwgX01fYm91bmRfYXJncyhzdGQ6Om1vdmUoX19iLl9NX2JvdW5kX2FyZ3MpKQorICAgICAgeyB9CisKKyAgICAgIC8vIENhbGwgdW5xdWFsaWZpZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICByZXR1cm4gdGhpcy0+X19jYWxsPF9SZXN1bHQ+KAorCSAgICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorCSAgICAgIF9Cb3VuZF9pbmRleGVzKCkpOworCX0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKF9BcmdzJiYuLi4gX19hcmdzKSBjb25zdAorCXsKKwkgIHJldHVybiB0aGlzLT5fX2NhbGw8X1Jlc3VsdD4oCisJICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCisJICAgICAgX0JvdW5kX2luZGV4ZXMoKSk7CisJfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoX0FyZ3MmJi4uLiBfX2FyZ3MpIHZvbGF0aWxlCisJeworCSAgcmV0dXJuIHRoaXMtPl9fY2FsbDxfUmVzdWx0PigKKwkgICAgICBzdGQ6OmZvcndhcmRfYXNfdHVwbGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKKwkgICAgICBfQm91bmRfaW5kZXhlcygpKTsKKwl9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3Qgdm9sYXRpbGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCXJlc3VsdF90eXBlCisJb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgY29uc3Qgdm9sYXRpbGUKKwl7CisJICByZXR1cm4gdGhpcy0+X19jYWxsPF9SZXN1bHQ+KAorCSAgICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorCSAgICAgIF9Cb3VuZF9pbmRleGVzKCkpOworCX0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIENsYXNzIHRlbXBsYXRlIF9CaW5kIGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgICogIEBpbmdyb3VwIGJpbmRlcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxfQmluZDxfU2lnbmF0dXJlPiA+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvKioKKyAgICogIEBicmllZiBDbGFzcyB0ZW1wbGF0ZSBfQmluZCBpcyBhbHdheXMgYSBiaW5kIGV4cHJlc3Npb24uCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248Y29uc3QgX0JpbmQ8X1NpZ25hdHVyZT4gPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ2xhc3MgdGVtcGxhdGUgX0JpbmQgaXMgYWx3YXlzIGEgYmluZCBleHByZXNzaW9uLgorICAgKiAgQGluZ3JvdXAgYmluZGVycworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPHZvbGF0aWxlIF9CaW5kPF9TaWduYXR1cmU+ID4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIENsYXNzIHRlbXBsYXRlIF9CaW5kIGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgICogIEBpbmdyb3VwIGJpbmRlcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxjb25zdCB2b2xhdGlsZSBfQmluZDxfU2lnbmF0dXJlPj4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIENsYXNzIHRlbXBsYXRlIF9CaW5kX3Jlc3VsdCBpcyBhbHdheXMgYSBiaW5kIGV4cHJlc3Npb24uCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248X0JpbmRfcmVzdWx0PF9SZXN1bHQsIF9TaWduYXR1cmU+PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ2xhc3MgdGVtcGxhdGUgX0JpbmRfcmVzdWx0IGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgICogIEBpbmdyb3VwIGJpbmRlcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxjb25zdCBfQmluZF9yZXN1bHQ8X1Jlc3VsdCwgX1NpZ25hdHVyZT4+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvKioKKyAgICogIEBicmllZiBDbGFzcyB0ZW1wbGF0ZSBfQmluZF9yZXN1bHQgaXMgYWx3YXlzIGEgYmluZCBleHByZXNzaW9uLgorICAgKiAgQGluZ3JvdXAgYmluZGVycworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPHZvbGF0aWxlIF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPj4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIENsYXNzIHRlbXBsYXRlIF9CaW5kX3Jlc3VsdCBpcyBhbHdheXMgYSBiaW5kIGV4cHJlc3Npb24uCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248Y29uc3Qgdm9sYXRpbGUgX0JpbmRfcmVzdWx0PF9SZXN1bHQsIF9TaWduYXR1cmU+PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLy8gVHJhaXQgdHlwZSB1c2VkIHRvIHJlbW92ZSBzdGQ6OmJpbmQoKSBmcm9tIG92ZXJsb2FkIHNldCB2aWEgU0ZJTkFFCisgIC8vIHdoZW4gZmlyc3QgYXJndW1lbnQgaGFzIGludGVnZXIgdHlwZSwgc28gdGhhdCBzdGQ6OmJpbmQoKSB3aWxsCisgIC8vIG5vdCBiZSBhIGJldHRlciBtYXRjaCB0aGFuIDo6YmluZCgpIGZyb20gdGhlIEJTRCBTb2NrZXRzIEFQSS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAyID0gdHlwZW5hbWUgZGVjYXk8X1RwPjo6dHlwZT4KKyAgICB1c2luZyBfX2lzX3NvY2tldGxpa2UgPSBfX29yXzxpc19pbnRlZ3JhbDxfVHAyPiwgaXNfZW51bTxfVHAyPj47CisKKyAgdGVtcGxhdGU8Ym9vbCBfU29ja2V0TGlrZSwgdHlwZW5hbWUgX0Z1bmMsIHR5cGVuYW1lLi4uIF9Cb3VuZEFyZ3M+CisgICAgc3RydWN0IF9CaW5kX2hlbHBlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXI8dHlwZW5hbWUgZGVjYXk8X0Z1bmM+Ojp0eXBlPgorCV9fbWF5YmVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19tYXliZV90eXBlOjp0eXBlIF9fZnVuY190eXBlOworICAgICAgdHlwZWRlZiBfQmluZDxfX2Z1bmNfdHlwZSh0eXBlbmFtZSBkZWNheTxfQm91bmRBcmdzPjo6dHlwZS4uLik+IHR5cGU7CisgICAgfTsKKworICAvLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBpc19zb2NrZXRsaWtlID09IHRydWUsIGRvZXMgbm90IGRlZmluZQorICAvLyBuZXN0ZWQgdHlwZSBzbyBzdGQ6OmJpbmQoKSB3aWxsIG5vdCBwYXJ0aWNpcGF0ZSBpbiBvdmVybG9hZCByZXNvbHV0aW9uCisgIC8vIHdoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG1pZ2h0IGJlIGEgc29ja2V0IGZpbGUgZGVzY3JpcHRvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmMsIHR5cGVuYW1lLi4uIF9Cb3VuZEFyZ3M+CisgICAgc3RydWN0IF9CaW5kX2hlbHBlcjx0cnVlLCBfRnVuYywgX0JvdW5kQXJncy4uLj4KKyAgICB7IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgRnVuY3Rpb24gdGVtcGxhdGUgZm9yIHN0ZDo6YmluZC4KKyAgICogIEBpbmdyb3VwIGJpbmRlcnMKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jLCB0eXBlbmFtZS4uLiBfQm91bmRBcmdzPgorICAgIGlubGluZSB0eXBlbmFtZQorICAgIF9CaW5kX2hlbHBlcjxfX2lzX3NvY2tldGxpa2U8X0Z1bmM+Ojp2YWx1ZSwgX0Z1bmMsIF9Cb3VuZEFyZ3MuLi4+Ojp0eXBlCisgICAgYmluZChfRnVuYyYmIF9fZiwgX0JvdW5kQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5kX2hlbHBlcjxmYWxzZSwgX0Z1bmMsIF9Cb3VuZEFyZ3MuLi4+IF9faGVscGVyX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faGVscGVyX3R5cGU6Ol9fbWF5YmVfdHlwZSBfX21heWJlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faGVscGVyX3R5cGU6OnR5cGUgX19yZXN1bHRfdHlwZTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF90eXBlKF9fbWF5YmVfdHlwZTo6X19kb193cmFwKHN0ZDo6Zm9yd2FyZDxfRnVuYz4oX19mKSksCisJCQkgICBzdGQ6OmZvcndhcmQ8X0JvdW5kQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9GdW5jLCB0eXBlbmFtZS4uLiBfQm91bmRBcmdzPgorICAgIHN0cnVjdCBfQmluZHJlc19oZWxwZXIKKyAgICB7CisgICAgICB0eXBlZGVmIF9NYXliZV93cmFwX21lbWJlcl9wb2ludGVyPHR5cGVuYW1lIGRlY2F5PF9GdW5jPjo6dHlwZT4KKwlfX21heWJlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fbWF5YmVfdHlwZTo6dHlwZSBfX2Z1bmN0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0JpbmRfcmVzdWx0PF9SZXN1bHQsCisJCQkgICBfX2Z1bmN0b3JfdHlwZSh0eXBlbmFtZSBkZWNheTxfQm91bmRBcmdzPjo6dHlwZS4uLik+CisJdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIEZ1bmN0aW9uIHRlbXBsYXRlIGZvciBzdGQ6OmJpbmQ8Uj4uCisgICAqICBAaW5ncm91cCBiaW5kZXJzCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfRnVuYywgdHlwZW5hbWUuLi4gX0JvdW5kQXJncz4KKyAgICBpbmxpbmUKKyAgICB0eXBlbmFtZSBfQmluZHJlc19oZWxwZXI8X1Jlc3VsdCwgX0Z1bmMsIF9Cb3VuZEFyZ3MuLi4+Ojp0eXBlCisgICAgYmluZChfRnVuYyYmIF9fZiwgX0JvdW5kQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5kcmVzX2hlbHBlcjxfUmVzdWx0LCBfRnVuYywgX0JvdW5kQXJncy4uLj4gX19oZWxwZXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19oZWxwZXJfdHlwZTo6X19tYXliZV90eXBlIF9fbWF5YmVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19oZWxwZXJfdHlwZTo6dHlwZSBfX3Jlc3VsdF90eXBlOworICAgICAgcmV0dXJuIF9fcmVzdWx0X3R5cGUoX19tYXliZV90eXBlOjpfX2RvX3dyYXAoc3RkOjpmb3J3YXJkPF9GdW5jPihfX2YpKSwKKwkJCSAgIHN0ZDo6Zm9yd2FyZDxfQm91bmRBcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgX0JpbmRfc2ltcGxlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DYWxsYWJsZSwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9CaW5kX3NpbXBsZTxfQ2FsbGFibGUoX0FyZ3MuLi4pPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzdWx0X29mPF9DYWxsYWJsZShfQXJncy4uLik+Ojp0eXBlIHJlc3VsdF90eXBlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJnczIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgICAgICAgIGVuYWJsZV9pZjwgc2l6ZW9mLi4uKF9BcmdzKSA9PSBzaXplb2YuLi4oX0FyZ3MyKT46OnR5cGU+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIF9CaW5kX3NpbXBsZShjb25zdCBfQ2FsbGFibGUmIF9fY2FsbGFibGUsIF9BcmdzMiYmLi4uIF9fYXJncykKKyAgICAgICAgOiBfTV9ib3VuZChfX2NhbGxhYmxlLCBzdGQ6OmZvcndhcmQ8X0FyZ3MyPihfX2FyZ3MpLi4uKQorICAgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgICAgICAgICBlbmFibGVfaWY8IHNpemVvZi4uLihfQXJncykgPT0gc2l6ZW9mLi4uKF9BcmdzMik+Ojp0eXBlPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBfQmluZF9zaW1wbGUoX0NhbGxhYmxlJiYgX19jYWxsYWJsZSwgX0FyZ3MyJiYuLi4gX19hcmdzKQorICAgICAgICA6IF9NX2JvdW5kKHN0ZDo6bW92ZShfX2NhbGxhYmxlKSwgc3RkOjpmb3J3YXJkPF9BcmdzMj4oX19hcmdzKS4uLikKKyAgICAgICAgeyB9CisKKyAgICAgIF9CaW5kX3NpbXBsZShjb25zdCBfQmluZF9zaW1wbGUmKSA9IGRlZmF1bHQ7CisgICAgICBfQmluZF9zaW1wbGUoX0JpbmRfc2ltcGxlJiYpID0gZGVmYXVsdDsKKworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoKQorICAgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CdWlsZF9pbmRleF90dXBsZTxzaXplb2YuLi4oX0FyZ3MpPjo6X190eXBlIF9JbmRpY2VzOworICAgICAgICByZXR1cm4gX01faW52b2tlKF9JbmRpY2VzKCkpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKworICAgICAgdGVtcGxhdGU8c3RkOjpzaXplX3QuLi4gX0luZGljZXM+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfQ2FsbGFibGUoX0FyZ3MuLi4pPjo6dHlwZQorICAgICAgICBfTV9pbnZva2UoX0luZGV4X3R1cGxlPF9JbmRpY2VzLi4uPikKKyAgICAgICAgeworCSAgLy8gc3RkOjpiaW5kIGFsd2F5cyBmb3J3YXJkcyBib3VuZCBhcmd1bWVudHMgYXMgbHZhbHVlcywKKwkgIC8vIGJ1dCB0aGlzIHR5cGUgY2FuIGNhbGwgZnVuY3Rpb25zIHdoaWNoIG9ubHkgYWNjZXB0IHJ2YWx1ZXMuCisgICAgICAgICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxfQ2FsbGFibGU+KHN0ZDo6Z2V0PDA+KF9NX2JvdW5kKSkoCisgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oc3RkOjpnZXQ8X0luZGljZXMrMT4oX01fYm91bmQpKS4uLik7CisgICAgICAgIH0KKworICAgICAgc3RkOjp0dXBsZTxfQ2FsbGFibGUsIF9BcmdzLi4uPiBfTV9ib3VuZDsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jLCB0eXBlbmFtZS4uLiBfQm91bmRBcmdzPgorICAgIHN0cnVjdCBfQmluZF9zaW1wbGVfaGVscGVyCisgICAgeworICAgICAgdHlwZWRlZiBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjx0eXBlbmFtZSBkZWNheTxfRnVuYz46OnR5cGU+CisgICAgICAgIF9fbWF5YmVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19tYXliZV90eXBlOjp0eXBlIF9fZnVuY190eXBlOworICAgICAgdHlwZWRlZiBfQmluZF9zaW1wbGU8X19mdW5jX3R5cGUodHlwZW5hbWUgZGVjYXk8X0JvdW5kQXJncz46OnR5cGUuLi4pPgorICAgICAgIAlfX3R5cGU7CisgICAgfTsKKworICAvLyBTaW1wbGlmaWVkIHZlcnNpb24gb2Ygc3RkOjpiaW5kIGZvciBpbnRlcm5hbCB1c2UsIHdpdGhvdXQgc3VwcG9ydCBmb3IKKyAgLy8gdW5ib3VuZCBhcmd1bWVudHMsIHBsYWNlaG9sZGVycyBvciBuZXN0ZWQgYmluZCBleHByZXNzaW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICB0eXBlbmFtZSBfQmluZF9zaW1wbGVfaGVscGVyPF9DYWxsYWJsZSwgX0FyZ3MuLi4+OjpfX3R5cGUKKyAgICBfX2JpbmRfc2ltcGxlKF9DYWxsYWJsZSYmIF9fY2FsbGFibGUsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX0JpbmRfc2ltcGxlX2hlbHBlcjxfQ2FsbGFibGUsIF9BcmdzLi4uPiBfX2hlbHBlcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2hlbHBlcl90eXBlOjpfX21heWJlX3R5cGUgX19tYXliZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2hlbHBlcl90eXBlOjpfX3R5cGUgX19yZXN1bHRfdHlwZTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF90eXBlKAorICAgICAgICAgIF9fbWF5YmVfdHlwZTo6X19kb193cmFwKCBzdGQ6OmZvcndhcmQ8X0NhbGxhYmxlPihfX2NhbGxhYmxlKSksCisgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRXhjZXB0aW9uIGNsYXNzIHRocm93biB3aGVuIGNsYXNzIHRlbXBsYXRlIGZ1bmN0aW9uJ3MKKyAgICogIG9wZXJhdG9yKCkgaXMgY2FsbGVkIHdpdGggYW4gZW1wdHkgdGFyZ2V0LgorICAgKiAgQGluZ3JvdXAgZXhjZXB0aW9ucworICAgKi8KKyAgY2xhc3MgYmFkX2Z1bmN0aW9uX2NhbGwgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24KKyAgeworICBwdWJsaWM6CisgICAgdmlydHVhbCB+YmFkX2Z1bmN0aW9uX2NhbGwoKSBub2V4Y2VwdDsKKworICAgIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCBub2V4Y2VwdDsKKyAgfTsKKworICAvKioKKyAgICogIFRyYWl0IGlkZW50aWZ5aW5nICJsb2NhdGlvbi1pbnZhcmlhbnQiIHR5cGVzLCBtZWFuaW5nIHRoYXQgdGhlCisgICAqICBhZGRyZXNzIG9mIHRoZSBvYmplY3QgKG9yIGFueSBvZiBpdHMgbWVtYmVycykgd2lsbCBub3QgZXNjYXBlLgorICAgKiAgQWxzbyBpbXBsaWVzIGEgdHJpdmlhbCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2xvY2F0aW9uX2ludmFyaWFudAorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKGlzX3BvaW50ZXI8X1RwPjo6dmFsdWUKKwkJCSAgICAgICB8fCBpc19tZW1iZXJfcG9pbnRlcjxfVHA+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIGNsYXNzIF9VbmRlZmluZWRfY2xhc3M7CisKKyAgdW5pb24gX05vY29weV90eXBlcworICB7CisgICAgdm9pZCogICAgICAgX01fb2JqZWN0OworICAgIGNvbnN0IHZvaWQqIF9NX2NvbnN0X29iamVjdDsKKyAgICB2b2lkICgqX01fZnVuY3Rpb25fcG9pbnRlcikoKTsKKyAgICB2b2lkIChfVW5kZWZpbmVkX2NsYXNzOjoqX01fbWVtYmVyX3BvaW50ZXIpKCk7CisgIH07CisKKyAgdW5pb24gX0FueV9kYXRhCisgIHsKKyAgICB2b2lkKiAgICAgICBfTV9hY2Nlc3MoKSAgICAgICB7IHJldHVybiAmX01fcG9kX2RhdGFbMF07IH0KKyAgICBjb25zdCB2b2lkKiBfTV9hY2Nlc3MoKSBjb25zdCB7IHJldHVybiAmX01fcG9kX2RhdGFbMF07IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIF9UcCYKKyAgICAgIF9NX2FjY2VzcygpCisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8X1RwKj4oX01fYWNjZXNzKCkpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBjb25zdCBfVHAmCisgICAgICBfTV9hY2Nlc3MoKSBjb25zdAorICAgICAgeyByZXR1cm4gKnN0YXRpY19jYXN0PGNvbnN0IF9UcCo+KF9NX2FjY2VzcygpKTsgfQorCisgICAgX05vY29weV90eXBlcyBfTV91bnVzZWQ7CisgICAgY2hhciBfTV9wb2RfZGF0YVtzaXplb2YoX05vY29weV90eXBlcyldOworICB9OworCisgIGVudW0gX01hbmFnZXJfb3BlcmF0aW9uCisgIHsKKyAgICBfX2dldF90eXBlX2luZm8sCisgICAgX19nZXRfZnVuY3Rvcl9wdHIsCisgICAgX19jbG9uZV9mdW5jdG9yLAorICAgIF9fZGVzdHJveV9mdW5jdG9yCisgIH07CisKKyAgLy8gU2ltcGxlIHR5cGUgd3JhcHBlciB0aGF0IGhlbHBzIGF2b2lkIGFubm95aW5nIGNvbnN0IHByb2JsZW1zCisgIC8vIHdoZW4gY2FzdGluZyBiZXR3ZWVuIHZvaWQgcG9pbnRlcnMgYW5kIHBvaW50ZXJzLXRvLXBvaW50ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9TaW1wbGVfdHlwZV93cmFwcGVyCisgICAgeworICAgICAgX1NpbXBsZV90eXBlX3dyYXBwZXIoX1RwIF9fdmFsdWUpIDogX192YWx1ZShfX3ZhbHVlKSB7IH0KKworICAgICAgX1RwIF9fdmFsdWU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbG9jYXRpb25faW52YXJpYW50PF9TaW1wbGVfdHlwZV93cmFwcGVyPF9UcD4gPgorICAgIDogX19pc19sb2NhdGlvbl9pbnZhcmlhbnQ8X1RwPgorICAgIHsgfTsKKworICAvLyBDb252ZXJ0cyBhIHJlZmVyZW5jZSB0byBhIGZ1bmN0aW9uIG9iamVjdCBpbnRvIGEgY2FsbGFibGUKKyAgLy8gZnVuY3Rpb24gb2JqZWN0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBpbmxpbmUgX0Z1bmN0b3ImCisgICAgX19jYWxsYWJsZV9mdW5jdG9yKF9GdW5jdG9yJiBfX2YpCisgICAgeyByZXR1cm4gX19mOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01lbWJlciwgdHlwZW5hbWUgX0NsYXNzPgorICAgIGlubGluZSBfTWVtX2ZuPF9NZW1iZXIgX0NsYXNzOjoqPgorICAgIF9fY2FsbGFibGVfZnVuY3RvcihfTWVtYmVyIF9DbGFzczo6KiAmX19wKQorICAgIHsgcmV0dXJuIHN0ZDo6bWVtX2ZuKF9fcCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTWVtYmVyLCB0eXBlbmFtZSBfQ2xhc3M+CisgICAgaW5saW5lIF9NZW1fZm48X01lbWJlciBfQ2xhc3M6Oio+CisgICAgX19jYWxsYWJsZV9mdW5jdG9yKF9NZW1iZXIgX0NsYXNzOjoqIGNvbnN0ICZfX3ApCisgICAgeyByZXR1cm4gc3RkOjptZW1fZm4oX19wKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBpbmxpbmUgX01lbV9mbjxfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoX01lbWJlciBfQ2xhc3M6Oiogdm9sYXRpbGUgJl9fcCkKKyAgICB7IHJldHVybiBzdGQ6Om1lbV9mbihfX3ApOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01lbWJlciwgdHlwZW5hbWUgX0NsYXNzPgorICAgIGlubGluZSBfTWVtX2ZuPF9NZW1iZXIgX0NsYXNzOjoqPgorICAgIF9fY2FsbGFibGVfZnVuY3RvcihfTWVtYmVyIF9DbGFzczo6KiBjb25zdCB2b2xhdGlsZSAmX19wKQorICAgIHsgcmV0dXJuIHN0ZDo6bWVtX2ZuKF9fcCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIGNsYXNzIGZ1bmN0aW9uOworCisgIC8vLyBCYXNlIGNsYXNzIG9mIGFsbCBwb2x5bW9ycGhpYyBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlcnMuCisgIGNsYXNzIF9GdW5jdGlvbl9iYXNlCisgIHsKKyAgcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBfTV9tYXhfc2l6ZSA9IHNpemVvZihfTm9jb3B5X3R5cGVzKTsKKyAgICBzdGF0aWMgY29uc3Qgc3RkOjpzaXplX3QgX01fbWF4X2FsaWduID0gX19hbGlnbm9mX18oX05vY29weV90eXBlcyk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICAgIGNsYXNzIF9CYXNlX21hbmFnZXIKKyAgICAgIHsKKyAgICAgIHByb3RlY3RlZDoKKwlzdGF0aWMgY29uc3QgYm9vbCBfX3N0b3JlZF9sb2NhbGx5ID0KKwkoX19pc19sb2NhdGlvbl9pbnZhcmlhbnQ8X0Z1bmN0b3I+Ojp2YWx1ZQorCSAmJiBzaXplb2YoX0Z1bmN0b3IpIDw9IF9NX21heF9zaXplCisJICYmIF9fYWxpZ25vZl9fKF9GdW5jdG9yKSA8PSBfTV9tYXhfYWxpZ24KKwkgJiYgKF9NX21heF9hbGlnbiAlIF9fYWxpZ25vZl9fKF9GdW5jdG9yKSA9PSAwKSk7CisKKwl0eXBlZGVmIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9fc3RvcmVkX2xvY2FsbHk+IF9Mb2NhbF9zdG9yYWdlOworCisJLy8gUmV0cmlldmUgYSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiBvYmplY3QKKwlzdGF0aWMgX0Z1bmN0b3IqCisJX01fZ2V0X3BvaW50ZXIoY29uc3QgX0FueV9kYXRhJiBfX3NvdXJjZSkKKwl7CisJICBjb25zdCBfRnVuY3RvciogX19wdHIgPQorCSAgICBfX3N0b3JlZF9sb2NhbGx5PyBzdGQ6Ol9fYWRkcmVzc29mKF9fc291cmNlLl9NX2FjY2VzczxfRnVuY3Rvcj4oKSkKKwkgICAgLyogaGF2ZSBzdG9yZWQgYSBwb2ludGVyICovIDogX19zb3VyY2UuX01fYWNjZXNzPF9GdW5jdG9yKj4oKTsKKwkgIHJldHVybiBjb25zdF9jYXN0PF9GdW5jdG9yKj4oX19wdHIpOworCX0KKworCS8vIENsb25lIGEgbG9jYXRpb24taW52YXJpYW50IGZ1bmN0aW9uIG9iamVjdCB0aGF0IGZpdHMgd2l0aGluCisJLy8gYW4gX0FueV9kYXRhIHN0cnVjdHVyZS4KKwlzdGF0aWMgdm9pZAorCV9NX2Nsb25lKF9BbnlfZGF0YSYgX19kZXN0LCBjb25zdCBfQW55X2RhdGEmIF9fc291cmNlLCB0cnVlX3R5cGUpCisJeworCSAgbmV3IChfX2Rlc3QuX01fYWNjZXNzKCkpIF9GdW5jdG9yKF9fc291cmNlLl9NX2FjY2VzczxfRnVuY3Rvcj4oKSk7CisJfQorCisJLy8gQ2xvbmUgYSBmdW5jdGlvbiBvYmplY3QgdGhhdCBpcyBub3QgbG9jYXRpb24taW52YXJpYW50IG9yCisJLy8gdGhhdCBjYW5ub3QgZml0IGludG8gYW4gX0FueV9kYXRhIHN0cnVjdHVyZS4KKwlzdGF0aWMgdm9pZAorCV9NX2Nsb25lKF9BbnlfZGF0YSYgX19kZXN0LCBjb25zdCBfQW55X2RhdGEmIF9fc291cmNlLCBmYWxzZV90eXBlKQorCXsKKwkgIF9fZGVzdC5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0KKwkgICAgbmV3IF9GdW5jdG9yKCpfX3NvdXJjZS5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpKTsKKwl9CisKKwkvLyBEZXN0cm95aW5nIGEgbG9jYXRpb24taW52YXJpYW50IG9iamVjdCBtYXkgc3RpbGwgcmVxdWlyZQorCS8vIGRlc3RydWN0aW9uLgorCXN0YXRpYyB2b2lkCisJX01fZGVzdHJveShfQW55X2RhdGEmIF9fdmljdGltLCB0cnVlX3R5cGUpCisJeworCSAgX192aWN0aW0uX01fYWNjZXNzPF9GdW5jdG9yPigpLn5fRnVuY3RvcigpOworCX0KKworCS8vIERlc3Ryb3lpbmcgYW4gb2JqZWN0IGxvY2F0ZWQgb24gdGhlIGhlYXAuCisJc3RhdGljIHZvaWQKKwlfTV9kZXN0cm95KF9BbnlfZGF0YSYgX192aWN0aW0sIGZhbHNlX3R5cGUpCisJeworCSAgZGVsZXRlIF9fdmljdGltLl9NX2FjY2VzczxfRnVuY3Rvcio+KCk7CisJfQorCisgICAgICBwdWJsaWM6CisJc3RhdGljIGJvb2wKKwlfTV9tYW5hZ2VyKF9BbnlfZGF0YSYgX19kZXN0LCBjb25zdCBfQW55X2RhdGEmIF9fc291cmNlLAorCQkgICBfTWFuYWdlcl9vcGVyYXRpb24gX19vcCkKKwl7CisJICBzd2l0Y2ggKF9fb3ApCisJICAgIHsKKyNpZmRlZiBfX0dYWF9SVFRJCisJICAgIGNhc2UgX19nZXRfdHlwZV9pbmZvOgorCSAgICAgIF9fZGVzdC5fTV9hY2Nlc3M8Y29uc3QgdHlwZV9pbmZvKj4oKSA9ICZ0eXBlaWQoX0Z1bmN0b3IpOworCSAgICAgIGJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgX19nZXRfZnVuY3Rvcl9wdHI6CisJICAgICAgX19kZXN0Ll9NX2FjY2VzczxfRnVuY3Rvcio+KCkgPSBfTV9nZXRfcG9pbnRlcihfX3NvdXJjZSk7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBfX2Nsb25lX2Z1bmN0b3I6CisJICAgICAgX01fY2xvbmUoX19kZXN0LCBfX3NvdXJjZSwgX0xvY2FsX3N0b3JhZ2UoKSk7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBfX2Rlc3Ryb3lfZnVuY3RvcjoKKwkgICAgICBfTV9kZXN0cm95KF9fZGVzdCwgX0xvY2FsX3N0b3JhZ2UoKSk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIHJldHVybiBmYWxzZTsKKwl9CisKKwlzdGF0aWMgdm9pZAorCV9NX2luaXRfZnVuY3RvcihfQW55X2RhdGEmIF9fZnVuY3RvciwgX0Z1bmN0b3ImJiBfX2YpCisJeyBfTV9pbml0X2Z1bmN0b3IoX19mdW5jdG9yLCBzdGQ6Om1vdmUoX19mKSwgX0xvY2FsX3N0b3JhZ2UoKSk7IH0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKGNvbnN0IGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX2YpCisJICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihfX2YpOyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKF9UcCogY29uc3QmIF9fZnApCisJICB7IHJldHVybiBfX2ZwOyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lIF9UcD4KKwkgIHN0YXRpYyBib29sCisJICBfTV9ub3RfZW1wdHlfZnVuY3Rpb24oX1RwIF9DbGFzczo6KiBjb25zdCYgX19tcCkKKwkgIHsgcmV0dXJuIF9fbXA7IH0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKwkgIHN0YXRpYyBib29sCisJICBfTV9ub3RfZW1wdHlfZnVuY3Rpb24oY29uc3QgX1RwJikKKwkgIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgcHJpdmF0ZToKKwlzdGF0aWMgdm9pZAorCV9NX2luaXRfZnVuY3RvcihfQW55X2RhdGEmIF9fZnVuY3RvciwgX0Z1bmN0b3ImJiBfX2YsIHRydWVfdHlwZSkKKwl7IG5ldyAoX19mdW5jdG9yLl9NX2FjY2VzcygpKSBfRnVuY3RvcihzdGQ6Om1vdmUoX19mKSk7IH0KKworCXN0YXRpYyB2b2lkCisJX01faW5pdF9mdW5jdG9yKF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfRnVuY3RvciYmIF9fZiwgZmFsc2VfdHlwZSkKKwl7IF9fZnVuY3Rvci5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0gbmV3IF9GdW5jdG9yKHN0ZDo6bW92ZShfX2YpKTsgfQorICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgY2xhc3MgX1JlZl9tYW5hZ2VyIDogcHVibGljIF9CYXNlX21hbmFnZXI8X0Z1bmN0b3IqPgorICAgICAgeworCXR5cGVkZWYgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3IqPiBfQmFzZTsKKworICAgICAgcHVibGljOgorCXN0YXRpYyBib29sCisJX01fbWFuYWdlcihfQW55X2RhdGEmIF9fZGVzdCwgY29uc3QgX0FueV9kYXRhJiBfX3NvdXJjZSwKKwkJICAgX01hbmFnZXJfb3BlcmF0aW9uIF9fb3ApCisJeworCSAgc3dpdGNoIChfX29wKQorCSAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgICBjYXNlIF9fZ2V0X3R5cGVfaW5mbzoKKwkgICAgICBfX2Rlc3QuX01fYWNjZXNzPGNvbnN0IHR5cGVfaW5mbyo+KCkgPSAmdHlwZWlkKF9GdW5jdG9yKTsKKwkgICAgICBicmVhazsKKyNlbmRpZgorCSAgICBjYXNlIF9fZ2V0X2Z1bmN0b3JfcHRyOgorCSAgICAgIF9fZGVzdC5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0gKl9CYXNlOjpfTV9nZXRfcG9pbnRlcihfX3NvdXJjZSk7CisJICAgICAgcmV0dXJuIGlzX2NvbnN0PF9GdW5jdG9yPjo6dmFsdWU7CisJICAgICAgYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkgICAgICBfQmFzZTo6X01fbWFuYWdlcihfX2Rlc3QsIF9fc291cmNlLCBfX29wKTsKKwkgICAgfQorCSAgcmV0dXJuIGZhbHNlOworCX0KKworCXN0YXRpYyB2b2lkCisJX01faW5pdF9mdW5jdG9yKF9BbnlfZGF0YSYgX19mdW5jdG9yLCByZWZlcmVuY2Vfd3JhcHBlcjxfRnVuY3Rvcj4gX19mKQorCXsKKwkgIF9CYXNlOjpfTV9pbml0X2Z1bmN0b3IoX19mdW5jdG9yLCBzdGQ6Ol9fYWRkcmVzc29mKF9fZi5nZXQoKSkpOworCX0KKyAgICAgIH07CisKKyAgICBfRnVuY3Rpb25fYmFzZSgpIDogX01fbWFuYWdlcigwKSB7IH0KKworICAgIH5fRnVuY3Rpb25fYmFzZSgpCisgICAgeworICAgICAgaWYgKF9NX21hbmFnZXIpCisJX01fbWFuYWdlcihfTV9mdW5jdG9yLCBfTV9mdW5jdG9yLCBfX2Rlc3Ryb3lfZnVuY3Rvcik7CisgICAgfQorCisKKyAgICBib29sIF9NX2VtcHR5KCkgY29uc3QgeyByZXR1cm4gIV9NX21hbmFnZXI7IH0KKworICAgIHR5cGVkZWYgYm9vbCAoKl9NYW5hZ2VyX3R5cGUpKF9BbnlfZGF0YSYsIGNvbnN0IF9BbnlfZGF0YSYsCisJCQkJICBfTWFuYWdlcl9vcGVyYXRpb24pOworCisgICAgX0FueV9kYXRhICAgICBfTV9mdW5jdG9yOworICAgIF9NYW5hZ2VyX3R5cGUgX01fbWFuYWdlcjsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlLCB0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9GdW5jdGlvbl9oYW5kbGVyPF9SZXMoX0FyZ1R5cGVzLi4uKSwgX0Z1bmN0b3I+CisgICAgOiBwdWJsaWMgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjxfRnVuY3Rvcj4gX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgX1JlcworICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworCXJldHVybiAoKl9CYXNlOjpfTV9nZXRfcG9pbnRlcihfX2Z1bmN0b3IpKSgKKwkgICAgc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9GdW5jdGlvbl9oYW5kbGVyPHZvaWQoX0FyZ1R5cGVzLi4uKSwgX0Z1bmN0b3I+CisgICAgOiBwdWJsaWMgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjxfRnVuY3Rvcj4gX0Jhc2U7CisKKyAgICAgcHVibGljOgorICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKwkoKl9CYXNlOjpfTV9nZXRfcG9pbnRlcihfX2Z1bmN0b3IpKSgKKwkgICAgc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9GdW5jdGlvbl9oYW5kbGVyPF9SZXMoX0FyZ1R5cGVzLi4uKSwgcmVmZXJlbmNlX3dyYXBwZXI8X0Z1bmN0b3I+ID4KKyAgICA6IHB1YmxpYyBfRnVuY3Rpb25fYmFzZTo6X1JlZl9tYW5hZ2VyPF9GdW5jdG9yPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0Z1bmN0aW9uX2Jhc2U6Ol9SZWZfbWFuYWdlcjxfRnVuY3Rvcj4gX0Jhc2U7CisKKyAgICAgcHVibGljOgorICAgICAgc3RhdGljIF9SZXMKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKwlyZXR1cm4gX19jYWxsYWJsZV9mdW5jdG9yKCoqX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvcikpKAorCSAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjx2b2lkKF9BcmdUeXBlcy4uLiksIHJlZmVyZW5jZV93cmFwcGVyPF9GdW5jdG9yPiA+CisgICAgOiBwdWJsaWMgX0Z1bmN0aW9uX2Jhc2U6Ol9SZWZfbWFuYWdlcjxfRnVuY3Rvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9GdW5jdGlvbl9iYXNlOjpfUmVmX21hbmFnZXI8X0Z1bmN0b3I+IF9CYXNlOworCisgICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfTV9pbnZva2UoY29uc3QgX0FueV9kYXRhJiBfX2Z1bmN0b3IsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpCisgICAgICB7CisJX19jYWxsYWJsZV9mdW5jdG9yKCoqX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvcikpKAorCSAgICBzdGQ6OmZvcndhcmQ8X0FyZ1R5cGVzPihfX2FyZ3MpLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUgX01lbWJlciwgdHlwZW5hbWUgX1JlcywKKwkgICB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8X1JlcyhfQXJnVHlwZXMuLi4pLCBfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICA6IHB1YmxpYyBfRnVuY3Rpb25faGFuZGxlcjx2b2lkKF9BcmdUeXBlcy4uLiksIF9NZW1iZXIgX0NsYXNzOjoqPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0Z1bmN0aW9uX2hhbmRsZXI8dm9pZChfQXJnVHlwZXMuLi4pLCBfTWVtYmVyIF9DbGFzczo6Kj4KKwlfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgX1JlcworICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworCXJldHVybiBzdGQ6Om1lbV9mbihfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKS0+X192YWx1ZSkoCisJICAgIHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZSBfTWVtYmVyLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8dm9pZChfQXJnVHlwZXMuLi4pLCBfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICA6IHB1YmxpYyBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjwKKwkJIF9TaW1wbGVfdHlwZV93cmFwcGVyPCBfTWVtYmVyIF9DbGFzczo6KiA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9NZW1iZXIgX0NsYXNzOjoqIF9GdW5jdG9yOworICAgICAgdHlwZWRlZiBfU2ltcGxlX3R5cGVfd3JhcHBlcjxfRnVuY3Rvcj4gX1dyYXBwZXI7CisgICAgICB0eXBlZGVmIF9GdW5jdGlvbl9iYXNlOjpfQmFzZV9tYW5hZ2VyPF9XcmFwcGVyPiBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBib29sCisgICAgICBfTV9tYW5hZ2VyKF9BbnlfZGF0YSYgX19kZXN0LCBjb25zdCBfQW55X2RhdGEmIF9fc291cmNlLAorCQkgX01hbmFnZXJfb3BlcmF0aW9uIF9fb3ApCisgICAgICB7CisJc3dpdGNoIChfX29wKQorCSAgeworI2lmZGVmIF9fR1hYX1JUVEkKKwkgIGNhc2UgX19nZXRfdHlwZV9pbmZvOgorCSAgICBfX2Rlc3QuX01fYWNjZXNzPGNvbnN0IHR5cGVfaW5mbyo+KCkgPSAmdHlwZWlkKF9GdW5jdG9yKTsKKwkgICAgYnJlYWs7CisjZW5kaWYKKwkgIGNhc2UgX19nZXRfZnVuY3Rvcl9wdHI6CisJICAgIF9fZGVzdC5fTV9hY2Nlc3M8X0Z1bmN0b3IqPigpID0KKwkgICAgICAmX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fc291cmNlKS0+X192YWx1ZTsKKwkgICAgYnJlYWs7CisKKwkgIGRlZmF1bHQ6CisJICAgIF9CYXNlOjpfTV9tYW5hZ2VyKF9fZGVzdCwgX19zb3VyY2UsIF9fb3ApOworCSAgfQorCXJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKwlzdGQ6Om1lbV9mbihfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKS0+X192YWx1ZSkoCisJICAgIHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9Ubz4KKyAgICB1c2luZyBfX2NoZWNrX2Z1bmNfcmV0dXJuX3R5cGUKKyAgICAgID0gX19vcl88aXNfdm9pZDxfVG8+LCBpc19jb252ZXJ0aWJsZTxfRnJvbSwgX1RvPj47CisKKyAgLyoqCisgICAqICBAYnJpZWYgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBmb3Igc3RkOjpmdW5jdGlvbi4KKyAgICogIEBpbmdyb3VwIGZ1bmN0b3JzCisgICAqCisgICAqICBQb2x5bW9ycGhpYyBmdW5jdGlvbiB3cmFwcGVyLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIGZ1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKT4KKyAgICA6IHB1YmxpYyBfTWF5YmVfdW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uPF9SZXMsIF9BcmdUeXBlcy4uLj4sCisgICAgICBwcml2YXRlIF9GdW5jdGlvbl9iYXNlCisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIF9TaWduYXR1cmVfdHlwZShfQXJnVHlwZXMuLi4pOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKwl1c2luZyBfSW52b2tlID0gZGVjbHR5cGUoX19jYWxsYWJsZV9mdW5jdG9yKHN0ZDo6ZGVjbHZhbDxfRnVuY3RvciY+KCkpCisJCQkJIChzdGQ6OmRlY2x2YWw8X0FyZ1R5cGVzPigpLi4uKSApOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKwl1c2luZyBfQ2FsbGFibGUgPSBfX2NoZWNrX2Z1bmNfcmV0dXJuX3R5cGU8X0ludm9rZTxfRnVuY3Rvcj4sIF9SZXM+OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29uZCwgdHlwZW5hbWUgX1RwPgorCXVzaW5nIF9SZXF1aXJlcyA9IHR5cGVuYW1lIGVuYWJsZV9pZjxfQ29uZDo6dmFsdWUsIF9UcD46OnR5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIFszLjcuMi4xXSBjb25zdHJ1Y3QvY29weS9kZXN0cm95CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBEZWZhdWx0IGNvbnN0cnVjdCBjcmVhdGVzIGFuIGVtcHR5IGZ1bmN0aW9uIGNhbGwgd3JhcHBlci4KKyAgICAgICAqICBAcG9zdCBAYyAhKGJvb2wpKnRoaXMKKyAgICAgICAqLworICAgICAgZnVuY3Rpb24oKSBub2V4Y2VwdAorICAgICAgOiBfRnVuY3Rpb25fYmFzZSgpIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQ3JlYXRlcyBhbiBlbXB0eSBmdW5jdGlvbiBjYWxsIHdyYXBwZXIuCisgICAgICAgKiAgQHBvc3QgQGMgIShib29sKSp0aGlzCisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uKG51bGxwdHJfdCkgbm9leGNlcHQKKyAgICAgIDogX0Z1bmN0aW9uX2Jhc2UoKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBjb3B5IGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSBfX3ggQSAlZnVuY3Rpb24gb2JqZWN0IHdpdGggaWRlbnRpY2FsIGNhbGwgc2lnbmF0dXJlLgorICAgICAgICogIEBwb3N0IEBjIGJvb2woKnRoaXMpID09IGJvb2woX194KQorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlZnVuY3Rpb24gY29udGFpbnMgYSBjb3B5IG9mIHRoZSB0YXJnZXQgb2YgQGEKKyAgICAgICAqICBfX3ggKGlmIGl0IGhhcyBvbmUpLgorICAgICAgICovCisgICAgICBmdW5jdGlvbihjb25zdCBmdW5jdGlvbiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBtb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgICogIEBwYXJhbSBfX3ggQSAlZnVuY3Rpb24gb2JqZWN0IHJ2YWx1ZSB3aXRoIGlkZW50aWNhbCBjYWxsIHNpZ25hdHVyZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJWZ1bmN0aW9uIGNvbnRhaW5zIHRoZSB0YXJnZXQgb2YgQGEgX194CisgICAgICAgKiAgKGlmIGl0IGhhcyBvbmUpLgorICAgICAgICovCisgICAgICBmdW5jdGlvbihmdW5jdGlvbiYmIF9feCkgOiBfRnVuY3Rpb25fYmFzZSgpCisgICAgICB7CisJX194LnN3YXAoKnRoaXMpOworICAgICAgfQorCisgICAgICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JfYXJnX3QKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEJ1aWxkcyBhICVmdW5jdGlvbiB0aGF0IHRhcmdldHMgYSBjb3B5IG9mIHRoZSBpbmNvbWluZworICAgICAgICogIGZ1bmN0aW9uIG9iamVjdC4KKyAgICAgICAqICBAcGFyYW0gX19mIEEgJWZ1bmN0aW9uIG9iamVjdCB0aGF0IGlzIGNhbGxhYmxlIHdpdGggcGFyYW1ldGVycyBvZgorICAgICAgICogIHR5cGUgQGMgVDEsIEBjIFQyLCAuLi4sIEBjIFROIGFuZCByZXR1cm5zIGEgdmFsdWUgY29udmVydGlibGUKKyAgICAgICAqICB0byBAYyBSZXMuCisgICAgICAgKgorICAgICAgICogIFRoZSBuZXdseS1jcmVhdGVkICVmdW5jdGlvbiBvYmplY3Qgd2lsbCB0YXJnZXQgYSBjb3B5IG9mIAorICAgICAgICogIEBhIF9fZi4gSWYgQGEgX19mIGlzIEBjIHJlZmVyZW5jZV93cmFwcGVyPEY+LCB0aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgICAqICBvYmplY3Qgd2lsbCBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiBvYmplY3QgQGMKKyAgICAgICAqICBfX2YuZ2V0KCkuIElmIEBhIF9fZiBpcyBhIE5VTEwgZnVuY3Rpb24gcG9pbnRlciBvciBOVUxMCisgICAgICAgKiAgcG9pbnRlci10by1tZW1iZXIsIHRoZSBuZXdseS1jcmVhdGVkIG9iamVjdCB3aWxsIGJlIGVtcHR5LgorICAgICAgICoKKyAgICAgICAqICBJZiBAYSBfX2YgaXMgYSBub24tTlVMTCBmdW5jdGlvbiBwb2ludGVyIG9yIGFuIG9iamVjdCBvZiB0eXBlIEBjCisgICAgICAgKiAgcmVmZXJlbmNlX3dyYXBwZXI8Rj4sIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IF9SZXF1aXJlczxfQ2FsbGFibGU8X0Z1bmN0b3I+LCB2b2lkPj4KKwlmdW5jdGlvbihfRnVuY3Rvcik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAlRnVuY3Rpb24gYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gX194IEEgJWZ1bmN0aW9uIHdpdGggaWRlbnRpY2FsIGNhbGwgc2lnbmF0dXJlLgorICAgICAgICogIEBwb3N0IEBjIChib29sKSp0aGlzID09IChib29sKXgKKyAgICAgICAqICBAcmV0dXJucyBAYyAqdGhpcworICAgICAgICoKKyAgICAgICAqICBUaGUgdGFyZ2V0IG9mIEBhIF9feCBpcyBjb3BpZWQgdG8gQGMgKnRoaXMuIElmIEBhIF9feCBoYXMgbm8KKyAgICAgICAqICB0YXJnZXQsIHRoZW4gQGMgKnRoaXMgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgX194IHRhcmdldHMgYSBmdW5jdGlvbiBwb2ludGVyIG9yIGEgcmVmZXJlbmNlIHRvIGEgZnVuY3Rpb24KKyAgICAgICAqICBvYmplY3QsIHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICAgICAqLworICAgICAgZnVuY3Rpb24mCisgICAgICBvcGVyYXRvcj0oY29uc3QgZnVuY3Rpb24mIF9feCkKKyAgICAgIHsKKwlmdW5jdGlvbihfX3gpLnN3YXAoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBtb3ZlLWFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9feCBBICVmdW5jdGlvbiBydmFsdWUgd2l0aCBpZGVudGljYWwgY2FsbCBzaWduYXR1cmUuCisgICAgICAgKiAgQHJldHVybnMgQGMgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVGhlIHRhcmdldCBvZiBAYSBfX3ggaXMgbW92ZWQgdG8gQGMgKnRoaXMuIElmIEBhIF9feCBoYXMgbm8KKyAgICAgICAqICB0YXJnZXQsIHRoZW4gQGMgKnRoaXMgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgX194IHRhcmdldHMgYSBmdW5jdGlvbiBwb2ludGVyIG9yIGEgcmVmZXJlbmNlIHRvIGEgZnVuY3Rpb24KKyAgICAgICAqICBvYmplY3QsIHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICAgICAqLworICAgICAgZnVuY3Rpb24mCisgICAgICBvcGVyYXRvcj0oZnVuY3Rpb24mJiBfX3gpCisgICAgICB7CisJZnVuY3Rpb24oc3RkOjptb3ZlKF9feCkpLnN3YXAoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBhc3NpZ25tZW50IHRvIHplcm8uCisgICAgICAgKiAgQHBvc3QgQGMgIShib29sKSp0aGlzCisgICAgICAgKiAgQHJldHVybnMgQGMgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVGhlIHRhcmdldCBvZiBAYyAqdGhpcyBpcyBkZWFsbG9jYXRlZCwgbGVhdmluZyBpdCBlbXB0eS4KKyAgICAgICAqLworICAgICAgZnVuY3Rpb24mCisgICAgICBvcGVyYXRvcj0obnVsbHB0cl90KQorICAgICAgeworCWlmIChfTV9tYW5hZ2VyKQorCSAgeworCSAgICBfTV9tYW5hZ2VyKF9NX2Z1bmN0b3IsIF9NX2Z1bmN0b3IsIF9fZGVzdHJveV9mdW5jdG9yKTsKKwkgICAgX01fbWFuYWdlciA9IDA7CisJICAgIF9NX2ludm9rZXIgPSAwOworCSAgfQorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICVGdW5jdGlvbiBhc3NpZ25tZW50IHRvIGEgbmV3IHRhcmdldC4KKyAgICAgICAqICBAcGFyYW0gX19mIEEgJWZ1bmN0aW9uIG9iamVjdCB0aGF0IGlzIGNhbGxhYmxlIHdpdGggcGFyYW1ldGVycyBvZgorICAgICAgICogIHR5cGUgQGMgVDEsIEBjIFQyLCAuLi4sIEBjIFROIGFuZCByZXR1cm5zIGEgdmFsdWUgY29udmVydGlibGUKKyAgICAgICAqICB0byBAYyBSZXMuCisgICAgICAgKiAgQHJldHVybiBAYyAqdGhpcworICAgICAgICoKKyAgICAgICAqICBUaGlzICAlZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXIgd2lsbCB0YXJnZXQgYSBjb3B5IG9mIEBhCisgICAgICAgKiAgX19mLiBJZiBAYSBfX2YgaXMgQGMgcmVmZXJlbmNlX3dyYXBwZXI8Rj4sIHRoZW4gdGhpcyBmdW5jdGlvbgorICAgICAgICogIG9iamVjdCB3aWxsIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIG9iamVjdCBAYworICAgICAgICogIF9fZi5nZXQoKS4gSWYgQGEgX19mIGlzIGEgTlVMTCBmdW5jdGlvbiBwb2ludGVyIG9yIE5VTEwKKyAgICAgICAqICBwb2ludGVyLXRvLW1lbWJlciwgQGMgdGhpcyBvYmplY3Qgd2lsbCBiZSBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGEgX19mIGlzIGEgbm9uLU5VTEwgZnVuY3Rpb24gcG9pbnRlciBvciBhbiBvYmplY3Qgb2YgdHlwZSBAYworICAgICAgICogIHJlZmVyZW5jZV93cmFwcGVyPEY+LCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKwlfUmVxdWlyZXM8X0NhbGxhYmxlPF9GdW5jdG9yPiwgZnVuY3Rpb24mPgorCW9wZXJhdG9yPShfRnVuY3RvciYmIF9fZikKKwl7CisJICBmdW5jdGlvbihzdGQ6OmZvcndhcmQ8X0Z1bmN0b3I+KF9fZikpLnN3YXAoKnRoaXMpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgLy8vIEBvdmVybG9hZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisJZnVuY3Rpb24mCisJb3BlcmF0b3I9KHJlZmVyZW5jZV93cmFwcGVyPF9GdW5jdG9yPiBfX2YpIG5vZXhjZXB0CisJeworCSAgZnVuY3Rpb24oX19mKS5zd2FwKCp0aGlzKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIC8vIFszLjcuMi4yXSBmdW5jdGlvbiBtb2RpZmllcnMKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFN3YXAgdGhlIHRhcmdldHMgb2YgdHdvICVmdW5jdGlvbiBvYmplY3RzLgorICAgICAgICogIEBwYXJhbSBfX3ggQSAlZnVuY3Rpb24gd2l0aCBpZGVudGljYWwgY2FsbCBzaWduYXR1cmUuCisgICAgICAgKgorICAgICAgICogIFN3YXAgdGhlIHRhcmdldHMgb2YgQGMgdGhpcyBmdW5jdGlvbiBvYmplY3QgYW5kIEBhIF9fZi4gVGhpcworICAgICAgICogIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQgc3dhcChmdW5jdGlvbiYgX194KQorICAgICAgeworCXN0ZDo6c3dhcChfTV9mdW5jdG9yLCBfX3guX01fZnVuY3Rvcik7CisJc3RkOjpzd2FwKF9NX21hbmFnZXIsIF9feC5fTV9tYW5hZ2VyKTsKKwlzdGQ6OnN3YXAoX01faW52b2tlciwgX194Ll9NX2ludm9rZXIpOworICAgICAgfQorCisgICAgICAvLyBUT0RPOiBuZWVkcyBhbGxvY2F0b3JfYXJnX3QKKyAgICAgIC8qCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUgX0FsbG9jPgorCXZvaWQKKwlhc3NpZ24oX0Z1bmN0b3ImJiBfX2YsIGNvbnN0IF9BbGxvYyYgX19hKQorCXsKKwkgIGZ1bmN0aW9uKGFsbG9jYXRvcl9hcmcsIF9fYSwKKwkJICAgc3RkOjpmb3J3YXJkPF9GdW5jdG9yPihfX2YpKS5zd2FwKCp0aGlzKTsKKwl9CisgICAgICAqLworCisgICAgICAvLyBbMy43LjIuM10gZnVuY3Rpb24gY2FwYWNpdHkKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIERldGVybWluZSBpZiB0aGUgJWZ1bmN0aW9uIHdyYXBwZXIgaGFzIGEgdGFyZ2V0LgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJuIEBjIHRydWUgd2hlbiB0aGlzICVmdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSB0YXJnZXQsCisgICAgICAgKiAgb3IgQGMgZmFsc2Ugd2hlbiBpdCBpcyBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgICAgICovCisgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuICFfTV9lbXB0eSgpOyB9CisKKyAgICAgIC8vIFszLjcuMi40XSBmdW5jdGlvbiBpbnZvY2F0aW9uCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBJbnZva2VzIHRoZSBmdW5jdGlvbiB0YXJnZXRlZCBieSBAYyAqdGhpcy4KKyAgICAgICAqICBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSB0YXJnZXQuCisgICAgICAgKiAgQHRocm93cyBiYWRfZnVuY3Rpb25fY2FsbCB3aGVuIEBjICEoYm9vbCkqdGhpcworICAgICAgICoKKyAgICAgICAqICBUaGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRvciBpbnZva2VzIHRoZSB0YXJnZXQgZnVuY3Rpb24gb2JqZWN0CisgICAgICAgKiAgc3RvcmVkIGJ5IEBjIHRoaXMuCisgICAgICAgKi8KKyAgICAgIF9SZXMgb3BlcmF0b3IoKShfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdDsKKworI2lmZGVmIF9fR1hYX1JUVEkKKyAgICAgIC8vIFszLjcuMi41XSBmdW5jdGlvbiB0YXJnZXQgYWNjZXNzCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSB0YXJnZXQgb2YgdGhpcyBmdW5jdGlvbiBvYmplY3QKKyAgICAgICAqICB3cmFwcGVyLgorICAgICAgICoKKyAgICAgICAqICBAcmV0dXJucyB0aGUgdHlwZSBpZGVudGlmaWVyIG9mIHRoZSB0YXJnZXQgZnVuY3Rpb24gb2JqZWN0LCBvcgorICAgICAgICogIEBjIHR5cGVpZCh2b2lkKSBpZiBAYyAhKGJvb2wpKnRoaXMuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICAgICAqLworICAgICAgY29uc3QgdHlwZV9pbmZvJiB0YXJnZXRfdHlwZSgpIGNvbnN0IG5vZXhjZXB0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgQWNjZXNzIHRoZSBzdG9yZWQgdGFyZ2V0IGZ1bmN0aW9uIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RvcmVkIHRhcmdldCBmdW5jdGlvbiBvYmplY3QsCisgICAgICAgKiAgaWYgQGMgdHlwZWlkKEZ1bmN0b3IpLmVxdWFscyh0YXJnZXRfdHlwZSgpKTsgb3RoZXJ3aXNlLCBhIE5VTEwKKyAgICAgICAqICBwb2ludGVyLgorICAgICAgICoKKyAgICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+ICAgICAgIF9GdW5jdG9yKiB0YXJnZXQoKSBub2V4Y2VwdDsKKworICAgICAgLy8vIEBvdmVybG9hZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+IGNvbnN0IF9GdW5jdG9yKiB0YXJnZXQoKSBjb25zdCBub2V4Y2VwdDsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX1JlcyAoKl9JbnZva2VyX3R5cGUpKGNvbnN0IF9BbnlfZGF0YSYsIF9BcmdUeXBlcy4uLik7CisgICAgICBfSW52b2tlcl90eXBlIF9NX2ludm9rZXI7CisgIH07CisKKyAgLy8gT3V0LW9mLWxpbmUgbWVtYmVyIGRlZmluaXRpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPjo6CisgICAgZnVuY3Rpb24oY29uc3QgZnVuY3Rpb24mIF9feCkKKyAgICA6IF9GdW5jdGlvbl9iYXNlKCkKKyAgICB7CisgICAgICBpZiAoc3RhdGljX2Nhc3Q8Ym9vbD4oX194KSkKKwl7CisJICBfTV9pbnZva2VyID0gX194Ll9NX2ludm9rZXI7CisJICBfTV9tYW5hZ2VyID0gX194Ll9NX21hbmFnZXI7CisJICBfX3guX01fbWFuYWdlcihfTV9mdW5jdG9yLCBfX3guX01fZnVuY3RvciwgX19jbG9uZV9mdW5jdG9yKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWU+CisgICAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICAgIGZ1bmN0aW9uKF9GdW5jdG9yIF9fZikKKyAgICAgIDogX0Z1bmN0aW9uX2Jhc2UoKQorICAgICAgeworCXR5cGVkZWYgX0Z1bmN0aW9uX2hhbmRsZXI8X1NpZ25hdHVyZV90eXBlLCBfRnVuY3Rvcj4gX015X2hhbmRsZXI7CisKKwlpZiAoX015X2hhbmRsZXI6Ol9NX25vdF9lbXB0eV9mdW5jdGlvbihfX2YpKQorCSAgeworCSAgICBfTXlfaGFuZGxlcjo6X01faW5pdF9mdW5jdG9yKF9NX2Z1bmN0b3IsIHN0ZDo6bW92ZShfX2YpKTsKKwkgICAgX01faW52b2tlciA9ICZfTXlfaGFuZGxlcjo6X01faW52b2tlOworCSAgICBfTV9tYW5hZ2VyID0gJl9NeV9oYW5kbGVyOjpfTV9tYW5hZ2VyOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBfUmVzCisgICAgZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPjo6CisgICAgb3BlcmF0b3IoKShfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfTV9lbXB0eSgpKQorCV9fdGhyb3dfYmFkX2Z1bmN0aW9uX2NhbGwoKTsKKyAgICAgIHJldHVybiBfTV9pbnZva2VyKF9NX2Z1bmN0b3IsIHN0ZDo6Zm9yd2FyZDxfQXJnVHlwZXM+KF9fYXJncykuLi4pOworICAgIH0KKworI2lmZGVmIF9fR1hYX1JUVEkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNvbnN0IHR5cGVfaW5mbyYKKyAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICB0YXJnZXRfdHlwZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgaWYgKF9NX21hbmFnZXIpCisJeworCSAgX0FueV9kYXRhIF9fdHlwZWluZm9fcmVzdWx0OworCSAgX01fbWFuYWdlcihfX3R5cGVpbmZvX3Jlc3VsdCwgX01fZnVuY3RvciwgX19nZXRfdHlwZV9pbmZvKTsKKwkgIHJldHVybiAqX190eXBlaW5mb19yZXN1bHQuX01fYWNjZXNzPGNvbnN0IHR5cGVfaW5mbyo+KCk7CisJfQorICAgICAgZWxzZQorCXJldHVybiB0eXBlaWQodm9pZCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICAgIF9GdW5jdG9yKgorICAgICAgZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPjo6CisgICAgICB0YXJnZXQoKSBub2V4Y2VwdAorICAgICAgeworCWlmICh0eXBlaWQoX0Z1bmN0b3IpID09IHRhcmdldF90eXBlKCkgJiYgX01fbWFuYWdlcikKKwkgIHsKKwkgICAgX0FueV9kYXRhIF9fcHRyOworCSAgICBpZiAoX01fbWFuYWdlcihfX3B0ciwgX01fZnVuY3RvciwgX19nZXRfZnVuY3Rvcl9wdHIpCisJCSYmICFpc19jb25zdDxfRnVuY3Rvcj46OnZhbHVlKQorCSAgICAgIHJldHVybiAwOworCSAgICBlbHNlCisJICAgICAgcmV0dXJuIF9fcHRyLl9NX2FjY2VzczxfRnVuY3Rvcio+KCk7CisJICB9CisJZWxzZQorCSAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgY29uc3QgX0Z1bmN0b3IqCisgICAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICAgIHRhcmdldCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7CisJaWYgKHR5cGVpZChfRnVuY3RvcikgPT0gdGFyZ2V0X3R5cGUoKSAmJiBfTV9tYW5hZ2VyKQorCSAgeworCSAgICBfQW55X2RhdGEgX19wdHI7CisJICAgIF9NX21hbmFnZXIoX19wdHIsIF9NX2Z1bmN0b3IsIF9fZ2V0X2Z1bmN0b3JfcHRyKTsKKwkgICAgcmV0dXJuIF9fcHRyLl9NX2FjY2Vzczxjb25zdCBfRnVuY3Rvcio+KCk7CisJICB9CisJZWxzZQorCSAgcmV0dXJuIDA7CisgICAgICB9CisjZW5kaWYKKworICAvLyBbMjAuNy4xNS4yLjZdIG51bGwgcG9pbnRlciBjb21wYXJpc29ucworCisgIC8qKgorICAgKiAgQGJyaWVmIENvbXBhcmVzIGEgcG9seW1vcnBoaWMgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXIgYWdhaW5zdCAwCisgICAqICAodGhlIE5VTEwgcG9pbnRlcikuCisgICAqICBAcmV0dXJucyBAYyB0cnVlIGlmIHRoZSB3cmFwcGVyIGhhcyBubyB0YXJnZXQsIEBjIGZhbHNlIG90aGVyd2lzZQorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGZ1bmN0aW9uPF9SZXMoX0FyZ3MuLi4pPiYgX19mLCBudWxscHRyX3QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gIXN0YXRpY19jYXN0PGJvb2w+KF9fZik7IH0KKworICAvLy8gQG92ZXJsb2FkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShudWxscHRyX3QsIGNvbnN0IGZ1bmN0aW9uPF9SZXMoX0FyZ3MuLi4pPiYgX19mKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuICFzdGF0aWNfY2FzdDxib29sPihfX2YpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgQ29tcGFyZXMgYSBwb2x5bW9ycGhpYyBmdW5jdGlvbiBvYmplY3Qgd3JhcHBlciBhZ2FpbnN0IDAKKyAgICogICh0aGUgTlVMTCBwb2ludGVyKS4KKyAgICogIEByZXR1cm5zIEBjIGZhbHNlIGlmIHRoZSB3cmFwcGVyIGhhcyBubyB0YXJnZXQsIEBjIHRydWUgb3RoZXJ3aXNlCisgICAqCisgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgZnVuY3Rpb248X1JlcyhfQXJncy4uLik+JiBfX2YsIG51bGxwdHJfdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihfX2YpOyB9CisKKyAgLy8vIEBvdmVybG9hZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0obnVsbHB0cl90LCBjb25zdCBmdW5jdGlvbjxfUmVzKF9BcmdzLi4uKT4mIF9fZikgbm9leGNlcHQKKyAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihfX2YpOyB9CisKKyAgLy8gWzIwLjcuMTUuMi43XSBzcGVjaWFsaXplZCBhbGdvcml0aG1zCisKKyAgLyoqCisgICAqICBAYnJpZWYgU3dhcCB0aGUgdGFyZ2V0cyBvZiB0d28gcG9seW1vcnBoaWMgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGZ1bmN0aW9uPF9SZXMoX0FyZ3MuLi4pPiYgX194LCBmdW5jdGlvbjxfUmVzKF9BcmdzLi4uKT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9GVU5DVElPTkFMCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2Z1dHVyZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvZnV0dXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTAwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2Z1dHVyZQpAQCAtMCwwICsxLDE1NTMgQEAKKy8vIDxmdXR1cmU+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL2Z1dHVyZQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9GVVRVUkUKKyNkZWZpbmUgX0dMSUJDWFhfRlVUVVJFIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxzeXN0ZW1fZXJyb3I+CisjaW5jbHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL3VuaXF1ZV9wdHIuaD4KKyNpbmNsdWRlIDxiaXRzL3NoYXJlZF9wdHIuaD4KKyNpbmNsdWRlIDxiaXRzL3VzZXNfYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY190cmFpdHMuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgZnV0dXJlcyBGdXR1cmVzCisgICAqIEBpbmdyb3VwIGNvbmN1cnJlbmN5CisgICAqCisgICAqIENsYXNzZXMgZm9yIGZ1dHVyZXMgc3VwcG9ydC4KKyAgICogQHsKKyAgICovCisKKyAgLy8vIEVycm9yIGNvZGUgZm9yIGZ1dHVyZXMKKyAgZW51bSBjbGFzcyBmdXR1cmVfZXJyYworICB7CisgICAgZnV0dXJlX2FscmVhZHlfcmV0cmlldmVkID0gMSwKKyAgICBwcm9taXNlX2FscmVhZHlfc2F0aXNmaWVkLAorICAgIG5vX3N0YXRlLAorICAgIGJyb2tlbl9wcm9taXNlCisgIH07CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGlzX2Vycm9yX2NvZGVfZW51bTxmdXR1cmVfZXJyYz4gOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvLy8gUG9pbnRzIHRvIGEgc3RhdGljYWxseS1hbGxvY2F0ZWQgb2JqZWN0IGRlcml2ZWQgZnJvbSBlcnJvcl9jYXRlZ29yeS4KKyAgY29uc3QgZXJyb3JfY2F0ZWdvcnkmCisgIGZ1dHVyZV9jYXRlZ29yeSgpIG5vZXhjZXB0OworCisgIC8vLyBPdmVybG9hZCBmb3IgbWFrZV9lcnJvcl9jb2RlLgorICBpbmxpbmUgZXJyb3JfY29kZQorICBtYWtlX2Vycm9yX2NvZGUoZnV0dXJlX2VycmMgX19lcnJjKSBub2V4Y2VwdAorICB7IHJldHVybiBlcnJvcl9jb2RlKHN0YXRpY19jYXN0PGludD4oX19lcnJjKSwgZnV0dXJlX2NhdGVnb3J5KCkpOyB9CisKKyAgLy8vIE92ZXJsb2FkIGZvciBtYWtlX2Vycm9yX2NvbmRpdGlvbi4KKyAgaW5saW5lIGVycm9yX2NvbmRpdGlvbgorICBtYWtlX2Vycm9yX2NvbmRpdGlvbihmdXR1cmVfZXJyYyBfX2VycmMpIG5vZXhjZXB0CisgIHsgcmV0dXJuIGVycm9yX2NvbmRpdGlvbihzdGF0aWNfY2FzdDxpbnQ+KF9fZXJyYyksIGZ1dHVyZV9jYXRlZ29yeSgpKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIEV4Y2VwdGlvbiB0eXBlIHRocm93biBieSBmdXR1cmVzLgorICAgKiAgQGluZ3JvdXAgZXhjZXB0aW9ucworICAgKi8KKyAgY2xhc3MgZnV0dXJlX2Vycm9yIDogcHVibGljIGxvZ2ljX2Vycm9yCisgIHsKKyAgICBlcnJvcl9jb2RlIAkJCV9NX2NvZGU7CisKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IGZ1dHVyZV9lcnJvcihlcnJvcl9jb2RlIF9fZWMpCisgICAgOiBsb2dpY19lcnJvcigic3RkOjpmdXR1cmVfZXJyb3IiKSwgX01fY29kZShfX2VjKQorICAgIHsgfQorCisgICAgdmlydHVhbCB+ZnV0dXJlX2Vycm9yKCkgbm9leGNlcHQ7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCisgICAgd2hhdCgpIGNvbnN0IG5vZXhjZXB0OworCisgICAgY29uc3QgZXJyb3JfY29kZSYKKyAgICBjb2RlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01fY29kZTsgfQorICB9OworCisgIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIGZ1dHVyZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIHNoYXJlZF9mdXR1cmU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBjbGFzcyBwYWNrYWdlZF90YXNrOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgY2xhc3MgcHJvbWlzZTsKKworICAvLy8gTGF1bmNoIGNvZGUgZm9yIGZ1dHVyZXMKKyAgZW51bSBjbGFzcyBsYXVuY2gKKyAgeworICAgIGFzeW5jID0gMSwKKyAgICBkZWZlcnJlZCA9IDIKKyAgfTsKKworICBjb25zdGV4cHIgbGF1bmNoIG9wZXJhdG9yJihsYXVuY2ggX194LCBsYXVuY2ggX195KQorICB7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxhdW5jaD4oCisJc3RhdGljX2Nhc3Q8aW50PihfX3gpICYgc3RhdGljX2Nhc3Q8aW50PihfX3kpKTsKKyAgfQorCisgIGNvbnN0ZXhwciBsYXVuY2ggb3BlcmF0b3J8KGxhdW5jaCBfX3gsIGxhdW5jaCBfX3kpCisgIHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bGF1bmNoPigKKwlzdGF0aWNfY2FzdDxpbnQ+KF9feCkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9feSkpOworICB9CisKKyAgY29uc3RleHByIGxhdW5jaCBvcGVyYXRvcl4obGF1bmNoIF9feCwgbGF1bmNoIF9feSkKKyAgeworICAgIHJldHVybiBzdGF0aWNfY2FzdDxsYXVuY2g+KAorCXN0YXRpY19jYXN0PGludD4oX194KSBeIHN0YXRpY19jYXN0PGludD4oX195KSk7CisgIH0KKworICBjb25zdGV4cHIgbGF1bmNoIG9wZXJhdG9yfihsYXVuY2ggX194KQorICB7IHJldHVybiBzdGF0aWNfY2FzdDxsYXVuY2g+KH5zdGF0aWNfY2FzdDxpbnQ+KF9feCkpOyB9CisKKyAgaW5saW5lIGxhdW5jaCYgb3BlcmF0b3ImPShsYXVuY2gmIF9feCwgbGF1bmNoIF9feSkKKyAgeyByZXR1cm4gX194ID0gX194ICYgX195OyB9CisKKyAgaW5saW5lIGxhdW5jaCYgb3BlcmF0b3J8PShsYXVuY2gmIF9feCwgbGF1bmNoIF9feSkKKyAgeyByZXR1cm4gX194ID0gX194IHwgX195OyB9CisKKyAgaW5saW5lIGxhdW5jaCYgb3BlcmF0b3JePShsYXVuY2gmIF9feCwgbGF1bmNoIF9feSkKKyAgeyByZXR1cm4gX194ID0gX194IF4gX195OyB9CisKKyAgLy8vIFN0YXR1cyBjb2RlIGZvciBmdXR1cmVzCisgIGVudW0gY2xhc3MgZnV0dXJlX3N0YXR1cworICB7CisgICAgcmVhZHksCisgICAgdGltZW91dCwKKyAgICBkZWZlcnJlZAorICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GbiwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgZnV0dXJlPHR5cGVuYW1lIHJlc3VsdF9vZjxfRm4oX0FyZ3MuLi4pPjo6dHlwZT4KKyAgICBhc3luYyhsYXVuY2ggX19wb2xpY3ksIF9GbiYmIF9fZm4sIF9BcmdzJiYuLi4gX19hcmdzKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGZ1dHVyZTx0eXBlbmFtZSByZXN1bHRfb2Y8X0ZuKF9BcmdzLi4uKT46OnR5cGU+CisgICAgYXN5bmMoX0ZuJiYgX19mbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpOworCisjaWYgZGVmaW5lZChfR0xJQkNYWF9IQVNfR1RIUkVBRFMpICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxKSBcCisgICYmIChBVE9NSUNfSU5UX0xPQ0tfRlJFRSA+IDEpCisKKyAgLy8vIEJhc2UgY2xhc3MgYW5kIGVuY2xvc2luZyBzY29wZS4KKyAgc3RydWN0IF9fZnV0dXJlX2Jhc2UKKyAgeworICAgIC8vLyBCYXNlIGNsYXNzIGZvciByZXN1bHRzLgorICAgIHN0cnVjdCBfUmVzdWx0X2Jhc2UKKyAgICB7CisgICAgICBleGNlcHRpb25fcHRyCQlfTV9lcnJvcjsKKworICAgICAgX1Jlc3VsdF9iYXNlKGNvbnN0IF9SZXN1bHRfYmFzZSYpID0gZGVsZXRlOworICAgICAgX1Jlc3VsdF9iYXNlJiBvcGVyYXRvcj0oY29uc3QgX1Jlc3VsdF9iYXNlJikgPSBkZWxldGU7CisKKyAgICAgIC8vIF9NX2Rlc3Ryb3koKSBhbGxvd3MgZGVyaXZlZCBjbGFzc2VzIHRvIGNvbnRyb2wgZGVhbGxvY2F0aW9uCisgICAgICB2aXJ0dWFsIHZvaWQgX01fZGVzdHJveSgpID0gMDsKKworICAgICAgc3RydWN0IF9EZWxldGVyCisgICAgICB7CisJdm9pZCBvcGVyYXRvcigpKF9SZXN1bHRfYmFzZSogX19mcikgY29uc3QgeyBfX2ZyLT5fTV9kZXN0cm95KCk7IH0KKyAgICAgIH07CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfUmVzdWx0X2Jhc2UoKTsKKyAgICAgIHZpcnR1YWwgfl9SZXN1bHRfYmFzZSgpOworICAgIH07CisKKyAgICAvLy8gUmVzdWx0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgICBzdHJ1Y3QgX1Jlc3VsdCA6IF9SZXN1bHRfYmFzZQorICAgICAgeworICAgICAgcHJpdmF0ZToKKwl0eXBlZGVmIGFsaWdubWVudF9vZjxfUmVzPgkJCQlfX2Ffb2Y7CisJdHlwZWRlZiBhbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKF9SZXMpLCBfX2Ffb2Y6OnZhbHVlPglfX2FsaWduX3N0b3JhZ2U7CisJdHlwZWRlZiB0eXBlbmFtZSBfX2FsaWduX3N0b3JhZ2U6OnR5cGUJCQlfX2FsaWduX3R5cGU7CisKKwlfX2FsaWduX3R5cGUJCV9NX3N0b3JhZ2U7CisJYm9vbCAJCQlfTV9pbml0aWFsaXplZDsKKworICAgICAgcHVibGljOgorCXR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKworCV9SZXN1bHQoKSBub2V4Y2VwdCA6IF9NX2luaXRpYWxpemVkKCkgeyB9CisJCisJfl9SZXN1bHQoKQorCXsKKwkgIGlmIChfTV9pbml0aWFsaXplZCkKKwkgICAgX01fdmFsdWUoKS5+X1JlcygpOworCX0KKworCS8vIFJldHVybiBsdmFsdWUsIGZ1dHVyZSB3aWxsIGFkZCBjb25zdCBvciBydmFsdWUtcmVmZXJlbmNlCisJX1JlcyYKKwlfTV92YWx1ZSgpIG5vZXhjZXB0IHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfUmVzKj4oX01fYWRkcigpKTsgfQorCisJdm9pZAorCV9NX3NldChjb25zdCBfUmVzJiBfX3JlcykKKwl7CisJICA6Om5ldyAoX01fYWRkcigpKSBfUmVzKF9fcmVzKTsKKwkgIF9NX2luaXRpYWxpemVkID0gdHJ1ZTsKKwl9CisKKwl2b2lkCisJX01fc2V0KF9SZXMmJiBfX3JlcykKKwl7CisJICA6Om5ldyAoX01fYWRkcigpKSBfUmVzKHN0ZDo6bW92ZShfX3JlcykpOworCSAgX01faW5pdGlhbGl6ZWQgPSB0cnVlOworCX0KKworICAgICAgcHJpdmF0ZToKKwl2b2lkIF9NX2Rlc3Ryb3koKSB7IGRlbGV0ZSB0aGlzOyB9CisKKwl2b2lkKiBfTV9hZGRyKCkgbm9leGNlcHQgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KCZfTV9zdG9yYWdlKTsgfQorICAgIH07CisKKyAgICAvLy8gQSB1bmlxdWVfcHRyIGJhc2VkIG9uIHRoZSBpbnN0YW50aWF0aW5nIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICAgIHVzaW5nIF9QdHIgPSB1bmlxdWVfcHRyPF9SZXMsIF9SZXN1bHRfYmFzZTo6X0RlbGV0ZXI+OworCisgICAgLy8vIFJlc3VsdF9hbGxvYy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgICBzdHJ1Y3QgX1Jlc3VsdF9hbGxvYyBmaW5hbCA6IF9SZXN1bHQ8X1Jlcz4sIF9BbGxvYworICAgICAgeworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPjo6dGVtcGxhdGUKKyAgICAgICAgICByZWJpbmRfYWxsb2M8X1Jlc3VsdF9hbGxvYz4gX19hbGxvY2F0b3JfdHlwZTsKKworICAgICAgICBleHBsaWNpdAorCV9SZXN1bHRfYWxsb2MoY29uc3QgX0FsbG9jJiBfX2EpIDogX1Jlc3VsdDxfUmVzPigpLCBfQWxsb2MoX19hKQorICAgICAgICB7IH0KKwkKKyAgICAgIHByaXZhdGU6CisJdm9pZCBfTV9kZXN0cm95KCkKKyAgICAgICAgeworCSAgdHlwZWRlZiBhbGxvY2F0b3JfdHJhaXRzPF9fYWxsb2NhdG9yX3R5cGU+IF9fdHJhaXRzOworICAgICAgICAgIF9fYWxsb2NhdG9yX3R5cGUgX19hKCp0aGlzKTsKKwkgIF9fdHJhaXRzOjpkZXN0cm95KF9fYSwgdGhpcyk7CisJICBfX3RyYWl0czo6ZGVhbGxvY2F0ZShfX2EsIHRoaXMsIDEpOworICAgICAgICB9CisgICAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICAgIHN0YXRpYyBfUHRyPF9SZXN1bHRfYWxsb2M8X1JlcywgX0FsbG9jYXRvcj4+CisgICAgICBfU19hbGxvY2F0ZV9yZXN1bHQoY29uc3QgX0FsbG9jYXRvciYgX19hKQorICAgICAgeworICAgICAgICB0eXBlZGVmIF9SZXN1bHRfYWxsb2M8X1JlcywgX0FsbG9jYXRvcj4JX19yZXN1bHRfdHlwZTsKKwl0eXBlZGVmIGFsbG9jYXRvcl90cmFpdHM8dHlwZW5hbWUgX19yZXN1bHRfdHlwZTo6X19hbGxvY2F0b3JfdHlwZT4KKwkgIF9fdHJhaXRzOworICAgICAgICB0eXBlbmFtZSBfX3RyYWl0czo6YWxsb2NhdG9yX3R5cGUgX19hMihfX2EpOworICAgICAgICBfX3Jlc3VsdF90eXBlKiBfX3AgPSBfX3RyYWl0czo6YWxsb2NhdGUoX19hMiwgMSk7CisgICAgICAgIF9fdHJ5CisJICB7CisJICAgIF9fdHJhaXRzOjpjb25zdHJ1Y3QoX19hMiwgX19wLCBfX2EpOworCSAgfQorICAgICAgICBfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX190cmFpdHM6OmRlYWxsb2NhdGUoX19hMiwgX19wLCAxKTsKKwkgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICB9CisgICAgICAgIHJldHVybiBfUHRyPF9fcmVzdWx0X3R5cGU+KF9fcCk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVHA+CisgICAgICBzdGF0aWMgX1B0cjxfUmVzdWx0PF9SZXM+PgorICAgICAgX1NfYWxsb2NhdGVfcmVzdWx0KGNvbnN0IHN0ZDo6YWxsb2NhdG9yPF9UcD4mIF9fYSkKKyAgICAgIHsKKwlyZXR1cm4gX1B0cjxfUmVzdWx0PF9SZXM+PihuZXcgX1Jlc3VsdDxfUmVzPik7CisgICAgICB9CisKKyAgICAvLy8gQmFzZSBjbGFzcyBmb3Igc3RhdGUgYmV0d2VlbiBhIHByb21pc2UgYW5kIG9uZSBvciBtb3JlCisgICAgLy8vIGFzc29jaWF0ZWQgZnV0dXJlcy4KKyAgICBjbGFzcyBfU3RhdGVfYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgX1B0cjxfUmVzdWx0X2Jhc2U+IF9QdHJfdHlwZTsKKworICAgICAgX1B0cl90eXBlCQkJX01fcmVzdWx0OworICAgICAgbXV0ZXggICAgICAgICAgICAgICAJX01fbXV0ZXg7CisgICAgICBjb25kaXRpb25fdmFyaWFibGUgIAlfTV9jb25kOworICAgICAgYXRvbWljX2ZsYWcgICAgICAgICAJX01fcmV0cmlldmVkOworICAgICAgb25jZV9mbGFnCQkJX01fb25jZTsKKworICAgIHB1YmxpYzoKKyAgICAgIF9TdGF0ZV9iYXNlKCkgbm9leGNlcHQgOiBfTV9yZXN1bHQoKSwgX01fcmV0cmlldmVkKEFUT01JQ19GTEFHX0lOSVQpIHsgfQorICAgICAgX1N0YXRlX2Jhc2UoY29uc3QgX1N0YXRlX2Jhc2UmKSA9IGRlbGV0ZTsKKyAgICAgIF9TdGF0ZV9iYXNlJiBvcGVyYXRvcj0oY29uc3QgX1N0YXRlX2Jhc2UmKSA9IGRlbGV0ZTsKKyAgICAgIHZpcnR1YWwgfl9TdGF0ZV9iYXNlKCk7CisKKyAgICAgIF9SZXN1bHRfYmFzZSYKKyAgICAgIHdhaXQoKQorICAgICAgeworCV9NX3J1bl9kZWZlcnJlZCgpOworCXVuaXF1ZV9sb2NrPG11dGV4PiBfX2xvY2soX01fbXV0ZXgpOworCV9NX2NvbmQud2FpdChfX2xvY2ssIFsmXSB7IHJldHVybiBfTV9yZWFkeSgpOyB9KTsKKwlyZXR1cm4gKl9NX3Jlc3VsdDsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKyAgICAgICAgZnV0dXJlX3N0YXR1cworICAgICAgICB3YWl0X2Zvcihjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3JlbCkKKyAgICAgICAgeworCSAgdW5pcXVlX2xvY2s8bXV0ZXg+IF9fbG9jayhfTV9tdXRleCk7CisJICBpZiAoX01fY29uZC53YWl0X2ZvcihfX2xvY2ssIF9fcmVsLCBbJl0geyByZXR1cm4gX01fcmVhZHkoKTsgfSkpCisJICAgIHJldHVybiBmdXR1cmVfc3RhdHVzOjpyZWFkeTsKKwkgIHJldHVybiBmdXR1cmVfc3RhdHVzOjp0aW1lb3V0OworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24+CisgICAgICAgIGZ1dHVyZV9zdGF0dXMKKyAgICAgICAgd2FpdF91bnRpbChjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24+JiBfX2FicykKKyAgICAgICAgeworCSAgdW5pcXVlX2xvY2s8bXV0ZXg+IF9fbG9jayhfTV9tdXRleCk7CisJICBpZiAoX01fY29uZC53YWl0X3VudGlsKF9fbG9jaywgX19hYnMsIFsmXSB7IHJldHVybiBfTV9yZWFkeSgpOyB9KSkKKwkgICAgcmV0dXJuIGZ1dHVyZV9zdGF0dXM6OnJlYWR5OworCSAgcmV0dXJuIGZ1dHVyZV9zdGF0dXM6OnRpbWVvdXQ7CisJfQorCisgICAgICB2b2lkCisgICAgICBfTV9zZXRfcmVzdWx0KGZ1bmN0aW9uPF9QdHJfdHlwZSgpPiBfX3JlcywgYm9vbCBfX2lnbm9yZV9mYWlsdXJlID0gZmFsc2UpCisgICAgICB7CisgICAgICAgIGJvb2wgX19zZXQgPSBfX2lnbm9yZV9mYWlsdXJlOworICAgICAgICAvLyBhbGwgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBhcmUgc2VyaWFsaXplZCwKKyAgICAgICAgLy8gc2lkZS1lZmZlY3RzIG9mIGludm9raW5nIF9fcmVzIG9ubHkgaGFwcGVuIG9uY2UKKyAgICAgICAgY2FsbF9vbmNlKF9NX29uY2UsICZfU3RhdGVfYmFzZTo6X01fZG9fc2V0LCB0aGlzLCByZWYoX19yZXMpLAorICAgICAgICAgICAgcmVmKF9fc2V0KSk7CisgICAgICAgIGlmICghX19zZXQpCisgICAgICAgICAgX190aHJvd19mdXR1cmVfZXJyb3IoaW50KGZ1dHVyZV9lcnJjOjpwcm9taXNlX2FscmVhZHlfc2F0aXNmaWVkKSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2JyZWFrX3Byb21pc2UoX1B0cl90eXBlIF9fcmVzKQorICAgICAgeworCWlmIChzdGF0aWNfY2FzdDxib29sPihfX3JlcykpCisJICB7CisJICAgIGVycm9yX2NvZGUgX19lYyhtYWtlX2Vycm9yX2NvZGUoZnV0dXJlX2VycmM6OmJyb2tlbl9wcm9taXNlKSk7CisJICAgIF9fcmVzLT5fTV9lcnJvciA9IGNvcHlfZXhjZXB0aW9uKGZ1dHVyZV9lcnJvcihfX2VjKSk7CisJICAgIHsKKwkgICAgICBsb2NrX2d1YXJkPG11dGV4PiBfX2xvY2soX01fbXV0ZXgpOworCSAgICAgIF9NX3Jlc3VsdC5zd2FwKF9fcmVzKTsKKwkgICAgfQorCSAgICBfTV9jb25kLm5vdGlmeV9hbGwoKTsKKwkgIH0KKyAgICAgIH0KKworICAgICAgLy8gQ2FsbGVkIHdoZW4gdGhpcyBvYmplY3QgaXMgcGFzc2VkIHRvIGEgZnV0dXJlLgorICAgICAgdm9pZAorICAgICAgX01fc2V0X3JldHJpZXZlZF9mbGFnKCkKKyAgICAgIHsKKwlpZiAoX01fcmV0cmlldmVkLnRlc3RfYW5kX3NldCgpKQorCSAgX190aHJvd19mdXR1cmVfZXJyb3IoaW50KGZ1dHVyZV9lcnJjOjpmdXR1cmVfYWxyZWFkeV9yZXRyaWV2ZWQpKTsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0FyZz4KKyAgICAgICAgc3RydWN0IF9TZXR0ZXI7CisKKyAgICAgIC8vIHNldCBsdmFsdWVzCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQXJnPgorICAgICAgICBzdHJ1Y3QgX1NldHRlcjxfUmVzLCBfQXJnJj4KKyAgICAgICAgeworICAgICAgICAgIC8vIGNoZWNrIHRoaXMgaXMgb25seSB1c2VkIGJ5IHByb21pc2U8Uj46OnNldF92YWx1ZShjb25zdCBSJikKKyAgICAgICAgICAvLyBvciBwcm9taXNlPFI+OjpzZXRfdmFsdWUoUiYpCisgICAgICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPF9SZXMsIF9BcmcmPjo6dmFsdWUgIC8vIHByb21pc2U8UiY+CisgICAgICAgICAgICAgIHx8IGlzX3NhbWU8Y29uc3QgX1JlcywgX0FyZz46OnZhbHVlLCAgLy8gcHJvbWlzZTxSPgorICAgICAgICAgICAgICAiSW52YWxpZCBzcGVjaWFsaXNhdGlvbiIpOworCisgICAgICAgICAgdHlwZW5hbWUgcHJvbWlzZTxfUmVzPjo6X1B0cl90eXBlIG9wZXJhdG9yKCkoKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIF9TdGF0ZV9iYXNlOjpfU19jaGVjayhfTV9wcm9taXNlLT5fTV9mdXR1cmUpOworICAgICAgICAgICAgX01fcHJvbWlzZS0+X01fc3RvcmFnZS0+X01fc2V0KF9NX2FyZyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9NX3Byb21pc2UtPl9NX3N0b3JhZ2UpOworICAgICAgICAgIH0KKyAgICAgICAgICBwcm9taXNlPF9SZXM+KiAgICBfTV9wcm9taXNlOworICAgICAgICAgIF9BcmcmICAgICAgICAgICAgIF9NX2FyZzsKKyAgICAgICAgfTsKKworICAgICAgLy8gc2V0IHJ2YWx1ZXMKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgICAgIHN0cnVjdCBfU2V0dGVyPF9SZXMsIF9SZXMmJj4KKyAgICAgICAgeworICAgICAgICAgIHR5cGVuYW1lIHByb21pc2U8X1Jlcz46Ol9QdHJfdHlwZSBvcGVyYXRvcigpKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBfU3RhdGVfYmFzZTo6X1NfY2hlY2soX01fcHJvbWlzZS0+X01fZnV0dXJlKTsKKyAgICAgICAgICAgIF9NX3Byb21pc2UtPl9NX3N0b3JhZ2UtPl9NX3NldChzdGQ6Om1vdmUoX01fYXJnKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9NX3Byb21pc2UtPl9NX3N0b3JhZ2UpOworICAgICAgICAgIH0KKyAgICAgICAgICBwcm9taXNlPF9SZXM+KiAgICBfTV9wcm9taXNlOworICAgICAgICAgIF9SZXMmICAgICAgICAgICAgIF9NX2FyZzsKKyAgICAgICAgfTsKKworICAgICAgc3RydWN0IF9fZXhjZXB0aW9uX3B0cl90YWcgeyB9OworCisgICAgICAvLyBzZXQgZXhjZXB0aW9ucworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICAgICAgc3RydWN0IF9TZXR0ZXI8X1JlcywgX19leGNlcHRpb25fcHRyX3RhZz4KKyAgICAgICAgeworICAgICAgICAgIHR5cGVuYW1lIHByb21pc2U8X1Jlcz46Ol9QdHJfdHlwZSBvcGVyYXRvcigpKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBfU3RhdGVfYmFzZTo6X1NfY2hlY2soX01fcHJvbWlzZS0+X01fZnV0dXJlKTsKKyAgICAgICAgICAgIF9NX3Byb21pc2UtPl9NX3N0b3JhZ2UtPl9NX2Vycm9yID0gX01fZXg7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9NX3Byb21pc2UtPl9NX3N0b3JhZ2UpOworICAgICAgICAgIH0KKworICAgICAgICAgIHByb21pc2U8X1Jlcz4qICAgX01fcHJvbWlzZTsKKyAgICAgICAgICBleGNlcHRpb25fcHRyJiAgICBfTV9leDsKKyAgICAgICAgfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0FyZz4KKyAgICAgICAgc3RhdGljIF9TZXR0ZXI8X1JlcywgX0FyZyYmPgorICAgICAgICBfX3NldHRlcihwcm9taXNlPF9SZXM+KiBfX3Byb20sIF9BcmcmJiBfX2FyZykKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfU2V0dGVyPF9SZXMsIF9BcmcmJj57IF9fcHJvbSwgX19hcmcgfTsKKyAgICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgICAgICBzdGF0aWMgX1NldHRlcjxfUmVzLCBfX2V4Y2VwdGlvbl9wdHJfdGFnPgorICAgICAgICBfX3NldHRlcihleGNlcHRpb25fcHRyJiBfX2V4LCBwcm9taXNlPF9SZXM+KiBfX3Byb20pCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX1NldHRlcjxfUmVzLCBfX2V4Y2VwdGlvbl9wdHJfdGFnPnsgX19wcm9tLCBfX2V4IH07CisgICAgICAgIH0KKworICAgICAgc3RhdGljIF9TZXR0ZXI8dm9pZCwgdm9pZD4KKyAgICAgIF9fc2V0dGVyKHByb21pc2U8dm9pZD4qIF9fcHJvbSk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHZvaWQKKyAgICAgICAgX1NfY2hlY2soY29uc3Qgc2hhcmVkX3B0cjxfVHA+JiBfX3ApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KF9fcCkpCisgICAgICAgICAgICBfX3Rocm93X2Z1dHVyZV9lcnJvcigoaW50KWZ1dHVyZV9lcnJjOjpub19zdGF0ZSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9kb19zZXQoZnVuY3Rpb248X1B0cl90eXBlKCk+JiBfX2YsIGJvb2wmIF9fc2V0KQorICAgICAgeworICAgICAgICBfUHRyX3R5cGUgX19yZXMgPSBfX2YoKTsKKyAgICAgICAgeworICAgICAgICAgIGxvY2tfZ3VhcmQ8bXV0ZXg+IF9fbG9jayhfTV9tdXRleCk7CisgICAgICAgICAgX01fcmVzdWx0LnN3YXAoX19yZXMpOworICAgICAgICB9CisgICAgICAgIF9NX2NvbmQubm90aWZ5X2FsbCgpOworICAgICAgICBfX3NldCA9IHRydWU7CisgICAgICB9CisKKyAgICAgIGJvb2wgX01fcmVhZHkoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihfTV9yZXN1bHQpOyB9CisKKyAgICAgIC8vIE1pc25hbWVkOiB3YWl0cyBmb3IgY29tcGxldGlvbiBvZiBhc3luYyBmdW5jdGlvbi4KKyAgICAgIHZpcnR1YWwgdm9pZCBfTV9ydW5fZGVmZXJyZWQoKSB7IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JvdW5kRm4sIHR5cGVuYW1lID0gdHlwZW5hbWUgX0JvdW5kRm46OnJlc3VsdF90eXBlPgorICAgICAgY2xhc3MgX0RlZmVycmVkX3N0YXRlOworCisgICAgY2xhc3MgX0FzeW5jX3N0YXRlX2NvbW1vbjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Cb3VuZEZuLCB0eXBlbmFtZSA9IHR5cGVuYW1lIF9Cb3VuZEZuOjpyZXN1bHRfdHlwZT4KKyAgICAgIGNsYXNzIF9Bc3luY19zdGF0ZV9pbXBsOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICAgIGNsYXNzIF9UYXNrX3N0YXRlX2Jhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICAgIGNsYXNzIF9UYXNrX3N0YXRlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JvdW5kRm4+CisgICAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPF9TdGF0ZV9iYXNlPgorICAgICAgX1NfbWFrZV9kZWZlcnJlZF9zdGF0ZShfQm91bmRGbiYmIF9fZm4pOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JvdW5kRm4+CisgICAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPF9TdGF0ZV9iYXNlPgorICAgICAgX1NfbWFrZV9hc3luY19zdGF0ZShfQm91bmRGbiYmIF9fZm4pOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc19wdHIsCisJICAgICB0eXBlbmFtZSBfUmVzID0gdHlwZW5hbWUgX1Jlc19wdHI6OmVsZW1lbnRfdHlwZTo6cmVzdWx0X3R5cGU+CisgICAgICBzdHJ1Y3QgX1Rhc2tfc2V0dGVyOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc19wdHIsIHR5cGVuYW1lIF9Cb3VuZEZuPgorICAgICAgc3RhdGljIF9UYXNrX3NldHRlcjxfUmVzX3B0cj4KKyAgICAgIF9TX3Rhc2tfc2V0dGVyKF9SZXNfcHRyJiBfX3B0ciwgX0JvdW5kRm4mJiBfX2NhbGwpCisgICAgICB7CisJcmV0dXJuIF9UYXNrX3NldHRlcjxfUmVzX3B0cj57IF9fcHRyLCBzdGQ6OnJlZihfX2NhbGwpIH07CisgICAgICB9CisgIH07CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHJlZmVyZW5jZSB0eXBlcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBzdHJ1Y3QgX19mdXR1cmVfYmFzZTo6X1Jlc3VsdDxfUmVzJj4gOiBfX2Z1dHVyZV9iYXNlOjpfUmVzdWx0X2Jhc2UKKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMmIHJlc3VsdF90eXBlOworCisgICAgICBfUmVzdWx0KCkgbm9leGNlcHQgOiBfTV92YWx1ZV9wdHIoKSB7IH0KKworICAgICAgdm9pZCBfTV9zZXQoX1JlcyYgX19yZXMpIG5vZXhjZXB0IHsgX01fdmFsdWVfcHRyID0gJl9fcmVzOyB9CisKKyAgICAgIF9SZXMmIF9NX2dldCgpIG5vZXhjZXB0IHsgcmV0dXJuICpfTV92YWx1ZV9wdHI7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfUmVzKiAJCQlfTV92YWx1ZV9wdHI7CisKKyAgICAgIHZvaWQgX01fZGVzdHJveSgpIHsgZGVsZXRlIHRoaXM7IH0KKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3Igdm9pZC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2Z1dHVyZV9iYXNlOjpfUmVzdWx0PHZvaWQ+IDogX19mdXR1cmVfYmFzZTo6X1Jlc3VsdF9iYXNlCisgICAgeworICAgICAgdHlwZWRlZiB2b2lkIHJlc3VsdF90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQgX01fZGVzdHJveSgpIHsgZGVsZXRlIHRoaXM7IH0KKyAgICB9OworCisKKyAgLy8vIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgZnV0dXJlIGFuZCBzaGFyZWRfZnV0dXJlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIF9fYmFzaWNfZnV0dXJlIDogcHVibGljIF9fZnV0dXJlX2Jhc2UKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdHlwZWRlZiBzaGFyZWRfcHRyPF9TdGF0ZV9iYXNlPgkJX19zdGF0ZV90eXBlOworICAgICAgdHlwZWRlZiBfX2Z1dHVyZV9iYXNlOjpfUmVzdWx0PF9SZXM+JglfX3Jlc3VsdF90eXBlOworCisgICAgcHJpdmF0ZToKKyAgICAgIF9fc3RhdGVfdHlwZSAJCV9NX3N0YXRlOworCisgICAgcHVibGljOgorICAgICAgLy8gRGlzYWJsZSBjb3B5aW5nLgorICAgICAgX19iYXNpY19mdXR1cmUoY29uc3QgX19iYXNpY19mdXR1cmUmKSA9IGRlbGV0ZTsKKyAgICAgIF9fYmFzaWNfZnV0dXJlJiBvcGVyYXRvcj0oY29uc3QgX19iYXNpY19mdXR1cmUmKSA9IGRlbGV0ZTsKKworICAgICAgYm9vbAorICAgICAgdmFsaWQoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihfTV9zdGF0ZSk7IH0KKworICAgICAgdm9pZAorICAgICAgd2FpdCgpIGNvbnN0CisgICAgICB7CisgICAgICAgIF9TdGF0ZV9iYXNlOjpfU19jaGVjayhfTV9zdGF0ZSk7CisgICAgICAgIF9NX3N0YXRlLT53YWl0KCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICAgIGZ1dHVyZV9zdGF0dXMKKyAgICAgICAgd2FpdF9mb3IoY29uc3QgY2hyb25vOjpkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19yZWwpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICBfU3RhdGVfYmFzZTo6X1NfY2hlY2soX01fc3RhdGUpOworICAgICAgICAgIHJldHVybiBfTV9zdGF0ZS0+d2FpdF9mb3IoX19yZWwpOworICAgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DbG9jaywgdHlwZW5hbWUgX0R1cmF0aW9uPgorICAgICAgICBmdXR1cmVfc3RhdHVzCisgICAgICAgIHdhaXRfdW50aWwoY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hYnMpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICBfU3RhdGVfYmFzZTo6X1NfY2hlY2soX01fc3RhdGUpOworICAgICAgICAgIHJldHVybiBfTV9zdGF0ZS0+d2FpdF91bnRpbChfX2Ficyk7CisgICAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vLyBXYWl0IGZvciB0aGUgc3RhdGUgdG8gYmUgcmVhZHkgYW5kIHJldGhyb3cgYW55IHN0b3JlZCBleGNlcHRpb24KKyAgICAgIF9fcmVzdWx0X3R5cGUKKyAgICAgIF9NX2dldF9yZXN1bHQoKSBjb25zdAorICAgICAgeworICAgICAgICBfU3RhdGVfYmFzZTo6X1NfY2hlY2soX01fc3RhdGUpOworICAgICAgICBfUmVzdWx0X2Jhc2UmIF9fcmVzID0gX01fc3RhdGUtPndhaXQoKTsKKyAgICAgICAgaWYgKCEoX19yZXMuX01fZXJyb3IgPT0gMCkpCisgICAgICAgICAgcmV0aHJvd19leGNlcHRpb24oX19yZXMuX01fZXJyb3IpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X19yZXN1bHRfdHlwZT4oX19yZXMpOworICAgICAgfQorCisgICAgICB2b2lkIF9NX3N3YXAoX19iYXNpY19mdXR1cmUmIF9fdGhhdCkgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgX01fc3RhdGUuc3dhcChfX3RoYXQuX01fc3RhdGUpOworICAgICAgfQorCisgICAgICAvLyBDb25zdHJ1Y3Rpb24gb2YgYSBmdXR1cmUgYnkgcHJvbWlzZTo6Z2V0X2Z1dHVyZSgpCisgICAgICBleHBsaWNpdAorICAgICAgX19iYXNpY19mdXR1cmUoY29uc3QgX19zdGF0ZV90eXBlJiBfX3N0YXRlKSA6IF9NX3N0YXRlKF9fc3RhdGUpCisgICAgICB7CisgICAgICAgIF9TdGF0ZV9iYXNlOjpfU19jaGVjayhfTV9zdGF0ZSk7CisgICAgICAgIF9NX3N0YXRlLT5fTV9zZXRfcmV0cmlldmVkX2ZsYWcoKTsKKyAgICAgIH0KKworICAgICAgLy8gQ29weSBjb25zdHJ1Y3Rpb24gZnJvbSBhIHNoYXJlZF9mdXR1cmUKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX2Jhc2ljX2Z1dHVyZShjb25zdCBzaGFyZWRfZnV0dXJlPF9SZXM+Jikgbm9leGNlcHQ7CisKKyAgICAgIC8vIE1vdmUgY29uc3RydWN0aW9uIGZyb20gYSBzaGFyZWRfZnV0dXJlCisgICAgICBleHBsaWNpdAorICAgICAgX19iYXNpY19mdXR1cmUoc2hhcmVkX2Z1dHVyZTxfUmVzPiYmKSBub2V4Y2VwdDsKKworICAgICAgLy8gTW92ZSBjb25zdHJ1Y3Rpb24gZnJvbSBhIGZ1dHVyZQorICAgICAgZXhwbGljaXQKKyAgICAgIF9fYmFzaWNfZnV0dXJlKGZ1dHVyZTxfUmVzPiYmKSBub2V4Y2VwdDsKKworICAgICAgY29uc3RleHByIF9fYmFzaWNfZnV0dXJlKCkgbm9leGNlcHQgOiBfTV9zdGF0ZSgpIHsgfQorCisgICAgICBzdHJ1Y3QgX1Jlc2V0CisgICAgICB7CisgICAgICAgIGV4cGxpY2l0IF9SZXNldChfX2Jhc2ljX2Z1dHVyZSYgX19mdXQpIG5vZXhjZXB0IDogX01fZnV0KF9fZnV0KSB7IH0KKyAgICAgICAgfl9SZXNldCgpIHsgX01fZnV0Ll9NX3N0YXRlLnJlc2V0KCk7IH0KKyAgICAgICAgX19iYXNpY19mdXR1cmUmIF9NX2Z1dDsKKyAgICAgIH07CisgICAgfTsKKworCisgIC8vLyBQcmltYXJ5IHRlbXBsYXRlIGZvciBmdXR1cmUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgY2xhc3MgZnV0dXJlIDogcHVibGljIF9fYmFzaWNfZnV0dXJlPF9SZXM+CisgICAgeworICAgICAgZnJpZW5kIGNsYXNzIHByb21pc2U8X1Jlcz47CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIHBhY2thZ2VkX3Rhc2s7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBmcmllbmQgZnV0dXJlPHR5cGVuYW1lIHJlc3VsdF9vZjxfRm4oX0FyZ3MuLi4pPjo6dHlwZT4KKyAgICAgICAgYXN5bmMobGF1bmNoLCBfRm4mJiwgX0FyZ3MmJi4uLik7CisKKyAgICAgIHR5cGVkZWYgX19iYXNpY19mdXR1cmU8X1Jlcz4gX0Jhc2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2VfdHlwZTo6X19zdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIGZ1dHVyZShjb25zdCBfX3N0YXRlX3R5cGUmIF9fc3RhdGUpIDogX0Jhc2VfdHlwZShfX3N0YXRlKSB7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIGNvbnN0ZXhwciBmdXR1cmUoKSBub2V4Y2VwdCA6IF9CYXNlX3R5cGUoKSB7IH0KKworICAgICAgLy8vIE1vdmUgY29uc3RydWN0b3IKKyAgICAgIGZ1dHVyZShmdXR1cmUmJiBfX3VmKSBub2V4Y2VwdCA6IF9CYXNlX3R5cGUoc3RkOjptb3ZlKF9fdWYpKSB7IH0KKworICAgICAgLy8gRGlzYWJsZSBjb3B5aW5nCisgICAgICBmdXR1cmUoY29uc3QgZnV0dXJlJikgPSBkZWxldGU7CisgICAgICBmdXR1cmUmIG9wZXJhdG9yPShjb25zdCBmdXR1cmUmKSA9IGRlbGV0ZTsKKworICAgICAgZnV0dXJlJiBvcGVyYXRvcj0oZnV0dXJlJiYgX19mdXQpIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIGZ1dHVyZShzdGQ6Om1vdmUoX19mdXQpKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIF9SZXMKKyAgICAgIGdldCgpCisgICAgICB7CisgICAgICAgIHR5cGVuYW1lIF9CYXNlX3R5cGU6Ol9SZXNldCBfX3Jlc2V0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZSh0aGlzLT5fTV9nZXRfcmVzdWx0KCkuX01fdmFsdWUoKSk7CisgICAgICB9CisKKyAgICAgIHNoYXJlZF9mdXR1cmU8X1Jlcz4gc2hhcmUoKTsKKyAgICB9OworCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBmdXR1cmU8UiY+CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgY2xhc3MgZnV0dXJlPF9SZXMmPiA6IHB1YmxpYyBfX2Jhc2ljX2Z1dHVyZTxfUmVzJj4KKyAgICB7CisgICAgICBmcmllbmQgY2xhc3MgcHJvbWlzZTxfUmVzJj47CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIHBhY2thZ2VkX3Rhc2s7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBmcmllbmQgZnV0dXJlPHR5cGVuYW1lIHJlc3VsdF9vZjxfRm4oX0FyZ3MuLi4pPjo6dHlwZT4KKyAgICAgICAgYXN5bmMobGF1bmNoLCBfRm4mJiwgX0FyZ3MmJi4uLik7CisKKyAgICAgIHR5cGVkZWYgX19iYXNpY19mdXR1cmU8X1JlcyY+IF9CYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlX3R5cGU6Ol9fc3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBmdXR1cmUoY29uc3QgX19zdGF0ZV90eXBlJiBfX3N0YXRlKSA6IF9CYXNlX3R5cGUoX19zdGF0ZSkgeyB9CisKKyAgICBwdWJsaWM6CisgICAgICBjb25zdGV4cHIgZnV0dXJlKCkgbm9leGNlcHQgOiBfQmFzZV90eXBlKCkgeyB9CisKKyAgICAgIC8vLyBNb3ZlIGNvbnN0cnVjdG9yCisgICAgICBmdXR1cmUoZnV0dXJlJiYgX191Zikgbm9leGNlcHQgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3VmKSkgeyB9CisKKyAgICAgIC8vIERpc2FibGUgY29weWluZworICAgICAgZnV0dXJlKGNvbnN0IGZ1dHVyZSYpID0gZGVsZXRlOworICAgICAgZnV0dXJlJiBvcGVyYXRvcj0oY29uc3QgZnV0dXJlJikgPSBkZWxldGU7CisKKyAgICAgIGZ1dHVyZSYgb3BlcmF0b3I9KGZ1dHVyZSYmIF9fZnV0KSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBmdXR1cmUoc3RkOjptb3ZlKF9fZnV0KSkuX01fc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8vIFJldHJpZXZpbmcgdGhlIHZhbHVlCisgICAgICBfUmVzJgorICAgICAgZ2V0KCkKKyAgICAgIHsKKyAgICAgICAgdHlwZW5hbWUgX0Jhc2VfdHlwZTo6X1Jlc2V0IF9fcmVzZXQoKnRoaXMpOworICAgICAgICByZXR1cm4gdGhpcy0+X01fZ2V0X3Jlc3VsdCgpLl9NX2dldCgpOworICAgICAgfQorCisgICAgICBzaGFyZWRfZnV0dXJlPF9SZXMmPiBzaGFyZSgpOworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGZvciBmdXR1cmU8dm9pZD4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIGZ1dHVyZTx2b2lkPiA6IHB1YmxpYyBfX2Jhc2ljX2Z1dHVyZTx2b2lkPgorICAgIHsKKyAgICAgIGZyaWVuZCBjbGFzcyBwcm9taXNlPHZvaWQ+OworICAgICAgdGVtcGxhdGU8dHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBwYWNrYWdlZF90YXNrOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZuLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgZnJpZW5kIGZ1dHVyZTx0eXBlbmFtZSByZXN1bHRfb2Y8X0ZuKF9BcmdzLi4uKT46OnR5cGU+CisgICAgICAgIGFzeW5jKGxhdW5jaCwgX0ZuJiYsIF9BcmdzJiYuLi4pOworCisgICAgICB0eXBlZGVmIF9fYmFzaWNfZnV0dXJlPHZvaWQ+IF9CYXNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlX3R5cGU6Ol9fc3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBmdXR1cmUoY29uc3QgX19zdGF0ZV90eXBlJiBfX3N0YXRlKSA6IF9CYXNlX3R5cGUoX19zdGF0ZSkgeyB9CisKKyAgICBwdWJsaWM6CisgICAgICBjb25zdGV4cHIgZnV0dXJlKCkgbm9leGNlcHQgOiBfQmFzZV90eXBlKCkgeyB9CisKKyAgICAgIC8vLyBNb3ZlIGNvbnN0cnVjdG9yCisgICAgICBmdXR1cmUoZnV0dXJlJiYgX191Zikgbm9leGNlcHQgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3VmKSkgeyB9CisKKyAgICAgIC8vIERpc2FibGUgY29weWluZworICAgICAgZnV0dXJlKGNvbnN0IGZ1dHVyZSYpID0gZGVsZXRlOworICAgICAgZnV0dXJlJiBvcGVyYXRvcj0oY29uc3QgZnV0dXJlJikgPSBkZWxldGU7CisKKyAgICAgIGZ1dHVyZSYgb3BlcmF0b3I9KGZ1dHVyZSYmIF9fZnV0KSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBmdXR1cmUoc3RkOjptb3ZlKF9fZnV0KSkuX01fc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8vIFJldHJpZXZpbmcgdGhlIHZhbHVlCisgICAgICB2b2lkCisgICAgICBnZXQoKQorICAgICAgeworICAgICAgICB0eXBlbmFtZSBfQmFzZV90eXBlOjpfUmVzZXQgX19yZXNldCgqdGhpcyk7CisgICAgICAgIHRoaXMtPl9NX2dldF9yZXN1bHQoKTsKKyAgICAgIH0KKworICAgICAgc2hhcmVkX2Z1dHVyZTx2b2lkPiBzaGFyZSgpOworICAgIH07CisKKworICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZSBmb3Igc2hhcmVkX2Z1dHVyZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBjbGFzcyBzaGFyZWRfZnV0dXJlIDogcHVibGljIF9fYmFzaWNfZnV0dXJlPF9SZXM+CisgICAgeworICAgICAgdHlwZWRlZiBfX2Jhc2ljX2Z1dHVyZTxfUmVzPiBfQmFzZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgY29uc3RleHByIHNoYXJlZF9mdXR1cmUoKSBub2V4Y2VwdCA6IF9CYXNlX3R5cGUoKSB7IH0KKworICAgICAgLy8vIENvcHkgY29uc3RydWN0b3IKKyAgICAgIHNoYXJlZF9mdXR1cmUoY29uc3Qgc2hhcmVkX2Z1dHVyZSYgX19zZikgOiBfQmFzZV90eXBlKF9fc2YpIHsgfQorCisgICAgICAvLy8gQ29uc3RydWN0IGZyb20gYSBmdXR1cmUgcnZhbHVlCisgICAgICBzaGFyZWRfZnV0dXJlKGZ1dHVyZTxfUmVzPiYmIF9fdWYpIG5vZXhjZXB0CisgICAgICA6IF9CYXNlX3R5cGUoc3RkOjptb3ZlKF9fdWYpKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBDb25zdHJ1Y3QgZnJvbSBhIHNoYXJlZF9mdXR1cmUgcnZhbHVlCisgICAgICBzaGFyZWRfZnV0dXJlKHNoYXJlZF9mdXR1cmUmJiBfX3NmKSBub2V4Y2VwdAorICAgICAgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3NmKSkKKyAgICAgIHsgfQorCisgICAgICBzaGFyZWRfZnV0dXJlJiBvcGVyYXRvcj0oY29uc3Qgc2hhcmVkX2Z1dHVyZSYgX19zZikKKyAgICAgIHsKKyAgICAgICAgc2hhcmVkX2Z1dHVyZShfX3NmKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBzaGFyZWRfZnV0dXJlJiBvcGVyYXRvcj0oc2hhcmVkX2Z1dHVyZSYmIF9fc2YpIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIHNoYXJlZF9mdXR1cmUoc3RkOjptb3ZlKF9fc2YpKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIGNvbnN0IF9SZXMmCisgICAgICBnZXQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5fTV9nZXRfcmVzdWx0KCkuX01fdmFsdWUoKTsgfQorICAgIH07CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHNoYXJlZF9mdXR1cmU8UiY+CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgY2xhc3Mgc2hhcmVkX2Z1dHVyZTxfUmVzJj4gOiBwdWJsaWMgX19iYXNpY19mdXR1cmU8X1JlcyY+CisgICAgeworICAgICAgdHlwZWRlZiBfX2Jhc2ljX2Z1dHVyZTxfUmVzJj4gICAgICAgICAgIF9CYXNlX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICBjb25zdGV4cHIgc2hhcmVkX2Z1dHVyZSgpIG5vZXhjZXB0IDogX0Jhc2VfdHlwZSgpIHsgfQorCisgICAgICAvLy8gQ29weSBjb25zdHJ1Y3RvcgorICAgICAgc2hhcmVkX2Z1dHVyZShjb25zdCBzaGFyZWRfZnV0dXJlJiBfX3NmKSA6IF9CYXNlX3R5cGUoX19zZikgeyB9CisKKyAgICAgIC8vLyBDb25zdHJ1Y3QgZnJvbSBhIGZ1dHVyZSBydmFsdWUKKyAgICAgIHNoYXJlZF9mdXR1cmUoZnV0dXJlPF9SZXMmPiYmIF9fdWYpIG5vZXhjZXB0CisgICAgICA6IF9CYXNlX3R5cGUoc3RkOjptb3ZlKF9fdWYpKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBDb25zdHJ1Y3QgZnJvbSBhIHNoYXJlZF9mdXR1cmUgcnZhbHVlCisgICAgICBzaGFyZWRfZnV0dXJlKHNoYXJlZF9mdXR1cmUmJiBfX3NmKSBub2V4Y2VwdAorICAgICAgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3NmKSkKKyAgICAgIHsgfQorCisgICAgICBzaGFyZWRfZnV0dXJlJiBvcGVyYXRvcj0oY29uc3Qgc2hhcmVkX2Z1dHVyZSYgX19zZikKKyAgICAgIHsKKyAgICAgICAgc2hhcmVkX2Z1dHVyZShfX3NmKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBzaGFyZWRfZnV0dXJlJiBvcGVyYXRvcj0oc2hhcmVkX2Z1dHVyZSYmIF9fc2YpIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIHNoYXJlZF9mdXR1cmUoc3RkOjptb3ZlKF9fc2YpKS5fTV9zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIF9SZXMmCisgICAgICBnZXQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5fTV9nZXRfcmVzdWx0KCkuX01fZ2V0KCk7IH0KKyAgICB9OworCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbiBmb3Igc2hhcmVkX2Z1dHVyZTx2b2lkPgorICB0ZW1wbGF0ZTw+CisgICAgY2xhc3Mgc2hhcmVkX2Z1dHVyZTx2b2lkPiA6IHB1YmxpYyBfX2Jhc2ljX2Z1dHVyZTx2b2lkPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX19iYXNpY19mdXR1cmU8dm9pZD4gX0Jhc2VfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIGNvbnN0ZXhwciBzaGFyZWRfZnV0dXJlKCkgbm9leGNlcHQgOiBfQmFzZV90eXBlKCkgeyB9CisKKyAgICAgIC8vLyBDb3B5IGNvbnN0cnVjdG9yCisgICAgICBzaGFyZWRfZnV0dXJlKGNvbnN0IHNoYXJlZF9mdXR1cmUmIF9fc2YpIDogX0Jhc2VfdHlwZShfX3NmKSB7IH0KKworICAgICAgLy8vIENvbnN0cnVjdCBmcm9tIGEgZnV0dXJlIHJ2YWx1ZQorICAgICAgc2hhcmVkX2Z1dHVyZShmdXR1cmU8dm9pZD4mJiBfX3VmKSBub2V4Y2VwdAorICAgICAgOiBfQmFzZV90eXBlKHN0ZDo6bW92ZShfX3VmKSkKKyAgICAgIHsgfQorCisgICAgICAvLy8gQ29uc3RydWN0IGZyb20gYSBzaGFyZWRfZnV0dXJlIHJ2YWx1ZQorICAgICAgc2hhcmVkX2Z1dHVyZShzaGFyZWRfZnV0dXJlJiYgX19zZikgbm9leGNlcHQKKyAgICAgIDogX0Jhc2VfdHlwZShzdGQ6Om1vdmUoX19zZikpCisgICAgICB7IH0KKworICAgICAgc2hhcmVkX2Z1dHVyZSYgb3BlcmF0b3I9KGNvbnN0IHNoYXJlZF9mdXR1cmUmIF9fc2YpCisgICAgICB7CisgICAgICAgIHNoYXJlZF9mdXR1cmUoX19zZikuX01fc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgc2hhcmVkX2Z1dHVyZSYgb3BlcmF0b3I9KHNoYXJlZF9mdXR1cmUmJiBfX3NmKSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBzaGFyZWRfZnV0dXJlKHN0ZDo6bW92ZShfX3NmKSkuX01fc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gUmV0cmlldmluZyB0aGUgdmFsdWUKKyAgICAgIHZvaWQKKyAgICAgIGdldCgpIGNvbnN0IHsgdGhpcy0+X01fZ2V0X3Jlc3VsdCgpOyB9CisgICAgfTsKKworICAvLyBOb3cgd2UgY2FuIGRlZmluZSB0aGUgcHJvdGVjdGVkIF9fYmFzaWNfZnV0dXJlIGNvbnN0cnVjdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBpbmxpbmUgX19iYXNpY19mdXR1cmU8X1Jlcz46OgorICAgIF9fYmFzaWNfZnV0dXJlKGNvbnN0IHNoYXJlZF9mdXR1cmU8X1Jlcz4mIF9fc2YpIG5vZXhjZXB0CisgICAgOiBfTV9zdGF0ZShfX3NmLl9NX3N0YXRlKQorICAgIHsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgaW5saW5lIF9fYmFzaWNfZnV0dXJlPF9SZXM+OjoKKyAgICBfX2Jhc2ljX2Z1dHVyZShzaGFyZWRfZnV0dXJlPF9SZXM+JiYgX19zZikgbm9leGNlcHQKKyAgICA6IF9NX3N0YXRlKHN0ZDo6bW92ZShfX3NmLl9NX3N0YXRlKSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGlubGluZSBfX2Jhc2ljX2Z1dHVyZTxfUmVzPjo6CisgICAgX19iYXNpY19mdXR1cmUoZnV0dXJlPF9SZXM+JiYgX191Zikgbm9leGNlcHQKKyAgICA6IF9NX3N0YXRlKHN0ZDo6bW92ZShfX3VmLl9NX3N0YXRlKSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGlubGluZSBzaGFyZWRfZnV0dXJlPF9SZXM+CisgICAgZnV0dXJlPF9SZXM+OjpzaGFyZSgpCisgICAgeyByZXR1cm4gc2hhcmVkX2Z1dHVyZTxfUmVzPihzdGQ6Om1vdmUoKnRoaXMpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgaW5saW5lIHNoYXJlZF9mdXR1cmU8X1JlcyY+CisgICAgZnV0dXJlPF9SZXMmPjo6c2hhcmUoKQorICAgIHsgcmV0dXJuIHNoYXJlZF9mdXR1cmU8X1JlcyY+KHN0ZDo6bW92ZSgqdGhpcykpOyB9CisKKyAgaW5saW5lIHNoYXJlZF9mdXR1cmU8dm9pZD4KKyAgZnV0dXJlPHZvaWQ+OjpzaGFyZSgpCisgIHsgcmV0dXJuIHNoYXJlZF9mdXR1cmU8dm9pZD4oc3RkOjptb3ZlKCp0aGlzKSk7IH0KKworICAvLy8gUHJpbWFyeSB0ZW1wbGF0ZSBmb3IgcHJvbWlzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIHByb21pc2UKKyAgICB7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZV9iYXNlIAlfU3RhdGU7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9SZXN1bHQ8X1Jlcz4JX1Jlc190eXBlOworICAgICAgdHlwZWRlZiBfX2Z1dHVyZV9iYXNlOjpfUHRyPF9SZXNfdHlwZT4JX1B0cl90eXBlOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgX1N0YXRlOjpfU2V0dGVyOworCisgICAgICBzaGFyZWRfcHRyPF9TdGF0ZT4gICAgICAgICAgICAgICAgICAgICAgICBfTV9mdXR1cmU7CisgICAgICBfUHRyX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdG9yYWdlOworCisgICAgcHVibGljOgorICAgICAgcHJvbWlzZSgpCisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1ha2Vfc2hhcmVkPF9TdGF0ZT4oKSksCisJX01fc3RvcmFnZShuZXcgX1Jlc190eXBlKCkpCisgICAgICB7IH0KKworICAgICAgcHJvbWlzZShwcm9taXNlJiYgX19yaHMpIG5vZXhjZXB0CisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1vdmUoX19yaHMuX01fZnV0dXJlKSksCisJX01fc3RvcmFnZShzdGQ6Om1vdmUoX19yaHMuX01fc3RvcmFnZSkpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICAgICAgcHJvbWlzZShhbGxvY2F0b3JfYXJnX3QsIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSkKKyAgICAgICAgOiBfTV9mdXR1cmUoc3RkOjphbGxvY2F0ZV9zaGFyZWQ8X1N0YXRlPihfX2EpKSwKKwkgIF9NX3N0b3JhZ2UoX19mdXR1cmVfYmFzZTo6X1NfYWxsb2NhdGVfcmVzdWx0PF9SZXM+KF9fYSkpCisgICAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgICAgICBwcm9taXNlKGFsbG9jYXRvcl9hcmdfdCwgY29uc3QgX0FsbG9jYXRvciYsIHByb21pc2UmJiBfX3JocykKKyAgICAgICAgOiBfTV9mdXR1cmUoc3RkOjptb3ZlKF9fcmhzLl9NX2Z1dHVyZSkpLAorCSAgX01fc3RvcmFnZShzdGQ6Om1vdmUoX19yaHMuX01fc3RvcmFnZSkpCisgICAgICAgIHsgfQorCisgICAgICBwcm9taXNlKGNvbnN0IHByb21pc2UmKSA9IGRlbGV0ZTsKKworICAgICAgfnByb21pc2UoKQorICAgICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Ym9vbD4oX01fZnV0dXJlKSAmJiAhX01fZnV0dXJlLnVuaXF1ZSgpKQorICAgICAgICAgIF9NX2Z1dHVyZS0+X01fYnJlYWtfcHJvbWlzZShzdGQ6Om1vdmUoX01fc3RvcmFnZSkpOworICAgICAgfQorCisgICAgICAvLyBBc3NpZ25tZW50CisgICAgICBwcm9taXNlJgorICAgICAgb3BlcmF0b3I9KHByb21pc2UmJiBfX3Jocykgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgcHJvbWlzZShzdGQ6Om1vdmUoX19yaHMpKS5zd2FwKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBwcm9taXNlJiBvcGVyYXRvcj0oY29uc3QgcHJvbWlzZSYpID0gZGVsZXRlOworCisgICAgICB2b2lkCisgICAgICBzd2FwKHByb21pc2UmIF9fcmhzKSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBfTV9mdXR1cmUuc3dhcChfX3Jocy5fTV9mdXR1cmUpOworICAgICAgICBfTV9zdG9yYWdlLnN3YXAoX19yaHMuX01fc3RvcmFnZSk7CisgICAgICB9CisKKyAgICAgIC8vIFJldHJpZXZpbmcgdGhlIHJlc3VsdAorICAgICAgZnV0dXJlPF9SZXM+CisgICAgICBnZXRfZnV0dXJlKCkKKyAgICAgIHsgcmV0dXJuIGZ1dHVyZTxfUmVzPihfTV9mdXR1cmUpOyB9CisKKyAgICAgIC8vIFNldHRpbmcgdGhlIHJlc3VsdAorICAgICAgdm9pZAorICAgICAgc2V0X3ZhbHVlKGNvbnN0IF9SZXMmIF9fcikKKyAgICAgIHsKKyAgICAgICAgYXV0byBfX3NldHRlciA9IF9TdGF0ZTo6X19zZXR0ZXIodGhpcywgX19yKTsKKyAgICAgICAgX01fZnV0dXJlLT5fTV9zZXRfcmVzdWx0KHN0ZDo6bW92ZShfX3NldHRlcikpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzZXRfdmFsdWUoX1JlcyYmIF9fcikKKyAgICAgIHsKKyAgICAgICAgYXV0byBfX3NldHRlciA9IF9TdGF0ZTo6X19zZXR0ZXIodGhpcywgc3RkOjptb3ZlKF9fcikpOworICAgICAgICBfTV9mdXR1cmUtPl9NX3NldF9yZXN1bHQoc3RkOjptb3ZlKF9fc2V0dGVyKSk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNldF9leGNlcHRpb24oZXhjZXB0aW9uX3B0ciBfX3ApCisgICAgICB7CisgICAgICAgIGF1dG8gX19zZXR0ZXIgPSBfU3RhdGU6Ol9fc2V0dGVyKF9fcCwgdGhpcyk7CisgICAgICAgIF9NX2Z1dHVyZS0+X01fc2V0X3Jlc3VsdChzdGQ6Om1vdmUoX19zZXR0ZXIpKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXM+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHByb21pc2U8X1Jlcz4mIF9feCwgcHJvbWlzZTxfUmVzPiYgX195KSBub2V4Y2VwdAorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdXNlc19hbGxvY2F0b3I8cHJvbWlzZTxfUmVzPiwgX0FsbG9jPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiBmb3IgcHJvbWlzZTxSJj4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlcz4KKyAgICBjbGFzcyBwcm9taXNlPF9SZXMmPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX19mdXR1cmVfYmFzZTo6X1N0YXRlX2Jhc2UJX1N0YXRlOworICAgICAgdHlwZWRlZiBfX2Z1dHVyZV9iYXNlOjpfUmVzdWx0PF9SZXMmPglfUmVzX3R5cGU7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9QdHI8X1Jlc190eXBlPiAJX1B0cl90eXBlOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgX1N0YXRlOjpfU2V0dGVyOworCisgICAgICBzaGFyZWRfcHRyPF9TdGF0ZT4gICAgICAgICAgICAgICAgICAgICAgICBfTV9mdXR1cmU7CisgICAgICBfUHRyX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdG9yYWdlOworCisgICAgcHVibGljOgorICAgICAgcHJvbWlzZSgpCisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1ha2Vfc2hhcmVkPF9TdGF0ZT4oKSksCisJX01fc3RvcmFnZShuZXcgX1Jlc190eXBlKCkpCisgICAgICB7IH0KKworICAgICAgcHJvbWlzZShwcm9taXNlJiYgX19yaHMpIG5vZXhjZXB0CisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1vdmUoX19yaHMuX01fZnV0dXJlKSksCisJX01fc3RvcmFnZShzdGQ6Om1vdmUoX19yaHMuX01fc3RvcmFnZSkpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICAgICAgcHJvbWlzZShhbGxvY2F0b3JfYXJnX3QsIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSkKKyAgICAgICAgOiBfTV9mdXR1cmUoc3RkOjphbGxvY2F0ZV9zaGFyZWQ8X1N0YXRlPihfX2EpKSwKKwkgIF9NX3N0b3JhZ2UoX19mdXR1cmVfYmFzZTo6X1NfYWxsb2NhdGVfcmVzdWx0PF9SZXMmPihfX2EpKQorICAgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICAgICAgcHJvbWlzZShhbGxvY2F0b3JfYXJnX3QsIGNvbnN0IF9BbGxvY2F0b3ImLCBwcm9taXNlJiYgX19yaHMpCisgICAgICAgIDogX01fZnV0dXJlKHN0ZDo6bW92ZShfX3Jocy5fTV9mdXR1cmUpKSwKKwkgIF9NX3N0b3JhZ2Uoc3RkOjptb3ZlKF9fcmhzLl9NX3N0b3JhZ2UpKQorICAgICAgICB7IH0KKworICAgICAgcHJvbWlzZShjb25zdCBwcm9taXNlJikgPSBkZWxldGU7CisKKyAgICAgIH5wcm9taXNlKCkKKyAgICAgIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGJvb2w+KF9NX2Z1dHVyZSkgJiYgIV9NX2Z1dHVyZS51bmlxdWUoKSkKKyAgICAgICAgICBfTV9mdXR1cmUtPl9NX2JyZWFrX3Byb21pc2Uoc3RkOjptb3ZlKF9NX3N0b3JhZ2UpKTsKKyAgICAgIH0KKworICAgICAgLy8gQXNzaWdubWVudAorICAgICAgcHJvbWlzZSYKKyAgICAgIG9wZXJhdG9yPShwcm9taXNlJiYgX19yaHMpIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIHByb21pc2Uoc3RkOjptb3ZlKF9fcmhzKSkuc3dhcCgqdGhpcyk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgcHJvbWlzZSYgb3BlcmF0b3I9KGNvbnN0IHByb21pc2UmKSA9IGRlbGV0ZTsKKworICAgICAgdm9pZAorICAgICAgc3dhcChwcm9taXNlJiBfX3Jocykgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgX01fZnV0dXJlLnN3YXAoX19yaHMuX01fZnV0dXJlKTsKKyAgICAgICAgX01fc3RvcmFnZS5zd2FwKF9fcmhzLl9NX3N0b3JhZ2UpOworICAgICAgfQorCisgICAgICAvLyBSZXRyaWV2aW5nIHRoZSByZXN1bHQKKyAgICAgIGZ1dHVyZTxfUmVzJj4KKyAgICAgIGdldF9mdXR1cmUoKQorICAgICAgeyByZXR1cm4gZnV0dXJlPF9SZXMmPihfTV9mdXR1cmUpOyB9CisKKyAgICAgIC8vIFNldHRpbmcgdGhlIHJlc3VsdAorICAgICAgdm9pZAorICAgICAgc2V0X3ZhbHVlKF9SZXMmIF9fcikKKyAgICAgIHsKKyAgICAgICAgYXV0byBfX3NldHRlciA9IF9TdGF0ZTo6X19zZXR0ZXIodGhpcywgX19yKTsKKyAgICAgICAgX01fZnV0dXJlLT5fTV9zZXRfcmVzdWx0KHN0ZDo6bW92ZShfX3NldHRlcikpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbl9wdHIgX19wKQorICAgICAgeworICAgICAgICBhdXRvIF9fc2V0dGVyID0gX1N0YXRlOjpfX3NldHRlcihfX3AsIHRoaXMpOworICAgICAgICBfTV9mdXR1cmUtPl9NX3NldF9yZXN1bHQoc3RkOjptb3ZlKF9fc2V0dGVyKSk7CisgICAgICB9CisgICAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZm9yIHByb21pc2U8dm9pZD4KKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIHByb21pc2U8dm9pZD4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZV9iYXNlCV9TdGF0ZTsKKyAgICAgIHR5cGVkZWYgX19mdXR1cmVfYmFzZTo6X1Jlc3VsdDx2b2lkPglfUmVzX3R5cGU7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9QdHI8X1Jlc190eXBlPiAJX1B0cl90eXBlOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgX1N0YXRlOjpfU2V0dGVyOworCisgICAgICBzaGFyZWRfcHRyPF9TdGF0ZT4gICAgICAgICAgICAgICAgICAgICAgICBfTV9mdXR1cmU7CisgICAgICBfUHRyX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdG9yYWdlOworCisgICAgcHVibGljOgorICAgICAgcHJvbWlzZSgpCisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1ha2Vfc2hhcmVkPF9TdGF0ZT4oKSksCisJX01fc3RvcmFnZShuZXcgX1Jlc190eXBlKCkpCisgICAgICB7IH0KKworICAgICAgcHJvbWlzZShwcm9taXNlJiYgX19yaHMpIG5vZXhjZXB0CisgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1vdmUoX19yaHMuX01fZnV0dXJlKSksCisJX01fc3RvcmFnZShzdGQ6Om1vdmUoX19yaHMuX01fc3RvcmFnZSkpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICAgICAgcHJvbWlzZShhbGxvY2F0b3JfYXJnX3QsIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSkKKyAgICAgICAgOiBfTV9mdXR1cmUoc3RkOjphbGxvY2F0ZV9zaGFyZWQ8X1N0YXRlPihfX2EpKSwKKwkgIF9NX3N0b3JhZ2UoX19mdXR1cmVfYmFzZTo6X1NfYWxsb2NhdGVfcmVzdWx0PHZvaWQ+KF9fYSkpCisgICAgICAgIHsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMDk1LiAgbWlzc2luZyBjb25zdHJ1Y3RvcnMgbmVlZGVkIGZvciB1c2VzLWFsbG9jYXRvciBjb25zdHJ1Y3Rpb24KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgICAgIHByb21pc2UoYWxsb2NhdG9yX2FyZ190LCBjb25zdCBfQWxsb2NhdG9yJiwgcHJvbWlzZSYmIF9fcmhzKQorICAgICAgICA6IF9NX2Z1dHVyZShzdGQ6Om1vdmUoX19yaHMuX01fZnV0dXJlKSksCisJICBfTV9zdG9yYWdlKHN0ZDo6bW92ZShfX3Jocy5fTV9zdG9yYWdlKSkKKyAgICAgICAgeyB9CisKKyAgICAgIHByb21pc2UoY29uc3QgcHJvbWlzZSYpID0gZGVsZXRlOworCisgICAgICB+cHJvbWlzZSgpCisgICAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihfTV9mdXR1cmUpICYmICFfTV9mdXR1cmUudW5pcXVlKCkpCisgICAgICAgICAgX01fZnV0dXJlLT5fTV9icmVha19wcm9taXNlKHN0ZDo6bW92ZShfTV9zdG9yYWdlKSk7CisgICAgICB9CisKKyAgICAgIC8vIEFzc2lnbm1lbnQKKyAgICAgIHByb21pc2UmCisgICAgICBvcGVyYXRvcj0ocHJvbWlzZSYmIF9fcmhzKSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBwcm9taXNlKHN0ZDo6bW92ZShfX3JocykpLnN3YXAoKnRoaXMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHByb21pc2UmIG9wZXJhdG9yPShjb25zdCBwcm9taXNlJikgPSBkZWxldGU7CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAocHJvbWlzZSYgX19yaHMpIG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIF9NX2Z1dHVyZS5zd2FwKF9fcmhzLl9NX2Z1dHVyZSk7CisgICAgICAgIF9NX3N0b3JhZ2Uuc3dhcChfX3Jocy5fTV9zdG9yYWdlKTsKKyAgICAgIH0KKworICAgICAgLy8gUmV0cmlldmluZyB0aGUgcmVzdWx0CisgICAgICBmdXR1cmU8dm9pZD4KKyAgICAgIGdldF9mdXR1cmUoKQorICAgICAgeyByZXR1cm4gZnV0dXJlPHZvaWQ+KF9NX2Z1dHVyZSk7IH0KKworICAgICAgLy8gU2V0dGluZyB0aGUgcmVzdWx0CisgICAgICB2b2lkIHNldF92YWx1ZSgpOworCisgICAgICB2b2lkCisgICAgICBzZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbl9wdHIgX19wKQorICAgICAgeworICAgICAgICBhdXRvIF9fc2V0dGVyID0gX1N0YXRlOjpfX3NldHRlcihfX3AsIHRoaXMpOworICAgICAgICBfTV9mdXR1cmUtPl9NX3NldF9yZXN1bHQoc3RkOjptb3ZlKF9fc2V0dGVyKSk7CisgICAgICB9CisgICAgfTsKKworICAvLyBzZXQgdm9pZAorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZV9iYXNlOjpfU2V0dGVyPHZvaWQsIHZvaWQ+CisgICAgeworICAgICAgcHJvbWlzZTx2b2lkPjo6X1B0cl90eXBlIG9wZXJhdG9yKCkoKQorICAgICAgeworICAgICAgICBfU3RhdGVfYmFzZTo6X1NfY2hlY2soX01fcHJvbWlzZS0+X01fZnV0dXJlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfTV9wcm9taXNlLT5fTV9zdG9yYWdlKTsKKyAgICAgIH0KKworICAgICAgcHJvbWlzZTx2b2lkPiogICAgX01fcHJvbWlzZTsKKyAgICB9OworCisgIGlubGluZSBfX2Z1dHVyZV9iYXNlOjpfU3RhdGVfYmFzZTo6X1NldHRlcjx2b2lkLCB2b2lkPgorICBfX2Z1dHVyZV9iYXNlOjpfU3RhdGVfYmFzZTo6X19zZXR0ZXIocHJvbWlzZTx2b2lkPiogX19wcm9tKQorICB7CisgICAgcmV0dXJuIF9TZXR0ZXI8dm9pZCwgdm9pZD57IF9fcHJvbSB9OworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgcHJvbWlzZTx2b2lkPjo6c2V0X3ZhbHVlKCkKKyAgeworICAgIGF1dG8gX19zZXR0ZXIgPSBfU3RhdGU6Ol9fc2V0dGVyKHRoaXMpOworICAgIF9NX2Z1dHVyZS0+X01fc2V0X3Jlc3VsdChzdGQ6Om1vdmUoX19zZXR0ZXIpKTsKKyAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0cl90eXBlLCB0eXBlbmFtZSBfUmVzPgorICAgIHN0cnVjdCBfX2Z1dHVyZV9iYXNlOjpfVGFza19zZXR0ZXIKKyAgICB7CisgICAgICBfUHRyX3R5cGUgb3BlcmF0b3IoKSgpCisgICAgICB7CisJX190cnkKKwkgIHsKKwkgICAgX01fcmVzdWx0LT5fTV9zZXQoX01fZm4oKSk7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX3Jlc3VsdC0+X01fZXJyb3IgPSBjdXJyZW50X2V4Y2VwdGlvbigpOworCSAgfQorCXJldHVybiBzdGQ6Om1vdmUoX01fcmVzdWx0KTsKKyAgICAgIH0KKyAgICAgIF9QdHJfdHlwZSYgICAgICAgICAgICAgICAgX01fcmVzdWx0OworICAgICAgc3RkOjpmdW5jdGlvbjxfUmVzKCk+ICAgICBfTV9mbjsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QdHJfdHlwZT4KKyAgICBzdHJ1Y3QgX19mdXR1cmVfYmFzZTo6X1Rhc2tfc2V0dGVyPF9QdHJfdHlwZSwgdm9pZD4KKyAgICB7CisgICAgICBfUHRyX3R5cGUgb3BlcmF0b3IoKSgpCisgICAgICB7CisJX190cnkKKwkgIHsKKwkgICAgX01fZm4oKTsKKwkgIH0KKwlfX2NhdGNoKC4uLikKKwkgIHsKKwkgICAgX01fcmVzdWx0LT5fTV9lcnJvciA9IGN1cnJlbnRfZXhjZXB0aW9uKCk7CisJICB9CisJcmV0dXJuIHN0ZDo6bW92ZShfTV9yZXN1bHQpOworICAgICAgfQorICAgICAgX1B0cl90eXBlJiAgICAgICAgICAgICAgICBfTV9yZXN1bHQ7CisgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gICAgIF9NX2ZuOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9fZnV0dXJlX2Jhc2U6Ol9UYXNrX3N0YXRlX2Jhc2U8X1JlcyhfQXJncy4uLik+CisgICAgOiBfX2Z1dHVyZV9iYXNlOjpfU3RhdGVfYmFzZQorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyBfUmVzX3R5cGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKwlfVGFza19zdGF0ZV9iYXNlKGNvbnN0IF9BbGxvYyYgX19hKQorCTogX01fcmVzdWx0KF9TX2FsbG9jYXRlX3Jlc3VsdDxfUmVzPihfX2EpKQorCXsgfQorCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX3J1bihfQXJncy4uLiBfX2FyZ3MpID0gMDsKKworICAgICAgdmlydHVhbCBzaGFyZWRfcHRyPF9UYXNrX3N0YXRlX2Jhc2U+CisgICAgICBfTV9yZXNldCgpID0gMDsKKworICAgICAgdHlwZWRlZiBfX2Z1dHVyZV9iYXNlOjpfUHRyPF9SZXN1bHQ8X1Jlcz4+IF9QdHJfdHlwZTsKKyAgICAgIF9QdHJfdHlwZSBfTV9yZXN1bHQ7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9fZnV0dXJlX2Jhc2U6Ol9UYXNrX3N0YXRlPF9GbiwgX0FsbG9jLCBfUmVzKF9BcmdzLi4uKT4gZmluYWwKKyAgICA6IF9fZnV0dXJlX2Jhc2U6Ol9UYXNrX3N0YXRlX2Jhc2U8X1JlcyhfQXJncy4uLik+CisgICAgeworICAgICAgX1Rhc2tfc3RhdGUoX0ZuJiYgX19mbiwgY29uc3QgX0FsbG9jJiBfX2EpCisgICAgICA6IF9UYXNrX3N0YXRlX2Jhc2U8X1JlcyhfQXJncy4uLik+KF9fYSksIF9NX2ltcGwoc3RkOjptb3ZlKF9fZm4pLCBfX2EpCisgICAgICB7IH0KKworICAgIHByaXZhdGU6CisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX3J1bihfQXJncy4uLiBfX2FyZ3MpCisgICAgICB7CisJLy8gYm91bmQgYXJndW1lbnRzIGRlY2F5IHNvIHdyYXAgbHZhbHVlIHJlZmVyZW5jZXMKKwlhdXRvIF9fYm91bmRmbiA9IHN0ZDo6X19iaW5kX3NpbXBsZShzdGQ6OnJlZihfTV9pbXBsLl9NX2ZuKSwKKwkgICAgX1NfbWF5YmVfd3JhcF9yZWYoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpKS4uLik7CisJYXV0byBfX3NldHRlciA9IF9TX3Rhc2tfc2V0dGVyKHRoaXMtPl9NX3Jlc3VsdCwgc3RkOjptb3ZlKF9fYm91bmRmbikpOworCXRoaXMtPl9NX3NldF9yZXN1bHQoc3RkOjptb3ZlKF9fc2V0dGVyKSk7CisgICAgICB9CisKKyAgICAgIHZpcnR1YWwgc2hhcmVkX3B0cjxfVGFza19zdGF0ZV9iYXNlPF9SZXMoX0FyZ3MuLi4pPj4KKyAgICAgIF9NX3Jlc2V0KCk7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKwlzdGF0aWMgcmVmZXJlbmNlX3dyYXBwZXI8X1RwPgorCV9TX21heWJlX3dyYXBfcmVmKF9UcCYgX190KQorCXsgcmV0dXJuIHN0ZDo6cmVmKF9fdCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorCXN0YXRpYworCXR5cGVuYW1lIGVuYWJsZV9pZjwhaXNfbHZhbHVlX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZSwgX1RwPjo6dHlwZSYmCisJX1NfbWF5YmVfd3JhcF9yZWYoX1RwJiYgX190KQorCXsgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxfVHA+KF9fdCk7IH0KKworICAgICAgc3RydWN0IF9JbXBsIDogX0FsbG9jCisgICAgICB7CisJX0ltcGwoX0ZuJiYgX19mbiwgY29uc3QgX0FsbG9jJiBfX2EpCisJICA6IF9BbGxvYyhfX2EpLCBfTV9mbihzdGQ6Om1vdmUoX19mbikpIHsgfQorCV9GbiBfTV9mbjsKKyAgICAgIH0gX01faW1wbDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZSwgdHlwZW5hbWUgX0ZuLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgICBzdGF0aWMgc2hhcmVkX3B0cjxfX2Z1dHVyZV9iYXNlOjpfVGFza19zdGF0ZV9iYXNlPF9TaWduYXR1cmU+PgorICAgICAgX19jcmVhdGVfdGFza19zdGF0ZShfRm4mJiBfX2ZuLCBjb25zdCBfQWxsb2MmIF9fYSkKKyAgICAgIHsKKwl0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9UYXNrX3N0YXRlPF9GbiwgX0FsbG9jLCBfU2lnbmF0dXJlPiBfU3RhdGU7CisJcmV0dXJuIHN0ZDo6YWxsb2NhdGVfc2hhcmVkPF9TdGF0ZT4oX19hLCBzdGQ6Om1vdmUoX19mbiksIF9fYSk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZuLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHNoYXJlZF9wdHI8X19mdXR1cmVfYmFzZTo6X1Rhc2tfc3RhdGVfYmFzZTxfUmVzKF9BcmdzLi4uKT4+CisgICAgX19mdXR1cmVfYmFzZTo6X1Rhc2tfc3RhdGU8X0ZuLCBfQWxsb2MsIF9SZXMoX0FyZ3MuLi4pPjo6X01fcmVzZXQoKQorICAgIHsKKyAgICAgIHJldHVybiBfX2NyZWF0ZV90YXNrX3N0YXRlPF9SZXMoX0FyZ3MuLi4pPihzdGQ6Om1vdmUoX01faW1wbC5fTV9mbiksCisJCQkJCQkgc3RhdGljX2Nhc3Q8X0FsbG9jJj4oX01faW1wbCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVGFzaywgdHlwZW5hbWUgX0ZuLCBib29sCisJICAgPSBpc19zYW1lPF9UYXNrLCB0eXBlbmFtZSBkZWNheTxfRm4+Ojp0eXBlPjo6dmFsdWU+CisgICAgc3RydWN0IF9fY29uc3RyYWluX3BrZ2R0YXNrCisgICAgeyB0eXBlZGVmIHZvaWQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UYXNrLCB0eXBlbmFtZSBfRm4+CisgICAgc3RydWN0IF9fY29uc3RyYWluX3BrZ2R0YXNrPF9UYXNrLCBfRm4sIHRydWU+CisgICAgeyB9OworCisgIC8vLyBwYWNrYWdlZF90YXNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBwYWNrYWdlZF90YXNrPF9SZXMoX0FyZ1R5cGVzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fZnV0dXJlX2Jhc2U6Ol9UYXNrX3N0YXRlX2Jhc2U8X1JlcyhfQXJnVHlwZXMuLi4pPiBfU3RhdGVfdHlwZTsKKyAgICAgIHNoYXJlZF9wdHI8X1N0YXRlX3R5cGU+ICAgICAgICAgICAgICAgICAgIF9NX3N0YXRlOworCisgICAgcHVibGljOgorICAgICAgLy8gQ29uc3RydWN0aW9uIGFuZCBkZXN0cnVjdGlvbgorICAgICAgcGFja2FnZWRfdGFzaygpIG5vZXhjZXB0IHsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMDk1LiAgbWlzc2luZyBjb25zdHJ1Y3RvcnMgbmVlZGVkIGZvciB1c2VzLWFsbG9jYXRvciBjb25zdHJ1Y3Rpb24KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvY2F0b3I+CisJcGFja2FnZWRfdGFzayhhbGxvY2F0b3JfYXJnX3QsIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSkgbm9leGNlcHQKKwl7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZuLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIF9fY29uc3RyYWluX3BrZ2R0YXNrPHBhY2thZ2VkX3Rhc2ssIF9Gbj46Ol9fdHlwZT4KKwlleHBsaWNpdAorCXBhY2thZ2VkX3Rhc2soX0ZuJiYgX19mbikKKwk6IHBhY2thZ2VkX3Rhc2soYWxsb2NhdG9yX2FyZywgc3RkOjphbGxvY2F0b3I8aW50PigpLCBzdGQ6Om1vdmUoX19mbikpCisJeyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIwOTcuICBwYWNrYWdlZF90YXNrIGNvbnN0cnVjdG9ycyBzaG91bGQgYmUgY29uc3RyYWluZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GbiwgdHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIF9fY29uc3RyYWluX3BrZ2R0YXNrPHBhY2thZ2VkX3Rhc2ssIF9Gbj46Ol9fdHlwZT4KKwlleHBsaWNpdAorCXBhY2thZ2VkX3Rhc2soYWxsb2NhdG9yX2FyZ190LCBjb25zdCBfQWxsb2MmIF9fYSwgX0ZuJiYgX19mbikKKwk6IF9NX3N0YXRlKF9fY3JlYXRlX3Rhc2tfc3RhdGU8X1JlcyhfQXJnVHlwZXMuLi4pPigKKwkJICAgIHN0ZDo6Zm9yd2FyZDxfRm4+KF9fZm4pLCBfX2EpKQorCXsgfQorCisgICAgICB+cGFja2FnZWRfdGFzaygpCisgICAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihfTV9zdGF0ZSkgJiYgIV9NX3N0YXRlLnVuaXF1ZSgpKQorCSAgX01fc3RhdGUtPl9NX2JyZWFrX3Byb21pc2Uoc3RkOjptb3ZlKF9NX3N0YXRlLT5fTV9yZXN1bHQpKTsKKyAgICAgIH0KKworICAgICAgLy8gTm8gY29weQorICAgICAgcGFja2FnZWRfdGFzayhjb25zdCBwYWNrYWdlZF90YXNrJikgPSBkZWxldGU7CisgICAgICBwYWNrYWdlZF90YXNrJiBvcGVyYXRvcj0oY29uc3QgcGFja2FnZWRfdGFzayYpID0gZGVsZXRlOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2NhdG9yPgorCXBhY2thZ2VkX3Rhc2soYWxsb2NhdG9yX2FyZ190LCBjb25zdCBfQWxsb2NhdG9yJiwKKwkJICAgICAgY29uc3QgcGFja2FnZWRfdGFzayYpID0gZGVsZXRlOworCisgICAgICAvLyBNb3ZlIHN1cHBvcnQKKyAgICAgIHBhY2thZ2VkX3Rhc2socGFja2FnZWRfdGFzayYmIF9fb3RoZXIpIG5vZXhjZXB0CisgICAgICB7IHRoaXMtPnN3YXAoX19vdGhlcik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jYXRvcj4KKwlwYWNrYWdlZF90YXNrKGFsbG9jYXRvcl9hcmdfdCwgY29uc3QgX0FsbG9jYXRvciYsCisJCSAgICAgIHBhY2thZ2VkX3Rhc2smJiBfX290aGVyKSBub2V4Y2VwdAorCXsgdGhpcy0+c3dhcChfX290aGVyKTsgfQorCisgICAgICBwYWNrYWdlZF90YXNrJiBvcGVyYXRvcj0ocGFja2FnZWRfdGFzayYmIF9fb3RoZXIpIG5vZXhjZXB0CisgICAgICB7CisJcGFja2FnZWRfdGFzayhzdGQ6Om1vdmUoX19vdGhlcikpLnN3YXAoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChwYWNrYWdlZF90YXNrJiBfX290aGVyKSBub2V4Y2VwdAorICAgICAgeyBfTV9zdGF0ZS5zd2FwKF9fb3RoZXIuX01fc3RhdGUpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIHZhbGlkKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KF9NX3N0YXRlKTsgfQorCisgICAgICAvLyBSZXN1bHQgcmV0cmlldmFsCisgICAgICBmdXR1cmU8X1Jlcz4KKyAgICAgIGdldF9mdXR1cmUoKQorICAgICAgeyByZXR1cm4gZnV0dXJlPF9SZXM+KF9NX3N0YXRlKTsgfQorCisgICAgICAvLyBFeGVjdXRpb24KKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKwlfX2Z1dHVyZV9iYXNlOjpfU3RhdGVfYmFzZTo6X1NfY2hlY2soX01fc3RhdGUpOworCV9NX3N0YXRlLT5fTV9ydW4oc3RkOjpmb3J3YXJkPF9BcmdUeXBlcz4oX19hcmdzKS4uLik7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkKKyAgICAgIHsKKwlfX2Z1dHVyZV9iYXNlOjpfU3RhdGVfYmFzZTo6X1NfY2hlY2soX01fc3RhdGUpOworCXBhY2thZ2VkX3Rhc2sgX190bXA7CisJX190bXAuX01fc3RhdGUgPSBfTV9zdGF0ZTsKKwlfTV9zdGF0ZSA9IF9NX3N0YXRlLT5fTV9yZXNldCgpOworICAgICAgfQorICAgIH07CisKKyAgLy8vIHN3YXAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChwYWNrYWdlZF90YXNrPF9SZXMoX0FyZ1R5cGVzLi4uKT4mIF9feCwKKwkgcGFja2FnZWRfdGFzazxfUmVzKF9BcmdUeXBlcy4uLik+JiBfX3kpIG5vZXhjZXB0CisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCB1c2VzX2FsbG9jYXRvcjxwYWNrYWdlZF90YXNrPF9SZXM+LCBfQWxsb2M+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Cb3VuZEZuLCB0eXBlbmFtZSBfUmVzPgorICAgIGNsYXNzIF9fZnV0dXJlX2Jhc2U6Ol9EZWZlcnJlZF9zdGF0ZSBmaW5hbAorICAgIDogcHVibGljIF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZV9iYXNlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIGV4cGxpY2l0CisgICAgICBfRGVmZXJyZWRfc3RhdGUoX0JvdW5kRm4mJiBfX2ZuKQorICAgICAgOiBfTV9yZXN1bHQobmV3IF9SZXN1bHQ8X1Jlcz4oKSksIF9NX2ZuKHN0ZDo6bW92ZShfX2ZuKSkKKyAgICAgIHsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19mdXR1cmVfYmFzZTo6X1B0cjxfUmVzdWx0PF9SZXM+PiBfUHRyX3R5cGU7CisgICAgICBfUHRyX3R5cGUgX01fcmVzdWx0OworICAgICAgX0JvdW5kRm4gX01fZm47CisKKyAgICAgIHZpcnR1YWwgdm9pZAorICAgICAgX01fcnVuX2RlZmVycmVkKCkKKyAgICAgIHsKKyAgICAgICAgLy8gc2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzIHNvIGlnbm9yZSBmYWlsdXJlCisgICAgICAgIF9NX3NldF9yZXN1bHQoX1NfdGFza19zZXR0ZXIoX01fcmVzdWx0LCBfTV9mbiksIHRydWUpOworICAgICAgfQorICAgIH07CisKKyAgY2xhc3MgX19mdXR1cmVfYmFzZTo6X0FzeW5jX3N0YXRlX2NvbW1vbiA6IHB1YmxpYyBfX2Z1dHVyZV9iYXNlOjpfU3RhdGVfYmFzZQorICB7CisgIHByb3RlY3RlZDoKKyNpZmRlZiBfR0xJQkNYWF9BU1lOQ19BQklfQ09NUEFUCisgICAgfl9Bc3luY19zdGF0ZV9jb21tb24oKTsKKyNlbHNlCisgICAgfl9Bc3luY19zdGF0ZV9jb21tb24oKSA9IGRlZmF1bHQ7CisjZW5kaWYKKworICAgIC8vIEFsbG93IG5vbi10aW1lZCB3YWl0aW5nIGZ1bmN0aW9ucyB0byBibG9jayB1bnRpbCB0aGUgdGhyZWFkIGNvbXBsZXRlcywKKyAgICAvLyBhcyBpZiBqb2luZWQuCisgICAgdmlydHVhbCB2b2lkIF9NX3J1bl9kZWZlcnJlZCgpIHsgX01fam9pbigpOyB9CisKKyAgICB2b2lkIF9NX2pvaW4oKSB7IHN0ZDo6Y2FsbF9vbmNlKF9NX29uY2UsICZ0aHJlYWQ6OmpvaW4sIHJlZihfTV90aHJlYWQpKTsgfQorCisgICAgdGhyZWFkIF9NX3RocmVhZDsKKyAgICBvbmNlX2ZsYWcgX01fb25jZTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQm91bmRGbiwgdHlwZW5hbWUgX1Jlcz4KKyAgICBjbGFzcyBfX2Z1dHVyZV9iYXNlOjpfQXN5bmNfc3RhdGVfaW1wbCBmaW5hbAorICAgIDogcHVibGljIF9fZnV0dXJlX2Jhc2U6Ol9Bc3luY19zdGF0ZV9jb21tb24KKyAgICB7CisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIF9Bc3luY19zdGF0ZV9pbXBsKF9Cb3VuZEZuJiYgX19mbikKKyAgICAgIDogX01fcmVzdWx0KG5ldyBfUmVzdWx0PF9SZXM+KCkpLCBfTV9mbihzdGQ6Om1vdmUoX19mbikpCisgICAgICB7CisJX01fdGhyZWFkID0gc3RkOjp0aHJlYWR7IFt0aGlzXSB7CisJICBfTV9zZXRfcmVzdWx0KF9TX3Rhc2tfc2V0dGVyKF9NX3Jlc3VsdCwgX01fZm4pKTsKKyAgICAgICAgfSB9OworICAgICAgfQorCisgICAgICB+X0FzeW5jX3N0YXRlX2ltcGwoKSB7IF9NX2pvaW4oKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX19mdXR1cmVfYmFzZTo6X1B0cjxfUmVzdWx0PF9SZXM+PiBfUHRyX3R5cGU7CisgICAgICBfUHRyX3R5cGUgX01fcmVzdWx0OworICAgICAgX0JvdW5kRm4gX01fZm47CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQm91bmRGbj4KKyAgICBpbmxpbmUgc3RkOjpzaGFyZWRfcHRyPF9fZnV0dXJlX2Jhc2U6Ol9TdGF0ZV9iYXNlPgorICAgIF9fZnV0dXJlX2Jhc2U6Ol9TX21ha2VfZGVmZXJyZWRfc3RhdGUoX0JvdW5kRm4mJiBfX2ZuKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxfQm91bmRGbj46OnR5cGUgX19mbl90eXBlOworICAgICAgdHlwZWRlZiBfRGVmZXJyZWRfc3RhdGU8X19mbl90eXBlPiBfX3N0YXRlX3R5cGU7CisgICAgICByZXR1cm4gc3RkOjptYWtlX3NoYXJlZDxfX3N0YXRlX3R5cGU+KHN0ZDo6bW92ZShfX2ZuKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Cb3VuZEZuPgorICAgIGlubGluZSBzdGQ6OnNoYXJlZF9wdHI8X19mdXR1cmVfYmFzZTo6X1N0YXRlX2Jhc2U+CisgICAgX19mdXR1cmVfYmFzZTo6X1NfbWFrZV9hc3luY19zdGF0ZShfQm91bmRGbiYmIF9fZm4pCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfcmVmZXJlbmNlPF9Cb3VuZEZuPjo6dHlwZSBfX2ZuX3R5cGU7CisgICAgICB0eXBlZGVmIF9Bc3luY19zdGF0ZV9pbXBsPF9fZm5fdHlwZT4gX19zdGF0ZV90eXBlOworICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8X19zdGF0ZV90eXBlPihzdGQ6Om1vdmUoX19mbikpOworICAgIH0KKworCisgIC8vLyBhc3luYworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGZ1dHVyZTx0eXBlbmFtZSByZXN1bHRfb2Y8X0ZuKF9BcmdzLi4uKT46OnR5cGU+CisgICAgYXN5bmMobGF1bmNoIF9fcG9saWN5LCBfRm4mJiBfX2ZuLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHJlc3VsdF9vZjxfRm4oX0FyZ3MuLi4pPjo6dHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIHN0ZDo6c2hhcmVkX3B0cjxfX2Z1dHVyZV9iYXNlOjpfU3RhdGVfYmFzZT4gX19zdGF0ZTsKKyAgICAgIGlmICgoX19wb2xpY3kgJiAobGF1bmNoOjphc3luY3xsYXVuY2g6OmRlZmVycmVkKSkgPT0gbGF1bmNoOjphc3luYykKKwl7CisJICBfX3N0YXRlID0gX19mdXR1cmVfYmFzZTo6X1NfbWFrZV9hc3luY19zdGF0ZShzdGQ6Ol9fYmluZF9zaW1wbGUoCisgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfRm4+KF9fZm4pLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgX19zdGF0ZSA9IF9fZnV0dXJlX2Jhc2U6Ol9TX21ha2VfZGVmZXJyZWRfc3RhdGUoc3RkOjpfX2JpbmRfc2ltcGxlKAorICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0ZuPihfX2ZuKSwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSk7CisJfQorICAgICAgcmV0dXJuIGZ1dHVyZTxyZXN1bHRfdHlwZT4oX19zdGF0ZSk7CisgICAgfQorCisgIC8vLyBhc3luYywgcG90ZW50aWFsIG92ZXJsb2FkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GbiwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgaW5saW5lIGZ1dHVyZTx0eXBlbmFtZSByZXN1bHRfb2Y8X0ZuKF9BcmdzLi4uKT46OnR5cGU+CisgICAgYXN5bmMoX0ZuJiYgX19mbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgcmV0dXJuIGFzeW5jKGxhdW5jaDo6YXN5bmN8bGF1bmNoOjpkZWZlcnJlZCwgc3RkOjpmb3J3YXJkPF9Gbj4oX19mbiksCisJCSAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfSEFTX0dUSFJFQURTICYmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorICAgICAgIC8vICYmIEFUT01JQ19JTlRfTE9DS19GUkVFCisKKyAgLy8gQH0gZ3JvdXAgZnV0dXJlcworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9HTElCQ1hYX0ZVVFVSRQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9pbml0aWFsaXplcl9saXN0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9pbml0aWFsaXplcl9saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OTI5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2luaXRpYWxpemVyX2xpc3QKQEAgLTAsMCArMSwxMDcgQEAKKy8vIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdCBzdXBwb3J0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKy8vCisvLyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluaXRpYWxpemVyX2xpc3QKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0lOSVRJQUxJWkVSX0xJU1QKKyNkZWZpbmUgX0lOSVRJQUxJWkVSX0xJU1QKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UgLy8gQysrMHgKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCituYW1lc3BhY2Ugc3RkCit7CisgIC8vLyBpbml0aWFsaXplcl9saXN0CisgIHRlbXBsYXRlPGNsYXNzIF9FPgorICAgIGNsYXNzIGluaXRpYWxpemVyX2xpc3QKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfRSAJCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9FJiAJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCBfRSYgCWNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90IAkJc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiBjb25zdCBfRSogCWl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBjb25zdCBfRSogCWNvbnN0X2l0ZXJhdG9yOworCisgICAgcHJpdmF0ZToKKyAgICAgIGl0ZXJhdG9yCQkJX01fYXJyYXk7CisgICAgICBzaXplX3R5cGUJCQlfTV9sZW47CisKKyAgICAgIC8vIFRoZSBjb21waWxlciBjYW4gY2FsbCBhIHByaXZhdGUgY29uc3RydWN0b3IuCisgICAgICBjb25zdGV4cHIgaW5pdGlhbGl6ZXJfbGlzdChjb25zdF9pdGVyYXRvciBfX2EsIHNpemVfdHlwZSBfX2wpCisgICAgICA6IF9NX2FycmF5KF9fYSksIF9NX2xlbihfX2wpIHsgfQorCisgICAgcHVibGljOgorICAgICAgY29uc3RleHByIGluaXRpYWxpemVyX2xpc3QoKSBub2V4Y2VwdAorICAgICAgOiBfTV9hcnJheSgwKSwgX01fbGVuKDApIHsgfQorCisgICAgICAvLyBOdW1iZXIgb2YgZWxlbWVudHMuCisgICAgICBjb25zdGV4cHIgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01fbGVuOyB9CisKKyAgICAgIC8vIEZpcnN0IGVsZW1lbnQuCisgICAgICBjb25zdGV4cHIgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01fYXJyYXk7IH0KKworICAgICAgLy8gT25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudC4KKyAgICAgIGNvbnN0ZXhwciBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBhbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBvZgorICAgKiAgICAgICAgICB0aGUgaW5pdGlsaXplcl9saXN0LgorICAgKiAgQHBhcmFtICBfX2lscyAgSW5pdGlhbGl6ZXIgbGlzdC4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICBjb25zdGV4cHIgY29uc3QgX1RwKgorICAgIGJlZ2luKGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lscykgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2lscy5iZWdpbigpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybiBhbiBpdGVyYXRvciBwb2ludGluZyB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CisgICAqICAgICAgICAgIG9mIHRoZSBpbml0aWxpemVyX2xpc3QuCisgICAqICBAcGFyYW0gIF9faWxzICBJbml0aWFsaXplciBsaXN0LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgIGNvbnN0ZXhwciBjb25zdCBfVHAqCisgICAgZW5kKGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lscykgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2lscy5lbmQoKTsgfQorfQorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9JTklUSUFMSVpFUl9MSVNUCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2lvbWFuaXAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2lvbWFuaXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5ZDIyMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvaW9tYW5pcApAQCAtMCwwICsxLDM3NSBAQAorLy8gU3RhbmRhcmQgc3RyZWFtIG1hbmlwdWxhdG9ycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9pb21hbmlwCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNi4zICBTdGFuZGFyZCBtYW5pcHVsYXRvcnMKKy8vCisKKyNpZm5kZWYgX0dMSUJDWFhfSU9NQU5JUAorI2RlZmluZSBfR0xJQkNYWF9JT01BTklQIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8Yml0cy9pb3NfYmFzZS5oPgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPGxvY2FsZT4KKyNlbmRpZgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gWzI3LjYuM10gc3RhbmRhcmQgbWFuaXB1bGF0b3JzCisgIC8vIEFsc28gc2VlIERSIDE4My4KKworICBzdHJ1Y3QgX1Jlc2V0aW9zZmxhZ3MgeyBpb3NfYmFzZTo6Zm10ZmxhZ3MgX01fbWFzazsgfTsKKworICAvKioKKyAgICogIEBicmllZiAgTWFuaXB1bGF0b3IgZm9yIEBjIHNldGYuCisgICAqICBAcGFyYW0gIF9fbWFzayAgQSBmb3JtYXQgZmxhZ3MgbWFzay4KKyAgICoKKyAgICogIFNlbnQgdG8gYSBzdHJlYW0gb2JqZWN0LCB0aGlzIG1hbmlwdWxhdG9yIHJlc2V0cyB0aGUgc3BlY2lmaWVkIGZsYWdzLAorICAgKiAgdmlhIEBlIHN0cmVhbS5zZXRmKDAsX19tYXNrKS4KKyAgKi8KKyAgaW5saW5lIF9SZXNldGlvc2ZsYWdzIAorICByZXNldGlvc2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBfX21hc2spCisgIHsgcmV0dXJuIHsgX19tYXNrIH07IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIF9SZXNldGlvc2ZsYWdzIF9fZikKKyAgICB7IAorICAgICAgX19pcy5zZXRmKGlvc19iYXNlOjpmbXRmbGFncygwKSwgX19mLl9NX21hc2spOyAKKyAgICAgIHJldHVybiBfX2lzOyAKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBfUmVzZXRpb3NmbGFncyBfX2YpCisgICAgeyAKKyAgICAgIF9fb3Muc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIF9fZi5fTV9tYXNrKTsgCisgICAgICByZXR1cm4gX19vczsgCisgICAgfQorCisKKyAgc3RydWN0IF9TZXRpb3NmbGFncyB7IGlvc19iYXNlOjpmbXRmbGFncyBfTV9tYXNrOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNYW5pcHVsYXRvciBmb3IgQGMgc2V0Zi4KKyAgICogIEBwYXJhbSAgX19tYXNrICBBIGZvcm1hdCBmbGFncyBtYXNrLgorICAgKgorICAgKiAgU2VudCB0byBhIHN0cmVhbSBvYmplY3QsIHRoaXMgbWFuaXB1bGF0b3Igc2V0cyB0aGUgZm9ybWF0IGZsYWdzCisgICAqICB0byBAYSBfX21hc2suCisgICovCisgIGlubGluZSBfU2V0aW9zZmxhZ3MgCisgIHNldGlvc2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBfX21hc2spCisgIHsgcmV0dXJuIHsgX19tYXNrIH07IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIF9TZXRpb3NmbGFncyBfX2YpCisgICAgeyAKKyAgICAgIF9faXMuc2V0ZihfX2YuX01fbWFzayk7IAorICAgICAgcmV0dXJuIF9faXM7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIF9TZXRpb3NmbGFncyBfX2YpCisgICAgeyAKKyAgICAgIF9fb3Muc2V0ZihfX2YuX01fbWFzayk7IAorICAgICAgcmV0dXJuIF9fb3M7IAorICAgIH0KKworCisgIHN0cnVjdCBfU2V0YmFzZSB7IGludCBfTV9iYXNlOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNYW5pcHVsYXRvciBmb3IgQGMgc2V0Zi4KKyAgICogIEBwYXJhbSAgX19iYXNlICBBIG51bWVyaWMgYmFzZS4KKyAgICoKKyAgICogIFNlbnQgdG8gYSBzdHJlYW0gb2JqZWN0LCB0aGlzIG1hbmlwdWxhdG9yIGNoYW5nZXMgdGhlCisgICAqICBAYyBpb3NfYmFzZTo6YmFzZWZpZWxkIGZsYWdzIHRvIEBjIG9jdCwgQGMgZGVjLCBvciBAYyBoZXggd2hlbiBAYSBiYXNlCisgICAqICBpcyA4LCAxMCwgb3IgMTYsIGFjY29yZGluZ2x5LCBhbmQgdG8gMCBpZiBAYSBfX2Jhc2UgaXMgYW55IG90aGVyIHZhbHVlLgorICAqLworICBpbmxpbmUgX1NldGJhc2UgCisgIHNldGJhc2UoaW50IF9fYmFzZSkKKyAgeyByZXR1cm4geyBfX2Jhc2UgfTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgX1NldGJhc2UgX19mKQorICAgIHsKKyAgICAgIF9faXMuc2V0ZihfX2YuX01fYmFzZSA9PSAgOCA/IGlvc19iYXNlOjpvY3QgOiAKKwkJX19mLl9NX2Jhc2UgPT0gMTAgPyBpb3NfYmFzZTo6ZGVjIDogCisJCV9fZi5fTV9iYXNlID09IDE2ID8gaW9zX2Jhc2U6OmhleCA6IAorCQlpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIGlvc19iYXNlOjpiYXNlZmllbGQpOworICAgICAgcmV0dXJuIF9faXM7IAorICAgIH0KKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgX1NldGJhc2UgX19mKQorICAgIHsKKyAgICAgIF9fb3Muc2V0ZihfX2YuX01fYmFzZSA9PSAgOCA/IGlvc19iYXNlOjpvY3QgOiAKKwkJX19mLl9NX2Jhc2UgPT0gMTAgPyBpb3NfYmFzZTo6ZGVjIDogCisJCV9fZi5fTV9iYXNlID09IDE2ID8gaW9zX2Jhc2U6OmhleCA6IAorCQlpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIGlvc19iYXNlOjpiYXNlZmllbGQpOworICAgICAgcmV0dXJuIF9fb3M7IAorICAgIH0KKyAgCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBfU2V0ZmlsbCB7IF9DaGFyVCBfTV9jOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNYW5pcHVsYXRvciBmb3IgQGMgZmlsbC4KKyAgICogIEBwYXJhbSAgX19jICBUaGUgbmV3IGZpbGwgY2hhcmFjdGVyLgorICAgKgorICAgKiAgU2VudCB0byBhIHN0cmVhbSBvYmplY3QsIHRoaXMgbWFuaXB1bGF0b3IgY2FsbHMgQGMgZmlsbChfX2MpIGZvciB0aGF0CisgICAqICBvYmplY3QuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBpbmxpbmUgX1NldGZpbGw8X0NoYXJUPgorICAgIHNldGZpbGwoX0NoYXJUIF9fYykKKyAgICB7IHJldHVybiB7IF9fYyB9OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBfU2V0ZmlsbDxfQ2hhclQ+IF9fZikKKyAgICB7IAorICAgICAgX19pcy5maWxsKF9fZi5fTV9jKTsgCisgICAgICByZXR1cm4gX19pczsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgX1NldGZpbGw8X0NoYXJUPiBfX2YpCisgICAgeyAKKyAgICAgIF9fb3MuZmlsbChfX2YuX01fYyk7IAorICAgICAgcmV0dXJuIF9fb3M7IAorICAgIH0KKworCisgIHN0cnVjdCBfU2V0cHJlY2lzaW9uIHsgaW50IF9NX247IH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIE1hbmlwdWxhdG9yIGZvciBAYyBwcmVjaXNpb24uCisgICAqICBAcGFyYW0gIF9fbiAgVGhlIG5ldyBwcmVjaXNpb24uCisgICAqCisgICAqICBTZW50IHRvIGEgc3RyZWFtIG9iamVjdCwgdGhpcyBtYW5pcHVsYXRvciBjYWxscyBAYyBwcmVjaXNpb24oX19uKSBmb3IKKyAgICogIHRoYXQgb2JqZWN0LgorICAqLworICBpbmxpbmUgX1NldHByZWNpc2lvbiAKKyAgc2V0cHJlY2lzaW9uKGludCBfX24pCisgIHsgcmV0dXJuIHsgX19uIH07IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIF9TZXRwcmVjaXNpb24gX19mKQorICAgIHsgCisgICAgICBfX2lzLnByZWNpc2lvbihfX2YuX01fbik7IAorICAgICAgcmV0dXJuIF9faXM7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIF9TZXRwcmVjaXNpb24gX19mKQorICAgIHsgCisgICAgICBfX29zLnByZWNpc2lvbihfX2YuX01fbik7IAorICAgICAgcmV0dXJuIF9fb3M7IAorICAgIH0KKworCisgIHN0cnVjdCBfU2V0dyB7IGludCBfTV9uOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBNYW5pcHVsYXRvciBmb3IgQGMgd2lkdGguCisgICAqICBAcGFyYW0gIF9fbiAgVGhlIG5ldyB3aWR0aC4KKyAgICoKKyAgICogIFNlbnQgdG8gYSBzdHJlYW0gb2JqZWN0LCB0aGlzIG1hbmlwdWxhdG9yIGNhbGxzIEBjIHdpZHRoKF9fbikgZm9yCisgICAqICB0aGF0IG9iamVjdC4KKyAgKi8KKyAgaW5saW5lIF9TZXR3IAorICBzZXR3KGludCBfX24pCisgIHsgcmV0dXJuIHsgX19uIH07IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIF9TZXR3IF9fZikKKyAgICB7CisgICAgICBfX2lzLndpZHRoKF9fZi5fTV9uKTsKKyAgICAgIHJldHVybiBfX2lzOyAKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIAorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBfU2V0dyBfX2YpCisgICAgeworICAgICAgX19vcy53aWR0aChfX2YuX01fbik7CisgICAgICByZXR1cm4gX19vczsgCisgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01vbmV5VD4KKyAgICBzdHJ1Y3QgX0dldF9tb25leSB7IF9Nb25leVQmIF9NX21vbjsgYm9vbCBfTV9pbnRsOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBFeHRlbmRlZCBtYW5pcHVsYXRvciBmb3IgZXh0cmFjdGluZyBtb25leS4KKyAgICogIEBwYXJhbSAgX19tb24gIEVpdGhlciBsb25nIGRvdWJsZSBvciBhIHNwZWNpYWxpemF0aW9uIG9mIEBjIGJhc2ljX3N0cmluZy4KKyAgICogIEBwYXJhbSAgX19pbnRsIEEgYm9vbCBpbmRpY2F0aW5nIHdoZXRoZXIgaW50ZXJuYXRpb25hbCBmb3JtYXQgCisgICAqICAgICAgICAgICAgICAgICBpcyB0byBiZSB1c2VkLgorICAgKgorICAgKiAgU2VudCB0byBhIHN0cmVhbSBvYmplY3QsIHRoaXMgbWFuaXB1bGF0b3IgZXh0cmFjdHMgQGEgX19tb24uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Nb25leVQ+CisgICAgaW5saW5lIF9HZXRfbW9uZXk8X01vbmV5VD4KKyAgICBnZXRfbW9uZXkoX01vbmV5VCYgX19tb24sIGJvb2wgX19pbnRsID0gZmFsc2UpCisgICAgeyByZXR1cm4geyBfX21vbiwgX19pbnRsIH07IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9Nb25leVQ+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBfR2V0X21vbmV5PF9Nb25leVQ+IF9fZikKKyAgICB7CisgICAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeSBfX2NlcmIoX19pcywgZmFsc2UpOworICAgICAgaWYgKF9fY2VyYikKKwl7CisJICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpnb29kYml0OworCSAgX190cnkKKwkgICAgeworCSAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+ICAgX0l0ZXI7CisJICAgICAgdHlwZWRlZiBtb25leV9nZXQ8X0NoYXJULCBfSXRlcj4gICAgICAgICAgICAgICBfTW9uZXlHZXQ7CisKKwkgICAgICBjb25zdCBfTW9uZXlHZXQmIF9fbWcgPSB1c2VfZmFjZXQ8X01vbmV5R2V0PihfX2lzLmdldGxvYygpKTsKKwkgICAgICBfX21nLmdldChfSXRlcihfX2lzLnJkYnVmKCkpLCBfSXRlcigpLCBfX2YuX01faW50bCwKKwkJICAgICAgIF9faXMsIF9fZXJyLCBfX2YuX01fbW9uKTsKKwkgICAgfQorCSAgX19jYXRjaChfX2N4eGFiaXYxOjpfX2ZvcmNlZF91bndpbmQmKQorCSAgICB7CisJICAgICAgX19pcy5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsgX19pcy5fTV9zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsgfQorCSAgaWYgKF9fZXJyKQorCSAgICBfX2lzLnNldHN0YXRlKF9fZXJyKTsKKwl9CisgICAgICByZXR1cm4gX19pczsgCisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01vbmV5VD4KKyAgICBzdHJ1Y3QgX1B1dF9tb25leSB7IGNvbnN0IF9Nb25leVQmIF9NX21vbjsgYm9vbCBfTV9pbnRsOyB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBFeHRlbmRlZCBtYW5pcHVsYXRvciBmb3IgaW5zZXJ0aW5nIG1vbmV5LgorICAgKiAgQHBhcmFtICBfX21vbiAgRWl0aGVyIGxvbmcgZG91YmxlIG9yIGEgc3BlY2lhbGl6YXRpb24gb2YgQGMgYmFzaWNfc3RyaW5nLgorICAgKiAgQHBhcmFtICBfX2ludGwgQSBib29sIGluZGljYXRpbmcgd2hldGhlciBpbnRlcm5hdGlvbmFsIGZvcm1hdCAKKyAgICogICAgICAgICAgICAgICAgIGlzIHRvIGJlIHVzZWQuCisgICAqCisgICAqICBTZW50IHRvIGEgc3RyZWFtIG9iamVjdCwgdGhpcyBtYW5pcHVsYXRvciBpbnNlcnRzIEBhIF9fbW9uLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTW9uZXlUPgorICAgIGlubGluZSBfUHV0X21vbmV5PF9Nb25leVQ+CisgICAgcHV0X21vbmV5KGNvbnN0IF9Nb25leVQmIF9fbW9uLCBib29sIF9faW50bCA9IGZhbHNlKQorICAgIHsgcmV0dXJuIHsgX19tb24sIF9faW50bCB9OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfTW9uZXlUPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIF9QdXRfbW9uZXk8X01vbmV5VD4gX19mKQorICAgIHsKKyAgICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5IF9fY2VyYihfX29zKTsKKyAgICAgIGlmIChfX2NlcmIpCisJeworCSAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiAgIF9JdGVyOworCSAgICAgIHR5cGVkZWYgbW9uZXlfcHV0PF9DaGFyVCwgX0l0ZXI+ICAgICAgICAgICAgICAgX01vbmV5UHV0OworCisJICAgICAgY29uc3QgX01vbmV5UHV0JiBfX21wID0gdXNlX2ZhY2V0PF9Nb25leVB1dD4oX19vcy5nZXRsb2MoKSk7CisJICAgICAgaWYgKF9fbXAucHV0KF9JdGVyKF9fb3MucmRidWYoKSksIF9fZi5fTV9pbnRsLCBfX29zLAorCQkJICAgX19vcy5maWxsKCksIF9fZi5fTV9tb24pLmZhaWxlZCgpKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6YmFkYml0OworCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICBfX29zLl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOworCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeyBfX29zLl9NX3NldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOyB9CisJICBpZiAoX19lcnIpCisJICAgIF9fb3Muc2V0c3RhdGUoX19lcnIpOworCX0KKyAgICAgIHJldHVybiBfX29zOyAKKyAgICB9CisKKyNlbmRpZgorCisgIC8vIEluaGliaXQgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgZm9yIHJlcXVpcmVkIGluc3RhbnRpYXRpb25zLAorICAvLyB3aGljaCBhcmUgZGVmaW5lZCB2aWEgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgZWxzZXdoZXJlLiAgCisgIC8vIE5COiAgVGhpcyBzeW50YXggaXMgYSBHTlUgZXh0ZW5zaW9uLgorI2lmIF9HTElCQ1hYX0VYVEVSTl9URU1QTEFURQorICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldGZpbGw8Y2hhcj4pOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldGlvc2ZsYWdzKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIF9TZXRiYXNlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIF9TZXRwcmVjaXNpb24pOworICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldHcpOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldGZpbGw8Y2hhcj4pOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldGlvc2ZsYWdzKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRiYXNlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRwcmVjaXNpb24pOworICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldHcpOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgX1NldGZpbGw8d2NoYXJfdD4pOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfU2V0aW9zZmxhZ3MpOworICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfUmVzZXRpb3NmbGFncyk7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXRiYXNlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgX1NldHByZWNpc2lvbik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXR3KTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldGZpbGw8d2NoYXJfdD4pOworICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0aW9zZmxhZ3MpOworICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfUmVzZXRpb3NmbGFncyk7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXRiYXNlKTsKKyAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldHByZWNpc2lvbik7CisgIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXR3KTsKKyNlbmRpZgorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9HTElCQ1hYX0lPTUFOSVAgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvaW9zIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9pb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1NWNlOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvaW9zCkBAIC0wLDAgKzEsNDYgQEAKKy8vIElvc3RyZWFtcyBiYXNlIGNsYXNzZXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvaW9zCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNCAgSW9zdHJlYW1zIGJhc2UgY2xhc3NlcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9JT1MKKyNkZWZpbmUgX0dMSUJDWFhfSU9TIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGV4Y2VwdGlvbj4gCQkvLyBGb3IgaW9zX2Jhc2U6OmZhaWx1cmUKKyNpbmNsdWRlIDxiaXRzL2NoYXJfdHJhaXRzLmg+IAkvLyBGb3IgY2hhcl90cmFpdHMsIHN0cmVhbW9mZiwgc3RyZWFtc2l6ZSwgZnBvcworI2luY2x1ZGUgPGJpdHMvbG9jYWxlZndkLmg+CS8vIEZvciBjbGFzcyBsb2NhbGUKKyNpbmNsdWRlIDxiaXRzL2lvc19iYXNlLmg+CS8vIEZvciBpb3NfYmFzZSBkZWNsYXJhdGlvbnMuCisjaW5jbHVkZSA8c3RyZWFtYnVmPiAKKyNpbmNsdWRlIDxiaXRzL2Jhc2ljX2lvcy5oPgorCisjZW5kaWYJLyogX0dMSUJDWFhfSU9TICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2lvc2Z3ZCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvaW9zZndkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZmUyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2lvc2Z3ZApAQCAtMCwwICsxLDIxMCBAQAorLy8gPGlvc2Z3ZD4gRm9yd2FyZCBkZWNsYXJhdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvaW9zZndkCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuMiAgRm9yd2FyZCBkZWNsYXJhdGlvbnMKKy8vCisKKyNpZm5kZWYgX0dMSUJDWFhfSU9TRldECisjZGVmaW5lIF9HTElCQ1hYX0lPU0ZXRCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdHJpbmdmd2QuaD4gCS8vIEZvciBzdHJpbmcgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaW5jbHVkZSA8Yml0cy9wb3N0eXBlcy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAZGVmZ3JvdXAgaW8gSS9PCisgICAqCisgICAqICBOZWFybHkgYWxsIG9mIHRoZSBJL08gY2xhc3NlcyBhcmUgcGFyYW1ldGVyaXplZCBvbiB0aGUgdHlwZSBvZgorICAgKiAgY2hhcmFjdGVycyB0aGV5IHJlYWQgYW5kIHdyaXRlLiAgKFRoZSBtYWpvciBleGNlcHRpb24gaXMgaW9zX2Jhc2UgYXQKKyAgICogIHRoZSB0b3Agb2YgdGhlIGhpZXJhcmNoeS4pICBUaGlzIGlzIGEgY2hhbmdlIGZyb20gcHJlLVN0YW5kYXJkCisgICAqICBzdHJlYW1zLCB3aGljaCB3ZXJlIG5vdCB0ZW1wbGF0ZXMuCisgICAqCisgICAqICBGb3IgZWFzZSBvZiB1c2UgYW5kIGNvbXBhdGliaWxpdHksIGFsbCBvZiB0aGUgYmFzaWNfKiBJL08tcmVsYXRlZAorICAgKiAgY2xhc3NlcyBhcmUgZ2l2ZW4gdHlwZWRlZiBuYW1lcyBmb3IgYm90aCBvZiB0aGUgYnVpbHRpbiBjaGFyYWN0ZXIKKyAgICogIHdpZHRocyAod2lkZSBhbmQgbmFycm93KS4gIFRoZSB0eXBlZGVmcyBhcmUgdGhlIHNhbWUgYXMgdGhlCisgICAqICBwcmUtU3RhbmRhcmQgbmFtZXMsIGZvciBleGFtcGxlOgorICAgKgorICAgKiAgQGNvZGUKKyAgICogICAgIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gIGlmc3RyZWFtOworICAgKiAgQGVuZGNvZGUKKyAgICoKKyAgICogIEJlY2F1c2UgcHJvcGVybHkgZm9yd2FyZC1kZWNsYXJpbmcgdGhlc2UgY2xhc3NlcyBjYW4gYmUgZGlmZmljdWx0LCB5b3UKKyAgICogIHNob3VsZCBub3QgZG8gaXQgeW91cnNlbGYuICBJbnN0ZWFkLCBpbmNsdWRlIHRoZSAmbHQ7aW9zZndkJmd0OworICAgKiAgaGVhZGVyLCB3aGljaCBjb250YWlucyBvbmx5IGRlY2xhcmF0aW9ucyBvZiBhbGwgdGhlIEkvTyBjbGFzc2VzIGFzCisgICAqICB3ZWxsIGFzIHRoZSB0eXBlZGVmcy4gIFRyeWluZyB0byBmb3J3YXJkLWRlY2xhcmUgdGhlIHR5cGVkZWZzCisgICAqICB0aGVtc2VsdmVzIChlLmcuLCA8Y29kZT5jbGFzcyBvc3RyZWFtOzwvY29kZT4pIGlzIG5vdCB2YWxpZCBJU08gQysrLgorICAgKgorICAgKiAgRm9yIG1vcmUgc3BlY2lmaWMgZGVjbGFyYXRpb25zLCBzZWUKKyAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MTFjaDI0Lmh0bWwKKyAgICoKKyAgICogIEB7CisgICovCisgIGNsYXNzIGlvc19iYXNlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX2lvczsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19vc3RyZWFtOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CisgICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBiYXNpY19maWxlYnVmOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgorICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CisgICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KKyAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOworCisKKyAgLy8vIEJhc2UgY2xhc3MgZm9yIEBjIGNoYXIgc3RyZWFtcy4KKyAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gCQlpb3M7IAorCisgIC8vLyBCYXNlIGNsYXNzIGZvciBAYyBjaGFyIGJ1ZmZlcnMuCisgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IAlzdHJlYW1idWY7CisKKyAgLy8vIEJhc2UgY2xhc3MgZm9yIEBjIGNoYXIgaW5wdXQgc3RyZWFtcy4KKyAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IAkJaXN0cmVhbTsKKworICAvLy8gQmFzZSBjbGFzcyBmb3IgQGMgY2hhciBvdXRwdXQgc3RyZWFtcy4KKyAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IAkJb3N0cmVhbTsKKworICAvLy8gQmFzZSBjbGFzcyBmb3IgQGMgY2hhciBtaXhlZCBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXMuCisgIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gCQlpb3N0cmVhbTsKKworICAvLy8gQ2xhc3MgZm9yIEBjIGNoYXIgbWVtb3J5IGJ1ZmZlcnMuCisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IAlzdHJpbmdidWY7CisKKyAgLy8vIENsYXNzIGZvciBAYyBjaGFyIGlucHV0IG1lbW9yeSBzdHJlYW1zLgorICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gCWlzdHJpbmdzdHJlYW07CisKKyAgLy8vIENsYXNzIGZvciBAYyBjaGFyIG91dHB1dCBtZW1vcnkgc3RyZWFtcy4KKyAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IAlvc3RyaW5nc3RyZWFtOworCisgIC8vLyBDbGFzcyBmb3IgQGMgY2hhciBtaXhlZCBpbnB1dCBhbmQgb3V0cHV0IG1lbW9yeSBzdHJlYW1zLgorICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiAJc3RyaW5nc3RyZWFtOworCisgIC8vLyBDbGFzcyBmb3IgQGMgY2hhciBmaWxlIGJ1ZmZlcnMuCisgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiAJCWZpbGVidWY7CisKKyAgLy8vIENsYXNzIGZvciBAYyBjaGFyIGlucHV0IGZpbGUgc3RyZWFtcy4KKyAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiAJCWlmc3RyZWFtOworCisgIC8vLyBDbGFzcyBmb3IgQGMgY2hhciBvdXRwdXQgZmlsZSBzdHJlYW1zLgorICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IAkJb2ZzdHJlYW07CisKKyAgLy8vIENsYXNzIGZvciBAYyBjaGFyIG1peGVkIGlucHV0IGFuZCBvdXRwdXQgZmlsZSBzdHJlYW1zLgorICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gCQlmc3RyZWFtOworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgLy8vIEJhc2UgY2xhc3MgZm9yIEBjIHdjaGFyX3Qgc3RyZWFtcy4KKyAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gCQl3aW9zOworCisgIC8vLyBCYXNlIGNsYXNzIGZvciBAYyB3Y2hhcl90IGJ1ZmZlcnMuCisgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+IAl3c3RyZWFtYnVmOworCisgIC8vLyBCYXNlIGNsYXNzIGZvciBAYyB3Y2hhcl90IGlucHV0IHN0cmVhbXMuCisgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiAJd2lzdHJlYW07CisKKyAgLy8vIEJhc2UgY2xhc3MgZm9yIEBjIHdjaGFyX3Qgb3V0cHV0IHN0cmVhbXMuCisgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiAJd29zdHJlYW07CisKKyAgLy8vIEJhc2UgY2xhc3MgZm9yIEBjIHdjaGFyX3QgbWl4ZWQgaW5wdXQgYW5kIG91dHB1dCBzdHJlYW1zLgorICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPHdjaGFyX3Q+IAl3aW9zdHJlYW07CisKKyAgLy8vIENsYXNzIGZvciBAYyB3Y2hhcl90IG1lbW9yeSBidWZmZXJzLgorICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90PiAJd3N0cmluZ2J1ZjsKKworICAvLy8gQ2xhc3MgZm9yIEBjIHdjaGFyX3QgaW5wdXQgbWVtb3J5IHN0cmVhbXMuCisgIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PiAJd2lzdHJpbmdzdHJlYW07CisKKyAgLy8vIENsYXNzIGZvciBAYyB3Y2hhcl90IG91dHB1dCBtZW1vcnkgc3RyZWFtcy4KKyAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IAl3b3N0cmluZ3N0cmVhbTsKKworICAvLy8gQ2xhc3MgZm9yIEBjIHdjaGFyX3QgbWl4ZWQgaW5wdXQgYW5kIG91dHB1dCBtZW1vcnkgc3RyZWFtcy4KKyAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD4gCXdzdHJpbmdzdHJlYW07CisKKyAgLy8vIENsYXNzIGZvciBAYyB3Y2hhcl90IGZpbGUgYnVmZmVycy4KKyAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IAl3ZmlsZWJ1ZjsKKworICAvLy8gQ2xhc3MgZm9yIEBjIHdjaGFyX3QgaW5wdXQgZmlsZSBzdHJlYW1zLgorICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IAl3aWZzdHJlYW07CisKKyAgLy8vIENsYXNzIGZvciBAYyB3Y2hhcl90IG91dHB1dCBmaWxlIHN0cmVhbXMuCisgIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gCXdvZnN0cmVhbTsKKworICAvLy8gQ2xhc3MgZm9yIEBjIHdjaGFyX3QgbWl4ZWQgaW5wdXQgYW5kIG91dHB1dCBmaWxlIHN0cmVhbXMuCisgIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiAJd2ZzdHJlYW07CisjZW5kaWYKKyAgLyoqIEB9ICAqLworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9JT1NGV0QgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvaW9zdHJlYW0gYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2lvc3RyZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NjQ3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2lvc3RyZWFtCkBAIC0wLDAgKzEsNzkgQEAKKy8vIFN0YW5kYXJkIGlvc3RyZWFtIG9iamVjdHMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvaW9zdHJlYW0KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy4zICBTdGFuZGFyZCBpb3N0cmVhbSBvYmplY3RzCisvLworCisjaWZuZGVmIF9HTElCQ1hYX0lPU1RSRUFNCisjZGVmaW5lIF9HTElCQ1hYX0lPU1RSRUFNIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgPGlzdHJlYW0+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBuYW1lIFN0YW5kYXJkIFN0cmVhbSBPYmplY3RzCisgICAqCisgICAqICBUaGUgJmx0O2lvc3RyZWFtJmd0OyBoZWFkZXIgZGVjbGFyZXMgdGhlIGVpZ2h0IDxlbT5zdGFuZGFyZCBzdHJlYW0KKyAgICogIG9iamVjdHM8L2VtPi4gIEZvciBvdGhlciBkZWNsYXJhdGlvbnMsIHNlZQorICAgKiAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL21hbnVhbC9iazAxcHQxMWNoMjQuaHRtbAorICAgKiAgYW5kIHRoZSBAbGluayBpb3Nmd2QgSS9PIGZvcndhcmQgZGVjbGFyYXRpb25zIEBlbmRsaW5rCisgICAqCisgICAqICBUaGV5IGFyZSByZXF1aXJlZCBieSBkZWZhdWx0IHRvIGNvb3BlcmF0ZSB3aXRoIHRoZSBnbG9iYWwgQworICAgKiAgbGlicmFyeSdzIEBjIEZJTEUgc3RyZWFtcywgYW5kIHRvIGJlIGF2YWlsYWJsZSBkdXJpbmcgcHJvZ3JhbQorICAgKiAgc3RhcnR1cCBhbmQgdGVybWluYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIEhPV1RPCisgICAqICBsaW5rZWQgdG8gYWJvdmUuCisgICovCisgIC8vQHsKKyAgZXh0ZXJuIGlzdHJlYW0gY2luOwkJLy8vIExpbmtlZCB0byBzdGFuZGFyZCBpbnB1dAorICBleHRlcm4gb3N0cmVhbSBjb3V0OwkJLy8vIExpbmtlZCB0byBzdGFuZGFyZCBvdXRwdXQKKyAgZXh0ZXJuIG9zdHJlYW0gY2VycjsJCS8vLyBMaW5rZWQgdG8gc3RhbmRhcmQgZXJyb3IgKHVuYnVmZmVyZWQpCisgIGV4dGVybiBvc3RyZWFtIGNsb2c7CQkvLy8gTGlua2VkIHRvIHN0YW5kYXJkIGVycm9yIChidWZmZXJlZCkKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIGV4dGVybiB3aXN0cmVhbSB3Y2luOwkJLy8vIExpbmtlZCB0byBzdGFuZGFyZCBpbnB1dAorICBleHRlcm4gd29zdHJlYW0gd2NvdXQ7CS8vLyBMaW5rZWQgdG8gc3RhbmRhcmQgb3V0cHV0CisgIGV4dGVybiB3b3N0cmVhbSB3Y2VycjsJLy8vIExpbmtlZCB0byBzdGFuZGFyZCBlcnJvciAodW5idWZmZXJlZCkKKyAgZXh0ZXJuIHdvc3RyZWFtIHdjbG9nOwkvLy8gTGlua2VkIHRvIHN0YW5kYXJkIGVycm9yIChidWZmZXJlZCkKKyNlbmRpZgorICAvL0B9CisKKyAgLy8gRm9yIGNvbnN0cnVjdGlvbiBvZiBmaWxlYnVmZmVycyBmb3IgY291dCwgY2luLCBjZXJyLCBjbG9nIGV0LiBhbC4KKyAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9JT1NUUkVBTSAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9pc3RyZWFtIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9pc3RyZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWJjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2lzdHJlYW0KQEAgLTAsMCArMSw4ODEgQEAKKy8vIElucHV0IHN0cmVhbXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDI3LjYuMSAgSW5wdXQgc3RyZWFtcworLy8KKworLyoqIEBmaWxlIGluY2x1ZGUvaXN0cmVhbQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9JU1RSRUFNCisjZGVmaW5lIF9HTElCQ1hYX0lTVFJFQU0gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxpb3M+CisjaW5jbHVkZSA8b3N0cmVhbT4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIEB0cGFyYW0gX0NoYXJUICBUeXBlIG9mIGNoYXJhY3RlciBzdHJlYW0uCisgICAqICBAdHBhcmFtIF9UcmFpdHMgIFRyYWl0cyBmb3IgY2hhcmFjdGVyIHR5cGUsIGRlZmF1bHRzIHRvCisgICAqICAgICAgICAgICAgICAgICAgIGNoYXJfdHJhaXRzPF9DaGFyVD4uCisgICAqCisgICAqICBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgaW5wdXQgc3RyZWFtcy4gIEl0IHByb3ZpZGVzIHRleHQKKyAgICogIGZvcm1hdHRpbmcgb2YgYWxsIGJ1aWx0aW4gdHlwZXMsIGFuZCBjb21tdW5pY2F0ZXMgd2l0aCBhbnkgY2xhc3MKKyAgICogIGRlcml2ZWQgZnJvbSBiYXNpY19zdHJlYW1idWYgdG8gZG8gdGhlIGFjdHVhbCBpbnB1dC4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlcyAoaW5oZXJpdGVkIGZyb20gYmFzaWNfaW9zICgyNy40LjQpKToKKyAgICAgIHR5cGVkZWYgX0NoYXJUCQkJIAkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSAJCW9mZl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzCQkJIAkJdHJhaXRzX3R5cGU7CisKKyAgICAgIC8vIE5vbi1zdGFuZGFyZCBUeXBlczoKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gCQlfX3N0cmVhbWJ1Zl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgkJX19pb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CQlfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiA+CisgCQkJCQkJCV9fbnVtX2dldF90eXBlOworICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+CSAgICAgIAkJCV9fY3R5cGVfdHlwZTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIC8vIERhdGEgTWVtYmVyczoKKyAgICAgIC8qKgorICAgICAgICogIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBleHRyYWN0ZWQgaW4gdGhlIHByZXZpb3VzIHVuZm9ybWF0dGVkCisgICAgICAgKiAgZnVuY3Rpb247IHNlZSBnY291bnQoKS4KKyAgICAgICovCisgICAgICBzdHJlYW1zaXplIAkJX01fZ2NvdW50OworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCYXNlIGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGN0b3IgaXMgYWxtb3N0IG5ldmVyIGNhbGxlZCBieSB0aGUgdXNlciBkaXJlY3RseSwgcmF0aGVyIGZyb20KKyAgICAgICAqICBkZXJpdmVkIGNsYXNzZXMnIGluaXRpYWxpemF0aW9uIGxpc3RzLCB3aGljaCBwYXNzIGEgcG9pbnRlciB0bworICAgICAgICogIHRoZWlyIG93biBzdHJlYW0gYnVmZmVyLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCisgICAgICA6IF9NX2djb3VudChzdHJlYW1zaXplKDApKQorICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQmFzZSBkZXN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGRvZXMgdmVyeSBsaXR0bGUgYXBhcnQgZnJvbSBwcm92aWRpbmcgYSB2aXJ0dWFsIGJhc2UgZHRvci4KKyAgICAgICovCisgICAgICB2aXJ0dWFsCisgICAgICB+YmFzaWNfaXN0cmVhbSgpCisgICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7IH0KKworICAgICAgLy8vIFNhZmUgcHJlZml4L3N1ZmZpeCBvcGVyYXRpb25zLgorICAgICAgY2xhc3Mgc2VudHJ5OworICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnRlcmZhY2UgZm9yIG1hbmlwdWxhdG9ycy4KKyAgICAgICAqCisgICAgICAgKiAgTWFuaXB1bGF0b3JzIHN1Y2ggYXMgQGMgc3RkOjp3cyBhbmQgQGMgc3RkOjpkZWMgdXNlIHRoZXNlCisgICAgICAgKiAgZnVuY3Rpb25zIGluIGNvbnN0cnVjdHMgbGlrZQorICAgICAgICogIDxjb2RlPnN0ZDo6Y2luID4+IHN0ZDo6d3M8L2NvZGU+LgorICAgICAgICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGlvbWFuaXAgaGVhZGVyLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQorICAgICAgeyByZXR1cm4gX19wZigqdGhpcyk7IH0KKworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQorICAgICAgeworCV9fcGYoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCisgICAgICB7CisJX19wZigqdGhpcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAbmFtZSBFeHRyYWN0b3JzCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgQGMgb3BlcmF0b3I+PiBmdW5jdGlvbnMgKGFrYSA8ZW0+Zm9ybWF0dGVkIGlucHV0CisgICAgICAgKiAgZnVuY3Rpb25zPC9lbT4pIGhhdmUgc29tZSBjb21tb24gYmVoYXZpb3IuICBFYWNoIHN0YXJ0cyBieQorICAgICAgICogIGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBvYmplY3Qgb2YgdHlwZSBzdGQ6OmJhc2ljX2lzdHJlYW06OnNlbnRyeQorICAgICAgICogIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudCAobm9za2lwd3MpIHNldCB0byBmYWxzZS4gIFRoaXMgaGFzIHNldmVyYWwKKyAgICAgICAqICBlZmZlY3RzLCBjb25jbHVkaW5nIHdpdGggdGhlIHNldHRpbmcgb2YgYSBzdGF0dXMgZmxhZzsgc2VlIHRoZQorICAgICAgICogIHNlbnRyeSBkb2N1bWVudGF0aW9uIGZvciBtb3JlLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgc2VudHJ5IHN0YXR1cyBpcyBnb29kLCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gZXh0cmFjdAorICAgICAgICogIHdoYXRldmVyIGRhdGEgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcgZXh0cmFjdGlvbiwgaW9zX2Jhc2U6OmJhZGJpdAorICAgICAgICogIHdpbGwgYmUgdHVybmVkIG9uIGluIHRoZSBzdHJlYW0ncyBlcnJvciBzdGF0ZSB3aXRob3V0IGNhdXNpbmcgYW4KKyAgICAgICAqICBpb3NfYmFzZTo6ZmFpbHVyZSB0byBiZSB0aHJvd24uICBUaGUgb3JpZ2luYWwgZXhjZXB0aW9uIHdpbGwgdGhlbgorICAgICAgICogIGJlIHJldGhyb3duLgorICAgICAgKi8KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBJbnRlZ2VyIGFyaXRobWV0aWMgZXh0cmFjdG9ycworICAgICAgICogIEBwYXJhbSAgX19uIEEgdmFyaWFibGUgb2YgYnVpbHRpbiBpbnRlZ3JhbCB0eXBlLgorICAgICAgICogIEByZXR1cm4gIEBjICp0aGlzIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIHVzZSB0aGUgc3RyZWFtJ3MgY3VycmVudCBsb2NhbGUgKHNwZWNpZmljYWxseSwgdGhlCisgICAgICAgKiAgQGMgbnVtX2dldCBmYWNldCkgdG8gcGFyc2UgdGhlIGlucHV0IGRhdGEuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcj4+KGJvb2wmIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3QoX19uKTsgfQorCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CisKKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKQorICAgICAgeyByZXR1cm4gX01fZXh0cmFjdChfX24pOyB9CisKKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CisKKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3QoX19uKTsgfQorCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQorICAgICAgeyByZXR1cm4gX01fZXh0cmFjdChfX24pOyB9CisKKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCisgICAgICB7IHJldHVybiBfTV9leHRyYWN0KF9fbik7IH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3QoX19uKTsgfQorCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pCisgICAgICB7IHJldHVybiBfTV9leHRyYWN0KF9fbik7IH0KKyNlbmRpZgorICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgZXh0cmFjdG9ycworICAgICAgICogIEBwYXJhbSAgX19mIEEgdmFyaWFibGUgb2YgYnVpbHRpbiBmbG9hdGluZyBwb2ludCB0eXBlLgorICAgICAgICogIEByZXR1cm4gIEBjICp0aGlzIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIHVzZSB0aGUgc3RyZWFtJ3MgY3VycmVudCBsb2NhbGUgKHNwZWNpZmljYWxseSwgdGhlCisgICAgICAgKiAgQGMgbnVtX2dldCBmYWNldCkgdG8gcGFyc2UgdGhlIGlucHV0IGRhdGEuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpCisgICAgICB7IHJldHVybiBfTV9leHRyYWN0KF9fZik7IH0KKworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKQorICAgICAgeyByZXR1cm4gX01fZXh0cmFjdChfX2YpOyB9CisKKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKQorICAgICAgeyByZXR1cm4gX01fZXh0cmFjdChfX2YpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQmFzaWMgYXJpdGhtZXRpYyBleHRyYWN0b3JzCisgICAgICAgKiAgQHBhcmFtICBfX3AgQSB2YXJpYWJsZSBvZiBwb2ludGVyIHR5cGUuCisgICAgICAgKiAgQHJldHVybiAgQGMgKnRoaXMgaWYgc3VjY2Vzc2Z1bAorICAgICAgICoKKyAgICAgICAqICBUaGVzZSBmdW5jdGlvbnMgdXNlIHRoZSBzdHJlYW0ncyBjdXJyZW50IGxvY2FsZSAoc3BlY2lmaWNhbGx5LCB0aGUKKyAgICAgICAqICBAYyBudW1fZ2V0IGZhY2V0KSB0byBwYXJzZSB0aGUgaW5wdXQgZGF0YS4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCkKKyAgICAgIHsgcmV0dXJuIF9NX2V4dHJhY3QoX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEV4dHJhY3RpbmcgaW50byBhbm90aGVyIHN0cmVhbWJ1Zi4KKyAgICAgICAqICBAcGFyYW0gIF9fc2IgIEEgcG9pbnRlciB0byBhIHN0cmVhbWJ1ZgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgbGlrZSBvbmUgb2YgdGhlIGJhc2ljIGFyaXRobWV0aWMgZXh0cmFjdG9ycywKKyAgICAgICAqICBpbiB0aGF0IGl0IGFsc28gY29uc3RydWN0cyBhIHNlbnRyeSBvYmplY3QgYW5kIGhhcyB0aGUgc2FtZSBlcnJvcgorICAgICAgICogIGhhbmRsaW5nIGJlaGF2aW9yLgorICAgICAgICoKKyAgICAgICAqICBJZiBAcCBfX3NiIGlzIE5VTEwsIHRoZSBzdHJlYW0gd2lsbCBzZXQgZmFpbGJpdCBpbiBpdHMgZXJyb3Igc3RhdGUuCisgICAgICAgKgorICAgICAgICogIENoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoaXMgc3RyZWFtIGFuZCBpbnNlcnRlZCBpbnRvIHRoZQorICAgICAgICogIEBwIF9fc2Igc3RyZWFtYnVmIHVudGlsIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9jY3VyczoKKyAgICAgICAqCisgICAgICAgKiAgLSB0aGUgaW5wdXQgc3RyZWFtIHJlYWNoZXMgZW5kLW9mLWZpbGUsCisgICAgICAgKiAgLSBpbnNlcnRpb24gaW50byB0aGUgb3V0cHV0IGJ1ZmZlciBmYWlscyAoaW4gdGhpcyBjYXNlLCB0aGUKKyAgICAgICAqICAgIGNoYXJhY3RlciB0aGF0IHdvdWxkIGhhdmUgYmVlbiBpbnNlcnRlZCBpcyBub3QgZXh0cmFjdGVkKSwgb3IKKyAgICAgICAqICAtIGFuIGV4Y2VwdGlvbiBvY2N1cnMgKGFuZCBpbiB0aGlzIGNhc2UgaXMgY2F1Z2h0KQorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgZnVuY3Rpb24gaW5zZXJ0cyBubyBjaGFyYWN0ZXJzLCBmYWlsYml0IGlzIHNldC4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CisgICAgICAvL0B9CisKKyAgICAgIC8vIFsyNy42LjEuM10gdW5mb3JtYXR0ZWQgaW5wdXQKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhcmFjdGVyIGNvdW50aW5nCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZCBieSB0aGUgcHJldmlvdXMKKyAgICAgICAqICAgICAgICAgICB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiBkaXNwYXRjaGVkIGZvciB0aGlzIHN0cmVhbS4KKyAgICAgICovCisgICAgICBzdHJlYW1zaXplCisgICAgICBnY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBuYW1lIFVuZm9ybWF0dGVkIElucHV0IEZ1bmN0aW9ucworICAgICAgICoKKyAgICAgICAqICBBbGwgdGhlIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyBoYXZlIHNvbWUgY29tbW9uIGJlaGF2aW9yLgorICAgICAgICogIEVhY2ggc3RhcnRzIGJ5IGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBvYmplY3Qgb2YgdHlwZQorICAgICAgICogIHN0ZDo6YmFzaWNfaXN0cmVhbTo6c2VudHJ5IHdpdGggdGhlIHNlY29uZCBhcmd1bWVudCAobm9za2lwd3MpCisgICAgICAgKiAgc2V0IHRvIHRydWUuICBUaGlzIGhhcyBzZXZlcmFsIGVmZmVjdHMsIGNvbmNsdWRpbmcgd2l0aCB0aGUKKyAgICAgICAqICBzZXR0aW5nIG9mIGEgc3RhdHVzIGZsYWc7IHNlZSB0aGUgc2VudHJ5IGRvY3VtZW50YXRpb24gZm9yIG1vcmUuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBzZW50cnkgc3RhdHVzIGlzIGdvb2QsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBleHRyYWN0CisgICAgICAgKiAgd2hhdGV2ZXIgZGF0YSBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LgorICAgICAgICoKKyAgICAgICAqICBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkIGlzIHN0b3JlZCBmb3IgbGF0ZXIgcmV0cmlldmFsCisgICAgICAgKiAgYnkgZ2NvdW50KCkuCisgICAgICAgKgorICAgICAgICogIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZHVyaW5nIGV4dHJhY3Rpb24sIGlvc19iYXNlOjpiYWRiaXQKKyAgICAgICAqICB3aWxsIGJlIHR1cm5lZCBvbiBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUgd2l0aG91dCBjYXVzaW5nIGFuCisgICAgICAgKiAgaW9zX2Jhc2U6OmZhaWx1cmUgdG8gYmUgdGhyb3duLiAgVGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiB3aWxsIHRoZW4KKyAgICAgICAqICBiZSByZXRocm93bi4KKyAgICAgICovCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2ltcGxlIGV4dHJhY3Rpb24uCisgICAgICAgKiAgQHJldHVybiAgQSBjaGFyYWN0ZXIsIG9yIGVvZigpLgorICAgICAgICoKKyAgICAgICAqICBUcmllcyB0byBleHRyYWN0IGEgY2hhcmFjdGVyLiAgSWYgbm9uZSBhcmUgYXZhaWxhYmxlLCBzZXRzIGZhaWxiaXQKKyAgICAgICAqICBhbmQgcmV0dXJucyB0cmFpdHM6OmVvZigpLgorICAgICAgKi8KKyAgICAgIGludF90eXBlCisgICAgICBnZXQoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTaW1wbGUgZXh0cmFjdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIF9fYyAgVGhlIGNoYXJhY3RlciBpbiB3aGljaCB0byBzdG9yZSBkYXRhLgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIFRyaWVzIHRvIGV4dHJhY3QgYSBjaGFyYWN0ZXIgYW5kIHN0b3JlIGl0IGluIEBhIF9fYy4gIElmIG5vbmUgYXJlCisgICAgICAgKiAgYXZhaWxhYmxlLCBzZXRzIGZhaWxiaXQgYW5kIHJldHVybnMgdHJhaXRzOjplb2YoKS4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIFRoaXMgZnVuY3Rpb24gaXMgbm90IG92ZXJsb2FkZWQgb24gc2lnbmVkIGNoYXIgYW5kCisgICAgICAgKiAgICAgICAgIHVuc2lnbmVkIGNoYXIuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNpbXBsZSBtdWx0aXBsZS1jaGFyYWN0ZXIgZXh0cmFjdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgUG9pbnRlciB0byBhbiBhcnJheS4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBzdG9yZSBpbiBAYSBfX3MuCisgICAgICAgKiAgQHBhcmFtICBfX2RlbGltICBBICJzdG9wIiBjaGFyYWN0ZXIuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgQ2hhcmFjdGVycyBhcmUgZXh0cmFjdGVkIGFuZCBzdG9yZWQgaW50byBAYSBfX3MgdW50aWwgb25lIG9mIHRoZQorICAgICAgICogIGZvbGxvd2luZyBoYXBwZW5zOgorICAgICAgICoKKyAgICAgICAqICAtIEBjIF9fbi0xIGNoYXJhY3RlcnMgYXJlIHN0b3JlZAorICAgICAgICogIC0gdGhlIGlucHV0IHNlcXVlbmNlIHJlYWNoZXMgRU9GCisgICAgICAgKiAgLSB0aGUgbmV4dCBjaGFyYWN0ZXIgZXF1YWxzIEBhIF9fZGVsaW0sIGluIHdoaWNoIGNhc2UgdGhlIGNoYXJhY3RlcgorICAgICAgICogICAgaXMgbm90IGV4dHJhY3RlZAorICAgICAgICoKKyAgICAgICAqIElmIG5vIGNoYXJhY3RlcnMgYXJlIHN0b3JlZCwgZmFpbGJpdCBpcyBzZXQgaW4gdGhlIHN0cmVhbSdzIGVycm9yCisgICAgICAgKiBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiBJbiBhbnkgY2FzZSwgYSBudWxsIGNoYXJhY3RlciBpcyBzdG9yZWQgaW50byB0aGUgbmV4dCBsb2NhdGlvbiBpbgorICAgICAgICogdGhlIGFycmF5LgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgb3ZlcmxvYWRlZCBvbiBzaWduZWQgY2hhciBhbmQKKyAgICAgICAqICAgICAgICAgdW5zaWduZWQgY2hhci4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTaW1wbGUgbXVsdGlwbGUtY2hhcmFjdGVyIGV4dHJhY3Rpb24uCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFBvaW50ZXIgdG8gYW4gYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc3RvcmUgaW4gQGEgcy4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIEBjIGdldChfX3MsX19uLHdpZGVuKCZhcG9zO1xcbiZhcG9zOykpLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRXh0cmFjdGlvbiBpbnRvIGFub3RoZXIgc3RyZWFtYnVmLgorICAgICAgICogIEBwYXJhbSAgX19zYiAgQSBzdHJlYW1idWYgaW4gd2hpY2ggdG8gc3RvcmUgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIF9fZGVsaW0gIEEgInN0b3AiIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBDaGFyYWN0ZXJzIGFyZSBleHRyYWN0ZWQgYW5kIGluc2VydGVkIGludG8gQGEgX19zYiB1bnRpbCBvbmUgb2YgdGhlCisgICAgICAgKiAgZm9sbG93aW5nIGhhcHBlbnM6CisgICAgICAgKgorICAgICAgICogIC0gdGhlIGlucHV0IHNlcXVlbmNlIHJlYWNoZXMgRU9GCisgICAgICAgKiAgLSBpbnNlcnRpb24gaW50byB0aGUgb3V0cHV0IGJ1ZmZlciBmYWlscyAoaW4gdGhpcyBjYXNlLCB0aGUKKyAgICAgICAqICAgIGNoYXJhY3RlciB0aGF0IHdvdWxkIGhhdmUgYmVlbiBpbnNlcnRlZCBpcyBub3QgZXh0cmFjdGVkKQorICAgICAgICogIC0gdGhlIG5leHQgY2hhcmFjdGVyIGVxdWFscyBAYSBfX2RlbGltIChpbiB0aGlzIGNhc2UsIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAqICAgIGlzIG5vdCBleHRyYWN0ZWQpCisgICAgICAgKiAgLSBhbiBleGNlcHRpb24gb2NjdXJzIChhbmQgaW4gdGhpcyBjYXNlIGlzIGNhdWdodCkKKyAgICAgICAqCisgICAgICAgKiBJZiBubyBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQsIGZhaWxiaXQgaXMgc2V0IGluIHRoZSBzdHJlYW0ncyBlcnJvcgorICAgICAgICogc3RhdGUuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEV4dHJhY3Rpb24gaW50byBhbm90aGVyIHN0cmVhbWJ1Zi4KKyAgICAgICAqICBAcGFyYW0gIF9fc2IgIEEgc3RyZWFtYnVmIGluIHdoaWNoIHRvIHN0b3JlIGRhdGEuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBAYyBnZXQoX19zYix3aWRlbigmYXBvcztcXG4mYXBvczspKS4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQorICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN0cmluZyBleHRyYWN0aW9uLgorICAgICAgICogIEBwYXJhbSAgX19zICBBIGNoYXJhY3RlciBhcnJheSBpbiB3aGljaCB0byBzdG9yZSB0aGUgZGF0YS4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBleHRyYWN0LgorICAgICAgICogIEBwYXJhbSAgX19kZWxpbSAgQSAic3RvcCIgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIEV4dHJhY3RzIGFuZCBzdG9yZXMgY2hhcmFjdGVycyBpbnRvIEBhIF9fcyB1bnRpbCBvbmUgb2YgdGhlCisgICAgICAgKiAgZm9sbG93aW5nIGhhcHBlbnMuICBOb3RlIHRoYXQgdGhlc2UgY3JpdGVyaWEgYXJlIHJlcXVpcmVkIHRvIGJlCisgICAgICAgKiAgdGVzdGVkIGluIHRoZSBvcmRlciBsaXN0ZWQgaGVyZSwgdG8gYWxsb3cgYW4gaW5wdXQgbGluZSB0byBleGFjdGx5CisgICAgICAgKiAgZmlsbCB0aGUgQGEgX19zIGFycmF5IHdpdGhvdXQgc2V0dGluZyBmYWlsYml0LgorICAgICAgICoKKyAgICAgICAqICAtIyB0aGUgaW5wdXQgc2VxdWVuY2UgcmVhY2hlcyBlbmQtb2YtZmlsZSwgaW4gd2hpY2ggY2FzZSBlb2ZiaXQKKyAgICAgICAqICAgICBpcyBzZXQgaW4gdGhlIHN0cmVhbSBlcnJvciBzdGF0ZQorICAgICAgICogIC0jIHRoZSBuZXh0IGNoYXJhY3RlciBlcXVhbHMgQGMgX19kZWxpbSwgaW4gd2hpY2ggY2FzZSB0aGUgY2hhcmFjdGVyCisgICAgICAgKiAgICAgaXMgZXh0cmFjdGVkIChhbmQgdGhlcmVmb3JlIGNvdW50ZWQgaW4gQGMgZ2NvdW50KCkpIGJ1dCBub3Qgc3RvcmVkCisgICAgICAgKiAgLSMgQGMgX19uLTEgY2hhcmFjdGVycyBhcmUgc3RvcmVkLCBpbiB3aGljaCBjYXNlIGZhaWxiaXQgaXMgc2V0CisgICAgICAgKiAgICAgaW4gdGhlIHN0cmVhbSBlcnJvciBzdGF0ZQorICAgICAgICoKKyAgICAgICAqICBJZiBubyBjaGFyYWN0ZXJzIGFyZSBleHRyYWN0ZWQsIGZhaWxiaXQgaXMgc2V0LiAgKEFuIGVtcHR5IGxpbmUgb2YKKyAgICAgICAqICBpbnB1dCBzaG91bGQgdGhlcmVmb3JlIG5vdCBjYXVzZSBmYWlsYml0IHRvIGJlIHNldC4pCisgICAgICAgKgorICAgICAgICogIEluIGFueSBjYXNlLCBhIG51bGwgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbiB0aGUgbmV4dCBsb2NhdGlvbiBpbgorICAgICAgICogIHRoZSBhcnJheS4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3RyaW5nIGV4dHJhY3Rpb24uCisgICAgICAgKiAgQHBhcmFtICBfX3MgIEEgY2hhcmFjdGVyIGFycmF5IGluIHdoaWNoIHRvIHN0b3JlIHRoZSBkYXRhLgorICAgICAgICogIEBwYXJhbSAgX19uICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGV4dHJhY3QuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBAYyBnZXRsaW5lKF9fcyxfX24sd2lkZW4oJmFwb3M7XFxuJmFwb3M7KSkuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERpc2NhcmRpbmcgY2hhcmFjdGVycworICAgICAgICogIEBwYXJhbSAgX19uICBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBkaXNjYXJkLgorICAgICAgICogIEBwYXJhbSAgX19kZWxpbSAgQSAic3RvcCIgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIEV4dHJhY3RzIGNoYXJhY3RlcnMgYW5kIHRocm93cyB0aGVtIGF3YXkgdW50aWwgb25lIG9mIHRoZQorICAgICAgICogIGZvbGxvd2luZyBoYXBwZW5zOgorICAgICAgICogIC0gaWYgQGEgX19uIEBjICE9IEBjIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIEBhIF9fbgorICAgICAgICogICAgY2hhcmFjdGVycyBhcmUgZXh0cmFjdGVkCisgICAgICAgKiAgLSB0aGUgaW5wdXQgc2VxdWVuY2UgcmVhY2hlcyBlbmQtb2YtZmlsZQorICAgICAgICogIC0gdGhlIG5leHQgY2hhcmFjdGVyIGVxdWFscyBAYSBfX2RlbGltIChpbiB0aGlzIGNhc2UsIHRoZSBjaGFyYWN0ZXIKKyAgICAgICAqICAgIGlzIGV4dHJhY3RlZCk7IG5vdGUgdGhhdCB0aGlzIGNvbmRpdGlvbiB3aWxsIG5ldmVyIG9jY3VyIGlmCisgICAgICAgKiAgICBAYSBfX2RlbGltIGVxdWFscyBAYyB0cmFpdHM6OmVvZigpLgorICAgICAgICoKKyAgICAgICAqICBOQjogUHJvdmlkZSB0aHJlZSBvdmVybG9hZHMsIGluc3RlYWQgb2YgdGhlIHNpbmdsZSBmdW5jdGlvbgorICAgICAgICogICh3aXRoIGRlZmF1bHRzKSBtYW5kYXRlZCBieSB0aGUgU3RhbmRhcmQ6IHRoaXMgbGVhZHMgdG8gYQorICAgICAgICogIGJldHRlciBwZXJmb3JtaW5nIGltcGxlbWVudGF0aW9uLCB3aGlsZSBzdGlsbCBjb25mb3JtaW5nIHRvCisgICAgICAgKiAgdGhlIFN0YW5kYXJkLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKTsKKworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24pOworCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIGlnbm9yZSgpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIExvb2tpbmcgYWhlYWQgaW4gdGhlIHN0cmVhbQorICAgICAgICogIEByZXR1cm4gIFRoZSBuZXh0IGNoYXJhY3Rlciwgb3IgZW9mKCkuCisgICAgICAgKgorICAgICAgICogIElmLCBhZnRlciBjb25zdHJ1Y3RpbmcgdGhlIHNlbnRyeSBvYmplY3QsIEBjIGdvb2QoKSBpcyBmYWxzZSwKKyAgICAgICAqICByZXR1cm5zIEBjIHRyYWl0czo6ZW9mKCkuICBPdGhlcndpc2UgcmVhZHMgYnV0IGRvZXMgbm90IGV4dHJhY3QKKyAgICAgICAqICB0aGUgbmV4dCBpbnB1dCBjaGFyYWN0ZXIuCisgICAgICAqLworICAgICAgaW50X3R5cGUKKyAgICAgIHBlZWsoKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFeHRyYWN0aW9uIHdpdGhvdXQgZGVsaW1pdGVycy4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgQSBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc3RvcmUuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIHN0cmVhbSBzdGF0ZSBpcyBAYyBnb29kKCksIGV4dHJhY3RzIGNoYXJhY3RlcnMgYW5kIHN0b3JlcworICAgICAgICogIHRoZW0gaW50byBAYSBfX3MgdW50aWwgb25lIG9mIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKKyAgICAgICAqICAtIEBhIF9fbiBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQKKyAgICAgICAqICAtIHRoZSBpbnB1dCBzZXF1ZW5jZSByZWFjaGVzIGVuZC1vZi1maWxlLCBpbiB3aGljaCBjYXNlIHRoZSBlcnJvcgorICAgICAgICogICAgc3RhdGUgaXMgc2V0IHRvIEBjIGZhaWxiaXR8ZW9mYml0LgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgb3ZlcmxvYWRlZCBvbiBzaWduZWQgY2hhciBhbmQKKyAgICAgICAqICAgICAgICAgdW5zaWduZWQgY2hhci4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFeHRyYWN0aW9uIHVudGlsIHRoZSBidWZmZXIgaXMgZXhoYXVzdGVkLCBidXQgbm8gbW9yZS4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgQSBjaGFyYWN0ZXIgYXJyYXkuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gc3RvcmUuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZC4KKyAgICAgICAqCisgICAgICAgKiAgRXh0cmFjdHMgY2hhcmFjdGVycyBhbmQgc3RvcmVzIHRoZW0gaW50byBAYSBfX3MgZGVwZW5kaW5nIG9uIHRoZQorICAgICAgICogIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlbWFpbmluZyBpbiB0aGUgc3RyZWFtYnVmJ3MgYnVmZmVyLAorICAgICAgICogIEBjIHJkYnVmKCktPmluX2F2YWlsKCksIGNhbGxlZCBAYyBBIGhlcmU6CisgICAgICAgKiAgLSBpZiBAYyBBIEBjID09IEBjIC0xLCBzZXRzIGVvZmJpdCBhbmQgZXh0cmFjdHMgbm8gY2hhcmFjdGVycworICAgICAgICogIC0gaWYgQGMgQSBAYyA9PSBAYyAwLCBleHRyYWN0cyBubyBjaGFyYWN0ZXJzCisgICAgICAgKiAgLSBpZiBAYyBBIEBjID4gQGMgMCwgZXh0cmFjdHMgQGMgbWluKEEsbikKKyAgICAgICAqCisgICAgICAgKiAgVGhlIGdvYWwgaXMgdG8gZW1wdHkgdGhlIGN1cnJlbnQgYnVmZmVyLCBhbmQgdG8gbm90IHJlcXVlc3QgYW55CisgICAgICAgKiAgbW9yZSBmcm9tIHRoZSBleHRlcm5hbCBpbnB1dCBzZXF1ZW5jZSBjb250cm9sbGVkIGJ5IHRoZSBzdHJlYW1idWYuCisgICAgICAqLworICAgICAgc3RyZWFtc2l6ZQorICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBVbmV4dHJhY3RpbmcgYSBzaW5nbGUgY2hhcmFjdGVyLgorICAgICAgICogIEBwYXJhbSAgX19jICBUaGUgY2hhcmFjdGVyIHRvIHB1c2ggYmFjayBpbnRvIHRoZSBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgcmRidWYoKSBpcyBub3QgbnVsbCwgY2FsbHMgQGMgcmRidWYoKS0+c3B1dGJhY2tjKGMpLgorICAgICAgICoKKyAgICAgICAqICBJZiBAYyByZGJ1ZigpIGlzIG51bGwgb3IgaWYgQGMgc3B1dGJhY2tjKCkgZmFpbHMsIHNldHMgYmFkYml0IGluCisgICAgICAgKiAgdGhlIGVycm9yIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBmaXJzdCBjbGVhcnMgZW9mYml0LiAgU2luY2Ugbm8gY2hhcmFjdGVycworICAgICAgICogICAgICAgICBhcmUgZXh0cmFjdGVkLCB0aGUgbmV4dCBjYWxsIHRvIEBjIGdjb3VudCgpIHdpbGwgcmV0dXJuIDAsCisgICAgICAgKiAgICAgICAgIGFzIHJlcXVpcmVkIGJ5IERSIDYwLgorICAgICAgKi8KKyAgICAgIF9faXN0cmVhbV90eXBlJgorICAgICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBVbmV4dHJhY3RpbmcgdGhlIHByZXZpb3VzIGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBJZiBAYyByZGJ1ZigpIGlzIG5vdCBudWxsLCBjYWxscyBAYyByZGJ1ZigpLT5zdW5nZXRjKGMpLgorICAgICAgICoKKyAgICAgICAqICBJZiBAYyByZGJ1ZigpIGlzIG51bGwgb3IgaWYgQGMgc3VuZ2V0YygpIGZhaWxzLCBzZXRzIGJhZGJpdCBpbgorICAgICAgICogIHRoZSBlcnJvciBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIFRoaXMgZnVuY3Rpb24gZmlyc3QgY2xlYXJzIGVvZmJpdC4gIFNpbmNlIG5vIGNoYXJhY3RlcnMKKyAgICAgICAqICAgICAgICAgYXJlIGV4dHJhY3RlZCwgdGhlIG5leHQgY2FsbCB0byBAYyBnY291bnQoKSB3aWxsIHJldHVybiAwLAorICAgICAgICogICAgICAgICBhcyByZXF1aXJlZCBieSBEUiA2MC4KKyAgICAgICovCisgICAgICBfX2lzdHJlYW1fdHlwZSYKKyAgICAgIHVuZ2V0KCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3luY2hyb25pemluZyB0aGUgc3RyZWFtIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgcmRidWYoKSBpcyBhIG51bGwgcG9pbnRlciwgcmV0dXJucyAtMS4KKyAgICAgICAqCisgICAgICAgKiAgT3RoZXJ3aXNlLCBjYWxscyBAYyByZGJ1ZigpLT5wdWJzeW5jKCksIGFuZCBpZiB0aGF0IHJldHVybnMgLTEsCisgICAgICAgKiAgc2V0cyBiYWRiaXQgYW5kIHJldHVybnMgLTEuCisgICAgICAgKgorICAgICAgICogIE90aGVyd2lzZSwgcmV0dXJucyAwLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKyAgICAgICAqICAgICAgICAgZXh0cmFjdGVkLCBpZiBhbnksIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgYWZmZWN0IHRoZSBuZXh0CisgICAgICAgKiAgICAgICAgIGNhbGwgdG8gQGMgZ2NvdW50KCkuCisgICAgICAqLworICAgICAgaW50CisgICAgICBzeW5jKCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgR2V0dGluZyB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uLgorICAgICAgICogIEByZXR1cm4gIEEgZmlsZSBwb3NpdGlvbiBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIElmIEBjIGZhaWwoKSBpcyBub3QgZmFsc2UsIHJldHVybnMgQGMgcG9zX3R5cGUoLTEpIHRvIGluZGljYXRlCisgICAgICAgKiAgZmFpbHVyZS4gIE90aGVyd2lzZSByZXR1cm5zIEBjIHJkYnVmKCktPnB1YnNlZWtvZmYoMCxjdXIsaW4pLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKyAgICAgICAqICAgICAgICAgZXh0cmFjdGVkLCBpZiBhbnksIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgYWZmZWN0IHRoZSBuZXh0CisgICAgICAgKiAgICAgICAgIGNhbGwgdG8gQGMgZ2NvdW50KCkuICBBdCB2YXJpYW5jZSB3aXRoIHB1dGJhY2ssIHVuZ2V0IGFuZAorICAgICAgICogICAgICAgICBzZWVrZywgZW9mYml0IGlzIG5vdCBjbGVhcmVkIGZpcnN0LgorICAgICAgKi8KKyAgICAgIHBvc190eXBlCisgICAgICB0ZWxsZygpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENoYW5naW5nIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgQSBmaWxlIHBvc2l0aW9uIG9iamVjdC4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBJZiBAYyBmYWlsKCkgaXMgbm90IHRydWUsIGNhbGxzIEBjIHJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MpLiAgSWYKKyAgICAgICAqICB0aGF0IGZ1bmN0aW9uIGZhaWxzLCBzZXRzIGZhaWxiaXQuCisgICAgICAgKgorICAgICAgICogIEBub3RlICBUaGlzIGZ1bmN0aW9uIGZpcnN0IGNsZWFycyBlb2ZiaXQuICBJdCBkb2VzIG5vdCBjb3VudCB0aGUKKyAgICAgICAqICAgICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkLCBpZiBhbnksIGFuZCB0aGVyZWZvcmUgZG9lcworICAgICAgICogICAgICAgICBub3QgYWZmZWN0IHRoZSBuZXh0IGNhbGwgdG8gQGMgZ2NvdW50KCkuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBzZWVrZyhwb3NfdHlwZSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhbmdpbmcgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIF9fb2ZmICBBIGZpbGUgb2Zmc2V0IG9iamVjdC4KKyAgICAgICAqICBAcGFyYW0gIF9fZGlyICBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRvIHNlZWsuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgZmFpbCgpIGlzIG5vdCB0cnVlLCBjYWxscyBAYyByZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLF9fZGlyKS4KKyAgICAgICAqICBJZiB0aGF0IGZ1bmN0aW9uIGZhaWxzLCBzZXRzIGZhaWxiaXQuCisgICAgICAgKgorICAgICAgICogIEBub3RlICBUaGlzIGZ1bmN0aW9uIGZpcnN0IGNsZWFycyBlb2ZiaXQuICBJdCBkb2VzIG5vdCBjb3VudCB0aGUKKyAgICAgICAqICAgICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkLCBpZiBhbnksIGFuZCB0aGVyZWZvcmUgZG9lcworICAgICAgICogICAgICAgICBub3QgYWZmZWN0IHRoZSBuZXh0IGNhbGwgdG8gQGMgZ2NvdW50KCkuCisgICAgICAqLworICAgICAgX19pc3RyZWFtX3R5cGUmCisgICAgICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOworICAgICAgLy9AfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgYmFzaWNfaXN0cmVhbSgpCisgICAgICA6IF9NX2djb3VudChzdHJlYW1zaXplKDApKQorICAgICAgeyB0aGlzLT5pbml0KDApOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CisJX19pc3RyZWFtX3R5cGUmCisJX01fZXh0cmFjdChfVmFsdWVUJiBfX3YpOworICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGRlY2xhcmF0aW9ucywgZGVmaW5lZCBpbiBzcmMvaXN0cmVhbS5jYy4KKyAgdGVtcGxhdGU8PgorICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCisgICAgYmFzaWNfaXN0cmVhbTxjaGFyPjo6CisgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKKworICB0ZW1wbGF0ZTw+CisgICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+OjoKKyAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24pOworCisgIHRlbXBsYXRlPD4KKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIGJhc2ljX2lzdHJlYW08Y2hhcj46OgorICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSk7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKKyAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+OjoKKyAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOworCisgIHRlbXBsYXRlPD4KKyAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgorICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD46OgorICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbik7CisKKyAgdGVtcGxhdGU8PgorICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCisgICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90Pjo6CisgICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGltKTsKKyNlbmRpZgorCisgIC8qKgorICAgKiAgQGJyaWVmICBQZXJmb3JtcyBzZXR1cCB3b3JrIGZvciBpbnB1dCBzdHJlYW1zLgorICAgKgorICAgKiAgT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbGwgb2YgdGhlIHN0YW5kYXJkCisgICAqICBleHRyYWN0b3JzIGFyZSBydW4uICBJdCBpcyByZXNwb25zaWJsZSBmb3IgPGVtPmV4Y2VwdGlvbi1zYWZlCisgICAqICBwcmVmaXggYW5kIHN1ZmZpeCBvcGVyYXRpb25zLDwvZW0+IGFsdGhvdWdoIG9ubHkgcHJlZml4IGFjdGlvbnMKKyAgICogIGFyZSBjdXJyZW50bHkgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKKyAgICB7CisgICAgICAvLyBEYXRhIE1lbWJlcnMuCisgICAgICBib29sIF9NX29rOworCisgICAgcHVibGljOgorICAgICAgLy8vIEVhc3kgYWNjZXNzIHRvIGRlcGVuZGVudCB0eXBlcy4KKyAgICAgIHR5cGVkZWYgX1RyYWl0cyAJCQkJCXRyYWl0c190eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiAJCV9fc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAJCV9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIAlfX2N0eXBlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlCQlfX2ludF90eXBlOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSBjb25zdHJ1Y3RvciBwZXJmb3JtcyBhbGwgdGhlIHdvcmsuCisgICAgICAgKiAgQHBhcmFtICBfX2lzICBUaGUgaW5wdXQgc3RyZWFtIHRvIGd1YXJkLgorICAgICAgICogIEBwYXJhbSAgX19ub3NraXB3cyAgV2hldGhlciB0byBjb25zdW1lIHdoaXRlc3BhY2Ugb3Igbm90LgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgc3RyZWFtIHN0YXRlIGlzIGdvb2QgKEBhIF9faXMuZ29vZCgpIGlzIHRydWUpLCB0aGVuIHRoZQorICAgICAgICogIGZvbGxvd2luZyBhY3Rpb25zIGFyZSBwZXJmb3JtZWQsIG90aGVyd2lzZSB0aGUgc2VudHJ5IHN0YXRlCisgICAgICAgKiAgaXMgZmFsc2UgKDxlbT5ub3Qgb2theTwvZW0+KSBhbmQgZmFpbGJpdCBpcyBzZXQgaW4gdGhlCisgICAgICAgKiAgc3RyZWFtIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqICBUaGUgc2VudHJ5J3MgcHJlcGFyYXRvcnkgYWN0aW9ucyBhcmU6CisgICAgICAgKgorICAgICAgICogIC0jIGlmIHRoZSBzdHJlYW0gaXMgdGllZCB0byBhbiBvdXRwdXQgc3RyZWFtLCBAYyBpcy50aWUoKS0+Zmx1c2goKQorICAgICAgICogICAgIGlzIGNhbGxlZCB0byBzeW5jaHJvbml6ZSB0aGUgb3V0cHV0IHNlcXVlbmNlCisgICAgICAgKiAgLSMgaWYgQGEgX19ub3NraXB3cyBpcyBmYWxzZSwgYW5kIEBjIGlvc19iYXNlOjpza2lwd3MgaXMgc2V0IGluCisgICAgICAgKiAgICAgQGMgaXMuZmxhZ3MoKSwgdGhlIHNlbnRyeSBleHRyYWN0cyBhbmQgZGlzY2FyZHMgd2hpdGVzcGFjZQorICAgICAgICogICAgIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RyZWFtLiAgVGhlIGN1cnJlbnRseSBpbWJ1ZWQgbG9jYWxlIGlzCisgICAgICAgKiAgICAgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBlYWNoIGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgc3RyZWFtIHN0YXRlIGlzIHN0aWxsIGdvb2QsIHRoZW4gdGhlIHNlbnRyeSBzdGF0ZSBiZWNvbWVzCisgICAgICAgKiAgdHJ1ZSAoQGEgb2theSkuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBRdWljayBzdGF0dXMgY2hlY2tpbmcuCisgICAgICAgKiAgQHJldHVybiAgVGhlIHNlbnRyeSBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIGVhc2Ugb2YgdXNlLCBzZW50cmllcyBtYXkgYmUgY29udmVydGVkIHRvIGJvb2xlYW5zLiAgVGhlCisgICAgICAgKiAgcmV0dXJuIHZhbHVlIGlzIHRoYXQgb2YgdGhlIHNlbnRyeSBzdGF0ZSAodHJ1ZSA9PSBva2F5KS4KKyAgICAgICovCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgZXhwbGljaXQKKyNlbmRpZgorICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9vazsgfQorICAgIH07CisKKyAgLy9AeworICAvKioKKyAgICogIEBicmllZiAgQ2hhcmFjdGVyIGV4dHJhY3RvcnMKKyAgICogIEBwYXJhbSAgX19pbiAgQW4gaW5wdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtICBfX2MgIEEgY2hhcmFjdGVyIHJlZmVyZW5jZS4KKyAgICogIEByZXR1cm4gIGluCisgICAqCisgICAqICBCZWhhdmVzIGxpa2Ugb25lIG9mIHRoZSBmb3JtYXR0ZWQgYXJpdGhtZXRpYyBleHRyYWN0b3JzIGRlc2NyaWJlZCBpbgorICAgKiAgc3RkOjpiYXNpY19pc3RyZWFtLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCB3aXRoIGdvb2QKKyAgICogIHN0YXR1cywgdGhpcyBmdW5jdGlvbiBleHRyYWN0cyBhIGNoYXJhY3RlciAoaWYgb25lIGlzIGF2YWlsYWJsZSkgYW5kCisgICAqICBzdG9yZXMgaXQgaW4gQGEgX19jLiAgT3RoZXJ3aXNlLCBzZXRzIGZhaWxiaXQgaW4gdGhlIGlucHV0IHN0cmVhbS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOworCisgIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyJiBfX2MpCisgICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXImIF9fYykKKyAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQorICAvL0B9CisKKyAgLy9AeworICAvKioKKyAgICogIEBicmllZiAgQ2hhcmFjdGVyIHN0cmluZyBleHRyYWN0b3JzCisgICAqICBAcGFyYW0gIF9faW4gIEFuIGlucHV0IHN0cmVhbS4KKyAgICogIEBwYXJhbSAgX19zICBBIHBvaW50ZXIgdG8gYSBjaGFyYWN0ZXIgYXJyYXkuCisgICAqICBAcmV0dXJuICBfX2luCisgICAqCisgICAqICBCZWhhdmVzIGxpa2Ugb25lIG9mIHRoZSBmb3JtYXR0ZWQgYXJpdGhtZXRpYyBleHRyYWN0b3JzIGRlc2NyaWJlZCBpbgorICAgKiAgc3RkOjpiYXNpY19pc3RyZWFtLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCB3aXRoIGdvb2QKKyAgICogIHN0YXR1cywgdGhpcyBmdW5jdGlvbiBleHRyYWN0cyB1cCB0byBAYyBuIGNoYXJhY3RlcnMgYW5kIHN0b3JlcyB0aGVtCisgICAqICBpbnRvIHRoZSBhcnJheSBzdGFydGluZyBhdCBAYSBfX3MuICBAYyBuIGlzIGRlZmluZWQgYXM6CisgICAqCisgICAqICAtIGlmIEBjIHdpZHRoKCkgaXMgZ3JlYXRlciB0aGFuIHplcm8sIEBjIG4gaXMgd2lkdGgoKSBvdGhlcndpc2UKKyAgICogIC0gQGMgbiBpcyA8ZW0+dGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGUgbGFyZ2VzdCBhcnJheSBvZiAqCisgICAqICAtIEBjIGNoYXJfdHlwZSB0aGF0IGNhbiBzdG9yZSBhIHRlcm1pbmF0aW5nIEBjIGVvcy48L2VtPgorICAgKiAgLSBbMjcuNi4xLjIuM10vNgorICAgKgorICAgKiAgQ2hhcmFjdGVycyBhcmUgZXh0cmFjdGVkIGFuZCBzdG9yZWQgdW50aWwgb25lIG9mIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKKyAgICogIC0gQGMgbi0xIGNoYXJhY3RlcnMgYXJlIHN0b3JlZAorICAgKiAgLSBFT0YgaXMgcmVhY2hlZAorICAgKiAgLSB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlCisgICAqICAtIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhIG51bGwgYnl0ZSAoaS5lLiwgQGMgY2hhclQoKSApCisgICAqCisgICAqICBAYyB3aWR0aCgwKSBpcyB0aGVuIGNhbGxlZCBmb3IgdGhlIGlucHV0IHN0cmVhbS4KKyAgICoKKyAgICogIElmIG5vIGNoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCwgc2V0cyBmYWlsYml0LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7CisKKyAgLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gZGVjbGFyYXRpb24sIGRlZmluZWQgaW4gc3JjL2lzdHJlYW0uY2MuCisgIHRlbXBsYXRlPD4KKyAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYgX19pbiwgY2hhciogX19zKTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciogX19zKQorICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyKiBfX3MpCisgICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KKyAgLy9AfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBUZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3N0cmVhbQorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIEB0cGFyYW0gX0NoYXJUICBUeXBlIG9mIGNoYXJhY3RlciBzdHJlYW0uCisgICAqICBAdHBhcmFtIF9UcmFpdHMgIFRyYWl0cyBmb3IgY2hhcmFjdGVyIHR5cGUsIGRlZmF1bHRzIHRvCisgICAqICAgICAgICAgICAgICAgICAgIGNoYXJfdHJhaXRzPF9DaGFyVD4uCisgICAqCisgICAqICBUaGlzIGNsYXNzIG11bHRpcGx5IGluaGVyaXRzIGZyb20gdGhlIGlucHV0IGFuZCBvdXRwdXQgc3RyZWFtIGNsYXNzZXMKKyAgICogIHNpbXBseSB0byBwcm92aWRlIGEgc2luZ2xlIGludGVyZmFjZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCisgICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAorICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNzEuIGJhc2ljX2lvc3RyZWFtIG1pc3NpbmcgdHlwZWRlZnMKKyAgICAgIC8vIFR5cGVzIChpbmhlcml0ZWQpOgorICAgICAgdHlwZWRlZiBfQ2hhclQJCQkgCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIAkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIAkJb2ZmX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMJCQkgCQl0cmFpdHNfdHlwZTsKKworICAgICAgLy8gTm9uLXN0YW5kYXJkIFR5cGVzOgorICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4JCV9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4JCV9fb3N0cmVhbV90eXBlOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvbnN0cnVjdG9yIGRvZXMgbm90aGluZy4KKyAgICAgICAqCisgICAgICAgKiAgQm90aCBvZiB0aGUgcGFyZW50IGNsYXNzZXMgYXJlIGluaXRpYWxpemVkIHdpdGggdGhlIHNhbWUKKyAgICAgICAqICBzdHJlYW1idWYgcG9pbnRlciBwYXNzZWQgdG8gdGhpcyBjb25zdHJ1Y3Rvci4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCisgICAgICA6IF9faXN0cmVhbV90eXBlKF9fc2IpLCBfX29zdHJlYW1fdHlwZShfX3NiKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZXN0cnVjdG9yIGRvZXMgbm90aGluZy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsCisgICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIGJhc2ljX2lvc3RyZWFtKCkKKyAgICAgIDogX19pc3RyZWFtX3R5cGUoKSwgX19vc3RyZWFtX3R5cGUoKSB7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmICBRdWljayBhbmQgZWFzeSB3YXkgdG8gZWF0IHdoaXRlc3BhY2UKKyAgICoKKyAgICogIFRoaXMgbWFuaXB1bGF0b3IgZXh0cmFjdHMgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBzdG9wcGluZyB3aGVuIHRoZQorICAgKiAgbmV4dCBjaGFyYWN0ZXIgaXMgbm9uLXdoaXRlc3BhY2UsIG9yIHdoZW4gdGhlIGlucHV0IHNlcXVlbmNlIGlzIGVtcHR5LgorICAgKiAgSWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBAYyBlb2ZiaXQgaXMgc2V0IGluIHRoZSBzdHJlYW0sIGJ1dCBub3QKKyAgICogIEBjIGZhaWxiaXQuCisgICAqCisgICAqICBUaGUgY3VycmVudCBsb2NhbGUgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCisgICAqCisgICAqICBFeGFtcGxlOgorICAgKiAgQGNvZGUKKyAgICogICAgIE15Q2xhc3MgICBtYzsKKyAgICoKKyAgICogICAgIHN0ZDo6Y2luID4+IHN0ZDo6d3MgPj4gbWM7CisgICAqICBAZW5kY29kZQorICAgKiAgd2lsbCBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSBiZWZvcmUgY2FsbGluZyBvcGVyYXRvcj4+IG9uIGNpbiBhbmQgeW91cgorICAgKiAgb2JqZWN0LiAgTm90ZSB0aGF0IHRoZSBzYW1lIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgYnkgY3JlYXRpbmcgYQorICAgKiAgc3RkOjpiYXNpY19pc3RyZWFtOjpzZW50cnkgaW5zaWRlIHlvdXIgZGVmaW5pdGlvbiBvZiBvcGVyYXRvcj4+LgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIC8vIFsyNy43LjEuNl0gUnZhbHVlIHN0cmVhbSBleHRyYWN0aW9uCisgIC8qKgorICAgKiAgQGJyaWVmICBHZW5lcmljIGV4dHJhY3RvciBmb3IgcnZhbHVlIHN0cmVhbQorICAgKiAgQHBhcmFtICBfX2lzICBBbiBpbnB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gIF9feCAgQSByZWZlcmVuY2UgdG8gdGhlIGV4dHJhY3Rpb24gdGFyZ2V0LgorICAgKiAgQHJldHVybiAgaXMKKyAgICoKKyAgICogIFRoaXMgaXMganVzdCBhIGZvcndhcmRpbmcgZnVuY3Rpb24gdG8gYWxsb3cgZXh0cmFjdGlvbiBmcm9tCisgICAqICBydmFsdWUgc3RyZWFtcyBzaW5jZSB0aGV5IHdvbid0IGJpbmQgdG8gdGhlIGV4dHJhY3RvciBmdW5jdGlvbnMKKyAgICogIHRoYXQgdGFrZSBhbiBsdmFsdWUgcmVmZXJlbmNlLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiYgX19pcywgX1RwJiBfX3gpCisgICAgeyByZXR1cm4gKF9faXMgPj4gX194KTsgfQorI2VuZGlmIC8vIEMrKzExCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2luY2x1ZGUgPGJpdHMvaXN0cmVhbS50Y2M+CisKKyNlbmRpZgkvKiBfR0xJQkNYWF9JU1RSRUFNICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2l0ZXJhdG9yIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9pdGVyYXRvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzgyZGIxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9pdGVyYXRvcgpAQCAtMCwwICsxLDcwIEBACisvLyA8aXRlcmF0b3I+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL2l0ZXJhdG9yCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0lURVJBVE9SCisjZGVmaW5lIF9HTElCQ1hYX0lURVJBVE9SIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8b3N0cmVhbT4KKyNpbmNsdWRlIDxpc3RyZWFtPgorI2luY2x1ZGUgPGJpdHMvc3RyZWFtX2l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL3JhbmdlX2FjY2Vzcy5oPgorCisjZW5kaWYgLyogX0dMSUJDWFhfSVRFUkFUT1IgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbGltaXRzIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9saW1pdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEzN2QwYgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbGltaXRzCkBAIC0wLDAgKzEsMTc4NiBAQAorLy8gVGhlIHRlbXBsYXRlIGFuZCBpbmxpbmVzIGZvciB0aGUgbnVtZXJpY19saW1pdHMgY2xhc3Nlcy4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvbGltaXRzCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLyBOb3RlOiB0aGlzIGlzIG5vdCBhIGNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb24uCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPGdkckBjb2Rlc291cmNlcnkuY29tPgorCisvLworLy8gSVNPIDE0ODgyOjE5OTgKKy8vIDE4LjIuMQorLy8KKworI2lmbmRlZiBfR0xJQkNYWF9OVU1FUklDX0xJTUlUUworI2RlZmluZSBfR0xJQkNYWF9OVU1FUklDX0xJTUlUUyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKKy8vCisvLyBUaGUgbnVtZXJpY19saW1pdHM8PiB0cmFpdHMgZG9jdW1lbnQgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBhc3BlY3RzCisvLyBvZiBmdW5kYW1lbnRhbCBhcml0aG1ldGljIGRhdGEgdHlwZXMgKGludGVnZXJzIGFuZCBmbG9hdGluZyBwb2ludHMpLgorLy8gRnJvbSBTdGFuZGFyZCBDKysgcG9pbnQgb2YgdmlldywgdGhlcmUgYXJlIDE0IHN1Y2ggdHlwZXM6CisvLyAgICogaW50ZWdlcnMKKy8vICAgICAgICAgYm9vbAkJCQkJCQkoMSkKKy8vICAgICAgICAgY2hhciwgc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHdjaGFyX3QgICAgICAgICAgICAoNCkKKy8vICAgICAgICAgc2hvcnQsIHVuc2lnbmVkIHNob3J0CQkJCSgyKQorLy8gICAgICAgICBpbnQsIHVuc2lnbmVkCQkJCQkoMikKKy8vICAgICAgICAgbG9uZywgdW5zaWduZWQgbG9uZwkJCQkJKDIpCisvLworLy8gICAqIGZsb2F0aW5nIHBvaW50cworLy8gICAgICAgICBmbG9hdAkJCQkJCSgxKQorLy8gICAgICAgICBkb3VibGUJCQkJCQkoMSkKKy8vICAgICAgICAgbG9uZyBkb3VibGUJCQkJCQkoMSkKKy8vCisvLyBHTlUgQysrIHVuZGVyc3RhbmRzICh3aGVyZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgQy1saWJyYXJ5KQorLy8gICAqIGludGVnZXIKKy8vICAgICAgICAgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcJCQkoMikKKy8vCisvLyB3aGljaCBicmluZ3MgdXMgdG8gMTYgZnVuZGFtZW50YWwgYXJpdGhtZXRpYyBkYXRhIHR5cGVzIGluIEdOVSBDKysuCisvLworLy8KKy8vIFNpbmNlIGEgbnVtZXJpY19saW1pdHM8PiBpcyBhIGJpdCB0cmlja3kgdG8gZ2V0IHJpZ2h0LCB3ZSByZWx5IG9uCisvLyBhbiBpbnRlcmZhY2UgY29tcG9zZWQgb2YgbWFjcm9zIHdoaWNoIHNob3VsZCBiZSBkZWZpbmVkIGluIGNvbmZpZy9vcworLy8gb3IgY29uZmlnL2NwdSB3aGVuIHRoZXkgZGlmZmVyIGZyb20gdGhlIGdlbmVyaWMgKHJlYWQgYXJiaXRyYXJ5KQorLy8gZGVmaW5pdGlvbnMgZ2l2ZW4gaGVyZS4KKy8vCisKKy8vIFRoZXNlIHZhbHVlcyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gZmlsZS4KKy8vIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgYXBwcm9wcmlhdGUgZm9yIG1hbnkgMzItYml0IHRhcmdldHMuCisKKy8vIEdDQyBvbmx5IGludHJpbnNpY2FsbHkgc3VwcG9ydHMgbW9kdWxvIGludGVncmFsIHR5cGVzLiAgVGhlIG9ubHkgcmVtYWluaW5nCisvLyBpbnRlZ3JhbCBleGNlcHRpb25hbCB2YWx1ZXMgaXMgZGl2aXNpb24gYnkgemVyby4gIE9ubHkgdGFyZ2V0cyB0aGF0IGRvIG5vdAorLy8gc2lnbmFsIGRpdmlzaW9uIGJ5IHplcm8gaW4gc29tZSAiaGFyZCB0byBpZ25vcmUiIHdheSBzaG91bGQgdXNlIGZhbHNlLgorI2lmbmRlZiBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHMKKyMgZGVmaW5lIF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwcyB0cnVlCisjZW5kaWYKKworLy8gZmxvYXQKKy8vCisKKy8vIERlZmF1bHQgdmFsdWVzLiAgU2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gY29uZmlndXJhdGlvbiBmaWxlcyBpZiBuZWNlc3NhcnkuCisKKyNpZm5kZWYgX19nbGliY3h4X2Zsb2F0X2hhc19kZW5vcm1fbG9zcworIyAgZGVmaW5lIF9fZ2xpYmN4eF9mbG9hdF9oYXNfZGVub3JtX2xvc3MgZmFsc2UKKyNlbmRpZgorI2lmbmRlZiBfX2dsaWJjeHhfZmxvYXRfdHJhcHMKKyMgIGRlZmluZSBfX2dsaWJjeHhfZmxvYXRfdHJhcHMgZmFsc2UKKyNlbmRpZgorI2lmbmRlZiBfX2dsaWJjeHhfZmxvYXRfdGlueW5lc3NfYmVmb3JlCisjICBkZWZpbmUgX19nbGliY3h4X2Zsb2F0X3RpbnluZXNzX2JlZm9yZSBmYWxzZQorI2VuZGlmCisKKy8vIGRvdWJsZQorCisvLyBEZWZhdWx0IHZhbHVlcy4gIFNob3VsZCBiZSBvdmVycmlkZGVuIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMgaWYgbmVjZXNzYXJ5LgorCisjaWZuZGVmIF9fZ2xpYmN4eF9kb3VibGVfaGFzX2Rlbm9ybV9sb3NzCisjICBkZWZpbmUgX19nbGliY3h4X2RvdWJsZV9oYXNfZGVub3JtX2xvc3MgZmFsc2UKKyNlbmRpZgorI2lmbmRlZiBfX2dsaWJjeHhfZG91YmxlX3RyYXBzCisjICBkZWZpbmUgX19nbGliY3h4X2RvdWJsZV90cmFwcyBmYWxzZQorI2VuZGlmCisjaWZuZGVmIF9fZ2xpYmN4eF9kb3VibGVfdGlueW5lc3NfYmVmb3JlCisjICBkZWZpbmUgX19nbGliY3h4X2RvdWJsZV90aW55bmVzc19iZWZvcmUgZmFsc2UKKyNlbmRpZgorCisvLyBsb25nIGRvdWJsZQorCisvLyBEZWZhdWx0IHZhbHVlcy4gIFNob3VsZCBiZSBvdmVycmlkZGVuIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMgaWYgbmVjZXNzYXJ5LgorCisjaWZuZGVmIF9fZ2xpYmN4eF9sb25nX2RvdWJsZV9oYXNfZGVub3JtX2xvc3MKKyMgIGRlZmluZSBfX2dsaWJjeHhfbG9uZ19kb3VibGVfaGFzX2Rlbm9ybV9sb3NzIGZhbHNlCisjZW5kaWYKKyNpZm5kZWYgX19nbGliY3h4X2xvbmdfZG91YmxlX3RyYXBzCisjICBkZWZpbmUgX19nbGliY3h4X2xvbmdfZG91YmxlX3RyYXBzIGZhbHNlCisjZW5kaWYKKyNpZm5kZWYgX19nbGliY3h4X2xvbmdfZG91YmxlX3RpbnluZXNzX2JlZm9yZQorIyAgZGVmaW5lIF9fZ2xpYmN4eF9sb25nX2RvdWJsZV90aW55bmVzc19iZWZvcmUgZmFsc2UKKyNlbmRpZgorCisvLyBZb3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGRlZmluZSBhbnkgbWFjcm9zIGJlbG93IHRoaXMgcG9pbnQuCisKKyNkZWZpbmUgX19nbGliY3h4X3NpZ25lZChUKQkoKFQpKC0xKSA8IDApCisKKyNkZWZpbmUgX19nbGliY3h4X21pbihUKSBcCisgIChfX2dsaWJjeHhfc2lnbmVkIChUKSA/IC1fX2dsaWJjeHhfbWF4IChUKSAtIDEgOiAoVCkwKQorCisjZGVmaW5lIF9fZ2xpYmN4eF9tYXgoVCkgXAorICAoX19nbGliY3h4X3NpZ25lZCAoVCkgPyBcCisgICAoKCgoKFQpMSA8PCAoX19nbGliY3h4X2RpZ2l0cyAoVCkgLSAxKSkgLSAxKSA8PCAxKSArIDEpIDogfihUKTApCisKKyNkZWZpbmUgX19nbGliY3h4X2RpZ2l0cyhUKSBcCisgIChzaXplb2YoVCkgKiBfX0NIQVJfQklUX18gLSBfX2dsaWJjeHhfc2lnbmVkIChUKSkKKworLy8gVGhlIGZyYWN0aW9uIDY0My8yMTM2IGFwcHJveGltYXRlcyBsb2cxMCgyKSB0byA3IHNpZ25pZmljYW50IGRpZ2l0cy4KKyNkZWZpbmUgX19nbGliY3h4X2RpZ2l0czEwKFQpIFwKKyAgKF9fZ2xpYmN4eF9kaWdpdHMgKFQpICogNjQzTCAvIDIxMzYpCisKKyNkZWZpbmUgX19nbGliY3h4X21heF9kaWdpdHMxMChUKSBcCisgICgyICsgKFQpICogNjQzTCAvIDIxMzYpCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBicmllZiBEZXNjcmliZXMgdGhlIHJvdW5kaW5nIHN0eWxlIGZvciBmbG9hdGluZy1wb2ludCB0eXBlcy4KKyAgICoKKyAgICogIFRoaXMgaXMgdXNlZCBpbiB0aGUgc3RkOjpudW1lcmljX2xpbWl0cyBjbGFzcy4KKyAgKi8KKyAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQorICB7CisgICAgcm91bmRfaW5kZXRlcm1pbmF0ZSAgICAgICA9IC0xLCAgICAvLy8gSW50ZXJtZWRpYXRlLgorICAgIHJvdW5kX3Rvd2FyZF96ZXJvICAgICAgICAgPSAwLCAgICAgLy8vIFRvIHplcm8uCisgICAgcm91bmRfdG9fbmVhcmVzdCAgICAgICAgICA9IDEsICAgICAvLy8gVG8gdGhlIG5lYXJlc3QgcmVwcmVzZW50YWJsZSB2YWx1ZS4KKyAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgICAgID0gMiwgICAgIC8vLyBUbyBpbmZpbml0eS4KKyAgICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0gMyAgICAgIC8vLyBUbyBuZWdhdGl2ZSBpbmZpbml0eS4KKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiBEZXNjcmliZXMgdGhlIGRlbm9ybWFsaXphdGlvbiBmb3IgZmxvYXRpbmctcG9pbnQgdHlwZXMuCisgICAqCisgICAqICBUaGVzZSB2YWx1ZXMgcmVwcmVzZW50IHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGEgdmFyaWFibGUgbnVtYmVyCisgICAqICBvZiBleHBvbmVudCBiaXRzLiAgVGhpcyB0eXBlIGlzIHVzZWQgaW4gdGhlIHN0ZDo6bnVtZXJpY19saW1pdHMgY2xhc3MuCisgICovCisgIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlCisgIHsKKyAgICAvLy8gSW5kZXRlcm1pbmF0ZSBhdCBjb21waWxlIHRpbWUgd2hldGhlciBkZW5vcm1hbGl6ZWQgdmFsdWVzIGFyZSBhbGxvd2VkLgorICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCisgICAgLy8vIFRoZSB0eXBlIGRvZXMgbm90IGFsbG93IGRlbm9ybWFsaXplZCB2YWx1ZXMuCisgICAgZGVub3JtX2Fic2VudCAgICAgICAgPSAwLAorICAgIC8vLyBUaGUgdHlwZSBhbGxvd3MgZGVub3JtYWxpemVkIHZhbHVlcy4KKyAgICBkZW5vcm1fcHJlc2VudCAgICAgICA9IDEKKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiBQYXJ0IG9mIHN0ZDo6bnVtZXJpY19saW1pdHMuCisgICAqCisgICAqICBUaGUgQGMgc3RhdGljIEBjIGNvbnN0IG1lbWJlcnMgYXJlIHVzYWJsZSBhcyBpbnRlZ3JhbCBjb25zdGFudAorICAgKiAgZXhwcmVzc2lvbnMuCisgICAqCisgICAqICBAbm90ZSBUaGlzIGlzIGEgc2VwYXJhdGUgY2xhc3MgZm9yIHB1cnBvc2VzIG9mIGVmZmljaWVuY3k7IHlvdQorICAgKiAgICAgICAgc2hvdWxkIG9ubHkgYWNjZXNzIHRoZXNlIG1lbWJlcnMgYXMgcGFydCBvZiBhbiBpbnN0YW50aWF0aW9uCisgICAqICAgICAgICBvZiB0aGUgc3RkOjpudW1lcmljX2xpbWl0cyBjbGFzcy4KKyAgKi8KKyAgc3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQorICB7CisgICAgLyoqIFRoaXMgd2lsbCBiZSB0cnVlIGZvciBhbGwgZnVuZGFtZW50YWwgdHlwZXMgKHdoaWNoIGhhdmUKKwlzcGVjaWFsaXphdGlvbnMpLCBhbmQgZmFsc2UgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4gICovCisgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOworCisgICAgLyoqIFRoZSBudW1iZXIgb2YgQGMgcmFkaXggZGlnaXRzIHRoYXQgYmUgcmVwcmVzZW50ZWQgd2l0aG91dCBjaGFuZ2U6ICBmb3IKKwlpbnRlZ2VyIHR5cGVzLCB0aGUgbnVtYmVyIG9mIG5vbi1zaWduIGJpdHMgaW4gdGhlIG1hbnRpc3NhOyBmb3IKKwlmbG9hdGluZyB0eXBlcywgdGhlIG51bWJlciBvZiBAYyByYWRpeCBkaWdpdHMgaW4gdGhlIG1hbnRpc3NhLiAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzID0gMDsKKworICAgIC8qKiBUaGUgbnVtYmVyIG9mIGJhc2UgMTAgZGlnaXRzIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIHdpdGhvdXQgY2hhbmdlLiAqLworICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMxMCA9IDA7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgLyoqIFRoZSBudW1iZXIgb2YgYmFzZSAxMCBkaWdpdHMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoYXQgdmFsdWVzIHdoaWNoCisJZGlmZmVyIGFyZSBhbHdheXMgZGlmZmVyZW50aWF0ZWQuICAqLworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKworICAgIC8qKiBUcnVlIGlmIHRoZSB0eXBlIGlzIHNpZ25lZC4gICovCisgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKKworICAgIC8qKiBUcnVlIGlmIHRoZSB0eXBlIGlzIGludGVnZXIuICAqLworICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOworCisgICAgLyoqIFRydWUgaWYgdGhlIHR5cGUgdXNlcyBhbiBleGFjdCByZXByZXNlbnRhdGlvbi4gQWxsIGludGVnZXIgdHlwZXMgYXJlCisJZXhhY3QsIGJ1dCBub3QgYWxsIGV4YWN0IHR5cGVzIGFyZSBpbnRlZ2VyLiAgRm9yIGV4YW1wbGUsIHJhdGlvbmFsIGFuZAorCWZpeGVkLWV4cG9uZW50IHJlcHJlc2VudGF0aW9ucyBhcmUgZXhhY3QgYnV0IG5vdCBpbnRlZ2VyLiAqLworICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKKworICAgIC8qKiBGb3IgaW50ZWdlciB0eXBlcywgc3BlY2lmaWVzIHRoZSBiYXNlIG9mIHRoZSByZXByZXNlbnRhdGlvbi4gIEZvcgorCWZsb2F0aW5nIHR5cGVzLCBzcGVjaWZpZXMgdGhlIGJhc2Ugb2YgdGhlIGV4cG9uZW50IHJlcHJlc2VudGF0aW9uLiAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgcmFkaXggPSAwOworCisgICAgLyoqIFRoZSBtaW5pbXVtIG5lZ2F0aXZlIGludGVnZXIgc3VjaCB0aGF0IEBjIHJhZGl4IHJhaXNlZCB0byB0aGUgcG93ZXIgb2YKKwkob25lIGxlc3MgdGhhbiB0aGF0IGludGVnZXIpIGlzIGEgbm9ybWFsaXplZCBmbG9hdGluZyBwb2ludCBudW1iZXIuICAqLworICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQgPSAwOworCisgICAgLyoqIFRoZSBtaW5pbXVtIG5lZ2F0aXZlIGludGVnZXIgc3VjaCB0aGF0IDEwIHJhaXNlZCB0byB0aGF0IHBvd2VyIGlzIGluCisJdGhlIHJhbmdlIG9mIG5vcm1hbGl6ZWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gICovCisgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKworICAgIC8qKiBUaGUgbWF4aW11bSBwb3NpdGl2ZSBpbnRlZ2VyIHN1Y2ggdGhhdCBAYyByYWRpeCByYWlzZWQgdG8gdGhlIHBvd2VyIG9mCisJKG9uZSBsZXNzIHRoYW4gdGhhdCBpbnRlZ2VyKSBpcyBhIHJlcHJlc2VudGFibGUgZmluaXRlIGZsb2F0aW5nIHBvaW50CisJbnVtYmVyLiAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKworICAgIC8qKiBUaGUgbWF4aW11bSBwb3NpdGl2ZSBpbnRlZ2VyIHN1Y2ggdGhhdCAxMCByYWlzZWQgdG8gdGhhdCBwb3dlciBpcyBpbgorCXRoZSByYW5nZSBvZiByZXByZXNlbnRhYmxlIGZpbml0ZSBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgLyoqIFRydWUgaWYgdGhlIHR5cGUgaGFzIGEgcmVwcmVzZW50YXRpb24gZm9yIHBvc2l0aXZlIGluZmluaXR5LiAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworCisgICAgLyoqIFRydWUgaWYgdGhlIHR5cGUgaGFzIGEgcmVwcmVzZW50YXRpb24gZm9yIGEgcXVpZXQgKG5vbi1zaWduYWxpbmcpCisJTm90IGEgTnVtYmVyLiAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKworICAgIC8qKiBUcnVlIGlmIHRoZSB0eXBlIGhhcyBhIHJlcHJlc2VudGF0aW9uIGZvciBhIHNpZ25hbGluZworCU5vdCBhIE51bWJlci4gICovCisgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworCisgICAgLyoqIFNlZSBzdGQ6OmZsb2F0X2Rlbm9ybV9zdHlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICovCisgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworCisgICAgLyoqIFRydWUgaWYgbG9zcyBvZiBhY2N1cmFjeSBpcyBkZXRlY3RlZCBhcyBhIGRlbm9ybWFsaXphdGlvbiBsb3NzLAorCXJhdGhlciB0aGFuIGFzIGFuIGluZXhhY3QgcmVzdWx0LiAqLworICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAvKiogVHJ1ZSBpZi1hbmQtb25seS1pZiB0aGUgdHlwZSBhZGhlcmVzIHRvIHRoZSBJRUMgNTU5IHN0YW5kYXJkLCBhbHNvCisJa25vd24gYXMgSUVFRSA3NTQuICAoT25seSBtYWtlcyBzZW5zZSBmb3IgZmxvYXRpbmcgcG9pbnQgdHlwZXMuKSAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2llYzU1OSA9IGZhbHNlOworCisgICAgLyoqIFRydWUgaWYgdGhlIHNldCBvZiB2YWx1ZXMgcmVwcmVzZW50YWJsZSBieSB0aGUgdHlwZSBpcworCWZpbml0ZS4gIEFsbCBidWlsdC1pbiB0eXBlcyBhcmUgYm91bmRlZCwgdGhpcyBtZW1iZXIgd291bGQgYmUKKwlmYWxzZSBmb3IgYXJiaXRyYXJ5IHByZWNpc2lvbiB0eXBlcy4gKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSBmYWxzZTsKKworICAgIC8qKiBUcnVlIGlmIHRoZSB0eXBlIGlzIEBlIG1vZHVsby4gQSB0eXBlIGlzIG1vZHVsbyBpZiwgZm9yIGFueQorCW9wZXJhdGlvbiBpbnZvbHZpbmcgKywgLSwgb3IgKiBvbiB2YWx1ZXMgb2YgdGhhdCB0eXBlIHdob3NlCisJcmVzdWx0IHdvdWxkIGZhbGwgb3V0c2lkZSB0aGUgcmFuZ2UgW21pbigpLG1heCgpXSwgdGhlIHZhbHVlCisJcmV0dXJuZWQgZGlmZmVycyBmcm9tIHRoZSB0cnVlIHZhbHVlIGJ5IGFuIGludGVnZXIgbXVsdGlwbGUgb2YKKwltYXgoKSAtIG1pbigpICsgMS4gT24gbW9zdCBtYWNoaW5lcywgdGhpcyBpcyBmYWxzZSBmb3IgZmxvYXRpbmcKKwl0eXBlcywgdHJ1ZSBmb3IgdW5zaWduZWQgaW50ZWdlcnMsIGFuZCB0cnVlIGZvciBzaWduZWQgaW50ZWdlcnMuCisJU2VlIFBSMjIyMDAgYWJvdXQgc2lnbmVkIGludGVnZXJzLiAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX21vZHVsbyA9IGZhbHNlOworCisgICAgLyoqIFRydWUgaWYgdHJhcHBpbmcgaXMgaW1wbGVtZW50ZWQgZm9yIHRoaXMgdHlwZS4gICovCisgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcyA9IGZhbHNlOworCisgICAgLyoqIFRydWUgaWYgdGluaW5lc3MgaXMgZGV0ZWN0ZWQgYmVmb3JlIHJvdW5kaW5nLiAgKHNlZSBJRUMgNTU5KSAgKi8KKyAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworCisgICAgLyoqIFNlZSBzdGQ6OmZsb2F0X3JvdW5kX3N0eWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhpcyBpcyBvbmx5CisJbWVhbmluZ2Z1bCBmb3IgZmxvYXRpbmcgdHlwZXM7IGludGVnZXIgdHlwZXMgd2lsbCBhbGwgYmUKKwlyb3VuZF90b3dhcmRfemVyby4gICovCisgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSAKKwkJCQkJCSAgICByb3VuZF90b3dhcmRfemVybzsKKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiBQcm9wZXJ0aWVzIG9mIGZ1bmRhbWVudGFsIHR5cGVzLgorICAgKgorICAgKiAgVGhpcyBjbGFzcyBhbGxvd3MgYSBwcm9ncmFtIHRvIG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICogIHJlcHJlc2VudGF0aW9uIG9mIGEgZnVuZGFtZW50YWwgdHlwZSBvbiBhIGdpdmVuIHBsYXRmb3JtLiAgRm9yCisgICAqICBub24tZnVuZGFtZW50YWwgdHlwZXMsIHRoZSBmdW5jdGlvbnMgd2lsbCByZXR1cm4gMCBhbmQgdGhlIGRhdGEKKyAgICogIG1lbWJlcnMgd2lsbCBhbGwgYmUgQGMgZmFsc2UuCisgICAqCisgICAqICBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTOiAgRFJzIDIwMSBhbmQgMTg0IChoaSBHYWJ5ISkgYXJlCisgICAqICBub3RlZCwgYnV0IG5vdCBpbmNvcnBvcmF0ZWQgaW4gdGhpcyBkb2N1bWVudGVkICh5ZXQpLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzIDogcHVibGljIF9fbnVtZXJpY19saW1pdHNfYmFzZQorICAgIHsKKyAgICAgIC8qKiBUaGUgbWluaW11bSBmaW5pdGUgdmFsdWUsIG9yIGZvciBmbG9hdGluZyB0eXBlcyB3aXRoCisJICBkZW5vcm1hbGl6YXRpb24sIHRoZSBtaW5pbXVtIHBvc2l0aXZlIG5vcm1hbGl6ZWQgdmFsdWUuICAqLworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBfVHAKKyAgICAgIG1pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfVHAoKTsgfQorCisgICAgICAvKiogVGhlIG1heGltdW0gZmluaXRlIHZhbHVlLiAgKi8KKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgX1RwCisgICAgICBtYXgoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX1RwKCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8qKiBBIGZpbml0ZSB2YWx1ZSB4IHN1Y2ggdGhhdCB0aGVyZSBpcyBubyBvdGhlciBmaW5pdGUgdmFsdWUgeQorICAgICAgICogIHdoZXJlIHkgPCB4LiAgKi8KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1RwCisgICAgICBsb3dlc3QoKSBub2V4Y2VwdCB7IHJldHVybiBfVHAoKTsgfQorI2VuZGlmCisKKyAgICAgIC8qKiBUaGUgQGUgbWFjaGluZSBAZSBlcHNpbG9uOiAgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAxIGFuZCB0aGUgbGVhc3QKKwkgIHZhbHVlIGdyZWF0ZXIgdGhhbiAxIHRoYXQgaXMgcmVwcmVzZW50YWJsZS4gICovCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9UcAorICAgICAgZXBzaWxvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfVHAoKTsgfQorCisgICAgICAvKiogVGhlIG1heGltdW0gcm91bmRpbmcgZXJyb3IgbWVhc3VyZW1lbnQgKHNlZSBMSUEtMSkuICAqLworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBfVHAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9UcCgpOyB9CisKKyAgICAgIC8qKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgcG9zaXRpdmUgaW5maW5pdHksIGlmIEBjIGhhc19pbmZpbml0eS4gICovCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9UcAorICAgICAgaW5maW5pdHkoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX1RwKCk7IH0KKworICAgICAgLyoqIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhIHF1aWV0IE5vdCBhIE51bWJlciwKKwkgIGlmIEBjIGhhc19xdWlldF9OYU4uICovCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9UcAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9UcCgpOyB9CisKKyAgICAgIC8qKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgYSBzaWduYWxpbmcgTm90IGEgTnVtYmVyLCBpZgorCSAgQGMgaGFzX3NpZ25hbGluZ19OYU4uICovCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9UcAorICAgICAgc2lnbmFsaW5nX05hTigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfVHAoKTsgfQorCisgICAgICAvKiogVGhlIG1pbmltdW0gcG9zaXRpdmUgZGVub3JtYWxpemVkIHZhbHVlLiAgRm9yIHR5cGVzIHdoZXJlCisJICBAYyBoYXNfZGVub3JtIGlzIGZhbHNlLCB0aGlzIGlzIHRoZSBtaW5pbXVtIHBvc2l0aXZlIG5vcm1hbGl6ZWQKKwkgIHZhbHVlLiAgKi8KKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgX1RwCisgICAgICBkZW5vcm1fbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9UcCgpOyB9CisgICAgfTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjb25zdCBfVHA+CisgICAgOiBwdWJsaWMgbnVtZXJpY19saW1pdHM8X1RwPiB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx2b2xhdGlsZSBfVHA+CisgICAgOiBwdWJsaWMgbnVtZXJpY19saW1pdHM8X1RwPiB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjb25zdCB2b2xhdGlsZSBfVHA+CisgICAgOiBwdWJsaWMgbnVtZXJpY19saW1pdHM8X1RwPiB7IH07CisjZW5kaWYKKworICAvLyBOb3cgdGhlcmUgZm9sbG93IDE2IGV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucy4gIFllcywgMTYuICBNYWtlIHN1cmUKKyAgLy8geW91IGdldCB0aGUgY291bnQgcmlnaHQuICgxOCBpbiBjKysweCBtb2RlKQorCisgIC8vLyBudW1lcmljX2xpbWl0czxib29sPiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxib29sPgorICAgIHsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wgCisgICAgICBtaW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBib29sIAorICAgICAgbWF4KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHRydWU7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbAorICAgICAgbG93ZXN0KCkgbm9leGNlcHQgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cyA9IDE7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzMTAgPSAwOworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgcmFkaXggPSAyOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wgCisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbCAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudDEwID0gMDsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gCisgICAgICAgPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBib29sIAorICAgICAgaW5maW5pdHkoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBib29sIAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbCAKKyAgICAgIHNpZ25hbGluZ19OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBib29sIAorICAgICAgZGVub3JtX21pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisKKyAgICAgIC8vIEl0IGlzIG5vdCBjbGVhciB3aGF0IGl0IG1lYW5zIGZvciBhIGJvb2xlYW4gdHlwZSB0byB0cmFwLgorICAgICAgLy8gVGhpcyBpcyBhIERSIG9uIHRoZSBMV0cgaXNzdWUgbGlzdC4gIEhlcmUsIEkgdXNlIGludGVnZXIKKyAgICAgIC8vIHByb21vdGlvbiBzZW1hbnRpY3MuCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlIAorICAgICAgID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8Y2hhcj4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Y2hhcj4KKyAgICB7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBjaGFyIAorICAgICAgbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fZ2xpYmN4eF9taW4oY2hhcik7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBjaGFyIAorICAgICAgbWF4KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fZ2xpYmN4eF9tYXgoY2hhcik7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciAKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cyA9IF9fZ2xpYmN4eF9kaWdpdHMgKGNoYXIpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwID0gX19nbGliY3h4X2RpZ2l0czEwIChjaGFyKTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IF9fZ2xpYmN4eF9zaWduZWQgKGNoYXIpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IHJhZGl4ID0gMjsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBjaGFyIAorICAgICAgZXBzaWxvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgY2hhciAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSAKKyAgICAgICA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIAorICAgICAgY2hhciBpbmZpbml0eSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBjaGFyKCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBjaGFyIAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIGNoYXIoKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGNoYXIgCisgICAgICBzaWduYWxpbmdfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIGNoYXIoKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGNoYXIgCisgICAgICBkZW5vcm1fbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19tb2R1bG8gPSAhaXNfc2lnbmVkOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlIAorICAgICAgID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgorICAgIHsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNpZ25lZCBjaGFyIAorICAgICAgbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIC1fX1NDSEFSX01BWF9fIC0gMTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNpZ25lZCBjaGFyIAorICAgICAgbWF4KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fU0NIQVJfTUFYX187IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2lnbmVkIGNoYXIgCisgICAgICBsb3dlc3QoKSBub2V4Y2VwdCB7IHJldHVybiBtaW4oKTsgfQorI2VuZGlmCisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMgPSBfX2dsaWJjeHhfZGlnaXRzIChzaWduZWQgY2hhcik7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzMTAgCisgICAgICAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKHNpZ25lZCBjaGFyKTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgcmFkaXggPSAyOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNpZ25lZCBjaGFyIAorICAgICAgZXBzaWxvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2lnbmVkIGNoYXIgCisgICAgICByb3VuZF9lcnJvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudDEwID0gMDsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gCisgICAgICAgPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBzaWduZWQgY2hhciAKKyAgICAgIGluZmluaXR5KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNpZ25lZCBjaGFyIAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNpZ25lZCBjaGFyIAorICAgICAgc2lnbmFsaW5nX05hTigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2lnbmVkIGNoYXIgCisgICAgICBkZW5vcm1fbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX21vZHVsbyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlIAorICAgICAgID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4KKyAgICB7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBjaGFyIAorICAgICAgbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBjaGFyIAorICAgICAgbWF4KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fU0NIQVJfTUFYX18gKiAyVSArIDE7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2hhciAKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cyAKKyAgICAgICA9IF9fZ2xpYmN4eF9kaWdpdHMgKHVuc2lnbmVkIGNoYXIpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwIAorICAgICAgID0gX19nbGliY3h4X2RpZ2l0czEwICh1bnNpZ25lZCBjaGFyKTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IHJhZGl4ID0gMjsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBjaGFyIAorICAgICAgZXBzaWxvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgY2hhciAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSAKKyAgICAgICA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGNoYXIgCisgICAgICBpbmZpbml0eSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBjaGFyIAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGNoYXIgCisgICAgICBzaWduYWxpbmdfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGNoYXIgCisgICAgICBkZW5vcm1fbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSAKKyAgICAgICA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+CisgICAgeworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgd2NoYXJfdCAKKyAgICAgIG1pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX2dsaWJjeHhfbWluICh3Y2hhcl90KTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHdjaGFyX3QgCisgICAgICBtYXgoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19nbGliY3h4X21heCAod2NoYXJfdCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgd2NoYXJfdAorICAgICAgbG93ZXN0KCkgbm9leGNlcHQgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzID0gX19nbGliY3h4X2RpZ2l0cyAod2NoYXJfdCk7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzMTAgCisgICAgICAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKHdjaGFyX3QpOworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc2lnbmVkID0gX19nbGliY3h4X3NpZ25lZCAod2NoYXJfdCk7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgcmFkaXggPSAyOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHdjaGFyX3QgCisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB3Y2hhcl90IAorICAgICAgcm91bmRfZXJyb3IoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtIAorICAgICAgID0gZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgd2NoYXJfdCAKKyAgICAgIGluZmluaXR5KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHdjaGFyX3QgCisgICAgICBxdWlldF9OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gd2NoYXJfdCgpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgd2NoYXJfdCAKKyAgICAgIHNpZ25hbGluZ19OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gd2NoYXJfdCgpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgd2NoYXJfdCAKKyAgICAgIGRlbm9ybV9taW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gd2NoYXJfdCgpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19tb2R1bG8gPSAhaXNfc2lnbmVkOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlIAorICAgICAgID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgLy8vIG51bWVyaWNfbGltaXRzPGNoYXIxNl90PiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyMTZfdD4KKyAgICB7CisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIxNl90IAorICAgICAgbWluKCkgbm9leGNlcHQgeyByZXR1cm4gX19nbGliY3h4X21pbiAoY2hhcjE2X3QpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhcjE2X3QgCisgICAgICBtYXgoKSBub2V4Y2VwdCB7IHJldHVybiBfX2dsaWJjeHhfbWF4IChjaGFyMTZfdCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyMTZfdCAKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRpZ2l0cyA9IF9fZ2xpYmN4eF9kaWdpdHMgKGNoYXIxNl90KTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRpZ2l0czEwID0gX19nbGliY3h4X2RpZ2l0czEwIChjaGFyMTZfdCk7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3NpZ25lZCA9IF9fZ2xpYmN4eF9zaWduZWQgKGNoYXIxNl90KTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCByYWRpeCA9IDI7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhcjE2X3QgCisgICAgICBlcHNpbG9uKCkgbm9leGNlcHQgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIxNl90IAorICAgICAgcm91bmRfZXJyb3IoKSBub2V4Y2VwdCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyMTZfdCAKKyAgICAgIGluZmluaXR5KCkgbm9leGNlcHQgeyByZXR1cm4gY2hhcjE2X3QoKTsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIxNl90IAorICAgICAgcXVpZXRfTmFOKCkgbm9leGNlcHQgeyByZXR1cm4gY2hhcjE2X3QoKTsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIxNl90IAorICAgICAgc2lnbmFsaW5nX05hTigpIG5vZXhjZXB0IHsgcmV0dXJuIGNoYXIxNl90KCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyMTZfdCAKKyAgICAgIGRlbm9ybV9taW4oKSBub2V4Y2VwdCB7IHJldHVybiBjaGFyMTZfdCgpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19tb2R1bG8gPSAhaXNfc2lnbmVkOworCisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8Y2hhcjMyX3Q+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXIzMl90PgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhcjMyX3QgCisgICAgICBtaW4oKSBub2V4Y2VwdCB7IHJldHVybiBfX2dsaWJjeHhfbWluIChjaGFyMzJfdCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyMzJfdCAKKyAgICAgIG1heCgpIG5vZXhjZXB0IHsgcmV0dXJuIF9fZ2xpYmN4eF9tYXggKGNoYXIzMl90KTsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIzMl90IAorICAgICAgbG93ZXN0KCkgbm9leGNlcHQgeyByZXR1cm4gbWluKCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGlnaXRzID0gX19nbGliY3h4X2RpZ2l0cyAoY2hhcjMyX3QpOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGlnaXRzMTAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKGNoYXIzMl90KTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMCA9IDA7CisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc2lnbmVkID0gX19nbGliY3h4X3NpZ25lZCAoY2hhcjMyX3QpOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHJhZGl4ID0gMjsKKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBjaGFyMzJfdCAKKyAgICAgIGVwc2lsb24oKSBub2V4Y2VwdCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhcjMyX3QgCisgICAgICByb3VuZF9lcnJvcigpIG5vZXhjZXB0IHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIzMl90IAorICAgICAgaW5maW5pdHkoKSBub2V4Y2VwdCB7IHJldHVybiBjaGFyMzJfdCgpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhcjMyX3QgCisgICAgICBxdWlldF9OYU4oKSBub2V4Y2VwdCB7IHJldHVybiBjaGFyMzJfdCgpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhcjMyX3QgCisgICAgICBzaWduYWxpbmdfTmFOKCkgbm9leGNlcHQgeyByZXR1cm4gY2hhcjMyX3QoKTsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGNoYXIzMl90IAorICAgICAgZGVub3JtX21pbigpIG5vZXhjZXB0IHsgcmV0dXJuIGNoYXIzMl90KCk7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX21vZHVsbyA9ICFpc19zaWduZWQ7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKKyAgICB9OworI2VuZGlmCisKKyAgLy8vIG51bWVyaWNfbGltaXRzPHNob3J0PiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaG9ydD4KKyAgICB7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBzaG9ydCAKKyAgICAgIG1pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAtX19TSFJUX01BWF9fIC0gMTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNob3J0IAorICAgICAgbWF4KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fU0hSVF9NQVhfXzsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RhdGljIGNvbnN0ZXhwciBzaG9ydCAKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cyA9IF9fZ2xpYmN4eF9kaWdpdHMgKHNob3J0KTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMxMCA9IF9fZ2xpYmN4eF9kaWdpdHMxMCAoc2hvcnQpOworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCByYWRpeCA9IDI7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgc2hvcnQgCisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBzaG9ydCAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSAKKyAgICAgICA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNob3J0IAorICAgICAgaW5maW5pdHkoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gc2hvcnQoKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNob3J0IAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHNob3J0KCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBzaG9ydCAKKyAgICAgIHNpZ25hbGluZ19OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gc2hvcnQoKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHNob3J0IAorICAgICAgZGVub3JtX21pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBzaG9ydCgpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSAKKyAgICAgICA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KKyAgICB7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBzaG9ydCAKKyAgICAgIG1pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgc2hvcnQgCisgICAgICBtYXgoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19TSFJUX01BWF9fICogMlUgKyAxOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHNob3J0IAorICAgICAgbG93ZXN0KCkgbm9leGNlcHQgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzIAorICAgICAgID0gX19nbGliY3h4X2RpZ2l0cyAodW5zaWduZWQgc2hvcnQpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwIAorICAgICAgID0gX19nbGliY3h4X2RpZ2l0czEwICh1bnNpZ25lZCBzaG9ydCk7CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyNlbmRpZgorICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCByYWRpeCA9IDI7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgc2hvcnQgCisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBzaG9ydCAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSAKKyAgICAgICA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIHNob3J0IAorICAgICAgaW5maW5pdHkoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIHNob3J0IAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBzaG9ydCAKKyAgICAgIHNpZ25hbGluZ19OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIHNob3J0IAorICAgICAgZGVub3JtX21pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19tb2R1bG8gPSB0cnVlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlIAorICAgICAgID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8aW50PiBzcGVjaWFsaXphdGlvbi4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CisgICAgeworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgaW50IAorICAgICAgbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIC1fX0lOVF9NQVhfXyAtIDE7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBpbnQgCisgICAgICBtYXgoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19JTlRfTUFYX187IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IAorICAgICAgbG93ZXN0KCkgbm9leGNlcHQgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzID0gX19nbGliY3h4X2RpZ2l0cyAoaW50KTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMxMCA9IF9fZ2xpYmN4eF9kaWdpdHMxMCAoaW50KTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgcmFkaXggPSAyOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGludCAKKyAgICAgIGVwc2lsb24oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGludCAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSAKKyAgICAgICA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGludCAKKyAgICAgIGluZmluaXR5KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBpbnQgCisgICAgICBxdWlldF9OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGludCAKKyAgICAgIHNpZ25hbGluZ19OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGludCAKKyAgICAgIGRlbm9ybV9taW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfaW50ZWdyYWxfdHJhcHM7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgCisgICAgICAgPSByb3VuZF90b3dhcmRfemVybzsKKyAgICB9OworCisgIC8vLyBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD4KKyAgICB7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBpbnQgCisgICAgICBtaW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGludCAKKyAgICAgIG1heCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX0lOVF9NQVhfXyAqIDJVICsgMTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnQgCisgICAgICBsb3dlc3QoKSBub2V4Y2VwdCB7IHJldHVybiBtaW4oKTsgfQorI2VuZGlmCisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMgCisgICAgICAgPSBfX2dsaWJjeHhfZGlnaXRzICh1bnNpZ25lZCBpbnQpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwIAorICAgICAgID0gX19nbGliY3h4X2RpZ2l0czEwICh1bnNpZ25lZCBpbnQpOworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMCA9IDA7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgcmFkaXggPSAyOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGludCAKKyAgICAgIGVwc2lsb24oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGludCAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSAKKyAgICAgICA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGludCAKKyAgICAgIGluZmluaXR5KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBpbnQgCisgICAgICBxdWlldF9OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBpbnQgCisgICAgICBzaWduYWxpbmdfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgaW50IAorICAgICAgZGVub3JtX21pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSAKKyAgICAgICA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPGxvbmc+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+CisgICAgeworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZworICAgICAgbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIC1fX0xPTkdfTUFYX18gLSAxOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyAKKyAgICAgIG1heCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX0xPTkdfTUFYX187IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgbG9uZyAKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cyA9IF9fZ2xpYmN4eF9kaWdpdHMgKGxvbmcpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwID0gX19nbGliY3h4X2RpZ2l0czEwIChsb25nKTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgcmFkaXggPSAyOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgCisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIAorICAgICAgcm91bmRfZXJyb3IoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtIAorICAgICAgID0gZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyAKKyAgICAgIGluZmluaXR5KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyAKKyAgICAgIHF1aWV0X05hTigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgCisgICAgICBzaWduYWxpbmdfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyAKKyAgICAgIGRlbm9ybV9taW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX21vZHVsbyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlIAorICAgICAgID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworICAvLy8gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4KKyAgICB7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nIAorICAgICAgbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nIAorICAgICAgbWF4KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fTE9OR19NQVhfXyAqIDJVTCArIDE7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbG9uZyAKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cyAKKyAgICAgICA9IF9fZ2xpYmN4eF9kaWdpdHMgKHVuc2lnbmVkIGxvbmcpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwIAorICAgICAgID0gX19nbGliY3h4X2RpZ2l0czEwICh1bnNpZ25lZCBsb25nKTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IHJhZGl4ID0gMjsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nIAorICAgICAgZXBzaWxvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgbG9uZyAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSAKKyAgICAgICA9IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGxvbmcgCisgICAgICBpbmZpbml0eSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nIAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGxvbmcgCisgICAgICBzaWduYWxpbmdfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGxvbmcgCisgICAgICBkZW5vcm1fbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSAKKyAgICAgICA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBsb25nPgorICAgIHsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgbG9uZyAKKyAgICAgIG1pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAtX19MT05HX0xPTkdfTUFYX18gLSAxOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBsb25nIAorICAgICAgbWF4KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fTE9OR19MT05HX01BWF9fOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGxvbmcgbG9uZyAKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cyAKKyAgICAgICA9IF9fZ2xpYmN4eF9kaWdpdHMgKGxvbmcgbG9uZyk7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzMTAgCisgICAgICAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKGxvbmcgbG9uZyk7CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyNlbmRpZgorICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zaWduZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IHJhZGl4ID0gMjsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGxvbmcgCisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGxvbmcgCisgICAgICByb3VuZF9lcnJvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudDEwID0gMDsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gCisgICAgICAgPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGxvbmcgCisgICAgICBpbmZpbml0eSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBsb25nIAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGxvbmcgCisgICAgICBzaWduYWxpbmdfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBsb25nIAorICAgICAgZGVub3JtX21pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSAKKyAgICAgICA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICAgIH07CisKKyAgLy8vIG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgorICAgIHsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGxvbmcgbG9uZyAKKyAgICAgIG1pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgbG9uZyBsb25nIAorICAgICAgbWF4KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fTE9OR19MT05HX01BWF9fICogMlVMTCArIDE7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbG9uZyBsb25nIAorICAgICAgbG93ZXN0KCkgbm9leGNlcHQgeyByZXR1cm4gbWluKCk7IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzIAorICAgICAgID0gX19nbGliY3h4X2RpZ2l0cyAodW5zaWduZWQgbG9uZyBsb25nKTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMxMCAKKyAgICAgICA9IF9fZ2xpYmN4eF9kaWdpdHMxMCAodW5zaWduZWQgbG9uZyBsb25nKTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IHJhZGl4ID0gMjsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nIGxvbmcgCisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nIGxvbmcgCisgICAgICByb3VuZF9lcnJvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtYXhfZXhwb25lbnQgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudDEwID0gMDsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gCisgICAgICAgPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nIGxvbmcgCisgICAgICBpbmZpbml0eSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGxvbmcgbG9uZyAKKyAgICAgIHF1aWV0X05hTigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIHVuc2lnbmVkIGxvbmcgbG9uZyAKKyAgICAgIHNpZ25hbGluZ19OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBsb25nIGxvbmcgCisgICAgICBkZW5vcm1fbWluKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19tb2R1bG8gPSB0cnVlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRyYXBzID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlIAorICAgICAgID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfSU5UMTI4KQorICAvLy8gbnVtZXJpY19saW1pdHM8X19pbnQxMjg+IHNwZWNpYWxpemF0aW9uLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IG51bWVyaWNfbGltaXRzPF9faW50MTI4PgorICAgIHsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9faW50MTI4CisgICAgICBtaW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19nbGliY3h4X21pbiAoX19pbnQxMjgpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgX19pbnQxMjgKKyAgICAgIG1heCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX2dsaWJjeHhfbWF4IChfX2ludDEyOCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX19pbnQxMjgKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cworICAgICAgID0gX19nbGliY3h4X2RpZ2l0cyAoX19pbnQxMjgpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwCisgICAgICAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKF9faW50MTI4KTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgcmFkaXggPSAyOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9faW50MTI4CisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBfX2ludDEyOAorICAgICAgcm91bmRfZXJyb3IoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gMDsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtCisgICAgICAgPSBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBfX2ludDEyOAorICAgICAgaW5maW5pdHkoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9faW50MTI4PigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9faW50MTI4CisgICAgICBxdWlldF9OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9faW50MTI4PigwKTsgfQorICAgICAgCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIF9faW50MTI4CisgICAgICBzaWduYWxpbmdfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfX2ludDEyOD4oMCk7IH0KKyAgICAgIAorICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBfX2ludDEyOAorICAgICAgZGVub3JtX21pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X19pbnQxMjg+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcworICAgICAgID0gX19nbGliY3h4X2ludGVncmFsX3RyYXBzOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlCisgICAgICAgPSByb3VuZF90b3dhcmRfemVybzsKKyAgICB9OworCisgIC8vLyBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBfX2ludDEyOD4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgX19pbnQxMjg+CisgICAgeworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgX19pbnQxMjgKKyAgICAgIG1pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgX19pbnQxMjgKKyAgICAgIG1heCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX2dsaWJjeHhfbWF4ICh1bnNpZ25lZCBfX2ludDEyOCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgX19pbnQxMjgKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIG1pbigpOyB9CisjZW5kaWYKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0cworICAgICAgID0gX19nbGliY3h4X2RpZ2l0cyAodW5zaWduZWQgX19pbnQxMjgpOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwCisgICAgICAgPSBfX2dsaWJjeHhfZGlnaXRzMTAgKHVuc2lnbmVkIF9faW50MTI4KTsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IHJhZGl4ID0gMjsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBfX2ludDEyOAorICAgICAgZXBzaWxvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgX19pbnQxMjgKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDA7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSAwOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IDA7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQorICAgICAgID0gZGVub3JtX2Fic2VudDsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgX19pbnQxMjgKKyAgICAgIGluZmluaXR5KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBfX2ludDEyOD4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBfX2ludDEyOAorICAgICAgcXVpZXRfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBfX2ludDEyOD4oMCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiB1bnNpZ25lZCBfX2ludDEyOAorICAgICAgc2lnbmFsaW5nX05hTigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgX19pbnQxMjg+KDApOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgdW5zaWduZWQgX19pbnQxMjgKKyAgICAgIGRlbm9ybV9taW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIF9faW50MTI4PigwKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9pbnRlZ3JhbF90cmFwczsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZQorICAgICAgID0gcm91bmRfdG93YXJkX3plcm87CisgICAgfTsKKyNlbmRpZgorCisgIC8vLyBudW1lcmljX2xpbWl0czxmbG9hdD4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+CisgICAgeworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQgCisgICAgICBtaW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19GTFRfTUlOX187IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdCAKKyAgICAgIG1heCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX0ZMVF9NQVhfXzsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCAKKyAgICAgIGxvd2VzdCgpIG5vZXhjZXB0IHsgcmV0dXJuIC1fX0ZMVF9NQVhfXzsgfQorI2VuZGlmCisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMgPSBfX0ZMVF9NQU5UX0RJR19fOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IGRpZ2l0czEwID0gX19GTFRfRElHX187CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwCisJID0gX19nbGliY3h4X21heF9kaWdpdHMxMCAoX19GTFRfTUFOVF9ESUdfXyk7CisjZW5kaWYKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19leGFjdCA9IGZhbHNlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IHJhZGl4ID0gX19GTFRfUkFESVhfXzsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdCAKKyAgICAgIGVwc2lsb24oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19GTFRfRVBTSUxPTl9fOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQgCisgICAgICByb3VuZF9lcnJvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwLjVGOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQgPSBfX0ZMVF9NSU5fRVhQX187CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSBfX0ZMVF9NSU5fMTBfRVhQX187CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50ID0gX19GTFRfTUFYX0VYUF9fOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudDEwID0gX19GTFRfTUFYXzEwX0VYUF9fOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IF9fRkxUX0hBU19JTkZJTklUWV9fOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfcXVpZXRfTmFOID0gX19GTFRfSEFTX1FVSUVUX05BTl9fOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQorCT0gYm9vbChfX0ZMVF9IQVNfREVOT1JNX18pID8gZGVub3JtX3ByZXNlbnQgOiBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfZGVub3JtX2xvc3MgCisgICAgICAgPSBfX2dsaWJjeHhfZmxvYXRfaGFzX2Rlbm9ybV9sb3NzOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGZsb2F0IAorICAgICAgaW5maW5pdHkoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsZigpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQgCisgICAgICBxdWlldF9OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19idWlsdGluX25hbmYoIiIpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgZmxvYXQgCisgICAgICBzaWduYWxpbmdfTmFOKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5zZigiIik7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBmbG9hdCAKKyAgICAgIGRlbm9ybV9taW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19GTFRfREVOT1JNX01JTl9fOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5CisJPSBoYXNfaW5maW5pdHkgJiYgaGFzX3F1aWV0X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfZmxvYXRfdHJhcHM7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRpbnluZXNzX2JlZm9yZSAKKyAgICAgICA9IF9fZ2xpYmN4eF9mbG9hdF90aW55bmVzc19iZWZvcmU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSAKKyAgICAgICA9IHJvdW5kX3RvX25lYXJlc3Q7CisgICAgfTsKKworI3VuZGVmIF9fZ2xpYmN4eF9mbG9hdF9oYXNfZGVub3JtX2xvc3MKKyN1bmRlZiBfX2dsaWJjeHhfZmxvYXRfdHJhcHMKKyN1bmRlZiBfX2dsaWJjeHhfZmxvYXRfdGlueW5lc3NfYmVmb3JlCisKKyAgLy8vIG51bWVyaWNfbGltaXRzPGRvdWJsZT4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPgorICAgIHsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGRvdWJsZSAKKyAgICAgIG1pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX0RCTF9NSU5fXzsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGRvdWJsZSAKKyAgICAgIG1heCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX0RCTF9NQVhfXzsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgCisgICAgICBsb3dlc3QoKSBub2V4Y2VwdCB7IHJldHVybiAtX19EQkxfTUFYX187IH0KKyNlbmRpZgorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgZGlnaXRzID0gX19EQkxfTUFOVF9ESUdfXzsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMxMCA9IF9fREJMX0RJR19fOworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMAorCSA9IF9fZ2xpYmN4eF9tYXhfZGlnaXRzMTAgKF9fREJMX01BTlRfRElHX18pOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCByYWRpeCA9IF9fRkxUX1JBRElYX187CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgZG91YmxlIAorICAgICAgZXBzaWxvbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX0RCTF9FUFNJTE9OX187IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBkb3VibGUgCisgICAgICByb3VuZF9lcnJvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiAwLjU7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IF9fREJMX01JTl9FWFBfXzsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtaW5fZXhwb25lbnQxMCA9IF9fREJMX01JTl8xMF9FWFBfXzsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBtYXhfZXhwb25lbnQgPSBfX0RCTF9NQVhfRVhQX187CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSBfX0RCTF9NQVhfMTBfRVhQX187CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX2luZmluaXR5ID0gX19EQkxfSEFTX0lORklOSVRZX187CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19xdWlldF9OYU4gPSBfX0RCTF9IQVNfUVVJRVRfTkFOX187CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gaGFzX3F1aWV0X05hTjsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtCisJPSBib29sKF9fREJMX0hBU19ERU5PUk1fXykgPyBkZW5vcm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19kZW5vcm1fbG9zcyAKKyAgICAgICAgPSBfX2dsaWJjeHhfZG91YmxlX2hhc19kZW5vcm1fbG9zczsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBkb3VibGUgCisgICAgICBpbmZpbml0eSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX2J1aWx0aW5faHVnZV92YWwoKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGRvdWJsZSAKKyAgICAgIHF1aWV0X05hTigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX2J1aWx0aW5fbmFuKCIiKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGRvdWJsZSAKKyAgICAgIHNpZ25hbGluZ19OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19idWlsdGluX25hbnMoIiIpOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgZG91YmxlIAorICAgICAgZGVub3JtX21pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX0RCTF9ERU5PUk1fTUlOX187IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19pZWM1NTkKKwk9IGhhc19pbmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3ByZXNlbnQ7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCB0cmFwcyA9IF9fZ2xpYmN4eF9kb3VibGVfdHJhcHM7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRpbnluZXNzX2JlZm9yZSAKKyAgICAgICA9IF9fZ2xpYmN4eF9kb3VibGVfdGlueW5lc3NfYmVmb3JlOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgCisgICAgICAgPSByb3VuZF90b19uZWFyZXN0OworICAgIH07CisKKyN1bmRlZiBfX2dsaWJjeHhfZG91YmxlX2hhc19kZW5vcm1fbG9zcworI3VuZGVmIF9fZ2xpYmN4eF9kb3VibGVfdHJhcHMKKyN1bmRlZiBfX2dsaWJjeHhfZG91YmxlX3RpbnluZXNzX2JlZm9yZQorCisgIC8vLyBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT4gc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+CisgICAgeworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUgCisgICAgICBtaW4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19MREJMX01JTl9fOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUgCisgICAgICBtYXgoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19MREJMX01BWF9fOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgY29uc3RleHByIGxvbmcgZG91YmxlIAorICAgICAgbG93ZXN0KCkgbm9leGNlcHQgeyByZXR1cm4gLV9fTERCTF9NQVhfXzsgfQorI2VuZGlmCisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMgPSBfX0xEQkxfTUFOVF9ESUdfXzsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCBkaWdpdHMxMCA9IF9fTERCTF9ESUdfXzsKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2RpZ2l0czEwCisJID0gX19nbGliY3h4X21heF9kaWdpdHMxMCAoX19MREJMX01BTlRfRElHX18pOworI2VuZGlmCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX3NpZ25lZCA9IHRydWU7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGludCByYWRpeCA9IF9fRkxUX1JBRElYX187CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUgCisgICAgICBlcHNpbG9uKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIF9fTERCTF9FUFNJTE9OX187IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZSAKKyAgICAgIHJvdW5kX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgcmV0dXJuIDAuNUw7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1pbl9leHBvbmVudCA9IF9fTERCTF9NSU5fRVhQX187CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWluX2V4cG9uZW50MTAgPSBfX0xEQkxfTUlOXzEwX0VYUF9fOworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgaW50IG1heF9leHBvbmVudCA9IF9fTERCTF9NQVhfRVhQX187CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBpbnQgbWF4X2V4cG9uZW50MTAgPSBfX0xEQkxfTUFYXzEwX0VYUF9fOworCisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19pbmZpbml0eSA9IF9fTERCTF9IQVNfSU5GSU5JVFlfXzsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaGFzX3F1aWV0X05hTiA9IF9fTERCTF9IQVNfUVVJRVRfTkFOX187CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIGhhc19zaWduYWxpbmdfTmFOID0gaGFzX3F1aWV0X05hTjsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtCisJPSBib29sKF9fTERCTF9IQVNfREVOT1JNX18pID8gZGVub3JtX3ByZXNlbnQgOiBkZW5vcm1fYWJzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBoYXNfZGVub3JtX2xvc3MKKwk9IF9fZ2xpYmN4eF9sb25nX2RvdWJsZV9oYXNfZGVub3JtX2xvc3M7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9DT05TVEVYUFIgbG9uZyBkb3VibGUgCisgICAgICBpbmZpbml0eSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX2J1aWx0aW5faHVnZV92YWxsKCk7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZSAKKyAgICAgIHF1aWV0X05hTigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX2J1aWx0aW5fbmFubCgiIik7IH0KKworICAgICAgc3RhdGljIF9HTElCQ1hYX0NPTlNURVhQUiBsb25nIGRvdWJsZSAKKyAgICAgIHNpZ25hbGluZ19OYU4oKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyByZXR1cm4gX19idWlsdGluX25hbnNsKCIiKTsgfQorCisgICAgICBzdGF0aWMgX0dMSUJDWFhfQ09OU1RFWFBSIGxvbmcgZG91YmxlIAorICAgICAgZGVub3JtX21pbigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IHJldHVybiBfX0xEQkxfREVOT1JNX01JTl9fOyB9CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfaWVjNTU5CisJPSBoYXNfaW5maW5pdHkgJiYgaGFzX3F1aWV0X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50OworICAgICAgc3RhdGljIF9HTElCQ1hYX1VTRV9DT05TVEVYUFIgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGJvb2wgdHJhcHMgPSBfX2dsaWJjeHhfbG9uZ19kb3VibGVfdHJhcHM7CisgICAgICBzdGF0aWMgX0dMSUJDWFhfVVNFX0NPTlNURVhQUiBib29sIHRpbnluZXNzX2JlZm9yZSA9IAorCQkJCQkgX19nbGliY3h4X2xvbmdfZG91YmxlX3RpbnluZXNzX2JlZm9yZTsKKyAgICAgIHN0YXRpYyBfR0xJQkNYWF9VU0VfQ09OU1RFWFBSIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gCisJCQkJCQkgICAgICByb3VuZF90b19uZWFyZXN0OworICAgIH07CisKKyN1bmRlZiBfX2dsaWJjeHhfbG9uZ19kb3VibGVfaGFzX2Rlbm9ybV9sb3NzCisjdW5kZWYgX19nbGliY3h4X2xvbmdfZG91YmxlX3RyYXBzCisjdW5kZWYgX19nbGliY3h4X2xvbmdfZG91YmxlX3RpbnluZXNzX2JlZm9yZQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyN1bmRlZiBfX2dsaWJjeHhfc2lnbmVkCisjdW5kZWYgX19nbGliY3h4X21pbgorI3VuZGVmIF9fZ2xpYmN4eF9tYXgKKyN1bmRlZiBfX2dsaWJjeHhfZGlnaXRzCisjdW5kZWYgX19nbGliY3h4X2RpZ2l0czEwCisjdW5kZWYgX19nbGliY3h4X21heF9kaWdpdHMxMAorCisjZW5kaWYgLy8gX0dMSUJDWFhfTlVNRVJJQ19MSU1JVFMKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbGlzdCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTYyNTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9saXN0CkBAIC0wLDAgKzEsNzUgQEAKKy8vIDxsaXN0PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS9saXN0CisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX0xJU1QKKyNkZWZpbmUgX0dMSUJDWFhfTElTVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL3JhbmdlX2FjY2Vzcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2xpc3QuaD4KKyNpbmNsdWRlIDxiaXRzL2xpc3QudGNjPgorCisjaWZkZWYgX0dMSUJDWFhfREVCVUcKKyMgaW5jbHVkZSA8ZGVidWcvbGlzdD4KKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfUFJPRklMRQorIyBpbmNsdWRlIDxwcm9maWxlL2xpc3Q+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX0xJU1QgKi8KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9sb2NhbGUgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL2xvY2FsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWViNGYyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9sb2NhbGUKQEAgLTAsMCArMSw0MyBAQAorLy8gTG9jYWxlIHN1cHBvcnQgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjEgIExvY2FsZXMKKy8vCisKKy8qKiBAZmlsZSBpbmNsdWRlL2xvY2FsZQorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9MT0NBTEUKKyNkZWZpbmUgX0dMSUJDWFhfTE9DQUxFCTEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZV9jbGFzc2VzLmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVfZmFjZXRzLmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVfZmFjZXRzX25vbmlvLmg+CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9MT0NBTEUgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbWFwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhN2RkZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbWFwCkBAIC0wLDAgKzEsNzMgQEAKKy8vIDxtYXA+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL21hcAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9NQVAKKyNkZWZpbmUgX0dMSUJDWFhfTUFQIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9zdGxfdHJlZS5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX21hcC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX211bHRpbWFwLmg+CisjaW5jbHVkZSA8Yml0cy9yYW5nZV9hY2Nlc3MuaD4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjIGluY2x1ZGUgPGRlYnVnL21hcD4KKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfUFJPRklMRQorIyBpbmNsdWRlIDxwcm9maWxlL21hcD4KKyNlbmRpZgorCisjZW5kaWYgLyogX0dMSUJDWFhfTUFQICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL21lbW9yeSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbWVtb3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjY0NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL21lbW9yeQpAQCAtMCwwICsxLDkwIEBACisvLyA8bWVtb3J5PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3LTE5OTkKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS9tZW1vcnkKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfTUVNT1JZCisjZGVmaW5lIF9HTElCQ1hYX01FTU9SWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworLyoqCisgKiBAZGVmZ3JvdXAgbWVtb3J5IE1lbW9yeQorICogQGluZ3JvdXAgdXRpbGl0aWVzCisgKgorICogQ29tcG9uZW50cyBmb3IgbWVtb3J5IGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIG1hbmFnZW1lbnQuCisgKi8KKworLyoqCisgKiBAZGVmZ3JvdXAgcG9pbnRlcl9hYnN0cmFjdGlvbnMgUG9pbnRlciBBYnN0cmFjdGlvbnMKKyAqIEBpbmdyb3VwIG1lbW9yeQorICoKKyAqIFNtYXJ0IHBvaW50ZXJzLCBldGMuCisgKi8KKworI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9jb25zdHJ1Y3QuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF91bmluaXRpYWxpemVkLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfdGVtcGJ1Zi5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaD4KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgIGluY2x1ZGUgPGV4Y2VwdGlvbj4gICAgICAgIAkgIC8vIHN0ZDo6ZXhjZXB0aW9uCisjICBpbmNsdWRlIDx0eXBlaW5mbz4gICAgICAgICAJICAvLyBzdGQ6OnR5cGVfaW5mbyBpbiBnZXRfZGVsZXRlcgorIyAgaW5jbHVkZSA8aW9zZndkPiAgICAgICAgICAgCSAgLy8gc3RkOjpiYXNpY19vc3RyZWFtCisjICBpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+CisjICBpbmNsdWRlIDxleHQvY29uY3VycmVuY2UuaD4KKyMgIGluY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyMgIGluY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+ICAvLyBzdGQ6Omxlc3MKKyMgIGluY2x1ZGUgPGJpdHMvdXNlc19hbGxvY2F0b3IuaD4KKyMgIGluY2x1ZGUgPHR5cGVfdHJhaXRzPgorIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGluY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjICBpbmNsdWRlIDxiaXRzL3VuaXF1ZV9wdHIuaD4KKyMgIGluY2x1ZGUgPGJpdHMvc2hhcmVkX3B0ci5oPgorIyAgaWYgX0dMSUJDWFhfVVNFX0RFUFJFQ0FURUQKKyMgICAgaW5jbHVkZSA8YmFja3dhcmQvYXV0b19wdHIuaD4KKyMgIGVuZGlmCisjZWxzZQorIyAgaW5jbHVkZSA8YmFja3dhcmQvYXV0b19wdHIuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX0dMSUJDWFhfTUVNT1JZICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL211dGV4IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9tdXRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDkzZDlhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9tdXRleApAQCAtMCwwICsxLDgwNSBAQAorLy8gPG11dGV4PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9tdXRleAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9NVVRFWAorI2RlZmluZSBfR0xJQkNYWF9NVVRFWCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8ZXhjZXB0aW9uPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgorI2luY2x1ZGUgPGJpdHMvZnVuY3RleGNlcHQuaD4KKyNpbmNsdWRlIDxiaXRzL2d0aHIuaD4KKyNpbmNsdWRlIDxiaXRzL21vdmUuaD4gLy8gZm9yIHN0ZDo6c3dhcAorCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworI2lmZGVmIF9HTElCQ1hYX0hBU19HVEhSRUFEUworICAvLyBDb21tb24gYmFzZSBjbGFzcyBmb3Igc3RkOjptdXRleCBhbmQgc3RkOjp0aW1lZF9tdXRleAorICBjbGFzcyBfX211dGV4X2Jhc2UKKyAgeworICBwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdAkJCV9fbmF0aXZlX3R5cGU7CisKKyNpZmRlZiBfX0dUSFJFQURfTVVURVhfSU5JVAorICAgIF9fbmF0aXZlX3R5cGUgIF9NX211dGV4ID0gX19HVEhSRUFEX01VVEVYX0lOSVQ7CisKKyAgICBjb25zdGV4cHIgX19tdXRleF9iYXNlKCkgbm9leGNlcHQgPSBkZWZhdWx0OworI2Vsc2UKKyAgICBfX25hdGl2ZV90eXBlICBfTV9tdXRleDsKKworICAgIF9fbXV0ZXhfYmFzZSgpIG5vZXhjZXB0CisgICAgeworICAgICAgLy8gWFhYIEVBR0FJTiwgRU5PTUVNLCBFUEVSTSwgRUJVU1kobWF5KSwgRUlOVkFMKG1heSkKKyAgICAgIF9fR1RIUkVBRF9NVVRFWF9JTklUX0ZVTkNUSU9OKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgfl9fbXV0ZXhfYmFzZSgpIG5vZXhjZXB0IHsgX19ndGhyZWFkX211dGV4X2Rlc3Ryb3koJl9NX211dGV4KTsgfQorI2VuZGlmCisKKyAgICBfX211dGV4X2Jhc2UoY29uc3QgX19tdXRleF9iYXNlJikgPSBkZWxldGU7CisgICAgX19tdXRleF9iYXNlJiBvcGVyYXRvcj0oY29uc3QgX19tdXRleF9iYXNlJikgPSBkZWxldGU7CisgIH07CisKKyAgLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIHN0ZDo6cmVjdXJzaXZlX211dGV4IGFuZCBzdGQ6OnRpbWVkX3JlY3Vyc2l2ZV9tdXRleAorICBjbGFzcyBfX3JlY3Vyc2l2ZV9tdXRleF9iYXNlCisgIHsKKyAgcHJvdGVjdGVkOgorICAgIHR5cGVkZWYgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90CQlfX25hdGl2ZV90eXBlOworCisgICAgX19yZWN1cnNpdmVfbXV0ZXhfYmFzZShjb25zdCBfX3JlY3Vyc2l2ZV9tdXRleF9iYXNlJikgPSBkZWxldGU7CisgICAgX19yZWN1cnNpdmVfbXV0ZXhfYmFzZSYgb3BlcmF0b3I9KGNvbnN0IF9fcmVjdXJzaXZlX211dGV4X2Jhc2UmKSA9IGRlbGV0ZTsKKworI2lmZGVmIF9fR1RIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVAorICAgIF9fbmF0aXZlX3R5cGUgIF9NX211dGV4ID0gX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUOworCisgICAgX19yZWN1cnNpdmVfbXV0ZXhfYmFzZSgpID0gZGVmYXVsdDsKKyNlbHNlCisgICAgX19uYXRpdmVfdHlwZSAgX01fbXV0ZXg7CisKKyAgICBfX3JlY3Vyc2l2ZV9tdXRleF9iYXNlKCkKKyAgICB7CisgICAgICAvLyBYWFggRUFHQUlOLCBFTk9NRU0sIEVQRVJNLCBFQlVTWShtYXkpLCBFSU5WQUwobWF5KQorICAgICAgX19HVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX0ZVTkNUSU9OKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgfl9fcmVjdXJzaXZlX211dGV4X2Jhc2UoKQorICAgIHsgX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9kZXN0cm95KCZfTV9tdXRleCk7IH0KKyNlbmRpZgorICB9OworCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgbXV0ZXhlcyBNdXRleGVzCisgICAqIEBpbmdyb3VwIGNvbmN1cnJlbmN5CisgICAqCisgICAqIENsYXNzZXMgZm9yIG11dGV4IHN1cHBvcnQuCisgICAqIEB7CisgICAqLworCisgIC8vLyBtdXRleAorICBjbGFzcyBtdXRleCA6IHByaXZhdGUgX19tdXRleF9iYXNlCisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgX19uYXRpdmVfdHlwZSogCQkJbmF0aXZlX2hhbmRsZV90eXBlOworCisjaWZkZWYgX19HVEhSRUFEX01VVEVYX0lOSVQKKyAgICBjb25zdGV4cHIKKyNlbmRpZgorICAgIG11dGV4KCkgbm9leGNlcHQgPSBkZWZhdWx0OworICAgIH5tdXRleCgpID0gZGVmYXVsdDsKKworICAgIG11dGV4KGNvbnN0IG11dGV4JikgPSBkZWxldGU7CisgICAgbXV0ZXgmIG9wZXJhdG9yPShjb25zdCBtdXRleCYpID0gZGVsZXRlOworCisgICAgdm9pZAorICAgIGxvY2soKQorICAgIHsKKyAgICAgIGludCBfX2UgPSBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbXV0ZXgpOworCisgICAgICAvLyBFSU5WQUwsIEVBR0FJTiwgRUJVU1ksIEVJTlZBTCwgRURFQURMSyhtYXkpCisgICAgICBpZiAoX19lKQorCV9fdGhyb3dfc3lzdGVtX2Vycm9yKF9fZSk7CisgICAgfQorCisgICAgYm9vbAorICAgIHRyeV9sb2NrKCkgbm9leGNlcHQKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVCVVNZCisgICAgICByZXR1cm4gIV9fZ3RocmVhZF9tdXRleF90cnlsb2NrKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgdm9pZAorICAgIHVubG9jaygpCisgICAgeworICAgICAgLy8gWFhYIEVJTlZBTCwgRUFHQUlOLCBFUEVSTQorICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbXV0ZXgpOworICAgIH0KKworICAgIG5hdGl2ZV9oYW5kbGVfdHlwZQorICAgIG5hdGl2ZV9oYW5kbGUoKQorICAgIHsgcmV0dXJuICZfTV9tdXRleDsgfQorICB9OworCisgIC8vLyByZWN1cnNpdmVfbXV0ZXgKKyAgY2xhc3MgcmVjdXJzaXZlX211dGV4IDogcHJpdmF0ZSBfX3JlY3Vyc2l2ZV9tdXRleF9iYXNlCisgIHsKKyAgcHVibGljOgorICAgIHR5cGVkZWYgX19uYXRpdmVfdHlwZSogCQkJbmF0aXZlX2hhbmRsZV90eXBlOworCisgICAgcmVjdXJzaXZlX211dGV4KCkgPSBkZWZhdWx0OworICAgIH5yZWN1cnNpdmVfbXV0ZXgoKSA9IGRlZmF1bHQ7CisKKyAgICByZWN1cnNpdmVfbXV0ZXgoY29uc3QgcmVjdXJzaXZlX211dGV4JikgPSBkZWxldGU7CisgICAgcmVjdXJzaXZlX211dGV4JiBvcGVyYXRvcj0oY29uc3QgcmVjdXJzaXZlX211dGV4JikgPSBkZWxldGU7CisKKyAgICB2b2lkCisgICAgbG9jaygpCisgICAgeworICAgICAgaW50IF9fZSA9IF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfbG9jaygmX01fbXV0ZXgpOworCisgICAgICAvLyBFSU5WQUwsIEVBR0FJTiwgRUJVU1ksIEVJTlZBTCwgRURFQURMSyhtYXkpCisgICAgICBpZiAoX19lKQorCV9fdGhyb3dfc3lzdGVtX2Vycm9yKF9fZSk7CisgICAgfQorCisgICAgYm9vbAorICAgIHRyeV9sb2NrKCkgbm9leGNlcHQKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVCVVNZCisgICAgICByZXR1cm4gIV9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdHJ5bG9jaygmX01fbXV0ZXgpOworICAgIH0KKworICAgIHZvaWQKKyAgICB1bmxvY2soKQorICAgIHsKKyAgICAgIC8vIFhYWCBFSU5WQUwsIEVBR0FJTiwgRUJVU1kKKyAgICAgIF9fZ3RocmVhZF9yZWN1cnNpdmVfbXV0ZXhfdW5sb2NrKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgbmF0aXZlX2hhbmRsZV90eXBlCisgICAgbmF0aXZlX2hhbmRsZSgpCisgICAgeyByZXR1cm4gJl9NX211dGV4OyB9CisgIH07CisKKyNpZiBfR1RIUkVBRF9VU0VfTVVURVhfVElNRURMT0NLCisgIC8vLyB0aW1lZF9tdXRleAorICBjbGFzcyB0aW1lZF9tdXRleCA6IHByaXZhdGUgX19tdXRleF9iYXNlCisgIHsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQ0xPQ0tfTU9OT1RPTklDCisgICAgdHlwZWRlZiBjaHJvbm86OnN0ZWFkeV9jbG9jayAJICAJX19jbG9ja190OworI2Vsc2UKKyAgICB0eXBlZGVmIGNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrIAlfX2Nsb2NrX3Q7CisjZW5kaWYKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBfX25hdGl2ZV90eXBlKiAJCSAgCW5hdGl2ZV9oYW5kbGVfdHlwZTsKKworICAgIHRpbWVkX211dGV4KCkgPSBkZWZhdWx0OworICAgIH50aW1lZF9tdXRleCgpID0gZGVmYXVsdDsKKworICAgIHRpbWVkX211dGV4KGNvbnN0IHRpbWVkX211dGV4JikgPSBkZWxldGU7CisgICAgdGltZWRfbXV0ZXgmIG9wZXJhdG9yPShjb25zdCB0aW1lZF9tdXRleCYpID0gZGVsZXRlOworCisgICAgdm9pZAorICAgIGxvY2soKQorICAgIHsKKyAgICAgIGludCBfX2UgPSBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbXV0ZXgpOworCisgICAgICAvLyBFSU5WQUwsIEVBR0FJTiwgRUJVU1ksIEVJTlZBTCwgRURFQURMSyhtYXkpCisgICAgICBpZiAoX19lKQorCV9fdGhyb3dfc3lzdGVtX2Vycm9yKF9fZSk7CisgICAgfQorCisgICAgYm9vbAorICAgIHRyeV9sb2NrKCkgbm9leGNlcHQKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVCVVNZCisgICAgICByZXR1cm4gIV9fZ3RocmVhZF9tdXRleF90cnlsb2NrKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIF9SZXAsIGNsYXNzIF9QZXJpb2Q+CisgICAgICBib29sCisgICAgICB0cnlfbG9ja19mb3IoY29uc3QgY2hyb25vOjpkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19ydGltZSkKKyAgICAgIHsgcmV0dXJuIF9NX3RyeV9sb2NrX2ZvcihfX3J0aW1lKTsgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIF9DbG9jaywgY2xhc3MgX0R1cmF0aW9uPgorICAgICAgYm9vbAorICAgICAgdHJ5X2xvY2tfdW50aWwoY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hdGltZSkKKyAgICAgIHsgcmV0dXJuIF9NX3RyeV9sb2NrX3VudGlsKF9fYXRpbWUpOyB9CisKKyAgICB2b2lkCisgICAgdW5sb2NrKCkKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVCVVNZCisgICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgbmF0aXZlX2hhbmRsZV90eXBlCisgICAgbmF0aXZlX2hhbmRsZSgpCisgICAgeyByZXR1cm4gJl9NX211dGV4OyB9CisKKyAgcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorICAgICAgYm9vbAorICAgICAgX01fdHJ5X2xvY2tfZm9yKGNvbnN0IGNocm9ubzo6ZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fcnRpbWUpCisgICAgICB7CisJYXV0byBfX3J0ID0gY2hyb25vOjpkdXJhdGlvbl9jYXN0PF9fY2xvY2tfdDo6ZHVyYXRpb24+KF9fcnRpbWUpOworCWlmIChyYXRpb19ncmVhdGVyPF9fY2xvY2tfdDo6cGVyaW9kLCBfUGVyaW9kPigpKQorCSAgKytfX3J0OworCisJcmV0dXJuIF9NX3RyeV9sb2NrX3VudGlsKF9fY2xvY2tfdDo6bm93KCkgKyBfX3J0KTsKKyAgICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICAgIGJvb2wKKyAgICAgIF9NX3RyeV9sb2NrX3VudGlsKGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfX2Nsb2NrX3QsCisJCQkJCQkgX0R1cmF0aW9uPiYgX19hdGltZSkKKyAgICAgIHsKKwljaHJvbm86OnRpbWVfcG9pbnQ8X19jbG9ja190LCBjaHJvbm86OnNlY29uZHM+IF9fcyA9CisJICBjaHJvbm86OnRpbWVfcG9pbnRfY2FzdDxjaHJvbm86OnNlY29uZHM+KF9fYXRpbWUpOworCisJY2hyb25vOjpuYW5vc2Vjb25kcyBfX25zID0KKwkgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86Om5hbm9zZWNvbmRzPihfX2F0aW1lIC0gX19zKTsKKworCV9fZ3RocmVhZF90aW1lX3QgX190cyA9IHsKKwkgIHN0YXRpY19jYXN0PHN0ZDo6dGltZV90PihfX3MudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpLAorCSAgc3RhdGljX2Nhc3Q8bG9uZz4oX19ucy5jb3VudCgpKQorCX07CisKKwlyZXR1cm4gIV9fZ3RocmVhZF9tdXRleF90aW1lZGxvY2sobmF0aXZlX2hhbmRsZSgpLCAmX190cyk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICAgIGJvb2wKKyAgICAgIF9NX3RyeV9sb2NrX3VudGlsKGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbj4mIF9fYXRpbWUpCisgICAgICB7IHJldHVybiBfTV90cnlfbG9ja19mb3IoX19hdGltZSAtIF9DbG9jazo6bm93KCkpOyB9CisgIH07CisKKyAgLy8vIHJlY3Vyc2l2ZV90aW1lZF9tdXRleAorICBjbGFzcyByZWN1cnNpdmVfdGltZWRfbXV0ZXggOiBwcml2YXRlIF9fcmVjdXJzaXZlX211dGV4X2Jhc2UKKyAgeworI2lmZGVmIF9HTElCQ1hYX1VTRV9DTE9DS19NT05PVE9OSUMKKyAgICB0eXBlZGVmIGNocm9ubzo6c3RlYWR5X2Nsb2NrIAkJX19jbG9ja190OworI2Vsc2UKKyAgICB0eXBlZGVmIGNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrIAlfX2Nsb2NrX3Q7CisjZW5kaWYKKworICBwdWJsaWM6CisgICAgdHlwZWRlZiBfX25hdGl2ZV90eXBlKiAJCQluYXRpdmVfaGFuZGxlX3R5cGU7CisKKyAgICByZWN1cnNpdmVfdGltZWRfbXV0ZXgoKSA9IGRlZmF1bHQ7CisgICAgfnJlY3Vyc2l2ZV90aW1lZF9tdXRleCgpID0gZGVmYXVsdDsKKworICAgIHJlY3Vyc2l2ZV90aW1lZF9tdXRleChjb25zdCByZWN1cnNpdmVfdGltZWRfbXV0ZXgmKSA9IGRlbGV0ZTsKKyAgICByZWN1cnNpdmVfdGltZWRfbXV0ZXgmIG9wZXJhdG9yPShjb25zdCByZWN1cnNpdmVfdGltZWRfbXV0ZXgmKSA9IGRlbGV0ZTsKKworICAgIHZvaWQKKyAgICBsb2NrKCkKKyAgICB7CisgICAgICBpbnQgX19lID0gX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF9sb2NrKCZfTV9tdXRleCk7CisKKyAgICAgIC8vIEVJTlZBTCwgRUFHQUlOLCBFQlVTWSwgRUlOVkFMLCBFREVBRExLKG1heSkKKyAgICAgIGlmIChfX2UpCisJX190aHJvd19zeXN0ZW1fZXJyb3IoX19lKTsKKyAgICB9CisKKyAgICBib29sCisgICAgdHJ5X2xvY2soKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIC8vIFhYWCBFSU5WQUwsIEVBR0FJTiwgRUJVU1kKKyAgICAgIHJldHVybiAhX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90cnlsb2NrKCZfTV9tdXRleCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIF9SZXAsIGNsYXNzIF9QZXJpb2Q+CisgICAgICBib29sCisgICAgICB0cnlfbG9ja19mb3IoY29uc3QgY2hyb25vOjpkdXJhdGlvbjxfUmVwLCBfUGVyaW9kPiYgX19ydGltZSkKKyAgICAgIHsgcmV0dXJuIF9NX3RyeV9sb2NrX2ZvcihfX3J0aW1lKTsgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIF9DbG9jaywgY2xhc3MgX0R1cmF0aW9uPgorICAgICAgYm9vbAorICAgICAgdHJ5X2xvY2tfdW50aWwoY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hdGltZSkKKyAgICAgIHsgcmV0dXJuIF9NX3RyeV9sb2NrX3VudGlsKF9fYXRpbWUpOyB9CisKKyAgICB2b2lkCisgICAgdW5sb2NrKCkKKyAgICB7CisgICAgICAvLyBYWFggRUlOVkFMLCBFQUdBSU4sIEVCVVNZCisgICAgICBfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3VubG9jaygmX01fbXV0ZXgpOworICAgIH0KKworICAgIG5hdGl2ZV9oYW5kbGVfdHlwZQorICAgIG5hdGl2ZV9oYW5kbGUoKQorICAgIHsgcmV0dXJuICZfTV9tdXRleDsgfQorCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKyAgICAgIGJvb2wKKyAgICAgIF9NX3RyeV9sb2NrX2Zvcihjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX3J0aW1lKQorICAgICAgeworCWF1dG8gX19ydCA9IGNocm9ubzo6ZHVyYXRpb25fY2FzdDxfX2Nsb2NrX3Q6OmR1cmF0aW9uPihfX3J0aW1lKTsKKwlpZiAocmF0aW9fZ3JlYXRlcjxfX2Nsb2NrX3Q6OnBlcmlvZCwgX1BlcmlvZD4oKSkKKwkgICsrX19ydDsKKworCXJldHVybiBfTV90cnlfbG9ja191bnRpbChfX2Nsb2NrX3Q6Om5vdygpICsgX19ydCk7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVyYXRpb24+CisgICAgICBib29sCisgICAgICBfTV90cnlfbG9ja191bnRpbChjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X19jbG9ja190LAorCQkJCQkJIF9EdXJhdGlvbj4mIF9fYXRpbWUpCisgICAgICB7CisJY2hyb25vOjp0aW1lX3BvaW50PF9fY2xvY2tfdCwgY2hyb25vOjpzZWNvbmRzPiBfX3MgPQorCSAgY2hyb25vOjp0aW1lX3BvaW50X2Nhc3Q8Y2hyb25vOjpzZWNvbmRzPihfX2F0aW1lKTsKKworCWNocm9ubzo6bmFub3NlY29uZHMgX19ucyA9CisJICBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Y2hyb25vOjpuYW5vc2Vjb25kcz4oX19hdGltZSAtIF9fcyk7CisKKwlfX2d0aHJlYWRfdGltZV90IF9fdHMgPSB7CisJICBzdGF0aWNfY2FzdDxzdGQ6OnRpbWVfdD4oX19zLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKSwKKwkgIHN0YXRpY19jYXN0PGxvbmc+KF9fbnMuY291bnQoKSkKKwl9OworCisJcmV0dXJuICFfX2d0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKG5hdGl2ZV9oYW5kbGUoKSwgJl9fdHMpOworICAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24+CisgICAgICBib29sCisgICAgICBfTV90cnlfbG9ja191bnRpbChjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24+JiBfX2F0aW1lKQorICAgICAgeyByZXR1cm4gX01fdHJ5X2xvY2tfZm9yKF9fYXRpbWUgLSBfQ2xvY2s6Om5vdygpKTsgfQorICB9OworI2VuZGlmCisjZW5kaWYgLy8gX0dMSUJDWFhfSEFTX0dUSFJFQURTCisKKyAgLy8vIERvIG5vdCBhY3F1aXJlIG93bmVyc2hpcCBvZiB0aGUgbXV0ZXguCisgIHN0cnVjdCBkZWZlcl9sb2NrX3QgeyB9OworCisgIC8vLyBUcnkgdG8gYWNxdWlyZSBvd25lcnNoaXAgb2YgdGhlIG11dGV4IHdpdGhvdXQgYmxvY2tpbmcuCisgIHN0cnVjdCB0cnlfdG9fbG9ja190IHsgfTsKKworICAvLy8gQXNzdW1lIHRoZSBjYWxsaW5nIHRocmVhZCBoYXMgYWxyZWFkeSBvYnRhaW5lZCBtdXRleCBvd25lcnNoaXAKKyAgLy8vIGFuZCBtYW5hZ2UgaXQuCisgIHN0cnVjdCBhZG9wdF9sb2NrX3QgeyB9OworCisgIGNvbnN0ZXhwciBkZWZlcl9sb2NrX3QJZGVmZXJfbG9jayB7IH07CisgIGNvbnN0ZXhwciB0cnlfdG9fbG9ja190CXRyeV90b19sb2NrIHsgfTsKKyAgY29uc3RleHByIGFkb3B0X2xvY2tfdAlhZG9wdF9sb2NrIHsgfTsKKworICAvLy8gQGJyaWVmICBTY29wZWQgbG9jayBpZGlvbS4KKyAgLy8gQWNxdWlyZSB0aGUgbXV0ZXggaGVyZSB3aXRoIGEgY29uc3RydWN0b3IgY2FsbCwgdGhlbiByZWxlYXNlIHdpdGgKKyAgLy8gdGhlIGRlc3RydWN0b3IgY2FsbCBpbiBhY2NvcmRhbmNlIHdpdGggUkFJSSBzdHlsZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX011dGV4PgorICAgIGNsYXNzIGxvY2tfZ3VhcmQKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfTXV0ZXggbXV0ZXhfdHlwZTsKKworICAgICAgZXhwbGljaXQgbG9ja19ndWFyZChtdXRleF90eXBlJiBfX20pIDogX01fZGV2aWNlKF9fbSkKKyAgICAgIHsgX01fZGV2aWNlLmxvY2soKTsgfQorCisgICAgICBsb2NrX2d1YXJkKG11dGV4X3R5cGUmIF9fbSwgYWRvcHRfbG9ja190KSA6IF9NX2RldmljZShfX20pCisgICAgICB7IH0gLy8gY2FsbGluZyB0aHJlYWQgb3ducyBtdXRleAorCisgICAgICB+bG9ja19ndWFyZCgpCisgICAgICB7IF9NX2RldmljZS51bmxvY2soKTsgfQorCisgICAgICBsb2NrX2d1YXJkKGNvbnN0IGxvY2tfZ3VhcmQmKSA9IGRlbGV0ZTsKKyAgICAgIGxvY2tfZ3VhcmQmIG9wZXJhdG9yPShjb25zdCBsb2NrX2d1YXJkJikgPSBkZWxldGU7CisKKyAgICBwcml2YXRlOgorICAgICAgbXV0ZXhfdHlwZSYgIF9NX2RldmljZTsKKyAgICB9OworCisgIC8vLyB1bmlxdWVfbG9jaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTXV0ZXg+CisgICAgY2xhc3MgdW5pcXVlX2xvY2sKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfTXV0ZXggbXV0ZXhfdHlwZTsKKworICAgICAgdW5pcXVlX2xvY2soKSBub2V4Y2VwdAorICAgICAgOiBfTV9kZXZpY2UoMCksIF9NX293bnMoZmFsc2UpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQgdW5pcXVlX2xvY2sobXV0ZXhfdHlwZSYgX19tKQorICAgICAgOiBfTV9kZXZpY2UoJl9fbSksIF9NX293bnMoZmFsc2UpCisgICAgICB7CisJbG9jaygpOworCV9NX293bnMgPSB0cnVlOworICAgICAgfQorCisgICAgICB1bmlxdWVfbG9jayhtdXRleF90eXBlJiBfX20sIGRlZmVyX2xvY2tfdCkgbm9leGNlcHQKKyAgICAgIDogX01fZGV2aWNlKCZfX20pLCBfTV9vd25zKGZhbHNlKQorICAgICAgeyB9CisKKyAgICAgIHVuaXF1ZV9sb2NrKG11dGV4X3R5cGUmIF9fbSwgdHJ5X3RvX2xvY2tfdCkKKyAgICAgIDogX01fZGV2aWNlKCZfX20pLCBfTV9vd25zKF9NX2RldmljZS0+dHJ5X2xvY2soKSkKKyAgICAgIHsgfQorCisgICAgICB1bmlxdWVfbG9jayhtdXRleF90eXBlJiBfX20sIGFkb3B0X2xvY2tfdCkKKyAgICAgIDogX01fZGV2aWNlKCZfX20pLCBfTV9vd25zKHRydWUpCisgICAgICB7CisJLy8gWFhYIGNhbGxpbmcgdGhyZWFkIG93bnMgbXV0ZXgKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24+CisJdW5pcXVlX2xvY2sobXV0ZXhfdHlwZSYgX19tLAorCQkgICAgY29uc3QgY2hyb25vOjp0aW1lX3BvaW50PF9DbG9jaywgX0R1cmF0aW9uPiYgX19hdGltZSkKKwk6IF9NX2RldmljZSgmX19tKSwgX01fb3ducyhfTV9kZXZpY2UtPnRyeV9sb2NrX3VudGlsKF9fYXRpbWUpKQorCXsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorCXVuaXF1ZV9sb2NrKG11dGV4X3R5cGUmIF9fbSwKKwkJICAgIGNvbnN0IGNocm9ubzo6ZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fcnRpbWUpCisJOiBfTV9kZXZpY2UoJl9fbSksIF9NX293bnMoX01fZGV2aWNlLT50cnlfbG9ja19mb3IoX19ydGltZSkpCisJeyB9CisKKyAgICAgIH51bmlxdWVfbG9jaygpCisgICAgICB7CisJaWYgKF9NX293bnMpCisJICB1bmxvY2soKTsKKyAgICAgIH0KKworICAgICAgdW5pcXVlX2xvY2soY29uc3QgdW5pcXVlX2xvY2smKSA9IGRlbGV0ZTsKKyAgICAgIHVuaXF1ZV9sb2NrJiBvcGVyYXRvcj0oY29uc3QgdW5pcXVlX2xvY2smKSA9IGRlbGV0ZTsKKworICAgICAgdW5pcXVlX2xvY2sodW5pcXVlX2xvY2smJiBfX3UpIG5vZXhjZXB0CisgICAgICA6IF9NX2RldmljZShfX3UuX01fZGV2aWNlKSwgX01fb3ducyhfX3UuX01fb3ducykKKyAgICAgIHsKKwlfX3UuX01fZGV2aWNlID0gMDsKKwlfX3UuX01fb3ducyA9IGZhbHNlOworICAgICAgfQorCisgICAgICB1bmlxdWVfbG9jayYgb3BlcmF0b3I9KHVuaXF1ZV9sb2NrJiYgX191KSBub2V4Y2VwdAorICAgICAgeworCWlmKF9NX293bnMpCisJICB1bmxvY2soKTsKKworCXVuaXF1ZV9sb2NrKHN0ZDo6bW92ZShfX3UpKS5zd2FwKCp0aGlzKTsKKworCV9fdS5fTV9kZXZpY2UgPSAwOworCV9fdS5fTV9vd25zID0gZmFsc2U7CisKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGxvY2soKQorICAgICAgeworCWlmICghX01fZGV2aWNlKQorCSAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KGVycmM6Om9wZXJhdGlvbl9ub3RfcGVybWl0dGVkKSk7CisJZWxzZSBpZiAoX01fb3ducykKKwkgIF9fdGhyb3dfc3lzdGVtX2Vycm9yKGludChlcnJjOjpyZXNvdXJjZV9kZWFkbG9ja193b3VsZF9vY2N1cikpOworCWVsc2UKKwkgIHsKKwkgICAgX01fZGV2aWNlLT5sb2NrKCk7CisJICAgIF9NX293bnMgPSB0cnVlOworCSAgfQorICAgICAgfQorCisgICAgICBib29sCisgICAgICB0cnlfbG9jaygpCisgICAgICB7CisJaWYgKCFfTV9kZXZpY2UpCisJICBfX3Rocm93X3N5c3RlbV9lcnJvcihpbnQoZXJyYzo6b3BlcmF0aW9uX25vdF9wZXJtaXR0ZWQpKTsKKwllbHNlIGlmIChfTV9vd25zKQorCSAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KGVycmM6OnJlc291cmNlX2RlYWRsb2NrX3dvdWxkX29jY3VyKSk7CisJZWxzZQorCSAgeworCSAgICBfTV9vd25zID0gX01fZGV2aWNlLT50cnlfbG9jaygpOworCSAgICByZXR1cm4gX01fb3duczsKKwkgIH0KKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Nsb2NrLCB0eXBlbmFtZSBfRHVyYXRpb24+CisJYm9vbAorCXRyeV9sb2NrX3VudGlsKGNvbnN0IGNocm9ubzo6dGltZV9wb2ludDxfQ2xvY2ssIF9EdXJhdGlvbj4mIF9fYXRpbWUpCisJeworCSAgaWYgKCFfTV9kZXZpY2UpCisJICAgIF9fdGhyb3dfc3lzdGVtX2Vycm9yKGludChlcnJjOjpvcGVyYXRpb25fbm90X3Blcm1pdHRlZCkpOworCSAgZWxzZSBpZiAoX01fb3ducykKKwkgICAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KGVycmM6OnJlc291cmNlX2RlYWRsb2NrX3dvdWxkX29jY3VyKSk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfTV9vd25zID0gX01fZGV2aWNlLT50cnlfbG9ja191bnRpbChfX2F0aW1lKTsKKwkgICAgICByZXR1cm4gX01fb3duczsKKwkgICAgfQorCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKwlib29sCisJdHJ5X2xvY2tfZm9yKGNvbnN0IGNocm9ubzo6ZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fcnRpbWUpCisJeworCSAgaWYgKCFfTV9kZXZpY2UpCisJICAgIF9fdGhyb3dfc3lzdGVtX2Vycm9yKGludChlcnJjOjpvcGVyYXRpb25fbm90X3Blcm1pdHRlZCkpOworCSAgZWxzZSBpZiAoX01fb3ducykKKwkgICAgX190aHJvd19zeXN0ZW1fZXJyb3IoaW50KGVycmM6OnJlc291cmNlX2RlYWRsb2NrX3dvdWxkX29jY3VyKSk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfTV9vd25zID0gX01fZGV2aWNlLT50cnlfbG9ja19mb3IoX19ydGltZSk7CisJICAgICAgcmV0dXJuIF9NX293bnM7CisJICAgIH0KKwkgfQorCisgICAgICB2b2lkCisgICAgICB1bmxvY2soKQorICAgICAgeworCWlmICghX01fb3ducykKKwkgIF9fdGhyb3dfc3lzdGVtX2Vycm9yKGludChlcnJjOjpvcGVyYXRpb25fbm90X3Blcm1pdHRlZCkpOworCWVsc2UgaWYgKF9NX2RldmljZSkKKwkgIHsKKwkgICAgX01fZGV2aWNlLT51bmxvY2soKTsKKwkgICAgX01fb3ducyA9IGZhbHNlOworCSAgfQorICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHVuaXF1ZV9sb2NrJiBfX3UpIG5vZXhjZXB0CisgICAgICB7CisJc3RkOjpzd2FwKF9NX2RldmljZSwgX191Ll9NX2RldmljZSk7CisJc3RkOjpzd2FwKF9NX293bnMsIF9fdS5fTV9vd25zKTsKKyAgICAgIH0KKworICAgICAgbXV0ZXhfdHlwZSoKKyAgICAgIHJlbGVhc2UoKSBub2V4Y2VwdAorICAgICAgeworCW11dGV4X3R5cGUqIF9fcmV0ID0gX01fZGV2aWNlOworCV9NX2RldmljZSA9IDA7CisJX01fb3ducyA9IGZhbHNlOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgb3duc19sb2NrKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX293bnM7IH0KKworICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBvd25zX2xvY2soKTsgfQorCisgICAgICBtdXRleF90eXBlKgorICAgICAgbXV0ZXgoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX01fZGV2aWNlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgbXV0ZXhfdHlwZSoJX01fZGV2aWNlOworICAgICAgYm9vbAkJX01fb3duczsgLy8gWFhYIHVzZSBhdG9taWNfYm9vbAorICAgIH07CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHVuaXF1ZV9sb2NrIG9iamVjdHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NdXRleD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5pcXVlX2xvY2s8X011dGV4PiYgX194LCB1bmlxdWVfbG9jazxfTXV0ZXg+JiBfX3kpIG5vZXhjZXB0CisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8aW50IF9JZHg+CisgICAgc3RydWN0IF9fdW5sb2NrX2ltcGwKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfTG9jaz4KKwlzdGF0aWMgdm9pZAorCV9fZG9fdW5sb2NrKHR1cGxlPF9Mb2NrJi4uLj4mIF9fbG9ja3MpCisJeworCSAgc3RkOjpnZXQ8X0lkeD4oX19sb2NrcykudW5sb2NrKCk7CisJICBfX3VubG9ja19pbXBsPF9JZHggLSAxPjo6X19kb191bmxvY2soX19sb2Nrcyk7CisJfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3VubG9ja19pbXBsPC0xPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9Mb2NrPgorCXN0YXRpYyB2b2lkCisJX19kb191bmxvY2sodHVwbGU8X0xvY2smLi4uPiYpCisJeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jaz4KKyAgICB1bmlxdWVfbG9jazxfTG9jaz4KKyAgICBfX3RyeV90b19sb2NrKF9Mb2NrJiBfX2wpCisgICAgeyByZXR1cm4gdW5pcXVlX2xvY2s8X0xvY2s+KF9fbCwgdHJ5X3RvX2xvY2spOyB9CisKKyAgdGVtcGxhdGU8aW50IF9JZHgsIGJvb2wgX0NvbnRpbnVlID0gdHJ1ZT4KKyAgICBzdHJ1Y3QgX190cnlfbG9ja19pbXBsCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0xvY2s+CisJc3RhdGljIHZvaWQKKwlfX2RvX3RyeV9sb2NrKHR1cGxlPF9Mb2NrJi4uLj4mIF9fbG9ja3MsIGludCYgX19pZHgpCisJeworICAgICAgICAgIF9faWR4ID0gX0lkeDsKKyAgICAgICAgICBhdXRvIF9fbG9jayA9IF9fdHJ5X3RvX2xvY2soc3RkOjpnZXQ8X0lkeD4oX19sb2NrcykpOworICAgICAgICAgIGlmIChfX2xvY2sub3duc19sb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fdHJ5X2xvY2tfaW1wbDxfSWR4ICsgMSwgX0lkeCArIDIgPCBzaXplb2YuLi4oX0xvY2spPjo6CisgICAgICAgICAgICAgICAgX19kb190cnlfbG9jayhfX2xvY2tzLCBfX2lkeCk7CisgICAgICAgICAgICAgIGlmIChfX2lkeCA9PSAtMSkKKyAgICAgICAgICAgICAgICBfX2xvY2sucmVsZWFzZSgpOworICAgICAgICAgICAgfQorCX0KKyAgICB9OworCisgIHRlbXBsYXRlPGludCBfSWR4PgorICAgIHN0cnVjdCBfX3RyeV9sb2NrX2ltcGw8X0lkeCwgZmFsc2U+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0xvY2s+CisJc3RhdGljIHZvaWQKKwlfX2RvX3RyeV9sb2NrKHR1cGxlPF9Mb2NrJi4uLj4mIF9fbG9ja3MsIGludCYgX19pZHgpCisJeworICAgICAgICAgIF9faWR4ID0gX0lkeDsKKyAgICAgICAgICBhdXRvIF9fbG9jayA9IF9fdHJ5X3RvX2xvY2soc3RkOjpnZXQ8X0lkeD4oX19sb2NrcykpOworICAgICAgICAgIGlmIChfX2xvY2sub3duc19sb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9faWR4ID0gLTE7CisgICAgICAgICAgICAgIF9fbG9jay5yZWxlYXNlKCk7CisgICAgICAgICAgICB9CisJfQorICAgIH07CisKKyAgLyoqIEBicmllZiBHZW5lcmljIHRyeV9sb2NrLgorICAgKiAgQHBhcmFtIF9fbDEgTWVldHMgTXV0ZXggcmVxdWlyZW1lbnRzICh0cnlfbG9jaygpIG1heSB0aHJvdykuCisgICAqICBAcGFyYW0gX19sMiBNZWV0cyBNdXRleCByZXF1aXJlbWVudHMgKHRyeV9sb2NrKCkgbWF5IHRocm93KS4KKyAgICogIEBwYXJhbSBfX2wzIE1lZXRzIE11dGV4IHJlcXVpcmVtZW50cyAodHJ5X2xvY2soKSBtYXkgdGhyb3cpLgorICAgKiAgQHJldHVybiBSZXR1cm5zIC0xIGlmIGFsbCB0cnlfbG9jaygpIGNhbGxzIHJldHVybiB0cnVlLiBPdGhlcndpc2UgcmV0dXJucworICAgKiAgICAgICAgICBhIDAtYmFzZWQgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUgYXJndW1lbnQgdGhhdCByZXR1cm5lZCBmYWxzZS4KKyAgICogIEBwb3N0IEVpdGhlciBhbGwgYXJndW1lbnRzIGFyZSBsb2NrZWQsIG9yIG5vbmUgd2lsbCBiZS4KKyAgICoKKyAgICogIFNlcXVlbnRpYWxseSBjYWxscyB0cnlfbG9jaygpIG9uIGVhY2ggYXJndW1lbnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTG9jazEsIHR5cGVuYW1lIF9Mb2NrMiwgdHlwZW5hbWUuLi4gX0xvY2szPgorICAgIGludAorICAgIHRyeV9sb2NrKF9Mb2NrMSYgX19sMSwgX0xvY2syJiBfX2wyLCBfTG9jazMmLi4uIF9fbDMpCisgICAgeworICAgICAgaW50IF9faWR4OworICAgICAgYXV0byBfX2xvY2tzID0gc3RkOjp0aWUoX19sMSwgX19sMiwgX19sMy4uLik7CisgICAgICBfX3RyeQorICAgICAgeyBfX3RyeV9sb2NrX2ltcGw8MD46Ol9fZG9fdHJ5X2xvY2soX19sb2NrcywgX19pZHgpOyB9CisgICAgICBfX2NhdGNoKC4uLikKKyAgICAgIHsgfQorICAgICAgcmV0dXJuIF9faWR4OworICAgIH0KKworICAvKiogQGJyaWVmIEdlbmVyaWMgbG9jay4KKyAgICogIEBwYXJhbSBfX2wxIE1lZXRzIE11dGV4IHJlcXVpcmVtZW50cyAodHJ5X2xvY2soKSBtYXkgdGhyb3cpLgorICAgKiAgQHBhcmFtIF9fbDIgTWVldHMgTXV0ZXggcmVxdWlyZW1lbnRzICh0cnlfbG9jaygpIG1heSB0aHJvdykuCisgICAqICBAcGFyYW0gX19sMyBNZWV0cyBNdXRleCByZXF1aXJlbWVudHMgKHRyeV9sb2NrKCkgbWF5IHRocm93KS4KKyAgICogIEB0aHJvdyBBbiBleGNlcHRpb24gdGhyb3duIGJ5IGFuIGFyZ3VtZW50J3MgbG9jaygpIG9yIHRyeV9sb2NrKCkgbWVtYmVyLgorICAgKiAgQHBvc3QgQWxsIGFyZ3VtZW50cyBhcmUgbG9ja2VkLgorICAgKgorICAgKiAgQWxsIGFyZ3VtZW50cyBhcmUgbG9ja2VkIHZpYSBhIHNlcXVlbmNlIG9mIGNhbGxzIHRvIGxvY2soKSwgdHJ5X2xvY2soKQorICAgKiAgYW5kIHVubG9jaygpLiAgSWYgdGhlIGNhbGwgZXhpdHMgdmlhIGFuIGV4Y2VwdGlvbiBhbnkgbG9ja3MgdGhhdCB3ZXJlCisgICAqICBvYnRhaW5lZCB3aWxsIGJlIHJlbGVhc2VkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0wxLCB0eXBlbmFtZSBfTDIsIHR5cGVuYW1lIC4uLl9MMz4KKyAgICB2b2lkCisgICAgbG9jayhfTDEmIF9fbDEsIF9MMiYgX19sMiwgX0wzJi4uLiBfX2wzKQorICAgIHsKKyAgICAgIHdoaWxlICh0cnVlKQorICAgICAgICB7CisgICAgICAgICAgdW5pcXVlX2xvY2s8X0wxPiBfX2ZpcnN0KF9fbDEpOworICAgICAgICAgIGludCBfX2lkeDsKKyAgICAgICAgICBhdXRvIF9fbG9ja3MgPSBzdGQ6OnRpZShfX2wyLCBfX2wzLi4uKTsKKyAgICAgICAgICBfX3RyeV9sb2NrX2ltcGw8MCwgc2l6ZW9mLi4uKF9MMyk+OjpfX2RvX3RyeV9sb2NrKF9fbG9ja3MsIF9faWR4KTsKKyAgICAgICAgICBpZiAoX19pZHggPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fZmlyc3QucmVsZWFzZSgpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBfR0xJQkNYWF9IQVNfR1RIUkVBRFMKKyAgLy8vIG9uY2VfZmxhZworICBzdHJ1Y3Qgb25jZV9mbGFnCisgIHsKKyAgcHJpdmF0ZToKKyAgICB0eXBlZGVmIF9fZ3RocmVhZF9vbmNlX3QgX19uYXRpdmVfdHlwZTsKKyAgICBfX25hdGl2ZV90eXBlICBfTV9vbmNlID0gX19HVEhSRUFEX09OQ0VfSU5JVDsKKworICBwdWJsaWM6CisgICAgLy8vIENvbnN0cnVjdG9yCisgICAgY29uc3RleHByIG9uY2VfZmxhZygpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICAgIC8vLyBEZWxldGVkIGNvcHkgY29uc3RydWN0b3IKKyAgICBvbmNlX2ZsYWcoY29uc3Qgb25jZV9mbGFnJikgPSBkZWxldGU7CisgICAgLy8vIERlbGV0ZWQgYXNzaWdubWVudCBvcGVyYXRvcgorICAgIG9uY2VfZmxhZyYgb3BlcmF0b3I9KGNvbnN0IG9uY2VfZmxhZyYpID0gZGVsZXRlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIGZyaWVuZCB2b2lkCisgICAgICBjYWxsX29uY2Uob25jZV9mbGFnJiBfX29uY2UsIF9DYWxsYWJsZSYmIF9fZiwgX0FyZ3MmJi4uLiBfX2FyZ3MpOworICB9OworCisjaWZkZWYgX0dMSUJDWFhfSEFWRV9UTFMKKyAgZXh0ZXJuIF9fdGhyZWFkIHZvaWQqIF9fb25jZV9jYWxsYWJsZTsKKyAgZXh0ZXJuIF9fdGhyZWFkIHZvaWQgKCpfX29uY2VfY2FsbCkoKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2FsbGFibGU+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX29uY2VfY2FsbF9pbXBsKCkKKyAgICB7CisgICAgICAoKihfQ2FsbGFibGUqKV9fb25jZV9jYWxsYWJsZSkoKTsKKyAgICB9CisjZWxzZQorICBleHRlcm4gZnVuY3Rpb248dm9pZCgpPiBfX29uY2VfZnVuY3RvcjsKKworICBleHRlcm4gdm9pZAorICBfX3NldF9vbmNlX2Z1bmN0b3JfbG9ja19wdHIodW5pcXVlX2xvY2s8bXV0ZXg+Kik7CisKKyAgZXh0ZXJuIG11dGV4JgorICBfX2dldF9vbmNlX211dGV4KCk7CisjZW5kaWYKKworICBleHRlcm4gIkMiIHZvaWQgX19vbmNlX3Byb3h5KHZvaWQpOworCisgIC8vLyBjYWxsX29uY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICB2b2lkCisgICAgY2FsbF9vbmNlKG9uY2VfZmxhZyYgX19vbmNlLCBfQ2FsbGFibGUmJiBfX2YsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgIHsKKyNpZmRlZiBfR0xJQkNYWF9IQVZFX1RMUworICAgICAgYXV0byBfX2JvdW5kX2Z1bmN0b3IgPSBzdGQ6Ol9fYmluZF9zaW1wbGUoc3RkOjpmb3J3YXJkPF9DYWxsYWJsZT4oX19mKSwKKyAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgICAgX19vbmNlX2NhbGxhYmxlID0gJl9fYm91bmRfZnVuY3RvcjsKKyAgICAgIF9fb25jZV9jYWxsID0gJl9fb25jZV9jYWxsX2ltcGw8ZGVjbHR5cGUoX19ib3VuZF9mdW5jdG9yKT47CisjZWxzZQorICAgICAgdW5pcXVlX2xvY2s8bXV0ZXg+IF9fZnVuY3Rvcl9sb2NrKF9fZ2V0X29uY2VfbXV0ZXgoKSk7CisgICAgICBhdXRvIF9fY2FsbGFibGUgPSBzdGQ6Ol9fYmluZF9zaW1wbGUoc3RkOjpmb3J3YXJkPF9DYWxsYWJsZT4oX19mKSwKKyAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgICAgX19vbmNlX2Z1bmN0b3IgPSBbJl0oKSB7IF9fY2FsbGFibGUoKTsgfTsKKyAgICAgIF9fc2V0X29uY2VfZnVuY3Rvcl9sb2NrX3B0cigmX19mdW5jdG9yX2xvY2spOworI2VuZGlmCisKKyAgICAgIGludCBfX2UgPSBfX2d0aHJlYWRfb25jZSgmKF9fb25jZS5fTV9vbmNlKSwgJl9fb25jZV9wcm94eSk7CisKKyNpZm5kZWYgX0dMSUJDWFhfSEFWRV9UTFMKKyAgICAgIGlmIChfX2Z1bmN0b3JfbG9jaykKKyAgICAgICAgX19zZXRfb25jZV9mdW5jdG9yX2xvY2tfcHRyKDApOworI2VuZGlmCisKKyAgICAgIGlmIChfX2UpCisJX190aHJvd19zeXN0ZW1fZXJyb3IoX19lKTsKKyAgICB9CisjZW5kaWYgLy8gX0dMSUJDWFhfSEFTX0dUSFJFQURTCisKKyAgLy8gQH0gZ3JvdXAgbXV0ZXhlcworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9HTElCQ1hYX01VVEVYCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL25ldyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbmV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOTI2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL25ldwpAQCAtMCwwICsxLDEyMiBAQAorLy8gVGhlIC0qLSBDKysgLSotIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQgaGVhZGVyLgorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorLy8KKy8vIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLyAKKy8vIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLyAKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBuZXcKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICoKKyAqICBUaGUgaGVhZGVyIEBjIG5ldyBkZWZpbmVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIG1hbmFnZSBkeW5hbWljIG1lbW9yeSBhbmQKKyAqICBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcnM7IHNlZQorICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy8xOF9zdXBwb3J0L2hvd3RvLmh0bWwjNCBmb3IgbW9yZS4KKyAqLworCisjaWZuZGVmIF9ORVcKKyNkZWZpbmUgX05FVworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisKK2V4dGVybiAiQysrIiB7CisKK25hbWVzcGFjZSBzdGQgCit7CisgIC8qKgorICAgKiAgQGJyaWVmICBFeGNlcHRpb24gcG9zc2libHkgdGhyb3duIGJ5IEBjIG5ldy4KKyAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICoKKyAgICogIEBjIGJhZF9hbGxvYyAob3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gaXQpIGlzIHVzZWQgdG8gcmVwb3J0IGFsbG9jYXRpb24KKyAgICogIGVycm9ycyBmcm9tIHRoZSB0aHJvd2luZyBmb3JtcyBvZiBAYyBuZXcuICAqLworICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIAorICB7CisgIHB1YmxpYzoKKyAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQorCisgICAgLy8gVGhpcyBkZWNsYXJhdGlvbiBpcyBub3QgdXNlbGVzczoKKyAgICAvLyBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MtMy4wLjIvZ2NjXzYuaHRtbCNTRUMxMTgKKyAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOworCisgICAgLy8gU2VlIGNvbW1lbnQgaW4gZWhfZXhjZXB0aW9uLmNjLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CisgIH07CisKKyAgc3RydWN0IG5vdGhyb3dfdCB7IH07CisKKyAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OworCisgIC8qKiBJZiB5b3Ugd3JpdGUgeW91ciBvd24gZXJyb3IgaGFuZGxlciB0byBiZSBjYWxsZWQgYnkgQGMgbmV3LCBpdCBtdXN0CisgICAqICBiZSBvZiB0aGlzIHR5cGUuICAqLworICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKKworICAvLy8gVGFrZXMgYSByZXBsYWNlbWVudCBoYW5kbGVyIGFzIHRoZSBhcmd1bWVudCwgcmV0dXJucyB0aGUKKyAgLy8vIHByZXZpb3VzIGhhbmRsZXIuCisgIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisvL0B7CisvKiogVGhlc2UgYXJlIHJlcGxhY2VhYmxlIHNpZ25hdHVyZXM6CisgKiAgLSBub3JtYWwgc2luZ2xlIG5ldyBhbmQgZGVsZXRlIChubyBhcmd1bWVudHMsIHRocm93IEBjIGJhZF9hbGxvYyBvbiBlcnJvcikKKyAqICAtIG5vcm1hbCBhcnJheSBuZXcgYW5kIGRlbGV0ZSAoc2FtZSkKKyAqICAtIEBjIG5vdGhyb3cgc2luZ2xlIG5ldyBhbmQgZGVsZXRlICh0YWtlIGEgQGMgbm90aHJvdyBhcmd1bWVudCwgcmV0dXJuCisgKiAgICBAYyBOVUxMIG9uIGVycm9yKQorICogIC0gQGMgbm90aHJvdyBhcnJheSBuZXcgYW5kIGRlbGV0ZSAoc2FtZSkKKyAqCisgKiAgUGxhY2VtZW50IG5ldyBhbmQgZGVsZXRlIHNpZ25hdHVyZXMgKHRha2UgYSBtZW1vcnkgYWRkcmVzcyBhcmd1bWVudCwKKyAqICBkb2VzIG5vdGhpbmcpIG1heSBub3QgYmUgcmVwbGFjZWQgYnkgYSB1c2VyJ3MgcHJvZ3JhbS4KKyovCit2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIF9HTElCQ1hYX1RIUk9XIChzdGQ6OmJhZF9hbGxvYykKKyAgX19hdHRyaWJ1dGVfXygoX19leHRlcm5hbGx5X3Zpc2libGVfXykpOwordm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIF9HTElCQ1hYX1RIUk9XIChzdGQ6OmJhZF9hbGxvYykKKyAgX19hdHRyaWJ1dGVfXygoX19leHRlcm5hbGx5X3Zpc2libGVfXykpOwordm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICBfX2F0dHJpYnV0ZV9fKChfX2V4dGVybmFsbHlfdmlzaWJsZV9fKSk7Cit2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgX19hdHRyaWJ1dGVfXygoX19leHRlcm5hbGx5X3Zpc2libGVfXykpOwordm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAorICBfX2F0dHJpYnV0ZV9fKChfX2V4dGVybmFsbHlfdmlzaWJsZV9fKSk7Cit2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKKyAgX19hdHRyaWJ1dGVfXygoX19leHRlcm5hbGx5X3Zpc2libGVfXykpOwordm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgIF9fYXR0cmlidXRlX18oKF9fZXh0ZXJuYWxseV92aXNpYmxlX18pKTsKK3ZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgX0dMSUJDWFhfVVNFX05PRVhDRVBUCisgIF9fYXR0cmlidXRlX18oKF9fZXh0ZXJuYWxseV92aXNpYmxlX18pKTsKKworLy8gRGVmYXVsdCBwbGFjZW1lbnQgdmVyc2lvbnMgb2Ygb3BlcmF0b3IgbmV3LgoraW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQKK3sgcmV0dXJuIF9fcDsgfQoraW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVAoreyByZXR1cm4gX19wOyB9CisKKy8vIERlZmF1bHQgcGxhY2VtZW50IHZlcnNpb25zIG9mIG9wZXJhdG9yIGRlbGV0ZS4KK2lubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAgKHZvaWQqLCB2b2lkKikgX0dMSUJDWFhfVVNFX05PRVhDRVBUIHsgfQoraW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIHZvaWQqKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyB9CisvL0B9Cit9IC8vIGV4dGVybiAiQysrIgorCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbnVtZXJpYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvbnVtZXJpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODU2NTZmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9udW1lcmljCkBAIC0wLDAgKzEsNzcgQEAKKy8vIDxudW1lcmljPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS9udW1lcmljCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX05VTUVSSUMKKyNkZWZpbmUgX0dMSUJDWFhfTlVNRVJJQyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX251bWVyaWMuaD4KKworI2lmZGVmIF9HTElCQ1hYX1BBUkFMTEVMCisjIGluY2x1ZGUgPHBhcmFsbGVsL251bWVyaWM+CisjZW5kaWYKKworLyoqCisgKiBAZGVmZ3JvdXAgbnVtZXJpY3MgTnVtZXJpY3MKKyAqCisgKiBDb21wb25lbnRzIGZvciBwZXJmb3JtaW5nIG51bWVyaWMgb3BlcmF0aW9ucy4gSW5jbHVkZXMgc3VwcG9ydCBmb3IKKyAqIGZvciBjb21wbGV4IG51bWJlciB0eXBlcywgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBudW1lcmljCisgKiAobi1hdC1hLXRpbWUpIGFycmF5cywgZ2VuZXJhbGl6ZWQgbnVtZXJpYyBhbGdvcml0aG1zLCBhbmQgc3BlY2lhbAorICogbWF0aCBmdW5jdGlvbnMuCisgKi8KKworI2VuZGlmIC8qIF9HTElCQ1hYX05VTUVSSUMgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvb3N0cmVhbSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvb3N0cmVhbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDY2YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9vc3RyZWFtCkBAIC0wLDAgKzEsNjExIEBACisvLyBPdXRwdXQgc3RyZWFtcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9vc3RyZWFtCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNi4yICBPdXRwdXQgc3RyZWFtcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9PU1RSRUFNCisjZGVmaW5lIF9HTElCQ1hYX09TVFJFQU0gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxpb3M+CisjaW5jbHVkZSA8Yml0cy9vc3RyZWFtX2luc2VydC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW0uCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgQHRwYXJhbSBfQ2hhclQgIFR5cGUgb2YgY2hhcmFjdGVyIHN0cmVhbS4KKyAgICogIEB0cGFyYW0gX1RyYWl0cyAgVHJhaXRzIGZvciBjaGFyYWN0ZXIgdHlwZSwgZGVmYXVsdHMgdG8KKyAgICogICAgICAgICAgICAgICAgICAgY2hhcl90cmFpdHM8X0NoYXJUPi4KKyAgICoKKyAgICogIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBvdXRwdXQgc3RyZWFtcy4gIEl0IHByb3ZpZGVzIHRleHQKKyAgICogIGZvcm1hdHRpbmcgb2YgYWxsIGJ1aWx0aW4gdHlwZXMsIGFuZCBjb21tdW5pY2F0ZXMgd2l0aCBhbnkgY2xhc3MKKyAgICogIGRlcml2ZWQgZnJvbSBiYXNpY19zdHJlYW1idWYgdG8gZG8gdGhlIGFjdHVhbCBvdXRwdXQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBiYXNpY19vc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXMgKGluaGVyaXRlZCBmcm9tIGJhc2ljX2lvcyk6CisgICAgICB0eXBlZGVmIF9DaGFyVAkJCSAJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgCQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgCQlvZmZfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RyYWl0cwkJCSAJCXRyYWl0c190eXBlOworCisgICAgICAvLyBOb24tc3RhbmRhcmQgVHlwZXM6CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IAkJX19zdHJlYW1idWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4JCV9faW9zX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgkJX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gPgorICAgICAgCQkJCQkJCV9fbnVtX3B1dF90eXBlOworICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+CSAgICAgIAkJCV9fY3R5cGVfdHlwZTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCYXNlIGNvbnN0cnVjdG9yLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGN0b3IgaXMgYWxtb3N0IG5ldmVyIGNhbGxlZCBieSB0aGUgdXNlciBkaXJlY3RseSwgcmF0aGVyIGZyb20KKyAgICAgICAqICBkZXJpdmVkIGNsYXNzZXMnIGluaXRpYWxpemF0aW9uIGxpc3RzLCB3aGljaCBwYXNzIGEgcG9pbnRlciB0bworICAgICAgICogIHRoZWlyIG93biBzdHJlYW0gYnVmZmVyLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCisgICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBCYXNlIGRlc3RydWN0b3IuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZG9lcyB2ZXJ5IGxpdHRsZSBhcGFydCBmcm9tIHByb3ZpZGluZyBhIHZpcnR1YWwgYmFzZSBkdG9yLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwKKyAgICAgIH5iYXNpY19vc3RyZWFtKCkgeyB9CisKKyAgICAgIC8vLyBTYWZlIHByZWZpeC9zdWZmaXggb3BlcmF0aW9ucy4KKyAgICAgIGNsYXNzIHNlbnRyeTsKKyAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgSW50ZXJmYWNlIGZvciBtYW5pcHVsYXRvcnMuCisgICAgICAgKgorICAgICAgICogIE1hbmlwdWxhdG9ycyBzdWNoIGFzIEBjIHN0ZDo6ZW5kbCBhbmQgQGMgc3RkOjpoZXggdXNlIHRoZXNlCisgICAgICAgKiAgZnVuY3Rpb25zIGluIGNvbnN0cnVjdHMgbGlrZSAic3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbCIuICBGb3IgbW9yZQorICAgICAgICogIGluZm9ybWF0aW9uLCBzZWUgdGhlIGlvbWFuaXAgaGVhZGVyLgorICAgICAgKi8KKyAgICAgIF9fb3N0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA2MC4gV2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj8KKwkvLyBUaGUgaW5zZXJ0ZXJzIGZvciBtYW5pcHVsYXRvcnMgYXJlICpub3QqIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zLgorCXJldHVybiBfX3BmKCp0aGlzKTsKKyAgICAgIH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA2MC4gV2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj8KKwkvLyBUaGUgaW5zZXJ0ZXJzIGZvciBtYW5pcHVsYXRvcnMgYXJlICpub3QqIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zLgorCV9fcGYoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyBEUiA2MC4gV2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj8KKwkvLyBUaGUgaW5zZXJ0ZXJzIGZvciBtYW5pcHVsYXRvcnMgYXJlICpub3QqIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zLgorCV9fcGYoKnRoaXMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIC8vQH0KKworICAgICAgLy9AeworICAgICAgLyoqCisgICAgICAgKiAgQG5hbWUgSW5zZXJ0ZXJzCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgQGMgb3BlcmF0b3I8PCBmdW5jdGlvbnMgKGFrYSA8ZW0+Zm9ybWF0dGVkIG91dHB1dAorICAgICAgICogIGZ1bmN0aW9uczwvZW0+KSBoYXZlIHNvbWUgY29tbW9uIGJlaGF2aW9yLiAgRWFjaCBzdGFydHMgYnkKKyAgICAgICAqICBjb25zdHJ1Y3RpbmcgYSB0ZW1wb3Jhcnkgb2JqZWN0IG9mIHR5cGUgc3RkOjpiYXNpY19vc3RyZWFtOjpzZW50cnkuCisgICAgICAgKiAgVGhpcyBjYW4gaGF2ZSBzZXZlcmFsIGVmZmVjdHMsIGNvbmNsdWRpbmcgd2l0aCB0aGUgc2V0dGluZyBvZiBhCisgICAgICAgKiAgc3RhdHVzIGZsYWc7IHNlZSB0aGUgc2VudHJ5IGRvY3VtZW50YXRpb24gZm9yIG1vcmUuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBzZW50cnkgc3RhdHVzIGlzIGdvb2QsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBnZW5lcmF0ZQorICAgICAgICogIHdoYXRldmVyIGRhdGEgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcgaW5zZXJ0aW9uLCBpb3NfYmFzZTo6YmFkYml0CisgICAgICAgKiAgd2lsbCBiZSB0dXJuZWQgb24gaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlIHdpdGhvdXQgY2F1c2luZyBhbgorICAgICAgICogIGlvc19iYXNlOjpmYWlsdXJlIHRvIGJlIHRocm93bi4gIFRoZSBvcmlnaW5hbCBleGNlcHRpb24gd2lsbCB0aGVuCisgICAgICAgKiAgYmUgcmV0aHJvd24uCisgICAgICAqLworCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSW50ZWdlciBhcml0aG1ldGljIGluc2VydGVycworICAgICAgICogIEBwYXJhbSAgX19uIEEgdmFyaWFibGUgb2YgYnVpbHRpbiBpbnRlZ3JhbCB0eXBlLgorICAgICAgICogIEByZXR1cm4gIEBjICp0aGlzIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIHVzZSB0aGUgc3RyZWFtJ3MgY3VycmVudCBsb2NhbGUgKHNwZWNpZmljYWxseSwgdGhlCisgICAgICAgKiAgQGMgbnVtX2dldCBmYWNldCkgdG8gcGVyZm9ybSBudW1lcmljIGZvcm1hdHRpbmcuCisgICAgICAqLworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fbik7IH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fbik7IH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fbik7IH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbik7CisKKyAgICAgIF9fb3N0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDExNy4gYmFzaWNfb3N0cmVhbSB1c2VzIG5vbmV4aXN0ZW50IG51bV9wdXQgbWVtYmVyIGZ1bmN0aW9ucy4KKwlyZXR1cm4gX01faW5zZXJ0KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbikpOworICAgICAgfQorCisgICAgICBfX29zdHJlYW1fdHlwZSYKKyAgICAgIG9wZXJhdG9yPDwoaW50IF9fbik7CisKKyAgICAgIF9fb3N0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgX19uKQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxMTcuIGJhc2ljX29zdHJlYW0gdXNlcyBub25leGlzdGVudCBudW1fcHV0IG1lbWJlciBmdW5jdGlvbnMuCisJcmV0dXJuIF9NX2luc2VydChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsKKyAgICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgICAgIF9fb3N0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fbik7IH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pCisgICAgICB7IHJldHVybiBfTV9pbnNlcnQoX19uKTsgfQorI2VuZGlmCisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBpbnNlcnRlcnMKKyAgICAgICAqICBAcGFyYW0gIF9fZiBBIHZhcmlhYmxlIG9mIGJ1aWx0aW4gZmxvYXRpbmcgcG9pbnQgdHlwZS4KKyAgICAgICAqICBAcmV0dXJuICBAYyAqdGhpcyBpZiBzdWNjZXNzZnVsCisgICAgICAgKgorICAgICAgICogIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdGhlIHN0cmVhbSdzIGN1cnJlbnQgbG9jYWxlIChzcGVjaWZpY2FsbHksIHRoZQorICAgICAgICogIEBjIG51bV9nZXQgZmFjZXQpIHRvIHBlcmZvcm0gbnVtZXJpYyBmb3JtYXR0aW5nLgorICAgICAgKi8KKyAgICAgIF9fb3N0cmVhbV90eXBlJgorICAgICAgb3BlcmF0b3I8PChkb3VibGUgX19mKQorICAgICAgeyByZXR1cm4gX01faW5zZXJ0KF9fZik7IH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KGZsb2F0IF9fZikKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTE3LiBiYXNpY19vc3RyZWFtIHVzZXMgbm9uZXhpc3RlbnQgbnVtX3B1dCBtZW1iZXIgZnVuY3Rpb25zLgorCXJldHVybiBfTV9pbnNlcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsKKyAgICAgIH0KKworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZikKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydChfX2YpOyB9CisgICAgICAvL0B9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUG9pbnRlciBhcml0aG1ldGljIGluc2VydGVycworICAgICAgICogIEBwYXJhbSAgX19wIEEgdmFyaWFibGUgb2YgcG9pbnRlciB0eXBlLgorICAgICAgICogIEByZXR1cm4gIEBjICp0aGlzIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIHVzZSB0aGUgc3RyZWFtJ3MgY3VycmVudCBsb2NhbGUgKHNwZWNpZmljYWxseSwgdGhlCisgICAgICAgKiAgQGMgbnVtX2dldCBmYWNldCkgdG8gcGVyZm9ybSBudW1lcmljIGZvcm1hdHRpbmcuCisgICAgICAqLworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCkKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydChfX3ApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRXh0cmFjdGluZyBmcm9tIGFub3RoZXIgc3RyZWFtYnVmLgorICAgICAgICogIEBwYXJhbSAgX19zYiAgQSBwb2ludGVyIHRvIGEgc3RyZWFtYnVmCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIG9uZSBvZiB0aGUgYmFzaWMgYXJpdGhtZXRpYyBleHRyYWN0b3JzLAorICAgICAgICogIGluIHRoYXQgaXQgYWxzbyBjb25zdHJ1Y3RzIGEgc2VudHJ5IG9iamVjdCBhbmQgaGFzIHRoZSBzYW1lIGVycm9yCisgICAgICAgKiAgaGFuZGxpbmcgYmVoYXZpb3IuCisgICAgICAgKgorICAgICAgICogIElmIEBwIF9fc2IgaXMgTlVMTCwgdGhlIHN0cmVhbSB3aWxsIHNldCBmYWlsYml0IGluIGl0cyBlcnJvciBzdGF0ZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2hhcmFjdGVycyBhcmUgZXh0cmFjdGVkIGZyb20gQHAgX19zYiBhbmQgaW5zZXJ0ZWQgaW50byBAYyAqdGhpcworICAgICAgICogIHVudGlsIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9jY3VyczoKKyAgICAgICAqCisgICAgICAgKiAgLSB0aGUgaW5wdXQgc3RyZWFtIHJlYWNoZXMgZW5kLW9mLWZpbGUsCisgICAgICAgKiAgLSBpbnNlcnRpb24gaW50byB0aGUgb3V0cHV0IHNlcXVlbmNlIGZhaWxzIChpbiB0aGlzIGNhc2UsIHRoZQorICAgICAgICogICAgY2hhcmFjdGVyIHRoYXQgd291bGQgaGF2ZSBiZWVuIGluc2VydGVkIGlzIG5vdCBleHRyYWN0ZWQpLCBvcgorICAgICAgICogIC0gYW4gZXhjZXB0aW9uIG9jY3VycyB3aGlsZSBnZXR0aW5nIGEgY2hhcmFjdGVyIGZyb20gQHAgX19zYiwgd2hpY2gKKyAgICAgICAqICAgIHNldHMgZmFpbGJpdCBpbiB0aGUgZXJyb3Igc3RhdGUKKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIGZ1bmN0aW9uIGluc2VydHMgbm8gY2hhcmFjdGVycywgZmFpbGJpdCBpcyBzZXQuCisgICAgICAqLworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOworICAgICAgLy9AfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAbmFtZSBVbmZvcm1hdHRlZCBPdXRwdXQgRnVuY3Rpb25zCisgICAgICAgKgorICAgICAgICogIEFsbCB0aGUgdW5mb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucyBoYXZlIHNvbWUgY29tbW9uIGJlaGF2aW9yLgorICAgICAgICogIEVhY2ggc3RhcnRzIGJ5IGNvbnN0cnVjdGluZyBhIHRlbXBvcmFyeSBvYmplY3Qgb2YgdHlwZQorICAgICAgICogIHN0ZDo6YmFzaWNfb3N0cmVhbTo6c2VudHJ5LiAgVGhpcyBoYXMgc2V2ZXJhbCBlZmZlY3RzLCBjb25jbHVkaW5nCisgICAgICAgKiAgd2l0aCB0aGUgc2V0dGluZyBvZiBhIHN0YXR1cyBmbGFnOyBzZWUgdGhlIHNlbnRyeSBkb2N1bWVudGF0aW9uCisgICAgICAgKiAgZm9yIG1vcmUuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBzZW50cnkgc3RhdHVzIGlzIGdvb2QsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBnZW5lcmF0ZQorICAgICAgICogIHdoYXRldmVyIGRhdGEgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcgaW5zZXJ0aW9uLCBpb3NfYmFzZTo6YmFkYml0CisgICAgICAgKiAgd2lsbCBiZSB0dXJuZWQgb24gaW4gdGhlIHN0cmVhbSdzIGVycm9yIHN0YXRlLiAgSWYgYmFkYml0IGlzIG9uIGluCisgICAgICAgKiAgdGhlIHN0cmVhbSdzIGV4Y2VwdGlvbnMgbWFzaywgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHJldGhyb3duCisgICAgICAgKiAgd2l0aG91dCBjb21wbGV0aW5nIGl0cyBhY3Rpb25zLgorICAgICAgKi8KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTaW1wbGUgaW5zZXJ0aW9uLgorICAgICAgICogIEBwYXJhbSAgX19jICBUaGUgY2hhcmFjdGVyIHRvIGluc2VydC4KKyAgICAgICAqICBAcmV0dXJuICAqdGhpcworICAgICAgICoKKyAgICAgICAqICBUcmllcyB0byBpbnNlcnQgQHAgX19jLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgb3ZlcmxvYWRlZCBvbiBzaWduZWQgY2hhciBhbmQKKyAgICAgICAqICAgICAgICAgdW5zaWduZWQgY2hhci4KKyAgICAgICovCisgICAgICBfX29zdHJlYW1fdHlwZSYKKyAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb3JlIHdyaXRlIGZ1bmN0aW9uYWxpdHksIHdpdGhvdXQgc2VudHJ5LgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgYXJyYXkgdG8gaW5zZXJ0LgorICAgICAgICogIEBwYXJhbSAgX19uICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGluc2VydC4KKyAgICAgICovCisgICAgICB2b2lkCisgICAgICBfTV93cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgICB7CisJY29uc3Qgc3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsKKwlpZiAoX19wdXQgIT0gX19uKQorCSAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhcmFjdGVyIHN0cmluZyBpbnNlcnRpb24uCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBhcnJheSB0byBpbnNlcnQuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIENoYXJhY3RlcnMgYXJlIGNvcGllZCBmcm9tIEBwIF9fcyBhbmQgaW5zZXJ0ZWQgaW50byB0aGUgc3RyZWFtIHVudGlsCisgICAgICAgKiAgb25lIG9mIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKKyAgICAgICAqCisgICAgICAgKiAgLSBAcCBfX24gY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQKKyAgICAgICAqICAtIGluc2VydGluZyBpbnRvIHRoZSBvdXRwdXQgc2VxdWVuY2UgZmFpbHMgKGluIHRoaXMgY2FzZSwgYmFkYml0CisgICAgICAgKiAgICB3aWxsIGJlIHNldCBpbiB0aGUgc3RyZWFtJ3MgZXJyb3Igc3RhdGUpCisgICAgICAgKgorICAgICAgICogIEBub3RlICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBvdmVybG9hZGVkIG9uIHNpZ25lZCBjaGFyIGFuZAorICAgICAgICogICAgICAgICB1bnNpZ25lZCBjaGFyLgorICAgICAgKi8KKyAgICAgIF9fb3N0cmVhbV90eXBlJgorICAgICAgd3JpdGUoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTeW5jaHJvbml6aW5nIHRoZSBzdHJlYW0gYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gICp0aGlzCisgICAgICAgKgorICAgICAgICogIElmIEBjIHJkYnVmKCkgaXMgYSBudWxsIHBvaW50ZXIsIGNoYW5nZXMgbm90aGluZy4KKyAgICAgICAqCisgICAgICAgKiAgT3RoZXJ3aXNlLCBjYWxscyBAYyByZGJ1ZigpLT5wdWJzeW5jKCksIGFuZCBpZiB0aGF0IHJldHVybnMgLTEsCisgICAgICAgKiAgc2V0cyBiYWRiaXQuCisgICAgICAqLworICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBmbHVzaCgpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEdldHRpbmcgdGhlIGN1cnJlbnQgd3JpdGUgcG9zaXRpb24uCisgICAgICAgKiAgQHJldHVybiAgQSBmaWxlIHBvc2l0aW9uIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgZmFpbCgpIGlzIG5vdCBmYWxzZSwgcmV0dXJucyBAYyBwb3NfdHlwZSgtMSkgdG8gaW5kaWNhdGUKKyAgICAgICAqICBmYWlsdXJlLiAgT3RoZXJ3aXNlIHJldHVybnMgQGMgcmRidWYoKS0+cHVic2Vla29mZigwLGN1cixvdXQpLgorICAgICAgKi8KKyAgICAgIHBvc190eXBlCisgICAgICB0ZWxscCgpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENoYW5naW5nIHRoZSBjdXJyZW50IHdyaXRlIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEEgZmlsZSBwb3NpdGlvbiBvYmplY3QuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgZmFpbCgpIGlzIG5vdCB0cnVlLCBjYWxscyBAYyByZGJ1ZigpLT5wdWJzZWVrcG9zKHBvcykuICBJZgorICAgICAgICogIHRoYXQgZnVuY3Rpb24gZmFpbHMsIHNldHMgZmFpbGJpdC4KKyAgICAgICovCisgICAgICBfX29zdHJlYW1fdHlwZSYKKyAgICAgIHNlZWtwKHBvc190eXBlKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDaGFuZ2luZyB0aGUgY3VycmVudCB3cml0ZSBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIF9fb2ZmICBBIGZpbGUgb2Zmc2V0IG9iamVjdC4KKyAgICAgICAqICBAcGFyYW0gIF9fZGlyICBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRvIHNlZWsuCisgICAgICAgKiAgQHJldHVybiAgKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgSWYgQGMgZmFpbCgpIGlzIG5vdCB0cnVlLCBjYWxscyBAYyByZGJ1ZigpLT5wdWJzZWVrb2ZmKG9mZixkaXIpLgorICAgICAgICogIElmIHRoYXQgZnVuY3Rpb24gZmFpbHMsIHNldHMgZmFpbGJpdC4KKyAgICAgICovCisgICAgICAgX19vc3RyZWFtX3R5cGUmCisgICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgYmFzaWNfb3N0cmVhbSgpCisgICAgICB7IHRoaXMtPmluaXQoMCk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KKwlfX29zdHJlYW1fdHlwZSYKKwlfTV9pbnNlcnQoX1ZhbHVlVCBfX3YpOworICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFBlcmZvcm1zIHNldHVwIHdvcmsgZm9yIG91dHB1dCBzdHJlYW1zLgorICAgKgorICAgKiAgT2JqZWN0cyBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbGwgb2YgdGhlIHN0YW5kYXJkCisgICAqICBpbnNlcnRlcnMgYXJlIHJ1bi4gIEl0IGlzIHJlc3BvbnNpYmxlIGZvciA8ZW0+ZXhjZXB0aW9uLXNhZmUgcHJlZml4IGFuZAorICAgKiAgc3VmZml4IG9wZXJhdGlvbnM8L2VtPi4KKyAgKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQorICAgIHsKKyAgICAgIC8vIERhdGEgTWVtYmVycy4KKyAgICAgIGJvb2wgCQkJCV9NX29rOworICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAJX01fb3M7CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSBjb25zdHJ1Y3RvciBwZXJmb3JtcyBwcmVwYXJhdG9yeSB3b3JrLgorICAgICAgICogIEBwYXJhbSAgX19vcyAgVGhlIG91dHB1dCBzdHJlYW0gdG8gZ3VhcmQuCisgICAgICAgKgorICAgICAgICogIElmIHRoZSBzdHJlYW0gc3RhdGUgaXMgZ29vZCAoQGEgX19vcy5nb29kKCkgaXMgdHJ1ZSksIHRoZW4gaWYgdGhlCisgICAgICAgKiAgc3RyZWFtIGlzIHRpZWQgdG8gYW5vdGhlciBvdXRwdXQgc3RyZWFtLCBAYyBpcy50aWUoKS0+Zmx1c2goKQorICAgICAgICogIGlzIGNhbGxlZCB0byBzeW5jaHJvbml6ZSB0aGUgb3V0cHV0IHNlcXVlbmNlcy4KKyAgICAgICAqCisgICAgICAgKiAgSWYgdGhlIHN0cmVhbSBzdGF0ZSBpcyBzdGlsbCBnb29kLCB0aGVuIHRoZSBzZW50cnkgc3RhdGUgYmVjb21lcworICAgICAgICogIHRydWUgKEBhIG9rYXkpLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBQb3NzaWJseSBmbHVzaGVzIHRoZSBzdHJlYW0uCisgICAgICAgKgorICAgICAgICogIElmIEBjIGlvc19iYXNlOjp1bml0YnVmIGlzIHNldCBpbiBAYyBvcy5mbGFncygpLCBhbmQKKyAgICAgICAqICBAYyBzdGQ6OnVuY2F1Z2h0X2V4Y2VwdGlvbigpIGlzIHRydWUsIHRoZSBzZW50cnkgZGVzdHJ1Y3RvciBjYWxscworICAgICAgICogIEBjIGZsdXNoKCkgb24gdGhlIG91dHB1dCBzdHJlYW0uCisgICAgICAqLworICAgICAgfnNlbnRyeSgpCisgICAgICB7CisJLy8gWFhYIE1UCisJaWYgKGJvb2woX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmKSAmJiAhdW5jYXVnaHRfZXhjZXB0aW9uKCkpCisJICB7CisJICAgIC8vIENhbid0IGNhbGwgZmx1c2ggZGlyZWN0bHkgb3IgZWxzZSB3aWxsIGdldCBpbnRvIHJlY3Vyc2l2ZSBsb2NrLgorCSAgICBpZiAoX01fb3MucmRidWYoKSAmJiBfTV9vcy5yZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpCisJICAgICAgX01fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisJICB9CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUXVpY2sgc3RhdHVzIGNoZWNraW5nLgorICAgICAgICogIEByZXR1cm4gIFRoZSBzZW50cnkgc3RhdGUuCisgICAgICAgKgorICAgICAgICogIEZvciBlYXNlIG9mIHVzZSwgc2VudHJpZXMgbWF5IGJlIGNvbnZlcnRlZCB0byBib29sZWFucy4gIFRoZQorICAgICAgICogIHJldHVybiB2YWx1ZSBpcyB0aGF0IG9mIHRoZSBzZW50cnkgc3RhdGUgKHRydWUgPT0gb2theSkuCisgICAgICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGV4cGxpY2l0CisjZW5kaWYKKyAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fb2s7IH0KKyAgICB9OworCisgIC8vQHsKKyAgLyoqCisgICAqICBAYnJpZWYgIENoYXJhY3RlciBpbnNlcnRlcnMKKyAgICogIEBwYXJhbSAgX19vdXQgIEFuIG91dHB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gIF9fYyAgQSBjaGFyYWN0ZXIuCisgICAqICBAcmV0dXJuICBvdXQKKyAgICoKKyAgICogIEJlaGF2ZXMgbGlrZSBvbmUgb2YgdGhlIGZvcm1hdHRlZCBhcml0aG1ldGljIGluc2VydGVycyBkZXNjcmliZWQgaW4KKyAgICogIHN0ZDo6YmFzaWNfb3N0cmVhbS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3Qgd2l0aCBnb29kCisgICAqICBzdGF0dXMsIHRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBhIHNpbmdsZSBjaGFyYWN0ZXIgYW5kIGFueSByZXF1aXJlZAorICAgKiAgcGFkZGluZyAoYXMgZGV0ZXJtaW5lZCBieSBbMjIuMi4yLjIuMl0pLiAgQGMgX19vdXQud2lkdGgoMCkgaXMgdGhlbgorICAgKiAgY2FsbGVkLgorICAgKgorICAgKiAgSWYgQHAgX19jIGlzIG9mIHR5cGUgQGMgY2hhciBhbmQgdGhlIGNoYXJhY3RlciB0eXBlIG9mIHRoZSBzdHJlYW0gaXMgbm90CisgICAqICBAYyBjaGFyLCB0aGUgY2hhcmFjdGVyIGlzIHdpZGVuZWQgYmVmb3JlIGluc2VydGlvbi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQorICAgIHsgcmV0dXJuIF9fb3N0cmVhbV9pbnNlcnQoX19vdXQsICZfX2MsIDEpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKKyAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KKworICAvLyBTcGVjaWFsaXphdGlvbgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKKyAgICB7IHJldHVybiBfX29zdHJlYW1faW5zZXJ0KF9fb3V0LCAmX19jLCAxKTsgfQorCisgIC8vIFNpZ25lZCBhbmQgdW5zaWduZWQKKyAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBfX2MpCisgICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykKKyAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KKyAgLy9AfQorCisgIC8vQHsKKyAgLyoqCisgICAqICBAYnJpZWYgIFN0cmluZyBpbnNlcnRlcnMKKyAgICogIEBwYXJhbSAgX19vdXQgIEFuIG91dHB1dCBzdHJlYW0uCisgICAqICBAcGFyYW0gIF9fcyAgQSBjaGFyYWN0ZXIgc3RyaW5nLgorICAgKiAgQHJldHVybiAgb3V0CisgICAqICBAcHJlICBAcCBfX3MgbXVzdCBiZSBhIG5vbi1OVUxMIHBvaW50ZXIKKyAgICoKKyAgICogIEJlaGF2ZXMgbGlrZSBvbmUgb2YgdGhlIGZvcm1hdHRlZCBhcml0aG1ldGljIGluc2VydGVycyBkZXNjcmliZWQgaW4KKyAgICogIHN0ZDo6YmFzaWNfb3N0cmVhbS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3Qgd2l0aCBnb29kCisgICAqICBzdGF0dXMsIHRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBAYyB0cmFpdHM6Omxlbmd0aChfX3MpIGNoYXJhY3RlcnMgc3RhcnRpbmcKKyAgICogIGF0IEBwIF9fcywgd2lkZW5lZCBpZiBuZWNlc3NhcnksIGZvbGxvd2VkIGJ5IGFueSByZXF1aXJlZCBwYWRkaW5nIChhcworICAgKiAgZGV0ZXJtaW5lZCBieSBbMjIuMi4yLjIuMl0pLiAgQGMgX19vdXQud2lkdGgoMCkgaXMgdGhlbiBjYWxsZWQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpCisgICAgeworICAgICAgaWYgKCFfX3MpCisJX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CisgICAgICBlbHNlCisJX19vc3RyZWFtX2luc2VydChfX291dCwgX19zLAorCQkJIHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKSk7CisgICAgICByZXR1cm4gX19vdXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKKworICAvLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9ucworICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKKyAgICB7CisgICAgICBpZiAoIV9fcykKKwlfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKKyAgICAgIGVsc2UKKwlfX29zdHJlYW1faW5zZXJ0KF9fb3V0LCBfX3MsCisJCQkgc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpKTsKKyAgICAgIHJldHVybiBfX291dDsKKyAgICB9CisKKyAgLy8gU2lnbmVkIGFuZCB1bnNpZ25lZAorICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCisgICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQorICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQorICAvL0B9CisKKyAgLy8gU3RhbmRhcmQgYmFzaWNfb3N0cmVhbSBtYW5pcHVsYXRvcnMKKworICAvKioKKyAgICogIEBicmllZiAgV3JpdGUgYSBuZXdsaW5lIGFuZCBmbHVzaCB0aGUgc3RyZWFtLgorICAgKgorICAgKiAgVGhpcyBtYW5pcHVsYXRvciBpcyBvZnRlbiBtaXN0YWtlbmx5IHVzZWQgd2hlbiBhIHNpbXBsZSBuZXdsaW5lIGlzCisgICAqICBkZXNpcmVkLCBsZWFkaW5nIHRvIHBvb3IgYnVmZmVyaW5nIHBlcmZvcm1hbmNlLiAgU2VlCisgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNXMwMi5odG1sCisgICAqICBmb3IgbW9yZSBvbiB0aGlzIHN1YmplY3QuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGVuZGwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQorICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBXcml0ZSBhIG51bGwgY2hhcmFjdGVyIGludG8gdGhlIG91dHB1dCBzZXF1ZW5jZS4KKyAgICoKKyAgICogIDxlbT5OdWxsIGNoYXJhY3RlcjwvZW0+IGlzIEBjIENoYXJUKCkgYnkgZGVmaW5pdGlvbi4gIEZvciBDaGFyVAorICAgKiAgb2YgQGMgY2hhciwgdGhpcyBjb3JyZWN0bHkgd3JpdGVzIHRoZSBBU0NJSSBAYyBOVUwgY2hhcmFjdGVyCisgICAqICBzdHJpbmcgdGVybWluYXRvci4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCisgICAgeyByZXR1cm4gX19vcy5wdXQoX0NoYXJUKCkpOyB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgIEZsdXNoZXMgdGhlIG91dHB1dCBzdHJlYW0uCisgICAqCisgICAqICBUaGlzIG1hbmlwdWxhdG9yIHNpbXBseSBjYWxscyB0aGUgc3RyZWFtJ3MgQGMgZmx1c2goKSBtZW1iZXIgZnVuY3Rpb24uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIGZsdXNoKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKKyAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgLyoqCisgICAqICBAYnJpZWYgIEdlbmVyaWMgaW5zZXJ0ZXIgZm9yIHJ2YWx1ZSBzdHJlYW0KKyAgICogIEBwYXJhbSAgX19vcyAgQW4gaW5wdXQgc3RyZWFtLgorICAgKiAgQHBhcmFtICBfX3ggIEEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgYmVpbmcgaW5zZXJ0ZWQuCisgICAqICBAcmV0dXJuICBvcworICAgKgorICAgKiAgVGhpcyBpcyBqdXN0IGEgZm9yd2FyZGluZyBmdW5jdGlvbiB0byBhbGxvdyBpbnNlcnRpb24gdG8KKyAgICogIHJ2YWx1ZSBzdHJlYW1zIHNpbmNlIHRoZXkgd29uJ3QgYmluZCB0byB0aGUgaW5zZXJ0ZXIgZnVuY3Rpb25zCisgICAqICB0aGF0IHRha2UgYW4gbHZhbHVlIHJlZmVyZW5jZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYmIF9fb3MsIGNvbnN0IF9UcCYgX194KQorICAgIHsgcmV0dXJuIChfX29zIDw8IF9feCk7IH0KKyNlbmRpZiAvLyBDKysxMQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjaW5jbHVkZSA8Yml0cy9vc3RyZWFtLnRjYz4KKworI2VuZGlmCS8qIF9HTElCQ1hYX09TVFJFQU0gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYWxnby5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9hbGdvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjMjRlNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYWxnby5oCkBAIC0wLDAgKzEsMjM2MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL2FsZ28uaAorICogIEBicmllZiBQYXJhbGxlbCBTVEwgZnVuY3Rpb24gY2FsbHMgY29ycmVzcG9uZGluZyB0byB0aGUgc3RsX2FsZ28uaCBoZWFkZXIuCisgKgorICogIFRoZSBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIG1haW5seSBkbyBjYXNlIHN3aXRjaGVzIGFuZAorICogIGNhbGwgdGhlIGFjdHVhbCBwYXJhbGxlbGl6ZWQgdmVyc2lvbnMgaW4gb3RoZXIgZmlsZXMuCisgKiAgSW5saW5pbmcgcG9saWN5OiBGdW5jdGlvbnMgdGhhdCBiYXNpY2FsbHkgb25seSBjb250YWluIG9uZSBmdW5jdGlvbiBjYWxsLAorICogIGFyZSBkZWNsYXJlZCBpbmxpbmUuCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBKb2hhbm5lcyBTaW5nbGVyIGFuZCBGZWxpeCBQdXR6ZS4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9BTEdPX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfQUxHT19IIDEKKworI2luY2x1ZGUgPHBhcmFsbGVsL2FsZ29yaXRobWZ3ZC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnby5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL2l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvYmFzZS5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3NvcnQuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC93b3Jrc3RlYWxpbmcuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9wYXJfbG9vcC5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL29tcF9sb29wLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvb21wX2xvb3Bfc3RhdGljLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvZm9yX2VhY2hfc2VsZWN0b3JzLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvZm9yX2VhY2guaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9maW5kLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvZmluZF9zZWxlY3RvcnMuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9zZWFyY2guaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9yYW5kb21fc2h1ZmZsZS5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3BhcnRpdGlvbi5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL21lcmdlLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvdW5pcXVlX2NvcHkuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9zZXRfb3BlcmF0aW9ucy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX3BhcmFsbGVsCit7CisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CisgICAgaW5saW5lIF9GdW5jdGlvbgorICAgIGZvcl9lYWNoKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIF9GdW5jdGlvbiBfX2YsIAorICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6Zm9yX2VhY2goX19iZWdpbiwgX19lbmQsIF9fZik7IH0KKworCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24sIHR5cGVuYW1lIF9JdGVyYXRvclRhZz4KKyAgICBpbmxpbmUgX0Z1bmN0aW9uCisgICAgX19mb3JfZWFjaF9zd2l0Y2goX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgX0Z1bmN0aW9uIF9fZiwgCisgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZykKKyAgICB7IHJldHVybiBmb3JfZWFjaChfX2JlZ2luLCBfX2VuZCwgX19mLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7IH0KKworICAvLyBQYXJhbGxlbCBhbGdvcml0aG0gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9GdW5jdGlvbj4KKyAgICBfRnVuY3Rpb24KKyAgICBfX2Zvcl9lYWNoX3N3aXRjaChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsIAorICAgICAgICAgICAgICAgICAgICBfRnVuY3Rpb24gX19mLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgCisgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbV90YWcKKyAgICAgICAgICAgICAgICAgICAgPSBfX2dudV9wYXJhbGxlbDo6cGFyYWxsZWxfYmFsYW5jZWQpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQgLSBfX2JlZ2luKQorICAgICAgICAgICAgPj0gX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkuZm9yX2VhY2hfbWluaW1hbF9uCisgICAgICAgICAgICAmJiBfX2dudV9wYXJhbGxlbDo6X19pc19wYXJhbGxlbChfX3BhcmFsbGVsaXNtX3RhZykpKQorICAgICAgICB7CisgICAgICAgICAgYm9vbCBfX2R1bW15OworICAgIF9fZ251X3BhcmFsbGVsOjpfX2Zvcl9lYWNoX3NlbGVjdG9yPF9SQUl0ZXI+IF9fZnVuY3Rpb25hbGl0eTsKKworICAgICAgICAgIHJldHVybiBfX2dudV9wYXJhbGxlbDo6CisgICAgICAgICAgICBfX2Zvcl9lYWNoX3RlbXBsYXRlX3JhbmRvbV9hY2Nlc3MoCisgICAgICAgICAgICAgIF9fYmVnaW4sIF9fZW5kLCBfX2YsIF9fZnVuY3Rpb25hbGl0eSwKKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9EdW1teVJlZHVjdCgpLCB0cnVlLCBfX2R1bW15LCAtMSwKKyAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBmb3JfZWFjaChfX2JlZ2luLCBfX2VuZCwgX19mLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfRnVuY3Rpb24+CisgICAgaW5saW5lIF9GdW5jdGlvbgorICAgIGZvcl9lYWNoKF9JdGVyYXRvciBfX2JlZ2luLCBfSXRlcmF0b3IgX19lbmQsIF9GdW5jdGlvbiBfX2YsIAorICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbV90YWcpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9JdGVyYXRvclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX2Zvcl9lYWNoX3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX19mLCBfSXRlcmF0b3JDYXRlZ29yeSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9GdW5jdGlvbj4KKyAgICBpbmxpbmUgX0Z1bmN0aW9uCisgICAgZm9yX2VhY2goX0l0ZXJhdG9yIF9fYmVnaW4sIF9JdGVyYXRvciBfX2VuZCwgX0Z1bmN0aW9uIF9fZikgCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9JdGVyYXRvclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX2Zvcl9lYWNoX3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX19mLCBfSXRlcmF0b3JDYXRlZ29yeSgpKTsKKyAgICB9CisKKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfSUl0ZXIKKyAgICBmaW5kKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIGNvbnN0IF9UcCYgX192YWwsIAorICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpmaW5kKF9fYmVnaW4sIF9fZW5kLCBfX3ZhbCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSXRlcmF0b3JUYWc+CisgICAgaW5saW5lIF9JSXRlcgorICAgIF9fZmluZF9zd2l0Y2goX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgY29uc3QgX1RwJiBfX3ZhbCwKKyAgICAgICAgICAgICAgICBfSXRlcmF0b3JUYWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OmZpbmQoX19iZWdpbiwgX19lbmQsIF9fdmFsKTsgfQorCisgIC8vIFBhcmFsbGVsIGZpbmQgZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfUkFJdGVyCisgICAgX19maW5kX3N3aXRjaChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04odHJ1ZSkpCisgICAgICAgIHsKKwkgIHN0ZDo6YmluZGVyMm5kPF9fZ251X3BhcmFsbGVsOjpfRXF1YWxUbzxfVmFsdWVUeXBlLCBjb25zdCBfVHAmPiA+CisgICAgICAgICAgICBfX2NvbXAoX19nbnVfcGFyYWxsZWw6Ol9FcXVhbFRvPF9WYWx1ZVR5cGUsIGNvbnN0IF9UcCY+KCksIF9fdmFsKTsKKyAgICAgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6Ol9fZmluZF90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICBfX2JlZ2luLCBfX2VuZCwgX19iZWdpbiwgX19jb21wLAorICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX2ZpbmRfaWZfc2VsZWN0b3IoKSkuZmlyc3Q7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpmaW5kKF9fYmVnaW4sIF9fZW5kLCBfX3ZhbCk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9JSXRlcgorICAgIGZpbmQoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0l0ZXJhdG9yVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3JUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgcmV0dXJuIF9fZmluZF9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9fdmFsLCBfSXRlcmF0b3JDYXRlZ29yeSgpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIF9JSXRlcgorICAgIGZpbmRfaWYoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgX1ByZWRpY2F0ZSBfX3ByZWQsIAorICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpmaW5kX2lmKF9fYmVnaW4sIF9fZW5kLCBfX3ByZWQpOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9JdGVyYXRvclRhZz4KKyAgICBpbmxpbmUgX0lJdGVyCisgICAgX19maW5kX2lmX3N3aXRjaChfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfUHJlZGljYXRlIF9fcHJlZCwgCisgICAgICAgICAgICAgICAgICAgX0l0ZXJhdG9yVGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpmaW5kX2lmKF9fYmVnaW4sIF9fZW5kLCBfX3ByZWQpOyB9CisKKyAgLy8gUGFyYWxsZWwgZmluZF9pZiBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfUkFJdGVyCisgICAgX19maW5kX2lmX3N3aXRjaChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsIAorICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKHRydWUpKQorICAgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6Ol9fZmluZF90ZW1wbGF0ZShfX2JlZ2luLCBfX2VuZCwgX19iZWdpbiwgX19wcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19maW5kX2lmX3NlbGVjdG9yKCkpLmZpcnN0OworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6OmZpbmRfaWYoX19iZWdpbiwgX19lbmQsIF9fcHJlZCk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfSUl0ZXIKKyAgICBmaW5kX2lmKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyPiBfSXRlcmF0b3JUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICByZXR1cm4gX19maW5kX2lmX3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX19wcmVkLCBfSXRlcmF0b3JDYXRlZ29yeSgpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9GSXRlcmF0b3I+CisgICAgaW5saW5lIF9JSXRlcgorICAgIGZpbmRfZmlyc3Rfb2YoX0lJdGVyIF9fYmVnaW4xLCBfSUl0ZXIgX19lbmQxLCAKKyAgICAgICAgICAgICAgICAgIF9GSXRlcmF0b3IgX19iZWdpbjIsIF9GSXRlcmF0b3IgX19lbmQyLCAKKyAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6ZmluZF9maXJzdF9vZihfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyKTsKKyAgICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX0ZJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0lJdGVyCisgICAgZmluZF9maXJzdF9vZihfSUl0ZXIgX19iZWdpbjEsIF9JSXRlciBfX2VuZDEsCisgICAgICAgICAgICAgICAgICBfRkl0ZXJhdG9yIF9fYmVnaW4yLCBfRkl0ZXJhdG9yIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpmaW5kX2ZpcnN0X29mKAorICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fY29tcCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciB0eXBlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX0ZJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMSwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMj4KKyAgICBpbmxpbmUgX0lJdGVyCisgICAgX19maW5kX2ZpcnN0X29mX3N3aXRjaChfSUl0ZXIgX19iZWdpbjEsIF9JSXRlciBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgX0ZJdGVyYXRvciBfX2JlZ2luMiwgX0ZJdGVyYXRvciBfX2VuZDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZzEsIF9JdGVyYXRvclRhZzIpCisgICAgeyByZXR1cm4gZmluZF9maXJzdF9vZihfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0ZJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZSwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnPgorICAgIGlubGluZSBfUkFJdGVyCisgICAgX19maW5kX2ZpcnN0X29mX3N3aXRjaChfUkFJdGVyIF9fYmVnaW4xLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXIgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9GSXRlcmF0b3IgX19iZWdpbjIsIF9GSXRlcmF0b3IgX19lbmQyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZykKKyAgICB7CisgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6OgorICAgICAgICBfX2ZpbmRfdGVtcGxhdGUoX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjEsIF9fY29tcCwKKyAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X19maW5kX2ZpcnN0X29mX3NlbGVjdG9yCisgICAgICAgICAgICAgICAgICAgICAgPF9GSXRlcmF0b3I+KF9fYmVnaW4yLCBfX2VuZDIpKS5maXJzdDsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgdHlwZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9GSXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGUsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzEsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvclRhZzI+CisgICAgaW5saW5lIF9JSXRlcgorICAgIF9fZmluZF9maXJzdF9vZl9zd2l0Y2goX0lJdGVyIF9fYmVnaW4xLCBfSUl0ZXIgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9GSXRlcmF0b3IgX19iZWdpbjIsIF9GSXRlcmF0b3IgX19lbmQyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCwgX0l0ZXJhdG9yVGFnMSwgX0l0ZXJhdG9yVGFnMikKKyAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fY29tcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7IH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX0ZJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0lJdGVyCisgICAgZmluZF9maXJzdF9vZihfSUl0ZXIgX19iZWdpbjEsIF9JSXRlciBfX2VuZDEsCisgICAgICAgICAgICAgICAgICBfRkl0ZXJhdG9yIF9fYmVnaW4yLCBfRkl0ZXJhdG9yIF9fZW5kMiwgCisgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0lJdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPiBfRkl0ZXJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0lJdGVyYXRvckNhdGVnb3J5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRkl0ZXJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9GSXRlcmF0b3JDYXRlZ29yeTsKKworICAgICAgcmV0dXJuIF9fZmluZF9maXJzdF9vZl9zd2l0Y2goX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19jb21wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JSXRlcmF0b3JDYXRlZ29yeSgpLCBfRkl0ZXJhdG9yQ2F0ZWdvcnkoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRkl0ZXJhdG9yPgorICAgIGlubGluZSBfSUl0ZXIKKyAgICBmaW5kX2ZpcnN0X29mKF9JSXRlciBfX2JlZ2luMSwgX0lJdGVyIF9fZW5kMSwgCisgICAgICAgICAgICAgICAgICBfRkl0ZXJhdG9yIF9fYmVnaW4yLCBfRkl0ZXJhdG9yIF9fZW5kMikKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0lJdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPiBfRkl0ZXJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czo6dmFsdWVfdHlwZSBfSVZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0ZJdGVyVHJhaXRzOjp2YWx1ZV90eXBlIF9GVmFsdWVUeXBlOworCisgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6OmZpbmRfZmlyc3Rfb2YoX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X0VxdWFsVG88X0lWYWx1ZVR5cGUsIF9GVmFsdWVUeXBlPigpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgdW5pcXVlX2NvcHkoX0lJdGVyIF9fYmVnaW4xLCBfSUl0ZXIgX19lbmQxLCBfT3V0cHV0SXRlcmF0b3IgX19vdXQsCisgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjp1bmlxdWVfY29weShfX2JlZ2luMSwgX19lbmQxLCBfX291dCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICB1bmlxdWVfY29weShfSUl0ZXIgX19iZWdpbjEsIF9JSXRlciBfX2VuZDEsIF9PdXRwdXRJdGVyYXRvciBfX291dCwKKyAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjp1bmlxdWVfY29weShfX2JlZ2luMSwgX19lbmQxLCBfX291dCwgX19wcmVkKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzEsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzI+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fdW5pcXVlX2NvcHlfc3dpdGNoKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19sYXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0LCBfUHJlZGljYXRlIF9fcHJlZCwgCisgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZzEsIF9JdGVyYXRvclRhZzIpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnVuaXF1ZV9jb3B5KF9fYmVnaW4sIF9fbGFzdCwgX19vdXQsIF9fcHJlZCk7IH0KKworICAvLyBQYXJhbGxlbCB1bmlxdWVfY29weSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgUmFuZG9tQWNjZXNzT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgUmFuZG9tQWNjZXNzT3V0cHV0SXRlcmF0b3IKKyAgICBfX3VuaXF1ZV9jb3B5X3N3aXRjaChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19sYXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tQWNjZXNzT3V0cHV0SXRlcmF0b3IgX19vdXQsIF9QcmVkaWNhdGUgX19wcmVkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fbGFzdCAtIF9fYmVnaW4pCisgICAgICAgICAgICA+IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnVuaXF1ZV9jb3B5X21pbmltYWxfbikpCisgICAgICAgIHJldHVybiBfX2dudV9wYXJhbGxlbDo6X19wYXJhbGxlbF91bmlxdWVfY29weSgKKyAgICAgICAgICAgICAgICAgX19iZWdpbiwgX19sYXN0LCBfX291dCwgX19wcmVkKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjp1bmlxdWVfY29weShfX2JlZ2luLCBfX2xhc3QsIF9fb3V0LCBfX3ByZWQpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICB1bmlxdWVfY29weShfSUl0ZXIgX19iZWdpbjEsIF9JSXRlciBfX2VuZDEsIF9PdXRwdXRJdGVyYXRvciBfX291dCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0lJdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcmF0b3I+IF9PSXRlclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSUl0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT0l0ZXJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9PSXRlckNhdGVnb3J5OworCisgICAgICByZXR1cm4gX191bmlxdWVfY29weV9zd2l0Y2goCisgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX291dCwgZXF1YWxfdG88X1ZhbHVlVHlwZT4oKSwKKyAgICAgICAgICAgICAgIF9JSXRlcmF0b3JDYXRlZ29yeSgpLCBfT0l0ZXJDYXRlZ29yeSgpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgdW5pcXVlX2NvcHkoX0lJdGVyIF9fYmVnaW4xLCBfSUl0ZXIgX19lbmQxLCBfT3V0cHV0SXRlcmF0b3IgX19vdXQsCisgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+IF9JSXRlclRyYWl0czsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfT0l0ZXJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0lJdGVyYXRvckNhdGVnb3J5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT0l0ZXJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9PSXRlckNhdGVnb3J5OworCisgICAgICByZXR1cm4gX191bmlxdWVfY29weV9zd2l0Y2goCisgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX291dCwgX19wcmVkLAorICAgICAgICAgICAgICAgX0lJdGVyYXRvckNhdGVnb3J5KCksIF9PSXRlckNhdGVnb3J5KCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgc2V0X3VuaW9uKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0LCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNldF91bmlvbigKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fb3V0KTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfdW5pb24oX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsCisgICAgICAgICAgICAgIF9JSXRlcjIgX19iZWdpbjIsIF9JSXRlcjIgX19lbmQyLAorICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19vdXQsIF9QcmVkaWNhdGUgX19wcmVkLAorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNldF91bmlvbihfX2JlZ2luMSwgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbjIsIF9fZW5kMiwgX19vdXQsIF9fcHJlZCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMiwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMz4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgX19zZXRfdW5pb25fc3dpdGNoKAorICAgICAgX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIF9JSXRlcjIgX19iZWdpbjIsIF9JSXRlcjIgX19lbmQyLAorICAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCwKKyAgICAgIF9JdGVyYXRvclRhZzEsIF9JdGVyYXRvclRhZzIsIF9JdGVyYXRvclRhZzMpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNldF91bmlvbihfX2JlZ2luMSwgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbjIsIF9fZW5kMiwgX19yZXN1bHQsIF9fcHJlZCk7IH0KKworICAvLyBQYXJhbGxlbCBzZXRfdW5pb24gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dF9SQUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX091dHB1dF9SQUl0ZXIKKyAgICBfX3NldF91bmlvbl9zd2l0Y2goX1JBSXRlcjEgX19iZWdpbjEsIF9SQUl0ZXIxIF9fZW5kMSwgCisgICAgICAgICAgICAgICAgICAgICBfUkFJdGVyMiBfX2JlZ2luMiwgX1JBSXRlcjIgX19lbmQyLCAKKyAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRfUkFJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgCisgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X19nbnVfcGFyYWxsZWw6Ol9TZXF1ZW5jZUluZGV4PihfX2VuZDEgLSBfX2JlZ2luMSkKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnNldF91bmlvbl9taW5pbWFsX24KKyAgICAgICAgICAgIHx8IHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQyIC0gX19iZWdpbjIpCisgICAgICAgICAgICA+PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5zZXRfdW5pb25fbWluaW1hbF9uKSkKKyAgICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX3NldF91bmlvbigKKyAgICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19yZXN1bHQsIF9fcHJlZCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6c2V0X3VuaW9uKF9fYmVnaW4xLCBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmVnaW4yLCBfX2VuZDIsIF9fcmVzdWx0LCBfX3ByZWQpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yIAorICAgIHNldF91bmlvbihfSUl0ZXIxIF9fYmVnaW4xLCBfSUl0ZXIxIF9fZW5kMSwKKyAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX0lJdGVyMiBfX2VuZDIsIF9PdXRwdXRJdGVyYXRvciBfX291dCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcjE+IF9JSXRlclRyYWl0czE7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcjI+IF9JSXRlclRyYWl0czI7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyYXRvcj4gX09JdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMxOjppdGVyYXRvcl9jYXRlZ29yeQorICAgICAgICBfSUl0ZXJDYXRlZ29yeTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czI6Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9JSXRlckNhdGVnb3J5MjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX09JdGVyVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfT0l0ZXJDYXRlZ29yeTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKKworICAgICAgcmV0dXJuIF9fc2V0X3VuaW9uX3N3aXRjaCgKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fb3V0LAorICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9MZXNzPF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4oKSwKKyAgICAgICAgICAgICAgIF9JSXRlckNhdGVnb3J5MSgpLCBfSUl0ZXJDYXRlZ29yeTIoKSwgX09JdGVyQ2F0ZWdvcnkoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IgCisgICAgc2V0X3VuaW9uKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0LCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcjE+IF9JSXRlclRyYWl0czE7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcjI+IF9JSXRlclRyYWl0czI7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyYXRvcj4gX09JdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMxOjppdGVyYXRvcl9jYXRlZ29yeQorICAgICAgICBfSUl0ZXJDYXRlZ29yeTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czI6Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9JSXRlckNhdGVnb3J5MjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX09JdGVyVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfT0l0ZXJDYXRlZ29yeTsKKworICAgICAgcmV0dXJuIF9fc2V0X3VuaW9uX3N3aXRjaCgKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fb3V0LCBfX3ByZWQsCisgICAgICAgICAgICAgICBfSUl0ZXJDYXRlZ29yeTEoKSwgX0lJdGVyQ2F0ZWdvcnkyKCksIF9PSXRlckNhdGVnb3J5KCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9pbnRlcnNlY3Rpb24oX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX291dCwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpzZXRfaW50ZXJzZWN0aW9uKF9fYmVnaW4xLCBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbjIsIF9fZW5kMiwgX19vdXQpOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfaW50ZXJzZWN0aW9uKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX0lJdGVyMiBfX2VuZDIsCisgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19vdXQsIF9QcmVkaWNhdGUgX19wcmVkLCAKKyAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6c2V0X2ludGVyc2VjdGlvbigKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fb3V0LCBfX3ByZWQpOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvclRhZzEsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzIsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvclRhZzM+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvciAKKyAgICBfX3NldF9pbnRlcnNlY3Rpb25fc3dpdGNoKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX0lJdGVyMiBfX2VuZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0l0ZXJhdG9yVGFnMSwgX0l0ZXJhdG9yVGFnMiwgX0l0ZXJhdG9yVGFnMykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6c2V0X2ludGVyc2VjdGlvbihfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VuZDIsIF9fcmVzdWx0LCBfX3ByZWQpOyB9CisKKyAgLy8gUGFyYWxsZWwgc2V0X2ludGVyc2VjdGlvbiBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0X1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT3V0cHV0X1JBSXRlcgorICAgIF9fc2V0X2ludGVyc2VjdGlvbl9zd2l0Y2goX1JBSXRlcjEgX19iZWdpbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JBSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXIyIF9fYmVnaW4yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0X1JBSXRlciBfX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X19nbnVfcGFyYWxsZWw6Ol9TZXF1ZW5jZUluZGV4PihfX2VuZDEgLSBfX2JlZ2luMSkKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnNldF91bmlvbl9taW5pbWFsX24KKyAgICAgICAgICAgIHx8IHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQyIC0gX19iZWdpbjIpCisgICAgICAgICAgICA+PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5zZXRfdW5pb25fbWluaW1hbF9uKSkKKyAgICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX3NldF9pbnRlcnNlY3Rpb24oCisgICAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fcmVzdWx0LCBfX3ByZWQpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNldF9pbnRlcnNlY3Rpb24oCisgICAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fcmVzdWx0LCBfX3ByZWQpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yIAorICAgIHNldF9pbnRlcnNlY3Rpb24oX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIAorICAgICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX0lJdGVyMiBfX2VuZDIsIAorICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX0lJdGVyVHJhaXRzMTsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMj4gX0lJdGVyVHJhaXRzMjsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfT0l0ZXJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czE6Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9JSXRlckNhdGVnb3J5MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMjo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICAgICAgX0lJdGVyQ2F0ZWdvcnkyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT0l0ZXJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9PSXRlckNhdGVnb3J5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMxOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMyOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworCisgICAgICByZXR1cm4gX19zZXRfaW50ZXJzZWN0aW9uX3N3aXRjaCgKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fb3V0LAorICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9MZXNzPF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj4oKSwKKyAgICAgICAgICAgICAgIF9JSXRlckNhdGVnb3J5MSgpLCBfSUl0ZXJDYXRlZ29yeTIoKSwgX09JdGVyQ2F0ZWdvcnkoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yIAorICAgIHNldF9pbnRlcnNlY3Rpb24oX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX291dCwgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXIxPiBfSUl0ZXJUcmFpdHMxOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXIyPiBfSUl0ZXJUcmFpdHMyOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcmF0b3I+IF9PSXRlclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMTo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICAgICAgX0lJdGVyQ2F0ZWdvcnkxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMyOjppdGVyYXRvcl9jYXRlZ29yeQorICAgICAgICBfSUl0ZXJDYXRlZ29yeTI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PSXRlclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX09JdGVyQ2F0ZWdvcnk7CisKKyAgICAgIHJldHVybiBfX3NldF9pbnRlcnNlY3Rpb25fc3dpdGNoKAorICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19vdXQsIF9fcHJlZCwKKyAgICAgICAgICAgICAgIF9JSXRlckNhdGVnb3J5MSgpLCBfSUl0ZXJDYXRlZ29yeTIoKSwgX09JdGVyQ2F0ZWdvcnkoKSk7CisgICAgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JSXRlcjIgX19iZWdpbjIsIF9JSXRlcjIgX19lbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6c2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKAorICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19vdXQpOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSUl0ZXIxIF9fYmVnaW4xLCBfSUl0ZXIxIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX0lJdGVyMiBfX2VuZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX291dCwgX1ByZWRpY2F0ZSBfX3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6c2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKAorICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19vdXQsIF9fcHJlZCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMSwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMz4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yIAorICAgIF9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3N3aXRjaCgKKyAgICAgIF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQsCisgICAgICBfSXRlcmF0b3JUYWcxLCBfSXRlcmF0b3JUYWcyLCBfSXRlcmF0b3JUYWczKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoCisgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3Jlc3VsdCwgX19wcmVkKTsgfQorCisgIC8vIFBhcmFsbGVsIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0X1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT3V0cHV0X1JBSXRlcgorICAgIF9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3N3aXRjaChfUkFJdGVyMSBfX2JlZ2luMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXIxIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXIyIF9fYmVnaW4yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JBSXRlcjIgX19lbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dF9SQUl0ZXIgX19yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgc3RhdGljX2Nhc3Q8X19nbnVfcGFyYWxsZWw6Ol9TZXF1ZW5jZUluZGV4PihfX2VuZDEgLSBfX2JlZ2luMSkKKyAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZV9taW5pbWFsX24KKyAgICAgIHx8IHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQyIC0gX19iZWdpbjIpCisgICAgICA+PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5zZXRfc3ltbWV0cmljX2RpZmZlcmVuY2VfbWluaW1hbF9uKSkKKyAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX3NldF9zeW1tZXRyaWNfZGlmZmVyZW5jZSgKKyAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19yZXN1bHQsIF9fcHJlZCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6c2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKAorICAgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3Jlc3VsdCwgX19wcmVkKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IgCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX0lJdGVyVHJhaXRzMTsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMj4gX0lJdGVyVHJhaXRzMjsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfT0l0ZXJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czE6Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9JSXRlckNhdGVnb3J5MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMjo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICAgICAgX0lJdGVyQ2F0ZWdvcnkyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT0l0ZXJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9PSXRlckNhdGVnb3J5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMxOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMyOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworCisgICAgICByZXR1cm4gX19zZXRfc3ltbWV0cmljX2RpZmZlcmVuY2Vfc3dpdGNoKAorICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19vdXQsCisgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X0xlc3M8X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyPigpLAorICAgICAgICAgICAgICAgX0lJdGVyQ2F0ZWdvcnkxKCksIF9JSXRlckNhdGVnb3J5MigpLCBfT0l0ZXJDYXRlZ29yeSgpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IgCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0LCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcjE+IF9JSXRlclRyYWl0czE7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcjI+IF9JSXRlclRyYWl0czI7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyYXRvcj4gX09JdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMxOjppdGVyYXRvcl9jYXRlZ29yeQorICAgICAgICBfSUl0ZXJDYXRlZ29yeTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czI6Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9JSXRlckNhdGVnb3J5MjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX09JdGVyVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfT0l0ZXJDYXRlZ29yeTsKKworICAgICAgcmV0dXJuIF9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3N3aXRjaCgKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fb3V0LCBfX3ByZWQsCisgICAgICAgICAgICAgICBfSUl0ZXJDYXRlZ29yeTEoKSwgX0lJdGVyQ2F0ZWdvcnkyKCksIF9PSXRlckNhdGVnb3J5KCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9kaWZmZXJlbmNlKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCAKKyAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwgCisgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0LCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNldF9kaWZmZXJlbmNlKAorICAgICAgICAgICAgICAgX19iZWdpbjEsX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX291dCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9kaWZmZXJlbmNlKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCAKKyAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwgCisgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0LCBfUHJlZGljYXRlIF9fcHJlZCwgCisgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpzZXRfZGlmZmVyZW5jZShfX2JlZ2luMSwgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlZ2luMiwgX19lbmQyLCBfX291dCwgX19wcmVkKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMiwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMz4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgX19zZXRfZGlmZmVyZW5jZV9zd2l0Y2goX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JUYWcxLCBfSXRlcmF0b3JUYWcyLCBfSXRlcmF0b3JUYWczKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpzZXRfZGlmZmVyZW5jZSgKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fcmVzdWx0LCBfX3ByZWQpOyB9CisKKyAgLy8gUGFyYWxsZWwgc2V0X2RpZmZlcmVuY2UgZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dF9SQUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX091dHB1dF9SQUl0ZXIKKyAgICBfX3NldF9kaWZmZXJlbmNlX3N3aXRjaChfUkFJdGVyMSBfX2JlZ2luMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX1JBSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfUkFJdGVyMiBfX2JlZ2luMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX1JBSXRlcjIgX19lbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0X1JBSXRlciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQxIC0gX19iZWdpbjEpCisgICAgICAgICAgICA+PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5zZXRfZGlmZmVyZW5jZV9taW5pbWFsX24KKyAgICAgICAgICAgIHx8IHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQyIC0gX19iZWdpbjIpCisgICAgICAgICAgICA+PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5zZXRfZGlmZmVyZW5jZV9taW5pbWFsX24pKQorICAgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6Ol9fcGFyYWxsZWxfc2V0X2RpZmZlcmVuY2UoCisgICAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fcmVzdWx0LCBfX3ByZWQpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNldF9kaWZmZXJlbmNlKAorICAgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3Jlc3VsdCwgX19wcmVkKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIHNldF9kaWZmZXJlbmNlKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCAKKyAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwgCisgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fb3V0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX0lJdGVyVHJhaXRzMTsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMj4gX0lJdGVyVHJhaXRzMjsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfT0l0ZXJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czE6Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9JSXRlckNhdGVnb3J5MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMjo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICAgICAgX0lJdGVyQ2F0ZWdvcnkyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT0l0ZXJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9PSXRlckNhdGVnb3J5OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMxOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMyOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworCisgICAgICByZXR1cm4gX19zZXRfZGlmZmVyZW5jZV9zd2l0Y2goCisgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX291dCwKKyAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfTGVzczxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KCksCisgICAgICAgICAgICAgICBfSUl0ZXJDYXRlZ29yeTEoKSwgX0lJdGVyQ2F0ZWdvcnkyKCksIF9PSXRlckNhdGVnb3J5KCkpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgc2V0X2RpZmZlcmVuY2UoX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIAorICAgICAgICAgICAgICAgICAgIF9JSXRlcjIgX19iZWdpbjIsIF9JSXRlcjIgX19lbmQyLCAKKyAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19vdXQsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX0lJdGVyVHJhaXRzMTsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMj4gX0lJdGVyVHJhaXRzMjsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfT0l0ZXJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czE6Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9JSXRlckNhdGVnb3J5MTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMjo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICAgICAgX0lJdGVyQ2F0ZWdvcnkyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT0l0ZXJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9PSXRlckNhdGVnb3J5OworCisgICAgICByZXR1cm4gX19zZXRfZGlmZmVyZW5jZV9zd2l0Y2goCisgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX291dCwgX19wcmVkLAorICAgICAgICAgICAgICAgX0lJdGVyQ2F0ZWdvcnkxKCksIF9JSXRlckNhdGVnb3J5MigpLCBfT0l0ZXJDYXRlZ29yeSgpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yPgorICAgIGlubGluZSBfRkl0ZXJhdG9yCisgICAgYWRqYWNlbnRfZmluZChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIAorICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjphZGphY2VudF9maW5kKF9fYmVnaW4sIF9fZW5kKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIGFkamFjZW50X2ZpbmQoX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLCAKKyAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKKyAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6YWRqYWNlbnRfZmluZChfX2JlZ2luLCBfX2VuZCwgX19iaW5hcnlfcHJlZCk7IH0KKworICAvLyBQYXJhbGxlbCBhbGdvcml0aG0gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgX1JBSXRlcgorICAgIF9fYWRqYWNlbnRfZmluZF9zd2l0Y2goX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTih0cnVlKSkKKyAgICAgICAgeworICAgICAgICAgIF9SQUl0ZXIgX19zcG90ID0gX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgICBfX2ZpbmRfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgX19iZWdpbiwgX19lbmQgLSAxLCBfX2JlZ2luLCBlcXVhbF90bzxfVmFsdWVUeXBlPigpLAorICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX2FkamFjZW50X2ZpbmRfc2VsZWN0b3IoKSkKKyAgICAgICAgICAgIC5maXJzdDsKKyAgICAgICAgICBpZiAoX19zcG90ID09IChfX2VuZCAtIDEpKQorICAgICAgICAgICAgcmV0dXJuIF9fZW5kOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBfX3Nwb3Q7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGFkamFjZW50X2ZpbmQoX19iZWdpbiwgX19lbmQsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfSXRlcmF0b3JUYWc+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBfX2FkamFjZW50X2ZpbmRfc3dpdGNoKF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JUYWcpCisgICAgeyByZXR1cm4gYWRqYWNlbnRfZmluZChfX2JlZ2luLCBfX2VuZCwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOyB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yPgorICAgIGlubGluZSBfRkl0ZXJhdG9yCisgICAgYWRqYWNlbnRfZmluZChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQpCisgICAgeworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0ZJdGVyYXRvcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX2FkamFjZW50X2ZpbmRfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfSXRlcmF0b3JDYXRlZ29yeSgpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlLAorICAgICAgICAgICB0eXBlbmFtZSBfSXRlcmF0b3JUYWc+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBfX2FkamFjZW50X2ZpbmRfc3dpdGNoKF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX3ByZWQsIF9JdGVyYXRvclRhZykKKyAgICB7IHJldHVybiBhZGphY2VudF9maW5kKF9fYmVnaW4sIF9fZW5kLCBfX3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7IH0KKworICAvLyBQYXJhbGxlbCBhbGdvcml0aG0gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX1JBSXRlcgorICAgIF9fYWRqYWNlbnRfZmluZF9zd2l0Y2goX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fcHJlZCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTih0cnVlKSkKKyAgICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjpfX2ZpbmRfdGVtcGxhdGUoX19iZWdpbiwgX19lbmQsIF9fYmVnaW4sIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWRqYWNlbnRfZmluZF9zZWxlY3RvcigpKS5maXJzdDsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGFkamFjZW50X2ZpbmQoX19iZWdpbiwgX19lbmQsIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBhZGphY2VudF9maW5kKF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgCisgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgcmV0dXJuIF9fYWRqYWNlbnRfZmluZF9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvckNhdGVnb3J5KCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgY291bnQoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgY29uc3QgX1RwJiBfX3ZhbHVlLCAKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OmNvdW50KF9fYmVnaW4sIF9fZW5kLCBfX3ZhbHVlKTsgfQorCisgIC8vIFBhcmFsbGVsIGNvZGUgZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fY291bnRfc3dpdGNoKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwgCisgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIAorICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnIAorICAgICAgICAgICAgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF91bmJhbGFuY2VkKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfcGFyYWxsZWw6Ol9TZXF1ZW5jZUluZGV4IF9TZXF1ZW5jZUluZGV4OworCisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLmNvdW50X21pbmltYWxfbgorICAgICAgICAgICAgJiYgX19nbnVfcGFyYWxsZWw6Ol9faXNfcGFyYWxsZWwoX19wYXJhbGxlbGlzbV90YWcpKSkKKyAgICAgICAgeworICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX2NvdW50X3NlbGVjdG9yPF9SQUl0ZXIsIF9EaWZmZXJlbmNlVHlwZT4KKyAgICAgICAgICAgIF9fZnVuY3Rpb25hbGl0eTsKKyAgICAgICAgICBfRGlmZmVyZW5jZVR5cGUgX19yZXMgPSAwOworICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjoKKyAgICAgICAgICAgIF9fZm9yX2VhY2hfdGVtcGxhdGVfcmFuZG9tX2FjY2VzcygKKyAgICAgICAgICAgICAgX19iZWdpbiwgX19lbmQsIF9fdmFsdWUsIF9fZnVuY3Rpb25hbGl0eSwKKyAgICAgICAgICAgICAgc3RkOjpwbHVzPF9TZXF1ZW5jZUluZGV4PigpLCBfX3JlcywgX19yZXMsIC0xLAorICAgICAgICAgICAgICBfX3BhcmFsbGVsaXNtX3RhZyk7CisgICAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBjb3VudChfX2JlZ2luLCBfX2VuZCwgX192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JdGVyYXRvclRhZz4KKyAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fY291bnRfc3dpdGNoKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIGNvbnN0IF9UcCYgX192YWx1ZSwgCisgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZykKKyAgICB7IHJldHVybiBjb3VudChfX2JlZ2luLCBfX2VuZCwgX192YWx1ZSwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOworICAgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgY291bnQoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgY29uc3QgX1RwJiBfX3ZhbHVlLCAKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX2NvdW50X3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX192YWx1ZSwgX0l0ZXJhdG9yQ2F0ZWdvcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFsbGVsaXNtX3RhZyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgY291bnQoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgY29uc3QgX1RwJiBfX3ZhbHVlKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX2NvdW50X3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX192YWx1ZSwgX0l0ZXJhdG9yQ2F0ZWdvcnkoKSk7CisgICAgfQorCisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgY291bnRfaWYoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgX1ByZWRpY2F0ZSBfX3ByZWQsIAorICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6Y291bnRfaWYoX19iZWdpbiwgX19lbmQsIF9fcHJlZCk7IH0KKworICAvLyBQYXJhbGxlbCBjb3VudF9pZiBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fY291bnRfaWZfc3dpdGNoKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwgCisgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZworICAgICAgICAgICAgICAgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF91bmJhbGFuY2VkKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIHR5cGVkZWYgX19nbnVfcGFyYWxsZWw6Ol9TZXF1ZW5jZUluZGV4IF9TZXF1ZW5jZUluZGV4OworCisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLmNvdW50X21pbmltYWxfbgorICAgICAgICAgICAgJiYgX19nbnVfcGFyYWxsZWw6Ol9faXNfcGFyYWxsZWwoX19wYXJhbGxlbGlzbV90YWcpKSkKKyAgICAgICAgeworICAgICAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3JlcyA9IDA7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgX19jb3VudF9pZl9zZWxlY3RvcjxfUkFJdGVyLCBfRGlmZmVyZW5jZVR5cGU+CisgICAgICAgICAgICBfX2Z1bmN0aW9uYWxpdHk7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgX19mb3JfZWFjaF90ZW1wbGF0ZV9yYW5kb21fYWNjZXNzKAorICAgICAgICAgICAgICBfX2JlZ2luLCBfX2VuZCwgX19wcmVkLCBfX2Z1bmN0aW9uYWxpdHksCisgICAgICAgICAgICAgIHN0ZDo6cGx1czxfU2VxdWVuY2VJbmRleD4oKSwgX19yZXMsIF9fcmVzLCAtMSwKKyAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOworICAgICAgICAgIHJldHVybiBfX3JlczsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gY291bnRfaWYoX19iZWdpbiwgX19lbmQsIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfSXRlcmF0b3JUYWc+CisgICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX2NvdW50X2lmX3N3aXRjaChfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfUHJlZGljYXRlIF9fcHJlZCwgCisgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZykKKyAgICB7IHJldHVybiBjb3VudF9pZihfX2JlZ2luLCBfX2VuZCwgX19wcmVkLAorICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIGNvdW50X2lmKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIF9QcmVkaWNhdGUgX19wcmVkLCAKKyAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX2NvdW50X2lmX3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX19wcmVkLCBfSXRlcmF0b3JDYXRlZ29yeSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudF9pZihfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICByZXR1cm4gX19jb3VudF9pZl9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9fcHJlZCwgX0l0ZXJhdG9yQ2F0ZWdvcnkoKSk7CisgICAgfQorCisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvcjEsIHR5cGVuYW1lIF9GSXRlcmF0b3IyPgorICAgIGlubGluZSBfRkl0ZXJhdG9yMQorICAgIHNlYXJjaChfRkl0ZXJhdG9yMSBfX2JlZ2luMSwgX0ZJdGVyYXRvcjEgX19lbmQxLAorICAgICAgICAgICBfRkl0ZXJhdG9yMiBfX2JlZ2luMiwgX0ZJdGVyYXRvcjIgX19lbmQyLAorICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNlYXJjaChfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyKTsgfQorCisgIC8vIFBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyMSwgdHlwZW5hbWUgX1JBSXRlcjI+CisgICAgX1JBSXRlcjEKKyAgICBfX3NlYXJjaF9zd2l0Y2goX1JBSXRlcjEgX19iZWdpbjEsIF9SQUl0ZXIxIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgIF9SQUl0ZXIyIF9fYmVnaW4yLCBfUkFJdGVyMiBfX2VuZDIsCisgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyMT4gX0l0ZXJhdG9yMVRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yMVRyYWl0czo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcjI+IF9JdGVyYXRvcjJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjJUcmFpdHM6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CisKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X19nbnVfcGFyYWxsZWw6Ol9TZXF1ZW5jZUluZGV4PihfX2VuZDEgLSBfX2JlZ2luMSkKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnNlYXJjaF9taW5pbWFsX24pKQorICAgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgIF9fc2VhcmNoX3RlbXBsYXRlKAorICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwKKyAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfRXF1YWxUbzxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KCkpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc2VhcmNoKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsCisgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IxLCB0eXBlbmFtZSBfRkl0ZXJhdG9yMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMSwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMj4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcjEKKyAgICBfX3NlYXJjaF9zd2l0Y2goX0ZJdGVyYXRvcjEgX19iZWdpbjEsIF9GSXRlcmF0b3IxIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgIF9GSXRlcmF0b3IyIF9fYmVnaW4yLCBfRkl0ZXJhdG9yMiBfX2VuZDIsCisgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JUYWcxLCBfSXRlcmF0b3JUYWcyKQorICAgIHsgcmV0dXJuIHNlYXJjaChfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLAorICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7IH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZJdGVyYXRvcjI+CisgICAgaW5saW5lIF9GSXRlcmF0b3IxCisgICAgc2VhcmNoKF9GSXRlcmF0b3IxIF9fYmVnaW4xLCBfRkl0ZXJhdG9yMSBfX2VuZDEsCisgICAgICAgICAgIF9GSXRlcmF0b3IyIF9fYmVnaW4yLCBfRkl0ZXJhdG9yMiBfX2VuZDIpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yMT4gX0l0ZXJhdG9yMVRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yMVRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnkxOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yMj4gX0l0ZXJhdG9yMlRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yMlRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnkyOworCisgICAgICByZXR1cm4gX19zZWFyY2hfc3dpdGNoKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JDYXRlZ29yeTEoKSwgX0l0ZXJhdG9yQ2F0ZWdvcnkyKCkpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZJdGVyYXRvcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgaW5saW5lIF9GSXRlcmF0b3IxCisgICAgc2VhcmNoKF9GSXRlcmF0b3IxIF9fYmVnaW4xLCBfRkl0ZXJhdG9yMSBfX2VuZDEsCisgICAgICAgICAgIF9GSXRlcmF0b3IyIF9fYmVnaW4yLCBfRkl0ZXJhdG9yMiBfX2VuZDIsCisgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19wcmVkLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNlYXJjaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3ByZWQpOyB9CisKKyAgLy8gUGFyYWxsZWwgYWxnb3JpdGhtIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9yLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyMSwgdHlwZW5hbWUgX1JBSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX1JBSXRlcjEKKyAgICBfX3NlYXJjaF9zd2l0Y2goX1JBSXRlcjEgX19iZWdpbjEsIF9SQUl0ZXIxIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgIF9SQUl0ZXIyIF9fYmVnaW4yLCBfUkFJdGVyMiBfX2VuZDIsCisgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKKyAgICB7CisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQxIC0gX19iZWdpbjEpCisgICAgICAgICAgICA+PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5zZWFyY2hfbWluaW1hbF9uKSkKKyAgICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjpfX3NlYXJjaF90ZW1wbGF0ZShfX2JlZ2luMSwgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlZ2luMiwgX19lbmQyLCBfX3ByZWQpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gc2VhcmNoKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgICAgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvcjEsIHR5cGVuYW1lIF9GSXRlcmF0b3IyLAorICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlLCB0eXBlbmFtZSBfSXRlcmF0b3JUYWcxLAorICAgICAgICAgICB0eXBlbmFtZSBfSXRlcmF0b3JUYWcyPgorICAgIGlubGluZSBfRkl0ZXJhdG9yMQorICAgIF9fc2VhcmNoX3N3aXRjaChfRkl0ZXJhdG9yMSBfX2JlZ2luMSwgX0ZJdGVyYXRvcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgX0ZJdGVyYXRvcjIgX19iZWdpbjIsIF9GSXRlcmF0b3IyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19wcmVkLCBfSXRlcmF0b3JUYWcxLCBfSXRlcmF0b3JUYWcyKQorICAgIHsgcmV0dXJuIHNlYXJjaChfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3ByZWQsCisgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvcjEsIHR5cGVuYW1lIF9GSXRlcmF0b3IyLAorICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGlubGluZSBfRkl0ZXJhdG9yMQorICAgIHNlYXJjaChfRkl0ZXJhdG9yMSBfX2JlZ2luMSwgX0ZJdGVyYXRvcjEgX19lbmQxLAorICAgICAgICAgICBfRkl0ZXJhdG9yMiBfX2JlZ2luMiwgX0ZJdGVyYXRvcjIgX19lbmQyLAorICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlICBfX3ByZWQpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yMT4gX0l0ZXJhdG9yMVRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yMVRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnkxOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yMj4gX0l0ZXJhdG9yMlRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yMlRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnkyOworICAgICAgcmV0dXJuIF9fc2VhcmNoX3N3aXRjaChfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JDYXRlZ29yeTEoKSwgX0l0ZXJhdG9yQ2F0ZWdvcnkyKCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBzZWFyY2hfbihfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9JbnRlZ2VyIF9fY291bnQsCisgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpzZWFyY2hfbihfX2JlZ2luLCBfX2VuZCwgX19jb3VudCwgX192YWwpOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAorICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgorICAgIGlubGluZSBfRkl0ZXJhdG9yCisgICAgc2VhcmNoX24oX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLCBfSW50ZWdlciBfX2NvdW50LAorICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKKyAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnNlYXJjaF9uKAorICAgICAgICAgICAgICAgX19iZWdpbiwgX19lbmQsIF9fY291bnQsIF9fdmFsLCBfX2JpbmFyeV9wcmVkKTsgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBzZWFyY2hfbihfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9JbnRlZ2VyIF9fY291bnQsCisgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjpzZWFyY2hfbihfX2JlZ2luLCBfX2VuZCwgX19jb3VudCwgX192YWwsCisgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9FcXVhbFRvPF9WYWx1ZVR5cGUsIF9UcD4oKSk7CisgICAgfQorCisgIC8vIFBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLAorICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgX1JBSXRlcgorICAgIF9fc2VhcmNoX25fc3dpdGNoKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwgX0ludGVnZXIgX19jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnNlYXJjaF9taW5pbWFsX24pKQorICAgICAgICB7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9Qc2V1ZG9TZXF1ZW5jZTxfVHAsIF9JbnRlZ2VyPiBfX3BzKF9fdmFsLCBfX2NvdW50KTsKKyAgICAgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6Ol9fc2VhcmNoX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgIF9fYmVnaW4sIF9fZW5kLCBfX3BzLmJlZ2luKCksIF9fcHMuZW5kKCksIF9fYmluYXJ5X3ByZWQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6c2VhcmNoX24oX19iZWdpbiwgX19lbmQsIF9fY291bnQsIF9fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmluYXJ5X3ByZWQpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAorICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlLCB0eXBlbmFtZSBfSXRlcmF0b3JUYWc+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBfX3NlYXJjaF9uX3N3aXRjaChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9JbnRlZ2VyIF9fY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAorICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6c2VhcmNoX24oX19iZWdpbiwgX19lbmQsIF9fY291bnQsIF9fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JpbmFyeV9wcmVkKTsgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBzZWFyY2hfbihfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9JbnRlZ2VyIF9fY291bnQsCisgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgIHsKKyAgICAgIHJldHVybiBfX3NlYXJjaF9uX3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX19jb3VudCwgX192YWwsIF9fYmluYXJ5X3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9GSXRlcmF0b3I+OjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnkoKSk7CisgICAgfQorCisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgdHJhbnNmb3JtKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgCisgICAgICAgICAgICAgIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnRyYW5zZm9ybShfX2JlZ2luLCBfX2VuZCwgX19yZXN1bHQsIF9fdW5hcnlfb3ApOyB9CisKKyAgLy8gUGFyYWxsZWwgdW5hcnkgdHJhbnNmb3JtIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CisgICAgX1JBSXRlcjIKKyAgICBfX3RyYW5zZm9ybTFfc3dpdGNoKF9SQUl0ZXIxIF9fYmVnaW4sIF9SQUl0ZXIxIF9fZW5kLAorICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXIyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCwKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZworICAgICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX2JhbGFuY2VkKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnRyYW5zZm9ybV9taW5pbWFsX24KKyAgICAgICAgICAgICYmIF9fZ251X3BhcmFsbGVsOjpfX2lzX3BhcmFsbGVsKF9fcGFyYWxsZWxpc21fdGFnKSkpCisgICAgICAgIHsKKyAgICAgICAgICBib29sIF9fZHVtbXkgPSB0cnVlOworICAgICAgICAgIHR5cGVkZWYgX19nbnVfcGFyYWxsZWw6Ol9JdGVyYXRvclBhaXI8X1JBSXRlcjEsCisgICAgICAgICAgICBfUkFJdGVyMiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc+IF9JdFRyaXA7CisgICAgICAgICAgX0l0VHJpcCBfX2JlZ2luX3BhaXIoX19iZWdpbiwgX19yZXN1bHQpLAorICAgICAgICAgICAgICAgICAgX19lbmRfcGFpcihfX2VuZCwgX19yZXN1bHQgKyAoX19lbmQgLSBfX2JlZ2luKSk7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9fdHJhbnNmb3JtMV9zZWxlY3RvcjxfSXRUcmlwPiBfX2Z1bmN0aW9uYWxpdHk7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgX19mb3JfZWFjaF90ZW1wbGF0ZV9yYW5kb21fYWNjZXNzKAorICAgICAgICAgICAgICBfX2JlZ2luX3BhaXIsIF9fZW5kX3BhaXIsIF9fdW5hcnlfb3AsIF9fZnVuY3Rpb25hbGl0eSwKKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9EdW1teVJlZHVjdCgpLAorICAgICAgICAgICAgICBfX2R1bW15LCBfX2R1bW15LCAtMSwgX19wYXJhbGxlbGlzbV90YWcpOworICAgICAgICAgIHJldHVybiBfX2Z1bmN0aW9uYWxpdHkuX01fZmluaXNoX2l0ZXJhdG9yOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiB0cmFuc2Zvcm0oX19iZWdpbiwgX19lbmQsIF9fcmVzdWx0LCBfX3VuYXJ5X29wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgICAgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uLCB0eXBlbmFtZSBfSXRlcmF0b3JUYWcxLAorICAgICAgICAgICB0eXBlbmFtZSBfSXRlcmF0b3JUYWcyPgorICAgIGlubGluZSBfUkFJdGVyMgorICAgIF9fdHJhbnNmb3JtMV9zd2l0Y2goX1JBSXRlcjEgX19iZWdpbiwgX1JBSXRlcjEgX19lbmQsCisgICAgICAgICAgICAgICAgICAgICAgX1JBSXRlcjIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wLAorICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZzEsIF9JdGVyYXRvclRhZzIpCisgICAgeyByZXR1cm4gdHJhbnNmb3JtKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwgX191bmFyeV9vcCwgCisgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorICAgICAgICAgICB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIHRyYW5zZm9ybShfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisgICAgICAgICAgICAgIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wLCAKKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0lJdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcmF0b3I+IF9PSXRlclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSUl0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PSXRlclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX09JdGVyQ2F0ZWdvcnk7CisKKyAgICAgIHJldHVybiBfX3RyYW5zZm9ybTFfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwgX191bmFyeV9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSUl0ZXJhdG9yQ2F0ZWdvcnkoKSwgX09JdGVyQ2F0ZWdvcnkoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICB0cmFuc2Zvcm0oX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorICAgICAgICAgICAgICBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0lJdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcmF0b3I+IF9PSXRlclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSUl0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PSXRlclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX09JdGVyQ2F0ZWdvcnk7CisKKyAgICAgIHJldHVybiBfX3RyYW5zZm9ybTFfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwgX191bmFyeV9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSUl0ZXJhdG9yQ2F0ZWdvcnkoKSwgX09JdGVyQ2F0ZWdvcnkoKSk7CisgICAgfQorCisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIHRyYW5zZm9ybShfSUl0ZXIxIF9fYmVnaW4xLCBfSUl0ZXIxIF9fZW5kMSwKKyAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnRyYW5zZm9ybShfX2JlZ2luMSwgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbjIsIF9fcmVzdWx0LCBfX2JpbmFyeV9vcCk7IH0KKworICAvLyBQYXJhbGxlbCBiaW5hcnkgdHJhbnNmb3JtIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfUkFJdGVyMywgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBfUkFJdGVyMworICAgIF9fdHJhbnNmb3JtMl9zd2l0Y2goX1JBSXRlcjEgX19iZWdpbjEsIF9SQUl0ZXIxIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgICAgICBfUkFJdGVyMiBfX2JlZ2luMiwKKyAgICAgICAgICAgICAgICAgICAgICBfUkFJdGVyMyBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCwKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZyAKKyAgICAgICAgICAgICAgICAgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF9iYWxhbmNlZCkKKyAgICB7CisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgKF9fZW5kMSAtIF9fYmVnaW4xKSA+PQorICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnRyYW5zZm9ybV9taW5pbWFsX24KKyAgICAgICAgICAgICYmIF9fZ251X3BhcmFsbGVsOjpfX2lzX3BhcmFsbGVsKF9fcGFyYWxsZWxpc21fdGFnKSkpCisgICAgICAgIHsKKyAgICAgICAgICBib29sIF9fZHVtbXkgPSB0cnVlOworICAgICAgICAgIHR5cGVkZWYgX19nbnVfcGFyYWxsZWw6Ol9JdGVyYXRvclRyaXBsZTxfUkFJdGVyMSwKKyAgICAgICAgICAgIF9SQUl0ZXIyLCBfUkFJdGVyMywKKyAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPiBfSXRUcmlwOworICAgICAgICAgIF9JdFRyaXAgX19iZWdpbl90cmlwbGUoX19iZWdpbjEsIF9fYmVnaW4yLCBfX3Jlc3VsdCksCisgICAgICAgICAgICBfX2VuZF90cmlwbGUoX19lbmQxLCBfX2JlZ2luMiArIChfX2VuZDEgLSBfX2JlZ2luMSksCisgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0ICsgKF9fZW5kMSAtIF9fYmVnaW4xKSk7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9fdHJhbnNmb3JtMl9zZWxlY3RvcjxfSXRUcmlwPiBfX2Z1bmN0aW9uYWxpdHk7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgX19mb3JfZWFjaF90ZW1wbGF0ZV9yYW5kb21fYWNjZXNzKF9fYmVnaW5fdHJpcGxlLCBfX2VuZF90cmlwbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmluYXJ5X29wLCBfX2Z1bmN0aW9uYWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfRHVtbXlSZWR1Y3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kdW1teSwgX19kdW1teSwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYWxsZWxpc21fdGFnKTsKKyAgICAgICAgICByZXR1cm4gX19mdW5jdGlvbmFsaXR5Ll9NX2ZpbmlzaF9pdGVyYXRvcjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gdHJhbnNmb3JtKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX3Jlc3VsdCwgX19iaW5hcnlfb3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uLAorICAgICAgICAgICB0eXBlbmFtZSBfVGFnMSwgdHlwZW5hbWUgX1RhZzIsIHR5cGVuYW1lIF9UYWczPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3RyYW5zZm9ybTJfc3dpdGNoKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCAKKyAgICAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIAorICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3AsIF9UYWcxLCBfVGFnMiwgX1RhZzMpCisgICAgeyByZXR1cm4gdHJhbnNmb3JtKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX3Jlc3VsdCwgX19iaW5hcnlfb3AsCisgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgdHJhbnNmb3JtKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3AsIAorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX0lJdGVyVHJhaXRzMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMTo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICAgICAgX0lJdGVyQ2F0ZWdvcnkxOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXIyPiBfSUl0ZXJUcmFpdHMyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMyOjppdGVyYXRvcl9jYXRlZ29yeQorICAgICAgICBfSUl0ZXJDYXRlZ29yeTI7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyYXRvcj4gX09JdGVyVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfT0l0ZXJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9PSXRlckNhdGVnb3J5OworCisgICAgICByZXR1cm4gX190cmFuc2Zvcm0yX3N3aXRjaCgKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX3Jlc3VsdCwgX19iaW5hcnlfb3AsCisgICAgICAgICAgICAgICBfSUl0ZXJDYXRlZ29yeTEoKSwgX0lJdGVyQ2F0ZWdvcnkyKCksIF9PSXRlckNhdGVnb3J5KCksCisgICAgICAgICAgICAgICBfX3BhcmFsbGVsaXNtX3RhZyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgdHJhbnNmb3JtKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXIxPiBfSUl0ZXJUcmFpdHMxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMxOjppdGVyYXRvcl9jYXRlZ29yeQorICAgICAgICBfSUl0ZXJDYXRlZ29yeTE7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcjI+IF9JSXRlclRyYWl0czI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JSXRlclRyYWl0czI6Oml0ZXJhdG9yX2NhdGVnb3J5CisgICAgICAgIF9JSXRlckNhdGVnb3J5MjsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfT0l0ZXJUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PSXRlclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX09JdGVyQ2F0ZWdvcnk7CisKKyAgICAgIHJldHVybiBfX3RyYW5zZm9ybTJfc3dpdGNoKAorICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fcmVzdWx0LCBfX2JpbmFyeV9vcCwKKyAgICAgICAgICAgICAgIF9JSXRlckNhdGVnb3J5MSgpLCBfSUl0ZXJDYXRlZ29yeTIoKSwgX09JdGVyQ2F0ZWdvcnkoKSk7CisgICAgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgcmVwbGFjZShfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIAorICAgICAgICAgICAgY29uc3QgX1RwJiBfX25ld192YWx1ZSwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgX0dMSUJDWFhfU1REX0E6OnJlcGxhY2UoX19iZWdpbiwgX19lbmQsIF9fb2xkX3ZhbHVlLCBfX25ld192YWx1ZSk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnPgorICAgIGlubGluZSB2b2lkCisgICAgX19yZXBsYWNlX3N3aXRjaChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZykKKyAgICB7IHJlcGxhY2UoX19iZWdpbiwgX19lbmQsIF9fb2xkX3ZhbHVlLCBfX25ld192YWx1ZSwgCisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFBhcmFsbGVsIHJlcGxhY2UgZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fcmVwbGFjZV9zd2l0Y2goX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLCAKKyAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgCisgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZworICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX2JhbGFuY2VkKQorICAgIHsKKyAgICAgIC8vIFhYWCBwYXJhbGxlbCB2ZXJzaW9uIGlzIHdoZXJlPworICAgICAgcmVwbGFjZShfX2JlZ2luLCBfX2VuZCwgX19vbGRfdmFsdWUsIF9fbmV3X3ZhbHVlLCAKKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOyAKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICByZXBsYWNlKF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgCisgICAgICAgICAgICBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlLAorICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgX19yZXBsYWNlX3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX19vbGRfdmFsdWUsIF9fbmV3X3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JDYXRlZ29yeSgpLAorICAgICAgICAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICByZXBsYWNlKF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgCisgICAgICAgICAgICBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9GSXRlcmF0b3I+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICBfX3JlcGxhY2Vfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX29sZF92YWx1ZSwgX19uZXdfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvckNhdGVnb3J5KCkpOworICAgIH0KKworCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgcmVwbGFjZV9pZihfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9QcmVkaWNhdGUgX19wcmVkLCAKKyAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IF9HTElCQ1hYX1NURF9BOjpyZXBsYWNlX2lmKF9fYmVnaW4sIF9fZW5kLCBfX3ByZWQsIF9fbmV3X3ZhbHVlKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwLAorICAgICAgICAgICB0eXBlbmFtZSBfSXRlcmF0b3JUYWc+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3JlcGxhY2VfaWZfc3dpdGNoKF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSwgX0l0ZXJhdG9yVGFnKQorICAgIHsgcmVwbGFjZV9pZihfX2JlZ2luLCBfX2VuZCwgX19wcmVkLCBfX25ld192YWx1ZSwKKyAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOyB9CisKKyAgLy8gUGFyYWxsZWwgYWxnb3JpdGhtIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3JlcGxhY2VfaWZfc3dpdGNoKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnCisgICAgICAgICAgICAgICAgICAgICAgPSBfX2dudV9wYXJhbGxlbDo6cGFyYWxsZWxfYmFsYW5jZWQpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQgLSBfX2JlZ2luKQorICAgICAgICAgICAgPj0gX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkucmVwbGFjZV9taW5pbWFsX24KKyAgICAgICAgICAgICYmIF9fZ251X3BhcmFsbGVsOjpfX2lzX3BhcmFsbGVsKF9fcGFyYWxsZWxpc21fdGFnKSkpCisgICAgICAgIHsKKyAgICAgICAgICBib29sIF9fZHVtbXk7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgX19yZXBsYWNlX2lmX3NlbGVjdG9yPF9SQUl0ZXIsIF9QcmVkaWNhdGUsIF9UcD4KKyAgICAgICAgICAgIF9fZnVuY3Rpb25hbGl0eShfX25ld192YWx1ZSk7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgX19mb3JfZWFjaF90ZW1wbGF0ZV9yYW5kb21fYWNjZXNzKAorICAgICAgICAgICAgICBfX2JlZ2luLCBfX2VuZCwgX19wcmVkLCBfX2Z1bmN0aW9uYWxpdHksCisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfRHVtbXlSZWR1Y3QoKSwKKyAgICAgICAgICAgICAgdHJ1ZSwgX19kdW1teSwgLTEsIF9fcGFyYWxsZWxpc21fdGFnKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXBsYWNlX2lmKF9fYmVnaW4sIF9fZW5kLCBfX3ByZWQsIF9fbmV3X3ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHJlcGxhY2VfaWYoX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLAorICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUsIAorICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9GSXRlcmF0b3I+IF9JdGVyYXRvclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIF9fcmVwbGFjZV9pZl9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9fcHJlZCwgX19uZXdfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvckNhdGVnb3J5KCksIF9fcGFyYWxsZWxpc21fdGFnKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgcmVwbGFjZV9pZihfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsCisgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9GSXRlcmF0b3I+IF9JdGVyYXRvclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIF9fcmVwbGFjZV9pZl9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9fcHJlZCwgX19uZXdfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvckNhdGVnb3J5KCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBnZW5lcmF0ZShfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9HZW5lcmF0b3IgX19nZW4sIAorICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IF9HTElCQ1hYX1NURF9BOjpnZW5lcmF0ZShfX2JlZ2luLCBfX2VuZCwgX19nZW4pOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX0dlbmVyYXRvciwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnPgorICAgIGlubGluZSB2b2lkCisgICAgX19nZW5lcmF0ZV9zd2l0Y2goX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLCBfR2VuZXJhdG9yIF9fZ2VuLAorICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JUYWcpCisgICAgeyBnZW5lcmF0ZShfX2JlZ2luLCBfX2VuZCwgX19nZW4sIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CisgICAgdm9pZAorICAgIF9fZ2VuZXJhdGVfc3dpdGNoKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgX0dlbmVyYXRvciBfX2dlbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIAorICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnCisgICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX2JhbGFuY2VkKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLmdlbmVyYXRlX21pbmltYWxfbgorICAgICAgICAgICAgJiYgX19nbnVfcGFyYWxsZWw6Ol9faXNfcGFyYWxsZWwoX19wYXJhbGxlbGlzbV90YWcpKSkKKyAgICAgICAgeworICAgICAgICAgIGJvb2wgX19kdW1teTsKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X19nZW5lcmF0ZV9zZWxlY3RvcjxfUkFJdGVyPgorICAgICAgICAgICAgX19mdW5jdGlvbmFsaXR5OworICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjoKKyAgICAgICAgICAgIF9fZm9yX2VhY2hfdGVtcGxhdGVfcmFuZG9tX2FjY2VzcygKKyAgICAgICAgICAgICAgX19iZWdpbiwgX19lbmQsIF9fZ2VuLCBfX2Z1bmN0aW9uYWxpdHksCisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfRHVtbXlSZWR1Y3QoKSwKKyAgICAgICAgICAgICAgdHJ1ZSwgX19kdW1teSwgLTEsIF9fcGFyYWxsZWxpc21fdGFnKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBnZW5lcmF0ZShfX2JlZ2luLCBfX2VuZCwgX19nZW4sIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIGdlbmVyYXRlKF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwKKyAgICAgICAgICAgICBfR2VuZXJhdG9yIF9fZ2VuLCBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0ZJdGVyYXRvcj4gX0l0ZXJhdG9yVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3JUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgX19nZW5lcmF0ZV9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9fZ2VuLCBfSXRlcmF0b3JDYXRlZ29yeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgZ2VuZXJhdGUoX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLCBfR2VuZXJhdG9yIF9fZ2VuKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0ZJdGVyYXRvcj4gX0l0ZXJhdG9yVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3JUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgX19nZW5lcmF0ZV9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9fZ2VuLCBfSXRlcmF0b3JDYXRlZ29yeSgpKTsKKyAgICB9CisKKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyYXRvciBfX2JlZ2luLCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4sIAorICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpnZW5lcmF0ZV9uKF9fYmVnaW4sIF9fbiwgX19nZW4pOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0dlbmVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX2dlbmVyYXRlX25fc3dpdGNoKF9PdXRwdXRJdGVyYXRvciBfX2JlZ2luLCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JUYWcpCisgICAgeyByZXR1cm4gZ2VuZXJhdGVfbihfX2JlZ2luLCBfX24sIF9fZ2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOyB9CisKKyAgLy8gUGFyYWxsZWwgYWxnb3JpdGhtIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CisgICAgaW5saW5lIF9SQUl0ZXIKKyAgICBfX2dlbmVyYXRlX25fc3dpdGNoKF9SQUl0ZXIgX19iZWdpbiwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuLCAKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgCisgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZworICAgICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX2JhbGFuY2VkKQorICAgIHsKKyAgICAgIC8vIFhYWCBwYXJhbGxlbCB2ZXJzaW9uIGlzIHdoZXJlPworICAgICAgcmV0dXJuIGdlbmVyYXRlX24oX19iZWdpbiwgX19uLCBfX2dlbiwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyYXRvciBfX2JlZ2luLCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4sIAorICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyYXRvcj4gX0l0ZXJhdG9yVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3JUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgcmV0dXJuIF9fZ2VuZXJhdGVfbl9zd2l0Y2goX19iZWdpbiwgX19uLCBfX2dlbiwgX0l0ZXJhdG9yQ2F0ZWdvcnkoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOyAKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlcmF0b3IgX19iZWdpbiwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfSXRlcmF0b3JUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICByZXR1cm4gX19nZW5lcmF0ZV9uX3N3aXRjaChfX2JlZ2luLCBfX24sIF9fZ2VuLCBfSXRlcmF0b3JDYXRlZ29yeSgpKTsKKyAgICB9CisKKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIGlubGluZSB2b2lkCisgICAgcmFuZG9tX3NodWZmbGUoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLCAKKyAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyBfR0xJQkNYWF9TVERfQTo6cmFuZG9tX3NodWZmbGUoX19iZWdpbiwgX19lbmQpOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHJhbmRvbV9zaHVmZmxlKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQsCisgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgX0dMSUJDWFhfU1REX0E6OnJhbmRvbV9zaHVmZmxlKF9fYmVnaW4sIF9fZW5kLCBfX3JhbmQpOyB9CisKKworICAvKiogQGJyaWVmIEZ1bmN0b3Igd3JhcHBlciBmb3Igc3RkOjpyYW5kKCkuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NdXN0QmVJbnQgPSBpbnQ+CisgICAgc3RydWN0IF9DUmFuZE51bWJlcgorICAgIHsKKyAgICAgIGludAorICAgICAgb3BlcmF0b3IoKShpbnQgX19saW1pdCkKKyAgICAgIHsgcmV0dXJuIHJhbmQoKSAlIF9fbGltaXQ7IH0KKyAgICB9OworCisgIC8vIEZpbGwgaW4gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgaW5saW5lIHZvaWQKKyAgICByYW5kb21fc2h1ZmZsZShfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQpCisgICAgeworICAgICAgX0NSYW5kTnVtYmVyPD4gX19yOworICAgICAgLy8gUGFyYWxsZWxpemF0aW9uIHN0aWxsIHBvc3NpYmxlLgorICAgICAgX19nbnVfcGFyYWxsZWw6OnJhbmRvbV9zaHVmZmxlKF9fYmVnaW4sIF9fZW5kLCBfX3IpOworICAgIH0KKworICAvLyBQYXJhbGxlbCBhbGdvcml0aG0gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgIHZvaWQKKyAgICByYW5kb21fc2h1ZmZsZShfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImJiBfX3JhbmQpCisjZWxzZQorICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKKyNlbmRpZgorICAgIHsKKyAgICAgIGlmIChfX2JlZ2luID09IF9fZW5kKQorICAgICAgICByZXR1cm47CisgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X19nbnVfcGFyYWxsZWw6Ol9TZXF1ZW5jZUluZGV4PihfX2VuZCAtIF9fYmVnaW4pCisgICAgICAgICAgICA+PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5yYW5kb21fc2h1ZmZsZV9taW5pbWFsX24pKQorICAgICAgICBfX2dudV9wYXJhbGxlbDo6X19wYXJhbGxlbF9yYW5kb21fc2h1ZmZsZShfX2JlZ2luLCBfX2VuZCwgX19yYW5kKTsKKyAgICAgIGVsc2UKKyAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9fc2VxdWVudGlhbF9yYW5kb21fc2h1ZmZsZShfX2JlZ2luLCBfX2VuZCwgX19yYW5kKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIHBhcnRpdGlvbihfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsCisgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnBhcnRpdGlvbihfX2JlZ2luLCBfX2VuZCwgX19wcmVkKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9JdGVyYXRvclRhZz4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIF9fcGFydGl0aW9uX3N3aXRjaChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsCisgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0l0ZXJhdG9yVGFnKQorICAgIHsgcmV0dXJuIHBhcnRpdGlvbihfX2JlZ2luLCBfX2VuZCwgX19wcmVkLAorICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7IH0KKworICAvLyBQYXJhbGxlbCBhbGdvcml0aG0gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9SQUl0ZXIKKyAgICBfX3BhcnRpdGlvbl9zd2l0Y2goX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnBhcnRpdGlvbl9taW5pbWFsX24pKQorICAgICAgICB7CisgICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPjo6CisgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworICAgICAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX21pZGRsZSA9IF9fZ251X3BhcmFsbGVsOjoKKyAgICAgICAgICAgIF9fcGFyYWxsZWxfcGFydGl0aW9uKF9fYmVnaW4sIF9fZW5kLCBfX3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9fZ2V0X21heF90aHJlYWRzKCkpOworICAgICAgICAgIHJldHVybiBfX2JlZ2luICsgX19taWRkbGU7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHBhcnRpdGlvbihfX2JlZ2luLCBfX2VuZCwgX19wcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIHBhcnRpdGlvbihfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9GSXRlcmF0b3I+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICByZXR1cm4gX19wYXJ0aXRpb25fc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX3ByZWQsIF9JdGVyYXRvckNhdGVnb3J5KCkpOworICAgIH0KKworICAvLyBzb3J0IGludGVyZmFjZQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHNvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLCAKKyAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IF9HTElCQ1hYX1NURF9BOjpzb3J0KF9fYmVnaW4sIF9fZW5kKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBzb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwgX0NvbXBhcmUgX19jb21wLAorICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgX0dMSUJDWFhfU1REX0E6OnNvcnQ8X1JBSXRlciwgX0NvbXBhcmU+KF9fYmVnaW4sIF9fZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7IH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlLAorICAgICAgICAgICB0eXBlbmFtZSBfUGFyYWxsZWxpc20+CisgIHZvaWQKKyAgc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsIF9Db21wYXJlIF9fY29tcCwKKyAgICAgICBfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbSkKKyAgeworICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgIGlmIChfX2JlZ2luICE9IF9fZW5kKQorICAgICAgeworICAgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X19nbnVfcGFyYWxsZWw6Ol9TZXF1ZW5jZUluZGV4PihfX2VuZCAtIF9fYmVnaW4pID49CisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnNvcnRfbWluaW1hbF9uKSkKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X19wYXJhbGxlbF9zb3J0PGZhbHNlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlZ2luLCBfX2VuZCwgX19jb21wLCBfX3BhcmFsbGVsaXNtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHNvcnQoX19iZWdpbiwgX19lbmQsIF9fY29tcCwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOworICAgICAgfQorICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZSwgaW5zZXJ0IGRlZmF1bHQgY29tcGFyYXRvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIGlubGluZSB2b2lkCisgICAgc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQpCisgICAgeworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICBzb3J0KF9fYmVnaW4sIF9fZW5kLCBzdGQ6Omxlc3M8X1ZhbHVlVHlwZT4oKSwKKyAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OmRlZmF1bHRfcGFyYWxsZWxfdGFnKCkpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLCBpbnNlcnQgZGVmYXVsdCBjb21wYXJhdG9yCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgIGlubGluZSB2b2lkCisgIHNvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorICAgICAgIF9fZ251X3BhcmFsbGVsOjpkZWZhdWx0X3BhcmFsbGVsX3RhZyBfX3BhcmFsbGVsaXNtKQorICB7CisgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgIHNvcnQoX19iZWdpbiwgX19lbmQsIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpLCBfX3BhcmFsbGVsaXNtKTsKKyAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgaW5saW5lIHZvaWQKKyAgc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisgICAgICAgX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX3RhZyBfX3BhcmFsbGVsaXNtKQorICB7CisgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgIHNvcnQoX19iZWdpbiwgX19lbmQsIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpLCBfX3BhcmFsbGVsaXNtKTsKKyAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgaW5saW5lIHZvaWQKKyAgc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisgICAgICAgX19nbnVfcGFyYWxsZWw6Om11bHRpd2F5X21lcmdlc29ydF90YWcgX19wYXJhbGxlbGlzbSkKKyAgeworICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICBzb3J0KF9fYmVnaW4sIF9fZW5kLCBzdGQ6Omxlc3M8X1ZhbHVlVHlwZT4oKSwgX19wYXJhbGxlbGlzbSk7CisgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLCBpbnNlcnQgZGVmYXVsdCBjb21wYXJhdG9yCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgIGlubGluZSB2b2lkCisgIHNvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorICAgICAgIF9fZ251X3BhcmFsbGVsOjptdWx0aXdheV9tZXJnZXNvcnRfc2FtcGxpbmdfdGFnIF9fcGFyYWxsZWxpc20pCisgIHsKKyAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgc29ydChfX2JlZ2luLCBfX2VuZCwgc3RkOjpsZXNzPF9WYWx1ZVR5cGU+KCksIF9fcGFyYWxsZWxpc20pOworICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZSwgaW5zZXJ0IGRlZmF1bHQgY29tcGFyYXRvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICBpbmxpbmUgdm9pZAorICBzb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICBfX2dudV9wYXJhbGxlbDo6bXVsdGl3YXlfbWVyZ2Vzb3J0X2V4YWN0X3RhZyBfX3BhcmFsbGVsaXNtKQorICB7CisgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgIHNvcnQoX19iZWdpbiwgX19lbmQsIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpLCBfX3BhcmFsbGVsaXNtKTsKKyAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgaW5saW5lIHZvaWQKKyAgc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisgICAgICAgX19nbnVfcGFyYWxsZWw6OnF1aWNrc29ydF90YWcgX19wYXJhbGxlbGlzbSkKKyAgeworICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICBzb3J0KF9fYmVnaW4sIF9fZW5kLCBzdGQ6Omxlc3M8X1ZhbHVlVHlwZT4oKSwgX19wYXJhbGxlbGlzbSk7CisgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLCBpbnNlcnQgZGVmYXVsdCBjb21wYXJhdG9yCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgIGlubGluZSB2b2lkCisgIHNvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorICAgICAgIF9fZ251X3BhcmFsbGVsOjpiYWxhbmNlZF9xdWlja3NvcnRfdGFnIF9fcGFyYWxsZWxpc20pCisgIHsKKyAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgc29ydChfX2JlZ2luLCBfX2VuZCwgc3RkOjpsZXNzPF9WYWx1ZVR5cGU+KCksIF9fcGFyYWxsZWxpc20pOworICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICBzb3J0KF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsIF9fZ251X3BhcmFsbGVsOjpkZWZhdWx0X3BhcmFsbGVsX3RhZygpKTsKKyAgfQorCisKKyAgLy8gc3RhYmxlX3NvcnQgaW50ZXJmYWNlCisKKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgIGlubGluZSB2b2lkCisgIHN0YWJsZV9zb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgIHsgX0dMSUJDWFhfU1REX0E6OnN0YWJsZV9zb3J0KF9fYmVnaW4sIF9fZW5kKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgIGlubGluZSB2b2lkCisgIHN0YWJsZV9zb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgIHsgX0dMSUJDWFhfU1REX0E6OnN0YWJsZV9zb3J0PF9SQUl0ZXIsIF9Db21wYXJlPigKKyAgICAgIF9fYmVnaW4sIF9fZW5kLCBfX2NvbXApOyB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX1BhcmFsbGVsaXNtPgorICB2b2lkCisgIHN0YWJsZV9zb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbSkKKyAgeworICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgIGlmIChfX2JlZ2luICE9IF9fZW5kKQorICAgICAgeworICAgICAgICBpZiAoX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikgPj0KKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkuc29ydF9taW5pbWFsX24pKQorICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX3NvcnQ8dHJ1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbiwgX19lbmQsIF9fY29tcCwgX19wYXJhbGxlbGlzbSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdGFibGVfc29ydChfX2JlZ2luLCBfX2VuZCwgX19jb21wLAorICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICAgIH0KKyAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgaW5saW5lIHZvaWQKKyAgc3RhYmxlX3NvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kKQorICB7CisgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgIHN0YWJsZV9zb3J0KF9fYmVnaW4sIF9fZW5kLCBzdGQ6Omxlc3M8X1ZhbHVlVHlwZT4oKSwKKyAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6ZGVmYXVsdF9wYXJhbGxlbF90YWcoKSk7CisgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLCBpbnNlcnQgZGVmYXVsdCBjb21wYXJhdG9yCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgIGlubGluZSB2b2lkCisgIHN0YWJsZV9zb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OmRlZmF1bHRfcGFyYWxsZWxfdGFnIF9fcGFyYWxsZWxpc20pCisgIHsKKyAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgc3RhYmxlX3NvcnQoX19iZWdpbiwgX19lbmQsIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpLCBfX3BhcmFsbGVsaXNtKTsKKyAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgaW5saW5lIHZvaWQKKyAgc3RhYmxlX3NvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6cGFyYWxsZWxfdGFnIF9fcGFyYWxsZWxpc20pCisgIHsKKyAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgc3RhYmxlX3NvcnQoX19iZWdpbiwgX19lbmQsIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpLCBfX3BhcmFsbGVsaXNtKTsKKyAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgaW5saW5lIHZvaWQKKyAgc3RhYmxlX3NvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6bXVsdGl3YXlfbWVyZ2Vzb3J0X3RhZyBfX3BhcmFsbGVsaXNtKQorICB7CisgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgIHN0YWJsZV9zb3J0KF9fYmVnaW4sIF9fZW5kLCBzdGQ6Omxlc3M8X1ZhbHVlVHlwZT4oKSwgX19wYXJhbGxlbGlzbSk7CisgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLCBpbnNlcnQgZGVmYXVsdCBjb21wYXJhdG9yCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgIGlubGluZSB2b2lkCisgIHN0YWJsZV9zb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnF1aWNrc29ydF90YWcgX19wYXJhbGxlbGlzbSkKKyAgeworICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICBzdGFibGVfc29ydChfX2JlZ2luLCBfX2VuZCwgc3RkOjpsZXNzPF9WYWx1ZVR5cGU+KCksIF9fcGFyYWxsZWxpc20pOworICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZSwgaW5zZXJ0IGRlZmF1bHQgY29tcGFyYXRvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICBpbmxpbmUgdm9pZAorICBzdGFibGVfc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpiYWxhbmNlZF9xdWlja3NvcnRfdGFnIF9fcGFyYWxsZWxpc20pCisgIHsKKyAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgc3RhYmxlX3NvcnQoX19iZWdpbiwgX19lbmQsIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpLCBfX3BhcmFsbGVsaXNtKTsKKyAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgIHZvaWQKKyAgc3RhYmxlX3NvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCisgIHsKKyAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgc3RhYmxlX3NvcnQoCisgICAgICBfX2JlZ2luLCBfX2VuZCwgX19jb21wLCBfX2dudV9wYXJhbGxlbDo6ZGVmYXVsdF9wYXJhbGxlbF90YWcoKSk7CisgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgbWVyZ2UoX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIF9JSXRlcjIgX19iZWdpbjIsIAorICAgICAgICAgIF9JSXRlcjIgX19lbmQyLCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjptZXJnZSgKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fcmVzdWx0KTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgbWVyZ2UoX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIF9JSXRlcjIgX19iZWdpbjIsCisgICAgICAgICAgX0lJdGVyMiBfX2VuZDIsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wLAorICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6bWVyZ2UoCisgICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19yZXN1bHQsIF9fY29tcCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzEsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvclRhZzIsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzM+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fbWVyZ2Vfc3dpdGNoKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXAsCisgICAgICAgICAgICAgICAgIF9JdGVyYXRvclRhZzEsIF9JdGVyYXRvclRhZzIsIF9JdGVyYXRvclRhZzMpCisgICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjptZXJnZShfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fY29tcCk7IH0KKworICAvLyBQYXJhbGxlbCBhbGdvcml0aG0gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX19tZXJnZV9zd2l0Y2goX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIAorICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwgCisgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wLCAKKyAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCAKKyAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kMSAtIF9fYmVnaW4xKQorICAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm1lcmdlX21pbmltYWxfbgorICAgICAgICAgICAgIHx8IHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQyIC0gX19iZWdpbjIpCisgICAgICAgICAgICAgPj0gX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkubWVyZ2VfbWluaW1hbF9uKSkpCisgICAgICAgIHJldHVybiBfX2dudV9wYXJhbGxlbDo6X19wYXJhbGxlbF9tZXJnZV9hZHZhbmNlKAorICAgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgKF9fZW5kMSAtIF9fYmVnaW4xKSArIChfX2VuZDIgLSBfX2JlZ2luMiksIF9fY29tcCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2dudV9wYXJhbGxlbDo6X19tZXJnZV9hZHZhbmNlKAorICAgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgKF9fZW5kMSAtIF9fYmVnaW4xKSArIChfX2VuZDIgLSBfX2JlZ2luMiksIF9fY29tcCk7CisgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIG1lcmdlKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCBfSUl0ZXIyIF9fYmVnaW4yLCAKKyAgICAgICAgICBfSUl0ZXIyIF9fZW5kMiwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXIxPiBfSUl0ZXJUcmFpdHMxOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXIyPiBfSUl0ZXJUcmFpdHMyOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcmF0b3I+IF9PSXRlclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lJdGVyVHJhaXRzMTo6aXRlcmF0b3JfY2F0ZWdvcnkKKyAgICAgICAgX0lJdGVyQ2F0ZWdvcnkxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSUl0ZXJUcmFpdHMyOjppdGVyYXRvcl9jYXRlZ29yeQorICAgICAgICBfSUl0ZXJDYXRlZ29yeTI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PSXRlclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX09JdGVyQ2F0ZWdvcnk7CisKKyAgICAgIHJldHVybiBfX21lcmdlX3N3aXRjaCgKKyAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19yZXN1bHQsIF9fY29tcCwKKyAgICAgICAgICAgICAgX0lJdGVyQ2F0ZWdvcnkxKCksIF9JSXRlckNhdGVnb3J5MigpLCBfT0l0ZXJDYXRlZ29yeSgpKTsKKyAgfQorCisKKyAgLy8gUHVibGljIGludGVyZmFjZSwgaW5zZXJ0IGRlZmF1bHQgY29tcGFyYXRvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIG1lcmdlKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCBfSUl0ZXIyIF9fYmVnaW4yLCAKKyAgICAgICAgICBfSUl0ZXIyIF9fZW5kMiwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX0l0ZXJhdG9yMVRyYWl0czsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMj4gX0l0ZXJhdG9yMlRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yMVRyYWl0czo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yMlRyYWl0czo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKKworICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjptZXJnZShfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLAorICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fZ251X3BhcmFsbGVsOjpfTGVzczxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgaW5saW5lIHZvaWQKKyAgICBudGhfZWxlbWVudChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19udGgsIAorICAgICAgICAgICAgICAgIF9SQUl0ZXIgX19lbmQsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6bnRoX2VsZW1lbnQoX19iZWdpbiwgX19udGgsIF9fZW5kKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBudGhfZWxlbWVudChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19udGgsIAorICAgICAgICAgICAgICAgIF9SQUl0ZXIgX19lbmQsIF9Db21wYXJlIF9fY29tcCwgCisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6bnRoX2VsZW1lbnQoX19iZWdpbiwgX19udGgsIF9fZW5kLCBfX2NvbXApOyB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIG50aF9lbGVtZW50KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX250aCwgCisgICAgICAgICAgICAgICAgX1JBSXRlciBfX2VuZCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm50aF9lbGVtZW50X21pbmltYWxfbikpCisgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX250aF9lbGVtZW50KF9fYmVnaW4sIF9fbnRoLCBfX2VuZCwgX19jb21wKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbnRoX2VsZW1lbnQoX19iZWdpbiwgX19udGgsIF9fZW5kLCBfX2NvbXAsCisgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZSwgaW5zZXJ0IGRlZmF1bHQgY29tcGFyYXRvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIGlubGluZSB2b2lkCisgICAgbnRoX2VsZW1lbnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fbnRoLCAKKyAgICAgICAgICAgICAgICBfUkFJdGVyIF9fZW5kKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgX19nbnVfcGFyYWxsZWw6Om50aF9lbGVtZW50KF9fYmVnaW4sIF9fbnRoLCBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omxlc3M8X1ZhbHVlVHlwZT4oKSk7CisgICAgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBwYXJ0aWFsX3NvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fbWlkZGxlLCAKKyAgICAgICAgICAgICAgICAgX1JBSXRlciBfX2VuZCwgX0NvbXBhcmUgX19jb21wLAorICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyBfR0xJQkNYWF9TVERfQTo6cGFydGlhbF9zb3J0KF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCwgX19jb21wKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHBhcnRpYWxfc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19taWRkbGUsIAorICAgICAgICAgICAgICAgICBfUkFJdGVyIF9fZW5kLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyBfR0xJQkNYWF9TVERfQTo6cGFydGlhbF9zb3J0KF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7IH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlLCBwYXJhbGxlbCBhbGdvcml0aG0gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBwYXJ0aWFsX3NvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fbWlkZGxlLCAKKyAgICAgICAgICAgICAgICAgX1JBSXRlciBfX2VuZCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLnBhcnRpYWxfc29ydF9taW5pbWFsX24pKQorICAgICAgICBfX2dudV9wYXJhbGxlbDo6CisgICAgICAgICAgX19wYXJhbGxlbF9wYXJ0aWFsX3NvcnQoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kLCBfX2NvbXApOworICAgICAgZWxzZQorICAgICAgICBwYXJ0aWFsX3NvcnQoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kLCBfX2NvbXAsCisgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHBhcnRpYWxfc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19taWRkbGUsIAorICAgICAgICAgICAgICAgICBfUkFJdGVyIF9fZW5kKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgX19nbnVfcGFyYWxsZWw6OnBhcnRpYWxfc29ydChfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpKTsKKyAgICB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yPgorICAgIGlubGluZSBfRkl0ZXJhdG9yCisgICAgbWF4X2VsZW1lbnQoX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLCAKKyAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6Om1heF9lbGVtZW50KF9fYmVnaW4sIF9fZW5kKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBtYXhfZWxlbWVudChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9Db21wYXJlIF9fY29tcCwgCisgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjptYXhfZWxlbWVudChfX2JlZ2luLCBfX2VuZCwgX19jb21wKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9JdGVyYXRvclRhZz4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIF9fbWF4X2VsZW1lbnRfc3dpdGNoKF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgCisgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0l0ZXJhdG9yVGFnKQorICAgIHsgcmV0dXJuIG1heF9lbGVtZW50KF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOyB9CisKKyAgLy8gUGFyYWxsZWwgYWxnb3JpdGhtIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyCisgICAgX19tYXhfZWxlbWVudF9zd2l0Y2goX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLCAKKyAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgCisgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbV90YWcKKyAgICAgICAgICAgICAgICAgICAgICAgPSBfX2dudV9wYXJhbGxlbDo6cGFyYWxsZWxfYmFsYW5jZWQpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQgLSBfX2JlZ2luKQorICAgICAgICAgICAgPj0gX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkubWF4X2VsZW1lbnRfbWluaW1hbF9uCisgICAgICAgICAgICAmJiBfX2dudV9wYXJhbGxlbDo6X19pc19wYXJhbGxlbChfX3BhcmFsbGVsaXNtX3RhZykpKQorICAgICAgICB7CisgICAgICAgICAgX1JBSXRlciBfX3JlcyhfX2JlZ2luKTsKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X19pZGVudGl0eV9zZWxlY3RvcjxfUkFJdGVyPgorICAgICAgICAgICAgX19mdW5jdGlvbmFsaXR5OworICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjoKKyAgICAgICAgICAgIF9fZm9yX2VhY2hfdGVtcGxhdGVfcmFuZG9tX2FjY2VzcygKKyAgICAgICAgICAgICAgX19iZWdpbiwgX19lbmQsIF9fZ251X3BhcmFsbGVsOjpfTm90aGluZygpLCBfX2Z1bmN0aW9uYWxpdHksCisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX21heF9lbGVtZW50X3JlZHVjdDxfQ29tcGFyZSwgX1JBSXRlcj4oX19jb21wKSwKKyAgICAgICAgICAgICAgX19yZXMsIF9fcmVzLCAtMSwgX19wYXJhbGxlbGlzbV90YWcpOworICAgICAgICAgIHJldHVybiBfX3JlczsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gbWF4X2VsZW1lbnQoX19iZWdpbiwgX19lbmQsIF9fY29tcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZSwgaW5zZXJ0IGRlZmF1bHQgY29tcGFyYXRvcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yPgorICAgIGlubGluZSBfRkl0ZXJhdG9yCisgICAgbWF4X2VsZW1lbnQoX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLCAKKyAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9GSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICByZXR1cm4gbWF4X2VsZW1lbnQoX19iZWdpbiwgX19lbmQsIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYWxsZWxpc21fdGFnKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvcj4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIG1heF9lbGVtZW50KF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjptYXhfZWxlbWVudChfX2JlZ2luLCBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsZXNzPF9WYWx1ZVR5cGU+KCkpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBfRkl0ZXJhdG9yCisgICAgbWF4X2VsZW1lbnQoX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLCBfQ29tcGFyZSBfX2NvbXAsCisgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgcmV0dXJuIF9fbWF4X2VsZW1lbnRfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsIF9JdGVyYXRvckNhdGVnb3J5KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYWxsZWxpc21fdGFnKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBtYXhfZWxlbWVudChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgcmV0dXJuIF9fbWF4X2VsZW1lbnRfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsIF9JdGVyYXRvckNhdGVnb3J5KCkpOworICAgIH0KKworCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvcj4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIG1pbl9lbGVtZW50KF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgCisgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjptaW5fZWxlbWVudChfX2JlZ2luLCBfX2VuZCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBfRkl0ZXJhdG9yCisgICAgbWluX2VsZW1lbnQoX0ZJdGVyYXRvciBfX2JlZ2luLCBfRkl0ZXJhdG9yIF9fZW5kLCBfQ29tcGFyZSBfX2NvbXAsIAorICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6bWluX2VsZW1lbnQoX19iZWdpbiwgX19lbmQsIF9fY29tcCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfSXRlcmF0b3JUYWc+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBfX21pbl9lbGVtZW50X3N3aXRjaChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQsIAorICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9JdGVyYXRvclRhZykKKyAgICB7IHJldHVybiBtaW5fZWxlbWVudChfX2JlZ2luLCBfX2VuZCwgX19jb21wLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlcgorICAgIF9fbWluX2VsZW1lbnRfc3dpdGNoKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwgCisgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIAorICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnCisgICAgICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX2JhbGFuY2VkKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm1pbl9lbGVtZW50X21pbmltYWxfbgorICAgICAgICAgICAgJiYgX19nbnVfcGFyYWxsZWw6Ol9faXNfcGFyYWxsZWwoX19wYXJhbGxlbGlzbV90YWcpKSkKKyAgICAgICAgeworICAgICAgICAgIF9SQUl0ZXIgX19yZXMoX19iZWdpbik7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9faWRlbnRpdHlfc2VsZWN0b3I8X1JBSXRlcj4KKyAgICAgICAgICAgIF9fZnVuY3Rpb25hbGl0eTsKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6CisgICAgICAgICAgICBfX2Zvcl9lYWNoX3RlbXBsYXRlX3JhbmRvbV9hY2Nlc3MoCisgICAgICAgICAgICAgIF9fYmVnaW4sIF9fZW5kLCBfX2dudV9wYXJhbGxlbDo6X05vdGhpbmcoKSwgX19mdW5jdGlvbmFsaXR5LAorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X19taW5fZWxlbWVudF9yZWR1Y3Q8X0NvbXBhcmUsIF9SQUl0ZXI+KF9fY29tcCksCisgICAgICAgICAgICAgIF9fcmVzLCBfX3JlcywgLTEsIF9fcGFyYWxsZWxpc21fdGFnKTsKKyAgICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1pbl9lbGVtZW50KF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UsIGluc2VydCBkZWZhdWx0IGNvbXBhcmF0b3IKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyYXRvcj4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIG1pbl9lbGVtZW50KF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgCisgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRkl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgcmV0dXJuIG1pbl9lbGVtZW50KF9fYmVnaW4sIF9fZW5kLCBzdGQ6Omxlc3M8X1ZhbHVlVHlwZT4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFsbGVsaXNtX3RhZyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcmF0b3I+CisgICAgaW5saW5lIF9GSXRlcmF0b3IKKyAgICBtaW5fZWxlbWVudChfRkl0ZXJhdG9yIF9fYmVnaW4sIF9GSXRlcmF0b3IgX19lbmQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICAgIHJldHVybiBfX2dudV9wYXJhbGxlbDo6bWluX2VsZW1lbnQoX19iZWdpbiwgX19lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bGVzczxfVmFsdWVUeXBlPigpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIG1pbl9lbGVtZW50KF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgX0NvbXBhcmUgX19jb21wLAorICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbV90YWcpCisgICAgeworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0ZJdGVyYXRvcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX21pbl9lbGVtZW50X3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX19jb21wLCBfSXRlcmF0b3JDYXRlZ29yeSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbGxlbGlzbV90YWcpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX0ZJdGVyYXRvcgorICAgIG1pbl9lbGVtZW50KF9GSXRlcmF0b3IgX19iZWdpbiwgX0ZJdGVyYXRvciBfX2VuZCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9GSXRlcmF0b3I+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnk7CisgICAgICByZXR1cm4gX19taW5fZWxlbWVudF9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9fY29tcCwgX0l0ZXJhdG9yQ2F0ZWdvcnkoKSk7CisgICAgfQorfSAvLyBlbmQgbmFtZXNwYWNlCit9IC8vIGVuZCBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX0FMR09fSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9hbGdvYmFzZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9hbGdvYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNzM3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2FsZ29iYXNlLmgKQEAgLTAsMCArMSwyNzggQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9hbGdvYmFzZS5oCisgKiAgQGJyaWVmIFBhcmFsbGVsIFNUTCBmdW5jdGlvbiBjYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZQorICogIHN0bF9hbGdvYmFzZS5oIGhlYWRlci4gIFRoZSBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIG1haW5seSBkbyBjYXNlCisgKiAgc3dpdGNoZXMgYW5kIGNhbGwgdGhlIGFjdHVhbCBwYXJhbGxlbGl6ZWQgdmVyc2lvbnMgaW4gb3RoZXIgZmlsZXMuCisgKiAgSW5saW5pbmcgcG9saWN5OiBGdW5jdGlvbnMgdGhhdCBiYXNpY2FsbHkgb25seSBjb250YWluIG9uZQorICogIGZ1bmN0aW9uIGNhbGwsIGFyZSBkZWNsYXJlZCBpbmxpbmUuCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBKb2hhbm5lcyBTaW5nbGVyIGFuZCBGZWxpeCBQdXR6ZS4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9BTEdPQkFTRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX0FMR09CQVNFX0ggMQorCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9iYXNlLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvYWxnb3JpdGhtZndkLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvZmluZC5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL2ZpbmRfc2VsZWN0b3JzLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fcGFyYWxsZWwKK3sKKyAgLy8gTkI6IGVxdWFsIGFuZCBsZXhpY29ncmFwaGljYWxfY29tcGFyZSByZXF1aXJlIG1pc21hdGNoLgorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMj4KKyAgICBpbmxpbmUgcGFpcjxfSUl0ZXIxLCBfSUl0ZXIyPgorICAgIG1pc21hdGNoKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCBfSUl0ZXIyIF9fYmVnaW4yLAorICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6bWlzbWF0Y2goX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIpOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjaworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBwYWlyPF9JSXRlcjEsIF9JSXRlcjI+CisgICAgbWlzbWF0Y2goX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIF9JSXRlcjIgX19iZWdpbjIsCisgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6bWlzbWF0Y2goX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fcHJlZCk7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrIGZvciBpbnB1dCBpdGVyYXRvciBjYXNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzEsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzI+CisgICAgaW5saW5lIHBhaXI8X0lJdGVyMSwgX0lJdGVyMj4KKyAgICBfX21pc21hdGNoX3N3aXRjaChfSUl0ZXIxIF9fYmVnaW4xLCBfSUl0ZXIxIF9fZW5kMSwgX0lJdGVyMiBfX2JlZ2luMiwKKyAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0l0ZXJhdG9yVGFnMSwgX0l0ZXJhdG9yVGFnMikKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6bWlzbWF0Y2goX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fcHJlZCk7IH0KKworICAvLyBQYXJhbGxlbCBtaXNtYXRjaCBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIHBhaXI8X1JBSXRlcjEsIF9SQUl0ZXIyPgorICAgIF9fbWlzbWF0Y2hfc3dpdGNoKF9SQUl0ZXIxIF9fYmVnaW4xLCBfUkFJdGVyMSBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICAgX1JBSXRlcjIgX19iZWdpbjIsIF9QcmVkaWNhdGUgX19wcmVkLCAKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTih0cnVlKSkKKyAgICAgICAgeworICAgICAgICAgIF9SQUl0ZXIxIF9fcmVzID0KKyAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX2ZpbmRfdGVtcGxhdGUoX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pc21hdGNoX3NlbGVjdG9yKCkpLmZpcnN0OworICAgICAgICAgIHJldHVybiBtYWtlX3BhaXIoX19yZXMgLCBfX2JlZ2luMiArIChfX3JlcyAtIF9fYmVnaW4xKSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjptaXNtYXRjaChfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19wcmVkKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIGlubGluZSBwYWlyPF9JSXRlcjEsIF9JSXRlcjI+CisgICAgbWlzbWF0Y2goX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIF9JSXRlcjIgX19iZWdpbjIpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXIxPiBfSXRlcmF0b3IxVHJhaXRzOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXIyPiBfSXRlcmF0b3IyVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3IxVHJhaXRzOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3IyVHJhaXRzOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3IxVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjJUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5MjsKKworICAgICAgdHlwZWRlZiBfX2dudV9wYXJhbGxlbDo6X0VxdWFsVG88X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyPiBfRXF1YWxUbzsKKworICAgICAgcmV0dXJuIF9fbWlzbWF0Y2hfc3dpdGNoKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfRXF1YWxUbygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvckNhdGVnb3J5MSgpLCBfSXRlcmF0b3JDYXRlZ29yeTIoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgcGFpcjxfSUl0ZXIxLCBfSUl0ZXIyPgorICAgIG1pc21hdGNoKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCBfSUl0ZXIyIF9fYmVnaW4yLAorICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX0l0ZXJhdG9yMVRyYWl0czsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyMj4gX0l0ZXJhdG9yMlRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yMVRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnkxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3IyVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTI7CisKKyAgICAgIHJldHVybiBfX21pc21hdGNoX3N3aXRjaChfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19wcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyYXRvckNhdGVnb3J5MSgpLCBfSXRlcmF0b3JDYXRlZ29yeTIoKSk7CisgICAgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIGVxdWFsKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCBfSUl0ZXIyIF9fYmVnaW4yLCAKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OmVxdWFsKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIGVxdWFsKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCBfSUl0ZXIyIF9fYmVnaW4yLCAKKyAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjplcXVhbChfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19wcmVkKTsgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIGVxdWFsKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLCBfSUl0ZXIyIF9fYmVnaW4yKQorICAgIHsKKyAgICAgIHJldHVybiBfX2dudV9wYXJhbGxlbDo6bWlzbWF0Y2goX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIpLmZpcnN0CisgICAgICAgICAgICAgID09IF9fZW5kMTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGlubGluZSBib29sCisgICAgZXF1YWwoX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsIF9JSXRlcjIgX19iZWdpbjIsIAorICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQorICAgIHsKKyAgICAgIHJldHVybiBfX2dudV9wYXJhbGxlbDo6bWlzbWF0Y2goX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fcHJlZCkuZmlyc3QKKyAgICAgICAgICAgICAgPT0gX19lbmQxOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjI+CisgICAgaW5saW5lIGJvb2wKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUl0ZXIxIF9fYmVnaW4xLCBfSUl0ZXIxIF9fZW5kMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX0lJdGVyMiBfX2VuZDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX19iZWdpbjEsIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbjIsIF9fZW5kMik7IH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUl0ZXIxIF9fYmVnaW4xLCBfSUl0ZXIxIF9fZW5kMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX0lJdGVyMiBfX2VuZDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKAorICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19wcmVkKTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGNhc2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMSwgdHlwZW5hbWUgX0l0ZXJhdG9yVGFnMj4KKyAgICBpbmxpbmUgYm9vbAorICAgIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfc3dpdGNoKF9JSXRlcjEgX19iZWdpbjEsIF9JSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JSXRlcjIgX19iZWdpbjIsIF9JSXRlcjIgX19lbmQyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSXRlcmF0b3JUYWcxLCBfSXRlcmF0b3JUYWcyKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgKKyAgICAgICAgICAgICAgIF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX2VuZDIsIF9fcHJlZCk7IH0KKworICAvLyBQYXJhbGxlbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMKKyAgLy8gTGltaXRhdGlvbjogQm90aCB2YWx1ZXR5cGVzIG11c3QgYmUgdGhlIHNhbWUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGJvb2wKKyAgICBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlX3N3aXRjaChfUkFJdGVyMSBfX2JlZ2luMSwgX1JBSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXIyIF9fYmVnaW4yLCBfUkFJdGVyMiBfX2VuZDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04odHJ1ZSkpCisgICAgICAgIHsKKyAgICAgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfUkFJdGVyMT4gX1RyYWl0c1R5cGUxOworICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGUxOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOworCisgICAgICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcjI+IF9UcmFpdHNUeXBlMjsKKyAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlMjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKKworICAgICAgICAgIHR5cGVkZWYgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgICAgICAgX0VxdWFsRnJvbUxlc3M8X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5cGUyLCBfUHJlZGljYXRlPgorICAgICAgICAgICAgICAgICAgX0VxdWFsRnJvbUxlc3NDb21wYXJlOworCisgICAgICAgICAgLy8gTG9uZ2VyIHNlcXVlbmNlIGluIGZpcnN0IHBsYWNlLgorICAgICAgICAgIGlmICgoX19lbmQxIC0gX19iZWdpbjEpIDwgKF9fZW5kMiAtIF9fYmVnaW4yKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHlwZWRlZiBwYWlyPF9SQUl0ZXIxLCBfUkFJdGVyMj4gX1Nwb3RUeXBlOworICAgICAgICAgICAgICBfU3BvdFR5cGUgX19tbSA9IF9fbWlzbWF0Y2hfc3dpdGNoKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FcXVhbEZyb21MZXNzQ29tcGFyZShfX3ByZWQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcoKSk7CisKKyAgICAgICAgICAgICAgcmV0dXJuIChfX21tLmZpcnN0ID09IF9fZW5kMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJvb2woX19wcmVkKCpfX21tLmZpcnN0LCAqX19tbS5zZWNvbmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHR5cGVkZWYgcGFpcjxfUkFJdGVyMiwgX1JBSXRlcjE+IF9TcG90VHlwZTsKKyAgICAgICAgICAgICAgX1Nwb3RUeXBlIF9fbW0gPSBfX21pc21hdGNoX3N3aXRjaChfX2JlZ2luMiwgX19lbmQyLCBfX2JlZ2luMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXF1YWxGcm9tTGVzc0NvbXBhcmUoX19wcmVkKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZygpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKCkpOworCisgICAgICAgICAgICAgIHJldHVybiAoX19tbS5maXJzdCAhPSBfX2VuZDIpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBib29sKF9fcHJlZCgqX19tbS5zZWNvbmQsICpfX21tLmZpcnN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgKKyAgICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX19wcmVkKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIGlubGluZSBib29sCisgICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lJdGVyMSBfX2JlZ2luMSwgX0lJdGVyMSBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2JlZ2luMiwgX0lJdGVyMiBfX2VuZDIpCisgICAgeworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX1RyYWl0c1R5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTE6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlMTo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnkxOworCisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXIyPiBfVHJhaXRzVHlwZTI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlMjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGUyOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTI7CisgICAgICB0eXBlZGVmIF9fZ251X3BhcmFsbGVsOjpfTGVzczxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+IF9MZXNzVHlwZTsKKworICAgICAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfc3dpdGNoKAorICAgICAgICAgICAgICAgX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX0xlc3NUeXBlKCksCisgICAgICAgICAgICAgICBfSXRlcmF0b3JDYXRlZ29yeTEoKSwgX0l0ZXJhdG9yQ2F0ZWdvcnkyKCkpOworICAgIH0KKworICAvLyBQdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUl0ZXIxIF9fYmVnaW4xLCBfSUl0ZXIxIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fYmVnaW4yLCBfSUl0ZXIyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXIxPiBfVHJhaXRzVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlMTo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnkxOworCisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXIyPiBfVHJhaXRzVHlwZTI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlMjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnkyOworCisgICAgICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV9zd2l0Y2goCisgICAgICAgICAgICAgICBfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLCBfX3ByZWQsCisgICAgICAgICAgICAgICBfSXRlcmF0b3JDYXRlZ29yeTEoKSwgX0l0ZXJhdG9yQ2F0ZWdvcnkyKCkpOworICAgIH0KK30gLy8gZW5kIG5hbWVzcGFjZQorfSAvLyBlbmQgbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9BTEdPQkFTRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2FsZ29yaXRobSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYWxnb3JpdGhtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmY2YyYjQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2FsZ29yaXRobQpAQCAtMCwwICsxLDM5IEBACisvLyBBbGdvcml0aG0gZXh0ZW5zaW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvYWxnb3JpdGhtCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfUEFSQUxMRUxfQUxHT1JJVEhNCisjZGVmaW5lIF9QQVJBTExFTF9BTEdPUklUSE0gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8cGFyYWxsZWwvYWxnb3JpdGhtZndkLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9hbGdvLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9hbGdvcml0aG1md2QuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYWxnb3JpdGhtZndkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhOGE1YQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYWxnb3JpdGhtZndkLmgKQEAgLTAsMCArMSw5MDggQEAKKy8vIDxwYXJhbGxlbC9hbGdvcml0aG0+IEZvcndhcmQgZGVjbGFyYXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9hbGdvcml0aG1md2QuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfQUxHT1JJVEhNRldEX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfQUxHT1JJVEhNRldEX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxwYXJhbGxlbC90YWdzLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvc2V0dGluZ3MuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19wYXJhbGxlbAoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXI+CisgICAgX0ZJdGVyCisgICAgYWRqYWNlbnRfZmluZChfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlcgorICAgIGFkamFjZW50X2ZpbmQoX0ZJdGVyLCBfRkl0ZXIsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfSXRlclRhZz4KKyAgICBfRkl0ZXIKKyAgICBfX2FkamFjZW50X2ZpbmRfc3dpdGNoKF9GSXRlciwgX0ZJdGVyLCBfSXRlclRhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICBfUkFJdGVyCisgICAgX19hZGphY2VudF9maW5kX3N3aXRjaChfUkFJdGVyLCBfUkFJdGVyLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9CaVByZWRpY2F0ZT4KKyAgICBfRkl0ZXIKKyAgICBhZGphY2VudF9maW5kKF9GSXRlciwgX0ZJdGVyLCBfQmlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0JpUHJlZGljYXRlPgorICAgIF9GSXRlcgorICAgIGFkamFjZW50X2ZpbmQoX0ZJdGVyLCBfRkl0ZXIsIF9CaVByZWRpY2F0ZSwKKyAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQmlQcmVkaWNhdGUsIHR5cGVuYW1lIF9JdGVyVGFnPgorICAgIF9GSXRlcgorICAgIF9fYWRqYWNlbnRfZmluZF9zd2l0Y2goX0ZJdGVyLCBfRkl0ZXIsIF9CaVByZWRpY2F0ZSwgX0l0ZXJUYWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9CaVByZWRpY2F0ZT4KKyAgICBfUkFJdGVyCisgICAgX19hZGphY2VudF9maW5kX3N3aXRjaChfUkFJdGVyLCBfUkFJdGVyLCBfQmlQcmVkaWNhdGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudChfSUl0ZXIsIF9JSXRlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIGNvdW50KF9JSXRlciwgX0lJdGVyLCBjb25zdCBfVHAmLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBjb3VudChfSUl0ZXIsIF9JSXRlciwgY29uc3QgX1RwJiwgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JdGVyVGFnPgorICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX2NvdW50X3N3aXRjaChfSUl0ZXIsIF9JSXRlciwgY29uc3QgX1RwJiwgX0l0ZXJUYWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fY291bnRfc3dpdGNoKF9SQUl0ZXIsIF9SQUl0ZXIsIGNvbnN0IF9UcCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc20KKyAgICAgICAgICAgICAgICAgPSBfX2dudV9wYXJhbGxlbDo6cGFyYWxsZWxfdW5iYWxhbmNlZCk7CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIGNvdW50X2lmKF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIGNvdW50X2lmKF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgY291bnRfaWYoX0lJdGVyLCBfSUl0ZXIsIF9QcmVkaWNhdGUsIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0l0ZXJUYWc+CisgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fY291bnRfaWZfc3dpdGNoKF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlLCBfSXRlclRhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JBSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fY291bnRfaWZfc3dpdGNoKF9SQUl0ZXIsIF9SQUl0ZXIsIF9QcmVkaWNhdGUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc20KKyAgICAgICAgICAgICAgICAgICAgPSBfX2dudV9wYXJhbGxlbDo6cGFyYWxsZWxfdW5iYWxhbmNlZCk7CisKKyAgLy8gYWxnb2Jhc2UuaAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIGJvb2wKKyAgICBlcXVhbChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgYm9vbAorICAgIGVxdWFsKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9QcmVkaWNhdGUsCisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIGJvb2wKKyAgICBlcXVhbChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGJvb2wKKyAgICBlcXVhbChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfSUl0ZXIKKyAgICBmaW5kKF9JSXRlciwgX0lJdGVyLCBjb25zdCBfVHAmLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIF9JSXRlcgorICAgIGZpbmQoX0lJdGVyLCBfSUl0ZXIsIGNvbnN0IF9UcCYgX192YWwpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSXRlclRhZz4KKyAgICBfSUl0ZXIKKyAgICBfX2ZpbmRfc3dpdGNoKF9JSXRlciwgX0lJdGVyLCBjb25zdCBfVHAmLCBfSXRlclRhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIF9SQUl0ZXIKKyAgICBfX2ZpbmRfc3dpdGNoKF9SQUl0ZXIsIF9SQUl0ZXIsIGNvbnN0IF9UcCYsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0lJdGVyCisgICAgZmluZF9pZihfSUl0ZXIsIF9JSXRlciwgX1ByZWRpY2F0ZSwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0lJdGVyCisgICAgZmluZF9pZihfSUl0ZXIsIF9JSXRlciwgX1ByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfSXRlclRhZz4KKyAgICBfSUl0ZXIKKyAgICBfX2ZpbmRfaWZfc3dpdGNoKF9JSXRlciwgX0lJdGVyLCBfUHJlZGljYXRlLCBfSXRlclRhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfUkFJdGVyCisgICAgX19maW5kX2lmX3N3aXRjaChfUkFJdGVyLCBfUkFJdGVyLCBfUHJlZGljYXRlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRkl0ZXI+CisgICAgX0lJdGVyCisgICAgZmluZF9maXJzdF9vZihfSUl0ZXIsIF9JSXRlciwgX0ZJdGVyLCBfRkl0ZXIsCisgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQmlQcmVkaWNhdGU+CisgICAgX0lJdGVyCisgICAgZmluZF9maXJzdF9vZihfSUl0ZXIsIF9JSXRlciwgX0ZJdGVyLCBfRkl0ZXIsIF9CaVByZWRpY2F0ZSwKKyAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9CaVByZWRpY2F0ZT4KKyAgICBfSUl0ZXIKKyAgICBmaW5kX2ZpcnN0X29mKF9JSXRlciwgX0lJdGVyLCBfRkl0ZXIsIF9GSXRlciwgX0JpUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9GSXRlcj4KKyAgICBfSUl0ZXIKKyAgICBmaW5kX2ZpcnN0X29mKF9JSXRlciwgX0lJdGVyLCBfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRkl0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyVGFnMSwgdHlwZW5hbWUgX0l0ZXJUYWcyPgorICAgIF9JSXRlcgorICAgIF9fZmluZF9maXJzdF9vZl9zd2l0Y2goCisgICAgICBfSUl0ZXIsIF9JSXRlciwgX0ZJdGVyLCBfRkl0ZXIsIF9JdGVyVGFnMSwgX0l0ZXJUYWcyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9CaVByZWRpY2F0ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJUYWc+CisgICAgX1JBSXRlcgorICAgIF9fZmluZF9maXJzdF9vZl9zd2l0Y2goX1JBSXRlciwgX1JBSXRlciwgX0ZJdGVyLCBfRkl0ZXIsIF9CaVByZWRpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0l0ZXJUYWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQmlQcmVkaWNhdGUsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyVGFnMSwgdHlwZW5hbWUgX0l0ZXJUYWcyPgorICAgIF9JSXRlcgorICAgIF9fZmluZF9maXJzdF9vZl9zd2l0Y2goX0lJdGVyLCBfSUl0ZXIsIF9GSXRlciwgX0ZJdGVyLCBfQmlQcmVkaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgX0l0ZXJUYWcxLCBfSXRlclRhZzIpOworCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CisgICAgX0Z1bmN0aW9uCisgICAgZm9yX2VhY2goX0lJdGVyLCBfSUl0ZXIsIF9GdW5jdGlvbik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CisgICAgX0Z1bmN0aW9uCisgICAgZm9yX2VhY2goX0lJdGVyLCBfSUl0ZXIsIF9GdW5jdGlvbiwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9GdW5jdGlvbj4KKyAgICBfRnVuY3Rpb24KKyAgICBmb3JfZWFjaChfSXRlcmF0b3IsIF9JdGVyYXRvciwgX0Z1bmN0aW9uLCBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9GdW5jdGlvbiwgdHlwZW5hbWUgX0l0ZXJUYWc+CisgICAgX0Z1bmN0aW9uCisgICAgX19mb3JfZWFjaF9zd2l0Y2goX0lJdGVyLCBfSUl0ZXIsIF9GdW5jdGlvbiwgX0l0ZXJUYWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9GdW5jdGlvbj4KKyAgICBfRnVuY3Rpb24KKyAgICBfX2Zvcl9lYWNoX3N3aXRjaChfUkFJdGVyLCBfUkFJdGVyLCBfRnVuY3Rpb24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtICBfX3BhcmFsbGVsaXNtCisgICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX2JhbGFuY2VkKTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KKyAgICB2b2lkCisgICAgZ2VuZXJhdGUoX0ZJdGVyLCBfRkl0ZXIsIF9HZW5lcmF0b3IpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KKyAgICB2b2lkCisgICAgZ2VuZXJhdGUoX0ZJdGVyLCBfRkl0ZXIsIF9HZW5lcmF0b3IsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIHZvaWQKKyAgICBnZW5lcmF0ZShfRkl0ZXIsIF9GSXRlciwgX0dlbmVyYXRvciwgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yLCB0eXBlbmFtZSBfSXRlclRhZz4KKyAgICB2b2lkCisgICAgX19nZW5lcmF0ZV9zd2l0Y2goX0ZJdGVyLCBfRkl0ZXIsIF9HZW5lcmF0b3IsIF9JdGVyVGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIHZvaWQKKyAgICBfX2dlbmVyYXRlX3N3aXRjaChfUkFJdGVyLCBfUkFJdGVyLCBfR2VuZXJhdG9yLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtCisgICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX2JhbGFuY2VkKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIF9PSXRlcgorICAgIGdlbmVyYXRlX24oX09JdGVyLCBfU2l6ZSwgX0dlbmVyYXRvcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KKyAgICBfT0l0ZXIKKyAgICBnZW5lcmF0ZV9uKF9PSXRlciwgX1NpemUsIF9HZW5lcmF0b3IsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KKyAgICBfT0l0ZXIKKyAgICBnZW5lcmF0ZV9uKF9PSXRlciwgX1NpemUsIF9HZW5lcmF0b3IsIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyVGFnPgorICAgIF9PSXRlcgorICAgIF9fZ2VuZXJhdGVfbl9zd2l0Y2goX09JdGVyLCBfU2l6ZSwgX0dlbmVyYXRvciwgX0l0ZXJUYWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgorICAgIF9SQUl0ZXIKKyAgICBfX2dlbmVyYXRlX25fc3dpdGNoKF9SQUl0ZXIsIF9TaXplLCBfR2VuZXJhdG9yLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc20KKyAgICAgICAgICAgICAgICAgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF9iYWxhbmNlZCk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMj4KKyAgICBib29sCisgICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgYm9vbAorICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9QcmVkaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyPgorICAgIGJvb2wKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIGJvb2wKKyAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfSXRlclRhZzEsIHR5cGVuYW1lIF9JdGVyVGFnMj4KKyAgICBib29sCisgICAgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV9zd2l0Y2goX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSwgX0l0ZXJUYWcxLCBfSXRlclRhZzIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBib29sCisgICAgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV9zd2l0Y2goX1JBSXRlcjEsIF9SQUl0ZXIxLCBfUkFJdGVyMiwgX1JBSXRlcjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKyAgLy8gYWxnby5oCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjI+CisgICAgcGFpcjxfSUl0ZXIxLCBfSUl0ZXIyPgorICAgIG1pc21hdGNoKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBwYWlyPF9JSXRlcjEsIF9JSXRlcjI+CisgICAgbWlzbWF0Y2goX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX1ByZWRpY2F0ZSwKKyAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjI+CisgICAgcGFpcjxfSUl0ZXIxLCBfSUl0ZXIyPgorICAgIG1pc21hdGNoKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgcGFpcjxfSUl0ZXIxLCBfSUl0ZXIyPgorICAgIG1pc21hdGNoKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyVGFnMSwgdHlwZW5hbWUgX0l0ZXJUYWcyPgorICAgIHBhaXI8X0lJdGVyMSwgX0lJdGVyMj4KKyAgICBfX21pc21hdGNoX3N3aXRjaChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfUHJlZGljYXRlLAorICAgICAgICAgICAgICAgICAgICBfSXRlclRhZzEsIF9JdGVyVGFnMik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIHBhaXI8X1JBSXRlcjEsIF9SQUl0ZXIyPgorICAgIF9fbWlzbWF0Y2hfc3dpdGNoKF9SQUl0ZXIxLCBfUkFJdGVyMSwgX1JBSXRlcjIsIF9QcmVkaWNhdGUsCisgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICBfRkl0ZXIxCisgICAgc2VhcmNoKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMj4KKyAgICBfRkl0ZXIxCisgICAgc2VhcmNoKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcjEsIHR5cGVuYW1lIF9GSXRlcjIsIHR5cGVuYW1lIF9CaVByZWRpY2F0ZT4KKyAgICBfRkl0ZXIxCisgICAgc2VhcmNoKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIsIF9CaVByZWRpY2F0ZSwKKyAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIxLCB0eXBlbmFtZSBfRkl0ZXIyLCB0eXBlbmFtZSBfQmlQcmVkaWNhdGU+CisgICAgX0ZJdGVyMQorICAgIHNlYXJjaChfRkl0ZXIxLCBfRkl0ZXIxLCBfRkl0ZXIyLCBfRkl0ZXIyLCBfQmlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMj4KKyAgICBfUkFJdGVyMQorICAgIF9fc2VhcmNoX3N3aXRjaChfUkFJdGVyMSwgX1JBSXRlcjEsIF9SQUl0ZXIyLCBfUkFJdGVyMiwKKyAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMiwgdHlwZW5hbWUgX0l0ZXJUYWcxLAorICAgICAgICAgICB0eXBlbmFtZSBfSXRlclRhZzI+CisgICAgX0ZJdGVyMQorICAgIF9fc2VhcmNoX3N3aXRjaChfRkl0ZXIxLCBfRkl0ZXIxLCBfRkl0ZXIyLCBfRkl0ZXIyLCBfSXRlclRhZzEsIF9JdGVyVGFnMik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfQmlQcmVkaWNhdGU+CisgICAgX1JBSXRlcjEKKyAgICBfX3NlYXJjaF9zd2l0Y2goX1JBSXRlcjEsIF9SQUl0ZXIxLCBfUkFJdGVyMiwgX1JBSXRlcjIsIF9CaVByZWRpY2F0ZSwKKyAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyMSwgdHlwZW5hbWUgX0ZJdGVyMiwgdHlwZW5hbWUgX0JpUHJlZGljYXRlLAorICAgICAgICAgICB0eXBlbmFtZSBfSXRlclRhZzEsIHR5cGVuYW1lIF9JdGVyVGFnMj4KKyAgICBfRkl0ZXIxCisgICAgX19zZWFyY2hfc3dpdGNoKF9GSXRlcjEsIF9GSXRlcjEsIF9GSXRlcjIsIF9GSXRlcjIsIF9CaVByZWRpY2F0ZSwKKyAgICAgICAgICAgICAgICAgIF9JdGVyVGFnMSwgX0l0ZXJUYWcyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CisgICAgX0ZJdGVyCisgICAgc2VhcmNoX24oX0ZJdGVyLCBfRkl0ZXIsIF9JbnRlZ2VyLCBjb25zdCBfVHAmLAorICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAorICAgICAgICAgICB0eXBlbmFtZSBfQmlQcmVkaWNhdGU+CisgICAgX0ZJdGVyCisgICAgc2VhcmNoX24oX0ZJdGVyLCBfRkl0ZXIsIF9JbnRlZ2VyLCBjb25zdCBfVHAmLCBfQmlQcmVkaWNhdGUsCisgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKyAgICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPgorICAgIF9GSXRlcgorICAgIHNlYXJjaF9uKF9GSXRlciwgX0ZJdGVyLCBfSW50ZWdlciwgY29uc3QgX1RwJik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAorICAgICAgICAgICB0eXBlbmFtZSBfQmlQcmVkaWNhdGU+CisgICAgX0ZJdGVyCisgICAgc2VhcmNoX24oX0ZJdGVyLCBfRkl0ZXIsIF9JbnRlZ2VyLCBjb25zdCBfVHAmLCBfQmlQcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaVByZWRpY2F0ZT4KKyAgICBfUkFJdGVyCisgICAgX19zZWFyY2hfbl9zd2l0Y2goX1JBSXRlciwgX1JBSXRlciwgX0ludGVnZXIsIGNvbnN0IF9UcCYsCisgICAgICAgICAgICAgICAgICAgIF9CaVByZWRpY2F0ZSwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpUHJlZGljYXRlLCB0eXBlbmFtZSBfSXRlclRhZz4KKyAgICBfRkl0ZXIKKyAgICBfX3NlYXJjaF9uX3N3aXRjaChfRkl0ZXIsIF9GSXRlciwgX0ludGVnZXIsIGNvbnN0IF9UcCYsCisgICAgICAgICAgICAgICAgICAgIF9CaVByZWRpY2F0ZSwgX0l0ZXJUYWcpOworCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KKyAgICBfT0l0ZXIKKyAgICB0cmFuc2Zvcm0oX0lJdGVyLCBfSUl0ZXIsIF9PSXRlciwgX1VuYXJ5T3BlcmF0aW9uKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgorICAgIF9PSXRlcgorICAgIHRyYW5zZm9ybShfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfVW5hcnlPcGVyYXRpb24sIAorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CisgICAgX09JdGVyCisgICAgdHJhbnNmb3JtKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9VbmFyeU9wZXJhdGlvbiwgCisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24sCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyVGFnMSwgdHlwZW5hbWUgX0l0ZXJUYWcyPgorICAgIF9PSXRlcgorICAgIF9fdHJhbnNmb3JtMV9zd2l0Y2goX0lJdGVyLCBfSUl0ZXIsIF9PSXRlciwgX1VuYXJ5T3BlcmF0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICBfSXRlclRhZzEsIF9JdGVyVGFnMik7CisgICAgCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSUl0ZXIsIHR5cGVuYW1lIF9SQU9JdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CisgICAgX1JBT0l0ZXIKKyAgICBfX3RyYW5zZm9ybTFfc3dpdGNoKF9SQUlJdGVyLCBfUkFJSXRlciwgX1JBT0l0ZXIsIF9VbmFyeU9wZXJhdGlvbiwgCisgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCAKKyAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc20KKyAgICAgICAgICAgICAgICAgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF9iYWxhbmNlZCk7CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaU9wZXJhdGlvbj4KKyAgICBfT0l0ZXIKKyAgICB0cmFuc2Zvcm0oX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX09JdGVyLCBfQmlPcGVyYXRpb24pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpT3BlcmF0aW9uPgorICAgIF9PSXRlcgorICAgIHRyYW5zZm9ybShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfT0l0ZXIsIF9CaU9wZXJhdGlvbiwgCisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyLAorICAgICAgICAgICB0eXBlbmFtZSBfQmlPcGVyYXRpb24+CisgICAgX09JdGVyCisgICAgdHJhbnNmb3JtKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9PSXRlciwgX0JpT3BlcmF0aW9uLCAKKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfUkFJdGVyMywKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpT3BlcmF0aW9uPgorICAgIF9SQUl0ZXIzCisgICAgX190cmFuc2Zvcm0yX3N3aXRjaChfUkFJdGVyMSwgX1JBSXRlcjEsIF9SQUl0ZXIyLCBfUkFJdGVyMywgX0JpT3BlcmF0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIAorICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbQorICAgICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX2JhbGFuY2VkKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaU9wZXJhdGlvbiwgdHlwZW5hbWUgX1RhZzEsCisgICAgICAgICAgIHR5cGVuYW1lIF9UYWcyLCB0eXBlbmFtZSBfVGFnMz4KKyAgICBfT0l0ZXIKKyAgICBfX3RyYW5zZm9ybTJfc3dpdGNoKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9PSXRlciwgX0JpT3BlcmF0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICBfVGFnMSwgX1RhZzIsIF9UYWczKTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICByZXBsYWNlKF9GSXRlciwgX0ZJdGVyLCBjb25zdCBfVHAmLCBjb25zdCBfVHAmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgcmVwbGFjZShfRkl0ZXIsIF9GSXRlciwgY29uc3QgX1RwJiwgY29uc3QgX1RwJiwgCisgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICByZXBsYWNlKF9GSXRlciwgX0ZJdGVyLCBjb25zdCBfVHAmLCBjb25zdCBfVHAmLAorICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JdGVyVGFnPgorICAgIHZvaWQKKyAgICBfX3JlcGxhY2Vfc3dpdGNoKF9GSXRlciwgX0ZJdGVyLCBjb25zdCBfVHAmLCBjb25zdCBfVHAmLCBfSXRlclRhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3JlcGxhY2Vfc3dpdGNoKF9SQUl0ZXIsIF9SQUl0ZXIsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYsIAorICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtKTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICByZXBsYWNlX2lmKF9GSXRlciwgX0ZJdGVyLCBfUHJlZGljYXRlLCBjb25zdCBfVHAmKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgcmVwbGFjZV9pZihfRkl0ZXIsIF9GSXRlciwgX1ByZWRpY2F0ZSwgY29uc3QgX1RwJiwKKyAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIHJlcGxhY2VfaWYoX0ZJdGVyLCBfRkl0ZXIsIF9QcmVkaWNhdGUsIGNvbnN0IF9UcCYsCisgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJUYWc+CisgICAgdm9pZAorICAgIF9fcmVwbGFjZV9pZl9zd2l0Y2goX0ZJdGVyLCBfRkl0ZXIsIF9QcmVkaWNhdGUsIGNvbnN0IF9UcCYsIF9JdGVyVGFnKTsKKyAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX3JlcGxhY2VfaWZfc3dpdGNoKF9SQUl0ZXIsIF9SQUl0ZXIsIF9QcmVkaWNhdGUsIGNvbnN0IF9UcCYsCisgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXI+CisgICAgX0ZJdGVyCisgICAgbWF4X2VsZW1lbnQoX0ZJdGVyLCBfRkl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcj4KKyAgICBfRkl0ZXIKKyAgICBtYXhfZWxlbWVudChfRkl0ZXIsIF9GSXRlciwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXI+CisgICAgX0ZJdGVyCisgICAgbWF4X2VsZW1lbnQoX0ZJdGVyLCBfRkl0ZXIsIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX0ZJdGVyCisgICAgbWF4X2VsZW1lbnQoX0ZJdGVyLCBfRkl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9GSXRlcgorICAgIG1heF9lbGVtZW50KF9GSXRlciwgX0ZJdGVyLCBfQ29tcGFyZSwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9GSXRlcgorICAgIG1heF9lbGVtZW50KF9GSXRlciwgX0ZJdGVyLCBfQ29tcGFyZSwgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0l0ZXJUYWc+CisgICAgX0ZJdGVyCisgICAgX19tYXhfZWxlbWVudF9zd2l0Y2goX0ZJdGVyLCBfRkl0ZXIsIF9Db21wYXJlLCBfSXRlclRhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlcgorICAgIF9fbWF4X2VsZW1lbnRfc3dpdGNoKAorICAgICAgX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtCisgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF9iYWxhbmNlZCk7CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyCisgICAgbWVyZ2UoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCAKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX09JdGVyCisgICAgbWVyZ2UoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfQ29tcGFyZSwgCisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PSXRlcgorICAgIG1lcmdlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICBtZXJnZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9JdGVyVGFnMSwgdHlwZW5hbWUgX0l0ZXJUYWcyLAorICAgICAgICAgICB0eXBlbmFtZSBfSXRlclRhZzM+CisgICAgX09JdGVyCisgICAgX19tZXJnZV9zd2l0Y2goX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfQ29tcGFyZSwgCisgICAgICAgICAgICAgICAgIF9JdGVyVGFnMSwgX0l0ZXJUYWcyLCBfSXRlclRhZzMpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX09JdGVyCisgICAgX19tZXJnZV9zd2l0Y2goX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfQ29tcGFyZSwgCisgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgCisgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcj4KKyAgICBfRkl0ZXIKKyAgICBtaW5fZWxlbWVudChfRkl0ZXIsIF9GSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyPgorICAgIF9GSXRlcgorICAgIG1pbl9lbGVtZW50KF9GSXRlciwgX0ZJdGVyLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlcj4KKyAgICBfRkl0ZXIKKyAgICBtaW5fZWxlbWVudChfRkl0ZXIsIF9GSXRlciwKKyAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9GSXRlcgorICAgIG1pbl9lbGVtZW50KF9GSXRlciwgX0ZJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIKKyAgICBtaW5fZWxlbWVudChfRkl0ZXIsIF9GSXRlciwgX0NvbXBhcmUsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfRkl0ZXIKKyAgICBtaW5fZWxlbWVudChfRkl0ZXIsIF9GSXRlciwgX0NvbXBhcmUsIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GSXRlciwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9JdGVyVGFnPgorICAgIF9GSXRlcgorICAgIF9fbWluX2VsZW1lbnRfc3dpdGNoKF9GSXRlciwgX0ZJdGVyLCBfQ29tcGFyZSwgX0l0ZXJUYWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXIKKyAgICBfX21pbl9lbGVtZW50X3N3aXRjaCgKKyAgICAgIF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbQorICAgICAgPSBfX2dudV9wYXJhbGxlbDo6cGFyYWxsZWxfYmFsYW5jZWQpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZAorICAgIG50aF9lbGVtZW50KF9SQUl0ZXIsIF9SQUl0ZXIsIF9SQUl0ZXIsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIG50aF9lbGVtZW50KF9SQUl0ZXIsIF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlLAorICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIG50aF9lbGVtZW50KF9SQUl0ZXIsIF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIHZvaWQKKyAgICBudGhfZWxlbWVudChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgcGFydGlhbF9zb3J0KF9SQUl0ZXIsIF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlLAorICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZAorICAgIHBhcnRpYWxfc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBwYXJ0aWFsX3NvcnQoX1JBSXRlciwgX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZAorICAgIHBhcnRpYWxfc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0ZJdGVyCisgICAgcGFydGl0aW9uKF9GSXRlciwgX0ZJdGVyLCBfUHJlZGljYXRlLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX0ZJdGVyCisgICAgcGFydGl0aW9uKF9GSXRlciwgX0ZJdGVyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9JdGVyVGFnPgorICAgIF9GSXRlcgorICAgIF9fcGFydGl0aW9uX3N3aXRjaChfRkl0ZXIsIF9GSXRlciwgX1ByZWRpY2F0ZSwgX0l0ZXJUYWcpOworICAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9SQUl0ZXIKKyAgICBfX3BhcnRpdGlvbl9zd2l0Y2goCisgICAgICBfUkFJdGVyLCBfUkFJdGVyLCBfUHJlZGljYXRlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICB2b2lkCisgICAgcmFuZG9tX3NodWZmbGUoX1JBSXRlciwgX1JBSXRlciwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgIHZvaWQKKyAgICByYW5kb21fc2h1ZmZsZShfUkFJdGVyLCBfUkFJdGVyLCBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiwKKyAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgdm9pZAorICAgIHJhbmRvbV9zaHVmZmxlKF9SQUl0ZXIsIF9SQUl0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgdm9pZAorICAgIHJhbmRvbV9zaHVmZmxlKF9SQUl0ZXIsIF9SQUl0ZXIsCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorCQkgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiYpOworI2Vsc2UKKwkJICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYpOworI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyPgorICAgIF9PSXRlcgorICAgIHNldF91bmlvbihfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIsCisgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT0l0ZXIKKyAgICBzZXRfdW5pb24oX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfUHJlZGljYXRlLAorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICBzZXRfdW5pb24oX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX09JdGVyIAorICAgIHNldF91bmlvbihfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIsIF9QcmVkaWNhdGUpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCisgICAgICAgICAgIHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX0l0ZXJUYWcxLCB0eXBlbmFtZSBfSXRlclRhZzIsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyVGFnMz4KKyAgICBfT0l0ZXIKKyAgICBfX3NldF91bmlvbl9zd2l0Y2goX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLAorICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSwgX0l0ZXJUYWcxLCBfSXRlclRhZzIsIF9JdGVyVGFnMyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0X1JBSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT3V0cHV0X1JBSXRlcgorICAgIF9fc2V0X3VuaW9uX3N3aXRjaChfUkFJdGVyMSwgX1JBSXRlcjEsIF9SQUl0ZXIyLCBfUkFJdGVyMiwgX091dHB1dF9SQUl0ZXIsCisgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyPgorICAgIF9PSXRlcgorICAgIHNldF9pbnRlcnNlY3Rpb24oX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLAorICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX09JdGVyCisgICAgc2V0X2ludGVyc2VjdGlvbihfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIsIF9QcmVkaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICBzZXRfaW50ZXJzZWN0aW9uKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyLAorICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9PSXRlciAKKyAgICBzZXRfaW50ZXJzZWN0aW9uKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwgX1ByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfSXRlclRhZzEsIHR5cGVuYW1lIF9JdGVyVGFnMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJUYWczPgorICAgIF9PSXRlcgorICAgIF9fc2V0X2ludGVyc2VjdGlvbl9zd2l0Y2goX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUsIF9JdGVyVGFnMSwgX0l0ZXJUYWcyLCBfSXRlclRhZzMpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwgdHlwZW5hbWUgX091dHB1dF9SQUl0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX091dHB1dF9SQUl0ZXIKKyAgICBfX3NldF9pbnRlcnNlY3Rpb25fc3dpdGNoKF9SQUl0ZXIxLCBfUkFJdGVyMSwgX1JBSXRlcjIsIF9SQUl0ZXIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRfUkFJdGVyLCBfUHJlZGljYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX09JdGVyCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyIAorICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT0l0ZXIgCisgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfSXRlclRhZzEsIHR5cGVuYW1lIF9JdGVyVGFnMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJUYWczPgorICAgIF9PSXRlcgorICAgIF9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3N3aXRjaChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX09JdGVyLCBfUHJlZGljYXRlLCBfSXRlclRhZzEsIF9JdGVyVGFnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyVGFnMyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0X1JBSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT3V0cHV0X1JBSXRlcgorICAgIF9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3N3aXRjaChfUkFJdGVyMSwgX1JBSXRlcjEsIF9SQUl0ZXIyLCBfUkFJdGVyMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRfUkFJdGVyLCBfUHJlZGljYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICBzZXRfZGlmZmVyZW5jZShfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfSUl0ZXIyLCBfT0l0ZXIsCisgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfT0l0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX09JdGVyCisgICAgc2V0X2RpZmZlcmVuY2UoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX0lJdGVyMiwgX09JdGVyLCBfUHJlZGljYXRlLAorICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyPgorICAgIF9PSXRlcgorICAgIHNldF9kaWZmZXJlbmNlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX09JdGVyLAorICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9PSXRlcgorICAgIHNldF9kaWZmZXJlbmNlKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwgX1ByZWRpY2F0ZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfSXRlclRhZzEsIHR5cGVuYW1lIF9JdGVyVGFnMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJUYWczPgorICAgIF9PSXRlcgorICAgIF9fc2V0X2RpZmZlcmVuY2Vfc3dpdGNoKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9JSXRlcjIsIF9PSXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSwgX0l0ZXJUYWcxLCBfSXRlclRhZzIsIF9JdGVyVGFnMyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0X1JBSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT3V0cHV0X1JBSXRlcgorICAgIF9fc2V0X2RpZmZlcmVuY2Vfc3dpdGNoKF9SQUl0ZXIxLCBfUkFJdGVyMSwgX1JBSXRlcjIsIF9SQUl0ZXIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0X1JBSXRlciwgX1ByZWRpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyPgorICAgIHZvaWQKKyAgICBzb3J0KF9SQUl0ZXIsIF9SQUl0ZXIsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIHNvcnQoX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICB2b2lkCisgICAgc29ydChfUkFJdGVyLCBfUkFJdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgc29ydChfUkFJdGVyLCBfUkFJdGVyLCBfQ29tcGFyZSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICB2b2lkCisgICAgc3RhYmxlX3NvcnQoX1JBSXRlciwgX1JBSXRlciwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgc3RhYmxlX3NvcnQoX1JBSXRlciwgX1JBSXRlciwgX0NvbXBhcmUsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcj4KKyAgICB2b2lkCisgICAgc3RhYmxlX3NvcnQoX1JBSXRlciwgX1JBSXRlcik7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIHN0YWJsZV9zb3J0KF9SQUl0ZXIsIF9SQUl0ZXIsIF9Db21wYXJlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICB1bmlxdWVfY29weShfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgorICAgIF9PSXRlcgorICAgIHVuaXF1ZV9jb3B5KF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9QcmVkaWNhdGUsCisgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICB1bmlxdWVfY29weShfSUl0ZXIsIF9JSXRlciwgX09JdGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICBfT0l0ZXIKKyAgICB1bmlxdWVfY29weShfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfUHJlZGljYXRlKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0l0ZXJUYWcxLCB0eXBlbmFtZSBfSXRlclRhZzI+CisgICAgX09JdGVyCisgICAgX191bmlxdWVfY29weV9zd2l0Y2goX0lJdGVyLCBfSUl0ZXIsIF9PSXRlciwgX1ByZWRpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX0l0ZXJUYWcxLCBfSXRlclRhZzIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NfT0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CisgICAgX1JhbmRvbUFjY2Vzc19PSXRlcgorICAgIF9fdW5pcXVlX2NvcHlfc3dpdGNoKF9SQUl0ZXIsIF9SQUl0ZXIsIF9SYW5kb21BY2Nlc3NfT0l0ZXIsIF9QcmVkaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7Cit9IC8vIGVuZCBuYW1lc3BhY2UgX19wYXJhbGxlbAorfSAvLyBlbmQgbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfQUxHT1JJVEhNRldEX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYmFsYW5jZWRfcXVpY2tzb3J0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2JhbGFuY2VkX3F1aWNrc29ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNGE5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2JhbGFuY2VkX3F1aWNrc29ydC5oCkBAIC0wLDAgKzEsNDkyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvYmFsYW5jZWRfcXVpY2tzb3J0LmgKKyAqICBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2YgYSBkeW5hbWljYWxseSBsb2FkLWJhbGFuY2VkIHBhcmFsbGVsIHF1aWNrc29ydC4KKyAqCisgKiAgSXQgd29ya3MgaW4tcGxhY2UgYW5kIG5lZWRzIG9ubHkgbG9nYXJpdGhtaWMgZXh0cmEgbWVtb3J5LgorICogIFRoZSBhbGdvcml0aG0gaXMgc2ltaWxhciB0byB0aGUgb25lIHByb3Bvc2VkIGluCisgKgorICogIFAuIFRzaWdhcyBhbmQgWS4gWmhhbmcuCisgKiAgQSBzaW1wbGUsIGZhc3QgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgcXVpY2tzb3J0IGFuZAorICogIGl0cyBwZXJmb3JtYW5jZSBldmFsdWF0aW9uIG9uIFNVTiBlbnRlcnByaXNlIDEwMDAwLgorICogIEluIDExdGggRXVyb21pY3JvIENvbmZlcmVuY2Ugb24gUGFyYWxsZWwsIERpc3RyaWJ1dGVkIGFuZAorICogIE5ldHdvcmstQmFzZWQgUHJvY2Vzc2luZywgcGFnZSAzNzIsIDIwMDMuCisgKgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9CQUxBTkNFRF9RVUlDS1NPUlRfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9CQUxBTkNFRF9RVUlDS1NPUlRfSCAxCisKKyNpbmNsdWRlIDxwYXJhbGxlbC9iYXNpY19pdGVyYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ28uaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPgorCisjaW5jbHVkZSA8cGFyYWxsZWwvc2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9wYXJ0aXRpb24uaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9yYW5kb21fbnVtYmVyLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvcXVldWUuaD4KKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKyNpbmNsdWRlIDxwYXJhbGxlbC9jaGVja2Vycy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIEluZm9ybWF0aW9uIGxvY2FsIHRvIG9uZSB0aHJlYWQgaW4gdGhlIHBhcmFsbGVsIHF1aWNrc29ydCBydW4uICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgc3RydWN0IF9RU0JUaHJlYWRMb2NhbAorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICAvKiogQGJyaWVmIENvbnRpbnVvdXMgcGFydCBvZiB0aGUgc2VxdWVuY2UsIGRlc2NyaWJlZCBieSBhbgorICAgICAgaXRlcmF0b3IgcGFpci4gKi8KKyAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPF9SQUl0ZXIsIF9SQUl0ZXI+IF9QaWVjZTsKKworICAgICAgLyoqIEBicmllZiBJbml0aWFsIHBpZWNlIHRvIHdvcmsgb24uICovCisgICAgICBfUGllY2UgX01faW5pdGlhbDsKKworICAgICAgLyoqIEBicmllZiBXb3JrLXN0ZWFsaW5nIHF1ZXVlLiAqLworICAgICAgX1Jlc3RyaWN0ZWRCb3VuZGVkQ29uY3VycmVudFF1ZXVlPF9QaWVjZT4gX01fbGVmdG92ZXJfcGFydHM7CisKKyAgICAgIC8qKiBAYnJpZWYgTnVtYmVyIG9mIHRocmVhZHMgaW52b2x2ZWQgaW4gdGhpcyBhbGdvcml0aG0uICovCisgICAgICBfVGhyZWFkSW5kZXggX01fbnVtX3RocmVhZHM7CisKKyAgICAgIC8qKiBAYnJpZWYgUG9pbnRlciB0byBhIGNvdW50ZXIgb2YgZWxlbWVudHMgbGVmdCBvdmVyIHRvIHNvcnQuICovCisgICAgICB2b2xhdGlsZSBfRGlmZmVyZW5jZVR5cGUqIF9NX2VsZW1lbnRzX2xlZnRvdmVyOworCisgICAgICAvKiogQGJyaWVmIFRoZSBjb21wbGV0ZSBzZXF1ZW5jZSB0byBzb3J0LiAqLworICAgICAgX1BpZWNlIF9NX2dsb2JhbDsKKworICAgICAgLyoqIEBicmllZiBDb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gX19xdWV1ZV9zaXplIHNpemUgb2YgdGhlIHdvcmstc3RlYWxpbmcgcXVldWUuICovCisgICAgICBfUVNCVGhyZWFkTG9jYWwoaW50IF9fcXVldWVfc2l6ZSkgOiBfTV9sZWZ0b3Zlcl9wYXJ0cyhfX3F1ZXVlX3NpemUpIHsgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBCYWxhbmNlZCBxdWlja3NvcnQgZGl2aWRlIHN0ZXAuCisgICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2Ygc3Vic2VxdWVuY2UuCisgICAgKiAgQHBhcmFtIF9fZW5kIEVuZCBpdGVyYXRvciBvZiBzdWJzZXF1ZW5jZS4KKyAgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAgKiAgQHBhcmFtIF9fbnVtX3RocmVhZHMgTnVtYmVyIG9mIHRocmVhZHMgdGhhdCBhcmUgYWxsb3dlZCB0byB3b3JrIG9uCisgICAgKiAgdGhpcyBwYXJ0LgorICAgICogIEBwcmUgQGMgKF9fZW5kLV9fYmVnaW4pPj0xICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX3FzYl9kaXZpZGUoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorCQkgX0NvbXBhcmUgX19jb21wLCBfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcykKKyAgICB7CisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX19udW1fdGhyZWFkcyA+IDApOworCisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX1JBSXRlciBfX3Bpdm90X3BvcyA9CisJX19tZWRpYW5fb2ZfdGhyZWVfaXRlcmF0b3JzKF9fYmVnaW4sIF9fYmVnaW4gKyAoX19lbmQgLSBfX2JlZ2luKSAvIDIsCisJCQkJICAgIF9fZW5kICAtIDEsIF9fY29tcCk7CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0FTU0VSVElPTlMpCisgICAgICAvLyBNdXN0IGJlIGluIGJldHdlZW4gc29tZXdoZXJlLgorICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbiA9IF9fZW5kIC0gX19iZWdpbjsKKworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKCghX19jb21wKCpfX3Bpdm90X3BvcywgKl9fYmVnaW4pCisJCQkJJiYgIV9fY29tcCgqKF9fYmVnaW4gKyBfX24gLyAyKSwKKwkJCQkJICAgKl9fcGl2b3RfcG9zKSkKKwkJCSAgICAgICB8fCAoIV9fY29tcCgqX19waXZvdF9wb3MsICpfX2JlZ2luKQorCQkJCSAgICYmICFfX2NvbXAoKihfX2VuZCAtIDEpLCAqX19waXZvdF9wb3MpKQorCQkJICAgICAgIHx8ICghX19jb21wKCpfX3Bpdm90X3BvcywgKihfX2JlZ2luICsgX19uIC8gMikpCisJCQkJICAgJiYgIV9fY29tcCgqX19iZWdpbiwgKl9fcGl2b3RfcG9zKSkKKwkJCSAgICAgICB8fCAoIV9fY29tcCgqX19waXZvdF9wb3MsICooX19iZWdpbiArIF9fbiAvIDIpKQorCQkJCSAgICYmICFfX2NvbXAoKihfX2VuZCAtIDEpLCAqX19waXZvdF9wb3MpKQorCQkJICAgICAgIHx8ICghX19jb21wKCpfX3Bpdm90X3BvcywgKihfX2VuZCAtIDEpKQorCQkJCSAgICYmICFfX2NvbXAoKl9fYmVnaW4sICpfX3Bpdm90X3BvcykpCisJCQkgICAgICAgfHwgKCFfX2NvbXAoKl9fcGl2b3RfcG9zLCAqKF9fZW5kIC0gMSkpCisJCQkJICAgJiYgIV9fY29tcCgqKF9fYmVnaW4gKyBfX24gLyAyKSwKKwkJCQkJICAgICAgKl9fcGl2b3RfcG9zKSkpOworI2VuZGlmCisKKyAgICAgIC8vIFN3YXAgcGl2b3QgdmFsdWUgdG8gZW5kLgorICAgICAgaWYgKF9fcGl2b3RfcG9zICE9IChfX2VuZCAtIDEpKQorCXN0ZDo6aXRlcl9zd2FwKF9fcGl2b3RfcG9zLCBfX2VuZCAtIDEpOworICAgICAgX19waXZvdF9wb3MgPSBfX2VuZCAtIDE7CisKKyAgICAgIF9fZ251X3BhcmFsbGVsOjpfX2JpbmRlcjJuZDxfQ29tcGFyZSwgX1ZhbHVlVHlwZSwgX1ZhbHVlVHlwZSwgYm9vbD4KKwlfX3ByZWQoX19jb21wLCAqX19waXZvdF9wb3MpOworCisgICAgICAvLyBEaXZpZGUsIHJldHVybmluZyBfX2VuZCAtIF9fYmVnaW4gLSAxIGluIHRoZSB3b3JzdCBjYXNlLgorICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fc3BsaXRfcG9zID0gX19wYXJhbGxlbF9wYXJ0aXRpb24oX19iZWdpbiwgX19lbmQgLSAxLAorCQkJCQkJCSBfX3ByZWQsCisJCQkJCQkJIF9fbnVtX3RocmVhZHMpOworCisgICAgICAvLyBTd2FwIGJhY2sgcGl2b3QgdG8gbWlkZGxlLgorICAgICAgc3RkOjppdGVyX3N3YXAoX19iZWdpbiArIF9fc3BsaXRfcG9zLCBfX3Bpdm90X3Bvcyk7CisgICAgICBfX3Bpdm90X3BvcyA9IF9fYmVnaW4gKyBfX3NwbGl0X3BvczsKKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKyAgICAgIF9SQUl0ZXIgX19yOworICAgICAgZm9yIChfX3IgPSBfX2JlZ2luOyBfX3IgIT0gX19waXZvdF9wb3M7ICsrX19yKQorCV9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfX2NvbXAoKl9fciwgKl9fcGl2b3RfcG9zKSk7CisgICAgICBmb3IgKDsgX19yICE9IF9fZW5kOyArK19fcikKKwlfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoIV9fY29tcCgqX19yLCAqX19waXZvdF9wb3MpKTsKKyNlbmRpZgorCisgICAgICByZXR1cm4gX19zcGxpdF9wb3M7CisgICAgfQorCisgIC8qKiBAYnJpZWYgUXVpY2tzb3J0IGNvbnF1ZXIgc3RlcC4KKyAgICAqICBAcGFyYW0gX190bHMgQXJyYXkgb2YgdGhyZWFkLWxvY2FsIHN0b3JhZ2VzLgorICAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIHN1YnNlcXVlbmNlLgorICAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2Ygc3Vic2VxdWVuY2UuCisgICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgICogIEBwYXJhbSBfX2lhbSBOdW1iZXIgb2YgdGhlIHRocmVhZCBwcm9jZXNzaW5nIHRoaXMgZnVuY3Rpb24uCisgICAgKiAgQHBhcmFtIF9fbnVtX3RocmVhZHMKKyAgICAqICAgICAgICAgIE51bWJlciBvZiB0aHJlYWRzIHRoYXQgYXJlIGFsbG93ZWQgdG8gd29yayBvbiB0aGlzIHBhcnQuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX3FzYl9jb25xdWVyKF9RU0JUaHJlYWRMb2NhbDxfUkFJdGVyPioqIF9fdGxzLAorCQkgIF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKwkJICBfQ29tcGFyZSBfX2NvbXAsCisJCSAgX1RocmVhZEluZGV4IF9faWFtLCBfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcywKKwkJICBib29sIF9fcGFyZW50X3dhaXQpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX24gPSBfX2VuZCAtIF9fYmVnaW47CisKKyAgICAgIGlmIChfX251bV90aHJlYWRzIDw9IDEgfHwgX19uIDw9IDEpCisJeworICAgICAgICAgIF9fdGxzW19faWFtXS0+X01faW5pdGlhbC5maXJzdCAgPSBfX2JlZ2luOworICAgICAgICAgIF9fdGxzW19faWFtXS0+X01faW5pdGlhbC5zZWNvbmQgPSBfX2VuZDsKKworICAgICAgICAgIF9fcXNiX2xvY2FsX3NvcnRfd2l0aF9oZWxwaW5nKF9fdGxzLCBfX2NvbXAsIF9faWFtLCBfX3BhcmVudF93YWl0KTsKKworICAgICAgICAgIHJldHVybjsKKwl9CisKKyAgICAgIC8vIERpdmlkZSBzdGVwLgorICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fc3BsaXRfcG9zID0KKwlfX3FzYl9kaXZpZGUoX19iZWdpbiwgX19lbmQsIF9fY29tcCwgX19udW1fdGhyZWFkcyk7CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoMCA8PSBfX3NwbGl0X3BvcyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3BsaXRfcG9zIDwgKF9fZW5kIC0gX19iZWdpbikpOworI2VuZGlmCisKKyAgICAgIF9UaHJlYWRJbmRleAorCV9fbnVtX3RocmVhZHNfbGVmdHNpZGUgPSBzdGQ6Om1heDxfVGhyZWFkSW5kZXg+CisJKDEsIHN0ZDo6bWluPF9UaHJlYWRJbmRleD4oX19udW1fdGhyZWFkcyAtIDEsIF9fc3BsaXRfcG9zCisJCQkJICAgKiBfX251bV90aHJlYWRzIC8gX19uKSk7CisKKyMgICAgIHByYWdtYSBvbXAgYXRvbWljCisgICAgICAqX190bHNbX19pYW1dLT5fTV9lbGVtZW50c19sZWZ0b3ZlciAtPSAoX0RpZmZlcmVuY2VUeXBlKTE7CisKKyAgICAgIC8vIENvbnF1ZXIgc3RlcC4KKyMgICAgIHByYWdtYSBvbXAgcGFyYWxsZWwgbnVtX3RocmVhZHMoMikKKyAgICAgIHsKKwlib29sIF9fd2FpdDsKKwlpZihvbXBfZ2V0X251bV90aHJlYWRzKCkgPCAyKQorICAgICAgICAgIF9fd2FpdCA9IGZhbHNlOworCWVsc2UKKyAgICAgICAgICBfX3dhaXQgPSBfX3BhcmVudF93YWl0OworCisjICAgICAgIHByYWdtYSBvbXAgc2VjdGlvbnMKKwl7CisjICAgICAgICAgcHJhZ21hIG9tcCBzZWN0aW9uCisJICB7CisJICAgIF9fcXNiX2NvbnF1ZXIoX190bHMsIF9fYmVnaW4sIF9fYmVnaW4gKyBfX3NwbGl0X3BvcywgX19jb21wLAorCQkJICBfX2lhbSwgX19udW1fdGhyZWFkc19sZWZ0c2lkZSwgX193YWl0KTsKKwkgICAgX193YWl0ID0gX19wYXJlbnRfd2FpdDsKKwkgIH0KKwkgIC8vIFRoZSBwaXZvdF9wb3MgaXMgbGVmdCBpbiBwbGFjZSwgdG8gZW5zdXJlIHRlcm1pbmF0aW9uLgorIyAgICAgICAgIHByYWdtYSBvbXAgc2VjdGlvbgorCSAgeworCSAgICBfX3FzYl9jb25xdWVyKF9fdGxzLCBfX2JlZ2luICsgX19zcGxpdF9wb3MgKyAxLCBfX2VuZCwgX19jb21wLAorCQkJICBfX2lhbSArIF9fbnVtX3RocmVhZHNfbGVmdHNpZGUsCisJCQkgIF9fbnVtX3RocmVhZHMgLSBfX251bV90aHJlYWRzX2xlZnRzaWRlLCBfX3dhaXQpOworCSAgICBfX3dhaXQgPSBfX3BhcmVudF93YWl0OworCSAgfQorCX0KKyAgICAgIH0KKyAgICB9CisKKyAgLyoqCisgICAgKiAgQGJyaWVmIFF1aWNrc29ydCBzdGVwIGRvaW5nIGxvYWQtYmFsYW5jZWQgbG9jYWwgc29ydC4KKyAgICAqICBAcGFyYW0gX190bHMgQXJyYXkgb2YgdGhyZWFkLWxvY2FsIHN0b3JhZ2VzLgorICAgICogIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICAqICBAcGFyYW0gX19pYW0gTnVtYmVyIG9mIHRoZSB0aHJlYWQgcHJvY2Vzc2luZyB0aGlzIGZ1bmN0aW9uLgorICAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX3FzYl9sb2NhbF9zb3J0X3dpdGhfaGVscGluZyhfUVNCVGhyZWFkTG9jYWw8X1JBSXRlcj4qKiBfX3RscywKKwkJCQkgIF9Db21wYXJlJiBfX2NvbXAsIF9UaHJlYWRJbmRleCBfX2lhbSwKKwkJCQkgIGJvb2wgX193YWl0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8X1JBSXRlciwgX1JBSXRlcj4gX1BpZWNlOworCisgICAgICBfUVNCVGhyZWFkTG9jYWw8X1JBSXRlcj4mIF9fdGwgPSAqX190bHNbX19pYW1dOworCisgICAgICBfRGlmZmVyZW5jZVR5cGUKKwlfX2Jhc2VfY2FzZV9uID0gX1NldHRpbmdzOjpnZXQoKS5zb3J0X3FzYl9iYXNlX2Nhc2VfbWF4aW1hbF9uOworICAgICAgaWYgKF9fYmFzZV9jYXNlX24gPCAyKQorCV9fYmFzZV9jYXNlX24gPSAyOworICAgICAgX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMgPSBfX3RsLl9NX251bV90aHJlYWRzOworCisgICAgICAvLyBFdmVyeSB0aHJlYWQgaGFzIGl0cyBvd24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICBfUmFuZG9tTnVtYmVyIF9fcm5nKF9faWFtICsgMSk7CisKKyAgICAgIF9QaWVjZSBfX2N1cnJlbnQgPSBfX3RsLl9NX2luaXRpYWw7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2VsZW1lbnRzX2RvbmUgPSAwOworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3RvdGFsX2VsZW1lbnRzX2RvbmUgPSAwOworI2VuZGlmCisKKyAgICAgIGZvciAoOzspCisJeworICAgICAgICAgIC8vIEludmFyaWFudDogX19jdXJyZW50IG11c3QgYmUgYSB2YWxpZCAobWF5YmUgZW1wdHkpIHJhbmdlLgorICAgICAgICAgIF9SQUl0ZXIgX19iZWdpbiA9IF9fY3VycmVudC5maXJzdCwgX19lbmQgPSBfX2N1cnJlbnQuc2Vjb25kOworICAgICAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX24gPSBfX2VuZCAtIF9fYmVnaW47CisKKyAgICAgICAgICBpZiAoX19uID4gX19iYXNlX2Nhc2VfbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLy8gRGl2aWRlLgorICAgICAgICAgICAgICBfUkFJdGVyIF9fcGl2b3RfcG9zID0gX19iZWdpbiArICBfX3JuZyhfX24pOworCisgICAgICAgICAgICAgIC8vIFN3YXAgX19waXZvdF9wb3MgdmFsdWUgdG8gZW5kLgorICAgICAgICAgICAgICBpZiAoX19waXZvdF9wb3MgIT0gKF9fZW5kIC0gMSkpCisgICAgICAgIAlzdGQ6Oml0ZXJfc3dhcChfX3Bpdm90X3BvcywgX19lbmQgLSAxKTsKKyAgICAgICAgICAgICAgX19waXZvdF9wb3MgPSBfX2VuZCAtIDE7CisKKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9fYmluZGVyMm5kCisJCTxfQ29tcGFyZSwgX1ZhbHVlVHlwZSwgX1ZhbHVlVHlwZSwgYm9vbD4KKwkJX19wcmVkKF9fY29tcCwgKl9fcGl2b3RfcG9zKTsKKworICAgICAgICAgICAgICAvLyBEaXZpZGUsIGxlYXZlIHBpdm90IHVuY2hhbmdlZCBpbiBsYXN0IHBsYWNlLgorICAgICAgICAgICAgICBfUkFJdGVyIF9fc3BsaXRfcG9zMSwgX19zcGxpdF9wb3MyOworICAgICAgICAgICAgICBfX3NwbGl0X3BvczEgPSBfX2dudV9zZXF1ZW50aWFsOjpwYXJ0aXRpb24oX19iZWdpbiwgX19lbmQgLSAxLAorCQkJCQkJCSBfX3ByZWQpOworCisgICAgICAgICAgICAgIC8vIExlZnQgc2lkZTogPCBfX3Bpdm90X3BvczsgX19yaWdodCBzaWRlOiA+PSBfX3Bpdm90X3Bvcy4KKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgICAgICAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfX2JlZ2luIDw9IF9fc3BsaXRfcG9zMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19zcGxpdF9wb3MxIDwgX19lbmQpOworI2VuZGlmCisgICAgICAgICAgICAgIC8vIFN3YXAgcGl2b3QgYmFjayB0byBtaWRkbGUuCisgICAgICAgICAgICAgIGlmIChfX3NwbGl0X3BvczEgIT0gX19waXZvdF9wb3MpCisgICAgICAgIAlzdGQ6Oml0ZXJfc3dhcChfX3NwbGl0X3BvczEsIF9fcGl2b3RfcG9zKTsKKyAgICAgICAgICAgICAgX19waXZvdF9wb3MgPSBfX3NwbGl0X3BvczE7CisKKyAgICAgICAgICAgICAgLy8gSW4gY2FzZSBhbGwgZWxlbWVudHMgYXJlIGVxdWFsLCBfX3NwbGl0X3BvczEgPT0gMC4KKyAgICAgICAgICAgICAgaWYgKChfX3NwbGl0X3BvczEgKyAxIC0gX19iZWdpbikgPCAoX19uID4+IDcpCisJCSAgfHwgKF9fZW5kIC0gX19zcGxpdF9wb3MxKSA8IChfX24gPj4gNykpCisgICAgICAgIAl7CisgICAgICAgICAgICAgICAgICAvLyBWZXJ5IHVuZXF1YWwgc3BsaXQsIG9uZSBwYXJ0IHNtYWxsZXIgdGhhbiBvbmUgMTI4dGgKKyAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnRzIG5vdCBzdHJpY3RseSBsYXJnZXIgdGhhbiB0aGUgcGl2b3QuCisgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X191bmFyeV9uZWdhdGU8X19nbnVfcGFyYWxsZWw6Ol9fYmluZGVyMXN0CisgICAgICAgICAgICAgICAgICAgIDxfQ29tcGFyZSwgX1ZhbHVlVHlwZSwgX1ZhbHVlVHlwZSwgYm9vbD4sIF9WYWx1ZVR5cGU+CisgICAgICAgICAgICAgICAgICAgIF9fcHJlZChfX2dudV9wYXJhbGxlbDo6X19iaW5kZXIxc3QKKyAgICAgICAgICAgICAgICAJIDxfQ29tcGFyZSwgX1ZhbHVlVHlwZSwgX1ZhbHVlVHlwZSwgYm9vbD4KKwkJCSAgIChfX2NvbXAsICpfX3Bpdm90X3BvcykpOworCisgICAgICAgICAgICAgICAgICAvLyBGaW5kIG90aGVyIGVuZCBvZiBwaXZvdC1lcXVhbCByYW5nZS4KKyAgICAgICAgICAgICAgICAgIF9fc3BsaXRfcG9zMiA9IF9fZ251X3NlcXVlbnRpYWw6OnBhcnRpdGlvbihfX3NwbGl0X3BvczEgKyAxLAorCQkJCQkJCSAgICAgX19lbmQsIF9fcHJlZCk7CisgICAgICAgIAl9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgCS8vIE9ubHkgc2tpcCB0aGUgcGl2b3QuCisgICAgICAgIAlfX3NwbGl0X3BvczIgPSBfX3NwbGl0X3BvczEgKyAxOworCisgICAgICAgICAgICAgIC8vIEVsZW1lbnRzIGVxdWFsIHRvIHBpdm90IGFyZSBkb25lLgorICAgICAgICAgICAgICBfX2VsZW1lbnRzX2RvbmUgKz0gKF9fc3BsaXRfcG9zMiAtIF9fc3BsaXRfcG9zMSk7CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworICAgICAgICAgICAgICBfX3RvdGFsX2VsZW1lbnRzX2RvbmUgKz0gKF9fc3BsaXRfcG9zMiAtIF9fc3BsaXRfcG9zMSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgLy8gQWx3YXlzIHB1c2ggbGFyZ2VyIHBhcnQgb250byBzdGFjay4KKyAgICAgICAgICAgICAgaWYgKCgoX19zcGxpdF9wb3MxICsgMSkgLSBfX2JlZ2luKSA8IChfX2VuZCAtIChfX3NwbGl0X3BvczIpKSkKKyAgICAgICAgCXsKKyAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHNpZGUgbGFyZ2VyLgorICAgICAgICAgICAgICAgICAgaWYgKChfX3NwbGl0X3BvczIpICE9IF9fZW5kKQorICAgICAgICAgICAgICAgICAgICBfX3RsLl9NX2xlZnRvdmVyX3BhcnRzLnB1c2hfZnJvbnQKKwkJICAgICAgKHN0ZDo6bWFrZV9wYWlyKF9fc3BsaXRfcG9zMiwgX19lbmQpKTsKKworICAgICAgICAgICAgICAgICAgLy9fX2N1cnJlbnQuZmlyc3QgPSBfX2JlZ2luOyAgICAvL2FscmVhZHkgc2V0IGFueXdheQorICAgICAgICAgICAgICAgICAgX19jdXJyZW50LnNlY29uZCA9IF9fc3BsaXRfcG9zMTsKKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAJfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgIAl7CisgICAgICAgICAgICAgICAgICAvLyBMZWZ0IHNpZGUgbGFyZ2VyLgorICAgICAgICAgICAgICAgICAgaWYgKF9fYmVnaW4gIT0gX19zcGxpdF9wb3MxKQorICAgICAgICAgICAgICAgICAgICBfX3RsLl9NX2xlZnRvdmVyX3BhcnRzLnB1c2hfZnJvbnQoc3RkOjptYWtlX3BhaXIKKwkJCQkJCSAgICAgIChfX2JlZ2luLCBfX3NwbGl0X3BvczEpKTsKKworICAgICAgICAgICAgICAgICAgX19jdXJyZW50LmZpcnN0ID0gX19zcGxpdF9wb3MyOworICAgICAgICAgICAgICAgICAgLy9fX2N1cnJlbnQuc2Vjb25kID0gX19lbmQ7ICAgICAvL2FscmVhZHkgc2V0IGFueXdheQorICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAl9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX2dudV9zZXF1ZW50aWFsOjpzb3J0KF9fYmVnaW4sIF9fZW5kLCBfX2NvbXApOworICAgICAgICAgICAgICBfX2VsZW1lbnRzX2RvbmUgKz0gX19uOworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKyAgICAgICAgICAgICAgX190b3RhbF9lbGVtZW50c19kb25lICs9IF9fbjsKKyNlbmRpZgorCisgICAgICAgICAgICAgIC8vIFByZWZlciBvd24gc3RhY2ssIHNtYWxsIHBpZWNlcy4KKyAgICAgICAgICAgICAgaWYgKF9fdGwuX01fbGVmdG92ZXJfcGFydHMucG9wX2Zyb250KF9fY3VycmVudCkpCisgICAgICAgIAljb250aW51ZTsKKworIyAgICAgICAgICAgICBwcmFnbWEgb21wIGF0b21pYworICAgICAgICAgICAgICAqX190bC5fTV9lbGVtZW50c19sZWZ0b3ZlciAtPSBfX2VsZW1lbnRzX2RvbmU7CisKKyAgICAgICAgICAgICAgX19lbGVtZW50c19kb25lID0gMDsKKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKyAgICAgICAgICAgICAgZG91YmxlIF9fc2VhcmNoX3N0YXJ0ID0gb21wX2dldF93dGltZSgpOworI2VuZGlmCisKKyAgICAgICAgICAgICAgLy8gTG9vayBmb3IgbmV3IHdvcmsuCisgICAgICAgICAgICAgIGJvb2wgX19zdWNjZXNzZnVsbHlfc3RvbGVuID0gZmFsc2U7CisgICAgICAgICAgICAgIHdoaWxlIChfX3dhaXQgJiYgKl9fdGwuX01fZWxlbWVudHNfbGVmdG92ZXIgPiAwCisgICAgICAgICAgICAgICAgICAgICAmJiAhX19zdWNjZXNzZnVsbHlfc3RvbGVuCisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworICAgICAgICAgICAgICAgICAgICAgIC8vIFBvc3NpYmxlIGRlYWQtbG9jay4KKyAgICAgICAgICAgICAgICAgICAgICYmIChvbXBfZ2V0X3d0aW1lKCkgPCAoX19zZWFyY2hfc3RhcnQgKyAxLjApKQorI2VuZGlmCisJCSAgICAgKQorICAgICAgICAJeworICAgICAgICAgICAgICAgICAgX1RocmVhZEluZGV4IF9fdmljdGltOworICAgICAgICAgICAgICAgICAgX192aWN0aW0gPSBfX3JuZyhfX251bV90aHJlYWRzKTsKKworICAgICAgICAgICAgICAgICAgLy8gTGFyZ2UgcGllY2VzLgorICAgICAgICAgICAgICAgICAgX19zdWNjZXNzZnVsbHlfc3RvbGVuID0gKF9fdmljdGltICE9IF9faWFtKQorCQkgICAgJiYgX190bHNbX192aWN0aW1dLT5fTV9sZWZ0b3Zlcl9wYXJ0cy5wb3BfYmFjayhfX2N1cnJlbnQpOworICAgICAgICAgICAgICAgICAgaWYgKCFfX3N1Y2Nlc3NmdWxseV9zdG9sZW4pCisgICAgICAgICAgICAgICAgICAgIF9feWllbGQoKTsKKyNpZiAhZGVmaW5lZChfX0lDQykgJiYgIWRlZmluZWQoX19FQ0MpCisjICAgICAgICAgICAgICAgICBwcmFnbWEgb21wIGZsdXNoCisjZW5kaWYKKyAgICAgICAgCX0KKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKyAgICAgICAgICAgICAgaWYgKG9tcF9nZXRfd3RpbWUoKSA+PSAoX19zZWFyY2hfc3RhcnQgKyAxLjApKQorICAgICAgICAJeworICAgICAgICAgICAgICAgICAgc2xlZXAoMSk7CisgICAgICAgICAgICAgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQob21wX2dldF93dGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCAoX19zZWFyY2hfc3RhcnQgKyAxLjApKTsKKyAgICAgICAgCX0KKyNlbmRpZgorICAgICAgICAgICAgICBpZiAoIV9fc3VjY2Vzc2Z1bGx5X3N0b2xlbikKKyAgICAgICAgCXsKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgICAgICAgICAgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoKl9fdGwuX01fZWxlbWVudHNfbGVmdG92ZXIgPT0gMCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCX0KKyAgICAgICAgICAgIH0KKwl9CisgICAgfQorCisgIC8qKiBAYnJpZWYgVG9wLWxldmVsIHF1aWNrc29ydCByb3V0aW5lLgorICAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIHNlcXVlbmNlLgorICAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2Ygc2VxdWVuY2UuCisgICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgICogIEBwYXJhbSBfX251bV90aHJlYWRzIE51bWJlciBvZiB0aHJlYWRzIHRoYXQgYXJlIGFsbG93ZWQgdG8gd29yayBvbgorICAgICogIHRoaXMgcGFydC4KKyAgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19wYXJhbGxlbF9zb3J0X3FzYihfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCQlfQ29tcGFyZSBfX2NvbXAsIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19lbmQgLSBfX2JlZ2luKQorCisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPF9SQUl0ZXIsIF9SQUl0ZXI+IF9QaWVjZTsKKworICAgICAgdHlwZWRlZiBfUVNCVGhyZWFkTG9jYWw8X1JBSXRlcj4gX1RMU1R5cGU7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX24gPSBfX2VuZCAtIF9fYmVnaW47CisKKyAgICAgIGlmIChfX24gPD0gMSkKKwlyZXR1cm47CisKKyAgICAgIC8vIEF0IGxlYXN0IG9uZSBlbGVtZW50IHBlciBwcm9jZXNzb3IuCisgICAgICBpZiAoX19udW1fdGhyZWFkcyA+IF9fbikKKwlfX251bV90aHJlYWRzID0gc3RhdGljX2Nhc3Q8X1RocmVhZEluZGV4PihfX24pOworCisgICAgICAvLyBJbml0aWFsaXplIHRocmVhZCBsb2NhbCBzdG9yYWdlCisgICAgICBfVExTVHlwZSoqIF9fdGxzID0gbmV3IF9UTFNUeXBlKltfX251bV90aHJlYWRzXTsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3F1ZXVlX3NpemUgPSAoX19udW1fdGhyZWFkcworCQkJCSAgICAgICogKF9UaHJlYWRJbmRleCkoX19yZF9sb2cyKF9fbikgKyAxKSk7CisgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX3QgPSAwOyBfX3QgPCBfX251bV90aHJlYWRzOyArK19fdCkKKwlfX3Rsc1tfX3RdID0gbmV3IF9RU0JUaHJlYWRMb2NhbDxfUkFJdGVyPihfX3F1ZXVlX3NpemUpOworCisgICAgICAvLyBUaGVyZSBjYW4gbmV2ZXIgYmUgbW9yZSB0aGFuIGNlaWwoX19yZF9sb2cyKF9fbikpIHJhbmdlcyBvbiB0aGUKKyAgICAgIC8vIHN0YWNrLCBiZWNhdXNlCisgICAgICAvLyAxLiBPbmx5IG9uZSBwcm9jZXNzb3IgcHVzaGVzIG9udG8gdGhlIHN0YWNrCisgICAgICAvLyAyLiBUaGUgbGFyZ2VzdCByYW5nZSBoYXMgYXQgbW9zdCBsZW5ndGggX19uCisgICAgICAvLyAzLiBFYWNoIHJhbmdlIGlzIGxhcmdlciB0aGFuIGhhbGYgb2YgdGhlIHJhbmdlIHJlbWFpbmluZworICAgICAgdm9sYXRpbGUgX0RpZmZlcmVuY2VUeXBlIF9fZWxlbWVudHNfbGVmdG92ZXIgPSBfX247CisgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX2kgPSAwOyBfX2kgPCBfX251bV90aHJlYWRzOyArK19faSkKKwl7CisgICAgICAgICAgX190bHNbX19pXS0+X01fZWxlbWVudHNfbGVmdG92ZXIgPSAmX19lbGVtZW50c19sZWZ0b3ZlcjsKKyAgICAgICAgICBfX3Rsc1tfX2ldLT5fTV9udW1fdGhyZWFkcyA9IF9fbnVtX3RocmVhZHM7CisgICAgICAgICAgX190bHNbX19pXS0+X01fZ2xvYmFsID0gc3RkOjptYWtlX3BhaXIoX19iZWdpbiwgX19lbmQpOworCisgICAgICAgICAgLy8gSnVzdCBpbiBjYXNlIG5vdGhpbmcgaXMgbGVmdCB0byBhc3NpZ24uCisgICAgICAgICAgX190bHNbX19pXS0+X01faW5pdGlhbCA9IHN0ZDo6bWFrZV9wYWlyKF9fZW5kLCBfX2VuZCk7CisJfQorCisgICAgICAvLyBNYWluIHJlY3Vyc2lvbiBjYWxsLgorICAgICAgX19xc2JfY29ucXVlcihfX3RscywgX19iZWdpbiwgX19iZWdpbiArIF9fbiwgX19jb21wLCAwLAorCQkgICAgX19udW1fdGhyZWFkcywgdHJ1ZSk7CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgICAvLyBBbGwgc3RhY2sgbXVzdCBiZSBlbXB0eS4KKyAgICAgIF9QaWVjZSBfX2R1bW15OworICAgICAgZm9yIChfVGhyZWFkSW5kZXggX19pID0gMTsgX19pIDwgX19udW1fdGhyZWFkczsgKytfX2kpCisJX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKAorICAgICAgICAgICFfX3Rsc1tfX2ldLT5fTV9sZWZ0b3Zlcl9wYXJ0cy5wb3BfYmFjayhfX2R1bW15KSk7CisjZW5kaWYKKworICAgICAgZm9yIChfVGhyZWFkSW5kZXggX19pID0gMDsgX19pIDwgX19udW1fdGhyZWFkczsgKytfX2kpCisJZGVsZXRlIF9fdGxzW19faV07CisgICAgICBkZWxldGVbXSBfX3RsczsKKyAgICB9Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfQkFMQU5DRURfUVVJQ0tTT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYmFzZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiMzMzNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYmFzZS5oCkBAIC0wLDAgKzEsNDI2IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvYmFzZS5oCisgKiAgQGJyaWVmIFNlcXVlbnRpYWwgaGVscGVyIGZ1bmN0aW9ucy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEpvaGFubmVzIFNpbmdsZXIuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfQkFTRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX0JBU0VfSCAxCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8b21wLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9iYXNpY19pdGVyYXRvci5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3BhcmFsbGVsLmg+CisKKy8vIFBhcmFsbGVsIG1vZGUgbmFtZXNwYWNlcy4KKworLyoqCisgKiBAbmFtZXNwYWNlIHN0ZDo6X19wYXJhbGxlbAorICogQGJyaWVmIEdOVSBwYXJhbGxlbCBjb2RlLCByZXBsYWNlcyBzdGFuZGFyZCBiZWhhdmlvciB3aXRoIHBhcmFsbGVsIGJlaGF2aW9yLgorICovCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkgCit7IAorICBuYW1lc3BhY2UgX19wYXJhbGxlbCB7IH0gCit9CisKKy8qKgorICogQG5hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAorICogQGJyaWVmIEdOVSBwYXJhbGxlbCBjb2RlIGZvciBwdWJsaWMgdXNlLgorICovCituYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKK3sKKyAgLy8gSW1wb3J0IGFsbCB0aGUgcGFyYWxsZWwgdmVyc2lvbnMgb2YgY29tcG9uZW50cyBpbiBuYW1lc3BhY2Ugc3RkLgorICB1c2luZyBuYW1lc3BhY2Ugc3RkOjpfX3BhcmFsbGVsOworfQorCisvKioKKyAqIEBuYW1lc3BhY2UgX19nbnVfc2VxdWVudGlhbAorICogQGJyaWVmIEdOVSBzZXF1ZW50aWFsIGNsYXNzZXMgZm9yIHB1YmxpYyB1c2UuCisgKi8KK25hbWVzcGFjZSBfX2dudV9zZXF1ZW50aWFsIAoreyAKKyAgLy8gSW1wb3J0IHdoYXRldmVyIGlzIHRoZSBzZXJpYWwgdmVyc2lvbi4KKyNpZmRlZiBfR0xJQkNYWF9QQVJBTExFTAorICB1c2luZyBuYW1lc3BhY2Ugc3RkOjpfR0xJQkNYWF9TVERfQTsKKyNlbHNlCisgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisjZW5kaWYgICAKK30KKworCituYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKK3sKKyAgLy8gTkI6IEluY2x1ZGluZyB0aGlzIGZpbGUgY2Fubm90IHByb2R1Y2UgKHVucmVzb2x2ZWQpIHN5bWJvbHMgZnJvbQorICAvLyB0aGUgT3Blbk1QIHJ1bnRpbWUgdW5sZXNzIHRoZSBwYXJhbGxlbCBtb2RlIGlzIGFjdHVhbGx5IGludm9rZWQKKyAgLy8gYW5kIGFjdGl2ZSwgd2hpY2ggaW1wbGVzIHRoYXQgdGhlIE9wZW5NUCBydW50aW1lIGlzIGFjdHVhbGx5CisgIC8vIGdvaW5nIHRvIGJlIGxpbmtlZCBpbi4KKyAgaW5saW5lIF9UaHJlYWRJbmRleAorICBfX2dldF9tYXhfdGhyZWFkcygpIAorICB7IAorICAgIF9UaHJlYWRJbmRleCBfX2kgPSBvbXBfZ2V0X21heF90aHJlYWRzKCk7CisgICAgcmV0dXJuIF9faSA+IDEgPyBfX2kgOiAxOyAKKyAgfQorCisKKyAgaW5saW5lIGJvb2wgCisgIF9faXNfcGFyYWxsZWwoY29uc3QgX1BhcmFsbGVsaXNtIF9fcCkgeyByZXR1cm4gX19wICE9IHNlcXVlbnRpYWw7IH0KKworCisgIC8qKiBAYnJpZWYgQ2FsY3VsYXRlcyB0aGUgcm91bmRlZC1kb3duIGxvZ2FyaXRobSBvZiBAYyBfX24gZm9yIGJhc2UgMi4KKyAgICogIEBwYXJhbSBfX24gQXJndW1lbnQuCisgICAqICBAcmV0dXJuIFJldHVybnMgMCBmb3IgYW55IGFyZ3VtZW50IDwxLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CisgICAgaW5saW5lIF9TaXplCisgICAgX19yZF9sb2cyKF9TaXplIF9fbikKKyAgICB7CisgICAgICBfU2l6ZSBfX2s7CisgICAgICBmb3IgKF9fayA9IDA7IF9fbiA+IDE7IF9fbiA+Pj0gMSkKKyAgICAgICAgKytfX2s7CisgICAgICByZXR1cm4gX19rOworICAgIH0KKworICAvKiogQGJyaWVmIEVuY29kZSB0d28gaW50ZWdlcnMgaW50byBvbmUgZ251X3BhcmFsbGVsOjpfQ0FTYWJsZS4KKyAgICogIEBwYXJhbSBfX2EgRmlyc3QgaW50ZWdlciwgdG8gYmUgZW5jb2RlZCBpbiB0aGUgbW9zdC1zaWduaWZpY2FudCBAYworICAgKiAgX0NBU2FibGVfYml0cy8yIGJpdHMuCisgICAqICBAcGFyYW0gX19iIFNlY29uZCBpbnRlZ2VyLCB0byBiZSBlbmNvZGVkIGluIHRoZSBsZWFzdC1zaWduaWZpY2FudAorICAgKiAgQGMgX0NBU2FibGVfYml0cy8yIGJpdHMuCisgICAqICBAcmV0dXJuIHZhbHVlIGVuY29kaW5nIEBjIF9fYSBhbmQgQGMgX19iLgorICAgKiAgQHNlZSBfX2RlY29kZTIKKyAgICovCisgIGlubGluZSBfQ0FTYWJsZQorICBfX2VuY29kZTIoaW50IF9fYSwgaW50IF9fYikgICAgIC8vbXVzdCBhbGwgYmUgbm9uLW5lZ2F0aXZlLCBhY3R1YWxseQorICB7CisgICAgcmV0dXJuICgoKF9DQVNhYmxlKV9fYSkgPDwgKF9DQVNhYmxlX2JpdHMgLyAyKSkgfCAoKChfQ0FTYWJsZSlfX2IpIDw8IDApOworICB9CisKKyAgLyoqIEBicmllZiBEZWNvZGUgdHdvIGludGVnZXJzIGZyb20gb25lIGdudV9wYXJhbGxlbDo6X0NBU2FibGUuCisgICAqICBAcGFyYW0gX194IF9fZ251X3BhcmFsbGVsOjpfQ0FTYWJsZSB0byBkZWNvZGUgaW50ZWdlcnMgZnJvbS4KKyAgICogIEBwYXJhbSBfX2EgRmlyc3QgaW50ZWdlciwgdG8gYmUgZGVjb2RlZCBmcm9tIHRoZSBtb3N0LXNpZ25pZmljYW50CisgICAqICBAYyBfQ0FTYWJsZV9iaXRzLzIgYml0cyBvZiBAYyBfX3guCisgICAqICBAcGFyYW0gX19iIFNlY29uZCBpbnRlZ2VyLCB0byBiZSBlbmNvZGVkIGluIHRoZSBsZWFzdC1zaWduaWZpY2FudAorICAgKiAgQGMgX0NBU2FibGVfYml0cy8yIGJpdHMgb2YgQGMgX194LgorICAgKiAgQHNlZSBfX2VuY29kZTIKKyAgICovCisgIGlubGluZSB2b2lkCisgIF9fZGVjb2RlMihfQ0FTYWJsZSBfX3gsIGludCYgX19hLCBpbnQmIF9fYikKKyAgeworICAgIF9fYSA9IChpbnQpKChfX3ggPj4gKF9DQVNhYmxlX2JpdHMgLyAyKSkgJiBfQ0FTYWJsZV9tYXNrKTsKKyAgICBfX2IgPSAoaW50KSgoX194ID4+ICAgICAgICAgICAgICAgMCApICYgX0NBU2FibGVfbWFzayk7CisgIH0KKworICAvL25lZWRlZCBmb3IgcGFyYWxsZWwgIm51bWVyaWMiLCBldmVuIGlmICJhbGdvcml0aG0iIG5vdCBpbmNsdWRlZAorCisgIC8qKiBAYnJpZWYgRXF1aXZhbGVudCB0byBzdGQ6Om1pbi4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb25zdCBfVHAmCisgICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKKyAgICB7IHJldHVybiAoX19hIDwgX19iKSA/IF9fYSA6IF9fYjsgfQorCisgIC8qKiBAYnJpZWYgRXF1aXZhbGVudCB0byBzdGQ6Om1heC4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBjb25zdCBfVHAmCisgICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKKyAgICB7IHJldHVybiAoX19hID4gX19iKSA/IF9fYSA6IF9fYjsgfQorCisgIC8qKiBAYnJpZWYgQ29uc3RydWN0cyBwcmVkaWNhdGUgZm9yIGVxdWFsaXR5IGZyb20gc3RyaWN0IHdlYWsKKyAgICogIG9yZGVyaW5nIHByZWRpY2F0ZQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNsYXNzIF9FcXVhbEZyb21MZXNzIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBib29sPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgX0NvbXBhcmUmIF9NX2NvbXA7CisKKyAgICBwdWJsaWM6CisgICAgICBfRXF1YWxGcm9tTGVzcyhfQ29tcGFyZSYgX19jb21wKSA6IF9NX2NvbXAoX19jb21wKSB7IH0KKworICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikKKyAgICAgIHsgcmV0dXJuICFfTV9jb21wKF9fYSwgX19iKSAmJiAhX01fY29tcChfX2IsIF9fYSk7IH0KKyAgICB9OworCisKKyAgLyoqIEBicmllZiBTaW1pbGFyIHRvIHN0ZDo6dW5hcnlfbmVnYXRlLAorICAgKiAgYnV0IGdpdmluZyB0aGUgYXJndW1lbnQgdHlwZXMgZXhwbGljaXRseS4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgYXJndW1lbnRfdHlwZT4KKyAgICBjbGFzcyBfX3VuYXJ5X25lZ2F0ZQorICAgIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248YXJndW1lbnRfdHlwZSwgYm9vbD4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX1ByZWRpY2F0ZSBfTV9wcmVkOworCisgICAgcHVibGljOgorICAgICAgZXhwbGljaXQKKyAgICAgIF9fdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkgeyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgYXJndW1lbnRfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gIV9NX3ByZWQoX194KTsgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBTaW1pbGFyIHRvIHN0ZDo6YmluZGVyMXN0LAorICAgKiAgYnV0IGdpdmluZyB0aGUgYXJndW1lbnQgdHlwZXMgZXhwbGljaXRseS4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX09wZXJhdGlvbiwgdHlwZW5hbWUgX0ZpcnN0QXJndW1lbnRUeXBlLAorCSAgIHR5cGVuYW1lIF9TZWNvbmRBcmd1bWVudFR5cGUsIHR5cGVuYW1lIF9SZXN1bHRUeXBlPgorICAgIGNsYXNzIF9fYmluZGVyMXN0CisgICAgOiBwdWJsaWMgc3RkOjp1bmFyeV9mdW5jdGlvbjxfU2Vjb25kQXJndW1lbnRUeXBlLCBfUmVzdWx0VHlwZT4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX09wZXJhdGlvbiBfTV9vcDsKKyAgICAgIF9GaXJzdEFyZ3VtZW50VHlwZSBfTV92YWx1ZTsKKworICAgIHB1YmxpYzoKKyAgICAgIF9fYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwgY29uc3QgX0ZpcnN0QXJndW1lbnRUeXBlJiBfX3kpCisgICAgICA6IF9NX29wKF9feCksIF9NX3ZhbHVlKF9feSkgeyB9CisKKyAgICAgIF9SZXN1bHRUeXBlCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9TZWNvbmRBcmd1bWVudFR5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIF9NX29wKF9NX3ZhbHVlLCBfX3gpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDEwOS4gIE1pc3NpbmcgYmluZGVycyBmb3Igbm9uLWNvbnN0IHNlcXVlbmNlIGVsZW1lbnRzCisgICAgICBfUmVzdWx0VHlwZQorICAgICAgb3BlcmF0b3IoKShfU2Vjb25kQXJndW1lbnRUeXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9vcChfTV92YWx1ZSwgX194KTsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgU2ltaWxhciB0byBzdGQ6OmJpbmRlcjJuZCwgYnV0IGdpdmluZyB0aGUgYXJndW1lbnQgdHlwZXMKKyAgICogIGV4cGxpY2l0bHkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3BlcmF0aW9uLCB0eXBlbmFtZSBfRmlyc3RBcmd1bWVudFR5cGUsCisJICAgdHlwZW5hbWUgX1NlY29uZEFyZ3VtZW50VHlwZSwgdHlwZW5hbWUgX1Jlc3VsdFR5cGU+CisgICAgY2xhc3MgX19iaW5kZXIybmQKKyAgICA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9GaXJzdEFyZ3VtZW50VHlwZSwgX1Jlc3VsdFR5cGU+CisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIF9PcGVyYXRpb24gX01fb3A7CisgICAgICBfU2Vjb25kQXJndW1lbnRUeXBlIF9NX3ZhbHVlOworCisgICAgcHVibGljOgorICAgICAgX19iaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LCBjb25zdCBfU2Vjb25kQXJndW1lbnRUeXBlJiBfX3kpCisgICAgICA6IF9NX29wKF9feCksIF9NX3ZhbHVlKF9feSkgeyB9CisKKyAgICAgIF9SZXN1bHRUeXBlCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9GaXJzdEFyZ3VtZW50VHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gX01fb3AoX194LCBfTV92YWx1ZSk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTA5LiAgTWlzc2luZyBiaW5kZXJzIGZvciBub24tY29uc3Qgc2VxdWVuY2UgZWxlbWVudHMKKyAgICAgIF9SZXN1bHRUeXBlCisgICAgICBvcGVyYXRvcigpKF9GaXJzdEFyZ3VtZW50VHlwZSYgX194KQorICAgICAgeyByZXR1cm4gX01fb3AoX194LCBfTV92YWx1ZSk7IH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgU2ltaWxhciB0byBzdGQ6OmVxdWFsX3RvLCBidXQgYWxsb3dzIHR3byBkaWZmZXJlbnQgdHlwZXMuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIHN0cnVjdCBfRXF1YWxUbyA6IHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBib29sPgorICAgIHsKKyAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVDEmIF9fdDEsIGNvbnN0IF9UMiYgX190MikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fdDEgPT0gX190MjsgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBTaW1pbGFyIHRvIHN0ZDo6bGVzcywgYnV0IGFsbG93cyB0d28gZGlmZmVyZW50IHR5cGVzLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX0xlc3MgOiBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxfVDEsIF9UMiwgYm9vbD4KKyAgICB7CisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UMSYgX190MSwgY29uc3QgX1QyJiBfX3QyKSBjb25zdAorICAgICAgeyByZXR1cm4gX190MSA8IF9fdDI7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfVDImIF9fdDIsIGNvbnN0IF9UMSYgX190MSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fdDIgPCBfX3QxOyB9CisgICAgfTsKKworICAvLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBvbmUgdHlwZS4gU2FtZSBhcyBzdGQ6Omxlc3MuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0xlc3M8X1RwLCBfVHA+CisgICAgOiBwdWJsaWMgc3RkOjpsZXNzPF9UcD4geyB9OworCisgIC8qKiBAYnJpZWYgU2ltaWxhciB0byBzdGQ6OnBsdXMsIGJ1dCBhbGxvd3MgdHdvIGRpZmZlcmVudCB0eXBlcy4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMiwgdHlwZW5hbWUgX1Jlc3VsdAorCSAgID0gX190eXBlb2ZfXygqc3RhdGljX2Nhc3Q8X1RwMSo+KDApCisJCQkrICpzdGF0aWNfY2FzdDxfVHAyKj4oMCkpPgorICAgIHN0cnVjdCBfUGx1cyA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxfVHAxLCBfVHAyLCBfUmVzdWx0PgorICAgIHsKKyAgICAgIF9SZXN1bHQKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RwMSYgX194LCBjb25zdCBfVHAyJiBfX3kpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3ggKyBfX3k7IH0KKyAgICB9OworCisgIC8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIG9uZSB0eXBlLiBTYW1lIGFzIHN0ZDo6cGx1cy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUGx1czxfVHAsIF9UcCwgX1RwPgorICAgIDogcHVibGljIHN0ZDo6cGx1czxfVHA+IHsgfTsKKworICAvKiogQGJyaWVmIFNpbWlsYXIgdG8gc3RkOjptdWx0aXBsaWVzLCBidXQgYWxsb3dzIHR3byBkaWZmZXJlbnQgdHlwZXMuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDIsIHR5cGVuYW1lIF9SZXN1bHQKKwkgICA9IF9fdHlwZW9mX18oKnN0YXRpY19jYXN0PF9UcDEqPigwKQorCQkJKiAqc3RhdGljX2Nhc3Q8X1RwMio+KDApKT4KKyAgICBzdHJ1Y3QgX011bHRpcGxpZXMgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248X1RwMSwgX1RwMiwgX1Jlc3VsdD4KKyAgICB7CisgICAgICBfUmVzdWx0CisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UcDEmIF9feCwgY29uc3QgX1RwMiYgX195KSBjb25zdAorICAgICAgeyByZXR1cm4gX194ICogX195OyB9CisgICAgfTsKKworICAvLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGZvciBvbmUgdHlwZS4gU2FtZSBhcyBzdGQ6Om11bHRpcGxpZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX011bHRpcGxpZXM8X1RwLCBfVHAsIF9UcD4KKyAgICA6IHB1YmxpYyBzdGQ6Om11bHRpcGxpZXM8X1RwPiB7IH07CisKKyAgLyoqIEBicmllZiBfSXRlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIF9fZ251X3BhcmFsbGVsOjpfUHNldWRvU2VxdWVuY2UuCisgICAqICBJZiBmZWF0dXJlcyB0aGUgdXN1YWwgcmFuZG9tLWFjY2VzcyBpdGVyYXRvciBmdW5jdGlvbmFsaXR5LgorICAgKiAgQHBhcmFtIF9UcCBTZXF1ZW5jZSBfTV92YWx1ZSB0eXBlLgorICAgKiAgQHBhcmFtIF9EaWZmZXJlbmNlVHAgU2VxdWVuY2UgZGlmZmVyZW5jZSB0eXBlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwPgorICAgIGNsYXNzIF9Qc2V1ZG9TZXF1ZW5jZUl0ZXJhdG9yCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIF9Qc2V1ZG9TZXF1ZW5jZUl0ZXJhdG9yKGNvbnN0IF9UcCYgX192YWwsIF9EaWZmZXJlbmNlVHlwZSBfX3BvcykKKyAgICAgIDogX01fdmFsKF9fdmFsKSwgX01fcG9zKF9fcG9zKSB7IH0KKworICAgICAgLy8gUHJlLWluY3JlbWVudCBvcGVyYXRvci4KKyAgICAgIF9Qc2V1ZG9TZXF1ZW5jZUl0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJKytfTV9wb3M7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLyBQb3N0LWluY3JlbWVudCBvcGVyYXRvci4KKyAgICAgIF9Qc2V1ZG9TZXF1ZW5jZUl0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuIF9Qc2V1ZG9TZXF1ZW5jZUl0ZXJhdG9yKF9NX3BvcysrKTsgfQorCisgICAgICBjb25zdCBfVHAmCisgICAgICBvcGVyYXRvciooKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdmFsOyB9CisKKyAgICAgIGNvbnN0IF9UcCYKKyAgICAgIG9wZXJhdG9yW10oX0RpZmZlcmVuY2VUeXBlKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdmFsOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgX1BzZXVkb1NlcXVlbmNlSXRlcmF0b3ImIF9faTIpCisgICAgICB7IHJldHVybiBfTV9wb3MgPT0gX19pMi5fTV9wb3M7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBfUHNldWRvU2VxdWVuY2VJdGVyYXRvciYgX19pMikKKyAgICAgIHsgcmV0dXJuIF9NX3BvcyAhPSBfX2kyLl9NX3BvczsgfQorCisgICAgICBfRGlmZmVyZW5jZVR5cGUKKyAgICAgIG9wZXJhdG9yLShjb25zdCBfUHNldWRvU2VxdWVuY2VJdGVyYXRvciYgX19pMikKKyAgICAgIHsgcmV0dXJuIF9NX3BvcyAtIF9faTIuX01fcG9zOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX1RwJiBfTV92YWw7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX01fcG9zOworICAgIH07CisKKyAgLyoqIEBicmllZiBTZXF1ZW5jZSB0aGF0IGNvbmNlcHR1YWxseSBjb25zaXN0cyBvZiBtdWx0aXBsZSBjb3BpZXMgb2YKKyAgICAgIHRoZSBzYW1lIGVsZW1lbnQuCisgICAgICAqICBUaGUgY29waWVzIGFyZSBub3Qgc3RvcmVkIGV4cGxpY2l0bHksIG9mIGNvdXJzZS4KKyAgICAgICogIEBwYXJhbSBfVHAgU2VxdWVuY2UgX01fdmFsdWUgdHlwZS4KKyAgICAgICogIEBwYXJhbSBfRGlmZmVyZW5jZVRwIFNlcXVlbmNlIGRpZmZlcmVuY2UgdHlwZS4KKyAgICAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcD4KKyAgICBjbGFzcyBfUHNldWRvU2VxdWVuY2UKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfRGlmZmVyZW5jZVRwIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgLy8gQmV0dGVyIGNhc3QgZG93biB0byB1aW50NjRfdCwgdGhhbiB1cCB0byBfRGlmZmVyZW5jZVRwLgorICAgICAgdHlwZWRlZiBfUHNldWRvU2VxdWVuY2VJdGVyYXRvcjxfVHAsIHVpbnQ2NF90PiBpdGVyYXRvcjsKKworICAgICAgLyoqIEBicmllZiBDb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0gX192YWwgRWxlbWVudCBvZiB0aGUgc2VxdWVuY2UuCisgICAgICAgKiAgQHBhcmFtIF9fY291bnQgTnVtYmVyIG9mICh2aXJ0dWFsKSBjb3BpZXMuCisgICAgICAgKi8KKyAgICAgIF9Qc2V1ZG9TZXF1ZW5jZShjb25zdCBfVHAmIF9fdmFsLCBfRGlmZmVyZW5jZVR5cGUgX19jb3VudCkKKyAgICAgIDogX01fdmFsKF9fdmFsKSwgX01fY291bnQoX19jb3VudCkgIHsgfQorCisgICAgICAvKiogQGJyaWVmIEJlZ2luIGl0ZXJhdG9yLiAqLworICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9NX3ZhbCwgMCk7IH0KKworICAgICAgLyoqIEBicmllZiBFbmQgaXRlcmF0b3IuICovCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9NX3ZhbCwgX01fY291bnQpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgY29uc3QgX1RwJiBfTV92YWw7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX01fY291bnQ7CisgICAgfTsKKworICAvKiogQGJyaWVmIENvbXB1dGUgdGhlIG1lZGlhbiBvZiB0aHJlZSByZWZlcmVuY2VkIGVsZW1lbnRzLAorICAgICAgYWNjb3JkaW5nIHRvIEBjIF9fY29tcC4KKyAgICAgICogIEBwYXJhbSBfX2EgRmlyc3QgaXRlcmF0b3IuCisgICAgICAqICBAcGFyYW0gX19iIFNlY29uZCBpdGVyYXRvci4KKyAgICAgICogIEBwYXJhbSBfX2MgVGhpcmQgaXRlcmF0b3IuCisgICAgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyCisgICAgX19tZWRpYW5fb2ZfdGhyZWVfaXRlcmF0b3JzKF9SQUl0ZXIgX19hLCBfUkFJdGVyIF9fYiwKKwkJCQlfUkFJdGVyIF9fYywgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGlmIChfX2NvbXAoKl9fYSwgKl9fYikpCisJaWYgKF9fY29tcCgqX19iLCAqX19jKSkKKwkgIHJldHVybiBfX2I7CisJZWxzZQorCSAgaWYgKF9fY29tcCgqX19hLCAqX19jKSkKKwkgICAgcmV0dXJuIF9fYzsKKwkgIGVsc2UKKwkgICAgcmV0dXJuIF9fYTsKKyAgICAgIGVsc2UKKwl7CisJICAvLyBKdXN0IHN3YXAgX19hIGFuZCBfX2IuCisJICBpZiAoX19jb21wKCpfX2EsICpfX2MpKQorCSAgICByZXR1cm4gX19hOworCSAgZWxzZQorCSAgICBpZiAoX19jb21wKCpfX2IsICpfX2MpKQorCSAgICAgIHJldHVybiBfX2M7CisJICAgIGVsc2UKKwkgICAgICByZXR1cm4gX19iOworCX0KKyAgICB9CisKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9Db25kaXRpb24pIF9fZ2xpYmN4eF9hc3NlcnQoX0NvbmRpdGlvbikKKworfSAvL25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfQkFTRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2Jhc2ljX2l0ZXJhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2Jhc2ljX2l0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwYmZkOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaApAQCAtMCwwICsxLDQxIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaAorICogIEBicmllZiBJbmNsdWRlcyB0aGUgb3JpZ2luYWwgaGVhZGVyIGZpbGVzIGNvbmNlcm5lZCB3aXRoIGl0ZXJhdG9ycworICogIGV4Y2VwdCBmb3Igc3RyZWFtIGl0ZXJhdG9ycy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEpvaGFubmVzIFNpbmdsZXIuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfQkFTSUNfSVRFUkFUT1JfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9CQVNJQ19JVEVSQVRPUl9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvci5oPgorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfQkFTSUNfSVRFUkFUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9jaGVja2Vycy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9jaGVja2Vycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZmY2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2NoZWNrZXJzLmgKQEAgLTAsMCArMSw3MyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL2NoZWNrZXJzLmgKKyAqICBAYnJpZWYgUm91dGluZXMgZm9yIGNoZWNraW5nIHRoZSBjb3JyZWN0bmVzcyBvZiBhbGdvcml0aG0gcmVzdWx0cy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEpvaGFubmVzIFNpbmdsZXIuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfQ0hFQ0tFUlNfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9DSEVDS0VSU19IIDEKKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKioKKyAgICogQGJyaWVmIENoZWNrIHdoZXRoZXIgQGMgW19fYmVnaW4sIEBjIF9fZW5kKSBpcyBzb3J0ZWQgYWNjb3JkaW5nCisgICAqIHRvIEBjIF9fY29tcC4KKyAgICogQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2Ygc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2Ygc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICogQHJldHVybiBAYyB0cnVlIGlmIHNvcnRlZCwgQGMgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBib29sCisgICAgX19pc19zb3J0ZWQoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIGlmIChfX2JlZ2luID09IF9fZW5kKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgX0lJdGVyIF9fY3VycmVudChfX2JlZ2luKSwgX19yZWNlbnQoX19iZWdpbik7CisKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3Bvc2l0aW9uID0gMTsKKyAgICAgIGZvciAoX19jdXJyZW50Kys7IF9fY3VycmVudCAhPSBfX2VuZDsgX19jdXJyZW50KyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoX19jb21wKCpfX2N1cnJlbnQsICpfX3JlY2VudCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX3JlY2VudCA9IF9fY3VycmVudDsKKyAgICAgICAgICBfX3Bvc2l0aW9uKys7CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfQ0hFQ0tFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9jb21wYXRpYmlsaXR5LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2NvbXBhdGliaWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTc5NTliCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9jb21wYXRpYmlsaXR5LmgKQEAgLTAsMCArMSwxMzEgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9jb21wYXRpYmlsaXR5LmgKKyAqICBAYnJpZWYgQ29tcGF0aWJpbGl0eSBsYXllciwgbW9zdGx5IGNvbmNlcm5lZCB3aXRoIGF0b21pYyBvcGVyYXRpb25zLgorICoKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeQorICogIGFuZCBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgbGlicmFyeSdzIGludGVybmFsIHVzZS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEZlbGl4IFB1dHplLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX0NPTVBBVElCSUxJVFlfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9DT01QQVRJQklMSVRZX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvdHlwZXMuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9iYXNlLmg+CisKKyNpZiAhZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQgKF9fQ1lHV0lOX18pCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNlbmRpZgorCisjaWZkZWYgX19NSU5HVzMyX18KKy8vIEluY2x1ZGluZyA8d2luZG93cy5oPiB3aWxsIGRyYWcgaW4gYWxsIHRoZSB3aW5kb3dzMzIgbmFtZXMuICBTaW5jZQorLy8gdGhhdCBjYW4gY2F1c2UgdXNlciBjb2RlIHBvcnRhYmlsaXR5IHByb2JsZW1zLCB3ZSBqdXN0IGRlY2xhcmUgdGhlCisvLyBvbmUgbmVlZGVkIGZ1bmN0aW9uIGhlcmUuCitleHRlcm4gIkMiCitfX2F0dHJpYnV0ZSgoZGxsaW1wb3J0KSkgdm9pZCBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkgU2xlZXAgKHVuc2lnbmVkIGxvbmcpOworI2VuZGlmCisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fYWRkX29tcCh2b2xhdGlsZSBfVHAqIF9fcHRyLCBfVHAgX19hZGRlbmQpCisgICAgeworICAgICAgaW50NjRfdCBfX3JlczsKKyNwcmFnbWEgb21wIGNyaXRpY2FsCisgICAgICB7CisJX19yZXMgPSAqX19wdHI7CisJKihfX3B0cikgKz0gX19hZGRlbmQ7CisgICAgICB9CisgICAgICByZXR1cm4gX19yZXM7CisgICAgfQorCisgIC8qKiBAYnJpZWYgQWRkIGEgdmFsdWUgdG8gYSB2YXJpYWJsZSwgYXRvbWljYWxseS4KKyAgICoKKyAgICogIEBwYXJhbSBfX3B0ciBQb2ludGVyIHRvIGEgc2lnbmVkIGludGVnZXIuCisgICAqICBAcGFyYW0gX19hZGRlbmQgVmFsdWUgdG8gYWRkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX2ZldGNoX2FuZF9hZGQodm9sYXRpbGUgX1RwKiBfX3B0ciwgX1RwIF9fYWRkZW5kKQorICAgIHsKKyAgICAgIGlmIChfX2F0b21pY19hbHdheXNfbG9ja19mcmVlKHNpemVvZihfVHApLCBfX3B0cikpCisJcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZChfX3B0ciwgX19hZGRlbmQsIF9fQVRPTUlDX0FDUV9SRUwpOworICAgICAgcmV0dXJuIF9fYWRkX29tcChfX3B0ciwgX19hZGRlbmQpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2Nhc19vbXAodm9sYXRpbGUgX1RwKiBfX3B0ciwgX1RwIF9fY29tcGFyYW5kLCBfVHAgX19yZXBsYWNlbWVudCkKKyAgICB7CisgICAgICBib29sIF9fcmVzID0gZmFsc2U7CisjcHJhZ21hIG9tcCBjcml0aWNhbAorICAgICAgeworCWlmICgqX19wdHIgPT0gX19jb21wYXJhbmQpCisJICB7CisJICAgICpfX3B0ciA9IF9fcmVwbGFjZW1lbnQ7CisJICAgIF9fcmVzID0gdHJ1ZTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBfX3JlczsKKyAgICB9CisKKyAgLyoqIEBicmllZiBDb21wYXJlLWFuZC1zd2FwCisgICAqCisgICAqIENvbXBhcmUgQGMgKl9fcHRyIGFuZCBAYyBfX2NvbXBhcmFuZC4gSWYgZXF1YWwsIGxldCBAYworICAgKiAqX19wdHI9X19yZXBsYWNlbWVudCBhbmQgcmV0dXJuIEBjIHRydWUsIHJldHVybiBAYyBmYWxzZSBvdGhlcndpc2UuCisgICAqCisgICAqICBAcGFyYW0gX19wdHIgUG9pbnRlciB0byBzaWduZWQgaW50ZWdlci4KKyAgICogIEBwYXJhbSBfX2NvbXBhcmFuZCBDb21wYXJlIHZhbHVlLgorICAgKiAgQHBhcmFtIF9fcmVwbGFjZW1lbnQgUmVwbGFjZW1lbnQgdmFsdWUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wKKyAgICBfX2NvbXBhcmVfYW5kX3N3YXAodm9sYXRpbGUgX1RwKiBfX3B0ciwgX1RwIF9fY29tcGFyYW5kLCBfVHAgX19yZXBsYWNlbWVudCkKKyAgICB7CisgICAgICBpZiAoX19hdG9taWNfYWx3YXlzX2xvY2tfZnJlZShzaXplb2YoX1RwKSwgX19wdHIpKQorCXJldHVybiBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oX19wdHIsICZfX2NvbXBhcmFuZCwgX19yZXBsYWNlbWVudCwKKwkJCQkJICAgZmFsc2UsIF9fQVRPTUlDX0FDUV9SRUwsCisJCQkJCSAgIF9fQVRPTUlDX1JFTEFYRUQpOworICAgICAgcmV0dXJuIF9fY2FzX29tcChfX3B0ciwgX19jb21wYXJhbmQsIF9fcmVwbGFjZW1lbnQpOworICAgIH0KKworICAvKiogQGJyaWVmIFlpZWxkIGNvbnRyb2wgdG8gYW5vdGhlciB0aHJlYWQsIHdpdGhvdXQgd2FpdGluZyBmb3IKKyAgICogIHRoZSBlbmQgb2YgdGhlIHRpbWUgc2xpY2UuCisgICAqLworICBpbmxpbmUgdm9pZAorICBfX3lpZWxkKCkKKyAgeworI2lmIGRlZmluZWQgKF9XSU4zMikgJiYgIWRlZmluZWQgKF9fQ1lHV0lOX18pCisgICAgU2xlZXAoMCk7CisjZWxzZQorICAgIHNjaGVkX3lpZWxkKCk7CisjZW5kaWYKKyAgfQorfSAvLyBlbmQgbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9DT01QQVRJQklMSVRZX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvY29tcGlsZXRpbWVfc2V0dGluZ3MuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvY29tcGlsZXRpbWVfc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODgwNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9jb21waWxldGltZV9zZXR0aW5ncy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9jb21waWxldGltZV9zZXR0aW5ncy5oCisgKiAgQGJyaWVmIERlZmluZXMgb24gb3B0aW9ucyBjb25jZXJuaW5nIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UsIGF0CisgKiAgY29tcGlsZS10aW1lLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2luY2x1ZGUgPGNzdGRpbz4KKworLyoqIEBicmllZiBEZXRlcm1pbmUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBwYXJhbGxlbCBtb2RlLgorICogIExldmVsIDEgcHJpbnRzIGEgbWVzc2FnZSBlYWNoIHRpbWUgYSBwYXJhbGxlbC1tb2RlIGZ1bmN0aW9uIGlzIGVudGVyZWQuICovCisjZGVmaW5lIF9HTElCQ1hYX1ZFUkJPU0VfTEVWRUwgMAorCisvKiogQGRlZiBfR0xJQkNYWF9DQUxMCisgKiAgQGJyaWVmIE1hY3JvIHRvIHByb2R1Y2UgbG9nIG1lc3NhZ2Ugd2hlbiBlbnRlcmluZyBhIGZ1bmN0aW9uLgorICogIEBwYXJhbSBfX24gSW5wdXQgc2l6ZS4KKyAqICBAc2VlIF9HTElCQ1hYX1ZFUkJPU0VfTEVWRUwgKi8KKyNpZiAoX0dMSUJDWFhfVkVSQk9TRV9MRVZFTCA9PSAwKQorI2RlZmluZSBfR0xJQkNYWF9DQUxMKF9fbikKKyNlbmRpZgorI2lmIChfR0xJQkNYWF9WRVJCT1NFX0xFVkVMID09IDEpCisjZGVmaW5lIF9HTElCQ1hYX0NBTEwoX19uKSBcCisgIHByaW50ZigiICAgJV9fczpcbmlhbSA9ICVkLCBfX24gPSAlbGQsIF9fbnVtX3RocmVhZHMgPSAlZFxuIiwgXAorICBfX1BSRVRUWV9GVU5DVElPTl9fLCBvbXBfZ2V0X3RocmVhZF9udW0oKSwgKF9fbiksIF9fZ2V0X21heF90aHJlYWRzKCkpOworI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfU0NBTEVfRE9XTl9GUFUKKy8qKiBAYnJpZWYgVXNlIGZsb2F0aW5nLXBvaW50IHNjYWxpbmcgaW5zdGVhZCBvZiBtb2R1bG8gZm9yIG1hcHBpbmcKKyAqICByYW5kb20gbnVtYmVycyB0byBhIHJhbmdlLiAgVGhpcyBjYW4gYmUgZmFzdGVyIG9uIGNlcnRhaW4gQ1BVcy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfU0NBTEVfRE9XTl9GUFUgMAorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfQVNTRVJUSU9OUworLyoqIEBicmllZiBTd2l0Y2ggb24gbWFueSBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlRpb25zIGluIHBhcmFsbGVsIGNvZGUuCisgKiAgU2hvdWxkIGJlIHN3aXRjaGVkIG9uIG9ubHkgbG9jYWxseS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfQVNTRVJUSU9OUyAwCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9SQU5ET01fU0hVRkZMRV9DT05TSURFUl9MMQorLyoqIEBicmllZiBTd2l0Y2ggb24gbWFueSBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlRpb25zIGluIHBhcmFsbGVsIGNvZGUuCisgKiAgQ29uc2lkZXIgdGhlIHNpemUgb2YgdGhlIEwxIGNhY2hlIGZvcgorKiAgZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX3JhbmRvbV9zaHVmZmxlKCkuICovCisjZGVmaW5lIF9HTElCQ1hYX1JBTkRPTV9TSFVGRkxFX0NPTlNJREVSX0wxIDAKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9SQU5ET01fU0hVRkZMRV9DT05TSURFUl9UTEIKKy8qKiBAYnJpZWYgU3dpdGNoIG9uIG1hbnkgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUaW9ucyBpbiBwYXJhbGxlbCBjb2RlLgorICogIENvbnNpZGVyIHRoZSBzaXplIG9mIHRoZSBUTEIgZm9yCisqICBnbnVfcGFyYWxsZWw6Ol9fcGFyYWxsZWxfcmFuZG9tX3NodWZmbGUoKS4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfUkFORE9NX1NIVUZGTEVfQ09OU0lERVJfVExCIDAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9lcXVhbGx5X3NwbGl0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2VxdWFsbHlfc3BsaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWU5MmFlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9lcXVhbGx5X3NwbGl0LmgKQEAgLTAsMCArMSw4OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL2VxdWFsbHlfc3BsaXQuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9FUVVBTExZX1NQTElUX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfRVFVQUxMWV9TUExJVF9IIDEKKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKiBAYnJpZWYgZnVuY3Rpb24gdG8gc3BsaXQgYSBzZXF1ZW5jZSBpbnRvIHBhcnRzIG9mIGFsbW9zdCBlcXVhbCBzaXplLgorICAgKgorICAgKiAgVGhlIHJlc3VsdGluZyBzZXF1ZW5jZSBfX3Mgb2YgbGVuZ3RoIF9fbnVtX3RocmVhZHMrMSBjb250YWlucyB0aGUKKyAgICogIHNwbGl0dGluZyBwb3NpdGlvbnMgd2hlbiBzcGxpdHRpbmcgdGhlIHJhbmdlIFswLF9fbikgaW50byBwYXJ0cyBvZgorICAgKiAgYWxtb3N0IGVxdWFsIHNpemUgKHBsdXMgbWludXMgMSkuICBUaGUgZmlyc3QgZW50cnkgaXMgMCwgdGhlIGxhc3QKKyAgICogIG9uZSBuLiBUaGVyZSBtYXkgcmVzdWx0IGVtcHR5IHBhcnRzLgorICAgKiAgQHBhcmFtIF9fbiBOdW1iZXIgb2YgZWxlbWVudHMKKyAgICogIEBwYXJhbSBfX251bV90aHJlYWRzIE51bWJlciBvZiBwYXJ0cworICAgKiAgQHBhcmFtIF9fcyBTcGxpdHRlcnMKKyAgICogIEByZXR1cm5zIEVuZCBvZiBfX3NwbGl0dGVyIHNlcXVlbmNlLCBpLmUuIEBjIF9fcytfX251bV90aHJlYWRzKzEgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0RpZmZlcmVuY2VUeXBlLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX19lcXVhbGx5X3NwbGl0KF9EaWZmZXJlbmNlVHlwZSBfX24sIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzLAorCQkgICAgX091dHB1dEl0ZXJhdG9yIF9fcykKKyAgICB7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19jaHVua19sZW5ndGggPSBfX24gLyBfX251bV90aHJlYWRzOworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbnVtX2xvbmdlcl9jaHVua3MgPSBfX24gJSBfX251bV90aHJlYWRzOworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fcG9zID0gMDsKKyAgICAgIGZvciAoX1RocmVhZEluZGV4IF9faSA9IDA7IF9faSA8IF9fbnVtX3RocmVhZHM7ICsrX19pKQorCXsKKwkgICpfX3MrKyA9IF9fcG9zOworCSAgX19wb3MgKz0gKChfX2kgPCBfX251bV9sb25nZXJfY2h1bmtzKQorCQkgICAgPyAoX19jaHVua19sZW5ndGggKyAxKSA6IF9fY2h1bmtfbGVuZ3RoKTsKKwl9CisgICAgICAqX19zKysgPSBfX247CisgICAgICByZXR1cm4gX19zOworICAgIH0KKworICAvKiogQGJyaWVmIGZ1bmN0aW9uIHRvIHNwbGl0IGEgc2VxdWVuY2UgaW50byBwYXJ0cyBvZiBhbG1vc3QgZXF1YWwgc2l6ZS4KKyAgICoKKyAgICogIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzcGxpdHRpbmcgcG9pbnQgYmV0d2VlbgorICAgKiAgdGhyZWFkIG51bWJlciBfX3RocmVhZF9ubyAoaW5jbHVkZWQpIGFuZAorICAgKiAgdGhyZWFkIG51bWJlciBfX3RocmVhZF9ubysxIChleGNsdWRlZCkuCisgICAqICBAcGFyYW0gX19uIE51bWJlciBvZiBlbGVtZW50cworICAgKiAgQHBhcmFtIF9fbnVtX3RocmVhZHMgTnVtYmVyIG9mIHBhcnRzCisgICAqICBAcGFyYW0gX190aHJlYWRfbm8gTnVtYmVyIG9mIHRocmVhZHMKKyAgICogIEByZXR1cm5zIHNwbGl0dGluZyBwb2ludCAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRGlmZmVyZW5jZVR5cGU+CisgICAgX0RpZmZlcmVuY2VUeXBlCisgICAgX19lcXVhbGx5X3NwbGl0X3BvaW50KF9EaWZmZXJlbmNlVHlwZSBfX24sCisJCQkgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzLAorCQkJICBfVGhyZWFkSW5kZXggX190aHJlYWRfbm8pCisgICAgeworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fY2h1bmtfbGVuZ3RoID0gX19uIC8gX19udW1fdGhyZWFkczsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX251bV9sb25nZXJfY2h1bmtzID0gX19uICUgX19udW1fdGhyZWFkczsKKyAgICAgIGlmIChfX3RocmVhZF9ubyA8IF9fbnVtX2xvbmdlcl9jaHVua3MpCisJcmV0dXJuIF9fdGhyZWFkX25vICogKF9fY2h1bmtfbGVuZ3RoICsgMSk7CisgICAgICBlbHNlCisJcmV0dXJuIF9fbnVtX2xvbmdlcl9jaHVua3MgKiAoX19jaHVua19sZW5ndGggKyAxKQorICAgICAgICAgICsgKF9fdGhyZWFkX25vIC0gX19udW1fbG9uZ2VyX2NodW5rcykgKiBfX2NodW5rX2xlbmd0aDsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9FUVVBTExZX1NQTElUX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvZmVhdHVyZXMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvZmVhdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQxODJhCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9mZWF0dXJlcy5oCkBAIC0wLDAgKzEsMTA0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvZmVhdHVyZXMuaAorICogIEBicmllZiBEZWZpbmVzIG9uIHdoZXRoZXIgdG8gaW5jbHVkZSBhbGdvcml0aG0gdmFyaWFudHMuCisgKgorICogIExlc3MgdmFyaWFudHMgcmVkdWNlIGV4ZWN1dGFibGUgc2l6ZSBhbmQgY29tcGlsZSB0aW1lLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9GRUFUVVJFU19ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX0ZFQVRVUkVTX0ggMQorCisjaWZuZGVmIF9HTElCQ1hYX01FUkdFU09SVAorLyoqIEBkZWYgX0dMSUJDWFhfTUVSR0VTT1JUCisgKiAgQGJyaWVmIEluY2x1ZGUgcGFyYWxsZWwgbXVsdGktd2F5IG1lcmdlc29ydC4KKyAqICBAc2VlIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OnNvcnRfYWxnb3JpdGhtICovCisjZGVmaW5lIF9HTElCQ1hYX01FUkdFU09SVCAxCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9RVUlDS1NPUlQKKy8qKiBAZGVmIF9HTElCQ1hYX1FVSUNLU09SVAorICogIEBicmllZiBJbmNsdWRlIHBhcmFsbGVsIHVuYmFsYW5jZWQgcXVpY2tzb3J0LgorICogIEBzZWUgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6c29ydF9hbGdvcml0aG0gKi8KKyNkZWZpbmUgX0dMSUJDWFhfUVVJQ0tTT1JUIDEKKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX0JBTF9RVUlDS1NPUlQKKy8qKiBAZGVmIF9HTElCQ1hYX0JBTF9RVUlDS1NPUlQKKyAqICBAYnJpZWYgSW5jbHVkZSBwYXJhbGxlbCBkeW5hbWljYWxseSBsb2FkLWJhbGFuY2VkIHF1aWNrc29ydC4KKyAqICBAc2VlIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OnNvcnRfYWxnb3JpdGhtICovCisjZGVmaW5lIF9HTElCQ1hYX0JBTF9RVUlDS1NPUlQgMQorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfRklORF9HUk9XSU5HX0JMT0NLUworLyoqIEBicmllZiBJbmNsdWRlIHRoZSBncm93aW5nIGJsb2NrcyB2YXJpYW50IGZvciBzdGQ6OmZpbmQuCisgKiAgQHNlZSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpmaW5kX2FsZ29yaXRobSAqLworI2RlZmluZSBfR0xJQkNYWF9GSU5EX0dST1dJTkdfQkxPQ0tTIDEKKyNlbmRpZgorCisjaWZuZGVmIF9HTElCQ1hYX0ZJTkRfQ09OU1RBTlRfU0laRV9CTE9DS1MKKy8qKiBAYnJpZWYgSW5jbHVkZSB0aGUgZXF1YWwtc2l6ZWQgYmxvY2tzIHZhcmlhbnQgZm9yIHN0ZDo6ZmluZC4KKyAqICBAc2VlIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmZpbmRfYWxnb3JpdGhtICovCisjZGVmaW5lIF9HTElCQ1hYX0ZJTkRfQ09OU1RBTlRfU0laRV9CTE9DS1MgMQorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfRklORF9FUVVBTF9TUExJVAorLyoqIEBkZWYgX0dMSUJDWFhfRklORF9FUVVBTF9TUExJVAorICogIEBicmllZiBJbmNsdWRlIHRoZSBlcXVhbCBzcGxpdHRpbmcgdmFyaWFudCBmb3Igc3RkOjpmaW5kLgorICogIEBzZWUgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6ZmluZF9hbGdvcml0aG0gKi8KKyNkZWZpbmUgX0dMSUJDWFhfRklORF9FUVVBTF9TUExJVCAxCisjZW5kaWYKKworCisjaWZuZGVmIF9HTElCQ1hYX1RSRUVfSU5JVElBTF9TUExJVFRJTkcKKy8qKiBAZGVmIF9HTElCQ1hYX1RSRUVfSU5JVElBTF9TUExJVFRJTkcKKyAqICBAYnJpZWYgSW5jbHVkZSB0aGUgaW5pdGlhbCBzcGxpdHRpbmcgdmFyaWFudCBmb3IKKyAqICBfUmJfdHJlZTo6aW5zZXJ0X3VuaXF1ZShfSUl0ZXIgYmVnLCBfSUl0ZXIgX19lbmQpLgorICogIEBzZWUgX19nbnVfcGFyYWxsZWw6Ol9SYl90cmVlICovCisjZGVmaW5lIF9HTElCQ1hYX1RSRUVfSU5JVElBTF9TUExJVFRJTkcgMQorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfVFJFRV9EWU5BTUlDX0JBTEFOQ0lORworLyoqIEBkZWYgX0dMSUJDWFhfVFJFRV9EWU5BTUlDX0JBTEFOQ0lORworICogIEBicmllZiBJbmNsdWRlIHRoZSBkeW5hbWljIGJhbGFuY2luZyB2YXJpYW50IGZvcgorICogIF9SYl90cmVlOjppbnNlcnRfdW5pcXVlKF9JSXRlciBiZWcsIF9JSXRlciBfX2VuZCkuCisgKiAgQHNlZSBfX2dudV9wYXJhbGxlbDo6X1JiX3RyZWUgKi8KKyNkZWZpbmUgX0dMSUJDWFhfVFJFRV9EWU5BTUlDX0JBTEFOQ0lORyAxCisjZW5kaWYKKworI2lmbmRlZiBfR0xJQkNYWF9UUkVFX0ZVTExfQ09QWQorLyoqIEBkZWYgX0dMSUJDWFhfVFJFRV9GVUxMX0NPUFkKKyAqICBAYnJpZWYgSW4gb3JkZXIgdG8gc29ydCB0aGUgaW5wdXQgc2VxdWVuY2Ugb2YKKyAqICBfUmJfdHJlZTo6aW5zZXJ0X3VuaXF1ZShfSUl0ZXIgYmVnLCBfSUl0ZXIgX19lbmQpIGEKKyAqICBmdWxsIGNvcHkgb2YgdGhlIGlucHV0IGVsZW1lbnRzIGlzIGRvbmUuCisgKiAgQHNlZSBfX2dudV9wYXJhbGxlbDo6X1JiX3RyZWUgKi8KKyNkZWZpbmUgX0dMSUJDWFhfVFJFRV9GVUxMX0NPUFkgMQorI2VuZGlmCisKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX0ZFQVRVUkVTX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvZmluZC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9maW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlMjhiMQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvZmluZC5oCkBAIC0wLDAgKzEsNDA1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvZmluZC5oCisgKiAgQGJyaWVmIFBhcmFsbGVsIGltcGxlbWVudGF0aW9uIGJhc2UgZm9yIHN0ZDo6ZmluZCgpLCBzdGQ6OmVxdWFsKCkKKyAqICBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBGZWxpeCBQdXR6ZSBhbmQgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9GSU5EX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfRklORF9IIDEKKworI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisKKyNpbmNsdWRlIDxwYXJhbGxlbC9mZWF0dXJlcy5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3BhcmFsbGVsLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvY29tcGF0aWJpbGl0eS5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL2VxdWFsbHlfc3BsaXQuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKgorICAgKiAgQGJyaWVmIFBhcmFsbGVsIHN0ZDo6ZmluZCwgc3dpdGNoIGZvciBkaWZmZXJlbnQgYWxnb3JpdGhtcy4KKyAgICogIEBwYXJhbSBfX2JlZ2luMSBCZWdpbiBpdGVyYXRvciBvZiBmaXJzdCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZDEgRW5kIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fYmVnaW4yIEJlZ2luIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4gTXVzdCBoYXZlIHNhbWUKKyAgICogIGxlbmd0aCBhcyBmaXJzdCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX3ByZWQgRmluZCBwcmVkaWNhdGUuCisgICAqICBAcGFyYW0gX19zZWxlY3RvciBfRnVuY3Rpb25hbGl0eSAoZS4gZy4gc3RkOjpmaW5kX2lmKCksIHN0ZDo6ZXF1YWwoKSwuLi4pCisgICAqICBAcmV0dXJuIFBsYWNlIG9mIGZpbmRpbmcgaW4gYm90aCBzZXF1ZW5jZXMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyMSwKKwkgICB0eXBlbmFtZSBfUkFJdGVyMiwKKwkgICB0eXBlbmFtZSBfUHJlZCwKKyAgICAgICAgICAgdHlwZW5hbWUgX1NlbGVjdG9yPgorICAgIGlubGluZSBzdGQ6OnBhaXI8X1JBSXRlcjEsIF9SQUl0ZXIyPgorICAgIF9fZmluZF90ZW1wbGF0ZShfUkFJdGVyMSBfX2JlZ2luMSwgX1JBSXRlcjEgX19lbmQxLAorCQkgICAgX1JBSXRlcjIgX19iZWdpbjIsIF9QcmVkIF9fcHJlZCwgX1NlbGVjdG9yIF9fc2VsZWN0b3IpCisgICAgeworICAgICAgc3dpdGNoIChfU2V0dGluZ3M6OmdldCgpLmZpbmRfYWxnb3JpdGhtKQorCXsKKwljYXNlIEdST1dJTkdfQkxPQ0tTOgorICAgICAgICAgIHJldHVybiBfX2ZpbmRfdGVtcGxhdGUoX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fcHJlZCwKKwkJCQkgX19zZWxlY3RvciwgZ3Jvd2luZ19ibG9ja3NfdGFnKCkpOworCWNhc2UgQ09OU1RBTlRfU0laRV9CTE9DS1M6CisgICAgICAgICAgcmV0dXJuIF9fZmluZF90ZW1wbGF0ZShfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19wcmVkLAorCQkJCSBfX3NlbGVjdG9yLCBjb25zdGFudF9zaXplX2Jsb2Nrc190YWcoKSk7CisJY2FzZSBFUVVBTF9TUExJVDoKKyAgICAgICAgICByZXR1cm4gX19maW5kX3RlbXBsYXRlKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLCBfX3ByZWQsCisJCQkJIF9fc2VsZWN0b3IsIGVxdWFsX3NwbGl0X3RhZygpKTsKKwlkZWZhdWx0OgorICAgICAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChmYWxzZSk7CisgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKF9fYmVnaW4xLCBfX2JlZ2luMik7CisJfQorICAgIH0KKworI2lmIF9HTElCQ1hYX0ZJTkRfRVFVQUxfU1BMSVQKKworICAvKioKKyAgICogIEBicmllZiBQYXJhbGxlbCBzdGQ6OmZpbmQsIGVxdWFsIHNwbGl0dGluZyB2YXJpYW50LgorICAgKiAgQHBhcmFtIF9fYmVnaW4xIEJlZ2luIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fZW5kMSBFbmQgaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19iZWdpbjIgQmVnaW4gaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLiBTZWNvbmQgX19zZXF1ZW5jZQorICAgKiAgbXVzdCBoYXZlIHNhbWUgbGVuZ3RoIGFzIGZpcnN0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fcHJlZCBGaW5kIHByZWRpY2F0ZS4KKyAgICogIEBwYXJhbSBfX3NlbGVjdG9yIF9GdW5jdGlvbmFsaXR5IChlLiBnLiBzdGQ6OmZpbmRfaWYoKSwgc3RkOjplcXVhbCgpLC4uLikKKyAgICogIEByZXR1cm4gUGxhY2Ugb2YgZmluZGluZyBpbiBib3RoIHNlcXVlbmNlcy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLAorICAgICAgICAgICB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWQsCisgICAgICAgICAgIHR5cGVuYW1lIF9TZWxlY3Rvcj4KKyAgICBzdGQ6OnBhaXI8X1JBSXRlcjEsIF9SQUl0ZXIyPgorICAgIF9fZmluZF90ZW1wbGF0ZShfUkFJdGVyMSBfX2JlZ2luMSwgX1JBSXRlcjEgX19lbmQxLAorCQkgICAgX1JBSXRlcjIgX19iZWdpbjIsIF9QcmVkIF9fcHJlZCwKKwkJICAgIF9TZWxlY3RvciBfX3NlbGVjdG9yLCBlcXVhbF9zcGxpdF90YWcpCisgICAgeworICAgICAgX0dMSUJDWFhfQ0FMTChfX2VuZDEgLSBfX2JlZ2luMSkKKworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyMT4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19sZW5ndGggPSBfX2VuZDEgLSBfX2JlZ2luMTsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3Jlc3VsdCA9IF9fbGVuZ3RoOworICAgICAgX0RpZmZlcmVuY2VUeXBlKiBfX2JvcmRlcnM7CisKKyAgICAgIG9tcF9sb2NrX3QgX19yZXN1bHRfbG9jazsKKyAgICAgIG9tcF9pbml0X2xvY2soJl9fcmVzdWx0X2xvY2spOworCisgICAgICBfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcyA9IF9fZ2V0X21heF90aHJlYWRzKCk7CisjICAgICBwcmFnbWEgb21wIHBhcmFsbGVsIG51bV90aHJlYWRzKF9fbnVtX3RocmVhZHMpCisgICAgICB7CisjICAgICBwcmFnbWEgb21wIHNpbmdsZQorCXsKKwkgIF9fbnVtX3RocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7CisJICBfX2JvcmRlcnMgPSBuZXcgX0RpZmZlcmVuY2VUeXBlW19fbnVtX3RocmVhZHMgKyAxXTsKKwkgIF9fZXF1YWxseV9zcGxpdChfX2xlbmd0aCwgX19udW1fdGhyZWFkcywgX19ib3JkZXJzKTsKKwl9IC8vc2luZ2xlCisKKwlfVGhyZWFkSW5kZXggX19pYW0gPSBvbXBfZ2V0X3RocmVhZF9udW0oKTsKKwlfRGlmZmVyZW5jZVR5cGUgX19zdGFydCA9IF9fYm9yZGVyc1tfX2lhbV0sCisJICAgICAgICAgICAgICAgICBfX3N0b3AgPSBfX2JvcmRlcnNbX19pYW0gKyAxXTsKKworCV9SQUl0ZXIxIF9faTEgPSBfX2JlZ2luMSArIF9fc3RhcnQ7CisJX1JBSXRlcjIgX19pMiA9IF9fYmVnaW4yICsgX19zdGFydDsKKwlmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX3BvcyA9IF9fc3RhcnQ7IF9fcG9zIDwgX19zdG9wOyArK19fcG9zKQorCSAgeworIyAgICAgICAgICAgcHJhZ21hIG9tcCBmbHVzaChfX3Jlc3VsdCkKKwkgICAgLy8gUmVzdWx0IGhhcyBiZWVuIHNldCB0byBzb21ldGhpbmcgbG93ZXIuCisJICAgIGlmIChfX3Jlc3VsdCA8IF9fcG9zKQorCSAgICAgIGJyZWFrOworCisJICAgIGlmIChfX3NlbGVjdG9yKF9faTEsIF9faTIsIF9fcHJlZCkpCisJICAgICAgeworCQlvbXBfc2V0X2xvY2soJl9fcmVzdWx0X2xvY2spOworCQlpZiAoX19wb3MgPCBfX3Jlc3VsdCkKKwkJICBfX3Jlc3VsdCA9IF9fcG9zOworCQlvbXBfdW5zZXRfbG9jaygmX19yZXN1bHRfbG9jayk7CisJCWJyZWFrOworCSAgICAgIH0KKwkgICAgKytfX2kxOworCSAgICArK19faTI7CisJICB9CisgICAgICB9IC8vcGFyYWxsZWwKKworICAgICAgb21wX2Rlc3Ryb3lfbG9jaygmX19yZXN1bHRfbG9jayk7CisgICAgICBkZWxldGVbXSBfX2JvcmRlcnM7CisKKyAgICAgIHJldHVybiBzdGQ6OnBhaXI8X1JBSXRlcjEsIF9SQUl0ZXIyPihfX2JlZ2luMSArIF9fcmVzdWx0LAorCQkJCQkgICBfX2JlZ2luMiArIF9fcmVzdWx0KTsKKyAgICB9CisKKyNlbmRpZgorCisjaWYgX0dMSUJDWFhfRklORF9HUk9XSU5HX0JMT0NLUworCisgIC8qKgorICAgKiAgQGJyaWVmIFBhcmFsbGVsIHN0ZDo6ZmluZCwgZ3Jvd2luZyBibG9jayBzaXplIHZhcmlhbnQuCisgICAqICBAcGFyYW0gX19iZWdpbjEgQmVnaW4gaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQxIEVuZCBpdGVyYXRvciBvZiBmaXJzdCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2JlZ2luMiBCZWdpbiBpdGVyYXRvciBvZiBzZWNvbmQgc2VxdWVuY2UuIFNlY29uZCBfX3NlcXVlbmNlCisgICAqICBtdXN0IGhhdmUgc2FtZSBsZW5ndGggYXMgZmlyc3Qgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19wcmVkIEZpbmQgcHJlZGljYXRlLgorICAgKiAgQHBhcmFtIF9fc2VsZWN0b3IgX0Z1bmN0aW9uYWxpdHkgKGUuIGcuIHN0ZDo6ZmluZF9pZigpLCBzdGQ6OmVxdWFsKCksLi4uKQorICAgKiAgQHJldHVybiBQbGFjZSBvZiBmaW5kaW5nIGluIGJvdGggc2VxdWVuY2VzLgorICAgKiAgQHNlZSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpmaW5kX3NlcXVlbnRpYWxfc2VhcmNoX3NpemUKKyAgICogIEBzZWUgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6ZmluZF9zY2FsZV9mYWN0b3IKKyAgICoKKyAgICogIFRoZXJlIGFyZSB0d28gbWFpbiBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBncm93aW5nIGJsb2NrcyBhbmQKKyAgICogIHRoZSBjb25zdGFudC1zaXplIGJsb2NrcyB2YXJpYW50cy4KKyAgICogIDEuIEZvciBHQiwgdGhlIGJsb2NrIHNpemUgZ3Jvd3M7IGZvciBDU0IsIHRoZSBibG9jayBzaXplIGlzIGZpeGVkLgorICAgKiAgMi4gRm9yIEdCLCB0aGUgYmxvY2tzIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHk7CisgICAqICAgICBmb3IgQ1NCLCB0aGUgYmxvY2tzIGFyZSBhbGxvY2F0ZWQgaW4gYSBwcmVkZXRlcm1pbmVkIG1hbm5lciwKKyAgICogICAgIG5hbWVseSBzcGFjaWFsIHJvdW5kLXJvYmluLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsCisgICAgICAgICAgIHR5cGVuYW1lIF9SQUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfUHJlZCwKKyAgICAgICAgICAgdHlwZW5hbWUgX1NlbGVjdG9yPgorICAgIHN0ZDo6cGFpcjxfUkFJdGVyMSwgX1JBSXRlcjI+CisgICAgX19maW5kX3RlbXBsYXRlKF9SQUl0ZXIxIF9fYmVnaW4xLCBfUkFJdGVyMSBfX2VuZDEsCisJCSAgICBfUkFJdGVyMiBfX2JlZ2luMiwgX1ByZWQgX19wcmVkLCBfU2VsZWN0b3IgX19zZWxlY3RvciwKKwkJICAgIGdyb3dpbmdfYmxvY2tzX3RhZykKKyAgICB7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fZW5kMSAtIF9fYmVnaW4xKQorCisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXIxPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisKKyAgICAgIGNvbnN0IF9TZXR0aW5ncyYgX19zID0gX1NldHRpbmdzOjpnZXQoKTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbGVuZ3RoID0gX19lbmQxIC0gX19iZWdpbjE7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZQorCV9fc2VxdWVudGlhbF9zZWFyY2hfc2l6ZSA9IHN0ZDo6bWluPF9EaWZmZXJlbmNlVHlwZT4KKwkoX19sZW5ndGgsIF9fcy5maW5kX3NlcXVlbnRpYWxfc2VhcmNoX3NpemUpOworCisgICAgICAvLyBUcnkgaXQgc2VxdWVudGlhbGx5IGZpcnN0LgorICAgICAgc3RkOjpwYWlyPF9SQUl0ZXIxLCBfUkFJdGVyMj4KKwlfX2ZpbmRfc2VxX3Jlc3VsdCA9IF9fc2VsZWN0b3IuX01fc2VxdWVudGlhbF9hbGdvcml0aG0KKwkoX19iZWdpbjEsIF9fYmVnaW4xICsgX19zZXF1ZW50aWFsX3NlYXJjaF9zaXplLAorCSBfX2JlZ2luMiwgX19wcmVkKTsKKworICAgICAgaWYgKF9fZmluZF9zZXFfcmVzdWx0LmZpcnN0ICE9IChfX2JlZ2luMSArIF9fc2VxdWVudGlhbF9zZWFyY2hfc2l6ZSkpCisJcmV0dXJuIF9fZmluZF9zZXFfcmVzdWx0OworCisgICAgICAvLyBJbmRleCBvZiBiZWdpbm5pbmcgb2YgbmV4dCBmcmVlIGJsb2NrIChhZnRlciBzZXF1ZW50aWFsIGZpbmQpLgorICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbmV4dF9ibG9ja19zdGFydCA9IF9fc2VxdWVudGlhbF9zZWFyY2hfc2l6ZTsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3Jlc3VsdCA9IF9fbGVuZ3RoOworCisgICAgICBvbXBfbG9ja190IF9fcmVzdWx0X2xvY2s7CisgICAgICBvbXBfaW5pdF9sb2NrKCZfX3Jlc3VsdF9sb2NrKTsKKworICAgICAgY29uc3QgZmxvYXQgX19zY2FsZV9mYWN0b3IgPSBfX3MuZmluZF9zY2FsZV9mYWN0b3I7CisKKyAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzID0gX19nZXRfbWF4X3RocmVhZHMoKTsKKyMgICAgIHByYWdtYSBvbXAgcGFyYWxsZWwgc2hhcmVkKF9fcmVzdWx0KSBudW1fdGhyZWFkcyhfX251bV90aHJlYWRzKQorICAgICAgeworIyAgICAgICBwcmFnbWEgb21wIHNpbmdsZQorCV9fbnVtX3RocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7CisKKwkvLyBOb3Qgd2l0aGluIGZpcnN0IF9fayBlbGVtZW50cyAtPiBzdGFydCBwYXJhbGxlbC4KKwlfVGhyZWFkSW5kZXggX19pYW0gPSBvbXBfZ2V0X3RocmVhZF9udW0oKTsKKworCV9EaWZmZXJlbmNlVHlwZSBfX2Jsb2NrX3NpemUgPQorCSAgc3RkOjptYXg8X0RpZmZlcmVuY2VUeXBlPigxLCBfX3NjYWxlX2ZhY3RvciAqIF9fbmV4dF9ibG9ja19zdGFydCk7CisJX0RpZmZlcmVuY2VUeXBlIF9fc3RhcnQgPSBfX2ZldGNoX2FuZF9hZGQ8X0RpZmZlcmVuY2VUeXBlPgorCSAgKCZfX25leHRfYmxvY2tfc3RhcnQsIF9fYmxvY2tfc2l6ZSk7CisKKwkvLyBHZXQgbmV3IGJsb2NrLCB1cGRhdGUgcG9pbnRlciB0byBuZXh0IGJsb2NrLgorCV9EaWZmZXJlbmNlVHlwZSBfX3N0b3AgPQorCSAgc3RkOjptaW48X0RpZmZlcmVuY2VUeXBlPihfX2xlbmd0aCwgX19zdGFydCArIF9fYmxvY2tfc2l6ZSk7CisKKwlzdGQ6OnBhaXI8X1JBSXRlcjEsIF9SQUl0ZXIyPiBfX2xvY2FsX3Jlc3VsdDsKKworCXdoaWxlIChfX3N0YXJ0IDwgX19sZW5ndGgpCisJICB7CisjICAgICAgICAgICBwcmFnbWEgb21wIGZsdXNoKF9fcmVzdWx0KQorCSAgICAvLyBHZXQgbmV3IHZhbHVlIG9mIHJlc3VsdC4KKwkgICAgaWYgKF9fcmVzdWx0IDwgX19zdGFydCkKKwkgICAgICB7CisJCS8vIE5vIGNoYW5jZSB0byBmaW5kIGZpcnN0IGVsZW1lbnQuCisJCWJyZWFrOworCSAgICAgIH0KKworCSAgICBfX2xvY2FsX3Jlc3VsdCA9IF9fc2VsZWN0b3IuX01fc2VxdWVudGlhbF9hbGdvcml0aG0KKwkgICAgICAoX19iZWdpbjEgKyBfX3N0YXJ0LCBfX2JlZ2luMSArIF9fc3RvcCwKKwkgICAgICAgX19iZWdpbjIgKyBfX3N0YXJ0LCBfX3ByZWQpOworCisJICAgIGlmIChfX2xvY2FsX3Jlc3VsdC5maXJzdCAhPSAoX19iZWdpbjEgKyBfX3N0b3ApKQorCSAgICAgIHsKKwkJb21wX3NldF9sb2NrKCZfX3Jlc3VsdF9sb2NrKTsKKwkJaWYgKChfX2xvY2FsX3Jlc3VsdC5maXJzdCAtIF9fYmVnaW4xKSA8IF9fcmVzdWx0KQorCQkgIHsKKwkJICAgIF9fcmVzdWx0ID0gX19sb2NhbF9yZXN1bHQuZmlyc3QgLSBfX2JlZ2luMTsKKworCQkgICAgLy8gUmVzdWx0IGNhbm5vdCBiZSBpbiBmdXR1cmUgYmxvY2tzLCBzdG9wIGFsZ29yaXRobS4KKwkJICAgIF9fZmV0Y2hfYW5kX2FkZDxfRGlmZmVyZW5jZVR5cGU+KCZfX25leHRfYmxvY2tfc3RhcnQsCisJCQkJCQkgICAgIF9fbGVuZ3RoKTsKKwkJICB9CisJCW9tcF91bnNldF9sb2NrKCZfX3Jlc3VsdF9sb2NrKTsKKwkgICAgICB9CisKKwkgICAgX0RpZmZlcmVuY2VUeXBlIF9fYmxvY2tfc2l6ZSA9CisJICAgICBzdGQ6Om1heDxfRGlmZmVyZW5jZVR5cGU+KDEsIF9fc2NhbGVfZmFjdG9yICogX19uZXh0X2Jsb2NrX3N0YXJ0KTsKKworCSAgICAvLyBHZXQgbmV3IGJsb2NrLCB1cGRhdGUgcG9pbnRlciB0byBuZXh0IGJsb2NrLgorCSAgICBfX3N0YXJ0ID0gX19mZXRjaF9hbmRfYWRkPF9EaWZmZXJlbmNlVHlwZT4oJl9fbmV4dF9ibG9ja19zdGFydCwKKwkJCQkJCSAgICAgICBfX2Jsb2NrX3NpemUpOworCSAgICBfX3N0b3AgPQorCSAgICAgIHN0ZDo6bWluPF9EaWZmZXJlbmNlVHlwZT4oX19sZW5ndGgsIF9fc3RhcnQgKyBfX2Jsb2NrX3NpemUpOworCSAgfQorICAgICAgfSAvL3BhcmFsbGVsCisKKyAgICAgIG9tcF9kZXN0cm95X2xvY2soJl9fcmVzdWx0X2xvY2spOworCisgICAgICAvLyBSZXR1cm4gaXRlcmF0b3Igb24gZm91bmQgZWxlbWVudC4KKyAgICAgIHJldHVybgorCXN0ZDo6cGFpcjxfUkFJdGVyMSwgX1JBSXRlcjI+KF9fYmVnaW4xICsgX19yZXN1bHQsCisJCQkJICAgICAgX19iZWdpbjIgKyBfX3Jlc3VsdCk7CisgICAgfQorCisjZW5kaWYKKworI2lmIF9HTElCQ1hYX0ZJTkRfQ09OU1RBTlRfU0laRV9CTE9DS1MKKworICAvKioKKyAgICogICBAYnJpZWYgUGFyYWxsZWwgc3RkOjpmaW5kLCBjb25zdGFudCBibG9jayBzaXplIHZhcmlhbnQuCisgICAqICBAcGFyYW0gX19iZWdpbjEgQmVnaW4gaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQxIEVuZCBpdGVyYXRvciBvZiBmaXJzdCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2JlZ2luMiBCZWdpbiBpdGVyYXRvciBvZiBzZWNvbmQgc2VxdWVuY2UuIFNlY29uZCBfX3NlcXVlbmNlCisgICAqICBtdXN0IGhhdmUgc2FtZSBsZW5ndGggYXMgZmlyc3Qgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19wcmVkIEZpbmQgcHJlZGljYXRlLgorICAgKiAgQHBhcmFtIF9fc2VsZWN0b3IgX0Z1bmN0aW9uYWxpdHkgKGUuIGcuIHN0ZDo6ZmluZF9pZigpLCBzdGQ6OmVxdWFsKCksLi4uKQorICAgKiAgQHJldHVybiBQbGFjZSBvZiBmaW5kaW5nIGluIGJvdGggc2VxdWVuY2VzLgorICAgKiAgQHNlZSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpmaW5kX3NlcXVlbnRpYWxfc2VhcmNoX3NpemUKKyAgICogIEBzZWUgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6ZmluZF9ibG9ja19zaXplCisgICAqICBUaGVyZSBhcmUgdHdvIG1haW4gZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZ3Jvd2luZyBibG9ja3MgYW5kIHRoZQorICAgKiAgY29uc3RhbnQtc2l6ZSBibG9ja3MgdmFyaWFudHMuCisgICAqICAxLiBGb3IgR0IsIHRoZSBibG9jayBzaXplIGdyb3dzOyBmb3IgQ1NCLCB0aGUgYmxvY2sgc2l6ZSBpcyBmaXhlZC4KKyAgICogIDIuIEZvciBHQiwgdGhlIGJsb2NrcyBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5OyBmb3IgQ1NCLCB0aGUKKyAgICogIGJsb2NrcyBhcmUgYWxsb2NhdGVkIGluIGEgcHJlZGV0ZXJtaW5lZCBtYW5uZXIsIG5hbWVseSBzcGFjaWFsCisgICAqICByb3VuZC1yb2Jpbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLAorICAgICAgICAgICB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWQsCisgICAgICAgICAgIHR5cGVuYW1lIF9TZWxlY3Rvcj4KKyAgICBzdGQ6OnBhaXI8X1JBSXRlcjEsIF9SQUl0ZXIyPgorICAgIF9fZmluZF90ZW1wbGF0ZShfUkFJdGVyMSBfX2JlZ2luMSwgX1JBSXRlcjEgX19lbmQxLAorICAgICAgICAgICAgICAgICAgX1JBSXRlcjIgX19iZWdpbjIsIF9QcmVkIF9fcHJlZCwgX1NlbGVjdG9yIF9fc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICBjb25zdGFudF9zaXplX2Jsb2Nrc190YWcpCisgICAgeworICAgICAgX0dMSUJDWFhfQ0FMTChfX2VuZDEgLSBfX2JlZ2luMSkKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcjE+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgICAgY29uc3QgX1NldHRpbmdzJiBfX3MgPSBfU2V0dGluZ3M6OmdldCgpOworCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19sZW5ndGggPSBfX2VuZDEgLSBfX2JlZ2luMTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fc2VxdWVudGlhbF9zZWFyY2hfc2l6ZSA9IHN0ZDo6bWluPF9EaWZmZXJlbmNlVHlwZT4KKwkoX19sZW5ndGgsIF9fcy5maW5kX3NlcXVlbnRpYWxfc2VhcmNoX3NpemUpOworCisgICAgICAvLyBUcnkgaXQgc2VxdWVudGlhbGx5IGZpcnN0LgorICAgICAgc3RkOjpwYWlyPF9SQUl0ZXIxLCBfUkFJdGVyMj4KKwlfX2ZpbmRfc2VxX3Jlc3VsdCA9IF9fc2VsZWN0b3IuX01fc2VxdWVudGlhbF9hbGdvcml0aG0KKwkoX19iZWdpbjEsIF9fYmVnaW4xICsgX19zZXF1ZW50aWFsX3NlYXJjaF9zaXplLCBfX2JlZ2luMiwgX19wcmVkKTsKKworICAgICAgaWYgKF9fZmluZF9zZXFfcmVzdWx0LmZpcnN0ICE9IChfX2JlZ2luMSArIF9fc2VxdWVudGlhbF9zZWFyY2hfc2l6ZSkpCisJcmV0dXJuIF9fZmluZF9zZXFfcmVzdWx0OworCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19yZXN1bHQgPSBfX2xlbmd0aDsKKyAgICAgIG9tcF9sb2NrX3QgX19yZXN1bHRfbG9jazsKKyAgICAgIG9tcF9pbml0X2xvY2soJl9fcmVzdWx0X2xvY2spOworCisgICAgICAvLyBOb3Qgd2l0aGluIGZpcnN0IF9fc2VxdWVudGlhbF9zZWFyY2hfc2l6ZSBlbGVtZW50cyAtPiBzdGFydCBwYXJhbGxlbC4KKworICAgICAgX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMgPSBfX2dldF9tYXhfdGhyZWFkcygpOworIyAgICAgcHJhZ21hIG9tcCBwYXJhbGxlbCBzaGFyZWQoX19yZXN1bHQpIG51bV90aHJlYWRzKF9fbnVtX3RocmVhZHMpCisgICAgICB7CisjICAgICAgIHByYWdtYSBvbXAgc2luZ2xlCisJX19udW1fdGhyZWFkcyA9IG9tcF9nZXRfbnVtX3RocmVhZHMoKTsKKworCV9UaHJlYWRJbmRleCBfX2lhbSA9IG9tcF9nZXRfdGhyZWFkX251bSgpOworCV9EaWZmZXJlbmNlVHlwZSBfX2Jsb2NrX3NpemUgPSBfX3MuZmluZF9pbml0aWFsX2Jsb2NrX3NpemU7CisKKwkvLyBGaXJzdCBlbGVtZW50IG9mIHRocmVhZCdzIGN1cnJlbnQgaXRlcmF0aW9uLgorCV9EaWZmZXJlbmNlVHlwZSBfX2l0ZXJhdGlvbl9zdGFydCA9IF9fc2VxdWVudGlhbF9zZWFyY2hfc2l6ZTsKKworCS8vIFdoZXJlIHRvIHdvcmsgKGluaXRpYWxpemF0aW9uKS4KKwlfRGlmZmVyZW5jZVR5cGUgX19zdGFydCA9IF9faXRlcmF0aW9uX3N0YXJ0ICsgX19pYW0gKiBfX2Jsb2NrX3NpemU7CisJX0RpZmZlcmVuY2VUeXBlIF9fc3RvcCA9IHN0ZDo6bWluPF9EaWZmZXJlbmNlVHlwZT4oX19sZW5ndGgsCisJCQkJCQkJICAgX19zdGFydAorCQkJCQkJCSAgICsgX19ibG9ja19zaXplKTsKKworCXN0ZDo6cGFpcjxfUkFJdGVyMSwgX1JBSXRlcjI+IF9fbG9jYWxfcmVzdWx0OworCisJd2hpbGUgKF9fc3RhcnQgPCBfX2xlbmd0aCkKKwkgIHsKKwkgICAgLy8gR2V0IG5ldyB2YWx1ZSBvZiByZXN1bHQuCisjICAgICAgICAgICBwcmFnbWEgb21wIGZsdXNoKF9fcmVzdWx0KQorCSAgICAvLyBObyBjaGFuY2UgdG8gZmluZCBmaXJzdCBlbGVtZW50LgorCSAgICBpZiAoX19yZXN1bHQgPCBfX3N0YXJ0KQorCSAgICAgIGJyZWFrOworCisJICAgIF9fbG9jYWxfcmVzdWx0ID0gX19zZWxlY3Rvci5fTV9zZXF1ZW50aWFsX2FsZ29yaXRobQorCSAgICAgIChfX2JlZ2luMSArIF9fc3RhcnQsIF9fYmVnaW4xICsgX19zdG9wLAorCSAgICAgICBfX2JlZ2luMiArIF9fc3RhcnQsIF9fcHJlZCk7CisKKwkgICAgaWYgKF9fbG9jYWxfcmVzdWx0LmZpcnN0ICE9IChfX2JlZ2luMSArIF9fc3RvcCkpCisJICAgICAgeworCQlvbXBfc2V0X2xvY2soJl9fcmVzdWx0X2xvY2spOworCQlpZiAoKF9fbG9jYWxfcmVzdWx0LmZpcnN0IC0gX19iZWdpbjEpIDwgX19yZXN1bHQpCisJCSAgX19yZXN1bHQgPSBfX2xvY2FsX3Jlc3VsdC5maXJzdCAtIF9fYmVnaW4xOworCQlvbXBfdW5zZXRfbG9jaygmX19yZXN1bHRfbG9jayk7CisJCS8vIFdpbGwgbm90IGZpbmQgYmV0dGVyIHZhbHVlIGluIGl0cyBpbnRlcnZhbC4KKwkJYnJlYWs7CisJICAgICAgfQorCisJICAgIF9faXRlcmF0aW9uX3N0YXJ0ICs9IF9fbnVtX3RocmVhZHMgKiBfX2Jsb2NrX3NpemU7CisKKwkgICAgLy8gV2hlcmUgdG8gd29yay4KKwkgICAgX19zdGFydCA9IF9faXRlcmF0aW9uX3N0YXJ0ICsgX19pYW0gKiBfX2Jsb2NrX3NpemU7CisJICAgIF9fc3RvcCA9IHN0ZDo6bWluPF9EaWZmZXJlbmNlVHlwZT4oX19sZW5ndGgsCisJCQkJCSAgICAgICBfX3N0YXJ0ICsgX19ibG9ja19zaXplKTsKKwkgIH0KKyAgICAgIH0gLy9wYXJhbGxlbAorCisgICAgICBvbXBfZGVzdHJveV9sb2NrKCZfX3Jlc3VsdF9sb2NrKTsKKworICAgICAgLy8gUmV0dXJuIGl0ZXJhdG9yIG9uIGZvdW5kIGVsZW1lbnQuCisgICAgICByZXR1cm4gc3RkOjpwYWlyPF9SQUl0ZXIxLCBfUkFJdGVyMj4oX19iZWdpbjEgKyBfX3Jlc3VsdCwKKwkJCQkJICAgX19iZWdpbjIgKyBfX3Jlc3VsdCk7CisgICAgfQorI2VuZGlmCit9IC8vIGVuZCBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX0ZJTkRfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9maW5kX3NlbGVjdG9ycy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9maW5kX3NlbGVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzcwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2ZpbmRfc2VsZWN0b3JzLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9maW5kX3NlbGVjdG9ycy5oCisgKiAgQGJyaWVmIF9GdW5jdGlvbiBvYmplY3RzIHJlcHJlc2VudGluZyBkaWZmZXJlbnQgdGFza3MgdG8gYmUgcGx1Z2dlZAorICogIGludG8gdGhlIHBhcmFsbGVsIGZpbmQgYWxnb3JpdGhtLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgRmVsaXggUHV0emUuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfRklORF9TRUxFQ1RPUlNfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9GSU5EX1NFTEVDVE9SU19IIDEKKworI2luY2x1ZGUgPHBhcmFsbGVsL3RhZ3MuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9iYXNpY19pdGVyYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX3BhaXIuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKiBAYnJpZWYgQmFzZSBjbGFzcyBvZiBhbGwgX19nbnVfcGFyYWxsZWw6Ol9fZmluZF90ZW1wbGF0ZSBzZWxlY3RvcnMuICovCisgIHN0cnVjdCBfX2dlbmVyaWNfZmluZF9zZWxlY3RvcgorICB7IH07CisKKyAgLyoqIAorICAgKiAgQGJyaWVmIFRlc3QgcHJlZGljYXRlIG9uIGEgc2luZ2xlIGVsZW1lbnQsIHVzZWQgZm9yIHN0ZDo6ZmluZCgpCisgICAqICBhbmQgc3RkOjpmaW5kX2lmICgpLgorICAgKi8KKyAgc3RydWN0IF9fZmluZF9pZl9zZWxlY3RvciA6IHB1YmxpYyBfX2dlbmVyaWNfZmluZF9zZWxlY3RvcgorICB7CisgICAgLyoqIEBicmllZiBUZXN0IG9uIG9uZSBwb3NpdGlvbi4KKyAgICAgKiBAcGFyYW0gX19pMSBfSXRlcmF0b3Igb24gZmlyc3Qgc2VxdWVuY2UuCisgICAgICogQHBhcmFtIF9faTIgX0l0ZXJhdG9yIG9uIHNlY29uZCBzZXF1ZW5jZSAodW51c2VkKS4KKyAgICAgKiBAcGFyYW0gX19wcmVkIEZpbmQgcHJlZGljYXRlLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZD4KKyAgICAgIGJvb2wgCisgICAgICBvcGVyYXRvcigpKF9SQUl0ZXIxIF9faTEsIF9SQUl0ZXIyIF9faTIsIF9QcmVkIF9fcHJlZCkKKyAgICAgIHsgcmV0dXJuIF9fcHJlZCgqX19pMSk7IH0KKworICAgIC8qKiBAYnJpZWYgQ29ycmVzcG9uZGluZyBzZXF1ZW50aWFsIGFsZ29yaXRobSBvbiBhIHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19iZWdpbjEgQmVnaW4gaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAgICogIEBwYXJhbSBfX2VuZDEgRW5kIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19iZWdpbjIgQmVnaW4gaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19wcmVkIEZpbmQgcHJlZGljYXRlLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZD4KKyAgICAgIHN0ZDo6cGFpcjxfUkFJdGVyMSwgX1JBSXRlcjI+IAorICAgICAgX01fc2VxdWVudGlhbF9hbGdvcml0aG0oX1JBSXRlcjEgX19iZWdpbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfUkFJdGVyMSBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfUkFJdGVyMiBfX2JlZ2luMiwgX1ByZWQgX19wcmVkKQorICAgICAgeyByZXR1cm4gc3RkOjptYWtlX3BhaXIoZmluZF9pZihfX2JlZ2luMSwgX19lbmQxLCBfX3ByZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbnRpYWxfdGFnKCkpLCBfX2JlZ2luMik7IH0KKyAgfTsKKworICAvKiogQGJyaWVmIFRlc3QgcHJlZGljYXRlIG9uIHR3byBhZGphY2VudCBlbGVtZW50cy4gKi8KKyAgc3RydWN0IF9fYWRqYWNlbnRfZmluZF9zZWxlY3RvciA6IHB1YmxpYyBfX2dlbmVyaWNfZmluZF9zZWxlY3RvcgorICB7CisgICAgLyoqIEBicmllZiBUZXN0IG9uIG9uZSBwb3NpdGlvbi4KKyAgICAgKiAgQHBhcmFtIF9faTEgX0l0ZXJhdG9yIG9uIGZpcnN0IHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19pMiBfSXRlcmF0b3Igb24gc2Vjb25kIHNlcXVlbmNlICh1bnVzZWQpLgorICAgICAqICBAcGFyYW0gX19wcmVkIEZpbmQgcHJlZGljYXRlLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZD4KKyAgICAgIGJvb2wgCisgICAgICBvcGVyYXRvcigpKF9SQUl0ZXIxIF9faTEsIF9SQUl0ZXIyIF9faTIsIF9QcmVkIF9fcHJlZCkKKyAgICAgIHsKKyAgICAgICAgLy8gUGFzc2VkIGVuZCBpdGVyYXRvciBpcyBvbmUgc2hvcnQuCisgICAgICAgIHJldHVybiBfX3ByZWQoKl9faTEsICooX19pMSArIDEpKTsKKyAgICAgIH0KKworICAgIC8qKiBAYnJpZWYgQ29ycmVzcG9uZGluZyBzZXF1ZW50aWFsIGFsZ29yaXRobSBvbiBhIHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19iZWdpbjEgQmVnaW4gaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAgICogIEBwYXJhbSBfX2VuZDEgRW5kIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19iZWdpbjIgQmVnaW4gaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19wcmVkIEZpbmQgcHJlZGljYXRlLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZD4KKyAgICAgIHN0ZDo6cGFpcjxfUkFJdGVyMSwgX1JBSXRlcjI+CisgICAgICBfTV9zZXF1ZW50aWFsX2FsZ29yaXRobShfUkFJdGVyMSBfX2JlZ2luMSwKKwkJCSAgICAgIF9SQUl0ZXIxIF9fZW5kMSwKKwkJCSAgICAgIF9SQUl0ZXIyIF9fYmVnaW4yLCBfUHJlZCBfX3ByZWQpCisgICAgICB7CisgICAgICAgIC8vIFBhc3NlZCBlbmQgaXRlcmF0b3IgaXMgb25lIHNob3J0LgorICAgICAgICBfUkFJdGVyMSBfX3Nwb3QgPSBhZGphY2VudF9maW5kKF9fYmVnaW4xLCBfX2VuZDEgKyAxLAorCQkJCQlfX3ByZWQsIHNlcXVlbnRpYWxfdGFnKCkpOworICAgICAgICBpZiAoX19zcG90ID09IChfX2VuZDEgKyAxKSkKKyAgICAgICAgICBfX3Nwb3QgPSBfX2VuZDE7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihfX3Nwb3QsIF9fYmVnaW4yKTsKKyAgICAgIH0KKyAgfTsKKworICAvKiogQGJyaWVmIFRlc3QgaW52ZXJ0ZWQgcHJlZGljYXRlIG9uIGEgc2luZ2xlIGVsZW1lbnQuICovCisgIHN0cnVjdCBfX21pc21hdGNoX3NlbGVjdG9yIDogcHVibGljIF9fZ2VuZXJpY19maW5kX3NlbGVjdG9yCisgIHsKKyAgICAvKiogCisgICAgICogIEBicmllZiBUZXN0IG9uIG9uZSBwb3NpdGlvbi4KKyAgICAgKiAgQHBhcmFtIF9faTEgX0l0ZXJhdG9yIG9uIGZpcnN0IHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19pMiBfSXRlcmF0b3Igb24gc2Vjb25kIHNlcXVlbmNlICh1bnVzZWQpLgorICAgICAqICBAcGFyYW0gX19wcmVkIEZpbmQgcHJlZGljYXRlLiAKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyMSwgdHlwZW5hbWUgX1JBSXRlcjIsCisgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWQ+CisgICAgICBib29sIAorICAgICAgb3BlcmF0b3IoKShfUkFJdGVyMSBfX2kxLCBfUkFJdGVyMiBfX2kyLCBfUHJlZCBfX3ByZWQpCisgICAgICB7IHJldHVybiAhX19wcmVkKCpfX2kxLCAqX19pMik7IH0KKworICAgIC8qKiAKKyAgICAgKiAgQGJyaWVmIENvcnJlc3BvbmRpbmcgc2VxdWVudGlhbCBhbGdvcml0aG0gb24gYSBzZXF1ZW5jZS4KKyAgICAgKiAgQHBhcmFtIF9fYmVnaW4xIEJlZ2luIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgICAqICBAcGFyYW0gX19lbmQxIEVuZCBpdGVyYXRvciBvZiBmaXJzdCBzZXF1ZW5jZS4KKyAgICAgKiAgQHBhcmFtIF9fYmVnaW4yIEJlZ2luIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4KKyAgICAgKiAgQHBhcmFtIF9fcHJlZCBGaW5kIHByZWRpY2F0ZS4gCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLAorICAgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkPgorICAgICAgc3RkOjpwYWlyPF9SQUl0ZXIxLCBfUkFJdGVyMj4KKyAgICAgIF9NX3NlcXVlbnRpYWxfYWxnb3JpdGhtKF9SQUl0ZXIxIF9fYmVnaW4xLAorCQkJICAgICAgX1JBSXRlcjEgX19lbmQxLAorCQkJICAgICAgX1JBSXRlcjIgX19iZWdpbjIsIF9QcmVkIF9fcHJlZCkKKyAgICAgIHsgcmV0dXJuIG1pc21hdGNoKF9fYmVnaW4xLCBfX2VuZDEsIF9fYmVnaW4yLAorCQkJX19wcmVkLCBzZXF1ZW50aWFsX3RhZygpKTsgfQorICB9OworCisKKyAgLyoqIEBicmllZiBUZXN0IHByZWRpY2F0ZSBvbiBzZXZlcmFsIGVsZW1lbnRzLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRkl0ZXJhdG9yPgorICAgIHN0cnVjdCBfX2ZpbmRfZmlyc3Rfb2Zfc2VsZWN0b3IgOiBwdWJsaWMgX19nZW5lcmljX2ZpbmRfc2VsZWN0b3IKKyAgICB7CisgICAgICBfRkl0ZXJhdG9yIF9NX2JlZ2luOworICAgICAgX0ZJdGVyYXRvciBfTV9lbmQ7CisKKyAgICAgIGV4cGxpY2l0IF9fZmluZF9maXJzdF9vZl9zZWxlY3RvcihfRkl0ZXJhdG9yIF9fYmVnaW4sCisJCQkJCV9GSXRlcmF0b3IgX19lbmQpCisgICAgICA6IF9NX2JlZ2luKF9fYmVnaW4pLCBfTV9lbmQoX19lbmQpIHsgfQorCisgICAgICAvKiogQGJyaWVmIFRlc3Qgb24gb25lIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSBfX2kxIF9JdGVyYXRvciBvbiBmaXJzdCBzZXF1ZW5jZS4KKyAgICAgICAqICBAcGFyYW0gX19pMiBfSXRlcmF0b3Igb24gc2Vjb25kIHNlcXVlbmNlICh1bnVzZWQpLgorICAgICAgICogIEBwYXJhbSBfX3ByZWQgRmluZCBwcmVkaWNhdGUuICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyMSwgdHlwZW5hbWUgX1JBSXRlcjIsCisJICAgICAgIHR5cGVuYW1lIF9QcmVkPgorICAgICAgICBib29sCisgICAgICAgIG9wZXJhdG9yKCkoX1JBSXRlcjEgX19pMSwgX1JBSXRlcjIgX19pMiwgX1ByZWQgX19wcmVkKQorICAgICAgICB7CisJICBmb3IgKF9GSXRlcmF0b3IgX19wb3NfaW5fY2FuZGlkYXRlcyA9IF9NX2JlZ2luOworCSAgICAgICBfX3Bvc19pbl9jYW5kaWRhdGVzICE9IF9NX2VuZDsgKytfX3Bvc19pbl9jYW5kaWRhdGVzKQorCSAgICBpZiAoX19wcmVkKCpfX2kxLCAqX19wb3NfaW5fY2FuZGlkYXRlcykpCisJICAgICAgcmV0dXJuIHRydWU7CisJICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgICAvKiogQGJyaWVmIENvcnJlc3BvbmRpbmcgc2VxdWVudGlhbCBhbGdvcml0aG0gb24gYSBzZXF1ZW5jZS4KKyAgICAgICAqICBAcGFyYW0gX19iZWdpbjEgQmVnaW4gaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAgICAgKiAgQHBhcmFtIF9fZW5kMSBFbmQgaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAgICAgKiAgQHBhcmFtIF9fYmVnaW4yIEJlZ2luIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4KKyAgICAgICAqICBAcGFyYW0gX19wcmVkIEZpbmQgcHJlZGljYXRlLiAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLAorCSAgICAgICB0eXBlbmFtZSBfUHJlZD4KKyAgICAgICAgc3RkOjpwYWlyPF9SQUl0ZXIxLCBfUkFJdGVyMj4KKyAgICAgICAgX01fc2VxdWVudGlhbF9hbGdvcml0aG0oX1JBSXRlcjEgX19iZWdpbjEsCisJCQkJX1JBSXRlcjEgX19lbmQxLAorCQkJCV9SQUl0ZXIyIF9fYmVnaW4yLCBfUHJlZCBfX3ByZWQpCisgICAgICAgIHsKKwkgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihmaW5kX2ZpcnN0X29mKF9fYmVnaW4xLCBfX2VuZDEsCisJCQkJCSAgICAgIF9NX2JlZ2luLCBfTV9lbmQsIF9fcHJlZCwKKwkJCQkJICAgICAgc2VxdWVudGlhbF90YWcoKSksIF9fYmVnaW4yKTsKKwl9CisgICAgIH07Cit9CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9GSU5EX1NFTEVDVE9SU19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2Zvcl9lYWNoLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2Zvcl9lYWNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViZTMyMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvZm9yX2VhY2guaApAQCAtMCwwICsxLDkwIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvZm9yX2VhY2guaAorICogIEBicmllZiBNYWluIGludGVyZmFjZSBmb3IgZW1iYXJyYXNzaW5nbHkgcGFyYWxsZWwgZnVuY3Rpb25zLgorICoKKyAqICBUaGUgZXhwbGljaXQgaW1wbGVtZW50YXRpb24gYXJlIGluIG90aGVyIGhlYWRlciBmaWxlcywgbGlrZQorICogIHdvcmtzdGVhbGluZy5oLCBwYXJfbG9vcC5oLCBvbXBfbG9vcC5oLCBhbmQgb21wX2xvb3Bfc3RhdGljLmguCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBGZWxpeCBQdXR6ZS4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9GT1JfRUFDSF9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX0ZPUl9FQUNIX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvc2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9wYXJfbG9vcC5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL29tcF9sb29wLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvd29ya3N0ZWFsaW5nLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIENob3NlIHRoZSBkZXNpcmVkIGFsZ29yaXRobSBieSBldmFsdWF0aW5nIEBjIF9fcGFyYWxsZWxpc21fdGFnLgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fdXNlcl9vcCBBIHVzZXItc3BlY2lmaWVkIGZ1bmN0b3IgKGNvbXBhcmF0b3IsIHByZWRpY2F0ZSwKKyAgICogIGFzc29jaWF0aXZlIG9wZXJhdG9yLC4uLikKKyAgICogIEBwYXJhbSBfX2Z1bmN0aW9uYWxpdHkgZnVuY3RvciB0byBAYSBwcm9jZXNzIGFuIGVsZW1lbnQgd2l0aAorICAgKiAgX191c2VyX29wIChkZXBlbmRzIG9uIGRlc2lyZWQgZnVuY3Rpb25hbGl0eSwgZS4gZy4gYWNjdW11bGF0ZSwKKyAgICogIGZvcl9lYWNoLC4uLgorICAgKiAgQHBhcmFtIF9fcmVkdWN0aW9uIFJlZHVjdGlvbiBmdW5jdG9yLgorICAgKiAgQHBhcmFtIF9fcmVkdWN0aW9uX3N0YXJ0IEluaXRpYWwgdmFsdWUgZm9yIHJlZHVjdGlvbi4KKyAgICogIEBwYXJhbSBfX291dHB1dCBPdXRwdXQgaXRlcmF0b3IuCisgICAqICBAcGFyYW0gX19ib3VuZCBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBwcm9jZXNzZWQuCisgICAqICBAcGFyYW0gX19wYXJhbGxlbGlzbV90YWcgUGFyYWxsZWxpemF0aW9uIG1ldGhvZCAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9Vc2VyT3AsCisgICAgICAgICAgIHR5cGVuYW1lIF9GdW5jdGlvbmFsaXR5LCB0eXBlbmFtZSBfUmVkLCB0eXBlbmFtZSBfUmVzdWx0PgorICAgIF9Vc2VyT3AKKyAgICBfX2Zvcl9lYWNoX3RlbXBsYXRlX3JhbmRvbV9hY2Nlc3MoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1VzZXJPcCBfX3VzZXJfb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9GdW5jdGlvbmFsaXR5JiBfX2Z1bmN0aW9uYWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWQgX19yZWR1Y3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXN1bHQgX19yZWR1Y3Rpb25fc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXN1bHQmIF9fb3V0cHV0LCB0eXBlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIF9fYm91bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICBpZiAoX19wYXJhbGxlbGlzbV90YWcgPT0gcGFyYWxsZWxfdW5iYWxhbmNlZCkKKyAgICAgICAgcmV0dXJuIF9fZm9yX2VhY2hfdGVtcGxhdGVfcmFuZG9tX2FjY2Vzc19lZAorCSAgKF9fYmVnaW4sIF9fZW5kLCBfX3VzZXJfb3AsIF9fZnVuY3Rpb25hbGl0eSwgX19yZWR1Y3Rpb24sCisJICAgX19yZWR1Y3Rpb25fc3RhcnQsIF9fb3V0cHV0LCBfX2JvdW5kKTsKKyAgICAgIGVsc2UgaWYgKF9fcGFyYWxsZWxpc21fdGFnID09IHBhcmFsbGVsX29tcF9sb29wKQorICAgICAgICByZXR1cm4gX19mb3JfZWFjaF90ZW1wbGF0ZV9yYW5kb21fYWNjZXNzX29tcF9sb29wCisJICAoX19iZWdpbiwgX19lbmQsIF9fdXNlcl9vcCwgX19mdW5jdGlvbmFsaXR5LCBfX3JlZHVjdGlvbiwKKwkgICBfX3JlZHVjdGlvbl9zdGFydCwgX19vdXRwdXQsIF9fYm91bmQpOworICAgICAgZWxzZSBpZiAoX19wYXJhbGxlbGlzbV90YWcgPT0gcGFyYWxsZWxfb21wX2xvb3Bfc3RhdGljKQorICAgICAgICByZXR1cm4gX19mb3JfZWFjaF90ZW1wbGF0ZV9yYW5kb21fYWNjZXNzX29tcF9sb29wCisJICAoX19iZWdpbiwgX19lbmQsIF9fdXNlcl9vcCwgX19mdW5jdGlvbmFsaXR5LCBfX3JlZHVjdGlvbiwKKwkgICBfX3JlZHVjdGlvbl9zdGFydCwgX19vdXRwdXQsIF9fYm91bmQpOworICAgICAgZWxzZSAgICAgIC8vZS4gZy4gcGFyYWxsZWxfYmFsYW5jZWQKKyAgICAgICAgcmV0dXJuIF9fZm9yX2VhY2hfdGVtcGxhdGVfcmFuZG9tX2FjY2Vzc193b3Jrc3RlYWxpbmcKKwkgIChfX2JlZ2luLCBfX2VuZCwgX191c2VyX29wLCBfX2Z1bmN0aW9uYWxpdHksIF9fcmVkdWN0aW9uLAorCSAgIF9fcmVkdWN0aW9uX3N0YXJ0LCBfX291dHB1dCwgX19ib3VuZCk7CisgIH0KK30KKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX0ZPUl9FQUNIX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvZm9yX2VhY2hfc2VsZWN0b3JzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2Zvcl9lYWNoX3NlbGVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NjMwODQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2Zvcl9lYWNoX3NlbGVjdG9ycy5oCkBAIC0wLDAgKzEsMzQ5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvZm9yX2VhY2hfc2VsZWN0b3JzLmgKKyAqICBAYnJpZWYgRnVuY3RvcnMgcmVwcmVzZW50aW5nIGRpZmZlcmVudCB0YXNrcyB0byBiZSBwbHVnZ2VkIGludG8gdGhlCisgKiAgZ2VuZXJpYyBwYXJhbGxlbGl6YXRpb24gbWV0aG9kcyBmb3IgZW1iYXJyYXNzaW5nbHkgcGFyYWxsZWwgZnVuY3Rpb25zLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgRmVsaXggUHV0emUuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfRk9SX0VBQ0hfU0VMRUNUT1JTX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfRk9SX0VBQ0hfU0VMRUNUT1JTX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKiBAYnJpZWYgR2VuZXJpYyBfX3NlbGVjdG9yIGZvciBlbWJhcnJhc3NpbmdseSBwYXJhbGxlbCBmdW5jdGlvbnMuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdD4KKyAgICBzdHJ1Y3QgX19nZW5lcmljX2Zvcl9lYWNoX3NlbGVjdG9yCisgICAgeworICAgICAgLyoqIEBicmllZiBfSXRlcmF0b3Igb24gbGFzdCBlbGVtZW50IHByb2Nlc3NlZDsgbmVlZGVkIGZvciBzb21lCisgICAgICAgKiAgYWxnb3JpdGhtcyAoZS4gZy4gc3RkOjp0cmFuc2Zvcm0oKSkuCisgICAgICAgKi8KKyAgICAgIF9JdCBfTV9maW5pc2hfaXRlcmF0b3I7CisgICAgfTsKKworICAvKiogQGJyaWVmIHN0ZDo6Zm9yX2VhY2goKSBzZWxlY3Rvci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0PgorICAgIHN0cnVjdCBfX2Zvcl9lYWNoX3NlbGVjdG9yIDogcHVibGljIF9fZ2VuZXJpY19mb3JfZWFjaF9zZWxlY3RvcjxfSXQ+CisgICAgeworICAgICAgLyoqIEBicmllZiBGdW5jdG9yIGV4ZWN1dGlvbi4KKyAgICAgICAqICBAcGFyYW0gX19vIE9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSBfX2kgaXRlcmF0b3IgcmVmZXJlbmNpbmcgb2JqZWN0LiAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX09wPgorICAgICAgICBib29sCisgICAgICAgIG9wZXJhdG9yKCkoX09wJiBfX28sIF9JdCBfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX28oKl9faSk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgc3RkOjpnZW5lcmF0ZSgpIHNlbGVjdG9yLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXQ+CisgICAgc3RydWN0IF9fZ2VuZXJhdGVfc2VsZWN0b3IgOiBwdWJsaWMgX19nZW5lcmljX2Zvcl9lYWNoX3NlbGVjdG9yPF9JdD4KKyAgICB7CisgICAgICAvKiogQGJyaWVmIEZ1bmN0b3IgZXhlY3V0aW9uLgorICAgICAgICogIEBwYXJhbSBfX28gT3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9faSBpdGVyYXRvciByZWZlcmVuY2luZyBvYmplY3QuICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3A+CisgICAgICAgIGJvb2wKKyAgICAgICAgb3BlcmF0b3IoKShfT3AmIF9fbywgX0l0IF9faSkKKyAgICAgICAgeworICAgICAgICAgICpfX2kgPSBfX28oKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBzdGQ6OmZpbGwoKSBzZWxlY3Rvci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0PgorICAgIHN0cnVjdCBfX2ZpbGxfc2VsZWN0b3IgOiBwdWJsaWMgX19nZW5lcmljX2Zvcl9lYWNoX3NlbGVjdG9yPF9JdD4KKyAgICB7CisgICAgICAvKiogQGJyaWVmIEZ1bmN0b3IgZXhlY3V0aW9uLgorICAgICAgICogIEBwYXJhbSBfX3YgQ3VycmVudCB2YWx1ZS4KKyAgICAgICAqICBAcGFyYW0gX19pIGl0ZXJhdG9yIHJlZmVyZW5jaW5nIG9iamVjdC4gKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVR5cGU+CisgICAgICAgIGJvb2wKKyAgICAgICAgb3BlcmF0b3IoKShfVmFsdWVUeXBlJiBfX3YsIF9JdCBfX2kpCisgICAgICAgIHsKKyAgICAgICAgICAqX19pID0gX192OworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfTsKKworICAvKiogQGJyaWVmIHN0ZDo6dHJhbnNmb3JtKCkgX19zZWxlY3Rvciwgb25lIGlucHV0IHNlcXVlbmNlIHZhcmlhbnQuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdD4KKyAgICBzdHJ1Y3QgX190cmFuc2Zvcm0xX3NlbGVjdG9yIDogcHVibGljIF9fZ2VuZXJpY19mb3JfZWFjaF9zZWxlY3RvcjxfSXQ+CisgICAgeworICAgICAgLyoqIEBicmllZiBGdW5jdG9yIGV4ZWN1dGlvbi4KKyAgICAgICAqICBAcGFyYW0gX19vIE9wZXJhdG9yLgorICAgICAgICogIEBwYXJhbSBfX2kgaXRlcmF0b3IgcmVmZXJlbmNpbmcgb2JqZWN0LiAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX09wPgorICAgICAgICBib29sCisgICAgICAgIG9wZXJhdG9yKCkoX09wJiBfX28sIF9JdCBfX2kpCisgICAgICAgIHsKKyAgICAgICAgICAqX19pLnNlY29uZCA9IF9fbygqX19pLmZpcnN0KTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBzdGQ6OnRyYW5zZm9ybSgpIF9fc2VsZWN0b3IsIHR3byBpbnB1dCBzZXF1ZW5jZXMgdmFyaWFudC4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0PgorICAgIHN0cnVjdCBfX3RyYW5zZm9ybTJfc2VsZWN0b3IgOiBwdWJsaWMgX19nZW5lcmljX2Zvcl9lYWNoX3NlbGVjdG9yPF9JdD4KKyAgICB7CisgICAgICAvKiogQGJyaWVmIEZ1bmN0b3IgZXhlY3V0aW9uLgorICAgICAgICogIEBwYXJhbSBfX28gT3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9faSBpdGVyYXRvciByZWZlcmVuY2luZyBvYmplY3QuICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3A+CisgICAgICAgIGJvb2wKKyAgICAgICAgb3BlcmF0b3IoKShfT3AmIF9fbywgX0l0IF9faSkKKyAgICAgICAgeworICAgICAgICAgICpfX2kuX01fdGhpcmQgPSBfX28oKl9faS5fTV9maXJzdCwgKl9faS5fTV9zZWNvbmQpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfTsKKworICAvKiogQGJyaWVmIHN0ZDo6cmVwbGFjZSgpIHNlbGVjdG9yLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXQsIHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19yZXBsYWNlX3NlbGVjdG9yIDogcHVibGljIF9fZ2VuZXJpY19mb3JfZWFjaF9zZWxlY3RvcjxfSXQ+CisgICAgeworICAgICAgLyoqIEBicmllZiBWYWx1ZSB0byByZXBsYWNlIHdpdGguICovCisgICAgICBjb25zdCBfVHAmIF9fbmV3X3ZhbDsKKworICAgICAgLyoqIEBicmllZiBDb25zdHJ1Y3RvcgorICAgICAgICogIEBwYXJhbSBfX25ld192YWwgVmFsdWUgdG8gcmVwbGFjZSB3aXRoLiAqLworICAgICAgZXhwbGljaXQKKyAgICAgIF9fcmVwbGFjZV9zZWxlY3Rvcihjb25zdCBfVHAgJl9fbmV3X3ZhbCkgOiBfX25ld192YWwoX19uZXdfdmFsKSB7fQorCisgICAgICAvKiogQGJyaWVmIEZ1bmN0b3IgZXhlY3V0aW9uLgorICAgICAgICogIEBwYXJhbSBfX3YgQ3VycmVudCB2YWx1ZS4KKyAgICAgICAqICBAcGFyYW0gX19pIGl0ZXJhdG9yIHJlZmVyZW5jaW5nIG9iamVjdC4gKi8KKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoX1RwJiBfX3YsIF9JdCBfX2kpCisgICAgICB7CisgICAgICAgIGlmICgqX19pID09IF9fdikKKyAgICAgICAgICAqX19pID0gX19uZXdfdmFsOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgc3RkOjpyZXBsYWNlKCkgc2VsZWN0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdCwgdHlwZW5hbWUgX09wLCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fcmVwbGFjZV9pZl9zZWxlY3RvciA6IHB1YmxpYyBfX2dlbmVyaWNfZm9yX2VhY2hfc2VsZWN0b3I8X0l0PgorICAgIHsKKyAgICAgIC8qKiBAYnJpZWYgVmFsdWUgdG8gcmVwbGFjZSB3aXRoLiAqLworICAgICAgY29uc3QgX1RwJiBfX25ld192YWw7CisKKyAgICAgIC8qKiBAYnJpZWYgQ29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fbmV3X3ZhbCBWYWx1ZSB0byByZXBsYWNlIHdpdGguICovCisgICAgICBleHBsaWNpdAorICAgICAgX19yZXBsYWNlX2lmX3NlbGVjdG9yKGNvbnN0IF9UcCAmX19uZXdfdmFsKSA6IF9fbmV3X3ZhbChfX25ld192YWwpIHsgfQorCisgICAgICAvKiogQGJyaWVmIEZ1bmN0b3IgZXhlY3V0aW9uLgorICAgICAgICogIEBwYXJhbSBfX28gT3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9faSBpdGVyYXRvciByZWZlcmVuY2luZyBvYmplY3QuICovCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKF9PcCYgX19vLCBfSXQgX19pKQorICAgICAgeworICAgICAgICBpZiAoX19vKCpfX2kpKQorICAgICAgICAgICpfX2kgPSBfX25ld192YWw7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBzdGQ6OmNvdW50KCkgc2VsZWN0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdCwgdHlwZW5hbWUgX0RpZmY+CisgICAgc3RydWN0IF9fY291bnRfc2VsZWN0b3IgOiBwdWJsaWMgX19nZW5lcmljX2Zvcl9lYWNoX3NlbGVjdG9yPF9JdD4KKyAgICB7CisgICAgICAvKiogQGJyaWVmIEZ1bmN0b3IgZXhlY3V0aW9uLgorICAgICAgICogIEBwYXJhbSBfX3YgQ3VycmVudCB2YWx1ZS4KKyAgICAgICAqICBAcGFyYW0gX19pIGl0ZXJhdG9yIHJlZmVyZW5jaW5nIG9iamVjdC4KKyAgICAgICAqICBAcmV0dXJuIDEgaWYgY291bnQsIDAgaWYgZG9lcyBub3QgY291bnQuICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUeXBlPgorICAgICAgICBfRGlmZgorICAgICAgICBvcGVyYXRvcigpKF9WYWx1ZVR5cGUmIF9fdiwgX0l0IF9faSkKKyAgICAgICAgeyByZXR1cm4gKF9fdiA9PSAqX19pKSA/IDEgOiAwOyB9CisgICAgfTsKKworICAvKiogQGJyaWVmIHN0ZDo6Y291bnRfaWYgKCkgc2VsZWN0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdCwgdHlwZW5hbWUgX0RpZmY+CisgICAgc3RydWN0IF9fY291bnRfaWZfc2VsZWN0b3IgOiBwdWJsaWMgX19nZW5lcmljX2Zvcl9lYWNoX3NlbGVjdG9yPF9JdD4KKyAgICB7CisgICAgICAvKiogQGJyaWVmIEZ1bmN0b3IgZXhlY3V0aW9uLgorICAgICAgICogIEBwYXJhbSBfX28gT3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9faSBpdGVyYXRvciByZWZlcmVuY2luZyBvYmplY3QuCisgICAgICAgKiAgQHJldHVybiAxIGlmIGNvdW50LCAwIGlmIGRvZXMgbm90IGNvdW50LiAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX09wPgorICAgICAgICBfRGlmZgorICAgICAgICBvcGVyYXRvcigpKF9PcCYgX19vLCBfSXQgX19pKQorICAgICAgICB7IHJldHVybiAoX19vKCpfX2kpKSA/IDEgOiAwOyB9CisgICAgfTsKKworICAvKiogQGJyaWVmIHN0ZDo6YWNjdW11bGF0ZSgpIHNlbGVjdG9yLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXQ+CisgICAgc3RydWN0IF9fYWNjdW11bGF0ZV9zZWxlY3RvciA6IHB1YmxpYyBfX2dlbmVyaWNfZm9yX2VhY2hfc2VsZWN0b3I8X0l0PgorICAgIHsKKyAgICAgIC8qKiBAYnJpZWYgRnVuY3RvciBleGVjdXRpb24uCisgICAgICAgKiAgQHBhcmFtIF9fbyBPcGVyYXRvciAodW51c2VkKS4KKyAgICAgICAqICBAcGFyYW0gX19pIGl0ZXJhdG9yIHJlZmVyZW5jaW5nIG9iamVjdC4KKyAgICAgICAqICBAcmV0dXJuIFRoZSBjdXJyZW50IHZhbHVlLiAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX09wPgorICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXQ+Ojp2YWx1ZV90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX09wIF9fbywgX0l0IF9faSkKKyAgICAgICAgeyByZXR1cm4gKl9faTsgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBzdGQ6OmlubmVyX3Byb2R1Y3QoKSBzZWxlY3Rvci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0LCB0eXBlbmFtZSBfSXQyLCB0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faW5uZXJfcHJvZHVjdF9zZWxlY3RvciA6IHB1YmxpYyBfX2dlbmVyaWNfZm9yX2VhY2hfc2VsZWN0b3I8X0l0PgorICAgIHsKKyAgICAgIC8qKiBAYnJpZWYgQmVnaW4gaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuICovCisgICAgICBfSXQgIF9fYmVnaW4xX2l0ZXJhdG9yOworCisgICAgICAvKiogQGJyaWVmIEJlZ2luIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4gKi8KKyAgICAgIF9JdDIgX19iZWdpbjJfaXRlcmF0b3I7CisKKyAgICAgIC8qKiBAYnJpZWYgQ29uc3RydWN0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fYjEgQmVnaW4gaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAgICAgKiAgQHBhcmFtIF9fYjIgQmVnaW4gaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLiAqLworICAgICAgZXhwbGljaXQKKyAgICAgIF9faW5uZXJfcHJvZHVjdF9zZWxlY3RvcihfSXQgX19iMSwgX0l0MiBfX2IyKQorICAgICAgOiBfX2JlZ2luMV9pdGVyYXRvcihfX2IxKSwgX19iZWdpbjJfaXRlcmF0b3IoX19iMikgeyB9CisKKyAgICAgIC8qKiBAYnJpZWYgRnVuY3RvciBleGVjdXRpb24uCisgICAgICAgKiAgQHBhcmFtIF9fbXVsdCBNdWx0aXBsaWNhdGlvbiBmdW5jdG9yLgorICAgICAgICogIEBwYXJhbSBfX2N1cnJlbnQgaXRlcmF0b3IgcmVmZXJlbmNpbmcgb2JqZWN0LgorICAgICAgICogIEByZXR1cm4gSW5uZXIgcHJvZHVjdCBlbGVtZW50YWwgX19yZXN1bHQuICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3A+CisgICAgICAgIF9UcAorICAgICAgICBvcGVyYXRvcigpKF9PcCBfX211bHQsIF9JdCBfX2N1cnJlbnQpCisgICAgICAgIHsKKyAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXQ+OjpkaWZmZXJlbmNlX3R5cGUgX19wb3NpdGlvbgorICAgICAgICAgICAgPSBfX2N1cnJlbnQgLSBfX2JlZ2luMV9pdGVyYXRvcjsKKyAgICAgICAgICByZXR1cm4gX19tdWx0KCpfX2N1cnJlbnQsICooX19iZWdpbjJfaXRlcmF0b3IgKyBfX3Bvc2l0aW9uKSk7CisgICAgICAgIH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgU2VsZWN0b3IgdGhhdCBqdXN0IHJldHVybnMgdGhlIHBhc3NlZCBpdGVyYXRvci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0PgorICAgIHN0cnVjdCBfX2lkZW50aXR5X3NlbGVjdG9yIDogcHVibGljIF9fZ2VuZXJpY19mb3JfZWFjaF9zZWxlY3RvcjxfSXQ+CisgICAgeworICAgICAgLyoqIEBicmllZiBGdW5jdG9yIGV4ZWN1dGlvbi4KKyAgICAgICAqICBAcGFyYW0gX19vIE9wZXJhdG9yICh1bnVzZWQpLgorICAgICAgICogIEBwYXJhbSBfX2kgaXRlcmF0b3IgcmVmZXJlbmNpbmcgb2JqZWN0LgorICAgICAgICogIEByZXR1cm4gUGFzc2VkIGl0ZXJhdG9yLiAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX09wPgorICAgICAgICBfSXQKKyAgICAgICAgb3BlcmF0b3IoKShfT3AgX19vLCBfSXQgX19pKQorICAgICAgICB7IHJldHVybiBfX2k7IH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgU2VsZWN0b3IgdGhhdCByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGFkamFjZW50CisgICAqICBfX2VsZW1lbnRzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0PgorICAgIHN0cnVjdCBfX2FkamFjZW50X2RpZmZlcmVuY2Vfc2VsZWN0b3IKKyAgICA6IHB1YmxpYyBfX2dlbmVyaWNfZm9yX2VhY2hfc2VsZWN0b3I8X0l0PgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PcD4KKyAgICAgICAgYm9vbAorICAgICAgICBvcGVyYXRvcigpKF9PcCYgX19vLCBfSXQgX19pKQorICAgICAgICB7CisgICAgICAgICAgdHlwZW5hbWUgX0l0OjpmaXJzdF90eXBlIF9fZ29fYmFja19vbmUgPSBfX2kuZmlyc3Q7CisgICAgICAgICAgLS1fX2dvX2JhY2tfb25lOworICAgICAgICAgICpfX2kuc2Vjb25kID0gX19vKCpfX2kuZmlyc3QsICpfX2dvX2JhY2tfb25lKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBGdW5jdG9yIGRvaW5nIG5vdGhpbmcKKyAgICoKKyAgICogIEZvciBzb21lIF9fcmVkdWN0aW9uIHRhc2tzICh0aGlzIGlzIG5vdCBhIGZ1bmN0aW9uIG9iamVjdCwgYnV0IGlzCisgICAqICBwYXNzZWQgYXMgX19zZWxlY3RvciBfX2R1bW15IHBhcmFtZXRlci4KKyAgICovCisgIHN0cnVjdCBfTm90aGluZworICB7CisgICAgLyoqIEBicmllZiBGdW5jdG9yIGV4ZWN1dGlvbi4KKyAgICAgKiAgQHBhcmFtIF9faSBpdGVyYXRvciByZWZlcmVuY2luZyBvYmplY3QuICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0PgorICAgICAgdm9pZAorICAgICAgb3BlcmF0b3IoKShfSXQgX19pKSB7IH0KKyAgfTsKKworICAvKiogQGJyaWVmIFJlZHVjdGlvbiBmdW5jdGlvbiBkb2luZyBub3RoaW5nLiAqLworICBzdHJ1Y3QgX0R1bW15UmVkdWN0CisgIHsKKyAgICBib29sCisgICAgb3BlcmF0b3IoKShib29sLCBib29sKSBjb25zdAorICAgIHsgcmV0dXJuIHRydWU7IH0KKyAgfTsKKworICAvKiogQGJyaWVmIFJlZHVjdGlvbiBmb3IgZmluZGluZyB0aGUgbWF4aW11bSBlbGVtZW50LCB1c2luZyBhIGNvbXBhcmF0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfSXQ+CisgICAgc3RydWN0IF9fbWluX2VsZW1lbnRfcmVkdWN0CisgICAgeworICAgICAgX0NvbXBhcmUmIF9fY29tcDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIF9fbWluX2VsZW1lbnRfcmVkdWN0KF9Db21wYXJlICZfX2MpIDogX19jb21wKF9fYykgeyB9CisKKyAgICAgIF9JdAorICAgICAgb3BlcmF0b3IoKShfSXQgX194LCBfSXQgX195KQorICAgICAgeyByZXR1cm4gKF9fY29tcCgqX194LCAqX195KSkgPyBfX3ggOiBfX3k7IH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgUmVkdWN0aW9uIGZvciBmaW5kaW5nIHRoZSBtYXhpbXVtIGVsZW1lbnQsIHVzaW5nIGEgY29tcGFyYXRvci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9JdD4KKyAgICBzdHJ1Y3QgX19tYXhfZWxlbWVudF9yZWR1Y3QKKyAgICB7CisgICAgICBfQ29tcGFyZSYgX19jb21wOworCisgICAgICBleHBsaWNpdAorICAgICAgX19tYXhfZWxlbWVudF9yZWR1Y3QoX0NvbXBhcmUmIF9fYykgOiBfX2NvbXAoX19jKSB7IH0KKworICAgICAgX0l0CisgICAgICBvcGVyYXRvcigpKF9JdCBfX3gsIF9JdCBfX3kpCisgICAgICB7IHJldHVybiAoX19jb21wKCpfX3gsICpfX3kpKSA/IF9feSA6IF9feDsgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBHZW5lcmFsIHJlZHVjdGlvbiwgdXNpbmcgYSBiaW5hcnkgb3BlcmF0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaW5PcD4KKyAgICBzdHJ1Y3QgX19hY2N1bXVsYXRlX2Jpbm9wX3JlZHVjdAorICAgIHsKKyAgICAgIF9CaW5PcCYgX19iaW5vcDsKKworICAgICAgZXhwbGljaXQKKyAgICAgIF9fYWNjdW11bGF0ZV9iaW5vcF9yZWR1Y3QoX0Jpbk9wJiBfX2IpIDogX19iaW5vcChfX2IpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfQWRkZW5kPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1Jlc3VsdCYgX194LCBjb25zdCBfQWRkZW5kJiBfX3kpCisgICAgICAgIHsgcmV0dXJuIF9fYmlub3AoX194LCBfX3kpOyB9CisgICAgfTsKK30KKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX0ZPUl9FQUNIX1NFTEVDVE9SU19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2l0ZXJhdG9yLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2l0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1NTgyNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvaXRlcmF0b3IuaApAQCAtMCwwICsxLDE5OCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL2l0ZXJhdG9yLmgKKyAqIEBicmllZiBIZWxwZXIgaXRlcmF0b3IgY2xhc3NlcyBmb3IgdGhlIHN0ZDo6dHJhbnNmb3JtKCkgZnVuY3Rpb25zLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9JVEVSQVRPUl9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX0lURVJBVE9SX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9wYWlyLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIEEgcGFpciBvZiBpdGVyYXRvcnMuIFRoZSB1c3VhbCBpdGVyYXRvciBvcGVyYXRpb25zIGFyZQorICAgKiAgYXBwbGllZCB0byBib3RoIGNoaWxkIGl0ZXJhdG9ycy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcjEsIHR5cGVuYW1lIF9JdGVyYXRvcjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvckNhdGVnb3J5PgorICAgIGNsYXNzIF9JdGVyYXRvclBhaXIgOiBwdWJsaWMgc3RkOjpwYWlyPF9JdGVyYXRvcjEsIF9JdGVyYXRvcjI+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxfSXRlcmF0b3IxLCBfSXRlcmF0b3IyPiBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKKworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3IxPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9JdGVyYXRvclBhaXIqIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIF9JdGVyYXRvclBhaXImIHJlZmVyZW5jZTsKKworICAgICAgX0l0ZXJhdG9yUGFpcigpIHsgfQorCisgICAgICBfSXRlcmF0b3JQYWlyKGNvbnN0IF9JdGVyYXRvcjEmIF9fZmlyc3QsIGNvbnN0IF9JdGVyYXRvcjImIF9fc2Vjb25kKQorICAgICAgOiBfQmFzZShfX2ZpcnN0LCBfX3NlY29uZCkgeyB9CisKKyAgICAgIC8vIFByZS1pbmNyZW1lbnQgb3BlcmF0b3IuCisgICAgICBfSXRlcmF0b3JQYWlyJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisgICAgICAgICsrX0Jhc2U6OmZpcnN0OworICAgICAgICArK19CYXNlOjpzZWNvbmQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gUG9zdC1pbmNyZW1lbnQgb3BlcmF0b3IuCisgICAgICBjb25zdCBfSXRlcmF0b3JQYWlyCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgcmV0dXJuIF9JdGVyYXRvclBhaXIoX0Jhc2U6OmZpcnN0KyssIF9CYXNlOjpzZWNvbmQrKyk7IH0KKworICAgICAgLy8gUHJlLWRlY3JlbWVudCBvcGVyYXRvci4KKyAgICAgIF9JdGVyYXRvclBhaXImCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKyAgICAgICAgLS1fQmFzZTo6Zmlyc3Q7CisgICAgICAgIC0tX0Jhc2U6OnNlY29uZDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLyBQb3N0LWRlY3JlbWVudCBvcGVyYXRvci4KKyAgICAgIGNvbnN0IF9JdGVyYXRvclBhaXIKKyAgICAgIG9wZXJhdG9yLS0oaW50KQorICAgICAgeyByZXR1cm4gX0l0ZXJhdG9yUGFpcihfQmFzZTo6Zmlyc3QtLSwgX0Jhc2U6OnNlY29uZC0tKTsgfQorCisgICAgICAvLyBUeXBlIGNvbnZlcnNpb24uCisgICAgICBvcGVyYXRvciBfSXRlcmF0b3IyKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjpzZWNvbmQ7IH0KKworICAgICAgX0l0ZXJhdG9yUGFpciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfSXRlcmF0b3JQYWlyJiBfX290aGVyKQorICAgICAgeworICAgICAgICBfQmFzZTo6Zmlyc3QgPSBfX290aGVyLmZpcnN0OworICAgICAgICBfQmFzZTo6c2Vjb25kID0gX19vdGhlci5zZWNvbmQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX0l0ZXJhdG9yUGFpcgorICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2RlbHRhKSBjb25zdAorICAgICAgeyByZXR1cm4gX0l0ZXJhdG9yUGFpcihfQmFzZTo6Zmlyc3QgKyBfX2RlbHRhLCBfQmFzZTo6c2Vjb25kICsgX19kZWx0YSk7CisgICAgICAgIH0KKworICAgICAgZGlmZmVyZW5jZV90eXBlCisgICAgICBvcGVyYXRvci0oY29uc3QgX0l0ZXJhdG9yUGFpciYgX19vdGhlcikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjpmaXJzdCAtIF9fb3RoZXIuZmlyc3Q7IH0KKyAgfTsKKworCisgIC8qKiBAYnJpZWYgQSB0cmlwbGUgb2YgaXRlcmF0b3JzLiBUaGUgdXN1YWwgaXRlcmF0b3Igb3BlcmF0aW9ucyBhcmUKKyAgICAgIGFwcGxpZWQgdG8gYWxsIHRocmVlIGNoaWxkIGl0ZXJhdG9ycy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcjEsIHR5cGVuYW1lIF9JdGVyYXRvcjIsIHR5cGVuYW1lIF9JdGVyYXRvcjMsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvckNhdGVnb3J5PgorICAgIGNsYXNzIF9JdGVyYXRvclRyaXBsZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9JdGVyYXRvckNhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OworICAgICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcjE+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yVHJpcGxlKiBwb2ludGVyOworICAgICAgdHlwZWRlZiBfSXRlcmF0b3JUcmlwbGUmIHJlZmVyZW5jZTsKKworICAgICAgX0l0ZXJhdG9yMSBfTV9maXJzdDsKKyAgICAgIF9JdGVyYXRvcjIgX01fc2Vjb25kOworICAgICAgX0l0ZXJhdG9yMyBfTV90aGlyZDsKKworICAgICAgX0l0ZXJhdG9yVHJpcGxlKCkgeyB9CisKKyAgICAgIF9JdGVyYXRvclRyaXBsZShjb25zdCBfSXRlcmF0b3IxJiBfX2ZpcnN0LCBjb25zdCBfSXRlcmF0b3IyJiBfX3NlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfSXRlcmF0b3IzJiBfX3RoaXJkKQorICAgICAgeworICAgICAgICBfTV9maXJzdCA9IF9fZmlyc3Q7CisgICAgICAgIF9NX3NlY29uZCA9IF9fc2Vjb25kOworICAgICAgICBfTV90aGlyZCA9IF9fdGhpcmQ7CisgICAgICB9CisKKyAgICAgIC8vIFByZS1pbmNyZW1lbnQgb3BlcmF0b3IuCisgICAgICBfSXRlcmF0b3JUcmlwbGUmCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKyAgICAgICAgKytfTV9maXJzdDsKKyAgICAgICAgKytfTV9zZWNvbmQ7CisgICAgICAgICsrX01fdGhpcmQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLy8gUG9zdC1pbmNyZW1lbnQgb3BlcmF0b3IuCisgICAgICBjb25zdCBfSXRlcmF0b3JUcmlwbGUKKyAgICAgIG9wZXJhdG9yKysoaW50KQorICAgICAgeyByZXR1cm4gX0l0ZXJhdG9yVHJpcGxlKF9NX2ZpcnN0KyssIF9NX3NlY29uZCsrLCBfTV90aGlyZCsrKTsgfQorCisgICAgICAvLyBQcmUtZGVjcmVtZW50IG9wZXJhdG9yLgorICAgICAgX0l0ZXJhdG9yVHJpcGxlJgorICAgICAgb3BlcmF0b3ItLSgpCisgICAgICB7CisgICAgICAgIC0tX01fZmlyc3Q7CisgICAgICAgIC0tX01fc2Vjb25kOworICAgICAgICAtLV9NX3RoaXJkOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vIFBvc3QtZGVjcmVtZW50IG9wZXJhdG9yLgorICAgICAgY29uc3QgX0l0ZXJhdG9yVHJpcGxlCisgICAgICBvcGVyYXRvci0tKGludCkKKyAgICAgIHsgcmV0dXJuIF9JdGVyYXRvclRyaXBsZShfTV9maXJzdC0tLCBfTV9zZWNvbmQtLSwgX01fdGhpcmQtLSk7IH0KKworICAgICAgLy8gVHlwZSBjb252ZXJzaW9uLgorICAgICAgb3BlcmF0b3IgX0l0ZXJhdG9yMygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90aGlyZDsgfQorCisgICAgICBfSXRlcmF0b3JUcmlwbGUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX0l0ZXJhdG9yVHJpcGxlJiBfX290aGVyKQorICAgICAgeworICAgICAgICBfTV9maXJzdCA9IF9fb3RoZXIuX01fZmlyc3Q7CisgICAgICAgIF9NX3NlY29uZCA9IF9fb3RoZXIuX01fc2Vjb25kOworICAgICAgICBfTV90aGlyZCA9IF9fb3RoZXIuX01fdGhpcmQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX0l0ZXJhdG9yVHJpcGxlCisgICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fZGVsdGEpIGNvbnN0CisgICAgICB7IHJldHVybiBfSXRlcmF0b3JUcmlwbGUoX01fZmlyc3QgKyBfX2RlbHRhLCBfTV9zZWNvbmQgKyBfX2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX3RoaXJkICsgX19kZWx0YSk7IH0KKworICAgICAgZGlmZmVyZW5jZV90eXBlCisgICAgICBvcGVyYXRvci0oY29uc3QgX0l0ZXJhdG9yVHJpcGxlJiBfX290aGVyKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZmlyc3QgLSBfX290aGVyLl9NX2ZpcnN0OyB9CisgIH07Cit9CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9JVEVSQVRPUl9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2xpc3RfcGFydGl0aW9uLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL2xpc3RfcGFydGl0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiOWFjYgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbGlzdF9wYXJ0aXRpb24uaApAQCAtMCwwICsxLDE3OSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIF9faXQgYW5kL29yIG1vZGlmeSBfX2l0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IF9faXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL2xpc3RfcGFydGl0aW9uLmgKKyAqICBAYnJpZWYgX0Z1bmN0aW9uYWxpdHkgdG8gc3BsaXQgX19zZXF1ZW5jZSByZWZlcmVuY2VkIGJ5IG9ubHkgaW5wdXQKKyAqICBpdGVyYXRvcnMuCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBMZW9ub3IgRnJpYXMgTW95YSBhbmQgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9MSVNUX1BBUlRJVElPTl9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX0xJU1RfUEFSVElUSU9OX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvcGFyYWxsZWwuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIFNocmlua3MgYW5kIGRvdWJsZXMgdGhlIHJhbmdlcy4KKyAgICogIEBwYXJhbSBfX29zX3N0YXJ0cyBTdGFydCBwb3NpdGlvbnMgd29ya2VkIG9uIChvdmVyc2FtcGxlZCkuCisgICAqICBAcGFyYW0gX19jb3VudF90b190d28gQ291bnRzIHVwIHRvIDIuCisgICAqICBAcGFyYW0gX19yYW5nZV9sZW5ndGggQ3VycmVudCBsZW5ndGggb2YgYSBjaHVuay4KKyAgICogIEBwYXJhbSBfX21ha2VfdHdpY2UgV2hldGhlciB0aGUgQGMgX19vc19zdGFydHMgaXMgYWxsb3dlZCB0byBiZQorICAgKiAgZ3Jvd24gb3Igbm90CisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXI+CisgICAgdm9pZAorICAgIF9fc2hyaW5rX2FuZF9kb3VibGUoc3RkOjp2ZWN0b3I8X0lJdGVyPiYgX19vc19zdGFydHMsCisJCQlzaXplX3QmIF9fY291bnRfdG9fdHdvLCBzaXplX3QmIF9fcmFuZ2VfbGVuZ3RoLAorCQkJY29uc3QgYm9vbCBfX21ha2VfdHdpY2UpCisgICAgeworICAgICAgKytfX2NvdW50X3RvX3R3bzsKKyAgICAgIGlmICghX19tYWtlX3R3aWNlIHx8IF9fY291bnRfdG9fdHdvIDwgMikKKyAgICAgICAgX19zaHJpbmsoX19vc19zdGFydHMsIF9fY291bnRfdG9fdHdvLCBfX3JhbmdlX2xlbmd0aCk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfX29zX3N0YXJ0cy5yZXNpemUoKF9fb3Nfc3RhcnRzLnNpemUoKSAtIDEpICogMiArIDEpOworICAgICAgICAgIF9fY291bnRfdG9fdHdvID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAvKiogQGJyaWVmIENvbWJpbmVzIHR3byByYW5nZXMgaW50byBvbmUgYW5kIHRodXMgaGFsdmVzIHRoZSBudW1iZXIgb2YgcmFuZ2VzLgorICAgKiAgQHBhcmFtIF9fb3Nfc3RhcnRzIFN0YXJ0IHBvc2l0aW9ucyB3b3JrZWQgb24gKG92ZXJzYW1wbGVkKS4KKyAgICogIEBwYXJhbSBfX2NvdW50X3RvX3R3byBDb3VudHMgdXAgdG8gMi4KKyAgICogIEBwYXJhbSBfX3JhbmdlX2xlbmd0aCBDdXJyZW50IGxlbmd0aCBvZiBhIGNodW5rLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXI+CisgICAgdm9pZAorICAgIF9fc2hyaW5rKHN0ZDo6dmVjdG9yPF9JSXRlcj4mIF9fb3Nfc3RhcnRzLCBzaXplX3QmIF9fY291bnRfdG9fdHdvLAorCSAgICAgc2l6ZV90JiBfX3JhbmdlX2xlbmd0aCkKKyAgICB7CisgICAgICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPF9JSXRlcj46OnNpemVfdHlwZSBfX2kgPSAwOworICAgICAgICAgICBfX2kgPD0gKF9fb3Nfc3RhcnRzLnNpemUoKSAvIDIpOyArK19faSkKKyAgICAgICAgX19vc19zdGFydHNbX19pXSA9IF9fb3Nfc3RhcnRzW19faSAqIDJdOworICAgICAgX19yYW5nZV9sZW5ndGggKj0gMjsKKyAgICB9CisKKyAgLyoqIEBicmllZiBTcGxpdHMgYSBzZXF1ZW5jZSBnaXZlbiBieSBpbnB1dCBpdGVyYXRvcnMgaW50byBwYXJ0cyBvZgorICAgKiBhbG1vc3QgZXF1YWwgc2l6ZQorICAgKgorICAgKiAgVGhlIGZ1bmN0aW9uIG5lZWRzIG9ubHkgb25lIHBhc3Mgb3ZlciB0aGUgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19zdGFydHMgU3RhcnQgaXRlcmF0b3JzIGZvciB0aGUgcmVzdWx0aW5nIHBhcnRzLCBkaW1lbnNpb24KKyAgICogIEBjIF9fbnVtX3BhcnRzKzEuIEZvciBjb252ZW5pZW5jZSwgQGMgX19zdGFydHMgQGMgW19fbnVtX3BhcnRzXQorICAgKiAgY29udGFpbnMgdGhlIGVuZCBpdGVyYXRvciBvZiB0aGUgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19sZW5ndGhzIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHBhcnRzLgorICAgKiAgQHBhcmFtIF9fbnVtX3BhcnRzIE51bWJlciBvZiBwYXJ0cyB0byBzcGxpdCB0aGUgc2VxdWVuY2UgaW50by4KKyAgICogIEBwYXJhbSBfX2YgRnVuY3RvciB0byBiZSBhcHBsaWVkIHRvIGVhY2ggZWxlbWVudCBieSB0cmF2ZXJzaW5nIF9faXQKKyAgICogIEBwYXJhbSBfX292ZXJzYW1wbGluZyBPdmVyc2FtcGxpbmcgZmFjdG9yLiBJZiAwLCB0aGVuIHRoZQorICAgKiAgcGFydGl0aW9ucyB3aWxsIGRpZmZlciBpbiBhdCBtb3N0IAorICAgKiAgXHNxcnR7XG1hdGhybXtfX2VuZH0gLSBcbWF0aHJte19fYmVnaW59fSAKKyAgICogIF9fZWxlbWVudHMuIE90aGVyd2lzZSwgdGhlIHJhdGlvIGJldHdlZW4gdGhlCisgICAqICBsb25nZXN0IGFuZCB0aGUgc2hvcnRlc3QgcGFydCBpcyBib3VuZGVkIGJ5CisgICAqICAxLyhcbWF0aHJte19fb3ZlcnNhbXBsaW5nfSBcY2RvdCBcbWF0aHJte251bVxfcGFydHN9KQorICAgKiAgQHJldHVybiBMZW5ndGggb2YgdGhlIHdob2xlIHNlcXVlbmNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfRnVuY3RvclR5cGU+CisgICAgc2l6ZV90CisgICAgbGlzdF9wYXJ0aXRpb24oY29uc3QgX0lJdGVyIF9fYmVnaW4sIGNvbnN0IF9JSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICBfSUl0ZXIqIF9fc3RhcnRzLCBzaXplX3QqIF9fbGVuZ3RocywgY29uc3QgaW50IF9fbnVtX3BhcnRzLAorICAgICAgICAgICAgICAgICAgIF9GdW5jdG9yVHlwZSYgX19mLCBpbnQgX19vdmVyc2FtcGxpbmcgPSAwKQorICAgIHsKKyAgICAgIGJvb2wgX19tYWtlX3R3aWNlID0gZmFsc2U7CisKKyAgICAgIC8vIFRoZSByZXNpemluZyBhbGdvcml0aG0gaXMgY2hvc2VuIGFjY29yZGluZyB0byB0aGUgb3ZlcnNhbXBsaW5nIGZhY3Rvci4KKyAgICAgIGlmIChfX292ZXJzYW1wbGluZyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgX19tYWtlX3R3aWNlID0gdHJ1ZTsKKyAgICAgICAgICBfX292ZXJzYW1wbGluZyA9IDE7CisgICAgICAgIH0KKworICAgICAgc3RkOjp2ZWN0b3I8X0lJdGVyPiBfX29zX3N0YXJ0cygyICogX19vdmVyc2FtcGxpbmcgKiBfX251bV9wYXJ0cyArIDEpOworCisgICAgICBfX29zX3N0YXJ0c1swXSA9IF9fYmVnaW47CisgICAgICBfSUl0ZXIgX19wcmV2ICA9IF9fYmVnaW4sIF9faXQgPSBfX2JlZ2luOworICAgICAgc2l6ZV90IF9fZGlzdF9saW1pdCA9IDAsIF9fZGlzdCA9IDA7CisgICAgICBzaXplX3QgX19jdXIgPSAxLCBfX25leHQgPSAxOworICAgICAgc2l6ZV90IF9fcmFuZ2VfbGVuZ3RoID0gMTsKKyAgICAgIHNpemVfdCBfX2NvdW50X3RvX3R3byA9IDA7CisgICAgICB3aGlsZSAoX19pdCAhPSBfX2VuZCkKKyAgICAgICAgeworICAgICAgICAgIF9fY3VyID0gX19uZXh0OworICAgICAgICAgIGZvciAoOyBfX2N1ciA8IF9fb3Nfc3RhcnRzLnNpemUoKSBhbmQgX19pdCAhPSBfX2VuZDsgKytfX2N1cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm9yIChfX2Rpc3RfbGltaXQgKz0gX19yYW5nZV9sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgX19kaXN0IDwgX19kaXN0X2xpbWl0IGFuZCBfX2l0ICE9IF9fZW5kOyArK19fZGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfX2YoX19pdCk7CisgICAgICAgICAgICAgICAgICArK19faXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBfX29zX3N0YXJ0c1tfX2N1cl0gPSBfX2l0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgLy8gTXVzdCBjb21wYXJlIGZvciBlbmQgYW5kIG5vdCBfX2N1ciA8IF9fb3Nfc3RhcnRzLnNpemUoKSAsIGJlY2F1c2UKKyAgICAgICAgICAvLyBfX2N1ciBjb3VsZCBiZSA9PSBfX29zX3N0YXJ0cy5zaXplKCkgYXMgd2VsbAorICAgICAgICAgIGlmIChfX2l0ID09IF9fZW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBfX3Nocmlua19hbmRfZG91YmxlKF9fb3Nfc3RhcnRzLCBfX2NvdW50X3RvX3R3bywgX19yYW5nZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ha2VfdHdpY2UpOworICAgICAgICAgIF9fbmV4dCA9IF9fb3Nfc3RhcnRzLnNpemUoKSAvIDIgKyAxOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGN1bGF0aW9uIG9mIHRoZSBwYXJ0cyAob25lIG11c3QgYmUgZXh0cmFjdGVkIGZyb20gX19jdXJyZW50CisgICAgICAvLyBiZWNhdXNlIHRoZSBwYXJ0aXRpb24gYmVnaW5uaW5nIGF0IGVuZCwgY29uc2lzdHMgb25seSBvZgorICAgICAgLy8gaXRzZWxmKS4KKyAgICAgIHNpemVfdCBfX3NpemVfcGFydCA9IChfX2N1ciAtIDEpIC8gX19udW1fcGFydHM7CisgICAgICBpbnQgX19zaXplX2dyZWF0ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KChfX2N1ciAtIDEpICUgX19udW1fcGFydHMpOworICAgICAgX19zdGFydHNbMF0gPSBfX29zX3N0YXJ0c1swXTsKKworICAgICAgc2l6ZV90IF9faW5kZXggPSAwOworCisgICAgICAvLyBTbWFsbGVzdCBwYXJ0aXRpb25zLgorICAgICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgKF9fbnVtX3BhcnRzICsgMSAtIF9fc2l6ZV9ncmVhdGVyKTsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX2xlbmd0aHNbX19pIC0gMV0gPSAgX19zaXplX3BhcnQgKiBfX3JhbmdlX2xlbmd0aDsKKyAgICAgICAgICBfX2luZGV4ICs9IF9fc2l6ZV9wYXJ0OworICAgICAgICAgIF9fc3RhcnRzW19faV0gPSBfX29zX3N0YXJ0c1tfX2luZGV4XTsKKyAgICAgICAgfQorCisgICAgICAvLyBCaWdnZXN0IHBhcnRpdGlvbnMuCisgICAgICBmb3IgKGludCBfX2kgPSBfX251bV9wYXJ0cyArIDEgLSBfX3NpemVfZ3JlYXRlcjsgX19pIDw9IF9fbnVtX3BhcnRzOworICAgICAgICAgICArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fbGVuZ3Roc1tfX2kgLSAxXSA9ICAoX19zaXplX3BhcnQrMSkgKiBfX3JhbmdlX2xlbmd0aDsKKyAgICAgICAgICBfX2luZGV4ICs9IChfX3NpemVfcGFydCsxKTsKKyAgICAgICAgICBfX3N0YXJ0c1tfX2ldID0gX19vc19zdGFydHNbX19pbmRleF07CisgICAgICAgIH0KKworICAgICAgLy8gQ29ycmVjdGlvbiBvZiB0aGUgZW5kIHNpemUgKHRoZSBlbmQgaXRlcmF0aW9uIGhhcyBub3QgZmluaXNoZWQpLgorICAgICAgX19sZW5ndGhzW19fbnVtX3BhcnRzIC0gMV0gLT0gKF9fZGlzdF9saW1pdCAtIF9fZGlzdCk7CisKKyAgICAgIHJldHVybiBfX2Rpc3Q7CisgICAgfQorfQorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfTElTVF9QQVJUSVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9sb3NlcnRyZWUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbG9zZXJ0cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwYTk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbG9zZXJ0cmVlLmgKQEAgLTAsMCArMSwxMDYzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvbG9zZXJ0cmVlLmgKKyogIEBicmllZiBNYW55IGdlbmVyaWMgbG9zZXIgdHJlZSB2YXJpYW50cy4KKyogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorKi8KKworLy8gV3JpdHRlbiBieSBKb2hhbm5lcyBTaW5nbGVyLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX0xPU0VSVFJFRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX0xPU0VSVFJFRV9IIDEKKworI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9mZWF0dXJlcy5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL2Jhc2UuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKgorICAgKiBAYnJpZWYgR3VhcmRlZCBsb3Nlci90b3VybmFtZW50IHRyZWUuCisgICAqCisgICAqIFRoZSBzbWFsbGVzdCBlbGVtZW50IGlzIGF0IHRoZSB0b3AuCisgICAqCisgICAqIEd1YXJkaW5nIGlzIGRvbmUgZXhwbGljaXRseSB0aHJvdWdoIG9uZSBmbGFnIF9NX3N1cCBwZXIgZWxlbWVudCwKKyAgICogaW5mIGlzIG5vdCBuZWVkZWQgZHVlIHRvIGEgYmV0dGVyIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuICBUaGlzCisgICAqIGlzIGEgd2VsbC1wZXJmb3JtaW5nIHZhcmlhbnQuCisgICAqCisgICAqIEBwYXJhbSBfVHAgdGhlIGVsZW1lbnQgdHlwZQorICAgKiBAcGFyYW0gX0NvbXBhcmUgdGhlIGNvbXBhcmF0b3IgdG8gdXNlLCBkZWZhdWx0cyB0byBzdGQ6Omxlc3M8X1RwPgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBjbGFzcyBfTG9zZXJUcmVlQmFzZQorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvKiogQGJyaWVmIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgX0xvc2VyVHJlZSBlbGVtZW50LiAqLworICAgICAgc3RydWN0IF9Mb3NlcgorICAgICAgeworCS8qKiBAYnJpZWYgZmxhZywgdHJ1ZSBpZmYgdGhpcyBpcyBhICJtYXhpbXVtIiBfX3NlbnRpbmVsLiAqLworCWJvb2wgX01fc3VwOworCS8qKiBAYnJpZWYgX19pbmRleCBvZiB0aGUgX19zb3VyY2UgX19zZXF1ZW5jZS4gKi8KKwlpbnQgX01fc291cmNlOworCS8qKiBAYnJpZWYgX01fa2V5IG9mIHRoZSBlbGVtZW50IGluIHRoZSBfTG9zZXJUcmVlLiAqLworCV9UcCBfTV9rZXk7CisgICAgICB9OworCisgICAgICB1bnNpZ25lZCBpbnQgX01faWssIF9NX2ssIF9NX29mZnNldDsKKworICAgICAgLyoqIGxvZ18ye19NX2t9ICovCisgICAgICB1bnNpZ25lZCBpbnQgX01fbG9nX2s7CisKKyAgICAgIC8qKiBAYnJpZWYgX0xvc2VyVHJlZSBfX2VsZW1lbnRzLiAqLworICAgICAgX0xvc2VyKiBfTV9sb3NlcnM7CisKKyAgICAgIC8qKiBAYnJpZWYgX0NvbXBhcmUgdG8gdXNlLiAqLworICAgICAgX0NvbXBhcmUgX01fY29tcDsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU3RhdGUgZmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgX0xvc2VyVHJlZSBpcyBlbXB0eS4KKyAgICAgICAqCisgICAgICAgKiBPbmx5IHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBfTG9zZXJUcmVlLgorICAgICAgICovCisgICAgICBib29sIF9NX2ZpcnN0X2luc2VydDsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19rIFRoZSBudW1iZXIgb2Ygc2VxdWVuY2VzIHRvIG1lcmdlLgorICAgICAgICogQHBhcmFtIF9fY29tcCBUaGUgY29tcGFyYXRvciB0byB1c2UuCisgICAgICAgKi8KKyAgICAgIF9Mb3NlclRyZWVCYXNlKHVuc2lnbmVkIGludCBfX2ssIF9Db21wYXJlIF9fY29tcCkKKyAgICAgIDogX01fY29tcChfX2NvbXApCisgICAgICB7CisJX01faWsgPSBfX2s7CisKKwkvLyBDb21wdXRlIGxvZ18ye19NX2t9IGZvciB0aGUgX0xvc2VyIFRyZWUKKwlfTV9sb2dfayA9IF9fcmRfbG9nMihfTV9payAtIDEpICsgMTsKKworCS8vIE5leHQgZ3JlYXRlciBwb3dlciBvZiAyLgorCV9NX2sgPSAxIDw8IF9NX2xvZ19rOworCV9NX29mZnNldCA9IF9NX2s7CisKKwkvLyBBdm9pZCBkZWZhdWx0LWNvbnN0cnVjdGluZyBfTV9sb3NlcnNbXS5fTV9rZXkKKwlfTV9sb3NlcnMgPSBzdGF0aWNfY2FzdDxfTG9zZXIqPig6Om9wZXJhdG9yIG5ldygyICogX01faworCQkJCQkJCSogc2l6ZW9mKF9Mb3NlcikpKTsKKwlmb3IgKHVuc2lnbmVkIGludCBfX2kgPSBfTV9payAtIDE7IF9faSA8IF9NX2s7ICsrX19pKQorCSAgX01fbG9zZXJzW19faSArIF9NX2tdLl9NX3N1cCA9IHRydWU7CisKKwlfTV9maXJzdF9pbnNlcnQgPSB0cnVlOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBUaGUgZGVzdHJ1Y3Rvci4KKyAgICAgICAqLworICAgICAgfl9Mb3NlclRyZWVCYXNlKCkKKyAgICAgIHsKKwlmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAwOyBfX2kgPCAoMiAqIF9NX2spOyArK19faSkKKwkgIF9NX2xvc2Vyc1tfX2ldLn5fTG9zZXIoKTsKKwk6Om9wZXJhdG9yIGRlbGV0ZShfTV9sb3NlcnMpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbml0aWFsaXplcyB0aGUgc2VxdWVuY2UgIl9NX3NvdXJjZSIgd2l0aCB0aGUgZWxlbWVudCAiX19rZXkiLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2tleSB0aGUgZWxlbWVudCB0byBpbnNlcnQKKyAgICAgICAqIEBwYXJhbSBfX3NvdXJjZSBfX2luZGV4IG9mIHRoZSBfX3NvdXJjZSBfX3NlcXVlbmNlCisgICAgICAgKiBAcGFyYW0gX19zdXAgZmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgdmFsdWUgdG8gaW5zZXJ0IGlzIGFuCisgICAgICAgKiAgIGV4cGxpY2l0IF9fc3VwcmVtdW0uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIF9faW5zZXJ0X3N0YXJ0KGNvbnN0IF9UcCYgX19rZXksIGludCBfX3NvdXJjZSwgYm9vbCBfX3N1cCkKKyAgICAgIHsKKwl1bnNpZ25lZCBpbnQgX19wb3MgPSBfTV9rICsgX19zb3VyY2U7CisKKwlpZiAoX01fZmlyc3RfaW5zZXJ0KQorCSAgeworCSAgICAvLyBDb25zdHJ1Y3QgYWxsIGtleXMsIHNvIHdlIGNhbiBlYXNpbHkgZGVzdHJ1Y3QgdGhlbS4KKwkgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMDsgX19pIDwgKDIgKiBfTV9rKTsgKytfX2kpCisJICAgICAgOjpuZXcoJihfTV9sb3NlcnNbX19pXS5fTV9rZXkpKSBfVHAoX19rZXkpOworCSAgICBfTV9maXJzdF9pbnNlcnQgPSBmYWxzZTsKKwkgIH0KKwllbHNlCisJICBfTV9sb3NlcnNbX19wb3NdLl9NX2tleSA9IF9fa2V5OworCisJX01fbG9zZXJzW19fcG9zXS5fTV9zdXAgPSBfX3N1cDsKKwlfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSA9IF9fc291cmNlOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIHRoZSBzbWFsbGVzdCBlbGVtZW50LgorICAgICAgICovCisgICAgICBpbnQgX19nZXRfbWluX3NvdXJjZSgpCisgICAgICB7IHJldHVybiBfTV9sb3NlcnNbMF0uX01fc291cmNlOyB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBicmllZiBTdGFibGUgX0xvc2VyVHJlZSB2YXJpYW50LgorICAgICAqCisgICAgICogUHJvdmlkZXMgdGhlIHN0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2YgaW5zZXJ0X3N0YXJ0LCBfX2luaXRfd2lubmVyLAorICAgICAqIF9faW5pdCBhbmQgX19kZWxldGVfbWluX2luc2VydC4KKyAgICAgKgorICAgICAqIFVuc3RhYmxlIHZhcmlhbnQgaXMgZG9uZSB1c2luZyBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uIGJlbG93LgorICAgICAqLworICB0ZW1wbGF0ZTxib29sIF9fc3RhYmxlLyogZGVmYXVsdCA9PSB0cnVlICovLCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgY2xhc3MgX0xvc2VyVHJlZQorICAgIDogcHVibGljIF9Mb3NlclRyZWVCYXNlPF9UcCwgX0NvbXBhcmU+CisgICAgeworICAgICAgdHlwZWRlZiBfTG9zZXJUcmVlQmFzZTxfVHAsIF9Db21wYXJlPiBfQmFzZTsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9rOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2NvbXA7CisgICAgICB1c2luZyBfQmFzZTo6X01fbG9zZXJzOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2ZpcnN0X2luc2VydDsKKworICAgIHB1YmxpYzoKKyAgICAgIF9Mb3NlclRyZWUodW5zaWduZWQgaW50IF9faywgX0NvbXBhcmUgX19jb21wKQorICAgICAgOiBfQmFzZTo6X0xvc2VyVHJlZUJhc2UoX19rLCBfX2NvbXApCisgICAgICB7IH0KKworICAgICAgdW5zaWduZWQgaW50CisgICAgICBfX2luaXRfd2lubmVyKHVuc2lnbmVkIGludCBfX3Jvb3QpCisgICAgICB7CisJaWYgKF9fcm9vdCA+PSBfTV9rKQorCSAgcmV0dXJuIF9fcm9vdDsKKwllbHNlCisJICB7CisJICAgIHVuc2lnbmVkIGludCBfX2xlZnQgPSBfX2luaXRfd2lubmVyKDIgKiBfX3Jvb3QpOworCSAgICB1bnNpZ25lZCBpbnQgX19yaWdodCA9IF9faW5pdF93aW5uZXIoMiAqIF9fcm9vdCArIDEpOworCSAgICBpZiAoX01fbG9zZXJzW19fcmlnaHRdLl9NX3N1cAorCQl8fCAoIV9NX2xvc2Vyc1tfX2xlZnRdLl9NX3N1cAorCQkgICAgJiYgIV9NX2NvbXAoX01fbG9zZXJzW19fcmlnaHRdLl9NX2tleSwKKwkJCQlfTV9sb3NlcnNbX19sZWZ0XS5fTV9rZXkpKSkKKwkgICAgICB7CisJCS8vIExlZnQgb25lIGlzIGxlc3Mgb3IgZXF1YWwuCisJCV9NX2xvc2Vyc1tfX3Jvb3RdID0gX01fbG9zZXJzW19fcmlnaHRdOworCQlyZXR1cm4gX19sZWZ0OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJLy8gUmlnaHQgb25lIGlzIGxlc3MuCisJCV9NX2xvc2Vyc1tfX3Jvb3RdID0gX01fbG9zZXJzW19fbGVmdF07CisJCXJldHVybiBfX3JpZ2h0OworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgICAgdm9pZCBfX2luaXQoKQorICAgICAgeyBfTV9sb3NlcnNbMF0gPSBfTV9sb3NlcnNbX19pbml0X3dpbm5lcigxKV07IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRGVsZXRlIHRoZSBzbWFsbGVzdCBlbGVtZW50IGFuZCBpbnNlcnQgYSBuZXcgZWxlbWVudCBmcm9tCisgICAgICAgKiAgIHRoZSBwcmV2aW91c2x5IHNtYWxsZXN0IGVsZW1lbnQncyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHN0YWJsZS4KKyAgICAgICAqLworICAgICAgLy8gRG8gbm90IHBhc3MgYSBjb25zdCByZWZlcmVuY2Ugc2luY2UgX19rZXkgd2lsbCBiZSB1c2VkIGFzCisgICAgICAvLyBsb2NhbCB2YXJpYWJsZS4KKyAgICAgIHZvaWQKKyAgICAgIF9fZGVsZXRlX21pbl9pbnNlcnQoX1RwIF9fa2V5LCBib29sIF9fc3VwKQorICAgICAgeworICAgICAgICB1c2luZyBzdGQ6OnN3YXA7CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworCS8vIG5vIGR1bW15IHNlcXVlbmNlIGNhbiBldmVyIGJlIGF0IHRoZSB0b3AhCisJX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9NX2xvc2Vyc1swXS5fTV9zb3VyY2UgIT0gLTEpOworI2VuZGlmCisKKwlpbnQgX19zb3VyY2UgPSBfTV9sb3NlcnNbMF0uX01fc291cmNlOworCWZvciAodW5zaWduZWQgaW50IF9fcG9zID0gKF9NX2sgKyBfX3NvdXJjZSkgLyAyOyBfX3BvcyA+IDA7CisJICAgICBfX3BvcyAvPSAyKQorCSAgeworCSAgICAvLyBUaGUgc21hbGxlciBvbmUgZ2V0cyBwcm9tb3RlZCwgdGllcyBhcmUgYnJva2VuIGJ5IF9NX3NvdXJjZS4KKwkgICAgaWYgKChfX3N1cCAmJiAoIV9NX2xvc2Vyc1tfX3Bvc10uX01fc3VwCisJCQkgICB8fCBfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSA8IF9fc291cmNlKSkKKwkJfHwgKCFfX3N1cCAmJiAhX01fbG9zZXJzW19fcG9zXS5fTV9zdXAKKwkJICAgICYmICgoX01fY29tcChfTV9sb3NlcnNbX19wb3NdLl9NX2tleSwgX19rZXkpKQorCQkJfHwgKCFfTV9jb21wKF9fa2V5LCBfTV9sb3NlcnNbX19wb3NdLl9NX2tleSkKKwkJCSAgICAmJiBfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSA8IF9fc291cmNlKSkpKQorCSAgICAgIHsKKwkJLy8gVGhlIG90aGVyIG9uZSBpcyBzbWFsbGVyLgorCQlzdGQ6OnN3YXAoX01fbG9zZXJzW19fcG9zXS5fTV9zdXAsIF9fc3VwKTsKKwkJc3RkOjpzd2FwKF9NX2xvc2Vyc1tfX3Bvc10uX01fc291cmNlLCBfX3NvdXJjZSk7CisJCXN3YXAoX01fbG9zZXJzW19fcG9zXS5fTV9rZXksIF9fa2V5KTsKKwkgICAgICB9CisJICB9CisKKwlfTV9sb3NlcnNbMF0uX01fc3VwID0gX19zdXA7CisJX01fbG9zZXJzWzBdLl9NX3NvdXJjZSA9IF9fc291cmNlOworCV9NX2xvc2Vyc1swXS5fTV9rZXkgPSBfX2tleTsKKyAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogQGJyaWVmIFVuc3RhYmxlIF9Mb3NlclRyZWUgdmFyaWFudC4KKyAgICAgKgorICAgICAqIFN0YWJpbGl0eSAobm9uLXN0YWJsZSBoZXJlKSBpcyBzZWxlY3RlZCB3aXRoIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24uCisgICAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgY2xhc3MgX0xvc2VyVHJlZTwvKiBfX3N0YWJsZSA9PSAqL2ZhbHNlLCBfVHAsIF9Db21wYXJlPgorICAgIDogcHVibGljIF9Mb3NlclRyZWVCYXNlPF9UcCwgX0NvbXBhcmU+CisgICAgeworICAgICAgdHlwZWRlZiBfTG9zZXJUcmVlQmFzZTxfVHAsIF9Db21wYXJlPiBfQmFzZTsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9sb2dfazsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9rOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2NvbXA7CisgICAgICB1c2luZyBfQmFzZTo6X01fbG9zZXJzOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2ZpcnN0X2luc2VydDsKKworICAgIHB1YmxpYzoKKyAgICAgIF9Mb3NlclRyZWUodW5zaWduZWQgaW50IF9faywgX0NvbXBhcmUgX19jb21wKQorICAgICAgOiBfQmFzZTo6X0xvc2VyVHJlZUJhc2UoX19rLCBfX2NvbXApCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBDb21wdXRlcyB0aGUgd2lubmVyIG9mIHRoZSBjb21wZXRpdGlvbiBhdCBwb3NpdGlvbiAiX19yb290Ii4KKyAgICAgICAqCisgICAgICAgKiBDYWxsZWQgcmVjdXJzaXZlbHkgKHN0YXJ0aW5nIGF0IDApIHRvIGJ1aWxkIHRoZSBpbml0aWFsIHRyZWUuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcm9vdCBfX2luZGV4IG9mIHRoZSAiZ2FtZSIgdG8gc3RhcnQuCisgICAgICAgKi8KKyAgICAgIHVuc2lnbmVkIGludAorICAgICAgX19pbml0X3dpbm5lcih1bnNpZ25lZCBpbnQgX19yb290KQorICAgICAgeworCWlmIChfX3Jvb3QgPj0gX01faykKKwkgIHJldHVybiBfX3Jvb3Q7CisJZWxzZQorCSAgeworCSAgICB1bnNpZ25lZCBpbnQgX19sZWZ0ID0gX19pbml0X3dpbm5lcigyICogX19yb290KTsKKwkgICAgdW5zaWduZWQgaW50IF9fcmlnaHQgPSBfX2luaXRfd2lubmVyKDIgKiBfX3Jvb3QgKyAxKTsKKwkgICAgaWYgKF9NX2xvc2Vyc1tfX3JpZ2h0XS5fTV9zdXAKKwkJfHwgKCFfTV9sb3NlcnNbX19sZWZ0XS5fTV9zdXAKKwkJICAgICYmICFfTV9jb21wKF9NX2xvc2Vyc1tfX3JpZ2h0XS5fTV9rZXksCisJCQkJX01fbG9zZXJzW19fbGVmdF0uX01fa2V5KSkpCisJICAgICAgeworCQkvLyBMZWZ0IG9uZSBpcyBsZXNzIG9yIGVxdWFsLgorCQlfTV9sb3NlcnNbX19yb290XSA9IF9NX2xvc2Vyc1tfX3JpZ2h0XTsKKwkJcmV0dXJuIF9fbGVmdDsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCS8vIFJpZ2h0IG9uZSBpcyBsZXNzLgorCQlfTV9sb3NlcnNbX19yb290XSA9IF9NX2xvc2Vyc1tfX2xlZnRdOworCQlyZXR1cm4gX19yaWdodDsKKwkgICAgICB9CisJICB9CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9faW5pdCgpCisgICAgICB7IF9NX2xvc2Vyc1swXSA9IF9NX2xvc2Vyc1tfX2luaXRfd2lubmVyKDEpXTsgfQorCisgICAgICAvKioKKyAgICAgICAqIERlbGV0ZSB0aGUgX01fa2V5IHNtYWxsZXN0IGVsZW1lbnQgYW5kIGluc2VydCB0aGUgZWxlbWVudCBfX2tleQorICAgICAgICogaW5zdGVhZC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19rZXkgdGhlIF9NX2tleSB0byBpbnNlcnQKKyAgICAgICAqIEBwYXJhbSBfX3N1cCB0cnVlIGlmZiBfX2tleSBpcyBhbiBleHBsaWNpdGx5IG1hcmtlZCBzdXByZW11bQorICAgICAgICovCisgICAgICAvLyBEbyBub3QgcGFzcyBhIGNvbnN0IHJlZmVyZW5jZSBzaW5jZSBfX2tleSB3aWxsIGJlIHVzZWQgYXMgbG9jYWwKKyAgICAgIC8vIHZhcmlhYmxlLgorICAgICAgdm9pZAorICAgICAgX19kZWxldGVfbWluX2luc2VydChfVHAgX19rZXksIGJvb2wgX19zdXApCisgICAgICB7CisgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJLy8gbm8gZHVtbXkgc2VxdWVuY2UgY2FuIGV2ZXIgYmUgYXQgdGhlIHRvcCEKKwlfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzWzBdLl9NX3NvdXJjZSAhPSAtMSk7CisjZW5kaWYKKworCWludCBfX3NvdXJjZSA9IF9NX2xvc2Vyc1swXS5fTV9zb3VyY2U7CisJZm9yICh1bnNpZ25lZCBpbnQgX19wb3MgPSAoX01fayArIF9fc291cmNlKSAvIDI7IF9fcG9zID4gMDsKKwkgICAgIF9fcG9zIC89IDIpCisJICB7CisJICAgIC8vIFRoZSBzbWFsbGVyIG9uZSBnZXRzIHByb21vdGVkLgorCSAgICBpZiAoX19zdXAgfHwgKCFfTV9sb3NlcnNbX19wb3NdLl9NX3N1cAorCQkJICAmJiBfTV9jb21wKF9NX2xvc2Vyc1tfX3Bvc10uX01fa2V5LCBfX2tleSkpKQorCSAgICAgIHsKKwkJLy8gVGhlIG90aGVyIG9uZSBpcyBzbWFsbGVyLgorCQlzdGQ6OnN3YXAoX01fbG9zZXJzW19fcG9zXS5fTV9zdXAsIF9fc3VwKTsKKwkJc3RkOjpzd2FwKF9NX2xvc2Vyc1tfX3Bvc10uX01fc291cmNlLCBfX3NvdXJjZSk7CisJCXN3YXAoX01fbG9zZXJzW19fcG9zXS5fTV9rZXksIF9fa2V5KTsKKwkgICAgICB9CisJICB9CisKKwlfTV9sb3NlcnNbMF0uX01fc3VwID0gX19zdXA7CisJX01fbG9zZXJzWzBdLl9NX3NvdXJjZSA9IF9fc291cmNlOworCV9NX2xvc2Vyc1swXS5fTV9rZXkgPSBfX2tleTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgQmFzZSBjbGFzcyBvZiBfTG9zZXIgVHJlZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBwb2ludGVycy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgY2xhc3MgX0xvc2VyVHJlZVBvaW50ZXJCYXNlCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIC8qKiBAYnJpZWYgSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgX0xvc2VyVHJlZSBfX2VsZW1lbnRzLiAqLworICAgICAgc3RydWN0IF9Mb3NlcgorICAgICAgeworCWJvb2wgX01fc3VwOworCWludCBfTV9zb3VyY2U7CisJY29uc3QgX1RwKiBfTV9rZXlwOworICAgICAgfTsKKworICAgICAgdW5zaWduZWQgaW50IF9NX2lrLCBfTV9rLCBfTV9vZmZzZXQ7CisgICAgICBfTG9zZXIqIF9NX2xvc2VyczsKKyAgICAgIF9Db21wYXJlIF9NX2NvbXA7CisKKyAgICBwdWJsaWM6CisgICAgICBfTG9zZXJUcmVlUG9pbnRlckJhc2UodW5zaWduZWQgaW50IF9faywKKwkJCSAgICBfQ29tcGFyZSBfX2NvbXAgPSBzdGQ6Omxlc3M8X1RwPigpKQorICAgICAgOiBfTV9jb21wKF9fY29tcCkKKyAgICAgIHsKKwlfTV9payA9IF9fazsKKworCS8vIE5leHQgZ3JlYXRlciBwb3dlciBvZiAyLgorCV9NX2sgPSAxIDw8IChfX3JkX2xvZzIoX01faWsgLSAxKSArIDEpOworCV9NX29mZnNldCA9IF9NX2s7CisJX01fbG9zZXJzID0gbmV3IF9Mb3NlcltfTV9rICogMl07CisJZm9yICh1bnNpZ25lZCBpbnQgX19pID0gX01faWsgLSAxOyBfX2kgPCBfTV9rOyBfX2krKykKKwkgIF9NX2xvc2Vyc1tfX2kgKyBfTV9rXS5fTV9zdXAgPSB0cnVlOworICAgICAgfQorCisgICAgICB+X0xvc2VyVHJlZVBvaW50ZXJCYXNlKCkKKyAgICAgIHsgZGVsZXRlW10gX01fbG9zZXJzOyB9CisKKyAgICAgIGludCBfX2dldF9taW5fc291cmNlKCkKKyAgICAgIHsgcmV0dXJuIF9NX2xvc2Vyc1swXS5fTV9zb3VyY2U7IH0KKworICAgICAgdm9pZCBfX2luc2VydF9zdGFydChjb25zdCBfVHAmIF9fa2V5LCBpbnQgX19zb3VyY2UsIGJvb2wgX19zdXApCisgICAgICB7CisJdW5zaWduZWQgaW50IF9fcG9zID0gX01fayArIF9fc291cmNlOworCisJX01fbG9zZXJzW19fcG9zXS5fTV9zdXAgPSBfX3N1cDsKKwlfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSA9IF9fc291cmNlOworCV9NX2xvc2Vyc1tfX3Bvc10uX01fa2V5cCA9ICZfX2tleTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgU3RhYmxlIF9Mb3NlclRyZWUgaW1wbGVtZW50YXRpb24uCisgICAqCisgICAqIFRoZSB1bnN0YWJsZSB2YXJpYW50IGlzIGltcGxlbWVudGVkIHVzaW5nIHBhcnRpYWwgaW5zdGFudGlhdGlvbiBiZWxvdy4KKyAgICovCisgIHRlbXBsYXRlPGJvb2wgX19zdGFibGUvKiBkZWZhdWx0ID09IHRydWUgKi8sIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgY2xhc3MgX0xvc2VyVHJlZVBvaW50ZXIKKyAgICA6IHB1YmxpYyBfTG9zZXJUcmVlUG9pbnRlckJhc2U8X1RwLCBfQ29tcGFyZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Mb3NlclRyZWVQb2ludGVyQmFzZTxfVHAsIF9Db21wYXJlPiBfQmFzZTsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9rOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2NvbXA7CisgICAgICB1c2luZyBfQmFzZTo6X01fbG9zZXJzOworCisgICAgcHVibGljOgorICAgICAgX0xvc2VyVHJlZVBvaW50ZXIodW5zaWduZWQgaW50IF9faywgX0NvbXBhcmUgX19jb21wID0gc3RkOjpsZXNzPF9UcD4oKSkKKyAgICAgIDogX0Jhc2U6Ol9Mb3NlclRyZWVQb2ludGVyQmFzZShfX2ssIF9fY29tcCkKKyAgICAgIHsgfQorCisgICAgICB1bnNpZ25lZCBpbnQKKyAgICAgIF9faW5pdF93aW5uZXIodW5zaWduZWQgaW50IF9fcm9vdCkKKyAgICAgIHsKKwlpZiAoX19yb290ID49IF9NX2spCisJICByZXR1cm4gX19yb290OworCWVsc2UKKwkgIHsKKwkgICAgdW5zaWduZWQgaW50IF9fbGVmdCA9IF9faW5pdF93aW5uZXIoMiAqIF9fcm9vdCk7CisJICAgIHVuc2lnbmVkIGludCBfX3JpZ2h0ID0gX19pbml0X3dpbm5lcigyICogX19yb290ICsgMSk7CisJICAgIGlmIChfTV9sb3NlcnNbX19yaWdodF0uX01fc3VwCisJCXx8ICghX01fbG9zZXJzW19fbGVmdF0uX01fc3VwCisJCSAgICAmJiAhX01fY29tcCgqX01fbG9zZXJzW19fcmlnaHRdLl9NX2tleXAsCisJCQkJKl9NX2xvc2Vyc1tfX2xlZnRdLl9NX2tleXApKSkKKwkgICAgICB7CisJCS8vIExlZnQgb25lIGlzIGxlc3Mgb3IgZXF1YWwuCisJCV9NX2xvc2Vyc1tfX3Jvb3RdID0gX01fbG9zZXJzW19fcmlnaHRdOworCQlyZXR1cm4gX19sZWZ0OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJLy8gUmlnaHQgb25lIGlzIGxlc3MuCisJCV9NX2xvc2Vyc1tfX3Jvb3RdID0gX01fbG9zZXJzW19fbGVmdF07CisJCXJldHVybiBfX3JpZ2h0OworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgICAgdm9pZCBfX2luaXQoKQorICAgICAgeyBfTV9sb3NlcnNbMF0gPSBfTV9sb3NlcnNbX19pbml0X3dpbm5lcigxKV07IH0KKworICAgICAgdm9pZCBfX2RlbGV0ZV9taW5faW5zZXJ0KGNvbnN0IF9UcCYgX19rZXksIGJvb2wgX19zdXApCisgICAgICB7CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworCS8vIG5vIGR1bW15IHNlcXVlbmNlIGNhbiBldmVyIGJlIGF0IHRoZSB0b3AhCisJX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9NX2xvc2Vyc1swXS5fTV9zb3VyY2UgIT0gLTEpOworI2VuZGlmCisKKwljb25zdCBfVHAqIF9fa2V5cCA9ICZfX2tleTsKKwlpbnQgX19zb3VyY2UgPSBfTV9sb3NlcnNbMF0uX01fc291cmNlOworCWZvciAodW5zaWduZWQgaW50IF9fcG9zID0gKF9NX2sgKyBfX3NvdXJjZSkgLyAyOyBfX3BvcyA+IDA7CisJICAgICBfX3BvcyAvPSAyKQorCSAgeworCSAgICAvLyBUaGUgc21hbGxlciBvbmUgZ2V0cyBwcm9tb3RlZCwgdGllcyBhcmUgYnJva2VuIGJ5IF9fc291cmNlLgorCSAgICBpZiAoKF9fc3VwICYmICghX01fbG9zZXJzW19fcG9zXS5fTV9zdXAKKwkJCSAgIHx8IF9NX2xvc2Vyc1tfX3Bvc10uX01fc291cmNlIDwgX19zb3VyY2UpKQorCQl8fCAoIV9fc3VwICYmICFfTV9sb3NlcnNbX19wb3NdLl9NX3N1cCAmJgorCQkgICAgKChfTV9jb21wKCpfTV9sb3NlcnNbX19wb3NdLl9NX2tleXAsICpfX2tleXApKQorCQkgICAgIHx8ICghX01fY29tcCgqX19rZXlwLCAqX01fbG9zZXJzW19fcG9zXS5fTV9rZXlwKQorCQkJICYmIF9NX2xvc2Vyc1tfX3Bvc10uX01fc291cmNlIDwgX19zb3VyY2UpKSkpCisJICAgICAgeworCQkvLyBUaGUgb3RoZXIgb25lIGlzIHNtYWxsZXIuCisJCXN0ZDo6c3dhcChfTV9sb3NlcnNbX19wb3NdLl9NX3N1cCwgX19zdXApOworCQlzdGQ6OnN3YXAoX01fbG9zZXJzW19fcG9zXS5fTV9zb3VyY2UsIF9fc291cmNlKTsKKwkJc3RkOjpzd2FwKF9NX2xvc2Vyc1tfX3Bvc10uX01fa2V5cCwgX19rZXlwKTsKKwkgICAgICB9CisJICB9CisKKwlfTV9sb3NlcnNbMF0uX01fc3VwID0gX19zdXA7CisJX01fbG9zZXJzWzBdLl9NX3NvdXJjZSA9IF9fc291cmNlOworCV9NX2xvc2Vyc1swXS5fTV9rZXlwID0gX19rZXlwOworICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBVbnN0YWJsZSBfTG9zZXJUcmVlIGltcGxlbWVudGF0aW9uLgorICAgKgorICAgKiBUaGUgc3RhYmxlIHZhcmlhbnQgaXMgYWJvdmUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNsYXNzIF9Mb3NlclRyZWVQb2ludGVyPC8qIF9fc3RhYmxlID09ICovZmFsc2UsIF9UcCwgX0NvbXBhcmU+CisgICAgOiBwdWJsaWMgX0xvc2VyVHJlZVBvaW50ZXJCYXNlPF9UcCwgX0NvbXBhcmU+CisgICAgeworICAgICAgdHlwZWRlZiBfTG9zZXJUcmVlUG9pbnRlckJhc2U8X1RwLCBfQ29tcGFyZT4gX0Jhc2U7CisgICAgICB1c2luZyBfQmFzZTo6X01fazsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2xvc2VyczsKKworICAgIHB1YmxpYzoKKyAgICAgIF9Mb3NlclRyZWVQb2ludGVyKHVuc2lnbmVkIGludCBfX2ssIF9Db21wYXJlIF9fY29tcCA9IHN0ZDo6bGVzczxfVHA+KCkpCisgICAgICA6IF9CYXNlOjpfTG9zZXJUcmVlUG9pbnRlckJhc2UoX19rLCBfX2NvbXApCisgICAgICB7IH0KKworICAgICAgdW5zaWduZWQgaW50CisgICAgICBfX2luaXRfd2lubmVyKHVuc2lnbmVkIGludCBfX3Jvb3QpCisgICAgICB7CisJaWYgKF9fcm9vdCA+PSBfTV9rKQorCSAgcmV0dXJuIF9fcm9vdDsKKwllbHNlCisJICB7CisJICAgIHVuc2lnbmVkIGludCBfX2xlZnQgPSBfX2luaXRfd2lubmVyKDIgKiBfX3Jvb3QpOworCSAgICB1bnNpZ25lZCBpbnQgX19yaWdodCA9IF9faW5pdF93aW5uZXIoMiAqIF9fcm9vdCArIDEpOworCSAgICBpZiAoX01fbG9zZXJzW19fcmlnaHRdLl9NX3N1cAorICAgICAgICAJfHwgKCFfTV9sb3NlcnNbX19sZWZ0XS5fTV9zdXAKKwkJICAgICYmICFfTV9jb21wKCpfTV9sb3NlcnNbX19yaWdodF0uX01fa2V5cCwKKwkJCQkqX01fbG9zZXJzW19fbGVmdF0uX01fa2V5cCkpKQorCSAgICAgIHsKKwkJLy8gTGVmdCBvbmUgaXMgbGVzcyBvciBlcXVhbC4KKwkJX01fbG9zZXJzW19fcm9vdF0gPSBfTV9sb3NlcnNbX19yaWdodF07CisJCXJldHVybiBfX2xlZnQ7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQkvLyBSaWdodCBvbmUgaXMgbGVzcy4KKwkJX01fbG9zZXJzW19fcm9vdF0gPSBfTV9sb3NlcnNbX19sZWZ0XTsKKwkJcmV0dXJuIF9fcmlnaHQ7CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisgICAgICB2b2lkIF9faW5pdCgpCisgICAgICB7IF9NX2xvc2Vyc1swXSA9IF9NX2xvc2Vyc1tfX2luaXRfd2lubmVyKDEpXTsgfQorCisgICAgICB2b2lkIF9fZGVsZXRlX21pbl9pbnNlcnQoY29uc3QgX1RwJiBfX2tleSwgYm9vbCBfX3N1cCkKKyAgICAgIHsKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJLy8gbm8gZHVtbXkgc2VxdWVuY2UgY2FuIGV2ZXIgYmUgYXQgdGhlIHRvcCEKKwlfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzWzBdLl9NX3NvdXJjZSAhPSAtMSk7CisjZW5kaWYKKworCWNvbnN0IF9UcCogX19rZXlwID0gJl9fa2V5OworCWludCBfX3NvdXJjZSA9IF9NX2xvc2Vyc1swXS5fTV9zb3VyY2U7CisJZm9yICh1bnNpZ25lZCBpbnQgX19wb3MgPSAoX01fayArIF9fc291cmNlKSAvIDI7IF9fcG9zID4gMDsKKwkgICAgIF9fcG9zIC89IDIpCisJICB7CisJICAgIC8vIFRoZSBzbWFsbGVyIG9uZSBnZXRzIHByb21vdGVkLgorCSAgICBpZiAoX19zdXAgfHwgKCFfTV9sb3NlcnNbX19wb3NdLl9NX3N1cAorCQkJICAmJiBfTV9jb21wKCpfTV9sb3NlcnNbX19wb3NdLl9NX2tleXAsICpfX2tleXApKSkKKwkgICAgICB7CisJCS8vIFRoZSBvdGhlciBvbmUgaXMgc21hbGxlci4KKwkJc3RkOjpzd2FwKF9NX2xvc2Vyc1tfX3Bvc10uX01fc3VwLCBfX3N1cCk7CisJCXN0ZDo6c3dhcChfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSwgX19zb3VyY2UpOworCQlzdGQ6OnN3YXAoX01fbG9zZXJzW19fcG9zXS5fTV9rZXlwLCBfX2tleXApOworCSAgICAgIH0KKwkgIH0KKworCV9NX2xvc2Vyc1swXS5fTV9zdXAgPSBfX3N1cDsKKwlfTV9sb3NlcnNbMF0uX01fc291cmNlID0gX19zb3VyY2U7CisJX01fbG9zZXJzWzBdLl9NX2tleXAgPSBfX2tleXA7CisgICAgICB9CisgICAgfTsKKworICAvKiogQGJyaWVmIEJhc2UgY2xhc3MgZm9yIHVuZ3VhcmRlZCBfTG9zZXJUcmVlIGltcGxlbWVudGF0aW9uLgorICAgKiAKKyAgICogVGhlIHdob2xlIGVsZW1lbnQgaXMgY29waWVkIGludG8gdGhlIHRyZWUgc3RydWN0dXJlLgorICAgKgorICAgKiBObyBndWFyZGluZyBpcyBkb25lLCB0aGVyZWZvcmUgbm90IGEgc2luZ2xlIGlucHV0IHNlcXVlbmNlIG11c3QKKyAgICogcnVuIGVtcHR5LiAgVW51c2VkIF9fc2VxdWVuY2UgaGVhZHMgYXJlIG1hcmtlZCB3aXRoIGEgc2VudGluZWwgd2hpY2gKKyAgICogaXMgJmd0OyBhbGwgZWxlbWVudHMgdGhhdCBhcmUgdG8gYmUgbWVyZ2VkLgorICAgKgorICAgKiBUaGlzIGlzIGEgdmVyeSBmYXN0IHZhcmlhbnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNsYXNzIF9Mb3NlclRyZWVVbmd1YXJkZWRCYXNlCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHN0cnVjdCBfTG9zZXIKKyAgICAgIHsKKwlpbnQgX01fc291cmNlOworCV9UcCBfTV9rZXk7CisgICAgICB9OworCisgICAgICB1bnNpZ25lZCBpbnQgX01faWssIF9NX2ssIF9NX29mZnNldDsKKyAgICAgIF9Mb3NlciogX01fbG9zZXJzOworICAgICAgX0NvbXBhcmUgX01fY29tcDsKKworICAgIHB1YmxpYzoKKyAgICAgIF9Mb3NlclRyZWVVbmd1YXJkZWRCYXNlKHVuc2lnbmVkIGludCBfX2ssIGNvbnN0IF9UcCYgX19zZW50aW5lbCwKKwkJCSAgICAgIF9Db21wYXJlIF9fY29tcCA9IHN0ZDo6bGVzczxfVHA+KCkpCisgICAgICA6IF9NX2NvbXAoX19jb21wKQorICAgICAgeworCV9NX2lrID0gX19rOworCisJLy8gTmV4dCBncmVhdGVyIHBvd2VyIG9mIDIuCisJX01fayA9IDEgPDwgKF9fcmRfbG9nMihfTV9payAtIDEpICsgMSk7CisJX01fb2Zmc2V0ID0gX01fazsKKwkvLyBBdm9pZCBkZWZhdWx0LWNvbnN0cnVjdGluZyBfTV9sb3NlcnNbXS5fTV9rZXkKKwlfTV9sb3NlcnMgPSBzdGF0aWNfY2FzdDxfTG9zZXIqPig6Om9wZXJhdG9yIG5ldygyICogX01faworCQkJCQkJCSogc2l6ZW9mKF9Mb3NlcikpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAwOyBfX2kgPCBfTV9rOyArK19faSkKKyAgICAgICAgICB7CisJICAgIDo6bmV3KCYoX01fbG9zZXJzW19faV0uX01fa2V5KSkgX1RwKF9fc2VudGluZWwpOworCSAgICBfTV9sb3NlcnNbX19pXS5fTV9zb3VyY2UgPSAtMTsKKwkgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gX01fayArIF9NX2lrIC0gMTsgX19pIDwgKDIgKiBfTV9rKTsgKytfX2kpCisgICAgICAgICAgeworCSAgICA6Om5ldygmKF9NX2xvc2Vyc1tfX2ldLl9NX2tleSkpIF9UcChfX3NlbnRpbmVsKTsKKwkgICAgX01fbG9zZXJzW19faV0uX01fc291cmNlID0gLTE7CisJICB9CisgICAgICB9CisKKyAgICAgIH5fTG9zZXJUcmVlVW5ndWFyZGVkQmFzZSgpCisgICAgICB7CisJZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMDsgX19pIDwgKDIgKiBfTV9rKTsgKytfX2kpCisJICBfTV9sb3NlcnNbX19pXS5+X0xvc2VyKCk7CisJOjpvcGVyYXRvciBkZWxldGUoX01fbG9zZXJzKTsKKyAgICAgIH0KKworICAgICAgaW50CisgICAgICBfX2dldF9taW5fc291cmNlKCkKKyAgICAgIHsKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJLy8gbm8gZHVtbXkgc2VxdWVuY2UgY2FuIGV2ZXIgYmUgYXQgdGhlIHRvcCEKKwlfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzWzBdLl9NX3NvdXJjZSAhPSAtMSk7CisjZW5kaWYKKwlyZXR1cm4gX01fbG9zZXJzWzBdLl9NX3NvdXJjZTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX19pbnNlcnRfc3RhcnQoY29uc3QgX1RwJiBfX2tleSwgaW50IF9fc291cmNlLCBib29sKQorICAgICAgeworCXVuc2lnbmVkIGludCBfX3BvcyA9IF9NX2sgKyBfX3NvdXJjZTsKKworCTo6bmV3KCYoX01fbG9zZXJzW19fcG9zXS5fTV9rZXkpKSBfVHAoX19rZXkpOworCV9NX2xvc2Vyc1tfX3Bvc10uX01fc291cmNlID0gX19zb3VyY2U7CisgICAgICB9CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFN0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB1bmd1YXJkZWQgX0xvc2VyVHJlZS4KKyAgICoKKyAgICogVW5zdGFibGUgdmFyaWFudCBpcyBzZWxlY3RlZCBiZWxvdyB3aXRoIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24uCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9fc3RhYmxlLyogZGVmYXVsdCA9PSB0cnVlICovLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNsYXNzIF9Mb3NlclRyZWVVbmd1YXJkZWQKKyAgICA6IHB1YmxpYyBfTG9zZXJUcmVlVW5ndWFyZGVkQmFzZTxfVHAsIF9Db21wYXJlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0xvc2VyVHJlZVVuZ3VhcmRlZEJhc2U8X1RwLCBfQ29tcGFyZT4gX0Jhc2U7CisgICAgICB1c2luZyBfQmFzZTo6X01fazsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2xvc2VyczsKKworICBwdWJsaWM6CisgICAgICBfTG9zZXJUcmVlVW5ndWFyZGVkKHVuc2lnbmVkIGludCBfX2ssIGNvbnN0IF9UcCYgX19zZW50aW5lbCwKKwkJCSAgX0NvbXBhcmUgX19jb21wID0gc3RkOjpsZXNzPF9UcD4oKSkKKyAgICAgIDogX0Jhc2U6Ol9Mb3NlclRyZWVVbmd1YXJkZWRCYXNlKF9faywgX19zZW50aW5lbCwgX19jb21wKQorICAgICAgeyB9CisKKyAgICAgIHVuc2lnbmVkIGludAorICAgICAgX19pbml0X3dpbm5lcih1bnNpZ25lZCBpbnQgX19yb290KQorICAgICAgeworCWlmIChfX3Jvb3QgPj0gX01faykKKwkgIHJldHVybiBfX3Jvb3Q7CisJZWxzZQorCSAgeworCSAgICB1bnNpZ25lZCBpbnQgX19sZWZ0ID0gX19pbml0X3dpbm5lcigyICogX19yb290KTsKKwkgICAgdW5zaWduZWQgaW50IF9fcmlnaHQgPSBfX2luaXRfd2lubmVyKDIgKiBfX3Jvb3QgKyAxKTsKKwkgICAgaWYgKCFfTV9jb21wKF9NX2xvc2Vyc1tfX3JpZ2h0XS5fTV9rZXksCisJCQkgX01fbG9zZXJzW19fbGVmdF0uX01fa2V5KSkKKwkgICAgICB7CisJCS8vIExlZnQgb25lIGlzIGxlc3Mgb3IgZXF1YWwuCisJCV9NX2xvc2Vyc1tfX3Jvb3RdID0gX01fbG9zZXJzW19fcmlnaHRdOworCQlyZXR1cm4gX19sZWZ0OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJLy8gUmlnaHQgb25lIGlzIGxlc3MuCisJCV9NX2xvc2Vyc1tfX3Jvb3RdID0gX01fbG9zZXJzW19fbGVmdF07CisJCXJldHVybiBfX3JpZ2h0OworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX19pbml0KCkKKyAgICAgIHsKKwlfTV9sb3NlcnNbMF0gPSBfTV9sb3NlcnNbX19pbml0X3dpbm5lcigxKV07CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJLy8gbm8gZHVtbXkgc2VxdWVuY2UgY2FuIGV2ZXIgYmUgYXQgdGhlIHRvcCBhdCB0aGUgYmVnaW5uaW5nCisJLy8gKDAgc2VxdWVuY2VzISkKKwlfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzWzBdLl9NX3NvdXJjZSAhPSAtMSk7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgLy8gRG8gbm90IHBhc3MgYSBjb25zdCByZWZlcmVuY2Ugc2luY2UgX19rZXkgd2lsbCBiZSB1c2VkIGFzCisgICAgICAvLyBsb2NhbCB2YXJpYWJsZS4KKyAgICAgIHZvaWQKKyAgICAgIF9fZGVsZXRlX21pbl9pbnNlcnQoX1RwIF9fa2V5LCBib29sKQorICAgICAgeworICAgICAgICB1c2luZyBzdGQ6OnN3YXA7CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworCS8vIG5vIGR1bW15IHNlcXVlbmNlIGNhbiBldmVyIGJlIGF0IHRoZSB0b3AhCisJX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9NX2xvc2Vyc1swXS5fTV9zb3VyY2UgIT0gLTEpOworI2VuZGlmCisKKwlpbnQgX19zb3VyY2UgPSBfTV9sb3NlcnNbMF0uX01fc291cmNlOworCWZvciAodW5zaWduZWQgaW50IF9fcG9zID0gKF9NX2sgKyBfX3NvdXJjZSkgLyAyOyBfX3BvcyA+IDA7CisJICAgICBfX3BvcyAvPSAyKQorCSAgeworCSAgICAvLyBUaGUgc21hbGxlciBvbmUgZ2V0cyBwcm9tb3RlZCwgdGllcyBhcmUgYnJva2VuIGJ5IF9NX3NvdXJjZS4KKwkgICAgaWYgKF9NX2NvbXAoX01fbG9zZXJzW19fcG9zXS5fTV9rZXksIF9fa2V5KQorICAgICAgICAJfHwgKCFfTV9jb21wKF9fa2V5LCBfTV9sb3NlcnNbX19wb3NdLl9NX2tleSkKKyAgICAgICAgICAgICAgICAgICAgJiYgX01fbG9zZXJzW19fcG9zXS5fTV9zb3VyY2UgPCBfX3NvdXJjZSkpCisJICAgICAgeworCQkvLyBUaGUgb3RoZXIgb25lIGlzIHNtYWxsZXIuCisJCXN0ZDo6c3dhcChfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSwgX19zb3VyY2UpOworCQlzd2FwKF9NX2xvc2Vyc1tfX3Bvc10uX01fa2V5LCBfX2tleSk7CisJICAgICAgfQorCSAgfQorCisJX01fbG9zZXJzWzBdLl9NX3NvdXJjZSA9IF9fc291cmNlOworCV9NX2xvc2Vyc1swXS5fTV9rZXkgPSBfX2tleTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgTm9uLVN0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB1bmd1YXJkZWQgX0xvc2VyVHJlZS4KKyAgICoKKyAgICogU3RhYmxlIGltcGxlbWVudGF0aW9uIGlzIGFib3ZlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBjbGFzcyBfTG9zZXJUcmVlVW5ndWFyZGVkPC8qIF9fc3RhYmxlID09ICovZmFsc2UsIF9UcCwgX0NvbXBhcmU+CisgICAgOiBwdWJsaWMgX0xvc2VyVHJlZVVuZ3VhcmRlZEJhc2U8X1RwLCBfQ29tcGFyZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9Mb3NlclRyZWVVbmd1YXJkZWRCYXNlPF9UcCwgX0NvbXBhcmU+IF9CYXNlOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2s7CisgICAgICB1c2luZyBfQmFzZTo6X01fY29tcDsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9sb3NlcnM7CisKKyAgICBwdWJsaWM6CisgICAgICBfTG9zZXJUcmVlVW5ndWFyZGVkKHVuc2lnbmVkIGludCBfX2ssIGNvbnN0IF9UcCYgX19zZW50aW5lbCwKKwkJCSAgX0NvbXBhcmUgX19jb21wID0gc3RkOjpsZXNzPF9UcD4oKSkKKyAgICAgIDogX0Jhc2U6Ol9Mb3NlclRyZWVVbmd1YXJkZWRCYXNlKF9faywgX19zZW50aW5lbCwgX19jb21wKQorICAgICAgeyB9CisKKyAgICAgIHVuc2lnbmVkIGludAorICAgICAgX19pbml0X3dpbm5lcih1bnNpZ25lZCBpbnQgX19yb290KQorICAgICAgeworCWlmIChfX3Jvb3QgPj0gX01faykKKwkgIHJldHVybiBfX3Jvb3Q7CisJZWxzZQorCSAgeworCSAgICB1bnNpZ25lZCBpbnQgX19sZWZ0ID0gX19pbml0X3dpbm5lcigyICogX19yb290KTsKKwkgICAgdW5zaWduZWQgaW50IF9fcmlnaHQgPSBfX2luaXRfd2lubmVyKDIgKiBfX3Jvb3QgKyAxKTsKKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKwkgICAgLy8gSWYgX19sZWZ0IG9uZSBpcyBzZW50aW5lbCB0aGVuIF9fcmlnaHQgb25lIG11c3QgYmUsIHRvby4KKwkgICAgaWYgKF9NX2xvc2Vyc1tfX2xlZnRdLl9NX3NvdXJjZSA9PSAtMSkKKwkgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzW19fcmlnaHRdLl9NX3NvdXJjZSA9PSAtMSk7CisjZW5kaWYKKworCSAgICBpZiAoIV9NX2NvbXAoX01fbG9zZXJzW19fcmlnaHRdLl9NX2tleSwKKwkJCSBfTV9sb3NlcnNbX19sZWZ0XS5fTV9rZXkpKQorCSAgICAgIHsKKwkJLy8gTGVmdCBvbmUgaXMgbGVzcyBvciBlcXVhbC4KKwkJX01fbG9zZXJzW19fcm9vdF0gPSBfTV9sb3NlcnNbX19yaWdodF07CisJCXJldHVybiBfX2xlZnQ7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQkvLyBSaWdodCBvbmUgaXMgbGVzcy4KKwkJX01fbG9zZXJzW19fcm9vdF0gPSBfTV9sb3NlcnNbX19sZWZ0XTsKKwkJcmV0dXJuIF9fcmlnaHQ7CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfX2luaXQoKQorICAgICAgeworCV9NX2xvc2Vyc1swXSA9IF9NX2xvc2Vyc1tfX2luaXRfd2lubmVyKDEpXTsKKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKwkvLyBubyBkdW1teSBzZXF1ZW5jZSBjYW4gZXZlciBiZSBhdCB0aGUgdG9wIGF0IHRoZSBiZWdpbm5pbmcKKwkvLyAoMCBzZXF1ZW5jZXMhKQorCV9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfTV9sb3NlcnNbMF0uX01fc291cmNlICE9IC0xKTsKKyNlbmRpZgorICAgICAgfQorCisgICAgICAvLyBEbyBub3QgcGFzcyBhIGNvbnN0IHJlZmVyZW5jZSBzaW5jZSBfX2tleSB3aWxsIGJlIHVzZWQgYXMKKyAgICAgIC8vIGxvY2FsIHZhcmlhYmxlLgorICAgICAgdm9pZAorICAgICAgX19kZWxldGVfbWluX2luc2VydChfVHAgX19rZXksIGJvb2wpCisgICAgICB7CisgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJLy8gbm8gZHVtbXkgc2VxdWVuY2UgY2FuIGV2ZXIgYmUgYXQgdGhlIHRvcCEKKwlfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzWzBdLl9NX3NvdXJjZSAhPSAtMSk7CisjZW5kaWYKKworCWludCBfX3NvdXJjZSA9IF9NX2xvc2Vyc1swXS5fTV9zb3VyY2U7CisJZm9yICh1bnNpZ25lZCBpbnQgX19wb3MgPSAoX01fayArIF9fc291cmNlKSAvIDI7IF9fcG9zID4gMDsKKwkgICAgIF9fcG9zIC89IDIpCisJICB7CisJICAgIC8vIFRoZSBzbWFsbGVyIG9uZSBnZXRzIHByb21vdGVkLgorCSAgICBpZiAoX01fY29tcChfTV9sb3NlcnNbX19wb3NdLl9NX2tleSwgX19rZXkpKQorCSAgICAgIHsKKwkJLy8gVGhlIG90aGVyIG9uZSBpcyBzbWFsbGVyLgorCQlzdGQ6OnN3YXAoX01fbG9zZXJzW19fcG9zXS5fTV9zb3VyY2UsIF9fc291cmNlKTsKKwkJc3dhcChfTV9sb3NlcnNbX19wb3NdLl9NX2tleSwgX19rZXkpOworCSAgICAgIH0KKwkgIH0KKworCV9NX2xvc2Vyc1swXS5fTV9zb3VyY2UgPSBfX3NvdXJjZTsKKwlfTV9sb3NlcnNbMF0uX01fa2V5ID0gX19rZXk7CisgICAgICB9CisgICAgfTsKKworICAvKiogQGJyaWVmIFVuZ3VhcmRlZCBsb3NlciB0cmVlLCBrZWVwaW5nIG9ubHkgcG9pbnRlcnMgdG8gdGhlCisgICogZWxlbWVudHMgaW4gdGhlIHRyZWUgc3RydWN0dXJlLgorICAqCisgICogIE5vIGd1YXJkaW5nIGlzIGRvbmUsIHRoZXJlZm9yZSBub3QgYSBzaW5nbGUgaW5wdXQgc2VxdWVuY2UgbXVzdAorICAqICBydW4gZW1wdHkuICBUaGlzIGlzIGEgdmVyeSBmYXN0IHZhcmlhbnQuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgY2xhc3MgX0xvc2VyVHJlZVBvaW50ZXJVbmd1YXJkZWRCYXNlCisgICAgeworICAgIHByb3RlY3RlZDoKKyAgICAgIHN0cnVjdCBfTG9zZXIKKyAgICAgIHsKKwlpbnQgX01fc291cmNlOworCWNvbnN0IF9UcCogX01fa2V5cDsKKyAgICAgIH07CisKKyAgICAgIHVuc2lnbmVkIGludCBfTV9paywgX01faywgX01fb2Zmc2V0OworICAgICAgX0xvc2VyKiBfTV9sb3NlcnM7CisgICAgICBfQ29tcGFyZSBfTV9jb21wOworCisgICAgcHVibGljOgorCisgICAgICBfTG9zZXJUcmVlUG9pbnRlclVuZ3VhcmRlZEJhc2UodW5zaWduZWQgaW50IF9faywgY29uc3QgX1RwJiBfX3NlbnRpbmVsLAorCQkJCSAgICAgX0NvbXBhcmUgX19jb21wID0gc3RkOjpsZXNzPF9UcD4oKSkKKyAgICAgIDogX01fY29tcChfX2NvbXApCisgICAgICB7CisJX01faWsgPSBfX2s7CisKKwkvLyBOZXh0IGdyZWF0ZXIgcG93ZXIgb2YgMi4KKwlfTV9rID0gMSA8PCAoX19yZF9sb2cyKF9NX2lrIC0gMSkgKyAxKTsKKwlfTV9vZmZzZXQgPSBfTV9rOworCS8vIEF2b2lkIGRlZmF1bHQtY29uc3RydWN0aW5nIF9NX2xvc2Vyc1tdLl9NX2tleQorCV9NX2xvc2VycyA9IG5ldyBfTG9zZXJbMiAqIF9NX2tdOworCisJZm9yICh1bnNpZ25lZCBpbnQgX19pID0gX01fayArIF9NX2lrIC0gMTsgX19pIDwgKDIgKiBfTV9rKTsgKytfX2kpCisJICB7CisJICAgIF9NX2xvc2Vyc1tfX2ldLl9NX2tleXAgPSAmX19zZW50aW5lbDsKKwkgICAgX01fbG9zZXJzW19faV0uX01fc291cmNlID0gLTE7CisJICB9CisgICAgICB9CisKKyAgICAgIH5fTG9zZXJUcmVlUG9pbnRlclVuZ3VhcmRlZEJhc2UoKQorICAgICAgeyBkZWxldGVbXSBfTV9sb3NlcnM7IH0KKworICAgICAgaW50CisgICAgICBfX2dldF9taW5fc291cmNlKCkKKyAgICAgIHsKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJLy8gbm8gZHVtbXkgc2VxdWVuY2UgY2FuIGV2ZXIgYmUgYXQgdGhlIHRvcCEKKwlfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzWzBdLl9NX3NvdXJjZSAhPSAtMSk7CisjZW5kaWYKKwlyZXR1cm4gX01fbG9zZXJzWzBdLl9NX3NvdXJjZTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX19pbnNlcnRfc3RhcnQoY29uc3QgX1RwJiBfX2tleSwgaW50IF9fc291cmNlLCBib29sKQorICAgICAgeworCXVuc2lnbmVkIGludCBfX3BvcyA9IF9NX2sgKyBfX3NvdXJjZTsKKworCV9NX2xvc2Vyc1tfX3Bvc10uX01fa2V5cCA9ICZfX2tleTsKKwlfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSA9IF9fc291cmNlOworICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBTdGFibGUgdW5ndWFyZGVkIF9Mb3NlclRyZWUgdmFyaWFudCBzdG9yaW5nIHBvaW50ZXJzLgorICAgKgorICAgKiBVbnN0YWJsZSB2YXJpYW50IGlzIGltcGxlbWVudGVkIGJlbG93IHVzaW5nIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24uCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9fc3RhYmxlLyogZGVmYXVsdCA9PSB0cnVlICovLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNsYXNzIF9Mb3NlclRyZWVQb2ludGVyVW5ndWFyZGVkCisgICAgOiBwdWJsaWMgX0xvc2VyVHJlZVBvaW50ZXJVbmd1YXJkZWRCYXNlPF9UcCwgX0NvbXBhcmU+CisgICAgeworICAgICAgdHlwZWRlZiBfTG9zZXJUcmVlUG9pbnRlclVuZ3VhcmRlZEJhc2U8X1RwLCBfQ29tcGFyZT4gX0Jhc2U7CisgICAgICB1c2luZyBfQmFzZTo6X01fazsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2xvc2VyczsKKworICAgIHB1YmxpYzoKKyAgICAgIF9Mb3NlclRyZWVQb2ludGVyVW5ndWFyZGVkKHVuc2lnbmVkIGludCBfX2ssIGNvbnN0IF9UcCYgX19zZW50aW5lbCwKKwkJCQkgX0NvbXBhcmUgX19jb21wID0gc3RkOjpsZXNzPF9UcD4oKSkKKyAgICAgIDogX0Jhc2U6Ol9Mb3NlclRyZWVQb2ludGVyVW5ndWFyZGVkQmFzZShfX2ssIF9fc2VudGluZWwsIF9fY29tcCkKKyAgICAgIHsgfQorCisgICAgICB1bnNpZ25lZCBpbnQKKyAgICAgIF9faW5pdF93aW5uZXIodW5zaWduZWQgaW50IF9fcm9vdCkKKyAgICAgIHsKKwlpZiAoX19yb290ID49IF9NX2spCisJICByZXR1cm4gX19yb290OworCWVsc2UKKwkgIHsKKwkgICAgdW5zaWduZWQgaW50IF9fbGVmdCA9IF9faW5pdF93aW5uZXIoMiAqIF9fcm9vdCk7CisJICAgIHVuc2lnbmVkIGludCBfX3JpZ2h0ID0gX19pbml0X3dpbm5lcigyICogX19yb290ICsgMSk7CisJICAgIGlmICghX01fY29tcCgqX01fbG9zZXJzW19fcmlnaHRdLl9NX2tleXAsCisJCQkgKl9NX2xvc2Vyc1tfX2xlZnRdLl9NX2tleXApKQorCSAgICAgIHsKKwkJLy8gTGVmdCBvbmUgaXMgbGVzcyBvciBlcXVhbC4KKwkJX01fbG9zZXJzW19fcm9vdF0gPSBfTV9sb3NlcnNbX19yaWdodF07CisJCXJldHVybiBfX2xlZnQ7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQkvLyBSaWdodCBvbmUgaXMgbGVzcy4KKwkJX01fbG9zZXJzW19fcm9vdF0gPSBfTV9sb3NlcnNbX19sZWZ0XTsKKwkJcmV0dXJuIF9fcmlnaHQ7CisJICAgICAgfQorCSAgfQorICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfX2luaXQoKQorICAgICAgeworCV9NX2xvc2Vyc1swXSA9IF9NX2xvc2Vyc1tfX2luaXRfd2lubmVyKDEpXTsKKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKwkvLyBubyBkdW1teSBzZXF1ZW5jZSBjYW4gZXZlciBiZSBhdCB0aGUgdG9wIGF0IHRoZSBiZWdpbm5pbmcKKwkvLyAoMCBzZXF1ZW5jZXMhKQorCV9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfTV9sb3NlcnNbMF0uX01fc291cmNlICE9IC0xKTsKKyNlbmRpZgorICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfX2RlbGV0ZV9taW5faW5zZXJ0KGNvbnN0IF9UcCYgX19rZXksIGJvb2wgX19zdXApCisgICAgICB7CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworCS8vIG5vIGR1bW15IHNlcXVlbmNlIGNhbiBldmVyIGJlIGF0IHRoZSB0b3AhCisJX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9NX2xvc2Vyc1swXS5fTV9zb3VyY2UgIT0gLTEpOworI2VuZGlmCisKKwljb25zdCBfVHAqIF9fa2V5cCA9ICZfX2tleTsKKwlpbnQgX19zb3VyY2UgPSBfTV9sb3NlcnNbMF0uX01fc291cmNlOworCWZvciAodW5zaWduZWQgaW50IF9fcG9zID0gKF9NX2sgKyBfX3NvdXJjZSkgLyAyOyBfX3BvcyA+IDA7CisJICAgICBfX3BvcyAvPSAyKQorCSAgeworCSAgICAvLyBUaGUgc21hbGxlciBvbmUgZ2V0cyBwcm9tb3RlZCwgdGllcyBhcmUgYnJva2VuIGJ5IF9NX3NvdXJjZS4KKwkgICAgaWYgKF9NX2NvbXAoKl9NX2xvc2Vyc1tfX3Bvc10uX01fa2V5cCwgKl9fa2V5cCkKKwkJfHwgKCFfTV9jb21wKCpfX2tleXAsICpfTV9sb3NlcnNbX19wb3NdLl9NX2tleXApCisJCSAgICAmJiBfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSA8IF9fc291cmNlKSkKKwkgICAgICB7CisJCS8vIFRoZSBvdGhlciBvbmUgaXMgc21hbGxlci4KKwkJc3RkOjpzd2FwKF9NX2xvc2Vyc1tfX3Bvc10uX01fc291cmNlLCBfX3NvdXJjZSk7CisJCXN0ZDo6c3dhcChfTV9sb3NlcnNbX19wb3NdLl9NX2tleXAsIF9fa2V5cCk7CisJICAgICAgfQorCSAgfQorCisJX01fbG9zZXJzWzBdLl9NX3NvdXJjZSA9IF9fc291cmNlOworCV9NX2xvc2Vyc1swXS5fTV9rZXlwID0gX19rZXlwOworICAgICAgfQorICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBVbnN0YWJsZSB1bmd1YXJkZWQgX0xvc2VyVHJlZSB2YXJpYW50IHN0b3JpbmcgcG9pbnRlcnMuCisgICAqCisgICAqIFN0YWJsZSB2YXJpYW50IGlzIGFib3ZlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBjbGFzcyBfTG9zZXJUcmVlUG9pbnRlclVuZ3VhcmRlZDwvKiBfX3N0YWJsZSA9PSAqL2ZhbHNlLCBfVHAsIF9Db21wYXJlPgorICAgIDogcHVibGljIF9Mb3NlclRyZWVQb2ludGVyVW5ndWFyZGVkQmFzZTxfVHAsIF9Db21wYXJlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0xvc2VyVHJlZVBvaW50ZXJVbmd1YXJkZWRCYXNlPF9UcCwgX0NvbXBhcmU+IF9CYXNlOworICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2s7CisgICAgICB1c2luZyBfQmFzZTo6X01fY29tcDsKKyAgICAgIHVzaW5nIF9CYXNlOjpfTV9sb3NlcnM7CisKKyAgcHVibGljOgorICAgICAgX0xvc2VyVHJlZVBvaW50ZXJVbmd1YXJkZWQodW5zaWduZWQgaW50IF9faywgY29uc3QgX1RwJiBfX3NlbnRpbmVsLAorCQkJCSBfQ29tcGFyZSBfX2NvbXAgPSBzdGQ6Omxlc3M8X1RwPigpKQorICAgICAgOiBfQmFzZTo6X0xvc2VyVHJlZVBvaW50ZXJVbmd1YXJkZWRCYXNlKF9faywgX19zZW50aW5lbCwgX19jb21wKQorICAgICAgeyB9CisKKyAgICAgIHVuc2lnbmVkIGludAorICAgICAgX19pbml0X3dpbm5lcih1bnNpZ25lZCBpbnQgX19yb290KQorICAgICAgeworCWlmIChfX3Jvb3QgPj0gX01faykKKwkgIHJldHVybiBfX3Jvb3Q7CisJZWxzZQorCSAgeworCSAgICB1bnNpZ25lZCBpbnQgX19sZWZ0ID0gX19pbml0X3dpbm5lcigyICogX19yb290KTsKKwkgICAgdW5zaWduZWQgaW50IF9fcmlnaHQgPSBfX2luaXRfd2lubmVyKDIgKiBfX3Jvb3QgKyAxKTsKKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKwkgICAgLy8gSWYgX19sZWZ0IG9uZSBpcyBzZW50aW5lbCB0aGVuIF9fcmlnaHQgb25lIG11c3QgYmUsIHRvby4KKwkgICAgaWYgKF9NX2xvc2Vyc1tfX2xlZnRdLl9NX3NvdXJjZSA9PSAtMSkKKwkgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzW19fcmlnaHRdLl9NX3NvdXJjZSA9PSAtMSk7CisjZW5kaWYKKworCSAgICBpZiAoIV9NX2NvbXAoKl9NX2xvc2Vyc1tfX3JpZ2h0XS5fTV9rZXlwLAorCQkJICpfTV9sb3NlcnNbX19sZWZ0XS5fTV9rZXlwKSkKKwkgICAgICB7CisJCS8vIExlZnQgb25lIGlzIGxlc3Mgb3IgZXF1YWwuCisJCV9NX2xvc2Vyc1tfX3Jvb3RdID0gX01fbG9zZXJzW19fcmlnaHRdOworCQlyZXR1cm4gX19sZWZ0OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJLy8gUmlnaHQgb25lIGlzIGxlc3MuCisJCV9NX2xvc2Vyc1tfX3Jvb3RdID0gX01fbG9zZXJzW19fbGVmdF07CisJCXJldHVybiBfX3JpZ2h0OworCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX19pbml0KCkKKyAgICAgIHsKKwlfTV9sb3NlcnNbMF0gPSBfTV9sb3NlcnNbX19pbml0X3dpbm5lcigxKV07CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJLy8gbm8gZHVtbXkgc2VxdWVuY2UgY2FuIGV2ZXIgYmUgYXQgdGhlIHRvcCBhdCB0aGUgYmVnaW5uaW5nCisJLy8gKDAgc2VxdWVuY2VzISkKKwlfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX01fbG9zZXJzWzBdLl9NX3NvdXJjZSAhPSAtMSk7CisjZW5kaWYKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX19kZWxldGVfbWluX2luc2VydChjb25zdCBfVHAmIF9fa2V5LCBib29sIF9fc3VwKQorICAgICAgeworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKwkvLyBubyBkdW1teSBzZXF1ZW5jZSBjYW4gZXZlciBiZSBhdCB0aGUgdG9wIQorCV9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfTV9sb3NlcnNbMF0uX01fc291cmNlICE9IC0xKTsKKyNlbmRpZgorCisJY29uc3QgX1RwKiBfX2tleXAgPSAmX19rZXk7CisJaW50IF9fc291cmNlID0gX01fbG9zZXJzWzBdLl9NX3NvdXJjZTsKKwlmb3IgKHVuc2lnbmVkIGludCBfX3BvcyA9IChfTV9rICsgX19zb3VyY2UpIC8gMjsgX19wb3MgPiAwOworCSAgICAgX19wb3MgLz0gMikKKwkgIHsKKwkgICAgLy8gVGhlIHNtYWxsZXIgb25lIGdldHMgcHJvbW90ZWQuCisJICAgIGlmIChfTV9jb21wKCooX01fbG9zZXJzW19fcG9zXS5fTV9rZXlwKSwgKl9fa2V5cCkpCisJICAgICAgeworCQkvLyBUaGUgb3RoZXIgb25lIGlzIHNtYWxsZXIuCisJCXN0ZDo6c3dhcChfTV9sb3NlcnNbX19wb3NdLl9NX3NvdXJjZSwgX19zb3VyY2UpOworCQlzdGQ6OnN3YXAoX01fbG9zZXJzW19fcG9zXS5fTV9rZXlwLCBfX2tleXApOworCSAgICAgIH0KKwkgIH0KKworCV9NX2xvc2Vyc1swXS5fTV9zb3VyY2UgPSBfX3NvdXJjZTsKKwlfTV9sb3NlcnNbMF0uX01fa2V5cCA9IF9fa2V5cDsKKyAgICAgIH0KKyAgICB9OworfSAvLyBuYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX0xPU0VSVFJFRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL21lcmdlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL21lcmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkNGI0NQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbWVyZ2UuaApAQCAtMCwwICsxLDI1MSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL21lcmdlLmgKKyAqICBAYnJpZWYgUGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2Ygc3RkOjptZXJnZSgpLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9NRVJHRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX01FUkdFX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIE1lcmdlIHJvdXRpbmUgYmVpbmcgYWJsZSB0byBtZXJnZSBvbmx5IHRoZSBAYyBfX21heF9sZW5ndGgKKyAgICogc21hbGxlc3QgZWxlbWVudHMuCisgICAqCisgICAqIFRoZSBAYyBfX2JlZ2luIGl0ZXJhdG9ycyBhcmUgYWR2YW5jZWQgYWNjb3JkaW5nbHksIHRoZXkgbWlnaHQgbm90CisgICAqIHJlYWNoIEBjIF9fZW5kLCBpbiBjb250cmFzdCB0byB0aGUgdXN1YWwgdmFyaWFudC4KKyAgICogQHBhcmFtIF9fYmVnaW4xIEJlZ2luIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgKiBAcGFyYW0gX19lbmQxIEVuZCBpdGVyYXRvciBvZiBmaXJzdCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fYmVnaW4yIEJlZ2luIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fZW5kMiBFbmQgaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLgorICAgKiBAcGFyYW0gX190YXJnZXQgVGFyZ2V0IGJlZ2luIGl0ZXJhdG9yLgorICAgKiBAcGFyYW0gX19tYXhfbGVuZ3RoIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIG1lcmdlLgorICAgKiBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAqIEByZXR1cm4gT3V0cHV0IGVuZCBpdGVyYXRvci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fbWVyZ2VfYWR2YW5jZV91c3VhbChfUkFJdGVyMSYgX19iZWdpbjEsIF9SQUl0ZXIxIF9fZW5kMSwKKwkJCSAgX1JBSXRlcjImIF9fYmVnaW4yLCBfUkFJdGVyMiBfX2VuZDIsCisJCQkgIF9PdXRwdXRJdGVyYXRvciBfX3RhcmdldCwKKwkJCSAgX0RpZmZlcmVuY2VUcCBfX21heF9sZW5ndGgsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworICAgICAgd2hpbGUgKF9fYmVnaW4xICE9IF9fZW5kMSAmJiBfX2JlZ2luMiAhPSBfX2VuZDIgJiYgX19tYXhfbGVuZ3RoID4gMCkKKyAgICAgICAgeworICAgICAgICAgIC8vIGFycmF5MVtfX2kxXSA8IGFycmF5MFtpMF0KKyAgICAgICAgICBpZiAoX19jb21wKCpfX2JlZ2luMiwgKl9fYmVnaW4xKSkKKyAgICAgICAgICAgICpfX3RhcmdldCsrID0gKl9fYmVnaW4yKys7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgKl9fdGFyZ2V0KysgPSAqX19iZWdpbjErKzsKKyAgICAgICAgICAtLV9fbWF4X2xlbmd0aDsKKyAgICAgICAgfQorCisgICAgICBpZiAoX19iZWdpbjEgIT0gX19lbmQxKQorICAgICAgICB7CisgICAgICAgICAgX190YXJnZXQgPSBzdGQ6OmNvcHkoX19iZWdpbjEsIF9fYmVnaW4xICsgX19tYXhfbGVuZ3RoLCBfX3RhcmdldCk7CisgICAgICAgICAgX19iZWdpbjEgKz0gX19tYXhfbGVuZ3RoOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfX3RhcmdldCA9IHN0ZDo6Y29weShfX2JlZ2luMiwgX19iZWdpbjIgKyBfX21heF9sZW5ndGgsIF9fdGFyZ2V0KTsKKyAgICAgICAgICBfX2JlZ2luMiArPSBfX21heF9sZW5ndGg7CisgICAgICAgIH0KKyAgICAgIHJldHVybiBfX3RhcmdldDsKKyAgICB9CisKKyAgLyoqIEBicmllZiBNZXJnZSByb3V0aW5lIGJlaW5nIGFibGUgdG8gbWVyZ2Ugb25seSB0aGUgQGMgX19tYXhfbGVuZ3RoCisgICAqIHNtYWxsZXN0IGVsZW1lbnRzLgorICAgKgorICAgKiBUaGUgQGMgX19iZWdpbiBpdGVyYXRvcnMgYXJlIGFkdmFuY2VkIGFjY29yZGluZ2x5LCB0aGV5IG1pZ2h0IG5vdAorICAgKiByZWFjaCBAYyBfX2VuZCwgaW4gY29udHJhc3QgdG8gdGhlIHVzdWFsIHZhcmlhbnQuCisgICAqIFNwZWNpYWxseSBkZXNpZ25lZCBjb2RlIHNob3VsZCBhbGxvdyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUKKyAgICogY29uZGl0aW9uYWwgbW92ZXMgaW5zdGVhZCBvZiBicmFuY2hlcy4KKyAgICogQHBhcmFtIF9fYmVnaW4xIEJlZ2luIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgKiBAcGFyYW0gX19lbmQxIEVuZCBpdGVyYXRvciBvZiBmaXJzdCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fYmVnaW4yIEJlZ2luIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fZW5kMiBFbmQgaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLgorICAgKiBAcGFyYW0gX190YXJnZXQgVGFyZ2V0IGJlZ2luIGl0ZXJhdG9yLgorICAgKiBAcGFyYW0gX19tYXhfbGVuZ3RoIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIG1lcmdlLgorICAgKiBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAqIEByZXR1cm4gT3V0cHV0IGVuZCBpdGVyYXRvci4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fbWVyZ2VfYWR2YW5jZV9tb3ZjKF9SQUl0ZXIxJiBfX2JlZ2luMSwgX1JBSXRlcjEgX19lbmQxLAorCQkJIF9SQUl0ZXIyJiBfX2JlZ2luMiwgX1JBSXRlcjIgX19lbmQyLAorCQkJIF9PdXRwdXRJdGVyYXRvciBfX3RhcmdldCwKKwkJCSBfRGlmZmVyZW5jZVRwIF9fbWF4X2xlbmd0aCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXIxPjo6dmFsdWVfdHlwZQorICAgICAgICBfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcjI+Ojp2YWx1ZV90eXBlCisgICAgICAgIF9WYWx1ZVR5cGUyOworCisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9fbWF4X2xlbmd0aCA+PSAwKTsKKyNlbmRpZgorCisgICAgICB3aGlsZSAoX19iZWdpbjEgIT0gX19lbmQxICYmIF9fYmVnaW4yICE9IF9fZW5kMiAmJiBfX21heF9sZW5ndGggPiAwKQorICAgICAgICB7CisgICAgICAgICAgX1JBSXRlcjEgX19uZXh0MSA9IF9fYmVnaW4xICsgMTsKKyAgICAgICAgICBfUkFJdGVyMiBfX25leHQyID0gX19iZWdpbjIgKyAxOworICAgICAgICAgIF9WYWx1ZVR5cGUxIF9fZWxlbWVudDEgPSAqX19iZWdpbjE7CisgICAgICAgICAgX1ZhbHVlVHlwZTIgX19lbGVtZW50MiA9ICpfX2JlZ2luMjsKKworICAgICAgICAgIGlmIChfX2NvbXAoX19lbGVtZW50MiwgX19lbGVtZW50MSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fZWxlbWVudDEgPSBfX2VsZW1lbnQyOworICAgICAgICAgICAgICBfX2JlZ2luMiA9IF9fbmV4dDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgX19iZWdpbjEgPSBfX25leHQxOworCisgICAgICAgICAgKl9fdGFyZ2V0ID0gX19lbGVtZW50MTsKKworICAgICAgICAgICsrX190YXJnZXQ7CisgICAgICAgICAgLS1fX21heF9sZW5ndGg7CisgICAgICAgIH0KKyAgICAgIGlmIChfX2JlZ2luMSAhPSBfX2VuZDEpCisgICAgICAgIHsKKyAgICAgICAgICBfX3RhcmdldCA9IHN0ZDo6Y29weShfX2JlZ2luMSwgX19iZWdpbjEgKyBfX21heF9sZW5ndGgsIF9fdGFyZ2V0KTsKKyAgICAgICAgICBfX2JlZ2luMSArPSBfX21heF9sZW5ndGg7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9fdGFyZ2V0ID0gc3RkOjpjb3B5KF9fYmVnaW4yLCBfX2JlZ2luMiArIF9fbWF4X2xlbmd0aCwgX190YXJnZXQpOworICAgICAgICAgIF9fYmVnaW4yICs9IF9fbWF4X2xlbmd0aDsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIF9fdGFyZ2V0OworICAgIH0KKworICAvKiogQGJyaWVmIE1lcmdlIHJvdXRpbmUgYmVpbmcgYWJsZSB0byBtZXJnZSBvbmx5IHRoZSBAYyBfX21heF9sZW5ndGgKKyAgICogc21hbGxlc3QgZWxlbWVudHMuCisgICAqCisgICAqICBUaGUgQGMgX19iZWdpbiBpdGVyYXRvcnMgYXJlIGFkdmFuY2VkIGFjY29yZGluZ2x5LCB0aGV5IG1pZ2h0IG5vdAorICAgKiAgcmVhY2ggQGMgX19lbmQsIGluIGNvbnRyYXN0IHRvIHRoZSB1c3VhbCB2YXJpYW50LgorICAgKiAgU3RhdGljIHN3aXRjaCBvbiB3aGV0aGVyIHRvIHVzZSB0aGUgY29uZGl0aW9uYWwtbW92ZSB2YXJpYW50LgorICAgKiAgQHBhcmFtIF9fYmVnaW4xIEJlZ2luIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fZW5kMSBFbmQgaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19iZWdpbjIgQmVnaW4gaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fZW5kMiBFbmQgaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fdGFyZ2V0IFRhcmdldCBiZWdpbiBpdGVyYXRvci4KKyAgICogIEBwYXJhbSBfX21heF9sZW5ndGggTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbWVyZ2UuCisgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAqICBAcmV0dXJuIE91dHB1dCBlbmQgaXRlcmF0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgX19tZXJnZV9hZHZhbmNlKF9SQUl0ZXIxJiBfX2JlZ2luMSwgX1JBSXRlcjEgX19lbmQxLAorCQkgICAgX1JBSXRlcjImIF9fYmVnaW4yLCBfUkFJdGVyMiBfX2VuZDIsCisJCSAgICBfT3V0cHV0SXRlcmF0b3IgX190YXJnZXQsIF9EaWZmZXJlbmNlVHAgX19tYXhfbGVuZ3RoLAorCQkgICAgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19tYXhfbGVuZ3RoKQorCisgICAgICByZXR1cm4gX19tZXJnZV9hZHZhbmNlX21vdmMoX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwKKwkJCQkgIF9fdGFyZ2V0LCBfX21heF9sZW5ndGgsIF9fY29tcCk7CisgICAgfQorCisgIC8qKiBAYnJpZWYgTWVyZ2Ugcm91dGluZSBmYWxsYmFjayB0byBzZXF1ZW50aWFsIGluIGNhc2UgdGhlCisgICAgICBpdGVyYXRvcnMgb2YgdGhlIHR3byBpbnB1dCBzZXF1ZW5jZXMgYXJlIG9mIGRpZmZlcmVudCB0eXBlLgorICAgICAgKiAgQHBhcmFtIF9fYmVnaW4xIEJlZ2luIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgICAgKiAgQHBhcmFtIF9fZW5kMSBFbmQgaXRlcmF0b3Igb2YgZmlyc3Qgc2VxdWVuY2UuCisgICAgICAqICBAcGFyYW0gX19iZWdpbjIgQmVnaW4gaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLgorICAgICAgKiAgQHBhcmFtIF9fZW5kMiBFbmQgaXRlcmF0b3Igb2Ygc2Vjb25kIHNlcXVlbmNlLgorICAgICAgKiAgQHBhcmFtIF9fdGFyZ2V0IFRhcmdldCBiZWdpbiBpdGVyYXRvci4KKyAgICAgICogIEBwYXJhbSBfX21heF9sZW5ndGggTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbWVyZ2UuCisgICAgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAgICAqICBAcmV0dXJuIE91dHB1dCBlbmQgaXRlcmF0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX1JBSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBfUkFJdGVyMworICAgIF9fcGFyYWxsZWxfbWVyZ2VfYWR2YW5jZShfUkFJdGVyMSYgX19iZWdpbjEsIF9SQUl0ZXIxIF9fZW5kMSwKKwkJCSAgICAgX1JBSXRlcjImIF9fYmVnaW4yLAorCQkJICAgICAvLyBkaWZmZXJlbnQgaXRlcmF0b3JzLCBwYXJhbGxlbCBpbXBsZW1lbnRhdGlvbgorCQkJICAgICAvLyBub3QgYXZhaWxhYmxlCisJCQkgICAgIF9SQUl0ZXIyIF9fZW5kMiwgX1JBSXRlcjMgX190YXJnZXQsIHR5cGVuYW1lCisJCQkgICAgIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXIxPjo6CisJCQkgICAgIGRpZmZlcmVuY2VfdHlwZSBfX21heF9sZW5ndGgsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7IHJldHVybiBfX21lcmdlX2FkdmFuY2UoX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwgX190YXJnZXQsCisJCQkgICAgIF9fbWF4X2xlbmd0aCwgX19jb21wKTsgfQorCisgIC8qKiBAYnJpZWYgUGFyYWxsZWwgbWVyZ2Ugcm91dGluZSBiZWluZyBhYmxlIHRvIG1lcmdlIG9ubHkgdGhlIEBjCisgICAqIF9fbWF4X2xlbmd0aCBzbWFsbGVzdCBlbGVtZW50cy4KKyAgICoKKyAgICogIFRoZSBAYyBfX2JlZ2luIGl0ZXJhdG9ycyBhcmUgYWR2YW5jZWQgYWNjb3JkaW5nbHksIHRoZXkgbWlnaHQgbm90CisgICAqICByZWFjaCBAYyBfX2VuZCwgaW4gY29udHJhc3QgdG8gdGhlIHVzdWFsIHZhcmlhbnQuCisgICAqICBUaGUgZnVuY3Rpb25hbGl0eSBpcyBwcm9qZWN0ZWQgb250byBwYXJhbGxlbF9tdWx0aXdheV9tZXJnZS4KKyAgICogIEBwYXJhbSBfX2JlZ2luMSBCZWdpbiBpdGVyYXRvciBvZiBmaXJzdCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZDEgRW5kIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fYmVnaW4yIEJlZ2luIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZDIgRW5kIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX3RhcmdldCBUYXJnZXQgYmVnaW4gaXRlcmF0b3IuCisgICAqICBAcGFyYW0gX19tYXhfbGVuZ3RoIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIG1lcmdlLgorICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiAgQHJldHVybiBPdXRwdXQgZW5kIGl0ZXJhdG9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIzLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX1JBSXRlcjMKKyAgICBfX3BhcmFsbGVsX21lcmdlX2FkdmFuY2UoX1JBSXRlcjEmIF9fYmVnaW4xLCBfUkFJdGVyMSBfX2VuZDEsCisJCQkgICAgIF9SQUl0ZXIxJiBfX2JlZ2luMiwgX1JBSXRlcjEgX19lbmQyLAorCQkJICAgICBfUkFJdGVyMyBfX3RhcmdldCwgdHlwZW5hbWUKKwkJCSAgICAgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcjE+OjoKKwkJCSAgICAgZGlmZmVyZW5jZV90eXBlIF9fbWF4X2xlbmd0aCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUKKyAgICAgICAgICBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcjE+OjoKKyAgICAgICAgZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTEgLyogPT0gZGlmZmVyZW5jZV90eXBlMiAqLzsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcjM+OjoKKyAgICAgICAgZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cGFpcjxfUkFJdGVyMSwgX1JBSXRlcjE+CisgICAgICAgIF9JdGVyYXRvclBhaXI7CisKKyAgICAgIF9JdGVyYXRvclBhaXIgX19zZXFzWzJdID0geyBzdGQ6Om1ha2VfcGFpcihfX2JlZ2luMSwgX19lbmQxKSwKKwkJCQkgIHN0ZDo6bWFrZV9wYWlyKF9fYmVnaW4yLCBfX2VuZDIpIH07CisgICAgICBfUkFJdGVyMyBfX3RhcmdldF9lbmQgPSBwYXJhbGxlbF9tdWx0aXdheV9tZXJnZQorCTwgLyogX19zdGFibGUgPSAqLyB0cnVlLCAvKiBfX3NlbnRpbmVscyA9ICovIGZhbHNlPgorCShfX3NlcXMsIF9fc2VxcyArIDIsIF9fdGFyZ2V0LCBtdWx0aXdheV9tZXJnZV9leGFjdF9zcGxpdHRpbmcKKwkgPCAvKiBfX3N0YWJsZSA9ICovIHRydWUsIF9JdGVyYXRvclBhaXIqLAorCSBfQ29tcGFyZSwgX0RpZmZlcmVuY2VUeXBlMT4sIF9fbWF4X2xlbmd0aCwgX19jb21wLAorCSBvbXBfZ2V0X21heF90aHJlYWRzKCkpOworCisgICAgICByZXR1cm4gX190YXJnZXRfZW5kOworICAgIH0KK30gICAgICAgLy9uYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX01FUkdFX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbXVsdGlzZXFfc2VsZWN0aW9uLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL211bHRpc2VxX3NlbGVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDZjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL211bHRpc2VxX3NlbGVjdGlvbi5oCkBAIC0wLDAgKzEsNjQ0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvbXVsdGlzZXFfc2VsZWN0aW9uLmgKKyAqICBAYnJpZWYgRnVuY3Rpb25zIHRvIGZpbmQgZWxlbWVudHMgb2YgYSBjZXJ0YWluIGdsb2JhbCBfX3JhbmsgaW4KKyAqICBtdWx0aXBsZSBzb3J0ZWQgc2VxdWVuY2VzLiAgQWxzbyBzZXJ2ZXMgZm9yIHNwbGl0dGluZyBzdWNoCisgKiAgc2VxdWVuY2Ugc2V0cy4KKyAqCisgKiAgVGhlIGFsZ29yaXRobSBkZXNjcmlwdGlvbiBjYW4gYmUgZm91bmQgaW4gCisgKgorICogIFAuIEouIFZhcm1hbiwgUy4gRC4gU2NoZXVmbGVyLCBCLiBSLiBJeWVyLCBhbmQgRy4gUi4gUmljYXJkLgorICogIE1lcmdpbmcgTXVsdGlwbGUgTGlzdHMgb24gSGllcmFyY2hpY2FsLU1lbW9yeSBNdWx0aXByb2Nlc3NvcnMuCisgKiAgSm91cm5hbCBvZiBQYXJhbGxlbCBhbmQgRGlzdHJpYnV0ZWQgQ29tcHV0aW5nLCAxMigyKToxNzHigJMxNzcsIDE5OTEuCisgKgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9NVUxUSVNFUV9TRUxFQ1RJT05fSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9NVUxUSVNFUV9TRUxFQ1RJT05fSCAxCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8cXVldWU+CisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIENvbXBhcmUgX19hIHBhaXIgb2YgdHlwZXMgbGV4aWNvZ3JhcGhpY2FsbHksIGFzY2VuZGluZy4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNsYXNzIF9MZXhpY29ncmFwaGljCisgICAgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248c3RkOjpwYWlyPF9UMSwgX1QyPiwKKwkJCQkgIHN0ZDo6cGFpcjxfVDEsIF9UMj4sIGJvb2w+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICBfQ29tcGFyZSYgX01fY29tcDsKKworICAgIHB1YmxpYzoKKyAgICAgIF9MZXhpY29ncmFwaGljKF9Db21wYXJlJiBfX2NvbXApIDogX01fY29tcChfX2NvbXApIHsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6cGFpcjxfVDEsIF9UMj4mIF9fcDEsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6cGFpcjxfVDEsIF9UMj4mIF9fcDIpIGNvbnN0CisgICAgICB7CisgICAgICAgIGlmIChfTV9jb21wKF9fcDEuZmlyc3QsIF9fcDIuZmlyc3QpKQorICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmIChfTV9jb21wKF9fcDIuZmlyc3QsIF9fcDEuZmlyc3QpKQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBGaXJzdHMgYXJlIGVxdWFsLgorICAgICAgICByZXR1cm4gX19wMS5zZWNvbmQgPCBfX3AyLnNlY29uZDsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgQ29tcGFyZSBfX2EgcGFpciBvZiB0eXBlcyBsZXhpY29ncmFwaGljYWxseSwgZGVzY2VuZGluZy4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNsYXNzIF9MZXhpY29ncmFwaGljUmV2ZXJzZSA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxfVDEsIF9UMiwgYm9vbD4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIF9Db21wYXJlJiBfTV9jb21wOworCisgICAgcHVibGljOgorICAgICAgX0xleGljb2dyYXBoaWNSZXZlcnNlKF9Db21wYXJlJiBfX2NvbXApIDogX01fY29tcChfX2NvbXApIHsgfQorCisgICAgICBib29sCisgICAgICBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6cGFpcjxfVDEsIF9UMj4mIF9fcDEsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6cGFpcjxfVDEsIF9UMj4mIF9fcDIpIGNvbnN0CisgICAgICB7CisgICAgICAgIGlmIChfTV9jb21wKF9fcDIuZmlyc3QsIF9fcDEuZmlyc3QpKQorICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmIChfTV9jb21wKF9fcDEuZmlyc3QsIF9fcDIuZmlyc3QpKQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBGaXJzdHMgYXJlIGVxdWFsLgorICAgICAgICByZXR1cm4gX19wMi5zZWNvbmQgPCBfX3AxLnNlY29uZDsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKiAKKyAgICogIEBicmllZiBTcGxpdHMgc2V2ZXJhbCBzb3J0ZWQgc2VxdWVuY2VzIGF0IGEgY2VydGFpbiBnbG9iYWwgX19yYW5rLAorICAgKiAgcmVzdWx0aW5nIGluIGEgc3BsaXR0aW5nIHBvaW50IGZvciBlYWNoIHNlcXVlbmNlLgorICAgKiAgVGhlIHNlcXVlbmNlcyBhcmUgcGFzc2VkIHZpYSBhIHNlcXVlbmNlIG9mIHJhbmRvbS1hY2Nlc3MKKyAgICogIGl0ZXJhdG9yIHBhaXJzLCBub25lIG9mIHRoZSBzZXF1ZW5jZXMgbWF5IGJlIGVtcHR5LiAgSWYgdGhlcmUKKyAgICogIGFyZSBzZXZlcmFsIGVxdWFsIGVsZW1lbnRzIGFjcm9zcyB0aGUgc3BsaXQsIHRoZSBvbmVzIG9uIHRoZQorICAgKiAgX19sZWZ0IHNpZGUgd2lsbCBiZSBjaG9zZW4gZnJvbSBzZXF1ZW5jZXMgd2l0aCBzbWFsbGVyIG51bWJlci4KKyAgICogIEBwYXJhbSBfX2JlZ2luX3NlcXMgQmVnaW4gb2YgdGhlIHNlcXVlbmNlIG9mIGl0ZXJhdG9yIHBhaXJzLgorICAgKiAgQHBhcmFtIF9fZW5kX3NlcXMgRW5kIG9mIHRoZSBzZXF1ZW5jZSBvZiBpdGVyYXRvciBwYWlycy4KKyAgICogIEBwYXJhbSBfX3JhbmsgVGhlIGdsb2JhbCByYW5rIHRvIHBhcnRpdGlvbiBhdC4KKyAgICogIEBwYXJhbSBfX2JlZ2luX29mZnNldHMgQSByYW5kb20tYWNjZXNzIF9fc2VxdWVuY2UgX19iZWdpbiB3aGVyZSB0aGUKKyAgICogIF9fcmVzdWx0IHdpbGwgYmUgc3RvcmVkIGluLiBFYWNoIGVsZW1lbnQgb2YgdGhlIHNlcXVlbmNlIGlzIGFuCisgICAqICBpdGVyYXRvciB0aGF0IHBvaW50cyB0byB0aGUgZmlyc3QgZWxlbWVudCBvbiB0aGUgZ3JlYXRlciBwYXJ0IG9mCisgICAqICB0aGUgcmVzcGVjdGl2ZSBfX3NlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fY29tcCBUaGUgb3JkZXJpbmcgZnVuY3RvciwgZGVmYXVsdHMgdG8gc3RkOjpsZXNzPF9UcD4uIAorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhblNlcXMsIHR5cGVuYW1lIF9SYW5rVHlwZSwgdHlwZW5hbWUgX1JhbmtJdGVyYXRvciwKKyAgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBtdWx0aXNlcV9wYXJ0aXRpb24oX1JhblNlcXMgX19iZWdpbl9zZXFzLCBfUmFuU2VxcyBfX2VuZF9zZXFzLAorICAgICAgICAgICAgICAgICAgICAgICBfUmFua1R5cGUgX19yYW5rLAorICAgICAgICAgICAgICAgICAgICAgICBfUmFua0l0ZXJhdG9yIF9fYmVnaW5fb2Zmc2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wID0gc3RkOjpsZXNzPAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czx0eXBlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUmFuU2Vxcz46OnZhbHVlX3R5cGU6OgorICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF90eXBlPjo6dmFsdWVfdHlwZT4oKSkgLy8gc3RkOjpsZXNzPF9UcD4KKyAgICB7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fZW5kX3NlcXMgLSBfX2JlZ2luX3NlcXMpCisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JhblNlcXM+Ojp2YWx1ZV90eXBlOjpmaXJzdF90eXBlCisgICAgICAgIF9JdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JhblNlcXM+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICAgICAgX1NlcU51bWJlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0Pjo6ZGlmZmVyZW5jZV90eXBlCisgICAgICAgICAgICAgICBfRGlmZmVyZW5jZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdD46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKworICAgICAgX0xleGljb2dyYXBoaWM8X1ZhbHVlVHlwZSwgX1NlcU51bWJlciwgX0NvbXBhcmU+IF9fbGNvbXAoX19jb21wKTsKKyAgICAgIF9MZXhpY29ncmFwaGljUmV2ZXJzZTxfVmFsdWVUeXBlLCBfU2VxTnVtYmVyLCBfQ29tcGFyZT4gX19scmNvbXAoX19jb21wKTsKKworICAgICAgLy8gTnVtYmVyIG9mIHNlcXVlbmNlcywgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRvdGFsIChwb3NzaWJseQorICAgICAgLy8gaW5jbHVkaW5nIHBhZGRpbmcpLgorICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbSA9IHN0ZDo6ZGlzdGFuY2UoX19iZWdpbl9zZXFzLCBfX2VuZF9zZXFzKSwgX19ubiA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgX19ubWF4LCBfX24sIF9fcjsKKworICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspCisgICAgICAgIHsKKyAgICAgICAgICBfX25uICs9IHN0ZDo6ZGlzdGFuY2UoX19iZWdpbl9zZXFzW19faV0uZmlyc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbl9zZXFzW19faV0uc2Vjb25kKTsKKyAgICAgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoCisgICAgICAgICAgICBzdGQ6OmRpc3RhbmNlKF9fYmVnaW5fc2Vxc1tfX2ldLmZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX2JlZ2luX3NlcXNbX19pXS5zZWNvbmQpID4gMCk7CisgICAgICAgIH0KKworICAgICAgaWYgKF9fcmFuayA9PSBfX25uKQorICAgICAgICB7CisgICAgICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspCisgICAgICAgICAgICBfX2JlZ2luX29mZnNldHNbX19pXSA9IF9fYmVnaW5fc2Vxc1tfX2ldLnNlY29uZDsgLy8gVmVyeSBlbmQuCisgICAgICAgICAgLy8gUmV0dXJuIF9fbSAtIDE7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfX20gIT0gMCk7CisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX19ubiAhPSAwKTsKKyAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfX3JhbmsgPj0gMCk7CisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX19yYW5rIDwgX19ubik7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSogX19ucyA9IG5ldyBfRGlmZmVyZW5jZVR5cGVbX19tXTsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSogX19hID0gbmV3IF9EaWZmZXJlbmNlVHlwZVtfX21dOworICAgICAgX0RpZmZlcmVuY2VUeXBlKiBfX2IgPSBuZXcgX0RpZmZlcmVuY2VUeXBlW19fbV07CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19sOworCisgICAgICBfX25zWzBdID0gc3RkOjpkaXN0YW5jZShfX2JlZ2luX3NlcXNbMF0uZmlyc3QsIF9fYmVnaW5fc2Vxc1swXS5zZWNvbmQpOworICAgICAgX19ubWF4ID0gX19uc1swXTsKKyAgICAgIGZvciAoX1NlcU51bWJlciBfX2kgPSAwOyBfX2kgPCBfX207IF9faSsrKQorICAgICAgICB7CisgICAgICAgICAgX19uc1tfX2ldID0gc3RkOjpkaXN0YW5jZShfX2JlZ2luX3NlcXNbX19pXS5maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmVnaW5fc2Vxc1tfX2ldLnNlY29uZCk7CisgICAgICAgICAgX19ubWF4ID0gc3RkOjptYXgoX19ubWF4LCBfX25zW19faV0pOworICAgICAgICB9CisKKyAgICAgIF9fciA9IF9fcmRfbG9nMihfX25tYXgpICsgMTsKKworICAgICAgLy8gUGFkIGFsbCBsaXN0cyB0byB0aGlzIGxlbmd0aCwgYXQgbGVhc3QgYXMgbG9uZyBhcyBhbnkgbnNbX19pXSwKKyAgICAgIC8vIGVxdWFsaXR5IGlmZiBfX25tYXggPSAyXl9fayAtIDEuCisgICAgICBfX2wgPSAoMVVMTCA8PCBfX3IpIC0gMTsKKworICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspCisgICAgICAgIHsKKyAgICAgICAgICBfX2FbX19pXSA9IDA7CisgICAgICAgICAgX19iW19faV0gPSBfX2w7CisgICAgICAgIH0KKyAgICAgIF9fbiA9IF9fbCAvIDI7CisKKyAgICAgIC8vIEludmFyaWFudHM6CisgICAgICAvLyAwIDw9IF9fYVtfX2ldIDw9IF9fbnNbX19pXSwgMCA8PSBfX2JbX19pXSA8PSBfX2wKKworI2RlZmluZSBfX1MoX19pKSAoX19iZWdpbl9zZXFzW19faV0uZmlyc3QpCisKKyAgICAgIC8vIEluaXRpYWwgcGFydGl0aW9uLgorICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPF9WYWx1ZVR5cGUsIF9TZXFOdW1iZXI+ID4gX19zYW1wbGU7CisKKyAgICAgIGZvciAoX1NlcU51bWJlciBfX2kgPSAwOyBfX2kgPCBfX207IF9faSsrKQorICAgICAgICBpZiAoX19uIDwgX19uc1tfX2ldKSAgICAvL19fc2VxdWVuY2UgbG9uZyBlbm91Z2gKKyAgICAgICAgICBfX3NhbXBsZS5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIoX19TKF9faSlbX19uXSwgX19pKSk7CisgICAgICBfX2dudV9zZXF1ZW50aWFsOjpzb3J0KF9fc2FtcGxlLmJlZ2luKCksIF9fc2FtcGxlLmVuZCgpLCBfX2xjb21wKTsKKworICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspICAgICAgIC8vY29uY2VwdHVhbCBpbmZpbml0eQorICAgICAgICBpZiAoX19uID49IF9fbnNbX19pXSkgICAvL19fc2VxdWVuY2UgdG9vIHNob3J0LCBjb25jZXB0dWFsIGluZmluaXR5CisgICAgICAgICAgX19zYW1wbGUucHVzaF9iYWNrKAorICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIoX19TKF9faSlbMF0gLypfX2R1bW15IGVsZW1lbnQqLywgX19pKSk7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2xvY2FscmFuayA9IF9fcmFuayAvIF9fbDsKKworICAgICAgX1NlcU51bWJlciBfX2o7CisgICAgICBmb3IgKF9faiA9IDA7CisgICAgICAgICAgIF9faiA8IF9fbG9jYWxyYW5rICYmICgoX19uICsgMSkgPD0gX19uc1tfX3NhbXBsZVtfX2pdLnNlY29uZF0pOworICAgICAgICAgICArK19faikKKyAgICAgICAgX19hW19fc2FtcGxlW19fal0uc2Vjb25kXSArPSBfX24gKyAxOworICAgICAgZm9yICg7IF9faiA8IF9fbTsgX19qKyspCisgICAgICAgIF9fYltfX3NhbXBsZVtfX2pdLnNlY29uZF0gLT0gX19uICsgMTsKKyAgICAgIAorICAgICAgLy8gRnVydGhlciByZWZpbmVtZW50LgorICAgICAgd2hpbGUgKF9fbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBfX24gLz0gMjsKKworICAgICAgICAgIF9TZXFOdW1iZXIgX19sbWF4X3NlcSA9IC0xOyAgLy8gdG8gYXZvaWQgd2FybmluZworICAgICAgICAgIGNvbnN0IF9WYWx1ZVR5cGUqIF9fbG1heCA9IDA7IC8vIGltcG9zc2libGUgdG8gYXZvaWQgdGhlIHdhcm5pbmc/CisgICAgICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChfX2FbX19pXSA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKCFfX2xtYXgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBfX2xtYXggPSAmKF9fUyhfX2kpW19fYVtfX2ldIC0gMV0pOworICAgICAgICAgICAgICAgICAgICAgIF9fbG1heF9zZXEgPSBfX2k7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIC8vIE1heCwgZmF2b3IgcmVhciBzZXF1ZW5jZXMuCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2NvbXAoX19TKF9faSlbX19hW19faV0gLSAxXSwgKl9fbG1heCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG1heCA9ICYoX19TKF9faSlbX19hW19faV0gLSAxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG1heF9zZXEgPSBfX2k7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBfU2VxTnVtYmVyIF9faTsKKyAgICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX21pZGRsZSA9IChfX2JbX19pXSArIF9fYVtfX2ldKSAvIDI7CisgICAgICAgICAgICAgIGlmIChfX2xtYXggJiYgX19taWRkbGUgPCBfX25zW19faV0gJiYKKyAgICAgICAgICAgICAgICAgIF9fbGNvbXAoc3RkOjptYWtlX3BhaXIoX19TKF9faSlbX19taWRkbGVdLCBfX2kpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIoKl9fbG1heCwgX19sbWF4X3NlcSkpKQorICAgICAgICAgICAgICAgIF9fYVtfX2ldID0gc3RkOjptaW4oX19hW19faV0gKyBfX24gKyAxLCBfX25zW19faV0pOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgX19iW19faV0gLT0gX19uICsgMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2xlZnRzaXplID0gMDsKKyAgICAgICAgICBmb3IgKF9TZXFOdW1iZXIgX19pID0gMDsgX19pIDwgX19tOyBfX2krKykKKyAgICAgICAgICAgICAgX19sZWZ0c2l6ZSArPSBfX2FbX19pXSAvIChfX24gKyAxKTsKKworICAgICAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3NrZXcgPSBfX3JhbmsgLyAoX19uICsgMSkgLSBfX2xlZnRzaXplOworCisgICAgICAgICAgaWYgKF9fc2tldyA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGxlZnQsIGZpbmQgc21hbGxlc3QuCisgICAgICAgICAgICAgIHN0ZDo6cHJpb3JpdHlfcXVldWU8c3RkOjpwYWlyPF9WYWx1ZVR5cGUsIF9TZXFOdW1iZXI+LAorICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxfVmFsdWVUeXBlLCBfU2VxTnVtYmVyPiA+LAorICAgICAgICAgICAgICAgIF9MZXhpY29ncmFwaGljUmV2ZXJzZTxfVmFsdWVUeXBlLCBfU2VxTnVtYmVyLCBfQ29tcGFyZT4gPgorICAgICAgICAgICAgICAgIF9fcHEoX19scmNvbXApOworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspCisgICAgICAgICAgICAgICAgaWYgKF9fYltfX2ldIDwgX19uc1tfX2ldKQorICAgICAgICAgICAgICAgICAgX19wcS5wdXNoKHN0ZDo6bWFrZV9wYWlyKF9fUyhfX2kpW19fYltfX2ldXSwgX19pKSk7CisKKyAgICAgICAgICAgICAgZm9yICg7IF9fc2tldyAhPSAwICYmICFfX3BxLmVtcHR5KCk7IC0tX19za2V3KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIF9TZXFOdW1iZXIgX19zb3VyY2UgPSBfX3BxLnRvcCgpLnNlY29uZDsKKyAgICAgICAgICAgICAgICAgIF9fcHEucG9wKCk7CisKKyAgICAgICAgICAgICAgICAgIF9fYVtfX3NvdXJjZV0KKyAgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6bWluKF9fYVtfX3NvdXJjZV0gKyBfX24gKyAxLCBfX25zW19fc291cmNlXSk7CisgICAgICAgICAgICAgICAgICBfX2JbX19zb3VyY2VdICs9IF9fbiArIDE7CisKKyAgICAgICAgICAgICAgICAgIGlmIChfX2JbX19zb3VyY2VdIDwgX19uc1tfX3NvdXJjZV0pCisgICAgICAgICAgICAgICAgICAgIF9fcHEucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihfX1MoX19zb3VyY2UpW19fYltfX3NvdXJjZV1dLCBfX3NvdXJjZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChfX3NrZXcgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSByaWdodCwgZmluZCBncmVhdGVzdC4KKyAgICAgICAgICAgICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxzdGQ6OnBhaXI8X1ZhbHVlVHlwZSwgX1NlcU51bWJlcj4sCisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPF9WYWx1ZVR5cGUsIF9TZXFOdW1iZXI+ID4sCisgICAgICAgICAgICAgICAgX0xleGljb2dyYXBoaWM8X1ZhbHVlVHlwZSwgX1NlcU51bWJlciwgX0NvbXBhcmU+ID4KKyAgICAgICAgICAgICAgICAgIF9fcHEoX19sY29tcCk7CisKKyAgICAgICAgICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspCisgICAgICAgICAgICAgICAgaWYgKF9fYVtfX2ldID4gMCkKKyAgICAgICAgICAgICAgICAgIF9fcHEucHVzaChzdGQ6Om1ha2VfcGFpcihfX1MoX19pKVtfX2FbX19pXSAtIDFdLCBfX2kpKTsKKworICAgICAgICAgICAgICBmb3IgKDsgX19za2V3ICE9IDA7ICsrX19za2V3KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIF9TZXFOdW1iZXIgX19zb3VyY2UgPSBfX3BxLnRvcCgpLnNlY29uZDsKKyAgICAgICAgICAgICAgICAgIF9fcHEucG9wKCk7CisKKyAgICAgICAgICAgICAgICAgIF9fYVtfX3NvdXJjZV0gLT0gX19uICsgMTsKKyAgICAgICAgICAgICAgICAgIF9fYltfX3NvdXJjZV0gLT0gX19uICsgMTsKKworICAgICAgICAgICAgICAgICAgaWYgKF9fYVtfX3NvdXJjZV0gPiAwKQorICAgICAgICAgICAgICAgICAgICBfX3BxLnB1c2goc3RkOjptYWtlX3BhaXIoCisgICAgICAgICAgICAgICAgICAgICAgICBfX1MoX19zb3VyY2UpW19fYVtfX3NvdXJjZV0gLSAxXSwgX19zb3VyY2UpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgLy8gUG9zdGNvbmRpdGlvbnM6CisgICAgICAvLyBfX2FbX19pXSA9PSBfX2JbX19pXSBpbiBtb3N0IGNhc2VzLCBleGNlcHQgd2hlbiBfX2FbX19pXSBoYXMgYmVlbgorICAgICAgLy8gY2xhbXBlZCBiZWNhdXNlIG9mIGhhdmluZyByZWFjaGVkIHRoZSBib3VuZGFyeQorCisgICAgICAvLyBOb3cgcmV0dXJuIHRoZSByZXN1bHQsIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0LgorCisgICAgICAvLyBDb21wYXJlIHRoZSBrZXlzIG9uIGJvdGggZWRnZXMgb2YgdGhlIGJvcmRlci4KKworICAgICAgLy8gTWF4aW11bSBvZiBsZWZ0IGVkZ2UsIG1pbmltdW0gb2YgcmlnaHQgZWRnZS4KKyAgICAgIF9WYWx1ZVR5cGUqIF9fbWF4bGVmdCA9IDA7CisgICAgICBfVmFsdWVUeXBlKiBfX21pbnJpZ2h0ID0gMDsKKyAgICAgIGZvciAoX1NlcU51bWJlciBfX2kgPSAwOyBfX2kgPCBfX207IF9faSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYgKF9fYVtfX2ldID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCFfX21heGxlZnQpCisgICAgICAgICAgICAgICAgX19tYXhsZWZ0ID0gJihfX1MoX19pKVtfX2FbX19pXSAtIDFdKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8vIE1heCwgZmF2b3IgcmVhciBzZXF1ZW5jZXMuCisgICAgICAgICAgICAgICAgICBpZiAoIV9fY29tcChfX1MoX19pKVtfX2FbX19pXSAtIDFdLCAqX19tYXhsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgX19tYXhsZWZ0ID0gJihfX1MoX19pKVtfX2FbX19pXSAtIDFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKF9fYltfX2ldIDwgX19uc1tfX2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIV9fbWlucmlnaHQpCisgICAgICAgICAgICAgICAgX19taW5yaWdodCA9ICYoX19TKF9faSlbX19iW19faV1dKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8vIE1pbiwgZmF2b3IgZm9yZSBzZXF1ZW5jZXMuCisgICAgICAgICAgICAgICAgICBpZiAoX19jb21wKF9fUyhfX2kpW19fYltfX2ldXSwgKl9fbWlucmlnaHQpKQorICAgICAgICAgICAgICAgICAgICBfX21pbnJpZ2h0ID0gJihfX1MoX19pKVtfX2JbX19pXV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBfU2VxTnVtYmVyIF9fc2VxID0gMDsKKyAgICAgIGZvciAoX1NlcU51bWJlciBfX2kgPSAwOyBfX2kgPCBfX207IF9faSsrKQorICAgICAgICBfX2JlZ2luX29mZnNldHNbX19pXSA9IF9fUyhfX2kpICsgX19hW19faV07CisKKyAgICAgIGRlbGV0ZVtdIF9fbnM7CisgICAgICBkZWxldGVbXSBfX2E7CisgICAgICBkZWxldGVbXSBfX2I7CisgICAgfQorCisKKyAgLyoqIAorICAgKiAgQGJyaWVmIFNlbGVjdHMgdGhlIGVsZW1lbnQgYXQgYSBjZXJ0YWluIGdsb2JhbCBfX3JhbmsgZnJvbSBzZXZlcmFsCisgICAqICBzb3J0ZWQgc2VxdWVuY2VzLgorICAgKgorICAgKiAgVGhlIHNlcXVlbmNlcyBhcmUgcGFzc2VkIHZpYSBhIHNlcXVlbmNlIG9mIHJhbmRvbS1hY2Nlc3MKKyAgICogIGl0ZXJhdG9yIHBhaXJzLCBub25lIG9mIHRoZSBzZXF1ZW5jZXMgbWF5IGJlIGVtcHR5LgorICAgKiAgQHBhcmFtIF9fYmVnaW5fc2VxcyBCZWdpbiBvZiB0aGUgc2VxdWVuY2Ugb2YgaXRlcmF0b3IgcGFpcnMuCisgICAqICBAcGFyYW0gX19lbmRfc2VxcyBFbmQgb2YgdGhlIHNlcXVlbmNlIG9mIGl0ZXJhdG9yIHBhaXJzLgorICAgKiAgQHBhcmFtIF9fcmFuayBUaGUgZ2xvYmFsIHJhbmsgdG8gcGFydGl0aW9uIGF0LgorICAgKiAgQHBhcmFtIF9fb2Zmc2V0IFRoZSByYW5rIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSBnbG9iYWwKKyAgICogIHN1YnNlcXVlbmNlIG9mIGVsZW1lbnRzIGVxdWFsIHRvIHRoZSBzZWxlY3RlZCBlbGVtZW50LiBJZiB0aGUKKyAgICogIHNlbGVjdGVkIGVsZW1lbnQgaXMgdW5pcXVlLCB0aGlzIG51bWJlciBpcyAwLgorICAgKiAgQHBhcmFtIF9fY29tcCBUaGUgb3JkZXJpbmcgZnVuY3RvciwgZGVmYXVsdHMgdG8gc3RkOjpsZXNzLiAKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1JhblNlcXMsIHR5cGVuYW1lIF9SYW5rVHlwZSwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1RwCisgICAgbXVsdGlzZXFfc2VsZWN0aW9uKF9SYW5TZXFzIF9fYmVnaW5fc2VxcywgX1JhblNlcXMgX19lbmRfc2VxcywKKyAgICAgICAgICAgICAgICAgICAgICAgX1JhbmtUeXBlIF9fcmFuaywKKyAgICAgICAgICAgICAgICAgICAgICAgX1JhbmtUeXBlJiBfX29mZnNldCwgX0NvbXBhcmUgX19jb21wID0gc3RkOjpsZXNzPF9UcD4oKSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fZW5kX3NlcXMgLSBfX2JlZ2luX3NlcXMpCisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JhblNlcXM+Ojp2YWx1ZV90eXBlOjpmaXJzdF90eXBlCisgICAgICAgIF9JdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JhblNlcXM+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICAgICAgX1NlcU51bWJlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0Pjo6ZGlmZmVyZW5jZV90eXBlCisgICAgICAgIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX0xleGljb2dyYXBoaWM8X1RwLCBfU2VxTnVtYmVyLCBfQ29tcGFyZT4gX19sY29tcChfX2NvbXApOworICAgICAgX0xleGljb2dyYXBoaWNSZXZlcnNlPF9UcCwgX1NlcU51bWJlciwgX0NvbXBhcmU+IF9fbHJjb21wKF9fY29tcCk7CisKKyAgICAgIC8vIE51bWJlciBvZiBzZXF1ZW5jZXMsIG51bWJlciBvZiBlbGVtZW50cyBpbiB0b3RhbCAocG9zc2libHkKKyAgICAgIC8vIGluY2x1ZGluZyBwYWRkaW5nKS4KKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX20gPSBzdGQ6OmRpc3RhbmNlKF9fYmVnaW5fc2VxcywgX19lbmRfc2Vxcyk7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19ubiA9IDA7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19ubWF4LCBfX24sIF9fcjsKKworICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgX19pKyspCisgICAgICAgIF9fbm4gKz0gc3RkOjpkaXN0YW5jZShfX2JlZ2luX3NlcXNbX19pXS5maXJzdCwKKwkJCSAgICAgIF9fYmVnaW5fc2Vxc1tfX2ldLnNlY29uZCk7CisKKyAgICAgIGlmIChfX20gPT0gMCB8fCBfX25uID09IDAgfHwgX19yYW5rIDwgMCB8fCBfX3JhbmsgPj0gX19ubikKKyAgICAgICAgeworICAgICAgICAgIC8vIHJlc3VsdCB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm8gZGF0YSBvciBfX3JhbmsgaXMgb3V0c2lkZSBib3VuZHMKKyAgICAgICAgICB0aHJvdyBzdGQ6OmV4Y2VwdGlvbigpOworICAgICAgICB9CisKKworICAgICAgX0RpZmZlcmVuY2VUeXBlKiBfX25zID0gbmV3IF9EaWZmZXJlbmNlVHlwZVtfX21dOworICAgICAgX0RpZmZlcmVuY2VUeXBlKiBfX2EgPSBuZXcgX0RpZmZlcmVuY2VUeXBlW19fbV07CisgICAgICBfRGlmZmVyZW5jZVR5cGUqIF9fYiA9IG5ldyBfRGlmZmVyZW5jZVR5cGVbX19tXTsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2w7CisKKyAgICAgIF9fbnNbMF0gPSBzdGQ6OmRpc3RhbmNlKF9fYmVnaW5fc2Vxc1swXS5maXJzdCwgX19iZWdpbl9zZXFzWzBdLnNlY29uZCk7CisgICAgICBfX25tYXggPSBfX25zWzBdOworICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX25zW19faV0gPSBzdGQ6OmRpc3RhbmNlKF9fYmVnaW5fc2Vxc1tfX2ldLmZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbl9zZXFzW19faV0uc2Vjb25kKTsKKyAgICAgICAgICBfX25tYXggPSBzdGQ6Om1heChfX25tYXgsIF9fbnNbX19pXSk7CisgICAgICAgIH0KKworICAgICAgX19yID0gX19yZF9sb2cyKF9fbm1heCkgKyAxOworCisgICAgICAvLyBQYWQgYWxsIGxpc3RzIHRvIHRoaXMgbGVuZ3RoLCBhdCBsZWFzdCBhcyBsb25nIGFzIGFueSBuc1tfX2ldLAorICAgICAgLy8gZXF1YWxpdHkgaWZmIF9fbm1heCA9IDJeX19rIC0gMQorICAgICAgX19sID0gX19yb3VuZF91cF90b19wb3cyKF9fcikgLSAxOworCisgICAgICBmb3IgKF9TZXFOdW1iZXIgX19pID0gMDsgX19pIDwgX19tOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fYVtfX2ldID0gMDsKKyAgICAgICAgICBfX2JbX19pXSA9IF9fbDsKKyAgICAgICAgfQorICAgICAgX19uID0gX19sIC8gMjsKKworICAgICAgLy8gSW52YXJpYW50czoKKyAgICAgIC8vIDAgPD0gX19hW19faV0gPD0gX19uc1tfX2ldLCAwIDw9IF9fYltfX2ldIDw9IF9fbAorCisjZGVmaW5lIF9fUyhfX2kpIChfX2JlZ2luX3NlcXNbX19pXS5maXJzdCkKKworICAgICAgLy8gSW5pdGlhbCBwYXJ0aXRpb24uCisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8X1RwLCBfU2VxTnVtYmVyPiA+IF9fc2FtcGxlOworCisgICAgICBmb3IgKF9TZXFOdW1iZXIgX19pID0gMDsgX19pIDwgX19tOyBfX2krKykKKyAgICAgICAgaWYgKF9fbiA8IF9fbnNbX19pXSkKKyAgICAgICAgICBfX3NhbXBsZS5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIoX19TKF9faSlbX19uXSwgX19pKSk7CisgICAgICBfX2dudV9zZXF1ZW50aWFsOjpzb3J0KF9fc2FtcGxlLmJlZ2luKCksIF9fc2FtcGxlLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xjb21wLCBzZXF1ZW50aWFsX3RhZygpKTsKKworICAgICAgLy8gQ29uY2VwdHVhbCBpbmZpbml0eS4KKyAgICAgIGZvciAoX1NlcU51bWJlciBfX2kgPSAwOyBfX2kgPCBfX207IF9faSsrKQorICAgICAgICBpZiAoX19uID49IF9fbnNbX19pXSkKKyAgICAgICAgICBfX3NhbXBsZS5wdXNoX2JhY2soCisgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcihfX1MoX19pKVswXSAvKl9fZHVtbXkgZWxlbWVudCovLCBfX2kpKTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbG9jYWxyYW5rID0gX19yYW5rIC8gX19sOworCisgICAgICBfU2VxTnVtYmVyIF9fajsKKyAgICAgIGZvciAoX19qID0gMDsKKyAgICAgICAgICAgX19qIDwgX19sb2NhbHJhbmsgJiYgKChfX24gKyAxKSA8PSBfX25zW19fc2FtcGxlW19fal0uc2Vjb25kXSk7CisgICAgICAgICAgICsrX19qKQorICAgICAgICBfX2FbX19zYW1wbGVbX19qXS5zZWNvbmRdICs9IF9fbiArIDE7CisgICAgICBmb3IgKDsgX19qIDwgX19tOyArK19faikKKyAgICAgICAgX19iW19fc2FtcGxlW19fal0uc2Vjb25kXSAtPSBfX24gKyAxOworCisgICAgICAvLyBGdXJ0aGVyIHJlZmluZW1lbnQuCisgICAgICB3aGlsZSAoX19uID4gMCkKKyAgICAgICAgeworICAgICAgICAgIF9fbiAvPSAyOworCisgICAgICAgICAgY29uc3QgX1RwKiBfX2xtYXggPSAwOworICAgICAgICAgIGZvciAoX1NlcU51bWJlciBfX2kgPSAwOyBfX2kgPCBfX207ICsrX19pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoX19hW19faV0gPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICghX19sbWF4KQorICAgICAgICAgICAgICAgICAgICBfX2xtYXggPSAmKF9fUyhfX2kpW19fYVtfX2ldIC0gMV0pOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fY29tcCgqX19sbWF4LCBfX1MoX19pKVtfX2FbX19pXSAtIDFdKSkgICAgICAvL21heAorICAgICAgICAgICAgICAgICAgICAgICAgX19sbWF4ID0gJihfX1MoX19pKVtfX2FbX19pXSAtIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgIF9TZXFOdW1iZXIgX19pOworICAgICAgICAgIGZvciAoX19pID0gMDsgX19pIDwgX19tOyBfX2krKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbWlkZGxlID0gKF9fYltfX2ldICsgX19hW19faV0pIC8gMjsKKyAgICAgICAgICAgICAgaWYgKF9fbG1heCAmJiBfX21pZGRsZSA8IF9fbnNbX19pXQorICAgICAgICAgICAgICAgICAgJiYgX19jb21wKF9fUyhfX2kpW19fbWlkZGxlXSwgKl9fbG1heCkpCisgICAgICAgICAgICAgICAgX19hW19faV0gPSBzdGQ6Om1pbihfX2FbX19pXSArIF9fbiArIDEsIF9fbnNbX19pXSk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfX2JbX19pXSAtPSBfX24gKyAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbGVmdHNpemUgPSAwOworICAgICAgICAgIGZvciAoX1NlcU51bWJlciBfX2kgPSAwOyBfX2kgPCBfX207ICsrX19pKQorICAgICAgICAgICAgICBfX2xlZnRzaXplICs9IF9fYVtfX2ldIC8gKF9fbiArIDEpOworCisgICAgICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fc2tldyA9IF9fcmFuayAvIChfX24gKyAxKSAtIF9fbGVmdHNpemU7CisKKyAgICAgICAgICBpZiAoX19za2V3ID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgbGVmdCwgZmluZCBzbWFsbGVzdC4KKyAgICAgICAgICAgICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxzdGQ6OnBhaXI8X1RwLCBfU2VxTnVtYmVyPiwKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8X1RwLCBfU2VxTnVtYmVyPiA+LAorICAgICAgICAgICAgICAgIF9MZXhpY29ncmFwaGljUmV2ZXJzZTxfVHAsIF9TZXFOdW1iZXIsIF9Db21wYXJlPiA+CisgICAgICAgICAgICAgICAgICBfX3BxKF9fbHJjb21wKTsKKworICAgICAgICAgICAgICBmb3IgKF9TZXFOdW1iZXIgX19pID0gMDsgX19pIDwgX19tOyArK19faSkKKyAgICAgICAgICAgICAgICBpZiAoX19iW19faV0gPCBfX25zW19faV0pCisgICAgICAgICAgICAgICAgICBfX3BxLnB1c2goc3RkOjptYWtlX3BhaXIoX19TKF9faSlbX19iW19faV1dLCBfX2kpKTsKKworICAgICAgICAgICAgICBmb3IgKDsgX19za2V3ICE9IDAgJiYgIV9fcHEuZW1wdHkoKTsgLS1fX3NrZXcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgX1NlcU51bWJlciBfX3NvdXJjZSA9IF9fcHEudG9wKCkuc2Vjb25kOworICAgICAgICAgICAgICAgICAgX19wcS5wb3AoKTsKKworICAgICAgICAgICAgICAgICAgX19hW19fc291cmNlXQorICAgICAgICAgICAgICAgICAgICAgID0gc3RkOjptaW4oX19hW19fc291cmNlXSArIF9fbiArIDEsIF9fbnNbX19zb3VyY2VdKTsKKyAgICAgICAgICAgICAgICAgIF9fYltfX3NvdXJjZV0gKz0gX19uICsgMTsKKworICAgICAgICAgICAgICAgICAgaWYgKF9fYltfX3NvdXJjZV0gPCBfX25zW19fc291cmNlXSkKKyAgICAgICAgICAgICAgICAgICAgX19wcS5wdXNoKAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKF9fUyhfX3NvdXJjZSlbX19iW19fc291cmNlXV0sIF9fc291cmNlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKF9fc2tldyA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIHJpZ2h0LCBmaW5kIGdyZWF0ZXN0LgorICAgICAgICAgICAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPHN0ZDo6cGFpcjxfVHAsIF9TZXFOdW1iZXI+LAorICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxfVHAsIF9TZXFOdW1iZXI+ID4sCisgICAgICAgICAgICAgICAgX0xleGljb2dyYXBoaWM8X1RwLCBfU2VxTnVtYmVyLCBfQ29tcGFyZT4gPiBfX3BxKF9fbGNvbXApOworCisgICAgICAgICAgICAgIGZvciAoX1NlcU51bWJlciBfX2kgPSAwOyBfX2kgPCBfX207ICsrX19pKQorICAgICAgICAgICAgICAgIGlmIChfX2FbX19pXSA+IDApCisgICAgICAgICAgICAgICAgICBfX3BxLnB1c2goc3RkOjptYWtlX3BhaXIoX19TKF9faSlbX19hW19faV0gLSAxXSwgX19pKSk7CisKKyAgICAgICAgICAgICAgZm9yICg7IF9fc2tldyAhPSAwOyArK19fc2tldykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfU2VxTnVtYmVyIF9fc291cmNlID0gX19wcS50b3AoKS5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICBfX3BxLnBvcCgpOworCisgICAgICAgICAgICAgICAgICBfX2FbX19zb3VyY2VdIC09IF9fbiArIDE7CisgICAgICAgICAgICAgICAgICBfX2JbX19zb3VyY2VdIC09IF9fbiArIDE7CisKKyAgICAgICAgICAgICAgICAgIGlmIChfX2FbX19zb3VyY2VdID4gMCkKKyAgICAgICAgICAgICAgICAgICAgX19wcS5wdXNoKHN0ZDo6bWFrZV9wYWlyKAorICAgICAgICAgICAgICAgICAgICAgICAgX19TKF9fc291cmNlKVtfX2FbX19zb3VyY2VdIC0gMV0sIF9fc291cmNlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8vIFBvc3Rjb25kaXRpb25zOgorICAgICAgLy8gX19hW19faV0gPT0gX19iW19faV0gaW4gbW9zdCBjYXNlcywgZXhjZXB0IHdoZW4gX19hW19faV0gaGFzIGJlZW4KKyAgICAgIC8vIGNsYW1wZWQgYmVjYXVzZSBvZiBoYXZpbmcgcmVhY2hlZCB0aGUgYm91bmRhcnkKKworICAgICAgLy8gTm93IHJldHVybiB0aGUgcmVzdWx0LCBjYWxjdWxhdGUgdGhlIG9mZnNldC4KKworICAgICAgLy8gQ29tcGFyZSB0aGUga2V5cyBvbiBib3RoIGVkZ2VzIG9mIHRoZSBib3JkZXIuCisKKyAgICAgIC8vIE1heGltdW0gb2YgbGVmdCBlZGdlLCBtaW5pbXVtIG9mIHJpZ2h0IGVkZ2UuCisgICAgICBib29sIF9fbWF4bGVmdHNldCA9IGZhbHNlLCBfX21pbnJpZ2h0c2V0ID0gZmFsc2U7CisKKyAgICAgIC8vIEltcG9zc2libGUgdG8gYXZvaWQgdGhlIHdhcm5pbmc/CisgICAgICBfVHAgX19tYXhsZWZ0LCBfX21pbnJpZ2h0OworICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoX19hW19faV0gPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIV9fbWF4bGVmdHNldCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfX21heGxlZnQgPSBfX1MoX19pKVtfX2FbX19pXSAtIDFdOworICAgICAgICAgICAgICAgICAgX19tYXhsZWZ0c2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvLyBNYXguCisgICAgICAgICAgICAgICAgICBpZiAoX19jb21wKF9fbWF4bGVmdCwgX19TKF9faSlbX19hW19faV0gLSAxXSkpCisgICAgICAgICAgICAgICAgICAgIF9fbWF4bGVmdCA9IF9fUyhfX2kpW19fYVtfX2ldIC0gMV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX2JbX19pXSA8IF9fbnNbX19pXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCFfX21pbnJpZ2h0c2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIF9fbWlucmlnaHQgPSBfX1MoX19pKVtfX2JbX19pXV07CisgICAgICAgICAgICAgICAgICBfX21pbnJpZ2h0c2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvLyBNaW4uCisgICAgICAgICAgICAgICAgICBpZiAoX19jb21wKF9fUyhfX2kpW19fYltfX2ldXSwgX19taW5yaWdodCkpCisgICAgICAgICAgICAgICAgICAgIF9fbWlucmlnaHQgPSBfX1MoX19pKVtfX2JbX19pXV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBNaW5yaWdodCBpcyB0aGUgX19zcGxpdHRlciwgaW4gYW55IGNhc2UuCisKKyAgICAgIGlmICghX19tYXhsZWZ0c2V0IHx8IF9fY29tcChfX21pbnJpZ2h0LCBfX21heGxlZnQpKQorICAgICAgICB7CisgICAgICAgICAgLy8gR29vZCBsdWNrLCBldmVyeXRoaW5nIGlzIHNwbGl0IHVuYW1iaWd1b3VzbHkuCisgICAgICAgICAgX19vZmZzZXQgPSAwOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvLyBXZSBoYXZlIHRvIGNhbGN1bGF0ZSBhbiBvZmZzZXQuCisgICAgICAgICAgX19vZmZzZXQgPSAwOworCisgICAgICAgICAgZm9yIChfU2VxTnVtYmVyIF9faSA9IDA7IF9faSA8IF9fbTsgKytfX2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9EaWZmZXJlbmNlVHlwZSBsYgorICAgICAgICAgICAgICAgID0gc3RkOjpsb3dlcl9ib3VuZChfX1MoX19pKSwgX19TKF9faSkgKyBfX25zW19faV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlucmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkgLSBfX1MoX19pKTsKKyAgICAgICAgICAgICAgX19vZmZzZXQgKz0gX19hW19faV0gLSBsYjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBkZWxldGVbXSBfX25zOworICAgICAgZGVsZXRlW10gX19hOworICAgICAgZGVsZXRlW10gX19iOworCisgICAgICByZXR1cm4gX19taW5yaWdodDsKKyAgICB9Cit9CisKKyN1bmRlZiBfX1MKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX01VTFRJU0VRX1NFTEVDVElPTl9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL211bHRpd2F5X21lcmdlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL211bHRpd2F5X21lcmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYjk5NAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbXVsdGl3YXlfbWVyZ2UuaApAQCAtMCwwICsxLDIwNzIgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9tdWx0aXdheV9tZXJnZS5oCisqICBAYnJpZWYgSW1wbGVtZW50YXRpb24gb2Ygc2VxdWVudGlhbCBhbmQgcGFyYWxsZWwgbXVsdGl3YXkgbWVyZ2UuCisqCisqICBFeHBsYW5hdGlvbnMgb24gdGhlIGhpZ2gtc3BlZWQgbWVyZ2luZyByb3V0aW5lcyBpbiB0aGUgYXBwZW5kaXggb2YKKyoKKyogIFAuIFNhbmRlcnMuCisqICBGYXN0IHByaW9yaXR5IHF1ZXVlcyBmb3IgY2FjaGVkIG1lbW9yeS4KKyogIEFDTSBKb3VybmFsIG9mIEV4cGVyaW1lbnRhbCBBbGdvcml0aG1pY3MsIDUsIDIwMDAuCisqCisqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlciBhbmQgTWFudWVsIEhvbHRncmV3ZS4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9NVUxUSVdBWV9NRVJHRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX01VTFRJV0FZX01FUkdFX0gKKworI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ28uaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9mZWF0dXJlcy5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3BhcmFsbGVsLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvbG9zZXJ0cmVlLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvbXVsdGlzZXFfc2VsZWN0aW9uLmg+CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworI2luY2x1ZGUgPHBhcmFsbGVsL2NoZWNrZXJzLmg+CisjZW5kaWYKKworLyoqIEBicmllZiBMZW5ndGggb2YgYSBzZXF1ZW5jZSBkZXNjcmliZWQgYnkgYSBwYWlyIG9mIGl0ZXJhdG9ycy4gKi8KKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfTEVOR1RIKF9fcykgKChfX3MpLnNlY29uZCAtIChfX3MpLmZpcnN0KQorCituYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX19tZXJnZV9hZHZhbmNlKF9SQUl0ZXIxJiwgX1JBSXRlcjEsIF9SQUl0ZXIyJiwgX1JBSXRlcjIsCisJCSAgICBfT3V0cHV0SXRlcmF0b3IsIF9EaWZmZXJlbmNlVHAsIF9Db21wYXJlKTsKKworICAvKiogQGJyaWVmIF9JdGVyYXRvciB3cmFwcGVyIHN1cHBvcnRpbmcgYW4gaW1wbGljaXQgc3VwcmVtdW0gYXQgdGhlIGVuZAorICAgKiAgICAgICAgIG9mIHRoZSBzZXF1ZW5jZSwgZG9taW5hdGluZyBhbGwgY29tcGFyaXNvbnMuCisgICAqCisgICAqIFRoZSBpbXBsaWNpdCBzdXByZW11bSBjb21lcyB3aXRoIGEgcGVyZm9ybWFuY2UgY29zdC4KKyAgICoKKyAgICogRGVyaXZpbmcgZnJvbSBfUkFJdGVyIGlzIG5vdCBwb3NzaWJsZSBzaW5jZQorICAgKiBfUkFJdGVyIG5lZWQgbm90IGJlIGEgY2xhc3MuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBjbGFzcyBfR3VhcmRlZEl0ZXJhdG9yCisgICAgeworICAgIHByaXZhdGU6CisgICAgICAvKiogQGJyaWVmIEN1cnJlbnQgaXRlcmF0b3IgX19wb3NpdGlvbi4gKi8KKyAgICAgIF9SQUl0ZXIgX01fY3VycmVudDsKKworICAgICAgLyoqIEBicmllZiBFbmQgaXRlcmF0b3Igb2YgdGhlIHNlcXVlbmNlLiAqLworICAgICAgX1JBSXRlciBfTV9lbmQ7CisKKyAgICAgIC8qKiBAYnJpZWYgX0NvbXBhcmUuICovCisgICAgICBfQ29tcGFyZSYgX19jb21wOworCisgICAgcHVibGljOgorICAgICAgLyoqIEBicmllZiBDb25zdHJ1Y3Rvci4gU2V0cyBpdGVyYXRvciB0byBiZWdpbm5pbmcgb2Ygc2VxdWVuY2UuCisgICAgICAqICBAcGFyYW0gX19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBzZXF1ZW5jZS4KKyAgICAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2Ygc2VxdWVuY2UuCisgICAgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IgcHJvdmlkZWQgZm9yIGFzc29jaWF0ZWQgb3ZlcmxvYWRlZAorICAgICAgKiAgY29tcGFyZSBvcGVyYXRvcnMuICovCisgICAgICBfR3VhcmRlZEl0ZXJhdG9yKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwgX0NvbXBhcmUmIF9fY29tcCkKKyAgICAgIDogX01fY3VycmVudChfX2JlZ2luKSwgX01fZW5kKF9fZW5kKSwgX19jb21wKF9fY29tcCkKKyAgICAgIHsgfQorCisgICAgICAvKiogQGJyaWVmIFByZS1pbmNyZW1lbnQgb3BlcmF0b3IuCisgICAgICAqICBAcmV0dXJuIFRoaXMuICovCisgICAgICBfR3VhcmRlZEl0ZXJhdG9yPF9SQUl0ZXIsIF9Db21wYXJlPiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCSsrX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKiBAYnJpZWYgRGVyZWZlcmVuY2Ugb3BlcmF0b3IuCisgICAgICAqICBAcmV0dXJuIFJlZmVyZW5jZWQgZWxlbWVudC4gKi8KKyAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+Ojp2YWx1ZV90eXBlJgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CisKKyAgICAgIC8qKiBAYnJpZWYgQ29udmVydCB0byB3cmFwcGVkIGl0ZXJhdG9yLgorICAgICAgKiAgQHJldHVybiBXcmFwcGVkIGl0ZXJhdG9yLiAqLworICAgICAgb3BlcmF0b3IgX1JBSXRlcigpCisgICAgICB7IHJldHVybiBfTV9jdXJyZW50OyB9CisKKyAgICAgIC8qKiBAYnJpZWYgQ29tcGFyZSB0d28gZWxlbWVudHMgcmVmZXJlbmNlZCBieSBndWFyZGVkIGl0ZXJhdG9ycy4KKyAgICAgICAqICBAcGFyYW0gX19iaTEgRmlyc3QgaXRlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIF9fYmkyIFNlY29uZCBpdGVyYXRvci4KKyAgICAgICAqICBAcmV0dXJuIEBjIHRydWUgaWYgbGVzcy4gKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcjwoX0d1YXJkZWRJdGVyYXRvcjxfUkFJdGVyLCBfQ29tcGFyZT4mIF9fYmkxLAorCQlfR3VhcmRlZEl0ZXJhdG9yPF9SQUl0ZXIsIF9Db21wYXJlPiYgX19iaTIpCisgICAgICB7CisJaWYgKF9fYmkxLl9NX2N1cnJlbnQgPT0gX19iaTEuX01fZW5kKSAgICAgICAvLyBfX2JpMSBpcyBzdXAKKwkgIHJldHVybiBfX2JpMi5fTV9jdXJyZW50ID09IF9fYmkyLl9NX2VuZDsgIC8vIF9fYmkyIGlzIG5vdCBzdXAKKwlpZiAoX19iaTIuX01fY3VycmVudCA9PSBfX2JpMi5fTV9lbmQpICAgICAgIC8vIF9fYmkyIGlzIHN1cAorCSAgcmV0dXJuIHRydWU7CisJcmV0dXJuIChfX2JpMS5fX2NvbXApKCpfX2JpMSwgKl9fYmkyKTsgICAgICAvLyBub3JtYWwgY29tcGFyZQorICAgICAgfQorCisgICAgICAvKiogQGJyaWVmIENvbXBhcmUgdHdvIGVsZW1lbnRzIHJlZmVyZW5jZWQgYnkgZ3VhcmRlZCBpdGVyYXRvcnMuCisgICAgICAgKiAgQHBhcmFtIF9fYmkxIEZpcnN0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSBfX2JpMiBTZWNvbmQgaXRlcmF0b3IuCisgICAgICAgKiAgQHJldHVybiBAYyBUcnVlIGlmIGxlc3MgZXF1YWwuICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I8PShfR3VhcmRlZEl0ZXJhdG9yPF9SQUl0ZXIsIF9Db21wYXJlPiYgX19iaTEsCisJCSBfR3VhcmRlZEl0ZXJhdG9yPF9SQUl0ZXIsIF9Db21wYXJlPiYgX19iaTIpCisgICAgICB7CisJaWYgKF9fYmkyLl9NX2N1cnJlbnQgPT0gX19iaTIuX01fZW5kKSAgICAgICAvLyBfX2JpMSBpcyBzdXAKKwkgIHJldHVybiBfX2JpMS5fTV9jdXJyZW50ICE9IF9fYmkxLl9NX2VuZDsgIC8vIF9fYmkyIGlzIG5vdCBzdXAKKwlpZiAoX19iaTEuX01fY3VycmVudCA9PSBfX2JpMS5fTV9lbmQpICAgICAgIC8vIF9fYmkyIGlzIHN1cAorCSAgcmV0dXJuIGZhbHNlOworCXJldHVybiAhKF9fYmkxLl9fY29tcCkoKl9fYmkyLCAqX19iaTEpOyAgICAgLy8gbm9ybWFsIGNvbXBhcmUKKyAgICAgIH0gCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBjbGFzcyBfVW5ndWFyZGVkSXRlcmF0b3IKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIC8qKiBAYnJpZWYgQ3VycmVudCBpdGVyYXRvciBfX3Bvc2l0aW9uLiAqLworICAgICAgX1JBSXRlciBfTV9jdXJyZW50OworICAgICAgLyoqIEBicmllZiBfQ29tcGFyZS4gKi8KKyAgICAgIF9Db21wYXJlJiBfX2NvbXA7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogQGJyaWVmIENvbnN0cnVjdG9yLiBTZXRzIGl0ZXJhdG9yIHRvIGJlZ2lubmluZyBvZiBzZXF1ZW5jZS4KKyAgICAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIHNlcXVlbmNlLgorICAgICAgKiAgQHBhcmFtIF9fZW5kIFVudXNlZCwgb25seSBmb3IgY29tcGF0aWJpbGl0eS4KKyAgICAgICogIEBwYXJhbSBfX2NvbXAgVW51c2VkLCBvbmx5IGZvciBjb21wYXRpYmlsaXR5LiAqLworICAgICAgX1VuZ3VhcmRlZEl0ZXJhdG9yKF9SQUl0ZXIgX19iZWdpbiwKKyAgICAgICAgICAgICAgICAJIF9SQUl0ZXIgLyogX19lbmQgKi8sIF9Db21wYXJlJiBfX2NvbXApCisgICAgICA6IF9NX2N1cnJlbnQoX19iZWdpbiksIF9fY29tcChfX2NvbXApCisgICAgICB7IH0KKworICAgICAgLyoqIEBicmllZiBQcmUtaW5jcmVtZW50IG9wZXJhdG9yLgorICAgICAgKiAgQHJldHVybiBUaGlzLiAqLworICAgICAgX1VuZ3VhcmRlZEl0ZXJhdG9yPF9SQUl0ZXIsIF9Db21wYXJlPiYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeworCSsrX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKiBAYnJpZWYgRGVyZWZlcmVuY2Ugb3BlcmF0b3IuCisgICAgICAqICBAcmV0dXJuIFJlZmVyZW5jZWQgZWxlbWVudC4gKi8KKyAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+Ojp2YWx1ZV90eXBlJgorICAgICAgb3BlcmF0b3IqKCkKKyAgICAgIHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CisKKyAgICAgIC8qKiBAYnJpZWYgQ29udmVydCB0byB3cmFwcGVkIGl0ZXJhdG9yLgorICAgICAgKiAgQHJldHVybiBXcmFwcGVkIGl0ZXJhdG9yLiAqLworICAgICAgb3BlcmF0b3IgX1JBSXRlcigpCisgICAgICB7IHJldHVybiBfTV9jdXJyZW50OyB9CisKKyAgICAgIC8qKiBAYnJpZWYgQ29tcGFyZSB0d28gZWxlbWVudHMgcmVmZXJlbmNlZCBieSB1bmd1YXJkZWQgaXRlcmF0b3JzLgorICAgICAgICogIEBwYXJhbSBfX2JpMSBGaXJzdCBpdGVyYXRvci4KKyAgICAgICAqICBAcGFyYW0gX19iaTIgU2Vjb25kIGl0ZXJhdG9yLgorICAgICAgICogIEByZXR1cm4gQGMgdHJ1ZSBpZiBsZXNzLiAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPChfVW5ndWFyZGVkSXRlcmF0b3I8X1JBSXRlciwgX0NvbXBhcmU+JiBfX2JpMSwKKwkJX1VuZ3VhcmRlZEl0ZXJhdG9yPF9SQUl0ZXIsIF9Db21wYXJlPiYgX19iaTIpCisgICAgICB7CisJLy8gTm9ybWFsIGNvbXBhcmUuCisJcmV0dXJuIChfX2JpMS5fX2NvbXApKCpfX2JpMSwgKl9fYmkyKTsKKyAgICAgIH0KKworICAgICAgLyoqIEBicmllZiBDb21wYXJlIHR3byBlbGVtZW50cyByZWZlcmVuY2VkIGJ5IHVuZ3VhcmRlZCBpdGVyYXRvcnMuCisgICAgICAgKiAgQHBhcmFtIF9fYmkxIEZpcnN0IGl0ZXJhdG9yLgorICAgICAgICogIEBwYXJhbSBfX2JpMiBTZWNvbmQgaXRlcmF0b3IuCisgICAgICAgKiAgQHJldHVybiBAYyBUcnVlIGlmIGxlc3MgZXF1YWwuICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I8PShfVW5ndWFyZGVkSXRlcmF0b3I8X1JBSXRlciwgX0NvbXBhcmU+JiBfX2JpMSwKKwkJIF9Vbmd1YXJkZWRJdGVyYXRvcjxfUkFJdGVyLCBfQ29tcGFyZT4mIF9fYmkyKQorICAgICAgeworCS8vIE5vcm1hbCBjb21wYXJlLgorCXJldHVybiAhKF9fYmkxLl9fY29tcCkoKl9fYmkyLCAqX19iaTEpOworICAgICAgfQorICAgIH07CisKKyAgLyoqIEBicmllZiBIaWdobHkgZWZmaWNpZW50IDMtd2F5IG1lcmdpbmcgcHJvY2VkdXJlLgorICAgKgorICAgKiBNZXJnaW5nIGlzIGRvbmUgd2l0aCB0aGUgYWxnb3JpdGhtIGltcGxlbWVudGF0aW9uIGRlc2NyaWJlZCBieSBQZXRlcgorICAgKiBTYW5kZXJzLiAgQmFzaWNhbGx5LCB0aGUgaWRlYSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG5lY2Vzc2FyeQorICAgKiBjb21wYXJpc29uIGFmdGVyIG1lcmdpbmcgYW4gZWxlbWVudC4gIFRoZSBpbXBsZW1lbnRhdGlvbiB0cmljaworICAgKiB0aGF0IG1ha2VzIHRoaXMgZmFzdCBpcyB0aGF0IHRoZSBvcmRlciBvZiB0aGUgc2VxdWVuY2VzIGlzIHN0b3JlZAorICAgKiBpbiB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciAodHJhbnNsYXRlZCBpbnRvIGxhYmVscyBpbiBDKyspLgorICAgKgorICAgKiBUaGlzIHdvcmtzIHdlbGwgZm9yIG1lcmdpbmcgdXAgdG8gNCBzZXF1ZW5jZXMuCisgICAqCisgICAqIE5vdGUgdGhhdCBtYWtpbmcgdGhlIG1lcmdpbmcgc3RhYmxlIGRvZXMgQGEgbm90IGNvbWUgYXQgYQorICAgKiBwZXJmb3JtYW5jZSBoaXQuCisgICAqCisgICAqIFdoZXRoZXIgdGhlIG1lcmdpbmcgaXMgZG9uZSBndWFyZGVkIG9yIHVuZ3VhcmRlZCBpcyBzZWxlY3RlZCBieSB0aGUKKyAgICogdXNlZCBpdGVyYXRvciBjbGFzcy4KKyAgICoKKyAgICogQHBhcmFtIF9fc2Vxc19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBpdGVyYXRvciBwYWlyIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW0gX19zZXFzX2VuZCBFbmQgaXRlcmF0b3Igb2YgaXRlcmF0b3IgcGFpciBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fdGFyZ2V0IEJlZ2luIGl0ZXJhdG9yIG9mIG91dHB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiBAcGFyYW0gX19sZW5ndGggTWF4aW11bSBsZW5ndGggdG8gbWVyZ2UsIGxlc3MgZXF1YWwgdGhhbiB0aGUKKyAgICogdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGF2YWlsYWJsZS4KKyAgICoKKyAgICogQHJldHVybiBFbmQgaXRlcmF0b3Igb2Ygb3V0cHV0IHNlcXVlbmNlLgorICAgKi8KKyAgdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWUgUkFJLCB0eXBlbmFtZSBDPiBjbGFzcyBpdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1JBSXRlckl0ZXJhdG9yLAorICAgICAgICAgICB0eXBlbmFtZSBfUkFJdGVyMywKKyAgICAgICAgICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlcjMKKyAgICBtdWx0aXdheV9tZXJnZV8zX3ZhcmlhbnQoX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCSAgICAgX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCQkgICAgIF9SQUl0ZXIzIF9fdGFyZ2V0LAorCQkJICAgICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgX0dMSUJDWFhfQ0FMTChfX2xlbmd0aCk7CisKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlckl0ZXJhdG9yPgorCTo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZQorCV9SQUl0ZXIxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICBpZiAoX19sZW5ndGggPT0gMCkKKwlyZXR1cm4gX190YXJnZXQ7CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgICBfRGlmZmVyZW5jZVRwIF9fb3JpZ19sZW5ndGggPSBfX2xlbmd0aDsKKyNlbmRpZgorCisgICAgICBpdGVyYXRvcjxfUkFJdGVyMSwgX0NvbXBhcmU+CisJX19zZXEwKF9fc2Vxc19iZWdpblswXS5maXJzdCwgX19zZXFzX2JlZ2luWzBdLnNlY29uZCwgX19jb21wKSwKKwlfX3NlcTEoX19zZXFzX2JlZ2luWzFdLmZpcnN0LCBfX3NlcXNfYmVnaW5bMV0uc2Vjb25kLCBfX2NvbXApLAorCV9fc2VxMihfX3NlcXNfYmVnaW5bMl0uZmlyc3QsIF9fc2Vxc19iZWdpblsyXS5zZWNvbmQsIF9fY29tcCk7CisKKyAgICAgIGlmIChfX3NlcTAgPD0gX19zZXExKQorCXsKKyAgICAgICAgICBpZiAoX19zZXExIDw9IF9fc2VxMikKKyAgICAgICAgICAgIGdvdG8gX19zMDEyOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIChfX3NlcTIgPCAgX19zZXEwKQorICAgICAgICAgICAgICBnb3RvIF9fczIwMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZ290byBfX3MwMjE7CisJfQorICAgICAgZWxzZQorCXsKKyAgICAgICAgICBpZiAoX19zZXExIDw9IF9fc2VxMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKF9fc2VxMCA8PSBfX3NlcTIpCisgICAgICAgIAlnb3RvIF9fczEwMjsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAJZ290byBfX3MxMjA7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byBfX3MyMTA7CisJfQorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9NRVJHRV8zX0NBU0UoX19hLCBfX2IsIF9fYywgX19jMCwgX19jMSkgXAorICAgICAgX19zICMjIF9fYSAjIyBfX2IgIyMgX19jIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSpfX3RhcmdldCA9ICpfX3NlcSAjIyBfX2E7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKytfX3RhcmdldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwktLV9fbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSsrX19zZXEgIyMgX19hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKF9fbGVuZ3RoID09IDApIGdvdG8gX19maW5pc2g7ICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoX19zZXEgIyMgX19hIF9fYzAgX19zZXEgIyMgX19iKSBnb3RvIF9fcyAjIyBfX2EgIyMgX19iICMjIF9fYzsgXAorCWlmIChfX3NlcSAjIyBfX2EgX19jMSBfX3NlcSAjIyBfX2MpIGdvdG8gX19zICMjIF9fYiAjIyBfX2EgIyMgX19jOyBcCisJZ290byBfX3MgIyMgX19iICMjIF9fYyAjIyBfX2E7CisKKyAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX01FUkdFXzNfQ0FTRSgwLCAxLCAyLCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfM19DQVNFKDEsIDIsIDAsIDw9LCA8ICk7CisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9NRVJHRV8zX0NBU0UoMiwgMCwgMSwgPCAsIDwgKTsKKyAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX01FUkdFXzNfQ0FTRSgxLCAwLCAyLCA8ICwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfM19DQVNFKDAsIDIsIDEsIDw9LCA8PSk7CisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9NRVJHRV8zX0NBU0UoMiwgMSwgMCwgPCAsIDwgKTsKKworI3VuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX01FUkdFXzNfQ0FTRQorCisgICAgX19maW5pc2g6CisgICAgICA7CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKAorCSgoX1JBSXRlcjEpX19zZXEwIC0gX19zZXFzX2JlZ2luWzBdLmZpcnN0KSArCisJKChfUkFJdGVyMSlfX3NlcTEgLSBfX3NlcXNfYmVnaW5bMV0uZmlyc3QpICsKKwkoKF9SQUl0ZXIxKV9fc2VxMiAtIF9fc2Vxc19iZWdpblsyXS5maXJzdCkKKwk9PSBfX29yaWdfbGVuZ3RoKTsKKyNlbmRpZgorCisgICAgICBfX3NlcXNfYmVnaW5bMF0uZmlyc3QgPSBfX3NlcTA7CisgICAgICBfX3NlcXNfYmVnaW5bMV0uZmlyc3QgPSBfX3NlcTE7CisgICAgICBfX3NlcXNfYmVnaW5bMl0uZmlyc3QgPSBfX3NlcTI7CisKKyAgICAgIHJldHVybiBfX3RhcmdldDsKKyAgICB9CisKKyAgLyoqCisgICAqIEBicmllZiBIaWdobHkgZWZmaWNpZW50IDQtd2F5IG1lcmdpbmcgcHJvY2VkdXJlLgorICAgKgorICAgKiBNZXJnaW5nIGlzIGRvbmUgd2l0aCB0aGUgYWxnb3JpdGhtIGltcGxlbWVudGF0aW9uIGRlc2NyaWJlZCBieSBQZXRlcgorICAgKiBTYW5kZXJzLiBCYXNpY2FsbHksIHRoZSBpZGVhIGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgbmVjZXNzYXJ5CisgICAqIGNvbXBhcmlzb24gYWZ0ZXIgbWVyZ2luZyBhbiBlbGVtZW50LiAgVGhlIGltcGxlbWVudGF0aW9uIHRyaWNrCisgICAqIHRoYXQgbWFrZXMgdGhpcyBmYXN0IGlzIHRoYXQgdGhlIG9yZGVyIG9mIHRoZSBzZXF1ZW5jZXMgaXMgc3RvcmVkCisgICAqIGluIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyICh0cmFuc2xhdGVkIGludG8gZ290byBsYWJlbHMgaW4gQysrKS4KKyAgICoKKyAgICogVGhpcyB3b3JrcyB3ZWxsIGZvciBtZXJnaW5nIHVwIHRvIDQgc2VxdWVuY2VzLgorICAgKgorICAgKiBOb3RlIHRoYXQgbWFraW5nIHRoZSBtZXJnaW5nIHN0YWJsZSBkb2VzIEBhIG5vdCBjb21lIGF0IGEKKyAgICogcGVyZm9ybWFuY2UgaGl0LgorICAgKgorICAgKiBXaGV0aGVyIHRoZSBtZXJnaW5nIGlzIGRvbmUgZ3VhcmRlZCBvciB1bmd1YXJkZWQgaXMgc2VsZWN0ZWQgYnkgdGhlCisgICAqIHVzZWQgaXRlcmF0b3IgY2xhc3MuCisgICAqCisgICAqIEBwYXJhbSBfX3NlcXNfYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaXRlcmF0b3IgcGFpciBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fc2Vxc19lbmQgRW5kIGl0ZXJhdG9yIG9mIGl0ZXJhdG9yIHBhaXIgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX3RhcmdldCBCZWdpbiBpdGVyYXRvciBvZiBvdXRwdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICogQHBhcmFtIF9fbGVuZ3RoIE1heGltdW0gbGVuZ3RoIHRvIG1lcmdlLCBsZXNzIGVxdWFsIHRoYW4gdGhlCisgICAqIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBhdmFpbGFibGUuCisgICAqCisgICAqIEByZXR1cm4gRW5kIGl0ZXJhdG9yIG9mIG91dHB1dCBzZXF1ZW5jZS4KKyAgICovCisgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lIFJBSSwgdHlwZW5hbWUgQz4gY2xhc3MgaXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9SQUl0ZXJJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1JBSXRlcjMsCisgICAgICAgICAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXIzCisgICAgbXVsdGl3YXlfbWVyZ2VfNF92YXJpYW50KF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUkFJdGVyMyBfX3RhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19sZW5ndGgpOworICAgICAgdHlwZWRlZiBfRGlmZmVyZW5jZVRwIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVySXRlcmF0b3I+CisJOjp2YWx1ZV90eXBlOjpmaXJzdF90eXBlCisJX1JBSXRlcjE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXIxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIGl0ZXJhdG9yPF9SQUl0ZXIxLCBfQ29tcGFyZT4KKwlfX3NlcTAoX19zZXFzX2JlZ2luWzBdLmZpcnN0LCBfX3NlcXNfYmVnaW5bMF0uc2Vjb25kLCBfX2NvbXApLAorCV9fc2VxMShfX3NlcXNfYmVnaW5bMV0uZmlyc3QsIF9fc2Vxc19iZWdpblsxXS5zZWNvbmQsIF9fY29tcCksCisJX19zZXEyKF9fc2Vxc19iZWdpblsyXS5maXJzdCwgX19zZXFzX2JlZ2luWzJdLnNlY29uZCwgX19jb21wKSwKKwlfX3NlcTMoX19zZXFzX2JlZ2luWzNdLmZpcnN0LCBfX3NlcXNfYmVnaW5bM10uc2Vjb25kLCBfX2NvbXApOworCisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX0RFQ0lTSU9OKF9fYSwgX19iLCBfX2MsIF9fZCkgeyAgXAorCWlmIChfX3NlcSAjIyBfX2QgPCBfX3NlcSAjIyBfX2EpCQkgIFwKKwkgIGdvdG8gX19zICMjIF9fZCAjIyBfX2EgIyMgX19iICMjIF9fYzsJCSAgXAorCWlmIChfX3NlcSAjIyBfX2QgPCBfX3NlcSAjIyBfX2IpCQkgIFwKKwkgIGdvdG8gX19zICMjIF9fYSAjIyBfX2QgIyMgX19iICMjIF9fYzsJCSAgXAorCWlmIChfX3NlcSAjIyBfX2QgPCBfX3NlcSAjIyBfX2MpCQkgIFwKKwkgIGdvdG8gX19zICMjIF9fYSAjIyBfX2IgIyMgX19kICMjIF9fYzsJCSAgXAorCWdvdG8gX19zICMjIF9fYSAjIyBfX2IgIyMgX19jICMjIF9fZDsgIH0KKworICAgICAgaWYgKF9fc2VxMCA8PSBfX3NlcTEpCisJeworICAgICAgICAgIGlmIChfX3NlcTEgPD0gX19zZXEyKQorICAgICAgICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfREVDSVNJT04oMCwxLDIsMykKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgaWYgKF9fc2VxMiA8IF9fc2VxMCkKKyAgICAgICAgCV9HTElCQ1hYX1BBUkFMTEVMX0RFQ0lTSU9OKDIsMCwxLDMpCisgICAgICAgIAllbHNlCisgICAgICAgICAgICAgICAgICBfR0xJQkNYWF9QQVJBTExFTF9ERUNJU0lPTigwLDIsMSwzKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICBlbHNlCisJeworICAgICAgICAgIGlmIChfX3NlcTEgPD0gX19zZXEyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoX19zZXEwIDw9IF9fc2VxMikKKyAgICAgICAgCV9HTElCQ1hYX1BBUkFMTEVMX0RFQ0lTSU9OKDEsMCwyLDMpCisgICAgICAgIAllbHNlCisgICAgICAgICAgICAgICAgICBfR0xJQkNYWF9QQVJBTExFTF9ERUNJU0lPTigxLDIsMCwzKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfREVDSVNJT04oMiwxLDAsMykKKyAgICAgICAgICAgICAgfQorCisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX01FUkdFXzRfQ0FTRShfX2EsIF9fYiwgX19jLCBfX2QsICBcCisJCQkJICAgICAgIF9fYzAsIF9fYzEsIF9fYzIpICAgIFwKKyAgICAgIF9fcyAjIyBfX2EgIyMgX19iICMjIF9fYyAjIyBfX2Q6ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChfX2xlbmd0aCA9PSAwKSBnb3RvIF9fZmluaXNoOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICpfX3RhcmdldCA9ICpfX3NlcSAjIyBfX2E7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICsrX190YXJnZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC0tX19sZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICsrX19zZXEgIyMgX19hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChfX3NlcSAjIyBfX2EgX19jMCBfX3NlcSAjIyBfX2IpICAgICAgXAorCWdvdG8gX19zICMjIF9fYSAjIyBfX2IgIyMgX19jICMjIF9fZDsgIFwKKyAgICAgIGlmIChfX3NlcSAjIyBfX2EgX19jMSBfX3NlcSAjIyBfX2MpICAgICAgXAorCWdvdG8gX19zICMjIF9fYiAjIyBfX2EgIyMgX19jICMjIF9fZDsgIFwKKyAgICAgIGlmIChfX3NlcSAjIyBfX2EgX19jMiBfX3NlcSAjIyBfX2QpICAgICAgXAorCWdvdG8gX19zICMjIF9fYiAjIyBfX2MgIyMgX19hICMjIF9fZDsgIFwKKyAgICAgIGdvdG8gX19zICMjIF9fYiAjIyBfX2MgIyMgX19kICMjIF9fYTsKKworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDAsIDEsIDIsIDMsIDw9LCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDAsIDEsIDMsIDIsIDw9LCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDAsIDIsIDEsIDMsIDw9LCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDAsIDIsIDMsIDEsIDw9LCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDAsIDMsIDEsIDIsIDw9LCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDAsIDMsIDIsIDEsIDw9LCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDEsIDAsIDIsIDMsIDwgLCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDEsIDAsIDMsIDIsIDwgLCA8PSwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDEsIDIsIDAsIDMsIDw9LCA8ICwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDEsIDIsIDMsIDAsIDw9LCA8PSwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDEsIDMsIDAsIDIsIDw9LCA8ICwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDEsIDMsIDIsIDAsIDw9LCA8PSwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDIsIDAsIDEsIDMsIDwgLCA8ICwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDIsIDAsIDMsIDEsIDwgLCA8PSwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDIsIDEsIDAsIDMsIDwgLCA8ICwgPD0pOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDIsIDEsIDMsIDAsIDwgLCA8PSwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDIsIDMsIDAsIDEsIDw9LCA8ICwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDIsIDMsIDEsIDAsIDw9LCA8ICwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDMsIDAsIDEsIDIsIDwgLCA8ICwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDMsIDAsIDIsIDEsIDwgLCA8ICwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDMsIDEsIDAsIDIsIDwgLCA8ICwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDMsIDEsIDIsIDAsIDwgLCA8ICwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDMsIDIsIDAsIDEsIDwgLCA8ICwgPCApOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFKDMsIDIsIDEsIDAsIDwgLCA8ICwgPCApOworCisjdW5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfTUVSR0VfNF9DQVNFCisjdW5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfREVDSVNJT04KKworICAgIF9fZmluaXNoOgorICAgICAgOworCisgICAgICBfX3NlcXNfYmVnaW5bMF0uZmlyc3QgPSBfX3NlcTA7CisgICAgICBfX3NlcXNfYmVnaW5bMV0uZmlyc3QgPSBfX3NlcTE7CisgICAgICBfX3NlcXNfYmVnaW5bMl0uZmlyc3QgPSBfX3NlcTI7CisgICAgICBfX3NlcXNfYmVnaW5bM10uZmlyc3QgPSBfX3NlcTM7CisKKyAgICAgIHJldHVybiBfX3RhcmdldDsKKyAgICB9CisKKyAgLyoqIEBicmllZiBNdWx0aS13YXkgbWVyZ2luZyBwcm9jZWR1cmUgZm9yIGEgaGlnaCBicmFuY2hpbmcgZmFjdG9yLAorICAgKiAgICAgICAgIGd1YXJkZWQgY2FzZS4KKyAgICoKKyAgICogVGhpcyBtZXJnaW5nIHZhcmlhbnQgdXNlcyBhIExvc2VyVHJlZSBjbGFzcyBhcyBzZWxlY3RlZCBieSA8dHQ+X0xUPC90dD4uCisgICAqCisgICAqIFN0YWJpbGl0eSBpcyBzZWxlY3RlZCB0aHJvdWdoIHRoZSB1c2VkIExvc2VyVHJlZSBjbGFzcyA8dHQ+X0xUPC90dD4uCisgICAqCisgICAqIEF0IGxlYXN0IG9uZSBub24tZW1wdHkgc2VxdWVuY2UgaXMgcmVxdWlyZWQuCisgICAqCisgICAqIEBwYXJhbSBfX3NlcXNfYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaXRlcmF0b3IgcGFpciBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fc2Vxc19lbmQgRW5kIGl0ZXJhdG9yIG9mIGl0ZXJhdG9yIHBhaXIgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX3RhcmdldCBCZWdpbiBpdGVyYXRvciBvZiBvdXRwdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICogQHBhcmFtIF9fbGVuZ3RoIE1heGltdW0gbGVuZ3RoIHRvIG1lcmdlLCBsZXNzIGVxdWFsIHRoYW4gdGhlCisgICAqIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBhdmFpbGFibGUuCisgICAqCisgICAqIEByZXR1cm4gRW5kIGl0ZXJhdG9yIG9mIG91dHB1dCBzZXF1ZW5jZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9MVCwKKyAgICAgICAgICAgdHlwZW5hbWUgX1JBSXRlckl0ZXJhdG9yLAorICAgICAgICAgICB0eXBlbmFtZSBfUkFJdGVyMywKKyAgICAgICAgICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlcjMKKyAgICBtdWx0aXdheV9tZXJnZV9sb3Nlcl90cmVlKF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUkFJdGVySXRlcmF0b3IgX19zZXFzX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SQUl0ZXIzIF9fdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19sZW5ndGgpCisKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXJJdGVyYXRvcj4KKwk6OmRpZmZlcmVuY2VfdHlwZSBfU2VxTnVtYmVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVySXRlcmF0b3I+CisJOjp2YWx1ZV90eXBlOjpmaXJzdF90eXBlCisJX1JBSXRlcjE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXIxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIF9TZXFOdW1iZXIgX19rID0gc3RhdGljX2Nhc3Q8X1NlcU51bWJlcj4oX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbik7CisKKyAgICAgIF9MVCBfX2x0KF9faywgX19jb21wKTsKKworICAgICAgLy8gRGVmYXVsdCB2YWx1ZSBmb3IgcG90ZW50aWFsbHkgbm9uLWRlZmF1bHQtY29uc3RydWN0aWJsZSB0eXBlcy4KKyAgICAgIF9WYWx1ZVR5cGUqIF9fYXJiaXRyYXJ5X2VsZW1lbnQgPSAwOworCisgICAgICBmb3IgKF9TZXFOdW1iZXIgX190ID0gMDsgX190IDwgX19rOyArK19fdCkKKwl7CisgICAgICAgICAgaWYoIV9fYXJiaXRyYXJ5X2VsZW1lbnQKKwkgICAgICYmIF9HTElCQ1hYX1BBUkFMTEVMX0xFTkdUSChfX3NlcXNfYmVnaW5bX190XSkgPiAwKQorICAgICAgICAgICAgX19hcmJpdHJhcnlfZWxlbWVudCA9ICYoKl9fc2Vxc19iZWdpbltfX3RdLmZpcnN0KTsKKwl9CisKKyAgICAgIGZvciAoX1NlcU51bWJlciBfX3QgPSAwOyBfX3QgPCBfX2s7ICsrX190KQorCXsKKyAgICAgICAgICBpZiAoX19zZXFzX2JlZ2luW19fdF0uZmlyc3QgPT0gX19zZXFzX2JlZ2luW19fdF0uc2Vjb25kKQorICAgICAgICAgICAgX19sdC5fX2luc2VydF9zdGFydCgqX19hcmJpdHJhcnlfZWxlbWVudCwgX190LCB0cnVlKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBfX2x0Ll9faW5zZXJ0X3N0YXJ0KCpfX3NlcXNfYmVnaW5bX190XS5maXJzdCwgX190LCBmYWxzZSk7CisJfQorCisgICAgICBfX2x0Ll9faW5pdCgpOworCisgICAgICBfU2VxTnVtYmVyIF9fc291cmNlOworCisgICAgICBmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX2kgPSAwOyBfX2kgPCBfX2xlbmd0aDsgKytfX2kpCisJeworICAgICAgICAgIC8vdGFrZSBvdXQKKyAgICAgICAgICBfX3NvdXJjZSA9IF9fbHQuX19nZXRfbWluX3NvdXJjZSgpOworCisgICAgICAgICAgKihfX3RhcmdldCsrKSA9ICooX19zZXFzX2JlZ2luW19fc291cmNlXS5maXJzdCsrKTsKKworICAgICAgICAgIC8vIEZlZWQuCisgICAgICAgICAgaWYgKF9fc2Vxc19iZWdpbltfX3NvdXJjZV0uZmlyc3QgPT0gX19zZXFzX2JlZ2luW19fc291cmNlXS5zZWNvbmQpCisgICAgICAgICAgICBfX2x0Ll9fZGVsZXRlX21pbl9pbnNlcnQoKl9fYXJiaXRyYXJ5X2VsZW1lbnQsIHRydWUpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFJlcGxhY2UgZnJvbSBzYW1lIF9fc291cmNlLgorICAgICAgICAgICAgX19sdC5fX2RlbGV0ZV9taW5faW5zZXJ0KCpfX3NlcXNfYmVnaW5bX19zb3VyY2VdLmZpcnN0LCBmYWxzZSk7CisJfQorCisgICAgICByZXR1cm4gX190YXJnZXQ7CisgICAgfQorCisgIC8qKiBAYnJpZWYgTXVsdGktd2F5IG1lcmdpbmcgcHJvY2VkdXJlIGZvciBhIGhpZ2ggYnJhbmNoaW5nIGZhY3RvciwKKyAgICogICAgICAgICB1bmd1YXJkZWQgY2FzZS4KKyAgICoKKyAgICogTWVyZ2luZyBpcyBkb25lIHVzaW5nIHRoZSBMb3NlclRyZWUgY2xhc3MgPHR0Pl9MVDwvdHQ+LgorICAgKgorICAgKiBTdGFiaWxpdHkgaXMgc2VsZWN0ZWQgYnkgdGhlIHVzZWQgTG9zZXJUcmVlcy4KKyAgICoKKyAgICogQHByZSBObyBpbnB1dCB3aWxsIHJ1biBvdXQgb2YgZWxlbWVudHMgZHVyaW5nIHRoZSBtZXJnZS4KKyAgICoKKyAgICogQHBhcmFtIF9fc2Vxc19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBpdGVyYXRvciBwYWlyIGlucHV0IHNlcXVlbmNlLgorICAgKiBAcGFyYW0gX19zZXFzX2VuZCBFbmQgaXRlcmF0b3Igb2YgaXRlcmF0b3IgcGFpciBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fdGFyZ2V0IEJlZ2luIGl0ZXJhdG9yIG9mIG91dHB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiBAcGFyYW0gX19sZW5ndGggTWF4aW11bSBsZW5ndGggdG8gbWVyZ2UsIGxlc3MgZXF1YWwgdGhhbiB0aGUKKyAgICogdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGF2YWlsYWJsZS4KKyAgICoKKyAgICogQHJldHVybiBFbmQgaXRlcmF0b3Igb2Ygb3V0cHV0IHNlcXVlbmNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0xULAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyMywKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyMworICAgIG11bHRpd2F5X21lcmdlX2xvc2VyX3RyZWVfdW5ndWFyZGVkKF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkJCV9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJCQlfUkFJdGVyMyBfX3RhcmdldCwKKyAgICAgICBjb25zdCB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwKKwkgIF9SQUl0ZXJJdGVyYXRvcj46OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGU+Ojp2YWx1ZV90eXBlJgorCQkJCQlfX3NlbnRpbmVsLAorCQkJCQlfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLAorCQkJCQlfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgX0dMSUJDWFhfQ0FMTChfX2xlbmd0aCkKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlckl0ZXJhdG9yPgorCTo6ZGlmZmVyZW5jZV90eXBlIF9TZXFOdW1iZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXJJdGVyYXRvcj4KKwk6OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGUKKwlfUkFJdGVyMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcjE+Ojp2YWx1ZV90eXBlCisJX1ZhbHVlVHlwZTsKKworICAgICAgX1NlcU51bWJlciBfX2sgPSBfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luOworCisgICAgICBfTFQgX19sdChfX2ssIF9fc2VudGluZWwsIF9fY29tcCk7CisKKyAgICAgIGZvciAoX1NlcU51bWJlciBfX3QgPSAwOyBfX3QgPCBfX2s7ICsrX190KQorCXsKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9fc2Vxc19iZWdpbltfX3RdLmZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IF9fc2Vxc19iZWdpbltfX3RdLnNlY29uZCk7CisjZW5kaWYKKyAgICAgICAgICBfX2x0Ll9faW5zZXJ0X3N0YXJ0KCpfX3NlcXNfYmVnaW5bX190XS5maXJzdCwgX190LCBmYWxzZSk7CisJfQorCisgICAgICBfX2x0Ll9faW5pdCgpOworCisgICAgICBfU2VxTnVtYmVyIF9fc291cmNlOworCisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9faSA9IDA7CisjZW5kaWYKKworICAgICAgX1JBSXRlcjMgX190YXJnZXRfZW5kID0gX190YXJnZXQgKyBfX2xlbmd0aDsKKyAgICAgIHdoaWxlIChfX3RhcmdldCA8IF9fdGFyZ2V0X2VuZCkKKwl7CisgICAgICAgICAgLy8gVGFrZSBvdXQuCisgICAgICAgICAgX19zb3VyY2UgPSBfX2x0Ll9fZ2V0X21pbl9zb3VyY2UoKTsKKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKyAgICAgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoMCA8PSBfX3NvdXJjZSAmJiBfX3NvdXJjZSA8IF9fayk7CisgICAgICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9faSA9PSAwCisgICAgICAgICAgICAgIHx8ICFfX2NvbXAoKihfX3NlcXNfYmVnaW5bX19zb3VyY2VdLmZpcnN0KSwgKihfX3RhcmdldCAtIDEpKSk7CisjZW5kaWYKKworICAgICAgICAgIC8vIEZlZWQuCisgICAgICAgICAgKihfX3RhcmdldCsrKSA9ICooX19zZXFzX2JlZ2luW19fc291cmNlXS5maXJzdCsrKTsKKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKyAgICAgICAgICArK19faTsKKyNlbmRpZgorICAgICAgICAgIC8vIFJlcGxhY2UgZnJvbSBzYW1lIF9fc291cmNlLgorICAgICAgICAgIF9fbHQuX19kZWxldGVfbWluX2luc2VydCgqX19zZXFzX2JlZ2luW19fc291cmNlXS5maXJzdCwgZmFsc2UpOworCX0KKworICAgICAgcmV0dXJuIF9fdGFyZ2V0OworICAgIH0KKworCisgIC8qKiBAYnJpZWYgTXVsdGktd2F5IG1lcmdpbmcgcHJvY2VkdXJlIGZvciBhIGhpZ2ggYnJhbmNoaW5nIGZhY3RvciwKKyAgICogICAgICAgICByZXF1aXJpbmcgc2VudGluZWxzIHRvIGV4aXN0LgorICAgKgorICAgKiBAdHBhcmFtIFVuZ3VhcmRlZExvc2VyVHJlZSBfTG9zZXIgVHJlZSB2YXJpYW50IHRvIHVzZSBmb3IgdGhlIHVuZ3VhcmRlZAorICAgKiAgIG1lcmdpbmcuCisgICAqCisgICAqIEBwYXJhbSBfX3NlcXNfYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaXRlcmF0b3IgcGFpciBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fc2Vxc19lbmQgRW5kIGl0ZXJhdG9yIG9mIGl0ZXJhdG9yIHBhaXIgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX3RhcmdldCBCZWdpbiBpdGVyYXRvciBvZiBvdXRwdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICogQHBhcmFtIF9fbGVuZ3RoIE1heGltdW0gbGVuZ3RoIHRvIG1lcmdlLCBsZXNzIGVxdWFsIHRoYW4gdGhlCisgICAqIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBhdmFpbGFibGUuCisgICAqCisgICAqIEByZXR1cm4gRW5kIGl0ZXJhdG9yIG9mIG91dHB1dCBzZXF1ZW5jZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIFVuZ3VhcmRlZExvc2VyVHJlZSwKKwkgICB0eXBlbmFtZSBfUkFJdGVySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlcjMsCisJICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyMworICAgIG11bHRpd2F5X21lcmdlX2xvc2VyX3RyZWVfc2VudGluZWwoX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCQkgICAgICAgX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCQkJICAgICAgIF9SQUl0ZXIzIF9fdGFyZ2V0LAorICAgICAgY29uc3QgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8CisJX1JBSXRlckl0ZXJhdG9yPjo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZT46OnZhbHVlX3R5cGUmCisJCQkJICAgICAgIF9fc2VudGluZWwsCisJCQkJICAgICAgIF9EaWZmZXJlbmNlVHAgX19sZW5ndGgsCisJCQkJICAgICAgIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fbGVuZ3RoKQorCisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVySXRlcmF0b3I+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVySXRlcmF0b3I+CisJOjp2YWx1ZV90eXBlOjpmaXJzdF90eXBlCisJX1JBSXRlcjE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXIxPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisKKyAgICAgIF9SQUl0ZXIzIF9fdGFyZ2V0X2VuZDsKKworICAgICAgZm9yIChfUkFJdGVySXRlcmF0b3IgX19zID0gX19zZXFzX2JlZ2luOyBfX3MgIT0gX19zZXFzX2VuZDsgKytfX3MpCisJLy8gTW92ZSB0aGUgc2VxdWVuY2UgZW5kcyB0byB0aGUgc2VudGluZWwuICBUaGlzIGhhcyB0aGUKKwkvLyBlZmZlY3QgdGhhdCB0aGUgc2VudGluZWwgYXBwZWFycyB0byBiZSB3aXRoaW4gdGhlIHNlcXVlbmNlLiBUaGVuLAorCS8vIHdlIGNhbiB1c2UgdGhlIHVuZ3VhcmRlZCB2YXJpYW50IGlmIHdlIG1lcmdlIG91dCBhcyBtYW55CisJLy8gbm9uLXNlbnRpbmVsIGVsZW1lbnRzIGFzIHdlIGhhdmUuCisJKysoKCpfX3MpLnNlY29uZCk7CisKKyAgICAgIF9fdGFyZ2V0X2VuZCA9IG11bHRpd2F5X21lcmdlX2xvc2VyX3RyZWVfdW5ndWFyZGVkPFVuZ3VhcmRlZExvc2VyVHJlZT4KKwkoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwgX19zZW50aW5lbCwgX19sZW5ndGgsIF9fY29tcCk7CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX190YXJnZXRfZW5kID09IF9fdGFyZ2V0ICsgX19sZW5ndGgpOworICAgICAgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9faXNfc29ydGVkKF9fdGFyZ2V0LCBfX3RhcmdldF9lbmQsIF9fY29tcCkpOworI2VuZGlmCisKKyAgICAgIC8vIFJlc3RvcmUgdGhlIHNlcXVlbmNlIGVuZHMgc28gdGhlIHNlbnRpbmVscyBhcmUgbm90IGNvbnRhaW5lZCBpbiB0aGUKKyAgICAgIC8vIHNlcXVlbmNlIGFueSBtb3JlIChzZWUgY29tbWVudCBpbiBsb29wIGFib3ZlKS4KKyAgICAgIGZvciAoX1JBSXRlckl0ZXJhdG9yIF9fcyA9IF9fc2Vxc19iZWdpbjsgX19zICE9IF9fc2Vxc19lbmQ7ICsrX19zKQorCS0tKCgqX19zKS5zZWNvbmQpOworCisgICAgICByZXR1cm4gX190YXJnZXRfZW5kOworICAgIH0KKworICAvKioKKyAgICogQGJyaWVmIFRyYWl0cyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgbG9zZXIgdHJlZSBzaG91bGQKKyAgICogICB1c2UgcG9pbnRlcnMgb3IgY29waWVzLgorICAgKgorICAgKiBUaGUgZmllbGQgIl9NX3VzZV9wb2ludGVyIiBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHVzZSBwb2ludGVycworICAgKiBpbiBoZSBsb3NlciB0cmVlcyBvciB3aGV0aGVyIHRvIGNvcHkgdGhlIHZhbHVlcyBpbnRvIHRoZSBsb3NlciB0cmVlLgorICAgKgorICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byB1c2UgcG9pbnRlcnMgaWYgdGhlIGRhdGEgdHlwZSBpcyA0IHRpbWVzIGFzCisgICAqIGJpZyBhcyB0aGUgcG9pbnRlciB0byBpdC4KKyAgICoKKyAgICogU3BlY2lhbGl6ZSBmb3IgeW91ciBkYXRhIHR5cGUgdG8gY3VzdG9taXplIHRoZSBiZWhhdmlvci4KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICogICB0ZW1wbGF0ZTw+CisgICAqICAgc3RydWN0IF9Mb3NlclRyZWVUcmFpdHM8aW50PgorICAgKiAgIHsgc3RhdGljIGNvbnN0IGJvb2wgX01fdXNlX3BvaW50ZXIgPSBmYWxzZTsgfTsKKyAgICoKKyAgICogICB0ZW1wbGF0ZTw+CisgICAqICAgc3RydWN0IF9Mb3NlclRyZWVUcmFpdHM8aGVhdnl3ZWlnaHRfdHlwZT4KKyAgICogICB7IHN0YXRpYyBjb25zdCBib29sIF9NX3VzZV9wb2ludGVyID0gdHJ1ZTsgfTsKKyAgICoKKyAgICogQHBhcmFtIF9UcCB0eXBlIHRvIGdpdmUgdGhlIGxvc2VyIHRyZWUgdHJhaXRzIGZvci4KKyAgICovCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9Mb3NlclRyZWVUcmFpdHMKKyAgICB7CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBUcnVlIGlmZiB0byB1c2UgcG9pbnRlcnMgaW5zdGVhZCBvZiB2YWx1ZXMgaW4gbG9zZXIgdHJlZXMuCisgICAgICAgKgorICAgICAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gdXNlIHBvaW50ZXJzIGlmIHRoZSBkYXRhIHR5cGUgaXMgZm91cgorICAgICAgICogdGltZXMgYXMgYmlnIGFzIHRoZSBwb2ludGVyIHRvIGl0LgorICAgICAgICovCisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfTV91c2VfcG9pbnRlciA9IChzaXplb2YoX1RwKSA+IDQgKiBzaXplb2YoX1RwKikpOworICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBTd2l0Y2ggZm9yIDMtd2F5IG1lcmdpbmcgd2l0aCBfX3NlbnRpbmVscyB0dXJuZWQgb2ZmLgorICAgKgorICAgKiBOb3RlIHRoYXQgMy13YXkgbWVyZ2luZyBpcyBhbHdheXMgc3RhYmxlIQorICAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfX3NlbnRpbmVscyAvKmRlZmF1bHQgPT0gZmFsc2UqLywKKwkgICB0eXBlbmFtZSBfUkFJdGVySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlcjMsCisJICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBzdHJ1Y3QgX19tdWx0aXdheV9tZXJnZV8zX3ZhcmlhbnRfc2VudGluZWxfc3dpdGNoCisgICAgeworICAgICAgX1JBSXRlcjMKKyAgICAgIG9wZXJhdG9yKCkoX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJIF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkgX1JBSXRlcjMgX190YXJnZXQsCisJCSBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXApCisgICAgICB7IHJldHVybiBtdWx0aXdheV9tZXJnZV8zX3ZhcmlhbnQ8X0d1YXJkZWRJdGVyYXRvcj4KKwkgIChfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LCBfX2xlbmd0aCwgX19jb21wKTsgfQorICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBTd2l0Y2ggZm9yIDMtd2F5IG1lcmdpbmcgd2l0aCBfX3NlbnRpbmVscyB0dXJuZWQgb24uCisgICAqCisgICAqIE5vdGUgdGhhdCAzLXdheSBtZXJnaW5nIGlzIGFsd2F5cyBzdGFibGUhCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlcjMsCisJICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBzdHJ1Y3QgX19tdWx0aXdheV9tZXJnZV8zX3ZhcmlhbnRfc2VudGluZWxfc3dpdGNoPHRydWUsIF9SQUl0ZXJJdGVyYXRvciwKKwkJCQkJCSAgICAgIF9SQUl0ZXIzLCBfRGlmZmVyZW5jZVRwLAorCQkJCQkJICAgICAgX0NvbXBhcmU+CisgICAgeworICAgICAgX1JBSXRlcjMKKyAgICAgIG9wZXJhdG9yKCkoX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJIF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkgX1JBSXRlcjMgX190YXJnZXQsCisJCSBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXApCisgICAgICB7IHJldHVybiBtdWx0aXdheV9tZXJnZV8zX3ZhcmlhbnQ8X1VuZ3VhcmRlZEl0ZXJhdG9yPgorCSAgKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsIF9fbGVuZ3RoLCBfX2NvbXApOyB9CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFN3aXRjaCBmb3IgNC13YXkgbWVyZ2luZyB3aXRoIF9fc2VudGluZWxzIHR1cm5lZCBvZmYuCisgICAqCisgICAqIE5vdGUgdGhhdCA0LXdheSBtZXJnaW5nIGlzIGFsd2F5cyBzdGFibGUhCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9fc2VudGluZWxzIC8qZGVmYXVsdCA9PSBmYWxzZSovLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyMywKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHN0cnVjdCBfX211bHRpd2F5X21lcmdlXzRfdmFyaWFudF9zZW50aW5lbF9zd2l0Y2gKKyAgICB7CisgICAgICBfUkFJdGVyMworICAgICAgb3BlcmF0b3IoKShfUkFJdGVySXRlcmF0b3IgX19zZXFzX2JlZ2luLAorCQkgX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCSBfUkFJdGVyMyBfX3RhcmdldCwKKwkJIF9EaWZmZXJlbmNlVHAgX19sZW5ndGgsIF9Db21wYXJlIF9fY29tcCkKKyAgICAgIHsgcmV0dXJuIG11bHRpd2F5X21lcmdlXzRfdmFyaWFudDxfR3VhcmRlZEl0ZXJhdG9yPgorCSAgKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsIF9fbGVuZ3RoLCBfX2NvbXApOyB9CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFN3aXRjaCBmb3IgNC13YXkgbWVyZ2luZyB3aXRoIF9fc2VudGluZWxzIHR1cm5lZCBvbi4KKyAgICoKKyAgICogTm90ZSB0aGF0IDQtd2F5IG1lcmdpbmcgaXMgYWx3YXlzIHN0YWJsZSEKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyMywKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHN0cnVjdCBfX211bHRpd2F5X21lcmdlXzRfdmFyaWFudF9zZW50aW5lbF9zd2l0Y2g8dHJ1ZSwgX1JBSXRlckl0ZXJhdG9yLAorCQkJCQkJICAgICAgX1JBSXRlcjMsIF9EaWZmZXJlbmNlVHAsCisJCQkJCQkgICAgICBfQ29tcGFyZT4KKyAgICB7CisgICAgICBfUkFJdGVyMworICAgICAgb3BlcmF0b3IoKShfUkFJdGVySXRlcmF0b3IgX19zZXFzX2JlZ2luLAorCQkgX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCSBfUkFJdGVyMyBfX3RhcmdldCwKKwkJIF9EaWZmZXJlbmNlVHAgX19sZW5ndGgsIF9Db21wYXJlIF9fY29tcCkKKyAgICAgIHsgcmV0dXJuIG11bHRpd2F5X21lcmdlXzRfdmFyaWFudDxfVW5ndWFyZGVkSXRlcmF0b3I+CisJICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwgX19sZW5ndGgsIF9fY29tcCk7IH0KKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgU3dpdGNoIGZvciBrLXdheSBtZXJnaW5nIHdpdGggX19zZW50aW5lbHMgdHVybmVkIG9uLgorICAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfX3NlbnRpbmVscywKKwkgICBib29sIF9fc3RhYmxlLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyMywKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHN0cnVjdCBfX211bHRpd2F5X21lcmdlX2tfdmFyaWFudF9zZW50aW5lbF9zd2l0Y2gKKyAgICB7CisgICAgICBfUkFJdGVyMworICAgICAgb3BlcmF0b3IoKShfUkFJdGVySXRlcmF0b3IgX19zZXFzX2JlZ2luLAorCQkgX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCSBfUkFJdGVyMyBfX3RhcmdldCwKKyAgICAgIGNvbnN0IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPAorICAgICAgX1JBSXRlckl0ZXJhdG9yPjo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZT46OnZhbHVlX3R5cGUmCisJCSBfX3NlbnRpbmVsLAorCQkgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wKQorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlckl0ZXJhdG9yPgorCSAgOjp2YWx1ZV90eXBlOjpmaXJzdF90eXBlCisJICBfUkFJdGVyMTsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXIxPjo6dmFsdWVfdHlwZQorCSAgX1ZhbHVlVHlwZTsKKworCXJldHVybiBtdWx0aXdheV9tZXJnZV9sb3Nlcl90cmVlX3NlbnRpbmVsPAorCXR5cGVuYW1lIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlPAorCV9Mb3NlclRyZWVUcmFpdHM8X1ZhbHVlVHlwZT46Ol9NX3VzZV9wb2ludGVyLAorCSAgX0xvc2VyVHJlZVBvaW50ZXJVbmd1YXJkZWQ8X19zdGFibGUsIF9WYWx1ZVR5cGUsIF9Db21wYXJlPiwKKwkgIF9Mb3NlclRyZWVVbmd1YXJkZWQ8X19zdGFibGUsIF9WYWx1ZVR5cGUsIF9Db21wYXJlPgorICAgICAgICAgID46Ol9fdHlwZT4KKwkgIChfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LCBfX3NlbnRpbmVsLCBfX2xlbmd0aCwgX19jb21wKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKgorICAgKiBAYnJpZWYgU3dpdGNoIGZvciBrLXdheSBtZXJnaW5nIHdpdGggX19zZW50aW5lbHMgdHVybmVkIG9mZi4KKyAgICovCisgIHRlbXBsYXRlPGJvb2wgX19zdGFibGUsCisJICAgdHlwZW5hbWUgX1JBSXRlckl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXIzLAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgc3RydWN0IF9fbXVsdGl3YXlfbWVyZ2Vfa192YXJpYW50X3NlbnRpbmVsX3N3aXRjaDxmYWxzZSwgX19zdGFibGUsCisJCQkJCQkgICAgICBfUkFJdGVySXRlcmF0b3IsCisJCQkJCQkgICAgICBfUkFJdGVyMywgX0RpZmZlcmVuY2VUcCwKKwkJCQkJCSAgICAgIF9Db21wYXJlPgorICAgIHsKKyAgICAgIF9SQUl0ZXIzCisgICAgICBvcGVyYXRvcigpKF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCSBfUkFJdGVySXRlcmF0b3IgX19zZXFzX2VuZCwKKwkJIF9SQUl0ZXIzIF9fdGFyZ2V0LAorICAgICAgIGNvbnN0IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPAorICAgICAgIF9SQUl0ZXJJdGVyYXRvcj46OnZhbHVlX3R5cGU6OmZpcnN0X3R5cGU+Ojp2YWx1ZV90eXBlJgorCQkgX19zZW50aW5lbCwKKwkJIF9EaWZmZXJlbmNlVHAgX19sZW5ndGgsIF9Db21wYXJlIF9fY29tcCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXJJdGVyYXRvcj4KKwkgIDo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZQorCSAgX1JBSXRlcjE7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyMT46OnZhbHVlX3R5cGUKKwkgIF9WYWx1ZVR5cGU7CisKKwlyZXR1cm4gbXVsdGl3YXlfbWVyZ2VfbG9zZXJfdHJlZTwKKwl0eXBlbmFtZSBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTwKKwlfTG9zZXJUcmVlVHJhaXRzPF9WYWx1ZVR5cGU+OjpfTV91c2VfcG9pbnRlciwKKwkgIF9Mb3NlclRyZWVQb2ludGVyPF9fc3RhYmxlLCBfVmFsdWVUeXBlLCBfQ29tcGFyZT4sCisJICBfTG9zZXJUcmVlPF9fc3RhYmxlLCBfVmFsdWVUeXBlLCBfQ29tcGFyZT4KKyAgICAgICAgICA+OjpfX3R5cGUgPihfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LCBfX2xlbmd0aCwgX19jb21wKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgU2VxdWVudGlhbCBtdWx0aS13YXkgbWVyZ2luZyBzd2l0Y2guCisgICAqCisgICAqICBUaGUgX0dMSUJDWFhfUEFSQUxMRUxfREVDSVNJT04gaXMgYmFzZWQgb24gdGhlIGJyYW5jaGluZyBmYWN0b3IgYW5kCisgICAqICBydW50aW1lIHNldHRpbmdzLgorICAgKiAgQHBhcmFtIF9fc2Vxc19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBpdGVyYXRvciBwYWlyIGlucHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fc2Vxc19lbmQgRW5kIGl0ZXJhdG9yIG9mIGl0ZXJhdG9yIHBhaXIgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX190YXJnZXQgQmVnaW4gaXRlcmF0b3Igb2Ygb3V0cHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiAgQHBhcmFtIF9fbGVuZ3RoIE1heGltdW0gbGVuZ3RoIHRvIG1lcmdlLCBwb3NzaWJseSBsYXJnZXIgdGhhbiB0aGUKKyAgICogIG51bWJlciBvZiBlbGVtZW50cyBhdmFpbGFibGUuCisgICAqICBAcGFyYW0gX19zZW50aW5lbCBUaGUgc2VxdWVuY2VzIGhhdmUgX19hIF9fc2VudGluZWwgZWxlbWVudC4KKyAgICogIEByZXR1cm4gRW5kIGl0ZXJhdG9yIG9mIG91dHB1dCBzZXF1ZW5jZS4gKi8KKyAgdGVtcGxhdGU8Ym9vbCBfX3N0YWJsZSwKKwkgICBib29sIF9fc2VudGluZWxzLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyMywKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXIzCisgICAgX19zZXF1ZW50aWFsX211bHRpd2F5X21lcmdlKF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkJX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCQkJX1JBSXRlcjMgX190YXJnZXQsCisgICAgICBjb25zdCB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czwKKwlfUkFJdGVySXRlcmF0b3I+Ojp2YWx1ZV90eXBlOjpmaXJzdF90eXBlPjo6dmFsdWVfdHlwZSYKKwkJCQlfX3NlbnRpbmVsLAorCQkJCV9EaWZmZXJlbmNlVHAgX19sZW5ndGgsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fbGVuZ3RoKQorCisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVySXRlcmF0b3I+CisJOjpkaWZmZXJlbmNlX3R5cGUgX1NlcU51bWJlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlckl0ZXJhdG9yPgorCTo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZQorCV9SQUl0ZXIxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworICAgICAgZm9yIChfUkFJdGVySXRlcmF0b3IgX19zID0gX19zZXFzX2JlZ2luOyBfX3MgIT0gX19zZXFzX2VuZDsgKytfX3MpCisJeworICAgICAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfX2lzX3NvcnRlZCgoKl9fcykuZmlyc3QsCisJCQkJCSAgICAgICAoKl9fcykuc2Vjb25kLCBfX2NvbXApKTsKKwl9CisjZW5kaWYKKworICAgICAgX0RpZmZlcmVuY2VUcCBfX3RvdGFsX2xlbmd0aCA9IDA7CisgICAgICBmb3IgKF9SQUl0ZXJJdGVyYXRvciBfX3MgPSBfX3NlcXNfYmVnaW47IF9fcyAhPSBfX3NlcXNfZW5kOyArK19fcykKKwlfX3RvdGFsX2xlbmd0aCArPSBfR0xJQkNYWF9QQVJBTExFTF9MRU5HVEgoKl9fcyk7CisKKyAgICAgIF9fbGVuZ3RoID0gc3RkOjptaW48X0RpZmZlcmVuY2VUcD4oX19sZW5ndGgsIF9fdG90YWxfbGVuZ3RoKTsKKworICAgICAgaWYoX19sZW5ndGggPT0gMCkKKwlyZXR1cm4gX190YXJnZXQ7CisKKyAgICAgIF9SQUl0ZXIzIF9fcmV0dXJuX3RhcmdldCA9IF9fdGFyZ2V0OworICAgICAgX1NlcU51bWJlciBfX2sgPSBzdGF0aWNfY2FzdDxfU2VxTnVtYmVyPihfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luKTsKKworICAgICAgc3dpdGNoIChfX2spCisJeworCWNhc2UgMDoKKyAgICAgICAgICBicmVhazsKKwljYXNlIDE6CisgICAgICAgICAgX19yZXR1cm5fdGFyZ2V0ID0gc3RkOjpjb3B5KF9fc2Vxc19iZWdpblswXS5maXJzdCwKKwkJCQkgICAgICBfX3NlcXNfYmVnaW5bMF0uZmlyc3QgKyBfX2xlbmd0aCwKKwkJCQkgICAgICBfX3RhcmdldCk7CisgICAgICAgICAgX19zZXFzX2JlZ2luWzBdLmZpcnN0ICs9IF9fbGVuZ3RoOworICAgICAgICAgIGJyZWFrOworCWNhc2UgMjoKKyAgICAgICAgICBfX3JldHVybl90YXJnZXQgPSBfX21lcmdlX2FkdmFuY2UoX19zZXFzX2JlZ2luWzBdLmZpcnN0LAorCQkJCQkgICAgX19zZXFzX2JlZ2luWzBdLnNlY29uZCwKKwkJCQkJICAgIF9fc2Vxc19iZWdpblsxXS5maXJzdCwKKwkJCQkJICAgIF9fc2Vxc19iZWdpblsxXS5zZWNvbmQsCisJCQkJCSAgICBfX3RhcmdldCwgX19sZW5ndGgsIF9fY29tcCk7CisgICAgICAgICAgYnJlYWs7CisJY2FzZSAzOgorICAgICAgICAgIF9fcmV0dXJuX3RhcmdldCA9IF9fbXVsdGl3YXlfbWVyZ2VfM192YXJpYW50X3NlbnRpbmVsX3N3aXRjaAorCSAgICA8X19zZW50aW5lbHMsIF9SQUl0ZXJJdGVyYXRvciwgX1JBSXRlcjMsIF9EaWZmZXJlbmNlVHAsIF9Db21wYXJlPigpCisJICAgIChfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LCBfX2xlbmd0aCwgX19jb21wKTsKKyAgICAgICAgICBicmVhazsKKwljYXNlIDQ6CisgICAgICAgICAgX19yZXR1cm5fdGFyZ2V0ID0gX19tdWx0aXdheV9tZXJnZV80X3ZhcmlhbnRfc2VudGluZWxfc3dpdGNoCisJICAgIDxfX3NlbnRpbmVscywgX1JBSXRlckl0ZXJhdG9yLCBfUkFJdGVyMywgX0RpZmZlcmVuY2VUcCwgX0NvbXBhcmU+KCkKKwkgICAgKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsIF9fbGVuZ3RoLCBfX2NvbXApOworICAgICAgICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICBfX3JldHVybl90YXJnZXQgPSBfX211bHRpd2F5X21lcmdlX2tfdmFyaWFudF9zZW50aW5lbF9zd2l0Y2gKKwkgICAgPF9fc2VudGluZWxzLCBfX3N0YWJsZSwgX1JBSXRlckl0ZXJhdG9yLCBfUkFJdGVyMywgX0RpZmZlcmVuY2VUcCwKKwkgICAgIF9Db21wYXJlPigpCisJICAgIChfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LCBfX3NlbnRpbmVsLCBfX2xlbmd0aCwgX19jb21wKTsKKwkgIGJyZWFrOworCX0KKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoCisJX19pc19zb3J0ZWQoX190YXJnZXQsIF9fdGFyZ2V0ICsgX19sZW5ndGgsIF9fY29tcCkpOworI2VuZGlmCisKKyAgICAgIHJldHVybiBfX3JldHVybl90YXJnZXQ7CisgICAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgU3RhYmxlIHNvcnRpbmcgZnVuY3Rvci4KKyAgICoKKyAgICogVXNlZCB0byByZWR1Y2UgY29kZSBpbnN0YW5jaWF0aW9uIGluIG11bHRpd2F5X21lcmdlX3NhbXBsaW5nX3NwbGl0dGluZy4KKyAgICovCisgIHRlbXBsYXRlPGJvb2wgX19zdGFibGUsIGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CisgICAgc3RydWN0IF9TYW1wbGluZ1NvcnRlcgorICAgIHsKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoX1JBSXRlciBfX2ZpcnN0LCBfUkFJdGVyIF9fbGFzdCwgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCisgICAgICB7IF9fZ251X3NlcXVlbnRpYWw6OnN0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsgfQorICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBOb24tX19zdGFibGUgc29ydGluZyBmdW5jdG9yLgorICAgKgorICAgKiBVc2VkIHRvIHJlZHVjZSBjb2RlIGluc3RhbnRpYXRpb24gaW4gbXVsdGl3YXlfbWVyZ2Vfc2FtcGxpbmdfc3BsaXR0aW5nLgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1JBSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KKyAgICBzdHJ1Y3QgX1NhbXBsaW5nU29ydGVyPGZhbHNlLCBfUkFJdGVyLCBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgIHsKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoX1JBSXRlciBfX2ZpcnN0LCBfUkFJdGVyIF9fbGFzdCwgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCisgICAgICB7IF9fZ251X3NlcXVlbnRpYWw6OnNvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOyB9CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFNhbXBsaW5nIGJhc2VkIHNwbGl0dGluZyBmb3IgcGFyYWxsZWwgbXVsdGl3YXktbWVyZ2Ugcm91dGluZS4KKyAgICovCisgIHRlbXBsYXRlPGJvb2wgX19zdGFibGUsCisJICAgdHlwZW5hbWUgX1JBSXRlckl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlLAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHlwZT4KKyAgICB2b2lkCisgICAgbXVsdGl3YXlfbWVyZ2Vfc2FtcGxpbmdfc3BsaXR0aW5nKF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkJICAgICAgX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCQkJICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbGVuZ3RoLAorCQkJCSAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3RvdGFsX2xlbmd0aCwKKwkJCQkgICAgICBfQ29tcGFyZSBfX2NvbXAsCisgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxfRGlmZmVyZW5jZVR5cGUsIF9EaWZmZXJlbmNlVHlwZT4gPiAqX19waWVjZXMpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVySXRlcmF0b3I+CisJOjpkaWZmZXJlbmNlX3R5cGUgX1NlcU51bWJlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlckl0ZXJhdG9yPgorCTo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZQorCV9SQUl0ZXIxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyMT46OnZhbHVlX3R5cGUKKwlfVmFsdWVUeXBlOworCisgICAgICAvLyBfX2sgc2VxdWVuY2VzLgorICAgICAgY29uc3QgX1NlcU51bWJlciBfX2sKKwk9IHN0YXRpY19jYXN0PF9TZXFOdW1iZXI+KF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4pOworCisgICAgICBjb25zdCBfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcyA9IG9tcF9nZXRfbnVtX3RocmVhZHMoKTsKKworICAgICAgY29uc3QgX0RpZmZlcmVuY2VUeXBlIF9fbnVtX3NhbXBsZXMgPQorCV9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm1lcmdlX292ZXJzYW1wbGluZyAqIF9fbnVtX3RocmVhZHM7CisKKyAgICAgIF9WYWx1ZVR5cGUqIF9fc2FtcGxlcyA9IHN0YXRpY19jYXN0PF9WYWx1ZVR5cGUqPgorCSg6Om9wZXJhdG9yIG5ldyhzaXplb2YoX1ZhbHVlVHlwZSkgKiBfX2sgKiBfX251bV9zYW1wbGVzKSk7CisgICAgICAvLyBTYW1wbGUuCisgICAgICBmb3IgKF9TZXFOdW1iZXIgX19zID0gMDsgX19zIDwgX19rOyArK19fcykKKwlmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX2kgPSAwOyBfX2kgPCBfX251bV9zYW1wbGVzOyArK19faSkKKwkgIHsKKwkgICAgX0RpZmZlcmVuY2VUeXBlIHNhbXBsZV9pbmRleCA9IHN0YXRpY19jYXN0PF9EaWZmZXJlbmNlVHlwZT4KKwkgICAgICAoX0dMSUJDWFhfUEFSQUxMRUxfTEVOR1RIKF9fc2Vxc19iZWdpbltfX3NdKQorCSAgICAgICAqIChkb3VibGUoX19pICsgMSkgLyAoX19udW1fc2FtcGxlcyArIDEpKQorCSAgICAgICAqIChkb3VibGUoX19sZW5ndGgpIC8gX190b3RhbF9sZW5ndGgpKTsKKwkgICAgbmV3KCYoX19zYW1wbGVzW19fcyAqIF9fbnVtX3NhbXBsZXMgKyBfX2ldKSkKKyAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX3NlcXNfYmVnaW5bX19zXS5maXJzdFtzYW1wbGVfaW5kZXhdKTsKKwkgIH0KKworICAgICAgLy8gU29ydCBzdGFibGUgb3Igbm9uLXN0YWJsZSwgZGVwZW5kaW5nIG9uIHZhbHVlIG9mIHRlbXBsYXRlIHBhcmFtZXRlcgorICAgICAgLy8gIl9fc3RhYmxlIi4KKyAgICAgIF9TYW1wbGluZ1NvcnRlcjxfX3N0YWJsZSwgX1ZhbHVlVHlwZSosIF9Db21wYXJlPigpCisJKF9fc2FtcGxlcywgX19zYW1wbGVzICsgKF9fbnVtX3NhbXBsZXMgKiBfX2spLCBfX2NvbXApOworCisgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX3NsYWIgPSAwOyBfX3NsYWIgPCBfX251bV90aHJlYWRzOyArK19fc2xhYikKKwkvLyBGb3IgZWFjaCBzbGFiIC8gcHJvY2Vzc29yLgorCWZvciAoX1NlcU51bWJlciBfX3NlcSA9IDA7IF9fc2VxIDwgX19rOyArK19fc2VxKQorCSAgeworCSAgICAvLyBGb3IgZWFjaCBzZXF1ZW5jZS4KKwkgICAgaWYgKF9fc2xhYiA+IDApCisJICAgICAgX19waWVjZXNbX19zbGFiXVtfX3NlcV0uZmlyc3QgPSBzdGQ6OnVwcGVyX2JvdW5kCisJCShfX3NlcXNfYmVnaW5bX19zZXFdLmZpcnN0LCBfX3NlcXNfYmVnaW5bX19zZXFdLnNlY29uZCwKKwkJIF9fc2FtcGxlc1tfX251bV9zYW1wbGVzICogX19rICogX19zbGFiIC8gX19udW1fdGhyZWFkc10sCisJCSBfX2NvbXApCisJCS0gX19zZXFzX2JlZ2luW19fc2VxXS5maXJzdDsKKwkgICAgZWxzZQorCSAgICAgIC8vIEFic29sdXRlIGJlZ2lubmluZy4KKwkgICAgICBfX3BpZWNlc1tfX3NsYWJdW19fc2VxXS5maXJzdCA9IDA7CisJICAgIGlmICgoX19zbGFiICsgMSkgPCBfX251bV90aHJlYWRzKQorCSAgICAgIF9fcGllY2VzW19fc2xhYl1bX19zZXFdLnNlY29uZCA9IHN0ZDo6dXBwZXJfYm91bmQKKwkJKF9fc2Vxc19iZWdpbltfX3NlcV0uZmlyc3QsIF9fc2Vxc19iZWdpbltfX3NlcV0uc2Vjb25kLAorCQkgX19zYW1wbGVzW19fbnVtX3NhbXBsZXMgKiBfX2sgKiAoX19zbGFiICsgMSkgLyBfX251bV90aHJlYWRzXSwKKwkJIF9fY29tcCkKKwkJLSBfX3NlcXNfYmVnaW5bX19zZXFdLmZpcnN0OworCSAgICBlbHNlCisgICAgICAgICAgICAgIC8vIEFic29sdXRlIGVuZC4KKwkgICAgICBfX3BpZWNlc1tfX3NsYWJdW19fc2VxXS5zZWNvbmQgPQorCQlfR0xJQkNYWF9QQVJBTExFTF9MRU5HVEgoX19zZXFzX2JlZ2luW19fc2VxXSk7CisJICB9CisKKyAgICAgIGZvciAoX1NlcU51bWJlciBfX3MgPSAwOyBfX3MgPCBfX2s7ICsrX19zKQorCWZvciAoX0RpZmZlcmVuY2VUeXBlIF9faSA9IDA7IF9faSA8IF9fbnVtX3NhbXBsZXM7ICsrX19pKQorCSAgX19zYW1wbGVzW19fcyAqIF9fbnVtX3NhbXBsZXMgKyBfX2ldLn5fVmFsdWVUeXBlKCk7CisgICAgICA6Om9wZXJhdG9yIGRlbGV0ZShfX3NhbXBsZXMpOworICAgIH0KKworICAvKioKKyAgICogQGJyaWVmIEV4YWN0IHNwbGl0dGluZyBmb3IgcGFyYWxsZWwgbXVsdGl3YXktbWVyZ2Ugcm91dGluZS4KKyAgICoKKyAgICogTm9uZSBvZiB0aGUgcGFzc2VkIHNlcXVlbmNlcyBtYXkgYmUgZW1wdHkuCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9fc3RhYmxlLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVR5cGU+CisgICAgdm9pZAorICAgIG11bHRpd2F5X21lcmdlX2V4YWN0X3NwbGl0dGluZyhfUkFJdGVySXRlcmF0b3IgX19zZXFzX2JlZ2luLAorCQkJCSAgIF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJCSAgIF9EaWZmZXJlbmNlVHlwZSBfX2xlbmd0aCwKKwkJCQkgICBfRGlmZmVyZW5jZVR5cGUgX190b3RhbF9sZW5ndGgsCisJCQkJICAgX0NvbXBhcmUgX19jb21wLAorICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxfRGlmZmVyZW5jZVR5cGUsIF9EaWZmZXJlbmNlVHlwZT4gPiAqX19waWVjZXMpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVySXRlcmF0b3I+CisJOjpkaWZmZXJlbmNlX3R5cGUgX1NlcU51bWJlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlckl0ZXJhdG9yPgorCTo6dmFsdWVfdHlwZTo6Zmlyc3RfdHlwZQorCV9SQUl0ZXIxOworCisgICAgICBjb25zdCBib29sIF9fdGlnaHQgPSAoX190b3RhbF9sZW5ndGggPT0gX19sZW5ndGgpOworCisgICAgICAvLyBfX2sgc2VxdWVuY2VzLgorICAgICAgY29uc3QgX1NlcU51bWJlciBfX2sgPSBfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luOworCisgICAgICBjb25zdCBfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcyA9IG9tcF9nZXRfbnVtX3RocmVhZHMoKTsKKworICAgICAgLy8gKFNldHRpbmdzOjptdWx0aXdheV9tZXJnZV9zcGxpdHRpbmcKKyAgICAgIC8vICA9PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpFWEFDVCkuCisgICAgICBzdGQ6OnZlY3RvcjxfUkFJdGVyMT4qIF9fb2Zmc2V0cyA9IAorCW5ldyBzdGQ6OnZlY3RvcjxfUkFJdGVyMT5bX19udW1fdGhyZWFkc107CisgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8X1JBSXRlcjEsIF9SQUl0ZXIxPiA+IF9fc2UoX19rKTsKKworICAgICAgY29weShfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fc2UuYmVnaW4oKSk7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSogX19ib3JkZXJzID0KKwluZXcgX0RpZmZlcmVuY2VUeXBlW19fbnVtX3RocmVhZHMgKyAxXTsKKyAgICAgIF9fZXF1YWxseV9zcGxpdChfX2xlbmd0aCwgX19udW1fdGhyZWFkcywgX19ib3JkZXJzKTsKKworICAgICAgZm9yIChfVGhyZWFkSW5kZXggX19zID0gMDsgX19zIDwgKF9fbnVtX3RocmVhZHMgLSAxKTsgKytfX3MpCisJeworCSAgX19vZmZzZXRzW19fc10ucmVzaXplKF9fayk7CisJICBtdWx0aXNlcV9wYXJ0aXRpb24oX19zZS5iZWdpbigpLCBfX3NlLmVuZCgpLCBfX2JvcmRlcnNbX19zICsgMV0sCisJCQkgICAgIF9fb2Zmc2V0c1tfX3NdLmJlZ2luKCksIF9fY29tcCk7CisKKwkgIC8vIExhc3Qgb25lIGFsc28gbmVlZGVkIGFuZCBhdmFpbGFibGUuCisJICBpZiAoIV9fdGlnaHQpCisJICAgIHsKKwkgICAgICBfX29mZnNldHNbX19udW1fdGhyZWFkcyAtIDFdLnJlc2l6ZShfX2spOworCSAgICAgIG11bHRpc2VxX3BhcnRpdGlvbihfX3NlLmJlZ2luKCksIF9fc2UuZW5kKCksCisJCQkJIF9EaWZmZXJlbmNlVHlwZShfX2xlbmd0aCksCisJCQkJIF9fb2Zmc2V0c1tfX251bV90aHJlYWRzIC0gMV0uYmVnaW4oKSwKKwkJCQkgX19jb21wKTsKKwkgICAgfQorCX0KKyAgICAgIGRlbGV0ZVtdIF9fYm9yZGVyczsKKworICAgICAgZm9yIChfVGhyZWFkSW5kZXggX19zbGFiID0gMDsgX19zbGFiIDwgX19udW1fdGhyZWFkczsgKytfX3NsYWIpCisJeworCSAgLy8gRm9yIGVhY2ggc2xhYiAvIHByb2Nlc3Nvci4KKwkgIGZvciAoX1NlcU51bWJlciBfX3NlcSA9IDA7IF9fc2VxIDwgX19rOyArK19fc2VxKQorCSAgICB7CisJICAgICAgLy8gRm9yIGVhY2ggc2VxdWVuY2UuCisJICAgICAgaWYgKF9fc2xhYiA9PSAwKQorCQl7CisJCSAgLy8gQWJzb2x1dGUgYmVnaW5uaW5nLgorCQkgIF9fcGllY2VzW19fc2xhYl1bX19zZXFdLmZpcnN0ID0gMDsKKwkJfQorCSAgICAgIGVsc2UKKwkJX19waWVjZXNbX19zbGFiXVtfX3NlcV0uZmlyc3QgPQorCQkgIF9fcGllY2VzW19fc2xhYiAtIDFdW19fc2VxXS5zZWNvbmQ7CisJICAgICAgaWYgKCFfX3RpZ2h0IHx8IF9fc2xhYiA8IChfX251bV90aHJlYWRzIC0gMSkpCisJCV9fcGllY2VzW19fc2xhYl1bX19zZXFdLnNlY29uZCA9CisJCSAgX19vZmZzZXRzW19fc2xhYl1bX19zZXFdIC0gX19zZXFzX2JlZ2luW19fc2VxXS5maXJzdDsKKwkgICAgICBlbHNlCisJCXsKKwkJICAvLyBfX3NsYWIgPT0gX19udW1fdGhyZWFkcyAtIDEKKwkJICBfX3BpZWNlc1tfX3NsYWJdW19fc2VxXS5zZWNvbmQgPQorICAgICAgICAgICAgICAgICAgICBfR0xJQkNYWF9QQVJBTExFTF9MRU5HVEgoX19zZXFzX2JlZ2luW19fc2VxXSk7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGRlbGV0ZVtdIF9fb2Zmc2V0czsKKyAgICB9CisKKyAgLyoqIEBicmllZiBQYXJhbGxlbCBtdWx0aS13YXkgbWVyZ2Ugcm91dGluZS4KKyAgICoKKyAgICogVGhlIF9HTElCQ1hYX1BBUkFMTEVMX0RFQ0lTSU9OIGlzIGJhc2VkIG9uIHRoZSBicmFuY2hpbmcgZmFjdG9yCisgICAqIGFuZCBydW50aW1lIHNldHRpbmdzLgorICAgKgorICAgKiBNdXN0IG5vdCBiZSBjYWxsZWQgaWYgdGhlIG51bWJlciBvZiBzZXF1ZW5jZXMgaXMgMS4KKyAgICoKKyAgICogQHRwYXJhbSBfU3BsaXR0ZXIgZnVuY3RvciB0byBzcGxpdCBpbnB1dCAoZWl0aGVyIF9fZXhhY3Qgb3Igc2FtcGxpbmcgYmFzZWQpCisgICAqIEB0cGFyYW0gX19zdGFibGUgU3RhYmxlIG1lcmdpbmcgaW5jdXJzIGEgcGVyZm9ybWFuY2UgcGVuYWx0eS4KKyAgICogQHRwYXJhbSBfX3NlbnRpbmVsIElnbm9yZWQuCisgICAqCisgICAqIEBwYXJhbSBfX3NlcXNfYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaXRlcmF0b3IgcGFpciBpbnB1dCBzZXF1ZW5jZS4KKyAgICogQHBhcmFtIF9fc2Vxc19lbmQgRW5kIGl0ZXJhdG9yIG9mIGl0ZXJhdG9yIHBhaXIgaW5wdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX3RhcmdldCBCZWdpbiBpdGVyYXRvciBvZiBvdXRwdXQgc2VxdWVuY2UuCisgICAqIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICogQHBhcmFtIF9fbGVuZ3RoIE1heGltdW0gbGVuZ3RoIHRvIG1lcmdlLCBwb3NzaWJseSBsYXJnZXIgdGhhbiB0aGUKKyAgICogbnVtYmVyIG9mIGVsZW1lbnRzIGF2YWlsYWJsZS4KKyAgICogQHJldHVybiBFbmQgaXRlcmF0b3Igb2Ygb3V0cHV0IHNlcXVlbmNlLgorICAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfX3N0YWJsZSwKKwkgICBib29sIF9fc2VudGluZWxzLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyMywKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9TcGxpdHRlciwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyMworICAgIHBhcmFsbGVsX211bHRpd2F5X21lcmdlKF9SQUl0ZXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JBSXRlckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JBSXRlcjMgX190YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NwbGl0dGVyIF9fc3BsaXR0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMpCisgICAgICB7CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworCV9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luID4gMSk7CisjZW5kaWYKKworCV9HTElCQ1hYX0NBTEwoX19sZW5ndGgpCisKKwl0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXJJdGVyYXRvcj4KKwkgIDo6ZGlmZmVyZW5jZV90eXBlIF9TZXFOdW1iZXI7CisJdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVySXRlcmF0b3I+CisgICAgICAgICAgOjp2YWx1ZV90eXBlOjpmaXJzdF90eXBlCisgICAgICAgICAgX1JBSXRlcjE7CisJdHlwZWRlZiB0eXBlbmFtZQorICAgICAgICAgIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXIxPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworCisJLy8gTGVhdmUgb25seSBub24tZW1wdHkgc2VxdWVuY2VzLgorCXR5cGVkZWYgc3RkOjpwYWlyPF9SQUl0ZXIxLCBfUkFJdGVyMT4gc2VxX3R5cGU7CisJc2VxX3R5cGUqIF9fbmVfc2VxcyA9IG5ldyBzZXFfdHlwZVtfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luXTsKKwlfU2VxTnVtYmVyIF9fayA9IDA7CisJX0RpZmZlcmVuY2VUeXBlIF9fdG90YWxfbGVuZ3RoID0gMDsKKwlmb3IgKF9SQUl0ZXJJdGVyYXRvciBfX3JhaWkgPSBfX3NlcXNfYmVnaW47CisgICAgICAgICAgICAgX19yYWlpICE9IF9fc2Vxc19lbmQ7ICsrX19yYWlpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIF9EaWZmZXJlbmNlVHAgX19zZXFfbGVuZ3RoID0gX0dMSUJDWFhfUEFSQUxMRUxfTEVOR1RIKCpfX3JhaWkpOworICAgICAgICAgICAgaWYoX19zZXFfbGVuZ3RoID4gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAJX190b3RhbF9sZW5ndGggKz0gX19zZXFfbGVuZ3RoOworICAgICAgICAJX19uZV9zZXFzW19faysrXSA9ICpfX3JhaWk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKwlfR0xJQkNYWF9DQUxMKF9fdG90YWxfbGVuZ3RoKQorCisJX19sZW5ndGggPSBzdGQ6Om1pbjxfRGlmZmVyZW5jZVRwPihfX2xlbmd0aCwgX190b3RhbF9sZW5ndGgpOworCisJaWYgKF9fdG90YWxfbGVuZ3RoID09IDAgfHwgX19rID09IDApCisJICB7CisJICAgIGRlbGV0ZVtdIF9fbmVfc2VxczsKKwkgICAgcmV0dXJuIF9fdGFyZ2V0OworCSAgfQorCisJc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPF9EaWZmZXJlbmNlVHlwZSwgX0RpZmZlcmVuY2VUeXBlPiA+KiBfX3BpZWNlczsKKworCV9fbnVtX3RocmVhZHMgPSBzdGF0aWNfY2FzdDxfVGhyZWFkSW5kZXg+CisgICAgICAgICAgKHN0ZDo6bWluPF9EaWZmZXJlbmNlVHlwZT4oX19udW1fdGhyZWFkcywgX190b3RhbF9sZW5ndGgpKTsKKworIyAgICAgICBwcmFnbWEgb21wIHBhcmFsbGVsIG51bV90aHJlYWRzIChfX251bV90aHJlYWRzKQorCXsKKyMgICAgICAgICBwcmFnbWEgb21wIHNpbmdsZQorCSAgeworCSAgICBfX251bV90aHJlYWRzID0gb21wX2dldF9udW1fdGhyZWFkcygpOworCSAgICAvLyBUaHJlYWQgX190IHdpbGwgaGF2ZSB0byBtZXJnZSBwaWVjZXNbX19pYW1dWzAuLl9fayAtIDFdCisJICAgIF9fcGllY2VzID0gbmV3IHN0ZDo6dmVjdG9yPAorCSAgICBzdGQ6OnBhaXI8X0RpZmZlcmVuY2VUeXBlLCBfRGlmZmVyZW5jZVR5cGU+ID5bX19udW1fdGhyZWFkc107CisJICAgIGZvciAoX1RocmVhZEluZGV4IF9fcyA9IDA7IF9fcyA8IF9fbnVtX3RocmVhZHM7ICsrX19zKQorCSAgICAgIF9fcGllY2VzW19fc10ucmVzaXplKF9fayk7CisKKwkgICAgX0RpZmZlcmVuY2VUeXBlIF9fbnVtX3NhbXBsZXMgPQorCSAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm1lcmdlX292ZXJzYW1wbGluZworCSAgICAgICogX19udW1fdGhyZWFkczsKKworCSAgICBfX3NwbGl0dGVyKF9fbmVfc2VxcywgX19uZV9zZXFzICsgX19rLCBfX2xlbmd0aCwgX190b3RhbF9sZW5ndGgsCisJCSAgICAgICBfX2NvbXAsIF9fcGllY2VzKTsKKwkgIH0gLy9zaW5nbGUKKworCSAgX1RocmVhZEluZGV4IF9faWFtID0gb21wX2dldF90aHJlYWRfbnVtKCk7CisKKwkgIF9EaWZmZXJlbmNlVHlwZSBfX3RhcmdldF9wb3NpdGlvbiA9IDA7CisKKwkgIGZvciAoX1NlcU51bWJlciBfX2MgPSAwOyBfX2MgPCBfX2s7ICsrX19jKQorCSAgICBfX3RhcmdldF9wb3NpdGlvbiArPSBfX3BpZWNlc1tfX2lhbV1bX19jXS5maXJzdDsKKworCSAgc2VxX3R5cGUqIF9fY2h1bmtzID0gbmV3IHNlcV90eXBlW19fa107CisKKwkgIGZvciAoX1NlcU51bWJlciBfX3MgPSAwOyBfX3MgPCBfX2s7ICsrX19zKQorCSAgICBfX2NodW5rc1tfX3NdID0gc3RkOjptYWtlX3BhaXIoX19uZV9zZXFzW19fc10uZmlyc3QKKwkJCQkJICAgKyBfX3BpZWNlc1tfX2lhbV1bX19zXS5maXJzdCwKKwkJCQkJICAgX19uZV9zZXFzW19fc10uZmlyc3QKKwkJCQkJICAgKyBfX3BpZWNlc1tfX2lhbV1bX19zXS5zZWNvbmQpOworCisJICBpZihfX2xlbmd0aCA+IF9fdGFyZ2V0X3Bvc2l0aW9uKQorCSAgICBfX3NlcXVlbnRpYWxfbXVsdGl3YXlfbWVyZ2U8X19zdGFibGUsIF9fc2VudGluZWxzPgorCSAgICAgIChfX2NodW5rcywgX19jaHVua3MgKyBfX2ssIF9fdGFyZ2V0ICsgX190YXJnZXRfcG9zaXRpb24sCisJICAgICAgICooX19zZXFzX2JlZ2luLT5zZWNvbmQpLCBfX2xlbmd0aCAtIF9fdGFyZ2V0X3Bvc2l0aW9uLCBfX2NvbXApOworCisJICBkZWxldGVbXSBfX2NodW5rczsKKwl9IC8vIHBhcmFsbGVsCisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKAorICAgICAgICAgIF9faXNfc29ydGVkKF9fdGFyZ2V0LCBfX3RhcmdldCArIF9fbGVuZ3RoLCBfX2NvbXApKTsKKyNlbmRpZgorCisJX19rID0gMDsKKwkvLyBVcGRhdGUgZW5kcyBvZiBzZXF1ZW5jZXMuCisJZm9yIChfUkFJdGVySXRlcmF0b3IgX19yYWlpID0gX19zZXFzX2JlZ2luOworICAgICAgICAgICAgIF9fcmFpaSAhPSBfX3NlcXNfZW5kOyArK19fcmFpaSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoID0gX0dMSUJDWFhfUEFSQUxMRUxfTEVOR1RIKCpfX3JhaWkpOworICAgICAgICAgICAgaWYoX19sZW5ndGggPiAwKQorICAgICAgICAgICAgICAoKl9fcmFpaSkuZmlyc3QgKz0gX19waWVjZXNbX19udW1fdGhyZWFkcyAtIDFdW19faysrXS5zZWNvbmQ7CisgICAgICAgICAgfQorCisJZGVsZXRlW10gX19waWVjZXM7CisJZGVsZXRlW10gX19uZV9zZXFzOworCisJcmV0dXJuIF9fdGFyZ2V0ICsgX19sZW5ndGg7CisgICAgICB9CisKKyAgLyoqCisgICAqIEBicmllZiBNdWx0aXdheSBNZXJnZSBGcm9udGVuZC4KKyAgICoKKyAgICogTWVyZ2UgdGhlIHNlcXVlbmNlcyBzcGVjaWZpZWQgYnkgc2Vxc19iZWdpbiBhbmQgX19zZXFzX2VuZCBpbnRvCisgICAqIF9fdGFyZ2V0LiAgX19zZXFzX2JlZ2luIGFuZCBfX3NlcXNfZW5kIG11c3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZgorICAgKiBwYWlycy4gIFRoZXNlIHBhaXJzIG11c3QgY29udGFpbiBhbiBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisgICAqIG9mIGEgc2VxdWVuY2UgaW4gdGhlaXIgZmlyc3QgZW50cnkgYW5kIGFuIGl0ZXJhdG9yIHRoZSBfTV9lbmQgb2YKKyAgICogdGhlIHNhbWUgc2VxdWVuY2UgaW4gdGhlaXIgc2Vjb25kIGVudHJ5LgorICAgKgorICAgKiBUaWVzIGFyZSBicm9rZW4gYXJiaXRyYXJpbHkuICBTZWUgc3RhYmxlX211bHRpd2F5X21lcmdlIGZvciBhIHZhcmlhbnQKKyAgICogdGhhdCBicmVha3MgdGllcyBieSBzZXF1ZW5jZSBudW1iZXIgYnV0IGlzIHNsb3dlci4KKyAgICoKKyAgICogVGhlIGZpcnN0IGVudHJpZXMgb2YgdGhlIHBhaXJzIChpLmUuIHRoZSBiZWdpbiBpdGVyYXRvcnMpIHdpbGwgYmUgbW92ZWQKKyAgICogZm9yd2FyZC4KKyAgICoKKyAgICogVGhlIG91dHB1dCBzZXF1ZW5jZSBoYXMgdG8gcHJvdmlkZSBlbm91Z2ggc3BhY2UgZm9yIGFsbCBlbGVtZW50cworICAgKiB0aGF0IGFyZSB3cml0dGVuIHRvIGl0LgorICAgKgorICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbWVyZ2UgdGhlIGlucHV0IHNlcXVlbmNlczoKKyAgICoKKyAgICogLSBub3Qgc3RhYmxlCisgICAqIC0gcGFyYWxsZWwsIGRlcGVuZGluZyBvbiB0aGUgaW5wdXQgc2l6ZSBhbmQgU2V0dGluZ3MKKyAgICogLSB1c2luZyBzYW1wbGluZyBmb3Igc3BsaXR0aW5nCisgICAqIC0gbm90IHVzaW5nIHNlbnRpbmVscworICAgKgorICAgKiBFeGFtcGxlOgorICAgKgorICAgKiA8cHJlPgorICAgKiAgIGludCBzZXF1ZW5jZXNbMTBdWzEwXTsKKyAgICogICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxMDsgKytfX2kpCisgICAqICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2kgPCAxMDsgKytfX2opCisgICAqICAgICAgIHNlcXVlbmNlc1tfX2ldW19fal0gPSBfX2o7CisgICAqCisgICAqICAgaW50IF9fb3V0WzMzXTsKKyAgICogICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8aW50Kj4gPiBzZXFzOworICAgKiAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDEwOyArK19faSkKKyAgICogICAgIHsgc2Vxcy5wdXNoKHN0ZDo6bWFrZV9wYWlyPGludCo+KHNlcXVlbmNlc1tfX2ldLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2VzW19faV0gKyAxMCkpIH0KKyAgICoKKyAgICogICBtdWx0aXdheV9tZXJnZShzZXFzLmJlZ2luKCksIHNlcXMuZW5kKCksIF9fdGFyZ2V0LCBzdGQ6Omxlc3M8aW50PigpLCAzMyk7CisgICAqIDwvcHJlPgorICAgKgorICAgKiBAc2VlIHN0YWJsZV9tdWx0aXdheV9tZXJnZQorICAgKgorICAgKiBAcHJlIEFsbCBpbnB1dCBzZXF1ZW5jZXMgbXVzdCBiZSBzb3J0ZWQuCisgICAqIEBwcmUgVGFyZ2V0IG11c3QgcHJvdmlkZSBlbm91Z2ggc3BhY2UgdG8gbWVyZ2Ugb3V0IGxlbmd0aCBlbGVtZW50cyBvcgorICAgKiAgICB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFsbCBzZXF1ZW5jZXMsIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorICAgKgorICAgKiBAcG9zdCBbX190YXJnZXQsIHJldHVybiBfX3ZhbHVlKSBjb250YWlucyBtZXJnZWQgX19lbGVtZW50cyBmcm9tIHRoZQorICAgKiAgICBpbnB1dCBzZXF1ZW5jZXMuCisgICAqIEBwb3N0IHJldHVybiBfX3ZhbHVlIC0gX190YXJnZXQgPSBtaW4oX19sZW5ndGgsIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbGwKKyAgICogICAgc2VxdWVuY2VzKS4KKyAgICoKKyAgICogQHRwYXJhbSBfUkFJdGVyUGFpckl0ZXJhdG9yIGl0ZXJhdG9yIG92ZXIgc2VxdWVuY2UKKyAgICogICAgb2YgcGFpcnMgb2YgaXRlcmF0b3JzCisgICAqIEB0cGFyYW0gX1JBSXRlck91dCBpdGVyYXRvciBvdmVyIHRhcmdldCBzZXF1ZW5jZQorICAgKiBAdHBhcmFtIF9EaWZmZXJlbmNlVHAgZGlmZmVyZW5jZSB0eXBlIGZvciB0aGUgc2VxdWVuY2UKKyAgICogQHRwYXJhbSBfQ29tcGFyZSBzdHJpY3Qgd2VhayBvcmRlcmluZyB0eXBlIHRvIGNvbXBhcmUgZWxlbWVudHMKKyAgICogICAgaW4gc2VxdWVuY2VzCisgICAqCisgICAqIEBwYXJhbSBfX3NlcXNfYmVnaW4gIF9fYmVnaW4gb2Ygc2VxdWVuY2UgX19zZXF1ZW5jZQorICAgKiBAcGFyYW0gX19zZXFzX2VuZCAgICBfTV9lbmQgb2Ygc2VxdWVuY2UgX19zZXF1ZW5jZQorICAgKiBAcGFyYW0gX190YXJnZXQgICAgICB0YXJnZXQgc2VxdWVuY2UgdG8gbWVyZ2UgdG8uCisgICAqIEBwYXJhbSBfX2NvbXAgICAgICAgIHN0cmljdCB3ZWFrIG9yZGVyaW5nIHRvIHVzZSBmb3IgZWxlbWVudCBjb21wYXJpc29uLgorICAgKiBAcGFyYW0gX19sZW5ndGggTWF4aW11bSBsZW5ndGggdG8gbWVyZ2UsIHBvc3NpYmx5IGxhcmdlciB0aGFuIHRoZQorICAgKiBudW1iZXIgb2YgZWxlbWVudHMgYXZhaWxhYmxlLgorICAgKgorICAgKiBAcmV0dXJuIF9NX2VuZCBpdGVyYXRvciBvZiBvdXRwdXQgc2VxdWVuY2UKKyAgICovCisgIC8vIG11bHRpd2F5X21lcmdlCisgIC8vIHB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlclBhaXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyT3V0LAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlck91dAorICAgIG11bHRpd2F5X21lcmdlKF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2JlZ2luLAorCQkgICBfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCSAgIF9SQUl0ZXJPdXQgX190YXJnZXQsCisJCSAgIF9EaWZmZXJlbmNlVHAgX19sZW5ndGgsIF9Db21wYXJlIF9fY29tcCwKKwkJICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4pCisKKyAgICAgIC8vIGNhdGNoIHNwZWNpYWwgY2FzZTogbm8gc2VxdWVuY2VzCisgICAgICBpZiAoX19zZXFzX2JlZ2luID09IF9fc2Vxc19lbmQpCisJcmV0dXJuIF9fdGFyZ2V0OworCisgICAgICAvLyBFeGVjdXRlIG11bHRpd2F5IG1lcmdlICpzZXF1ZW50aWFsbHkqLgorICAgICAgcmV0dXJuIF9fc2VxdWVudGlhbF9tdWx0aXdheV9tZXJnZQorCTwvKiBfX3N0YWJsZSA9ICovIGZhbHNlLCAvKiBfX3NlbnRpbmVscyA9ICovIGZhbHNlPgorCShfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LAorCSAqKF9fc2Vxc19iZWdpbi0+c2Vjb25kKSwgX19sZW5ndGgsIF9fY29tcCk7CisgICAgfQorCisgIC8vIHB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlclBhaXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyT3V0LAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlck91dAorICAgIG11bHRpd2F5X21lcmdlKF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2JlZ2luLAorCQkgICBfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCSAgIF9SQUl0ZXJPdXQgX190YXJnZXQsCisJCSAgIF9EaWZmZXJlbmNlVHAgX19sZW5ndGgsIF9Db21wYXJlIF9fY29tcCwKKwkJICAgX19nbnVfcGFyYWxsZWw6OmV4YWN0X3RhZyBfX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworICAgICAgX0dMSUJDWFhfQ0FMTChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luKQorCisgICAgICAvLyBjYXRjaCBzcGVjaWFsIGNhc2U6IG5vIHNlcXVlbmNlcworICAgICAgaWYgKF9fc2Vxc19iZWdpbiA9PSBfX3NlcXNfZW5kKQorCXJldHVybiBfX3RhcmdldDsKKworICAgICAgLy8gRXhlY3V0ZSBtZXJnZTsgbWF5YmUgcGFyYWxsZWwsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIG1lcmdlZAorICAgICAgLy8gZWxlbWVudHMgYW5kIHRoZSBudW1iZXIgb2Ygc2VxdWVuY2VzIGFuZCBnbG9iYWwgdGhyZXNob2xkcyBpbgorICAgICAgLy8gU2V0dGluZ3MuCisgICAgICBpZiAoKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4gPiAxKQorCSAgJiYgX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgKChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luKSA+PQorICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkubXVsdGl3YXlfbWVyZ2VfbWluaW1hbF9rKQorICAgICAgICAgICAgJiYgKChfU2VxdWVuY2VJbmRleClfX2xlbmd0aCA+PQorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5tdWx0aXdheV9tZXJnZV9taW5pbWFsX24pKSkKKwlyZXR1cm4gcGFyYWxsZWxfbXVsdGl3YXlfbWVyZ2UKKwkgIDwvKiBfX3N0YWJsZSA9ICovIGZhbHNlLCAvKiBfX3NlbnRpbmVscyA9ICovIGZhbHNlPgorCSAgKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsCisJICAgbXVsdGl3YXlfbWVyZ2VfZXhhY3Rfc3BsaXR0aW5nPC8qIF9fc3RhYmxlID0gKi8gZmFsc2UsCisJICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlclBhaXJJdGVyYXRvcj4KKwkgICA6OnZhbHVlX3R5cGUqLCBfQ29tcGFyZSwgX0RpZmZlcmVuY2VUcD4sCisJICAgc3RhdGljX2Nhc3Q8X0RpZmZlcmVuY2VUeXBlPihfX2xlbmd0aCksIF9fY29tcCwKKwkgICBfX3RhZy5fX2dldF9udW1fdGhyZWFkcygpKTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gX19zZXF1ZW50aWFsX211bHRpd2F5X21lcmdlCisJICA8LyogX19zdGFibGUgPSAqLyBmYWxzZSwgLyogX19zZW50aW5lbHMgPSAqLyBmYWxzZT4KKwkgIChfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LAorCSAgICooX19zZXFzX2JlZ2luLT5zZWNvbmQpLCBfX2xlbmd0aCwgX19jb21wKTsKKyAgICB9CisKKyAgLy8gcHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyUGFpckl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJPdXQsCisJICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyT3V0CisgICAgbXVsdGl3YXlfbWVyZ2UoX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCSAgIF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2VuZCwKKwkJICAgX1JBSXRlck91dCBfX3RhcmdldCwKKwkJICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wLAorCQkgICBfX2dudV9wYXJhbGxlbDo6c2FtcGxpbmdfdGFnIF9fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4pCisKKyAgICAgIC8vIGNhdGNoIHNwZWNpYWwgY2FzZTogbm8gc2VxdWVuY2VzCisgICAgICBpZiAoX19zZXFzX2JlZ2luID09IF9fc2Vxc19lbmQpCisJcmV0dXJuIF9fdGFyZ2V0OworCisgICAgICAvLyBFeGVjdXRlIG1lcmdlOyBtYXliZSBwYXJhbGxlbCwgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgbWVyZ2VkCisgICAgICAvLyBlbGVtZW50cyBhbmQgdGhlIG51bWJlciBvZiBzZXF1ZW5jZXMgYW5kIGdsb2JhbCB0aHJlc2hvbGRzIGluCisgICAgICAvLyBTZXR0aW5ncy4KKyAgICAgIGlmICgoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbiA+IDEpCisJICAmJiBfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICAoKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4pID49CisgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5tdWx0aXdheV9tZXJnZV9taW5pbWFsX2spCisgICAgICAgICAgICAmJiAoKF9TZXF1ZW5jZUluZGV4KV9fbGVuZ3RoID49CisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm11bHRpd2F5X21lcmdlX21pbmltYWxfbikpKQorCXJldHVybiBwYXJhbGxlbF9tdWx0aXdheV9tZXJnZQorCSAgPC8qIF9fc3RhYmxlID0gKi8gZmFsc2UsIC8qIF9fc2VudGluZWxzID0gKi8gZmFsc2U+CisJICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICBtdWx0aXdheV9tZXJnZV9leGFjdF9zcGxpdHRpbmc8LyogX19zdGFibGUgPSAqLyBmYWxzZSwKKwkgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyUGFpckl0ZXJhdG9yPgorCSAgIDo6dmFsdWVfdHlwZSosIF9Db21wYXJlLCBfRGlmZmVyZW5jZVRwPiwKKwkgICBzdGF0aWNfY2FzdDxfRGlmZmVyZW5jZVR5cGU+KF9fbGVuZ3RoKSwgX19jb21wLAorCSAgIF9fdGFnLl9fZ2V0X251bV90aHJlYWRzKCkpOworICAgICAgZWxzZQorCXJldHVybiBfX3NlcXVlbnRpYWxfbXVsdGl3YXlfbWVyZ2UKKwkgIDwvKiBfX3N0YWJsZSA9ICovIGZhbHNlLCAvKiBfX3NlbnRpbmVscyA9ICovIGZhbHNlPgorCSAgKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsCisJICAgKihfX3NlcXNfYmVnaW4tPnNlY29uZCksIF9fbGVuZ3RoLCBfX2NvbXApOworICAgIH0KKworICAvLyBwdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJQYWlySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlck91dCwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXJPdXQKKyAgICBtdWx0aXdheV9tZXJnZShfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJICAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkgICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkgICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCSAgIHBhcmFsbGVsX3RhZyBfX3RhZyA9IHBhcmFsbGVsX3RhZygwKSkKKyAgICB7IHJldHVybiBtdWx0aXdheV9tZXJnZShfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LCBfX2xlbmd0aCwKKwkJCSAgICBfX2NvbXAsIGV4YWN0X3RhZyhfX3RhZy5fX2dldF9udW1fdGhyZWFkcygpKSk7IH0KKworICAvLyBwdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJQYWlySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlck91dCwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXJPdXQKKyAgICBtdWx0aXdheV9tZXJnZShfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJICAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkgICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkgICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCSAgIGRlZmF1bHRfcGFyYWxsZWxfdGFnIF9fdGFnKQorICAgIHsgcmV0dXJuIG11bHRpd2F5X21lcmdlKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsIF9fbGVuZ3RoLAorCQkJICAgIF9fY29tcCwgZXhhY3RfdGFnKF9fdGFnLl9fZ2V0X251bV90aHJlYWRzKCkpKTsgfQorCisgIC8vIHN0YWJsZV9tdWx0aXdheV9tZXJnZQorICAvLyBwdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJQYWlySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlck91dCwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXJPdXQKKyAgICBzdGFibGVfbXVsdGl3YXlfbWVyZ2UoX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkgIF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2VuZCwKKwkJCSAgX1JBSXRlck91dCBfX3RhcmdldCwKKwkJCSAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wLAorCQkJICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeworICAgICAgdHlwZWRlZiBfRGlmZmVyZW5jZVRwIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbikKKworICAgICAgLy8gY2F0Y2ggc3BlY2lhbCBjYXNlOiBubyBzZXF1ZW5jZXMKKyAgICAgIGlmIChfX3NlcXNfYmVnaW4gPT0gX19zZXFzX2VuZCkKKwlyZXR1cm4gX190YXJnZXQ7CisKKyAgICAgIC8vIEV4ZWN1dGUgbXVsdGl3YXkgbWVyZ2UgKnNlcXVlbnRpYWxseSouCisgICAgICByZXR1cm4gX19zZXF1ZW50aWFsX211bHRpd2F5X21lcmdlCisJPC8qIF9fc3RhYmxlID0gKi8gdHJ1ZSwgLyogX19zZW50aW5lbHMgPSAqLyBmYWxzZT4KKyAgICAgICAgICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICAqKF9fc2Vxc19iZWdpbi0+c2Vjb25kKSwgX19sZW5ndGgsIF9fY29tcCk7CisgICAgfQorCisgIC8vIHB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlclBhaXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyT3V0LAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlck91dAorICAgIHN0YWJsZV9tdWx0aXdheV9tZXJnZShfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCSAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkJICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCQkgIF9fZ251X3BhcmFsbGVsOjpleGFjdF90YWcgX190YWcpCisgICAgeworICAgICAgdHlwZWRlZiBfRGlmZmVyZW5jZVRwIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbikKKworICAgICAgLy8gY2F0Y2ggc3BlY2lhbCBjYXNlOiBubyBzZXF1ZW5jZXMKKyAgICAgIGlmIChfX3NlcXNfYmVnaW4gPT0gX19zZXFzX2VuZCkKKwlyZXR1cm4gX190YXJnZXQ7CisKKyAgICAgIC8vIEV4ZWN1dGUgbWVyZ2U7IG1heWJlIHBhcmFsbGVsLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBtZXJnZWQKKyAgICAgIC8vIGVsZW1lbnRzIGFuZCB0aGUgbnVtYmVyIG9mIHNlcXVlbmNlcyBhbmQgZ2xvYmFsIHRocmVzaG9sZHMgaW4KKyAgICAgIC8vIFNldHRpbmdzLgorICAgICAgaWYgKChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luID4gMSkKKwkgICYmIF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgICgoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbikgPj0KKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkubXVsdGl3YXlfbWVyZ2VfbWluaW1hbF9rKQorICAgICAgICAgICAgJiYgKChfU2VxdWVuY2VJbmRleClfX2xlbmd0aCA+PQorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5tdWx0aXdheV9tZXJnZV9taW5pbWFsX24pKSkKKwlyZXR1cm4gcGFyYWxsZWxfbXVsdGl3YXlfbWVyZ2UKKyAgICAgICAgICA8LyogX19zdGFibGUgPSAqLyB0cnVlLCAvKiBfX3NlbnRpbmVscyA9ICovIGZhbHNlPgorCSAgKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsCisJICAgbXVsdGl3YXlfbWVyZ2VfZXhhY3Rfc3BsaXR0aW5nPC8qIF9fc3RhYmxlID0gKi8gdHJ1ZSwKKwkgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyUGFpckl0ZXJhdG9yPgorCSAgIDo6dmFsdWVfdHlwZSosIF9Db21wYXJlLCBfRGlmZmVyZW5jZVRwPiwKKwkgICBzdGF0aWNfY2FzdDxfRGlmZmVyZW5jZVR5cGU+KF9fbGVuZ3RoKSwgX19jb21wLAorCSAgIF9fdGFnLl9fZ2V0X251bV90aHJlYWRzKCkpOworICAgICAgZWxzZQorCXJldHVybiBfX3NlcXVlbnRpYWxfbXVsdGl3YXlfbWVyZ2UKKwkgIDwvKiBfX3N0YWJsZSA9ICovIHRydWUsIC8qIF9fc2VudGluZWxzID0gKi8gZmFsc2U+CisJICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICAqKF9fc2Vxc19iZWdpbi0+c2Vjb25kKSwgX19sZW5ndGgsIF9fY29tcCk7CisgICAgfQorCisgIC8vIHB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlclBhaXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyT3V0LAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlck91dAorICAgIHN0YWJsZV9tdWx0aXdheV9tZXJnZShfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCSAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkJICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCQkgIHNhbXBsaW5nX3RhZyBfX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworICAgICAgX0dMSUJDWFhfQ0FMTChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luKQorCisgICAgICAvLyBjYXRjaCBzcGVjaWFsIGNhc2U6IG5vIHNlcXVlbmNlcworICAgICAgaWYgKF9fc2Vxc19iZWdpbiA9PSBfX3NlcXNfZW5kKQorCXJldHVybiBfX3RhcmdldDsKKworICAgICAgLy8gRXhlY3V0ZSBtZXJnZTsgbWF5YmUgcGFyYWxsZWwsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIG1lcmdlZAorICAgICAgLy8gZWxlbWVudHMgYW5kIHRoZSBudW1iZXIgb2Ygc2VxdWVuY2VzIGFuZCBnbG9iYWwgdGhyZXNob2xkcyBpbgorICAgICAgLy8gU2V0dGluZ3MuCisgICAgICBpZiAoKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4gPiAxKQorCSAgJiYgX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgKChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luKSA+PQorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5tdWx0aXdheV9tZXJnZV9taW5pbWFsX2spCisgICAgICAgICAgICAmJiAoKF9TZXF1ZW5jZUluZGV4KV9fbGVuZ3RoID49CisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm11bHRpd2F5X21lcmdlX21pbmltYWxfbikpKQorCXJldHVybiBwYXJhbGxlbF9tdWx0aXdheV9tZXJnZQorICAgICAgICAgIDwvKiBfX3N0YWJsZSA9ICovIHRydWUsIC8qIF9fc2VudGluZWxzID0gKi8gZmFsc2U+CisJICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICBtdWx0aXdheV9tZXJnZV9zYW1wbGluZ19zcGxpdHRpbmc8LyogX19zdGFibGUgPSAqLyB0cnVlLAorCSAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXJQYWlySXRlcmF0b3I+CisJICAgOjp2YWx1ZV90eXBlKiwgX0NvbXBhcmUsIF9EaWZmZXJlbmNlVHA+LAorCSAgIHN0YXRpY19jYXN0PF9EaWZmZXJlbmNlVHlwZT4oX19sZW5ndGgpLCBfX2NvbXAsCisJICAgX190YWcuX19nZXRfbnVtX3RocmVhZHMoKSk7CisgICAgICBlbHNlCisJcmV0dXJuIF9fc2VxdWVudGlhbF9tdWx0aXdheV9tZXJnZQorICAgICAgICAgIDwvKiBfX3N0YWJsZSA9ICovIHRydWUsIC8qIF9fc2VudGluZWxzID0gKi8gZmFsc2U+CisJICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICAqKF9fc2Vxc19iZWdpbi0+c2Vjb25kKSwgX19sZW5ndGgsIF9fY29tcCk7CisgICAgfQorCisgIC8vIHB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlclBhaXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyT3V0LAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlck91dAorICAgIHN0YWJsZV9tdWx0aXdheV9tZXJnZShfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCSAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkJICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCQkgIHBhcmFsbGVsX3RhZyBfX3RhZyA9IHBhcmFsbGVsX3RhZygwKSkKKyAgICB7CisgICAgICByZXR1cm4gc3RhYmxlX211bHRpd2F5X21lcmdlCisJKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsIF9fbGVuZ3RoLCBfX2NvbXAsCisJIGV4YWN0X3RhZyhfX3RhZy5fX2dldF9udW1fdGhyZWFkcygpKSk7CisgICAgfQorCisgIC8vIHB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlclBhaXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyT3V0LAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlck91dAorICAgIHN0YWJsZV9tdWx0aXdheV9tZXJnZShfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCSAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkJICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCQkgIGRlZmF1bHRfcGFyYWxsZWxfdGFnIF9fdGFnKQorICAgIHsKKyAgICAgIHJldHVybiBzdGFibGVfbXVsdGl3YXlfbWVyZ2UKKwkoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwgX19sZW5ndGgsIF9fY29tcCwKKwkgZXhhY3RfdGFnKF9fdGFnLl9fZ2V0X251bV90aHJlYWRzKCkpKTsKKyAgICB9CisKKyAgLyoqCisgICAqIEBicmllZiBNdWx0aXdheSBNZXJnZSBGcm9udGVuZC4KKyAgICoKKyAgICogTWVyZ2UgdGhlIHNlcXVlbmNlcyBzcGVjaWZpZWQgYnkgc2Vxc19iZWdpbiBhbmQgX19zZXFzX2VuZCBpbnRvCisgICAqIF9fdGFyZ2V0LiAgX19zZXFzX2JlZ2luIGFuZCBfX3NlcXNfZW5kIG11c3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZgorICAgKiBwYWlycy4gIFRoZXNlIHBhaXJzIG11c3QgY29udGFpbiBhbiBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisgICAqIG9mIGEgc2VxdWVuY2UgaW4gdGhlaXIgZmlyc3QgZW50cnkgYW5kIGFuIGl0ZXJhdG9yIHRoZSBfTV9lbmQgb2YKKyAgICogdGhlIHNhbWUgc2VxdWVuY2UgaW4gdGhlaXIgc2Vjb25kIGVudHJ5LgorICAgKgorICAgKiBUaWVzIGFyZSBicm9rZW4gYXJiaXRyYXJpbHkuICBTZWUgc3RhYmxlX211bHRpd2F5X21lcmdlIGZvciBhIHZhcmlhbnQKKyAgICogdGhhdCBicmVha3MgdGllcyBieSBzZXF1ZW5jZSBudW1iZXIgYnV0IGlzIHNsb3dlci4KKyAgICoKKyAgICogVGhlIGZpcnN0IGVudHJpZXMgb2YgdGhlIHBhaXJzIChpLmUuIHRoZSBiZWdpbiBpdGVyYXRvcnMpIHdpbGwgYmUgbW92ZWQKKyAgICogZm9yd2FyZCBhY2NvcmRpbmdseS4KKyAgICoKKyAgICogVGhlIG91dHB1dCBzZXF1ZW5jZSBoYXMgdG8gcHJvdmlkZSBlbm91Z2ggc3BhY2UgZm9yIGFsbCBlbGVtZW50cworICAgKiB0aGF0IGFyZSB3cml0dGVuIHRvIGl0LgorICAgKgorICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbWVyZ2UgdGhlIGlucHV0IHNlcXVlbmNlczoKKyAgICoKKyAgICogLSBub3Qgc3RhYmxlCisgICAqIC0gcGFyYWxsZWwsIGRlcGVuZGluZyBvbiB0aGUgaW5wdXQgc2l6ZSBhbmQgU2V0dGluZ3MKKyAgICogLSB1c2luZyBzYW1wbGluZyBmb3Igc3BsaXR0aW5nCisgICAqIC0gdXNpbmcgc2VudGluZWxzCisgICAqCisgICAqIFlvdSBoYXZlIHRvIHRha2UgY2FyZSB0aGF0IHRoZSBlbGVtZW50IHRoZSBfTV9lbmQgaXRlcmF0b3IgcG9pbnRzIHRvIGlzCisgICAqIHJlYWRhYmxlIGFuZCBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgZ3JlYXRlciB0aGFuIGFueSBvdGhlciBub24tc2VudGluZWwKKyAgICogdmFsdWUgaW4gYWxsIHNlcXVlbmNlcy4KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICogPHByZT4KKyAgICogICBpbnQgc2VxdWVuY2VzWzEwXVsxMV07CisgICAqICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgMTA7ICsrX19pKQorICAgKiAgICAgZm9yIChpbnQgX19qID0gMDsgX19pIDwgMTE7ICsrX19qKQorICAgKiAgICAgICBzZXF1ZW5jZXNbX19pXVtfX2pdID0gX19qOyAvLyBfX2xhc3Qgb25lIGlzIHNlbnRpbmVsIQorICAgKgorICAgKiAgIGludCBfX291dFszM107CisgICAqICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGludCo+ID4gc2VxczsKKyAgICogICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxMDsgKytfX2kpCisgICAqICAgICB7IHNlcXMucHVzaChzdGQ6Om1ha2VfcGFpcjxpbnQqPihzZXF1ZW5jZXNbX19pXSwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlc1tfX2ldICsgMTApKSB9CisgICAqCisgICAqICAgbXVsdGl3YXlfbWVyZ2Uoc2Vxcy5iZWdpbigpLCBzZXFzLmVuZCgpLCBfX3RhcmdldCwgc3RkOjpsZXNzPGludD4oKSwgMzMpOworICAgKiA8L3ByZT4KKyAgICoKKyAgICogQHByZSBBbGwgaW5wdXQgc2VxdWVuY2VzIG11c3QgYmUgc29ydGVkLgorICAgKiBAcHJlIFRhcmdldCBtdXN0IHByb3ZpZGUgZW5vdWdoIHNwYWNlIHRvIG1lcmdlIG91dCBsZW5ndGggZWxlbWVudHMgb3IKKyAgICogICAgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbGwgc2VxdWVuY2VzLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKyAgICogQHByZSBGb3IgZWFjaCBAYyBfX2ksIEBjIF9fc2Vxc19iZWdpbltfX2ldLnNlY29uZCBtdXN0IGJlIHRoZSBlbmQKKyAgICogICAgbWFya2VyIG9mIHRoZSBzZXF1ZW5jZSwgYnV0IGFsc28gcmVmZXJlbmNlIHRoZSBvbmUgbW9yZSBfX3NlbnRpbmVsCisgICAqICAgIGVsZW1lbnQuCisgICAqCisgICAqIEBwb3N0IFtfX3RhcmdldCwgcmV0dXJuIF9fdmFsdWUpIGNvbnRhaW5zIG1lcmdlZCBfX2VsZW1lbnRzIGZyb20gdGhlCisgICAqICAgIGlucHV0IHNlcXVlbmNlcy4KKyAgICogQHBvc3QgcmV0dXJuIF9fdmFsdWUgLSBfX3RhcmdldCA9IG1pbihfX2xlbmd0aCwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGFsbAorICAgKiAgICBzZXF1ZW5jZXMpLgorICAgKgorICAgKiBAc2VlIHN0YWJsZV9tdWx0aXdheV9tZXJnZV9zZW50aW5lbHMKKyAgICoKKyAgICogQHRwYXJhbSBfUkFJdGVyUGFpckl0ZXJhdG9yIGl0ZXJhdG9yIG92ZXIgc2VxdWVuY2UKKyAgICogICAgb2YgcGFpcnMgb2YgaXRlcmF0b3JzCisgICAqIEB0cGFyYW0gX1JBSXRlck91dCBpdGVyYXRvciBvdmVyIHRhcmdldCBzZXF1ZW5jZQorICAgKiBAdHBhcmFtIF9EaWZmZXJlbmNlVHAgZGlmZmVyZW5jZSB0eXBlIGZvciB0aGUgc2VxdWVuY2UKKyAgICogQHRwYXJhbSBfQ29tcGFyZSBzdHJpY3Qgd2VhayBvcmRlcmluZyB0eXBlIHRvIGNvbXBhcmUgZWxlbWVudHMKKyAgICogICAgaW4gc2VxdWVuY2VzCisgICAqCisgICAqIEBwYXJhbSBfX3NlcXNfYmVnaW4gIF9fYmVnaW4gb2Ygc2VxdWVuY2UgX19zZXF1ZW5jZQorICAgKiBAcGFyYW0gX19zZXFzX2VuZCAgICBfTV9lbmQgb2Ygc2VxdWVuY2UgX19zZXF1ZW5jZQorICAgKiBAcGFyYW0gX190YXJnZXQgICAgICB0YXJnZXQgc2VxdWVuY2UgdG8gbWVyZ2UgdG8uCisgICAqIEBwYXJhbSBfX2NvbXAgICAgICAgIHN0cmljdCB3ZWFrIG9yZGVyaW5nIHRvIHVzZSBmb3IgZWxlbWVudCBjb21wYXJpc29uLgorICAgKiBAcGFyYW0gX19sZW5ndGggTWF4aW11bSBsZW5ndGggdG8gbWVyZ2UsIHBvc3NpYmx5IGxhcmdlciB0aGFuIHRoZQorICAgKiBudW1iZXIgb2YgZWxlbWVudHMgYXZhaWxhYmxlLgorICAgKgorICAgKiBAcmV0dXJuIF9NX2VuZCBpdGVyYXRvciBvZiBvdXRwdXQgc2VxdWVuY2UKKyAgICovCisgIC8vIG11bHRpd2F5X21lcmdlX3NlbnRpbmVscworICAvLyBwdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJQYWlySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlck91dCwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXJPdXQKKyAgICBtdWx0aXdheV9tZXJnZV9zZW50aW5lbHMoX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkgICAgIF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2VuZCwKKwkJCSAgICAgX1JBSXRlck91dCBfX3RhcmdldCwKKwkJCSAgICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wLAorCQkJICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeworICAgICAgdHlwZWRlZiBfRGlmZmVyZW5jZVRwIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbikKKworICAgICAgLy8gY2F0Y2ggc3BlY2lhbCBjYXNlOiBubyBzZXF1ZW5jZXMKKyAgICAgIGlmIChfX3NlcXNfYmVnaW4gPT0gX19zZXFzX2VuZCkKKwlyZXR1cm4gX190YXJnZXQ7CisKKyAgICAgIC8vIEV4ZWN1dGUgbXVsdGl3YXkgbWVyZ2UgKnNlcXVlbnRpYWxseSouCisgICAgICByZXR1cm4gX19zZXF1ZW50aWFsX211bHRpd2F5X21lcmdlCisJPC8qIF9fc3RhYmxlID0gKi8gZmFsc2UsIC8qIF9fc2VudGluZWxzID0gKi8gdHJ1ZT4KKyAgICAgICAgICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLAorICAgICAgICAgICBfX3RhcmdldCwgKihfX3NlcXNfYmVnaW4tPnNlY29uZCksIF9fbGVuZ3RoLCBfX2NvbXApOworICAgIH0KKworICAvLyBwdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJQYWlySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlck91dCwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXJPdXQKKyAgICBtdWx0aXdheV9tZXJnZV9zZW50aW5lbHMoX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkgICAgIF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2VuZCwKKwkJCSAgICAgX1JBSXRlck91dCBfX3RhcmdldCwKKwkJCSAgICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wLAorCQkJICAgICBfX2dudV9wYXJhbGxlbDo6ZXhhY3RfdGFnIF9fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4pCisKKyAgICAgIC8vIGNhdGNoIHNwZWNpYWwgY2FzZTogbm8gc2VxdWVuY2VzCisgICAgICBpZiAoX19zZXFzX2JlZ2luID09IF9fc2Vxc19lbmQpCisJcmV0dXJuIF9fdGFyZ2V0OworCisgICAgICAvLyBFeGVjdXRlIG1lcmdlOyBtYXliZSBwYXJhbGxlbCwgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgbWVyZ2VkCisgICAgICAvLyBlbGVtZW50cyBhbmQgdGhlIG51bWJlciBvZiBzZXF1ZW5jZXMgYW5kIGdsb2JhbCB0aHJlc2hvbGRzIGluCisgICAgICAvLyBTZXR0aW5ncy4KKyAgICAgIGlmICgoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbiA+IDEpCisJICAmJiBfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICAoKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4pID49CisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm11bHRpd2F5X21lcmdlX21pbmltYWxfaykKKyAgICAgICAgICAgICYmICgoX1NlcXVlbmNlSW5kZXgpX19sZW5ndGggPj0KKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkubXVsdGl3YXlfbWVyZ2VfbWluaW1hbF9uKSkpCisJcmV0dXJuIHBhcmFsbGVsX211bHRpd2F5X21lcmdlCisgICAgICAgICAgPC8qIF9fc3RhYmxlID0gKi8gZmFsc2UsIC8qIF9fc2VudGluZWxzID0gKi8gdHJ1ZT4KKwkgIChfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LAorCSAgIG11bHRpd2F5X21lcmdlX2V4YWN0X3NwbGl0dGluZzwvKiBfX3N0YWJsZSA9ICovIGZhbHNlLAorCSAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXJQYWlySXRlcmF0b3I+CisJICAgOjp2YWx1ZV90eXBlKiwgX0NvbXBhcmUsIF9EaWZmZXJlbmNlVHA+LAorCSAgIHN0YXRpY19jYXN0PF9EaWZmZXJlbmNlVHlwZT4oX19sZW5ndGgpLCBfX2NvbXAsCisJICAgX190YWcuX19nZXRfbnVtX3RocmVhZHMoKSk7CisgICAgICBlbHNlCisJcmV0dXJuIF9fc2VxdWVudGlhbF9tdWx0aXdheV9tZXJnZQorICAgICAgICAgIDwvKiBfX3N0YWJsZSA9ICovIGZhbHNlLCAvKiBfX3NlbnRpbmVscyA9ICovIHRydWU+CisJICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICAqKF9fc2Vxc19iZWdpbi0+c2Vjb25kKSwgX19sZW5ndGgsIF9fY29tcCk7CisgICAgfQorCisgIC8vIHB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlclBhaXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyT3V0LAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlck91dAorICAgIG11bHRpd2F5X21lcmdlX3NlbnRpbmVscyhfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCSAgICAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJICAgICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkJICAgICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCQkgICAgIHNhbXBsaW5nX3RhZyBfX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworICAgICAgX0dMSUJDWFhfQ0FMTChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luKQorCisgICAgICAvLyBjYXRjaCBzcGVjaWFsIGNhc2U6IG5vIHNlcXVlbmNlcworICAgICAgaWYgKF9fc2Vxc19iZWdpbiA9PSBfX3NlcXNfZW5kKQorCXJldHVybiBfX3RhcmdldDsKKworICAgICAgLy8gRXhlY3V0ZSBtZXJnZTsgbWF5YmUgcGFyYWxsZWwsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIG1lcmdlZAorICAgICAgLy8gZWxlbWVudHMgYW5kIHRoZSBudW1iZXIgb2Ygc2VxdWVuY2VzIGFuZCBnbG9iYWwgdGhyZXNob2xkcyBpbgorICAgICAgLy8gU2V0dGluZ3MuCisgICAgICBpZiAoKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4gPiAxKQorCSAgJiYgX0dMSUJDWFhfUEFSQUxMRUxfQ09ORElUSU9OKAorICAgICAgICAgICAgKChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luKSA+PQorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5tdWx0aXdheV9tZXJnZV9taW5pbWFsX2spCisgICAgICAgICAgICAmJiAoKF9TZXF1ZW5jZUluZGV4KV9fbGVuZ3RoID49CisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm11bHRpd2F5X21lcmdlX21pbmltYWxfbikpKQorCXJldHVybiBwYXJhbGxlbF9tdWx0aXdheV9tZXJnZQorICAgICAgICAgIDwvKiBfX3N0YWJsZSA9ICovIGZhbHNlLCAvKiBfX3NlbnRpbmVscyA9ICovIHRydWU+CisJICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICBtdWx0aXdheV9tZXJnZV9zYW1wbGluZ19zcGxpdHRpbmc8LyogX19zdGFibGUgPSAqLyBmYWxzZSwKKwkgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyUGFpckl0ZXJhdG9yPgorCSAgIDo6dmFsdWVfdHlwZSosIF9Db21wYXJlLCBfRGlmZmVyZW5jZVRwPiwKKwkgICBzdGF0aWNfY2FzdDxfRGlmZmVyZW5jZVR5cGU+KF9fbGVuZ3RoKSwgX19jb21wLAorCSAgIF9fdGFnLl9fZ2V0X251bV90aHJlYWRzKCkpOworICAgICAgZWxzZQorCXJldHVybiBfX3NlcXVlbnRpYWxfbXVsdGl3YXlfbWVyZ2UKKyAgICAgICAgICA8LyogX19zdGFibGUgPSAqL2ZhbHNlLCAvKiBfX3NlbnRpbmVscyA9ICovIHRydWU+KAorICAgICAgICAgICAgX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICAgKihfX3NlcXNfYmVnaW4tPnNlY29uZCksIF9fbGVuZ3RoLCBfX2NvbXApOworICAgIH0KKworICAvLyBwdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJQYWlySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlck91dCwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXJPdXQKKyAgICBtdWx0aXdheV9tZXJnZV9zZW50aW5lbHMoX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkgICAgIF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2VuZCwKKwkJCSAgICAgX1JBSXRlck91dCBfX3RhcmdldCwKKwkJCSAgICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wLAorCQkJICAgICBwYXJhbGxlbF90YWcgX190YWcgPSBwYXJhbGxlbF90YWcoMCkpCisgICAgeworICAgICAgcmV0dXJuIG11bHRpd2F5X21lcmdlX3NlbnRpbmVscworCShfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LCBfX2xlbmd0aCwgX19jb21wLAorCSBleGFjdF90YWcoX190YWcuX19nZXRfbnVtX3RocmVhZHMoKSkpOworICAgIH0KKworICAvLyBwdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJQYWlySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlck91dCwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXJPdXQKKyAgICBtdWx0aXdheV9tZXJnZV9zZW50aW5lbHMoX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkgICAgIF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2VuZCwKKwkJCSAgICAgX1JBSXRlck91dCBfX3RhcmdldCwKKwkJCSAgICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwgX0NvbXBhcmUgX19jb21wLAorCQkJICAgICBkZWZhdWx0X3BhcmFsbGVsX3RhZyBfX3RhZykKKyAgICB7CisgICAgICByZXR1cm4gbXVsdGl3YXlfbWVyZ2Vfc2VudGluZWxzCisJKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsIF9fbGVuZ3RoLCBfX2NvbXAsCisJIGV4YWN0X3RhZyhfX3RhZy5fX2dldF9udW1fdGhyZWFkcygpKSk7CisgICAgfQorCisgIC8vIHN0YWJsZV9tdWx0aXdheV9tZXJnZV9zZW50aW5lbHMKKyAgLy8gcHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyUGFpckl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJPdXQsCisJICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyT3V0CisgICAgc3RhYmxlX211bHRpd2F5X21lcmdlX3NlbnRpbmVscyhfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCQkgICAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJCSAgICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkJCSAgICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCQkJICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworICAgICAgX0dMSUJDWFhfQ0FMTChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luKQorCisgICAgICAvLyBjYXRjaCBzcGVjaWFsIGNhc2U6IG5vIHNlcXVlbmNlcworICAgICAgaWYgKF9fc2Vxc19iZWdpbiA9PSBfX3NlcXNfZW5kKQorCXJldHVybiBfX3RhcmdldDsKKworICAgICAgLy8gRXhlY3V0ZSBtdWx0aXdheSBtZXJnZSAqc2VxdWVudGlhbGx5Ki4KKyAgICAgIHJldHVybiBfX3NlcXVlbnRpYWxfbXVsdGl3YXlfbWVyZ2UKKwk8LyogX19zdGFibGUgPSAqLyB0cnVlLCAvKiBfX3NlbnRpbmVscyA9ICovIHRydWU+CisJKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsCisJICooX19zZXFzX2JlZ2luLT5zZWNvbmQpLCBfX2xlbmd0aCwgX19jb21wKTsKKyAgICB9CisKKyAgLy8gcHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyUGFpckl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJPdXQsCisJICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyT3V0CisgICAgc3RhYmxlX211bHRpd2F5X21lcmdlX3NlbnRpbmVscyhfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCQkgICAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJCSAgICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkJCSAgICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCQkJICAgIF9fZ251X3BhcmFsbGVsOjpleGFjdF90YWcgX190YWcpCisgICAgeworICAgICAgdHlwZWRlZiBfRGlmZmVyZW5jZVRwIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbikKKworICAgICAgLy8gY2F0Y2ggc3BlY2lhbCBjYXNlOiBubyBzZXF1ZW5jZXMKKyAgICAgIGlmIChfX3NlcXNfYmVnaW4gPT0gX19zZXFzX2VuZCkKKwlyZXR1cm4gX190YXJnZXQ7CisKKyAgICAgIC8vIEV4ZWN1dGUgbWVyZ2U7IG1heWJlIHBhcmFsbGVsLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBtZXJnZWQKKyAgICAgIC8vIGVsZW1lbnRzIGFuZCB0aGUgbnVtYmVyIG9mIHNlcXVlbmNlcyBhbmQgZ2xvYmFsIHRocmVzaG9sZHMgaW4KKyAgICAgIC8vIFNldHRpbmdzLgorICAgICAgaWYgKChfX3NlcXNfZW5kIC0gX19zZXFzX2JlZ2luID4gMSkKKwkgICYmIF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgICgoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbikgPj0KKyAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm11bHRpd2F5X21lcmdlX21pbmltYWxfaykKKyAgICAgICAgICAgICYmICgoX1NlcXVlbmNlSW5kZXgpX19sZW5ndGggPj0KKyAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm11bHRpd2F5X21lcmdlX21pbmltYWxfbikpKQorCXJldHVybiBwYXJhbGxlbF9tdWx0aXdheV9tZXJnZQorICAgICAgICAgIDwvKiBfX3N0YWJsZSA9ICovIHRydWUsIC8qIF9fc2VudGluZWxzID0gKi8gdHJ1ZT4KKwkgIChfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LAorCSAgIG11bHRpd2F5X21lcmdlX2V4YWN0X3NwbGl0dGluZzwvKiBfX3N0YWJsZSA9ICovIHRydWUsCisJICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlclBhaXJJdGVyYXRvcj4KKwkgICA6OnZhbHVlX3R5cGUqLCBfQ29tcGFyZSwgX0RpZmZlcmVuY2VUcD4sCisJICAgc3RhdGljX2Nhc3Q8X0RpZmZlcmVuY2VUeXBlPihfX2xlbmd0aCksIF9fY29tcCwKKwkgICBfX3RhZy5fX2dldF9udW1fdGhyZWFkcygpKTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gX19zZXF1ZW50aWFsX211bHRpd2F5X21lcmdlCisgICAgICAgICAgPC8qIF9fc3RhYmxlID0gKi8gdHJ1ZSwgLyogX19zZW50aW5lbHMgPSAqLyB0cnVlPgorCSAgKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsCisJICAgKihfX3NlcXNfYmVnaW4tPnNlY29uZCksIF9fbGVuZ3RoLCBfX2NvbXApOworICAgIH0KKworICAvLyBwdWJsaWMgaW50ZXJmYWNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXJQYWlySXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX1JBSXRlck91dCwKKwkgICB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIF9SQUl0ZXJPdXQKKyAgICBzdGFibGVfbXVsdGl3YXlfbWVyZ2Vfc2VudGluZWxzKF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2JlZ2luLAorCQkJCSAgICBfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19lbmQsCisJCQkJICAgIF9SQUl0ZXJPdXQgX190YXJnZXQsCisJCQkJICAgIF9EaWZmZXJlbmNlVHAgX19sZW5ndGgsCisJCQkJICAgIF9Db21wYXJlIF9fY29tcCwKKwkJCQkgICAgc2FtcGxpbmdfdGFnIF9fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4pCisKKyAgICAgIC8vIGNhdGNoIHNwZWNpYWwgY2FzZTogbm8gc2VxdWVuY2VzCisgICAgICBpZiAoX19zZXFzX2JlZ2luID09IF9fc2Vxc19lbmQpCisJcmV0dXJuIF9fdGFyZ2V0OworCisgICAgICAvLyBFeGVjdXRlIG1lcmdlOyBtYXliZSBwYXJhbGxlbCwgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgbWVyZ2VkCisgICAgICAvLyBlbGVtZW50cyBhbmQgdGhlIG51bWJlciBvZiBzZXF1ZW5jZXMgYW5kIGdsb2JhbCB0aHJlc2hvbGRzIGluCisgICAgICAvLyBTZXR0aW5ncy4KKyAgICAgIGlmICgoX19zZXFzX2VuZCAtIF9fc2Vxc19iZWdpbiA+IDEpCisJICAmJiBfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICAoKF9fc2Vxc19lbmQgLSBfX3NlcXNfYmVnaW4pID49CisgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLm11bHRpd2F5X21lcmdlX21pbmltYWxfaykKKyAgICAgICAgICAgICYmICgoX1NlcXVlbmNlSW5kZXgpX19sZW5ndGggPj0KKyAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkubXVsdGl3YXlfbWVyZ2VfbWluaW1hbF9uKSkpCisJcmV0dXJuIHBhcmFsbGVsX211bHRpd2F5X21lcmdlCisgICAgICAgICAgPC8qIF9fc3RhYmxlID0gKi8gdHJ1ZSwgLyogX19zZW50aW5lbHMgPSAqLyB0cnVlPgorCSAgKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsCisJICAgbXVsdGl3YXlfbWVyZ2Vfc2FtcGxpbmdfc3BsaXR0aW5nPC8qIF9fc3RhYmxlID0gKi8gdHJ1ZSwKKwkgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyUGFpckl0ZXJhdG9yPgorCSAgIDo6dmFsdWVfdHlwZSosIF9Db21wYXJlLCBfRGlmZmVyZW5jZVRwPiwKKwkgICBzdGF0aWNfY2FzdDxfRGlmZmVyZW5jZVR5cGU+KF9fbGVuZ3RoKSwgX19jb21wLAorCSAgIF9fdGFnLl9fZ2V0X251bV90aHJlYWRzKCkpOworICAgICAgZWxzZQorCXJldHVybiBfX3NlcXVlbnRpYWxfbXVsdGl3YXlfbWVyZ2UKKyAgICAgICAgICA8LyogX19zdGFibGUgPSAqLyB0cnVlLCAvKiBfX3NlbnRpbmVscyA9ICovIHRydWU+CisJICAoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwKKwkgICAqKF9fc2Vxc19iZWdpbi0+c2Vjb25kKSwgX19sZW5ndGgsIF9fY29tcCk7CisgICAgfQorCisgIC8vIHB1YmxpYyBpbnRlcmZhY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlclBhaXJJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfUkFJdGVyT3V0LAorCSAgIHR5cGVuYW1lIF9EaWZmZXJlbmNlVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgX1JBSXRlck91dAorICAgIHN0YWJsZV9tdWx0aXdheV9tZXJnZV9zZW50aW5lbHMoX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfYmVnaW4sCisJCQkJICAgIF9SQUl0ZXJQYWlySXRlcmF0b3IgX19zZXFzX2VuZCwKKwkJCQkgICAgX1JBSXRlck91dCBfX3RhcmdldCwKKwkJCQkgICAgX0RpZmZlcmVuY2VUcCBfX2xlbmd0aCwKKwkJCQkgICAgX0NvbXBhcmUgX19jb21wLAorCQkJCSAgICBwYXJhbGxlbF90YWcgX190YWcgPSBwYXJhbGxlbF90YWcoMCkpCisgICAgeworICAgICAgcmV0dXJuIHN0YWJsZV9tdWx0aXdheV9tZXJnZV9zZW50aW5lbHMKKwkoX19zZXFzX2JlZ2luLCBfX3NlcXNfZW5kLCBfX3RhcmdldCwgX19sZW5ndGgsIF9fY29tcCwKKwkgZXhhY3RfdGFnKF9fdGFnLl9fZ2V0X251bV90aHJlYWRzKCkpKTsKKyAgICB9CisKKyAgLy8gcHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyUGFpckl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9SQUl0ZXJPdXQsCisJICAgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBfUkFJdGVyT3V0CisgICAgc3RhYmxlX211bHRpd2F5X21lcmdlX3NlbnRpbmVscyhfUkFJdGVyUGFpckl0ZXJhdG9yIF9fc2Vxc19iZWdpbiwKKwkJCQkgICAgX1JBSXRlclBhaXJJdGVyYXRvciBfX3NlcXNfZW5kLAorCQkJCSAgICBfUkFJdGVyT3V0IF9fdGFyZ2V0LAorCQkJCSAgICBfRGlmZmVyZW5jZVRwIF9fbGVuZ3RoLCBfQ29tcGFyZSBfX2NvbXAsCisJCQkJICAgIGRlZmF1bHRfcGFyYWxsZWxfdGFnIF9fdGFnKQorICAgIHsKKyAgICAgIHJldHVybiBzdGFibGVfbXVsdGl3YXlfbWVyZ2Vfc2VudGluZWxzCisJKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsIF9fbGVuZ3RoLCBfX2NvbXAsCisJIGV4YWN0X3RhZyhfX3RhZy5fX2dldF9udW1fdGhyZWFkcygpKSk7CisgICAgfQorfTsgLy8gbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9NVUxUSVdBWV9NRVJHRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL211bHRpd2F5X21lcmdlc29ydC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9tdWx0aXdheV9tZXJnZXNvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODVjZWMyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9tdWx0aXdheV9tZXJnZXNvcnQuaApAQCAtMCwwICsxLDQ4MCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL211bHRpd2F5X21lcmdlc29ydC5oCisgKiAgQGJyaWVmIFBhcmFsbGVsIG11bHRpd2F5IG1lcmdlIHNvcnQuCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBKb2hhbm5lcyBTaW5nbGVyLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX01VTFRJV0FZX01FUkdFU09SVF9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX01VTFRJV0FZX01FUkdFU09SVF9IIDEKKworI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPHBhcmFsbGVsL2Jhc2ljX2l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnby5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3BhcmFsbGVsLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvbXVsdGl3YXlfbWVyZ2UuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKiBAYnJpZWYgU3Vic2VxdWVuY2UgZGVzY3JpcHRpb24uICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9EaWZmZXJlbmNlVHA+CisgICAgc3RydWN0IF9QaWVjZQorICAgIHsKKyAgICAgIHR5cGVkZWYgX0RpZmZlcmVuY2VUcCBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIC8qKiBAYnJpZWYgQmVnaW4gb2Ygc3Vic2VxdWVuY2UuICovCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX01fYmVnaW47CisKKyAgICAgIC8qKiBAYnJpZWYgRW5kIG9mIHN1YnNlcXVlbmNlLiAqLworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9NX2VuZDsKKyAgICB9OworCisgIC8qKiBAYnJpZWYgRGF0YSBhY2Nlc3NlZCBieSBhbGwgdGhyZWFkcy4KKyAgICoKKyAgICogIFBNV01TID0gcGFyYWxsZWwgbXVsdGl3YXkgbWVyZ2Vzb3J0ICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgc3RydWN0IF9QTVdNU1NvcnRpbmdEYXRhCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIC8qKiBAYnJpZWYgTnVtYmVyIG9mIHRocmVhZHMgaW52b2x2ZWQuICovCisgICAgICBfVGhyZWFkSW5kZXggX01fbnVtX3RocmVhZHM7CisKKyAgICAgIC8qKiBAYnJpZWYgSW5wdXQgX19iZWdpbi4gKi8KKyAgICAgIF9SQUl0ZXIgX01fc291cmNlOworCisgICAgICAvKiogQGJyaWVmIFN0YXJ0IGluZGljZXMsIHBlciB0aHJlYWQuICovCisgICAgICBfRGlmZmVyZW5jZVR5cGUqIF9NX3N0YXJ0czsKKworICAgICAgLyoqIEBicmllZiBTdG9yYWdlIGluIHdoaWNoIHRvIHNvcnQuICovCisgICAgICBfVmFsdWVUeXBlKiogX01fdGVtcG9yYXJ5OworCisgICAgICAvKiogQGJyaWVmIFNhbXBsZXMuICovCisgICAgICBfVmFsdWVUeXBlKiBfTV9zYW1wbGVzOworCisgICAgICAvKiogQGJyaWVmIE9mZnNldHMgdG8gYWRkIHRvIHRoZSBmb3VuZCBwb3NpdGlvbnMuICovCisgICAgICBfRGlmZmVyZW5jZVR5cGUqIF9NX29mZnNldHM7CisKKyAgICAgIC8qKiBAYnJpZWYgUGllY2VzIG9mIGRhdGEgdG8gbWVyZ2UgQGMgW3RocmVhZF1bX19zZXF1ZW5jZV0gKi8KKyAgICAgIHN0ZDo6dmVjdG9yPF9QaWVjZTxfRGlmZmVyZW5jZVR5cGU+ID4qIF9NX3BpZWNlczsKKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiBTZWxlY3QgX01fc2FtcGxlcyBmcm9tIGEgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19zZCBQb2ludGVyIHRvIGFsZ29yaXRobSBkYXRhLiBfUmVzdWx0IHdpbGwgYmUgcGxhY2VkIGluCisgICAqICBAYyBfX3NkLT5fTV9zYW1wbGVzLgorICAgKiAgQHBhcmFtIF9fbnVtX3NhbXBsZXMgTnVtYmVyIG9mIF9NX3NhbXBsZXMgdG8gc2VsZWN0LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0RpZmZlcmVuY2VUcD4KKyAgICB2b2lkCisgICAgX19kZXRlcm1pbmVfc2FtcGxlcyhfUE1XTVNTb3J0aW5nRGF0YTxfUkFJdGVyPiogX19zZCwKKwkJCV9EaWZmZXJlbmNlVHAgX19udW1fc2FtcGxlcykKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiBfRGlmZmVyZW5jZVRwIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX1RocmVhZEluZGV4IF9faWFtID0gb21wX2dldF90aHJlYWRfbnVtKCk7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSogX19lcyA9IG5ldyBfRGlmZmVyZW5jZVR5cGVbX19udW1fc2FtcGxlcyArIDJdOworCisgICAgICBfX2VxdWFsbHlfc3BsaXQoX19zZC0+X01fc3RhcnRzW19faWFtICsgMV0gLSBfX3NkLT5fTV9zdGFydHNbX19pYW1dLCAKKwkJICAgICAgX19udW1fc2FtcGxlcyArIDEsIF9fZXMpOworCisgICAgICBmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX2kgPSAwOyBfX2kgPCBfX251bV9zYW1wbGVzOyArK19faSkKKwk6Om5ldygmKF9fc2QtPl9NX3NhbXBsZXNbX19pYW0gKiBfX251bV9zYW1wbGVzICsgX19pXSkpCisJICAgIF9WYWx1ZVR5cGUoX19zZC0+X01fc291cmNlW19fc2QtPl9NX3N0YXJ0c1tfX2lhbV0KKwkJCQkgICAgICAgKyBfX2VzW19faSArIDFdXSk7CisKKyAgICAgIGRlbGV0ZVtdIF9fZXM7CisgICAgfQorCisgIC8qKiBAYnJpZWYgU3BsaXQgY29uc2lzdGVudGx5LiAqLworICB0ZW1wbGF0ZTxib29sIF9fZXhhY3QsIHR5cGVuYW1lIF9SQUl0ZXIsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9Tb3J0aW5nUGxhY2VzSXRlcmF0b3I+CisgICAgc3RydWN0IF9TcGxpdENvbnNpc3RlbnRseQorICAgIHsgfTsKKworICAvKiogQGJyaWVmIFNwbGl0IGJ5IGV4YWN0IHNwbGl0dGluZy4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmUsCisJICAgdHlwZW5hbWUgX1NvcnRpbmdQbGFjZXNJdGVyYXRvcj4KKyAgICBzdHJ1Y3QgX1NwbGl0Q29uc2lzdGVudGx5PHRydWUsIF9SQUl0ZXIsIF9Db21wYXJlLCBfU29ydGluZ1BsYWNlc0l0ZXJhdG9yPgorICAgIHsKKyAgICAgIHZvaWQKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX1RocmVhZEluZGV4IF9faWFtLAorCQkgX1BNV01TU29ydGluZ0RhdGE8X1JBSXRlcj4qIF9fc2QsCisJCSBfQ29tcGFyZSYgX19jb21wLAorCQkgY29uc3QgdHlwZW5hbWUKKwkJIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKwkJIF9fbnVtX3NhbXBsZXMpIGNvbnN0CisgICAgICB7CisjICAgICAgIHByYWdtYSBvbXAgYmFycmllcgorCisJc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPF9Tb3J0aW5nUGxhY2VzSXRlcmF0b3IsCisJICAgICAgICAgICAgICAgICAgICAgIF9Tb3J0aW5nUGxhY2VzSXRlcmF0b3I+ID4KKwkgIF9fc2VxcyhfX3NkLT5fTV9udW1fdGhyZWFkcyk7CisJZm9yIChfVGhyZWFkSW5kZXggX19zID0gMDsgX19zIDwgX19zZC0+X01fbnVtX3RocmVhZHM7IF9fcysrKQorCSAgX19zZXFzW19fc10gPSBzdGQ6Om1ha2VfcGFpcihfX3NkLT5fTV90ZW1wb3JhcnlbX19zXSwKKwkJCQkgICAgICAgX19zZC0+X01fdGVtcG9yYXJ5W19fc10KKwkJCQkgICAgICAgKyAoX19zZC0+X01fc3RhcnRzW19fcyArIDFdCisJCQkJCSAgLSBfX3NkLT5fTV9zdGFydHNbX19zXSkpOworCisJc3RkOjp2ZWN0b3I8X1NvcnRpbmdQbGFjZXNJdGVyYXRvcj4gX19vZmZzZXRzKF9fc2QtPl9NX251bV90aHJlYWRzKTsKKworCS8vIGlmIG5vdCBsYXN0IHRocmVhZAorCWlmIChfX2lhbSA8IF9fc2QtPl9NX251bV90aHJlYWRzIC0gMSkKKwkgIG11bHRpc2VxX3BhcnRpdGlvbihfX3NlcXMuYmVnaW4oKSwgX19zZXFzLmVuZCgpLAorCQkJICAgICBfX3NkLT5fTV9zdGFydHNbX19pYW0gKyAxXSwgX19vZmZzZXRzLmJlZ2luKCksCisJCQkgICAgIF9fY29tcCk7CisKKwlmb3IgKF9UaHJlYWRJbmRleCBfX3NlcSA9IDA7IF9fc2VxIDwgX19zZC0+X01fbnVtX3RocmVhZHM7IF9fc2VxKyspCisJICB7CisJICAgIC8vIGZvciBlYWNoIHNlcXVlbmNlCisJICAgIGlmIChfX2lhbSA8IChfX3NkLT5fTV9udW1fdGhyZWFkcyAtIDEpKQorCSAgICAgIF9fc2QtPl9NX3BpZWNlc1tfX2lhbV1bX19zZXFdLl9NX2VuZAorCQk9IF9fb2Zmc2V0c1tfX3NlcV0gLSBfX3NlcXNbX19zZXFdLmZpcnN0OworCSAgICBlbHNlCisJICAgICAgLy8gdmVyeSBlbmQgb2YgdGhpcyBzZXF1ZW5jZQorCSAgICAgIF9fc2QtPl9NX3BpZWNlc1tfX2lhbV1bX19zZXFdLl9NX2VuZCA9CisJCV9fc2QtPl9NX3N0YXJ0c1tfX3NlcSArIDFdIC0gX19zZC0+X01fc3RhcnRzW19fc2VxXTsKKwkgIH0KKworIyAgICAgICBwcmFnbWEgb21wIGJhcnJpZXIKKworCWZvciAoX1RocmVhZEluZGV4IF9fc2VxID0gMDsgX19zZXEgPCBfX3NkLT5fTV9udW1fdGhyZWFkczsgX19zZXErKykKKwkgIHsKKwkgICAgLy8gRm9yIGVhY2ggc2VxdWVuY2UuCisJICAgIGlmIChfX2lhbSA+IDApCisJICAgICAgX19zZC0+X01fcGllY2VzW19faWFtXVtfX3NlcV0uX01fYmVnaW4gPQorCQlfX3NkLT5fTV9waWVjZXNbX19pYW0gLSAxXVtfX3NlcV0uX01fZW5kOworCSAgICBlbHNlCisJICAgICAgLy8gQWJzb2x1dGUgYmVnaW5uaW5nLgorCSAgICAgIF9fc2QtPl9NX3BpZWNlc1tfX2lhbV1bX19zZXFdLl9NX2JlZ2luID0gMDsKKwkgIH0KKyAgICAgIH0KKyAgfTsKKworICAvKiogQGJyaWVmIFNwbGl0IGJ5IHNhbXBsaW5nLiAqLyAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmUsCisJICAgdHlwZW5hbWUgX1NvcnRpbmdQbGFjZXNJdGVyYXRvcj4KKyAgICBzdHJ1Y3QgX1NwbGl0Q29uc2lzdGVudGx5PGZhbHNlLCBfUkFJdGVyLCBfQ29tcGFyZSwgX1NvcnRpbmdQbGFjZXNJdGVyYXRvcj4KKyAgICB7CisgICAgICB2b2lkCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9UaHJlYWRJbmRleCBfX2lhbSwKKwkJIF9QTVdNU1NvcnRpbmdEYXRhPF9SQUl0ZXI+KiBfX3NkLAorCQkgX0NvbXBhcmUmIF9fY29tcCwKKwkJIGNvbnN0IHR5cGVuYW1lCisJCSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisJCSBfX251bV9zYW1wbGVzKSBjb25zdAorICAgICAgeworCXR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisKKwlfX2RldGVybWluZV9zYW1wbGVzKF9fc2QsIF9fbnVtX3NhbXBsZXMpOworCisjICAgICAgIHByYWdtYSBvbXAgYmFycmllcgorCisjICAgICAgIHByYWdtYSBvbXAgc2luZ2xlCisJX19nbnVfc2VxdWVudGlhbDo6c29ydChfX3NkLT5fTV9zYW1wbGVzLAorCQkJICAgICAgIF9fc2QtPl9NX3NhbXBsZXMKKwkJCSAgICAgICArIChfX251bV9zYW1wbGVzICogX19zZC0+X01fbnVtX3RocmVhZHMpLAorCQkJICAgICAgIF9fY29tcCk7CisKKyMgICAgICAgcHJhZ21hIG9tcCBiYXJyaWVyCisKKwlmb3IgKF9UaHJlYWRJbmRleCBfX3MgPSAwOyBfX3MgPCBfX3NkLT5fTV9udW1fdGhyZWFkczsgKytfX3MpCisJICB7CisJICAgIC8vIEZvciBlYWNoIHNlcXVlbmNlLgorCSAgICBpZiAoX19udW1fc2FtcGxlcyAqIF9faWFtID4gMCkKKwkgICAgICBfX3NkLT5fTV9waWVjZXNbX19pYW1dW19fc10uX01fYmVnaW4gPQorICAgICAgICAgICAgICAgIHN0ZDo6bG93ZXJfYm91bmQoX19zZC0+X01fdGVtcG9yYXJ5W19fc10sCisJCQkJIF9fc2QtPl9NX3RlbXBvcmFyeVtfX3NdCisJCQkJICsgKF9fc2QtPl9NX3N0YXJ0c1tfX3MgKyAxXQorCQkJCSAgICAtIF9fc2QtPl9NX3N0YXJ0c1tfX3NdKSwKKwkJCQkgX19zZC0+X01fc2FtcGxlc1tfX251bV9zYW1wbGVzICogX19pYW1dLAorCQkJCSBfX2NvbXApCisgICAgICAgICAgICAgICAgLSBfX3NkLT5fTV90ZW1wb3JhcnlbX19zXTsKKwkgICAgZWxzZQorCSAgICAgIC8vIEFic29sdXRlIGJlZ2lubmluZy4KKwkgICAgICBfX3NkLT5fTV9waWVjZXNbX19pYW1dW19fc10uX01fYmVnaW4gPSAwOworCisJICAgIGlmICgoX19udW1fc2FtcGxlcyAqIChfX2lhbSArIDEpKSA8CisJCShfX251bV9zYW1wbGVzICogX19zZC0+X01fbnVtX3RocmVhZHMpKQorCSAgICAgIF9fc2QtPl9NX3BpZWNlc1tfX2lhbV1bX19zXS5fTV9lbmQgPQorICAgICAgICAgICAgICAgIHN0ZDo6bG93ZXJfYm91bmQoX19zZC0+X01fdGVtcG9yYXJ5W19fc10sCisJCQkJIF9fc2QtPl9NX3RlbXBvcmFyeVtfX3NdCisJCQkJICsgKF9fc2QtPl9NX3N0YXJ0c1tfX3MgKyAxXQorCQkJCSAgICAtIF9fc2QtPl9NX3N0YXJ0c1tfX3NdKSwKKwkJCQkgX19zZC0+X01fc2FtcGxlc1tfX251bV9zYW1wbGVzICogKF9faWFtICsgMSldLAorCQkJCSBfX2NvbXApCisgICAgICAgICAgICAgICAgLSBfX3NkLT5fTV90ZW1wb3JhcnlbX19zXTsKKwkgICAgZWxzZQorCSAgICAgIC8vIEFic29sdXRlIGVuZC4KKwkgICAgICBfX3NkLT5fTV9waWVjZXNbX19pYW1dW19fc10uX01fZW5kID0gKF9fc2QtPl9NX3N0YXJ0c1tfX3MgKyAxXQorCQkJCQkJICAgIC0gX19zZC0+X01fc3RhcnRzW19fc10pOworCSAgfQorICAgICAgfQorICB9OworICAKKyAgdGVtcGxhdGU8Ym9vbCBfX3N0YWJsZSwgdHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgc3RydWN0IF9fcG9zc2libHlfc3RhYmxlX3NvcnQKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgc3RydWN0IF9fcG9zc2libHlfc3RhYmxlX3NvcnQ8dHJ1ZSwgX1JBSXRlciwgX0NvbXBhcmU+CisgICAgeworICAgICAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9SQUl0ZXImIF9fYmVnaW4sCisJCSAgICAgIGNvbnN0IF9SQUl0ZXImIF9fZW5kLCBfQ29tcGFyZSYgX19jb21wKSBjb25zdAorICAgICAgeyBfX2dudV9zZXF1ZW50aWFsOjpzdGFibGVfc29ydChfX2JlZ2luLCBfX2VuZCwgX19jb21wKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgc3RydWN0IF9fcG9zc2libHlfc3RhYmxlX3NvcnQ8ZmFsc2UsIF9SQUl0ZXIsIF9Db21wYXJlPgorICAgIHsKKyAgICAgIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfUkFJdGVyIF9fYmVnaW4sCisJCSAgICAgIGNvbnN0IF9SQUl0ZXIgX19lbmQsIF9Db21wYXJlJiBfX2NvbXApIGNvbnN0CisgICAgICB7IF9fZ251X3NlcXVlbnRpYWw6OnNvcnQoX19iZWdpbiwgX19lbmQsIF9fY29tcCk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGJvb2wgX19zdGFibGUsIHR5cGVuYW1lIFNlcV9SQUl0ZXIsCisJICAgdHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmUsCisJICAgdHlwZW5hbWUgRGlmZlR5cGU+CisgICAgc3RydWN0IF9fcG9zc2libHlfc3RhYmxlX211bHRpd2F5X21lcmdlCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlcV9SQUl0ZXIsIHR5cGVuYW1lIF9SQUl0ZXIsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9EaWZmVHlwZT4KKyAgICBzdHJ1Y3QgX19wb3NzaWJseV9zdGFibGVfbXVsdGl3YXlfbWVyZ2U8dHJ1ZSwgU2VxX1JBSXRlciwKKwkJCQkJICAgIF9SQUl0ZXIsIF9Db21wYXJlLCBfRGlmZlR5cGU+CisgICAgeworICAgICAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IFNlcV9SQUl0ZXImIF9fc2Vxc19iZWdpbiwKKwkJICAgICAgY29uc3QgU2VxX1JBSXRlciYgX19zZXFzX2VuZCwKKwkJICAgICAgY29uc3QgX1JBSXRlciYgX190YXJnZXQsCisJCSAgICAgIF9Db21wYXJlJiBfX2NvbXAsCisJCSAgICAgIF9EaWZmVHlwZSBfX2xlbmd0aF9hbSkgY29uc3QKKyAgICAgIHsgc3RhYmxlX211bHRpd2F5X21lcmdlKF9fc2Vxc19iZWdpbiwgX19zZXFzX2VuZCwgX190YXJnZXQsCisJCQkgICAgICBfX2xlbmd0aF9hbSwgX19jb21wLCBzZXF1ZW50aWFsX3RhZygpKTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VxX1JBSXRlciwgdHlwZW5hbWUgX1JBSXRlciwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0RpZmZUeXBlPgorICAgIHN0cnVjdCBfX3Bvc3NpYmx5X3N0YWJsZV9tdWx0aXdheV9tZXJnZTxmYWxzZSwgU2VxX1JBSXRlciwKKwkJCQkJICAgIF9SQUl0ZXIsIF9Db21wYXJlLCBfRGlmZlR5cGU+CisgICAgeworICAgICAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IFNlcV9SQUl0ZXImIF9fc2Vxc19iZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTZXFfUkFJdGVyJiBfX3NlcXNfZW5kLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SQUl0ZXImIF9fdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlJiBfX2NvbXAsCisgICAgICAgICAgICAgICAgICAgICAgX0RpZmZUeXBlIF9fbGVuZ3RoX2FtKSBjb25zdAorICAgICAgeyBtdWx0aXdheV9tZXJnZShfX3NlcXNfYmVnaW4sIF9fc2Vxc19lbmQsIF9fdGFyZ2V0LCBfX2xlbmd0aF9hbSwKKwkJICAgICAgIF9fY29tcCwgc2VxdWVudGlhbF90YWcoKSk7IH0KKyAgICB9OworCisgIC8qKiBAYnJpZWYgUE1XTVMgY29kZSBleGVjdXRlZCBieSBlYWNoIHRocmVhZC4KKyAgICogIEBwYXJhbSBfX3NkIFBvaW50ZXIgdG8gYWxnb3JpdGhtIGRhdGEuCisgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9fc3RhYmxlLCBib29sIF9fZXhhY3QsIHR5cGVuYW1lIF9SQUl0ZXIsCisJICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgdm9pZAorICAgIHBhcmFsbGVsX3NvcnRfbXdtc19wdShfUE1XTVNTb3J0aW5nRGF0YTxfUkFJdGVyPiogX19zZCwKKwkJCSAgX0NvbXBhcmUmIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX1RocmVhZEluZGV4IF9faWFtID0gb21wX2dldF90aHJlYWRfbnVtKCk7CisKKyAgICAgIC8vIExlbmd0aCBvZiB0aGlzIHRocmVhZCdzIGNodW5rLCBiZWZvcmUgbWVyZ2luZy4KKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2xlbmd0aF9sb2NhbCA9CisJX19zZC0+X01fc3RhcnRzW19faWFtICsgMV0gLSBfX3NkLT5fTV9zdGFydHNbX19pYW1dOworCisgICAgICAvLyBTb3J0IGluIHRlbXBvcmFyeSBzdG9yYWdlLCBsZWF2ZSBzcGFjZSBmb3Igc2VudGluZWwuCisKKyAgICAgIHR5cGVkZWYgX1ZhbHVlVHlwZSogX1NvcnRpbmdQbGFjZXNJdGVyYXRvcjsKKworICAgICAgX19zZC0+X01fdGVtcG9yYXJ5W19faWFtXSA9CisgICAgICAgIHN0YXRpY19jYXN0PF9WYWx1ZVR5cGUqPig6Om9wZXJhdG9yIG5ldyhzaXplb2YoX1ZhbHVlVHlwZSkKKwkJCQkJCSogKF9fbGVuZ3RoX2xvY2FsICsgMSkpKTsKKworICAgICAgLy8gQ29weSB0aGVyZS4KKyAgICAgIHN0ZDo6dW5pbml0aWFsaXplZF9jb3B5KF9fc2QtPl9NX3NvdXJjZSArIF9fc2QtPl9NX3N0YXJ0c1tfX2lhbV0sCisJCQkgICAgICBfX3NkLT5fTV9zb3VyY2UgKyBfX3NkLT5fTV9zdGFydHNbX19pYW1dCisJCQkgICAgICArIF9fbGVuZ3RoX2xvY2FsLAorCQkJICAgICAgX19zZC0+X01fdGVtcG9yYXJ5W19faWFtXSk7CisKKyAgICAgIF9fcG9zc2libHlfc3RhYmxlX3NvcnQ8X19zdGFibGUsIF9Tb3J0aW5nUGxhY2VzSXRlcmF0b3IsIF9Db21wYXJlPigpCisgICAgICAgIChfX3NkLT5fTV90ZW1wb3JhcnlbX19pYW1dLAorCSBfX3NkLT5fTV90ZW1wb3JhcnlbX19pYW1dICsgX19sZW5ndGhfbG9jYWwsCisgICAgICAgICBfX2NvbXApOworCisgICAgICAvLyBJbnZhcmlhbnQ6IGxvY2FsbHkgc29ydGVkIHN1YnNlcXVlbmNlIGluIHNkLT5fTV90ZW1wb3JhcnlbX19pYW1dLAorICAgICAgLy8gX19zZC0+X01fdGVtcG9yYXJ5W19faWFtXSArIF9fbGVuZ3RoX2xvY2FsLgorCisgICAgICAvLyBObyBiYXJyaWVyIGhlcmU6IFN5bmNocm9uaXphdGlvbiBpcyBkb25lIGJ5IHRoZSBzcGxpdHRpbmcgcm91dGluZS4KKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbnVtX3NhbXBsZXMgPQorICAgICAgICBfU2V0dGluZ3M6OmdldCgpLnNvcnRfbXdtc19vdmVyc2FtcGxpbmcgKiBfX3NkLT5fTV9udW1fdGhyZWFkcyAtIDE7CisgICAgICBfU3BsaXRDb25zaXN0ZW50bHk8X19leGFjdCwgX1JBSXRlciwgX0NvbXBhcmUsIF9Tb3J0aW5nUGxhY2VzSXRlcmF0b3I+KCkKKyAgICAgICAgKF9faWFtLCBfX3NkLCBfX2NvbXAsIF9fbnVtX3NhbXBsZXMpOworCisgICAgICAvLyBPZmZzZXQgZnJvbSBfX3RhcmdldCBfX2JlZ2luLCBfX2xlbmd0aCBhZnRlciBtZXJnaW5nLgorICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fb2Zmc2V0ID0gMCwgX19sZW5ndGhfYW0gPSAwOworICAgICAgZm9yIChfVGhyZWFkSW5kZXggX19zID0gMDsgX19zIDwgX19zZC0+X01fbnVtX3RocmVhZHM7IF9fcysrKQorCXsKKwkgIF9fbGVuZ3RoX2FtICs9IChfX3NkLT5fTV9waWVjZXNbX19pYW1dW19fc10uX01fZW5kCisJCQkgIC0gX19zZC0+X01fcGllY2VzW19faWFtXVtfX3NdLl9NX2JlZ2luKTsKKwkgIF9fb2Zmc2V0ICs9IF9fc2QtPl9NX3BpZWNlc1tfX2lhbV1bX19zXS5fTV9iZWdpbjsKKwl9CisKKyAgICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8CisgICAgICAgIHN0ZDo6cGFpcjxfU29ydGluZ1BsYWNlc0l0ZXJhdG9yLCBfU29ydGluZ1BsYWNlc0l0ZXJhdG9yPiA+CisgICAgICAgIF9TZXFWZWN0b3I7CisgICAgICBfU2VxVmVjdG9yIF9fc2VxcyhfX3NkLT5fTV9udW1fdGhyZWFkcyk7CisKKyAgICAgIGZvciAoX1RocmVhZEluZGV4IF9fcyA9IDA7IF9fcyA8IF9fc2QtPl9NX251bV90aHJlYWRzOyArK19fcykKKwl7CisJICBfX3NlcXNbX19zXSA9CisJICAgIHN0ZDo6bWFrZV9wYWlyKF9fc2QtPl9NX3RlbXBvcmFyeVtfX3NdCisJCQkgICArIF9fc2QtPl9NX3BpZWNlc1tfX2lhbV1bX19zXS5fTV9iZWdpbiwKKwkJCSAgIF9fc2QtPl9NX3RlbXBvcmFyeVtfX3NdCisJCQkgICArIF9fc2QtPl9NX3BpZWNlc1tfX2lhbV1bX19zXS5fTV9lbmQpOworCX0KKworICAgICAgX19wb3NzaWJseV9zdGFibGVfbXVsdGl3YXlfbWVyZ2U8CisgICAgICAgIF9fc3RhYmxlLCB0eXBlbmFtZSBfU2VxVmVjdG9yOjppdGVyYXRvciwKKwlfUkFJdGVyLCBfQ29tcGFyZSwgX0RpZmZlcmVuY2VUeXBlPigpKF9fc2Vxcy5iZWdpbigpLCBfX3NlcXMuZW5kKCksCisJCQkJICAgICBfX3NkLT5fTV9zb3VyY2UgKyBfX29mZnNldCwgX19jb21wLAorCQkJCSAgICAgX19sZW5ndGhfYW0pOworCisjICAgICBwcmFnbWEgb21wIGJhcnJpZXIKKworICAgICAgZm9yIChfRGlmZmVyZW5jZVR5cGUgX19pID0gMDsgX19pIDwgX19sZW5ndGhfbG9jYWw7ICsrX19pKQorCV9fc2QtPl9NX3RlbXBvcmFyeVtfX2lhbV1bX19pXS5+X1ZhbHVlVHlwZSgpOworICAgICAgOjpvcGVyYXRvciBkZWxldGUoX19zZC0+X01fdGVtcG9yYXJ5W19faWFtXSk7CisgICAgfQorCisgIC8qKiBAYnJpZWYgUE1XTVMgbWFpbiBjYWxsLgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2Ygc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiAgQHBhcmFtIF9fbnVtX3RocmVhZHMgTnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlLgorICAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfX3N0YWJsZSwgYm9vbCBfX2V4YWN0LCB0eXBlbmFtZSBfUkFJdGVyLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgcGFyYWxsZWxfc29ydF9td21zKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKwkJICAgICAgIF9Db21wYXJlIF9fY29tcCwKKwkJICAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19lbmQgLSBfX2JlZ2luKQorCisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbiA9IF9fZW5kIC0gX19iZWdpbjsKKworICAgICAgaWYgKF9fbiA8PSAxKQorCXJldHVybjsKKworICAgICAgLy8gYXQgbGVhc3Qgb25lIGVsZW1lbnQgcGVyIHRocmVhZAorICAgICAgaWYgKF9fbnVtX3RocmVhZHMgPiBfX24pCisJX19udW1fdGhyZWFkcyA9IHN0YXRpY19jYXN0PF9UaHJlYWRJbmRleD4oX19uKTsKKworICAgICAgLy8gc2hhcmVkIHZhcmlhYmxlcworICAgICAgX1BNV01TU29ydGluZ0RhdGE8X1JBSXRlcj4gX19zZDsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSogX19zdGFydHM7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19zaXplOworCisjICAgICBwcmFnbWEgb21wIHBhcmFsbGVsIG51bV90aHJlYWRzKF9fbnVtX3RocmVhZHMpCisgICAgICB7CisgICAgICAgIF9fbnVtX3RocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7IC8vbm8gbW9yZSB0aHJlYWRzIHRoYW4gcmVxdWVzdGVkCisKKyMgICAgICAgcHJhZ21hIG9tcCBzaW5nbGUKKwl7CisJICBfX3NkLl9NX251bV90aHJlYWRzID0gX19udW1fdGhyZWFkczsKKwkgIF9fc2QuX01fc291cmNlID0gX19iZWdpbjsKKwkgIAorCSAgX19zZC5fTV90ZW1wb3JhcnkgPSBuZXcgX1ZhbHVlVHlwZSpbX19udW1fdGhyZWFkc107CisKKwkgIGlmICghX19leGFjdCkKKwkgICAgeworCSAgICAgIF9fc2l6ZSA9CisJCShfU2V0dGluZ3M6OmdldCgpLnNvcnRfbXdtc19vdmVyc2FtcGxpbmcgKiBfX251bV90aHJlYWRzIC0gMSkKKwkJKiBfX251bV90aHJlYWRzOworCSAgICAgIF9fc2QuX01fc2FtcGxlcyA9IHN0YXRpY19jYXN0PF9WYWx1ZVR5cGUqPgorCQkoOjpvcGVyYXRvciBuZXcoX19zaXplICogc2l6ZW9mKF9WYWx1ZVR5cGUpKSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgX19zZC5fTV9zYW1wbGVzID0gMDsKKworCSAgX19zZC5fTV9vZmZzZXRzID0gbmV3IF9EaWZmZXJlbmNlVHlwZVtfX251bV90aHJlYWRzIC0gMV07CisJICBfX3NkLl9NX3BpZWNlcworCSAgICA9IG5ldyBzdGQ6OnZlY3RvcjxfUGllY2U8X0RpZmZlcmVuY2VUeXBlPiA+W19fbnVtX3RocmVhZHNdOworCSAgZm9yIChfVGhyZWFkSW5kZXggX19zID0gMDsgX19zIDwgX19udW1fdGhyZWFkczsgKytfX3MpCisJICAgIF9fc2QuX01fcGllY2VzW19fc10ucmVzaXplKF9fbnVtX3RocmVhZHMpOworCSAgX19zdGFydHMgPSBfX3NkLl9NX3N0YXJ0cyA9IG5ldyBfRGlmZmVyZW5jZVR5cGVbX19udW1fdGhyZWFkcyArIDFdOworCisJICBfRGlmZmVyZW5jZVR5cGUgX19jaHVua19sZW5ndGggPSBfX24gLyBfX251bV90aHJlYWRzOworCSAgX0RpZmZlcmVuY2VUeXBlIF9fc3BsaXQgPSBfX24gJSBfX251bV90aHJlYWRzOworCSAgX0RpZmZlcmVuY2VUeXBlIF9fcG9zID0gMDsKKwkgIGZvciAoX1RocmVhZEluZGV4IF9faSA9IDA7IF9faSA8IF9fbnVtX3RocmVhZHM7ICsrX19pKQorCSAgICB7CisJICAgICAgX19zdGFydHNbX19pXSA9IF9fcG9zOworCSAgICAgIF9fcG9zICs9ICgoX19pIDwgX19zcGxpdCkKKwkJCT8gKF9fY2h1bmtfbGVuZ3RoICsgMSkgOiBfX2NodW5rX2xlbmd0aCk7CisJICAgIH0KKwkgIF9fc3RhcnRzW19fbnVtX3RocmVhZHNdID0gX19wb3M7CisJfSAvL3NpbmdsZQorCisgICAgICAgIC8vIE5vdyBzb3J0IGluIHBhcmFsbGVsLgorICAgICAgICBwYXJhbGxlbF9zb3J0X213bXNfcHU8X19zdGFibGUsIF9fZXhhY3Q+KCZfX3NkLCBfX2NvbXApOworICAgICAgfSAvL3BhcmFsbGVsCisKKyAgICAgIGRlbGV0ZVtdIF9fc3RhcnRzOworICAgICAgZGVsZXRlW10gX19zZC5fTV90ZW1wb3Jhcnk7CisKKyAgICAgIGlmICghX19leGFjdCkKKwl7CisJICBmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX2kgPSAwOyBfX2kgPCBfX3NpemU7ICsrX19pKQorCSAgICBfX3NkLl9NX3NhbXBsZXNbX19pXS5+X1ZhbHVlVHlwZSgpOworCSAgOjpvcGVyYXRvciBkZWxldGUoX19zZC5fTV9zYW1wbGVzKTsKKwl9CisKKyAgICAgIGRlbGV0ZVtdIF9fc2QuX01fb2Zmc2V0czsKKyAgICAgIGRlbGV0ZVtdIF9fc2QuX01fcGllY2VzOworICAgIH0KKworfSAvL25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfTVVMVElXQVlfTUVSR0VTT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbnVtZXJpYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbnVtZXJpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDU0NjEwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9udW1lcmljCkBAIC0wLDAgKzEsNTE0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqIEBmaWxlIHBhcmFsbGVsL251bWVyaWMKKyoKKyAqIEBicmllZiBQYXJhbGxlbCBTVEwgZnVuY3Rpb24gY2FsbHMgY29ycmVzcG9uZGluZyB0byBzdGxfbnVtZXJpYy5oLgorICogVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUgbWFpbmx5IGRvIGNhc2Ugc3dpdGNoZXMgYW5kCisgKiBjYWxsIHRoZSBhY3R1YWwgcGFyYWxsZWxpemVkIHZlcnNpb25zIGluIG90aGVyIGZpbGVzLgorICogSW5saW5pbmcgcG9saWN5OiBGdW5jdGlvbnMgdGhhdCBiYXNpY2FsbHkgb25seSBjb250YWluIG9uZSBmdW5jdGlvbiBjYWxsLAorICogYXJlIGRlY2xhcmVkIGlubGluZS4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEpvaGFubmVzIFNpbmdsZXIgYW5kIEZlbGl4IFB1dHplLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX05VTUVSSUNfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9OVU1FUklDX0ggMQorCisjaW5jbHVkZSA8bnVtZXJpYz4KKyNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL251bWVyaWNmd2QuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9pdGVyYXRvci5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL2Zvcl9lYWNoLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvZm9yX2VhY2hfc2VsZWN0b3JzLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvcGFydGlhbF9zdW0uaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19wYXJhbGxlbAoreworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgYWNjdW11bGF0ZShfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfVHAgX19pbml0LCAKKyAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6YWNjdW11bGF0ZShfX2JlZ2luLCBfX2VuZCwgX19pbml0KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgorICAgIGlubGluZSBfVHAKKyAgICBhY2N1bXVsYXRlKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIF9UcCBfX2luaXQsCisgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OmFjY3VtdWxhdGUoX19iZWdpbiwgX19lbmQsIF9faW5pdCwgX19iaW5hcnlfb3ApOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JdGVyYXRvclRhZz4KKyAgICBpbmxpbmUgX1RwCisgICAgX19hY2N1bXVsYXRlX3N3aXRjaChfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLAorICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX2luaXQsIF9JdGVyYXRvclRhZykgCisgICAgeyByZXR1cm4gYWNjdW11bGF0ZShfX2JlZ2luLCBfX2VuZCwgX19pbml0LAorCQkJX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24sCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvclRhZz4KKyAgICBpbmxpbmUgX1RwCisgICAgX19hY2N1bXVsYXRlX3N3aXRjaChfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfVHAgX19pbml0LCAKKyAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wLCBfSXRlcmF0b3JUYWcpCisgICAgeyByZXR1cm4gYWNjdW11bGF0ZShfX2JlZ2luLCBfX2VuZCwgX19pbml0LCBfX2JpbmFyeV9vcCwgCisgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7IH0KKworICAvLyBQYXJhbGxlbCBhbGdvcml0aG0gZm9yIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfX1JBSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgorICAgIF9UcAorICAgIF9fYWNjdW11bGF0ZV9zd2l0Y2goX19SQUl0ZXIgX19iZWdpbiwgX19SQUl0ZXIgX19lbmQsIAorICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX2luaXQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3AsIAorICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCAKKyAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnICAKKyAgICAgICAgICAgICAgICAgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF91bmJhbGFuY2VkKQorICAgIHsKKyAgICAgIGlmIChfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxfX2dudV9wYXJhbGxlbDo6X1NlcXVlbmNlSW5kZXg+KF9fZW5kIC0gX19iZWdpbikKKyAgICAgICAgICAgID49IF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmdldCgpLmFjY3VtdWxhdGVfbWluaW1hbF9uCisgICAgICAgICAgICAmJiBfX2dudV9wYXJhbGxlbDo6X19pc19wYXJhbGxlbChfX3BhcmFsbGVsaXNtX3RhZykpKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcmVzID0gX19pbml0OworICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX2FjY3VtdWxhdGVfc2VsZWN0b3I8X19SQUl0ZXI+CisgICAgICAgICAgICBfX215X3NlbGVjdG9yOworICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjoKKyAgICAgICAgICAgIF9fZm9yX2VhY2hfdGVtcGxhdGVfcmFuZG9tX2FjY2Vzc19lZChfX2JlZ2luLCBfX2VuZCwKKwkJCQkJCSBfX2dudV9wYXJhbGxlbDo6X05vdGhpbmcoKSwKKwkJCQkJCSBfX215X3NlbGVjdG9yLAorCQkJCQkJIF9fZ251X3BhcmFsbGVsOjoKKwkJCQkJCSBfX2FjY3VtdWxhdGVfYmlub3BfcmVkdWN0CisJCQkJCSAgICAgICA8X0JpbmFyeU9wZXJhdGlvbj4oX19iaW5hcnlfb3ApLAorCQkJCQkJIF9fcmVzLCBfX3JlcywgLTEpOworICAgICAgICAgIHJldHVybiBfX3JlczsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gYWNjdW11bGF0ZShfX2JlZ2luLCBfX2VuZCwgX19pbml0LCBfX2JpbmFyeV9vcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIGFjY3VtdWxhdGUoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgX1RwIF9faW5pdCwgCisgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyPiBfSXRlcmF0b3JUcmFpdHM7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvclRyYWl0czo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3JUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworCisgICAgICByZXR1cm4gX19hY2N1bXVsYXRlX3N3aXRjaChfX2JlZ2luLCBfX2VuZCwgX19pbml0LAorCQkJCSBfX2dudV9wYXJhbGxlbDo6X1BsdXM8X1RwLCBfVmFsdWVUeXBlPigpLAorCQkJCSBfSXRlcmF0b3JDYXRlZ29yeSgpLCBfX3BhcmFsbGVsaXNtX3RhZyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBhY2N1bXVsYXRlKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIF9UcCBfX2luaXQpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+IF9JdGVyYXRvclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yVHJhaXRzOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvclRyYWl0czo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJhdG9yQ2F0ZWdvcnk7CisKKyAgICAgIHJldHVybiBfX2FjY3VtdWxhdGVfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX2luaXQsCisJCQkJIF9fZ251X3BhcmFsbGVsOjpfUGx1czxfVHAsIF9WYWx1ZVR5cGU+KCksCisJCQkJIF9JdGVyYXRvckNhdGVnb3J5KCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX1RwCisgICAgYWNjdW11bGF0ZShfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfVHAgX19pbml0LCAKKyAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3AsIAorICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+IF9JdGVyYXRvclRyYWl0czsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTsKKyAgICAgIHJldHVybiBfX2FjY3VtdWxhdGVfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX2luaXQsIF9fYmluYXJ5X29wLCAKKwkJCQkgX0l0ZXJhdG9yQ2F0ZWdvcnkoKSwgX19wYXJhbGxlbGlzbV90YWcpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX1RwCisgICAgYWNjdW11bGF0ZShfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfVHAgX19pbml0LCAKKyAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApIAorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0l0ZXJhdG9yVHJhaXRzOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3JUcmFpdHM6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5OworICAgICAgcmV0dXJuIF9fYWNjdW11bGF0ZV9zd2l0Y2goX19iZWdpbiwgX19lbmQsIF9faW5pdCwgX19iaW5hcnlfb3AsIAorCQkJCSBfSXRlcmF0b3JDYXRlZ29yeSgpKTsKKyAgICB9CisKKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIGlubmVyX3Byb2R1Y3QoX0lJdGVyMSBfX2ZpcnN0MSwgX0lJdGVyMSBfX2xhc3QxLCAKKyAgICAgICAgICAgICAgICAgIF9JSXRlcjIgX19maXJzdDIsIF9UcCBfX2luaXQsCisgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OmlubmVyX3Byb2R1Y3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2luaXQpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1RwLAorICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5RnVuY3Rpb24xLCB0eXBlbmFtZSBfQmluYXJ5RnVuY3Rpb24yPgorICAgIGlubGluZSBfVHAKKyAgICBpbm5lcl9wcm9kdWN0KF9JSXRlcjEgX19maXJzdDEsIF9JSXRlcjEgX19sYXN0MSwKKyAgICAgICAgICAgICAgICAgIF9JSXRlcjIgX19maXJzdDIsIF9UcCBfX2luaXQsIF9CaW5hcnlGdW5jdGlvbjEgX19iaW5hcnlfb3AxLCAKKyAgICAgICAgICAgICAgICAgIF9CaW5hcnlGdW5jdGlvbjIgX19iaW5hcnlfb3AyLAorICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKQorICAgIHsgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjppbm5lcl9wcm9kdWN0KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19pbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmluYXJ5X29wMSwgX19iaW5hcnlfb3AyKTsgfQorCisgIC8vIFBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIxLCB0eXBlbmFtZSBfUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQmluYXJ5RnVuY3Rpb24xLCB0eXBlbmFtZSBfQmluYXJ5RnVuY3Rpb24yPgorICAgIF9UcAorICAgIF9faW5uZXJfcHJvZHVjdF9zd2l0Y2goX1JBSXRlcjEgX19maXJzdDEsCisJCQkgICBfUkFJdGVyMSBfX2xhc3QxLAorCQkJICAgX1JBSXRlcjIgX19maXJzdDIsIF9UcCBfX2luaXQsCisJCQkgICBfQmluYXJ5RnVuY3Rpb24xIF9fYmluYXJ5X29wMSwKKwkJCSAgIF9CaW5hcnlGdW5jdGlvbjIgX19iaW5hcnlfb3AyLAorCQkJICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisJCQkgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKwkJCSAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbV90YWcKKwkJCSAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX3VuYmFsYW5jZWQpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigoX19sYXN0MSAtIF9fZmlyc3QxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PSBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9taW5pbWFsX24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzX3BhcmFsbGVsKF9fcGFyYWxsZWxpc21fdGFnKSkpCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19yZXMgPSBfX2luaXQ7CisgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OgorICAgICAgICAgICAgX19pbm5lcl9wcm9kdWN0X3NlbGVjdG9yPF9SQUl0ZXIxLAorICAgICAgICAgICAgX1JBSXRlcjIsIF9UcD4gX19teV9zZWxlY3RvcihfX2ZpcnN0MSwgX19maXJzdDIpOworICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjoKKyAgICAgICAgICAgIF9fZm9yX2VhY2hfdGVtcGxhdGVfcmFuZG9tX2FjY2Vzc19lZCgKKyAgICAgICAgICAgICAgICBfX2ZpcnN0MSwgX19sYXN0MSwgX19iaW5hcnlfb3AyLCBfX215X3NlbGVjdG9yLCBfX2JpbmFyeV9vcDEsCisgICAgICAgICAgICAgICAgX19yZXMsIF9fcmVzLCAtMSk7CisgICAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBpbm5lcl9wcm9kdWN0KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19pbml0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOworICAgIH0KKworICAvLyBObyBwYXJhbGxlbGlzbSBmb3IgaW5wdXQgaXRlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlGdW5jdGlvbjEsIHR5cGVuYW1lIF9CaW5hcnlGdW5jdGlvbjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvclRhZzEsIHR5cGVuYW1lIF9JdGVyYXRvclRhZzI+CisgICAgaW5saW5lIF9UcAorICAgIF9faW5uZXJfcHJvZHVjdF9zd2l0Y2goX0lJdGVyMSBfX2ZpcnN0MSwgX0lJdGVyMSBfX2xhc3QxLCAKKwkJCSAgIF9JSXRlcjIgX19maXJzdDIsIF9UcCBfX2luaXQsIAorCQkJICAgX0JpbmFyeUZ1bmN0aW9uMSBfX2JpbmFyeV9vcDEsCisJCQkgICBfQmluYXJ5RnVuY3Rpb24yIF9fYmluYXJ5X29wMiwgCisJCQkgICBfSXRlcmF0b3JUYWcxLCBfSXRlcmF0b3JUYWcyKQorICAgIHsgcmV0dXJuIGlubmVyX3Byb2R1Y3QoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2luaXQsIF9fYmluYXJ5X29wMSwKKwkJCSAgIF9fYmluYXJ5X29wMiwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1RwLAorICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5RnVuY3Rpb24xLCB0eXBlbmFtZSBfQmluYXJ5RnVuY3Rpb24yPgorICAgIGlubGluZSBfVHAKKyAgICBpbm5lcl9wcm9kdWN0KF9JSXRlcjEgX19maXJzdDEsIF9JSXRlcjEgX19sYXN0MSwgCisgICAgICAgICAgICAgICAgICBfSUl0ZXIyIF9fZmlyc3QyLCBfVHAgX19pbml0LCBfQmluYXJ5RnVuY3Rpb24xIF9fYmluYXJ5X29wMSwgCisgICAgICAgICAgICAgICAgICBfQmluYXJ5RnVuY3Rpb24yIF9fYmluYXJ5X29wMiwgCisgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcjE+IF9UcmFpdHNUeXBlMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGUxOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTE7CisKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcjI+IF9UcmFpdHNUeXBlMjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGUyOjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlcmF0b3JDYXRlZ29yeTI7CisKKyAgICAgIHJldHVybiBfX2lubmVyX3Byb2R1Y3Rfc3dpdGNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19pbml0LAorCQkJCSAgICBfX2JpbmFyeV9vcDEsIF9fYmluYXJ5X29wMiwKKwkJCQkgICAgX0l0ZXJhdG9yQ2F0ZWdvcnkxKCksIF9JdGVyYXRvckNhdGVnb3J5MigpLAorCQkJCSAgICBfX3BhcmFsbGVsaXNtX3RhZyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeUZ1bmN0aW9uMSwgdHlwZW5hbWUgX0JpbmFyeUZ1bmN0aW9uMj4KKyAgICBpbmxpbmUgX1RwCisgICAgaW5uZXJfcHJvZHVjdChfSUl0ZXIxIF9fZmlyc3QxLCBfSUl0ZXIxIF9fbGFzdDEsIAorICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2ZpcnN0MiwgX1RwIF9faW5pdCwgX0JpbmFyeUZ1bmN0aW9uMSBfX2JpbmFyeV9vcDEsIAorICAgICAgICAgICAgICAgICAgX0JpbmFyeUZ1bmN0aW9uMiBfX2JpbmFyeV9vcDIpCisgICAgeworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0lJdGVyMT4gX1RyYWl0c1R5cGUxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTE6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5MTsKKworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0lJdGVyMj4gX1RyYWl0c1R5cGUyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTI6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyYXRvckNhdGVnb3J5MjsKKworICAgICAgcmV0dXJuIF9faW5uZXJfcHJvZHVjdF9zd2l0Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2luaXQsCisJCQkJICAgIF9fYmluYXJ5X29wMSwgX19iaW5hcnlfb3AyLAorCQkJCSAgICBfSXRlcmF0b3JDYXRlZ29yeTEoKSwKKwkJCQkgICAgX0l0ZXJhdG9yQ2F0ZWdvcnkyKCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIGlubmVyX3Byb2R1Y3QoX0lJdGVyMSBfX2ZpcnN0MSwgX0lJdGVyMSBfX2xhc3QxLCAKKyAgICAgICAgICAgICAgICAgIF9JSXRlcjIgX19maXJzdDIsIF9UcCBfX2luaXQsIAorICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtX3RhZykKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXIxPiBfVHJhaXRzVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlMTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcjI+IF9UcmFpdHNUeXBlMjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGUyOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lCisgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfTXVsdGlwbGllczxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+OjpyZXN1bHRfdHlwZQorICAgICAgICBfTXVsdGlwbGllc1Jlc3VsdFR5cGU7CisgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6OmlubmVyX3Byb2R1Y3QoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2luaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BsdXM8X1RwLCBfTXVsdGlwbGllc1Jlc3VsdFR5cGU+KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlwbGllczxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFsbGVsaXNtX3RhZyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgaW5uZXJfcHJvZHVjdChfSUl0ZXIxIF9fZmlyc3QxLCBfSUl0ZXIxIF9fbGFzdDEsIAorICAgICAgICAgICAgICAgICAgX0lJdGVyMiBfX2ZpcnN0MiwgX1RwIF9faW5pdCkKKyAgICB7CisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSUl0ZXIxPiBfVHJhaXRzVHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlMTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcjI+IF9UcmFpdHNUeXBlMjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGUyOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUyOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lCisgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfTXVsdGlwbGllczxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+OjpyZXN1bHRfdHlwZQorICAgICAgICBfTXVsdGlwbGllc1Jlc3VsdFR5cGU7CisgICAgICByZXR1cm4gX19nbnVfcGFyYWxsZWw6OmlubmVyX3Byb2R1Y3QoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2luaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BsdXM8X1RwLCBfTXVsdGlwbGllc1Jlc3VsdFR5cGU+KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBfTXVsdGlwbGllczxfVmFsdWVUeXBlMSwgX1ZhbHVlVHlwZTI+KCkpOworICAgIH0KKworICAvLyBTZXF1ZW50aWFsIGZhbGxiYWNrLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgcGFydGlhbF9zdW0oX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6cGFydGlhbF9zdW0oX19iZWdpbiwgX19lbmQsIF9fcmVzdWx0KTsgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2suCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIHBhcnRpYWxfc3VtKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluX29wLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnBhcnRpYWxfc3VtKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwgX19iaW5fb3ApOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24sIHR5cGVuYW1lIF9JdGVyYXRvclRhZzEsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvclRhZzI+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fcGFydGlhbF9zdW1fc3dpdGNoKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsCisJCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5T3BlcmF0aW9uIF9fYmluX29wLAorCQkJIF9JdGVyYXRvclRhZzEsIF9JdGVyYXRvclRhZzIpCisgICAgeyByZXR1cm4gX0dMSUJDWFhfU1REX0E6OnBhcnRpYWxfc3VtKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwgX19iaW5fb3ApOyB9CisKKyAgLy8gUGFyYWxsZWwgYWxnb3JpdGhtIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX19wYXJ0aWFsX3N1bV9zd2l0Y2goX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwKKwkJCSBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5fb3AsCisJCQkgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisJCQkgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQgLSBfX2JlZ2luKQorICAgICAgICAgICAgPj0gX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkucGFydGlhbF9zdW1fbWluaW1hbF9uKSkKKyAgICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX3BhcnRpYWxfc3VtKF9fYmVnaW4sIF9fZW5kLAorCQkJCQkJICAgICAgX19yZXN1bHQsIF9fYmluX29wKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHBhcnRpYWxfc3VtKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwgX19iaW5fb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBwYXJ0aWFsX3N1bShfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgcmV0dXJuIF9fZ251X3BhcmFsbGVsOjpwYXJ0aWFsX3N1bShfX2JlZ2luLCBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIHN0ZDo6cGx1czxfVmFsdWVUeXBlPigpKTsKKyAgICB9CisKKyAgLy8gUHVibGljIGludGVyZmFjZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgcGFydGlhbF9zdW0oX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCisgICAgeworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X0lJdGVyPiBfSVRyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JVHJhaXRzVHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgX0lJdGVyYXRvckNhdGVnb3J5OworCisgICAgICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcmF0b3I+IF9PVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX09UcmFpdHNUeXBlOjppdGVyYXRvcl9jYXRlZ29yeSBfT0l0ZXJDYXRlZ29yeTsKKworICAgICAgcmV0dXJuIF9fcGFydGlhbF9zdW1fc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwgX19iaW5hcnlfb3AsCisJCQkJICBfSUl0ZXJhdG9yQ2F0ZWdvcnkoKSwgX09JdGVyQ2F0ZWdvcnkoKSk7CisgICAgfQorCisgIC8vIFNlcXVlbnRpYWwgZmFsbGJhY2suCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6YWRqYWNlbnRfZGlmZmVyZW5jZShfX2JlZ2luLCBfX2VuZCwgX19yZXN1bHQpOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjay4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIGFkamFjZW50X2RpZmZlcmVuY2UoX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlvbiBfX2Jpbl9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZykKKyAgICB7IHJldHVybiBfR0xJQkNYWF9TVERfQTo6YWRqYWNlbnRfZGlmZmVyZW5jZShfX2JlZ2luLCBfX2VuZCwKKwkJCQkJCSBfX3Jlc3VsdCwgX19iaW5fb3ApOyB9CisKKyAgLy8gU2VxdWVudGlhbCBmYWxsYmFjayBmb3IgaW5wdXQgaXRlcmF0b3IgY2FzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24sIHR5cGVuYW1lIF9JdGVyYXRvclRhZzEsCisgICAgICAgICAgIHR5cGVuYW1lIF9JdGVyYXRvclRhZzI+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fYWRqYWNlbnRfZGlmZmVyZW5jZV9zd2l0Y2goX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwKKwkJCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorCQkJCSBfQmluYXJ5T3BlcmF0aW9uIF9fYmluX29wLCBfSXRlcmF0b3JUYWcxLAorCQkJCSBfSXRlcmF0b3JUYWcyKQorICAgIHsgcmV0dXJuIGFkamFjZW50X2RpZmZlcmVuY2UoX19iZWdpbiwgX19lbmQsIF9fcmVzdWx0LCBfX2Jpbl9vcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKTsgfQorCisgIC8vIFBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fYWRqYWNlbnRfZGlmZmVyZW5jZV9zd2l0Y2goX0lJdGVyIF9fYmVnaW4sIF9JSXRlciBfX2VuZCwKKwkJCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorCQkJCSBfQmluYXJ5T3BlcmF0aW9uIF9fYmluX29wLAorCQkJCSByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKwkJCQkgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisJCQkJIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20KKwkJCQkgX19wYXJhbGxlbGlzbV90YWcKKwkJCQkgPSBfX2dudV9wYXJhbGxlbDo6cGFyYWxsZWxfYmFsYW5jZWQpCisgICAgeworICAgICAgaWYgKF9HTElCQ1hYX1BBUkFMTEVMX0NPTkRJVElPTigKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PF9fZ251X3BhcmFsbGVsOjpfU2VxdWVuY2VJbmRleD4oX19lbmQgLSBfX2JlZ2luKQorICAgICAgICAgICAgPj0gX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkuYWRqYWNlbnRfZGlmZmVyZW5jZV9taW5pbWFsX24KKyAgICAgICAgICAgICYmIF9fZ251X3BhcmFsbGVsOjpfX2lzX3BhcmFsbGVsKF9fcGFyYWxsZWxpc21fdGFnKSkpCisgICAgICAgIHsKKyAgICAgICAgICBib29sIF9fZHVtbXkgPSB0cnVlOworICAgICAgICAgIHR5cGVkZWYgX19nbnVfcGFyYWxsZWw6Ol9JdGVyYXRvclBhaXI8X0lJdGVyLCBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz4gX0l0VHJpcDsKKyAgICAgICAgICAqX19yZXN1bHQgPSAqX19iZWdpbjsKKyAgICAgICAgICBfSXRUcmlwIF9fYmVnaW5fcGFpcihfX2JlZ2luICsgMSwgX19yZXN1bHQgKyAxKSwKKyAgICAgICAgICAgIF9fZW5kX3BhaXIoX19lbmQsIF9fcmVzdWx0ICsgKF9fZW5kIC0gX19iZWdpbikpOworICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfX2FkamFjZW50X2RpZmZlcmVuY2Vfc2VsZWN0b3I8X0l0VHJpcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY3Rpb25hbGl0eTsKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6CisgICAgICAgICAgICBfX2Zvcl9lYWNoX3RlbXBsYXRlX3JhbmRvbV9hY2Nlc3NfZWQoCisgICAgICAgICAgICAgICAgX19iZWdpbl9wYWlyLCBfX2VuZF9wYWlyLCBfX2Jpbl9vcCwgX19mdW5jdGlvbmFsaXR5LAorICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfRHVtbXlSZWR1Y3QoKSwgX19kdW1teSwgX19kdW1teSwgLTEpOworICAgICAgICAgIHJldHVybiBfX2Z1bmN0aW9uYWxpdHkuX01fZmluaXNoX2l0ZXJhdG9yOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBhZGphY2VudF9kaWZmZXJlbmNlKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwgX19iaW5fb3AsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgICAgfQorCisgIC8vIFB1YmxpYyBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICByZXR1cm4gYWRqYWNlbnRfZGlmZmVyZW5jZShfX2JlZ2luLCBfX2VuZCwgX19yZXN1bHQsCisJCQkJIHN0ZDo6bWludXM8X1ZhbHVlVHlwZT4oKSwKKwkJCQkgX19wYXJhbGxlbGlzbV90YWcpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgYWRqYWNlbnRfZGlmZmVyZW5jZShfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICByZXR1cm4gYWRqYWNlbnRfZGlmZmVyZW5jZShfX2JlZ2luLCBfX2VuZCwgX19yZXN1bHQsCisJCQkJIHN0ZDo6bWludXM8X1ZhbHVlVHlwZT4oKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3AsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc21fdGFnKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0lUcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSVRyYWl0c1R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JSXRlcmF0b3JDYXRlZ29yeTsKKworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfT1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PVHJhaXRzVHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgX09JdGVyQ2F0ZWdvcnk7CisKKyAgICAgIHJldHVybiBfX2FkamFjZW50X2RpZmZlcmVuY2Vfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwKKwkJCQkJICBfX2JpbmFyeV9vcCwKKwkJCQkJICBfSUl0ZXJhdG9yQ2F0ZWdvcnkoKSwKKwkJCQkJICBfT0l0ZXJDYXRlZ29yeSgpLAorCQkJCQkgIF9fcGFyYWxsZWxpc21fdGFnKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgYWRqYWNlbnRfZGlmZmVyZW5jZShfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLAorCQkJX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQorICAgIHsKKyAgICAgIHR5cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX0lUcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSVRyYWl0c1R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IF9JSXRlcmF0b3JDYXRlZ29yeTsKKworICAgICAgdHlwZWRlZiBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPiBfT1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PVHJhaXRzVHlwZTo6aXRlcmF0b3JfY2F0ZWdvcnkgX09JdGVyQ2F0ZWdvcnk7CisKKyAgICAgIHJldHVybiBfX2FkamFjZW50X2RpZmZlcmVuY2Vfc3dpdGNoKF9fYmVnaW4sIF9fZW5kLCBfX3Jlc3VsdCwKKwkJCQkJICBfX2JpbmFyeV9vcCwKKwkJCQkJICBfSUl0ZXJhdG9yQ2F0ZWdvcnkoKSwKKwkJCQkJICBfT0l0ZXJDYXRlZ29yeSgpKTsKKyAgICB9Cit9IC8vIGVuZCBuYW1lc3BhY2UKK30gLy8gZW5kIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0dMSUJDWFhfTlVNRVJJQ19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL251bWVyaWNmd2QuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvbnVtZXJpY2Z3ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiM2QyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL251bWVyaWNmd2QuaApAQCAtMCwwICsxLDIwMyBAQAorLy8gPHBhcmFsbGVsL251bWVyaWM+IEZvcndhcmQgZGVjbGFyYXRpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9udW1lcmljZndkLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX05VTUVSSUNGV0RfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9OVU1FUklDRldEX0ggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxwYXJhbGxlbC90YWdzLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvc2V0dGluZ3MuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19wYXJhbGxlbAoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBhY2N1bXVsYXRlKF9JSXRlciwgX0lJdGVyLCBfVHApOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIGFjY3VtdWxhdGUoX0lJdGVyLCBfSUl0ZXIsIF9UcCwgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBhY2N1bXVsYXRlKF9JSXRlciwgX0lJdGVyLCBfVHAsIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVGFnPgorICAgIF9UcAorICAgIF9fYWNjdW11bGF0ZV9zd2l0Y2goX0lJdGVyLCBfSUl0ZXIsIF9UcCwgX1RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9CaW5hcnlPcGVyPgorICAgIF9UcAorICAgIGFjY3VtdWxhdGUoX0lJdGVyLCBfSUl0ZXIsIF9UcCwgX0JpbmFyeU9wZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQmluYXJ5T3Blcj4KKyAgICBfVHAKKyAgICBhY2N1bXVsYXRlKF9JSXRlciwgX0lJdGVyLCBfVHAsIF9CaW5hcnlPcGVyLAorICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0JpbmFyeU9wZXI+CisgICAgX1RwCisgICAgYWNjdW11bGF0ZShfSUl0ZXIsIF9JSXRlciwgX1RwLCBfQmluYXJ5T3BlciwKKyAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQmluYXJ5T3BlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX1RhZz4KKyAgICBfVHAKKyAgICBfX2FjY3VtdWxhdGVfc3dpdGNoKF9JSXRlciwgX0lJdGVyLCBfVHAsIF9CaW5hcnlPcGVyLCBfVGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9CaW5hcnlPcGVyPgorICAgIF9UcAorICAgIF9fYWNjdW11bGF0ZV9zd2l0Y2goX1JBSXRlciwgX1JBSXRlciwgX1RwLCBfQmluYXJ5T3BlciwKKyAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtIF9fcGFyYWxsZWxpc20KKyAgICAgICAgICAgICAgICAgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF91bmJhbGFuY2VkKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfQmluYXJ5T3Blcj4KKyAgICBfT0l0ZXIKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9CaW5hcnlPcGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlcj4KKyAgICBfT0l0ZXIKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfQmluYXJ5T3Blcj4KKyAgICBfT0l0ZXIKKyAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9CaW5hcnlPcGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyCisgICAgYWRqYWNlbnRfZGlmZmVyZW5jZShfSUl0ZXIsIF9JSXRlciwgX09JdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9CaW5hcnlPcGVyPgorICAgIF9PSXRlcgorICAgIGFkamFjZW50X2RpZmZlcmVuY2UoX0lJdGVyLCBfSUl0ZXIsIF9PSXRlciwgX0JpbmFyeU9wZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9CaW5hcnlPcGVyLAorICAgICAgICAgICB0eXBlbmFtZSBfVGFnMSwgdHlwZW5hbWUgX1RhZzI+CisgICAgX09JdGVyCisgICAgX19hZGphY2VudF9kaWZmZXJlbmNlX3N3aXRjaChfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfQmluYXJ5T3BlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVGFnMSwgX1RhZzIpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyLCB0eXBlbmFtZSBfQmluYXJ5T3Blcj4KKyAgICBfT0l0ZXIKKyAgICBfX2FkamFjZW50X2RpZmZlcmVuY2Vfc3dpdGNoKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9CaW5hcnlPcGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20gX19wYXJhbGxlbGlzbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gX19nbnVfcGFyYWxsZWw6OnBhcmFsbGVsX3VuYmFsYW5jZWQpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBpbm5lcl9wcm9kdWN0KF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9UcCk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyMSwgdHlwZW5hbWUgX0lJdGVyMiwgdHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIGlubmVyX3Byb2R1Y3QoX0lJdGVyMSwgX0lJdGVyMSwgX0lJdGVyMiwgX1RwLAorICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6OnNlcXVlbnRpYWxfdGFnKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgaW5uZXJfcHJvZHVjdChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfVHAsCisgICAgICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X1BhcmFsbGVsaXNtKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlGdW5jdGlvbjEsIHR5cGVuYW1lIF9CaW5hcnlGdW5jdGlvbjI+CisgICAgX1RwCisgICAgaW5uZXJfcHJvZHVjdChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfVHAsCisgICAgICAgICAgICAgICAgICBfQmluYXJ5RnVuY3Rpb24xLCBfQmluYXJ5RnVuY3Rpb24yKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlGdW5jdGlvbjEsIHR5cGVuYW1lIF9CaW5hcnlGdW5jdGlvbjI+CisgICAgX1RwCisgICAgaW5uZXJfcHJvZHVjdChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfVHAsIF9CaW5hcnlGdW5jdGlvbjEsCisgICAgICAgICAgICAgICAgICBfQmluYXJ5RnVuY3Rpb24yLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcpOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlcjEsIHR5cGVuYW1lIF9JSXRlcjIsIHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgdHlwZW5hbWUgQmluYXJ5RnVuY3Rpb24xLCB0eXBlbmFtZSBCaW5hcnlGdW5jdGlvbjI+CisgICAgX1RwCisgICAgaW5uZXJfcHJvZHVjdChfSUl0ZXIxLCBfSUl0ZXIxLCBfSUl0ZXIyLCBfVHAsIEJpbmFyeUZ1bmN0aW9uMSwKKyAgICAgICAgICAgICAgICAgIEJpbmFyeUZ1bmN0aW9uMiwgX19nbnVfcGFyYWxsZWw6Ol9QYXJhbGxlbGlzbSk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlcjEsIHR5cGVuYW1lIF9SQUl0ZXIyLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgIHR5cGVuYW1lIEJpbmFyeUZ1bmN0aW9uMSwgdHlwZW5hbWUgQmluYXJ5RnVuY3Rpb24yPgorICAgIF9UcAorICAgIF9faW5uZXJfcHJvZHVjdF9zd2l0Y2goX1JBSXRlcjEsIF9SQUl0ZXIxLCBfUkFJdGVyMiwgX1RwLCBCaW5hcnlGdW5jdGlvbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgQmluYXJ5RnVuY3Rpb24yLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpfUGFyYWxsZWxpc20KKyAgICAgICAgICAgICAgICAgICAgICAgICA9IF9fZ251X3BhcmFsbGVsOjpwYXJhbGxlbF91bmJhbGFuY2VkKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIxLCB0eXBlbmFtZSBfSUl0ZXIyLCB0eXBlbmFtZSBfVHAsCisgICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlGdW5jdGlvbjEsIHR5cGVuYW1lIF9CaW5hcnlGdW5jdGlvbjIsCisgICAgICAgICAgIHR5cGVuYW1lIF9UYWcxLCB0eXBlbmFtZSBfVGFnMj4KKyAgICBfVHAKKyAgICBfX2lubmVyX3Byb2R1Y3Rfc3dpdGNoKF9JSXRlcjEsIF9JSXRlcjEsIF9JSXRlcjIsIF9UcCwgX0JpbmFyeUZ1bmN0aW9uMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeUZ1bmN0aW9uMiwgX1RhZzEsIF9UYWcyKTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX09JdGVyPgorICAgIF9PSXRlcgorICAgIHBhcnRpYWxfc3VtKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9CaW5hcnlPcGVyPgorICAgIF9PSXRlcgorICAgIHBhcnRpYWxfc3VtKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9CaW5hcnlPcGVyLAorICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXI+CisgICAgX09JdGVyCisgICAgcGFydGlhbF9zdW0oX0lJdGVyLCBfSUl0ZXIsIF9PSXRlciBfX3Jlc3VsdCk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLCB0eXBlbmFtZSBfT0l0ZXIsIHR5cGVuYW1lIF9CaW5hcnlPcGVyPgorICAgIF9PSXRlcgorICAgIHBhcnRpYWxfc3VtKF9JSXRlciwgX0lJdGVyLCBfT0l0ZXIsIF9CaW5hcnlPcGVyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX0JpbmFyeU9wZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9UYWcxLCB0eXBlbmFtZSBfVGFnMj4KKyAgICBfT0l0ZXIKKyAgICBfX3BhcnRpYWxfc3VtX3N3aXRjaChfSUl0ZXIsIF9JSXRlciwgX09JdGVyLCBfQmluYXJ5T3BlciwgX1RhZzEsIF9UYWcyKTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsIHR5cGVuYW1lIF9PSXRlciwgdHlwZW5hbWUgX0JpbmFyeU9wZXI+CisgICAgX09JdGVyCisgICAgX19wYXJ0aWFsX3N1bV9zd2l0Y2goX0lJdGVyLCBfSUl0ZXIsIF9PSXRlciwgX0JpbmFyeU9wZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyk7Cit9IC8vIGVuZCBuYW1lc3BhY2UKK30gLy8gZW5kIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfTlVNRVJJQ0ZXRF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL29tcF9sb29wLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL29tcF9sb29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlZGZmNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvb21wX2xvb3AuaApAQCAtMCwwICsxLDExNSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL29tcF9sb29wLmgKKyAqICBAYnJpZWYgUGFyYWxsZWxpemF0aW9uIG9mIGVtYmFycmFzc2luZ2x5IHBhcmFsbGVsIGV4ZWN1dGlvbiBieQorICogIG1lYW5zIG9mIGFuIE9wZW5NUCBmb3IgbG9vcC4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEZlbGl4IFB1dHplLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX09NUF9MT09QX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfT01QX0xPT1BfSCAxCisKKyNpbmNsdWRlIDxvbXAuaD4KKworI2luY2x1ZGUgPHBhcmFsbGVsL3NldHRpbmdzLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9iYXNlLmg+CisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIEVtYmFycmFzc2luZ2x5IHBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcworICAgKiBpdGVyYXRvcnMsIHVzaW5nIGFuIE9wZW5NUCBmb3IgbG9vcC4KKyAgICoKKyAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIGVsZW1lbnQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIGVsZW1lbnQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19vIFVzZXItc3VwcGxpZWQgZnVuY3RvciAoY29tcGFyYXRvciwgcHJlZGljYXRlLCBhZGRpbmcKKyAgICogIGZ1bmN0b3IsIGV0Yy4pLgorICAgKiAgQHBhcmFtIF9fZiBGdW5jdG9yIHRvIEBhIHByb2Nlc3MgYW4gZWxlbWVudCB3aXRoIF9fb3AgKGRlcGVuZHMgb24KKyAgICogIGRlc2lyZWQgZnVuY3Rpb25hbGl0eSwgZS4gZy4gZm9yIHN0ZDo6Zm9yX2VhY2goKSwgLi4uKS4KKyAgICogIEBwYXJhbSBfX3IgRnVuY3RvciB0byBAYSBhZGQgYSBzaW5nbGUgX19yZXN1bHQgdG8gdGhlIGFscmVhZHkKKyAgICogIHByb2Nlc3NlZCBlbGVtZW50cyAoZGVwZW5kcyBvbiBmdW5jdGlvbmFsaXR5KS4KKyAgICogIEBwYXJhbSBfX2Jhc2UgQmFzZSB2YWx1ZSBmb3IgcmVkdWN0aW9uLgorICAgKiAgQHBhcmFtIF9fb3V0cHV0IFBvaW50ZXIgdG8gcG9zaXRpb24gd2hlcmUgZmluYWwgcmVzdWx0IGlzIHdyaXR0ZW4gdG8KKyAgICogIEBwYXJhbSBfX2JvdW5kIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHByb2Nlc3NlZCAoZS4gZy4gZm9yCisgICAqICBzdGQ6OmNvdW50X24oKSkuCisgICAqICBAcmV0dXJuIFVzZXItc3VwcGxpZWQgZnVuY3RvciAodGhhdCBtYXkgY29udGFpbiBhIHBhcnQgb2YgdGhlIHJlc3VsdCkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLAorCSAgIHR5cGVuYW1lIF9PcCwKKwkgICB0eXBlbmFtZSBfRnUsCisJICAgdHlwZW5hbWUgX1JlZCwKKwkgICB0eXBlbmFtZSBfUmVzdWx0PgorICAgIF9PcAorICAgIF9fZm9yX2VhY2hfdGVtcGxhdGVfcmFuZG9tX2FjY2Vzc19vbXBfbG9vcChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCQkJCSAgICAgICBfT3AgX19vLCBfRnUmIF9fZiwgX1JlZCBfX3IsCisJCQkJCSAgICAgICBfUmVzdWx0IF9fYmFzZSwKKwkJCQkJICAgICAgIF9SZXN1bHQmIF9fb3V0cHV0LAorICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX2JvdW5kKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgICAgICBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2xlbmd0aCA9IF9fZW5kIC0gX19iZWdpbjsKKyAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzID0gX19nbnVfcGFyYWxsZWw6Om1pbjxfRGlmZmVyZW5jZVR5cGU+CisJKF9fZ2V0X21heF90aHJlYWRzKCksIF9fbGVuZ3RoKTsKKworICAgICAgX1Jlc3VsdCAqX190aHJlYWRfcmVzdWx0czsKKworIyAgICAgcHJhZ21hIG9tcCBwYXJhbGxlbCBudW1fdGhyZWFkcyhfX251bV90aHJlYWRzKQorICAgICAgeworIyAgICAgICBwcmFnbWEgb21wIHNpbmdsZQorCXsKKwkgIF9fbnVtX3RocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7CisJICBfX3RocmVhZF9yZXN1bHRzID0gbmV3IF9SZXN1bHRbX19udW1fdGhyZWFkc107CisKKwkgIGZvciAoX1RocmVhZEluZGV4IF9faSA9IDA7IF9faSA8IF9fbnVtX3RocmVhZHM7ICsrX19pKQorCSAgICBfX3RocmVhZF9yZXN1bHRzW19faV0gPSBfUmVzdWx0KCk7CisJfQorCisgICAgICAgIF9UaHJlYWRJbmRleCBfX2lhbSA9IG9tcF9nZXRfdGhyZWFkX251bSgpOworCisjcHJhZ21hIG9tcCBmb3Igc2NoZWR1bGUoZHluYW1pYywgX1NldHRpbmdzOjpnZXQoKS53b3Jrc3RlYWxpbmdfY2h1bmtfc2l6ZSkKKyAgICAgICAgZm9yIChfRGlmZmVyZW5jZVR5cGUgX19wb3MgPSAwOyBfX3BvcyA8IF9fbGVuZ3RoOyArK19fcG9zKQorICAgICAgICAgIF9fdGhyZWFkX3Jlc3VsdHNbX19pYW1dID0gX19yKF9fdGhyZWFkX3Jlc3VsdHNbX19pYW1dLAorCQkJCQlfX2YoX19vLCBfX2JlZ2luK19fcG9zKSk7CisgICAgICB9IC8vcGFyYWxsZWwKKworICAgICAgZm9yIChfVGhyZWFkSW5kZXggX19pID0gMDsgX19pIDwgX19udW1fdGhyZWFkczsgKytfX2kpCisgICAgICAgIF9fb3V0cHV0ID0gX19yKF9fb3V0cHV0LCBfX3RocmVhZF9yZXN1bHRzW19faV0pOworCisgICAgICBkZWxldGUgW10gX190aHJlYWRfcmVzdWx0czsKKworICAgICAgLy8gUG9pbnRzIHRvIGxhc3QgZWxlbWVudCBwcm9jZXNzZWQgKG5lZWRlZCBhcyByZXR1cm4gdmFsdWUgZm9yCisgICAgICAvLyBzb21lIGFsZ29yaXRobXMgbGlrZSB0cmFuc2Zvcm0pLgorICAgICAgX19mLl9NX2ZpbmlzaF9pdGVyYXRvciA9IF9fYmVnaW4gKyBfX2xlbmd0aDsKKworICAgICAgcmV0dXJuIF9fbzsKKyAgICB9CisKK30gLy8gZW5kIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfT01QX0xPT1BfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9vbXBfbG9vcF9zdGF0aWMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvb21wX2xvb3Bfc3RhdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmZDA5NwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvb21wX2xvb3Bfc3RhdGljLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9vbXBfbG9vcF9zdGF0aWMuaAorICogIEBicmllZiBQYXJhbGxlbGl6YXRpb24gb2YgZW1iYXJyYXNzaW5nbHkgcGFyYWxsZWwgZXhlY3V0aW9uIGJ5CisgKiAgbWVhbnMgb2YgYW4gT3Blbk1QIGZvciBsb29wIHdpdGggc3RhdGljIHNjaGVkdWxpbmcuCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBGZWxpeCBQdXR6ZS4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9PTVBfTE9PUF9TVEFUSUNfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9PTVBfTE9PUF9TVEFUSUNfSCAxCisKKyNpbmNsdWRlIDxvbXAuaD4KKworI2luY2x1ZGUgPHBhcmFsbGVsL3NldHRpbmdzLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKiBAYnJpZWYgRW1iYXJyYXNzaW5nbHkgcGFyYWxsZWwgYWxnb3JpdGhtIGZvciByYW5kb20gYWNjZXNzCisgICAqIGl0ZXJhdG9ycywgdXNpbmcgYW4gT3Blbk1QIGZvciBsb29wIHdpdGggc3RhdGljIHNjaGVkdWxpbmcuCisgICAqCisgICAqICBAcGFyYW0gX19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBlbGVtZW50IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fZW5kIEVuZCBpdGVyYXRvciBvZiBlbGVtZW50IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fbyBVc2VyLXN1cHBsaWVkIGZ1bmN0b3IgKGNvbXBhcmF0b3IsIHByZWRpY2F0ZSwgYWRkaW5nCisgICAqICBmdW5jdG9yLCAuLi4pLgorICAgKiAgQHBhcmFtIF9fZiBGdW5jdG9yIHRvIEBhIHByb2Nlc3MgYW4gZWxlbWVudCB3aXRoIF9fb3AgKGRlcGVuZHMgb24KKyAgICogIGRlc2lyZWQgZnVuY3Rpb25hbGl0eSwgZS4gZy4gZm9yIHN0ZDo6Zm9yX2VhY2goKSwgLi4uKS4KKyAgICogIEBwYXJhbSBfX3IgRnVuY3RvciB0byBAYSBhZGQgYSBzaW5nbGUgX19yZXN1bHQgdG8gdGhlIGFscmVhZHkgcHJvY2Vzc2VkCisgICAqICBfX2VsZW1lbnRzIChkZXBlbmRzIG9uIGZ1bmN0aW9uYWxpdHkpLgorICAgKiAgQHBhcmFtIF9fYmFzZSBCYXNlIHZhbHVlIGZvciByZWR1Y3Rpb24uCisgICAqICBAcGFyYW0gX19vdXRwdXQgUG9pbnRlciB0byBwb3NpdGlvbiB3aGVyZSBmaW5hbCByZXN1bHQgaXMgd3JpdHRlbiB0bworICAgKiAgQHBhcmFtIF9fYm91bmQgTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgcHJvY2Vzc2VkIChlLiBnLiBmb3IKKyAgICogIHN0ZDo6Y291bnRfbigpKS4KKyAgICogIEByZXR1cm4gVXNlci1zdXBwbGllZCBmdW5jdG9yICh0aGF0IG1heSBjb250YWluIGEgcGFydCBvZiB0aGUgcmVzdWx0KS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsCisJICAgdHlwZW5hbWUgX09wLAorCSAgIHR5cGVuYW1lIF9GdSwKKwkgICB0eXBlbmFtZSBfUmVkLAorCSAgIHR5cGVuYW1lIF9SZXN1bHQ+CisgICAgX09wCisgICAgX19mb3JfZWFjaF90ZW1wbGF0ZV9yYW5kb21fYWNjZXNzX29tcF9sb29wX3N0YXRpYyhfUkFJdGVyIF9fYmVnaW4sCisJCQkJCQkgICAgICBfUkFJdGVyIF9fZW5kLCBfT3AgX19vLAorCQkJCQkJICAgICAgX0Z1JiBfX2YsIF9SZWQgX19yLAorCQkJCQkJICAgICAgX1Jlc3VsdCBfX2Jhc2UsCisJCQkJCQkgICAgICBfUmVzdWx0JiBfX291dHB1dCwKKyAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19ib3VuZCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKwlfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2xlbmd0aCA9IF9fZW5kIC0gX19iZWdpbjsKKyAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzID0gc3RkOjptaW48X0RpZmZlcmVuY2VUeXBlPgorCShfX2dldF9tYXhfdGhyZWFkcygpLCBfX2xlbmd0aCk7CisKKyAgICAgIF9SZXN1bHQgKl9fdGhyZWFkX3Jlc3VsdHM7CisKKyMgICAgIHByYWdtYSBvbXAgcGFyYWxsZWwgbnVtX3RocmVhZHMoX19udW1fdGhyZWFkcykKKyAgICAgIHsKKyMgICAgICAgcHJhZ21hIG9tcCBzaW5nbGUKKwl7CisJICBfX251bV90aHJlYWRzID0gb21wX2dldF9udW1fdGhyZWFkcygpOworCSAgX190aHJlYWRfcmVzdWx0cyA9IG5ldyBfUmVzdWx0W19fbnVtX3RocmVhZHNdOworCisJICBmb3IgKF9UaHJlYWRJbmRleCBfX2kgPSAwOyBfX2kgPCBfX251bV90aHJlYWRzOyArK19faSkKKwkgICAgX190aHJlYWRfcmVzdWx0c1tfX2ldID0gX1Jlc3VsdCgpOworCX0KKworICAgICAgICBfVGhyZWFkSW5kZXggX19pYW0gPSBvbXBfZ2V0X3RocmVhZF9udW0oKTsKKworI3ByYWdtYSBvbXAgZm9yIHNjaGVkdWxlKHN0YXRpYywgX1NldHRpbmdzOjpnZXQoKS53b3Jrc3RlYWxpbmdfY2h1bmtfc2l6ZSkKKyAgICAgICAgZm9yIChfRGlmZmVyZW5jZVR5cGUgX19wb3MgPSAwOyBfX3BvcyA8IF9fbGVuZ3RoOyArK19fcG9zKQorICAgICAgICAgIF9fdGhyZWFkX3Jlc3VsdHNbX19pYW1dID0gX19yKF9fdGhyZWFkX3Jlc3VsdHNbX19pYW1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZihfX28sIF9fYmVnaW4rX19wb3MpKTsKKyAgICAgIH0gLy9wYXJhbGxlbAorCisgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX2kgPSAwOyBfX2kgPCBfX251bV90aHJlYWRzOyArK19faSkKKwlfX291dHB1dCA9IF9fcihfX291dHB1dCwgX190aHJlYWRfcmVzdWx0c1tfX2ldKTsKKworICAgICAgZGVsZXRlIFtdIF9fdGhyZWFkX3Jlc3VsdHM7CisKKyAgICAgIC8vIFBvaW50cyB0byBsYXN0IGVsZW1lbnQgcHJvY2Vzc2VkIChuZWVkZWQgYXMgcmV0dXJuIHZhbHVlIGZvcgorICAgICAgLy8gc29tZSBhbGdvcml0aG1zIGxpa2UgdHJhbnNmb3JtKS4KKyAgICAgIF9fZi5maW5pc2hfaXRlcmF0b3IgPSBfX2JlZ2luICsgX19sZW5ndGg7CisKKyAgICAgIHJldHVybiBfX287CisgICAgfQorCit9IC8vIGVuZCBuYW1lc3BhY2UKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX09NUF9MT09QX1NUQVRJQ19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3Bhcl9sb29wLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3Bhcl9sb29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwNjk3MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvcGFyX2xvb3AuaApAQCAtMCwwICsxLDEzOSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL3Bhcl9sb29wLmgKKyAqICBAYnJpZWYgUGFyYWxsZWxpemF0aW9uIG9mIGVtYmFycmFzc2luZ2x5IHBhcmFsbGVsIGV4ZWN1dGlvbiBieQorICogIG1lYW5zIG9mIGVxdWFsIHNwbGl0dGluZy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEZlbGl4IFB1dHplLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX1BBUl9MT09QX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfUEFSX0xPT1BfSCAxCisKKyNpbmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9zZXR0aW5ncy5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL2Jhc2UuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9lcXVhbGx5X3NwbGl0Lmg+CisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIEVtYmFycmFzc2luZ2x5IHBhcmFsbGVsIGFsZ29yaXRobSBmb3IgcmFuZG9tIGFjY2VzcworICAgKiBpdGVyYXRvcnMsIHVzaW5nIGhhbmQtY3JhZnRlZCBwYXJhbGxlbGl6YXRpb24gYnkgZXF1YWwgc3BsaXR0aW5nCisgICAqIHRoZSB3b3JrLgorICAgKgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgZWxlbWVudCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2YgZWxlbWVudCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX28gVXNlci1zdXBwbGllZCBmdW5jdG9yIChjb21wYXJhdG9yLCBwcmVkaWNhdGUsIGFkZGluZworICAgKiAgZnVuY3RvciwgLi4uKQorICAgKiAgQHBhcmFtIF9fZiBGdW5jdG9yIHRvICJwcm9jZXNzIiBhbiBlbGVtZW50IHdpdGggX19vcCAoZGVwZW5kcyBvbgorICAgKiAgZGVzaXJlZCBmdW5jdGlvbmFsaXR5LCBlLiBnLiBmb3Igc3RkOjpmb3JfZWFjaCgpLCAuLi4pLgorICAgKiAgQHBhcmFtIF9fciBGdW5jdG9yIHRvICJhZGQiIGEgc2luZ2xlIF9fcmVzdWx0IHRvIHRoZSBhbHJlYWR5CisgICAqICBwcm9jZXNzZWQgZWxlbWVudHMgKGRlcGVuZHMgb24gZnVuY3Rpb25hbGl0eSkuCisgICAqICBAcGFyYW0gX19iYXNlIEJhc2UgdmFsdWUgZm9yIHJlZHVjdGlvbi4KKyAgICogIEBwYXJhbSBfX291dHB1dCBQb2ludGVyIHRvIHBvc2l0aW9uIHdoZXJlIGZpbmFsIHJlc3VsdCBpcyB3cml0dGVuIHRvCisgICAqICBAcGFyYW0gX19ib3VuZCBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBwcm9jZXNzZWQgKGUuIGcuIGZvcgorICAgKiAgc3RkOjpjb3VudF9uKCkpLgorICAgKiAgQHJldHVybiBVc2VyLXN1cHBsaWVkIGZ1bmN0b3IgKHRoYXQgbWF5IGNvbnRhaW4gYSBwYXJ0IG9mIHRoZSByZXN1bHQpLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwKKwkgICB0eXBlbmFtZSBfT3AsCisJICAgdHlwZW5hbWUgX0Z1LAorCSAgIHR5cGVuYW1lIF9SZWQsCisJICAgdHlwZW5hbWUgX1Jlc3VsdD4KKyAgICBfT3AKKyAgICBfX2Zvcl9lYWNoX3RlbXBsYXRlX3JhbmRvbV9hY2Nlc3NfZWQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorCQkJCQkgX09wIF9fbywgX0Z1JiBfX2YsIF9SZWQgX19yLAorCQkJCQkgX1Jlc3VsdCBfX2Jhc2UsIF9SZXN1bHQmIF9fb3V0cHV0LAorICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX2JvdW5kKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworICAgICAgY29uc3QgX0RpZmZlcmVuY2VUeXBlIF9fbGVuZ3RoID0gX19lbmQgLSBfX2JlZ2luOworICAgICAgX1Jlc3VsdCAqX190aHJlYWRfcmVzdWx0czsKKyAgICAgIGJvb2wqIF9fY29uc3RydWN0ZWQ7CisKKyAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzID0gX19nbnVfcGFyYWxsZWw6Om1pbjxfRGlmZmVyZW5jZVR5cGU+CisJKF9fZ2V0X21heF90aHJlYWRzKCksIF9fbGVuZ3RoKTsKKworIyAgICAgcHJhZ21hIG9tcCBwYXJhbGxlbCBudW1fdGhyZWFkcyhfX251bV90aHJlYWRzKQorICAgICAgeworIyAgICAgICBwcmFnbWEgb21wIHNpbmdsZQorCXsKKwkgIF9fbnVtX3RocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7CisJICBfX3RocmVhZF9yZXN1bHRzID0gc3RhdGljX2Nhc3Q8X1Jlc3VsdCo+CisJICAgICg6Om9wZXJhdG9yIG5ldyhfX251bV90aHJlYWRzICogc2l6ZW9mKF9SZXN1bHQpKSk7CisJICBfX2NvbnN0cnVjdGVkID0gbmV3IGJvb2xbX19udW1fdGhyZWFkc107CisJfQorCisJX1RocmVhZEluZGV4IF9faWFtID0gb21wX2dldF90aHJlYWRfbnVtKCk7CisKKwkvLyBOZXV0cmFsIGVsZW1lbnQuCisJX1Jlc3VsdCogX19yZWR1Y3Q7CisKKwlfRGlmZmVyZW5jZVR5cGUKKwkgIF9fc3RhcnQgPSBfX2VxdWFsbHlfc3BsaXRfcG9pbnQoX19sZW5ndGgsIF9fbnVtX3RocmVhZHMsIF9faWFtKSwKKwkgIF9fc3RvcCA9IF9fZXF1YWxseV9zcGxpdF9wb2ludChfX2xlbmd0aCwgX19udW1fdGhyZWFkcywgX19pYW0gKyAxKTsKKworCWlmIChfX3N0YXJ0IDwgX19zdG9wKQorCSAgeworCSAgICBfX3JlZHVjdCA9IG5ldyBfUmVzdWx0KF9fZihfX28sIF9fYmVnaW4gKyBfX3N0YXJ0KSk7CisJICAgICsrX19zdGFydDsKKwkgICAgX19jb25zdHJ1Y3RlZFtfX2lhbV0gPSB0cnVlOworCSAgfQorCWVsc2UKKwkgIF9fY29uc3RydWN0ZWRbX19pYW1dID0gZmFsc2U7CisKKwlmb3IgKDsgX19zdGFydCA8IF9fc3RvcDsgKytfX3N0YXJ0KQorCSAgKl9fcmVkdWN0ID0gX19yKCpfX3JlZHVjdCwgX19mKF9fbywgX19iZWdpbiArIF9fc3RhcnQpKTsKKworCWlmIChfX2NvbnN0cnVjdGVkW19faWFtXSkKKwkgIHsKKwkgICAgOjpuZXcoJl9fdGhyZWFkX3Jlc3VsdHNbX19pYW1dKSBfUmVzdWx0KCpfX3JlZHVjdCk7CisJICAgIGRlbGV0ZSBfX3JlZHVjdDsKKwkgIH0KKyAgICAgIH0gLy9wYXJhbGxlbAorCisgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX2kgPSAwOyBfX2kgPCBfX251bV90aHJlYWRzOyArK19faSkKKwlpZiAoX19jb25zdHJ1Y3RlZFtfX2ldKQorCSAgeworCSAgICBfX291dHB1dCA9IF9fcihfX291dHB1dCwgX190aHJlYWRfcmVzdWx0c1tfX2ldKTsKKwkgICAgX190aHJlYWRfcmVzdWx0c1tfX2ldLn5fUmVzdWx0KCk7CisJICB9CisKKyAgICAgIC8vIFBvaW50cyB0byBsYXN0IGVsZW1lbnQgcHJvY2Vzc2VkIChuZWVkZWQgYXMgcmV0dXJuIHZhbHVlIGZvcgorICAgICAgLy8gc29tZSBhbGdvcml0aG1zIGxpa2UgdHJhbnNmb3JtKS4KKyAgICAgIF9fZi5fTV9maW5pc2hfaXRlcmF0b3IgPSBfX2JlZ2luICsgX19sZW5ndGg7CisKKyAgICAgIDo6b3BlcmF0b3IgZGVsZXRlKF9fdGhyZWFkX3Jlc3VsdHMpOworCisgICAgICBkZWxldGVbXSBfX2NvbnN0cnVjdGVkOworCisgICAgICByZXR1cm4gX19vOworICAgIH0KKworfSAvLyBlbmQgbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9QQVJfTE9PUF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3BhcmFsbGVsLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3BhcmFsbGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiY2ViZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvcGFyYWxsZWwuaApAQCAtMCwwICsxLDQyIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvcGFyYWxsZWwuaAorICogIEBicmllZiBFbmQtdXNlciBpbmNsdWRlIGZpbGUuIFByb3ZpZGVzIGFkdmFuY2VkIHNldHRpbmdzIGFuZAorICogIHR1bmluZyBvcHRpb25zLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgRmVsaXggUHV0emUgYW5kIEpvaGFubmVzIFNpbmdsZXIuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfUEFSQUxMRUxfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9QQVJBTExFTF9IIDEKKworI2luY2x1ZGUgPHBhcmFsbGVsL2ZlYXR1cmVzLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvY29tcGlsZXRpbWVfc2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC90eXBlcy5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3RhZ3MuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9zZXR0aW5ncy5oPgorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfUEFSQUxMRUxfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9wYXJ0aWFsX3N1bS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9wYXJ0aWFsX3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTFiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3BhcnRpYWxfc3VtLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC9wYXJ0aWFsX3N1bS5oCisgKiAgQGJyaWVmIFBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIHN0ZDo6cGFydGlhbF9zdW0oKSwgaS5lLiBwcmVmaXgKKyogIHN1bXMuCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBKb2hhbm5lcyBTaW5nbGVyLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX1BBUlRJQUxfU1VNX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfUEFSVElBTF9TVU1fSCAxCisKKyNpbmNsdWRlIDxvbXAuaD4KKyNpbmNsdWRlIDxuZXc+CisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9wYXJhbGxlbC5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL251bWVyaWNmd2QuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8vIFByb2JsZW06IHRoZXJlIGlzIG5vIDAtZWxlbWVudCBnaXZlbi4KKworICAvKiogQGJyaWVmIEJhc2UgY2FzZSBwcmVmaXggc3VtIHJvdXRpbmUuCisgICAqICBAcGFyYW0gX19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19yZXN1bHQgQmVnaW4gaXRlcmF0b3Igb2Ygb3V0cHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fYmluX29wIEFzc29jaWF0aXZlIGJpbmFyeSBmdW5jdGlvbi4KKyAgICogIEBwYXJhbSBfX3ZhbHVlIFN0YXJ0IHZhbHVlLiBNdXN0IGJlIHBhc3NlZCBzaW5jZSB0aGUgbmV1dHJhbAorICAgKiAgZWxlbWVudCBpcyB1bmtub3duIGluIGdlbmVyYWwuCisgICAqICBAcmV0dXJuIEVuZCBpdGVyYXRvciBvZiBvdXRwdXQgc2VxdWVuY2UuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwKKwkgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisJICAgdHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3BhcmFsbGVsX3BhcnRpYWxfc3VtX2Jhc2VjYXNlKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsCisJCQkJICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJCQkgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2Jpbl9vcCwKKyAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzIDxfSUl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUpCisgICAgeworICAgICAgaWYgKF9fYmVnaW4gPT0gX19lbmQpCisJcmV0dXJuIF9fcmVzdWx0OworCisgICAgICB3aGlsZSAoX19iZWdpbiAhPSBfX2VuZCkKKwl7CisJICBfX3ZhbHVlID0gX19iaW5fb3AoX192YWx1ZSwgKl9fYmVnaW4pOworCSAgKl9fcmVzdWx0ID0gX192YWx1ZTsKKwkgICsrX19yZXN1bHQ7CisJICArK19fYmVnaW47CisJfQorICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICAvKiogQGJyaWVmIFBhcmFsbGVsIHBhcnRpYWwgc3VtIGltcGxlbWVudGF0aW9uLCB0d28tcGhhc2UgYXBwcm9hY2gsCisgICAgICBubyByZWN1cnNpb24uCisgICAgICAqICBAcGFyYW0gX19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAgICAqICBAcGFyYW0gX19yZXN1bHQgQmVnaW4gaXRlcmF0b3Igb2Ygb3V0cHV0IHNlcXVlbmNlLgorICAgICAgKiAgQHBhcmFtIF9fYmluX29wIEFzc29jaWF0aXZlIGJpbmFyeSBmdW5jdGlvbi4KKyAgICAgICogIEBwYXJhbSBfX24gTGVuZ3RoIG9mIHNlcXVlbmNlLgorICAgICAgKiAgQHJldHVybiBFbmQgaXRlcmF0b3Igb2Ygb3V0cHV0IHNlcXVlbmNlLgorICAgICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLAorCSAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKwkgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fcGFyYWxsZWxfcGFydGlhbF9zdW1fbGluZWFyKF9JSXRlciBfX2JlZ2luLCBfSUl0ZXIgX19lbmQsCisJCQkJICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCisJCQkJICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluX29wLAorICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbikKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICBpZiAoX19iZWdpbiA9PSBfX2VuZCkKKwlyZXR1cm4gX19yZXN1bHQ7CisKKyAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzID0KKyAgICAgICAgc3RkOjptaW48X0RpZmZlcmVuY2VUeXBlPihfX2dldF9tYXhfdGhyZWFkcygpLCBfX24gLSAxKTsKKworICAgICAgaWYgKF9fbnVtX3RocmVhZHMgPCAyKQorCXsKKwkgICpfX3Jlc3VsdCA9ICpfX2JlZ2luOworCSAgcmV0dXJuIF9fcGFyYWxsZWxfcGFydGlhbF9zdW1fYmFzZWNhc2UoX19iZWdpbiArIDEsIF9fZW5kLAorCQkJCQkJIF9fcmVzdWx0ICsgMSwgX19iaW5fb3AsCisJCQkJCQkgKl9fYmVnaW4pOworCX0KKworICAgICAgX0RpZmZlcmVuY2VUeXBlKiBfX2JvcmRlcnM7CisgICAgICBfVmFsdWVUeXBlKiBfX3N1bXM7CisKKyAgICAgIGNvbnN0IF9TZXR0aW5ncyYgX19zID0gX1NldHRpbmdzOjpnZXQoKTsKKworIyAgICAgcHJhZ21hIG9tcCBwYXJhbGxlbCBudW1fdGhyZWFkcyhfX251bV90aHJlYWRzKQorICAgICAgeworIyAgICAgICBwcmFnbWEgb21wIHNpbmdsZQorCXsKKwkgIF9fbnVtX3RocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7CisJICAgIAorCSAgX19ib3JkZXJzID0gbmV3IF9EaWZmZXJlbmNlVHlwZVtfX251bV90aHJlYWRzICsgMl07CisKKwkgIGlmIChfX3MucGFydGlhbF9zdW1fZGlsYXRpb24gPT0gMS4wZikKKwkgICAgX19lcXVhbGx5X3NwbGl0KF9fbiwgX19udW1fdGhyZWFkcyArIDEsIF9fYm9yZGVycyk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBfRGlmZmVyZW5jZVR5cGUgX19maXJzdF9wYXJ0X2xlbmd0aCA9CisJCSAgc3RkOjptYXg8X0RpZmZlcmVuY2VUeXBlPigxLAorCQkgICAgX19uIC8gKDEuMGYgKyBfX3MucGFydGlhbF9zdW1fZGlsYXRpb24gKiBfX251bV90aHJlYWRzKSk7CisJICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fY2h1bmtfbGVuZ3RoID0KKwkJICAoX19uIC0gX19maXJzdF9wYXJ0X2xlbmd0aCkgLyBfX251bV90aHJlYWRzOworCSAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2JvcmRlcnN0YXJ0ID0KKwkJICBfX24gLSBfX251bV90aHJlYWRzICogX19jaHVua19sZW5ndGg7CisJICAgICAgX19ib3JkZXJzWzBdID0gMDsKKwkgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX2kgPSAxOyBfX2kgPCAoX19udW1fdGhyZWFkcyArIDEpOyArK19faSkKKwkJeworCQkgIF9fYm9yZGVyc1tfX2ldID0gX19ib3JkZXJzdGFydDsKKwkJICBfX2JvcmRlcnN0YXJ0ICs9IF9fY2h1bmtfbGVuZ3RoOworCQl9CisJICAgICAgX19ib3JkZXJzW19fbnVtX3RocmVhZHMgKyAxXSA9IF9fbjsKKwkgICAgfQorCisJICBfX3N1bXMgPSBzdGF0aWNfY2FzdDxfVmFsdWVUeXBlKj4oOjpvcGVyYXRvciBuZXcoc2l6ZW9mKF9WYWx1ZVR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19udW1fdGhyZWFkcykpOworCSAgX091dHB1dEl0ZXJhdG9yIF9fdGFyZ2V0X2VuZDsKKwl9IC8vc2luZ2xlCisKKyAgICAgICAgX1RocmVhZEluZGV4IF9faWFtID0gb21wX2dldF90aHJlYWRfbnVtKCk7CisgICAgICAgIGlmIChfX2lhbSA9PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2JlZ2luOworICAgICAgICAgICAgX19wYXJhbGxlbF9wYXJ0aWFsX3N1bV9iYXNlY2FzZShfX2JlZ2luICsgMSwKKwkJCQkJICAgIF9fYmVnaW4gKyBfX2JvcmRlcnNbMV0sCisJCQkJCSAgICBfX3Jlc3VsdCArIDEsCisJCQkJCSAgICBfX2Jpbl9vcCwgKl9fYmVnaW4pOworICAgICAgICAgICAgOjpuZXcoJihfX3N1bXNbX19pYW1dKSkgX1ZhbHVlVHlwZSgqKF9fcmVzdWx0ICsgX19ib3JkZXJzWzFdIC0gMSkpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIDo6bmV3KCYoX19zdW1zW19faWFtXSkpCisgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19nbnVfcGFyYWxsZWw6OmFjY3VtdWxhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmVnaW4gKyBfX2JvcmRlcnNbX19pYW1dICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbiArIF9fYm9yZGVyc1tfX2lhbSArIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fYmVnaW4gKyBfX2JvcmRlcnNbX19pYW1dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iaW5fb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251X3BhcmFsbGVsOjpzZXF1ZW50aWFsX3RhZygpKSk7CisgICAgICAgICAgfQorCisjICAgICAgIHByYWdtYSBvbXAgYmFycmllcgorCisjICAgICAgIHByYWdtYSBvbXAgc2luZ2xlCisJX19wYXJhbGxlbF9wYXJ0aWFsX3N1bV9iYXNlY2FzZShfX3N1bXMgKyAxLCBfX3N1bXMgKyBfX251bV90aHJlYWRzLAorCQkJCQlfX3N1bXMgKyAxLCBfX2Jpbl9vcCwgX19zdW1zWzBdKTsKKworIyAgICAgICBwcmFnbWEgb21wIGJhcnJpZXIKKworCS8vIFN0aWxsIHNhbWUgdGVhbS4KKyAgICAgICAgX19wYXJhbGxlbF9wYXJ0aWFsX3N1bV9iYXNlY2FzZShfX2JlZ2luICsgX19ib3JkZXJzW19faWFtICsgMV0sCisJCQkJCV9fYmVnaW4gKyBfX2JvcmRlcnNbX19pYW0gKyAyXSwKKwkJCQkJX19yZXN1bHQgKyBfX2JvcmRlcnNbX19pYW0gKyAxXSwKKwkJCQkJX19iaW5fb3AsIF9fc3Vtc1tfX2lhbV0pOworICAgICAgfSAvL3BhcmFsbGVsCisKKyAgICAgIGZvciAoX1RocmVhZEluZGV4IF9faSA9IDA7IF9faSA8IF9fbnVtX3RocmVhZHM7ICsrX19pKQorCV9fc3Vtc1tfX2ldLn5fVmFsdWVUeXBlKCk7CisgICAgICA6Om9wZXJhdG9yIGRlbGV0ZShfX3N1bXMpOworCisgICAgICBkZWxldGVbXSBfX2JvcmRlcnM7CisKKyAgICAgIHJldHVybiBfX3Jlc3VsdCArIF9fbjsKKyAgICB9CisKKyAgLyoqIEBicmllZiBQYXJhbGxlbCBwYXJ0aWFsIHN1bSBmcm9udC1fX2VuZC4KKyAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fZW5kIEVuZCBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX3Jlc3VsdCBCZWdpbiBpdGVyYXRvciBvZiBvdXRwdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19iaW5fb3AgQXNzb2NpYXRpdmUgYmluYXJ5IGZ1bmN0aW9uLgorICAgKiAgQHJldHVybiBFbmQgaXRlcmF0b3Igb2Ygb3V0cHV0IHNlcXVlbmNlLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsCisJICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorCSAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CisgICAgX091dHB1dEl0ZXJhdG9yCisgICAgX19wYXJhbGxlbF9wYXJ0aWFsX3N1bShfSUl0ZXIgX19iZWdpbiwgX0lJdGVyIF9fZW5kLAorCQkJICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5T3BlcmF0aW9uIF9fYmluX29wKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19iZWdpbiAtIF9fZW5kKQorCisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19uID0gX19lbmQgLSBfX2JlZ2luOworCisgICAgICBzd2l0Y2ggKF9TZXR0aW5nczo6Z2V0KCkucGFydGlhbF9zdW1fYWxnb3JpdGhtKQorCXsKKwljYXNlIExJTkVBUjoKKwkgIC8vIE5lZWQgYW4gaW5pdGlhbCBvZmZzZXQuCisJICByZXR1cm4gX19wYXJhbGxlbF9wYXJ0aWFsX3N1bV9saW5lYXIoX19iZWdpbiwgX19lbmQsIF9fcmVzdWx0LAorCQkJCQkgICAgICAgX19iaW5fb3AsIF9fbik7CisJZGVmYXVsdDoKKwkgIC8vIFBhcnRpYWxfc3VtIGFsZ29yaXRobSBub3QgaW1wbGVtZW50ZWQuCisJICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoMCk7CisJICByZXR1cm4gX19yZXN1bHQgKyBfX247CisJfQorICAgIH0KK30KKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX1BBUlRJQUxfU1VNX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvcGFydGl0aW9uLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3BhcnRpdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYzQzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3BhcnRpdGlvbi5oCkBAIC0wLDAgKzEsNDM0IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvcGFydGl0aW9uLmgKKyAqICBAYnJpZWYgUGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2Ygc3RkOjpwYXJ0aXRpb24oKSwKKyAqICBzdGQ6Om50aF9lbGVtZW50KCksIGFuZCBzdGQ6OnBhcnRpYWxfc29ydCgpLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlciBhbmQgRmVsaXggUHV0emUuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfUEFSVElUSU9OX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfUEFSVElUSU9OX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9zb3J0Lmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvcmFuZG9tX251bWJlci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ28uaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9wYXJhbGxlbC5oPgorCisvKiogQGJyaWVmIERlY2lkZSB3aGV0aGVyIHRvIGRlY2xhcmUgY2VydGFpbiB2YXJpYWJsZXMgdm9sYXRpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX1ZPTEFUSUxFIHZvbGF0aWxlCisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKiogQGJyaWVmIFBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIHN0ZDo6cGFydGl0aW9uLgorICAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlIHRvIHNwbGl0LgorICAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UgdG8gc3BsaXQuCisgICAgKiAgQHBhcmFtIF9fcHJlZCBQYXJ0aXRpb24gcHJlZGljYXRlLCBwb3NzaWJseSBpbmNsdWRpbmcgc29tZSBraW5kCisgICAgKiAgICAgICAgIG9mIHBpdm90LgorICAgICogIEBwYXJhbSBfX251bV90aHJlYWRzIE1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlIGZvciB0aGlzIHRhc2suCisgICAgKiAgQHJldHVybiBOdW1iZXIgb2YgZWxlbWVudHMgbm90IGZ1bGZpbGxpbmcgdGhlIHByZWRpY2F0ZS4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KKyAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgX19wYXJhbGxlbF9wYXJ0aXRpb24oX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorCQkJIF9QcmVkaWNhdGUgX19wcmVkLCBfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcykKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbiA9IF9fZW5kIC0gX19iZWdpbjsKKworICAgICAgX0dMSUJDWFhfQ0FMTChfX24pCisKKyAgICAgIGNvbnN0IF9TZXR0aW5ncyYgX19zID0gX1NldHRpbmdzOjpnZXQoKTsKKworICAgICAgLy8gc2hhcmVkCisgICAgICBfR0xJQkNYWF9WT0xBVElMRSBfRGlmZmVyZW5jZVR5cGUgX19sZWZ0ID0gMCwgX19yaWdodCA9IF9fbiAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0ID0gX19uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVmdG92ZXJfbGVmdCwgX19sZWZ0b3Zlcl9yaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlZnRuZXcsIF9fcmlnaHRuZXc7CisKKyAgICAgIC8vIGp1c3QgMCBvciAxLCBidXQgaW50IHRvIGFsbG93IGF0b21pYyBvcGVyYXRpb25zCisgICAgICBpbnQqIF9fcmVzZXJ2ZWRfbGVmdCA9IDAsICogX19yZXNlcnZlZF9yaWdodCA9IDA7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2NodW5rX3NpemUgPSBfX3MucGFydGl0aW9uX2NodW5rX3NpemU7CisKKyAgICAgIC8vYXQgbGVhc3QgdHdvIGNodW5rcyBwZXIgdGhyZWFkCisgICAgICBpZiAoX19kaXN0ID49IDIgKiBfX251bV90aHJlYWRzICogX19jaHVua19zaXplKQorIyAgICAgICBwcmFnbWEgb21wIHBhcmFsbGVsIG51bV90aHJlYWRzKF9fbnVtX3RocmVhZHMpCisJeworIyAgICAgICAgIHByYWdtYSBvbXAgc2luZ2xlCisJICB7CisJICAgIF9fbnVtX3RocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7CisJICAgIF9fcmVzZXJ2ZWRfbGVmdCA9IG5ldyBpbnRbX19udW1fdGhyZWFkc107CisJICAgIF9fcmVzZXJ2ZWRfcmlnaHQgPSBuZXcgaW50W19fbnVtX3RocmVhZHNdOworCisJICAgIGlmIChfX3MucGFydGl0aW9uX2NodW5rX3NoYXJlID4gMC4wKQorCSAgICAgIF9fY2h1bmtfc2l6ZSA9IHN0ZDo6bWF4PF9EaWZmZXJlbmNlVHlwZT4KKwkJKF9fcy5wYXJ0aXRpb25fY2h1bmtfc2l6ZSwgKGRvdWJsZSlfX24gCisJCSAqIF9fcy5wYXJ0aXRpb25fY2h1bmtfc2hhcmUgLyAoZG91YmxlKV9fbnVtX3RocmVhZHMpOworCSAgICBlbHNlCisJICAgICAgX19jaHVua19zaXplID0gX19zLnBhcnRpdGlvbl9jaHVua19zaXplOworCSAgfQorCisJICB3aGlsZSAoX19kaXN0ID49IDIgKiBfX251bV90aHJlYWRzICogX19jaHVua19zaXplKQorCSAgICB7CisjICAgICAgICAgICAgIHByYWdtYSBvbXAgc2luZ2xlCisJICAgICAgeworCQlfRGlmZmVyZW5jZVR5cGUgX19udW1fY2h1bmtzID0gX19kaXN0IC8gX19jaHVua19zaXplOworCisJCWZvciAoX1RocmVhZEluZGV4IF9fciA9IDA7IF9fciA8IF9fbnVtX3RocmVhZHM7ICsrX19yKQorCQkgIHsKKwkJICAgIF9fcmVzZXJ2ZWRfbGVmdCBbX19yXSA9IDA7IC8vIGZhbHNlCisJCSAgICBfX3Jlc2VydmVkX3JpZ2h0W19fcl0gPSAwOyAvLyBmYWxzZQorCQkgIH0KKwkJX19sZWZ0b3Zlcl9sZWZ0ID0gMDsKKwkJX19sZWZ0b3Zlcl9yaWdodCA9IDA7CisJICAgICAgfSAvL2ltcGxpY2l0IGJhcnJpZXIKKworCSAgICAgIC8vIFByaXZhdGUuCisJICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fdGhyZWFkX2xlZnQsIF9fdGhyZWFkX2xlZnRfYm9yZGVyLAorCQkgICAgICAgICAgICAgIF9fdGhyZWFkX3JpZ2h0LCBfX3RocmVhZF9yaWdodF9ib3JkZXI7CisKKwkgICAgICBfX3RocmVhZF9sZWZ0ID0gX19sZWZ0ICsgMTsKKwkgICAgICAvLyBKdXN0IHRvIHNhdGlzZnkgdGhlIGNvbmRpdGlvbiBiZWxvdy4KKwkgICAgICBfX3RocmVhZF9sZWZ0X2JvcmRlciA9IF9fdGhyZWFkX2xlZnQgLSAxOworCisJICAgICAgX190aHJlYWRfcmlnaHQgPSBfX24gLSAxOworICAgICAgICAgICAgIC8vIEp1c3QgdG8gc2F0aXNmeSB0aGUgY29uZGl0aW9uIGJlbG93LgorCSAgICAgIF9fdGhyZWFkX3JpZ2h0X2JvcmRlciA9IF9fdGhyZWFkX3JpZ2h0ICsgMTsKKworCSAgICAgIGJvb2wgX19pYW1fZmluaXNoZWQgPSBmYWxzZTsKKwkgICAgICB3aGlsZSAoIV9faWFtX2ZpbmlzaGVkKQorCQl7CisJCSAgaWYgKF9fdGhyZWFkX2xlZnQgPiBfX3RocmVhZF9sZWZ0X2JvcmRlcikKKwkJICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBfRGlmZmVyZW5jZVR5cGUgX19mb3JtZXJfZGlzdCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZldGNoX2FuZF9hZGQoJl9fZGlzdCwgLV9fY2h1bmtfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZm9ybWVyX2Rpc3QgPCBfX2NodW5rX3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmV0Y2hfYW5kX2FkZCgmX19kaXN0LCBfX2NodW5rX3NpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lhbV9maW5pc2hlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX190aHJlYWRfbGVmdCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mZXRjaF9hbmRfYWRkKCZfX2xlZnQsIF9fY2h1bmtfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGhyZWFkX2xlZnRfYm9yZGVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RocmVhZF9sZWZ0ICsgKF9fY2h1bmtfc2l6ZSAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkgICAgfQorCisJCSAgaWYgKF9fdGhyZWFkX3JpZ2h0IDwgX190aHJlYWRfcmlnaHRfYm9yZGVyKQorCQkgICAgeworICAgICAgICAgICAgICAgICAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2Zvcm1lcl9kaXN0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmV0Y2hfYW5kX2FkZCgmX19kaXN0LCAtX19jaHVua19zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoX19mb3JtZXJfZGlzdCA8IF9fY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19mZXRjaF9hbmRfYWRkKCZfX2Rpc3QsIF9fY2h1bmtfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9faWFtX2ZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RocmVhZF9yaWdodCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mZXRjaF9hbmRfYWRkKCZfX3JpZ2h0LCAtX19jaHVua19zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX190aHJlYWRfcmlnaHRfYm9yZGVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RocmVhZF9yaWdodCAtIChfX2NodW5rX3NpemUgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgIH0KKworCQkgIC8vIFN3YXAgYXMgdXN1YWwuCisJCSAgd2hpbGUgKF9fdGhyZWFkX2xlZnQgPCBfX3RocmVhZF9yaWdodCkKKwkJICAgIHsKKwkJICAgICAgd2hpbGUgKF9fcHJlZChfX2JlZ2luW19fdGhyZWFkX2xlZnRdKQorCQkJICAgICAmJiBfX3RocmVhZF9sZWZ0IDw9IF9fdGhyZWFkX2xlZnRfYm9yZGVyKQorCQkJKytfX3RocmVhZF9sZWZ0OworCQkgICAgICB3aGlsZSAoIV9fcHJlZChfX2JlZ2luW19fdGhyZWFkX3JpZ2h0XSkKKwkJCSAgICAgJiYgX190aHJlYWRfcmlnaHQgPj0gX190aHJlYWRfcmlnaHRfYm9yZGVyKQorCQkJLS1fX3RocmVhZF9yaWdodDsKKworCQkgICAgICBpZiAoX190aHJlYWRfbGVmdCA+IF9fdGhyZWFkX2xlZnRfYm9yZGVyCisJCQkgIHx8IF9fdGhyZWFkX3JpZ2h0IDwgX190aHJlYWRfcmlnaHRfYm9yZGVyKQorCQkJLy8gRmV0Y2ggbmV3IGNodW5rKF9fcykuCisJCQlicmVhazsKKworCQkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2JlZ2luICsgX190aHJlYWRfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iZWdpbiArIF9fdGhyZWFkX3JpZ2h0KTsKKwkJICAgICAgKytfX3RocmVhZF9sZWZ0OworCQkgICAgICAtLV9fdGhyZWFkX3JpZ2h0OworCQkgICAgfQorCQl9CisKKwkgICAgICAvLyBOb3cgc3dhcCB0aGUgbGVmdG92ZXIgY2h1bmtzIHRvIHRoZSByaWdodCBwbGFjZXMuCisJICAgICAgaWYgKF9fdGhyZWFkX2xlZnQgPD0gX190aHJlYWRfbGVmdF9ib3JkZXIpCisjICAgICAgICAgICAgICAgcHJhZ21hIG9tcCBhdG9taWMKKwkJKytfX2xlZnRvdmVyX2xlZnQ7CisJICAgICAgaWYgKF9fdGhyZWFkX3JpZ2h0ID49IF9fdGhyZWFkX3JpZ2h0X2JvcmRlcikKKyMgICAgICAgICAgICAgICBwcmFnbWEgb21wIGF0b21pYworCQkrK19fbGVmdG92ZXJfcmlnaHQ7CisKKyMgICAgICAgICAgICAgcHJhZ21hIG9tcCBiYXJyaWVyCisKKyAgICAgICAgICAgICAgX0RpZmZlcmVuY2VUeXBlCisgICAgICAgICAgICAgICAgICAgIF9fbGVmdG9sZCA9IF9fbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgX19sZWZ0bmV3ID0gX19sZWZ0IC0gX19sZWZ0b3Zlcl9sZWZ0ICogX19jaHVua19zaXplLAorICAgICAgICAgICAgICAgICAgICBfX3JpZ2h0b2xkID0gX19yaWdodCwKKyAgICAgICAgICAgICAgICAgICAgX19yaWdodG5ldyA9IF9fcmlnaHQgKyBfX2xlZnRvdmVyX3JpZ2h0ICogX19jaHVua19zaXplOworCisJICAgICAgLy8gPD0+IF9fdGhyZWFkX2xlZnRfYm9yZGVyICsgKF9fY2h1bmtfc2l6ZSAtIDEpID49IF9fbGVmdG5ldworCSAgICAgIGlmIChfX3RocmVhZF9sZWZ0IDw9IF9fdGhyZWFkX2xlZnRfYm9yZGVyCisJCSAgJiYgX190aHJlYWRfbGVmdF9ib3JkZXIgPj0gX19sZWZ0bmV3KQorCQl7CisJCSAgLy8gQ2h1bmsgYWxyZWFkeSBpbiBwbGFjZSwgcmVzZXJ2ZSBzcG90LgorCQlfX3Jlc2VydmVkX2xlZnRbKF9fbGVmdCAtIChfX3RocmVhZF9sZWZ0X2JvcmRlciArIDEpKQorCQkJCS8gX19jaHVua19zaXplXSA9IDE7CisJCX0KKworCSAgICAgIC8vIDw9PiBfX3RocmVhZF9yaWdodF9ib3JkZXIgLSAoX19jaHVua19zaXplIC0gMSkgPD0gX19yaWdodG5ldworCSAgICAgIGlmIChfX3RocmVhZF9yaWdodCA+PSBfX3RocmVhZF9yaWdodF9ib3JkZXIKKwkJICAmJiBfX3RocmVhZF9yaWdodF9ib3JkZXIgPD0gX19yaWdodG5ldykKKwkJeworCQkgIC8vIENodW5rIGFscmVhZHkgaW4gcGxhY2UsIHJlc2VydmUgc3BvdC4KKwkJICBfX3Jlc2VydmVkX3JpZ2h0WygoX190aHJlYWRfcmlnaHRfYm9yZGVyIC0gMSkgLSBfX3JpZ2h0KQorCQkJCSAgIC8gX19jaHVua19zaXplXSA9IDE7CisJCX0KKworIyAgICAgICAgICAgICBwcmFnbWEgb21wIGJhcnJpZXIKKworCSAgICAgIGlmIChfX3RocmVhZF9sZWZ0IDw9IF9fdGhyZWFkX2xlZnRfYm9yZGVyCisJCSAgJiYgX190aHJlYWRfbGVmdF9ib3JkZXIgPCBfX2xlZnRuZXcpCisJCXsKKwkJICAvLyBGaW5kIHNwb3QgYW5kIHN3YXAuCisJCSAgX0RpZmZlcmVuY2VUeXBlIF9fc3dhcHN0YXJ0ID0gLTE7CisgICAgICAgICAgICAgICAgICBmb3IgKGludCBfX3IgPSAwOyBfX3IgPCBfX2xlZnRvdmVyX2xlZnQ7ICsrX19yKQorICAgICAgICAgICAgICAgICAgICBpZiAoX19yZXNlcnZlZF9sZWZ0W19fcl0gPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19jb21wYXJlX2FuZF9zd2FwKCYoX19yZXNlcnZlZF9sZWZ0W19fcl0pLCAwLCAxKSkKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBfX3N3YXBzdGFydCA9IF9fbGVmdG9sZCAtIChfX3IgKyAxKSAqIF9fY2h1bmtfc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIH0KKworI2lmIF9HTElCQ1hYX0FTU0VSVElPTlMKKwkJICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX19zd2Fwc3RhcnQgIT0gLTEpOworI2VuZGlmCisKKwkJICBzdGQ6OnN3YXBfcmFuZ2VzKF9fYmVnaW4gKyBfX3RocmVhZF9sZWZ0X2JvcmRlcgorCQkJCSAgIC0gKF9fY2h1bmtfc2l6ZSAtIDEpLAorCQkJCSAgIF9fYmVnaW4gKyBfX3RocmVhZF9sZWZ0X2JvcmRlciArIDEsCisJCQkJICAgX19iZWdpbiArIF9fc3dhcHN0YXJ0KTsKKwkJfQorCisJICAgICAgaWYgKF9fdGhyZWFkX3JpZ2h0ID49IF9fdGhyZWFkX3JpZ2h0X2JvcmRlcgorCQkgICYmIF9fdGhyZWFkX3JpZ2h0X2JvcmRlciA+IF9fcmlnaHRuZXcpCisJCXsKKwkJICAvLyBGaW5kIHNwb3QgYW5kIHN3YXAKKwkJICBfRGlmZmVyZW5jZVR5cGUgX19zd2Fwc3RhcnQgPSAtMTsKKyAgICAgICAgICAgICAgICAgIGZvciAoaW50IF9fciA9IDA7IF9fciA8IF9fbGVmdG92ZXJfcmlnaHQ7ICsrX19yKQorICAgICAgICAgICAgICAgICAgICBpZiAoX19yZXNlcnZlZF9yaWdodFtfX3JdID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIF9fY29tcGFyZV9hbmRfc3dhcCgmKF9fcmVzZXJ2ZWRfcmlnaHRbX19yXSksIDAsIDEpKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fc3dhcHN0YXJ0ID0gX19yaWdodG9sZCArIF9fciAqIF9fY2h1bmtfc2l6ZSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisJCSAgX0dMSUJDWFhfUEFSQUxMRUxfQVNTRVJUKF9fc3dhcHN0YXJ0ICE9IC0xKTsKKyNlbmRpZgorCisJCSAgc3RkOjpzd2FwX3JhbmdlcyhfX2JlZ2luICsgX190aHJlYWRfcmlnaHRfYm9yZGVyLAorCQkJCSAgIF9fYmVnaW4gKyBfX3RocmVhZF9yaWdodF9ib3JkZXIKKwkJCQkgICArIF9fY2h1bmtfc2l6ZSwgX19iZWdpbiArIF9fc3dhcHN0YXJ0KTsKKwkgICAgICB9CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworIyAgICAgICAgICAgICBwcmFnbWEgb21wIGJhcnJpZXIKKworIyAgICAgICAgICAgICBwcmFnbWEgb21wIHNpbmdsZQorCSAgICAgIHsKKwkJZm9yIChfRGlmZmVyZW5jZVR5cGUgX19yID0gMDsgX19yIDwgX19sZWZ0b3Zlcl9sZWZ0OyArK19fcikKKwkJICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX19yZXNlcnZlZF9sZWZ0W19fcl0gPT0gMSk7CisJCWZvciAoX0RpZmZlcmVuY2VUeXBlIF9fciA9IDA7IF9fciA8IF9fbGVmdG92ZXJfcmlnaHQ7ICsrX19yKQorCQkgIF9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfX3Jlc2VydmVkX3JpZ2h0W19fcl0gPT0gMSk7CisJICAgICAgfQorI2VuZGlmCisKKwkgICAgICBfX2xlZnQgPSBfX2xlZnRuZXc7CisJICAgICAgX19yaWdodCA9IF9fcmlnaHRuZXc7CisgICAgICAgICAgICAgIF9fZGlzdCA9IF9fcmlnaHQgLSBfX2xlZnQgKyAxOworCSAgICB9CisKKyMgICAgICAgICAgIHByYWdtYSBvbXAgZmx1c2goX19sZWZ0LCBfX3JpZ2h0KQorCX0gLy8gZW5kICJyZWN1cnNpb24iIC8vcGFyYWxsZWwKKworICAgICAgICBfRGlmZmVyZW5jZVR5cGUgX19maW5hbF9sZWZ0ID0gX19sZWZ0LCBfX2ZpbmFsX3JpZ2h0ID0gX19yaWdodDsKKworCXdoaWxlIChfX2ZpbmFsX2xlZnQgPCBfX2ZpbmFsX3JpZ2h0KQorCSAgeworCSAgICAvLyBHbyByaWdodCB1bnRpbCBrZXkgaXMgZ2VxIHRoYW4gcGl2b3QuCisJICAgIHdoaWxlIChfX3ByZWQoX19iZWdpbltfX2ZpbmFsX2xlZnRdKQorCQkgICAmJiBfX2ZpbmFsX2xlZnQgPCBfX2ZpbmFsX3JpZ2h0KQorCSAgICAgICsrX19maW5hbF9sZWZ0OworCisJICAgIC8vIEdvIGxlZnQgdW50aWwga2V5IGlzIGxlc3MgdGhhbiBwaXZvdC4KKwkgICAgd2hpbGUgKCFfX3ByZWQoX19iZWdpbltfX2ZpbmFsX3JpZ2h0XSkKKwkJICAgJiYgX19maW5hbF9sZWZ0IDwgX19maW5hbF9yaWdodCkKKwkgICAgICAtLV9fZmluYWxfcmlnaHQ7CisKKwkgICAgaWYgKF9fZmluYWxfbGVmdCA9PSBfX2ZpbmFsX3JpZ2h0KQorCSAgICAgIGJyZWFrOworCSAgICBzdGQ6Oml0ZXJfc3dhcChfX2JlZ2luICsgX19maW5hbF9sZWZ0LCBfX2JlZ2luICsgX19maW5hbF9yaWdodCk7CisJICAgICsrX19maW5hbF9sZWZ0OworCSAgICAtLV9fZmluYWxfcmlnaHQ7CisJICB9CisKKwkvLyBBbGwgZWxlbWVudHMgb24gdGhlIGxlZnQgc2lkZSBhcmUgPCBwaXYsIGFsbCBlbGVtZW50cyBvbiB0aGUKKwkvLyByaWdodCBhcmUgPj0gcGl2CisJZGVsZXRlW10gX19yZXNlcnZlZF9sZWZ0OworCWRlbGV0ZVtdIF9fcmVzZXJ2ZWRfcmlnaHQ7CisKKwkvLyBFbGVtZW50ICJiZXR3ZWVuIiBfX2ZpbmFsX2xlZnQgYW5kIF9fZmluYWxfcmlnaHQgbWlnaHQgbm90IGhhdmUKKwkvLyBiZWVuIHJlZ2FyZGVkIHlldAorCWlmIChfX2ZpbmFsX2xlZnQgPCBfX24gJiYgIV9fcHJlZChfX2JlZ2luW19fZmluYWxfbGVmdF0pKQorCSAgLy8gUmVhbGx5IHN3YXBwZWQuCisJICByZXR1cm4gX19maW5hbF9sZWZ0OworCWVsc2UKKwkgIHJldHVybiBfX2ZpbmFsX2xlZnQgKyAxOworICAgIH0KKworICAvKioKKyAgICAqICBAYnJpZWYgUGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2Ygc3RkOjpudGhfZWxlbWVudCgpLgorICAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgICogIEBwYXJhbSBfX250aCBfSXRlcmF0b3Igb2YgZWxlbWVudCB0aGF0IG11c3QgYmUgaW4gcG9zaXRpb24gYWZ0ZXJ3YXJkcy4KKyAgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgICogIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkIAorICAgIF9fcGFyYWxsZWxfbnRoX2VsZW1lbnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fbnRoLCAKKwkJCSAgIF9SQUl0ZXIgX19lbmQsIF9Db21wYXJlIF9fY29tcCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX0dMSUJDWFhfQ0FMTChfX2VuZCAtIF9fYmVnaW4pCisKKyAgICAgIF9SQUl0ZXIgX19zcGxpdDsKKyAgICAgIF9SYW5kb21OdW1iZXIgX19ybmc7CisKKyAgICAgIGNvbnN0IF9TZXR0aW5ncyYgX19zID0gX1NldHRpbmdzOjpnZXQoKTsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX21pbmltdW1fbGVuZ3RoID0gc3RkOjptYXg8X0RpZmZlcmVuY2VUeXBlPigyLAorICAgICAgICBzdGQ6Om1heChfX3MubnRoX2VsZW1lbnRfbWluaW1hbF9uLCBfX3MucGFydGl0aW9uX21pbmltYWxfbikpOworCisgICAgICAvLyBCcmVhayBpZiBpbnB1dCByYW5nZSB0byBzbWFsbC4KKyAgICAgIHdoaWxlIChzdGF0aWNfY2FzdDxfU2VxdWVuY2VJbmRleD4oX19lbmQgLSBfX2JlZ2luKSA+PSBfX21pbmltdW1fbGVuZ3RoKQorCXsKKyAgICAgICAgICBfRGlmZmVyZW5jZVR5cGUgX19uID0gX19lbmQgLSBfX2JlZ2luOworCisgICAgICAgICAgX1JBSXRlciBfX3Bpdm90X3BvcyA9IF9fYmVnaW4gKyBfX3JuZyhfX24pOworCisgICAgICAgICAgLy8gU3dhcCBfX3Bpdm90X3BvcyB2YWx1ZSB0byBlbmQuCisgICAgICAgICAgaWYgKF9fcGl2b3RfcG9zICE9IChfX2VuZCAtIDEpKQorICAgICAgICAgICAgc3RkOjppdGVyX3N3YXAoX19waXZvdF9wb3MsIF9fZW5kIC0gMSk7CisgICAgICAgICAgX19waXZvdF9wb3MgPSBfX2VuZCAtIDE7CisKKyAgICAgICAgICAvLyBfQ29tcGFyZSBtdXN0IGhhdmUgZmlyc3RfdmFsdWVfdHlwZSwgc2Vjb25kX3ZhbHVlX3R5cGUsCisgICAgICAgICAgLy8gcmVzdWx0X3R5cGUKKyAgICAgICAgICAvLyBfQ29tcGFyZSA9PQorICAgICAgICAgIC8vIF9fZ251X3BhcmFsbGVsOjpfTGV4aWNvZ3JhcGhpYzxTLCBpbnQsCisJICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVfcGFyYWxsZWw6Ol9MZXNzPFMsIFM+ID4KKyAgICAgICAgICAvLyBfX3Bpdm90X3BvcyA9PSBzdGQ6OnBhaXI8UywgaW50PioKKyAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X19iaW5kZXIybmQ8X0NvbXBhcmUsIF9WYWx1ZVR5cGUsIF9WYWx1ZVR5cGUsIGJvb2w+CisgICAgICAgICAgICBfX3ByZWQoX19jb21wLCAqX19waXZvdF9wb3MpOworCisgICAgICAgICAgLy8gRGl2aWRlLCBsZWF2ZSBwaXZvdCB1bmNoYW5nZWQgaW4gbGFzdCBwbGFjZS4KKyAgICAgICAgICBfUkFJdGVyIF9fc3BsaXRfcG9zMSwgX19zcGxpdF9wb3MyOworICAgICAgICAgIF9fc3BsaXRfcG9zMSA9IF9fYmVnaW4gKyBfX3BhcmFsbGVsX3BhcnRpdGlvbihfX2JlZ2luLCBfX2VuZCAtIDEsCisJCQkJCQkJX19wcmVkLAorCQkJCQkJCV9fZ2V0X21heF90aHJlYWRzKCkpOworCisgICAgICAgICAgLy8gTGVmdCBzaWRlOiA8IF9fcGl2b3RfcG9zOyBfX3JpZ2h0IHNpZGU6ID49IF9fcGl2b3RfcG9zCisKKyAgICAgICAgICAvLyBTd2FwIHBpdm90IGJhY2sgdG8gbWlkZGxlLgorICAgICAgICAgIGlmIChfX3NwbGl0X3BvczEgIT0gX19waXZvdF9wb3MpCisgICAgICAgICAgICBzdGQ6Oml0ZXJfc3dhcChfX3NwbGl0X3BvczEsIF9fcGl2b3RfcG9zKTsKKyAgICAgICAgICBfX3Bpdm90X3BvcyA9IF9fc3BsaXRfcG9zMTsKKworICAgICAgICAgIC8vIEluIGNhc2UgYWxsIGVsZW1lbnRzIGFyZSBlcXVhbCwgX19zcGxpdF9wb3MxID09IDAKKyAgICAgICAgICBpZiAoKF9fc3BsaXRfcG9zMSArIDEgLSBfX2JlZ2luKSA8IChfX24gPj4gNykKKyAgICAgICAgICAgICAgfHwgKF9fZW5kIC0gX19zcGxpdF9wb3MxKSA8IChfX24gPj4gNykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vIFZlcnkgdW5lcXVhbCBzcGxpdCwgb25lIHBhcnQgc21hbGxlciB0aGFuIG9uZSAxMjh0aAorICAgICAgICAgICAgICAvLyBlbGVtZW50cyBub3Qgc3RyaWN0bHkgbGFyZ2VyIHRoYW4gdGhlIHBpdm90LgorICAgICAgICAgICAgICBfX2dudV9wYXJhbGxlbDo6X191bmFyeV9uZWdhdGU8X19nbnVfcGFyYWxsZWw6OgorICAgICAgICAJX19iaW5kZXIxc3Q8X0NvbXBhcmUsIF9WYWx1ZVR5cGUsCisJCSAgICAgICAgICAgIF9WYWx1ZVR5cGUsIGJvb2w+LCBfVmFsdWVUeXBlPgorICAgICAgICAJX19wcmVkKF9fZ251X3BhcmFsbGVsOjpfX2JpbmRlcjFzdDxfQ29tcGFyZSwgX1ZhbHVlVHlwZSwKKwkJICAgICAgIF9WYWx1ZVR5cGUsIGJvb2w+KF9fY29tcCwgKl9fcGl2b3RfcG9zKSk7CisKKyAgICAgICAgICAgICAgLy8gRmluZCBvdGhlciBlbmQgb2YgcGl2b3QtZXF1YWwgcmFuZ2UuCisgICAgICAgICAgICAgIF9fc3BsaXRfcG9zMiA9IF9fZ251X3NlcXVlbnRpYWw6OnBhcnRpdGlvbihfX3NwbGl0X3BvczEgKyAxLAorCQkJCQkJCSBfX2VuZCwgX19wcmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyBPbmx5IHNraXAgdGhlIHBpdm90LgorICAgICAgICAgICAgX19zcGxpdF9wb3MyID0gX19zcGxpdF9wb3MxICsgMTsKKworICAgICAgICAgIC8vIENvbXBhcmUgaXRlcmF0b3JzLgorICAgICAgICAgIGlmIChfX3NwbGl0X3BvczIgPD0gX19udGgpCisgICAgICAgICAgICBfX2JlZ2luID0gX19zcGxpdF9wb3MyOworICAgICAgICAgIGVsc2UgaWYgKF9fbnRoIDwgX19zcGxpdF9wb3MxKQorICAgICAgICAgICAgX19lbmQgPSBfX3NwbGl0X3BvczE7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJlYWs7CisJfQorCisgICAgICAvLyBPbmx5IGF0IG1vc3QgX1NldHRpbmdzOjpwYXJ0aXRpb25fbWluaW1hbF9uIF9fZWxlbWVudHMgX19sZWZ0LgorICAgICAgX19nbnVfc2VxdWVudGlhbDo6bnRoX2VsZW1lbnQoX19iZWdpbiwgX19udGgsIF9fZW5kLCBfX2NvbXApOworICAgIH0KKworICAvKiogQGJyaWVmIFBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIHN0ZDo6cGFydGlhbF9zb3J0KCkuCisgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAqICBAcGFyYW0gX19taWRkbGUgU29ydCB1bnRpbCB0aGlzIHBvc2l0aW9uLgorICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHZvaWQKKyAgICBfX3BhcmFsbGVsX3BhcnRpYWxfc29ydChfUkFJdGVyIF9fYmVnaW4sCisJCQkgICAgX1JBSXRlciBfX21pZGRsZSwKKwkJCSAgICBfUkFJdGVyIF9fZW5kLCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgX19wYXJhbGxlbF9udGhfZWxlbWVudChfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQsIF9fY29tcCk7CisgICAgICBzdGQ6OnNvcnQoX19iZWdpbiwgX19taWRkbGUsIF9fY29tcCk7CisgICAgfQorCit9IC8vbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCisKKyN1bmRlZiBfR0xJQkNYWF9WT0xBVElMRQorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfUEFSVElUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvcXVldWUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmU1YjlkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9xdWV1ZS5oCkBAIC0wLDAgKzEsMTU1IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvcXVldWUuaAorICogIEBicmllZiBMb2NrLWZyZWUgZG91YmxlLWVuZGVkIHF1ZXVlLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9RVUVVRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX1FVRVVFX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvdHlwZXMuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9iYXNlLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvY29tcGF0aWJpbGl0eS5oPgorCisvKiogQGJyaWVmIERlY2lkZSB3aGV0aGVyIHRvIGRlY2xhcmUgY2VydGFpbiB2YXJpYWJsZSB2b2xhdGlsZSBpbiB0aGlzIGZpbGUuICovCisjZGVmaW5lIF9HTElCQ1hYX1ZPTEFUSUxFIHZvbGF0aWxlCisKK25hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAoreworICAvKipAYnJpZWYgRG91YmxlLWVuZGVkIHF1ZXVlIG9mIGJvdW5kZWQgc2l6ZSwgYWxsb3dpbmcgbG9jay1mcmVlCisgICAqICBhdG9taWMgYWNjZXNzLiAgcHVzaF9mcm9udCgpIGFuZCBwb3BfZnJvbnQoKSBtdXN0IG5vdCBiZSBjYWxsZWQKKyAgICogIGNvbmN1cnJlbnRseSB0byBlYWNoIG90aGVyLCB3aGlsZSBwb3BfYmFjaygpIGNhbiBiZSBjYWxsZWQKKyAgICogIGNvbmN1cnJlbnRseSBhdCBhbGwgdGltZXMuCisgICAqICBAYyBlbXB0eSgpLCBAYyBzaXplKCksIGFuZCBAYyB0b3AoKSBhcmUgaW50ZW50aW9uYWxseSBub3QgcHJvdmlkZWQuCisgICAqICBDYWxsaW5nIHRoZW0gd291bGQgbm90IG1ha2Ugc2Vuc2UgaW4gYSBjb25jdXJyZW50IHNldHRpbmcuCisgICAqICBAcGFyYW0gX1RwIENvbnRhaW5lZCBlbGVtZW50IHR5cGUuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfUmVzdHJpY3RlZEJvdW5kZWRDb25jdXJyZW50UXVldWUKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIC8qKiBAYnJpZWYgQXJyYXkgb2YgZWxlbWVudHMsIHNlZW4gYXMgY3ljbGljIGJ1ZmZlci4gKi8KKyAgICAgIF9UcCogX01fYmFzZTsKKworICAgICAgLyoqIEBicmllZiBNYXhpbWFsIG51bWJlciBvZiBlbGVtZW50cyBjb250YWluZWQgYXQgdGhlIHNhbWUgdGltZS4gKi8KKyAgICAgIF9TZXF1ZW5jZUluZGV4IF9NX21heF9zaXplOworCisgICAgICAvKiogQGJyaWVmIEN5Y2xpYyBfX2JlZ2luIGFuZCBfX2VuZCBwb2ludGVycyBjb250YWluZWQgaW4gb25lCisgICAgICAgICAgYXRvbWljYWxseSBjaGFuZ2VhYmxlIHZhbHVlLiAqLworICAgICAgX0dMSUJDWFhfVk9MQVRJTEUgX0NBU2FibGUgX01fYm9yZGVyczsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBAYnJpZWYgQ29uc3RydWN0b3IuIE5vdCB0byBiZSBjYWxsZWQgY29uY3VycmVudCwgb2YgY291cnNlLgorICAgICAgICogIEBwYXJhbSBfX21heF9zaXplIE1heGltYWwgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIGNvbnRhaW5lZC4gKi8KKyAgICAgIF9SZXN0cmljdGVkQm91bmRlZENvbmN1cnJlbnRRdWV1ZShfU2VxdWVuY2VJbmRleCBfX21heF9zaXplKQorICAgICAgeworICAgICAgICBfTV9tYXhfc2l6ZSA9IF9fbWF4X3NpemU7CisgICAgICAgIF9NX2Jhc2UgPSBuZXcgX1RwW19fbWF4X3NpemVdOworICAgICAgICBfTV9ib3JkZXJzID0gX19lbmNvZGUyKDAsIDApOworI3ByYWdtYSBvbXAgZmx1c2gKKyAgICAgIH0KKworICAgICAgLyoqIEBicmllZiBEZXN0cnVjdG9yLiBOb3QgdG8gYmUgY2FsbGVkIGNvbmN1cnJlbnQsIG9mIGNvdXJzZS4gKi8KKyAgICAgIH5fUmVzdHJpY3RlZEJvdW5kZWRDb25jdXJyZW50UXVldWUoKQorICAgICAgeyBkZWxldGVbXSBfTV9iYXNlOyB9CisKKyAgICAgIC8qKiBAYnJpZWYgUHVzaGVzIG9uZSBlbGVtZW50IGludG8gdGhlIHF1ZXVlIGF0IHRoZSBmcm9udCBlbmQuCisgICAgICAgKiAgTXVzdCBub3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseSB3aXRoIHBvcF9mcm9udCgpLiAqLworICAgICAgdm9pZAorICAgICAgcHVzaF9mcm9udChjb25zdCBfVHAmIF9fdCkKKyAgICAgIHsKKyAgICAgICAgX0NBU2FibGUgX19mb3JtZXJfYm9yZGVycyA9IF9NX2JvcmRlcnM7CisgICAgICAgIGludCBfX2Zvcm1lcl9mcm9udCwgX19mb3JtZXJfYmFjazsKKyAgICAgICAgX19kZWNvZGUyKF9fZm9ybWVyX2JvcmRlcnMsIF9fZm9ybWVyX2Zyb250LCBfX2Zvcm1lcl9iYWNrKTsKKyAgICAgICAgKihfTV9iYXNlICsgX19mb3JtZXJfZnJvbnQgJSBfTV9tYXhfc2l6ZSkgPSBfX3Q7CisjaWYgX0dMSUJDWFhfQVNTRVJUSU9OUworICAgICAgICAvLyBPdGhlcndpc2U6IGZyb250IC0gYmFjayA+IF9NX21heF9zaXplIGV2ZW50dWFsbHkuCisgICAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVCgoKF9fZm9ybWVyX2Zyb250ICsgMSkgLSBfX2Zvcm1lcl9iYWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gX01fbWF4X3NpemUpOworI2VuZGlmCisgICAgICAgIF9fZmV0Y2hfYW5kX2FkZCgmX01fYm9yZGVycywgX19lbmNvZGUyKDEsIDApKTsKKyAgICAgIH0KKworICAgICAgLyoqIEBicmllZiBQb3BzIG9uZSBlbGVtZW50IGZyb20gdGhlIHF1ZXVlIGF0IHRoZSBmcm9udCBlbmQuCisgICAgICAgKiAgTXVzdCBub3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseSB3aXRoIHBvcF9mcm9udCgpLiAqLworICAgICAgYm9vbAorICAgICAgcG9wX2Zyb250KF9UcCYgX190KQorICAgICAgeworICAgICAgICBpbnQgX19mb3JtZXJfZnJvbnQsIF9fZm9ybWVyX2JhY2s7CisjcHJhZ21hIG9tcCBmbHVzaAorICAgICAgICBfX2RlY29kZTIoX01fYm9yZGVycywgX19mb3JtZXJfZnJvbnQsIF9fZm9ybWVyX2JhY2spOworICAgICAgICB3aGlsZSAoX19mb3JtZXJfZnJvbnQgPiBfX2Zvcm1lcl9iYWNrKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoYW5jZS4KKyAgICAgICAgICAgIF9DQVNhYmxlIF9fZm9ybWVyX2JvcmRlcnMgPSBfX2VuY29kZTIoX19mb3JtZXJfZnJvbnQsCisJCQkJCQkgIF9fZm9ybWVyX2JhY2spOworICAgICAgICAgICAgX0NBU2FibGUgX19uZXdfYm9yZGVycyA9IF9fZW5jb2RlMihfX2Zvcm1lcl9mcm9udCAtIDEsCisJCQkJCSAgICAgICBfX2Zvcm1lcl9iYWNrKTsKKyAgICAgICAgICAgIGlmIChfX2NvbXBhcmVfYW5kX3N3YXAoJl9NX2JvcmRlcnMsIF9fZm9ybWVyX2JvcmRlcnMsCisJCQkJICAgX19uZXdfYm9yZGVycykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfX3QgPSAqKF9NX2Jhc2UgKyAoX19mb3JtZXJfZnJvbnQgLSAxKSAlIF9NX21heF9zaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorI3ByYWdtYSBvbXAgZmx1c2gKKyAgICAgICAgICAgIF9fZGVjb2RlMihfTV9ib3JkZXJzLCBfX2Zvcm1lcl9mcm9udCwgX19mb3JtZXJfYmFjayk7CisgICAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIC8qKiBAYnJpZWYgUG9wcyBvbmUgZWxlbWVudCBmcm9tIHRoZSBxdWV1ZSBhdCB0aGUgZnJvbnQgZW5kLgorICAgICAgICogIE11c3Qgbm90IGJlIGNhbGxlZCBjb25jdXJyZW50bHkgd2l0aCBwb3BfZnJvbnQoKS4gKi8KKyAgICAgIGJvb2wKKyAgICAgIHBvcF9iYWNrKF9UcCYgX190KSAgICAgICAgLy9xdWV1ZSBiZWhhdmlvcgorICAgICAgeworICAgICAgICBpbnQgX19mb3JtZXJfZnJvbnQsIF9fZm9ybWVyX2JhY2s7CisjcHJhZ21hIG9tcCBmbHVzaAorICAgICAgICBfX2RlY29kZTIoX01fYm9yZGVycywgX19mb3JtZXJfZnJvbnQsIF9fZm9ybWVyX2JhY2spOworICAgICAgICB3aGlsZSAoX19mb3JtZXJfZnJvbnQgPiBfX2Zvcm1lcl9iYWNrKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoYW5jZS4KKyAgICAgICAgICAgIF9DQVNhYmxlIF9fZm9ybWVyX2JvcmRlcnMgPSBfX2VuY29kZTIoX19mb3JtZXJfZnJvbnQsCisJCQkJCQkgIF9fZm9ybWVyX2JhY2spOworICAgICAgICAgICAgX0NBU2FibGUgX19uZXdfYm9yZGVycyA9IF9fZW5jb2RlMihfX2Zvcm1lcl9mcm9udCwKKwkJCQkJICAgICAgIF9fZm9ybWVyX2JhY2sgKyAxKTsKKyAgICAgICAgICAgIGlmIChfX2NvbXBhcmVfYW5kX3N3YXAoJl9NX2JvcmRlcnMsIF9fZm9ybWVyX2JvcmRlcnMsCisJCQkJICAgX19uZXdfYm9yZGVycykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfX3QgPSAqKF9NX2Jhc2UgKyBfX2Zvcm1lcl9iYWNrICUgX01fbWF4X3NpemUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICB9CisjcHJhZ21hIG9tcCBmbHVzaAorICAgICAgICAgICAgX19kZWNvZGUyKF9NX2JvcmRlcnMsIF9fZm9ybWVyX2Zyb250LCBfX2Zvcm1lcl9iYWNrKTsKKyAgICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgfTsKK30gICAgICAgLy9uYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKKworI3VuZGVmIF9HTElCQ1hYX1ZPTEFUSUxFCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9RVUVVRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3F1aWNrc29ydC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9xdWlja3NvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc0Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9xdWlja3NvcnQuaApAQCAtMCwwICsxLDE3NiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL3F1aWNrc29ydC5oCisgKiAgQGJyaWVmIEltcGxlbWVudGF0aW9uIG9mIGEgdW5iYWxhbmNlZCBwYXJhbGxlbCBxdWlja3NvcnQgKGluLXBsYWNlKS4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEpvaGFubmVzIFNpbmdsZXIuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfUVVJQ0tTT1JUX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfUVVJQ0tTT1JUX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvcGFyYWxsZWwuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9wYXJ0aXRpb24uaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKiBAYnJpZWYgVW5iYWxhbmNlZCBxdWlja3NvcnQgZGl2aWRlIHN0ZXAuCisgICAqICBAcGFyYW0gX19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBzdWJzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2Ygc3Vic2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAqICBAcGFyYW0gX19waXZvdF9yYW5rIERlc2lyZWQgX19yYW5rIG9mIHRoZSBwaXZvdC4KKyAgICogIEBwYXJhbSBfX251bV9zYW1wbGVzIENob29zZSBwaXZvdCBmcm9tIHRoYXQgbWFueSBzYW1wbGVzLgorICAgKiAgQHBhcmFtIF9fbnVtX3RocmVhZHMgTnVtYmVyIG9mIHRocmVhZHMgdGhhdCBhcmUgYWxsb3dlZCB0byB3b3JrIG9uCisgICAqICB0aGlzIHBhcnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgX19wYXJhbGxlbF9zb3J0X3FzX2RpdmlkZShfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCQkgICAgICBfQ29tcGFyZSBfX2NvbXAsIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzCisJCQkgICAgICA8X1JBSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3Bpdm90X3JhbmssCisJCQkgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0cworCQkJICAgICAgPF9SQUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKwkJCSAgICAgIF9fbnVtX3NhbXBsZXMsIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19uID0gX19lbmQgLSBfX2JlZ2luOworICAgICAgX19udW1fc2FtcGxlcyA9IHN0ZDo6bWluKF9fbnVtX3NhbXBsZXMsIF9fbik7CisKKyAgICAgIC8vIEFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQsIHRvIGF2b2lkIGRlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICBfVmFsdWVUeXBlKiBfX3NhbXBsZXMgPSBzdGF0aWNfY2FzdDxfVmFsdWVUeXBlKj4KKwkoOjpvcGVyYXRvciBuZXcoX19udW1fc2FtcGxlcyAqIHNpemVvZihfVmFsdWVUeXBlKSkpOworCisgICAgICBmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX3MgPSAwOyBfX3MgPCBfX251bV9zYW1wbGVzOyArK19fcykKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2luZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPgorCSAgICAoX19zKSAqIF9fbiAvIF9fbnVtX3NhbXBsZXM7CisgICAgICAgICAgOjpuZXcoJihfX3NhbXBsZXNbX19zXSkpIF9WYWx1ZVR5cGUoX19iZWdpbltfX2luZGV4XSk7CisgICAgICAgIH0KKworICAgICAgX19nbnVfc2VxdWVudGlhbDo6c29ydChfX3NhbXBsZXMsIF9fc2FtcGxlcyArIF9fbnVtX3NhbXBsZXMsIF9fY29tcCk7CisKKyAgICAgIF9WYWx1ZVR5cGUmIF9fcGl2b3QgPSBfX3NhbXBsZXNbX19waXZvdF9yYW5rICogX19udW1fc2FtcGxlcyAvIF9fbl07CisKKyAgICAgIF9fZ251X3BhcmFsbGVsOjpfX2JpbmRlcjJuZDxfQ29tcGFyZSwgX1ZhbHVlVHlwZSwgX1ZhbHVlVHlwZSwgYm9vbD4KKyAgICAgICAgX19wcmVkKF9fY29tcCwgX19waXZvdCk7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19zcGxpdCA9IF9fcGFyYWxsZWxfcGFydGl0aW9uKF9fYmVnaW4sIF9fZW5kLAorCQkJCQkJICAgICBfX3ByZWQsIF9fbnVtX3RocmVhZHMpOworCisgICAgICBmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX3MgPSAwOyBfX3MgPCBfX251bV9zYW1wbGVzOyArK19fcykKKwlfX3NhbXBsZXNbX19zXS5+X1ZhbHVlVHlwZSgpOworICAgICAgOjpvcGVyYXRvciBkZWxldGUoX19zYW1wbGVzKTsKKworICAgICAgcmV0dXJuIF9fc3BsaXQ7CisgICAgfQorCisgIC8qKiBAYnJpZWYgVW5iYWxhbmNlZCBxdWlja3NvcnQgY29ucXVlciBzdGVwLgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2Ygc3Vic2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIHN1YnNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiAgQHBhcmFtIF9fbnVtX3RocmVhZHMgTnVtYmVyIG9mIHRocmVhZHMgdGhhdCBhcmUgYWxsb3dlZCB0byB3b3JrIG9uCisgICAqICB0aGlzIHBhcnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19wYXJhbGxlbF9zb3J0X3FzX2NvbnF1ZXIoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorCQkJICAgICAgIF9Db21wYXJlIF9fY29tcCwKKwkJCSAgICAgICBfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcykKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgaWYgKF9fbnVtX3RocmVhZHMgPD0gMSkKKyAgICAgICAgeworICAgICAgICAgIF9fZ251X3NlcXVlbnRpYWw6OnNvcnQoX19iZWdpbiwgX19lbmQsIF9fY29tcCk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX24gPSBfX2VuZCAtIF9fYmVnaW4sIF9fcGl2b3RfcmFuazsKKworICAgICAgaWYgKF9fbiA8PSAxKQorICAgICAgICByZXR1cm47CisKKyAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzX2xlZnQ7CisKKyAgICAgIGlmICgoX19udW1fdGhyZWFkcyAlIDIpID09IDEpCisgICAgICAgIF9fbnVtX3RocmVhZHNfbGVmdCA9IF9fbnVtX3RocmVhZHMgLyAyICsgMTsKKyAgICAgIGVsc2UKKyAgICAgICAgX19udW1fdGhyZWFkc19sZWZ0ID0gX19udW1fdGhyZWFkcyAvIDI7CisKKyAgICAgIF9fcGl2b3RfcmFuayA9IF9fbiAqIF9fbnVtX3RocmVhZHNfbGVmdCAvIF9fbnVtX3RocmVhZHM7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3NwbGl0ID0gX19wYXJhbGxlbF9zb3J0X3FzX2RpdmlkZQorCShfX2JlZ2luLCBfX2VuZCwgX19jb21wLCBfX3Bpdm90X3JhbmssCisJIF9TZXR0aW5nczo6Z2V0KCkuc29ydF9xc19udW1fc2FtcGxlc19wcmVzZXQsIF9fbnVtX3RocmVhZHMpOworCisjcHJhZ21hIG9tcCBwYXJhbGxlbCBzZWN0aW9ucyBudW1fdGhyZWFkcygyKQorICAgICAgeworI3ByYWdtYSBvbXAgc2VjdGlvbgorICAgICAgICBfX3BhcmFsbGVsX3NvcnRfcXNfY29ucXVlcihfX2JlZ2luLCBfX2JlZ2luICsgX19zcGxpdCwKKwkJCQkgICBfX2NvbXAsIF9fbnVtX3RocmVhZHNfbGVmdCk7CisjcHJhZ21hIG9tcCBzZWN0aW9uCisgICAgICAgIF9fcGFyYWxsZWxfc29ydF9xc19jb25xdWVyKF9fYmVnaW4gKyBfX3NwbGl0LCBfX2VuZCwKKwkJCQkgICBfX2NvbXAsIF9fbnVtX3RocmVhZHMgLSBfX251bV90aHJlYWRzX2xlZnQpOworICAgICAgfQorICAgIH0KKworCisgIC8qKiBAYnJpZWYgVW5iYWxhbmNlZCBxdWlja3NvcnQgbWFpbiBjYWxsLgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIGlucHV0IHNlcXVlbmNlLCBpZ25vcmVkLgorICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiAgQHBhcmFtIF9fbnVtX3RocmVhZHMgTnVtYmVyIG9mIHRocmVhZHMgdGhhdCBhcmUgYWxsb3dlZCB0byB3b3JrIG9uCisgICAqICB0aGlzIHBhcnQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICB2b2lkCisgICAgX19wYXJhbGxlbF9zb3J0X3FzKF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKwkJICAgICAgIF9Db21wYXJlIF9fY29tcCwKKwkJICAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19uKQorCisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SQUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbiA9IF9fZW5kIC0gX19iZWdpbjsKKworICAgICAgLy8gQXQgbGVhc3Qgb25lIGVsZW1lbnQgcGVyIHByb2Nlc3Nvci4KKyAgICAgIGlmIChfX251bV90aHJlYWRzID4gX19uKQorICAgICAgICBfX251bV90aHJlYWRzID0gc3RhdGljX2Nhc3Q8X1RocmVhZEluZGV4PihfX24pOworCisgICAgICBfX3BhcmFsbGVsX3NvcnRfcXNfY29ucXVlcigKKyAgICAgICAgX19iZWdpbiwgX19iZWdpbiArIF9fbiwgX19jb21wLCBfX251bV90aHJlYWRzKTsKKyAgICB9CisKK30gLy9uYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX1FVSUNLU09SVF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3JhbmRvbV9udW1iZXIuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvcmFuZG9tX251bWJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YWViOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3JhbmRvbV9udW1iZXIuaApAQCAtMCwwICsxLDEyNSBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL3JhbmRvbV9udW1iZXIuaAorICogIEBicmllZiBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciBiYXNlZCBvbiB0aGUgTWVyc2VubmUgdHdpc3Rlci4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEpvaGFubmVzIFNpbmdsZXIuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfUkFORE9NX05VTUJFUl9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX1JBTkRPTV9OVU1CRVJfSCAxCisKKyNpbmNsdWRlIDxwYXJhbGxlbC90eXBlcy5oPgorI2luY2x1ZGUgPHRyMS9yYW5kb20+CisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKK3sKKyAgLyoqIEBicmllZiBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciwgYmFzZWQgb24gdGhlIE1lcnNlbm5lIHR3aXN0ZXIuICovCisgIGNsYXNzIF9SYW5kb21OdW1iZXIKKyAgeworICBwcml2YXRlOgorICAgIHN0ZDo6dHIxOjptdDE5OTM3ICAgX01fbXQ7CisgICAgdWludDY0X3QgICAgICAgICAgICBfTV9zdXByZW11bTsKKyAgICB1aW50NjRfdCAgICAgICAgICAgIF9NX3JhbmRfc3VwOworICAgIGRvdWJsZSAgICAgICAgICAgICAgX01fc3VwcmVtdW1fcmVjaXByb2NhbDsKKyAgICBkb3VibGUgICAgICAgICAgICAgIF9NX3JhbmRfc3VwX3JlY2lwcm9jYWw7CisKKyAgICAvLyBBc3N1bWVkIHRvIGJlIHR3aWNlIGFzIGxvbmcgYXMgdGhlIHVzdWFsIHJhbmRvbSBudW1iZXIuCisgICAgdWludDY0X3QgICAgICAgICAgICAgIF9fY2FjaGU7CisKKyAgICAvLyBCaXQgcmVzdWx0cy4KKyAgICBpbnQgX19iaXRzX2xlZnQ7CisgICAgCisgICAgc3RhdGljIHVpbnQzMl90CisgICAgX19zY2FsZV9kb3duKHVpbnQ2NF90IF9feCwKKyNpZiBfR0xJQkNYWF9TQ0FMRV9ET1dOX0ZQVQorICAgICAgICAgICAgICAgdWludDY0X3QgLypfTV9zdXByZW11bSovLCBkb3VibGUgX01fc3VwcmVtdW1fcmVjaXByb2NhbCkKKyNlbHNlCisgICAgICAgICAgICAgICB1aW50NjRfdCBfTV9zdXByZW11bSwgZG91YmxlIC8qX01fc3VwcmVtdW1fcmVjaXByb2NhbCovKQorI2VuZGlmCisgICAgICAgIHsKKyNpZiBfR0xJQkNYWF9TQ0FMRV9ET1dOX0ZQVQorICAgICAgICAgIHJldHVybiB1aW50MzJfdChfX3ggKiBfTV9zdXByZW11bV9yZWNpcHJvY2FsKTsKKyNlbHNlCisgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90PihfX3ggJSBfTV9zdXByZW11bSk7CisjZW5kaWYKKyAgICAgICAgfQorCisgIHB1YmxpYzoKKyAgICAvKiogQGJyaWVmIERlZmF1bHQgY29uc3RydWN0b3IuIFNlZWQgd2l0aCAwLiAqLworICAgIF9SYW5kb21OdW1iZXIoKQorICAgIDogX01fbXQoMCksIF9NX3N1cHJlbXVtKDB4MTAwMDAwMDAwVUxMKSwKKyAgICAgIF9NX3JhbmRfc3VwKDFVTEwgPDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46OmRpZ2l0cyksCisgICAgICBfTV9zdXByZW11bV9yZWNpcHJvY2FsKGRvdWJsZShfTV9zdXByZW11bSkgLyBkb3VibGUoX01fcmFuZF9zdXApKSwKKyAgICAgIF9NX3JhbmRfc3VwX3JlY2lwcm9jYWwoMS4wIC8gZG91YmxlKF9NX3JhbmRfc3VwKSksCisgICAgICBfX2NhY2hlKDApLCBfX2JpdHNfbGVmdCgwKSB7IH0KKworICAgIC8qKiBAYnJpZWYgQ29uc3RydWN0b3IuCisgICAgICogIEBwYXJhbSBfX3NlZWQgUmFuZG9tIF9fc2VlZC4KKyAgICAgKiAgQHBhcmFtIF9NX3N1cHJlbXVtIEdlbmVyYXRlIGludGVnZXIgcmFuZG9tIG51bWJlcnMgaW4gdGhlCisgICAgICogICAgICAgICAgICAgICAgICBpbnRlcnZhbCBAYyBbMCxfTV9zdXByZW11bSkuICovCisgICAgX1JhbmRvbU51bWJlcih1aW50MzJfdCBfX3NlZWQsIHVpbnQ2NF90IF9NX3N1cHJlbXVtID0gMHgxMDAwMDAwMDBVTEwpCisgICAgOiBfTV9tdChfX3NlZWQpLCBfTV9zdXByZW11bShfTV9zdXByZW11bSksCisgICAgICBfTV9yYW5kX3N1cCgxVUxMIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjpkaWdpdHMpLAorICAgICAgX01fc3VwcmVtdW1fcmVjaXByb2NhbChkb3VibGUoX01fc3VwcmVtdW0pIC8gZG91YmxlKF9NX3JhbmRfc3VwKSksCisgICAgICBfTV9yYW5kX3N1cF9yZWNpcHJvY2FsKDEuMCAvIGRvdWJsZShfTV9yYW5kX3N1cCkpLAorICAgICAgX19jYWNoZSgwKSwgX19iaXRzX2xlZnQoMCkgeyB9CisKKyAgICAvKiogQGJyaWVmIEdlbmVyYXRlIHVuc2lnbmVkIHJhbmRvbSAzMi1iaXQgaW50ZWdlci4gKi8KKyAgICB1aW50MzJfdAorICAgIG9wZXJhdG9yKCkoKQorICAgIHsgcmV0dXJuIF9fc2NhbGVfZG93bihfTV9tdCgpLCBfTV9zdXByZW11bSwgX01fc3VwcmVtdW1fcmVjaXByb2NhbCk7IH0KKworICAgIC8qKiBAYnJpZWYgR2VuZXJhdGUgdW5zaWduZWQgcmFuZG9tIDMyLWJpdCBpbnRlZ2VyIGluIHRoZQorICAgICAgICBpbnRlcnZhbCBAYyBbMCxsb2NhbF9zdXByZW11bSkuICovCisgICAgdWludDMyX3QKKyAgICBvcGVyYXRvcigpKHVpbnQ2NF90IGxvY2FsX3N1cHJlbXVtKQorICAgIHsKKyAgICAgIHJldHVybiBfX3NjYWxlX2Rvd24oX01fbXQoKSwgbG9jYWxfc3VwcmVtdW0sCisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUobG9jYWxfc3VwcmVtdW0gKiBfTV9yYW5kX3N1cF9yZWNpcHJvY2FsKSk7CisgICAgfQorCisgICAgLyoqIEBicmllZiBHZW5lcmF0ZSBhIG51bWJlciBvZiByYW5kb20gYml0cywgcnVuLXRpbWUgcGFyYW1ldGVyLgorICAgICAqICBAcGFyYW0gX19iaXRzIE51bWJlciBvZiBiaXRzIHRvIGdlbmVyYXRlLiAqLworICAgIHVuc2lnbmVkIGxvbmcKKyAgICBfX2dlbnJhbmRfYml0cyhpbnQgX19iaXRzKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgX19yZXMgPSBfX2NhY2hlICYgKCgxIDw8IF9fYml0cykgLSAxKTsKKyAgICAgIF9fY2FjaGUgPSBfX2NhY2hlID4+IF9fYml0czsKKyAgICAgIF9fYml0c19sZWZ0IC09IF9fYml0czsKKyAgICAgIGlmIChfX2JpdHNfbGVmdCA8IDMyKQorICAgICAgICB7CisgICAgICAgICAgX19jYWNoZSB8PSAoKHVpbnQ2NF90KF9NX210KCkpKSA8PCBfX2JpdHNfbGVmdCk7CisgICAgICAgICAgX19iaXRzX2xlZnQgKz0gMzI7CisgICAgICAgIH0KKyAgICAgIHJldHVybiBfX3JlczsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wYXJhbGxlbAorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfUkFORE9NX05VTUJFUl9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3JhbmRvbV9zaHVmZmxlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3JhbmRvbV9zaHVmZmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlZWZjOQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvcmFuZG9tX3NodWZmbGUuaApAQCAtMCwwICsxLDUzMyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL3JhbmRvbV9zaHVmZmxlLmgKKyAqICBAYnJpZWYgUGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2Ygc3RkOjpyYW5kb21fc2h1ZmZsZSgpLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgSm9oYW5uZXMgU2luZ2xlci4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9SQU5ET01fU0hVRkZMRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX1JBTkRPTV9TSFVGRkxFX0ggMQorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGJpdHMvc3RsX251bWVyaWMuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9wYXJhbGxlbC5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3JhbmRvbV9udW1iZXIuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKiBAYnJpZWYgVHlwZSB0byBob2xkIHRoZSBpbmRleCBvZiBhIGJpbi4KKyAgICAqCisgICAgKiAgU2luY2UgbWFueSB2YXJpYWJsZXMgb2YgdGhpcyB0eXBlIGFyZSBhbGxvY2F0ZWQsIGl0IHNob3VsZCBiZQorICAgICogIGNob3NlbiBhcyBzbWFsbCBhcyBwb3NzaWJsZS4KKyAgICAqLworICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9CaW5JbmRleDsKKworICAvKiogQGJyaWVmIERhdGEga25vd24gdG8gZXZlcnkgdGhyZWFkIHBhcnRpY2lwYXRpbmcgaW4KKyAgICAgIF9fZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX3JhbmRvbV9zaHVmZmxlKCkuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXI+CisgICAgc3RydWN0IF9EUmFuZG9tU2h1ZmZsaW5nR2xvYmFsRGF0YQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICAvKiogQGJyaWVmIEJlZ2luIGl0ZXJhdG9yIG9mIHRoZSBfX3NvdXJjZS4gKi8KKyAgICAgIF9SQUl0ZXImIF9NX3NvdXJjZTsKKworICAgICAgLyoqIEBicmllZiBUZW1wb3JhcnkgYXJyYXlzIGZvciBlYWNoIHRocmVhZC4gKi8KKyAgICAgIF9WYWx1ZVR5cGUqKiBfTV90ZW1wb3JhcmllczsKKworICAgICAgLyoqIEBicmllZiBUd28tZGltZW5zaW9uYWwgYXJyYXkgdG8gaG9sZCB0aGUgdGhyZWFkLWJpbiBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogIERpbWVuc2lvbnMgKF9NX251bV90aHJlYWRzICsgMSkgX194IChfTV9udW1fYmlucyArIDEpLiAqLworICAgICAgX0RpZmZlcmVuY2VUeXBlKiogX01fZGlzdDsKKworICAgICAgLyoqIEBicmllZiBTdGFydCBpbmRleGVzIG9mIHRoZSB0aHJlYWRzJyBfX2NodW5rcy4gKi8KKyAgICAgIF9EaWZmZXJlbmNlVHlwZSogX01fc3RhcnRzOworCisgICAgICAvKiogQGJyaWVmIE51bWJlciBvZiB0aGUgdGhyZWFkIHRoYXQgd2lsbCBmdXJ0aGVyIHByb2Nlc3MgdGhlCisgICAgICAgICAgY29ycmVzcG9uZGluZyBiaW4uICovCisgICAgICBfVGhyZWFkSW5kZXgqIF9NX2Jpbl9wcm9jOworCisgICAgICAvKiogQGJyaWVmIE51bWJlciBvZiBiaW5zIHRvIGRpc3RyaWJ1dGUgdG8uICovCisgICAgICBpbnQgX01fbnVtX2JpbnM7CisKKyAgICAgIC8qKiBAYnJpZWYgTnVtYmVyIG9mIGJpdHMgbmVlZGVkIHRvIGFkZHJlc3MgdGhlIGJpbnMuICovCisgICAgICBpbnQgX01fbnVtX2JpdHM7CisKKyAgICAgIC8qKiBAYnJpZWYgQ29uc3RydWN0b3IuICovCisgICAgICBfRFJhbmRvbVNodWZmbGluZ0dsb2JhbERhdGEoX1JBSXRlciYgX19zb3VyY2UpCisgICAgICA6IF9NX3NvdXJjZShfX3NvdXJjZSkgeyB9CisgICAgfTsKKworICAvKiogQGJyaWVmIExvY2FsIGRhdGEgZm9yIGEgdGhyZWFkIHBhcnRpY2lwYXRpbmcgaW4KKyAgICAgIF9fZ251X3BhcmFsbGVsOjpfX3BhcmFsbGVsX3JhbmRvbV9zaHVmZmxlKCkuCisgICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICBzdHJ1Y3QgX0RSU1NvcnRlclBVCisgICAgeworICAgICAgLyoqIEBicmllZiBOdW1iZXIgb2YgdGhyZWFkcyBwYXJ0aWNpcGF0aW5nIGluIHRvdGFsLiAqLworICAgICAgaW50IF9NX251bV90aHJlYWRzOworCisgICAgICAvKiogQGJyaWVmIEJlZ2luIGluZGV4IGZvciBiaW5zIHRha2VuIGNhcmUgb2YgYnkgdGhpcyB0aHJlYWQuICovCisgICAgICBfQmluSW5kZXggX01fYmluc19iZWdpbjsKKworICAgICAgLyoqIEBicmllZiBFbmQgaW5kZXggZm9yIGJpbnMgdGFrZW4gY2FyZSBvZiBieSB0aGlzIHRocmVhZC4gKi8KKyAgICAgIF9CaW5JbmRleCBfX2JpbnNfZW5kOworCisgICAgICAvKiogQGJyaWVmIFJhbmRvbSBfTV9zZWVkIGZvciB0aGlzIHRocmVhZC4gKi8KKyAgICAgIHVpbnQzMl90IF9NX3NlZWQ7CisKKyAgICAgIC8qKiBAYnJpZWYgUG9pbnRlciB0byBnbG9iYWwgZGF0YS4gKi8KKyAgICAgIF9EUmFuZG9tU2h1ZmZsaW5nR2xvYmFsRGF0YTxfUkFJdGVyPiogX01fc2Q7CisgICAgfTsKKworICAvKiogQGJyaWVmIEdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBpbiBAYyBbMCwyXl9fbG9ncCkuCisgICAgKiAgQHBhcmFtIF9fbG9ncCBMb2dhcml0aG0gKGJhc2lzIDIpIG9mIHRoZSB1cHBlciByYW5nZSBfX2JvdW5kLgorICAgICogIEBwYXJhbSBfX3JuZyBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byB1c2UuCisgICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICBpbmxpbmUgaW50CisgICAgX19yYW5kb21fbnVtYmVyX3BvdzIoaW50IF9fbG9ncCwgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19ybmcpCisgICAgeyByZXR1cm4gX19ybmcuX19nZW5yYW5kX2JpdHMoX19sb2dwKTsgfQorCisgIC8qKiBAYnJpZWYgUmFuZG9tIHNodWZmbGUgY29kZSBleGVjdXRlZCBieSBlYWNoIHRocmVhZC4KKyAgICAqICBAcGFyYW0gX19wdXMgQXJyYXkgb2YgdGhyZWFkLWxvY2FsIGRhdGEgcmVjb3Jkcy4gKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICB2b2lkIAorICAgIF9fcGFyYWxsZWxfcmFuZG9tX3NodWZmbGVfZHJzX3B1KF9EUlNTb3J0ZXJQVTxfUkFJdGVyLAorCQkJCSAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4qIF9fcHVzKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICBfVGhyZWFkSW5kZXggX19pYW0gPSBvbXBfZ2V0X3RocmVhZF9udW0oKTsKKyAgICAgIF9EUlNTb3J0ZXJQVTxfUkFJdGVyLCBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPiogX19kID0gJl9fcHVzW19faWFtXTsKKyAgICAgIF9EUmFuZG9tU2h1ZmZsaW5nR2xvYmFsRGF0YTxfUkFJdGVyPiogX19zZCA9IF9fZC0+X01fc2Q7CisKKyAgICAgIC8vIEluZGV4aW5nOiBfTV9kaXN0W2Jpbl1bcHJvY2Vzc29yXQorICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbGVuZ3RoID0gKF9fc2QtPl9NX3N0YXJ0c1tfX2lhbSArIDFdCisJCQkJICAtIF9fc2QtPl9NX3N0YXJ0c1tfX2lhbV0pOworICAgICAgX0JpbkluZGV4KiBfX29yYWNsZXMgPSBuZXcgX0JpbkluZGV4W19fbGVuZ3RoXTsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSogX19kaXN0ID0gbmV3IF9EaWZmZXJlbmNlVHlwZVtfX3NkLT5fTV9udW1fYmlucyArIDFdOworICAgICAgX0JpbkluZGV4KiBfX2Jpbl9wcm9jID0gbmV3IF9CaW5JbmRleFtfX3NkLT5fTV9udW1fYmluc107CisgICAgICBfVmFsdWVUeXBlKiogX190ZW1wb3JhcmllcyA9IG5ldyBfVmFsdWVUeXBlKltfX2QtPl9NX251bV90aHJlYWRzXTsKKworICAgICAgLy8gQ29tcHV0ZSBvcmFjbGVzIGFuZCBjb3VudCBhcHBlYXJhbmNlcy4KKyAgICAgIGZvciAoX0JpbkluZGV4IF9fYiA9IDA7IF9fYiA8IF9fc2QtPl9NX251bV9iaW5zICsgMTsgKytfX2IpCisJX19kaXN0W19fYl0gPSAwOworICAgICAgaW50IF9fbnVtX2JpdHMgPSBfX3NkLT5fTV9udW1fYml0czsKKworICAgICAgX1JhbmRvbU51bWJlciBfX3JuZyhfX2QtPl9NX3NlZWQpOworCisgICAgICAvLyBGaXJzdCBtYWluIGxvb3AuCisgICAgICBmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX2kgPSAwOyBfX2kgPCBfX2xlbmd0aDsgKytfX2kpCisJeworICAgICAgICAgIF9CaW5JbmRleCBfX29yYWNsZSA9IF9fcmFuZG9tX251bWJlcl9wb3cyKF9fbnVtX2JpdHMsIF9fcm5nKTsKKyAgICAgICAgICBfX29yYWNsZXNbX19pXSA9IF9fb3JhY2xlOworCisgICAgICAgICAgLy8gVG8gYWxsb3cgcHJlZml4IChwYXJ0aWFsKSBzdW0uCisgICAgICAgICAgKysoX19kaXN0W19fb3JhY2xlICsgMV0pOworCX0KKworICAgICAgZm9yIChfQmluSW5kZXggX19iID0gMDsgX19iIDwgX19zZC0+X01fbnVtX2JpbnMgKyAxOyArK19fYikKKwlfX3NkLT5fTV9kaXN0W19fYl1bX19pYW0gKyAxXSA9IF9fZGlzdFtfX2JdOworCisjICAgICBwcmFnbWEgb21wIGJhcnJpZXIKKworIyAgICAgcHJhZ21hIG9tcCBzaW5nbGUKKyAgICAgIHsKKwkvLyBTdW0gdXAgYmlucywgX19zZC0+X01fZGlzdFtfX3MgKyAxXVtfX2QtPl9NX251bV90aHJlYWRzXSBub3cKKwkvLyBjb250YWlucyB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIGJpbiBfX3MKKwlmb3IgKF9CaW5JbmRleCBfX3MgPSAwOyBfX3MgPCBfX3NkLT5fTV9udW1fYmluczsgKytfX3MpCisgICAgICAgICAgX19nbnVfc2VxdWVudGlhbDo6cGFydGlhbF9zdW0oX19zZC0+X01fZGlzdFtfX3MgKyAxXSwKKwkJCQkJX19zZC0+X01fZGlzdFtfX3MgKyAxXQorCQkJCQkrIF9fZC0+X01fbnVtX3RocmVhZHMgKyAxLAorCQkJCQlfX3NkLT5fTV9kaXN0W19fcyArIDFdKTsKKyAgICAgIH0KKworIyAgICAgcHJhZ21hIG9tcCBiYXJyaWVyCisKKyAgICAgIF9TZXF1ZW5jZUluZGV4IF9fb2Zmc2V0ID0gMCwgX19nbG9iYWxfb2Zmc2V0ID0gMDsKKyAgICAgIGZvciAoX0JpbkluZGV4IF9fcyA9IDA7IF9fcyA8IF9fZC0+X01fYmluc19iZWdpbjsgKytfX3MpCisJX19nbG9iYWxfb2Zmc2V0ICs9IF9fc2QtPl9NX2Rpc3RbX19zICsgMV1bX19kLT5fTV9udW1fdGhyZWFkc107CisKKyMgICAgIHByYWdtYSBvbXAgYmFycmllcgorCisgICAgICBmb3IgKF9CaW5JbmRleCBfX3MgPSBfX2QtPl9NX2JpbnNfYmVnaW47IF9fcyA8IF9fZC0+X19iaW5zX2VuZDsgKytfX3MpCisJeworICAgICAgICAgIGZvciAoaW50IF9fdCA9IDA7IF9fdCA8IF9fZC0+X01fbnVtX3RocmVhZHMgKyAxOyArK19fdCkKKyAgICAgICAgICAgIF9fc2QtPl9NX2Rpc3RbX19zICsgMV1bX190XSArPSBfX29mZnNldDsKKyAgICAgICAgICBfX29mZnNldCA9IF9fc2QtPl9NX2Rpc3RbX19zICsgMV1bX19kLT5fTV9udW1fdGhyZWFkc107CisJfQorCisgICAgICBfX3NkLT5fTV90ZW1wb3Jhcmllc1tfX2lhbV0gPSBzdGF0aWNfY2FzdDxfVmFsdWVUeXBlKj4KKwkoOjpvcGVyYXRvciBuZXcoc2l6ZW9mKF9WYWx1ZVR5cGUpICogX19vZmZzZXQpKTsKKworIyAgICAgcHJhZ21hIG9tcCBiYXJyaWVyCisKKyAgICAgIC8vIERyYXcgbG9jYWwgY29waWVzIHRvIGF2b2lkIGZhbHNlIHNoYXJpbmcuCisgICAgICBmb3IgKF9CaW5JbmRleCBfX2IgPSAwOyBfX2IgPCBfX3NkLT5fTV9udW1fYmlucyArIDE7ICsrX19iKQorCV9fZGlzdFtfX2JdID0gX19zZC0+X01fZGlzdFtfX2JdW19faWFtXTsKKyAgICAgIGZvciAoX0JpbkluZGV4IF9fYiA9IDA7IF9fYiA8IF9fc2QtPl9NX251bV9iaW5zOyArK19fYikKKwlfX2Jpbl9wcm9jW19fYl0gPSBfX3NkLT5fTV9iaW5fcHJvY1tfX2JdOworICAgICAgZm9yIChfVGhyZWFkSW5kZXggX190ID0gMDsgX190IDwgX19kLT5fTV9udW1fdGhyZWFkczsgKytfX3QpCisJX190ZW1wb3Jhcmllc1tfX3RdID0gX19zZC0+X01fdGVtcG9yYXJpZXNbX190XTsKKworICAgICAgX1JBSXRlciBfX3NvdXJjZSA9IF9fc2QtPl9NX3NvdXJjZTsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX3N0YXJ0ID0gX19zZC0+X01fc3RhcnRzW19faWFtXTsKKworICAgICAgLy8gRGlzdHJpYnV0ZSBhY2NvcmRpbmcgdG8gb3JhY2xlcywgc2Vjb25kIG1haW4gbG9vcC4KKyAgICAgIGZvciAoX0RpZmZlcmVuY2VUeXBlIF9faSA9IDA7IF9faSA8IF9fbGVuZ3RoOyArK19faSkKKwl7CisgICAgICAgICAgX0JpbkluZGV4IF9fdGFyZ2V0X2JpbiA9IF9fb3JhY2xlc1tfX2ldOworICAgICAgICAgIF9UaHJlYWRJbmRleCBfX3RhcmdldF9wID0gX19iaW5fcHJvY1tfX3RhcmdldF9iaW5dOworCisgICAgICAgICAgLy8gTGFzdCBjb2x1bW4gW19fZC0+X01fbnVtX3RocmVhZHNdIHN0YXlzIHVuY2hhbmdlZC4KKwkgIDo6bmV3KCYoX190ZW1wb3Jhcmllc1tfX3RhcmdldF9wXVtfX2Rpc3RbX190YXJnZXRfYmluICsgMV0rK10pKQorICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19zb3VyY2UgKyBfX2kgKyBfX3N0YXJ0KSk7CisJfQorCisgICAgICBkZWxldGVbXSBfX29yYWNsZXM7CisgICAgICBkZWxldGVbXSBfX2Rpc3Q7CisgICAgICBkZWxldGVbXSBfX2Jpbl9wcm9jOworICAgICAgZGVsZXRlW10gX190ZW1wb3JhcmllczsKKworIyAgICAgcHJhZ21hIG9tcCBiYXJyaWVyCisKKyAgICAgIC8vIFNodWZmbGUgYmlucyBpbnRlcm5hbGx5LgorICAgICAgZm9yIChfQmluSW5kZXggX19iID0gX19kLT5fTV9iaW5zX2JlZ2luOyBfX2IgPCBfX2QtPl9fYmluc19lbmQ7ICsrX19iKQorCXsKKyAgICAgICAgICBfVmFsdWVUeXBlKiBfX2JlZ2luID0KKwkgICAgKF9fc2QtPl9NX3RlbXBvcmFyaWVzW19faWFtXQorCSAgICAgKyAoX19iID09IF9fZC0+X01fYmluc19iZWdpbgorCQk/IDAgOiBfX3NkLT5fTV9kaXN0W19fYl1bX19kLT5fTV9udW1fdGhyZWFkc10pKSwKKwkgICAgKl9fZW5kID0gKF9fc2QtPl9NX3RlbXBvcmFyaWVzW19faWFtXQorCQkgICAgICArIF9fc2QtPl9NX2Rpc3RbX19iICsgMV1bX19kLT5fTV9udW1fdGhyZWFkc10pOworCisgICAgICAgICAgX19zZXF1ZW50aWFsX3JhbmRvbV9zaHVmZmxlKF9fYmVnaW4sIF9fZW5kLCBfX3JuZyk7CisgICAgICAgICAgc3RkOjpjb3B5KF9fYmVnaW4sIF9fZW5kLCBfX3NkLT5fTV9zb3VyY2UgKyBfX2dsb2JhbF9vZmZzZXQKKwkJICAgICsgKF9fYiA9PSBfX2QtPl9NX2JpbnNfYmVnaW4KKwkJICAgICAgID8gMCA6IF9fc2QtPl9NX2Rpc3RbX19iXVtfX2QtPl9NX251bV90aHJlYWRzXSkpOworCX0KKworICAgICAgZm9yIChfU2VxdWVuY2VJbmRleCBfX2kgPSAwOyBfX2kgPCBfX29mZnNldDsgKytfX2kpCisJX19zZC0+X01fdGVtcG9yYXJpZXNbX19pYW1dW19faV0ufl9WYWx1ZVR5cGUoKTsKKyAgICAgIDo6b3BlcmF0b3IgZGVsZXRlKF9fc2QtPl9NX3RlbXBvcmFyaWVzW19faWFtXSk7CisgICAgfQorCisgIC8qKiBAYnJpZWYgUm91bmQgdXAgdG8gdGhlIG5leHQgZ3JlYXRlciBwb3dlciBvZiAyLgorICAgICogIEBwYXJhbSBfX3ggX0ludGVnZXIgdG8gcm91bmQgdXAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcCAKKyAgICBfX3JvdW5kX3VwX3RvX3BvdzIoX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX194IDw9IDEpCisJcmV0dXJuIDE7CisgICAgICBlbHNlCisJcmV0dXJuIChfVHApMSA8PCAoX19yZF9sb2cyKF9feCAtIDEpICsgMSk7CisgICAgfQorCisgIC8qKiBAYnJpZWYgTWFpbiBwYXJhbGxlbCByYW5kb20gc2h1ZmZsZSBzdGVwLgorICAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIHNlcXVlbmNlLgorICAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2Ygc2VxdWVuY2UuCisgICAgKiAgQHBhcmFtIF9fbiBMZW5ndGggb2Ygc2VxdWVuY2UuCisgICAgKiAgQHBhcmFtIF9fbnVtX3RocmVhZHMgTnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlLgorICAgICogIEBwYXJhbSBfX3JuZyBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byB1c2UuCisgICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICB2b2lkCisgICAgX19wYXJhbGxlbF9yYW5kb21fc2h1ZmZsZV9kcnMoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorCQkJCSAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHMKKwkJCQkgIDxfUkFJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKKwkJCQkgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzLAorCQkJCSAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19ybmcpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19uKQorCisgICAgICBjb25zdCBfU2V0dGluZ3MmIF9fcyA9IF9TZXR0aW5nczo6Z2V0KCk7CisKKyAgICAgIGlmIChfX251bV90aHJlYWRzID4gX19uKQorCV9fbnVtX3RocmVhZHMgPSBzdGF0aWNfY2FzdDxfVGhyZWFkSW5kZXg+KF9fbik7CisKKyAgICAgIF9CaW5JbmRleCBfX251bV9iaW5zLCBfX251bV9iaW5zX2NhY2hlOworCisjaWYgX0dMSUJDWFhfUkFORE9NX1NIVUZGTEVfQ09OU0lERVJfTDEKKyAgICAgIC8vIFRyeSB0aGUgTDEgY2FjaGUgZmlyc3QuCisKKyAgICAgIC8vIE11c3QgZml0IGludG8gTDEuCisgICAgICBfX251bV9iaW5zX2NhY2hlID0KKwlzdGQ6Om1heDxfRGlmZmVyZW5jZVR5cGU+KDEsIF9fbiAvIChfX3MuTDFfY2FjaGVfc2l6ZV9sYgorCQkJCQkgICAgLyBzaXplb2YoX1ZhbHVlVHlwZSkpKTsKKyAgICAgIF9fbnVtX2JpbnNfY2FjaGUgPSBfX3JvdW5kX3VwX3RvX3BvdzIoX19udW1fYmluc19jYWNoZSk7CisKKyAgICAgIC8vIE5vIG1vcmUgYnVja2V0cyB0aGFuIFRMQiBlbnRyaWVzLCBwb3dlciBvZiAyCisgICAgICAvLyBQb3dlciBvZiAyIGFuZCBhdCBsZWFzdCBvbmUgZWxlbWVudCBwZXIgYmluLCBhdCBtb3N0IHRoZSBUTEIgc2l6ZS4KKyAgICAgIF9fbnVtX2JpbnMgPSBzdGQ6Om1pbjxfRGlmZmVyZW5jZVR5cGU+KF9fbiwgX19udW1fYmluc19jYWNoZSk7CisKKyNpZiBfR0xJQkNYWF9SQU5ET01fU0hVRkZMRV9DT05TSURFUl9UTEIKKyAgICAgIC8vIDIgVExCIGVudHJpZXMgbmVlZGVkIHBlciBiaW4uCisgICAgICBfX251bV9iaW5zID0gc3RkOjptaW48X0RpZmZlcmVuY2VUeXBlPihfX3MuVExCX3NpemUgLyAyLCBfX251bV9iaW5zKTsKKyNlbmRpZgorICAgICAgX19udW1fYmlucyA9IF9fcm91bmRfdXBfdG9fcG93MihfX251bV9iaW5zKTsKKworICAgICAgaWYgKF9fbnVtX2JpbnMgPCBfX251bV9iaW5zX2NhY2hlKQorCXsKKyNlbmRpZgorICAgICAgICAgIC8vIE5vdyB0cnkgdGhlIEwyIGNhY2hlCisgICAgICAgICAgLy8gTXVzdCBmaXQgaW50byBMMgorICAgICAgICAgIF9fbnVtX2JpbnNfY2FjaGUgPSBzdGF0aWNfY2FzdDxfQmluSW5kZXg+CisJICAgIChzdGQ6Om1heDxfRGlmZmVyZW5jZVR5cGU+KDEsIF9fbiAvIChfX3MuTDJfY2FjaGVfc2l6ZQorCQkJCQkJIC8gc2l6ZW9mKF9WYWx1ZVR5cGUpKSkpOworICAgICAgICAgIF9fbnVtX2JpbnNfY2FjaGUgPSBfX3JvdW5kX3VwX3RvX3BvdzIoX19udW1fYmluc19jYWNoZSk7CisKKyAgICAgICAgICAvLyBObyBtb3JlIGJ1Y2tldHMgdGhhbiBUTEIgZW50cmllcywgcG93ZXIgb2YgMi4KKyAgICAgICAgICBfX251bV9iaW5zID0gc3RhdGljX2Nhc3Q8X0JpbkluZGV4PgorCSAgICAoc3RkOjptaW4oX19uLCBzdGF0aWNfY2FzdDxfRGlmZmVyZW5jZVR5cGU+KF9fbnVtX2JpbnNfY2FjaGUpKSk7CisgICAgICAgICAgLy8gUG93ZXIgb2YgMiBhbmQgYXQgbGVhc3Qgb25lIGVsZW1lbnQgcGVyIGJpbiwgYXQgbW9zdCB0aGUgVExCIHNpemUuCisjaWYgX0dMSUJDWFhfUkFORE9NX1NIVUZGTEVfQ09OU0lERVJfVExCCisgICAgICAgICAgLy8gMiBUTEIgZW50cmllcyBuZWVkZWQgcGVyIGJpbi4KKyAgICAgICAgICBfX251bV9iaW5zID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8X0RpZmZlcmVuY2VUeXBlPihfX3MuVExCX3NpemUgLyAyKSwKKwkJCQlfX251bV9iaW5zKTsKKyNlbmRpZgorICAgICAgICAgICAgX19udW1fYmlucyA9IF9fcm91bmRfdXBfdG9fcG93MihfX251bV9iaW5zKTsKKyNpZiBfR0xJQkNYWF9SQU5ET01fU0hVRkZMRV9DT05TSURFUl9MMQorCX0KKyNlbmRpZgorCisgICAgICBfX251bV9iaW5zID0gX19yb3VuZF91cF90b19wb3cyKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXg8X0JpbkluZGV4PihfX251bV90aHJlYWRzLCBfX251bV9iaW5zKSk7CisKKyAgICAgIGlmIChfX251bV90aHJlYWRzIDw9IDEpCisgICAgICB7CisgICAgICAgIF9SYW5kb21OdW1iZXIgX19kZXJpdmVkX3JuZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JuZyhzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKTsKKwlfX3NlcXVlbnRpYWxfcmFuZG9tX3NodWZmbGUoX19iZWdpbiwgX19lbmQsIF9fZGVyaXZlZF9ybmcpOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIF9EUmFuZG9tU2h1ZmZsaW5nR2xvYmFsRGF0YTxfUkFJdGVyPiBfX3NkKF9fYmVnaW4pOworICAgICAgX0RSU1NvcnRlclBVPF9SQUl0ZXIsIF9SYW5kb21OdW1iZXIgPiogX19wdXM7CisgICAgICBfRGlmZmVyZW5jZVR5cGUqIF9fc3RhcnRzOworCisjICAgICBwcmFnbWEgb21wIHBhcmFsbGVsIG51bV90aHJlYWRzKF9fbnVtX3RocmVhZHMpCisgICAgICB7CisJX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMgPSBvbXBfZ2V0X251bV90aHJlYWRzKCk7CisjICAgICAgIHByYWdtYSBvbXAgc2luZ2xlCisJeworCSAgX19wdXMgPSBuZXcgX0RSU1NvcnRlclBVPF9SQUl0ZXIsIF9SYW5kb21OdW1iZXI+W19fbnVtX3RocmVhZHNdOworCSAgCisJICBfX3NkLl9NX3RlbXBvcmFyaWVzID0gbmV3IF9WYWx1ZVR5cGUqW19fbnVtX3RocmVhZHNdOworCSAgX19zZC5fTV9kaXN0ID0gbmV3IF9EaWZmZXJlbmNlVHlwZSpbX19udW1fYmlucyArIDFdOworCSAgX19zZC5fTV9iaW5fcHJvYyA9IG5ldyBfVGhyZWFkSW5kZXhbX19udW1fYmluc107CisJICBmb3IgKF9CaW5JbmRleCBfX2IgPSAwOyBfX2IgPCBfX251bV9iaW5zICsgMTsgKytfX2IpCisJICAgIF9fc2QuX01fZGlzdFtfX2JdID0gbmV3IF9EaWZmZXJlbmNlVHlwZVtfX251bV90aHJlYWRzICsgMV07CisJICBmb3IgKF9CaW5JbmRleCBfX2IgPSAwOyBfX2IgPCAoX19udW1fYmlucyArIDEpOyArK19fYikKKwkgICAgeworCSAgICAgIF9fc2QuX01fZGlzdFswXVswXSA9IDA7CisJICAgICAgX19zZC5fTV9kaXN0W19fYl1bMF0gPSAwOworCSAgICB9CisJICBfX3N0YXJ0cyA9IF9fc2QuX01fc3RhcnRzID0gbmV3IF9EaWZmZXJlbmNlVHlwZVtfX251bV90aHJlYWRzICsgMV07CisJICBpbnQgX19iaW5fY3Vyc29yID0gMDsKKwkgIF9fc2QuX01fbnVtX2JpbnMgPSBfX251bV9iaW5zOworCSAgX19zZC5fTV9udW1fYml0cyA9IF9fcmRfbG9nMihfX251bV9iaW5zKTsKKworCSAgX0RpZmZlcmVuY2VUeXBlIF9fY2h1bmtfbGVuZ3RoID0gX19uIC8gX19udW1fdGhyZWFkcywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgX19zcGxpdCA9IF9fbiAlIF9fbnVtX3RocmVhZHMsCisJICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RhcnQgPSAwOworCSAgX0RpZmZlcmVuY2VUeXBlIF9fYmluX2NodW5rX2xlbmd0aCA9IF9fbnVtX2JpbnMgLyBfX251bV90aHJlYWRzLAorCSAgICAgICAgICAgICAgICAgICAgICAgICBfX2Jpbl9zcGxpdCA9IF9fbnVtX2JpbnMgJSBfX251bV90aHJlYWRzOworCSAgZm9yIChfVGhyZWFkSW5kZXggX19pID0gMDsgX19pIDwgX19udW1fdGhyZWFkczsgKytfX2kpCisJICAgIHsKKwkgICAgICBfX3N0YXJ0c1tfX2ldID0gX19zdGFydDsKKwkgICAgICBfX3N0YXJ0ICs9IChfX2kgPCBfX3NwbGl0CisJCQkgID8gKF9fY2h1bmtfbGVuZ3RoICsgMSkgOiBfX2NodW5rX2xlbmd0aCk7CisJICAgICAgaW50IF9faiA9IF9fcHVzW19faV0uX01fYmluc19iZWdpbiA9IF9fYmluX2N1cnNvcjsKKworCSAgICAgIC8vIFJhbmdlIG9mIGJpbnMgZm9yIHRoaXMgcHJvY2Vzc29yLgorCSAgICAgIF9fYmluX2N1cnNvciArPSAoX19pIDwgX19iaW5fc3BsaXQKKwkJCSAgICAgICA/IChfX2Jpbl9jaHVua19sZW5ndGggKyAxKQorCQkJICAgICAgIDogX19iaW5fY2h1bmtfbGVuZ3RoKTsKKwkgICAgICBfX3B1c1tfX2ldLl9fYmluc19lbmQgPSBfX2Jpbl9jdXJzb3I7CisJICAgICAgZm9yICg7IF9faiA8IF9fYmluX2N1cnNvcjsgKytfX2opCisJCV9fc2QuX01fYmluX3Byb2NbX19qXSA9IF9faTsKKwkgICAgICBfX3B1c1tfX2ldLl9NX251bV90aHJlYWRzID0gX19udW1fdGhyZWFkczsKKwkgICAgICBfX3B1c1tfX2ldLl9NX3NlZWQgPSBfX3JuZyhzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpOworCSAgICAgIF9fcHVzW19faV0uX01fc2QgPSAmX19zZDsKKwkgICAgfQorCSAgX19zdGFydHNbX19udW1fdGhyZWFkc10gPSBfX3N0YXJ0OworCX0gLy9zaW5nbGUKKyAgICAgICAgICAvLyBOb3cgc2h1ZmZsZSBpbiBwYXJhbGxlbC4KKwlfX3BhcmFsbGVsX3JhbmRvbV9zaHVmZmxlX2Ryc19wdShfX3B1cyk7CisgICAgICB9ICAvLyBwYXJhbGxlbAorCisgICAgICBkZWxldGVbXSBfX3N0YXJ0czsKKyAgICAgIGRlbGV0ZVtdIF9fc2QuX01fYmluX3Byb2M7CisgICAgICBmb3IgKGludCBfX3MgPSAwOyBfX3MgPCAoX19udW1fYmlucyArIDEpOyArK19fcykKKwlkZWxldGVbXSBfX3NkLl9NX2Rpc3RbX19zXTsKKyAgICAgIGRlbGV0ZVtdIF9fc2QuX01fZGlzdDsKKyAgICAgIGRlbGV0ZVtdIF9fc2QuX01fdGVtcG9yYXJpZXM7CisKKyAgICAgIGRlbGV0ZVtdIF9fcHVzOworICAgIH0KKworICAvKiogQGJyaWVmIFNlcXVlbnRpYWwgY2FjaGUtZWZmaWNpZW50IHJhbmRvbSBzaHVmZmxlLgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2Ygc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fcm5nIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIHRvIHVzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgdm9pZAorICAgIF9fc2VxdWVudGlhbF9yYW5kb21fc2h1ZmZsZShfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCQkJX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19ybmcpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX24gPSBfX2VuZCAtIF9fYmVnaW47CisgICAgICBjb25zdCBfU2V0dGluZ3MmIF9fcyA9IF9TZXR0aW5nczo6Z2V0KCk7CisKKyAgICAgIF9CaW5JbmRleCBfX251bV9iaW5zLCBfX251bV9iaW5zX2NhY2hlOworCisjaWYgX0dMSUJDWFhfUkFORE9NX1NIVUZGTEVfQ09OU0lERVJfTDEKKyAgICAgIC8vIFRyeSB0aGUgTDEgY2FjaGUgZmlyc3QsIG11c3QgZml0IGludG8gTDEuCisgICAgICBfX251bV9iaW5zX2NhY2hlID0gc3RkOjptYXg8X0RpZmZlcmVuY2VUeXBlPgorCSgxLCBfX24gLyAoX19zLkwxX2NhY2hlX3NpemVfbGIgLyBzaXplb2YoX1ZhbHVlVHlwZSkpKTsKKyAgICAgIF9fbnVtX2JpbnNfY2FjaGUgPSBfX3JvdW5kX3VwX3RvX3BvdzIoX19udW1fYmluc19jYWNoZSk7CisKKyAgICAgIC8vIE5vIG1vcmUgYnVja2V0cyB0aGFuIFRMQiBlbnRyaWVzLCBwb3dlciBvZiAyCisgICAgICAvLyBQb3dlciBvZiAyIGFuZCBhdCBsZWFzdCBvbmUgZWxlbWVudCBwZXIgYmluLCBhdCBtb3N0IHRoZSBUTEIgc2l6ZQorICAgICAgX19udW1fYmlucyA9IHN0ZDo6bWluKF9fbiwgKF9EaWZmZXJlbmNlVHlwZSlfX251bV9iaW5zX2NhY2hlKTsKKyNpZiBfR0xJQkNYWF9SQU5ET01fU0hVRkZMRV9DT05TSURFUl9UTEIKKyAgICAgIC8vIDIgVExCIGVudHJpZXMgbmVlZGVkIHBlciBiaW4KKyAgICAgIF9fbnVtX2JpbnMgPSBzdGQ6Om1pbigoX0RpZmZlcmVuY2VUeXBlKV9fcy5UTEJfc2l6ZSAvIDIsIF9fbnVtX2JpbnMpOworI2VuZGlmCisgICAgICBfX251bV9iaW5zID0gX19yb3VuZF91cF90b19wb3cyKF9fbnVtX2JpbnMpOworCisgICAgICBpZiAoX19udW1fYmlucyA8IF9fbnVtX2JpbnNfY2FjaGUpCisJeworI2VuZGlmCisgICAgICAgICAgLy8gTm93IHRyeSB0aGUgTDIgY2FjaGUsIG11c3QgZml0IGludG8gTDIuCisgICAgICAgICAgX19udW1fYmluc19jYWNoZSA9IHN0YXRpY19jYXN0PF9CaW5JbmRleD4KKwkgICAgKHN0ZDo6bWF4PF9EaWZmZXJlbmNlVHlwZT4oMSwgX19uIC8gKF9fcy5MMl9jYWNoZV9zaXplCisJCQkJCQkgLyBzaXplb2YoX1ZhbHVlVHlwZSkpKSk7CisgICAgICAgICAgX19udW1fYmluc19jYWNoZSA9IF9fcm91bmRfdXBfdG9fcG93MihfX251bV9iaW5zX2NhY2hlKTsKKworICAgICAgICAgIC8vIE5vIG1vcmUgYnVja2V0cyB0aGFuIFRMQiBlbnRyaWVzLCBwb3dlciBvZiAyCisgICAgICAgICAgLy8gUG93ZXIgb2YgMiBhbmQgYXQgbGVhc3Qgb25lIGVsZW1lbnQgcGVyIGJpbiwgYXQgbW9zdCB0aGUgVExCIHNpemUuCisgICAgICAgICAgX19udW1fYmlucyA9IHN0YXRpY19jYXN0PF9CaW5JbmRleD4KKwkgICAgKHN0ZDo6bWluKF9fbiwgc3RhdGljX2Nhc3Q8X0RpZmZlcmVuY2VUeXBlPihfX251bV9iaW5zX2NhY2hlKSkpOworCisjaWYgX0dMSUJDWFhfUkFORE9NX1NIVUZGTEVfQ09OU0lERVJfVExCCisgICAgICAgICAgLy8gMiBUTEIgZW50cmllcyBuZWVkZWQgcGVyIGJpbgorICAgICAgICAgIF9fbnVtX2JpbnMgPSBzdGQ6Om1pbjxfRGlmZmVyZW5jZVR5cGU+KF9fcy5UTEJfc2l6ZSAvIDIsIF9fbnVtX2JpbnMpOworI2VuZGlmCisgICAgICAgICAgX19udW1fYmlucyA9IF9fcm91bmRfdXBfdG9fcG93MihfX251bV9iaW5zKTsKKyNpZiBfR0xJQkNYWF9SQU5ET01fU0hVRkZMRV9DT05TSURFUl9MMQorCX0KKyNlbmRpZgorCisgICAgICBpbnQgX19udW1fYml0cyA9IF9fcmRfbG9nMihfX251bV9iaW5zKTsKKworICAgICAgaWYgKF9fbnVtX2JpbnMgPiAxKQorCXsKKyAgICAgICAgICBfVmFsdWVUeXBlKiBfX3RhcmdldCA9CisJICAgIHN0YXRpY19jYXN0PF9WYWx1ZVR5cGUqPig6Om9wZXJhdG9yIG5ldyhzaXplb2YoX1ZhbHVlVHlwZSkgKiBfX24pKTsKKyAgICAgICAgICBfQmluSW5kZXgqIF9fb3JhY2xlcyA9IG5ldyBfQmluSW5kZXhbX19uXTsKKyAgICAgICAgICBfRGlmZmVyZW5jZVR5cGUqIF9fZGlzdDAgPSBuZXcgX0RpZmZlcmVuY2VUeXBlW19fbnVtX2JpbnMgKyAxXSwKKyAgICAgICAgICAgICAgICAJICogX19kaXN0MSA9IG5ldyBfRGlmZmVyZW5jZVR5cGVbX19udW1fYmlucyArIDFdOworCisgICAgICAgICAgZm9yIChpbnQgX19iID0gMDsgX19iIDwgX19udW1fYmlucyArIDE7ICsrX19iKQorICAgICAgICAgICAgX19kaXN0MFtfX2JdID0gMDsKKworICAgICAgICAgIF9SYW5kb21OdW1iZXIgX19iaXRybmcoX19ybmcoMHhGRkZGRkZGRikpOworCisgICAgICAgICAgZm9yIChfRGlmZmVyZW5jZVR5cGUgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX0JpbkluZGV4IF9fb3JhY2xlID0gX19yYW5kb21fbnVtYmVyX3BvdzIoX19udW1fYml0cywgX19iaXRybmcpOworICAgICAgICAgICAgICBfX29yYWNsZXNbX19pXSA9IF9fb3JhY2xlOworCisgICAgICAgICAgICAgIC8vIFRvIGFsbG93IHByZWZpeCAocGFydGlhbCkgc3VtLgorICAgICAgICAgICAgICArKyhfX2Rpc3QwW19fb3JhY2xlICsgMV0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLy8gU3VtIHVwIGJpbnMuCisgICAgICAgICAgX19nbnVfc2VxdWVudGlhbDo6cGFydGlhbF9zdW0oX19kaXN0MCwgX19kaXN0MCArIF9fbnVtX2JpbnMgKyAxLAorCQkJCQlfX2Rpc3QwKTsKKworICAgICAgICAgIGZvciAoaW50IF9fYiA9IDA7IF9fYiA8IF9fbnVtX2JpbnMgKyAxOyArK19fYikKKyAgICAgICAgICAgIF9fZGlzdDFbX19iXSA9IF9fZGlzdDBbX19iXTsKKworICAgICAgICAgIC8vIERpc3RyaWJ1dGUgYWNjb3JkaW5nIHRvIG9yYWNsZXMuCisgICAgICAgICAgZm9yIChfRGlmZmVyZW5jZVR5cGUgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKyAgICAgICAgICAgIDo6bmV3KCYoX190YXJnZXRbKF9fZGlzdDBbX19vcmFjbGVzW19faV1dKSsrXSkpIAorCQlfVmFsdWVUeXBlKCooX19iZWdpbiArIF9faSkpOworCisgICAgICAgICAgZm9yIChpbnQgX19iID0gMDsgX19iIDwgX19udW1fYmluczsgKytfX2IpCisJICAgIF9fc2VxdWVudGlhbF9yYW5kb21fc2h1ZmZsZShfX3RhcmdldCArIF9fZGlzdDFbX19iXSwKKwkJCQkJX190YXJnZXQgKyBfX2Rpc3QxW19fYiArIDFdLCBfX3JuZyk7CisKKyAgICAgICAgICAvLyBDb3B5IGVsZW1lbnRzIGJhY2suCisgICAgICAgICAgc3RkOjpjb3B5KF9fdGFyZ2V0LCBfX3RhcmdldCArIF9fbiwgX19iZWdpbik7CisKKyAgICAgICAgICBkZWxldGVbXSBfX2Rpc3QwOworICAgICAgICAgIGRlbGV0ZVtdIF9fZGlzdDE7CisgICAgICAgICAgZGVsZXRlW10gX19vcmFjbGVzOworCSAgCisJICBmb3IgKF9EaWZmZXJlbmNlVHlwZSBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCSAgICBfX3RhcmdldFtfX2ldLn5fVmFsdWVUeXBlKCk7CisgICAgICAgICAgOjpvcGVyYXRvciBkZWxldGUoX190YXJnZXQpOworCX0KKyAgICAgIGVsc2UKKwlfX2dudV9zZXF1ZW50aWFsOjpyYW5kb21fc2h1ZmZsZShfX2JlZ2luLCBfX2VuZCwgX19ybmcpOworICAgIH0KKworICAvKiogQGJyaWVmIFBhcmFsbGVsIHJhbmRvbSBwdWJsaWMgY2FsbC4KKyAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fZW5kIEVuZCBpdGVyYXRvciBvZiBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX3JuZyBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byB1c2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgIGlubGluZSB2b2lkCisgICAgX19wYXJhbGxlbF9yYW5kb21fc2h1ZmZsZShfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCQkgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yIF9fcm5nID0gX1JhbmRvbU51bWJlcigpKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fbiA9IF9fZW5kIC0gX19iZWdpbjsKKyAgICAgIF9fcGFyYWxsZWxfcmFuZG9tX3NodWZmbGVfZHJzKF9fYmVnaW4sIF9fZW5kLCBfX24sCisJCQkJICAgIF9fZ2V0X21heF90aHJlYWRzKCksIF9fcm5nKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9SQU5ET01fU0hVRkZMRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3NlYXJjaC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9zZWFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzg4NjkyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9zZWFyY2guaApAQCAtMCwwICsxLDE3MiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL3NlYXJjaC5oCisgKiAgQGJyaWVmIFBhcmFsbGVsIGltcGxlbWVudGF0aW9uIGJhc2UgZm9yIHN0ZDo6c2VhcmNoKCkgYW5kCisgKiAgc3RkOjpzZWFyY2hfbigpLgorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwYXJhbGxlbCBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgRmVsaXggUHV0emUuCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfU0VBUkNIX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfU0VBUkNIX0ggMQorCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKworI2luY2x1ZGUgPHBhcmFsbGVsL3BhcmFsbGVsLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvZXF1YWxseV9zcGxpdC5oPgorCituYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKK3sKKyAgLyoqCisgICAqICBAYnJpZWYgUHJlY2FsY3VsYXRlIF9fYWR2YW5jZXMgZm9yIEtudXRoLU1vcnJpcy1QcmF0dCBhbGdvcml0aG0uCisgICAqICBAcGFyYW0gX19lbGVtZW50cyBCZWdpbiBpdGVyYXRvciBvZiBzZXF1ZW5jZSB0byBzZWFyY2ggZm9yLgorICAgKiAgQHBhcmFtIF9fbGVuZ3RoIExlbmd0aCBvZiBzZXF1ZW5jZSB0byBzZWFyY2ggZm9yLgorICAgKiAgQHBhcmFtIF9fb2ZmIFJldHVybmVkIF9fb2Zmc2V0cy4gCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfRGlmZmVyZW5jZVRwPgorICAgIHZvaWQKKyAgICBfX2NhbGNfYm9yZGVycyhfUkFJdGVyIF9fZWxlbWVudHMsIF9EaWZmZXJlbmNlVHAgX19sZW5ndGgsIAorCQkgICBfRGlmZmVyZW5jZVRwKiBfX29mZikKKyAgICB7CisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICBfX29mZlswXSA9IC0xOworICAgICAgaWYgKF9fbGVuZ3RoID4gMSkKKwlfX29mZlsxXSA9IDA7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19rID0gMDsKKyAgICAgIGZvciAoX0RpZmZlcmVuY2VUeXBlIF9faiA9IDI7IF9faiA8PSBfX2xlbmd0aDsgX19qKyspCisJeworICAgICAgICAgIHdoaWxlICgoX19rID49IDApICYmICEoX19lbGVtZW50c1tfX2tdID09IF9fZWxlbWVudHNbX19qLTFdKSkKKyAgICAgICAgICAgIF9fayA9IF9fb2ZmW19fa107CisgICAgICAgICAgX19vZmZbX19qXSA9ICsrX19rOworCX0KKyAgICB9CisKKyAgLy8gR2VuZXJpYyBwYXJhbGxlbCBmaW5kIGFsZ29yaXRobSAocmVxdWlyZXMgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcikuCisKKyAgLyoqIEBicmllZiBQYXJhbGxlbCBzdGQ6OnNlYXJjaC4KKyAgICogIEBwYXJhbSBfX2JlZ2luMSBCZWdpbiBpdGVyYXRvciBvZiBmaXJzdCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZDEgRW5kIGl0ZXJhdG9yIG9mIGZpcnN0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fYmVnaW4yIEJlZ2luIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZDIgRW5kIGl0ZXJhdG9yIG9mIHNlY29uZCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX3ByZWQgRmluZCBwcmVkaWNhdGUuCisgICAqICBAcmV0dXJuIFBsYWNlIG9mIGZpbmRpbmcgaW4gZmlyc3Qgc2VxdWVuY2VzLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfX1JBSXRlcjEsCisgICAgICAgICAgIHR5cGVuYW1lIF9fUkFJdGVyMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX1ByZWQ+CisgICAgX19SQUl0ZXIxCisgICAgX19zZWFyY2hfdGVtcGxhdGUoX19SQUl0ZXIxIF9fYmVnaW4xLCBfX1JBSXRlcjEgX19lbmQxLAorCQkgICAgICBfX1JBSXRlcjIgX19iZWdpbjIsIF9fUkFJdGVyMiBfX2VuZDIsCisJCSAgICAgIF9QcmVkIF9fcHJlZCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9fUkFJdGVyMT4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICBfR0xJQkNYWF9DQUxMKChfX2VuZDEgLSBfX2JlZ2luMSkgKyAoX19lbmQyIC0gX19iZWdpbjIpKTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fcGF0dGVybl9sZW5ndGggPSBfX2VuZDIgLSBfX2JlZ2luMjsKKworICAgICAgLy8gUGF0dGVybiB0b28gc2hvcnQuCisgICAgICBpZihfX3BhdHRlcm5fbGVuZ3RoIDw9IDApCisJcmV0dXJuIF9fZW5kMTsKKworICAgICAgLy8gTGFzdCBwb2ludCB0byBzdGFydCBzZWFyY2guCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19pbnB1dF9sZW5ndGggPSAoX19lbmQxIC0gX19iZWdpbjEpIC0gX19wYXR0ZXJuX2xlbmd0aDsKKworICAgICAgLy8gV2hlcmUgaXMgZmlyc3Qgb2NjdXJyZW5jZSBvZiBwYXR0ZXJuPyBkZWZhdWx0cyB0byBlbmQuCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19yZXN1bHQgPSAoX19lbmQxIC0gX19iZWdpbjEpOworICAgICAgX0RpZmZlcmVuY2VUeXBlICpfX3NwbGl0dGVyczsKKworICAgICAgLy8gUGF0dGVybiB0b28gbG9uZy4KKyAgICAgIGlmIChfX2lucHV0X2xlbmd0aCA8IDApCisJcmV0dXJuIF9fZW5kMTsKKworICAgICAgb21wX2xvY2tfdCBfX3Jlc3VsdF9sb2NrOworICAgICAgb21wX2luaXRfbG9jaygmX19yZXN1bHRfbG9jayk7CisKKyAgICAgIF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzID0gc3RkOjptYXg8X0RpZmZlcmVuY2VUeXBlPgorCSgxLCBzdGQ6Om1pbjxfRGlmZmVyZW5jZVR5cGU+KF9faW5wdXRfbGVuZ3RoLAorCQkJCSAgICAgIF9fZ2V0X21heF90aHJlYWRzKCkpKTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fYWR2YW5jZXNbX19wYXR0ZXJuX2xlbmd0aF07CisgICAgICBfX2NhbGNfYm9yZGVycyhfX2JlZ2luMiwgX19wYXR0ZXJuX2xlbmd0aCwgX19hZHZhbmNlcyk7CisKKyMgICAgIHByYWdtYSBvbXAgcGFyYWxsZWwgbnVtX3RocmVhZHMoX19udW1fdGhyZWFkcykKKyAgICAgIHsKKyMgICAgICAgcHJhZ21hIG9tcCBzaW5nbGUKKwl7CisJICBfX251bV90aHJlYWRzID0gb21wX2dldF9udW1fdGhyZWFkcygpOworCSAgX19zcGxpdHRlcnMgPSBuZXcgX0RpZmZlcmVuY2VUeXBlW19fbnVtX3RocmVhZHMgKyAxXTsKKwkgIF9fZXF1YWxseV9zcGxpdChfX2lucHV0X2xlbmd0aCwgX19udW1fdGhyZWFkcywgX19zcGxpdHRlcnMpOworCX0KKworCV9UaHJlYWRJbmRleCBfX2lhbSA9IG9tcF9nZXRfdGhyZWFkX251bSgpOworCisJX0RpZmZlcmVuY2VUeXBlIF9fc3RhcnQgPSBfX3NwbGl0dGVyc1tfX2lhbV0sCisJICAgICAgICAgICAgICAgICBfX3N0b3AgPSBfX3NwbGl0dGVyc1tfX2lhbSArIDFdOworCisJX0RpZmZlcmVuY2VUeXBlIF9fcG9zX2luX3BhdHRlcm4gPSAwOworCWJvb2wgX19mb3VuZF9wYXR0ZXJuID0gZmFsc2U7CisKKwl3aGlsZSAoX19zdGFydCA8PSBfX3N0b3AgJiYgIV9fZm91bmRfcGF0dGVybikKKwkgIHsKKwkgICAgLy8gR2V0IG5ldyB2YWx1ZSBvZiByZXN1bHQuCisjcHJhZ21hIG9tcCBmbHVzaChfX3Jlc3VsdCkKKwkgICAgLy8gTm8gY2hhbmNlIGZvciB0aGlzIHRocmVhZCB0byBmaW5kIGZpcnN0IG9jY3VycmVuY2UuCisJICAgIGlmIChfX3Jlc3VsdCA8IF9fc3RhcnQpCisJICAgICAgYnJlYWs7CisJICAgIHdoaWxlIChfX3ByZWQoX19iZWdpbjFbX19zdGFydCArIF9fcG9zX2luX3BhdHRlcm5dLAorCQkJICBfX2JlZ2luMltfX3Bvc19pbl9wYXR0ZXJuXSkpCisJICAgICAgeworCQkrK19fcG9zX2luX3BhdHRlcm47CisJCWlmIChfX3Bvc19pbl9wYXR0ZXJuID09IF9fcGF0dGVybl9sZW5ndGgpCisJCSAgeworCQkgICAgLy8gRm91bmQgbmV3IGNhbmRpZGF0ZSBmb3IgcmVzdWx0LgorCQkgICAgb21wX3NldF9sb2NrKCZfX3Jlc3VsdF9sb2NrKTsKKwkJICAgIF9fcmVzdWx0ID0gc3RkOjptaW4oX19yZXN1bHQsIF9fc3RhcnQpOworCQkgICAgb21wX3Vuc2V0X2xvY2soJl9fcmVzdWx0X2xvY2spOworCisJCSAgICBfX2ZvdW5kX3BhdHRlcm4gPSB0cnVlOworCQkgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIH0KKwkgICAgLy8gTWFrZSBzYWZlIGp1bXAuCisJICAgIF9fc3RhcnQgKz0gKF9fcG9zX2luX3BhdHRlcm4gLSBfX2FkdmFuY2VzW19fcG9zX2luX3BhdHRlcm5dKTsKKwkgICAgX19wb3NfaW5fcGF0dGVybiA9IChfX2FkdmFuY2VzW19fcG9zX2luX3BhdHRlcm5dIDwgMAorCQkJCT8gMCA6IF9fYWR2YW5jZXNbX19wb3NfaW5fcGF0dGVybl0pOworCSAgfQorICAgICAgfSAvL3BhcmFsbGVsCisKKyAgICAgIG9tcF9kZXN0cm95X2xvY2soJl9fcmVzdWx0X2xvY2spOworCisgICAgICBkZWxldGVbXSBfX3NwbGl0dGVyczsKKyAgICAgIAorICAgICAgLy8gUmV0dXJuIGl0ZXJhdG9yIG9uIGZvdW5kIGVsZW1lbnQuCisgICAgICByZXR1cm4gKF9fYmVnaW4xICsgX19yZXN1bHQpOworICAgIH0KK30gLy8gZW5kIG5hbWVzcGFjZQorCisjZW5kaWYgLyogX0dMSUJDWFhfUEFSQUxMRUxfU0VBUkNIX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvc2V0X29wZXJhdGlvbnMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvc2V0X29wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDhiMWY0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9zZXRfb3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsNTI5IEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqIEBmaWxlIHBhcmFsbGVsL3NldF9vcGVyYXRpb25zLmgKKyAqIEBicmllZiBQYXJhbGxlbCBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V0IG9wZXJhdGlvbnMgZm9yIHJhbmRvbS1hY2Nlc3MKKyAqIGl0ZXJhdG9ycy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IE1hcml1cyBFbHZlcnQgYW5kIEZlbGl4IEJvbmRhcmVua28uCisKKyNpZm5kZWYgX0dMSUJDWFhfUEFSQUxMRUxfU0VUX09QRVJBVElPTlNfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9TRVRfT1BFUkFUSU9OU19IIDEKKworI2luY2x1ZGUgPG9tcC5oPgorCisjaW5jbHVkZSA8cGFyYWxsZWwvc2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9tdWx0aXNlcV9zZWxlY3Rpb24uaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgorICAgIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fY29weV90YWlsKHN0ZDo6cGFpcjxfSUl0ZXIsIF9JSXRlcj4gX19iLAorCQlzdGQ6OnBhaXI8X0lJdGVyLCBfSUl0ZXI+IF9fZSwgX091dHB1dEl0ZXJhdG9yIF9fcikKKyAgICB7CisgICAgICBpZiAoX19iLmZpcnN0ICE9IF9fZS5maXJzdCkKKwl7CisgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKl9fcisrID0gKl9fYi5maXJzdCsrOworICAgICAgICAgICAgfQorICAgICAgICAgIHdoaWxlIChfX2IuZmlyc3QgIT0gX19lLmZpcnN0KTsKKwl9CisgICAgICBlbHNlCisJeworICAgICAgICAgIHdoaWxlIChfX2Iuc2Vjb25kICE9IF9fZS5zZWNvbmQpCisgICAgICAgICAgICAqX19yKysgPSAqX19iLnNlY29uZCsrOworCX0KKyAgICAgIHJldHVybiBfX3I7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBzdHJ1Y3QgX19zeW1tZXRyaWNfZGlmZmVyZW5jZV9mdW5jCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpwYWlyPF9JSXRlciwgX0lJdGVyPiBfSXRlcmF0b3JQYWlyOworCisgICAgICBfX3N5bW1ldHJpY19kaWZmZXJlbmNlX2Z1bmMoX0NvbXBhcmUgX19jb21wKSA6IF9NX2NvbXAoX19jb21wKSB7fQorCisgICAgICBfQ29tcGFyZSBfTV9jb21wOworCisgICAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICAgIF9NX2ludm9rZShfSUl0ZXIgX19hLCBfSUl0ZXIgX19iLCBfSUl0ZXIgX19jLCBfSUl0ZXIgX19kLAorCQlfT3V0cHV0SXRlcmF0b3IgX19yKSBjb25zdAorICAgICAgeworCXdoaWxlIChfX2EgIT0gX19iICYmIF9fYyAhPSBfX2QpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKF9NX2NvbXAoKl9fYSwgKl9fYykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCSpfX3IgPSAqX19hOworICAgICAgICAJKytfX2E7CisgICAgICAgIAkrK19fcjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoX01fY29tcCgqX19jLCAqX19hKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAJKl9fciA9ICpfX2M7CisgICAgICAgIAkrK19fYzsKKyAgICAgICAgCSsrX19yOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCSsrX19hOworICAgICAgICAJKytfX2M7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisJcmV0dXJuIHN0ZDo6Y29weShfX2MsIF9fZCwgc3RkOjpjb3B5KF9fYSwgX19iLCBfX3IpKTsKKyAgICAgIH0KKworICAgICAgX0RpZmZlcmVuY2VUeXBlCisgICAgICBfX2NvdW50KF9JSXRlciBfX2EsIF9JSXRlciBfX2IsIF9JSXRlciBfX2MsIF9JSXRlciBfX2QpIGNvbnN0CisgICAgICB7CisJX0RpZmZlcmVuY2VUeXBlIF9fY291bnRlciA9IDA7CisKKwl3aGlsZSAoX19hICE9IF9fYiAmJiBfX2MgIT0gX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfTV9jb21wKCpfX2EsICpfX2MpKQorICAgICAgICAgICAgICB7CisgICAgICAgIAkrK19fYTsKKyAgICAgICAgCSsrX19jb3VudGVyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfTV9jb21wKCpfX2MsICpfX2EpKQorICAgICAgICAgICAgICB7CisgICAgICAgIAkrK19fYzsKKyAgICAgICAgCSsrX19jb3VudGVyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCSsrX19hOworICAgICAgICAJKytfX2M7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKwlyZXR1cm4gX19jb3VudGVyICsgKF9fYiAtIF9fYSkgKyAoX19kIC0gX19jKTsKKyAgICAgIH0KKworICAgICAgX091dHB1dEl0ZXJhdG9yCisgICAgICBfX2ZpcnN0X2VtcHR5KF9JSXRlciBfX2MsIF9JSXRlciBfX2QsIF9PdXRwdXRJdGVyYXRvciBfX291dCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6Y29weShfX2MsIF9fZCwgX19vdXQpOyB9CisKKyAgICAgIF9PdXRwdXRJdGVyYXRvcgorICAgICAgX19zZWNvbmRfZW1wdHkoX0lJdGVyIF9fYSwgX0lJdGVyIF9fYiwgX091dHB1dEl0ZXJhdG9yIF9fb3V0KSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpjb3B5KF9fYSwgX19iLCBfX291dCk7IH0KKyAgICB9OworCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHN0cnVjdCBfX2RpZmZlcmVuY2VfZnVuYworICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cGFpcjxfSUl0ZXIsIF9JSXRlcj4gX0l0ZXJhdG9yUGFpcjsKKworICAgICAgX19kaWZmZXJlbmNlX2Z1bmMoX0NvbXBhcmUgX19jb21wKSA6IF9NX2NvbXAoX19jb21wKSB7fQorCisgICAgICBfQ29tcGFyZSBfTV9jb21wOworCisgICAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICAgIF9NX2ludm9rZShfSUl0ZXIgX19hLCBfSUl0ZXIgX19iLCBfSUl0ZXIgX19jLCBfSUl0ZXIgX19kLAorCQlfT3V0cHV0SXRlcmF0b3IgX19yKSBjb25zdAorICAgICAgeworCXdoaWxlIChfX2EgIT0gX19iICYmIF9fYyAhPSBfX2QpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKF9NX2NvbXAoKl9fYSwgKl9fYykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCSpfX3IgPSAqX19hOworICAgICAgICAJKytfX2E7CisgICAgICAgIAkrK19fcjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoX01fY29tcCgqX19jLCAqX19hKSkKKyAgICAgICAgICAgICAgeyArK19fYzsgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgIAkrK19fYTsKKyAgICAgICAgCSsrX19jOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorCXJldHVybiBzdGQ6OmNvcHkoX19hLCBfX2IsIF9fcik7CisgICAgICB9CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZQorICAgICAgX19jb3VudChfSUl0ZXIgX19hLCBfSUl0ZXIgX19iLAorCSAgICAgIF9JSXRlciBfX2MsIF9JSXRlciBfX2QpIGNvbnN0CisgICAgICB7CisJX0RpZmZlcmVuY2VUeXBlIF9fY291bnRlciA9IDA7CisKKwl3aGlsZSAoX19hICE9IF9fYiAmJiBfX2MgIT0gX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfTV9jb21wKCpfX2EsICpfX2MpKQorICAgICAgICAgICAgICB7CisgICAgICAgIAkrK19fYTsKKyAgICAgICAgCSsrX19jb3VudGVyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfTV9jb21wKCpfX2MsICpfX2EpKQorICAgICAgICAgICAgICB7ICsrX19jOyB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsgKytfX2E7ICsrX19jOyB9CisgICAgICAgICAgfQorCisJcmV0dXJuIF9fY291bnRlciArIChfX2IgLSBfX2EpOworICAgICAgfQorCisgICAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICAgIF9fZmlyc3RfZW1wdHkoX0lJdGVyLCBfSUl0ZXIsIF9PdXRwdXRJdGVyYXRvciBfX291dCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fb3V0OyB9CisKKyAgICAgIF9PdXRwdXRJdGVyYXRvcgorICAgICAgX19zZWNvbmRfZW1wdHkoX0lJdGVyIF9fYSwgX0lJdGVyIF9fYiwgX091dHB1dEl0ZXJhdG9yIF9fb3V0KSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpjb3B5KF9fYSwgX19iLCBfX291dCk7IH0KKyAgICB9OworCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIHN0cnVjdCBfX2ludGVyc2VjdGlvbl9mdW5jCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpwYWlyPF9JSXRlciwgX0lJdGVyPiBfSXRlcmF0b3JQYWlyOworCisgICAgICBfX2ludGVyc2VjdGlvbl9mdW5jKF9Db21wYXJlIF9fY29tcCkgOiBfTV9jb21wKF9fY29tcCkge30KKworICAgICAgX0NvbXBhcmUgX01fY29tcDsKKworICAgICAgX091dHB1dEl0ZXJhdG9yCisgICAgICBfTV9pbnZva2UoX0lJdGVyIF9fYSwgX0lJdGVyIF9fYiwgX0lJdGVyIF9fYywgX0lJdGVyIF9fZCwKKwkJX091dHB1dEl0ZXJhdG9yIF9fcikgY29uc3QKKyAgICAgIHsKKwl3aGlsZSAoX19hICE9IF9fYiAmJiBfX2MgIT0gX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfTV9jb21wKCpfX2EsICpfX2MpKQorICAgICAgICAgICAgICB7ICsrX19hOyB9CisgICAgICAgICAgICBlbHNlIGlmIChfTV9jb21wKCpfX2MsICpfX2EpKQorICAgICAgICAgICAgICB7ICsrX19jOyB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCSpfX3IgPSAqX19hOworICAgICAgICAJKytfX2E7CisgICAgICAgIAkrK19fYzsKKyAgICAgICAgCSsrX19yOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisJcmV0dXJuIF9fcjsKKyAgICAgIH0KKworICAgICAgX0RpZmZlcmVuY2VUeXBlCisgICAgICBfX2NvdW50KF9JSXRlciBfX2EsIF9JSXRlciBfX2IsIF9JSXRlciBfX2MsIF9JSXRlciBfX2QpIGNvbnN0CisgICAgICB7CisJX0RpZmZlcmVuY2VUeXBlIF9fY291bnRlciA9IDA7CisKKwl3aGlsZSAoX19hICE9IF9fYiAmJiBfX2MgIT0gX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfTV9jb21wKCpfX2EsICpfX2MpKQorICAgICAgICAgICAgICB7ICsrX19hOyB9CisgICAgICAgICAgICBlbHNlIGlmIChfTV9jb21wKCpfX2MsICpfX2EpKQorICAgICAgICAgICAgICB7ICsrX19jOyB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCSsrX19hOworICAgICAgICAJKytfX2M7CisgICAgICAgIAkrK19fY291bnRlcjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworCXJldHVybiBfX2NvdW50ZXI7CisgICAgICB9CisKKyAgICAgIF9PdXRwdXRJdGVyYXRvcgorICAgICAgX19maXJzdF9lbXB0eShfSUl0ZXIsIF9JSXRlciwgX091dHB1dEl0ZXJhdG9yIF9fb3V0KSBjb25zdAorICAgICAgeyByZXR1cm4gX19vdXQ7IH0KKworICAgICAgX091dHB1dEl0ZXJhdG9yCisgICAgICBfX3NlY29uZF9lbXB0eShfSUl0ZXIsIF9JSXRlciwgX091dHB1dEl0ZXJhdG9yIF9fb3V0KSBjb25zdAorICAgICAgeyByZXR1cm4gX19vdXQ7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9JSXRlciwgY2xhc3MgX091dHB1dEl0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KKyAgICBzdHJ1Y3QgX191bmlvbl9mdW5jCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICAgIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX191bmlvbl9mdW5jKF9Db21wYXJlIF9fY29tcCkgOiBfTV9jb21wKF9fY29tcCkge30KKworICAgICAgX0NvbXBhcmUgX01fY29tcDsKKworICAgICAgX091dHB1dEl0ZXJhdG9yCisgICAgICBfTV9pbnZva2UoX0lJdGVyIF9fYSwgY29uc3QgX0lJdGVyIF9fYiwgX0lJdGVyIF9fYywKKwkJY29uc3QgX0lJdGVyIF9fZCwgX091dHB1dEl0ZXJhdG9yIF9fcikgY29uc3QKKyAgICAgIHsKKwl3aGlsZSAoX19hICE9IF9fYiAmJiBfX2MgIT0gX19kKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfTV9jb21wKCpfX2EsICpfX2MpKQorICAgICAgICAgICAgICB7CisgICAgICAgIAkqX19yID0gKl9fYTsKKyAgICAgICAgCSsrX19hOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChfTV9jb21wKCpfX2MsICpfX2EpKQorICAgICAgICAgICAgICB7CisgICAgICAgIAkqX19yID0gKl9fYzsKKyAgICAgICAgCSsrX19jOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCSpfX3IgPSAqX19hOworICAgICAgICAJKytfX2E7CisgICAgICAgIAkrK19fYzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKytfX3I7CisgICAgICAgICAgfQorCXJldHVybiBzdGQ6OmNvcHkoX19jLCBfX2QsIHN0ZDo6Y29weShfX2EsIF9fYiwgX19yKSk7CisgICAgICB9CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZQorICAgICAgX19jb3VudChfSUl0ZXIgX19hLCBfSUl0ZXIgX19iLCBfSUl0ZXIgX19jLCBfSUl0ZXIgX19kKSBjb25zdAorICAgICAgeworCV9EaWZmZXJlbmNlVHlwZSBfX2NvdW50ZXIgPSAwOworCisJd2hpbGUgKF9fYSAhPSBfX2IgJiYgX19jICE9IF9fZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoX01fY29tcCgqX19hLCAqX19jKSkKKyAgICAgICAgICAgICAgeyArK19fYTsgfQorICAgICAgICAgICAgZWxzZSBpZiAoX01fY29tcCgqX19jLCAqX19hKSkKKyAgICAgICAgICAgICAgeyArK19fYzsgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgIAkrK19fYTsKKyAgICAgICAgCSsrX19jOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICArK19fY291bnRlcjsKKyAgICAgICAgICB9CisKKwlfX2NvdW50ZXIgKz0gKF9fYiAtIF9fYSk7CisJX19jb3VudGVyICs9IChfX2QgLSBfX2MpOworCXJldHVybiBfX2NvdW50ZXI7CisgICAgICB9CisKKyAgICAgIF9PdXRwdXRJdGVyYXRvcgorICAgICAgX19maXJzdF9lbXB0eShfSUl0ZXIgX19jLCBfSUl0ZXIgX19kLCBfT3V0cHV0SXRlcmF0b3IgX19vdXQpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6OmNvcHkoX19jLCBfX2QsIF9fb3V0KTsgfQorCisgICAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICAgIF9fc2Vjb25kX2VtcHR5KF9JSXRlciBfX2EsIF9JSXRlciBfX2IsIF9PdXRwdXRJdGVyYXRvciBfX291dCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6Y29weShfX2EsIF9fYiwgX19vdXQpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbj4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3BhcmFsbGVsX3NldF9vcGVyYXRpb24oX0lJdGVyIF9fYmVnaW4xLCBfSUl0ZXIgX19lbmQxLAorCQkJICAgICBfSUl0ZXIgX19iZWdpbjIsIF9JSXRlciBfX2VuZDIsCisJCQkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX09wZXJhdGlvbiBfX29wKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoKF9fZW5kMSAtIF9fYmVnaW4xKSArIChfX2VuZDIgLSBfX2JlZ2luMikpCisKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cGFpcjxfSUl0ZXIsIF9JSXRlcj4gX0l0ZXJhdG9yUGFpcjsKKworICAgICAgaWYgKF9fYmVnaW4xID09IF9fZW5kMSkKKwlyZXR1cm4gX19vcC5fX2ZpcnN0X2VtcHR5KF9fYmVnaW4yLCBfX2VuZDIsIF9fcmVzdWx0KTsKKworICAgICAgaWYgKF9fYmVnaW4yID09IF9fZW5kMikKKwlyZXR1cm4gX19vcC5fX3NlY29uZF9lbXB0eShfX2JlZ2luMSwgX19lbmQxLCBfX3Jlc3VsdCk7CisKKyAgICAgIGNvbnN0IF9EaWZmZXJlbmNlVHlwZSBfX3NpemUgPSAoX19lbmQxIC0gX19iZWdpbjEpICsgKF9fZW5kMiAtIF9fYmVnaW4yKTsKKworICAgICAgY29uc3QgX0l0ZXJhdG9yUGFpciBfX3NlcXVlbmNlWzJdID0geyBzdGQ6Om1ha2VfcGFpcihfX2JlZ2luMSwgX19lbmQxKSwKKwkJCQkJICAgIHN0ZDo6bWFrZV9wYWlyKF9fYmVnaW4yLCBfX2VuZDIpIH07CisgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXR1cm5fdmFsdWUgPSBfX3Jlc3VsdDsKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSAqX19ib3JkZXJzOworICAgICAgX0l0ZXJhdG9yUGFpciAqX19ibG9ja19iZWdpbnM7CisgICAgICBfRGlmZmVyZW5jZVR5cGUqIF9fbGVuZ3RoczsKKworICAgICAgX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMgPQorICAgICAgICAgIHN0ZDo6bWluPF9EaWZmZXJlbmNlVHlwZT4oX19nZXRfbWF4X3RocmVhZHMoKSwKKyAgICAgICAgICAgICAgc3RkOjptaW4oX19lbmQxIC0gX19iZWdpbjEsIF9fZW5kMiAtIF9fYmVnaW4yKSk7CisKKyMgICAgIHByYWdtYSBvbXAgcGFyYWxsZWwgbnVtX3RocmVhZHMoX19udW1fdGhyZWFkcykKKyAgICAgIHsKKyMgICAgICAgcHJhZ21hIG9tcCBzaW5nbGUKKwl7CisJICBfX251bV90aHJlYWRzID0gb21wX2dldF9udW1fdGhyZWFkcygpOworCisJICBfX2JvcmRlcnMgPSBuZXcgX0RpZmZlcmVuY2VUeXBlW19fbnVtX3RocmVhZHMgKyAyXTsKKwkgIF9fZXF1YWxseV9zcGxpdChfX3NpemUsIF9fbnVtX3RocmVhZHMgKyAxLCBfX2JvcmRlcnMpOworCSAgX19ibG9ja19iZWdpbnMgPSBuZXcgX0l0ZXJhdG9yUGFpcltfX251bV90aHJlYWRzICsgMV07CisJICAvLyBWZXJ5IF9fc3RhcnQuCisJICBfX2Jsb2NrX2JlZ2luc1swXSA9IHN0ZDo6bWFrZV9wYWlyKF9fYmVnaW4xLCBfX2JlZ2luMik7CisJICBfX2xlbmd0aHMgPSBuZXcgX0RpZmZlcmVuY2VUeXBlW19fbnVtX3RocmVhZHNdOworCX0gLy9zaW5nbGUKKworCV9UaHJlYWRJbmRleCBfX2lhbSA9IG9tcF9nZXRfdGhyZWFkX251bSgpOworCisJLy8gX1Jlc3VsdCBmcm9tIG11bHRpc2VxX3BhcnRpdGlvbi4KKwlfSUl0ZXIgX19vZmZzZXRbMl07CisJY29uc3QgX0RpZmZlcmVuY2VUeXBlIF9fcmFuayA9IF9fYm9yZGVyc1tfX2lhbSArIDFdOworCisJbXVsdGlzZXFfcGFydGl0aW9uKF9fc2VxdWVuY2UsIF9fc2VxdWVuY2UgKyAyLAorCQkJICAgX19yYW5rLCBfX29mZnNldCwgX19vcC5fTV9jb21wKTsKKworCS8vIGFsbG93ZWQgdG8gcmVhZD8KKwkvLyB0b2dldGhlcgorCS8vICooX19vZmZzZXRbIDAgXSAtIDEpID09ICpfX29mZnNldFsgMSBdCisJaWYgKF9fb2Zmc2V0WyAwIF0gIT0gX19iZWdpbjEgJiYgX19vZmZzZXRbMV0gIT0gX19lbmQyCisJICAgICYmICFfX29wLl9NX2NvbXAoKihfX29mZnNldFswXSAtIDEpLCAqX19vZmZzZXRbMV0pCisJICAgICYmICFfX29wLl9NX2NvbXAoKl9fb2Zmc2V0WzFdLCAqKF9fb2Zmc2V0WzBdIC0gMSkpKQorCSAgeworCSAgICAvLyBBdm9pZCBzcGxpdCBiZXR3ZWVuIGdsb2JhbGx5IGVxdWFsIGVsZW1lbnRzOiBtb3ZlIG9uZSB0bworCSAgICAvLyBmcm9udCBpbiBmaXJzdCBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAgLS1fX29mZnNldFswXTsKKwkgIH0KKworCV9JdGVyYXRvclBhaXIgX19ibG9ja19lbmQgPSBfX2Jsb2NrX2JlZ2luc1tfX2lhbSArIDFdID0KKwkgIF9JdGVyYXRvclBhaXIoX19vZmZzZXRbMF0sIF9fb2Zmc2V0WzFdKTsKKworCS8vIE1ha2Ugc3VyZSBhbGwgdGhyZWFkcyBoYXZlIHRoZWlyIGJsb2NrX2JlZ2luIHJlc3VsdCB3cml0dGVuIG91dC4KKyMgICAgICAgcHJhZ21hIG9tcCBiYXJyaWVyCisKKwlfSXRlcmF0b3JQYWlyIF9fYmxvY2tfYmVnaW4gPSBfX2Jsb2NrX2JlZ2luc1tfX2lhbV07CisKKwkvLyBCZWdpbiB3b3JraW5nIGZvciB0aGUgZmlyc3QgYmxvY2ssIHdoaWxlIHRoZSBvdGhlcnMgZXhjZXB0CisJLy8gdGhlIGxhc3Qgc3RhcnQgdG8gY291bnQuCisJaWYgKF9faWFtID09IDApCisJICB7CisJICAgIC8vIFRoZSBmaXJzdCB0aHJlYWQgY2FuIGNvcHkgYWxyZWFkeS4KKwkgICAgX19sZW5ndGhzWyBfX2lhbSBdID0KKwkgICAgICBfX29wLl9NX2ludm9rZShfX2Jsb2NrX2JlZ2luLmZpcnN0LCBfX2Jsb2NrX2VuZC5maXJzdCwKKwkJCSAgICAgX19ibG9ja19iZWdpbi5zZWNvbmQsIF9fYmxvY2tfZW5kLnNlY29uZCwKKwkJCSAgICAgX19yZXN1bHQpIC0gX19yZXN1bHQ7CisJICB9CisJZWxzZQorCSAgeworCSAgICBfX2xlbmd0aHNbIF9faWFtIF0gPQorCSAgICAgIF9fb3AuX19jb3VudChfX2Jsb2NrX2JlZ2luLmZpcnN0LCBfX2Jsb2NrX2VuZC5maXJzdCwKKwkJCSAgIF9fYmxvY2tfYmVnaW4uc2Vjb25kLCBfX2Jsb2NrX2VuZC5zZWNvbmQpOworCSAgfQorCisJLy8gTWFrZSBzdXJlIGV2ZXJ5b25lIHdyb3RlIHRoZWlyIGxlbmd0aHMuCisjICAgICAgIHByYWdtYSBvbXAgYmFycmllcgorCisJX091dHB1dEl0ZXJhdG9yIF9fciA9IF9fcmVzdWx0OworCisJaWYgKF9faWFtID09IDApCisJICB7CisJICAgIC8vIERvIHRoZSBsYXN0IGJsb2NrLgorCSAgICBmb3IgKF9UaHJlYWRJbmRleCBfX2kgPSAwOyBfX2kgPCBfX251bV90aHJlYWRzOyArK19faSkKKwkgICAgICBfX3IgKz0gX19sZW5ndGhzW19faV07CisKKwkgICAgX19ibG9ja19iZWdpbiA9IF9fYmxvY2tfYmVnaW5zW19fbnVtX3RocmVhZHNdOworCisJICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGl0ZXJhdG9yIG9mIHRoZSBsYXN0IGJsb2NrLgorCSAgICBfX3JldHVybl92YWx1ZSA9CisJICAgICAgX19vcC5fTV9pbnZva2UoX19ibG9ja19iZWdpbi5maXJzdCwgX19lbmQxLAorCQkJICAgICBfX2Jsb2NrX2JlZ2luLnNlY29uZCwgX19lbmQyLCBfX3IpOworCisJICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX2kgPSAwOyBfX2kgPCBfX2lhbTsgKytfX2kpCisgICAgICAgIAlfX3IgKz0gX19sZW5ndGhzWyBfX2kgXTsKKworICAgICAgICAgICAgICAvLyBSZXNldCBiZWdpbnMgZm9yIGNvcHkgcGFzcy4KKyAgICAgICAgICAgICAgX19vcC5fTV9pbnZva2UoX19ibG9ja19iZWdpbi5maXJzdCwgX19ibG9ja19lbmQuZmlyc3QsCisJCQkgICAgIF9fYmxvY2tfYmVnaW4uc2Vjb25kLCBfX2Jsb2NrX2VuZC5zZWNvbmQsIF9fcik7CisgICAgICAgICAgICB9CisJfQorICAgICAgcmV0dXJuIF9fcmV0dXJuX3ZhbHVlOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fcGFyYWxsZWxfc2V0X3VuaW9uKF9JSXRlciBfX2JlZ2luMSwgX0lJdGVyIF9fZW5kMSwKKwkJCSBfSUl0ZXIgX19iZWdpbjIsIF9JSXRlciBfX2VuZDIsCisJCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCisgICAgeworICAgICAgcmV0dXJuIF9fcGFyYWxsZWxfc2V0X29wZXJhdGlvbihfX2JlZ2luMSwgX19lbmQxLCBfX2JlZ2luMiwgX19lbmQyLAorCQkJCSAgICAgIF9fcmVzdWx0LAorCQkJCSAgICAgIF9fdW5pb25fZnVuYzwgX0lJdGVyLCBfT3V0cHV0SXRlcmF0b3IsCisJCQkJICAgICAgX0NvbXBhcmU+KF9fY29tcCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIF9PdXRwdXRJdGVyYXRvcgorICAgIF9fcGFyYWxsZWxfc2V0X2ludGVyc2VjdGlvbihfSUl0ZXIgX19iZWdpbjEsIF9JSXRlciBfX2VuZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAJX0lJdGVyIF9fYmVnaW4yLCBfSUl0ZXIgX19lbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgCV9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHJldHVybiBfX3BhcmFsbGVsX3NldF9vcGVyYXRpb24oX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwKKwkJCQkgICAgICBfX3Jlc3VsdCwKKwkJCQkgICAgICBfX2ludGVyc2VjdGlvbl9mdW5jPF9JSXRlciwKKwkJCQkgICAgICBfT3V0cHV0SXRlcmF0b3IsIF9Db21wYXJlPihfX2NvbXApKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVyLAorICAgICAgICAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3BhcmFsbGVsX3NldF9kaWZmZXJlbmNlKF9JSXRlciBfX2JlZ2luMSwgX0lJdGVyIF9fZW5kMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JSXRlciBfX2JlZ2luMiwgX0lJdGVyIF9fZW5kMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHJldHVybiBfX3BhcmFsbGVsX3NldF9vcGVyYXRpb24oX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwKKwkJCQkgICAgICBfX3Jlc3VsdCwKKwkJCQkgICAgICBfX2RpZmZlcmVuY2VfZnVuYzxfSUl0ZXIsCisJCQkJICAgICAgX091dHB1dEl0ZXJhdG9yLCBfQ29tcGFyZT4oX19jb21wKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAorICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgX091dHB1dEl0ZXJhdG9yCisgICAgX19wYXJhbGxlbF9zZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lJdGVyIF9fYmVnaW4xLCBfSUl0ZXIgX19lbmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJX0lJdGVyIF9fYmVnaW4yLCBfSUl0ZXIgX19lbmQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJX0NvbXBhcmUgX19jb21wKQorICAgIHsKKyAgICAgIHJldHVybiBfX3BhcmFsbGVsX3NldF9vcGVyYXRpb24oX19iZWdpbjEsIF9fZW5kMSwgX19iZWdpbjIsIF9fZW5kMiwKKwkJCQkgICAgICBfX3Jlc3VsdCwKKwkJCQkgICAgICBfX3N5bW1ldHJpY19kaWZmZXJlbmNlX2Z1bmM8X0lJdGVyLAorCQkJCSAgICAgIF9PdXRwdXRJdGVyYXRvciwgX0NvbXBhcmU+KF9fY29tcCkpOworICAgIH0KK30KKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX1NFVF9PUEVSQVRJT05TX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvc2V0dGluZ3MuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTQ2MjE2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC9zZXR0aW5ncy5oCkBAIC0wLDAgKzEsMzQzIEBACisvLyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMKKy8vIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisvLyB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorLy8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcGFyYWxsZWwvc2V0dGluZ3MuaAorICogIEBicmllZiBSdW50aW1lIHNldHRpbmdzIGFuZCB0dW5pbmcgcGFyYW1ldGVycywgaGV1cmlzdGljcyB0byBkZWNpZGUKKyAqICB3aGV0aGVyIHRvIHVzZSBwYXJhbGxlbGl6ZWQgYWxnb3JpdGhtcy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqCisgKiAgQHNlY3Rpb24gcGFyYWxsZWxpemF0aW9uX2RlY2lzaW9uIAorICogIFRoZSBkZWNpc2lvbiB3aGV0aGVyIHRvIHJ1biBhbiBhbGdvcml0aG0gaW4gcGFyYWxsZWwuCisgKgorICogIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdGhlIHVzZXIgY2FuIHN3aXRjaCBvbiBhbmQgX19vZmYgdGhlIHBhcmFsbGVsCisgKiAgZXhlY3V0aW9uIG9mIGFuIGFsZ29yaXRobSwgYm90aCBhdCBjb21waWxlLSBhbmQgcnVuLXRpbWUuCisgKgorICogIE9ubHkgc2VxdWVudGlhbCBleGVjdXRpb24gY2FuIGJlIGZvcmNlZCBhdCBjb21waWxlLXRpbWUuICBUaGlzCisgKiAgcmVkdWNlcyBjb2RlIHNpemUgYW5kIHByb3RlY3RzIGNvZGUgcGFydHMgdGhhdCBoYXZlCisgKiAgbm9uLXRocmVhZC1zYWZlIHNpZGUgZWZmZWN0cy4KKyAqCisgKiAgVWx0aW1hdGVseSwgZm9yY2luZyBwYXJhbGxlbCBleGVjdXRpb24gYXQgY29tcGlsZS10aW1lIG1ha2VzCisgKiAgc2Vuc2UuICBPZnRlbiwgdGhlIHNlcXVlbnRpYWwgYWxnb3JpdGhtIGltcGxlbWVudGF0aW9uIGlzIHVzZWQgYXMKKyAqICBhIHN1YnJvdXRpbmUsIHNvIG5vIHJlZHVjdGlvbiBpbiBjb2RlIHNpemUgY2FuIGJlIGFjaGlldmVkLiAgQWxzbywKKyAqICB0aGUgbWFjaGluZSB0aGUgcHJvZ3JhbSBpcyBydW4gb24gbWlnaHQgaGF2ZSBvbmx5IG9uZSBwcm9jZXNzb3IKKyAqICBjb3JlLCBzbyB0byBhdm9pZCBvdmVyaGVhZCwgdGhlIGFsZ29yaXRobSBpcyBleGVjdXRlZAorICogIHNlcXVlbnRpYWxseS4KKyAqCisgKiAgVG8gZm9yY2Ugc2VxdWVudGlhbCBleGVjdXRpb24gb2YgYW4gYWxnb3JpdGhtIHVsdGltYXRlbHkgYXQKKyAqICBjb21waWxlLXRpbWUsIHRoZSB1c2VyIG11c3QgYWRkIHRoZSB0YWcKKyogIGdudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXIgbGlzdCwKKyAqICBlLiBnLgorICoKKyAqICBcY29kZQorICogIHN0ZDo6c29ydChfX3YuYmVnaW4oKSwgX192LmVuZCgpLCBfX2dudV9wYXJhbGxlbDo6c2VxdWVudGlhbF90YWcoKSk7CisgKiAgXGVuZGNvZGUKKyAqCisgKiAgVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggYWxsIG92ZXJsb2FkZWQgYWxnb3JpdGhtIHZhcmlhbnRzLiAgTm8KKyAqICBhZGRpdGlvbmFsIGNvZGUgd2lsbCBiZSBpbnN0YW50aWF0ZWQsIGF0IGFsbC4gIFRoZSBzYW1lIGhvbGRzIGZvcgorICogIG1vc3QgYWxnb3JpdGhtIGNhbGxzIHdpdGggaXRlcmF0b3JzIG5vdCBwcm92aWRpbmcgcmFuZG9tIGFjY2Vzcy4KKyAqCisgKiAgSWYgdGhlIGFsZ29yaXRobSBjYWxsIGlzIG5vdCBmb3JjZWQgdG8gYmUgZXhlY3V0ZWQgc2VxdWVudGlhbGx5CisgKiAgYXQgY29tcGlsZS10aW1lLCB0aGUgZGVjaXNpb24gaXMgbWFkZSBhdCBydW4tdGltZS4KKyAqICBUaGUgZ2xvYmFsIHZhcmlhYmxlIF9fZ251X3BhcmFsbGVsOjpfU2V0dGluZ3M6OmFsZ29yaXRobV9zdHJhdGVneQorICogIGlzIGNoZWNrZWQuIF9JdCBpcyBhIHRyaXN0YXRlIHZhcmlhYmxlIGNvcnJlc3BvbmRpbmcgdG86CisgKgorICogIGEuIGZvcmNlX3NlcXVlbnRpYWwsIG1lYW5pbmcgdGhlIHNlcXVlbnRpYWwgYWxnb3JpdGhtIGlzIGV4ZWN1dGVkLgorKiAgYi4gZm9yY2VfcGFyYWxsZWwsIG1lYW5pbmcgdGhlIHBhcmFsbGVsIGFsZ29yaXRobSBpcyBleGVjdXRlZC4KKyogIGMuIGhldXJpc3RpYworICoKKyAqICBGb3IgaGV1cmlzdGljLCB0aGUgcGFyYWxsZWwgYWxnb3JpdGhtIGltcGxlbWVudGF0aW9uIGlzIGNhbGxlZAorICogIG9ubHkgaWYgdGhlIGlucHV0IHNpemUgaXMgc3VmZmljaWVudGx5IGxhcmdlLiAgRm9yIG1vc3QKKyAqICBhbGdvcml0aG1zLCB0aGUgaW5wdXQgc2l6ZSBpcyB0aGUgKGNvbWJpbmVkKSBsZW5ndGggb2YgdGhlIGlucHV0CisqICBzZXF1ZW5jZShfX3MpLiAgVGhlIHRocmVzaG9sZCBjYW4gYmUgc2V0IGJ5IHRoZSB1c2VyLCBpbmRpdmlkdWFsbHkKKyAqICBmb3IgZWFjaCBhbGdvcml0aG0uICBUaGUgYWNjb3JkaW5nIHZhcmlhYmxlcyBhcmUgY2FsbGVkCisqICBnbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6W2FsZ29yaXRobV1fbWluaW1hbF9uIC4KKyAqCisgKiAgRm9yIHNvbWUgb2YgdGhlIGFsZ29yaXRobXMsIHRoZXJlIGFyZSBldmVuIG1vcmUgdHVuaW5nIG9wdGlvbnMsCisgKiAgZS4gZy4gdGhlIGFiaWxpdHkgdG8gY2hvb3NlIGZyb20gbXVsdGlwbGUgYWxnb3JpdGhtIHZhcmlhbnRzLiAgU2VlCisgKiAgYmVsb3cgZm9yIGRldGFpbHMuCisgKi8KKworLy8gV3JpdHRlbiBieSBKb2hhbm5lcyBTaW5nbGVyIGFuZCBGZWxpeCBQdXR6ZS4KKworI2lmbmRlZiBfR0xJQkNYWF9QQVJBTExFTF9TRVRUSU5HU19ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX1NFVFRJTkdTX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvdHlwZXMuaD4KKworLyoqIAorICAqIEBicmllZiBEZXRlcm1pbmUgYXQgY29tcGlsZSg/KS10aW1lIGlmIHRoZSBwYXJhbGxlbCB2YXJpYW50IG9mIGFuCisgICogYWxnb3JpdGhtIHNob3VsZCBiZSBjYWxsZWQuCisgICogQHBhcmFtIF9fYyBBIGNvbmRpdGlvbiB0aGF0IGlzIGNvbnZlcnRpYmxlIHRvIGJvb2wgdGhhdCBpcyBvdmVycnVsZWQgYnkKKyAgKiBfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjphbGdvcml0aG1fc3RyYXRlZ3kuIFVzdWFsbHkgYSBkZWNpc2lvbgorICAqIGJhc2VkIG9uIHRoZSBpbnB1dCBzaXplLgorICAqLworI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9DT05ESVRJT04oX19jKSBcCisgIChfX2dudV9wYXJhbGxlbDo6X1NldHRpbmdzOjpnZXQoKS5hbGdvcml0aG1fc3RyYXRlZ3kgXAorICAgICE9IF9fZ251X3BhcmFsbGVsOjpmb3JjZV9zZXF1ZW50aWFsIFwKKyAgJiYgKChfX2dudV9wYXJhbGxlbDo6X19nZXRfbWF4X3RocmVhZHMoKSA+IDEgJiYgKF9fYykpIFwKKyAgICAgfHwgX19nbnVfcGFyYWxsZWw6Ol9TZXR0aW5nczo6Z2V0KCkuYWxnb3JpdGhtX3N0cmF0ZWd5IFwKKyAgICAgICAgPT0gX19nbnVfcGFyYWxsZWw6OmZvcmNlX3BhcmFsbGVsKSkKKworLyoKK2lubGluZSBib29sCitwYXJhbGxlbF9jb25kaXRpb24oYm9vbCBfX2MpCit7CisgIGJvb2wgcmV0ID0gZmFsc2U7CisgIGNvbnN0IF9TZXR0aW5ncyYgX19zID0gX1NldHRpbmdzOjpnZXQoKTsKKyAgaWYgKF9fcy5hbGdvcml0aG1fc3RyYXRlZ3kgIT0gZm9yY2Vfc2VxZW50aWFsKQorICAgIHsKKyAgICAgIGlmIChfX3MuYWxnb3JpdGhtX3N0cmF0ZWd5ID09IGZvcmNlX3BhcmFsbGVsKQorICAgICAgICByZXQgPSB0cnVlOworICAgICAgZWxzZQorICAgICAgICByZXQgPSBfX2dldF9tYXhfdGhyZWFkcygpID4gMSAmJiBfX2M7CisgICAgfQorICByZXR1cm4gcmV0OworfQorKi8KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8vLyBjbGFzcyBfU2V0dGluZ3MKKyAgLy8vIFJ1bi10aW1lIHNldHRpbmdzIGZvciB0aGUgcGFyYWxsZWwgbW9kZSBpbmNsdWRpbmcgYWxsIHR1bmFibGUgcGFyYW1ldGVycy4KKyAgc3RydWN0IF9TZXR0aW5ncworICB7CisgICAgX0FsZ29yaXRobVN0cmF0ZWd5ICAgICAgICAgIGFsZ29yaXRobV9zdHJhdGVneTsKKyAgICAKKyAgICBfU29ydEFsZ29yaXRobSAgICAgICAgICAgICAgc29ydF9hbGdvcml0aG07CisgICAgX1BhcnRpYWxTdW1BbGdvcml0aG0gICAgICAgIHBhcnRpYWxfc3VtX2FsZ29yaXRobTsKKyAgICBfTXVsdGl3YXlNZXJnZUFsZ29yaXRobSAgICAgbXVsdGl3YXlfbWVyZ2VfYWxnb3JpdGhtOworICAgIF9GaW5kQWxnb3JpdGhtICAgICAgICAgICAgICBmaW5kX2FsZ29yaXRobTsKKworICAgIF9TcGxpdHRpbmdBbGdvcml0aG0gICAgICAgICBzb3J0X3NwbGl0dGluZzsKKyAgICBfU3BsaXR0aW5nQWxnb3JpdGhtICAgICAgICAgbWVyZ2Vfc3BsaXR0aW5nOworICAgIF9TcGxpdHRpbmdBbGdvcml0aG0gICAgICAgICBtdWx0aXdheV9tZXJnZV9zcGxpdHRpbmc7CisKKyAgICAvLyBQZXItYWxnb3JpdGhtIHNldHRpbmdzLgorCisgICAgLy8vIE1pbmltYWwgaW5wdXQgc2l6ZSBmb3IgYWNjdW11bGF0ZS4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgYWNjdW11bGF0ZV9taW5pbWFsX247CisKKyAgICAvLy8gTWluaW1hbCBpbnB1dCBzaXplIGZvciBhZGphY2VudF9kaWZmZXJlbmNlLgorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhZGphY2VudF9kaWZmZXJlbmNlX21pbmltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIGNvdW50IGFuZCBjb3VudF9pZi4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgY291bnRfbWluaW1hbF9uOworCisgICAgLy8vIE1pbmltYWwgaW5wdXQgc2l6ZSBmb3IgZmlsbC4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgZmlsbF9taW5pbWFsX247CisKKyAgICAvLy8gQmxvY2sgc2l6ZSBpbmNyZWFzZSBmYWN0b3IgZm9yIGZpbmQuCisgICAgZG91YmxlICAgICAgICAgICAgICAgICAgICAgIGZpbmRfaW5jcmVhc2luZ19mYWN0b3I7CisKKyAgICAvLy8gSW5pdGlhbCBibG9jayBzaXplIGZvciBmaW5kLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBmaW5kX2luaXRpYWxfYmxvY2tfc2l6ZTsKKworICAgIC8vLyBNYXhpbWFsIGJsb2NrIHNpemUgZm9yIGZpbmQuCisgICAgX1NlcXVlbmNlSW5kZXggICAgICAgICAgICAgIGZpbmRfbWF4aW11bV9ibG9ja19zaXplOworCisgICAgLy8vIFN0YXJ0IHdpdGggbG9va2luZyBmb3IgdGhpcyBtYW55IGVsZW1lbnRzIHNlcXVlbnRpYWxseSwgZm9yIGZpbmQuCisgICAgX1NlcXVlbmNlSW5kZXggICAgICAgICAgICAgIGZpbmRfc2VxdWVudGlhbF9zZWFyY2hfc2l6ZTsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIGZvcl9lYWNoLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBmb3JfZWFjaF9taW5pbWFsX247CisKKyAgICAvLy8gTWluaW1hbCBpbnB1dCBzaXplIGZvciBnZW5lcmF0ZS4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgZ2VuZXJhdGVfbWluaW1hbF9uOworCisgICAgLy8vIE1pbmltYWwgaW5wdXQgc2l6ZSBmb3IgbWF4X2VsZW1lbnQuCisgICAgX1NlcXVlbmNlSW5kZXggICAgICAgICAgICAgIG1heF9lbGVtZW50X21pbmltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIG1lcmdlLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBtZXJnZV9taW5pbWFsX247CisKKyAgICAvLy8gT3ZlcnNhbXBsaW5nIGZhY3RvciBmb3IgbWVyZ2UuCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIG1lcmdlX292ZXJzYW1wbGluZzsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIG1pbl9lbGVtZW50LgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBtaW5fZWxlbWVudF9taW5pbWFsX247CisKKyAgICAvLy8gTWluaW1hbCBpbnB1dCBzaXplIGZvciBtdWx0aXdheV9tZXJnZS4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgbXVsdGl3YXlfbWVyZ2VfbWluaW1hbF9uOworCisgICAgLy8vIE92ZXJzYW1wbGluZyBmYWN0b3IgZm9yIG11bHRpd2F5X21lcmdlLgorICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXdheV9tZXJnZV9taW5pbWFsX2s7CisKKyAgICAvLy8gT3ZlcnNhbXBsaW5nIGZhY3RvciBmb3IgbXVsdGl3YXlfbWVyZ2UuCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIG11bHRpd2F5X21lcmdlX292ZXJzYW1wbGluZzsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIG50aF9lbGVtZW50LgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBudGhfZWxlbWVudF9taW5pbWFsX247CisKKyAgICAvLy8gQ2h1bmsgc2l6ZSBmb3IgcGFydGl0aW9uLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBwYXJ0aXRpb25fY2h1bmtfc2l6ZTsKKworICAgIC8vLyBDaHVuayBzaXplIGZvciBwYXJ0aXRpb24sIHJlbGF0aXZlIHRvIGlucHV0IHNpemUuICBJZiA+IDAuMCwKKyAgICAvLy8gdGhpcyB2YWx1ZSBvdmVycmlkZXMgcGFydGl0aW9uX2NodW5rX3NpemUuCisgICAgZG91YmxlICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9jaHVua19zaGFyZTsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIHBhcnRpdGlvbi4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgcGFydGl0aW9uX21pbmltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIHBhcnRpYWxfc29ydC4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgcGFydGlhbF9zb3J0X21pbmltYWxfbjsKKworICAgIC8vLyBSYXRpbyBmb3IgcGFydGlhbF9zdW0uIEFzc3VtZSAic3VtIGFuZCB3cml0ZSByZXN1bHQiIHRvIGJlCisgICAgLy8vIHRoaXMgZmFjdG9yIHNsb3dlciB0aGFuIGp1c3QgInN1bSIuCisgICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxfc3VtX2RpbGF0aW9uOworCisgICAgLy8vIE1pbmltYWwgaW5wdXQgc2l6ZSBmb3IgcGFydGlhbF9zdW0uCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHBhcnRpYWxfc3VtX21pbmltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIHJhbmRvbV9zaHVmZmxlLgorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICByYW5kb21fc2h1ZmZsZV9taW5pbWFsX247CisKKyAgICAvLy8gTWluaW1hbCBpbnB1dCBzaXplIGZvciByZXBsYWNlIGFuZCByZXBsYWNlX2lmLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICByZXBsYWNlX21pbmltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIHNldF9kaWZmZXJlbmNlLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBzZXRfZGlmZmVyZW5jZV9taW5pbWFsX247CisKKyAgICAvLy8gTWluaW1hbCBpbnB1dCBzaXplIGZvciBzZXRfaW50ZXJzZWN0aW9uLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBzZXRfaW50ZXJzZWN0aW9uX21pbmltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZS4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlX21pbmltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIHNldF91bmlvbi4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgc2V0X3VuaW9uX21pbmltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIHBhcmFsbGVsIHNvcnRpbmcuCisgICAgX1NlcXVlbmNlSW5kZXggICAgICAgICAgICAgIHNvcnRfbWluaW1hbF9uOworCisgICAgLy8vIE92ZXJzYW1wbGluZyBmYWN0b3IgZm9yIHBhcmFsbGVsIHN0ZDo6c29ydCAoTVdNUykuCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHNvcnRfbXdtc19vdmVyc2FtcGxpbmc7CisKKyAgICAvLy8gU3VjaCBtYW55IHNhbXBsZXMgdG8gdGFrZSB0byBmaW5kIGEgZ29vZCBwaXZvdCAocXVpY2tzb3J0KS4KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgc29ydF9xc19udW1fc2FtcGxlc19wcmVzZXQ7CisKKyAgICAvLy8gTWF4aW1hbCBzdWJzZXF1ZW5jZSBfX2xlbmd0aCB0byBzd2l0Y2ggdG8gdW5iYWxhbmNlZCBfX2Jhc2UgY2FzZS4KKyAgICAvLy8gQXBwbGllcyB0byBzdGQ6OnNvcnQgd2l0aCBkeW5hbWljYWxseSBsb2FkLWJhbGFuY2VkIHF1aWNrc29ydC4KKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgc29ydF9xc2JfYmFzZV9jYXNlX21heGltYWxfbjsKKworICAgIC8vLyBNaW5pbWFsIGlucHV0IHNpemUgZm9yIHBhcmFsbGVsIHN0ZDo6dHJhbnNmb3JtLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICB0cmFuc2Zvcm1fbWluaW1hbF9uOworCisgICAgLy8vIE1pbmltYWwgaW5wdXQgc2l6ZSBmb3IgdW5pcXVlX2NvcHkuIAorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICB1bmlxdWVfY29weV9taW5pbWFsX247CisKKyAgICBfU2VxdWVuY2VJbmRleCAgICAgICAgICAgICAgd29ya3N0ZWFsaW5nX2NodW5rX3NpemU7CisKKyAgICAvLyBIYXJkd2FyZSBkZXBlbmRlbnQgdHVuaW5nIHBhcmFtZXRlcnMuCisKKyAgICAvLy8gc2l6ZSBvZiB0aGUgTDEgY2FjaGUgaW4gYnl0ZXMgKHVuZGVyZXN0aW1hdGlvbikuCisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgICAgICAgIEwxX2NhY2hlX3NpemU7CisKKyAgICAvLy8gc2l6ZSBvZiB0aGUgTDIgY2FjaGUgaW4gYnl0ZXMgKHVuZGVyZXN0aW1hdGlvbikuCisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgICAgICAgIEwyX2NhY2hlX3NpemU7CisKKyAgICAvLy8gc2l6ZSBvZiB0aGUgVHJhbnNsYXRpb24gTG9va2FzaWRlIEJ1ZmZlciAodW5kZXJlc3RpbWF0aW9uKS4KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgVExCX3NpemU7CisKKyAgICAvLy8gT3ZlcmVzdGltYXRpb24gb2YgY2FjaGUgbGluZSBzaXplLiAgVXNlZCB0byBhdm9pZCBmYWxzZQorICAgIC8vLyBzaGFyaW5nLCBpLmUuIGVsZW1lbnRzIG9mIGRpZmZlcmVudCB0aHJlYWRzIGFyZSBhdCBsZWFzdCB0aGlzCisgICAgLy8vIGFtb3VudCBhcGFydC4KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgY2FjaGVfbGluZV9zaXplOworCisgICAgLy8gU3RhdGlzdGljcy4KKworICAgIC8vLyBUaGUgbnVtYmVyIG9mIHN0b2xlbiByYW5nZXMgaW4gbG9hZC1iYWxhbmNlZCBxdWlja3NvcnQuCisgICAgX1NlcXVlbmNlSW5kZXggICAgICAgICAgICAgIHFzYl9zdGVhbHM7CisKKyAgICAvLy8gTWluaW1hbCBpbnB1dCBzaXplIGZvciBzZWFyY2ggYW5kIHNlYXJjaF9uLgorICAgIF9TZXF1ZW5jZUluZGV4ICAgICAgICAgICAgICBzZWFyY2hfbWluaW1hbF9uOworCisgICAgLy8vIEJsb2NrIHNpemUgc2NhbGUtZG93biBmYWN0b3Igd2l0aCByZXNwZWN0IHRvIGN1cnJlbnQgcG9zaXRpb24uCisgICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgIGZpbmRfc2NhbGVfZmFjdG9yOworCisgICAgLy8vIEdldCB0aGUgZ2xvYmFsIHNldHRpbmdzLgorICAgIF9HTElCQ1hYX0NPTlNUIHN0YXRpYyBjb25zdCBfU2V0dGluZ3MmCisgICAgZ2V0KCkgdGhyb3coKTsKKworICAgIC8vLyBTZXQgdGhlIGdsb2JhbCBzZXR0aW5ncy4KKyAgICBzdGF0aWMgdm9pZAorICAgIHNldChfU2V0dGluZ3MmKSB0aHJvdygpOworCisgICAgZXhwbGljaXQgCisgICAgX1NldHRpbmdzKCkgOgorICAgICAgICAgICAgYWxnb3JpdGhtX3N0cmF0ZWd5KGhldXJpc3RpYyksCisgICAgICAgICAgICBzb3J0X2FsZ29yaXRobShNV01TKSwKKyAgICAgICAgICAgIHBhcnRpYWxfc3VtX2FsZ29yaXRobShMSU5FQVIpLAorICAgICAgICAgICAgbXVsdGl3YXlfbWVyZ2VfYWxnb3JpdGhtKExPU0VSX1RSRUUpLAorICAgICAgICAgICAgZmluZF9hbGdvcml0aG0oQ09OU1RBTlRfU0laRV9CTE9DS1MpLAorICAgICAgICAgICAgc29ydF9zcGxpdHRpbmcoRVhBQ1QpLAorICAgICAgICAgICAgbWVyZ2Vfc3BsaXR0aW5nKEVYQUNUKSwKKyAgICAgICAgICAgIG11bHRpd2F5X21lcmdlX3NwbGl0dGluZyhFWEFDVCksCisgICAgICAgICAgICBhY2N1bXVsYXRlX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIGFkamFjZW50X2RpZmZlcmVuY2VfbWluaW1hbF9uKDEwMDApLAorICAgICAgICAgICAgY291bnRfbWluaW1hbF9uKDEwMDApLAorICAgICAgICAgICAgZmlsbF9taW5pbWFsX24oMTAwMCksCisgICAgICAgICAgICBmaW5kX2luY3JlYXNpbmdfZmFjdG9yKDIuMCksCisgICAgICAgICAgICBmaW5kX2luaXRpYWxfYmxvY2tfc2l6ZSgyNTYpLAorICAgICAgICAgICAgZmluZF9tYXhpbXVtX2Jsb2NrX3NpemUoODE5MiksCisgICAgICAgICAgICBmaW5kX3NlcXVlbnRpYWxfc2VhcmNoX3NpemUoMjU2KSwKKyAgICAgICAgICAgIGZvcl9lYWNoX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIGdlbmVyYXRlX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIG1heF9lbGVtZW50X21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIG1lcmdlX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIG1lcmdlX292ZXJzYW1wbGluZygxMCksCisgICAgICAgICAgICBtaW5fZWxlbWVudF9taW5pbWFsX24oMTAwMCksCisgICAgICAgICAgICBtdWx0aXdheV9tZXJnZV9taW5pbWFsX24oMTAwMCksCisgICAgICAgICAgICBtdWx0aXdheV9tZXJnZV9taW5pbWFsX2soMiksIG11bHRpd2F5X21lcmdlX292ZXJzYW1wbGluZygxMCksCisgICAgICAgICAgICBudGhfZWxlbWVudF9taW5pbWFsX24oMTAwMCksCisgICAgICAgICAgICBwYXJ0aXRpb25fY2h1bmtfc2l6ZSgxMDAwKSwKKyAgICAgICAgICAgIHBhcnRpdGlvbl9jaHVua19zaGFyZSgwLjApLAorICAgICAgICAgICAgcGFydGl0aW9uX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIHBhcnRpYWxfc29ydF9taW5pbWFsX24oMTAwMCksCisgICAgICAgICAgICBwYXJ0aWFsX3N1bV9kaWxhdGlvbigxLjBmKSwKKyAgICAgICAgICAgIHBhcnRpYWxfc3VtX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIHJhbmRvbV9zaHVmZmxlX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIHJlcGxhY2VfbWluaW1hbF9uKDEwMDApLAorICAgICAgICAgICAgc2V0X2RpZmZlcmVuY2VfbWluaW1hbF9uKDEwMDApLAorICAgICAgICAgICAgc2V0X2ludGVyc2VjdGlvbl9taW5pbWFsX24oMTAwMCksCisgICAgICAgICAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2VfbWluaW1hbF9uKDEwMDApLAorICAgICAgICAgICAgc2V0X3VuaW9uX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIHNvcnRfbWluaW1hbF9uKDEwMDApLAorICAgICAgICAgICAgc29ydF9td21zX292ZXJzYW1wbGluZygxMCksCisgICAgICAgICAgICBzb3J0X3FzX251bV9zYW1wbGVzX3ByZXNldCgxMDApLAorICAgICAgICAgICAgc29ydF9xc2JfYmFzZV9jYXNlX21heGltYWxfbigxMDApLAorICAgICAgICAgICAgdHJhbnNmb3JtX21pbmltYWxfbigxMDAwKSwKKyAgICAgICAgICAgIHVuaXF1ZV9jb3B5X21pbmltYWxfbigxMDAwMCksCisgICAgICAgICAgICB3b3Jrc3RlYWxpbmdfY2h1bmtfc2l6ZSgxMDApLAorICAgICAgICAgICAgTDFfY2FjaGVfc2l6ZSgxNiA8PCAxMCksCisgICAgICAgICAgICBMMl9jYWNoZV9zaXplKDI1NiA8PCAxMCksCisgICAgICAgICAgICBUTEJfc2l6ZSgxMjgpLAorICAgICAgICAgICAgY2FjaGVfbGluZV9zaXplKDY0KSwKKyAgICAgICAgICAgIHFzYl9zdGVhbHMoMCksCisgICAgICAgICAgICBzZWFyY2hfbWluaW1hbF9uKDEwMDApLAorICAgICAgICAgICAgZmluZF9zY2FsZV9mYWN0b3IoMC4wMWYpCisgICAgeyB9CisgIH07Cit9CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9TRVRUSU5HU19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3NvcnQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvc29ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NTc5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3NvcnQuaApAQCAtMCwwICsxLDIzOCBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL3NvcnQuaAorICogIEBicmllZiBQYXJhbGxlbCBzb3J0aW5nIGFsZ29yaXRobSBzd2l0Y2guCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHBhcmFsbGVsIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworLy8gV3JpdHRlbiBieSBKb2hhbm5lcyBTaW5nbGVyLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX1NPUlRfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9TT1JUX0ggMQorCisjaW5jbHVkZSA8cGFyYWxsZWwvYmFzaWNfaXRlcmF0b3IuaD4KKyNpbmNsdWRlIDxwYXJhbGxlbC9mZWF0dXJlcy5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL3BhcmFsbGVsLmg+CisKKyNpZiBfR0xJQkNYWF9BU1NFUlRJT05TCisjaW5jbHVkZSA8cGFyYWxsZWwvY2hlY2tlcnMuaD4KKyNlbmRpZgorCisjaWYgX0dMSUJDWFhfTUVSR0VTT1JUCisjaW5jbHVkZSA8cGFyYWxsZWwvbXVsdGl3YXlfbWVyZ2Vzb3J0Lmg+CisjZW5kaWYKKworI2lmIF9HTElCQ1hYX1FVSUNLU09SVAorI2luY2x1ZGUgPHBhcmFsbGVsL3F1aWNrc29ydC5oPgorI2VuZGlmCisKKyNpZiBfR0xJQkNYWF9CQUxfUVVJQ0tTT1JUCisjaW5jbHVkZSA8cGFyYWxsZWwvYmFsYW5jZWRfcXVpY2tzb3J0Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8vcHJvdG90eXBlCisgIHRlbXBsYXRlPGJvb2wgX19zdGFibGUsIHR5cGVuYW1lIF9SQUl0ZXIsCisgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfUGFyYWxsZWxpc20+CisgICAgdm9pZAorICAgIF9fcGFyYWxsZWxfc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCSAgICBfQ29tcGFyZSBfX2NvbXAsIF9QYXJhbGxlbGlzbSBfX3BhcmFsbGVsaXNtKTsKKyAgICAgICAgCisgIC8qKiAKKyAgICogIEBicmllZiBDaG9vc2UgbXVsdGl3YXkgbWVyZ2Vzb3J0LCBzcGxpdHRpbmcgdmFyaWFudCBhdCBydW4tdGltZSwKKyAgICogIGZvciBwYXJhbGxlbCBzb3J0aW5nLgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiAgQHRwYXJhbSBfX3N0YWJsZSBTb3J0IHN0YWJsZS4KKyAgICogIEBjYWxsZ3JhcGggCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9fc3RhYmxlLCB0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fcGFyYWxsZWxfc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCSAgICBfQ29tcGFyZSBfX2NvbXAsIG11bHRpd2F5X21lcmdlc29ydF90YWcgX19wYXJhbGxlbGlzbSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fZW5kIC0gX19iZWdpbikKKworICAgICAgaWYoX1NldHRpbmdzOjpnZXQoKS5zb3J0X3NwbGl0dGluZyA9PSBFWEFDVCkKKwlwYXJhbGxlbF9zb3J0X213bXM8X19zdGFibGUsIHRydWU+CisJICAoX19iZWdpbiwgX19lbmQsIF9fY29tcCwgX19wYXJhbGxlbGlzbS5fX2dldF9udW1fdGhyZWFkcygpKTsKKyAgICAgIGVsc2UKKwlwYXJhbGxlbF9zb3J0X213bXM8X19zdGFibGUsIGZhbHNlPgorCSAgKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsIF9fcGFyYWxsZWxpc20uX19nZXRfbnVtX3RocmVhZHMoKSk7CisgICAgfQorCisgIC8qKiAKKyAgICogIEBicmllZiBDaG9vc2UgbXVsdGl3YXkgbWVyZ2Vzb3J0IHdpdGggZXhhY3Qgc3BsaXR0aW5nLAorICAgKiAgZm9yIHBhcmFsbGVsIHNvcnRpbmcuCisgICAqICBAcGFyYW0gX19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAqICBAdHBhcmFtIF9fc3RhYmxlIFNvcnQgc3RhYmxlLgorICAgKiAgQGNhbGxncmFwaCAKKyAgICovCisgIHRlbXBsYXRlPGJvb2wgX19zdGFibGUsIHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSB2b2lkCisgICAgX19wYXJhbGxlbF9zb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKwkJICAgIF9Db21wYXJlIF9fY29tcCwKKwkJICAgIG11bHRpd2F5X21lcmdlc29ydF9leGFjdF90YWcgX19wYXJhbGxlbGlzbSkKKyAgICB7CisgICAgICBfR0xJQkNYWF9DQUxMKF9fZW5kIC0gX19iZWdpbikKKworICAgICAgcGFyYWxsZWxfc29ydF9td21zPF9fc3RhYmxlLCB0cnVlPgorICAgICAgICAoX19iZWdpbiwgX19lbmQsIF9fY29tcCwgX19wYXJhbGxlbGlzbS5fX2dldF9udW1fdGhyZWFkcygpKTsKKyAgICB9CisKKyAgLyoqIAorICAgKiAgQGJyaWVmIENob29zZSBtdWx0aXdheSBtZXJnZXNvcnQgd2l0aCBzcGxpdHRpbmcgYnkgc2FtcGxpbmcsCisgICAqICBmb3IgcGFyYWxsZWwgc29ydGluZy4KKyAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fZW5kIEVuZCBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICogIEB0cGFyYW0gX19zdGFibGUgU29ydCBzdGFibGUuCisgICAqICBAY2FsbGdyYXBoIAorICAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfX3N0YWJsZSwgdHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3BhcmFsbGVsX3NvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorCQkgICAgX0NvbXBhcmUgX19jb21wLAorCQkgICAgbXVsdGl3YXlfbWVyZ2Vzb3J0X3NhbXBsaW5nX3RhZyBfX3BhcmFsbGVsaXNtKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19lbmQgLSBfX2JlZ2luKQorCisgICAgICBwYXJhbGxlbF9zb3J0X213bXM8X19zdGFibGUsIGZhbHNlPgorICAgICAgKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsIF9fcGFyYWxsZWxpc20uX19nZXRfbnVtX3RocmVhZHMoKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENob29zZSBxdWlja3NvcnQgZm9yIHBhcmFsbGVsIHNvcnRpbmcuCisgICAqICBAcGFyYW0gX19iZWdpbiBCZWdpbiBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2VuZCBFbmQgaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19jb21wIENvbXBhcmF0b3IuCisgICAqICBAdHBhcmFtIF9fc3RhYmxlIFNvcnQgc3RhYmxlLgorICAgKiAgQGNhbGxncmFwaCAKKyAgICovCisgIHRlbXBsYXRlPGJvb2wgX19zdGFibGUsIHR5cGVuYW1lIF9SQUl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGlubGluZSB2b2lkCisgICAgX19wYXJhbGxlbF9zb3J0KF9SQUl0ZXIgX19iZWdpbiwgX1JBSXRlciBfX2VuZCwKKwkJICAgIF9Db21wYXJlIF9fY29tcCwgcXVpY2tzb3J0X3RhZyBfX3BhcmFsbGVsaXNtKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19lbmQgLSBfX2JlZ2luKQorCisgICAgICBfR0xJQkNYWF9QQVJBTExFTF9BU1NFUlQoX19zdGFibGUgPT0gZmFsc2UpOworCisgICAgICBfX3BhcmFsbGVsX3NvcnRfcXMoX19iZWdpbiwgX19lbmQsIF9fY29tcCwKKwkJCSBfX3BhcmFsbGVsaXNtLl9fZ2V0X251bV90aHJlYWRzKCkpOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBDaG9vc2UgYmFsYW5jZWQgcXVpY2tzb3J0IGZvciBwYXJhbGxlbCBzb3J0aW5nLgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiAgQHRwYXJhbSBfX3N0YWJsZSBTb3J0IHN0YWJsZS4KKyAgICogIEBjYWxsZ3JhcGggCisgICAqLworICAgdGVtcGxhdGU8Ym9vbCBfX3N0YWJsZSwgdHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgIGlubGluZSB2b2lkCisgICAgIF9fcGFyYWxsZWxfc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCSAgICAgX0NvbXBhcmUgX19jb21wLCBiYWxhbmNlZF9xdWlja3NvcnRfdGFnIF9fcGFyYWxsZWxpc20pCisgICAgIHsKKyAgICAgICBfR0xJQkNYWF9DQUxMKF9fZW5kIC0gX19iZWdpbikKKworICAgICAgIF9HTElCQ1hYX1BBUkFMTEVMX0FTU0VSVChfX3N0YWJsZSA9PSBmYWxzZSk7CisKKyAgICAgICBfX3BhcmFsbGVsX3NvcnRfcXNiKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsCisJCQkgICBfX3BhcmFsbGVsaXNtLl9fZ2V0X251bV90aHJlYWRzKCkpOworICAgICB9CisKKyAgLyoqIAorICAgKiAgQGJyaWVmIENob29zZSBtdWx0aXdheSBtZXJnZXNvcnQgd2l0aCBleGFjdCBzcGxpdHRpbmcsCisgICAqICBmb3IgcGFyYWxsZWwgc29ydGluZy4KKyAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fZW5kIEVuZCBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICogIEBwYXJhbSBfX2NvbXAgQ29tcGFyYXRvci4KKyAgICogIEB0cGFyYW0gX19zdGFibGUgU29ydCBzdGFibGUuCisgICAqICBAY2FsbGdyYXBoIAorICAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfX3N0YWJsZSwgdHlwZW5hbWUgX1JBSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CisgICAgaW5saW5lIHZvaWQKKyAgICBfX3BhcmFsbGVsX3NvcnQoX1JBSXRlciBfX2JlZ2luLCBfUkFJdGVyIF9fZW5kLAorCQkgICAgX0NvbXBhcmUgX19jb21wLCBkZWZhdWx0X3BhcmFsbGVsX3RhZyBfX3BhcmFsbGVsaXNtKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19lbmQgLSBfX2JlZ2luKQorCisgICAgICBfX3BhcmFsbGVsX3NvcnQ8X19zdGFibGU+CisJKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsCisJIG11bHRpd2F5X21lcmdlc29ydF9leGFjdF90YWcoX19wYXJhbGxlbGlzbS5fX2dldF9udW1fdGhyZWFkcygpKSk7CisgICAgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENob29zZSBhIHBhcmFsbGVsIHNvcnRpbmcgYWxnb3JpdGhtLgorICAgKiAgQHBhcmFtIF9fYmVnaW4gQmVnaW4gaXRlcmF0b3Igb2YgaW5wdXQgc2VxdWVuY2UuCisgICAqICBAcGFyYW0gX19lbmQgRW5kIGl0ZXJhdG9yIG9mIGlucHV0IHNlcXVlbmNlLgorICAgKiAgQHBhcmFtIF9fY29tcCBDb21wYXJhdG9yLgorICAgKiAgQHRwYXJhbSBfX3N0YWJsZSBTb3J0IHN0YWJsZS4KKyAgICogIEBjYWxsZ3JhcGggCisgICAqLworICB0ZW1wbGF0ZTxib29sIF9fc3RhYmxlLCB0eXBlbmFtZSBfUkFJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIF9fcGFyYWxsZWxfc29ydChfUkFJdGVyIF9fYmVnaW4sIF9SQUl0ZXIgX19lbmQsCisJCSAgICBfQ29tcGFyZSBfX2NvbXAsIHBhcmFsbGVsX3RhZyBfX3BhcmFsbGVsaXNtKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19lbmQgLSBfX2JlZ2luKQorICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPiBfVHJhaXRzVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0c1R5cGU6OmRpZmZlcmVuY2VfdHlwZSBfRGlmZmVyZW5jZVR5cGU7CisKKyAgICAgIGlmIChmYWxzZSkgOworI2lmIF9HTElCQ1hYX01FUkdFU09SVAorICAgICAgZWxzZSBpZiAoX19zdGFibGUgfHwgX1NldHRpbmdzOjpnZXQoKS5zb3J0X2FsZ29yaXRobSA9PSBNV01TKQorICAgICAgICB7CisgICAgICAgICAgaWYoX1NldHRpbmdzOjpnZXQoKS5zb3J0X3NwbGl0dGluZyA9PSBFWEFDVCkKKyAgICAgICAgICAgIHBhcmFsbGVsX3NvcnRfbXdtczxfX3N0YWJsZSwgdHJ1ZT4KKyAgICAgICAgICAgICAgKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsIF9fcGFyYWxsZWxpc20uX19nZXRfbnVtX3RocmVhZHMoKSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyYWxsZWxfc29ydF9td21zPGZhbHNlLCBmYWxzZT4KKyAgICAgICAgICAgICAgKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsIF9fcGFyYWxsZWxpc20uX19nZXRfbnVtX3RocmVhZHMoKSk7CisgICAgICAgIH0KKyNlbmRpZgorI2lmIF9HTElCQ1hYX1FVSUNLU09SVAorICAgICAgZWxzZSBpZiAoX1NldHRpbmdzOjpnZXQoKS5zb3J0X2FsZ29yaXRobSA9PSBRUykKKyAgICAgICAgX19wYXJhbGxlbF9zb3J0X3FzKF9fYmVnaW4sIF9fZW5kLCBfX2NvbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFsbGVsaXNtLl9fZ2V0X251bV90aHJlYWRzKCkpOworI2VuZGlmCisjaWYgX0dMSUJDWFhfQkFMX1FVSUNLU09SVAorICAgICAgZWxzZSBpZiAoX1NldHRpbmdzOjpnZXQoKS5zb3J0X2FsZ29yaXRobSA9PSBRU19CQUxBTkNFRCkKKyAgICAgICAgX19wYXJhbGxlbF9zb3J0X3FzYihfX2JlZ2luLCBfX2VuZCwgX19jb21wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFyYWxsZWxpc20uX19nZXRfbnVtX3RocmVhZHMoKSk7CisjZW5kaWYKKyAgICAgIGVsc2UKKyAgICAgICAgX19nbnVfc2VxdWVudGlhbDo6c29ydChfX2JlZ2luLCBfX2VuZCwgX19jb21wKTsKKyAgICB9Cit9IC8vIGVuZCBuYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX1NPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC90YWdzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3RhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzkwODgwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC90YWdzLmgKQEAgLTAsMCArMSwxODUgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogQGZpbGUgcGFyYWxsZWwvdGFncy5oCisgKiBAYnJpZWYgVGFncyBmb3IgY29tcGlsZS10aW1lIHNlbGVjdGlvbi4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEpvaGFubmVzIFNpbmdsZXIgYW5kIEZlbGl4IFB1dHplLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX1RBR1NfSAorI2RlZmluZSBfR0xJQkNYWF9QQVJBTExFTF9UQUdTX0ggMQorCisjaW5jbHVkZSA8b21wLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvdHlwZXMuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8qKiBAYnJpZWYgRm9yY2VzIHNlcXVlbnRpYWwgZXhlY3V0aW9uIGF0IGNvbXBpbGUgdGltZS4gKi8KKyAgc3RydWN0IHNlcXVlbnRpYWxfdGFnIHsgfTsKKworICAvKiogQGJyaWVmIFJlY29tbWVuZHMgcGFyYWxsZWwgZXhlY3V0aW9uIGF0IGNvbXBpbGUgdGltZSwKKyAgICogIG9wdGlvbmFsbHkgdXNpbmcgYSB1c2VyLXNwZWNpZmllZCBudW1iZXIgb2YgdGhyZWFkcy4gKi8KKyAgc3RydWN0IHBhcmFsbGVsX3RhZworICB7CisgICAgcHJpdmF0ZToKKyAgICAgIF9UaHJlYWRJbmRleCBfTV9udW1fdGhyZWFkczsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBAYnJpZWYgRGVmYXVsdCBjb25zdHJ1Y3Rvci4gVXNlIGRlZmF1bHQgbnVtYmVyIG9mIHRocmVhZHMuICovCisgICAgICBwYXJhbGxlbF90YWcoKQorICAgICAgeyBfTV9udW1fdGhyZWFkcyA9IDA7IH0KKworICAgICAgLyoqIEBicmllZiBEZWZhdWx0IGNvbnN0cnVjdG9yLiBSZWNvbW1lbmQgbnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSBfX251bV90aHJlYWRzIERlc2lyZWQgbnVtYmVyIG9mIHRocmVhZHMuICovCisgICAgICBwYXJhbGxlbF90YWcoX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMpCisgICAgICB7IF9NX251bV90aHJlYWRzID0gX19udW1fdGhyZWFkczsgfQorCisgICAgICAvKiogQGJyaWVmIEZpbmQgb3V0IGRlc2lyZWQgbnVtYmVyIG9mIHRocmVhZHMuCisgICAgICAgKiAgQHJldHVybiBEZXNpcmVkIG51bWJlciBvZiB0aHJlYWRzLiAqLworICAgICAgX1RocmVhZEluZGV4IF9fZ2V0X251bV90aHJlYWRzKCkKKyAgICAgIHsKKyAgICAgICAgaWYoX01fbnVtX3RocmVhZHMgPT0gMCkKKyAgICAgICAgICByZXR1cm4gb21wX2dldF9tYXhfdGhyZWFkcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIF9NX251bV90aHJlYWRzOworICAgICAgfQorCisgICAgICAvKiogQGJyaWVmIFNldCB0aGUgZGVzaXJlZCBudW1iZXIgb2YgdGhyZWFkcy4KKyAgICAgICAqICBAcGFyYW0gX19udW1fdGhyZWFkcyBEZXNpcmVkIG51bWJlciBvZiB0aHJlYWRzLiAqLworICAgICAgdm9pZCBzZXRfbnVtX3RocmVhZHMoX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMpCisgICAgICB7IF9NX251bV90aHJlYWRzID0gX19udW1fdGhyZWFkczsgfQorICB9OworCisgIC8qKiBAYnJpZWYgUmVjb21tZW5kcyBwYXJhbGxlbCBleGVjdXRpb24gdXNpbmcgdGhlCisgICAgICBkZWZhdWx0IHBhcmFsbGVsIGFsZ29yaXRobS4gKi8KKyAgc3RydWN0IGRlZmF1bHRfcGFyYWxsZWxfdGFnIDogcHVibGljIHBhcmFsbGVsX3RhZworICB7CisgICAgZGVmYXVsdF9wYXJhbGxlbF90YWcoKSB7IH0KKyAgICBkZWZhdWx0X3BhcmFsbGVsX3RhZyhfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcykKKyAgICA6IHBhcmFsbGVsX3RhZyhfX251bV90aHJlYWRzKSB7IH0KKyAgfTsKKworICAvKiogQGJyaWVmIFJlY29tbWVuZHMgcGFyYWxsZWwgZXhlY3V0aW9uIHVzaW5nIGR5bmFtaWMKKyAgICAgIGxvYWQtYmFsYW5jaW5nIGF0IGNvbXBpbGUgdGltZS4gKi8KKyAgc3RydWN0IGJhbGFuY2VkX3RhZyA6IHB1YmxpYyBwYXJhbGxlbF90YWcgeyB9OworCisgIC8qKiBAYnJpZWYgUmVjb21tZW5kcyBwYXJhbGxlbCBleGVjdXRpb24gdXNpbmcgc3RhdGljCisgICAgICBsb2FkLWJhbGFuY2luZyBhdCBjb21waWxlIHRpbWUuICovCisgIHN0cnVjdCB1bmJhbGFuY2VkX3RhZyA6IHB1YmxpYyBwYXJhbGxlbF90YWcgeyB9OworCisgIC8qKiBAYnJpZWYgUmVjb21tZW5kcyBwYXJhbGxlbCBleGVjdXRpb24gdXNpbmcgT3Blbk1QIGR5bmFtaWMKKyAgICAgIGxvYWQtYmFsYW5jaW5nIGF0IGNvbXBpbGUgdGltZS4gKi8KKyAgc3RydWN0IG9tcF9sb29wX3RhZyA6IHB1YmxpYyBwYXJhbGxlbF90YWcgeyB9OworCisgIC8qKiBAYnJpZWYgUmVjb21tZW5kcyBwYXJhbGxlbCBleGVjdXRpb24gdXNpbmcgT3Blbk1QIHN0YXRpYworICAgICAgbG9hZC1iYWxhbmNpbmcgYXQgY29tcGlsZSB0aW1lLiAqLworICBzdHJ1Y3Qgb21wX2xvb3Bfc3RhdGljX3RhZyA6IHB1YmxpYyBwYXJhbGxlbF90YWcgeyB9OworCisKKyAgLyoqIEBicmllZiBCYXNlIGNsYXNzIGZvciBmb3Igc3RkOjpmaW5kKCkgdmFyaWFudHMuICovCisgIHN0cnVjdCBmaW5kX3RhZyB7IH07CisKKworICAvKiogQGJyaWVmIEZvcmNlcyBwYXJhbGxlbCBtZXJnaW5nCisgICAqICB3aXRoIGV4YWN0IHNwbGl0dGluZywgYXQgY29tcGlsZSB0aW1lLiAqLworICBzdHJ1Y3QgZXhhY3RfdGFnIDogcHVibGljIHBhcmFsbGVsX3RhZworICB7CisgICAgZXhhY3RfdGFnKCkgeyB9CisgICAgZXhhY3RfdGFnKF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzKQorICAgIDogcGFyYWxsZWxfdGFnKF9fbnVtX3RocmVhZHMpIHsgfQorICB9OworCisgIC8qKiBAYnJpZWYgRm9yY2VzIHBhcmFsbGVsIG1lcmdpbmcKKyAgICogIHdpdGggZXhhY3Qgc3BsaXR0aW5nLCBhdCBjb21waWxlIHRpbWUuICovCisgIHN0cnVjdCBzYW1wbGluZ190YWcgOiBwdWJsaWMgcGFyYWxsZWxfdGFnCisgIHsKKyAgICBzYW1wbGluZ190YWcoKSB7IH0KKyAgICBzYW1wbGluZ190YWcoX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMpCisgICAgOiBwYXJhbGxlbF90YWcoX19udW1fdGhyZWFkcykgeyB9CisgIH07CisKKworICAvKiogQGJyaWVmIEZvcmNlcyBwYXJhbGxlbCBzb3J0aW5nIHVzaW5nIG11bHRpd2F5IG1lcmdlc29ydAorICAgKiAgYXQgY29tcGlsZSB0aW1lLiAqLworICBzdHJ1Y3QgbXVsdGl3YXlfbWVyZ2Vzb3J0X3RhZyA6IHB1YmxpYyBwYXJhbGxlbF90YWcKKyAgeworICAgIG11bHRpd2F5X21lcmdlc29ydF90YWcoKSB7IH0KKyAgICBtdWx0aXdheV9tZXJnZXNvcnRfdGFnKF9UaHJlYWRJbmRleCBfX251bV90aHJlYWRzKQorICAgIDogcGFyYWxsZWxfdGFnKF9fbnVtX3RocmVhZHMpIHsgfQorICB9OworCisgIC8qKiBAYnJpZWYgRm9yY2VzIHBhcmFsbGVsIHNvcnRpbmcgdXNpbmcgbXVsdGl3YXkgbWVyZ2Vzb3J0CisgICAqICB3aXRoIGV4YWN0IHNwbGl0dGluZyBhdCBjb21waWxlIHRpbWUuICovCisgIHN0cnVjdCBtdWx0aXdheV9tZXJnZXNvcnRfZXhhY3RfdGFnIDogcHVibGljIHBhcmFsbGVsX3RhZworICB7CisgICAgbXVsdGl3YXlfbWVyZ2Vzb3J0X2V4YWN0X3RhZygpIHsgfQorICAgIG11bHRpd2F5X21lcmdlc29ydF9leGFjdF90YWcoX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMpCisgICAgOiBwYXJhbGxlbF90YWcoX19udW1fdGhyZWFkcykgeyB9CisgIH07CisKKyAgLyoqIEBicmllZiBGb3JjZXMgcGFyYWxsZWwgc29ydGluZyB1c2luZyBtdWx0aXdheSBtZXJnZXNvcnQKKyAgICogIHdpdGggc3BsaXR0aW5nIGJ5IHNhbXBsaW5nIGF0IGNvbXBpbGUgdGltZS4gKi8KKyAgc3RydWN0IG11bHRpd2F5X21lcmdlc29ydF9zYW1wbGluZ190YWcgOiBwdWJsaWMgcGFyYWxsZWxfdGFnCisgIHsKKyAgICBtdWx0aXdheV9tZXJnZXNvcnRfc2FtcGxpbmdfdGFnKCkgeyB9CisgICAgbXVsdGl3YXlfbWVyZ2Vzb3J0X3NhbXBsaW5nX3RhZyhfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcykKKyAgICA6IHBhcmFsbGVsX3RhZyhfX251bV90aHJlYWRzKSB7IH0KKyAgfTsKKworICAvKiogQGJyaWVmIEZvcmNlcyBwYXJhbGxlbCBzb3J0aW5nIHVzaW5nIHVuYmFsYW5jZWQgcXVpY2tzb3J0CisgICAqICBhdCBjb21waWxlIHRpbWUuICovCisgIHN0cnVjdCBxdWlja3NvcnRfdGFnIDogcHVibGljIHBhcmFsbGVsX3RhZworICB7CisgICAgcXVpY2tzb3J0X3RhZygpIHsgfQorICAgIHF1aWNrc29ydF90YWcoX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMpCisgICAgOiBwYXJhbGxlbF90YWcoX19udW1fdGhyZWFkcykgeyB9CisgIH07CisKKyAgLyoqIEBicmllZiBGb3JjZXMgcGFyYWxsZWwgc29ydGluZyB1c2luZyBiYWxhbmNlZCBxdWlja3NvcnQKKyAgICogIGF0IGNvbXBpbGUgdGltZS4gKi8KKyAgc3RydWN0IGJhbGFuY2VkX3F1aWNrc29ydF90YWcgOiBwdWJsaWMgcGFyYWxsZWxfdGFnCisgIHsKKyAgICBiYWxhbmNlZF9xdWlja3NvcnRfdGFnKCkgeyB9CisgICAgYmFsYW5jZWRfcXVpY2tzb3J0X3RhZyhfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcykKKyAgICA6IHBhcmFsbGVsX3RhZyhfX251bV90aHJlYWRzKSB7IH0KKyAgfTsKKworCisgIC8qKiBAYnJpZWYgU2VsZWN0cyB0aGUgZ3Jvd2luZyBibG9jayBzaXplIHZhcmlhbnQgZm9yIHN0ZDo6ZmluZCgpLgorICAgICAgQHNlZSBfR0xJQkNYWF9GSU5EX0dST1dJTkdfQkxPQ0tTICovCisgIHN0cnVjdCBncm93aW5nX2Jsb2Nrc190YWcgOiBwdWJsaWMgZmluZF90YWcgeyB9OworCisgIC8qKiBAYnJpZWYgU2VsZWN0cyB0aGUgY29uc3RhbnQgYmxvY2sgc2l6ZSB2YXJpYW50IGZvciBzdGQ6OmZpbmQoKS4KKyAgICAgIEBzZWUgX0dMSUJDWFhfRklORF9DT05TVEFOVF9TSVpFX0JMT0NLUyAqLworICBzdHJ1Y3QgY29uc3RhbnRfc2l6ZV9ibG9ja3NfdGFnIDogcHVibGljIGZpbmRfdGFnIHsgfTsKKworICAvKiogQGJyaWVmIFNlbGVjdHMgdGhlIGVxdWFsIHNwbGl0dGluZyB2YXJpYW50IGZvciBzdGQ6OmZpbmQoKS4KKyAgICAgIEBzZWUgX0dMSUJDWFhfRklORF9FUVVBTF9TUExJVCAqLworICBzdHJ1Y3QgZXF1YWxfc3BsaXRfdGFnIDogcHVibGljIGZpbmRfdGFnIHsgfTsKK30KKworI2VuZGlmIC8qIF9HTElCQ1hYX1BBUkFMTEVMX1RBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC90eXBlcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOWYzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3R5cGVzLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcworLy8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKy8vIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKy8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisvLyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwYXJhbGxlbC90eXBlcy5oCisgKiAgQGJyaWVmIEJhc2ljIHR5cGVzIGFuZCB0eXBlZGVmcy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEpvaGFubmVzIFNpbmdsZXIgYW5kIEZlbGl4IFB1dHplLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX1RZUEVTX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfVFlQRVNfSCAxCisKKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx0cjEvY3N0ZGludD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisgIC8vIEVudW1lcmF0ZWQgdHlwZXMuCisKKyAgLy8vIFJ1bi10aW1lIGVxdWl2YWxlbnRzIGZvciB0aGUgY29tcGlsZS10aW1lIHRhZ3MuCisgIGVudW0gX1BhcmFsbGVsaXNtCisgICAgeworICAgICAgLy8vIE5vdCBwYXJhbGxlbC4KKyAgICAgIHNlcXVlbnRpYWwsCisKKyAgICAgIC8vLyBQYXJhbGxlbCB1bmJhbGFuY2VkIChlcXVhbC1zaXplZCBjaHVua3MpLgorICAgICAgcGFyYWxsZWxfdW5iYWxhbmNlZCwKKworICAgICAgLy8vIFBhcmFsbGVsIGJhbGFuY2VkICh3b3JrLXN0ZWFsaW5nKS4KKyAgICAgIHBhcmFsbGVsX2JhbGFuY2VkLAorCisgICAgICAvLy8gUGFyYWxsZWwgd2l0aCBPcGVuTVAgZHluYW1pYyBsb2FkLWJhbGFuY2luZy4KKyAgICAgIHBhcmFsbGVsX29tcF9sb29wLAorCisgICAgICAvLy8gUGFyYWxsZWwgd2l0aCBPcGVuTVAgc3RhdGljIGxvYWQtYmFsYW5jaW5nLgorICAgICAgcGFyYWxsZWxfb21wX2xvb3Bfc3RhdGljLAorCisgICAgICAvLy8gUGFyYWxsZWwgd2l0aCBPcGVuTVAgdGFza3F1ZXVlIGNvbnN0cnVjdC4KKyAgICAgIHBhcmFsbGVsX3Rhc2txdWV1ZQorICAgIH07CisKKyAgLy8vIFN0cmF0ZWdpZXMgZm9yIHJ1bi10aW1lIGFsZ29yaXRobSBzZWxlY3Rpb246IAorICAvLyBmb3JjZV9zZXF1ZW50aWFsLCBmb3JjZV9wYXJhbGxlbCwgaGV1cmlzdGljLgorICBlbnVtIF9BbGdvcml0aG1TdHJhdGVneQorICAgIHsKKyAgICAgIGhldXJpc3RpYywKKyAgICAgIGZvcmNlX3NlcXVlbnRpYWwsCisgICAgICBmb3JjZV9wYXJhbGxlbAorICAgIH07CisKKyAgLy8vIFNvcnRpbmcgYWxnb3JpdGhtczogCisgIC8vIG11bHRpLXdheSBtZXJnZXNvcnQsIHF1aWNrc29ydCwgbG9hZC1iYWxhbmNlZCBxdWlja3NvcnQuCisgIGVudW0gX1NvcnRBbGdvcml0aG0gCisgICAgeyAKKyAgICAgIE1XTVMsIAorICAgICAgUVMsIAorICAgICAgUVNfQkFMQU5DRUQgCisgICAgfTsKKworICAvLy8gTWVyZ2luZyBhbGdvcml0aG1zOiAKKyAgLy8gYnViYmxlc29ydC1hbGlrZSwgbG9zZXItdHJlZSB2YXJpYW50cywgZW51bSBfX3NlbnRpbmVsLgorICBlbnVtIF9NdWx0aXdheU1lcmdlQWxnb3JpdGhtCisgICAgeworICAgICAgTE9TRVJfVFJFRQorICAgIH07CisKKyAgLy8vIFBhcnRpYWwgc3VtIGFsZ29yaXRobXM6IHJlY3Vyc2l2ZSwgbGluZWFyLgorICBlbnVtIF9QYXJ0aWFsU3VtQWxnb3JpdGhtIAorICAgIHsgCisgICAgICBSRUNVUlNJVkUsIAorICAgICAgTElORUFSIAorICAgIH07CisKKyAgLy8vIFNvcnRpbmcvbWVyZ2luZyBhbGdvcml0aG1zOiBzYW1wbGluZywgX19leGFjdC4KKyAgZW51bSBfU3BsaXR0aW5nQWxnb3JpdGhtIAorICAgIHsgCisgICAgICBTQU1QTElORywgCisgICAgICBFWEFDVCAKKyAgICB9OworCisgIC8vLyBGaW5kIGFsZ29yaXRobXM6CisgIC8vIGdyb3dpbmcgYmxvY2tzLCBlcXVhbC1zaXplZCBibG9ja3MsIGVxdWFsIHNwbGl0dGluZy4KKyAgZW51bSBfRmluZEFsZ29yaXRobSAKKyAgICB7IAorICAgICAgR1JPV0lOR19CTE9DS1MsIAorICAgICAgQ09OU1RBTlRfU0laRV9CTE9DS1MsIAorICAgICAgRVFVQUxfU1BMSVQgCisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFVuc2lnbmVkIGludGVnZXIgdG8gaW5kZXggX19lbGVtZW50cy4KKyAgICogVGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBmb3IgZWFjaCBhbGdvcml0aG0gbXVzdCBmaXQgaW50byB0aGlzIHR5cGUuCisgICAqLworICB0eXBlZGVmIHVpbnQ2NF90IF9TZXF1ZW5jZUluZGV4OworCisgIC8qKgorICAgKiBAYnJpZWYgVW5zaWduZWQgaW50ZWdlciB0byBpbmRleCBhIHRocmVhZCBudW1iZXIuCisgICAqIFRoZSBtYXhpbXVtIHRocmVhZCBudW1iZXIgKGZvciBlYWNoIHByb2Nlc3NvcikgbXVzdCBmaXQgaW50byB0aGlzIHR5cGUuCisgICAqLworICB0eXBlZGVmIHVpbnQxNl90IF9UaHJlYWRJbmRleDsKKworICAvLyBYWFggYXRvbWljcyBpbnRlcmZhY2U/CisgIC8vLyBMb25nZXN0IGNvbXBhcmUtYW5kLXN3YXBwYWJsZSBpbnRlZ2VyIHR5cGUgb24gdGhpcyBwbGF0Zm9ybS4KKyAgdHlwZWRlZiBpbnQ2NF90IF9DQVNhYmxlOworCisgIC8vLyBOdW1iZXIgb2YgYml0cyBvZiBfQ0FTYWJsZS4KKyAgc3RhdGljIGNvbnN0IGludCBfQ0FTYWJsZV9iaXRzID0gc3RkOjpudW1lcmljX2xpbWl0czxfQ0FTYWJsZT46OmRpZ2l0czsKKworICAvLy8gOjpfQ0FTYWJsZSB3aXRoIHRoZSByaWdodCBoYWxmIG9mIGJpdHMgc2V0IHRvIDEuCisgIHN0YXRpYyBjb25zdCBfQ0FTYWJsZSBfQ0FTYWJsZV9tYXNrID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9DQVNhYmxlKDEpIDw8IChfQ0FTYWJsZV9iaXRzIC8gMikpIC0gMSk7Cit9CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3VuaXF1ZV9jb3B5LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3VuaXF1ZV9jb3B5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyMGMzNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcGFyYWxsZWwvdW5pcXVlX2NvcHkuaApAQCAtMCwwICsxLDE5NyBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL3VuaXF1ZV9jb3B5LmgKKyAqICBAYnJpZWYgUGFyYWxsZWwgaW1wbGVtZW50YXRpb25zIG9mIHN0ZDo6dW5pcXVlX2NvcHkoKS4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IFJvYmVydCBHZWlzYmVyZ2VyIGFuZCBSb2JpbiBEYXBwLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX1VOSVFVRV9DT1BZX0gKKyNkZWZpbmUgX0dMSUJDWFhfUEFSQUxMRUxfVU5JUVVFX0NPUFlfSCAxCisKKyNpbmNsdWRlIDxwYXJhbGxlbC9wYXJhbGxlbC5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL211bHRpc2VxX3NlbGVjdGlvbi5oPgorCituYW1lc3BhY2UgX19nbnVfcGFyYWxsZWwKK3sKKyAgLyoqIEBicmllZiBQYXJhbGxlbCBzdGQ6OnVuaXF1ZV9jb3B5KCksIHcvX19vIGV4cGxpY2l0IGVxdWFsaXR5IHByZWRpY2F0ZS4KKyAgICAqICBAcGFyYW0gX19maXJzdCBCZWdpbiBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICAqICBAcGFyYW0gX19sYXN0IEVuZCBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICAqICBAcGFyYW0gX19yZXN1bHQgQmVnaW4gaXRlcmF0b3Igb2YgcmVzdWx0IF9fc2VxdWVuY2UuCisgICAgKiAgQHBhcmFtIF9fYmluYXJ5X3ByZWQgRXF1YWxpdHkgcHJlZGljYXRlLgorICAgICogIEByZXR1cm4gRW5kIGl0ZXJhdG9yIG9mIHJlc3VsdCBfX3NlcXVlbmNlLiAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUl0ZXIsCisgICAgICAgICAgIGNsYXNzIF9PdXRwdXRJdGVyYXRvciwKKyAgICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3BhcmFsbGVsX3VuaXF1ZV9jb3B5KF9JSXRlciBfX2ZpcnN0LCBfSUl0ZXIgX19sYXN0LAorCQkJICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorCQkJICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0NBTEwoX19sYXN0IC0gX19maXJzdCkKKworICAgICAgdHlwZWRlZiBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSUl0ZXI+IF9UcmFpdHNUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVHlwZTo6ZGlmZmVyZW5jZV90eXBlIF9EaWZmZXJlbmNlVHlwZTsKKworICAgICAgX0RpZmZlcmVuY2VUeXBlIF9fc2l6ZSA9IF9fbGFzdCAtIF9fZmlyc3Q7CisKKyAgICAgIGlmIChfX3NpemUgPT0gMCkKKwlyZXR1cm4gX19yZXN1bHQ7CisKKyAgICAgIC8vIExldCB0aGUgZmlyc3QgdGhyZWFkIHByb2Nlc3MgdHdvIHBhcnRzLgorICAgICAgX0RpZmZlcmVuY2VUeXBlICpfX2NvdW50ZXI7CisgICAgICBfRGlmZmVyZW5jZVR5cGUgKl9fYm9yZGVyczsKKworICAgICAgX1RocmVhZEluZGV4IF9fbnVtX3RocmVhZHMgPSBfX2dldF9tYXhfdGhyZWFkcygpOworICAgICAgLy8gRmlyc3QgcGFydCBjb250YWlucyBhdCBsZWFzdCBvbmUgZWxlbWVudC4KKyMgICAgIHByYWdtYSBvbXAgcGFyYWxsZWwgbnVtX3RocmVhZHMoX19udW1fdGhyZWFkcykKKyAgICAgIHsKKyMgICAgICAgcHJhZ21hIG9tcCBzaW5nbGUKKwl7CisJICBfX251bV90aHJlYWRzID0gb21wX2dldF9udW1fdGhyZWFkcygpOworCSAgX19ib3JkZXJzID0gbmV3IF9EaWZmZXJlbmNlVHlwZVtfX251bV90aHJlYWRzICsgMl07CisJICBfX2VxdWFsbHlfc3BsaXQoX19zaXplLCBfX251bV90aHJlYWRzICsgMSwgX19ib3JkZXJzKTsKKwkgIF9fY291bnRlciA9IG5ldyBfRGlmZmVyZW5jZVR5cGVbX19udW1fdGhyZWFkcyArIDFdOworCX0KKworCV9UaHJlYWRJbmRleCBfX2lhbSA9IG9tcF9nZXRfdGhyZWFkX251bSgpOworCisJX0RpZmZlcmVuY2VUeXBlIF9fYmVnaW4sIF9fZW5kOworCisJLy8gQ2hlY2sgZm9yIGxlbmd0aCB3aXRob3V0IGR1cGxpY2F0ZXMKKwkvLyBOZWVkZWQgZm9yIHBvc2l0aW9uIGluIG91dHB1dAorCV9EaWZmZXJlbmNlVHlwZSBfX2kgPSAwOworCV9PdXRwdXRJdGVyYXRvciBfX291dCA9IF9fcmVzdWx0OworCisJaWYgKF9faWFtID09IDApCisgICAgICAgICAgeworICAgICAgICAgICAgX19iZWdpbiA9IF9fYm9yZGVyc1swXSArIDE7ICAgLy8gPT0gMQorICAgICAgICAgICAgX19lbmQgPSBfX2JvcmRlcnNbX19pYW0gKyAxXTsKKworICAgICAgICAgICAgKytfX2k7CisgICAgICAgICAgICAqX19vdXQrKyA9ICpfX2ZpcnN0OworCisgICAgICAgICAgICBmb3IgKF9JSXRlciBfX2l0ZXIgPSBfX2ZpcnN0ICsgX19iZWdpbjsgX19pdGVyIDwgX19maXJzdCArIF9fZW5kOworCQkgKytfX2l0ZXIpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCWlmICghX19iaW5hcnlfcHJlZCgqX19pdGVyLCAqKF9faXRlciAtIDEpKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKytfX2k7CisgICAgICAgICAgICAgICAgICAgICpfX291dCsrID0gKl9faXRlcjsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKwllbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgX19iZWdpbiA9IF9fYm9yZGVyc1tfX2lhbV07IC8vb25lIHBhcnQKKyAgICAgICAgICAgIF9fZW5kID0gX19ib3JkZXJzW19faWFtICsgMV07CisKKyAgICAgICAgICAgIGZvciAoX0lJdGVyIF9faXRlciA9IF9fZmlyc3QgKyBfX2JlZ2luOyBfX2l0ZXIgPCBfX2ZpcnN0ICsgX19lbmQ7CisJCSArK19faXRlcikKKyAgICAgICAgICAgICAgeworICAgICAgICAJaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2l0ZXIsICooX19pdGVyIC0gMSkpKQorICAgICAgICAgICAgICAgICAgKytfX2k7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisJX19jb3VudGVyW19faWFtXSA9IF9faTsKKworCS8vIExhc3QgcGFydCBzdGlsbCB1bnRvdWNoZWQuCisJX0RpZmZlcmVuY2VUeXBlIF9fYmVnaW5fb3V0cHV0OworCisjICAgICAgIHByYWdtYSBvbXAgYmFycmllcgorCisJLy8gU3RvcmUgcmVzdWx0IGluIG91dHB1dCBvbiBjYWxjdWxhdGVkIHBvc2l0aW9ucy4KKwlfX2JlZ2luX291dHB1dCA9IDA7CisKKwlpZiAoX19pYW0gPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX3QgPSAwOyBfX3QgPCBfX251bV90aHJlYWRzOyArK19fdCkKKyAgICAgICAgICAgICAgX19iZWdpbl9vdXRwdXQgKz0gX19jb3VudGVyW19fdF07CisKKyAgICAgICAgICAgIF9faSA9IDA7CisKKyAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX2l0ZXJfb3V0ID0gX19yZXN1bHQgKyBfX2JlZ2luX291dHB1dDsKKworICAgICAgICAgICAgX19iZWdpbiA9IF9fYm9yZGVyc1tfX251bV90aHJlYWRzXTsKKyAgICAgICAgICAgIF9fZW5kID0gX19zaXplOworCisgICAgICAgICAgICBmb3IgKF9JSXRlciBfX2l0ZXIgPSBfX2ZpcnN0ICsgX19iZWdpbjsgX19pdGVyIDwgX19maXJzdCArIF9fZW5kOworCQkgKytfX2l0ZXIpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCWlmIChfX2l0ZXIgPT0gX19maXJzdAorCQkgICAgfHwgIV9fYmluYXJ5X3ByZWQoKl9faXRlciwgKihfX2l0ZXIgLSAxKSkpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICsrX19pOworICAgICAgICAgICAgICAgICAgICAqX19pdGVyX291dCsrID0gKl9faXRlcjsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfX2NvdW50ZXJbX19udW1fdGhyZWFkc10gPSBfX2k7CisgICAgICAgICAgfQorCWVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBmb3IgKF9UaHJlYWRJbmRleCBfX3QgPSAwOyBfX3QgPCBfX2lhbTsgX190KyspCisgICAgICAgICAgICAgIF9fYmVnaW5fb3V0cHV0ICs9IF9fY291bnRlcltfX3RdOworCisgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19pdGVyX291dCA9IF9fcmVzdWx0ICsgX19iZWdpbl9vdXRwdXQ7CisgICAgICAgICAgICBmb3IgKF9JSXRlciBfX2l0ZXIgPSBfX2ZpcnN0ICsgX19iZWdpbjsgX19pdGVyIDwgX19maXJzdCArIF9fZW5kOworCQkgKytfX2l0ZXIpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgCWlmICghX19iaW5hcnlfcHJlZCgqX19pdGVyLCAqKF9faXRlciAtIDEpKSkKKyAgICAgICAgICAgICAgICAgICpfX2l0ZXJfb3V0KysgPSAqX19pdGVyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICBfRGlmZmVyZW5jZVR5cGUgX19lbmRfb3V0cHV0ID0gMDsKKyAgICAgIGZvciAoX1RocmVhZEluZGV4IF9fdCA9IDA7IF9fdCA8IF9fbnVtX3RocmVhZHMgKyAxOyBfX3QrKykKKwlfX2VuZF9vdXRwdXQgKz0gX19jb3VudGVyW19fdF07CisKKyAgICAgIGRlbGV0ZVtdIF9fYm9yZGVyczsKKworICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgX19lbmRfb3V0cHV0OworICAgIH0KKworICAvKiogQGJyaWVmIFBhcmFsbGVsIHN0ZDo6dW5pcXVlX2NvcHkoKSwgd2l0aG91dCBleHBsaWNpdCBlcXVhbGl0eSBwcmVkaWNhdGUKKyAgICAqICBAcGFyYW0gX19maXJzdCBCZWdpbiBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICAqICBAcGFyYW0gX19sYXN0IEVuZCBpdGVyYXRvciBvZiBpbnB1dCBzZXF1ZW5jZS4KKyAgICAqICBAcGFyYW0gX19yZXN1bHQgQmVnaW4gaXRlcmF0b3Igb2YgcmVzdWx0IF9fc2VxdWVuY2UuCisgICAgKiAgQHJldHVybiBFbmQgaXRlcmF0b3Igb2YgcmVzdWx0IF9fc2VxdWVuY2UuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSXRlciwgY2xhc3MgX091dHB1dEl0ZXJhdG9yPgorICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKKyAgICBfX3BhcmFsbGVsX3VuaXF1ZV9jb3B5KF9JSXRlciBfX2ZpcnN0LCBfSUl0ZXIgX19sYXN0LAorCQkJICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0lJdGVyPjo6dmFsdWVfdHlwZQorCV9WYWx1ZVR5cGU7CisgICAgICByZXR1cm4gX19wYXJhbGxlbF91bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAorCQkJCSAgICBzdGQ6OmVxdWFsX3RvPF9WYWx1ZVR5cGU+KCkpOworICAgIH0KKworfS8vbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9VTklRVUVfQ09QWV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3BhcmFsbGVsL3dvcmtzdGVhbGluZy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC93b3Jrc3RlYWxpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FiOTNiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wYXJhbGxlbC93b3Jrc3RlYWxpbmcuaApAQCAtMCwwICsxLDMxMiBAQAorLy8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zCisvLyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorLy8gdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy8vIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHBhcmFsbGVsL3dvcmtzdGVhbGluZy5oCisgKiAgQGJyaWVmIFBhcmFsbGVsaXphdGlvbiBvZiBlbWJhcnJhc3NpbmdseSBwYXJhbGxlbCBleGVjdXRpb24gYnkKKyAqICBtZWFucyBvZiB3b3JrLXN0ZWFsaW5nLgorICoKKyAqICBXb3JrIHN0ZWFsaW5nIGlzIGRlc2NyaWJlZCBpbgorICoKKyAqICBSLiBELiBCbHVtb2ZlIGFuZCBDLiBFLiBMZWlzZXJzb24uCisgKiAgU2NoZWR1bGluZyBtdWx0aXRocmVhZGVkIGNvbXB1dGF0aW9ucyBieSB3b3JrIHN0ZWFsaW5nLgorICogIEpvdXJuYWwgb2YgdGhlIEFDTSwgNDYoNSk6NzIw4oCTNzQ4LCAxOTk5LgorICoKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcGFyYWxsZWwgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisvLyBXcml0dGVuIGJ5IEZlbGl4IFB1dHplLgorCisjaWZuZGVmIF9HTElCQ1hYX1BBUkFMTEVMX1dPUktTVEVBTElOR19ICisjZGVmaW5lIF9HTElCQ1hYX1BBUkFMTEVMX1dPUktTVEVBTElOR19IIDEKKworI2luY2x1ZGUgPHBhcmFsbGVsL3BhcmFsbGVsLmg+CisjaW5jbHVkZSA8cGFyYWxsZWwvcmFuZG9tX251bWJlci5oPgorI2luY2x1ZGUgPHBhcmFsbGVsL2NvbXBhdGliaWxpdHkuaD4KKworbmFtZXNwYWNlIF9fZ251X3BhcmFsbGVsCit7CisKKyNkZWZpbmUgX0dMSUJDWFhfSk9CX1ZPTEFUSUxFIHZvbGF0aWxlCisKKyAgLyoqIEBicmllZiBPbmUgX19qb2IgZm9yIGEgY2VydGFpbiB0aHJlYWQuICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9EaWZmZXJlbmNlVHA+CisgICAgc3RydWN0IF9Kb2IKKyAgICB7CisgICAgICB0eXBlZGVmIF9EaWZmZXJlbmNlVHAgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICAvKiogQGJyaWVmIEZpcnN0IGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogIENoYW5nZWQgYnkgb3duaW5nIGFuZCBzdGVhbGluZyB0aHJlYWQuIEJ5IHN0ZWFsaW5nIHRocmVhZCwKKyAgICAgICAqICBhbHdheXMgaW5jcmVtZW50ZWQuICovCisgICAgICBfR0xJQkNYWF9KT0JfVk9MQVRJTEUgX0RpZmZlcmVuY2VUeXBlIF9NX2ZpcnN0OworCisgICAgICAvKiogQGJyaWVmIExhc3QgZWxlbWVudC4KKyAgICAgICAqCisgICAgICAgKiAgQ2hhbmdlZCBieSBvd25pbmcgdGhyZWFkIG9ubHkuICovCisgICAgICBfR0xJQkNYWF9KT0JfVk9MQVRJTEUgX0RpZmZlcmVuY2VUeXBlIF9NX2xhc3Q7CisKKyAgICAgIC8qKiBAYnJpZWYgTnVtYmVyIG9mIGVsZW1lbnRzLCBpLmUuIEBjIF9NX2xhc3QtX01fZmlyc3QrMS4KKyAgICAgICAqCisgICAgICAgKiAgQ2hhbmdlZCBieSBvd25pbmcgdGhyZWFkIG9ubHkuICovCisgICAgICBfR0xJQkNYWF9KT0JfVk9MQVRJTEUgX0RpZmZlcmVuY2VUeXBlIF9NX2xvYWQ7CisgICAgfTsKKworICAvKiogQGJyaWVmIFdvcmsgc3RlYWxpbmcgYWxnb3JpdGhtIGZvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycy4KKyAgICAqCisgICAgKiAgVXNlcyBPKDEpIGFkZGl0aW9uYWwgbWVtb3J5LiBTeW5jaHJvbml6YXRpb24gYXQgam9iIGxpc3RzIGlzCisgICAgKiAgZG9uZSB3aXRoIGF0b21pYyBvcGVyYXRpb25zLgorICAgICogIEBwYXJhbSBfX2JlZ2luIEJlZ2luIGl0ZXJhdG9yIG9mIGVsZW1lbnQgc2VxdWVuY2UuCisgICAgKiAgQHBhcmFtIF9fZW5kIEVuZCBpdGVyYXRvciBvZiBlbGVtZW50IHNlcXVlbmNlLgorICAgICogIEBwYXJhbSBfX29wIFVzZXItc3VwcGxpZWQgZnVuY3RvciAoY29tcGFyYXRvciwgcHJlZGljYXRlLCBhZGRpbmcKKyAgICAqICBmdW5jdG9yLCAuLi4pLgorICAgICogIEBwYXJhbSBfX2YgRnVuY3RvciB0byBAYSBwcm9jZXNzIGFuIGVsZW1lbnQgd2l0aCBfX29wIChkZXBlbmRzIG9uCisgICAgKiAgZGVzaXJlZCBmdW5jdGlvbmFsaXR5LCBlLiBnLiBmb3Igc3RkOjpmb3JfZWFjaCgpLCAuLi4pLgorICAgICogIEBwYXJhbSBfX3IgRnVuY3RvciB0byBAYSBhZGQgYSBzaW5nbGUgX19yZXN1bHQgdG8gdGhlIGFscmVhZHkKKyAgICAqICBwcm9jZXNzZWQgZWxlbWVudHMgKGRlcGVuZHMgb24gZnVuY3Rpb25hbGl0eSkuCisgICAgKiAgQHBhcmFtIF9fYmFzZSBCYXNlIHZhbHVlIGZvciByZWR1Y3Rpb24uCisgICAgKiAgQHBhcmFtIF9fb3V0cHV0IFBvaW50ZXIgdG8gcG9zaXRpb24gd2hlcmUgZmluYWwgcmVzdWx0IGlzIHdyaXR0ZW4gdG8KKyAgICAqICBAcGFyYW0gX19ib3VuZCBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBwcm9jZXNzZWQgKGUuIGcuIGZvcgorICAgICogIHN0ZDo6Y291bnRfbigpKS4KKyAgICAqICBAcmV0dXJuIFVzZXItc3VwcGxpZWQgZnVuY3RvciAodGhhdCBtYXkgY29udGFpbiBhIHBhcnQgb2YgdGhlIHJlc3VsdCkuCisgICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JBSXRlciwKKyAgICAgICAgICAgdHlwZW5hbWUgX09wLAorICAgICAgICAgICB0eXBlbmFtZSBfRnUsCisgICAgICAgICAgIHR5cGVuYW1lIF9SZWQsCisgICAgICAgICAgIHR5cGVuYW1lIF9SZXN1bHQ+CisgICAgX09wCisgICAgX19mb3JfZWFjaF90ZW1wbGF0ZV9yYW5kb21fYWNjZXNzX3dvcmtzdGVhbGluZyhfUkFJdGVyIF9fYmVnaW4sCisJCQkJCQkgICBfUkFJdGVyIF9fZW5kLCBfT3AgX19vcCwKKwkJCQkJCSAgIF9GdSYgX19mLCBfUmVkIF9fciwKKwkJCQkJCSAgIF9SZXN1bHQgX19iYXNlLAorCQkJCQkJICAgX1Jlc3VsdCYgX19vdXRwdXQsCisgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUkFJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fYm91bmQpCisgICAgeworICAgICAgX0dMSUJDWFhfQ0FMTChfX2VuZCAtIF9fYmVnaW4pCisKKyAgICAgIHR5cGVkZWYgc3RkOjppdGVyYXRvcl90cmFpdHM8X1JBSXRlcj4gX1RyYWl0c1R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHNUeXBlOjpkaWZmZXJlbmNlX3R5cGUgX0RpZmZlcmVuY2VUeXBlOworCisgICAgICBjb25zdCBfU2V0dGluZ3MmIF9fcyA9IF9TZXR0aW5nczo6Z2V0KCk7CisKKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2NodW5rX3NpemUgPQorICAgICAgICAgIHN0YXRpY19jYXN0PF9EaWZmZXJlbmNlVHlwZT4oX19zLndvcmtzdGVhbGluZ19jaHVua19zaXplKTsKKworICAgICAgLy8gSG93IG1hbnkgam9icz8KKyAgICAgIF9EaWZmZXJlbmNlVHlwZSBfX2xlbmd0aCA9IChfX2JvdW5kIDwgMCkgPyAoX19lbmQgLSBfX2JlZ2luKSA6IF9fYm91bmQ7CisKKyAgICAgIC8vIFRvIGF2b2lkIGZhbHNlIHNoYXJpbmcgaW4gYSBjYWNoZSBsaW5lLgorICAgICAgY29uc3QgaW50IF9fc3RyaWRlID0gKF9fcy5jYWNoZV9saW5lX3NpemUgKiAxMAorCQkJICAgIC8gc2l6ZW9mKF9Kb2I8X0RpZmZlcmVuY2VUeXBlPikgKyAxKTsKKworICAgICAgLy8gVG90YWwgbnVtYmVyIG9mIHRocmVhZHMgY3VycmVudGx5IHdvcmtpbmcuCisgICAgICBfVGhyZWFkSW5kZXggX19idXN5ID0gMDsKKworICAgICAgX0pvYjxfRGlmZmVyZW5jZVR5cGU+ICpfX2pvYjsKKworICAgICAgb21wX2xvY2tfdCBfX291dHB1dF9sb2NrOworICAgICAgb21wX2luaXRfbG9jaygmX19vdXRwdXRfbG9jayk7CisKKyAgICAgIC8vIFdyaXRlIGJhc2UgdmFsdWUgdG8gb3V0cHV0LgorICAgICAgX19vdXRwdXQgPSBfX2Jhc2U7CisKKyAgICAgIC8vIE5vIG1vcmUgdGhyZWFkcyB0aGFuIGpvYnMsIGF0IGxlYXN0IG9uZSB0aHJlYWQuCisgICAgICBfVGhyZWFkSW5kZXggX19udW1fdGhyZWFkcyA9IF9fZ251X3BhcmFsbGVsOjptYXg8X1RocmVhZEluZGV4PgorCSgxLCBfX2dudV9wYXJhbGxlbDo6bWluPF9EaWZmZXJlbmNlVHlwZT4oX19sZW5ndGgsCisJCQkJCQkgX19nZXRfbWF4X3RocmVhZHMoKSkpOworCisjICAgICBwcmFnbWEgb21wIHBhcmFsbGVsIHNoYXJlZChfX2J1c3kpIG51bV90aHJlYWRzKF9fbnVtX3RocmVhZHMpCisgICAgICB7CisjICAgICAgIHByYWdtYSBvbXAgc2luZ2xlCisJeworCSAgX19udW1fdGhyZWFkcyA9IG9tcF9nZXRfbnVtX3RocmVhZHMoKTsKKworCSAgLy8gQ3JlYXRlIGpvYiBkZXNjcmlwdGlvbiBhcnJheS4KKwkgIF9fam9iID0gbmV3IF9Kb2I8X0RpZmZlcmVuY2VUeXBlPltfX251bV90aHJlYWRzICogX19zdHJpZGVdOworCX0KKworCS8vIEluaXRpYWxpemF0aW9uIHBoYXNlLgorCisJLy8gRmxhZ3MgZm9yIGV2ZXJ5IHRocmVhZCBpZiBpdCBpcyBkb2luZyBwcm9kdWN0aXZlIHdvcmsuCisJYm9vbCBfX2lhbV93b3JraW5nID0gZmFsc2U7CisKKwkvLyBUaHJlYWQgaWQuCisJX1RocmVhZEluZGV4IF9faWFtID0gb21wX2dldF90aHJlYWRfbnVtKCk7CisKKwkvLyBUaGlzIGpvYi4KKwlfSm9iPF9EaWZmZXJlbmNlVHlwZT4mIF9fbXlfam9iID0gX19qb2JbX19pYW0gKiBfX3N0cmlkZV07CisKKwkvLyBSYW5kb20gbnVtYmVyIChmb3Igd29yayBzdGVhbGluZykuCisJX1RocmVhZEluZGV4IF9fdmljdGltOworCisJLy8gTG9jYWwgdmFsdWUgZm9yIHJlZHVjdGlvbi4KKwlfUmVzdWx0IF9fcmVzdWx0ID0gX1Jlc3VsdCgpOworCisJLy8gTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHN0ZWFsIGluIG9uZSBhdHRlbXB0LgorCV9EaWZmZXJlbmNlVHlwZSBfX3N0ZWFsOworCisJLy8gRXZlcnkgdGhyZWFkIGhhcyBpdHMgb3duIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisJLy8gKG1vZHVsbyBfX251bV90aHJlYWRzKS4KKwlfUmFuZG9tTnVtYmVyIF9fcmFuZF9nZW4oX19pYW0sIF9fbnVtX3RocmVhZHMpOworCisJLy8gVGhpcyB0aHJlYWQgaXMgY3VycmVudGx5IHdvcmtpbmcuCisjICAgICAgIHByYWdtYSBvbXAgYXRvbWljCisJKytfX2J1c3k7CisKKwlfX2lhbV93b3JraW5nID0gdHJ1ZTsKKworCS8vIEhvdyBtYW55IGpvYnMgcGVyIHRocmVhZD8gbGFzdCB0aHJlYWQgZ2V0cyB0aGUgcmVzdC4KKwlfX215X2pvYi5fTV9maXJzdCA9IHN0YXRpY19jYXN0PF9EaWZmZXJlbmNlVHlwZT4KKwkgIChfX2lhbSAqIChfX2xlbmd0aCAvIF9fbnVtX3RocmVhZHMpKTsKKworCV9fbXlfam9iLl9NX2xhc3QgPSAoX19pYW0gPT0gKF9fbnVtX3RocmVhZHMgLSAxKQorCQkJICAgID8gKF9fbGVuZ3RoIC0gMSkKKwkJCSAgICA6ICgoX19pYW0gKyAxKSAqIChfX2xlbmd0aCAvIF9fbnVtX3RocmVhZHMpIC0gMSkpOworCV9fbXlfam9iLl9NX2xvYWQgPSBfX215X2pvYi5fTV9sYXN0IC0gX19teV9qb2IuX01fZmlyc3QgKyAxOworCisJLy8gSW5pdCByZXN1bHQgd2l0aCBfTV9maXJzdCB2YWx1ZSAodG8gaGF2ZSBhIGJhc2UgdmFsdWUgZm9yIHJlZHVjdGlvbikKKwlpZiAoX19teV9qb2IuX01fZmlyc3QgPD0gX19teV9qb2IuX01fbGFzdCkKKwkgIHsKKwkgICAgLy8gQ2Fubm90IHVzZSB2b2xhdGlsZSB2YXJpYWJsZSBkaXJlY3RseS4KKwkgICAgX0RpZmZlcmVuY2VUeXBlIF9fbXlfZmlyc3QgPSBfX215X2pvYi5fTV9maXJzdDsKKwkgICAgX19yZXN1bHQgPSBfX2YoX19vcCwgX19iZWdpbiArIF9fbXlfZmlyc3QpOworCSAgICArK19fbXlfam9iLl9NX2ZpcnN0OworCSAgICAtLV9fbXlfam9iLl9NX2xvYWQ7CisJICB9CisKKwlfUkFJdGVyIF9fY3VycmVudDsKKworIyAgICAgICBwcmFnbWEgb21wIGJhcnJpZXIKKworCS8vIEFjdHVhbCB3b3JrIHBoYXNlCisJLy8gV29yayBvbiBvd24gb3Igc3RvbGVuIGN1cnJlbnQgc3RhcnQKKwl3aGlsZSAoX19idXN5ID4gMCkKKwkgIHsKKwkgICAgLy8gV29yayB1bnRpbCBubyBwcm9kdWN0aXZlIHRocmVhZCBsZWZ0LgorIyAgICAgICAgICAgcHJhZ21hIG9tcCBmbHVzaChfX2J1c3kpCisKKwkgICAgLy8gVGhyZWFkIGhhcyBvd24gd29yayB0byBkbworCSAgICB3aGlsZSAoX19teV9qb2IuX01fZmlyc3QgPD0gX19teV9qb2IuX01fbGFzdCkKKwkgICAgICB7CisJCS8vIGZldGNoLWFuZC1hZGQgY2FsbAorCQkvLyBSZXNlcnZlIGN1cnJlbnQgam9iIGJsb2NrIChzaXplIF9fY2h1bmtfc2l6ZSkgaW4gbXkgcXVldWUuCisJCV9EaWZmZXJlbmNlVHlwZSBfX2N1cnJlbnRfam9iID0KKwkJICBfX2ZldGNoX2FuZF9hZGQ8X0RpZmZlcmVuY2VUeXBlPigmKF9fbXlfam9iLl9NX2ZpcnN0KSwKKwkJCQkJCSAgIF9fY2h1bmtfc2l6ZSk7CisKKwkJLy8gVXBkYXRlIF9NX2xvYWQsIHRvIG1ha2UgdGhlIHRocmVlIHZhbHVlcyBjb25zaXN0ZW50LAorCQkvLyBfTV9maXJzdCBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCBpbiB0aGUgbWVhbnRpbWUKKwkJX19teV9qb2IuX01fbG9hZCA9IF9fbXlfam9iLl9NX2xhc3QgLSBfX215X2pvYi5fTV9maXJzdCArIDE7CisJCWZvciAoX0RpZmZlcmVuY2VUeXBlIF9fam9iX2NvdW50ZXIgPSAwOworCQkgICAgIF9fam9iX2NvdW50ZXIgPCBfX2NodW5rX3NpemUKKwkJICAgICAgICYmIF9fY3VycmVudF9qb2IgPD0gX19teV9qb2IuX01fbGFzdDsKKwkJICAgICArK19fam9iX2NvdW50ZXIpCisJCSAgeworCQkgICAgLy8gWWVzOiBwcm9jZXNzIGl0IQorCQkgICAgX19jdXJyZW50ID0gX19iZWdpbiArIF9fY3VycmVudF9qb2I7CisJCSAgICArK19fY3VycmVudF9qb2I7CisKKwkJICAgIC8vIERvIGFjdHVhbCB3b3JrLgorCQkgICAgX19yZXN1bHQgPSBfX3IoX19yZXN1bHQsIF9fZihfX29wLCBfX2N1cnJlbnQpKTsKKwkJICB9CisKKyMgICAgICAgICAgICAgICBwcmFnbWEgb21wIGZsdXNoKF9fYnVzeSkKKwkgICAgICB9CisKKwkgICAgLy8gQWZ0ZXIgcmVhY2hpbmcgdGhpcyBwb2ludCwgYSB0aHJlYWQncyBfX2pvYiBsaXN0IGlzIGVtcHR5LgorCSAgICBpZiAoX19pYW1fd29ya2luZykKKwkgICAgICB7CisJCS8vIFRoaXMgdGhyZWFkIG5vIGxvbmdlciBoYXMgd29yay4KKyMgICAgICAgICAgICAgICBwcmFnbWEgb21wIGF0b21pYworCQktLV9fYnVzeTsKKworCQlfX2lhbV93b3JraW5nID0gZmFsc2U7CisJICAgICAgfQorCisJICAgIF9EaWZmZXJlbmNlVHlwZSBfX3N1cHBvc2VkX2ZpcnN0LCBfX3N1cHBvc2VkX2xhc3QsCisJICAgICAgICAgICAgICAgICAgICBfX3N1cHBvc2VkX2xvYWQ7CisJICAgIGRvCisJICAgICAgeworCQkvLyBGaW5kIHJhbmRvbSBub25lbXB0eSBkZXF1ZSAobm90IG93biksIGRvIGNvbnNpc3RlbmN5IGNoZWNrLgorCQlfX3lpZWxkKCk7CisjICAgICAgICAgICAgICAgcHJhZ21hIG9tcCBmbHVzaChfX2J1c3kpCisJCV9fdmljdGltID0gX19yYW5kX2dlbigpOworCQlfX3N1cHBvc2VkX2ZpcnN0ID0gX19qb2JbX192aWN0aW0gKiBfX3N0cmlkZV0uX01fZmlyc3Q7CisJCV9fc3VwcG9zZWRfbGFzdCA9IF9fam9iW19fdmljdGltICogX19zdHJpZGVdLl9NX2xhc3Q7CisJCV9fc3VwcG9zZWRfbG9hZCA9IF9fam9iW19fdmljdGltICogX19zdHJpZGVdLl9NX2xvYWQ7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19idXN5ID4gMAorCQkgICAmJiAoKF9fc3VwcG9zZWRfbG9hZCA8PSAwKQorCQkgICAgICAgfHwgKChfX3N1cHBvc2VkX2ZpcnN0ICsgX19zdXBwb3NlZF9sb2FkIC0gMSkKKwkJCSAgICE9IF9fc3VwcG9zZWRfbGFzdCkpKTsKKworCSAgICBpZiAoX19idXN5ID09IDApCisJICAgICAgYnJlYWs7CisKKwkgICAgaWYgKF9fc3VwcG9zZWRfbG9hZCA+IDApCisJICAgICAgeworCQkvLyBIYXMgd29yayBhbmQgd29yayB0byBkby4KKwkJLy8gTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHN0ZWFsIChhdCBsZWFzdCBvbmUpLgorCQlfX3N0ZWFsID0gKF9fc3VwcG9zZWRfbG9hZCA8IDIpID8gMSA6IF9fc3VwcG9zZWRfbG9hZCAvIDI7CisKKwkJLy8gUHVzaCBfX3ZpY3RpbSdzIGN1cnJlbnQgc3RhcnQgZm9yd2FyZC4KKwkJX0RpZmZlcmVuY2VUeXBlIF9fc3RvbGVuX2ZpcnN0ID0KKwkJICBfX2ZldGNoX2FuZF9hZGQ8X0RpZmZlcmVuY2VUeXBlPgorCQkgICgmKF9fam9iW19fdmljdGltICogX19zdHJpZGVdLl9NX2ZpcnN0KSwgX19zdGVhbCk7CisJCV9EaWZmZXJlbmNlVHlwZSBfX3N0b2xlbl90cnkgPSAoX19zdG9sZW5fZmlyc3QgKyBfX3N0ZWFsCisJCQkJCQktIF9EaWZmZXJlbmNlVHlwZSgxKSk7CisKKwkJX19teV9qb2IuX01fZmlyc3QgPSBfX3N0b2xlbl9maXJzdDsKKwkJX19teV9qb2IuX01fbGFzdCA9IF9fZ251X3BhcmFsbGVsOjptaW4oX19zdG9sZW5fdHJ5LAorCQkJCQkJICAgICAgIF9fc3VwcG9zZWRfbGFzdCk7CisJCV9fbXlfam9iLl9NX2xvYWQgPSBfX215X2pvYi5fTV9sYXN0IC0gX19teV9qb2IuX01fZmlyc3QgKyAxOworCisJCS8vIEhhcyBwb3RlbnRpYWwgd29yayBhZ2Fpbi4KKyMgICAgICAgICAgICAgICBwcmFnbWEgb21wIGF0b21pYworCQkrK19fYnVzeTsKKwkJX19pYW1fd29ya2luZyA9IHRydWU7CisKKyMgICAgICAgICAgICAgICBwcmFnbWEgb21wIGZsdXNoKF9fYnVzeSkKKwkgICAgICB9CisjICAgICAgICAgICBwcmFnbWEgb21wIGZsdXNoKF9fYnVzeSkKKwkgIH0gLy8gZW5kIHdoaWxlIF9fYnVzeSA+IDAKKwkvLyBBZGQgYWNjdW11bGF0ZWQgcmVzdWx0IHRvIG91dHB1dC4KKwlvbXBfc2V0X2xvY2soJl9fb3V0cHV0X2xvY2spOworCV9fb3V0cHV0ID0gX19yKF9fb3V0cHV0LCBfX3Jlc3VsdCk7CisJb21wX3Vuc2V0X2xvY2soJl9fb3V0cHV0X2xvY2spOworICAgICAgfQorCisgICAgICBkZWxldGVbXSBfX2pvYjsKKworICAgICAgLy8gUG9pbnRzIHRvIGxhc3QgZWxlbWVudCBwcm9jZXNzZWQgKG5lZWRlZCBhcyByZXR1cm4gdmFsdWUgZm9yCisgICAgICAvLyBzb21lIGFsZ29yaXRobXMgbGlrZSB0cmFuc2Zvcm0pCisgICAgICBfX2YuX01fZmluaXNoX2l0ZXJhdG9yID0gX19iZWdpbiArIF9fbGVuZ3RoOworCisgICAgICBvbXBfZGVzdHJveV9sb2NrKCZfX291dHB1dF9sb2NrKTsKKworICAgICAgcmV0dXJuIF9fb3A7CisgICAgfQorfSAvLyBlbmQgbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QQVJBTExFTF9XT1JLU1RFQUxJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2FycmF5IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2FycmF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNmRhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvYXJyYXkKQEAgLTAsMCArMSwyNjcgQEAKKy8vIFByb2ZpbGUgYXJyYXkgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvYXJyYXkKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9BUlJBWQorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX0FSUkFZIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgc3RydWN0IGFycmF5CisgICAgeworICAgICAgdHlwZWRlZiBfVHAgCSAgICAJCQkgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKgkJCSAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgICAJICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAgICAgICAgICAgICAJICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgICAgICAgICAgICAgICAgICAgIAkgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIAkgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4JICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIFN1cHBvcnQgZm9yIHplcm8tc2l6ZWQgYXJyYXlzIG1hbmRhdG9yeS4KKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0M6Ol9fYXJyYXlfdHJhaXRzPF9UcCwgX05tPiBfQVRfVHlwZTsKKyAgICAgIHR5cGVuYW1lIF9BVF9UeXBlOjpfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbGVtczsKKworICAgICAgLy8gTm8gZXhwbGljaXQgY29uc3RydWN0L2NvcHkvZGVzdHJveSBmb3IgYWdncmVnYXRlIHR5cGUuCisKKyAgICAgIC8vIERSIDc3Ni4KKyAgICAgIHZvaWQKKyAgICAgIGZpbGwoY29uc3QgdmFsdWVfdHlwZSYgX191KQorICAgICAgeyBzdGQ6OmZpbGxfbihiZWdpbigpLCBzaXplKCksIF9fdSk7IH0KKworICAgICAgdm9pZAorICAgICAgc3dhcChhcnJheSYgX19vdGhlcikKKyAgICAgIG5vZXhjZXB0KG5vZXhjZXB0KHN3YXAoc3RkOjpkZWNsdmFsPF9UcCY+KCksIHN0ZDo6ZGVjbHZhbDxfVHAmPigpKSkpCisgICAgICB7IHN0ZDo6c3dhcF9yYW5nZXMoYmVnaW4oKSwgZW5kKCksIF9fb3RoZXIuYmVnaW4oKSk7IH0KKworICAgICAgLy8gSXRlcmF0b3JzLgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKGRhdGEoKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKGRhdGEoKSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBpdGVyYXRvcihkYXRhKCkgKyBfTm0pOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoZGF0YSgpICsgX05tKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yIAorICAgICAgcmJlZ2luKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCisgICAgICByYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvciAKKyAgICAgIHJlbmQoKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIAorICAgICAgcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoZGF0YSgpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihkYXRhKCkgKyBfTm0pOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCisgICAgICBjcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCisgICAgICBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIC8vIENhcGFjaXR5LgorICAgICAgY29uc3RleHByIHNpemVfdHlwZSAKKyAgICAgIHNpemUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfTm07IH0KKworICAgICAgY29uc3RleHByIHNpemVfdHlwZSAKKyAgICAgIG1heF9zaXplKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX05tOyB9CisKKyAgICAgIGNvbnN0ZXhwciBib29sIAorICAgICAgZW1wdHkoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBzaXplKCkgPT0gMDsgfQorCisgICAgICAvLyBFbGVtZW50IGFjY2Vzcy4KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQorICAgICAgewlyZXR1cm4gX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgX19uKTsgfQorCisgICAgICBjb25zdGV4cHIgY29uc3RfcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfQVRfVHlwZTo6X1NfcmVmKF9NX2VsZW1zLCBfX24pOyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgYXQoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKwlpZiAoX19uID49IF9ObSkKKwkgIHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJhcnJheTo6YXQiKSk7CisJcmV0dXJuIF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIF9fbik7CisgICAgICB9CisKKyAgICAgIGNvbnN0ZXhwciBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJLy8gUmVzdWx0IG9mIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gbXVzdCBiZSBhbiBsdmFsdWUgc28gdXNlCisJLy8gYm9vbGVhbiA/IGx2YWx1ZSA6ICh0aHJvdy1leHByLCBsdmFsdWUpCisJcmV0dXJuIF9fbiA8IF9ObSA/IF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIF9fbikKKwkgIDogKHN0ZDo6X190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJhcnJheTo6YXQiKSksCisJICAgICBfQVRfVHlwZTo6X1NfcmVmKF9NX2VsZW1zLCAwKSk7CisgICAgICB9CisKKyAgICAgIHJlZmVyZW5jZSAKKyAgICAgIGZyb250KCkKKyAgICAgIHsgcmV0dXJuICpiZWdpbigpOyB9CisKKyAgICAgIGNvbnN0ZXhwciBjb25zdF9yZWZlcmVuY2UgCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfQVRfVHlwZTo6X1NfcmVmKF9NX2VsZW1zLCAwKTsgfQorCisgICAgICByZWZlcmVuY2UgCisgICAgICBiYWNrKCkKKyAgICAgIHsgcmV0dXJuIF9ObSA/ICooZW5kKCkgLSAxKSA6ICplbmQoKTsgfQorCisgICAgICBjb25zdGV4cHIgY29uc3RfcmVmZXJlbmNlIAorICAgICAgYmFjaygpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9ObSA/IF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIF9ObSAtIDEpCisgCSAgICAgICAgICAgOiBfQVRfVHlwZTo6X1NfcmVmKF9NX2VsZW1zLCAwKTsJICAKKyAgICAgIH0KKworICAgICAgcG9pbnRlcgorICAgICAgZGF0YSgpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKF9BVF9UeXBlOjpfU19yZWYoX01fZWxlbXMsIDApKTsgfQorCisgICAgICBjb25zdF9wb2ludGVyCisgICAgICBkYXRhKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX0FUX1R5cGU6Ol9TX3JlZihfTV9lbGVtcywgMCkpOyB9CisgICAgfTsKKworICAvLyBBcnJheSBjb21wYXJpc29ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wgCisgICAgb3BlcmF0b3I9PShjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuIHN0ZDo6ZXF1YWwoX19vbmUuYmVnaW4oKSwgX19vbmUuZW5kKCksIF9fdHdvLmJlZ2luKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gIShfX29uZSA9PSBfX3R3byk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fYSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX2IpCisgICAgeyAKKyAgICAgIHJldHVybiBzdGQ6OmxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9fYS5iZWdpbigpLCBfX2EuZW5kKCksCisJCQkJCSAgX19iLmJlZ2luKCksIF9fYi5lbmQoKSk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuIF9fdHdvIDwgX19vbmU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICB7IHJldHVybiAhKF9fb25lID4gX190d28pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gIShfX29uZSA8IF9fdHdvKTsgfQorCisgIC8vIFNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIG5vZXhjZXB0KG5vZXhjZXB0KF9fb25lLnN3YXAoX190d28pKSkKKyAgICB7IF9fb25lLnN3YXAoX190d28pOyB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludCwgdHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgY29uc3RleHByIF9UcCYKKyAgICBnZXQoYXJyYXk8X1RwLCBfTm0+JiBfX2Fycikgbm9leGNlcHQKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9JbnQgPCBfTm0sICJpbmRleCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0M6Ol9fYXJyYXlfdHJhaXRzPF9UcCwgX05tPjo6CisJX1NfcmVmKF9fYXJyLl9NX2VsZW1zLCBfSW50KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludCwgdHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgY29uc3RleHByIF9UcCYmCisgICAgZ2V0KGFycmF5PF9UcCwgX05tPiYmIF9fYXJyKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoX0ludCA8IF9ObSwgImluZGV4IGlzIG91dCBvZiBib3VuZHMiKTsKKyAgICAgIHJldHVybiBzdGQ6Om1vdmUoZ2V0PF9JbnQ+KF9fYXJyKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGNvbnN0ZXhwciBjb25zdCBfVHAmCisgICAgZ2V0KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19hcnIpIG5vZXhjZXB0CisgICAgeworICAgICAgc3RhdGljX2Fzc2VydChfSW50IDwgX05tLCAiaW5kZXggaXMgb3V0IG9mIGJvdW5kcyIpOworICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9DOjpfX2FycmF5X3RyYWl0czxfVHAsIF9ObT46OgorCV9TX3JlZihfX2Fyci5fTV9lbGVtcywgX0ludCk7CisgICAgfQorfSAvLyBuYW1lc3BhY2UgX19wcm9maWxlCisKKyAgLy8gVHVwbGUgaW50ZXJmYWNlIHRvIGNsYXNzIHRlbXBsYXRlIGFycmF5LgorCisgIC8vLyB0dXBsZV9zaXplCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIHN0cnVjdCB0dXBsZV9zaXplPF9fcHJvZmlsZTo6YXJyYXk8X1RwLCBfTm0+PgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBfTm0+IHsgfTsKKworICAvLy8gdHVwbGVfZWxlbWVudAorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSW50LCB0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBzdHJ1Y3QgdHVwbGVfZWxlbWVudDxfSW50LCBfX3Byb2ZpbGU6OmFycmF5PF9UcCwgX05tPj4KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9JbnQgPCBfTm0sICJpbmRleCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICB0eXBlZGVmIF9UcCB0eXBlOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8vIF9HTElCQ1hYX1BST0ZJTEVfQVJSQVkKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9iYXNlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzdmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvYmFzZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8vIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvYmFzZS5oCisgKiAgQGJyaWVmIFNlcXVlbnRpYWwgaGVscGVyIGZ1bmN0aW9ucy4KKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcHJvZmlsZSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgTGl4aWEgTGl1CisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9CQVNFX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9CQVNFX0ggMQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxwcm9maWxlL2ltcGwvcHJvZmlsZXIuaD4KKworLy8gUHJvZmlsaW5nIG1vZGUgbmFtZXNwYWNlcy4KKworLyoqCisgKiBAbmFtZXNwYWNlIHN0ZDo6X19wcm9maWxlCisgKiBAYnJpZWYgR05VIHByb2ZpbGUgY29kZSwgcmVwbGFjZXMgc3RhbmRhcmQgYmVoYXZpb3Igd2l0aCBwcm9maWxlIGJlaGF2aW9yLgorICovCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkgCit7IAorICBuYW1lc3BhY2UgX19wcm9maWxlIHsgfSAKK30KKworLyoqCisgKiBAbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKyAqIEBicmllZiBHTlUgcHJvZmlsZSBjb2RlIGZvciBwdWJsaWMgdXNlLgorICovCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworICAvLyBJbXBvcnQgYWxsIHRoZSBwcm9maWxlIHZlcnNpb25zIG9mIGNvbXBvbmVudHMgaW4gbmFtZXNwYWNlIHN0ZC4KKyAgdXNpbmcgbmFtZXNwYWNlIHN0ZDo6X19wcm9maWxlOworfQorCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX0JBU0VfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2JpdHNldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9iaXRzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE2NTBiMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9iaXRzZXQKQEAgLTAsMCArMSwzODIgQEAKKy8vIFByb2ZpbGluZyBiaXRzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvYml0c2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfQklUU0VUCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfQklUU0VUCisKKyNpbmNsdWRlIDxiaXRzZXQ+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fcHJvZmlsZQoreworICAvLy8gQ2xhc3Mgc3RkOjpiaXRzZXQgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBjbGFzcyBiaXRzZXQKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQzo6Yml0c2V0PF9OYj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9DOjpiaXRzZXQ8X05iPiBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIGJpdCByZWZlcmVuY2U6CisgICAgICBjbGFzcyByZWZlcmVuY2UKKyAgICAgIDogcHJpdmF0ZSBfQmFzZTo6cmVmZXJlbmNlCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlIF9CYXNlX3JlZjsKKworCWZyaWVuZCBjbGFzcyBiaXRzZXQ7CisJcmVmZXJlbmNlKCk7CisKKwlyZWZlcmVuY2UoY29uc3QgX0Jhc2VfcmVmJiBfX2Jhc2UsIGJpdHNldCogX19zZXEpIF9HTElCQ1hYX05PRVhDRVBUCisJOiBfQmFzZV9yZWYoX19iYXNlKQorCXsgfQorCisgICAgICBwdWJsaWM6CisJcmVmZXJlbmNlKGNvbnN0IHJlZmVyZW5jZSYgX194KSBfR0xJQkNYWF9OT0VYQ0VQVAorCTogX0Jhc2VfcmVmKF9feCkKKwl7IH0KKworCXJlZmVyZW5jZSYKKwlvcGVyYXRvcj0oYm9vbCBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisJeworCSAgKnN0YXRpY19jYXN0PF9CYXNlX3JlZio+KHRoaXMpID0gX194OworCSAgcmV0dXJuICp0aGlzOworCX0KKworCXJlZmVyZW5jZSYKKwlvcGVyYXRvcj0oY29uc3QgcmVmZXJlbmNlJiBfX3gpIF9HTElCQ1hYX05PRVhDRVBUCisJeworCSAgKnN0YXRpY19jYXN0PF9CYXNlX3JlZio+KHRoaXMpID0gX194OworCSAgcmV0dXJuICp0aGlzOworCX0KKworCWJvb2wKKwlvcGVyYXRvcn4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorCXsKKwkgIHJldHVybiB+KCpzdGF0aWNfY2FzdDxjb25zdCBfQmFzZV9yZWYqPih0aGlzKSk7CisJfQorCisJb3BlcmF0b3IgYm9vbCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisJeworCSAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBfQmFzZV9yZWYqPih0aGlzKTsKKwl9CisKKwlyZWZlcmVuY2UmCisJZmxpcCgpIF9HTElCQ1hYX05PRVhDRVBUCisJeworCSAgX0Jhc2VfcmVmOjpmbGlwKCk7CisJICByZXR1cm4gKnRoaXM7CisJfQorICAgICAgfTsKKworICAgICAgLy8gMjMuMy41LjEgY29uc3RydWN0b3JzOgorICAgICAgX0dMSUJDWFhfQ09OU1RFWFBSIGJpdHNldCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICA6IF9CYXNlKCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdGV4cHIgYml0c2V0KHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkgbm9leGNlcHQKKyNlbHNlCisgICAgICBiaXRzZXQodW5zaWduZWQgbG9uZyBfX3ZhbCkKKyNlbmRpZgorICAgICAgOiBfQmFzZShfX3ZhbCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBiaXRzZXQoY29uc3Qgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKKwkgICAgICAgdHlwZW5hbWUgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKwkgICAgICAgX19wb3MgPSAwLAorCSAgICAgICB0eXBlbmFtZSBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorCSAgICAgICBfX24gPSAoc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zKSkKKwk6IF9CYXNlKF9fc3RyLCBfX3BvcywgX19uKSB7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMzk2LiB3aGF0IGFyZSBjaGFyYWN0ZXJzIHplcm8gYW5kIG9uZS4KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgorCWJpdHNldChjb25zdCBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAorCSAgICAgICB0eXBlbmFtZSBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQorCSAgICAgICBfX3BvcywKKwkgICAgICAgdHlwZW5hbWUgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKKwkgICAgICAgX19uLAorCSAgICAgICBfQ2hhclQgX196ZXJvLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSkKKwk6IF9CYXNlKF9fc3RyLCBfX3BvcywgX19uLCBfX3plcm8sIF9fb25lKSB7IH0KKworICAgICAgYml0c2V0KGNvbnN0IF9CYXNlJiBfX3gpIDogX0Jhc2UoX194KSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgYml0c2V0KGNvbnN0IF9DaGFyVCogX19zdHIsCisJICAgICAgIHR5cGVuYW1lIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVD46OnNpemVfdHlwZSBfX24KKwkgICAgICAgPSBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQ+OjpucG9zLAorCSAgICAgICBfQ2hhclQgX196ZXJvID0gX0NoYXJUKCcwJyksIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKQorCTogX0Jhc2UoX19zdHIsIF9fbiwgX196ZXJvLCBfX29uZSkgeyB9CisjZW5kaWYKKworICAgICAgLy8gMjMuMy41LjIgYml0c2V0IG9wZXJhdGlvbnM6CisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yJj0oY29uc3QgYml0c2V0PF9OYj4mIF9fcmhzKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCV9NX2Jhc2UoKSAmPSBfX3JoczsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgb3BlcmF0b3J8PShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJX01fYmFzZSgpIHw9IF9fcmhzOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvcl49KGNvbnN0IGJpdHNldDxfTmI+JiBfX3JocykgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfTV9iYXNlKCkgXj0gX19yaHM7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIG9wZXJhdG9yPDw9KHNpemVfdCBfX3BvcykgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfTV9iYXNlKCkgPDw9IF9fcG9zOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYml0c2V0PF9OYj4mCisgICAgICBvcGVyYXRvcj4+PShzaXplX3QgX19wb3MpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisJX01fYmFzZSgpID4+PSBfX3BvczsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgc2V0KCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfQmFzZTo6c2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxODYuIGJpdHNldDo6c2V0KCkgc2Vjb25kIHBhcmFtZXRlciBzaG91bGQgYmUgYm9vbAorICAgICAgYml0c2V0PF9OYj4mCisgICAgICBzZXQoc2l6ZV90IF9fcG9zLCBib29sIF9fdmFsID0gdHJ1ZSkKKyAgICAgIHsKKwlfQmFzZTo6c2V0KF9fcG9zLCBfX3ZhbCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIHJlc2V0KCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKwlfQmFzZTo6cmVzZXQoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGJpdHNldDxfTmI+JgorICAgICAgcmVzZXQoc2l6ZV90IF9fcG9zKQorICAgICAgeworCV9CYXNlOjpyZXNldChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPgorICAgICAgb3BlcmF0b3J+KCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGJpdHNldCh+X01fYmFzZSgpKTsgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIGZsaXAoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCV9CYXNlOjpmbGlwKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBiaXRzZXQ8X05iPiYKKyAgICAgIGZsaXAoc2l6ZV90IF9fcG9zKQorICAgICAgeworCV9CYXNlOjpmbGlwKF9fcG9zKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8vIGVsZW1lbnQgYWNjZXNzOgorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMTEuIEJpdHNldCBtaW5vciBwcm9ibGVtcworICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3BvcykKKyAgICAgIHsKKwlyZXR1cm4gcmVmZXJlbmNlKF9NX2Jhc2UoKVtfX3Bvc10sIHRoaXMpOworICAgICAgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxMS4gQml0c2V0IG1pbm9yIHByb2JsZW1zCisgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbAorICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19wb3MpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9CYXNlOjpvcGVyYXRvcltdKF9fcG9zKTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OnRvX3Vsb25nOworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHVzaW5nIF9CYXNlOjp0b191bGxvbmc7CisjZW5kaWYKKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KKyAgICAgICAgdG9fc3RyaW5nKCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fYmFzZSgpLnRlbXBsYXRlIHRvX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4oKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAzOTYuIHdoYXQgYXJlIGNoYXJhY3RlcnMgemVybyBhbmQgb25lLgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CisJdG9fc3RyaW5nKF9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKSBjb25zdAorCXsKKwkgIHJldHVybiBfTV9iYXNlKCkudGVtcGxhdGUKKwkgICAgdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPihfX3plcm8sIF9fb25lKTsKKwl9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzNC4gYml0c2V0Ojp0b19zdHJpbmcoKSBoYXJkIHRvIHVzZS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKyAgICAgICAgdG9fc3RyaW5nKCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KCk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gODUzLiB0b19zdHJpbmcgbmVlZHMgdXBkYXRpbmcgd2l0aCB6ZXJvIGFuZCBvbmUuCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKwl0b19zdHJpbmcoX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpIGNvbnN0CisJeyByZXR1cm4gdG9fc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywKKwkgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KF9femVybywgX19vbmUpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBzdGQ6OmNoYXJfdHJhaXRzPF9DaGFyVD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPgorICAgICAgICB0b19zdHJpbmcoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRvX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4gPigpOworICAgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KKwlzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxfQ2hhclQ+ID4KKwl0b19zdHJpbmcoX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpIGNvbnN0CisJeworCSAgcmV0dXJuIHRvX3N0cmluZzxfQ2hhclQsIHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgICAgICAgICAgICAgc3RkOjphbGxvY2F0b3I8X0NoYXJUPiA+KF9femVybywgX19vbmUpOworCX0KKworICAgICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0b3I8Y2hhcj4gPgorICAgICAgdG9fc3RyaW5nKCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gdG9fc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+KCk7CisgICAgICB9CisKKyAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIHN0ZDo6YWxsb2NhdG9yPGNoYXI+ID4KKyAgICAgIHRvX3N0cmluZyhjaGFyIF9femVybywgY2hhciBfX29uZSA9ICcxJykgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gdG9fc3RyaW5nPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sCisJICAgICAgICAgICAgICAgICBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+KF9femVybywgX19vbmUpOworICAgICAgfQorCisgICAgICB1c2luZyBfQmFzZTo6Y291bnQ7CisgICAgICB1c2luZyBfQmFzZTo6c2l6ZTsKKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV9iYXNlKCkgPT0gX19yaHM7IH0KKworICAgICAgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBiaXRzZXQ8X05iPiYgX19yaHMpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBfTV9iYXNlKCkgIT0gX19yaHM7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OnRlc3Q7CisgICAgICB1c2luZyBfQmFzZTo6YWxsOworICAgICAgdXNpbmcgX0Jhc2U6OmFueTsKKyAgICAgIHVzaW5nIF9CYXNlOjpub25lOworCisgICAgICBiaXRzZXQ8X05iPgorICAgICAgb3BlcmF0b3I8PChzaXplX3QgX19wb3MpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBiaXRzZXQ8X05iPihfTV9iYXNlKCkgPDwgX19wb3MpOyB9CisKKyAgICAgIGJpdHNldDxfTmI+CisgICAgICBvcGVyYXRvcj4+KHNpemVfdCBfX3BvcykgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9NX2Jhc2UoKSA+PiBfX3Bvcyk7IH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yJihjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9feCkgJj0gX195OyB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yfChjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9feCkgfD0gX195OyB9CisKKyAgdGVtcGxhdGU8c2l6ZV90IF9OYj4KKyAgICBiaXRzZXQ8X05iPgorICAgIG9wZXJhdG9yXihjb25zdCBiaXRzZXQ8X05iPiYgX194LCBjb25zdCBiaXRzZXQ8X05iPiYgX195KSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIGJpdHNldDxfTmI+KF9feCkgXj0gX195OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCBzaXplX3QgX05iPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJpdHNldDxfTmI+JiBfX3gpCisgICAgeyByZXR1cm4gX19pcyA+PiBfX3guX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCBzaXplX3QgX05iPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGJpdHNldDxfTmI+JiBfX3gpCisgICAgeyByZXR1cm4gX19vcyA8PCBfX3guX01fYmFzZSgpOyB9Cit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgLy8gRFIgMTE4Mi4KKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgYml0c2V0LgorICB0ZW1wbGF0ZTxzaXplX3QgX05iPgorICAgIHN0cnVjdCBoYXNoPF9fcHJvZmlsZTo6Yml0c2V0PF9OYj4+CisgICAgOiBwdWJsaWMgX19oYXNoX2Jhc2U8c2l6ZV90LCBfX3Byb2ZpbGU6OmJpdHNldDxfTmI+PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX3Byb2ZpbGU6OmJpdHNldDxfTmI+JiBfX2IpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Omhhc2g8X0dMSUJDWFhfU1REX0M6OmJpdHNldDxfTmI+PigpKF9fYi5fTV9iYXNlKCkpOyB9CisgICAgfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvZGVxdWUgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvZGVxdWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4MjY4NAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9kZXF1ZQpAQCAtMCwwICsxLDQ2NiBAQAorLy8gUHJvZmlsaW5nIGRlcXVlIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL2RlcXVlCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfREVRVUUKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9ERVFVRSAxCisKKyNpbmNsdWRlIDxkZXF1ZT4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19wcm9maWxlCit7CisgIC8vLyBDbGFzcyBzdGQ6OmRlcXVlIHdyYXBwZXIgd2l0aCBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGRlcXVlCisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0M6OmRlcXVlPF9UcCwgX0FsbG9jYXRvcj4KKyAgICB7CisgICAgICB0eXBlZGVmICBfR0xJQkNYWF9TVERfQzo6ZGVxdWU8X1RwLCBfQWxsb2NhdG9yPiBfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZSAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgY29uc3RfcmVmZXJlbmNlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmV2ZXJzZV9pdGVyYXRvciAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX1RwCQkJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgY29uc3RfcG9pbnRlcjsKKworICAgICAgLy8gMjMuMi4xLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICAgIGV4cGxpY2l0CisgICAgICBkZXF1ZShjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fYSkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBleHBsaWNpdAorICAgICAgZGVxdWUoc2l6ZV90eXBlIF9fbikKKyAgICAgIDogX0Jhc2UoX19uKSB7IH0KKworICAgICAgZGVxdWUoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAorCSAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hKSB7IH0KKyNlbHNlCisgICAgICBleHBsaWNpdAorICAgICAgZGVxdWUoc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlID0gX1RwKCksCisJICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX3ZhbHVlLCBfX2EpIHsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICBkZXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorCTogX0Jhc2UoX19maXJzdCwgX19sYXN0LCBfX2EpCisgICAgICAgIHsgfQorCisgICAgICBkZXF1ZShjb25zdCBkZXF1ZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpIHsgfQorCisgICAgICBkZXF1ZShjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgZGVxdWUoZGVxdWUmJiBfX3gpCisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKQorICAgICAgeyB9CisKKyAgICAgIGRlcXVlKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2EpIHsgfQorI2VuZGlmCisKKyAgICAgIH5kZXF1ZSgpIF9HTElCQ1hYX05PRVhDRVBUIHsgfQorCisgICAgICBkZXF1ZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBkZXF1ZSYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGRlcXVlJgorICAgICAgb3BlcmF0b3I9KGRlcXVlJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBkZXF1ZSYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwkqc3RhdGljX2Nhc3Q8X0Jhc2UqPih0aGlzKSA9IF9fbDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisgICAgICAgIHZvaWQKKyAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX0Jhc2U6OmFzc2lnbihfX2ZpcnN0LCBfX2xhc3QpOworCX0KKworICAgICAgdm9pZAorICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX190KQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19uLCBfX3QpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9CYXNlOjphc3NpZ24oX19sKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIDIzLjIuMS4yIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fc3opCisgICAgICB7CisJX0Jhc2U6OnJlc2l6ZShfX3N6KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBjb25zdCBfVHAmIF9fYykKKyAgICAgIHsKKwlfQmFzZTo6cmVzaXplKF9fc3osIF9fYyk7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBfVHAgX19jID0gX1RwKCkpCisgICAgICB7CisJX0Jhc2U6OnJlc2l6ZShfX3N6LCBfX2MpOworICAgICAgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB1c2luZyBfQmFzZTo6c2hyaW5rX3RvX2ZpdDsKKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6ZW1wdHk7CisKKyAgICAgIC8vIGVsZW1lbnQgYWNjZXNzOgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7CisJcmV0dXJuIF9NX2Jhc2UoKVtfX25dOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX01fYmFzZSgpW19fbl07CisgICAgICB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjphdDsKKworICAgICAgcmVmZXJlbmNlCisgICAgICBmcm9udCgpCisgICAgICB7CisJcmV0dXJuIF9CYXNlOjpmcm9udCgpOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsKKwlyZXR1cm4gX0Jhc2U6OmZyb250KCk7CisgICAgICB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgYmFjaygpCisgICAgICB7CisJcmV0dXJuIF9CYXNlOjpiYWNrKCk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgYmFjaygpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9CYXNlOjpiYWNrKCk7CisgICAgICB9CisKKyAgICAgIC8vIDIzLjIuMS4zIG1vZGlmaWVyczoKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnB1c2hfZnJvbnQoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KQorICAgICAgeworCV9CYXNlOjpwdXNoX2JhY2soX194KTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfZnJvbnQoX1RwJiYgX194KQorICAgICAgeyBlbXBsYWNlX2Zyb250KHN0ZDo6bW92ZShfX3gpKTsgfQorCisgICAgICB2b2lkCisgICAgICBwdXNoX2JhY2soX1RwJiYgX194KQorICAgICAgeyBlbXBsYWNlX2JhY2soc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGVtcGxhY2VfZnJvbnQoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgX0Jhc2U6OmVtcGxhY2VfZnJvbnQoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkCisgICAgICAgIGVtcGxhY2VfYmFjayhfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBfQmFzZTo6ZW1wbGFjZV9iYWNrKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgZW1wbGFjZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6ZW1wbGFjZShfX3Bvc2l0aW9uLAorCQkJCQkgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIHJldHVybiBpdGVyYXRvcihfX3Jlcyk7CisJfQorI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCisgICAgICB7CisJdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBfX3gpOworCXJldHVybiBpdGVyYXRvcihfX3Jlcyk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9UcCYmIF9feCkKKyAgICAgIHsgcmV0dXJuIGVtcGxhY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9CYXNlOjppbnNlcnQoX19wLCBfX2wpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKwlfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCisJICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworCSAgX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QpOworCX0KKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKwlfQmFzZTo6cG9wX2Zyb250KCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHBvcF9iYWNrKCkKKyAgICAgIHsKKwlfQmFzZTo6cG9wX2JhY2soKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJaWYgKF9fcG9zaXRpb24gPT0gYmVnaW4oKSB8fCBfX3Bvc2l0aW9uID09IGVuZCgpLTEpCisJICB7CisJICAgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbikpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pOworCSAgICByZXR1cm4gaXRlcmF0b3IoX19yZXMpOworCSAgfQorICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCS8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkvLyAxNTEuIGNhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcgorICAgICAgICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QsIF9fbGFzdCkpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGRlcXVlJiBfX3gpCisgICAgICB7CisJX0Jhc2U6OnN3YXAoX194KTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworCV9CYXNlOjpjbGVhcigpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBfR0xJQkNYWF9OT0VYQ0VQVCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVCB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGRlcXVlPF9UcCwgX0FsbG9jPiYgX19saHMsIGRlcXVlPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9mb3J3YXJkX2xpc3QgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvZm9yd2FyZF9saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTA0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvZm9yd2FyZF9saXN0CkBAIC0wLDAgKzEsMTgyIEBACisvLyA8Zm9yd2FyZF9saXN0PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9mb3J3YXJkX2xpc3QKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgZGVidWcgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfRk9SV0FSRF9MSVNUCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfRk9SV0FSRF9MSVNUIDEKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxmb3J3YXJkX2xpc3Q+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fcHJvZmlsZQoreworICAvLy8gQ2xhc3Mgc3RkOjpmb3J3YXJkX2xpc3Qgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyBmb3J3YXJkX2xpc3QKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQzo6Zm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0M6OmZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4gX0Jhc2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfQWxsb2M+Ojp0ZW1wbGF0ZQorICAgICAgICByZWJpbmQ8X0dMSUJDWFhfU1REX0M6Ol9Gd2RfbGlzdF9ub2RlPF9UcD4+OjpvdGhlciBfTm9kZV9hbGxvY190eXBlOworCisgICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19hbGxvY190cmFpdHM8X05vZGVfYWxsb2NfdHlwZT4gX05vZGVfYWxsb2NfdHJhaXRzOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKKworICAgICAgLy8gMjMuMi4zLjEgY29uc3RydWN0L2NvcHkvZGVzdHJveToKKyAgICAgIGV4cGxpY2l0CisgICAgICBmb3J3YXJkX2xpc3QoY29uc3QgX0FsbG9jJiBfX2FsID0gX0FsbG9jKCkpCisgICAgICA6IF9CYXNlKF9fYWwpIHsgfQorCisgICAgICBmb3J3YXJkX2xpc3QoY29uc3QgZm9yd2FyZF9saXN0JiBfX2xpc3QsIGNvbnN0IF9BbGxvYyYgX19hbCkKKyAgICAgIDogX0Jhc2UoX19saXN0LCBfX2FsKQorICAgICAgeyB9CisKKyAgICAgIGZvcndhcmRfbGlzdChmb3J3YXJkX2xpc3QmJiBfX2xpc3QsIGNvbnN0IF9BbGxvYyYgX19hbCkKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9fbGlzdCksIF9fYWwpCisgICAgICB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGZvcndhcmRfbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYWwgPSBfQWxsb2MoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2FsKQorICAgICAgeyB9CisKKyAgICAgIGZvcndhcmRfbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2FsID0gX0FsbG9jKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX192YWx1ZSwgX19hbCkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyAgICAgICAgZm9yd2FyZF9saXN0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hbCA9IF9BbGxvYygpKQorICAgICAgICA6IF9CYXNlKF9fZmlyc3QsIF9fbGFzdCwgX19hbCkKKyAgICAgICAgeyB9CisKKyAgICAgIGZvcndhcmRfbGlzdChjb25zdCBmb3J3YXJkX2xpc3QmIF9fbGlzdCkKKyAgICAgIDogX0Jhc2UoX19saXN0KQorICAgICAgeyB9CisKKyAgICAgIGZvcndhcmRfbGlzdChmb3J3YXJkX2xpc3QmJiBfX2xpc3QpIG5vZXhjZXB0CisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX2xpc3QpKSB7IH0KKworICAgICAgZm9yd2FyZF9saXN0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHA+IF9faWwsCisgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2FsID0gX0FsbG9jKCkpCisgICAgICA6IF9CYXNlKF9faWwsIF9fYWwpCisgICAgICB7IH0KKworICAgICAgfmZvcndhcmRfbGlzdCgpIG5vZXhjZXB0CisgICAgICB7IH0KKworICAgICAgZm9yd2FyZF9saXN0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IGZvcndhcmRfbGlzdCYgX19saXN0KQorICAgICAgeworCXN0YXRpY19jYXN0PF9CYXNlJj4oKnRoaXMpID0gX19saXN0OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgZm9yd2FyZF9saXN0JgorICAgICAgb3BlcmF0b3I9KGZvcndhcmRfbGlzdCYmIF9fbGlzdCkKKyAgICAgIG5vZXhjZXB0KF9Ob2RlX2FsbG9jX3RyYWl0czo6X1Nfbm90aHJvd19tb3ZlKCkpCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBzdGQ6Om1vdmUoX19saXN0KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGZvcndhcmRfbGlzdCYKKyAgICAgIG9wZXJhdG9yPShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2lsKQorICAgICAgeworCXN0YXRpY19jYXN0PF9CYXNlJj4oKnRoaXMpID0gX19pbDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBub2V4Y2VwdCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x5KQorICAgIHsgcmV0dXJuIF9fbHguX01fYmFzZSgpID09IF9fbHkuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiBfX2x4Ll9NX2Jhc2UoKSA8IF9fbHkuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x5KQorICAgIHsgcmV0dXJuICEoX19seCA9PSBfX2x5KTsgfQorCisgIC8vLyBCYXNlZCBvbiBvcGVyYXRvcjwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiAoX19seSA8IF9fbHgpOyB9CisKKyAgLy8vIEJhc2VkIG9uIG9wZXJhdG9yPAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seCwKKyAgICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeyByZXR1cm4gIShfX2x4IDwgX19seSk7IH0KKworICAvLy8gQmFzZWQgb24gb3BlcmF0b3I8CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBmb3J3YXJkX2xpc3Q8X1RwLCBfQWxsb2M+JiBfX2x4LAorICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZF9saXN0PF9UcCwgX0FsbG9jPiYgX19seSkKKyAgICB7IHJldHVybiAhKF9fbHkgPCBfX2x4KTsgfQorCisgIC8vLyBTZWUgc3RkOjpmb3J3YXJkX2xpc3Q6OnN3YXAoKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHgsCisJIGZvcndhcmRfbGlzdDxfVHAsIF9BbGxvYz4mIF9fbHkpCisgICAgeyBfX2x4LnN3YXAoX19seSk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19wcm9maWxlCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXIuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxYmI2NAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyLmgKQEAgLTAsMCArMSw0MDUgQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyLmgKKyAqICBAYnJpZWYgSW50ZXJmYWNlIG9mIHRoZSBwcm9maWxpbmcgcnVudGltZSBsaWJyYXJ5LgorICovCisKKy8vIFdyaXR0ZW4gYnkgTGl4aWEgTGl1IGFuZCBTaWx2aXVzIFJ1cy4KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9IIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKKy8vIE1lY2hhbmlzbSB0byBkZWZpbmUgZGF0YSB3aXRoIGlubGluZSBsaW5rYWdlLgorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9VTklOSVRfREFUQShfX3R5cGUsIF9fbmFtZSkgICAgICAgICAgICAgXAorICBpbmxpbmUgX190eXBlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2dldF8jI19fbmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBfX3R5cGUgX19uYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBfX25hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX190eXBlLCBfX25hbWUsIF9faW5pdGlhbF92YWx1ZS4uLikgXAorICBpbmxpbmUgX190eXBlJiBfX2dldF8jI19fbmFtZSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgX190eXBlIF9fbmFtZShfX2luaXRpYWxfdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIF9fbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX25hbWUpIFwKKyAgX19nZXRfIyNfX25hbWUoKQorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworICAvKiogQGJyaWVmIFJlZW50cmFuY2UgZ3VhcmQuCisgICAqCisgICAqIE1lY2hhbmlzbSB0byBwcm90ZWN0IGFsbCBfX2dudV9wcm9maWxlIG9wZXJhdGlvbnMgYWdhaW5zdCByZWN1cnNpb24sCisgICAqIG11bHRpdGhyZWFkZWQgYW5kIGV4Y2VwdGlvbiByZWVudHJhbmNlLgorICAgKi8KKyAgc3RydWN0IF9fcmVlbnRyYW5jZV9ndWFyZAorICB7CisgICAgc3RhdGljIGJvb2wKKyAgICBfX2dldF9pbigpCisgICAgeworICAgICAgaWYgKF9faW5zaWRlKCkgPT0gdHJ1ZSkKKwlyZXR1cm4gZmFsc2U7CisgICAgICBlbHNlCisJeworCSAgX19pbnNpZGUoKSA9IHRydWU7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wmCisgICAgX19pbnNpZGUoKQorICAgIHsKKyAgICAgIHN0YXRpYyBfX3RocmVhZCBib29sIF9TX2luc2lkZShmYWxzZSk7CisgICAgICByZXR1cm4gX1NfaW5zaWRlOworICAgIH0KKworICAgIF9fcmVlbnRyYW5jZV9ndWFyZCgpIHsgfQorICAgIH5fX3JlZW50cmFuY2VfZ3VhcmQoKSB7IF9faW5zaWRlKCkgPSBmYWxzZTsgfQorICB9OworCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRChfX3guLi4pCSAgICAgIAlcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChfX2dudV9wcm9maWxlOjpfX3JlZW50cmFuY2VfZ3VhcmQ6Ol9fZ2V0X2luKCkpICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3JlZW50cmFuY2VfZ3VhcmQgX19nZXRfb3V0OyAJCVwKKyAgICAgIF9feDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zLgorICAvLyBEb24ndCB1c2UgYW55IF9fZ251X3Byb2ZpbGU6OiBpbiB1c2VyIGNvZGUuCisgIC8vIEluc3RlYWQsIHVzZSB0aGUgX19wcm9mY3h4Li4uIG1hY3Jvcywgd2hpY2ggb2ZmZXIgZ3VhcmRlZCBhY2Nlc3MuCisgIGJvb2wgX190dXJuX29uKCk7CisgIGJvb2wgX190dXJuX29mZigpOworICBib29sIF9faXNfaW52YWxpZCgpOworICBib29sIF9faXNfb24oKTsKKyAgYm9vbCBfX2lzX29mZigpOworICB2b2lkIF9fcmVwb3J0KHZvaWQpOworICB2b2lkIF9fdHJhY2VfaGFzaHRhYmxlX3NpemVfcmVzaXplKGNvbnN0IHZvaWQqLCBzdGQ6OnNpemVfdCwgc3RkOjpzaXplX3QpOworICB2b2lkIF9fdHJhY2VfaGFzaHRhYmxlX3NpemVfZGVzdHJ1Y3QoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90LCBzdGQ6OnNpemVfdCk7CisgIHZvaWQgX190cmFjZV9oYXNodGFibGVfc2l6ZV9jb25zdHJ1Y3QoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX3ZlY3Rvcl9zaXplX3Jlc2l6ZShjb25zdCB2b2lkKiwgc3RkOjpzaXplX3QsIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX3ZlY3Rvcl9zaXplX2Rlc3RydWN0KGNvbnN0IHZvaWQqLCBzdGQ6OnNpemVfdCwgc3RkOjpzaXplX3QpOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3NpemVfY29uc3RydWN0KGNvbnN0IHZvaWQqLCBzdGQ6OnNpemVfdCk7CisgIHZvaWQgX190cmFjZV9oYXNoX2Z1bmNfZGVzdHJ1Y3QoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90LCBzdGQ6OnNpemVfdCwKKwkJCQkgIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX2hhc2hfZnVuY19jb25zdHJ1Y3QoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfZGVzdHJ1Y3QoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfY29uc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2luc2VydChjb25zdCB2b2lkKiwgc3RkOjpzaXplX3QsIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2l0ZXJhdGUoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfcmVzaXplKGNvbnN0IHZvaWQqLCBzdGQ6OnNpemVfdCwgc3RkOjpzaXplX3QpOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfZmluZChjb25zdCB2b2lkKiwgc3RkOjpzaXplX3QpOworCisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NsaXN0X2Rlc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2xpc3RfY29uc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2xpc3RfcmV3aW5kKGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2xpc3Rfb3BlcmF0aW9uKGNvbnN0IHZvaWQqKTsKKworICB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfZGVzdHJ1Y3QoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfY29uc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2luc2VydChjb25zdCB2b2lkKiwgc3RkOjpzaXplX3QsIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2l0ZXJhdGUoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfcmVzaXplKGNvbnN0IHZvaWQqLCBzdGQ6OnNpemVfdCwgc3RkOjpzaXplX3QpOworCisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NldF9kZXN0cnVjdChjb25zdCB2b2lkKik7CisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NldF9jb25zdHJ1Y3QoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfbGlzdF90b19zZXRfaW5zZXJ0KGNvbnN0IHZvaWQqLCBzdGQ6OnNpemVfdCwgc3RkOjpzaXplX3QpOyAKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2V0X2l0ZXJhdGUoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2V0X2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfbGlzdF90b19zZXRfZmluZChjb25zdCB2b2lkKiwgc3RkOjpzaXplX3QpOyAKKworICB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfY29uc3RydWN0KGNvbnN0IHZvaWQqKTsKKyAgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoY29uc3Qgdm9pZCopOworICB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW5zZXJ0KGNvbnN0IHZvaWQqLCBzdGQ6OnNpemVfdCwKKwkJCQkJICAgc3RkOjpzaXplX3QpOworICB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZXJhc2UoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90LAorCQkJCQkgIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2l0ZXJhdGUoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQoY29uc3Qgdm9pZCosIHN0ZDo6c2l6ZV90KTsKKyAgdm9pZCBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2Rlc3RydWN0KGNvbnN0IHZvaWQqKTsKK30gLy8gbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKworLy8gTWFzdGVyIHN3aXRjaCB0dXJucyBvbiBhbGwgZGlhZ25vc3RpY3MgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgdHVybmVkIG9mZi4KKyNpZmRlZiBfR0xJQkNYWF9QUk9GSUxFCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTk9fSEFTSFRBQkxFX1RPT19TTUFMTAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX0hBU0hUQUJMRV9UT09fU01BTEwKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX05PX0hBU0hUQUJMRV9UT09fTEFSR0UKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9IQVNIVEFCTEVfVE9PX0xBUkdFCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9OT19WRUNUT1JfVE9PX1NNQUxMCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfVkVDVE9SX1RPT19TTUFMTAorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTk9fVkVDVE9SX1RPT19MQVJHRQorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1ZFQ1RPUl9UT09fTEFSR0UKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX05PX0lORUZGSUNJRU5UX0hBU0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9JTkVGRklDSUVOVF9IQVNICisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9OT19WRUNUT1JfVE9fTElTVAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1ZFQ1RPUl9UT19MSVNUCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9OT19MSVNUX1RPX1NMSVNUCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTElTVF9UT19TTElTVAorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTk9fTElTVF9UT19WRUNUT1IKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9MSVNUX1RPX1ZFQ1RPUgorI2VuZGlmCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTk9fTUFQX1RPX1VOT1JERVJFRF9NQVAKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9NQVBfVE9fVU5PUkRFUkVEX01BUAorI2VuZGlmCisjZW5kaWYKKworLy8gRXhwb3NlIGdsb2JhbCBtYW5hZ2VtZW50IHJvdXRpbmVzIHRvIHVzZXIgY29kZS4KKyNpZmRlZiBfR0xJQkNYWF9QUk9GSUxFCisjZGVmaW5lIF9fcHJvZmN4eF9yZXBvcnQoKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRChfX2dudV9wcm9maWxlOjpfX3JlcG9ydCgpKQorI2RlZmluZSBfX3Byb2ZjeHhfdHVybl9vbigpIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKF9fZ251X3Byb2ZpbGU6Ol9fdHVybl9vbigpKQorI2RlZmluZSBfX3Byb2ZjeHhfdHVybl9vZmYoKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRChfX2dudV9wcm9maWxlOjpfX3R1cm5fb2ZmKCkpCisjZGVmaW5lIF9fcHJvZmN4eF9pc19pbnZhbGlkKCkgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoX19nbnVfcHJvZmlsZTo6X19pc19pbnZhbGlkKCkpCisjZGVmaW5lIF9fcHJvZmN4eF9pc19vbigpIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKF9fZ251X3Byb2ZpbGU6Ol9faXNfb24oKSkKKyNkZWZpbmUgX19wcm9mY3h4X2lzX29mZigpIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKF9fZ251X3Byb2ZpbGU6Ol9faXNfb2ZmKCkpCisjZWxzZQorI2RlZmluZSBfX3Byb2ZjeHhfcmVwb3J0KCkKKyNkZWZpbmUgX19wcm9mY3h4X3R1cm5fb24oKQorI2RlZmluZSBfX3Byb2ZjeHhfdHVybl9vZmYoKQorI2RlZmluZSBfX3Byb2ZjeHhfaXNfaW52YWxpZCgpCisjZGVmaW5lIF9fcHJvZmN4eF9pc19vbigpCisjZGVmaW5lIF9fcHJvZmN4eF9pc19vZmYoKQorI2VuZGlmCisKKy8vIFR1cm4gb24vb2ZmIGluc3RydW1lbnRhdGlvbiBmb3IgSEFTSFRBQkxFX1RPT19TTUFMTCBhbmQgSEFTSFRBQkxFX1RPT19MQVJHRS4KKyNpZiAoZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX0hBU0hUQUJMRV9UT09fU01BTEwpIFwKKyAgICAgfHwgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX0hBU0hUQUJMRV9UT09fTEFSR0UpKQorI2RlZmluZSBfX3Byb2ZjeHhfaGFzaHRhYmxlX3Jlc2l6ZShfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2hhc2h0YWJsZV9zaXplX3Jlc2l6ZShfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0KF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfaGFzaHRhYmxlX3NpemVfZGVzdHJ1Y3QoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9oYXNodGFibGVfc2l6ZV9jb25zdHJ1Y3QoX194KSkKKyNlbHNlCisjZGVmaW5lIF9fcHJvZmN4eF9oYXNodGFibGVfcmVzaXplKF9feC4uLikgIAorI2RlZmluZSBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0KF9feC4uLikgCisjZGVmaW5lIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0KF9feC4uLikgIAorI2VuZGlmCisKKy8vIFR1cm4gb24vb2ZmIGluc3RydW1lbnRhdGlvbiBmb3IgVkVDVE9SX1RPT19TTUFMTCBhbmQgVkVDVE9SX1RPT19MQVJHRS4KKyNpZiAoZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX1ZFQ1RPUl9UT09fU01BTEwpIFwKKyAgICAgfHwgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX1ZFQ1RPUl9UT09fTEFSR0UpKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX3Jlc2l6ZShfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX3ZlY3Rvcl9zaXplX3Jlc2l6ZShfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2Rlc3RydWN0KF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfdmVjdG9yX3NpemVfZGVzdHJ1Y3QoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV92ZWN0b3Jfc2l6ZV9jb25zdHJ1Y3QoX194KSkKKyNlbHNlCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfcmVzaXplKF9feC4uLikgIAorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2Rlc3RydWN0KF9feC4uLikgCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0KF9feC4uLikgIAorI2VuZGlmIAorCisvLyBUdXJuIG9uL29mZiBpbnN0cnVtZW50YXRpb24gZm9yIElORUZGSUNJRU5UX0hBU0guCisjaWYgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX0lORUZGSUNJRU5UX0hBU0gpCisjZGVmaW5lIF9fcHJvZmN4eF9pbmVmZmljaWVudF9oYXNoX2lzX29uKCkgXAorICBfX2dudV9wcm9maWxlOjpfX2lzX29uKCkKKyNkZWZpbmUgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QyKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfaGFzaF9mdW5jX2NvbnN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0MihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2hhc2hfZnVuY19kZXN0cnVjdChfX3gpKQorI2Vsc2UKKyNkZWZpbmUgX19wcm9mY3h4X2luZWZmaWNpZW50X2hhc2hfaXNfb24oKSBmYWxzZQorI2RlZmluZSBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0MihfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0MihfX3guLi4pCisjZW5kaWYKKworLy8gVHVybiBvbi9vZmYgaW5zdHJ1bWVudGF0aW9uIGZvciBWRUNUT1JfVE9fTElTVC4KKyNpZiBkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEVfVkVDVE9SX1RPX0xJU1QpCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0MihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2NvbnN0cnVjdChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2Rlc3RydWN0MihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2Rlc3RydWN0KF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfaW5zZXJ0KF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfaW5zZXJ0KF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfaXRlcmF0ZShfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2l0ZXJhdGUoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9pbnZhbGlkX29wZXJhdG9yKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfaW52YWxpZF9vcGVyYXRvcihfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX3Jlc2l6ZTIoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV92ZWN0b3JfdG9fbGlzdF9yZXNpemUoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9maW5kKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfZmluZChfX3gpKQorI2Vsc2UKKyNkZWZpbmUgX19wcm9mY3h4X3ZlY3Rvcl9kZXN0cnVjdDIoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdDIoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfdmVjdG9yX2luc2VydChfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfaXRlcmF0ZShfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfaW52YWxpZF9vcGVyYXRvcihfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfcmVzaXplMihfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF92ZWN0b3JfZmluZChfX3guLi4pCisjZW5kaWYKKworLy8gVHVybiBvbi9vZmYgaW5zdHJ1bWVudGF0aW9uIGZvciBMSVNUX1RPX1ZFQ1RPUi4gCisjaWYgZGVmaW5lZChfR0xJQkNYWF9QUk9GSUxFX0xJU1RfVE9fVkVDVE9SKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QyKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbGlzdF90b192ZWN0b3JfY29uc3RydWN0KF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2Rlc3RydWN0MihfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2Rlc3RydWN0KF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2luc2VydChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2luc2VydChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9pdGVyYXRlKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbGlzdF90b192ZWN0b3JfaXRlcmF0ZShfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9pbnZhbGlkX29wZXJhdG9yKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbGlzdF90b192ZWN0b3JfaW52YWxpZF9vcGVyYXRvcihfX3gpKQorI2Vsc2UKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfZGVzdHJ1Y3QyKF9feC4uLikKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0MihfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2luc2VydChfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2l0ZXJhdGUoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9pbnZhbGlkX29wZXJhdG9yKF9feC4uLikKKyNlbmRpZgorCisvLyBUdXJuIG9uL29mZiBpbnN0cnVtZW50YXRpb24gZm9yIExJU1RfVE9fU0xJU1QuICAKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEVfTElTVF9UT19TTElTVCkKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfcmV3aW5kKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbGlzdF90b19zbGlzdF9yZXdpbmQoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3Rfb3BlcmF0aW9uKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbGlzdF90b19zbGlzdF9vcGVyYXRpb24oX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X2xpc3RfZGVzdHJ1Y3QoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9saXN0X3RvX3NsaXN0X2Rlc3RydWN0KF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX2xpc3RfdG9fc2xpc3RfY29uc3RydWN0KF9feCkpCisjZWxzZQorI2RlZmluZSBfX3Byb2ZjeHhfbGlzdF9yZXdpbmQoX194Li4uKSAgCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X29wZXJhdGlvbihfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2Rlc3RydWN0KF9feC4uLikgCisjZGVmaW5lIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdChfX3guLi4pICAKKyNlbmRpZiAKKworLy8gVHVybiBvbi9vZmYgaW5zdHJ1bWVudGF0aW9uIGZvciBNQVBfVE9fVU5PUkRFUkVEX01BUC4KKyNpZiBkZWZpbmVkKF9HTElCQ1hYX1BST0ZJTEVfTUFQX1RPX1VOT1JERVJFRF9NQVApCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9jb25zdHJ1Y3QoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9jb25zdHJ1Y3QoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2Rlc3RydWN0KF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZGVzdHJ1Y3QoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydChfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydChfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZXJhc2UoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9lcmFzZShfX3gpKQorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaXRlcmF0ZShfX3guLi4pIFwKKyAgX0dMSUJDWFhfUFJPRklMRV9SRUVOVFJBTkNFX0dVQVJEKCBcCisgICAgICBfX2dudV9wcm9maWxlOjpfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2l0ZXJhdGUoX194KSkKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoX194Li4uKSBcCisgIF9HTElCQ1hYX1BST0ZJTEVfUkVFTlRSQU5DRV9HVUFSRCggXAorICAgICAgX19nbnVfcHJvZmlsZTo6X190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKF9feCkpCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9maW5kKF9feC4uLikgXAorICBfR0xJQkNYWF9QUk9GSUxFX1JFRU5UUkFOQ0VfR1VBUkQoIFwKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZmluZChfX3gpKQorI2Vsc2UKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2NvbnN0cnVjdChfX3guLi4pIFwKKyAgCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9kZXN0cnVjdChfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnNlcnQoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZXJhc2UoX194Li4uKQorI2RlZmluZSBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaXRlcmF0ZShfX3guLi4pCisjZGVmaW5lIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKF9feC4uLikKKyNkZWZpbmUgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQoX194Li4uKQorI2VuZGlmCisKKy8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgY29tcGlsZS10aW1lIGN1c3RvbWl6YWJsZSB2YXJpYWJsZXMuCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfVFJBQ0VfUEFUSF9ST09UCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfVFJBQ0VfUEFUSF9ST09UICJsaWJzdGRjeHgtcHJvZmlsZSIKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1RSQUNFX0VOVl9WQVIKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9UUkFDRV9FTlZfVkFSICJfR0xJQkNYWF9QUk9GSUxFX1RSQUNFX1BBVEhfUk9PVCIKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX01BWF9XQVJOX0NPVU5UX0VOVl9WQVIKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9NQVhfV0FSTl9DT1VOVF9FTlZfVkFSIFwKKyAgIl9HTElCQ1hYX1BST0ZJTEVfTUFYX1dBUk5fQ09VTlQiCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9NQVhfV0FSTl9DT1VOVAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX01BWF9XQVJOX0NPVU5UIDEwCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9NQVhfU1RBQ0tfREVQVEgKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9NQVhfU1RBQ0tfREVQVEggMzIKKyNlbmRpZgorI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX01BWF9TVEFDS19ERVBUSF9FTlZfVkFSCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTUFYX1NUQUNLX0RFUFRIX0VOVl9WQVIgXAorICAiX0dMSUJDWFhfUFJPRklMRV9NQVhfU1RBQ0tfREVQVEgiCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9NRU1fUEVSX0RJQUdOT1NUSUMKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9NRU1fUEVSX0RJQUdOT1NUSUMgKDEgPDwgMjgpCisjZW5kaWYKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9NRU1fUEVSX0RJQUdOT1NUSUNfRU5WX1ZBUgorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX01FTV9QRVJfRElBR05PU1RJQ19FTlZfVkFSIFwKKyAgIl9HTElCQ1hYX1BST0ZJTEVfTUVNX1BFUl9ESUFHTk9TVElDIgorI2VuZGlmCisKKy8vIEluc3RydW1lbnRhdGlvbiBob29rIGltcGxlbWVudGF0aW9ucy4KKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaF9mdW5jLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2hhc2h0YWJsZV9zaXplLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX21hcF90b191bm9yZGVyZWRfbWFwLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3ZlY3Rvcl9zaXplLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3ZlY3Rvcl90b19saXN0LmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2xpc3RfdG9fc2xpc3QuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b192ZWN0b3IuaCIKKworI2VuZGlmIC8vIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfYWxnb3MuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2FsZ29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkYjI1MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2FsZ29zLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2FsZ29zLmgKKyAqICBAYnJpZWYgQWxnb3JpdGhtcyB1c2VkIGJ5IHRoZSBwcm9maWxlIGV4dGVuc2lvbi4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIG5lZWRlZCB0byBhdm9pZCBpbmNsdWRpbmcgXDxhbGdvcml0aG1cPiBvciBcPGJpdHMvc3RsX2FsZ28uaFw+LgorICogIEluY2x1ZGluZyB0aG9zZSBmaWxlcyB3b3VsZCByZXN1bHQgaW4gcmVjdXJzaXZlIGluY2x1ZGVzLgorICogIFRoZXNlIGltcGxlbWVudGF0aW9ucyBhcmUgb3ZlcnNpbXBsaWZpZWQuICBJbiBnZW5lcmFsLCBlZmZpY2llbmN5IG1heSBiZQorICogIHNhY3JpZmljZWQgdG8gbWluaW1pemUgbWFpbnRlbmFuY2Ugb3ZlcmhlYWQuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0FMR09TX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9BTEdPU19IIDEKKworbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKK3sKKyAgLyogSGVscGVyIGZvciBfX3RvcF9uLiAgSW5zZXJ0IGluIHNvcnRlZCB2ZWN0b3IsIGJ1dCBub3QgYmV5b25kIE50aCBlbGVtLiAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICB2b2lkCisgICAgX19pbnNlcnRfdG9wX24oX0NvbnRhaW5lciYgX19vdXRwdXQsCisJCSAgIGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUsCisJCSAgIHR5cGVuYW1lIF9Db250YWluZXI6OnNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdCA9IF9fb3V0cHV0LmJlZ2luKCk7CisgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjpzaXplX3R5cGUgX19jb3VudCA9IDA7CisKKyAgICAgIC8vIFNraXAgdXAgdG8gTiAtIDEgZWxlbWVudHMgbGFyZ2VyIHRoYW4gVkFMVUUuCisgICAgICAvLyBYWFg6IENvdWxkIGRvIGJpbmFyeSBzZWFyY2ggZm9yIHJhbmRvbSBpdGVyYXRvcnMuCisgICAgICB3aGlsZSAodHJ1ZSkKKwl7CisJICBpZiAoX19jb3VudCA+PSBfX24pCisJICAgIC8vIFZBTFVFIGlzIG5vdCBpbiB0b3AgTi4KKwkgICAgcmV0dXJuOworCisJICBpZiAoX19pdCA9PSBfX291dHB1dC5lbmQoKSkKKwkgICAgYnJlYWs7CisKKwkgIGlmICgqX19pdCA8IF9fdmFsdWUpCisJICAgIGJyZWFrOworCisJICArK19faXQ7CisJICArK19fY291bnQ7CisJfQorCisgICAgICBfX291dHB1dC5pbnNlcnQoX19pdCwgX192YWx1ZSk7CisgICAgfQorCisgIC8qIENvcHkgdGhlIHRvcCBOIGVsZW1lbnRzIGluIElOUFVULCBzb3J0ZWQgaW4gcmV2ZXJzZSBvcmRlciwgdG8gT1VUUFVULiAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KKyAgICB2b2lkCisgICAgX190b3Bfbihjb25zdCBfQ29udGFpbmVyJiBfX2lucHV0LCBfQ29udGFpbmVyJiBfX291dHB1dCwKKwkgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6c2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBfX291dHB1dC5jbGVhcigpOworICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3IgX19pdDsKKyAgICAgIGZvciAoX19pdCA9IF9faW5wdXQuYmVnaW4oKTsgX19pdCAhPSBfX2lucHV0LmVuZCgpOyArK19faXQpCisJX19pbnNlcnRfdG9wX24oX19vdXRwdXQsICpfX2l0LCBfX24pOworICAgIH0KKworICAvKiBTaW1wbGlmaWVkIGNsb25lIG9mIHN0ZDo6Zm9yX2VhY2guICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Z1bmN0aW9uPgorICAgIF9GdW5jdGlvbiAKKyAgICBfX2Zvcl9lYWNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKKyAgICB7CisgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlfX2YoKl9fZmlyc3QpOworICAgICAgcmV0dXJuIF9fZjsKKyAgICB9CisKKyAgLyogU2ltcGxpZmllZCBjbG9uZSBvZiBzdGQ6OnJlbW92ZS4gICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KKyAgICBfRm9yd2FyZEl0ZXJhdG9yCisgICAgX19yZW1vdmUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICB7CisgICAgICBpZihfX2ZpcnN0ID09IF9fbGFzdCkKKwlyZXR1cm4gX19maXJzdDsKKyAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQgPSBfX2ZpcnN0OworICAgICAgKytfX2ZpcnN0OworICAgICAgZm9yKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwlpZighKCpfX2ZpcnN0ID09IF9fdmFsdWUpKQorCSAgeworCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKKwkgICAgKytfX3Jlc3VsdDsKKwkgIH0KKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9Cit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0FMR09TX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2NvbnRhaW5lcl9zaXplLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9jb250YWluZXJfc2l6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViY2RiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9jb250YWluZXJfc2l6ZS5oCkBAIC0wLDAgKzEsMjE1IEBACisvLyAtKi0gQysrIC0qLQorLy8KKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvaW1wbC9wcm9maWxlcl9jb250YWluZXJfc2l6ZS5oCisgKiAgQGJyaWVmIERpYWdub3N0aWNzIGZvciBjb250YWluZXIgc2l6ZXMuCisgKi8KKworLy8gV3JpdHRlbiBieSBMaXhpYSBMaXUgYW5kIFNpbHZpdXMgUnVzLgorCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfQ09OVEFJTkVSX1NJWkVfSAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0NPTlRBSU5FUl9TSVpFX0ggMQorCisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlci5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisgIC8qKiBAYnJpZWYgQSBjb250YWluZXIgc2l6ZSBpbnN0cnVtZW50YXRpb24gbGluZSBpbiB0aGUgb2JqZWN0IHRhYmxlLiAgKi8KKyAgY2xhc3MgX19jb250YWluZXJfc2l6ZV9pbmZvCisgIDogcHVibGljIF9fb2JqZWN0X2luZm9fYmFzZSAKKyAgeworICBwdWJsaWM6CisgICAgX19jb250YWluZXJfc2l6ZV9pbmZvKCkKKyAgICA6IF9NX2luaXQoMCksIF9NX21heCgwKSwgX01fbWluKDApLCBfTV90b3RhbCgwKSwgX01faXRlbV9taW4oMCksCisgICAgICBfTV9pdGVtX21heCgwKSwgX01faXRlbV90b3RhbCgwKSwgX01fY291bnQoMCksIF9NX3Jlc2l6ZSgwKSwgX01fY29zdCgwKSAKKyAgICB7IH0KKworICAgIF9fY29udGFpbmVyX3NpemVfaW5mbyhjb25zdCBfX2NvbnRhaW5lcl9zaXplX2luZm8mIF9fbykKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX28pLCBfTV9pbml0KF9fby5fTV9pbml0KSwgX01fbWF4KF9fby5fTV9tYXgpLAorICAgICAgX01fbWluKF9fby5fTV9taW4pLCBfTV90b3RhbChfX28uX01fdG90YWwpLAorICAgICAgX01faXRlbV9taW4oX19vLl9NX2l0ZW1fbWluKSwgX01faXRlbV9tYXgoX19vLl9NX2l0ZW1fbWF4KSwKKyAgICAgIF9NX2l0ZW1fdG90YWwoX19vLl9NX2l0ZW1fdG90YWwpLCBfTV9jb3VudChfX28uX01fY291bnQpLAorICAgICAgX01fcmVzaXplKF9fby5fTV9yZXNpemUpLCBfTV9jb3N0KF9fby5fTV9jb3N0KQorICAgIHsgfQorCisgICAgX19jb250YWluZXJfc2l6ZV9pbmZvKF9fc3RhY2tfdCBfX3N0YWNrLCBzdGQ6OnNpemVfdCBfX251bSkKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX3N0YWNrKSwgX01faW5pdChfX251bSksIF9NX21heChfX251bSksCisgICAgICBfTV9taW4oMCksIF9NX3RvdGFsKDApLCBfTV9pdGVtX21pbigwKSwgX01faXRlbV9tYXgoMCksCisgICAgICBfTV9pdGVtX3RvdGFsKDApLCBfTV9jb3VudCgwKSwgX01fcmVzaXplKDApLCBfTV9jb3N0KDApCisgICAgeyB9CisKKyAgICB2aXJ0dWFsIH5fX2NvbnRhaW5lcl9zaXplX2luZm8oKSB7IH0KKworICAgIHZvaWQKKyAgICBfX3dyaXRlKEZJTEUqIF9fZikgY29uc3QKKyAgICB7CisgICAgICBzdGQ6OmZwcmludGYoX19mLCAiJVp1ICVadSAlWnUgJVp1ICVadSAlWnUgJVp1ICVadSAlWnUgJVp1XG4iLCAKKwkJICAgX01faW5pdCwgX01fY291bnQsIF9NX2Nvc3QsIF9NX3Jlc2l6ZSwgX01fbWluLCBfTV9tYXgsCisJCSAgIF9NX3RvdGFsLCBfTV9pdGVtX21pbiwgX01faXRlbV9tYXgsIF9NX2l0ZW1fdG90YWwpOworICAgIH0KKworICAgIGZsb2F0CisgICAgX19tYWduaXR1ZGUoKSBjb25zdAorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihfTV9jb3N0KTsgfQorCisgICAgc3RkOjpzdHJpbmcKKyAgICBfX2FkdmljZSgpIGNvbnN0CisgICAgeworICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gX19tZXNzYWdlOworICAgICAgaWYgKF9NX2luaXQgPCBfTV9pdGVtX21heCkKKwlfX21lc3NhZ2UgPDwgImNoYW5nZSBpbml0aWFsIGNvbnRhaW5lciBzaXplIGZyb20gIiA8PCBfTV9pbml0CisJCSAgPDwgIiB0byAiIDw8IF9NX2l0ZW1fbWF4OworICAgICAgcmV0dXJuIF9fbWVzc2FnZS5zdHIoKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX19tZXJnZShjb25zdCBfX2NvbnRhaW5lcl9zaXplX2luZm8mIF9fbykKKyAgICB7CisgICAgICBfTV9pbml0ICAgICAgICA9IHN0ZDo6bWF4KF9NX2luaXQsIF9fby5fTV9pbml0KTsKKyAgICAgIF9NX21heCAgICAgICAgID0gc3RkOjptYXgoX01fbWF4LCBfX28uX01fbWF4KTsKKyAgICAgIF9NX2l0ZW1fbWF4ICAgID0gc3RkOjptYXgoX01faXRlbV9tYXgsIF9fby5fTV9pdGVtX21heCk7CisgICAgICBfTV9taW4gICAgICAgICA9IHN0ZDo6bWluKF9NX21pbiwgX19vLl9NX21pbik7CisgICAgICBfTV9pdGVtX21pbiAgICA9IHN0ZDo6bWluKF9NX2l0ZW1fbWluLCBfX28uX01faXRlbV9taW4pOworICAgICAgX01fdG90YWwgICAgICArPSBfX28uX01fdG90YWw7CisgICAgICBfTV9pdGVtX3RvdGFsICs9IF9fby5fTV9pdGVtX3RvdGFsOworICAgICAgX01fY291bnQgICAgICArPSBfX28uX01fY291bnQ7CisgICAgICBfTV9jb3N0ICAgICAgICs9IF9fby5fTV9jb3N0OworICAgICAgX01fcmVzaXplICAgICArPSBfX28uX01fcmVzaXplOworICAgIH0KKworICAgIC8vIENhbGwgaWYgYSBjb250YWluZXIgaXMgZGVzdHJ1Y3RlZCBvciBjbGVhbmVkLgorICAgIHZvaWQKKyAgICBfX2Rlc3RydWN0KHN0ZDo6c2l6ZV90IF9fbnVtLCBzdGQ6OnNpemVfdCBfX2ludW0pCisgICAgeworICAgICAgX01fbWF4ID0gc3RkOjptYXgoX01fbWF4LCBfX251bSk7CisgICAgICBfTV9pdGVtX21heCA9IHN0ZDo6bWF4KF9NX2l0ZW1fbWF4LCBfX2ludW0pOworICAgICAgaWYgKF9NX21pbiA9PSAwKQorCXsKKwkgIF9NX21pbiA9IF9fbnVtOyAKKwkgIF9NX2l0ZW1fbWluID0gX19pbnVtOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBfTV9taW4gPSBzdGQ6Om1pbihfTV9taW4sIF9fbnVtKTsKKwkgIF9NX2l0ZW1fbWluID0gc3RkOjptaW4oX01faXRlbV9taW4sIF9faW51bSk7CisJfQorICAgICAgX01fdG90YWwgKz0gX19udW07CisgICAgICBfTV9pdGVtX3RvdGFsICs9IF9faW51bTsKKyAgICAgIF9NX2NvdW50ICs9IDE7CisgICAgfQorCisgICAgLy8gRXN0aW1hdGUgdGhlIGNvc3Qgb2YgcmVzaXplL3JlaGFzaC4gCisgICAgZmxvYXQKKyAgICBfX3Jlc2l6ZV9jb3N0KHN0ZDo6c2l6ZV90IF9fZnJvbSwgc3RkOjpzaXplX3QpCisgICAgeyByZXR1cm4gX19mcm9tOyB9CisKKyAgICAvLyBDYWxsIGlmIGNvbnRhaW5lciBpcyByZXNpemVkLgorICAgIHZvaWQKKyAgICBfX3Jlc2l6ZShzdGQ6OnNpemVfdCBfX2Zyb20sIHN0ZDo6c2l6ZV90IF9fdG8pCisgICAgeworICAgICAgX01fY29zdCArPSB0aGlzLT5fX3Jlc2l6ZV9jb3N0KF9fZnJvbSwgX190byk7CisgICAgICBfTV9yZXNpemUgKz0gMTsKKyAgICAgIF9NX21heCA9IHN0ZDo6bWF4KF9NX21heCwgX190byk7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjpzaXplX3QgX01faW5pdDsKKyAgICBzdGQ6OnNpemVfdCBfTV9tYXg7ICAvLyByYW5nZSBvZiAjIGJ1Y2tldHMKKyAgICBzdGQ6OnNpemVfdCBfTV9taW47CisgICAgc3RkOjpzaXplX3QgX01fdG90YWw7CisgICAgc3RkOjpzaXplX3QgX01faXRlbV9taW47ICAvLyByYW5nZSBvZiAjIGl0ZW1zCisgICAgc3RkOjpzaXplX3QgX01faXRlbV9tYXg7CisgICAgc3RkOjpzaXplX3QgX01faXRlbV90b3RhbDsKKyAgICBzdGQ6OnNpemVfdCBfTV9jb3VudDsKKyAgICBzdGQ6OnNpemVfdCBfTV9yZXNpemU7CisgICAgc3RkOjpzaXplX3QgX01fY29zdDsKKyAgfTsKKworCisgIC8qKiBAYnJpZWYgQSBjb250YWluZXIgc2l6ZSBpbnN0cnVtZW50YXRpb24gbGluZSBpbiB0aGUgc3RhY2sgdGFibGUuICAqLworICBjbGFzcyBfX2NvbnRhaW5lcl9zaXplX3N0YWNrX2luZm8KKyAgOiBwdWJsaWMgX19jb250YWluZXJfc2l6ZV9pbmZvCisgIHsKKyAgcHVibGljOgorICAgIF9fY29udGFpbmVyX3NpemVfc3RhY2tfaW5mbyhjb25zdCBfX2NvbnRhaW5lcl9zaXplX2luZm8mIF9fbykKKyAgICA6IF9fY29udGFpbmVyX3NpemVfaW5mbyhfX28pIHsgfQorICB9OworCisgIAorICAvKiogQGJyaWVmIENvbnRhaW5lciBzaXplIGluc3RydW1lbnRhdGlvbiB0cmFjZSBwcm9kdWNlci4gICovCisgIGNsYXNzIF9fdHJhY2VfY29udGFpbmVyX3NpemUKKyAgOiBwdWJsaWMgX190cmFjZV9iYXNlPF9fY29udGFpbmVyX3NpemVfaW5mbywgX19jb250YWluZXJfc2l6ZV9zdGFja19pbmZvPiAKKyAgeworICBwdWJsaWM6CisgICAgfl9fdHJhY2VfY29udGFpbmVyX3NpemUoKSB7IH0KKworICAgIF9fdHJhY2VfY29udGFpbmVyX3NpemUoKQorICAgIDogX190cmFjZV9iYXNlPF9fY29udGFpbmVyX3NpemVfaW5mbywgX19jb250YWluZXJfc2l6ZV9zdGFja19pbmZvPigpIHsgfTsKKworICAgIC8vIEluc2VydCBhIG5ldyBub2RlIGF0IGNvbnN0cnVjdCB3aXRoIG9iamVjdCwgY2FsbHN0YWNrIGFuZCBpbml0aWFsIHNpemUuIAorICAgIHZvaWQKKyAgICBfX2luc2VydChjb25zdCBfX29iamVjdF90IF9fb2JqLCBfX3N0YWNrX3QgX19zdGFjaywgc3RkOjpzaXplX3QgX19udW0pCisgICAgeyBfX2FkZF9vYmplY3QoX19vYmosIF9fY29udGFpbmVyX3NpemVfaW5mbyhfX3N0YWNrLCBfX251bSkpOyB9CisKKyAgICAvLyBYWFggVW5kZWZpbmVkPworICAgIHZvaWQKKyAgICBfX2NvbnN0cnVjdChjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19pbnVtKTsKKyAgCisgICAgLy8gQ2FsbCBhdCBkZXN0cnVjdGlvbi9jbGVhbiB0byBzZXQgY29udGFpbmVyIGZpbmFsIHNpemUuCisgICAgdm9pZAorICAgIF9fZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fbnVtLCBzdGQ6OnNpemVfdCBfX2ludW0pCisgICAgeworICAgICAgaWYgKCFfX2lzX29uKCkpCisJcmV0dXJuOworCisgICAgICBfX29iamVjdF90IF9fb2JqX2hhbmRsZSA9IHN0YXRpY19jYXN0PF9fb2JqZWN0X3Q+KF9fb2JqKTsKKworICAgICAgX19jb250YWluZXJfc2l6ZV9pbmZvKiBfX29iamVjdF9pbmZvID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmpfaGFuZGxlKTsKKyAgICAgIGlmICghX19vYmplY3RfaW5mbykKKwlyZXR1cm47CisKKyAgICAgIF9fb2JqZWN0X2luZm8tPl9fZGVzdHJ1Y3QoX19udW0sIF9faW51bSk7CisgICAgICBfX3JldGlyZV9vYmplY3QoX19vYmpfaGFuZGxlKTsKKyAgICB9CisKKyAgICAvLyBDYWxsIGF0IHJlc2l6ZSB0byBzZXQgcmVzaXplL2Nvc3QgaW5mb3JtYXRpb24uCisgICAgdm9pZAorICAgIF9fcmVzaXplKGNvbnN0IHZvaWQqIF9fb2JqLCBpbnQgX19mcm9tLCBpbnQgX190bykKKyAgICB7CisgICAgICBpZiAoIV9faXNfb24oKSkKKwlyZXR1cm47CisKKyAgICAgIF9fY29udGFpbmVyX3NpemVfaW5mbyogX19vYmplY3RfaW5mbyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgICAgIGlmICghX19vYmplY3RfaW5mbykKKwlyZXR1cm47CisKKyAgICAgIF9fb2JqZWN0X2luZm8tPl9fcmVzaXplKF9fZnJvbSwgX190byk7CisgICAgfQorICB9OworCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisjZW5kaWYgLyogX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9DT05UQUlORVJfU0laRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9oYXNoX2Z1bmMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2hhc2hfZnVuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NzQ0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9oYXNoX2Z1bmMuaApAQCAtMCwwICsxLDE3NCBAQAorLy8gLSotIEMrKyAtKi0KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaF9mdW5jLmgKKyAqICBAYnJpZWYgRGF0YSBzdHJ1Y3R1cmVzIHRvIHJlcHJlc2VudCBwcm9maWxpbmcgdHJhY2VzLgorICovCisKKy8vIFdyaXR0ZW4gYnkgTGl4aWEgTGl1IGFuZCBTaWx2aXVzIFJ1cy4KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0hBU0hfRlVOQ19ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfSEFTSF9GVU5DX0ggMQorCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX25vZGUuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfdHJhY2UuaCIKKworbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKK3sKKyAgLyoqIEBicmllZiBBIGhhc2ggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uIGxpbmUgaW4gdGhlIG9iamVjdCB0YWJsZS4gICovCisgIGNsYXNzIF9faGFzaGZ1bmNfaW5mbworICA6IHB1YmxpYyBfX29iamVjdF9pbmZvX2Jhc2UKKyAgeworICBwdWJsaWM6CisgICAgX19oYXNoZnVuY19pbmZvKCkKKyAgICA6IF9NX2xvbmdlc3RfY2hhaW4oMCksIF9NX2FjY2Vzc2VzKDApLCBfTV9ob3BzKDApIHsgfQorCisgICAgX19oYXNoZnVuY19pbmZvKGNvbnN0IF9faGFzaGZ1bmNfaW5mbyYgX19vKQorICAgIDogX19vYmplY3RfaW5mb19iYXNlKF9fbyksIF9NX2xvbmdlc3RfY2hhaW4oX19vLl9NX2xvbmdlc3RfY2hhaW4pLAorICAgICAgX01fYWNjZXNzZXMoX19vLl9NX2FjY2Vzc2VzKSwgX01faG9wcyhfX28uX01faG9wcykgeyB9CisKKyAgICBfX2hhc2hmdW5jX2luZm8oX19zdGFja190IF9fc3RhY2spCisgICAgOiBfX29iamVjdF9pbmZvX2Jhc2UoX19zdGFjayksIF9NX2xvbmdlc3RfY2hhaW4oMCksCisgICAgICBfTV9hY2Nlc3NlcygwKSwgX01faG9wcygwKSB7IH0KKworICAgIHZpcnR1YWwgfl9faGFzaGZ1bmNfaW5mbygpIHsgfQorCisgICAgdm9pZAorICAgIF9fbWVyZ2UoY29uc3QgX19oYXNoZnVuY19pbmZvJiBfX28pCisgICAgeworICAgICAgX01fbG9uZ2VzdF9jaGFpbiAgPSBzdGQ6Om1heChfTV9sb25nZXN0X2NoYWluLCBfX28uX01fbG9uZ2VzdF9jaGFpbik7CisgICAgICBfTV9hY2Nlc3NlcyAgICAgICs9IF9fby5fTV9hY2Nlc3NlczsKKyAgICAgIF9NX2hvcHMgICAgICAgICAgKz0gX19vLl9NX2hvcHM7CisgICAgfQorCisgICAgdm9pZAorICAgIF9fZGVzdHJ1Y3Qoc3RkOjpzaXplX3QgX19jaGFpbiwgc3RkOjpzaXplX3QgX19hY2Nlc3NlcywKKwkgICAgICAgc3RkOjpzaXplX3QgX19ob3BzKQorICAgIHsgCisgICAgICBfTV9sb25nZXN0X2NoYWluICA9IHN0ZDo6bWF4KF9NX2xvbmdlc3RfY2hhaW4sIF9fY2hhaW4pOworICAgICAgX01fYWNjZXNzZXMgICAgICArPSBfX2FjY2Vzc2VzOworICAgICAgX01faG9wcyAgICAgICAgICArPSBfX2hvcHM7CisgICAgfQorCisgICAgdm9pZAorICAgIF9fd3JpdGUoRklMRSogX19mKSBjb25zdAorICAgIHsgc3RkOjpmcHJpbnRmKF9fZiwgIiVadSAlWnUgJVp1XG4iLCBfTV9ob3BzLAorCQkgICBfTV9hY2Nlc3NlcywgX01fbG9uZ2VzdF9jaGFpbik7IH0KKworICAgIGZsb2F0CisgICAgX19tYWduaXR1ZGUoKSBjb25zdAorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihfTV9ob3BzKTsgfQorCisgICAgc3RkOjpzdHJpbmcKKyAgICBfX2FkdmljZSgpIGNvbnN0CisgICAgeyByZXR1cm4gImNoYW5nZSBoYXNoIGZ1bmN0aW9uIjsgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjpzaXplX3QgX01fbG9uZ2VzdF9jaGFpbjsKKyAgICBzdGQ6OnNpemVfdCBfTV9hY2Nlc3NlczsKKyAgICBzdGQ6OnNpemVfdCBfTV9ob3BzOworICB9OworCisKKyAgLyoqIEBicmllZiBBIGhhc2ggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uIGxpbmUgaW4gdGhlIHN0YWNrIHRhYmxlLiAgKi8KKyAgY2xhc3MgX19oYXNoZnVuY19zdGFja19pbmZvIAorICA6IHB1YmxpYyBfX2hhc2hmdW5jX2luZm8KKyAgeworICBwdWJsaWM6CisgICAgX19oYXNoZnVuY19zdGFja19pbmZvKGNvbnN0IF9faGFzaGZ1bmNfaW5mbyYgX19vKQorICAgIDogX19oYXNoZnVuY19pbmZvKF9fbykgeyB9CisgIH07CisKKworICAvKiogQGJyaWVmIEhhc2ggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uIHByb2R1Y2VyLiAgKi8KKyAgY2xhc3MgX190cmFjZV9oYXNoX2Z1bmMKKyAgOiBwdWJsaWMgX190cmFjZV9iYXNlPF9faGFzaGZ1bmNfaW5mbywgX19oYXNoZnVuY19zdGFja19pbmZvPiAKKyAgeworICBwdWJsaWM6CisgICAgX190cmFjZV9oYXNoX2Z1bmMoKQorICAgIDogX190cmFjZV9iYXNlPF9faGFzaGZ1bmNfaW5mbywgX19oYXNoZnVuY19zdGFja19pbmZvPigpCisgICAgeyBfX2lkID0gImhhc2gtZGlzdHIiOyB9CisKKyAgICB+X190cmFjZV9oYXNoX2Z1bmMoKSB7fQorICAgIAorICAgIC8vIEluc2VydCBhIG5ldyBub2RlIGF0IGNvbnN0cnVjdCB3aXRoIG9iamVjdCwgY2FsbHN0YWNrIGFuZCBpbml0aWFsIHNpemUuCisgICAgdm9pZAorICAgIF9faW5zZXJ0KF9fb2JqZWN0X3QgX19vYmosIF9fc3RhY2tfdCBfX3N0YWNrKQorICAgIHsgX19hZGRfb2JqZWN0KF9fb2JqLCBfX2hhc2hmdW5jX2luZm8oX19zdGFjaykpOyB9CisKKyAgICAvLyBDYWxsIGF0IGRlc3RydWN0aW9uL2NsZWFuIHRvIHNldCBjb250YWluZXIgZmluYWwgc2l6ZS4KKyAgICB2b2lkCisgICAgX19kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19jaGFpbiwKKwkgICAgICAgc3RkOjpzaXplX3QgX19hY2Nlc3Nlcywgc3RkOjpzaXplX3QgX19ob3BzKQorICAgIHsKKyAgICAgIGlmICghX19pc19vbigpKQorCXJldHVybjsKKworICAgICAgLy8gRmlyc3QgZmluZCB0aGUgaXRlbSBmcm9tIHRoZSBsaXZlIG9iamVjdHMgYW5kIHVwZGF0ZSB0aGUgaW5mb3JtYXRpb25zLgorICAgICAgX19oYXNoZnVuY19pbmZvKiBfX29ianMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgICAgICBpZiAoIV9fb2JqcykKKwlyZXR1cm47CisKKyAgICAgIF9fb2Jqcy0+X19kZXN0cnVjdChfX2NoYWluLCBfX2FjY2Vzc2VzLCBfX2hvcHMpOworICAgICAgX19yZXRpcmVfb2JqZWN0KF9fb2JqKTsKKyAgICB9CisgIH07CisKKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2hhc2hfZnVuY19pbml0KCkKKyAgeyBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfaGFzaF9mdW5jKSA9IG5ldyBfX3RyYWNlX2hhc2hfZnVuYygpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9oYXNoX2Z1bmNfcmVwb3J0KEZJTEUqIF9fZiwgX193YXJuaW5nX3ZlY3Rvcl90JiBfX3dhcm5pbmdzKQorICB7CisgICAgaWYgKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNoX2Z1bmMpKQorICAgICAgeworCV9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNoX2Z1bmMpLT5fX2NvbGxlY3Rfd2FybmluZ3MoX193YXJuaW5ncyk7CisJX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2hhc2hfZnVuYyktPl9fd3JpdGUoX19mKTsKKyAgICAgIH0KKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfaGFzaF9mdW5jX2NvbnN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNoX2Z1bmMpLT5fX2luc2VydChfX29iaiwgX19nZXRfc3RhY2soKSk7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2hhc2hfZnVuY19kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19jaGFpbiwKKwkJCSAgICAgc3RkOjpzaXplX3QgX19hY2Nlc3Nlcywgc3RkOjpzaXplX3QgX19ob3BzKQorICB7CisgICAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKQorICAgICAgcmV0dXJuOworCisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2hhc2hfZnVuYyktPl9fZGVzdHJ1Y3QoX19vYmosIF9fY2hhaW4sCisJCQkJCQkgICAgX19hY2Nlc3NlcywgX19ob3BzKTsKKyAgfQorCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisjZW5kaWYgLyogX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9IQVNIX0ZVTkNfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaHRhYmxlX3NpemUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2hhc2h0YWJsZV9zaXplLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlYmE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2hhc2h0YWJsZV9zaXplLmgKQEAgLTAsMCArMSw5OCBAQAorLy8gLSotIEMrKyAtKi0KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL2ltcGwvcHJvZmlsZXJfaGFzaHRhYmxlX3NpemUuaAorICogIEBicmllZiBDb2xsZWN0aW9uIG9mIGhhc2h0YWJsZSBzaXplIHRyYWNlcy4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9IQVNIVEFCTEVfU0laRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfSEFTSFRBQkxFX1NJWkVfSCAxCisKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXIuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfbm9kZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9jb250YWluZXJfc2l6ZS5oIgorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworICAvKiogQGJyaWVmIEhhc2h0YWJsZSBzaXplIGluc3RydW1lbnRhdGlvbiB0cmFjZSBwcm9kdWNlci4gICovCisgIGNsYXNzIF9fdHJhY2VfaGFzaHRhYmxlX3NpemUKKyAgOiBwdWJsaWMgX190cmFjZV9jb250YWluZXJfc2l6ZQorICB7CisgIHB1YmxpYzoKKyAgICBfX3RyYWNlX2hhc2h0YWJsZV9zaXplKCkKKyAgICA6IF9fdHJhY2VfY29udGFpbmVyX3NpemUoKQorICAgIHsgX19pZCA9ICJoYXNodGFibGUtc2l6ZSI7IH0KKyAgfTsKKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2hhc2h0YWJsZV9zaXplX2luaXQoKQorICB7IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNodGFibGVfc2l6ZSkgPSBuZXcgX190cmFjZV9oYXNodGFibGVfc2l6ZSgpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9oYXNodGFibGVfc2l6ZV9yZXBvcnQoRklMRSogX19mLCBfX3dhcm5pbmdfdmVjdG9yX3QmIF9fd2FybmluZ3MpCisgIHsKKyAgICBpZiAoX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2hhc2h0YWJsZV9zaXplKSkKKyAgICAgIHsKKwlfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfaGFzaHRhYmxlX3NpemUpLT4KKwkgIF9fY29sbGVjdF93YXJuaW5ncyhfX3dhcm5pbmdzKTsKKwlfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfaGFzaHRhYmxlX3NpemUpLT5fX3dyaXRlKF9fZik7CisgICAgICB9CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2hhc2h0YWJsZV9zaXplX2NvbnN0cnVjdChjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19udW0pCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisgIAorICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNodGFibGVfc2l6ZSktPl9faW5zZXJ0KF9fb2JqLCBfX2dldF9zdGFjaygpLAorCQkJCQkJICAgICAgIF9fbnVtKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfaGFzaHRhYmxlX3NpemVfZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fbnVtLCAKKwkJCQkgIHN0ZDo6c2l6ZV90IF9faW51bSkKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNodGFibGVfc2l6ZSktPl9fZGVzdHJ1Y3QoX19vYmosIF9fbnVtLCBfX2ludW0pOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9oYXNodGFibGVfc2l6ZV9yZXNpemUoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fZnJvbSwgCisJCQkJc3RkOjpzaXplX3QgX190bykKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19oYXNodGFibGVfc2l6ZSktPl9fcmVzaXplKF9fb2JqLCBfX2Zyb20sIF9fdG8pOworICB9CisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfSEFTSFRBQkxFX1NJWkVfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b19zbGlzdC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b19zbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2VjZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9saXN0X3RvX3NsaXN0LmgKQEAgLTAsMCArMSwyMDggQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX2xpc3RfdG9fc2xpc3QuaAorICogIEBicmllZiBEaWFnbm9zdGljcyBmb3IgbGlzdCB0byBzbGlzdC4KKyAqLworCisvLyBXcml0dGVuIGJ5IENoYW5naGVlIEp1bmcuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9MSVNUX1RPX1NMSVNUX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9MSVNUX1RPX1NMSVNUX0ggMQorCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX25vZGUuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfdHJhY2UuaCIKKworbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKK3sKKyAgY2xhc3MgX19saXN0MnNsaXN0X2luZm8KKyAgOiBwdWJsaWMgX19vYmplY3RfaW5mb19iYXNlCisgIHsKKyAgcHVibGljOgorICAgIF9fbGlzdDJzbGlzdF9pbmZvKCkKKyAgICA6IF9NX3Jld2luZChmYWxzZSksIF9NX29wZXJhdGlvbnMoMCkgeyB9CisgIAorICAgIF9fbGlzdDJzbGlzdF9pbmZvKF9fc3RhY2tfdCBfX3N0YWNrKQorICAgIDogX19vYmplY3RfaW5mb19iYXNlKF9fc3RhY2spLCBfTV9yZXdpbmQoZmFsc2UpLCBfTV9vcGVyYXRpb25zKDApIHsgfQorCisgICAgdmlydHVhbCB+X19saXN0MnNsaXN0X2luZm8oKSB7IH0KKworICAgIF9fbGlzdDJzbGlzdF9pbmZvKGNvbnN0IF9fbGlzdDJzbGlzdF9pbmZvJiBfX28pCisgICAgOiBfX29iamVjdF9pbmZvX2Jhc2UoX19vKSwgX01fcmV3aW5kKF9fby5fTV9yZXdpbmQpLAorICAgICAgX01fb3BlcmF0aW9ucyhfX28uX01fb3BlcmF0aW9ucykgeyB9CisgIAorICAgIC8vIFhYWDogdGhlIG1hZ25pdHVkZSBzaG91bGQgYmUgbXVsdGlwbGllZCB3aXRoIGEgY29uc3RhbnQgZmFjdG9yIEYsCisgICAgLy8gd2hlcmUgRiBpcyAxIHdoZW4gdGhlIG1hbGxvYyBzaXplIGNsYXNzIG9mIGxpc3Qgbm9kZXMgaXMgZGlmZmVyZW50CisgICAgLy8gZnJvbSB0aGUgbWFsbG9jIHNpemUgY2xhc3Mgb2Ygc2xpc3Qgbm9kZXMuICBXaGVuIHRoZXkgZmFsbCBpbnRvIHRoZSBzYW1lCisgICAgLy8gY2xhc3MsIHRoZSBvbmx5IHNsaXN0IGJlbmVmaXQgaXMgZnJvbSBoYXZpbmcgdG8gc2V0IGZld2VyIGxpbmtzLCBzbworICAgIC8vIHRoZSBmYWN0b3IgRiBzaG91bGQgYmUgbXVjaCBzbWFsbGVyLCBjbG9zZXIgdG8gMCB0aGFuIHRvIDEuCisgICAgLy8gVGhpcyBjb3VsZCBiZSBpbXBsZW1lbnRlZCBieSBwYXNzaW5nIHRoZSBzaXplIGNsYXNzZXMgaW4gdGhlIGNvbmZpZyAKKyAgICAvLyBmaWxlLiAgRm9yIG5vdywgd2UgYWx3YXlzIGFzc3VtZSBGIHRvIGJlIDEuCisKKyAgICBmbG9hdAorICAgIF9fbWFnbml0dWRlKCkgY29uc3QKKyAgICB7CisgICAgICBpZiAoIV9NX3Jld2luZCkKKwlyZXR1cm4gX01fb3BlcmF0aW9uczsKKyAgICAgIGVsc2UKKwlyZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgdm9pZAorICAgIF9fbWVyZ2UoY29uc3QgX19saXN0MnNsaXN0X2luZm8mKSB7IH0KKworICAgIHZvaWQKKyAgICBfX3dyaXRlKEZJTEUqIF9fZikgY29uc3QKKyAgICB7IHN0ZDo6ZnByaW50ZihfX2YsICIlc1xuIiwgX01fcmV3aW5kID8gImludmFsaWQiIDogInZhbGlkIik7IH0KKworICAgIHN0ZDo6c3RyaW5nCisgICAgX19hZHZpY2UoKSBjb25zdAorICAgIHsgcmV0dXJuICJjaGFuZ2Ugc3RkOjpsaXN0IHRvIHN0ZDo6Zm9yd2FyZF9saXN0IjsgfQorCisgICAgdm9pZAorICAgIF9fb3ByX3Jld2luZCgpCisgICAgeworICAgICAgX01fcmV3aW5kID0gdHJ1ZTsKKyAgICAgIF9NX3ZhbGlkID0gZmFsc2U7CisgICAgfQorCisgICAgdm9pZAorICAgIF9fcmVjb3JkX29wZXJhdGlvbigpCisgICAgeyArK19NX29wZXJhdGlvbnM7IH0KKworICAgIGJvb2wKKyAgICBfX2hhc19yZXdpbmQoKQorICAgIHsgcmV0dXJuIF9NX3Jld2luZDsgfQorCisgIHByaXZhdGU6CisgICAgYm9vbCBfTV9yZXdpbmQ7CisgICAgc3RkOjpzaXplX3QgX01fb3BlcmF0aW9uczsKKyAgfTsKKworICBjbGFzcyBfX2xpc3Qyc2xpc3Rfc3RhY2tfaW5mbworICA6IHB1YmxpYyBfX2xpc3Qyc2xpc3RfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBfX2xpc3Qyc2xpc3Rfc3RhY2tfaW5mbyhjb25zdCBfX2xpc3Qyc2xpc3RfaW5mbyYgX19vKSAKKyAgICA6IF9fbGlzdDJzbGlzdF9pbmZvKF9fbykgeyB9CisgIH07CisKKyAgY2xhc3MgX190cmFjZV9saXN0X3RvX3NsaXN0CisgIDogcHVibGljIF9fdHJhY2VfYmFzZTxfX2xpc3Qyc2xpc3RfaW5mbywgX19saXN0MnNsaXN0X3N0YWNrX2luZm8+IAorICB7CisgIHB1YmxpYzoKKyAgICB+X190cmFjZV9saXN0X3RvX3NsaXN0KCkgeyB9CisKKyAgICBfX3RyYWNlX2xpc3RfdG9fc2xpc3QoKQorICAgIDogX190cmFjZV9iYXNlPF9fbGlzdDJzbGlzdF9pbmZvLCBfX2xpc3Qyc2xpc3Rfc3RhY2tfaW5mbz4oKQorICAgIHsgX19pZCA9ICJsaXN0LXRvLXNsaXN0IjsgfQorCisgICAgdm9pZAorICAgIF9fb3ByX3Jld2luZChjb25zdCB2b2lkKiBfX29iaikKKyAgICB7CisgICAgICBfX2xpc3Qyc2xpc3RfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgICAgICBpZiAoX19yZXMpCisJX19yZXMtPl9fb3ByX3Jld2luZCgpOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX3JlY29yZF9vcGVyYXRpb24oY29uc3Qgdm9pZCogX19vYmopCisgICAgeworICAgICAgX19saXN0MnNsaXN0X2luZm8qIF9fcmVzID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICAgICAgaWYgKF9fcmVzKQorCV9fcmVzLT5fX3JlY29yZF9vcGVyYXRpb24oKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX19pbnNlcnQoY29uc3QgX19vYmplY3RfdCBfX29iaiwgX19zdGFja190IF9fc3RhY2spCisgICAgeyBfX2FkZF9vYmplY3QoX19vYmosIF9fbGlzdDJzbGlzdF9pbmZvKF9fc3RhY2spKTsgfQorICAKKyAgICB2b2lkCisgICAgX19kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKKyAgICB7CisgICAgICBpZiAoIV9faXNfb24oKSkKKwlyZXR1cm47CisKKyAgICAgIF9fbGlzdDJzbGlzdF9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgICAgIGlmICghX19yZXMpCisJcmV0dXJuOworCisgICAgICBfX3JldGlyZV9vYmplY3QoX19vYmopOworICAgIH0KKyAgfTsKKworCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfbGlzdF90b19zbGlzdF9pbml0KCkKKyAgeyBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b19zbGlzdCkgPSBuZXcgX190cmFjZV9saXN0X3RvX3NsaXN0KCk7IH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2xpc3RfdG9fc2xpc3RfcmVwb3J0KEZJTEUqIF9fZiwgX193YXJuaW5nX3ZlY3Rvcl90JiBfX3dhcm5pbmdzKQorICB7CisgICAgaWYgKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KSkKKyAgICAgIHsKKwlfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b19zbGlzdCktPgorCSAgX19jb2xsZWN0X3dhcm5pbmdzKF9fd2FybmluZ3MpOworCV9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KS0+X193cml0ZShfX2YpOworICAgICAgfQorICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9saXN0X3RvX3NsaXN0X3Jld2luZChjb25zdCB2b2lkKiBfX29iaikgCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b19zbGlzdCktPl9fb3ByX3Jld2luZChfX29iaik7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2xpc3RfdG9fc2xpc3Rfb3BlcmF0aW9uKGNvbnN0IHZvaWQqIF9fb2JqKSAKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KS0+X19yZWNvcmRfb3BlcmF0aW9uKF9fb2JqKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfbGlzdF90b19zbGlzdF9jb25zdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b19zbGlzdCktPl9faW5zZXJ0KF9fb2JqLCBfX2dldF9zdGFjaygpKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfbGlzdF90b19zbGlzdF9kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3NsaXN0KS0+X19kZXN0cnVjdChfX29iaik7CisgIH0KKworfSAvLyBuYW1lc3BhY2UgX19nbnVfcHJvZmlsZQorI2VuZGlmIC8qIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTElTVF9UT19TTElTVF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9saXN0X3RvX3ZlY3Rvci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b192ZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGIxNDMzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b192ZWN0b3IuaApAQCAtMCwwICsxLDMyNCBAQAorLy8gLSotIEMrKyAtKi0KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL2ltcGwvcHJvZmlsZXJfbGlzdF90b192ZWN0b3IuaAorICogIEBicmllZiBkaWFnbm9zdGljcyBmb3IgbGlzdCB0byB2ZWN0b3IuCisgKi8KKworLy8gV3JpdHRlbiBieSBDaGFuZ2hlZSBKdW5nLgorCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTElTVF9UT19WRUNUT1JfSAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0xJU1RfVE9fVkVDVE9SX0ggMQorCisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlci5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisgIC8qKiBAYnJpZWYgQSBsaXN0LXRvLXZlY3RvciBpbnN0cnVtZW50YXRpb24gbGluZSBpbiB0aGUgb2JqZWN0IHRhYmxlLiAgKi8KKyAgY2xhc3MgX19saXN0MnZlY3Rvcl9pbmZvCisgIDogcHVibGljIF9fb2JqZWN0X2luZm9fYmFzZQorICB7CisgIHB1YmxpYzoKKyAgICBfX2xpc3QydmVjdG9yX2luZm8oKQorICAgIDogX01fc2hpZnRfY291bnQoMCksIF9NX2l0ZXJhdGUoMCksIF9NX3Jlc2l6ZSgwKSwgX01fbGlzdF9jb3N0KDApLAorICAgICAgX01fdmVjdG9yX2Nvc3QoMCksIF9NX3ZhbGlkKHRydWUpLCBfTV9tYXhfc2l6ZSgwKSB7IH0KKworICAgIF9fbGlzdDJ2ZWN0b3JfaW5mbyhfX3N0YWNrX3QgX19zdGFjaykKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX3N0YWNrKSwgX01fc2hpZnRfY291bnQoMCksIF9NX2l0ZXJhdGUoMCksCisgICAgICBfTV9yZXNpemUoMCksIF9NX2xpc3RfY29zdCgwKSwgX01fdmVjdG9yX2Nvc3QoMCksIF9NX3ZhbGlkKHRydWUpLAorICAgICAgX01fbWF4X3NpemUoMCkgeyB9CisKKyAgICB2aXJ0dWFsIH5fX2xpc3QydmVjdG9yX2luZm8oKSB7IH0KKworICAgIF9fbGlzdDJ2ZWN0b3JfaW5mbyhjb25zdCBfX2xpc3QydmVjdG9yX2luZm8mIF9fbykKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX28pLCBfTV9zaGlmdF9jb3VudChfX28uX01fc2hpZnRfY291bnQpLAorICAgICAgX01faXRlcmF0ZShfX28uX01faXRlcmF0ZSksIF9NX3Jlc2l6ZShfX28uX01fcmVzaXplKSwKKyAgICAgIF9NX2xpc3RfY29zdChfX28uX01fbGlzdF9jb3N0KSwgX01fdmVjdG9yX2Nvc3QoX19vLl9NX3ZlY3Rvcl9jb3N0KSwKKyAgICAgIF9NX3ZhbGlkKF9fby5fTV92YWxpZCksIF9NX21heF9zaXplKF9fby5fTV9tYXhfc2l6ZSkgeyB9CisKKyAgICB2b2lkCisgICAgX19tZXJnZShjb25zdCBfX2xpc3QydmVjdG9yX2luZm8mIF9fbykKKyAgICB7CisgICAgICBfTV9zaGlmdF9jb3VudCAgKz0gX19vLl9NX3NoaWZ0X2NvdW50OworICAgICAgX01faXRlcmF0ZSAgICAgICs9IF9fby5fTV9pdGVyYXRlOworICAgICAgX01fdmVjdG9yX2Nvc3QgICs9IF9fby5fTV92ZWN0b3JfY29zdDsKKyAgICAgIF9NX2xpc3RfY29zdCAgICArPSBfX28uX01fbGlzdF9jb3N0OworICAgICAgX01fdmFsaWQgICAgICAgICY9IF9fby5fTV92YWxpZDsKKyAgICAgIF9NX3Jlc2l6ZSAgICAgICArPSBfX28uX01fcmVzaXplOworICAgICAgX01fbWF4X3NpemUgICAgID0gc3RkOjptYXgoIF9NX21heF9zaXplLCBfX28uX01fbWF4X3NpemUpOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX3dyaXRlKEZJTEUqIF9fZikgY29uc3QKKyAgICB7CisgICAgICBzdGQ6OmZwcmludGYoX19mLCAiJVp1ICVadSAlWnUgJS4wZiAlLjBmXG4iLCBfTV9zaGlmdF9jb3VudCwKKwkJICAgX01fcmVzaXplLCBfTV9pdGVyYXRlLCBfTV92ZWN0b3JfY29zdCwgX01fbGlzdF9jb3N0KTsKKyAgICB9CisKKyAgICBmbG9hdAorICAgIF9fbWFnbml0dWRlKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9saXN0X2Nvc3QgLSBfTV92ZWN0b3JfY29zdDsgfQorICAKKyAgICBzdGQ6OnN0cmluZworICAgIF9fYWR2aWNlKCkgY29uc3QKKyAgICB7CisgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBfX3NzdHJlYW07CisgICAgICBfX3NzdHJlYW0gCisJPDwgImNoYW5nZSBzdGQ6Omxpc3QgdG8gc3RkOjp2ZWN0b3IgYW5kIGl0cyBpbml0aWFsIHNpemUgZnJvbSAwIHRvICIKKwk8PCBfTV9tYXhfc2l6ZTsKKyAgICAgIHJldHVybiBfX3NzdHJlYW0uc3RyKCk7CisgICAgfQorCisgICAgc3RkOjpzaXplX3QKKyAgICBfX3NoaWZ0X2NvdW50KCkKKyAgICB7IHJldHVybiBfTV9zaGlmdF9jb3VudDsgfQorICAKKyAgICBzdGQ6OnNpemVfdAorICAgIF9faXRlcmF0ZSgpCisgICAgeyByZXR1cm4gX01faXRlcmF0ZTsgfQorICAKKyAgICBmbG9hdAorICAgIF9fbGlzdF9jb3N0KCkKKyAgICB7IHJldHVybiBfTV9saXN0X2Nvc3Q7IH0KKyAgCisgICAgc3RkOjpzaXplX3QKKyAgICBfX3Jlc2l6ZSgpCisgICAgeyByZXR1cm4gX01fcmVzaXplOyB9CisgIAorICAgIHZvaWQKKyAgICBfX3NldF9saXN0X2Nvc3QoZmxvYXQgX19sYykKKyAgICB7IF9NX2xpc3RfY29zdCA9IF9fbGM7IH0KKyAgICAKKyAgICB2b2lkCisgICAgX19zZXRfdmVjdG9yX2Nvc3QoZmxvYXQgX192YykKKyAgICB7IF9NX3ZlY3Rvcl9jb3N0ID0gX192YzsgfQorICAgIAorICAgIGJvb2wKKyAgICBfX2lzX3ZhbGlkKCkKKyAgICB7IHJldHVybiBfTV92YWxpZDsgfQorICAgIAorICAgIHZvaWQKKyAgICBfX3NldF9pbnZhbGlkKCkKKyAgICB7IF9NX3ZhbGlkID0gZmFsc2U7IH0KKworICAgIHZvaWQKKyAgICBfX29wcl9pbnNlcnQoc3RkOjpzaXplX3QgX19zaGlmdCwgc3RkOjpzaXplX3QgX19zaXplKQorICAgIHsKKyAgICAgIF9NX3NoaWZ0X2NvdW50ICs9IF9fc2hpZnQ7CisgICAgICBfTV9tYXhfc2l6ZSA9IHN0ZDo6bWF4KF9NX21heF9zaXplLCBfX3NpemUpOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX29wcl9pdGVyYXRlKHN0ZDo6c2l6ZV90IF9fbnVtKQorICAgIHsgX01faXRlcmF0ZSArPSBfX251bTt9CisKKyAgICB2b2lkCisgICAgX19yZXNpemUoc3RkOjpzaXplX3QgX19mcm9tLCBzdGQ6OnNpemVfdCkKKyAgICB7IF9NX3Jlc2l6ZSArPSBfX2Zyb207IH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6c2l6ZV90IF9NX3NoaWZ0X2NvdW50OworICAgIHN0ZDo6c2l6ZV90IF9NX2l0ZXJhdGU7CisgICAgc3RkOjpzaXplX3QgX01fcmVzaXplOworICAgIGZsb2F0IF9NX2xpc3RfY29zdDsKKyAgICBmbG9hdCBfTV92ZWN0b3JfY29zdDsKKyAgICBib29sICBfTV92YWxpZDsKKyAgICBzdGQ6OnNpemVfdCBfTV9tYXhfc2l6ZTsKKyAgfTsKKworICBjbGFzcyBfX2xpc3QydmVjdG9yX3N0YWNrX2luZm8gCisgIDogcHVibGljIF9fbGlzdDJ2ZWN0b3JfaW5mbworICB7CisgIHB1YmxpYzoKKyAgICBfX2xpc3QydmVjdG9yX3N0YWNrX2luZm8oY29uc3QgX19saXN0MnZlY3Rvcl9pbmZvJiBfX28pIAorICAgIDogX19saXN0MnZlY3Rvcl9pbmZvKF9fbykge30KKyAgfTsKKworICBjbGFzcyBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yCisgIDogcHVibGljIF9fdHJhY2VfYmFzZTxfX2xpc3QydmVjdG9yX2luZm8sIF9fbGlzdDJ2ZWN0b3Jfc3RhY2tfaW5mbz4gCisgIHsKKyAgcHVibGljOgorICAgIF9fdHJhY2VfbGlzdF90b192ZWN0b3IoKQorICAgIDogX190cmFjZV9iYXNlPF9fbGlzdDJ2ZWN0b3JfaW5mbywgX19saXN0MnZlY3Rvcl9zdGFja19pbmZvPigpCisgICAgeyBfX2lkID0gImxpc3QtdG8tdmVjdG9yIjsgfQorCisgICAgfl9fdHJhY2VfbGlzdF90b192ZWN0b3IoKSB7IH0KKworICAgIC8vIEluc2VydCBhIG5ldyBub2RlIGF0IGNvbnN0cnVjdCB3aXRoIG9iamVjdCwgY2FsbHN0YWNrIGFuZCBpbml0aWFsIHNpemUuCisgICAgdm9pZAorICAgIF9faW5zZXJ0KF9fb2JqZWN0X3QgX19vYmosIF9fc3RhY2tfdCBfX3N0YWNrKQorICAgIHsgX19hZGRfb2JqZWN0KF9fb2JqLCBfX2xpc3QydmVjdG9yX2luZm8oX19zdGFjaykpOyB9CisKKyAgICAvLyBDYWxsIGF0IGRlc3RydWN0aW9uL2NsZWFuIHRvIHNldCBjb250YWluZXIgZmluYWwgc2l6ZS4KKyAgICB2b2lkCisgICAgX19kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKKyAgICB7CisgICAgICBpZiAoIV9faXNfb24oKSkKKwlyZXR1cm47CisKKyAgICAgIF9fbGlzdDJ2ZWN0b3JfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgICAgICBpZiAoIV9fcmVzKQorCXJldHVybjsKKworICAgICAgZmxvYXQgX192YyA9IF9fdmVjdG9yX2Nvc3QoX19yZXMtPl9fc2hpZnRfY291bnQoKSwgX19yZXMtPl9faXRlcmF0ZSgpKTsKKyAgICAgIGZsb2F0IF9fbGMgPSBfX2xpc3RfY29zdChfX3Jlcy0+X19zaGlmdF9jb3VudCgpLCBfX3Jlcy0+X19pdGVyYXRlKCkpOworICAgICAgX19yZXMtPl9fc2V0X3ZlY3Rvcl9jb3N0KF9fdmMpOworICAgICAgX19yZXMtPl9fc2V0X2xpc3RfY29zdChfX2xjKTsKKyAgICAgIF9fcmV0aXJlX29iamVjdChfX29iaik7CisgICAgfQorCisgICAgLy8gRmluZCB0aGUgbm9kZSBpbiB0aGUgbGl2ZSBtYXAuCisgICAgX19saXN0MnZlY3Rvcl9pbmZvKiBfX2ZpbmQoY29uc3Qgdm9pZCogX19vYmopOworCisgICAgLy8gQ29sbGVjdCBjb3N0IG9mIG9wZXJhdGlvbnMuCisgICAgdm9pZAorICAgIF9fb3ByX2luc2VydChjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19zaGlmdCwgc3RkOjpzaXplX3QgX19zaXplKQorICAgIHsKKyAgICAgIF9fbGlzdDJ2ZWN0b3JfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgICAgICBpZiAoX19yZXMpCisJX19yZXMtPl9fb3ByX2luc2VydChfX3NoaWZ0LCBfX3NpemUpOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX29wcl9pdGVyYXRlKGNvbnN0IHZvaWQqIF9fb2JqLCBzdGQ6OnNpemVfdCBfX251bSkKKyAgICB7CisgICAgICBfX2xpc3QydmVjdG9yX2luZm8qIF9fcmVzID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICAgICAgaWYgKF9fcmVzKQorCV9fcmVzLT5fX29wcl9pdGVyYXRlKF9fbnVtKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX19pbnZhbGlkX29wZXJhdG9yKGNvbnN0IHZvaWQqIF9fb2JqKQorICAgIHsKKyAgICAgIF9fbGlzdDJ2ZWN0b3JfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgICAgICBpZiAoX19yZXMpCisJX19yZXMtPl9fc2V0X2ludmFsaWQoKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX19yZXNpemUoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fZnJvbSwgc3RkOjpzaXplX3QgX190bykKKyAgICB7CisgICAgICBfX2xpc3QydmVjdG9yX2luZm8qIF9fcmVzID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICAgICAgaWYgKF9fcmVzKQorCV9fcmVzLT5fX3Jlc2l6ZShfX2Zyb20sIF9fdG8pOworICAgIH0KKworICAgIGZsb2F0CisgICAgX192ZWN0b3JfY29zdChzdGQ6OnNpemVfdCBfX3NoaWZ0LCBzdGQ6OnNpemVfdCBfX2l0ZXJhdGUpCisgICAgeworICAgICAgLy8gVGhlIHJlc3VsdGluZyB2ZWN0b3Igd2lsbCB1c2UgYSAncmVzZXJ2ZScgbWV0aG9kLgorICAgICAgcmV0dXJuIChfX3NoaWZ0CisJICAgICAgKiBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX192ZWN0b3Jfc2hpZnRfY29zdF9mYWN0b3IpLl9fdmFsdWUKKwkgICAgICArIF9faXRlcmF0ZQorCSAgICAgICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdmVjdG9yX2l0ZXJhdGVfY29zdF9mYWN0b3IpLl9fdmFsdWUpOyAKKyAgICB9CisKKyAgICBmbG9hdAorICAgIF9fbGlzdF9jb3N0KHN0ZDo6c2l6ZV90IF9fc2hpZnQsIHN0ZDo6c2l6ZV90IF9faXRlcmF0ZSkKKyAgICB7CisgICAgICByZXR1cm4gKF9fc2hpZnQKKwkgICAgICAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2xpc3Rfc2hpZnRfY29zdF9mYWN0b3IpLl9fdmFsdWUKKwkgICAgICArIF9faXRlcmF0ZQorCSAgICAgICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9pdGVyYXRlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlKTsgCisgICAgfQorICB9OworCisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9pbml0KCkKKyAgeyBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b192ZWN0b3IpID0gbmV3IF9fdHJhY2VfbGlzdF90b192ZWN0b3IoKTsgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfcmVwb3J0KEZJTEUqIF9fZiwgX193YXJuaW5nX3ZlY3Rvcl90JiBfX3dhcm5pbmdzKQorICB7CisgICAgaWYgKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3ZlY3RvcikpCisgICAgICB7CisJX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2xpc3RfdG9fdmVjdG9yKS0+CisJICBfX2NvbGxlY3Rfd2FybmluZ3MoX193YXJuaW5ncyk7CisJX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2xpc3RfdG9fdmVjdG9yKS0+X193cml0ZShfX2YpOworICAgICAgfQorICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9jb25zdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b192ZWN0b3IpLT5fX2luc2VydChfX29iaiwgX19nZXRfc3RhY2soKSk7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2Rlc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqKQorICB7CisgICAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKQorICAgICAgcmV0dXJuOworCisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2xpc3RfdG9fdmVjdG9yKS0+X19kZXN0cnVjdChfX29iaik7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2luc2VydChjb25zdCB2b2lkKiBfX29iaiwgCisJCQkJc3RkOjpzaXplX3QgX19zaGlmdCwgc3RkOjpzaXplX3QgX19zaXplKQorICB7CisgICAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKQorICAgICAgcmV0dXJuOworCisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX2xpc3RfdG9fdmVjdG9yKS0+X19vcHJfaW5zZXJ0KF9fb2JqLCBfX3NoaWZ0LCAKKwkJCQkJCQkgICBfX3NpemUpOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9pdGVyYXRlKGNvbnN0IHZvaWQqIF9fb2JqLCBzdGQ6OnNpemVfdCBfX251bSA9IDEpCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b192ZWN0b3IpLT5fX29wcl9pdGVyYXRlKF9fb2JqLCBfX251bSk7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCogX19vYmopCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbGlzdF90b192ZWN0b3IpLT5fX2ludmFsaWRfb3BlcmF0b3IoX19vYmopOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9yZXNpemUoY29uc3Qgdm9pZCogX19vYmosIAorCQkJCXN0ZDo6c2l6ZV90IF9fZnJvbSwgc3RkOjpzaXplX3QgX190bykKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19saXN0X3RvX3ZlY3RvciktPl9fcmVzaXplKF9fb2JqLCBfX2Zyb20sIF9fdG8pOworICB9CisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX0xJU1RfVE9fVkVDVE9SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbWFwX3RvX3Vub3JkZXJlZF9tYXAuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX21hcF90b191bm9yZGVyZWRfbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1NmMwNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX21hcF90b191bm9yZGVyZWRfbWFwLmgKQEAgLTAsMCArMSwyOTAgQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX21hcF90b191bm9yZGVyZWRfbWFwLmgKKyAqICBAYnJpZWYgRGlhZ25vc3RpY3MgZm9yIG1hcCB0byB1bm9yZGVyZWRfbWFwLgorICovCisKKy8vIFdyaXR0ZW4gYnkgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9NQVBfVE9fVU5PUkRFUkVEX01BUF9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTUFQX1RPX1VOT1JERVJFRF9NQVBfSCAxCisKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXIuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfbm9kZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oIgorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworICBpbmxpbmUgaW50CisgIF9fbG9nMihzdGQ6OnNpemVfdCBfX3NpemUpCisgIHsKKyAgICBmb3IgKGludCBfX2JpdF9jb3VudCA9IHNpemVvZihzdGQ6OnNpemVfdCkgLSAxOyBfX2JpdF9jb3VudCA+PSAwOworCSAtLSBfX2JpdF9jb3VudCkgCisgICAgICBpZiAoKDIgPDwgX19iaXRfY291bnQpICYgX19zaXplKQorCXJldHVybiBfX2JpdF9jb3VudDsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGlubGluZSBmbG9hdAorICBfX21hcF9pbnNlcnRfY29zdChzdGQ6OnNpemVfdCBfX3NpemUpCisgIHsgcmV0dXJuIChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19tYXBfaW5zZXJ0X2Nvc3RfZmFjdG9yKS5fX3ZhbHVlIAorCSAgICAqIHN0YXRpY19jYXN0PGZsb2F0PihfX2xvZzIoX19zaXplKSkpOyB9CisKKyAgaW5saW5lIGZsb2F0CisgIF9fbWFwX2VyYXNlX2Nvc3Qoc3RkOjpzaXplX3QgX19zaXplKQorICB7IHJldHVybiAoX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbWFwX2VyYXNlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlCisJICAgICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KF9fbG9nMihfX3NpemUpKSk7IH0KKworICBpbmxpbmUgZmxvYXQKKyAgX19tYXBfZmluZF9jb3N0KHN0ZDo6c2l6ZV90IF9fc2l6ZSkKKyAgeyByZXR1cm4gKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX21hcF9maW5kX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlCisJICAgICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KF9fbG9nMihfX3NpemUpKSk7IH0KKworICAvKiogQGJyaWVmIEEgbWFwLXRvLXVub3JkZXJlZF9tYXAgaW5zdHJ1bWVudGF0aW9uIGxpbmUgaW4gdGhlIAorICAgICAgb2JqZWN0IHRhYmxlLiAgKi8KKyAgY2xhc3MgX19tYXAydW1hcF9pbmZvCisgIDogcHVibGljIF9fb2JqZWN0X2luZm9fYmFzZQorICB7CisgIHB1YmxpYzoKKyAgICBfX21hcDJ1bWFwX2luZm8oKQorICAgIDogX01faW5zZXJ0KDApLCBfTV9lcmFzZSgwKSwgX01fZmluZCgwKSwgX01faXRlcmF0ZSgwKSwKKyAgICAgIF9NX3VtYXBfY29zdCgwLjApLCBfTV9tYXBfY29zdCgwLjApLCBfTV92YWxpZCh0cnVlKSB7IH0KKyAgICAKKyAgICBfX21hcDJ1bWFwX2luZm8oX19zdGFja190IF9fc3RhY2spCisgICAgOiBfX29iamVjdF9pbmZvX2Jhc2UoX19zdGFjayksIF9NX2luc2VydCgwKSwgX01fZXJhc2UoMCksIF9NX2ZpbmQoMCksIAorICAgICAgX01faXRlcmF0ZSgwKSwgX01fdW1hcF9jb3N0KDAuMCksIF9NX21hcF9jb3N0KDAuMCksIF9NX3ZhbGlkKHRydWUpIHsgfQorCisgICAgdmlydHVhbCB+X19tYXAydW1hcF9pbmZvKCkgeyB9CisKKyAgICBfX21hcDJ1bWFwX2luZm8oY29uc3QgX19tYXAydW1hcF9pbmZvJiBfX28pCisgICAgOiBfX29iamVjdF9pbmZvX2Jhc2UoX19vKSwgX01faW5zZXJ0KF9fby5fTV9pbnNlcnQpLAorICAgICAgX01fZXJhc2UoX19vLl9NX2VyYXNlKSwgX01fZmluZChfX28uX01fZmluZCksCisgICAgICBfTV9pdGVyYXRlKF9fby5fTV9pdGVyYXRlKSwgX01fdW1hcF9jb3N0KF9fby5fTV91bWFwX2Nvc3QpLAorICAgICAgX01fbWFwX2Nvc3QoX19vLl9NX21hcF9jb3N0KSwgX01fdmFsaWQoX19vLl9NX3ZhbGlkKSB7IH0KKworICAgIHZvaWQKKyAgICBfX21lcmdlKGNvbnN0IF9fbWFwMnVtYXBfaW5mbyYgX19vKQorICAgIHsKKyAgICAgIF9NX2luc2VydCAgICArPSBfX28uX01faW5zZXJ0OworICAgICAgX01fZXJhc2UgICAgICs9IF9fby5fTV9lcmFzZTsKKyAgICAgIF9NX2ZpbmQgICAgICArPSBfX28uX01fZmluZDsKKyAgICAgIF9NX3VtYXBfY29zdCArPSBfX28uX01fdW1hcF9jb3N0OworICAgICAgX01fbWFwX2Nvc3QgICs9IF9fby5fTV9tYXBfY29zdDsKKyAgICAgIF9NX3ZhbGlkICAgICAmPSBfX28uX01fdmFsaWQ7CisgICAgfQorCisgICAgdm9pZAorICAgIF9fd3JpdGUoRklMRSogX19mKSBjb25zdAorICAgIHsKKyAgICAgIHN0ZDo6ZnByaW50ZihfX2YsICIlWnUgJVp1ICVadSAlWnUgJS4wZiAlLjBmICVzXG4iLAorCQkgICBfTV9pbnNlcnQsIF9NX2VyYXNlLCBfTV9maW5kLCBfTV9pdGVyYXRlLCBfTV9tYXBfY29zdCwKKwkJICAgX01fdW1hcF9jb3N0LCBfTV92YWxpZCA/ICJ2YWxpZCIgOiAiaW52YWxpZCIpOworICAgIH0KKworICAgIGZsb2F0CisgICAgX19tYWduaXR1ZGUoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX21hcF9jb3N0IC0gX01fdW1hcF9jb3N0OyB9CisKKyAgICBzdGQ6OnN0cmluZworICAgIF9fYWR2aWNlKCkgY29uc3QKKyAgICB7IHJldHVybiAiY2hhbmdlIHN0ZDo6bWFwIHRvIHN0ZDo6dW5vcmRlcmVkX21hcCI7IH0KKworICAgIHZvaWQKKyAgICBfX3JlY29yZF9pbnNlcnQoc3RkOjpzaXplX3QgX19zaXplLCBzdGQ6OnNpemVfdCBfX2NvdW50KQorICAgIHsKKyAgICAgIF9NX2luc2VydCArPSBfX2NvdW50OworICAgICAgX01fbWFwX2Nvc3QgKz0gX19jb3VudCAqIF9fbWFwX2luc2VydF9jb3N0KF9fc2l6ZSk7CisgICAgICBfTV91bWFwX2Nvc3QKKwkrPSAoX19jb3VudAorCSAgICAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3VtYXBfaW5zZXJ0X2Nvc3RfZmFjdG9yKS5fX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX19yZWNvcmRfZXJhc2Uoc3RkOjpzaXplX3QgX19zaXplLCBzdGQ6OnNpemVfdCBfX2NvdW50KQorICAgIHsKKyAgICAgIF9NX2VyYXNlICs9IF9fY291bnQ7CisgICAgICBfTV9tYXBfY29zdCArPSBfX2NvdW50ICogX19tYXBfZXJhc2VfY29zdChfX3NpemUpOworICAgICAgX01fdW1hcF9jb3N0CisJKz0gKF9fY291bnQKKwkgICAgKiBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX191bWFwX2VyYXNlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX19yZWNvcmRfZmluZChzdGQ6OnNpemVfdCBfX3NpemUpCisgICAgeworICAgICAgX01fZmluZCArPSAxOworICAgICAgX01fbWFwX2Nvc3QgKz0gX19tYXBfZmluZF9jb3N0KF9fc2l6ZSk7CisgICAgICBfTV91bWFwX2Nvc3QgKz0gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdW1hcF9maW5kX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX3JlY29yZF9pdGVyYXRlKHN0ZDo6c2l6ZV90IF9fY291bnQpCisgICAgeworICAgICAgX01faXRlcmF0ZSArPSBfX2NvdW50OworICAgICAgX01fbWFwX2Nvc3QKKwkrPSAoX19jb3VudAorCSAgICAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX21hcF9pdGVyYXRlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlKTsKKyAgICAgIF9NX3VtYXBfY29zdAorCSs9IChfX2NvdW50CisJICAgICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdW1hcF9pdGVyYXRlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkCisgICAgX19yZWNvcmRfaW52YWxpZGF0ZSgpCisgICAgeyBfTV92YWxpZCA9IGZhbHNlOyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnNpemVfdCBfTV9pbnNlcnQ7CisgICAgc3RkOjpzaXplX3QgX01fZXJhc2U7CisgICAgc3RkOjpzaXplX3QgX01fZmluZDsKKyAgICBzdGQ6OnNpemVfdCBfTV9pdGVyYXRlOworICAgIGZsb2F0IF9NX3VtYXBfY29zdDsKKyAgICBmbG9hdCBfTV9tYXBfY29zdDsKKyAgICBib29sICBfTV92YWxpZDsKKyAgfTsKKworCisgIC8qKiBAYnJpZWYgQSBtYXAtdG8tdW5vcmRlcmVkX21hcCBpbnN0cnVtZW50YXRpb24gbGluZSBpbiB0aGUgCisgICAgICBzdGFjayB0YWJsZS4gICovCisgIGNsYXNzIF9fbWFwMnVtYXBfc3RhY2tfaW5mbyAKKyAgOiBwdWJsaWMgX19tYXAydW1hcF9pbmZvCisgIHsKKyAgcHVibGljOgorICAgIF9fbWFwMnVtYXBfc3RhY2tfaW5mbyhjb25zdCBfX21hcDJ1bWFwX2luZm8mIF9fbykKKyAgICA6IF9fbWFwMnVtYXBfaW5mbyhfX28pIHsgfQorICB9OworCisgIC8qKiBAYnJpZWYgTWFwLXRvLXVub3JkZXJlZF9tYXAgaW5zdHJ1bWVudGF0aW9uIHByb2R1Y2VyLiAgKi8KKyAgY2xhc3MgX190cmFjZV9tYXAydW1hcAorICA6IHB1YmxpYyBfX3RyYWNlX2Jhc2U8X19tYXAydW1hcF9pbmZvLCBfX21hcDJ1bWFwX3N0YWNrX2luZm8+IAorICB7CisgIHB1YmxpYzoKKyAgICBfX3RyYWNlX21hcDJ1bWFwKCkKKyAgICA6IF9fdHJhY2VfYmFzZTxfX21hcDJ1bWFwX2luZm8sIF9fbWFwMnVtYXBfc3RhY2tfaW5mbz4oKQorICAgIHsgX19pZCA9ICJtYXAtdG8tdW5vcmRlcmVkLW1hcCI7IH0KKyAgfTsKKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2luaXQoKQorICB7IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCkgPSBuZXcgX190cmFjZV9tYXAydW1hcCgpOyB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9yZXBvcnQoRklMRSogX19mLAorCQkJCSAgICAgIF9fd2FybmluZ192ZWN0b3JfdCYgX193YXJuaW5ncykKKyAgeworICAgIGlmIChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWFwMnVtYXApKSAKKyAgICAgIHsKKwlfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWFwMnVtYXApLT5fX2NvbGxlY3Rfd2FybmluZ3MoX193YXJuaW5ncyk7CisJX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21hcDJ1bWFwKS0+X193cml0ZShfX2YpOworICAgICAgfQorICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9jb25zdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWFwMnVtYXApLT4KKyAgICAgIF9fYWRkX29iamVjdChfX29iaiwgX19tYXAydW1hcF9pbmZvKF9fZ2V0X3N0YWNrKCkpKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWFwMnVtYXApLT5fX3JldGlyZV9vYmplY3QoX19vYmopOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnNlcnQoY29uc3Qgdm9pZCogX19vYmosIAorCQkJCSAgICAgIHN0ZDo6c2l6ZV90IF9fc2l6ZSwgc3RkOjpzaXplX3QgX19jb3VudCkKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9fbWFwMnVtYXBfaW5mbyogX19pbmZvCisgICAgICA9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCktPl9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKworICAgIGlmIChfX2luZm8pCisgICAgICBfX2luZm8tPl9fcmVjb3JkX2luc2VydChfX3NpemUsIF9fY291bnQpOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9lcmFzZShjb25zdCB2b2lkKiBfX29iaiwgCisJCQkJICAgICBzdGQ6OnNpemVfdCBfX3NpemUsIHN0ZDo6c2l6ZV90IF9fY291bnQpCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpIAorICAgICAgcmV0dXJuOworCisgICAgX19tYXAydW1hcF9pbmZvKiBfX2luZm8gCisgICAgICA9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCktPl9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKworICAgIGlmIChfX2luZm8pCisgICAgICBfX2luZm8tPl9fcmVjb3JkX2VyYXNlKF9fc2l6ZSwgX19jb3VudCk7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fc2l6ZSkKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9fbWFwMnVtYXBfaW5mbyogX19pbmZvCisgICAgICA9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCktPl9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKworICAgIGlmIChfX2luZm8pCisgICAgICBfX2luZm8tPl9fcmVjb3JkX2ZpbmQoX19zaXplKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaXRlcmF0ZShjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19jb3VudCkKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9fbWFwMnVtYXBfaW5mbyogX19pbmZvCisgICAgICA9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXAydW1hcCktPl9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgICAKKyAgICBpZiAoX19pbmZvKQorICAgICAgX19pbmZvLT5fX3JlY29yZF9pdGVyYXRlKF9fY291bnQpOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKGNvbnN0IHZvaWQqIF9fb2JqKQorICB7CisgICAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKQorICAgICAgcmV0dXJuOworCisgICAgX19tYXAydW1hcF9pbmZvKiBfX2luZm8KKyAgICAgID0gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21hcDJ1bWFwKS0+X19nZXRfb2JqZWN0X2luZm8oX19vYmopOworCisgICAgaWYgKF9faW5mbykKKyAgICAgIF9faW5mby0+X19yZWNvcmRfaW52YWxpZGF0ZSgpOworICB9CisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX01BUF9UT19VTk9SREVSRURfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX25vZGUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX25vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2VjYTMxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfbm9kZS5oCkBAIC0wLDAgKzEsMTY2IEBACisvLyAtKi0gQysrIC0qLQorLy8KKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgKKyAqICBAYnJpZWYgRGF0YSBzdHJ1Y3R1cmVzIHRvIHJlcHJlc2VudCBhIHNpbmdsZSBwcm9maWxpbmcgZXZlbnQuCisgKi8KKworLy8gV3JpdHRlbiBieSBMaXhpYSBMaXUgYW5kIFNpbHZpdXMgUnVzLgorCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTk9ERV9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfTk9ERV9IIDEKKworI2luY2x1ZGUgPGNzdGRpbz4gLy8gRklMRSwgZnByaW50ZgorCisjaW5jbHVkZSA8dmVjdG9yPgorI2lmIGRlZmluZWQgX0dMSUJDWFhfSEFWRV9FWEVDSU5GT19ICisjaW5jbHVkZSA8ZXhlY2luZm8uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgX19nbnVfcHJvZmlsZQoreworICB0eXBlZGVmIGNvbnN0IHZvaWQqIF9fb2JqZWN0X3Q7CisgIHR5cGVkZWYgdm9pZCogX19pbnN0cnVjdGlvbl9hZGRyZXNzX3Q7CisgIHR5cGVkZWYgc3RkOjpfR0xJQkNYWF9TVERfQzo6dmVjdG9yPF9faW5zdHJ1Y3Rpb25fYWRkcmVzc190PiBfX3N0YWNrX25wdDsKKyAgdHlwZWRlZiBfX3N0YWNrX25wdCogX19zdGFja190OworCisgIHN0ZDo6c2l6ZV90IF9fc3RhY2tfbWF4X2RlcHRoKCk7CisKKyAgaW5saW5lIF9fc3RhY2tfdAorICBfX2dldF9zdGFjaygpCisgIHsKKyNpZiBkZWZpbmVkIF9HTElCQ1hYX0hBVkVfRVhFQ0lORk9fSAorICAgIHN0ZDo6c2l6ZV90IF9fbWF4X2RlcHRoID0gX19zdGFja19tYXhfZGVwdGgoKTsKKyAgICBpZiAoX19tYXhfZGVwdGggPT0gMCkKKyAgICAgIHJldHVybiAwOworICAgIF9fc3RhY2tfbnB0IF9fYnVmZmVyKF9fbWF4X2RlcHRoKTsKKyAgICBpbnQgX19kZXB0aCA9IGJhY2t0cmFjZSgmX19idWZmZXJbMF0sIF9fbWF4X2RlcHRoKTsKKyAgICBfX3N0YWNrX3QgX19zdGFjayA9IG5ldyBfX3N0YWNrX25wdChfX2RlcHRoKTsKKyAgICBfX2J1aWx0aW5fbWVtY3B5KCYoKl9fc3RhY2spWzBdLCAmX19idWZmZXJbMF0sCisJCSAgICAgX19kZXB0aCAqIHNpemVvZihfX29iamVjdF90KSk7CisgICAgcmV0dXJuIF9fc3RhY2s7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCisgIH0KKworICBpbmxpbmUgc3RkOjpzaXplX3QKKyAgX19zaXplKF9fc3RhY2tfdCBfX3N0YWNrKQorICB7CisgICAgaWYgKCFfX3N0YWNrKQorICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgcmV0dXJuIF9fc3RhY2stPnNpemUoKTsKKyAgfQorCisgIC8vIFhYWAorICBpbmxpbmUgdm9pZAorICBfX3dyaXRlKEZJTEUqIF9fZiwgX19zdGFja190IF9fc3RhY2spCisgIHsKKyAgICBpZiAoIV9fc3RhY2spCisgICAgICByZXR1cm47CisgIAorICAgIF9fc3RhY2tfbnB0Ojpjb25zdF9pdGVyYXRvciBfX2l0OworICAgIGZvciAoX19pdCA9IF9fc3RhY2stPmJlZ2luKCk7IF9faXQgIT0gX19zdGFjay0+ZW5kKCk7ICsrX19pdCkKKyAgICAgIHN0ZDo6ZnByaW50ZihfX2YsICIlcCAiLCAqX19pdCk7CisgIH0KKworICAvKiogQGJyaWVmIEhhc2ggZnVuY3Rpb24gZm9yIHN1bW1hcnkgdHJhY2UgdXNpbmcgY2FsbCBzdGFjayBhcyBpbmRleC4gICovCisgIGNsYXNzIF9fc3RhY2tfaGFzaCAKKyAgeworICBwdWJsaWM6CisgICAgc3RkOjpzaXplX3QKKyAgICBvcGVyYXRvcigpKF9fc3RhY2tfdCBfX3MpIGNvbnN0CisgICAgeworICAgICAgaWYgKCFfX3MpIAorCXJldHVybiAwOworCisgICAgICBzdGQ6OnNpemVfdCBfX2luZGV4ID0gMDsKKyAgICAgIF9fc3RhY2tfbnB0Ojpjb25zdF9pdGVyYXRvciBfX2l0OworICAgICAgZm9yIChfX2l0ID0gX19zLT5iZWdpbigpOyBfX2l0ICE9IF9fcy0+ZW5kKCk7ICsrX19pdCkKKwlfX2luZGV4ICs9IHJlaW50ZXJwcmV0X2Nhc3Q8c3RkOjpzaXplX3Q+KCpfX2l0KTsKKyAgICAgIHJldHVybiBfX2luZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKSAoX19zdGFja190IF9fc3RhY2sxLCBfX3N0YWNrX3QgX19zdGFjazIpIGNvbnN0CisgICAgeworICAgICAgaWYgKCFfX3N0YWNrMSAmJiAhX19zdGFjazIpCisJcmV0dXJuIHRydWU7CisgICAgICBpZiAoIV9fc3RhY2sxIHx8ICFfX3N0YWNrMikKKwlyZXR1cm4gZmFsc2U7CisgICAgICBpZiAoX19zdGFjazEtPnNpemUoKSAhPSBfX3N0YWNrMi0+c2l6ZSgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgc3RkOjpzaXplX3QgX19ieXRlX3NpemUKKwk9IF9fc3RhY2sxLT5zaXplKCkgKiBzaXplb2YoX19zdGFja19ucHQ6OnZhbHVlX3R5cGUpOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9tZW1jbXAoJigqX19zdGFjazEpWzBdLCAmKCpfX3N0YWNrMilbMF0sCisJCQkgICAgICBfX2J5dGVfc2l6ZSkgPT0gMDsKKyAgICB9CisgIH07CisKKworICAvKiogQGJyaWVmIEJhc2UgY2xhc3MgZm9yIGEgbGluZSBpbiB0aGUgb2JqZWN0IHRhYmxlLiAgKi8KKyAgY2xhc3MgX19vYmplY3RfaW5mb19iYXNlCisgIHsKKyAgcHVibGljOgorICAgIF9fb2JqZWN0X2luZm9fYmFzZSgpIHsgfQorCisgICAgX19vYmplY3RfaW5mb19iYXNlKF9fc3RhY2tfdCBfX3N0YWNrKQorICAgIDogX01fc3RhY2soX19zdGFjayksIF9NX3ZhbGlkKHRydWUpIHsgfQorCisgICAgX19vYmplY3RfaW5mb19iYXNlKGNvbnN0IF9fb2JqZWN0X2luZm9fYmFzZSYgX19vKQorICAgIDogX01fc3RhY2soX19vLl9NX3N0YWNrKSwgX01fdmFsaWQoX19vLl9NX3ZhbGlkKSB7IH0KKworICAgIHZpcnR1YWwgfl9fb2JqZWN0X2luZm9fYmFzZSgpIHsgfQorCisgICAgYm9vbAorICAgIF9faXNfdmFsaWQoKSBjb25zdCAKKyAgICB7IHJldHVybiBfTV92YWxpZDsgfQorICAgIAorICAgIF9fc3RhY2tfdAorICAgIF9fc3RhY2soKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX3N0YWNrOyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIF9fd3JpdGUoRklMRSogX19mKSBjb25zdCA9IDA7CisKKyAgcHJvdGVjdGVkOgorICAgIF9fc3RhY2tfdCBfTV9zdGFjazsKKyAgICBib29sIF9NX3ZhbGlkOworICB9OworCisKKyAgLyoqIEBicmllZiBCYXNlIGNsYXNzIGZvciBhIGxpbmUgaW4gdGhlIHN0YWNrIHRhYmxlLiAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX19vYmplY3RfaW5mbz4KKyAgICBjbGFzcyBfX3N0YWNrX2luZm9fYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICBfX3N0YWNrX2luZm9fYmFzZSgpIHsgfQorICAgICAgX19zdGFja19pbmZvX2Jhc2UoY29uc3QgX19vYmplY3RfaW5mbyYgX19pbmZvKSA9IDA7CisgICAgICB2aXJ0dWFsIH5fX3N0YWNrX2luZm9fYmFzZSgpIHt9CisgICAgICB2b2lkIF9fbWVyZ2UoY29uc3QgX19vYmplY3RfaW5mbyYgX19pbmZvKSA9IDA7CisgICAgICB2aXJ0dWFsIGZsb2F0IF9fbWFnbml0dWRlKCkgY29uc3QgPSAwOworICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBfX2dldF9pZCgpIGNvbnN0ID0gMDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisjZW5kaWYgLyogX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9OT0RFX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3N0YXRlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Mzk3MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3N0YXRlLmgKKyAqICBAYnJpZWYgR2xvYmFsIHByb2ZpbGVyIHN0YXRlLgorICovCisKKy8vIFdyaXR0ZW4gYnkgTGl4aWEgTGl1IGFuZCBTaWx2aXVzIFJ1cy4KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX1NUQVRFX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9TVEFURV9IIDEKKworbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKK3sKKyAgZW51bSBfX3N0YXRlX3R5cGUgeyBfX09OLCBfX09GRiwgX19JTlZBTElEIH07CisKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX3N0YXRlX3R5cGUsIF9fc3RhdGUsIF9fSU5WQUxJRCk7CisKKyAgaW5saW5lIGJvb2wKKyAgX190dXJuKF9fc3RhdGVfdHlwZSBfX3MpCisgIHsgCisgICAgX19zdGF0ZV90eXBlIGludihfX0lOVkFMSUQpOworICAgIHJldHVybiBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJl9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3N0YXRlKSwKKwkJCQkgICAgICAgJmludiwgX19zLCBmYWxzZSwgX19BVE9NSUNfQUNRX1JFTCwgCisJCQkJICAgICAgIF9fQVRPTUlDX1JFTEFYRUQpOworICB9CisKKyAgaW5saW5lIGJvb2wKKyAgX190dXJuX29uKCkKKyAgeyByZXR1cm4gX190dXJuKF9fT04pOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgX190dXJuX29mZigpCisgIHsgcmV0dXJuIF9fdHVybihfX09GRik7IH0KKworICBpbmxpbmUgYm9vbAorICBfX2lzX29uKCkKKyAgeyByZXR1cm4gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fc3RhdGUpID09IF9fT047IH0KKworICBpbmxpbmUgYm9vbAorICBfX2lzX29mZigpCisgIHsgcmV0dXJuIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3N0YXRlKSA9PSBfX09GRjsgfQorCisgIGlubGluZSBib29sCisgIF9faXNfaW52YWxpZCgpCisgIHsgcmV0dXJuIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3N0YXRlKSA9PSBfX0lOVkFMSUQ7IH0KKworfSAvLyBlbmQgbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX1NUQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OTA3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oCkBAIC0wLDAgKzEsNjU5IEBACisvLyAtKi0gQysrIC0qLQorLy8KKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvaW1wbC9wcm9maWxlcl90cmFjZS5oCisgKiAgQGJyaWVmIERhdGEgc3RydWN0dXJlcyB0byByZXByZXNlbnQgcHJvZmlsaW5nIHRyYWNlcy4KKyAqLworCisvLyBXcml0dGVuIGJ5IExpeGlhIExpdSBhbmQgU2lsdml1cyBSdXMuCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9UUkFDRV9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfVFJBQ0VfSCAxCisKKyNpbmNsdWRlIDxjc3RkaW8+ICAvLyBmb3BlbiwgZmNsb3NlLCBmcHJpbnRmLCBGSUxFCisjaW5jbHVkZSA8Y2Vycm5vPgorI2luY2x1ZGUgPGNzdGRsaWI+IC8vIGF0b2YsIGF0b2ksIHN0cnRvbCwgZ2V0ZW52LCBhdGV4aXQsIGFib3J0CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjZGVmaW5lIF9HTElCQ1hYX0lNUExfVU5PUkRFUkVEX01BUCBzdGQ6Ol9HTElCQ1hYX1NURF9DOjp1bm9yZGVyZWRfbWFwCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNlbHNlCisjaW5jbHVkZSA8dHIxL3Vub3JkZXJlZF9tYXA+CisjZGVmaW5lIF9HTElCQ1hYX0lNUExfVU5PUkRFUkVEX01BUCBzdGQ6OnRyMTo6dW5vcmRlcmVkX21hcAorI2VuZGlmCisKKyNpbmNsdWRlIDxleHQvY29uY3VycmVuY2UuaD4KKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9hbGdvcy5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9zdGF0ZS5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisgIC8qKiBAYnJpZWYgSW50ZXJuYWwgZW52aXJvbm1lbnQuICBWYWx1ZXMgY2FuIGJlIHNldCBvbmUgb2YgdHdvIHdheXM6CisgICAgICAxLiBJbiBjb25maWcgZmlsZSAidmFyID0gdmFsdWUiLiAgVGhlIGRlZmF1bHQgY29uZmlnIGZpbGUgcGF0aCBpcyAKKyAgICAgICAgIGxpYnN0ZGN4eC1wcm9maWxlLmNvbmYuCisgICAgICAyLiBCeSBzZXR0aW5nIHByb2Nlc3MgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgRm9yIGluc3RhbmNlLCBpbiBhIEJhc2gKKyAgICAgICAgIHNoZWxsIHlvdSBjYW4gc2V0IHRoZSB1bml0IGNvc3Qgb2YgaXRlcmF0aW5nIHRocm91Z2ggYSBtYXAgbGlrZSB0aGlzOgorICAgICAgICAgZXhwb3J0IF9fbWFwX2l0ZXJhdGVfY29zdF9mYWN0b3I9NS4wLgorCSBJZiBhIHZhbHVlIGlzIHNldCBib3RoIGluIHRoZSBpbnB1dCBmaWxlIGFuZCB0aHJvdWdoIGFuIGVudmlyb25tZW50CisJIHZhcmlhYmxlLCB0aGUgZW52aXJvbm1lbnQgdmFsdWUgdGFrZXMgcHJlY2VkZW5jZS4gICovCisgIHR5cGVkZWYgX0dMSUJDWFhfSU1QTF9VTk9SREVSRURfTUFQPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gX19lbnZfdDsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9VTklOSVRfREFUQShfX2Vudl90LCBfX2Vudik7CisKKyAgLyoqIEBicmllZiBNYXN0ZXIgbG9jay4gICovCisgIF9HTElCQ1hYX1BST0ZJTEVfREVGSU5FX1VOSU5JVF9EQVRBKF9fZ251X2N4eDo6X19tdXRleCwgX19nbG9iYWxfbG9jayk7CisKKyAgLyoqIEBicmllZiBSZXByZXNlbnRhdGlvbiBvZiBhIHdhcm5pbmcuICAqLworICBzdHJ1Y3QgX193YXJuaW5nX2RhdGEKKyAgeworICAgIGZsb2F0IF9fbWFnbml0dWRlOworICAgIF9fc3RhY2tfdCBfX2NvbnRleHQ7CisgICAgY29uc3QgY2hhciogX193YXJuaW5nX2lkOworICAgIHN0ZDo6c3RyaW5nIF9fd2FybmluZ19tZXNzYWdlOworCisgICAgX193YXJuaW5nX2RhdGEoKQorICAgIDogX19tYWduaXR1ZGUoMC4wKSwgX19jb250ZXh0KDApLCBfX3dhcm5pbmdfaWQoMCkgeyB9CisKKyAgICBfX3dhcm5pbmdfZGF0YShmbG9hdCBfX20sIF9fc3RhY2tfdCBfX2MsIGNvbnN0IGNoYXIqIF9faWQsIAorCQkgICBjb25zdCBzdGQ6OnN0cmluZyYgX19tc2cpCisgICAgOiBfX21hZ25pdHVkZShfX20pLCBfX2NvbnRleHQoX19jKSwgX193YXJuaW5nX2lkKF9faWQpLCAKKyAgICAgIF9fd2FybmluZ19tZXNzYWdlKF9fbXNnKSB7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX193YXJuaW5nX2RhdGEmIF9fb3RoZXIpIGNvbnN0CisgICAgeyByZXR1cm4gX19tYWduaXR1ZGUgPCBfX290aGVyLl9fbWFnbml0dWRlOyB9CisgIH07CisKKyAgdHlwZWRlZiBzdGQ6Ol9HTElCQ1hYX1NURF9DOjp2ZWN0b3I8X193YXJuaW5nX2RhdGE+IF9fd2FybmluZ192ZWN0b3JfdDsKKworICAvLyBEZWZpbmVkIGluIHByb2ZpbGVyXzxkaWFnbm9zdGljIG5hbWU+LmguCisgIGNsYXNzIF9fdHJhY2VfaGFzaF9mdW5jOworICBjbGFzcyBfX3RyYWNlX2hhc2h0YWJsZV9zaXplOworICBjbGFzcyBfX3RyYWNlX21hcDJ1bWFwOworICBjbGFzcyBfX3RyYWNlX3ZlY3Rvcl9zaXplOworICBjbGFzcyBfX3RyYWNlX3ZlY3Rvcl90b19saXN0OworICBjbGFzcyBfX3RyYWNlX2xpc3RfdG9fc2xpc3Q7IAorICBjbGFzcyBfX3RyYWNlX2xpc3RfdG9fdmVjdG9yOyAKKyAgdm9pZCBfX3RyYWNlX3ZlY3Rvcl9zaXplX2luaXQoKTsKKyAgdm9pZCBfX3RyYWNlX2hhc2h0YWJsZV9zaXplX2luaXQoKTsKKyAgdm9pZCBfX3RyYWNlX2hhc2hfZnVuY19pbml0KCk7CisgIHZvaWQgX190cmFjZV92ZWN0b3JfdG9fbGlzdF9pbml0KCk7CisgIHZvaWQgX190cmFjZV9saXN0X3RvX3NsaXN0X2luaXQoKTsgIAorICB2b2lkIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfaW5pdCgpOyAgCisgIHZvaWQgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbml0KCk7CisgIHZvaWQgX190cmFjZV92ZWN0b3Jfc2l6ZV9yZXBvcnQoRklMRSosIF9fd2FybmluZ192ZWN0b3JfdCYpOworICB2b2lkIF9fdHJhY2VfaGFzaHRhYmxlX3NpemVfcmVwb3J0KEZJTEUqLCBfX3dhcm5pbmdfdmVjdG9yX3QmKTsKKyAgdm9pZCBfX3RyYWNlX2hhc2hfZnVuY19yZXBvcnQoRklMRSosIF9fd2FybmluZ192ZWN0b3JfdCYpOworICB2b2lkIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfcmVwb3J0KEZJTEUqLCBfX3dhcm5pbmdfdmVjdG9yX3QmKTsKKyAgdm9pZCBfX3RyYWNlX2xpc3RfdG9fc2xpc3RfcmVwb3J0KEZJTEUqLCBfX3dhcm5pbmdfdmVjdG9yX3QmKTsgCisgIHZvaWQgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9yZXBvcnQoRklMRSosIF9fd2FybmluZ192ZWN0b3JfdCYpOworICB2b2lkIF9fdHJhY2VfbWFwX3RvX3Vub3JkZXJlZF9tYXBfcmVwb3J0KEZJTEUqLCBfX3dhcm5pbmdfdmVjdG9yX3QmKTsKKworICBzdHJ1Y3QgX19jb3N0X2ZhY3RvcgorICB7CisgICAgY29uc3QgY2hhciogX19lbnZfdmFyOworICAgIGZsb2F0IF9fdmFsdWU7CisgIH07CisKKyAgdHlwZWRlZiBzdGQ6Ol9HTElCQ1hYX1NURF9DOjp2ZWN0b3I8X19jb3N0X2ZhY3Rvcio+IF9fY29zdF9mYWN0b3JfdmVjdG9yOworCisgIF9HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX190cmFjZV9oYXNoX2Z1bmMqLCBfU19oYXNoX2Z1bmMsIDApOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fdHJhY2VfaGFzaHRhYmxlX3NpemUqLCBfU19oYXNodGFibGVfc2l6ZSwgMCk7CisgIF9HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX190cmFjZV9tYXAydW1hcCosIF9TX21hcDJ1bWFwLCAwKTsKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX3RyYWNlX3ZlY3Rvcl9zaXplKiwgX1NfdmVjdG9yX3NpemUsIDApOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fdHJhY2VfdmVjdG9yX3RvX2xpc3QqLCBfU192ZWN0b3JfdG9fbGlzdCwgMCk7CisgIF9HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX190cmFjZV9saXN0X3RvX3NsaXN0KiwgX1NfbGlzdF90b19zbGlzdCwgMCk7IAorICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fdHJhY2VfbGlzdF90b192ZWN0b3IqLCBfU19saXN0X3RvX3ZlY3RvciwgMCk7CisKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX3ZlY3Rvcl9zaGlmdF9jb3N0X2ZhY3RvciwgCisJCQkgICAgICAgeyJfX3ZlY3Rvcl9zaGlmdF9jb3N0X2ZhY3RvciIsIDEuMH0pOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fdmVjdG9yX2l0ZXJhdGVfY29zdF9mYWN0b3IsCisJCQkgICAgICAgeyJfX3ZlY3Rvcl9pdGVyYXRlX2Nvc3RfZmFjdG9yIiwgMS4wfSk7CisgIF9HTElCQ1hYX1BST0ZJTEVfREVGSU5FX0RBVEEoX19jb3N0X2ZhY3RvciwgX192ZWN0b3JfcmVzaXplX2Nvc3RfZmFjdG9yLAorCQkJICAgICAgIHsiX192ZWN0b3JfcmVzaXplX2Nvc3RfZmFjdG9yIiwgMS4wfSk7IAorICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fbGlzdF9zaGlmdF9jb3N0X2ZhY3RvciwKKwkJCSAgICAgICB7Il9fbGlzdF9zaGlmdF9jb3N0X2ZhY3RvciIsIDAuMH0pOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fbGlzdF9pdGVyYXRlX2Nvc3RfZmFjdG9yLAorCQkJICAgICAgIHsiX19saXN0X2l0ZXJhdGVfY29zdF9mYWN0b3IiLCAxMC4wfSk7IAorICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fbGlzdF9yZXNpemVfY29zdF9mYWN0b3IsCisJCQkgICAgICAgeyJfX2xpc3RfcmVzaXplX2Nvc3RfZmFjdG9yIiwgMC4wfSk7IAorICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fbWFwX2luc2VydF9jb3N0X2ZhY3RvciwKKwkJCSAgICAgICB7Il9fbWFwX2luc2VydF9jb3N0X2ZhY3RvciIsIDEuNX0pOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fbWFwX2VyYXNlX2Nvc3RfZmFjdG9yLAorCQkJICAgICAgIHsiX19tYXBfZXJhc2VfY29zdF9mYWN0b3IiLCAxLjV9KTsKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX21hcF9maW5kX2Nvc3RfZmFjdG9yLAorCQkJICAgICAgIHsiX19tYXBfZmluZF9jb3N0X2ZhY3RvciIsIDF9KTsKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX21hcF9pdGVyYXRlX2Nvc3RfZmFjdG9yLAorCQkJICAgICAgIHsiX19tYXBfaXRlcmF0ZV9jb3N0X2ZhY3RvciIsIDIuM30pOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fdW1hcF9pbnNlcnRfY29zdF9mYWN0b3IsCisJCQkgICAgICAgeyJfX3VtYXBfaW5zZXJ0X2Nvc3RfZmFjdG9yIiwgMTIuMH0pOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fdW1hcF9lcmFzZV9jb3N0X2ZhY3RvciwKKwkJCSAgICAgICB7Il9fdW1hcF9lcmFzZV9jb3N0X2ZhY3RvciIsIDEyLjB9KTsKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yLCBfX3VtYXBfZmluZF9jb3N0X2ZhY3RvciwKKwkJCSAgICAgICB7Il9fdW1hcF9maW5kX2Nvc3RfZmFjdG9yIiwgMTAuMH0pOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKF9fY29zdF9mYWN0b3IsIF9fdW1hcF9pdGVyYXRlX2Nvc3RfZmFjdG9yLAorCQkJICAgICAgIHsiX191bWFwX2l0ZXJhdGVfY29zdF9mYWN0b3IiLCAxLjd9KTsKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShfX2Nvc3RfZmFjdG9yX3ZlY3RvciosIF9fY29zdF9mYWN0b3JzLCAwKTsKKworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKGNvbnN0IGNoYXIqLCBfU190cmFjZV9maWxlX25hbWUsCisJCQkgICAgICAgX0dMSUJDWFhfUFJPRklMRV9UUkFDRV9QQVRIX1JPT1QpOworICBfR0xJQkNYWF9QUk9GSUxFX0RFRklORV9EQVRBKHN0ZDo6c2l6ZV90LCBfU19tYXhfd2Fybl9jb3VudCwKKwkJCSAgICAgICBfR0xJQkNYWF9QUk9GSUxFX01BWF9XQVJOX0NPVU5UKTsKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShzdGQ6OnNpemVfdCwgX1NfbWF4X3N0YWNrX2RlcHRoLAorCQkJICAgICAgIF9HTElCQ1hYX1BST0ZJTEVfTUFYX1NUQUNLX0RFUFRIKTsKKyAgX0dMSUJDWFhfUFJPRklMRV9ERUZJTkVfREFUQShzdGQ6OnNpemVfdCwgX1NfbWF4X21lbSwKKwkJCSAgICAgICBfR0xJQkNYWF9QUk9GSUxFX01FTV9QRVJfRElBR05PU1RJQyk7CisKKyAgaW5saW5lIHN0ZDo6c2l6ZV90CisgIF9fc3RhY2tfbWF4X2RlcHRoKCkKKyAgeyByZXR1cm4gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21heF9zdGFja19kZXB0aCk7IH0KKworICBpbmxpbmUgc3RkOjpzaXplX3QKKyAgX19tYXhfbWVtKCkKKyAgeyByZXR1cm4gX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21heF9tZW0pOyB9CisKKyAgLyoqIEBicmllZiBCYXNlIGNsYXNzIGZvciBhbGwgdHJhY2UgcHJvZHVjZXJzLiAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX19vYmplY3RfaW5mbywgdHlwZW5hbWUgX19zdGFja19pbmZvPgorICAgIGNsYXNzIF9fdHJhY2VfYmFzZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBEbyBub3QgcGljayB0aGUgaW5pdGlhbCBzaXplIHRvbyBsYXJnZSwgYXMgd2UgZG9uJ3Qga25vdyB3aGljaAorICAgICAgLy8gZGlhZ25vc3RpY3MgYXJlIG1vcmUgYWN0aXZlLgorICAgICAgX190cmFjZV9iYXNlKCkKKyAgICAgIDogX19vYmplY3RfdGFibGUoMTAwMDApLCBfX3N0YWNrX3RhYmxlKDEwMDAwKSwKKwlfX3N0YWNrX3RhYmxlX2J5dGVfc2l6ZSgwKSwgX19pZCgwKSB7IH0KKworICAgICAgdmlydHVhbCB+X190cmFjZV9iYXNlKCkgeyB9CisKKyAgICAgIHZvaWQgX19hZGRfb2JqZWN0KF9fb2JqZWN0X3Qgb2JqZWN0LCBfX29iamVjdF9pbmZvIF9faW5mbyk7CisgICAgICBfX29iamVjdF9pbmZvKiBfX2dldF9vYmplY3RfaW5mbyhfX29iamVjdF90IF9fb2JqZWN0KTsKKyAgICAgIHZvaWQgX19yZXRpcmVfb2JqZWN0KF9fb2JqZWN0X3QgX19vYmplY3QpOworICAgICAgdm9pZCBfX3dyaXRlKEZJTEUqIF9fZik7CisgICAgICB2b2lkIF9fY29sbGVjdF93YXJuaW5ncyhfX3dhcm5pbmdfdmVjdG9yX3QmIF9fd2FybmluZ3MpOworCisgICAgcHJpdmF0ZToKKyAgICAgIF9fZ251X2N4eDo6X19tdXRleCBfX29iamVjdF90YWJsZV9sb2NrOworICAgICAgX19nbnVfY3h4OjpfX211dGV4IF9fc3RhY2tfdGFibGVfbG9jazsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfSU1QTF9VTk9SREVSRURfTUFQPF9fb2JqZWN0X3QsIAorCQkJCQkgIF9fb2JqZWN0X2luZm8+IF9fb2JqZWN0X3RhYmxlX3Q7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX0lNUExfVU5PUkRFUkVEX01BUDxfX3N0YWNrX3QsIF9fc3RhY2tfaW5mbywKKwkJCQkJICBfX3N0YWNrX2hhc2gsIAorCQkJCQkgIF9fc3RhY2tfaGFzaD4gX19zdGFja190YWJsZV90OworICAgICAgX19vYmplY3RfdGFibGVfdCBfX29iamVjdF90YWJsZTsKKyAgICAgIF9fc3RhY2tfdGFibGVfdCBfX3N0YWNrX3RhYmxlOworICAgICAgc3RkOjpzaXplX3QgX19zdGFja190YWJsZV9ieXRlX3NpemU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBjb25zdCBjaGFyKiBfX2lkOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX19vYmplY3RfaW5mbywgdHlwZW5hbWUgX19zdGFja19pbmZvPgorICAgIHZvaWQKKyAgICBfX3RyYWNlX2Jhc2U8X19vYmplY3RfaW5mbywgX19zdGFja19pbmZvPjo6CisgICAgX19jb2xsZWN0X3dhcm5pbmdzKF9fd2FybmluZ192ZWN0b3JfdCYgX193YXJuaW5ncykKKyAgICB7CisgICAgICBmb3IgKHR5cGVuYW1lIF9fc3RhY2tfdGFibGVfdDo6aXRlcmF0b3IgX19pdAorCSAgICAgPSBfX3N0YWNrX3RhYmxlLmJlZ2luKCk7IF9faXQgIT0gX19zdGFja190YWJsZS5lbmQoKTsgKytfX2l0KQorCV9fd2FybmluZ3MucHVzaF9iYWNrKF9fd2FybmluZ19kYXRhKCgqX19pdCkuc2Vjb25kLl9fbWFnbml0dWRlKCksCisJCQkJCSAgICAoKl9faXQpLmZpcnN0LCBfX2lkLAorCQkJCQkgICAgKCpfX2l0KS5zZWNvbmQuX19hZHZpY2UoKSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfX29iamVjdF9pbmZvLCB0eXBlbmFtZSBfX3N0YWNrX2luZm8+CisgICAgdm9pZAorICAgIF9fdHJhY2VfYmFzZTxfX29iamVjdF9pbmZvLCBfX3N0YWNrX2luZm8+OjoKKyAgICBfX2FkZF9vYmplY3QoX19vYmplY3RfdCBfX29iamVjdCwgX19vYmplY3RfaW5mbyBfX2luZm8pCisgICAgeworICAgICAgaWYgKF9fbWF4X21lbSgpID09IDAgCisJICB8fCBfX29iamVjdF90YWJsZS5zaXplKCkgKiBzaXplb2YoX19vYmplY3RfaW5mbykgPD0gX19tYXhfbWVtKCkpCisJeworCSAgdGhpcy0+X19vYmplY3RfdGFibGVfbG9jay5sb2NrKCk7CisJICBfX29iamVjdF90YWJsZS5pbnNlcnQodHlwZW5hbWUgX19vYmplY3RfdGFibGVfdDo6CisJCQkJdmFsdWVfdHlwZShfX29iamVjdCwgX19pbmZvKSk7CisJICB0aGlzLT5fX29iamVjdF90YWJsZV9sb2NrLnVubG9jaygpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX19vYmplY3RfaW5mbywgdHlwZW5hbWUgX19zdGFja19pbmZvPgorICAgIF9fb2JqZWN0X2luZm8qCisgICAgX190cmFjZV9iYXNlPF9fb2JqZWN0X2luZm8sIF9fc3RhY2tfaW5mbz46OgorICAgIF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqZWN0X3QgX19vYmplY3QpCisgICAgeworICAgICAgLy8gWFhYOiBSZXZpc2l0IHRoaXMgdG8gc2VlIGlmIHdlIGNhbiBkZWNyZWFzZSBtdXRleCBzcGFucy4KKyAgICAgIC8vIFdpdGhvdXQgdGhpcyBtdXRleCwgdGhlIG9iamVjdCB0YWJsZSBjb3VsZCBiZSByZWhhc2hlZCBkdXJpbmcgYW4KKyAgICAgIC8vIGluc2VydGlvbiBvbiBhbm90aGVyIHRocmVhZCwgd2hpY2ggY291bGQgcmVzdWx0IGluIGEgc2VnZmF1bHQuCisgICAgICB0aGlzLT5fX29iamVjdF90YWJsZV9sb2NrLmxvY2soKTsKKyAgICAgIHR5cGVuYW1lIF9fb2JqZWN0X3RhYmxlX3Q6Oml0ZXJhdG9yIF9fb2JqZWN0X2l0CisJPSAgX19vYmplY3RfdGFibGUuZmluZChfX29iamVjdCk7CisKKyAgICAgIGlmIChfX29iamVjdF9pdCA9PSBfX29iamVjdF90YWJsZS5lbmQoKSkKKwl7CisJICB0aGlzLT5fX29iamVjdF90YWJsZV9sb2NrLnVubG9jaygpOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHRoaXMtPl9fb2JqZWN0X3RhYmxlX2xvY2sudW5sb2NrKCk7CisJICByZXR1cm4gJl9fb2JqZWN0X2l0LT5zZWNvbmQ7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfX29iamVjdF9pbmZvLCB0eXBlbmFtZSBfX3N0YWNrX2luZm8+CisgICAgdm9pZAorICAgIF9fdHJhY2VfYmFzZTxfX29iamVjdF9pbmZvLCBfX3N0YWNrX2luZm8+OjoKKyAgICBfX3JldGlyZV9vYmplY3QoX19vYmplY3RfdCBfX29iamVjdCkKKyAgICB7CisgICAgICB0aGlzLT5fX29iamVjdF90YWJsZV9sb2NrLmxvY2soKTsKKyAgICAgIHRoaXMtPl9fc3RhY2tfdGFibGVfbG9jay5sb2NrKCk7CisgICAgICB0eXBlbmFtZSBfX29iamVjdF90YWJsZV90OjppdGVyYXRvciBfX29iamVjdF9pdAorCT0gX19vYmplY3RfdGFibGUuZmluZChfX29iamVjdCk7CisgIAorICAgICAgaWYgKF9fb2JqZWN0X2l0ICE9IF9fb2JqZWN0X3RhYmxlLmVuZCgpKQorCXsKKwkgIGNvbnN0IF9fb2JqZWN0X2luZm8mIF9faW5mbyA9IF9fb2JqZWN0X2l0LT5zZWNvbmQ7CisJICBjb25zdCBfX3N0YWNrX3QmIF9fc3RhY2sgPSBfX2luZm8uX19zdGFjaygpOworCSAgdHlwZW5hbWUgX19zdGFja190YWJsZV90OjppdGVyYXRvciBfX3N0YWNrX2l0CisJICAgID0gX19zdGFja190YWJsZS5maW5kKF9fc3RhY2spOworICAgIAorCSAgaWYgKF9fc3RhY2tfaXQgPT0gX19zdGFja190YWJsZS5lbmQoKSkKKwkgICAgeworCSAgICAgIC8vIEZpcnN0IG9jY3VyZW5jZSBvZiB0aGlzIGNhbGwgY29udGV4dC4KKwkgICAgICBpZiAoX19tYXhfbWVtKCkgPT0gMCB8fCBfX3N0YWNrX3RhYmxlX2J5dGVfc2l6ZSA8IF9fbWF4X21lbSgpKSAKKwkJeworCQkgIF9fc3RhY2tfdGFibGVfYnl0ZV9zaXplIAorCQkgICAgKz0gKHNpemVvZihfX2luc3RydWN0aW9uX2FkZHJlc3NfdCkgKiBfX3NpemUoX19zdGFjaykKKwkJCSsgc2l6ZW9mKF9fc3RhY2spICsgc2l6ZW9mKF9fc3RhY2tfaW5mbykpOworCQkgIF9fc3RhY2tfdGFibGUuaW5zZXJ0KG1ha2VfcGFpcihfX3N0YWNrLAorCQkJCQkJIF9fc3RhY2tfaW5mbyhfX2luZm8pKSk7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gTWVyZ2Ugb2JqZWN0IGluZm8gaW50byBpbmZvIHN1bW1hcnkgZm9yIHRoaXMgY2FsbCBjb250ZXh0LgorCSAgICAgIF9fc3RhY2tfaXQtPnNlY29uZC5fX21lcmdlKF9faW5mbyk7CisJICAgICAgZGVsZXRlIF9fc3RhY2s7CisJICAgIH0KKwkgIF9fb2JqZWN0X3RhYmxlLmVyYXNlKF9fb2JqZWN0KTsKKwl9CisKKyAgICAgIHRoaXMtPl9fb2JqZWN0X3RhYmxlX2xvY2sudW5sb2NrKCk7CisgICAgICB0aGlzLT5fX3N0YWNrX3RhYmxlX2xvY2sudW5sb2NrKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9fb2JqZWN0X2luZm8sIHR5cGVuYW1lIF9fc3RhY2tfaW5mbz4KKyAgICB2b2lkCisgICAgX190cmFjZV9iYXNlPF9fb2JqZWN0X2luZm8sIF9fc3RhY2tfaW5mbz46OgorICAgIF9fd3JpdGUoRklMRSogX19mKQorICAgIHsKKyAgICAgIGZvciAodHlwZW5hbWUgX19zdGFja190YWJsZV90OjppdGVyYXRvciBfX2l0CisJICAgICA9IF9fc3RhY2tfdGFibGUuYmVnaW4oKTsgX19pdCAhPSBfX3N0YWNrX3RhYmxlLmVuZCgpOyArK19faXQpCisJaWYgKF9faXQtPnNlY29uZC5fX2lzX3ZhbGlkKCkpCisJICB7CisJICAgIHN0ZDo6ZnByaW50ZihfX2YsIF9faWQpOworCSAgICBzdGQ6OmZwcmludGYoX19mLCAifCIpOworCSAgICBfX2dudV9wcm9maWxlOjpfX3dyaXRlKF9fZiwgX19pdC0+Zmlyc3QpOworCSAgICBzdGQ6OmZwcmludGYoX19mLCAifCIpOworCSAgICBfX2l0LT5zZWNvbmQuX193cml0ZShfX2YpOworCSAgfQorICAgIH0KKworICBpbmxpbmUgc3RkOjpzaXplX3QKKyAgX19lbnZfdG9fc2l6ZV90KGNvbnN0IGNoYXIqIF9fZW52X3Zhciwgc3RkOjpzaXplX3QgX19kZWZhdWx0X3ZhbHVlKQorICB7CisgICAgY2hhciogX19lbnZfdmFsdWUgPSBzdGQ6OmdldGVudihfX2Vudl92YXIpOworICAgIGlmIChfX2Vudl92YWx1ZSkKKyAgICAgIHsKKwllcnJubyA9IDA7CisJbG9uZyBfX2NvbnZlcnRlZF92YWx1ZSA9IHN0ZDo6c3RydG9sKF9fZW52X3ZhbHVlLCAwLCAxMCk7CisJaWYgKGVycm5vIHx8IF9fY29udmVydGVkX3ZhbHVlIDwgMCkKKwkgIHsKKwkgICAgc3RkOjpmcHJpbnRmKHN0ZGVyciwKKwkJCSAiQmFkIHZhbHVlIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJXMnLlxuIiwKKwkJCSBfX2Vudl92YXIpOworCSAgICBzdGQ6OmFib3J0KCk7CisJICB9CisJZWxzZQorCSAgcmV0dXJuIHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihfX2NvbnZlcnRlZF92YWx1ZSk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIF9fZGVmYXVsdF92YWx1ZTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fc2V0X21heF9zdGFja190cmFjZV9kZXB0aCgpCisgIHsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWF4X3N0YWNrX2RlcHRoKQorICAgICAgPSBfX2Vudl90b19zaXplX3QoX0dMSUJDWFhfUFJPRklMRV9NQVhfU1RBQ0tfREVQVEhfRU5WX1ZBUiwKKwkJCV9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXhfc3RhY2tfZGVwdGgpKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fc2V0X21heF9tZW0oKQorICB7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX21heF9tZW0pIAorICAgICAgPSBfX2Vudl90b19zaXplX3QoX0dMSUJDWFhfUFJPRklMRV9NRU1fUEVSX0RJQUdOT1NUSUNfRU5WX1ZBUiwKKwkJCV9HTElCQ1hYX1BST0ZJTEVfREFUQShfU19tYXhfbWVtKSk7CisgIH0KKworICBpbmxpbmUgaW50CisgIF9fbG9nX21hZ25pdHVkZShmbG9hdCBfX2YpCisgIHsKKyAgICBjb25zdCBmbG9hdCBfX2xvZ19iYXNlID0gMTAuMDsKKyAgICBpbnQgX19yZXN1bHQgPSAwOworICAgIGludCBfX3NpZ24gPSAxOworCisgICAgaWYgKF9fZiA8IDApIAorICAgICAgeworCV9fZiA9IC1fX2Y7CisJX19zaWduID0gLTE7CisgICAgICB9CisKKyAgICB3aGlsZSAoX19mID4gX19sb2dfYmFzZSkgCisgICAgICB7CisJKytfX3Jlc3VsdDsKKwlfX2YgLz0gMTAuMDsKKyAgICAgIH0KKyAgICByZXR1cm4gX19zaWduICogX19yZXN1bHQ7CisgIH0KKworICBpbmxpbmUgRklMRSogCisgIF9fb3Blbl9vdXRwdXRfZmlsZShjb25zdCBjaGFyKiBfX2V4dGVuc2lvbikKKyAgeworICAgIC8vIFRoZSBwYXRoIGlzIG1hZGUgb2YgX1NfdHJhY2VfZmlsZV9uYW1lICsgIi4iICsgZXh0ZW5zaW9uLgorICAgIHN0ZDo6c2l6ZV90IF9fcm9vdF9sZW4gCisgICAgICA9IF9fYnVpbHRpbl9zdHJsZW4oX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3RyYWNlX2ZpbGVfbmFtZSkpOworICAgIHN0ZDo6c2l6ZV90IF9fZXh0X2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19leHRlbnNpb24pOworICAgIGNoYXIqIF9fZmlsZV9uYW1lID0gbmV3IGNoYXJbX19yb290X2xlbiArIDEgKyBfX2V4dF9sZW4gKyAxXTsKKyAgICBfX2J1aWx0aW5fbWVtY3B5KF9fZmlsZV9uYW1lLAorCQkgICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU190cmFjZV9maWxlX25hbWUpLAorCQkgICAgIF9fcm9vdF9sZW4pOworICAgICooX19maWxlX25hbWUgKyBfX3Jvb3RfbGVuKSA9ICcuJzsKKyAgICBfX2J1aWx0aW5fbWVtY3B5KF9fZmlsZV9uYW1lICsgX19yb290X2xlbiArIDEsCisJCSAgICAgX19leHRlbnNpb24sIF9fZXh0X2xlbiArIDEpOworCisgICAgRklMRSogX19vdXRfZmlsZSA9IHN0ZDo6Zm9wZW4oX19maWxlX25hbWUsICJ3Iik7CisgICAgaWYgKCFfX291dF9maWxlKQorICAgICAgeworCXN0ZDo6ZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiB0cmFjZSBmaWxlICclcycuXG4iLAorCQkgICAgIF9fZmlsZV9uYW1lKTsKKwlzdGQ6OmFib3J0KCk7CisgICAgICB9CisKKyAgICBkZWxldGVbXSBfX2ZpbGVfbmFtZTsKKyAgICByZXR1cm4gX19vdXRfZmlsZTsKKyAgfQorCisgIHN0cnVjdCBfX3dhcm4KKyAgeworICAgIEZJTEUqIF9fZmlsZTsKKworICAgIF9fd2FybihGSUxFKiBfX2YpCisgICAgeyBfX2ZpbGUgPSBfX2Y7IH0KKworICAgIHZvaWQKKyAgICBvcGVyYXRvcigpKGNvbnN0IF9fd2FybmluZ19kYXRhJiBfX2luZm8pCisgICAgeworICAgICAgc3RkOjpmcHJpbnRmKF9fZmlsZSwgIF9faW5mby5fX3dhcm5pbmdfaWQpOworICAgICAgc3RkOjpmcHJpbnRmKF9fZmlsZSwgIjogaW1wcm92ZW1lbnQgPSAlZCIsCisJCSAgIF9fbG9nX21hZ25pdHVkZShfX2luZm8uX19tYWduaXR1ZGUpKTsKKyAgICAgIHN0ZDo6ZnByaW50ZihfX2ZpbGUsICI6IGNhbGwgc3RhY2sgPSAiKTsKKyAgICAgIF9fZ251X3Byb2ZpbGU6Ol9fd3JpdGUoX19maWxlLCBfX2luZm8uX19jb250ZXh0KTsKKyAgICAgIHN0ZDo6ZnByaW50ZihfX2ZpbGUsICI6IGFkdmljZSA9ICVzXG4iLAorCQkgICBfX2luZm8uX193YXJuaW5nX21lc3NhZ2UuY19zdHIoKSk7CisgICAgfQorICB9OworCisgIC8qKiBAYnJpZWYgRmluYWwgcmVwb3J0IG1ldGhvZCwgcmVnaXN0ZXJlZCB3aXRoIEBiIGF0ZXhpdC4KKyAgICoKKyAgICogVGhpcyBjYW4gYWxzbyBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgdXNlciBjb2RlLCBpbmNsdWRpbmcgc2lnbmFsIGhhbmRsZXJzLgorICAgKiBJdCBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBkZWFkbG9ja3MgYnkgdGhlIHJlZW50cmFuY2UgZ3VhcmQgaW4gcHJvZmlsZXIuaC4KKyAgICogSG93ZXZlciwgd2hlbiBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyIHRoYXQgdHJpZ2dlcnMgd2hpbGUgd2l0aGluCisgICAqIF9fZ251X3Byb2ZpbGUgKHVuZGVyIHRoZSBndWFyZGVkIHpvbmUpLCBubyBvdXRwdXQgd2lsbCBiZSBwcm9kdWNlZC4KKyAgICovCisgIGlubGluZSB2b2lkCisgIF9fcmVwb3J0KHZvaWQpCisgIHsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19nbG9iYWxfbG9jaykubG9jaygpOworCisgICAgX193YXJuaW5nX3ZlY3Rvcl90IF9fd2FybmluZ3MsIF9fdG9wX3dhcm5pbmdzOworCisgICAgRklMRSogX19yYXdfZmlsZSA9IF9fb3Blbl9vdXRwdXRfZmlsZSgicmF3Iik7CisgICAgX190cmFjZV92ZWN0b3Jfc2l6ZV9yZXBvcnQoX19yYXdfZmlsZSwgX193YXJuaW5ncyk7CisgICAgX190cmFjZV9oYXNodGFibGVfc2l6ZV9yZXBvcnQoX19yYXdfZmlsZSwgX193YXJuaW5ncyk7CisgICAgX190cmFjZV9oYXNoX2Z1bmNfcmVwb3J0KF9fcmF3X2ZpbGUsIF9fd2FybmluZ3MpOworICAgIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfcmVwb3J0KF9fcmF3X2ZpbGUsIF9fd2FybmluZ3MpOworICAgIF9fdHJhY2VfbGlzdF90b19zbGlzdF9yZXBvcnQoX19yYXdfZmlsZSwgX193YXJuaW5ncyk7CisgICAgX190cmFjZV9saXN0X3RvX3ZlY3Rvcl9yZXBvcnQoX19yYXdfZmlsZSwgX193YXJuaW5ncyk7CisgICAgX190cmFjZV9tYXBfdG9fdW5vcmRlcmVkX21hcF9yZXBvcnQoX19yYXdfZmlsZSwgX193YXJuaW5ncyk7CisgICAgc3RkOjpmY2xvc2UoX19yYXdfZmlsZSk7CisKKyAgICAvLyBTb3J0IGRhdGEgYnkgbWFnbml0dWRlLCBrZWVwaW5nIGp1c3QgdG9wIE4uCisgICAgc3RkOjpzaXplX3QgX19jdXRvZmYgPSBzdGQ6Om1pbihfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWF4X3dhcm5fY291bnQpLAorCQkJCSAgICBfX3dhcm5pbmdzLnNpemUoKSk7CisgICAgX190b3BfbihfX3dhcm5pbmdzLCBfX3RvcF93YXJuaW5ncywgX19jdXRvZmYpOworCisgICAgRklMRSogX193YXJuX2ZpbGUgPSBfX29wZW5fb3V0cHV0X2ZpbGUoInR4dCIpOworICAgIF9fZm9yX2VhY2goX190b3Bfd2FybmluZ3MuYmVnaW4oKSwgX190b3Bfd2FybmluZ3MuZW5kKCksCisJICAgICAgIF9fd2FybihfX3dhcm5fZmlsZSkpOworICAgIHN0ZDo6ZmNsb3NlKF9fd2Fybl9maWxlKTsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2dsb2JhbF9sb2NrKS51bmxvY2soKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fc2V0X3RyYWNlX3BhdGgoKQorICB7CisgICAgY2hhciogX19lbnZfdHJhY2VfZmlsZV9uYW1lID0gc3RkOjpnZXRlbnYoX0dMSUJDWFhfUFJPRklMRV9UUkFDRV9FTlZfVkFSKTsKKworICAgIGlmIChfX2Vudl90cmFjZV9maWxlX25hbWUpCisgICAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdHJhY2VfZmlsZV9uYW1lKSA9IF9fZW52X3RyYWNlX2ZpbGVfbmFtZTsKKworICAgIC8vIE1ha2Ugc3VyZSBlYXJseSB0aGF0IHdlIGNhbiBjcmVhdGUgdGhlIHRyYWNlIGZpbGUuCisgICAgc3RkOjpmY2xvc2UoX19vcGVuX291dHB1dF9maWxlKCJ0eHQiKSk7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3NldF9tYXhfd2Fybl9jb3VudCgpCisgIHsKKyAgICBjaGFyKiBfX2Vudl9tYXhfd2Fybl9jb3VudF9zdHIKKyAgICAgID0gc3RkOjpnZXRlbnYoX0dMSUJDWFhfUFJPRklMRV9NQVhfV0FSTl9DT1VOVF9FTlZfVkFSKTsKKworICAgIGlmIChfX2Vudl9tYXhfd2Fybl9jb3VudF9zdHIpCisgICAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWF4X3dhcm5fY291bnQpCisJPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oc3RkOjphdG9pKF9fZW52X21heF93YXJuX2NvdW50X3N0cikpOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX19yZWFkX2Nvc3RfZmFjdG9ycygpCisgIHsKKyAgICBzdGQ6OnN0cmluZyBfX2NvbmZfZmlsZV9uYW1lKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU190cmFjZV9maWxlX25hbWUpKTsKKyAgICBfX2NvbmZfZmlsZV9uYW1lICs9ICIuY29uZiI7CisKKyAgICBzdGQ6Omlmc3RyZWFtIF9fY29uZl9maWxlKF9fY29uZl9maWxlX25hbWUuY19zdHIoKSk7CisKKyAgICBpZiAoX19jb25mX2ZpbGUuaXNfb3BlbigpKQorICAgICAgeworCXN0ZDo6c3RyaW5nIF9fbGluZTsKKworCXdoaWxlIChzdGQ6OmdldGxpbmUoX19jb25mX2ZpbGUsIF9fbGluZSkpCisJICB7CisJICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgX19pID0gX19saW5lLmZpbmRfZmlyc3Rfbm90X29mKCIgXHRcblx2Iik7CisKKwkgICAgaWYgKF9fbGluZS5sZW5ndGgoKSA8PSAwIHx8IF9fbGluZVtfX2ldID09ICcjJykKKwkgICAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIG9yIGNvbW1lbnRzLgorCSAgICAgIGNvbnRpbnVlOworCSAgfQorCisJLy8gVHJpbS4KKwlfX2xpbmUuZXJhc2UoX19yZW1vdmUoX19saW5lLmJlZ2luKCksIF9fbGluZS5lbmQoKSwgJyAnKSwKKwkJICAgICBfX2xpbmUuZW5kKCkpOworCXN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgX19wb3MgPSBfX2xpbmUuZmluZCgiPSIpOworCXN0ZDo6c3RyaW5nIF9fZmFjdG9yX25hbWUgPSBfX2xpbmUuc3Vic3RyKDAsIF9fcG9zKTsKKwlzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIF9fZW5kID0gX19saW5lLmZpbmRfZmlyc3Rfb2YoIjtcbiIpOworCXN0ZDo6c3RyaW5nIF9fZmFjdG9yX3ZhbHVlID0gX19saW5lLnN1YnN0cihfX3BvcyArIDEsIF9fZW5kIC0gX19wb3MpOworCisJX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fZW52KVtfX2ZhY3Rvcl9uYW1lXSA9IF9fZmFjdG9yX3ZhbHVlOworICAgICAgfQorICB9CisKKyAgc3RydWN0IF9fY29zdF9mYWN0b3Jfd3JpdGVyCisgIHsKKyAgICBGSUxFKiBfX2ZpbGU7CisKKyAgICBfX2Nvc3RfZmFjdG9yX3dyaXRlcihGSUxFKiBfX2YpCisgICAgOiBfX2ZpbGUoX19mKSB7IH0KKworICAgIHZvaWQKKyAgICBvcGVyYXRvcigpIChjb25zdCBfX2Nvc3RfZmFjdG9yKiBfX2ZhY3RvcikKKyAgICB7IHN0ZDo6ZnByaW50ZihfX2ZpbGUsICIlcyA9ICVmXG4iLCBfX2ZhY3Rvci0+X19lbnZfdmFyLAorCQkgICBfX2ZhY3Rvci0+X192YWx1ZSk7IH0KKyAgfTsKKworICBpbmxpbmUgdm9pZAorICBfX3dyaXRlX2Nvc3RfZmFjdG9ycygpCisgIHsKKyAgICBGSUxFKiBfX2ZpbGUgPSBfX29wZW5fb3V0cHV0X2ZpbGUoImNvbmYub3V0Iik7CisgICAgX19mb3JfZWFjaChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5iZWdpbigpLAorCSAgICAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5lbmQoKSwKKwkgICAgICAgX19jb3N0X2ZhY3Rvcl93cml0ZXIoX19maWxlKSk7CisgICAgc3RkOjpmY2xvc2UoX19maWxlKTsKKyAgfQorCisgIHN0cnVjdCBfX2Nvc3RfZmFjdG9yX3NldHRlcgorICB7CisgICAgdm9pZAorICAgIG9wZXJhdG9yKCkoX19jb3N0X2ZhY3RvciogX19mYWN0b3IpCisgICAgeworICAgICAgLy8gTG9vayBpdCB1cCBpbiB0aGUgcHJvY2VzcyBlbnZpcm9ubWVudCBmaXJzdC4KKyAgICAgIGNvbnN0IGNoYXIqIF9fZW52X3ZhbHVlID0gc3RkOjpnZXRlbnYoX19mYWN0b3ItPl9fZW52X3Zhcik7CisKKyAgICAgIGlmICghX19lbnZfdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBMb29rIGl0IHVwIGluIHRoZSBjb25maWcgZmlsZS4KKyAgICAgICAgICBfX2Vudl90OjppdGVyYXRvciBfX2l0IAorCSAgICA9IF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2VudikuZmluZChfX2ZhY3Rvci0+X19lbnZfdmFyKTsKKyAgICAgICAgICBpZiAoX19pdCAhPSBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19lbnYpLmVuZCgpKQorICAgICAgICAgICAgX19lbnZfdmFsdWUgPSAoKl9faXQpLnNlY29uZC5jX3N0cigpOworICAgICAgICB9CisKKyAgICAgIGlmIChfX2Vudl92YWx1ZSkKKyAgICAgICAgX19mYWN0b3ItPl9fdmFsdWUgPSBzdGQ6OmF0b2YoX19lbnZfdmFsdWUpOworICAgIH0KKyAgfTsKKworICBpbmxpbmUgdm9pZAorICBfX3NldF9jb3N0X2ZhY3RvcnMoKQorICB7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fY29zdF9mYWN0b3JzKSA9IG5ldyBfX2Nvc3RfZmFjdG9yX3ZlY3RvcjsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdmVjdG9yX3NoaWZ0X2Nvc3RfZmFjdG9yKSk7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fY29zdF9mYWN0b3JzKS0+CisgICAgICBwdXNoX2JhY2soJl9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3ZlY3Rvcl9pdGVyYXRlX2Nvc3RfZmFjdG9yKSk7CisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fY29zdF9mYWN0b3JzKS0+CisgICAgICBwdXNoX2JhY2soJl9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3ZlY3Rvcl9yZXNpemVfY29zdF9mYWN0b3IpKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9zaGlmdF9jb3N0X2ZhY3RvcikpOworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPgorICAgICAgcHVzaF9iYWNrKCZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19saXN0X2l0ZXJhdGVfY29zdF9mYWN0b3IpKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9yZXNpemVfY29zdF9mYWN0b3IpKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbWFwX2luc2VydF9jb3N0X2ZhY3RvcikpOworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPgorICAgICAgcHVzaF9iYWNrKCZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19tYXBfZXJhc2VfY29zdF9mYWN0b3IpKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbWFwX2ZpbmRfY29zdF9mYWN0b3IpKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbWFwX2l0ZXJhdGVfY29zdF9mYWN0b3IpKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdW1hcF9pbnNlcnRfY29zdF9mYWN0b3IpKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdW1hcF9lcmFzZV9jb3N0X2ZhY3RvcikpOworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2Nvc3RfZmFjdG9ycyktPgorICAgICAgcHVzaF9iYWNrKCZfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX191bWFwX2ZpbmRfY29zdF9mYWN0b3IpKTsKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT4KKyAgICAgIHB1c2hfYmFjaygmX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fdW1hcF9pdGVyYXRlX2Nvc3RfZmFjdG9yKSk7CisgICAgX19mb3JfZWFjaChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5iZWdpbigpLAorCSAgICAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19jb3N0X2ZhY3RvcnMpLT5lbmQoKSwKKwkgICAgICAgX19jb3N0X2ZhY3Rvcl9zZXR0ZXIoKSk7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3Byb2ZjeHhfaW5pdF91bmNvbmRpdGlvbmFsKCkKKyAgeworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2dsb2JhbF9sb2NrKS5sb2NrKCk7CisKKyAgICBpZiAoX19pc19pbnZhbGlkKCkpCisgICAgICB7CisJX19zZXRfbWF4X3dhcm5fY291bnQoKTsKKworCWlmIChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfbWF4X3dhcm5fY291bnQpID09IDApCisJICBfX3R1cm5fb2ZmKCk7CisJZWxzZQorCSAgeworCSAgICBfX3NldF9tYXhfc3RhY2tfdHJhY2VfZGVwdGgoKTsKKwkgICAgX19zZXRfbWF4X21lbSgpOworCSAgICBfX3NldF90cmFjZV9wYXRoKCk7CisJICAgIF9fcmVhZF9jb3N0X2ZhY3RvcnMoKTsgCisJICAgIF9fc2V0X2Nvc3RfZmFjdG9ycygpOworCSAgICBfX3dyaXRlX2Nvc3RfZmFjdG9ycygpOworCisJICAgIF9fdHJhY2VfdmVjdG9yX3NpemVfaW5pdCgpOworCSAgICBfX3RyYWNlX2hhc2h0YWJsZV9zaXplX2luaXQoKTsKKwkgICAgX190cmFjZV9oYXNoX2Z1bmNfaW5pdCgpOworCSAgICBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2luaXQoKTsKKwkgICAgX190cmFjZV9saXN0X3RvX3NsaXN0X2luaXQoKTsgCisJICAgIF9fdHJhY2VfbGlzdF90b192ZWN0b3JfaW5pdCgpOworCSAgICBfX3RyYWNlX21hcF90b191bm9yZGVyZWRfbWFwX2luaXQoKTsKKworCSAgICBzdGQ6OmF0ZXhpdChfX3JlcG9ydCk7CisKKwkgICAgX190dXJuX29uKCk7CisJICB9CisgICAgICB9CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX19nbG9iYWxfbG9jaykudW5sb2NrKCk7CisgIH0KKworICAvKiogQGJyaWVmIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYnkgZWFjaCBpbnN0cnVtZW50YXRpb24gcG9pbnQuCisgICAqCisgICAqIFRoZSBjb21tb24gcGF0aCBpcyBpbmxpbmVkIGZ1bGx5LgorICAgKi8KKyAgaW5saW5lIGJvb2wKKyAgX19wcm9mY3h4X2luaXQoKQorICB7CisgICAgaWYgKF9faXNfaW52YWxpZCgpKQorICAgICAgX19wcm9mY3h4X2luaXRfdW5jb25kaXRpb25hbCgpOworCisgICAgcmV0dXJuIF9faXNfb24oKTsKKyAgfQorCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3ZlY3Rvcl9zaXplLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl92ZWN0b3Jfc2l6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwY2I1ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaW1wbC9wcm9maWxlcl92ZWN0b3Jfc2l6ZS5oCkBAIC0wLDAgKzEsOTcgQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3ZlY3Rvcl9zaXplLmgKKyAqICBAYnJpZWYgQ29sbGVjdGlvbiBvZiB2ZWN0b3Igc2l6ZSB0cmFjZXMuCisgKi8KKworLy8gV3JpdHRlbiBieSBMaXhpYSBMaXUgYW5kIFNpbHZpdXMgUnVzLgorCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfVkVDVE9SX1NJWkVfSAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX1ZFQ1RPUl9TSVpFX0ggMQorCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX25vZGUuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfdHJhY2UuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfc3RhdGUuaCIKKyNpbmNsdWRlICJwcm9maWxlL2ltcGwvcHJvZmlsZXJfY29udGFpbmVyX3NpemUuaCIKKworbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKK3sKKyAgLyoqIEBicmllZiBIYXNodGFibGUgc2l6ZSBpbnN0cnVtZW50YXRpb24gdHJhY2UgcHJvZHVjZXIuICAqLworICBjbGFzcyBfX3RyYWNlX3ZlY3Rvcl9zaXplCisgIDogcHVibGljIF9fdHJhY2VfY29udGFpbmVyX3NpemUKKyAgeworICBwdWJsaWM6CisgICAgX190cmFjZV92ZWN0b3Jfc2l6ZSgpCisgICAgOiBfX3RyYWNlX2NvbnRhaW5lcl9zaXplKCkKKyAgICB7IF9faWQgPSAidmVjdG9yLXNpemUiOyB9CisgIH07CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV92ZWN0b3Jfc2l6ZV9pbml0KCkKKyAgeyBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdmVjdG9yX3NpemUpID0gbmV3IF9fdHJhY2VfdmVjdG9yX3NpemUoKTsgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfdmVjdG9yX3NpemVfcmVwb3J0KEZJTEUqIF9fZiwgX193YXJuaW5nX3ZlY3Rvcl90JiBfX3dhcm5pbmdzKQorICB7CisgICAgaWYgKF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3Jfc2l6ZSkpCisgICAgICB7CisJX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl9zaXplKS0+X19jb2xsZWN0X3dhcm5pbmdzKF9fd2FybmluZ3MpOworCV9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3Jfc2l6ZSktPl9fd3JpdGUoX19mKTsKKyAgICAgIH0KKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfdmVjdG9yX3NpemVfY29uc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqLCBzdGQ6OnNpemVfdCBfX251bSkKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3Jfc2l6ZSktPl9faW5zZXJ0KF9fb2JqLCBfX2dldF9zdGFjaygpLAorCQkJCQkJICAgIF9fbnVtKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfdmVjdG9yX3NpemVfZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fbnVtLAorCQkJICAgICAgIHN0ZDo6c2l6ZV90IF9faW51bSkKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3Jfc2l6ZSktPl9fZGVzdHJ1Y3QoX19vYmosIF9fbnVtLCBfX2ludW0pOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV92ZWN0b3Jfc2l6ZV9yZXNpemUoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fZnJvbSwKKwkJCSAgICAgc3RkOjpzaXplX3QgX190bykKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3Jfc2l6ZSktPl9fcmVzaXplKF9fb2JqLCBfX2Zyb20sIF9fdG8pOworICB9CisKK30gLy8gbmFtZXNwYWNlIF9fZ251X3Byb2ZpbGUKKworI2VuZGlmIC8qIF9HTElCQ1hYX1BST0ZJTEVfUFJPRklMRVJfVkVDVE9SX1NJWkVfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2ltcGwvcHJvZmlsZXJfdmVjdG9yX3RvX2xpc3QuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3ZlY3Rvcl90b19saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlMzc4YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3ZlY3Rvcl90b19saXN0LmgKQEAgLTAsMCArMSwzNDcgQEAKKy8vIC0qLSBDKysgLSotCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3ZlY3Rvcl90b19saXN0LmgKKyAqICBAYnJpZWYgZGlhZ25vc3RpY3MgZm9yIHZlY3RvciB0byBsaXN0LgorICovCisKKy8vIFdyaXR0ZW4gYnkgTGl4aWEgTGl1IGFuZCBTaWx2aXVzIFJ1cy4KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1BST0ZJTEVSX1ZFQ1RPUl9UT19MSVNUX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9WRUNUT1JfVE9fTElTVF9IIDEKKworI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlci5oIgorI2luY2x1ZGUgInByb2ZpbGUvaW1wbC9wcm9maWxlcl9ub2RlLmgiCisjaW5jbHVkZSAicHJvZmlsZS9pbXBsL3Byb2ZpbGVyX3RyYWNlLmgiCisKK25hbWVzcGFjZSBfX2dudV9wcm9maWxlCit7CisgIC8qKiBAYnJpZWYgQSB2ZWN0b3ItdG8tbGlzdCBpbnN0cnVtZW50YXRpb24gbGluZSBpbiB0aGUgb2JqZWN0IHRhYmxlLiAgKi8KKyAgY2xhc3MgX192ZWN0b3IybGlzdF9pbmZvCisgIDogcHVibGljIF9fb2JqZWN0X2luZm9fYmFzZQorICB7CisgIHB1YmxpYzoKKyAgICBfX3ZlY3RvcjJsaXN0X2luZm8oKQorICAgIDogX01fc2hpZnRfY291bnQoMCksIF9NX2l0ZXJhdGUoMCksIF9NX3Jlc2l6ZSgwKSwgX01fbGlzdF9jb3N0KDApLAorICAgICAgX01fdmVjdG9yX2Nvc3QoMCksIF9NX3ZhbGlkKHRydWUpIHsgfQorCisgICAgX192ZWN0b3IybGlzdF9pbmZvKF9fc3RhY2tfdCBfX3N0YWNrKQorICAgIDogX19vYmplY3RfaW5mb19iYXNlKF9fc3RhY2spLCBfTV9zaGlmdF9jb3VudCgwKSwgX01faXRlcmF0ZSgwKSwKKyAgICAgIF9NX3Jlc2l6ZSgwKSwgX01fbGlzdF9jb3N0KDApLCBfTV92ZWN0b3JfY29zdCgwKSwgX01fdmFsaWQodHJ1ZSkgeyB9CisKKyAgICB2aXJ0dWFsIH5fX3ZlY3RvcjJsaXN0X2luZm8oKSB7IH0KKworICAgIF9fdmVjdG9yMmxpc3RfaW5mbyhjb25zdCBfX3ZlY3RvcjJsaXN0X2luZm8mIF9fbykKKyAgICA6IF9fb2JqZWN0X2luZm9fYmFzZShfX28pLCBfTV9zaGlmdF9jb3VudChfX28uX01fc2hpZnRfY291bnQpLAorICAgICAgX01faXRlcmF0ZShfX28uX01faXRlcmF0ZSksIF9NX3Jlc2l6ZShfX28uX01fcmVzaXplKSwKKyAgICAgIF9NX2xpc3RfY29zdChfX28uX01fbGlzdF9jb3N0KSwgX01fdmVjdG9yX2Nvc3QoX19vLl9NX3ZlY3Rvcl9jb3N0KSwKKyAgICAgIF9NX3ZhbGlkKF9fby5fTV92YWxpZCkgeyB9CisKKyAgICB2b2lkCisgICAgX19tZXJnZShjb25zdCBfX3ZlY3RvcjJsaXN0X2luZm8mIF9fbykKKyAgICB7CisgICAgICBfTV9zaGlmdF9jb3VudCAgKz0gX19vLl9NX3NoaWZ0X2NvdW50OworICAgICAgX01faXRlcmF0ZSAgICAgICs9IF9fby5fTV9pdGVyYXRlOworICAgICAgX01fdmVjdG9yX2Nvc3QgICs9IF9fby5fTV92ZWN0b3JfY29zdDsKKyAgICAgIF9NX2xpc3RfY29zdCAgICArPSBfX28uX01fbGlzdF9jb3N0OworICAgICAgX01fdmFsaWQgICAgICAgICY9IF9fby5fTV92YWxpZDsKKyAgICAgIF9NX3Jlc2l6ZSAgICAgICArPSBfX28uX01fcmVzaXplOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX3dyaXRlKEZJTEUqIF9fZikgY29uc3QKKyAgICB7CisgICAgICBzdGQ6OmZwcmludGYoX19mLCAiJVp1ICVadSAlWnUgJS4wZiAlLjBmXG4iLCBfTV9zaGlmdF9jb3VudCwKKwkJICAgX01fcmVzaXplLCBfTV9pdGVyYXRlLCBfTV92ZWN0b3JfY29zdCwgX01fbGlzdF9jb3N0KTsKKyAgICB9CisKKyAgICBmbG9hdAorICAgIF9fbWFnbml0dWRlKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV92ZWN0b3JfY29zdCAtIF9NX2xpc3RfY29zdDsgfQorCisgICAgc3RkOjpzdHJpbmcKKyAgICBfX2FkdmljZSgpIGNvbnN0IAorICAgIHsgcmV0dXJuICJjaGFuZ2Ugc3RkOjp2ZWN0b3IgdG8gc3RkOjpsaXN0IjsgfQorCisgICAgc3RkOjpzaXplX3QKKyAgICBfX3NoaWZ0X2NvdW50KCkKKyAgICB7IHJldHVybiBfTV9zaGlmdF9jb3VudDsgfQorCisgICAgc3RkOjpzaXplX3QKKyAgICBfX2l0ZXJhdGUoKQorICAgIHsgcmV0dXJuIF9NX2l0ZXJhdGU7IH0KKworICAgIGZsb2F0CisgICAgX19saXN0X2Nvc3QoKQorICAgIHsgcmV0dXJuIF9NX2xpc3RfY29zdDsgfQorCisgICAgc3RkOjpzaXplX3QKKyAgICBfX3Jlc2l6ZSgpCisgICAgeyByZXR1cm4gX01fcmVzaXplOyB9CisKKyAgICB2b2lkCisgICAgX19zZXRfbGlzdF9jb3N0KGZsb2F0IF9fbGMpCisgICAgeyBfTV9saXN0X2Nvc3QgPSBfX2xjOyB9CisgICAgCisgICAgdm9pZAorICAgIF9fc2V0X3ZlY3Rvcl9jb3N0KGZsb2F0IF9fdmMpCisgICAgeyBfTV92ZWN0b3JfY29zdCA9IF9fdmM7IH0KKyAgICAKKyAgICBib29sCisgICAgX19pc192YWxpZCgpCisgICAgeyByZXR1cm4gX01fdmFsaWQ7IH0KKyAgICAKKyAgICB2b2lkCisgICAgX19zZXRfaW52YWxpZCgpCisgICAgeyBfTV92YWxpZCA9IGZhbHNlOyB9CisKKyAgICB2b2lkCisgICAgX19vcHJfaW5zZXJ0KHN0ZDo6c2l6ZV90IF9fcG9zLCBzdGQ6OnNpemVfdCBfX251bSkKKyAgICB7IF9NX3NoaWZ0X2NvdW50ICs9IF9fbnVtIC0gX19wb3M7IH0KKworICAgIHZvaWQKKyAgICBfX29wcl9pdGVyYXRlKHN0ZDo6c2l6ZV90IF9fbnVtKQorICAgIHsgX01faXRlcmF0ZSArPSBfX251bTsgfQorCisgICAgdm9pZAorICAgIF9fcmVzaXplKHN0ZDo6c2l6ZV90IF9fZnJvbSwgc3RkOjpzaXplX3QpCisgICAgeyBfTV9yZXNpemUgKz0gX19mcm9tOyB9CisKKyAgICB2b2lkCisgICAgX19vcHJfZmluZChzdGQ6OnNpemVfdCBfX3NpemUpCisgICAgeworICAgICAgLy8gVXNlIGF2ZXJhZ2UgY2FzZSBjb21wbGV4aXR5LgorICAgICAgX01faXRlcmF0ZSArPSAzLjAgLyA0LjAgKiBfX3NpemU7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjpzaXplX3QgX01fc2hpZnRfY291bnQ7CisgICAgc3RkOjpzaXplX3QgX01faXRlcmF0ZTsKKyAgICBzdGQ6OnNpemVfdCBfTV9yZXNpemU7CisgICAgZmxvYXQgX01fbGlzdF9jb3N0OworICAgIGZsb2F0IF9NX3ZlY3Rvcl9jb3N0OworICAgIGJvb2wgIF9NX3ZhbGlkOworICB9OworCisKKyAgLyoqIEBicmllZiBBIHZlY3Rvci10by1saXN0IGluc3RydW1lbnRhdGlvbiBsaW5lIGluIHRoZSBzdGFjayB0YWJsZS4gICovCisgIGNsYXNzIF9fdmVjdG9yMmxpc3Rfc3RhY2tfaW5mbworICA6IHB1YmxpYyBfX3ZlY3RvcjJsaXN0X2luZm8KKyAgeworICBwdWJsaWM6CisgICAgX192ZWN0b3IybGlzdF9zdGFja19pbmZvKGNvbnN0IF9fdmVjdG9yMmxpc3RfaW5mbyYgX19vKSAKKyAgICA6IF9fdmVjdG9yMmxpc3RfaW5mbyhfX28pIHsgfQorICB9OworCisKKyAgLyoqIEBicmllZiBWZWN0b3ItdG8tbGlzdCBpbnN0cnVtZW50YXRpb24gcHJvZHVjZXIuICAqLworICBjbGFzcyBfX3RyYWNlX3ZlY3Rvcl90b19saXN0CisgIDogcHVibGljIF9fdHJhY2VfYmFzZTxfX3ZlY3RvcjJsaXN0X2luZm8sIF9fdmVjdG9yMmxpc3Rfc3RhY2tfaW5mbz4gCisgIHsKKyAgcHVibGljOgorICAgIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3QoKQorICAgIDogX190cmFjZV9iYXNlPF9fdmVjdG9yMmxpc3RfaW5mbywgX192ZWN0b3IybGlzdF9zdGFja19pbmZvPigpCisgICAgeyBfX2lkID0gInZlY3Rvci10by1saXN0IjsgfQorCisgICAgfl9fdHJhY2VfdmVjdG9yX3RvX2xpc3QoKSB7IH0KKworICAgIC8vIEluc2VydCBhIG5ldyBub2RlIGF0IGNvbnN0cnVjdCB3aXRoIG9iamVjdCwgY2FsbHN0YWNrIGFuZCBpbml0aWFsIHNpemUuIAorICAgIHZvaWQKKyAgICBfX2luc2VydChfX29iamVjdF90IF9fb2JqLCBfX3N0YWNrX3QgX19zdGFjaykKKyAgICB7IF9fYWRkX29iamVjdChfX29iaiwgX192ZWN0b3IybGlzdF9pbmZvKF9fc3RhY2spKTsgfQorCisgICAgLy8gQ2FsbCBhdCBkZXN0cnVjdGlvbi9jbGVhbiB0byBzZXQgY29udGFpbmVyIGZpbmFsIHNpemUuCisgICAgdm9pZAorICAgIF9fZGVzdHJ1Y3QoY29uc3Qgdm9pZCogX19vYmopCisgICAgeworICAgICAgaWYgKCFfX2lzX29uKCkpCisJcmV0dXJuOworCisgICAgICBfX3ZlY3RvcjJsaXN0X2luZm8qIF9fcmVzID0gX19nZXRfb2JqZWN0X2luZm8oX19vYmopOworICAgICAgaWYgKCFfX3JlcykKKwlyZXR1cm47CisKKyAgICAgIGZsb2F0IF9fdmMgPSBfX3ZlY3Rvcl9jb3N0KF9fcmVzLT5fX3NoaWZ0X2NvdW50KCksIF9fcmVzLT5fX2l0ZXJhdGUoKSwKKwkJCQkgX19yZXMtPl9fcmVzaXplKCkpOworICAgICAgZmxvYXQgX19sYyA9IF9fbGlzdF9jb3N0KF9fcmVzLT5fX3NoaWZ0X2NvdW50KCksIF9fcmVzLT5fX2l0ZXJhdGUoKSwKKwkJCSAgICAgICBfX3Jlcy0+X19yZXNpemUoKSk7CisgICAgICBfX3Jlcy0+X19zZXRfdmVjdG9yX2Nvc3QoX192Yyk7CisgICAgICBfX3Jlcy0+X19zZXRfbGlzdF9jb3N0KF9fbGMpOworCisgICAgICBfX3JldGlyZV9vYmplY3QoX19vYmopOworICAgIH0KKworICAgIC8vIEZpbmQgdGhlIG5vZGUgaW4gdGhlIGxpdmUgbWFwLgorICAgIC8vIFhYWCBVbmRlZmluZWQ/IT8KKyAgICBfX3ZlY3RvcjJsaXN0X2luZm8qIF9fZmluZChjb25zdCB2b2lkKiBfX29iaik7CisKKyAgICAvLyBDb2xsZWN0IGNvc3Qgb2Ygb3BlcmF0aW9ucy4KKyAgICB2b2lkCisgICAgX19vcHJfaW5zZXJ0KGNvbnN0IHZvaWQqIF9fb2JqLCBzdGQ6OnNpemVfdCBfX3Bvcywgc3RkOjpzaXplX3QgX19udW0pCisgICAgeworICAgICAgX192ZWN0b3IybGlzdF9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgICAgIGlmIChfX3JlcykKKwlfX3Jlcy0+X19vcHJfaW5zZXJ0KF9fcG9zLCBfX251bSk7CisgICAgfQorCisgICAgdm9pZAorICAgIF9fb3ByX2l0ZXJhdGUoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fbnVtKQorICAgIHsKKyAgICAgIF9fdmVjdG9yMmxpc3RfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgICAgICBpZiAoX19yZXMpCisJX19yZXMtPl9fb3ByX2l0ZXJhdGUoX19udW0pOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX2ludmFsaWRfb3BlcmF0b3IoY29uc3Qgdm9pZCogX19vYmopCisgICAgeworICAgICAgX192ZWN0b3IybGlzdF9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgICAgIGlmIChfX3JlcykKKwlfX3Jlcy0+X19zZXRfaW52YWxpZCgpOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX3Jlc2l6ZShjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19mcm9tLCBzdGQ6OnNpemVfdCBfX3RvKQorICAgIHsKKyAgICAgIF9fdmVjdG9yMmxpc3RfaW5mbyogX19yZXMgPSBfX2dldF9vYmplY3RfaW5mbyhfX29iaik7CisgICAgICBpZiAoX19yZXMpCisJX19yZXMtPl9fcmVzaXplKF9fZnJvbSwgX190byk7CisgICAgfQorCisgICAgZmxvYXQKKyAgICBfX3ZlY3Rvcl9jb3N0KHN0ZDo6c2l6ZV90IF9fc2hpZnQsIHN0ZDo6c2l6ZV90IF9faXRlcmF0ZSwKKwkJICBzdGQ6OnNpemVfdCBfX3Jlc2l6ZSkKKyAgICB7CisgICAgICByZXR1cm4gKF9fc2hpZnQKKwkgICAgICAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3ZlY3Rvcl9zaGlmdF9jb3N0X2ZhY3RvcikuX192YWx1ZQorCSAgICAgICsgX19pdGVyYXRlCisJICAgICAgKiBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX192ZWN0b3JfaXRlcmF0ZV9jb3N0X2ZhY3RvcikuX192YWx1ZQorCSAgICAgICsgX19yZXNpemUKKwkgICAgICAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX3ZlY3Rvcl9yZXNpemVfY29zdF9mYWN0b3IpLl9fdmFsdWUpOworICAgIH0KKworICAgIGZsb2F0CisgICAgX19saXN0X2Nvc3Qoc3RkOjpzaXplX3QgX19zaGlmdCwgc3RkOjpzaXplX3QgX19pdGVyYXRlLAorCQlzdGQ6OnNpemVfdCBfX3Jlc2l6ZSkKKyAgICB7CisgICAgICByZXR1cm4gKF9fc2hpZnQKKwkgICAgICAqIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfX2xpc3Rfc2hpZnRfY29zdF9mYWN0b3IpLl9fdmFsdWUKKwkgICAgICArIF9faXRlcmF0ZQorCSAgICAgICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9pdGVyYXRlX2Nvc3RfZmFjdG9yKS5fX3ZhbHVlCisJICAgICAgKyBfX3Jlc2l6ZQorCSAgICAgICogX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9fbGlzdF9yZXNpemVfY29zdF9mYWN0b3IpLl9fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQKKyAgICBfX29wcl9maW5kKGNvbnN0IHZvaWQqIF9fb2JqLCBzdGQ6OnNpemVfdCBfX3NpemUpCisgICAgeworICAgICAgX192ZWN0b3IybGlzdF9pbmZvKiBfX3JlcyA9IF9fZ2V0X29iamVjdF9pbmZvKF9fb2JqKTsKKyAgICAgIGlmIChfX3JlcykKKwlfX3Jlcy0+X19vcHJfZmluZChfX3NpemUpOworICAgIH0KKyAgfTsKKworCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfaW5pdCgpCisgIHsgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KSA9IG5ldyBfX3RyYWNlX3ZlY3Rvcl90b19saXN0KCk7IH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X3JlcG9ydChGSUxFKiBfX2YsIF9fd2FybmluZ192ZWN0b3JfdCYgX193YXJuaW5ncykKKyAgeworICAgIGlmIChfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdmVjdG9yX3RvX2xpc3QpKQorICAgICAgeworCV9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3JfdG9fbGlzdCktPgorCSAgX19jb2xsZWN0X3dhcm5pbmdzKF9fd2FybmluZ3MpOworCV9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3JfdG9fbGlzdCktPl9fd3JpdGUoX19mKTsKKyAgICAgIH0KKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfY29uc3RydWN0KGNvbnN0IHZvaWQqIF9fb2JqKQorICB7CisgICAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKQorICAgICAgcmV0dXJuOworCisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KS0+X19pbnNlcnQoX19vYmosIF9fZ2V0X3N0YWNrKCkpOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV92ZWN0b3JfdG9fbGlzdF9kZXN0cnVjdChjb25zdCB2b2lkKiBfX29iaikKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3JfdG9fbGlzdCktPl9fZGVzdHJ1Y3QoX19vYmopOworICB9CisKKyAgaW5saW5lIHZvaWQKKyAgX190cmFjZV92ZWN0b3JfdG9fbGlzdF9pbnNlcnQoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fcG9zLAorCQkJCXN0ZDo6c2l6ZV90IF9fbnVtKQorICB7CisgICAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKQorICAgICAgcmV0dXJuOworCisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KS0+X19vcHJfaW5zZXJ0KF9fb2JqLCBfX3BvcywKKwkJCQkJCQkgICBfX251bSk7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X2l0ZXJhdGUoY29uc3Qgdm9pZCogX19vYmosIHN0ZDo6c2l6ZV90IF9fbnVtID0gMSkKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3JfdG9fbGlzdCktPl9fb3ByX2l0ZXJhdGUoX19vYmosIF9fbnVtKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfaW52YWxpZF9vcGVyYXRvcihjb25zdCB2b2lkKiBfX29iaikKKyAgeworICAgIGlmICghX19wcm9mY3h4X2luaXQoKSkKKyAgICAgIHJldHVybjsKKworICAgIF9HTElCQ1hYX1BST0ZJTEVfREFUQShfU192ZWN0b3JfdG9fbGlzdCktPl9faW52YWxpZF9vcGVyYXRvcihfX29iaik7CisgIH0KKworICBpbmxpbmUgdm9pZAorICBfX3RyYWNlX3ZlY3Rvcl90b19saXN0X3Jlc2l6ZShjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19mcm9tLAorCQkJCXN0ZDo6c2l6ZV90IF9fdG8pCisgIHsKKyAgICBpZiAoIV9fcHJvZmN4eF9pbml0KCkpCisgICAgICByZXR1cm47CisKKyAgICBfR0xJQkNYWF9QUk9GSUxFX0RBVEEoX1NfdmVjdG9yX3RvX2xpc3QpLT5fX3Jlc2l6ZShfX29iaiwgX19mcm9tLCBfX3RvKTsKKyAgfQorCisgIGlubGluZSB2b2lkCisgIF9fdHJhY2VfdmVjdG9yX3RvX2xpc3RfZmluZChjb25zdCB2b2lkKiBfX29iaiwgc3RkOjpzaXplX3QgX19zaXplKQorICB7CisgICAgaWYgKCFfX3Byb2ZjeHhfaW5pdCgpKQorICAgICAgcmV0dXJuOworCisgICAgX0dMSUJDWFhfUFJPRklMRV9EQVRBKF9TX3ZlY3Rvcl90b19saXN0KS0+X19vcHJfZmluZChfX29iaiwgX19zaXplKTsKKyAgfQorCit9IC8vIG5hbWVzcGFjZSBfX2dudV9wcm9maWxlCisjZW5kaWYgLyogX0dMSUJDWFhfUFJPRklMRV9QUk9GSUxFUl9WRUNUT1JfVE9fTElTVF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvaXRlcmF0b3JfdHJhY2tlci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2l0ZXJhdG9yX3RyYWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTFlZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL2l0ZXJhdG9yX3RyYWNrZXIuaApAQCAtMCwwICsxLDI3NCBAQAorLy8gUHJvZmlsaW5nIGl0ZXJhdG9yIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL2l0ZXJhdG9yX3RyYWNrZXIuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwcm9maWxlIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX0lURVJBVE9SX1RSQUNLRVIKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9JVEVSQVRPUl9UUkFDS0VSIDEKKworI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBjbGFzcyBfX2l0ZXJhdG9yX3RyYWNrZXIgCisgICAgeworICAgICAgdHlwZWRlZiBfX2l0ZXJhdG9yX3RyYWNrZXIgX1NlbGY7CisKKyAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIGl0ZXJhdG9yCisgICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKKworICAgICAgLy8gVGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUKKyAgICAgIGNvbnN0IF9TZXF1ZW5jZSogX01fZHM7CisgICAgICB0eXBlZGVmIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX1RyYWl0czsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yCQkgICAgICAgICAgICAgIF9CYXNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmRpZmZlcmVuY2VfdHlwZSAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cmVmZXJlbmNlICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOworCisgICAgICBfX2l0ZXJhdG9yX3RyYWNrZXIoKQorICAgICAgOiBfTV9jdXJyZW50KCksIF9NX2RzKDApIHsgfQorCisgICAgICBfX2l0ZXJhdG9yX3RyYWNrZXIoY29uc3QgX0l0ZXJhdG9yJiBfX2ksIGNvbnN0IF9TZXF1ZW5jZSogX19zZXEpIAorICAgICAgOiBfTV9jdXJyZW50KF9faSksIF9NX2RzKF9fc2VxKSB7IH0KKworICAgICAgX19pdGVyYXRvcl90cmFja2VyKGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlciYgX194KSAKKyAgICAgIDogX01fY3VycmVudChfX3guX01fY3VycmVudCksIF9NX2RzKF9feC5fTV9kcykgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9NdXRhYmxlSXRlcmF0b3I+CisgICAgICAgIF9faXRlcmF0b3JfdHJhY2tlcihjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X011dGFibGVJdGVyYXRvciwKKwkJCSAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWYKKwkJCSAgIDwoc3RkOjpfX2FyZV9zYW1lPF9NdXRhYmxlSXRlcmF0b3IsIHR5cGVuYW1lCisJCQkgICAgIF9TZXF1ZW5jZTo6aXRlcmF0b3I6Ol9CYXNlX2l0ZXJhdG9yPjo6X192YWx1ZSksCisJCQkgICBfU2VxdWVuY2U+OjpfX3R5cGU+JiBfX3gpCisJOiAgX01fY3VycmVudChfX3guYmFzZSgpKSwgX01fZHMoX194Ll9NX2dldF9zZXF1ZW5jZSgpKSB7IH0KKworICAgICAgX0l0ZXJhdG9yCisgICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQorICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnZlcnNpb24gdG8gdW5kZXJseWluZyBub24tZGVidWcgaXRlcmF0b3IgdG8gYWxsb3cKKyAgICAgICAqIGJldHRlciBpbnRlcmFjdGlvbiB3aXRoIG5vbi1wcm9maWxlIGNvbnRhaW5lcnMuCisgICAgICAgKi8KKyAgICAgIG9wZXJhdG9yIF9JdGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYqX01fY3VycmVudDsgfQorCisgICAgICBfX2l0ZXJhdG9yX3RyYWNrZXImCisgICAgICBvcGVyYXRvcisrKCkKKyAgICAgIHsKKwlfTV9kcy0+X01fcHJvZmlsZV9pdGVyYXRlKCk7CisJKytfTV9jdXJyZW50OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX19pdGVyYXRvcl90cmFja2VyCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsKKwlfTV9kcy0+X01fcHJvZmlsZV9pdGVyYXRlKCk7CisJX19pdGVyYXRvcl90cmFja2VyIF9fdG1wKCp0aGlzKTsKKwkrK19NX2N1cnJlbnQ7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICBfX2l0ZXJhdG9yX3RyYWNrZXImCisgICAgICBvcGVyYXRvci0tKCkKKyAgICAgIHsKKwlfTV9kcy0+X01fcHJvZmlsZV9pdGVyYXRlKDEpOworCS0tX01fY3VycmVudDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9faXRlcmF0b3JfdHJhY2tlcgorICAgICAgb3BlcmF0b3ItLShpbnQpCisgICAgICB7CisJX01fZHMtPl9NX3Byb2ZpbGVfaXRlcmF0ZSgxKTsKKwlfX2l0ZXJhdG9yX3RyYWNrZXIgX190bXAoKnRoaXMpOworCS0tX01fY3VycmVudDsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIF9faXRlcmF0b3JfdHJhY2tlciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXImIF9feCkKKyAgICAgIHsKKwlfTV9jdXJyZW50ID0gX194Ll9NX2N1cnJlbnQ7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiAqX01fY3VycmVudDsgfQorCisgICAgICAvLyAtLS0tLS0gUmFuZG9tIGFjY2VzcyBpdGVyYXRvciByZXF1aXJlbWVudHMgLS0tLS0tCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0IAorICAgICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CisKKyAgICAgIF9faXRlcmF0b3JfdHJhY2tlciYKKyAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCisgICAgICB7CisJX01fY3VycmVudCArPSBfX247CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBfX2l0ZXJhdG9yX3RyYWNrZXIKKyAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKKyAgICAgIHsKKwlfX2l0ZXJhdG9yX3RyYWNrZXIgX190bXAoKnRoaXMpOworCV9fdG1wICs9IF9fbjsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisKKyAgICAgIF9faXRlcmF0b3JfdHJhY2tlciYKKyAgICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCisgICAgICB7CisJX01fY3VycmVudCArPSAtX19uOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX19pdGVyYXRvcl90cmFja2VyCisgICAgICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CisgICAgICB7CisJX19pdGVyYXRvcl90cmFja2VyIF9fdG1wKCp0aGlzKTsKKwlfX3RtcCAtPSBfX247CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9maW5kKCkKKyAgICAgIHsgX01fZHMtPl9NX3Byb2ZpbGVfZmluZCgpOyB9CisKKyAgICAgIGNvbnN0IF9TZXF1ZW5jZSoKKyAgICAgIF9NX2dldF9zZXF1ZW5jZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfU2VxdWVuY2UqPihfTV9kcyk7IH0KKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisgICAgICAgICAgICAgICBjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yUiwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JMLCBfU2VxdWVuY2U+JiBfX2xocywKKwkgICAgICBjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yUiwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgIGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3JSLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9fbGhzLAorCSAgICAgICBjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CisKKyAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAvLyBBY2NvcmRpbmcgdG8gdGhlIHJlc29sdXRpb24gb2YgRFIxNzkgbm90IG9ubHkgdGhlIHZhcmlvdXMgY29tcGFyaXNvbgorICAvLyBvcGVyYXRvcnMgYnV0IGFsc28gb3BlcmF0b3ItIG11c3QgYWNjZXB0IG1peGVkIGl0ZXJhdG9yL2NvbnN0X2l0ZXJhdG9yCisgIC8vIHBhcmFtZXRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9TZXF1ZW5jZT4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvckwsIF9TZXF1ZW5jZT46OmRpZmZlcmVuY2VfdHlwZQorICAgIG9wZXJhdG9yLShjb25zdCBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yTCwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvclIsIF9TZXF1ZW5jZT4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVlbmNlPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2l0ZXJhdG9yX3RyYWNrZXI8X0l0ZXJhdG9yLCBfU2VxdWVuY2U+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBvcGVyYXRvci0oY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19saHMsCisJICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuYmFzZSgpIC0gX19yaHMuYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CisgICAgaW5saW5lIF9faXRlcmF0b3JfdHJhY2tlcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4KKyAgICBvcGVyYXRvcisodHlwZW5hbWUgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvcixfU2VxdWVuY2U+OjpkaWZmZXJlbmNlX3R5cGUKKwkgICAgICBfX24sCisJICAgICAgY29uc3QgX19pdGVyYXRvcl90cmFja2VyPF9JdGVyYXRvciwgX1NlcXVlbmNlPiYgX19pKQorICAgIHsgcmV0dXJuIF9faSArIF9fbjsgfQorCQorfSAgLy8gbmFtZXNwYWNlIF9fcHJvZmlsZQorfSAgLy8gbmFtZXNwYWNlIHN0ZAorI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvbGlzdCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzBjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvbGlzdApAQCAtMCwwICsxLDY1NyBAQAorLy8gUHJvZmlsaW5nIGxpc3QgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvbGlzdAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwcm9maWxlIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX0xJU1QKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9MSVNUIDEKKworI2luY2x1ZGUgPGxpc3Q+CisjaW5jbHVkZSA8cHJvZmlsZS9iYXNlLmg+IAorI2luY2x1ZGUgPHByb2ZpbGUvaXRlcmF0b3JfdHJhY2tlci5oPiAKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19wcm9maWxlCit7CisgIC8qKiBAYnJpZWYgTGlzdCB3cmFwcGVyIHdpdGggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uLiAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPF9UcD4gPgorICAgIGNsYXNzIGxpc3QKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQzo6bGlzdDxfVHAsIF9BbGxvY2F0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfQzo6bGlzdDxfVHAsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgX19pdGVyYXRvcl90cmFja2VyPHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciwgbGlzdD4gICAgICAgIAorCQkJCSAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9faXRlcmF0b3JfdHJhY2tlcjx0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IsIGxpc3Q+ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX1RwCQkJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIC8vIDIzLjIuMi4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdAorICAgICAgbGlzdChjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fYSkgCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdCh0aGlzKTsgCS8vIGxpc3Qyc2xpc3QKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0Mih0aGlzKTsgCS8vIGxpc3QydmVjdG9yCisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBleHBsaWNpdAorICAgICAgbGlzdChzaXplX3R5cGUgX19uKQorICAgICAgOiBfQmFzZShfX24pIAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QodGhpcyk7IAorICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QyKHRoaXMpOyAKKyAgICAgIH0KKworICAgICAgbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCisJICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiBfQmFzZShfX24sIF9fdmFsdWUsIF9fYSkgCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdCh0aGlzKTsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdDIodGhpcyk7IAorICAgICAgfQorI2Vsc2UKKyAgICAgIGV4cGxpY2l0CisgICAgICBsaXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSA9IF9UcCgpLAorCSAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX3ZhbHVlLCBfX2EpIAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QodGhpcyk7IAorICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QyKHRoaXMpOyAKKyAgICAgIH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgIGxpc3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19maXJzdCwgX19sYXN0LCBfX2EpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdCh0aGlzKTsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2NvbnN0cnVjdDIodGhpcyk7IAorICAgICAgfQorCisgICAgICBsaXN0KGNvbnN0IGxpc3QmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSAKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0KHRoaXMpOyAKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0Mih0aGlzKTsgCisgICAgICB9CisKKyAgICAgIGxpc3QoY29uc3QgX0Jhc2UmIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSAKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0KHRoaXMpOyAKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfY29uc3RydWN0Mih0aGlzKTsgCisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBsaXN0KGxpc3QmJiBfX3gpIG5vZXhjZXB0CisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QodGhpcyk7IAorICAgICAgICBfX3Byb2ZjeHhfbGlzdF9jb25zdHJ1Y3QyKHRoaXMpOyAKKyAgICAgIH0KKworICAgICAgbGlzdChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKyAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICAgIDogX0Jhc2UoX19sLCBfX2EpIHsgfQorI2VuZGlmCisKKyAgICAgIH5saXN0KCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X2Rlc3RydWN0KHRoaXMpOyAKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfZGVzdHJ1Y3QyKHRoaXMpOyAKKyAgICAgIH0KKworICAgICAgbGlzdCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBsaXN0JiBfX3gpCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBfX3g7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgbGlzdCYKKyAgICAgIG9wZXJhdG9yPShsaXN0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBsaXN0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCXN0YXRpY19jYXN0PF9CYXNlJj4oKnRoaXMpID0gX19sOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgYXNzaWduKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgewlfQmFzZTo6YXNzaWduKF9fbCk7IH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgICAgdm9pZAorICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7IF9CYXNlOjphc3NpZ24oX19maXJzdCwgX19sYXN0KTsgfQorCisgICAgICB2b2lkCisgICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3QpCisgICAgICB7CV9CYXNlOjphc3NpZ24oX19uLCBfX3QpOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisgICAgICAvLyBpdGVyYXRvcnM6CisgICAgICBpdGVyYXRvcgorICAgICAgYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X3Jld2luZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9yZXdpbmQodGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOworICAgICAgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9yZXdpbmQodGhpcyk7CisgICAgICAgIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9saXN0X3Jld2luZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOworICAgICAgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIDIzLjIuMi4yIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fc3opCisgICAgICB7IF9CYXNlOjpyZXNpemUoX19zeik7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBjb25zdCBfVHAmIF9fYykKKyAgICAgIHsgX0Jhc2U6OnJlc2l6ZShfX3N6LCBfX2MpOyB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBfVHAgX19jID0gX1RwKCkpCisgICAgICB7IF9CYXNlOjpyZXNpemUoX19zeiwgX19jKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGVsZW1lbnQgYWNjZXNzOgorICAgICAgcmVmZXJlbmNlCisgICAgICBmcm9udCgpCisgICAgICB7IHJldHVybiBfQmFzZTo6ZnJvbnQoKTsgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGZyb250KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjpmcm9udCgpOyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgYmFjaygpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X3Jld2luZCh0aGlzKTsKKwlyZXR1cm4gX0Jhc2U6OmJhY2soKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworCXJldHVybiBfQmFzZTo6YmFjaygpOworICAgICAgfQorCisgICAgICAvLyAyMy4yLjIuMyBtb2RpZmllcnM6CisgICAgICB2b2lkCisgICAgICBwdXNoX2Zyb250KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfaW52YWxpZF9vcGVyYXRvcih0aGlzKTsKKyAgICAgICAgX19wcm9mY3h4X2xpc3Rfb3BlcmF0aW9uKHRoaXMpOworICAgICAgICBfQmFzZTo6cHVzaF9mcm9udChfX3gpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdXNpbmcgX0Jhc2U6OmVtcGxhY2VfZnJvbnQ7CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgcG9wX2Zyb250KCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2xpc3Rfb3BlcmF0aW9uKHRoaXMpOworCV9CYXNlOjpwb3BfZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OnB1c2hfYmFjazsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHVzaW5nIF9CYXNlOjplbXBsYWNlX2JhY2s7CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgcG9wX2JhY2soKQorICAgICAgeworCWl0ZXJhdG9yIF9fdmljdGltID0gZW5kKCk7CisJLS1fX3ZpY3RpbTsKKwlfQmFzZTo6cG9wX2JhY2soKTsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGVtcGxhY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbXBsYWNlKF9fcG9zaXRpb24uYmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAorCQkJICB0aGlzKTsKKwl9CisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX01fcHJvZmlsZV9pbnNlcnQodGhpcywgX19wb3NpdGlvbiwgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9feCksIHRoaXMpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfVHAmJiBfX3gpCisgICAgICB7IAorICAgICAgICBfTV9wcm9maWxlX2luc2VydCh0aGlzLCBfX3Bvc2l0aW9uLCBzaXplKCkpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2UoX19wb3NpdGlvbi5iYXNlKCksIHN0ZDo6bW92ZShfX3gpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMpOyAKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworICAgICAgICBfTV9wcm9maWxlX2luc2VydCh0aGlzLCBfX3Bvc2l0aW9uLCBzaXplKCkpOworICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX2wpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX01fcHJvZmlsZV9pbnNlcnQodGhpcywgX19wb3NpdGlvbiwgc2l6ZSgpKTsKKwlfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24uYmFzZSgpLCBfX24sIF9feCk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAorCSAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisJeworCSAgX01fcHJvZmlsZV9pbnNlcnQodGhpcywgX19wb3NpdGlvbiwgc2l6ZSgpKTsKKwkgIF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9fZmlyc3QsIF9fbGFzdCk7CisJfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSksIHRoaXMpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7CisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCS8vIDE1MS4gY2FuJ3QgY3VycmVudGx5IGNsZWFyKCkgZW1wdHkgY29udGFpbmVyCisJcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSwgX19sYXN0LmJhc2UoKSksIHRoaXMpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGxpc3QmIF9feCkKKyAgICAgIHsJX0Jhc2U6OnN3YXAoX194KTsgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CV9CYXNlOjpjbGVhcigpOyB9CisKKyAgICAgIC8vIDIzLjIuMi40IGxpc3Qgb3BlcmF0aW9uczoKKyAgICAgIHZvaWQKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYmIF9feCkKKyNlbHNlCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQorI2VuZGlmCisgICAgICB7IHRoaXMtPnNwbGljZShfX3Bvc2l0aW9uLCBfR0xJQkNYWF9NT1ZFKF9feCksIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQorICAgICAgeyB0aGlzLT5zcGxpY2UoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpOyB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gsIGl0ZXJhdG9yIF9faSkKKyAgICAgIHsgdGhpcy0+c3BsaWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpLCBfX2kpOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiYgX194LCBpdGVyYXRvciBfX2kpCisjZWxzZQorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19pKQorI2VuZGlmCisgICAgICB7CisJLy8gV2UgdXNlZCB0byBwZXJmb3JtIHRoZSBzcGxpY2VfYWxsb2MgY2hlY2s6ICBub3QgYW55bW9yZSwgcmVkdW5kYW50CisJLy8gYWZ0ZXIgaW1wbGVtZW50aW5nIHRoZSByZWxldmFudCBiaXRzIG9mIE4xNTk5LgorCisJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCV9CYXNlOjpzcGxpY2UoX19wb3NpdGlvbi5iYXNlKCksIF9HTElCQ1hYX01PVkUoX194Ll9NX2Jhc2UoKSksCisJCSAgICAgIF9faS5iYXNlKCkpOworICAgICAgfQorCisgICAgICB2b2lkCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmJiBfX3gsIGl0ZXJhdG9yIF9fZmlyc3QsCisJICAgICBpdGVyYXRvciBfX2xhc3QpCisjZWxzZQorICAgICAgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmIF9feCwgaXRlcmF0b3IgX19maXJzdCwKKwkgICAgIGl0ZXJhdG9yIF9fbGFzdCkKKyNlbmRpZgorICAgICAgeworCS8vIFdlIHVzZWQgdG8gcGVyZm9ybSB0aGUgc3BsaWNlX2FsbG9jIGNoZWNrOiAgbm90IGFueW1vcmUsIHJlZHVuZGFudAorCS8vIGFmdGVyIGltcGxlbWVudGluZyB0aGUgcmVsZXZhbnQgYml0cyBvZiBOMTU5OS4KKworCV9CYXNlOjpzcGxpY2UoX19wb3NpdGlvbi5iYXNlKCksIF9HTElCQ1hYX01PVkUoX194Ll9NX2Jhc2UoKSksCisJCSAgICAgIF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgdGhpcy0+c3BsaWNlKF9fcG9zaXRpb24sIHN0ZDo6bW92ZShfX3gpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSkKKyAgICAgIHsKKwlmb3IgKGl0ZXJhdG9yIF9feCA9IGJlZ2luKCk7IF9feCAhPSBlbmQoKTsgKQorCSAgeworCSAgICBpZiAoKl9feCA9PSBfX3ZhbHVlKQorCSAgICAgIF9feCA9IGVyYXNlKF9feCk7CisJICAgIGVsc2UKKwkgICAgICArK19feDsKKwkgIH0KKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1ByZWRpY2F0ZT4KKyAgICAgICAgdm9pZAorICAgICAgICByZW1vdmVfaWYoX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgICAgIHsKKwkgIGZvciAoaXRlcmF0b3IgX194ID0gYmVnaW4oKTsgX194ICE9IGVuZCgpOyApCisJICAgIHsKKyAgICAgICAgICAgICAgX19wcm9mY3h4X2xpc3Rfb3BlcmF0aW9uKHRoaXMpOworCSAgICAgIGlmIChfX3ByZWQoKl9feCkpCisJCV9feCA9IGVyYXNlKF9feCk7CisJICAgICAgZWxzZQorCQkrK19feDsKKwkgICAgfQorCX0KKworICAgICAgdm9pZAorICAgICAgdW5pcXVlKCkKKyAgICAgIHsKKwlpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKKwlpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKKwlpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJICByZXR1cm47CisJaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKKwl3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQorCSAgeworICAgICAgICAgICAgX19wcm9mY3h4X2xpc3Rfb3BlcmF0aW9uKHRoaXMpOworCSAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKKwkgICAgICBlcmFzZShfX25leHQpOworCSAgICBlbHNlCisJICAgICAgX19maXJzdCA9IF9fbmV4dDsKKwkgICAgX19uZXh0ID0gX19maXJzdDsKKwkgIH0KKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KKyAgICAgICAgdm9pZAorICAgICAgICB1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorICAgICAgICB7CisJICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKKwkgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOworCSAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQorCSAgICByZXR1cm47CisJICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OworCSAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkKKwkgICAgeworICAgICAgICAgICAgICBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24odGhpcyk7CisJICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQorCQllcmFzZShfX25leHQpOworCSAgICAgIGVsc2UKKwkJX19maXJzdCA9IF9fbmV4dDsKKwkgICAgICBfX25leHQgPSBfX2ZpcnN0OworCSAgICB9CisJfQorCisgICAgICB2b2lkCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgbWVyZ2UobGlzdCYmIF9feCkKKyNlbHNlCisgICAgICBtZXJnZShsaXN0JiBfX3gpCisjZW5kaWYKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMzAwLiBsaXN0OjptZXJnZSgpIHNwZWNpZmljYXRpb24gaW5jb21wbGV0ZQorCWlmICh0aGlzICE9ICZfX3gpCisJICB7IF9CYXNlOjptZXJnZShfR0xJQkNYWF9NT1ZFKF9feC5fTV9iYXNlKCkpKTsgfQorICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgbWVyZ2UobGlzdCYgX194KQorICAgICAgeyB0aGlzLT5tZXJnZShzdGQ6Om1vdmUoX194KSk7IH0KKyNlbmRpZgorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ29tcGFyZT4KKyAgICAgICAgdm9pZAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgICAgbWVyZ2UobGlzdCYmIF9feCwgX0NvbXBhcmUgX19jb21wKQorI2Vsc2UKKyAgICAgICAgbWVyZ2UobGlzdCYgX194LCBfQ29tcGFyZSBfX2NvbXApCisjZW5kaWYKKyAgICAgICAgeworCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gMzAwLiBsaXN0OjptZXJnZSgpIHNwZWNpZmljYXRpb24gaW5jb21wbGV0ZQorCSAgaWYgKHRoaXMgIT0gJl9feCkKKwkgICAgeyBfQmFzZTo6bWVyZ2UoX0dMSUJDWFhfTU9WRShfX3guX01fYmFzZSgpKSwgX19jb21wKTsgfQorCX0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlPgorICAgICAgICB2b2lkCisgICAgICAgIG1lcmdlKGxpc3QmIF9feCwgX0NvbXBhcmUgX19jb21wKQorICAgICAgICB7IHRoaXMtPm1lcmdlKHN0ZDo6bW92ZShfX3gpLCBfX2NvbXApOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc29ydCgpIHsgX0Jhc2U6OnNvcnQoKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RyaWN0V2Vha09yZGVyaW5nPgorICAgICAgICB2b2lkCisgICAgICAgIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX3ByZWQpIHsgX0Jhc2U6OnNvcnQoX19wcmVkKTsgfQorCisgICAgICB1c2luZyBfQmFzZTo6cmV2ZXJzZTsKKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgX0dMSUJDWFhfTk9FWENFUFQgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgdm9pZCBfTV9wcm9maWxlX2ZpbmQoKSBjb25zdAorICAgICAgeyB9CisKKyAgICAgIHZvaWQgX01fcHJvZmlsZV9pdGVyYXRlKGludCBfX3Jld2luZCA9IDApIGNvbnN0IAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24odGhpcyk7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X2l0ZXJhdGUodGhpcyk7IAorICAgICAgICBpZiAoX19yZXdpbmQpCisgICAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHNpemVfdHlwZSBfTV9wcm9maWxlX2luc2VydCh2b2lkKiBvYmosIGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19zaXplKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19zaGlmdCA9IDA7CisgICAgICAgIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX2l0ID0gX19wb3MuYmFzZSgpOworICAgICAgICBmb3IgKCA7IF9faXQhPV9CYXNlOjplbmQoKTsgX19pdCsrKQorICAgICAgICAgIF9fc2hpZnQrKzsKKyAgICAgICAgX19wcm9mY3h4X2xpc3RfcmV3aW5kKHRoaXMpOworICAgICAgICBfX3Byb2ZjeHhfbGlzdF9vcGVyYXRpb24odGhpcyk7CisgICAgICAgIF9fcHJvZmN4eF9saXN0X2luc2VydCh0aGlzLCBfX3NoaWZ0LCBfX3NpemUpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpICE9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywKKwkgICAgICBjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX2xocywgbGlzdDxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19wcm9maWxlCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvbWFwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL21hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA3ZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL21hcApAQCAtMCwwICsxLDM1IEBACisvLyBQcm9maWxpbmcgbWFwL211bHRpbWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvbWFwCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTUFQCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTUFQIDEKKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxwcm9maWxlL21hcC5oPgorI2luY2x1ZGUgPHByb2ZpbGUvbXVsdGltYXAuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvbWFwLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhZjJiYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9tYXAuaApAQCAtMCwwICsxLDU2MSBAQAorLy8gUHJvZmlsaW5nIG1hcCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL21hcC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTUFQX0gKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9NQVBfSCAxCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHByb2ZpbGUvYmFzZS5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgLy8vIENsYXNzIHN0ZDo6bWFwIHdyYXBwZXIgd2l0aCBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIG1hcAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9DOjptYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9DOjptYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4gX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlczoKKyAgICAgIHR5cGVkZWYgX0tleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICAvLyAyMy4zLjEuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQKKyAgICAgIG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19jb21wLCBfX2EpCisgICAgICB7IF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9jb25zdHJ1Y3QodGhpcyk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisgICAgICAgIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgICBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisJOiBfQmFzZShfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwgX19hKQorICAgICAgICB7IF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9jb25zdHJ1Y3QodGhpcyk7IH0KKworICAgICAgbWFwKGNvbnN0IG1hcCYgX194KQorICAgICAgOiBfQmFzZShfX3gpCisgICAgICB7IF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9jb25zdHJ1Y3QodGhpcyk7IH0KKworICAgICAgbWFwKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkKKyAgICAgIHsgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2NvbnN0cnVjdCh0aGlzKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgbWFwKG1hcCYmIF9feCkKKyAgICAgIG5vZXhjZXB0KGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPF9Db21wYXJlPjo6dmFsdWUpCisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKQorICAgICAgeyB9CisKKyAgICAgIG1hcChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgIGNvbnN0IF9Db21wYXJlJiBfX2MgPSBfQ29tcGFyZSgpLAorCSAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19jLCBfX2EpIHsgfQorI2VuZGlmCisKKyAgICAgIH5tYXAoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZGVzdHJ1Y3QodGhpcyk7IH0KKworICAgICAgbWFwJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IG1hcCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIG1hcCYKKyAgICAgIG9wZXJhdG9yPShtYXAmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG1hcCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAxMzMuIG1hcCBtaXNzaW5nIGdldF9hbGxvY2F0b3IoKQorICAgICAgdXNpbmcgX0Jhc2U6OmdldF9hbGxvY2F0b3I7CisKKyAgICAgIC8vIGl0ZXJhdG9yczoKKyAgICAgIGl0ZXJhdG9yIAorICAgICAgYmVnaW4oKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX0Jhc2U6OmJlZ2luKCk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIF9CYXNlOjpiZWdpbigpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX0Jhc2U6OmVuZCgpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gX0Jhc2U6OmVuZCgpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyAKKyAgICAgIH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUodGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKKyAgICAgIH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKHRoaXMpOworICAgICAgICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKHRoaXMpOworICAgICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKHRoaXMpOworICAgICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CisgICAgICB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUodGhpcyk7CisgICAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIDIzLjMuMS4yIGVsZW1lbnQgYWNjZXNzOgorICAgICAgbWFwcGVkX3R5cGUmCisgICAgICBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9maW5kKHRoaXMsIHNpemUoKSk7CisgICAgICAgIHJldHVybiBfQmFzZTo6b3BlcmF0b3JbXShfX2spOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgbWFwcGVkX3R5cGUmCisgICAgICBvcGVyYXRvcltdKGtleV90eXBlJiYgX19rKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZmluZCh0aGlzLCBzaXplKCkpOworICAgICAgICByZXR1cm4gX0Jhc2U6Om9wZXJhdG9yW10oc3RkOjptb3ZlKF9faykpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgYXQoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQodGhpcywgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIF9CYXNlOjphdChfX2spOworICAgICAgfQorCisgICAgICBjb25zdCBtYXBwZWRfdHlwZSYKKyAgICAgIGF0KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9maW5kKHRoaXMsIHNpemUoKSk7CisgICAgICAgIHJldHVybiBfQmFzZTo6YXQoX19rKTsKKyAgICAgIH0KKworICAgICAgLy8gbW9kaWZpZXJzOgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCXN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKwllbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnNlcnQodGhpcywgc2l6ZSgpLCAxKTsKKwkgIGF1dG8gX19yZXMgPSBfQmFzZTo6ZW1wbGFjZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgcmV0dXJuIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4oaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJCQkgICBfX3Jlcy5zZWNvbmQpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHNpemVfdHlwZSBzaXplX2JlZm9yZSA9IHNpemUoKTsKKwkgIGF1dG8gX19yZXMgPSBfQmFzZTo6ZW1wbGFjZV9oaW50KF9fcG9zLAorCQkJCQkgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydCh0aGlzLCBzaXplX2JlZm9yZSwKKwkJCQkJCXNpemUoKSAtIHNpemVfYmVmb3JlKTsKKwkgIHJldHVybiBfX3JlczsKKwl9CisjZW5kaWYKKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydCh0aGlzLCBzaXplKCksIDEpOworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgYm9vbD4gX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9feCk7CisJcmV0dXJuIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4oaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJCQkgX19yZXMuc2Vjb25kKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgICAgaW5zZXJ0KF9QYWlyJiYgX194KQorICAgICAgICB7CisJICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW5zZXJ0KHRoaXMsIHNpemUoKSwgMSk7CisJICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwkgIHN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgYm9vbD4gX19yZXMKKwkgICAgPSBfQmFzZTo6aW5zZXJ0KHN0ZDo6Zm9yd2FyZDxfUGFpcj4oX194KSk7CisJICByZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkJCSAgIF9fcmVzLnNlY29uZCk7CisJfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbGlzdCkKKyAgICAgIHsgCisgICAgICAgIHNpemVfdHlwZSBzaXplX2JlZm9yZSA9IHNpemUoKTsKKyAgICAgICAgX0Jhc2U6Omluc2VydChfX2xpc3QpOyAKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydCh0aGlzLCBzaXplX2JlZm9yZSwgCisJCQkJCSAgICAgIHNpemUoKSAtIHNpemVfYmVmb3JlKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBpdGVyYXRvcgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisjZWxzZQorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyNlbmRpZgorICAgICAgeworICAgICAgICBzaXplX3R5cGUgc2l6ZV9iZWZvcmUgPSBzaXplKCk7CisJaXRlcmF0b3IgX19pID0gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBfX3gpKTsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2luc2VydCh0aGlzLCBzaXplX2JlZm9yZSwKKwkJCQkJICAgICAgc2l6ZSgpIC0gc2l6ZV9iZWZvcmUpOworCXJldHVybiBfX2k7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwKKwkJCQkJCSAgICBfUGFpciYmPjo6dmFsdWU+Ojp0eXBlPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwgX1BhaXImJiBfX3gpCisgICAgICAgIHsKKwkgIHNpemVfdHlwZSBzaXplX2JlZm9yZSA9IHNpemUoKTsKKwkgIGl0ZXJhdG9yIF9faQorCSAgICA9IGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbiwgc3RkOjpmb3J3YXJkPF9QYWlyPihfX3gpKSk7CisJICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW5zZXJ0KHRoaXMsIHNpemVfYmVmb3JlLCAKKwkJCQkJCXNpemUoKSAtIHNpemVfYmVmb3JlKTsKKwkgIHJldHVybiBfX2k7CisgICAgICB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeworICAgICAgICAgIHNpemVfdHlwZSBzaXplX2JlZm9yZSA9IHNpemUoKTsKKwkgIF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKyAgICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW5zZXJ0KHRoaXMsIHNpemVfYmVmb3JlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUoKSAtIHNpemVfYmVmb3JlKTsKKwl9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsKKwlpdGVyYXRvciBfX2kgPSBfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbik7CisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9lcmFzZSh0aGlzLCBzaXplKCksIDEpOworICAgICAgICByZXR1cm4gX19pOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgcmV0dXJuIGVyYXNlKGNvbnN0X2l0ZXJhdG9yKF9fcG9zaXRpb24pKTsgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7CisJX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pOworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZXJhc2UodGhpcywgc2l6ZSgpLCAxKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJaXRlcmF0b3IgX192aWN0aW0gPSBmaW5kKF9feCk7CisJaWYgKF9fdmljdGltID09IGVuZCgpKQorCSAgcmV0dXJuIDA7CisJZWxzZQorCXsKKwkgIF9CYXNlOjplcmFzZShfX3ZpY3RpbSk7CisJICByZXR1cm4gMTsKKwl9CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19maXJzdCwgY29uc3RfaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fZmlyc3QsIF9fbGFzdCkpOyB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgICAgeyBfQmFzZTo6ZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAobWFwJiBfX3gpCisgICAgICB7IF9CYXNlOjpzd2FwKF9feCk7IH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyB0aGlzLT5lcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KKworICAgICAgLy8gb2JzZXJ2ZXJzOgorICAgICAgdXNpbmcgX0Jhc2U6OmtleV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXA7CisKKyAgICAgIC8vIDIzLjMuMS4zIG1hcCBvcGVyYXRpb25zOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQodGhpcywgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOworICAgICAgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZmluZCh0aGlzLCBzaXplKCkpOworICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSk7CisgICAgICB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ZpbmQodGhpcywgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIF9CYXNlOjpjb3VudChfX3gpOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKHRoaXMpOworICAgICAgICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omxvd2VyX2JvdW5kKF9feCkpOyAKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSh0aGlzKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpKTsgCisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUodGhpcyk7CisgICAgICAgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6dXBwZXJfYm91bmQoX194KSk7IAorICAgICAgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKHRoaXMpOworICAgICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCkpOyAKKyAgICAgIH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisJX0Jhc2U6OmVxdWFsX3JhbmdlKF9feCk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0KSwKKwkJCSAgICAgIGl0ZXJhdG9yKF9fcmVzLnNlY29uZCkpOworICAgICAgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfZmluZCh0aGlzLCBzaXplKCkpOworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9jb25zdF9pdGVyYXRvciwgX0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9fcmVzID0KKwlfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX19yZXMuc2Vjb25kKSk7CisgICAgICB9CisKKyAgICAgIF9CYXNlJiAKKyAgICAgIF9NX2Jhc2UoKSBfR0xJQkNYWF9OT0VYQ0VQVCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVCB7IHJldHVybiAqdGhpczsgfQorCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyAKKyAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKCZfX2xocyk7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyAKKyAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKCZfX2xocyk7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsKKyAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKCZfX2xocyk7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19yaHMpOworICAgICAgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8IF9fcmhzLl9NX2Jhc2UoKTsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19saHMpOworICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoJl9fcmhzKTsKKyAgICAgIHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeworICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoJl9fbGhzKTsKKyAgICAgIF9fcHJvZmN4eF9tYXBfdG9fdW5vcmRlcmVkX21hcF9pbnZhbGlkYXRlKCZfX3Jocyk7CisgICAgICByZXR1cm4gX19saHMuX01fYmFzZSgpID49IF9fcmhzLl9NX2Jhc2UoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7CisgICAgICBfX3Byb2ZjeHhfbWFwX3RvX3Vub3JkZXJlZF9tYXBfaW52YWxpZGF0ZSgmX19saHMpOworICAgICAgX19wcm9mY3h4X21hcF90b191bm9yZGVyZWRfbWFwX2ludmFsaWRhdGUoJl9fcmhzKTsKKyAgICAgIHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwKKwkgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAobWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKK30gLy8gbmFtZXNwYWNlIF9fcHJvZmlsZQorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL211bHRpbWFwLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvbXVsdGltYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmNkMDIwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL211bHRpbWFwLmgKQEAgLTAsMCArMSw0MDggQEAKKy8vIFByb2ZpbGluZyBtdWx0aW1hcCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9tdWx0aW1hcC5oCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfTVVMVElNQVBfSAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX01VTFRJTUFQX0ggMQorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19wcm9maWxlCit7CisgIC8vLyBDbGFzcyBzdGQ6Om11bHRpbWFwIHdyYXBwZXIgd2l0aCBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIG11bHRpbWFwCisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0M6Om11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfR0xJQkNYWF9TVERfQzo6bXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4gX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlczoKKyAgICAgIHR5cGVkZWYgX0tleQkJCQkgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfVHAJCQkJICAgICBtYXBwZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9BbGxvY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZWZlcmVuY2UgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgICAgICAgICAgICAgICBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yICAgICAgICAgY29uc3RfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZXZlcnNlX2l0ZXJhdG9yICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpwb2ludGVyICAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIC8vIDIzLjMuMS4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkJCWNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICAgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIG11bHRpbWFwKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBtdWx0aW1hcChtdWx0aW1hcCYmIF9feCkKKyAgICAgIG5vZXhjZXB0KGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPF9Db21wYXJlPjo6dmFsdWUpCisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKQorICAgICAgeyB9CisKKyAgICAgIG11bHRpbWFwKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jID0gX0NvbXBhcmUoKSwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19jLCBfX2EpIHsgfQorI2VuZGlmCisKKyAgICAgIH5tdWx0aW1hcCgpIF9HTElCQ1hYX05PRVhDRVBUIHsgfQorCisgICAgICBtdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIG11bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KG11bHRpbWFwJiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBtdWx0aW1hcCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW1wbGFjZV9oaW50KF9fcG9zLAorCQkJCQkgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pKTsKKwl9CisjZW5kaWYKKyAgICAgIAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9feCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwKKwkJCQkJCSAgICBfUGFpciYmPjo6dmFsdWU+Ojp0eXBlPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBpbnNlcnQoX1BhaXImJiBfX3gpCisgICAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoc3RkOjpmb3J3YXJkPF9QYWlyPihfX3gpKSk7IH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2xpc3QpCisgICAgICB7IF9CYXNlOjppbnNlcnQoX19saXN0KTsgfQorI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyNlbHNlCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorI2VuZGlmCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24sIF9feCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwKKwkJCQkJCSAgICBfUGFpciYmPjo6dmFsdWU+Ojp0eXBlPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwgX1BhaXImJiBfX3gpCisgICAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbiwKKwkJCQkJc3RkOjpmb3J3YXJkPF9QYWlyPihfX3gpKSk7IH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgICB7IF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbikpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pKTsgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uKTsgfQorI2VuZGlmCisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBfX3ZpY3RpbXMgPSB0aGlzLT5lcXVhbF9yYW5nZShfX3gpOworCXNpemVfdHlwZSBfX2NvdW50ID0gMDsKKwl3aGlsZSAoX192aWN0aW1zLmZpcnN0ICE9IF9fdmljdGltcy5zZWNvbmQpCisJeworCSAgaXRlcmF0b3IgX192aWN0aW0gPSBfX3ZpY3RpbXMuZmlyc3QrKzsKKwkgIF9CYXNlOjplcmFzZShfX3ZpY3RpbSk7CisJICArK19fY291bnQ7CisJfQorCXJldHVybiBfX2NvdW50OworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QsIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX2ZpcnN0LCBfX2xhc3QpKTsgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsgX0Jhc2U6OmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBzd2FwKG11bHRpbWFwJiBfX3gpCisgICAgICB7IF9CYXNlOjpzd2FwKF9feCk7IH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyB0aGlzLT5lcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KKworICAgICAgLy8gb2JzZXJ2ZXJzOgorICAgICAgdXNpbmcgX0Jhc2U6OmtleV9jb21wOworICAgICAgdXNpbmcgX0Jhc2U6OnZhbHVlX2NvbXA7CisKKyAgICAgIC8vIDIzLjMuMS4zIG11bHRpbWFwIG9wZXJhdGlvbnM6CisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpjb3VudDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6bG93ZXJfYm91bmQoX194KSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6bG93ZXJfYm91bmQoX194KSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6dXBwZXJfYm91bmQoX194KSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6dXBwZXJfYm91bmQoX194KSk7IH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisJX0Jhc2U6OmVxdWFsX3JhbmdlKF9feCk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcmVzLmZpcnN0KSwKKwkJCSAgICAgIGl0ZXJhdG9yKF9fcmVzLnNlY29uZCkpOworICAgICAgfQorCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2NvbnN0X2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9jb25zdF9pdGVyYXRvciwgX0Jhc2VfY29uc3RfaXRlcmF0b3I+IF9fcmVzID0KKwlfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoY29uc3RfaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJICAgICAgY29uc3RfaXRlcmF0b3IoX19yZXMuc2Vjb25kKSk7CisgICAgICB9CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpIF9HTElCQ1hYX05PRVhDRVBUICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUIHsgcmV0dXJuICp0aGlzOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPCBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCisJICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgbXVsdGltYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19wcm9maWxlCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvbXVsdGlzZXQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9tdWx0aXNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzQ2YjUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvbXVsdGlzZXQuaApAQCAtMCwwICsxLDM5MyBAQAorLy8gUHJvZmlsaW5nIG11bHRpc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL211bHRpc2V0LmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcHJvZmlsZSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9NVUxUSVNFVF9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfTVVMVElTRVRfSCAxCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgLy8vIENsYXNzIHN0ZDo6bXVsdGlzZXQgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPF9LZXk+ID4KKyAgICBjbGFzcyBtdWx0aXNldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9DOjptdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9DOjptdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4gX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlczoKKyAgICAgIHR5cGVkZWYgX0tleQkJCQkgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfS2V5CQkJCSAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUJCQkJICAgICBrZXlfY29tcGFyZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmUJCQkJICAgICB2YWx1ZV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJICAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnJlZmVyZW5jZQkgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlICAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmV2ZXJzZV9pdGVyYXRvciAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgICBjb25zdF9wb2ludGVyOworCisgICAgICAvLyAyMy4zLjMuMSBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgorICAgICAgZXhwbGljaXQgbXVsdGlzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJCQljb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisgICAgICAgIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkJIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCQkgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorCTogX0Jhc2UoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsIF9fYSkgeyB9CisKKyAgICAgIG11bHRpc2V0KGNvbnN0IG11bHRpc2V0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIG11bHRpc2V0KGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBtdWx0aXNldChtdWx0aXNldCYmIF9feCkKKyAgICAgIG5vZXhjZXB0KGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPF9Db21wYXJlPjo6dmFsdWUpCisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKQorICAgICAgeyB9CisKKyAgICAgIG11bHRpc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCSAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKKwkgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19jb21wLCBfX2EpIHsgfQorI2VuZGlmCisKKyAgICAgIH5tdWx0aXNldCgpIF9HTElCQ1hYX05PRVhDRVBUIHsgfQorCisgICAgICBtdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBtdWx0aXNldCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIG11bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KG11bHRpc2V0JiYgX194KQorICAgICAgeworCS8vIE5COiBEUiAxMjA0LgorCS8vIE5COiBEUiA2NzUuCisJdGhpcy0+Y2xlYXIoKTsKKwl0aGlzLT5zd2FwKF9feCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBtdWx0aXNldCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2UoX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2Uoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19wb3MsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZW1wbGFjZV9oaW50KF9fcG9zLAorCQkJCQkgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pKTsKKwl9CisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KF9feCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6aW5zZXJ0KHN0ZDo6bW92ZShfX3gpKSk7IH0KKyNlbmRpZgorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbiwgX194KSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwgdmFsdWVfdHlwZSYmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbiwgc3RkOjptb3ZlKF9feCkpKTsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCisgICAgICAgIHsgX0Jhc2U6Omluc2VydChfX2ZpcnN0LCBfX2xhc3QpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IF9CYXNlOjppbnNlcnQoX19sKTsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbikKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uKSk7IH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyBfQmFzZTo6ZXJhc2UoX19wb3NpdGlvbik7IH0KKyNlbmRpZgorCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gX192aWN0aW1zID0gdGhpcy0+ZXF1YWxfcmFuZ2UoX194KTsKKwlzaXplX3R5cGUgX19jb3VudCA9IDA7CisJd2hpbGUgKF9fdmljdGltcy5maXJzdCAhPSBfX3ZpY3RpbXMuc2Vjb25kKQorCXsKKwkgIGl0ZXJhdG9yIF9fdmljdGltID0gX192aWN0aW1zLmZpcnN0Kys7CisJICBfQmFzZTo6ZXJhc2UoX192aWN0aW0pOworCSAgKytfX2NvdW50OworCX0KKwlyZXR1cm4gX19jb3VudDsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19maXJzdCwgX19sYXN0KSk7IH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9CYXNlOjplcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc3dhcChtdWx0aXNldCYgX194KQorICAgICAgeyBfQmFzZTo6c3dhcChfX3gpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgdGhpcy0+ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CisKKyAgICAgIC8vIG9ic2VydmVyczoKKyAgICAgIHVzaW5nIF9CYXNlOjprZXlfY29tcDsKKyAgICAgIHVzaW5nIF9CYXNlOjp2YWx1ZV9jb21wOworCisgICAgICAvLyBtdWx0aXNldCBvcGVyYXRpb25zOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpmaW5kKF9feCkpOyB9CisKKyAgICAgIHVzaW5nIF9CYXNlOjpjb3VudDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6bG93ZXJfYm91bmQoX194KSk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjp1cHBlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCkpOyB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBfQmFzZV9pdGVyYXRvcj4gX19yZXMgPQorICAgICAgICBfQmFzZTo6ZXF1YWxfcmFuZ2UoX194KTsKKwlyZXR1cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IoX19yZXMuZmlyc3QpLAorCQkJICAgICAgaXRlcmF0b3IoX19yZXMuc2Vjb25kKSk7CisgICAgICB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgc3RkOjpwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisgICAgICAgIF9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihjb25zdF9pdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkgICAgICBjb25zdF9pdGVyYXRvcihfX3Jlcy5zZWNvbmQpKTsKKyAgICAgIH0KKworICAgICAgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgX0dMSUJDWFhfTk9FWENFUFQgICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgY29uc3QgX0Jhc2UmCisgICAgICBfTV9iYXNlKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID09IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDw9IF9fcmhzLl9NX2Jhc2UoKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aXNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgdm9pZAorICAgIHN3YXAobXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3gsCisJIG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5zd2FwKF9feSk7IH0KKworfSAvLyBuYW1lc3BhY2UgX19wcm9maWxlCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvc2V0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL3NldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGUwNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL3NldApAQCAtMCwwICsxLDM1IEBACisvLyBQcm9maWxpbmcgc2V0L211bHRpc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvc2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfU0VUCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfU0VUIDEKKworI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxwcm9maWxlL3NldC5oPgorI2luY2x1ZGUgPHByb2ZpbGUvbXVsdGlzZXQuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvc2V0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkMGJjNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS9zZXQuaApAQCAtMCwwICsxLDQwNyBAQAorLy8gUHJvZmlsaW5nIHNldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS9zZXQuaAorICogIFRoaXMgZmlsZSBpcyBhIEdOVSBwcm9maWxlIGV4dGVuc2lvbiB0byB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnkuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9QUk9GSUxFX1NFVF9ICisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfU0VUX0ggMQorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpIAoreworbmFtZXNwYWNlIF9fcHJvZmlsZQoreworICAvLy8gQ2xhc3Mgc3RkOjpzZXQgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX0NvbXBhcmUgPSBzdGQ6Omxlc3M8X0tleT4sCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IHN0ZDo6YWxsb2NhdG9yPF9LZXk+ID4KKyAgICBjbGFzcyBzZXQKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQzo6c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jYXRvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9DOjpzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXM6CisgICAgICB0eXBlZGVmIF9LZXkJCQkJICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfS2V5CQkJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQ29tcGFyZQkJCQkgICAga2V5X2NvbXBhcmU7CisgICAgICB0eXBlZGVmIF9Db21wYXJlCQkJCSAgICB2YWx1ZV9jb21wYXJlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmV2ZXJzZV9pdGVyYXRvciAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6ZGlmZmVyZW5jZV90eXBlICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnBvaW50ZXIgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcG9pbnRlciAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisKKyAgICAgIC8vIDIzLjMuMy4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdCBzZXQoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJCSAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsCisJICAgICAgIHR5cGVuYW1lID0gc3RkOjpfUmVxdWlyZUlucHV0SXRlcjxfSW5wdXRJdGVyYXRvcj4+CisjZWxzZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisjZW5kaWYKKyAgICAgICAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKKwkgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCisJICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLCBfX2EpIHsgfQorCisgICAgICBzZXQoY29uc3Qgc2V0JiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgeyB9CisKKyAgICAgIHNldChjb25zdCBfQmFzZSYgX194KQorICAgICAgOiBfQmFzZShfX3gpIHsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc2V0KHNldCYmIF9feCkKKyAgICAgIG5vZXhjZXB0KGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlPF9Db21wYXJlPjo6dmFsdWUpCisgICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKQorICAgICAgeyB9CisKKyAgICAgIHNldChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAorCSAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbCwgX19jb21wLCBfX2EpIHsgfQorI2VuZGlmCisKKyAgICAgIH5zZXQoKSBfR0xJQkNYWF9OT0VYQ0VQVCB7IH0KKworICAgICAgc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHNldCYgX194KQorICAgICAgeworCSpzdGF0aWNfY2FzdDxfQmFzZSo+KHRoaXMpID0gX194OworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHNldCYKKyAgICAgIG9wZXJhdG9yPShzZXQmJiBfX3gpCisgICAgICB7CisJLy8gTkI6IERSIDEyMDQuCisJLy8gTkI6IERSIDY3NS4KKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPnN3YXAoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHNldCYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwl0aGlzLT5jbGVhcigpOworCXRoaXMtPmluc2VydChfX2wpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB1c2luZyBfQmFzZTo6Z2V0X2FsbG9jYXRvcjsKKworICAgICAgLy8gaXRlcmF0b3JzOgorICAgICAgaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmJlZ2luKCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlbmQoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVuZCgpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjplbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmJlZ2luKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yCisgICAgICByZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgY3JlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorI2VuZGlmCisKKyAgICAgIC8vIGNhcGFjaXR5OgorICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworICAgICAgdXNpbmcgX0Jhc2U6OnNpemU7CisgICAgICB1c2luZyBfQmFzZTo6bWF4X3NpemU7CisKKyAgICAgIC8vIG1vZGlmaWVyczoKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBhdXRvIF9fcmVzID0gX0Jhc2U6OmVtcGxhY2Uoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIHJldHVybiBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+KGl0ZXJhdG9yKF9fcmVzLmZpcnN0KSwKKwkJCQkJICAgX19yZXMuc2Vjb25kKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9oaW50KGNvbnN0X2l0ZXJhdG9yIF9fcG9zLCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVtcGxhY2VfaGludChfX3BvcywKKwkJCQkJICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSk7CisJfQorI2VuZGlmCisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBib29sPiBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX194KTsKKwlyZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkJCSBfX3Jlcy5zZWNvbmQpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KHZhbHVlX3R5cGUmJiBfX3gpCisgICAgICB7CisJdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX0Jhc2VfaXRlcmF0b3I7CisJc3RkOjpwYWlyPF9CYXNlX2l0ZXJhdG9yLCBib29sPiBfX3JlcworCSAgPSBfQmFzZTo6aW5zZXJ0KHN0ZDo6bW92ZShfX3gpKTsKKwlyZXR1cm4gc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPihpdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkJCSBfX3Jlcy5zZWNvbmQpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBfX3gpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uLCB2YWx1ZV90eXBlJiYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6Omluc2VydChfX3Bvc2l0aW9uLCBzdGQ6Om1vdmUoX194KSkpOyB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgICAgeyBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgX0Jhc2U6Omluc2VydChfX2wpOyB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmVyYXNlKF9fcG9zaXRpb24pKTsgfQorI2Vsc2UKKyAgICAgIHZvaWQKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCisgICAgICB7IF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uKTsgfQorI2VuZGlmCisKKyAgICAgIHNpemVfdHlwZQorICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwlpdGVyYXRvciBfX3ZpY3RpbSA9IGZpbmQoX194KTsKKwlpZiAoX192aWN0aW0gPT0gZW5kKCkpCisgICAgICAgICAgcmV0dXJuIDA7CisJZWxzZQorICAgICAgICB7CisJICBfQmFzZTo6ZXJhc2UoX192aWN0aW0pOworCSAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6ZXJhc2UoX19maXJzdCwgX19sYXN0KSk7IH0KKyNlbHNlCisgICAgICB2b2lkCisgICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCisgICAgICB7IF9CYXNlOjplcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CisjZW5kaWYKKworICAgICAgdm9pZAorICAgICAgc3dhcChzZXQmIF9feCkKKyAgICAgIHsgX0Jhc2U6OnN3YXAoX194KTsgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHRoaXMtPmVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQorCisgICAgICAvLyBvYnNlcnZlcnM6CisgICAgICB1c2luZyBfQmFzZTo6a2V5X2NvbXA7CisgICAgICB1c2luZyBfQmFzZTo6dmFsdWVfY29tcDsKKworICAgICAgLy8gc2V0IG9wZXJhdGlvbnM6CisgICAgICBpdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSk7IH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmZpbmQoX194KSk7IH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmNvdW50OworCisgICAgICBpdGVyYXRvcgorICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjpsb3dlcl9ib3VuZChfX3gpKTsgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMTQuIHNldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6Omxvd2VyX2JvdW5kKF9feCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KQorICAgICAgeyByZXR1cm4gaXRlcmF0b3IoX0Jhc2U6OnVwcGVyX2JvdW5kKF9feCkpOyB9CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIxNC4gc2V0OjpmaW5kKCkgbWlzc2luZyBjb25zdCBvdmVybG9hZAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6dXBwZXJfYm91bmQoX194KSk7IH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkKKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfQmFzZV9pdGVyYXRvcjsKKwlzdGQ6OnBhaXI8X0Jhc2VfaXRlcmF0b3IsIF9CYXNlX2l0ZXJhdG9yPiBfX3JlcyA9CisgICAgICAgIF9CYXNlOjplcXVhbF9yYW5nZShfX3gpOworCXJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihfX3Jlcy5maXJzdCksCisJCQkgICAgICBpdGVyYXRvcihfX3Jlcy5zZWNvbmQpKTsKKyAgICAgIH0KKworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjE0LiBzZXQ6OmZpbmQoKSBtaXNzaW5nIGNvbnN0IG92ZXJsb2FkCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+CisgICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAorICAgICAgeworCXR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIF9CYXNlX2l0ZXJhdG9yOworCXN0ZDo6cGFpcjxfQmFzZV9pdGVyYXRvciwgX0Jhc2VfaXRlcmF0b3I+IF9fcmVzID0KKyAgICAgICAgX0Jhc2U6OmVxdWFsX3JhbmdlKF9feCk7CisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNvbnN0X2l0ZXJhdG9yKF9fcmVzLmZpcnN0KSwKKwkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yKF9fcmVzLnNlY29uZCkpOworICAgICAgfQorCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBfR0xJQkNYWF9OT0VYQ0VQVCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVCB7IHJldHVybiAqdGhpczsgfQorCisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA9PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSAhPSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPCBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA8PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2NhdG9yPiYgX19saHMsCisJICAgICAgIGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLl9NX2Jhc2UoKSA+PSBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgICAgICBjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPiBfX3Jocy5fTV9iYXNlKCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jYXRvcj4KKyAgICB2b2lkCisgICAgc3dhcChzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvY2F0b3I+JiBfX3gsCisJIHNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jYXRvcj4mIF9feSkKKyAgICB7IHJldHVybiBfX3guc3dhcChfX3kpOyB9CisKK30gLy8gbmFtZXNwYWNlIF9fcHJvZmlsZQorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL3Vub3JkZXJlZF9iYXNlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvdW5vcmRlcmVkX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTk0MjEyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL3Vub3JkZXJlZF9iYXNlLmgKQEAgLTAsMCArMSwyNjIgQEAKKy8vIFByb2ZpbGluZyB1bm9yZGVyZWQgY29udGFpbmVycyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBwcm9maWxlL3Vub3JkZXJlZF9iYXNlLmgKKyAqICBUaGlzIGZpbGUgaXMgYSBHTlUgcHJvZmlsZSBleHRlbnNpb24gdG8gdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUFJPRklMRV9VTk9SREVSRUQKKyNkZWZpbmUgX0dMSUJDWFhfUFJPRklMRV9VTk9SREVSRUQgMQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Vub3JkZXJlZENvbnQsCisJICAgdHlwZW5hbWUgX1ZhbHVlLCBib29sIF9DYWNoZV9oYXNoX2NvZGU+CisgICAgc3RydWN0IF9CdWNrZXRfaW5kZXhfaGVscGVyOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbm9yZGVyZWRDb250LCB0eXBlbmFtZSBfVmFsdWU+CisgICAgc3RydWN0IF9CdWNrZXRfaW5kZXhfaGVscGVyPF9Vbm9yZGVyZWRDb250LCBfVmFsdWUsIHRydWU+CisgICAgeworICAgICAgc3RhdGljIHN0ZDo6c2l6ZV90CisgICAgICBidWNrZXQoY29uc3QgX1Vub3JkZXJlZENvbnQmIF9fdWMsCisJICAgICBjb25zdCBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+KiBfX25vZGUpCisgICAgICB7IHJldHVybiBfX25vZGUtPl9NX2hhc2hfY29kZSAlIF9fdWMuYnVja2V0X2NvdW50KCk7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbm9yZGVyZWRDb250LCB0eXBlbmFtZSBfVmFsdWU+CisgICAgc3RydWN0IF9CdWNrZXRfaW5kZXhfaGVscGVyPF9Vbm9yZGVyZWRDb250LCBfVmFsdWUsIGZhbHNlPgorICAgIHsKKyAgICAgIHN0YXRpYyBzdGQ6OnNpemVfdAorICAgICAgYnVja2V0KGNvbnN0IF9Vbm9yZGVyZWRDb250JiBfX3VjLAorCSAgICAgY29uc3QgX19kZXRhaWw6Ol9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qIF9fbm9kZSkKKyAgICAgIHsgcmV0dXJuIF9fdWMuYnVja2V0KF9fbm9kZS0+X01fdik7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbm9yZGVyZWRDb250LCB0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfTWFwcGVkPgorICAgIHN0cnVjdCBfQnVja2V0X2luZGV4X2hlbHBlcjxfVW5vcmRlcmVkQ29udCwKKwkJCQlzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX01hcHBlZD4sIGZhbHNlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9NYXBwZWQ+IF9WYWx1ZTsKKworICAgICAgc3RhdGljIHN0ZDo6c2l6ZV90CisgICAgICBidWNrZXQoY29uc3QgX1Vub3JkZXJlZENvbnQmIF9fdWMsCisJICAgICBjb25zdCBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiogX19ub2RlKQorICAgICAgeyByZXR1cm4gX191Yy5idWNrZXQoX19ub2RlLT5fTV92LmZpcnN0KTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Vub3JkZXJlZENvbnQsIHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfQ2FjaGVfaGFzaF9jb2RlPgorICAgIHN0ZDo6c2l6ZV90CisgICAgX19nZXRfYnVja2V0X2luZGV4KGNvbnN0IF9Vbm9yZGVyZWRDb250JiBfX3VjLAorCQkgICAgICAgY29uc3QgX19kZXRhaWw6Ol9IYXNoX25vZGU8X1ZhbHVlLCBfQ2FjaGVfaGFzaF9jb2RlPiogX19ub2RlKQorICAgIHsKKyAgICAgIHVzaW5nIF9fYnVja2V0X2luZGV4X2hlbHBlcgorCT0gX0J1Y2tldF9pbmRleF9oZWxwZXI8X1Vub3JkZXJlZENvbnQsIF9WYWx1ZSwgX0NhY2hlX2hhc2hfY29kZT47CisgICAgICByZXR1cm4gX19idWNrZXRfaW5kZXhfaGVscGVyOjpidWNrZXQoX191YywgX19ub2RlKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Vub3JkZXJlZENvbnQsCisJICAgdHlwZW5hbWUgX1ZhbHVlLCBib29sIF9DYWNoZV9oYXNoX2NvZGU+CisgICAgc3RydWN0IF9FcXVhbF9oZWxwZXI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Vub3JkZXJlZENvbnQsIHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBzdHJ1Y3QgX0VxdWFsX2hlbHBlcjxfVW5vcmRlcmVkQ29udCwgX1ZhbHVlLCB0cnVlPgorICAgIHsKKyAgICAgIHN0YXRpYyBzdGQ6OnNpemVfdAorICAgICAgYXJlX2VxdWFsKGNvbnN0IF9Vbm9yZGVyZWRDb250JiBfX3VjLAorCQljb25zdCBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+KiBfX2xocywKKwkJY29uc3QgX19kZXRhaWw6Ol9IYXNoX25vZGU8X1ZhbHVlLCB0cnVlPiogX19yaHMpCisgICAgICB7CisJcmV0dXJuIF9fbGhzLT5fTV9oYXNoX2NvZGUgPT0gX19yaHMtPl9NX2hhc2hfY29kZQorCSAgJiYgX191Yy5rZXlfZXEoKShfX2xocy0+X01fdiwgX19yaHMtPl9NX3YpOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Vub3JkZXJlZENvbnQsCisJICAgdHlwZW5hbWUgX1ZhbHVlPgorICAgIHN0cnVjdCBfRXF1YWxfaGVscGVyPF9Vbm9yZGVyZWRDb250LCBfVmFsdWUsIGZhbHNlPgorICAgIHsKKyAgICAgIHN0YXRpYyBzdGQ6OnNpemVfdAorICAgICAgYXJlX2VxdWFsKGNvbnN0IF9Vbm9yZGVyZWRDb250JiBfX3VjLAorCQljb25zdCBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiogX19saHMsCisJCWNvbnN0IF9fZGV0YWlsOjpfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiBfX3JocykKKyAgICAgIHsgcmV0dXJuIF9fdWMua2V5X2VxKCkoX19saHMtPl9NX3YsIF9fcmhzLT5fTV92KTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Vub3JkZXJlZENvbnQsCisJICAgdHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX01hcHBlZD4KKyAgICBzdHJ1Y3QgX0VxdWFsX2hlbHBlcjxfVW5vcmRlcmVkQ29udCwgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9NYXBwZWQ+LCB0cnVlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9NYXBwZWQ+IF9WYWx1ZTsKKworICAgICAgc3RhdGljIHN0ZDo6c2l6ZV90CisgICAgICBhcmVfZXF1YWwoY29uc3QgX1Vub3JkZXJlZENvbnQmIF9fdWMsCisJCWNvbnN0IF9fZGV0YWlsOjpfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qIF9fbGhzLAorCQljb25zdCBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+KiBfX3JocykKKyAgICAgIHsKKwlyZXR1cm4gX19saHMtPl9NX2hhc2hfY29kZSA9PSBfX3Jocy0+X01faGFzaF9jb2RlCisJICAmJiBfX3VjLmtleV9lcSgpKF9fbGhzLT5fTV92LmZpcnN0LCBfX3Jocy0+X01fdi5maXJzdCk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5vcmRlcmVkQ29udCwKKwkgICB0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfTWFwcGVkPgorICAgIHN0cnVjdCBfRXF1YWxfaGVscGVyPF9Vbm9yZGVyZWRDb250LCBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX01hcHBlZD4sIGZhbHNlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9NYXBwZWQ+IF9WYWx1ZTsKKworICAgICAgc3RhdGljIHN0ZDo6c2l6ZV90CisgICAgICBhcmVfZXF1YWwoY29uc3QgX1Vub3JkZXJlZENvbnQmIF9fdWMsCisJCWNvbnN0IF9fZGV0YWlsOjpfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiBfX2xocywKKwkJY29uc3QgX19kZXRhaWw6Ol9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qIF9fcmhzKQorICAgICAgeyByZXR1cm4gX191Yy5rZXlfZXEoKShfX2xocy0+X01fdi5maXJzdCwgX19yaHMtPl9NX3YuZmlyc3QpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5vcmRlcmVkQ29udCwgdHlwZW5hbWUgX1ZhbHVlLCBib29sIF9DYWNoZV9oYXNoX2NvZGU+CisgICAgYm9vbAorICAgIF9fYXJlX2VxdWFsKGNvbnN0IF9Vbm9yZGVyZWRDb250JiBfX3VjLAorCQljb25zdCBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIF9DYWNoZV9oYXNoX2NvZGU+KiBfX2xocywKKwkJY29uc3QgX19kZXRhaWw6Ol9IYXNoX25vZGU8X1ZhbHVlLCBfQ2FjaGVfaGFzaF9jb2RlPiogX19yaHMpCisgIHsKKyAgICB1c2luZyBfX2VxdWFsX2hlbHBlcgorICAgICAgPSBfRXF1YWxfaGVscGVyPF9Vbm9yZGVyZWRDb250LCBfVmFsdWUsIF9DYWNoZV9oYXNoX2NvZGU+OworICAgIHJldHVybiBfX2VxdWFsX2hlbHBlcjo6YXJlX2VxdWFsKF9fdWMsIF9fbGhzLCBfX3Jocyk7CisgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5vcmRlcmVkQ29udCwgYm9vbCBfVW5pcXVlX2tleXM+CisgICAgY2xhc3MgX1Vub3JkZXJlZF9wcm9maWxlCisgICAgeworICAgICAgX1Vub3JkZXJlZENvbnQmCisgICAgICBfTV9jb25qdXJlKCkKKyAgICAgIHsgcmV0dXJuICooc3RhdGljX2Nhc3Q8X1Vub3JkZXJlZENvbnQqPih0aGlzKSk7IH0KKworICAgICAgdXNpbmcgX191bmlxdWVfa2V5cyA9IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX1VuaXF1ZV9rZXlzPjsKKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9Vbm9yZGVyZWRfcHJvZmlsZSgpCisgICAgICB7CisJYXV0byYgX191YyA9IF9NX2Nvbmp1cmUoKTsKKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9jb25zdHJ1Y3QoJl9fdWMsIF9fdWMuYnVja2V0X2NvdW50KCkpOworCV9fcHJvZmN4eF9oYXNodGFibGVfY29uc3RydWN0MigmX191Yyk7CisgICAgICB9CisgICAgICBfVW5vcmRlcmVkX3Byb2ZpbGUoY29uc3QgX1Vub3JkZXJlZF9wcm9maWxlJikKKwk6IF9Vbm9yZGVyZWRfcHJvZmlsZSgpIHsgfQorICAgICAgX1Vub3JkZXJlZF9wcm9maWxlKF9Vbm9yZGVyZWRfcHJvZmlsZSYmKQorCTogX1Vub3JkZXJlZF9wcm9maWxlKCkgeyB9CisKKyAgICAgIH5fVW5vcmRlcmVkX3Byb2ZpbGUoKSBub2V4Y2VwdAorICAgICAgeworCWF1dG8mIF9fdWMgPSBfTV9jb25qdXJlKCk7CisgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfZGVzdHJ1Y3QoJl9fdWMsIF9fdWMuYnVja2V0X2NvdW50KCksIF9fdWMuc2l6ZSgpKTsKKyAgICAgICAgX01fcHJvZmlsZV9kZXN0cnVjdCgpOworICAgICAgfQorCisgICAgICBfVW5vcmRlcmVkX3Byb2ZpbGUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1Vub3JkZXJlZF9wcm9maWxlJikgPSBkZWZhdWx0OworCisgICAgICBfVW5vcmRlcmVkX3Byb2ZpbGUmCisgICAgICBvcGVyYXRvcj0oX1Vub3JkZXJlZF9wcm9maWxlJiYpID0gZGVmYXVsdDsKKworICAgICAgdm9pZAorICAgICAgX01fcHJvZmlsZV9kZXN0cnVjdCgpCisgICAgICB7CisJaWYgKCFfX3Byb2ZjeHhfaW5lZmZpY2llbnRfaGFzaF9pc19vbigpKQorCSAgcmV0dXJuOworCisJX01fcHJvZmlsZV9kZXN0cnVjdChfX3VuaXF1ZV9rZXlzKCkpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX3Byb2ZpbGVfZGVzdHJ1Y3Qoc3RkOjp0cnVlX3R5cGUpOworCisgICAgICB2b2lkCisgICAgICBfTV9wcm9maWxlX2Rlc3RydWN0KHN0ZDo6ZmFsc2VfdHlwZSk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5vcmRlcmVkQ29udCwgYm9vbCBfVW5pcXVlX2tleXM+CisgICAgdm9pZAorICAgIF9Vbm9yZGVyZWRfcHJvZmlsZTxfVW5vcmRlcmVkQ29udCwgX1VuaXF1ZV9rZXlzPjo6CisgICAgX01fcHJvZmlsZV9kZXN0cnVjdChzdGQ6OnRydWVfdHlwZSkKKyAgICB7CisgICAgICBhdXRvJiBfX3VjID0gX01fY29uanVyZSgpOworICAgICAgc3RkOjpzaXplX3QgX19ob3BzID0gMCwgX19sYyA9IDAsIF9fY2hhaW4gPSAwOworICAgICAgYXV0byBfX2l0ID0gX191Yy5iZWdpbigpOworICAgICAgd2hpbGUgKF9faXQgIT0gX191Yy5lbmQoKSkKKwl7CisJICBhdXRvIF9fYmt0ID0gX19nZXRfYnVja2V0X2luZGV4KF9fdWMsIF9faXQuX01fY3VyKTsKKwkgIGF1dG8gX19saXQgPSBfX3VjLmJlZ2luKF9fYmt0KTsKKwkgIGF1dG8gX19sZW5kID0gX191Yy5lbmQoX19ia3QpOworCSAgZm9yICgrK19faXQsICsrX19saXQ7IF9fbGl0ICE9IF9fbGVuZDsgKytfX2l0LCArK19fbGl0KQorCSAgICArK19fY2hhaW47CisJICBpZiAoX19jaGFpbikKKwkgICAgeworCSAgICAgICsrX19jaGFpbjsKKwkgICAgICBfX2xjID0gX19sYyA+IF9fY2hhaW4gPyBfX2xjIDogX19jaGFpbjsKKwkgICAgICBfX2hvcHMgKz0gX19jaGFpbiAqIChfX2NoYWluIC0gMSkgLyAyOworCSAgICAgIF9fY2hhaW4gPSAwOworCSAgICB9CisJfQorICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdDIoJl9fdWMsIF9fbGMsIF9fdWMuc2l6ZSgpLCBfX2hvcHMpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5vcmRlcmVkQ29udCwgYm9vbCBfVW5pcXVlX2tleXM+CisgICAgdm9pZAorICAgIF9Vbm9yZGVyZWRfcHJvZmlsZTxfVW5vcmRlcmVkQ29udCwgX1VuaXF1ZV9rZXlzPjo6CisgICAgX01fcHJvZmlsZV9kZXN0cnVjdChzdGQ6OmZhbHNlX3R5cGUpCisgICAgeworICAgICAgYXV0byYgX191YyA9IF9NX2Nvbmp1cmUoKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9faG9wcyA9IDAsIF9fbGMgPSAwLCBfX2NoYWluID0gMCwgX191bmlxdWVfc2l6ZSA9IDA7CisgICAgICBhdXRvIF9faXQgPSBfX3VjLmJlZ2luKCk7CisgICAgICB3aGlsZSAoX19pdCAhPSBfX3VjLmVuZCgpKQorCXsKKwkgIGF1dG8gX19ia3QgPSBfX2dldF9idWNrZXRfaW5kZXgoX191YywgX19pdC5fTV9jdXIpOworCSAgYXV0byBfX2xpdCA9IF9fdWMuYmVnaW4oX19ia3QpOworCSAgYXV0byBfX2xlbmQgPSBfX3VjLmVuZChfX2JrdCk7CisJICBhdXRvIF9fcGl0ID0gX19pdDsKKwkgICsrX191bmlxdWVfc2l6ZTsKKwkgIGZvciAoKytfX2l0LCArK19fbGl0OyBfX2xpdCAhPSBfX2xlbmQ7ICsrX19pdCwgKytfX2xpdCkKKwkgICAgeworCSAgICAgIGlmICghX19hcmVfZXF1YWwoX191YywgX19waXQuX01fY3VyLCBfX2l0Ll9NX2N1cikpCisJCXsKKwkJICArK19fY2hhaW47CisJCSAgKytfX3VuaXF1ZV9zaXplOworCQkgIF9fcGl0ID0gX19pdDsKKwkJfQorCSAgICB9CisJICBpZiAoX19jaGFpbikKKwkgICAgeworCSAgICAgICsrX19jaGFpbjsKKwkgICAgICBfX2xjID0gX19sYyA+IF9fY2hhaW4gPyBfX2xjIDogX19jaGFpbjsKKwkgICAgICBfX2hvcHMgKz0gX19jaGFpbiAqIChfX2NoYWluIC0gMSkgLyAyOworCSAgICAgIF9fY2hhaW4gPSAwOworCSAgICB9CisJfQorICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdDIoJl9fdWMsIF9fbGMsIF9fdW5pcXVlX3NpemUsIF9faG9wcyk7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS91bm9yZGVyZWRfbWFwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL3Vub3JkZXJlZF9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliOTQwMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS91bm9yZGVyZWRfbWFwCkBAIC0wLDAgKzEsNTAyIEBACisvLyBQcm9maWxpbmcgdW5vcmRlcmVkX21hcC91bm9yZGVyZWRfbXVsdGltYXAgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS91bm9yZGVyZWRfbWFwCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfVU5PUkRFUkVEX01BUAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1VOT1JERVJFRF9NQVAgMQorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgPHByb2ZpbGUvYmFzZS5oPgorI2luY2x1ZGUgPHByb2ZpbGUvdW5vcmRlcmVkX2Jhc2UuaD4KKworI2RlZmluZSBfR0xJQkNYWF9CQVNFIHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKyNkZWZpbmUgX0dMSUJDWFhfU1REX0JBU0UgX0dMSUJDWFhfU1REX0M6Ol9HTElCQ1hYX0JBU0UKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgX19wcm9maWxlCit7CisgIC8vLyBDbGFzcyBzdGQ6OnVub3JkZXJlZF9tYXAgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9IYXNoID0gc3RkOjpoYXNoPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfbWFwCisgICAgOiBwdWJsaWMgX0dMSUJDWFhfU1REX0JBU0UsCisgICAgICBwdWJsaWMgX1Vub3JkZXJlZF9wcm9maWxlPHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4sCisJCQkJdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9HTElCQ1hYX1NURF9CQVNFIF9CYXNlOworCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBub2V4Y2VwdCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiAqdGhpczsgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X3R5cGUgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjptYXBwZWRfdHlwZSAgICAgIG1hcHBlZF90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAgICBleHBsaWNpdAorICAgICAgdW5vcmRlcmVkX21hcChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorCQkgICAgICBzaXplX3R5cGUgX19uID0gMCwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJICA6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbWFwKGNvbnN0IHVub3JkZXJlZF9tYXAmKSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9tYXAoY29uc3QgX0Jhc2UmIF9feCkKKwk6IF9CYXNlKF9feCkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbWFwKHVub3JkZXJlZF9tYXAmJikgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfbWFwKGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCQkgICAgc2l6ZV90eXBlIF9fbiA9IDAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworICAgICAgdW5vcmRlcmVkX21hcCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB1bm9yZGVyZWRfbWFwJikgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfbWFwJgorICAgICAgb3BlcmF0b3I9KHVub3JkZXJlZF9tYXAmJikgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9NX2Jhc2UoKSA9IF9fbDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgbm9leGNlcHQKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X2hhc2h0YWJsZV9kZXN0cnVjdCh0aGlzLCBfQmFzZTo6YnVja2V0X2NvdW50KCksCisJCQkJICAgICBfQmFzZTo6c2l6ZSgpKTsKKyAgICAgICAgdGhpcy0+X01fcHJvZmlsZV9kZXN0cnVjdCgpOworCV9CYXNlOjpjbGVhcigpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKwkgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gX19yZXMKKwkgICAgPSBfQmFzZTo6ZW1wbGFjZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7CisJICByZXR1cm4gX19yZXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlpdGVyYXRvcgorCWVtcGxhY2VfaGludChjb25zdF9pdGVyYXRvciBfX2l0LCBfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKwkgIGl0ZXJhdG9yIF9fcmVzCisJICAgID0gX0Jhc2U6OmVtcGxhY2VfaGludChfX2l0LCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworCSAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7CisJICByZXR1cm4gX19yZXM7CisJfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoc3RkOjppbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsgCisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOyAKKyAgICAgICAgX0Jhc2U6Omluc2VydChfX2wpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsgCisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisgICAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9fb2JqKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19pdGVyLCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgICB7IAorICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsgCisgICAgICAgIGl0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX2l0ZXIsIF9fdik7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dmFsdWVfdHlwZSwKKwkJCQkJCSAgICBfUGFpciYmPjo6dmFsdWU+Ojp0eXBlPgorICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+CisgICAgICAgIGluc2VydChfUGFpciYmIF9fb2JqKQorICAgICAgICB7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKwkgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4gX19yZXMKKwkgICAgPSBfQmFzZTo6aW5zZXJ0KHN0ZDo6Zm9yd2FyZDxfUGFpcj4oX19vYmopKTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKwkgIHJldHVybiBfX3JlczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2l0ZXIsIF9QYWlyJiYgX192KQorICAgICAgICB7IAorCSAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorCSAgaXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9faXRlciwgc3RkOjpmb3J3YXJkPF9QYWlyPihfX3YpKTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKwkgIHJldHVybiBfX3JlczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCisgICAgICAgIHsKKwkgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOyAKKwkgIF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKwl9CisKKyAgICAgIC8vIG9wZXJhdG9yW10KKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgb3BlcmF0b3JbXShjb25zdCBfS2V5JiBfX2spCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBtYXBwZWRfdHlwZSYgX19yZXMgPSBfTV9iYXNlKClbX19rXTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIG1hcHBlZF90eXBlJgorICAgICAgb3BlcmF0b3JbXShfS2V5JiYgX19rKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgbWFwcGVkX3R5cGUmIF9fcmVzID0gX01fYmFzZSgpW3N0ZDo6bW92ZShfX2spXTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5vcmRlcmVkX21hcCYgX194KQorICAgICAgeyBfQmFzZTo6c3dhcChfX3guX01fYmFzZSgpKTsgfQorCisgICAgICB2b2lkIHJlaGFzaChzaXplX3R5cGUgX19uKQorICAgICAgeworCXNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworCV9CYXNlOjpyZWhhc2goX19uKTsKKwlfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsgCisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01fcHJvZmlsZV9yZXNpemUoc2l6ZV90eXBlIF9fb2xkX3NpemUpCisgICAgICB7CisJc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisJaWYgKF9fb2xkX3NpemUgIT0gX19uZXdfc2l6ZSkKKwkgIF9fcHJvZmN4eF9oYXNodGFibGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIF9fbmV3X3NpemUpOworICAgICAgfQorICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsCisJICAgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfR0xJQkNYWF9TVERfQkFTRSY+KF9feCkgPT0gX195OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyN1bmRlZiBfR0xJQkNYWF9CQVNFCisjdW5kZWYgX0dMSUJDWFhfU1REX0JBU0UKKyNkZWZpbmUgX0dMSUJDWFhfQkFTRSB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKyNkZWZpbmUgX0dMSUJDWFhfU1REX0JBU0UgX0dMSUJDWFhfU1REX0M6Ol9HTElCQ1hYX0JBU0UKKworICAvLy8gQ2xhc3Mgc3RkOjp1bm9yZGVyZWRfbXVsdGltYXAgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9IYXNoID0gc3RkOjpoYXNoPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfbXVsdGltYXAKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQkFTRSwKKyAgICAgIHB1YmxpYyBfVW5vcmRlcmVkX3Byb2ZpbGU8dW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwKKwkJCQkJCSAgIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiwKKwkJCQlmYWxzZT4KKyAgICB7ICAgICAgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9HTElCQ1hYX1NURF9CQVNFIF9CYXNlOworCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBub2V4Y2VwdCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiAqdGhpczsgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X3R5cGUgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgICAgdW5vcmRlcmVkX211bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorCQkJICAgc2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCSAgOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChjb25zdCB1bm9yZGVyZWRfbXVsdGltYXAmKSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChjb25zdCBfQmFzZSYgX194KQorCTogX0Jhc2UoX194KQorICAgICAgeyB9CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcCh1bm9yZGVyZWRfbXVsdGltYXAmJikgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJCQkgc2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdW5vcmRlcmVkX211bHRpbWFwJikgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfbXVsdGltYXAmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX211bHRpbWFwJiYpID0gZGVmYXVsdDsKKworICAgICAgdW5vcmRlcmVkX211bHRpbWFwJgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9NX2Jhc2UoKSA9IF9fbDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGNsZWFyKCkgbm9leGNlcHQKKyAgICAgIHsKKwlfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSwgCisJCQkJICAgICBfQmFzZTo6c2l6ZSgpKTsKKwl0aGlzLT5fTV9wcm9maWxlX2Rlc3RydWN0KCk7CisJX0Jhc2U6OmNsZWFyKCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKwkgIGl0ZXJhdG9yIF9fcmVzCisJICAgID0gX0Jhc2U6OmVtcGxhY2Uoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOworCSAgcmV0dXJuIF9fcmVzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19pdCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisJICBpdGVyYXRvciBfX3JlcworCSAgICA9IF9CYXNlOjplbXBsYWNlX2hpbnQoX19pdCwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOworCSAgcmV0dXJuIF9fcmVzOworCX0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IAorICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgX0Jhc2U6Omluc2VydChfX2wpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX29iaikKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisgICAgICAgIGl0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX29iaik7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faXRlciwgY29uc3QgdmFsdWVfdHlwZSYgX192KQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorICAgICAgICBpdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19pdGVyLCBfX3YpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsgCisgICAgICAgIHJldHVybiBfX3JlczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPHZhbHVlX3R5cGUsCisJCQkJCQkgICAgX1BhaXImJj46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgaXRlcmF0b3IKKyAgICAgICAgaW5zZXJ0KF9QYWlyJiYgX19vYmopCisgICAgICAgIHsKKwkgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworCSAgaXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KHN0ZDo6Zm9yd2FyZDxfUGFpcj4oX19vYmopKTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKwkgIHJldHVybiBfX3JlczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx2YWx1ZV90eXBlLAorCQkJCQkJICAgIF9QYWlyJiY+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGl0ZXJhdG9yCisgICAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2l0ZXIsIF9QYWlyJiYgX192KQorICAgICAgICB7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsgCisJICBpdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19pdGVyLCBzdGQ6OmZvcndhcmQ8X1BhaXI+KF9fdikpOworCSAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorCSAgcmV0dXJuIF9fcmVzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KKyAgICAgICAgdm9pZAorICAgICAgICBpbnNlcnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKKyAgICAgICAgeworCSAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorCSAgX0Jhc2U6Omluc2VydChfX2ZpcnN0LCBfX2xhc3QpOworCSAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorCX0KKworICAgICAgdm9pZAorICAgICAgc3dhcCh1bm9yZGVyZWRfbXVsdGltYXAmIF9feCkKKyAgICAgIHsgX0Jhc2U6OnN3YXAoX194Ll9NX2Jhc2UoKSk7IH0KKworICAgICAgdm9pZAorICAgICAgcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBfQmFzZTo6cmVoYXNoKF9fbik7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKyAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShzaXplX3R5cGUgX19vbGRfc2l6ZSkKKyAgICAgIHsKKwlzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgaWYgKF9fb2xkX3NpemUgIT0gX19uZXdfc2l6ZSkKKyAgICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX3Jlc2l6ZSh0aGlzLCBfX29sZF9zaXplLCBfX25ld19zaXplKTsKKyAgICAgIH0KKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfR0xJQkNYWF9TVERfQkFTRSY+KF9feCkgPT0gX195OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjdW5kZWYgX0dMSUJDWFhfQkFTRQorI3VuZGVmIF9HTElCQ1hYX1NURF9CQVNFCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS91bm9yZGVyZWRfc2V0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9wcm9maWxlL3Vub3JkZXJlZF9zZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwMTVhYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS91bm9yZGVyZWRfc2V0CkBAIC0wLDAgKzEsNDYzIEBACisvLyBQcm9maWxpbmcgdW5vcmRlcmVkX3NldC91bm9yZGVyZWRfbXVsdGlzZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgcHJvZmlsZS91bm9yZGVyZWRfc2V0CisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfVU5PUkRFUkVEX1NFVAorI2RlZmluZSBfR0xJQkNYWF9QUk9GSUxFX1VOT1JERVJFRF9TRVQgMQorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgPHByb2ZpbGUvYmFzZS5oPgorI2luY2x1ZGUgPHByb2ZpbGUvdW5vcmRlcmVkX2Jhc2UuaD4KKworI2RlZmluZSBfR0xJQkNYWF9CQVNFIHVub3JkZXJlZF9zZXQ8X0tleSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+CisjZGVmaW5lIF9HTElCQ1hYX1NURF9CQVNFIF9HTElCQ1hYX1NURF9DOjpfR0xJQkNYWF9CQVNFCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIF9fcHJvZmlsZQoreworICAvKiogQGJyaWVmIFVub3JkZXJlZF9zZXQgd3JhcHBlciB3aXRoIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi4gICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIAorCSAgIHR5cGVuYW1lIF9IYXNoID0gc3RkOjpoYXNoPF9LZXk+LAorCSAgIHR5cGVuYW1lIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSAgc3RkOjphbGxvY2F0b3I8X0tleT4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9zZXQKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQkFTRSwKKyAgICAgIHB1YmxpYyBfVW5vcmRlcmVkX3Byb2ZpbGU8dW5vcmRlcmVkX3NldDxfS2V5LCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4sCisJCQkJdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9CQVNFIF9CYXNlOworCisgICAgICBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBub2V4Y2VwdCAgICAgICB7IHJldHVybiAqdGhpczsgfQorCisgICAgICBjb25zdCBfQmFzZSYKKyAgICAgIF9NX2Jhc2UoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiAqdGhpczsgfQorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Omhhc2hlciAgICAgICAgICBoYXNoZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfZXF1YWwgICAgICAga2V5X2VxdWFsOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X3R5cGUgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfc2V0KHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIHVub3JkZXJlZF9zZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCSAgICAgIHNpemVfdHlwZSBfX24gPSAwLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwkgIDogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfc2V0KGNvbnN0IHVub3JkZXJlZF9zZXQmKSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9zZXQoY29uc3QgX0Jhc2UmIF9feCkKKwk6IF9CYXNlKF9feCkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfc2V0KHVub3JkZXJlZF9zZXQmJikgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfc2V0KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAorCQkgICAgc2l6ZV90eXBlIF9fbiA9IDAsCisJCSAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfc2V0JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHVub3JkZXJlZF9zZXQmKSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9zZXQmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX3NldCYmKSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9zZXQmCisgICAgICBvcGVyYXRvcj0oaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7CisJX01fYmFzZSgpID0gX19sOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgc3dhcCh1bm9yZGVyZWRfc2V0JiBfX3gpCisgICAgICB7IF9CYXNlOjpzd2FwKF9feCk7IH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jhc2U6OnNpemUoKSk7CisgICAgICAgIHRoaXMtPl9NX3Byb2ZpbGVfZGVzdHJ1Y3QoKTsKKyAgICAgICAgX0Jhc2U6OmNsZWFyKCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCXN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKwllbXBsYWNlKF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworCSAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBfX3JlcworCSAgICA9IF9CYXNlOjplbXBsYWNlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsKKwkgIHJldHVybiBfX3JlczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZV9oaW50KGNvbnN0X2l0ZXJhdG9yIF9faXQsIF9BcmdzJiYuLi4gX19hcmdzKQorCXsKKwkgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworCSAgaXRlcmF0b3IgX19yZXMKKwkgICAgPSBfQmFzZTo6ZW1wbGFjZV9oaW50KF9faXQsIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisJICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsKKwkgIHJldHVybiBfX3JlczsKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisgICAgICAgIF9CYXNlOjppbnNlcnQoX19sKTsgCisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKyAgICAgIH0KKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19vYmopOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsgCisgICAgICAgIHJldHVybiBfX3JlczsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2l0ZXIsIGNvbnN0IHZhbHVlX3R5cGUmIF9fdikKKyAgICAgIHsgCisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOyAKKyAgICAgICAgaXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9faXRlciwgX192KTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIGluc2VydCh2YWx1ZV90eXBlJiYgX19vYmopCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IF9fcmVzID0gX0Jhc2U6Omluc2VydChzdGQ6Om1vdmUoX19vYmopKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19pdGVyLCB2YWx1ZV90eXBlJiYgX192KQorICAgICAgeyAKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisgICAgICAgIGl0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6Omluc2VydChfX2l0ZXIsIHN0ZDo6bW92ZShfX3YpKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgaW5zZXJ0KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCisgICAgICAgIHsKKwkgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOyAKKwkgIF9CYXNlOjppbnNlcnQoX19maXJzdCwgX19sYXN0KTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIHJlaGFzaChzaXplX3R5cGUgX19uKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgX0Jhc2U6OnJlaGFzaChfX24pOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsgCisgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01fcHJvZmlsZV9yZXNpemUoc2l6ZV90eXBlIF9fb2xkX3NpemUpCisgICAgICB7CisJc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisJaWYgKF9fb2xkX3NpemUgIT0gX19uZXdfc2l6ZSkKKwkgIF9fcHJvZmN4eF9oYXNodGFibGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIF9fbmV3X3NpemUpOworICAgICAgfQorICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB1bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSAgICAgICBjb25zdCB1bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9HTElCQ1hYX1NURF9CQVNFJj4oX194KSA9PSBfX3k7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgdW5vcmRlcmVkX3NldDxfS2V5LCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX3NldDxfS2V5LCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CisKKyN1bmRlZiBfR0xJQkNYWF9CQVNFCisjdW5kZWYgX0dMSUJDWFhfU1REX0JBU0UKKyNkZWZpbmUgX0dMSUJDWFhfU1REX0JBU0UgX0dMSUJDWFhfU1REX0M6Ol9HTElCQ1hYX0JBU0UKKyNkZWZpbmUgX0dMSUJDWFhfQkFTRSB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKworICAvKiogQGJyaWVmIFVub3JkZXJlZF9tdWx0aXNldCB3cmFwcGVyIHdpdGggcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uLiAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9IYXNoID0gc3RkOjpoYXNoPF9WYWx1ZT4sCisJICAgdHlwZW5hbWUgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9WYWx1ZT4sCisJICAgdHlwZW5hbWUgX0FsbG9jID0gIHN0ZDo6YWxsb2NhdG9yPF9WYWx1ZT4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9tdWx0aXNldAorICAgIDogcHVibGljIF9HTElCQ1hYX1NURF9CQVNFLAorICAgICAgcHVibGljIF9Vbm9yZGVyZWRfcHJvZmlsZTx1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLAorCQkJCQkJICAgX0hhc2gsIF9QcmVkLCBfQWxsb2M+LAorCQkJCWZhbHNlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dMSUJDWFhfU1REX0JBU0UgX0Jhc2U7CisKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpIG5vZXhjZXB0ICAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjprZXlfdHlwZSAgICAgICAga2V5X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpyZWZlcmVuY2UgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldChzaXplX3R5cGUgX19uID0gMTAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCQkgICBzaXplX3R5cGUgX19uID0gMCwKKwkJCSAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJICA6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0KGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldCYpID0gZGVmYXVsdDsKKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0KGNvbnN0IF9CYXNlJiBfX3gpCisJOiBfQmFzZShfX3gpCisgICAgICB7IH0KKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0KHVub3JkZXJlZF9tdWx0aXNldCYmKSA9IGRlZmF1bHQ7CisKKyAgICAgIHVub3JkZXJlZF9tdWx0aXNldChpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCwKKwkJCSBzaXplX3R5cGUgX19uID0gMCwKKwkJCSBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdW5vcmRlcmVkX211bHRpc2V0JikgPSBkZWZhdWx0OworCisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQmCisgICAgICBvcGVyYXRvcj0odW5vcmRlcmVkX211bHRpc2V0JiYpID0gZGVmYXVsdDsKKworICAgICAgdW5vcmRlcmVkX211bHRpc2V0JgorICAgICAgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sKQorICAgICAgeworCV9NX2Jhc2UoKSA9IF9fbDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodW5vcmRlcmVkX211bHRpc2V0JiBfX3gpCisgICAgICB7IF9CYXNlOjpzd2FwKF9feCk7IH0KKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKSBub2V4Y2VwdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfaGFzaHRhYmxlX2Rlc3RydWN0KHRoaXMsIF9CYXNlOjpidWNrZXRfY291bnQoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jhc2U6OnNpemUoKSk7CisgICAgICAgIHRoaXMtPl9NX3Byb2ZpbGVfZGVzdHJ1Y3QoKTsKKyAgICAgICAgX0Jhc2U6OmNsZWFyKCk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCWl0ZXJhdG9yCisJZW1wbGFjZShfQXJncyYmLi4uIF9fYXJncykKKwl7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKwkgIGl0ZXJhdG9yIF9fcmVzID0gX0Jhc2U6OmVtcGxhY2Uoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOworCSAgcmV0dXJuIF9fcmVzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisJaXRlcmF0b3IKKwllbXBsYWNlX2hpbnQoY29uc3RfaXRlcmF0b3IgX19pdCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisJeworCSAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisJICBpdGVyYXRvciBfX3JlcworCSAgICA9IF9CYXNlOjplbXBsYWNlX2hpbnQoX19pdCwgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOworCSAgcmV0dXJuIF9fcmVzOworCX0KKworICAgICAgdm9pZAorICAgICAgaW5zZXJ0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IAorICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgX0Jhc2U6Omluc2VydChfX2wpOyAKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fb2JqKQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsKKyAgICAgICAgaXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9fb2JqKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoY29uc3RfaXRlcmF0b3IgX19pdGVyLCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOyAKKyAgICAgICAgaXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6aW5zZXJ0KF9faXRlciwgX192KTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgICByZXR1cm4gX19yZXM7CisgICAgICB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQodmFsdWVfdHlwZSYmIF9fb2JqKQorICAgICAgeworCXNpemVfdHlwZSBfX29sZF9zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBpdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoc3RkOjptb3ZlKF9fb2JqKSk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIF9faXRlciwgdmFsdWVfdHlwZSYmIF9fdikKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7IAorICAgICAgICBpdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19pdGVyLCBzdGQ6Om1vdmUoX192KSk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKF9fb2xkX3NpemUpOyAKKyAgICAgICAgcmV0dXJuIF9fcmVzOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgorICAgICAgICB2b2lkCisgICAgICAgIGluc2VydChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQorICAgICAgICB7CisJICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IF9CYXNlOjpidWNrZXRfY291bnQoKTsgCisJICBfQmFzZTo6aW5zZXJ0KF9fZmlyc3QsIF9fbGFzdCk7CisJICBfTV9wcm9maWxlX3Jlc2l6ZShfX29sZF9zaXplKTsgCisJfQorCisgICAgICB2b2lkCisgICAgICByZWhhc2goc2l6ZV90eXBlIF9fbikKKyAgICAgIHsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBfQmFzZTo6YnVja2V0X2NvdW50KCk7CisgICAgICAgIF9CYXNlOjpyZWhhc2goX19uKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUoX19vbGRfc2l6ZSk7IAorICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHNpemVfdHlwZSBfX29sZF9zaXplKQorICAgICAgeworCXNpemVfdHlwZSBfX25ld19zaXplID0gX0Jhc2U6OmJ1Y2tldF9jb3VudCgpOworICAgICAgICBpZiAoX19vbGRfc2l6ZSAhPSBfX25ld19zaXplKQorICAgICAgICAgIF9fcHJvZmN4eF9oYXNodGFibGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIF9fbmV3X3NpemUpOworICAgICAgfQorICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1ByZWQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJICAgICAgIGNvbnN0IHVub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9HTElCQ1hYX1NURF9CQVNFJj4oX194KSA9PSBfX3k7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgICAgICAgY29uc3QgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCit9IC8vIG5hbWVzcGFjZSBfX3Byb2ZpbGUKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjdW5kZWYgX0dMSUJDWFhfQkFTRQorI3VuZGVmIF9HTElCQ1hYX1NURF9CQVNFCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcHJvZmlsZS92ZWN0b3IgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvdmVjdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MmU0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Byb2ZpbGUvdmVjdG9yCkBAIC0wLDAgKzEsNTU0IEBACisvLyBQcm9maWxpbmcgdmVjdG9yIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHByb2ZpbGUvdmVjdG9yCisgKiAgVGhpcyBmaWxlIGlzIGEgR05VIHByb2ZpbGUgZXh0ZW5zaW9uIHRvIHRoZSBTdGFuZGFyZCBDKysgTGlicmFyeS4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1BST0ZJTEVfVkVDVE9SCisjZGVmaW5lIF9HTElCQ1hYX1BST0ZJTEVfVkVDVE9SIDEKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHByb2ZpbGUvYmFzZS5oPgorI2luY2x1ZGUgPHByb2ZpbGUvaXRlcmF0b3JfdHJhY2tlci5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSBfX3Byb2ZpbGUKK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IgPSBzdGQ6OmFsbG9jYXRvcjxfVHA+ID4KKyAgICBjbGFzcyB2ZWN0b3IKKyAgICA6IHB1YmxpYyBfR0xJQkNYWF9TVERfQzo6dmVjdG9yPF9UcCwgX0FsbG9jYXRvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9HTElCQ1hYX1NURF9DOjp2ZWN0b3I8X1RwLCBfQWxsb2NhdG9yPiBfQmFzZTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfQWxsb2NhdG9yPiAgX0FsbG9jX3RyYWl0czsKKyNlbmRpZgorCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgX19pdGVyYXRvcl90cmFja2VyPHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciwgdmVjdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2l0ZXJhdG9yX3RyYWNrZXI8dHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yLCB2ZWN0b3I+CisJCQkJICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmRpZmZlcmVuY2VfdHlwZSAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisKKyAgICAgIHR5cGVkZWYgX1RwCQkJCSAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfQWxsb2NhdG9yCQkJICAgIGFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6cG9pbnRlciAgICAgICAgICAgICAgIHBvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9wb2ludGVyICAgICAgICAgY29uc3RfcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiAgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CisgICAgICAKKyAgICAgIF9CYXNlJgorICAgICAgX01fYmFzZSgpIF9HTElCQ1hYX05PRVhDRVBUIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIGNvbnN0IF9CYXNlJgorICAgICAgX01fYmFzZSgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIC8vIDIzLjIuNC4xIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CisgICAgICBleHBsaWNpdAorICAgICAgdmVjdG9yKGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19hKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdCh0aGlzLCB0aGlzLT5jYXBhY2l0eSgpKTsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QyKHRoaXMpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgZXhwbGljaXQKKyAgICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19hKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdCh0aGlzLCB0aGlzLT5jYXBhY2l0eSgpKTsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QyKHRoaXMpOworICAgICAgfQorCisgICAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAorCSAgICAgY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKQorICAgICAgOiAgX0Jhc2UoX19uLCBfX3ZhbHVlLCBfX2EpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0KHRoaXMsIHRoaXMtPmNhcGFjaXR5KCkpOworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdDIodGhpcyk7CisgICAgICB9CisjZWxzZQorICAgICAgZXhwbGljaXQKKyAgICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUgPSBfVHAoKSwKKwkgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX3ZhbHVlLCBfX2EpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0KHRoaXMsIHRoaXMtPmNhcGFjaXR5KCkpOworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdDIodGhpcyk7CisgICAgICB9CisjZW5kaWYKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLAorCSAgICAgICB0eXBlbmFtZSA9IHN0ZDo6X1JlcXVpcmVJbnB1dEl0ZXI8X0lucHV0SXRlcmF0b3I+PgorI2Vsc2UKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorI2VuZGlmCisgICAgICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkKKwk6IF9CYXNlKF9fZmlyc3QsIF9fbGFzdCwgX19hKQorICAgICAgICB7CisJICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdCh0aGlzLCB0aGlzLT5jYXBhY2l0eSgpKTsKKwkgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0Mih0aGlzKTsKKwl9CisKKyAgICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkKKyAgICAgIDogX0Jhc2UoX194KSAKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSk7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgLy8vIENvbnN0cnVjdGlvbiBmcm9tIGEgcmVsZWFzZS1tb2RlIHZlY3RvcgorICAgICAgdmVjdG9yKGNvbnN0IF9CYXNlJiBfX3gpCisgICAgICA6IF9CYXNlKF9feCkgCisgICAgICB7IAorICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdCh0aGlzLCB0aGlzLT5jYXBhY2l0eSgpKTsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QyKHRoaXMpOworICAgICAgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdmVjdG9yKHZlY3RvciYmIF9feCkgbm9leGNlcHQKKyAgICAgIDogX0Jhc2Uoc3RkOjptb3ZlKF9feCkpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0KHRoaXMsIHRoaXMtPmNhcGFjaXR5KCkpOworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdDIodGhpcyk7CisgICAgICB9CisKKyAgICAgIHZlY3Rvcihjb25zdCBfQmFzZSYgX194LCBjb25zdCBfQWxsb2NhdG9yJiBfX2EpCisgICAgICA6IF9CYXNlKF9feCwgX19hKQorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSk7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfY29uc3RydWN0Mih0aGlzKTsKKyAgICAgIH0KKworICAgICAgdmVjdG9yKHZlY3RvciYmIF9feCwgY29uc3QgX0FsbG9jYXRvciYgX19hKSBub2V4Y2VwdAorICAgICAgOiBfQmFzZShzdGQ6Om1vdmUoX194KSwgX19hKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2NvbnN0cnVjdCh0aGlzLCB0aGlzLT5jYXBhY2l0eSgpKTsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9jb25zdHJ1Y3QyKHRoaXMpOworICAgICAgfQorCisgICAgICB2ZWN0b3IoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wsCisJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19sLCBfX2EpIHsgfQorI2VuZGlmCisKKyAgICAgIH52ZWN0b3IoKSBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2Rlc3RydWN0KHRoaXMsIHRoaXMtPmNhcGFjaXR5KCksIHRoaXMtPnNpemUoKSk7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfZGVzdHJ1Y3QyKHRoaXMpOworICAgICAgfQorCisgICAgICB2ZWN0b3ImCisgICAgICBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpCisgICAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PF9CYXNlJj4oKnRoaXMpID0gX194OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2ZWN0b3ImCisgICAgICBvcGVyYXRvcj0odmVjdG9yJiYgX194KSBub2V4Y2VwdChfQWxsb2NfdHJhaXRzOjpfU19ub3Rocm93X21vdmUoKSkKKyAgICAgIHsKKwlfX3Byb2ZjeHhfdmVjdG9yX2Rlc3RydWN0KHRoaXMsIHRoaXMtPmNhcGFjaXR5KCksIHRoaXMtPnNpemUoKSk7CisJX19wcm9mY3h4X3ZlY3Rvcl9kZXN0cnVjdDIodGhpcyk7CisJc3RhdGljX2Nhc3Q8X0Jhc2UmPigqdGhpcykgPSBzdGQ6Om1vdmUoX194KTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZlY3RvciYKKyAgICAgIG9wZXJhdG9yPShpbml0aWFsaXplcl9saXN0PHZhbHVlX3R5cGU+IF9fbCkKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfQmFzZSY+KCp0aGlzKSA9IF9fbDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisjZW5kaWYKKworICAgICAgdXNpbmcgX0Jhc2U6OmFzc2lnbjsKKyAgICAgIHVzaW5nIF9CYXNlOjpnZXRfYWxsb2NhdG9yOworCisKKyAgICAgIC8vIGl0ZXJhdG9yczoKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBpdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9CYXNlOjpiZWdpbigpLCB0aGlzKTsgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkgX0dMSUJDWFhfTk9FWENFUFQKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9CYXNlOjplbmQoKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGVuZCgpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6ZW5kKCksIHRoaXMpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJiZWdpbigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICByYmVnaW4oKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgcmV2ZXJzZV9pdGVyYXRvcgorICAgICAgcmVuZCgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIHJlbmQoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfQmFzZTo6YmVnaW4oKSwgdGhpcyk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNlbmQoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX0Jhc2U6OmVuZCgpLCB0aGlzKTsgfQorCisgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCisgICAgICBjcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKKyAgICAgIGNyZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKyNlbmRpZgorCisgICAgICAvLyAyMy4yLjQuMiBjYXBhY2l0eToKKyAgICAgIHVzaW5nIF9CYXNlOjpzaXplOworICAgICAgdXNpbmcgX0Jhc2U6Om1heF9zaXplOworCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6KQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IodGhpcyk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHRoaXMsIHRoaXMtPmNhcGFjaXR5KCksIF9fc3opOworICAgICAgICBfQmFzZTo6cmVzaXplKF9fc3opOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICByZXNpemUoc2l6ZV90eXBlIF9fc3osIGNvbnN0IF9UcCYgX19jKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IodGhpcyk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHRoaXMsIHRoaXMtPmNhcGFjaXR5KCksIF9fc3opOworICAgICAgICBfQmFzZTo6cmVzaXplKF9fc3osIF9fYyk7CisgICAgICB9CisjZWxzZQorICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX3N6LCBfVHAgX19jID0gX1RwKCkpCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfaW52YWxpZF9vcGVyYXRvcih0aGlzKTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSwgX19zeik7CisgICAgICAgIF9CYXNlOjpyZXNpemUoX19zeiwgX19jKTsKKyAgICAgIH0KKyNlbmRpZgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdXNpbmcgX0Jhc2U6OnNocmlua190b19maXQ7CisjZW5kaWYKKworICAgICAgdXNpbmcgX0Jhc2U6OmVtcHR5OworCisgICAgICAvLyBlbGVtZW50IGFjY2VzczoKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IodGhpcyk7CisgICAgICAgIHJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2ludmFsaWRfb3BlcmF0b3IodGhpcyk7CisgICAgICAgIHJldHVybiBfTV9iYXNlKClbX19uXTsKKyAgICAgIH0KKworICAgICAgdXNpbmcgX0Jhc2U6OmF0OworCisgICAgICByZWZlcmVuY2UKKyAgICAgIGZyb250KCkKKyAgICAgIHsgCisgICAgICAgIHJldHVybiBfQmFzZTo6ZnJvbnQoKTsKKyAgICAgIH0KKworICAgICAgY29uc3RfcmVmZXJlbmNlCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIF9CYXNlOjpmcm9udCgpOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIGJhY2soKQorICAgICAgeworCXJldHVybiBfQmFzZTo6YmFjaygpOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGJhY2soKSBjb25zdAorICAgICAgeworCXJldHVybiBfQmFzZTo6YmFjaygpOworICAgICAgfQorCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyBEUiA0NjQuIFN1Z2dlc3Rpb24gZm9yIG5ldyBtZW1iZXIgZnVuY3Rpb25zIGluIHN0YW5kYXJkIGNvbnRhaW5lcnMuCisgICAgICB1c2luZyBfQmFzZTo6ZGF0YTsKKworICAgICAgLy8gMjMuMi40LjMgbW9kaWZpZXJzOgorICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KQorICAgICAgeworICAgICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMtPmNhcGFjaXR5KCk7CisJX0Jhc2U6OnB1c2hfYmFjayhfX3gpOworICAgICAgICBfTV9wcm9maWxlX3Jlc2l6ZSh0aGlzLCBfX29sZF9zaXplLCB0aGlzLT5jYXBhY2l0eSgpKTsKKyAgICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIHZvaWQKKyAgICAgIHB1c2hfYmFjayhfVHAmJiBfX3gpCisgICAgICB7CisgICAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+Y2FwYWNpdHkoKTsKKyAgICAgICAgX0Jhc2U6OnB1c2hfYmFjayhzdGQ6Om1vdmUoX194KSk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIHRoaXMtPmNhcGFjaXR5KCkpOworICAgICAgfQorCisjZW5kaWYKKworICAgICAgaXRlcmF0b3IKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9pbnNlcnQodGhpcywgX19wb3NpdGlvbi5iYXNlKCkgLSBfQmFzZTo6YmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5jYXBhY2l0eSgpOworCXR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9feCk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIHRoaXMtPmNhcGFjaXR5KCkpOworCXJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICBpdGVyYXRvcgorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9UcCYmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9pbnNlcnQodGhpcywgX19wb3NpdGlvbi5iYXNlKCkgLSBfQmFzZTo6YmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5jYXBhY2l0eSgpOworCXR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX3JlcyA9IF9CYXNlOjppbnNlcnQoX19wb3NpdGlvbi5iYXNlKCksIF9feCk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIHRoaXMtPmNhcGFjaXR5KCkpOworCXJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICBpdGVyYXRvcgorICAgICAgICBlbXBsYWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7CisJICB0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMKKwkgICAgPSBfQmFzZTo6ZW1wbGFjZShfX3Bvc2l0aW9uLmJhc2UoKSwKKwkJCSAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwkgIHJldHVybiBpdGVyYXRvcihfX3JlcywgdGhpcyk7CisJfQorCisgICAgICB2b2lkCisgICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBfX2wpCisgICAgICB7IHRoaXMtPmluc2VydChfX3Bvc2l0aW9uLCBfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsgfQorI2VuZGlmCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB2b2lkCisgICAgICBzd2FwKHZlY3RvciYmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX0Jhc2U6OnN3YXAoX194KTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICB2b2lkCisgICAgICBzd2FwKHZlY3RvciYgX194KQorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKwkJCW5vZXhjZXB0KF9BbGxvY190cmFpdHM6Ol9TX25vdGhyb3dfc3dhcCgpKQorI2VuZGlmCisgICAgICB7CisgICAgICAgIF9CYXNlOjpzd2FwKF9feCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKKyAgICAgIHsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9pbnNlcnQodGhpcywgX19wb3NpdGlvbi5iYXNlKCkgLSBfQmFzZTo6YmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5jYXBhY2l0eSgpOworICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKKyAgICAgICAgX01fcHJvZmlsZV9yZXNpemUodGhpcywgX19vbGRfc2l6ZSwgdGhpcy0+Y2FwYWNpdHkoKSk7CisgICAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9SZXF1aXJlSW5wdXRJdGVyPF9JbnB1dEl0ZXJhdG9yPj4KKyNlbHNlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyNlbmRpZgorICAgICAgdm9pZAorICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCisgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgeworICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX2luc2VydCh0aGlzLCBfX3Bvc2l0aW9uLmJhc2UoKS1fQmFzZTo6YmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2l6ZSgpKTsKKyAgICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5jYXBhY2l0eSgpOworICAgICAgICBfQmFzZTo6aW5zZXJ0KF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgICAgIF9NX3Byb2ZpbGVfcmVzaXplKHRoaXMsIF9fb2xkX3NpemUsIHRoaXMtPmNhcGFjaXR5KCkpOworICAgICAgfQorCisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQorICAgICAgeworCXR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciBfX3JlcyA9IF9CYXNlOjplcmFzZShfX3Bvc2l0aW9uLmJhc2UoKSk7CisJcmV0dXJuIGl0ZXJhdG9yKF9fcmVzLCB0aGlzKTsKKyAgICAgIH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKKyAgICAgIHsKKwkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJLy8gMTUxLiBjYW4ndCBjdXJyZW50bHkgY2xlYXIoKSBlbXB0eSBjb250YWluZXIKKwl0eXBlbmFtZSBfQmFzZTo6aXRlcmF0b3IgX19yZXMgPSBfQmFzZTo6ZXJhc2UoX19maXJzdC5iYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QuYmFzZSgpKTsKKwlyZXR1cm4gaXRlcmF0b3IoX19yZXMsIHRoaXMpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBjbGVhcigpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgICB7CisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfZGVzdHJ1Y3QodGhpcywgdGhpcy0+Y2FwYWNpdHkoKSwgdGhpcy0+c2l6ZSgpKTsKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9kZXN0cnVjdDIodGhpcyk7CisgICAgICAgIF9CYXNlOjpjbGVhcigpOworICAgICAgfQorCisgICAgICBpbmxpbmUgdm9pZCBfTV9wcm9maWxlX2ZpbmQoKSBjb25zdCAKKyAgICAgIHsgCisgICAgICAgIF9fcHJvZmN4eF92ZWN0b3JfZmluZCh0aGlzLCBzaXplKCkpOyAKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZvaWQgX01fcHJvZmlsZV9pdGVyYXRlKGludCBfX3Jld2luZCA9IDApIGNvbnN0IAorICAgICAgeyAKKyAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9pdGVyYXRlKHRoaXMpOyAKKyAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICB2b2lkIF9NX3Byb2ZpbGVfcmVzaXplKHZvaWQqIG9iaiwgc2l6ZV90eXBlIF9fb2xkX3NpemUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uZXdfc2l6ZSkKKyAgICAgIHsKKyAgICAgICAgaWYgKF9fb2xkX3NpemUgPCBfX25ld19zaXplKSB7CisgICAgICAgICAgX19wcm9mY3h4X3ZlY3Rvcl9yZXNpemUodGhpcywgdGhpcy0+c2l6ZSgpLCBfX25ld19zaXplKTsKKyAgICAgICAgICBfX3Byb2ZjeHhfdmVjdG9yX3Jlc2l6ZTIodGhpcywgdGhpcy0+c2l6ZSgpLCBfX25ld19zaXplKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorICAgICAgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorICAgICAgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgIT0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsCisgICAgICAgICAgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpIDwgX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorICAgICAgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPD0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLAorICAgICAgICAgICBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5fTV9iYXNlKCkgPj0gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsCisgICAgICAgICAgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01fYmFzZSgpID4gX19yaHMuX01fYmFzZSgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fbGhzLCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiYgX19saHMsIHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX19saHMsIHZlY3RvcjxfVHAsIF9BbGxvYz4mJiBfX3JocykKKyAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgX19wcm9maWxlCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIC8vIERSIDExODIuCisgIC8vLyBzdGQ6Omhhc2ggc3BlY2lhbGl6YXRpb24gZm9yIHZlY3Rvcjxib29sPi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBoYXNoPF9fcHJvZmlsZTo6dmVjdG9yPGJvb2wsIF9BbGxvYz4+CisgICAgOiBwdWJsaWMgX19oYXNoX2Jhc2U8c2l6ZV90LCBfX3Byb2ZpbGU6OnZlY3Rvcjxib29sLCBfQWxsb2M+PgorICAgIHsKKyAgICAgIHNpemVfdAorICAgICAgb3BlcmF0b3IoKShjb25zdCBfX3Byb2ZpbGU6OnZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX2IpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Omhhc2g8X0dMSUJDWFhfU1REX0M6OnZlY3Rvcjxib29sLCBfQWxsb2M+PigpCisJICAoX19iLl9NX2Jhc2UoKSk7IH0KKyAgICB9OworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcXVldWUgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3F1ZXVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTdmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3F1ZXVlCkBAIC0wLDAgKzEsNjYgQEAKKy8vIDxxdWV1ZT4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworICogU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBTaWxpY29uIEdyYXBoaWNzIG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworLyoqIEBmaWxlIGluY2x1ZGUvcXVldWUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUVVFVUUKKyNkZWZpbmUgX0dMSUJDWFhfUVVFVUUgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxkZXF1ZT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8Yml0cy9zdGxfaGVhcC5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfcXVldWUuaD4KKworI2VuZGlmIC8qIF9HTElCQ1hYX1FVRVVFICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3JhbmRvbSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcmFuZG9tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYjM4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3JhbmRvbQpAQCAtMCwwICsxLDU4IEBACisvLyA8cmFuZG9tPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9yYW5kb20KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUkFORE9NCisjZGVmaW5lIF9HTElCQ1hYX1JBTkRPTSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxkZWJ1Zy9kZWJ1Zy5oPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCisKKyNpbmNsdWRlIDxjc3RkaW50PiAvLyBGb3IgdWludF9mYXN0MzJfdCwgdWludF9mYXN0NjRfdCwgdWludF9sZWFzdDMyX3QKKyNpbmNsdWRlIDxiaXRzL3JhbmRvbS5oPgorI2luY2x1ZGUgPGJpdHMvb3B0X3JhbmRvbS5oPgorI2luY2x1ZGUgPGJpdHMvcmFuZG9tLnRjYz4KKworI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9HTElCQ1hYX1JBTkRPTQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9yYXRpbyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcmF0aW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiZjk5MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcmF0aW8KQEAgLTAsMCArMSw1MzggQEAKKy8vIHJhdGlvIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSAKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIAorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL3JhdGlvCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1JBVElPCisjZGVmaW5lIF9HTElCQ1hYX1JBVElPIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPGNzdGRpbnQ+CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAZGVmZ3JvdXAgcmF0aW8gUmF0aW9uYWwgQXJpdGhtZXRpYworICAgKiBAaW5ncm91cCB1dGlsaXRpZXMKKyAgICoKKyAgICogQ29tcGlsZSB0aW1lIHJlcHJlc2VudGF0aW9uIG9mIGZpbml0ZSByYXRpb25hbCBudW1iZXJzLgorICAgKiBAeworICAgKi8KKworICB0ZW1wbGF0ZTxpbnRtYXhfdCBfUG4+CisgICAgc3RydWN0IF9fc3RhdGljX3NpZ24KKyAgICA6IGludGVncmFsX2NvbnN0YW50PGludG1heF90LCAoX1BuIDwgMCkgPyAtMSA6IDE+CisgICAgeyB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9Qbj4KKyAgICBzdHJ1Y3QgX19zdGF0aWNfYWJzCisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxpbnRtYXhfdCwgX1BuICogX19zdGF0aWNfc2lnbjxfUG4+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8aW50bWF4X3QgX1BuLCBpbnRtYXhfdCBfUW4+CisgICAgc3RydWN0IF9fc3RhdGljX2djZAorICAgIDogX19zdGF0aWNfZ2NkPF9RbiwgKF9QbiAlIF9Rbik+CisgICAgeyB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9Qbj4KKyAgICBzdHJ1Y3QgX19zdGF0aWNfZ2NkPF9QbiwgMD4KKyAgICA6IGludGVncmFsX2NvbnN0YW50PGludG1heF90LCBfX3N0YXRpY19hYnM8X1BuPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9Rbj4KKyAgICBzdHJ1Y3QgX19zdGF0aWNfZ2NkPDAsIF9Rbj4KKyAgICA6IGludGVncmFsX2NvbnN0YW50PGludG1heF90LCBfX3N0YXRpY19hYnM8X1FuPjo6dmFsdWU+CisgICAgeyB9OworCisgIC8vIExldCBjID0gMl4oaGFsZiAjIG9mIGJpdHMgaW4gYW4gaW50bWF4X3QpCisgIC8vIHRoZW4gd2UgZmluZCBhMSwgYTAsIGIxLCBiMCBzLnQuIE4gPSBhMSpjICsgYTAsIE0gPSBiMSpjICsgYjAKKyAgLy8gVGhlIG11bHRpcGxpY2F0aW9uIG9mIE4gYW5kIE0gYmVjb21lcywKKyAgLy8gTiAqIE0gPSAoYTEgKiBiMSljXjIgKyAoYTAgKiBiMSArIGIwICogYTEpYyArIGEwICogYjAKKyAgLy8gTXVsdGlwbGljYXRpb24gaXMgc2FmZSBpZiBlYWNoIHRlcm0gYW5kIHRoZSBzdW0gb2YgdGhlIHRlcm1zCisgIC8vIGlzIHJlcHJlc2VudGFibGUgYnkgaW50bWF4X3QuCisgIHRlbXBsYXRlPGludG1heF90IF9QbiwgaW50bWF4X3QgX1FuPgorICAgIHN0cnVjdCBfX3NhZmVfbXVsdGlwbHkKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19jID0gdWludG1heF90KDEpIDw8IChzaXplb2YoaW50bWF4X3QpICogNCk7CisKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19hMCA9IF9fc3RhdGljX2FiczxfUG4+Ojp2YWx1ZSAlIF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19hMSA9IF9fc3RhdGljX2FiczxfUG4+Ojp2YWx1ZSAvIF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19iMCA9IF9fc3RhdGljX2FiczxfUW4+Ojp2YWx1ZSAlIF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdCB1aW50bWF4X3QgX19iMSA9IF9fc3RhdGljX2FiczxfUW4+Ojp2YWx1ZSAvIF9fYzsKKworICAgICAgc3RhdGljX2Fzc2VydChfX2ExID09IDAgfHwgX19iMSA9PSAwLCAKKwkJICAgICJvdmVyZmxvdyBpbiBtdWx0aXBsaWNhdGlvbiIpOworICAgICAgc3RhdGljX2Fzc2VydChfX2EwICogX19iMSArIF9fYjAgKiBfX2ExIDwgKF9fYyA+PiAxKSwgCisJCSAgICAib3ZlcmZsb3cgaW4gbXVsdGlwbGljYXRpb24iKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19iMCAqIF9fYTAgPD0gX19JTlRNQVhfTUFYX18sIAorCQkgICAgIm92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KChfX2EwICogX19iMSArIF9fYjAgKiBfX2ExKSAqIF9fYworCQkgICAgPD0gX19JTlRNQVhfTUFYX18gLSAgX19iMCAqIF9fYTAsCisJCSAgICAib3ZlcmZsb3cgaW4gbXVsdGlwbGljYXRpb24iKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBpbnRtYXhfdCB2YWx1ZSA9IF9QbiAqIF9RbjsKKyAgICB9OworCisgIC8vIFNvbWUgZG91YmxlLXByZWNpc2lvbiB1dGlsaXRpZXMsIHdoZXJlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGFzCisgIC8vIF9faGkqMl4oOCpzaXplb2YodWludG1heF90KSkgKyBfX2xvLgorICB0ZW1wbGF0ZTx1aW50bWF4X3QgX19oaTEsIHVpbnRtYXhfdCBfX2xvMSwgdWludG1heF90IF9faGkyLCB1aW50bWF4X3QgX19sbzI+CisgICAgc3RydWN0IF9fYmlnX2xlc3MKKyAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2hpMSA8IF9faGkyCisJCQkgICAgICAgfHwgKF9faGkxID09IF9faGkyICYmIF9fbG8xIDwgX19sbzIpKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dWludG1heF90IF9faGkxLCB1aW50bWF4X3QgX19sbzEsIHVpbnRtYXhfdCBfX2hpMiwgdWludG1heF90IF9fbG8yPgorICAgIHN0cnVjdCBfX2JpZ19hZGQKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX2xvID0gX19sbzEgKyBfX2xvMjsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9faGkgPSAoX19oaTEgKyBfX2hpMiArCisJCQkJCSAoX19sbzEgKyBfX2xvMiA8IF9fbG8xKSk7IC8vIGNhcnJ5CisgICAgfTsKKworICAvLyBTdWJ0cmFjdCBhIG51bWJlciBmcm9tIGEgYmlnZ2VyIG9uZS4KKyAgdGVtcGxhdGU8dWludG1heF90IF9faGkxLCB1aW50bWF4X3QgX19sbzEsIHVpbnRtYXhfdCBfX2hpMiwgdWludG1heF90IF9fbG8yPgorICAgIHN0cnVjdCBfX2JpZ19zdWIKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KCFfX2JpZ19sZXNzPF9faGkxLCBfX2xvMSwgX19oaTIsIF9fbG8yPjo6dmFsdWUsCisJCSAgICAiSW50ZXJuYWwgbGlicmFyeSBlcnJvciIpOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19sbyA9IF9fbG8xIC0gX19sbzI7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX2hpID0gKF9faGkxIC0gX19oaTIgLQorCQkJCQkgKF9fbG8xIDwgX19sbzIpKTsgLy8gY2FycnkKKyAgICB9OworCisgIC8vIFNhbWUgcHJpbmNpcGxlIGFzIF9fc2FmZV9tdWx0aXBseS4KKyAgdGVtcGxhdGU8dWludG1heF90IF9feCwgdWludG1heF90IF9feT4KKyAgICBzdHJ1Y3QgX19iaWdfbXVsCisgICAgeworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX2MgPSB1aW50bWF4X3QoMSkgPDwgKHNpemVvZihpbnRtYXhfdCkgKiA0KTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9feDAgPSBfX3ggJSBfX2M7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3gxID0gX194IC8gX19jOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX195MCA9IF9feSAlIF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9feTEgPSBfX3kgLyBfX2M7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3gweTAgPSBfX3gwICogX195MDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9feDB5MSA9IF9feDAgKiBfX3kxOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX194MXkwID0gX194MSAqIF9feTA7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3gxeTEgPSBfX3gxICogX195MTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fbWl4ID0gX194MHkxICsgX194MXkwOyAvLyBwb3NzaWJsZSBjYXJyeS4uLgorICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19taXhfbG8gPSBfX21peCAqIF9fYzsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fbWl4X2hpCisgICAgICA9IF9fbWl4IC8gX19jICsgKChfX21peCA8IF9feDB5MSkgPyBfX2MgOiAwKTsgLy8gLi4uIGFkZGVkIGhlcmUKKyAgICAgIHR5cGVkZWYgX19iaWdfYWRkPF9fbWl4X2hpLCBfX21peF9sbywgX194MXkxLCBfX3gweTA+IF9SZXM7CisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19oaSA9IF9SZXM6Ol9faGk7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX2xvID0gX1Jlczo6X19sbzsKKyAgICB9OworCisgIC8vIEFkYXB0ZWQgZnJvbSBfX3VkaXZfcXJubmRfYyBpbiBsb25nbG9uZy5oCisgIC8vIFRoaXMgdmVyc2lvbiBhc3N1bWVzIHRoYXQgdGhlIGhpZ2ggYml0IG9mIF9fZCBpcyAxLgorICB0ZW1wbGF0ZTx1aW50bWF4X3QgX19uMSwgdWludG1heF90IF9fbjAsIHVpbnRtYXhfdCBfX2Q+CisgICAgc3RydWN0IF9fYmlnX2Rpdl9pbXBsCisgICAgeworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fZCA+PSAodWludG1heF90KDEpIDw8IChzaXplb2YoaW50bWF4X3QpICogOCAtIDEpKSwKKwkJICAgICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fbjEgPCBfX2QsICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX2MgPSB1aW50bWF4X3QoMSkgPDwgKHNpemVvZihpbnRtYXhfdCkgKiA0KTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fZDEgPSBfX2QgLyBfX2M7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX2QwID0gX19kICUgX19jOworCisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3ExeCA9IF9fbjEgLyBfX2QxOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19yMXggPSBfX24xICUgX19kMTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fbSA9IF9fcTF4ICogX19kMDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fcjF5ID0gX19yMXggKiBfX2MgKyBfX24wIC8gX19jOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19yMXogPSBfX3IxeSArIF9fZDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fcjEKKyAgICAgID0gKChfX3IxeSA8IF9fbSkgPyAoKF9fcjF6ID49IF9fZCkgJiYgKF9fcjF6IDwgX19tKSkKKwkgPyAoX19yMXogKyBfX2QpIDogX19yMXogOiBfX3IxeSkgLSBfX207CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3ExCisgICAgICA9IF9fcTF4IC0gKChfX3IxeSA8IF9fbSkKKwkJID8gKChfX3IxeiA+PSBfX2QpICYmIChfX3IxeiA8IF9fbSkpID8gMiA6IDEgOiAwKTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fcTB4ID0gX19yMSAvIF9fZDE7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3IweCA9IF9fcjEgJSBfX2QxOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19uID0gX19xMHggKiBfX2QwOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19yMHkgPSBfX3IweCAqIF9fYyArIF9fbjAgJSBfX2M7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3IweiA9IF9fcjB5ICsgX19kOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19yMAorICAgICAgPSAoKF9fcjB5IDwgX19uKSA/ICgoX19yMHogPj0gX19kKSAmJiAoX19yMHogPCBfX24pKQorCSA/IChfX3IweiArIF9fZCkgOiBfX3IweiA6IF9fcjB5KSAtIF9fbjsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fcTAKKyAgICAgID0gX19xMHggLSAoKF9fcjB5IDwgX19uKSA/ICgoX19yMHogPj0gX19kKQorCQkJCSAgJiYgKF9fcjB6IDwgX19uKSkgPyAyIDogMSA6IDApOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19xdW90ID0gX19xMSAqIF9fYyArIF9fcTA7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3JlbSA9IF9fcjA7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2JpZ19tdWw8X19xdW90LCBfX2Q+IF9Qcm9kOworICAgICAgdHlwZWRlZiBfX2JpZ19hZGQ8X1Byb2Q6Ol9faGksIF9Qcm9kOjpfX2xvLCAwLCBfX3JlbT4gX1N1bTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX1N1bTo6X19oaSA9PSBfX24xICYmIF9TdW06Ol9fbG8gPT0gX19uMCwKKwkJICAgICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgIH07CisKKyAgdGVtcGxhdGU8dWludG1heF90IF9fbjEsIHVpbnRtYXhfdCBfX24wLCB1aW50bWF4X3QgX19kPgorICAgIHN0cnVjdCBfX2JpZ19kaXYKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHN0YXRpY19hc3NlcnQoX19kICE9IDAsICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZyksCisJCSAgICAiVGhpcyBsaWJyYXJ5IGNhbGxzIF9fYnVpbHRpbl9jbHpsbCBvbiB1aW50bWF4X3QsIHdoaWNoICIKKwkJICAgICJpcyB1bnNhZmUgb24geW91ciBwbGF0Zm9ybS4gUGxlYXNlIGNvbXBsYWluIHRvICIKKwkJICAgICJodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvIik7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBfX3NoaWZ0ID0gX19idWlsdGluX2NsemxsKF9fZCk7CisgICAgICBzdGF0aWMgY29uc3RleHByIGludCBfX2Nvc2hpZnRfID0gc2l6ZW9mKHVpbnRtYXhfdCkgKiA4IC0gX19zaGlmdDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IF9fY29zaGlmdCA9IChfX3NoaWZ0ICE9IDApID8gX19jb3NoaWZ0XyA6IDA7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX2MxID0gdWludG1heF90KDEpIDw8IF9fc2hpZnQ7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX2MyID0gdWludG1heF90KDEpIDw8IF9fY29zaGlmdDsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fbmV3X2QgPSBfX2QgKiBfX2MxOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19uZXdfbjAgPSBfX24wICogX19jMTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fbjFfc2hpZnRlZCA9IChfX24xICUgX19kKSAqIF9fYzE7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX24wX3RvcCA9IChfX3NoaWZ0ICE9IDApID8gKF9fbjAgLyBfX2MyKSA6IDA7CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX25ld19uMSA9IF9fbjFfc2hpZnRlZCArIF9fbjBfdG9wOworICAgICAgdHlwZWRlZiBfX2JpZ19kaXZfaW1wbDxfX25ld19uMSwgX19uZXdfbjAsIF9fbmV3X2Q+IF9SZXM7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnRtYXhfdCBfX3F1b3RfaGkgPSBfX24xIC8gX19kOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19xdW90X2xvID0gX1Jlczo6X19xdW90OworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19yZW0gPSBfUmVzOjpfX3JlbSAvIF9fYzE7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2JpZ19tdWw8X19xdW90X2xvLCBfX2Q+IF9QMDsKKyAgICAgIHR5cGVkZWYgX19iaWdfbXVsPF9fcXVvdF9oaSwgX19kPiBfUDE7CisgICAgICB0eXBlZGVmIF9fYmlnX2FkZDxfUDA6Ol9faGksIF9QMDo6X19sbywgX1AxOjpfX2xvLCBfX3JlbT4gX1N1bTsKKyAgICAgIC8vIE5vIG92ZXJmbG93LgorICAgICAgc3RhdGljX2Fzc2VydChfUDE6Ol9faGkgPT0gMCwgIkludGVybmFsIGxpYnJhcnkgZXJyb3IiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX1N1bTo6X19oaSA+PSBfUDA6Ol9faGksICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgICAgICAvLyBNYXRjaGVzIHRoZSBpbnB1dCBkYXRhLgorICAgICAgc3RhdGljX2Fzc2VydChfU3VtOjpfX2hpID09IF9fbjEgJiYgX1N1bTo6X19sbyA9PSBfX24wLAorCQkgICAgIkludGVybmFsIGxpYnJhcnkgZXJyb3IiKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19yZW0gPCBfX2QsICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBQcm92aWRlcyBjb21waWxlLXRpbWUgcmF0aW9uYWwgYXJpdGhtZXRpYy4KKyAgICoKKyAgICogIFRoaXMgY2xhc3MgdGVtcGxhdGUgcmVwcmVzZW50cyBhbnkgZmluaXRlIHJhdGlvbmFsIG51bWJlciB3aXRoIGEKKyAgICogIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgcmVwcmVzZW50YWJsZSBieSBjb21waWxlLXRpbWUgY29uc3RhbnRzIG9mCisgICAqICB0eXBlIGludG1heF90LiBUaGUgcmF0aW8gaXMgc2ltcGxpZmllZCB3aGVuIGluc3RhbnRpYXRlZC4KKyAgICoKKyAgICogIEZvciBleGFtcGxlOgorICAgKiAgQGNvZGUKKyAgICogICAgc3RkOjpyYXRpbzw3LC0yMT46Om51bSA9PSAtMTsKKyAgICogICAgc3RkOjpyYXRpbzw3LC0yMT46OmRlbiA9PSAzOworICAgKiAgQGVuZGNvZGUKKyAgICogIAorICAqLworICB0ZW1wbGF0ZTxpbnRtYXhfdCBfTnVtLCBpbnRtYXhfdCBfRGVuID0gMT4KKyAgICBzdHJ1Y3QgcmF0aW8KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9EZW4gIT0gMCwgImRlbm9taW5hdG9yIGNhbm5vdCBiZSB6ZXJvIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9OdW0gPj0gLV9fSU5UTUFYX01BWF9fICYmIF9EZW4gPj0gLV9fSU5UTUFYX01BWF9fLAorCQkgICAgIm91dCBvZiByYW5nZSIpOworCisgICAgICAvLyBOb3RlOiBzaWduKE4pICogYWJzKE4pID09IE4KKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50bWF4X3QgbnVtID0KKyAgICAgICAgX051bSAqIF9fc3RhdGljX3NpZ248X0Rlbj46OnZhbHVlIC8gX19zdGF0aWNfZ2NkPF9OdW0sIF9EZW4+Ojp2YWx1ZTsKKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnRtYXhfdCBkZW4gPQorICAgICAgICBfX3N0YXRpY19hYnM8X0Rlbj46OnZhbHVlIC8gX19zdGF0aWNfZ2NkPF9OdW0sIF9EZW4+Ojp2YWx1ZTsKKworICAgICAgdHlwZWRlZiByYXRpbzxudW0sIGRlbj4gdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPGludG1heF90IF9OdW0sIGludG1heF90IF9EZW4+CisgICAgY29uc3RleHByIGludG1heF90IHJhdGlvPF9OdW0sIF9EZW4+OjpudW07CisKKyAgdGVtcGxhdGU8aW50bWF4X3QgX051bSwgaW50bWF4X3QgX0Rlbj4KKyAgICBjb25zdGV4cHIgaW50bWF4X3QgcmF0aW88X051bSwgX0Rlbj46OmRlbjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgX19yYXRpb19tdWx0aXBseQorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgc3RhdGljIGNvbnN0IGludG1heF90IF9fZ2NkMSA9CisgICAgICAgIF9fc3RhdGljX2djZDxfUjE6Om51bSwgX1IyOjpkZW4+Ojp2YWx1ZTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnRtYXhfdCBfX2djZDIgPQorICAgICAgICBfX3N0YXRpY19nY2Q8X1IyOjpudW0sIF9SMTo6ZGVuPjo6dmFsdWU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHJhdGlvPAorICAgICAgICBfX3NhZmVfbXVsdGlwbHk8KF9SMTo6bnVtIC8gX19nY2QxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChfUjI6Om51bSAvIF9fZ2NkMik+Ojp2YWx1ZSwKKyAgICAgICAgX19zYWZlX211bHRpcGx5PChfUjE6OmRlbiAvIF9fZ2NkMiksCisgICAgICAgICAgICAgICAgICAgICAgICAoX1IyOjpkZW4gLyBfX2djZDEpPjo6dmFsdWU+IHR5cGU7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50bWF4X3QgbnVtID0gdHlwZTo6bnVtOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnRtYXhfdCBkZW4gPSB0eXBlOjpkZW47CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBjb25zdGV4cHIgaW50bWF4X3QgX19yYXRpb19tdWx0aXBseTxfUjEsIF9SMj46Om51bTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBjb25zdGV4cHIgaW50bWF4X3QgX19yYXRpb19tdWx0aXBseTxfUjEsIF9SMj46OmRlbjsKKworICAvLy8gcmF0aW9fbXVsdGlwbHkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgdXNpbmcgcmF0aW9fbXVsdGlwbHkgPSB0eXBlbmFtZSBfX3JhdGlvX211bHRpcGx5PF9SMSwgX1IyPjo6dHlwZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgX19yYXRpb19kaXZpZGUKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9SMjo6bnVtICE9IDAsICJkaXZpc2lvbiBieSAwIik7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19yYXRpb19tdWx0aXBseTwKKyAgICAgICAgX1IxLAorICAgICAgICByYXRpbzxfUjI6OmRlbiwgX1IyOjpudW0+Pjo6dHlwZSB0eXBlOworCisgICAgICBzdGF0aWMgY29uc3RleHByIGludG1heF90IG51bSA9IHR5cGU6Om51bTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50bWF4X3QgZGVuID0gdHlwZTo6ZGVuOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgY29uc3RleHByIGludG1heF90IF9fcmF0aW9fZGl2aWRlPF9SMSwgX1IyPjo6bnVtOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIGNvbnN0ZXhwciBpbnRtYXhfdCBfX3JhdGlvX2RpdmlkZTxfUjEsIF9SMj46OmRlbjsKKworICAvLy8gcmF0aW9fZGl2aWRlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHVzaW5nIHJhdGlvX2RpdmlkZSA9IHR5cGVuYW1lIF9fcmF0aW9fZGl2aWRlPF9SMSwgX1IyPjo6dHlwZTsKKworICAvLy8gcmF0aW9fZXF1YWwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgc3RydWN0IHJhdGlvX2VxdWFsCisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfUjE6Om51bSA9PSBfUjI6Om51bSAmJiBfUjE6OmRlbiA9PSBfUjI6OmRlbj4KKyAgICB7IH07CisgIAorICAvLy8gcmF0aW9fbm90X2VxdWFsCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCByYXRpb19ub3RfZXF1YWwKKyAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsICFyYXRpb19lcXVhbDxfUjEsIF9SMj46OnZhbHVlPgorICAgIHsgfTsKKworICAvLyBCb3RoIG51bWJlcnMgYXJlIHBvc2l0aXZlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMiwKKyAgICAgICAgICAgdHlwZW5hbWUgX0xlZnQgPSBfX2JpZ19tdWw8X1IxOjpudW0sX1IyOjpkZW4+LAorICAgICAgICAgICB0eXBlbmFtZSBfUmlnaHQgPSBfX2JpZ19tdWw8X1IyOjpudW0sX1IxOjpkZW4+ID4KKyAgICBzdHJ1Y3QgX19yYXRpb19sZXNzX2ltcGxfMQorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19iaWdfbGVzczxfTGVmdDo6X19oaSwgX0xlZnQ6Ol9fbG8sCisgICAgICAgICAgIF9SaWdodDo6X19oaSwgX1JpZ2h0OjpfX2xvPjo6dmFsdWU+CisgICAgeyB9OyAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMiwKKwkgICBib29sID0gKF9SMTo6bnVtID09IDAgfHwgX1IyOjpudW0gPT0gMAorCQkgICB8fCAoX19zdGF0aWNfc2lnbjxfUjE6Om51bT46OnZhbHVlCisJCSAgICAgICAhPSBfX3N0YXRpY19zaWduPF9SMjo6bnVtPjo6dmFsdWUpKSwKKwkgICBib29sID0gKF9fc3RhdGljX3NpZ248X1IxOjpudW0+Ojp2YWx1ZSA9PSAtMQorCQkgICAmJiBfX3N0YXRpY19zaWduPF9SMjo6bnVtPjo6dmFsdWUgPT0gLTEpPgorICAgIHN0cnVjdCBfX3JhdGlvX2xlc3NfaW1wbAorICAgIDogX19yYXRpb19sZXNzX2ltcGxfMTxfUjEsIF9SMj46OnR5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgc3RydWN0IF9fcmF0aW9fbGVzc19pbXBsPF9SMSwgX1IyLCB0cnVlLCBmYWxzZT4KKyAgICA6IGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9SMTo6bnVtIDwgX1IyOjpudW0+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCBfX3JhdGlvX2xlc3NfaW1wbDxfUjEsIF9SMiwgZmFsc2UsIHRydWU+CisgICAgOiBfX3JhdGlvX2xlc3NfaW1wbF8xPHJhdGlvPC1fUjI6Om51bSwgX1IyOjpkZW4+LAorICAgICAgICAgICByYXRpbzwtX1IxOjpudW0sIF9SMTo6ZGVuPiA+Ojp0eXBlCisgICAgeyB9OworCisgIC8vLyByYXRpb19sZXNzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCByYXRpb19sZXNzCisgICAgOiBfX3JhdGlvX2xlc3NfaW1wbDxfUjEsIF9SMj46OnR5cGUKKyAgICB7IH07CisgICAgCisgIC8vLyByYXRpb19sZXNzX2VxdWFsCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCByYXRpb19sZXNzX2VxdWFsCisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAhcmF0aW9fbGVzczxfUjIsIF9SMT46OnZhbHVlPgorICAgIHsgfTsKKyAgCisgIC8vLyByYXRpb19ncmVhdGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCByYXRpb19ncmVhdGVyCisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCByYXRpb19sZXNzPF9SMiwgX1IxPjo6dmFsdWU+CisgICAgeyB9OworCisgIC8vLyByYXRpb19ncmVhdGVyX2VxdWFsCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHN0cnVjdCByYXRpb19ncmVhdGVyX2VxdWFsCisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAhcmF0aW9fbGVzczxfUjEsIF9SMj46OnZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMiwKKyAgICAgIGJvb2wgPSAoX1IxOjpudW0gPj0gMCksCisgICAgICBib29sID0gKF9SMjo6bnVtID49IDApLAorICAgICAgYm9vbCA9IHJhdGlvX2xlc3M8cmF0aW88X19zdGF0aWNfYWJzPF9SMTo6bnVtPjo6dmFsdWUsIF9SMTo6ZGVuPiwKKyAgICAgICAgcmF0aW88X19zdGF0aWNfYWJzPF9SMjo6bnVtPjo6dmFsdWUsIF9SMjo6ZGVuPiA+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19yYXRpb19hZGRfaW1wbAorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JhdGlvX2FkZF9pbXBsPAorICAgICAgICByYXRpbzwtX1IxOjpudW0sIF9SMTo6ZGVuPiwKKyAgICAgICAgcmF0aW88LV9SMjo6bnVtLCBfUjI6OmRlbj4gPjo6dHlwZSBfX3Q7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiByYXRpbzwtX190OjpudW0sIF9fdDo6ZGVuPiB0eXBlOworICAgIH07CisKKyAgLy8gVHJ1ZSBhZGRpdGlvbiBvZiBub25uZWdhdGl2ZSBudW1iZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMiwgYm9vbCBfX2I+CisgICAgc3RydWN0IF9fcmF0aW9fYWRkX2ltcGw8X1IxLCBfUjIsIHRydWUsIHRydWUsIF9fYj4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fZyA9IF9fc3RhdGljX2djZDxfUjE6OmRlbiwgX1IyOjpkZW4+Ojp2YWx1ZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludG1heF90IF9fZDIgPSBfUjI6OmRlbiAvIF9fZzsKKyAgICAgIHR5cGVkZWYgX19iaWdfbXVsPF9SMTo6ZGVuLCBfX2QyPiBfX2Q7CisgICAgICB0eXBlZGVmIF9fYmlnX211bDxfUjE6Om51bSwgX1IyOjpkZW4gLyBfX2c+IF9feDsKKyAgICAgIHR5cGVkZWYgX19iaWdfbXVsPF9SMjo6bnVtLCBfUjE6OmRlbiAvIF9fZz4gX195OworICAgICAgdHlwZWRlZiBfX2JpZ19hZGQ8X194OjpfX2hpLCBfX3g6Ol9fbG8sIF9feTo6X19oaSwgX195OjpfX2xvPiBfX247CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fbjo6X19oaSA+PSBfX3g6Ol9faGksICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgICAgICB0eXBlZGVmIF9fYmlnX2RpdjxfX246Ol9faGksIF9fbjo6X19sbywgX19nPiBfX25nOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19nMiA9IF9fc3RhdGljX2djZDxfX25nOjpfX3JlbSwgX19nPjo6dmFsdWU7CisgICAgICB0eXBlZGVmIF9fYmlnX2RpdjxfX246Ol9faGksIF9fbjo6X19sbywgX19nMj4gX19uX2ZpbmFsOworICAgICAgc3RhdGljX2Fzc2VydChfX25fZmluYWw6Ol9fcmVtID09IDAsICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fbl9maW5hbDo6X19xdW90X2hpID09IDAgJiYKKyAgICAgICAgX19uX2ZpbmFsOjpfX3F1b3RfbG8gPD0gX19JTlRNQVhfTUFYX18sICJvdmVyZmxvdyBpbiBhZGRpdGlvbiIpOworICAgICAgdHlwZWRlZiBfX2JpZ19tdWw8X1IxOjpkZW4gLyBfX2cyLCBfX2QyPiBfX2RfZmluYWw7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fZF9maW5hbDo6X19oaSA9PSAwICYmCisgICAgICAgIF9fZF9maW5hbDo6X19sbyA8PSBfX0lOVE1BWF9NQVhfXywgIm92ZXJmbG93IGluIGFkZGl0aW9uIik7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiByYXRpbzxfX25fZmluYWw6Ol9fcXVvdF9sbywgX19kX2ZpbmFsOjpfX2xvPiB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgc3RydWN0IF9fcmF0aW9fYWRkX2ltcGw8X1IxLCBfUjIsIGZhbHNlLCB0cnVlLCB0cnVlPgorICAgIDogX19yYXRpb19hZGRfaW1wbDxfUjIsIF9SMT4KKyAgICB7IH07CisKKyAgLy8gVHJ1ZSBzdWJ0cmFjdGlvbiBvZiBub25uZWdhdGl2ZSBudW1iZXJzIHlpZWxkaW5nIGEgbm9ubmVnYXRpdmUgcmVzdWx0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBzdHJ1Y3QgX19yYXRpb19hZGRfaW1wbDxfUjEsIF9SMiwgdHJ1ZSwgZmFsc2UsIGZhbHNlPgorICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19nID0gX19zdGF0aWNfZ2NkPF9SMTo6ZGVuLCBfUjI6OmRlbj46OnZhbHVlOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19kMiA9IF9SMjo6ZGVuIC8gX19nOworICAgICAgdHlwZWRlZiBfX2JpZ19tdWw8X1IxOjpkZW4sIF9fZDI+IF9fZDsKKyAgICAgIHR5cGVkZWYgX19iaWdfbXVsPF9SMTo6bnVtLCBfUjI6OmRlbiAvIF9fZz4gX194OworICAgICAgdHlwZWRlZiBfX2JpZ19tdWw8LV9SMjo6bnVtLCBfUjE6OmRlbiAvIF9fZz4gX195OworICAgICAgdHlwZWRlZiBfX2JpZ19zdWI8X194OjpfX2hpLCBfX3g6Ol9fbG8sIF9feTo6X19oaSwgX195OjpfX2xvPiBfX247CisgICAgICB0eXBlZGVmIF9fYmlnX2RpdjxfX246Ol9faGksIF9fbjo6X19sbywgX19nPiBfX25nOworICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50bWF4X3QgX19nMiA9IF9fc3RhdGljX2djZDxfX25nOjpfX3JlbSwgX19nPjo6dmFsdWU7CisgICAgICB0eXBlZGVmIF9fYmlnX2RpdjxfX246Ol9faGksIF9fbjo6X19sbywgX19nMj4gX19uX2ZpbmFsOworICAgICAgc3RhdGljX2Fzc2VydChfX25fZmluYWw6Ol9fcmVtID09IDAsICJJbnRlcm5hbCBsaWJyYXJ5IGVycm9yIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fbl9maW5hbDo6X19xdW90X2hpID09IDAgJiYKKyAgICAgICAgX19uX2ZpbmFsOjpfX3F1b3RfbG8gPD0gX19JTlRNQVhfTUFYX18sICJvdmVyZmxvdyBpbiBhZGRpdGlvbiIpOworICAgICAgdHlwZWRlZiBfX2JpZ19tdWw8X1IxOjpkZW4gLyBfX2cyLCBfX2QyPiBfX2RfZmluYWw7CisgICAgICBzdGF0aWNfYXNzZXJ0KF9fZF9maW5hbDo6X19oaSA9PSAwICYmCisgICAgICAgIF9fZF9maW5hbDo6X19sbyA8PSBfX0lOVE1BWF9NQVhfXywgIm92ZXJmbG93IGluIGFkZGl0aW9uIik7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiByYXRpbzxfX25fZmluYWw6Ol9fcXVvdF9sbywgX19kX2ZpbmFsOjpfX2xvPiB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgc3RydWN0IF9fcmF0aW9fYWRkCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3JhdGlvX2FkZF9pbXBsPF9SMSwgX1IyPjo6dHlwZSB0eXBlOworICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnRtYXhfdCBudW0gPSB0eXBlOjpudW07CisgICAgICBzdGF0aWMgY29uc3RleHByIGludG1heF90IGRlbiA9IHR5cGU6OmRlbjsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIGNvbnN0ZXhwciBpbnRtYXhfdCBfX3JhdGlvX2FkZDxfUjEsIF9SMj46Om51bTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICBjb25zdGV4cHIgaW50bWF4X3QgX19yYXRpb19hZGQ8X1IxLCBfUjI+OjpkZW47CisKKyAgLy8vIHJhdGlvX2FkZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUjEsIHR5cGVuYW1lIF9SMj4KKyAgICB1c2luZyByYXRpb19hZGQgPSB0eXBlbmFtZSBfX3JhdGlvX2FkZDxfUjEsIF9SMj46OnR5cGU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgc3RydWN0IF9fcmF0aW9fc3VidHJhY3QKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fcmF0aW9fYWRkPAorICAgICAgICBfUjEsCisgICAgICAgIHJhdGlvPC1fUjI6Om51bSwgX1IyOjpkZW4+Pjo6dHlwZSB0eXBlOworCisgICAgICBzdGF0aWMgY29uc3RleHByIGludG1heF90IG51bSA9IHR5cGU6Om51bTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50bWF4X3QgZGVuID0gdHlwZTo6ZGVuOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgY29uc3RleHByIGludG1heF90IF9fcmF0aW9fc3VidHJhY3Q8X1IxLCBfUjI+OjpudW07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1IxLCB0eXBlbmFtZSBfUjI+CisgICAgY29uc3RleHByIGludG1heF90IF9fcmF0aW9fc3VidHJhY3Q8X1IxLCBfUjI+OjpkZW47CisKKyAgLy8vIHJhdGlvX3N1YnRyYWN0CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SMSwgdHlwZW5hbWUgX1IyPgorICAgIHVzaW5nIHJhdGlvX3N1YnRyYWN0ID0gdHlwZW5hbWUgX19yYXRpb19zdWJ0cmFjdDxfUjEsIF9SMj46OnR5cGU7CisKKworICB0eXBlZGVmIHJhdGlvPDEsICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDA+IGF0dG87CisgIHR5cGVkZWYgcmF0aW88MSwgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMD4gZmVtdG87CisgIHR5cGVkZWYgcmF0aW88MSwgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMD4gcGljbzsKKyAgdHlwZWRlZiByYXRpbzwxLCAgICAgICAgICAgICAgICAxMDAwMDAwMDAwPiBuYW5vOworICB0eXBlZGVmIHJhdGlvPDEsICAgICAgICAgICAgICAgICAgIDEwMDAwMDA+IG1pY3JvOworICB0eXBlZGVmIHJhdGlvPDEsICAgICAgICAgICAgICAgICAgICAgIDEwMDA+IG1pbGxpOworICB0eXBlZGVmIHJhdGlvPDEsICAgICAgICAgICAgICAgICAgICAgICAxMDA+IGNlbnRpOworICB0eXBlZGVmIHJhdGlvPDEsICAgICAgICAgICAgICAgICAgICAgICAgMTA+IGRlY2k7CisgIHR5cGVkZWYgcmF0aW88ICAgICAgICAgICAgICAgICAgICAgICAxMCwgMT4gZGVjYTsKKyAgdHlwZWRlZiByYXRpbzwgICAgICAgICAgICAgICAgICAgICAgMTAwLCAxPiBoZWN0bzsKKyAgdHlwZWRlZiByYXRpbzwgICAgICAgICAgICAgICAgICAgICAxMDAwLCAxPiBraWxvOworICB0eXBlZGVmIHJhdGlvPCAgICAgICAgICAgICAgICAgIDEwMDAwMDAsIDE+IG1lZ2E7CisgIHR5cGVkZWYgcmF0aW88ICAgICAgICAgICAgICAgMTAwMDAwMDAwMCwgMT4gZ2lnYTsKKyAgdHlwZWRlZiByYXRpbzwgICAgICAgICAgICAxMDAwMDAwMDAwMDAwLCAxPiB0ZXJhOworICB0eXBlZGVmIHJhdGlvPCAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAsIDE+IHBldGE7CisgIHR5cGVkZWYgcmF0aW88ICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMCwgMT4gZXhhOworCisgIC8vIEB9IGdyb3VwIHJhdGlvCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvL19HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vX0dMSUJDWFhfUkFUSU8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvcmVnZXggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3JlZ2V4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwN2Y1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3JlZ2V4CkBAIC0wLDAgKzEsNjYgQEAKKy8vIDxyZWdleD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvcmVnZXgKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfUkVHRVgKKyNkZWZpbmUgX0dMSUJDWFhfUkVHRVggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGJpdHNldD4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjIGluY2x1ZGUgPGlvc2Z3ZD4KKyNlbmRpZgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RhY2s+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgPGJpdHMvcmFuZ2VfYWNjZXNzLmg+CisjaW5jbHVkZSA8Yml0cy9yZWdleF9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxiaXRzL3JlZ2V4X2Vycm9yLmg+CisjaW5jbHVkZSA8Yml0cy9yZWdleF9jdXJzb3IuaD4KKyNpbmNsdWRlIDxiaXRzL3JlZ2V4X25mYS5oPgorI2luY2x1ZGUgPGJpdHMvcmVnZXhfY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxiaXRzL3JlZ2V4X2dyZXBfbWF0Y2hlci5oPgorI2luY2x1ZGUgPGJpdHMvcmVnZXguaD4KKworI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9SRUdFWApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zY29wZWRfYWxsb2NhdG9yIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zY29wZWRfYWxsb2NhdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjE5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Njb3BlZF9hbGxvY2F0b3IKQEAgLTAsMCArMSw0NjMgQEAKKy8vIDxzY29wZWRfYWxsb2NhdG9yPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9zY29wZWRfYWxsb2NhdG9yCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9TQ09QRURfQUxMT0NBVE9SCisjZGVmaW5lIF9TQ09QRURfQUxMT0NBVE9SIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8Yml0cy9hbGxvY190cmFpdHMuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBfUHJlZCwgdHlwZW5hbWUuLi4gX0FsbG9jcz4KKyAgICBzdHJ1Y3QgX19hbnlfb2Y7CisKKyAgdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIF9QcmVkLCB0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lLi4uIF9BbGxvY3M+CisgICAgc3RydWN0IF9fYW55X29mPF9QcmVkLCBfQWxsb2MsIF9BbGxvY3MuLi4+CisgICAgOiBfX29yXzxfUHJlZDxfQWxsb2M+LCBfX2FueV9vZjxfUHJlZCwgX0FsbG9jcy4uLj4+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBfUHJlZCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBfX2FueV9vZjxfUHJlZCwgX0FsbG9jPgorICAgIDogX1ByZWQ8X0FsbG9jPgorICAgIHsgfTsKKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgYWxsb2NhdG9ycworICAgKiBAeworICAgKi8KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RydWN0IF9fcHJvcGFnYXRlX29uX2NvcHkKKyAgICA6IGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPjo6cHJvcGFnYXRlX29uX2NvbnRhaW5lcl9jb3B5X2Fzc2lnbm1lbnQKKyAgICB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgX19wcm9wYWdhdGVfb25fbW92ZQorICAgIDogYWxsb2NhdG9yX3RyYWl0czxfQWxsb2M+Ojpwcm9wYWdhdGVfb25fY29udGFpbmVyX21vdmVfYXNzaWdubWVudAorICAgIHsgfTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHN0cnVjdCBfX3Byb3BhZ2F0ZV9vbl9zd2FwCisgICAgOiBhbGxvY2F0b3JfdHJhaXRzPF9BbGxvYz46OnByb3BhZ2F0ZV9vbl9jb250YWluZXJfc3dhcAorICAgIHsgfTsKKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgYXV0bworICAgIF9fZG9fb3V0ZXJtb3N0KF9BbGxvYyYgX19hLCBfQWxsb2MqKSAtPiBkZWNsdHlwZShfX2Eub3V0ZXJfYWxsb2NhdG9yKCkpCisgICAgeyByZXR1cm4gX19hLm91dGVyX2FsbG9jYXRvcigpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBfQWxsb2MmCisgICAgX19kb19vdXRlcm1vc3QoX0FsbG9jJiBfX2EsIC4uLikKKyAgICB7IHJldHVybiBfX2E7IH0KKworICAvLyBUT0RPOiBtYWtlIHJlY3Vyc2l2ZSAoc2VlIG5vdGUgaW4gMjAuMTIuNC8xKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGF1dG8KKyAgICBfX291dGVybW9zdChfQWxsb2MmIF9fYSkgLT4gZGVjbHR5cGUoX19kb19vdXRlcm1vc3QoX19hLCAmX19hKSkKKyAgICB7IHJldHVybiBfX2RvX291dGVybW9zdChfX2EsICZfX2EpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX091dGVyQWxsb2MsIHR5cGVuYW1lLi4uIF9Jbm5lckFsbG9jcz4KKyAgICBjbGFzcyBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3I7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IAorICAgIHN0cnVjdCBfX2lubmVyX3R5cGVfaW1wbDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0ZXI+CisgICAgc3RydWN0IF9faW5uZXJfdHlwZV9pbXBsPF9PdXRlcj4KKyAgICB7CisgICAgICB0eXBlZGVmIHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcjxfT3V0ZXI+IF9fdHlwZTsKKworICAgICAgX19pbm5lcl90eXBlX2ltcGwoKSA9IGRlZmF1bHQ7CisgICAgICBfX2lubmVyX3R5cGVfaW1wbChjb25zdCBfX2lubmVyX3R5cGVfaW1wbCYpID0gZGVmYXVsdDsKKyAgICAgIF9faW5uZXJfdHlwZV9pbXBsKF9faW5uZXJfdHlwZV9pbXBsJiYpID0gZGVmYXVsdDsKKyAgICAgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgICAgX19pbm5lcl90eXBlX2ltcGwoY29uc3QgX19pbm5lcl90eXBlX2ltcGw8X0FsbG9jPiYgX19vdGhlcikKKyAgICAgIHsgfQorICAgICAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgICBfX2lubmVyX3R5cGVfaW1wbChfX2lubmVyX3R5cGVfaW1wbDxfQWxsb2M+JiYgX19vdGhlcikKKyAgICAgIHsgfQorICAgICAgCisgICAgICBfX3R5cGUmIAorICAgICAgX01fZ2V0KF9fdHlwZSogX19wKSBub2V4Y2VwdCB7IHJldHVybiAqX19wOyB9CisKKyAgICAgIGNvbnN0IF9fdHlwZSYgCisgICAgICBfTV9nZXQoY29uc3QgX190eXBlKiBfX3ApIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICpfX3A7IH0KKyAgICAgIAorICAgICAgdHVwbGU8PiAKKyAgICAgIF9NX3RpZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIHR1cGxlPD4oKTsgfQorICAgICAgCisgICAgICBib29sIAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfX2lubmVyX3R5cGVfaW1wbCYpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiB0cnVlOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0ZXIsIHR5cGVuYW1lIF9Jbm5lckhlYWQsIHR5cGVuYW1lLi4uIF9Jbm5lclRhaWw+CisgICAgc3RydWN0IF9faW5uZXJfdHlwZV9pbXBsPF9PdXRlciwgX0lubmVySGVhZCwgX0lubmVyVGFpbC4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcjxfSW5uZXJIZWFkLCBfSW5uZXJUYWlsLi4uPiBfX3R5cGU7CisgICAgICAKKyAgICAgIF9faW5uZXJfdHlwZV9pbXBsKCkgPSBkZWZhdWx0OworICAgICAgX19pbm5lcl90eXBlX2ltcGwoY29uc3QgX19pbm5lcl90eXBlX2ltcGwmKSA9IGRlZmF1bHQ7CisgICAgICBfX2lubmVyX3R5cGVfaW1wbChfX2lubmVyX3R5cGVfaW1wbCYmKSA9IGRlZmF1bHQ7CisgICAgICAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BbGxvY3M+CisgICAgICBfX2lubmVyX3R5cGVfaW1wbChjb25zdCBfX2lubmVyX3R5cGVfaW1wbDxfQWxsb2NzLi4uPiYgX19vdGhlcikKKyAgICAgIDogX01faW5uZXIoX19vdGhlci5fTV9pbm5lcikgeyB9CisgICAgICAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BbGxvY3M+CisgICAgICBfX2lubmVyX3R5cGVfaW1wbChfX2lubmVyX3R5cGVfaW1wbDxfQWxsb2NzLi4uPiYmIF9fb3RoZXIpCisgICAgICA6IF9NX2lubmVyKHN0ZDo6bW92ZShfX290aGVyLl9NX2lubmVyKSkgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIGV4cGxpY2l0CisgICAgICBfX2lubmVyX3R5cGVfaW1wbChfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIDogX01faW5uZXIoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSB7IH0KKworICAgICAgX190eXBlJiAKKyAgICAgIF9NX2dldCh2b2lkKikgbm9leGNlcHQgeyByZXR1cm4gX01faW5uZXI7IH0KKyAgICAgIAorICAgICAgY29uc3QgX190eXBlJiAKKyAgICAgIF9NX2dldChjb25zdCB2b2lkKikgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01faW5uZXI7IH0KKyAgICAgIAorICAgICAgdHVwbGU8Y29uc3QgX0lubmVySGVhZCYsIGNvbnN0IF9Jbm5lclRhaWwmLi4uPiAKKyAgICAgIF9NX3RpZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9pbm5lci5fTV90aWUoKTsgfQorICAgICAgCisgICAgICBib29sIAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfX2lubmVyX3R5cGVfaW1wbCYgX19vdGhlcikgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9NX2lubmVyID09IF9fb3RoZXIuX01faW5uZXI7IH0KKyAgICAgIAorICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gZnJpZW5kIGNsYXNzIF9faW5uZXJfdHlwZV9pbXBsOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lLi4uPiBmcmllbmQgY2xhc3Mgc2NvcGVkX2FsbG9jYXRvcl9hZGFwdG9yOworICAgICAgCisgICAgICBfX3R5cGUgX01faW5uZXI7CisgICAgfTsKKworICAvLy8gUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX091dGVyQWxsb2MsIHR5cGVuYW1lLi4uIF9Jbm5lckFsbG9jcz4KKyAgICBjbGFzcyBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3IKKyAgICA6IHB1YmxpYyBfT3V0ZXJBbGxvYworICAgIHsKKyAgICAgIHR5cGVkZWYgYWxsb2NhdG9yX3RyYWl0czxfT3V0ZXJBbGxvYz4gX190cmFpdHM7CisKKyAgICAgIHR5cGVkZWYgX19pbm5lcl90eXBlX2ltcGw8X091dGVyQWxsb2MsIF9Jbm5lckFsbG9jcy4uLj4gX19pbm5lcl90eXBlOworICAgICAgX19pbm5lcl90eXBlIF9NX2lubmVyOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0ZXIsIHR5cGVuYW1lLi4uIF9Jbm5lcj4KKyAgICAgICAgZnJpZW5kIGNsYXNzIHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcjsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4+CisgICAgICAgIGZyaWVuZCBjbGFzcyBfX2lubmVyX3R5cGVfaW1wbDsKKworICAgICAgdHVwbGU8Y29uc3QgX091dGVyQWxsb2MmLCBjb25zdCBfSW5uZXJBbGxvY3MmLi4uPgorICAgICAgX01fdGllKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6dHVwbGVfY2F0KHN0ZDo6dGllKG91dGVyX2FsbG9jYXRvcigpKSwgX01faW5uZXIuX01fdGllKCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKwl1c2luZyBfX291dGVybW9zdF90eXBlID0gdHlwZW5hbWUKKwkgIHN0ZDo6ZGVjYXk8ZGVjbHR5cGUoX19vdXRlcm1vc3Qoc3RkOjpkZWNsdmFsPF9BbGxvYyY+KCkpKT46OnR5cGU7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKwl1c2luZyBfX291dGVybW9zdF9hbGxvY190cmFpdHMKKwkgID0gYWxsb2NhdG9yX3RyYWl0czxfX291dGVybW9zdF90eXBlPF9BbGxvYz4+OworICAgICAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB2b2lkIAorICAgICAgICBfTV9jb25zdHJ1Y3QoX191c2VzX2FsbG9jMCwgX1RwKiBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7CisJICB0eXBlZGVmIF9fb3V0ZXJtb3N0X2FsbG9jX3RyYWl0czxzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3I+IF9PX3RyYWl0czsKKwkgIF9PX3RyYWl0czo6Y29uc3RydWN0KF9fb3V0ZXJtb3N0KCp0aGlzKSwgX19wLAorCQkJICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICAgIH0KKworICAgICAgdHlwZWRlZiBfX3VzZXNfYWxsb2MxPHR5cGVuYW1lIF9faW5uZXJfdHlwZTo6X190eXBlPiBfX3VzZXNfYWxsb2MxXzsKKyAgICAgIHR5cGVkZWYgX191c2VzX2FsbG9jMjx0eXBlbmFtZSBfX2lubmVyX3R5cGU6Ol9fdHlwZT4gX191c2VzX2FsbG9jMl87CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQgCisgICAgICAgIF9NX2NvbnN0cnVjdChfX3VzZXNfYWxsb2MxXywgX1RwKiBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQorICAgICAgICB7CisJICB0eXBlZGVmIF9fb3V0ZXJtb3N0X2FsbG9jX3RyYWl0czxzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3I+IF9PX3RyYWl0czsKKwkgIF9PX3RyYWl0czo6Y29uc3RydWN0KF9fb3V0ZXJtb3N0KCp0aGlzKSwgX19wLAorCQkJICAgICAgIGFsbG9jYXRvcl9hcmcsIGlubmVyX2FsbG9jYXRvcigpLAorCQkJICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7CisgICAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdm9pZCAKKyAgICAgICAgX01fY29uc3RydWN0KF9fdXNlc19hbGxvYzJfLCBfVHAqIF9fcCwgX0FyZ3MmJi4uLiBfX2FyZ3MpCisgICAgICAgIHsKKwkgIHR5cGVkZWYgX19vdXRlcm1vc3RfYWxsb2NfdHJhaXRzPHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcj4gX09fdHJhaXRzOworCSAgX09fdHJhaXRzOjpjb25zdHJ1Y3QoX19vdXRlcm1vc3QoKnRoaXMpLCBfX3AsCisJCQkgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uLAorCQkJICAgICAgIGlubmVyX2FsbG9jYXRvcigpKTsKKyAgICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgICAgIHN0YXRpYyBfQWxsb2MKKyAgICAgICAgX1Nfc2VsZWN0X29uX2NvcHkoY29uc3QgX0FsbG9jJiBfX2EpCisgICAgICAgIHsKKyAgICAgICAgICB0eXBlZGVmIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPiBfX2FfdHJhaXRzOworICAgICAgICAgIHJldHVybiBfX2FfdHJhaXRzOjpzZWxlY3Rfb25fY29udGFpbmVyX2NvcHlfY29uc3RydWN0aW9uKF9fYSk7CisgICAgICAgIH0KKworICAgICAgdGVtcGxhdGU8c3RkOjpzaXplX3QuLi4gX0luZGljZXM+CisgICAgICAgIHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcih0dXBsZTxjb25zdCBfT3V0ZXJBbGxvYyYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfSW5uZXJBbGxvY3MmLi4uPiBfX3JlZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5kZXhfdHVwbGU8X0luZGljZXMuLi4+KQorICAgICAgICA6IF9PdXRlckFsbG9jKF9TX3NlbGVjdF9vbl9jb3B5KHN0ZDo6Z2V0PDA+KF9fcmVmcykpKSwKKyAgICAgICAgICBfTV9pbm5lcihfU19zZWxlY3Rfb25fY29weShzdGQ6OmdldDxfSW5kaWNlcysxPihfX3JlZnMpKS4uLikKKyAgICAgICAgeyB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9PdXRlckFsbG9jICAgICAgICAgICAgICAgICAgICAgICBvdXRlcl9hbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbm5lcl90eXBlOjpfX3R5cGUgICAgIGlubmVyX2FsbG9jYXRvcl90eXBlOworCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzOjp2YWx1ZV90eXBlICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzOjpzaXplX3R5cGUgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHM6OmRpZmZlcmVuY2VfdHlwZSAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0czo6cG9pbnRlciAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0czo6Y29uc3RfcG9pbnRlciAgICAgICAgICBjb25zdF9wb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0czo6dm9pZF9wb2ludGVyICAgICAgICAgICB2b2lkX3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzOjpjb25zdF92b2lkX3BvaW50ZXIgICAgIGNvbnN0X3ZvaWRfcG9pbnRlcjsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25kaXRpb25hbDwKKyAgICAgICAgX19hbnlfb2Y8X19wcm9wYWdhdGVfb25fY29weSwgX091dGVyQWxsb2MsIF9Jbm5lckFsbG9jcy4uLj46OnZhbHVlLAorICAgICAgICB0cnVlX3R5cGUsIGZhbHNlX3R5cGU+Ojp0eXBlIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfY29weV9hc3NpZ25tZW50OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25kaXRpb25hbDwKKyAgICAgICAgX19hbnlfb2Y8X19wcm9wYWdhdGVfb25fbW92ZSwgX091dGVyQWxsb2MsIF9Jbm5lckFsbG9jcy4uLj46OnZhbHVlLAorICAgICAgICB0cnVlX3R5cGUsIGZhbHNlX3R5cGU+Ojp0eXBlIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfbW92ZV9hc3NpZ25tZW50OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25kaXRpb25hbDwKKyAgICAgICAgX19hbnlfb2Y8X19wcm9wYWdhdGVfb25fc3dhcCwgX091dGVyQWxsb2MsIF9Jbm5lckFsbG9jcy4uLj46OnZhbHVlLAorICAgICAgICB0cnVlX3R5cGUsIGZhbHNlX3R5cGU+Ojp0eXBlIHByb3BhZ2F0ZV9vbl9jb250YWluZXJfc3dhcDsKKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgICAgICAgc3RydWN0IHJlYmluZAorICAgICAgICB7CisgICAgICAgICAgdHlwZWRlZiBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3I8CisgICAgICAgICAgICB0eXBlbmFtZSBfX3RyYWl0czo6dGVtcGxhdGUgcmViaW5kX2FsbG9jPF9UcD4sCisgICAgICAgICAgICBfSW5uZXJBbGxvY3MuLi4+IG90aGVyOworICAgICAgICB9OworCisgICAgICBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3IoKSA6IF9PdXRlckFsbG9jKCksIF9NX2lubmVyKCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRlcjI+CisgICAgICAgIHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcihfT3V0ZXIyJiYgX19vdXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9Jbm5lckFsbG9jcyYuLi4gX19pbm5lcikKKyAgICAgICAgOiBfT3V0ZXJBbGxvYyhzdGQ6OmZvcndhcmQ8X091dGVyMj4oX19vdXRlcikpLAorICAgICAgICAgIF9NX2lubmVyKF9faW5uZXIuLi4pCisgICAgICAgIHsgfQorCisgICAgICBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3IoY29uc3Qgc2NvcGVkX2FsbG9jYXRvcl9hZGFwdG9yJiBfX290aGVyKQorICAgICAgOiBfT3V0ZXJBbGxvYyhfX290aGVyLm91dGVyX2FsbG9jYXRvcigpKSwKKwlfTV9pbm5lcihfX290aGVyLl9NX2lubmVyKQorICAgICAgeyB9CisKKyAgICAgIHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcihzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3ImJiBfX290aGVyKQorICAgICAgOiBfT3V0ZXJBbGxvYyhzdGQ6Om1vdmUoX19vdGhlci5vdXRlcl9hbGxvY2F0b3IoKSkpLAorCV9NX2lubmVyKHN0ZDo6bW92ZShfX290aGVyLl9NX2lubmVyKSkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0ZXIyPgorICAgICAgICBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3IoCisgICAgICAgICAgICBjb25zdCBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3I8X091dGVyMiwgX0lubmVyQWxsb2NzLi4uPiYgX19vdGhlcikKKyAgICAgICAgOiBfT3V0ZXJBbGxvYyhfX290aGVyLm91dGVyX2FsbG9jYXRvcigpKSwKKyAgICAgICAgICBfTV9pbm5lcihfX290aGVyLl9NX2lubmVyKQorICAgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX091dGVyMj4KKyAgICAgICAgc2NvcGVkX2FsbG9jYXRvcl9hZGFwdG9yKAorICAgICAgICAgICAgc2NvcGVkX2FsbG9jYXRvcl9hZGFwdG9yPF9PdXRlcjIsIF9Jbm5lckFsbG9jcy4uLj4mJiBfX290aGVyKQorICAgICAgICA6IF9PdXRlckFsbG9jKHN0ZDo6bW92ZShfX290aGVyLm91dGVyX2FsbG9jYXRvcigpKSksCisgICAgICAgICAgX01faW5uZXIoc3RkOjptb3ZlKF9fb3RoZXIuX01faW5uZXIpKQorICAgICAgICB7IH0KKworICAgICAgaW5uZXJfYWxsb2NhdG9yX3R5cGUmIGlubmVyX2FsbG9jYXRvcigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9pbm5lci5fTV9nZXQodGhpcyk7IH0KKworICAgICAgY29uc3QgaW5uZXJfYWxsb2NhdG9yX3R5cGUmIGlubmVyX2FsbG9jYXRvcigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfTV9pbm5lci5fTV9nZXQodGhpcyk7IH0KKworICAgICAgb3V0ZXJfYWxsb2NhdG9yX3R5cGUmIG91dGVyX2FsbG9jYXRvcigpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfT3V0ZXJBbGxvYyY+KCp0aGlzKTsgfQorCisgICAgICBjb25zdCBvdXRlcl9hbGxvY2F0b3JfdHlwZSYgb3V0ZXJfYWxsb2NhdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9PdXRlckFsbG9jJj4oKnRoaXMpOyB9CisKKyAgICAgIHBvaW50ZXIgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIF9fdHJhaXRzOjphbGxvY2F0ZShvdXRlcl9hbGxvY2F0b3IoKSwgX19uKTsgfQorCisgICAgICBwb2ludGVyIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0X3ZvaWRfcG9pbnRlciBfX2hpbnQpCisgICAgICB7IHJldHVybiBfX3RyYWl0czo6YWxsb2NhdGUob3V0ZXJfYWxsb2NhdG9yKCksIF9fbiwgX19oaW50KTsgfQorCisgICAgICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiBfX3RyYWl0czo6ZGVhbGxvY2F0ZShvdXRlcl9hbGxvY2F0b3IoKSwgX19wLCBfX24pOyB9CisKKyAgICAgIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfX3RyYWl0czo6bWF4X3NpemUob3V0ZXJfYWxsb2NhdG9yKCkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHZvaWQgY29uc3RydWN0KF9UcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICAgICAgeworICAgICAgICAgIGF1dG8mIF9faW5uZXIgPSBpbm5lcl9hbGxvY2F0b3IoKTsKKyAgICAgICAgICBhdXRvIF9fdXNlX3RhZworICAgICAgICAgICAgPSBfX3VzZV9hbGxvYzxfVHAsIGlubmVyX2FsbG9jYXRvcl90eXBlLCBfQXJncy4uLj4oX19pbm5lcik7CisgICAgICAgICAgX01fY29uc3RydWN0KF9fdXNlX3RhZywgX19wLCBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyLCB0eXBlbmFtZS4uLiBfQXJnczEsCisJICAgICAgIHR5cGVuYW1lLi4uIF9BcmdzMj4KKwl2b2lkCisJY29uc3RydWN0KHBhaXI8X1QxLCBfVDI+KiBfX3AsIHBpZWNld2lzZV9jb25zdHJ1Y3RfdCwKKwkJICB0dXBsZTxfQXJnczEuLi4+IF9feCwgdHVwbGU8X0FyZ3MyLi4uPiBfX3kpCisJeworCSAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworCSAgLy8gMjIwMy4gIHdyb25nIGFyZ3VtZW50IHR5cGVzIGZvciBwaWVjZXdpc2UgY29uc3RydWN0aW9uCisJICBhdXRvJiBfX2lubmVyID0gaW5uZXJfYWxsb2NhdG9yKCk7CisJICBhdXRvIF9feF91c2VfdGFnCisJICAgID0gX191c2VfYWxsb2M8X1QxLCBpbm5lcl9hbGxvY2F0b3JfdHlwZSwgX0FyZ3MxLi4uPihfX2lubmVyKTsKKwkgIGF1dG8gX195X3VzZV90YWcKKwkgICAgPSBfX3VzZV9hbGxvYzxfVDIsIGlubmVyX2FsbG9jYXRvcl90eXBlLCBfQXJnczIuLi4+KF9faW5uZXIpOworCSAgdHlwZWRlZiBfX291dGVybW9zdF9hbGxvY190cmFpdHM8c2NvcGVkX2FsbG9jYXRvcl9hZGFwdG9yPiBfT190cmFpdHM7CisJICBfT190cmFpdHM6OmNvbnN0cnVjdChfX291dGVybW9zdCgqdGhpcyksIF9fcCwgcGllY2V3aXNlX2NvbnN0cnVjdCwKKwkJCSAgICAgICBfTV9jb25zdHJ1Y3RfcChfX3hfdXNlX3RhZywgX194KSwKKwkJCSAgICAgICBfTV9jb25zdHJ1Y3RfcChfX3lfdXNlX3RhZywgX195KSk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKwl2b2lkCisJY29uc3RydWN0KHBhaXI8X1QxLCBfVDI+KiBfX3ApCisJeyBjb25zdHJ1Y3QoX19wLCBwaWVjZXdpc2VfY29uc3RydWN0LCB0dXBsZTw+KCksIHR1cGxlPD4oKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDIsIHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUgX1ZwPgorCXZvaWQKKwljb25zdHJ1Y3QocGFpcjxfVDEsIF9UMj4qIF9fcCwgX1VwJiYgX191LCBfVnAmJiBfX3YpCisJeworCSAgY29uc3RydWN0KF9fcCwgcGllY2V3aXNlX2NvbnN0cnVjdCwKKwkJICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShzdGQ6OmZvcndhcmQ8X1VwPihfX3UpKSwKKwkJICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShzdGQ6OmZvcndhcmQ8X1ZwPihfX3YpKSk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMiwgdHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfVnA+CisJdm9pZAorCWNvbnN0cnVjdChwYWlyPF9UMSwgX1QyPiogX19wLCBjb25zdCBwYWlyPF9VcCwgX1ZwPiYgX194KQorCXsKKwkgIGNvbnN0cnVjdChfX3AsIHBpZWNld2lzZV9jb25zdHJ1Y3QsCisJCSAgICBzdGQ6OmZvcndhcmRfYXNfdHVwbGUoX194LmZpcnN0KSwKKwkJICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShfX3guc2Vjb25kKSk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMiwgdHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfVnA+CisJdm9pZAorCWNvbnN0cnVjdChwYWlyPF9UMSwgX1QyPiogX19wLCBwYWlyPF9VcCwgX1ZwPiYmIF9feCkKKwl7CisJICBjb25zdHJ1Y3QoX19wLCBwaWVjZXdpc2VfY29uc3RydWN0LAorCQkgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Zm9yd2FyZDxfVXA+KF9feC5maXJzdCkpLAorCQkgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKHN0ZDo6Zm9yd2FyZDxfVnA+KF9feC5zZWNvbmQpKSk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHZvaWQgZGVzdHJveShfVHAqIF9fcCkKKyAgICAgICAgeworCSAgdHlwZWRlZiBfX291dGVybW9zdF9hbGxvY190cmFpdHM8c2NvcGVkX2FsbG9jYXRvcl9hZGFwdG9yPiBfT190cmFpdHM7CisJICBfT190cmFpdHM6OmRlc3Ryb3koX19vdXRlcm1vc3QoKnRoaXMpLCBfX3ApOworCX0KKworICAgICAgc2NvcGVkX2FsbG9jYXRvcl9hZGFwdG9yCisgICAgICBzZWxlY3Rfb25fY29udGFpbmVyX2NvcHlfY29uc3RydWN0aW9uKCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQnVpbGRfaW5kZXhfdHVwbGU8c2l6ZW9mLi4uKF9Jbm5lckFsbG9jcyk+OjpfX3R5cGUKKwkgICAgX0luZGljZXM7CisgICAgICAgIHJldHVybiBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3IoX01fdGllKCksIF9JbmRpY2VzKCkpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX091dEExLCB0eXBlbmFtZSBfT3V0QTIsIHR5cGVuYW1lLi4uIF9JbkE+CisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3I8X091dEExLCBfSW5BLi4uPiYgX19hLAorICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3I8X091dEEyLCBfSW5BLi4uPiYgX19iKSBub2V4Y2VwdDsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHVwbGU+CisJX1R1cGxlJiYKKwlfTV9jb25zdHJ1Y3RfcChfX3VzZXNfYWxsb2MwLCBfVHVwbGUmIF9fdCkKKwl7IHJldHVybiBzdGQ6Om1vdmUoX190KTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKwlzdGQ6OnR1cGxlPGFsbG9jYXRvcl9hcmdfdCwgaW5uZXJfYWxsb2NhdG9yX3R5cGUmLCBfQXJncy4uLj4KKwlfTV9jb25zdHJ1Y3RfcChfX3VzZXNfYWxsb2MxXywgc3RkOjp0dXBsZTxfQXJncy4uLj4mIF9fdCkKKwl7CisJICB0eXBlZGVmIHN0ZDo6dHVwbGU8YWxsb2NhdG9yX2FyZ190LCBpbm5lcl9hbGxvY2F0b3JfdHlwZSY+IF9UdXBsZTsKKwkgIHJldHVybiBzdGQ6OnR1cGxlX2NhdChfVHVwbGUoYWxsb2NhdG9yX2FyZywgaW5uZXJfYWxsb2NhdG9yKCkpLAorCQkJCXN0ZDo6bW92ZShfX3QpKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorCXN0ZDo6dHVwbGU8X0FyZ3MuLi4sIGlubmVyX2FsbG9jYXRvcl90eXBlJj4KKwlfTV9jb25zdHJ1Y3RfcChfX3VzZXNfYWxsb2MyXywgc3RkOjp0dXBsZTxfQXJncy4uLj4mIF9fdCkKKwl7CisJICB0eXBlZGVmIHN0ZDo6dHVwbGU8aW5uZXJfYWxsb2NhdG9yX3R5cGUmPiBfVHVwbGU7CisJICByZXR1cm4gc3RkOjp0dXBsZV9jYXQoc3RkOjptb3ZlKF9fdCksIF9UdXBsZShpbm5lcl9hbGxvY2F0b3IoKSkpOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBfT3V0QTEsIHR5cGVuYW1lIF9PdXRBMiwgdHlwZW5hbWUuLi4gX0luQT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3Qgc2NvcGVkX2FsbG9jYXRvcl9hZGFwdG9yPF9PdXRBMSwgX0luQS4uLj4mIF9fYSwKKyAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcjxfT3V0QTIsIF9JbkEuLi4+JiBfX2IpIG5vZXhjZXB0CisgICAgeworICAgICAgcmV0dXJuIF9fYS5vdXRlcl9hbGxvY2F0b3IoKSA9PSBfX2Iub3V0ZXJfYWxsb2NhdG9yKCkKKyAgICAgICAgICAmJiBfX2EuX01faW5uZXIgPT0gX19iLl9NX2lubmVyOworICAgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX091dEExLCB0eXBlbmFtZSBfT3V0QTIsIHR5cGVuYW1lLi4uIF9JbkE+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHNjb3BlZF9hbGxvY2F0b3JfYWRhcHRvcjxfT3V0QTEsIF9JbkEuLi4+JiBfX2EsCisgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfYWxsb2NhdG9yX2FkYXB0b3I8X091dEEyLCBfSW5BLi4uPiYgX19iKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuICEoX19hID09IF9fYik7IH0KKworICAvLy8gQH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9TQ09QRURfQUxMT0NBVE9SCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3NldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTQ2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3NldApAQCAtMCwwICsxLDczIEBACisvLyA8c2V0PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NAorICogSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIEhld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vCisgKiByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk3CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS9zZXQKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfU0VUCisjZGVmaW5lIF9HTElCQ1hYX1NFVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvc3RsX3RyZWUuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9zZXQuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9tdWx0aXNldC5oPgorI2luY2x1ZGUgPGJpdHMvcmFuZ2VfYWNjZXNzLmg+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBpbmNsdWRlIDxkZWJ1Zy9zZXQ+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1BST0ZJTEUKKyMgaW5jbHVkZSA8cHJvZmlsZS9zZXQ+CisjZW5kaWYKKworI2VuZGlmIC8qIF9HTElCQ1hYX1NFVCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zc3RyZWFtIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zc3RyZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMWZkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3NzdHJlYW0KQEAgLTAsMCArMSw2MDIgQEAKKy8vIFN0cmluZyBiYXNlZCBzdHJlYW1zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL3NzdHJlYW0KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyNy43ICBTdHJpbmctYmFzZWQgc3RyZWFtcworLy8KKworI2lmbmRlZiBfR0xJQkNYWF9TU1RSRUFNCisjZGVmaW5lIF9HTElCQ1hYX1NTVFJFQU0gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxpc3RyZWFtPgorI2luY2x1ZGUgPG9zdHJlYW0+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBbMjcuNy4xXSB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdidWYKKyAgLyoqCisgICAqICBAYnJpZWYgIFRoZSBhY3R1YWwgd29yayBvZiBpbnB1dCBhbmQgb3V0cHV0IChmb3Igc3RkOjpzdHJpbmcpLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIEB0cGFyYW0gX0NoYXJUICBUeXBlIG9mIGNoYXJhY3RlciBzdHJlYW0uCisgICAqICBAdHBhcmFtIF9UcmFpdHMgIFRyYWl0cyBmb3IgY2hhcmFjdGVyIHR5cGUsIGRlZmF1bHRzIHRvCisgICAqICAgICAgICAgICAgICAgICAgIGNoYXJfdHJhaXRzPF9DaGFyVD4uCisgICAqICBAdHBhcmFtIF9BbGxvYyAgQWxsb2NhdG9yIHR5cGUsIGRlZmF1bHRzIHRvIGFsbG9jYXRvcjxfQ2hhclQ+LgorICAgKgorICAgKiAgVGhpcyBjbGFzcyBhc3NvY2lhdGVzIGVpdGhlciBvciBib3RoIG9mIGl0cyBpbnB1dCBhbmQgb3V0cHV0IHNlcXVlbmNlcworICAgKiAgd2l0aCBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMsIHdoaWNoIGNhbiBiZSBpbml0aWFsaXplZCBmcm9tLCBvciBtYWRlCisgICAqICBhdmFpbGFibGUgYXMsIGEgQGMgc3RkOjpiYXNpY19zdHJpbmcuICAoUGFyYXBocmFzZWQgZnJvbSBbMjcuNy4xXS8xLikKKyAgICoKKyAgICogIEZvciB0aGlzIGNsYXNzLCBvcGVuIG1vZGVzIChvZiB0eXBlIEBjIGlvc19iYXNlOjpvcGVubW9kZSkgaGF2ZQorICAgKiAgQGMgaW4gc2V0IGlmIHRoZSBpbnB1dCBzZXF1ZW5jZSBjYW4gYmUgcmVhZCwgYW5kIEBjIG91dCBzZXQgaWYgdGhlCisgICAqICBvdXRwdXQgc2VxdWVuY2UgY2FuIGJlIHdyaXR0ZW4uCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZiA6IHB1YmxpYyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUIAkJCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzIAkJCQkJdHJhaXRzX3R5cGU7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNTEuIGJhc2ljX3N0cmluZ2J1ZiBtaXNzaW5nIGFsbG9jYXRvcl90eXBlCisgICAgICB0eXBlZGVmIF9BbGxvYwkJCQkgICAgICAgCWFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgCQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIAkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSAJCW9mZl90eXBlOworCisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiAgCV9fc3RyZWFtYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyX3R5cGUsIF9UcmFpdHMsIF9BbGxvYz4gCV9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZQkJX19zaXplX3R5cGU7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLy8gUGxhY2UgdG8gc3Rhc2ggaW4gfHwgb3V0IHx8IGluIHwgb3V0IHNldHRpbmdzIGZvciBjdXJyZW50IHN0cmluZ2J1Zi4KKyAgICAgIGlvc19iYXNlOjpvcGVubW9kZSAJX01fbW9kZTsKKworICAgICAgLy8gRGF0YSBNZW1iZXJzOgorICAgICAgX19zdHJpbmdfdHlwZSAJCV9NX3N0cmluZzsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9yczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3RhcnRzIHdpdGggYW4gZW1wdHkgc3RyaW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fbW9kZSAgV2hldGhlciB0aGUgYnVmZmVyIGNhbiByZWFkLCBvciB3cml0ZSwgb3IgYm90aC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIHBhcmVudCBjbGFzcyB1c2luZyBpdHMKKyAgICAgICAqICBvd24gZGVmYXVsdCBjdG9yLgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19zdHJpbmdidWYoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCisgICAgICA6IF9fc3RyZWFtYnVmX3R5cGUoKSwgX01fbW9kZShfX21vZGUpLCBfTV9zdHJpbmcoKQorICAgICAgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3RhcnRzIHdpdGggYW4gZXhpc3Rpbmcgc3RyaW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBBIHN0cmluZyB0byBjb3B5IGFzIGEgc3RhcnRpbmcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX19tb2RlICBXaGV0aGVyIHRoZSBidWZmZXIgY2FuIHJlYWQsIG9yIHdyaXRlLCBvciBib3RoLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVzIHRoZSBwYXJlbnQgY2xhc3MgdXNpbmcgaXRzCisgICAgICAgKiAgb3duIGRlZmF1bHQgY3Rvci4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfc3RyaW5nYnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3RyLAorCQkgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKKyAgICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9tb2RlKCksIF9NX3N0cmluZyhfX3N0ci5kYXRhKCksIF9fc3RyLnNpemUoKSkKKyAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQorCisgICAgICAvLyBHZXQgYW5kIHNldDoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29weWluZyBvdXQgdGhlIHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHJldHVybiAgQSBjb3B5IG9mIG9uZSBvZiB0aGUgdW5kZXJseWluZyBzZXF1ZW5jZXMuCisgICAgICAgKgorICAgICAgICogIDxlbT5JZiB0aGUgYnVmZmVyIGlzIG9ubHkgY3JlYXRlZCBpbiBpbnB1dCBtb2RlLCB0aGUgdW5kZXJseWluZworICAgICAgICogIGNoYXJhY3RlciBzZXF1ZW5jZSBpcyBlcXVhbCB0byB0aGUgaW5wdXQgc2VxdWVuY2U7IG90aGVyd2lzZSwgaXQKKyAgICAgICAqICBpcyBlcXVhbCB0byB0aGUgb3V0cHV0IHNlcXVlbmNlLjwvZW0+IFsyNy43LjEuMl0vMQorICAgICAgKi8KKyAgICAgIF9fc3RyaW5nX3R5cGUKKyAgICAgIHN0cigpIGNvbnN0CisgICAgICB7CisJX19zdHJpbmdfdHlwZSBfX3JldDsKKwlpZiAodGhpcy0+cHB0cigpKQorCSAgeworCSAgICAvLyBUaGUgY3VycmVudCBlZ3B0cigpIG1heSBub3QgYmUgdGhlIGFjdHVhbCBzdHJpbmcgZW5kLgorCSAgICBpZiAodGhpcy0+cHB0cigpID4gdGhpcy0+ZWdwdHIoKSkKKwkgICAgICBfX3JldCA9IF9fc3RyaW5nX3R5cGUodGhpcy0+cGJhc2UoKSwgdGhpcy0+cHB0cigpKTsKKwkgICAgZWxzZQorIAkgICAgICBfX3JldCA9IF9fc3RyaW5nX3R5cGUodGhpcy0+cGJhc2UoKSwgdGhpcy0+ZWdwdHIoKSk7CisJICB9CisJZWxzZQorCSAgX19yZXQgPSBfTV9zdHJpbmc7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldHRpbmcgYSBuZXcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgc3RyaW5nIHRvIHVzZSBhcyBhIG5ldyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgRGVhbGxvY2F0ZXMgYW55IHByZXZpb3VzIHN0b3JlZCBzZXF1ZW5jZSwgdGhlbiBjb3BpZXMgQGEgcyB0bworICAgICAgICogIHVzZSBhcyBhIG5ldyBvbmUuCisgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKKyAgICAgIHsKKwkvLyBDYW5ub3QgdXNlIF9NX3N0cmluZyA9IF9fcywgc2luY2UgdjMgc3RyaW5ncyBhcmUgQ09XLgorCV9NX3N0cmluZy5hc3NpZ24oX19zLmRhdGEoKSwgX19zLnNpemUoKSk7CisJX01fc3RyaW5nYnVmX2luaXQoX01fbW9kZSk7CisgICAgICB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBDb21tb24gaW5pdGlhbGl6YXRpb24gY29kZSBnb2VzIGhlcmUuCisgICAgICB2b2lkCisgICAgICBfTV9zdHJpbmdidWZfaW5pdChpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQorICAgICAgeworCV9NX21vZGUgPSBfX21vZGU7CisJX19zaXplX3R5cGUgX19sZW4gPSAwOworCWlmIChfTV9tb2RlICYgKGlvc19iYXNlOjphdGUgfCBpb3NfYmFzZTo6YXBwKSkKKwkgIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsKKwlfTV9zeW5jKGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX01fc3RyaW5nLmRhdGEoKSksIDAsIF9fbGVuKTsKKyAgICAgIH0KKworICAgICAgdmlydHVhbCBzdHJlYW1zaXplCisgICAgICBzaG93bWFueWMoKQorICAgICAgeyAKKwlzdHJlYW1zaXplIF9fcmV0ID0gLTE7CisJaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pCisJICB7CisJICAgIF9NX3VwZGF0ZV9lZ3B0cigpOworCSAgICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CisJICB9CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICB2aXJ0dWFsIGludF90eXBlCisgICAgICB1bmRlcmZsb3coKTsKKworICAgICAgdmlydHVhbCBpbnRfdHlwZQorICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7CisKKyAgICAgIHZpcnR1YWwgaW50X3R5cGUKKyAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWFuaXB1bGF0ZXMgdGhlIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgUG9pbnRlciB0byBhIGJ1ZmZlciBhcmVhLgorICAgICAgICogIEBwYXJhbSAgX19uICBTaXplIG9mIEBhIF9fcy4KKyAgICAgICAqICBAcmV0dXJuICBAYyB0aGlzCisgICAgICAgKgorICAgICAgICogIElmIG5vIGJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIGFuZCBib3RoIEBhIF9fcyBhbmQgQGEgX19uIGFyZQorICAgICAgICogIG5vbi16ZXJvLCB0aGVuIEBjIF9fcyBpcyB1c2VkIGFzIGEgYnVmZmVyOyBzZWUKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNXMwMi5odG1sCisgICAgICAgKiAgZm9yIG1vcmUuCisgICAgICAqLworICAgICAgdmlydHVhbCBfX3N0cmVhbWJ1Zl90eXBlKgorICAgICAgc2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKKyAgICAgIHsKKwlpZiAoX19zICYmIF9fbiA+PSAwKQorCSAgeworCSAgICAvLyBUaGlzIGlzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3IsIGFuZCBhc3N1bWVzCisJICAgIC8vIHRoYXQgYW4gZXh0ZXJuYWwgY2hhcl90eXBlIGFycmF5IG9mIGxlbmd0aCBfX24gZXhpc3RzCisJICAgIC8vIGFuZCBoYXMgYmVlbiBwcmUtYWxsb2NhdGVkLiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwKKwkgICAgLy8gdGhpbmdzIHdpbGwgcXVpY2tseSBibG93IHVwLgorCSAgICAKKwkgICAgLy8gU3RlcCAxOiBEZXN0cm95IHRoZSBjdXJyZW50IGludGVybmFsIGFycmF5LgorCSAgICBfTV9zdHJpbmcuY2xlYXIoKTsKKwkgICAgCisJICAgIC8vIFN0ZXAgMjogVXNlIHRoZSBleHRlcm5hbCBhcnJheS4KKwkgICAgX01fc3luYyhfX3MsIF9fbiwgMCk7CisJICB9CisJcmV0dXJuIHRoaXM7CisgICAgICB9CisKKyAgICAgIHZpcnR1YWwgcG9zX3R5cGUKKyAgICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAorCSAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKKworICAgICAgdmlydHVhbCBwb3NfdHlwZQorICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAorCSAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKKworICAgICAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNvcnJlY3RseSB1cGRhdGluZyB0aGUgaW50ZXJuYWwgYnVmZmVyCisgICAgICAvLyBmb3IgYSBwYXJ0aWN1bGFyIF9NX3N0cmluZywgZHVlIHRvIGluaXRpYWxpemF0aW9uIG9yIHJlLXNpemluZworICAgICAgLy8gb2YgYW4gZXhpc3RpbmcgX01fc3RyaW5nLgorICAgICAgdm9pZAorICAgICAgX01fc3luYyhjaGFyX3R5cGUqIF9fYmFzZSwgX19zaXplX3R5cGUgX19pLCBfX3NpemVfdHlwZSBfX28pOworCisgICAgICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY29ycmVjdGx5IHVwZGF0aW5nIGVncHRyKCkgdG8gdGhlIGFjdHVhbAorICAgICAgLy8gc3RyaW5nIGVuZC4KKyAgICAgIHZvaWQKKyAgICAgIF9NX3VwZGF0ZV9lZ3B0cigpCisgICAgICB7CisJY29uc3QgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CisJaWYgKHRoaXMtPnBwdHIoKSAmJiB0aGlzLT5wcHRyKCkgPiB0aGlzLT5lZ3B0cigpKQorCSAgeworCSAgICBpZiAoX190ZXN0aW4pCisJICAgICAgdGhpcy0+c2V0Zyh0aGlzLT5lYmFjaygpLCB0aGlzLT5ncHRyKCksIHRoaXMtPnBwdHIoKSk7CisJICAgIGVsc2UKKwkgICAgICB0aGlzLT5zZXRnKHRoaXMtPnBwdHIoKSwgdGhpcy0+cHB0cigpLCB0aGlzLT5wcHRyKCkpOworCSAgfQorICAgICAgfQorCisgICAgICAvLyBXb3JrcyBhcm91bmQgdGhlIGlzc3VlIHdpdGggcGJ1bXAsIHBhcnQgb2YgdGhlIHByb3RlY3RlZAorICAgICAgLy8gaW50ZXJmYWNlIG9mIGJhc2ljX3N0cmVhbWJ1ZiwgdGFraW5nIGp1c3QgYW4gaW50LgorICAgICAgdm9pZAorICAgICAgX01fcGJ1bXAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kLCBvZmZfdHlwZSBfX29mZik7CisgICAgfTsKKworCisgIC8vIFsyNy43LjJdIFRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW0KKyAgLyoqCisgICAqICBAYnJpZWYgIENvbnRyb2xsaW5nIGlucHV0IGZvciBzdGQ6OnN0cmluZy4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBAdHBhcmFtIF9DaGFyVCAgVHlwZSBvZiBjaGFyYWN0ZXIgc3RyZWFtLgorICAgKiAgQHRwYXJhbSBfVHJhaXRzICBUcmFpdHMgZm9yIGNoYXJhY3RlciB0eXBlLCBkZWZhdWx0cyB0bworICAgKiAgICAgICAgICAgICAgICAgICBjaGFyX3RyYWl0czxfQ2hhclQ+LgorICAgKiAgQHRwYXJhbSBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8X0NoYXJUPi4KKyAgICoKKyAgICogIFRoaXMgY2xhc3Mgc3VwcG9ydHMgcmVhZGluZyBmcm9tIG9iamVjdHMgb2YgdHlwZSBzdGQ6OmJhc2ljX3N0cmluZywKKyAgICogIHVzaW5nIHRoZSBpbmhlcml0ZWQgZnVuY3Rpb25zIGZyb20gc3RkOjpiYXNpY19pc3RyZWFtLiAgVG8gY29udHJvbAorICAgKiAgdGhlIGFzc29jaWF0ZWQgc2VxdWVuY2UsIGFuIGluc3RhbmNlIG9mIHN0ZDo6YmFzaWNfc3RyaW5nYnVmIGlzIHVzZWQsCisgICAqICB3aGljaCB0aGlzIHBhZ2UgcmVmZXJzIHRvIGFzIEBjIHNiLgorICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUeXBlczoKKyAgICAgIHR5cGVkZWYgX0NoYXJUIAkJCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzIAkJCQkJdHJhaXRzX3R5cGU7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyNTEuIGJhc2ljX3N0cmluZ2J1ZiBtaXNzaW5nIGFsbG9jYXRvcl90eXBlCisgICAgICB0eXBlZGVmIF9BbGxvYwkJCQkgICAgICAgCWFsbG9jYXRvcl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgCQlpbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIAkJcG9zX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSAJCW9mZl90eXBlOworCisgICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZXM6CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gCV9fc3RyaW5nX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gCV9fc3RyaW5nYnVmX3R5cGU7CisgICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4JX19pc3RyZWFtX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX19zdHJpbmdidWZfdHlwZQlfTV9zdHJpbmdidWY7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDb25zdHJ1Y3RvcnM6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIERlZmF1bHQgY29uc3RydWN0b3Igc3RhcnRzIHdpdGggYW4gZW1wdHkgc3RyaW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fbW9kZSAgV2hldGhlciB0aGUgYnVmZmVyIGNhbiByZWFkLCBvciB3cml0ZSwgb3IgYm90aC4KKyAgICAgICAqCisgICAgICAgKiAgQGMgaW9zX2Jhc2U6OmluIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4gQGEgX19tb2RlLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBAYyBfX21vZGV8aW4sIGFuZCBwYXNzZXMgQGMgJnNiIHRvIHRoZSBiYXNlCisgICAgICAgKiAgY2xhc3MgaW5pdGlhbGl6ZXIuICBEb2VzIG5vdCBhbGxvY2F0ZSBhbnkgYnVmZmVyLgorICAgICAgICoKKyAgICAgICAqICBUaGF0J3MgYSBsaWUuICBXZSBpbml0aWFsaXplIHRoZSBiYXNlIGNsYXNzIHdpdGggTlVMTCwgYmVjYXVzZSB0aGUKKyAgICAgICAqICBzdHJpbmcgY2xhc3MgZG9lcyBpdHMgb3duIG1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBiYXNpY19pc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCisgICAgICA6IF9faXN0cmVhbV90eXBlKCksIF9NX3N0cmluZ2J1ZihfX21vZGUgfCBpb3NfYmFzZTo6aW4pCisgICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTdGFydHMgd2l0aCBhbiBleGlzdGluZyBzdHJpbmcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX19zdHIgIEEgc3RyaW5nIHRvIGNvcHkgYXMgYSBzdGFydGluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIFdoZXRoZXIgdGhlIGJ1ZmZlciBjYW4gcmVhZCwgb3Igd3JpdGUsIG9yIGJvdGguCisgICAgICAgKgorICAgICAgICogIEBjIGlvc19iYXNlOjppbiBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGluIEBhIG1vZGUuCisgICAgICAgKgorICAgICAgICogIEluaXRpYWxpemVzIEBjIHNiIHVzaW5nIEBhIHN0ciBhbmQgQGMgbW9kZXxpbiwgYW5kIHBhc3NlcyBAYyAmc2IKKyAgICAgICAqICB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4KKyAgICAgICAqCisgICAgICAgKiAgVGhhdCdzIGEgbGllLiAgV2UgaW5pdGlhbGl6ZSB0aGUgYmFzZSBjbGFzcyB3aXRoIE5VTEwsIGJlY2F1c2UgdGhlCisgICAgICAgKiAgc3RyaW5nIGNsYXNzIGRvZXMgaXRzIG93biBtZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfaXN0cmluZ3N0cmVhbShjb25zdCBfX3N0cmluZ190eXBlJiBfX3N0ciwKKwkJCSAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikKKyAgICAgIDogX19pc3RyZWFtX3R5cGUoKSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pCisgICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgZGVzdHJ1Y3RvciBkb2VzIG5vdGhpbmcuCisgICAgICAgKgorICAgICAgICogIFRoZSBidWZmZXIgaXMgZGVhbGxvY2F0ZWQgYnkgdGhlIHN0cmluZ2J1ZiBvYmplY3QsIG5vdCB0aGUKKyAgICAgICAqICBmb3JtYXR0aW5nIHN0cmVhbS4KKyAgICAgICovCisgICAgICB+YmFzaWNfaXN0cmluZ3N0cmVhbSgpCisgICAgICB7IH0KKworICAgICAgLy8gTWVtYmVyczoKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzaW5nIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgY3VycmVudCBiYXNpY19zdHJpbmdidWYgYnVmZmVyLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGhpZGVzIGJvdGggc2lnbmF0dXJlcyBvZiBzdGQ6OmJhc2ljX2lvczo6cmRidWYoKS4KKyAgICAgICovCisgICAgICBfX3N0cmluZ2J1Zl90eXBlKgorICAgICAgcmRidWYoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb3B5aW5nIG91dCB0aGUgc3RyaW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcmV0dXJuICBAYyByZGJ1ZigpLT5zdHIoKQorICAgICAgKi8KKyAgICAgIF9fc3RyaW5nX3R5cGUKKyAgICAgIHN0cigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBTZXR0aW5nIGEgbmV3IGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgVGhlIHN0cmluZyB0byB1c2UgYXMgYSBuZXcgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogIENhbGxzIEBjIHJkYnVmKCktPnN0cihzKS4KKyAgICAgICovCisgICAgICB2b2lkCisgICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zKQorICAgICAgeyBfTV9zdHJpbmdidWYuc3RyKF9fcyk7IH0KKyAgICB9OworCisKKyAgLy8gWzI3LjcuM10gVGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbQorICAvKioKKyAgICogIEBicmllZiAgQ29udHJvbGxpbmcgb3V0cHV0IGZvciBzdGQ6OnN0cmluZy4KKyAgICogIEBpbmdyb3VwIGlvCisgICAqCisgICAqICBAdHBhcmFtIF9DaGFyVCAgVHlwZSBvZiBjaGFyYWN0ZXIgc3RyZWFtLgorICAgKiAgQHRwYXJhbSBfVHJhaXRzICBUcmFpdHMgZm9yIGNoYXJhY3RlciB0eXBlLCBkZWZhdWx0cyB0bworICAgKiAgICAgICAgICAgICAgICAgICBjaGFyX3RyYWl0czxfQ2hhclQ+LgorICAgKiAgQHRwYXJhbSBfQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8X0NoYXJUPi4KKyAgICoKKyAgICogIFRoaXMgY2xhc3Mgc3VwcG9ydHMgd3JpdGluZyB0byBvYmplY3RzIG9mIHR5cGUgc3RkOjpiYXNpY19zdHJpbmcsCisgICAqICB1c2luZyB0aGUgaW5oZXJpdGVkIGZ1bmN0aW9ucyBmcm9tIHN0ZDo6YmFzaWNfb3N0cmVhbS4gIFRvIGNvbnRyb2wKKyAgICogIHRoZSBhc3NvY2lhdGVkIHNlcXVlbmNlLCBhbiBpbnN0YW5jZSBvZiBzdGQ6OmJhc2ljX3N0cmluZ2J1ZiBpcyB1c2VkLAorICAgKiAgd2hpY2ggdGhpcyBwYWdlIHJlZmVycyB0byBhcyBAYyBzYi4KKyAgKi8KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIFR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hhclQgCQkJCQljaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIF9UcmFpdHMgCQkJCQl0cmFpdHNfdHlwZTsKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDI1MS4gYmFzaWNfc3RyaW5nYnVmIG1pc3NpbmcgYWxsb2NhdG9yX3R5cGUKKyAgICAgIHR5cGVkZWYgX0FsbG9jCQkJCSAgICAgICAJYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIAkJb2ZmX3R5cGU7CisKKyAgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlczoKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiAJX19zdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiAJX19zdHJpbmdidWZfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX29zdHJlYW1fdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICBfX3N0cmluZ2J1Zl90eXBlCV9NX3N0cmluZ2J1ZjsKKworICAgIHB1YmxpYzoKKyAgICAgIC8vIENvbnN0cnVjdG9ycy9kZXN0cnVjdG9yOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBEZWZhdWx0IGNvbnN0cnVjdG9yIHN0YXJ0cyB3aXRoIGFuIGVtcHR5IHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgIFdoZXRoZXIgdGhlIGJ1ZmZlciBjYW4gcmVhZCwgb3Igd3JpdGUsIG9yIGJvdGguCisgICAgICAgKgorICAgICAgICogIEBjIGlvc19iYXNlOjpvdXQgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBpbiBAYSBtb2RlLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyBAYyBtb2RlfG91dCwgYW5kIHBhc3NlcyBAYyAmc2IgdG8gdGhlIGJhc2UKKyAgICAgICAqICBjbGFzcyBpbml0aWFsaXplci4gIERvZXMgbm90IGFsbG9jYXRlIGFueSBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIFRoYXQncyBhIGxpZS4gIFdlIGluaXRpYWxpemUgdGhlIGJhc2UgY2xhc3Mgd2l0aCBOVUxMLCBiZWNhdXNlIHRoZQorICAgICAgICogIHN0cmluZyBjbGFzcyBkb2VzIGl0cyBvd24gbWVtb3J5IG1hbmFnZW1lbnQuCisgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX29zdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQpCisgICAgICA6IF9fb3N0cmVhbV90eXBlKCksIF9NX3N0cmluZ2J1ZihfX21vZGUgfCBpb3NfYmFzZTo6b3V0KQorICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU3RhcnRzIHdpdGggYW4gZXhpc3Rpbmcgc3RyaW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBBIHN0cmluZyB0byBjb3B5IGFzIGEgc3RhcnRpbmcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX19tb2RlICBXaGV0aGVyIHRoZSBidWZmZXIgY2FuIHJlYWQsIG9yIHdyaXRlLCBvciBib3RoLgorICAgICAgICoKKyAgICAgICAqICBAYyBpb3NfYmFzZTo6b3V0IGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgaW4gQGEgbW9kZS4KKyAgICAgICAqCisgICAgICAgKiAgSW5pdGlhbGl6ZXMgQGMgc2IgdXNpbmcgQGEgc3RyIGFuZCBAYyBtb2RlfG91dCwgYW5kIHBhc3NlcyBAYyAmc2IKKyAgICAgICAqICB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4KKyAgICAgICAqCisgICAgICAgKiAgVGhhdCdzIGEgbGllLiAgV2UgaW5pdGlhbGl6ZSB0aGUgYmFzZSBjbGFzcyB3aXRoIE5VTEwsIGJlY2F1c2UgdGhlCisgICAgICAgKiAgc3RyaW5nIGNsYXNzIGRvZXMgaXRzIG93biBtZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbShjb25zdCBfX3N0cmluZ190eXBlJiBfX3N0ciwKKwkJCSAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQpCisgICAgICA6IF9fb3N0cmVhbV90eXBlKCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tb2RlIHwgaW9zX2Jhc2U6Om91dCkKKyAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFRoZSBkZXN0cnVjdG9yIGRvZXMgbm90aGluZy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIGJ1ZmZlciBpcyBkZWFsbG9jYXRlZCBieSB0aGUgc3RyaW5nYnVmIG9iamVjdCwgbm90IHRoZQorICAgICAgICogIGZvcm1hdHRpbmcgc3RyZWFtLgorICAgICAgKi8KKyAgICAgIH5iYXNpY19vc3RyaW5nc3RyZWFtKCkKKyAgICAgIHsgfQorCisgICAgICAvLyBNZW1iZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3NpbmcgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGJhc2ljX3N0cmluZ2J1ZiBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaGlkZXMgYm90aCBzaWduYXR1cmVzIG9mIHN0ZDo6YmFzaWNfaW9zOjpyZGJ1ZigpLgorICAgICAgKi8KKyAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCisgICAgICByZGJ1ZigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvcHlpbmcgb3V0IHRoZSBzdHJpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIEBjIHJkYnVmKCktPnN0cigpCisgICAgICAqLworICAgICAgX19zdHJpbmdfdHlwZQorICAgICAgc3RyKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ2J1Zi5zdHIoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldHRpbmcgYSBuZXcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgc3RyaW5nIHRvIHVzZSBhcyBhIG5ldyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgcmRidWYoKS0+c3RyKHMpLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN0cihjb25zdCBfX3N0cmluZ190eXBlJiBfX3MpCisgICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQorICAgIH07CisKKworICAvLyBbMjcuNy40XSBUZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW0KKyAgLyoqCisgICAqICBAYnJpZWYgIENvbnRyb2xsaW5nIGlucHV0IGFuZCBvdXRwdXQgZm9yIHN0ZDo6c3RyaW5nLgorICAgKiAgQGluZ3JvdXAgaW8KKyAgICoKKyAgICogIEB0cGFyYW0gX0NoYXJUICBUeXBlIG9mIGNoYXJhY3RlciBzdHJlYW0uCisgICAqICBAdHBhcmFtIF9UcmFpdHMgIFRyYWl0cyBmb3IgY2hhcmFjdGVyIHR5cGUsIGRlZmF1bHRzIHRvCisgICAqICAgICAgICAgICAgICAgICAgIGNoYXJfdHJhaXRzPF9DaGFyVD4uCisgICAqICBAdHBhcmFtIF9BbGxvYyAgQWxsb2NhdG9yIHR5cGUsIGRlZmF1bHRzIHRvIGFsbG9jYXRvcjxfQ2hhclQ+LgorICAgKgorICAgKiAgVGhpcyBjbGFzcyBzdXBwb3J0cyByZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgdG8gb2JqZWN0cyBvZiB0eXBlCisgICAqICBzdGQ6OmJhc2ljX3N0cmluZywgdXNpbmcgdGhlIGluaGVyaXRlZCBmdW5jdGlvbnMgZnJvbQorICAgKiAgc3RkOjpiYXNpY19pb3N0cmVhbS4gIFRvIGNvbnRyb2wgdGhlIGFzc29jaWF0ZWQgc2VxdWVuY2UsIGFuIGluc3RhbmNlCisgICAqICBvZiBzdGQ6OmJhc2ljX3N0cmluZ2J1ZiBpcyB1c2VkLCB3aGljaCB0aGlzIHBhZ2UgcmVmZXJzIHRvIGFzIEBjIHNiLgorICAqLworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CisgICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gVHlwZXM6CisgICAgICB0eXBlZGVmIF9DaGFyVCAJCQkJCWNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1RyYWl0cyAJCQkJCXRyYWl0c190eXBlOworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjUxLiBiYXNpY19zdHJpbmdidWYgbWlzc2luZyBhbGxvY2F0b3JfdHlwZQorICAgICAgdHlwZWRlZiBfQWxsb2MJCQkJICAgICAgIAlhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIAkJaW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSAJCXBvc190eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgCQlvZmZfdHlwZTsKKworICAgICAgLy8gTm9uLXN0YW5kYXJkIFR5cGVzOgorICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IAlfX3N0cmluZ190eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IAlfX3N0cmluZ2J1Zl90eXBlOworICAgICAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPglfX2lvc3RyZWFtX3R5cGU7CisKKyAgICBwcml2YXRlOgorICAgICAgX19zdHJpbmdidWZfdHlwZQlfTV9zdHJpbmdidWY7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDb25zdHJ1Y3RvcnMvZGVzdHJ1Y3RvcnMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRGVmYXVsdCBjb25zdHJ1Y3RvciBzdGFydHMgd2l0aCBhbiBlbXB0eSBzdHJpbmcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX19tICBXaGV0aGVyIHRoZSBidWZmZXIgY2FuIHJlYWQsIG9yIHdyaXRlLCBvciBib3RoLgorICAgICAgICoKKyAgICAgICAqICBJbml0aWFsaXplcyBAYyBzYiB1c2luZyB0aGUgbW9kZSBmcm9tIEBjIF9fbSwgYW5kIHBhc3NlcyBAYworICAgICAgICogICZzYiB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4gIERvZXMgbm90IGFsbG9jYXRlIGFueQorICAgICAgICogIGJ1ZmZlci4KKyAgICAgICAqCisgICAgICAgKiAgVGhhdCdzIGEgbGllLiAgV2UgaW5pdGlhbGl6ZSB0aGUgYmFzZSBjbGFzcyB3aXRoIE5VTEwsIGJlY2F1c2UgdGhlCisgICAgICAgKiAgc3RyaW5nIGNsYXNzIGRvZXMgaXRzIG93biBtZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX20gPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OmluKQorICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoKSwgX01fc3RyaW5nYnVmKF9fbSkKKyAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN0YXJ0cyB3aXRoIGFuIGV4aXN0aW5nIHN0cmluZyBidWZmZXIuCisgICAgICAgKiAgQHBhcmFtICBfX3N0ciAgQSBzdHJpbmcgdG8gY29weSBhcyBhIHN0YXJ0aW5nIGJ1ZmZlci4KKyAgICAgICAqICBAcGFyYW0gIF9fbSAgV2hldGhlciB0aGUgYnVmZmVyIGNhbiByZWFkLCBvciB3cml0ZSwgb3IgYm90aC4KKyAgICAgICAqCisgICAgICAgKiAgSW5pdGlhbGl6ZXMgQGMgc2IgdXNpbmcgQGEgX19zdHIgYW5kIEBjIF9fbSwgYW5kIHBhc3NlcyBAYyAmc2IKKyAgICAgICAqICB0byB0aGUgYmFzZSBjbGFzcyBpbml0aWFsaXplci4KKyAgICAgICAqCisgICAgICAgKiAgVGhhdCdzIGEgbGllLiAgV2UgaW5pdGlhbGl6ZSB0aGUgYmFzZSBjbGFzcyB3aXRoIE5VTEwsIGJlY2F1c2UgdGhlCisgICAgICAgKiAgc3RyaW5nIGNsYXNzIGRvZXMgaXRzIG93biBtZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3RyLAorCQkJIGlvc19iYXNlOjpvcGVubW9kZSBfX20gPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OmluKQorICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoKSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX20pCisgICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUaGUgZGVzdHJ1Y3RvciBkb2VzIG5vdGhpbmcuCisgICAgICAgKgorICAgICAgICogIFRoZSBidWZmZXIgaXMgZGVhbGxvY2F0ZWQgYnkgdGhlIHN0cmluZ2J1ZiBvYmplY3QsIG5vdCB0aGUKKyAgICAgICAqICBmb3JtYXR0aW5nIHN0cmVhbS4KKyAgICAgICovCisgICAgICB+YmFzaWNfc3RyaW5nc3RyZWFtKCkKKyAgICAgIHsgfQorCisgICAgICAvLyBNZW1iZXJzOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBY2Nlc3NpbmcgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBjdXJyZW50IGJhc2ljX3N0cmluZ2J1ZiBidWZmZXIuCisgICAgICAgKgorICAgICAgICogIFRoaXMgaGlkZXMgYm90aCBzaWduYXR1cmVzIG9mIHN0ZDo6YmFzaWNfaW9zOjpyZGJ1ZigpLgorICAgICAgKi8KKyAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCisgICAgICByZGJ1ZigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvcHlpbmcgb3V0IHRoZSBzdHJpbmcgYnVmZmVyLgorICAgICAgICogIEByZXR1cm4gIEBjIHJkYnVmKCktPnN0cigpCisgICAgICAqLworICAgICAgX19zdHJpbmdfdHlwZQorICAgICAgc3RyKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ2J1Zi5zdHIoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldHRpbmcgYSBuZXcgYnVmZmVyLgorICAgICAgICogIEBwYXJhbSAgX19zICBUaGUgc3RyaW5nIHRvIHVzZSBhcyBhIG5ldyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgcmRidWYoKS0+c3RyKHMpLgorICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHN0cihjb25zdCBfX3N0cmluZ190eXBlJiBfX3MpCisgICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQorICAgIH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2luY2x1ZGUgPGJpdHMvc3N0cmVhbS50Y2M+CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9TU1RSRUFNICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3N0YWNrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zdGFjawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTI4MmUxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zdGFjawpAQCAtMCwwICsxLDYzIEBACisvLyA8c3RhY2s+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL3N0YWNrCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1NUQUNLCisjZGVmaW5lIF9HTElCQ1hYX1NUQUNLIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8ZGVxdWU+CisjaW5jbHVkZSA8Yml0cy9zdGxfc3RhY2suaD4KKworI2VuZGlmIC8qIF9HTElCQ1hYX1NUQUNLICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3N0ZGV4Y2VwdCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvc3RkZXhjZXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NzFkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3N0ZGV4Y2VwdApAQCAtMCwwICsxLDE1OCBAQAorLy8gU3RhbmRhcmQgZXhjZXB0aW9uIGNsYXNzZXMgIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL3N0ZGV4Y2VwdAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworLy8KKy8vIElTTyBDKysgMTkuMSAgRXhjZXB0aW9uIGNsYXNzZXMKKy8vCisKKyNpZm5kZWYgX0dMSUJDWFhfU1RERVhDRVBUCisjZGVmaW5lIF9HTElCQ1hYX1NUREVYQ0VQVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgZXhjZXB0aW9ucworICAgKiBAeworICAgKi8KKworICAvKiogTG9naWMgZXJyb3JzIHJlcHJlc2VudCBwcm9ibGVtcyBpbiB0aGUgaW50ZXJuYWwgbG9naWMgb2YgYSBwcm9ncmFtOworICAgKiAgaW4gdGhlb3J5LCB0aGVzZSBhcmUgcHJldmVudGFibGUsIGFuZCBldmVuIGRldGVjdGFibGUgYmVmb3JlIHRoZQorICAgKiAgcHJvZ3JhbSBydW5zIChlLmcuLCB2aW9sYXRpb25zIG9mIGNsYXNzIGludmFyaWFudHMpLgorICAgKiAgQGJyaWVmIE9uZSBvZiB0d28gc3ViY2xhc3NlcyBvZiBleGNlcHRpb24uCisgICAqLworICBjbGFzcyBsb2dpY19lcnJvciA6IHB1YmxpYyBleGNlcHRpb24gCisgIHsKKyAgICBzdHJpbmcgX01fbXNnOworCisgIHB1YmxpYzoKKyAgICAvKiogVGFrZXMgYSBjaGFyYWN0ZXIgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yLiAgKi8KKyAgICBleHBsaWNpdCAKKyAgICBsb2dpY19lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKKworICAgIHZpcnR1YWwgfmxvZ2ljX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworCisgICAgLyoqIFJldHVybnMgYSBDLXN0eWxlIGNoYXJhY3RlciBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZ2VuZXJhbCBjYXVzZSBvZgorICAgICAqICB0aGUgY3VycmVudCBlcnJvciAodGhlIHNhbWUgc3RyaW5nIHBhc3NlZCB0byB0aGUgY3RvcikuICAqLworICAgIHZpcnR1YWwgY29uc3QgY2hhciogCisgICAgd2hhdCgpIGNvbnN0IF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgfTsKKworICAvKiogVGhyb3duIGJ5IHRoZSBsaWJyYXJ5LCBvciBieSB5b3UsIHRvIHJlcG9ydCBkb21haW4gZXJyb3JzIChkb21haW4gaW4KKyAgICogIHRoZSBtYXRoZW1hdGljYWwgc2Vuc2UpLiAgKi8KKyAgY2xhc3MgZG9tYWluX2Vycm9yIDogcHVibGljIGxvZ2ljX2Vycm9yIAorICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBkb21haW5fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CisgICAgdmlydHVhbCB+ZG9tYWluX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworICB9OworCisgIC8qKiBUaHJvd24gdG8gcmVwb3J0IGludmFsaWQgYXJndW1lbnRzIHRvIGZ1bmN0aW9ucy4gICovCisgIGNsYXNzIGludmFsaWRfYXJndW1lbnQgOiBwdWJsaWMgbG9naWNfZXJyb3IgCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IGludmFsaWRfYXJndW1lbnQoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CisgICAgdmlydHVhbCB+aW52YWxpZF9hcmd1bWVudCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgfTsKKworICAvKiogVGhyb3duIHdoZW4gYW4gb2JqZWN0IGlzIGNvbnN0cnVjdGVkIHRoYXQgd291bGQgZXhjZWVkIGl0cyBtYXhpbXVtCisgICAqICBwZXJtaXR0ZWQgc2l6ZSAoZS5nLiwgYSBiYXNpY19zdHJpbmcgaW5zdGFuY2UpLiAgKi8KKyAgY2xhc3MgbGVuZ3RoX2Vycm9yIDogcHVibGljIGxvZ2ljX2Vycm9yIAorICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBsZW5ndGhfZXJyb3IoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CisgICAgdmlydHVhbCB+bGVuZ3RoX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworICB9OworCisgIC8qKiBUaGlzIHJlcHJlc2VudHMgYW4gYXJndW1lbnQgd2hvc2UgdmFsdWUgaXMgbm90IHdpdGhpbiB0aGUgZXhwZWN0ZWQKKyAgICogIHJhbmdlIChlLmcuLCBib3VuZGFyeSBjaGVja3MgaW4gYmFzaWNfc3RyaW5nKS4gICovCisgIGNsYXNzIG91dF9vZl9yYW5nZSA6IHB1YmxpYyBsb2dpY19lcnJvciAKKyAgeworICBwdWJsaWM6CisgICAgZXhwbGljaXQgb3V0X29mX3JhbmdlKGNvbnN0IHN0cmluZyYgX19hcmcpOworICAgIHZpcnR1YWwgfm91dF9vZl9yYW5nZSgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgfTsKKworICAvKiogUnVudGltZSBlcnJvcnMgcmVwcmVzZW50IHByb2JsZW1zIG91dHNpZGUgdGhlIHNjb3BlIG9mIGEgcHJvZ3JhbTsKKyAgICogIHRoZXkgY2Fubm90IGJlIGVhc2lseSBwcmVkaWN0ZWQgYW5kIGNhbiBnZW5lcmFsbHkgb25seSBiZSBjYXVnaHQgYXMKKyAgICogIHRoZSBwcm9ncmFtIGV4ZWN1dGVzLgorICAgKiAgQGJyaWVmIE9uZSBvZiB0d28gc3ViY2xhc3NlcyBvZiBleGNlcHRpb24uCisgICAqLworICBjbGFzcyBydW50aW1lX2Vycm9yIDogcHVibGljIGV4Y2VwdGlvbiAKKyAgeworICAgIHN0cmluZyBfTV9tc2c7CisKKyAgcHVibGljOgorICAgIC8qKiBUYWtlcyBhIGNoYXJhY3RlciBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZXJyb3IuICAqLworICAgIGV4cGxpY2l0IAorICAgIHJ1bnRpbWVfZXJyb3IoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CisKKyAgICB2aXJ0dWFsIH5ydW50aW1lX2Vycm9yKCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworCisgICAgLyoqIFJldHVybnMgYSBDLXN0eWxlIGNoYXJhY3RlciBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZ2VuZXJhbCBjYXVzZSBvZgorICAgICAqICB0aGUgY3VycmVudCBlcnJvciAodGhlIHNhbWUgc3RyaW5nIHBhc3NlZCB0byB0aGUgY3RvcikuICAqLworICAgIHZpcnR1YWwgY29uc3QgY2hhciogCisgICAgd2hhdCgpIGNvbnN0IF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgfTsKKworICAvKiogVGhyb3duIHRvIGluZGljYXRlIHJhbmdlIGVycm9ycyBpbiBpbnRlcm5hbCBjb21wdXRhdGlvbnMuICAqLworICBjbGFzcyByYW5nZV9lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vycm9yIAorICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCByYW5nZV9lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKKyAgICB2aXJ0dWFsIH5yYW5nZV9lcnJvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgfTsKKworICAvKiogVGhyb3duIHRvIGluZGljYXRlIGFyaXRobWV0aWMgb3ZlcmZsb3cuICAqLworICBjbGFzcyBvdmVyZmxvd19lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vycm9yIAorICB7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBvdmVyZmxvd19lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKKyAgICB2aXJ0dWFsIH5vdmVyZmxvd19lcnJvcigpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgfTsKKworICAvKiogVGhyb3duIHRvIGluZGljYXRlIGFyaXRobWV0aWMgdW5kZXJmbG93LiAgKi8KKyAgY2xhc3MgdW5kZXJmbG93X2Vycm9yIDogcHVibGljIHJ1bnRpbWVfZXJyb3IgCisgIHsKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IHVuZGVyZmxvd19lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKKyAgICB2aXJ0dWFsIH51bmRlcmZsb3dfZXJyb3IoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisgIH07CisKKyAgLy8gQH0gZ3JvdXAgZXhjZXB0aW9ucworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9TVERFWENFUFQgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvc3RyZWFtYnVmIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zdHJlYW1idWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhMzg3MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvc3RyZWFtYnVmCkBAIC0wLDAgKzEsODMwIEBACisvLyBTdHJlYW0gYnVmZmVyIGNsYXNzZXMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvc3RyZWFtYnVmCisgKiAgVGhpcyBpcyBhIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IGhlYWRlci4KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjcuNSAgU3RyZWFtIGJ1ZmZlcnMKKy8vCisKKyNpZm5kZWYgX0dMSUJYWF9TVFJFQU1CVUYKKyNkZWZpbmUgX0dMSUJYWF9TVFJFQU1CVUYgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxiaXRzL2xvY2FsZWZ3ZC5oPgorI2luY2x1ZGUgPGJpdHMvaW9zX2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL2NwcF90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0cmVhbXNpemUKKyAgICBfX2NvcHlfc3RyZWFtYnVmc19lb2YoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qLAorCQkJICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiosIGJvb2wmKTsKKworICAvKioKKyAgICogIEBicmllZiAgVGhlIGFjdHVhbCB3b3JrIG9mIGlucHV0IGFuZCBvdXRwdXQgKGludGVyZmFjZSkuCisgICAqICBAaW5ncm91cCBpbworICAgKgorICAgKiAgQHRwYXJhbSBfQ2hhclQgIFR5cGUgb2YgY2hhcmFjdGVyIHN0cmVhbS4KKyAgICogIEB0cGFyYW0gX1RyYWl0cyAgVHJhaXRzIGZvciBjaGFyYWN0ZXIgdHlwZSwgZGVmYXVsdHMgdG8KKyAgICogICAgICAgICAgICAgICAgICAgY2hhcl90cmFpdHM8X0NoYXJUPi4KKyAgICoKKyAgICogIFRoaXMgaXMgYSBiYXNlIGNsYXNzLiAgRGVyaXZlZCBzdHJlYW0gYnVmZmVycyBlYWNoIGNvbnRyb2wgYQorICAgKiAgcGFpciBvZiBjaGFyYWN0ZXIgc2VxdWVuY2VzOiAgb25lIGZvciBpbnB1dCwgYW5kIG9uZSBmb3Igb3V0cHV0LgorICAgKgorICAgKiAgU2VjdGlvbiBbMjcuNS4xXSBvZiB0aGUgc3RhbmRhcmQgZGVzY3JpYmVzIHRoZSByZXF1aXJlbWVudHMgYW5kCisgICAqICBiZWhhdmlvciBvZiBzdHJlYW0gYnVmZmVyIGNsYXNzZXMuICBUaGF0IHNlY3Rpb24gKHRocmVlIHBhcmFncmFwaHMpCisgICAqICBpcyByZXByb2R1Y2VkIGhlcmUsIGZvciBzaW1wbGljaXR5IGFuZCBhY2N1cmFjeS4KKyAgICoKKyAgICogIC0jIFN0cmVhbSBidWZmZXJzIGNhbiBpbXBvc2UgdmFyaW91cyBjb25zdHJhaW50cyBvbiB0aGUgc2VxdWVuY2VzCisgICAqICAgICB0aGV5IGNvbnRyb2wuICBTb21lIGNvbnN0cmFpbnRzIGFyZToKKyAgICogICAgIC0gVGhlIGNvbnRyb2xsZWQgaW5wdXQgc2VxdWVuY2UgY2FuIGJlIG5vdCByZWFkYWJsZS4KKyAgICogICAgIC0gVGhlIGNvbnRyb2xsZWQgb3V0cHV0IHNlcXVlbmNlIGNhbiBiZSBub3Qgd3JpdGFibGUuCisgICAqICAgICAtIFRoZSBjb250cm9sbGVkIHNlcXVlbmNlcyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZW50cyBvZgorICAgKiAgICAgICBvdGhlciByZXByZXNlbnRhdGlvbnMgZm9yIGNoYXJhY3RlciBzZXF1ZW5jZXMsIHN1Y2ggYXMgZXh0ZXJuYWwKKyAgICogICAgICAgZmlsZXMuCisgICAqICAgICAtIFRoZSBjb250cm9sbGVkIHNlcXVlbmNlcyBjYW4gc3VwcG9ydCBvcGVyYXRpb25zIEBlIGRpcmVjdGx5IHRvIG9yCisgICAqICAgICAgIGZyb20gYXNzb2NpYXRlZCBzZXF1ZW5jZXMuCisgICAqICAgICAtIFRoZSBjb250cm9sbGVkIHNlcXVlbmNlcyBjYW4gaW1wb3NlIGxpbWl0YXRpb25zIG9uIGhvdyB0aGUKKyAgICogICAgICAgcHJvZ3JhbSBjYW4gcmVhZCBjaGFyYWN0ZXJzIGZyb20gYSBzZXF1ZW5jZSwgd3JpdGUgY2hhcmFjdGVycyB0bworICAgKiAgICAgICBhIHNlcXVlbmNlLCBwdXQgY2hhcmFjdGVycyBiYWNrIGludG8gYW4gaW5wdXQgc2VxdWVuY2UsIG9yIGFsdGVyCisgICAqICAgICAgIHRoZSBzdHJlYW0gcG9zaXRpb24uCisgICAqICAgICAuCisgICAqICAtIyBFYWNoIHNlcXVlbmNlIGlzIGNoYXJhY3Rlcml6ZWQgYnkgdGhyZWUgcG9pbnRlcnMgd2hpY2gsIGlmIG5vbi1udWxsLAorICAgKiAgICAgYWxsIHBvaW50IGludG8gdGhlIHNhbWUgQGMgY2hhclQgYXJyYXkgb2JqZWN0LiAgVGhlIGFycmF5IG9iamVjdAorICAgKiAgICAgcmVwcmVzZW50cywgYXQgYW55IG1vbWVudCwgYSAoc3ViKXNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUKKyAgICogICAgIHNlcXVlbmNlLiAgT3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gYSBzZXF1ZW5jZSBhbHRlciB0aGUgdmFsdWVzCisgICAqICAgICBzdG9yZWQgaW4gdGhlc2UgcG9pbnRlcnMsIHBlcmZvcm0gcmVhZHMgYW5kIHdyaXRlcyBkaXJlY3RseSB0byBvcgorICAgKiAgICAgZnJvbSBhc3NvY2lhdGVkIHNlcXVlbmNlcywgYW5kIGFsdGVyIDxlbT50aGUgc3RyZWFtIHBvc2l0aW9uPC9lbT4gYW5kCisgICAqICAgICBjb252ZXJzaW9uIHN0YXRlIGFzIG5lZWRlZCB0byBtYWludGFpbiB0aGlzIHN1YnNlcXVlbmNlIHJlbGF0aW9uc2hpcC4KKyAgICogICAgIFRoZSB0aHJlZSBwb2ludGVycyBhcmU6CisgICAqICAgICAtIHRoZSA8ZW0+YmVnaW5uaW5nIHBvaW50ZXI8L2VtPiwgb3IgbG93ZXN0IGVsZW1lbnQgYWRkcmVzcyBpbiB0aGUKKyAgICogICAgICAgYXJyYXkgKGNhbGxlZCBAZSB4YmVnIGhlcmUpOworICAgKiAgICAgLSB0aGUgPGVtPm5leHQgcG9pbnRlcjwvZW0+LCBvciBuZXh0IGVsZW1lbnQgYWRkcmVzcyB0aGF0IGlzIGEKKyAgICogICAgICAgY3VycmVudCBjYW5kaWRhdGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZyAoY2FsbGVkIEBlIHhuZXh0IGhlcmUpOworICAgKiAgICAgLSB0aGUgPGVtPmVuZCBwb2ludGVyPC9lbT4sIG9yIGZpcnN0IGVsZW1lbnQgYWRkcmVzcyBiZXlvbmQgdGhlCisgICAqICAgICAgIGVuZCBvZiB0aGUgYXJyYXkgKGNhbGxlZCBAZSB4ZW5kIGhlcmUpLgorICAgKiAgICAgLgorICAgKiAgLSMgVGhlIGZvbGxvd2luZyBzZW1hbnRpYyBjb25zdHJhaW50cyBzaGFsbCBhbHdheXMgYXBwbHkgZm9yIGFueSBzZXQKKyAgICogICAgIG9mIHRocmVlIHBvaW50ZXJzIGZvciBhIHNlcXVlbmNlLCB1c2luZyB0aGUgcG9pbnRlciBuYW1lcyBnaXZlbgorICAgKiAgICAgaW1tZWRpYXRlbHkgYWJvdmU6CisgICAqICAgICAtIElmIEBlIHhuZXh0IGlzIG5vdCBhIG51bGwgcG9pbnRlciwgdGhlbiBAZSB4YmVnIGFuZCBAZSB4ZW5kIHNoYWxsCisgICAqICAgICAgIGFsc28gYmUgbm9uLW51bGwgcG9pbnRlcnMgaW50byB0aGUgc2FtZSBAYyBjaGFyVCBhcnJheSwgYXMKKyAgICogICAgICAgZGVzY3JpYmVkIGFib3ZlOyBvdGhlcndpc2UsIEBlIHhiZWcgYW5kIEBlIHhlbmQgc2hhbGwgYWxzbyBiZSBudWxsLgorICAgKiAgICAgLSBJZiBAZSB4bmV4dCBpcyBub3QgYSBudWxsIHBvaW50ZXIgYW5kIEBlIHhuZXh0IDwgQGUgeGVuZCBmb3IgYW4KKyAgICogICAgICAgb3V0cHV0IHNlcXVlbmNlLCB0aGVuIGEgPGVtPndyaXRlIHBvc2l0aW9uPC9lbT4gaXMgYXZhaWxhYmxlLgorICAgKiAgICAgICBJbiB0aGlzIGNhc2UsIEBlICp4bmV4dCBzaGFsbCBiZSBhc3NpZ25hYmxlIGFzIHRoZSBuZXh0IGVsZW1lbnQKKyAgICogICAgICAgdG8gd3JpdGUgKHRvIHB1dCwgb3IgdG8gc3RvcmUgYSBjaGFyYWN0ZXIgdmFsdWUsIGludG8gdGhlIHNlcXVlbmNlKS4KKyAgICogICAgIC0gSWYgQGUgeG5leHQgaXMgbm90IGEgbnVsbCBwb2ludGVyIGFuZCBAZSB4YmVnIDwgQGUgeG5leHQgZm9yIGFuCisgICAqICAgICAgIGlucHV0IHNlcXVlbmNlLCB0aGVuIGEgPGVtPnB1dGJhY2sgcG9zaXRpb248L2VtPiBpcyBhdmFpbGFibGUuCisgICAqICAgICAgIEluIHRoaXMgY2FzZSwgQGUgeG5leHRbLTFdIHNoYWxsIGhhdmUgYSBkZWZpbmVkIHZhbHVlIGFuZCBpcyB0aGUKKyAgICogICAgICAgbmV4dCAocHJlY2VkaW5nKSBlbGVtZW50IHRvIHN0b3JlIGEgY2hhcmFjdGVyIHRoYXQgaXMgcHV0IGJhY2sKKyAgICogICAgICAgaW50byB0aGUgaW5wdXQgc2VxdWVuY2UuCisgICAqICAgICAtIElmIEBlIHhuZXh0IGlzIG5vdCBhIG51bGwgcG9pbnRlciBhbmQgQGUgeG5leHQ8IEBlIHhlbmQgZm9yIGFuCisgICAqICAgICAgIGlucHV0IHNlcXVlbmNlLCB0aGVuIGEgPGVtPnJlYWQgcG9zaXRpb248L2VtPiBpcyBhdmFpbGFibGUuCisgICAqICAgICAgIEluIHRoaXMgY2FzZSwgQGUgKnhuZXh0IHNoYWxsIGhhdmUgYSBkZWZpbmVkIHZhbHVlIGFuZCBpcyB0aGUKKyAgICogICAgICAgbmV4dCBlbGVtZW50IHRvIHJlYWQgKHRvIGdldCwgb3IgdG8gb2J0YWluIGEgY2hhcmFjdGVyIHZhbHVlLAorICAgKiAgICAgICBmcm9tIHRoZSBzZXF1ZW5jZSkuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYgCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIFRoZXNlIGFyZSBzdGFuZGFyZCB0eXBlcy4gIFRoZXkgcGVybWl0IGEgc3RhbmRhcmRpemVkIHdheSBvZgorICAgICAgICogIHJlZmVycmluZyB0byBuYW1lcyBvZiAob3IgbmFtZXMgZGVwZW5kZW50IG9uKSB0aGUgdGVtcGxhdGUKKyAgICAgICAqICBwYXJhbWV0ZXJzLCB3aGljaCBhcmUgc3BlY2lmaWMgdG8gdGhlIGltcGxlbWVudGF0aW9uLgorICAgICAgKi8KKyAgICAgIHR5cGVkZWYgX0NoYXJUIAkJCQkJY2hhcl90eXBlOworICAgICAgdHlwZWRlZiBfVHJhaXRzIAkJCQkJdHJhaXRzX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSAJCWludF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgCQlwb3NfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIAkJb2ZmX3R5cGU7CisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8vLyBUaGlzIGlzIGEgbm9uLXN0YW5kYXJkIHR5cGUuCisgICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiAgCV9fc3RyZWFtYnVmX3R5cGU7CisgICAgICAvL0B9CisgICAgICAKKyAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CisgICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKKyAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OworICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CisgICAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKKworICAgICAgZnJpZW5kIHN0cmVhbXNpemUKKyAgICAgIF9fY29weV9zdHJlYW1idWZzX2VvZjw+KGJhc2ljX3N0cmVhbWJ1ZiosIGJhc2ljX3N0cmVhbWJ1ZiosIGJvb2wmKTsKKworICAgICAgdGVtcGxhdGU8Ym9vbCBfSXNNb3ZlLCB0eXBlbmFtZSBfQ2hhclQyPgorICAgICAgICBmcmllbmQgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2NoYXI8X0NoYXJUMj46Ol9fdmFsdWUsIAorCQkJCQkgICAgICAgX0NoYXJUMio+OjpfX3R5cGUKKyAgICAgICAgX19jb3B5X21vdmVfYTIoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiwKKwkJICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUMj4sIF9DaGFyVDIqKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUMj4KKyAgICAgICAgZnJpZW5kIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19jaGFyPF9DaGFyVDI+OjpfX3ZhbHVlLAorCQkJCSAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQyPiA+OjpfX3R5cGUKKyAgICAgICAgZmluZChpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVDI+LAorCSAgICAgY29uc3QgX0NoYXJUMiYpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyLCB0eXBlbmFtZSBfVHJhaXRzMj4KKyAgICAgICAgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JgorICAgICAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JiwgX0NoYXJUMiopOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQyLCB0eXBlbmFtZSBfVHJhaXRzMiwgdHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBmcmllbmQgYmFzaWNfaXN0cmVhbTxfQ2hhclQyLCBfVHJhaXRzMj4mCisgICAgICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQyLCBfVHJhaXRzMj4mLAorCQkgICBiYXNpY19zdHJpbmc8X0NoYXJUMiwgX1RyYWl0czIsIF9BbGxvYz4mKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUMiwgdHlwZW5hbWUgX1RyYWl0czIsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgICAgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JgorICAgICAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJUMiwgX1RyYWl0czI+JiwKKwkJYmFzaWNfc3RyaW5nPF9DaGFyVDIsIF9UcmFpdHMyLCBfQWxsb2M+JiwgX0NoYXJUMik7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvKgorICAgICAgICogIFRoaXMgaXMgYmFzZWQgb24gX0lPX0ZJTEUsIGp1c3QgcmVvcmRlcmVkIHRvIGJlIG1vcmUgY29uc2lzdGVudCwKKyAgICAgICAqICBhbmQgaXMgaW50ZW5kZWQgdG8gYmUgdGhlIG1vc3QgbWluaW1hbCBhYnN0cmFjdGlvbiBmb3IgYW4KKyAgICAgICAqICBpbnRlcm5hbCBidWZmZXIuCisgICAgICAgKiAgLSAgZ2V0ID09IGlucHV0ID09IHJlYWQKKyAgICAgICAqICAtICBwdXQgPT0gb3V0cHV0ID09IHdyaXRlCisgICAgICAqLworICAgICAgY2hhcl90eXBlKiAJCV9NX2luX2JlZzsgICAgIC8vLzwgU3RhcnQgb2YgZ2V0IGFyZWEuCisgICAgICBjaGFyX3R5cGUqIAkJX01faW5fY3VyOyAgICAgLy8vPCBDdXJyZW50IHJlYWQgYXJlYS4KKyAgICAgIGNoYXJfdHlwZSogCQlfTV9pbl9lbmQ7ICAgICAvLy88IEVuZCBvZiBnZXQgYXJlYS4KKyAgICAgIGNoYXJfdHlwZSogCQlfTV9vdXRfYmVnOyAgICAvLy88IFN0YXJ0IG9mIHB1dCBhcmVhLgorICAgICAgY2hhcl90eXBlKiAJCV9NX291dF9jdXI7ICAgIC8vLzwgQ3VycmVudCBwdXQgYXJlYS4KKyAgICAgIGNoYXJfdHlwZSogCQlfTV9vdXRfZW5kOyAgICAvLy88IEVuZCBvZiBwdXQgYXJlYS4KKworICAgICAgLy8vIEN1cnJlbnQgbG9jYWxlIHNldHRpbmcuCisgICAgICBsb2NhbGUgCQkJX01fYnVmX2xvY2FsZTsJCisKKyAgcHVibGljOgorICAgICAgLy8vIERlc3RydWN0b3IgZGVhbGxvY2F0ZXMgbm8gYnVmZmVyIHNwYWNlLgorICAgICAgdmlydHVhbCAKKyAgICAgIH5iYXNpY19zdHJlYW1idWYoKSAKKyAgICAgIHsgfQorCisgICAgICAvLyBbMjcuNS4yLjIuMV0gbG9jYWxlcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBFbnRyeSBwb2ludCBmb3IgaW1idWUoKS4KKyAgICAgICAqICBAcGFyYW0gIF9fbG9jICBUaGUgbmV3IGxvY2FsZS4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgcHJldmlvdXMgbG9jYWxlLgorICAgICAgICoKKyAgICAgICAqICBDYWxscyB0aGUgZGVyaXZlZCBpbWJ1ZShfX2xvYykuCisgICAgICAqLworICAgICAgbG9jYWxlIAorICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKKyAgICAgIHsKKwlsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOworCXRoaXMtPmltYnVlKF9fbG9jKTsKKwlfTV9idWZfbG9jYWxlID0gX19sb2M7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIExvY2FsZSBhY2Nlc3MuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGN1cnJlbnQgbG9jYWxlIGluIGVmZmVjdC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgcHViaW1idWUobG9jKSBoYXMgYmVlbiBjYWxsZWQsIHRoZW4gdGhlIG1vc3QgcmVjZW50IEBjIGxvYworICAgICAgICogIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSBnbG9iYWwgbG9jYWxlIGluIGVmZmVjdCBhdCB0aGUgdGltZQorICAgICAgICogIG9mIGNvbnN0cnVjdGlvbiBpcyByZXR1cm5lZC4KKyAgICAgICovCisgICAgICBsb2NhbGUgICAKKyAgICAgIGdldGxvYygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9idWZfbG9jYWxlOyB9IAorCisgICAgICAvLyBbMjcuNS4yLjIuMl0gYnVmZmVyIG1hbmFnZW1lbnQgYW5kIHBvc2l0aW9uaW5nCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEVudHJ5IHBvaW50cyBmb3IgZGVyaXZlZCBidWZmZXIgZnVuY3Rpb25zLgorICAgICAgICoKKyAgICAgICAqICBUaGUgcHVibGljIHZlcnNpb25zIG9mIEBjIHB1YmZvbyBkaXNwYXRjaCB0byB0aGUgcHJvdGVjdGVkCisgICAgICAgKiAgZGVyaXZlZCBAYyBmb28gbWVtYmVyIGZ1bmN0aW9ucywgcGFzc2luZyB0aGUgYXJndW1lbnRzIChpZiBhbnkpCisgICAgICAgKiAgYW5kIHJldHVybmluZyB0aGUgcmVzdWx0IHVuY2hhbmdlZC4KKyAgICAgICovCisgICAgICBiYXNpY19zdHJlYW1idWYqCisgICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKSAKKyAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBbHRlcnMgdGhlIHN0cmVhbSBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIF9fb2ZmICBPZmZzZXQuCisgICAgICAgKiAgQHBhcmFtICBfX3dheSAgVmFsdWUgZm9yIGlvc19iYXNlOjpzZWVrZGlyLgorICAgICAgICogIEBwYXJhbSAgX19tb2RlIFZhbHVlIGZvciBpb3NfYmFzZTo6b3Blbm1vZGUuCisgICAgICAgKgorICAgICAgICogIENhbGxzIHZpcnR1YWwgc2Vla29mZiBmdW5jdGlvbi4KKyAgICAgICovCisgICAgICBwb3NfdHlwZSAKKyAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LCAKKwkJIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQorICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBbHRlcnMgdGhlIHN0cmVhbSBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIF9fc3AgIFBvc2l0aW9uCisgICAgICAgKiAgQHBhcmFtICBfX21vZGUgVmFsdWUgZm9yIGlvc19iYXNlOjpvcGVubW9kZS4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgdmlydHVhbCBzZWVrcG9zIGZ1bmN0aW9uLgorICAgICAgKi8KKyAgICAgIHBvc190eXBlIAorICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAorCQkgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCisgICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDYWxscyB2aXJ0dWFsIHN5bmMgZnVuY3Rpb24uCisgICAgICAqLworICAgICAgaW50IAorICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQorICAgICAgLy9AfQorCisgICAgICAvLyBbMjcuNS4yLjIuM10gZ2V0IGFyZWEKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTG9va2luZyBhaGVhZCBpbnRvIHRoZSBzdHJlYW0uCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgYSByZWFkIHBvc2l0aW9uIGlzIGF2YWlsYWJsZSwgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKyAgICAgICAqICBhdmFpbGFibGUgZm9yIHJlYWRpbmcgYmVmb3JlIHRoZSBidWZmZXIgbXVzdCBiZSByZWZpbGxlZC4KKyAgICAgICAqICBPdGhlcndpc2UgcmV0dXJucyB0aGUgZGVyaXZlZCBAYyBzaG93bWFueWMoKS4KKyAgICAgICovCisgICAgICBzdHJlYW1zaXplIAorICAgICAgaW5fYXZhaWwoKSAKKyAgICAgIHsgCisJY29uc3Qgc3RyZWFtc2l6ZSBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CisJcmV0dXJuIF9fcmV0ID8gX19yZXQgOiB0aGlzLT5zaG93bWFueWMoKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBHZXR0aW5nIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgbmV4dCBjaGFyYWN0ZXIsIG9yIGVvZi4KKyAgICAgICAqCisgICAgICAgKiAgQ2FsbHMgQGMgc2J1bXBjKCksIGFuZCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMKKyAgICAgICAqICBAYyB0cmFpdHM6OmVvZigpLCBzbyBkb2VzIHRoaXMgZnVuY3Rpb24uICBPdGhlcndpc2UsIEBjIHNnZXRjKCkuCisgICAgICAqLworICAgICAgaW50X3R5cGUgCisgICAgICBzbmV4dGMoKQorICAgICAgeworCWludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOworCWlmIChfX2J1aWx0aW5fZXhwZWN0KCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+c2J1bXBjKCksIAorCQkJCQkJICAgICAgIF9fcmV0KSwgdHJ1ZSkpCisJICBfX3JldCA9IHRoaXMtPnNnZXRjKCk7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEdldHRpbmcgdGhlIG5leHQgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBuZXh0IGNoYXJhY3Rlciwgb3IgZW9mLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgaW5wdXQgcmVhZCBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIHJldHVybnMgdGhhdCBjaGFyYWN0ZXIKKyAgICAgICAqICBhbmQgaW5jcmVtZW50cyB0aGUgcmVhZCBwb2ludGVyLCBvdGhlcndpc2UgY2FsbHMgYW5kIHJldHVybnMKKyAgICAgICAqICBAYyB1ZmxvdygpLgorICAgICAgKi8KKyAgICAgIGludF90eXBlIAorICAgICAgc2J1bXBjKCkKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3JldDsKKwlpZiAoX19idWlsdGluX2V4cGVjdCh0aGlzLT5ncHRyKCkgPCB0aGlzLT5lZ3B0cigpLCB0cnVlKSkKKwkgIHsKKwkgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CisJICAgIHRoaXMtPmdidW1wKDEpOworCSAgfQorCWVsc2UgCisJICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEdldHRpbmcgdGhlIG5leHQgY2hhcmFjdGVyLgorICAgICAgICogIEByZXR1cm4gIFRoZSBuZXh0IGNoYXJhY3Rlciwgb3IgZW9mLgorICAgICAgICoKKyAgICAgICAqICBJZiB0aGUgaW5wdXQgcmVhZCBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIHJldHVybnMgdGhhdCBjaGFyYWN0ZXIsCisgICAgICAgKiAgb3RoZXJ3aXNlIGNhbGxzIGFuZCByZXR1cm5zIEBjIHVuZGVyZmxvdygpLiAgRG9lcyBub3QgbW92ZSB0aGUgCisgICAgICAgKiAgcmVhZCBwb3NpdGlvbiBhZnRlciBmZXRjaGluZyB0aGUgY2hhcmFjdGVyLgorICAgICAgKi8KKyAgICAgIGludF90eXBlIAorICAgICAgc2dldGMoKQorICAgICAgeworCWludF90eXBlIF9fcmV0OworCWlmIChfX2J1aWx0aW5fZXhwZWN0KHRoaXMtPmdwdHIoKSA8IHRoaXMtPmVncHRyKCksIHRydWUpKQorCSAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CisJZWxzZSAKKwkgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEVudHJ5IHBvaW50IGZvciB4c2dldG4uCisgICAgICAgKiAgQHBhcmFtICBfX3MgIEEgYnVmZmVyIGFyZWEuCisgICAgICAgKiAgQHBhcmFtICBfX24gIEEgY291bnQuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgeHNnZXRuKF9fcyxfX24pLiAgVGhlIGVmZmVjdCBpcyB0byBmaWxsIEBhIF9fc1swXSB0aHJvdWdoCisgICAgICAgKiAgQGEgX19zW19fbi0xXSB3aXRoIGNoYXJhY3RlcnMgZnJvbSB0aGUgaW5wdXQgc2VxdWVuY2UsIGlmIHBvc3NpYmxlLgorICAgICAgKi8KKyAgICAgIHN0cmVhbXNpemUgCisgICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CisKKyAgICAgIC8vIFsyNy41LjIuMi40XSBwdXRiYWNrCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFB1c2hpbmcgY2hhcmFjdGVycyBiYWNrIGludG8gdGhlIGlucHV0IHN0cmVhbS4KKyAgICAgICAqICBAcGFyYW0gIF9fYyAgVGhlIGNoYXJhY3RlciB0byBwdXNoIGJhY2suCisgICAgICAgKiAgQHJldHVybiAgVGhlIHByZXZpb3VzIGNoYXJhY3RlciwgaWYgcG9zc2libGUuCisgICAgICAgKgorICAgICAgICogIFNpbWlsYXIgdG8gc3VuZ2V0YygpLCBidXQgQGEgX19jIGlzIHB1c2hlZCBvbnRvIHRoZSBzdHJlYW0KKyAgICAgICAqICBpbnN0ZWFkIG9mIDxlbT50aGUgcHJldmlvdXMgY2hhcmFjdGVyLjwvZW0+IElmIHN1Y2Nlc3NmdWwsCisgICAgICAgKiAgdGhlIG5leHQgY2hhcmFjdGVyIGZldGNoZWQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIHdpbGwgYmUgQGEKKyAgICAgICAqICBfX2MuCisgICAgICAqLworICAgICAgaW50X3R5cGUgCisgICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3JldDsKKwljb25zdCBib29sIF9fdGVzdHBvcyA9IHRoaXMtPmViYWNrKCkgPCB0aGlzLT5ncHRyKCk7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QoIV9fdGVzdHBvcyB8fCAKKwkJCSAgICAgIXRyYWl0c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0pLCBmYWxzZSkpCisJICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CisJZWxzZSAKKwkgIHsKKwkgICAgdGhpcy0+Z2J1bXAoLTEpOworCSAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKKwkgIH0KKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTW92aW5nIGJhY2t3YXJkcyBpbiB0aGUgaW5wdXQgc3RyZWFtLgorICAgICAgICogIEByZXR1cm4gIFRoZSBwcmV2aW91cyBjaGFyYWN0ZXIsIGlmIHBvc3NpYmxlLgorICAgICAgICoKKyAgICAgICAqICBJZiBhIHB1dGJhY2sgcG9zaXRpb24gaXMgYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9uIGRlY3JlbWVudHMKKyAgICAgICAqICB0aGUgaW5wdXQgcG9pbnRlciBhbmQgcmV0dXJucyB0aGF0IGNoYXJhY3Rlci4gIE90aGVyd2lzZSwKKyAgICAgICAqICBjYWxscyBhbmQgcmV0dXJucyBwYmFja2ZhaWwoKS4gIFRoZSBlZmZlY3QgaXMgdG8gQGEgdW5nZXQKKyAgICAgICAqICB0aGUgbGFzdCBjaGFyYWN0ZXIgQGEgZ290dGVuLgorICAgICAgKi8KKyAgICAgIGludF90eXBlIAorICAgICAgc3VuZ2V0YygpCisgICAgICB7CisJaW50X3R5cGUgX19yZXQ7CisJaWYgKF9fYnVpbHRpbl9leHBlY3QodGhpcy0+ZWJhY2soKSA8IHRoaXMtPmdwdHIoKSwgdHJ1ZSkpCisJICB7CisJICAgIHRoaXMtPmdidW1wKC0xKTsKKwkgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CisJICB9CisJZWxzZSAKKwkgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICAvLyBbMjcuNS4yLjIuNV0gcHV0IGFyZWEKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRW50cnkgcG9pbnQgZm9yIGFsbCBzaW5nbGUtY2hhcmFjdGVyIG91dHB1dCBmdW5jdGlvbnMuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIEEgY2hhcmFjdGVyIHRvIG91dHB1dC4KKyAgICAgICAqICBAcmV0dXJuICBAYSBfX2MsIGlmIHBvc3NpYmxlLgorICAgICAgICoKKyAgICAgICAqICBPbmUgb2YgdHdvIHB1YmxpYyBvdXRwdXQgZnVuY3Rpb25zLgorICAgICAgICoKKyAgICAgICAqICBJZiBhIHdyaXRlIHBvc2l0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIG91dHB1dCBzZXF1ZW5jZSAoaS5lLiwKKyAgICAgICAqICB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsKSwgc3RvcmVzIEBhIF9fYyBpbiB0aGF0IHBvc2l0aW9uLCBpbmNyZW1lbnRzCisgICAgICAgKiAgdGhlIHBvc2l0aW9uLCBhbmQgcmV0dXJucyBAYyB0cmFpdHM6OnRvX2ludF90eXBlKF9fYykuICBJZiBhIHdyaXRlCisgICAgICAgKiAgcG9zaXRpb24gaXMgbm90IGF2YWlsYWJsZSwgcmV0dXJucyBAYyBvdmVyZmxvdyhfX2MpLgorICAgICAgKi8KKyAgICAgIGludF90eXBlIAorICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYykKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3JldDsKKwlpZiAoX19idWlsdGluX2V4cGVjdCh0aGlzLT5wcHRyKCkgPCB0aGlzLT5lcHB0cigpLCB0cnVlKSkKKwkgIHsKKwkgICAgKnRoaXMtPnBwdHIoKSA9IF9fYzsKKwkgICAgdGhpcy0+cGJ1bXAoMSk7CisJICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CisJICB9CisJZWxzZQorCSAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CisJcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEVudHJ5IHBvaW50IGZvciBhbGwgc2luZ2xlLWNoYXJhY3RlciBvdXRwdXQgZnVuY3Rpb25zLgorICAgICAgICogIEBwYXJhbSAgX19zICBBIGJ1ZmZlciByZWFkIGFyZWEuCisgICAgICAgKiAgQHBhcmFtICBfX24gIEEgY291bnQuCisgICAgICAgKgorICAgICAgICogIE9uZSBvZiB0d28gcHVibGljIG91dHB1dCBmdW5jdGlvbnMuCisgICAgICAgKgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIHhzcHV0bihfX3MsX19uKS4gIFRoZSBlZmZlY3QgaXMgdG8gd3JpdGUgQGEgX19zWzBdIHRocm91Z2gKKyAgICAgICAqICBAYSBfX3NbX19uLTFdIHRvIHRoZSBvdXRwdXQgc2VxdWVuY2UsIGlmIHBvc3NpYmxlLgorICAgICAgKi8KKyAgICAgIHN0cmVhbXNpemUgCisgICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCisgICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEJhc2UgY29uc3RydWN0b3IuCisgICAgICAgKgorICAgICAgICogIE9ubHkgY2FsbGVkIGZyb20gZGVyaXZlZCBjb25zdHJ1Y3RvcnMsIGFuZCBzZXRzIHVwIGFsbCB0aGUKKyAgICAgICAqICBidWZmZXIgZGF0YSB0byB6ZXJvLCBpbmNsdWRpbmcgdGhlIHBvaW50ZXJzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgICAqICBiYXNpY19zdHJlYW1idWYgY2xhc3MgZGVzY3JpcHRpb24uICBOb3RlIHRoYXQsIGFzIGEgcmVzdWx0LAorICAgICAgICogIC0gdGhlIGNsYXNzIHN0YXJ0cyB3aXRoIG5vIHJlYWQgbm9yIHdyaXRlIHBvc2l0aW9ucyBhdmFpbGFibGUsCisgICAgICAgKiAgLSB0aGlzIGlzIG5vdCBhbiBlcnJvcgorICAgICAgKi8KKyAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCisgICAgICA6IF9NX2luX2JlZygwKSwgX01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCksIAorICAgICAgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwgX01fb3V0X2VuZCgwKSwKKyAgICAgIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpIAorICAgICAgeyB9CisKKyAgICAgIC8vIFsyNy41LjIuMy4xXSBnZXQgYXJlYSBhY2Nlc3MKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzIHRvIHRoZSBnZXQgYXJlYS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSB0byBvdGhlciBwcm90ZWN0ZWQgZnVuY3Rpb25zLAorICAgICAgICogIGluY2x1ZGluZyBkZXJpdmVkIGNsYXNzZXMuCisgICAgICAgKgorICAgICAgICogIC0gZWJhY2soKSByZXR1cm5zIHRoZSBiZWdpbm5pbmcgcG9pbnRlciBmb3IgdGhlIGlucHV0IHNlcXVlbmNlCisgICAgICAgKiAgLSBncHRyKCkgcmV0dXJucyB0aGUgbmV4dCBwb2ludGVyIGZvciB0aGUgaW5wdXQgc2VxdWVuY2UKKyAgICAgICAqICAtIGVncHRyKCkgcmV0dXJucyB0aGUgZW5kIHBvaW50ZXIgZm9yIHRoZSBpbnB1dCBzZXF1ZW5jZQorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZSogCisgICAgICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQorCisgICAgICBjaGFyX3R5cGUqIAorICAgICAgZ3B0cigpICBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7ICB9CisKKyAgICAgIGNoYXJfdHlwZSogCisgICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1vdmluZyB0aGUgcmVhZCBwb3NpdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgVGhlIGRlbHRhIGJ5IHdoaWNoIHRvIG1vdmUuCisgICAgICAgKgorICAgICAgICogIFRoaXMganVzdCBhZHZhbmNlcyB0aGUgcmVhZCBwb3NpdGlvbiB3aXRob3V0IHJldHVybmluZyBhbnkgZGF0YS4KKyAgICAgICovCisgICAgICB2b2lkIAorICAgICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgU2V0dGluZyB0aGUgdGhyZWUgcmVhZCBhcmVhIHBvaW50ZXJzLgorICAgICAgICogIEBwYXJhbSAgX19nYmVnICBBIHBvaW50ZXIuCisgICAgICAgKiAgQHBhcmFtICBfX2duZXh0ICBBIHBvaW50ZXIuCisgICAgICAgKiAgQHBhcmFtICBfX2dlbmQgIEEgcG9pbnRlci4KKyAgICAgICAqICBAcG9zdCAgQGEgX19nYmVnID09IEBjIGViYWNrKCksIEBhIF9fZ25leHQgPT0gQGMgZ3B0cigpLCBhbmQKKyAgICAgICAqICAgICAgICAgQGEgX19nZW5kID09IEBjIGVncHRyKCkKKyAgICAgICovCisgICAgICB2b2lkIAorICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKKyAgICAgIHsKKwlfTV9pbl9iZWcgPSBfX2diZWc7CisJX01faW5fY3VyID0gX19nbmV4dDsKKwlfTV9pbl9lbmQgPSBfX2dlbmQ7CisgICAgICB9CisKKyAgICAgIC8vIFsyNy41LjIuMy4yXSBwdXQgYXJlYSBhY2Nlc3MKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWNjZXNzIHRvIHRoZSBwdXQgYXJlYS4KKyAgICAgICAqCisgICAgICAgKiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSB0byBvdGhlciBwcm90ZWN0ZWQgZnVuY3Rpb25zLAorICAgICAgICogIGluY2x1ZGluZyBkZXJpdmVkIGNsYXNzZXMuCisgICAgICAgKgorICAgICAgICogIC0gcGJhc2UoKSByZXR1cm5zIHRoZSBiZWdpbm5pbmcgcG9pbnRlciBmb3IgdGhlIG91dHB1dCBzZXF1ZW5jZQorICAgICAgICogIC0gcHB0cigpIHJldHVybnMgdGhlIG5leHQgcG9pbnRlciBmb3IgdGhlIG91dHB1dCBzZXF1ZW5jZQorICAgICAgICogIC0gZXBwdHIoKSByZXR1cm5zIHRoZSBlbmQgcG9pbnRlciBmb3IgdGhlIG91dHB1dCBzZXF1ZW5jZQorICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZSogCisgICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KKworICAgICAgY2hhcl90eXBlKiAKKyAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CisKKyAgICAgIGNoYXJfdHlwZSogCisgICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNb3ZpbmcgdGhlIHdyaXRlIHBvc2l0aW9uLgorICAgICAgICogIEBwYXJhbSAgX19uICBUaGUgZGVsdGEgYnkgd2hpY2ggdG8gbW92ZS4KKyAgICAgICAqCisgICAgICAgKiAgVGhpcyBqdXN0IGFkdmFuY2VzIHRoZSB3cml0ZSBwb3NpdGlvbiB3aXRob3V0IHJldHVybmluZyBhbnkgZGF0YS4KKyAgICAgICovCisgICAgICB2b2lkIAorICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFNldHRpbmcgdGhlIHRocmVlIHdyaXRlIGFyZWEgcG9pbnRlcnMuCisgICAgICAgKiAgQHBhcmFtICBfX3BiZWcgIEEgcG9pbnRlci4KKyAgICAgICAqICBAcGFyYW0gIF9fcGVuZCAgQSBwb2ludGVyLgorICAgICAgICogIEBwb3N0ICBAYSBfX3BiZWcgPT0gQGMgcGJhc2UoKSwgQGEgX19wYmVnID09IEBjIHBwdHIoKSwgYW5kCisgICAgICAgKiAgICAgICAgIEBhIF9fcGVuZCA9PSBAYyBlcHB0cigpCisgICAgICAqLworICAgICAgdm9pZCAKKyAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQorICAgICAgeyAKKwlfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsgCisJX01fb3V0X2VuZCA9IF9fcGVuZDsKKyAgICAgIH0KKworICAgICAgLy8gWzI3LjUuMi40XSB2aXJ0dWFsIGZ1bmN0aW9ucworICAgICAgLy8gWzI3LjUuMi40LjFdIGxvY2FsZXMKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2hhbmdlcyB0cmFuc2xhdGlvbnMuCisgICAgICAgKiAgQHBhcmFtICBfX2xvYyAgQSBuZXcgbG9jYWxlLgorICAgICAgICoKKyAgICAgICAqICBUcmFuc2xhdGlvbnMgZG9uZSBkdXJpbmcgSS9PIHdoaWNoIGRlcGVuZCBvbiB0aGUgY3VycmVudAorICAgICAgICogIGxvY2FsZSBhcmUgY2hhbmdlZCBieSB0aGlzIGNhbGwuICBUaGUgc3RhbmRhcmQgYWRkcywKKyAgICAgICAqICA8ZW0+QmV0d2VlbiBpbnZvY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGEgY2xhc3MgZGVyaXZlZAorICAgICAgICogIGZyb20gc3RyZWFtYnVmIGNhbiBzYWZlbHkgY2FjaGUgcmVzdWx0cyBvZiBjYWxscyB0byBsb2NhbGUKKyAgICAgICAqICBmdW5jdGlvbnMgYW5kIHRvIG1lbWJlcnMgb2YgZmFjZXRzIHNvIG9idGFpbmVkLjwvZW0+CisgICAgICAgKgorICAgICAgICogIEBub3RlICBCYXNlIGNsYXNzIHZlcnNpb24gZG9lcyBub3RoaW5nLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgdm9pZCAKKyAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpIAorICAgICAgeyB9CisKKyAgICAgIC8vIFsyNy41LjIuNC4yXSBidWZmZXIgbWFuYWdlbWVudCBhbmQgcG9zaXRpb25pbmcKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTWFuaXB1bGF0ZXMgdGhlIGJ1ZmZlci4KKyAgICAgICAqCisgICAgICAgKiAgRWFjaCBkZXJpdmVkIGNsYXNzIHByb3ZpZGVzIGl0cyBvd24gYXBwcm9wcmlhdGUgYmVoYXZpb3IuICBTZWUKKyAgICAgICAqICB0aGUgbmV4dC10by1sYXN0IHBhcmFncmFwaCBvZiAKKyAgICAgICAqICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9saWJzdGRjKysvbWFudWFsL2JrMDFwdDExY2gyNXMwMi5odG1sCisgICAgICAgKiAgZm9yIG1vcmUgb24gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIEJhc2UgY2xhc3MgdmVyc2lvbiBkb2VzIG5vdGhpbmcsIHJldHVybnMgQGMgdGhpcy4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qIAorICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCisgICAgICB7CXJldHVybiB0aGlzOyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQWx0ZXJzIHRoZSBzdHJlYW0gcG9zaXRpb25zLgorICAgICAgICoKKyAgICAgICAqICBFYWNoIGRlcml2ZWQgY2xhc3MgcHJvdmlkZXMgaXRzIG93biBhcHByb3ByaWF0ZSBiZWhhdmlvci4KKyAgICAgICAqICBAbm90ZSAgQmFzZSBjbGFzcyB2ZXJzaW9uIGRvZXMgbm90aGluZywgcmV0dXJucyBhIEBjIHBvc190eXBlCisgICAgICAgKiAgICAgICAgIHRoYXQgcmVwcmVzZW50cyBhbiBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbi4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIHBvc190eXBlIAorICAgICAgc2Vla29mZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCisJICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIC8qX19tb2RlKi8gPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQorICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfSAKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBbHRlcnMgdGhlIHN0cmVhbSBwb3NpdGlvbnMuCisgICAgICAgKgorICAgICAgICogIEVhY2ggZGVyaXZlZCBjbGFzcyBwcm92aWRlcyBpdHMgb3duIGFwcHJvcHJpYXRlIGJlaGF2aW9yLgorICAgICAgICogIEBub3RlICBCYXNlIGNsYXNzIHZlcnNpb24gZG9lcyBub3RoaW5nLCByZXR1cm5zIGEgQGMgcG9zX3R5cGUKKyAgICAgICAqICAgICAgICAgdGhhdCByZXByZXNlbnRzIGFuIGludmFsaWQgc3RyZWFtIHBvc2l0aW9uLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgcG9zX3R5cGUgCisgICAgICBzZWVrcG9zKHBvc190eXBlLCAKKwkgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgLypfX21vZGUqLyA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCisgICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9IAorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN5bmNocm9uaXplcyB0aGUgYnVmZmVyIGFycmF5cyB3aXRoIHRoZSBjb250cm9sbGVkIHNlcXVlbmNlcy4KKyAgICAgICAqICBAcmV0dXJuICAtMSBvbiBmYWlsdXJlLgorICAgICAgICoKKyAgICAgICAqICBFYWNoIGRlcml2ZWQgY2xhc3MgcHJvdmlkZXMgaXRzIG93biBhcHByb3ByaWF0ZSBiZWhhdmlvciwKKyAgICAgICAqICBpbmNsdWRpbmcgdGhlIGRlZmluaXRpb24gb2YgQGEgZmFpbHVyZS4KKyAgICAgICAqICBAbm90ZSAgQmFzZSBjbGFzcyB2ZXJzaW9uIGRvZXMgbm90aGluZywgcmV0dXJucyB6ZXJvLgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgaW50IAorICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0KKworICAgICAgLy8gWzI3LjUuMi40LjNdIGdldCBhcmVhCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEludmVzdGlnYXRpbmcgdGhlIGRhdGEgYXZhaWxhYmxlLgorICAgICAgICogIEByZXR1cm4gIEFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhdmFpbGFibGUgaW4gdGhlCisgICAgICAgKiAgICAgICAgICAgaW5wdXQgc2VxdWVuY2UsIG9yIC0xLgorICAgICAgICoKKyAgICAgICAqICA8ZW0+SWYgaXQgcmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlLCB0aGVuIHN1Y2Nlc3NpdmUgY2FsbHMgdG8KKyAgICAgICAqICBAYyB1bmRlcmZsb3coKSB3aWxsIG5vdCByZXR1cm4gQGMgdHJhaXRzOjplb2YoKSB1bnRpbCBhdAorICAgICAgICogIGxlYXN0IHRoYXQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIHN1cHBsaWVkLiAgSWYgQGMKKyAgICAgICAqICBzaG93bWFueWMoKSByZXR1cm5zIC0xLCB0aGVuIGNhbGxzIHRvIEBjIHVuZGVyZmxvdygpIG9yIEBjCisgICAgICAgKiAgdWZsb3coKSB3aWxsIGZhaWwuPC9lbT4gWzI3LjUuMi40LjNdLzEKKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIEJhc2UgY2xhc3MgdmVyc2lvbiBkb2VzIG5vdGhpbmcsIHJldHVybnMgemVyby4KKyAgICAgICAqICBAbm90ZSAgVGhlIHN0YW5kYXJkIGFkZHMgdGhhdCA8ZW0+dGhlIGludGVudGlvbiBpcyBub3Qgb25seSB0aGF0IHRoZQorICAgICAgICogICAgICAgICBjYWxscyBbdG8gdW5kZXJmbG93IG9yIHVmbG93XSB3aWxsIG5vdCByZXR1cm4gQGMgZW9mKCkgYnV0CisgICAgICAgKiAgICAgICAgIHRoYXQgdGhleSB3aWxsIHJldHVybiBpbW1lZGlhdGVseS48L2VtPgorICAgICAgICogIEBub3RlICBUaGUgc3RhbmRhcmQgYWRkcyB0aGF0IDxlbT50aGUgbW9ycGhlbWVzIG9mIEBjIHNob3dtYW55YyBhcmUKKyAgICAgICAqICAgICAgICAgQGIgZXMtaG93LW1hbnktc2VlLCBub3QgQGIgc2hvdy1tYW5pYy48L2VtPgorICAgICAgKi8KKyAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSAKKyAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNdWx0aXBsZSBjaGFyYWN0ZXIgZXh0cmFjdGlvbi4KKyAgICAgICAqICBAcGFyYW0gIF9fcyAgQSBidWZmZXIgYXJlYS4KKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBhc3NpZ24uCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFzc2lnbmVkLgorICAgICAgICoKKyAgICAgICAqICBGaWxscyBAYSBfX3NbMF0gdGhyb3VnaCBAYSBfX3NbX19uLTFdIHdpdGggY2hhcmFjdGVycyBmcm9tIHRoZSBpbnB1dAorICAgICAgICogIHNlcXVlbmNlLCBhcyBpZiBieSBAYyBzYnVtcGMoKS4gIFN0b3BzIHdoZW4gZWl0aGVyIEBhIF9fbiBjaGFyYWN0ZXJzCisgICAgICAgKiAgaGF2ZSBiZWVuIGNvcGllZCwgb3Igd2hlbiBAYyB0cmFpdHM6OmVvZigpIHdvdWxkIGJlIGNvcGllZC4KKyAgICAgICAqCisgICAgICAgKiAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBkZXJpdmVkIGNsYXNzZXMgcHJvdmlkZSBhIG1vcmUgZWZmaWNpZW50CisgICAgICAgKiAgaW1wbGVtZW50YXRpb24gYnkgb3ZlcnJpZGluZyB0aGlzIGRlZmluaXRpb24uCisgICAgICAqLworICAgICAgdmlydHVhbCBzdHJlYW1zaXplIAorICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgRmV0Y2hlcyBtb3JlIGRhdGEgZnJvbSB0aGUgY29udHJvbGxlZCBzZXF1ZW5jZS4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgZmlyc3QgY2hhcmFjdGVyIGZyb20gdGhlIDxlbT5wZW5kaW5nIHNlcXVlbmNlPC9lbT4uCisgICAgICAgKgorICAgICAgICogIEluZm9ybWFsbHksIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGlucHV0IGJ1ZmZlciBpcworICAgICAgICogIGV4aGF1c3RlZCAob3IgZG9lcyBub3QgZXhpc3QsIGFzIGJ1ZmZlcmluZyBuZWVkIG5vdCBhY3R1YWxseSBiZQorICAgICAgICogIGRvbmUpLiAgSWYgYSBidWZmZXIgZXhpc3RzLCBpdCBpcyBAYSByZWZpbGxlZC4gIEluIGVpdGhlciBjYXNlLCB0aGUKKyAgICAgICAqICBuZXh0IGF2YWlsYWJsZSBjaGFyYWN0ZXIgaXMgcmV0dXJuZWQsIG9yIEBjIHRyYWl0czo6ZW9mKCkgdG8KKyAgICAgICAqICBpbmRpY2F0ZSBhIG51bGwgcGVuZGluZyBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiAgRm9yIGEgZm9ybWFsIGRlZmluaXRpb24gb2YgdGhlIHBlbmRpbmcgc2VxdWVuY2UsIHNlZSBhIGdvb2QgdGV4dAorICAgICAgICogIHN1Y2ggYXMgTGFuZ2VyICYgS3JlZnQsIG9yIFsyNy41LjIuNC4zXS83LTE0LgorICAgICAgICoKKyAgICAgICAqICBBIGZ1bmN0aW9uaW5nIGlucHV0IHN0cmVhbWJ1ZiBjYW4gYmUgY3JlYXRlZCBieSBvdmVycmlkaW5nIG9ubHkKKyAgICAgICAqICB0aGlzIGZ1bmN0aW9uIChubyBidWZmZXIgYXJlYSB3aWxsIGJlIHVzZWQpLiAgRm9yIGFuIGV4YW1wbGUsIHNlZQorICAgICAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MTFjaDI1Lmh0bWwKKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIEJhc2UgY2xhc3MgdmVyc2lvbiBkb2VzIG5vdGhpbmcsIHJldHVybnMgZW9mKCkuCisgICAgICAqLworICAgICAgdmlydHVhbCBpbnRfdHlwZSAKKyAgICAgIHVuZGVyZmxvdygpCisgICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGZXRjaGVzIG1vcmUgZGF0YSBmcm9tIHRoZSBjb250cm9sbGVkIHNlcXVlbmNlLgorICAgICAgICogIEByZXR1cm4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgPGVtPnBlbmRpbmcgc2VxdWVuY2U8L2VtPi4KKyAgICAgICAqCisgICAgICAgKiAgSW5mb3JtYWxseSwgdGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIEBjIHVuZGVyZmxvdygpLAorICAgICAgICogIGFuZCBpbiBmYWN0IGlzIHJlcXVpcmVkIHRvIGNhbGwgdGhhdCBmdW5jdGlvbi4gIEl0IGFsc28gcmV0dXJucworICAgICAgICogIHRoZSBuZXcgY2hhcmFjdGVyLCBsaWtlIEBjIHVuZGVyZmxvdygpIGRvZXMuICBIb3dldmVyLCB0aGlzCisgICAgICAgKiAgZnVuY3Rpb24gYWxzbyBtb3ZlcyB0aGUgcmVhZCBwb3NpdGlvbiBmb3J3YXJkIGJ5IG9uZS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGludF90eXBlIAorICAgICAgdWZsb3coKSAKKyAgICAgIHsKKwlpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKKwljb25zdCBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwgCisJCQkJCQkJX19yZXQpOworCWlmICghX190ZXN0ZW9mKQorCSAgeworCSAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKKwkgICAgdGhpcy0+Z2J1bXAoMSk7CisJICB9CisJcmV0dXJuIF9fcmV0OyAgICAKKyAgICAgIH0KKworICAgICAgLy8gWzI3LjUuMi40LjRdIHB1dGJhY2sKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgVHJpZXMgdG8gYmFjayB1cCB0aGUgaW5wdXQgc2VxdWVuY2UuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIFRoZSBjaGFyYWN0ZXIgdG8gYmUgaW5zZXJ0ZWQgYmFjayBpbnRvIHRoZSBzZXF1ZW5jZS4KKyAgICAgICAqICBAcmV0dXJuICBlb2YoKSBvbiBmYWlsdXJlLCA8ZW0+c29tZSBvdGhlciB2YWx1ZTwvZW0+IG9uIHN1Y2Nlc3MKKyAgICAgICAqICBAcG9zdCAgVGhlIGNvbnN0cmFpbnRzIG9mIEBjIGdwdHIoKSwgQGMgZWJhY2soKSwgYW5kIEBjIHBwdHIoKQorICAgICAgICogICAgICAgICBhcmUgdGhlIHNhbWUgYXMgZm9yIEBjIHVuZGVyZmxvdygpLgorICAgICAgICoKKyAgICAgICAqICBAbm90ZSAgQmFzZSBjbGFzcyB2ZXJzaW9uIGRvZXMgbm90aGluZywgcmV0dXJucyBlb2YoKS4KKyAgICAgICovCisgICAgICB2aXJ0dWFsIGludF90eXBlIAorICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyAgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCisgICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KKworICAgICAgLy8gUHV0IGFyZWE6CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE11bHRpcGxlIGNoYXJhY3RlciBpbnNlcnRpb24uCisgICAgICAgKiAgQHBhcmFtICBfX3MgIEEgYnVmZmVyIGFyZWEuCisgICAgICAgKiAgQHBhcmFtICBfX24gIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gd3JpdGUuCisgICAgICAgKiAgQHJldHVybiAgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4uCisgICAgICAgKgorICAgICAgICogIFdyaXRlcyBAYSBfX3NbMF0gdGhyb3VnaCBAYSBfX3NbX19uLTFdIHRvIHRoZSBvdXRwdXQgc2VxdWVuY2UsIGFzIGlmCisgICAgICAgKiAgYnkgQGMgc3B1dGMoKS4gIFN0b3BzIHdoZW4gZWl0aGVyIEBhIG4gY2hhcmFjdGVycyBoYXZlIGJlZW4KKyAgICAgICAqICBjb3BpZWQsIG9yIHdoZW4gQGMgc3B1dGMoKSB3b3VsZCByZXR1cm4gQGMgdHJhaXRzOjplb2YoKS4KKyAgICAgICAqCisgICAgICAgKiAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBkZXJpdmVkIGNsYXNzZXMgcHJvdmlkZSBhIG1vcmUgZWZmaWNpZW50CisgICAgICAgKiAgaW1wbGVtZW50YXRpb24gYnkgb3ZlcnJpZGluZyB0aGlzIGRlZmluaXRpb24uCisgICAgICAqLworICAgICAgdmlydHVhbCBzdHJlYW1zaXplIAorICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ29uc3VtZXMgZGF0YSBmcm9tIHRoZSBidWZmZXI7IHdyaXRlcyB0byB0aGUKKyAgICAgICAqICAgICAgICAgIGNvbnRyb2xsZWQgc2VxdWVuY2UuCisgICAgICAgKiAgQHBhcmFtICBfX2MgIEFuIGFkZGl0aW9uYWwgY2hhcmFjdGVyIHRvIGNvbnN1bWUuCisgICAgICAgKiAgQHJldHVybiAgZW9mKCkgdG8gaW5kaWNhdGUgZmFpbHVyZSwgc29tZXRoaW5nIGVsc2UgKHVzdWFsbHkKKyAgICAgICAqICAgICAgICAgICBAYSBfX2MsIG9yIG5vdF9lb2YoKSkKKyAgICAgICAqCisgICAgICAgKiAgSW5mb3JtYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlcgorICAgICAgICogIGlzIGZ1bGwgKG9yIGRvZXMgbm90IGV4aXN0LCBhcyBidWZmZXJpbmcgbmVlZCBub3QgYWN0dWFsbHkKKyAgICAgICAqICBiZSBkb25lKS4gIElmIGEgYnVmZmVyIGV4aXN0cywgaXQgaXMgQGEgY29uc3VtZWQsIHdpdGgKKyAgICAgICAqICA8ZW0+c29tZSBlZmZlY3Q8L2VtPiBvbiB0aGUgY29udHJvbGxlZCBzZXF1ZW5jZS4KKyAgICAgICAqICAoVHlwaWNhbGx5LCB0aGUgYnVmZmVyIGlzIHdyaXR0ZW4gb3V0IHRvIHRoZSBzZXF1ZW5jZQorICAgICAgICogIHZlcmJhdGltLikgIEluIGVpdGhlciBjYXNlLCB0aGUgY2hhcmFjdGVyIEBhIGMgaXMgYWxzbworICAgICAgICogIHdyaXR0ZW4gb3V0LCBpZiBAYSBfX2MgaXMgbm90IEBjIGVvZigpLgorICAgICAgICoKKyAgICAgICAqICBGb3IgYSBmb3JtYWwgZGVmaW5pdGlvbiBvZiB0aGlzIGZ1bmN0aW9uLCBzZWUgYSBnb29kIHRleHQKKyAgICAgICAqICBzdWNoIGFzIExhbmdlciAmIEtyZWZ0LCBvciBbMjcuNS4yLjQuNV0vMy03LgorICAgICAgICoKKyAgICAgICAqICBBIGZ1bmN0aW9uaW5nIG91dHB1dCBzdHJlYW1idWYgY2FuIGJlIGNyZWF0ZWQgYnkgb3ZlcnJpZGluZyBvbmx5CisgICAgICAgKiAgdGhpcyBmdW5jdGlvbiAobm8gYnVmZmVyIGFyZWEgd2lsbCBiZSB1c2VkKS4KKyAgICAgICAqCisgICAgICAgKiAgQG5vdGUgIEJhc2UgY2xhc3MgdmVyc2lvbiBkb2VzIG5vdGhpbmcsIHJldHVybnMgZW9mKCkuCisgICAgICAqLworICAgICAgdmlydHVhbCBpbnRfdHlwZSAKKyAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyAgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCisgICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KKworI2lmIF9HTElCQ1hYX1VTRV9ERVBSRUNBVEVECisgICAgLy8gQW5uZXggRC42CisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBUb3NzZXMgYSBjaGFyYWN0ZXIuCisgICAgICAgKgorICAgICAgICogIEFkdmFuY2VzIHRoZSByZWFkIHBvaW50ZXIsIGlnbm9yaW5nIHRoZSBjaGFyYWN0ZXIgdGhhdCB3b3VsZCBoYXZlCisgICAgICAgKiAgYmVlbiByZWFkLgorICAgICAgICoKKyAgICAgICAqICBTZWUgaHR0cDovL2djYy5nbnUub3JnL21sL2xpYnN0ZGMrKy8yMDAyLTA1L21zZzAwMTY4Lmh0bWwKKyAgICAgICAqLworICAgICAgdm9pZCAKKyAgICAgIHN0b3NzYygpIAorICAgICAgeworCWlmICh0aGlzLT5ncHRyKCkgPCB0aGlzLT5lZ3B0cigpKSAKKwkgIHRoaXMtPmdidW1wKDEpOworCWVsc2UgCisJICB0aGlzLT51ZmxvdygpOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8vIEFsc28gdXNlZCBieSBzcGVjaWFsaXphdGlvbnMgZm9yIGNoYXIgYW5kIHdjaGFyX3QgaW4gc3JjLgorICAgICAgdm9pZCAKKyAgICAgIF9fc2FmZV9nYnVtcChzdHJlYW1zaXplIF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9fc2FmZV9wYnVtcChzdHJlYW1zaXplIF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIFNpZGUgZWZmZWN0IG9mIERSIDUwLiAKKyAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBiYXNpY19zdHJlYW1idWYmIF9fc2IpCisgICAgICA6IF9NX2luX2JlZyhfX3NiLl9NX2luX2JlZyksIF9NX2luX2N1cihfX3NiLl9NX2luX2N1ciksIAorICAgICAgX01faW5fZW5kKF9fc2IuX01faW5fZW5kKSwgX01fb3V0X2JlZyhfX3NiLl9NX291dF9iZWcpLCAKKyAgICAgIF9NX291dF9jdXIoX19zYi5fTV9vdXRfY3VyKSwgX01fb3V0X2VuZChfX3NiLl9NX291dF9jdXIpLAorICAgICAgX01fYnVmX2xvY2FsZShfX3NiLl9NX2J1Zl9sb2NhbGUpIAorICAgICAgeyB9CisKKyAgICAgIGJhc2ljX3N0cmVhbWJ1ZiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJlYW1idWYmKSB7IHJldHVybiAqdGhpczsgfTsKKyAgICB9OworCisgIC8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGRlY2xhcmF0aW9ucywgZGVmaW5lZCBpbiBzcmMvc3RyZWFtYnVmLmNjLgorICB0ZW1wbGF0ZTw+CisgICAgc3RyZWFtc2l6ZQorICAgIF9fY29weV9zdHJlYW1idWZzX2VvZihiYXNpY19zdHJlYW1idWY8Y2hhcj4qIF9fc2JpbiwKKwkJCSAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiBfX3Nib3V0LCBib29sJiBfX2luZW9mKTsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgc3RyZWFtc2l6ZQorICAgIF9fY29weV9zdHJlYW1idWZzX2VvZihiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qIF9fc2JpbiwKKwkJCSAgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiBfX3Nib3V0LCBib29sJiBfX2luZW9mKTsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNpbmNsdWRlIDxiaXRzL3N0cmVhbWJ1Zi50Y2M+CisKKyNlbmRpZiAvKiBfR0xJQkNYWF9TVFJFQU1CVUYgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvc3RyaW5nIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zdHJpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhZTNiNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvc3RyaW5nCkBAIC0wLDAgKzEsNTUgQEAKKy8vIENvbXBvbmVudHMgZm9yIG1hbmlwdWxhdGluZyBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9zdHJpbmcKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMSAgU3RyaW5ncyBsaWJyYXJ5CisvLworCisjaWZuZGVmIF9HTElCQ1hYX1NUUklORworI2RlZmluZSBfR0xJQkNYWF9TVFJJTkcJMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvc3RyaW5nZndkLmg+CisjaW5jbHVkZSA8Yml0cy9jaGFyX3RyYWl0cy5oPiAgLy8gTkI6IEluIHR1cm4gaW5jbHVkZXMgc3RsX2FsZ29iYXNlLmgKKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvY3BwX3R5cGVfdHJhaXRzLmg+CisjaW5jbHVkZSA8Yml0cy9sb2NhbGVmd2QuaD4gICAgLy8gRm9yIG9wZXJhdG9ycyA+PiwgPDwsIGFuZCBnZXRsaW5lLgorI2luY2x1ZGUgPGJpdHMvb3N0cmVhbV9pbnNlcnQuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2l0ZXJhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gLy8gRm9yIGxlc3MKKyNpbmNsdWRlIDxleHQvbnVtZXJpY190cmFpdHMuaD4gCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4gCisjaW5jbHVkZSA8Yml0cy9yYW5nZV9hY2Nlc3MuaD4KKyNpbmNsdWRlIDxiaXRzL2Jhc2ljX3N0cmluZy5oPgorI2luY2x1ZGUgPGJpdHMvYmFzaWNfc3RyaW5nLnRjYz4gCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9TVFJJTkcgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvc3lzdGVtX2Vycm9yIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy9zeXN0ZW1fZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzYjc0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvc3lzdGVtX2Vycm9yCkBAIC0wLDAgKzEsMzc4IEBACisvLyA8c3lzdGVtX2Vycm9yPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS9zeXN0ZW1fZXJyb3IKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfU1lTVEVNX0VSUk9SCisjZGVmaW5lIF9HTElCQ1hYX1NZU1RFTV9FUlJPUiAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorI2luY2x1ZGUgPGJpdHMvZXJyb3JfY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIGNsYXNzIGVycm9yX2NvZGU7CisgIGNsYXNzIGVycm9yX2NvbmRpdGlvbjsKKyAgY2xhc3MgZXJyb3JfY2F0ZWdvcnk7CisgIGNsYXNzIHN5c3RlbV9lcnJvcjsKKworICAvLy8gaXNfZXJyb3JfY29kZV9lbnVtCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfZXJyb3JfY29kZV9lbnVtIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIC8vLyBpc19lcnJvcl9jb25kaXRpb25fZW51bQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2Vycm9yX2NvbmRpdGlvbl9lbnVtIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPD4gCisgICAgc3RydWN0IGlzX2Vycm9yX2NvbmRpdGlvbl9lbnVtPGVycmM+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworCisgIC8vLyBlcnJvcl9jYXRlZ29yeQorICBjbGFzcyBlcnJvcl9jYXRlZ29yeQorICB7CisgIHByb3RlY3RlZDoKKyAgICBlcnJvcl9jYXRlZ29yeSgpIG5vZXhjZXB0OworCisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5lcnJvcl9jYXRlZ29yeSgpIG5vZXhjZXB0OworCisgICAgZXJyb3JfY2F0ZWdvcnkoY29uc3QgZXJyb3JfY2F0ZWdvcnkmKSA9IGRlbGV0ZTsKKyAgICBlcnJvcl9jYXRlZ29yeSYgb3BlcmF0b3I9KGNvbnN0IGVycm9yX2NhdGVnb3J5JikgPSBkZWxldGU7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIAorICAgIG5hbWUoKSBjb25zdCBub2V4Y2VwdCA9IDA7CisKKyAgICB2aXJ0dWFsIHN0cmluZyAKKyAgICBtZXNzYWdlKGludCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBlcnJvcl9jb25kaXRpb24KKyAgICBkZWZhdWx0X2Vycm9yX2NvbmRpdGlvbihpbnQgX19pKSBjb25zdCBub2V4Y2VwdDsKKworICAgIHZpcnR1YWwgYm9vbCAKKyAgICBlcXVpdmFsZW50KGludCBfX2ksIGNvbnN0IGVycm9yX2NvbmRpdGlvbiYgX19jb25kKSBjb25zdCBub2V4Y2VwdDsKKworICAgIHZpcnR1YWwgYm9vbCAKKyAgICBlcXVpdmFsZW50KGNvbnN0IGVycm9yX2NvZGUmIF9fY29kZSwgaW50IF9faSkgY29uc3Qgbm9leGNlcHQ7CisKKyAgICBib29sIAorICAgIG9wZXJhdG9yPChjb25zdCBlcnJvcl9jYXRlZ29yeSYgX19vdGhlcikgY29uc3Qgbm9leGNlcHQKKyAgICB7IHJldHVybiBsZXNzPGNvbnN0IGVycm9yX2NhdGVnb3J5Kj4oKSh0aGlzLCAmX19vdGhlcik7IH0KKworICAgIGJvb2wgCisgICAgb3BlcmF0b3I9PShjb25zdCBlcnJvcl9jYXRlZ29yeSYgX19vdGhlcikgY29uc3Qgbm9leGNlcHQKKyAgICB7IHJldHVybiB0aGlzID09ICZfX290aGVyOyB9CisKKyAgICBib29sIAorICAgIG9wZXJhdG9yIT0oY29uc3QgZXJyb3JfY2F0ZWdvcnkmIF9fb3RoZXIpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gdGhpcyAhPSAmX19vdGhlcjsgfQorICB9OworCisgIC8vIERSIDg5MC4KKyAgX0dMSUJDWFhfQ09OU1QgY29uc3QgZXJyb3JfY2F0ZWdvcnkmIHN5c3RlbV9jYXRlZ29yeSgpIG5vZXhjZXB0OworICBfR0xJQkNYWF9DT05TVCBjb25zdCBlcnJvcl9jYXRlZ29yeSYgZ2VuZXJpY19jYXRlZ29yeSgpIG5vZXhjZXB0OworCisgIGVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKGVycmMpIG5vZXhjZXB0OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzaDsKKworICAvLy8gZXJyb3JfY29kZQorICAvLyBJbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBlcnJvciBpZGVudGlmaWNhdGlvbgorICBzdHJ1Y3QgZXJyb3JfY29kZQorICB7CisgICAgZXJyb3JfY29kZSgpIG5vZXhjZXB0CisgICAgOiBfTV92YWx1ZSgwKSwgX01fY2F0KCZzeXN0ZW1fY2F0ZWdvcnkoKSkgeyB9CisKKyAgICBlcnJvcl9jb2RlKGludCBfX3YsIGNvbnN0IGVycm9yX2NhdGVnb3J5JiBfX2NhdCkgbm9leGNlcHQKKyAgICA6IF9NX3ZhbHVlKF9fdiksIF9NX2NhdCgmX19jYXQpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Vycm9yQ29kZUVudW0sIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgIGVuYWJsZV9pZjxpc19lcnJvcl9jb2RlX2VudW08X0Vycm9yQ29kZUVudW0+Ojp2YWx1ZT46OnR5cGU+CisgICAgICBlcnJvcl9jb2RlKF9FcnJvckNvZGVFbnVtIF9fZSkgbm9leGNlcHQKKyAgICAgIHsgKnRoaXMgPSBtYWtlX2Vycm9yX2NvZGUoX19lKTsgfQorCisgICAgdm9pZCAKKyAgICBhc3NpZ24oaW50IF9fdiwgY29uc3QgZXJyb3JfY2F0ZWdvcnkmIF9fY2F0KSBub2V4Y2VwdAorICAgIHsKKyAgICAgIF9NX3ZhbHVlID0gX192OworICAgICAgX01fY2F0ID0gJl9fY2F0OyAKKyAgICB9CisKKyAgICB2b2lkIAorICAgIGNsZWFyKCkgbm9leGNlcHQKKyAgICB7IGFzc2lnbigwLCBzeXN0ZW1fY2F0ZWdvcnkoKSk7IH0KKworICAgIC8vIERSIDgwNC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXJyb3JDb2RlRW51bT4KKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjxpc19lcnJvcl9jb2RlX2VudW08X0Vycm9yQ29kZUVudW0+Ojp2YWx1ZSwKKwkJCSBlcnJvcl9jb2RlJj46OnR5cGUKKyAgICAgIG9wZXJhdG9yPShfRXJyb3JDb2RlRW51bSBfX2UpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiAqdGhpcyA9IG1ha2VfZXJyb3JfY29kZShfX2UpOyB9CisKKyAgICBpbnQKKyAgICB2YWx1ZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CisgICAgICAKKyAgICBjb25zdCBlcnJvcl9jYXRlZ29yeSYgIAorICAgIGNhdGVnb3J5KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gKl9NX2NhdDsgfQorCisgICAgZXJyb3JfY29uZGl0aW9uIAorICAgIGRlZmF1bHRfZXJyb3JfY29uZGl0aW9uKCkgY29uc3Qgbm9leGNlcHQ7CisKKyAgICBzdHJpbmcgCisgICAgbWVzc2FnZSgpIGNvbnN0CisgICAgeyByZXR1cm4gY2F0ZWdvcnkoKS5tZXNzYWdlKHZhbHVlKCkpOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7IHJldHVybiBfTV92YWx1ZSAhPSAwID8gdHJ1ZSA6IGZhbHNlOyB9CisKKyAgICAvLyBEUiA4MDQuCisgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIGhhc2g8ZXJyb3JfY29kZT47CisKKyAgICBpbnQgICAgICAgICAgICAJCV9NX3ZhbHVlOworICAgIGNvbnN0IGVycm9yX2NhdGVnb3J5KiAJX01fY2F0OworICB9OworCisgIC8vIDE5LjQuMi42IG5vbi1tZW1iZXIgZnVuY3Rpb25zCisgIGlubGluZSBlcnJvcl9jb2RlCisgIG1ha2VfZXJyb3JfY29kZShlcnJjIF9fZSkgbm9leGNlcHQKKyAgeyByZXR1cm4gZXJyb3JfY29kZShzdGF0aWNfY2FzdDxpbnQ+KF9fZSksIGdlbmVyaWNfY2F0ZWdvcnkoKSk7IH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcjwoY29uc3QgZXJyb3JfY29kZSYgX19saHMsIGNvbnN0IGVycm9yX2NvZGUmIF9fcmhzKSBub2V4Y2VwdAorICB7IAorICAgIHJldHVybiAoX19saHMuY2F0ZWdvcnkoKSA8IF9fcmhzLmNhdGVnb3J5KCkKKwkgICAgfHwgKF9fbGhzLmNhdGVnb3J5KCkgPT0gX19yaHMuY2F0ZWdvcnkoKQorCQkmJiBfX2xocy52YWx1ZSgpIDwgX19yaHMudmFsdWUoKSkpOworICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgZXJyb3JfY29kZSYgX19lKQorICAgIHsgcmV0dXJuIChfX29zIDw8IF9fZS5jYXRlZ29yeSgpLm5hbWUoKSA8PCAnOicgPDwgX19lLnZhbHVlKCkpOyB9CisKKyAgZXJyb3JfY29uZGl0aW9uIG1ha2VfZXJyb3JfY29uZGl0aW9uKGVycmMpIG5vZXhjZXB0OworCisgIC8vLyBlcnJvcl9jb25kaXRpb24KKyAgLy8gUG9ydGFibGUgZXJyb3IgaWRlbnRpZmljYXRpb24KKyAgc3RydWN0IGVycm9yX2NvbmRpdGlvbiAKKyAgeworICAgIGVycm9yX2NvbmRpdGlvbigpIG5vZXhjZXB0CisgICAgOiBfTV92YWx1ZSgwKSwgX01fY2F0KCZnZW5lcmljX2NhdGVnb3J5KCkpIHsgfQorCisgICAgZXJyb3JfY29uZGl0aW9uKGludCBfX3YsIGNvbnN0IGVycm9yX2NhdGVnb3J5JiBfX2NhdCkgbm9leGNlcHQKKyAgICA6IF9NX3ZhbHVlKF9fdiksIF9NX2NhdCgmX19jYXQpIHsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Vycm9yQ29uZGl0aW9uRW51bSwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSBlbmFibGVfaWY8aXNfZXJyb3JfY29uZGl0aW9uX2VudW08X0Vycm9yQ29uZGl0aW9uRW51bT46OnZhbHVlPjo6dHlwZT4KKyAgICAgIGVycm9yX2NvbmRpdGlvbihfRXJyb3JDb25kaXRpb25FbnVtIF9fZSkgbm9leGNlcHQKKyAgICAgIHsgKnRoaXMgPSBtYWtlX2Vycm9yX2NvbmRpdGlvbihfX2UpOyB9CisKKyAgICB2b2lkCisgICAgYXNzaWduKGludCBfX3YsIGNvbnN0IGVycm9yX2NhdGVnb3J5JiBfX2NhdCkgbm9leGNlcHQKKyAgICB7CisgICAgICBfTV92YWx1ZSA9IF9fdjsKKyAgICAgIF9NX2NhdCA9ICZfX2NhdDsKKyAgICB9CisKKyAgICAvLyBEUiA4MDQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Vycm9yQ29uZGl0aW9uRW51bT4KKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjxpc19lcnJvcl9jb25kaXRpb25fZW51bQorCQkJIDxfRXJyb3JDb25kaXRpb25FbnVtPjo6dmFsdWUsIGVycm9yX2NvbmRpdGlvbiY+Ojp0eXBlCisgICAgICBvcGVyYXRvcj0oX0Vycm9yQ29uZGl0aW9uRW51bSBfX2UpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiAqdGhpcyA9IG1ha2VfZXJyb3JfY29uZGl0aW9uKF9fZSk7IH0KKworICAgIHZvaWQgCisgICAgY2xlYXIoKSBub2V4Y2VwdAorICAgIHsgYXNzaWduKDAsIGdlbmVyaWNfY2F0ZWdvcnkoKSk7IH0KKworICAgIC8vIDE5LjQuMy40IG9ic2VydmVycworICAgIGludAorICAgIHZhbHVlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01fdmFsdWU7IH0KKworICAgIGNvbnN0IGVycm9yX2NhdGVnb3J5JgorICAgIGNhdGVnb3J5KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gKl9NX2NhdDsgfQorCisgICAgc3RyaW5nIAorICAgIG1lc3NhZ2UoKSBjb25zdAorICAgIHsgcmV0dXJuIGNhdGVnb3J5KCkubWVzc2FnZSh2YWx1ZSgpKTsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gX01fdmFsdWUgIT0gMCA/IHRydWUgOiBmYWxzZTsgfQorCisgICAgLy8gRFIgODA0LgorICBwcml2YXRlOgorICAgIGludCAJCQlfTV92YWx1ZTsKKyAgICBjb25zdCBlcnJvcl9jYXRlZ29yeSogCV9NX2NhdDsKKyAgfTsKKworICAvLyAxOS40LjMuNiBub24tbWVtYmVyIGZ1bmN0aW9ucworICBpbmxpbmUgZXJyb3JfY29uZGl0aW9uCisgIG1ha2VfZXJyb3JfY29uZGl0aW9uKGVycmMgX19lKSBub2V4Y2VwdAorICB7IHJldHVybiBlcnJvcl9jb25kaXRpb24oc3RhdGljX2Nhc3Q8aW50PihfX2UpLCBnZW5lcmljX2NhdGVnb3J5KCkpOyB9CisKKyAgaW5saW5lIGJvb2wgCisgIG9wZXJhdG9yPChjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fbGhzLAorCSAgICBjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fcmhzKSBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuIChfX2xocy5jYXRlZ29yeSgpIDwgX19yaHMuY2F0ZWdvcnkoKQorCSAgICB8fCAoX19saHMuY2F0ZWdvcnkoKSA9PSBfX3Jocy5jYXRlZ29yeSgpCisJCSYmIF9fbGhzLnZhbHVlKCkgPCBfX3Jocy52YWx1ZSgpKSk7CisgIH0KKworICAvLyAxOS40LjQgQ29tcGFyaXNvbiBvcGVyYXRvcnMKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBlcnJvcl9jb2RlJiBfX2xocywgY29uc3QgZXJyb3JfY29kZSYgX19yaHMpIG5vZXhjZXB0CisgIHsgcmV0dXJuIChfX2xocy5jYXRlZ29yeSgpID09IF9fcmhzLmNhdGVnb3J5KCkKKwkgICAgJiYgX19saHMudmFsdWUoKSA9PSBfX3Jocy52YWx1ZSgpKTsgfQorCisgIGlubGluZSBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgZXJyb3JfY29kZSYgX19saHMsIGNvbnN0IGVycm9yX2NvbmRpdGlvbiYgX19yaHMpIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gKF9fbGhzLmNhdGVnb3J5KCkuZXF1aXZhbGVudChfX2xocy52YWx1ZSgpLCBfX3JocykKKwkgICAgfHwgX19yaHMuY2F0ZWdvcnkoKS5lcXVpdmFsZW50KF9fbGhzLCBfX3Jocy52YWx1ZSgpKSk7CisgIH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IGVycm9yX2NvbmRpdGlvbiYgX19saHMsIGNvbnN0IGVycm9yX2NvZGUmIF9fcmhzKSBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuIChfX3Jocy5jYXRlZ29yeSgpLmVxdWl2YWxlbnQoX19yaHMudmFsdWUoKSwgX19saHMpCisJICAgIHx8IF9fbGhzLmNhdGVnb3J5KCkuZXF1aXZhbGVudChfX3JocywgX19saHMudmFsdWUoKSkpOworICB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fbGhzLAorCSAgICAgY29uc3QgZXJyb3JfY29uZGl0aW9uJiBfX3Jocykgbm9leGNlcHQKKyAgeworICAgIHJldHVybiAoX19saHMuY2F0ZWdvcnkoKSA9PSBfX3Jocy5jYXRlZ29yeSgpCisJICAgICYmIF9fbGhzLnZhbHVlKCkgPT0gX19yaHMudmFsdWUoKSk7CisgIH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9KGNvbnN0IGVycm9yX2NvZGUmIF9fbGhzLCBjb25zdCBlcnJvcl9jb2RlJiBfX3Jocykgbm9leGNlcHQKKyAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9KGNvbnN0IGVycm9yX2NvZGUmIF9fbGhzLCBjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fcmhzKSBub2V4Y2VwdAorICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgIGlubGluZSBib29sCisgIG9wZXJhdG9yIT0oY29uc3QgZXJyb3JfY29uZGl0aW9uJiBfX2xocywgY29uc3QgZXJyb3JfY29kZSYgX19yaHMpIG5vZXhjZXB0CisgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgb3BlcmF0b3IhPShjb25zdCBlcnJvcl9jb25kaXRpb24mIF9fbGhzLAorCSAgICAgY29uc3QgZXJyb3JfY29uZGl0aW9uJiBfX3Jocykgbm9leGNlcHQKKyAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworCisgIC8qKiAKKyAgICogIEBicmllZiBUaHJvd24gdG8gaW5kaWNhdGUgZXJyb3IgY29kZSBvZiB1bmRlcmx5aW5nIHN5c3RlbS4KKyAgICoKKyAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICovCisgIGNsYXNzIHN5c3RlbV9lcnJvciA6IHB1YmxpYyBzdGQ6OnJ1bnRpbWVfZXJyb3IKKyAgeworICBwcml2YXRlOgorICAgIGVycm9yX2NvZGUgCV9NX2NvZGU7CisKKyAgcHVibGljOgorICAgIHN5c3RlbV9lcnJvcihlcnJvcl9jb2RlIF9fZWMgPSBlcnJvcl9jb2RlKCkpCisgICAgOiBydW50aW1lX2Vycm9yKF9fZWMubWVzc2FnZSgpKSwgX01fY29kZShfX2VjKSB7IH0KKworICAgIHN5c3RlbV9lcnJvcihlcnJvcl9jb2RlIF9fZWMsIGNvbnN0IHN0cmluZyYgX193aGF0KQorICAgIDogcnVudGltZV9lcnJvcihfX3doYXQgKyAiOiAiICsgX19lYy5tZXNzYWdlKCkpLCBfTV9jb2RlKF9fZWMpIHsgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOiBBZGQgY29uc3QgY2hhciogY3RvcnMgdG8gYWxsIGV4Y2VwdGlvbnMuCisgICAgICoKKyAgICAgKiBzeXN0ZW1fZXJyb3IoZXJyb3JfY29kZSBfX2VjLCBjb25zdCBjaGFyKiBfX3doYXQpCisgICAgICogOiBydW50aW1lX2Vycm9yKF9fd2hhdCArICgiOiAiICsgX19lYy5tZXNzYWdlKCkpKSwgX01fY29kZShfX2VjKSB7IH0KKyAgICAgKgorICAgICAqIHN5c3RlbV9lcnJvcihpbnQgX192LCBjb25zdCBlcnJvcl9jYXRlZ29yeSYgX19lY2F0LCBjb25zdCBjaGFyKiBfX3doYXQpCisgICAgICogOiBydW50aW1lX2Vycm9yKF9fd2hhdCArICgiOiAiICsgX19lYy5tZXNzYWdlKCkpKSwKKyAgICAgKiAgIF9NX2NvZGUoZXJyb3JfY29kZShfX3YsIF9fZWNhdCkpIHsgfQorICAgICAqLworCisgICAgc3lzdGVtX2Vycm9yKGludCBfX3YsIGNvbnN0IGVycm9yX2NhdGVnb3J5JiBfX2VjYXQpCisgICAgOiBydW50aW1lX2Vycm9yKGVycm9yX2NvZGUoX192LCBfX2VjYXQpLm1lc3NhZ2UoKSksCisgICAgICBfTV9jb2RlKF9fdiwgX19lY2F0KSB7IH0KKworICAgIHN5c3RlbV9lcnJvcihpbnQgX192LCBjb25zdCBlcnJvcl9jYXRlZ29yeSYgX19lY2F0LCBjb25zdCBzdHJpbmcmIF9fd2hhdCkKKyAgICA6IHJ1bnRpbWVfZXJyb3IoX193aGF0ICsgIjogIiArIGVycm9yX2NvZGUoX192LCBfX2VjYXQpLm1lc3NhZ2UoKSksCisgICAgICBfTV9jb2RlKF9fdiwgX19lY2F0KSB7IH0KKworICAgIHZpcnR1YWwgfnN5c3RlbV9lcnJvcigpIG5vZXhjZXB0OworCisgICAgY29uc3QgZXJyb3JfY29kZSYgCisgICAgY29kZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9NX2NvZGU7IH0KKyAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjaWZuZGVmIF9HTElCQ1hYX0NPTVBBVElCSUxJVFlfQ1hYMFgKKworI2luY2x1ZGUgPGJpdHMvZnVuY3Rpb25hbF9oYXNoLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBEUiAxMTgyLgorICAvLy8gc3RkOjpoYXNoIHNwZWNpYWxpemF0aW9uIGZvciBlcnJvcl9jb2RlLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8ZXJyb3JfY29kZT4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIGVycm9yX2NvZGU+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IGVycm9yX2NvZGUmIF9fZSkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsKKwljb25zdCBzaXplX3QgX190bXAgPSBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX19lLl9NX3ZhbHVlKTsKKwlyZXR1cm4gc3RkOjpfSGFzaF9pbXBsOjpfX2hhc2hfY29tYmluZShfX2UuX01fY2F0LCBfX3RtcCk7CisgICAgICB9CisgICAgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gX0dMSUJDWFhfQ09NUEFUSUJJTElUWV9DWFgwWAorCisjZW5kaWYgLy8gQysrMTEKKworI2VuZGlmIC8vIF9HTElCQ1hYX1NZU1RFTV9FUlJPUgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90Z21hdGguaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdGdtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5ZTUzNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdGdtYXRoLmgKQEAgLTAsMCArMSw0MiBAQAorLy8gLSotIEMrKyAtKi0gY29tcGF0aWJpbGl0eSBoZWFkZXIuCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0Z21hdGguaAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjIGluY2x1ZGUgPGN0Z21hdGg+CisjZWxzZQorIyBpZiBfR0xJQkNYWF9IQVZFX1RHTUFUSF9ICisjICBpbmNsdWRlX25leHQgPHRnbWF0aC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgX0dMSUJDWFhfVEdNQVRIX0gKKyNkZWZpbmUgX0dMSUJDWFhfVEdNQVRIX0ggMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdGhyZWFkIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90aHJlYWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3ZTIxYQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdGhyZWFkCkBAIC0wLDAgKzEsMzAyIEBACisvLyA8dGhyZWFkPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS90aHJlYWQKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVEhSRUFECisjZGVmaW5lIF9HTElCQ1hYX1RIUkVBRCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPgorI2luY2x1ZGUgPGJpdHMvZnVuY3Rpb25hbF9oYXNoLmg+CisjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisKKyNpZiBkZWZpbmVkKF9HTElCQ1hYX0hBU19HVEhSRUFEUykgJiYgZGVmaW5lZChfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEpCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGRlZmdyb3VwIHRocmVhZHMgVGhyZWFkcworICAgKiBAaW5ncm91cCBjb25jdXJyZW5jeQorICAgKgorICAgKiBDbGFzc2VzIGZvciB0aHJlYWQgc3VwcG9ydC4KKyAgICogQHsKKyAgICovCisKKyAgLy8vIHRocmVhZAorICBjbGFzcyB0aHJlYWQKKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBfX2d0aHJlYWRfdAkJCW5hdGl2ZV9oYW5kbGVfdHlwZTsKKyAgICBzdHJ1Y3QgX0ltcGxfYmFzZTsKKyAgICB0eXBlZGVmIHNoYXJlZF9wdHI8X0ltcGxfYmFzZT4JX19zaGFyZWRfYmFzZV90eXBlOworCisgICAgLy8vIHRocmVhZDo6aWQKKyAgICBjbGFzcyBpZAorICAgIHsKKyAgICAgIG5hdGl2ZV9oYW5kbGVfdHlwZQlfTV90aHJlYWQ7CisKKyAgICBwdWJsaWM6CisgICAgICBpZCgpIG5vZXhjZXB0IDogX01fdGhyZWFkKCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBpZChuYXRpdmVfaGFuZGxlX3R5cGUgX19pZCkgOiBfTV90aHJlYWQoX19pZCkgeyB9CisKKyAgICBwcml2YXRlOgorICAgICAgZnJpZW5kIGNsYXNzIHRocmVhZDsKKyAgICAgIGZyaWVuZCBjbGFzcyBoYXNoPHRocmVhZDo6aWQ+OworCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3I9PSh0aHJlYWQ6OmlkIF9feCwgdGhyZWFkOjppZCBfX3kpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX2d0aHJlYWRfZXF1YWwoX194Ll9NX3RocmVhZCwgX195Ll9NX3RocmVhZCk7IH0KKworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPCh0aHJlYWQ6OmlkIF9feCwgdGhyZWFkOjppZCBfX3kpIG5vZXhjZXB0CisgICAgICB7IHJldHVybiBfX3guX01fdGhyZWFkIDwgX195Ll9NX3RocmVhZDsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisJZnJpZW5kIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKwlvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIHRocmVhZDo6aWQgX19pZCk7CisgICAgfTsKKworICAgIC8vIFNpbXBsZSBiYXNlIHR5cGUgdGhhdCB0aGUgdGVtcGxhdGl6ZWQsIGRlcml2ZWQgY2xhc3MgY29udGFpbmluZworICAgIC8vIGFuIGFyYml0cmFyeSBmdW5jdG9yIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5kIGNhbGxlZC4KKyAgICBzdHJ1Y3QgX0ltcGxfYmFzZQorICAgIHsKKyAgICAgIF9fc2hhcmVkX2Jhc2VfdHlwZQlfTV90aGlzX3B0cjsKKworICAgICAgaW5saW5lIHZpcnR1YWwgfl9JbXBsX2Jhc2UoKTsKKworICAgICAgdmlydHVhbCB2b2lkIF9NX3J1bigpID0gMDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlPgorICAgICAgc3RydWN0IF9JbXBsIDogcHVibGljIF9JbXBsX2Jhc2UKKyAgICAgIHsKKwlfQ2FsbGFibGUJCV9NX2Z1bmM7CisKKwlfSW1wbChfQ2FsbGFibGUmJiBfX2YpIDogX01fZnVuYyhzdGQ6OmZvcndhcmQ8X0NhbGxhYmxlPihfX2YpKQorCXsgfQorCisJdm9pZAorCV9NX3J1bigpIHsgX01fZnVuYygpOyB9CisgICAgICB9OworCisgIHByaXZhdGU6CisgICAgaWQJCQkJX01faWQ7CisKKyAgcHVibGljOgorICAgIHRocmVhZCgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgLy8gMjA5Ny4gIHBhY2thZ2VkX3Rhc2sgY29uc3RydWN0b3JzIHNob3VsZCBiZSBjb25zdHJhaW5lZAorICAgIHRocmVhZCh0aHJlYWQmKSA9IGRlbGV0ZTsKKyAgICB0aHJlYWQoY29uc3QgdGhyZWFkJikgPSBkZWxldGU7CisKKyAgICB0aHJlYWQodGhyZWFkJiYgX190KSBub2V4Y2VwdAorICAgIHsgc3dhcChfX3QpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2FsbGFibGUsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgZXhwbGljaXQgCisgICAgICB0aHJlYWQoX0NhbGxhYmxlJiYgX19mLCBfQXJncyYmLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgX01fc3RhcnRfdGhyZWFkKF9NX21ha2Vfcm91dGluZShzdGQ6Ol9fYmluZF9zaW1wbGUoCisgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9DYWxsYWJsZT4oX19mKSwKKyAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pKSk7CisgICAgICB9CisKKyAgICB+dGhyZWFkKCkKKyAgICB7CisgICAgICBpZiAoam9pbmFibGUoKSkKKwlzdGQ6OnRlcm1pbmF0ZSgpOworICAgIH0KKworICAgIHRocmVhZCYgb3BlcmF0b3I9KGNvbnN0IHRocmVhZCYpID0gZGVsZXRlOworCisgICAgdGhyZWFkJiBvcGVyYXRvcj0odGhyZWFkJiYgX190KSBub2V4Y2VwdAorICAgIHsKKyAgICAgIGlmIChqb2luYWJsZSgpKQorCXN0ZDo6dGVybWluYXRlKCk7CisgICAgICBzd2FwKF9fdCk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdm9pZAorICAgIHN3YXAodGhyZWFkJiBfX3QpIG5vZXhjZXB0CisgICAgeyBzdGQ6OnN3YXAoX01faWQsIF9fdC5fTV9pZCk7IH0KKworICAgIGJvb2wKKyAgICBqb2luYWJsZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gIShfTV9pZCA9PSBpZCgpKTsgfQorCisgICAgdm9pZAorICAgIGpvaW4oKTsKKworICAgIHZvaWQKKyAgICBkZXRhY2goKTsKKworICAgIHRocmVhZDo6aWQKKyAgICBnZXRfaWQoKSBjb25zdCBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX2lkOyB9CisKKyAgICAvKiogQHByZSB0aHJlYWQgaXMgam9pbmFibGUKKyAgICAgKi8KKyAgICBuYXRpdmVfaGFuZGxlX3R5cGUKKyAgICBuYXRpdmVfaGFuZGxlKCkKKyAgICB7IHJldHVybiBfTV9pZC5fTV90aHJlYWQ7IH0KKworICAgIC8vIFJldHVybnMgYSB2YWx1ZSB0aGF0IGhpbnRzIGF0IHRoZSBudW1iZXIgb2YgaGFyZHdhcmUgdGhyZWFkIGNvbnRleHRzLgorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyAgICBoYXJkd2FyZV9jb25jdXJyZW5jeSgpIG5vZXhjZXB0OworCisgIHByaXZhdGU6CisgICAgdm9pZAorICAgIF9NX3N0YXJ0X3RocmVhZChfX3NoYXJlZF9iYXNlX3R5cGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhbGxhYmxlPgorICAgICAgc2hhcmVkX3B0cjxfSW1wbDxfQ2FsbGFibGU+PgorICAgICAgX01fbWFrZV9yb3V0aW5lKF9DYWxsYWJsZSYmIF9fZikKKyAgICAgIHsKKwkvLyBDcmVhdGUgYW5kIGFsbG9jYXRlIGZ1bGwgZGF0YSBzdHJ1Y3R1cmUsIG5vdCBiYXNlLgorCXJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPF9JbXBsPF9DYWxsYWJsZT4+KHN0ZDo6Zm9yd2FyZDxfQ2FsbGFibGU+KF9fZikpOworICAgICAgfQorICB9OworCisgIGlubGluZSB0aHJlYWQ6Ol9JbXBsX2Jhc2U6On5fSW1wbF9iYXNlKCkgPSBkZWZhdWx0OworCisgIGlubGluZSB2b2lkCisgIHN3YXAodGhyZWFkJiBfX3gsIHRocmVhZCYgX195KSBub2V4Y2VwdAorICB7IF9feC5zd2FwKF9feSk7IH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvciE9KHRocmVhZDo6aWQgX194LCB0aHJlYWQ6OmlkIF9feSkgbm9leGNlcHQKKyAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQorCisgIGlubGluZSBib29sCisgIG9wZXJhdG9yPD0odGhyZWFkOjppZCBfX3gsIHRocmVhZDo6aWQgX195KSBub2V4Y2VwdAorICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj4odGhyZWFkOjppZCBfX3gsIHRocmVhZDo6aWQgX195KSBub2V4Y2VwdAorICB7IHJldHVybiBfX3kgPCBfX3g7IH0KKworICBpbmxpbmUgYm9vbAorICBvcGVyYXRvcj49KHRocmVhZDo6aWQgX194LCB0aHJlYWQ6OmlkIF9feSkgbm9leGNlcHQKKyAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CisKKyAgLy8gRFIgODg5LgorICAvLy8gc3RkOjpoYXNoIHNwZWNpYWxpemF0aW9uIGZvciB0aHJlYWQ6OmlkLgorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IGhhc2g8dGhyZWFkOjppZD4KKyAgICA6IHB1YmxpYyBfX2hhc2hfYmFzZTxzaXplX3QsIHRocmVhZDo6aWQ+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKGNvbnN0IHRocmVhZDo6aWQmIF9faWQpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiBzdGQ6Ol9IYXNoX2ltcGw6Omhhc2goX19pZC5fTV90aHJlYWQpOyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIHRocmVhZDo6aWQgX19pZCkKKyAgICB7CisgICAgICBpZiAoX19pZCA9PSB0aHJlYWQ6OmlkKCkpCisJcmV0dXJuIF9fb3V0IDw8ICJ0aHJlYWQ6OmlkIG9mIGEgbm9uLWV4ZWN1dGluZyB0aHJlYWQiOworICAgICAgZWxzZQorCXJldHVybiBfX291dCA8PCBfX2lkLl9NX3RocmVhZDsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKiBAbmFtZXNwYWNlIHN0ZDo6dGhpc190aHJlYWQKKyAgICogIEBicmllZiBJU08gQysrIDIwMTEgZW50aXRpZXMgc3ViLW5hbWVzcGFjZSBmb3IgdGhyZWFkLgorICAgKiAgMzAuMy4yIE5hbWVzcGFjZSB0aGlzX3RocmVhZC4KKyAgICovCisgIG5hbWVzcGFjZSB0aGlzX3RocmVhZAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICAvLy8gZ2V0X2lkCisgICAgaW5saW5lIHRocmVhZDo6aWQKKyAgICBnZXRfaWQoKSBub2V4Y2VwdCB7IHJldHVybiB0aHJlYWQ6OmlkKF9fZ3RocmVhZF9zZWxmKCkpOyB9CisKKyAgICAvLy8geWllbGQKKyAgICBpbmxpbmUgdm9pZAorICAgIHlpZWxkKCkgbm9leGNlcHQKKyAgICB7CisjaWZkZWYgX0dMSUJDWFhfVVNFX1NDSEVEX1lJRUxECisgICAgICBfX2d0aHJlYWRfeWllbGQoKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQKKyAgICBfX3NsZWVwX2ZvcihjaHJvbm86OnNlY29uZHMsIGNocm9ubzo6bmFub3NlY29uZHMpOworCisgICAgLy8vIHNsZWVwX2ZvcgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2Q+CisgICAgICBpbmxpbmUgdm9pZAorICAgICAgc2xlZXBfZm9yKGNvbnN0IGNocm9ubzo6ZHVyYXRpb248X1JlcCwgX1BlcmlvZD4mIF9fcnRpbWUpCisgICAgICB7CisJYXV0byBfX3MgPSBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Y2hyb25vOjpzZWNvbmRzPihfX3J0aW1lKTsKKwlhdXRvIF9fbnMgPSBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8Y2hyb25vOjpuYW5vc2Vjb25kcz4oX19ydGltZSAtIF9fcyk7CisjaWZkZWYgX0dMSUJDWFhfVVNFX05BTk9TTEVFUAorCV9fZ3RocmVhZF90aW1lX3QgX190cyA9CisJICB7CisJICAgIHN0YXRpY19jYXN0PHN0ZDo6dGltZV90PihfX3MuY291bnQoKSksCisJICAgIHN0YXRpY19jYXN0PGxvbmc+KF9fbnMuY291bnQoKSkKKwkgIH07CisJOjpuYW5vc2xlZXAoJl9fdHMsIDApOworI2Vsc2UKKwlfX3NsZWVwX2ZvcihfX3MsIF9fbnMpOworI2VuZGlmCisgICAgICB9CisKKyAgICAvLy8gc2xlZXBfdW50aWwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICAgIGlubGluZSB2b2lkCisgICAgICBzbGVlcF91bnRpbChjb25zdCBjaHJvbm86OnRpbWVfcG9pbnQ8X0Nsb2NrLCBfRHVyYXRpb24+JiBfX2F0aW1lKQorICAgICAgeyBzbGVlcF9mb3IoX19hdGltZSAtIF9DbG9jazo6bm93KCkpOyB9CisKKyAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgIH0KKworICAvLyBAfSBncm91cCB0aHJlYWRzCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9IQVNfR1RIUkVBRFMgJiYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVEhSRUFECmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9hcnJheSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2FycmF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YmU0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9hcnJheQpAQCAtMCwwICsxLDI1MSBAQAorLy8gY2xhc3MgdGVtcGxhdGUgYXJyYXkgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9hcnJheQorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9BUlJBWQorI2RlZmluZSBfR0xJQkNYWF9UUjFfQVJSQVkgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgZm9yIHN0b3JpbmcgYSBmaXhlZCBzaXplIHNlcXVlbmNlIG9mIGVsZW1lbnRzLgorICAgKgorICAgKiAgQGluZ3JvdXAgc2VxdWVuY2VzCisgICAqCisgICAqICBNZWV0cyB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgPGEgaHJlZj0idGFibGVzLmh0bWwjNjUiPmNvbnRhaW5lcjwvYT4sIGEKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sIzY2Ij5yZXZlcnNpYmxlIGNvbnRhaW5lcjwvYT4sIGFuZCBhCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NyI+c2VxdWVuY2U8L2E+LgorICAgKgorICAgKiAgU2V0cyBzdXBwb3J0IHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzLgorICAgKgorICAgKiAgQHBhcmFtICBUcCAgVHlwZSBvZiBlbGVtZW50LiBSZXF1aXJlZCB0byBiZSBhIGNvbXBsZXRlIHR5cGUuCisgICAqICBAcGFyYW0gIE4gIE51bWJlciBvZiBlbGVtZW50cy4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgc3RydWN0IGFycmF5CisgICAgeworICAgICAgdHlwZWRlZiBfVHAgCSAgICAJCQkgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgICAJICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAgICAgICAgICAgICAJICAgICAgY29uc3RfcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiAgICAgICAgICAJCSAgICAgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKgkJCSAgICAgIGNvbnN0X2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCAgICAgICAgICAgICAgICAgICAgCSAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgCSAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPgkgICAgICByZXZlcnNlX2l0ZXJhdG9yOworICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKKworICAgICAgLy8gU3VwcG9ydCBmb3IgemVyby1zaXplZCBhcnJheXMgbWFuZGF0b3J5LgorICAgICAgdmFsdWVfdHlwZSBfTV9pbnN0YW5jZVtfTm0gPyBfTm0gOiAxXTsKKworICAgICAgLy8gTm8gZXhwbGljaXQgY29uc3RydWN0L2NvcHkvZGVzdHJveSBmb3IgYWdncmVnYXRlIHR5cGUuCisKKyAgICAgIHZvaWQKKyAgICAgIGFzc2lnbihjb25zdCB2YWx1ZV90eXBlJiBfX3UpCisgICAgICB7IHN0ZDo6ZmlsbF9uKGJlZ2luKCksIHNpemUoKSwgX191KTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKGFycmF5JiBfX290aGVyKQorICAgICAgeyBzdGQ6OnN3YXBfcmFuZ2VzKGJlZ2luKCksIGVuZCgpLCBfX290aGVyLmJlZ2luKCkpOyB9CisKKyAgICAgIC8vIEl0ZXJhdG9ycy4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihzdGQ6Ol9fYWRkcmVzc29mKF9NX2luc3RhbmNlWzBdKSk7IH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QgCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihzdGQ6Ol9fYWRkcmVzc29mKF9NX2luc3RhbmNlWzBdKSk7IH0KKworICAgICAgaXRlcmF0b3IKKyAgICAgIGVuZCgpCisgICAgICB7IHJldHVybiBpdGVyYXRvcihzdGQ6Ol9fYWRkcmVzc29mKF9NX2luc3RhbmNlW19ObV0pKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKHN0ZDo6X19hZGRyZXNzb2YoX01faW5zdGFuY2VbX05tXSkpOyB9CisKKyAgICAgIHJldmVyc2VfaXRlcmF0b3IgCisgICAgICByYmVnaW4oKQorICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KKworICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAKKyAgICAgIHJiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQorCisgICAgICByZXZlcnNlX2l0ZXJhdG9yIAorICAgICAgcmVuZCgpCisgICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CisKKyAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgCisgICAgICByZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KKworICAgICAgLy8gQ2FwYWNpdHkuCisgICAgICBzaXplX3R5cGUgCisgICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX05tOyB9CisKKyAgICAgIHNpemVfdHlwZSAKKyAgICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX05tOyB9CisKKyAgICAgIGJvb2wgCisgICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CisKKyAgICAgIC8vIEVsZW1lbnQgYWNjZXNzLgorICAgICAgcmVmZXJlbmNlCisgICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCisgICAgICB7IHJldHVybiBfTV9pbnN0YW5jZVtfX25dOyB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faW5zdGFuY2VbX19uXTsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX24pCisgICAgICB7CisJaWYgKF9fbiA+PSBfTm0pCisJICBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYXJyYXk6OmF0IikpOworCXJldHVybiBfTV9pbnN0YW5jZVtfX25dOworICAgICAgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CisgICAgICB7CisJaWYgKF9fbiA+PSBfTm0pCisJICBzdGQ6Ol9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiYXJyYXk6OmF0IikpOworCXJldHVybiBfTV9pbnN0YW5jZVtfX25dOworICAgICAgfQorCisgICAgICByZWZlcmVuY2UgCisgICAgICBmcm9udCgpCisgICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UgCisgICAgICBmcm9udCgpIGNvbnN0CisgICAgICB7IHJldHVybiAqYmVnaW4oKTsgfQorCisgICAgICByZWZlcmVuY2UgCisgICAgICBiYWNrKCkKKyAgICAgIHsgcmV0dXJuIF9ObSA/ICooZW5kKCkgLSAxKSA6ICplbmQoKTsgfQorCisgICAgICBjb25zdF9yZWZlcmVuY2UgCisgICAgICBiYWNrKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9ObSA/ICooZW5kKCkgLSAxKSA6ICplbmQoKTsgfQorCisgICAgICBfVHAqCisgICAgICBkYXRhKCkKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX01faW5zdGFuY2VbMF0pOyB9CisKKyAgICAgIGNvbnN0IF9UcCoKKyAgICAgIGRhdGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfTV9pbnN0YW5jZVswXSk7IH0KKyAgICB9OworCisgIC8vIEFycmF5IGNvbXBhcmlzb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbCAKKyAgICBvcGVyYXRvcj09KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gc3RkOjplcXVhbChfX29uZS5iZWdpbigpLCBfX29uZS5lbmQoKSwgX190d28uYmVnaW4oKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICB7IHJldHVybiAhKF9fb25lID09IF9fdHdvKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19hLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fYikKKyAgICB7IAorICAgICAgcmV0dXJuIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX19hLmJlZ2luKCksIF9fYS5lbmQoKSwKKwkJCQkJICBfX2IuYmVnaW4oKSwgX19iLmVuZCgpKTsgCisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX19vbmUsIGNvbnN0IGFycmF5PF9UcCwgX05tPiYgX190d28pCisgICAgeyByZXR1cm4gX190d28gPCBfX29uZTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBjb25zdCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgcmV0dXJuICEoX19vbmUgPiBfX3R3byk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX29uZSwgY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX3R3bykKKyAgICB7IHJldHVybiAhKF9fb25lIDwgX190d28pOyB9CisKKyAgLy8gU3BlY2lhbGl6ZWQgYWxnb3JpdGhtcyBbNi4yLjIuMl0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChhcnJheTxfVHAsIF9ObT4mIF9fb25lLCBhcnJheTxfVHAsIF9ObT4mIF9fdHdvKQorICAgIHsgX19vbmUuc3dhcChfX3R3byk7IH0KKworICAvLyBUdXBsZSBpbnRlcmZhY2UgdG8gY2xhc3MgdGVtcGxhdGUgYXJyYXkgWzYuMi4yLjVdLgorCisgIC8vLyB0dXBsZV9zaXplCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gCisgICAgY2xhc3MgdHVwbGVfc2l6ZTsKKworICAvLy8gdHVwbGVfZWxlbWVudAorICB0ZW1wbGF0ZTxpbnQgX0ludCwgdHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIHR1cGxlX2VsZW1lbnQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgc3RydWN0IHR1cGxlX3NpemU8YXJyYXk8X1RwLCBfTm0+ID4KKyAgICB7IHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSBfTm07IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgY29uc3QgaW50CisgICAgdHVwbGVfc2l6ZTxhcnJheTxfVHAsIF9ObT4gPjo6dmFsdWU7ICAKKworICB0ZW1wbGF0ZTxpbnQgX0ludCwgdHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgc3RydWN0IHR1cGxlX2VsZW1lbnQ8X0ludCwgYXJyYXk8X1RwLCBfTm0+ID4KKyAgICB7IHR5cGVkZWYgX1RwIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8aW50IF9JbnQsIHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgorICAgIGlubGluZSBfVHAmCisgICAgZ2V0KGFycmF5PF9UcCwgX05tPiYgX19hcnIpCisgICAgeyByZXR1cm4gX19hcnJbX0ludF07IH0KKworICB0ZW1wbGF0ZTxpbnQgX0ludCwgdHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfTm0+CisgICAgaW5saW5lIGNvbnN0IF9UcCYKKyAgICBnZXQoY29uc3QgYXJyYXk8X1RwLCBfTm0+JiBfX2FycikKKyAgICB7IHJldHVybiBfX2FycltfSW50XTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9BUlJBWQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvYmVzc2VsX2Z1bmN0aW9uLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2Jlc3NlbF9mdW5jdGlvbi50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0ODFiOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2Jlc3NlbF9mdW5jdGlvbi50Y2MKQEAgLTAsMCArMSw2MjggQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2Jlc3NlbF9mdW5jdGlvbi50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt0cjEvY21hdGh9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kLgorLy8KKy8vIFJlZmVyZW5jZXM6CisvLyAgICgxKSBIYW5kYm9vayBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLAorLy8gICAgICAgZWQuIE1pbHRvbiBBYnJhbW93aXR6IGFuZCBJcmVuZSBBLiBTdGVndW4sCisvLyAgICAgICBEb3ZlciBQdWJsaWNhdGlvbnMsCisvLyAgICAgICBTZWN0aW9uIDksIHBwLiAzNTUtNDM0LCBTZWN0aW9uIDEwIHBwLiA0MzUtNDc4CisvLyAgICgyKSBUaGUgR251IFNjaWVudGlmaWMgTGlicmFyeSwgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dzbAorLy8gICAoMykgTnVtZXJpY2FsIFJlY2lwZXMgaW4gQywgYnkgVy4gSC4gUHJlc3MsIFMuIEEuIFRldWtvbHNreSwKKy8vICAgICAgIFcuIFQuIFZldHRlcmxpbmcsIEIuIFAuIEZsYW5uZXJ5LCBDYW1icmlkZ2UgVW5pdmVyc2l0eSBQcmVzcyAoMTk5MiksCisvLyAgICAgICAybmQgZWQsIHBwLiAyNDAtMjQ1CisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0JFU1NFTF9GVU5DVElPTl9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0JFU1NFTF9GVU5DVElPTl9UQ0MgMQorCisjaW5jbHVkZSAic3BlY2lhbF9mdW5jdGlvbl91dGlsLmgiCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBDb21wdXRlIHRoZSBnYW1tYSBmdW5jdGlvbnMgcmVxdWlyZWQgYnkgdGhlIFRlbW1lIHNlcmllcworICAgICAqICAgICAgICAgIGV4cGFuc2lvbnMgb2YgQGYkIE5fXG51KHgpIEBmJCBhbmQgQGYkIEtfXG51KHgpIEBmJC4KKyAgICAgKiAgIEBmWworICAgICAqICAgICBcR2FtbWFfMSA9IFxmcmFjezF9ezJcbXV9CisgICAgICogICAgICAgICAgICAgICAgW1xmcmFjezF9e1xHYW1tYSgxIC0gXG11KX0gLSBcZnJhY3sxfXtcR2FtbWEoMSArIFxtdSl9XQorICAgICAqICAgQGZdCisgICAgICogICBhbmQKKyAgICAgKiAgIEBmWworICAgICAqICAgICBcR2FtbWFfMiA9IFxmcmFjezF9ezJ9CisgICAgICogICAgICAgICAgICAgICAgW1xmcmFjezF9e1xHYW1tYSgxIC0gXG11KX0gKyBcZnJhY3sxfXtcR2FtbWEoMSArIFxtdSl9XQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSBAZiQgLTEvMiA8PSBcbXUgPD0gMS8yIEBmJCBpcyBAZiQgXG11ID0gXG51IC0gTiBAZiQgYW5kIEBmJCBOIEBmJC4KKyAgICAgKiAgIGlzIHRoZSBuZWFyZXN0IGludGVnZXIgdG8gQGYkIFxudSBAZiQuCisgICAgICogICBUaGUgdmFsdWVzIG9mIFxmJCBcR2FtbWEoMSArIFxtdSkgXGYkIGFuZCBcZiQgXEdhbW1hKDEgLSBcbXUpIFxmJAorICAgICAqICAgYXJlIHJldHVybmVkIGFzIHdlbGwuCisgICAgICogCisgICAgICogICBUaGUgYWNjdXJhY3kgcmVxdWlyZW1lbnRzIG9uIHRoaXMgYXJlIGV4cXVpc2l0ZS4KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9fbXUgICAgIFRoZSBpbnB1dCBwYXJhbWV0ZXIgb2YgdGhlIGdhbW1hIGZ1bmN0aW9ucy4KKyAgICAgKiAgIEBwYXJhbSBfX2dhbTEgICBUaGUgb3V0cHV0IGZ1bmN0aW9uIFxmJCBcR2FtbWFfMShcbXUpIFxmJAorICAgICAqICAgQHBhcmFtIF9fZ2FtMiAgIFRoZSBvdXRwdXQgZnVuY3Rpb24gXGYkIFxHYW1tYV8yKFxtdSkgXGYkCisgICAgICogICBAcGFyYW0gX19nYW1wbCAgVGhlIG91dHB1dCBmdW5jdGlvbiBcZiQgXEdhbW1hKDEgKyBcbXUpIFxmJAorICAgICAqICAgQHBhcmFtIF9fZ2FtbWkgIFRoZSBvdXRwdXQgZnVuY3Rpb24gXGYkIFxHYW1tYSgxIC0gXG11KSBcZiQKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX2dhbW1hX3RlbW1lKF9UcCBfX211LAorICAgICAgICAgICAgICAgICAgX1RwICYgX19nYW0xLCBfVHAgJiBfX2dhbTIsIF9UcCAmIF9fZ2FtcGwsIF9UcCAmIF9fZ2FtbWkpCisgICAgeworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIF9fZ2FtcGwgPSBfVHAoMSkgLyBzdGQ6OnRyMTo6dGdhbW1hKF9UcCgxKSArIF9fbXUpOworICAgICAgX19nYW1taSA9IF9UcCgxKSAvIHN0ZDo6dHIxOjp0Z2FtbWEoX1RwKDEpIC0gX19tdSk7CisjZWxzZQorICAgICAgX19nYW1wbCA9IF9UcCgxKSAvIF9fZ2FtbWEoX1RwKDEpICsgX19tdSk7CisgICAgICBfX2dhbW1pID0gX1RwKDEpIC8gX19nYW1tYShfVHAoMSkgLSBfX211KTsKKyNlbmRpZgorCisgICAgICBpZiAoc3RkOjphYnMoX19tdSkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKSkKKyAgICAgICAgX19nYW0xID0gLV9UcChfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fZ2FtbWFfZSgpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgX19nYW0xID0gKF9fZ2FtbWkgLSBfX2dhbXBsKSAvIChfVHAoMikgKiBfX211KTsKKworICAgICAgX19nYW0yID0gKF9fZ2FtbWkgKyBfX2dhbXBsKSAvIChfVHAoMikpOworCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgQ29tcHV0ZSB0aGUgQmVzc2VsIEBmJCBKX1xudSh4KSBAZiQgYW5kIE5ldW1hbm4KKyAgICAgKiAgICAgICAgICAgQGYkIE5fXG51KHgpIEBmJCBmdW5jdGlvbnMgYW5kIHRoZWlyIGZpcnN0IGRlcml2YXRpdmVzCisgICAgICogICAgICAgICAgIEBmJCBKJ19cbnUoeCkgQGYkIGFuZCBAZiQgTidfXG51KHgpIEBmJCByZXNwZWN0aXZlbHkuCisgICAgICogICAgICAgICAgIFRoZXNlIGZvdXIgZnVuY3Rpb25zIGFyZSBjb21wdXRlZCB0b2dldGhlciBmb3IgbnVtZXJpY2FsCisgICAgICogICAgICAgICAgIHN0YWJpbGl0eS4KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX251ICBUaGUgb3JkZXIgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbnMuCisgICAgICogICBAcGFyYW0gIF9feCAgIFRoZSBhcmd1bWVudCBvZiB0aGUgQmVzc2VsIGZ1bmN0aW9ucy4KKyAgICAgKiAgIEBwYXJhbSAgX19KbnUgIFRoZSBvdXRwdXQgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kLgorICAgICAqICAgQHBhcmFtICBfX05udSAgVGhlIG91dHB1dCBOZXVtYW5uIGZ1bmN0aW9uIChCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kKS4KKyAgICAgKiAgIEBwYXJhbSAgX19KcG51ICBUaGUgb3V0cHV0IGRlcml2YXRpdmUgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKiAgIEBwYXJhbSAgX19OcG51ICBUaGUgb3V0cHV0IGRlcml2YXRpdmUgb2YgdGhlIE5ldW1hbm4gZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX19iZXNzZWxfam4oX1RwIF9fbnUsIF9UcCBfX3gsCisgICAgICAgICAgICAgICAgX1RwICYgX19KbnUsIF9UcCAmIF9fTm51LCBfVHAgJiBfX0pwbnUsIF9UcCAmIF9fTnBudSkKKyAgICB7CisgICAgICBpZiAoX194ID09IF9UcCgwKSkKKyAgICAgICAgeworICAgICAgICAgIGlmIChfX251ID09IF9UcCgwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19KbnUgPSBfVHAoMSk7CisgICAgICAgICAgICAgIF9fSnBudSA9IF9UcCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChfX251ID09IF9UcCgxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19KbnUgPSBfVHAoMCk7CisgICAgICAgICAgICAgIF9fSnBudSA9IF9UcCgwLjVMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fSm51ID0gX1RwKDApOworICAgICAgICAgICAgICBfX0pwbnUgPSBfVHAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgX19ObnUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgICAgIF9fTnBudSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6aW5maW5pdHkoKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICAvLyAgV2hlbiB0aGUgbXVsdGlwbGllciBpcyBOIGkuZS4KKyAgICAgIC8vICBmcF9taW4gPSBOICogbWluKCkKKyAgICAgIC8vICBUaGVuIEpfMCBhbmQgTl8wIHRhbmsgYXQgeCA9IDggKiBOIChKXzAgPSAwIGFuZCBOXzAgPSBuYW4pIQorICAgICAgLy9jb25zdCBfVHAgX19mcF9taW4gPSBfVHAoMjApICogc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptaW4oKTsKKyAgICAgIGNvbnN0IF9UcCBfX2ZwX21pbiA9IHN0ZDo6c3FydChzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1pbigpKTsKKyAgICAgIGNvbnN0IGludCBfX21heF9pdGVyID0gMTUwMDA7CisgICAgICBjb25zdCBfVHAgX194X21pbiA9IF9UcCgyKTsKKworICAgICAgY29uc3QgaW50IF9fbmwgPSAoX194IDwgX194X21pbgorICAgICAgICAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGludD4oX19udSArIF9UcCgwLjVMKSkKKyAgICAgICAgICAgICAgICAgICAgOiBzdGQ6Om1heCgwLCBzdGF0aWNfY2FzdDxpbnQ+KF9fbnUgLSBfX3ggKyBfVHAoMS41TCkpKSk7CisKKyAgICAgIGNvbnN0IF9UcCBfX211ID0gX19udSAtIF9fbmw7CisgICAgICBjb25zdCBfVHAgX19tdTIgPSBfX211ICogX19tdTsKKyAgICAgIGNvbnN0IF9UcCBfX3hpID0gX1RwKDEpIC8gX194OworICAgICAgY29uc3QgX1RwIF9feGkyID0gX1RwKDIpICogX194aTsKKyAgICAgIF9UcCBfX3cgPSBfX3hpMiAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpOworICAgICAgaW50IF9faXNpZ24gPSAxOworICAgICAgX1RwIF9faCA9IF9fbnUgKiBfX3hpOworICAgICAgaWYgKF9faCA8IF9fZnBfbWluKQorICAgICAgICBfX2ggPSBfX2ZwX21pbjsKKyAgICAgIF9UcCBfX2IgPSBfX3hpMiAqIF9fbnU7CisgICAgICBfVHAgX19kID0gX1RwKDApOworICAgICAgX1RwIF9fYyA9IF9faDsKKyAgICAgIGludCBfX2k7CisgICAgICBmb3IgKF9faSA9IDE7IF9faSA8PSBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fYiArPSBfX3hpMjsKKyAgICAgICAgICBfX2QgPSBfX2IgLSBfX2Q7CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fZCkgPCBfX2ZwX21pbikKKyAgICAgICAgICAgIF9fZCA9IF9fZnBfbWluOworICAgICAgICAgIF9fYyA9IF9fYiAtIF9UcCgxKSAvIF9fYzsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX19jKSA8IF9fZnBfbWluKQorICAgICAgICAgICAgX19jID0gX19mcF9taW47CisgICAgICAgICAgX19kID0gX1RwKDEpIC8gX19kOworICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbCA9IF9fYyAqIF9fZDsKKyAgICAgICAgICBfX2ggKj0gX19kZWw7CisgICAgICAgICAgaWYgKF9fZCA8IF9UcCgwKSkKKyAgICAgICAgICAgIF9faXNpZ24gPSAtX19pc2lnbjsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX19kZWwgLSBfVHAoMSkpIDwgX19lcHMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgaWYgKF9faSA+IF9fbWF4X2l0ZXIpCisgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiQXJndW1lbnQgeCB0b28gbGFyZ2UgaW4gX19iZXNzZWxfam47ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cnkgYXN5bXB0b3RpYyBleHBhbnNpb24uIikpOworICAgICAgX1RwIF9fSm51bCA9IF9faXNpZ24gKiBfX2ZwX21pbjsKKyAgICAgIF9UcCBfX0pwbnVsID0gX19oICogX19KbnVsOworICAgICAgX1RwIF9fSm51bDEgPSBfX0pudWw7CisgICAgICBfVHAgX19KcG51MSA9IF9fSnBudWw7CisgICAgICBfVHAgX19mYWN0ID0gX19udSAqIF9feGk7CisgICAgICBmb3IgKCBpbnQgX19sID0gX19ubDsgX19sID49IDE7IC0tX19sICkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX0pudXRlbXAgPSBfX2ZhY3QgKiBfX0pudWwgKyBfX0pwbnVsOworICAgICAgICAgIF9fZmFjdCAtPSBfX3hpOworICAgICAgICAgIF9fSnBudWwgPSBfX2ZhY3QgKiBfX0pudXRlbXAgLSBfX0pudWw7CisgICAgICAgICAgX19KbnVsID0gX19KbnV0ZW1wOworICAgICAgICB9CisgICAgICBpZiAoX19KbnVsID09IF9UcCgwKSkKKyAgICAgICAgX19KbnVsID0gX19lcHM7CisgICAgICBfVHAgX19mPSBfX0pwbnVsIC8gX19KbnVsOworICAgICAgX1RwIF9fTm11LCBfX05udTEsIF9fTnBtdSwgX19KbXU7CisgICAgICBpZiAoX194IDwgX194X21pbikKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX3gyID0gX194IC8gX1RwKDIpOworICAgICAgICAgIGNvbnN0IF9UcCBfX3BpbXUgPSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSAqIF9fbXU7CisgICAgICAgICAgX1RwIF9fZmFjdCA9IChzdGQ6OmFicyhfX3BpbXUpIDwgX19lcHMKKyAgICAgICAgICAgICAgICAgICAgICA/IF9UcCgxKSA6IF9fcGltdSAvIHN0ZDo6c2luKF9fcGltdSkpOworICAgICAgICAgIF9UcCBfX2QgPSAtc3RkOjpsb2coX194Mik7CisgICAgICAgICAgX1RwIF9fZSA9IF9fbXUgKiBfX2Q7CisgICAgICAgICAgX1RwIF9fZmFjdDIgPSAoc3RkOjphYnMoX19lKSA8IF9fZXBzCisgICAgICAgICAgICAgICAgICAgICAgID8gX1RwKDEpIDogc3RkOjpzaW5oKF9fZSkgLyBfX2UpOworICAgICAgICAgIF9UcCBfX2dhbTEsIF9fZ2FtMiwgX19nYW1wbCwgX19nYW1taTsKKyAgICAgICAgICBfX2dhbW1hX3RlbW1lKF9fbXUsIF9fZ2FtMSwgX19nYW0yLCBfX2dhbXBsLCBfX2dhbW1pKTsKKyAgICAgICAgICBfVHAgX19mZiA9IChfVHAoMikgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSkKKyAgICAgICAgICAgICAgICAgICAqIF9fZmFjdCAqIChfX2dhbTEgKiBzdGQ6OmNvc2goX19lKSArIF9fZ2FtMiAqIF9fZmFjdDIgKiBfX2QpOworICAgICAgICAgIF9fZSA9IHN0ZDo6ZXhwKF9fZSk7CisgICAgICAgICAgX1RwIF9fcCA9IF9fZSAvIChfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSAqIF9fZ2FtcGwpOworICAgICAgICAgIF9UcCBfX3EgPSBfVHAoMSkgLyAoX19lICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkgKiBfX2dhbW1pKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19waW11MiA9IF9fcGltdSAvIF9UcCgyKTsKKyAgICAgICAgICBfVHAgX19mYWN0MyA9IChzdGQ6OmFicyhfX3BpbXUyKSA8IF9fZXBzCisgICAgICAgICAgICAgICAgICAgICAgID8gX1RwKDEpIDogc3RkOjpzaW4oX19waW11MikgLyBfX3BpbXUyICk7CisgICAgICAgICAgX1RwIF9fciA9IF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpICogX19waW11MiAqIF9fZmFjdDMgKiBfX2ZhY3QzOworICAgICAgICAgIF9UcCBfX2MgPSBfVHAoMSk7CisgICAgICAgICAgX19kID0gLV9feDIgKiBfX3gyOworICAgICAgICAgIF9UcCBfX3N1bSA9IF9fZmYgKyBfX3IgKiBfX3E7CisgICAgICAgICAgX1RwIF9fc3VtMSA9IF9fcDsKKyAgICAgICAgICBmb3IgKF9faSA9IDE7IF9faSA8PSBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19mZiA9IChfX2kgKiBfX2ZmICsgX19wICsgX19xKSAvIChfX2kgKiBfX2kgLSBfX211Mik7CisgICAgICAgICAgICAgIF9fYyAqPSBfX2QgLyBfVHAoX19pKTsKKyAgICAgICAgICAgICAgX19wIC89IF9UcChfX2kpIC0gX19tdTsKKyAgICAgICAgICAgICAgX19xIC89IF9UcChfX2kpICsgX19tdTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fZGVsID0gX19jICogKF9fZmYgKyBfX3IgKiBfX3EpOworICAgICAgICAgICAgICBfX3N1bSArPSBfX2RlbDsgCisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbDEgPSBfX2MgKiBfX3AgLSBfX2kgKiBfX2RlbDsKKyAgICAgICAgICAgICAgX19zdW0xICs9IF9fZGVsMTsKKyAgICAgICAgICAgICAgaWYgKCBzdGQ6OmFicyhfX2RlbCkgPCBfX2VwcyAqIChfVHAoMSkgKyBzdGQ6OmFicyhfX3N1bSkpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIF9faSA+IF9fbWF4X2l0ZXIgKQorICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJCZXNzZWwgeSBzZXJpZXMgZmFpbGVkIHRvIGNvbnZlcmdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19iZXNzZWxfam4uIikpOworICAgICAgICAgIF9fTm11ID0gLV9fc3VtOworICAgICAgICAgIF9fTm51MSA9IC1fX3N1bTEgKiBfX3hpMjsKKyAgICAgICAgICBfX05wbXUgPSBfX211ICogX194aSAqIF9fTm11IC0gX19ObnUxOworICAgICAgICAgIF9fSm11ID0gX193IC8gKF9fTnBtdSAtIF9fZiAqIF9fTm11KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fYSA9IF9UcCgwLjI1TCkgLSBfX211MjsKKyAgICAgICAgICBfVHAgX19xID0gX1RwKDEpOworICAgICAgICAgIF9UcCBfX3AgPSAtX194aSAvIF9UcCgyKTsKKyAgICAgICAgICBfVHAgX19iciA9IF9UcCgyKSAqIF9feDsKKyAgICAgICAgICBfVHAgX19iaSA9IF9UcCgyKTsKKyAgICAgICAgICBfVHAgX19mYWN0ID0gX19hICogX194aSAvIChfX3AgKiBfX3AgKyBfX3EgKiBfX3EpOworICAgICAgICAgIF9UcCBfX2NyID0gX19iciArIF9fcSAqIF9fZmFjdDsKKyAgICAgICAgICBfVHAgX19jaSA9IF9fYmkgKyBfX3AgKiBfX2ZhY3Q7CisgICAgICAgICAgX1RwIF9fZGVuID0gX19iciAqIF9fYnIgKyBfX2JpICogX19iaTsKKyAgICAgICAgICBfVHAgX19kciA9IF9fYnIgLyBfX2RlbjsKKyAgICAgICAgICBfVHAgX19kaSA9IC1fX2JpIC8gX19kZW47CisgICAgICAgICAgX1RwIF9fZGxyID0gX19jciAqIF9fZHIgLSBfX2NpICogX19kaTsKKyAgICAgICAgICBfVHAgX19kbGkgPSBfX2NyICogX19kaSArIF9fY2kgKiBfX2RyOworICAgICAgICAgIF9UcCBfX3RlbXAgPSBfX3AgKiBfX2RsciAtIF9fcSAqIF9fZGxpOworICAgICAgICAgIF9fcSA9IF9fcCAqIF9fZGxpICsgX19xICogX19kbHI7CisgICAgICAgICAgX19wID0gX190ZW1wOworICAgICAgICAgIGludCBfX2k7CisgICAgICAgICAgZm9yIChfX2kgPSAyOyBfX2kgPD0gX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fYSArPSBfVHAoMiAqIChfX2kgLSAxKSk7CisgICAgICAgICAgICAgIF9fYmkgKz0gX1RwKDIpOworICAgICAgICAgICAgICBfX2RyID0gX19hICogX19kciArIF9fYnI7CisgICAgICAgICAgICAgIF9fZGkgPSBfX2EgKiBfX2RpICsgX19iaTsKKyAgICAgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fZHIpICsgc3RkOjphYnMoX19kaSkgPCBfX2ZwX21pbikKKyAgICAgICAgICAgICAgICBfX2RyID0gX19mcF9taW47CisgICAgICAgICAgICAgIF9fZmFjdCA9IF9fYSAvIChfX2NyICogX19jciArIF9fY2kgKiBfX2NpKTsKKyAgICAgICAgICAgICAgX19jciA9IF9fYnIgKyBfX2NyICogX19mYWN0OworICAgICAgICAgICAgICBfX2NpID0gX19iaSAtIF9fY2kgKiBfX2ZhY3Q7CisgICAgICAgICAgICAgIGlmIChzdGQ6OmFicyhfX2NyKSArIHN0ZDo6YWJzKF9fY2kpIDwgX19mcF9taW4pCisgICAgICAgICAgICAgICAgX19jciA9IF9fZnBfbWluOworICAgICAgICAgICAgICBfX2RlbiA9IF9fZHIgKiBfX2RyICsgX19kaSAqIF9fZGk7CisgICAgICAgICAgICAgIF9fZHIgLz0gX19kZW47CisgICAgICAgICAgICAgIF9fZGkgLz0gLV9fZGVuOworICAgICAgICAgICAgICBfX2RsciA9IF9fY3IgKiBfX2RyIC0gX19jaSAqIF9fZGk7CisgICAgICAgICAgICAgIF9fZGxpID0gX19jciAqIF9fZGkgKyBfX2NpICogX19kcjsKKyAgICAgICAgICAgICAgX190ZW1wID0gX19wICogX19kbHIgLSBfX3EgKiBfX2RsaTsKKyAgICAgICAgICAgICAgX19xID0gX19wICogX19kbGkgKyBfX3EgKiBfX2RscjsKKyAgICAgICAgICAgICAgX19wID0gX190ZW1wOworICAgICAgICAgICAgICBpZiAoc3RkOjphYnMoX19kbHIgLSBfVHAoMSkpICsgc3RkOjphYnMoX19kbGkpIDwgX19lcHMpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX2kgPiBfX21heF9pdGVyKQorICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJMZW50eidzIG1ldGhvZCBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2Jlc3NlbF9qbi4iKSk7CisgICAgICAgICAgY29uc3QgX1RwIF9fZ2FtID0gKF9fcCAtIF9fZikgLyBfX3E7CisgICAgICAgICAgX19KbXUgPSBzdGQ6OnNxcnQoX193IC8gKChfX3AgLSBfX2YpICogX19nYW0gKyBfX3EpKTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgX19KbXUgPSBzdGQ6OnRyMTo6Y29weXNpZ24oX19KbXUsIF9fSm51bCk7CisjZWxzZQorICAgICAgICAgIGlmIChfX0ptdSAqIF9fSm51bCA8IF9UcCgwKSkKKyAgICAgICAgICAgIF9fSm11ID0gLV9fSm11OworI2VuZGlmCisgICAgICAgICAgX19ObXUgPSBfX2dhbSAqIF9fSm11OworICAgICAgICAgIF9fTnBtdSA9IChfX3AgKyBfX3EgLyBfX2dhbSkgKiBfX05tdTsKKyAgICAgICAgICBfX05udTEgPSBfX211ICogX194aSAqIF9fTm11IC0gX19OcG11OworICAgICAgfQorICAgICAgX19mYWN0ID0gX19KbXUgLyBfX0pudWw7CisgICAgICBfX0pudSA9IF9fZmFjdCAqIF9fSm51bDE7CisgICAgICBfX0pwbnUgPSBfX2ZhY3QgKiBfX0pwbnUxOworICAgICAgZm9yIChfX2kgPSAxOyBfX2kgPD0gX19ubDsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19ObnV0ZW1wID0gKF9fbXUgKyBfX2kpICogX194aTIgKiBfX05udTEgLSBfX05tdTsKKyAgICAgICAgICBfX05tdSA9IF9fTm51MTsKKyAgICAgICAgICBfX05udTEgPSBfX05udXRlbXA7CisgICAgICAgIH0KKyAgICAgIF9fTm51ID0gX19ObXU7CisgICAgICBfX05wbnUgPSBfX251ICogX194aSAqIF9fTm11IC0gX19ObnUxOworCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgY29tcHV0ZXMgdGhlIGFzeW1wdG90aWMgY3lsaW5kcmljYWwgQmVzc2VsCisgICAgICogICAgICAgICAgYW5kIE5ldW1hbm4gZnVuY3Rpb25zIG9mIG9yZGVyIG51OiBcZiQgSl97XG51fSBcZiQsCisgICAgICogICAgICAgICAgXGYkIE5fe1xudX0gXGYkLgorICAgICAqCisgICAgICogICBSZWZlcmVuY2VzOgorICAgICAqICAgICgxKSBIYW5kYm9vayBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLAorICAgICAqICAgICAgICBlZC4gTWlsdG9uIEFicmFtb3dpdHogYW5kIElyZW5lIEEuIFN0ZWd1biwKKyAgICAgKiAgICAgICAgRG92ZXIgUHVibGljYXRpb25zLAorICAgICAqICAgICAgICBTZWN0aW9uIDkgcC4gMzY0LCBFcXVhdGlvbnMgOS4yLjUtOS4yLjEwCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19udSAgVGhlIG9yZGVyIG9mIHRoZSBCZXNzZWwgZnVuY3Rpb25zLgorICAgICAqICAgQHBhcmFtICBfX3ggICBUaGUgYXJndW1lbnQgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbnMuCisgICAgICogICBAcGFyYW0gIF9fSm51ICBUaGUgb3V0cHV0IEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKiAgIEBwYXJhbSAgX19ObnUgIFRoZSBvdXRwdXQgTmV1bWFubiBmdW5jdGlvbiAoQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZCkuCisgICAgICovCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX19jeWxfYmVzc2VsX2puX2FzeW1wKF9UcCBfX251LCBfVHAgX194LCBfVHAgJiBfX0pudSwgX1RwICYgX19ObnUpCisgICAgeworICAgICAgY29uc3QgX1RwIF9fbXUgICA9IF9UcCg0KSAqIF9fbnUgKiBfX251OworICAgICAgY29uc3QgX1RwIF9fbXVtMSA9IF9fbXUgLSBfVHAoMSk7CisgICAgICBjb25zdCBfVHAgX19tdW05ID0gX19tdSAtIF9UcCg5KTsKKyAgICAgIGNvbnN0IF9UcCBfX211bTI1ID0gX19tdSAtIF9UcCgyNSk7CisgICAgICBjb25zdCBfVHAgX19tdW00OSA9IF9fbXUgLSBfVHAoNDkpOworICAgICAgY29uc3QgX1RwIF9feHggPSBfVHAoNjQpICogX194ICogX194OworICAgICAgY29uc3QgX1RwIF9fUCA9IF9UcCgxKSAtIF9fbXVtMSAqIF9fbXVtOSAvIChfVHAoMikgKiBfX3h4KQorICAgICAgICAgICAgICAgICAgICAqIChfVHAoMSkgLSBfX211bTI1ICogX19tdW00OSAvIChfVHAoMTIpICogX194eCkpOworICAgICAgY29uc3QgX1RwIF9fUSA9IF9fbXVtMSAvIChfVHAoOCkgKiBfX3gpCisgICAgICAgICAgICAgICAgICAgICogKF9UcCgxKSAtIF9fbXVtOSAqIF9fbXVtMjUgLyAoX1RwKDYpICogX194eCkpOworCisgICAgICBjb25zdCBfVHAgX19jaGkgPSBfX3ggLSAoX19udSArIF9UcCgwLjVMKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV8yKCk7CisgICAgICBjb25zdCBfVHAgX19jID0gc3RkOjpjb3MoX19jaGkpOworICAgICAgY29uc3QgX1RwIF9fcyA9IHN0ZDo6c2luKF9fY2hpKTsKKworICAgICAgY29uc3QgX1RwIF9fY29lZiA9IHN0ZDo6c3FydChfVHAoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkgKiBfX3gpKTsKKyAgICAgIF9fSm51ID0gX19jb2VmICogKF9fYyAqIF9fUCAtIF9fcyAqIF9fUSk7CisgICAgICBfX05udSA9IF9fY29lZiAqIChfX3MgKiBfX1AgKyBfX2MgKiBfX1EpOworCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgY3lsaW5kcmljYWwgQmVzc2VsIGZ1bmN0aW9ucworICAgICAqICAgICAgICAgIG9mIG9yZGVyIFxmJCBcbnUgXGYkOiBcZiQgSl97XG51fSBcZiQgb3IgXGYkIElfe1xudX0gXGYkCisgICAgICogICAgICAgICAgYnkgc2VyaWVzIGV4cGFuc2lvbi4KKyAgICAgKgorICAgICAqICAgVGhlIG1vZGlmaWVkIGN5bGluZHJpY2FsIEJlc3NlbCBmdW5jdGlvbiBpczoKKyAgICAgKiAgIEBmWworICAgICAqICAgIFpfe1xudX0oeCkgPSBcc3VtX3trPTB9XntcaW5mdHl9CisgICAgICogICAgICAgICAgICAgIFxmcmFje1xzaWdtYV5rICh4LzIpXntcbnUgKyAya319e2shXEdhbW1hKFxudStrKzEpfQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSBcZiQgXHNpZ21hID0gKzEgXGYkIG9yXGYkICAtMSBcZiQgZm9yCisgICAgICogICBcZiQgWiA9IEkgXGYkIG9yIFxmJCBKIFxmJCByZXNwZWN0aXZlbHkuCisgICAgICogCisgICAgICogICBTZWUgQWJyYW1vd2l0eiAmIFN0ZWd1biwgOS4xLjEwCisgICAgICogICAgICAgQWJyYW1vd2l0eiAmIFN0ZWd1biwgOS42LjcKKyAgICAgKiAgICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKyAgICAgKiAgICAgICAgZWQuIE1pbHRvbiBBYnJhbW93aXR6IGFuZCBJcmVuZSBBLiBTdGVndW4sCisgICAgICogICAgICAgIERvdmVyIFB1YmxpY2F0aW9ucywKKyAgICAgKiAgICAgICAgRXF1YXRpb24gOS4xLjEwIHAuIDM2MCBhbmQgRXF1YXRpb24gOS42LjEwIHAuIDM3NQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBvcmRlciBvZiB0aGUgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggICBUaGUgYXJndW1lbnQgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19zZ24gIFRoZSBzaWduIG9mIHRoZSBhbHRlcm5hdGUgdGVybXMKKyAgICAgKiAgICAgICAgICAgICAgICAgIC0xIGZvciB0aGUgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kLgorICAgICAqICAgICAgICAgICAgICAgICAgKzEgZm9yIHRoZSBtb2RpZmllZCBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQuCisgICAgICogICBAcmV0dXJuICBUaGUgb3V0cHV0IEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY3lsX2Jlc3NlbF9pal9zZXJpZXMoX1RwIF9fbnUsIF9UcCBfX3gsIF9UcCBfX3NnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX21heF9pdGVyKQorICAgIHsKKyAgICAgIGlmIChfX3ggPT0gX1RwKDApKQorCXJldHVybiBfX251ID09IF9UcCgwKSA/IF9UcCgxKSA6IF9UcCgwKTsKKworICAgICAgY29uc3QgX1RwIF9feDIgPSBfX3ggLyBfVHAoMik7CisgICAgICBfVHAgX19mYWN0ID0gX19udSAqIHN0ZDo6bG9nKF9feDIpOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIF9fZmFjdCAtPSBzdGQ6OnRyMTo6bGdhbW1hKF9fbnUgKyBfVHAoMSkpOworI2Vsc2UKKyAgICAgIF9fZmFjdCAtPSBfX2xvZ19nYW1tYShfX251ICsgX1RwKDEpKTsKKyNlbmRpZgorICAgICAgX19mYWN0ID0gc3RkOjpleHAoX19mYWN0KTsKKyAgICAgIGNvbnN0IF9UcCBfX3h4NCA9IF9fc2duICogX194MiAqIF9feDI7CisgICAgICBfVHAgX19KbiA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMSk7CisKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDE7IF9faSA8IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgX190ZXJtICo9IF9feHg0IC8gKF9UcChfX2kpICogKF9fbnUgKyBfVHAoX19pKSkpOworICAgICAgICAgIF9fSm4gKz0gX190ZXJtOworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3Rlcm0gLyBfX0puKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fZmFjdCAqIF9fSm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBCZXNzZWwgZnVuY3Rpb24gb2Ygb3JkZXIgXGYkIFxudSBcZiQ6CisgICAgICogICAgICAgICAgIFxmJCBKX3tcbnV9KHgpIFxmJC4KKyAgICAgKgorICAgICAqICAgVGhlIGN5bGluZHJpY2FsIEJlc3NlbCBmdW5jdGlvbiBpczoKKyAgICAgKiAgIEBmWworICAgICAqICAgIEpfe1xudX0oeCkgPSBcc3VtX3trPTB9XntcaW5mdHl9CisgICAgICogICAgICAgICAgICAgIFxmcmFjeygtMSleayAoeC8yKV57XG51ICsgMmt9fXtrIVxHYW1tYShcbnUraysxKX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBvcmRlciBvZiB0aGUgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggICBUaGUgYXJndW1lbnQgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBvdXRwdXQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2N5bF9iZXNzZWxfaihfVHAgX19udSwgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX19udSA8IF9UcCgwKSB8fCBfX3ggPCBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19jeWxfYmVzc2VsX2ouIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194ICogX194IDwgX1RwKDEwKSAqIChfX251ICsgX1RwKDEpKSkKKyAgICAgICAgcmV0dXJuIF9fY3lsX2Jlc3NlbF9pal9zZXJpZXMoX19udSwgX194LCAtX1RwKDEpLCAyMDApOworICAgICAgZWxzZSBpZiAoX194ID4gX1RwKDEwMDApKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSl9udSwgX19OX251OworICAgICAgICAgIF9fY3lsX2Jlc3NlbF9qbl9hc3ltcChfX251LCBfX3gsIF9fSl9udSwgX19OX251KTsKKyAgICAgICAgICByZXR1cm4gX19KX251OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19KX251LCBfX05fbnUsIF9fSnBfbnUsIF9fTnBfbnU7CisgICAgICAgICAgX19iZXNzZWxfam4oX19udSwgX194LCBfX0pfbnUsIF9fTl9udSwgX19KcF9udSwgX19OcF9udSk7CisgICAgICAgICAgcmV0dXJuIF9fSl9udTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgTmV1bWFubiBmdW5jdGlvbiBvZiBvcmRlciBcZiQgXG51IFxmJDoKKyAgICAgKiAgICAgICAgICAgXGYkIE5fe1xudX0oeCkgXGYkLgorICAgICAqCisgICAgICogICBUaGUgTmV1bWFubiBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICBOX3tcbnV9KHgpID0gXGZyYWN7Sl97XG51fSh4KSBcY29zIFxudVxwaSAtIEpfey1cbnV9KHgpfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAge1xzaW4gXG51XHBpfQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSBmb3IgaW50ZWdyYWwgXGYkIFxudSA9IG4gXGYkIGEgbGltaXQgaXMgdGFrZW46CisgICAgICogICBcZiQgbGltX3tcbnUgXHRvIG59IFxmJC4KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX251ICBUaGUgb3JkZXIgb2YgdGhlIE5ldW1hbm4gZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgIFRoZSBhcmd1bWVudCBvZiB0aGUgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBvdXRwdXQgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19jeWxfbmV1bWFubl9uKF9UcCBfX251LCBfVHAgX194KQorICAgIHsKKyAgICAgIGlmIChfX251IDwgX1RwKDApIHx8IF9feCA8IF9UcCgwKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2N5bF9uZXVtYW5uX24uIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194ID4gX1RwKDEwMDApKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSl9udSwgX19OX251OworICAgICAgICAgIF9fY3lsX2Jlc3NlbF9qbl9hc3ltcChfX251LCBfX3gsIF9fSl9udSwgX19OX251KTsKKyAgICAgICAgICByZXR1cm4gX19OX251OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19KX251LCBfX05fbnUsIF9fSnBfbnUsIF9fTnBfbnU7CisgICAgICAgICAgX19iZXNzZWxfam4oX19udSwgX194LCBfX0pfbnUsIF9fTl9udSwgX19KcF9udSwgX19OcF9udSk7CisgICAgICAgICAgcmV0dXJuIF9fTl9udTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIENvbXB1dGUgdGhlIHNwaGVyaWNhbCBCZXNzZWwgQGYkIGpfbih4KSBAZiQKKyAgICAgKiAgICAgICAgICAgYW5kIE5ldW1hbm4gQGYkIG5fbih4KSBAZiQgZnVuY3Rpb25zIGFuZCB0aGVpciBmaXJzdAorICAgICAqICAgICAgICAgICBkZXJpdmF0aXZlcyBAZiQgaidfbih4KSBAZiQgYW5kIEBmJCBuJ19uKHgpIEBmJAorICAgICAqICAgICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX2pfbiAgVGhlIG91dHB1dCBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX25fbiAgVGhlIG91dHB1dCBzcGhlcmljYWwgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19qcF9uIFRoZSBvdXRwdXQgZGVyaXZhdGl2ZSBvZiB0aGUgc3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19ucF9uIFRoZSBvdXRwdXQgZGVyaXZhdGl2ZSBvZiB0aGUgc3BoZXJpY2FsIE5ldW1hbm4gZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KKyAgICB2b2lkCisgICAgX19zcGhfYmVzc2VsX2puKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gsCisgICAgICAgICAgICAgICAgICAgIF9UcCAmIF9fal9uLCBfVHAgJiBfX25fbiwgX1RwICYgX19qcF9uLCBfVHAgJiBfX25wX24pCisgICAgeworICAgICAgY29uc3QgX1RwIF9fbnUgPSBfVHAoX19uKSArIF9UcCgwLjVMKTsKKworICAgICAgX1RwIF9fSl9udSwgX19OX251LCBfX0pwX251LCBfX05wX251OworICAgICAgX19iZXNzZWxfam4oX19udSwgX194LCBfX0pfbnUsIF9fTl9udSwgX19KcF9udSwgX19OcF9udSk7CisKKyAgICAgIGNvbnN0IF9UcCBfX2ZhY3RvciA9IF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0cGlvMigpCisgICAgICAgICAgICAgICAgICAgICAgICAgLyBzdGQ6OnNxcnQoX194KTsKKworICAgICAgX19qX24gPSBfX2ZhY3RvciAqIF9fSl9udTsKKyAgICAgIF9fbl9uID0gX19mYWN0b3IgKiBfX05fbnU7CisgICAgICBfX2pwX24gPSBfX2ZhY3RvciAqIF9fSnBfbnUgLSBfX2pfbiAvIChfVHAoMikgKiBfX3gpOworICAgICAgX19ucF9uID0gX19mYWN0b3IgKiBfX05wX251IC0gX19uX24gLyAoX1RwKDIpICogX194KTsKKworICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgc3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbgorICAgICAqICAgICAgICAgICBAZiQgal9uKHgpIEBmJCBvZiBvcmRlciBuLgorICAgICAqCisgICAgICogICBUaGUgc3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgal9uKHgpID0gXGxlZnQoIFxmcmFje1xwaX17Mnh9IFxyaWdodCkgXnsxLzJ9IEpfe24rMS8yfSh4KQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIG91dHB1dCBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19zcGhfYmVzc2VsKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCA8IF9UcCgwKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX3NwaF9iZXNzZWwuIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9feCA9PSBfVHAoMCkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoX19uID09IDApCisgICAgICAgICAgICByZXR1cm4gX1RwKDEpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBfVHAoMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX2pfbiwgX19uX24sIF9fanBfbiwgX19ucF9uOworICAgICAgICAgIF9fc3BoX2Jlc3NlbF9qbihfX24sIF9feCwgX19qX24sIF9fbl9uLCBfX2pwX24sIF9fbnBfbik7CisgICAgICAgICAgcmV0dXJuIF9fal9uOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBzcGhlcmljYWwgTmV1bWFubiBmdW5jdGlvbgorICAgICAqICAgICAgICAgICBAZiQgbl9uKHgpIEBmJC4KKyAgICAgKgorICAgICAqICAgVGhlIHNwaGVyaWNhbCBOZXVtYW5uIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICBuX24oeCkgPSBcbGVmdCggXGZyYWN7XHBpfXsyeH0gXHJpZ2h0KSBeezEvMn0gTl97bisxLzJ9KHgpCisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX24gIFRoZSBvcmRlciBvZiB0aGUgc3BoZXJpY2FsIE5ldW1hbm4gZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBzcGhlcmljYWwgTmV1bWFubiBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBvdXRwdXQgc3BoZXJpY2FsIE5ldW1hbm4gZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3NwaF9uZXVtYW5uKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCA8IF9UcCgwKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX3NwaF9uZXVtYW5uLiIpKTsKKyAgICAgIGVsc2UgaWYgKF9faXNuYW4oX194KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChfX3ggPT0gX1RwKDApKQorICAgICAgICByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6aW5maW5pdHkoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX2pfbiwgX19uX24sIF9fanBfbiwgX19ucF9uOworICAgICAgICAgIF9fc3BoX2Jlc3NlbF9qbihfX24sIF9feCwgX19qX24sIF9fbl9uLCBfX2pwX24sIF9fbnBfbik7CisgICAgICAgICAgcmV0dXJuIF9fbl9uOworICAgICAgICB9CisgICAgfQorCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBzdGQ6OnRyMTo6X19kZXRhaWwKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9CRVNTRUxfRlVOQ1RJT05fVENDCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9iZXRhX2Z1bmN0aW9uLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2JldGFfZnVuY3Rpb24udGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9iZXRhX2Z1bmN0aW9uLnRjYwpAQCAtMCwwICsxLDE5NyBAQAorLy8gU3BlY2lhbCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvYmV0YV9mdW5jdGlvbi50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt0cjEvY21hdGh9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kIGJhc2VkIG9uOgorLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIGVkLiBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLAorLy8gICAgICAgU2VjdGlvbiA2LCBwcC4gMjUzLTI2NgorLy8gICAoMikgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKy8vICAgKDMpIE51bWVyaWNhbCBSZWNpcGVzIGluIEMsIGJ5IFcuIEguIFByZXNzLCBTLiBBLiBUZXVrb2xza3ksCisvLyAgICAgICBXLiBULiBWZXR0ZXJsaW5nLCBCLiBQLiBGbGFubmVyeSwgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MgKDE5OTIpLAorLy8gICAgICAgMm5kIGVkLCBwcC4gMjEzLTIxNgorLy8gICAoNCkgR2FtbWEsIEV4cGxvcmluZyBFdWxlcidzIENvbnN0YW50LCBKdWxpYW4gSGF2aWwsCisvLyAgICAgICBQcmluY2V0b24sIDIwMDMuCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0JFVEFfRlVOQ1RJT05fVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9CRVRBX0ZVTkNUSU9OX1RDQyAxCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBiZXRhIGZ1bmN0aW9uOiBcZiRCKHgseSlcZiQuCisgICAgICogCisgICAgICogICBUaGUgYmV0YSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5CisgICAgICogICBAZlsKKyAgICAgKiAgICAgQih4LHkpID0gXGZyYWN7XEdhbW1hKHgpXEdhbW1hKHkpfXtcR2FtbWEoeCt5KX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gX194IFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgYmV0YSBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSBfX3kgVGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgYmV0YSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2JldGFfZ2FtbWEoX1RwIF9feCwgX1RwIF9feSkKKyAgICB7CisKKyAgICAgIF9UcCBfX2JldDsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBpZiAoX194ID4gX195KQorICAgICAgICB7CisgICAgICAgICAgX19iZXQgPSBzdGQ6OnRyMTo6dGdhbW1hKF9feCkKKyAgICAgICAgICAgICAgICAvIHN0ZDo6dHIxOjp0Z2FtbWEoX194ICsgX195KTsKKyAgICAgICAgICBfX2JldCAqPSBzdGQ6OnRyMTo6dGdhbW1hKF9feSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9fYmV0ID0gc3RkOjp0cjE6OnRnYW1tYShfX3kpCisgICAgICAgICAgICAgICAgLyBzdGQ6OnRyMTo6dGdhbW1hKF9feCArIF9feSk7CisgICAgICAgICAgX19iZXQgKj0gc3RkOjp0cjE6OnRnYW1tYShfX3gpOworICAgICAgICB9CisjZWxzZQorICAgICAgaWYgKF9feCA+IF9feSkKKyAgICAgICAgeworICAgICAgICAgIF9fYmV0ID0gX19nYW1tYShfX3gpIC8gX19nYW1tYShfX3ggKyBfX3kpOworICAgICAgICAgIF9fYmV0ICo9IF9fZ2FtbWEoX195KTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX19iZXQgPSBfX2dhbW1hKF9feSkgLyBfX2dhbW1hKF9feCArIF9feSk7CisgICAgICAgICAgX19iZXQgKj0gX19nYW1tYShfX3gpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgcmV0dXJuIF9fYmV0OworICAgIH0KKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGJldGEgZnVuY3Rpb24gXGYkQih4LHkpXGYkIHVzaW5nCisgICAgICogICAgICAgICAgIHRoZSBsb2cgZ2FtbWEgZnVuY3Rpb25zLgorICAgICAqIAorICAgICAqICAgVGhlIGJldGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBieQorICAgICAqICAgQGZbCisgICAgICogICAgIEIoeCx5KSA9IFxmcmFje1xHYW1tYSh4KVxHYW1tYSh5KX17XEdhbW1hKHgreSl9CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGJldGEgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gX195IFRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGJldGEgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgYmV0YSBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19iZXRhX2xnYW1tYShfVHAgX194LCBfVHAgX195KQorICAgIHsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBfVHAgX19iZXQgPSBzdGQ6OnRyMTo6bGdhbW1hKF9feCkKKyAgICAgICAgICAgICAgICArIHN0ZDo6dHIxOjpsZ2FtbWEoX195KQorICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfX3ggKyBfX3kpOworI2Vsc2UKKyAgICAgIF9UcCBfX2JldCA9IF9fbG9nX2dhbW1hKF9feCkKKyAgICAgICAgICAgICAgICArIF9fbG9nX2dhbW1hKF9feSkKKyAgICAgICAgICAgICAgICAtIF9fbG9nX2dhbW1hKF9feCArIF9feSk7CisjZW5kaWYKKyAgICAgIF9fYmV0ID0gc3RkOjpleHAoX19iZXQpOworICAgICAgcmV0dXJuIF9fYmV0OworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgYmV0YSBmdW5jdGlvbiBcZiRCKHgseSlcZiQgdXNpbmcKKyAgICAgKiAgICAgICAgICAgdGhlIHByb2R1Y3QgZm9ybS4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBiZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBCKHgseSkgPSBcZnJhY3tcR2FtbWEoeClcR2FtbWEoeSl9e1xHYW1tYSh4K3kpfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtIF9feSBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGJldGEgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fYmV0YV9wcm9kdWN0KF9UcCBfX3gsIF9UcCBfX3kpCisgICAgeworCisgICAgICBfVHAgX19iZXQgPSAoX194ICsgX195KSAvIChfX3ggKiBfX3kpOworCisgICAgICB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDAwMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2sgPSAxOyBfX2sgPCBfX21heF9pdGVyOyArK19faykKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3Rlcm0gPSAoX1RwKDEpICsgKF9feCArIF9feSkgLyBfX2spCisgICAgICAgICAgICAgICAgICAgICAvICgoX1RwKDEpICsgX194IC8gX19rKSAqIChfVHAoMSkgKyBfX3kgLyBfX2spKTsKKyAgICAgICAgICBfX2JldCAqPSBfX3Rlcm07CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fYmV0OworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgYmV0YSBmdW5jdGlvbiBcZiQgQih4LHkpIFxmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBiZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBCKHgseSkgPSBcZnJhY3tcR2FtbWEoeClcR2FtbWEoeSl9e1xHYW1tYSh4K3kpfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtIF9feSBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBiZXRhIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGJldGEgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX2JldGEoX1RwIF9feCwgX1RwIF9feSkKKyAgICB7CisgICAgICBpZiAoX19pc25hbihfX3gpIHx8IF9faXNuYW4oX195KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2JldGFfbGdhbW1hKF9feCwgX195KTsKKyAgICB9CisKKyAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgIH0gLy8gbmFtZXNwYWNlIHN0ZDo6dHIxOjpfX2RldGFpbAorfQorfQorCisjZW5kaWYgLy8gX19HTElCQ1hYX1RSMV9CRVRBX0ZVTkNUSU9OX1RDQwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY2NvbXBsZXggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jY29tcGxleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjY1NzZmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY2NvbXBsZXgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIGNjb21wbGV4IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY2NvbXBsZXgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ0NPTVBMRVgKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NDT01QTEVYIDEKKworI2luY2x1ZGUgPHRyMS9jb21wbGV4PgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NDT01QTEVYCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jY3R5cGUgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jY3R5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiYTE1OAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NjdHlwZQpAQCAtMCwwICsxLDQ5IEBACisvLyBUUjEgY2N0eXBlIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY2N0eXBlCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NDVFlQRQorI2RlZmluZSBfR0xJQkNYWF9UUjFfQ0NUWVBFIDEKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Y2N0eXBlPgorCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9DVFlQRV9UUjEKKworI3VuZGVmIGlzYmxhbmsKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CisgIHVzaW5nIDo6aXNibGFuazsKK30KK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ0NUWVBFCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jZmVudiBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NmZW52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNGE4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jZmVudgpAQCAtMCwwICsxLDgxIEBACisvLyBUUjEgY2ZlbnYgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jZmVudgorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DRkVOVgorI2RlZmluZSBfR0xJQkNYWF9UUjFfQ0ZFTlYgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisjaWYgX0dMSUJDWFhfSEFWRV9GRU5WX0gKKyMgaW5jbHVkZSA8ZmVudi5oPgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X0ZFTlZfVFIxCisKKyN1bmRlZiBmZWNsZWFyZXhjZXB0CisjdW5kZWYgZmVnZXRleGNlcHRmbGFnCisjdW5kZWYgZmVyYWlzZWV4Y2VwdAorI3VuZGVmIGZlc2V0ZXhjZXB0ZmxhZworI3VuZGVmIGZldGVzdGV4Y2VwdAorI3VuZGVmIGZlZ2V0cm91bmQKKyN1bmRlZiBmZXNldHJvdW5kCisjdW5kZWYgZmVnZXRlbnYKKyN1bmRlZiBmZWhvbGRleGNlcHQKKyN1bmRlZiBmZXNldGVudgorI3VuZGVmIGZldXBkYXRlZW52CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICAvLyB0eXBlcworICB1c2luZyA6OmZlbnZfdDsKKyAgdXNpbmcgOjpmZXhjZXB0X3Q7CisKKyAgLy8gZnVuY3Rpb25zCisgIHVzaW5nIDo6ZmVjbGVhcmV4Y2VwdDsKKyAgdXNpbmcgOjpmZWdldGV4Y2VwdGZsYWc7CisgIHVzaW5nIDo6ZmVyYWlzZWV4Y2VwdDsKKyAgdXNpbmcgOjpmZXNldGV4Y2VwdGZsYWc7CisgIHVzaW5nIDo6ZmV0ZXN0ZXhjZXB0OworCisgIHVzaW5nIDo6ZmVnZXRyb3VuZDsKKyAgdXNpbmcgOjpmZXNldHJvdW5kOworCisgIHVzaW5nIDo6ZmVnZXRlbnY7CisgIHVzaW5nIDo6ZmVob2xkZXhjZXB0OworICB1c2luZyA6OmZlc2V0ZW52OworICB1c2luZyA6OmZldXBkYXRlZW52OworfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVVNFX0M5OV9GRU5WX1RSMQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NGRU5WCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jZmxvYXQgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jZmxvYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2N2ZhMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NmbG9hdApAQCAtMCwwICsxLDQyIEBACisvLyBUUjEgY2Zsb2F0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY2Zsb2F0CisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NGTE9BVAorI2RlZmluZSBfR0xJQkNYWF9UUjFfQ0ZMT0FUIDEKKworI2luY2x1ZGUgPGNmbG9hdD4KKworI2lmbmRlZiBERUNJTUFMX0RJRworI2RlZmluZSBERUNJTUFMX0RJRyBfX0RFQ0lNQUxfRElHX18KKyNlbmRpZgorCisjaWZuZGVmIEZMVF9FVkFMX01FVEhPRAorI2RlZmluZSBGTFRfRVZBTF9NRVRIT0QgX19GTFRfRVZBTF9NRVRIT0RfXworI2VuZGlmCisKKyNlbmRpZiAvL19HTElCQ1hYX1RSMV9DRkxPQVQgCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jaW50dHlwZXMgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jaW50dHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlNTFlZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NpbnR0eXBlcwpAQCAtMCwwICsxLDg0IEBACisvLyBUUjEgY2ludHR5cGVzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY2ludHR5cGVzCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NJTlRUWVBFUworI2RlZmluZSBfR0xJQkNYWF9UUjFfQ0lOVFRZUEVTIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8dHIxL2NzdGRpbnQ+CisKKy8vIEZvciA4LjExLjEvMSAoc2VlIEM5OSwgTm90ZSAxODQpCisjaWYgX0dMSUJDWFhfSEFWRV9JTlRUWVBFU19ICisjIGlmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworIyAgZGVmaW5lIF9VTkRFRl9fU1REQ19GT1JNQVRfTUFDUk9TCisjICBkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgZW5kaWYKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyMgaWZkZWYgX1VOREVGX19TVERDX0ZPUk1BVF9NQUNST1MKKyMgIHVuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjICB1bmRlZiBfVU5ERUZfX1NURENfRk9STUFUX01BQ1JPUworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfQzk5X0lOVFRZUEVTX1RSMQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgLy8gdHlwZXMKKyAgdXNpbmcgOjppbWF4ZGl2X3Q7CisKKyAgLy8gZnVuY3Rpb25zCisgIHVzaW5nIDo6aW1heGFiczsKKworICAvLyBNYXkgY29sbGlkZSB3aXRoIF9Mb25nbG9uZyBhYnMoX0xvbmdsb25nKSwgYW5kIGlzIG5vdCBkZXNjcmliZWQKKyAgLy8gYW55d2hlcmUgb3V0c2lkZSB0aGUgc3lub3BzaXMuICBMaWtlbHksIGEgZGVmZWN0LgorICAvLworICAvLyBpbnRtYXhfdCBhYnMoaW50bWF4X3QpCisKKyAgdXNpbmcgOjppbWF4ZGl2OworCisgIC8vIExpa2V3aXNlLCB3aXRoIGxsZGl2X3QgZGl2KF9Mb25nbG9uZywgX0xvbmdsb25nKS4KKyAgLy8KKyAgLy8gaW1heGRpdl90IGRpdihpbnRtYXhfdCwgaW50bWF4X3QpCisKKyAgdXNpbmcgOjpzdHJ0b2ltYXg7CisgIHVzaW5nIDo6c3RydG91bWF4OworCisjaWYgZGVmaW5lZChfR0xJQkNYWF9VU0VfV0NIQVJfVCkgJiYgX0dMSUJDWFhfVVNFX0M5OV9JTlRUWVBFU19XQ0hBUl9UX1RSMQorICB1c2luZyA6Ondjc3RvaW1heDsKKyAgdXNpbmcgOjp3Y3N0b3VtYXg7CisjZW5kaWYKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9DOTlfSU5UVFlQRVNfVFIxCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ0lOVFRZUEVTCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jbGltaXRzIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY2xpbWl0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWUwOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY2xpbWl0cwpAQCAtMCwwICsxLDQ2IEBACisvLyBUUjEgY2xpbWl0cyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2NsaW1pdHMKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ0xJTUlUUworI2RlZmluZSBfR0xJQkNYWF9UUjFfQ0xJTUlUUyAxCisKKyNpbmNsdWRlIDxjbGltaXRzPgorCisjaWZuZGVmIExMT05HX01JTgorI2RlZmluZSBMTE9OR19NSU4gKC1fX0xPTkdfTE9OR19NQVhfXyAtIDEpCisjZW5kaWYKKworI2lmbmRlZiBMTE9OR19NQVgKKyNkZWZpbmUgTExPTkdfTUFYIF9fTE9OR19MT05HX01BWF9fCisjZW5kaWYKKworI2lmbmRlZiBVTExPTkdfTUFYCisjZGVmaW5lIFVMTE9OR19NQVggKF9fTE9OR19MT05HX01BWF9fICogMlVMTCArIDEpCisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9DTElNSVRTCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jbWF0aCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NtYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NThhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jbWF0aApAQCAtMCwwICsxLDE0NDAgQEAKKy8vIFRSMSBjbWF0aCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2NtYXRoCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NNQVRICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DTUFUSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGNtYXRoPgorCisjaWZkZWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorCisjdW5kZWYgYWNvc2gKKyN1bmRlZiBhY29zaGYKKyN1bmRlZiBhY29zaGwKKyN1bmRlZiBhc2luaAorI3VuZGVmIGFzaW5oZgorI3VuZGVmIGFzaW5obAorI3VuZGVmIGF0YW5oCisjdW5kZWYgYXRhbmhmCisjdW5kZWYgYXRhbmhsCisjdW5kZWYgY2JydAorI3VuZGVmIGNicnRmCisjdW5kZWYgY2JydGwKKyN1bmRlZiBjb3B5c2lnbgorI3VuZGVmIGNvcHlzaWduZgorI3VuZGVmIGNvcHlzaWdubAorI3VuZGVmIGVyZgorI3VuZGVmIGVyZmYKKyN1bmRlZiBlcmZsCisjdW5kZWYgZXJmYworI3VuZGVmIGVyZmNmCisjdW5kZWYgZXJmY2wKKyN1bmRlZiBleHAyCisjdW5kZWYgZXhwMmYKKyN1bmRlZiBleHAybAorI3VuZGVmIGV4cG0xCisjdW5kZWYgZXhwbTFmCisjdW5kZWYgZXhwbTFsCisjdW5kZWYgZmRpbQorI3VuZGVmIGZkaW1mCisjdW5kZWYgZmRpbWwKKyN1bmRlZiBmbWEKKyN1bmRlZiBmbWFmCisjdW5kZWYgZm1hbAorI3VuZGVmIGZtYXgKKyN1bmRlZiBmbWF4ZgorI3VuZGVmIGZtYXhsCisjdW5kZWYgZm1pbgorI3VuZGVmIGZtaW5mCisjdW5kZWYgZm1pbmwKKyN1bmRlZiBoeXBvdAorI3VuZGVmIGh5cG90ZgorI3VuZGVmIGh5cG90bAorI3VuZGVmIGlsb2diCisjdW5kZWYgaWxvZ2JmCisjdW5kZWYgaWxvZ2JsCisjdW5kZWYgbGdhbW1hCisjdW5kZWYgbGdhbW1hZgorI3VuZGVmIGxnYW1tYWwKKyN1bmRlZiBsbHJpbnQKKyN1bmRlZiBsbHJpbnRmCisjdW5kZWYgbGxyaW50bAorI3VuZGVmIGxscm91bmQKKyN1bmRlZiBsbHJvdW5kZgorI3VuZGVmIGxscm91bmRsCisjdW5kZWYgbG9nMXAKKyN1bmRlZiBsb2cxcGYKKyN1bmRlZiBsb2cxcGwKKyN1bmRlZiBsb2cyCisjdW5kZWYgbG9nMmYKKyN1bmRlZiBsb2cybAorI3VuZGVmIGxvZ2IKKyN1bmRlZiBsb2diZgorI3VuZGVmIGxvZ2JsCisjdW5kZWYgbHJpbnQKKyN1bmRlZiBscmludGYKKyN1bmRlZiBscmludGwKKyN1bmRlZiBscm91bmQKKyN1bmRlZiBscm91bmRmCisjdW5kZWYgbHJvdW5kbAorI3VuZGVmIG5hbgorI3VuZGVmIG5hbmYKKyN1bmRlZiBuYW5sCisjdW5kZWYgbmVhcmJ5aW50CisjdW5kZWYgbmVhcmJ5aW50ZgorI3VuZGVmIG5lYXJieWludGwKKyN1bmRlZiBuZXh0YWZ0ZXIKKyN1bmRlZiBuZXh0YWZ0ZXJmCisjdW5kZWYgbmV4dGFmdGVybAorI3VuZGVmIG5leHR0b3dhcmQKKyN1bmRlZiBuZXh0dG93YXJkZgorI3VuZGVmIG5leHR0b3dhcmRsCisjdW5kZWYgcmVtYWluZGVyCisjdW5kZWYgcmVtYWluZGVyZgorI3VuZGVmIHJlbWFpbmRlcmwKKyN1bmRlZiByZW1xdW8KKyN1bmRlZiByZW1xdW9mCisjdW5kZWYgcmVtcXVvbAorI3VuZGVmIHJpbnQKKyN1bmRlZiByaW50ZgorI3VuZGVmIHJpbnRsCisjdW5kZWYgcm91bmQKKyN1bmRlZiByb3VuZGYKKyN1bmRlZiByb3VuZGwKKyN1bmRlZiBzY2FsYmxuCisjdW5kZWYgc2NhbGJsbmYKKyN1bmRlZiBzY2FsYmxubAorI3VuZGVmIHNjYWxibgorI3VuZGVmIHNjYWxibmYKKyN1bmRlZiBzY2FsYm5sCisjdW5kZWYgdGdhbW1hCisjdW5kZWYgdGdhbW1hZgorI3VuZGVmIHRnYW1tYWwKKyN1bmRlZiB0cnVuYworI3VuZGVmIHRydW5jZgorI3VuZGVmIHRydW5jbAorCisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorCisgIC8vIHR5cGVzCisgIHVzaW5nIDo6ZG91YmxlX3Q7CisgIHVzaW5nIDo6ZmxvYXRfdDsKKworICAvLyBmdW5jdGlvbnMKKyAgdXNpbmcgOjphY29zaDsKKyAgdXNpbmcgOjphY29zaGY7CisgIHVzaW5nIDo6YWNvc2hsOworCisgIHVzaW5nIDo6YXNpbmg7CisgIHVzaW5nIDo6YXNpbmhmOworICB1c2luZyA6OmFzaW5obDsKKworICB1c2luZyA6OmF0YW5oOworICB1c2luZyA6OmF0YW5oZjsKKyAgdXNpbmcgOjphdGFuaGw7CisKKyAgdXNpbmcgOjpjYnJ0OworICB1c2luZyA6OmNicnRmOworICB1c2luZyA6OmNicnRsOworCisgIHVzaW5nIDo6Y29weXNpZ247CisgIHVzaW5nIDo6Y29weXNpZ25mOworICB1c2luZyA6OmNvcHlzaWdubDsKKworICB1c2luZyA6OmVyZjsKKyAgdXNpbmcgOjplcmZmOworICB1c2luZyA6OmVyZmw7CisKKyAgdXNpbmcgOjplcmZjOworICB1c2luZyA6OmVyZmNmOworICB1c2luZyA6OmVyZmNsOworCisgIHVzaW5nIDo6ZXhwMjsKKyAgdXNpbmcgOjpleHAyZjsKKyAgdXNpbmcgOjpleHAybDsKKworICB1c2luZyA6OmV4cG0xOworICB1c2luZyA6OmV4cG0xZjsKKyAgdXNpbmcgOjpleHBtMWw7CisKKyAgdXNpbmcgOjpmZGltOworICB1c2luZyA6OmZkaW1mOworICB1c2luZyA6OmZkaW1sOworCisgIHVzaW5nIDo6Zm1hOworICB1c2luZyA6OmZtYWY7CisgIHVzaW5nIDo6Zm1hbDsKKworICB1c2luZyA6OmZtYXg7CisgIHVzaW5nIDo6Zm1heGY7CisgIHVzaW5nIDo6Zm1heGw7CisKKyAgdXNpbmcgOjpmbWluOworICB1c2luZyA6OmZtaW5mOworICB1c2luZyA6OmZtaW5sOworCisgIHVzaW5nIDo6aHlwb3Q7CisgIHVzaW5nIDo6aHlwb3RmOworICB1c2luZyA6Omh5cG90bDsKKworICB1c2luZyA6Omlsb2diOworICB1c2luZyA6Omlsb2diZjsKKyAgdXNpbmcgOjppbG9nYmw7CisKKyAgdXNpbmcgOjpsZ2FtbWE7CisgIHVzaW5nIDo6bGdhbW1hZjsKKyAgdXNpbmcgOjpsZ2FtbWFsOworCisgIHVzaW5nIDo6bGxyaW50OworICB1c2luZyA6OmxscmludGY7CisgIHVzaW5nIDo6bGxyaW50bDsKKworICB1c2luZyA6Omxscm91bmQ7CisgIHVzaW5nIDo6bGxyb3VuZGY7CisgIHVzaW5nIDo6bGxyb3VuZGw7CisKKyAgdXNpbmcgOjpsb2cxcDsKKyAgdXNpbmcgOjpsb2cxcGY7CisgIHVzaW5nIDo6bG9nMXBsOworCisgIHVzaW5nIDo6bG9nMjsKKyAgdXNpbmcgOjpsb2cyZjsKKyAgdXNpbmcgOjpsb2cybDsKKworICB1c2luZyA6OmxvZ2I7CisgIHVzaW5nIDo6bG9nYmY7CisgIHVzaW5nIDo6bG9nYmw7CisKKyAgdXNpbmcgOjpscmludDsKKyAgdXNpbmcgOjpscmludGY7CisgIHVzaW5nIDo6bHJpbnRsOworCisgIHVzaW5nIDo6bHJvdW5kOworICB1c2luZyA6Omxyb3VuZGY7CisgIHVzaW5nIDo6bHJvdW5kbDsKKworICB1c2luZyA6Om5hbjsKKyAgdXNpbmcgOjpuYW5mOworICB1c2luZyA6Om5hbmw7CisKKyAgdXNpbmcgOjpuZWFyYnlpbnQ7CisgIHVzaW5nIDo6bmVhcmJ5aW50ZjsKKyAgdXNpbmcgOjpuZWFyYnlpbnRsOworCisgIHVzaW5nIDo6bmV4dGFmdGVyOworICB1c2luZyA6Om5leHRhZnRlcmY7CisgIHVzaW5nIDo6bmV4dGFmdGVybDsKKworICB1c2luZyA6Om5leHR0b3dhcmQ7CisgIHVzaW5nIDo6bmV4dHRvd2FyZGY7CisgIHVzaW5nIDo6bmV4dHRvd2FyZGw7CisKKyAgdXNpbmcgOjpyZW1haW5kZXI7CisgIHVzaW5nIDo6cmVtYWluZGVyZjsKKyAgdXNpbmcgOjpyZW1haW5kZXJsOworCisgIHVzaW5nIDo6cmVtcXVvOworICB1c2luZyA6OnJlbXF1b2Y7CisgIHVzaW5nIDo6cmVtcXVvbDsKKworICB1c2luZyA6OnJpbnQ7CisgIHVzaW5nIDo6cmludGY7CisgIHVzaW5nIDo6cmludGw7CisKKyAgdXNpbmcgOjpyb3VuZDsKKyAgdXNpbmcgOjpyb3VuZGY7CisgIHVzaW5nIDo6cm91bmRsOworCisgIHVzaW5nIDo6c2NhbGJsbjsKKyAgdXNpbmcgOjpzY2FsYmxuZjsKKyAgdXNpbmcgOjpzY2FsYmxubDsKKworICB1c2luZyA6OnNjYWxibjsKKyAgdXNpbmcgOjpzY2FsYm5mOworICB1c2luZyA6OnNjYWxibmw7CisKKyAgdXNpbmcgOjp0Z2FtbWE7CisgIHVzaW5nIDo6dGdhbW1hZjsKKyAgdXNpbmcgOjp0Z2FtbWFsOworCisgIHVzaW5nIDo6dHJ1bmM7CisgIHVzaW5nIDo6dHJ1bmNmOworICB1c2luZyA6OnRydW5jbDsKKworI2VuZGlmCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEgKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9GUF9NQUNST1NfRFlOQU1JQworCisgIC8vLyBGdW5jdGlvbiB0ZW1wbGF0ZSBkZWZpbml0aW9ucyBbOC4xNi4zXS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBmcGNsYXNzaWZ5KF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9mcGNsYXNzaWZ5KEZQX05BTiwgRlBfSU5GSU5JVEUsIEZQX05PUk1BTCwKKwkJCQkgIEZQX1NVQk5PUk1BTCwgRlBfWkVSTywgX190eXBlKF9fZikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzZmluaXRlKF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc2Zpbml0ZShfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNpbmYoX1RwIF9fZikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzaW5mKF9fdHlwZShfX2YpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBpc25hbihfVHAgX19mKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXNuYW4oX190eXBlKF9fZikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbm9ybWFsKF9UcCBfX2YpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc25vcm1hbChfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgc2lnbmJpdChfVHAgX19mKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5fc2lnbmJpdChfX3R5cGUoX19mKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlcihfX3R5cGUoX19mMSksIF9fdHlwZShfX2YyKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2FyaXRobWV0aWM8X1RwPjo6X192YWx1ZSwKKwkJCQkJICAgaW50Pjo6X190eXBlCisgICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2J1aWx0aW5faXNncmVhdGVyZXF1YWwoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3MoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzbGVzc2VxdWFsKF9fdHlwZShfX2YxKSwgX190eXBlKF9fZjIpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfX3ZhbHVlLAorCQkJCQkgICBpbnQ+OjpfX3R5cGUKKyAgICBpc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzbGVzc2dyZWF0ZXIoX190eXBlKF9fZjEpLCBfX3R5cGUoX19mMikpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19hcml0aG1ldGljPF9UcD46Ol9fdmFsdWUsCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlzdW5vcmRlcmVkKF9UcCBfX2YxLCBfVHAgX19mMikKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19idWlsdGluX2lzdW5vcmRlcmVkKF9fdHlwZShfX2YxKSwgX190eXBlKF9fZjIpKTsKKyAgICB9CisKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisKKyAgLy8vIEFkZGl0aW9uYWwgb3ZlcmxvYWRzIFs4LjE2LjRdLgorICB1c2luZyBzdGQ6OmFjb3M7CisKKyAgaW5saW5lIGZsb2F0CisgIGFjb3NoKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2Fjb3NoZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGFjb3NoKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2Fjb3NobChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgYWNvc2goX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fYWNvc2goX194KTsgfQorCisgIHVzaW5nIHN0ZDo6YXNpbjsKKworICBpbmxpbmUgZmxvYXQKKyAgYXNpbmgoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fYXNpbmhmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgYXNpbmgobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fYXNpbmhsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBhc2luaChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9hc2luaChfX3gpOyB9CisKKyAgdXNpbmcgc3RkOjphdGFuOworICB1c2luZyBzdGQ6OmF0YW4yOworCisgIGlubGluZSBmbG9hdAorICBhdGFuaChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuaGYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBhdGFuaChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuaGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGF0YW5oKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2F0YW5oKF9feCk7IH0KKworICBpbmxpbmUgZmxvYXQKKyAgY2JydChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYnJ0ZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGNicnQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2JydGwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGNicnQoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fY2JydChfX3gpOyB9CisKKyAgdXNpbmcgc3RkOjpjZWlsOworCisgIGlubGluZSBmbG9hdAorICBjb3B5c2lnbihmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2NvcHlzaWduZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgY29weXNpZ24obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3B5c2lnbmwoX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICBjb3B5c2lnbihfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gY29weXNpZ24oX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgdXNpbmcgc3RkOjpjb3M7CisgIHVzaW5nIHN0ZDo6Y29zaDsgIAorCisgIGlubGluZSBmbG9hdAorICBlcmYoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZXJmZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGVyZihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9lcmZsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBlcmYoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fZXJmKF9feCk7IH0KKworICBpbmxpbmUgZmxvYXQKKyAgZXJmYyhmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9lcmZjZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGVyZmMobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZXJmY2woX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGVyZmMoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fZXJmYyhfX3gpOyB9CisKKyAgdXNpbmcgc3RkOjpleHA7CisKKyAgaW5saW5lIGZsb2F0CisgIGV4cDIoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fZXhwMmYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBleHAyKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2V4cDJsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBleHAyKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2V4cDIoX194KTsgfQorCisgIGlubGluZSBmbG9hdAorICBleHBtMShmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9leHBtMWYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBleHBtMShsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9leHBtMWwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGV4cG0xKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2V4cG0xKF9feCk7IH0KKworICAvLyBOb3RlOiB3ZSBkZWFsIHdpdGggZmFicyBpbiBhIHNwZWNpYWwgd2F5LCBiZWNhdXNlIGFuIHVzaW5nIHN0ZDo6ZmFicworICAvLyB3b3VsZCBicmluZyBpbiBhbHNvIHRoZSBvdmVybG9hZHMgZm9yIGNvbXBsZXggdHlwZXMsIHdoaWNoIGluIEMrKzB4CisgIC8vIG1vZGUgaGF2ZSBhIGRpZmZlcmVudCByZXR1cm4gdHlwZS4KKyAgLy8gV2l0aCBfX0NPUlJFQ1RfSVNPX0NQUF9NQVRIX0hfUFJPVE8sIG1hdGguaCBpbXBvcnRzIHN0ZDo6ZmFicyBpbiB0aGUKKyAgLy8gZ2xvYmFsIG5hbWVzcGFjZSBhZnRlciB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBmbG9hdCAvIGRvdWJsZSAvIGxvbmcKKyAgLy8gZG91YmxlIG92ZXJsb2FkcyBidXQgYmVmb3JlIHRoZSBzdGQ6OmNvbXBsZXggb3ZlcmxvYWRzLgorICB1c2luZyA6OmZhYnM7CisKKyNpZm5kZWYgX19DT1JSRUNUX0lTT19DUFBfTUFUSF9IX1BST1RPCisgIGlubGluZSBmbG9hdAorICBmYWJzKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZmFicyhsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgZmFicyhfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzKF9feCk7IH0KKyNlbmRpZgorCisgIGlubGluZSBmbG9hdAorICBmZGltKGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fZmRpbWYoX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGZkaW0obG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mZGltbChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIGZkaW0oX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGZkaW0oX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgdXNpbmcgc3RkOjpmbG9vcjsKKworICBpbmxpbmUgZmxvYXQKKyAgZm1hKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbWFmKF9feCwgX195LCBfX3opOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGZtYShsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fZm1hbChfX3gsIF9feSwgX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwLCB0eXBlbmFtZSBfVnA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzM8X1RwLCBfVXAsIF9WcD46Ol9fdHlwZQorICAgIGZtYShfVHAgX194LCBfVXAgX195LCBfVnAgX196KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMzxfVHAsIF9VcCwgX1ZwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBmbWEoX190eXBlKF9feCksIF9fdHlwZShfX3kpLCBfX3R5cGUoX196KSk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBmbWF4KGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fZm1heGYoX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGZtYXgobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbWF4bChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIGZtYXgoX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIGZtYXgoX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGZtaW4oZmxvYXQgX194LCBmbG9hdCBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9mbWluZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZm1pbihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2ZtaW5sKF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlCisgICAgZm1pbihfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gZm1pbihfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICB1c2luZyBzdGQ6OmZtb2Q7CisgIHVzaW5nIHN0ZDo6ZnJleHA7CisKKyAgaW5saW5lIGZsb2F0CisgIGh5cG90KGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5faHlwb3RmKF9feCwgX195KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBoeXBvdChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX2h5cG90bChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIGh5cG90KF9UcCBfX3ksIF9VcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBoeXBvdChfX3R5cGUoX195KSwgX190eXBlKF9feCkpOworICAgIH0KKworICBpbmxpbmUgaW50CisgIGlsb2diKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2lsb2diZihfX3gpOyB9CisKKyAgaW5saW5lIGludAorICBpbG9nYihsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9pbG9nYmwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGludD46Ol9fdHlwZQorICAgIGlsb2diKF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2lsb2diKF9feCk7IH0KKworICB1c2luZyBzdGQ6OmxkZXhwOworCisgIGlubGluZSBmbG9hdAorICBsZ2FtbWEoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbGdhbW1hZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGxnYW1tYShsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sZ2FtbWFsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBsZ2FtbWEoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbGdhbW1hKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIGxscmludChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sbHJpbnRmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIGxscmludChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sbHJpbnRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBsb25nIGxvbmc+OjpfX3R5cGUKKyAgICBsbHJpbnQoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbGxyaW50KF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBsb25nCisgIGxscm91bmQoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbGxyb3VuZGYoX194KTsgfQorCisgIGlubGluZSBsb25nIGxvbmcKKyAgbGxyb3VuZChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sbHJvdW5kbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgbG9uZyBsb25nPjo6X190eXBlCisgICAgbGxyb3VuZChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9sbHJvdW5kKF9feCk7IH0KKworICB1c2luZyBzdGQ6OmxvZzsKKyAgdXNpbmcgc3RkOjpsb2cxMDsKKworICBpbmxpbmUgZmxvYXQKKyAgbG9nMXAoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMXBmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbG9nMXAobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMXBsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBsb2cxcChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2cxcChfX3gpOyB9CisKKyAgLy8gRFIgNTY4LgorICBpbmxpbmUgZmxvYXQKKyAgbG9nMihmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2cyZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGxvZzIobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMmwoX194KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjxfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZSwgCisJCQkJCSAgIGRvdWJsZT46Ol9fdHlwZQorICAgIGxvZzIoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMihfX3gpOyB9CisKKyAgaW5saW5lIGZsb2F0CisgIGxvZ2IoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbG9nYmYoX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBsb2diKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xvZ2JsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBsb2diKF9UcCBfX3gpCisgICAgeworICAgICAgcmV0dXJuIF9fYnVpbHRpbl9sb2diKF9feCk7CisgICAgfQorCisgIGlubGluZSBsb25nCisgIGxyaW50KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX2xyaW50ZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcKKyAgbHJpbnQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbHJpbnRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBsb25nPjo6X190eXBlCisgICAgbHJpbnQoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbHJpbnQoX194KTsgfQorCisgIGlubGluZSBsb25nCisgIGxyb3VuZChmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9scm91bmRmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZworICBscm91bmQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbHJvdW5kbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgbG9uZz46Ol9fdHlwZQorICAgIGxyb3VuZChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9scm91bmQoX194KTsgfQorCisgIGlubGluZSBmbG9hdAorICBuZWFyYnlpbnQoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmVhcmJ5aW50ZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIG5lYXJieWludChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9uZWFyYnlpbnRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBuZWFyYnlpbnQoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbmVhcmJ5aW50KF9feCk7IH0KKworICBpbmxpbmUgZmxvYXQKKyAgbmV4dGFmdGVyKGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmV4dGFmdGVyZihfX3gsIF9feSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgbmV4dGFmdGVyKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmV4dGFmdGVybChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIG5leHRhZnRlcihfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gbmV4dGFmdGVyKF9fdHlwZShfX3gpLCBfX3R5cGUoX195KSk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBuZXh0dG93YXJkKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2J1aWx0aW5fbmV4dHRvd2FyZGYoX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIG5leHR0b3dhcmQobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9uZXh0dG93YXJkbChfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBuZXh0dG93YXJkKF9UcCBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fbmV4dHRvd2FyZChfX3gsIF9feSk7IH0KKworICAvLyBEUiA1NTAuIFdoYXQgc2hvdWxkIHRoZSByZXR1cm4gdHlwZSBvZiBwb3coZmxvYXQsaW50KSBiZT8KKyAgLy8gTkI6IEMrKzB4IGFuZCBUUjEgIT0gQysrMDMuCisgIC8vICAgdXNpbmcgc3RkOjpwb3c7CisKKyAgaW5saW5lIGZsb2F0CisgIHJlbWFpbmRlcihmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX3JlbWFpbmRlcmYoX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHJlbWFpbmRlcihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKKyAgeyByZXR1cm4gX19idWlsdGluX3JlbWFpbmRlcmwoX194LCBfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUKKyAgICByZW1haW5kZXIoX1RwIF9feCwgX1VwIF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIHJlbWFpbmRlcihfX3R5cGUoX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgcmVtcXVvKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQqIF9fcHF1bykKKyAgeyByZXR1cm4gX19idWlsdGluX3JlbXF1b2YoX194LCBfX3ksIF9fcHF1byk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgcmVtcXVvKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQqIF9fcHF1bykKKyAgeyByZXR1cm4gX19idWlsdGluX3JlbXF1b2woX194LCBfX3ksIF9fcHF1byk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIHJlbXF1byhfVHAgX194LCBfVXAgX195LCBpbnQqIF9fcHF1bykKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIHJlbXF1byhfX3R5cGUoX194KSwgX190eXBlKF9feSksIF9fcHF1byk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICByaW50KGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3JpbnRmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgcmludChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9yaW50bChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgcmludChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9yaW50KF9feCk7IH0KKworICBpbmxpbmUgZmxvYXQKKyAgcm91bmQoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fcm91bmRmKF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgcm91bmQobG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fcm91bmRsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICByb3VuZChfVHAgX194KQorICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9yb3VuZChfX3gpOyB9CisKKyAgaW5saW5lIGZsb2F0CisgIHNjYWxibG4oZmxvYXQgX194LCBsb25nIF9fZXgpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zY2FsYmxuZihfX3gsIF9fZXgpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHNjYWxibG4obG9uZyBkb3VibGUgX194LCBsb25nIF9fZXgpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zY2FsYmxubChfX3gsIF9fZXgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgc2NhbGJsbihfVHAgX194LCBsb25nIF9fZXgpCisgICAgeyByZXR1cm4gX19idWlsdGluX3NjYWxibG4oX194LCBfX2V4KTsgfQorIAorICBpbmxpbmUgZmxvYXQKKyAgc2NhbGJuKGZsb2F0IF9feCwgaW50IF9fZXgpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zY2FsYm5mKF9feCwgX19leCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgc2NhbGJuKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXgpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9zY2FsYm5sKF9feCwgX19leCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICBzY2FsYm4oX1RwIF9feCwgaW50IF9fZXgpCisgICAgeyByZXR1cm4gX19idWlsdGluX3NjYWxibihfX3gsIF9fZXgpOyB9CisKKyAgdXNpbmcgc3RkOjpzaW47CisgIHVzaW5nIHN0ZDo6c2luaDsKKyAgdXNpbmcgc3RkOjpzcXJ0OworICB1c2luZyBzdGQ6OnRhbjsKKyAgdXNpbmcgc3RkOjp0YW5oOworCisgIGlubGluZSBmbG9hdAorICB0Z2FtbWEoZmxvYXQgX194KQorICB7IHJldHVybiBfX2J1aWx0aW5fdGdhbW1hZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHRnYW1tYShsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fYnVpbHRpbl90Z2FtbWFsKF9feCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWUsIAorCQkJCQkgICBkb3VibGU+OjpfX3R5cGUKKyAgICB0Z2FtbWEoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fdGdhbW1hKF9feCk7IH0KKyAKKyAgaW5saW5lIGZsb2F0CisgIHRydW5jKGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3RydW5jZihfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHRydW5jKGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19idWlsdGluX3RydW5jbChfX3gpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlLCAKKwkJCQkJICAgZG91YmxlPjo6X190eXBlCisgICAgdHJ1bmMoX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5fdHJ1bmMoX194KTsgfQorCisjZW5kaWYKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gRFIgNTUwLiBXaGF0IHNob3VsZCB0aGUgcmV0dXJuIHR5cGUgb2YgcG93KGZsb2F0LGludCkgYmU/CisgIC8vIE5COiBDKysweCBhbmQgVFIxICE9IEMrKzAzLgorICBpbmxpbmUgZG91YmxlCisgIHBvdyhkb3VibGUgX194LCBkb3VibGUgX195KQorICB7IHJldHVybiBzdGQ6OnBvdyhfX3gsIF9feSk7IH0KKworICBpbmxpbmUgZmxvYXQKKyAgcG93KGZsb2F0IF9feCwgZmxvYXQgX195KQorICB7IHJldHVybiBzdGQ6OnBvdyhfX3gsIF9feSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgcG93KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBzdGQ6OnBvdyhfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZQorICAgIHBvdyhfVHAgX194LCBfVXAgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gc3RkOjpwb3coX190eXBlKF9feCksIF9fdHlwZShfX3kpKTsKKyAgICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8dHIxL3R5cGVfdHJhaXRzPgorCisjaW5jbHVkZSA8dHIxL2dhbW1hLnRjYz4KKyNpbmNsdWRlIDx0cjEvYmVzc2VsX2Z1bmN0aW9uLnRjYz4KKyNpbmNsdWRlIDx0cjEvYmV0YV9mdW5jdGlvbi50Y2M+CisjaW5jbHVkZSA8dHIxL2VsbF9pbnRlZ3JhbC50Y2M+CisjaW5jbHVkZSA8dHIxL2V4cF9pbnRlZ3JhbC50Y2M+CisjaW5jbHVkZSA8dHIxL2h5cGVyZ2VvbWV0cmljLnRjYz4KKyNpbmNsdWRlIDx0cjEvbGVnZW5kcmVfZnVuY3Rpb24udGNjPgorI2luY2x1ZGUgPHRyMS9tb2RpZmllZF9iZXNzZWxfZnVuYy50Y2M+CisjaW5jbHVkZSA8dHIxL3BvbHlfaGVybWl0ZS50Y2M+CisjaW5jbHVkZSA8dHIxL3BvbHlfbGFndWVycmUudGNjPgorI2luY2x1ZGUgPHRyMS9yaWVtYW5uX3pldGEudGNjPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBkZWZncm91cCB0cjFfbWF0aF9zcGVjX2Z1bmMgTWF0aGVtYXRpY2FsIFNwZWNpYWwgRnVuY3Rpb25zCisgICAqIEBpbmdyb3VwIG51bWVyaWNzCisgICAqCisgICAqIEEgY29sbGVjdGlvbiBvZiBhZHZhbmNlZCBtYXRoZW1hdGljYWwgc3BlY2lhbCBmdW5jdGlvbnMuCisgICAqIEB7CisgICAqLworCisgIGlubGluZSBmbG9hdAorICBhc3NvY19sYWd1ZXJyZWYodW5zaWduZWQgaW50IF9fbiwgdW5zaWduZWQgaW50IF9fbSwgZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19hc3NvY19sYWd1ZXJyZTxmbG9hdD4oX19uLCBfX20sIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgYXNzb2NfbGFndWVycmVsKHVuc2lnbmVkIGludCBfX24sIHVuc2lnbmVkIGludCBfX20sIGxvbmcgZG91YmxlIF9feCkKKyAgeworICAgIHJldHVybiBfX2RldGFpbDo6X19hc3NvY19sYWd1ZXJyZTxsb25nIGRvdWJsZT4oX19uLCBfX20sIF9feCk7CisgIH0KKworICAvLy8gIDUuMi4xLjEgIEFzc29jaWF0ZWQgTGFndWVycmUgcG9seW5vbWlhbHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgYXNzb2NfbGFndWVycmUodW5zaWduZWQgaW50IF9fbiwgdW5zaWduZWQgaW50IF9fbSwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fYXNzb2NfbGFndWVycmU8X190eXBlPihfX24sIF9fbSwgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGFzc29jX2xlZ2VuZHJlZih1bnNpZ25lZCBpbnQgX19sLCB1bnNpZ25lZCBpbnQgX19tLCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2Fzc29jX2xlZ2VuZHJlX3A8ZmxvYXQ+KF9fbCwgX19tLCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGFzc29jX2xlZ2VuZHJlbCh1bnNpZ25lZCBpbnQgX19sLCB1bnNpZ25lZCBpbnQgX19tLCBsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2Fzc29jX2xlZ2VuZHJlX3A8bG9uZyBkb3VibGU+KF9fbCwgX19tLCBfX3gpOyB9CisKKyAgLy8vICA1LjIuMS4yICBBc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBhc3NvY19sZWdlbmRyZSh1bnNpZ25lZCBpbnQgX19sLCB1bnNpZ25lZCBpbnQgX19tLCBfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19hc3NvY19sZWdlbmRyZV9wPF9fdHlwZT4oX19sLCBfX20sIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBiZXRhZihmbG9hdCBfX3gsIGZsb2F0IF9feSkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fYmV0YTxmbG9hdD4oX194LCBfX3kpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGJldGFsKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQorICB7IHJldHVybiBfX2RldGFpbDo6X19iZXRhPGxvbmcgZG91YmxlPihfX3gsIF9feSk7IH0KKworICAvLy8gIDUuMi4xLjMgIEJldGEgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHB4LCB0eXBlbmFtZSBfVHB5PgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcHgsIF9UcHk+OjpfX3R5cGUKKyAgICBiZXRhKF9UcHggX194LCBfVHB5IF9feSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RweCwgX1RweT46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fYmV0YTxfX3R5cGU+KF9feCwgX195KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGNvbXBfZWxsaW50XzFmKGZsb2F0IF9faykKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY29tcF9lbGxpbnRfMTxmbG9hdD4oX19rKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBjb21wX2VsbGludF8xbChsb25nIGRvdWJsZSBfX2spCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbXBfZWxsaW50XzE8bG9uZyBkb3VibGU+KF9fayk7IH0KKworICAvLy8gIDUuMi4xLjQgIENvbXBsZXRlIGVsbGlwdGljIGludGVncmFscyBvZiB0aGUgZmlyc3Qga2luZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBjb21wX2VsbGludF8xKF9UcCBfX2spCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbXBfZWxsaW50XzE8X190eXBlPihfX2spOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgY29tcF9lbGxpbnRfMmYoZmxvYXQgX19rKQorICB7IHJldHVybiBfX2RldGFpbDo6X19jb21wX2VsbGludF8yPGZsb2F0PihfX2spOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGNvbXBfZWxsaW50XzJsKGxvbmcgZG91YmxlIF9faykKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY29tcF9lbGxpbnRfMjxsb25nIGRvdWJsZT4oX19rKTsgfQorCisgIC8vLyAgNS4yLjEuNSAgQ29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWxzIG9mIHRoZSBzZWNvbmQga2luZC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBjb21wX2VsbGludF8yKF9UcCBfX2spCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX2NvbXBfZWxsaW50XzI8X190eXBlPihfX2spOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgY29tcF9lbGxpbnRfM2YoZmxvYXQgX19rLCBmbG9hdCBfX251KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jb21wX2VsbGludF8zPGZsb2F0PihfX2ssIF9fbnUpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGNvbXBfZWxsaW50XzNsKGxvbmcgZG91YmxlIF9faywgbG9uZyBkb3VibGUgX19udSkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY29tcF9lbGxpbnRfMzxsb25nIGRvdWJsZT4oX19rLCBfX251KTsgfQorCisgIC8vLyAgNS4yLjEuNiAgQ29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWxzIG9mIHRoZSB0aGlyZCBraW5kLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcG4+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVHBuPjo6X190eXBlCisgICAgY29tcF9lbGxpbnRfMyhfVHAgX19rLCBfVHBuIF9fbnUpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1Rwbj46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fY29tcF9lbGxpbnRfMzxfX3R5cGU+KF9faywgX19udSk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBjb25mX2h5cGVyZ2YoZmxvYXQgX19hLCBmbG9hdCBfX2MsIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY29uZl9oeXBlcmc8ZmxvYXQ+KF9fYSwgX19jLCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGNvbmZfaHlwZXJnbChsb25nIGRvdWJsZSBfX2EsIGxvbmcgZG91YmxlIF9fYywgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jb25mX2h5cGVyZzxsb25nIGRvdWJsZT4oX19hLCBfX2MsIF9feCk7IH0KKworICAvLy8gIDUuMi4xLjcgIENvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcGEsIHR5cGVuYW1lIF9UcGMsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMzxfVHBhLCBfVHBjLCBfVHA+OjpfX3R5cGUKKyAgICBjb25mX2h5cGVyZyhfVHBhIF9fYSwgX1RwYyBfX2MsIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8zPF9UcGEsIF9UcGMsIF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fY29uZl9oeXBlcmc8X190eXBlPihfX2EsIF9fYywgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGN5bF9iZXNzZWxfaWYoZmxvYXQgX19udSwgZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jeWxfYmVzc2VsX2k8ZmxvYXQ+KF9fbnUsIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgY3lsX2Jlc3NlbF9pbChsb25nIGRvdWJsZSBfX251LCBsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2N5bF9iZXNzZWxfaTxsb25nIGRvdWJsZT4oX19udSwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuOCAgUmVndWxhciBtb2RpZmllZCBjeWxpbmRyaWNhbCBCZXNzZWwgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBudSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcG51LCBfVHA+OjpfX3R5cGUKKyAgICBjeWxfYmVzc2VsX2koX1RwbnUgX19udSwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwbnUsIF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fY3lsX2Jlc3NlbF9pPF9fdHlwZT4oX19udSwgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGN5bF9iZXNzZWxfamYoZmxvYXQgX19udSwgZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jeWxfYmVzc2VsX2o8ZmxvYXQ+KF9fbnUsIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgY3lsX2Jlc3NlbF9qbChsb25nIGRvdWJsZSBfX251LCBsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2N5bF9iZXNzZWxfajxsb25nIGRvdWJsZT4oX19udSwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuOSAgQ3lsaW5kcmljYWwgQmVzc2VsIGZ1bmN0aW9ucyAob2YgdGhlIGZpcnN0IGtpbmQpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBudSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcG51LCBfVHA+OjpfX3R5cGUKKyAgICBjeWxfYmVzc2VsX2ooX1RwbnUgX19udSwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwbnUsIF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fY3lsX2Jlc3NlbF9qPF9fdHlwZT4oX19udSwgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGN5bF9iZXNzZWxfa2YoZmxvYXQgX19udSwgZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19jeWxfYmVzc2VsX2s8ZmxvYXQ+KF9fbnUsIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgY3lsX2Jlc3NlbF9rbChsb25nIGRvdWJsZSBfX251LCBsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2N5bF9iZXNzZWxfazxsb25nIGRvdWJsZT4oX19udSwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuMTAgIElycmVndWxhciBtb2RpZmllZCBjeWxpbmRyaWNhbCBCZXNzZWwgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBudSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcG51LCBfVHA+OjpfX3R5cGUKKyAgICBjeWxfYmVzc2VsX2soX1RwbnUgX19udSwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwbnUsIF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fY3lsX2Jlc3NlbF9rPF9fdHlwZT4oX19udSwgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGN5bF9uZXVtYW5uZihmbG9hdCBfX251LCBmbG9hdCBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2N5bF9uZXVtYW5uX248ZmxvYXQ+KF9fbnUsIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgY3lsX25ldW1hbm5sKGxvbmcgZG91YmxlIF9fbnUsIGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fY3lsX25ldW1hbm5fbjxsb25nIGRvdWJsZT4oX19udSwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuMTEgIEN5bGluZHJpY2FsIE5ldW1hbm4gZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBudSwgdHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcG51LCBfVHA+OjpfX3R5cGUKKyAgICBjeWxfbmV1bWFubihfVHBudSBfX251LCBfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHBudSwgX1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19jeWxfbmV1bWFubl9uPF9fdHlwZT4oX19udSwgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGVsbGludF8xZihmbG9hdCBfX2ssIGZsb2F0IF9fcGhpKQorICB7IHJldHVybiBfX2RldGFpbDo6X19lbGxpbnRfMTxmbG9hdD4oX19rLCBfX3BoaSk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZWxsaW50XzFsKGxvbmcgZG91YmxlIF9faywgbG9uZyBkb3VibGUgX19waGkpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VsbGludF8xPGxvbmcgZG91YmxlPihfX2ssIF9fcGhpKTsgfQorCisgIC8vLyAgNS4yLjEuMTIgIEluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWxzIG9mIHRoZSBmaXJzdCBraW5kLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVHBwPjo6X190eXBlCisgICAgZWxsaW50XzEoX1RwIF9faywgX1RwcCBfX3BoaSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVHBwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19lbGxpbnRfMTxfX3R5cGU+KF9faywgX19waGkpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgZWxsaW50XzJmKGZsb2F0IF9faywgZmxvYXQgX19waGkpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VsbGludF8yPGZsb2F0PihfX2ssIF9fcGhpKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBlbGxpbnRfMmwobG9uZyBkb3VibGUgX19rLCBsb25nIGRvdWJsZSBfX3BoaSkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fZWxsaW50XzI8bG9uZyBkb3VibGU+KF9faywgX19waGkpOyB9CisKKyAgLy8vICA1LjIuMS4xMyAgSW5jb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbHMgb2YgdGhlIHNlY29uZCBraW5kLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVHBwPjo6X190eXBlCisgICAgZWxsaW50XzIoX1RwIF9faywgX1RwcCBfX3BoaSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVHBwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19lbGxpbnRfMjxfX3R5cGU+KF9faywgX19waGkpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgZWxsaW50XzNmKGZsb2F0IF9faywgZmxvYXQgX19udSwgZmxvYXQgX19waGkpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VsbGludF8zPGZsb2F0PihfX2ssIF9fbnUsIF9fcGhpKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBlbGxpbnRfM2wobG9uZyBkb3VibGUgX19rLCBsb25nIGRvdWJsZSBfX251LCBsb25nIGRvdWJsZSBfX3BoaSkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fZWxsaW50XzM8bG9uZyBkb3VibGU+KF9faywgX19udSwgX19waGkpOyB9CisKKyAgLy8vICA1LjIuMS4xNCAgSW5jb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbHMgb2YgdGhlIHRoaXJkIGtpbmQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwbiwgdHlwZW5hbWUgX1RwcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMzxfVHAsIF9UcG4sIF9UcHA+OjpfX3R5cGUKKyAgICBlbGxpbnRfMyhfVHAgX19rLCBfVHBuIF9fbnUsIF9UcHAgX19waGkpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8zPF9UcCwgX1RwbiwgX1RwcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fZWxsaW50XzM8X190eXBlPihfX2ssIF9fbnUsIF9fcGhpKTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGV4cGludGYoZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19leHBpbnQ8ZmxvYXQ+KF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgZXhwaW50bChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2V4cGludDxsb25nIGRvdWJsZT4oX194KTsgfQorCisgIC8vLyAgNS4yLjEuMTUgIEV4cG9uZW50aWFsIGludGVncmFscy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBleHBpbnQoX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fZXhwaW50PF9fdHlwZT4oX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIGhlcm1pdGVmKHVuc2lnbmVkIGludCBfX24sIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fcG9seV9oZXJtaXRlPGZsb2F0PihfX24sIF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgaGVybWl0ZWwodW5zaWduZWQgaW50IF9fbiwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19wb2x5X2hlcm1pdGU8bG9uZyBkb3VibGU+KF9fbiwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuMTYgIEhlcm1pdGUgcG9seW5vbWlhbHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgaGVybWl0ZSh1bnNpZ25lZCBpbnQgX19uLCBfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19wb2x5X2hlcm1pdGU8X190eXBlPihfX24sIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBoeXBlcmdmKGZsb2F0IF9fYSwgZmxvYXQgX19iLCBmbG9hdCBfX2MsIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9faHlwZXJnPGZsb2F0PihfX2EsIF9fYiwgX19jLCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIGh5cGVyZ2wobG9uZyBkb3VibGUgX19hLCBsb25nIGRvdWJsZSBfX2IsIGxvbmcgZG91YmxlIF9fYywgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19oeXBlcmc8bG9uZyBkb3VibGU+KF9fYSwgX19iLCBfX2MsIF9feCk7IH0KKworICAvLy8gIDUuMi4xLjE3ICBIeXBlcmdlb21ldHJpYyBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcGEsIHR5cGVuYW1lIF9UcGIsIHR5cGVuYW1lIF9UcGMsIHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfNDxfVHBhLCBfVHBiLCBfVHBjLCBfVHA+OjpfX3R5cGUKKyAgICBoeXBlcmcoX1RwYSBfX2EsIF9UcGIgX19iLCBfVHBjIF9fYywgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzQ8X1RwYSwgX1RwYiwgX1RwYywgX1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19oeXBlcmc8X190eXBlPihfX2EsIF9fYiwgX19jLCBfX3gpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgbGFndWVycmVmKHVuc2lnbmVkIGludCBfX24sIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fbGFndWVycmU8ZmxvYXQ+KF9fbiwgX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBsYWd1ZXJyZWwodW5zaWduZWQgaW50IF9fbiwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19sYWd1ZXJyZTxsb25nIGRvdWJsZT4oX19uLCBfX3gpOyB9CisKKyAgLy8vICA1LjIuMS4xOCAgTGFndWVycmUgcG9seW5vbWlhbHMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgbGFndWVycmUodW5zaWduZWQgaW50IF9fbiwgX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fbGFndWVycmU8X190eXBlPihfX24sIF9feCk7CisgICAgfQorCisgIGlubGluZSBmbG9hdAorICBsZWdlbmRyZWYodW5zaWduZWQgaW50IF9fbiwgZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19wb2x5X2xlZ2VuZHJlX3A8ZmxvYXQ+KF9fbiwgX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBsZWdlbmRyZWwodW5zaWduZWQgaW50IF9fbiwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19wb2x5X2xlZ2VuZHJlX3A8bG9uZyBkb3VibGU+KF9fbiwgX194KTsgfQorCisgIC8vLyAgNS4yLjEuMTkgIExlZ2VuZHJlIHBvbHlub21pYWxzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIGxlZ2VuZHJlKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX3BvbHlfbGVnZW5kcmVfcDxfX3R5cGU+KF9fbiwgX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIHJpZW1hbm5femV0YWYoZmxvYXQgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19yaWVtYW5uX3pldGE8ZmxvYXQ+KF9feCk7IH0KKworICBpbmxpbmUgbG9uZyBkb3VibGUKKyAgcmllbWFubl96ZXRhbChsb25nIGRvdWJsZSBfX3gpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX3JpZW1hbm5femV0YTxsb25nIGRvdWJsZT4oX194KTsgfQorCisgIC8vLyAgNS4yLjEuMjAgIFJpZW1hbm4gemV0YSBmdW5jdGlvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICByaWVtYW5uX3pldGEoX1RwIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fcmllbWFubl96ZXRhPF9fdHlwZT4oX194KTsKKyAgICB9CisKKyAgaW5saW5lIGZsb2F0CisgIHNwaF9iZXNzZWxmKHVuc2lnbmVkIGludCBfX24sIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fc3BoX2Jlc3NlbDxmbG9hdD4oX19uLCBfX3gpOyB9CisKKyAgaW5saW5lIGxvbmcgZG91YmxlCisgIHNwaF9iZXNzZWxsKHVuc2lnbmVkIGludCBfX24sIGxvbmcgZG91YmxlIF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fc3BoX2Jlc3NlbDxsb25nIGRvdWJsZT4oX19uLCBfX3gpOyB9CisKKyAgLy8vICA1LjIuMS4yMSAgU3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgc3BoX2Jlc3NlbCh1bnNpZ25lZCBpbnQgX19uLCBfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19zcGhfYmVzc2VsPF9fdHlwZT4oX19uLCBfX3gpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgc3BoX2xlZ2VuZHJlZih1bnNpZ25lZCBpbnQgX19sLCB1bnNpZ25lZCBpbnQgX19tLCBmbG9hdCBfX3RoZXRhKQorICB7IHJldHVybiBfX2RldGFpbDo6X19zcGhfbGVnZW5kcmU8ZmxvYXQ+KF9fbCwgX19tLCBfX3RoZXRhKTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzcGhfbGVnZW5kcmVsKHVuc2lnbmVkIGludCBfX2wsIHVuc2lnbmVkIGludCBfX20sIGxvbmcgZG91YmxlIF9fdGhldGEpCisgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX3NwaF9sZWdlbmRyZTxsb25nIGRvdWJsZT4oX19sLCBfX20sIF9fdGhldGEpOyB9CisKKyAgLy8vICA1LjIuMS4yMiAgU3BoZXJpY2FsIGFzc29jaWF0ZWQgTGVnZW5kcmUgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIHNwaF9sZWdlbmRyZSh1bnNpZ25lZCBpbnQgX19sLCB1bnNpZ25lZCBpbnQgX19tLCBfVHAgX190aGV0YSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fc3BoX2xlZ2VuZHJlPF9fdHlwZT4oX19sLCBfX20sIF9fdGhldGEpOworICAgIH0KKworICBpbmxpbmUgZmxvYXQKKyAgc3BoX25ldW1hbm5mKHVuc2lnbmVkIGludCBfX24sIGZsb2F0IF9feCkKKyAgeyByZXR1cm4gX19kZXRhaWw6Ol9fc3BoX25ldW1hbm48ZmxvYXQ+KF9fbiwgX194KTsgfQorCisgIGlubGluZSBsb25nIGRvdWJsZQorICBzcGhfbmV1bWFubmwodW5zaWduZWQgaW50IF9fbiwgbG9uZyBkb3VibGUgX194KQorICB7IHJldHVybiBfX2RldGFpbDo6X19zcGhfbmV1bWFubjxsb25nIGRvdWJsZT4oX19uLCBfX3gpOyB9CisKKyAgLy8vICA1LjIuMS4yMyAgU3BoZXJpY2FsIE5ldW1hbm4gZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIHNwaF9uZXVtYW5uKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fZGV0YWlsOjpfX3NwaF9uZXVtYW5uPF9fdHlwZT4oX19uLCBfX3gpOworICAgIH0KKworICAvKiBAfSAqLyAvLyB0cjFfbWF0aF9zcGVjX2Z1bmMKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NNQVRICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jb21wbGV4IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY29tcGxleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzg3OGNjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY29tcGxleApAQCAtMCwwICsxLDQxOCBAQAorLy8gVFIxIGNvbXBsZXggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jb21wbGV4CisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NPTVBMRVgKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NPTVBMRVggMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjb21wbGV4PgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIGNvbXBsZXhfbnVtYmVycworICAgKiBAeworICAgKi8KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdXNpbmcgc3RkOjphY29zOworICB1c2luZyBzdGQ6OmFzaW47CisgIHVzaW5nIHN0ZDo6YXRhbjsKKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RkOjpjb21wbGV4PF9UcD4gYWNvcyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYpOworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0ZDo6Y29tcGxleDxfVHA+IGFzaW4oY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mKTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGQ6OmNvbXBsZXg8X1RwPiBhdGFuKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+Jik7CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0ZDo6Y29tcGxleDxfVHA+IGFjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+Jik7CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RkOjpjb21wbGV4PF9UcD4gYXNpbmgoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mKTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGQ6OmNvbXBsZXg8X1RwPiBhdGFuaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYpOworCisgIC8vIFRoZSBzdGQ6OmZhYnMgcmV0dXJuIHR5cGUgaW4gQysrMHggbW9kZSBpcyBkaWZmZXJlbnQgKGp1c3QgX1RwKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGQ6OmNvbXBsZXg8X1RwPiBmYWJzKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+Jik7CisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hY29zKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4gX190ID0gc3RkOjp0cjE6OmFzaW4oX196KTsKKyAgICAgIGNvbnN0IF9UcCBfX3BpXzIgPSAxLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTRMOworICAgICAgcmV0dXJuIHN0ZDo6Y29tcGxleDxfVHA+KF9fcGlfMiAtIF9fdC5yZWFsKCksIC1fX3QuaW1hZygpKTsKKyAgICB9CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X0NPTVBMRVhfVFIxCisgIGlubGluZSBfX2NvbXBsZXhfXyBmbG9hdAorICBfX2NvbXBsZXhfYWNvcyhfX2NvbXBsZXhfXyBmbG9hdCBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYWNvc2YoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X2Fjb3MoX19jb21wbGV4X18gZG91YmxlIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhY29zKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X2Fjb3MoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhY29zbChfX3opOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFjb3MoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfYWNvcyhfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIC8vLyBhY29zKF9feikgWzguMS4yXS4KKyAgLy8gIEVmZmVjdHM6ICBCZWhhdmVzIHRoZSBzYW1lIGFzIEM5OSBmdW5jdGlvbiBjYWNvcywgZGVmaW5lZAorICAvLyAgICAgICAgICAgIGluIHN1YmNsYXVzZSA3LjMuNS4xLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgYWNvcyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hY29zKF9feik7IH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfYXNpbihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsKKyAgICAgIHN0ZDo6Y29tcGxleDxfVHA+IF9fdCgtX196LmltYWcoKSwgX196LnJlYWwoKSk7CisgICAgICBfX3QgPSBzdGQ6OnRyMTo6YXNpbmgoX190KTsKKyAgICAgIHJldHVybiBzdGQ6OmNvbXBsZXg8X1RwPihfX3QuaW1hZygpLCAtX190LnJlYWwoKSk7CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMQorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2FzaW4oX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2FzaW5mKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9hc2luKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXNpbihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hc2luKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXNpbmwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhc2luKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2FzaW4oX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICAvLy8gYXNpbihfX3opIFs4LjEuM10uCisgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2FzaW4sIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjUuMi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGFzaW4oY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfYXNpbihfX3opOyB9CisjZW5kaWYKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIF9fY29tcGxleF9hdGFuKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9fcjIgPSBfX3oucmVhbCgpICogX196LnJlYWwoKTsKKyAgICAgIGNvbnN0IF9UcCBfX3ggPSBfVHAoMS4wKSAtIF9fcjIgLSBfX3ouaW1hZygpICogX196LmltYWcoKTsKKworICAgICAgX1RwIF9fbnVtID0gX196LmltYWcoKSArIF9UcCgxLjApOworICAgICAgX1RwIF9fZGVuID0gX196LmltYWcoKSAtIF9UcCgxLjApOworCisgICAgICBfX251bSA9IF9fcjIgKyBfX251bSAqIF9fbnVtOworICAgICAgX19kZW4gPSBfX3IyICsgX19kZW4gKiBfX2RlbjsKKworICAgICAgcmV0dXJuIHN0ZDo6Y29tcGxleDxfVHA+KF9UcCgwLjUpICogYXRhbjIoX1RwKDIuMCkgKiBfX3oucmVhbCgpLCBfX3gpLAorCQkJICAgICAgIF9UcCgwLjI1KSAqIGxvZyhfX251bSAvIF9fZGVuKSk7CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMQorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2F0YW4oX19jb21wbGV4X18gZmxvYXQgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2F0YW5mKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9hdGFuKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXRhbihfX3opOyB9CisKKyAgaW5saW5lIF9fY29tcGxleF9fIGxvbmcgZG91YmxlCisgIF9fY29tcGxleF9hdGFuKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXRhbmwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhdGFuKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeyByZXR1cm4gX19jb21wbGV4X2F0YW4oX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICAvLy8gYXRhbihfX3opIFs4LjEuNF0uCisgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2F0YW4sIGRlZmluZWQKKyAgLy8gICAgICAgICAgICBpbiBzdWJjbGF1c2UgNy4zLjUuMy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGF0YW4oY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfYXRhbihfX3opOyB9CisjZW5kaWYKKworI2VuZGlmIC8vIEMrKzExCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgX19jb21wbGV4X2Fjb3NoKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3opCisgICAgeworICAgICAgLy8gS2FoYW4ncyBmb3JtdWxhLgorICAgICAgcmV0dXJuIF9UcCgyLjApICogc3RkOjpsb2coc3RkOjpzcXJ0KF9UcCgwLjUpICogKF9feiArIF9UcCgxLjApKSkKKwkJCQkgKyBzdGQ6OnNxcnQoX1RwKDAuNSkgKiAoX196IC0gX1RwKDEuMCkpKSk7CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMQorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2Fjb3NoKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhY29zaGYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X2Fjb3NoKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYWNvc2goX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfYWNvc2goY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhY29zaGwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhY29zaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hY29zaChfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIC8vLyBhY29zaChfX3opIFs4LjEuNV0uCisgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2Fjb3NoLCBkZWZpbmVkCisgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy42LjEuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhY29zaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hY29zaChfX3opOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfYXNpbmgoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7CisgICAgICBzdGQ6OmNvbXBsZXg8X1RwPiBfX3QoKF9fei5yZWFsKCkgLSBfX3ouaW1hZygpKQorCQkJICAgICogKF9fei5yZWFsKCkgKyBfX3ouaW1hZygpKSArIF9UcCgxLjApLAorCQkJICAgIF9UcCgyLjApICogX196LnJlYWwoKSAqIF9fei5pbWFnKCkpOworICAgICAgX190ID0gc3RkOjpzcXJ0KF9fdCk7CisKKyAgICAgIHJldHVybiBzdGQ6OmxvZyhfX3QgKyBfX3opOworICAgIH0KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfQ09NUExFWF9UUjEKKyAgaW5saW5lIF9fY29tcGxleF9fIGZsb2F0CisgIF9fY29tcGxleF9hc2luaChfX2NvbXBsZXhfXyBmbG9hdCBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXNpbmhmKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gZG91YmxlCisgIF9fY29tcGxleF9hc2luaChfX2NvbXBsZXhfXyBkb3VibGUgX196KQorICB7IHJldHVybiBfX2J1aWx0aW5fY2FzaW5oKF9feik7IH0KKworICBpbmxpbmUgX19jb21wbGV4X18gbG9uZyBkb3VibGUKKyAgX19jb21wbGV4X2FzaW5oKGNvbnN0IF9fY29tcGxleF9fIGxvbmcgZG91YmxlJiBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXNpbmhsKF9feik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgYXNpbmgoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBfX2NvbXBsZXhfYXNpbmgoX196Ll9fcmVwKCkpOyB9CisjZWxzZQorICAvLy8gYXNpbmgoX196KSBbOC4xLjZdLgorICAvLyAgRWZmZWN0czogIEJlaGF2ZXMgdGhlIHNhbWUgYXMgQzk5IGZ1bmN0aW9uIGNhc2luLCBkZWZpbmVkCisgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy42LjIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhc2luaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hc2luaChfX3opOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBfX2NvbXBsZXhfYXRhbmgoY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19pMiA9IF9fei5pbWFnKCkgKiBfX3ouaW1hZygpOworICAgICAgY29uc3QgX1RwIF9feCA9IF9UcCgxLjApIC0gX19pMiAtIF9fei5yZWFsKCkgKiBfX3oucmVhbCgpOworCisgICAgICBfVHAgX19udW0gPSBfVHAoMS4wKSArIF9fei5yZWFsKCk7CisgICAgICBfVHAgX19kZW4gPSBfVHAoMS4wKSAtIF9fei5yZWFsKCk7CisKKyAgICAgIF9fbnVtID0gX19pMiArIF9fbnVtICogX19udW07CisgICAgICBfX2RlbiA9IF9faTIgKyBfX2RlbiAqIF9fZGVuOworCisgICAgICByZXR1cm4gc3RkOjpjb21wbGV4PF9UcD4oX1RwKDAuMjUpICogKGxvZyhfX251bSkgLSBsb2coX19kZW4pKSwKKwkJCSAgICAgICBfVHAoMC41KSAqIGF0YW4yKF9UcCgyLjApICogX196LmltYWcoKSwgX194KSk7CisgICAgfQorCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9DT01QTEVYX1RSMQorICBpbmxpbmUgX19jb21wbGV4X18gZmxvYXQKKyAgX19jb21wbGV4X2F0YW5oKF9fY29tcGxleF9fIGZsb2F0IF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhdGFuaGYoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBkb3VibGUKKyAgX19jb21wbGV4X2F0YW5oKF9fY29tcGxleF9fIGRvdWJsZSBfX3opCisgIHsgcmV0dXJuIF9fYnVpbHRpbl9jYXRhbmgoX196KTsgfQorCisgIGlubGluZSBfX2NvbXBsZXhfXyBsb25nIGRvdWJsZQorICBfX2NvbXBsZXhfYXRhbmgoY29uc3QgX19jb21wbGV4X18gbG9uZyBkb3VibGUmIF9feikKKyAgeyByZXR1cm4gX19idWlsdGluX2NhdGFuaGwoX196KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhdGFuaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hdGFuaChfX3ouX19yZXAoKSk7IH0KKyNlbHNlCisgIC8vLyBhdGFuaChfX3opIFs4LjEuN10uCisgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2F0YW5oLCBkZWZpbmVkCisgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy42LjMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBhdGFuaChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIF9fY29tcGxleF9hdGFuaChfX3opOyB9CisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgLy8vIGZhYnMoX196KSBbOC4xLjhdLgorICAgIC8vICBFZmZlY3RzOiAgQmVoYXZlcyB0aGUgc2FtZSBhcyBDOTkgZnVuY3Rpb24gY2FicywgZGVmaW5lZAorICAgIC8vICAgICAgICAgICAgaW4gc3ViY2xhdXNlIDcuMy44LjEuCisgICAgZmFicyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX196KQorICAgIHsgcmV0dXJuIHN0ZDo6YWJzKF9feik7IH0KKworICAvLy8gQWRkaXRpb25hbCBvdmVybG9hZHMgWzguMS45XS4KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIGFyZyhfVHAgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlIF9fdHlwZTsKKyNpZiAoX0dMSUJDWFhfVVNFX0M5OV9NQVRIICYmICFfR0xJQkNYWF9VU0VfQzk5X0ZQX01BQ1JPU19EWU5BTUlDKQorICAgICAgcmV0dXJuIHN0ZDo6c2lnbmJpdChfX3gpID8gX190eXBlKDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyOUwpCisJICAgICAgICAgICAgICAgICAgICAgICA6IF9fdHlwZSgpOworI2Vsc2UKKyAgICAgIHJldHVybiBzdGQ6OmFyZyhzdGQ6OmNvbXBsZXg8X190eXBlPihfX3gpKTsKKyNlbmRpZgorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIGltYWcoX1RwKQorICAgIHsgcmV0dXJuIF9UcCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUKKyAgICBub3JtKF9UcCBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUgX190eXBlOworICAgICAgcmV0dXJuIF9fdHlwZShfX3gpICogX190eXBlKF9feCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlCisgICAgcmVhbChfVHAgX194KQorICAgIHsgcmV0dXJuIF9feDsgfQorCisjZW5kaWYKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGU+CisgICAgcG93KGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IF9VcCYgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gc3RkOjpwb3coc3RkOjpjb21wbGV4PF9fdHlwZT4oX194KSwgX190eXBlKF9feSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGU+CisgICAgcG93KGNvbnN0IF9UcCYgX194LCBjb25zdCBzdGQ6OmNvbXBsZXg8X1VwPiYgX195KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gc3RkOjpwb3coX190eXBlKF9feCksIHN0ZDo6Y29tcGxleDxfX3R5cGU+KF9feSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGU+CisgICAgcG93KGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IHN0ZDo6Y29tcGxleDxfVXA+JiBfX3kpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZV8yPF9UcCwgX1VwPjo6X190eXBlIF9fdHlwZTsKKyAgICAgIHJldHVybiBzdGQ6OnBvdyhzdGQ6OmNvbXBsZXg8X190eXBlPihfX3gpLAorCQkgICAgICBzdGQ6OmNvbXBsZXg8X190eXBlPihfX3kpKTsKKyAgICB9CisKKyAgdXNpbmcgc3RkOjphcmc7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIGNvbmooY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feikKKyAgICB7IHJldHVybiBzdGQ6OmNvbmooX196KTsgfSAgCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8dHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190eXBlPgorICAgIGNvbmooX1RwIF9feCkKKyAgICB7IHJldHVybiBfX3g7IH0KKworICB1c2luZyBzdGQ6OmltYWc7CisgIHVzaW5nIHN0ZDo6bm9ybTsKKyAgdXNpbmcgc3RkOjpwb2xhcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlXzI8X1RwLCBfVXA+OjpfX3R5cGU+CisgICAgcG9sYXIoY29uc3QgX1RwJiBfX3JobywgY29uc3QgX1VwJiBfX3RoZXRhKQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGVfMjxfVHAsIF9VcD46Ol9fdHlwZSBfX3R5cGU7CisgICAgICByZXR1cm4gc3RkOjpwb2xhcihfX3R5cGUoX19yaG8pLCBfX3R5cGUoX190aGV0YSkpOworICAgIH0KKworICB1c2luZyBzdGQ6OnJlYWw7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBzdGQ6OmNvbXBsZXg8X1RwPgorICAgIHBvdyhjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKKyAgICB7IHJldHVybiBzdGQ6OnBvdyhfX3gsIF9feSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgcG93KGNvbnN0IF9UcCYgX194LCBjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgX195KQorICAgIHsgcmV0dXJuIHN0ZDo6cG93KF9feCwgX195KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc3RkOjpjb21wbGV4PF9UcD4KKyAgICBwb3coY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feCwgY29uc3Qgc3RkOjpjb21wbGV4PF9UcD4mIF9feSkKKyAgICB7IHJldHVybiBzdGQ6OnBvdyhfX3gsIF9feSk7IH0KKworLy8gQH0gZ3JvdXAgY29tcGxleF9udW1iZXJzCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NPTVBMRVgKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NvbXBsZXguaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NvbXBsZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2I3ODlmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY29tcGxleC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBjb21wbGV4LmggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jb21wbGV4LmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ09NUExFWF9ICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DT01QTEVYX0ggMQorCisjaW5jbHVkZSA8dHIxL2Njb21wbGV4PgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NPTVBMRVhfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY3N0ZGFyZyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRhcmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM1Nzc3MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRhcmcKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIGNzdGRhcmcgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jc3RkYXJnCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NTVERBUkcKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NTVERBUkcgMQorCisjaW5jbHVkZSA8Y3N0ZGFyZz4KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9DU1REQVJHCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jc3RkYm9vbCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRib29sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZjllZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jc3RkYm9vbApAQCAtMCwwICsxLDQwIEBACisvLyBUUjEgY3N0ZGJvb2wgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jc3RkYm9vbAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DU1REQk9PTAorI2RlZmluZSBfR0xJQkNYWF9UUjFfQ1NUREJPT0wgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCisjaWYgX0dMSUJDWFhfSEFWRV9TVERCT09MX0gKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYKKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9DU1REQk9PTApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY3N0ZGludCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRpbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzYTcwOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRpbnQKQEAgLTAsMCArMSwxMDQgQEAKKy8vIFRSMSBjc3RkaW50IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY3N0ZGludAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DU1RESU5UCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DU1RESU5UIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworLy8gRm9yIDguMjIuMS8xIChzZWUgQzk5LCBOb3RlcyAyMTksIDIyMCwgMjIyKQorIyBpZiBfR0xJQkNYWF9IQVZFX1NURElOVF9ICisjICBpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworIyAgIGRlZmluZSBfVU5ERUZfX1NURENfTElNSVRfTUFDUk9TCisjICAgZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MKKyMgIGVuZGlmCisjICBpZm5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyAgIGRlZmluZSBfVU5ERUZfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjICAgZGVmaW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgIGVuZGlmCisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgIGlmZGVmIF9VTkRFRl9fU1REQ19MSU1JVF9NQUNST1MKKyMgICB1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjICAgdW5kZWYgX1VOREVGX19TVERDX0xJTUlUX01BQ1JPUworIyAgZW5kaWYKKyMgIGlmZGVmIF9VTkRFRl9fU1REQ19DT05TVEFOVF9NQUNST1MKKyMgICB1bmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjICAgdW5kZWYgX1VOREVGX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyAgZW5kaWYKKyMgZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU5UX1RSMQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgdXNpbmcgOjppbnQ4X3Q7CisgIHVzaW5nIDo6aW50MTZfdDsKKyAgdXNpbmcgOjppbnQzMl90OworICB1c2luZyA6OmludDY0X3Q7CisKKyAgdXNpbmcgOjppbnRfZmFzdDhfdDsKKyAgdXNpbmcgOjppbnRfZmFzdDE2X3Q7CisgIHVzaW5nIDo6aW50X2Zhc3QzMl90OworICB1c2luZyA6OmludF9mYXN0NjRfdDsKKworICB1c2luZyA6OmludF9sZWFzdDhfdDsKKyAgdXNpbmcgOjppbnRfbGVhc3QxNl90OworICB1c2luZyA6OmludF9sZWFzdDMyX3Q7CisgIHVzaW5nIDo6aW50X2xlYXN0NjRfdDsKKworICB1c2luZyA6OmludG1heF90OworICB1c2luZyA6OmludHB0cl90OworICAKKyAgdXNpbmcgOjp1aW50OF90OworICB1c2luZyA6OnVpbnQxNl90OworICB1c2luZyA6OnVpbnQzMl90OworICB1c2luZyA6OnVpbnQ2NF90OworCisgIHVzaW5nIDo6dWludF9mYXN0OF90OworICB1c2luZyA6OnVpbnRfZmFzdDE2X3Q7CisgIHVzaW5nIDo6dWludF9mYXN0MzJfdDsKKyAgdXNpbmcgOjp1aW50X2Zhc3Q2NF90OworCisgIHVzaW5nIDo6dWludF9sZWFzdDhfdDsKKyAgdXNpbmcgOjp1aW50X2xlYXN0MTZfdDsKKyAgdXNpbmcgOjp1aW50X2xlYXN0MzJfdDsKKyAgdXNpbmcgOjp1aW50X2xlYXN0NjRfdDsKKworICB1c2luZyA6OnVpbnRtYXhfdDsKKyAgdXNpbmcgOjp1aW50cHRyX3Q7Cit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VU0VfQzk5X1NURElOVF9UUjEKKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9DU1RESU5UCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRpbyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWJhNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY3N0ZGlvCkBAIC0wLDAgKzEsNTMgQEAKKy8vIFRSMSBjc3RkaW8gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jc3RkaW8KKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfQ1NURElPCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DU1RESU8gMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjc3RkaW8+CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICB1c2luZyBzdGQ6OnNucHJpbnRmOworICB1c2luZyBzdGQ6OnZzbnByaW50ZjsKKworICB1c2luZyBzdGQ6OnZmc2NhbmY7CisgIHVzaW5nIHN0ZDo6dnNjYW5mOworICB1c2luZyBzdGQ6OnZzc2NhbmY7Cit9Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NTVERJTwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY3N0ZGxpYiBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRsaWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1ZTdiMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2NzdGRsaWIKQEAgLTAsMCArMSw3MiBAQAorLy8gVFIxIGNzdGRsaWIgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jc3RkbGliCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NTVERMSUIKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NTVERMSUIgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjc3RkbGliPgorCisjaWYgX0dMSUJDWFhfSE9TVEVECisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworI2lmICFfR0xJQkNYWF9VU0VfQzk5X0xPTkdfTE9OR19EWU5BTUlDCisgIC8vIHR5cGVzCisgIHVzaW5nIHN0ZDo6bGxkaXZfdDsKKworICAvLyBmdW5jdGlvbnMKKyAgdXNpbmcgc3RkOjpsbGFiczsKKyAgdXNpbmcgc3RkOjpsbGRpdjsKKyNlbmRpZgorCisgIHVzaW5nIHN0ZDo6YXRvbGw7CisgIHVzaW5nIHN0ZDo6c3RydG9sbDsKKyAgdXNpbmcgc3RkOjpzdHJ0b3VsbDsKKworICB1c2luZyBzdGQ6OnN0cnRvZjsKKyAgdXNpbmcgc3RkOjpzdHJ0b2xkOworCisgIC8vIG92ZXJsb2FkcworICB1c2luZyBzdGQ6OmFiczsKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfRFlOQU1JQworICB1c2luZyBzdGQ6OmRpdjsKKyNlbmRpZgorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVVNFX0M5OSAKKworI2VuZGlmIC8vIF9HTElCQ1hYX0hPU1RFRAorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NTVERMSUIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2N0Z21hdGggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jdGdtYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYjk2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jdGdtYXRoCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBjdGdtYXRoIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY3RnbWF0aAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DVEdNQVRICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9DVEdNQVRIIDEKKworI2luY2x1ZGUgPHRyMS9jbWF0aD4KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9DVEdNQVRICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jdGltZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2N0aW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyN2Q0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jdGltZQpAQCAtMCwwICsxLDM0IEBACisvLyBUUjEgY3RpbWUgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jdGltZQorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9DVElNRQorI2RlZmluZSBfR0xJQkNYWF9UUjFfQ1RJTUUgMQorCisjaW5jbHVkZSA8Y3RpbWU+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ1RJTUUKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2N0eXBlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzU4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jdHlwZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBjdHlwZS5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY3R5cGUuaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9UUjFfQ1RZUEVfSAorI2RlZmluZSBfVFIxX0NUWVBFX0ggMQorCisjaW5jbHVkZSA8dHIxL2NjdHlwZT4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jd2NoYXIgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9jd2NoYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliMWY4YQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2N3Y2hhcgpAQCAtMCwwICsxLDY1IEBACisvLyBUUjEgY3djaGFyIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvY3djaGFyCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NXQ0hBUgorI2RlZmluZSBfR0xJQkNYWF9UUjFfQ1dDSEFSIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Y3djaGFyPgorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CisjaWYgX0dMSUJDWFhfSEFWRV9XQ1NUT0YKKyAgdXNpbmcgc3RkOjp3Y3N0b2Y7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZGV1NDQU5GCisgIHVzaW5nIHN0ZDo6dmZ3c2NhbmY7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZTV1NDQU5GCisgIHVzaW5nIHN0ZDo6dnN3c2NhbmY7CisjZW5kaWYKKyNpZiBfR0xJQkNYWF9IQVZFX1ZXU0NBTkYKKyAgdXNpbmcgc3RkOjp2d3NjYW5mOworI2VuZGlmCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5CisgIHVzaW5nIHN0ZDo6d2NzdG9sZDsKKyAgdXNpbmcgc3RkOjp3Y3N0b2xsOworICB1c2luZyBzdGQ6Ondjc3RvdWxsOworI2VuZGlmCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VU0VfV0NIQVJfVAorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0NXQ0hBUgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvY3djdHlwZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2N3Y3R5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2NmJiMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2N3Y3R5cGUKQEAgLTAsMCArMSw1MCBAQAorLy8gVFIxIGN3Y3R5cGUgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9jd2N0eXBlCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0NXQ1RZUEUKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0NXQ1RZUEUgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxjd2N0eXBlPgorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CisjaWYgX0dMSUJDWFhfSEFWRV9JU1dCTEFOSworICB1c2luZyBzdGQ6Omlzd2JsYW5rOworI2VuZGlmICAKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfQ1dDVFlQRQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvZWxsX2ludGVncmFsLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2VsbF9pbnRlZ3JhbC50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzMDc2YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2VsbF9pbnRlZ3JhbC50Y2MKQEAgLTAsMCArMSw3NTAgQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2VsbF9pbnRlZ3JhbC50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt0cjEvY21hdGh9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kIGJhc2VkIG9uOgorLy8gICAoMSkgIEIuIEMuIENhcmxzb24gTnVtZXIuIE1hdGguIDMzLCAxICgxOTc5KQorLy8gICAoMikgIEIuIEMuIENhcmxzb24sIFNwZWNpYWwgRnVuY3Rpb25zIG9mIEFwcGxpZWQgTWF0aGVtYXRpY3MgKDE5NzcpCisvLyAgICgzKSAgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKy8vICAgKDQpICBOdW1lcmljYWwgUmVjaXBlcyBpbiBDLCAybmQgZWQsIGJ5IFcuIEguIFByZXNzLCBTLiBBLiBUZXVrb2xza3ksCisvLyAgICAgICAgVy4gVC4gVmV0dGVybGluZywgQi4gUC4gRmxhbm5lcnksIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzCisvLyAgICAgICAgKDE5OTIpLCBwcC4gMjYxLTI2OQorCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9FTExfSU5URUdSQUxfVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9FTExfSU5URUdSQUxfVENDIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CisgIC8vIFs1LjJdIFNwZWNpYWwgZnVuY3Rpb25zCisKKyAgLy8gSW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKyAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBAZiQgUl9GKHgseSx6KSBAZiQKKyAgICAgKiAgICAgICAgICBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBDYXJsc29uIGVsbGlwdGljIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBSX0YoeCx5LHopID0gXGZyYWN7MX17Mn0gXGludF8wXlxpbmZ0eQorICAgICAqICAgICAgICAgICAgICAgICBcZnJhY3tkdH17KHQgKyB4KV57MS8yfSh0ICsgeSleezEvMn0odCArIHopXnsxLzJ9fQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgZmlyc3Qgb2YgdGhyZWUgc3ltbWV0cmljIGFyZ3VtZW50cy4KKyAgICAgKiAgIEBwYXJhbSAgX195ICBUaGUgc2Vjb25kIG9mIHRocmVlIHN5bW1ldHJpYyBhcmd1bWVudHMuCisgICAgICogICBAcGFyYW0gIF9feiAgVGhlIHRoaXJkIG9mIHRocmVlIHN5bW1ldHJpYyBhcmd1bWVudHMuCisgICAgICogICBAcmV0dXJuICBUaGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19lbGxpbnRfcmYoX1RwIF9feCwgX1RwIF9feSwgX1RwIF9feikKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19taW4gPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1pbigpOworICAgICAgY29uc3QgX1RwIF9fbWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXgoKTsKKyAgICAgIGNvbnN0IF9UcCBfX2xvbGltID0gX1RwKDUpICogX19taW47CisgICAgICBjb25zdCBfVHAgX191cGxpbSA9IF9fbWF4IC8gX1RwKDUpOworCisgICAgICBpZiAoX194IDwgX1RwKDApIHx8IF9feSA8IF9UcCgwKSB8fCBfX3ogPCBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJBcmd1bWVudCBsZXNzIHRoYW4gemVybyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2VsbGludF9yZi4iKSk7CisgICAgICBlbHNlIGlmIChfX3ggKyBfX3kgPCBfX2xvbGltIHx8IF9feCArIF9feiA8IF9fbG9saW0KKyAgICAgICAgICAgIHx8IF9feSArIF9feiA8IF9fbG9saW0pCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJBcmd1bWVudCB0b28gc21hbGwgaW4gX19lbGxpbnRfcmYiKSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMCA9IF9UcCgxKSAvIF9UcCg0KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMSA9IF9UcCgxKSAvIF9UcCgyNCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzIgPSBfVHAoMSkgLyBfVHAoMTApOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MzID0gX1RwKDMpIC8gX1RwKDQ0KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jNCA9IF9UcCgxKSAvIF9UcCgxNCk7CisKKyAgICAgICAgICBfVHAgX194biA9IF9feDsKKyAgICAgICAgICBfVHAgX195biA9IF9feTsKKyAgICAgICAgICBfVHAgX196biA9IF9fejsKKworICAgICAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2VycnRvbCA9IHN0ZDo6cG93KF9fZXBzLCBfVHAoMSkgLyBfVHAoNikpOworICAgICAgICAgIF9UcCBfX211OworICAgICAgICAgIF9UcCBfX3huZGV2LCBfX3luZGV2LCBfX3puZGV2OworCisgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDA7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pdGVyID0gMDsgX19pdGVyIDwgX19tYXhfaXRlcjsgKytfX2l0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fbXUgPSAoX194biArIF9feW4gKyBfX3puKSAvIF9UcCgzKTsKKyAgICAgICAgICAgICAgX194bmRldiA9IDIgLSAoX19tdSArIF9feG4pIC8gX19tdTsKKyAgICAgICAgICAgICAgX195bmRldiA9IDIgLSAoX19tdSArIF9feW4pIC8gX19tdTsKKyAgICAgICAgICAgICAgX196bmRldiA9IDIgLSAoX19tdSArIF9fem4pIC8gX19tdTsKKyAgICAgICAgICAgICAgX1RwIF9fZXBzaWxvbiA9IHN0ZDo6bWF4KHN0ZDo6YWJzKF9feG5kZXYpLCBzdGQ6OmFicyhfX3luZGV2KSk7CisgICAgICAgICAgICAgIF9fZXBzaWxvbiA9IHN0ZDo6bWF4KF9fZXBzaWxvbiwgc3RkOjphYnMoX196bmRldikpOworICAgICAgICAgICAgICBpZiAoX19lcHNpbG9uIDwgX19lcnJ0b2wpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3hucm9vdCA9IHN0ZDo6c3FydChfX3huKTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9feW5yb290ID0gc3RkOjpzcXJ0KF9feW4pOworICAgICAgICAgICAgICBjb25zdCBfVHAgX196bnJvb3QgPSBzdGQ6OnNxcnQoX196bik7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2xhbWJkYSA9IF9feG5yb290ICogKF9feW5yb290ICsgX196bnJvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9feW5yb290ICogX196bnJvb3Q7CisgICAgICAgICAgICAgIF9feG4gPSBfX2MwICogKF9feG4gKyBfX2xhbWJkYSk7CisgICAgICAgICAgICAgIF9feW4gPSBfX2MwICogKF9feW4gKyBfX2xhbWJkYSk7CisgICAgICAgICAgICAgIF9fem4gPSBfX2MwICogKF9fem4gKyBfX2xhbWJkYSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBjb25zdCBfVHAgX19lMiA9IF9feG5kZXYgKiBfX3luZGV2IC0gX196bmRldiAqIF9fem5kZXY7CisgICAgICAgICAgY29uc3QgX1RwIF9fZTMgPSBfX3huZGV2ICogX195bmRldiAqIF9fem5kZXY7CisgICAgICAgICAgY29uc3QgX1RwIF9fcyAgPSBfVHAoMSkgKyAoX19jMSAqIF9fZTIgLSBfX2MyIC0gX19jMyAqIF9fZTMpICogX19lMgorICAgICAgICAgICAgICAgICAgICsgX19jNCAqIF9fZTM7CisKKyAgICAgICAgICByZXR1cm4gX19zIC8gc3RkOjpzcXJ0KF9fbXUpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSBmaXJzdCBraW5kCisgICAgICogICAgICAgICAgQGYkIEsoaykgQGYkIGJ5IHNlcmllcyBleHBhbnNpb24uCisgICAgICogCisgICAgICogICBUaGUgY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIGZpcnN0IGtpbmQgaXMgZGVmaW5lZCBhcworICAgICAqICAgQGZbCisgICAgICogICAgIEsoaykgPSBGKGssXHBpLzIpID0gXGludF8wXntccGkvMn1cZnJhY3tkXHRoZXRhfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xzcXJ0ezEgLSBrXjJzaW5eMlx0aGV0YX19CisgICAgICogICBAZl0KKyAgICAgKiAKKyAgICAgKiAgIFRoaXMgcm91dGluZSBpcyBub3QgYmFkIGFzIGxvbmcgYXMgfGt8IGlzIHNvbWV3aGF0IHNtYWxsZXIgdGhhbiAxCisgICAgICogICBidXQgaXMgbm90IGlzIGdvb2QgYXMgdGhlIENhcmxzb24gZWxsaXB0aWMgaW50ZWdyYWwgZm9ybXVsYXRpb24uCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fayAgVGhlIGFyZ3VtZW50IG9mIHRoZSBjb21wbGV0ZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBjb21wbGV0ZSBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19jb21wX2VsbGludF8xX3NlcmllcyhfVHAgX19rKQorICAgIHsKKworICAgICAgY29uc3QgX1RwIF9fa2sgPSBfX2sgKiBfX2s7CisKKyAgICAgIF9UcCBfX3Rlcm0gPSBfX2trIC8gX1RwKDQpOworICAgICAgX1RwIF9fc3VtID0gX1RwKDEpICsgX190ZXJtOworCisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAyOyBfX2kgPCBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fdGVybSAqPSAoMiAqIF9faSAtIDEpICogX19rayAvICgyICogX19pKTsKKyAgICAgICAgICBpZiAoX190ZXJtIDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX3N1bSArPSBfX3Rlcm07CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV8yKCkgKiBfX3N1bTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSBmaXJzdCBraW5kCisgICAgICogICAgICAgICAgIEBmJCBLKGspIEBmJCB1c2luZyB0aGUgQ2FybHNvbiBmb3JtdWxhdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBjb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgZmlyc3Qga2luZCBpcyBkZWZpbmVkIGFzCisgICAgICogICBAZlsKKyAgICAgKiAgICAgSyhrKSA9IEYoayxccGkvMikgPSBcaW50XzBee1xwaS8yfVxmcmFje2RcdGhldGF9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xzcXJ0ezEgLSBrXjIgc2luXjJcdGhldGF9fQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSBAZiQgRihrLFxwaGkpIEBmJCBpcyB0aGUgaW5jb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUKKyAgICAgKiAgIGZpcnN0IGtpbmQuCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fayAgVGhlIGFyZ3VtZW50IG9mIHRoZSBjb21wbGV0ZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBjb21wbGV0ZSBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19jb21wX2VsbGludF8xKF9UcCBfX2spCisgICAgeworCisgICAgICBpZiAoX19pc25hbihfX2spKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKHN0ZDo6YWJzKF9faykgPj0gX1RwKDEpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9fZWxsaW50X3JmKF9UcCgwKSwgX1RwKDEpIC0gX19rICogX19rLCBfVHAoMSkpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgaW5jb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgZmlyc3Qga2luZAorICAgICAqICAgICAgICAgICBAZiQgRihrLFxwaGkpIEBmJCB1c2luZyB0aGUgQ2FybHNvbiBmb3JtdWxhdGlvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBpbmNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSBmaXJzdCBraW5kIGlzIGRlZmluZWQgYXMKKyAgICAgKiAgIEBmWworICAgICAqICAgICBGKGssXHBoaSkgPSBcaW50XzBee1xwaGl9XGZyYWN7ZFx0aGV0YX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xzcXJ0ezEgLSBrXjIgc2luXjJcdGhldGF9fQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fayAgVGhlIGFyZ3VtZW50IG9mIHRoZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19waGkgIFRoZSBpbnRlZ3JhbCBsaW1pdCBhcmd1bWVudCBvZiB0aGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZWxsaW50XzEoX1RwIF9faywgX1RwIF9fcGhpKQorICAgIHsKKworICAgICAgaWYgKF9faXNuYW4oX19rKSB8fCBfX2lzbmFuKF9fcGhpKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChzdGQ6OmFicyhfX2spID4gX1RwKDEpKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQmFkIGFyZ3VtZW50IGluIF9fZWxsaW50XzEuIikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gIFJlZHVjZSBwaGkgdG8gLXBpLzIgPCBwaGkgPCArcGkvMi4KKyAgICAgICAgICBjb25zdCBpbnQgX19uID0gc3RkOjpmbG9vcihfX3BoaSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDAuNUwpKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19waGlfcmVkID0gX19waGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19uICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCk7CisKKyAgICAgICAgICBjb25zdCBfVHAgX19zID0gc3RkOjpzaW4oX19waGlfcmVkKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jID0gc3RkOjpjb3MoX19waGlfcmVkKTsKKworICAgICAgICAgIGNvbnN0IF9UcCBfX0YgPSBfX3MKKyAgICAgICAgICAgICAgICAgICAgICAgICogX19lbGxpbnRfcmYoX19jICogX19jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoMSkgLSBfX2sgKiBfX2sgKiBfX3MgKiBfX3MsIF9UcCgxKSk7CisKKyAgICAgICAgICBpZiAoX19uID09IDApCisgICAgICAgICAgICByZXR1cm4gX19GOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBfX0YgKyBfVHAoMikgKiBfX24gKiBfX2NvbXBfZWxsaW50XzEoX19rKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBjb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgc2Vjb25kIGtpbmQKKyAgICAgKiAgICAgICAgICBAZiQgRShrKSBAZiQgYnkgc2VyaWVzIGV4cGFuc2lvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBjb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgc2Vjb25kIGtpbmQgaXMgZGVmaW5lZCBhcworICAgICAqICAgQGZbCisgICAgICogICAgIEUoayxccGkvMikgPSBcaW50XzBee1xwaS8yfVxzcXJ0ezEgLSBrXjIgc2luXjJcdGhldGF9CisgICAgICogICBAZl0KKyAgICAgKiAKKyAgICAgKiAgIFRoaXMgcm91dGluZSBpcyBub3QgYmFkIGFzIGxvbmcgYXMgfGt8IGlzIHNvbWV3aGF0IHNtYWxsZXIgdGhhbiAxCisgICAgICogICBidXQgaXMgbm90IGlzIGdvb2QgYXMgdGhlIENhcmxzb24gZWxsaXB0aWMgaW50ZWdyYWwgZm9ybXVsYXRpb24uCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fayAgVGhlIGFyZ3VtZW50IG9mIHRoZSBjb21wbGV0ZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBjb21wbGV0ZSBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY29tcF9lbGxpbnRfMl9zZXJpZXMoX1RwIF9faykKKyAgICB7CisKKyAgICAgIGNvbnN0IF9UcCBfX2trID0gX19rICogX19rOworCisgICAgICBfVHAgX190ZXJtID0gX19razsKKyAgICAgIF9UcCBfX3N1bSA9IF9fdGVybTsKKworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDAwOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMjsgX19pIDwgX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19pMm0gPSAyICogX19pIC0gMTsKKyAgICAgICAgICBjb25zdCBfVHAgX19pMiA9IDIgKiBfX2k7CisgICAgICAgICAgX190ZXJtICo9IF9faTJtICogX19pMm0gKiBfX2trIC8gKF9faTIgKiBfX2kyKTsKKyAgICAgICAgICBpZiAoX190ZXJtIDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX3N1bSArPSBfX3Rlcm0gLyBfX2kybTsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpXzIoKSAqIChfVHAoMSkgLSBfX3N1bSk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBDYXJsc29uIGVsbGlwdGljIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZAorICAgICAqICAgICAgICAgICBAZiQgUl9EKHgseSx6KSA9IFJfSih4LHkseix6KSBAZiQgd2hlcmUKKyAgICAgKiAgICAgICAgICAgQGYkIFJfSih4LHkseixwKSBAZiQgaXMgdGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24KKyAgICAgKiAgICAgICAgICAgb2YgdGhlIHRoaXJkIGtpbmQuCisgICAgICogCisgICAgICogICBUaGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQgaXMgZGVmaW5lZCBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICAgIFJfRCh4LHkseikgPSBcZnJhY3szfXsyfSBcaW50XzBeXGluZnR5CisgICAgICogICAgICAgICAgICAgICAgIFxmcmFje2R0fXsodCArIHgpXnsxLzJ9KHQgKyB5KV57MS8yfSh0ICsgeileezMvMn19CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQmFzZWQgb24gQ2FybHNvbidzIGFsZ29yaXRobXM6CisgICAgICogICAtICBCLiBDLiBDYXJsc29uIE51bWVyLiBNYXRoLiAzMywgMSAoMTk3OSkKKyAgICAgKiAgIC0gIEIuIEMuIENhcmxzb24sIFNwZWNpYWwgRnVuY3Rpb25zIG9mIEFwcGxpZWQgTWF0aGVtYXRpY3MgKDE5NzcpCisgICAgICogICAtICBOdW1lcmljYWwgUmVjaXBlcyBpbiBDLCAybmQgZWQsIHBwLiAyNjEtMjY5LAorICAgICAqICAgICAgYnkgUHJlc3MsIFRldWtvbHNreSwgVmV0dGVybGluZywgRmxhbm5lcnkgKDE5OTIpCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgZmlyc3Qgb2YgdHdvIHN5bW1ldHJpYyBhcmd1bWVudHMuCisgICAgICogICBAcGFyYW0gIF9feSAgVGhlIHNlY29uZCBvZiB0d28gc3ltbWV0cmljIGFyZ3VtZW50cy4KKyAgICAgKiAgIEBwYXJhbSAgX196ICBUaGUgdGhpcmQgYXJndW1lbnQuCisgICAgICogICBAcmV0dXJuICBUaGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZWxsaW50X3JkKF9UcCBfX3gsIF9UcCBfX3ksIF9UcCBfX3opCisgICAgeworICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICBjb25zdCBfVHAgX19lcnJ0b2wgPSBzdGQ6OnBvdyhfX2VwcyAvIF9UcCg4KSwgX1RwKDEpIC8gX1RwKDYpKTsKKyAgICAgIGNvbnN0IF9UcCBfX21pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWluKCk7CisgICAgICBjb25zdCBfVHAgX19tYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1heCgpOworICAgICAgY29uc3QgX1RwIF9fbG9saW0gPSBfVHAoMikgLyBzdGQ6OnBvdyhfX21heCwgX1RwKDIpIC8gX1RwKDMpKTsKKyAgICAgIGNvbnN0IF9UcCBfX3VwbGltID0gc3RkOjpwb3coX1RwKDAuMUwpICogX19lcnJ0b2wgLyBfX21pbiwgX1RwKDIpIC8gX1RwKDMpKTsKKworICAgICAgaWYgKF9feCA8IF9UcCgwKSB8fCBfX3kgPCBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJBcmd1bWVudCBsZXNzIHRoYW4gemVybyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2VsbGludF9yZC4iKSk7CisgICAgICBlbHNlIGlmIChfX3ggKyBfX3kgPCBfX2xvbGltIHx8IF9feiA8IF9fbG9saW0pCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJBcmd1bWVudCB0b28gc21hbGwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19lbGxpbnRfcmQuIikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzAgPSBfVHAoMSkgLyBfVHAoNCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzEgPSBfVHAoMykgLyBfVHAoMTQpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MyID0gX1RwKDEpIC8gX1RwKDYpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MzID0gX1RwKDkpIC8gX1RwKDIyKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jNCA9IF9UcCgzKSAvIF9UcCgyNik7CisKKyAgICAgICAgICBfVHAgX194biA9IF9feDsKKyAgICAgICAgICBfVHAgX195biA9IF9feTsKKyAgICAgICAgICBfVHAgX196biA9IF9fejsKKyAgICAgICAgICBfVHAgX19zaWdtYSA9IF9UcCgwKTsKKyAgICAgICAgICBfVHAgX19wb3dlcjQgPSBfVHAoMSk7CisKKyAgICAgICAgICBfVHAgX19tdTsKKyAgICAgICAgICBfVHAgX194bmRldiwgX195bmRldiwgX196bmRldjsKKworICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwOworICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IF9faXRlciA9IDA7IF9faXRlciA8IF9fbWF4X2l0ZXI7ICsrX19pdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX211ID0gKF9feG4gKyBfX3luICsgX1RwKDMpICogX196bikgLyBfVHAoNSk7CisgICAgICAgICAgICAgIF9feG5kZXYgPSAoX19tdSAtIF9feG4pIC8gX19tdTsKKyAgICAgICAgICAgICAgX195bmRldiA9IChfX211IC0gX195bikgLyBfX211OworICAgICAgICAgICAgICBfX3puZGV2ID0gKF9fbXUgLSBfX3puKSAvIF9fbXU7CisgICAgICAgICAgICAgIF9UcCBfX2Vwc2lsb24gPSBzdGQ6Om1heChzdGQ6OmFicyhfX3huZGV2KSwgc3RkOjphYnMoX195bmRldikpOworICAgICAgICAgICAgICBfX2Vwc2lsb24gPSBzdGQ6Om1heChfX2Vwc2lsb24sIHN0ZDo6YWJzKF9fem5kZXYpKTsKKyAgICAgICAgICAgICAgaWYgKF9fZXBzaWxvbiA8IF9fZXJydG9sKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBfVHAgX194bnJvb3QgPSBzdGQ6OnNxcnQoX194bik7CisgICAgICAgICAgICAgIF9UcCBfX3lucm9vdCA9IHN0ZDo6c3FydChfX3luKTsKKyAgICAgICAgICAgICAgX1RwIF9fem5yb290ID0gc3RkOjpzcXJ0KF9fem4pOworICAgICAgICAgICAgICBfVHAgX19sYW1iZGEgPSBfX3hucm9vdCAqIChfX3lucm9vdCArIF9fem5yb290KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX3lucm9vdCAqIF9fem5yb290OworICAgICAgICAgICAgICBfX3NpZ21hICs9IF9fcG93ZXI0IC8gKF9fem5yb290ICogKF9fem4gKyBfX2xhbWJkYSkpOworICAgICAgICAgICAgICBfX3Bvd2VyNCAqPSBfX2MwOworICAgICAgICAgICAgICBfX3huID0gX19jMCAqIChfX3huICsgX19sYW1iZGEpOworICAgICAgICAgICAgICBfX3luID0gX19jMCAqIChfX3luICsgX19sYW1iZGEpOworICAgICAgICAgICAgICBfX3puID0gX19jMCAqIChfX3puICsgX19sYW1iZGEpOworICAgICAgICAgICAgfQorCisJICAvLyBOb3RlOiBfX2VhIGlzIGFuIFNQVSBiYWRuYW1lLgorICAgICAgICAgIF9UcCBfX2VhYSA9IF9feG5kZXYgKiBfX3luZGV2OworICAgICAgICAgIF9UcCBfX2ViID0gX196bmRldiAqIF9fem5kZXY7CisgICAgICAgICAgX1RwIF9fZWMgPSBfX2VhYSAtIF9fZWI7CisgICAgICAgICAgX1RwIF9fZWQgPSBfX2VhYSAtIF9UcCg2KSAqIF9fZWI7CisgICAgICAgICAgX1RwIF9fZWYgPSBfX2VkICsgX19lYyArIF9fZWM7CisgICAgICAgICAgX1RwIF9fczEgPSBfX2VkICogKC1fX2MxICsgX19jMyAqIF9fZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfVHAoMykgLSBfVHAoMykgKiBfX2M0ICogX196bmRldiAqIF9fZWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfVHAoMikpOworICAgICAgICAgIF9UcCBfX3MyID0gX196bmRldgorICAgICAgICAgICAgICAgICAgICogKF9fYzIgKiBfX2VmCisgICAgICAgICAgICAgICAgICAgICsgX196bmRldiAqICgtX19jMyAqIF9fZWMgLSBfX3puZGV2ICogX19jNCAtIF9fZWFhKSk7CisKKyAgICAgICAgICByZXR1cm4gX1RwKDMpICogX19zaWdtYSArIF9fcG93ZXI0ICogKF9UcCgxKSArIF9fczEgKyBfX3MyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gKF9fbXUgKiBzdGQ6OnNxcnQoX19tdSkpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBjb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgc2Vjb25kIGtpbmQKKyAgICAgKiAgICAgICAgICAgQGYkIEUoaykgQGYkIHVzaW5nIHRoZSBDYXJsc29uIGZvcm11bGF0aW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGNvbXBsZXRlIGVsbGlwdGljIGludGVncmFsIG9mIHRoZSBzZWNvbmQga2luZCBpcyBkZWZpbmVkIGFzCisgICAgICogICBAZlsKKyAgICAgKiAgICAgRShrLFxwaS8yKSA9IFxpbnRfMF57XHBpLzJ9XHNxcnR7MSAtIGteMiBzaW5eMlx0aGV0YX0KKyAgICAgKiAgIEBmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX2sgIFRoZSBhcmd1bWVudCBvZiB0aGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2NvbXBfZWxsaW50XzIoX1RwIF9faykKKyAgICB7CisKKyAgICAgIGlmIChfX2lzbmFuKF9faykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoc3RkOjphYnMoX19rKSA9PSAxKQorICAgICAgICByZXR1cm4gX1RwKDEpOworICAgICAgZWxzZSBpZiAoc3RkOjphYnMoX19rKSA+IF9UcCgxKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkJhZCBhcmd1bWVudCBpbiBfX2NvbXBfZWxsaW50XzIuIikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fa2sgPSBfX2sgKiBfX2s7CisKKyAgICAgICAgICByZXR1cm4gX19lbGxpbnRfcmYoX1RwKDApLCBfVHAoMSkgLSBfX2trLCBfVHAoMSkpCisgICAgICAgICAgICAgICAtIF9fa2sgKiBfX2VsbGludF9yZChfVHAoMCksIF9UcCgxKSAtIF9fa2ssIF9UcCgxKSkgLyBfVHAoMyk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHNlY29uZCBraW5kCisgICAgICogICAgICAgICAgIEBmJCBFKGssXHBoaSkgQGYkIHVzaW5nIHRoZSBDYXJsc29uIGZvcm11bGF0aW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHNlY29uZCBraW5kIGlzIGRlZmluZWQgYXMKKyAgICAgKiAgIEBmWworICAgICAqICAgICBFKGssXHBoaSkgPSBcaW50XzBee1xwaGl9IFxzcXJ0ezEgLSBrXjIgc2luXjJcdGhldGF9CisgICAgICogICBAZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX19rICBUaGUgYXJndW1lbnQgb2YgdGhlIGVsbGlwdGljIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3BoaSAgVGhlIGludGVncmFsIGxpbWl0IGFyZ3VtZW50IG9mIHRoZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZWxsaW50XzIoX1RwIF9faywgX1RwIF9fcGhpKQorICAgIHsKKworICAgICAgaWYgKF9faXNuYW4oX19rKSB8fCBfX2lzbmFuKF9fcGhpKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChzdGQ6OmFicyhfX2spID4gX1RwKDEpKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQmFkIGFyZ3VtZW50IGluIF9fZWxsaW50XzIuIikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gIFJlZHVjZSBwaGkgdG8gLXBpLzIgPCBwaGkgPCArcGkvMi4KKyAgICAgICAgICBjb25zdCBpbnQgX19uID0gc3RkOjpmbG9vcihfX3BoaSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDAuNUwpKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19waGlfcmVkID0gX19waGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19uICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCk7CisKKyAgICAgICAgICBjb25zdCBfVHAgX19rayA9IF9fayAqIF9fazsKKyAgICAgICAgICBjb25zdCBfVHAgX19zID0gc3RkOjpzaW4oX19waGlfcmVkKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19zcyA9IF9fcyAqIF9fczsKKyAgICAgICAgICBjb25zdCBfVHAgX19zc3MgPSBfX3NzICogX19zOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MgPSBzdGQ6OmNvcyhfX3BoaV9yZWQpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2NjID0gX19jICogX19jOworCisgICAgICAgICAgY29uc3QgX1RwIF9fRSA9IF9fcworICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2VsbGludF9yZihfX2NjLCBfVHAoMSkgLSBfX2trICogX19zcywgX1RwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgLSBfX2trICogX19zc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICogX19lbGxpbnRfcmQoX19jYywgX1RwKDEpIC0gX19rayAqIF9fc3MsIF9UcCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gX1RwKDMpOworCisgICAgICAgICAgaWYgKF9fbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIF9fRTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX19FICsgX1RwKDIpICogX19uICogX19jb21wX2VsbGludF8yKF9fayk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24KKyAgICAgKiAgICAgICAgICAgQGYkIFJfQyh4LHkpID0gUl9GKHgseSx5KSBAZiQgd2hlcmUgQGYkIFJfRih4LHkseikgQGYkCisgICAgICogICAgICAgICAgIGlzIHRoZSBDYXJsc29uIGVsbGlwdGljIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kLgorICAgICAqIAorICAgICAqICAgVGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24gaXMgZGVmaW5lZCBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICAgIFJfQyh4LHkpID0gXGZyYWN7MX17Mn0gXGludF8wXlxpbmZ0eQorICAgICAqICAgICAgICAgICAgICAgICBcZnJhY3tkdH17KHQgKyB4KV57MS8yfSh0ICsgeSl9CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQmFzZWQgb24gQ2FybHNvbidzIGFsZ29yaXRobXM6CisgICAgICogICAtICBCLiBDLiBDYXJsc29uIE51bWVyLiBNYXRoLiAzMywgMSAoMTk3OSkKKyAgICAgKiAgIC0gIEIuIEMuIENhcmxzb24sIFNwZWNpYWwgRnVuY3Rpb25zIG9mIEFwcGxpZWQgTWF0aGVtYXRpY3MgKDE5NzcpCisgICAgICogICAtICBOdW1lcmljYWwgUmVjaXBlcyBpbiBDLCAybmQgZWQsIHBwLiAyNjEtMjY5LAorICAgICAqICAgICAgYnkgUHJlc3MsIFRldWtvbHNreSwgVmV0dGVybGluZywgRmxhbm5lcnkgKDE5OTIpCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgZmlyc3QgYXJndW1lbnQuCisgICAgICogICBAcGFyYW0gIF9feSAgVGhlIHNlY29uZCBhcmd1bWVudC4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBDYXJsc29uIGVsbGlwdGljIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2VsbGludF9yYyhfVHAgX194LCBfVHAgX195KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX21pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWluKCk7CisgICAgICBjb25zdCBfVHAgX19tYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1heCgpOworICAgICAgY29uc3QgX1RwIF9fbG9saW0gPSBfVHAoNSkgKiBfX21pbjsKKyAgICAgIGNvbnN0IF9UcCBfX3VwbGltID0gX19tYXggLyBfVHAoNSk7CisKKyAgICAgIGlmIChfX3ggPCBfVHAoMCkgfHwgX195IDwgX1RwKDApIHx8IF9feCArIF9feSA8IF9fbG9saW0pCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJBcmd1bWVudCBsZXNzIHRoYW4gemVybyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2VsbGludF9yYy4iKSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMCA9IF9UcCgxKSAvIF9UcCg0KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMSA9IF9UcCgxKSAvIF9UcCg3KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMiA9IF9UcCg5KSAvIF9UcCgyMik7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzMgPSBfVHAoMykgLyBfVHAoMTApOworICAgICAgICAgIGNvbnN0IF9UcCBfX2M0ID0gX1RwKDMpIC8gX1RwKDgpOworCisgICAgICAgICAgX1RwIF9feG4gPSBfX3g7CisgICAgICAgICAgX1RwIF9feW4gPSBfX3k7CisKKyAgICAgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19lcnJ0b2wgPSBzdGQ6OnBvdyhfX2VwcyAvIF9UcCgzMCksIF9UcCgxKSAvIF9UcCg2KSk7CisgICAgICAgICAgX1RwIF9fbXU7CisgICAgICAgICAgX1RwIF9fc247CisKKyAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDsKKyAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2l0ZXIgPSAwOyBfX2l0ZXIgPCBfX21heF9pdGVyOyArK19faXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19tdSA9IChfX3huICsgX1RwKDIpICogX195bikgLyBfVHAoMyk7CisgICAgICAgICAgICAgIF9fc24gPSAoX195biArIF9fbXUpIC8gX19tdSAtIF9UcCgyKTsKKyAgICAgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fc24pIDwgX19lcnJ0b2wpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2xhbWJkYSA9IF9UcCgyKSAqIHN0ZDo6c3FydChfX3huKSAqIHN0ZDo6c3FydChfX3luKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9feW47CisgICAgICAgICAgICAgIF9feG4gPSBfX2MwICogKF9feG4gKyBfX2xhbWJkYSk7CisgICAgICAgICAgICAgIF9feW4gPSBfX2MwICogKF9feW4gKyBfX2xhbWJkYSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBfVHAgX19zID0gX19zbiAqIF9fc24KKyAgICAgICAgICAgICAgICAgICogKF9fYzMgKyBfX3NuKihfX2MxICsgX19zbiAqIChfX2M0ICsgX19zbiAqIF9fYzIpKSk7CisKKyAgICAgICAgICByZXR1cm4gKF9UcCgxKSArIF9fcykgLyBzdGQ6OnNxcnQoX19tdSk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIENhcmxzb24gZWxsaXB0aWMgZnVuY3Rpb24gQGYkIFJfSih4LHkseixwKSBAZiQKKyAgICAgKiAgICAgICAgICAgb2YgdGhlIHRoaXJkIGtpbmQuCisgICAgICogCisgICAgICogICBUaGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgdGhpcmQga2luZCBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICAgUl9KKHgseSx6LHApID0gXGZyYWN7M317Mn0gXGludF8wXlxpbmZ0eQorICAgICAqICAgICAgIFxmcmFje2R0fXsodCArIHgpXnsxLzJ9KHQgKyB5KV57MS8yfSh0ICsgeileezEvMn0odCArIHApfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEJhc2VkIG9uIENhcmxzb24ncyBhbGdvcml0aG1zOgorICAgICAqICAgLSAgQi4gQy4gQ2FybHNvbiBOdW1lci4gTWF0aC4gMzMsIDEgKDE5NzkpCisgICAgICogICAtICBCLiBDLiBDYXJsc29uLCBTcGVjaWFsIEZ1bmN0aW9ucyBvZiBBcHBsaWVkIE1hdGhlbWF0aWNzICgxOTc3KQorICAgICAqICAgLSAgTnVtZXJpY2FsIFJlY2lwZXMgaW4gQywgMm5kIGVkLCBwcC4gMjYxLTI2OSwKKyAgICAgKiAgICAgIGJ5IFByZXNzLCBUZXVrb2xza3ksIFZldHRlcmxpbmcsIEZsYW5uZXJ5ICgxOTkyKQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGZpcnN0IG9mIHRocmVlIHN5bW1ldHJpYyBhcmd1bWVudHMuCisgICAgICogICBAcGFyYW0gIF9feSAgVGhlIHNlY29uZCBvZiB0aHJlZSBzeW1tZXRyaWMgYXJndW1lbnRzLgorICAgICAqICAgQHBhcmFtICBfX3ogIFRoZSB0aGlyZCBvZiB0aHJlZSBzeW1tZXRyaWMgYXJndW1lbnRzLgorICAgICAqICAgQHBhcmFtICBfX3AgIFRoZSBmb3VydGggYXJndW1lbnQuCisgICAgICogICBAcmV0dXJuICBUaGUgQ2FybHNvbiBlbGxpcHRpYyBmdW5jdGlvbiBvZiB0aGUgZm91cnRoIGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZWxsaW50X3JqKF9UcCBfX3gsIF9UcCBfX3ksIF9UcCBfX3osIF9UcCBfX3ApCisgICAgeworICAgICAgY29uc3QgX1RwIF9fbWluID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptaW4oKTsKKyAgICAgIGNvbnN0IF9UcCBfX21heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWF4KCk7CisgICAgICBjb25zdCBfVHAgX19sb2xpbSA9IHN0ZDo6cG93KF9UcCg1KSAqIF9fbWluLCBfVHAoMSkvX1RwKDMpKTsKKyAgICAgIGNvbnN0IF9UcCBfX3VwbGltID0gX1RwKDAuM0wpCisgICAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6cG93KF9UcCgwLjJMKSAqIF9fbWF4LCBfVHAoMSkvX1RwKDMpKTsKKworICAgICAgaWYgKF9feCA8IF9UcCgwKSB8fCBfX3kgPCBfVHAoMCkgfHwgX196IDwgX1RwKDApKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgbGVzcyB0aGFuIHplcm8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19lbGxpbnRfcmouIikpOworICAgICAgZWxzZSBpZiAoX194ICsgX195IDwgX19sb2xpbSB8fCBfX3ggKyBfX3ogPCBfX2xvbGltCisgICAgICAgICAgICB8fCBfX3kgKyBfX3ogPCBfX2xvbGltIHx8IF9fcCA8IF9fbG9saW0pCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJBcmd1bWVudCB0b28gc21hbGwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19lbGxpbnRfcmoiKSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMCA9IF9UcCgxKSAvIF9UcCg0KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19jMSA9IF9UcCgzKSAvIF9UcCgxNCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzIgPSBfVHAoMSkgLyBfVHAoMyk7CisgICAgICAgICAgY29uc3QgX1RwIF9fYzMgPSBfVHAoMykgLyBfVHAoMjIpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2M0ID0gX1RwKDMpIC8gX1RwKDI2KTsKKworICAgICAgICAgIF9UcCBfX3huID0gX194OworICAgICAgICAgIF9UcCBfX3luID0gX195OworICAgICAgICAgIF9UcCBfX3puID0gX196OworICAgICAgICAgIF9UcCBfX3BuID0gX19wOworICAgICAgICAgIF9UcCBfX3NpZ21hID0gX1RwKDApOworICAgICAgICAgIF9UcCBfX3Bvd2VyNCA9IF9UcCgxKTsKKworICAgICAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2VycnRvbCA9IHN0ZDo6cG93KF9fZXBzIC8gX1RwKDgpLCBfVHAoMSkgLyBfVHAoNikpOworCisgICAgICAgICAgX1RwIF9fbGFtYmRhLCBfX211OworICAgICAgICAgIF9UcCBfX3huZGV2LCBfX3luZGV2LCBfX3puZGV2LCBfX3BuZGV2OworCisgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDA7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pdGVyID0gMDsgX19pdGVyIDwgX19tYXhfaXRlcjsgKytfX2l0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fbXUgPSAoX194biArIF9feW4gKyBfX3puICsgX1RwKDIpICogX19wbikgLyBfVHAoNSk7CisgICAgICAgICAgICAgIF9feG5kZXYgPSAoX19tdSAtIF9feG4pIC8gX19tdTsKKyAgICAgICAgICAgICAgX195bmRldiA9IChfX211IC0gX195bikgLyBfX211OworICAgICAgICAgICAgICBfX3puZGV2ID0gKF9fbXUgLSBfX3puKSAvIF9fbXU7CisgICAgICAgICAgICAgIF9fcG5kZXYgPSAoX19tdSAtIF9fcG4pIC8gX19tdTsKKyAgICAgICAgICAgICAgX1RwIF9fZXBzaWxvbiA9IHN0ZDo6bWF4KHN0ZDo6YWJzKF9feG5kZXYpLCBzdGQ6OmFicyhfX3luZGV2KSk7CisgICAgICAgICAgICAgIF9fZXBzaWxvbiA9IHN0ZDo6bWF4KF9fZXBzaWxvbiwgc3RkOjphYnMoX196bmRldikpOworICAgICAgICAgICAgICBfX2Vwc2lsb24gPSBzdGQ6Om1heChfX2Vwc2lsb24sIHN0ZDo6YWJzKF9fcG5kZXYpKTsKKyAgICAgICAgICAgICAgaWYgKF9fZXBzaWxvbiA8IF9fZXJydG9sKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjb25zdCBfVHAgX194bnJvb3QgPSBzdGQ6OnNxcnQoX194bik7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX3lucm9vdCA9IHN0ZDo6c3FydChfX3luKTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fem5yb290ID0gc3RkOjpzcXJ0KF9fem4pOworICAgICAgICAgICAgICBjb25zdCBfVHAgX19sYW1iZGEgPSBfX3hucm9vdCAqIChfX3lucm9vdCArIF9fem5yb290KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX3lucm9vdCAqIF9fem5yb290OworICAgICAgICAgICAgICBjb25zdCBfVHAgX19hbHBoYTEgPSBfX3BuICogKF9feG5yb290ICsgX195bnJvb3QgKyBfX3pucm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX3hucm9vdCAqIF9feW5yb290ICogX196bnJvb3Q7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2FscGhhMiA9IF9fYWxwaGExICogX19hbHBoYTE7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2JldGEgPSBfX3BuICogKF9fcG4gKyBfX2xhbWJkYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoX19wbiArIF9fbGFtYmRhKTsKKyAgICAgICAgICAgICAgX19zaWdtYSArPSBfX3Bvd2VyNCAqIF9fZWxsaW50X3JjKF9fYWxwaGEyLCBfX2JldGEpOworICAgICAgICAgICAgICBfX3Bvd2VyNCAqPSBfX2MwOworICAgICAgICAgICAgICBfX3huID0gX19jMCAqIChfX3huICsgX19sYW1iZGEpOworICAgICAgICAgICAgICBfX3luID0gX19jMCAqIChfX3luICsgX19sYW1iZGEpOworICAgICAgICAgICAgICBfX3puID0gX19jMCAqIChfX3puICsgX19sYW1iZGEpOworICAgICAgICAgICAgICBfX3BuID0gX19jMCAqIChfX3BuICsgX19sYW1iZGEpOworICAgICAgICAgICAgfQorCisJICAvLyBOb3RlOiBfX2VhIGlzIGFuIFNQVSBiYWRuYW1lLgorICAgICAgICAgIF9UcCBfX2VhYSA9IF9feG5kZXYgKiAoX195bmRldiArIF9fem5kZXYpICsgX195bmRldiAqIF9fem5kZXY7CisgICAgICAgICAgX1RwIF9fZWIgPSBfX3huZGV2ICogX195bmRldiAqIF9fem5kZXY7CisgICAgICAgICAgX1RwIF9fZWMgPSBfX3BuZGV2ICogX19wbmRldjsKKyAgICAgICAgICBfVHAgX19lMiA9IF9fZWFhIC0gX1RwKDMpICogX19lYzsKKyAgICAgICAgICBfVHAgX19lMyA9IF9fZWIgKyBfVHAoMikgKiBfX3BuZGV2ICogKF9fZWFhIC0gX19lYyk7CisgICAgICAgICAgX1RwIF9fczEgPSBfVHAoMSkgKyBfX2UyICogKC1fX2MxICsgX1RwKDMpICogX19jMyAqIF9fZTIgLyBfVHAoNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9UcCgzKSAqIF9fYzQgKiBfX2UzIC8gX1RwKDIpKTsKKyAgICAgICAgICBfVHAgX19zMiA9IF9fZWIgKiAoX19jMiAvIF9UcCgyKQorICAgICAgICAgICAgICAgICAgICsgX19wbmRldiAqICgtX19jMyAtIF9fYzMgKyBfX3BuZGV2ICogX19jNCkpOworICAgICAgICAgIF9UcCBfX3MzID0gX19wbmRldiAqIF9fZWFhICogKF9fYzIgLSBfX3BuZGV2ICogX19jMykKKyAgICAgICAgICAgICAgICAgICAtIF9fYzIgKiBfX3BuZGV2ICogX19lYzsKKworICAgICAgICAgIHJldHVybiBfVHAoMykgKiBfX3NpZ21hICsgX19wb3dlcjQgKiAoX19zMSArIF9fczIgKyBfX3MzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX19tdSAqIHN0ZDo6c3FydChfX211KSk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHRoaXJkIGtpbmQKKyAgICAgKiAgICAgICAgICBAZiQgXFBpKGssXG51KSA9IFxQaShrLFxudSxccGkvMikgQGYkIHVzaW5nIHRoZQorICAgICAqICAgICAgICAgIENhcmxzb24gZm9ybXVsYXRpb24uCisgICAgICogCisgICAgICogICBUaGUgY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHRoaXJkIGtpbmQgaXMgZGVmaW5lZCBhcworICAgICAqICAgQGZbCisgICAgICogICAgIFxQaShrLFxudSkgPSBcaW50XzBee1xwaS8yfQorICAgICAqICAgICAgICAgICAgICAgICAgIFxmcmFje2RcdGhldGF9CisgICAgICogICAgICAgICAgICAgICAgIHsoMSAtIFxudSBcc2luXjJcdGhldGEpXHNxcnR7MSAtIGteMiBcc2luXjJcdGhldGF9fQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fayAgVGhlIGFyZ3VtZW50IG9mIHRoZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19udSAgVGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgY29tcGxldGUgZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIHRoaXJkIGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY29tcF9lbGxpbnRfMyhfVHAgX19rLCBfVHAgX19udSkKKyAgICB7CisKKyAgICAgIGlmIChfX2lzbmFuKF9faykgfHwgX19pc25hbihfX251KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChfX251ID09IF9UcCgxKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6aW5maW5pdHkoKTsKKyAgICAgIGVsc2UgaWYgKHN0ZDo6YWJzKF9faykgPiBfVHAoMSkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgaW4gX19jb21wX2VsbGludF8zLiIpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX2trID0gX19rICogX19rOworCisgICAgICAgICAgcmV0dXJuIF9fZWxsaW50X3JmKF9UcCgwKSwgX1RwKDEpIC0gX19raywgX1RwKDEpKQorICAgICAgICAgICAgICAgLSBfX251CisgICAgICAgICAgICAgICAqIF9fZWxsaW50X3JqKF9UcCgwKSwgX1RwKDEpIC0gX19raywgX1RwKDEpLCBfVHAoMSkgKyBfX251KQorICAgICAgICAgICAgICAgLyBfVHAoMyk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgaW5jb21wbGV0ZSBlbGxpcHRpYyBpbnRlZ3JhbCBvZiB0aGUgdGhpcmQga2luZAorICAgICAqICAgICAgICAgIEBmJCBcUGkoayxcbnUsXHBoaSkgQGYkIHVzaW5nIHRoZSBDYXJsc29uIGZvcm11bGF0aW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGluY29tcGxldGUgZWxsaXB0aWMgaW50ZWdyYWwgb2YgdGhlIHRoaXJkIGtpbmQgaXMgZGVmaW5lZCBhcworICAgICAqICAgQGZbCisgICAgICogICAgIFxQaShrLFxudSxccGhpKSA9IFxpbnRfMF57XHBoaX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgXGZyYWN7ZFx0aGV0YX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KDEgLSBcbnUgXHNpbl4yXHRoZXRhKQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcc3FydHsxIC0ga14yIFxzaW5eMlx0aGV0YX19CisgICAgICogICBAZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX19rICBUaGUgYXJndW1lbnQgb2YgdGhlIGVsbGlwdGljIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX251ICBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBlbGxpcHRpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19waGkgIFRoZSBpbnRlZ3JhbCBsaW1pdCBhcmd1bWVudCBvZiB0aGUgZWxsaXB0aWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZWxsaXB0aWMgZnVuY3Rpb24gb2YgdGhlIHRoaXJkIGtpbmQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZWxsaW50XzMoX1RwIF9faywgX1RwIF9fbnUsIF9UcCBfX3BoaSkKKyAgICB7CisKKyAgICAgIGlmIChfX2lzbmFuKF9faykgfHwgX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9fcGhpKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChzdGQ6OmFicyhfX2spID4gX1RwKDEpKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQmFkIGFyZ3VtZW50IGluIF9fZWxsaW50XzMuIikpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gIFJlZHVjZSBwaGkgdG8gLXBpLzIgPCBwaGkgPCArcGkvMi4KKyAgICAgICAgICBjb25zdCBpbnQgX19uID0gc3RkOjpmbG9vcihfX3BoaSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDAuNUwpKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19waGlfcmVkID0gX19waGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19uICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCk7CisKKyAgICAgICAgICBjb25zdCBfVHAgX19rayA9IF9fayAqIF9fazsKKyAgICAgICAgICBjb25zdCBfVHAgX19zID0gc3RkOjpzaW4oX19waGlfcmVkKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19zcyA9IF9fcyAqIF9fczsKKyAgICAgICAgICBjb25zdCBfVHAgX19zc3MgPSBfX3NzICogX19zOworICAgICAgICAgIGNvbnN0IF9UcCBfX2MgPSBzdGQ6OmNvcyhfX3BoaV9yZWQpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2NjID0gX19jICogX19jOworCisgICAgICAgICAgY29uc3QgX1RwIF9fUGkgPSBfX3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fZWxsaW50X3JmKF9fY2MsIF9UcCgxKSAtIF9fa2sgKiBfX3NzLCBfVHAoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgLSBfX251ICogX19zc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fZWxsaW50X3JqKF9fY2MsIF9UcCgxKSAtIF9fa2sgKiBfX3NzLCBfVHAoMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoMSkgKyBfX251ICogX19zcykgLyBfVHAoMyk7CisKKyAgICAgICAgICBpZiAoX19uID09IDApCisgICAgICAgICAgICByZXR1cm4gX19QaTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX19QaSArIF9UcCgyKSAqIF9fbiAqIF9fY29tcF9lbGxpbnRfMyhfX2ssIF9fbnUpOworICAgICAgICB9CisgICAgfQorCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBzdGQ6OnRyMTo6X19kZXRhaWwKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9FTExfSU5URUdSQUxfVENDCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2V4cF9pbnRlZ3JhbC50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9leHBfaW50ZWdyYWwudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YzAzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9leHBfaW50ZWdyYWwudGNjCkBAIC0wLDAgKzEsNTI2IEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9leHBfaW50ZWdyYWwudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dHIxL2NtYXRofQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyIFRSMTogNS4yICBTcGVjaWFsIGZ1bmN0aW9ucworLy8KKworLy8gIFdyaXR0ZW4gYnkgRWR3YXJkIFNtaXRoLVJvd2xhbmQgYmFzZWQgb246CisvLworLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIEVkLiBieSBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLCBOZXctWW9yaywgU2VjdGlvbiA1LCBwcC4gMjI4LTI1MS4KKy8vICAgKDIpIFRoZSBHbnUgU2NpZW50aWZpYyBMaWJyYXJ5LCBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3NsCisvLyAgICgzKSBOdW1lcmljYWwgUmVjaXBlcyBpbiBDLCBieSBXLiBILiBQcmVzcywgUy4gQS4gVGV1a29sc2t5LAorLy8gICAgICAgVy4gVC4gVmV0dGVybGluZywgQi4gUC4gRmxhbm5lcnksIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzICgxOTkyKSwKKy8vICAgICAgIDJuZCBlZCwgcHAuIDIyMi0yMjUuCisvLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9FWFBfSU5URUdSQUxfVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9FWFBfSU5URUdSQUxfVENDIDEKKworI2luY2x1ZGUgInNwZWNpYWxfZnVuY3Rpb25fdXRpbC5oIgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgLy8gWzUuMl0gU3BlY2lhbCBmdW5jdGlvbnMKKworICAvLyBJbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19leHBpbnRfRTEoX1RwKTsKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgQGYkIEVfMSh4KSBAZiQKKyAgICAgKiAgICAgICAgICBieSBzZXJpZXMgc3VtbWF0aW9uLiAgVGhpcyBzaG91bGQgYmUgZ29vZAorICAgICAqICAgICAgICAgIGZvciBAZiQgeCA8IDEgQGYkLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFXzEoeCkgPSBcaW50X3sxfV57XGluZnR5fSBcZnJhY3tlXnsteHR9fXt0fSBkdAorICAgICAqICAgICAgICAgIFxmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50X0UxX3NlcmllcyhfVHAgX194KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgX1RwIF9fdGVybSA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX2VzdW0gPSBfVHAoMCk7CisgICAgICBfVHAgX19vc3VtID0gX1RwKDApOworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAxOyBfX2kgPCBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fdGVybSAqPSAtIF9feCAvIF9faTsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtKSA8IF9fZXBzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgaWYgKF9fdGVybSA+PSBfVHAoMCkpCisgICAgICAgICAgICBfX2VzdW0gKz0gX190ZXJtIC8gX19pOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIF9fb3N1bSArPSBfX3Rlcm0gLyBfX2k7CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIC0gX19lc3VtIC0gX19vc3VtCisgICAgICAgICAgICAgLSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fZ2FtbWFfZSgpIC0gc3RkOjpsb2coX194KTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgQGYkIEVfMSh4KSBAZiQKKyAgICAgKiAgICAgICAgICBieSBhc3ltcHRvdGljIGV4cGFuc2lvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRV8xKHgpID0gXGludF97MX1eXGluZnR5IFxmcmFje2Veey14dH19e3R9IGR0CisgICAgICogICAgICAgICAgXGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19leHBpbnRfRTFfYXN5bXAoX1RwIF9feCkKKyAgICB7CisgICAgICBfVHAgX190ZXJtID0gX1RwKDEpOworICAgICAgX1RwIF9fZXN1bSA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX29zdW0gPSBfVHAoMCk7CisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAxOyBfX2kgPCBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3ByZXYgPSBfX3Rlcm07CisgICAgICAgICAgX190ZXJtICo9IC0gX19pIC8gX194OworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3Rlcm0pID4gc3RkOjphYnMoX19wcmV2KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGlmIChfX3Rlcm0gPj0gX1RwKDApKQorICAgICAgICAgICAgX19lc3VtICs9IF9fdGVybTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBfX29zdW0gKz0gX190ZXJtOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBzdGQ6OmV4cCgtIF9feCkgKiAoX19lc3VtICsgX19vc3VtKSAvIF9feDsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgQGYkIEVfbih4KSBAZiQKKyAgICAgKiAgICAgICAgICBieSBzZXJpZXMgc3VtbWF0aW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFX24oeCkgPSBcaW50X3sxfV5caW5mdHkgXGZyYWN7ZV57LXh0fX17dF5ufSBkdAorICAgICAqICAgICAgICAgIFxmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX24gIFRoZSBvcmRlciBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19leHBpbnRfRW5fc2VyaWVzKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gpCisgICAgeworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDA7CisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IGludCBfX25tMSA9IF9fbiAtIDE7CisgICAgICBfVHAgX19hbnMgPSAoX19ubTEgIT0gMAorICAgICAgICAgICAgICAgID8gX1RwKDEpIC8gX19ubTEgOiAtc3RkOjpsb2coX194KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19nYW1tYV9lKCkpOworICAgICAgX1RwIF9fZmFjdCA9IF9UcCgxKTsKKyAgICAgIGZvciAoaW50IF9faSA9IDE7IF9faSA8PSBfX21heF9pdGVyOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fZmFjdCAqPSAtX194IC8gX1RwKF9faSk7CisgICAgICAgICAgX1RwIF9fZGVsOworICAgICAgICAgIGlmICggX19pICE9IF9fbm0xICkKKyAgICAgICAgICAgIF9fZGVsID0gLV9fZmFjdCAvIF9UcChfX2kgLSBfX25tMSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfVHAgX19wc2kgPSAtX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpnYW1tYV9lKCk7CisgICAgICAgICAgICAgIGZvciAoaW50IF9faWkgPSAxOyBfX2lpIDw9IF9fbm0xOyArK19faWkpCisgICAgICAgICAgICAgICAgX19wc2kgKz0gX1RwKDEpIC8gX1RwKF9faWkpOworICAgICAgICAgICAgICBfX2RlbCA9IF9fZmFjdCAqIChfX3BzaSAtIHN0ZDo6bG9nKF9feCkpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX2FucyArPSBfX2RlbDsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX19kZWwpIDwgX19lcHMgKiBzdGQ6OmFicyhfX2FucykpCisgICAgICAgICAgICByZXR1cm4gX19hbnM7CisgICAgICAgIH0KKyAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiU2VyaWVzIHN1bW1hdGlvbiBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2V4cGludF9Fbl9zZXJpZXMuIikpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRV9uKHgpIEBmJAorICAgICAqICAgICAgICAgIGJ5IGNvbnRpbnVlZCBmcmFjdGlvbnMuCisgICAgICogCisgICAgICogICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgaXMgZ2l2ZW4gYnkKKyAgICAgKiAgICAgICAgICBcZlsKKyAgICAgKiAgICAgICAgICAgIEVfbih4KSA9IFxpbnRfezF9XlxpbmZ0eSBcZnJhY3tlXnsteHR9fXt0Xm59IGR0CisgICAgICogICAgICAgICAgXGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9fbiAgVGhlIG9yZGVyIG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9Fbl9jb250X2ZyYWModW5zaWduZWQgaW50IF9fbiwgX1RwIF9feCkKKyAgICB7CisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDsKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgY29uc3QgX1RwIF9fZnBfbWluID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptaW4oKTsKKyAgICAgIGNvbnN0IGludCBfX25tMSA9IF9fbiAtIDE7CisgICAgICBfVHAgX19iID0gX194ICsgX1RwKF9fbik7CisgICAgICBfVHAgX19jID0gX1RwKDEpIC8gX19mcF9taW47CisgICAgICBfVHAgX19kID0gX1RwKDEpIC8gX19iOworICAgICAgX1RwIF9faCA9IF9fZDsKKyAgICAgIGZvciAoIHVuc2lnbmVkIGludCBfX2kgPSAxOyBfX2kgPD0gX19tYXhfaXRlcjsgKytfX2kgKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fYSA9IC1fVHAoX19pICogKF9fbm0xICsgX19pKSk7CisgICAgICAgICAgX19iICs9IF9UcCgyKTsKKyAgICAgICAgICBfX2QgPSBfVHAoMSkgLyAoX19hICogX19kICsgX19iKTsKKyAgICAgICAgICBfX2MgPSBfX2IgKyBfX2EgLyBfX2M7CisgICAgICAgICAgY29uc3QgX1RwIF9fZGVsID0gX19jICogX19kOworICAgICAgICAgIF9faCAqPSBfX2RlbDsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX19kZWwgLSBfVHAoMSkpIDwgX19lcHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2FucyA9IF9faCAqIHN0ZDo6ZXhwKC1fX3gpOworICAgICAgICAgICAgICByZXR1cm4gX19hbnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiQ29udGludWVkIGZyYWN0aW9uIGZhaWxlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fZXhwaW50X0VuX2NvbnRfZnJhYy4iKSk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFX24oeCkgQGYkCisgICAgICogICAgICAgICAgYnkgcmVjdXJzaW9uLiAgVXNlIHVwd2FyZCByZWN1cnNpb24gZm9yIEBmJCB4IDwgbiBAZiQKKyAgICAgKiAgICAgICAgICBhbmQgZG93bndhcmQgcmVjdXJzaW9uIChNaWxsZXIncyBhbGdvcml0aG0pIG90aGVyd2lzZS4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRV9uKHgpID0gXGludF97MX1eXGluZnR5IFxmcmFje2Veey14dH19e3Rebn0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50X0VuX3JlY3Vyc2lvbih1bnNpZ25lZCBpbnQgX19uLCBfVHAgX194KQorICAgIHsKKyAgICAgIF9UcCBfX0VuOworICAgICAgX1RwIF9fRTEgPSBfX2V4cGludF9FMShfX3gpOworICAgICAgaWYgKF9feCA8IF9UcChfX24pKQorICAgICAgICB7CisgICAgICAgICAgLy8gIEZvcndhcmQgcmVjdXJzaW9uIGlzIHN0YWJsZSBvbmx5IGZvciBuIDwgeC4KKyAgICAgICAgICBfX0VuID0gX19FMTsKKyAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2ogPSAyOyBfX2ogPCBfX247ICsrX19qKQorICAgICAgICAgICAgX19FbiA9IChzdGQ6OmV4cCgtX194KSAtIF9feCAqIF9fRW4pIC8gX1RwKF9faiAtIDEpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvLyAgQmFja3dhcmQgcmVjdXJzaW9uIGlzIHN0YWJsZSBvbmx5IGZvciBuID49IHguCisgICAgICAgICAgX19FbiA9IF9UcCgxKTsKKyAgICAgICAgICBjb25zdCBpbnQgX19OID0gX19uICsgMjA7ICAvLyAgVE9ETzogQ2hlY2sgdGhpcyBzdGFydGluZyBudW1iZXIuCisgICAgICAgICAgX1RwIF9fc2F2ZSA9IF9UcCgwKTsKKyAgICAgICAgICBmb3IgKGludCBfX2ogPSBfX047IF9faiA+IDA7IC0tX19qKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX0VuID0gKHN0ZDo6ZXhwKC1fX3gpIC0gX19qICogX19FbikgLyBfX3g7CisgICAgICAgICAgICAgIGlmIChfX2ogPT0gX19uKQorICAgICAgICAgICAgICAgIF9fc2F2ZSA9IF9fRW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfVHAgX19ub3JtID0gX19FbiAvIF9fRTE7CisgICAgICAgICAgICBfX0VuIC89IF9fbm9ybTsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gX19FbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFaSh4KSBAZiQKKyAgICAgKiAgICAgICAgICBieSBzZXJpZXMgc3VtbWF0aW9uLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFaSh4KSA9IC1caW50X3steH1eXGluZnR5IFxmcmFje2VedH17dH0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9FaV9zZXJpZXMoX1RwIF9feCkKKyAgICB7CisgICAgICBfVHAgX190ZXJtID0gX1RwKDEpOworICAgICAgX1RwIF9fc3VtID0gX1RwKDApOworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDAwOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDwgX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBfX3Rlcm0gKj0gX194IC8gX19pOworICAgICAgICAgIF9fc3VtICs9IF9fdGVybSAvIF9faTsKKyAgICAgICAgICBpZiAoX190ZXJtIDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkgKiBfX3N1bSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fZ2FtbWFfZSgpICsgX19zdW0gKyBzdGQ6OmxvZyhfX3gpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRWkoeCkgQGYkCisgICAgICogICAgICAgICAgYnkgYXN5bXB0b3RpYyBleHBhbnNpb24uCisgICAgICogCisgICAgICogICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgaXMgZ2l2ZW4gYnkKKyAgICAgKiAgICAgICAgICBcZlsKKyAgICAgKiAgICAgICAgICAgIEVpKHgpID0gLVxpbnRfey14fV5caW5mdHkgXGZyYWN7ZV50fXt0fSBkdAorICAgICAqICAgICAgICAgIFxmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50X0VpX2FzeW1wKF9UcCBfX3gpCisgICAgeworICAgICAgX1RwIF9fdGVybSA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX3N1bSA9IF9UcCgxKTsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heF9pdGVyID0gMTAwMDsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDE7IF9faSA8IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcHJldiA9IF9fdGVybTsKKyAgICAgICAgICBfX3Rlcm0gKj0gX19pIC8gX194OworICAgICAgICAgIGlmIChfX3Rlcm0gPCBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGlmIChfX3Rlcm0gPj0gX19wcmV2KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX19zdW0gKz0gX190ZXJtOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBzdGQ6OmV4cChfX3gpICogX19zdW0gLyBfX3g7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFaSh4KSBAZiQuCisgICAgICogCisgICAgICogICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgaXMgZ2l2ZW4gYnkKKyAgICAgKiAgICAgICAgICBcZlsKKyAgICAgKiAgICAgICAgICAgIEVpKHgpID0gLVxpbnRfey14fV5caW5mdHkgXGZyYWN7ZV50fXt0fSBkdAorICAgICAqICAgICAgICAgIFxmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50X0VpKF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCA8IF9UcCgwKSkKKyAgICAgICAgcmV0dXJuIC1fX2V4cGludF9FMSgtX194KTsKKyAgICAgIGVsc2UgaWYgKF9feCA8IC1zdGQ6OmxvZyhzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKSkpCisgICAgICAgIHJldHVybiBfX2V4cGludF9FaV9zZXJpZXMoX194KTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9fZXhwaW50X0VpX2FzeW1wKF9feCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFXzEoeCkgQGYkLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFXzEoeCkgPSBcaW50X3sxfV5caW5mdHkgXGZyYWN7ZV57LXh0fX17dH0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2V4cGludF9FMShfVHAgX194KQorICAgIHsKKyAgICAgIGlmIChfX3ggPCBfVHAoMCkpCisgICAgICAgIHJldHVybiAtX19leHBpbnRfRWkoLV9feCk7CisgICAgICBlbHNlIGlmIChfX3ggPCBfVHAoMSkpCisgICAgICAgIHJldHVybiBfX2V4cGludF9FMV9zZXJpZXMoX194KTsKKyAgICAgIGVsc2UgaWYgKF9feCA8IF9UcCgxMDApKSAgLy8gIFRPRE86IEZpbmQgYSBnb29kIGFzeW1wdG90aWMgc3dpdGNoIHBvaW50LgorICAgICAgICByZXR1cm4gX19leHBpbnRfRW5fY29udF9mcmFjKDEsIF9feCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2V4cGludF9FMV9hc3ltcChfX3gpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgUmV0dXJuIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBAZiQgRV9uKHgpIEBmJAorICAgICAqICAgICAgICAgIGZvciBsYXJnZSBhcmd1bWVudC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgICAgICAgIFxmWworICAgICAqICAgICAgICAgICAgRV9uKHgpID0gXGludF97MX1eXGluZnR5IFxmcmFje2Veey14dH19e3Rebn0gZHQKKyAgICAgKiAgICAgICAgICBcZl0KKyAgICAgKiAKKyAgICAgKiAgIFRoaXMgaXMgc29tZXRoaW5nIG9mIGFuIGV4dGVuc2lvbi4KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50X2FzeW1wKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gpCisgICAgeworICAgICAgX1RwIF9fdGVybSA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX3N1bSA9IF9UcCgxKTsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDE7IF9faSA8PSBfX247ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcHJldiA9IF9fdGVybTsKKyAgICAgICAgICBfX3Rlcm0gKj0gLShfX24gLSBfX2kgKyAxKSAvIF9feDsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtKSA+IHN0ZDo6YWJzKF9fcHJldikpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX3N1bSArPSBfX3Rlcm07CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIHN0ZDo6ZXhwKC1fX3gpICogX19zdW0gLyBfX3g7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFX24oeCkgQGYkCisgICAgICogICAgICAgICAgZm9yIGxhcmdlIG9yZGVyLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFX24oeCkgPSBcaW50X3sxfV5caW5mdHkgXGZyYWN7ZV57LXh0fX17dF5ufSBkdAorICAgICAqICAgICAgICAgIFxmXQorICAgICAqICAgICAgICAKKyAgICAgKiAgIFRoaXMgaXMgc29tZXRoaW5nIG9mIGFuIGV4dGVuc2lvbi4KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIGV4cG9uZW50aWFsIGludGVncmFsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgZXhwb25lbnRpYWwgaW50ZWdyYWwuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fZXhwaW50X2xhcmdlX24odW5zaWduZWQgaW50IF9fbiwgX1RwIF9feCkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX194cG4gPSBfX3ggKyBfX247CisgICAgICBjb25zdCBfVHAgX194cG4yID0gX194cG4gKiBfX3hwbjsKKyAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMSk7CisgICAgICBfVHAgX19zdW0gPSBfVHAoMSk7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAxOyBfX2kgPD0gX19uOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3ByZXYgPSBfX3Rlcm07CisgICAgICAgICAgX190ZXJtICo9IChfX24gLSAyICogKF9faSAtIDEpICogX194KSAvIF9feHBuMjsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX19zdW0gKz0gX190ZXJtOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBzdGQ6OmV4cCgtX194KSAqIF9fc3VtIC8gX194cG47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGV4cG9uZW50aWFsIGludGVncmFsIEBmJCBFX24oeCkgQGYkLgorICAgICAqIAorICAgICAqICAgVGhlIGV4cG9uZW50aWFsIGludGVncmFsIGlzIGdpdmVuIGJ5CisgICAgICogICAgICAgICAgXGZbCisgICAgICogICAgICAgICAgICBFX24oeCkgPSBcaW50X3sxfV5caW5mdHkgXGZyYWN7ZV57LXh0fX17dF5ufSBkdAorICAgICAqICAgICAgICAgIFxmXQorICAgICAqICAgVGhpcyBpcyBzb21ldGhpbmcgb2YgYW4gZXh0ZW5zaW9uLgorICAgICAqIAorICAgICAqICAgQHBhcmFtICBfX24gIFRoZSBvcmRlciBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19leHBpbnQodW5zaWduZWQgaW50IF9fbiwgX1RwIF9feCkKKyAgICB7CisgICAgICAvLyAgUmV0dXJuIE5hTiBvbiBOYU4gaW5wdXQuCisgICAgICBpZiAoX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9fbiA8PSAxICYmIF9feCA9PSBfVHAoMCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmluZmluaXR5KCk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19FMCA9IHN0ZDo6ZXhwKF9feCkgLyBfX3g7CisgICAgICAgICAgaWYgKF9fbiA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIF9fRTA7CisKKyAgICAgICAgICBfVHAgX19FMSA9IF9fZXhwaW50X0UxKF9feCk7CisgICAgICAgICAgaWYgKF9fbiA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIF9fRTE7CisKKyAgICAgICAgICBpZiAoX194ID09IF9UcCgwKSkKKyAgICAgICAgICAgIHJldHVybiBfVHAoMSkgLyBzdGF0aWNfY2FzdDxfVHA+KF9fbiAtIDEpOworCisgICAgICAgICAgX1RwIF9fRW4gPSBfX2V4cGludF9Fbl9yZWN1cnNpb24oX19uLCBfX3gpOworCisgICAgICAgICAgcmV0dXJuIF9fRW47CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgZXhwb25lbnRpYWwgaW50ZWdyYWwgQGYkIEVpKHgpIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBpcyBnaXZlbiBieQorICAgICAqICAgXGZbCisgICAgICogICAgIEVpKHgpID0gLVxpbnRfey14fV5caW5mdHkgXGZyYWN7ZV50fXt0fSBkdAorICAgICAqICAgXGZdCisgICAgICogCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbCBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBleHBvbmVudGlhbCBpbnRlZ3JhbC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fZXhwaW50KF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9faXNuYW4oX194KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2V4cGludF9FaShfX3gpOworICAgIH0KKworICBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfRVhQX0lOVEVHUkFMX1RDQwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvZmVudi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvZmVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZmJlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9mZW52LmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIGZlbnYuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2ZlbnYuaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9UUjFfRkVOVl9ICisjZGVmaW5lIF9UUjFfRkVOVl9IIDEKKworI2luY2x1ZGUgPHRyMS9jZmVudj4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9mbG9hdC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvZmxvYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTk3NjdjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvZmxvYXQuaApAQCAtMCwwICsxLDM0IEBACisvLyBUUjEgZmxvYXQuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2Zsb2F0LmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfVFIxX0ZMT0FUX0gKKyNkZWZpbmUgX1RSMV9GTE9BVF9IIDEKKworI2luY2x1ZGUgPHRyMS9jZmxvYXQ+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvZnVuY3Rpb25hbCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2Z1bmN0aW9uYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3OWZiZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2Z1bmN0aW9uYWwKQEAgLTAsMCArMSwyMzA4IEBACisvLyBUUjEgZnVuY3Rpb25hbCBoZWFkZXIgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9mdW5jdGlvbmFsCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfRlVOQ1RJT05BTAorI2RlZmluZSBfR0xJQkNYWF9UUjFfRlVOQ1RJT05BTCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4KKworI2luY2x1ZGUgPHR5cGVpbmZvPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDx0cjEvdHVwbGU+CisjaW5jbHVkZSA8dHIxL3R5cGVfdHJhaXRzPgorI2luY2x1ZGUgPGJpdHMvc3RyaW5nZndkLmg+CisjaW5jbHVkZSA8dHIxL2Z1bmN0aW9uYWxfaGFzaC5oPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPiAvLyBmb3Igc3RkOjpfX2FkZHJlc3NvZgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgIGluY2x1ZGUgPHR5cGVfdHJhaXRzPiAvLyBmb3IgaW50ZWdyYWxfY29uc3RhbnQsIHRydWVfdHlwZSwgZmFsc2VfdHlwZQorI2VuZGlmCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgIHRlbXBsYXRlPGludD4gc3RydWN0IF9QbGFjZWhvbGRlcjsKKyAgdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIF9CaW5kOworICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIF9CaW5kX3Jlc3VsdDsKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorI2VuZGlmCisKK25hbWVzcGFjZSB0cjEKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01lbWJlclBvaW50ZXI+CisgICAgY2xhc3MgX01lbV9mbjsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2xhc3M+CisgICAgX01lbV9mbjxfVHAgX0NsYXNzOjoqPgorICAgIG1lbV9mbihfVHAgX0NsYXNzOjoqKTsKKworICAvKioKKyAgICogIEFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBfSGFzX3Jlc3VsdF90eXBlLCB3aGljaCB1c2VzIFNGSU5BRSB0bworICAgKiAgZGV0ZXJtaW5lIGlmIHRoZSB0eXBlIF9UcCBoYXMgYSBwdWJsaWNseS1hY2Nlc3NpYmxlIG1lbWJlciB0eXBlCisgICAqICByZXN1bHRfdHlwZS4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIF9IYXNfcmVzdWx0X3R5cGVfaGVscGVyIDogX19zZmluYWVfdHlwZXMKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHN0cnVjdCBfV3JhcF90eXBlCisJeyB9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHN0YXRpYyBfX29uZSBfX3Rlc3QoX1dyYXBfdHlwZTx0eXBlbmFtZSBfVXA6OnJlc3VsdF90eXBlPiopOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CisgICAgICAgIHN0YXRpYyBfX3R3byBfX3Rlc3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKF9fdGVzdDxfVHA+KDApKSA9PSAxOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfSGFzX3Jlc3VsdF90eXBlCisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxib29sLAorCSAgICAgIF9IYXNfcmVzdWx0X3R5cGVfaGVscGVyPHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWU+CisgICAgeyB9OworCisgIC8qKgorICAgKiAgCisgICovCisgIC8vLyBJZiB3ZSBoYXZlIGZvdW5kIGEgcmVzdWx0X3R5cGUsIGV4dHJhY3QgaXQuCisgIHRlbXBsYXRlPGJvb2wgX0hhc19yZXN1bHRfdHlwZSwgdHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgc3RydWN0IF9NYXliZV9nZXRfcmVzdWx0X3R5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgc3RydWN0IF9NYXliZV9nZXRfcmVzdWx0X3R5cGU8dHJ1ZSwgX0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRnVuY3Rvcjo6cmVzdWx0X3R5cGUgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvKioKKyAgICogIEJhc2UgY2xhc3MgZm9yIGFueSBmdW5jdGlvbiBvYmplY3QgdGhhdCBoYXMgYSB3ZWFrIHJlc3VsdCB0eXBlLCBhcworICAgKiAgZGVmaW5lZCBpbiAzLjMvMyBvZiBUUjEuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsCisgICAgOiBfTWF5YmVfZ2V0X3Jlc3VsdF90eXBlPF9IYXNfcmVzdWx0X3R5cGU8X0Z1bmN0b3I+Ojp2YWx1ZSwgX0Z1bmN0b3I+CisgICAgeworICAgIH07CisKKyAgLy8vIFJldHJpZXZlIHRoZSByZXN1bHQgdHlwZSBmb3IgYSBmdW5jdGlvbiB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoX0FyZ1R5cGVzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgdGhlIHJlc3VsdCB0eXBlIGZvciBhIGZ1bmN0aW9uIHJlZmVyZW5jZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPiAKKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzKCYpKF9BcmdUeXBlcy4uLik+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLy8vIFJldHJpZXZlIHRoZSByZXN1bHQgdHlwZSBmb3IgYSBmdW5jdGlvbiBwb2ludGVyLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMoKikoX0FyZ1R5cGVzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgcmVzdWx0IHR5cGUgZm9yIGEgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXIuIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIC8vLyBSZXRyaWV2ZSByZXN1bHQgdHlwZSBmb3IgYSBjb25zdCBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlci4gCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9DbGFzcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPiAKKyAgICBzdHJ1Y3QgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgY29uc3Q+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLy8vIFJldHJpZXZlIHJlc3VsdCB0eXBlIGZvciBhIHZvbGF0aWxlIG1lbWJlciBmdW5jdGlvbiBwb2ludGVyLiAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+IAorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZV9pbXBsPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKSB2b2xhdGlsZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisgICAgfTsKKworICAvLy8gUmV0cmlldmUgcmVzdWx0IHR5cGUgZm9yIGEgY29uc3Qgdm9sYXRpbGUgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXIuIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9XZWFrX3Jlc3VsdF90eXBlX2ltcGw8X1JlcyAoX0NsYXNzOjoqKShfQXJnVHlwZXMuLi4pY29uc3Qgdm9sYXRpbGU+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgLyoqCisgICAqICBTdHJpcCB0b3AtbGV2ZWwgY3YtcXVhbGlmaWVycyBmcm9tIHRoZSBmdW5jdGlvbiBvYmplY3QgYW5kIGxldAorICAgKiAgX1dlYWtfcmVzdWx0X3R5cGVfaW1wbCBwZXJmb3JtIHRoZSByZWFsIHdvcmsuCisgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgIHN0cnVjdCBfV2Vha19yZXN1bHRfdHlwZQorICAgIDogX1dlYWtfcmVzdWx0X3R5cGVfaW1wbDx0eXBlbmFtZSByZW1vdmVfY3Y8X0Z1bmN0b3I+Ojp0eXBlPgorICAgIHsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgY2xhc3MgcmVzdWx0X29mOworCisgIC8qKgorICAgKiAgQWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHJlc3VsdF9vZi4gV2hlbiBfSGFzX3Jlc3VsdF90eXBlIGlzCisgICAqICB0cnVlLCBnZXRzIGl0cyByZXN1bHQgZnJvbSBfV2Vha19yZXN1bHRfdHlwZS4gT3RoZXJ3aXNlLCB1c2VzCisgICAqICB0aGUgZnVuY3Rpb24gb2JqZWN0J3MgbWVtYmVyIHRlbXBsYXRlIHJlc3VsdCB0byBleHRyYWN0IHRoZQorICAgKiAgcmVzdWx0IHR5cGUuCisgICovCisgIHRlbXBsYXRlPGJvb2wgX0hhc19yZXN1bHRfdHlwZSwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgX1Jlc3VsdF9vZl9pbXBsOworCisgIC8vIEhhbmRsZSBtZW1iZXIgZGF0YSBwb2ludGVycyB1c2luZyBfTWVtX2ZuJ3MgbG9naWMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZXN1bHRfb2ZfaW1wbDxmYWxzZSwgX1JlcyBfQ2xhc3M6OiooX1QxKT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9NZW1fZm48X1JlcyBfQ2xhc3M6Oio+CisgICAgICAgICAgICAgICAgOjp0ZW1wbGF0ZSBfUmVzdWx0X3R5cGU8X1QxPjo6dHlwZSB0eXBlOworICAgIH07CisKKyAgLyoqCisgICAqIERldGVybWluZSB3aGV0aGVyIHdlIGNhbiBkZXRlcm1pbmUgYSByZXN1bHQgdHlwZSBmcm9tIEBjIEZ1bmN0b3IgCisgICAqIGFsb25lLgorICAgKi8gCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgcmVzdWx0X29mPF9GdW5jdG9yKF9BcmdUeXBlcy4uLik+CisgICAgOiBwdWJsaWMgX1Jlc3VsdF9vZl9pbXBsPAorICAgICAgICAgICAgICAgX0hhc19yZXN1bHRfdHlwZTxfV2Vha19yZXN1bHRfdHlwZTxfRnVuY3Rvcj4gPjo6dmFsdWUsCisgICAgICAgICAgICAgICBfRnVuY3RvcihfQXJnVHlwZXMuLi4pPgorICAgIHsKKyAgICB9OworCisgIC8vLyBXZSBhbHJlYWR5IGtub3cgdGhlIHJlc3VsdCB0eXBlIGZvciBAYyBGdW5jdG9yOyB1c2UgaXQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IF9SZXN1bHRfb2ZfaW1wbDx0cnVlLCBfRnVuY3RvcihfQXJnVHlwZXMuLi4pPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1dlYWtfcmVzdWx0X3R5cGU8X0Z1bmN0b3I+OjpyZXN1bHRfdHlwZSB0eXBlOworICAgIH07CisKKyAgLyoqCisgICAqIFdlIG5lZWQgdG8gY29tcHV0ZSB0aGUgcmVzdWx0IHR5cGUgZm9yIHRoaXMgaW52b2NhdGlvbiB0aGUgaGFyZCAKKyAgICogd2F5LgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX1Jlc3VsdF9vZl9pbXBsPGZhbHNlLCBfRnVuY3RvcihfQXJnVHlwZXMuLi4pPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Z1bmN0b3IKKyAgICAgICAgICAgICAgICA6OnRlbXBsYXRlIHJlc3VsdDxfRnVuY3RvcihfQXJnVHlwZXMuLi4pPjo6dHlwZSB0eXBlOworICAgIH07CisKKyAgLyoqCisgICAqIEl0IGlzIHVuc2FmZSB0byBhY2Nlc3MgOjpyZXN1bHQgd2hlbiB0aGVyZSBhcmUgemVybyBhcmd1bWVudHMsIHNvIHdlIAorICAgKiByZXR1cm4gQGMgdm9pZCBpbnN0ZWFkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgc3RydWN0IF9SZXN1bHRfb2ZfaW1wbDxmYWxzZSwgX0Z1bmN0b3IoKT4KKyAgICB7CisgICAgICB0eXBlZGVmIHZvaWQgdHlwZTsKKyAgICB9OworCisgIC8vLyBEZXRlcm1pbmVzIGlmIHRoZSB0eXBlIF9UcCBkZXJpdmVzIGZyb20gdW5hcnlfZnVuY3Rpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX0Rlcml2ZXNfZnJvbV91bmFyeV9mdW5jdGlvbiA6IF9fc2ZpbmFlX3R5cGVzCisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9SZXM+CisgICAgICAgIHN0YXRpYyBfX29uZSBfX3Rlc3QoY29uc3Qgdm9sYXRpbGUgdW5hcnlfZnVuY3Rpb248X1QxLCBfUmVzPiopOworCisgICAgICAvLyBJdCdzIHRlbXB0aW5nIHRvIGNoYW5nZSAiLi4uIiB0byBjb25zdCB2b2xhdGlsZSB2b2lkKiwgYnV0CisgICAgICAvLyB0aGF0IGZhaWxzIHdoZW4gX1RwIGlzIGEgZnVuY3Rpb24gdHlwZS4KKyAgICAgIHN0YXRpYyBfX3R3byBfX3Rlc3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKF9fdGVzdCgoX1RwKikwKSkgPT0gMTsKKyAgICB9OworCisgIC8vLyBEZXRlcm1pbmVzIGlmIHRoZSB0eXBlIF9UcCBkZXJpdmVzIGZyb20gYmluYXJ5X2Z1bmN0aW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9EZXJpdmVzX2Zyb21fYmluYXJ5X2Z1bmN0aW9uIDogX19zZmluYWVfdHlwZXMKKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyLCB0eXBlbmFtZSBfUmVzPgorICAgICAgICBzdGF0aWMgX19vbmUgX190ZXN0KGNvbnN0IHZvbGF0aWxlIGJpbmFyeV9mdW5jdGlvbjxfVDEsIF9UMiwgX1Jlcz4qKTsKKworICAgICAgLy8gSXQncyB0ZW1wdGluZyB0byBjaGFuZ2UgIi4uLiIgdG8gY29uc3Qgdm9sYXRpbGUgdm9pZCosIGJ1dAorICAgICAgLy8gdGhhdCBmYWlscyB3aGVuIF9UcCBpcyBhIGZ1bmN0aW9uIHR5cGUuCisgICAgICBzdGF0aWMgX190d28gX190ZXN0KC4uLik7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHNpemVvZihfX3Rlc3QoKF9UcCopMCkpID09IDE7CisgICAgfTsKKworICAvLy8gVHVybnMgYSBmdW5jdGlvbiB0eXBlIGludG8gYSBmdW5jdGlvbiBwb2ludGVyIHR5cGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sIF9Jc0Z1bmN0aW9uVHlwZSA9IGlzX2Z1bmN0aW9uPF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfRnVuY3Rpb25fdG9fZnVuY3Rpb25fcG9pbnRlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwIHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9GdW5jdGlvbl90b19mdW5jdGlvbl9wb2ludGVyPF9UcCwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCogdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiBJbnZva2UgYSBmdW5jdGlvbiBvYmplY3QsIHdoaWNoIG1heSBiZSBlaXRoZXIgYSBtZW1iZXIgcG9pbnRlciBvciBhCisgICAqIGZ1bmN0aW9uIG9iamVjdC4gVGhlIGZpcnN0IHBhcmFtZXRlciB3aWxsIHRlbGwgd2hpY2guCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgaW5saW5lCisgICAgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwKKyAgICAgICAgICAgICAoIWlzX21lbWJlcl9wb2ludGVyPF9GdW5jdG9yPjo6dmFsdWUKKyAgICAgICAgICAgICAgJiYgIWlzX2Z1bmN0aW9uPF9GdW5jdG9yPjo6dmFsdWUKKyAgICAgICAgICAgICAgJiYgIWlzX2Z1bmN0aW9uPHR5cGVuYW1lIHJlbW92ZV9wb2ludGVyPF9GdW5jdG9yPjo6dHlwZT46OnZhbHVlKSwKKyAgICAgICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8X0Z1bmN0b3IoX0FyZ3MuLi4pPjo6dHlwZQorICAgICAgICAgICA+OjpfX3R5cGUKKyAgICBfX2ludm9rZShfRnVuY3RvciYgX19mLCBfQXJncyYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHJldHVybiBfX2YoX19hcmdzLi4uKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIGlubGluZQorICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8CisgICAgICAgICAgICAgKGlzX21lbWJlcl9wb2ludGVyPF9GdW5jdG9yPjo6dmFsdWUKKyAgICAgICAgICAgICAgJiYgIWlzX2Z1bmN0aW9uPF9GdW5jdG9yPjo6dmFsdWUKKyAgICAgICAgICAgICAgJiYgIWlzX2Z1bmN0aW9uPHR5cGVuYW1lIHJlbW92ZV9wb2ludGVyPF9GdW5jdG9yPjo6dHlwZT46OnZhbHVlKSwKKyAgICAgICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8X0Z1bmN0b3IoX0FyZ3MuLi4pPjo6dHlwZQorICAgICAgICAgICA+OjpfX3R5cGUKKyAgICBfX2ludm9rZShfRnVuY3RvciYgX19mLCBfQXJncyYuLi4gX19hcmdzKQorICAgIHsKKyAgICAgIHJldHVybiBtZW1fZm4oX19mKShfX2FyZ3MuLi4pOworICAgIH0KKworICAvLyBUbyBwaWNrIHVwIGZ1bmN0aW9uIHJlZmVyZW5jZXMgKHRoYXQgd2lsbCBiZWNvbWUgZnVuY3Rpb24gcG9pbnRlcnMpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBpbmxpbmUKKyAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPAorICAgICAgICAgICAgIChpc19wb2ludGVyPF9GdW5jdG9yPjo6dmFsdWUKKyAgICAgICAgICAgICAgJiYgaXNfZnVuY3Rpb248dHlwZW5hbWUgcmVtb3ZlX3BvaW50ZXI8X0Z1bmN0b3I+Ojp0eXBlPjo6dmFsdWUpLAorICAgICAgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjxfRnVuY3RvcihfQXJncy4uLik+Ojp0eXBlCisgICAgICAgICAgID46Ol9fdHlwZQorICAgIF9faW52b2tlKF9GdW5jdG9yIF9fZiwgX0FyZ3MmLi4uIF9fYXJncykKKyAgICB7CisgICAgICByZXR1cm4gX19mKF9fYXJncy4uLik7CisgICAgfQorCisgIC8qKgorICAgKiAgS25vd2luZyB3aGljaCBvZiB1bmFyeV9mdW5jdGlvbiBhbmQgYmluYXJ5X2Z1bmN0aW9uIF9UcCBkZXJpdmVzCisgICAqICBmcm9tLCBkZXJpdmVzIGZyb20gdGhlIHNhbWUgYW5kIGVuc3VyZXMgdGhhdCByZWZlcmVuY2Vfd3JhcHBlcgorICAgKiAgd2lsbCBoYXZlIGEgd2VhayByZXN1bHQgdHlwZS4gU2VlIGNhc2VzIGJlbG93LgorICAgKi8KKyAgdGVtcGxhdGU8Ym9vbCBfVW5hcnksIGJvb2wgX0JpbmFyeSwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZV9pbXBsOworCisgIC8vIE5vdCBhIHVuYXJ5X2Z1bmN0aW9uIG9yIGJpbmFyeV9mdW5jdGlvbiwgc28gdHJ5IGEgd2VhayByZXN1bHQgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZV9pbXBsPGZhbHNlLCBmYWxzZSwgX1RwPgorICAgIDogX1dlYWtfcmVzdWx0X3R5cGU8X1RwPgorICAgIHsgfTsKKworICAvLyB1bmFyeV9mdW5jdGlvbiBidXQgbm90IGJpbmFyeV9mdW5jdGlvbgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlX2ltcGw8dHJ1ZSwgZmFsc2UsIF9UcD4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9UcDo6YXJndW1lbnRfdHlwZSwKKwkJICAgICB0eXBlbmFtZSBfVHA6OnJlc3VsdF90eXBlPgorICAgIHsgfTsKKworICAvLyBiaW5hcnlfZnVuY3Rpb24gYnV0IG5vdCB1bmFyeV9mdW5jdGlvbgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlX2ltcGw8ZmFsc2UsIHRydWUsIF9UcD4KKyAgICA6IGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfVHA6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCisJCSAgICAgIHR5cGVuYW1lIF9UcDo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCisJCSAgICAgIHR5cGVuYW1lIF9UcDo6cmVzdWx0X3R5cGU+CisgICAgeyB9OworCisgIC8vIEJvdGggdW5hcnlfZnVuY3Rpb24gYW5kIGJpbmFyeV9mdW5jdGlvbi4gSW1wb3J0IHJlc3VsdF90eXBlIHRvCisgIC8vIGF2b2lkIGNvbmZsaWN0cy4KKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2VfaW1wbDx0cnVlLCB0cnVlLCBfVHA+CisgICAgOiB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfVHA6OmFyZ3VtZW50X3R5cGUsCisJCSAgICAgdHlwZW5hbWUgX1RwOjpyZXN1bHRfdHlwZT4sCisgICAgICBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1RwOjpmaXJzdF9hcmd1bWVudF90eXBlLAorCQkgICAgICB0eXBlbmFtZSBfVHA6OnNlY29uZF9hcmd1bWVudF90eXBlLAorCQkgICAgICB0eXBlbmFtZSBfVHA6OnJlc3VsdF90eXBlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RwOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiAgRGVyaXZlcyBmcm9tIHVuYXJ5X2Z1bmN0aW9uIG9yIGJpbmFyeV9mdW5jdGlvbiB3aGVuIGl0CisgICAqICBjYW4uIFNwZWNpYWxpemF0aW9ucyBoYW5kbGUgYWxsIG9mIHRoZSBlYXN5IGNhc2VzLiBUaGUgcHJpbWFyeQorICAgKiAgdGVtcGxhdGUgZGV0ZXJtaW5lcyB3aGF0IHRvIGRvIHdpdGggYSBjbGFzcyB0eXBlLCB3aGljaCBtYXkKKyAgICogIGRlcml2ZSBmcm9tIGJvdGggdW5hcnlfZnVuY3Rpb24gYW5kIGJpbmFyeV9mdW5jdGlvbi4KKyAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZQorICAgIDogX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2VfaW1wbDwKKyAgICAgIF9EZXJpdmVzX2Zyb21fdW5hcnlfZnVuY3Rpb248X1RwPjo6dmFsdWUsCisgICAgICBfRGVyaXZlc19mcm9tX2JpbmFyeV9mdW5jdGlvbjxfVHA+Ojp2YWx1ZSwKKyAgICAgIF9UcD4KKyAgICB7IH07CisKKyAgLy8gLSBhIGZ1bmN0aW9uIHR5cGUgKHVuYXJ5KQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoX1QxKT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPF9UMSwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIGZ1bmN0aW9uIHR5cGUgKGJpbmFyeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoX1QxLCBfVDIpPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgZnVuY3Rpb24gcG9pbnRlciB0eXBlICh1bmFyeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzKCopKF9UMSk+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxfVDEsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBmdW5jdGlvbiBwb2ludGVyIHR5cGUgKGJpbmFyeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMoKikoX1QxLCBfVDIpPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAodW5hcnksIG5vIHF1YWxpZmllcnMpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKSgpPgorICAgIDogdW5hcnlfZnVuY3Rpb248X1QxKiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKGJpbmFyeSwgbm8gcXVhbGlmaWVycykKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoX1QyKT4KKyAgICA6IGJpbmFyeV9mdW5jdGlvbjxfVDEqLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlICh1bmFyeSwgY29uc3QpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMT4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKSgpIGNvbnN0PgorICAgIDogdW5hcnlfZnVuY3Rpb248Y29uc3QgX1QxKiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKGJpbmFyeSwgY29uc3QpCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKF9UMikgY29uc3Q+CisgICAgOiBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1QxKiwgX1QyLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAodW5hcnksIHZvbGF0aWxlKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDE+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoKSB2b2xhdGlsZT4KKyAgICA6IHVuYXJ5X2Z1bmN0aW9uPHZvbGF0aWxlIF9UMSosIF9SZXM+CisgICAgeyB9OworCisgIC8vIC0gYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB0eXBlIChiaW5hcnksIHZvbGF0aWxlKQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KKyAgICBzdHJ1Y3QgX1JlZmVyZW5jZV93cmFwcGVyX2Jhc2U8X1JlcyAoX1QxOjoqKShfVDIpIHZvbGF0aWxlPgorICAgIDogYmluYXJ5X2Z1bmN0aW9uPHZvbGF0aWxlIF9UMSosIF9UMiwgX1Jlcz4KKyAgICB7IH07CisKKyAgLy8gLSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHR5cGUgKHVuYXJ5LCBjb25zdCB2b2xhdGlsZSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPgorICAgIHN0cnVjdCBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTxfUmVzIChfVDE6OiopKCkgY29uc3Qgdm9sYXRpbGU+CisgICAgOiB1bmFyeV9mdW5jdGlvbjxjb25zdCB2b2xhdGlsZSBfVDEqLCBfUmVzPgorICAgIHsgfTsKKworICAvLyAtIGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gdHlwZSAoYmluYXJ5LCBjb25zdCB2b2xhdGlsZSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9SZWZlcmVuY2Vfd3JhcHBlcl9iYXNlPF9SZXMgKF9UMTo6KikoX1QyKSBjb25zdCB2b2xhdGlsZT4KKyAgICA6IGJpbmFyeV9mdW5jdGlvbjxjb25zdCB2b2xhdGlsZSBfVDEqLCBfVDIsIF9SZXM+CisgICAgeyB9OworCisgIC8vLyByZWZlcmVuY2Vfd3JhcHBlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgcmVmZXJlbmNlX3dyYXBwZXIKKyAgICA6IHB1YmxpYyBfUmVmZXJlbmNlX3dyYXBwZXJfYmFzZTx0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT4KKyAgICB7CisgICAgICAvLyBJZiBfVHAgaXMgYSBmdW5jdGlvbiB0eXBlLCB3ZSBjYW4ndCBmb3JtIHJlc3VsdF9vZjxfVHAoLi4uKT4sCisgICAgICAvLyBzbyB0dXJuIGl0IGludG8gYSBmdW5jdGlvbiBwb2ludGVyIHR5cGUuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9GdW5jdGlvbl90b19mdW5jdGlvbl9wb2ludGVyPF9UcD46OnR5cGUKKyAgICAgICAgX01fZnVuY190eXBlOworCisgICAgICBfVHAqIF9NX2RhdGE7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfVHAgdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHJlZmVyZW5jZV93cmFwcGVyKF9UcCYgX19pbmRhdGEpCisgICAgICA6IF9NX2RhdGEoc3RkOjpfX2FkZHJlc3NvZihfX2luZGF0YSkpCisgICAgICB7IH0KKworICAgICAgcmVmZXJlbmNlX3dyYXBwZXIoY29uc3QgcmVmZXJlbmNlX3dyYXBwZXI8X1RwPiYgX19pbnJlZik6CisgICAgICBfTV9kYXRhKF9faW5yZWYuX01fZGF0YSkKKyAgICAgIHsgfQorCisgICAgICByZWZlcmVuY2Vfd3JhcHBlciYKKyAgICAgIG9wZXJhdG9yPShjb25zdCByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+JiBfX2lucmVmKQorICAgICAgeworICAgICAgICBfTV9kYXRhID0gX19pbnJlZi5fTV9kYXRhOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIG9wZXJhdG9yIF9UcCYoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KCk7IH0KKworICAgICAgX1RwJgorICAgICAgZ2V0KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICpfTV9kYXRhOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8X01fZnVuY190eXBlKF9BcmdzLi4uKT46OnR5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7CisJICByZXR1cm4gX19pbnZva2UoZ2V0KCksIF9fYXJncy4uLik7CisJfQorICAgIH07CisKKworICAvLyBEZW5vdGVzIGEgcmVmZXJlbmNlIHNob3VsZCBiZSB0YWtlbiB0byBhIHZhcmlhYmxlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPF9UcD4KKyAgICByZWYoX1RwJiBfX3QpCisgICAgeyByZXR1cm4gcmVmZXJlbmNlX3dyYXBwZXI8X1RwPihfX3QpOyB9CisKKyAgLy8gRGVub3RlcyBhIGNvbnN0IHJlZmVyZW5jZSBzaG91bGQgYmUgdGFrZW4gdG8gYSB2YXJpYWJsZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSByZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBfVHA+CisgICAgY3JlZihjb25zdCBfVHAmIF9fdCkKKyAgICB7IHJldHVybiByZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBfVHA+KF9fdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPF9UcD4KKyAgICByZWYocmVmZXJlbmNlX3dyYXBwZXI8X1RwPiBfX3QpCisgICAgeyByZXR1cm4gcmVmKF9fdC5nZXQoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IF9UcD4KKyAgICBjcmVmKHJlZmVyZW5jZV93cmFwcGVyPF9UcD4gX190KQorICAgIHsgcmV0dXJuIGNyZWYoX190LmdldCgpKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KKyAgICBzdHJ1Y3QgX01lbV9mbl9jb25zdF9vcl9ub24KKyAgICB7CisgICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX01lbV9mbl9jb25zdF9vcl9ub248X1RwLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCYgdHlwZTsKKyAgICB9OworCisgIC8qKgorICAgKiBEZXJpdmVzIGZyb20gQGMgdW5hcnlfZnVuY3Rpb24gb3IgQGMgYmluYXJ5X2Z1bmN0aW9uLCBvciBwZXJoYXBzCisgICAqIG5vdGhpbmcsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwcm92aWRlZC4gVGhlCisgICAqIHByaW1hcnkgdGVtcGxhdGUgaXMgdGhlIGJhc2lzIGNhc2UsIHdoaWNoIGRlcml2ZXMgbm90aGluZy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4gCisgICAgc3RydWN0IF9NYXliZV91bmFyeV9vcl9iaW5hcnlfZnVuY3Rpb24geyB9OworCisgIC8vLyBEZXJpdmVzIGZyb20gQGMgdW5hcnlfZnVuY3Rpb24sIGFzIGFwcHJvcHJpYXRlLiAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX1QxPiAKKyAgICBzdHJ1Y3QgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBfVDE+CisgICAgOiBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9UMSwgX1Jlcz4geyB9OworCisgIC8vLyBEZXJpdmVzIGZyb20gQGMgYmluYXJ5X2Z1bmN0aW9uLCBhcyBhcHByb3ByaWF0ZS4gCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPiAKKyAgICBzdHJ1Y3QgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBfVDEsIF9UMj4KKyAgICA6IHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPF9UMSwgX1QyLCBfUmVzPiB7IH07CisKKyAgLy8vIEltcGxlbWVudGF0aW9uIG9mIEBjIG1lbV9mbiBmb3IgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfTWVtX2ZuPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKT4KKyAgICA6IHB1YmxpYyBfTWF5YmVfdW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uPF9SZXMsIF9DbGFzcyosIF9BcmdUeXBlcy4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgKF9DbGFzczo6Kl9GdW5jdG9yKShfQXJnVHlwZXMuLi4pOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMKKyAgICAgICAgX01fY2FsbChfVHAmIF9fb2JqZWN0LCBjb25zdCB2b2xhdGlsZSBfQ2xhc3MgKiwgCisgICAgICAgICAgICAgICAgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoX19hcmdzLi4uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMKKyAgICAgICAgX01fY2FsbChfVHAmIF9fcHRyLCBjb25zdCB2b2xhdGlsZSB2b2lkICosIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuICgoKl9fcHRyKS4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKworICAgICAgZXhwbGljaXQgX01lbV9mbihfRnVuY3RvciBfX3BtZikgOiBfX3BtZihfX3BtZikgeyB9CisKKyAgICAgIC8vIEhhbmRsZSBvYmplY3RzCisgICAgICBfUmVzCisgICAgICBvcGVyYXRvcigpKF9DbGFzcyYgX19vYmplY3QsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBwb2ludGVycworICAgICAgX1JlcworICAgICAgb3BlcmF0b3IoKShfQ2xhc3MqIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LT4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgLy8gSGFuZGxlIHNtYXJ0IHBvaW50ZXJzLCByZWZlcmVuY2VzIGFuZCBwb2ludGVycyB0byBkZXJpdmVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMKKwlvcGVyYXRvcigpKF9UcCYgX19vYmplY3QsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIF9NX2NhbGwoX19vYmplY3QsICZfX29iamVjdCwgX19hcmdzLi4uKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIF9GdW5jdG9yIF9fcG1mOworICAgIH07CisKKyAgLy8vIEltcGxlbWVudGF0aW9uIG9mIEBjIG1lbV9mbiBmb3IgY29uc3QgbWVtYmVyIGZ1bmN0aW9uIHBvaW50ZXJzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfTWVtX2ZuPF9SZXMgKF9DbGFzczo6KikoX0FyZ1R5cGVzLi4uKSBjb25zdD4KKyAgICA6IHB1YmxpYyBfTWF5YmVfdW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uPF9SZXMsIGNvbnN0IF9DbGFzcyosIAorCQkJCQkgICAgIF9BcmdUeXBlcy4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9SZXMgKF9DbGFzczo6Kl9GdW5jdG9yKShfQXJnVHlwZXMuLi4pIGNvbnN0OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMKKyAgICAgICAgX01fY2FsbChfVHAmIF9fb2JqZWN0LCBjb25zdCB2b2xhdGlsZSBfQ2xhc3MgKiwgCisgICAgICAgICAgICAgICAgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoX19hcmdzLi4uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMKKyAgICAgICAgX01fY2FsbChfVHAmIF9fcHRyLCBjb25zdCB2b2xhdGlsZSB2b2lkICosIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuICgoKl9fcHRyKS4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1JlcyByZXN1bHRfdHlwZTsKKworICAgICAgZXhwbGljaXQgX01lbV9mbihfRnVuY3RvciBfX3BtZikgOiBfX3BtZihfX3BtZikgeyB9CisKKyAgICAgIC8vIEhhbmRsZSBvYmplY3RzCisgICAgICBfUmVzCisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9DbGFzcyYgX19vYmplY3QsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICB7IHJldHVybiAoX19vYmplY3QuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBwb2ludGVycworICAgICAgX1JlcworICAgICAgb3BlcmF0b3IoKShjb25zdCBfQ2xhc3MqIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LT4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgLy8gSGFuZGxlIHNtYXJ0IHBvaW50ZXJzLCByZWZlcmVuY2VzIGFuZCBwb2ludGVycyB0byBkZXJpdmVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMgb3BlcmF0b3IoKShfVHAmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiBfTV9jYWxsKF9fb2JqZWN0LCAmX19vYmplY3QsIF9fYXJncy4uLik7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfRnVuY3RvciBfX3BtZjsKKyAgICB9OworCisgIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBAYyBtZW1fZm4gZm9yIHZvbGF0aWxlIG1lbWJlciBmdW5jdGlvbiBwb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX01lbV9mbjxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgdm9sYXRpbGU+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCB2b2xhdGlsZSBfQ2xhc3MqLCAKKwkJCQkJICAgICBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKSB2b2xhdGlsZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosIAorICAgICAgICAgICAgICAgIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqLCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiAoKCpfX3B0cikuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisKKyAgICAgIGV4cGxpY2l0IF9NZW1fZm4oX0Z1bmN0b3IgX19wbWYpIDogX19wbWYoX19wbWYpIHsgfQorCisgICAgICAvLyBIYW5kbGUgb2JqZWN0cworICAgICAgX1JlcworICAgICAgb3BlcmF0b3IoKSh2b2xhdGlsZSBfQ2xhc3MmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LipfX3BtZikoX19hcmdzLi4uKTsgfQorCisgICAgICAvLyBIYW5kbGUgcG9pbnRlcnMKKyAgICAgIF9SZXMKKyAgICAgIG9wZXJhdG9yKCkodm9sYXRpbGUgX0NsYXNzKiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC0+Kl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycywgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisJb3BlcmF0b3IoKShfVHAmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiBfTV9jYWxsKF9fb2JqZWN0LCAmX19vYmplY3QsIF9fYXJncy4uLik7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfRnVuY3RvciBfX3BtZjsKKyAgICB9OworCisgIC8vLyBJbXBsZW1lbnRhdGlvbiBvZiBAYyBtZW1fZm4gZm9yIGNvbnN0IHZvbGF0aWxlIG1lbWJlciBmdW5jdGlvbiBwb2ludGVycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX01lbV9mbjxfUmVzIChfQ2xhc3M6OiopKF9BcmdUeXBlcy4uLikgY29uc3Qgdm9sYXRpbGU+CisgICAgOiBwdWJsaWMgX01heWJlX3VuYXJ5X29yX2JpbmFyeV9mdW5jdGlvbjxfUmVzLCBjb25zdCB2b2xhdGlsZSBfQ2xhc3MqLCAKKwkJCQkJICAgICBfQXJnVHlwZXMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfUmVzIChfQ2xhc3M6OipfRnVuY3RvcikoX0FyZ1R5cGVzLi4uKSBjb25zdCB2b2xhdGlsZTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3Qgdm9sYXRpbGUgX0NsYXNzICosIAorICAgICAgICAgICAgICAgIF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX3B0ciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqLCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiAoKCpfX3B0cikuKl9fcG1mKShfX2FyZ3MuLi4pOyB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXMgcmVzdWx0X3R5cGU7CisKKyAgICAgIGV4cGxpY2l0IF9NZW1fZm4oX0Z1bmN0b3IgX19wbWYpIDogX19wbWYoX19wbWYpIHsgfQorCisgICAgICAvLyBIYW5kbGUgb2JqZWN0cworICAgICAgX1JlcyAKKyAgICAgIG9wZXJhdG9yKCkoY29uc3Qgdm9sYXRpbGUgX0NsYXNzJiBfX29iamVjdCwgX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3QKKyAgICAgIHsgcmV0dXJuIChfX29iamVjdC4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgLy8gSGFuZGxlIHBvaW50ZXJzCisgICAgICBfUmVzIAorICAgICAgb3BlcmF0b3IoKShjb25zdCB2b2xhdGlsZSBfQ2xhc3MqIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fb2JqZWN0LT4qX19wbWYpKF9fYXJncy4uLik7IH0KKworICAgICAgLy8gSGFuZGxlIHNtYXJ0IHBvaW50ZXJzLCByZWZlcmVuY2VzIGFuZCBwb2ludGVycyB0byBkZXJpdmVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIF9SZXMgb3BlcmF0b3IoKShfVHAmIF9fb2JqZWN0LCBfQXJnVHlwZXMuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7IHJldHVybiBfTV9jYWxsKF9fb2JqZWN0LCAmX19vYmplY3QsIF9fYXJncy4uLik7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfRnVuY3RvciBfX3BtZjsKKyAgICB9OworCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzPgorICAgIGNsYXNzIF9NZW1fZm48X1JlcyBfQ2xhc3M6Oio+CisgICAgeworICAgICAgLy8gVGhpcyBiaXQgb2YgZ2VuaXVzIGlzIGR1ZSB0byBQZXRlciBEaW1vdiwgaW1wcm92ZWQgc2xpZ2h0bHkgYnkKKyAgICAgIC8vIERvdWdsYXMgR3JlZ29yLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBfUmVzJgorICAgICAgICBfTV9jYWxsKF9UcCYgX19vYmplY3QsIF9DbGFzcyAqKSBjb25zdAorICAgICAgICB7IHJldHVybiBfX29iamVjdC4qX19wbTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICAgICAgX1JlcyYKKyAgICAgICAgX01fY2FsbChfVHAmIF9fb2JqZWN0LCBfVXAgKiBjb25zdCAqKSBjb25zdAorICAgICAgICB7IHJldHVybiAoKl9fb2JqZWN0KS4qX19wbTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICAgICAgY29uc3QgX1JlcyYKKyAgICAgICAgX01fY2FsbChfVHAmIF9fb2JqZWN0LCBjb25zdCBfVXAgKiBjb25zdCAqKSBjb25zdAorICAgICAgICB7IHJldHVybiAoKl9fb2JqZWN0KS4qX19wbTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIGNvbnN0IF9SZXMmCisgICAgICAgIF9NX2NhbGwoX1RwJiBfX29iamVjdCwgY29uc3QgX0NsYXNzICopIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LipfX3BtOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgY29uc3QgX1JlcyYKKyAgICAgICAgX01fY2FsbChfVHAmIF9fcHRyLCBjb25zdCB2b2xhdGlsZSB2b2lkKikgY29uc3QKKyAgICAgICAgeyByZXR1cm4gKCpfX3B0cikuKl9fcG07IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdGF0aWMgX1RwJiBfX2dldF9yZWYoKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgX19zZmluYWVfdHlwZXM6Ol9fb25lIF9fY2hlY2tfY29uc3QoX1RwJiwgX0NsYXNzKik7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICAgICAgc3RhdGljIF9fc2ZpbmFlX3R5cGVzOjpfX29uZSBfX2NoZWNrX2NvbnN0KF9UcCYsIF9VcCAqIGNvbnN0ICopOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgICAgIHN0YXRpYyBfX3NmaW5hZV90eXBlczo6X190d28gX19jaGVja19jb25zdChfVHAmLCBjb25zdCBfVXAgKiBjb25zdCAqKTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIF9fc2ZpbmFlX3R5cGVzOjpfX3R3byBfX2NoZWNrX2NvbnN0KF9UcCYsIGNvbnN0IF9DbGFzcyopOworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgX19zZmluYWVfdHlwZXM6Ol9fdHdvIF9fY2hlY2tfY29uc3QoX1RwJiwgY29uc3Qgdm9sYXRpbGUgdm9pZCopOworCisgICAgcHVibGljOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdHJ1Y3QgX1Jlc3VsdF90eXBlCisJOiBfTWVtX2ZuX2NvbnN0X29yX25vbjxfUmVzLAorCSAgKHNpemVvZihfX3NmaW5hZV90eXBlczo6X190d28pCisJICAgPT0gc2l6ZW9mKF9fY2hlY2tfY29uc3Q8X1RwPihfX2dldF9yZWY8X1RwPigpLCAoX1RwKikwKSkpPgorICAgICAgICB7IH07CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgICAgIHN0cnVjdCByZXN1bHQ7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk1lbSwgdHlwZW5hbWUgX1RwPgorICAgICAgICBzdHJ1Y3QgcmVzdWx0PF9DVk1lbShfVHApPgorCTogcHVibGljIF9SZXN1bHRfdHlwZTxfVHA+IHsgfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWTWVtLCB0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0cnVjdCByZXN1bHQ8X0NWTWVtKF9UcCYpPgorCTogcHVibGljIF9SZXN1bHRfdHlwZTxfVHA+IHsgfTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIF9NZW1fZm4oX1JlcyBfQ2xhc3M6OipfX3BtKSA6IF9fcG0oX19wbSkgeyB9CisKKyAgICAgIC8vIEhhbmRsZSBvYmplY3RzCisgICAgICBfUmVzJgorICAgICAgb3BlcmF0b3IoKShfQ2xhc3MmIF9fb2JqZWN0KSBjb25zdAorICAgICAgeyByZXR1cm4gX19vYmplY3QuKl9fcG07IH0KKworICAgICAgY29uc3QgX1JlcyYKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgX0NsYXNzJiBfX29iamVjdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LipfX3BtOyB9CisKKyAgICAgIC8vIEhhbmRsZSBwb2ludGVycworICAgICAgX1JlcyYKKyAgICAgIG9wZXJhdG9yKCkoX0NsYXNzKiBfX29iamVjdCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fb2JqZWN0LT4qX19wbTsgfQorCisgICAgICBjb25zdCBfUmVzJgorICAgICAgb3BlcmF0b3IoKShjb25zdCBfQ2xhc3MqIF9fb2JqZWN0KSBjb25zdAorICAgICAgeyByZXR1cm4gX19vYmplY3QtPipfX3BtOyB9CisKKyAgICAgIC8vIEhhbmRsZSBzbWFydCBwb2ludGVycyBhbmQgZGVyaXZlZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICB0eXBlbmFtZSBfUmVzdWx0X3R5cGU8X1RwPjo6dHlwZQorICAgICAgICBvcGVyYXRvcigpKF9UcCYgX191bmtub3duKSBjb25zdAorICAgICAgICB7IHJldHVybiBfTV9jYWxsKF9fdW5rbm93biwgJl9fdW5rbm93bik7IH0KKworICAgIHByaXZhdGU6CisgICAgICBfUmVzIF9DbGFzczo6Kl9fcG07CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBSZXR1cm5zIGEgZnVuY3Rpb24gb2JqZWN0IHRoYXQgZm9yd2FyZHMgdG8gdGhlIG1lbWJlcgorICAgKiAgcG9pbnRlciBAYSBwbS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NsYXNzPgorICAgIGlubGluZSBfTWVtX2ZuPF9UcCBfQ2xhc3M6Oio+CisgICAgbWVtX2ZuKF9UcCBfQ2xhc3M6OiogX19wbSkKKyAgICB7CisgICAgICByZXR1cm4gX01lbV9mbjxfVHAgX0NsYXNzOjoqPihfX3BtKTsKKyAgICB9CisKKyAgLyoqCisgICAqICBAYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdHlwZSBfVHAgaXMgYSBmdW5jdGlvbiBvYmplY3QKKyAgICogIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc3ViZXhwcmVzc2lvbiB3aGVuIGV2YWx1YXRpbmcgY2FsbHMgdG8KKyAgICogIGZ1bmN0aW9uIG9iamVjdHMgcmV0dXJuZWQgYnkgYmluZCgpLiBbVFIxIDMuNi4xXQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb24KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNvbnN0IGJvb2wgaXNfYmluZF9leHByZXNzaW9uPF9UcD46OnZhbHVlOworCisgIC8qKgorICAgKiAgQGJyaWVmIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHR5cGUgX1RwIGlzIGEgcGxhY2Vob2xkZXIgaW4gYQorICAgKiAgYmluZCgpIGV4cHJlc3Npb24gYW5kLCBpZiBzbywgd2hpY2ggcGxhY2Vob2xkZXIgaXQgaXMuIFtUUjEgMy42LjJdCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3BsYWNlaG9sZGVyCisgICAgeyBzdGF0aWMgY29uc3QgaW50IHZhbHVlID0gMDsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY29uc3QgaW50IGlzX3BsYWNlaG9sZGVyPF9UcD46OnZhbHVlOworCisgIC8vLyBUaGUgdHlwZSBvZiBwbGFjZWhvbGRlciBvYmplY3RzIGRlZmluZWQgYnkgbGlic3RkYysrLgorICB0ZW1wbGF0ZTxpbnQgX051bT4gc3RydWN0IF9QbGFjZWhvbGRlciB7IH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKiBAbmFtZXNwYWNlIHN0ZDo6dHIxOjpwbGFjZWhvbGRlcnMKKyAgICogIEBicmllZiBTdWItbmFtZXNwYWNlIGZvciB0cjEvZnVuY3Rpb25hbC4KKyAgICovCisgIG5hbWVzcGFjZSBwbGFjZWhvbGRlcnMgCisgIHsgCisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICAgLyogIERlZmluZSBhIGxhcmdlIG51bWJlciBvZiBwbGFjZWhvbGRlcnMuIFRoZXJlIGlzIG5vIHdheSB0bworICAgICAqICBzaW1wbGlmeSB0aGlzIHdpdGggdmFyaWFkaWMgdGVtcGxhdGVzLCBiZWNhdXNlIHdlJ3JlIGludHJvZHVjaW5nCisgICAgICogIHVuaXF1ZSBuYW1lcyBmb3IgZWFjaC4KKyAgICAgKi8KKyAgICBuYW1lc3BhY2UgCisgICAgeworICAgICAgX1BsYWNlaG9sZGVyPDE+IF8xOworICAgICAgX1BsYWNlaG9sZGVyPDI+IF8yOworICAgICAgX1BsYWNlaG9sZGVyPDM+IF8zOworICAgICAgX1BsYWNlaG9sZGVyPDQ+IF80OworICAgICAgX1BsYWNlaG9sZGVyPDU+IF81OworICAgICAgX1BsYWNlaG9sZGVyPDY+IF82OworICAgICAgX1BsYWNlaG9sZGVyPDc+IF83OworICAgICAgX1BsYWNlaG9sZGVyPDg+IF84OworICAgICAgX1BsYWNlaG9sZGVyPDk+IF85OworICAgICAgX1BsYWNlaG9sZGVyPDEwPiBfMTA7CisgICAgICBfUGxhY2Vob2xkZXI8MTE+IF8xMTsKKyAgICAgIF9QbGFjZWhvbGRlcjwxMj4gXzEyOworICAgICAgX1BsYWNlaG9sZGVyPDEzPiBfMTM7CisgICAgICBfUGxhY2Vob2xkZXI8MTQ+IF8xNDsKKyAgICAgIF9QbGFjZWhvbGRlcjwxNT4gXzE1OworICAgICAgX1BsYWNlaG9sZGVyPDE2PiBfMTY7CisgICAgICBfUGxhY2Vob2xkZXI8MTc+IF8xNzsKKyAgICAgIF9QbGFjZWhvbGRlcjwxOD4gXzE4OworICAgICAgX1BsYWNlaG9sZGVyPDE5PiBfMTk7CisgICAgICBfUGxhY2Vob2xkZXI8MjA+IF8yMDsKKyAgICAgIF9QbGFjZWhvbGRlcjwyMT4gXzIxOworICAgICAgX1BsYWNlaG9sZGVyPDIyPiBfMjI7CisgICAgICBfUGxhY2Vob2xkZXI8MjM+IF8yMzsKKyAgICAgIF9QbGFjZWhvbGRlcjwyND4gXzI0OworICAgICAgX1BsYWNlaG9sZGVyPDI1PiBfMjU7CisgICAgICBfUGxhY2Vob2xkZXI8MjY+IF8yNjsKKyAgICAgIF9QbGFjZWhvbGRlcjwyNz4gXzI3OworICAgICAgX1BsYWNlaG9sZGVyPDI4PiBfMjg7CisgICAgICBfUGxhY2Vob2xkZXI8Mjk+IF8yOTsKKyAgICB9IAorICBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAgfQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorICAvKioKKyAgICogIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgaXNfcGxhY2Vob2xkZXIgdGhhdCBwcm92aWRlcyB0aGUgcGxhY2Vob2xkZXIKKyAgICogIG51bWJlciBmb3IgdGhlIHBsYWNlaG9sZGVyIG9iamVjdHMgZGVmaW5lZCBieSBsaWJzdGRjKysuCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX051bT4KKyAgICBzdHJ1Y3QgaXNfcGxhY2Vob2xkZXI8X1BsYWNlaG9sZGVyPF9OdW0+ID4KKyAgICB7IHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSBfTnVtOyB9OworCisgIHRlbXBsYXRlPGludCBfTnVtPgorICAgIGNvbnN0IGludCBpc19wbGFjZWhvbGRlcjxfUGxhY2Vob2xkZXI8X051bT4gPjo6dmFsdWU7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPGludCBfTnVtPgorICAgIHN0cnVjdCBpc19wbGFjZWhvbGRlcjxzdGQ6Ol9QbGFjZWhvbGRlcjxfTnVtPj4KKyAgICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8aW50LCBfTnVtPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTxpbnQgX051bT4KKyAgICBzdHJ1Y3QgaXNfcGxhY2Vob2xkZXI8Y29uc3Qgc3RkOjpfUGxhY2Vob2xkZXI8X051bT4+CisgICAgOiBzdGQ6OmludGVncmFsX2NvbnN0YW50PGludCwgX051bT4KKyAgICB7IH07CisjZW5kaWYKKworICAvKioKKyAgICogU3RvcmVzIGEgdHVwbGUgb2YgaW5kaWNlcy4gVXNlZCBieSBiaW5kKCkgdG8gZXh0cmFjdCB0aGUgZWxlbWVudHMKKyAgICogaW4gYSB0dXBsZS4gCisgICAqLworICB0ZW1wbGF0ZTxpbnQuLi4gX0luZGV4ZXM+CisgICAgc3RydWN0IF9JbmRleF90dXBsZSB7IH07CisKKyAgLy8vIEJ1aWxkcyBhbiBfSW5kZXhfdHVwbGU8MCwgMSwgMiwgLi4uLCBfTnVtLTE+LgorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfTnVtLCB0eXBlbmFtZSBfVHVwbGUgPSBfSW5kZXhfdHVwbGU8PiA+CisgICAgc3RydWN0IF9CdWlsZF9pbmRleF90dXBsZTsKKyAKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX051bSwgaW50Li4uIF9JbmRleGVzPiAKKyAgICBzdHJ1Y3QgX0J1aWxkX2luZGV4X3R1cGxlPF9OdW0sIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4gPgorICAgIDogX0J1aWxkX2luZGV4X3R1cGxlPF9OdW0gLSAxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4sIHNpemVvZi4uLihfSW5kZXhlcyk+ID4KKyAgICB7CisgICAgfTsKKworICB0ZW1wbGF0ZTxpbnQuLi4gX0luZGV4ZXM+CisgICAgc3RydWN0IF9CdWlsZF9pbmRleF90dXBsZTwwLCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4gX190eXBlOworICAgIH07CisKKyAgLyoqIAorICAgKiBVc2VkIGJ5IF9TYWZlX3R1cGxlX2VsZW1lbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyB0dXBsZQorICAgKiBlbGVtZW50IGF0IHRoaXMgcG9zaXRpb24uCisgICAqLworICBzdHJ1Y3QgX05vX3R1cGxlX2VsZW1lbnQ7CisKKyAgLyoqCisgICAqIEltcGxlbWVudGF0aW9uIGhlbHBlciBmb3IgX1NhZmVfdHVwbGVfZWxlbWVudC4gVGhpcyBwcmltYXJ5CisgICAqIHRlbXBsYXRlIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgaXQgaXMgc2FmZSB0byB1c2UgQGMKKyAgICogdHVwbGVfZWxlbWVudC4KKyAgICovCisgIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lIF9UdXBsZSwgYm9vbCBfSXNTYWZlPgorICAgIHN0cnVjdCBfU2FmZV90dXBsZV9lbGVtZW50X2ltcGwKKyAgICA6IHR1cGxlX2VsZW1lbnQ8X19pLCBfVHVwbGU+IHsgfTsKKworICAvKioKKyAgICogSW1wbGVtZW50YXRpb24gaGVscGVyIGZvciBfU2FmZV90dXBsZV9lbGVtZW50LiBUaGlzIHBhcnRpYWwKKyAgICogc3BlY2lhbGl6YXRpb24gaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBpdCBpcyBub3Qgc2FmZSB0byB1c2UgQGMKKyAgICogdHVwbGVfZWxlbWVudC4gV2UganVzdCByZXR1cm4gQGMgX05vX3R1cGxlX2VsZW1lbnQuCisgICAqLworICB0ZW1wbGF0ZTxpbnQgX19pLCB0eXBlbmFtZSBfVHVwbGU+CisgICAgc3RydWN0IF9TYWZlX3R1cGxlX2VsZW1lbnRfaW1wbDxfX2ksIF9UdXBsZSwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfTm9fdHVwbGVfZWxlbWVudCB0eXBlOworICAgIH07CisKKyAgLyoqCisgICAqIExpa2UgdHVwbGVfZWxlbWVudCwgYnV0IHJldHVybnMgQGMgX05vX3R1cGxlX2VsZW1lbnQgd2hlbgorICAgKiB0dXBsZV9lbGVtZW50IHdvdWxkIHJldHVybiBhbiBlcnJvci4KKyAgICovCisgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUgX1R1cGxlPgorICAgc3RydWN0IF9TYWZlX3R1cGxlX2VsZW1lbnQKKyAgIDogX1NhZmVfdHVwbGVfZWxlbWVudF9pbXBsPF9faSwgX1R1cGxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2kgPj0gMCAmJiBfX2kgPCB0dXBsZV9zaXplPF9UdXBsZT46OnZhbHVlKT4KKyAgIHsKKyAgIH07CisKKyAgLyoqCisgICAqICBNYXBzIGFuIGFyZ3VtZW50IHRvIGJpbmQoKSBpbnRvIGFuIGFjdHVhbCBhcmd1bWVudCB0byB0aGUgYm91bmQKKyAgICogIGZ1bmN0aW9uIG9iamVjdCBbVFIxIDMuNi4zLzVdLiBPbmx5IHRoZSBmaXJzdCBwYXJhbWV0ZXIgc2hvdWxkCisgICAqICBiZSBzcGVjaWZpZWQ6IHRoZSByZXN0IGFyZSB1c2VkIHRvIGRldGVybWluZSBhbW9uZyB0aGUgdmFyaW91cworICAgKiAgaW1wbGVtZW50YXRpb25zLiBOb3RlIHRoYXQsIGFsdGhvdWdoIHRoaXMgY2xhc3MgaXMgYSBmdW5jdGlvbgorICAgKiAgb2JqZWN0LCBpdCBpc24ndCBlbnRpcmVseSBub3JtYWwgYmVjYXVzZSBpdCB0YWtlcyBvbmx5IHR3bworICAgKiAgcGFyYW1ldGVycyByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlCisgICAqICBiaW5kIGV4cHJlc3Npb24uIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIGJvdW5kIGFyZ3VtZW50IGFuZAorICAgKiAgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgYSB0dXBsZSBjb250YWluaW5nIHJlZmVyZW5jZXMgdG8gdGhlCisgICAqICByZXN0IG9mIHRoZSBhcmd1bWVudHMuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnLAorICAgICAgICAgICBib29sIF9Jc0JpbmRFeHAgPSBpc19iaW5kX2V4cHJlc3Npb248X0FyZz46OnZhbHVlLAorICAgICAgICAgICBib29sIF9Jc1BsYWNlaG9sZGVyID0gKGlzX3BsYWNlaG9sZGVyPF9Bcmc+Ojp2YWx1ZSA+IDApPgorICAgIGNsYXNzIF9NdTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyByZWZlcmVuY2Vfd3JhcHBlcjxfVHA+LCByZXR1cm5zIHRoZQorICAgKiAgdW5kZXJseWluZyByZWZlcmVuY2UuIFtUUjEgMy42LjMvNSBidWxsZXQgMV0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfTXU8cmVmZXJlbmNlX3dyYXBwZXI8X1RwPiwgZmFsc2UsIGZhbHNlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCYgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8qIE5vdGU6IFRoaXMgd29uJ3QgYWN0dWFsbHkgd29yayBmb3IgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAqIHJlZmVyZW5jZV93cmFwcGVycywgYmVjYXVzZSByZWZlcmVuY2Vfd3JhcHBlcjo6Z2V0KCkgaXMgY29uc3QKKyAgICAgICAqIGJ1dCBub3Qgdm9sYXRpbGUtcXVhbGlmaWVkLiBUaGlzIG1pZ2h0IGJlIGEgZGVmZWN0IGluIHRoZSBUUi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWUmVmLCB0eXBlbmFtZSBfVHVwbGU+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0NWUmVmJiBfX2FyZywgY29uc3QgX1R1cGxlJikgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeyByZXR1cm4gX19hcmcuZ2V0KCk7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgYmluZCBleHByZXNzaW9uLCB3ZSBpbnZva2UgdGhlIHVuZGVybHlpbmcKKyAgICogIGZ1bmN0aW9uIG9iamVjdCB3aXRoIHRoZSBzYW1lIGN2LXF1YWxpZmllcnMgYXMgd2UgYXJlIGdpdmVuIGFuZAorICAgKiAgcGFzcyBhbG9uZyBhbGwgb2Ygb3VyIGFyZ3VtZW50cyAodW53cmFwcGVkKS4gW1RSMSAzLjYuMy81IGJ1bGxldCAyXQorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KKyAgICBjbGFzcyBfTXU8X0FyZywgdHJ1ZSwgZmFsc2U+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+IGNsYXNzIHJlc3VsdDsKKworICAgICAgLy8gRGV0ZXJtaW5lIHRoZSByZXN1bHQgdHlwZSB3aGVuIHdlIHBhc3MgdGhlIGFyZ3VtZW50cyBhbG9uZy4gVGhpcworICAgICAgLy8gaW52b2x2ZXMgcGFzc2luZyBhbG9uZyB0aGUgY3YtcXVhbGlmaWVycyBwbGFjZWQgb24gX011IGFuZAorICAgICAgLy8gdW53cmFwcGluZyB0aGUgYXJndW1lbnQgYnVuZGxlLgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWTXUsIHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIGNsYXNzIHJlc3VsdDxfQ1ZNdShfQ1ZBcmcsIHR1cGxlPF9BcmdzLi4uPik+CisJOiBwdWJsaWMgcmVzdWx0X29mPF9DVkFyZyhfQXJncy4uLik+IHsgfTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWQXJnLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPF9DVkFyZyhfQXJncy4uLik+Ojp0eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0NWQXJnJiBfX2FyZywKKwkJICAgY29uc3QgdHVwbGU8X0FyZ3MuLi4+JiBfX3R1cGxlKSBjb25zdCB2b2xhdGlsZQorICAgICAgICB7CisJICAvLyBDb25zdHJ1Y3QgYW4gaW5kZXggdHVwbGUgYW5kIGZvcndhcmQgdG8gX19jYWxsCisJICB0eXBlZGVmIHR5cGVuYW1lIF9CdWlsZF9pbmRleF90dXBsZTxzaXplb2YuLi4oX0FyZ3MpPjo6X190eXBlCisJICAgIF9JbmRleGVzOworCSAgcmV0dXJuIHRoaXMtPl9fY2FsbChfX2FyZywgX190dXBsZSwgX0luZGV4ZXMoKSk7CisJfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIEludm9rZXMgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0IF9fYXJnIGJ5IHVucGFja2luZyBhbGwKKyAgICAgIC8vIG9mIHRoZSBhcmd1bWVudHMgaW4gdGhlIHR1cGxlLiAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPF9DVkFyZyhfQXJncy4uLik+Ojp0eXBlCisgICAgICAgIF9fY2FsbChfQ1ZBcmcmIF9fYXJnLCBjb25zdCB0dXBsZTxfQXJncy4uLj4mIF9fdHVwbGUsCisJICAgICAgIGNvbnN0IF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4mKSBjb25zdCB2b2xhdGlsZQorICAgICAgICB7CisJICByZXR1cm4gX19hcmcodHIxOjpnZXQ8X0luZGV4ZXM+KF9fdHVwbGUpLi4uKTsKKwl9CisgICAgfTsKKworICAvKioKKyAgICogIElmIHRoZSBhcmd1bWVudCBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgTnRoIGFyZ3VtZW50LCByZXR1cm5zCisgICAqICBhIHJlZmVyZW5jZSB0byB0aGUgTnRoIGFyZ3VtZW50IHRvIHRoZSBiaW5kIGZ1bmN0aW9uIG9iamVjdC4KKyAgICogIFtUUjEgMy42LjMvNSBidWxsZXQgM10KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgY2xhc3MgX011PF9BcmcsIGZhbHNlLCB0cnVlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPiBjbGFzcyByZXN1bHQ7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVk11LCB0eXBlbmFtZSBfQ1ZBcmcsIHR5cGVuYW1lIF9UdXBsZT4KKyAgICAgICAgY2xhc3MgcmVzdWx0PF9DVk11KF9DVkFyZywgX1R1cGxlKT4KKyAgICAgICAgeworCSAgLy8gQWRkIGEgcmVmZXJlbmNlLCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUgZm9yIHVzLgorCSAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gYmUgYSBsaXR0bGUgYml0IHNsb3BweSBpbiBjb25zdHJ1Y3RpbmcKKwkgIC8vIHRoZSB0dXBsZSB0aGF0IHdlIHBhc3MgdG8gcmVzdWx0X29mPC4uLj4uCisJICB0eXBlZGVmIHR5cGVuYW1lIF9TYWZlX3R1cGxlX2VsZW1lbnQ8KGlzX3BsYWNlaG9sZGVyPF9Bcmc+Ojp2YWx1ZQorCQkJCQkJLSAxKSwgX1R1cGxlPjo6dHlwZQorCSAgICBfX2Jhc2VfdHlwZTsKKworCXB1YmxpYzoKKwkgIHR5cGVkZWYgdHlwZW5hbWUgYWRkX3JlZmVyZW5jZTxfX2Jhc2VfdHlwZT46OnR5cGUgdHlwZTsKKwl9OworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHVwbGU+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdDxfTXUoX0FyZywgX1R1cGxlKT46OnR5cGUKKyAgICAgICAgb3BlcmF0b3IoKShjb25zdCB2b2xhdGlsZSBfQXJnJiwgY29uc3QgX1R1cGxlJiBfX3R1cGxlKSBjb25zdCB2b2xhdGlsZQorICAgICAgICB7CisJICByZXR1cm4gOjpzdGQ6OnRyMTo6Z2V0PChpc19wbGFjZWhvbGRlcjxfQXJnPjo6dmFsdWUgLSAxKT4oX190dXBsZSk7CisJfQorICAgIH07CisKKyAgLyoqCisgICAqICBJZiB0aGUgYXJndW1lbnQgaXMganVzdCBhIHZhbHVlLCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoYXQKKyAgICogIHZhbHVlLiBUaGUgY3YtcXVhbGlmaWVycyBvbiB0aGUgcmVmZXJlbmNlIGFyZSB0aGUgc2FtZSBhcyB0aGUKKyAgICogIGN2LXF1YWxpZmllcnMgb24gdGhlIF9NdSBvYmplY3QuIFtUUjEgMy42LjMvNSBidWxsZXQgNF0KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+CisgICAgY2xhc3MgX011PF9BcmcsIGZhbHNlLCBmYWxzZT4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4gc3RydWN0IHJlc3VsdDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWTXUsIHR5cGVuYW1lIF9DVkFyZywgdHlwZW5hbWUgX1R1cGxlPgorICAgICAgICBzdHJ1Y3QgcmVzdWx0PF9DVk11KF9DVkFyZywgX1R1cGxlKT4KKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBhZGRfcmVmZXJlbmNlPF9DVkFyZz46OnR5cGUgdHlwZTsKKwl9OworCisgICAgICAvLyBQaWNrIHVwIHRoZSBjdi1xdWFsaWZpZXJzIG9mIHRoZSBhcmd1bWVudAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NWQXJnLCB0eXBlbmFtZSBfVHVwbGU+CisgICAgICAgIF9DVkFyZyYKKyAgICAgICAgb3BlcmF0b3IoKShfQ1ZBcmcmIF9fYXJnLCBjb25zdCBfVHVwbGUmKSBjb25zdCB2b2xhdGlsZQorICAgICAgICB7IHJldHVybiBfX2FyZzsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBNYXBzIG1lbWJlciBwb2ludGVycyBpbnRvIGluc3RhbmNlcyBvZiBfTWVtX2ZuIGJ1dCBsZWF2ZXMgYWxsCisgICAqICBvdGhlciBmdW5jdGlvbiBvYmplY3RzIHVudG91Y2hlZC4gVXNlZCBieSB0cjE6OmJpbmQoKS4gVGhlCisgICAqICBwcmltYXJ5IHRlbXBsYXRlIGhhbmRsZXMgdGhlIG5vbi0tbWVtYmVyLXBvaW50ZXIgY2FzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXIKKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCB0eXBlOworICAgICAgCisgICAgICBzdGF0aWMgY29uc3QgX1RwJgorICAgICAgX19kb193cmFwKGNvbnN0IF9UcCYgX194KQorICAgICAgeyByZXR1cm4gX194OyB9CisgICAgfTsKKworICAvKioKKyAgICogIE1hcHMgbWVtYmVyIHBvaW50ZXJzIGludG8gaW5zdGFuY2VzIG9mIF9NZW1fZm4gYnV0IGxlYXZlcyBhbGwKKyAgICogIG90aGVyIGZ1bmN0aW9uIG9iamVjdHMgdW50b3VjaGVkLiBVc2VkIGJ5IHRyMTo6YmluZCgpLiBUaGlzCisgICAqICBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGhhbmRsZXMgdGhlIG1lbWJlciBwb2ludGVyIGNhc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBzdHJ1Y3QgX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXI8X1RwIF9DbGFzczo6Kj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9NZW1fZm48X1RwIF9DbGFzczo6Kj4gdHlwZTsKKyAgICAgIAorICAgICAgc3RhdGljIHR5cGUKKyAgICAgIF9fZG9fd3JhcChfVHAgX0NsYXNzOjoqIF9fcG0pCisgICAgICB7IHJldHVybiB0eXBlKF9fcG0pOyB9CisgICAgfTsKKworICAvLy8gVHlwZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0IHJldHVybmVkIGZyb20gYmluZCgpLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBfQmluZDsKKworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9Cb3VuZF9hcmdzPgorICAgIGNsYXNzIF9CaW5kPF9GdW5jdG9yKF9Cb3VuZF9hcmdzLi4uKT4KKyAgICA6IHB1YmxpYyBfV2Vha19yZXN1bHRfdHlwZTxfRnVuY3Rvcj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5kIF9fc2VsZl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQnVpbGRfaW5kZXhfdHVwbGU8c2l6ZW9mLi4uKF9Cb3VuZF9hcmdzKT46Ol9fdHlwZSAKKyAgICAgICAgX0JvdW5kX2luZGV4ZXM7CisKKyAgICAgIF9GdW5jdG9yIF9NX2Y7CisgICAgICB0dXBsZTxfQm91bmRfYXJncy4uLj4gX01fYm91bmRfYXJnczsKKworICAgICAgLy8gQ2FsbCB1bnF1YWxpZmllZAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPAorICAgICAgICAgICAgICAgICAgIF9GdW5jdG9yKHR5cGVuYW1lIHJlc3VsdF9vZjxfTXU8X0JvdW5kX2FyZ3M+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfQm91bmRfYXJncywgdHVwbGU8X0FyZ3MuLi4+KT46OnR5cGUuLi4pCisgICAgICAgICAgICAgICAgID46OnR5cGUKKyAgICAgICAgX19jYWxsKGNvbnN0IHR1cGxlPF9BcmdzLi4uPiYgX19hcmdzLCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+KQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisgICAgICAgICAgICAgICAgICAgICAgKHRyMTo6Z2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgX19hcmdzKS4uLik7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPAorICAgICAgICAgICAgICAgICAgIGNvbnN0IF9GdW5jdG9yKHR5cGVuYW1lIHJlc3VsdF9vZjxfTXU8X0JvdW5kX2FyZ3M+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IF9Cb3VuZF9hcmdzLCB0dXBsZTxfQXJncy4uLj4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjo6dHlwZS4uLik+Ojp0eXBlCisgICAgICAgIF9fY2FsbChjb25zdCB0dXBsZTxfQXJncy4uLj4mIF9fYXJncywgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgICh0cjE6OmdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgYXMgdm9sYXRpbGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjwKKyAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBfRnVuY3Rvcih0eXBlbmFtZSByZXN1bHRfb2Y8X011PF9Cb3VuZF9hcmdzPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2xhdGlsZSBfQm91bmRfYXJncywgdHVwbGU8X0FyZ3MuLi4+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OnR5cGUuLi4pPjo6dHlwZQorICAgICAgICBfX2NhbGwoY29uc3QgdHVwbGU8X0FyZ3MuLi4+JiBfX2FyZ3MsIAorICAgICAgICAgICAgICAgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgICh0cjE6OmdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3Qgdm9sYXRpbGUKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSBfRnVuY3Rvcih0eXBlbmFtZSByZXN1bHRfb2Y8X011PF9Cb3VuZF9hcmdzPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2xhdGlsZSBfQm91bmRfYXJncywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGU8X0FyZ3MuLi4+KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID46OnR5cGUuLi4pPjo6dHlwZQorICAgICAgICBfX2NhbGwoY29uc3QgdHVwbGU8X0FyZ3MuLi4+JiBfX2FyZ3MsIAorICAgICAgICAgICAgICAgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgICh0cjE6OmdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICAgcHVibGljOgorICAgICAgZXhwbGljaXQgX0JpbmQoX0Z1bmN0b3IgX19mLCBfQm91bmRfYXJncy4uLiBfX2JvdW5kX2FyZ3MpCisgICAgICAgIDogX01fZihfX2YpLCBfTV9ib3VuZF9hcmdzKF9fYm91bmRfYXJncy4uLikgeyB9CisKKyAgICAgIC8vIENhbGwgdW5xdWFsaWZpZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8CisgICAgICAgICAgICAgICAgICAgX0Z1bmN0b3IodHlwZW5hbWUgcmVzdWx0X29mPF9NdTxfQm91bmRfYXJncz4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9Cb3VuZF9hcmdzLCB0dXBsZTxfQXJncy4uLj4pPjo6dHlwZS4uLikKKyAgICAgICAgICAgICAgICAgPjo6dHlwZQorICAgICAgICBvcGVyYXRvcigpKF9BcmdzJi4uLiBfX2FyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy0+X19jYWxsKHRyMTo6dGllKF9fYXJncy4uLiksIF9Cb3VuZF9pbmRleGVzKCkpOworICAgICAgICB9CisKKyAgICAgIC8vIENhbGwgYXMgY29uc3QKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgICB0eXBlbmFtZSByZXN1bHRfb2Y8CisgICAgICAgICAgICAgICAgICAgY29uc3QgX0Z1bmN0b3IodHlwZW5hbWUgcmVzdWx0X29mPF9NdTxfQm91bmRfYXJncz4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IF9Cb3VuZF9hcmdzLCB0dXBsZTxfQXJncy4uLj4pPjo6dHlwZS4uLikKKyAgICAgICAgICAgICAgICAgPjo6dHlwZQorICAgICAgICBvcGVyYXRvcigpKF9BcmdzJi4uLiBfX2FyZ3MpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy0+X19jYWxsKHRyMTo6dGllKF9fYXJncy4uLiksIF9Cb3VuZF9pbmRleGVzKCkpOworICAgICAgICB9CisKKworICAgICAgLy8gQ2FsbCBhcyB2b2xhdGlsZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgICAgIHR5cGVuYW1lIHJlc3VsdF9vZjwKKyAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSBfRnVuY3Rvcih0eXBlbmFtZSByZXN1bHRfb2Y8X011PF9Cb3VuZF9hcmdzPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9sYXRpbGUgX0JvdW5kX2FyZ3MsIHR1cGxlPF9BcmdzLi4uPik+Ojp0eXBlLi4uKQorICAgICAgICAgICAgICAgICA+Ojp0eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmLi4uIF9fYXJncykgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGwodHIxOjp0aWUoX19hcmdzLi4uKSwgX0JvdW5kX2luZGV4ZXMoKSk7CisgICAgICAgIH0KKworCisgICAgICAvLyBDYWxsIGFzIGNvbnN0IHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgdHlwZW5hbWUgcmVzdWx0X29mPAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIF9GdW5jdG9yKHR5cGVuYW1lIHJlc3VsdF9vZjxfTXU8X0JvdW5kX2FyZ3M+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2xhdGlsZSBfQm91bmRfYXJncywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlPF9BcmdzLi4uPik+Ojp0eXBlLi4uKQorICAgICAgICAgICAgICAgICA+Ojp0eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX0FyZ3MmLi4uIF9fYXJncykgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiB0aGlzLT5fX2NhbGwodHIxOjp0aWUoX19hcmdzLi4uKSwgX0JvdW5kX2luZGV4ZXMoKSk7CisgICAgICAgIH0KKyAgICB9OworCisgIC8vLyBUeXBlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QgcmV0dXJuZWQgZnJvbSBiaW5kPFI+KCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IF9CaW5kX3Jlc3VsdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0JvdW5kX2FyZ3M+CisgICAgY2xhc3MgX0JpbmRfcmVzdWx0PF9SZXN1bHQsIF9GdW5jdG9yKF9Cb3VuZF9hcmdzLi4uKT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9CaW5kX3Jlc3VsdCBfX3NlbGZfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J1aWxkX2luZGV4X3R1cGxlPHNpemVvZi4uLihfQm91bmRfYXJncyk+OjpfX3R5cGUgCisgICAgICAgIF9Cb3VuZF9pbmRleGVzOworCisgICAgICBfRnVuY3RvciBfTV9mOworICAgICAgdHVwbGU8X0JvdW5kX2FyZ3MuLi4+IF9NX2JvdW5kX2FyZ3M7CisKKyAgICAgIC8vIENhbGwgdW5xdWFsaWZpZWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzLCBpbnQuLi4gX0luZGV4ZXM+CisgICAgICAgIF9SZXN1bHQKKyAgICAgICAgX19jYWxsKGNvbnN0IHR1cGxlPF9BcmdzLi4uPiYgX19hcmdzLCBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+KQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisgICAgICAgICAgICAgICAgICAgICAgKHRyMTo6Z2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgX19hcmdzKS4uLik7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgX1Jlc3VsdAorICAgICAgICBfX2NhbGwoY29uc3QgdHVwbGU8X0FyZ3MuLi4+JiBfX2FyZ3MsIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLj4pIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICByZXR1cm4gX01fZihfTXU8X0JvdW5kX2FyZ3M+KCkKKyAgICAgICAgICAgICAgICAgICAgICAodHIxOjpnZXQ8X0luZGV4ZXM+KF9NX2JvdW5kX2FyZ3MpLCBfX2FyZ3MpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncywgaW50Li4uIF9JbmRleGVzPgorICAgICAgICBfUmVzdWx0CisgICAgICAgIF9fY2FsbChjb25zdCB0dXBsZTxfQXJncy4uLj4mIF9fYXJncywgCisgICAgICAgICAgICAgICBfSW5kZXhfdHVwbGU8X0luZGV4ZXMuLi4+KSB2b2xhdGlsZQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIF9NX2YoX011PF9Cb3VuZF9hcmdzPigpCisgICAgICAgICAgICAgICAgICAgICAgKHRyMTo6Z2V0PF9JbmRleGVzPihfTV9ib3VuZF9hcmdzKSwgX19hcmdzKS4uLik7CisgICAgICAgIH0KKworICAgICAgLy8gQ2FsbCBhcyBjb25zdCB2b2xhdGlsZQorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsIGludC4uLiBfSW5kZXhlcz4KKyAgICAgICAgX1Jlc3VsdAorICAgICAgICBfX2NhbGwoY29uc3QgdHVwbGU8X0FyZ3MuLi4+JiBfX2FyZ3MsIAorICAgICAgICAgICAgICAgX0luZGV4X3R1cGxlPF9JbmRleGVzLi4uPikgY29uc3Qgdm9sYXRpbGUKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBfTV9mKF9NdTxfQm91bmRfYXJncz4oKQorICAgICAgICAgICAgICAgICAgICAgICh0cjE6OmdldDxfSW5kZXhlcz4oX01fYm91bmRfYXJncyksIF9fYXJncykuLi4pOworICAgICAgICB9CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfQmluZF9yZXN1bHQoX0Z1bmN0b3IgX19mLCBfQm91bmRfYXJncy4uLiBfX2JvdW5kX2FyZ3MpCisgICAgICA6IF9NX2YoX19mKSwgX01fYm91bmRfYXJncyhfX2JvdW5kX2FyZ3MuLi4pIHsgfQorCisgICAgICAvLyBDYWxsIHVucXVhbGlmaWVkCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYuLi4gX19hcmdzKQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRoaXMtPl9fY2FsbCh0cjE6OnRpZShfX2FyZ3MuLi4pLCBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYuLi4gX19hcmdzKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRoaXMtPl9fY2FsbCh0cjE6OnRpZShfX2FyZ3MuLi4pLCBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYuLi4gX19hcmdzKSB2b2xhdGlsZQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRoaXMtPl9fY2FsbCh0cjE6OnRpZShfX2FyZ3MuLi4pLCBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorCisgICAgICAvLyBDYWxsIGFzIGNvbnN0IHZvbGF0aWxlCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfQXJncyYuLi4gX19hcmdzKSBjb25zdCB2b2xhdGlsZQorICAgICAgICB7CisgICAgICAgICAgcmV0dXJuIHRoaXMtPl9fY2FsbCh0cjE6OnRpZShfX2FyZ3MuLi4pLCBfQm91bmRfaW5kZXhlcygpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgLy8vIENsYXNzIHRlbXBsYXRlIF9CaW5kIGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPF9CaW5kPF9TaWduYXR1cmU+ID4KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIGNvbnN0IGJvb2wgaXNfYmluZF9leHByZXNzaW9uPF9CaW5kPF9TaWduYXR1cmU+ID46OnZhbHVlOworCisgIC8vLyBDbGFzcyB0ZW1wbGF0ZSBfQmluZCBpcyBhbHdheXMgYSBiaW5kIGV4cHJlc3Npb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxjb25zdCBfQmluZDxfU2lnbmF0dXJlPiA+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBjb25zdCBib29sIGlzX2JpbmRfZXhwcmVzc2lvbjxjb25zdCBfQmluZDxfU2lnbmF0dXJlPiA+Ojp2YWx1ZTsKKworICAvLy8gQ2xhc3MgdGVtcGxhdGUgX0JpbmQgaXMgYWx3YXlzIGEgYmluZCBleHByZXNzaW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248dm9sYXRpbGUgX0JpbmQ8X1NpZ25hdHVyZT4gPgorICAgIHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgY29uc3QgYm9vbCBpc19iaW5kX2V4cHJlc3Npb248dm9sYXRpbGUgX0JpbmQ8X1NpZ25hdHVyZT4gPjo6dmFsdWU7CisKKyAgLy8vIENsYXNzIHRlbXBsYXRlIF9CaW5kIGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPGNvbnN0IHZvbGF0aWxlIF9CaW5kPF9TaWduYXR1cmU+ID4KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIGNvbnN0IGJvb2wgaXNfYmluZF9leHByZXNzaW9uPGNvbnN0IHZvbGF0aWxlIF9CaW5kPF9TaWduYXR1cmU+ID46OnZhbHVlOworCisgIC8vLyBDbGFzcyB0ZW1wbGF0ZSBfQmluZF9yZXN1bHQgaXMgYWx3YXlzIGEgYmluZCBleHByZXNzaW9uLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248X0JpbmRfcmVzdWx0PF9SZXN1bHQsIF9TaWduYXR1cmU+ID4KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIGNvbnN0IGJvb2wgaXNfYmluZF9leHByZXNzaW9uPF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPiA+Ojp2YWx1ZTsKKworICAvLy8gQ2xhc3MgdGVtcGxhdGUgX0JpbmRfcmVzdWx0IGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPGNvbnN0IF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPiA+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBjb25zdCBib29sCisgICAgaXNfYmluZF9leHByZXNzaW9uPGNvbnN0IF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPiA+Ojp2YWx1ZTsKKworICAvLy8gQ2xhc3MgdGVtcGxhdGUgX0JpbmRfcmVzdWx0IGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPHZvbGF0aWxlIF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPiA+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBjb25zdCBib29sCisgICAgaXNfYmluZF9leHByZXNzaW9uPHZvbGF0aWxlIF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPiA+Ojp2YWx1ZTsKKworICAvLy8gQ2xhc3MgdGVtcGxhdGUgX0JpbmRfcmVzdWx0IGlzIGFsd2F5cyBhIGJpbmQgZXhwcmVzc2lvbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QKKyAgICBpc19iaW5kX2V4cHJlc3Npb248Y29uc3Qgdm9sYXRpbGUgX0JpbmRfcmVzdWx0PF9SZXN1bHQsIF9TaWduYXR1cmU+ID4KKyAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIGNvbnN0IGJvb2wKKyAgICBpc19iaW5kX2V4cHJlc3Npb248Y29uc3Qgdm9sYXRpbGUgX0JpbmRfcmVzdWx0PF9SZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU2lnbmF0dXJlPiA+Ojp2YWx1ZTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPHN0ZDo6X0JpbmQ8X1NpZ25hdHVyZT4+CisgICAgOiB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxjb25zdCBzdGQ6Ol9CaW5kPF9TaWduYXR1cmU+PgorICAgIDogdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248dm9sYXRpbGUgc3RkOjpfQmluZDxfU2lnbmF0dXJlPj4KKyAgICA6IHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPGNvbnN0IHZvbGF0aWxlIHN0ZDo6X0JpbmQ8X1NpZ25hdHVyZT4+CisgICAgOiB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxzdGQ6Ol9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPj4KKyAgICA6IHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPGNvbnN0IHN0ZDo6X0JpbmRfcmVzdWx0PF9SZXN1bHQsIF9TaWduYXR1cmU+PgorICAgIDogdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248dm9sYXRpbGUgc3RkOjpfQmluZF9yZXN1bHQ8X1Jlc3VsdCwgX1NpZ25hdHVyZT4+CisgICAgOiB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxjb25zdCB2b2xhdGlsZSBzdGQ6Ol9CaW5kX3Jlc3VsdDxfUmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NpZ25hdHVyZT4+CisgICAgOiB0cnVlX3R5cGUgeyB9OworI2VuZGlmCisKKyAgLy8vIGJpbmQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBpbmxpbmUKKyAgICBfQmluZDx0eXBlbmFtZSBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjxfRnVuY3Rvcj46OnR5cGUoX0FyZ1R5cGVzLi4uKT4KKyAgICBiaW5kKF9GdW5jdG9yIF9fZiwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICB7CisgICAgICB0eXBlZGVmIF9NYXliZV93cmFwX21lbWJlcl9wb2ludGVyPF9GdW5jdG9yPiBfX21heWJlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fbWF5YmVfdHlwZTo6dHlwZSBfX2Z1bmN0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0JpbmQ8X19mdW5jdG9yX3R5cGUoX0FyZ1R5cGVzLi4uKT4gX19yZXN1bHRfdHlwZTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF90eXBlKF9fbWF5YmVfdHlwZTo6X19kb193cmFwKF9fZiksIF9fYXJncy4uLik7CisgICAgfSAKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGlubGluZQorICAgIF9CaW5kX3Jlc3VsdDxfUmVzdWx0LAorCQkgdHlwZW5hbWUgX01heWJlX3dyYXBfbWVtYmVyX3BvaW50ZXI8X0Z1bmN0b3I+Ojp0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9BcmdUeXBlcy4uLik+CisgICAgYmluZChfRnVuY3RvciBfX2YsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpCisgICAgeworICAgICAgdHlwZWRlZiBfTWF5YmVfd3JhcF9tZW1iZXJfcG9pbnRlcjxfRnVuY3Rvcj4gX19tYXliZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX21heWJlX3R5cGU6OnR5cGUgX19mdW5jdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIF9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfX2Z1bmN0b3JfdHlwZShfQXJnVHlwZXMuLi4pPgorCV9fcmVzdWx0X3R5cGU7CisgICAgICByZXR1cm4gX19yZXN1bHRfdHlwZShfX21heWJlX3R5cGU6Ol9fZG9fd3JhcChfX2YpLCBfX2FyZ3MuLi4pOworICAgIH0KKworICAvKioKKyAgICogIEBicmllZiBFeGNlcHRpb24gY2xhc3MgdGhyb3duIHdoZW4gY2xhc3MgdGVtcGxhdGUgZnVuY3Rpb24ncworICAgKiAgb3BlcmF0b3IoKSBpcyBjYWxsZWQgd2l0aCBhbiBlbXB0eSB0YXJnZXQuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqLworICBjbGFzcyBiYWRfZnVuY3Rpb25fY2FsbCA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7IH07CisKKyAgLyoqCisgICAqICBUaGUgaW50ZWdyYWwgY29uc3RhbnQgZXhwcmVzc2lvbiAwIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBhCisgICAqICBwb2ludGVyIHRvIHRoaXMgdHlwZS4gSXQgaXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgdG8KKyAgICogIGFjY2VwdCBOVUxMIHBvaW50ZXJzLgorICAgKi8KKyAgc3RydWN0IF9NX2NsZWFyX3R5cGU7CisKKyAgLyoqCisgICAqICBUcmFpdCBpZGVudGlmeWluZyBAYSBsb2NhdGlvbi1pbnZhcmlhbnQgdHlwZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICogIGFkZHJlc3Mgb2YgdGhlIG9iamVjdCAob3IgYW55IG9mIGl0cyBtZW1iZXJzKSB3aWxsIG5vdCBlc2NhcGUuCisgICAqICBBbHNvIGltcGxpZXMgYSB0cml2aWFsIGNvcHkgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbG9jYXRpb25faW52YXJpYW50CisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxib29sLAorICAgICAgICAgICAgICAgICAgICAgICAgKGlzX3BvaW50ZXI8X1RwPjo6dmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc19tZW1iZXJfcG9pbnRlcjxfVHA+Ojp2YWx1ZSk+CisgICAgeworICAgIH07CisKKyAgY2xhc3MgX1VuZGVmaW5lZF9jbGFzczsKKworICB1bmlvbiBfTm9jb3B5X3R5cGVzCisgIHsKKyAgICB2b2lkKiAgICAgICBfTV9vYmplY3Q7CisgICAgY29uc3Qgdm9pZCogX01fY29uc3Rfb2JqZWN0OworICAgIHZvaWQgKCpfTV9mdW5jdGlvbl9wb2ludGVyKSgpOworICAgIHZvaWQgKF9VbmRlZmluZWRfY2xhc3M6OipfTV9tZW1iZXJfcG9pbnRlcikoKTsKKyAgfTsKKworICB1bmlvbiBfQW55X2RhdGEKKyAgeworICAgIHZvaWQqICAgICAgIF9NX2FjY2VzcygpICAgICAgIHsgcmV0dXJuICZfTV9wb2RfZGF0YVswXTsgfQorICAgIGNvbnN0IHZvaWQqIF9NX2FjY2VzcygpIGNvbnN0IHsgcmV0dXJuICZfTV9wb2RfZGF0YVswXTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgX1RwJgorICAgICAgX01fYWNjZXNzKCkKKyAgICAgIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHAqPihfTV9hY2Nlc3MoKSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIGNvbnN0IF9UcCYKKyAgICAgIF9NX2FjY2VzcygpIGNvbnN0CisgICAgICB7IHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgX1RwKj4oX01fYWNjZXNzKCkpOyB9CisKKyAgICBfTm9jb3B5X3R5cGVzIF9NX3VudXNlZDsKKyAgICBjaGFyIF9NX3BvZF9kYXRhW3NpemVvZihfTm9jb3B5X3R5cGVzKV07CisgIH07CisKKyAgZW51bSBfTWFuYWdlcl9vcGVyYXRpb24KKyAgeworICAgIF9fZ2V0X3R5cGVfaW5mbywKKyAgICBfX2dldF9mdW5jdG9yX3B0ciwKKyAgICBfX2Nsb25lX2Z1bmN0b3IsCisgICAgX19kZXN0cm95X2Z1bmN0b3IKKyAgfTsKKworICAvLyBTaW1wbGUgdHlwZSB3cmFwcGVyIHRoYXQgaGVscHMgYXZvaWQgYW5ub3lpbmcgY29uc3QgcHJvYmxlbXMKKyAgLy8gd2hlbiBjYXN0aW5nIGJldHdlZW4gdm9pZCBwb2ludGVycyBhbmQgcG9pbnRlcnMtdG8tcG9pbnRlcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX1NpbXBsZV90eXBlX3dyYXBwZXIKKyAgICB7CisgICAgICBfU2ltcGxlX3R5cGVfd3JhcHBlcihfVHAgX192YWx1ZSkgOiBfX3ZhbHVlKF9fdmFsdWUpIHsgfQorCisgICAgICBfVHAgX192YWx1ZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19sb2NhdGlvbl9pbnZhcmlhbnQ8X1NpbXBsZV90eXBlX3dyYXBwZXI8X1RwPiA+CisgICAgOiBfX2lzX2xvY2F0aW9uX2ludmFyaWFudDxfVHA+CisgICAgeworICAgIH07CisKKyAgLy8gQ29udmVydHMgYSByZWZlcmVuY2UgdG8gYSBmdW5jdGlvbiBvYmplY3QgaW50byBhIGNhbGxhYmxlCisgIC8vIGZ1bmN0aW9uIG9iamVjdC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgaW5saW5lIF9GdW5jdG9yJgorICAgIF9fY2FsbGFibGVfZnVuY3RvcihfRnVuY3RvciYgX19mKQorICAgIHsgcmV0dXJuIF9fZjsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBpbmxpbmUgX01lbV9mbjxfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoX01lbWJlciBfQ2xhc3M6OiogJl9fcCkKKyAgICB7IHJldHVybiBtZW1fZm4oX19wKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lIF9DbGFzcz4KKyAgICBpbmxpbmUgX01lbV9mbjxfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICBfX2NhbGxhYmxlX2Z1bmN0b3IoX01lbWJlciBfQ2xhc3M6OiogY29uc3QgJl9fcCkKKyAgICB7IHJldHVybiBtZW1fZm4oX19wKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgY2xhc3MgZnVuY3Rpb247CisKKyAgLy8vIEJhc2UgY2xhc3Mgb2YgYWxsIHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVycy4KKyAgY2xhc3MgX0Z1bmN0aW9uX2Jhc2UKKyAgeworICBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IF9NX21heF9zaXplID0gc2l6ZW9mKF9Ob2NvcHlfdHlwZXMpOworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCBfTV9tYXhfYWxpZ24gPSBfX2FsaWdub2ZfXyhfTm9jb3B5X3R5cGVzKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgY2xhc3MgX0Jhc2VfbWFuYWdlcgorICAgICAgeworICAgICAgcHJvdGVjdGVkOgorCXN0YXRpYyBjb25zdCBib29sIF9fc3RvcmVkX2xvY2FsbHkgPQorICAgICAgICAoX19pc19sb2NhdGlvbl9pbnZhcmlhbnQ8X0Z1bmN0b3I+Ojp2YWx1ZQorICAgICAgICAgJiYgc2l6ZW9mKF9GdW5jdG9yKSA8PSBfTV9tYXhfc2l6ZQorICAgICAgICAgJiYgX19hbGlnbm9mX18oX0Z1bmN0b3IpIDw9IF9NX21heF9hbGlnbgorICAgICAgICAgJiYgKF9NX21heF9hbGlnbiAlIF9fYWxpZ25vZl9fKF9GdW5jdG9yKSA9PSAwKSk7CisJCisJdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX3N0b3JlZF9sb2NhbGx5PiBfTG9jYWxfc3RvcmFnZTsKKworCS8vIFJldHJpZXZlIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24gb2JqZWN0CisJc3RhdGljIF9GdW5jdG9yKgorCV9NX2dldF9wb2ludGVyKGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UpCisJeworCSAgY29uc3QgX0Z1bmN0b3IqIF9fcHRyID0KKwkgICAgX19zdG9yZWRfbG9jYWxseT8gc3RkOjpfX2FkZHJlc3NvZihfX3NvdXJjZS5fTV9hY2Nlc3M8X0Z1bmN0b3I+KCkpCisJICAgIC8qIGhhdmUgc3RvcmVkIGEgcG9pbnRlciAqLyA6IF9fc291cmNlLl9NX2FjY2VzczxfRnVuY3Rvcio+KCk7CisJICByZXR1cm4gY29uc3RfY2FzdDxfRnVuY3Rvcio+KF9fcHRyKTsKKwl9CisKKwkvLyBDbG9uZSBhIGxvY2F0aW9uLWludmFyaWFudCBmdW5jdGlvbiBvYmplY3QgdGhhdCBmaXRzIHdpdGhpbgorCS8vIGFuIF9BbnlfZGF0YSBzdHJ1Y3R1cmUuCisJc3RhdGljIHZvaWQKKwlfTV9jbG9uZShfQW55X2RhdGEmIF9fZGVzdCwgY29uc3QgX0FueV9kYXRhJiBfX3NvdXJjZSwgdHJ1ZV90eXBlKQorCXsKKwkgIG5ldyAoX19kZXN0Ll9NX2FjY2VzcygpKSBfRnVuY3RvcihfX3NvdXJjZS5fTV9hY2Nlc3M8X0Z1bmN0b3I+KCkpOworCX0KKworCS8vIENsb25lIGEgZnVuY3Rpb24gb2JqZWN0IHRoYXQgaXMgbm90IGxvY2F0aW9uLWludmFyaWFudCBvcgorCS8vIHRoYXQgY2Fubm90IGZpdCBpbnRvIGFuIF9BbnlfZGF0YSBzdHJ1Y3R1cmUuCisJc3RhdGljIHZvaWQKKwlfTV9jbG9uZShfQW55X2RhdGEmIF9fZGVzdCwgY29uc3QgX0FueV9kYXRhJiBfX3NvdXJjZSwgZmFsc2VfdHlwZSkKKwl7CisJICBfX2Rlc3QuX01fYWNjZXNzPF9GdW5jdG9yKj4oKSA9CisJICAgIG5ldyBfRnVuY3RvcigqX19zb3VyY2UuX01fYWNjZXNzPF9GdW5jdG9yKj4oKSk7CisJfQorCisJLy8gRGVzdHJveWluZyBhIGxvY2F0aW9uLWludmFyaWFudCBvYmplY3QgbWF5IHN0aWxsIHJlcXVpcmUKKwkvLyBkZXN0cnVjdGlvbi4KKwlzdGF0aWMgdm9pZAorCV9NX2Rlc3Ryb3koX0FueV9kYXRhJiBfX3ZpY3RpbSwgdHJ1ZV90eXBlKQorCXsKKwkgIF9fdmljdGltLl9NX2FjY2VzczxfRnVuY3Rvcj4oKS5+X0Z1bmN0b3IoKTsKKwl9CisJCisJLy8gRGVzdHJveWluZyBhbiBvYmplY3QgbG9jYXRlZCBvbiB0aGUgaGVhcC4KKwlzdGF0aWMgdm9pZAorCV9NX2Rlc3Ryb3koX0FueV9kYXRhJiBfX3ZpY3RpbSwgZmFsc2VfdHlwZSkKKwl7CisJICBkZWxldGUgX192aWN0aW0uX01fYWNjZXNzPF9GdW5jdG9yKj4oKTsKKwl9CisJCisgICAgICBwdWJsaWM6CisJc3RhdGljIGJvb2wKKwlfTV9tYW5hZ2VyKF9BbnlfZGF0YSYgX19kZXN0LCBjb25zdCBfQW55X2RhdGEmIF9fc291cmNlLAorCQkgICBfTWFuYWdlcl9vcGVyYXRpb24gX19vcCkKKwl7CisJICBzd2l0Y2ggKF9fb3ApCisJICAgIHsKKyNpZmRlZiBfX0dYWF9SVFRJCisJICAgIGNhc2UgX19nZXRfdHlwZV9pbmZvOgorCSAgICAgIF9fZGVzdC5fTV9hY2Nlc3M8Y29uc3QgdHlwZV9pbmZvKj4oKSA9ICZ0eXBlaWQoX0Z1bmN0b3IpOworCSAgICAgIGJyZWFrOworI2VuZGlmCisJICAgIGNhc2UgX19nZXRfZnVuY3Rvcl9wdHI6CisJICAgICAgX19kZXN0Ll9NX2FjY2VzczxfRnVuY3Rvcio+KCkgPSBfTV9nZXRfcG9pbnRlcihfX3NvdXJjZSk7CisJICAgICAgYnJlYWs7CisJICAgICAgCisJICAgIGNhc2UgX19jbG9uZV9mdW5jdG9yOgorCSAgICAgIF9NX2Nsb25lKF9fZGVzdCwgX19zb3VyY2UsIF9Mb2NhbF9zdG9yYWdlKCkpOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgX19kZXN0cm95X2Z1bmN0b3I6CisJICAgICAgX01fZGVzdHJveShfX2Rlc3QsIF9Mb2NhbF9zdG9yYWdlKCkpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICByZXR1cm4gZmFsc2U7CisJfQorCisJc3RhdGljIHZvaWQKKwlfTV9pbml0X2Z1bmN0b3IoX0FueV9kYXRhJiBfX2Z1bmN0b3IsIGNvbnN0IF9GdW5jdG9yJiBfX2YpCisJeyBfTV9pbml0X2Z1bmN0b3IoX19mdW5jdG9yLCBfX2YsIF9Mb2NhbF9zdG9yYWdlKCkpOyB9CisJCisJdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKwkgIHN0YXRpYyBib29sCisJICBfTV9ub3RfZW1wdHlfZnVuY3Rpb24oY29uc3QgZnVuY3Rpb248X1NpZ25hdHVyZT4mIF9fZikKKyAgICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihfX2YpOyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisJICBzdGF0aWMgYm9vbAorCSAgX01fbm90X2VtcHR5X2Z1bmN0aW9uKGNvbnN0IF9UcComIF9fZnApCisJICB7IHJldHVybiBfX2ZwOyB9CisKKwl0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lIF9UcD4KKwkgIHN0YXRpYyBib29sCisJICBfTV9ub3RfZW1wdHlfZnVuY3Rpb24oX1RwIF9DbGFzczo6KiBjb25zdCYgX19tcCkKKwkgIHsgcmV0dXJuIF9fbXA7IH0KKworCXRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKwkgIHN0YXRpYyBib29sCisJICBfTV9ub3RfZW1wdHlfZnVuY3Rpb24oY29uc3QgX1RwJikKKwkgIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgcHJpdmF0ZToKKwlzdGF0aWMgdm9pZAorCV9NX2luaXRfZnVuY3RvcihfQW55X2RhdGEmIF9fZnVuY3RvciwgY29uc3QgX0Z1bmN0b3ImIF9fZiwgdHJ1ZV90eXBlKQorCXsgbmV3IChfX2Z1bmN0b3IuX01fYWNjZXNzKCkpIF9GdW5jdG9yKF9fZik7IH0KKworCXN0YXRpYyB2b2lkCisJX01faW5pdF9mdW5jdG9yKF9BbnlfZGF0YSYgX19mdW5jdG9yLCBjb25zdCBfRnVuY3RvciYgX19mLCBmYWxzZV90eXBlKQorCXsgX19mdW5jdG9yLl9NX2FjY2VzczxfRnVuY3Rvcio+KCkgPSBuZXcgX0Z1bmN0b3IoX19mKTsgfQorICAgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgY2xhc3MgX1JlZl9tYW5hZ2VyIDogcHVibGljIF9CYXNlX21hbmFnZXI8X0Z1bmN0b3IqPgorICAgICAgeworCXR5cGVkZWYgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3IqPiBfQmFzZTsKKworICAgIHB1YmxpYzoKKwlzdGF0aWMgYm9vbAorCV9NX21hbmFnZXIoX0FueV9kYXRhJiBfX2Rlc3QsIGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UsCisJCSAgIF9NYW5hZ2VyX29wZXJhdGlvbiBfX29wKQorCXsKKwkgIHN3aXRjaCAoX19vcCkKKwkgICAgeworI2lmZGVmIF9fR1hYX1JUVEkKKwkgICAgY2FzZSBfX2dldF90eXBlX2luZm86CisJICAgICAgX19kZXN0Ll9NX2FjY2Vzczxjb25zdCB0eXBlX2luZm8qPigpID0gJnR5cGVpZChfRnVuY3Rvcik7CisJICAgICAgYnJlYWs7CisjZW5kaWYKKwkgICAgY2FzZSBfX2dldF9mdW5jdG9yX3B0cjoKKwkgICAgICBfX2Rlc3QuX01fYWNjZXNzPF9GdW5jdG9yKj4oKSA9ICpfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19zb3VyY2UpOworCSAgICAgIHJldHVybiBpc19jb25zdDxfRnVuY3Rvcj46OnZhbHVlOworCSAgICAgIGJyZWFrOworCSAgICAgIAorCSAgICBkZWZhdWx0OgorCSAgICAgIF9CYXNlOjpfTV9tYW5hZ2VyKF9fZGVzdCwgX19zb3VyY2UsIF9fb3ApOworCSAgICB9CisJICByZXR1cm4gZmFsc2U7CisJfQorCisJc3RhdGljIHZvaWQKKwlfTV9pbml0X2Z1bmN0b3IoX0FueV9kYXRhJiBfX2Z1bmN0b3IsIHJlZmVyZW5jZV93cmFwcGVyPF9GdW5jdG9yPiBfX2YpCisJeworCSAgX0Jhc2U6Ol9NX2luaXRfZnVuY3RvcihfX2Z1bmN0b3IsIHN0ZDo6X19hZGRyZXNzb2YoX19mLmdldCgpKSk7CisJfQorICAgICAgfTsKKworICAgIF9GdW5jdGlvbl9iYXNlKCkgOiBfTV9tYW5hZ2VyKDApIHsgfQorICAgIAorICAgIH5fRnVuY3Rpb25fYmFzZSgpCisgICAgeworICAgICAgaWYgKF9NX21hbmFnZXIpCisJX01fbWFuYWdlcihfTV9mdW5jdG9yLCBfTV9mdW5jdG9yLCBfX2Rlc3Ryb3lfZnVuY3Rvcik7CisgICAgfQorCisKKyAgICBib29sIF9NX2VtcHR5KCkgY29uc3QgeyByZXR1cm4gIV9NX21hbmFnZXI7IH0KKworICAgIHR5cGVkZWYgYm9vbCAoKl9NYW5hZ2VyX3R5cGUpKF9BbnlfZGF0YSYsIGNvbnN0IF9BbnlfZGF0YSYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01hbmFnZXJfb3BlcmF0aW9uKTsKKworICAgIF9BbnlfZGF0YSAgICAgX01fZnVuY3RvcjsKKyAgICBfTWFuYWdlcl90eXBlIF9NX21hbmFnZXI7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZSwgdHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjxfUmVzKF9BcmdUeXBlcy4uLiksIF9GdW5jdG9yPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9iYXNlOjpfQmFzZV9tYW5hZ2VyPF9GdW5jdG9yPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3I+IF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgc3RhdGljIF9SZXMKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuICgqX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvcikpKF9fYXJncy4uLik7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9GdW5jdGlvbl9oYW5kbGVyPHZvaWQoX0FyZ1R5cGVzLi4uKSwgX0Z1bmN0b3I+CisgICAgOiBwdWJsaWMgX0Z1bmN0aW9uX2Jhc2U6Ol9CYXNlX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjxfRnVuY3Rvcj4gX0Jhc2U7CisKKyAgICAgcHVibGljOgorICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgKCpfQmFzZTo6X01fZ2V0X3BvaW50ZXIoX19mdW5jdG9yKSkoX19hcmdzLi4uKTsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lIF9GdW5jdG9yLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8X1JlcyhfQXJnVHlwZXMuLi4pLCByZWZlcmVuY2Vfd3JhcHBlcjxfRnVuY3Rvcj4gPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9iYXNlOjpfUmVmX21hbmFnZXI8X0Z1bmN0b3I+CisgICAgeworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X1JlZl9tYW5hZ2VyPF9GdW5jdG9yPiBfQmFzZTsKKworICAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgX1JlcworICAgICAgX01faW52b2tlKGNvbnN0IF9BbnlfZGF0YSYgX19mdW5jdG9yLCBfQXJnVHlwZXMuLi4gX19hcmdzKQorICAgICAgeworICAgICAgICByZXR1cm4gCisgICAgICAgICAgX19jYWxsYWJsZV9mdW5jdG9yKCoqX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvcikpKF9fYXJncy4uLik7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIF9GdW5jdGlvbl9oYW5kbGVyPHZvaWQoX0FyZ1R5cGVzLi4uKSwgcmVmZXJlbmNlX3dyYXBwZXI8X0Z1bmN0b3I+ID4KKyAgICA6IHB1YmxpYyBfRnVuY3Rpb25fYmFzZTo6X1JlZl9tYW5hZ2VyPF9GdW5jdG9yPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0Z1bmN0aW9uX2Jhc2U6Ol9SZWZfbWFuYWdlcjxfRnVuY3Rvcj4gX0Jhc2U7CisKKyAgICAgcHVibGljOgorICAgICAgc3RhdGljIHZvaWQKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgX19jYWxsYWJsZV9mdW5jdG9yKCoqX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvcikpKF9fYXJncy4uLik7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lIF9SZXMsIAorICAgICAgICAgICB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgY2xhc3MgX0Z1bmN0aW9uX2hhbmRsZXI8X1JlcyhfQXJnVHlwZXMuLi4pLCBfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICA6IHB1YmxpYyBfRnVuY3Rpb25faGFuZGxlcjx2b2lkKF9BcmdUeXBlcy4uLiksIF9NZW1iZXIgX0NsYXNzOjoqPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0Z1bmN0aW9uX2hhbmRsZXI8dm9pZChfQXJnVHlwZXMuLi4pLCBfTWVtYmVyIF9DbGFzczo6Kj4KKyAgICAgICAgX0Jhc2U7CisKKyAgICAgcHVibGljOgorICAgICAgc3RhdGljIF9SZXMKKyAgICAgIF9NX2ludm9rZShjb25zdCBfQW55X2RhdGEmIF9fZnVuY3RvciwgX0FyZ1R5cGVzLi4uIF9fYXJncykKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIHRyMTo6CisJICBtZW1fZm4oX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvciktPl9fdmFsdWUpKF9fYXJncy4uLik7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lIF9NZW1iZXIsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBjbGFzcyBfRnVuY3Rpb25faGFuZGxlcjx2b2lkKF9BcmdUeXBlcy4uLiksIF9NZW1iZXIgX0NsYXNzOjoqPgorICAgIDogcHVibGljIF9GdW5jdGlvbl9iYXNlOjpfQmFzZV9tYW5hZ2VyPAorICAgICAgICAgICAgICAgICBfU2ltcGxlX3R5cGVfd3JhcHBlcjwgX01lbWJlciBfQ2xhc3M6OiogPiA+CisgICAgeworICAgICAgdHlwZWRlZiBfTWVtYmVyIF9DbGFzczo6KiBfRnVuY3RvcjsKKyAgICAgIHR5cGVkZWYgX1NpbXBsZV90eXBlX3dyYXBwZXI8X0Z1bmN0b3I+IF9XcmFwcGVyOworICAgICAgdHlwZWRlZiBfRnVuY3Rpb25fYmFzZTo6X0Jhc2VfbWFuYWdlcjxfV3JhcHBlcj4gX0Jhc2U7CisKKyAgICAgcHVibGljOgorICAgICAgc3RhdGljIGJvb2wKKyAgICAgIF9NX21hbmFnZXIoX0FueV9kYXRhJiBfX2Rlc3QsIGNvbnN0IF9BbnlfZGF0YSYgX19zb3VyY2UsCisgICAgICAgICAgICAgICAgIF9NYW5hZ2VyX29wZXJhdGlvbiBfX29wKQorICAgICAgeworICAgICAgICBzd2l0Y2ggKF9fb3ApCisJICB7CisjaWZkZWYgX19HWFhfUlRUSQorCSAgY2FzZSBfX2dldF90eXBlX2luZm86CisJICAgIF9fZGVzdC5fTV9hY2Nlc3M8Y29uc3QgdHlwZV9pbmZvKj4oKSA9ICZ0eXBlaWQoX0Z1bmN0b3IpOworCSAgICBicmVhazsKKyNlbmRpZgkgICAgCisJICBjYXNlIF9fZ2V0X2Z1bmN0b3JfcHRyOgorCSAgICBfX2Rlc3QuX01fYWNjZXNzPF9GdW5jdG9yKj4oKSA9CisJICAgICAgJl9CYXNlOjpfTV9nZXRfcG9pbnRlcihfX3NvdXJjZSktPl9fdmFsdWU7CisJICAgIGJyZWFrOworCSAgICAKKwkgIGRlZmF1bHQ6CisJICAgIF9CYXNlOjpfTV9tYW5hZ2VyKF9fZGVzdCwgX19zb3VyY2UsIF9fb3ApOworCSAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBfTV9pbnZva2UoY29uc3QgX0FueV9kYXRhJiBfX2Z1bmN0b3IsIF9BcmdUeXBlcy4uLiBfX2FyZ3MpCisgICAgICB7CisJdHIxOjptZW1fZm4oX0Jhc2U6Ol9NX2dldF9wb2ludGVyKF9fZnVuY3RvciktPl9fdmFsdWUpKF9fYXJncy4uLik7CisgICAgICB9CisgICAgfTsKKworICAvLy8gY2xhc3MgZnVuY3Rpb24KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNsYXNzIGZ1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKT4KKyAgICA6IHB1YmxpYyBfTWF5YmVfdW5hcnlfb3JfYmluYXJ5X2Z1bmN0aW9uPF9SZXMsIF9BcmdUeXBlcy4uLj4sCisgICAgICBwcml2YXRlIF9GdW5jdGlvbl9iYXNlCisgICAgeworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorICAgICAgLy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIHNhZmVfYm9vbCBpZGlvbS4KKyAgICAgIHN0cnVjdCBfSGlkZGVuX3R5cGUKKyAgICAgIHsKKwlfSGlkZGVuX3R5cGUqIF9NX2Jvb2w7CisgICAgICB9OworCisgICAgICAvLy8gVGhpcyB0eXBlZGVmIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBzYWZlX2Jvb2wgaWRpb20uCisgICAgICB0eXBlZGVmIF9IaWRkZW5fdHlwZSogX0hpZGRlbl90eXBlOjoqIF9TYWZlX2Jvb2w7CisjZW5kaWYKKworICAgICAgdHlwZWRlZiBfUmVzIF9TaWduYXR1cmVfdHlwZShfQXJnVHlwZXMuLi4pOworICAgICAgCisgICAgICBzdHJ1Y3QgX1VzZWxlc3MgeyB9OworICAgICAgCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfUmVzIHJlc3VsdF90eXBlOworICAgICAgCisgICAgICAvLyBbMy43LjIuMV0gY29uc3RydWN0L2NvcHkvZGVzdHJveQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRGVmYXVsdCBjb25zdHJ1Y3QgY3JlYXRlcyBhbiBlbXB0eSBmdW5jdGlvbiBjYWxsIHdyYXBwZXIuCisgICAgICAgKiAgQHBvc3QgQGMgIShib29sKSp0aGlzCisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uKCkgOiBfRnVuY3Rpb25fYmFzZSgpIHsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgRGVmYXVsdCBjb25zdHJ1Y3QgY3JlYXRlcyBhbiBlbXB0eSBmdW5jdGlvbiBjYWxsIHdyYXBwZXIuCisgICAgICAgKiAgQHBvc3QgQGMgIShib29sKSp0aGlzCisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uKF9NX2NsZWFyX3R5cGUqKSA6IF9GdW5jdGlvbl9iYXNlKCkgeyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAlRnVuY3Rpb24gY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAqICBAcGFyYW0geCBBICVmdW5jdGlvbiBvYmplY3Qgd2l0aCBpZGVudGljYWwgY2FsbCBzaWduYXR1cmUuCisgICAgICAgKiAgQHBvc3QgQGMgKGJvb2wpKnRoaXMgPT0gKGJvb2wpeAorICAgICAgICoKKyAgICAgICAqICBUaGUgbmV3bHktY3JlYXRlZCAlZnVuY3Rpb24gY29udGFpbnMgYSBjb3B5IG9mIHRoZSB0YXJnZXQgb2YgQGEKKyAgICAgICAqICB4IChpZiBpdCBoYXMgb25lKS4KKyAgICAgICAqLworICAgICAgZnVuY3Rpb24oY29uc3QgZnVuY3Rpb24mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBCdWlsZHMgYSAlZnVuY3Rpb24gdGhhdCB0YXJnZXRzIGEgY29weSBvZiB0aGUgaW5jb21pbmcKKyAgICAgICAqICBmdW5jdGlvbiBvYmplY3QuCisgICAgICAgKiAgQHBhcmFtIGYgQSAlZnVuY3Rpb24gb2JqZWN0IHRoYXQgaXMgY2FsbGFibGUgd2l0aCBwYXJhbWV0ZXJzIG9mCisgICAgICAgKiAgdHlwZSBAYyBUMSwgQGMgVDIsIC4uLiwgQGMgVE4gYW5kIHJldHVybnMgYSB2YWx1ZSBjb252ZXJ0aWJsZQorICAgICAgICogIHRvIEBjIFJlcy4KKyAgICAgICAqCisgICAgICAgKiAgVGhlIG5ld2x5LWNyZWF0ZWQgJWZ1bmN0aW9uIG9iamVjdCB3aWxsIHRhcmdldCBhIGNvcHkgb2YgQGEKKyAgICAgICAqICBmLiBJZiBAYSBmIGlzIEBjIHJlZmVyZW5jZV93cmFwcGVyPEY+LCB0aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgICAqICBvYmplY3Qgd2lsbCBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiBvYmplY3QgQGMKKyAgICAgICAqICBmLmdldCgpLiBJZiBAYSBmIGlzIGEgTlVMTCBmdW5jdGlvbiBwb2ludGVyIG9yIE5VTEwKKyAgICAgICAqICBwb2ludGVyLXRvLW1lbWJlciwgdGhlIG5ld2x5LWNyZWF0ZWQgb2JqZWN0IHdpbGwgYmUgZW1wdHkuCisgICAgICAgKgorICAgICAgICogIElmIEBhIGYgaXMgYSBub24tTlVMTCBmdW5jdGlvbiBwb2ludGVyIG9yIGFuIG9iamVjdCBvZiB0eXBlIEBjCisgICAgICAgKiAgcmVmZXJlbmNlX3dyYXBwZXI8Rj4sIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgICBmdW5jdGlvbihfRnVuY3RvciBfX2YsCisgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9fZ251X2N4eDo6X19lbmFibGVfaWY8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNfaW50ZWdyYWw8X0Z1bmN0b3I+Ojp2YWx1ZSwgX1VzZWxlc3M+OjpfX3R5cGUKKyAgICAgICAgICAgICAgICAgICA9IF9Vc2VsZXNzKCkpOworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgJUZ1bmN0aW9uIGFzc2lnbm1lbnQgb3BlcmF0b3IuCisgICAgICAgKiAgQHBhcmFtIHggQSAlZnVuY3Rpb24gd2l0aCBpZGVudGljYWwgY2FsbCBzaWduYXR1cmUuCisgICAgICAgKiAgQHBvc3QgQGMgKGJvb2wpKnRoaXMgPT0gKGJvb2wpeAorICAgICAgICogIEByZXR1cm5zIEBjICp0aGlzCisgICAgICAgKgorICAgICAgICogIFRoZSB0YXJnZXQgb2YgQGEgeCBpcyBjb3BpZWQgdG8gQGMgKnRoaXMuIElmIEBhIHggaGFzIG5vCisgICAgICAgKiAgdGFyZ2V0LCB0aGVuIEBjICp0aGlzIHdpbGwgYmUgZW1wdHkuCisgICAgICAgKgorICAgICAgICogIElmIEBhIHggdGFyZ2V0cyBhIGZ1bmN0aW9uIHBvaW50ZXIgb3IgYSByZWZlcmVuY2UgdG8gYSBmdW5jdGlvbgorICAgICAgICogIG9iamVjdCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgICAgICovCisgICAgICBmdW5jdGlvbiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBmdW5jdGlvbiYgX194KQorICAgICAgeworICAgICAgICBmdW5jdGlvbihfX3gpLnN3YXAoKnRoaXMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAlRnVuY3Rpb24gYXNzaWdubWVudCB0byB6ZXJvLgorICAgICAgICogIEBwb3N0IEBjICEoYm9vbCkqdGhpcworICAgICAgICogIEByZXR1cm5zIEBjICp0aGlzCisgICAgICAgKgorICAgICAgICogIFRoZSB0YXJnZXQgb2YgQGMgKnRoaXMgaXMgZGVhbGxvY2F0ZWQsIGxlYXZpbmcgaXQgZW1wdHkuCisgICAgICAgKi8KKyAgICAgIGZ1bmN0aW9uJgorICAgICAgb3BlcmF0b3I9KF9NX2NsZWFyX3R5cGUqKQorICAgICAgeworICAgICAgICBpZiAoX01fbWFuYWdlcikKKwkgIHsKKwkgICAgX01fbWFuYWdlcihfTV9mdW5jdG9yLCBfTV9mdW5jdG9yLCBfX2Rlc3Ryb3lfZnVuY3Rvcik7CisJICAgIF9NX21hbmFnZXIgPSAwOworCSAgICBfTV9pbnZva2VyID0gMDsKKwkgIH0KKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgJUZ1bmN0aW9uIGFzc2lnbm1lbnQgdG8gYSBuZXcgdGFyZ2V0LgorICAgICAgICogIEBwYXJhbSBmIEEgJWZ1bmN0aW9uIG9iamVjdCB0aGF0IGlzIGNhbGxhYmxlIHdpdGggcGFyYW1ldGVycyBvZgorICAgICAgICogIHR5cGUgQGMgVDEsIEBjIFQyLCAuLi4sIEBjIFROIGFuZCByZXR1cm5zIGEgdmFsdWUgY29udmVydGlibGUKKyAgICAgICAqICB0byBAYyBSZXMuCisgICAgICAgKiAgQHJldHVybiBAYyAqdGhpcworICAgICAgICoKKyAgICAgICAqICBUaGlzICAlZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXIgd2lsbCB0YXJnZXQgYSBjb3B5IG9mIEBhCisgICAgICAgKiAgZi4gSWYgQGEgZiBpcyBAYyByZWZlcmVuY2Vfd3JhcHBlcjxGPiwgdGhlbiB0aGlzIGZ1bmN0aW9uCisgICAgICAgKiAgb2JqZWN0IHdpbGwgY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gb2JqZWN0IEBjCisgICAgICAgKiAgZi5nZXQoKS4gSWYgQGEgZiBpcyBhIE5VTEwgZnVuY3Rpb24gcG9pbnRlciBvciBOVUxMCisgICAgICAgKiAgcG9pbnRlci10by1tZW1iZXIsIEBjIHRoaXMgb2JqZWN0IHdpbGwgYmUgZW1wdHkuCisgICAgICAgKgorICAgICAgICogIElmIEBhIGYgaXMgYSBub24tTlVMTCBmdW5jdGlvbiBwb2ludGVyIG9yIGFuIG9iamVjdCBvZiB0eXBlIEBjCisgICAgICAgKiAgcmVmZXJlbmNlX3dyYXBwZXI8Rj4sIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPCFpc19pbnRlZ3JhbDxfRnVuY3Rvcj46OnZhbHVlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24mPjo6X190eXBlCisJb3BlcmF0b3I9KF9GdW5jdG9yIF9fZikKKwl7CisJICBmdW5jdGlvbihfX2YpLnN3YXAoKnRoaXMpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgLy8gWzMuNy4yLjJdIGZ1bmN0aW9uIG1vZGlmaWVycworICAgICAgCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgU3dhcCB0aGUgdGFyZ2V0cyBvZiB0d28gJWZ1bmN0aW9uIG9iamVjdHMuCisgICAgICAgKiAgQHBhcmFtIGYgQSAlZnVuY3Rpb24gd2l0aCBpZGVudGljYWwgY2FsbCBzaWduYXR1cmUuCisgICAgICAgKgorICAgICAgICogIFN3YXAgdGhlIHRhcmdldHMgb2YgQGMgdGhpcyBmdW5jdGlvbiBvYmplY3QgYW5kIEBhIGYuIFRoaXMKKyAgICAgICAqICBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgICAgICovCisgICAgICB2b2lkIHN3YXAoZnVuY3Rpb24mIF9feCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZnVuY3RvciwgX194Ll9NX2Z1bmN0b3IpOworCXN0ZDo6c3dhcChfTV9tYW5hZ2VyLCBfX3guX01fbWFuYWdlcik7CisJc3RkOjpzd2FwKF9NX2ludm9rZXIsIF9feC5fTV9pbnZva2VyKTsKKyAgICAgIH0KKworICAgICAgLy8gWzMuNy4yLjNdIGZ1bmN0aW9uIGNhcGFjaXR5CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBEZXRlcm1pbmUgaWYgdGhlICVmdW5jdGlvbiB3cmFwcGVyIGhhcyBhIHRhcmdldC4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybiBAYyB0cnVlIHdoZW4gdGhpcyAlZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgdGFyZ2V0LAorICAgICAgICogIG9yIEBjIGZhbHNlIHdoZW4gaXQgaXMgZW1wdHkuCisgICAgICAgKgorICAgICAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICAgICAqLworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgeyByZXR1cm4gIV9NX2VtcHR5KCk7IH0KKyNlbHNlCisgICAgICBvcGVyYXRvciBfU2FmZV9ib29sKCkgY29uc3QKKyAgICAgIHsKKyAgICAgICAgaWYgKF9NX2VtcHR5KCkpCisJICByZXR1cm4gMDsKKwllbHNlCisJICByZXR1cm4gJl9IaWRkZW5fdHlwZTo6X01fYm9vbDsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvLyBbMy43LjIuNF0gZnVuY3Rpb24gaW52b2NhdGlvbgorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgSW52b2tlcyB0aGUgZnVuY3Rpb24gdGFyZ2V0ZWQgYnkgQGMgKnRoaXMuCisgICAgICAgKiAgQHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgdGFyZ2V0LgorICAgICAgICogIEB0aHJvd3MgYmFkX2Z1bmN0aW9uX2NhbGwgd2hlbiBAYyAhKGJvb2wpKnRoaXMKKyAgICAgICAqCisgICAgICAgKiAgVGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0b3IgaW52b2tlcyB0aGUgdGFyZ2V0IGZ1bmN0aW9uIG9iamVjdAorICAgICAgICogIHN0b3JlZCBieSBAYyB0aGlzLgorICAgICAgICovCisgICAgICBfUmVzIG9wZXJhdG9yKCkoX0FyZ1R5cGVzLi4uIF9fYXJncykgY29uc3Q7CisKKyNpZmRlZiBfX0dYWF9SVFRJCisgICAgICAvLyBbMy43LjIuNV0gZnVuY3Rpb24gdGFyZ2V0IGFjY2VzcworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIERldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgdGFyZ2V0IG9mIHRoaXMgZnVuY3Rpb24gb2JqZWN0CisgICAgICAgKiAgd3JhcHBlci4KKyAgICAgICAqCisgICAgICAgKiAgQHJldHVybnMgdGhlIHR5cGUgaWRlbnRpZmllciBvZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uIG9iamVjdCwgb3IKKyAgICAgICAqICBAYyB0eXBlaWQodm9pZCkgaWYgQGMgIShib29sKSp0aGlzLgorICAgICAgICoKKyAgICAgICAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIGNvbnN0IHR5cGVfaW5mbyYgdGFyZ2V0X3R5cGUoKSBjb25zdDsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIEFjY2VzcyB0aGUgc3RvcmVkIHRhcmdldCBmdW5jdGlvbiBvYmplY3QuCisgICAgICAgKgorICAgICAgICogIEByZXR1cm4gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0b3JlZCB0YXJnZXQgZnVuY3Rpb24gb2JqZWN0LAorICAgICAgICogIGlmIEBjIHR5cGVpZChGdW5jdG9yKS5lcXVhbHModGFyZ2V0X3R5cGUoKSk7IG90aGVyd2lzZSwgYSBOVUxMCisgICAgICAgKiAgcG9pbnRlci4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRocm93IGFuICVleGNlcHRpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPiAgICAgICBfRnVuY3RvciogdGFyZ2V0KCk7CisgICAgICAKKyAgICAgIC8vLyBAb3ZlcmxvYWQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPiBjb25zdCBfRnVuY3RvciogdGFyZ2V0KCkgY29uc3Q7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAvLyBbMy43LjIuNl0gdW5kZWZpbmVkIG9wZXJhdG9ycworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0aW9uPgorCXZvaWQgb3BlcmF0b3I9PShjb25zdCBmdW5jdGlvbjxfRnVuY3Rpb24+JikgY29uc3Q7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rpb24+CisJdm9pZCBvcGVyYXRvciE9KGNvbnN0IGZ1bmN0aW9uPF9GdW5jdGlvbj4mKSBjb25zdDsKKworICAgICAgdHlwZWRlZiBfUmVzICgqX0ludm9rZXJfdHlwZSkoY29uc3QgX0FueV9kYXRhJiwgX0FyZ1R5cGVzLi4uKTsKKyAgICAgIF9JbnZva2VyX3R5cGUgX01faW52b2tlcjsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPjo6CisgICAgZnVuY3Rpb24oY29uc3QgZnVuY3Rpb24mIF9feCkKKyAgICA6IF9GdW5jdGlvbl9iYXNlKCkKKyAgICB7CisgICAgICBpZiAoc3RhdGljX2Nhc3Q8Ym9vbD4oX194KSkKKwl7CisJICBfTV9pbnZva2VyID0gX194Ll9NX2ludm9rZXI7CisJICBfTV9tYW5hZ2VyID0gX194Ll9NX21hbmFnZXI7CisJICBfX3guX01fbWFuYWdlcihfTV9mdW5jdG9yLCBfX3guX01fZnVuY3RvciwgX19jbG9uZV9mdW5jdG9yKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3Rvcj4KKyAgICAgIGZ1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKT46OgorICAgICAgZnVuY3Rpb24oX0Z1bmN0b3IgX19mLAorCSAgICAgICB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICAgICAgICAhaXNfaW50ZWdyYWw8X0Z1bmN0b3I+Ojp2YWx1ZSwgX1VzZWxlc3M+OjpfX3R5cGUpCisgICAgICA6IF9GdW5jdGlvbl9iYXNlKCkKKyAgICAgIHsKKwl0eXBlZGVmIF9GdW5jdGlvbl9oYW5kbGVyPF9TaWduYXR1cmVfdHlwZSwgX0Z1bmN0b3I+IF9NeV9oYW5kbGVyOworCisJaWYgKF9NeV9oYW5kbGVyOjpfTV9ub3RfZW1wdHlfZnVuY3Rpb24oX19mKSkKKwkgIHsKKwkgICAgX01faW52b2tlciA9ICZfTXlfaGFuZGxlcjo6X01faW52b2tlOworCSAgICBfTV9tYW5hZ2VyID0gJl9NeV9oYW5kbGVyOjpfTV9tYW5hZ2VyOworCSAgICBfTXlfaGFuZGxlcjo6X01faW5pdF9mdW5jdG9yKF9NX2Z1bmN0b3IsIF9fZik7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIF9SZXMKKyAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICBvcGVyYXRvcigpKF9BcmdUeXBlcy4uLiBfX2FyZ3MpIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX2VtcHR5KCkpCisJX0dMSUJDWFhfVEhST1dfT1JfQUJPUlQoYmFkX2Z1bmN0aW9uX2NhbGwoKSk7CisgICAgICByZXR1cm4gX01faW52b2tlcihfTV9mdW5jdG9yLCBfX2FyZ3MuLi4pOworICAgIH0KKworI2lmZGVmIF9fR1hYX1JUVEkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIGNvbnN0IHR5cGVfaW5mbyYKKyAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICB0YXJnZXRfdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgaWYgKF9NX21hbmFnZXIpCisgICAgICAgIHsKKyAgICAgICAgICBfQW55X2RhdGEgX190eXBlaW5mb19yZXN1bHQ7CisgICAgICAgICAgX01fbWFuYWdlcihfX3R5cGVpbmZvX3Jlc3VsdCwgX01fZnVuY3RvciwgX19nZXRfdHlwZV9pbmZvKTsKKyAgICAgICAgICByZXR1cm4gKl9fdHlwZWluZm9fcmVzdWx0Ll9NX2FjY2Vzczxjb25zdCB0eXBlX2luZm8qPigpOworICAgICAgICB9CisgICAgICBlbHNlCisJcmV0dXJuIHR5cGVpZCh2b2lkKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GdW5jdG9yPgorICAgICAgX0Z1bmN0b3IqCisgICAgICBmdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLik+OjoKKyAgICAgIHRhcmdldCgpCisgICAgICB7CisJaWYgKHR5cGVpZChfRnVuY3RvcikgPT0gdGFyZ2V0X3R5cGUoKSAmJiBfTV9tYW5hZ2VyKQorCSAgeworCSAgICBfQW55X2RhdGEgX19wdHI7CisJICAgIGlmIChfTV9tYW5hZ2VyKF9fcHRyLCBfTV9mdW5jdG9yLCBfX2dldF9mdW5jdG9yX3B0cikKKwkJJiYgIWlzX2NvbnN0PF9GdW5jdG9yPjo6dmFsdWUpCisJICAgICAgcmV0dXJuIDA7CisJICAgIGVsc2UKKwkgICAgICByZXR1cm4gX19wdHIuX01fYWNjZXNzPF9GdW5jdG9yKj4oKTsKKwkgIH0KKwllbHNlCisJICByZXR1cm4gMDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3I+CisgICAgICBjb25zdCBfRnVuY3RvcioKKyAgICAgIGZ1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKT46OgorICAgICAgdGFyZ2V0KCkgY29uc3QKKyAgICAgIHsKKwlpZiAodHlwZWlkKF9GdW5jdG9yKSA9PSB0YXJnZXRfdHlwZSgpICYmIF9NX21hbmFnZXIpCisJICB7CisJICAgIF9BbnlfZGF0YSBfX3B0cjsKKwkgICAgX01fbWFuYWdlcihfX3B0ciwgX01fZnVuY3RvciwgX19nZXRfZnVuY3Rvcl9wdHIpOworCSAgICByZXR1cm4gX19wdHIuX01fYWNjZXNzPGNvbnN0IF9GdW5jdG9yKj4oKTsKKwkgIH0KKwllbHNlCisJICByZXR1cm4gMDsKKyAgICAgIH0KKyNlbmRpZgorCisgIC8vIFszLjcuMi43XSBudWxsIHBvaW50ZXIgY29tcGFyaXNvbnMKKworICAvKioKKyAgICogIEBicmllZiBDb21wYXJlcyBhIHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdCB3cmFwcGVyIGFnYWluc3QgMAorICAgKiAgKHRoZSBOVUxMIHBvaW50ZXIpLgorICAgKiAgQHJldHVybnMgQGMgdHJ1ZSBpZiB0aGUgd3JhcHBlciBoYXMgbm8gdGFyZ2V0LCBAYyBmYWxzZSBvdGhlcndpc2UKKyAgICoKKyAgICogIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgYW4gJWV4Y2VwdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX2YsIF9NX2NsZWFyX3R5cGUqKQorICAgIHsgcmV0dXJuICFzdGF0aWNfY2FzdDxib29sPihfX2YpOyB9CisKKyAgLy8vIEBvdmVybG9hZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShfTV9jbGVhcl90eXBlKiwgY29uc3QgZnVuY3Rpb248X1NpZ25hdHVyZT4mIF9fZikKKyAgICB7IHJldHVybiAhc3RhdGljX2Nhc3Q8Ym9vbD4oX19mKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmIENvbXBhcmVzIGEgcG9seW1vcnBoaWMgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXIgYWdhaW5zdCAwCisgICAqICAodGhlIE5VTEwgcG9pbnRlcikuCisgICAqICBAcmV0dXJucyBAYyBmYWxzZSBpZiB0aGUgd3JhcHBlciBoYXMgbm8gdGFyZ2V0LCBAYyB0cnVlIG90aGVyd2lzZQorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgZnVuY3Rpb248X1NpZ25hdHVyZT4mIF9fZiwgX01fY2xlYXJfdHlwZSopCisgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oX19mKTsgfQorCisgIC8vLyBAb3ZlcmxvYWQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oX01fY2xlYXJfdHlwZSosIGNvbnN0IGZ1bmN0aW9uPF9TaWduYXR1cmU+JiBfX2YpCisgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oX19mKTsgfQorCisgIC8vIFszLjcuMi44XSBzcGVjaWFsaXplZCBhbGdvcml0aG1zCisKKyAgLyoqCisgICAqICBAYnJpZWYgU3dhcCB0aGUgdGFyZ2V0cyBvZiB0d28gcG9seW1vcnBoaWMgZnVuY3Rpb24gb2JqZWN0IHdyYXBwZXJzLgorICAgKgorICAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBhbiAlZXhjZXB0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoZnVuY3Rpb248X1NpZ25hdHVyZT4mIF9feCwgZnVuY3Rpb248X1NpZ25hdHVyZT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgaXNfcGxhY2Vob2xkZXI7CisKKyAgdGVtcGxhdGU8aW50IF9OdW0+CisgICAgc3RydWN0IGlzX3BsYWNlaG9sZGVyPHRyMTo6X1BsYWNlaG9sZGVyPF9OdW0+PgorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8aW50LCBfTnVtPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTxpbnQgX051bT4KKyAgICBzdHJ1Y3QgaXNfcGxhY2Vob2xkZXI8Y29uc3QgdHIxOjpfUGxhY2Vob2xkZXI8X051bT4+CisgICAgOiBpbnRlZ3JhbF9jb25zdGFudDxpbnQsIF9OdW0+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjx0cjE6Ol9CaW5kPF9TaWduYXR1cmU+PgorICAgIDogdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248Y29uc3QgdHIxOjpfQmluZDxfU2lnbmF0dXJlPj4KKyAgICA6IHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPHZvbGF0aWxlIHRyMTo6X0JpbmQ8X1NpZ25hdHVyZT4+CisgICAgOiB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxjb25zdCB2b2xhdGlsZSB0cjE6Ol9CaW5kPF9TaWduYXR1cmU+PgorICAgIDogdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248dHIxOjpfQmluZF9yZXN1bHQ8X1Jlc3VsdCwgX1NpZ25hdHVyZT4+CisgICAgOiB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXN1bHQsIHR5cGVuYW1lIF9TaWduYXR1cmU+CisgICAgc3RydWN0IGlzX2JpbmRfZXhwcmVzc2lvbjxjb25zdCB0cjE6Ol9CaW5kX3Jlc3VsdDxfUmVzdWx0LCBfU2lnbmF0dXJlPj4KKyAgICA6IHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jlc3VsdCwgdHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBzdHJ1Y3QgaXNfYmluZF9leHByZXNzaW9uPHZvbGF0aWxlIHRyMTo6X0JpbmRfcmVzdWx0PF9SZXN1bHQsIF9TaWduYXR1cmU+PgorICAgIDogdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzdWx0LCB0eXBlbmFtZSBfU2lnbmF0dXJlPgorICAgIHN0cnVjdCBpc19iaW5kX2V4cHJlc3Npb248Y29uc3Qgdm9sYXRpbGUgdHIxOjpfQmluZF9yZXN1bHQ8X1Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TaWduYXR1cmU+PgorICAgIDogdHJ1ZV90eXBlIHsgfTsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisjZW5kaWYKK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9GVU5DVElPTkFMCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9mdW5jdGlvbmFsX2hhc2guaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2Z1bmN0aW9uYWxfaGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNzRhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9mdW5jdGlvbmFsX2hhc2guaApAQCAtMCwwICsxLDE5NiBAQAorLy8gVFIxIGZ1bmN0aW9uYWxfaGFzaC5oIGhlYWRlciAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2Z1bmN0aW9uYWxfaGFzaC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dHIxL2Z1bmN0aW9uYWx9CisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfRlVOQ1RJT05BTF9IQVNIX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX0ZVTkNUSU9OQUxfSEFTSF9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8vIENsYXNzIHRlbXBsYXRlIGhhc2guCisgIC8vIERlY2xhcmF0aW9uIG9mIGRlZmF1bHQgaGFzaCBmdW5jdG9yIHN0ZDo6dHIxOjpoYXNoLiAgVGhlIHR5cGVzIGZvcgorICAvLyB3aGljaCBzdGQ6OnRyMTo6aGFzaDxUPiBpcyB3ZWxsLWRlZmluZWQgaXMgaW4gY2xhdXNlIDYuMy4zLiBvZiB0aGUgUERUUi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNoIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248X1RwLCBzaXplX3Q+CisgICAgeworICAgICAgc2l6ZV90CisgICAgICBvcGVyYXRvcigpKF9UcCBfX3ZhbCkgY29uc3Q7CisgICAgfTsKKworICAvLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbnMgZm9yIHBvaW50ZXIgdHlwZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzaDxfVHAqPiA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPF9UcCosIHNpemVfdD4KKyAgICB7CisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0CisgICAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHNpemVfdD4oX19wKTsgfQorICAgIH07CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9ucyBmb3IgaW50ZWdlciB0eXBlcy4KKyNkZWZpbmUgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChfVHApIAlcCisgIHRlbXBsYXRlPD4JCQkJCQlcCisgICAgaW5saW5lIHNpemVfdAkJCQkJXAorICAgIGhhc2g8X1RwPjo6b3BlcmF0b3IoKShfVHAgX192YWwpIGNvbnN0CQlcCisgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3ZhbCk7IH0KKworICBfVFIxX2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGJvb2wpOworICBfVFIxX2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKGNoYXIpOworICBfVFIxX2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHNpZ25lZCBjaGFyKTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaCh1bnNpZ25lZCBjaGFyKTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaCh3Y2hhcl90KTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChzaG9ydCk7CisgIF9UUjFfaGFzaHRhYmxlX2RlZmluZV90cml2aWFsX2hhc2goaW50KTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChsb25nKTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaChsb25nIGxvbmcpOworICBfVFIxX2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHVuc2lnbmVkIHNob3J0KTsKKyAgX1RSMV9oYXNodGFibGVfZGVmaW5lX3RyaXZpYWxfaGFzaCh1bnNpZ25lZCBpbnQpOworICBfVFIxX2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHVuc2lnbmVkIGxvbmcpOworICBfVFIxX2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisKKyN1bmRlZiBfVFIxX2hhc2h0YWJsZV9kZWZpbmVfdHJpdmlhbF9oYXNoCisKKyAgLy8gRm93bGVyIC8gTm9sbCAvIFZvIChGTlYpIEhhc2ggKHR5cGUgRk5WLTFhKQorICAvLyAoVXNlZCBieSB0aGUgbmV4dCBzcGVjaWFsaXphdGlvbnMgb2Ygc3RkOjp0cjE6Omhhc2guKQorCisgIC8vLyBEdW1teSBnZW5lcmljIGltcGxlbWVudGF0aW9uIChmb3Igc2l6ZW9mKHNpemVfdCkgIT0gNCwgOCkuCisgIHRlbXBsYXRlPHNpemVfdD4KKyAgICBzdHJ1Y3QgX0Zudl9oYXNoX2Jhc2UKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHN0YXRpYyBzaXplX3QKKyAgICAgICAgaGFzaChjb25zdCBfVHAqIF9fcHRyLCBzaXplX3QgX19jbGVuZ3RoKQorICAgICAgICB7CisJICBzaXplX3QgX19yZXN1bHQgPSAwOworCSAgY29uc3QgY2hhciogX19jcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19wdHIpOworCSAgZm9yICg7IF9fY2xlbmd0aDsgLS1fX2NsZW5ndGgpCisJICAgIF9fcmVzdWx0ID0gKF9fcmVzdWx0ICogMTMxKSArICpfX2NwdHIrKzsKKwkgIHJldHVybiBfX3Jlc3VsdDsKKwl9CisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9GbnZfaGFzaF9iYXNlPDQ+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICAgIGhhc2goY29uc3QgX1RwKiBfX3B0ciwgc2l6ZV90IF9fY2xlbmd0aCkKKyAgICAgICAgeworCSAgc2l6ZV90IF9fcmVzdWx0ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigyMTY2MTM2MjYxVUwpOworCSAgY29uc3QgY2hhciogX19jcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19wdHIpOworCSAgZm9yICg7IF9fY2xlbmd0aDsgLS1fX2NsZW5ndGgpCisJICAgIHsKKwkgICAgICBfX3Jlc3VsdCBePSBzdGF0aWNfY2FzdDxzaXplX3Q+KCpfX2NwdHIrKyk7CisJICAgICAgX19yZXN1bHQgKj0gc3RhdGljX2Nhc3Q8c2l6ZV90PigxNjc3NzYxOVVMKTsKKwkgICAgfQorCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9OworICAKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfRm52X2hhc2hfYmFzZTw4PgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgc3RhdGljIHNpemVfdAorICAgICAgICBoYXNoKGNvbnN0IF9UcCogX19wdHIsIHNpemVfdCBfX2NsZW5ndGgpCisgICAgICAgIHsKKwkgIHNpemVfdCBfX3Jlc3VsdAorCSAgICA9IHN0YXRpY19jYXN0PHNpemVfdD4oMTQ2OTU5ODEwMzkzNDY2NTYwMzdVTEwpOworCSAgY29uc3QgY2hhciogX19jcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19wdHIpOworCSAgZm9yICg7IF9fY2xlbmd0aDsgLS1fX2NsZW5ndGgpCisJICAgIHsKKwkgICAgICBfX3Jlc3VsdCBePSBzdGF0aWNfY2FzdDxzaXplX3Q+KCpfX2NwdHIrKyk7CisJICAgICAgX19yZXN1bHQgKj0gc3RhdGljX2Nhc3Q8c2l6ZV90PigxMDk5NTExNjI4MjExVUxMKTsKKwkgICAgfQorCSAgcmV0dXJuIF9fcmVzdWx0OworCX0KKyAgICB9OworCisgIHN0cnVjdCBfRm52X2hhc2gKKyAgOiBwdWJsaWMgX0Zudl9oYXNoX2Jhc2U8c2l6ZW9mKHNpemVfdCk+CisgIHsKKyAgICB1c2luZyBfRm52X2hhc2hfYmFzZTxzaXplb2Yoc2l6ZV90KT46Omhhc2g7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdGF0aWMgc2l6ZV90CisgICAgICBoYXNoKGNvbnN0IF9UcCYgX192YWwpCisgICAgICB7IHJldHVybiBoYXNoKCZfX3ZhbCwgc2l6ZW9mKF9fdmFsKSk7IH0KKyAgfTsKKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGZvciBmbG9hdC4KKyAgdGVtcGxhdGU8PgorICAgIGlubGluZSBzaXplX3QKKyAgICBoYXNoPGZsb2F0Pjo6b3BlcmF0b3IoKShmbG9hdCBfX3ZhbCkgY29uc3QKKyAgICB7CisgICAgICAvLyAwIGFuZCAtMCBib3RoIGhhc2ggdG8gemVyby4KKyAgICAgIHJldHVybiBfX3ZhbCAhPSAwLjBmID8gc3RkOjp0cjE6Ol9GbnZfaGFzaDo6aGFzaChfX3ZhbCkgOiAwOworICAgIH0KKworICAvLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIGZvciBkb3VibGUuCisgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgc2l6ZV90CisgICAgaGFzaDxkb3VibGU+OjpvcGVyYXRvcigpKGRvdWJsZSBfX3ZhbCkgY29uc3QKKyAgICB7CisgICAgICAvLyAwIGFuZCAtMCBib3RoIGhhc2ggdG8gemVyby4KKyAgICAgIHJldHVybiBfX3ZhbCAhPSAwLjAgPyBzdGQ6OnRyMTo6X0Zudl9oYXNoOjpoYXNoKF9fdmFsKSA6IDA7CisgICAgfQorCisgIC8vLyBFeHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgZm9yIGxvbmcgZG91YmxlLgorICB0ZW1wbGF0ZTw+CisgICAgX0dMSUJDWFhfUFVSRSBzaXplX3QKKyAgICBoYXNoPGxvbmcgZG91YmxlPjo6b3BlcmF0b3IoKShsb25nIGRvdWJsZSBfX3ZhbCkgY29uc3Q7CisKKyAgLy8vIEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mIG1lbWJlciBvcGVyYXRvciBmb3Igbm9uLWJ1aWx0aW4gdHlwZXMuCisgIHRlbXBsYXRlPD4KKyAgICBfR0xJQkNYWF9QVVJFIHNpemVfdAorICAgIGhhc2g8c3RyaW5nPjo6b3BlcmF0b3IoKShzdHJpbmcpIGNvbnN0OworCisgIHRlbXBsYXRlPD4KKyAgICBfR0xJQkNYWF9QVVJFIHNpemVfdAorICAgIGhhc2g8Y29uc3Qgc3RyaW5nJj46Om9wZXJhdG9yKCkoY29uc3Qgc3RyaW5nJikgY29uc3Q7CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgX0dMSUJDWFhfUFVSRSBzaXplX3QKKyAgICBoYXNoPHdzdHJpbmc+OjpvcGVyYXRvcigpKHdzdHJpbmcpIGNvbnN0OworCisgIHRlbXBsYXRlPD4KKyAgICBfR0xJQkNYWF9QVVJFIHNpemVfdAorICAgIGhhc2g8Y29uc3Qgd3N0cmluZyY+OjpvcGVyYXRvcigpKGNvbnN0IHdzdHJpbmcmKSBjb25zdDsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9GVU5DVElPTkFMX0hBU0hfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvZ2FtbWEudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvZ2FtbWEudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzE5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9nYW1tYS50Y2MKQEAgLTAsMCArMSw0NjkgQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2dhbW1hLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3RyMS9jbWF0aH0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MiBUUjE6IDUuMiAgU3BlY2lhbCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgRWR3YXJkIFNtaXRoLVJvd2xhbmQgYmFzZWQgb246CisvLyAgICgxKSBIYW5kYm9vayBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLAorLy8gICAgICAgZWQuIE1pbHRvbiBBYnJhbW93aXR6IGFuZCBJcmVuZSBBLiBTdGVndW4sCisvLyAgICAgICBEb3ZlciBQdWJsaWNhdGlvbnMsCisvLyAgICAgICBTZWN0aW9uIDYsIHBwLiAyNTMtMjY2CisvLyAgICgyKSBUaGUgR251IFNjaWVudGlmaWMgTGlicmFyeSwgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dzbAorLy8gICAoMykgTnVtZXJpY2FsIFJlY2lwZXMgaW4gQywgYnkgVy4gSC4gUHJlc3MsIFMuIEEuIFRldWtvbHNreSwKKy8vICAgICAgIFcuIFQuIFZldHRlcmxpbmcsIEIuIFAuIEZsYW5uZXJ5LCBDYW1icmlkZ2UgVW5pdmVyc2l0eSBQcmVzcyAoMTk5MiksCisvLyAgICAgICAybmQgZWQsIHBwLiAyMTMtMjE2CisvLyAgICg0KSBHYW1tYSwgRXhwbG9yaW5nIEV1bGVyJ3MgQ29uc3RhbnQsIEp1bGlhbiBIYXZpbCwKKy8vICAgICAgIFByaW5jZXRvbiwgMjAwMy4KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfR0FNTUFfVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9HQU1NQV9UQ0MgMQorCisjaW5jbHVkZSAic3BlY2lhbF9mdW5jdGlvbl91dGlsLmgiCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICAvLyBJbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgICAgLyoqCisgICAgICogICBAYnJpZWYgVGhpcyByZXR1cm5zIEJlcm5vdWxsaSBudW1iZXJzIGZyb20gYSB0YWJsZSBvciBieSBzdW1tYXRpb24KKyAgICAgKiAgICAgICAgICBmb3IgbGFyZ2VyIHZhbHVlcy4KKyAgICAgKgorICAgICAqICAgUmVjdXJzaW9uIGlzIHVuc3RhYmxlLgorICAgICAqCisgICAgICogICBAcGFyYW0gX19uIHRoZSBvcmRlciBuIG9mIHRoZSBCZXJub3VsbGkgbnVtYmVyLgorICAgICAqICAgQHJldHVybiAgVGhlIEJlcm5vdWxsaSBudW1iZXIgb2Ygb3JkZXIgbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fYmVybm91bGxpX3Nlcmllcyh1bnNpZ25lZCBpbnQgX19uKQorICAgIHsKKworICAgICAgc3RhdGljIGNvbnN0IF9UcCBfX251bVsyOF0gPSB7CisgICAgICAgIF9UcCgxVUwpLCAgICAgICAgICAgICAgICAgICAgICAgIC1fVHAoMVVMKSAvIF9UcCgyVUwpLAorICAgICAgICBfVHAoMVVMKSAvIF9UcCg2VUwpLCAgICAgICAgICAgICBfVHAoMFVMKSwKKyAgICAgICAgLV9UcCgxVUwpIC8gX1RwKDMwVUwpLCAgICAgICAgICAgX1RwKDBVTCksCisgICAgICAgIF9UcCgxVUwpIC8gX1RwKDQyVUwpLCAgICAgICAgICAgIF9UcCgwVUwpLAorICAgICAgICAtX1RwKDFVTCkgLyBfVHAoMzBVTCksICAgICAgICAgICBfVHAoMFVMKSwKKyAgICAgICAgX1RwKDVVTCkgLyBfVHAoNjZVTCksICAgICAgICAgICAgX1RwKDBVTCksCisgICAgICAgIC1fVHAoNjkxVUwpIC8gX1RwKDI3MzBVTCksICAgICAgIF9UcCgwVUwpLAorICAgICAgICBfVHAoN1VMKSAvIF9UcCg2VUwpLCAgICAgICAgICAgICBfVHAoMFVMKSwKKyAgICAgICAgLV9UcCgzNjE3VUwpIC8gX1RwKDUxMFVMKSwgICAgICAgX1RwKDBVTCksCisgICAgICAgIF9UcCg0Mzg2N1VMKSAvIF9UcCg3OThVTCksICAgICAgIF9UcCgwVUwpLAorICAgICAgICAtX1RwKDE3NDYxMSkgLyBfVHAoMzMwVUwpLCAgICAgICBfVHAoMFVMKSwKKyAgICAgICAgX1RwKDg1NDUxM1VMKSAvIF9UcCgxMzhVTCksICAgICAgX1RwKDBVTCksCisgICAgICAgIC1fVHAoMjM2MzY0MDkxVUwpIC8gX1RwKDI3MzBVTCksIF9UcCgwVUwpLAorICAgICAgICBfVHAoODU1MzEwM1VMKSAvIF9UcCg2VUwpLCAgICAgICBfVHAoMFVMKQorICAgICAgfTsKKworICAgICAgaWYgKF9fbiA9PSAwKQorICAgICAgICByZXR1cm4gX1RwKDEpOworCisgICAgICBpZiAoX19uID09IDEpCisgICAgICAgIHJldHVybiAtX1RwKDEpIC8gX1RwKDIpOworCisgICAgICAvLyAgVGFrZSBjYXJlIG9mIHRoZSByZXN0IG9mIHRoZSBvZGQgb25lcy4KKyAgICAgIGlmIChfX24gJSAyID09IDEpCisgICAgICAgIHJldHVybiBfVHAoMCk7CisKKyAgICAgIC8vICBUYWtlIGNhcmUgb2Ygc29tZSBzbWFsbCBldmVucyB0aGF0IGFyZSBwYWluZnVsIGZvciB0aGUgc2VyaWVzLgorICAgICAgaWYgKF9fbiA8IDI4KQorICAgICAgICByZXR1cm4gX19udW1bX19uXTsKKworCisgICAgICBfVHAgX19mYWN0ID0gX1RwKDEpOworICAgICAgaWYgKChfX24gLyAyKSAlIDIgPT0gMCkKKyAgICAgICAgX19mYWN0ICo9IF9UcCgtMSk7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2sgPSAxOyBfX2sgPD0gX19uOyArK19faykKKyAgICAgICAgX19mYWN0ICo9IF9fayAvIChfVHAoMikgKiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSk7CisgICAgICBfX2ZhY3QgKj0gX1RwKDIpOworCisgICAgICBfVHAgX19zdW0gPSBfVHAoMCk7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAxOyBfX2kgPCAxMDAwOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3Rlcm0gPSBzdGQ6OnBvdyhfVHAoX19pKSwgLV9UcChfX24pKTsKKyAgICAgICAgICBpZiAoX190ZXJtIDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX3N1bSArPSBfX3Rlcm07CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fZmFjdCAqIF9fc3VtOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgVGhpcyByZXR1cm5zIEJlcm5vdWxsaSBudW1iZXIgXGYkQl9uXGYkLgorICAgICAqCisgICAgICogICBAcGFyYW0gX19uIHRoZSBvcmRlciBuIG9mIHRoZSBCZXJub3VsbGkgbnVtYmVyLgorICAgICAqICAgQHJldHVybiAgVGhlIEJlcm5vdWxsaSBudW1iZXIgb2Ygb3JkZXIgbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fYmVybm91bGxpKGludCBfX24pCisgICAgeyByZXR1cm4gX19iZXJub3VsbGlfc2VyaWVzPF9UcD4oX19uKTsgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gXGYkbG9nKFxHYW1tYSh4KSlcZiQgYnkgYXN5bXB0b3RpYyBleHBhbnNpb24KKyAgICAgKiAgICAgICAgICB3aXRoIEJlcm5vdWxsaSBudW1iZXIgY29lZmZpY2llbnRzLiAgVGhpcyBpcyBsaWtlCisgICAgICogICAgICAgICAgU3RlcmxpbmcncyBhcHByb3hpbWF0aW9uLgorICAgICAqCisgICAgICogICBAcGFyYW0gX194IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nIG9mIHRoZSBnYW1tYSBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBsb2dhcml0aG0gb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2xvZ19nYW1tYV9iZXJub3VsbGkoX1RwIF9feCkKKyAgICB7CisgICAgICBfVHAgX19sZyA9IChfX3ggLSBfVHAoMC41TCkpICogc3RkOjpsb2coX194KSAtIF9feAorICAgICAgICAgICAgICAgKyBfVHAoMC41TCkgKiBzdGQ6OmxvZyhfVHAoMikKKyAgICAgICAgICAgICAgICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkpOworCisgICAgICBjb25zdCBfVHAgX194eCA9IF9feCAqIF9feDsKKyAgICAgIF9UcCBfX2hlbHAgPSBfVHAoMSkgLyBfX3g7CisgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgX19pID0gMTsgX19pIDwgMjA7ICsrX19pICkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfXzJpID0gX1RwKDIgKiBfX2kpOworICAgICAgICAgIF9faGVscCAvPSBfXzJpICogKF9fMmkgLSBfVHAoMSkpICogX194eDsKKyAgICAgICAgICBfX2xnICs9IF9fYmVybm91bGxpPF9UcD4oMiAqIF9faSkgKiBfX2hlbHA7CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9fbGc7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gXGYkbG9nKFxHYW1tYSh4KSlcZiQgYnkgdGhlIExhbmN6b3MgbWV0aG9kLgorICAgICAqICAgICAgICAgIFRoaXMgbWV0aG9kIGRvbWluYXRlcyBhbGwgb3RoZXJzIG9uIHRoZSBwb3NpdGl2ZSBheGlzIEkgdGhpbmsuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGFyZ3VtZW50IG9mIHRoZSBsb2cgb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGxvZ2FyaXRobSBvZiB0aGUgZ2FtbWEgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fbG9nX2dhbW1hX2xhbmN6b3MoX1RwIF9feCkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX194bTEgPSBfX3ggLSBfVHAoMSk7CisKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAgX19sYW5jem9zX2NoZWJfN1s5XSA9IHsKKyAgICAgICBfVHAoIDAuOTk5OTk5OTk5OTk5ODA5OTMyMjc2ODQ3MDA0NzM0NzhMKSwKKyAgICAgICBfVHAoIDY3Ni41MjAzNjgxMjE4ODUwOTg1NjcwMDkxOTA0NDQwMTlMKSwKKyAgICAgICBfVHAoLTEyNTkuMTM5MjE2NzIyNDAyODcwNDcxNTYwNzg3NTUyODNMKSwKKyAgICAgICBfVHAoIDc3MS4zMjM0Mjg3Nzc2NTMwNzg4NDg2NTI4MjU4ODk0TCksCisgICAgICAgX1RwKC0xNzYuNjE1MDI5MTYyMTQwNTk5MDY1ODQ1NTEzNTRMKSwKKyAgICAgICBfVHAoIDEyLjUwNzM0MzI3ODY4NjkwNDgxNDQ1ODkzNjg1M0wpLAorICAgICAgIF9UcCgtMC4xMzg1NzEwOTUyNjU3MjAxMTY4OTU1NDcwN0wpLAorICAgICAgIF9UcCggOS45ODQzNjk1NzgwMTk1NzA4NTk1NjNlLTZMKSwKKyAgICAgICBfVHAoIDEuNTA1NjMyNzM1MTQ5MzExNTU4MzRlLTdMKQorICAgICAgfTsKKworICAgICAgc3RhdGljIGNvbnN0IF9UcCBfX0xPR1JPT1QyUEkKKyAgICAgICAgICA9IF9UcCgwLjkxODkzODUzMzIwNDY3Mjc0MTc4MDMyOTczNjQwNTYxNzZMKTsKKworICAgICAgX1RwIF9fc3VtID0gX19sYW5jem9zX2NoZWJfN1swXTsKKyAgICAgIGZvcih1bnNpZ25lZCBpbnQgX19rID0gMTsgX19rIDwgOTsgKytfX2spCisgICAgICAgIF9fc3VtICs9IF9fbGFuY3pvc19jaGViXzdbX19rXSAvIChfX3htMSArIF9fayk7CisKKyAgICAgIGNvbnN0IF9UcCBfX3Rlcm0xID0gKF9feG0xICsgX1RwKDAuNUwpKQorICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGQ6OmxvZygoX194bTEgKyBfVHAoNy41TCkpCisgICAgICAgICAgICAgICAgICAgICAgIC8gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX2V1bGVyKCkpOworICAgICAgY29uc3QgX1RwIF9fdGVybTIgPSBfX0xPR1JPT1QyUEkgKyBzdGQ6OmxvZyhfX3N1bSk7CisgICAgICBjb25zdCBfVHAgX19yZXN1bHQgPSBfX3Rlcm0xICsgKF9fdGVybTIgLSBfVHAoNykpOworCisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gXGYkIGxvZyh8XEdhbW1hKHgpfCkgXGYkLgorICAgICAqICAgICAgICAgIFRoaXMgd2lsbCByZXR1cm4gdmFsdWVzIGV2ZW4gZm9yIFxmJCB4IDwgMCBcZiQuCisgICAgICogICAgICAgICAgVG8gcmVjb3ZlciB0aGUgc2lnbiBvZiBcZiQgXEdhbW1hKHgpIFxmJCBmb3IKKyAgICAgKiAgICAgICAgICBhbnkgYXJndW1lbnQgdXNlIEBhIF9fbG9nX2dhbW1hX3NpZ24uCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGFyZ3VtZW50IG9mIHRoZSBsb2cgb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGxvZ2FyaXRobSBvZiB0aGUgZ2FtbWEgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fbG9nX2dhbW1hKF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCA+IF9UcCgwLjVMKSkKKyAgICAgICAgcmV0dXJuIF9fbG9nX2dhbW1hX2xhbmN6b3MoX194KTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX3Npbl9mYWN0CisgICAgICAgICAgICAgICAgID0gc3RkOjphYnMoc3RkOjpzaW4oX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkgKiBfX3gpKTsKKyAgICAgICAgICBpZiAoX19zaW5fZmFjdCA9PSBfVHAoMCkpCisgICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgaXMgbm9ucG9zaXRpdmUgaW50ZWdlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19sb2dfZ2FtbWEiKSk7CisgICAgICAgICAgcmV0dXJuIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19sbnBpKCkKKyAgICAgICAgICAgICAgICAgICAgIC0gc3RkOjpsb2coX19zaW5fZmFjdCkKKyAgICAgICAgICAgICAgICAgICAgIC0gX19sb2dfZ2FtbWFfbGFuY3pvcyhfVHAoMSkgLSBfX3gpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIHNpZ24gb2YgXGYkIFxHYW1tYSh4KSBcZiQuCisgICAgICogICAgICAgICAgQXQgbm9ucG9zaXRpdmUgaW50ZWdlcnMgemVybyBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIHNpZ24gb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2xvZ19nYW1tYV9zaWduKF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCA+IF9UcCgwKSkKKyAgICAgICAgcmV0dXJuIF9UcCgxKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX3Npbl9mYWN0CisgICAgICAgICAgICAgICAgICA9IHN0ZDo6c2luKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpICogX194KTsKKyAgICAgICAgICBpZiAoX19zaW5fZmFjdCA+IF9UcCgwKSkKKyAgICAgICAgICAgIHJldHVybiAoMSk7CisgICAgICAgICAgZWxzZSBpZiAoX19zaW5fZmFjdCA8IF9UcCgwKSkKKyAgICAgICAgICAgIHJldHVybiAtX1RwKDEpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBfVHAoMCk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiB0aGUgbG9nYXJpdGhtIG9mIHRoZSBiaW5vbWlhbCBjb2VmZmljaWVudC4KKyAgICAgKiAgIFRoZSBiaW5vbWlhbCBjb2VmZmljaWVudCBpcyBnaXZlbiBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgXGxlZnQoICBccmlnaHQpID0gXGZyYWN7biF9eyhuLWspISBrIX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gX19uIFRoZSBmaXJzdCBhcmd1bWVudCBvZiB0aGUgYmlub21pYWwgY29lZmZpY2llbnQuCisgICAgICogICBAcGFyYW0gX19rIFRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGJpbm9taWFsIGNvZWZmaWNpZW50LgorICAgICAqICAgQHJldHVybiAgVGhlIGJpbm9taWFsIGNvZWZmaWNpZW50LgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2xvZ19iaW5jb2VmKHVuc2lnbmVkIGludCBfX24sIHVuc2lnbmVkIGludCBfX2spCisgICAgeworICAgICAgLy8gIE1heCBlIGV4cG9uZW50IGJlZm9yZSBvdmVyZmxvdy4KKyAgICAgIHN0YXRpYyBjb25zdCBfVHAgX19tYXhfYmluY29lZmYKKyAgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWF4X2V4cG9uZW50MTAKKyAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6bG9nKF9UcCgxMCkpIC0gX1RwKDEpOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgIF9UcCBfX2NvZWZmID0gIHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKDEgKyBfX24pKQorICAgICAgICAgICAgICAgICAgLSBzdGQ6OnRyMTo6bGdhbW1hKF9UcCgxICsgX19rKSkKKyAgICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfVHAoMSArIF9fbiAtIF9faykpOworI2Vsc2UKKyAgICAgIF9UcCBfX2NvZWZmID0gIF9fbG9nX2dhbW1hKF9UcCgxICsgX19uKSkKKyAgICAgICAgICAgICAgICAgIC0gX19sb2dfZ2FtbWEoX1RwKDEgKyBfX2spKQorICAgICAgICAgICAgICAgICAgLSBfX2xvZ19nYW1tYShfVHAoMSArIF9fbiAtIF9faykpOworI2VuZGlmCisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGJpbm9taWFsIGNvZWZmaWNpZW50LgorICAgICAqICAgVGhlIGJpbm9taWFsIGNvZWZmaWNpZW50IGlzIGdpdmVuIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICBcbGVmdCggIFxyaWdodCkgPSBcZnJhY3tuIX17KG4taykhIGshfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX24gVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBiaW5vbWlhbCBjb2VmZmljaWVudC4KKyAgICAgKiAgIEBwYXJhbSBfX2sgVGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgYmlub21pYWwgY29lZmZpY2llbnQuCisgICAgICogICBAcmV0dXJuICBUaGUgYmlub21pYWwgY29lZmZpY2llbnQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fYmluY29lZih1bnNpZ25lZCBpbnQgX19uLCB1bnNpZ25lZCBpbnQgX19rKQorICAgIHsKKyAgICAgIC8vICBNYXggZSBleHBvbmVudCBiZWZvcmUgb3ZlcmZsb3cuCisgICAgICBzdGF0aWMgY29uc3QgX1RwIF9fbWF4X2JpbmNvZWZmCisgICAgICAgICAgICAgICAgICAgICAgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1heF9leHBvbmVudDEwCisgICAgICAgICAgICAgICAgICAgICAgKiBzdGQ6OmxvZyhfVHAoMTApKSAtIF9UcCgxKTsKKworICAgICAgY29uc3QgX1RwIF9fbG9nX2NvZWZmID0gX19sb2dfYmluY29lZjxfVHA+KF9fbiwgX19rKTsKKyAgICAgIGlmIChfX2xvZ19jb2VmZiA+IF9fbWF4X2JpbmNvZWZmKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0ZDo6ZXhwKF9fbG9nX2NvZWZmKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFJldHVybiBcZiQgXEdhbW1hKHgpIFxmJC4KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGdhbW1hIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX19nYW1tYShfVHAgX194KQorICAgIHsgcmV0dXJuIHN0ZDo6ZXhwKF9fbG9nX2dhbW1hKF9feCkpOyB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGRpZ2FtbWEgZnVuY3Rpb24gYnkgc2VyaWVzIGV4cGFuc2lvbi4KKyAgICAgKiAgIFRoZSBkaWdhbW1hIG9yIEBmJCBccHNpKHgpIEBmJCBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5CisgICAgICogICBAZlsKKyAgICAgKiAgICAgXHBzaSh4KSA9IFxmcmFje1xHYW1tYScoeCl9e1xHYW1tYSh4KX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBUaGUgc2VyaWVzIGlzIGdpdmVuIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgIFxwc2koeCkgPSAtXGdhbW1hX0UgLSBcZnJhY3sxfXt4fQorICAgICAqICAgICAgICAgICAgICBcc3VtX3trPTF9XntcaW5mdHl9IFxmcmFje3h9e2soeCArIGspfQorICAgICAqICAgQGZdCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fcHNpX3NlcmllcyhfVHAgX194KQorICAgIHsKKyAgICAgIF9UcCBfX3N1bSA9IC1fX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fZ2FtbWFfZSgpIC0gX1RwKDEpIC8gX194OworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDAwMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2sgPSAxOyBfX2sgPCBfX21heF9pdGVyOyArK19faykKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX3Rlcm0gPSBfX3ggLyAoX19rICogKF9fayArIF9feCkpOworICAgICAgICAgIF9fc3VtICs9IF9fdGVybTsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtIC8gX19zdW0pIDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIF9fc3VtOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgZGlnYW1tYSBmdW5jdGlvbiBmb3IgbGFyZ2UgYXJndW1lbnQuCisgICAgICogICBUaGUgZGlnYW1tYSBvciBAZiQgXHBzaSh4KSBAZiQgZnVuY3Rpb24gaXMgZGVmaW5lZCBieQorICAgICAqICAgQGZbCisgICAgICogICAgIFxwc2koeCkgPSBcZnJhY3tcR2FtbWEnKHgpfXtcR2FtbWEoeCl9CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgVGhlIGFzeW1wdG90aWMgc2VyaWVzIGlzIGdpdmVuIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgIFxwc2koeCkgPSBcbG4oeCkgLSBcZnJhY3sxfXsyeH0KKyAgICAgKiAgICAgICAgICAgICAtIFxzdW1fe249MX1ee1xpbmZ0eX0gXGZyYWN7Ql97Mm59fXsyIG4geF57Mm59fQorICAgICAqICAgQGZdCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fcHNpX2FzeW1wKF9UcCBfX3gpCisgICAgeworICAgICAgX1RwIF9fc3VtID0gc3RkOjpsb2coX194KSAtIF9UcCgwLjVMKSAvIF9feDsKKyAgICAgIGNvbnN0IF9UcCBfX3h4ID0gX194ICogX194OworICAgICAgX1RwIF9feHAgPSBfX3h4OworICAgICAgY29uc3QgdW5zaWduZWQgaW50IF9fbWF4X2l0ZXIgPSAxMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2sgPSAxOyBfX2sgPCBfX21heF9pdGVyOyArK19faykKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX3Rlcm0gPSBfX2Jlcm5vdWxsaTxfVHA+KDIgKiBfX2spIC8gKDIgKiBfX2sgKiBfX3hwKTsKKyAgICAgICAgICBfX3N1bSAtPSBfX3Rlcm07CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fdGVybSAvIF9fc3VtKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX194cCAqPSBfX3h4OworICAgICAgICB9CisgICAgICByZXR1cm4gX19zdW07CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBkaWdhbW1hIGZ1bmN0aW9uLgorICAgICAqICAgVGhlIGRpZ2FtbWEgb3IgQGYkIFxwc2koeCkgQGYkIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBccHNpKHgpID0gXGZyYWN7XEdhbW1hJyh4KX17XEdhbW1hKHgpfQorICAgICAqICAgQGZdCisgICAgICogICBGb3IgbmVnYXRpdmUgYXJndW1lbnQgdGhlIHJlZmxlY3Rpb24gZm9ybXVsYSBpcyB1c2VkOgorICAgICAqICAgQGZbCisgICAgICogICAgIFxwc2koeCkgPSBccHNpKDEteCkgLSBccGkgXGNvdChccGkgeCkKKyAgICAgKiAgIEBmXQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3BzaShfVHAgX194KQorICAgIHsKKyAgICAgIGNvbnN0IGludCBfX24gPSBzdGF0aWNfY2FzdDxpbnQ+KF9feCArIDAuNUwpOworICAgICAgY29uc3QgX1RwIF9fZXBzID0gX1RwKDQpICogc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisgICAgICBpZiAoX19uIDw9IDAgJiYgc3RkOjphYnMoX194IC0gX1RwKF9fbikpIDwgX19lcHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194IDwgX1RwKDApKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fcGkgPSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKTsKKyAgICAgICAgICByZXR1cm4gX19wc2koX1RwKDEpIC0gX194KQorICAgICAgICAgICAgICAgLSBfX3BpICogc3RkOjpjb3MoX19waSAqIF9feCkgLyBzdGQ6OnNpbihfX3BpICogX194KTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoX194ID4gX1RwKDEwMCkpCisgICAgICAgIHJldHVybiBfX3BzaV9hc3ltcChfX3gpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX19wc2lfc2VyaWVzKF9feCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBwb2x5Z2FtbWEgZnVuY3Rpb24gQGYkIFxwc2leeyhuKX0oeCkgQGYkLgorICAgICAqIAorICAgICAqICAgVGhlIHBvbHlnYW1tYSBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIHRoZSBIdXJ3aXR6IHpldGEgZnVuY3Rpb246CisgICAgICogICBAZlsKKyAgICAgKiAgICAgXHBzaV57KG4pfSh4KSA9ICgtMSlee24rMX0gbSEgXHpldGEobSsxLHgpCisgICAgICogICBAZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wc2kodW5zaWduZWQgaW50IF9fbiwgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX194IDw9IF9UcCgwKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkFyZ3VtZW50IG91dCBvZiByYW5nZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX3BzaSIpKTsKKyAgICAgIGVsc2UgaWYgKF9fbiA9PSAwKQorICAgICAgICByZXR1cm4gX19wc2koX194KTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX2h6ZXRhID0gX19odXJ3aXR6X3pldGEoX1RwKF9fbiArIDEpLCBfX3gpOworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgICAgICBjb25zdCBfVHAgX19sbl9uZmFjdCA9IHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKF9fbiArIDEpKTsKKyNlbHNlCisgICAgICAgICAgY29uc3QgX1RwIF9fbG5fbmZhY3QgPSBfX2xvZ19nYW1tYShfVHAoX19uICsgMSkpOworI2VuZGlmCisgICAgICAgICAgX1RwIF9fcmVzdWx0ID0gc3RkOjpleHAoX19sbl9uZmFjdCkgKiBfX2h6ZXRhOworICAgICAgICAgIGlmIChfX24gJSAyID09IDEpCisgICAgICAgICAgICBfX3Jlc3VsdCA9IC1fX3Jlc3VsdDsKKyAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgIH0gLy8gbmFtZXNwYWNlIHN0ZDo6dHIxOjpfX2RldGFpbAorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0dBTU1BX1RDQworCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9oYXNodGFibGUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2hhc2h0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmZkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9oYXNodGFibGUuaApAQCAtMCwwICsxLDExODEgQEAKKy8vIFRSMSBoYXNodGFibGUuaCBoZWFkZXIgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9oYXNodGFibGUuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuCisgKiAgQGhlYWRlcm5hbWV7dHIxL3Vub3JkZXJlZF9zZXQsIHRyMS91bm9yZGVyZWRfbWFwfQorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0hBU0hUQUJMRV9ICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9IQVNIVEFCTEVfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHRyMS9oYXNodGFibGVfcG9saWN5Lmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBDbGFzcyB0ZW1wbGF0ZSBfSGFzaHRhYmxlLCBjbGFzcyBkZWZpbml0aW9uLgorCisgIC8vIE1lYW5pbmcgb2YgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZSdzIHRlbXBsYXRlIHBhcmFtZXRlcnMKKworICAvLyBfS2V5IGFuZCBfVmFsdWU6IGFyYml0cmFyeSBDb3B5Q29uc3RydWN0aWJsZSB0eXBlcy4KKworICAvLyBfQWxsb2NhdG9yOiBhbiBhbGxvY2F0b3IgdHlwZSAoW2xpYi5hbGxvY2F0b3IucmVxdWlyZW1lbnRzXSkgd2hvc2UKKyAgLy8gdmFsdWUgdHlwZSBpcyBWYWx1ZS4gIEFzIGEgY29uZm9ybWluZyBleHRlbnNpb24sIHdlIGFsbG93IGZvcgorICAvLyB2YWx1ZSB0eXBlICE9IFZhbHVlLgorCisgIC8vIF9FeHRyYWN0S2V5OiBmdW5jdGlvbiBvYmplY3QgdGhhdCB0YWtlcyBhIG9iamVjdCBvZiB0eXBlIFZhbHVlCisgIC8vIGFuZCByZXR1cm5zIGEgdmFsdWUgb2YgdHlwZSBfS2V5LgorCisgIC8vIF9FcXVhbDogZnVuY3Rpb24gb2JqZWN0IHRoYXQgdGFrZXMgdHdvIG9iamVjdHMgb2YgdHlwZSBrIGFuZCByZXR1cm5zCisgIC8vIGEgYm9vbC1saWtlIHZhbHVlIHRoYXQgaXMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1YWwuCisKKyAgLy8gX0gxOiB0aGUgaGFzaCBmdW5jdGlvbi4gIEEgdW5hcnkgZnVuY3Rpb24gb2JqZWN0IHdpdGggYXJndW1lbnQgdHlwZQorICAvLyBLZXkgYW5kIHJlc3VsdCB0eXBlIHNpemVfdC4gIFJldHVybiB2YWx1ZXMgc2hvdWxkIGJlIGRpc3RyaWJ1dGVkCisgIC8vIG92ZXIgdGhlIGVudGlyZSByYW5nZSBbMCwgbnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6Om1heCgpXS4KKworICAvLyBfSDI6IHRoZSByYW5nZS1oYXNoaW5nIGZ1bmN0aW9uIChpbiB0aGUgdGVybWlub2xvZ3kgb2YgVGF2b3JpIGFuZAorICAvLyBEcmVpemluKS4gIEEgYmluYXJ5IGZ1bmN0aW9uIG9iamVjdCB3aG9zZSBhcmd1bWVudCB0eXBlcyBhbmQgcmVzdWx0CisgIC8vIHR5cGUgYXJlIGFsbCBzaXplX3QuICBHaXZlbiBhcmd1bWVudHMgciBhbmQgTiwgdGhlIHJldHVybiB2YWx1ZSBpcworICAvLyBpbiB0aGUgcmFuZ2UgWzAsIE4pLgorCisgIC8vIF9IYXNoOiB0aGUgcmFuZ2VkIGhhc2ggZnVuY3Rpb24gKFRhdm9yaSBhbmQgRHJlaXppbikuIEEgYmluYXJ5IGZ1bmN0aW9uCisgIC8vIHdob3NlIGFyZ3VtZW50IHR5cGVzIGFyZSBfS2V5IGFuZCBzaXplX3QgYW5kIHdob3NlIHJlc3VsdCB0eXBlIGlzCisgIC8vIHNpemVfdC4gIEdpdmVuIGFyZ3VtZW50cyBrIGFuZCBOLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGluIHRoZSByYW5nZQorICAvLyBbMCwgTikuICBEZWZhdWx0OiBoYXNoKGssIE4pID0gaDIoaDEoayksIE4pLiAgSWYgX0hhc2ggaXMgYW55dGhpbmcgb3RoZXIKKyAgLy8gdGhhbiB0aGUgZGVmYXVsdCwgX0gxIGFuZCBfSDIgYXJlIGlnbm9yZWQuCisKKyAgLy8gX1JlaGFzaFBvbGljeTogUG9saWN5IGNsYXNzIHdpdGggdGhyZWUgbWVtYmVycywgYWxsIG9mIHdoaWNoIGdvdmVybgorICAvLyB0aGUgYnVja2V0IGNvdW50LiBfTV9uZXh0X2JrdChuKSByZXR1cm5zIGEgYnVja2V0IGNvdW50IG5vIHNtYWxsZXIKKyAgLy8gdGhhbiBuLiAgX01fYmt0X2Zvcl9lbGVtZW50cyhuKSByZXR1cm5zIGEgYnVja2V0IGNvdW50IGFwcHJvcHJpYXRlCisgIC8vIGZvciBhbiBlbGVtZW50IGNvdW50IG9mIG4uICBfTV9uZWVkX3JlaGFzaChuX2JrdCwgbl9lbHQsIG5faW5zKQorICAvLyBkZXRlcm1pbmVzIHdoZXRoZXIsIGlmIHRoZSBjdXJyZW50IGJ1Y2tldCBjb3VudCBpcyBuX2JrdCBhbmQgdGhlCisgIC8vIGN1cnJlbnQgZWxlbWVudCBjb3VudCBpcyBuX2VsdCwgd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgYnVja2V0CisgIC8vIGNvdW50LiAgSWYgc28sIHJldHVybnMgbWFrZV9wYWlyKHRydWUsIG4pLCB3aGVyZSBuIGlzIHRoZSBuZXcKKyAgLy8gYnVja2V0IGNvdW50LiAgSWYgbm90LCByZXR1cm5zIG1ha2VfcGFpcihmYWxzZSwgPGFueXRoaW5nPikuCisKKyAgLy8gPz8/IFJpZ2h0IG5vdyBpdCBpcyBoYXJkLXdpcmVkIHRoYXQgdGhlIG51bWJlciBvZiBidWNrZXRzIG5ldmVyCisgIC8vIHNocmlua3MuICBTaG91bGQgd2UgYWxsb3cgX1JlaGFzaFBvbGljeSB0byBjaGFuZ2UgdGhhdD8KKworICAvLyBfX2NhY2hlX2hhc2hfY29kZTogYm9vbC4gIHRydWUgaWYgd2Ugc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBoYXNoCisgIC8vIGZ1bmN0aW9uIGFsb25nIHdpdGggdGhlIHZhbHVlLiAgVGhpcyBpcyBhIHRpbWUtc3BhY2UgdHJhZGVvZmYuCisgIC8vIFN0b3JpbmcgaXQgbWF5IGltcHJvdmUgbG9va3VwIHNwZWVkIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGltZXMKKyAgLy8gd2UgbmVlZCB0byBjYWxsIHRoZSBFcXVhbCBmdW5jdGlvbi4KKworICAvLyBfX2NvbnN0YW50X2l0ZXJhdG9yczogYm9vbC4gIHRydWUgaWYgaXRlcmF0b3IgYW5kIGNvbnN0X2l0ZXJhdG9yIGFyZQorICAvLyBib3RoIGNvbnN0YW50IGl0ZXJhdG9yIHR5cGVzLiAgVGhpcyBpcyB0cnVlIGZvciB1bm9yZGVyZWRfc2V0IGFuZAorICAvLyB1bm9yZGVyZWRfbXVsdGlzZXQsIGZhbHNlIGZvciB1bm9yZGVyZWRfbWFwIGFuZCB1bm9yZGVyZWRfbXVsdGltYXAuCisKKyAgLy8gX191bmlxdWVfa2V5czogYm9vbC4gIHRydWUgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBfSGFzaHRhYmxlOjpjb3VudChrKQorICAvLyBpcyBhbHdheXMgYXQgbW9zdCBvbmUsIGZhbHNlIGlmIGl0IG1heSBiZSBhbiBhcmJpdHJhcnkgbnVtYmVyLiAgVGhpcworICAvLyB0cnVlIGZvciB1bm9yZGVyZWRfc2V0IGFuZCB1bm9yZGVyZWRfbWFwLCBmYWxzZSBmb3IgdW5vcmRlcmVkX211bHRpc2V0CisgIC8vIGFuZCB1bm9yZGVyZWRfbXVsdGltYXAuCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2NhdG9yLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZSwKKwkgICBib29sIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCSAgIGJvb2wgX191bmlxdWVfa2V5cz4KKyAgICBjbGFzcyBfSGFzaHRhYmxlCisgICAgOiBwdWJsaWMgX19kZXRhaWw6Ol9SZWhhc2hfYmFzZTxfUmVoYXNoUG9saWN5LAorCQkJCSAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwKKwkJCQkJICAgICAgIF9FeHRyYWN0S2V5LAorCQkJCQkgICAgICAgX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsCisJCQkJCSAgICAgICBfUmVoYXNoUG9saWN5LAorCQkJCQkgICAgICAgX19jYWNoZV9oYXNoX2NvZGUsCisJCQkJCSAgICAgICBfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCQkJICAgICAgIF9fdW5pcXVlX2tleXM+ID4sCisgICAgICBwdWJsaWMgX19kZXRhaWw6Ol9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQkJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX19jYWNoZV9oYXNoX2NvZGU+LAorICAgICAgcHVibGljIF9fZGV0YWlsOjpfTWFwX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX191bmlxdWVfa2V5cywKKwkJCQkgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsCisJCQkJCSAgICBfRXh0cmFjdEtleSwKKwkJCQkJICAgIF9FcXVhbCwgX0gxLCBfSDIsIF9IYXNoLAorCQkJCQkgICAgX1JlaGFzaFBvbGljeSwKKwkJCQkJICAgIF9fY2FjaGVfaGFzaF9jb2RlLAorCQkJCQkgICAgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCSAgICBfX3VuaXF1ZV9rZXlzPiA+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV90eXBlOworICAgICAgdHlwZWRlZiBfRXF1YWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9lcXVhbDsKKyAgICAgIC8vIG1hcHBlZF90eXBlLCBpZiBwcmVzZW50LCBjb21lcyBmcm9tIF9NYXBfYmFzZS4KKyAgICAgIC8vIGhhc2hlciwgaWYgcHJlc2VudCwgY29tZXMgZnJvbSBfSGFzaF9jb2RlX2Jhc2UuCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OmRpZmZlcmVuY2VfdHlwZSAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjpzaXplX3R5cGUgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6cG9pbnRlciAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjpjb25zdF9wb2ludGVyICAgICAgICAgIGNvbnN0X3BvaW50ZXI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnJlZmVyZW5jZSAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjpjb25zdF9yZWZlcmVuY2UgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKworICAgICAgdHlwZWRlZiBfX2RldGFpbDo6X05vZGVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJICAgICAgIF9fY2FjaGVfaGFzaF9jb2RlPgorCQkJCQkJCSAgbG9jYWxfaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIF9fZGV0YWlsOjpfTm9kZV9jb25zdF9pdGVyYXRvcjx2YWx1ZV90eXBlLAorCQkJCQkgICAgIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCQkgICAgIF9fY2FjaGVfaGFzaF9jb2RlPgorCQkJCQkJCSAgY29uc3RfbG9jYWxfaXRlcmF0b3I7CisKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9IYXNodGFibGVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJCSAgICBfX2NhY2hlX2hhc2hfY29kZT4KKwkJCQkJCQkgIGl0ZXJhdG9yOworICAgICAgdHlwZWRlZiBfX2RldGFpbDo6X0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcjx2YWx1ZV90eXBlLAorCQkJCQkJICBfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCQkJCSAgX19jYWNoZV9oYXNoX2NvZGU+CisJCQkJCQkJICBjb25zdF9pdGVyYXRvcjsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleTIsIHR5cGVuYW1lIF9WYWx1ZTIsIHR5cGVuYW1lIF9FeDIsIGJvb2wgX191bmlxdWUyLAorCSAgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlMj4KKwlmcmllbmQgc3RydWN0IF9fZGV0YWlsOjpfTWFwX2Jhc2U7CisKKyAgICBwcml2YXRlOgorICAgICAgdHlwZWRlZiBfX2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGVfaGFzaF9jb2RlPiBfTm9kZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9Ob2RlPjo6b3RoZXIKKwkJCQkJCQlfTm9kZV9hbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9Ob2RlKj46Om90aGVyCisJCQkJCQkJX0J1Y2tldF9hbGxvY2F0b3JfdHlwZTsKKworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1ZhbHVlPjo6b3RoZXIKKwkJCQkJCQlfVmFsdWVfYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIF9Ob2RlX2FsbG9jYXRvcl90eXBlICAgX01fbm9kZV9hbGxvY2F0b3I7CisgICAgICBfTm9kZSoqICAgICAgICAgICAgICAgIF9NX2J1Y2tldHM7CisgICAgICBzaXplX3R5cGUgICAgICAgICAgICAgIF9NX2J1Y2tldF9jb3VudDsKKyAgICAgIHNpemVfdHlwZSAgICAgICAgICAgICAgX01fZWxlbWVudF9jb3VudDsKKyAgICAgIF9SZWhhc2hQb2xpY3kgICAgICAgICAgX01fcmVoYXNoX3BvbGljeTsKKworICAgICAgX05vZGUqCisgICAgICBfTV9hbGxvY2F0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfTm9kZSogX19uKTsKKworICAgICAgdm9pZAorICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlcyhfTm9kZSoqLCBzaXplX3R5cGUpOworCisgICAgICBfTm9kZSoqCisgICAgICBfTV9hbGxvY2F0ZV9idWNrZXRzKHNpemVfdHlwZSBfX24pOworCisgICAgICB2b2lkCisgICAgICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX05vZGUqKiwgc2l6ZV90eXBlIF9fbik7CisKKyAgICBwdWJsaWM6CisgICAgICAvLyBDb25zdHJ1Y3RvciwgZGVzdHJ1Y3RvciwgYXNzaWdubWVudCwgc3dhcAorICAgICAgX0hhc2h0YWJsZShzaXplX3R5cGUgX19idWNrZXRfaGludCwKKwkJIGNvbnN0IF9IMSYsIGNvbnN0IF9IMiYsIGNvbnN0IF9IYXNoJiwKKwkJIGNvbnN0IF9FcXVhbCYsIGNvbnN0IF9FeHRyYWN0S2V5JiwKKwkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJik7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorCV9IYXNodGFibGUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCQkgICBzaXplX3R5cGUgX19idWNrZXRfaGludCwKKwkJICAgY29uc3QgX0gxJiwgY29uc3QgX0gyJiwgY29uc3QgX0hhc2gmLAorCQkgICBjb25zdCBfRXF1YWwmLCBjb25zdCBfRXh0cmFjdEtleSYsCisJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJik7CisKKyAgICAgIF9IYXNodGFibGUoY29uc3QgX0hhc2h0YWJsZSYpOworCisgICAgICBfSGFzaHRhYmxlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9IYXNodGFibGUmKTsKKworICAgICAgfl9IYXNodGFibGUoKTsKKworICAgICAgdm9pZCBzd2FwKF9IYXNodGFibGUmKTsKKworICAgICAgLy8gQmFzaWMgY29udGFpbmVyIG9wZXJhdGlvbnMKKyAgICAgIGl0ZXJhdG9yCisgICAgICBiZWdpbigpCisgICAgICB7CisJaXRlcmF0b3IgX19pKF9NX2J1Y2tldHMpOworCWlmICghX19pLl9NX2N1cl9ub2RlKQorCSAgX19pLl9NX2luY3JfYnVja2V0KCk7CisJcmV0dXJuIF9faTsKKyAgICAgIH0KKworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGJlZ2luKCkgY29uc3QKKyAgICAgIHsKKwljb25zdF9pdGVyYXRvciBfX2koX01fYnVja2V0cyk7CisJaWYgKCFfX2kuX01fY3VyX25vZGUpCisJICBfX2kuX01faW5jcl9idWNrZXQoKTsKKwlyZXR1cm4gX19pOworICAgICAgfQorCisgICAgICBpdGVyYXRvcgorICAgICAgZW5kKCkKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2J1Y2tldHMgKyBfTV9idWNrZXRfY291bnQpOyB9CisKKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBlbmQoKSBjb25zdAorICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fYnVja2V0cyArIF9NX2J1Y2tldF9jb3VudCk7IH0KKworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2VsZW1lbnRfY291bnQ7IH0KKworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KKworICAgICAgYWxsb2NhdG9yX3R5cGUKKyAgICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdAorICAgICAgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoX01fbm9kZV9hbGxvY2F0b3IpOyB9CisKKyAgICAgIF9WYWx1ZV9hbGxvY2F0b3JfdHlwZQorICAgICAgX01fZ2V0X1ZhbHVlX2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiBfVmFsdWVfYWxsb2NhdG9yX3R5cGUoX01fbm9kZV9hbGxvY2F0b3IpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X3NpemUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IubWF4X3NpemUoKTsgfQorCisgICAgICAvLyBPYnNlcnZlcnMKKyAgICAgIGtleV9lcXVhbAorICAgICAga2V5X2VxKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2VxOyB9CisKKyAgICAgIC8vIGhhc2hfZnVuY3Rpb24sIGlmIHByZXNlbnQsIGNvbWVzIGZyb20gX0hhc2hfY29kZV9iYXNlLgorCisgICAgICAvLyBCdWNrZXQgb3BlcmF0aW9ucworICAgICAgc2l6ZV90eXBlCisgICAgICBidWNrZXRfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYnVja2V0X2NvdW50OyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgbWF4X2J1Y2tldF9jb3VudCgpIGNvbnN0CisgICAgICB7IHJldHVybiBtYXhfc2l6ZSgpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0X3NpemUoc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6ZGlzdGFuY2UoYmVnaW4oX19uKSwgZW5kKF9fbikpOyB9CisKKyAgICAgIHNpemVfdHlwZQorICAgICAgYnVja2V0KGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIHRoaXMtPl9NX2hhc2hfY29kZShfX2spLAorCQkJCSAgICAgYnVja2V0X2NvdW50KCkpOworICAgICAgfQorCisgICAgICBsb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fbikKKyAgICAgIHsgcmV0dXJuIGxvY2FsX2l0ZXJhdG9yKF9NX2J1Y2tldHNbX19uXSk7IH0KKworICAgICAgbG9jYWxfaXRlcmF0b3IKKyAgICAgIGVuZChzaXplX3R5cGUpCisgICAgICB7IHJldHVybiBsb2NhbF9pdGVyYXRvcigwKTsgfQorCisgICAgICBjb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgYmVnaW4oc2l6ZV90eXBlIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIGNvbnN0X2xvY2FsX2l0ZXJhdG9yKF9NX2J1Y2tldHNbX19uXSk7IH0KKworICAgICAgY29uc3RfbG9jYWxfaXRlcmF0b3IKKyAgICAgIGVuZChzaXplX3R5cGUpIGNvbnN0CisgICAgICB7IHJldHVybiBjb25zdF9sb2NhbF9pdGVyYXRvcigwKTsgfQorCisgICAgICBmbG9hdAorICAgICAgbG9hZF9mYWN0b3IoKSBjb25zdAorICAgICAgeworCXJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc2l6ZSgpKSAvIHN0YXRpY19jYXN0PGZsb2F0PihidWNrZXRfY291bnQoKSk7CisgICAgICB9CisKKyAgICAgIC8vIG1heF9sb2FkX2ZhY3RvciwgaWYgcHJlc2VudCwgY29tZXMgZnJvbSBfUmVoYXNoX2Jhc2UuCisKKyAgICAgIC8vIEdlbmVyYWxpemF0aW9uIG9mIG1heF9sb2FkX2ZhY3Rvci4gIEV4dGVuc2lvbiwgbm90IGZvdW5kIGluIFRSMS4gIE9ubHkKKyAgICAgIC8vIHVzZWZ1bCBpZiBfUmVoYXNoUG9saWN5IGlzIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0LgorICAgICAgY29uc3QgX1JlaGFzaFBvbGljeSYKKyAgICAgIF9fcmVoYXNoX3BvbGljeSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9yZWhhc2hfcG9saWN5OyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9fcmVoYXNoX3BvbGljeShjb25zdCBfUmVoYXNoUG9saWN5Jik7CisKKyAgICAgIC8vIExvb2t1cC4KKyAgICAgIGl0ZXJhdG9yCisgICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX2spOworCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdDsKKworICAgICAgc2l6ZV90eXBlCisgICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdDsKKworICAgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4KKyAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spOworCisgICAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPgorICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3Q7CisKKyAgICBwcml2YXRlOgkJCS8vIEZpbmQsIGluc2VydCBhbmQgZXJhc2UgaGVscGVyIGZ1bmN0aW9ucworICAgICAgLy8gPz8/IFRoaXMgZGlzcGF0Y2hpbmcgaXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgZmFjdCB0aGF0IHdlIGRvbid0CisgICAgICAvLyBoYXZlIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgbWVtYmVyIHRlbXBsYXRlczsgaXQgd291bGQgYmUKKyAgICAgIC8vIGJldHRlciB0byBqdXN0IHNwZWNpYWxpemUgaW5zZXJ0IG9uIF9fdW5pcXVlX2tleXMuICBUaGVyZSBtYXkgYmUgYQorICAgICAgLy8gY2xlYW5lciB3b3JrYXJvdW5kLgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fY29uZGl0aW9uYWxfdHlwZTxfX3VuaXF1ZV9rZXlzLAorCQkgICAgICAgCSAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+LCBpdGVyYXRvcj46Ol9fdHlwZQorCV9JbnNlcnRfUmV0dXJuX1R5cGU7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2NvbmRpdGlvbmFsX3R5cGU8X191bmlxdWVfa2V5cywKKwkJCQkJICBzdGQ6Ol9TZWxlY3Qxc3Q8X0luc2VydF9SZXR1cm5fVHlwZT4sCisJCQkJICAJICBzdGQ6Ol9JZGVudGl0eTxfSW5zZXJ0X1JldHVybl9UeXBlPgorCQkJCSAgID46Ol9fdHlwZQorCV9JbnNlcnRfQ29udl9UeXBlOworCisgICAgICBfTm9kZSoKKyAgICAgIF9NX2ZpbmRfbm9kZShfTm9kZSosIGNvbnN0IGtleV90eXBlJiwKKwkJICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlKSBjb25zdDsKKworICAgICAgaXRlcmF0b3IKKyAgICAgIF9NX2luc2VydF9idWNrZXQoY29uc3QgdmFsdWVfdHlwZSYsIHNpemVfdHlwZSwKKwkJICAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSk7CisKKyAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KKyAgICAgIF9NX2luc2VydChjb25zdCB2YWx1ZV90eXBlJiwgc3RkOjp0cjE6OnRydWVfdHlwZSk7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBfTV9pbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYsIHN0ZDo6dHIxOjpmYWxzZV90eXBlKTsKKworICAgICAgdm9pZAorICAgICAgX01fZXJhc2Vfbm9kZShfTm9kZSosIF9Ob2RlKiopOworCisgICAgcHVibGljOgorICAgICAgLy8gSW5zZXJ0IGFuZCBlcmFzZQorICAgICAgX0luc2VydF9SZXR1cm5fVHlwZQorICAgICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fdikKKyAgICAgIHsgcmV0dXJuIF9NX2luc2VydChfX3YsIHN0ZDo6dHIxOjppbnRlZ3JhbF9jb25zdGFudDxib29sLAorCQkJIF9fdW5pcXVlX2tleXM+KCkpOyB9CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBpbnNlcnQoaXRlcmF0b3IsIGNvbnN0IHZhbHVlX3R5cGUmIF9fdikKKyAgICAgIHsgcmV0dXJuIGl0ZXJhdG9yKF9JbnNlcnRfQ29udl9UeXBlKCkodGhpcy0+aW5zZXJ0KF9fdikpKTsgfQorCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yLCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfSW5zZXJ0X0NvbnZfVHlwZSgpKHRoaXMtPmluc2VydChfX3YpKSk7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdm9pZAorCWluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpOworCisgICAgICBpdGVyYXRvcgorICAgICAgZXJhc2UoaXRlcmF0b3IpOworCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IpOworCisgICAgICBzaXplX3R5cGUKKyAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJik7CisKKyAgICAgIGl0ZXJhdG9yCisgICAgICBlcmFzZShpdGVyYXRvciwgaXRlcmF0b3IpOworCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZXJhc2UoY29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yKTsKKworICAgICAgdm9pZAorICAgICAgY2xlYXIoKTsKKworICAgICAgLy8gU2V0IG51bWJlciBvZiBidWNrZXRzIHRvIGJlIGFwcHJvcHJpYXRlIGZvciBjb250YWluZXIgb2YgbiBlbGVtZW50LgorICAgICAgdm9pZCByZWhhc2goc2l6ZV90eXBlIF9fbik7CisKKyAgICBwcml2YXRlOgorICAgICAgLy8gVW5jb25kaXRpb25hbGx5IGNoYW5nZSBzaXplIG9mIGJ1Y2tldCBhcnJheSB0byBuLgorICAgICAgdm9pZCBfTV9yZWhhc2goc2l6ZV90eXBlIF9fbik7CisgICAgfTsKKworCisgIC8vIERlZmluaXRpb25zIG9mIGNsYXNzIHRlbXBsYXRlIF9IYXNodGFibGUncyBvdXQtb2YtbGluZSBtZW1iZXIgZnVuY3Rpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6X05vZGUqCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fYWxsb2NhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3YpCisgICAgeworICAgICAgX05vZGUqIF9fbiA9IF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOworICAgICAgX190cnkKKwl7CisJICBfTV9nZXRfVmFsdWVfYWxsb2NhdG9yKCkuY29uc3RydWN0KCZfX24tPl9NX3YsIF9fdik7CisJICBfX24tPl9NX25leHQgPSAwOworCSAgcmV0dXJuIF9fbjsKKwl9CisgICAgICBfX2NhdGNoKC4uLikKKwl7CisJICBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fbiwgMSk7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2RlYWxsb2NhdGVfbm9kZShfTm9kZSogX19uKQorICAgIHsKKyAgICAgIF9NX2dldF9WYWx1ZV9hbGxvY2F0b3IoKS5kZXN0cm95KCZfX24tPl9NX3YpOworICAgICAgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX24sIDEpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfTV9kZWFsbG9jYXRlX25vZGVzKF9Ob2RlKiogX19hcnJheSwgc2l6ZV90eXBlIF9fbikKKyAgICB7CisgICAgICBmb3IgKHNpemVfdHlwZSBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQorCXsKKwkgIF9Ob2RlKiBfX3AgPSBfX2FycmF5W19faV07CisJICB3aGlsZSAoX19wKQorCSAgICB7CisJICAgICAgX05vZGUqIF9fdG1wID0gX19wOworCSAgICAgIF9fcCA9IF9fcC0+X01fbmV4dDsKKwkgICAgICBfTV9kZWFsbG9jYXRlX25vZGUoX190bXApOworCSAgICB9CisJICBfX2FycmF5W19faV0gPSAwOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Ol9Ob2RlKioKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfTV9hbGxvY2F0ZV9idWNrZXRzKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX0J1Y2tldF9hbGxvY2F0b3JfdHlwZSBfX2FsbG9jKF9NX25vZGVfYWxsb2NhdG9yKTsKKworICAgICAgLy8gV2UgYWxsb2NhdGUgb25lIGV4dHJhIGJ1Y2tldCB0byBob2xkIGEgc2VudGluZWwsIGFuIGFyYml0cmFyeQorICAgICAgLy8gbm9uLW51bGwgcG9pbnRlci4gIEl0ZXJhdG9yIGluY3JlbWVudCByZWxpZXMgb24gdGhpcy4KKyAgICAgIF9Ob2RlKiogX19wID0gX19hbGxvYy5hbGxvY2F0ZShfX24gKyAxKTsKKyAgICAgIHN0ZDo6ZmlsbChfX3AsIF9fcCArIF9fbiwgKF9Ob2RlKikgMCk7CisgICAgICBfX3BbX19uXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X05vZGUqPigweDEwMDApOworICAgICAgcmV0dXJuIF9fcDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9Ob2RlKiogX19wLCBzaXplX3R5cGUgX19uKQorICAgIHsKKyAgICAgIF9CdWNrZXRfYWxsb2NhdG9yX3R5cGUgX19hbGxvYyhfTV9ub2RlX2FsbG9jYXRvcik7CisgICAgICBfX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKyAxKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfSGFzaHRhYmxlKHNpemVfdHlwZSBfX2J1Y2tldF9oaW50LAorCSAgICAgICBjb25zdCBfSDEmIF9faDEsIGNvbnN0IF9IMiYgX19oMiwgY29uc3QgX0hhc2gmIF9faCwKKwkgICAgICAgY29uc3QgX0VxdWFsJiBfX2VxLCBjb25zdCBfRXh0cmFjdEtleSYgX19leGssCisJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCisgICAgOiBfX2RldGFpbDo6X1JlaGFzaF9iYXNlPF9SZWhhc2hQb2xpY3ksIF9IYXNodGFibGU+KCksCisgICAgICBfX2RldGFpbDo6X0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCQlfSDEsIF9IMiwgX0hhc2gsIF9fY2hjPihfX2V4aywgX19lcSwKKwkJCQkJCQlfX2gxLCBfX2gyLCBfX2gpLAorICAgICAgX19kZXRhaWw6Ol9NYXBfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfX3VrLCBfSGFzaHRhYmxlPigpLAorICAgICAgX01fbm9kZV9hbGxvY2F0b3IoX19hKSwKKyAgICAgIF9NX2J1Y2tldF9jb3VudCgwKSwKKyAgICAgIF9NX2VsZW1lbnRfY291bnQoMCksCisgICAgICBfTV9yZWhhc2hfcG9saWN5KCkKKyAgICB7CisgICAgICBfTV9idWNrZXRfY291bnQgPSBfTV9yZWhhc2hfcG9saWN5Ll9NX25leHRfYmt0KF9fYnVja2V0X2hpbnQpOworICAgICAgX01fYnVja2V0cyA9IF9NX2FsbG9jYXRlX2J1Y2tldHMoX01fYnVja2V0X2NvdW50KTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKyAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICAgIF9IYXNodGFibGUoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCSBzaXplX3R5cGUgX19idWNrZXRfaGludCwKKwkJIGNvbnN0IF9IMSYgX19oMSwgY29uc3QgX0gyJiBfX2gyLCBjb25zdCBfSGFzaCYgX19oLAorCQkgY29uc3QgX0VxdWFsJiBfX2VxLCBjb25zdCBfRXh0cmFjdEtleSYgX19leGssCisJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQorICAgICAgOiBfX2RldGFpbDo6X1JlaGFzaF9iYXNlPF9SZWhhc2hQb2xpY3ksIF9IYXNodGFibGU+KCksCisJX19kZXRhaWw6Ol9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQkJICBfSDEsIF9IMiwgX0hhc2gsIF9fY2hjPihfX2V4aywgX19lcSwKKwkJCQkJCQkgIF9faDEsIF9faDIsIF9faCksCisJX19kZXRhaWw6Ol9NYXBfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfX3VrLCBfSGFzaHRhYmxlPigpLAorCV9NX25vZGVfYWxsb2NhdG9yKF9fYSksCisJX01fYnVja2V0X2NvdW50KDApLAorCV9NX2VsZW1lbnRfY291bnQoMCksCisJX01fcmVoYXNoX3BvbGljeSgpCisgICAgICB7CisJX01fYnVja2V0X2NvdW50ID0gc3RkOjptYXgoX01fcmVoYXNoX3BvbGljeS5fTV9uZXh0X2JrdChfX2J1Y2tldF9oaW50KSwKKwkJCQkgICBfTV9yZWhhc2hfcG9saWN5LgorCQkJCSAgIF9NX2JrdF9mb3JfZWxlbWVudHMoX19kZXRhaWw6OgorCQkJCQkJICAgICAgIF9fZGlzdGFuY2VfZncoX19mLAorCQkJCQkJCQkgICAgIF9fbCkpKTsKKwlfTV9idWNrZXRzID0gX01fYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRfY291bnQpOworCV9fdHJ5CisJICB7CisJICAgIGZvciAoOyBfX2YgIT0gX19sOyArK19fZikKKwkgICAgICB0aGlzLT5pbnNlcnQoKl9fZik7CisJICB9CisJX19jYXRjaCguLi4pCisJICB7CisJICAgIGNsZWFyKCk7CisJICAgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRzLCBfTV9idWNrZXRfY291bnQpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9IYXNodGFibGUoY29uc3QgX0hhc2h0YWJsZSYgX19odCkKKyAgICA6IF9fZGV0YWlsOjpfUmVoYXNoX2Jhc2U8X1JlaGFzaFBvbGljeSwgX0hhc2h0YWJsZT4oX19odCksCisgICAgICBfX2RldGFpbDo6X0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCQlfSDEsIF9IMiwgX0hhc2gsIF9fY2hjPihfX2h0KSwKKyAgICAgIF9fZGV0YWlsOjpfTWFwX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX191aywgX0hhc2h0YWJsZT4oX19odCksCisgICAgICBfTV9ub2RlX2FsbG9jYXRvcihfX2h0Ll9NX25vZGVfYWxsb2NhdG9yKSwKKyAgICAgIF9NX2J1Y2tldF9jb3VudChfX2h0Ll9NX2J1Y2tldF9jb3VudCksCisgICAgICBfTV9lbGVtZW50X2NvdW50KF9faHQuX01fZWxlbWVudF9jb3VudCksCisgICAgICBfTV9yZWhhc2hfcG9saWN5KF9faHQuX01fcmVoYXNoX3BvbGljeSkKKyAgICB7CisgICAgICBfTV9idWNrZXRzID0gX01fYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRfY291bnQpOworICAgICAgX190cnkKKwl7CisJICBmb3IgKHNpemVfdHlwZSBfX2kgPSAwOyBfX2kgPCBfX2h0Ll9NX2J1Y2tldF9jb3VudDsgKytfX2kpCisJICAgIHsKKwkgICAgICBfTm9kZSogX19uID0gX19odC5fTV9idWNrZXRzW19faV07CisJICAgICAgX05vZGUqKiBfX3RhaWwgPSBfTV9idWNrZXRzICsgX19pOworCSAgICAgIHdoaWxlIChfX24pCisJCXsKKwkJICAqX190YWlsID0gX01fYWxsb2NhdGVfbm9kZShfX24tPl9NX3YpOworCQkgIHRoaXMtPl9NX2NvcHlfY29kZSgqX190YWlsLCBfX24pOworCQkgIF9fdGFpbCA9ICYoKCpfX3RhaWwpLT5fTV9uZXh0KTsKKwkJICBfX24gPSBfX24tPl9NX25leHQ7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIGNsZWFyKCk7CisJICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX01fYnVja2V0cywgX01fYnVja2V0X2NvdW50KTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+JgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIG9wZXJhdG9yPShjb25zdCBfSGFzaHRhYmxlJiBfX2h0KQorICAgIHsKKyAgICAgIF9IYXNodGFibGUgX190bXAoX19odCk7CisgICAgICB0aGlzLT5zd2FwKF9fdG1wKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICB+X0hhc2h0YWJsZSgpCisgICAgeworICAgICAgY2xlYXIoKTsKKyAgICAgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfTV9idWNrZXRzLCBfTV9idWNrZXRfY291bnQpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHZvaWQKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBzd2FwKF9IYXNodGFibGUmIF9feCkKKyAgICB7CisgICAgICAvLyBUaGUgb25seSBiYXNlIGNsYXNzIHdpdGggbWVtYmVyIHZhcmlhYmxlcyBpcyBoYXNoX2NvZGVfYmFzZS4gIFdlCisgICAgICAvLyBkZWZpbmUgX0hhc2hfY29kZV9iYXNlOjpfTV9zd2FwIGJlY2F1c2UgZGlmZmVyZW50IHNwZWNpYWxpemF0aW9ucworICAgICAgLy8gaGF2ZSBkaWZmZXJlbnQgbWVtYmVycy4KKyAgICAgIF9fZGV0YWlsOjpfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCV9IMSwgX0gyLCBfSGFzaCwgX19jaGM+OjpfTV9zd2FwKF9feCk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDQzMS4gU3dhcHBpbmcgY29udGFpbmVycyB3aXRoIHVuZXF1YWwgYWxsb2NhdG9ycy4KKyAgICAgIHN0ZDo6X19hbGxvY19zd2FwPF9Ob2RlX2FsbG9jYXRvcl90eXBlPjo6X1NfZG9faXQoX01fbm9kZV9hbGxvY2F0b3IsCisJCQkJCQkJX194Ll9NX25vZGVfYWxsb2NhdG9yKTsKKworICAgICAgc3RkOjpzd2FwKF9NX3JlaGFzaF9wb2xpY3ksIF9feC5fTV9yZWhhc2hfcG9saWN5KTsKKyAgICAgIHN0ZDo6c3dhcChfTV9idWNrZXRzLCBfX3guX01fYnVja2V0cyk7CisgICAgICBzdGQ6OnN3YXAoX01fYnVja2V0X2NvdW50LCBfX3guX01fYnVja2V0X2NvdW50KTsKKyAgICAgIHN0ZDo6c3dhcChfTV9lbGVtZW50X2NvdW50LCBfX3guX01fZWxlbWVudF9jb3VudCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9fcmVoYXNoX3BvbGljeShjb25zdCBfUmVoYXNoUG9saWN5JiBfX3BvbCkKKyAgICB7CisgICAgICBfTV9yZWhhc2hfcG9saWN5ID0gX19wb2w7CisgICAgICBzaXplX3R5cGUgX19uX2JrdCA9IF9fcG9sLl9NX2JrdF9mb3JfZWxlbWVudHMoX01fZWxlbWVudF9jb3VudCk7CisgICAgICBpZiAoX19uX2JrdCA+IF9NX2J1Y2tldF9jb3VudCkKKwlfTV9yZWhhc2goX19uX2JrdCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvcgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICB7CisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUgX19jb2RlID0gdGhpcy0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzdGQ6OnNpemVfdCBfX24gPSB0aGlzLT5fTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgICBfTm9kZSogX19wID0gX01fZmluZF9ub2RlKF9NX2J1Y2tldHNbX19uXSwgX19rLCBfX2NvZGUpOworICAgICAgcmV0dXJuIF9fcCA/IGl0ZXJhdG9yKF9fcCwgX01fYnVja2V0cyArIF9fbikgOiB0aGlzLT5lbmQoKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX19rKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIF9Ob2RlKiBfX3AgPSBfTV9maW5kX25vZGUoX01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSk7CisgICAgICByZXR1cm4gX19wID8gY29uc3RfaXRlcmF0b3IoX19wLCBfTV9idWNrZXRzICsgX19uKSA6IHRoaXMtPmVuZCgpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6c2l6ZV90eXBlCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9faykgY29uc3QKKyAgICB7CisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUgX19jb2RlID0gdGhpcy0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzdGQ6OnNpemVfdCBfX24gPSB0aGlzLT5fTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgICBzdGQ6OnNpemVfdCBfX3Jlc3VsdCA9IDA7CisgICAgICBmb3IgKF9Ob2RlKiBfX3AgPSBfTV9idWNrZXRzW19fbl07IF9fcDsgX19wID0gX19wLT5fTV9uZXh0KQorCWlmICh0aGlzLT5fTV9jb21wYXJlKF9faywgX19jb2RlLCBfX3ApKQorCSAgKytfX3Jlc3VsdDsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICBzdGQ6OnBhaXI8dHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsCisJCQkJICBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsCisJCQkJICBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJCSAgX19jaGMsIF9fY2l0LCBfX3VrPjo6aXRlcmF0b3IsCisJICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsCisJCQkJICBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsCisJCQkJICBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJCSAgX19jaGMsIF9fY2l0LCBfX3VrPjo6aXRlcmF0b3I+CisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9faykKKyAgICB7CisgICAgICB0eXBlbmFtZSBfSGFzaHRhYmxlOjpfSGFzaF9jb2RlX3R5cGUgX19jb2RlID0gdGhpcy0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzdGQ6OnNpemVfdCBfX24gPSB0aGlzLT5fTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgICBfTm9kZSoqIF9faGVhZCA9IF9NX2J1Y2tldHMgKyBfX247CisgICAgICBfTm9kZSogX19wID0gX01fZmluZF9ub2RlKCpfX2hlYWQsIF9faywgX19jb2RlKTsKKworICAgICAgaWYgKF9fcCkKKwl7CisJICBfTm9kZSogX19wMSA9IF9fcC0+X01fbmV4dDsKKwkgIGZvciAoOyBfX3AxOyBfX3AxID0gX19wMS0+X01fbmV4dCkKKwkgICAgaWYgKCF0aGlzLT5fTV9jb21wYXJlKF9faywgX19jb2RlLCBfX3AxKSkKKwkgICAgICBicmVhazsKKworCSAgaXRlcmF0b3IgX19maXJzdChfX3AsIF9faGVhZCk7CisJICBpdGVyYXRvciBfX2xhc3QoX19wMSwgX19oZWFkKTsKKwkgIGlmICghX19wMSkKKwkgICAgX19sYXN0Ll9NX2luY3JfYnVja2V0KCk7CisJICByZXR1cm4gc3RkOjptYWtlX3BhaXIoX19maXJzdCwgX19sYXN0KTsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHRoaXMtPmVuZCgpLCB0aGlzLT5lbmQoKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgc3RkOjpwYWlyPHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCSAgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLAorCQkJCSAgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCQkgIF9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yLAorCSAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLAorCQkJCSAgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLAorCQkJCSAgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCQkgIF9fY2hjLCBfX2NpdCwgX191az46OmNvbnN0X2l0ZXJhdG9yPgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX2spIGNvbnN0CisgICAgeworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc3RkOjpzaXplX3QgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfTV9idWNrZXRfY291bnQpOworICAgICAgX05vZGUqKiBfX2hlYWQgPSBfTV9idWNrZXRzICsgX19uOworICAgICAgX05vZGUqIF9fcCA9IF9NX2ZpbmRfbm9kZSgqX19oZWFkLCBfX2ssIF9fY29kZSk7CisKKyAgICAgIGlmIChfX3ApCisJeworCSAgX05vZGUqIF9fcDEgPSBfX3AtPl9NX25leHQ7CisJICBmb3IgKDsgX19wMTsgX19wMSA9IF9fcDEtPl9NX25leHQpCisJICAgIGlmICghdGhpcy0+X01fY29tcGFyZShfX2ssIF9fY29kZSwgX19wMSkpCisJICAgICAgYnJlYWs7CisKKwkgIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QoX19wLCBfX2hlYWQpOworCSAgY29uc3RfaXRlcmF0b3IgX19sYXN0KF9fcDEsIF9faGVhZCk7CisJICBpZiAoIV9fcDEpCisJICAgIF9fbGFzdC5fTV9pbmNyX2J1Y2tldCgpOworCSAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKF9fZmlyc3QsIF9fbGFzdCk7CisJfQorICAgICAgZWxzZQorCXJldHVybiBzdGQ6Om1ha2VfcGFpcih0aGlzLT5lbmQoKSwgdGhpcy0+ZW5kKCkpOworICAgIH0KKworICAvLyBGaW5kIHRoZSBub2RlIHdob3NlIGtleSBjb21wYXJlcyBlcXVhbCB0byBrLCBiZWdpbm5pbmcgdGhlIHNlYXJjaAorICAvLyBhdCBwICh1c3VhbGx5IHRoZSBoZWFkIG9mIGEgYnVja2V0KS4gIFJldHVybiB6ZXJvIGlmIG5vIG5vZGUgaXMgZm91bmQuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LAorCQkJX0VxdWFsLCBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjpfTm9kZSoKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfTV9maW5kX25vZGUoX05vZGUqIF9fcCwgY29uc3Qga2V5X3R5cGUmIF9faywKKwkJdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSkgY29uc3QKKyAgICB7CisgICAgICBmb3IgKDsgX19wOyBfX3AgPSBfX3AtPl9NX25leHQpCisJaWYgKHRoaXMtPl9NX2NvbXBhcmUoX19rLCBfX2NvZGUsIF9fcCkpCisJICByZXR1cm4gX19wOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIC8vIEluc2VydCB2IGluIGJ1Y2tldCBuIChhc3N1bWVzIG5vIGVsZW1lbnQgd2l0aCBpdHMga2V5IGFscmVhZHkgcHJlc2VudCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvcgorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2luc2VydF9idWNrZXQoY29uc3QgdmFsdWVfdHlwZSYgX192LCBzaXplX3R5cGUgX19uLAorCQkgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSkKKyAgICB7CisgICAgICBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+IF9fZG9fcmVoYXNoCisJPSBfTV9yZWhhc2hfcG9saWN5Ll9NX25lZWRfcmVoYXNoKF9NX2J1Y2tldF9jb3VudCwKKwkJCQkJICBfTV9lbGVtZW50X2NvdW50LCAxKTsKKworICAgICAgLy8gQWxsb2NhdGUgdGhlIG5ldyBub2RlIGJlZm9yZSBkb2luZyB0aGUgcmVoYXNoIHNvIHRoYXQgd2UgZG9uJ3QKKyAgICAgIC8vIGRvIGEgcmVoYXNoIGlmIHRoZSBhbGxvY2F0aW9uIHRocm93cy4KKyAgICAgIF9Ob2RlKiBfX25ld19ub2RlID0gX01fYWxsb2NhdGVfbm9kZShfX3YpOworCisgICAgICBfX3RyeQorCXsKKwkgIGlmIChfX2RvX3JlaGFzaC5maXJzdCkKKwkgICAgeworCSAgICAgIGNvbnN0IGtleV90eXBlJiBfX2sgPSB0aGlzLT5fTV9leHRyYWN0KF9fdik7CisJICAgICAgX19uID0gdGhpcy0+X01fYnVja2V0X2luZGV4KF9faywgX19jb2RlLCBfX2RvX3JlaGFzaC5zZWNvbmQpOworCSAgICAgIF9NX3JlaGFzaChfX2RvX3JlaGFzaC5zZWNvbmQpOworCSAgICB9CisKKwkgIF9fbmV3X25vZGUtPl9NX25leHQgPSBfTV9idWNrZXRzW19fbl07CisJICB0aGlzLT5fTV9zdG9yZV9jb2RlKF9fbmV3X25vZGUsIF9fY29kZSk7CisJICBfTV9idWNrZXRzW19fbl0gPSBfX25ld19ub2RlOworCSAgKytfTV9lbGVtZW50X2NvdW50OworCSAgcmV0dXJuIGl0ZXJhdG9yKF9fbmV3X25vZGUsIF9NX2J1Y2tldHMgKyBfX24pOworCX0KKyAgICAgIF9fY2F0Y2goLi4uKQorCXsKKwkgIF9NX2RlYWxsb2NhdGVfbm9kZShfX25ld19ub2RlKTsKKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCX0KKyAgICB9CisKKyAgLy8gSW5zZXJ0IHYgaWYgbm8gZWxlbWVudCB3aXRoIGl0cyBrZXkgaXMgYWxyZWFkeSBwcmVzZW50LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHN0ZDo6cGFpcjx0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwKKwkJCQkgIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwKKwkJCQkgIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQkJICBfX2NoYywgX19jaXQsIF9fdWs+OjppdGVyYXRvciwgYm9vbD4KKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgX01faW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9fdiwgc3RkOjp0cjE6OnRydWVfdHlwZSkKKyAgICB7CisgICAgICBjb25zdCBrZXlfdHlwZSYgX19rID0gdGhpcy0+X01fZXh0cmFjdChfX3YpOworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IHRoaXMtPl9NX2hhc2hfY29kZShfX2spOworICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKworICAgICAgaWYgKF9Ob2RlKiBfX3AgPSBfTV9maW5kX25vZGUoX01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSkpCisJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKF9fcCwgX01fYnVja2V0cyArIF9fbiksIGZhbHNlKTsKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihfTV9pbnNlcnRfYnVja2V0KF9fdiwgX19uLCBfX2NvZGUpLCB0cnVlKTsKKyAgICB9CisKKyAgLy8gSW5zZXJ0IHYgdW5jb25kaXRpb25hbGx5LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6aXRlcmF0b3IKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBfTV9pbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX192LCBzdGQ6OnRyMTo6ZmFsc2VfdHlwZSkKKyAgICB7CisgICAgICBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+IF9fZG9fcmVoYXNoCisJPSBfTV9yZWhhc2hfcG9saWN5Ll9NX25lZWRfcmVoYXNoKF9NX2J1Y2tldF9jb3VudCwKKwkJCQkJICBfTV9lbGVtZW50X2NvdW50LCAxKTsKKyAgICAgIGlmIChfX2RvX3JlaGFzaC5maXJzdCkKKwlfTV9yZWhhc2goX19kb19yZWhhc2guc2Vjb25kKTsKKworICAgICAgY29uc3Qga2V5X3R5cGUmIF9fayA9IHRoaXMtPl9NX2V4dHJhY3QoX192KTsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5fTV9idWNrZXRfaW5kZXgoX19rLCBfX2NvZGUsIF9NX2J1Y2tldF9jb3VudCk7CisKKyAgICAgIC8vIEZpcnN0IGZpbmQgdGhlIG5vZGUsIGF2b2lkIGxlYWtpbmcgbmV3X25vZGUgaWYgY29tcGFyZSB0aHJvd3MuCisgICAgICBfTm9kZSogX19wcmV2ID0gX01fZmluZF9ub2RlKF9NX2J1Y2tldHNbX19uXSwgX19rLCBfX2NvZGUpOworICAgICAgX05vZGUqIF9fbmV3X25vZGUgPSBfTV9hbGxvY2F0ZV9ub2RlKF9fdik7CisKKyAgICAgIGlmIChfX3ByZXYpCisJeworCSAgX19uZXdfbm9kZS0+X01fbmV4dCA9IF9fcHJldi0+X01fbmV4dDsKKwkgIF9fcHJldi0+X01fbmV4dCA9IF9fbmV3X25vZGU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9fbmV3X25vZGUtPl9NX25leHQgPSBfTV9idWNrZXRzW19fbl07CisJICBfTV9idWNrZXRzW19fbl0gPSBfX25ld19ub2RlOworCX0KKyAgICAgIHRoaXMtPl9NX3N0b3JlX2NvZGUoX19uZXdfbm9kZSwgX19jb2RlKTsKKworICAgICAgKytfTV9lbGVtZW50X2NvdW50OworICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9fbmV3X25vZGUsIF9NX2J1Y2tldHMgKyBfX24pOworICAgIH0KKworICAvLyBGb3IgZXJhc2UoaXRlcmF0b3IpIGFuZCBlcmFzZShjb25zdF9pdGVyYXRvcikuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIF9NX2VyYXNlX25vZGUoX05vZGUqIF9fcCwgX05vZGUqKiBfX2IpCisgICAgeworICAgICAgX05vZGUqIF9fY3VyID0gKl9fYjsKKyAgICAgIGlmIChfX2N1ciA9PSBfX3ApCisJKl9fYiA9IF9fY3VyLT5fTV9uZXh0OworICAgICAgZWxzZQorCXsKKwkgIF9Ob2RlKiBfX25leHQgPSBfX2N1ci0+X01fbmV4dDsKKwkgIHdoaWxlIChfX25leHQgIT0gX19wKQorCSAgICB7CisJICAgICAgX19jdXIgPSBfX25leHQ7CisJICAgICAgX19uZXh0ID0gX19jdXItPl9NX25leHQ7CisJICAgIH0KKwkgIF9fY3VyLT5fTV9uZXh0ID0gX19uZXh0LT5fTV9uZXh0OworCX0KKworICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9fcCk7CisgICAgICAtLV9NX2VsZW1lbnRfY291bnQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICB2b2lkCisgICAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQorICAgICAgeworCXNpemVfdHlwZSBfX25fZWx0ID0gX19kZXRhaWw6Ol9fZGlzdGFuY2VfZncoX19maXJzdCwgX19sYXN0KTsKKwlzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+IF9fZG9fcmVoYXNoCisJICA9IF9NX3JlaGFzaF9wb2xpY3kuX01fbmVlZF9yZWhhc2goX01fYnVja2V0X2NvdW50LAorCQkJCQkgICAgX01fZWxlbWVudF9jb3VudCwgX19uX2VsdCk7CisJaWYgKF9fZG9fcmVoYXNoLmZpcnN0KQorCSAgX01fcmVoYXNoKF9fZG9fcmVoYXNoLnNlY29uZCk7CisKKwlmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgIHRoaXMtPmluc2VydCgqX19maXJzdCk7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZXJhc2UoaXRlcmF0b3IgX19pdCkKKyAgICB7CisgICAgICBpdGVyYXRvciBfX3Jlc3VsdCA9IF9faXQ7CisgICAgICArK19fcmVzdWx0OworICAgICAgX01fZXJhc2Vfbm9kZShfX2l0Ll9NX2N1cl9ub2RlLCBfX2l0Ll9NX2N1cl9idWNrZXQpOworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6Y29uc3RfaXRlcmF0b3IKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2l0KQorICAgIHsKKyAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fcmVzdWx0ID0gX19pdDsKKyAgICAgICsrX19yZXN1bHQ7CisgICAgICBfTV9lcmFzZV9ub2RlKF9faXQuX01fY3VyX25vZGUsIF9faXQuX01fY3VyX2J1Y2tldCk7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCQlfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksCisJCQlfX2NoYywgX19jaXQsIF9fdWs+OjpzaXplX3R5cGUKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX19rKQorICAgIHsKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9IYXNoX2NvZGVfdHlwZSBfX2NvZGUgPSB0aGlzLT5fTV9oYXNoX2NvZGUoX19rKTsKKyAgICAgIHN0ZDo6c2l6ZV90IF9fbiA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwgX01fYnVja2V0X2NvdW50KTsKKyAgICAgIHNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7CisKKyAgICAgIF9Ob2RlKiogX19zbG90ID0gX01fYnVja2V0cyArIF9fbjsKKyAgICAgIHdoaWxlICgqX19zbG90ICYmICF0aGlzLT5fTV9jb21wYXJlKF9faywgX19jb2RlLCAqX19zbG90KSkKKwlfX3Nsb3QgPSAmKCgqX19zbG90KS0+X01fbmV4dCk7CisKKyAgICAgIF9Ob2RlKiogX19zYXZlZF9zbG90ID0gMDsKKyAgICAgIHdoaWxlICgqX19zbG90ICYmIHRoaXMtPl9NX2NvbXBhcmUoX19rLCBfX2NvZGUsICpfX3Nsb3QpKQorCXsKKwkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKwkgIC8vIDUyNi4gSXMgaXQgdW5kZWZpbmVkIGlmIGEgZnVuY3Rpb24gaW4gdGhlIHN0YW5kYXJkIGNoYW5nZXMKKwkgIC8vIGluIHBhcmFtZXRlcnM/CisJICBpZiAoJnRoaXMtPl9NX2V4dHJhY3QoKCpfX3Nsb3QpLT5fTV92KSAhPSAmX19rKQorCSAgICB7CisJICAgICAgX05vZGUqIF9fcCA9ICpfX3Nsb3Q7CisJICAgICAgKl9fc2xvdCA9IF9fcC0+X01fbmV4dDsKKwkgICAgICBfTV9kZWFsbG9jYXRlX25vZGUoX19wKTsKKwkgICAgICAtLV9NX2VsZW1lbnRfY291bnQ7CisJICAgICAgKytfX3Jlc3VsdDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgX19zYXZlZF9zbG90ID0gX19zbG90OworCSAgICAgIF9fc2xvdCA9ICYoKCpfX3Nsb3QpLT5fTV9uZXh0KTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKF9fc2F2ZWRfc2xvdCkKKwl7CisJICBfTm9kZSogX19wID0gKl9fc2F2ZWRfc2xvdDsKKwkgICpfX3NhdmVkX3Nsb3QgPSBfX3AtPl9NX25leHQ7CisJICBfTV9kZWFsbG9jYXRlX25vZGUoX19wKTsKKwkgIC0tX01fZWxlbWVudF9jb3VudDsKKwkgICsrX19yZXN1bHQ7CisJfQorCisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorCisgIC8vID8/PyBUaGlzIGNvdWxkIGJlIG9wdGltaXplZCBieSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBidWNrZXQKKyAgLy8gc3RydWN0dXJlLCBidXQgaXQncyBub3QgY2xlYXIgdGhhdCBpdCdzIHdvcnRoIGRvaW5nLiAgSXQgcHJvYmFibHkKKyAgLy8gd291bGRuJ3QgZXZlbiBiZSBhbiBvcHRpbWl6YXRpb24gdW5sZXNzIHRoZSBsb2FkIGZhY3RvciBpcyBsYXJnZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB0eXBlbmFtZSBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJCV9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwKKwkJCV9fY2hjLCBfX2NpdCwgX191az46Oml0ZXJhdG9yCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQorICAgIHsKKyAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKKwlfX2ZpcnN0ID0gdGhpcy0+ZXJhc2UoX19maXJzdCk7CisgICAgICByZXR1cm4gX19sYXN0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksCisJICAgYm9vbCBfX2NoYywgYm9vbCBfX2NpdCwgYm9vbCBfX3VrPgorICAgIHR5cGVuYW1lIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCQkJX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LAorCQkJX19jaGMsIF9fY2l0LCBfX3VrPjo6Y29uc3RfaXRlcmF0b3IKKyAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jYXRvciwgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkgICAgICAgX0gxLCBfSDIsIF9IYXNoLCBfUmVoYXNoUG9saWN5LCBfX2NoYywgX19jaXQsIF9fdWs+OjoKKyAgICBlcmFzZShjb25zdF9pdGVyYXRvciBfX2ZpcnN0LCBjb25zdF9pdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQorCV9fZmlyc3QgPSB0aGlzLT5lcmFzZShfX2ZpcnN0KTsKKyAgICAgIHJldHVybiBfX2xhc3Q7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JlaGFzaFBvbGljeSwKKwkgICBib29sIF9fY2hjLCBib29sIF9fY2l0LCBib29sIF9fdWs+CisgICAgdm9pZAorICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2NhdG9yLCBfRXh0cmFjdEtleSwgX0VxdWFsLAorCSAgICAgICBfSDEsIF9IMiwgX0hhc2gsIF9SZWhhc2hQb2xpY3ksIF9fY2hjLCBfX2NpdCwgX191az46OgorICAgIGNsZWFyKCkKKyAgICB7CisgICAgICBfTV9kZWFsbG9jYXRlX25vZGVzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisgICAgICBfTV9lbGVtZW50X2NvdW50ID0gMDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX01fcmVoYXNoKHN0ZDo6bWF4KF9NX3JlaGFzaF9wb2xpY3kuX01fbmV4dF9ia3QoX19uKSwKKwkJCSBfTV9yZWhhc2hfcG9saWN5Ll9NX2JrdF9mb3JfZWxlbWVudHMoX01fZWxlbWVudF9jb3VudAorCQkJCQkJCSAgICAgICsgMSkpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDIsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LAorCSAgIGJvb2wgX19jaGMsIGJvb2wgX19jaXQsIGJvb2wgX191az4KKyAgICB2b2lkCisgICAgX0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvY2F0b3IsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJICAgICAgIF9IMSwgX0gyLCBfSGFzaCwgX1JlaGFzaFBvbGljeSwgX19jaGMsIF9fY2l0LCBfX3VrPjo6CisgICAgX01fcmVoYXNoKHNpemVfdHlwZSBfX24pCisgICAgeworICAgICAgX05vZGUqKiBfX25ld19hcnJheSA9IF9NX2FsbG9jYXRlX2J1Y2tldHMoX19uKTsKKyAgICAgIF9fdHJ5CisJeworCSAgZm9yIChzaXplX3R5cGUgX19pID0gMDsgX19pIDwgX01fYnVja2V0X2NvdW50OyArK19faSkKKwkgICAgd2hpbGUgKF9Ob2RlKiBfX3AgPSBfTV9idWNrZXRzW19faV0pCisJICAgICAgeworCQlzdGQ6OnNpemVfdCBfX25ld19pbmRleCA9IHRoaXMtPl9NX2J1Y2tldF9pbmRleChfX3AsIF9fbik7CisJCV9NX2J1Y2tldHNbX19pXSA9IF9fcC0+X01fbmV4dDsKKwkJX19wLT5fTV9uZXh0ID0gX19uZXdfYXJyYXlbX19uZXdfaW5kZXhdOworCQlfX25ld19hcnJheVtfX25ld19pbmRleF0gPSBfX3A7CisJICAgICAgfQorCSAgX01fZGVhbGxvY2F0ZV9idWNrZXRzKF9NX2J1Y2tldHMsIF9NX2J1Y2tldF9jb3VudCk7CisJICBfTV9idWNrZXRfY291bnQgPSBfX247CisJICBfTV9idWNrZXRzID0gX19uZXdfYXJyYXk7CisJfQorICAgICAgX19jYXRjaCguLi4pCisJeworCSAgLy8gQSBmYWlsdXJlIGhlcmUgbWVhbnMgdGhhdCBhIGhhc2ggZnVuY3Rpb24gdGhyZXcgYW4gZXhjZXB0aW9uLgorCSAgLy8gV2UgY2FuJ3QgcmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUgd2l0aG91dCBjYWxsaW5nIHRoZSBoYXNoCisJICAvLyBmdW5jdGlvbiBhZ2Fpbiwgc28gdGhlIG9ubHkgc2Vuc2libGUgcmVjb3ZlcnkgaXMgdG8gZGVsZXRlCisJICAvLyBldmVyeXRoaW5nLgorCSAgX01fZGVhbGxvY2F0ZV9ub2RlcyhfX25ld19hcnJheSwgX19uKTsKKwkgIF9NX2RlYWxsb2NhdGVfYnVja2V0cyhfX25ld19hcnJheSwgX19uKTsKKwkgIF9NX2RlYWxsb2NhdGVfbm9kZXMoX01fYnVja2V0cywgX01fYnVja2V0X2NvdW50KTsKKwkgIF9NX2VsZW1lbnRfY291bnQgPSAwOworCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJfQorICAgIH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSB0cjEKK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX0hBU0hUQUJMRV9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9oYXNodGFibGVfcG9saWN5LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9oYXNodGFibGVfcG9saWN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjODJkYQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2hhc2h0YWJsZV9wb2xpY3kuaApAQCAtMCwwICsxLDc4MyBAQAorLy8gSW50ZXJuYWwgcG9saWN5IGhlYWRlciBmb3IgVFIxIHVub3JkZXJlZF9zZXQgYW5kIHVub3JkZXJlZF9tYXAgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9oYXNodGFibGVfcG9saWN5LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiAKKyAqICBAaGVhZGVybmFtZXt0cjEvdW5vcmRlcmVkX21hcCwgdHIxL3Vub3JkZXJlZF9zZXR9CisgKi8KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7IAorbmFtZXNwYWNlIHRyMQoreworbmFtZXNwYWNlIF9fZGV0YWlsCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIEhlbHBlciBmdW5jdGlvbjogcmV0dXJuIGRpc3RhbmNlKGZpcnN0LCBsYXN0KSBmb3IgZm9yd2FyZAorICAvLyBpdGVyYXRvcnMsIG9yIDAgZm9yIGlucHV0IGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgorICAgIGlubGluZSB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKKyAgICBfX2Rpc3RhbmNlX2Z3KF9JdGVyYXRvciBfX2ZpcnN0LCBfSXRlcmF0b3IgX19sYXN0LAorCQkgIHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnKQorICAgIHsgcmV0dXJuIDA7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fZGlzdGFuY2VfZncoX0l0ZXJhdG9yIF9fZmlyc3QsIF9JdGVyYXRvciBfX2xhc3QsCisJCSAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKKyAgICB7IHJldHVybiBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQorICAgIF9fZGlzdGFuY2VfZncoX0l0ZXJhdG9yIF9fZmlyc3QsIF9JdGVyYXRvciBfX2xhc3QpCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOworICAgICAgcmV0dXJuIF9fZGlzdGFuY2VfZncoX19maXJzdCwgX19sYXN0LCBfVGFnKCkpOworICAgIH0KKworICAvLyBBdXhpbGlhcnkgdHlwZXMgdXNlZCBmb3IgYWxsIGluc3RhbnRpYXRpb25zIG9mIF9IYXNodGFibGU6IG5vZGVzCisgIC8vIGFuZCBpdGVyYXRvcnMuCisgIAorICAvLyBOb2RlcywgdXNlZCB0byB3cmFwIGVsZW1lbnRzIHN0b3JlZCBpbiB0aGUgaGFzaCB0YWJsZS4gIEEgcG9saWN5CisgIC8vIHRlbXBsYXRlIHBhcmFtZXRlciBvZiBjbGFzcyB0ZW1wbGF0ZSBfSGFzaHRhYmxlIGNvbnRyb2xzIHdoZXRoZXIKKyAgLy8gbm9kZXMgYWxzbyBzdG9yZSBhIGhhc2ggY29kZS4gSW4gc29tZSBjYXNlcyAoZS5nLiBzdHJpbmdzKSB0aGlzCisgIC8vIG1heSBiZSBhIHBlcmZvcm1hbmNlIHdpbi4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIHN0cnVjdCBfSGFzaF9ub2RlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4KKyAgICBzdHJ1Y3QgX0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+CisgICAgeworICAgICAgX1ZhbHVlICAgICAgIF9NX3Y7CisgICAgICBzdGQ6OnNpemVfdCAgX01faGFzaF9jb2RlOworICAgICAgX0hhc2hfbm9kZSogIF9NX25leHQ7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+CisgICAgc3RydWN0IF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4KKyAgICB7CisgICAgICBfVmFsdWUgICAgICAgX01fdjsKKyAgICAgIF9IYXNoX25vZGUqICBfTV9uZXh0OworICAgIH07CisKKyAgLy8gTG9jYWwgaXRlcmF0b3JzLCB1c2VkIHRvIGl0ZXJhdGUgd2l0aGluIGEgYnVja2V0IGJ1dCBub3QgYmV0d2VlbgorICAvLyBidWNrZXRzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX05vZGVfaXRlcmF0b3JfYmFzZQorICAgIHsKKyAgICAgIF9Ob2RlX2l0ZXJhdG9yX2Jhc2UoX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiBfX3ApCisgICAgICA6IF9NX2N1cihfX3ApIHsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9pbmNyKCkKKyAgICAgIHsgX01fY3VyID0gX01fY3VyLT5fTV9uZXh0OyB9CisKKyAgICAgIF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPiogIF9NX2N1cjsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2NhY2hlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4mIF9feCwKKwkgICAgICAgY29uc3QgX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+JiBfX3kpCisgICAgeyByZXR1cm4gX194Ll9NX2N1ciA9PSBfX3kuX01fY3VyOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGU+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX194LAorCSAgICAgICBjb25zdCBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fY3VyICE9IF9feS5fTV9jdXI7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX05vZGVfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUKKyAgICAgIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlPF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCSAgICBjb25zdCBfVmFsdWUqLCBfVmFsdWUqPjo6X190eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUKKyAgICAgIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlPF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCSAgICBjb25zdCBfVmFsdWUmLCBfVmFsdWUmPjo6X190eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgICAgX05vZGVfaXRlcmF0b3IoKQorICAgICAgOiBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oMCkgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfTm9kZV9pdGVyYXRvcihfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qIF9fcCkKKyAgICAgIDogX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KF9fcCkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1ci0+X01fdjsgfQorICAKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZih0aGlzLT5fTV9jdXItPl9NX3YpOyB9CisKKyAgICAgIF9Ob2RlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IAorCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7IAorICAgICAgfQorICAKKyAgICAgIF9Ob2RlX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCkKKyAgICAgIHsgCisJX05vZGVfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX05vZGVfY29uc3RfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9WYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1ZhbHVlKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCBfVmFsdWUmICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcgICAgICAgICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KDApIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX05vZGVfY29uc3RfaXRlcmF0b3IoX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiBfX3ApCisgICAgICA6IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPihfX3ApIHsgfQorCisgICAgICBfTm9kZV9jb25zdF9pdGVyYXRvcihjb25zdCBfTm9kZV9pdGVyYXRvcjxfVmFsdWUsIF9fY29uc3RhbnRfaXRlcmF0b3JzLAorCQkJICAgX19jYWNoZT4mIF9feCkKKyAgICAgIDogX05vZGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KF9feC5fTV9jdXIpIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9jdXItPl9NX3Y7IH0KKyAgCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YodGhpcy0+X01fY3VyLT5fTV92KTsgfQorCisgICAgICBfTm9kZV9jb25zdF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKQorICAgICAgeyAKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuICp0aGlzOyAKKyAgICAgIH0KKyAgCisgICAgICBfTm9kZV9jb25zdF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IAorCV9Ob2RlX2NvbnN0X2l0ZXJhdG9yIF9fdG1wKCp0aGlzKTsKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuIF9fdG1wOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGU+CisgICAgc3RydWN0IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZQorICAgIHsKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZShfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qIF9fbm9kZSwKKwkJCSAgICAgICBfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qKiBfX2J1Y2tldCkKKyAgICAgIDogX01fY3VyX25vZGUoX19ub2RlKSwgX01fY3VyX2J1Y2tldChfX2J1Y2tldCkgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luY3IoKQorICAgICAgeworCV9NX2N1cl9ub2RlID0gX01fY3VyX25vZGUtPl9NX25leHQ7CisJaWYgKCFfTV9jdXJfbm9kZSkKKwkgIF9NX2luY3JfYnVja2V0KCk7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luY3JfYnVja2V0KCk7CisKKyAgICAgIF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPiogICBfTV9jdXJfbm9kZTsKKyAgICAgIF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqICBfTV9jdXJfYnVja2V0OworICAgIH07CisKKyAgLy8gR2xvYmFsIGl0ZXJhdG9ycywgdXNlZCBmb3IgYXJiaXRyYXJ5IGl0ZXJhdGlvbiB3aXRoaW4gYSBoYXNoCisgIC8vIHRhYmxlLiAgTGFyZ2VyIGFuZCBtb3JlIGV4cGVuc2l2ZSB0aGFuIGxvY2FsIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY2FjaGU+CisgICAgdm9pZAorICAgIF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+OjoKKyAgICBfTV9pbmNyX2J1Y2tldCgpCisgICAgeworICAgICAgKytfTV9jdXJfYnVja2V0OworCisgICAgICAvLyBUaGlzIGxvb3AgcmVxdWlyZXMgdGhlIGJ1Y2tldCBhcnJheSB0byBoYXZlIGEgbm9uLW51bGwgc2VudGluZWwuCisgICAgICB3aGlsZSAoISpfTV9jdXJfYnVja2V0KQorCSsrX01fY3VyX2J1Y2tldDsKKyAgICAgIF9NX2N1cl9ub2RlID0gKl9NX2N1cl9idWNrZXQ7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2NhY2hlPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX194LAorCSAgICAgICBjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPiYgX195KQorICAgIHsgcmV0dXJuIF9feC5fTV9jdXJfbm9kZSA9PSBfX3kuX01fY3VyX25vZGU7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jYWNoZT4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4mIF9feCwKKwkgICAgICAgY29uc3QgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4mIF9feSkKKyAgICB7IHJldHVybiBfX3guX01fY3VyX25vZGUgIT0gX195Ll9NX2N1cl9ub2RlOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9fY29uc3RhbnRfaXRlcmF0b3JzLCBib29sIF9fY2FjaGU+CisgICAgc3RydWN0IF9IYXNodGFibGVfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZQorICAgICAgX19nbnVfY3h4OjpfX2NvbmRpdGlvbmFsX3R5cGU8X19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJICAgIGNvbnN0IF9WYWx1ZSosIF9WYWx1ZSo+OjpfX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZQorICAgICAgX19nbnVfY3h4OjpfX2NvbmRpdGlvbmFsX3R5cGU8X19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJICAgIGNvbnN0IF9WYWx1ZSYsIF9WYWx1ZSY+OjpfX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yKCkKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oMCwgMCkgeyB9CisKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3IoX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiBfX3AsCisJCQkgIF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqIF9fYikKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oX19wLCBfX2IpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcihfSGFzaF9ub2RlPF9WYWx1ZSwgX19jYWNoZT4qKiBfX2IpCisgICAgICA6IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+KCpfX2IsIF9fYikgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1cl9ub2RlLT5fTV92OyB9CisgIAorICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKHRoaXMtPl9NX2N1cl9ub2RlLT5fTV92KTsgfQorCisgICAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IAorCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgIAorICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IAorCV9IYXNodGFibGVfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBzdHJ1Y3QgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcgorICAgIDogcHVibGljIF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfVmFsdWUsIF9fY2FjaGU+CisgICAgeworICAgICAgdHlwZWRlZiBfVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IF9WYWx1ZSogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgX1ZhbHVlJiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKCkKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oMCwgMCkgeyB9CisKKyAgICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IoX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiBfX3AsCisJCQkJX0hhc2hfbm9kZTxfVmFsdWUsIF9fY2FjaGU+KiogX19iKQorICAgICAgOiBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBfX2NhY2hlPihfX3AsIF9fYikgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yKF9IYXNoX25vZGU8X1ZhbHVlLCBfX2NhY2hlPioqIF9fYikKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oKl9fYiwgX19iKSB7IH0KKworICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcihjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9WYWx1ZSwKKwkJCQlfX2NvbnN0YW50X2l0ZXJhdG9ycywgX19jYWNoZT4mIF9feCkKKyAgICAgIDogX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT4oX194Ll9NX2N1cl9ub2RlLAorCQkJCQkJICBfX3guX01fY3VyX2J1Y2tldCkgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1cl9ub2RlLT5fTV92OyB9CisgIAorICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CisgICAgICB7IHJldHVybiBzdGQ6Ol9fYWRkcmVzc29mKHRoaXMtPl9NX2N1cl9ub2RlLT5fTV92KTsgfQorCisgICAgICBfSGFzaHRhYmxlX2NvbnN0X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7IAorCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgIAorICAgICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAgICB7IAorCV9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IgX190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAgICB9CisgICAgfTsKKworCisgIC8vIE1hbnkgb2YgY2xhc3MgdGVtcGxhdGUgX0hhc2h0YWJsZSdzIHRlbXBsYXRlIHBhcmFtZXRlcnMgYXJlIHBvbGljeQorICAvLyBjbGFzc2VzLiAgVGhlc2UgYXJlIGRlZmF1bHRzIGZvciB0aGUgcG9saWNpZXMuCisKKyAgLy8gRGVmYXVsdCByYW5nZSBoYXNoaW5nIGZ1bmN0aW9uOiB1c2UgZGl2aXNpb24gdG8gZm9sZCBhIGxhcmdlIG51bWJlcgorICAvLyBpbnRvIHRoZSByYW5nZSBbMCwgTikuCisgIHN0cnVjdCBfTW9kX3JhbmdlX2hhc2hpbmcKKyAgeworICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgZmlyc3RfYXJndW1lbnRfdHlwZTsKKyAgICB0eXBlZGVmIHN0ZDo6c2l6ZV90IHNlY29uZF9hcmd1bWVudF90eXBlOworICAgIHR5cGVkZWYgc3RkOjpzaXplX3QgcmVzdWx0X3R5cGU7CisKKyAgICByZXN1bHRfdHlwZQorICAgIG9wZXJhdG9yKCkoZmlyc3RfYXJndW1lbnRfdHlwZSBfX251bSwgc2Vjb25kX2FyZ3VtZW50X3R5cGUgX19kZW4pIGNvbnN0CisgICAgeyByZXR1cm4gX19udW0gJSBfX2RlbjsgfQorICB9OworCisgIC8vIERlZmF1bHQgcmFuZ2VkIGhhc2ggZnVuY3Rpb24gSC4gIEluIHByaW5jaXBsZSBpdCBzaG91bGQgYmUgYQorICAvLyBmdW5jdGlvbiBvYmplY3QgY29tcG9zZWQgZnJvbSBvYmplY3RzIG9mIHR5cGUgSDEgYW5kIEgyIHN1Y2ggdGhhdAorICAvLyBoKGssIE4pID0gaDIoaDEoayksIE4pLCBidXQgdGhhdCB3b3VsZCBtZWFuIG1ha2luZyBleHRyYSBjb3BpZXMgb2YKKyAgLy8gaDEgYW5kIGgyLiAgU28gaW5zdGVhZCB3ZSdsbCBqdXN0IHVzZSBhIHRhZyB0byB0ZWxsIGNsYXNzIHRlbXBsYXRlCisgIC8vIGhhc2h0YWJsZSB0byBkbyB0aGF0IGNvbXBvc2l0aW9uLgorICBzdHJ1Y3QgX0RlZmF1bHRfcmFuZ2VkX2hhc2ggeyB9OworCisgIC8vIERlZmF1bHQgdmFsdWUgZm9yIHJlaGFzaCBwb2xpY3kuICBCdWNrZXQgc2l6ZSBpcyAodXN1YWxseSkgdGhlCisgIC8vIHNtYWxsZXN0IHByaW1lIHRoYXQga2VlcHMgdGhlIGxvYWQgZmFjdG9yIHNtYWxsIGVub3VnaC4KKyAgc3RydWN0IF9QcmltZV9yZWhhc2hfcG9saWN5CisgIHsKKyAgICBfUHJpbWVfcmVoYXNoX3BvbGljeShmbG9hdCBfX3ogPSAxLjApCisgICAgOiBfTV9tYXhfbG9hZF9mYWN0b3IoX196KSwgX01fZ3Jvd3RoX2ZhY3RvcigyLmYpLCBfTV9uZXh0X3Jlc2l6ZSgwKSB7IH0KKworICAgIGZsb2F0CisgICAgbWF4X2xvYWRfZmFjdG9yKCkgY29uc3QKKyAgICB7IHJldHVybiBfTV9tYXhfbG9hZF9mYWN0b3I7IH0gICAgICAKKworICAgIC8vIFJldHVybiBhIGJ1Y2tldCBzaXplIG5vIHNtYWxsZXIgdGhhbiBuLgorICAgIHN0ZDo6c2l6ZV90CisgICAgX01fbmV4dF9ia3Qoc3RkOjpzaXplX3QgX19uKSBjb25zdDsKKyAgICAKKyAgICAvLyBSZXR1cm4gYSBidWNrZXQgY291bnQgYXBwcm9wcmlhdGUgZm9yIG4gZWxlbWVudHMKKyAgICBzdGQ6OnNpemVfdAorICAgIF9NX2JrdF9mb3JfZWxlbWVudHMoc3RkOjpzaXplX3QgX19uKSBjb25zdDsKKyAgICAKKyAgICAvLyBfX25fYmt0IGlzIGN1cnJlbnQgYnVja2V0IGNvdW50LCBfX25fZWx0IGlzIGN1cnJlbnQgZWxlbWVudCBjb3VudCwKKyAgICAvLyBhbmQgX19uX2lucyBpcyBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgaW5zZXJ0ZWQuICBEbyB3ZSBuZWVkIHRvCisgICAgLy8gaW5jcmVhc2UgYnVja2V0IGNvdW50PyAgSWYgc28sIHJldHVybiBtYWtlX3BhaXIodHJ1ZSwgbiksIHdoZXJlIG4KKyAgICAvLyBpcyB0aGUgbmV3IGJ1Y2tldCBjb3VudC4gIElmIG5vdCwgcmV0dXJuIG1ha2VfcGFpcihmYWxzZSwgMCkuCisgICAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PgorICAgIF9NX25lZWRfcmVoYXNoKHN0ZDo6c2l6ZV90IF9fbl9ia3QsIHN0ZDo6c2l6ZV90IF9fbl9lbHQsCisJCSAgIHN0ZDo6c2l6ZV90IF9fbl9pbnMpIGNvbnN0OworCisgICAgZW51bSB7IF9TX25fcHJpbWVzID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICE9IDggPyAyNTYgOiAyNTYgKyA0OCB9OworCisgICAgZmxvYXQgICAgICAgICAgICAgICAgX01fbWF4X2xvYWRfZmFjdG9yOworICAgIGZsb2F0ICAgICAgICAgICAgICAgIF9NX2dyb3d0aF9mYWN0b3I7CisgICAgbXV0YWJsZSBzdGQ6OnNpemVfdCAgX01fbmV4dF9yZXNpemU7CisgIH07CisKKyAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgX19wcmltZV9saXN0W107CisKKyAgLy8gWFhYIFRoaXMgaXMgYSBoYWNrLiAgVGhlcmUncyBubyBnb29kIHJlYXNvbiBmb3IgYW55IG9mCisgIC8vIF9QcmltZV9yZWhhc2hfcG9saWN5J3MgbWVtYmVyIGZ1bmN0aW9ucyB0byBiZSBpbmxpbmUuICAKKworICAvLyBSZXR1cm4gYSBwcmltZSBubyBzbWFsbGVyIHRoYW4gbi4KKyAgaW5saW5lIHN0ZDo6c2l6ZV90CisgIF9QcmltZV9yZWhhc2hfcG9saWN5OjoKKyAgX01fbmV4dF9ia3Qoc3RkOjpzaXplX3QgX19uKSBjb25zdAorICB7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyogX19wID0gc3RkOjpsb3dlcl9ib3VuZChfX3ByaW1lX2xpc3QsIF9fcHJpbWVfbGlzdAorCQkJCQkJKyBfU19uX3ByaW1lcywgX19uKTsKKyAgICBfTV9uZXh0X3Jlc2l6ZSA9IAorICAgICAgc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KF9fYnVpbHRpbl9jZWlsKCpfX3AgKiBfTV9tYXhfbG9hZF9mYWN0b3IpKTsKKyAgICByZXR1cm4gKl9fcDsKKyAgfQorCisgIC8vIFJldHVybiB0aGUgc21hbGxlc3QgcHJpbWUgcCBzdWNoIHRoYXQgYWxwaGEgcCA+PSBuLCB3aGVyZSBhbHBoYQorICAvLyBpcyB0aGUgbG9hZCBmYWN0b3IuCisgIGlubGluZSBzdGQ6OnNpemVfdAorICBfUHJpbWVfcmVoYXNoX3BvbGljeTo6CisgIF9NX2JrdF9mb3JfZWxlbWVudHMoc3RkOjpzaXplX3QgX19uKSBjb25zdAorICB7CisgICAgY29uc3QgZmxvYXQgX19taW5fYmt0cyA9IF9fbiAvIF9NX21heF9sb2FkX2ZhY3RvcjsKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nKiBfX3AgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fcHJpbWVfbGlzdCwgX19wcmltZV9saXN0CisJCQkJCQkrIF9TX25fcHJpbWVzLCBfX21pbl9ia3RzKTsKKyAgICBfTV9uZXh0X3Jlc2l6ZSA9CisgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oX19idWlsdGluX2NlaWwoKl9fcCAqIF9NX21heF9sb2FkX2ZhY3RvcikpOworICAgIHJldHVybiAqX19wOworICB9CisKKyAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IHByaW1lIHAgc3VjaCB0aGF0IGFscGhhIHAgPiBfX25fZWx0ICsgX19uX2lucy4KKyAgLy8gSWYgcCA+IF9fbl9ia3QsIHJldHVybiBtYWtlX3BhaXIodHJ1ZSwgcCk7IG90aGVyd2lzZSByZXR1cm4KKyAgLy8gbWFrZV9wYWlyKGZhbHNlLCAwKS4gIEluIHByaW5jaXBsZSB0aGlzIGlzbid0IHZlcnkgZGlmZmVyZW50IGZyb20gCisgIC8vIF9NX2JrdF9mb3JfZWxlbWVudHMuCisKKyAgLy8gVGhlIG9ubHkgdHJpY2t5IHBhcnQgaXMgdGhhdCB3ZSdyZSBjYWNoaW5nIHRoZSBlbGVtZW50IGNvdW50IGF0CisgIC8vIHdoaWNoIHdlIG5lZWQgdG8gcmVoYXNoLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIGEgZmxvYXRpbmctcG9pbnQKKyAgLy8gbXVsdGlwbHkgZm9yIGV2ZXJ5IGluc2VydGlvbi4KKworICBpbmxpbmUgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PgorICBfUHJpbWVfcmVoYXNoX3BvbGljeTo6CisgIF9NX25lZWRfcmVoYXNoKHN0ZDo6c2l6ZV90IF9fbl9ia3QsIHN0ZDo6c2l6ZV90IF9fbl9lbHQsCisJCSBzdGQ6OnNpemVfdCBfX25faW5zKSBjb25zdAorICB7CisgICAgaWYgKF9fbl9lbHQgKyBfX25faW5zID4gX01fbmV4dF9yZXNpemUpCisgICAgICB7CisJZmxvYXQgX19taW5fYmt0cyA9ICgoZmxvYXQoX19uX2lucykgKyBmbG9hdChfX25fZWx0KSkKKwkJCSAgICAvIF9NX21heF9sb2FkX2ZhY3Rvcik7CisJaWYgKF9fbWluX2JrdHMgPiBfX25fYmt0KQorCSAgeworCSAgICBfX21pbl9ia3RzID0gc3RkOjptYXgoX19taW5fYmt0cywgX01fZ3Jvd3RoX2ZhY3RvciAqIF9fbl9ia3QpOworCSAgICBjb25zdCB1bnNpZ25lZCBsb25nKiBfX3AgPQorCSAgICAgIHN0ZDo6bG93ZXJfYm91bmQoX19wcmltZV9saXN0LCBfX3ByaW1lX2xpc3QgKyBfU19uX3ByaW1lcywKKwkJCSAgICAgICBfX21pbl9ia3RzKTsKKwkgICAgX01fbmV4dF9yZXNpemUgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4KKwkgICAgICAoX19idWlsdGluX2NlaWwoKl9fcCAqIF9NX21heF9sb2FkX2ZhY3RvcikpOworCSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodHJ1ZSwgKl9fcCk7CisJICB9CisJZWxzZSAKKwkgIHsKKwkgICAgX01fbmV4dF9yZXNpemUgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4KKwkgICAgICAoX19idWlsdGluX2NlaWwoX19uX2JrdCAqIF9NX21heF9sb2FkX2ZhY3RvcikpOworCSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZmFsc2UsIDApOworCSAgfQorICAgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihmYWxzZSwgMCk7CisgIH0KKworICAvLyBCYXNlIGNsYXNzZXMgZm9yIHN0ZDo6dHIxOjpfSGFzaHRhYmxlLiAgV2UgZGVmaW5lIHRoZXNlIGJhc2UKKyAgLy8gY2xhc3NlcyBiZWNhdXNlIGluIHNvbWUgY2FzZXMgd2Ugd2FudCB0byBkbyBkaWZmZXJlbnQgdGhpbmdzCisgIC8vIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYSBwb2xpY3kgY2xhc3MuICBJbiBzb21lIGNhc2VzIHRoZQorICAvLyBwb2xpY3kgY2xhc3MgYWZmZWN0cyB3aGljaCBtZW1iZXIgZnVuY3Rpb25zIGFuZCBuZXN0ZWQgdHlwZWRlZnMKKyAgLy8gYXJlIGRlZmluZWQ7IHdlIGhhbmRsZSB0aGF0IGJ5IHNwZWNpYWxpemluZyBiYXNlIGNsYXNzIHRlbXBsYXRlcy4KKyAgLy8gU2V2ZXJhbCBvZiB0aGUgYmFzZSBjbGFzcyB0ZW1wbGF0ZXMgbmVlZCB0byBhY2Nlc3Mgb3RoZXIgbWVtYmVycworICAvLyBvZiBjbGFzcyB0ZW1wbGF0ZSBfSGFzaHRhYmxlLCBzbyB3ZSB1c2UgdGhlICJjdXJpb3VzbHkgcmVjdXJyaW5nCisgIC8vIHRlbXBsYXRlIHBhdHRlcm4iIGZvciB0aGVtLgorCisgIC8vIGNsYXNzIHRlbXBsYXRlIF9NYXBfYmFzZS4gIElmIHRoZSBoYXNodGFibGUgaGFzIGEgdmFsdWUgdHlwZSBvZiB0aGUKKyAgLy8gZm9ybSBwYWlyPFQxLCBUMj4gYW5kIGEga2V5IGV4dHJhY3Rpb24gcG9saWN5IHRoYXQgcmV0dXJucyB0aGUKKyAgLy8gZmlyc3QgcGFydCBvZiB0aGUgcGFpciwgdGhlIGhhc2h0YWJsZSBnZXRzIGEgbWFwcGVkX3R5cGUgdHlwZWRlZi4KKyAgLy8gSWYgaXQgc2F0aXNmaWVzIHRob3NlIGNyaXRlcmlhIGFuZCBhbHNvIGhhcyB1bmlxdWUga2V5cywgdGhlbiBpdAorICAvLyBhbHNvIGdldHMgYW4gb3BlcmF0b3JbXS4gIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9FeCwgYm9vbCBfX3VuaXF1ZSwKKwkgICB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHN0cnVjdCBfTWFwX2Jhc2UgeyB9OworCSAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9QYWlyLCB0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHN0cnVjdCBfTWFwX2Jhc2U8X0tleSwgX1BhaXIsIHN0ZDo6X1NlbGVjdDFzdDxfUGFpcj4sIGZhbHNlLCBfSGFzaHRhYmxlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlIG1hcHBlZF90eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1BhaXIsIHR5cGVuYW1lIF9IYXNodGFibGU+CisgICAgc3RydWN0IF9NYXBfYmFzZTxfS2V5LCBfUGFpciwgc3RkOjpfU2VsZWN0MXN0PF9QYWlyPiwgdHJ1ZSwgX0hhc2h0YWJsZT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSBtYXBwZWRfdHlwZTsKKyAgICAgIAorICAgICAgbWFwcGVkX3R5cGUmCisgICAgICBvcGVyYXRvcltdKGNvbnN0IF9LZXkmIF9fayk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfUGFpciwgdHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICB0eXBlbmFtZSBfTWFwX2Jhc2U8X0tleSwgX1BhaXIsIHN0ZDo6X1NlbGVjdDFzdDxfUGFpcj4sCisJCSAgICAgICB0cnVlLCBfSGFzaHRhYmxlPjo6bWFwcGVkX3R5cGUmCisgICAgX01hcF9iYXNlPF9LZXksIF9QYWlyLCBzdGQ6Ol9TZWxlY3Qxc3Q8X1BhaXI+LCB0cnVlLCBfSGFzaHRhYmxlPjo6CisgICAgb3BlcmF0b3JbXShjb25zdCBfS2V5JiBfX2spCisgICAgeworICAgICAgX0hhc2h0YWJsZSogX19oID0gc3RhdGljX2Nhc3Q8X0hhc2h0YWJsZSo+KHRoaXMpOworICAgICAgdHlwZW5hbWUgX0hhc2h0YWJsZTo6X0hhc2hfY29kZV90eXBlIF9fY29kZSA9IF9faC0+X01faGFzaF9jb2RlKF9fayk7CisgICAgICBzdGQ6OnNpemVfdCBfX24gPSBfX2gtPl9NX2J1Y2tldF9pbmRleChfX2ssIF9fY29kZSwKKwkJCQkJICAgICBfX2gtPl9NX2J1Y2tldF9jb3VudCk7CisKKyAgICAgIHR5cGVuYW1lIF9IYXNodGFibGU6Ol9Ob2RlKiBfX3AgPQorCV9faC0+X01fZmluZF9ub2RlKF9faC0+X01fYnVja2V0c1tfX25dLCBfX2ssIF9fY29kZSk7CisgICAgICBpZiAoIV9fcCkKKwlyZXR1cm4gX19oLT5fTV9pbnNlcnRfYnVja2V0KHN0ZDo6bWFrZV9wYWlyKF9faywgbWFwcGVkX3R5cGUoKSksCisJCQkJICAgICBfX24sIF9fY29kZSktPnNlY29uZDsKKyAgICAgIHJldHVybiAoX19wLT5fTV92KS5zZWNvbmQ7CisgICAgfQorCisgIC8vIGNsYXNzIHRlbXBsYXRlIF9SZWhhc2hfYmFzZS4gIEdpdmUgaGFzaHRhYmxlIHRoZSBtYXhfbG9hZF9mYWN0b3IKKyAgLy8gZnVuY3Rpb25zIGlmZiB0aGUgcmVoYXNoIHBvbGljeSBpcyBfUHJpbWVfcmVoYXNoX3BvbGljeS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlaGFzaFBvbGljeSwgdHlwZW5hbWUgX0hhc2h0YWJsZT4KKyAgICBzdHJ1Y3QgX1JlaGFzaF9iYXNlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSGFzaHRhYmxlPgorICAgIHN0cnVjdCBfUmVoYXNoX2Jhc2U8X1ByaW1lX3JlaGFzaF9wb2xpY3ksIF9IYXNodGFibGU+CisgICAgeworICAgICAgZmxvYXQKKyAgICAgIG1heF9sb2FkX2ZhY3RvcigpIGNvbnN0CisgICAgICB7CisJY29uc3QgX0hhc2h0YWJsZSogX190aGlzID0gc3RhdGljX2Nhc3Q8Y29uc3QgX0hhc2h0YWJsZSo+KHRoaXMpOworCXJldHVybiBfX3RoaXMtPl9fcmVoYXNoX3BvbGljeSgpLm1heF9sb2FkX2ZhY3RvcigpOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBtYXhfbG9hZF9mYWN0b3IoZmxvYXQgX196KQorICAgICAgeworCV9IYXNodGFibGUqIF9fdGhpcyA9IHN0YXRpY19jYXN0PF9IYXNodGFibGUqPih0aGlzKTsKKwlfX3RoaXMtPl9fcmVoYXNoX3BvbGljeShfUHJpbWVfcmVoYXNoX3BvbGljeShfX3opKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8vIENsYXNzIHRlbXBsYXRlIF9IYXNoX2NvZGVfYmFzZS4gIEVuY2Fwc3VsYXRlcyB0d28gcG9saWN5IGlzc3VlcyB0aGF0CisgIC8vIGFyZW4ndCBxdWl0ZSBvcnRob2dvbmFsLgorICAvLyAgICgxKSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nIGEgcmFuZ2VkIGhhc2ggZnVuY3Rpb24gYW5kIHVzaW5nCisgIC8vICAgICAgIHRoZSBjb21iaW5hdGlvbiBvZiBhIGhhc2ggZnVuY3Rpb24gYW5kIGEgcmFuZ2UtaGFzaGluZyBmdW5jdGlvbi4KKyAgLy8gICAgICAgSW4gdGhlIGZvcm1lciBjYXNlIHdlIGRvbid0IGhhdmUgc3VjaCB0aGluZ3MgYXMgaGFzaCBjb2Rlcywgc28KKyAgLy8gICAgICAgd2UgaGF2ZSBhIGR1bW15IHR5cGUgYXMgcGxhY2Vob2xkZXIuCisgIC8vICAgKDIpIFdoZXRoZXIgb3Igbm90IHdlIGNhY2hlIGhhc2ggY29kZXMuICBDYWNoaW5nIGhhc2ggY29kZXMgaXMKKyAgLy8gICAgICAgbWVhbmluZ2xlc3MgaWYgd2UgaGF2ZSBhIHJhbmdlZCBoYXNoIGZ1bmN0aW9uLgorICAvLyBXZSBhbHNvIHB1dCB0aGUga2V5IGV4dHJhY3Rpb24gYW5kIGVxdWFsaXR5IGNvbXBhcmlzb24gZnVuY3Rpb24gCisgIC8vIG9iamVjdHMgaGVyZSwgZm9yIGNvbnZlbmllbmNlLgorICAKKyAgLy8gUHJpbWFyeSB0ZW1wbGF0ZTogdW51c2VkIGV4Y2VwdCBhcyBhIGhvb2sgZm9yIHNwZWNpYWxpemF0aW9ucy4gIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2gsCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICBzdHJ1Y3QgX0hhc2hfY29kZV9iYXNlOworCisgIC8vIFNwZWNpYWxpemF0aW9uOiByYW5nZWQgaGFzaCBmdW5jdGlvbiwgbm8gY2FjaGluZyBoYXNoIGNvZGVzLiAgSDEKKyAgLy8gYW5kIEgyIGFyZSBwcm92aWRlZCBidXQgaWdub3JlZC4gIFdlIGRlZmluZSBhIGR1bW15IGhhc2ggY29kZSB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9FcXVhbCwKKwkgICB0eXBlbmFtZSBfSDEsIHR5cGVuYW1lIF9IMiwgdHlwZW5hbWUgX0hhc2g+CisgICAgc3RydWN0IF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwgX0gyLAorCQkJICAgX0hhc2gsIGZhbHNlPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfSGFzaF9jb2RlX2Jhc2UoY29uc3QgX0V4dHJhY3RLZXkmIF9fZXgsIGNvbnN0IF9FcXVhbCYgX19lcSwKKwkJICAgICAgY29uc3QgX0gxJiwgY29uc3QgX0gyJiwgY29uc3QgX0hhc2gmIF9faCkKKyAgICAgIDogX01fZXh0cmFjdChfX2V4KSwgX01fZXEoX19lcSksIF9NX3JhbmdlZF9oYXNoKF9faCkgeyB9CisKKyAgICAgIHR5cGVkZWYgdm9pZCogX0hhc2hfY29kZV90eXBlOworICAKKyAgICAgIF9IYXNoX2NvZGVfdHlwZQorICAgICAgX01faGFzaF9jb2RlKGNvbnN0IF9LZXkmIF9fa2V5KSBjb25zdAorICAgICAgeyByZXR1cm4gMDsgfQorICAKKyAgICAgIHN0ZDo6c2l6ZV90CisgICAgICBfTV9idWNrZXRfaW5kZXgoY29uc3QgX0tleSYgX19rLCBfSGFzaF9jb2RlX3R5cGUsCisJCSAgICAgIHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JhbmdlZF9oYXNoKF9faywgX19uKTsgfQorCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qIF9fcCwKKwkJICAgICAgc3RkOjpzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcmFuZ2VkX2hhc2goX01fZXh0cmFjdChfX3AtPl9NX3YpLCBfX24pOyB9CisgIAorICAgICAgYm9vbAorICAgICAgX01fY29tcGFyZShjb25zdCBfS2V5JiBfX2ssIF9IYXNoX2NvZGVfdHlwZSwKKwkJIF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qIF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2VxKF9faywgX01fZXh0cmFjdChfX24tPl9NX3YpKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zdG9yZV9jb2RlKF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qLCBfSGFzaF9jb2RlX3R5cGUpIGNvbnN0CisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fY29weV9jb2RlKF9IYXNoX25vZGU8X1ZhbHVlLCBmYWxzZT4qLAorCQkgICBjb25zdCBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KikgY29uc3QKKyAgICAgIHsgfQorICAgICAgCisgICAgICB2b2lkCisgICAgICBfTV9zd2FwKF9IYXNoX2NvZGVfYmFzZSYgX194KQorICAgICAgeworCXN0ZDo6c3dhcChfTV9leHRyYWN0LCBfX3guX01fZXh0cmFjdCk7CisJc3RkOjpzd2FwKF9NX2VxLCBfX3guX01fZXEpOworCXN0ZDo6c3dhcChfTV9yYW5nZWRfaGFzaCwgX194Ll9NX3JhbmdlZF9oYXNoKTsKKyAgICAgIH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgIF9FeHRyYWN0S2V5ICBfTV9leHRyYWN0OworICAgICAgX0VxdWFsICAgICAgIF9NX2VxOworICAgICAgX0hhc2ggICAgICAgIF9NX3JhbmdlZF9oYXNoOworICAgIH07CisKKworICAvLyBObyBzcGVjaWFsaXphdGlvbiBmb3IgcmFuZ2VkIGhhc2ggZnVuY3Rpb24gd2hpbGUgY2FjaGluZyBoYXNoIGNvZGVzLgorICAvLyBUaGF0IGNvbWJpbmF0aW9uIGlzIG1lYW5pbmdsZXNzLCBhbmQgdHJ5aW5nIHRvIGRvIGl0IGlzIGFuIGVycm9yLgorICAKKyAgCisgIC8vIFNwZWNpYWxpemF0aW9uOiByYW5nZWQgaGFzaCBmdW5jdGlvbiwgY2FjaGUgaGFzaCBjb2Rlcy4gIFRoaXMKKyAgLy8gY29tYmluYXRpb24gaXMgbWVhbmluZ2xlc3MsIHNvIHdlIHByb3ZpZGUgb25seSBhIGRlY2xhcmF0aW9uCisgIC8vIGFuZCBubyBkZWZpbml0aW9uLiAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyLCB0eXBlbmFtZSBfSGFzaD4KKyAgICBzdHJ1Y3QgX0hhc2hfY29kZV9iYXNlPF9LZXksIF9WYWx1ZSwgX0V4dHJhY3RLZXksIF9FcXVhbCwgX0gxLCBfSDIsCisJCQkgICBfSGFzaCwgdHJ1ZT47CisKKyAgLy8gU3BlY2lhbGl6YXRpb246IGhhc2ggZnVuY3Rpb24gYW5kIHJhbmdlLWhhc2hpbmcgZnVuY3Rpb24sIG5vCisgIC8vIGNhY2hpbmcgb2YgaGFzaCBjb2Rlcy4gIEggaXMgcHJvdmlkZWQgYnV0IGlnbm9yZWQuICBQcm92aWRlcworICAvLyB0eXBlZGVmIGFuZCBhY2Nlc3NvciByZXF1aXJlZCBieSBUUjEuICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAorCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfRXF1YWwsCisJICAgdHlwZW5hbWUgX0gxLCB0eXBlbmFtZSBfSDI+CisgICAgc3RydWN0IF9IYXNoX2NvZGVfYmFzZTxfS2V5LCBfVmFsdWUsIF9FeHRyYWN0S2V5LCBfRXF1YWwsIF9IMSwgX0gyLAorCQkJICAgX0RlZmF1bHRfcmFuZ2VkX2hhc2gsIGZhbHNlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0gxIGhhc2hlcjsKKworICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0aW9uKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gxOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfSGFzaF9jb2RlX2Jhc2UoY29uc3QgX0V4dHJhY3RLZXkmIF9fZXgsIGNvbnN0IF9FcXVhbCYgX19lcSwKKwkJICAgICAgY29uc3QgX0gxJiBfX2gxLCBjb25zdCBfSDImIF9faDIsCisJCSAgICAgIGNvbnN0IF9EZWZhdWx0X3JhbmdlZF9oYXNoJikKKyAgICAgIDogX01fZXh0cmFjdChfX2V4KSwgX01fZXEoX19lcSksIF9NX2gxKF9faDEpLCBfTV9oMihfX2gyKSB7IH0KKworICAgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBfSGFzaF9jb2RlX3R5cGU7CisKKyAgICAgIF9IYXNoX2NvZGVfdHlwZQorICAgICAgX01faGFzaF9jb2RlKGNvbnN0IF9LZXkmIF9faykgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gxKF9fayk7IH0KKyAgICAgIAorICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBfS2V5JiwgX0hhc2hfY29kZV90eXBlIF9fYywKKwkJICAgICAgc3RkOjpzaXplX3QgX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faDIoX19jLCBfX24pOyB9CisKKyAgICAgIHN0ZDo6c2l6ZV90CisgICAgICBfTV9idWNrZXRfaW5kZXgoY29uc3QgX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiogX19wLAorCQkgICAgICBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMihfTV9oMShfTV9leHRyYWN0KF9fcC0+X01fdikpLCBfX24pOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0tleSYgX19rLCBfSGFzaF9jb2RlX3R5cGUsCisJCSBfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9lcShfX2ssIF9NX2V4dHJhY3QoX19uLT5fTV92KSk7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3RvcmVfY29kZShfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiwgX0hhc2hfY29kZV90eXBlKSBjb25zdAorICAgICAgeyB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2NvcHlfY29kZShfSGFzaF9ub2RlPF9WYWx1ZSwgZmFsc2U+KiwKKwkJICAgY29uc3QgX0hhc2hfbm9kZTxfVmFsdWUsIGZhbHNlPiopIGNvbnN0CisgICAgICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3dhcChfSGFzaF9jb2RlX2Jhc2UmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZXh0cmFjdCwgX194Ll9NX2V4dHJhY3QpOworCXN0ZDo6c3dhcChfTV9lcSwgX194Ll9NX2VxKTsKKwlzdGQ6OnN3YXAoX01faDEsIF9feC5fTV9oMSk7CisJc3RkOjpzd2FwKF9NX2gyLCBfX3guX01faDIpOworICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgX0V4dHJhY3RLZXkgIF9NX2V4dHJhY3Q7CisgICAgICBfRXF1YWwgICAgICAgX01fZXE7CisgICAgICBfSDEgICAgICAgICAgX01faDE7CisgICAgICBfSDIgICAgICAgICAgX01faDI7CisgICAgfTsKKworICAvLyBTcGVjaWFsaXphdGlvbjogaGFzaCBmdW5jdGlvbiBhbmQgcmFuZ2UtaGFzaGluZyBmdW5jdGlvbiwgCisgIC8vIGNhY2hpbmcgaGFzaCBjb2Rlcy4gIEggaXMgcHJvdmlkZWQgYnV0IGlnbm9yZWQuICBQcm92aWRlcworICAvLyB0eXBlZGVmIGFuZCBhY2Nlc3NvciByZXF1aXJlZCBieSBUUjEuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWx1ZSwKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAorCSAgIHR5cGVuYW1lIF9IMSwgdHlwZW5hbWUgX0gyPgorICAgIHN0cnVjdCBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgX1ZhbHVlLCBfRXh0cmFjdEtleSwgX0VxdWFsLCBfSDEsIF9IMiwKKwkJCSAgIF9EZWZhdWx0X3JhbmdlZF9oYXNoLCB0cnVlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0gxIGhhc2hlcjsKKyAgICAgIAorICAgICAgaGFzaGVyCisgICAgICBoYXNoX2Z1bmN0aW9uKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gxOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICBfSGFzaF9jb2RlX2Jhc2UoY29uc3QgX0V4dHJhY3RLZXkmIF9fZXgsIGNvbnN0IF9FcXVhbCYgX19lcSwKKwkJICAgICAgY29uc3QgX0gxJiBfX2gxLCBjb25zdCBfSDImIF9faDIsCisJCSAgICAgIGNvbnN0IF9EZWZhdWx0X3JhbmdlZF9oYXNoJikKKyAgICAgIDogX01fZXh0cmFjdChfX2V4KSwgX01fZXEoX19lcSksIF9NX2gxKF9faDEpLCBfTV9oMihfX2gyKSB7IH0KKworICAgICAgdHlwZWRlZiBzdGQ6OnNpemVfdCBfSGFzaF9jb2RlX3R5cGU7CisgIAorICAgICAgX0hhc2hfY29kZV90eXBlCisgICAgICBfTV9oYXNoX2NvZGUoY29uc3QgX0tleSYgX19rKSBjb25zdAorICAgICAgeyByZXR1cm4gX01faDEoX19rKTsgfQorICAKKyAgICAgIHN0ZDo6c2l6ZV90CisgICAgICBfTV9idWNrZXRfaW5kZXgoY29uc3QgX0tleSYsIF9IYXNoX2NvZGVfdHlwZSBfX2MsCisJCSAgICAgIHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2gyKF9fYywgX19uKTsgfQorCisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fYnVja2V0X2luZGV4KGNvbnN0IF9IYXNoX25vZGU8X1ZhbHVlLCB0cnVlPiogX19wLAorCQkgICAgICBzdGQ6OnNpemVfdCBfX24pIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9oMihfX3AtPl9NX2hhc2hfY29kZSwgX19uKTsgfQorCisgICAgICBib29sCisgICAgICBfTV9jb21wYXJlKGNvbnN0IF9LZXkmIF9faywgX0hhc2hfY29kZV90eXBlIF9fYywKKwkJIF9IYXNoX25vZGU8X1ZhbHVlLCB0cnVlPiogX19uKSBjb25zdAorICAgICAgeyByZXR1cm4gX19jID09IF9fbi0+X01faGFzaF9jb2RlICYmIF9NX2VxKF9faywgX01fZXh0cmFjdChfX24tPl9NX3YpKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9zdG9yZV9jb2RlKF9IYXNoX25vZGU8X1ZhbHVlLCB0cnVlPiogX19uLCBfSGFzaF9jb2RlX3R5cGUgX19jKSBjb25zdAorICAgICAgeyBfX24tPl9NX2hhc2hfY29kZSA9IF9fYzsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jb3B5X2NvZGUoX0hhc2hfbm9kZTxfVmFsdWUsIHRydWU+KiBfX3RvLAorCQkgICBjb25zdCBfSGFzaF9ub2RlPF9WYWx1ZSwgdHJ1ZT4qIF9fZnJvbSkgY29uc3QKKyAgICAgIHsgX190by0+X01faGFzaF9jb2RlID0gX19mcm9tLT5fTV9oYXNoX2NvZGU7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3dhcChfSGFzaF9jb2RlX2Jhc2UmIF9feCkKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZXh0cmFjdCwgX194Ll9NX2V4dHJhY3QpOworCXN0ZDo6c3dhcChfTV9lcSwgX194Ll9NX2VxKTsKKwlzdGQ6OnN3YXAoX01faDEsIF9feC5fTV9oMSk7CisJc3RkOjpzd2FwKF9NX2gyLCBfX3guX01faDIpOworICAgICAgfQorICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgX0V4dHJhY3RLZXkgIF9NX2V4dHJhY3Q7CisgICAgICBfRXF1YWwgICAgICAgX01fZXE7CisgICAgICBfSDEgICAgICAgICAgX01faDE7CisgICAgICBfSDIgICAgICAgICAgX01faDI7CisgICAgfTsKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKK30KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2h5cGVyZ2VvbWV0cmljLnRjYyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2h5cGVyZ2VvbWV0cmljLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGY3MjU4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvaHlwZXJnZW9tZXRyaWMudGNjCkBAIC0wLDAgKzEsNzc1IEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9oeXBlcmdlb21ldHJpYy50Y2MKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt0cjEvY21hdGh9CisgKi8KKworLy8KKy8vIElTTyBDKysgMTQ4ODIgVFIxOiA1LjIgIFNwZWNpYWwgZnVuY3Rpb25zCisvLworCisvLyBXcml0dGVuIGJ5IEVkd2FyZCBTbWl0aC1Sb3dsYW5kIGJhc2VkOgorLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIGVkLiBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLAorLy8gICAgICAgU2VjdGlvbiA2LCBwcC4gNTU1LTU2NgorLy8gICAoMikgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfSFlQRVJHRU9NRVRSSUNfVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9IWVBFUkdFT01FVFJJQ19UQ0MgMQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgLy8gWzUuMl0gU3BlY2lhbCBmdW5jdGlvbnMKKworICAvLyBJbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgICAgLyoqCisgICAgICogICBAYnJpZWYgVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbgorICAgICAqICAgICAgICAgIGJ5IHNlcmllcyBleHBhbnNpb24uCisgICAgICogCisgICAgICogICBAZlsKKyAgICAgKiAgICAgXzFGXzEoYTtjO3gpID0gXGZyYWN7XEdhbW1hKGMpfXtcR2FtbWEoYSl9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgXHN1bV97bj0wfV57XGluZnR5fQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxmcmFje1xHYW1tYShhK24pfXtcR2FtbWEoYytuKX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3t4Xm59e24hfQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBJZiBhIGFuZCBiIGFyZSBpbnRlZ2VycyBhbmQgYSA8IDAgYW5kIGVpdGhlciBiID4gMCBvciBiIDwgYQorICAgICAqICAgdGhlbiB0aGUgc2VyaWVzIGlzIGEgcG9seW5vbWlhbCB3aXRoIGEgZmluaXRlIG51bWJlciBvZgorICAgICAqICAgdGVybXMuICBJZiBiIGlzIGFuIGludGVnZXIgYW5kIGIgPD0gMCB0aGUgY29uZmx1ZW50CisgICAgICogICBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbiBpcyB1bmRlZmluZWQuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19hICBUaGUgIm51bWVyYXRvciIgcGFyYW1ldGVyLgorICAgICAqICAgQHBhcmFtICBfX2MgIFRoZSAiZGVub21pbmF0b3IiIHBhcmFtZXRlci4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY29uZl9oeXBlcmdfc2VyaWVzKF9UcCBfX2EsIF9UcCBfX2MsIF9UcCBfX3gpCisgICAgeworICAgICAgY29uc3QgX1RwIF9fZXBzID0gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCk7CisKKyAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMSk7CisgICAgICBfVHAgX19GYWMgPSBfVHAoMSk7CisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDAwMDsKKyAgICAgIHVuc2lnbmVkIGludCBfX2k7CisgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgX190ZXJtICo9IChfX2EgKyBfVHAoX19pKSkgKiBfX3gKKyAgICAgICAgICAgICAgICAgIC8gKChfX2MgKyBfVHAoX19pKSkgKiBfVHAoMSArIF9faSkpOworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX3Rlcm0pIDwgX19lcHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIF9fRmFjICs9IF9fdGVybTsKKyAgICAgICAgfQorICAgICAgaWYgKF9faSA9PSBfX21heF9pdGVyKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIlNlcmllcyBmYWlsZWQgdG8gY29udmVyZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fY29uZl9oeXBlcmdfc2VyaWVzLiIpKTsKKworICAgICAgcmV0dXJuIF9fRmFjOworICAgIH0KKworCisgICAgLyoqCisgICAgICogIEBicmllZiAgUmV0dXJuIHRoZSBoeXBvZ2VvbWV0cmljIGZ1bmN0aW9uIEBmJCBfMkZfMShhLGI7Yzt4KSBAZiQKKyAgICAgKiAgICAgICAgICBieSBhbiBpdGVyYXRpdmUgcHJvY2VkdXJlIGRlc2NyaWJlZCBpbgorICAgICAqICAgICAgICAgIEx1a2UsIEFsZ29yaXRobXMgZm9yIHRoZSBDb21wdXRhdGlvbiBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLgorICAgICAqCisgICAgICogIExpa2UgdGhlIGNhc2Ugb2YgdGhlIDJGMSByYXRpb25hbCBhcHByb3hpbWF0aW9ucywgdGhlc2UgYXJlIAorICAgICAqICBwcm9iYWJseSBndWFyYW50ZWVkIHRvIGNvbnZlcmdlIGZvciB4IDwgMCwgYmFycmluZyBncm9zcyAgICAKKyAgICAgKiAgbnVtZXJpY2FsIGluc3RhYmlsaXR5IGluIHRoZSBwcmUtYXN5bXB0b3RpYyByZWdpbWUuICAgICAgICAgCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY29uZl9oeXBlcmdfbHVrZShfVHAgX19hLCBfVHAgX19jLCBfVHAgX194aW4pCisgICAgeworICAgICAgY29uc3QgX1RwIF9fYmlnID0gc3RkOjpwb3coc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXgoKSwgX1RwKDAuMTZMKSk7CisgICAgICBjb25zdCBpbnQgX19ubWF4ID0gMjAwMDA7CisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IF9UcCBfX3ggID0gLV9feGluOworICAgICAgY29uc3QgX1RwIF9feDMgPSBfX3ggKiBfX3ggKiBfX3g7CisgICAgICBjb25zdCBfVHAgX190MCA9IF9fYSAvIF9fYzsKKyAgICAgIGNvbnN0IF9UcCBfX3QxID0gKF9fYSArIF9UcCgxKSkgLyAoX1RwKDIpICogX19jKTsKKyAgICAgIGNvbnN0IF9UcCBfX3QyID0gKF9fYSArIF9UcCgyKSkgLyAoX1RwKDIpICogKF9fYyArIF9UcCgxKSkpOworICAgICAgX1RwIF9fRiA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX3ByZWM7CisKKyAgICAgIF9UcCBfX0JubTMgPSBfVHAoMSk7CisgICAgICBfVHAgX19Cbm0yID0gX1RwKDEpICsgX190MSAqIF9feDsKKyAgICAgIF9UcCBfX0JubTEgPSBfVHAoMSkgKyBfX3QyICogX194ICogKF9UcCgxKSArIF9fdDEgLyBfVHAoMykgKiBfX3gpOworCisgICAgICBfVHAgX19Bbm0zID0gX1RwKDEpOworICAgICAgX1RwIF9fQW5tMiA9IF9fQm5tMiAtIF9fdDAgKiBfX3g7CisgICAgICBfVHAgX19Bbm0xID0gX19Cbm0xIC0gX190MCAqIChfVHAoMSkgKyBfX3QyICogX194KSAqIF9feAorICAgICAgICAgICAgICAgICArIF9fdDAgKiBfX3QxICogKF9fYyAvIChfX2MgKyBfVHAoMSkpKSAqIF9feCAqIF9feDsKKworICAgICAgaW50IF9fbiA9IDM7CisgICAgICB3aGlsZSgxKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fbnBhbTEgPSBfVHAoX19uIC0gMSkgKyBfX2E7CisgICAgICAgICAgX1RwIF9fbnBjbTEgPSBfVHAoX19uIC0gMSkgKyBfX2M7CisgICAgICAgICAgX1RwIF9fbnBhbTIgPSBfVHAoX19uIC0gMikgKyBfX2E7CisgICAgICAgICAgX1RwIF9fbnBjbTIgPSBfVHAoX19uIC0gMikgKyBfX2M7CisgICAgICAgICAgX1RwIF9fdG5tMSAgPSBfVHAoMiAqIF9fbiAtIDEpOworICAgICAgICAgIF9UcCBfX3RubTMgID0gX1RwKDIgKiBfX24gLSAzKTsKKyAgICAgICAgICBfVHAgX190bm01ICA9IF9UcCgyICogX19uIC0gNSk7CisgICAgICAgICAgX1RwIF9fRjEgPSAgKF9UcChfX24gLSAyKSAtIF9fYSkgLyAoX1RwKDIpICogX190bm0zICogX19ucGNtMSk7CisgICAgICAgICAgX1RwIF9fRjIgPSAgKF9UcChfX24pICsgX19hKSAqIF9fbnBhbTEKKyAgICAgICAgICAgICAgICAgICAvIChfVHAoNCkgKiBfX3RubTEgKiBfX3RubTMgKiBfX25wY20yICogX19ucGNtMSk7CisgICAgICAgICAgX1RwIF9fRjMgPSAtX19ucGFtMiAqIF9fbnBhbTEgKiAoX1RwKF9fbiAtIDIpIC0gX19hKQorICAgICAgICAgICAgICAgICAgIC8gKF9UcCg4KSAqIF9fdG5tMyAqIF9fdG5tMyAqIF9fdG5tNQorICAgICAgICAgICAgICAgICAgICogKF9UcChfX24gLSAzKSArIF9fYykgKiBfX25wY20yICogX19ucGNtMSk7CisgICAgICAgICAgX1RwIF9fRSAgPSAtX19ucGFtMSAqIChfVHAoX19uIC0gMSkgLSBfX2MpCisgICAgICAgICAgICAgICAgICAgLyAoX1RwKDIpICogX190bm0zICogX19ucGNtMiAqIF9fbnBjbTEpOworCisgICAgICAgICAgX1RwIF9fQW4gPSAoX1RwKDEpICsgX19GMSAqIF9feCkgKiBfX0FubTEKKyAgICAgICAgICAgICAgICAgICArIChfX0UgKyBfX0YyICogX194KSAqIF9feCAqIF9fQW5tMiArIF9fRjMgKiBfX3gzICogX19Bbm0zOworICAgICAgICAgIF9UcCBfX0JuID0gKF9UcCgxKSArIF9fRjEgKiBfX3gpICogX19Cbm0xCisgICAgICAgICAgICAgICAgICAgKyAoX19FICsgX19GMiAqIF9feCkgKiBfX3ggKiBfX0JubTIgKyBfX0YzICogX194MyAqIF9fQm5tMzsKKyAgICAgICAgICBfVHAgX19yID0gX19BbiAvIF9fQm47CisKKyAgICAgICAgICBfX3ByZWMgPSBzdGQ6OmFicygoX19GIC0gX19yKSAvIF9fRik7CisgICAgICAgICAgX19GID0gX19yOworCisgICAgICAgICAgaWYgKF9fcHJlYyA8IF9fZXBzIHx8IF9fbiA+IF9fbm1heCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fQW4pID4gX19iaWcgfHwgc3RkOjphYnMoX19CbikgPiBfX2JpZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19BbiAgIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0JuICAgLz0gX19iaWc7CisgICAgICAgICAgICAgIF9fQW5tMSAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Cbm0xIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0FubTIgLz0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm5tMiAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Bbm0zIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0JubTMgLz0gX19iaWc7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoc3RkOjphYnMoX19BbikgPCBfVHAoMSkgLyBfX2JpZworICAgICAgICAgICAgICAgIHx8IHN0ZDo6YWJzKF9fQm4pIDwgX1RwKDEpIC8gX19iaWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fQW4gICAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19CbiAgICo9IF9fYmlnOworICAgICAgICAgICAgICBfX0FubTEgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm5tMSAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Bbm0yICo9IF9fYmlnOworICAgICAgICAgICAgICBfX0JubTIgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQW5tMyAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Cbm0zICo9IF9fYmlnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgKytfX247CisgICAgICAgICAgX19Cbm0zID0gX19Cbm0yOworICAgICAgICAgIF9fQm5tMiA9IF9fQm5tMTsKKyAgICAgICAgICBfX0JubTEgPSBfX0JuOworICAgICAgICAgIF9fQW5tMyA9IF9fQW5tMjsKKyAgICAgICAgICBfX0FubTIgPSBfX0FubTE7CisgICAgICAgICAgX19Bbm0xID0gX19BbjsKKyAgICAgICAgfQorCisgICAgICBpZiAoX19uID49IF9fbm1heCkKKyAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJJdGVyYXRpb24gZmFpbGVkIHRvIGNvbnZlcmdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBfX2NvbmZfaHlwZXJnX2x1a2UuIikpOworCisgICAgICByZXR1cm4gX19GOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgY29uZmx1ZW50IGh5cG9nZW9tZXRyaWMgZnVuY3Rpb24KKyAgICAgKiAgICAgICAgICAgQGYkIF8xRl8xKGE7Yzt4KSBAZiQuCisgICAgICogCisgICAgICogICBAdG9kbyAgSGFuZGxlIGIgPT0gbm9ucG9zaXRpdmUgaW50ZWdlciBibG93dXAgLSByZXR1cm4gTmFOLgorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fYSAgVGhlIEBhIG51bWVyYXRvciBwYXJhbWV0ZXIuCisgICAgICogICBAcGFyYW0gIF9fYyAgVGhlIEBhIGRlbm9taW5hdG9yIHBhcmFtZXRlci4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbi4KKyAgICAgKiAgIEByZXR1cm4gIFRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fY29uZl9oeXBlcmcoX1RwIF9fYSwgX1RwIF9fYywgX1RwIF9feCkKKyAgICB7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgY29uc3QgX1RwIF9fY19uaW50ID0gc3RkOjp0cjE6Om5lYXJieWludChfX2MpOworI2Vsc2UKKyAgICAgIGNvbnN0IF9UcCBfX2NfbmludCA9IHN0YXRpY19jYXN0PGludD4oX19jICsgX1RwKDAuNUwpKTsKKyNlbmRpZgorICAgICAgaWYgKF9faXNuYW4oX19hKSB8fCBfX2lzbmFuKF9fYykgfHwgX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9fY19uaW50ID09IF9fYyAmJiBfX2NfbmludCA8PSAwKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgZWxzZSBpZiAoX19hID09IF9UcCgwKSkKKyAgICAgICAgcmV0dXJuIF9UcCgxKTsKKyAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX2EpCisgICAgICAgIHJldHVybiBzdGQ6OmV4cChfX3gpOworICAgICAgZWxzZSBpZiAoX194IDwgX1RwKDApKQorICAgICAgICByZXR1cm4gX19jb25mX2h5cGVyZ19sdWtlKF9fYSwgX19jLCBfX3gpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX19jb25mX2h5cGVyZ19zZXJpZXMoX19hLCBfX2MsIF9feCk7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGh5cG9nZW9tZXRyaWMgZnVuY3Rpb24gQGYkIF8yRl8xKGEsYjtjO3gpIEBmJAorICAgICAqICAgYnkgc2VyaWVzIGV4cGFuc2lvbi4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBoeXBvZ2VvbWV0cmljIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBfMkZfMShhLGI7Yzt4KSA9IFxmcmFje1xHYW1tYShjKX17XEdhbW1hKGEpXEdhbW1hKGIpfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxzdW1fe249MH1ee1xpbmZ0eX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3tcR2FtbWEoYStuKVxHYW1tYShiK24pfXtcR2FtbWEoYytuKX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3t4Xm59e24hfQorICAgICAqICAgQGZdCisgICAgICogCisgICAgICogICBUaGlzIHdvcmtzIGFuZCBpdCdzIHByZXR0eSBmYXN0LgorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fYSAgVGhlIGZpcnN0IEBhIG51bWVyYXRvciBwYXJhbWV0ZXIuCisgICAgICogICBAcGFyYW0gIF9fYSAgVGhlIHNlY29uZCBAYSBudW1lcmF0b3IgcGFyYW1ldGVyLgorICAgICAqICAgQHBhcmFtICBfX2MgIFRoZSBAYSBkZW5vbWluYXRvciBwYXJhbWV0ZXIuCisgICAgICogICBAcGFyYW0gIF9feCAgVGhlIGFyZ3VtZW50IG9mIHRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgY29uZmx1ZW50IGh5cGVyZ2VvbWV0cmljIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2h5cGVyZ19zZXJpZXMoX1RwIF9fYSwgX1RwIF9fYiwgX1RwIF9fYywgX1RwIF9feCkKKyAgICB7CisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKworICAgICAgX1RwIF9fdGVybSA9IF9UcCgxKTsKKyAgICAgIF9UcCBfX0ZhYmMgPSBfVHAoMSk7CisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhfaXRlciA9IDEwMDAwMDsKKyAgICAgIHVuc2lnbmVkIGludCBfX2k7CisgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgX190ZXJtICo9IChfX2EgKyBfVHAoX19pKSkgKiAoX19iICsgX1RwKF9faSkpICogX194CisgICAgICAgICAgICAgICAgICAvICgoX19jICsgX1RwKF9faSkpICogX1RwKDEgKyBfX2kpKTsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtKSA8IF9fZXBzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX0ZhYmMgKz0gX190ZXJtOworICAgICAgICB9CisgICAgICBpZiAoX19pID09IF9fbWF4X2l0ZXIpCisgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiU2VyaWVzIGZhaWxlZCB0byBjb252ZXJnZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19oeXBlcmdfc2VyaWVzLiIpKTsKKworICAgICAgcmV0dXJuIF9fRmFiYzsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGh5cG9nZW9tZXRyaWMgZnVuY3Rpb24gQGYkIF8yRl8xKGEsYjtjO3gpIEBmJAorICAgICAqICAgICAgICAgICBieSBhbiBpdGVyYXRpdmUgcHJvY2VkdXJlIGRlc2NyaWJlZCBpbgorICAgICAqICAgICAgICAgICBMdWtlLCBBbGdvcml0aG1zIGZvciB0aGUgQ29tcHV0YXRpb24gb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucy4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19oeXBlcmdfbHVrZShfVHAgX19hLCBfVHAgX19iLCBfVHAgX19jLCBfVHAgX194aW4pCisgICAgeworICAgICAgY29uc3QgX1RwIF9fYmlnID0gc3RkOjpwb3coc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjptYXgoKSwgX1RwKDAuMTZMKSk7CisgICAgICBjb25zdCBpbnQgX19ubWF4ID0gMjAwMDA7CisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IF9UcCBfX3ggID0gLV9feGluOworICAgICAgY29uc3QgX1RwIF9feDMgPSBfX3ggKiBfX3ggKiBfX3g7CisgICAgICBjb25zdCBfVHAgX190MCA9IF9fYSAqIF9fYiAvIF9fYzsKKyAgICAgIGNvbnN0IF9UcCBfX3QxID0gKF9fYSArIF9UcCgxKSkgKiAoX19iICsgX1RwKDEpKSAvIChfVHAoMikgKiBfX2MpOworICAgICAgY29uc3QgX1RwIF9fdDIgPSAoX19hICsgX1RwKDIpKSAqIChfX2IgKyBfVHAoMikpCisgICAgICAgICAgICAgICAgICAgICAvIChfVHAoMikgKiAoX19jICsgX1RwKDEpKSk7CisKKyAgICAgIF9UcCBfX0YgPSBfVHAoMSk7CisKKyAgICAgIF9UcCBfX0JubTMgPSBfVHAoMSk7CisgICAgICBfVHAgX19Cbm0yID0gX1RwKDEpICsgX190MSAqIF9feDsKKyAgICAgIF9UcCBfX0JubTEgPSBfVHAoMSkgKyBfX3QyICogX194ICogKF9UcCgxKSArIF9fdDEgLyBfVHAoMykgKiBfX3gpOworCisgICAgICBfVHAgX19Bbm0zID0gX1RwKDEpOworICAgICAgX1RwIF9fQW5tMiA9IF9fQm5tMiAtIF9fdDAgKiBfX3g7CisgICAgICBfVHAgX19Bbm0xID0gX19Cbm0xIC0gX190MCAqIChfVHAoMSkgKyBfX3QyICogX194KSAqIF9feAorICAgICAgICAgICAgICAgICArIF9fdDAgKiBfX3QxICogKF9fYyAvIChfX2MgKyBfVHAoMSkpKSAqIF9feCAqIF9feDsKKworICAgICAgaW50IF9fbiA9IDM7CisgICAgICB3aGlsZSAoMSkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IF9UcCBfX25wYW0xID0gX1RwKF9fbiAtIDEpICsgX19hOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wYm0xID0gX1RwKF9fbiAtIDEpICsgX19iOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wY20xID0gX1RwKF9fbiAtIDEpICsgX19jOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wYW0yID0gX1RwKF9fbiAtIDIpICsgX19hOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wYm0yID0gX1RwKF9fbiAtIDIpICsgX19iOworICAgICAgICAgIGNvbnN0IF9UcCBfX25wY20yID0gX1RwKF9fbiAtIDIpICsgX19jOworICAgICAgICAgIGNvbnN0IF9UcCBfX3RubTEgID0gX1RwKDIgKiBfX24gLSAxKTsKKyAgICAgICAgICBjb25zdCBfVHAgX190bm0zICA9IF9UcCgyICogX19uIC0gMyk7CisgICAgICAgICAgY29uc3QgX1RwIF9fdG5tNSAgPSBfVHAoMiAqIF9fbiAtIDUpOworICAgICAgICAgIGNvbnN0IF9UcCBfX24yID0gX19uICogX19uOworICAgICAgICAgIGNvbnN0IF9UcCBfX0YxID0gKF9UcCgzKSAqIF9fbjIgKyAoX19hICsgX19iIC0gX1RwKDYpKSAqIF9fbgorICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDIpIC0gX19hICogX19iIC0gX1RwKDIpICogKF9fYSArIF9fYikpCisgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX1RwKDIpICogX190bm0zICogX19ucGNtMSk7CisgICAgICAgICAgY29uc3QgX1RwIF9fRjIgPSAtKF9UcCgzKSAqIF9fbjIgLSAoX19hICsgX19iICsgX1RwKDYpKSAqIF9fbgorICAgICAgICAgICAgICAgICAgICAgICAgICsgX1RwKDIpIC0gX19hICogX19iKSAqIF9fbnBhbTEgKiBfX25wYm0xCisgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX1RwKDQpICogX190bm0xICogX190bm0zICogX19ucGNtMiAqIF9fbnBjbTEpOworICAgICAgICAgIGNvbnN0IF9UcCBfX0YzID0gKF9fbnBhbTIgKiBfX25wYW0xICogX19ucGJtMiAqIF9fbnBibTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIChfVHAoX19uIC0gMikgLSBfX2EpICogKF9UcChfX24gLSAyKSAtIF9fYikpCisgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX1RwKDgpICogX190bm0zICogX190bm0zICogX190bm01CisgICAgICAgICAgICAgICAgICAgICAgICAgKiAoX1RwKF9fbiAtIDMpICsgX19jKSAqIF9fbnBjbTIgKiBfX25wY20xKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19FICA9IC1fX25wYW0xICogX19ucGJtMSAqIChfVHAoX19uIC0gMSkgLSBfX2MpCisgICAgICAgICAgICAgICAgICAgICAgICAgLyAoX1RwKDIpICogX190bm0zICogX19ucGNtMiAqIF9fbnBjbTEpOworCisgICAgICAgICAgX1RwIF9fQW4gPSAoX1RwKDEpICsgX19GMSAqIF9feCkgKiBfX0FubTEKKyAgICAgICAgICAgICAgICAgICArIChfX0UgKyBfX0YyICogX194KSAqIF9feCAqIF9fQW5tMiArIF9fRjMgKiBfX3gzICogX19Bbm0zOworICAgICAgICAgIF9UcCBfX0JuID0gKF9UcCgxKSArIF9fRjEgKiBfX3gpICogX19Cbm0xCisgICAgICAgICAgICAgICAgICAgKyAoX19FICsgX19GMiAqIF9feCkgKiBfX3ggKiBfX0JubTIgKyBfX0YzICogX194MyAqIF9fQm5tMzsKKyAgICAgICAgICBjb25zdCBfVHAgX19yID0gX19BbiAvIF9fQm47CisKKyAgICAgICAgICBjb25zdCBfVHAgX19wcmVjID0gc3RkOjphYnMoKF9fRiAtIF9fcikgLyBfX0YpOworICAgICAgICAgIF9fRiA9IF9fcjsKKworICAgICAgICAgIGlmIChfX3ByZWMgPCBfX2VwcyB8fCBfX24gPiBfX25tYXgpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGlmIChzdGQ6OmFicyhfX0FuKSA+IF9fYmlnIHx8IHN0ZDo6YWJzKF9fQm4pID4gX19iaWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fQW4gICAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19CbiAgIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0FubTEgLz0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm5tMSAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Bbm0yIC89IF9fYmlnOworICAgICAgICAgICAgICBfX0JubTIgLz0gX19iaWc7CisgICAgICAgICAgICAgIF9fQW5tMyAvPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Cbm0zIC89IF9fYmlnOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHN0ZDo6YWJzKF9fQW4pIDwgX1RwKDEpIC8gX19iaWcKKyAgICAgICAgICAgICAgICB8fCBzdGQ6OmFicyhfX0JuKSA8IF9UcCgxKSAvIF9fYmlnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX0FuICAgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm4gICAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Bbm0xICo9IF9fYmlnOworICAgICAgICAgICAgICBfX0JubTEgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQW5tMiAqPSBfX2JpZzsKKyAgICAgICAgICAgICAgX19Cbm0yICo9IF9fYmlnOworICAgICAgICAgICAgICBfX0FubTMgKj0gX19iaWc7CisgICAgICAgICAgICAgIF9fQm5tMyAqPSBfX2JpZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICsrX19uOworICAgICAgICAgIF9fQm5tMyA9IF9fQm5tMjsKKyAgICAgICAgICBfX0JubTIgPSBfX0JubTE7CisgICAgICAgICAgX19Cbm0xID0gX19CbjsKKyAgICAgICAgICBfX0FubTMgPSBfX0FubTI7CisgICAgICAgICAgX19Bbm0yID0gX19Bbm0xOworICAgICAgICAgIF9fQW5tMSA9IF9fQW47CisgICAgICAgIH0KKworICAgICAgaWYgKF9fbiA+PSBfX25tYXgpCisgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiSXRlcmF0aW9uIGZhaWxlZCB0byBjb252ZXJnZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19oeXBlcmdfbHVrZS4iKSk7CisKKyAgICAgIHJldHVybiBfX0Y7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBSZXR1cm4gdGhlIGh5cG9nZW9tZXRyaWMgZnVuY3Rpb24gQGYkIF8yRl8xKGEsYjtjO3gpIEBmJCAKKyAgICAgKiAgYnkgdGhlIHJlZmxlY3Rpb24gZm9ybXVsYWUgaW4gQWJyYW1vd2l0eiAmIFN0ZWd1biBmb3JtdWxhCisgICAgICogIDE1LjMuNiBmb3IgZCA9IGMgLSBhIC0gYiBub3QgaW50ZWdyYWwgYW5kIGZvcm11bGEgMTUuMy4xMSBmb3IKKyAgICAgKiAgZCA9IGMgLSBhIC0gYiBpbnRlZ3JhbC4gIFRoaXMgYXNzdW1lcyBhLCBiLCBjICE9IG5lZ2F0aXZlCisgICAgICogIGludGVnZXIuCisgICAgICoKKyAgICAgKiAgIFRoZSBoeXBvZ2VvbWV0cmljIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnkKKyAgICAgKiAgIEBmWworICAgICAqICAgICBfMkZfMShhLGI7Yzt4KSA9IFxmcmFje1xHYW1tYShjKX17XEdhbW1hKGEpXEdhbW1hKGIpfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxzdW1fe249MH1ee1xpbmZ0eX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3tcR2FtbWEoYStuKVxHYW1tYShiK24pfXtcR2FtbWEoYytuKX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBcZnJhY3t4Xm59e24hfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIFRoZSByZWZsZWN0aW9uIGZvcm11bGEgZm9yIG5vbmludGVncmFsIEBmJCBkID0gYyAtIGEgLSBiIEBmJCBpczoKKyAgICAgKiAgIEBmWworICAgICAqICAgICBfMkZfMShhLGI7Yzt4KSA9IFxmcmFje1xHYW1tYShjKVxHYW1tYShkKX17XEdhbW1hKGMtYSlcR2FtbWEoYy1iKX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMkZfMShhLGI7MS1kOzEteCkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgKyBcZnJhY3tcR2FtbWEoYylcR2FtbWEoLWQpfXtcR2FtbWEoYSlcR2FtbWEoYil9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXzJGXzEoYy1hLGMtYjsxK2Q7MS14KQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIFRoZSByZWZsZWN0aW9uIGZvcm11bGEgZm9yIGludGVncmFsIEBmJCBtID0gYyAtIGEgLSBiIEBmJCBpczoKKyAgICAgKiAgIEBmWworICAgICAqICAgICBfMkZfMShhLGI7YStiK207eCkgPSBcZnJhY3tcR2FtbWEobSlcR2FtbWEoYStiK20pfXtcR2FtbWEoYSttKVxHYW1tYShiK20pfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgXHN1bV97az0wfV57bS0xfSBcZnJhY3sobSthKV9rKG0rYilfa317ayEoMS1tKV9rfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIC0gCisgICAgICogICBAZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19oeXBlcmdfcmVmbGVjdChfVHAgX19hLCBfVHAgX19iLCBfVHAgX19jLCBfVHAgX194KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2QgPSBfX2MgLSBfX2EgLSBfX2I7CisgICAgICBjb25zdCBpbnQgX19pbnRkICA9IHN0ZDo6Zmxvb3IoX19kICsgX1RwKDAuNUwpKTsKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgY29uc3QgX1RwIF9fdG9sZXIgPSBfVHAoMTAwMCkgKiBfX2VwczsKKyAgICAgIGNvbnN0IF9UcCBfX2xvZ19tYXggPSBzdGQ6OmxvZyhzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46Om1heCgpKTsKKyAgICAgIGNvbnN0IGJvb2wgX19kX2ludGVnZXIgPSAoc3RkOjphYnMoX19kIC0gX19pbnRkKSA8IF9fdG9sZXIpOworCisgICAgICBpZiAoX19kX2ludGVnZXIpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19sbl9vbXggPSBzdGQ6OmxvZyhfVHAoMSkgLSBfX3gpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2FkID0gc3RkOjphYnMoX19kKTsKKyAgICAgICAgICBfVHAgX19GMSwgX19GMjsKKworICAgICAgICAgIF9UcCBfX2QxLCBfX2QyOworICAgICAgICAgIGlmIChfX2QgPj0gX1RwKDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX2QxID0gX19kOworICAgICAgICAgICAgICBfX2QyID0gX1RwKDApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19kMSA9IF9UcCgwKTsKKyAgICAgICAgICAgICAgX19kMiA9IF9fZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGNvbnN0IF9UcCBfX2xuZ19jID0gX19sb2dfZ2FtbWEoX19jKTsKKworICAgICAgICAgIC8vICBFdmFsdWF0ZSBGMS4KKyAgICAgICAgICBpZiAoX19hZCA8IF9fZXBzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvLyAgZCA9IGMgLSBhIC0gYiA9IDAuCisgICAgICAgICAgICAgIF9fRjEgPSBfVHAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworCisgICAgICAgICAgICAgIGJvb2wgX19va19kMSA9IHRydWU7CisgICAgICAgICAgICAgIF9UcCBfX2xuZ19hZCwgX19sbmdfYWQxLCBfX2xuZ19iZDE7CisgICAgICAgICAgICAgIF9fdHJ5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgX19sbmdfYWQgPSBfX2xvZ19nYW1tYShfX2FkKTsKKyAgICAgICAgICAgICAgICAgIF9fbG5nX2FkMSA9IF9fbG9nX2dhbW1hKF9fYSArIF9fZDEpOworICAgICAgICAgICAgICAgICAgX19sbmdfYmQxID0gX19sb2dfZ2FtbWEoX19iICsgX19kMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBfX2NhdGNoKC4uLikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfX29rX2QxID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmIChfX29rX2QxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIEdhbW1hIGZ1bmN0aW9ucyBpbiB0aGUgZGVub21pbmF0b3IgYXJlIG9rLgorICAgICAgICAgICAgICAgICAgICogUHJvY2VlZCB3aXRoIGV2YWx1YXRpb24uCisgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIF9UcCBfX3N1bTEgPSBfVHAoMSk7CisgICAgICAgICAgICAgICAgICBfVHAgX190ZXJtID0gX1RwKDEpOworICAgICAgICAgICAgICAgICAgX1RwIF9fbG5fcHJlMSA9IF9fbG5nX2FkICsgX19sbmdfYyArIF9fZDIgKiBfX2xuX29teAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbG5nX2FkMSAtIF9fbG5nX2JkMTsKKworICAgICAgICAgICAgICAgICAgLyogRG8gRjEgc3VtLgorICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2FkOyArK19faSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBfX2ogPSBfX2kgLSAxOworICAgICAgICAgICAgICAgICAgICAgIF9fdGVybSAqPSAoX19hICsgX19kMiArIF9faikgKiAoX19iICsgX19kMiArIF9faikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gKF9UcCgxKSArIF9fZDIgKyBfX2opIC8gX19pICogKF9UcCgxKSAtIF9feCk7CisgICAgICAgICAgICAgICAgICAgICAgX19zdW0xICs9IF9fdGVybTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICBpZiAoX19sbl9wcmUxID4gX19sb2dfbWF4KQorICAgICAgICAgICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIk92ZXJmbG93IG9mIGdhbW1hIGZ1bmN0aW9ucyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaW4gX19oeXBlcmdfbHVrZS4iKSk7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIF9fRjEgPSBzdGQ6OmV4cChfX2xuX3ByZTEpICogX19zdW0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8vICBHYW1tYSBmdW5jdGlvbnMgaW4gdGhlIGRlbm9taW5hdG9yIHdlcmUgbm90IG9rLgorICAgICAgICAgICAgICAgICAgLy8gIFNvIHRoZSBGMSB0ZXJtIGlzIHplcm8uCisgICAgICAgICAgICAgICAgICBfX0YxID0gX1RwKDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLy8gZW5kIEYxIGV2YWx1YXRpb24KKworICAgICAgICAgIC8vIEV2YWx1YXRlIEYyLgorICAgICAgICAgIGJvb2wgX19va19kMiA9IHRydWU7CisgICAgICAgICAgX1RwIF9fbG5nX2FkMiwgX19sbmdfYmQyOworICAgICAgICAgIF9fdHJ5CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fbG5nX2FkMiA9IF9fbG9nX2dhbW1hKF9fYSArIF9fZDIpOworICAgICAgICAgICAgICBfX2xuZ19iZDIgPSBfX2xvZ19nYW1tYShfX2IgKyBfX2QyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX2NhdGNoKC4uLikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19va19kMiA9IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKF9fb2tfZDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8vICBHYW1tYSBmdW5jdGlvbnMgaW4gdGhlIGRlbm9taW5hdG9yIGFyZSBvay4KKyAgICAgICAgICAgICAgLy8gIFByb2NlZWQgd2l0aCBldmFsdWF0aW9uLgorICAgICAgICAgICAgICBjb25zdCBpbnQgX19tYXhpdGVyID0gMjAwMDsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fcHNpXzEgPSAtX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX2dhbW1hX2UoKTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fcHNpXzFwZCA9IF9fcHNpKF9UcCgxKSArIF9fYWQpOworICAgICAgICAgICAgICBjb25zdCBfVHAgX19wc2lfYXBkMSA9IF9fcHNpKF9fYSArIF9fZDEpOworICAgICAgICAgICAgICBjb25zdCBfVHAgX19wc2lfYnBkMSA9IF9fcHNpKF9fYiArIF9fZDEpOworCisgICAgICAgICAgICAgIF9UcCBfX3BzaV90ZXJtID0gX19wc2lfMSArIF9fcHNpXzFwZCAtIF9fcHNpX2FwZDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfX3BzaV9icGQxIC0gX19sbl9vbXg7CisgICAgICAgICAgICAgIF9UcCBfX2ZhY3QgPSBfVHAoMSk7CisgICAgICAgICAgICAgIF9UcCBfX3N1bTIgPSBfX3BzaV90ZXJtOworICAgICAgICAgICAgICBfVHAgX19sbl9wcmUyID0gX19sbmdfYyArIF9fZDEgKiBfX2xuX29teAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19sbmdfYWQyIC0gX19sbmdfYmQyOworCisgICAgICAgICAgICAgIC8vIERvIEYyIHN1bS4KKyAgICAgICAgICAgICAgaW50IF9fajsKKyAgICAgICAgICAgICAgZm9yIChfX2ogPSAxOyBfX2ogPCBfX21heGl0ZXI7ICsrX19qKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8vICBWYWx1ZXMgZm9yIHBzaSBmdW5jdGlvbnMgdXNlIHJlY3VycmVuY2U7CisgICAgICAgICAgICAgICAgICAvLyAgQWJyYW1vd2l0eiAmIFN0ZWd1biA2LjMuNQorICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fdGVybTEgPSBfVHAoMSkgLyBfVHAoX19qKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfVHAoMSkgLyAoX19hZCArIF9faik7CisgICAgICAgICAgICAgICAgICBjb25zdCBfVHAgX190ZXJtMiA9IF9UcCgxKSAvIChfX2EgKyBfX2QxICsgX1RwKF9faiAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfVHAoMSkgLyAoX19iICsgX19kMSArIF9UcChfX2ogLSAxKSk7CisgICAgICAgICAgICAgICAgICBfX3BzaV90ZXJtICs9IF9fdGVybTEgLSBfX3Rlcm0yOworICAgICAgICAgICAgICAgICAgX19mYWN0ICo9IChfX2EgKyBfX2QxICsgX1RwKF9faiAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAqIChfX2IgKyBfX2QxICsgX1RwKF9faiAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAvICgoX19hZCArIF9faikgKiBfX2opICogKF9UcCgxKSAtIF9feCk7CisgICAgICAgICAgICAgICAgICBjb25zdCBfVHAgX19kZWx0YSA9IF9fZmFjdCAqIF9fcHNpX3Rlcm07CisgICAgICAgICAgICAgICAgICBfX3N1bTIgKz0gX19kZWx0YTsKKyAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmFicyhfX2RlbHRhKSA8IF9fZXBzICogc3RkOjphYnMoX19zdW0yKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoX19qID09IF9fbWF4aXRlcikKKyAgICAgICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIlN1bSBGMiBmYWlsZWQgdG8gY29udmVyZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19oeXBlcmdfcmVmbGVjdCIpKTsKKworICAgICAgICAgICAgICBpZiAoX19zdW0yID09IF9UcCgwKSkKKyAgICAgICAgICAgICAgICBfX0YyID0gX1RwKDApOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgX19GMiA9IHN0ZDo6ZXhwKF9fbG5fcHJlMikgKiBfX3N1bTI7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvLyBHYW1tYSBmdW5jdGlvbnMgaW4gdGhlIGRlbm9taW5hdG9yIG5vdCBvay4KKyAgICAgICAgICAgICAgLy8gU28gdGhlIEYyIHRlcm0gaXMgemVyby4KKyAgICAgICAgICAgICAgX19GMiA9IF9UcCgwKTsKKyAgICAgICAgICAgIH0gLy8gZW5kIEYyIGV2YWx1YXRpb24KKworICAgICAgICAgIGNvbnN0IF9UcCBfX3Nnbl8yID0gKF9faW50ZCAlIDIgPT0gMSA/IC1fVHAoMSkgOiBfVHAoMSkpOworICAgICAgICAgIGNvbnN0IF9UcCBfX0YgPSBfX0YxICsgX19zZ25fMiAqIF9fRjI7CisKKyAgICAgICAgICByZXR1cm4gX19GOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvLyAgZCA9IGMgLSBhIC0gYiBub3QgYW4gaW50ZWdlci4KKworICAgICAgICAgIC8vICBUaGVzZSBnYW1tYSBmdW5jdGlvbnMgYXBwZWFyIGluIHRoZSBkZW5vbWluYXRvciwgc28gd2UKKyAgICAgICAgICAvLyAgY2F0Y2ggdGhlaXIgaGFybWxlc3MgZG9tYWluIGVycm9ycyBhbmQgc2V0IHRoZSB0ZXJtcyB0byB6ZXJvLgorICAgICAgICAgIGJvb2wgX19vazEgPSB0cnVlOworICAgICAgICAgIF9UcCBfX3Nnbl9nMWNhID0gX1RwKDApLCBfX2xuX2cxY2EgPSBfVHAoMCk7CisgICAgICAgICAgX1RwIF9fc2duX2cxY2IgPSBfVHAoMCksIF9fbG5fZzFjYiA9IF9UcCgwKTsKKyAgICAgICAgICBfX3RyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX3Nnbl9nMWNhID0gX19sb2dfZ2FtbWFfc2lnbihfX2MgLSBfX2EpOworICAgICAgICAgICAgICBfX2xuX2cxY2EgPSBfX2xvZ19nYW1tYShfX2MgLSBfX2EpOworICAgICAgICAgICAgICBfX3Nnbl9nMWNiID0gX19sb2dfZ2FtbWFfc2lnbihfX2MgLSBfX2IpOworICAgICAgICAgICAgICBfX2xuX2cxY2IgPSBfX2xvZ19nYW1tYShfX2MgLSBfX2IpOworICAgICAgICAgICAgfQorICAgICAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX29rMSA9IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgYm9vbCBfX29rMiA9IHRydWU7CisgICAgICAgICAgX1RwIF9fc2duX2cyYSA9IF9UcCgwKSwgX19sbl9nMmEgPSBfVHAoMCk7CisgICAgICAgICAgX1RwIF9fc2duX2cyYiA9IF9UcCgwKSwgX19sbl9nMmIgPSBfVHAoMCk7CisgICAgICAgICAgX190cnkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19zZ25fZzJhID0gX19sb2dfZ2FtbWFfc2lnbihfX2EpOworICAgICAgICAgICAgICBfX2xuX2cyYSA9IF9fbG9nX2dhbW1hKF9fYSk7CisgICAgICAgICAgICAgIF9fc2duX2cyYiA9IF9fbG9nX2dhbW1hX3NpZ24oX19iKTsKKyAgICAgICAgICAgICAgX19sbl9nMmIgPSBfX2xvZ19nYW1tYShfX2IpOworICAgICAgICAgICAgfQorICAgICAgICAgIF9fY2F0Y2goLi4uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX29rMiA9IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgY29uc3QgX1RwIF9fc2duX2djID0gX19sb2dfZ2FtbWFfc2lnbihfX2MpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2xuX2djID0gX19sb2dfZ2FtbWEoX19jKTsKKyAgICAgICAgICBjb25zdCBfVHAgX19zZ25fZ2QgPSBfX2xvZ19nYW1tYV9zaWduKF9fZCk7CisgICAgICAgICAgY29uc3QgX1RwIF9fbG5fZ2QgPSBfX2xvZ19nYW1tYShfX2QpOworICAgICAgICAgIGNvbnN0IF9UcCBfX3Nnbl9nbWQgPSBfX2xvZ19nYW1tYV9zaWduKC1fX2QpOworICAgICAgICAgIGNvbnN0IF9UcCBfX2xuX2dtZCA9IF9fbG9nX2dhbW1hKC1fX2QpOworCisgICAgICAgICAgY29uc3QgX1RwIF9fc2duMSA9IF9fc2duX2djICogX19zZ25fZ2QgICogX19zZ25fZzFjYSAqIF9fc2duX2cxY2I7CisgICAgICAgICAgY29uc3QgX1RwIF9fc2duMiA9IF9fc2duX2djICogX19zZ25fZ21kICogX19zZ25fZzJhICAqIF9fc2duX2cyYjsKKworICAgICAgICAgIF9UcCBfX3ByZTEsIF9fcHJlMjsKKyAgICAgICAgICBpZiAoX19vazEgJiYgX19vazIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9UcCBfX2xuX3ByZTEgPSBfX2xuX2djICsgX19sbl9nZCAgLSBfX2xuX2cxY2EgLSBfX2xuX2cxY2I7CisgICAgICAgICAgICAgIF9UcCBfX2xuX3ByZTIgPSBfX2xuX2djICsgX19sbl9nbWQgLSBfX2xuX2cyYSAgLSBfX2xuX2cyYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX19kICogc3RkOjpsb2coX1RwKDEpIC0gX194KTsKKyAgICAgICAgICAgICAgaWYgKF9fbG5fcHJlMSA8IF9fbG9nX21heCAmJiBfX2xuX3ByZTIgPCBfX2xvZ19tYXgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgX19wcmUxID0gc3RkOjpleHAoX19sbl9wcmUxKTsKKyAgICAgICAgICAgICAgICAgIF9fcHJlMiA9IHN0ZDo6ZXhwKF9fbG5fcHJlMik7CisgICAgICAgICAgICAgICAgICBfX3ByZTEgKj0gX19zZ24xOworICAgICAgICAgICAgICAgICAgX19wcmUyICo9IF9fc2duMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIk92ZXJmbG93IG9mIGdhbW1hIGZ1bmN0aW9ucyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9faHlwZXJnX3JlZmxlY3QiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKF9fb2sxICYmICFfX29rMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX1RwIF9fbG5fcHJlMSA9IF9fbG5fZ2MgKyBfX2xuX2dkIC0gX19sbl9nMWNhIC0gX19sbl9nMWNiOworICAgICAgICAgICAgICBpZiAoX19sbl9wcmUxIDwgX19sb2dfbWF4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIF9fcHJlMSA9IHN0ZDo6ZXhwKF9fbG5fcHJlMSk7CisgICAgICAgICAgICAgICAgICBfX3ByZTEgKj0gX19zZ24xOworICAgICAgICAgICAgICAgICAgX19wcmUyID0gX1RwKDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiT3ZlcmZsb3cgb2YgZ2FtbWEgZnVuY3Rpb25zICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19oeXBlcmdfcmVmbGVjdCIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoIV9fb2sxICYmIF9fb2syKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfVHAgX19sbl9wcmUyID0gX19sbl9nYyArIF9fbG5fZ21kIC0gX19sbl9nMmEgLSBfX2xuX2cyYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX19kICogc3RkOjpsb2coX1RwKDEpIC0gX194KTsKKyAgICAgICAgICAgICAgaWYgKF9fbG5fcHJlMiA8IF9fbG9nX21heCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfX3ByZTEgPSBfVHAoMCk7CisgICAgICAgICAgICAgICAgICBfX3ByZTIgPSBzdGQ6OmV4cChfX2xuX3ByZTIpOworICAgICAgICAgICAgICAgICAgX19wcmUyICo9IF9fc2duMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oIk92ZXJmbG93IG9mIGdhbW1hIGZ1bmN0aW9ucyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9faHlwZXJnX3JlZmxlY3QiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19wcmUxID0gX1RwKDApOworICAgICAgICAgICAgICBfX3ByZTIgPSBfVHAoMCk7CisgICAgICAgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiVW5kZXJmbG93IG9mIGdhbW1hIGZ1bmN0aW9ucyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19oeXBlcmdfcmVmbGVjdCIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGNvbnN0IF9UcCBfX0YxID0gX19oeXBlcmdfc2VyaWVzKF9fYSwgX19iLCBfVHAoMSkgLSBfX2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKDEpIC0gX194KTsKKyAgICAgICAgICBjb25zdCBfVHAgX19GMiA9IF9faHlwZXJnX3NlcmllcyhfX2MgLSBfX2EsIF9fYyAtIF9fYiwgX1RwKDEpICsgX19kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCgxKSAtIF9feCk7CisKKyAgICAgICAgICBjb25zdCBfVHAgX19GID0gX19wcmUxICogX19GMSArIF9fcHJlMiAqIF9fRjI7CisKKyAgICAgICAgICByZXR1cm4gX19GOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBSZXR1cm4gdGhlIGh5cG9nZW9tZXRyaWMgZnVuY3Rpb24gQGYkIF8yRl8xKGEsYjtjO3gpIEBmJC4KKyAgICAgKgorICAgICAqICAgVGhlIGh5cG9nZW9tZXRyaWMgZnVuY3Rpb24gaXMgZGVmaW5lZCBieQorICAgICAqICAgQGZbCisgICAgICogICAgIF8yRl8xKGEsYjtjO3gpID0gXGZyYWN7XEdhbW1hKGMpfXtcR2FtbWEoYSlcR2FtbWEoYil9CisgICAgICogICAgICAgICAgICAgICAgICAgICAgXHN1bV97bj0wfV57XGluZnR5fQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxmcmFje1xHYW1tYShhK24pXEdhbW1hKGIrbil9e1xHYW1tYShjK24pfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIFxmcmFje3hebn17biF9CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX2EgIFRoZSBmaXJzdCBAYSBudW1lcmF0b3IgcGFyYW1ldGVyLgorICAgICAqICAgQHBhcmFtICBfX2EgIFRoZSBzZWNvbmQgQGEgbnVtZXJhdG9yIHBhcmFtZXRlci4KKyAgICAgKiAgIEBwYXJhbSAgX19jICBUaGUgQGEgZGVub21pbmF0b3IgcGFyYW1ldGVyLgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgY29uZmx1ZW50IGh5cGVyZ2VvbWV0cmljIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19oeXBlcmcoX1RwIF9fYSwgX1RwIF9fYiwgX1RwIF9fYywgX1RwIF9feCkKKyAgICB7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgY29uc3QgX1RwIF9fYV9uaW50ID0gc3RkOjp0cjE6Om5lYXJieWludChfX2EpOworICAgICAgY29uc3QgX1RwIF9fYl9uaW50ID0gc3RkOjp0cjE6Om5lYXJieWludChfX2IpOworICAgICAgY29uc3QgX1RwIF9fY19uaW50ID0gc3RkOjp0cjE6Om5lYXJieWludChfX2MpOworI2Vsc2UKKyAgICAgIGNvbnN0IF9UcCBfX2FfbmludCA9IHN0YXRpY19jYXN0PGludD4oX19hICsgX1RwKDAuNUwpKTsKKyAgICAgIGNvbnN0IF9UcCBfX2JfbmludCA9IHN0YXRpY19jYXN0PGludD4oX19iICsgX1RwKDAuNUwpKTsKKyAgICAgIGNvbnN0IF9UcCBfX2NfbmludCA9IHN0YXRpY19jYXN0PGludD4oX19jICsgX1RwKDAuNUwpKTsKKyNlbmRpZgorICAgICAgY29uc3QgX1RwIF9fdG9sZXIgPSBfVHAoMTAwMCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGlmIChzdGQ6OmFicyhfX3gpID49IF9UcCgxKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkFyZ3VtZW50IG91dHNpZGUgdW5pdCBjaXJjbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19oeXBlcmcuIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX2EpIHx8IF9faXNuYW4oX19iKQorICAgICAgICAgICAgfHwgX19pc25hbihfX2MpIHx8IF9faXNuYW4oX194KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChfX2NfbmludCA9PSBfX2MgJiYgX19jX25pbnQgPD0gX1RwKDApKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgZWxzZSBpZiAoc3RkOjphYnMoX19jIC0gX19iKSA8IF9fdG9sZXIgfHwgc3RkOjphYnMoX19jIC0gX19hKSA8IF9fdG9sZXIpCisgICAgICAgIHJldHVybiBzdGQ6OnBvdyhfVHAoMSkgLSBfX3gsIF9fYyAtIF9fYSAtIF9fYik7CisgICAgICBlbHNlIGlmIChfX2EgPj0gX1RwKDApICYmIF9fYiA+PSBfVHAoMCkgJiYgX19jID49IF9UcCgwKQorICAgICAgICAgICAgJiYgX194ID49IF9UcCgwKSAmJiBfX3ggPCBfVHAoMC45OTVMKSkKKyAgICAgICAgcmV0dXJuIF9faHlwZXJnX3NlcmllcyhfX2EsIF9fYiwgX19jLCBfX3gpOworICAgICAgZWxzZSBpZiAoc3RkOjphYnMoX19hKSA8IF9UcCgxMCkgJiYgc3RkOjphYnMoX19iKSA8IF9UcCgxMCkpCisgICAgICAgIHsKKyAgICAgICAgICAvLyAgRm9yIGludGVnZXIgYSBhbmQgYiB0aGUgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24gaXMgYQorICAgICAgICAgIC8vICBmaW5pdGUgcG9seW5vbWlhbC4KKyAgICAgICAgICBpZiAoX19hIDwgX1RwKDApICAmJiAgc3RkOjphYnMoX19hIC0gX19hX25pbnQpIDwgX190b2xlcikKKyAgICAgICAgICAgIHJldHVybiBfX2h5cGVyZ19zZXJpZXMoX19hX25pbnQsIF9fYiwgX19jLCBfX3gpOworICAgICAgICAgIGVsc2UgaWYgKF9fYiA8IF9UcCgwKSAgJiYgIHN0ZDo6YWJzKF9fYiAtIF9fYl9uaW50KSA8IF9fdG9sZXIpCisgICAgICAgICAgICByZXR1cm4gX19oeXBlcmdfc2VyaWVzKF9fYSwgX19iX25pbnQsIF9fYywgX194KTsKKyAgICAgICAgICBlbHNlIGlmIChfX3ggPCAtX1RwKDAuMjVMKSkKKyAgICAgICAgICAgIHJldHVybiBfX2h5cGVyZ19sdWtlKF9fYSwgX19iLCBfX2MsIF9feCk7CisgICAgICAgICAgZWxzZSBpZiAoX194IDwgX1RwKDAuNUwpKQorICAgICAgICAgICAgcmV0dXJuIF9faHlwZXJnX3NlcmllcyhfX2EsIF9fYiwgX19jLCBfX3gpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIChzdGQ6OmFicyhfX2MpID4gX1RwKDEwKSkKKyAgICAgICAgICAgICAgcmV0dXJuIF9faHlwZXJnX3NlcmllcyhfX2EsIF9fYiwgX19jLCBfX3gpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4gX19oeXBlcmdfcmVmbGVjdChfX2EsIF9fYiwgX19jLCBfX3gpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBfX2h5cGVyZ19sdWtlKF9fYSwgX19iLCBfX2MsIF9feCk7CisgICAgfQorCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBzdGQ6OnRyMTo6X19kZXRhaWwKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9IWVBFUkdFT01FVFJJQ19UQ0MKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2ludHR5cGVzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9pbnR0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTJjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9pbnR0eXBlcy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBpbnR0eXBlcy5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvaW50dHlwZXMuaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9JTlRUWVBFU19ICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9JTlRUWVBFU19IIDEKKworI2luY2x1ZGUgPHRyMS9jaW50dHlwZXM+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfSU5UVFlQRVNfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvbGVnZW5kcmVfZnVuY3Rpb24udGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvbGVnZW5kcmVfZnVuY3Rpb24udGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWNmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9sZWdlbmRyZV9mdW5jdGlvbi50Y2MKQEAgLTAsMCArMSwzMDMgQEAKKy8vIFNwZWNpYWwgZnVuY3Rpb25zIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2xlZ2VuZHJlX2Z1bmN0aW9uLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3RyMS9jbWF0aH0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MiBUUjE6IDUuMiAgU3BlY2lhbCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgRWR3YXJkIFNtaXRoLVJvd2xhbmQgYmFzZWQgb246CisvLyAgICgxKSBIYW5kYm9vayBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLAorLy8gICAgICAgZWQuIE1pbHRvbiBBYnJhbW93aXR6IGFuZCBJcmVuZSBBLiBTdGVndW4sCisvLyAgICAgICBEb3ZlciBQdWJsaWNhdGlvbnMsCisvLyAgICAgICBTZWN0aW9uIDgsIHBwLiAzMzEtMzQxCisvLyAgICgyKSBUaGUgR251IFNjaWVudGlmaWMgTGlicmFyeSwgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dzbAorLy8gICAoMykgTnVtZXJpY2FsIFJlY2lwZXMgaW4gQywgYnkgVy4gSC4gUHJlc3MsIFMuIEEuIFRldWtvbHNreSwKKy8vICAgICAgIFcuIFQuIFZldHRlcmxpbmcsIEIuIFAuIEZsYW5uZXJ5LCBDYW1icmlkZ2UgVW5pdmVyc2l0eSBQcmVzcyAoMTk5MiksCisvLyAgICAgICAybmQgZWQsIHBwLiAyNTItMjU0CisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX0xFR0VORFJFX0ZVTkNUSU9OX1RDQworI2RlZmluZSBfR0xJQkNYWF9UUjFfTEVHRU5EUkVfRlVOQ1RJT05fVENDIDEKKworI2luY2x1ZGUgInNwZWNpYWxfZnVuY3Rpb25fdXRpbC5oIgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgLy8gWzUuMl0gU3BlY2lhbCBmdW5jdGlvbnMKKworICAvLyBJbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgTGVnZW5kcmUgcG9seW5vbWlhbCBieSByZWN1cnNpb24gb24gb3JkZXIKKyAgICAgKiAgICAgICAgICAgQGYkIGwgQGYkLgorICAgICAqIAorICAgICAqICAgVGhlIExlZ2VuZHJlIGZ1bmN0aW9uIG9mIEBmJCBsIEBmJCBhbmQgQGYkIHggQGYkLAorICAgICAqICAgQGYkIFBfbCh4KSBAZiQsIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgUF9sKHgpID0gXGZyYWN7MX17Ml5sIGwhfVxmcmFje2RebH17ZHhebH0oeF4yIC0gMSlee2x9CisgICAgICogICBAZl0KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgbCAgVGhlIG9yZGVyIG9mIHRoZSBMZWdlbmRyZSBwb2x5bm9taWFsLiAgQGYkbCA+PSAwQGYkLgorICAgICAqICAgQHBhcmFtICB4ICBUaGUgYXJndW1lbnQgb2YgdGhlIExlZ2VuZHJlIHBvbHlub21pYWwuICBAZiR8eHwgPD0gMUBmJC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wb2x5X2xlZ2VuZHJlX3AodW5zaWduZWQgaW50IF9fbCwgX1RwIF9feCkKKyAgICB7CisKKyAgICAgIGlmICgoX194IDwgX1RwKC0xKSkgfHwgKF9feCA+IF9UcCgrMSkpKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQXJndW1lbnQgb3V0IG9mIHJhbmdlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGluIF9fcG9seV9sZWdlbmRyZV9wLiIpKTsKKyAgICAgIGVsc2UgaWYgKF9faXNuYW4oX194KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChfX3ggPT0gK19UcCgxKSkKKyAgICAgICAgcmV0dXJuICtfVHAoMSk7CisgICAgICBlbHNlIGlmIChfX3ggPT0gLV9UcCgxKSkKKyAgICAgICAgcmV0dXJuIChfX2wgJSAyID09IDEgPyAtX1RwKDEpIDogK19UcCgxKSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX19wX2xtMiA9IF9UcCgxKTsKKyAgICAgICAgICBpZiAoX19sID09IDApCisgICAgICAgICAgICByZXR1cm4gX19wX2xtMjsKKworICAgICAgICAgIF9UcCBfX3BfbG0xID0gX194OworICAgICAgICAgIGlmIChfX2wgPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBfX3BfbG0xOworCisgICAgICAgICAgX1RwIF9fcF9sID0gMDsKKyAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2xsID0gMjsgX19sbCA8PSBfX2w7ICsrX19sbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLy8gIFRoaXMgYXJyYW5nZW1lbnQgaXMgc3VwcG9zZWQgdG8gYmUgYmV0dGVyIGZvciByb3VuZG9mZgorICAgICAgICAgICAgICAvLyAgcHJvdGVjdGlvbiwgQXJma2VuLCAybmQgRWQsIEVxIDEyLjE3YS4KKyAgICAgICAgICAgICAgX19wX2wgPSBfVHAoMikgKiBfX3ggKiBfX3BfbG0xIC0gX19wX2xtMgorICAgICAgICAgICAgICAgICAgICAtIChfX3ggKiBfX3BfbG0xIC0gX19wX2xtMikgLyBfVHAoX19sbCk7CisgICAgICAgICAgICAgIF9fcF9sbTIgPSBfX3BfbG0xOworICAgICAgICAgICAgICBfX3BfbG0xID0gX19wX2w7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gX19wX2w7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGFzc29jaWF0ZWQgTGVnZW5kcmUgZnVuY3Rpb24gYnkgcmVjdXJzaW9uCisgICAgICogICAgICAgICAgIG9uIEBmJCBsIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSB0aGUgTGVnZW5kcmUgZnVuY3Rpb24KKyAgICAgKiAgIEBmJCBQX2woeCkgQGYkIGJ5IHRoZSBSb2RyaWd1ZXMgZm9ybXVsYToKKyAgICAgKiAgIEBmWworICAgICAqICAgICBQX2xebSh4KSA9ICgxIC0geF4yKV57bS8yfVxmcmFje2RebX17ZHhebX1QX2woeCkKKyAgICAgKiAgIEBmXQorICAgICAqIAorICAgICAqICAgQHBhcmFtICBsICBUaGUgb3JkZXIgb2YgdGhlIGFzc29jaWF0ZWQgTGVnZW5kcmUgZnVuY3Rpb24uCisgICAgICogICAgICAgICAgICAgIEBmJCBsID49IDAgQGYkLgorICAgICAqICAgQHBhcmFtICBtICBUaGUgb3JkZXIgb2YgdGhlIGFzc29jaWF0ZWQgTGVnZW5kcmUgZnVuY3Rpb24uCisgICAgICogICAgICAgICAgICAgIEBmJCBtIDw9IGwgQGYkLgorICAgICAqICAgQHBhcmFtICB4ICBUaGUgYXJndW1lbnQgb2YgdGhlIGFzc29jaWF0ZWQgTGVnZW5kcmUgZnVuY3Rpb24uCisgICAgICogICAgICAgICAgICAgIEBmJCB8eHwgPD0gMSBAZiQuCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fYXNzb2NfbGVnZW5kcmVfcCh1bnNpZ25lZCBpbnQgX19sLCB1bnNpZ25lZCBpbnQgX19tLCBfVHAgX194KQorICAgIHsKKworICAgICAgaWYgKF9feCA8IF9UcCgtMSkgfHwgX194ID4gX1RwKCsxKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIkFyZ3VtZW50IG91dCBvZiByYW5nZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbiBfX2Fzc29jX2xlZ2VuZHJlX3AuIikpOworICAgICAgZWxzZSBpZiAoX19tID4gX19sKQorICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiRGVncmVlIG91dCBvZiByYW5nZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbiBfX2Fzc29jX2xlZ2VuZHJlX3AuIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9fbSA9PSAwKQorICAgICAgICByZXR1cm4gX19wb2x5X2xlZ2VuZHJlX3AoX19sLCBfX3gpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcF9tbSA9IF9UcCgxKTsKKyAgICAgICAgICBpZiAoX19tID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLy8gIFR3byBzcXVhcmUgcm9vdHMgc2VlbSBtb3JlIGFjY3VyYXRlIG1vcmUgb2YgdGhlIHRpbWUKKyAgICAgICAgICAgICAgLy8gIHRoYW4ganVzdCBvbmUuCisgICAgICAgICAgICAgIF9UcCBfX3Jvb3QgPSBzdGQ6OnNxcnQoX1RwKDEpIC0gX194KSAqIHN0ZDo6c3FydChfVHAoMSkgKyBfX3gpOworICAgICAgICAgICAgICBfVHAgX19mYWN0ID0gX1RwKDEpOworICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAxOyBfX2kgPD0gX19tOyArK19faSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfX3BfbW0gKj0gLV9fZmFjdCAqIF9fcm9vdDsKKyAgICAgICAgICAgICAgICAgIF9fZmFjdCArPSBfVHAoMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX2wgPT0gX19tKQorICAgICAgICAgICAgcmV0dXJuIF9fcF9tbTsKKworICAgICAgICAgIF9UcCBfX3BfbXAxbSA9IF9UcCgyICogX19tICsgMSkgKiBfX3ggKiBfX3BfbW07CisgICAgICAgICAgaWYgKF9fbCA9PSBfX20gKyAxKQorICAgICAgICAgICAgcmV0dXJuIF9fcF9tcDFtOworCisgICAgICAgICAgX1RwIF9fcF9sbTJtID0gX19wX21tOworICAgICAgICAgIF9UcCBfX1BfbG0xbSA9IF9fcF9tcDFtOworICAgICAgICAgIF9UcCBfX3BfbG0gPSBfVHAoMCk7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19qID0gX19tICsgMjsgX19qIDw9IF9fbDsgKytfX2opCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fcF9sbSA9IChfVHAoMiAqIF9faiAtIDEpICogX194ICogX19QX2xtMW0KKyAgICAgICAgICAgICAgICAgICAgICAtIF9UcChfX2ogKyBfX20gLSAxKSAqIF9fcF9sbTJtKSAvIF9UcChfX2ogLSBfX20pOworICAgICAgICAgICAgICBfX3BfbG0ybSA9IF9fUF9sbTFtOworICAgICAgICAgICAgICBfX1BfbG0xbSA9IF9fcF9sbTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiBfX3BfbG07CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIHNwaGVyaWNhbCBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uLgorICAgICAqIAorICAgICAqICAgVGhlIHNwaGVyaWNhbCBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uIG9mIEBmJCBsIEBmJCwgQGYkIG0gQGYkLAorICAgICAqICAgYW5kIEBmJCBcdGhldGEgQGYkIGlzIGRlZmluZWQgYXMgQGYkIFlfbF5tKFx0aGV0YSwwKSBAZiQgd2hlcmUKKyAgICAgKiAgIEBmWworICAgICAqICAgICAgWV9sXm0oXHRoZXRhLFxwaGkpID0gKC0xKV5tW1xmcmFjeygybCsxKX17NFxwaX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZnJhY3sobC1tKSF9eyhsK20pIX1dCisgICAgICogICAgICAgICAgICAgICAgICAgICBQX2xebShcY29zXHRoZXRhKSBcZXhwXntpbVxwaGl9CisgICAgICogICBAZl0KKyAgICAgKiAgIGlzIHRoZSBzcGhlcmljYWwgaGFybW9uaWMgZnVuY3Rpb24gYW5kIEBmJCBQX2xebSh4KSBAZiQgaXMgdGhlCisgICAgICogICBhc3NvY2lhdGVkIExlZ2VuZHJlIGZ1bmN0aW9uLgorICAgICAqIAorICAgICAqICAgVGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gdGhlIGFzc29jaWF0ZWQgTGVnZW5kcmUgZnVuY3Rpb24gYnkKKyAgICAgKiAgIGFyZ3VtZW50IChAZiR4ID0gXGNvcyhcdGhldGEpQGYkKSBhbmQgYnkgYSBub3JtYWxpemF0aW9uIGZhY3RvcgorICAgICAqICAgYnV0IHRoaXMgZmFjdG9yIGlzIHJhdGhlciBsYXJnZSBmb3IgbGFyZ2UgQGYkIGwgQGYkIGFuZCBAZiQgbSBAZiQKKyAgICAgKiAgIGFuZCBzbyB0aGlzIGZ1bmN0aW9uIGlzIHN0YWJsZSBmb3IgbGFyZ2VyIGRpZmZlcmVuY2VzIG9mIEBmJCBsIEBmJAorICAgICAqICAgYW5kIEBmJCBtIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIEBwYXJhbSAgbCAgVGhlIG9yZGVyIG9mIHRoZSBzcGhlcmljYWwgYXNzb2NpYXRlZCBMZWdlbmRyZSBmdW5jdGlvbi4KKyAgICAgKiAgICAgICAgICAgICAgQGYkIGwgPj0gMCBAZiQuCisgICAgICogICBAcGFyYW0gIG0gIFRoZSBvcmRlciBvZiB0aGUgc3BoZXJpY2FsIGFzc29jaWF0ZWQgTGVnZW5kcmUgZnVuY3Rpb24uCisgICAgICogICAgICAgICAgICAgIEBmJCBtIDw9IGwgQGYkLgorICAgICAqICAgQHBhcmFtICB0aGV0YSAgVGhlIHJhZGlhbiBhbmdsZSBhcmd1bWVudCBvZiB0aGUgc3BoZXJpY2FsIGFzc29jaWF0ZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgIExlZ2VuZHJlIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19zcGhfbGVnZW5kcmUodW5zaWduZWQgaW50IF9fbCwgdW5zaWduZWQgaW50IF9fbSwgX1RwIF9fdGhldGEpCisgICAgeworICAgICAgaWYgKF9faXNuYW4oX190aGV0YSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworCisgICAgICBjb25zdCBfVHAgX194ID0gc3RkOjpjb3MoX190aGV0YSk7CisKKyAgICAgIGlmIChfX2wgPCBfX20pCisgICAgICAgIHsKKyAgICAgICAgICBzdGQ6Ol9fdGhyb3dfZG9tYWluX2Vycm9yKF9fTigiQmFkIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19zcGhfbGVnZW5kcmUuIikpOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChfX20gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX1AgPSBfX3BvbHlfbGVnZW5kcmVfcChfX2wsIF9feCk7CisgICAgICAgICAgX1RwIF9fZmFjdCA9IHN0ZDo6c3FydChfVHAoMiAqIF9fbCArIDEpCisgICAgICAgICAgICAgICAgICAgICAvIChfVHAoNCkgKiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSkpOworICAgICAgICAgIF9fUCAqPSBfX2ZhY3Q7CisgICAgICAgICAgcmV0dXJuIF9fUDsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoX194ID09IF9UcCgxKSB8fCBfX3ggPT0gLV9UcCgxKSkKKyAgICAgICAgeworICAgICAgICAgIC8vICBtID4gMCBoZXJlCisgICAgICAgICAgcmV0dXJuIF9UcCgwKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gbSA+IDAgYW5kIHx4fCA8IDEgaGVyZQorCisgICAgICAgICAgLy8gU3RhcnRpbmcgdmFsdWUgZm9yIHJlY3Vyc2lvbi4KKyAgICAgICAgICAvLyBZX21ebSh4KSA9IHNxcnQoICgybSsxKS8oNHBpIG0pIGdhbW1hKG0rMS8yKS9nYW1tYShtKSApCisgICAgICAgICAgLy8gICAgICAgICAgICAgKC0xKV5tICgxLXheMileKG0vMikgLyBwaV4oMS80KQorICAgICAgICAgIGNvbnN0IF9UcCBfX3NnbiA9ICggX19tICUgMiA9PSAxID8gLV9UcCgxKSA6IF9UcCgxKSk7CisgICAgICAgICAgY29uc3QgX1RwIF9feV9tcDFtX2ZhY3RvciA9IF9feCAqIHN0ZDo6c3FydChfVHAoMiAqIF9fbSArIDMpKTsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICAgICAgY29uc3QgX1RwIF9fbG5jaXJjID0gc3RkOjp0cjE6OmxvZzFwKC1fX3ggKiBfX3gpOworI2Vsc2UKKyAgICAgICAgICBjb25zdCBfVHAgX19sbmNpcmMgPSBzdGQ6OmxvZyhfVHAoMSkgLSBfX3ggKiBfX3gpOworI2VuZGlmCisgICAgICAgICAgLy8gIEdhbW1hKG0rMS8yKSAvIEdhbW1hKG0pCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICAgIGNvbnN0IF9UcCBfX2xucG9jaCA9IHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKF9fbSArIF9UcCgwLjVMKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfVHAoX19tKSk7CisjZWxzZQorICAgICAgICAgIGNvbnN0IF9UcCBfX2xucG9jaCA9IF9fbG9nX2dhbW1hKF9UcChfX20gKyBfVHAoMC41TCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbG9nX2dhbW1hKF9UcChfX20pKTsKKyNlbmRpZgorICAgICAgICAgIGNvbnN0IF9UcCBfX2xucHJlX3ZhbCA9CisgICAgICAgICAgICAgICAgICAgIC1fVHAoMC4yNUwpICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX2xucGkoKQorICAgICAgICAgICAgICAgICAgICArIF9UcCgwLjVMKSAqIChfX2xucG9jaCArIF9fbSAqIF9fbG5jaXJjKTsKKyAgICAgICAgICBfVHAgX19zciA9IHN0ZDo6c3FydCgoX1RwKDIpICsgX1RwKDEpIC8gX19tKQorICAgICAgICAgICAgICAgICAgIC8gKF9UcCg0KSAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpKSk7CisgICAgICAgICAgX1RwIF9feV9tbSA9IF9fc2duICogX19zciAqIHN0ZDo6ZXhwKF9fbG5wcmVfdmFsKTsKKyAgICAgICAgICBfVHAgX195X21wMW0gPSBfX3lfbXAxbV9mYWN0b3IgKiBfX3lfbW07CisKKyAgICAgICAgICBpZiAoX19sID09IF9fbSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIF9feV9tbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChfX2wgPT0gX19tICsgMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIF9feV9tcDFtOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX1RwIF9feV9sbSA9IF9UcCgwKTsKKworICAgICAgICAgICAgICAvLyBDb21wdXRlIFlfbF5tLCBsID4gbSsxLCB1cHdhcmQgcmVjdXJzaW9uIG9uIGwuCisgICAgICAgICAgICAgIGZvciAoIGludCBfX2xsID0gX19tICsgMjsgX19sbCA8PSBfX2w7ICsrX19sbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjb25zdCBfVHAgX19yYXQxID0gX1RwKF9fbGwgLSBfX20pIC8gX1RwKF9fbGwgKyBfX20pOworICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fcmF0MiA9IF9UcChfX2xsIC0gX19tIC0gMSkgLyBfVHAoX19sbCArIF9fbSAtIDEpOworICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fZmFjdDEgPSBzdGQ6OnNxcnQoX19yYXQxICogX1RwKDIgKiBfX2xsICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9UcCgyICogX19sbCAtIDEpKTsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2ZhY3QyID0gc3RkOjpzcXJ0KF9fcmF0MSAqIF9fcmF0MiAqIF9UcCgyICogX19sbCArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfVHAoMiAqIF9fbGwgLSAzKSk7CisgICAgICAgICAgICAgICAgICBfX3lfbG0gPSAoX194ICogX195X21wMW0gKiBfX2ZhY3QxCisgICAgICAgICAgICAgICAgICAgICAgICAgLSAoX19sbCArIF9fbSAtIDEpICogX195X21tICogX19mYWN0MikgLyBfVHAoX19sbCAtIF9fbSk7CisgICAgICAgICAgICAgICAgICBfX3lfbW0gPSBfX3lfbXAxbTsKKyAgICAgICAgICAgICAgICAgIF9feV9tcDFtID0gX195X2xtOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICByZXR1cm4gX195X2xtOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBzdGQ6OnRyMTo6X19kZXRhaWwKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9MRUdFTkRSRV9GVU5DVElPTl9UQ0MKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2xpbWl0cy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhZDQzNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL2xpbWl0cy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBsaW1pdHMuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL2xpbWl0cy5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX1RSMV9MSU1JVFNfSAorI2RlZmluZSBfVFIxX0xJTUlUU19IIDEKKworI2luY2x1ZGUgPHRyMS9jbGltaXRzPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL21hdGguaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL21hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE3NjZmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvbWF0aC5oCkBAIC0wLDAgKzEsMTg2IEBACisvLyBUUjEgbWF0aC5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvbWF0aC5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX01BVEhfSAorI2RlZmluZSBfR0xJQkNYWF9UUjFfTUFUSF9IIDEKKworI2luY2x1ZGUgPHRyMS9jbWF0aD4KKworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwordXNpbmcgc3RkOjp0cjE6OmFjb3M7Cit1c2luZyBzdGQ6OnRyMTo6YWNvc2g7Cit1c2luZyBzdGQ6OnRyMTo6YXNpbjsKK3VzaW5nIHN0ZDo6dHIxOjphc2luaDsKK3VzaW5nIHN0ZDo6dHIxOjphdGFuOwordXNpbmcgc3RkOjp0cjE6OmF0YW4yOwordXNpbmcgc3RkOjp0cjE6OmF0YW5oOwordXNpbmcgc3RkOjp0cjE6OmNicnQ7Cit1c2luZyBzdGQ6OnRyMTo6Y2VpbDsKK3VzaW5nIHN0ZDo6dHIxOjpjb3B5c2lnbjsKK3VzaW5nIHN0ZDo6dHIxOjpjb3M7Cit1c2luZyBzdGQ6OnRyMTo6Y29zaDsKK3VzaW5nIHN0ZDo6dHIxOjplcmY7Cit1c2luZyBzdGQ6OnRyMTo6ZXJmYzsKK3VzaW5nIHN0ZDo6dHIxOjpleHA7Cit1c2luZyBzdGQ6OnRyMTo6ZXhwMjsKK3VzaW5nIHN0ZDo6dHIxOjpleHBtMTsKK3VzaW5nIHN0ZDo6dHIxOjpmYWJzOwordXNpbmcgc3RkOjp0cjE6OmZkaW07Cit1c2luZyBzdGQ6OnRyMTo6Zmxvb3I7Cit1c2luZyBzdGQ6OnRyMTo6Zm1hOwordXNpbmcgc3RkOjp0cjE6OmZtYXg7Cit1c2luZyBzdGQ6OnRyMTo6Zm1pbjsKK3VzaW5nIHN0ZDo6dHIxOjpmbW9kOwordXNpbmcgc3RkOjp0cjE6OmZyZXhwOwordXNpbmcgc3RkOjp0cjE6Omh5cG90OwordXNpbmcgc3RkOjp0cjE6Omlsb2diOwordXNpbmcgc3RkOjp0cjE6OmxkZXhwOwordXNpbmcgc3RkOjp0cjE6OmxnYW1tYTsKK3VzaW5nIHN0ZDo6dHIxOjpsbHJpbnQ7Cit1c2luZyBzdGQ6OnRyMTo6bGxyb3VuZDsKK3VzaW5nIHN0ZDo6dHIxOjpsb2c7Cit1c2luZyBzdGQ6OnRyMTo6bG9nMTA7Cit1c2luZyBzdGQ6OnRyMTo6bG9nMXA7Cit1c2luZyBzdGQ6OnRyMTo6bG9nMjsKK3VzaW5nIHN0ZDo6dHIxOjpsb2diOwordXNpbmcgc3RkOjp0cjE6OmxyaW50OwordXNpbmcgc3RkOjp0cjE6Omxyb3VuZDsKK3VzaW5nIHN0ZDo6dHIxOjpuZWFyYnlpbnQ7Cit1c2luZyBzdGQ6OnRyMTo6bmV4dGFmdGVyOwordXNpbmcgc3RkOjp0cjE6Om5leHR0b3dhcmQ7Cit1c2luZyBzdGQ6OnRyMTo6cG93OwordXNpbmcgc3RkOjp0cjE6OnJlbWFpbmRlcjsKK3VzaW5nIHN0ZDo6dHIxOjpyZW1xdW87Cit1c2luZyBzdGQ6OnRyMTo6cmludDsKK3VzaW5nIHN0ZDo6dHIxOjpyb3VuZDsKK3VzaW5nIHN0ZDo6dHIxOjpzY2FsYmxuOwordXNpbmcgc3RkOjp0cjE6OnNjYWxibjsKK3VzaW5nIHN0ZDo6dHIxOjpzaW47Cit1c2luZyBzdGQ6OnRyMTo6c2luaDsKK3VzaW5nIHN0ZDo6dHIxOjpzcXJ0OwordXNpbmcgc3RkOjp0cjE6OnRhbjsKK3VzaW5nIHN0ZDo6dHIxOjp0YW5oOwordXNpbmcgc3RkOjp0cjE6OnRnYW1tYTsKK3VzaW5nIHN0ZDo6dHIxOjp0cnVuYzsKKworI2VuZGlmCisKK3VzaW5nIHN0ZDo6dHIxOjphc3NvY19sYWd1ZXJyZWY7Cit1c2luZyBzdGQ6OnRyMTo6YXNzb2NfbGFndWVycmU7Cit1c2luZyBzdGQ6OnRyMTo6YXNzb2NfbGFndWVycmVsOworCit1c2luZyBzdGQ6OnRyMTo6YXNzb2NfbGVnZW5kcmVmOwordXNpbmcgc3RkOjp0cjE6OmFzc29jX2xlZ2VuZHJlOwordXNpbmcgc3RkOjp0cjE6OmFzc29jX2xlZ2VuZHJlbDsKKwordXNpbmcgc3RkOjp0cjE6OmJldGFmOwordXNpbmcgc3RkOjp0cjE6OmJldGE7Cit1c2luZyBzdGQ6OnRyMTo6YmV0YWw7CisKK3VzaW5nIHN0ZDo6dHIxOjpjb21wX2VsbGludF8xZjsKK3VzaW5nIHN0ZDo6dHIxOjpjb21wX2VsbGludF8xOwordXNpbmcgc3RkOjp0cjE6OmNvbXBfZWxsaW50XzFsOworCit1c2luZyBzdGQ6OnRyMTo6Y29tcF9lbGxpbnRfMmY7Cit1c2luZyBzdGQ6OnRyMTo6Y29tcF9lbGxpbnRfMjsKK3VzaW5nIHN0ZDo6dHIxOjpjb21wX2VsbGludF8ybDsKKwordXNpbmcgc3RkOjp0cjE6OmNvbXBfZWxsaW50XzNmOwordXNpbmcgc3RkOjp0cjE6OmNvbXBfZWxsaW50XzM7Cit1c2luZyBzdGQ6OnRyMTo6Y29tcF9lbGxpbnRfM2w7CisKK3VzaW5nIHN0ZDo6dHIxOjpjb25mX2h5cGVyZ2Y7Cit1c2luZyBzdGQ6OnRyMTo6Y29uZl9oeXBlcmc7Cit1c2luZyBzdGQ6OnRyMTo6Y29uZl9oeXBlcmdsOworCit1c2luZyBzdGQ6OnRyMTo6Y3lsX2Jlc3NlbF9pZjsKK3VzaW5nIHN0ZDo6dHIxOjpjeWxfYmVzc2VsX2k7Cit1c2luZyBzdGQ6OnRyMTo6Y3lsX2Jlc3NlbF9pbDsKKwordXNpbmcgc3RkOjp0cjE6OmN5bF9iZXNzZWxfamY7Cit1c2luZyBzdGQ6OnRyMTo6Y3lsX2Jlc3NlbF9qOwordXNpbmcgc3RkOjp0cjE6OmN5bF9iZXNzZWxfamw7CisKK3VzaW5nIHN0ZDo6dHIxOjpjeWxfYmVzc2VsX2tmOwordXNpbmcgc3RkOjp0cjE6OmN5bF9iZXNzZWxfazsKK3VzaW5nIHN0ZDo6dHIxOjpjeWxfYmVzc2VsX2tsOworCit1c2luZyBzdGQ6OnRyMTo6Y3lsX25ldW1hbm5mOwordXNpbmcgc3RkOjp0cjE6OmN5bF9uZXVtYW5uOwordXNpbmcgc3RkOjp0cjE6OmN5bF9uZXVtYW5ubDsKKwordXNpbmcgc3RkOjp0cjE6OmVsbGludF8xZjsKK3VzaW5nIHN0ZDo6dHIxOjplbGxpbnRfMTsKK3VzaW5nIHN0ZDo6dHIxOjplbGxpbnRfMWw7CisKK3VzaW5nIHN0ZDo6dHIxOjplbGxpbnRfMmY7Cit1c2luZyBzdGQ6OnRyMTo6ZWxsaW50XzI7Cit1c2luZyBzdGQ6OnRyMTo6ZWxsaW50XzJsOworCit1c2luZyBzdGQ6OnRyMTo6ZWxsaW50XzNmOwordXNpbmcgc3RkOjp0cjE6OmVsbGludF8zOwordXNpbmcgc3RkOjp0cjE6OmVsbGludF8zbDsKKwordXNpbmcgc3RkOjp0cjE6OmV4cGludGY7Cit1c2luZyBzdGQ6OnRyMTo6ZXhwaW50OwordXNpbmcgc3RkOjp0cjE6OmV4cGludGw7CisKK3VzaW5nIHN0ZDo6dHIxOjpoZXJtaXRlZjsKK3VzaW5nIHN0ZDo6dHIxOjpoZXJtaXRlOwordXNpbmcgc3RkOjp0cjE6Omhlcm1pdGVsOworCit1c2luZyBzdGQ6OnRyMTo6aHlwZXJnZjsKK3VzaW5nIHN0ZDo6dHIxOjpoeXBlcmc7Cit1c2luZyBzdGQ6OnRyMTo6aHlwZXJnbDsKKwordXNpbmcgc3RkOjp0cjE6OmxhZ3VlcnJlZjsKK3VzaW5nIHN0ZDo6dHIxOjpsYWd1ZXJyZTsKK3VzaW5nIHN0ZDo6dHIxOjpsYWd1ZXJyZWw7CisKK3VzaW5nIHN0ZDo6dHIxOjpsZWdlbmRyZWY7Cit1c2luZyBzdGQ6OnRyMTo6bGVnZW5kcmU7Cit1c2luZyBzdGQ6OnRyMTo6bGVnZW5kcmVsOworCit1c2luZyBzdGQ6OnRyMTo6cmllbWFubl96ZXRhZjsKK3VzaW5nIHN0ZDo6dHIxOjpyaWVtYW5uX3pldGE7Cit1c2luZyBzdGQ6OnRyMTo6cmllbWFubl96ZXRhbDsKKwordXNpbmcgc3RkOjp0cjE6OnNwaF9iZXNzZWxmOwordXNpbmcgc3RkOjp0cjE6OnNwaF9iZXNzZWw7Cit1c2luZyBzdGQ6OnRyMTo6c3BoX2Jlc3NlbGw7CisKK3VzaW5nIHN0ZDo6dHIxOjpzcGhfbGVnZW5kcmVmOwordXNpbmcgc3RkOjp0cjE6OnNwaF9sZWdlbmRyZTsKK3VzaW5nIHN0ZDo6dHIxOjpzcGhfbGVnZW5kcmVsOworCit1c2luZyBzdGQ6OnRyMTo6c3BoX25ldW1hbm5mOwordXNpbmcgc3RkOjp0cjE6OnNwaF9uZXVtYW5uOwordXNpbmcgc3RkOjp0cjE6OnNwaF9uZXVtYW5ubDsKKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9NQVRIX0gKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL21lbW9yeSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL21lbW9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjRjZTUxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvbWVtb3J5CkBAIC0wLDAgKzEsNTIgQEAKKy8vIDx0cjEvbWVtb3J5PiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqIEBmaWxlIHRyMS9tZW1vcnkKKyAqIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9NRU1PUlkKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX01FTU9SWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIGRlZmluZWQoX0dMSUJDWFhfSU5DTFVERV9BU19DWFgxMSkKKyMgIGVycm9yIFRSMSBoZWFkZXIgY2Fubm90IGJlIGluY2x1ZGVkIGZyb20gQysrMTEgaGVhZGVyCisjZW5kaWYKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxleGNlcHRpb24+ICAgICAgICAJLy8gc3RkOjpleGNlcHRpb24KKyNpbmNsdWRlIDx0eXBlaW5mbz4gICAgICAgICAJLy8gc3RkOjp0eXBlX2luZm8gaW4gZ2V0X2RlbGV0ZXIKKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPiAgLy8gc3RkOjpzd2FwCisjaW5jbHVkZSA8aW9zZndkPiAgICAgICAgICAgCS8vIHN0ZDo6YmFzaWNfb3N0cmVhbQorI2luY2x1ZGUgPGV4dC9hdG9taWNpdHkuaD4KKyNpbmNsdWRlIDxleHQvY29uY3VycmVuY2UuaD4KKyNpbmNsdWRlIDxiaXRzL2Z1bmN0ZXhjZXB0Lmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gCS8vIHN0ZDo6bGVzcworI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaW5jbHVkZSA8dHIxL3R5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHRyMS9zaGFyZWRfcHRyLmg+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfTUVNT1JZCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9tb2RpZmllZF9iZXNzZWxfZnVuYy50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9tb2RpZmllZF9iZXNzZWxfZnVuYy50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxZmI5MAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL21vZGlmaWVkX2Jlc3NlbF9mdW5jLnRjYwpAQCAtMCwwICsxLDQzNSBAQAorLy8gU3BlY2lhbCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvbW9kaWZpZWRfYmVzc2VsX2Z1bmMudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dHIxL2NtYXRofQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyIFRSMTogNS4yICBTcGVjaWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBFZHdhcmQgU21pdGgtUm93bGFuZC4KKy8vCisvLyBSZWZlcmVuY2VzOgorLy8gICAoMSkgSGFuZGJvb2sgb2YgTWF0aGVtYXRpY2FsIEZ1bmN0aW9ucywKKy8vICAgICAgIEVkLiBNaWx0b24gQWJyYW1vd2l0eiBhbmQgSXJlbmUgQS4gU3RlZ3VuLAorLy8gICAgICAgRG92ZXIgUHVibGljYXRpb25zLAorLy8gICAgICAgU2VjdGlvbiA5LCBwcC4gMzU1LTQzNCwgU2VjdGlvbiAxMCBwcC4gNDM1LTQ3OAorLy8gICAoMikgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKy8vICAgKDMpIE51bWVyaWNhbCBSZWNpcGVzIGluIEMsIGJ5IFcuIEguIFByZXNzLCBTLiBBLiBUZXVrb2xza3ksCisvLyAgICAgICBXLiBULiBWZXR0ZXJsaW5nLCBCLiBQLiBGbGFubmVyeSwgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MgKDE5OTIpLAorLy8gICAgICAgMm5kIGVkLCBwcC4gMjQ2LTI0OS4KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfTU9ESUZJRURfQkVTU0VMX0ZVTkNfVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9NT0RJRklFRF9CRVNTRUxfRlVOQ19UQ0MgMQorCisjaW5jbHVkZSAic3BlY2lhbF9mdW5jdGlvbl91dGlsLmgiCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgQ29tcHV0ZSB0aGUgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9ucyBAZiQgSV9cbnUoeCkgQGYkIGFuZAorICAgICAqICAgICAgICAgICBAZiQgS19cbnUoeCkgQGYkIGFuZCB0aGVpciBmaXJzdCBkZXJpdmF0aXZlcworICAgICAqICAgICAgICAgICBAZiQgSSdfXG51KHgpIEBmJCBhbmQgQGYkIEsnX1xudSh4KSBAZiQgcmVzcGVjdGl2ZWx5LgorICAgICAqICAgICAgICAgICBUaGVzZSBmb3VyIGZ1bmN0aW9ucyBhcmUgY29tcHV0ZWQgdG9nZXRoZXIgZm9yIG51bWVyaWNhbAorICAgICAqICAgICAgICAgICBzdGFiaWxpdHkuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19udSAgVGhlIG9yZGVyIG9mIHRoZSBCZXNzZWwgZnVuY3Rpb25zLgorICAgICAqICAgQHBhcmFtICBfX3ggICBUaGUgYXJndW1lbnQgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbnMuCisgICAgICogICBAcGFyYW0gIF9fSW51ICBUaGUgb3V0cHV0IHJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX0tudSAgVGhlIG91dHB1dCBpcnJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX0lwbnUgIFRoZSBvdXRwdXQgZGVyaXZhdGl2ZSBvZiB0aGUgcmVndWxhcgorICAgICAqICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19LcG51ICBUaGUgb3V0cHV0IGRlcml2YXRpdmUgb2YgdGhlIGlycmVndWxhcgorICAgICAqICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX2Jlc3NlbF9payhfVHAgX19udSwgX1RwIF9feCwKKyAgICAgICAgICAgICAgICBfVHAgJiBfX0ludSwgX1RwICYgX19LbnUsIF9UcCAmIF9fSXBudSwgX1RwICYgX19LcG51KQorICAgIHsKKyAgICAgIGlmIChfX3ggPT0gX1RwKDApKQorICAgICAgICB7CisgICAgICAgICAgaWYgKF9fbnUgPT0gX1RwKDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX0ludSA9IF9UcCgxKTsKKyAgICAgICAgICAgICAgX19JcG51ID0gX1RwKDApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKF9fbnUgPT0gX1RwKDEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX0ludSA9IF9UcCgwKTsKKyAgICAgICAgICAgICAgX19JcG51ID0gX1RwKDAuNUwpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgX19JbnUgPSBfVHAoMCk7CisgICAgICAgICAgICAgIF9fSXBudSA9IF9UcCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBfX0tudSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6aW5maW5pdHkoKTsKKyAgICAgICAgICBfX0twbnUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBjb25zdCBfVHAgX19lcHMgPSBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IF9UcCBfX2ZwX21pbiA9IF9UcCgxMCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OmVwc2lsb24oKTsKKyAgICAgIGNvbnN0IGludCBfX21heF9pdGVyID0gMTUwMDA7CisgICAgICBjb25zdCBfVHAgX194X21pbiA9IF9UcCgyKTsKKworICAgICAgY29uc3QgaW50IF9fbmwgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbnUgKyBfVHAoMC41TCkpOworCisgICAgICBjb25zdCBfVHAgX19tdSA9IF9fbnUgLSBfX25sOworICAgICAgY29uc3QgX1RwIF9fbXUyID0gX19tdSAqIF9fbXU7CisgICAgICBjb25zdCBfVHAgX194aSA9IF9UcCgxKSAvIF9feDsKKyAgICAgIGNvbnN0IF9UcCBfX3hpMiA9IF9UcCgyKSAqIF9feGk7CisgICAgICBfVHAgX19oID0gX19udSAqIF9feGk7CisgICAgICBpZiAoIF9faCA8IF9fZnBfbWluICkKKyAgICAgICAgX19oID0gX19mcF9taW47CisgICAgICBfVHAgX19iID0gX194aTIgKiBfX251OworICAgICAgX1RwIF9fZCA9IF9UcCgwKTsKKyAgICAgIF9UcCBfX2MgPSBfX2g7CisgICAgICBpbnQgX19pOworICAgICAgZm9yICggX19pID0gMTsgX19pIDw9IF9fbWF4X2l0ZXI7ICsrX19pICkKKyAgICAgICAgeworICAgICAgICAgIF9fYiArPSBfX3hpMjsKKyAgICAgICAgICBfX2QgPSBfVHAoMSkgLyAoX19iICsgX19kKTsKKyAgICAgICAgICBfX2MgPSBfX2IgKyBfVHAoMSkgLyBfX2M7CisgICAgICAgICAgY29uc3QgX1RwIF9fZGVsID0gX19jICogX19kOworICAgICAgICAgIF9faCAqPSBfX2RlbDsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX19kZWwgLSBfVHAoMSkpIDwgX19lcHMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgaWYgKF9faSA+IF9fbWF4X2l0ZXIpCisgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiQXJndW1lbnQgeCB0b28gbGFyZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fYmVzc2VsX2lrOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJ5IGFzeW1wdG90aWMgZXhwYW5zaW9uLiIpKTsKKyAgICAgIF9UcCBfX0ludWwgPSBfX2ZwX21pbjsKKyAgICAgIF9UcCBfX0lwbnVsID0gX19oICogX19JbnVsOworICAgICAgX1RwIF9fSW51bDEgPSBfX0ludWw7CisgICAgICBfVHAgX19JcG51MSA9IF9fSXBudWw7CisgICAgICBfVHAgX19mYWN0ID0gX19udSAqIF9feGk7CisgICAgICBmb3IgKGludCBfX2wgPSBfX25sOyBfX2wgPj0gMTsgLS1fX2wpCisgICAgICAgIHsKKyAgICAgICAgICBjb25zdCBfVHAgX19JbnV0ZW1wID0gX19mYWN0ICogX19JbnVsICsgX19JcG51bDsKKyAgICAgICAgICBfX2ZhY3QgLT0gX194aTsKKyAgICAgICAgICBfX0lwbnVsID0gX19mYWN0ICogX19JbnV0ZW1wICsgX19JbnVsOworICAgICAgICAgIF9fSW51bCA9IF9fSW51dGVtcDsKKyAgICAgICAgfQorICAgICAgX1RwIF9fZiA9IF9fSXBudWwgLyBfX0ludWw7CisgICAgICBfVHAgX19LbXUsIF9fS251MTsKKyAgICAgIGlmIChfX3ggPCBfX3hfbWluKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9feDIgPSBfX3ggLyBfVHAoMik7CisgICAgICAgICAgY29uc3QgX1RwIF9fcGltdSA9IF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpICogX19tdTsKKyAgICAgICAgICBjb25zdCBfVHAgX19mYWN0ID0gKHN0ZDo6YWJzKF9fcGltdSkgPCBfX2VwcworICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX1RwKDEpIDogX19waW11IC8gc3RkOjpzaW4oX19waW11KSk7CisgICAgICAgICAgX1RwIF9fZCA9IC1zdGQ6OmxvZyhfX3gyKTsKKyAgICAgICAgICBfVHAgX19lID0gX19tdSAqIF9fZDsKKyAgICAgICAgICBjb25zdCBfVHAgX19mYWN0MiA9IChzdGQ6OmFicyhfX2UpIDwgX19lcHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9UcCgxKSA6IHN0ZDo6c2luaChfX2UpIC8gX19lKTsKKyAgICAgICAgICBfVHAgX19nYW0xLCBfX2dhbTIsIF9fZ2FtcGwsIF9fZ2FtbWk7CisgICAgICAgICAgX19nYW1tYV90ZW1tZShfX211LCBfX2dhbTEsIF9fZ2FtMiwgX19nYW1wbCwgX19nYW1taSk7CisgICAgICAgICAgX1RwIF9fZmYgPSBfX2ZhY3QKKyAgICAgICAgICAgICAgICAgICAqIChfX2dhbTEgKiBzdGQ6OmNvc2goX19lKSArIF9fZ2FtMiAqIF9fZmFjdDIgKiBfX2QpOworICAgICAgICAgIF9UcCBfX3N1bSA9IF9fZmY7CisgICAgICAgICAgX19lID0gc3RkOjpleHAoX19lKTsKKyAgICAgICAgICBfVHAgX19wID0gX19lIC8gKF9UcCgyKSAqIF9fZ2FtcGwpOworICAgICAgICAgIF9UcCBfX3EgPSBfVHAoMSkgLyAoX1RwKDIpICogX19lICogX19nYW1taSk7CisgICAgICAgICAgX1RwIF9fYyA9IF9UcCgxKTsKKyAgICAgICAgICBfX2QgPSBfX3gyICogX194MjsKKyAgICAgICAgICBfVHAgX19zdW0xID0gX19wOworICAgICAgICAgIGludCBfX2k7CisgICAgICAgICAgZm9yIChfX2kgPSAxOyBfX2kgPD0gX19tYXhfaXRlcjsgKytfX2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIF9fZmYgPSAoX19pICogX19mZiArIF9fcCArIF9fcSkgLyAoX19pICogX19pIC0gX19tdTIpOworICAgICAgICAgICAgICBfX2MgKj0gX19kIC8gX19pOworICAgICAgICAgICAgICBfX3AgLz0gX19pIC0gX19tdTsKKyAgICAgICAgICAgICAgX19xIC89IF9faSArIF9fbXU7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbCA9IF9fYyAqIF9fZmY7CisgICAgICAgICAgICAgIF9fc3VtICs9IF9fZGVsOyAKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fZGVsMSA9IF9fYyAqIChfX3AgLSBfX2kgKiBfX2ZmKTsKKyAgICAgICAgICAgICAgX19zdW0xICs9IF9fZGVsMTsKKyAgICAgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fZGVsKSA8IF9fZXBzICogc3RkOjphYnMoX19zdW0pKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX2kgPiBfX21heF9pdGVyKQorICAgICAgICAgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJCZXNzZWwgayBzZXJpZXMgZmFpbGVkIHRvIGNvbnZlcmdlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19iZXNzZWxfaWsuIikpOworICAgICAgICAgIF9fS211ID0gX19zdW07CisgICAgICAgICAgX19LbnUxID0gX19zdW0xICogX194aTI7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX2IgPSBfVHAoMikgKiAoX1RwKDEpICsgX194KTsKKyAgICAgICAgICBfVHAgX19kID0gX1RwKDEpIC8gX19iOworICAgICAgICAgIF9UcCBfX2RlbGggPSBfX2Q7CisgICAgICAgICAgX1RwIF9faCA9IF9fZGVsaDsKKyAgICAgICAgICBfVHAgX19xMSA9IF9UcCgwKTsKKyAgICAgICAgICBfVHAgX19xMiA9IF9UcCgxKTsKKyAgICAgICAgICBfVHAgX19hMSA9IF9UcCgwLjI1TCkgLSBfX211MjsKKyAgICAgICAgICBfVHAgX19xID0gX19jID0gX19hMTsKKyAgICAgICAgICBfVHAgX19hID0gLV9fYTE7CisgICAgICAgICAgX1RwIF9fcyA9IF9UcCgxKSArIF9fcSAqIF9fZGVsaDsKKyAgICAgICAgICBpbnQgX19pOworICAgICAgICAgIGZvciAoX19pID0gMjsgX19pIDw9IF9fbWF4X2l0ZXI7ICsrX19pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfX2EgLT0gMiAqIChfX2kgLSAxKTsKKyAgICAgICAgICAgICAgX19jID0gLV9fYSAqIF9fYyAvIF9faTsKKyAgICAgICAgICAgICAgY29uc3QgX1RwIF9fcW5ldyA9IChfX3ExIC0gX19iICogX19xMikgLyBfX2E7CisgICAgICAgICAgICAgIF9fcTEgPSBfX3EyOworICAgICAgICAgICAgICBfX3EyID0gX19xbmV3OworICAgICAgICAgICAgICBfX3EgKz0gX19jICogX19xbmV3OworICAgICAgICAgICAgICBfX2IgKz0gX1RwKDIpOworICAgICAgICAgICAgICBfX2QgPSBfVHAoMSkgLyAoX19iICsgX19hICogX19kKTsKKyAgICAgICAgICAgICAgX19kZWxoID0gKF9fYiAqIF9fZCAtIF9UcCgxKSkgKiBfX2RlbGg7CisgICAgICAgICAgICAgIF9faCArPSBfX2RlbGg7CisgICAgICAgICAgICAgIGNvbnN0IF9UcCBfX2RlbHMgPSBfX3EgKiBfX2RlbGg7CisgICAgICAgICAgICAgIF9fcyArPSBfX2RlbHM7CisgICAgICAgICAgICAgIGlmICggc3RkOjphYnMoX19kZWxzIC8gX19zKSA8IF9fZXBzICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoX19pID4gX19tYXhfaXRlcikKKyAgICAgICAgICAgIHN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigiU3RlZWQncyBtZXRob2QgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19iZXNzZWxfaWsuIikpOworICAgICAgICAgIF9faCA9IF9fYTEgKiBfX2g7CisgICAgICAgICAgX19LbXUgPSBzdGQ6OnNxcnQoX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkgLyAoX1RwKDIpICogX194KSkKKyAgICAgICAgICAgICAgICAqIHN0ZDo6ZXhwKC1fX3gpIC8gX19zOworICAgICAgICAgIF9fS251MSA9IF9fS211ICogKF9fbXUgKyBfX3ggKyBfVHAoMC41TCkgLSBfX2gpICogX194aTsKKyAgICAgICAgfQorCisgICAgICBfVHAgX19LcG11ID0gX19tdSAqIF9feGkgKiBfX0ttdSAtIF9fS251MTsKKyAgICAgIF9UcCBfX0ludW11ID0gX194aSAvIChfX2YgKiBfX0ttdSAtIF9fS3BtdSk7CisgICAgICBfX0ludSA9IF9fSW51bXUgKiBfX0ludWwxIC8gX19JbnVsOworICAgICAgX19JcG51ID0gX19JbnVtdSAqIF9fSXBudTEgLyBfX0ludWw7CisgICAgICBmb3IgKCBfX2kgPSAxOyBfX2kgPD0gX19ubDsgKytfX2kgKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fS251dGVtcCA9IChfX211ICsgX19pKSAqIF9feGkyICogX19LbnUxICsgX19LbXU7CisgICAgICAgICAgX19LbXUgPSBfX0tudTE7CisgICAgICAgICAgX19LbnUxID0gX19LbnV0ZW1wOworICAgICAgICB9CisgICAgICBfX0tudSA9IF9fS211OworICAgICAgX19LcG51ID0gX19udSAqIF9feGkgKiBfX0ttdSAtIF9fS251MTsKKyAgCisgICAgICByZXR1cm47CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSByZWd1bGFyIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbiBvZiBvcmRlcgorICAgICAqICAgICAgICAgICBcZiQgXG51IFxmJDogXGYkIElfe1xudX0oeCkgXGYkLgorICAgICAqCisgICAgICogICBUaGUgcmVndWxhciBtb2RpZmllZCBjeWxpbmRyaWNhbCBCZXNzZWwgZnVuY3Rpb24gaXM6CisgICAgICogICBAZlsKKyAgICAgKiAgICBJX3tcbnV9KHgpID0gXHN1bV97az0wfV57XGluZnR5fQorICAgICAqICAgICAgICAgICAgICBcZnJhY3soeC8yKV57XG51ICsgMmt9fXtrIVxHYW1tYShcbnUraysxKX0KKyAgICAgKiAgIEBmXQorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBvcmRlciBvZiB0aGUgcmVndWxhciBtb2RpZmllZCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9feCAgIFRoZSBhcmd1bWVudCBvZiB0aGUgcmVndWxhciBtb2RpZmllZCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuICBUaGUgb3V0cHV0IHJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2N5bF9iZXNzZWxfaShfVHAgX19udSwgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX19udSA8IF9UcCgwKSB8fCBfX3ggPCBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19jeWxfYmVzc2VsX2kuIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX194ICogX194IDwgX1RwKDEwKSAqIChfX251ICsgX1RwKDEpKSkKKyAgICAgICAgcmV0dXJuIF9fY3lsX2Jlc3NlbF9pal9zZXJpZXMoX19udSwgX194LCArX1RwKDEpLCAyMDApOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSV9udSwgX19LX251LCBfX0lwX251LCBfX0twX251OworICAgICAgICAgIF9fYmVzc2VsX2lrKF9fbnUsIF9feCwgX19JX251LCBfX0tfbnUsIF9fSXBfbnUsIF9fS3BfbnUpOworICAgICAgICAgIHJldHVybiBfX0lfbnU7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBSZXR1cm4gdGhlIGlycmVndWxhciBtb2RpZmllZCBCZXNzZWwgZnVuY3Rpb24KKyAgICAgKiAgICAgICAgICAgXGYkIEtfe1xudX0oeCkgXGYkIG9mIG9yZGVyIFxmJCBcbnUgXGYkLgorICAgICAqCisgICAgICogICBUaGUgaXJyZWd1bGFyIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICBLX3tcbnV9KHgpID0gXGZyYWN7XHBpfXsyfQorICAgICAqICAgICAgICAgICAgICAgICAgIFxmcmFje0lfey1cbnV9KHgpIC0gSV97XG51fSh4KX17XHNpbiBcbnVccGl9CisgICAgICogICBAZl0KKyAgICAgKiAgIHdoZXJlIGZvciBpbnRlZ3JhbCBcZiQgXG51ID0gbiBcZiQgYSBsaW1pdCBpcyB0YWtlbjoKKyAgICAgKiAgIFxmJCBsaW1fe1xudSBcdG8gbn0gXGYkLgorICAgICAqCisgICAgICogICBAcGFyYW0gIF9fbnUgIFRoZSBvcmRlciBvZiB0aGUgaXJyZWd1bGFyIG1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICAgVGhlIGFyZ3VtZW50IG9mIHRoZSBpcnJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiAgVGhlIG91dHB1dCBpcnJlZ3VsYXIgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX2N5bF9iZXNzZWxfayhfVHAgX19udSwgX1RwIF9feCkKKyAgICB7CisgICAgICBpZiAoX19udSA8IF9UcCgwKSB8fCBfX3ggPCBfVHAoMCkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gX19jeWxfYmVzc2VsX2suIikpOworICAgICAgZWxzZSBpZiAoX19pc25hbihfX251KSB8fCBfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSV9udSwgX19LX251LCBfX0lwX251LCBfX0twX251OworICAgICAgICAgIF9fYmVzc2VsX2lrKF9fbnUsIF9feCwgX19JX251LCBfX0tfbnUsIF9fSXBfbnUsIF9fS3BfbnUpOworICAgICAgICAgIHJldHVybiBfX0tfbnU7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBDb21wdXRlIHRoZSBzcGhlcmljYWwgbW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9ucworICAgICAqICAgICAgICAgICBAZiQgaV9uKHgpIEBmJCBhbmQgQGYkIGtfbih4KSBAZiQgYW5kIHRoZWlyIGZpcnN0CisgICAgICogICAgICAgICAgIGRlcml2YXRpdmVzIEBmJCBpJ19uKHgpIEBmJCBhbmQgQGYkIGsnX24oeCkgQGYkCisgICAgICogICAgICAgICAgIHJlc3BlY3RpdmVseS4KKyAgICAgKgorICAgICAqICAgQHBhcmFtICBfX24gIFRoZSBvcmRlciBvZiB0aGUgbW9kaWZpZWQgc3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX194ICBUaGUgYXJndW1lbnQgb2YgdGhlIG1vZGlmaWVkIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9faV9uICBUaGUgb3V0cHV0IHJlZ3VsYXIgbW9kaWZpZWQgc3BoZXJpY2FsIEJlc3NlbCBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSAgX19rX24gIFRoZSBvdXRwdXQgaXJyZWd1bGFyIG1vZGlmaWVkIHNwaGVyaWNhbAorICAgICAqICAgICAgICAgICAgICAgICAgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX2lwX24gIFRoZSBvdXRwdXQgZGVyaXZhdGl2ZSBvZiB0aGUgcmVndWxhciBtb2RpZmllZAorICAgICAqICAgICAgICAgICAgICAgICAgIHNwaGVyaWNhbCBCZXNzZWwgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9fa3BfbiAgVGhlIG91dHB1dCBkZXJpdmF0aXZlIG9mIHRoZSBpcnJlZ3VsYXIgbW9kaWZpZWQKKyAgICAgKiAgICAgICAgICAgICAgICAgICBzcGhlcmljYWwgQmVzc2VsIGZ1bmN0aW9uLgorICAgICAqLworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIF9fc3BoX2Jlc3NlbF9payh1bnNpZ25lZCBpbnQgX19uLCBfVHAgX194LAorICAgICAgICAgICAgICAgICAgICBfVHAgJiBfX2lfbiwgX1RwICYgX19rX24sIF9UcCAmIF9faXBfbiwgX1RwICYgX19rcF9uKQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX251ID0gX1RwKF9fbikgKyBfVHAoMC41TCk7CisKKyAgICAgIF9UcCBfX0lfbnUsIF9fSXBfbnUsIF9fS19udSwgX19LcF9udTsKKyAgICAgIF9fYmVzc2VsX2lrKF9fbnUsIF9feCwgX19JX251LCBfX0tfbnUsIF9fSXBfbnUsIF9fS3BfbnUpOworCisgICAgICBjb25zdCBfVHAgX19mYWN0b3IgPSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fc3FydHBpbzIoKQorICAgICAgICAgICAgICAgICAgICAgICAgIC8gc3RkOjpzcXJ0KF9feCk7CisKKyAgICAgIF9faV9uID0gX19mYWN0b3IgKiBfX0lfbnU7CisgICAgICBfX2tfbiA9IF9fZmFjdG9yICogX19LX251OworICAgICAgX19pcF9uID0gX19mYWN0b3IgKiBfX0lwX251IC0gX19pX24gLyAoX1RwKDIpICogX194KTsKKyAgICAgIF9fa3BfbiA9IF9fZmFjdG9yICogX19LcF9udSAtIF9fa19uIC8gKF9UcCgyKSAqIF9feCk7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBDb21wdXRlIHRoZSBBaXJ5IGZ1bmN0aW9ucworICAgICAqICAgICAgICAgICBAZiQgQWkoeCkgQGYkIGFuZCBAZiQgQmkoeCkgQGYkIGFuZCB0aGVpciBmaXJzdAorICAgICAqICAgICAgICAgICBkZXJpdmF0aXZlcyBAZiQgQWknKHgpIEBmJCBhbmQgQGYkIEJpKHgpIEBmJAorICAgICAqICAgICAgICAgICByZXNwZWN0aXZlbHkuCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSAgX19uICBUaGUgb3JkZXIgb2YgdGhlIEFpcnkgZnVuY3Rpb25zLgorICAgICAqICAgQHBhcmFtICBfX3ggIFRoZSBhcmd1bWVudCBvZiB0aGUgQWlyeSBmdW5jdGlvbnMuCisgICAgICogICBAcGFyYW0gIF9faV9uICBUaGUgb3V0cHV0IEFpcnkgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9fa19uICBUaGUgb3V0cHV0IEFpcnkgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gIF9faXBfbiAgVGhlIG91dHB1dCBkZXJpdmF0aXZlIG9mIHRoZSBBaXJ5IGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtICBfX2twX24gIFRoZSBvdXRwdXQgZGVyaXZhdGl2ZSBvZiB0aGUgQWlyeSBmdW5jdGlvbi4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPgorICAgIHZvaWQKKyAgICBfX2FpcnkoX1RwIF9feCwgX1RwICYgX19BaSwgX1RwICYgX19CaSwgX1RwICYgX19BaXAsIF9UcCAmIF9fQmlwKQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2Fic3ggPSBzdGQ6OmFicyhfX3gpOworICAgICAgY29uc3QgX1RwIF9fcm9vdHggPSBzdGQ6OnNxcnQoX19hYnN4KTsKKyAgICAgIGNvbnN0IF9UcCBfX3ogPSBfVHAoMikgKiBfX2Fic3ggKiBfX3Jvb3R4IC8gX1RwKDMpOworCisgICAgICBpZiAoX19pc25hbihfX3gpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjpxdWlldF9OYU4oKTsKKyAgICAgIGVsc2UgaWYgKF9feCA+IF9UcCgwKSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX0lfbnUsIF9fSXBfbnUsIF9fS19udSwgX19LcF9udTsKKworICAgICAgICAgIF9fYmVzc2VsX2lrKF9UcCgxKSAvIF9UcCgzKSwgX196LCBfX0lfbnUsIF9fS19udSwgX19JcF9udSwgX19LcF9udSk7CisgICAgICAgICAgX19BaSA9IF9fcm9vdHggKiBfX0tfbnUKKyAgICAgICAgICAgICAgIC8gKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpCisgICAgICAgICAgICAgICAgKiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSk7CisgICAgICAgICAgX19CaSA9IF9fcm9vdHggKiAoX19LX251IC8gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkKKyAgICAgICAgICAgICAgICAgKyBfVHAoMikgKiBfX0lfbnUgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fc3FydDMoKSk7CisKKyAgICAgICAgICBfX2Jlc3NlbF9payhfVHAoMikgLyBfVHAoMyksIF9feiwgX19JX251LCBfX0tfbnUsIF9fSXBfbnUsIF9fS3BfbnUpOworICAgICAgICAgIF9fQWlwID0gLV9feCAqIF9fS19udQorICAgICAgICAgICAgICAgIC8gKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpCisgICAgICAgICAgICAgICAgICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkpOworICAgICAgICAgIF9fQmlwID0gX194ICogKF9fS19udSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpCisgICAgICAgICAgICAgICAgICAgICAgKyBfVHAoMikgKiBfX0lfbnUKKyAgICAgICAgICAgICAgICAgICAgICAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoX194IDwgX1RwKDApKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fSl9udSwgX19KcF9udSwgX19OX251LCBfX05wX251OworCisgICAgICAgICAgX19iZXNzZWxfam4oX1RwKDEpIC8gX1RwKDMpLCBfX3osIF9fSl9udSwgX19OX251LCBfX0pwX251LCBfX05wX251KTsKKyAgICAgICAgICBfX0FpID0gX19yb290eCAqIChfX0pfbnUKKyAgICAgICAgICAgICAgICAgICAgLSBfX05fbnUgLyBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fc3FydDMoKSkgLyBfVHAoMik7CisgICAgICAgICAgX19CaSA9IC1fX3Jvb3R4ICogKF9fTl9udQorICAgICAgICAgICAgICAgICAgICArIF9fSl9udSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpKSAvIF9UcCgyKTsKKworICAgICAgICAgIF9fYmVzc2VsX2puKF9UcCgyKSAvIF9UcCgzKSwgX196LCBfX0pfbnUsIF9fTl9udSwgX19KcF9udSwgX19OcF9udSk7CisgICAgICAgICAgX19BaXAgPSBfX2Fic3ggKiAoX19OX251IC8gX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3NxcnQzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX0pfbnUpIC8gX1RwKDIpOworICAgICAgICAgIF9fQmlwID0gX19hYnN4ICogKF9fSl9udSAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19zcXJ0MygpCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19OX251KSAvIF9UcCgyKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLy8gIFJlZmVyZW5jZToKKyAgICAgICAgICAvLyAgICBBYnJhbW93aXR6ICYgU3RlZ3VuLCBwYWdlIDQ0NiBzZWN0aW9uIDEwLjQuNCBvbiBBaXJ5IGZ1bmN0aW9ucy4KKyAgICAgICAgICAvLyAgVGhlIG51bWJlciBpcyBBaSgwKSA9IDNeey0yLzN9L1xHYW1tYSgyLzMpLgorICAgICAgICAgIF9fQWkgPSBfVHAoMC4zNTUwMjgwNTM4ODc4MTcyMzkyNkwpOworICAgICAgICAgIF9fQmkgPSBfX0FpICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3NxcnQzKCk7CisKKyAgICAgICAgICAvLyAgUmVmZXJlbmNlOgorICAgICAgICAgIC8vICAgIEFicmFtb3dpdHogJiBTdGVndW4sIHBhZ2UgNDQ2IHNlY3Rpb24gMTAuNC41IG9uIEFpcnkgZnVuY3Rpb25zLgorICAgICAgICAgIC8vICBUaGUgbnVtYmVyIGlzIEFpJygwKSA9IC0zXnstMS8zfS9cR2FtbWEoMS8zKS4KKyAgICAgICAgICBfX0FpcCA9IC1fVHAoMC4yNTg4MTk0MDM3OTI4MDY3OTg0MEwpOworICAgICAgICAgIF9fQmlwID0gLV9fQWlwICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3NxcnQzKCk7CisgICAgICAgIH0KKworICAgICAgcmV0dXJuOworICAgIH0KKworICBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfTU9ESUZJRURfQkVTU0VMX0ZVTkNfVENDCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9wb2x5X2hlcm1pdGUudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvcG9seV9oZXJtaXRlLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjA1Zjc5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvcG9seV9oZXJtaXRlLnRjYwpAQCAtMCwwICsxLDEyNCBAQAorLy8gU3BlY2lhbCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvcG9seV9oZXJtaXRlLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3RyMS9jbWF0aH0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MiBUUjE6IDUuMiAgU3BlY2lhbCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgRWR3YXJkIFNtaXRoLVJvd2xhbmQgYmFzZWQgb246CisvLyAgICgxKSBIYW5kYm9vayBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLAorLy8gICAgICAgRWQuIE1pbHRvbiBBYnJhbW93aXR6IGFuZCBJcmVuZSBBLiBTdGVndW4sCisvLyAgICAgICBEb3ZlciBQdWJsaWNhdGlvbnMsIFNlY3Rpb24gMjIgcHAuIDc3My04MDIKKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfUE9MWV9IRVJNSVRFX1RDQworI2RlZmluZSBfR0xJQkNYWF9UUjFfUE9MWV9IRVJNSVRFX1RDQyAxCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgSGVybWl0ZSBwb2x5bm9taWFsCisgICAgICogICAgICAgICAgb2Ygb3JkZXIgbjogXGYkIEhfbih4KSBcZiQgYnkgcmVjdXJzaW9uIG9uIG4uCisgICAgICogCisgICAgICogICBUaGUgSGVybWl0ZSBwb2x5bm9taWFsIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgSF9uKHgpID0gKC0xKV5uIGVee3heMn0gXGZyYWN7ZF5ufXtkeF5ufSBlXnsteF4yfQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX24gVGhlIG9yZGVyIG9mIHRoZSBIZXJtaXRlIHBvbHlub21pYWwuCisgICAgICogICBAcGFyYW0gX194IFRoZSBhcmd1bWVudCBvZiB0aGUgSGVybWl0ZSBwb2x5bm9taWFsLgorICAgICAqICAgQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIEhlcm1pdGUgcG9seW5vbWlhbCBvZiBvcmRlciBuCisgICAgICogICAgICAgICAgIGFuZCBhcmd1bWVudCB4LgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3BvbHlfaGVybWl0ZV9yZWN1cnNpb24odW5zaWduZWQgaW50IF9fbiwgX1RwIF9feCkKKyAgICB7CisgICAgICAvLyAgQ29tcHV0ZSBIXzAuCisgICAgICBfVHAgX19IXzAgPSAxOworICAgICAgaWYgKF9fbiA9PSAwKQorICAgICAgICByZXR1cm4gX19IXzA7CisKKyAgICAgIC8vICBDb21wdXRlIEhfMS4KKyAgICAgIF9UcCBfX0hfMSA9IDIgKiBfX3g7CisgICAgICBpZiAoX19uID09IDEpCisgICAgICAgIHJldHVybiBfX0hfMTsKKworICAgICAgLy8gIENvbXB1dGUgSF9uLgorICAgICAgX1RwIF9fSF9uLCBfX0hfbm0xLCBfX0hfbm0yOworICAgICAgdW5zaWduZWQgaW50IF9faTsKKyAgICAgIGZvciAgKF9fSF9ubTIgPSBfX0hfMCwgX19IX25tMSA9IF9fSF8xLCBfX2kgPSAyOyBfX2kgPD0gX19uOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9fSF9uID0gMiAqIChfX3ggKiBfX0hfbm0xIC0gKF9faSAtIDEpICogX19IX25tMik7CisgICAgICAgICAgX19IX25tMiA9IF9fSF9ubTE7CisgICAgICAgICAgX19IX25tMSA9IF9fSF9uOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX0hfbjsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBIZXJtaXRlIHBvbHlub21pYWwKKyAgICAgKiAgICAgICAgICBvZiBvcmRlciBuOiBcZiQgSF9uKHgpIFxmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBIZXJtaXRlIHBvbHlub21pYWwgaXMgZGVmaW5lZCBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICBIX24oeCkgPSAoLTEpXm4gZV57eF4yfSBcZnJhY3tkXm59e2R4Xm59IGVeey14XjJ9CisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9fbiBUaGUgb3JkZXIgb2YgdGhlIEhlcm1pdGUgcG9seW5vbWlhbC4KKyAgICAgKiAgIEBwYXJhbSBfX3ggVGhlIGFyZ3VtZW50IG9mIHRoZSBIZXJtaXRlIHBvbHlub21pYWwuCisgICAgICogICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgSGVybWl0ZSBwb2x5bm9taWFsIG9mIG9yZGVyIG4KKyAgICAgKiAgICAgICAgICAgYW5kIGFyZ3VtZW50IHguCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX3BvbHlfaGVybWl0ZSh1bnNpZ25lZCBpbnQgX19uLCBfVHAgX194KQorICAgIHsKKyAgICAgIGlmIChfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX19wb2x5X2hlcm1pdGVfcmVjdXJzaW9uKF9fbiwgX194KTsKKyAgICB9CisKKyAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCisgIH0gLy8gbmFtZXNwYWNlIHN0ZDo6dHIxOjpfX2RldGFpbAorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1BPTFlfSEVSTUlURV9UQ0MKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3BvbHlfbGFndWVycmUudGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvcG9seV9sYWd1ZXJyZS50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkNGExNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3BvbHlfbGFndWVycmUudGNjCkBAIC0wLDAgKzEsMzE5IEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9wb2x5X2xhZ3VlcnJlLnRjYworICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3RyMS9jbWF0aH0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MiBUUjE6IDUuMiAgU3BlY2lhbCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgRWR3YXJkIFNtaXRoLVJvd2xhbmQgYmFzZWQgb246CisvLyAgICgxKSBIYW5kYm9vayBvZiBNYXRoZW1hdGljYWwgRnVuY3Rpb25zLAorLy8gICAgICAgRWQuIE1pbHRvbiBBYnJhbW93aXR6IGFuZCBJcmVuZSBBLiBTdGVndW4sCisvLyAgICAgICBEb3ZlciBQdWJsaWNhdGlvbnMsCisvLyAgICAgICBTZWN0aW9uIDEzLCBwcC4gNTA5LTUxMCwgU2VjdGlvbiAyMiBwcC4gNzczLTgwMgorLy8gICAoMikgVGhlIEdudSBTY2llbnRpZmljIExpYnJhcnksIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nc2wKKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfUE9MWV9MQUdVRVJSRV9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1BPTFlfTEFHVUVSUkVfVENDIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CisgIC8vIFs1LjJdIFNwZWNpYWwgZnVuY3Rpb25zCisKKyAgLy8gSW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKyAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIExhZ3VlcnJlIHBvbHlub21pYWwgCisgICAgICogICAgICAgICAgb2Ygb3JkZXIgQGYkIG4gQGYkLCBkZWdyZWUgQGYkIFxhbHBoYSBAZiQgZm9yIGxhcmdlIG4uCisgICAgICogICBBYnJhbW93aXR6ICYgU3RlZ3VuLCAxMy41LjIxCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX24gVGhlIG9yZGVyIG9mIHRoZSBMYWd1ZXJyZSBmdW5jdGlvbi4KKyAgICAgKiAgIEBwYXJhbSBfX2FscGhhIFRoZSBkZWdyZWUgb2YgdGhlIExhZ3VlcnJlIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIExhZ3VlcnJlIGZ1bmN0aW9uLgorICAgICAqICAgQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIExhZ3VlcnJlIGZ1bmN0aW9uIG9mIG9yZGVyIG4sCisgICAgICogICAgICAgICAgIGRlZ3JlZSBAZiQgXGFscGhhIEBmJCwgYW5kIGFyZ3VtZW50IHguCisgICAgICoKKyAgICAgKiAgVGhpcyBpcyBmcm9tIHRoZSBHTlUgU2NpZW50aWZpYyBMaWJyYXJ5LgorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcGEsIHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3BvbHlfbGFndWVycmVfbGFyZ2Vfbih1bnNpZ25lZCBfX24sIF9UcGEgX19hbHBoYTEsIF9UcCBfX3gpCisgICAgeworICAgICAgY29uc3QgX1RwIF9fYSA9IC1fVHAoX19uKTsKKyAgICAgIGNvbnN0IF9UcCBfX2IgPSBfVHAoX19hbHBoYTEpICsgX1RwKDEpOworICAgICAgY29uc3QgX1RwIF9fZXRhID0gX1RwKDIpICogX19iIC0gX1RwKDQpICogX19hOworICAgICAgY29uc3QgX1RwIF9fY29zMnRoID0gX194IC8gX19ldGE7CisgICAgICBjb25zdCBfVHAgX19zaW4ydGggPSBfVHAoMSkgLSBfX2NvczJ0aDsKKyAgICAgIGNvbnN0IF9UcCBfX3RoID0gc3RkOjphY29zKHN0ZDo6c3FydChfX2NvczJ0aCkpOworICAgICAgY29uc3QgX1RwIF9fcHJlX2ggPSBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGlfMigpCisgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV8yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICogX19ldGEgKiBfX2V0YSAqIF9fY29zMnRoICogX19zaW4ydGg7CisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBjb25zdCBfVHAgX19sZ19iID0gc3RkOjp0cjE6OmxnYW1tYShfVHAoX19uKSArIF9fYik7CisgICAgICBjb25zdCBfVHAgX19sbmZhY3QgPSBzdGQ6OnRyMTo6bGdhbW1hKF9UcChfX24gKyAxKSk7CisjZWxzZQorICAgICAgY29uc3QgX1RwIF9fbGdfYiA9IF9fbG9nX2dhbW1hKF9UcChfX24pICsgX19iKTsKKyAgICAgIGNvbnN0IF9UcCBfX2xuZmFjdCA9IF9fbG9nX2dhbW1hKF9UcChfX24gKyAxKSk7CisjZW5kaWYKKworICAgICAgX1RwIF9fcHJlX3Rlcm0xID0gX1RwKDAuNUwpICogKF9UcCgxKSAtIF9fYikKKyAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6bG9nKF9UcCgwLjI1TCkgKiBfX3ggKiBfX2V0YSk7CisgICAgICBfVHAgX19wcmVfdGVybTIgPSBfVHAoMC4yNUwpICogc3RkOjpsb2coX19wcmVfaCk7CisgICAgICBfVHAgX19sbnByZSA9IF9fbGdfYiAtIF9fbG5mYWN0ICsgX1RwKDAuNUwpICogX194CisgICAgICAgICAgICAgICAgICAgICAgKyBfX3ByZV90ZXJtMSAtIF9fcHJlX3Rlcm0yOworICAgICAgX1RwIF9fc2VyX3Rlcm0xID0gc3RkOjpzaW4oX19hICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCkpOworICAgICAgX1RwIF9fc2VyX3Rlcm0yID0gc3RkOjpzaW4oX1RwKDAuMjVMKSAqIF9fZXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChfVHAoMikgKiBfX3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGQ6OnNpbihfVHAoMikgKiBfX3RoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV80KCkpOworICAgICAgX1RwIF9fc2VyID0gX19zZXJfdGVybTEgKyBfX3Nlcl90ZXJtMjsKKworICAgICAgcmV0dXJuIHN0ZDo6ZXhwKF9fbG5wcmUpICogX19zZXI7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgQGJyaWVmICBFdmFsdWF0ZSB0aGUgcG9seW5vbWlhbCBiYXNlZCBvbiB0aGUgY29uZmx1ZW50IGh5cGVyZ2VvbWV0cmljCisgICAgICogICAgICAgICAgZnVuY3Rpb24gaW4gYSBzYWZlIHdheSwgd2l0aCBubyByZXN0cmljdGlvbiBvbiB0aGUgYXJndW1lbnRzLgorICAgICAqCisgICAgICogICBUaGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX25eXGFscGhhKHgpID0gXGZyYWN7KFxhbHBoYSArIDEpX259e24hfQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICBfMUZfMSgtbjsgXGFscGhhICsgMTsgeCkKKyAgICAgKiAgIEBmXQorICAgICAqICAgd2hlcmUgQGYkIChcYWxwaGEpX24gQGYkIGlzIHRoZSBQb2NoaGFtbWVyIHN5bWJvbCBhbmQKKyAgICAgKiAgIEBmJCBfMUZfMShhOyBjOyB4KSBAZiQgaXMgdGhlIGNvbmZsdWVudCBoeXBlcmdlb21ldHJpYyBmdW5jdGlvbi4KKyAgICAgKgorICAgICAqICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgeCAhPSAwLgorICAgICAqCisgICAgICogIFRoaXMgaXMgZnJvbSB0aGUgR05VIFNjaWVudGlmaWMgTGlicmFyeS4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBhLCB0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wb2x5X2xhZ3VlcnJlX2h5cGVyZyh1bnNpZ25lZCBpbnQgX19uLCBfVHBhIF9fYWxwaGExLCBfVHAgX194KQorICAgIHsKKyAgICAgIGNvbnN0IF9UcCBfX2IgPSBfVHAoX19hbHBoYTEpICsgX1RwKDEpOworICAgICAgY29uc3QgX1RwIF9fbXggPSAtX194OworICAgICAgY29uc3QgX1RwIF9fdGNfc2duID0gKF9feCA8IF9UcCgwKSA/IF9UcCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgIDogKChfX24gJSAyID09IDEpID8gLV9UcCgxKSA6IF9UcCgxKSkpOworICAgICAgLy8gIEdldCB8eHxebi9uIQorICAgICAgX1RwIF9fdGMgPSBfVHAoMSk7CisgICAgICBjb25zdCBfVHAgX19heCA9IHN0ZDo6YWJzKF9feCk7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2sgPSAxOyBfX2sgPD0gX19uOyArK19faykKKyAgICAgICAgX190YyAqPSAoX19heCAvIF9fayk7CisKKyAgICAgIF9UcCBfX3Rlcm0gPSBfX3RjICogX190Y19zZ247CisgICAgICBfVHAgX19zdW0gPSBfX3Rlcm07CisgICAgICBmb3IgKGludCBfX2sgPSBpbnQoX19uKSAtIDE7IF9fayA+PSAwOyAtLV9faykKKyAgICAgICAgeworICAgICAgICAgIF9fdGVybSAqPSAoKF9fYiArIF9UcChfX2spKSAvIF9UcChpbnQoX19uKSAtIF9faykpCisgICAgICAgICAgICAgICAgICAqIF9UcChfX2sgKyAxKSAvIF9fbXg7CisgICAgICAgICAgX19zdW0gKz0gX190ZXJtOworICAgICAgICB9CisKKyAgICAgIHJldHVybiBfX3N1bTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBhc3NvY2lhdGVkIExhZ3VlcnJlIHBvbHlub21pYWwgCisgICAgICogICAgICAgICAgb2Ygb3JkZXIgQGYkIG4gQGYkLCBkZWdyZWUgQGYkIFxhbHBoYSBAZiQ6IEBmJCBMX25eXGFscGhhKHgpIEBmJAorICAgICAqICAgICAgICAgIGJ5IHJlY3Vyc2lvbi4KKyAgICAgKgorICAgICAqICAgVGhlIGFzc29jaWF0ZWQgTGFndWVycmUgZnVuY3Rpb24gaXMgZGVmaW5lZCBieQorICAgICAqICAgQGZbCisgICAgICogICAgICAgTF9uXlxhbHBoYSh4KSA9IFxmcmFjeyhcYWxwaGEgKyAxKV9ufXtuIX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgXzFGXzEoLW47IFxhbHBoYSArIDE7IHgpCisgICAgICogICBAZl0KKyAgICAgKiAgIHdoZXJlIEBmJCAoXGFscGhhKV9uIEBmJCBpcyB0aGUgUG9jaGhhbW1lciBzeW1ib2wgYW5kCisgICAgICogICBAZiQgXzFGXzEoYTsgYzsgeCkgQGYkIGlzIHRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICoKKyAgICAgKiAgIFRoZSBhc3NvY2lhdGVkIExhZ3VlcnJlIHBvbHlub21pYWwgaXMgZGVmaW5lZCBmb3IgaW50ZWdyYWwKKyAgICAgKiAgIEBmJCBcYWxwaGEgPSBtIEBmJCBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICAgIExfbl5tKHgpID0gKC0xKV5tIFxmcmFje2RebX17ZHhebX0gTF97biArIG19KHgpCisgICAgICogICBAZl0KKyAgICAgKiAgIHdoZXJlIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX24oeCkgPSBcZnJhY3tlXnh9e24hfSBcZnJhY3tkXm59e2R4Xm59ICh4Xm5lXnsteH0pCisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9fbiBUaGUgb3JkZXIgb2YgdGhlIExhZ3VlcnJlIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtIF9fYWxwaGEgVGhlIGRlZ3JlZSBvZiB0aGUgTGFndWVycmUgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gX194IFRoZSBhcmd1bWVudCBvZiB0aGUgTGFndWVycmUgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgTGFndWVycmUgZnVuY3Rpb24gb2Ygb3JkZXIgbiwKKyAgICAgKiAgICAgICAgICAgZGVncmVlIEBmJCBcYWxwaGEgQGYkLCBhbmQgYXJndW1lbnQgeC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBhLCB0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wb2x5X2xhZ3VlcnJlX3JlY3Vyc2lvbih1bnNpZ25lZCBpbnQgX19uLCBfVHBhIF9fYWxwaGExLCBfVHAgX194KQorICAgIHsKKyAgICAgIC8vICAgQ29tcHV0ZSBsXzAuCisgICAgICBfVHAgX19sXzAgPSBfVHAoMSk7CisgICAgICBpZiAgKF9fbiA9PSAwKQorICAgICAgICByZXR1cm4gX19sXzA7CisKKyAgICAgIC8vICBDb21wdXRlIGxfMV5hbHBoYS4KKyAgICAgIF9UcCBfX2xfMSA9IC1fX3ggKyBfVHAoMSkgKyBfVHAoX19hbHBoYTEpOworICAgICAgaWYgIChfX24gPT0gMSkKKyAgICAgICAgcmV0dXJuIF9fbF8xOworCisgICAgICAvLyAgQ29tcHV0ZSBsX25eYWxwaGEgYnkgcmVjdXJzaW9uIG9uIG4uCisgICAgICBfVHAgX19sX24yID0gX19sXzA7CisgICAgICBfVHAgX19sX24xID0gX19sXzE7CisgICAgICBfVHAgX19sX24gPSBfVHAoMCk7CisgICAgICBmb3IgICh1bnNpZ25lZCBpbnQgX19ubiA9IDI7IF9fbm4gPD0gX19uOyArK19fbm4pCisgICAgICAgIHsKKyAgICAgICAgICAgIF9fbF9uID0gKF9UcCgyICogX19ubiAtIDEpICsgX1RwKF9fYWxwaGExKSAtIF9feCkKKyAgICAgICAgICAgICAgICAgICogX19sX24xIC8gX1RwKF9fbm4pCisgICAgICAgICAgICAgICAgICAtIChfVHAoX19ubiAtIDEpICsgX1RwKF9fYWxwaGExKSkgKiBfX2xfbjIgLyBfVHAoX19ubik7CisgICAgICAgICAgICBfX2xfbjIgPSBfX2xfbjE7CisgICAgICAgICAgICBfX2xfbjEgPSBfX2xfbjsKKyAgICAgICAgfQorCisgICAgICByZXR1cm4gX19sX247CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBwb2x5bm9taWFsCisgICAgICogICAgICAgICAgb2Ygb3JkZXIgbiwgZGVncmVlIEBmJCBcYWxwaGEgQGYkOiBAZiQgTF9uXmFscGhhKHgpIEBmJC4KKyAgICAgKgorICAgICAqICAgVGhlIGFzc29jaWF0ZWQgTGFndWVycmUgZnVuY3Rpb24gaXMgZGVmaW5lZCBieQorICAgICAqICAgQGZbCisgICAgICogICAgICAgTF9uXlxhbHBoYSh4KSA9IFxmcmFjeyhcYWxwaGEgKyAxKV9ufXtuIX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgXzFGXzEoLW47IFxhbHBoYSArIDE7IHgpCisgICAgICogICBAZl0KKyAgICAgKiAgIHdoZXJlIEBmJCAoXGFscGhhKV9uIEBmJCBpcyB0aGUgUG9jaGhhbW1lciBzeW1ib2wgYW5kCisgICAgICogICBAZiQgXzFGXzEoYTsgYzsgeCkgQGYkIGlzIHRoZSBjb25mbHVlbnQgaHlwZXJnZW9tZXRyaWMgZnVuY3Rpb24uCisgICAgICoKKyAgICAgKiAgIFRoZSBhc3NvY2lhdGVkIExhZ3VlcnJlIHBvbHlub21pYWwgaXMgZGVmaW5lZCBmb3IgaW50ZWdyYWwKKyAgICAgKiAgIEBmJCBcYWxwaGEgPSBtIEBmJCBieToKKyAgICAgKiAgIEBmWworICAgICAqICAgICAgIExfbl5tKHgpID0gKC0xKV5tIFxmcmFje2RebX17ZHhebX0gTF97biArIG19KHgpCisgICAgICogICBAZl0KKyAgICAgKiAgIHdoZXJlIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX24oeCkgPSBcZnJhY3tlXnh9e24hfSBcZnJhY3tkXm59e2R4Xm59ICh4Xm5lXnsteH0pCisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9fbiBUaGUgb3JkZXIgb2YgdGhlIExhZ3VlcnJlIGZ1bmN0aW9uLgorICAgICAqICAgQHBhcmFtIF9fYWxwaGEgVGhlIGRlZ3JlZSBvZiB0aGUgTGFndWVycmUgZnVuY3Rpb24uCisgICAgICogICBAcGFyYW0gX194IFRoZSBhcmd1bWVudCBvZiB0aGUgTGFndWVycmUgZnVuY3Rpb24uCisgICAgICogICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgTGFndWVycmUgZnVuY3Rpb24gb2Ygb3JkZXIgbiwKKyAgICAgKiAgICAgICAgICAgZGVncmVlIEBmJCBcYWxwaGEgQGYkLCBhbmQgYXJndW1lbnQgeC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHBhLCB0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19wb2x5X2xhZ3VlcnJlKHVuc2lnbmVkIGludCBfX24sIF9UcGEgX19hbHBoYTEsIF9UcCBfX3gpCisgICAgeworICAgICAgaWYgKF9feCA8IF9UcCgwKSkKKyAgICAgICAgc3RkOjpfX3Rocm93X2RvbWFpbl9lcnJvcihfX04oIk5lZ2F0aXZlIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIF9fcG9seV9sYWd1ZXJyZS4iKSk7CisgICAgICAvLyAgUmV0dXJuIE5hTiBvbiBOYU4gaW5wdXQuCisgICAgICBlbHNlIGlmIChfX2lzbmFuKF9feCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPF9UcD46OnF1aWV0X05hTigpOworICAgICAgZWxzZSBpZiAoX19uID09IDApCisgICAgICAgIHJldHVybiBfVHAoMSk7CisgICAgICBlbHNlIGlmIChfX24gPT0gMSkKKyAgICAgICAgcmV0dXJuIF9UcCgxKSArIF9UcChfX2FscGhhMSkgLSBfX3g7CisgICAgICBlbHNlIGlmIChfX3ggPT0gX1RwKDApKQorICAgICAgICB7CisgICAgICAgICAgX1RwIF9fcHJvZCA9IF9UcChfX2FscGhhMSkgKyBfVHAoMSk7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19rID0gMjsgX19rIDw9IF9fbjsgKytfX2spCisgICAgICAgICAgICBfX3Byb2QgKj0gKF9UcChfX2FscGhhMSkgKyBfVHAoX19rKSkgLyBfVHAoX19rKTsKKyAgICAgICAgICByZXR1cm4gX19wcm9kOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChfX24gPiAxMDAwMDAwMCAmJiBfVHAoX19hbHBoYTEpID4gLV9UcCgxKQorICAgICAgICAgICAgJiYgX194IDwgX1RwKDIpICogKF9UcChfX2FscGhhMSkgKyBfVHAoMSkpICsgX1RwKDQgKiBfX24pKQorICAgICAgICByZXR1cm4gX19wb2x5X2xhZ3VlcnJlX2xhcmdlX24oX19uLCBfX2FscGhhMSwgX194KTsKKyAgICAgIGVsc2UgaWYgKF9UcChfX2FscGhhMSkgPj0gX1RwKDApCisgICAgICAgICAgIHx8IChfX3ggPiBfVHAoMCkgJiYgX1RwKF9fYWxwaGExKSA8IC1fVHAoX19uICsgMSkpKQorICAgICAgICByZXR1cm4gX19wb2x5X2xhZ3VlcnJlX3JlY3Vyc2lvbihfX24sIF9fYWxwaGExLCBfX3gpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX19wb2x5X2xhZ3VlcnJlX2h5cGVyZyhfX24sIF9fYWxwaGExLCBfX3gpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgTGFndWVycmUgcG9seW5vbWlhbAorICAgICAqICAgICAgICAgIG9mIG9yZGVyIG4sIGRlZ3JlZSBtOiBAZiQgTF9uXm0oeCkgQGYkLgorICAgICAqCisgICAgICogICBUaGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBwb2x5bm9taWFsIGlzIGRlZmluZWQgZm9yIGludGVncmFsCisgICAgICogICBAZiQgXGFscGhhID0gbSBAZiQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX25ebSh4KSA9ICgtMSlebSBcZnJhY3tkXm19e2R4Xm19IExfe24gKyBtfSh4KQorICAgICAqICAgQGZdCisgICAgICogICB3aGVyZSB0aGUgTGFndWVycmUgcG9seW5vbWlhbCBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgICAgTF9uKHgpID0gXGZyYWN7ZV54fXtuIX0gXGZyYWN7ZF5ufXtkeF5ufSAoeF5uZV57LXh9KQorICAgICAqICAgQGZdCisgICAgICoKKyAgICAgKiAgIEBwYXJhbSBfX24gVGhlIG9yZGVyIG9mIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsLgorICAgICAqICAgQHBhcmFtIF9fbSBUaGUgZGVncmVlIG9mIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsLgorICAgICAqICAgQHBhcmFtIF9feCBUaGUgYXJndW1lbnQgb2YgdGhlIExhZ3VlcnJlIHBvbHlub21pYWwuCisgICAgICogICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCBMYWd1ZXJyZSBwb2x5bm9taWFsIG9mIG9yZGVyIG4sCisgICAgICogICAgICAgICAgIGRlZ3JlZSBtLCBhbmQgYXJndW1lbnQgeC4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9UcAorICAgIF9fYXNzb2NfbGFndWVycmUodW5zaWduZWQgaW50IF9fbiwgdW5zaWduZWQgaW50IF9fbSwgX1RwIF9feCkKKyAgICB7IHJldHVybiBfX3BvbHlfbGFndWVycmU8dW5zaWduZWQgaW50LCBfVHA+KF9fbiwgX19tLCBfX3gpOyB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsCisgICAgICogICAgICAgICAgb2Ygb3JkZXIgbjogQGYkIExfbih4KSBAZiQuCisgICAgICoKKyAgICAgKiAgIFRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsIGlzIGRlZmluZWQgYnk6CisgICAgICogICBAZlsKKyAgICAgKiAgICAgICBMX24oeCkgPSBcZnJhY3tlXnh9e24hfSBcZnJhY3tkXm59e2R4Xm59ICh4Xm5lXnsteH0pCisgICAgICogICBAZl0KKyAgICAgKgorICAgICAqICAgQHBhcmFtIF9fbiBUaGUgb3JkZXIgb2YgdGhlIExhZ3VlcnJlIHBvbHlub21pYWwuCisgICAgICogICBAcGFyYW0gX194IFRoZSBhcmd1bWVudCBvZiB0aGUgTGFndWVycmUgcG9seW5vbWlhbC4KKyAgICAgKiAgIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBMYWd1ZXJyZSBwb2x5bm9taWFsIG9mIG9yZGVyIG4KKyAgICAgKiAgICAgICAgICAgYW5kIGFyZ3VtZW50IHguCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICBfX2xhZ3VlcnJlKHVuc2lnbmVkIGludCBfX24sIF9UcCBfX3gpCisgICAgeyByZXR1cm4gX19wb2x5X2xhZ3VlcnJlPHVuc2lnbmVkIGludCwgX1RwPihfX24sIDAsIF9feCk7IH0KKworICBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAgfSAvLyBuYW1lc3BhY2Ugc3RkOjp0cjE6Ol9fZGV0YWlsCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfUE9MWV9MQUdVRVJSRV9UQ0MKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3JhbmRvbSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3JhbmRvbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQzMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvcmFuZG9tCkBAIC0wLDAgKzEsNTAgQEAKKy8vIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqIEBmaWxlIHRyMS9yYW5kb20KKyAqIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9SQU5ET00KKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1JBTkRPTSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGV4dC90eXBlX3RyYWl0cy5oPgorI2luY2x1ZGUgPGV4dC9udW1lcmljX3RyYWl0cy5oPgorI2luY2x1ZGUgPGJpdHMvY29uY2VwdF9jaGVjay5oPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaW5jbHVkZSA8dHIxL3R5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHRyMS9jbWF0aD4KKyNpbmNsdWRlIDx0cjEvcmFuZG9tLmg+CisjaW5jbHVkZSA8dHIxL3JhbmRvbS50Y2M+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfUkFORE9NCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9yYW5kb20uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3JhbmRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZjk1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9yYW5kb20uaApAQCAtMCwwICsxLDI0MTcgQEAKKy8vIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKioKKyAqIEBmaWxlIHRyMS9yYW5kb20uaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3RyMS9yYW5kb219CisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfUkFORE9NX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1JBTkRPTV9IIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKKyAgLy8gWzUuMV0gUmFuZG9tIG51bWJlciBnZW5lcmF0aW9uCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHRyMV9yYW5kb20gUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisgICAqIEEgZmFjaWxpdHkgZm9yIGdlbmVyYXRpbmcgcmFuZG9tIG51bWJlcnMgb24gc2VsZWN0ZWQgZGlzdHJpYnV0aW9ucy4KKyAgICogQHsKKyAgICovCisKKyAgLyoKKyAgICogSW1wbGVtZW50YXRpb24tc3BhY2UgZGV0YWlscy4KKyAgICovCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUludFR5cGUsIGludCBfX3csIAorCSAgICAgYm9vbCA9IF9fdyA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6ZGlnaXRzPgorICAgICAgc3RydWN0IF9TaGlmdAorICAgICAgeyBzdGF0aWMgY29uc3QgX1VJbnRUeXBlIF9fdmFsdWUgPSAwOyB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VJbnRUeXBlLCBpbnQgX193PgorICAgICAgc3RydWN0IF9TaGlmdDxfVUludFR5cGUsIF9fdywgdHJ1ZT4KKyAgICAgIHsgc3RhdGljIGNvbnN0IF9VSW50VHlwZSBfX3ZhbHVlID0gX1VJbnRUeXBlKDEpIDw8IF9fdzsgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX1RwIF9fYSwgX1RwIF9fYywgX1RwIF9fbSwgYm9vbD4KKyAgICAgIHN0cnVjdCBfTW9kOworCisgICAgLy8gRGlzcGF0Y2ggYmFzZWQgb24gbW9kdWx1cyB2YWx1ZSB0byBwcmV2ZW50IGRpdmlkZS1ieS16ZXJvIGNvbXBpbGUtdGltZQorICAgIC8vIGVycm9ycyB3aGVuIG0gPT0gMC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9UcCBfX2EsIF9UcCBfX2MsIF9UcCBfX20+CisgICAgICBpbmxpbmUgX1RwCisgICAgICBfX21vZChfVHAgX194KQorICAgICAgeyByZXR1cm4gX01vZDxfVHAsIF9fYSwgX19jLCBfX20sIF9fbSA9PSAwPjo6X19jYWxjKF9feCk7IH0KKworICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX2NvbmRpdGlvbmFsX3R5cGU8KHNpemVvZih1bnNpZ25lZCkgPT0gNCksCisJCSAgICB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZz46Ol9fdHlwZSBfVUludDMyVHlwZTsKKworICAgIC8qCisgICAgICogQW4gYWRhcHRvciBjbGFzcyBmb3IgY29udmVydGluZyB0aGUgb3V0cHV0IG9mIGFueSBHZW5lcmF0b3IgaW50bworICAgICAqIHRoZSBpbnB1dCBmb3IgYSBzcGVjaWZpYyBEaXN0cmlidXRpb24uCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0VuZ2luZSwgdHlwZW5hbWUgX0Rpc3RyaWJ1dGlvbj4KKyAgICAgIHN0cnVjdCBfQWRhcHRvcgorICAgICAgeyAKKwl0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X0VuZ2luZT46OnR5cGUgX0JFbmdpbmU7CisJdHlwZWRlZiB0eXBlbmFtZSBfQkVuZ2luZTo6cmVzdWx0X3R5cGUgICAgICAgICAgIF9FbmdpbmVfcmVzdWx0X3R5cGU7CisJdHlwZWRlZiB0eXBlbmFtZSBfRGlzdHJpYnV0aW9uOjppbnB1dF90eXBlICAgICAgIHJlc3VsdF90eXBlOworCisgICAgICBwdWJsaWM6CisJX0FkYXB0b3IoY29uc3QgX0VuZ2luZSYgX19nKQorCTogX01fZyhfX2cpIHsgfQorCisJcmVzdWx0X3R5cGUKKwltaW4oKSBjb25zdAorCXsKKwkgIHJlc3VsdF90eXBlIF9fcmV0dXJuX3ZhbHVlOworCSAgaWYgKGlzX2ludGVncmFsPF9FbmdpbmVfcmVzdWx0X3R5cGU+Ojp2YWx1ZQorCSAgICAgICYmIGlzX2ludGVncmFsPHJlc3VsdF90eXBlPjo6dmFsdWUpCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gX01fZy5taW4oKTsKKwkgIGVsc2UKKwkgICAgX19yZXR1cm5fdmFsdWUgPSByZXN1bHRfdHlwZSgwKTsKKwkgIHJldHVybiBfX3JldHVybl92YWx1ZTsKKwl9CisKKwlyZXN1bHRfdHlwZQorCW1heCgpIGNvbnN0CisJeworCSAgcmVzdWx0X3R5cGUgX19yZXR1cm5fdmFsdWU7CisJICBpZiAoaXNfaW50ZWdyYWw8X0VuZ2luZV9yZXN1bHRfdHlwZT46OnZhbHVlCisJICAgICAgJiYgaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSBfTV9nLm1heCgpOworCSAgZWxzZSBpZiAoIWlzX2ludGVncmFsPHJlc3VsdF90eXBlPjo6dmFsdWUpCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gcmVzdWx0X3R5cGUoMSk7CisJICBlbHNlCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46Om1heCgpIC0gMTsKKwkgIHJldHVybiBfX3JldHVybl92YWx1ZTsKKwl9CisKKwkvKgorCSAqIENvbnZlcnRzIGEgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBhZGFwdGVkIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisJICogaW50byBhIHZhbHVlIGluIHRoZSBpbnB1dCBkb21haW4gZm9yIHRoZSBkZXBlbmRlbnQgcmFuZG9tIG51bWJlcgorCSAqIGRpc3RyaWJ1dGlvbi4KKwkgKgorCSAqIEJlY2F1c2UgdGhlIHR5cGUgdHJhaXRzIGFyZSBjb21waWxlIHRpbWUgY29uc3RhbnRzIG9ubHkgdGhlCisJICogYXBwcm9wcmlhdGUgY2xhdXNlIG9mIHRoZSBpZiBzdGF0ZW1lbnRzIHdpbGwgYWN0dWFsbHkgYmUgZW1pdHRlZAorCSAqIGJ5IHRoZSBjb21waWxlci4KKwkgKi8KKwlyZXN1bHRfdHlwZQorCW9wZXJhdG9yKCkoKQorCXsKKwkgIHJlc3VsdF90eXBlIF9fcmV0dXJuX3ZhbHVlOworCSAgaWYgKGlzX2ludGVncmFsPF9FbmdpbmVfcmVzdWx0X3R5cGU+Ojp2YWx1ZQorCSAgICAgICYmIGlzX2ludGVncmFsPHJlc3VsdF90eXBlPjo6dmFsdWUpCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gX01fZygpOworCSAgZWxzZSBpZiAoIWlzX2ludGVncmFsPF9FbmdpbmVfcmVzdWx0X3R5cGU+Ojp2YWx1ZQorCQkgICAmJiAhaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSByZXN1bHRfdHlwZShfTV9nKCkgLSBfTV9nLm1pbigpKQorCSAgICAgIC8gcmVzdWx0X3R5cGUoX01fZy5tYXgoKSAtIF9NX2cubWluKCkpOworCSAgZWxzZSBpZiAoaXNfaW50ZWdyYWw8X0VuZ2luZV9yZXN1bHRfdHlwZT46OnZhbHVlCisJCSAgICYmICFpc19pbnRlZ3JhbDxyZXN1bHRfdHlwZT46OnZhbHVlKQorCSAgICBfX3JldHVybl92YWx1ZSA9IHJlc3VsdF90eXBlKF9NX2coKSAtIF9NX2cubWluKCkpCisJICAgICAgLyByZXN1bHRfdHlwZShfTV9nLm1heCgpIC0gX01fZy5taW4oKSArIHJlc3VsdF90eXBlKDEpKTsKKwkgIGVsc2UKKwkgICAgX19yZXR1cm5fdmFsdWUgPSAoKChfTV9nKCkgLSBfTV9nLm1pbigpKSAKKwkJCSAgICAgICAvIChfTV9nLm1heCgpIC0gX01fZy5taW4oKSkpCisJCQkgICAgICAqIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKSk7CisJICByZXR1cm4gX19yZXR1cm5fdmFsdWU7CisJfQorCisgICAgICBwcml2YXRlOgorCV9FbmdpbmUgX01fZzsKKyAgICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgX0VuZ2luZSouCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0VuZ2luZSwgdHlwZW5hbWUgX0Rpc3RyaWJ1dGlvbj4KKyAgICAgIHN0cnVjdCBfQWRhcHRvcjxfRW5naW5lKiwgX0Rpc3RyaWJ1dGlvbj4KKyAgICAgIHsKKwl0eXBlZGVmIHR5cGVuYW1lIF9FbmdpbmU6OnJlc3VsdF90eXBlICAgICAgX0VuZ2luZV9yZXN1bHRfdHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9EaXN0cmlidXRpb246OmlucHV0X3R5cGUgcmVzdWx0X3R5cGU7CisKKyAgICAgIHB1YmxpYzoKKwlfQWRhcHRvcihfRW5naW5lKiBfX2cpCisJOiBfTV9nKF9fZykgeyB9CisKKwlyZXN1bHRfdHlwZQorCW1pbigpIGNvbnN0CisJeworCSAgcmVzdWx0X3R5cGUgX19yZXR1cm5fdmFsdWU7CisJICBpZiAoaXNfaW50ZWdyYWw8X0VuZ2luZV9yZXN1bHRfdHlwZT46OnZhbHVlCisJICAgICAgJiYgaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSBfTV9nLT5taW4oKTsKKwkgIGVsc2UKKwkgICAgX19yZXR1cm5fdmFsdWUgPSByZXN1bHRfdHlwZSgwKTsKKwkgIHJldHVybiBfX3JldHVybl92YWx1ZTsKKwl9CisKKwlyZXN1bHRfdHlwZQorCW1heCgpIGNvbnN0CisJeworCSAgcmVzdWx0X3R5cGUgX19yZXR1cm5fdmFsdWU7CisJICBpZiAoaXNfaW50ZWdyYWw8X0VuZ2luZV9yZXN1bHRfdHlwZT46OnZhbHVlCisJICAgICAgJiYgaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSBfTV9nLT5tYXgoKTsKKwkgIGVsc2UgaWYgKCFpc19pbnRlZ3JhbDxyZXN1bHRfdHlwZT46OnZhbHVlKQorCSAgICBfX3JldHVybl92YWx1ZSA9IHJlc3VsdF90eXBlKDEpOworCSAgZWxzZQorCSAgICBfX3JldHVybl92YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKSAtIDE7CisJICByZXR1cm4gX19yZXR1cm5fdmFsdWU7CisJfQorCisJcmVzdWx0X3R5cGUKKwlvcGVyYXRvcigpKCkKKwl7CisJICByZXN1bHRfdHlwZSBfX3JldHVybl92YWx1ZTsKKwkgIGlmIChpc19pbnRlZ3JhbDxfRW5naW5lX3Jlc3VsdF90eXBlPjo6dmFsdWUKKwkgICAgICAmJiBpc19pbnRlZ3JhbDxyZXN1bHRfdHlwZT46OnZhbHVlKQorCSAgICBfX3JldHVybl92YWx1ZSA9ICgqX01fZykoKTsKKwkgIGVsc2UgaWYgKCFpc19pbnRlZ3JhbDxfRW5naW5lX3Jlc3VsdF90eXBlPjo6dmFsdWUKKwkJICAgJiYgIWlzX2ludGVncmFsPHJlc3VsdF90eXBlPjo6dmFsdWUpCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gcmVzdWx0X3R5cGUoKCpfTV9nKSgpIC0gX01fZy0+bWluKCkpCisJICAgICAgLyByZXN1bHRfdHlwZShfTV9nLT5tYXgoKSAtIF9NX2ctPm1pbigpKTsKKwkgIGVsc2UgaWYgKGlzX2ludGVncmFsPF9FbmdpbmVfcmVzdWx0X3R5cGU+Ojp2YWx1ZQorCQkgICAmJiAhaXNfaW50ZWdyYWw8cmVzdWx0X3R5cGU+Ojp2YWx1ZSkKKwkgICAgX19yZXR1cm5fdmFsdWUgPSByZXN1bHRfdHlwZSgoKl9NX2cpKCkgLSBfTV9nLT5taW4oKSkKKwkgICAgICAvIHJlc3VsdF90eXBlKF9NX2ctPm1heCgpIC0gX01fZy0+bWluKCkgKyByZXN1bHRfdHlwZSgxKSk7CisJICBlbHNlCisJICAgIF9fcmV0dXJuX3ZhbHVlID0gKCgoKCpfTV9nKSgpIC0gX01fZy0+bWluKCkpIAorCQkJICAgICAgIC8gKF9NX2ctPm1heCgpIC0gX01fZy0+bWluKCkpKQorCQkJICAgICAgKiBzdGQ6Om51bWVyaWNfbGltaXRzPHJlc3VsdF90eXBlPjo6bWF4KCkpOworCSAgcmV0dXJuIF9fcmV0dXJuX3ZhbHVlOworCX0KKworICAgICAgcHJpdmF0ZToKKwlfRW5naW5lKiBfTV9nOworICAgICAgfTsKKworICBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAgfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogUHJvZHVjZXMgcmFuZG9tIG51bWJlcnMgb24gYSBnaXZlbiBkaXN0cmlidXRpb24gZnVuY3Rpb24gdXNpbmcgYQorICAgKiBub24tdW5pZm9ybSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gZW5naW5lLgorICAgKgorICAgKiBAdG9kbyB0aGUgZW5naW5lX3ZhbHVlX3R5cGUgbmVlZHMgdG8gYmUgc3R1ZGllZCBtb3JlIGNhcmVmdWxseS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9FbmdpbmUsIHR5cGVuYW1lIF9EaXN0PgorICAgIGNsYXNzIHZhcmlhdGVfZ2VuZXJhdG9yCisgICAgeworICAgICAgLy8gQ29uY2VwdCByZXF1aXJlbWVudHMuCisgICAgICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX0VuZ2luZSwgX0NvcHlDb25zdHJ1Y3RpYmxlQ29uY2VwdCkKKyAgICAgIC8vICBfX2dsaWJjeHhfY2xhc3NfcmVxdWlyZXMoX0VuZ2luZSwgX0VuZ2luZUNvbmNlcHQpCisgICAgICAvLyAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9EaXN0LCBfRW5naW5lQ29uY2VwdCkKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX0VuZ2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lX3R5cGU7CisgICAgICB0eXBlZGVmIF9fZGV0YWlsOjpfQWRhcHRvcjxfRW5naW5lLCBfRGlzdD4gICAgIGVuZ2luZV92YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBfRGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Rpc3Q6OnJlc3VsdF90eXBlICAgICAgICAgICAgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIHRyMTo1LjEuMSB0YWJsZSA1LjEgcmVxdWlyZW1lbnQKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2VuYWJsZV9pZjwKKwlpc19hcml0aG1ldGljPHJlc3VsdF90eXBlPjo6dmFsdWUsIHJlc3VsdF90eXBlPjo6X190eXBlIF9Jc1ZhbGlkVHlwZTsKKworICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgdmFyaWF0ZSBnZW5lcmF0b3Igd2l0aCB0aGUgdW5pZm9ybSByYW5kb20gbnVtYmVyCisgICAgICAgKiBnZW5lcmF0b3IgQHAgX19lbmcgZm9yIHRoZSByYW5kb20gZGlzdHJpYnV0aW9uIEBwIF9fZGlzdC4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIEFueSBleGNlcHRpb25zIHdoaWNoIG1heSB0aHJvd24gYnkgdGhlIGNvcHkgY29uc3RydWN0b3JzIG9mCisgICAgICAgKiB0aGUgQHAgX0VuZ2luZSBvciBAcCBfRGlzdCBvYmplY3RzLgorICAgICAgICovCisgICAgICB2YXJpYXRlX2dlbmVyYXRvcihlbmdpbmVfdHlwZSBfX2VuZywgZGlzdHJpYnV0aW9uX3R5cGUgX19kaXN0KQorICAgICAgOiBfTV9lbmdpbmUoX19lbmcpLCBfTV9kaXN0KF9fZGlzdCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbmV4dCBnZW5lcmF0ZWQgdmFsdWUgb24gdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoKQorICAgICAgeyByZXR1cm4gX01fZGlzdChfTV9lbmdpbmUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogV1RGPworICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX1RwIF9fdmFsdWUpCisgICAgICAgIHsgcmV0dXJuIF9NX2Rpc3QoX01fZW5naW5lLCBfX3ZhbHVlKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgdW5pZm9ybSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogb2JqZWN0LgorICAgICAgICovCisgICAgICBlbmdpbmVfdmFsdWVfdHlwZSYKKyAgICAgIGVuZ2luZSgpCisgICAgICB7IHJldHVybiBfTV9lbmdpbmU7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIHVuaWZvcm0gcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqLworICAgICAgY29uc3QgZW5naW5lX3ZhbHVlX3R5cGUmCisgICAgICBlbmdpbmUoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fZW5naW5lOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyByYW5kb20gZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBkaXN0cmlidXRpb25fdHlwZSYKKyAgICAgIGRpc3RyaWJ1dGlvbigpCisgICAgICB7IHJldHVybiBfTV9kaXN0OyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyByYW5kb20gZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICBjb25zdCBkaXN0cmlidXRpb25fdHlwZSYKKyAgICAgIGRpc3RyaWJ1dGlvbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9kaXN0OyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgY2xvc2VkIGxvd2VyIGJvdW5kIG9mIHRoZSBkaXN0cmlidXRpb24gaW50ZXJ2YWwuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZGlzdHJpYnV0aW9uKCkubWluKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBjbG9zZWQgdXBwZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbiBpbnRlcnZhbC4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5kaXN0cmlidXRpb24oKS5tYXgoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGVuZ2luZV92YWx1ZV90eXBlIF9NX2VuZ2luZTsKKyAgICAgIGRpc3RyaWJ1dGlvbl90eXBlIF9NX2Rpc3Q7CisgICAgfTsKKworCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCB0cjFfcmFuZG9tX2dlbmVyYXRvcnMgUmFuZG9tIE51bWJlciBHZW5lcmF0b3JzCisgICAqIEBpbmdyb3VwIHRyMV9yYW5kb20KKyAgICoKKyAgICogVGhlc2UgY2xhc3NlcyBkZWZpbmUgb2JqZWN0cyB3aGljaCBwcm92aWRlIHJhbmRvbSBvciBwc2V1ZG9yYW5kb20KKyAgICogbnVtYmVycywgZWl0aGVyIGZyb20gYSBkaXNjcmV0ZSBvciBhIGNvbnRpbnVvdXMgaW50ZXJ2YWwuICBUaGUKKyAgICogcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igc3VwcGxpZWQgYXMgYSBwYXJ0IG9mIHRoaXMgbGlicmFyeSBhcmUKKyAgICogYWxsIHVuaWZvcm0gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIHdoaWNoIHByb3ZpZGUgYSBzZXF1ZW5jZSBvZgorICAgKiByYW5kb20gbnVtYmVyIHVuaWZvcm1seSBkaXN0cmlidXRlZCBvdmVyIHRoZWlyIHJhbmdlLgorICAgKgorICAgKiBBIG51bWJlciBnZW5lcmF0b3IgaXMgYSBmdW5jdGlvbiBvYmplY3Qgd2l0aCBhbiBvcGVyYXRvcigpIHRoYXQKKyAgICogdGFrZXMgemVybyBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBudW1iZXIuCisgICAqCisgICAqIEEgY29tcGxpYW50IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nCisgICAqIHJlcXVpcmVtZW50cy4gIDx0YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz0xMCBjZWxsc3BhY2luZz0wPgorICAgKiA8Y2FwdGlvbiBhbGlnbj10b3A+UmFuZG9tIE51bWJlciBHZW5lcmF0b3IgUmVxdWlyZW1lbnRzPC9jYXB0aW9uPgorICAgKiA8dHI+PHRkPlRvIGJlIGRvY3VtZW50ZWQuPC90ZD48L3RyPiA8L3RhYmxlPgorICAgKiAKKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBicmllZiBBIG1vZGVsIG9mIGEgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICoKKyAgICogQSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGF0IHByb2R1Y2VzIHBzZXVkb3JhbmRvbSBudW1iZXJzIHVzaW5nIHRoZQorICAgKiBsaW5lYXIgZnVuY3Rpb24gQGYkeF97aSsxfVxsZWZ0YXJyb3coYXhfe2l9ICsgYykgXGJtb2QgbSBAZiQuCisgICAqCisgICAqIFRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgQHAgX1VJbnRUeXBlIG11c3QgYmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZQorICAgKiBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgdmFsdWVzIHVwIHRvIChfX20tMSkuIElmIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIKKyAgICogQHAgX19tIGlzIDAsIHRoZSBtb2R1bHVzIEBwIF9fbSB1c2VkIGlzCisgICAqIHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6bWF4KCkgcGx1cyAxLiBPdGhlcndpc2UsIHRoZSB0ZW1wbGF0ZQorICAgKiBwYXJhbWV0ZXJzIEBwIF9fYSBhbmQgQHAgX19jIG11c3QgYmUgbGVzcyB0aGFuIEBwIF9fbS4KKyAgICoKKyAgICogVGhlIHNpemUgb2YgdGhlIHN0YXRlIGlzIEBmJCAxIEBmJC4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICBjbGFzcyBsaW5lYXJfY29uZ3J1ZW50aWFsCisgICAgeworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9VSW50VHlwZSwgX1Vuc2lnbmVkSW50ZWdlckNvbmNlcHQpCisgICAgICAvLyAgX19nbGliY3BwX2NsYXNzX3JlcXVpcmVzKF9fYSA8IF9fbSAmJiBfX2MgPCBfX20pCisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCByYW5kb20gdmFsdWUuICovCisgICAgICB0eXBlZGVmIF9VSW50VHlwZSByZXN1bHRfdHlwZTsKKworICAgICAgLyoqIFRoZSBtdWx0aXBsaWVyLiAqLworICAgICAgc3RhdGljIGNvbnN0IF9VSW50VHlwZSBtdWx0aXBsaWVyID0gX19hOworICAgICAgLyoqIEFuIGluY3JlbWVudC4gKi8KKyAgICAgIHN0YXRpYyBjb25zdCBfVUludFR5cGUgaW5jcmVtZW50ID0gX19jOworICAgICAgLyoqIFRoZSBtb2R1bHVzLiAqLworICAgICAgc3RhdGljIGNvbnN0IF9VSW50VHlwZSBtb2R1bHVzID0gX19tOworCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSAlbGluZWFyX2NvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUgd2l0aAorICAgICAgICogc2VlZCBAcCBfX3MuICBUaGUgZGVmYXVsdCBzZWVkIHZhbHVlIGlzIDEuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcyBUaGUgaW5pdGlhbCBzZWVkIHZhbHVlLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbGluZWFyX2NvbmdydWVudGlhbCh1bnNpZ25lZCBsb25nIF9feDAgPSAxKQorICAgICAgeyB0aGlzLT5zZWVkKF9feDApOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhICVsaW5lYXJfY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZQorICAgICAgICogc2VlZGVkIGZyb20gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBAcCBfX2cuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fZyBUaGUgc2VlZCBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIGxpbmVhcl9jb25ncnVlbnRpYWwoX0dlbiYgX19nKQorICAgICAgICB7IHRoaXMtPnNlZWQoX19nKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIFJlc2VlZHMgdGhlICVsaW5lYXJfY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZQorICAgICAgICogc2VxdWVuY2UgdG8gdGhlIHNlZWQgQGcgX19zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX3MgVGhlIG5ldyBzZWVkLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKHVuc2lnbmVkIGxvbmcgX19zID0gMSk7CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZWVkcyB0aGUgJWxpbmVhcl9jb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lCisgICAgICAgKiBzZXF1ZW5jZSB1c2luZyB2YWx1ZXMgZnJvbSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIEBwIF9fZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19nIHRoZSBzZWVkIGdlbmVyYXRvciBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9HZW4mIF9fZykKKyAgICAgICAgeyBzZWVkKF9fZywgdHlwZW5hbWUgaXNfZnVuZGFtZW50YWw8X0dlbj46OnR5cGUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSB2YWx1ZSBpbiB0aGUgb3V0cHV0IHJhbmdlLgorICAgICAgICoKKyAgICAgICAqIFRoZSBtaW5pbXVtIGRlcGVuZHMgb24gdGhlIEBwIF9fYyBwYXJhbWV0ZXI6IGlmIGl0IGlzIHplcm8sIHRoZQorICAgICAgICogbWluaW11bSBnZW5lcmF0ZWQgbXVzdCBiZSA+IDAsIG90aGVyd2lzZSAwIGlzIGFsbG93ZWQuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gKF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIF9fbT4oX19jKSA9PSAwKSA/IDEgOiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSB2YWx1ZSBpbiB0aGUgb3V0cHV0IHJhbmdlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fbSAtIDE7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBuZXh0IHJhbmRvbSBudW1iZXIgaW4gdGhlIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpOworCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGVxdWFsaXR5LgorICAgICAgICogIAorICAgICAgICogQHBhcmFtIF9fbGhzIEEgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iai4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgbGluZWFyX2NvbmdydWVudGlhbCYgX19saHMsCisJCSBjb25zdCBsaW5lYXJfY29uZ3J1ZW50aWFsJiBfX3JocykKKyAgICAgIHsgcmV0dXJuIF9fbGhzLl9NX3ggPT0gX19yaHMuX01feDsgfQorCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgbGluZWFyIGNvbmdydWVudGlhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciBsaW5lYXIgY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iai4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IGxpbmVhcl9jb25ncnVlbnRpYWwmIF9fbGhzLAorCQkgY29uc3QgbGluZWFyX2NvbmdydWVudGlhbCYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIFdyaXRlcyB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdGUgeChpKSBvZiB4IHRvIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgIFRoZSBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9fbGNyIEEgJSBsaW5lYXJfY29uZ3J1ZW50aWFsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICogQHJldHVybnMgX19vcy4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlMSwgX1VJbnRUeXBlMSBfX2ExLCBfVUludFR5cGUxIF9fYzEsCisJICAgICAgIF9VSW50VHlwZTEgX19tMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IGxpbmVhcl9jb25ncnVlbnRpYWw8X1VJbnRUeXBlMSwgX19hMSwgX19jMSwKKwkJICAgX19tMT4mIF9fbGNyKTsKKworICAgICAgLyoqCisgICAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZW5naW5lIGJ5IHJlYWRpbmcgaXRzIHRleHR1YWwKKyAgICAgICAqIHJlcHJlc2VudGF0aW9uIGZyb20gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBUaGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IHdyaXR0ZW4gdXNpbmcgYW4KKyAgICAgICAqIG91dHB1dCBzdHJlYW0gd2hvc2UgaW1idWVkIGxvY2FsZSBhbmQgd2hvc2UgdHlwZSdzIHRlbXBsYXRlCisgICAgICAgKiBzcGVjaWFsaXphdGlvbiBhcmd1bWVudHMgX0NoYXJUIGFuZCBfVHJhaXRzIHdlcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YKKyAgICAgICAqIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgIFRoZSBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX19sY3IgQSAlIGxpbmVhcl9jb25ncnVlbnRpYWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKiBAcmV0dXJucyBfX2lzLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUxLCBfVUludFR5cGUxIF9fYTEsIF9VSW50VHlwZTEgX19jMSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX20xLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUxLCBfX2ExLCBfX2MxLCBfX20xPiYgX19sY3IpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHZvaWQKKyAgICAgICAgc2VlZChfR2VuJiBfX2csIHRydWVfdHlwZSkKKyAgICAgICAgeyByZXR1cm4gc2VlZChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX2cpKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nLCBmYWxzZV90eXBlKTsKKworICAgICAgX1VJbnRUeXBlIF9NX3g7CisgICAgfTsKKworICAvKioKKyAgICogVGhlIGNsYXNzaWMgTWluaW11bSBTdGFuZGFyZCByYW5kMCBvZiBMZXdpcywgR29vZG1hbiwgYW5kIE1pbGxlci4KKyAgICovCisgIHR5cGVkZWYgbGluZWFyX2NvbmdydWVudGlhbDx1bnNpZ25lZCBsb25nLCAxNjgwNywgMCwgMjE0NzQ4MzY0Nz4gbWluc3RkX3JhbmQwOworCisgIC8qKgorICAgKiBBbiBhbHRlcm5hdGl2ZSBMQ1IgKExlaG1lciBHZW5lcmF0b3IgZnVuY3Rpb24pIC4KKyAgICovCisgIHR5cGVkZWYgbGluZWFyX2NvbmdydWVudGlhbDx1bnNpZ25lZCBsb25nLCA0ODI3MSwgMCwgMjE0NzQ4MzY0Nz4gbWluc3RkX3JhbmQ7CisKKworICAvKioKKyAgICogQSBnZW5lcmFsaXplZCBmZWVkYmFjayBzaGlmdCByZWdpc3RlciBkaXNjcmV0ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICoKKyAgICogVGhpcyBhbGdvcml0aG0gYXZvaWRzIG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBhbmQgaXMgZGVzaWduZWQgdG8gYmUKKyAgICogZnJpZW5kbHkgdG8gYSBwaXBlbGluZWQgYXJjaGl0ZWN0dXJlLiAgSWYgdGhlIHBhcmFtZXRlcnMgYXJlIGNob3NlbgorICAgKiBjb3JyZWN0bHksIHRoaXMgZ2VuZXJhdG9yIHdpbGwgcHJvZHVjZSBudW1iZXJzIHdpdGggYSB2ZXJ5IGxvbmcgcGVyaW9kIGFuZAorICAgKiBmYWlybHkgZ29vZCBhcHBhcmVudCBlbnRyb3B5LCBhbHRob3VnaCBzdGlsbCBub3QgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nLgorICAgKgorICAgKiBUaGUgYmVzdCB3YXkgdG8gdXNlIHRoaXMgZ2VuZXJhdG9yIGlzIHdpdGggdGhlIHByZWRlZmluZWQgbXQxOTkzNyBjbGFzcy4KKyAgICoKKyAgICogVGhpcyBhbGdvcml0aG0gd2FzIG9yaWdpbmFsbHkgaW52ZW50ZWQgYnkgTWFrb3RvIE1hdHN1bW90byBhbmQKKyAgICogVGFrdWppIE5pc2hpbXVyYS4KKyAgICoKKyAgICogQHZhciB3b3JkX3NpemUgICBUaGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBlbGVtZW50IG9mIHRoZSBzdGF0ZSB2ZWN0b3IuCisgICAqIEB2YXIgc3RhdGVfc2l6ZSAgVGhlIGRlZ3JlZSBvZiByZWN1cnNpb24uCisgICAqIEB2YXIgc2hpZnRfc2l6ZSAgVGhlIHBlcmlvZCBwYXJhbWV0ZXIuCisgICAqIEB2YXIgbWFza19iaXRzICAgVGhlIHNlcGFyYXRpb24gcG9pbnQgYml0IGluZGV4LgorICAgKiBAdmFyIHBhcmFtZXRlcl9hIFRoZSBsYXN0IHJvdyBvZiB0aGUgdHdpc3QgbWF0cml4LgorICAgKiBAdmFyIG91dHB1dF91ICAgIFRoZSBmaXJzdCByaWdodC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IHBhcmFtZXRlci4KKyAgICogQHZhciBvdXRwdXRfcyAgICBUaGUgZmlyc3QgbGVmdC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IHBhcmFtZXRlci4KKyAgICogQHZhciBvdXRwdXRfYiAgICBUaGUgZmlyc3QgbGVmdC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IG1hc2suCisgICAqIEB2YXIgb3V0cHV0X3QgICAgVGhlIHNlY29uZCBsZWZ0LXNoaWZ0IHRlbXBlcmluZyBtYXRyaXggcGFyYW1ldGVyLgorICAgKiBAdmFyIG91dHB1dF9jICAgIFRoZSBzZWNvbmQgbGVmdC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IG1hc2suCisgICAqIEB2YXIgb3V0cHV0X2wgICAgVGhlIHNlY29uZCByaWdodC1zaGlmdCB0ZW1wZXJpbmcgbWF0cml4IHBhcmFtZXRlci4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLCBfVUludFR5cGUgX19iLCBpbnQgX190LAorCSAgIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgY2xhc3MgbWVyc2VubmVfdHdpc3RlcgorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfVUludFR5cGUsIF9VbnNpZ25lZEludGVnZXJDb25jZXB0KQorCisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXMKKyAgICAgIHR5cGVkZWYgX1VJbnRUeXBlIHJlc3VsdF90eXBlOworCisgICAgICAvLyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICBzdGF0aWMgY29uc3QgaW50ICAgICAgIHdvcmRfc2l6ZSAgID0gX193OworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgICBzdGF0ZV9zaXplICA9IF9fbjsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICAgc2hpZnRfc2l6ZSAgPSBfX207CisgICAgICBzdGF0aWMgY29uc3QgaW50ICAgICAgIG1hc2tfYml0cyAgID0gX19yOworICAgICAgc3RhdGljIGNvbnN0IF9VSW50VHlwZSBwYXJhbWV0ZXJfYSA9IF9fYTsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICAgb3V0cHV0X3UgICAgPSBfX3U7CisgICAgICBzdGF0aWMgY29uc3QgaW50ICAgICAgIG91dHB1dF9zICAgID0gX19zOworICAgICAgc3RhdGljIGNvbnN0IF9VSW50VHlwZSBvdXRwdXRfYiAgICA9IF9fYjsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICAgb3V0cHV0X3QgICAgPSBfX3Q7CisgICAgICBzdGF0aWMgY29uc3QgX1VJbnRUeXBlIG91dHB1dF9jICAgID0gX19jOworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgICBvdXRwdXRfbCAgICA9IF9fbDsKKworICAgICAgLy8gY29uc3RydWN0b3JzIGFuZCBtZW1iZXIgZnVuY3Rpb24KKyAgICAgIG1lcnNlbm5lX3R3aXN0ZXIoKQorICAgICAgeyBzZWVkKCk7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIG1lcnNlbm5lX3R3aXN0ZXIodW5zaWduZWQgbG9uZyBfX3ZhbHVlKQorICAgICAgeyBzZWVkKF9fdmFsdWUpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIG1lcnNlbm5lX3R3aXN0ZXIoX0dlbiYgX19nKQorICAgICAgICB7IHNlZWQoX19nKTsgfQorCisgICAgICB2b2lkCisgICAgICBzZWVkKCkKKyAgICAgIHsgc2VlZCg1NDg5VUwpOyB9CisKKyAgICAgIHZvaWQKKyAgICAgIHNlZWQodW5zaWduZWQgbG9uZyBfX3ZhbHVlKTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9HZW4mIF9fZykKKyAgICAgICAgeyBzZWVkKF9fZywgdHlwZW5hbWUgaXNfZnVuZGFtZW50YWw8X0dlbj46OnR5cGUoKSk7IH0KKworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9OworCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlIC0gMTsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpOworCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byAlIG1lcnNlbm5lX3R3aXN0ZXIgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0cyBvZgorICAgICAgICogdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJSBtZXJzZW5uZV90d2lzdGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgbWVyc2VubmVfdHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgbWVyc2VubmVfdHdpc3RlciYgX19saHMsCisJCSBjb25zdCBtZXJzZW5uZV90d2lzdGVyJiBfX3JocykKKyAgICAgIHsgcmV0dXJuIHN0ZDo6ZXF1YWwoX19saHMuX01feCwgX19saHMuX01feCArIHN0YXRlX3NpemUsIF9fcmhzLl9NX3gpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvICUgbWVyc2VubmVfdHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzIG9mCisgICAgICAgKiB0aGUgc2FtZSB0eXBlIGZvciBpbmVxdWFsaXR5LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2xocyBBICUgbWVyc2VubmVfdHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlIG1lcnNlbm5lX3R3aXN0ZXIgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBtZXJzZW5uZV90d2lzdGVyJiBfX2xocywKKwkJIGNvbnN0IG1lcnNlbm5lX3R3aXN0ZXImIF9fcmhzKQorICAgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJSBtZXJzZW5uZV90d2lzdGVyIHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIG1lcnNlbm5lX3R3aXN0ZXIgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZTEsIGludCBfX3cxLCBpbnQgX19uMSwgaW50IF9fbTEsIGludCBfX3IxLAorCSAgICAgICBfVUludFR5cGUxIF9fYTEsIGludCBfX3UxLCBpbnQgX19zMSwgX1VJbnRUeXBlMSBfX2IxLCBpbnQgX190MSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2MxLCBpbnQgX19sMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlMSwgX193MSwgX19uMSwgX19tMSwgX19yMSwKKwkJICAgX19hMSwgX191MSwgX19zMSwgX19iMSwgX190MSwgX19jMSwgX19sMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogRXh0cmFjdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIG1lcnNlbm5lX3R3aXN0ZXIgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIG1lcnNlbm5lX3R3aXN0ZXIgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGV4dHJhY3RlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZTEsIGludCBfX3cxLCBpbnQgX19uMSwgaW50IF9fbTEsIGludCBfX3IxLAorCSAgICAgICBfVUludFR5cGUxIF9fYTEsIGludCBfX3UxLCBpbnQgX19zMSwgX1VJbnRUeXBlMSBfX2IxLCBpbnQgX190MSwKKwkgICAgICAgX1VJbnRUeXBlMSBfX2MxLCBpbnQgX19sMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlMSwgX193MSwgX19uMSwgX19tMSwgX19yMSwKKwkJICAgX19hMSwgX191MSwgX19zMSwgX19iMSwgX190MSwgX19jMSwgX19sMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9HZW4mIF9fZywgdHJ1ZV90eXBlKQorICAgICAgICB7IHJldHVybiBzZWVkKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fZykpOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHZvaWQKKyAgICAgICAgc2VlZChfR2VuJiBfX2csIGZhbHNlX3R5cGUpOworCisgICAgICBfVUludFR5cGUgX01feFtzdGF0ZV9zaXplXTsKKyAgICAgIGludCAgICAgICBfTV9wOworICAgIH07CisKKyAgLyoqCisgICAqIFRoZSBjbGFzc2ljIE1lcnNlbm5lIFR3aXN0ZXIuCisgICAqCisgICAqIFJlZmVyZW5jZToKKyAgICogTS4gTWF0c3Vtb3RvIGFuZCBULiBOaXNoaW11cmEsIE1lcnNlbm5lIFR3aXN0ZXI6IEEgNjIzLURpbWVuc2lvbmFsbHkKKyAgICogRXF1aWRpc3RyaWJ1dGVkIFVuaWZvcm0gUHNldWRvLVJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yLCBBQ00gVHJhbnNhY3Rpb25zCisgICAqIG9uIE1vZGVsaW5nIGFuZCBDb21wdXRlciBTaW11bGF0aW9uLCBWb2wuIDgsIE5vLiAxLCBKYW51YXJ5IDE5OTgsIHBwIDMtMzAuCisgICAqLworICB0eXBlZGVmIG1lcnNlbm5lX3R3aXN0ZXI8CisgICAgdW5zaWduZWQgbG9uZywgMzIsIDYyNCwgMzk3LCAzMSwKKyAgICAweDk5MDhiMGRmdWwsIDExLCA3LAorICAgIDB4OWQyYzU2ODB1bCwgMTUsCisgICAgMHhlZmM2MDAwMHVsLCAxOAorICAgID4gbXQxOTkzNzsKKworCisgIC8qKgorICAgKiBAYnJpZWYgVGhlIE1hcnNhZ2xpYS1aYW1hbiBnZW5lcmF0b3IuCisgICAqIAorICAgKiBUaGlzIGlzIGEgbW9kZWwgb2YgYSBHZW5lcmFsaXplZCBGaWJvbmFjY2kgZGlzY3JldGUgcmFuZG9tIG51bWJlcgorICAgKiBnZW5lcmF0b3IsIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyB0aGUgU1dDIGdlbmVyYXRvci4KKyAgICoKKyAgICogQSBkaXNjcmV0ZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0aGF0IHByb2R1Y2VzIHBzZXVkb3JhbmRvbQorICAgKiBudW1iZXJzIHVzaW5nIEBmJHhfe2l9XGxlZnRhcnJvdyh4X3tpIC0gc30gLSB4X3tpIC0gcn0gLQorICAgKiBjYXJyeV97aS0xfSkgXGJtb2QgbSBAZiQuCisgICAqCisgICAqIFRoZSBzaXplIG9mIHRoZSBzdGF0ZSBpcyBAZiQgciBAZiQKKyAgICogYW5kIHRoZSBtYXhpbXVtIHBlcmlvZCBvZiB0aGUgZ2VuZXJhdG9yIGlzIEBmJCBtXnIgLSBtXnMgLTEgQGYkLgorICAgKgorICAgKiBOMTY4OFs0LjEzXSBzYXlzIDxlbT50aGUgdGVtcGxhdGUgcGFyYW1ldGVyIF9JbnRUeXBlIHNoYWxsIGRlbm90ZQorICAgKiBhbiBpbnRlZ3JhbCB0eXBlIGxhcmdlIGVub3VnaCB0byBzdG9yZSB2YWx1ZXMgdXAgdG8gbTwvZW0+LgorICAgKgorICAgKiBAdmFyIF9NX3ggICAgIFRoZSBzdGF0ZSBvZiB0aGUgZ2VuZXJhdG9yLiAgVGhpcyBpcyBhIHJpbmcgYnVmZmVyLgorICAgKiBAdmFyIF9NX2NhcnJ5IFRoZSBjYXJyeS4KKyAgICogQHZhciBfTV9wICAgICBDdXJyZW50IGluZGV4IG9mIHgoaSAtIHIpLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIF9JbnRUeXBlIF9fbSwgaW50IF9fcywgaW50IF9fcj4KKyAgICBjbGFzcyBzdWJ0cmFjdF93aXRoX2NhcnJ5CisgICAgeworICAgICAgX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKF9JbnRUeXBlLCBfSW50ZWdlckNvbmNlcHQpCisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCByYW5kb20gdmFsdWUuICovCisgICAgICB0eXBlZGVmIF9JbnRUeXBlIHJlc3VsdF90eXBlOworICAgICAgCisgICAgICAvLyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICBzdGF0aWMgY29uc3QgX0ludFR5cGUgbW9kdWx1cyAgID0gX19tOworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgIGxvbmdfbGFnICA9IF9fcjsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICBzaG9ydF9sYWcgPSBfX3M7CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhIGRlZmF1bHQtaW5pdGlhbGl6ZWQgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeSgpCisgICAgICB7IHRoaXMtPnNlZWQoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYW4gZXhwbGljaXRseSBzZWVkZWQgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHN1YnRyYWN0X3dpdGhfY2FycnkodW5zaWduZWQgbG9uZyBfX3ZhbHVlKQorICAgICAgeyB0aGlzLT5zZWVkKF9fdmFsdWUpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhICVzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZQorICAgICAgICogc2VlZGVkIGZyb20gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBAcCBfX2cuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fZyBUaGUgc2VlZCBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIHN1YnRyYWN0X3dpdGhfY2FycnkoX0dlbiYgX19nKQorICAgICAgICB7IHRoaXMtPnNlZWQoX19nKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIFNlZWRzIHRoZSBpbml0aWFsIHN0YXRlIEBmJCB4XzAgQGYkIG9mIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiBOMTY4OFs0LjE5XSBtb2RpZmllcyB0aGlzIGFzIGZvbGxvd3MuICBJZiBAcCBfX3ZhbHVlID09IDAsCisgICAgICAgKiBzZXRzIHZhbHVlIHRvIDE5NzgwNTAzLiAgSW4gYW55IGNhc2UsIHdpdGggYSBsaW5lYXIKKyAgICAgICAqIGNvbmdydWVudGlhbCBnZW5lcmF0b3IgbGNnKGkpIGhhdmluZyBwYXJhbWV0ZXJzIEBmJCBtX3tsY2d9ID0KKyAgICAgICAqIDIxNDc0ODM1NjMsIGFfe2xjZ30gPSA0MDAxNCwgY197bGNnfSA9IDAsIGFuZCBsY2coMCkgPSB2YWx1ZQorICAgICAgICogQGYkLCBzZXRzIEBmJCB4X3stcn0gXGRvdHMgeF97LTF9IEBmJCB0byBAZiQgbGNnKDEpIFxibW9kIG0KKyAgICAgICAqIFxkb3RzIGxjZyhyKSBcYm1vZCBtIEBmJCByZXNwZWN0aXZlbHkuICBJZiBAZiQgeF97LTF9ID0gMCBAZiQKKyAgICAgICAqIHNldCBjYXJyeSB0byAxLCBvdGhlcndpc2Ugc2V0cyBjYXJyeSB0byAwLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzZWVkKHVuc2lnbmVkIGxvbmcgX192YWx1ZSA9IDE5NzgwNTAzKTsKKworICAgICAgLyoqCisgICAgICAgKiBTZWVkcyB0aGUgaW5pdGlhbCBzdGF0ZSBAZiQgeF8wIEBmJCBvZiB0aGUgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5CisgICAgICAgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9HZW4mIF9fZykKKyAgICAgICAgeyBzZWVkKF9fZywgdHlwZW5hbWUgaXNfZnVuZGFtZW50YWw8X0dlbj46OnR5cGUoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBpbmNsdXNpdmUgbWluaW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2Ugb2YgcmFuZG9tIGludGVnZXJzCisgICAgICAgKiByZXR1cm5lZCBieSB0aGlzIGdlbmVyYXRvci4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgaW5jbHVzaXZlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJhbmdlIG9mIHJhbmRvbSBpbnRlZ2VycworICAgICAgICogcmV0dXJuZWQgYnkgdGhpcyBnZW5lcmF0b3IuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtYXgoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+bW9kdWx1cyAtIDE7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBuZXh0IHJhbmRvbSBudW1iZXIgaW4gdGhlIHNlcXVlbmNlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgb3BlcmF0b3IoKSgpOworCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0cyBvZgorICAgICAgICogdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICUgc3VidHJhY3Rfd2l0aF9jYXJyeSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeSYgX19saHMsCisJCSBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5JiBfX3JocykKKyAgICAgIHsgcmV0dXJuIHN0ZDo6ZXF1YWwoX19saHMuX01feCwgX19saHMuX01feCArIGxvbmdfbGFnLCBfX3Jocy5fTV94KTsgfQorCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0cyBvZgorICAgICAgICogdGhlIHNhbWUgdHlwZSBmb3IgaW5lcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCisgICAgICAgKiAgICAgICAgICAgICAgb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBub3QgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yIT0oY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeSYgX19saHMsCisJCSBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5JiBfX3JocykKKyAgICAgIHsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICUgc3VidHJhY3Rfd2l0aF9jYXJyeSByYW5kb20gbnVtYmVyCisgICAgICAgKiBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZTEsIF9JbnRUeXBlMSBfX20xLCBpbnQgX19zMSwgaW50IF9fcjEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5PF9JbnRUeXBlMSwgX19tMSwgX19zMSwKKwkJICAgX19yMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogRXh0cmFjdHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yIGVuZ2luZSBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGV4dHJhY3RlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgX0ludFR5cGUxIF9fbTEsIGludCBfX3MxLCBpbnQgX19yMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIHN1YnRyYWN0X3dpdGhfY2Fycnk8X0ludFR5cGUxLCBfX20xLCBfX3MxLCBfX3IxPiYgX194KTsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nLCB0cnVlX3R5cGUpCisgICAgICAgIHsgcmV0dXJuIHNlZWQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19nKSk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9HZW4mIF9fZywgZmFsc2VfdHlwZSk7CisKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2FkZF91bnNpZ25lZDxfSW50VHlwZT46Ol9fdHlwZSBfVUludFR5cGU7CisKKyAgICAgIF9VSW50VHlwZSAgX01feFtsb25nX2xhZ107CisgICAgICBfVUludFR5cGUgIF9NX2NhcnJ5OworICAgICAgaW50ICAgICAgICBfTV9wOworICAgIH07CisKKworICAvKioKKyAgICogQGJyaWVmIFRoZSBNYXJzYWdsaWEtWmFtYW4gZ2VuZXJhdG9yIChmbG9hdHMgdmVyc2lvbikuCisgICAqCisgICAqIEB2YXIgX01feCAgICAgVGhlIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IuICBUaGlzIGlzIGEgcmluZyBidWZmZXIuCisgICAqIEB2YXIgX01fY2FycnkgVGhlIGNhcnJ5LgorICAgKiBAdmFyIF9NX3AgICAgIEN1cnJlbnQgaW5kZXggb2YgeChpIC0gcikuCisgICAqIEB2YXIgX01fbnBvd3MgUHJlY29tcHV0ZWQgbmVnYXRpdmUgcG93ZXJzIG9mIDIuICAgCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIGludCBfX3csIGludCBfX3MsIGludCBfX3I+CisgICAgY2xhc3Mgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCByYW5kb20gdmFsdWUuICovCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKyAgICAgIAorICAgICAgLy8gcGFyYW1ldGVyIHZhbHVlcworICAgICAgc3RhdGljIGNvbnN0IGludCAgICAgIHdvcmRfc2l6ZSA9IF9fdzsKKyAgICAgIHN0YXRpYyBjb25zdCBpbnQgICAgICBsb25nX2xhZyAgPSBfX3I7CisgICAgICBzdGF0aWMgY29uc3QgaW50ICAgICAgc2hvcnRfbGFnID0gX19zOworCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSBkZWZhdWx0LWluaXRpYWxpemVkICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20KKyAgICAgICAqIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKi8KKyAgICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEoKQorICAgICAgeworCXRoaXMtPnNlZWQoKTsKKwlfTV9pbml0aWFsaXplX25wb3dzKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhbiBleHBsaWNpdGx5IHNlZWRlZCAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgcmFuZG9tIG51bWJlcgorICAgICAgICogZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSh1bnNpZ25lZCBsb25nIF9fdmFsdWUpCisgICAgICB7CisJdGhpcy0+c2VlZChfX3ZhbHVlKTsKKwlfTV9pbml0aWFsaXplX25wb3dzKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUKKyAgICAgICAqIHNlZWRlZCBmcm9tIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gQHAgX19nLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2cgVGhlIHNlZWQgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxKF9HZW4mIF9fZykKKyAgICAgICAgeworCSAgdGhpcy0+c2VlZChfX2cpOworCSAgX01faW5pdGlhbGl6ZV9ucG93cygpOwkgIAorCX0KKworICAgICAgLyoqCisgICAgICAgKiBTZWVkcyB0aGUgaW5pdGlhbCBzdGF0ZSBAZiQgeF8wIEBmJCBvZiB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHNlZWQodW5zaWduZWQgbG9uZyBfX3ZhbHVlID0gMTk3ODA1MDMpOworCisgICAgICAvKioKKyAgICAgICAqIFNlZWRzIHRoZSBpbml0aWFsIHN0YXRlIEBmJCB4XzAgQGYkIG9mIHRoZSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEKKyAgICAgICAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nKQorICAgICAgICB7IHNlZWQoX19nLCB0eXBlbmFtZSBpc19mdW5kYW1lbnRhbDxfR2VuPjo6dHlwZSgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIHJhbmdlIG9mIHJhbmRvbSBmbG9hdHMKKyAgICAgICAqIHJldHVybmVkIGJ5IHRoaXMgZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDAuMDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJhbmdlIG9mIHJhbmRvbSBmbG9hdHMKKyAgICAgICAqIHJldHVybmVkIGJ5IHRoaXMgZ2VuZXJhdG9yLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIDEuMDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG5leHQgcmFuZG9tIG51bWJlciBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBvcGVyYXRvcigpKCk7CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzCisgICAgICAgKiBvZiB0aGUgc2FtZSB0eXBlIGZvciBlcXVhbGl0eS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19saHMgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgcmFuZG9tIG51bWJlcgorICAgICAgICogICAgICAgICAgICAgIGdlbmVyYXRvciBvYmplY3QuCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHN1YnRyYWN0X3dpdGhfY2FycnlfMDEmIF9fbGhzLAorCQkgY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSYgX19yaHMpCisgICAgICB7CisJZm9yIChpbnQgX19pID0gMDsgX19pIDwgbG9uZ19sYWc7ICsrX19pKQorCSAgaWYgKCFzdGQ6OmVxdWFsKF9fbGhzLl9NX3hbX19pXSwgX19saHMuX01feFtfX2ldICsgX19uLAorCQkJICBfX3Jocy5fTV94W19faV0pKQorCSAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvYmplY3RzCisgICAgICAgKiBvZiB0aGUgc2FtZSB0eXBlIGZvciBpbmVxdWFsaXR5LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2xocyBBICUgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSByYW5kb20gbnVtYmVyCisgICAgICAgKiAgICAgICAgICAgICAgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19yaHMgQW5vdGhlciAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxJiBfX2xocywKKwkJIGNvbnN0IHN1YnRyYWN0X3dpdGhfY2FycnlfMDEmIF9fcmhzKQorICAgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlIHN1YnRyYWN0X3dpdGhfY2FycnlfMDEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIGludCBfX3cxLCBpbnQgX19zMSwgaW50IF9fcjEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZTEsIF9fdzEsIF9fczEsCisJCSAgIF9fcjE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCBpbnQgX193MSwgaW50IF9fczEsIGludCBfX3IxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxfUmVhbFR5cGUxLCBfX3cxLCBfX3MxLCBfX3IxPiYgX194KTsKKworICAgIHByaXZhdGU6CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nLCB0cnVlX3R5cGUpCisgICAgICAgIHsgcmV0dXJuIHNlZWQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19nKSk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZAorICAgICAgICBzZWVkKF9HZW4mIF9fZywgZmFsc2VfdHlwZSk7CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfbnBvd3MoKTsKKworICAgICAgc3RhdGljIGNvbnN0IGludCBfX24gPSAoX193ICsgMzEpIC8gMzI7CisKKyAgICAgIHR5cGVkZWYgX19kZXRhaWw6Ol9VSW50MzJUeXBlIF9VSW50MzJUeXBlOworICAgICAgX1VJbnQzMlR5cGUgIF9NX3hbbG9uZ19sYWddW19fbl07CisgICAgICBfUmVhbFR5cGUgICAgX01fbnBvd3NbX19uXTsKKyAgICAgIF9VSW50MzJUeXBlICBfTV9jYXJyeTsKKyAgICAgIGludCAgICAgICAgICBfTV9wOworICAgIH07CisKKyAgdHlwZWRlZiBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPGZsb2F0LCAyNCwgMTAsIDI0PiAgIHJhbmx1eF9iYXNlXzAxOworCisgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKKyAgLy8gNTA4LiBCYWQgcGFyYW1ldGVycyBmb3IgcmFubHV4NjRfYmFzZV8wMS4KKyAgdHlwZWRlZiBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPGRvdWJsZSwgNDgsIDUsIDEyPiByYW5sdXg2NF9iYXNlXzAxOyAgCisKKworICAvKioKKyAgICogUHJvZHVjZXMgcmFuZG9tIG51bWJlcnMgZnJvbSBzb21lIGJhc2UgZW5naW5lIGJ5IGRpc2NhcmRpbmcgYmxvY2tzIG9mCisgICAqIGRhdGEuCisgICAqCisgICAqIDAgPD0gQHAgX19yIDw9IEBwIF9fcAorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGludCBfX3AsIGludCBfX3I+CisgICAgY2xhc3MgZGlzY2FyZF9ibG9jaworICAgIHsKKyAgICAgIC8vIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyh0eXBlbmFtZSBiYXNlX3R5cGU6OnJlc3VsdF90eXBlLAorICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEFyaXRobWV0aWNUeXBlQ29uY2VwdCkKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lLiAqLworICAgICAgdHlwZWRlZiBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciAgIGJhc2VfdHlwZTsKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSB2YWx1ZS4gKi8KKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFzZV90eXBlOjpyZXN1bHRfdHlwZSByZXN1bHRfdHlwZTsKKworICAgICAgLy8gcGFyYW1ldGVyIHZhbHVlcworICAgICAgc3RhdGljIGNvbnN0IGludCBibG9ja19zaXplID0gX19wOworICAgICAgc3RhdGljIGNvbnN0IGludCB1c2VkX2Jsb2NrID0gX19yOworCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSBkZWZhdWx0ICVkaXNjYXJkX2Jsb2NrIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBUaGUgdW5kZXJseWluZyBlbmdpbmUgaXMgZGVmYXVsdCBjb25zdHJ1Y3RlZCBhcyB3ZWxsLgorICAgICAgICovCisgICAgICBkaXNjYXJkX2Jsb2NrKCkKKyAgICAgIDogX01fbigwKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBDb3B5IGNvbnN0cnVjdHMgYSAlZGlzY2FyZF9ibG9jayBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29waWVzIGFuIGV4aXN0aW5nIGJhc2UgY2xhc3MgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICAgICAgKiBAcGFyYW0gcm5nIEFuIGV4aXN0aW5nIChiYXNlIGNsYXNzKSBlbmdpbmUgb2JqZWN0LgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgZGlzY2FyZF9ibG9jayhjb25zdCBiYXNlX3R5cGUmIF9fcm5nKQorICAgICAgOiBfTV9iKF9fcm5nKSwgX01fbigwKSB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBTZWVkIGNvbnN0cnVjdHMgYSAlZGlzY2FyZF9ibG9jayBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQ29uc3RydWN0cyB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lIHNlZWRlZCB3aXRoIEBwIF9fcy4KKyAgICAgICAqIEBwYXJhbSBfX3MgQSBzZWVkIHZhbHVlIGZvciB0aGUgYmFzZSBjbGFzcyBlbmdpbmUuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBkaXNjYXJkX2Jsb2NrKHVuc2lnbmVkIGxvbmcgX19zKQorICAgICAgOiBfTV9iKF9fcyksIF9NX24oMCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2VuZXJhdG9yIGNvbnN0cnVjdCBhICVkaXNjYXJkX2Jsb2NrIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19nIEEgc2VlZCBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9HZW4+CisgICAgICAgIGRpc2NhcmRfYmxvY2soX0dlbiYgX19nKQorCTogX01fYihfX2cpLCBfTV9uKDApIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIFJlc2VlZHMgdGhlICVkaXNjYXJkX2Jsb2NrIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHNlZWQgZm9yIHRoZQorICAgICAgICogdW5kZXJseWluZyBiYXNlIGNsYXNzIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKi8KKyAgICAgIHZvaWQgc2VlZCgpCisgICAgICB7CisJX01fYi5zZWVkKCk7CisJX01fbiA9IDA7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZWVkcyB0aGUgJWRpc2NhcmRfYmxvY2sgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNlZWQgZ2VuZXJhdG9yCisgICAgICAgKiBmdW5jdGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX2cgQSBzZWVkIGdlbmVyYXRvciBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0dlbj4KKyAgICAgICAgdm9pZCBzZWVkKF9HZW4mIF9fZykKKyAgICAgICAgeworCSAgX01fYi5zZWVkKF9fZyk7CisJICBfTV9uID0gMDsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZW5naW5lIG9iamVjdC4KKyAgICAgICAqLworICAgICAgY29uc3QgYmFzZV90eXBlJgorICAgICAgYmFzZSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9iOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgZ2VuZXJhdGVkIHJhbmRvbSBudW1iZXIgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYi5taW4oKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIGdlbmVyYXRlZCByYW5kb20gbnVtYmVyIHJhbmdlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2IubWF4KCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoKTsKKworICAgICAgLyoqCisgICAgICAgKiBDb21wYXJlcyB0d28gJWRpc2NhcmRfYmxvY2sgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0cyBvZgorICAgICAgICogdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJWRpc2NhcmRfYmxvY2sgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJWRpc2NhcmRfYmxvY2sgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IGRpc2NhcmRfYmxvY2smIF9fbGhzLCBjb25zdCBkaXNjYXJkX2Jsb2NrJiBfX3JocykKKyAgICAgIHsgcmV0dXJuIChfX2xocy5fTV9iID09IF9fcmhzLl9NX2IpICYmIChfX2xocy5fTV9uID09IF9fcmhzLl9NX24pOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQ29tcGFyZXMgdHdvICVkaXNjYXJkX2Jsb2NrIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdHMgb2YKKyAgICAgICAqIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJWRpc2NhcmRfYmxvY2sgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0LgorICAgICAgICogQHBhcmFtIF9fcmhzIEFub3RoZXIgJWRpc2NhcmRfYmxvY2sgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAqICAgICAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICovCisgICAgICBmcmllbmQgYm9vbAorICAgICAgb3BlcmF0b3IhPShjb25zdCBkaXNjYXJkX2Jsb2NrJiBfX2xocywgY29uc3QgZGlzY2FyZF9ibG9jayYgX19yaHMpCisgICAgICB7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEluc2VydHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSAlZGlzY2FyZF9ibG9jayByYW5kb20gbnVtYmVyCisgICAgICAgKiBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWRpc2NhcmRfYmxvY2sgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgaW50IF9fcDEsIGludCBfX3IxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgZGlzY2FyZF9ibG9jazxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsCisJCSAgIF9fcDEsIF9fcjE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJSBzdWJ0cmFjdF93aXRoX2NhcnJ5IHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWRpc2NhcmRfYmxvY2sgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGV4dHJhY3RlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgaW50IF9fcDEsIGludCBfX3IxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgZGlzY2FyZF9ibG9jazxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsCisJCSAgIF9fcDEsIF9fcjE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIGJhc2VfdHlwZSBfTV9iOworICAgICAgaW50ICAgICAgIF9NX247CisgICAgfTsKKworCisgIC8qKgorICAgKiBKYW1lcydzIGx1eHVyeS1sZXZlbC0zIGludGVnZXIgYWRhcHRhdGlvbiBvZiBMdWVzY2hlcidzIGdlbmVyYXRvci4KKyAgICovCisgIHR5cGVkZWYgZGlzY2FyZF9ibG9jazwKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5PHVuc2lnbmVkIGxvbmcsICgxVUwgPDwgMjQpLCAxMCwgMjQ+LAorICAgICAgMjIzLAorICAgICAgMjQKKyAgICAgID4gcmFubHV4MzsKKworICAvKioKKyAgICogSmFtZXMncyBsdXh1cnktbGV2ZWwtNCBpbnRlZ2VyIGFkYXB0YXRpb24gb2YgTHVlc2NoZXIncyBnZW5lcmF0b3IuCisgICAqLworICB0eXBlZGVmIGRpc2NhcmRfYmxvY2s8CisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeTx1bnNpZ25lZCBsb25nLCAoMVVMIDw8IDI0KSwgMTAsIDI0PiwKKyAgICAgIDM4OSwKKyAgICAgIDI0CisgICAgICA+IHJhbmx1eDQ7CisKKyAgdHlwZWRlZiBkaXNjYXJkX2Jsb2NrPAorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8ZmxvYXQsIDI0LCAxMCwgMjQ+LAorICAgICAgMjIzLAorICAgICAgMjQKKyAgICAgID4gcmFubHV4M18wMTsKKworICB0eXBlZGVmIGRpc2NhcmRfYmxvY2s8CisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxmbG9hdCwgMjQsIDEwLCAyND4sCisgICAgICAzODksCisgICAgICAyNAorICAgICAgPiByYW5sdXg0XzAxOworCisKKyAgLyoqCisgICAqIEEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYWRhcHRvciBjbGFzcyB0aGF0IGNvbWJpbmVzIHR3byByYW5kb20gbnVtYmVyCisgICAqIGdlbmVyYXRvciBlbmdpbmVzIGludG8gYSBzaW5nbGUgb3V0cHV0IHNlcXVlbmNlLgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBpbnQgX19zMSwKKwkgICBjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIsIGludCBfX3MyPgorICAgIGNsYXNzIHhvcl9jb21iaW5lCisgICAgeworICAgICAgLy8gX19nbGliY3h4X2NsYXNzX3JlcXVpcmVzKHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMTo6CisgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUsIEFyaXRobWV0aWNUeXBlQ29uY2VwdCkKKyAgICAgIC8vIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyh0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjI6OgorICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlLCBBcml0aG1ldGljVHlwZUNvbmNlcHQpCisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGZpcnN0IHVuZGVybHlpbmcgZ2VuZXJhdG9yIGVuZ2luZS4gKi8KKyAgICAgIHR5cGVkZWYgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxICAgYmFzZTFfdHlwZTsKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgc2Vjb25kIHVuZGVybHlpbmcgZ2VuZXJhdG9yIGVuZ2luZS4gKi8KKyAgICAgIHR5cGVkZWYgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyICAgYmFzZTJfdHlwZTsKKworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2UxX3R5cGU6OnJlc3VsdF90eXBlIF9SZXN1bHRfdHlwZTE7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGJhc2UyX3R5cGU6OnJlc3VsdF90eXBlIF9SZXN1bHRfdHlwZTI7CisKKyAgICBwdWJsaWM6CisgICAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGdlbmVyYXRlZCByYW5kb20gdmFsdWUuICovCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19jb25kaXRpb25hbF90eXBlPChzaXplb2YoX1Jlc3VsdF90eXBlMSkKKwkJCQkJCSAgICAgID4gc2l6ZW9mKF9SZXN1bHRfdHlwZTIpKSwKKwlfUmVzdWx0X3R5cGUxLCBfUmVzdWx0X3R5cGUyPjo6X190eXBlIHJlc3VsdF90eXBlOworCisgICAgICAvLyBwYXJhbWV0ZXIgdmFsdWVzCisgICAgICBzdGF0aWMgY29uc3QgaW50IHNoaWZ0MSA9IF9fczE7CisgICAgICBzdGF0aWMgY29uc3QgaW50IHNoaWZ0MiA9IF9fczI7CisKKyAgICAgIC8vIGNvbnN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9uCisgICAgICB4b3JfY29tYmluZSgpCisgICAgICA6IF9NX2IxKCksIF9NX2IyKCkJCisgICAgICB7IF9NX2luaXRpYWxpemVfbWF4KCk7IH0KKworICAgICAgeG9yX2NvbWJpbmUoY29uc3QgYmFzZTFfdHlwZSYgX19ybmcxLCBjb25zdCBiYXNlMl90eXBlJiBfX3JuZzIpCisgICAgICA6IF9NX2IxKF9fcm5nMSksIF9NX2IyKF9fcm5nMikKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tYXgoKTsgfQorCisgICAgICB4b3JfY29tYmluZSh1bnNpZ25lZCBsb25nIF9fcykKKyAgICAgIDogX01fYjEoX19zKSwgX01fYjIoX19zICsgMSkKKyAgICAgIHsgX01faW5pdGlhbGl6ZV9tYXgoKTsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB4b3JfY29tYmluZShfR2VuJiBfX2cpCisJOiBfTV9iMShfX2cpLCBfTV9iMihfX2cpCisgICAgICAgIHsgX01faW5pdGlhbGl6ZV9tYXgoKTsgfQorCisgICAgICB2b2lkCisgICAgICBzZWVkKCkKKyAgICAgIHsKKwlfTV9iMS5zZWVkKCk7CisJX01fYjIuc2VlZCgpOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgICB2b2lkCisgICAgICAgIHNlZWQoX0dlbiYgX19nKQorICAgICAgICB7CisJICBfTV9iMS5zZWVkKF9fZyk7CisJICBfTV9iMi5zZWVkKF9fZyk7CisJfQorCisgICAgICBjb25zdCBiYXNlMV90eXBlJgorICAgICAgYmFzZTEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fYjE7IH0KKworICAgICAgY29uc3QgYmFzZTJfdHlwZSYKKyAgICAgIGJhc2UyKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2IyOyB9CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBtaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gMDsgfQorCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21heDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIG5leHQgcmFuZG9tIG51bWJlciBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIC8vIE5COiBOb3QgZXhhY3RseSB0aGUgVFIxIGZvcm11bGEsIHBlciBOMjA3OSBpbnN0ZWFkLgorICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoKQorICAgICAgeworCXJldHVybiAoKHJlc3VsdF90eXBlKF9NX2IxKCkgLSBfTV9iMS5taW4oKSkgPDwgc2hpZnQxKQorCQleIChyZXN1bHRfdHlwZShfTV9iMigpIC0gX01fYjIubWluKCkpIDw8IHNoaWZ0MikpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIENvbXBhcmVzIHR3byAleG9yX2NvbWJpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb2JqZWN0cyBvZgorICAgICAgICogdGhlIHNhbWUgdHlwZSBmb3IgZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJXhvcl9jb21iaW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICV4b3JfY29tYmluZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAqLworICAgICAgZnJpZW5kIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgeG9yX2NvbWJpbmUmIF9fbGhzLCBjb25zdCB4b3JfY29tYmluZSYgX19yaHMpCisgICAgICB7CisJcmV0dXJuIChfX2xocy5iYXNlMSgpID09IF9fcmhzLmJhc2UxKCkpCisJICAgICAgICAmJiAoX19saHMuYmFzZTIoKSA9PSBfX3Jocy5iYXNlMigpKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBDb21wYXJlcyB0d28gJXhvcl9jb21iaW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdHMgb2YKKyAgICAgICAqIHRoZSBzYW1lIHR5cGUgZm9yIGluZXF1YWxpdHkuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fbGhzIEEgJXhvcl9jb21iaW5lIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9iamVjdC4KKyAgICAgICAqIEBwYXJhbSBfX3JocyBBbm90aGVyICV4b3JfY29tYmluZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgorICAgICAgICogICAgICAgICAgICAgIG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICAgKi8KKyAgICAgIGZyaWVuZCBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IHhvcl9jb21iaW5lJiBfX2xocywgY29uc3QgeG9yX2NvbWJpbmUmIF9fcmhzKQorICAgICAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgJXhvcl9jb21iaW5lIHJhbmRvbSBudW1iZXIKKyAgICAgICAqIGdlbmVyYXRvciBlbmdpbmUgQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAleG9yX2NvbWJpbmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMTEsIGludCBfX3MxMSwKKwkgICAgICAgY2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyMSwgaW50IF9fczIxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgeG9yX2NvbWJpbmU8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxMSwgX19zMTEsCisJCSAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMjEsIF9fczIxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhICV4b3JfY29tYmluZSByYW5kb20gbnVtYmVyCisgICAgICAgKiBnZW5lcmF0b3IgZW5naW5lIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICV4b3JfY29tYmluZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggZXh0cmFjdGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxMSwgaW50IF9fczExLAorCSAgICAgICBjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIxLCBpbnQgX19zMjEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICB4b3JfY29tYmluZTxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjExLCBfX3MxMSwKKwkJICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyMSwgX19zMjE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemVfbWF4KCk7CisKKyAgICAgIHJlc3VsdF90eXBlCisgICAgICBfTV9pbml0aWFsaXplX21heF9hdXgocmVzdWx0X3R5cGUsIHJlc3VsdF90eXBlLCBpbnQpOworCisgICAgICBiYXNlMV90eXBlICBfTV9iMTsKKyAgICAgIGJhc2UyX3R5cGUgIF9NX2IyOworICAgICAgcmVzdWx0X3R5cGUgX01fbWF4OworICAgIH07CisKKworICAvKioKKyAgICogQSBzdGFuZGFyZCBpbnRlcmZhY2UgdG8gYSBwbGF0Zm9ybS1zcGVjaWZpYyBub24tZGV0ZXJtaW5pc3RpYworICAgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoaWYgYW55IGFyZSBhdmFpbGFibGUpLgorICAgKi8KKyAgY2xhc3MgcmFuZG9tX2RldmljZQorICB7CisgIHB1YmxpYzoKKyAgICAvLyB0eXBlcworICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHJlc3VsdF90eXBlOworCisgICAgLy8gY29uc3RydWN0b3JzLCBkZXN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9ucworCisjaWZkZWYgX0dMSUJDWFhfVVNFX1JBTkRPTV9UUjEKKworICAgIGV4cGxpY2l0CisgICAgcmFuZG9tX2RldmljZShjb25zdCBzdGQ6OnN0cmluZyYgX190b2tlbiA9ICIvZGV2L3VyYW5kb20iKQorICAgIHsKKyAgICAgIGlmICgoX190b2tlbiAhPSAiL2Rldi91cmFuZG9tIiAmJiBfX3Rva2VuICE9ICIvZGV2L3JhbmRvbSIpCisJICB8fCAhKF9NX2ZpbGUgPSBzdGQ6OmZvcGVuKF9fdG9rZW4uY19zdHIoKSwgInJiIikpKQorCXN0ZDo6X190aHJvd19ydW50aW1lX2Vycm9yKF9fTigicmFuZG9tX2RldmljZTo6IgorCQkJCSAgICAgICAicmFuZG9tX2RldmljZShjb25zdCBzdGQ6OnN0cmluZyYpIikpOworICAgIH0KKworICAgIH5yYW5kb21fZGV2aWNlKCkKKyAgICB7IHN0ZDo6ZmNsb3NlKF9NX2ZpbGUpOyB9CisKKyNlbHNlCisKKyAgICBleHBsaWNpdAorICAgIHJhbmRvbV9kZXZpY2UoY29uc3Qgc3RkOjpzdHJpbmcmIF9fdG9rZW4gPSAibXQxOTkzNyIpCisgICAgOiBfTV9tdChfTV9zdHJ0b3VsKF9fdG9rZW4pKSB7IH0KKworICBwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nCisgICAgX01fc3RydG91bChjb25zdCBzdGQ6OnN0cmluZyYgX19zdHIpCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBfX3JldCA9IDU0ODlVTDsKKyAgICAgIGlmIChfX3N0ciAhPSAibXQxOTkzNyIpCisJeworCSAgY29uc3QgY2hhciogX19ucHRyID0gX19zdHIuY19zdHIoKTsKKwkgIGNoYXIqIF9fZW5kcHRyOworCSAgX19yZXQgPSBzdGQ6OnN0cnRvdWwoX19ucHRyLCAmX19lbmRwdHIsIDApOworCSAgaWYgKCpfX25wdHIgPT0gJ1wwJyB8fCAqX19lbmRwdHIgIT0gJ1wwJykKKwkgICAgc3RkOjpfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJyYW5kb21fZGV2aWNlOjpfTV9zdHJ0b3VsIgorCQkJCQkgICAiKGNvbnN0IHN0ZDo6c3RyaW5nJikiKSk7CisJfQorICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0KKworICBwdWJsaWM6CisKKyNlbmRpZgorCisgICAgcmVzdWx0X3R5cGUKKyAgICBtaW4oKSBjb25zdAorICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptaW4oKTsgfQorCisgICAgcmVzdWx0X3R5cGUKKyAgICBtYXgoKSBjb25zdAorICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8cmVzdWx0X3R5cGU+OjptYXgoKTsgfQorCisgICAgZG91YmxlCisgICAgZW50cm9weSgpIGNvbnN0CisgICAgeyByZXR1cm4gMC4wOyB9CisKKyAgICByZXN1bHRfdHlwZQorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfUkFORE9NX1RSMQorICAgICAgcmVzdWx0X3R5cGUgX19yZXQ7CisgICAgICBzdGQ6OmZyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZfX3JldCksIHNpemVvZihyZXN1bHRfdHlwZSksCisJCSAxLCBfTV9maWxlKTsKKyAgICAgIHJldHVybiBfX3JldDsKKyNlbHNlCisgICAgICByZXR1cm4gX01fbXQoKTsKKyNlbmRpZgorICAgIH0KKworICBwcml2YXRlOgorICAgIHJhbmRvbV9kZXZpY2UoY29uc3QgcmFuZG9tX2RldmljZSYpOworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHJhbmRvbV9kZXZpY2UmKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9SQU5ET01fVFIxCisgICAgRklMRSogICAgICAgIF9NX2ZpbGU7CisjZWxzZQorICAgIG10MTk5MzcgICAgICBfTV9tdDsKKyNlbmRpZgorICB9OworCisgIC8qIEB9ICovIC8vIGdyb3VwIHRyMV9yYW5kb21fZ2VuZXJhdG9ycworCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCB0cjFfcmFuZG9tX2Rpc3RyaWJ1dGlvbnMgUmFuZG9tIE51bWJlciBEaXN0cmlidXRpb25zCisgICAqIEBpbmdyb3VwIHRyMV9yYW5kb20KKyAgICogQHsKKyAgICovCisKKyAgLyoqCisgICAqIEBhZGR0b2dyb3VwIHRyMV9yYW5kb21fZGlzdHJpYnV0aW9uc19kaXNjcmV0ZSBEaXNjcmV0ZSBEaXN0cmlidXRpb25zCisgICAqIEBpbmdyb3VwIHRyMV9yYW5kb21fZGlzdHJpYnV0aW9ucworICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogQGJyaWVmIFVuaWZvcm0gZGlzY3JldGUgZGlzdHJpYnV0aW9uIGZvciByYW5kb20gbnVtYmVycy4KKyAgICogQSBkaXNjcmV0ZSByYW5kb20gZGlzdHJpYnV0aW9uIG9uIHRoZSByYW5nZSBAZiRbbWluLCBtYXhdQGYkIHdpdGggZXF1YWwKKyAgICogcHJvYmFiaWxpdHkgdGhyb3VnaG91dCB0aGUgcmFuZ2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSA9IGludD4KKyAgICBjbGFzcyB1bmlmb3JtX2ludAorICAgIHsKKyAgICAgIF9fZ2xpYmN4eF9jbGFzc19yZXF1aXJlcyhfSW50VHlwZSwgX0ludGVnZXJDb25jZXB0KQorIAorICAgIHB1YmxpYzoKKyAgICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfSW50VHlwZSBpbnB1dF90eXBlOworICAgICAgLyoqIFRoZSB0eXBlIG9mIHRoZSByYW5nZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiAqLworICAgICAgdHlwZWRlZiBfSW50VHlwZSByZXN1bHRfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uIG9iamVjdC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHVuaWZvcm1faW50KF9JbnRUeXBlIF9fbWluID0gMCwgX0ludFR5cGUgX19tYXggPSA5KQorICAgICAgOiBfTV9taW4oX19taW4pLCBfTV9tYXgoX19tYXgpCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX21pbiA8PSBfTV9tYXgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIGluY2x1c2l2ZSBsb3dlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uIHJhbmdlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWluKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21pbjsgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIGluY2x1c2l2ZSB1cHBlciBib3VuZCBvZiB0aGUgZGlzdHJpYnV0aW9uIHJhbmdlLgorICAgICAgICovCisgICAgICByZXN1bHRfdHlwZQorICAgICAgbWF4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21heDsgfQorCisgICAgICAvKioKKyAgICAgICAqIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uIHN0YXRlLgorICAgICAgICoKKyAgICAgICAqIERvZXMgbm90aGluZyBmb3IgdGhlIHVuaWZvcm0gaW50ZWdlciBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgeyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyBhIHVuaWZvcm1seSBkaXN0cmlidXRlZCByYW5kb20gbnVtYmVyIGluIHRoZSByYW5nZQorICAgICAgICogQGYkKG1pbiwgbWF4KUBmJC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmVzdWx0X3R5cGUKKwkgICAgX1VSZXN1bHRfdHlwZTsKKwkgIHJldHVybiBfTV9jYWxsKF9fdXJuZywgX01fbWluLCBfTV9tYXgsCisJCQkgdHlwZW5hbWUgaXNfaW50ZWdyYWw8X1VSZXN1bHRfdHlwZT46OnR5cGUoKSk7CisJfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgYSB1bmlmb3JtIHJhbmRvbSBudW1iZXIgaW4gdGhlIHJhbmdlIEBmJFswLCBuKUBmJC4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGFpbWVkIGF0IHVzZSB3aXRoIHN0ZDo6cmFuZG9tX3NodWZmbGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgICByZXN1bHRfdHlwZQorICAgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsIHJlc3VsdF90eXBlIF9fbikKKyAgICAgICAgeworCSAgdHlwZWRlZiB0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmVzdWx0X3R5cGUKKwkgICAgX1VSZXN1bHRfdHlwZTsKKwkgIHJldHVybiBfTV9jYWxsKF9fdXJuZywgMCwgX19uIC0gMSwKKwkJCSB0eXBlbmFtZSBpc19pbnRlZ3JhbDxfVVJlc3VsdF90eXBlPjo6dHlwZSgpKTsKKwl9CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyBhICV1bmlmb3JtX2ludCByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbiBAcCBfX3ggaW50byB0aGUKKyAgICAgICAqIG91dHB1dCBzdHJlYW0gQHAgb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXVuaWZvcm1faW50IHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IHVuaWZvcm1faW50PF9JbnRUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogRXh0cmFjdHMgYSAldW5pZm9ybV9pbnQgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICV1bmlmb3JtX2ludCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIHVuaWZvcm1faW50PF9JbnRUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIF9NX2NhbGwoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkJcmVzdWx0X3R5cGUgX19taW4sIHJlc3VsdF90eXBlIF9fbWF4LCB0cnVlX3R5cGUpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgX01fY2FsbChfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nLAorCQlyZXN1bHRfdHlwZSBfX21pbiwgcmVzdWx0X3R5cGUgX19tYXgsIGZhbHNlX3R5cGUpCisgICAgICAgIHsKKwkgIHJldHVybiByZXN1bHRfdHlwZSgoX191cm5nKCkgLSBfX3VybmcubWluKCkpCisJCQkgICAgIC8gKF9fdXJuZy5tYXgoKSAtIF9fdXJuZy5taW4oKSkKKwkJCSAgICAgKiAoX19tYXggLSBfX21pbiArIDEpKSArIF9fbWluOworCX0KKworICAgICAgX0ludFR5cGUgX01fbWluOworICAgICAgX0ludFR5cGUgX01fbWF4OworICAgIH07CisKKworICAvKioKKyAgICogQGJyaWVmIEEgQmVybm91bGxpIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBHZW5lcmF0ZXMgYSBzZXF1ZW5jZSBvZiB0cnVlIGFuZCBmYWxzZSB2YWx1ZXMgd2l0aCBsaWtlbGlob29kIEBmJCBwIEBmJAorICAgKiB0aGF0IHRydWUgd2lsbCBjb21lIHVwIGFuZCBAZiQgKDEgLSBwKSBAZiQgdGhhdCBmYWxzZSB3aWxsIGFwcGVhci4KKyAgICovCisgIGNsYXNzIGJlcm5vdWxsaV9kaXN0cmlidXRpb24KKyAgeworICBwdWJsaWM6CisgICAgdHlwZWRlZiBpbnQgIGlucHV0X3R5cGU7CisgICAgdHlwZWRlZiBib29sIHJlc3VsdF90eXBlOworCisgIHB1YmxpYzoKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgQmVybm91bGxpIGRpc3RyaWJ1dGlvbiB3aXRoIGxpa2VsaWhvb2QgQHAgcC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBfX3AgIFtJTl0gIFRoZSBsaWtlbGlob29kIG9mIGEgdHJ1ZSByZXN1bHQgYmVpbmcgcmV0dXJuZWQuICBNdXN0CisgICAgICogYmUgaW4gdGhlIGludGVydmFsIEBmJCBbMCwgMV0gQGYkLgorICAgICAqLworICAgIGV4cGxpY2l0CisgICAgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbihkb3VibGUgX19wID0gMC41KQorICAgIDogX01fcChfX3ApCisgICAgeyAKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVCgoX01fcCA+PSAwLjApICYmIChfTV9wIDw9IDEuMCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIEBwIHAgcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICovCisgICAgZG91YmxlCisgICAgcCgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fcDsgfQorCisgICAgLyoqCisgICAgICogUmVzZXRzIHRoZSBkaXN0cmlidXRpb24gc3RhdGUuCisgICAgICoKKyAgICAgKiBEb2VzIG5vdGhpbmcgZm9yIGEgQmVybm91bGxpIGRpc3RyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICB2b2lkCisgICAgcmVzZXQoKSB7IH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIG5leHQgdmFsdWUgaW4gdGhlIEJlcm5vdWxsaWFuIHNlcXVlbmNlLgorICAgICAqLworICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsKKwlpZiAoKF9fdXJuZygpIC0gX191cm5nLm1pbigpKSA8IF9NX3AgKiAoX191cm5nLm1heCgpIC0gX191cm5nLm1pbigpKSkKKwkgIHJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgIC8qKgorICAgICAqIEluc2VydHMgYSAlYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAqIEBwYXJhbSBfX3ggIEEgJWJlcm5vdWxsaV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgY29uc3QgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiYgX194KTsKKworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIGEgJWJlcm5vdWxsaV9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICogQHBhcmFtIF9feCAgQSAlYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiYgX194KQorICAgICAgeyByZXR1cm4gX19pcyA+PiBfX3guX01fcDsgfQorCisgIHByaXZhdGU6CisgICAgZG91YmxlIF9NX3A7CisgIH07CisKKworICAvKioKKyAgICogQGJyaWVmIEEgZGlzY3JldGUgZ2VvbWV0cmljIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIGdlb21ldHJpYyBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzIAorICAgKiBAZiQgcChpKSA9ICgxIC0gcClwXntpLTF9IEBmJCB3aGVyZSBAZiQgcCBAZiQgaXMgdGhlIHBhcmFtZXRlciBvZiB0aGUKKyAgICogZGlzdHJpYnV0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUgPSBpbnQsIHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSBpbnB1dF90eXBlOworICAgICAgdHlwZWRlZiBfSW50VHlwZSAgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIGNvbnN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9uCisgICAgICBleHBsaWNpdAorICAgICAgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbihjb25zdCBfUmVhbFR5cGUmIF9fcCA9IF9SZWFsVHlwZSgwLjUpKQorICAgICAgOiBfTV9wKF9fcCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoKF9NX3AgPiAwLjApICYmIChfTV9wIDwgMS4wKSk7CisJX01faW5pdGlhbGl6ZSgpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEdldHMgdGhlIGRpc3RyaWJ1dGlvbiBwYXJhbWV0ZXIgQHAgcC4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBwKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3A7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzZXQoKSB7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZyk7CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyBhICVnZW9tZXRyaWNfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggaW50byB0aGUgb3V0cHV0IHN0cmVhbSBAcCBfX29zLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX29zIEFuIG91dHB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICVnZW9tZXRyaWNfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlMSwgdHlwZW5hbWUgX1JlYWxUeXBlMSwKKwkgICAgICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJCSAgIGNvbnN0IGdlb21ldHJpY19kaXN0cmlidXRpb248X0ludFR5cGUxLCBfUmVhbFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyBhICVnZW9tZXRyaWNfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBnZW9tZXRyaWNfZGlzdHJpYnV0aW9uJiBfX3gpCisgICAgICAgIHsKKwkgIF9faXMgPj4gX194Ll9NX3A7CisJICBfX3guX01faW5pdGlhbGl6ZSgpOworCSAgcmV0dXJuIF9faXM7CisJfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luaXRpYWxpemUoKQorICAgICAgeyBfTV9sb2dfcCA9IHN0ZDo6bG9nKF9NX3ApOyB9CisKKyAgICAgIF9SZWFsVHlwZSBfTV9wOworICAgICAgX1JlYWxUeXBlIF9NX2xvZ19wOworICAgIH07CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgY2xhc3Mgbm9ybWFsX2Rpc3RyaWJ1dGlvbjsKKworICAvKioKKyAgICogQGJyaWVmIEEgZGlzY3JldGUgUG9pc3NvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBQb2lzc29uIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMKKyAgICogQGYkIHAoaSkgPSBcZnJhY3ttZWFuXml9e2khfSBlXnstbWVhbn0gQGYkIHdoZXJlIEBmJCBtZWFuIEBmJCBpcyB0aGUKKyAgICogcGFyYW1ldGVyIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSA9IGludCwgdHlwZW5hbWUgX1JlYWxUeXBlID0gZG91YmxlPgorICAgIGNsYXNzIHBvaXNzb25fZGlzdHJpYnV0aW9uCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSBpbnB1dF90eXBlOworICAgICAgdHlwZWRlZiBfSW50VHlwZSAgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIGNvbnN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9uCisgICAgICBleHBsaWNpdAorICAgICAgcG9pc3Nvbl9kaXN0cmlidXRpb24oY29uc3QgX1JlYWxUeXBlJiBfX21lYW4gPSBfUmVhbFR5cGUoMSkpCisgICAgICA6IF9NX21lYW4oX19tZWFuKSwgX01fbmQoKQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9tZWFuID4gMC4wKTsKKwlfTV9pbml0aWFsaXplKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgZGlzdHJpYnV0aW9uIHBhcmFtZXRlciBAcCBtZWFuLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIG1lYW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbWVhbjsgfQorCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IF9NX25kLnJlc2V0KCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZyk7CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyBhICVwb2lzc29uX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlcG9pc3Nvbl9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIG91dHB1dCBzdHJlYW0gd2l0aCB0aGUgc3RhdGUgb2YgQHAgX194IGluc2VydGVkIG9yIGluCisgICAgICAgKiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfUmVhbFR5cGUxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGUxLCBfUmVhbFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyBhICVwb2lzc29uX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXBvaXNzb25fZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUxLCB0eXBlbmFtZSBfUmVhbFR5cGUxLAorCSAgICAgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkJICAgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGUxLCBfUmVhbFR5cGUxPiYgX194KTsKKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplKCk7CisKKyAgICAgIC8vIE5COiBVbnVzZWQgd2hlbiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxIGlzIHVuZGVmaW5lZC4KKyAgICAgIG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBfTV9uZDsKKworICAgICAgX1JlYWxUeXBlIF9NX21lYW47CisKKyAgICAgIC8vIEhvc3RzIGVpdGhlciBsb2cobWVhbikgb3IgdGhlIHRocmVzaG9sZCBvZiB0aGUgc2ltcGxlIG1ldGhvZC4KKyAgICAgIF9SZWFsVHlwZSBfTV9sbV90aHI7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgX1JlYWxUeXBlIF9NX2xmbSwgX01fc20sIF9NX2QsIF9NX3NjeCwgX01fMWN4LCBfTV9jMmIsIF9NX2NiOworI2VuZGlmCisgICAgfTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBkaXNjcmV0ZSBiaW5vbWlhbCByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICoKKyAgICogVGhlIGZvcm11bGEgZm9yIHRoZSBiaW5vbWlhbCBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzIAorICAgKiBAZiQgcChpKSA9IFxiaW5vbXtufXtpfSBwXmkgKDEgLSBwKV57dCAtIGl9IEBmJCB3aGVyZSBAZiQgdCBAZiQKKyAgICogYW5kIEBmJCBwIEBmJCBhcmUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlID0gaW50LCB0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgYmlub21pYWxfZGlzdHJpYnV0aW9uCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSBpbnB1dF90eXBlOworICAgICAgdHlwZWRlZiBfSW50VHlwZSAgcmVzdWx0X3R5cGU7CisKKyAgICAgIC8vIGNvbnN0cnVjdG9ycyBhbmQgbWVtYmVyIGZ1bmN0aW9uCisgICAgICBleHBsaWNpdAorICAgICAgYmlub21pYWxfZGlzdHJpYnV0aW9uKF9JbnRUeXBlIF9fdCA9IDEsCisJCQkgICAgY29uc3QgX1JlYWxUeXBlJiBfX3AgPSBfUmVhbFR5cGUoMC41KSkKKyAgICAgIDogX01fdChfX3QpLCBfTV9wKF9fcCksIF9NX25kKCkKKyAgICAgIHsKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoKF9NX3QgPj0gMCkgJiYgKF9NX3AgPj0gMC4wKSAmJiAoX01fcCA8PSAxLjApKTsKKwlfTV9pbml0aWFsaXplKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgZGlzdHJpYnV0aW9uIEBwIHQgcGFyYW1ldGVyLgorICAgICAgICovCisgICAgICBfSW50VHlwZQorICAgICAgdCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90OyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgZGlzdHJpYnV0aW9uIEBwIHAgcGFyYW1ldGVyLgorICAgICAgICovCisgICAgICBfUmVhbFR5cGUKKyAgICAgIHAoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fcDsgfQorCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IF9NX25kLnJlc2V0KCk7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZyk7CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyBhICViaW5vbWlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWJpbm9taWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZTEsIHR5cGVuYW1lIF9SZWFsVHlwZTEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUxLCBfUmVhbFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyBhICViaW5vbWlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gQHAgX19pcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19pcyBBbiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiBAcGFyYW0gX194ICBBICViaW5vbWlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZW5naW5lLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBpbnB1dCBzdHJlYW0gd2l0aCBAcCBfX3ggZXh0cmFjdGVkIG9yIGluIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZTEsIHR5cGVuYW1lIF9SZWFsVHlwZTEsCisJICAgICAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUxLCBfUmVhbFR5cGUxPiYgX194KTsKKworICAgIHByaXZhdGU6CisgICAgICB2b2lkCisgICAgICBfTV9pbml0aWFsaXplKCk7CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgICByZXN1bHRfdHlwZQorICAgICAgICBfTV93YWl0aW5nKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcsIF9JbnRUeXBlIF9fdCk7CisKKyAgICAgIC8vIE5COiBVbnVzZWQgd2hlbiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxIGlzIHVuZGVmaW5lZC4KKyAgICAgIG5vcm1hbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiBfTV9uZDsKKworICAgICAgX1JlYWxUeXBlIF9NX3E7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgX1JlYWxUeXBlIF9NX2QxLCBfTV9kMiwgX01fczEsIF9NX3MyLCBfTV9jLAorCSAgICAgICAgX01fYTEsIF9NX2ExMjMsIF9NX3MsIF9NX2xmLCBfTV9scDFwOworI2VuZGlmCisgICAgICBfUmVhbFR5cGUgX01fcDsKKyAgICAgIF9JbnRUeXBlICBfTV90OworCisgICAgICBib29sICAgICAgX01fZWFzeTsKKyAgICB9OworCisgIC8qIEB9ICovIC8vIGdyb3VwIHRyMV9yYW5kb21fZGlzdHJpYnV0aW9uc19kaXNjcmV0ZQorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCB0cjFfcmFuZG9tX2Rpc3RyaWJ1dGlvbnNfY29udGludW91cyBDb250aW51b3VzIERpc3RyaWJ1dGlvbnMKKyAgICogQGluZ3JvdXAgdHIxX3JhbmRvbV9kaXN0cmlidXRpb25zCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiBAYnJpZWYgVW5pZm9ybSBjb250aW51b3VzIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIEEgY29udGludW91cyByYW5kb20gZGlzdHJpYnV0aW9uIG9uIHRoZSByYW5nZSBbbWluLCBtYXgpIHdpdGggZXF1YWwKKyAgICogcHJvYmFiaWxpdHkgdGhyb3VnaG91dCB0aGUgcmFuZ2UuICBUaGUgVVJORyBzaG91bGQgYmUgcmVhbC12YWx1ZWQgYW5kCisgICAqIGRlbGl2ZXIgbnVtYmVyIGluIHRoZSByYW5nZSBbMCwgMSkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgdW5pZm9ybV9yZWFsCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSBpbnB1dF90eXBlOworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSB1bmlmb3JtX3JlYWwgb2JqZWN0LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX21pbiBbSU5dICBUaGUgbG93ZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIEBwYXJhbSBfX21heCBbSU5dICBUaGUgdXBwZXIgYm91bmQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIHVuaWZvcm1fcmVhbChfUmVhbFR5cGUgX19taW4gPSBfUmVhbFR5cGUoMCksCisJCSAgIF9SZWFsVHlwZSBfX21heCA9IF9SZWFsVHlwZSgxKSkKKyAgICAgIDogX01fbWluKF9fbWluKSwgX01fbWF4KF9fbWF4KQorICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9taW4gPD0gX01fbWF4KTsKKyAgICAgIH0KKworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1pbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9taW47IH0KKworICAgICAgcmVzdWx0X3R5cGUKKyAgICAgIG1heCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9tYXg7IH0KKworICAgICAgdm9pZAorICAgICAgcmVzZXQoKSB7IH0KKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICAgIHJlc3VsdF90eXBlCisgICAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgICAgeyByZXR1cm4gKF9fdXJuZygpICogKF9NX21heCAtIF9NX21pbikpICsgX01fbWluOyB9CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyBhICV1bmlmb3JtX3JlYWwgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24gQHAgX194IGludG8gdGhlCisgICAgICAgKiBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXVuaWZvcm1fcmVhbCByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgdW5pZm9ybV9yZWFsPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIGEgJXVuaWZvcm1fcmVhbCByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJXVuaWZvcm1fcmVhbCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICB1bmlmb3JtX3JlYWw8X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICBwcml2YXRlOgorICAgICAgX1JlYWxUeXBlIF9NX21pbjsKKyAgICAgIF9SZWFsVHlwZSBfTV9tYXg7CisgICAgfTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQW4gZXhwb25lbnRpYWwgY29udGludW91cyBkaXN0cmlidXRpb24gZm9yIHJhbmRvbSBudW1iZXJzLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIGV4cG9uZW50aWFsIHByb2JhYmlsaXR5IG1hc3MgZnVuY3Rpb24gaXMgCisgICAqIEBmJCBwKHgpID0gXGxhbWJkYSBlXnstXGxhbWJkYSB4fSBAZiQuCisgICAqCisgICAqIDx0YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz0xMCBjZWxsc3BhY2luZz0wPgorICAgKiA8Y2FwdGlvbiBhbGlnbj10b3A+RGlzdHJpYnV0aW9uIFN0YXRpc3RpY3M8L2NhcHRpb24+CisgICAqIDx0cj48dGQ+TWVhbjwvdGQ+PHRkPkBmJCBcZnJhY3sxfXtcbGFtYmRhfSBAZiQ8L3RkPjwvdHI+CisgICAqIDx0cj48dGQ+TWVkaWFuPC90ZD48dGQ+QGYkIFxmcmFje1xsbiAyfXtcbGFtYmRhfSBAZiQ8L3RkPjwvdHI+CisgICAqIDx0cj48dGQ+TW9kZTwvdGQ+PHRkPkBmJCB6ZXJvIEBmJDwvdGQ+PC90cj4KKyAgICogPHRyPjx0ZD5SYW5nZTwvdGQ+PHRkPkBmJFswLCBcaW5mdHldQGYkPC90ZD48L3RyPgorICAgKiA8dHI+PHRkPlN0YW5kYXJkIERldmlhdGlvbjwvdGQ+PHRkPkBmJCBcZnJhY3sxfXtcbGFtYmRhfSBAZiQ8L3RkPjwvdHI+CisgICAqIDwvdGFibGU+CisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3MgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzCisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSBpbnB1dF90eXBlOworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgcmVzdWx0X3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYW4gZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uIHdpdGggaW52ZXJzZSBzY2FsZSBwYXJhbWV0ZXIKKyAgICAgICAqIEBmJCBcbGFtYmRhIEBmJC4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbihjb25zdCByZXN1bHRfdHlwZSYgX19sYW1iZGEgPSByZXN1bHRfdHlwZSgxKSkKKyAgICAgIDogX01fbGFtYmRhKF9fbGFtYmRhKQorICAgICAgeyAKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fbGFtYmRhID4gMCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgaW52ZXJzZSBzY2FsZSBwYXJhbWV0ZXIgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBsYW1iZGEoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbGFtYmRhOyB9CisKKyAgICAgIC8qKgorICAgICAgICogUmVzZXRzIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKgorICAgICAgICogSGFzIG5vIGVmZmVjdCBvbiBleHBvbmVudGlhbCBkaXN0cmlidXRpb25zLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpIHsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgICB7IHJldHVybiAtc3RkOjpsb2coX191cm5nKCkpIC8gX01fbGFtYmRhOyB9CisKKyAgICAgIC8qKgorICAgICAgICogSW5zZXJ0cyBhICVleHBvbmVudGlhbF9kaXN0cmlidXRpb24gcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb24KKyAgICAgICAqIEBwIF9feCBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtIEBwIF9fb3MuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fb3MgQW4gb3V0cHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggIEEgJWV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3QgZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgICAvKioKKyAgICAgICAqIEV4dHJhY3RzIGEgJWV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGZyb20gdGhlIGlucHV0IHN0cmVhbSBAcCBfX2lzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBfX2lzIEFuIGlucHV0IHN0cmVhbS4KKyAgICAgICAqIEBwYXJhbSBfX3ggQSAlZXhwb25lbnRpYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIKKyAgICAgICAqICAgICAgICAgICAgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIGV4cG9uZW50aWFsX2Rpc3RyaWJ1dGlvbiYgX194KQorICAgICAgICB7IHJldHVybiBfX2lzID4+IF9feC5fTV9sYW1iZGE7IH0KKworICAgIHByaXZhdGU6CisgICAgICByZXN1bHRfdHlwZSBfTV9sYW1iZGE7CisgICAgfTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBub3JtYWwgY29udGludW91cyBkaXN0cmlidXRpb24gZm9yIHJhbmRvbSBudW1iZXJzLgorICAgKgorICAgKiBUaGUgZm9ybXVsYSBmb3IgdGhlIG5vcm1hbCBwcm9iYWJpbGl0eSBtYXNzIGZ1bmN0aW9uIGlzIAorICAgKiBAZiQgcCh4KSA9IFxmcmFjezF9e1xzaWdtYSBcc3FydHsyIFxwaX19IAorICAgKiAgICAgICAgICAgIGVeey0gXGZyYWN7e3ggLSBtZWFufV4gezJ9fXsyIFxzaWdtYSBeIHsyfX0gfSBAZiQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUgPSBkb3VibGU+CisgICAgY2xhc3Mgbm9ybWFsX2Rpc3RyaWJ1dGlvbgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyB0eXBlcworICAgICAgdHlwZWRlZiBfUmVhbFR5cGUgaW5wdXRfdHlwZTsKKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIHJlc3VsdF90eXBlOworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMgQGYkIG1lYW4gQGYkIGFuZAorICAgICAgICogQGYkIFxzaWdtYSBAZiQuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBub3JtYWxfZGlzdHJpYnV0aW9uKGNvbnN0IHJlc3VsdF90eXBlJiBfX21lYW4gPSByZXN1bHRfdHlwZSgwKSwKKwkJCSAgY29uc3QgcmVzdWx0X3R5cGUmIF9fc2lnbWEgPSByZXN1bHRfdHlwZSgxKSkKKyAgICAgIDogX01fbWVhbihfX21lYW4pLCBfTV9zaWdtYShfX3NpZ21hKSwgX01fc2F2ZWRfYXZhaWxhYmxlKGZhbHNlKQorICAgICAgeyAKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fc2lnbWEgPiAwKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiBHZXRzIHRoZSBtZWFuIG9mIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKi8KKyAgICAgIF9SZWFsVHlwZQorICAgICAgbWVhbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9tZWFuOyB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgQGYkIFxzaWdtYSBAZiQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBzaWdtYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9zaWdtYTsgfQorCisgICAgICAvKioKKyAgICAgICAqIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpCisgICAgICB7IF9NX3NhdmVkX2F2YWlsYWJsZSA9IGZhbHNlOyB9CisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgICByZXN1bHRfdHlwZQorICAgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpOworCisgICAgICAvKioKKyAgICAgICAqIEluc2VydHMgYSAlbm9ybWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlbm9ybWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdGF0ZSBvZiBAcCBfX3ggaW5zZXJ0ZWQgb3IgaW4KKyAgICAgICAqIGFuIGVycm9yIHN0YXRlLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUxLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgICAgIGZyaWVuZCBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICAgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkJICAgY29uc3Qgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGUxPiYgX194KTsKKworICAgICAgLyoqCisgICAgICAgKiBFeHRyYWN0cyBhICVub3JtYWxfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlbm9ybWFsX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBlbmdpbmUuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgVGhlIGlucHV0IHN0cmVhbSB3aXRoIEBwIF9feCBleHRyYWN0ZWQgb3IgaW4gYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCQkgICBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZTE+JiBfX3gpOworCisgICAgcHJpdmF0ZToKKyAgICAgIHJlc3VsdF90eXBlIF9NX21lYW47CisgICAgICByZXN1bHRfdHlwZSBfTV9zaWdtYTsKKyAgICAgIHJlc3VsdF90eXBlIF9NX3NhdmVkOworICAgICAgYm9vbCAgICAgICAgX01fc2F2ZWRfYXZhaWxhYmxlOyAgICAgCisgICAgfTsKKworCisgIC8qKgorICAgKiBAYnJpZWYgQSBnYW1tYSBjb250aW51b3VzIGRpc3RyaWJ1dGlvbiBmb3IgcmFuZG9tIG51bWJlcnMuCisgICAqCisgICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgZ2FtbWEgcHJvYmFiaWxpdHkgbWFzcyBmdW5jdGlvbiBpcyAKKyAgICogQGYkIHAoeCkgPSBcZnJhY3sxfXtcR2FtbWEoXGFscGhhKX0geF57XGFscGhhIC0gMX0gZV57LXh9IEBmJC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSA9IGRvdWJsZT4KKyAgICBjbGFzcyBnYW1tYV9kaXN0cmlidXRpb24KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gdHlwZXMKKyAgICAgIHR5cGVkZWYgX1JlYWxUeXBlIGlucHV0X3R5cGU7CisgICAgICB0eXBlZGVmIF9SZWFsVHlwZSByZXN1bHRfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhIGdhbW1hIGRpc3RyaWJ1dGlvbiB3aXRoIHBhcmFtZXRlcnMgQGYkIFxhbHBoYSBAZiQuCisgICAgICAgKi8KKyAgICAgIGV4cGxpY2l0CisgICAgICBnYW1tYV9kaXN0cmlidXRpb24oY29uc3QgcmVzdWx0X3R5cGUmIF9fYWxwaGFfdmFsID0gcmVzdWx0X3R5cGUoMSkpCisgICAgICA6IF9NX2FscGhhKF9fYWxwaGFfdmFsKQorICAgICAgeyAKKwlfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fYWxwaGEgPiAwKTsKKwlfTV9pbml0aWFsaXplKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgQGYkIFxhbHBoYSBAZiQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqLworICAgICAgX1JlYWxUeXBlCisgICAgICBhbHBoYSgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9hbHBoYTsgfQorCisgICAgICAvKioKKyAgICAgICAqIFJlc2V0cyB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICByZXNldCgpIHsgfQorCisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcj4KKyAgICAgICAgcmVzdWx0X3R5cGUKKyAgICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKTsKKworICAgICAgLyoqCisgICAgICAgKiBJbnNlcnRzIGEgJWdhbW1hX2Rpc3RyaWJ1dGlvbiByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbgorICAgICAgICogQHAgX194IGludG8gdGhlIG91dHB1dCBzdHJlYW0gQHAgX19vcy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gX19vcyBBbiBvdXRwdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIFRoZSBvdXRwdXQgc3RyZWFtIHdpdGggdGhlIHN0YXRlIG9mIEBwIF9feCBpbnNlcnRlZCBvciBpbgorICAgICAgICogYW4gZXJyb3Igc3RhdGUuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZTEsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgICAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCQkgICBjb25zdCBnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlMT4mIF9feCk7CisKKyAgICAgIC8qKgorICAgICAgICogRXh0cmFjdHMgYSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZGlzdHJpYnV0aW9uCisgICAgICAgKiBAcCBfX3ggZnJvbSB0aGUgaW5wdXQgc3RyZWFtIEBwIF9faXMuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9faXMgQW4gaW5wdXQgc3RyZWFtLgorICAgICAgICogQHBhcmFtIF9feCAgQSAlZ2FtbWFfZGlzdHJpYnV0aW9uIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGVuZ2luZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBUaGUgaW5wdXQgc3RyZWFtIHdpdGggQHAgX194IGV4dHJhY3RlZCBvciBpbiBhbiBlcnJvciBzdGF0ZS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgICAgICBmcmllbmQgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJCSAgIGdhbW1hX2Rpc3RyaWJ1dGlvbiYgX194KQorICAgICAgICB7CisJICBfX2lzID4+IF9feC5fTV9hbHBoYTsKKwkgIF9feC5fTV9pbml0aWFsaXplKCk7CisJICByZXR1cm4gX19pczsKKwl9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9pZAorICAgICAgX01faW5pdGlhbGl6ZSgpOworCisgICAgICByZXN1bHRfdHlwZSBfTV9hbHBoYTsKKworICAgICAgLy8gSG9zdHMgZWl0aGVyIGxhbWJkYSBvZiBHQiBvciBkIG9mIG1vZGlmaWVkIFZhZHV2YSdzLgorICAgICAgcmVzdWx0X3R5cGUgX01fbF9kOworICAgIH07CisKKyAgLyogQH0gKi8gLy8gZ3JvdXAgdHIxX3JhbmRvbV9kaXN0cmlidXRpb25zX2NvbnRpbnVvdXMKKyAgLyogQH0gKi8gLy8gZ3JvdXAgdHIxX3JhbmRvbV9kaXN0cmlidXRpb25zCisgIC8qIEB9ICovIC8vIGdyb3VwIHRyMV9yYW5kb20KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1JBTkRPTV9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9yYW5kb20udGNjIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvcmFuZG9tLnRjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWI0ZDRkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvcmFuZG9tLnRjYwpAQCAtMCwwICsxLDE3MjEgQEAKKy8vIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiAob3V0IG9mIGxpbmUpIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKworLyoqIEBmaWxlIHRyMS9yYW5kb20udGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dHIxL3JhbmRvbX0KKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9SQU5ET01fVENDCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9SQU5ET01fVENDIDEKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CisgIC8qCisgICAqIChGdXJ0aGVyKSBpbXBsZW1lbnRhdGlvbi1zcGFjZSBkZXRhaWxzLgorICAgKi8KKyAgbmFtZXNwYWNlIF9fZGV0YWlsCisgIHsKKyAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAgIC8vIEdlbmVyYWwgY2FzZSBmb3IgeCA9IChheCArIGMpIG1vZCBtIC0tIHVzZSBTY2hyYWdlJ3MgYWxnb3JpdGhtIHRvIGF2b2lkCisgICAgLy8gaW50ZWdlciBvdmVyZmxvdy4KKyAgICAvLworICAgIC8vIEJlY2F1c2UgYSBhbmQgYyBhcmUgY29tcGlsZS10aW1lIGludGVncmFsIGNvbnN0YW50cyB0aGUgY29tcGlsZXIga2luZGx5CisgICAgLy8gZWxpZGVzIGFueSB1bnJlYWNoYWJsZSBwYXRocy4KKyAgICAvLworICAgIC8vIFByZWNvbmRpdGlvbnM6ICBhID4gMCwgbSA+IDAuCisgICAgLy8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9UcCBfX2EsIF9UcCBfX2MsIF9UcCBfX20sIGJvb2w+CisgICAgICBzdHJ1Y3QgX01vZAorICAgICAgeworCXN0YXRpYyBfVHAKKwlfX2NhbGMoX1RwIF9feCkKKwl7CisJICBpZiAoX19hID09IDEpCisJICAgIF9feCAlPSBfX207CisJICBlbHNlCisJICAgIHsKKwkgICAgICBzdGF0aWMgY29uc3QgX1RwIF9fcSA9IF9fbSAvIF9fYTsKKwkgICAgICBzdGF0aWMgY29uc3QgX1RwIF9fciA9IF9fbSAlIF9fYTsKKwkgICAgICAKKwkgICAgICBfVHAgX190MSA9IF9fYSAqIChfX3ggJSBfX3EpOworCSAgICAgIF9UcCBfX3QyID0gX19yICogKF9feCAvIF9fcSk7CisJICAgICAgaWYgKF9fdDEgPj0gX190MikKKwkJX194ID0gX190MSAtIF9fdDI7CisJICAgICAgZWxzZQorCQlfX3ggPSBfX20gLSBfX3QyICsgX190MTsKKwkgICAgfQorCisJICBpZiAoX19jICE9IDApCisJICAgIHsKKwkgICAgICBjb25zdCBfVHAgX19kID0gX19tIC0gX194OworCSAgICAgIGlmIChfX2QgPiBfX2MpCisJCV9feCArPSBfX2M7CisJICAgICAgZWxzZQorCQlfX3ggPSBfX2MgLSBfX2Q7CisJICAgIH0KKwkgIHJldHVybiBfX3g7CisJfQorICAgICAgfTsKKworICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgbSA9PSAwIC0tIHVzZSB1bnNpZ25lZCBpbnRlZ2VyIG92ZXJmbG93IGFzIG1vZHVsbworICAgIC8vIG9wZXJhdG9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgX1RwIF9fYSwgX1RwIF9fYywgX1RwIF9fbT4KKyAgICAgIHN0cnVjdCBfTW9kPF9UcCwgX19hLCBfX2MsIF9fbSwgdHJ1ZT4KKyAgICAgIHsKKwlzdGF0aWMgX1RwCisJX19jYWxjKF9UcCBfX3gpCisJeyByZXR1cm4gX19hICogX194ICsgX19jOyB9CisgICAgICB9OworICBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAgfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKKworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgY29uc3QgX1VJbnRUeXBlCisgICAgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+OjptdWx0aXBsaWVyOworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT46OmluY3JlbWVudDsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgY29uc3QgX1VJbnRUeXBlCisgICAgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+Ojptb2R1bHVzOworCisgIC8qKgorICAgKiBTZWVkcyB0aGUgTENSIHdpdGggaW50ZWdyYWwgdmFsdWUgQHAgX194MCwgYWRqdXN0ZWQgc28gdGhhdCB0aGUgCisgICAqIHJpbmcgaWRlbnRpdHkgaXMgbmV2ZXIgYSBtZW1iZXIgb2YgdGhlIGNvbnZlcmdlbmNlIHNldC4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICB2b2lkCisgICAgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+OjoKKyAgICBzZWVkKHVuc2lnbmVkIGxvbmcgX194MCkKKyAgICB7CisgICAgICBpZiAoKF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIF9fbT4oX19jKSA9PSAwKQorCSAgJiYgKF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIF9fbT4oX194MCkgPT0gMCkpCisJX01feCA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIF9fbT4oMSk7CisgICAgICBlbHNlCisJX01feCA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIF9fbT4oX194MCk7CisgICAgfQorCisgIC8qKgorICAgKiBTZWVkcyB0aGUgTENSIGVuZ2luZSB3aXRoIGEgdmFsdWUgZ2VuZXJhdGVkIGJ5IEBwIF9fZy4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbT4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgdm9pZAorICAgICAgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+OjoKKyAgICAgIHNlZWQoX0dlbiYgX19nLCBmYWxzZV90eXBlKQorICAgICAgeworCV9VSW50VHlwZSBfX3gwID0gX19nKCk7CisJaWYgKChfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCAxLCAwLCBfX20+KF9fYykgPT0gMCkKKwkgICAgJiYgKF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIF9fbT4oX194MCkgPT0gMCkpCisJICBfTV94ID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgX19tPigxKTsKKwllbHNlCisJICBfTV94ID0gX19kZXRhaWw6Ol9fbW9kPF9VSW50VHlwZSwgMSwgMCwgX19tPihfX3gwKTsKKyAgICAgIH0KKworICAvKioKKyAgICogR2V0cyB0aGUgbmV4dCBnZW5lcmF0ZWQgdmFsdWUgaW4gc2VxdWVuY2UuCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIF9VSW50VHlwZSBfX2EsIF9VSW50VHlwZSBfX2MsIF9VSW50VHlwZSBfX20+CisgICAgdHlwZW5hbWUgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+OjpyZXN1bHRfdHlwZQorICAgIGxpbmVhcl9jb25ncnVlbnRpYWw8X1VJbnRUeXBlLCBfX2EsIF9fYywgX19tPjo6CisgICAgb3BlcmF0b3IoKSgpCisgICAgeworICAgICAgX01feCA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+KF9NX3gpOworICAgICAgcmV0dXJuIF9NX3g7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgX1VJbnRUeXBlIF9fYSwgX1VJbnRUeXBlIF9fYywgX1VJbnRUeXBlIF9fbSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgbGluZWFyX2NvbmdydWVudGlhbDxfVUludFR5cGUsIF9fYSwgX19jLCBfX20+JiBfX2xjcikKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OmZpeGVkIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19vcy53aWRlbignICcpKTsKKworICAgICAgX19vcyA8PCBfX2xjci5fTV94OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBfVUludFR5cGUgX19hLCBfVUludFR5cGUgX19jLCBfVUludFR5cGUgX19tLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBsaW5lYXJfY29uZ3J1ZW50aWFsPF9VSW50VHlwZSwgX19hLCBfX2MsIF9fbT4mIF9fbGNyKQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjKTsKKworICAgICAgX19pcyA+PiBfX2xjci5fTV94OworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfSAKKworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgY29uc3QgaW50CisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+Ojp3b3JkX3NpemU7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBpbnQKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46OnN0YXRlX3NpemU7CisgICAgCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgY29uc3QgaW50CisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjpzaGlmdF9zaXplOworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgY29uc3QgaW50CisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjptYXNrX2JpdHM7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46OnBhcmFtZXRlcl9hOworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgY29uc3QgaW50CisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjpvdXRwdXRfdTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBpbnQgX190LCBfVUludFR5cGUgX19jLCBpbnQgX19sPgorICAgIGNvbnN0IGludAorICAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX3MsCisJCSAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6b3V0cHV0X3M7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBfVUludFR5cGUKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46Om91dHB1dF9iOworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgY29uc3QgaW50CisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjpvdXRwdXRfdDsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBpbnQgX190LCBfVUludFR5cGUgX19jLCBpbnQgX19sPgorICAgIGNvbnN0IF9VSW50VHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX3MsCisJCSAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6b3V0cHV0X2M7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICBjb25zdCBpbnQKKyAgICBtZXJzZW5uZV90d2lzdGVyPF9VSW50VHlwZSwgX193LCBfX24sIF9fbSwgX19yLCBfX2EsIF9fdSwgX19zLAorCQkgICAgIF9fYiwgX190LCBfX2MsIF9fbD46Om91dHB1dF9sOworCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLAorCSAgIF9VSW50VHlwZSBfX2IsIGludCBfX3QsIF9VSW50VHlwZSBfX2MsIGludCBfX2w+CisgICAgdm9pZAorICAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX3MsCisJCSAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6CisgICAgc2VlZCh1bnNpZ25lZCBsb25nIF9fdmFsdWUpCisgICAgeworICAgICAgX01feFswXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsCisJX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIF9fdz46Ol9fdmFsdWU+KF9fdmFsdWUpOworCisgICAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBzdGF0ZV9zaXplOyArK19faSkKKwl7CisJICBfVUludFR5cGUgX194ID0gX01feFtfX2kgLSAxXTsKKwkgIF9feCBePSBfX3ggPj4gKF9fdyAtIDIpOworCSAgX194ICo9IDE4MTI0MzMyNTN1bDsKKwkgIF9feCArPSBfX2k7CisJICBfTV94W19faV0gPSBfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCAxLCAwLAorCSAgICBfX2RldGFpbDo6X1NoaWZ0PF9VSW50VHlwZSwgX193Pjo6X192YWx1ZT4oX194KTsJICAKKwl9CisgICAgICBfTV9wID0gc3RhdGVfc2l6ZTsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsCisJICAgX1VJbnRUeXBlIF9fYiwgaW50IF9fdCwgX1VJbnRUeXBlIF9fYywgaW50IF9fbD4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgdm9pZAorICAgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICAgIF9fYiwgX190LCBfX2MsIF9fbD46OgorICAgICAgc2VlZChfR2VuJiBfX2dlbiwgZmFsc2VfdHlwZSkKKyAgICAgIHsKKwlmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBzdGF0ZV9zaXplOyArK19faSkKKwkgIF9NX3hbX19pXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsCisJICAgIF9fZGV0YWlsOjpfU2hpZnQ8X1VJbnRUeXBlLCBfX3c+OjpfX3ZhbHVlPihfX2dlbigpKTsKKwlfTV9wID0gc3RhdGVfc2l6ZTsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVUludFR5cGUsIGludCBfX3csIGludCBfX24sIGludCBfX20sIGludCBfX3IsCisJICAgX1VJbnRUeXBlIF9fYSwgaW50IF9fdSwgaW50IF9fcywKKwkgICBfVUludFR5cGUgX19iLCBpbnQgX190LCBfVUludFR5cGUgX19jLCBpbnQgX19sPgorICAgIHR5cGVuYW1lCisgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sIF9fciwgX19hLCBfX3UsIF9fcywKKwkJICAgICBfX2IsIF9fdCwgX19jLCBfX2w+OjpyZXN1bHRfdHlwZQorICAgIG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLCBfX3IsIF9fYSwgX191LCBfX3MsCisJCSAgICAgX19iLCBfX3QsIF9fYywgX19sPjo6CisgICAgb3BlcmF0b3IoKSgpCisgICAgeworICAgICAgLy8gUmVsb2FkIHRoZSB2ZWN0b3IgLSBjb3N0IGlzIE8obikgYW1vcnRpemVkIG92ZXIgbiBjYWxscy4KKyAgICAgIGlmIChfTV9wID49IHN0YXRlX3NpemUpCisJeworCSAgY29uc3QgX1VJbnRUeXBlIF9fdXBwZXJfbWFzayA9ICh+X1VJbnRUeXBlKCkpIDw8IF9fcjsKKwkgIGNvbnN0IF9VSW50VHlwZSBfX2xvd2VyX21hc2sgPSB+X191cHBlcl9tYXNrOworCisJICBmb3IgKGludCBfX2sgPSAwOyBfX2sgPCAoX19uIC0gX19tKTsgKytfX2spCisJICAgIHsKKwkgICAgICBfVUludFR5cGUgX195ID0gKChfTV94W19fa10gJiBfX3VwcGVyX21hc2spCisJCQkgICAgICAgfCAoX01feFtfX2sgKyAxXSAmIF9fbG93ZXJfbWFzaykpOworCSAgICAgIF9NX3hbX19rXSA9IChfTV94W19fayArIF9fbV0gXiAoX195ID4+IDEpCisJCQkgICBeICgoX195ICYgMHgwMSkgPyBfX2EgOiAwKSk7CisJICAgIH0KKworCSAgZm9yIChpbnQgX19rID0gKF9fbiAtIF9fbSk7IF9fayA8IChfX24gLSAxKTsgKytfX2spCisJICAgIHsKKwkgICAgICBfVUludFR5cGUgX195ID0gKChfTV94W19fa10gJiBfX3VwcGVyX21hc2spCisJCQkgICAgICAgfCAoX01feFtfX2sgKyAxXSAmIF9fbG93ZXJfbWFzaykpOworCSAgICAgIF9NX3hbX19rXSA9IChfTV94W19fayArIChfX20gLSBfX24pXSBeIChfX3kgPj4gMSkKKwkJCSAgIF4gKChfX3kgJiAweDAxKSA/IF9fYSA6IDApKTsKKwkgICAgfQorCisJICBfVUludFR5cGUgX195ID0gKChfTV94W19fbiAtIDFdICYgX191cHBlcl9tYXNrKQorCQkJICAgfCAoX01feFswXSAmIF9fbG93ZXJfbWFzaykpOworCSAgX01feFtfX24gLSAxXSA9IChfTV94W19fbSAtIDFdIF4gKF9feSA+PiAxKQorCQkJICAgXiAoKF9feSAmIDB4MDEpID8gX19hIDogMCkpOworCSAgX01fcCA9IDA7CisJfQorCisgICAgICAvLyBDYWxjdWxhdGUgbyh4KGkpKS4KKyAgICAgIHJlc3VsdF90eXBlIF9feiA9IF9NX3hbX01fcCsrXTsKKyAgICAgIF9feiBePSAoX196ID4+IF9fdSk7CisgICAgICBfX3ogXj0gKF9feiA8PCBfX3MpICYgX19iOworICAgICAgX196IF49IChfX3ogPDwgX190KSAmIF9fYzsKKyAgICAgIF9feiBePSAoX196ID4+IF9fbCk7CisKKyAgICAgIHJldHVybiBfX3o7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9VSW50VHlwZSwgaW50IF9fdywgaW50IF9fbiwgaW50IF9fbSwgaW50IF9fciwKKwkgICBfVUludFR5cGUgX19hLCBpbnQgX191LCBpbnQgX19zLCBfVUludFR5cGUgX19iLCBpbnQgX190LAorCSAgIF9VSW50VHlwZSBfX2MsIGludCBfX2wsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IG1lcnNlbm5lX3R3aXN0ZXI8X1VJbnRUeXBlLCBfX3csIF9fbiwgX19tLAorCSAgICAgICBfX3IsIF9fYSwgX191LCBfX3MsIF9fYiwgX190LCBfX2MsIF9fbD4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6Zml4ZWQgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKworICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19uIC0gMTsgKytfX2kpCisJX19vcyA8PCBfX3guX01feFtfX2ldIDw8IF9fc3BhY2U7CisgICAgICBfX29zIDw8IF9feC5fTV94W19fbiAtIDFdOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VJbnRUeXBlLCBpbnQgX193LCBpbnQgX19uLCBpbnQgX19tLCBpbnQgX19yLAorCSAgIF9VSW50VHlwZSBfX2EsIGludCBfX3UsIGludCBfX3MsIF9VSW50VHlwZSBfX2IsIGludCBfX3QsCisJICAgX1VJbnRUeXBlIF9fYywgaW50IF9fbCwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgbWVyc2VubmVfdHdpc3RlcjxfVUludFR5cGUsIF9fdywgX19uLCBfX20sCisJICAgICAgIF9fciwgX19hLCBfX3UsIF9fcywgX19iLCBfX3QsIF9fYywgX19sPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKKwlfX2lzID4+IF9feC5fTV94W19faV07CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgX0ludFR5cGUgX19tLCBpbnQgX19zLCBpbnQgX19yPgorICAgIGNvbnN0IF9JbnRUeXBlCisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeTxfSW50VHlwZSwgX19tLCBfX3MsIF9fcj46Om1vZHVsdXM7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIF9JbnRUeXBlIF9fbSwgaW50IF9fcywgaW50IF9fcj4KKyAgICBjb25zdCBpbnQKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5PF9JbnRUeXBlLCBfX20sIF9fcywgX19yPjo6bG9uZ19sYWc7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIF9JbnRUeXBlIF9fbSwgaW50IF9fcywgaW50IF9fcj4KKyAgICBjb25zdCBpbnQKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5PF9JbnRUeXBlLCBfX20sIF9fcywgX19yPjo6c2hvcnRfbGFnOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCBfSW50VHlwZSBfX20sIGludCBfX3MsIGludCBfX3I+CisgICAgdm9pZAorICAgIHN1YnRyYWN0X3dpdGhfY2Fycnk8X0ludFR5cGUsIF9fbSwgX19zLCBfX3I+OjoKKyAgICBzZWVkKHVuc2lnbmVkIGxvbmcgX192YWx1ZSkKKyAgICB7CisgICAgICBpZiAoX192YWx1ZSA9PSAwKQorCV9fdmFsdWUgPSAxOTc4MDUwMzsKKworICAgICAgc3RkOjp0cjE6OmxpbmVhcl9jb25ncnVlbnRpYWw8dW5zaWduZWQgbG9uZywgNDAwMTQsIDAsIDIxNDc0ODM1NjM+CisJX19sY2coX192YWx1ZSk7CisKKyAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IGxvbmdfbGFnOyArK19faSkKKwlfTV94W19faV0gPSBfX2RldGFpbDo6X19tb2Q8X1VJbnRUeXBlLCAxLCAwLCBtb2R1bHVzPihfX2xjZygpKTsKKworICAgICAgX01fY2FycnkgPSAoX01feFtsb25nX2xhZyAtIDFdID09IDApID8gMSA6IDA7CisgICAgICBfTV9wID0gMDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIF9JbnRUeXBlIF9fbSwgaW50IF9fcywgaW50IF9fcj4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgdm9pZAorICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeTxfSW50VHlwZSwgX19tLCBfX3MsIF9fcj46OgorICAgICAgc2VlZChfR2VuJiBfX2dlbiwgZmFsc2VfdHlwZSkKKyAgICAgIHsKKwljb25zdCBpbnQgX19uID0gKHN0ZDo6bnVtZXJpY19saW1pdHM8X1VJbnRUeXBlPjo6ZGlnaXRzICsgMzEpIC8gMzI7CisKKwlmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBsb25nX2xhZzsgKytfX2kpCisJICB7CisJICAgIF9VSW50VHlwZSBfX3RtcCA9IDA7CisJICAgIF9VSW50VHlwZSBfX2ZhY3RvciA9IDE7CisJICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbjsgKytfX2opCisJICAgICAgeworCQlfX3RtcCArPSBfX2RldGFpbDo6X19tb2Q8X19kZXRhaWw6Ol9VSW50MzJUeXBlLCAxLCAwLCAwPgorCQkgICAgICAgICAoX19nZW4oKSkgKiBfX2ZhY3RvcjsKKwkJX19mYWN0b3IgKj0gX19kZXRhaWw6Ol9TaGlmdDxfVUludFR5cGUsIDMyPjo6X192YWx1ZTsKKwkgICAgICB9CisJICAgIF9NX3hbX19pXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludFR5cGUsIDEsIDAsIG1vZHVsdXM+KF9fdG1wKTsKKwkgIH0KKwlfTV9jYXJyeSA9IChfTV94W2xvbmdfbGFnIC0gMV0gPT0gMCkgPyAxIDogMDsKKwlfTV9wID0gMDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgX0ludFR5cGUgX19tLCBpbnQgX19zLCBpbnQgX19yPgorICAgIHR5cGVuYW1lIHN1YnRyYWN0X3dpdGhfY2Fycnk8X0ludFR5cGUsIF9fbSwgX19zLCBfX3I+OjpyZXN1bHRfdHlwZQorICAgIHN1YnRyYWN0X3dpdGhfY2Fycnk8X0ludFR5cGUsIF9fbSwgX19zLCBfX3I+OjoKKyAgICBvcGVyYXRvcigpKCkKKyAgICB7CisgICAgICAvLyBEZXJpdmUgc2hvcnQgbGFnIGluZGV4IGZyb20gY3VycmVudCBpbmRleC4KKyAgICAgIGludCBfX3BzID0gX01fcCAtIHNob3J0X2xhZzsKKyAgICAgIGlmIChfX3BzIDwgMCkKKwlfX3BzICs9IGxvbmdfbGFnOworCisgICAgICAvLyBDYWxjdWxhdGUgbmV3IHgoaSkgd2l0aG91dCBvdmVyZmxvdyBvciBkaXZpc2lvbi4KKyAgICAgIC8vIE5COiBUaGFua3MgdG8gdGhlIHJlcXVpcmVtZW50cyBmb3IgX0ludFR5cGUsIF9NX3hbX01fcF0gKyBfTV9jYXJyeQorICAgICAgLy8gY2Fubm90IG92ZXJmbG93LgorICAgICAgX1VJbnRUeXBlIF9feGk7CisgICAgICBpZiAoX01feFtfX3BzXSA+PSBfTV94W19NX3BdICsgX01fY2FycnkpCisJeworCSAgX194aSA9IF9NX3hbX19wc10gLSBfTV94W19NX3BdIC0gX01fY2Fycnk7CisJICBfTV9jYXJyeSA9IDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9feGkgPSBtb2R1bHVzIC0gX01feFtfTV9wXSAtIF9NX2NhcnJ5ICsgX01feFtfX3BzXTsKKwkgIF9NX2NhcnJ5ID0gMTsKKwl9CisgICAgICBfTV94W19NX3BdID0gX194aTsKKworICAgICAgLy8gQWRqdXN0IGN1cnJlbnQgaW5kZXggdG8gbG9vcCBhcm91bmQgaW4gcmluZyBidWZmZXIuCisgICAgICBpZiAoKytfTV9wID49IGxvbmdfbGFnKQorCV9NX3AgPSAwOworCisgICAgICByZXR1cm4gX194aTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIF9JbnRUeXBlIF9fbSwgaW50IF9fcywgaW50IF9fciwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qgc3VidHJhY3Rfd2l0aF9jYXJyeTxfSW50VHlwZSwgX19tLCBfX3MsIF9fcj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6Zml4ZWQgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKworICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19yOyArK19faSkKKwlfX29zIDw8IF9feC5fTV94W19faV0gPDwgX19zcGFjZTsKKyAgICAgIF9fb3MgPDwgX194Ll9NX2NhcnJ5OworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIF9JbnRUeXBlIF9fbSwgaW50IF9fcywgaW50IF9fciwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeTxfSW50VHlwZSwgX19tLCBfX3MsIF9fcj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcjsgKytfX2kpCisJX19pcyA+PiBfX3guX01feFtfX2ldOworICAgICAgX19pcyA+PiBfX3guX01fY2Fycnk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIGludCBfX3csIGludCBfX3MsIGludCBfX3I+CisgICAgY29uc3QgaW50CisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxfUmVhbFR5cGUsIF9fdywgX19zLCBfX3I+Ojp3b3JkX3NpemU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCBpbnQgX193LCBpbnQgX19zLCBpbnQgX19yPgorICAgIGNvbnN0IGludAorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8X1JlYWxUeXBlLCBfX3csIF9fcywgX19yPjo6bG9uZ19sYWc7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCBpbnQgX193LCBpbnQgX19zLCBpbnQgX19yPgorICAgIGNvbnN0IGludAorICAgIHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8X1JlYWxUeXBlLCBfX3csIF9fcywgX19yPjo6c2hvcnRfbGFnOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgaW50IF9fdywgaW50IF9fcywgaW50IF9fcj4KKyAgICB2b2lkCisgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxfUmVhbFR5cGUsIF9fdywgX19zLCBfX3I+OjoKKyAgICBfTV9pbml0aWFsaXplX25wb3dzKCkKKyAgICB7CisgICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX247ICsrX19qKQorI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKwlfTV9ucG93c1tfX2pdID0gc3RkOjp0cjE6OmxkZXhwKF9SZWFsVHlwZSgxKSwgLV9fdyArIF9faiAqIDMyKTsKKyNlbHNlCisgICAgICAgIF9NX25wb3dzW19fal0gPSBzdGQ6OnBvdyhfUmVhbFR5cGUoMiksIC1fX3cgKyBfX2ogKiAzMik7CisjZW5kaWYKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCBpbnQgX193LCBpbnQgX19zLCBpbnQgX19yPgorICAgIHZvaWQKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZSwgX193LCBfX3MsIF9fcj46OgorICAgIHNlZWQodW5zaWduZWQgbG9uZyBfX3ZhbHVlKQorICAgIHsKKyAgICAgIGlmIChfX3ZhbHVlID09IDApCisJX192YWx1ZSA9IDE5NzgwNTAzOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA1MTIuIFNlZWRpbmcgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMSBmcm9tIGEgc2luZ2xlIHVuc2lnbmVkIGxvbmcuCisgICAgICBzdGQ6OnRyMTo6bGluZWFyX2NvbmdydWVudGlhbDx1bnNpZ25lZCBsb25nLCA0MDAxNCwgMCwgMjE0NzQ4MzU2Mz4KKwlfX2xjZyhfX3ZhbHVlKTsKKworICAgICAgdGhpcy0+c2VlZChfX2xjZyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgaW50IF9fdywgaW50IF9fcywgaW50IF9fcj4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBfR2VuPgorICAgICAgdm9pZAorICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxfUmVhbFR5cGUsIF9fdywgX19zLCBfX3I+OjoKKyAgICAgIHNlZWQoX0dlbiYgX19nZW4sIGZhbHNlX3R5cGUpCisgICAgICB7CisJZm9yIChpbnQgX19pID0gMDsgX19pIDwgbG9uZ19sYWc7ICsrX19pKQorCSAgeworCSAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX24gLSAxOyArK19faikKKwkgICAgICBfTV94W19faV1bX19qXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludDMyVHlwZSwgMSwgMCwgMD4oX19nZW4oKSk7CisJICAgIF9NX3hbX19pXVtfX24gLSAxXSA9IF9fZGV0YWlsOjpfX21vZDxfVUludDMyVHlwZSwgMSwgMCwKKwkgICAgICBfX2RldGFpbDo6X1NoaWZ0PF9VSW50MzJUeXBlLCBfX3cgJSAzMj46Ol9fdmFsdWU+KF9fZ2VuKCkpOworCSAgfQorCisJX01fY2FycnkgPSAxOworCWZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbjsgKytfX2opCisJICBpZiAoX01feFtsb25nX2xhZyAtIDFdW19fal0gIT0gMCkKKwkgICAgeworCSAgICAgIF9NX2NhcnJ5ID0gMDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJX01fcCA9IDA7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCBpbnQgX193LCBpbnQgX19zLCBpbnQgX19yPgorICAgIHR5cGVuYW1lIHN1YnRyYWN0X3dpdGhfY2FycnlfMDE8X1JlYWxUeXBlLCBfX3csIF9fcywgX19yPjo6cmVzdWx0X3R5cGUKKyAgICBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZSwgX193LCBfX3MsIF9fcj46OgorICAgIG9wZXJhdG9yKCkoKQorICAgIHsKKyAgICAgIC8vIERlcml2ZSBzaG9ydCBsYWcgaW5kZXggZnJvbSBjdXJyZW50IGluZGV4LgorICAgICAgaW50IF9fcHMgPSBfTV9wIC0gc2hvcnRfbGFnOworICAgICAgaWYgKF9fcHMgPCAwKQorCV9fcHMgKz0gbG9uZ19sYWc7CisKKyAgICAgIF9VSW50MzJUeXBlIF9fbmV3X2NhcnJ5OworICAgICAgZm9yIChpbnQgX19qID0gMDsgX19qIDwgX19uIC0gMTsgKytfX2opCisJeworCSAgaWYgKF9NX3hbX19wc11bX19qXSA+IF9NX3hbX01fcF1bX19qXQorCSAgICAgIHx8IChfTV94W19fcHNdW19fal0gPT0gX01feFtfTV9wXVtfX2pdICYmIF9NX2NhcnJ5ID09IDApKQorCSAgICBfX25ld19jYXJyeSA9IDA7CisJICBlbHNlCisJICAgIF9fbmV3X2NhcnJ5ID0gMTsKKworCSAgX01feFtfTV9wXVtfX2pdID0gX01feFtfX3BzXVtfX2pdIC0gX01feFtfTV9wXVtfX2pdIC0gX01fY2Fycnk7CisJICBfTV9jYXJyeSA9IF9fbmV3X2NhcnJ5OworCX0KKworICAgICAgaWYgKF9NX3hbX19wc11bX19uIC0gMV0gPiBfTV94W19NX3BdW19fbiAtIDFdCisJICB8fCAoX01feFtfX3BzXVtfX24gLSAxXSA9PSBfTV94W19NX3BdW19fbiAtIDFdICYmIF9NX2NhcnJ5ID09IDApKQorCV9fbmV3X2NhcnJ5ID0gMDsKKyAgICAgIGVsc2UKKwlfX25ld19jYXJyeSA9IDE7CisgICAgICAKKyAgICAgIF9NX3hbX01fcF1bX19uIC0gMV0gPSBfX2RldGFpbDo6X19tb2Q8X1VJbnQzMlR5cGUsIDEsIDAsCisJX19kZXRhaWw6Ol9TaGlmdDxfVUludDMyVHlwZSwgX193ICUgMzI+OjpfX3ZhbHVlPgorCShfTV94W19fcHNdW19fbiAtIDFdIC0gX01feFtfTV9wXVtfX24gLSAxXSAtIF9NX2NhcnJ5KTsKKyAgICAgIF9NX2NhcnJ5ID0gX19uZXdfY2Fycnk7CisKKyAgICAgIHJlc3VsdF90eXBlIF9fcmV0ID0gMC4wOworICAgICAgZm9yIChpbnQgX19qID0gMDsgX19qIDwgX19uOyArK19faikKKwlfX3JldCArPSBfTV94W19NX3BdW19fal0gKiBfTV9ucG93c1tfX2pdOworCisgICAgICAvLyBBZGp1c3QgY3VycmVudCBpbmRleCB0byBsb29wIGFyb3VuZCBpbiByaW5nIGJ1ZmZlci4KKyAgICAgIGlmICgrK19NX3AgPj0gbG9uZ19sYWcpCisJX01fcCA9IDA7CisKKyAgICAgIHJldHVybiBfX3JldDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCBpbnQgX193LCBpbnQgX19zLCBpbnQgX19yLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBzdWJ0cmFjdF93aXRoX2NhcnJ5XzAxPF9SZWFsVHlwZSwgX193LCBfX3MsIF9fcj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6Zml4ZWQgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKworICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgX19yOyArK19faSkKKwlmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX3guX19uOyArK19faikKKwkgIF9fb3MgPDwgX194Ll9NX3hbX19pXVtfX2pdIDw8IF9fc3BhY2U7CisgICAgICBfX29zIDw8IF9feC5fTV9jYXJyeTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZSwgaW50IF9fdywgaW50IF9fcywgaW50IF9fciwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgc3VidHJhY3Rfd2l0aF9jYXJyeV8wMTxfUmVhbFR5cGUsIF9fdywgX19zLCBfX3I+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3I7ICsrX19pKQorCWZvciAoaW50IF9faiA9IDA7IF9faiA8IF9feC5fX247ICsrX19qKQorCSAgX19pcyA+PiBfX3guX01feFtfX2ldW19fal07CisgICAgICBfX2lzID4+IF9feC5fTV9jYXJyeTsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgaW50IF9fcCwgaW50IF9fcj4KKyAgICBjb25zdCBpbnQKKyAgICBkaXNjYXJkX2Jsb2NrPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBfX3AsIF9fcj46OmJsb2NrX3NpemU7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGludCBfX3AsIGludCBfX3I+CisgICAgY29uc3QgaW50CisgICAgZGlzY2FyZF9ibG9jazxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgX19wLCBfX3I+Ojp1c2VkX2Jsb2NrOworCisgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBpbnQgX19wLCBpbnQgX19yPgorICAgIHR5cGVuYW1lIGRpc2NhcmRfYmxvY2s8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IsCisJCQkgICBfX3AsIF9fcj46OnJlc3VsdF90eXBlCisgICAgZGlzY2FyZF9ibG9jazxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciwgX19wLCBfX3I+OjoKKyAgICBvcGVyYXRvcigpKCkKKyAgICB7CisgICAgICBpZiAoX01fbiA+PSB1c2VkX2Jsb2NrKQorCXsKKwkgIHdoaWxlIChfTV9uIDwgYmxvY2tfc2l6ZSkKKwkgICAgeworCSAgICAgIF9NX2IoKTsKKwkgICAgICArK19NX247CisJICAgIH0KKwkgIF9NX24gPSAwOworCX0KKyAgICAgICsrX01fbjsKKyAgICAgIHJldHVybiBfTV9iKCk7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBpbnQgX19wLCBpbnQgX19yLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBkaXNjYXJkX2Jsb2NrPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLAorCSAgICAgICBfX3AsIF9fcj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6ZGVjIHwgX19pb3NfYmFzZTo6Zml4ZWQKKwkJIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisKKyAgICAgIF9fb3MgPDwgX194Ll9NX2IgPDwgX19zcGFjZSA8PCBfX3guX01fbjsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBpbnQgX19wLCBpbnQgX19yLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBkaXNjYXJkX2Jsb2NrPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBfX3AsIF9fcj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9faXMgPj4gX194Ll9NX2IgPj4gX194Ll9NX247CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIGludCBfX3MxLAorCSAgIGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgaW50IF9fczI+CisgICAgY29uc3QgaW50CisgICAgeG9yX2NvbWJpbmU8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBfX3MxLAorCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIsIF9fczI+OjpzaGlmdDE7CisgICAgIAorICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIGludCBfX3MxLAorCSAgIGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgaW50IF9fczI+CisgICAgY29uc3QgaW50CisgICAgeG9yX2NvbWJpbmU8X1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBfX3MxLAorCQlfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIsIF9fczI+OjpzaGlmdDI7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBpbnQgX19zMSwKKwkgICBjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIsIGludCBfX3MyPgorICAgIHZvaWQKKyAgICB4b3JfY29tYmluZTxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIF9fczEsCisJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgX19zMj46OgorICAgIF9NX2luaXRpYWxpemVfbWF4KCkKKyAgICB7CisgICAgICBjb25zdCBpbnQgX193ID0gc3RkOjpudW1lcmljX2xpbWl0czxyZXN1bHRfdHlwZT46OmRpZ2l0czsKKworICAgICAgY29uc3QgcmVzdWx0X3R5cGUgX19tMSA9CisJc3RkOjptaW4ocmVzdWx0X3R5cGUoX01fYjEubWF4KCkgLSBfTV9iMS5taW4oKSksCisJCSBfX2RldGFpbDo6X1NoaWZ0PHJlc3VsdF90eXBlLCBfX3cgLSBfX3MxPjo6X192YWx1ZSAtIDEpOworCisgICAgICBjb25zdCByZXN1bHRfdHlwZSBfX20yID0KKwlzdGQ6Om1pbihyZXN1bHRfdHlwZShfTV9iMi5tYXgoKSAtIF9NX2IyLm1pbigpKSwKKwkJIF9fZGV0YWlsOjpfU2hpZnQ8cmVzdWx0X3R5cGUsIF9fdyAtIF9fczI+OjpfX3ZhbHVlIC0gMSk7CisKKyAgICAgIC8vIE5COiBJbiBUUjEgczEgaXMgbm90IHJlcXVpcmVkIHRvIGJlID49IHMyLgorICAgICAgaWYgKF9fczEgPCBfX3MyKQorCV9NX21heCA9IF9NX2luaXRpYWxpemVfbWF4X2F1eChfX20yLCBfX20xLCBfX3MyIC0gX19zMSkgPDwgX19zMTsKKyAgICAgIGVsc2UKKwlfTV9tYXggPSBfTV9pbml0aWFsaXplX21heF9hdXgoX19tMSwgX19tMiwgX19zMSAtIF9fczIpIDw8IF9fczI7CisgICAgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgaW50IF9fczEsCisJICAgY2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBpbnQgX19zMj4KKyAgICB0eXBlbmFtZSB4b3JfY29tYmluZTxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIF9fczEsCisJCQkgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBfX3MyPjo6cmVzdWx0X3R5cGUKKyAgICB4b3JfY29tYmluZTxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIF9fczEsCisJCV9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgX19zMj46OgorICAgIF9NX2luaXRpYWxpemVfbWF4X2F1eChyZXN1bHRfdHlwZSBfX2EsIHJlc3VsdF90eXBlIF9fYiwgaW50IF9fZCkKKyAgICB7CisgICAgICBjb25zdCByZXN1bHRfdHlwZSBfX3R3bzJkID0gcmVzdWx0X3R5cGUoMSkgPDwgX19kOworICAgICAgY29uc3QgcmVzdWx0X3R5cGUgX19jID0gX19hICogX190d28yZDsKKworICAgICAgaWYgKF9fYSA9PSAwIHx8IF9fYiA8IF9fdHdvMmQpCisJcmV0dXJuIF9fYyArIF9fYjsKKworICAgICAgY29uc3QgcmVzdWx0X3R5cGUgX190ID0gc3RkOjptYXgoX19jLCBfX2IpOworICAgICAgY29uc3QgcmVzdWx0X3R5cGUgX191ID0gc3RkOjptaW4oX19jLCBfX2IpOworCisgICAgICByZXN1bHRfdHlwZSBfX3ViID0gX191OworICAgICAgcmVzdWx0X3R5cGUgX19wOworICAgICAgZm9yIChfX3AgPSAwOyBfX3ViICE9IDE7IF9fdWIgPj49IDEpCisJKytfX3A7CisKKyAgICAgIGNvbnN0IHJlc3VsdF90eXBlIF9fdHdvMnAgPSByZXN1bHRfdHlwZSgxKSA8PCBfX3A7CisgICAgICBjb25zdCByZXN1bHRfdHlwZSBfX2sgPSBfX3QgLyBfX3R3bzJwOworCisgICAgICBpZiAoX19rICYgMSkKKwlyZXR1cm4gKF9fayArIDEpICogX190d28ycCAtIDE7CisKKyAgICAgIGlmIChfX2MgPj0gX19iKQorCXJldHVybiAoX19rICsgMSkgKiBfX3R3bzJwICsgX01faW5pdGlhbGl6ZV9tYXhfYXV4KChfX3QgJSBfX3R3bzJwKQorCQkJCQkJCSAgIC8gX190d28yZCwKKwkJCQkJCQkgICBfX3UgJSBfX3R3bzJwLCBfX2QpOworICAgICAgZWxzZQorCXJldHVybiAoX19rICsgMSkgKiBfX3R3bzJwICsgX01faW5pdGlhbGl6ZV9tYXhfYXV4KChfX3UgJSBfX3R3bzJwKQorCQkJCQkJCSAgIC8gX190d28yZCwKKwkJCQkJCQkgICBfX3QgJSBfX3R3bzJwLCBfX2QpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIGludCBfX3MxLAorCSAgIGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgaW50IF9fczIsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHhvcl9jb21iaW5lPF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMSwgX19zMSwKKwkgICAgICAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IyLCBfX3MyPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpmaXhlZCB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworCisgICAgICBfX29zIDw8IF9feC5iYXNlMSgpIDw8IF9fc3BhY2UgPDwgX194LmJhc2UyKCk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIHJldHVybiBfX29zOyAKKyAgICB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3IxLCBpbnQgX19zMSwKKwkgICBjbGFzcyBfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjIsIGludCBfX3MyLAorCSAgIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICB4b3JfY29tYmluZTxfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvcjEsIF9fczEsCisJICAgICAgIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yMiwgX19zMj4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9faXMgPj4gX194Ll9NX2IxID4+IF9feC5fTV9iMjsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgdW5pZm9ybV9pbnQ8X0ludFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgdW5pZm9ybV9pbnQ8X0ludFR5cGU+OjoKKyAgICAgIF9NX2NhbGwoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywKKwkgICAgICByZXN1bHRfdHlwZSBfX21pbiwgcmVzdWx0X3R5cGUgX19tYXgsIHRydWVfdHlwZSkKKyAgICAgIHsKKwkvLyBYWFggTXVzdCBiZSBmaXhlZCB0byB3b3JrIHdlbGwgZm9yICphcmJpdHJhcnkqIF9fdXJuZy5tYXgoKSwKKwkvLyBfX3VybmcubWluKCksIF9fbWF4LCBfX21pbi4gIEN1cnJlbnRseSB3b3JrcyBmaW5lIG9ubHkgaW4gdGhlCisJLy8gbW9zdCBjb21tb24gY2FzZSBfX3VybmcubWF4KCkgLSBfX3VybmcubWluKCkgPj0gX19tYXggLSBfX21pbiwKKwkvLyB3aXRoIF9fdXJuZy5tYXgoKSA+IF9fdXJuZy5taW4oKSA+PSAwLgorCXR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2FkZF91bnNpZ25lZDx0eXBlbmFtZQorCSAgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I6OnJlc3VsdF90eXBlPjo6X190eXBlIF9fdXJudHlwZTsKKwl0eXBlZGVmIHR5cGVuYW1lIF9fZ251X2N4eDo6X19hZGRfdW5zaWduZWQ8cmVzdWx0X3R5cGU+OjpfX3R5cGUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3V0eXBlOworCXR5cGVkZWYgdHlwZW5hbWUgX19nbnVfY3h4OjpfX2NvbmRpdGlvbmFsX3R5cGU8KHNpemVvZihfX3VybnR5cGUpCisJCQkJCQkJPiBzaXplb2YoX191dHlwZSkpLAorCSAgX191cm50eXBlLCBfX3V0eXBlPjo6X190eXBlICAgICAgICAgICAgICAgICAgICAgICAgIF9fdWN0eXBlOworCisJcmVzdWx0X3R5cGUgX19yZXQ7CisKKwljb25zdCBfX3VybnR5cGUgX191cm5taW4gPSBfX3VybmcubWluKCk7CisJY29uc3QgX191cm50eXBlIF9fdXJubWF4ID0gX191cm5nLm1heCgpOworCWNvbnN0IF9fdXJudHlwZSBfX3VybnJhbmdlID0gX191cm5tYXggLSBfX3Vybm1pbjsKKwljb25zdCBfX3VjdHlwZSBfX3VyYW5nZSA9IF9fbWF4IC0gX19taW47CisJY29uc3QgX191Y3R5cGUgX191ZGVub20gPSAoX191cm5yYW5nZSA8PSBfX3VyYW5nZQorCQkJCSAgID8gMSA6IF9fdXJucmFuZ2UgLyAoX191cmFuZ2UgKyAxKSk7CisJZG8KKwkgIF9fcmV0ID0gKF9fdXJudHlwZShfX3VybmcoKSkgLSAgX191cm5taW4pIC8gX191ZGVub207CisJd2hpbGUgKF9fcmV0ID4gX19tYXggLSBfX21pbik7CisKKwlyZXR1cm4gX19yZXQgKyBfX21pbjsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHVuaWZvcm1faW50PF9JbnRUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisKKyAgICAgIF9fb3MgPDwgX194Lm1pbigpIDw8IF9fc3BhY2UgPDwgX194Lm1heCgpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICB1bmlmb3JtX2ludDxfSW50VHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lzLmZsYWdzKCk7CisgICAgICBfX2lzLmZsYWdzKF9faW9zX2Jhc2U6OmRlYyB8IF9faW9zX2Jhc2U6OnNraXB3cyk7CisKKyAgICAgIF9faXMgPj4gX194Ll9NX21pbiA+PiBfX3guX01fbWF4OworCisgICAgICBfX2lzLmZsYWdzKF9fZmxhZ3MpOworICAgICAgcmV0dXJuIF9faXM7CisgICAgfQorCisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgYmVybm91bGxpX2Rpc3RyaWJ1dGlvbiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX29zLndpZGVuKCcgJykpOworICAgICAgX19vcy5wcmVjaXNpb24oX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPGRvdWJsZT46Ol9fbWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gucCgpOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgZ2VvbWV0cmljX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZSwgX1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIGdlb21ldHJpY19kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgeworCS8vIEFib3V0IHRoZSBlcHNpbG9uIHRoaW5nIHNlZSB0aGlzIHRocmVhZDoKKyAgICAgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDYtMTAvbXNnMDA5NzEuaHRtbAorCWNvbnN0IF9SZWFsVHlwZSBfX25hZiA9CisJICAoMSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6ZXBzaWxvbigpKSAvIDI7CisJLy8gVGhlIGxhcmdlc3QgX1JlYWxUeXBlIGNvbnZlcnRpYmxlIHRvIF9JbnRUeXBlLgorCWNvbnN0IF9SZWFsVHlwZSBfX3RociA9CisJICBzdGQ6Om51bWVyaWNfbGltaXRzPF9JbnRUeXBlPjo6bWF4KCkgKyBfX25hZjsKKworCV9SZWFsVHlwZSBfX2NhbmQ7CisJZG8KKwkgIF9fY2FuZCA9IHN0ZDo6Y2VpbChzdGQ6OmxvZyhfX3VybmcoKSkgLyBfTV9sb2dfcCk7CisJd2hpbGUgKF9fY2FuZCA+PSBfX3Rocik7CisKKwlyZXR1cm4gcmVzdWx0X3R5cGUoX19jYW5kICsgX19uYWYpOworICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfUmVhbFR5cGUsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IGdlb21ldHJpY19kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19vcy53aWRlbignICcpKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfUmVhbFR5cGU+OjpfX21heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194LnAoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB2b2lkCisgICAgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT46OgorICAgIF9NX2luaXRpYWxpemUoKQorICAgIHsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisgICAgICBpZiAoX01fbWVhbiA+PSAxMikKKwl7CisJICBjb25zdCBfUmVhbFR5cGUgX19tID0gc3RkOjpmbG9vcihfTV9tZWFuKTsKKwkgIF9NX2xtX3RociA9IHN0ZDo6bG9nKF9NX21lYW4pOworCSAgX01fbGZtID0gc3RkOjp0cjE6OmxnYW1tYShfX20gKyAxKTsKKwkgIF9NX3NtID0gc3RkOjpzcXJ0KF9fbSk7CisKKwkgIGNvbnN0IF9SZWFsVHlwZSBfX3BpXzQgPSAwLjc4NTM5ODE2MzM5NzQ0ODMwOTYxNTY2MDg0NTgxOTg3NTdMOworCSAgY29uc3QgX1JlYWxUeXBlIF9fZHggPSBzdGQ6OnNxcnQoMiAqIF9fbSAqIHN0ZDo6bG9nKDMyICogX19tCisJCQkJCQkJICAgICAgLyBfX3BpXzQpKTsKKwkgIF9NX2QgPSBzdGQ6OnRyMTo6cm91bmQoc3RkOjptYXgoX1JlYWxUeXBlKDYpLAorCQkJCQkgIHN0ZDo6bWluKF9fbSwgX19keCkpKTsKKwkgIGNvbnN0IF9SZWFsVHlwZSBfX2N4ID0gMiAqIF9fbSArIF9NX2Q7CisJICBfTV9zY3ggPSBzdGQ6OnNxcnQoX19jeCAvIDIpOworCSAgX01fMWN4ID0gMSAvIF9fY3g7CisKKwkgIF9NX2MyYiA9IHN0ZDo6c3FydChfX3BpXzQgKiBfX2N4KSAqIHN0ZDo6ZXhwKF9NXzFjeCk7CisJICBfTV9jYiA9IDIgKiBfX2N4ICogc3RkOjpleHAoLV9NX2QgKiBfTV8xY3ggKiAoMSArIF9NX2QgLyAyKSkgLyBfTV9kOworCX0KKyAgICAgIGVsc2UKKyNlbmRpZgorCV9NX2xtX3RociA9IHN0ZDo6ZXhwKC1fTV9tZWFuKTsKKyAgICAgIH0KKworICAvKioKKyAgICogQSByZWplY3Rpb24gYWxnb3JpdGhtIHdoZW4gbWVhbiA+PSAxMiBhbmQgYSBzaW1wbGUgbWV0aG9kIGJhc2VkCisgICAqIHVwb24gdGhlIG11bHRpcGxpY2F0aW9uIG9mIHVuaWZvcm0gcmFuZG9tIHZhcmlhdGVzIG90aGVyd2lzZS4KKyAgICogTkI6IFRoZSBmb3JtZXIgaXMgYXZhaWxhYmxlIG9ubHkgaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgKiBpcyBkZWZpbmVkLgorICAgKgorICAgKiBSZWZlcmVuY2U6CisgICAqIERldnJveWUsIEwuIE5vbi1Vbmlmb3JtIFJhbmRvbSBWYXJpYXRlcyBHZW5lcmF0aW9uLiBTcHJpbmdlci1WZXJsYWcsCisgICAqIE5ldyBZb3JrLCAxOTg2LCBDaC4gWCwgU2VjdHMuIDMuMyAmIDMuNCAoKyBFcnJhdGEhKS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBwb2lzc29uX2Rpc3RyaWJ1dGlvbjxfSW50VHlwZSwgX1JlYWxUeXBlPjo6cmVzdWx0X3R5cGUKKyAgICAgIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEhfVFIxCisJaWYgKF9NX21lYW4gPj0gMTIpCisJICB7CisJICAgIF9SZWFsVHlwZSBfX3g7CisKKwkgICAgLy8gU2VlIGNvbW1lbnRzIGFib3ZlLi4uCisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX25hZiA9CisJICAgICAgKDEgLSBzdGQ6Om51bWVyaWNfbGltaXRzPF9SZWFsVHlwZT46OmVwc2lsb24oKSkgLyAyOworCSAgICBjb25zdCBfUmVhbFR5cGUgX190aHIgPQorCSAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8X0ludFR5cGU+OjptYXgoKSArIF9fbmFmOworCisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX20gPSBzdGQ6OmZsb29yKF9NX21lYW4pOworCSAgICAvLyBzcXJ0KHBpIC8gMikKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fc3BpXzIgPSAxLjI1MzMxNDEzNzMxNTUwMDI1MTIwNzg4MjY0MjQwNTUyMjZMOworCSAgICBjb25zdCBfUmVhbFR5cGUgX19jMSA9IF9NX3NtICogX19zcGlfMjsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fYzIgPSBfTV9jMmIgKyBfX2MxOyAKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fYzMgPSBfX2MyICsgMTsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fYzQgPSBfX2MzICsgMTsKKwkgICAgLy8gZV4oMSAvIDc4KQorCSAgICBjb25zdCBfUmVhbFR5cGUgX19lMTc4ID0gMS4wMTI5MDMwNDc5MzIwMDE4NTgzMTg1NTE0Nzc3NTEyOTgzTDsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fYzUgPSBfX2M0ICsgX19lMTc4OworCSAgICBjb25zdCBfUmVhbFR5cGUgX19jID0gX01fY2IgKyBfX2M1OworCSAgICBjb25zdCBfUmVhbFR5cGUgX18yY3ggPSAyICogKDIgKiBfX20gKyBfTV9kKTsKKworCSAgICBib29sIF9fcmVqZWN0ID0gdHJ1ZTsKKwkgICAgZG8KKwkgICAgICB7CisJCWNvbnN0IF9SZWFsVHlwZSBfX3UgPSBfX2MgKiBfX3VybmcoKTsKKwkJY29uc3QgX1JlYWxUeXBlIF9fZSA9IC1zdGQ6OmxvZyhfX3VybmcoKSk7CisKKwkJX1JlYWxUeXBlIF9fdyA9IDAuMDsKKwkJCisJCWlmIChfX3UgPD0gX19jMSkKKwkJICB7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX19uID0gX01fbmQoX191cm5nKTsKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3kgPSAtc3RkOjphYnMoX19uKSAqIF9NX3NtIC0gMTsKKwkJICAgIF9feCA9IHN0ZDo6Zmxvb3IoX195KTsKKwkJICAgIF9fdyA9IC1fX24gKiBfX24gLyAyOworCQkgICAgaWYgKF9feCA8IC1fX20pCisJCSAgICAgIGNvbnRpbnVlOworCQkgIH0KKwkJZWxzZSBpZiAoX191IDw9IF9fYzIpCisJCSAgeworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9fbiA9IF9NX25kKF9fdXJuZyk7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX195ID0gMSArIHN0ZDo6YWJzKF9fbikgKiBfTV9zY3g7CisJCSAgICBfX3ggPSBzdGQ6OmNlaWwoX195KTsKKwkJICAgIF9fdyA9IF9feSAqICgyIC0gX195KSAqIF9NXzFjeDsKKwkJICAgIGlmIChfX3ggPiBfTV9kKQorCQkgICAgICBjb250aW51ZTsKKwkJICB9CisJCWVsc2UgaWYgKF9fdSA8PSBfX2MzKQorCQkgIC8vIE5COiBUaGlzIGNhc2Ugbm90IGluIHRoZSBib29rLCBub3IgaW4gdGhlIEVycmF0YSwKKwkJICAvLyBidXQgc2hvdWxkIGJlIG9rLi4uCisJCSAgX194ID0gLTE7CisJCWVsc2UgaWYgKF9fdSA8PSBfX2M0KQorCQkgIF9feCA9IDA7CisJCWVsc2UgaWYgKF9fdSA8PSBfX2M1KQorCQkgIF9feCA9IDE7CisJCWVsc2UKKwkJICB7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX192ID0gLXN0ZDo6bG9nKF9fdXJuZygpKTsKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3kgPSBfTV9kICsgX192ICogX18yY3ggLyBfTV9kOworCQkgICAgX194ID0gc3RkOjpjZWlsKF9feSk7CisJCSAgICBfX3cgPSAtX01fZCAqIF9NXzFjeCAqICgxICsgX195IC8gMik7CisJCSAgfQorCisJCV9fcmVqZWN0ID0gKF9fdyAtIF9fZSAtIF9feCAqIF9NX2xtX3RocgorCQkJICAgID4gX01fbGZtIC0gc3RkOjp0cjE6OmxnYW1tYShfX3ggKyBfX20gKyAxKSk7CisKKwkJX19yZWplY3QgfD0gX194ICsgX19tID49IF9fdGhyOworCisJICAgICAgfSB3aGlsZSAoX19yZWplY3QpOworCisJICAgIHJldHVybiByZXN1bHRfdHlwZShfX3ggKyBfX20gKyBfX25hZik7CisJICB9CisJZWxzZQorI2VuZGlmCisJICB7CisJICAgIF9JbnRUeXBlICAgICBfX3ggPSAwOworCSAgICBfUmVhbFR5cGUgX19wcm9kID0gMS4wOworCisJICAgIGRvCisJICAgICAgeworCQlfX3Byb2QgKj0gX191cm5nKCk7CisJCV9feCArPSAxOworCSAgICAgIH0KKwkgICAgd2hpbGUgKF9fcHJvZCA+IF9NX2xtX3Rocik7CisKKwkgICAgcmV0dXJuIF9feCAtIDE7CisJICB9CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9SZWFsVHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgcG9pc3Nvbl9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfUmVhbFR5cGU+OjpfX21heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Lm1lYW4oKSA8PCBfX3NwYWNlIDw8IF9feC5fTV9uZDsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRUeXBlLCB0eXBlbmFtZSBfUmVhbFR5cGUsCisJICAgdHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCisJICAgICAgIHBvaXNzb25fZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfX2lzID4+IF9feC5fTV9tZWFuID4+IF9feC5fTV9uZDsKKyAgICAgIF9feC5fTV9pbml0aWFsaXplKCk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHZvaWQKKyAgICBiaW5vbWlhbF9kaXN0cmlidXRpb248X0ludFR5cGUsIF9SZWFsVHlwZT46OgorICAgIF9NX2luaXRpYWxpemUoKQorICAgIHsKKyAgICAgIGNvbnN0IF9SZWFsVHlwZSBfX3AxMiA9IF9NX3AgPD0gMC41ID8gX01fcCA6IDEuMCAtIF9NX3A7CisKKyAgICAgIF9NX2Vhc3kgPSB0cnVlOworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgaWYgKF9NX3QgKiBfX3AxMiA+PSA4KQorCXsKKwkgIF9NX2Vhc3kgPSBmYWxzZTsKKwkgIGNvbnN0IF9SZWFsVHlwZSBfX25wID0gc3RkOjpmbG9vcihfTV90ICogX19wMTIpOworCSAgY29uc3QgX1JlYWxUeXBlIF9fcGEgPSBfX25wIC8gX01fdDsKKwkgIGNvbnN0IF9SZWFsVHlwZSBfXzFwID0gMSAtIF9fcGE7CisJICAKKwkgIGNvbnN0IF9SZWFsVHlwZSBfX3BpXzQgPSAwLjc4NTM5ODE2MzM5NzQ0ODMwOTYxNTY2MDg0NTgxOTg3NTdMOworCSAgY29uc3QgX1JlYWxUeXBlIF9fZDF4ID0KKwkgICAgc3RkOjpzcXJ0KF9fbnAgKiBfXzFwICogc3RkOjpsb2coMzIgKiBfX25wCisJCQkJCSAgICAgLyAoODEgKiBfX3BpXzQgKiBfXzFwKSkpOworCSAgX01fZDEgPSBzdGQ6OnRyMTo6cm91bmQoc3RkOjptYXgoX1JlYWxUeXBlKDEpLCBfX2QxeCkpOworCSAgY29uc3QgX1JlYWxUeXBlIF9fZDJ4ID0KKwkgICAgc3RkOjpzcXJ0KF9fbnAgKiBfXzFwICogc3RkOjpsb2coMzIgKiBfTV90ICogX18xcAorCQkJCQkgICAgIC8gKF9fcGlfNCAqIF9fcGEpKSk7CisJICBfTV9kMiA9IHN0ZDo6dHIxOjpyb3VuZChzdGQ6Om1heChfUmVhbFR5cGUoMSksIF9fZDJ4KSk7CisJICAKKwkgIC8vIHNxcnQocGkgLyAyKQorCSAgY29uc3QgX1JlYWxUeXBlIF9fc3BpXzIgPSAxLjI1MzMxNDEzNzMxNTUwMDI1MTIwNzg4MjY0MjQwNTUyMjZMOworCSAgX01fczEgPSBzdGQ6OnNxcnQoX19ucCAqIF9fMXApICogKDEgKyBfTV9kMSAvICg0ICogX19ucCkpOworCSAgX01fczIgPSBzdGQ6OnNxcnQoX19ucCAqIF9fMXApICogKDEgKyBfTV9kMiAvICg0ICogX01fdCAqIF9fMXApKTsKKwkgIF9NX2MgPSAyICogX01fZDEgLyBfX25wOworCSAgX01fYTEgPSBzdGQ6OmV4cChfTV9jKSAqIF9NX3MxICogX19zcGlfMjsKKwkgIGNvbnN0IF9SZWFsVHlwZSBfX2ExMiA9IF9NX2ExICsgX01fczIgKiBfX3NwaV8yOworCSAgY29uc3QgX1JlYWxUeXBlIF9fczFzID0gX01fczEgKiBfTV9zMTsKKwkgIF9NX2ExMjMgPSBfX2ExMiArIChzdGQ6OmV4cChfTV9kMSAvIChfTV90ICogX18xcCkpCisJCQkgICAgICogMiAqIF9fczFzIC8gX01fZDEKKwkJCSAgICAgKiBzdGQ6OmV4cCgtX01fZDEgKiBfTV9kMSAvICgyICogX19zMXMpKSk7CisJICBjb25zdCBfUmVhbFR5cGUgX19zMnMgPSBfTV9zMiAqIF9NX3MyOworCSAgX01fcyA9IChfTV9hMTIzICsgMiAqIF9fczJzIC8gX01fZDIKKwkJICAqIHN0ZDo6ZXhwKC1fTV9kMiAqIF9NX2QyIC8gKDIgKiBfX3MycykpKTsKKwkgIF9NX2xmID0gKHN0ZDo6dHIxOjpsZ2FtbWEoX19ucCArIDEpCisJCSAgICsgc3RkOjp0cjE6OmxnYW1tYShfTV90IC0gX19ucCArIDEpKTsKKwkgIF9NX2xwMXAgPSBzdGQ6OmxvZyhfX3BhIC8gX18xcCk7CisKKwkgIF9NX3EgPSAtc3RkOjpsb2coMSAtIChfX3AxMiAtIF9fcGEpIC8gX18xcCk7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJX01fcSA9IC1zdGQ6OmxvZygxIC0gX19wMTIpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+OjoKKyAgICAgIF9NX3dhaXRpbmcoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZywgX0ludFR5cGUgX190KQorICAgICAgeworCV9JbnRUeXBlICAgIF9feCA9IDA7CisJX1JlYWxUeXBlIF9fc3VtID0gMDsKKworCWRvCisJICB7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX2UgPSAtc3RkOjpsb2coX191cm5nKCkpOworCSAgICBfX3N1bSArPSBfX2UgLyAoX190IC0gX194KTsKKwkgICAgX194ICs9IDE7CisJICB9CisJd2hpbGUgKF9fc3VtIDw9IF9NX3EpOworCisJcmV0dXJuIF9feCAtIDE7CisgICAgICB9CisKKyAgLyoqCisgICAqIEEgcmVqZWN0aW9uIGFsZ29yaXRobSB3aGVuIHQgKiBwID49IDggYW5kIGEgc2ltcGxlIHdhaXRpbmcgdGltZQorICAgKiBtZXRob2QgLSB0aGUgc2Vjb25kIGluIHRoZSByZWZlcmVuY2VkIGJvb2sgLSBvdGhlcndpc2UuCisgICAqIE5COiBUaGUgZm9ybWVyIGlzIGF2YWlsYWJsZSBvbmx5IGlmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICogaXMgZGVmaW5lZC4KKyAgICoKKyAgICogUmVmZXJlbmNlOgorICAgKiBEZXZyb3llLCBMLiBOb24tVW5pZm9ybSBSYW5kb20gVmFyaWF0ZXMgR2VuZXJhdGlvbi4gU3ByaW5nZXItVmVybGFnLAorICAgKiBOZXcgWW9yaywgMTk4NiwgQ2guIFgsIFNlY3QuIDQgKCsgRXJyYXRhISkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50VHlwZSwgdHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+OjpyZXN1bHRfdHlwZQorICAgICAgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+OjoKKyAgICAgIG9wZXJhdG9yKCkoX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fdXJuZykKKyAgICAgIHsKKwlyZXN1bHRfdHlwZSBfX3JldDsKKwljb25zdCBfUmVhbFR5cGUgX19wMTIgPSBfTV9wIDw9IDAuNSA/IF9NX3AgOiAxLjAgLSBfTV9wOworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorCWlmICghX01fZWFzeSkKKwkgIHsKKwkgICAgX1JlYWxUeXBlIF9feDsKKworCSAgICAvLyBTZWUgY29tbWVudHMgYWJvdmUuLi4KKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fbmFmID0KKwkgICAgICAoMSAtIHN0ZDo6bnVtZXJpY19saW1pdHM8X1JlYWxUeXBlPjo6ZXBzaWxvbigpKSAvIDI7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3RociA9CisJICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxfSW50VHlwZT46Om1heCgpICsgX19uYWY7CisKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fbnAgPSBzdGQ6OmZsb29yKF9NX3QgKiBfX3AxMik7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3BhID0gX19ucCAvIF9NX3Q7CisKKwkgICAgLy8gc3FydChwaSAvIDIpCisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3NwaV8yID0gMS4yNTMzMTQxMzczMTU1MDAyNTEyMDc4ODI2NDI0MDU1MjI2TDsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fYTEgPSBfTV9hMTsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fYTEyID0gX19hMSArIF9NX3MyICogX19zcGlfMjsKKwkgICAgY29uc3QgX1JlYWxUeXBlIF9fYTEyMyA9IF9NX2ExMjM7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3MxcyA9IF9NX3MxICogX01fczE7CisJICAgIGNvbnN0IF9SZWFsVHlwZSBfX3MycyA9IF9NX3MyICogX01fczI7CisKKwkgICAgYm9vbCBfX3JlamVjdDsKKwkgICAgZG8KKwkgICAgICB7CisJCWNvbnN0IF9SZWFsVHlwZSBfX3UgPSBfTV9zICogX191cm5nKCk7CisKKwkJX1JlYWxUeXBlIF9fdjsKKworCQlpZiAoX191IDw9IF9fYTEpCisJCSAgeworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9fbiA9IF9NX25kKF9fdXJuZyk7CisJCSAgICBjb25zdCBfUmVhbFR5cGUgX195ID0gX01fczEgKiBzdGQ6OmFicyhfX24pOworCQkgICAgX19yZWplY3QgPSBfX3kgPj0gX01fZDE7CisJCSAgICBpZiAoIV9fcmVqZWN0KQorCQkgICAgICB7CisJCQljb25zdCBfUmVhbFR5cGUgX19lID0gLXN0ZDo6bG9nKF9fdXJuZygpKTsKKwkJCV9feCA9IHN0ZDo6Zmxvb3IoX195KTsKKwkJCV9fdiA9IC1fX2UgLSBfX24gKiBfX24gLyAyICsgX01fYzsKKwkJICAgICAgfQorCQkgIH0KKwkJZWxzZSBpZiAoX191IDw9IF9fYTEyKQorCQkgIHsKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX24gPSBfTV9uZChfX3VybmcpOworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9feSA9IF9NX3MyICogc3RkOjphYnMoX19uKTsKKwkJICAgIF9fcmVqZWN0ID0gX195ID49IF9NX2QyOworCQkgICAgaWYgKCFfX3JlamVjdCkKKwkJICAgICAgeworCQkJY29uc3QgX1JlYWxUeXBlIF9fZSA9IC1zdGQ6OmxvZyhfX3VybmcoKSk7CisJCQlfX3ggPSBzdGQ6OmZsb29yKC1fX3kpOworCQkJX192ID0gLV9fZSAtIF9fbiAqIF9fbiAvIDI7CisJCSAgICAgIH0KKwkJICB9CisJCWVsc2UgaWYgKF9fdSA8PSBfX2ExMjMpCisJCSAgeworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9fZTEgPSAtc3RkOjpsb2coX191cm5nKCkpOwkJICAgIAorCQkgICAgY29uc3QgX1JlYWxUeXBlIF9fZTIgPSAtc3RkOjpsb2coX191cm5nKCkpOworCisJCSAgICBjb25zdCBfUmVhbFR5cGUgX195ID0gX01fZDEgKyAyICogX19zMXMgKiBfX2UxIC8gX01fZDE7CisJCSAgICBfX3ggPSBzdGQ6OmZsb29yKF9feSk7CisJCSAgICBfX3YgPSAoLV9fZTIgKyBfTV9kMSAqICgxIC8gKF9NX3QgLSBfX25wKQorCQkJCQkgICAgLV9feSAvICgyICogX19zMXMpKSk7CisJCSAgICBfX3JlamVjdCA9IGZhbHNlOworCQkgIH0KKwkJZWxzZQorCQkgIHsKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX2UxID0gLXN0ZDo6bG9nKF9fdXJuZygpKTsJCSAgICAKKwkJICAgIGNvbnN0IF9SZWFsVHlwZSBfX2UyID0gLXN0ZDo6bG9nKF9fdXJuZygpKTsKKworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9feSA9IF9NX2QyICsgMiAqIF9fczJzICogX19lMSAvIF9NX2QyOworCQkgICAgX194ID0gc3RkOjpmbG9vcigtX195KTsKKwkJICAgIF9fdiA9IC1fX2UyIC0gX01fZDIgKiBfX3kgLyAoMiAqIF9fczJzKTsKKwkJICAgIF9fcmVqZWN0ID0gZmFsc2U7CisJCSAgfQorCisJCV9fcmVqZWN0ID0gX19yZWplY3QgfHwgX194IDwgLV9fbnAgfHwgX194ID4gX01fdCAtIF9fbnA7CisJCWlmICghX19yZWplY3QpCisJCSAgeworCQkgICAgY29uc3QgX1JlYWxUeXBlIF9fbGZ4ID0KKwkJICAgICAgc3RkOjp0cjE6OmxnYW1tYShfX25wICsgX194ICsgMSkKKwkJICAgICAgKyBzdGQ6OnRyMTo6bGdhbW1hKF9NX3QgLSAoX19ucCArIF9feCkgKyAxKTsKKwkJICAgIF9fcmVqZWN0ID0gX192ID4gX01fbGYgLSBfX2xmeCArIF9feCAqIF9NX2xwMXA7CisJCSAgfQorCisJCV9fcmVqZWN0IHw9IF9feCArIF9fbnAgPj0gX190aHI7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19yZWplY3QpOworCisJICAgIF9feCArPSBfX25wICsgX19uYWY7CisKKwkgICAgY29uc3QgX0ludFR5cGUgX196ID0gX01fd2FpdGluZyhfX3VybmcsIF9NX3QgLSBfSW50VHlwZShfX3gpKTsgCisJICAgIF9fcmV0ID0gX0ludFR5cGUoX194KSArIF9fejsKKwkgIH0KKwllbHNlCisjZW5kaWYKKwkgIF9fcmV0ID0gX01fd2FpdGluZyhfX3VybmcsIF9NX3QpOworCisJaWYgKF9fcDEyICE9IF9NX3ApCisJICBfX3JldCA9IF9NX3QgLSBfX3JldDsKKwlyZXR1cm4gX19yZXQ7CisgICAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9SZWFsVHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19vc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19vcy5mbGFncygpOworICAgICAgY29uc3QgX0NoYXJUIF9fZmlsbCA9IF9fb3MuZmlsbCgpOworICAgICAgY29uc3Qgc3RkOjpzdHJlYW1zaXplIF9fcHJlY2lzaW9uID0gX19vcy5wcmVjaXNpb24oKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX3NwYWNlID0gX19vcy53aWRlbignICcpOworICAgICAgX19vcy5mbGFncyhfX2lvc19iYXNlOjpzY2llbnRpZmljIHwgX19pb3NfYmFzZTo6bGVmdCk7CisgICAgICBfX29zLmZpbGwoX19zcGFjZSk7CisgICAgICBfX29zLnByZWNpc2lvbihfX2dudV9jeHg6Ol9fbnVtZXJpY190cmFpdHM8X1JlYWxUeXBlPjo6X19tYXhfZGlnaXRzMTApOworCisgICAgICBfX29zIDw8IF9feC50KCkgPDwgX19zcGFjZSA8PCBfX3gucCgpIAorCSAgIDw8IF9fc3BhY2UgPDwgX194Ll9NX25kOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludFR5cGUsIHR5cGVuYW1lIF9SZWFsVHlwZSwKKwkgICB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgYmlub21pYWxfZGlzdHJpYnV0aW9uPF9JbnRUeXBlLCBfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfX2lzID4+IF9feC5fTV90ID4+IF9feC5fTV9wID4+IF9feC5fTV9uZDsKKyAgICAgIF9feC5fTV9pbml0aWFsaXplKCk7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCB1bmlmb3JtX3JlYWw8X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19zcGFjZSA9IF9fb3Mud2lkZW4oJyAnKTsKKyAgICAgIF9fb3MuZmxhZ3MoX19pb3NfYmFzZTo6c2NpZW50aWZpYyB8IF9faW9zX2Jhc2U6OmxlZnQpOworICAgICAgX19vcy5maWxsKF9fc3BhY2UpOworICAgICAgX19vcy5wcmVjaXNpb24oX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9SZWFsVHlwZT46Ol9fbWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubWluKCkgPDwgX19zcGFjZSA8PCBfX3gubWF4KCk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICB1bmlmb3JtX3JlYWw8X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9faXN0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faXMuZmxhZ3MoKTsKKyAgICAgIF9faXMuZmxhZ3MoX19pb3NfYmFzZTo6c2tpcHdzKTsKKworICAgICAgX19pcyA+PiBfX3guX01fbWluID4+IF9feC5fTV9tYXg7CisKKyAgICAgIF9faXMuZmxhZ3MoX19mbGFncyk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBleHBvbmVudGlhbF9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX29zLndpZGVuKCcgJykpOworICAgICAgX19vcy5wcmVjaXNpb24oX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9SZWFsVHlwZT46Ol9fbWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3gubGFtYmRhKCk7CisKKyAgICAgIF9fb3MuZmxhZ3MoX19mbGFncyk7CisgICAgICBfX29zLmZpbGwoX19maWxsKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fcHJlY2lzaW9uKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworCisgIC8qKgorICAgKiBQb2xhciBtZXRob2QgZHVlIHRvIE1hcnNhZ2xpYS4KKyAgICoKKyAgICogRGV2cm95ZSwgTC4gTm9uLVVuaWZvcm0gUmFuZG9tIFZhcmlhdGVzIEdlbmVyYXRpb24uIFNwcmluZ2VyLVZlcmxhZywKKyAgICogTmV3IFlvcmssIDE5ODYsIENoLiBWLCBTZWN0LiA0LjQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGU+CisgICAgdGVtcGxhdGU8Y2xhc3MgX1VuaWZvcm1SYW5kb21OdW1iZXJHZW5lcmF0b3I+CisgICAgICB0eXBlbmFtZSBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgICAgb3BlcmF0b3IoKShfVW5pZm9ybVJhbmRvbU51bWJlckdlbmVyYXRvciYgX191cm5nKQorICAgICAgeworCXJlc3VsdF90eXBlIF9fcmV0OworCisJaWYgKF9NX3NhdmVkX2F2YWlsYWJsZSkKKwkgIHsKKwkgICAgX01fc2F2ZWRfYXZhaWxhYmxlID0gZmFsc2U7CisJICAgIF9fcmV0ID0gX01fc2F2ZWQ7CisJICB9CisJZWxzZQorCSAgeworCSAgICByZXN1bHRfdHlwZSBfX3gsIF9feSwgX19yMjsKKwkgICAgZG8KKwkgICAgICB7CisJCV9feCA9IHJlc3VsdF90eXBlKDIuMCkgKiBfX3VybmcoKSAtIDEuMDsKKwkJX195ID0gcmVzdWx0X3R5cGUoMi4wKSAqIF9fdXJuZygpIC0gMS4wOworCQlfX3IyID0gX194ICogX194ICsgX195ICogX195OworCSAgICAgIH0KKwkgICAgd2hpbGUgKF9fcjIgPiAxLjAgfHwgX19yMiA9PSAwLjApOworCisJICAgIGNvbnN0IHJlc3VsdF90eXBlIF9fbXVsdCA9IHN0ZDo6c3FydCgtMiAqIHN0ZDo6bG9nKF9fcjIpIC8gX19yMik7CisJICAgIF9NX3NhdmVkID0gX194ICogX19tdWx0OworCSAgICBfTV9zYXZlZF9hdmFpbGFibGUgPSB0cnVlOworCSAgICBfX3JldCA9IF9feSAqIF9fbXVsdDsKKwkgIH0KKwkKKwlfX3JldCA9IF9fcmV0ICogX01fc2lnbWEgKyBfTV9tZWFuOworCXJldHVybiBfX3JldDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBub3JtYWxfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX29zdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIGNvbnN0IHR5cGVuYW1lIF9faW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX29zLmZsYWdzKCk7CisgICAgICBjb25zdCBfQ2hhclQgX19maWxsID0gX19vcy5maWxsKCk7CisgICAgICBjb25zdCBzdGQ6OnN0cmVhbXNpemUgX19wcmVjaXNpb24gPSBfX29zLnByZWNpc2lvbigpOworICAgICAgY29uc3QgX0NoYXJUIF9fc3BhY2UgPSBfX29zLndpZGVuKCcgJyk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX3NwYWNlKTsKKyAgICAgIF9fb3MucHJlY2lzaW9uKF9fZ251X2N4eDo6X19udW1lcmljX3RyYWl0czxfUmVhbFR5cGU+OjpfX21heF9kaWdpdHMxMCk7CisKKyAgICAgIF9fb3MgPDwgX194Ll9NX3NhdmVkX2F2YWlsYWJsZSA8PCBfX3NwYWNlCisJICAgPDwgX194Lm1lYW4oKSA8PCBfX3NwYWNlCisJICAgPDwgX194LnNpZ21hKCk7CisgICAgICBpZiAoX194Ll9NX3NhdmVkX2F2YWlsYWJsZSkKKwlfX29zIDw8IF9fc3BhY2UgPDwgX194Ll9NX3NhdmVkOworCisgICAgICBfX29zLmZsYWdzKF9fZmxhZ3MpOworICAgICAgX19vcy5maWxsKF9fZmlsbCk7CisgICAgICBfX29zLnByZWNpc2lvbihfX3ByZWNpc2lvbik7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlLCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgc3RkOjpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I+PihzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKKwkgICAgICAgbm9ybWFsX2Rpc3RyaWJ1dGlvbjxfUmVhbFR5cGU+JiBfX3gpCisgICAgeworICAgICAgdHlwZWRlZiBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiAgX19pc3RyZWFtX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppb3NfYmFzZSAgICBfX2lvc19iYXNlOworCisgICAgICBjb25zdCB0eXBlbmFtZSBfX2lvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pcy5mbGFncygpOworICAgICAgX19pcy5mbGFncyhfX2lvc19iYXNlOjpkZWMgfCBfX2lvc19iYXNlOjpza2lwd3MpOworCisgICAgICBfX2lzID4+IF9feC5fTV9zYXZlZF9hdmFpbGFibGUgPj4gX194Ll9NX21lYW4KKwkgICA+PiBfX3guX01fc2lnbWE7CisgICAgICBpZiAoX194Ll9NX3NhdmVkX2F2YWlsYWJsZSkKKwlfX2lzID4+IF9feC5fTV9zYXZlZDsKKworICAgICAgX19pcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX2lzOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZWFsVHlwZT4KKyAgICB2b2lkCisgICAgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OgorICAgIF9NX2luaXRpYWxpemUoKQorICAgIHsKKyAgICAgIGlmIChfTV9hbHBoYSA+PSAxKQorCV9NX2xfZCA9IHN0ZDo6c3FydCgyICogX01fYWxwaGEgLSAxKTsKKyAgICAgIGVsc2UKKwlfTV9sX2QgPSAoc3RkOjpwb3coX01fYWxwaGEsIF9NX2FscGhhIC8gKDEgLSBfTV9hbHBoYSkpCisJCSAgKiAoMSAtIF9NX2FscGhhKSk7CisgICAgfQorCisgIC8qKgorICAgKiBDaGVuZydzIHJlamVjdGlvbiBhbGdvcml0aG0gR0IgZm9yIGFscGhhID49IDEgYW5kIGEgbW9kaWZpY2F0aW9uCisgICAqIG9mIFZhZHV2YSdzIHJlamVjdGlvbiBmcm9tIFdlaWJ1bGwgYWxnb3JpdGhtIGR1ZSB0byBEZXZyb3llIGZvcgorICAgKiBhbHBoYSA8IDEuCisgICAqCisgICAqIFJlZmVyZW5jZXM6CisgICAqIENoZW5nLCBSLiBDLiBUaGUgR2VuZXJhdGlvbiBvZiBHYW1tYSBSYW5kb20gVmFyaWFibGVzIHdpdGggTm9uLWludGVncmFsCisgICAqIFNoYXBlIFBhcmFtZXRlci4gQXBwbGllZCBTdGF0aXN0aWNzLCAyNiwgNzEtNzUsIDE5NzcuCisgICAqCisgICAqIFZhZHV2YSwgSS4gQ29tcHV0ZXIgR2VuZXJhdGlvbiBvZiBHYW1tYSBHYW5kb20gVmFyaWFibGVzIGJ5IFJlamVjdGlvbgorICAgKiBhbmQgQ29tcG9zaXRpb24gUHJvY2VkdXJlcy4gTWF0aC4gT3BlcmF0aW9uc2ZvcnNjaHVuZyBhbmQgU3RhdGlzdGlrLAorICAgKiBTZXJpZXMgaW4gU3RhdGlzdGljcywgOCwgNTQ1LTU3NiwgMTk3Ny4KKyAgICoKKyAgICogRGV2cm95ZSwgTC4gTm9uLVVuaWZvcm0gUmFuZG9tIFZhcmlhdGVzIEdlbmVyYXRpb24uIFNwcmluZ2VyLVZlcmxhZywKKyAgICogTmV3IFlvcmssIDE5ODYsIENoLiBJWCwgU2VjdC4gMy40ICgrIEVycmF0YSEpLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlYWxUeXBlPgorICAgIHRlbXBsYXRlPGNsYXNzIF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgorICAgICAgdHlwZW5hbWUgZ2FtbWFfZGlzdHJpYnV0aW9uPF9SZWFsVHlwZT46OnJlc3VsdF90eXBlCisgICAgICBnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlPjo6CisgICAgICBvcGVyYXRvcigpKF9Vbmlmb3JtUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3VybmcpCisgICAgICB7CisJcmVzdWx0X3R5cGUgX194OworCisJYm9vbCBfX3JlamVjdDsKKwlpZiAoX01fYWxwaGEgPj0gMSkKKwkgIHsKKwkgICAgLy8gYWxwaGEgLSBsb2coNCkKKwkgICAgY29uc3QgcmVzdWx0X3R5cGUgX19iID0gX01fYWxwaGEKKwkgICAgICAtIHJlc3VsdF90eXBlKDEuMzg2Mjk0MzYxMTE5ODkwNjE4ODM0NDY0MjQyOTE2MzUzMUwpOworCSAgICBjb25zdCByZXN1bHRfdHlwZSBfX2MgPSBfTV9hbHBoYSArIF9NX2xfZDsKKwkgICAgY29uc3QgcmVzdWx0X3R5cGUgX18xbCA9IDEgLyBfTV9sX2Q7CisKKwkgICAgLy8gMSArIGxvZyg5IC8gMikKKwkgICAgY29uc3QgcmVzdWx0X3R5cGUgX19rID0gMi41MDQwNzczOTY3NzYyNzQwNzMzNzMyNTgzNTIzODY4NzQ4TDsKKworCSAgICBkbworCSAgICAgIHsKKwkJY29uc3QgcmVzdWx0X3R5cGUgX191ID0gX191cm5nKCk7CisJCWNvbnN0IHJlc3VsdF90eXBlIF9fdiA9IF9fdXJuZygpOworCisJCWNvbnN0IHJlc3VsdF90eXBlIF9feSA9IF9fMWwgKiBzdGQ6OmxvZyhfX3YgLyAoMSAtIF9fdikpOworCQlfX3ggPSBfTV9hbHBoYSAqIHN0ZDo6ZXhwKF9feSk7CisKKwkJY29uc3QgcmVzdWx0X3R5cGUgX196ID0gX191ICogX192ICogX192OworCQljb25zdCByZXN1bHRfdHlwZSBfX3IgPSBfX2IgKyBfX2MgKiBfX3kgLSBfX3g7CisKKwkJX19yZWplY3QgPSBfX3IgPCByZXN1bHRfdHlwZSg0LjUpICogX196IC0gX19rOworCQlpZiAoX19yZWplY3QpCisJCSAgX19yZWplY3QgPSBfX3IgPCBzdGQ6OmxvZyhfX3opOworCSAgICAgIH0KKwkgICAgd2hpbGUgKF9fcmVqZWN0KTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGNvbnN0IHJlc3VsdF90eXBlIF9fYyA9IDEgLyBfTV9hbHBoYTsKKworCSAgICBkbworCSAgICAgIHsKKwkJY29uc3QgcmVzdWx0X3R5cGUgX196ID0gLXN0ZDo6bG9nKF9fdXJuZygpKTsKKwkJY29uc3QgcmVzdWx0X3R5cGUgX19lID0gLXN0ZDo6bG9nKF9fdXJuZygpKTsKKworCQlfX3ggPSBzdGQ6OnBvdyhfX3osIF9fYyk7CisKKwkJX19yZWplY3QgPSBfX3ogKyBfX2UgPCBfTV9sX2QgKyBfX3g7CisJICAgICAgfQorCSAgICB3aGlsZSAoX19yZWplY3QpOworCSAgfQorCisJcmV0dXJuIF9feDsKKyAgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVhbFR5cGUsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBnYW1tYV9kaXN0cmlidXRpb248X1JlYWxUeXBlPiYgX194KQorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gIF9fb3N0cmVhbV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6aW9zX2Jhc2UgICAgX19pb3NfYmFzZTsKKworICAgICAgY29uc3QgdHlwZW5hbWUgX19pb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9fb3MuZmxhZ3MoKTsKKyAgICAgIGNvbnN0IF9DaGFyVCBfX2ZpbGwgPSBfX29zLmZpbGwoKTsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyZWFtc2l6ZSBfX3ByZWNpc2lvbiA9IF9fb3MucHJlY2lzaW9uKCk7CisgICAgICBfX29zLmZsYWdzKF9faW9zX2Jhc2U6OnNjaWVudGlmaWMgfCBfX2lvc19iYXNlOjpsZWZ0KTsKKyAgICAgIF9fb3MuZmlsbChfX29zLndpZGVuKCcgJykpOworICAgICAgX19vcy5wcmVjaXNpb24oX19nbnVfY3h4OjpfX251bWVyaWNfdHJhaXRzPF9SZWFsVHlwZT46Ol9fbWF4X2RpZ2l0czEwKTsKKworICAgICAgX19vcyA8PCBfX3guYWxwaGEoKTsKKworICAgICAgX19vcy5mbGFncyhfX2ZsYWdzKTsKKyAgICAgIF9fb3MuZmlsbChfX2ZpbGwpOworICAgICAgX19vcy5wcmVjaXNpb24oX19wcmVjaXNpb24pOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9yZWdleCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3JlZ2V4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmY2MzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9yZWdleApAQCAtMCwwICsxLDI3MzAgQEAKKy8vIGNsYXNzIHRlbXBsYXRlIHJlZ2V4IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKgorICogQGZpbGUgdHIxL3JlZ2V4CisgKiBAYXV0aG9yIFN0ZXBoZW4gTS4gV2ViYiAgPHN0ZXBoZW4ud2ViYkBicmVnbWFzb2Z0LmNhPgorICogVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1JFR0VYCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9SRUdFWCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CisvKioKKyAqIEBkZWZncm91cCB0cjFfcmVnZXggUmVndWxhciBFeHByZXNzaW9ucworICogQSBmYWNpbGl0eSBmb3IgcGVyZm9ybWluZyByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZy4KKyAqLworIC8vQHsKKworLyoqIEBuYW1lc3BhY2Ugc3RkOjpyZWdleF9jb25zdGFudHMKKyAqICBAYnJpZWYgSVNPIEMrKyAweCBlbnRpdGllcyBzdWIgbmFtZXNwYWNlIGZvciByZWdleC4KKyAqLworbmFtZXNwYWNlIHJlZ2V4X2NvbnN0YW50cworeworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQG5hbWUgNS4xIFJlZ3VsYXIgRXhwcmVzc2lvbiBTeW50YXggT3B0aW9ucworICAgKi8KKyAgLy9AeworICBlbnVtIF9fc3ludGF4X29wdGlvbgorICAgIHsKKyAgICAgIF9TX2ljYXNlLAorICAgICAgX1Nfbm9zdWJzLAorICAgICAgX1Nfb3B0aW1pemUsCisgICAgICBfU19jb2xsYXRlLAorICAgICAgX1NfRUNNQVNjcmlwdCwKKyAgICAgIF9TX2Jhc2ljLAorICAgICAgX1NfZXh0ZW5kZWQsCisgICAgICBfU19hd2ssCisgICAgICBfU19ncmVwLAorICAgICAgX1NfZWdyZXAsCisgICAgICBfU19zeW50YXhfbGFzdAorICAgIH07CisKKyAgLyoqCisgICAqIEBicmllZiBUaGlzIGlzIGEgYml0bWFzayB0eXBlIGluZGljYXRpbmcgaG93IHRvIGludGVycHJldCB0aGUgcmVnZXguCisgICAqCisgICAqIFRoZSBAYyBzeW50YXhfb3B0aW9uX3R5cGUgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBidXQgaXQgaXMgdmFsaWQgdG8KKyAgICogcGVyZm9ybSBiaXR3aXNlIG9wZXJhdGlvbnMgb24gdGhlc2UgdmFsdWVzIGFuZCBleHBlY3QgdGhlIHJpZ2h0IHRoaW5nIHRvCisgICAqIGhhcHBlbi4KKyAgICoKKyAgICogQSB2YWxpZCB2YWx1ZSBvZiB0eXBlIHN5bnRheF9vcHRpb25fdHlwZSBzaGFsbCBoYXZlIGV4YWN0bHkgb25lIG9mIHRoZQorICAgKiBlbGVtZW50cyBAYyBFQ01BU2NyaXB0LCBAYyBiYXNpYywgQGMgZXh0ZW5kZWQsIEBjIGF3aywgQGMgZ3JlcCwgQGMgZWdyZXAKKyAgICogJXNldC4KKyAgICovCisgIHR5cGVkZWYgdW5zaWduZWQgaW50IHN5bnRheF9vcHRpb25fdHlwZTsKKworICAvKiogCisgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBtYXRjaGluZyBvZiByZWd1bGFyIGV4cHJlc3Npb25zIGFnYWluc3QgYSBjaGFyYWN0ZXIKKyAgICogc2VxdWVuY2Ugc2hhbGwgYmUgcGVyZm9ybWVkIHdpdGhvdXQgcmVnYXJkIHRvIGNhc2UuCisgICAqLworICBzdGF0aWMgY29uc3Qgc3ludGF4X29wdGlvbl90eXBlIGljYXNlICAgICAgPSAxIDw8IF9TX2ljYXNlOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB3aGVuIGEgcmVndWxhciBleHByZXNzaW9uIGlzIG1hdGNoZWQgYWdhaW5zdCBhIGNoYXJhY3RlcgorICAgKiBjb250YWluZXIgc2VxdWVuY2UsIG5vIHN1Yi1leHByZXNzaW9uIG1hdGNoZXMgYXJlIHRvIGJlIHN0b3JlZCBpbiB0aGUKKyAgICogc3VwcGxpZWQgbWF0Y2hfcmVzdWx0cyBzdHJ1Y3R1cmUuCisgICAqLworICBzdGF0aWMgY29uc3Qgc3ludGF4X29wdGlvbl90eXBlIG5vc3VicyAgICAgPSAxIDw8IF9TX25vc3ViczsKKworICAvKioKKyAgICogU3BlY2lmaWVzIHRoYXQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUgc2hvdWxkIHBheSBtb3JlIGF0dGVudGlvbiB0bworICAgKiB0aGUgc3BlZWQgd2l0aCB3aGljaCByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBtYXRjaGVkLCBhbmQgbGVzcyB0byB0aGUKKyAgICogc3BlZWQgd2l0aCB3aGljaCByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0cyBhcmUgY29uc3RydWN0ZWQuIE90aGVyd2lzZQorICAgKiBpdCBoYXMgbm8gZGV0ZWN0YWJsZSBlZmZlY3Qgb24gdGhlIHByb2dyYW0gb3V0cHV0LgorICAgKi8KKyAgc3RhdGljIGNvbnN0IHN5bnRheF9vcHRpb25fdHlwZSBvcHRpbWl6ZSAgID0gMSA8PCBfU19vcHRpbWl6ZTsKKworICAvKioKKyAgICogU3BlY2lmaWVzIHRoYXQgY2hhcmFjdGVyIHJhbmdlcyBvZiB0aGUgZm9ybSBbYS1iXSBzaG91bGQgYmUgbG9jYWxlCisgICAqIHNlbnNpdGl2ZS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBzeW50YXhfb3B0aW9uX3R5cGUgY29sbGF0ZSAgICA9IDEgPDwgX1NfY29sbGF0ZTsKKworICAvKioKKyAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGdyYW1tYXIgcmVjb2duaXplZCBieSB0aGUgcmVndWxhciBleHByZXNzaW9uIGVuZ2luZSBpcworICAgKiB0aGF0IHVzZWQgYnkgRUNNQVNjcmlwdCBpbiBFQ01BLTI2MiBbRWNtYSBJbnRlcm5hdGlvbmFsLCBFQ01BU2NyaXB0CisgICAqIExhbmd1YWdlIFNwZWNpZmljYXRpb24sIFN0YW5kYXJkIEVjbWEtMjYyLCB0aGlyZCBlZGl0aW9uLCAxOTk5XSwgYXMKKyAgICogbW9kaWZpZWQgaW4gdHIxIHNlY3Rpb24gWzcuMTNdLiAgVGhpcyBncmFtbWFyIGlzIHNpbWlsYXIgdG8gdGhhdCBkZWZpbmVkCisgICAqIGluIHRoZSBQRVJMIHNjcmlwdGluZyBsYW5ndWFnZSBidXQgZXh0ZW5kZWQgd2l0aCBlbGVtZW50cyBmb3VuZCBpbiB0aGUKKyAgICogUE9TSVggcmVndWxhciBleHByZXNzaW9uIGdyYW1tYXIuCisgICAqLworICBzdGF0aWMgY29uc3Qgc3ludGF4X29wdGlvbl90eXBlIEVDTUFTY3JpcHQgPSAxIDw8IF9TX0VDTUFTY3JpcHQ7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBncmFtbWFyIHJlY29nbml6ZWQgYnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUgaXMKKyAgICogdGhhdCB1c2VkIGJ5IFBPU0lYIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gSUVFRSBTdGQgMTAwMy4xLTIwMDEsCisgICAqIFBvcnRhYmxlIE9wZXJhdGluZyBTeXN0ZW0gSW50ZXJmYWNlIChQT1NJWCksIEJhc2UgRGVmaW5pdGlvbnMgYW5kCisgICAqIEhlYWRlcnMsIFNlY3Rpb24gOSwgUmVndWxhciBFeHByZXNzaW9ucyBbSUVFRSwgSW5mb3JtYXRpb24gVGVjaG5vbG9neSAtLQorICAgKiBQb3J0YWJsZSBPcGVyYXRpbmcgU3lzdGVtIEludGVyZmFjZSAoUE9TSVgpLCBJRUVFIFN0YW5kYXJkIDEwMDMuMS0yMDAxXS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBzeW50YXhfb3B0aW9uX3R5cGUgYmFzaWMgICAgICA9IDEgPDwgX1NfYmFzaWM7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBncmFtbWFyIHJlY29nbml6ZWQgYnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUgaXMKKyAgICogdGhhdCB1c2VkIGJ5IFBPU0lYIGV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gSUVFRSBTdGQgMTAwMy4xLTIwMDEsCisgICAqIFBvcnRhYmxlIE9wZXJhdGluZyBTeXN0ZW0gSW50ZXJmYWNlIChQT1NJWCksIEJhc2UgRGVmaW5pdGlvbnMgYW5kIEhlYWRlcnMsCisgICAqIFNlY3Rpb24gOSwgUmVndWxhciBFeHByZXNzaW9ucy4KKyAgICovCisgIHN0YXRpYyBjb25zdCBzeW50YXhfb3B0aW9uX3R5cGUgZXh0ZW5kZWQgICA9IDEgPDwgX1NfZXh0ZW5kZWQ7CisKKyAgLyoqCisgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBncmFtbWFyIHJlY29nbml6ZWQgYnkgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUgaXMKKyAgICogdGhhdCB1c2VkIGJ5IFBPU0lYIHV0aWxpdHkgYXdrIGluIElFRUUgU3RkIDEwMDMuMS0yMDAxLiAgVGhpcyBvcHRpb24gaXMKKyAgICogaWRlbnRpY2FsIHRvIHN5bnRheF9vcHRpb25fdHlwZSBleHRlbmRlZCwgZXhjZXB0IHRoYXQgQy1zdHlsZSBlc2NhcGUKKyAgICogc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuICBUaGVzZSBzZXF1ZW5jZXMgYXJlOiAKKyAgICogXFxcXCwgXFxhLCBcXGIsIFxcZiwgCisgICAqIFxcbiwgXFxyLCBcXHQgLCBcXHYsIAorICAgKiBcXCZhcG9zOywgJmFwb3M7LCBhbmQgXFxkZGQgCisgICAqICh3aGVyZSBkZGQgaXMgb25lLCB0d28sIG9yIHRocmVlIG9jdGFsIGRpZ2l0cykuICAKKyAgICovCisgIHN0YXRpYyBjb25zdCBzeW50YXhfb3B0aW9uX3R5cGUgYXdrICAgICAgICA9IDEgPDwgX1NfYXdrOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZ3JhbW1hciByZWNvZ25pemVkIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGlzCisgICAqIHRoYXQgdXNlZCBieSBQT1NJWCB1dGlsaXR5IGdyZXAgaW4gSUVFRSBTdGQgMTAwMy4xLTIwMDEuICBUaGlzIG9wdGlvbiBpcworICAgKiBpZGVudGljYWwgdG8gc3ludGF4X29wdGlvbl90eXBlIGJhc2ljLCBleGNlcHQgdGhhdCBuZXdsaW5lcyBhcmUgdHJlYXRlZAorICAgKiBhcyB3aGl0ZXNwYWNlLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IHN5bnRheF9vcHRpb25fdHlwZSBncmVwICAgICAgID0gMSA8PCBfU19ncmVwOworCisgIC8qKgorICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZ3JhbW1hciByZWNvZ25pemVkIGJ5IHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZW5naW5lIGlzCisgICAqIHRoYXQgdXNlZCBieSBQT1NJWCB1dGlsaXR5IGdyZXAgd2hlbiBnaXZlbiB0aGUgLUUgb3B0aW9uIGluCisgICAqIElFRUUgU3RkIDEwMDMuMS0yMDAxLiAgVGhpcyBvcHRpb24gaXMgaWRlbnRpY2FsIHRvIHN5bnRheF9vcHRpb25fdHlwZSAKKyAgICogZXh0ZW5kZWQsIGV4Y2VwdCB0aGF0IG5ld2xpbmVzIGFyZSB0cmVhdGVkIGFzIHdoaXRlc3BhY2UuCisgICAqLworICBzdGF0aWMgY29uc3Qgc3ludGF4X29wdGlvbl90eXBlIGVncmVwICAgICAgPSAxIDw8IF9TX2VncmVwOworCisgIC8vQH0KKworICAvKioKKyAgICogQG5hbWUgNS4yIE1hdGNoaW5nIFJ1bGVzCisgICAqCisgICAqIE1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uIGFnYWluc3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIFtmaXJzdCwKKyAgICogbGFzdCkgcHJvY2VlZHMgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgZ3JhbW1hciBzcGVjaWZpZWQgZm9yIHRoZQorICAgKiByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCBtb2RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIGVmZmVjdHMgbGlzdGVkCisgICAqIGJlbG93IGZvciBhbnkgYml0bWFzayBlbGVtZW50cyBzZXQuCisgICAqCisgICAqLworICAvL0B7CisKKyAgZW51bSBfX21hdGNoX2ZsYWcKKyAgICB7CisgICAgICBfU19ub3RfYm9sLAorICAgICAgX1Nfbm90X2VvbCwKKyAgICAgIF9TX25vdF9ib3csCisgICAgICBfU19ub3RfZW93LAorICAgICAgX1NfYW55LAorICAgICAgX1Nfbm90X251bGwsCisgICAgICBfU19jb250aW51b3VzLAorICAgICAgX1NfcHJldl9hdmFpbCwKKyAgICAgIF9TX3NlZCwKKyAgICAgIF9TX25vX2NvcHksCisgICAgICBfU19maXJzdF9vbmx5LAorICAgICAgX1NfbWF0Y2hfZmxhZ19sYXN0CisgICAgfTsKKworICAvKioKKyAgICogQGJyaWVmIFRoaXMgaXMgYSBiaXRtYXNrIHR5cGUgaW5kaWNhdGluZyByZWdleCBtYXRjaGluZyBydWxlcy4KKyAgICoKKyAgICogVGhlIEBjIG1hdGNoX2ZsYWdfdHlwZSBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ1dCBpdCBpcyB2YWxpZCB0bworICAgKiBwZXJmb3JtIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiB0aGVzZSB2YWx1ZXMgYW5kIGV4cGVjdCB0aGUgcmlnaHQgdGhpbmcgdG8KKyAgICogaGFwcGVuLgorICAgKi8KKyAgdHlwZWRlZiBzdGQ6OmJpdHNldDxfU19tYXRjaF9mbGFnX2xhc3Q+IG1hdGNoX2ZsYWdfdHlwZTsKKworICAvKioKKyAgICogVGhlIGRlZmF1bHQgbWF0Y2hpbmcgcnVsZXMuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX2RlZmF1bHQgICAgID0gMDsKKworICAvKioKKyAgICogVGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgc2VxdWVuY2UgW2ZpcnN0LCBsYXN0KSBpcyB0cmVhdGVkIGFzIHRob3VnaCBpdAorICAgKiBpcyBub3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUsIHNvIHRoZSBjaGFyYWN0ZXIgKF4pIGluIHRoZSByZWd1bGFyCisgICAqIGV4cHJlc3Npb24gc2hhbGwgbm90IG1hdGNoIFtmaXJzdCwgZmlyc3QpLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9ub3RfYm9sICAgICA9IDEgPDwgX1Nfbm90X2JvbDsKKworICAvKioKKyAgICogVGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzZXF1ZW5jZSBbZmlyc3QsIGxhc3QpIGlzIHRyZWF0ZWQgYXMgdGhvdWdoIGl0CisgICAqIGlzIG5vdCBhdCB0aGUgZW5kIG9mIGEgbGluZSwgc28gdGhlIGNoYXJhY3RlciAoJCkgaW4gdGhlIHJlZ3VsYXIKKyAgICogZXhwcmVzc2lvbiBzaGFsbCBub3QgbWF0Y2ggW2xhc3QsIGxhc3QpLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9ub3RfZW9sICAgICA9IDEgPDwgX1Nfbm90X2VvbDsKKyAgIAorICAvKioKKyAgICogVGhlIGV4cHJlc3Npb24gXFxiIGlzIG5vdCBtYXRjaGVkIGFnYWluc3QgdGhlIHN1Yi1zZXF1ZW5jZQorICAgKiBbZmlyc3QsZmlyc3QpLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9ub3RfYm93ICAgICA9IDEgPDwgX1Nfbm90X2JvdzsKKyAgIAorICAvKioKKyAgICogVGhlIGV4cHJlc3Npb24gXFxiIHNob3VsZCBub3QgYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWItc2VxdWVuY2UKKyAgICogW2xhc3QsbGFzdCkuCisgICAqLworICBzdGF0aWMgY29uc3QgbWF0Y2hfZmxhZ190eXBlIG1hdGNoX25vdF9lb3cgICAgID0gMSA8PCBfU19ub3RfZW93OworICAgCisgIC8qKgorICAgKiBJZiBtb3JlIHRoYW4gb25lIG1hdGNoIGlzIHBvc3NpYmxlIHRoZW4gYW55IG1hdGNoIGlzIGFuIGFjY2VwdGFibGUKKyAgICogcmVzdWx0LgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9hbnkgICAgICAgICA9IDEgPDwgX1NfYW55OworICAgCisgIC8qKgorICAgKiBUaGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBtYXRjaCBhbiBlbXB0eSBzZXF1ZW5jZS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBtYXRjaF9mbGFnX3R5cGUgbWF0Y2hfbm90X251bGwgICAgPSAxIDw8IF9TX25vdF9udWxsOworICAgCisgIC8qKgorICAgKiBUaGUgZXhwcmVzc2lvbiBvbmx5IG1hdGNoZXMgYSBzdWItc2VxdWVuY2UgdGhhdCBiZWdpbnMgYXQgZmlyc3QgLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9jb250aW51b3VzICA9IDEgPDwgX1NfY29udGludW91czsKKyAgIAorICAvKioKKyAgICogLS1maXJzdCBpcyBhIHZhbGlkIGl0ZXJhdG9yIHBvc2l0aW9uLiAgV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRoZW4gdGhlCisgICAqIGZsYWdzIG1hdGNoX25vdF9ib2wgYW5kIG1hdGNoX25vdF9ib3cgYXJlIGlnbm9yZWQgYnkgdGhlIHJlZ3VsYXIKKyAgICogZXhwcmVzc2lvbiBhbGdvcml0aG1zIDcuMTEgYW5kIGl0ZXJhdG9ycyA3LjEyLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBtYXRjaF9wcmV2X2F2YWlsICA9IDEgPDwgX1NfcHJldl9hdmFpbDsKKworICAvKioKKyAgICogV2hlbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBpcyB0byBiZSByZXBsYWNlZCBieSBhIG5ldyBzdHJpbmcsIHRoZQorICAgKiBuZXcgc3RyaW5nIGlzIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBydWxlcyB1c2VkIGJ5IHRoZSBFQ01BU2NyaXB0IHJlcGxhY2UKKyAgICogZnVuY3Rpb24gaW4gRUNNQS0gMjYyIFtFY21hIEludGVybmF0aW9uYWwsIEVDTUFTY3JpcHQgTGFuZ3VhZ2UKKyAgICogU3BlY2lmaWNhdGlvbiwgU3RhbmRhcmQgRWNtYS0yNjIsIHRoaXJkIGVkaXRpb24sIDE5OTldLCBwYXJ0IDE1LjUuNC4xMQorICAgKiBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UuIEluIGFkZGl0aW9uLCBkdXJpbmcgc2VhcmNoIGFuZCByZXBsYWNlCisgICAqIG9wZXJhdGlvbnMgYWxsIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAqIGFyZSBsb2NhdGVkIGFuZCByZXBsYWNlZCwgYW5kIHNlY3Rpb25zIG9mIHRoZSBpbnB1dCB0aGF0IGRpZCBub3QgbWF0Y2gKKyAgICogdGhlIGV4cHJlc3Npb24gYXJlIGNvcGllZCB1bmNoYW5nZWQgdG8gdGhlIG91dHB1dCBzdHJpbmcuCisgICAqIAorICAgKiBGb3JtYXQgc3RyaW5ncyAoZnJvbSBFQ01BLTI2MiBbMTUuNS40LjExXSk6CisgICAqIEBsaSAkJCAgVGhlIGRvbGxhci1zaWduIGl0c2VsZiAoJCkKKyAgICogQGxpICQmICBUaGUgbWF0Y2hlZCBzdWJzdHJpbmcuCisgICAqIEBsaSAkYCAgVGhlIHBvcnRpb24gb2YgQGEgc3RyaW5nIHRoYXQgcHJlY2VkZXMgdGhlIG1hdGNoZWQgc3Vic3RyaW5nLgorICAgKiAgICAgICAgIFRoaXMgd291bGQgYmUgbWF0Y2hfcmVzdWx0czo6cHJlZml4KCkuCisgICAqIEBsaSAkJyAgVGhlIHBvcnRpb24gb2YgQGEgc3RyaW5nIHRoYXQgZm9sbG93cyB0aGUgbWF0Y2hlZCBzdWJzdHJpbmcuCisgICAqICAgICAgICAgVGhpcyB3b3VsZCBiZSBtYXRjaF9yZXN1bHRzOjpzdWZmaXgoKS4KKyAgICogQGxpICRuICBUaGUgbnRoIGNhcHR1cmUsIHdoZXJlIG4gaXMgaW4gWzEsOV0gYW5kICRuIGlzIG5vdCBmb2xsb3dlZCBieSBhCisgICAqICAgICAgICAgZGVjaW1hbCBkaWdpdC4gIElmIG4gPD0gbWF0Y2hfcmVzdWx0czo6c2l6ZSgpIGFuZCB0aGUgbnRoIGNhcHR1cmUKKyAgICogICAgICAgICBpcyB1bmRlZmluZWQsIHVzZSB0aGUgZW1wdHkgc3RyaW5nIGluc3RlYWQuICBJZiBuID4KKyAgICogICAgICAgICBtYXRjaF9yZXN1bHRzOjpzaXplKCksIHRoZSByZXN1bHQgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAgICogQGxpICRubiBUaGUgbm50aCBjYXB0dXJlLCB3aGVyZSBubiBpcyBhIHR3by1kaWdpdCBkZWNpbWFsIG51bWJlciBvbgorICAgKiAgICAgICAgIFswMSwgOTldLiAgSWYgbm4gPD0gbWF0Y2hfcmVzdWx0czo6c2l6ZSgpIGFuZCB0aGUgbnRoIGNhcHR1cmUgaXMKKyAgICogICAgICAgICB1bmRlZmluZWQsIHVzZSB0aGUgZW1wdHkgc3RyaW5nIGluc3RlYWQuIElmCisgICAqICAgICAgICAgbm4gPiBtYXRjaF9yZXN1bHRzOjpzaXplKCksIHRoZSByZXN1bHQgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4KKyAgICovCisgIHN0YXRpYyBjb25zdCBtYXRjaF9mbGFnX3R5cGUgZm9ybWF0X2RlZmF1bHQgICAgPSAwOworCisgIC8qKgorICAgKiBXaGVuIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGlzIHRvIGJlIHJlcGxhY2VkIGJ5IGEgbmV3IHN0cmluZywgdGhlCisgICAqIG5ldyBzdHJpbmcgaXMgY29uc3RydWN0ZWQgdXNpbmcgdGhlIHJ1bGVzIHVzZWQgYnkgdGhlIFBPU0lYIHNlZCB1dGlsaXR5CisgICAqIGluIElFRUUgU3RkIDEwMDMuMS0gMjAwMSBbSUVFRSwgSW5mb3JtYXRpb24gVGVjaG5vbG9neSAtLSBQb3J0YWJsZQorICAgKiBPcGVyYXRpbmcgU3lzdGVtIEludGVyZmFjZSAoUE9TSVgpLCBJRUVFIFN0YW5kYXJkIDEwMDMuMS0yMDAxXS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBtYXRjaF9mbGFnX3R5cGUgZm9ybWF0X3NlZCAgICAgICAgPSAxIDw8IF9TX3NlZDsKKworICAvKioKKyAgICogRHVyaW5nIGEgc2VhcmNoIGFuZCByZXBsYWNlIG9wZXJhdGlvbiwgc2VjdGlvbnMgb2YgdGhlIGNoYXJhY3RlcgorICAgKiBjb250YWluZXIgc2VxdWVuY2UgYmVpbmcgc2VhcmNoZWQgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIKKyAgICogZXhwcmVzc2lvbiBzaGFsbCBub3QgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgc3RyaW5nLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBmb3JtYXRfbm9fY29weSAgICA9IDEgPDwgX1Nfbm9fY29weTsKKworICAvKioKKyAgICogV2hlbiBzcGVjaWZpZWQgZHVyaW5nIGEgc2VhcmNoIGFuZCByZXBsYWNlIG9wZXJhdGlvbiwgb25seSB0aGUgZmlyc3QKKyAgICogb2NjdXJyZW5jZSBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIHNoYWxsIGJlIHJlcGxhY2VkLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IG1hdGNoX2ZsYWdfdHlwZSBmb3JtYXRfZmlyc3Rfb25seSA9IDEgPDwgX1NfZmlyc3Rfb25seTsKKworICAvL0B9CisKKyAgLyoqCisgICAqIEBuYW1lIDUuMyBFcnJvciBUeXBlcworICAgKi8KKyAgLy9AeworIAorICBlbnVtIGVycm9yX3R5cGUKKyAgICB7CisgICAgICBfU19lcnJvcl9jb2xsYXRlLAorICAgICAgX1NfZXJyb3JfY3R5cGUsCisgICAgICBfU19lcnJvcl9lc2NhcGUsCisgICAgICBfU19lcnJvcl9iYWNrcmVmLAorICAgICAgX1NfZXJyb3JfYnJhY2ssCisgICAgICBfU19lcnJvcl9wYXJlbiwKKyAgICAgIF9TX2Vycm9yX2JyYWNlLAorICAgICAgX1NfZXJyb3JfYmFkYnJhY2UsCisgICAgICBfU19lcnJvcl9yYW5nZSwKKyAgICAgIF9TX2Vycm9yX3NwYWNlLAorICAgICAgX1NfZXJyb3JfYmFkcmVwZWF0LAorICAgICAgX1NfZXJyb3JfY29tcGxleGl0eSwKKyAgICAgIF9TX2Vycm9yX3N0YWNrLAorICAgICAgX1NfZXJyb3JfbGFzdAorICAgIH07CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGNvbGxhdGluZyBlbGVtZW50IG5hbWUuICovCisgIHN0YXRpYyBjb25zdCBlcnJvcl90eXBlIGVycm9yX2NvbGxhdGUoX1NfZXJyb3JfY29sbGF0ZSk7CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAqLworICBzdGF0aWMgY29uc3QgZXJyb3JfdHlwZSBlcnJvcl9jdHlwZShfU19lcnJvcl9jdHlwZSk7CisKKyAgLyoqCisgICAqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGVzY2FwZWQgY2hhcmFjdGVyLCBvciBhIHRyYWlsaW5nCisgICAqIGVzY2FwZS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBlcnJvcl90eXBlIGVycm9yX2VzY2FwZShfU19lcnJvcl9lc2NhcGUpOworCisgIC8qKiBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgYW4gaW52YWxpZCBiYWNrIHJlZmVyZW5jZS4gKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3JfYmFja3JlZihfU19lcnJvcl9iYWNrcmVmKTsKKworICAvKiogVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIG1pc21hdGNoZWQgWyBhbmQgXS4gKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3JfYnJhY2soX1NfZXJyb3JfYnJhY2spOworCisgIC8qKiBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgbWlzbWF0Y2hlZCAoIGFuZCApLiAqLworICBzdGF0aWMgY29uc3QgZXJyb3JfdHlwZSBlcnJvcl9wYXJlbihfU19lcnJvcl9wYXJlbik7CisKKyAgLyoqIFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBtaXNtYXRjaGVkIHsgYW5kIH0gKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3JfYnJhY2UoX1NfZXJyb3JfYnJhY2UpOworCisgIC8qKiBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgYW4gaW52YWxpZCByYW5nZSBpbiBhIHt9IGV4cHJlc3Npb24uICovCisgIHN0YXRpYyBjb25zdCBlcnJvcl90eXBlIGVycm9yX2JhZGJyYWNlKF9TX2Vycm9yX2JhZGJyYWNlKTsKKworICAvKioKKyAgICogVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLAorICAgKiBzdWNoIGFzIFtiLWFdIGluIG1vc3QgZW5jb2RpbmdzLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3JfcmFuZ2UoX1NfZXJyb3JfcmFuZ2UpOworCisgIC8qKgorICAgKiBUaGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBjb252ZXJ0IHRoZSBleHByZXNzaW9uIGludG8gYQorICAgKiBmaW5pdGUgc3RhdGUgbWFjaGluZS4KKyAgICovCisgIHN0YXRpYyBjb25zdCBlcnJvcl90eXBlIGVycm9yX3NwYWNlKF9TX2Vycm9yX3NwYWNlKTsKKworICAvKioKKyAgICogT25lIG9mIDxlbT4qPyt7PC9lbT4gd2FzIG5vdCBwcmVjZWRlZCBieSBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICovCisgIHN0YXRpYyBjb25zdCBlcnJvcl90eXBlIGVycm9yX2JhZHJlcGVhdChfU19lcnJvcl9iYWRyZXBlYXQpOworCisgIC8qKgorICAgKiBUaGUgY29tcGxleGl0eSBvZiBhbiBhdHRlbXB0ZWQgbWF0Y2ggYWdhaW5zdCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiBleGNlZWRlZCBhIHByZS1zZXQgbGV2ZWwuCisgICAqLworICBzdGF0aWMgY29uc3QgZXJyb3JfdHlwZSBlcnJvcl9jb21wbGV4aXR5KF9TX2Vycm9yX2NvbXBsZXhpdHkpOworCisgIC8qKgorICAgKiBUaGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUKKyAgICogcmVndWxhciBleHByZXNzaW9uIGNvdWxkIG1hdGNoIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgKi8KKyAgc3RhdGljIGNvbnN0IGVycm9yX3R5cGUgZXJyb3Jfc3RhY2soX1NfZXJyb3Jfc3RhY2spOworCisgIC8vQH0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIFs3LjhdIENsYXNzIHJlZ2V4X2Vycm9yCisgIC8qKgorICAgKiAgQGJyaWVmIEEgcmVndWxhciBleHByZXNzaW9uIGV4Y2VwdGlvbiBjbGFzcy4KKyAgICogIEBpbmdyb3VwIGV4Y2VwdGlvbnMKKyAgICoKKyAgICogIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeSB0aHJvd3Mgb2JqZWN0cyBvZiB0aGlzIGNsYXNzIG9uIGVycm9yLgorICAgKi8KKyAgY2xhc3MgcmVnZXhfZXJyb3IKKyAgOiBwdWJsaWMgc3RkOjpydW50aW1lX2Vycm9yCisgIHsKKyAgcHVibGljOgorICAgIC8qKgorICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgcmVnZXhfZXJyb3Igb2JqZWN0LgorICAgICAqCisgICAgICogQHBhcmFtIGVjb2RlIHRoZSByZWdleCBlcnJvciBjb2RlLgorICAgICAqLworICAgIGV4cGxpY2l0CisgICAgcmVnZXhfZXJyb3IocmVnZXhfY29uc3RhbnRzOjplcnJvcl90eXBlIF9fZWNvZGUpCisgICAgOiBzdGQ6OnJ1bnRpbWVfZXJyb3IoInJlZ2V4X2Vycm9yIiksIF9NX2NvZGUoX19lY29kZSkKKyAgICB7IH0KKworICAgIC8qKgorICAgICAqIEBicmllZiBHZXRzIHRoZSByZWdleCBlcnJvciBjb2RlLgorICAgICAqCisgICAgICogQHJldHVybnMgdGhlIHJlZ2V4IGVycm9yIGNvZGUuCisgICAgICovCisgICAgcmVnZXhfY29uc3RhbnRzOjplcnJvcl90eXBlCisgICAgY29kZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fY29kZTsgfQorCisgIHByb3RlY3RlZDoKKyAgICByZWdleF9jb25zdGFudHM6OmVycm9yX3R5cGUgX01fY29kZTsKKyAgfTsKKworICAvLyBbNy43XSBDbGFzcyByZWdleF90cmFpdHMKKyAgLyoqCisgICAqIEBicmllZiBEZXNjcmliZXMgYXNwZWN0cyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICoKKyAgICogQSByZWd1bGFyIGV4cHJlc3Npb24gdHJhaXRzIGNsYXNzIHRoYXQgc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudHMgb2YgdHIxCisgICAqIHNlY3Rpb24gWzcuMl0uCisgICAqCisgICAqIFRoZSBjbGFzcyAlcmVnZXggaXMgcGFyYW1ldGVyaXplZCBhcm91bmQgYSBzZXQgb2YgcmVsYXRlZCB0eXBlcyBhbmQKKyAgICogZnVuY3Rpb25zIHVzZWQgdG8gY29tcGxldGUgdGhlIGRlZmluaXRpb24gb2YgaXRzIHNlbWFudGljcy4gIFRoaXMgY2xhc3MKKyAgICogc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudHMgb2Ygc3VjaCBhIHRyYWl0cyBjbGFzcy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlPgorICAgIHN0cnVjdCByZWdleF90cmFpdHMKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBfQ2hfdHlwZSAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcl90eXBlPiBzdHJpbmdfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpsb2NhbGUgICAgICAgICAgICAgICAgICBsb2NhbGVfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpjdHlwZV9iYXNlOjptYXNrICAgICAgICBjaGFyX2NsYXNzX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgZGVmYXVsdCB0cmFpdHMgb2JqZWN0LgorICAgICAgICovCisgICAgICByZWdleF90cmFpdHMoKQorICAgICAgeyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdpdmVzIHRoZSBsZW5ndGggb2YgYSBDLXN0eWxlIHN0cmluZyBzdGFydGluZyBhdCBAcCBfX3AuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIF9fcCBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZXR3ZWVuIEBwICpfX3AgYW5kIHRoZSBmaXJzdAorICAgICAgICogZGVmYXVsdC1pbml0aWFsaXplZCB2YWx1ZSBvZiB0eXBlIEBwIGNoYXJfdHlwZS4gIEluIG90aGVyIHdvcmRzLCB1c2VzCisgICAgICAgKiB0aGUgQy1zdHJpbmcgYWxnb3JpdGhtIGZvciBkZXRlcm1pbmluZyB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2Ugb2YKKyAgICAgICAqIGNoYXJhY3RlcnMuCisgICAgICAgKi8KKyAgICAgIHN0YXRpYyBzdGQ6OnNpemVfdAorICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19wKQorICAgICAgeyByZXR1cm4gc3RyaW5nX3R5cGU6OnRyYWl0c190eXBlOjpsZW5ndGgoX19wKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBQZXJmb3JtcyB0aGUgaWRlbnRpdHkgdHJhbnNsYXRpb24uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGMgQSBjaGFyYWN0ZXIgdG8gdGhlIGxvY2FsZS1zcGVjaWZpYyBjaGFyYWN0ZXIgc2V0LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIGMuCisgICAgICAgKi8KKyAgICAgIGNoYXJfdHlwZQorICAgICAgdHJhbnNsYXRlKGNoYXJfdHlwZSBfX2MpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2M7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgVHJhbnNsYXRlcyBhIGNoYXJhY3RlciBpbnRvIGEgY2FzZS1pbnNlbnNpdGl2ZSBlcXVpdmFsZW50LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBjIEEgY2hhcmFjdGVyIHRvIHRoZSBsb2NhbGUtc3BlY2lmaWMgY2hhcmFjdGVyIHNldC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyB0aGUgbG9jYWxlLXNwZWNpZmljIGxvd2VyLWNhc2UgZXF1aXZhbGVudCBvZiBjLgorICAgICAgICogQHRocm93cyBzdGQ6OmJhZF9jYXN0IGlmIHRoZSBpbWJ1ZWQgbG9jYWxlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN0eXBlCisgICAgICAgKiAgICAgICAgIGZhY2V0LgorICAgICAgICovCisgICAgICBjaGFyX3R5cGUKKyAgICAgIHRyYW5zbGF0ZV9ub2Nhc2UoY2hhcl90eXBlIF9fYykgY29uc3QKKyAgICAgIHsKKwl1c2luZyBzdGQ6OmN0eXBlOworCXVzaW5nIHN0ZDo6dXNlX2ZhY2V0OworCXJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcl90eXBlPiA+KF9NX2xvY2FsZSkudG9sb3dlcihfX2MpOworICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgc29ydCBrZXkgZm9yIGEgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBmaXJzdCBiZWdpbm5pbmcgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZS4KKyAgICAgICAqIEBwYXJhbSBsYXN0ICBvbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAgKgorICAgICAgICogUmV0dXJucyBhIHNvcnQga2V5IGZvciB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIGRlc2lnbmF0ZWQgYnkgdGhlCisgICAgICAgKiBpdGVyYXRvciByYW5nZSBbRjEsIEYyKSBzdWNoIHRoYXQgaWYgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBbRzEsIEcyKQorICAgICAgICogc29ydHMgYmVmb3JlIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgW0gxLCBIMikgdGhlbgorICAgICAgICogdi50cmFuc2Zvcm0oRzEsIEcyKSA8IHYudHJhbnNmb3JtKEgxLCBIMikuCisgICAgICAgKgorICAgICAgICogV2hhdCB0aGlzIHJlYWxseSBkb2VzIGlzIHByb3ZpZGUgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gY29tcGFyZSBhCisgICAgICAgKiBzdHJpbmcgdG8gbXVsdGlwbGUgb3RoZXIgc3RyaW5ncyBpbiBsb2NhbGVzIHdpdGggZmFuY3kgY29sbGF0aW9uCisgICAgICAgKiBydWxlcyBhbmQgZXF1aXZhbGVuY2UgY2xhc3Nlcy4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBhIGxvY2FsZS1zcGVjaWZpYyBzb3J0IGtleSBlcXVpdmFsZW50IHRvIHRoZSBpbnB1dCByYW5nZS4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHN0ZDo6YmFkX2Nhc3QgaWYgdGhlIGN1cnJlbnQgbG9jYWxlIGRvZXMgbm90IGhhdmUgYSBjb2xsYXRlCisgICAgICAgKiAgICAgICAgIGZhY2V0LgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRndkX2l0ZXI+CisgICAgICAgIHN0cmluZ190eXBlCisgICAgICAgIHRyYW5zZm9ybShfRndkX2l0ZXIgX19maXJzdCwgX0Z3ZF9pdGVyIF9fbGFzdCkgY29uc3QKKyAgICAgICAgeworCSAgdXNpbmcgc3RkOjpjb2xsYXRlOworCSAgdXNpbmcgc3RkOjp1c2VfZmFjZXQ7CisJICBjb25zdCBjb2xsYXRlPF9DaF90eXBlPiYgX19jKHVzZV9mYWNldDwKKwkJCQkgICAgICAgY29sbGF0ZTxfQ2hfdHlwZT4gPihfTV9sb2NhbGUpKTsKKwkgIHN0cmluZ190eXBlIF9fcyhfX2ZpcnN0LCBfX2xhc3QpOworCSAgcmV0dXJuIF9fYy50cmFuc2Zvcm0oX19zLmRhdGEoKSwgX19zLmRhdGEoKSArIF9fcy5zaXplKCkpOworCX0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgRHVubm8uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGZpcnN0IGJlZ2lubmluZyBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICogQHBhcmFtIGxhc3QgIG9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiBFZmZlY3RzOiBpZiB0eXBlaWQodXNlX2ZhY2V0PGNvbGxhdGU8X0NoX3R5cGU+ID4pID09CisgICAgICAgKiB0eXBlaWQoY29sbGF0ZV9ieW5hbWU8X0NoX3R5cGU+KSBhbmQgdGhlIGZvcm0gb2YgdGhlIHNvcnQga2V5CisgICAgICAgKiByZXR1cm5lZCBieSBjb2xsYXRlX2J5bmFtZTxfQ2hfdHlwZT46OnRyYW5zZm9ybShmaXJzdCwgbGFzdCkgaXMga25vd24KKyAgICAgICAqIGFuZCBjYW4gYmUgY29udmVydGVkIGludG8gYSBwcmltYXJ5IHNvcnQga2V5IHRoZW4gcmV0dXJucyB0aGF0IGtleSwKKyAgICAgICAqIG90aGVyd2lzZSByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4gV1RGPz8KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z3ZF9pdGVyPgorICAgICAgICBzdHJpbmdfdHlwZQorICAgICAgICB0cmFuc2Zvcm1fcHJpbWFyeShfRndkX2l0ZXIgX19maXJzdCwgX0Z3ZF9pdGVyIF9fbGFzdCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgYSBjb2xsYXRpb24gZWxlbWVudCBieSBuYW1lLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBmaXJzdCBiZWdpbm5pbmcgb2YgdGhlIGNvbGxhdGlvbiBlbGVtZW50IG5hbWUuCisgICAgICAgKiBAcGFyYW0gbGFzdCAgb25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgY29sbGF0aW9uIGVsZW1lbnQgbmFtZS4KKyAgICAgICAqIAorICAgICAgICogQHJldHVybnMgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIHRoYXQgcmVwcmVzZW50cyB0aGUKKyAgICAgICAqIGNvbGxhdGluZyBlbGVtZW50IGNvbnNpc3Rpbmcgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBkZXNpZ25hdGVkIGJ5CisgICAgICAgKiB0aGUgaXRlcmF0b3IgcmFuZ2UgW2ZpcnN0LCBsYXN0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlCisgICAgICAgKiBjaGFyYWN0ZXIgc2VxdWVuY2UgaXMgbm90IGEgdmFsaWQgY29sbGF0aW5nIGVsZW1lbnQuCisgICAgICAgKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gd2RfaXRlcj4KKyAgICAgICAgc3RyaW5nX3R5cGUKKyAgICAgICAgbG9va3VwX2NvbGxhdGVuYW1lKF9Gd2RfaXRlciBfX2ZpcnN0LCBfRndkX2l0ZXIgX19sYXN0KSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgTWFwcyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIHRvIGEgbmFtZWQgY2hhcmFjdGVyCisgICAgICAgKiAgICAgICAgY2xhc3NpZmljYXRpb24uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGZpcnN0IGJlZ2lubmluZyBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLgorICAgICAgICogQHBhcmFtIGxhc3QgIG9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZS4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dXJucyBhbiB1bnNwZWNpZmllZCB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGNoYXJhY3RlcgorICAgICAgICogY2xhc3NpZmljYXRpb24gbmFtZWQgYnkgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBkZXNpZ25hdGVkIGJ5IHRoZQorICAgICAgICogaXRlcmF0b3IgcmFuZ2UgW2ZpcnN0LCBsYXN0KS4gVGhlIHZhbHVlIHJldHVybmVkIHNoYWxsIGJlIGluZGVwZW5kZW50CisgICAgICAgKiBvZiB0aGUgY2FzZSBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlLiBJZiB0aGUgbmFtZQorICAgICAgICogaXMgbm90IHJlY29nbml6ZWQgdGhlbiByZXR1cm5zIGEgdmFsdWUgdGhhdCBjb21wYXJlcyBlcXVhbCB0byAwLgorICAgICAgICoKKyAgICAgICAqIEF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgbmFtZXMgKG9yIHRoZWlyIHdpZGUtY2hhcmFjdGVyIGVxdWl2YWxlbnQpIGFyZQorICAgICAgICogc3VwcG9ydGVkLgorICAgICAgICogLSBkCisgICAgICAgKiAtIHcKKyAgICAgICAqIC0gcworICAgICAgICogLSBhbG51bQorICAgICAgICogLSBhbHBoYQorICAgICAgICogLSBibGFuaworICAgICAgICogLSBjbnRybAorICAgICAgICogLSBkaWdpdAorICAgICAgICogLSBncmFwaAorICAgICAgICogLSBsb3dlcgorICAgICAgICogLSBwcmludAorICAgICAgICogLSBwdW5jdAorICAgICAgICogLSBzcGFjZQorICAgICAgICogLSB1cHBlcgorICAgICAgICogLSB4ZGlnaXQKKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z3ZF9pdGVyPgorICAgICAgICBjaGFyX2NsYXNzX3R5cGUKKyAgICAgICAgbG9va3VwX2NsYXNzbmFtZShfRndkX2l0ZXIgX19maXJzdCwgX0Z3ZF9pdGVyIF9fbGFzdCkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIERldGVybWluZXMgaWYgQHAgYyBpcyBhIG1lbWJlciBvZiBhbiBpZGVudGlmaWVkIGNsYXNzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBjIGEgY2hhcmFjdGVyLgorICAgICAgICogQHBhcmFtIGYgYSBjbGFzcyB0eXBlIChhcyByZXR1cm5lZCBmcm9tIGxvb2t1cF9jbGFzc25hbWUpLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlciBAcCBjIGlzIGEgbWVtYmVyIG9mIHRoZSBjbGFzc2lmaWNhdGlvbgorICAgICAgICogcmVwcmVzZW50ZWQgYnkgQHAgZiwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3Mgc3RkOjpiYWRfY2FzdCBpZiB0aGUgY3VycmVudCBsb2NhbGUgZG9lcyBub3QgaGF2ZSBhIGN0eXBlCisgICAgICAgKiAgICAgICAgIGZhY2V0LgorICAgICAgICovCisgICAgICBib29sCisgICAgICBpc2N0eXBlKF9DaF90eXBlIF9fYywgY2hhcl9jbGFzc190eXBlIF9fZikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnZlcnRzIGEgZGlnaXQgdG8gYW4gaW50LgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBjaCAgICBhIGNoYXJhY3RlciByZXByZXNlbnRpbmcgYSBkaWdpdC4KKyAgICAgICAqIEBwYXJhbSByYWRpeCB0aGUgcmFkaXggaWYgdGhlIG51bWVyaWMgY29udmVyc2lvbiAobGltaXRlZCB0byA4LCAxMCwKKyAgICAgICAqICAgICAgICAgICAgICBvciAxNikuCisgICAgICAgKiAKKyAgICAgICAqIEByZXR1cm5zIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgZGlnaXQgY2ggaW4gYmFzZSByYWRpeCBpZiB0aGUKKyAgICAgICAqIGNoYXJhY3RlciBjaCBpcyBhIHZhbGlkIGRpZ2l0IGluIGJhc2UgcmFkaXg7IG90aGVyd2lzZSByZXR1cm5zIC0xLgorICAgICAgICovCisgICAgICBpbnQKKyAgICAgIHZhbHVlKF9DaF90eXBlIF9fY2gsIGludCBfX3JhZGl4KSBjb25zdDsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgSW1idWVzIHRoZSByZWdleF90cmFpdHMgb2JqZWN0IHdpdGggYSBjb3B5IG9mIGEgbmV3IGxvY2FsZS4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gbG9jIEEgbG9jYWxlLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIGEgY29weSBvZiB0aGUgcHJldmlvdXMgbG9jYWxlIGluIHVzZSBieSB0aGUgcmVnZXhfdHJhaXRzCisgICAgICAgKiAgICAgICAgICBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQG5vdGUgQ2FsbGluZyBpbWJ1ZSB3aXRoIGEgZGlmZmVyZW50IGxvY2FsZSB0aGFuIHRoZSBvbmUgY3VycmVudGx5IGluCisgICAgICAgKiAgICAgICB1c2UgaW52YWxpZGF0ZXMgYWxsIGNhY2hlZCBkYXRhIGhlbGQgYnkgKnRoaXMuCisgICAgICAgKi8KKyAgICAgIGxvY2FsZV90eXBlCisgICAgICBpbWJ1ZShsb2NhbGVfdHlwZSBfX2xvYykKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fbG9jYWxlLCBfX2xvYyk7CisJcmV0dXJuIF9fbG9jOworICAgICAgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGEgY29weSBvZiB0aGUgY3VycmVudCBsb2NhbGUgaW4gdXNlIGJ5IHRoZSByZWdleF90cmFpdHMKKyAgICAgICAqIG9iamVjdC4KKyAgICAgICAqLworICAgICAgbG9jYWxlX3R5cGUKKyAgICAgIGdldGxvYygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9sb2NhbGU7IH0KKyAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgIGxvY2FsZV90eXBlIF9NX2xvY2FsZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlPgorICAgIGJvb2wgcmVnZXhfdHJhaXRzPF9DaF90eXBlPjo6CisgICAgaXNjdHlwZShfQ2hfdHlwZSBfX2MsIGNoYXJfY2xhc3NfdHlwZSBfX2YpIGNvbnN0CisgICAgeworICAgICAgdXNpbmcgc3RkOjpjdHlwZTsKKyAgICAgIHVzaW5nIHN0ZDo6dXNlX2ZhY2V0OworICAgICAgY29uc3QgY3R5cGU8X0NoX3R5cGU+JiBfX2N0eXBlKHVzZV9mYWNldDwKKwkJCQkgICAgIGN0eXBlPF9DaF90eXBlPiA+KF9NX2xvY2FsZSkpOworICAgICAgCisgICAgICBpZiAoX19jdHlwZS5pcyhfX2MsIF9fZikpCisJcmV0dXJuIHRydWU7CisgICAgICAKKyAgICAgIC8vIHNwZWNpYWwgY2FzZSBvZiB1bmRlcnNjb3JlIGluIFtbOnc6XV0KKyAgICAgIGlmIChfX2MgPT0gX19jdHlwZS53aWRlbignXycpKQorCXsKKwkgIGNvbnN0IGNoYXIqIGNvbnN0IF9fd2JbXSA9ICJ3IjsKKwkgIGNoYXJfY2xhc3NfdHlwZSBfX3d0ID0gdGhpcy0+bG9va3VwX2NsYXNzbmFtZShfX3diLAorCQkJCQkJCV9fd2IgKyBzaXplb2YoX193YikpOworCSAgaWYgKF9fZiB8IF9fd3QpCisJICAgIHJldHVybiB0cnVlOworCX0KKyAgICAKKyAgICAgIC8vIHNwZWNpYWwgY2FzZSBvZiBbWzpzcGFjZTpdXSBpbiBbWzpibGFuazpdXQorICAgICAgaWYgKF9fYyA9PSBfX2N0eXBlLmlzc3BhY2UoX19jKSkKKwl7CisJICBjb25zdCBjaGFyKiBjb25zdCBfX2JiW10gPSAiYmxhbmsiOworCSAgY2hhcl9jbGFzc190eXBlIF9fYnQgPSB0aGlzLT5sb29rdXBfY2xhc3NuYW1lKF9fYmIsCisJCQkJCQkJX19iYiArIHNpemVvZihfX2JiKSk7CisJICBpZiAoX19mIHwgX19idCkKKwkgICAgcmV0dXJuIHRydWU7CisJfQorICAgICAgCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlPgorICAgIGludCByZWdleF90cmFpdHM8X0NoX3R5cGU+OjoKKyAgICB2YWx1ZShfQ2hfdHlwZSBfX2NoLCBpbnQgX19yYWRpeCkgY29uc3QKKyAgICB7CisgICAgICBzdGQ6OmJhc2ljX2lzdHJpbmdzdHJlYW08X0NoX3R5cGU+IF9faXMoc3RyaW5nX3R5cGUoMSwgX19jaCkpOworICAgICAgaW50IF9fdjsKKyAgICAgIGlmIChfX3JhZGl4ID09IDgpCisJX19pcyA+PiBzdGQ6Om9jdDsKKyAgICAgIGVsc2UgaWYgKF9fcmFkaXggPT0gMTYpCisJX19pcyA+PiBzdGQ6OmhleDsKKyAgICAgIF9faXMgPj4gX192OworICAgICAgcmV0dXJuIF9faXMuZmFpbCgpID8gLTEgOiBfX3Y7CisgICAgfQorCisgIC8vIFs3LjhdIENsYXNzIGJhc2ljX3JlZ2V4CisgIC8qKgorICAgKiBPYmplY3RzIG9mIHNwZWNpYWxpemF0aW9ucyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCByZWd1bGFyIGV4cHJlc3Npb25zCisgICAqIGNvbnN0cnVjdGVkIGZyb20gc2VxdWVuY2VzIG9mIGNoYXJhY3RlciB0eXBlIEBwIF9DaF90eXBlLgorICAgKgorICAgKiBTdG9yYWdlIGZvciB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgYXMKKyAgICogbmVjZXNzYXJ5IGJ5IHRoZSBtZW1iZXIgZnVuY3Rpb25zIG9mIHRoaXMgY2xhc3MuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cyA9IHJlZ2V4X3RyYWl0czxfQ2hfdHlwZT4gPgorICAgIGNsYXNzIGJhc2ljX3JlZ2V4CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIC8vIHR5cGVzOgorICAgICAgdHlwZWRlZiBfQ2hfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIGZsYWdfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1J4X3RyYWl0czo6bG9jYWxlX3R5cGUgIGxvY2FsZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfUnhfdHJhaXRzOjpzdHJpbmdfdHlwZSAgc3RyaW5nX3R5cGU7CisKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgQ29uc3RhbnRzCisgICAgICAgKiB0cjEgWzcuOC4xXSBzdGQgWzI4LjguMV0KKyAgICAgICAqLworICAgICAgLy9AeworICAgICAgc3RhdGljIGNvbnN0IHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIGljYXNlCisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjppY2FzZTsKKyAgICAgIHN0YXRpYyBjb25zdCByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBub3N1YnMKKyAgICAgICAgPSByZWdleF9jb25zdGFudHM6Om5vc3ViczsKKyAgICAgIHN0YXRpYyBjb25zdCByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBvcHRpbWl6ZQorICAgICAgICA9IHJlZ2V4X2NvbnN0YW50czo6b3B0aW1pemU7CisgICAgICBzdGF0aWMgY29uc3QgcmVnZXhfY29uc3RhbnRzOjpzeW50YXhfb3B0aW9uX3R5cGUgY29sbGF0ZQorICAgICAgICA9IHJlZ2V4X2NvbnN0YW50czo6Y29sbGF0ZTsKKyAgICAgIHN0YXRpYyBjb25zdCByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBFQ01BU2NyaXB0CisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0OworICAgICAgc3RhdGljIGNvbnN0IHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29wdGlvbl90eXBlIGJhc2ljCisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjpiYXNpYzsKKyAgICAgIHN0YXRpYyBjb25zdCByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBleHRlbmRlZAorICAgICAgICA9IHJlZ2V4X2NvbnN0YW50czo6ZXh0ZW5kZWQ7CisgICAgICBzdGF0aWMgY29uc3QgcmVnZXhfY29uc3RhbnRzOjpzeW50YXhfb3B0aW9uX3R5cGUgYXdrCisgICAgICAgID0gcmVnZXhfY29uc3RhbnRzOjphd2s7CisgICAgICBzdGF0aWMgY29uc3QgcmVnZXhfY29uc3RhbnRzOjpzeW50YXhfb3B0aW9uX3R5cGUgZ3JlcAorICAgICAgICA9IHJlZ2V4X2NvbnN0YW50czo6Z3JlcDsKKyAgICAgIHN0YXRpYyBjb25zdCByZWdleF9jb25zdGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBlZ3JlcAorICAgICAgICA9IHJlZ2V4X2NvbnN0YW50czo6ZWdyZXA7CisgICAgICAvL0B9CisKKyAgICAgIC8vIFs3LjguMl0gY29uc3RydWN0L2NvcHkvZGVzdHJveQorICAgICAgLyoqCisgICAgICAgKiBDb25zdHJ1Y3RzIGEgYmFzaWMgcmVndWxhciBleHByZXNzaW9uIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55CisgICAgICAgKiBjaGFyYWN0ZXIgc2VxdWVuY2UuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4KCkKKyAgICAgIDogX01fZmxhZ3MocmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KSwgX01fcGF0dGVybigpLCBfTV9tYXJrX2NvdW50KDApCisgICAgICB7IF9NX2NvbXBpbGUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgYmFzaWMgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlIHNlcXVlbmNlCisgICAgICAgKiBbcCwgcCArIGNoYXJfdHJhaXRzPF9DaF90eXBlPjo6bGVuZ3RoKHApKSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgKiBmbGFncyBpbiBAcCBmLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBwIEEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgYSBDLXN0eWxlIG51bGwtdGVybWluYXRlZCBzdHJpbmcKKyAgICAgICAqICAgICAgICAgIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gZiBGbGFncyBpbmRpY2F0aW5nIHRoZSBzeW50YXggcnVsZXMgYW5kIG9wdGlvbnMuCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBAcCBwIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGJhc2ljX3JlZ2V4KGNvbnN0IF9DaF90eXBlKiBfX3AsCisJCSAgZmxhZ190eXBlIF9fZiA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdCkKKyAgICAgIDogX01fZmxhZ3MoX19mKSwgX01fcGF0dGVybihfX3ApLCBfTV9tYXJrX2NvdW50KDApCisgICAgICB7IF9NX2NvbXBpbGUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgYmFzaWMgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlIHNlcXVlbmNlCisgICAgICAgKiBbcCwgcCArIGxlbikgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBmbGFncyBpbiBAcCBmLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBwICAgQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhcgorICAgICAgICogICAgICAgICAgICBleHByZXNzaW9uLgorICAgICAgICogQHBhcmFtIGxlbiBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICogQHBhcmFtIGYgICBGbGFncyBpbmRpY2F0aW5nIHRoZSBzeW50YXggcnVsZXMgYW5kIG9wdGlvbnMuCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBAcCBwIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgoY29uc3QgX0NoX3R5cGUqIF9fcCwgc3RkOjpzaXplX3QgX19sZW4sIGZsYWdfdHlwZSBfX2YpCisgICAgICA6IF9NX2ZsYWdzKF9fZikgLCBfTV9wYXR0ZXJuKF9fcCwgX19sZW4pLCBfTV9tYXJrX2NvdW50KDApCisgICAgICB7IF9NX2NvbXBpbGUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5LWNvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHJocyBBIEBwIHJlZ2V4IG9iamVjdC4KKyAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4KGNvbnN0IGJhc2ljX3JlZ2V4JiBfX3JocykKKyAgICAgIDogX01fZmxhZ3MoX19yaHMuX01fZmxhZ3MpLCBfTV9wYXR0ZXJuKF9fcmhzLl9NX3BhdHRlcm4pLAorCV9NX21hcmtfY291bnQoX19yaHMuX01fbWFya19jb3VudCkKKyAgICAgIHsgX01fY29tcGlsZSgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGUgc3RyaW5nCisgICAgICAgKiBAcCBzIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZmxhZ3MgaW4gQHAgZi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gcyBBIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICogQHBhcmFtIGYgRmxhZ3MgaW5kaWNhdGluZyB0aGUgc3ludGF4IHJ1bGVzIGFuZCBvcHRpb25zLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgQHAgcyBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgYmFzaWNfcmVnZXgoY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3MsCisJCSAgICBmbGFnX3R5cGUgX19mID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KQorCTogX01fZmxhZ3MoX19mKSwgX01fcGF0dGVybihfX3MuYmVnaW4oKSwgX19zLmVuZCgpKSwgX01fbWFya19jb3VudCgwKQorICAgICAgICB7IF9NX2NvbXBpbGUoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb25zdHJ1Y3RzIGEgYmFzaWMgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlIHJhbmdlCisgICAgICAgKiBbZmlyc3QsIGxhc3QpIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZmxhZ3MgaW4gQHAgZi4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gZmlyc3QgVGhlIHN0YXJ0IG9mIGEgcmFuZ2UgY29udGFpbmluZyBhIHZhbGlkIHJlZ3VsYXIKKyAgICAgICAqICAgICAgICAgICAgICBleHByZXNzaW9uLgorICAgICAgICogQHBhcmFtIGxhc3QgIFRoZSBlbmQgb2YgYSByYW5nZSBjb250YWluaW5nIGEgdmFsaWQgcmVndWxhcgorICAgICAgICogICAgICAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gZiAgICAgVGhlIGZvcm1hdCBmbGFncyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgQHAgW2ZpcnN0LCBsYXN0KSBpcyBub3QgYSB2YWxpZCByZWd1bGFyCisgICAgICAgKiAgICAgICAgIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorICAgICAgICBiYXNpY19yZWdleChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIAorCQkgICAgZmxhZ190eXBlIF9fZiA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdCkKKwk6IF9NX2ZsYWdzKF9fZiksIF9NX3BhdHRlcm4oX19maXJzdCwgX19sYXN0KSwgX01fbWFya19jb3VudCgwKQorICAgICAgICB7IF9NX2NvbXBpbGUoKTsgfQorCisjaWZkZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgxMQorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29uc3RydWN0cyBhIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGwgIFRoZSBpbml0aWFsaXplciBsaXN0LgorICAgICAgICogQHBhcmFtIGYgIFRoZSBmb3JtYXQgZmxhZ3Mgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHJlZ2V4X2Vycm9yIGlmIEBwIGwgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uLgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleChpbml0aWFsaXplcl9saXN0PF9DaF90eXBlPiBfX2wsCisJCSAgZmxhZ190eXBlIF9fZiA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdCkKKwk6IF9NX2ZsYWdzKF9fZiksIF9NX3BhdHRlcm4oX19sLmJlZ2luKCksIF9fbC5lbmQoKSksIF9NX21hcmtfY291bnQoMCkKKyAgICAgICAgeyBfTV9jb21waWxlKCk7IH0KKyNlbmRpZgorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEZXN0cm95cyBhIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICAqLworICAgICAgfmJhc2ljX3JlZ2V4KCkKKyAgICAgIHsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBBc3NpZ25zIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gYW5vdGhlci4KKyAgICAgICAqLworICAgICAgYmFzaWNfcmVnZXgmCisgICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfcmVnZXgmIF9fcmhzKQorICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcmhzKTsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXBsYWNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIGEgbmV3IG9uZSBjb25zdHJ1Y3RlZCBmcm9tCisgICAgICAgKiBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIG51bGwtdGVybWluYXRlZCBDLXN0eWxlIHN0cmluZworICAgICAgICogICAgICAgIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaF90eXBlKiBfX3ApCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19wLCBmbGFncygpKTsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBSZXBsYWNlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIGEgbmV3IG9uZSBjb25zdHJ1Y3RlZCBmcm9tCisgICAgICAgKiBhIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gQSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlcmFpdHMsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlLCBfQ2hfdHlwZXJhaXRzLCBfQWxsb2NhdG9yPiYgX19zKQorICAgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCBmbGFncygpKTsgfQorCisgICAgICAvLyBbNy44LjNdIGFzc2lnbgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgdGhlIHJlYWwgYXNzaWdubWVudCBvcGVyYXRvci4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gdGhhdCBBbm90aGVyIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QuCisgICAgICAgKi8KKyAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3JlZ2V4JiBfX3RoYXQpCisgICAgICB7CisJYmFzaWNfcmVnZXggX190bXAoX190aGF0KTsKKwl0aGlzLT5zd2FwKF9fdG1wKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEFzc2lnbnMgYSBuZXcgcmVndWxhciBleHByZXNzaW9uIHRvIGEgcmVnZXggb2JqZWN0IGZyb20gYQorICAgICAgICogQy1zdHlsZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAqIHBhdHRlcm4uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHAgICAgIEEgcG9pbnRlciB0byBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nCisgICAgICAgKiAgICAgICAgICAgICAgYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KKyAgICAgICAqIEBwYXJhbSBmbGFncyBTeW50YXggb3B0aW9uIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgcCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgKiBwYXR0ZXJuIGludGVycHJldGVkIGFjY29yZGluZyB0byBAcCBmbGFncy4gIElmIHJlZ2V4X2Vycm9yIGlzIHRocm93biwKKyAgICAgICAqICp0aGlzIHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleCYKKyAgICAgIGFzc2lnbihjb25zdCBfQ2hfdHlwZSogX19wLAorCSAgICAgZmxhZ190eXBlIF9fZmxhZ3MgPSByZWdleF9jb25zdGFudHM6OkVDTUFTY3JpcHQpCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oc3RyaW5nX3R5cGUoX19wKSwgX19mbGFncyk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyBhIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gdG8gYSByZWdleCBvYmplY3QgZnJvbSBhCisgICAgICAgKiBDLXN0eWxlIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHAgICAgIEEgcG9pbnRlciB0byBhIEMtc3R5bGUgc3RyaW5nIGNvbnRhaW5pbmcgYQorICAgICAgICogICAgICAgICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgorICAgICAgICogQHBhcmFtIGxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHN0cmluZy4KKyAgICAgICAqIEBwYXJhbSBmbGFncyBTeW50YXggb3B0aW9uIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgcCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgKiBwYXR0ZXJuIGludGVycHJldGVkIGFjY29yZGluZyB0byBAcCBmbGFncy4gIElmIHJlZ2V4X2Vycm9yIGlzIHRocm93biwKKyAgICAgICAqICp0aGlzIHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleCYKKyAgICAgIGFzc2lnbihjb25zdCBfQ2hfdHlwZSogX19wLCBzdGQ6OnNpemVfdCBfX2xlbiwgZmxhZ190eXBlIF9fZmxhZ3MpCisgICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oc3RyaW5nX3R5cGUoX19wLCBfX2xlbiksIF9fZmxhZ3MpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEFzc2lnbnMgYSBuZXcgcmVndWxhciBleHByZXNzaW9uIHRvIGEgcmVnZXggb2JqZWN0IGZyb20gYSAKKyAgICAgICAqIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4uCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHMgICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi4KKyAgICAgICAqIEBwYXJhbSBmbGFncyBTeW50YXggb3B0aW9uIGZsYWdzLgorICAgICAgICoKKyAgICAgICAqIEB0aHJvd3MgcmVnZXhfZXJyb3IgaWYgcCBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgKiBwYXR0ZXJuIGludGVycHJldGVkIGFjY29yZGluZyB0byBAcCBmbGFncy4gIElmIHJlZ2V4X2Vycm9yIGlzIHRocm93biwKKyAgICAgICAqICp0aGlzIHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAgICovCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZXJhaXRzLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgICAgICBiYXNpY19yZWdleCYKKyAgICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwgX0NoX3R5cGVyYWl0cywgX0FsbG9jYXRvcj4mIF9fcywKKwkgICAgICAgZmxhZ190eXBlIF9fZiA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdCkKKyAgICAgICAgeyAKKwkgIGJhc2ljX3JlZ2V4IF9fdG1wKF9fcywgX19mKTsKKwkgIHRoaXMtPnN3YXAoX190bXApOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyBhIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gdG8gYSByZWdleCBvYmplY3QuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIGZpcnN0IFRoZSBzdGFydCBvZiBhIHJhbmdlIGNvbnRhaW5pbmcgYSB2YWxpZCByZWd1bGFyCisgICAgICAgKiAgICAgICAgICAgICAgZXhwcmVzc2lvbi4KKyAgICAgICAqIEBwYXJhbSBsYXN0ICBUaGUgZW5kIG9mIGEgcmFuZ2UgY29udGFpbmluZyBhIHZhbGlkIHJlZ3VsYXIKKyAgICAgICAqICAgICAgICAgICAgICBleHByZXNzaW9uLgorICAgICAgICogQHBhcmFtIGZsYWdzIFN5bnRheCBvcHRpb24gZmxhZ3MuCisgICAgICAgKgorICAgICAgICogQHRocm93cyByZWdleF9lcnJvciBpZiBwIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgICAqIHBhdHRlcm4gaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIEBwIGZsYWdzLiAgSWYgcmVnZXhfZXJyb3IgaXMgdGhyb3duLAorICAgICAgICogdGhlIG9iamVjdCByZW1haW5zIHVuY2hhbmdlZC4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisgICAgICAgIGJhc2ljX3JlZ2V4JgorICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAorCSAgICAgICBmbGFnX3R5cGUgX19mbGFncyA9IHJlZ2V4X2NvbnN0YW50czo6RUNNQVNjcmlwdCkKKyAgICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKHN0cmluZ190eXBlKF9fZmlyc3QsIF9fbGFzdCksIF9fZmxhZ3MpOyB9CisKKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDExCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBBc3NpZ25zIGEgbmV3IHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhIHJlZ2V4IG9iamVjdC4KKyAgICAgICAqCisgICAgICAgKiBAcGFyYW0gbCAgICAgQW4gaW5pdGlhbGl6ZXIgbGlzdCByZXByZXNlbnRpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAgICAgKiBAcGFyYW0gZmxhZ3MgU3ludGF4IG9wdGlvbiBmbGFncy4KKyAgICAgICAqCisgICAgICAgKiBAdGhyb3dzIHJlZ2V4X2Vycm9yIGlmIEBwIGwgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHJlZ3VsYXIKKyAgICAgICAqIGV4cHJlc3Npb24gcGF0dGVybiBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gQHAgZmxhZ3MuICBJZiByZWdleF9lcnJvcgorICAgICAgICogaXMgdGhyb3duLCB0aGUgb2JqZWN0IHJlbWFpbnMgdW5jaGFuZ2VkLgorICAgICAgICovCisgICAgICBiYXNpY19yZWdleCYKKyAgICAgIGFzc2lnbihpbml0aWFsaXplcl9saXN0PF9DaF90eXBlPiBfX2wsCisJICAgICBmbGFnX3R5cGUgX19mID0gcmVnZXhfY29uc3RhbnRzOjpFQ01BU2NyaXB0KQorICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIF9fZik7IH0KKyNlbmRpZgorCisgICAgICAvLyBbNy44LjRdIGNvbnN0IG9wZXJhdGlvbnMKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG51bWJlciBvZiBtYXJrZWQgc3ViZXhwcmVzc2lvbnMgd2l0aGluIHRoZSByZWd1bGFyCisgICAgICAgKiBleHByZXNzaW9uLgorICAgICAgICovCisgICAgICB1bnNpZ25lZCBpbnQKKyAgICAgIG1hcmtfY291bnQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fbWFya19jb3VudDsgfQorICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBmbGFncyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgKiBvciBpbiB0aGUgbGFzdCBjYWxsIHRvIGFzc2lnbigpLgorICAgICAgICovCisgICAgICBmbGFnX3R5cGUKKyAgICAgIGZsYWdzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX2ZsYWdzOyB9CisgICAgICAKKyAgICAgIC8vIFs3LjguNV0gbG9jYWxlCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBJbWJ1ZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBsb2MgQSBsb2NhbGUuCisgICAgICAgKi8KKyAgICAgIGxvY2FsZV90eXBlCisgICAgICBpbWJ1ZShsb2NhbGVfdHlwZSBfX2xvYykKKyAgICAgIHsgcmV0dXJuIF9NX3RyYWl0cy5pbWJ1ZShfX2xvYyk7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbG9jYWxlIGN1cnJlbnRseSBpbWJ1ZWQgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICogICAgICAgIG9iamVjdC4KKyAgICAgICAqLworICAgICAgbG9jYWxlX3R5cGUKKyAgICAgIGdldGxvYygpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV90cmFpdHMuZ2V0bG9jKCk7IH0KKyAgICAgIAorICAgICAgLy8gWzcuOC42XSBzd2FwCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBTd2FwcyB0aGUgY29udGVudHMgb2YgdHdvIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSByaHMgQW5vdGhlciByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzd2FwKGJhc2ljX3JlZ2V4JiBfX3JocykKKyAgICAgIHsKKwlzdGQ6OnN3YXAoX01fZmxhZ3MsICAgICAgX19yaHMuX01fZmxhZ3MpOworCXN0ZDo6c3dhcChfTV9wYXR0ZXJuLCAgICBfX3Jocy5fTV9wYXR0ZXJuKTsKKwlzdGQ6OnN3YXAoX01fbWFya19jb3VudCwgX19yaHMuX01fbWFya19jb3VudCk7CisJc3RkOjpzd2FwKF9NX3RyYWl0cywgICAgIF9fcmhzLl9NX3RyYWl0cyk7CisgICAgICB9CisgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29tcGlsZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBpbnRvIGEgTkZBLgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHZvaWQgX01fY29tcGlsZSgpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgZmxhZ190eXBlICAgIF9NX2ZsYWdzOworICAgICAgc3RyaW5nX3R5cGUgIF9NX3BhdHRlcm47CisgICAgICB1bnNpZ25lZCBpbnQgX01fbWFya19jb3VudDsKKyAgICAgIF9SeF90cmFpdHMgICBfTV90cmFpdHM7CisgICAgfTsKKyAgCisgIC8qKiBAYnJpZWYgU3RhbmRhcmQgcmVndWxhciBleHByZXNzaW9ucy4gKi8KKyAgdHlwZWRlZiBiYXNpY19yZWdleDxjaGFyPiAgICByZWdleDsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAvKiogQGJyaWVmIFN0YW5kYXJkIHdpZGUtY2hhcmFjdGVyIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICovCisgIHR5cGVkZWYgYmFzaWNfcmVnZXg8d2NoYXJfdD4gd3JlZ2V4OworI2VuZGlmCisKKworICAvLyBbNy44LjZdIGJhc2ljX3JlZ2V4IHN3YXAKKyAgLyoqCisgICAqIEBicmllZiBTd2FwcyB0aGUgY29udGVudHMgb2YgdHdvIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzLgorICAgKiBAcGFyYW0gbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICogQHBhcmFtIHJocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19saHMsCisJIGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19yaHMpCisgICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQorCisKKyAgLy8gWzcuOV0gQ2xhc3MgdGVtcGxhdGUgc3ViX21hdGNoCisgIC8qKgorICAgKiBBIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgbWF0Y2hlZCBieSBhIHBhcnRpY3VsYXIgbWFya2VkIHN1Yi1leHByZXNzaW9uLgorICAgKgorICAgKiBBbiBvYmplY3Qgb2YgdGhpcyBjbGFzcyBpcyBlc3NlbnRpYWxseSBhIHBhaXIgb2YgaXRlcmF0b3JzIG1hcmtpbmcgYQorICAgKiBtYXRjaGVkIHN1YmV4cHJlc3Npb24gd2l0aGluIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2guIFN1Y2gKKyAgICogb2JqZWN0cyBjYW4gYmUgY29udmVydGVkIHRvIGFuZCBjb21wYXJlZCB3aXRoIHN0ZDo6YmFzaWNfc3RyaW5nIG9iamVjdHMKKyAgICogb2YgYSBzaW1pbGFyIGJhc2UgY2hhcmFjdGVyIHR5cGUgYXMgdGhlIHBhdHRlcm4gbWF0Y2hlZCBieSB0aGUgcmVndWxhcgorICAgKiBleHByZXNzaW9uLgorICAgKgorICAgKiBUaGUgaXRlcmF0b3JzIHRoYXQgbWFrZSB1cCB0aGUgcGFpciBhcmUgdGhlIHVzdWFsIGhhbGYtb3BlbiBpbnRlcnZhbAorICAgKiByZWZlcmVuY2luZyB0aGUgYWN0dWFsIG9yaWdpbmFsIHBhdHRlcm4gbWF0Y2hlZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaUl0ZXI+CisgICAgY2xhc3Mgc3ViX21hdGNoIDogcHVibGljIHN0ZDo6cGFpcjxfQmlJdGVyLCBfQmlJdGVyPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlJdGVyPjo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIF9CaUl0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisKKyAgICBwdWJsaWM6CisgICAgICBib29sIG1hdGNoZWQ7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogR2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaGluZyBzZXF1ZW5jZS4KKyAgICAgICAqLworICAgICAgZGlmZmVyZW5jZV90eXBlCisgICAgICBsZW5ndGgoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+bWF0Y2hlZCA/IHN0ZDo6ZGlzdGFuY2UodGhpcy0+Zmlyc3QsIHRoaXMtPnNlY29uZCkgOiAwOyB9CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEdldHMgdGhlIG1hdGNoaW5nIHNlcXVlbmNlIGFzIGEgc3RyaW5nLgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRoZSBtYXRjaGluZyBzZXF1ZW5jZSBhcyBhIHN0cmluZy4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGlzIHRoZSBpbXBsaWNpdCBjb252ZXJzaW9uIG9wZXJhdG9yLiAgSXQgaXMgaWRlbnRpY2FsIHRvIHRoZQorICAgICAgICogc3RyKCkgbWVtYmVyIGZ1bmN0aW9uIGV4Y2VwdCB0aGF0IGl0IHdpbGwgd2FudCB0byBwb3AgdXAgaW4KKyAgICAgICAqIHVuZXhwZWN0ZWQgcGxhY2VzIGFuZCBjYXVzZSBhIGdyZWF0IGRlYWwgb2YgY29uZnVzaW9uIGFuZCBjdXJzaW5nCisgICAgICAgKiBmcm9tIHRoZSB1bndhcnkuCisgICAgICAgKi8KKyAgICAgIG9wZXJhdG9yIGJhc2ljX3N0cmluZzx2YWx1ZV90eXBlPigpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRoaXMtPm1hdGNoZWQKKwkgID8gc3RkOjpiYXNpY19zdHJpbmc8dmFsdWVfdHlwZT4odGhpcy0+Zmlyc3QsIHRoaXMtPnNlY29uZCkKKwkgIDogc3RkOjpiYXNpY19zdHJpbmc8dmFsdWVfdHlwZT4oKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgbWF0Y2hpbmcgc2VxdWVuY2UgYXMgYSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogQHJldHVybnMgdGhlIG1hdGNoaW5nIHNlcXVlbmNlIGFzIGEgc3RyaW5nLgorICAgICAgICovCisgICAgICBiYXNpY19zdHJpbmc8dmFsdWVfdHlwZT4KKyAgICAgIHN0cigpIGNvbnN0CisgICAgICB7CisJcmV0dXJuIHRoaXMtPm1hdGNoZWQKKwkgID8gc3RkOjpiYXNpY19zdHJpbmc8dmFsdWVfdHlwZT4odGhpcy0+Zmlyc3QsIHRoaXMtPnNlY29uZCkKKwkgIDogc3RkOjpiYXNpY19zdHJpbmc8dmFsdWVfdHlwZT4oKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29tcGFyZXMgdGhpcyBhbmQgYW5vdGhlciBtYXRjaGVkIHNlcXVlbmNlLgorICAgICAgICoKKyAgICAgICAqIEBwYXJhbSBzIEFub3RoZXIgbWF0Y2hlZCBzZXF1ZW5jZSB0byBjb21wYXJlIHRvIHRoaXMgb25lLgorICAgICAgICoKKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBiZWZvcmUgQHAgcy4KKyAgICAgICAqIEByZXR2YWwgPTAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIGlzIGVxdWl2YWxlbnQgdG8gQHAgcy4KKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBhZnRlciBAcCBzLgorICAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3Qgc3ViX21hdGNoJiBfX3MpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5zdHIoKS5jb21wYXJlKF9fcy5zdHIoKSk7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29tcGFyZXMgdGhpcyBzdWJfbWF0Y2ggdG8gYSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHMgQSBzdHJpbmcgdG8gY29tcGFyZSB0byB0aGlzIHN1Yl9tYXRjaC4KKyAgICAgICAqCisgICAgICAgKiBAcmV0dmFsIDwwIHRoaXMgbWF0Y2hlZCBzZXF1ZW5jZSB3aWxsIGNvbGxhdGUgYmVmb3JlIEBwIHMuCisgICAgICAgKiBAcmV0dmFsID0wIHRoaXMgbWF0Y2hlZCBzZXF1ZW5jZSBpcyBlcXVpdmFsZW50IHRvIEBwIHMuCisgICAgICAgKiBAcmV0dmFsIDwwIHRoaXMgbWF0Y2hlZCBzZXF1ZW5jZSB3aWxsIGNvbGxhdGUgYWZ0ZXIgQHAgcy4KKyAgICAgICAqLworICAgICAgaW50CisgICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZzx2YWx1ZV90eXBlPiYgX19zKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+c3RyKCkuY29tcGFyZShfX3MpOyB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIHRoaXMgc3ViX21hdGNoIHRvIGEgQy1zdHlsZSBzdHJpbmcuCisgICAgICAgKgorICAgICAgICogQHBhcmFtIHMgQSBDLXN0eWxlIHN0cmluZyB0byBjb21wYXJlIHRvIHRoaXMgc3ViX21hdGNoLgorICAgICAgICoKKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBiZWZvcmUgQHAgcy4KKyAgICAgICAqIEByZXR2YWwgPTAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIGlzIGVxdWl2YWxlbnQgdG8gQHAgcy4KKyAgICAgICAqIEByZXR2YWwgPDAgdGhpcyBtYXRjaGVkIHNlcXVlbmNlIHdpbGwgY29sbGF0ZSBhZnRlciBAcCBzLgorICAgICAgICovCisgICAgICBpbnQKKyAgICAgIGNvbXBhcmUoY29uc3QgdmFsdWVfdHlwZSogX19zKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+c3RyKCkuY29tcGFyZShfX3MpOyB9CisgICAgfTsKKyAgCisgIAorICAvKiogQGJyaWVmIFN0YW5kYXJkIHJlZ2V4IHN1Ym1hdGNoIG92ZXIgYSBDLXN0eWxlIG51bGwtdGVybWluYXRlZCBzdHJpbmcuICovCisgIHR5cGVkZWYgc3ViX21hdGNoPGNvbnN0IGNoYXIqPiAgICAgICAgICAgICBjc3ViX21hdGNoOworICAvKiogQGJyaWVmIFN0YW5kYXJkIHJlZ2V4IHN1Ym1hdGNoIG92ZXIgYSBzdGFuZGFyZCBzdHJpbmcuICovCisgIHR5cGVkZWYgc3ViX21hdGNoPHN0cmluZzo6Y29uc3RfaXRlcmF0b3I+ICBzc3ViX21hdGNoOworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIC8qKiBAYnJpZWYgUmVnZXggc3VibWF0Y2ggb3ZlciBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHdpZGUgc3RyaW5nLiAqLworICB0eXBlZGVmIHN1Yl9tYXRjaDxjb25zdCB3Y2hhcl90Kj4gICAgICAgICAgd2NzdWJfbWF0Y2g7CisgIC8qKiBAYnJpZWYgUmVnZXggc3VibWF0Y2ggb3ZlciBhIHN0YW5kYXJkIHdpZGUgc3RyaW5nLiAqLworICB0eXBlZGVmIHN1Yl9tYXRjaDx3c3RyaW5nOjpjb25zdF9pdGVyYXRvcj4gd3NzdWJfbWF0Y2g7CisjZW5kaWYKKworICAvLyBbNy45LjJdIHN1Yl9tYXRjaCBub24tbWVtYmVyIG9wZXJhdG9ycworICAKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgZXF1aXZhbGVuY2Ugb2YgdHdvIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaGVzLgorICAgKiBAcGFyYW0gbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyAgaXMgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaUl0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgdHdvIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaGVzLgorICAgKiBAcGFyYW0gbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyAgaXMgbm90IGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlJdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiB0d28gcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoZXMuCisgICAqIEBwYXJhbSBsaHMgRmlyc3QgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIFNlY29uZCByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHByZWNlZGVzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpSXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlJdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgdHdvIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaGVzLgorICAgKiBAcGFyYW0gbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBzdWNjZWVkIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpSXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgdHdvIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaGVzLgorICAgKiBAcGFyYW0gbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBwcmVjZWRlIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpSXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgdHdvIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaGVzLgorICAgKiBAcGFyYW0gbGhzIEZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBTZWNvbmQgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBzdWNjZWVkcyBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaUl0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc3ViX21hdGNoPF9CaUl0ZXI+JiBfX2xocywKKwkgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpSXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGVxdWl2YWxlbmNlIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiAgICAgICAgc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPT0gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBpbmVxdWl2YWxlbmNlIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKiAgICAgICAgc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzICBpcyBub3QgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzwKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSwKKwkgICAgICAgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19saHMsIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzICE9IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBwcmVjZWRlcyBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgICAgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19saHMsIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgICB7IHJldHVybiBfX2xocyA8IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBzdWNjZWVkcyBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHJhaXRzLCB0eXBlbmFtZSBfQ2hfYWxsb2M+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsIAorCSAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fbGhzLCBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA+IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBwcmVjZWRlIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX2xocywgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPj0gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHN1Y2NlZWQgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUsCisJICAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fbGhzLCBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA8PSBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGVxdWl2YWxlbmNlIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhCisgICAqICAgICAgICBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGlzIGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA9PSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgaXMgbm90IGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSAhPSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgcHJlY2VkZXMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgY2xhc3MgX0NoX3RyYWl0cywgY2xhc3MgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzwKKwkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgIF9DaF90cmFpdHMsIF9DaF9hbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpIDwgX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYSBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHN1Y2NlZWRzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIGNsYXNzIF9DaF90cmFpdHMsIGNsYXNzIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICBjb25zdCBiYXNpY19zdHJpbmc8CisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSwKKwkgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA+IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBwcmVjZWRlIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIGNsYXNzIF9DaF90cmFpdHMsIGNsYXNzIF9DaF9hbGxvYz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzwKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSwKKwkgICAgICAgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPj0gX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYSBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHN1Y2NlZWQgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgY2xhc3MgX0NoX3RyYWl0cywgY2xhc3MgX0NoX2FsbG9jPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgICAgICBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA8PSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGVxdWl2YWxlbmNlIG9mIGEgQyBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uCisgICAqICAgICAgICBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIEMgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyAgaXMgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PSh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPT0gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBpbmVxdWl2YWxlbmNlIG9mIGFuIGl0ZXJhdG9yIHZhbHVlIGFuZCBhIHJlZ3VsYXIKKyAgICogICAgICAgIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyAhPSBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgcHJlY2VkZXMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPCh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX2xocywKKwkgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA8IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBzdWNjZWVkcyBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fbGhzLAorCSAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzID4gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzID49IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBzdWNjZWVkIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjw9KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QqIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA8PSBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGVxdWl2YWxlbmNlIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhCisgICAqICAgICAgICBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBwb2ludGVyIHRvIGEgc3RyaW5nPworICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyAgaXMgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPT0gX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBpbmVxdWl2YWxlbmNlIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhCisgICAqICAgICAgICBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBwb2ludGVyIHRvIGEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBpcyBub3QgZXF1aXZhbGVudCB0byBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgIT0gX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaCBhbmQgYSBzdHJpbmcuCisgICAqIEBwYXJhbSBsaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSByaHMgQSBzdHJpbmcuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHByZWNlZGVzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPCBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgc3VjY2VlZHMgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA+IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgc3RyaW5nLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBkb2VzIG5vdCBwcmVjZWRlIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0KiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA+PSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIHN0cmluZy4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgZG9lcyBub3Qgc3VjY2VlZCBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCogX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPD0gX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBlcXVpdmFsZW5jZSBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICogICAgICAgIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBpcyBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fbGhzLAorCSAgICAgICBjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocyA9PSBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uCisgICAqICAgICAgICBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgaXMgbm90IGVxdWl2YWxlbnQgdG8gQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzICE9IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSBzdHJpbmcgYW5kIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gbGhzIEEgc3RyaW5nLgorICAgKiBAcGFyYW0gcmhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcmV0dXJucyB0cnVlIGlmIEBhIGxocyBwcmVjZWRlcyBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8KHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fbGhzLAorCSAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzIDwgX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHN1Y2NlZWRzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19saHMsCisJICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPiBfX3Jocy5zdHIoKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgc3RyaW5nIGFuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIGxocyBBIHN0cmluZy4KKyAgICogQHBhcmFtIHJocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgZG9lcyBub3QgcHJlY2VkZSBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PSh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX2xocywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMgPj0gX19yaHMuc3RyKCk7IH0KKworICAvKioKKyAgICogQGJyaWVmIFRlc3RzIHRoZSBvcmRlcmluZyBvZiBhIHN0cmluZyBhbmQgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEBwYXJhbSBsaHMgQSBzdHJpbmcuCisgICAqIEBwYXJhbSByaHMgQSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2guCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHN1Y2NlZWQgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0odHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19saHMsCisJICAgICAgIGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzIDw9IF9fcmhzLnN0cigpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIGNvbnN0IHN0cmluZyByZWZlcmVuY2UuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzICBpcyBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSA9PSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIGluZXF1aXZhbGVuY2Ugb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEKKyAgICogICAgICAgIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIGNvbnN0IHN0cmluZyByZWZlcmVuY2UuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGlzIG5vdCBlcXVpdmFsZW50IHRvIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IHN1Yl9tYXRjaDxfQmlfaXRlcj4mIF9fbGhzLAorCSAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlIGNvbnN0JiBfX3JocykKKyAgICB7IHJldHVybiBfX2xocy5zdHIoKSAhPSBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIGNvbnN0IHN0cmluZyByZWZlcmVuY2UuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHByZWNlZGVzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPCBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIGNvbnN0IHN0cmluZyByZWZlcmVuY2UuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIHN1Y2NlZWRzIEBhIHJocywgZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvcj4oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPiBfX3JoczsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgVGVzdHMgdGhlIG9yZGVyaW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoIGFuZCBhIHN0cmluZy4KKyAgICogQHBhcmFtIGxocyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdWJtYXRjaC4KKyAgICogQHBhcmFtIHJocyBBIGNvbnN0IHN0cmluZyByZWZlcmVuY2UuCisgICAqIEByZXR1cm5zIHRydWUgaWYgQGEgbGhzIGRvZXMgbm90IHByZWNlZGUgQGEgcmhzLCBmYWxzZSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlcj4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19saHMsCisJICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgY29uc3QmIF9fcmhzKQorICAgIHsgcmV0dXJuIF9fbGhzLnN0cigpID49IF9fcmhzOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBUZXN0cyB0aGUgb3JkZXJpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VibWF0Y2ggYW5kIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gbGhzIEEgcmVndWxhciBleHByZXNzaW9uIHN1Ym1hdGNoLgorICAgKiBAcGFyYW0gcmhzIEEgY29uc3Qgc3RyaW5nIHJlZmVyZW5jZS4KKyAgICogQHJldHVybnMgdHJ1ZSBpZiBAYSBsaHMgZG9lcyBub3Qgc3VjY2VlZCBAYSByaHMsIGZhbHNlIG90aGVyd2lzZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBzdWJfbWF0Y2g8X0JpX2l0ZXI+JiBfX2xocywKKwkgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSBjb25zdCYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuc3RyKCkgPD0gX19yaHM7IH0KKworICAvKioKKyAgICogQGJyaWVmIEluc2VydHMgYSBtYXRjaGVkIHN0cmluZyBpbnRvIGFuIG91dHB1dCBzdHJlYW0uCisgICAqCisgICAqIEBwYXJhbSBvcyBUaGUgb3V0cHV0IHN0cmVhbS4KKyAgICogQHBhcmFtIG0gIEEgc3VibWF0Y2ggc3RyaW5nLgorICAgKgorICAgKiBAcmV0dXJucyB0aGUgb3V0cHV0IHN0cmVhbSB3aXRoIHRoZSBzdWJtYXRjaCBzdHJpbmcgaW5zZXJ0ZWQuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0JpX2l0ZXI+CisgICAgaW5saW5lCisgICAgYmFzaWNfb3N0cmVhbTxfQ2hfdHlwZSwgX0NoX3RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaF90eXBlLCBfQ2hfdHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qgc3ViX21hdGNoPF9CaV9pdGVyPiYgX19tKQorICAgIHsgcmV0dXJuIF9fb3MgPDwgX19tLnN0cigpOyB9CisKKyAgLy8gWzcuMTBdIENsYXNzIHRlbXBsYXRlIG1hdGNoX3Jlc3VsdHMKKyAgLyoqCisgICAqIEBicmllZiBUaGUgcmVzdWx0cyBvZiBhIG1hdGNoIG9yIHNlYXJjaCBvcGVyYXRpb24uCisgICAqCisgICAqIEEgY29sbGVjdGlvbiBvZiBjaGFyYWN0ZXIgc2VxdWVuY2VzIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIGEgcmVndWxhcgorICAgKiBleHByZXNzaW9uIG1hdGNoLiAgU3RvcmFnZSBmb3IgdGhlIGNvbGxlY3Rpb24gaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCBhcworICAgKiBuZWNlc3NhcnkgYnkgdGhlIG1lbWJlciBmdW5jdGlvbnMgb2YgY2xhc3MgdGVtcGxhdGUgbWF0Y2hfcmVzdWx0cy4KKyAgICoKKyAgICogVGhpcyBjbGFzcyBzYXRpc2ZpZXMgdGhlIFNlcXVlbmNlIHJlcXVpcmVtZW50cywgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQKKyAgICogb25seSB0aGUgb3BlcmF0aW9ucyBkZWZpbmVkIGZvciBhIGNvbnN0LXF1YWxpZmllZCBTZXF1ZW5jZSBhcmUgc3VwcG9ydGVkLgorICAgKgorICAgKiBUaGUgc3ViX21hdGNoIG9iamVjdCBzdG9yZWQgYXQgaW5kZXggMCByZXByZXNlbnRzIHN1Yi1leHByZXNzaW9uIDAsIGkuZS4KKyAgICogdGhlIHdob2xlIG1hdGNoLiBJbiB0aGlzIGNhc2UgdGhlIHN1Yl9tYXRjaCBtZW1iZXIgbWF0Y2hlZCBpcyBhbHdheXMgdHJ1ZS4KKyAgICogVGhlIHN1Yl9tYXRjaCBvYmplY3Qgc3RvcmVkIGF0IGluZGV4IG4gZGVub3RlcyB3aGF0IG1hdGNoZWQgdGhlIG1hcmtlZAorICAgKiBzdWItZXhwcmVzc2lvbiBuIHdpdGhpbiB0aGUgbWF0Y2hlZCBleHByZXNzaW9uLiBJZiB0aGUgc3ViLWV4cHJlc3Npb24gbgorICAgKiBwYXJ0aWNpcGF0ZWQgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggdGhlbiB0aGUgc3ViX21hdGNoIG1lbWJlcgorICAgKiBtYXRjaGVkIGV2YWx1YXRlcyB0byB0cnVlLCBhbmQgbWVtYmVycyBmaXJzdCBhbmQgc2Vjb25kIGRlbm90ZSB0aGUgcmFuZ2UKKyAgICogb2YgY2hhcmFjdGVycyBbZmlyc3QsIHNlY29uZCkgd2hpY2ggZm9ybWVkIHRoYXQgbWF0Y2guIE90aGVyd2lzZSBtYXRjaGVkCisgICAqIGlzIGZhbHNlLCBhbmQgbWVtYmVycyBmaXJzdCBhbmQgc2Vjb25kIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlCisgICAqIHRoYXQgd2FzIHNlYXJjaGVkLgorICAgKgorICAgKiBAbm9zdWJncm91cGluZworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsCisJICAgdHlwZW5hbWUgX0FsbG9jYXRvciA9IGFsbG9jYXRvcjxzdWJfbWF0Y2g8X0JpX2l0ZXI+ID4gPgorICAgIGNsYXNzIG1hdGNoX3Jlc3VsdHMKKyAgICA6IHByaXZhdGUgc3RkOjp2ZWN0b3I8c3RkOjp0cjE6OnN1Yl9tYXRjaDxfQmlfaXRlcj4sIF9BbGxvY2F0b3I+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6dHIxOjpzdWJfbWF0Y2g8X0JpX2l0ZXI+LCBfQWxsb2NhdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmFzZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiBAbmFtZSAxMC4/IFB1YmxpYyBUeXBlcworICAgICAgICovCisgICAgICAvL0B7CisgICAgICB0eXBlZGVmIHN1Yl9tYXRjaDxfQmlfaXRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OmNvbnN0X3JlZmVyZW5jZSAgICAgICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgY29uc3RfcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZV90eXBlOjpjb25zdF9pdGVyYXRvciAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKKyAgICAgIHR5cGVkZWYgY29uc3RfaXRlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3I7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OmRpZmZlcmVuY2VfdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnNpemVfdHlwZSAgICAgICAgICAgICAgICAgIHNpemVfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0FsbG9jYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlfaXRlcj46OnZhbHVlX3R5cGUgIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXJfdHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3R5cGU7CisgICAgICAvL0B9CisgIAorICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgMTAuMSBDb25zdHJ1Y3Rpb24sIENvcHlpbmcsIGFuZCBEZXN0cnVjdGlvbgorICAgICAgICovCisgICAgICAvL0B7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbnN0cnVjdHMgYSBkZWZhdWx0ICVtYXRjaF9yZXN1bHRzIGNvbnRhaW5lci4KKyAgICAgICAqIEBwb3N0IHNpemUoKSByZXR1cm5zIDAgYW5kIHN0cigpIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICovCisgICAgICBleHBsaWNpdAorICAgICAgbWF0Y2hfcmVzdWx0cyhjb25zdCBfQWxsb2NhdG9yJiBfX2EgPSBfQWxsb2NhdG9yKCkpCisgICAgICA6IF9CYXNlX3R5cGUoX19hKSwgX01fbWF0Y2hlZChmYWxzZSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBDb3B5IGNvbnN0cnVjdHMgYSAlbWF0Y2hfcmVzdWx0cy4KKyAgICAgICAqLworICAgICAgbWF0Y2hfcmVzdWx0cyhjb25zdCBtYXRjaF9yZXN1bHRzJiBfX3JocykKKyAgICAgIDogX0Jhc2VfdHlwZShfX3JocyksIF9NX21hdGNoZWQoX19yaHMuX01fbWF0Y2hlZCksCisJX01fcHJlZml4KF9fcmhzLl9NX3ByZWZpeCksIF9NX3N1ZmZpeChfX3Jocy5fTV9zdWZmaXgpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQXNzaWducyByaHMgdG8gKnRoaXMuCisgICAgICAgKi8KKyAgICAgIG1hdGNoX3Jlc3VsdHMmCisgICAgICBvcGVyYXRvcj0oY29uc3QgbWF0Y2hfcmVzdWx0cyYgX19yaHMpCisgICAgICB7CisJbWF0Y2hfcmVzdWx0cyBfX3RtcChfX3Jocyk7CisJdGhpcy0+c3dhcChfX3RtcCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEZXN0cm95cyBhICVtYXRjaF9yZXN1bHRzIG9iamVjdC4KKyAgICAgICAqLworICAgICAgfm1hdGNoX3Jlc3VsdHMoKQorICAgICAgeyB9CisgICAgICAKKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiBAbmFtZSAxMC4yIFNpemUKKyAgICAgICAqLworICAgICAgLy9AeworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBhbmQgc3VibWF0Y2hlcy4KKyAgICAgICAqCisgICAgICAgKiBUaGUgbnVtYmVyIG9mIG1hdGNoZXMgZm9yIGEgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgZWl0aGVyIDAKKyAgICAgICAqIGlmIHRoZXJlIHdhcyBubyBtYXRjaCBvciBtYXJrX2NvdW50KCkgKyAxIGlmIGEgbWF0Y2ggd2FzIHN1Y2Nlc3NmdWwuCisgICAgICAgKiBTb21lIG1hdGNoZXMgbWF5IGJlIGVtcHR5LgorICAgICAgICoKKyAgICAgICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZC4KKyAgICAgICAqLworICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21hdGNoZWQgPyBfQmFzZV90eXBlOjpzaXplKCkgKyAxIDogMDsgfQorICAgICAgCisgICAgICAvL3NpemVfdHlwZQorICAgICAgLy9tYXhfc2l6ZSgpIGNvbnN0OworICAgICAgdXNpbmcgX0Jhc2VfdHlwZTo6bWF4X3NpemU7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluZGljYXRlcyBpZiB0aGUgJW1hdGNoX3Jlc3VsdHMgY29udGFpbnMgbm8gcmVzdWx0cy4KKyAgICAgICAqIEByZXR2YWwgdHJ1ZSBUaGUgJW1hdGNoX3Jlc3VsdHMgb2JqZWN0IGlzIGVtcHR5LgorICAgICAgICogQHJldHZhbCBmYWxzZSBUaGUgJW1hdGNoX3Jlc3VsdHMgb2JqZWN0IGlzIG5vdCBlbXB0eS4KKyAgICAgICAqLworICAgICAgYm9vbAorICAgICAgZW1wdHkoKSBjb25zdAorICAgICAgeyByZXR1cm4gc2l6ZSgpID09IDA7IH0KKyAgICAgIAorICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqIEBuYW1lIDEwLjMgRWxlbWVudCBBY2Nlc3MKKyAgICAgICAqLworICAgICAgLy9AeworCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIGluZGljYXRlZCBzdWJtYXRjaC4KKyAgICAgICAqIEBwYXJhbSBzdWIgaW5kaWNhdGVzIHRoZSBzdWJtYXRjaC4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgaW5kaWNhdGVkIHN1Ym1hdGNoLCBvciB0aGUKKyAgICAgICAqIGxlbmd0aCBvZiB0aGUgZW50aXJlIG1hdGNoIGlmIEBwIHN1YiBpcyB6ZXJvICh0aGUgZGVmYXVsdCkuCisgICAgICAgKi8KKyAgICAgIGRpZmZlcmVuY2VfdHlwZQorICAgICAgbGVuZ3RoKHNpemVfdHlwZSBfX3N1YiA9IDApIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9tYXRjaGVkID8gdGhpcy0+c3RyKF9fc3ViKS5sZW5ndGgoKSA6IDA7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGluZGljYXRlZCBzdWJtYXRjaC4KKyAgICAgICAqIEBwYXJhbSBzdWIgaW5kaWNhdGVzIHRoZSBzdWJtYXRjaC4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRhcmdldAorICAgICAgICogc2VxdWVuY2UgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3VibWF0Y2gsIHVubGVzcyB0aGUgdmFsdWUgb2YgQHAgc3ViCisgICAgICAgKiBpcyB6ZXJvICh0aGUgZGVmYXVsdCksIGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvZmZzZXQKKyAgICAgICAqIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFyZ2V0IHNlcXVlbmNlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgICAgKiBtYXRjaC4KKyAgICAgICAqLworICAgICAgZGlmZmVyZW5jZV90eXBlCisgICAgICBwb3NpdGlvbihzaXplX3R5cGUgX19zdWIgPSAwKSBjb25zdAorICAgICAgeworCXJldHVybiBfTV9tYXRjaGVkID8gc3RkOjpkaXN0YW5jZSh0aGlzLT5wcmVmaXgoKS5maXJzdCwKKwkJCQkJICAoKnRoaXMpW19fc3ViXS5maXJzdCkgOiAwOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIHRoZSBtYXRjaCBvciBzdWJtYXRjaCBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdHlwZS4KKyAgICAgICAqIEBwYXJhbSBzdWIgaW5kaWNhdGVzIHRoZSBzdWJtYXRjaC4KKyAgICAgICAqCisgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHN1Ym1hdGNoIChvciBtYXRjaCwgaWYgQHAgc3ViIGlzIHplcm8pIGV4dHJhY3RlZAorICAgICAgICogZnJvbSB0aGUgdGFyZ2V0IHJhbmdlIGFuZCBjb252ZXJ0ZWQgdG8gdGhlIGFzc29jaWF0ZWQgc3RyaW5nIHR5cGUuCisgICAgICAgKi8KKyAgICAgIHN0cmluZ190eXBlCisgICAgICBzdHIoc2l6ZV90eXBlIF9fc3ViID0gMCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX21hdGNoZWQgPyAoKnRoaXMpW19fc3ViXS5zdHIoKSA6IHN0cmluZ190eXBlKCk7IH0KKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhICVzdWJfbWF0Y2ggcmVmZXJlbmNlIGZvciB0aGUgbWF0Y2ggb3Igc3VibWF0Y2guCisgICAgICAgKiBAcGFyYW0gc3ViIGluZGljYXRlcyB0aGUgc3VibWF0Y2guCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmRpY2F0ZWQgc3VibWF0Y2gsIG9yIHRoZSBlbnRpcmUKKyAgICAgICAqIG1hdGNoIGlmIEBwIHN1YiBpcyB6ZXJvLgorICAgICAgICoKKyAgICAgICAqIElmIEBwIHN1YiA+PSBzaXplKCkgdGhlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSAlc3ViX21hdGNoIHdpdGggYQorICAgICAgICogc3BlY2lhbCB2YWx1ZSBpbmRpY2F0aW5nIG5vIHN1Ym1hdGNoLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fc3ViKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2VfdHlwZTo6b3BlcmF0b3JbXShfX3N1Yik7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhICVzdWJfbWF0Y2ggcmVwcmVzZW50aW5nIHRoZSBtYXRjaCBwcmVmaXguCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVmZXJlbmNlIHRvIGEgJXN1Yl9tYXRjaCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICogcGFydCBvZiB0aGUgdGFyZ2V0IHJhbmdlIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSB0YXJnZXQgcmFuZ2UgYW5kIHRoZQorICAgICAgICogc3RhcnQgb2YgdGhlIG1hdGNoLgorICAgICAgICovCisgICAgICBjb25zdF9yZWZlcmVuY2UKKyAgICAgIHByZWZpeCgpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV9wcmVmaXg7IH0KKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhICVzdWJfbWF0Y2ggcmVwcmVzZW50aW5nIHRoZSBtYXRjaCBzdWZmaXguCisgICAgICAgKgorICAgICAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgcmVmZXJlbmNlIHRvIGEgJXN1Yl9tYXRjaCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICogcGFydCBvZiB0aGUgdGFyZ2V0IHJhbmdlIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUgbWF0Y2ggYW5kIHRoZSBlbmQgb2YKKyAgICAgICAqIHRoZSB0YXJnZXQgcmFuZ2UuCisgICAgICAgKi8KKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgc3VmZml4KCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3N1ZmZpeDsgfQorCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGFuIGl0ZXJhdG9yIHRvIHRoZSBzdGFydCBvZiB0aGUgJXN1Yl9tYXRjaCBjb2xsZWN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgYmVnaW4oKSBjb25zdAorICAgICAgeyByZXR1cm4gX0Jhc2VfdHlwZTo6YmVnaW4oKTsgfQorICAgICAgCisjaWZkZWYgX0dMSUJDWFhfSU5DTFVERV9BU19DWFgxMQorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhbiBpdGVyYXRvciB0byB0aGUgc3RhcnQgb2YgdGhlICVzdWJfbWF0Y2ggY29sbGVjdGlvbi4KKyAgICAgICAqLworICAgICAgY29uc3RfaXRlcmF0b3IKKyAgICAgIGNiZWdpbigpIGNvbnN0CisgICAgICB7IHJldHVybiBfQmFzZV90eXBlOjpiZWdpbigpOyB9CisjZW5kaWYKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhbiBpdGVyYXRvciB0byBvbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBjb2xsZWN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdF9pdGVyYXRvcgorICAgICAgZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OmVuZCgpOyB9CisgICAgICAKKyNpZmRlZiBfR0xJQkNYWF9JTkNMVURFX0FTX0NYWDExCisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBHZXRzIGFuIGl0ZXJhdG9yIHRvIG9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIGNvbGxlY3Rpb24uCisgICAgICAgKi8KKyAgICAgIGNvbnN0X2l0ZXJhdG9yCisgICAgICBjZW5kKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9CYXNlX3R5cGU6OmVuZCgpOyB9CisjZW5kaWYKKworICAgICAgLy9AfQorCisgICAgICAvKioKKyAgICAgICAqIEBuYW1lIDEwLjQgRm9ybWF0dGluZworICAgICAgICoKKyAgICAgICAqIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIGZvcm1hdHRlZCBzdWJzdGl0dXRpb24gb2YgdGhlIG1hdGNoZWQKKyAgICAgICAqIGNoYXJhY3RlciBzZXF1ZW5jZXMgaW50byB0aGVpciB0YXJnZXQuICBUaGUgZm9ybWF0IHNwZWNpZmllcnMKKyAgICAgICAqIGFuZCBlc2NhcGUgc2VxdWVuY2VzIGFjY2VwdGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucyBhcmUKKyAgICAgICAqIGRldGVybWluZWQgYnkgdGhlaXIgQHAgZmxhZ3MgcGFyYW1ldGVyIGFzIGRvY3VtZW50ZWQgYWJvdmUuCisgICAgICAgKi8KKyAgICAgICAvL0B7CisKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRfaXRlcj4KKyAgICAgICAgX091dF9pdGVyCisgICAgICAgIGZvcm1hdChfT3V0X2l0ZXIgX19vdXQsIGNvbnN0IHN0cmluZ190eXBlJiBfX2ZtdCwKKwkgICAgICAgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mbGFncworCSAgICAgICA9IHJlZ2V4X2NvbnN0YW50czo6Zm9ybWF0X2RlZmF1bHQpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICBzdHJpbmdfdHlwZQorICAgICAgZm9ybWF0KGNvbnN0IHN0cmluZ190eXBlJiBfX2ZtdCwKKwkgICAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkgICAgID0gcmVnZXhfY29uc3RhbnRzOjpmb3JtYXRfZGVmYXVsdCkgY29uc3Q7CisKKyAgICAgIC8vQH0gCisKKyAgICAgIC8qKgorICAgICAgICogQG5hbWUgMTAuNSBBbGxvY2F0b3IKKyAgICAgICAqLworICAgICAgLy9AeyAKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgR2V0cyBhIGNvcHkgb2YgdGhlIGFsbG9jYXRvci4KKyAgICAgICAqLworICAgICAgLy9hbGxvY2F0b3JfdHlwZQorICAgICAgLy9nZXRfYWxsb2NhdG9yKCkgY29uc3Q7CisgICAgICB1c2luZyBfQmFzZV90eXBlOjpnZXRfYWxsb2NhdG9yOworICAgICAgCisgICAgICAvL0B9IAorCisgICAgICAvKioKKyAgICAgICAqIEBuYW1lIDEwLjYgU3dhcAorICAgICAgICovCisgICAgICAgLy9AeyAKKworICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgU3dhcHMgdGhlIGNvbnRlbnRzIG9mIHR3byBtYXRjaF9yZXN1bHRzLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBzd2FwKG1hdGNoX3Jlc3VsdHMmIF9fdGhhdCkKKyAgICAgIHsKKwlfQmFzZV90eXBlOjpzd2FwKF9fdGhhdCk7CisJc3RkOjpzd2FwKF9NX21hdGNoZWQsIF9fdGhhdC5fTV9tYXRjaGVkKTsKKwlzdGQ6OnN3YXAoX01fcHJlZml4LCAgX190aGF0Ll9NX3ByZWZpeCk7CisJc3RkOjpzd2FwKF9NX3N1ZmZpeCwgIF9fdGhhdC5fTV9zdWZmaXgpOworICAgICAgfQorICAgICAgLy9AfSAKKyAgICAgIAorICAgIHByaXZhdGU6CisgICAgICBib29sICAgICAgIF9NX21hdGNoZWQ7CisgICAgICB2YWx1ZV90eXBlIF9NX3ByZWZpeDsKKyAgICAgIHZhbHVlX3R5cGUgX01fc3VmZml4OworICAgIH07CisgIAorICB0eXBlZGVmIG1hdGNoX3Jlc3VsdHM8Y29uc3QgY2hhcio+ICAgICAgICAgICAgIGNtYXRjaDsKKyAgdHlwZWRlZiBtYXRjaF9yZXN1bHRzPHN0cmluZzo6Y29uc3RfaXRlcmF0b3I+ICBzbWF0Y2g7CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdHlwZWRlZiBtYXRjaF9yZXN1bHRzPGNvbnN0IHdjaGFyX3QqPiAgICAgICAgICB3Y21hdGNoOworICB0eXBlZGVmIG1hdGNoX3Jlc3VsdHM8d3N0cmluZzo6Y29uc3RfaXRlcmF0b3I+IHdzbWF0Y2g7CisjZW5kaWYKKworICAvLyBtYXRjaF9yZXN1bHRzIGNvbXBhcmlzb25zCisgIC8qKgorICAgKiBAYnJpZWYgQ29tcGFyZXMgdHdvIG1hdGNoX3Jlc3VsdHMgZm9yIGVxdWFsaXR5LgorICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0d28gb2JqZWN0cyByZWZlciB0byB0aGUgc2FtZSBtYXRjaCwKKyAgICogZmFsc2Ugb3RoZXJ3aXNlLgorICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCBtYXRjaF9yZXN1bHRzPF9CaV9pdGVyLCBfQWxsb2NhdG9yPiYgX19tMSwKKwkgICAgICAgY29uc3QgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jYXRvcj4mIF9fbTIpOworCisgIC8qKgorICAgKiBAYnJpZWYgQ29tcGFyZXMgdHdvIG1hdGNoX3Jlc3VsdHMgZm9yIGluZXF1YWxpdHkuCisgICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHR3byBvYmplY3RzIGRvIG5vdCByZWZlciB0byB0aGUgc2FtZSBtYXRjaCwKKyAgICogZmFsc2Ugb3RoZXJ3aXNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIGNsYXNzIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIGJvb2wKKyAgICBvcGVyYXRvciE9KGNvbnN0IG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvY2F0b3I+JiBfX20xLAorCSAgICAgICBjb25zdCBtYXRjaF9yZXN1bHRzPF9CaV9pdGVyLCBfQWxsb2NhdG9yPiYgX19tMikKKyAgICB7IHJldHVybiAhKF9fbTEgPT0gX19tMik7IH0KKworICAvLyBbNy4xMC42XSBtYXRjaF9yZXN1bHRzIHN3YXAKKyAgLyoqCisgICAqIEBicmllZiBTd2FwcyB0d28gbWF0Y2ggcmVzdWx0cy4KKyAgICogQHBhcmFtIGxocyBBIG1hdGNoIHJlc3VsdC4KKyAgICogQHBhcmFtIHJocyBBIG1hdGNoIHJlc3VsdC4KKyAgICoKKyAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSB0d28gbWF0Y2hfcmVzdWx0cyBvYmplY3RzIGFyZSBzd2FwcGVkLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXIsIF9BbGxvY2F0b3I+JiBfX2xocywKKwkgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jYXRvcj4mIF9fcmhzKQorICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KKworICAvLyBbNy4xMS4yXSBGdW5jdGlvbiB0ZW1wbGF0ZSByZWdleF9tYXRjaAorICAvKioKKyAgICogQG5hbWUgTWF0Y2hpbmcsIFNlYXJjaGluZywgYW5kIFJlcGxhY2luZworICAgKi8KKyAgLy9AeworCisgIC8qKgorICAgKiBAYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhbGwgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSBbZmlyc3QsIGxhc3QpLgorICAgKgorICAgKiBAcGFyYW0gZmlyc3QgQmVnaW5uaW5nIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgdG8gbWF0Y2guCisgICAqIEBwYXJhbSBsYXN0ICBPbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgdG8gbWF0Y2guCisgICAqIEBwYXJhbSBtICAgICBUaGUgbWF0Y2ggcmVzdWx0cy4KKyAgICogQHBhcmFtIHJlICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqIEBwYXJhbSBmbGFncyBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICoKKyAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlfaXRlciwgdHlwZW5hbWUgX0FsbG9jYXRvciwKKwkgICB0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBib29sCisgICAgcmVnZXhfbWF0Y2goX0JpX2l0ZXIgX19maXJzdCwgX0JpX2l0ZXIgX19sYXN0LAorCQltYXRjaF9yZXN1bHRzPF9CaV9pdGVyLCBfQWxsb2NhdG9yPiYgX19tLAorCQljb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fcmUsCisJCXJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpOworCisgIC8qKgorICAgKiBAYnJpZWYgSW5kaWNhdGVzIGlmIHRoZXJlIGlzIGEgbWF0Y2ggYmV0d2VlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIEBwIGUKKyAgICogYW5kIGFsbCBvZiB0aGUgY2hhcmFjdGVyIHNlcXVlbmNlIFtmaXJzdCwgbGFzdCkuCisgICAqCisgICAqIEBwYXJhbSBmaXJzdCBCZWdpbm5pbmcgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSB0byBtYXRjaC4KKyAgICogQHBhcmFtIGxhc3QgIE9uZS1wYXN0LXRoZS1lbmQgb2YgdGhlIGNoYXJhY3RlciBzZXF1ZW5jZSB0byBtYXRjaC4KKyAgICogQHBhcmFtIHJlICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqIEBwYXJhbSBmbGFncyBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLCB0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBib29sCisgICAgcmVnZXhfbWF0Y2goX0JpX2l0ZXIgX19maXJzdCwgX0JpX2l0ZXIgX19sYXN0LAorCQljb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fcmUsCisJCXJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyAKKyAgICAgIG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXI+IF9fd2hhdDsKKyAgICAgIHJldHVybiByZWdleF9tYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9fd2hhdCwgX19yZSwgX19mbGFncyk7CisgICAgfQorCisgIC8qKgorICAgKiBAYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICoKKyAgICogQHBhcmFtIHMgIFRoZSBDLXN0eWxlIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gbWF0Y2guCisgICAqIEBwYXJhbSBtICBUaGUgbWF0Y2ggcmVzdWx0cy4KKyAgICogQHBhcmFtIHJlIFRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqIEBwYXJhbSBmICBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfbWF0Y2goY29uc3QgX0NoX3R5cGUqIF9fcywKKwkJbWF0Y2hfcmVzdWx0czxjb25zdCBfQ2hfdHlwZSosIF9BbGxvY2F0b3I+JiBfX20sCisJCWNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19yZSwKKwkJcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mCisJCT0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X21hdGNoKF9fcywgX19zICsgX1J4X3RyYWl0czo6bGVuZ3RoKF9fcyksIF9fbSwgX19yZSwgX19mKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgRGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBhIG1hdGNoIGJldHdlZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBAcCBlCisgICAqIGFuZCBhIHN0cmluZy4KKyAgICoKKyAgICogQHBhcmFtIHMgICAgIFRoZSBzdHJpbmcgdG8gbWF0Y2guCisgICAqIEBwYXJhbSBtICAgICBUaGUgbWF0Y2ggcmVzdWx0cy4KKyAgICogQHBhcmFtIHJlICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqIEBwYXJhbSBmbGFncyBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9DaF9hbGxvYywKKwkgICB0eXBlbmFtZSBfQWxsb2NhdG9yLCB0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X21hdGNoKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwgX0NoX3RyYWl0cywgX0NoX2FsbG9jPiYgX19zLAorCQltYXRjaF9yZXN1bHRzPHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwgCisJCV9DaF90cmFpdHMsIF9DaF9hbGxvYz46OmNvbnN0X2l0ZXJhdG9yLCBfQWxsb2NhdG9yPiYgX19tLAorCQljb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fcmUsCisJCXJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gcmVnZXhfbWF0Y2goX19zLmJlZ2luKCksIF9fcy5lbmQoKSwgX19tLCBfX3JlLCBfX2ZsYWdzKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5kaWNhdGVzIGlmIHRoZXJlIGlzIGEgbWF0Y2ggYmV0d2VlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIEBwIGUKKyAgICogYW5kIGEgQy1zdHlsZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorICAgKgorICAgKiBAcGFyYW0gcyAgVGhlIEMtc3R5bGUgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byBtYXRjaC4KKyAgICogQHBhcmFtIHJlIFRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisgICAqIEBwYXJhbSBmICBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90eXBlLCBjbGFzcyBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfbWF0Y2goY29uc3QgX0NoX3R5cGUqIF9fcywKKwkJY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQlyZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2YKKwkJPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gcmVnZXhfbWF0Y2goX19zLCBfX3MgKyBfUnhfdHJhaXRzOjpsZW5ndGgoX19zKSwgX19yZSwgX19mKTsgfQorCisgIC8qKgorICAgKiBAYnJpZWYgSW5kaWNhdGVzIGlmIHRoZXJlIGlzIGEgbWF0Y2ggYmV0d2VlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIEBwIGUKKyAgICogYW5kIGEgc3RyaW5nLgorICAgKgorICAgKiBAcGFyYW0gcyAgICAgW0lOXSBUaGUgc3RyaW5nIHRvIG1hdGNoLgorICAgKiBAcGFyYW0gcmUgICAgW0lOXSBUaGUgcmVndWxhciBleHByZXNzaW9uLgorICAgKiBAcGFyYW0gZmxhZ3MgW0lOXSBDb250cm9scyBob3cgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBtYXRjaGVkLgorICAgKgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggZXhpc3RzLgorICAgKiBAcmV0dmFsIGZhbHNlIE90aGVyd2lzZS4KKyAgICoKKyAgICogQHRocm93cyBhbiBleGNlcHRpb24gb2YgdHlwZSByZWdleF9lcnJvci4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaF90cmFpdHMsIHR5cGVuYW1lIF9TdHJfYWxsb2NhdG9yLAorCSAgIHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfbWF0Y2goY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlLCBfQ2hfdHJhaXRzLCBfU3RyX2FsbG9jYXRvcj4mIF9fcywKKwkJY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX3JlLAorCQlyZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCT0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X21hdGNoKF9fcy5iZWdpbigpLCBfX3MuZW5kKCksIF9fcmUsIF9fZmxhZ3MpOyB9CisKKyAgLy8gWzcuMTEuM10gRnVuY3Rpb24gdGVtcGxhdGUgcmVnZXhfc2VhcmNoCisgIC8qKgorICAgKiBTZWFyY2hlcyBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aGluIGEgcmFuZ2UuCisgICAqIEBwYXJhbSBmaXJzdCBbSU5dICBUaGUgc3RhcnQgb2YgdGhlIHN0cmluZyB0byBzZWFyY2guCisgICAqIEBwYXJhbSBsYXN0ICBbSU5dICBPbmUtcGFzdC10aGUtZW5kIG9mIHRoZSBzdHJpbmcgdG8gc2VhcmNoLgorICAgKiBAcGFyYW0gbSAgICAgW09VVF0gVGhlIG1hdGNoIHJlc3VsdHMuCisgICAqIEBwYXJhbSByZSAgICBbSU5dICBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuCisgICAqIEBwYXJhbSBmbGFncyBbSU5dICBTZWFyY2ggcG9saWN5IGZsYWdzLgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLgorICAgKiBAcmV0dmFsIGZhbHNlIE5vIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZywgdGhlIGNvbnRlbnQgb2YgJW0gaXMKKyAgICogICAgICAgICAgICAgICB1bmRlZmluZWQuCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqCisgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9BbGxvY2F0b3IsCisJICAgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9zZWFyY2goX0JpX2l0ZXIgX19maXJzdCwgX0JpX2l0ZXIgX19sYXN0LAorCQkgbWF0Y2hfcmVzdWx0czxfQmlfaXRlciwgX0FsbG9jYXRvcj4mIF9fbSwKKwkJIGNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19yZSwKKwkJIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KTsKKworICAvKioKKyAgICogU2VhcmNoZXMgZm9yIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIHJhbmdlLgorICAgKiBAcGFyYW0gZmlyc3QgW0lOXSAgVGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgdG8gc2VhcmNoLgorICAgKiBAcGFyYW0gbGFzdCAgW0lOXSAgT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgc3RyaW5nIHRvIHNlYXJjaC4KKyAgICogQHBhcmFtIHJlICAgIFtJTl0gIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICogQHBhcmFtIGZsYWdzIFtJTl0gIFNlYXJjaCBwb2xpY3kgZmxhZ3MuCisgICAqIEByZXR2YWwgdHJ1ZSAgQSBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcuCisgICAqIEByZXR2YWwgZmFsc2UgTm8gbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLgorICAgKiBAZG9jdG9kbworICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsIHR5cGVuYW1lIF9DaF90eXBlLCB0eXBlbmFtZSBfUnhfdHJhaXRzPgorICAgIGlubGluZSBib29sCisgICAgcmVnZXhfc2VhcmNoKF9CaV9pdGVyIF9fZmlyc3QsIF9CaV9pdGVyIF9fbGFzdCwKKwkJIGNvbnN0IGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiYgX19yZSwKKwkJIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsKKyAgICAgIG1hdGNoX3Jlc3VsdHM8X0JpX2l0ZXI+IF9fd2hhdDsKKyAgICAgIHJldHVybiByZWdleF9zZWFyY2goX19maXJzdCwgX19sYXN0LCBfX3doYXQsIF9fcmUsIF9fZmxhZ3MpOworICAgIH0KKworICAvKioKKyAgICogQGJyaWVmIFNlYXJjaGVzIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSBDLXN0cmluZy4KKyAgICogQHBhcmFtIHMgW0lOXSAgQSBDLXN0cmluZyB0byBzZWFyY2ggZm9yIHRoZSByZWdleC4KKyAgICogQHBhcmFtIG0gW09VVF0gVGhlIHNldCBvZiByZWdleCBtYXRjaGVzLgorICAgKiBAcGFyYW0gZSBbSU5dICBUaGUgcmVnZXggdG8gc2VhcmNoIGZvciBpbiBAcCBzLgorICAgKiBAcGFyYW0gZiBbSU5dICBUaGUgc2VhcmNoIGZsYWdzLgorICAgKiBAcmV0dmFsIHRydWUgIEEgbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLgorICAgKiBAcmV0dmFsIGZhbHNlIE5vIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZywgdGhlIGNvbnRlbnQgb2YgJW0gaXMKKyAgICogICAgICAgICAgICAgICB1bmRlZmluZWQuCisgICAqIEBkb2N0b2RvCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgY2xhc3MgX0FsbG9jYXRvciwgY2xhc3MgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X3NlYXJjaChjb25zdCBfQ2hfdHlwZSogX19zLAorCQkgbWF0Y2hfcmVzdWx0czxjb25zdCBfQ2hfdHlwZSosIF9BbGxvY2F0b3I+JiBfX20sCisJCSBjb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fZSwKKwkJIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZgorCQkgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeyByZXR1cm4gcmVnZXhfc2VhcmNoKF9fcywgX19zICsgX1J4X3RyYWl0czo6bGVuZ3RoKF9fcyksIF9fbSwgX19lLCBfX2YpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBTZWFyY2hlcyBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aGluIGEgQy1zdHJpbmcuCisgICAqIEBwYXJhbSBzIFtJTl0gIFRoZSBDLXN0cmluZyB0byBzZWFyY2guCisgICAqIEBwYXJhbSBlIFtJTl0gIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICogQHBhcmFtIGYgW0lOXSAgU2VhcmNoIHBvbGljeSBmbGFncy4KKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQHJldHZhbCBmYWxzZSBObyBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcuCisgICAqIEBkb2N0b2RvCisgICAqCisgICAqIEB0aHJvd3MgYW4gZXhjZXB0aW9uIG9mIHR5cGUgcmVnZXhfZXJyb3IuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hfdHlwZSwgdHlwZW5hbWUgX1J4X3RyYWl0cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIHJlZ2V4X3NlYXJjaChjb25zdCBfQ2hfdHlwZSogX19zLAorCQkgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2UsCisJCSByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2YKKwkJID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X3NlYXJjaChfX3MsIF9fcyArIF9SeF90cmFpdHM6Omxlbmd0aChfX3MpLCBfX2UsIF9fZik7IH0KKworICAvKioKKyAgICogQGJyaWVmIFNlYXJjaGVzIGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoaW4gYSBzdHJpbmcuCisgICAqIEBwYXJhbSBzICAgICBbSU5dICBUaGUgc3RyaW5nIHRvIHNlYXJjaC4KKyAgICogQHBhcmFtIGUgICAgIFtJTl0gIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICogQHBhcmFtIGZsYWdzIFtJTl0gIFNlYXJjaCBwb2xpY3kgZmxhZ3MuCisgICAqIEByZXR2YWwgdHJ1ZSAgQSBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcuCisgICAqIEByZXR2YWwgZmFsc2UgTm8gbWF0Y2ggd2FzIGZvdW5kIHdpdGhpbiB0aGUgc3RyaW5nLgorICAgKiBAZG9jdG9kbworICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX1N0cmluZ19hbGxvY2F0b3IsCisJICAgdHlwZW5hbWUgX0NoX3R5cGUsIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9zZWFyY2goY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlLCBfQ2hfdHJhaXRzLAorCQkgX1N0cmluZ19hbGxvY2F0b3I+JiBfX3MsCisJCSBjb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fZSwKKwkJIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fZmxhZ3MKKwkJID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X3NlYXJjaChfX3MuYmVnaW4oKSwgX19zLmVuZCgpLCBfX2UsIF9fZmxhZ3MpOyB9CisKKyAgLyoqCisgICAqIEBicmllZiBTZWFyY2hlcyBmb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aGluIGEgc3RyaW5nLgorICAgKiBAcGFyYW0gcyBbSU5dICBBIEMrKyBzdHJpbmcgdG8gc2VhcmNoIGZvciB0aGUgcmVnZXguCisgICAqIEBwYXJhbSBtIFtPVVRdIFRoZSBzZXQgb2YgcmVnZXggbWF0Y2hlcy4KKyAgICogQHBhcmFtIGUgW0lOXSAgVGhlIHJlZ2V4IHRvIHNlYXJjaCBmb3IgaW4gQHAgcy4KKyAgICogQHBhcmFtIGYgW0lOXSAgVGhlIHNlYXJjaCBmbGFncy4KKyAgICogQHJldHZhbCB0cnVlICBBIG1hdGNoIHdhcyBmb3VuZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgICogQHJldHZhbCBmYWxzZSBObyBtYXRjaCB3YXMgZm91bmQgd2l0aGluIHRoZSBzdHJpbmcsIHRoZSBjb250ZW50IG9mICVtIGlzCisgICAqICAgICAgICAgICAgICAgdW5kZWZpbmVkLgorICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoX3RyYWl0cywgdHlwZW5hbWUgX0NoX2FsbG9jLAorCSAgIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9DaF90eXBlLAorCSAgIHR5cGVuYW1lIF9SeF90cmFpdHM+CisgICAgaW5saW5lIGJvb2wKKyAgICByZWdleF9zZWFyY2goY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlLCBfQ2hfdHJhaXRzLCBfQ2hfYWxsb2M+JiBfX3MsCisJCSBtYXRjaF9yZXN1bHRzPHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hfdHlwZSwKKwkJIF9DaF90cmFpdHMsIF9DaF9hbGxvYz46OmNvbnN0X2l0ZXJhdG9yLCBfQWxsb2NhdG9yPiYgX19tLAorCQkgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2UsCisJCSByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2YKKwkJID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KQorICAgIHsgcmV0dXJuIHJlZ2V4X3NlYXJjaChfX3MuYmVnaW4oKSwgX19zLmVuZCgpLCBfX20sIF9fZSwgX19mKTsgfQorCisgIC8vIHRyMSBbNy4xMS40XSBzdGQgWzI4LjExLjRdIEZ1bmN0aW9uIHRlbXBsYXRlIHJlZ2V4X3JlcGxhY2UKKyAgLyoqCisgICAqIEBkb2N0b2RvCisgICAqIEBwYXJhbSBvdXQKKyAgICogQHBhcmFtIGZpcnN0CisgICAqIEBwYXJhbSBsYXN0CisgICAqIEBwYXJhbSBlCisgICAqIEBwYXJhbSBmbXQKKyAgICogQHBhcmFtIGZsYWdzCisgICAqCisgICAqIEByZXR1cm5zIG91dAorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKgorICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRfaXRlciwgdHlwZW5hbWUgX0JpX2l0ZXIsCisJICAgdHlwZW5hbWUgX1J4X3RyYWl0cywgdHlwZW5hbWUgX0NoX3R5cGU+CisgICAgaW5saW5lIF9PdXRfaXRlcgorICAgIHJlZ2V4X3JlcGxhY2UoX091dF9pdGVyIF9fb3V0LCBfQmlfaXRlciBfX2ZpcnN0LCBfQmlfaXRlciBfX2xhc3QsCisJCSAgY29uc3QgYmFzaWNfcmVnZXg8X0NoX3R5cGUsIF9SeF90cmFpdHM+JiBfX2UsCisJCSAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaF90eXBlPiYgX19mbXQsCisJCSAgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19mbGFncworCQkgID0gcmVnZXhfY29uc3RhbnRzOjptYXRjaF9kZWZhdWx0KTsKKworICAvKioKKyAgICogQGRvY3RvZG8KKyAgICogQHBhcmFtIHMKKyAgICogQHBhcmFtIGUKKyAgICogQHBhcmFtIGZtdAorICAgKiBAcGFyYW0gZmxhZ3MKKyAgICoKKyAgICogQHJldHVybnMgYSBjb3B5IG9mIHN0cmluZyBAcCBzIHdpdGggcmVwbGFjZW1lbnRzLgorICAgKgorICAgKiBAdGhyb3dzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIHJlZ2V4X2Vycm9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1J4X3RyYWl0cywgdHlwZW5hbWUgX0NoX3R5cGU+CisgICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hfdHlwZT4KKyAgICByZWdleF9yZXBsYWNlKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hfdHlwZT4mIF9fcywKKwkJICBjb25zdCBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4mIF9fZSwKKwkJICBjb25zdCBiYXNpY19zdHJpbmc8X0NoX3R5cGU+JiBfX2ZtdCwKKwkJICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX2ZsYWdzCisJCSAgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpCisgICAgeworICAgICAgc3RkOjpzdHJpbmcgX19yZXN1bHQ7CisgICAgICByZWdleF9yZXBsYWNlKHN0ZDo6YmFja19pbnNlcnRlcihfX3Jlc3VsdCksCisJCSAgICBfX3MuYmVnaW4oKSwgX19zLmVuZCgpLCBfX2UsIF9fZm10LCBfX2ZsYWdzKTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgLy9AfQorCisgIC8vIHRyMSBbNy4xMi4xXSBzdGQgWzI4LjEyXSBDbGFzcyB0ZW1wbGF0ZSByZWdleF9pdGVyYXRvcgorICAvKioKKyAgICogQW4gaXRlcmF0b3IgYWRhcHRvciB0aGF0IHdpbGwgcHJvdmlkZSByZXBlYXRlZCBjYWxscyBvZiByZWdleF9zZWFyY2ggb3ZlciAKKyAgICogYSByYW5nZSB1bnRpbCBubyBtb3JlIG1hdGNoZXMgcmVtYWluLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpX2l0ZXIsCisJICAgdHlwZW5hbWUgX0NoX3R5cGUgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpX2l0ZXI+Ojp2YWx1ZV90eXBlLAorCSAgIHR5cGVuYW1lIF9SeF90cmFpdHMgPSByZWdleF90cmFpdHM8X0NoX3R5cGU+ID4KKyAgICBjbGFzcyByZWdleF9pdGVyYXRvcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIGJhc2ljX3JlZ2V4PF9DaF90eXBlLCBfUnhfdHJhaXRzPiAgcmVnZXhfdHlwZTsKKyAgICAgIHR5cGVkZWYgbWF0Y2hfcmVzdWx0czxfQmlfaXRlcj4gICAgICAgICAgICB2YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZyAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKKworICAgIHB1YmxpYzoKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFByb3ZpZGVzIGEgc2luZ3VsYXIgaXRlcmF0b3IsIHVzZWZ1bCBmb3IgaW5kaWNhdGluZworICAgICAgICogb25lLXBhc3QtdGhlLWVuZCBvZiBhIHJhbmdlLgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICByZWdleF9pdGVyYXRvcigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSAlcmVnZXhfaXRlcmF0b3IuLi4KKyAgICAgICAqIEBwYXJhbSBhICBbSU5dIFRoZSBzdGFydCBvZiBhIHRleHQgcmFuZ2UgdG8gc2VhcmNoLgorICAgICAgICogQHBhcmFtIGIgIFtJTl0gT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgdGV4dCByYW5nZSB0byBzZWFyY2guCisgICAgICAgKiBAcGFyYW0gcmUgW0lOXSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoLgorICAgICAgICogQHBhcmFtIG0gIFtJTl0gUG9saWN5IGZsYWdzIGZvciBtYXRjaCBydWxlcy4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3IoX0JpX2l0ZXIgX19hLCBfQmlfaXRlciBfX2IsIGNvbnN0IHJlZ2V4X3R5cGUmIF9fcmUsCisJCSAgICAgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19tCisJCSAgICAgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpOworCisgICAgICAvKioKKyAgICAgICAqIENvcHkgY29uc3RydWN0cyBhICVyZWdleF9pdGVyYXRvci4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3IoY29uc3QgcmVnZXhfaXRlcmF0b3ImIF9fcmhzKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqIEBkb2N0b2RvCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHJlZ2V4X2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IHJlZ2V4X2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IHJlZ2V4X2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICBjb25zdCB2YWx1ZV90eXBlJgorICAgICAgb3BlcmF0b3IqKCk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICBjb25zdCB2YWx1ZV90eXBlKgorICAgICAgb3BlcmF0b3ItPigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICogQGRvY3RvZG8KKyAgICAgICAqLworICAgICAgcmVnZXhfaXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICByZWdleF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpOworICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIHRoZXNlIG1lbWJlcnMgYXJlIHNob3duIGZvciBleHBvc2l0aW9uIG9ubHk6CisgICAgICBfQmlfaXRlciAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjsKKyAgICAgIF9CaV9pdGVyICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsKKyAgICAgIGNvbnN0IHJlZ2V4X3R5cGUqICAgICAgICAgICAgICAgIHByZWdleDsKKyAgICAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIGZsYWdzOworICAgICAgbWF0Y2hfcmVzdWx0czxfQmlfaXRlcj4gICAgICAgICAgbWF0Y2g7CisgICAgfTsKKyAgCisgIHR5cGVkZWYgcmVnZXhfaXRlcmF0b3I8Y29uc3QgY2hhcio+ICAgICAgICAgICAgIGNyZWdleF9pdGVyYXRvcjsKKyAgdHlwZWRlZiByZWdleF9pdGVyYXRvcjxzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yPiAgc3JlZ2V4X2l0ZXJhdG9yOworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHR5cGVkZWYgcmVnZXhfaXRlcmF0b3I8Y29uc3Qgd2NoYXJfdCo+ICAgICAgICAgIHdjcmVnZXhfaXRlcmF0b3I7CisgIHR5cGVkZWYgcmVnZXhfaXRlcmF0b3I8d3N0cmluZzo6Y29uc3RfaXRlcmF0b3I+IHdzcmVnZXhfaXRlcmF0b3I7CisjZW5kaWYKKworICAvLyBbNy4xMi4yXSBDbGFzcyB0ZW1wbGF0ZSByZWdleF90b2tlbl9pdGVyYXRvcgorICAvKioKKyAgICogSXRlcmF0ZXMgb3ZlciBzdWJtYXRjaGVzIGluIGEgcmFuZ2UgKG9yIEBhIHNwbGl0cyBhIHRleHQgc3RyaW5nKS4KKyAgICoKKyAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpdGVyYXRvciBpcyB0byBlbnVtZXJhdGUgYWxsLCBvciBhbGwgc3BlY2lmaWVkLAorICAgKiBtYXRjaGVzIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGhpbiBhIHRleHQgcmFuZ2UuICBUaGUgZGVyZWZlcmVuY2VkCisgICAqIHZhbHVlIG9mIGFuIGl0ZXJhdG9yIG9mIHRoaXMgY2xhc3MgaXMgYSBzdGQ6OnRyMTo6c3ViX21hdGNoIG9iamVjdC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaV9pdGVyLAorCSAgIHR5cGVuYW1lIF9DaF90eXBlID0gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaV9pdGVyPjo6dmFsdWVfdHlwZSwKKwkgICB0eXBlbmFtZSBfUnhfdHJhaXRzID0gcmVnZXhfdHJhaXRzPF9DaF90eXBlPiA+CisgICAgY2xhc3MgcmVnZXhfdG9rZW5faXRlcmF0b3IKKyAgICB7CisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiBiYXNpY19yZWdleDxfQ2hfdHlwZSwgX1J4X3RyYWl0cz4gcmVnZXhfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3ViX21hdGNoPF9CaV9pdGVyPiAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6cHRyZGlmZl90ICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqICAgICAgICAgICAgICAgICBwb2ludGVyOworICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAvKioKKyAgICAgICAqIEBicmllZiBEZWZhdWx0IGNvbnN0cnVjdHMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqIAorICAgICAgICogQSBkZWZhdWx0LWNvbnN0cnVjdGVkICVyZWdleF90b2tlbl9pdGVyYXRvciBpcyBhIHNpbmd1bGFyIGl0ZXJhdG9yCisgICAgICAgKiB0aGF0IHdpbGwgY29tcGFyZSBlcXVhbCB0byB0aGUgb25lLXBhc3QtdGhlLWVuZCB2YWx1ZSBmb3IgYW55CisgICAgICAgKiBpdGVyYXRvciBvZiB0aGUgc2FtZSB0eXBlLgorICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvcigpOworICAgICAgCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuLi4KKyAgICAgICAqIEBwYXJhbSBhICAgICAgICAgIFtJTl0gVGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBiICAgICAgICAgIFtJTl0gT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgdGV4dCB0byBzZWFyY2guCisgICAgICAgKiBAcGFyYW0gcmUgICAgICAgICBbSU5dIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICAgICAqIEBwYXJhbSBzdWJtYXRjaCAgIFtJTl0gV2hpY2ggc3VibWF0Y2ggdG8gcmV0dXJuLiAgVGhlcmUgYXJlIHNvbWUKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCB2YWx1ZXMgZm9yIHRoaXMgcGFyYW1ldGVyOgorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAtIC0xIGVhY2ggZW51bWVyYXRlZCBzdWJleHByZXNzaW9uIGRvZXMgTk9UCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAoYWthIGZpZWxkCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nKQorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAtIDAgdGhlIGVudGlyZSBzdHJpbmcgbWF0Y2hpbmcgdGhlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZXhwcmVzc2lvbiBpcyByZXR1cm5lZCBmb3IgZWFjaCBtYXRjaAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgdGV4dC4KKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgLSA+MCBlbnVtZXJhdGVzIG9ubHkgdGhlIGluZGljYXRlZAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmV4cHJlc3Npb24gZnJvbSBhIG1hdGNoIHdpdGhpbiB0aGUgdGV4dC4KKyAgICAgICAqIEBwYXJhbSBtICAgICAgICAgIFtJTl0gUG9saWN5IGZsYWdzIGZvciBtYXRjaCBydWxlcy4KKyAgICAgICAqCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqIEBkb2N0b2RvCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yKF9CaV9pdGVyIF9fYSwgX0JpX2l0ZXIgX19iLCBjb25zdCByZWdleF90eXBlJiBfX3JlLAorCQkJICAgaW50IF9fc3VibWF0Y2ggPSAwLAorCQkJICAgcmVnZXhfY29uc3RhbnRzOjptYXRjaF9mbGFnX3R5cGUgX19tCisJCQkgICA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCk7CisKKyAgICAgIC8qKgorICAgICAgICogQ29uc3RydWN0cyBhICVyZWdleF90b2tlbl9pdGVyYXRvci4uLgorICAgICAgICogQHBhcmFtIGEgICAgICAgICAgW0lOXSBUaGUgc3RhcnQgb2YgdGhlIHRleHQgdG8gc2VhcmNoLgorICAgICAgICogQHBhcmFtIGIgICAgICAgICAgW0lOXSBPbmUtcGFzdC10aGUtZW5kIG9mIHRoZSB0ZXh0IHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSByZSAgICAgICAgIFtJTl0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLgorICAgICAgICogQHBhcmFtIHN1Ym1hdGNoZXMgW0lOXSBBIGxpc3Qgb2Ygc3ViZXhwcmVzc2lvbnMgdG8gcmV0dXJuIGZvciBlYWNoCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCB3aXRoaW4gdGhlIHRleHQuCisgICAgICAgKiBAcGFyYW0gbSAgICAgICAgICBbSU5dIFBvbGljeSBmbGFncyBmb3IgbWF0Y2ggcnVsZXMuCisgICAgICAgKgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICByZWdleF90b2tlbl9pdGVyYXRvcihfQmlfaXRlciBfX2EsIF9CaV9pdGVyIF9fYiwKKwkJCSAgIGNvbnN0IHJlZ2V4X3R5cGUmIF9fcmUsCisJCQkgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBfX3N1Ym1hdGNoZXMsCisJCQkgICByZWdleF9jb25zdGFudHM6Om1hdGNoX2ZsYWdfdHlwZSBfX20KKwkJCSAgICAgPSByZWdleF9jb25zdGFudHM6Om1hdGNoX2RlZmF1bHQpOworCisgICAgICAvKioKKyAgICAgICAqIENvbnN0cnVjdHMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuLi4KKyAgICAgICAqIEBwYXJhbSBhICAgICAgICAgIFtJTl0gVGhlIHN0YXJ0IG9mIHRoZSB0ZXh0IHRvIHNlYXJjaC4KKyAgICAgICAqIEBwYXJhbSBiICAgICAgICAgIFtJTl0gT25lLXBhc3QtdGhlLWVuZCBvZiB0aGUgdGV4dCB0byBzZWFyY2guCisgICAgICAgKiBAcGFyYW0gcmUgICAgICAgICBbSU5dIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc2VhcmNoIGZvci4KKyAgICAgICAqIEBwYXJhbSBzdWJtYXRjaGVzIFtJTl0gQSBsaXN0IG9mIHN1YmV4cHJlc3Npb25zIHRvIHJldHVybiBmb3IgZWFjaAorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggd2l0aGluIHRoZSB0ZXh0LgorICAgICAgICogQHBhcmFtIG0gICAgICAgICAgW0lOXSBQb2xpY3kgZmxhZ3MgZm9yIG1hdGNoIHJ1bGVzLgorICAgICAgIAorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKiBAZG9jdG9kbworICAgICAgICovCisgICAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfTm0+CisgICAgICAgIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yKF9CaV9pdGVyIF9fYSwgX0JpX2l0ZXIgX19iLAorCQkJICAgICBjb25zdCByZWdleF90eXBlJiBfX3JlLAorCQkJICAgICBjb25zdCBpbnQgKCZfX3N1Ym1hdGNoZXMpW19ObV0sCisJCQkgICAgIHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZmxhZ190eXBlIF9fbQorCQkJICAgICA9IHJlZ2V4X2NvbnN0YW50czo6bWF0Y2hfZGVmYXVsdCk7CisKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvcHkgY29uc3RydWN0cyBhICVyZWdleF90b2tlbl9pdGVyYXRvci4KKyAgICAgICAqIEBwYXJhbSByaHMgW0lOXSBBICVyZWdleF90b2tlbl9pdGVyYXRvciB0byBjb3B5LgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yKGNvbnN0IHJlZ2V4X3Rva2VuX2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEFzc2lnbnMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IgdG8gYW5vdGhlci4KKyAgICAgICAqIEBwYXJhbSByaHMgW0lOXSBBICVyZWdleF90b2tlbl9pdGVyYXRvciB0byBjb3B5LgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHJlZ2V4X3Rva2VuX2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIENvbXBhcmVzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yIHRvIGFub3RoZXIgZm9yIGVxdWFsaXR5LgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yPT0oY29uc3QgcmVnZXhfdG9rZW5faXRlcmF0b3ImIF9fcmhzKTsKKyAgICAgIAorICAgICAgLyoqCisgICAgICAgKiBAYnJpZWYgQ29tcGFyZXMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IgdG8gYW5vdGhlciBmb3IgaW5lcXVhbGl0eS4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICBib29sCisgICAgICBvcGVyYXRvciE9KGNvbnN0IHJlZ2V4X3Rva2VuX2l0ZXJhdG9yJiBfX3Jocyk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIERlcmVmZXJlbmNlcyBhICVyZWdleF90b2tlbl9pdGVyYXRvci4KKyAgICAgICAqIEB0b2RvIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICAgICAgICovCisgICAgICBjb25zdCB2YWx1ZV90eXBlJgorICAgICAgb3BlcmF0b3IqKCk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFNlbGVjdHMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IgbWVtYmVyLgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIGNvbnN0IHZhbHVlX3R5cGUqCisgICAgICBvcGVyYXRvci0+KCk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIEluY3JlbWVudHMgYSAlcmVnZXhfdG9rZW5faXRlcmF0b3IuCisgICAgICAgKiBAdG9kbyBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAqLworICAgICAgcmVnZXhfdG9rZW5faXRlcmF0b3ImCisgICAgICBvcGVyYXRvcisrKCk7CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogQGJyaWVmIFBvc3RpbmNyZW1lbnRzIGEgJXJlZ2V4X3Rva2VuX2l0ZXJhdG9yLgorICAgICAgICogQHRvZG8gSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgICAgICAgKi8KKyAgICAgIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yCisgICAgICBvcGVyYXRvcisrKGludCk7CisgICAgICAKKyAgICBwcml2YXRlOiAvLyBkYXRhIG1lbWJlcnMgZm9yIGV4cG9zaXRpb24gb25seToKKyAgICAgIHR5cGVkZWYgcmVnZXhfaXRlcmF0b3I8X0JpX2l0ZXIsIF9DaF90eXBlLCBfUnhfdHJhaXRzPiBwb3NpdGlvbl9pdGVyYXRvcjsKKworICAgICAgcG9zaXRpb25faXRlcmF0b3IgX19wb3NpdGlvbjsKKyAgICAgIGNvbnN0IHZhbHVlX3R5cGUqIF9fcmVzdWx0OworICAgICAgdmFsdWVfdHlwZSAgICAgICAgX19zdWZmaXg7CisgICAgICBzdGQ6OnNpemVfdCAgICAgICBfX247CisgICAgICBzdGQ6OnZlY3RvcjxpbnQ+ICBfX3N1YnM7CisgICAgfTsKKworICAvKiogQGJyaWVmIFRva2VuIGl0ZXJhdG9yIGZvciBDLXN0eWxlIE5VTEwtdGVybWluYXRlZCBzdHJpbmdzLiAqLworICB0eXBlZGVmIHJlZ2V4X3Rva2VuX2l0ZXJhdG9yPGNvbnN0IGNoYXIqPiAgICAgICAgICAgICBjcmVnZXhfdG9rZW5faXRlcmF0b3I7CisgIC8qKiBAYnJpZWYgVG9rZW4gaXRlcmF0b3IgZm9yIHN0YW5kYXJkIHN0cmluZ3MuICovCisgIHR5cGVkZWYgcmVnZXhfdG9rZW5faXRlcmF0b3I8c3RyaW5nOjpjb25zdF9pdGVyYXRvcj4gIHNyZWdleF90b2tlbl9pdGVyYXRvcjsKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAvKiogQGJyaWVmIFRva2VuIGl0ZXJhdG9yIGZvciBDLXN0eWxlIE5VTEwtdGVybWluYXRlZCB3aWRlIHN0cmluZ3MuICovCisgIHR5cGVkZWYgcmVnZXhfdG9rZW5faXRlcmF0b3I8Y29uc3Qgd2NoYXJfdCo+ICAgICAgICAgIHdjcmVnZXhfdG9rZW5faXRlcmF0b3I7CisgIC8qKiBAYnJpZWYgVG9rZW4gaXRlcmF0b3IgZm9yIHN0YW5kYXJkIHdpZGUtY2hhcmFjdGVyIHN0cmluZ3MuICovCisgIHR5cGVkZWYgcmVnZXhfdG9rZW5faXRlcmF0b3I8d3N0cmluZzo6Y29uc3RfaXRlcmF0b3I+IHdzcmVnZXhfdG9rZW5faXRlcmF0b3I7CisjZW5kaWYKKyAgCisgIC8vQH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9Cit9CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfUkVHRVgKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3JpZW1hbm5femV0YS50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9yaWVtYW5uX3pldGEudGNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMjMyMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9yaWVtYW5uX3pldGEudGNjCkBAIC0wLDAgKzEsNDMzIEBACisvLyBTcGVjaWFsIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9yaWVtYW5uX3pldGEudGNjCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dHIxL2NtYXRofQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgyIFRSMTogNS4yICBTcGVjaWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBFZHdhcmQgU21pdGgtUm93bGFuZCBiYXNlZCBvbjoKKy8vICAgKDEpIEhhbmRib29rIG9mIE1hdGhlbWF0aWNhbCBGdW5jdGlvbnMsCisvLyAgICAgICBFZC4gYnkgTWlsdG9uIEFicmFtb3dpdHogYW5kIElyZW5lIEEuIFN0ZWd1biwKKy8vICAgICAgIERvdmVyIFB1YmxpY2F0aW9ucywgTmV3LVlvcmssIFNlY3Rpb24gNSwgcHAuIDgwNy04MDguCisvLyAgICgyKSBUaGUgR251IFNjaWVudGlmaWMgTGlicmFyeSwgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dzbAorLy8gICAoMykgR2FtbWEsIEV4cGxvcmluZyBFdWxlcidzIENvbnN0YW50LCBKdWxpYW4gSGF2aWwsCisvLyAgICAgICBQcmluY2V0b24sIDIwMDMuCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1JJRU1BTk5fWkVUQV9UQ0MKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1JJRU1BTk5fWkVUQV9UQ0MgMQorCisjaW5jbHVkZSAic3BlY2lhbF9mdW5jdGlvbl91dGlsLmgiCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICAvLyBbNS4yXSBTcGVjaWFsIGZ1bmN0aW9ucworCisgIC8vIEltcGxlbWVudGF0aW9uLXNwYWNlIGRldGFpbHMuCisgIG5hbWVzcGFjZSBfX2RldGFpbAorICB7CisgIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgQ29tcHV0ZSB0aGUgUmllbWFubiB6ZXRhIGZ1bmN0aW9uIEBmJCBcemV0YShzKSBAZiQKKyAgICAgKiAgICAgICAgICAgYnkgc3VtbWF0aW9uIGZvciBzID4gMS4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBieToKKyAgICAgKiAgICBcZlsKKyAgICAgKiAgICAgIFx6ZXRhKHMpID0gXHN1bV97az0xfV57XGluZnR5fSBcZnJhY3sxfXtrXntzfX0gZm9yIHMgPiAxCisgICAgICogICAgXGZdCisgICAgICogICBGb3IgcyA8IDEgdXNlIHRoZSByZWZsZWN0aW9uIGZvcm11bGE6CisgICAgICogICAgXGZbCisgICAgICogICAgICBcemV0YShzKSA9IDJecyBccGlee3MtMX0gXEdhbW1hKDEtcykgXHpldGEoMS1zKQorICAgICAqICAgIFxmXQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBfVHAKKyAgICBfX3JpZW1hbm5femV0YV9zdW0oX1RwIF9fcykKKyAgICB7CisgICAgICAvLyAgQSB1c2VyIHNob3VsZG4ndCBnZXQgdG8gdGhpcy4KKyAgICAgIGlmIChfX3MgPCBfVHAoMSkpCisgICAgICAgIHN0ZDo6X190aHJvd19kb21haW5fZXJyb3IoX19OKCJCYWQgYXJndW1lbnQgaW4gemV0YSBzdW0uIikpOworCisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X2l0ZXIgPSAxMDAwMDsKKyAgICAgIF9UcCBfX3pldGEgPSBfVHAoMCk7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2sgPSAxOyBfX2sgPCBtYXhfaXRlcjsgKytfX2spCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX190ZXJtID0gc3RkOjpwb3coc3RhdGljX2Nhc3Q8X1RwPihfX2spLCAtX19zKTsKKyAgICAgICAgICBpZiAoX190ZXJtIDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIF9femV0YSArPSBfX3Rlcm07CisgICAgICAgIH0KKworICAgICAgcmV0dXJuIF9femV0YTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBFdmFsdWF0ZSB0aGUgUmllbWFubiB6ZXRhIGZ1bmN0aW9uIEBmJCBcemV0YShzKSBAZiQKKyAgICAgKiAgICAgICAgICAgYnkgYW4gYWx0ZXJuYXRlIHNlcmllcyBmb3IgcyA+IDAuCisgICAgICogCisgICAgICogICBUaGUgUmllbWFubiB6ZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnk6CisgICAgICogICAgXGZbCisgICAgICogICAgICBcemV0YShzKSA9IFxzdW1fe2s9MX1ee1xpbmZ0eX0gXGZyYWN7MX17a157c319IGZvciBzID4gMQorICAgICAqICAgIFxmXQorICAgICAqICAgRm9yIHMgPCAxIHVzZSB0aGUgcmVmbGVjdGlvbiBmb3JtdWxhOgorICAgICAqICAgIFxmWworICAgICAqICAgICAgXHpldGEocykgPSAyXnMgXHBpXntzLTF9IFxHYW1tYSgxLXMpIFx6ZXRhKDEtcykKKyAgICAgKiAgICBcZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19yaWVtYW5uX3pldGFfYWx0KF9UcCBfX3MpCisgICAgeworICAgICAgX1RwIF9fc2duID0gX1RwKDEpOworICAgICAgX1RwIF9femV0YSA9IF9UcCgwKTsKKyAgICAgIGZvciAodW5zaWduZWQgaW50IF9faSA9IDE7IF9faSA8IDEwMDAwMDAwOyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIF9UcCBfX3Rlcm0gPSBfX3NnbiAvIHN0ZDo6cG93KF9faSwgX19zKTsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX196ZXRhICs9IF9fdGVybTsKKyAgICAgICAgICBfX3NnbiAqPSBfVHAoLTEpOworICAgICAgICB9CisgICAgICBfX3pldGEgLz0gX1RwKDEpIC0gc3RkOjpwb3coX1RwKDIpLCBfVHAoMSkgLSBfX3MpOworCisgICAgICByZXR1cm4gX196ZXRhOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIEV2YWx1YXRlIHRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gYnkgc2VyaWVzIGZvciBhbGwgcyAhPSAxLgorICAgICAqICAgICAgICAgICBDb252ZXJnZW5jZSBpcyBncmVhdCB1bnRpbCBsYXJnaXNoIG5lZ2F0aXZlIG51bWJlcnMuCisgICAgICogICAgICAgICAgIFRoZW4gdGhlIGNvbnZlcmdlbmNlIG9mIHRoZSA+IDAgc3VtIGdldHMgYmV0dGVyLgorICAgICAqCisgICAgICogICBUaGUgc2VyaWVzIGlzOgorICAgICAqICAgIFxmWworICAgICAqICAgICAgXHpldGEocykgPSBcZnJhY3sxfXsxLTJeezEtc319CisgICAgICogICAgICAgICAgICAgICAgIFxzdW1fe249MH1ee1xpbmZ0eX0gXGZyYWN7MX17Ml57bisxfX0KKyAgICAgKiAgICAgICAgICAgICAgICAgXHN1bV97az0wfV57bn0gKC0xKV5rIFxmcmFje24hfXsobi1rKSFrIX0gKGsrMSleey1zfQorICAgICAqICAgIFxmXQorICAgICAqICAgSGF2aWwgMjAwMywgcC4gMjA2LgorICAgICAqCisgICAgICogICBUaGUgUmllbWFubiB6ZXRhIGZ1bmN0aW9uIGlzIGRlZmluZWQgYnk6CisgICAgICogICAgXGZbCisgICAgICogICAgICBcemV0YShzKSA9IFxzdW1fe2s9MX1ee1xpbmZ0eX0gXGZyYWN7MX17a157c319IGZvciBzID4gMQorICAgICAqICAgIFxmXQorICAgICAqICAgRm9yIHMgPCAxIHVzZSB0aGUgcmVmbGVjdGlvbiBmb3JtdWxhOgorICAgICAqICAgIFxmWworICAgICAqICAgICAgXHpldGEocykgPSAyXnMgXHBpXntzLTF9IFxHYW1tYSgxLXMpIFx6ZXRhKDEtcykKKyAgICAgKiAgICBcZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19yaWVtYW5uX3pldGFfZ2xvYihfVHAgX19zKQorICAgIHsKKyAgICAgIF9UcCBfX3pldGEgPSBfVHAoMCk7CisKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgLy8gIE1heCBlIGV4cG9uZW50IGJlZm9yZSBvdmVyZmxvdy4KKyAgICAgIGNvbnN0IF9UcCBfX21heF9iaW5jb2VmZiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWF4X2V4cG9uZW50MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6bG9nKF9UcCgxMCkpIC0gX1RwKDEpOworCisgICAgICAvLyAgVGhpcyBzZXJpZXMgd29ya3MgdW50aWwgdGhlIGJpbm9taWFsIGNvZWZmaWNpZW50IGJsb3dzIHVwCisgICAgICAvLyAgc28gdXNlIHJlZmxlY3Rpb24uCisgICAgICBpZiAoX19zIDwgX1RwKDApKQorICAgICAgICB7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICAgIGlmIChzdGQ6OnRyMTo6Zm1vZChfX3MsX1RwKDIpKSA9PSBfVHAoMCkpCisgICAgICAgICAgICByZXR1cm4gX1RwKDApOworICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBfVHAgX196ZXRhID0gX19yaWVtYW5uX3pldGFfZ2xvYihfVHAoMSkgLSBfX3MpOworICAgICAgICAgICAgICBfX3pldGEgKj0gc3RkOjpwb3coX1RwKDIpCisgICAgICAgICAgICAgICAgICAgICAqIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpLCBfX3MpCisgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6c2luKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV8yKCkgKiBfX3MpCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICAgICAgICAgICAgICAgKiBzdGQ6OmV4cChzdGQ6OnRyMTo6bGdhbW1hKF9UcCgxKSAtIF9fcykpCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgKiBzdGQ6OmV4cChfX2xvZ19nYW1tYShfVHAoMSkgLSBfX3MpKQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpOworICAgICAgICAgICAgICByZXR1cm4gX196ZXRhOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIF9UcCBfX251bSA9IF9UcCgwLjVMKTsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBfX21heGl0ID0gMTAwMDA7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAwOyBfX2kgPCBfX21heGl0OyArK19faSkKKyAgICAgICAgeworICAgICAgICAgIGJvb2wgX19wdW50ID0gZmFsc2U7CisgICAgICAgICAgX1RwIF9fc2duID0gX1RwKDEpOworICAgICAgICAgIF9UcCBfX3Rlcm0gPSBfVHAoMCk7CisgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19qID0gMDsgX19qIDw9IF9faTsgKytfX2opCisgICAgICAgICAgICB7CisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICAgICAgICBfVHAgX19iaW5jb2VmZiA9ICBzdGQ6OnRyMTo6bGdhbW1hKF9UcCgxICsgX19pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RkOjp0cjE6OmxnYW1tYShfVHAoMSArIF9faikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKDEgKyBfX2kgLSBfX2opKTsKKyNlbHNlCisgICAgICAgICAgICAgIF9UcCBfX2JpbmNvZWZmID0gIF9fbG9nX2dhbW1hKF9UcCgxICsgX19pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19sb2dfZ2FtbWEoX1RwKDEgKyBfX2opKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBfX2xvZ19nYW1tYShfVHAoMSArIF9faSAtIF9faikpOworI2VuZGlmCisgICAgICAgICAgICAgIGlmIChfX2JpbmNvZWZmID4gX19tYXhfYmluY29lZmYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLy8gIFRoaXMgb25seSBnZXRzIGhpdCBmb3IgeCA8PCAwLgorICAgICAgICAgICAgICAgICAgX19wdW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgX19iaW5jb2VmZiA9IHN0ZDo6ZXhwKF9fYmluY29lZmYpOworICAgICAgICAgICAgICBfX3Rlcm0gKz0gX19zZ24gKiBfX2JpbmNvZWZmICogc3RkOjpwb3coX1RwKDEgKyBfX2opLCAtX19zKTsKKyAgICAgICAgICAgICAgX19zZ24gKj0gX1RwKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoX19wdW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX190ZXJtICo9IF9fbnVtOworICAgICAgICAgIF9femV0YSArPSBfX3Rlcm07CisgICAgICAgICAgaWYgKHN0ZDo6YWJzKF9fdGVybS9fX3pldGEpIDwgX19lcHMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBfX251bSAqPSBfVHAoMC41TCk7CisgICAgICAgIH0KKworICAgICAgX196ZXRhIC89IF9UcCgxKSAtIHN0ZDo6cG93KF9UcCgyKSwgX1RwKDEpIC0gX19zKTsKKworICAgICAgcmV0dXJuIF9femV0YTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqICAgQGJyaWVmICBDb21wdXRlIHRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gQGYkIFx6ZXRhKHMpIEBmJAorICAgICAqICAgICAgICAgICB1c2luZyB0aGUgcHJvZHVjdCBvdmVyIHByaW1lIGZhY3RvcnMuCisgICAgICogICAgXGZbCisgICAgICogICAgICBcemV0YShzKSA9IFxQaV97aT0xfV5caW5mdHkgXGZyYWN7MX17MSAtIHBfaV57LXN9fQorICAgICAqICAgIFxmXQorICAgICAqICAgIHdoZXJlIEBmJCB7cF9pfSBAZiQgYXJlIHRoZSBwcmltZSBudW1iZXJzLgorICAgICAqIAorICAgICAqICAgVGhlIFJpZW1hbm4gemV0YSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgIFxmWworICAgICAqICAgICAgXHpldGEocykgPSBcc3VtX3trPTF9XntcaW5mdHl9IFxmcmFjezF9e2tee3N9fSBmb3IgcyA+IDEKKyAgICAgKiAgICBcZl0KKyAgICAgKiAgIEZvciBzIDwgMSB1c2UgdGhlIHJlZmxlY3Rpb24gZm9ybXVsYToKKyAgICAgKiAgICBcZlsKKyAgICAgKiAgICAgIFx6ZXRhKHMpID0gMl5zIFxwaV57cy0xfSBcR2FtbWEoMS1zKSBcemV0YSgxLXMpCisgICAgICogICAgXGZdCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fcmllbWFubl96ZXRhX3Byb2R1Y3QoX1RwIF9fcykKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgX1RwIF9fcHJpbWVbXSA9IHsKKyAgICAgICAgX1RwKDIpLCBfVHAoMyksIF9UcCg1KSwgX1RwKDcpLCBfVHAoMTEpLCBfVHAoMTMpLCBfVHAoMTcpLCBfVHAoMTkpLAorICAgICAgICBfVHAoMjMpLCBfVHAoMjkpLCBfVHAoMzEpLCBfVHAoMzcpLCBfVHAoNDEpLCBfVHAoNDMpLCBfVHAoNDcpLAorICAgICAgICBfVHAoNTMpLCBfVHAoNTkpLCBfVHAoNjEpLCBfVHAoNjcpLCBfVHAoNzEpLCBfVHAoNzMpLCBfVHAoNzkpLAorICAgICAgICBfVHAoODMpLCBfVHAoODkpLCBfVHAoOTcpLCBfVHAoMTAxKSwgX1RwKDEwMyksIF9UcCgxMDcpLCBfVHAoMTA5KQorICAgICAgfTsKKyAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgX19udW1fcHJpbWVzID0gc2l6ZW9mKF9fcHJpbWUpIC8gc2l6ZW9mKF9UcCk7CisKKyAgICAgIF9UcCBfX3pldGEgPSBfVHAoMSk7CisgICAgICBmb3IgKHVuc2lnbmVkIGludCBfX2kgPSAwOyBfX2kgPCBfX251bV9wcmltZXM7ICsrX19pKQorICAgICAgICB7CisgICAgICAgICAgY29uc3QgX1RwIF9fZmFjdCA9IF9UcCgxKSAtIHN0ZDo6cG93KF9fcHJpbWVbX19pXSwgLV9fcyk7CisgICAgICAgICAgX196ZXRhICo9IF9fZmFjdDsKKyAgICAgICAgICBpZiAoX1RwKDEpIC0gX19mYWN0IDwgc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjplcHNpbG9uKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICBfX3pldGEgPSBfVHAoMSkgLyBfX3pldGE7CisKKyAgICAgIHJldHVybiBfX3pldGE7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiAgIEBicmllZiAgUmV0dXJuIHRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gQGYkIFx6ZXRhKHMpIEBmJC4KKyAgICAgKiAKKyAgICAgKiAgIFRoZSBSaWVtYW5uIHpldGEgZnVuY3Rpb24gaXMgZGVmaW5lZCBieToKKyAgICAgKiAgICBcZlsKKyAgICAgKiAgICAgIFx6ZXRhKHMpID0gXHN1bV97az0xfV57XGluZnR5fSBrXnstc30gZm9yIHMgPiAxCisgICAgICogICAgICAgICAgICAgICAgIFxmcmFjeygyXHBpKV5zfXtwaX0gc2luKFxmcmFje1xwaSBzfXsyfSkKKyAgICAgKiAgICAgICAgICAgICAgICAgXEdhbW1hICgxIC0gcykgXHpldGEgKDEgLSBzKSBmb3IgcyA8IDEKKyAgICAgKiAgICBcZl0KKyAgICAgKiAgIEZvciBzIDwgMSB1c2UgdGhlIHJlZmxlY3Rpb24gZm9ybXVsYToKKyAgICAgKiAgICBcZlsKKyAgICAgKiAgICAgIFx6ZXRhKHMpID0gMl5zIFxwaV57cy0xfSBcR2FtbWEoMS1zKSBcemV0YSgxLXMpCisgICAgICogICAgXGZdCisgICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIF9UcAorICAgIF9fcmllbWFubl96ZXRhKF9UcCBfX3MpCisgICAgeworICAgICAgaWYgKF9faXNuYW4oX19zKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6cXVpZXRfTmFOKCk7CisgICAgICBlbHNlIGlmIChfX3MgPT0gX1RwKDEpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxfVHA+OjppbmZpbml0eSgpOworICAgICAgZWxzZSBpZiAoX19zIDwgLV9UcCgxOSkpCisgICAgICAgIHsKKyAgICAgICAgICBfVHAgX196ZXRhID0gX19yaWVtYW5uX3pldGFfcHJvZHVjdChfVHAoMSkgLSBfX3MpOworICAgICAgICAgIF9femV0YSAqPSBzdGQ6OnBvdyhfVHAoMikgKiBfX251bWVyaWNfY29uc3RhbnRzPF9UcD46Ol9fcGkoKSwgX19zKQorICAgICAgICAgICAgICAgICAqIHN0ZDo6c2luKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV8yKCkgKiBfX3MpCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICAgICAgICAgICAqIHN0ZDo6ZXhwKHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKDEpIC0gX19zKSkKKyNlbHNlCisgICAgICAgICAgICAgICAgICogc3RkOjpleHAoX19sb2dfZ2FtbWEoX1RwKDEpIC0gX19zKSkKKyNlbmRpZgorICAgICAgICAgICAgICAgICAvIF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waSgpOworICAgICAgICAgIHJldHVybiBfX3pldGE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKF9fcyA8IF9UcCgyMCkpCisgICAgICAgIHsKKyAgICAgICAgICAvLyAgR2xvYmFsIGRvdWJsZSBzdW0gb3IgTWNMYXVyaW4/CisgICAgICAgICAgYm9vbCBfX2dsb2IgPSB0cnVlOworICAgICAgICAgIGlmIChfX2dsb2IpCisgICAgICAgICAgICByZXR1cm4gX19yaWVtYW5uX3pldGFfZ2xvYihfX3MpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKF9fcyA+IF9UcCgxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gX19yaWVtYW5uX3pldGFfc3VtKF9fcyk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBfVHAgX196ZXRhID0gc3RkOjpwb3coX1RwKDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19udW1lcmljX2NvbnN0YW50czxfVHA+OjpfX3BpKCksIF9fcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6c2luKF9fbnVtZXJpY19jb25zdGFudHM8X1RwPjo6X19waV8yKCkgKiBfX3MpCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9NQVRIX1RSMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6dHIxOjp0Z2FtbWEoX1RwKDEpIC0gX19zKQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGQ6OmV4cChfX2xvZ19nYW1tYShfVHAoMSkgLSBfX3MpKQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19yaWVtYW5uX3pldGFfc3VtKF9UcCgxKSAtIF9fcyk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gX196ZXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICByZXR1cm4gX19yaWVtYW5uX3pldGFfcHJvZHVjdChfX3MpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgSHVyd2l0eiB6ZXRhIGZ1bmN0aW9uIEBmJCBcemV0YSh4LHMpIEBmJAorICAgICAqICAgICAgICAgICBmb3IgYWxsIHMgIT0gMSBhbmQgeCA+IC0xLgorICAgICAqIAorICAgICAqICAgVGhlIEh1cndpdHogemV0YSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgIFx6ZXRhKHgscykgPSBcc3VtX3tuPTB9XntcaW5mdHl9IFxmcmFjezF9eyhuICsgeClec30KKyAgICAgKiAgIEBmXQorICAgICAqICAgVGhlIFJpZW1hbm4gemV0YSBmdW5jdGlvbiBpcyBhIHNwZWNpYWwgY2FzZToKKyAgICAgKiAgIEBmWworICAgICAqICAgICBcemV0YShzKSA9IFx6ZXRhKDEscykKKyAgICAgKiAgIEBmXQorICAgICAqIAorICAgICAqICAgVGhpcyBmdW5jdGlvbnMgdXNlcyB0aGUgZG91YmxlIHN1bSB0aGF0IGNvbnZlcmdlcyBmb3IgcyAhPSAxCisgICAgICogICBhbmQgeCA+IC0xOgorICAgICAqICAgQGZbCisgICAgICogICAgIFx6ZXRhKHgscykgPSBcZnJhY3sxfXtzLTF9CisgICAgICogICAgICAgICAgICAgICAgXHN1bV97bj0wfV57XGluZnR5fSBcZnJhY3sxfXtuICsgMX0KKyAgICAgKiAgICAgICAgICAgICAgICBcc3VtX3trPTB9XntufSAoLTEpXmsgXGZyYWN7biF9eyhuLWspIWshfSAoeCtrKV57LXN9CisgICAgICogICBAZl0KKyAgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgX1RwCisgICAgX19odXJ3aXR6X3pldGFfZ2xvYihfVHAgX19hLCBfVHAgX19zKQorICAgIHsKKyAgICAgIF9UcCBfX3pldGEgPSBfVHAoMCk7CisKKyAgICAgIGNvbnN0IF9UcCBfX2VwcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6ZXBzaWxvbigpOworICAgICAgLy8gIE1heCBlIGV4cG9uZW50IGJlZm9yZSBvdmVyZmxvdy4KKyAgICAgIGNvbnN0IF9UcCBfX21heF9iaW5jb2VmZiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8X1RwPjo6bWF4X2V4cG9uZW50MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0ZDo6bG9nKF9UcCgxMCkpIC0gX1RwKDEpOworCisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgX19tYXhpdCA9IDEwMDAwOworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgX19pID0gMDsgX19pIDwgX19tYXhpdDsgKytfX2kpCisgICAgICAgIHsKKyAgICAgICAgICBib29sIF9fcHVudCA9IGZhbHNlOworICAgICAgICAgIF9UcCBfX3NnbiA9IF9UcCgxKTsKKyAgICAgICAgICBfVHAgX190ZXJtID0gX1RwKDApOworICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IF9faiA9IDA7IF9faiA8PSBfX2k7ICsrX19qKQorICAgICAgICAgICAgeworI2lmIF9HTElCQ1hYX1VTRV9DOTlfTUFUSF9UUjEKKyAgICAgICAgICAgICAgX1RwIF9fYmluY29lZmYgPSAgc3RkOjp0cjE6OmxnYW1tYShfVHAoMSArIF9faSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0ZDo6dHIxOjpsZ2FtbWEoX1RwKDEgKyBfX2opKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzdGQ6OnRyMTo6bGdhbW1hKF9UcCgxICsgX19pIC0gX19qKSk7CisjZWxzZQorICAgICAgICAgICAgICBfVHAgX19iaW5jb2VmZiA9ICBfX2xvZ19nYW1tYShfVHAoMSArIF9faSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIF9fbG9nX2dhbW1hKF9UcCgxICsgX19qKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gX19sb2dfZ2FtbWEoX1RwKDEgKyBfX2kgLSBfX2opKTsKKyNlbmRpZgorICAgICAgICAgICAgICBpZiAoX19iaW5jb2VmZiA+IF9fbWF4X2JpbmNvZWZmKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8vICBUaGlzIG9ubHkgZ2V0cyBoaXQgZm9yIHggPDwgMC4KKyAgICAgICAgICAgICAgICAgIF9fcHVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIF9fYmluY29lZmYgPSBzdGQ6OmV4cChfX2JpbmNvZWZmKTsKKyAgICAgICAgICAgICAgX190ZXJtICs9IF9fc2duICogX19iaW5jb2VmZiAqIHN0ZDo6cG93KF9UcChfX2EgKyBfX2opLCAtX19zKTsKKyAgICAgICAgICAgICAgX19zZ24gKj0gX1RwKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoX19wdW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX190ZXJtIC89IF9UcChfX2kgKyAxKTsKKyAgICAgICAgICBpZiAoc3RkOjphYnMoX190ZXJtIC8gX196ZXRhKSA8IF9fZXBzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgX196ZXRhICs9IF9fdGVybTsKKyAgICAgICAgfQorCisgICAgICBfX3pldGEgLz0gX19zIC0gX1RwKDEpOworCisgICAgICByZXR1cm4gX196ZXRhOworICAgIH0KKworCisgICAgLyoqCisgICAgICogICBAYnJpZWYgIFJldHVybiB0aGUgSHVyd2l0eiB6ZXRhIGZ1bmN0aW9uIEBmJCBcemV0YSh4LHMpIEBmJAorICAgICAqICAgICAgICAgICBmb3IgYWxsIHMgIT0gMSBhbmQgeCA+IC0xLgorICAgICAqIAorICAgICAqICAgVGhlIEh1cndpdHogemV0YSBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5OgorICAgICAqICAgQGZbCisgICAgICogICAgIFx6ZXRhKHgscykgPSBcc3VtX3tuPTB9XntcaW5mdHl9IFxmcmFjezF9eyhuICsgeClec30KKyAgICAgKiAgIEBmXQorICAgICAqICAgVGhlIFJpZW1hbm4gemV0YSBmdW5jdGlvbiBpcyBhIHNwZWNpYWwgY2FzZToKKyAgICAgKiAgIEBmWworICAgICAqICAgICBcemV0YShzKSA9IFx6ZXRhKDEscykKKyAgICAgKiAgIEBmXQorICAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgX19odXJ3aXR6X3pldGEoX1RwIF9fYSwgX1RwIF9fcykKKyAgICB7IHJldHVybiBfX2h1cndpdHpfemV0YV9nbG9iKF9fYSwgX19zKTsgfQorCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBzdGQ6OnRyMTo6X19kZXRhaWwKK30KK30KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9SSUVNQU5OX1pFVEFfVENDCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9zaGFyZWRfcHRyLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9zaGFyZWRfcHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4ZjA2NQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3NoYXJlZF9wdHIuaApAQCAtMCwwICsxLDExNzIgQEAKKy8vIDx0cjEvc2hhcmVkX3B0ci5oPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyAgc2hhcmVkX2NvdW50LmhwcAorLy8gIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdiBhbmQgTXVsdGkgTWVkaWEgTHRkLgorCisvLyAgc2hhcmVkX3B0ci5ocHAKKy8vICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgR3JlZyBDb2x2aW4gYW5kIEJlbWFuIERhd2VzLgorLy8gIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBQZXRlciBEaW1vdgorCisvLyAgd2Vha19wdHIuaHBwCisvLyAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIFBldGVyIERpbW92CisKKy8vICBlbmFibGVfc2hhcmVkX2Zyb21fdGhpcy5ocHAKKy8vICBDb3B5cmlnaHQgKEMpIDIwMDIgUGV0ZXIgRGltb3YKKworLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisvLyBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBHQ0MgTm90ZTogIGJhc2VkIG9uIHZlcnNpb24gMS4zMi4wIG9mIHRoZSBCb29zdCBsaWJyYXJ5LgorCisvKiogQGZpbGUgdHIxL3NoYXJlZF9wdHIuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3RyMS9tZW1vcnl9CisgKi8KKworI2lmbmRlZiBfVFIxX1NIQVJFRF9QVFJfSAorI2RlZmluZSBfVFIxX1NIQVJFRF9QVFJfSCAxCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworIC8qKgorICAgKiAgQGJyaWVmICBFeGNlcHRpb24gcG9zc2libHkgdGhyb3duIGJ5IEBjIHNoYXJlZF9wdHIuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqLworICBjbGFzcyBiYWRfd2Vha19wdHIgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24KKyAgeworICBwdWJsaWM6CisgICAgdmlydHVhbCBjaGFyIGNvbnN0KgorICAgIHdoYXQoKSBjb25zdCB0aHJvdygpCisgICAgeyByZXR1cm4gInRyMTo6YmFkX3dlYWtfcHRyIjsgfQorICB9OworCisgIC8vIFN1YnN0aXR1dGUgZm9yIGJhZF93ZWFrX3B0ciBvYmplY3QgaW4gdGhlIGNhc2Ugb2YgLWZuby1leGNlcHRpb25zLgorICBpbmxpbmUgdm9pZAorICBfX3Rocm93X2JhZF93ZWFrX3B0cigpCisgIHsgX0dMSUJDWFhfVEhST1dfT1JfQUJPUlQoYmFkX3dlYWtfcHRyKCkpOyB9CisKKyAgdXNpbmcgX19nbnVfY3h4OjpfTG9ja19wb2xpY3k7CisgIHVzaW5nIF9fZ251X2N4eDo6X19kZWZhdWx0X2xvY2tfcG9saWN5OworICB1c2luZyBfX2dudV9jeHg6Ol9TX3NpbmdsZTsKKyAgdXNpbmcgX19nbnVfY3h4OjpfU19tdXRleDsKKyAgdXNpbmcgX19nbnVfY3h4OjpfU19hdG9taWM7CisKKyAgLy8gRW1wdHkgaGVscGVyIGNsYXNzIGV4Y2VwdCB3aGVuIHRoZSB0ZW1wbGF0ZSBhcmd1bWVudCBpcyBfU19tdXRleC4KKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfTXV0ZXhfYmFzZQorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBUaGUgYXRvbWljIHBvbGljeSB1c2VzIGZ1bGx5LWZlbmNlZCBidWlsdGlucywgc2luZ2xlIGRvZXNuJ3QgY2FyZS4KKyAgICAgIGVudW0geyBfU19uZWVkX2JhcnJpZXJzID0gMCB9OworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIGNsYXNzIF9NdXRleF9iYXNlPF9TX211dGV4PgorICAgIDogcHVibGljIF9fZ251X2N4eDo6X19tdXRleAorICAgIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAvLyBUaGlzIHBvbGljeSBpcyB1c2VkIHdoZW4gYXRvbWljIGJ1aWx0aW5zIGFyZSBub3QgYXZhaWxhYmxlLgorICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IGF0b21pYyBvcGVyYXRpb25zIG1pZ2h0IG5vdCBoYXZlIHRoZSBuZWNlc3NhcnkKKyAgICAgIC8vIG1lbW9yeSBiYXJyaWVycy4KKyAgICAgIGVudW0geyBfU19uZWVkX2JhcnJpZXJzID0gMSB9OworICAgIH07CisKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McCA9IF9fZGVmYXVsdF9sb2NrX3BvbGljeT4KKyAgICBjbGFzcyBfU3BfY291bnRlZF9iYXNlCisgICAgOiBwdWJsaWMgX011dGV4X2Jhc2U8X0xwPgorICAgIHsKKyAgICBwdWJsaWM6ICAKKyAgICAgIF9TcF9jb3VudGVkX2Jhc2UoKQorICAgICAgOiBfTV91c2VfY291bnQoMSksIF9NX3dlYWtfY291bnQoMSkgeyB9CisgICAgICAKKyAgICAgIHZpcnR1YWwKKyAgICAgIH5fU3BfY291bnRlZF9iYXNlKCkgLy8gbm90aHJvdyAKKyAgICAgIHsgfQorICAKKyAgICAgIC8vIENhbGxlZCB3aGVuIF9NX3VzZV9jb3VudCBkcm9wcyB0byB6ZXJvLCB0byByZWxlYXNlIHRoZSByZXNvdXJjZXMKKyAgICAgIC8vIG1hbmFnZWQgYnkgKnRoaXMuCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX2Rpc3Bvc2UoKSA9IDA7IC8vIG5vdGhyb3cKKyAgICAgIAorICAgICAgLy8gQ2FsbGVkIHdoZW4gX01fd2Vha19jb3VudCBkcm9wcyB0byB6ZXJvLgorICAgICAgdmlydHVhbCB2b2lkCisgICAgICBfTV9kZXN0cm95KCkgLy8gbm90aHJvdworICAgICAgeyBkZWxldGUgdGhpczsgfQorICAgICAgCisgICAgICB2aXJ0dWFsIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYpID0gMDsKKworICAgICAgdm9pZAorICAgICAgX01fYWRkX3JlZl9jb3B5KCkKKyAgICAgIHsgX19nbnVfY3h4OjpfX2F0b21pY19hZGRfZGlzcGF0Y2goJl9NX3VzZV9jb3VudCwgMSk7IH0KKyAgCisgICAgICB2b2lkCisgICAgICBfTV9hZGRfcmVmX2xvY2soKTsKKyAgICAgIAorICAgICAgdm9pZAorICAgICAgX01fcmVsZWFzZSgpIC8vIG5vdGhyb3cKKyAgICAgIHsKKyAgICAgICAgLy8gQmUgcmFjZS1kZXRlY3Rvci1mcmllbmRseS4gIEZvciBtb3JlIGluZm8gc2VlIGJpdHMvYysrY29uZmlnLgorICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19CRUZPUkUoJl9NX3VzZV9jb3VudCk7CisJaWYgKF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoKCZfTV91c2VfY291bnQsIC0xKSA9PSAxKQorCSAgeworICAgICAgICAgICAgX0dMSUJDWFhfU1lOQ0hST05JWkFUSU9OX0hBUFBFTlNfQUZURVIoJl9NX3VzZV9jb3VudCk7CisJICAgIF9NX2Rpc3Bvc2UoKTsKKwkgICAgLy8gVGhlcmUgbXVzdCBiZSBhIG1lbW9yeSBiYXJyaWVyIGJldHdlZW4gZGlzcG9zZSgpIGFuZCBkZXN0cm95KCkKKwkgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIGVmZmVjdHMgb2YgZGlzcG9zZSgpIGFyZSBvYnNlcnZlZCBpbiB0aGUKKwkgICAgLy8gdGhyZWFkIHRoYXQgcnVucyBkZXN0cm95KCkuCisJICAgIC8vIFNlZSBodHRwOi8vZ2NjLmdudS5vcmcvbWwvbGlic3RkYysrLzIwMDUtMTEvbXNnMDAxMzYuaHRtbAorCSAgICBpZiAoX011dGV4X2Jhc2U8X0xwPjo6X1NfbmVlZF9iYXJyaWVycykKKwkgICAgICB7CisJICAgICAgICBfR0xJQkNYWF9SRUFEX01FTV9CQVJSSUVSOworCSAgICAgICAgX0dMSUJDWFhfV1JJVEVfTUVNX0JBUlJJRVI7CisJICAgICAgfQorCisgICAgICAgICAgICAvLyBCZSByYWNlLWRldGVjdG9yLWZyaWVuZGx5LiAgRm9yIG1vcmUgaW5mbyBzZWUgYml0cy9jKytjb25maWcuCisgICAgICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19CRUZPUkUoJl9NX3dlYWtfY291bnQpOworCSAgICBpZiAoX19nbnVfY3h4OjpfX2V4Y2hhbmdlX2FuZF9hZGRfZGlzcGF0Y2goJl9NX3dlYWtfY291bnQsCisJCQkJCQkgICAgICAgLTEpID09IDEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19BRlRFUigmX01fd2Vha19jb3VudCk7CisJICAgICAgICBfTV9kZXN0cm95KCk7CisgICAgICAgICAgICAgIH0KKwkgIH0KKyAgICAgIH0KKyAgCisgICAgICB2b2lkCisgICAgICBfTV93ZWFrX2FkZF9yZWYoKSAvLyBub3Rocm93CisgICAgICB7IF9fZ251X2N4eDo6X19hdG9taWNfYWRkX2Rpc3BhdGNoKCZfTV93ZWFrX2NvdW50LCAxKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV93ZWFrX3JlbGVhc2UoKSAvLyBub3Rocm93CisgICAgICB7CisgICAgICAgIC8vIEJlIHJhY2UtZGV0ZWN0b3ItZnJpZW5kbHkuIEZvciBtb3JlIGluZm8gc2VlIGJpdHMvYysrY29uZmlnLgorICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19CRUZPUkUoJl9NX3dlYWtfY291bnQpOworCWlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fd2Vha19jb3VudCwgLTEpID09IDEpCisJICB7CisgICAgICAgICAgICBfR0xJQkNYWF9TWU5DSFJPTklaQVRJT05fSEFQUEVOU19BRlRFUigmX01fd2Vha19jb3VudCk7CisJICAgIGlmIChfTXV0ZXhfYmFzZTxfTHA+OjpfU19uZWVkX2JhcnJpZXJzKQorCSAgICAgIHsKKwkgICAgICAgIC8vIFNlZSBfTV9yZWxlYXNlKCksCisJICAgICAgICAvLyBkZXN0cm95KCkgbXVzdCBvYnNlcnZlIHJlc3VsdHMgb2YgZGlzcG9zZSgpCisJICAgICAgICBfR0xJQkNYWF9SRUFEX01FTV9CQVJSSUVSOworCSAgICAgICAgX0dMSUJDWFhfV1JJVEVfTUVNX0JBUlJJRVI7CisJICAgICAgfQorCSAgICBfTV9kZXN0cm95KCk7CisJICB9CisgICAgICB9CisgIAorICAgICAgbG9uZworICAgICAgX01fZ2V0X3VzZV9jb3VudCgpIGNvbnN0IC8vIG5vdGhyb3cKKyAgICAgIHsKKyAgICAgICAgLy8gTm8gbWVtb3J5IGJhcnJpZXIgaXMgdXNlZCBoZXJlIHNvIHRoZXJlIGlzIG5vIHN5bmNocm9uaXphdGlvbgorICAgICAgICAvLyB3aXRoIG90aGVyIHRocmVhZHMuCisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PGNvbnN0IHZvbGF0aWxlIF9BdG9taWNfd29yZCY+KF9NX3VzZV9jb3VudCk7CisgICAgICB9CisKKyAgICBwcml2YXRlOiAgCisgICAgICBfU3BfY291bnRlZF9iYXNlKF9TcF9jb3VudGVkX2Jhc2UgY29uc3QmKTsKKyAgICAgIF9TcF9jb3VudGVkX2Jhc2UmIG9wZXJhdG9yPShfU3BfY291bnRlZF9iYXNlIGNvbnN0Jik7CisKKyAgICAgIF9BdG9taWNfd29yZCAgX01fdXNlX2NvdW50OyAgICAgLy8gI3NoYXJlZAorICAgICAgX0F0b21pY193b3JkICBfTV93ZWFrX2NvdW50OyAgICAvLyAjd2VhayArICgjc2hhcmVkICE9IDApCisgICAgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHZvaWQKKyAgICBfU3BfY291bnRlZF9iYXNlPF9TX3NpbmdsZT46OgorICAgIF9NX2FkZF9yZWZfbG9jaygpCisgICAgeworICAgICAgaWYgKF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkX2Rpc3BhdGNoKCZfTV91c2VfY291bnQsIDEpID09IDApCisJeworCSAgX01fdXNlX2NvdW50ID0gMDsKKwkgIF9fdGhyb3dfYmFkX3dlYWtfcHRyKCk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHZvaWQKKyAgICBfU3BfY291bnRlZF9iYXNlPF9TX211dGV4Pjo6CisgICAgX01fYWRkX3JlZl9sb2NrKCkKKyAgICB7CisgICAgICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgc2VudHJ5KCp0aGlzKTsKKyAgICAgIGlmIChfX2dudV9jeHg6Ol9fZXhjaGFuZ2VfYW5kX2FkZF9kaXNwYXRjaCgmX01fdXNlX2NvdW50LCAxKSA9PSAwKQorCXsKKwkgIF9NX3VzZV9jb3VudCA9IDA7CisJICBfX3Rocm93X2JhZF93ZWFrX3B0cigpOworCX0KKyAgICB9CisKKyAgdGVtcGxhdGU8PiAKKyAgICBpbmxpbmUgdm9pZAorICAgIF9TcF9jb3VudGVkX2Jhc2U8X1NfYXRvbWljPjo6CisgICAgX01fYWRkX3JlZl9sb2NrKCkKKyAgICB7CisgICAgICAvLyBQZXJmb3JtIGxvY2stZnJlZSBhZGQtaWYtbm90LXplcm8gb3BlcmF0aW9uLgorICAgICAgX0F0b21pY193b3JkIF9fY291bnQgPSBfTV91c2VfY291bnQ7CisgICAgICBkbworCXsKKwkgIGlmIChfX2NvdW50ID09IDApCisJICAgIF9fdGhyb3dfYmFkX3dlYWtfcHRyKCk7CisJICAvLyBSZXBsYWNlIHRoZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUgd2l0aCB0aGUgb2xkIHZhbHVlICsgMSwgYXMKKwkgIC8vIGxvbmcgYXMgaXQncyBub3QgY2hhbmdlZCBtZWFud2hpbGUuIAorCX0KKyAgICAgIHdoaWxlICghX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCZfTV91c2VfY291bnQsICZfX2NvdW50LCBfX2NvdW50ICsgMSwKKwkJCQkJICB0cnVlLCBfX0FUT01JQ19BQ1FfUkVMLCAKKwkJCQkJICBfX0FUT01JQ19SRUxBWEVEKSk7CisgICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHRyLCB0eXBlbmFtZSBfRGVsZXRlciwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBjbGFzcyBfU3BfY291bnRlZF9iYXNlX2ltcGwKKyAgICA6IHB1YmxpYyBfU3BfY291bnRlZF9iYXNlPF9McD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgLy8gUHJlY29uZGl0aW9uOiBfX2QoX19wKSBtdXN0IG5vdCB0aHJvdy4KKyAgICAgIF9TcF9jb3VudGVkX2Jhc2VfaW1wbChfUHRyIF9fcCwgX0RlbGV0ZXIgX19kKQorICAgICAgOiBfTV9wdHIoX19wKSwgX01fZGVsKF9fZCkgeyB9CisgICAgCisgICAgICB2aXJ0dWFsIHZvaWQKKyAgICAgIF9NX2Rpc3Bvc2UoKSAvLyBub3Rocm93CisgICAgICB7IF9NX2RlbChfTV9wdHIpOyB9CisgICAgICAKKyAgICAgIHZpcnR1YWwgdm9pZCoKKyAgICAgIF9NX2dldF9kZWxldGVyKGNvbnN0IHN0ZDo6dHlwZV9pbmZvJiBfX3RpKQorICAgICAgeworI2lmZGVmIF9fR1hYX1JUVEkKKyAgICAgICAgcmV0dXJuIF9fdGkgPT0gdHlwZWlkKF9EZWxldGVyKSA/ICZfTV9kZWwgOiAwOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICAgIH0KKyAgICAgIAorICAgIHByaXZhdGU6CisgICAgICBfU3BfY291bnRlZF9iYXNlX2ltcGwoY29uc3QgX1NwX2NvdW50ZWRfYmFzZV9pbXBsJik7CisgICAgICBfU3BfY291bnRlZF9iYXNlX2ltcGwmIG9wZXJhdG9yPShjb25zdCBfU3BfY291bnRlZF9iYXNlX2ltcGwmKTsKKyAgICAgIAorICAgICAgX1B0ciAgICAgIF9NX3B0cjsgIC8vIGNvcHkgY29uc3RydWN0b3IgbXVzdCBub3QgdGhyb3cKKyAgICAgIF9EZWxldGVyICBfTV9kZWw7ICAvLyBjb3B5IGNvbnN0cnVjdG9yIG11c3Qgbm90IHRocm93CisgICAgfTsKKworICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwID0gX19kZWZhdWx0X2xvY2tfcG9saWN5PgorICAgIGNsYXNzIF9fd2Vha19jb3VudDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9TcF9kZWxldGVyCisgICAgeworICAgICAgdHlwZWRlZiB2b2lkIHJlc3VsdF90eXBlOworICAgICAgdHlwZWRlZiBfVHAqIGFyZ3VtZW50X3R5cGU7CisgICAgICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgZGVsZXRlIF9fcDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8X0xvY2tfcG9saWN5IF9McCA9IF9fZGVmYXVsdF9sb2NrX3BvbGljeT4KKyAgICBjbGFzcyBfX3NoYXJlZF9jb3VudAorICAgIHsKKyAgICBwdWJsaWM6IAorICAgICAgX19zaGFyZWRfY291bnQoKQorICAgICAgOiBfTV9waSgwKSAvLyBub3Rocm93CisgICAgICB7IH0KKyAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHRyPgorICAgICAgICBfX3NoYXJlZF9jb3VudChfUHRyIF9fcCkgOiBfTV9waSgwKQorICAgICAgICB7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnRyMTo6cmVtb3ZlX3BvaW50ZXI8X1B0cj46OnR5cGUgX1RwOworCSAgICAgIF9NX3BpID0gbmV3IF9TcF9jb3VudGVkX2Jhc2VfaW1wbDxfUHRyLCBfU3BfZGVsZXRlcjxfVHA+LCBfTHA+KAorCSAgICAgICAgICBfX3AsIF9TcF9kZWxldGVyPF9UcD4oKSk7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgZGVsZXRlIF9fcDsKKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkgICAgfQorCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1B0ciwgdHlwZW5hbWUgX0RlbGV0ZXI+CisgICAgICAgIF9fc2hhcmVkX2NvdW50KF9QdHIgX19wLCBfRGVsZXRlciBfX2QpIDogX01fcGkoMCkKKyAgICAgICAgeworCSAgX190cnkKKwkgICAgeworCSAgICAgIF9NX3BpID0gbmV3IF9TcF9jb3VudGVkX2Jhc2VfaW1wbDxfUHRyLCBfRGVsZXRlciwgX0xwPihfX3AsIF9fZCk7CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7CisJICAgICAgX19kKF9fcCk7IC8vIENhbGwgX0RlbGV0ZXIgb24gX19wLgorCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgICB9CisJfQorCisgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGF1dG9fcHRyPF9UcD4gdG8gcHJvdmlkZSB0aGUgc3Ryb25nIGd1YXJhbnRlZS4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgX19zaGFyZWRfY291bnQoc3RkOjphdXRvX3B0cjxfVHA+JiBfX3IpCisJOiBfTV9waShuZXcgX1NwX2NvdW50ZWRfYmFzZV9pbXBsPF9UcCosCisJCV9TcF9kZWxldGVyPF9UcD4sIF9McCA+KF9fci5nZXQoKSwgX1NwX2RlbGV0ZXI8X1RwPigpKSkKKyAgICAgICAgeyBfX3IucmVsZWFzZSgpOyB9CisKKyAgICAgIC8vIFRocm93IGJhZF93ZWFrX3B0ciB3aGVuIF9fci5fTV9nZXRfdXNlX2NvdW50KCkgPT0gMC4KKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3NoYXJlZF9jb3VudChjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19yKTsKKyAgCisgICAgICB+X19zaGFyZWRfY291bnQoKSAvLyBub3Rocm93CisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fcmVsZWFzZSgpOworICAgICAgfQorICAgICAgCisgICAgICBfX3NoYXJlZF9jb3VudChjb25zdCBfX3NoYXJlZF9jb3VudCYgX19yKQorICAgICAgOiBfTV9waShfX3IuX01fcGkpIC8vIG5vdGhyb3cKKyAgICAgIHsKKwlpZiAoX01fcGkgIT0gMCkKKwkgIF9NX3BpLT5fTV9hZGRfcmVmX2NvcHkoKTsKKyAgICAgIH0KKyAgCisgICAgICBfX3NoYXJlZF9jb3VudCYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX3NoYXJlZF9jb3VudCYgX19yKSAvLyBub3Rocm93CisgICAgICB7CisJX1NwX2NvdW50ZWRfYmFzZTxfTHA+KiBfX3RtcCA9IF9fci5fTV9waTsKKwlpZiAoX190bXAgIT0gX01fcGkpCisJICB7CisJICAgIGlmIChfX3RtcCAhPSAwKQorCSAgICAgIF9fdG1wLT5fTV9hZGRfcmVmX2NvcHkoKTsKKwkgICAgaWYgKF9NX3BpICE9IDApCisJICAgICAgX01fcGktPl9NX3JlbGVhc2UoKTsKKwkgICAgX01fcGkgPSBfX3RtcDsKKwkgIH0KKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgIAorICAgICAgdm9pZAorICAgICAgX01fc3dhcChfX3NoYXJlZF9jb3VudCYgX19yKSAvLyBub3Rocm93CisgICAgICB7CisJX1NwX2NvdW50ZWRfYmFzZTxfTHA+KiBfX3RtcCA9IF9fci5fTV9waTsKKwlfX3IuX01fcGkgPSBfTV9waTsKKwlfTV9waSA9IF9fdG1wOworICAgICAgfQorICAKKyAgICAgIGxvbmcKKyAgICAgIF9NX2dldF91c2VfY291bnQoKSBjb25zdCAvLyBub3Rocm93CisgICAgICB7IHJldHVybiBfTV9waSAhPSAwID8gX01fcGktPl9NX2dldF91c2VfY291bnQoKSA6IDA7IH0KKworICAgICAgYm9vbAorICAgICAgX01fdW5pcXVlKCkgY29uc3QgLy8gbm90aHJvdworICAgICAgeyByZXR1cm4gdGhpcy0+X01fZ2V0X3VzZV9jb3VudCgpID09IDE7IH0KKyAgICAgIAorICAgICAgZnJpZW5kIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcj09KGNvbnN0IF9fc2hhcmVkX2NvdW50JiBfX2EsIGNvbnN0IF9fc2hhcmVkX2NvdW50JiBfX2IpCisgICAgICB7IHJldHVybiBfX2EuX01fcGkgPT0gX19iLl9NX3BpOyB9CisgIAorICAgICAgZnJpZW5kIGlubGluZSBib29sCisgICAgICBvcGVyYXRvcjwoY29uc3QgX19zaGFyZWRfY291bnQmIF9fYSwgY29uc3QgX19zaGFyZWRfY291bnQmIF9fYikKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bGVzczxfU3BfY291bnRlZF9iYXNlPF9McD4qPigpKF9fYS5fTV9waSwgX19iLl9NX3BpKTsgfQorICAKKyAgICAgIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3BpID8gX01fcGktPl9NX2dldF9kZWxldGVyKF9fdGkpIDogMDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIGZyaWVuZCBjbGFzcyBfX3dlYWtfY291bnQ8X0xwPjsKKworICAgICAgX1NwX2NvdW50ZWRfYmFzZTxfTHA+KiAgX01fcGk7CisgICAgfTsKKworCisgIHRlbXBsYXRlPF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX193ZWFrX2NvdW50CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIF9fd2Vha19jb3VudCgpCisgICAgICA6IF9NX3BpKDApIC8vIG5vdGhyb3cKKyAgICAgIHsgfQorICAKKyAgICAgIF9fd2Vha19jb3VudChjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX3IpCisgICAgICA6IF9NX3BpKF9fci5fTV9waSkgLy8gbm90aHJvdworICAgICAgeworCWlmIChfTV9waSAhPSAwKQorCSAgX01fcGktPl9NX3dlYWtfYWRkX3JlZigpOworICAgICAgfQorICAgICAgCisgICAgICBfX3dlYWtfY291bnQoY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fcikKKyAgICAgIDogX01fcGkoX19yLl9NX3BpKSAvLyBub3Rocm93CisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19hZGRfcmVmKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIH5fX3dlYWtfY291bnQoKSAvLyBub3Rocm93CisgICAgICB7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19yZWxlYXNlKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIF9fd2Vha19jb3VudDxfTHA+JgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc2hhcmVkX2NvdW50PF9McD4mIF9fcikgLy8gbm90aHJvdworICAgICAgeworCV9TcF9jb3VudGVkX2Jhc2U8X0xwPiogX190bXAgPSBfX3IuX01fcGk7CisJaWYgKF9fdG1wICE9IDApCisJICBfX3RtcC0+X01fd2Vha19hZGRfcmVmKCk7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19yZWxlYXNlKCk7CisJX01fcGkgPSBfX3RtcDsgIAorCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICAgIAorICAgICAgX193ZWFrX2NvdW50PF9McD4mCisgICAgICBvcGVyYXRvcj0oY29uc3QgX193ZWFrX2NvdW50PF9McD4mIF9fcikgLy8gbm90aHJvdworICAgICAgeworCV9TcF9jb3VudGVkX2Jhc2U8X0xwPiogX190bXAgPSBfX3IuX01fcGk7CisJaWYgKF9fdG1wICE9IDApCisJICBfX3RtcC0+X01fd2Vha19hZGRfcmVmKCk7CisJaWYgKF9NX3BpICE9IDApCisJICBfTV9waS0+X01fd2Vha19yZWxlYXNlKCk7CisJX01fcGkgPSBfX3RtcDsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX3N3YXAoX193ZWFrX2NvdW50PF9McD4mIF9fcikgLy8gbm90aHJvdworICAgICAgeworCV9TcF9jb3VudGVkX2Jhc2U8X0xwPiogX190bXAgPSBfX3IuX01fcGk7CisJX19yLl9NX3BpID0gX01fcGk7CisJX01fcGkgPSBfX3RtcDsKKyAgICAgIH0KKyAgCisgICAgICBsb25nCisgICAgICBfTV9nZXRfdXNlX2NvdW50KCkgY29uc3QgLy8gbm90aHJvdworICAgICAgeyByZXR1cm4gX01fcGkgIT0gMCA/IF9NX3BpLT5fTV9nZXRfdXNlX2NvdW50KCkgOiAwOyB9CisKKyAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgb3BlcmF0b3I9PShjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19hLCBjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19iKQorICAgICAgeyByZXR1cm4gX19hLl9NX3BpID09IF9fYi5fTV9waTsgfQorICAgICAgCisgICAgICBmcmllbmQgaW5saW5lIGJvb2wKKyAgICAgIG9wZXJhdG9yPChjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19hLCBjb25zdCBfX3dlYWtfY291bnQ8X0xwPiYgX19iKQorICAgICAgeyByZXR1cm4gc3RkOjpsZXNzPF9TcF9jb3VudGVkX2Jhc2U8X0xwPio+KCkoX19hLl9NX3BpLCBfX2IuX01fcGkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgZnJpZW5kIGNsYXNzIF9fc2hhcmVkX2NvdW50PF9McD47CisKKyAgICAgIF9TcF9jb3VudGVkX2Jhc2U8X0xwPiogIF9NX3BpOworICAgIH07CisKKyAgLy8gbm93IHRoYXQgX193ZWFrX2NvdW50IGlzIGRlZmluZWQgd2UgY2FuIGRlZmluZSB0aGlzIGNvbnN0cnVjdG9yOgorICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZQorICAgIF9fc2hhcmVkX2NvdW50PF9McD46OgorICAgIF9fc2hhcmVkX2NvdW50KGNvbnN0IF9fd2Vha19jb3VudDxfTHA+JiBfX3IpCisgICAgOiBfTV9waShfX3IuX01fcGkpCisgICAgeworICAgICAgaWYgKF9NX3BpICE9IDApCisJX01fcGktPl9NX2FkZF9yZWZfbG9jaygpOworICAgICAgZWxzZQorCV9fdGhyb3dfYmFkX3dlYWtfcHRyKCk7CisgICAgfQorCisgIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHAgPSBfX2RlZmF1bHRfbG9ja19wb2xpY3k+CisgICAgY2xhc3MgX19zaGFyZWRfcHRyOworICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwID0gX19kZWZhdWx0X2xvY2tfcG9saWN5PgorICAgIGNsYXNzIF9fd2Vha19wdHI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwID0gX19kZWZhdWx0X2xvY2tfcG9saWN5PgorICAgIGNsYXNzIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIHNoYXJlZF9wdHI7CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgd2Vha19wdHI7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzOworCisgIC8vIFN1cHBvcnQgZm9yIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzLgorCisgIC8vIEZyaWVuZCBvZiBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzLgorICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwLCB0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgIHZvaWQKKyAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiwKKwkJCQkgICAgIGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8X1RwMSwKKwkJCQkgICAgIF9McD4qLCBjb25zdCBfVHAyKik7CisKKyAgLy8gRnJpZW5kIG9mIGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgIHZvaWQKKyAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihjb25zdCBfX3NoYXJlZF9jb3VudDw+JiwKKwkJCQkgICAgIGNvbnN0IGVuYWJsZV9zaGFyZWRfZnJvbV90aGlzPF9UcDE+KiwKKwkJCQkgICAgIGNvbnN0IF9UcDIqKTsKKworICB0ZW1wbGF0ZTxfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSB2b2lkCisgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYsIC4uLikKKyAgICB7IH0KKworCisgIHN0cnVjdCBfX3N0YXRpY19jYXN0X3RhZyB7IH07CisgIHN0cnVjdCBfX2NvbnN0X2Nhc3RfdGFnIHsgfTsKKyAgc3RydWN0IF9fZHluYW1pY19jYXN0X3RhZyB7IH07CisKKyAgLy8gQSBzbWFydCBwb2ludGVyIHdpdGggcmVmZXJlbmNlLWNvdW50ZWQgY29weSBzZW1hbnRpY3MuICBUaGUKKyAgLy8gb2JqZWN0IHBvaW50ZWQgdG8gaXMgZGVsZXRlZCB3aGVuIHRoZSBsYXN0IHNoYXJlZF9wdHIgcG9pbnRpbmcgdG8KKyAgLy8gaXQgaXMgZGVzdHJveWVkIG9yIHJlc2V0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX19zaGFyZWRfcHRyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgX1RwICAgZWxlbWVudF90eXBlOworICAgICAgCisgICAgICBfX3NoYXJlZF9wdHIoKQorICAgICAgOiBfTV9wdHIoMCksIF9NX3JlZmNvdW50KCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgX19zaGFyZWRfcHRyKF9UcDEqIF9fcCkKKwk6IF9NX3B0cihfX3ApLCBfTV9yZWZjb3VudChfX3ApCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikKKwkgIHR5cGVkZWYgaW50IF9Jc0NvbXBsZXRlW3NpemVvZihfVHAxKV07CisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX19wLCBfX3ApOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisgICAgICAgIF9fc2hhcmVkX3B0cihfVHAxKiBfX3AsIF9EZWxldGVyIF9fZCkKKyAgICAgICAgOiBfTV9wdHIoX19wKSwgX01fcmVmY291bnQoX19wLCBfX2QpCisgICAgICAgIHsKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikKKwkgIC8vIFRPRE8gcmVxdWlyZXMgX0RlbGV0ZXIgQ29weUNvbnN0cnVjdGlibGUgYW5kIF9fZChfX3ApIHdlbGwtZm9ybWVkCisJICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihfTV9yZWZjb3VudCwgX19wLCBfX3ApOworCX0KKyAgICAgIAorICAgICAgLy8gIGdlbmVyYXRlZCBjb3B5IGNvbnN0cnVjdG9yLCBhc3NpZ25tZW50LCBkZXN0cnVjdG9yIGFyZSBmaW5lLgorICAgICAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBfX3NoYXJlZF9wdHIoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKwk6IF9NX3B0cihfX3IuX01fcHRyKSwgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KSAvLyBuZXZlciB0aHJvd3MKKyAgICAgICAgeyBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgX19zaGFyZWRfcHRyKGNvbnN0IF9fd2Vha19wdHI8X1RwMSwgX0xwPiYgX19yKQorCTogX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KSAvLyBtYXkgdGhyb3cKKyAgICAgICAgeworCSAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9Db252ZXJ0aWJsZUNvbmNlcHQ8X1RwMSosIF9UcCo+KQorCSAgLy8gSXQgaXMgbm93IHNhZmUgdG8gY29weSBfX3IuX01fcHRyLCBhcyBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpCisJICAvLyBkaWQgbm90IHRocm93LgorCSAgX01fcHRyID0gX19yLl9NX3B0cjsKKwl9CisKKyNpZiAoX19jcGx1c3BsdXMgPCAyMDExMDNMKSB8fCBfR0xJQkNYWF9VU0VfREVQUkVDQVRFRAorICAgICAgLy8gUG9zdGNvbmRpdGlvbjogdXNlX2NvdW50KCkgPT0gMSBhbmQgX19yLmdldCgpID09IDAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIF9fc2hhcmVkX3B0cihzdGQ6OmF1dG9fcHRyPF9UcDE+JiBfX3IpCisJOiBfTV9wdHIoX19yLmdldCgpKSwgX01fcmVmY291bnQoKQorICAgICAgICB7IC8vIFRPRE8gcmVxdXJpZXMgZGVsZXRlIF9fci5yZWxlYXNlKCkgd2VsbC1mb3JtZWQKKwkgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikKKwkgIHR5cGVkZWYgaW50IF9Jc0NvbXBsZXRlW3NpemVvZihfVHAxKV07CisJICBfVHAxKiBfX3RtcCA9IF9fci5nZXQoKTsKKwkgIF9NX3JlZmNvdW50ID0gX19zaGFyZWRfY291bnQ8X0xwPihfX3IpOworCSAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoX01fcmVmY291bnQsIF9fdG1wLCBfX3RtcCk7CisJfQorCisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX19zaGFyZWRfcHRyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IsIF9fc3RhdGljX2Nhc3RfdGFnKQorCTogX01fcHRyKHN0YXRpY19jYXN0PGVsZW1lbnRfdHlwZSo+KF9fci5fTV9wdHIpKSwKKwkgIF9NX3JlZmNvdW50KF9fci5fTV9yZWZjb3VudCkKKyAgICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIF9fc2hhcmVkX3B0cihjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19yLCBfX2NvbnN0X2Nhc3RfdGFnKQorCTogX01fcHRyKGNvbnN0X2Nhc3Q8ZWxlbWVudF90eXBlKj4oX19yLl9NX3B0cikpLAorCSAgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KQorICAgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX19zaGFyZWRfcHRyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX3IsIF9fZHluYW1pY19jYXN0X3RhZykKKwk6IF9NX3B0cihkeW5hbWljX2Nhc3Q8ZWxlbWVudF90eXBlKj4oX19yLl9NX3B0cikpLAorCSAgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KQorICAgICAgICB7CisJICBpZiAoX01fcHRyID09IDApIC8vIG5lZWQgdG8gYWxsb2NhdGUgbmV3IGNvdW50ZXIgLS0gdGhlIGNhc3QgZmFpbGVkCisJICAgIF9NX3JlZmNvdW50ID0gX19zaGFyZWRfY291bnQ8X0xwPigpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX19zaGFyZWRfcHRyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikgLy8gbmV2ZXIgdGhyb3dzCisgICAgICAgIHsKKwkgIF9NX3B0ciA9IF9fci5fTV9wdHI7CisJICBfTV9yZWZjb3VudCA9IF9fci5fTV9yZWZjb3VudDsgLy8gX19zaGFyZWRfY291bnQ6Om9wPSBkb2Vzbid0IHRocm93CisJICByZXR1cm4gKnRoaXM7CisJfQorCisjaWYgKF9fY3BsdXNwbHVzIDwgMjAxMTAzTCkgfHwgX0dMSUJDWFhfVVNFX0RFUFJFQ0FURUQKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIF9fc2hhcmVkX3B0ciYKKyAgICAgICAgb3BlcmF0b3I9KHN0ZDo6YXV0b19wdHI8X1RwMT4mIF9fcikKKyAgICAgICAgeworCSAgX19zaGFyZWRfcHRyKF9fcikuc3dhcCgqdGhpcyk7CisJICByZXR1cm4gKnRoaXM7CisJfQorI2VuZGlmCisKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IF9fc2hhcmVkX3B0cigpLnN3YXAoKnRoaXMpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHZvaWQKKyAgICAgICAgcmVzZXQoX1RwMSogX19wKSAvLyBfVHAxIG11c3QgYmUgY29tcGxldGUuCisgICAgICAgIHsKKwkgIC8vIENhdGNoIHNlbGYtcmVzZXQgZXJyb3JzLgorCSAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fcCA9PSAwIHx8IF9fcCAhPSBfTV9wdHIpOyAKKwkgIF9fc2hhcmVkX3B0cihfX3ApLnN3YXAoKnRoaXMpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisgICAgICAgIHZvaWQKKyAgICAgICAgcmVzZXQoX1RwMSogX19wLCBfRGVsZXRlciBfX2QpCisgICAgICAgIHsgX19zaGFyZWRfcHRyKF9fcCwgX19kKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICAvLyBBbGxvdyBjbGFzcyBpbnN0YW50aWF0aW9uIHdoZW4gX1RwIGlzIFtjdi1xdWFsXSB2b2lkLgorICAgICAgdHlwZW5hbWUgc3RkOjp0cjE6OmFkZF9yZWZlcmVuY2U8X1RwPjo6dHlwZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7CisJX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3B0ciAhPSAwKTsKKwlyZXR1cm4gKl9NX3B0cjsKKyAgICAgIH0KKworICAgICAgX1RwKgorICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeworCV9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9wdHIgIT0gMCk7CisJcmV0dXJuIF9NX3B0cjsKKyAgICAgIH0KKyAgICAKKyAgICAgIF9UcCoKKyAgICAgIGdldCgpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeyByZXR1cm4gX01fcHRyOyB9CisKKyAgICAgIC8vIEltcGxpY2l0IGNvbnZlcnNpb24gdG8gImJvb2wiCisgICAgcHJpdmF0ZToKKyAgICAgIHR5cGVkZWYgX1RwKiBfX3NoYXJlZF9wdHI6OipfX3Vuc3BlY2lmaWVkX2Jvb2xfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIG9wZXJhdG9yIF9fdW5zcGVjaWZpZWRfYm9vbF90eXBlKCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IHJldHVybiBfTV9wdHIgPT0gMCA/IDAgOiAmX19zaGFyZWRfcHRyOjpfTV9wdHI7IH0KKworICAgICAgYm9vbAorICAgICAgdW5pcXVlKCkgY29uc3QgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IHJldHVybiBfTV9yZWZjb3VudC5fTV91bmlxdWUoKTsgfQorCisgICAgICBsb25nCisgICAgICB1c2VfY291bnQoKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF91c2VfY291bnQoKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fb3RoZXIpIC8vIG5ldmVyIHRocm93cworICAgICAgeworCXN0ZDo6c3dhcChfTV9wdHIsIF9fb3RoZXIuX01fcHRyKTsKKwlfTV9yZWZjb3VudC5fTV9zd2FwKF9fb3RoZXIuX01fcmVmY291bnQpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHZvaWQqCisgICAgICBfTV9nZXRfZGVsZXRlcihjb25zdCBzdGQ6OnR5cGVfaW5mbyYgX190aSkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF9kZWxldGVyKF9fdGkpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxPgorICAgICAgICBib29sCisgICAgICAgIF9NX2xlc3MoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McDE+JiBfX3JocykgY29uc3QKKyAgICAgICAgeyByZXR1cm4gX01fcmVmY291bnQgPCBfX3Jocy5fTV9yZWZjb3VudDsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMT4gZnJpZW5kIGNsYXNzIF9fc2hhcmVkX3B0cjsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHAxPiBmcmllbmQgY2xhc3MgX193ZWFrX3B0cjsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0RlbCwgdHlwZW5hbWUgX1RwMSwgX0xvY2tfcG9saWN5IF9McDE+CisgICAgICAgIGZyaWVuZCBfRGVsKiBnZXRfZGVsZXRlcihjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwMT4mKTsKKworICAgICAgLy8gRnJpZW5kcyBpbmplY3RlZCBpbnRvIGVuY2xvc2luZyBuYW1lc3BhY2UgYW5kIGZvdW5kIGJ5IEFETDoKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgICBvcGVyYXRvcj09KGNvbnN0IF9fc2hhcmVkX3B0ciYgX19hLCBjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19iKQorICAgICAgICB7IHJldHVybiBfX2EuZ2V0KCkgPT0gX19iLmdldCgpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgICBvcGVyYXRvciE9KGNvbnN0IF9fc2hhcmVkX3B0ciYgX19hLCBjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19iKQorICAgICAgICB7IHJldHVybiBfX2EuZ2V0KCkgIT0gX19iLmdldCgpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGZyaWVuZCBpbmxpbmUgYm9vbAorICAgICAgICBvcGVyYXRvcjwoY29uc3QgX19zaGFyZWRfcHRyJiBfX2EsIGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAxLCBfTHA+JiBfX2IpCisgICAgICAgIHsgcmV0dXJuIF9fYS5fTV9sZXNzKF9fYik7IH0KKworICAgICAgX1RwKiAgICAgICAgIAkgICBfTV9wdHI7ICAgICAgICAgLy8gQ29udGFpbmVkIHBvaW50ZXIuCisgICAgICBfX3NoYXJlZF9jb3VudDxfTHA+ICBfTV9yZWZjb3VudDsgICAgLy8gUmVmZXJlbmNlIGNvdW50ZXIuCisgICAgfTsKKworICAvLyAyLjIuMy44IHNoYXJlZF9wdHIgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3NoYXJlZF9wdHI8X1RwLCBfTHA+JiBfX2EsIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fYikKKyAgICB7IF9fYS5zd2FwKF9fYik7IH0KKworICAvLyAyLjIuMy45IHNoYXJlZF9wdHIgY2FzdHMKKyAgLyogIFRoZSBzZWVtaW5nbHkgZXF1aXZhbGVudAorICAgKiAgICAgICAgICAgc2hhcmVkX3B0cjxfVHAsIF9McD4oc3RhdGljX2Nhc3Q8X1RwKj4oX19yLmdldCgpKSkKKyAgICogIHdpbGwgZXZlbnR1YWxseSByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW91ciwKKyAgICogIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBzYW1lIG9iamVjdCB0d2ljZS4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgX0xvY2tfcG9saWN5IF9McD4KKyAgICBpbmxpbmUgX19zaGFyZWRfcHRyPF9UcCwgX0xwPgorICAgIHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKyAgICB7IHJldHVybiBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+KF9fciwgX19zdGF0aWNfY2FzdF90YWcoKSk7IH0KKworICAvKiAgVGhlIHNlZW1pbmdseSBlcXVpdmFsZW50CisgICAqICAgICAgICAgICBzaGFyZWRfcHRyPF9UcCwgX0xwPihjb25zdF9jYXN0PF9UcCo+KF9fci5nZXQoKSkpCisgICAqICB3aWxsIGV2ZW50dWFsbHkgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvdXIsCisgICAqICBhdHRlbXB0aW5nIHRvIGRlbGV0ZSB0aGUgc2FtZSBvYmplY3QgdHdpY2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgaW5saW5lIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICBjb25zdF9wb2ludGVyX2Nhc3QoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKyAgICB7IHJldHVybiBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+KF9fciwgX19jb25zdF9jYXN0X3RhZygpKTsgfQorCisgIC8qICBUaGUgc2VlbWluZ2x5IGVxdWl2YWxlbnQKKyAgICogICAgICAgICAgIHNoYXJlZF9wdHI8X1RwLCBfTHA+KGR5bmFtaWNfY2FzdDxfVHAqPihfX3IuZ2V0KCkpKQorICAgKiAgd2lsbCBldmVudHVhbGx5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3VyLAorICAgKiAgYXR0ZW1wdGluZyB0byBkZWxldGUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgZHluYW1pY19wb2ludGVyX2Nhc3QoY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikKKyAgICB7IHJldHVybiBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+KF9fciwgX19keW5hbWljX2Nhc3RfdGFnKCkpOyB9CisKKyAgLy8gMi4yLjMuNyBzaGFyZWRfcHRyIEkvTworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2gsIHR5cGVuYW1lIF9UciwgdHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIHN0ZDo6YmFzaWNfb3N0cmVhbTxfQ2gsIF9Ucj4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoLCBfVHI+JiBfX29zLCAKKwkgICAgICAgY29uc3QgX19zaGFyZWRfcHRyPF9UcCwgX0xwPiYgX19wKQorICAgIHsKKyAgICAgIF9fb3MgPDwgX19wLmdldCgpOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIC8vIDIuMi4zLjEwIHNoYXJlZF9wdHIgZ2V0X2RlbGV0ZXIgKGV4cGVyaW1lbnRhbCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0RlbCwgdHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSBfRGVsKgorICAgIGdldF9kZWxldGVyKGNvbnN0IF9fc2hhcmVkX3B0cjxfVHAsIF9McD4mIF9fcCkKKyAgICB7CisjaWZkZWYgX19HWFhfUlRUSQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9EZWwqPihfX3AuX01fZ2V0X2RlbGV0ZXIodHlwZWlkKF9EZWwpKSk7CisjZWxzZQorICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICB9CisKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9Mb2NrX3BvbGljeSBfTHA+CisgICAgY2xhc3MgX193ZWFrX3B0cgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CisgICAgICAKKyAgICAgIF9fd2Vha19wdHIoKQorICAgICAgOiBfTV9wdHIoMCksIF9NX3JlZmNvdW50KCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IH0KKworICAgICAgLy8gR2VuZXJhdGVkIGNvcHkgY29uc3RydWN0b3IsIGFzc2lnbm1lbnQsIGRlc3RydWN0b3IgYXJlIGZpbmUuCisgICAgICAKKyAgICAgIC8vIFRoZSAib2J2aW91cyIgY29udmVydGluZyBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbjoKKyAgICAgIC8vCisgICAgICAvLyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgIC8vICAgIF9fd2Vha19wdHIoY29uc3QgX193ZWFrX3B0cjxfVHAxLCBfTHA+JiBfX3IpCisgICAgICAvLyAgICA6IF9NX3B0cihfX3IuX01fcHRyKSwgX01fcmVmY291bnQoX19yLl9NX3JlZmNvdW50KSAvLyBuZXZlciB0aHJvd3MKKyAgICAgIC8vICAgIHsgfQorICAgICAgLy8KKyAgICAgIC8vIGhhcyBhIHNlcmlvdXMgcHJvYmxlbS4KKyAgICAgIC8vCisgICAgICAvLyAgX19yLl9NX3B0ciBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gaW52YWxpZGF0ZWQuIFRoZSBfTV9wdHIoX19yLl9NX3B0cikKKyAgICAgIC8vICBjb252ZXJzaW9uIG1heSByZXF1aXJlIGFjY2VzcyB0byAqX19yLl9NX3B0ciAodmlydHVhbCBpbmhlcml0YW5jZSkuCisgICAgICAvLworICAgICAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGF2b2lkIHNwdXJpb3VzIGFjY2VzcyB2aW9sYXRpb25zIHNpbmNlCisgICAgICAvLyBpbiBtdWx0aXRocmVhZGVkIHByb2dyYW1zIF9fci5fTV9wdHIgbWF5IGJlIGludmFsaWRhdGVkIGF0IGFueSBwb2ludC4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIF9fd2Vha19wdHIoY29uc3QgX193ZWFrX3B0cjxfVHAxLCBfTHA+JiBfX3IpCisJOiBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpIC8vIG5ldmVyIHRocm93cworICAgICAgICB7CisJICBfX2dsaWJjeHhfZnVuY3Rpb25fcmVxdWlyZXMoX0NvbnZlcnRpYmxlQ29uY2VwdDxfVHAxKiwgX1RwKj4pCisJICBfTV9wdHIgPSBfX3IubG9jaygpLmdldCgpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgX193ZWFrX3B0cihjb25zdCBfX3NoYXJlZF9wdHI8X1RwMSwgX0xwPiYgX19yKQorCTogX01fcHRyKF9fci5fTV9wdHIpLCBfTV9yZWZjb3VudChfX3IuX01fcmVmY291bnQpIC8vIG5ldmVyIHRocm93cworICAgICAgICB7IF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQ29udmVydGlibGVDb25jZXB0PF9UcDEqLCBfVHAqPikgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBfX3dlYWtfcHRyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX193ZWFrX3B0cjxfVHAxLCBfTHA+JiBfX3IpIC8vIG5ldmVyIHRocm93cworICAgICAgICB7CisJICBfTV9wdHIgPSBfX3IubG9jaygpLmdldCgpOworCSAgX01fcmVmY291bnQgPSBfX3IuX01fcmVmY291bnQ7CisJICByZXR1cm4gKnRoaXM7CisJfQorICAgICAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBfX3dlYWtfcHRyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX19zaGFyZWRfcHRyPF9UcDEsIF9McD4mIF9fcikgLy8gbmV2ZXIgdGhyb3dzCisgICAgICAgIHsKKwkgIF9NX3B0ciA9IF9fci5fTV9wdHI7CisJICBfTV9yZWZjb3VudCA9IF9fci5fTV9yZWZjb3VudDsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4KKyAgICAgIGxvY2soKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsKKyNpZmRlZiBfX0dUSFJFQURTCisJLy8gT3B0aW1pemF0aW9uOiBhdm9pZCB0aHJvdyBvdmVyaGVhZC4KKwlpZiAoZXhwaXJlZCgpKQorCSAgcmV0dXJuIF9fc2hhcmVkX3B0cjxlbGVtZW50X3R5cGUsIF9McD4oKTsKKworCV9fdHJ5CisJICB7CisJICAgIHJldHVybiBfX3NoYXJlZF9wdHI8ZWxlbWVudF90eXBlLCBfTHA+KCp0aGlzKTsKKwkgIH0KKwlfX2NhdGNoKGNvbnN0IGJhZF93ZWFrX3B0ciYpCisJICB7CisJICAgIC8vIFE6IEhvdyBjYW4gd2UgZ2V0IGhlcmU/CisJICAgIC8vIEE6IEFub3RoZXIgdGhyZWFkIG1heSBoYXZlIGludmFsaWRhdGVkIHIgYWZ0ZXIgdGhlCisJICAgIC8vICAgIHVzZV9jb3VudCB0ZXN0IGFib3ZlLgorCSAgICByZXR1cm4gX19zaGFyZWRfcHRyPGVsZW1lbnRfdHlwZSwgX0xwPigpOworCSAgfQorCQorI2Vsc2UKKwkvLyBPcHRpbWl6YXRpb246IGF2b2lkIHRyeS9jYXRjaCBvdmVyaGVhZCB3aGVuIHNpbmdsZSB0aHJlYWRlZC4KKwlyZXR1cm4gZXhwaXJlZCgpID8gX19zaGFyZWRfcHRyPGVsZW1lbnRfdHlwZSwgX0xwPigpCisJICAgICAgICAgICAgICAgICA6IF9fc2hhcmVkX3B0cjxlbGVtZW50X3R5cGUsIF9McD4oKnRoaXMpOworCisjZW5kaWYKKyAgICAgIH0gLy8gWFhYIE1UCisKKyAgICAgIGxvbmcKKyAgICAgIHVzZV9jb3VudCgpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeyByZXR1cm4gX01fcmVmY291bnQuX01fZ2V0X3VzZV9jb3VudCgpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGV4cGlyZWQoKSBjb25zdCAvLyBuZXZlciB0aHJvd3MKKyAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50Ll9NX2dldF91c2VfY291bnQoKSA9PSAwOyB9CisgICAgICAKKyAgICAgIHZvaWQKKyAgICAgIHJlc2V0KCkgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7IF9fd2Vha19wdHIoKS5zd2FwKCp0aGlzKTsgfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKF9fd2Vha19wdHImIF9fcykgLy8gbmV2ZXIgdGhyb3dzCisgICAgICB7CisJc3RkOjpzd2FwKF9NX3B0ciwgX19zLl9NX3B0cik7CisJX01fcmVmY291bnQuX01fc3dhcChfX3MuX01fcmVmY291bnQpOworICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIC8vIFVzZWQgYnkgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcy4KKyAgICAgIHZvaWQKKyAgICAgIF9NX2Fzc2lnbihfVHAqIF9fcHRyLCBjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX3JlZmNvdW50KQorICAgICAgeworCV9NX3B0ciA9IF9fcHRyOworCV9NX3JlZmNvdW50ID0gX19yZWZjb3VudDsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgYm9vbAorICAgICAgICBfTV9sZXNzKGNvbnN0IF9fd2Vha19wdHI8X1RwMSwgX0xwPiYgX19yaHMpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIF9NX3JlZmNvdW50IDwgX19yaHMuX01fcmVmY291bnQ7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgX0xvY2tfcG9saWN5IF9McDE+IGZyaWVuZCBjbGFzcyBfX3NoYXJlZF9wdHI7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCBfTG9ja19wb2xpY3kgX0xwMT4gZnJpZW5kIGNsYXNzIF9fd2Vha19wdHI7CisgICAgICBmcmllbmQgY2xhc3MgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpczxfVHAsIF9McD47CisgICAgICBmcmllbmQgY2xhc3MgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8X1RwPjsKKworICAgICAgLy8gRnJpZW5kIGluamVjdGVkIGludG8gbmFtZXNwYWNlIGFuZCBmb3VuZCBieSBBREwuCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBmcmllbmQgaW5saW5lIGJvb2wKKyAgICAgICAgb3BlcmF0b3I8KGNvbnN0IF9fd2Vha19wdHImIF9fbGhzLCBjb25zdCBfX3dlYWtfcHRyPF9UcDEsIF9McD4mIF9fcmhzKQorICAgICAgICB7IHJldHVybiBfX2xocy5fTV9sZXNzKF9fcmhzKTsgfQorCisgICAgICBfVHAqICAgICAgIAkgX01fcHRyOyAgICAgICAgIC8vIENvbnRhaW5lZCBwb2ludGVyLgorICAgICAgX193ZWFrX2NvdW50PF9McD4gIF9NX3JlZmNvdW50OyAgICAvLyBSZWZlcmVuY2UgY291bnRlci4KKyAgICB9OworCisgIC8vIDIuMi40Ljcgd2Vha19wdHIgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtcy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3dlYWtfcHRyPF9UcCwgX0xwPiYgX19hLCBfX3dlYWtfcHRyPF9UcCwgX0xwPiYgX19iKQorICAgIHsgX19hLnN3YXAoX19iKTsgfQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfTG9ja19wb2xpY3kgX0xwPgorICAgIGNsYXNzIF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcygpIHsgfQorICAgICAgCisgICAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzKGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmKSB7IH0KKyAgICAgIAorICAgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpcyYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzJikKKyAgICAgIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICAgIH5fX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgeyB9CisgICAgICAKKyAgICBwdWJsaWM6CisgICAgICBfX3NoYXJlZF9wdHI8X1RwLCBfTHA+CisgICAgICBzaGFyZWRfZnJvbV90aGlzKCkKKyAgICAgIHsgcmV0dXJuIF9fc2hhcmVkX3B0cjxfVHAsIF9McD4odGhpcy0+X01fd2Vha190aGlzKTsgfQorCisgICAgICBfX3NoYXJlZF9wdHI8Y29uc3QgX1RwLCBfTHA+CisgICAgICBzaGFyZWRfZnJvbV90aGlzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIF9fc2hhcmVkX3B0cjxjb25zdCBfVHAsIF9McD4odGhpcy0+X01fd2Vha190aGlzKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHZvaWQKKyAgICAgICAgX01fd2Vha19hc3NpZ24oX1RwMSogX19wLCBjb25zdCBfX3NoYXJlZF9jb3VudDxfTHA+JiBfX24pIGNvbnN0CisgICAgICAgIHsgX01fd2Vha190aGlzLl9NX2Fzc2lnbihfX3AsIF9fbik7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgZnJpZW5kIHZvaWQKKyAgICAgICAgX19lbmFibGVfc2hhcmVkX2Zyb21fdGhpc19oZWxwZXIoY29uc3QgX19zaGFyZWRfY291bnQ8X0xwPiYgX19wbiwKKwkJCQkJIGNvbnN0IF9fZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMqIF9fcGUsCisJCQkJCSBjb25zdCBfVHAxKiBfX3B4KQorICAgICAgICB7CisJICBpZiAoX19wZSAhPSAwKQorCSAgICBfX3BlLT5fTV93ZWFrX2Fzc2lnbihjb25zdF9jYXN0PF9UcDEqPihfX3B4KSwgX19wbik7CisJfQorCisgICAgICBtdXRhYmxlIF9fd2Vha19wdHI8X1RwLCBfTHA+ICBfTV93ZWFrX3RoaXM7CisgICAgfTsKKworCisgIC8vIFRoZSBhY3R1YWwgc2hhcmVkX3B0ciwgd2l0aCBmb3J3YXJkaW5nIGNvbnN0cnVjdG9ycyBhbmQKKyAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBzaGFyZWRfcHRyCisgICAgOiBwdWJsaWMgX19zaGFyZWRfcHRyPF9UcD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgc2hhcmVkX3B0cigpCisgICAgICA6IF9fc2hhcmVkX3B0cjxfVHA+KCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIHNoYXJlZF9wdHIoX1RwMSogX19wKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19wKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX0RlbGV0ZXI+CisgICAgICAgIHNoYXJlZF9wdHIoX1RwMSogX19wLCBfRGVsZXRlciBfX2QpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3AsIF9fZCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHNoYXJlZF9wdHIoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgc2hhcmVkX3B0cihjb25zdCB3ZWFrX3B0cjxfVHAxPiYgX19yKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yKSB7IH0KKworI2lmIChfX2NwbHVzcGx1cyA8IDIwMTEwM0wpIHx8IF9HTElCQ1hYX1VTRV9ERVBSRUNBVEVECisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBleHBsaWNpdAorICAgICAgICBzaGFyZWRfcHRyKHN0ZDo6YXV0b19wdHI8X1RwMT4mIF9fcikKKwk6IF9fc2hhcmVkX3B0cjxfVHA+KF9fcikgeyB9CisjZW5kaWYKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc2hhcmVkX3B0cihjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IsIF9fc3RhdGljX2Nhc3RfdGFnKQorCTogX19zaGFyZWRfcHRyPF9UcD4oX19yLCBfX3N0YXRpY19jYXN0X3RhZygpKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc2hhcmVkX3B0cihjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IsIF9fY29uc3RfY2FzdF90YWcpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3IsIF9fY29uc3RfY2FzdF90YWcoKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHNoYXJlZF9wdHIoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yLCBfX2R5bmFtaWNfY2FzdF90YWcpCisJOiBfX3NoYXJlZF9wdHI8X1RwPihfX3IsIF9fZHluYW1pY19jYXN0X3RhZygpKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc2hhcmVkX3B0ciYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikgLy8gbmV2ZXIgdGhyb3dzCisgICAgICAgIHsKKwkgIHRoaXMtPl9fc2hhcmVkX3B0cjxfVHA+OjpvcGVyYXRvcj0oX19yKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyNpZiAoX19jcGx1c3BsdXMgPCAyMDExMDNMKSB8fCBfR0xJQkNYWF9VU0VfREVQUkVDQVRFRAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgc2hhcmVkX3B0ciYKKyAgICAgICAgb3BlcmF0b3I9KHN0ZDo6YXV0b19wdHI8X1RwMT4mIF9fcikKKyAgICAgICAgeworCSAgdGhpcy0+X19zaGFyZWRfcHRyPF9UcD46Om9wZXJhdG9yPShfX3IpOworCSAgcmV0dXJuICp0aGlzOworCX0KKyNlbmRpZgorICAgIH07CisKKyAgLy8gMi4yLjMuOCBzaGFyZWRfcHRyIHNwZWNpYWxpemVkIGFsZ29yaXRobXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX19zaGFyZWRfcHRyPF9UcD4mIF9fYSwgX19zaGFyZWRfcHRyPF9UcD4mIF9fYikKKyAgICB7IF9fYS5zd2FwKF9fYik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+CisgICAgaW5saW5lIHNoYXJlZF9wdHI8X1RwPgorICAgIHN0YXRpY19wb2ludGVyX2Nhc3QoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKQorICAgIHsgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPihfX3IsIF9fc3RhdGljX2Nhc3RfdGFnKCkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxPgorICAgIGlubGluZSBzaGFyZWRfcHRyPF9UcD4KKyAgICBjb25zdF9wb2ludGVyX2Nhc3QoY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKQorICAgIHsgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPihfX3IsIF9fY29uc3RfY2FzdF90YWcoKSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDE+CisgICAgaW5saW5lIHNoYXJlZF9wdHI8X1RwPgorICAgIGR5bmFtaWNfcG9pbnRlcl9jYXN0KGNvbnN0IHNoYXJlZF9wdHI8X1RwMT4mIF9fcikKKyAgICB7IHJldHVybiBzaGFyZWRfcHRyPF9UcD4oX19yLCBfX2R5bmFtaWNfY2FzdF90YWcoKSk7IH0KKworCisgIC8vIFRoZSBhY3R1YWwgd2Vha19wdHIsIHdpdGggZm9yd2FyZGluZyBjb25zdHJ1Y3RvcnMgYW5kCisgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3Mgd2Vha19wdHIKKyAgICA6IHB1YmxpYyBfX3dlYWtfcHRyPF9UcD4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgd2Vha19wdHIoKQorICAgICAgOiBfX3dlYWtfcHRyPF9UcD4oKSB7IH0KKyAgICAgIAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgd2Vha19wdHIoY29uc3Qgd2Vha19wdHI8X1RwMT4mIF9fcikKKwk6IF9fd2Vha19wdHI8X1RwPihfX3IpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICB3ZWFrX3B0cihjb25zdCBzaGFyZWRfcHRyPF9UcDE+JiBfX3IpCisJOiBfX3dlYWtfcHRyPF9UcD4oX19yKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgd2Vha19wdHImCisgICAgICAgIG9wZXJhdG9yPShjb25zdCB3ZWFrX3B0cjxfVHAxPiYgX19yKSAvLyBuZXZlciB0aHJvd3MKKyAgICAgICAgeworCSAgdGhpcy0+X193ZWFrX3B0cjxfVHA+OjpvcGVyYXRvcj0oX19yKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CisgICAgICAgIHdlYWtfcHRyJgorICAgICAgICBvcGVyYXRvcj0oY29uc3Qgc2hhcmVkX3B0cjxfVHAxPiYgX19yKSAvLyBuZXZlciB0aHJvd3MKKyAgICAgICAgeworCSAgdGhpcy0+X193ZWFrX3B0cjxfVHA+OjpvcGVyYXRvcj0oX19yKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHNoYXJlZF9wdHI8X1RwPgorICAgICAgbG9jaygpIGNvbnN0IC8vIG5ldmVyIHRocm93cworICAgICAgeworI2lmZGVmIF9fR1RIUkVBRFMKKwlpZiAodGhpcy0+ZXhwaXJlZCgpKQorCSAgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPigpOworCisJX190cnkKKwkgIHsKKwkgICAgcmV0dXJuIHNoYXJlZF9wdHI8X1RwPigqdGhpcyk7CisJICB9CisJX19jYXRjaChjb25zdCBiYWRfd2Vha19wdHImKQorCSAgeworCSAgICByZXR1cm4gc2hhcmVkX3B0cjxfVHA+KCk7CisJICB9CisjZWxzZQorCXJldHVybiB0aGlzLT5leHBpcmVkKCkgPyBzaGFyZWRfcHRyPF9UcD4oKQorCSAgICAgICAgICAgICAgICAgICAgICAgOiBzaGFyZWRfcHRyPF9UcD4oKnRoaXMpOworI2VuZGlmCisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMKKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoKSB7IH0KKyAgICAgIAorICAgICAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMoY29uc3QgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmKSB7IH0KKworICAgICAgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMmKQorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKworICAgICAgfmVuYWJsZV9zaGFyZWRfZnJvbV90aGlzKCkgeyB9CisKKyAgICBwdWJsaWM6CisgICAgICBzaGFyZWRfcHRyPF9UcD4KKyAgICAgIHNoYXJlZF9mcm9tX3RoaXMoKQorICAgICAgeyByZXR1cm4gc2hhcmVkX3B0cjxfVHA+KHRoaXMtPl9NX3dlYWtfdGhpcyk7IH0KKworICAgICAgc2hhcmVkX3B0cjxjb25zdCBfVHA+CisgICAgICBzaGFyZWRfZnJvbV90aGlzKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHNoYXJlZF9wdHI8Y29uc3QgX1RwPih0aGlzLT5fTV93ZWFrX3RoaXMpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KKyAgICAgICAgdm9pZAorICAgICAgICBfTV93ZWFrX2Fzc2lnbihfVHAxKiBfX3AsIGNvbnN0IF9fc2hhcmVkX2NvdW50PD4mIF9fbikgY29uc3QKKyAgICAgICAgeyBfTV93ZWFrX3RoaXMuX01fYXNzaWduKF9fcCwgX19uKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgorICAgICAgICBmcmllbmQgdm9pZAorICAgICAgICBfX2VuYWJsZV9zaGFyZWRfZnJvbV90aGlzX2hlbHBlcihjb25zdCBfX3NoYXJlZF9jb3VudDw+JiBfX3BuLAorCQkJCQkgY29uc3QgZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXMqIF9fcGUsCisJCQkJCSBjb25zdCBfVHAxKiBfX3B4KQorICAgICAgICB7CisJICBpZiAoX19wZSAhPSAwKQorCSAgICBfX3BlLT5fTV93ZWFrX2Fzc2lnbihjb25zdF9jYXN0PF9UcDEqPihfX3B4KSwgX19wbik7CisJfQorCisgICAgICBtdXRhYmxlIHdlYWtfcHRyPF9UcD4gIF9NX3dlYWtfdGhpczsKKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30KK30KKworI2VuZGlmIC8vIF9UUjFfU0hBUkVEX1BUUl9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9zcGVjaWFsX2Z1bmN0aW9uX3V0aWwuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3NwZWNpYWxfZnVuY3Rpb25fdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZWMwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9zcGVjaWFsX2Z1bmN0aW9uX3V0aWwuaApAQCAtMCwwICsxLDEzNSBAQAorLy8gU3BlY2lhbCBmdW5jdGlvbnMgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9zcGVjaWFsX2Z1bmN0aW9uX3V0aWwuaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le3RyMS9jbWF0aH0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MiBUUjE6IDUuMiAgU3BlY2lhbCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgRWR3YXJkIFNtaXRoLVJvd2xhbmQgYmFzZWQgb24gbnVtZXJvdXMgbWF0aGVtYXRpY3MgYm9va3MuCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1NQRUNJQUxfRlVOQ1RJT05fVVRJTF9ICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9TUEVDSUFMX0ZVTkNUSU9OX1VUSUxfSCAxCisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworICBuYW1lc3BhY2UgX19kZXRhaWwKKyAgeworICBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgICAgLy8vIEEgY2xhc3MgdG8gZW5jYXBzdWxhdGUgdHlwZSBkZXBlbmRlbnQgZmxvYXRpbmcgcG9pbnQKKyAgICAvLy8gY29uc3RhbnRzLiAgTm90IGV2ZXJ5dGhpbmcgd2lsbCBiZSBhYmxlIHRvIGJlIGV4cHJlc3NlZCBhcworICAgIC8vLyB0eXBlIGxvZ2ljLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19mbG9hdGluZ19wb2ludF9jb25zdGFudAorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAgX192YWx1ZTsKKyAgICB9OworCisKKyAgICAvLy8gQSBzdHJ1Y3R1cmUgZm9yIG51bWVyaWMgY29uc3RhbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIHN0cnVjdCBfX251bWVyaWNfY29uc3RhbnRzCisgICAgICB7CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIFxwaSBAZiQuCisgICAgICAgIHN0YXRpYyBfVHAgX19waSgpIHRocm93KCkKKyAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjlMKTsgfQorICAgICAgICAvLy8gIENvbnN0YW50IEBmJCBccGkgLyAyIEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfX3BpXzIoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMS41NzA3OTYzMjY3OTQ4OTY2MTkyMzEzMjE2OTE2Mzk3NTE0TCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBAZiQgXHBpIC8gMyBAZiQuCisgICAgICAgIHN0YXRpYyBfVHAgX19waV8zKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDEuMDQ3MTk3NTUxMTk2NTk3NzQ2MTU0MjE0NDYxMDkzMTY3NkwpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIFxwaSAvIDQgQGYkLgorICAgICAgICBzdGF0aWMgX1RwIF9fcGlfNCgpIHRocm93KCkKKyAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwLjc4NTM5ODE2MzM5NzQ0ODMwOTYxNTY2MDg0NTgxOTg3NTdMKTsgfQorICAgICAgICAvLy8gIENvbnN0YW50IEBmJCAxIC8gXHBpIEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfXzFfcGkoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMC4zMTgzMDk4ODYxODM3OTA2NzE1Mzc3Njc1MjY3NDUwMjg3TCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBAZiQgMiAvIFxzcXJ0KFxwaSkgQGYkLgorICAgICAgICBzdGF0aWMgX1RwIF9fMl9zcXJ0cGkoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMS4xMjgzNzkxNjcwOTU1MTI1NzM4OTYxNTg5MDMxMjE1NDUyTCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBAZiQgXHNxcnQoMikgQGYkLgorICAgICAgICBzdGF0aWMgX1RwIF9fc3FydDIoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQyMDk2OTgxTCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBAZiQgXHNxcnQoMykgQGYkLgorICAgICAgICBzdGF0aWMgX1RwIF9fc3FydDMoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMS43MzIwNTA4MDc1Njg4NzcyOTM1Mjc0NDYzNDE1MDU4NzIzTCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBAZiQgXHNxcnQoXHBpLzIpIEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfX3NxcnRwaW8yKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDEuMjUzMzE0MTM3MzE1NTAwMjUxMjA3ODgyNjQyNDA1NTIyNkwpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgQGYkIDEgLyBzcXJ0KDIpIEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfX3NxcnQxXzIoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQzNjIxMDQ4NDkwTCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBAZiQgXGxvZyhccGkpIEBmJC4KKyAgICAgICAgc3RhdGljIF9UcCBfX2xucGkoKSB0aHJvdygpCisgICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMS4xNDQ3Mjk4ODU4NDk0MDAxNzQxNDM0MjczNTEzNTMwNTg3TCk7IH0KKyAgICAgICAgLy8vICBDb25zdGFudCBFdWxlcidzIGNvbnN0YW50IEBmJCBcZ2FtbWFfRSBAZiQuCisgICAgICAgIHN0YXRpYyBfVHAgX19nYW1tYV9lKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDAuNTc3MjE1NjY0OTAxNTMyODYwNjA2NTEyMDkwMDgyNDAyNEwpOyB9CisgICAgICAgIC8vLyAgQ29uc3RhbnQgRXVsZXItTWFzY2hlcm9uaSBAZiQgZSBAZiQKKyAgICAgICAgc3RhdGljIF9UcCBfX2V1bGVyKCkgdGhyb3coKQorICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyNUwpOyB9CisgICAgICB9OworCisKKyNpZiBfR0xJQkNYWF9VU0VfQzk5X01BVEggJiYgIV9HTElCQ1hYX1VTRV9DOTlfRlBfTUFDUk9TX0RZTkFNSUMKKworICAgIC8vLyBUaGlzIGlzIGEgd3JhcHBlciBmb3IgdGhlIGlzbmFuIGZ1bmN0aW9uLiBPdGhlcndpc2UsIGZvciBOYU4sCisgICAgLy8vIGFsbCBjb21wYXJpc29ucyByZXN1bHQgaW4gZmFsc2UuIElmL3doZW4gd2UgYnVpbGQgYSBzdGQ6OmlzbmFuCisgICAgLy8vIG91dCBvZiBpbnRyaW5zaWNzLCB0aGlzIHdpbGwgZGlzYXBwZWFyIGNvbXBsZXRlbHkgaW4gZmF2b3Igb2YKKyAgICAvLy8gc3RkOjppc25hbi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGJvb2wgX19pc25hbihfVHAgX194KQorICAgIHsgcmV0dXJuIHN0ZDo6aXNuYW4oX194KTsgfQorCisjZWxzZQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBib29sIF9faXNuYW4oY29uc3QgX1RwIF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5faXNuYW4oX194KTsgfQorCisgICAgdGVtcGxhdGU8PgorICAgIGlubGluZSBib29sIF9faXNuYW48ZmxvYXQ+KGZsb2F0IF9feCkKKyAgICB7IHJldHVybiBfX2J1aWx0aW5faXNuYW5mKF9feCk7IH0KKworICAgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgYm9vbCBfX2lzbmFuPGxvbmcgZG91YmxlPihsb25nIGRvdWJsZSBfX3gpCisgICAgeyByZXR1cm4gX19idWlsdGluX2lzbmFubChfX3gpOyB9CisKKyNlbmRpZgorCisgIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICB9IC8vIG5hbWVzcGFjZSBfX2RldGFpbAorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1NQRUNJQUxfRlVOQ1RJT05fVVRJTF9ICisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3N0ZGFyZy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvc3RkYXJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczOTZjZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3N0ZGFyZy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBzdGRhcmcuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3N0ZGFyZy5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX1RSMV9TVERBUkdfSAorI2RlZmluZSBfVFIxX1NUREFSR19IIDEKKworI2luY2x1ZGUgPHRyMS9jc3RkYXJnPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3N0ZGJvb2wuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3N0ZGJvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjEyZjUxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvc3RkYm9vbC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSBzdGRib29sLmggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9zdGRib29sLmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfVFIxX1NUREJPT0xfSAorI2RlZmluZSBfVFIxX1NUREJPT0xfSCAxCisKKyNpbmNsdWRlIDx0cjEvY3N0ZGJvb2w+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvc3RkaW50LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS9zdGRpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDllMWRkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvc3RkaW50LmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIHN0ZGludC5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvc3RkaW50LmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfVFIxX1NURElOVF9ICisjZGVmaW5lIF9UUjFfU1RESU5UX0ggMQorCisjaW5jbHVkZSA8dHIxL2NzdGRpbnQ+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvc3RkaW8uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3N0ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1ZTA3OQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3N0ZGlvLmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIHN0ZGlvLmggLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS9zdGRpby5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX1RSMV9TVERJT19ICisjZGVmaW5lIF9UUjFfU1RESU9fSCAxCisKKyNpbmNsdWRlIDx0cjEvY3N0ZGlvPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3N0ZGxpYi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvc3RkbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3MGMyNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3N0ZGxpYi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8vIFRSMSBzdGRsaWIuaCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3N0ZGxpYi5oCisgKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuIAorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1NURExJQl9ICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9TVERMSUJfSCAxCisKKyNpbmNsdWRlIDx0cjEvY3N0ZGxpYj4KKworI2lmIF9HTElCQ1hYX0hPU1RFRAorCisjaWYgX0dMSUJDWFhfVVNFX0M5OQorCit1c2luZyBzdGQ6OnRyMTo6YXRvbGw7Cit1c2luZyBzdGQ6OnRyMTo6c3RydG9sbDsKK3VzaW5nIHN0ZDo6dHIxOjpzdHJ0b3VsbDsKKwordXNpbmcgc3RkOjp0cjE6OmFiczsKKyNpZiAhX0dMSUJDWFhfVVNFX0M5OV9MT05HX0xPTkdfRFlOQU1JQwordXNpbmcgc3RkOjp0cjE6OmRpdjsKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfU1RETElCX0gKKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvdGdtYXRoLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS90Z21hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM5YmQwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvdGdtYXRoLmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIHRnbWF0aC5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvdGdtYXRoLmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfVEdNQVRIX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1RHTUFUSF9IIDEKKworI2luY2x1ZGUgPHRyMS9jdGdtYXRoPgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1RHTUFUSF9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS90dXBsZSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3R1cGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmN2NjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS90dXBsZQpAQCAtMCwwICsxLDQyNiBAQAorLy8gY2xhc3MgdGVtcGxhdGUgdHVwbGUgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS90dXBsZQorKiAgVGhpcyBpcyBhIFRSMSBDKysgTGlicmFyeSBoZWFkZXIuCisqLworCisvLyBDaHJpcyBKZWZmZXJzb24gPGNocmlzQGJ1YmJsZXNjb3BlLm5ldD4KKy8vIFZhcmlhZGljIFRlbXBsYXRlcyBzdXBwb3J0IGJ5IERvdWdsYXMgR3JlZ29yIDxkb3VnLmdyZWdvckBnbWFpbC5jb20+CisKKyNpZm5kZWYgX0dMSUJDWFhfVFIxX1RVUExFCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9UVVBMRSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBBZGRzIGEgY29uc3QgcmVmZXJlbmNlIHRvIGEgbm9uLXJlZmVyZW5jZSB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX2NfcmVmCisgICAgeyB0eXBlZGVmIGNvbnN0IF9UcCYgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX2NfcmVmPF9UcCY+CisgICAgeyB0eXBlZGVmIF9UcCYgdHlwZTsgfTsKKworICAvLyBBZGRzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLXJlZmVyZW5jZSB0eXBlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX3JlZgorICAgIHsgdHlwZWRlZiBfVHAmIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9yZWY8X1RwJj4KKyAgICB7IHR5cGVkZWYgX1RwJiB0eXBlOyB9OworCisgIC8qKgorICAgKiBDb250YWlucyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBAYyB0dXBsZSB0ZW1wbGF0ZSwgc3RvcmVkCisgICAqIGFzIGEgcmVjdXJzaXZlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBmcm9tIHRoZSBmaXJzdCBlbGVtZW50IChtb3N0CisgICAqIGRlcml2ZWQgY2xhc3MpIHRvIHRoZSBsYXN0IChsZWFzdCBkZXJpdmVkIGNsYXNzKS4gVGhlIEBjIElkeAorICAgKiBwYXJhbWV0ZXIgZ2l2ZXMgdGhlIDAtYmFzZWQgaW5kZXggb2YgdGhlIGVsZW1lbnQgc3RvcmVkIGF0IHRoaXMKKyAgICogcG9pbnQgaW4gdGhlIGhpZXJhcmNoeTsgd2UgdXNlIGl0IHRvIGltcGxlbWVudCBhIGNvbnN0YW50LXRpbWUKKyAgICogZ2V0KCkgb3BlcmF0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8aW50IF9JZHgsIHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBzdHJ1Y3QgX1R1cGxlX2ltcGw7IAorCisgIC8qKgorICAgKiBaZXJvLWVsZW1lbnQgdHVwbGUgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgdGhlIGJhc2lzIGNhc2UgZm9yIHRoZSAKKyAgICogaW5oZXJpdGFuY2UgcmVjdXJzaW9uLgorICAgKi8KKyAgdGVtcGxhdGU8aW50IF9JZHg+CisgICAgc3RydWN0IF9UdXBsZV9pbXBsPF9JZHg+IHsgfTsKKworICAvKioKKyAgICogUmVjdXJzaXZlIHR1cGxlIGltcGxlbWVudGF0aW9uLiBIZXJlIHdlIHN0b3JlIHRoZSBAYyBIZWFkIGVsZW1lbnQKKyAgICogYW5kIGRlcml2ZSBmcm9tIGEgQGMgVHVwbGVfaW1wbCBjb250YWluaW5nIHRoZSByZW1haW5pbmcgZWxlbWVudHMKKyAgICogKHdoaWNoIGNvbnRhaW5zIHRoZSBAYyBUYWlsKS4KKyAgICovCisgIHRlbXBsYXRlPGludCBfSWR4LCB0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1RhaWw+CisgICAgc3RydWN0IF9UdXBsZV9pbXBsPF9JZHgsIF9IZWFkLCBfVGFpbC4uLj4KKyAgICA6IHB1YmxpYyBfVHVwbGVfaW1wbDxfSWR4ICsgMSwgX1RhaWwuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfVHVwbGVfaW1wbDxfSWR4ICsgMSwgX1RhaWwuLi4+IF9Jbmhlcml0ZWQ7CisgICAgICAKKyAgICAgIF9IZWFkIF9NX2hlYWQ7CisgICAgICAKKyAgICAgIF9Jbmhlcml0ZWQmICAgICAgIF9NX3RhaWwoKSAgICAgICB7IHJldHVybiAqdGhpczsgfQorICAgICAgY29uc3QgX0luaGVyaXRlZCYgX01fdGFpbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgICAKKyAgICAgIF9UdXBsZV9pbXBsKCkgOiBfSW5oZXJpdGVkKCksIF9NX2hlYWQoKSB7IH0KKyAgICAgIAorICAgICAgZXhwbGljaXQgCisgICAgICBfVHVwbGVfaW1wbCh0eXBlbmFtZSBfX2FkZF9jX3JlZjxfSGVhZD46OnR5cGUgX19oZWFkLAorCQkgIHR5cGVuYW1lIF9fYWRkX2NfcmVmPF9UYWlsPjo6dHlwZS4uLiBfX3RhaWwpCisgICAgICA6IF9Jbmhlcml0ZWQoX190YWlsLi4uKSwgX01faGVhZChfX2hlYWQpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgICAgX1R1cGxlX2ltcGwoY29uc3QgX1R1cGxlX2ltcGw8X0lkeCwgX1VFbGVtZW50cy4uLj4mIF9faW4pCisgICAgICA6IF9Jbmhlcml0ZWQoX19pbi5fTV90YWlsKCkpLCBfTV9oZWFkKF9faW4uX01faGVhZCkgeyB9CisKKyAgICAgIF9UdXBsZV9pbXBsKGNvbnN0IF9UdXBsZV9pbXBsJiBfX2luKQorICAgICAgOiBfSW5oZXJpdGVkKF9faW4uX01fdGFpbCgpKSwgX01faGVhZChfX2luLl9NX2hlYWQpIHsgfQorICAgICAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgICAgIF9UdXBsZV9pbXBsJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX1R1cGxlX2ltcGw8X0lkeCwgX1VFbGVtZW50cy4uLj4mIF9faW4pCisgICAgICAgIHsKKwkgIF9NX2hlYWQgPSBfX2luLl9NX2hlYWQ7CisJICBfTV90YWlsKCkgPSBfX2luLl9NX3RhaWwoKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIF9UdXBsZV9pbXBsJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UdXBsZV9pbXBsJiBfX2luKQorICAgICAgeworCV9NX2hlYWQgPSBfX2luLl9NX2hlYWQ7CisJX01fdGFpbCgpID0gX19pbi5fTV90YWlsKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPiAKKyAgICBjbGFzcyB0dXBsZSA6IHB1YmxpYyBfVHVwbGVfaW1wbDwwLCBfRWxlbWVudHMuLi4+CisgICAgeworICAgICAgdHlwZWRlZiBfVHVwbGVfaW1wbDwwLCBfRWxlbWVudHMuLi4+IF9Jbmhlcml0ZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0dXBsZSgpIDogX0luaGVyaXRlZCgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgdHVwbGUodHlwZW5hbWUgX19hZGRfY19yZWY8X0VsZW1lbnRzPjo6dHlwZS4uLiBfX2VsZW1lbnRzKQorICAgICAgOiBfSW5oZXJpdGVkKF9fZWxlbWVudHMuLi4pIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgICAgICB0dXBsZShjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoX19pbikgeyB9CisKKyAgICAgIHR1cGxlKGNvbnN0IHR1cGxlJiBfX2luKQorICAgICAgOiBfSW5oZXJpdGVkKF9faW4pIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgICAgICB0dXBsZSYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX2luKQorICAgICAgICB7CisJICBzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gX19pbjsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHR1cGxlJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IHR1cGxlJiBfX2luKQorICAgICAgeworCXN0YXRpY19jYXN0PF9Jbmhlcml0ZWQmPigqdGhpcykgPSBfX2luOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKyAgICB9OworCisgIHRlbXBsYXRlPD4gY2xhc3MgdHVwbGU8PiB7IH07CisKKyAgLy8gMi1lbGVtZW50IHR1cGxlLCB3aXRoIGNvbnN0cnVjdGlvbiBhbmQgYXNzaWdubWVudCBmcm9tIGEgcGFpci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgY2xhc3MgdHVwbGU8X1QxLCBfVDI+IDogcHVibGljIF9UdXBsZV9pbXBsPDAsIF9UMSwgX1QyPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1R1cGxlX2ltcGw8MCwgX1QxLCBfVDI+IF9Jbmhlcml0ZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0dXBsZSgpIDogX0luaGVyaXRlZCgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgdHVwbGUodHlwZW5hbWUgX19hZGRfY19yZWY8X1QxPjo6dHlwZSBfX2ExLAorCSAgICB0eXBlbmFtZSBfX2FkZF9jX3JlZjxfVDI+Ojp0eXBlIF9fYTIpCisgICAgICA6IF9Jbmhlcml0ZWQoX19hMSwgX19hMikgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VMSwgdHlwZW5hbWUgX1UyPgorICAgICAgICB0dXBsZShjb25zdCB0dXBsZTxfVTEsIF9VMj4mIF9faW4pCisJOiBfSW5oZXJpdGVkKF9faW4pIHsgfQorCisgICAgICB0dXBsZShjb25zdCB0dXBsZSYgX19pbikKKyAgICAgIDogX0luaGVyaXRlZChfX2luKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisgICAgICAgIHR1cGxlKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX2luKQorCTogX0luaGVyaXRlZChfVHVwbGVfaW1wbDwwLCAKKwkJICAgICB0eXBlbmFtZSBfX2FkZF9jX3JlZjxfVTE+Ojp0eXBlLAorCQkgICAgIHR5cGVuYW1lIF9fYWRkX2NfcmVmPF9VMj46OnR5cGU+KF9faW4uZmlyc3QsIAorCQkJCQkJICAgICAgX19pbi5zZWNvbmQpKQorICAgICAgICB7IH0KKyAgCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPShjb25zdCB0dXBsZTxfVTEsIF9VMj4mIF9faW4pCisgICAgICAgIHsKKwkgIHN0YXRpY19jYXN0PF9Jbmhlcml0ZWQmPigqdGhpcykgPSBfX2luOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdHVwbGUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHVwbGUmIF9faW4pCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IF9faW47CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPShjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19pbikKKyAgICAgICAgeworCSAgdGhpcy0+X01faGVhZCA9IF9faW4uZmlyc3Q7CisJICB0aGlzLT5fTV90YWlsKCkuX01faGVhZCA9IF9faW4uc2Vjb25kOworCSAgcmV0dXJuICp0aGlzOworCX0KKyAgICB9OworCisgIAorICAvLy8gR2l2ZXMgdGhlIHR5cGUgb2YgdGhlIGl0aCBlbGVtZW50IG9mIGEgZ2l2ZW4gdHVwbGUgdHlwZS4KKyAgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50OworCisgIC8qKgorICAgKiBSZWN1cnNpdmUgY2FzZSBmb3IgdHVwbGVfZWxlbWVudDogc3RyaXAgb2ZmIHRoZSBmaXJzdCBlbGVtZW50IGluCisgICAqIHRoZSB0dXBsZSBhbmQgcmV0cmlldmUgdGhlIChpLTEpdGggZWxlbWVudCBvZiB0aGUgcmVtYWluaW5nIHR1cGxlLgorICAgKi8KKyAgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PF9faSwgdHVwbGU8X0hlYWQsIF9UYWlsLi4uPiA+CisgICAgOiB0dXBsZV9lbGVtZW50PF9faSAtIDEsIHR1cGxlPF9UYWlsLi4uPiA+IHsgfTsKKworICAvKioKKyAgICogQmFzaXMgY2FzZSBmb3IgdHVwbGVfZWxlbWVudDogVGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIG9uZSB3ZSdyZSBzZWVraW5nLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PDAsIHR1cGxlPF9IZWFkLCBfVGFpbC4uLj4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0hlYWQgdHlwZTsKKyAgICB9OworCisgIC8vLyBGaW5kcyB0aGUgc2l6ZSBvZiBhIGdpdmVuIHR1cGxlIHR5cGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgdHVwbGVfc2l6ZTsKKworICAvLy8gY2xhc3MgdHVwbGVfc2l6ZQorICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgc3RydWN0IHR1cGxlX3NpemU8dHVwbGU8X0VsZW1lbnRzLi4uPiA+CisgICAgeworICAgICAgc3RhdGljIGNvbnN0IGludCB2YWx1ZSA9IHNpemVvZi4uLihfRWxlbWVudHMpOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIGNvbnN0IGludCB0dXBsZV9zaXplPHR1cGxlPF9FbGVtZW50cy4uLj4gPjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2FkZF9yZWY8X0hlYWQ+Ojp0eXBlCisgICAgX19nZXRfaGVscGVyKF9UdXBsZV9pbXBsPF9faSwgX0hlYWQsIF9UYWlsLi4uPiYgX190KQorICAgIHsKKyAgICAgIHJldHVybiBfX3QuX01faGVhZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2FkZF9jX3JlZjxfSGVhZD46OnR5cGUKKyAgICBfX2dldF9oZWxwZXIoY29uc3QgX1R1cGxlX2ltcGw8X19pLCBfSGVhZCwgX1RhaWwuLi4+JiBfX3QpCisgICAgeworICAgICAgcmV0dXJuIF9fdC5fTV9oZWFkOworICAgIH0KKworICAvLyBSZXR1cm4gYSByZWZlcmVuY2UgKGNvbnN0IHJlZmVyZW5jZSkgdG8gdGhlIGl0aCBlbGVtZW50IG9mIGEgdHVwbGUuCisgIC8vIEFueSBjb25zdCBvciBub24tY29uc3QgcmVmIGVsZW1lbnRzIGFyZSByZXR1cm5lZCB3aXRoIHRoZWlyIG9yaWdpbmFsIHR5cGUuCisgIHRlbXBsYXRlPGludCBfX2ksIHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBpbmxpbmUgdHlwZW5hbWUgX19hZGRfcmVmPAorICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHR1cGxlX2VsZW1lbnQ8X19pLCB0dXBsZTxfRWxlbWVudHMuLi4+ID46OnR5cGUKKyAgICAgICAgICAgICAgICAgICAgPjo6dHlwZQorICAgIGdldCh0dXBsZTxfRWxlbWVudHMuLi4+JiBfX3QpCisgICAgeyAKKyAgICAgIHJldHVybiBfX2dldF9oZWxwZXI8X19pPihfX3QpOyAKKyAgICB9CisKKyAgdGVtcGxhdGU8aW50IF9faSwgdHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIGlubGluZSB0eXBlbmFtZSBfX2FkZF9jX3JlZjwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9faSwgdHVwbGU8X0VsZW1lbnRzLi4uPiA+Ojp0eXBlCisgICAgICAgICAgICAgICAgICAgID46OnR5cGUKKyAgICBnZXQoY29uc3QgdHVwbGU8X0VsZW1lbnRzLi4uPiYgX190KQorICAgIHsKKyAgICAgIHJldHVybiBfX2dldF9oZWxwZXI8X19pPihfX3QpOworICAgIH0KKworICAvLyBUaGlzIGNsYXNzIGhlbHBzIGNvbnN0cnVjdCB0aGUgdmFyaW91cyBjb21wYXJpc29uIG9wZXJhdGlvbnMgb24gdHVwbGVzCisgIHRlbXBsYXRlPGludCBfX2NoZWNrX2VxdWFsX3NpemUsIGludCBfX2ksIGludCBfX2osCisJICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IF9fdHVwbGVfY29tcGFyZTsKKworICB0ZW1wbGF0ZTxpbnQgX19pLCBpbnQgX19qLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBzdHJ1Y3QgX190dXBsZV9jb21wYXJlPDAsIF9faSwgX19qLCBfVHAsIF9VcD4KKyAgICB7CisgICAgICBzdGF0aWMgYm9vbCBfX2VxKGNvbnN0IF9UcCYgX190LCBjb25zdCBfVXAmIF9fdSkKKyAgICAgIHsKKwlyZXR1cm4gKGdldDxfX2k+KF9fdCkgPT0gZ2V0PF9faT4oX191KSAmJgorCQlfX3R1cGxlX2NvbXBhcmU8MCwgX19pKzEsIF9faiwgX1RwLCBfVXA+OjpfX2VxKF9fdCwgX191KSk7CisgICAgICB9CisgICAgIAorICAgICAgc3RhdGljIGJvb2wgX19sZXNzKGNvbnN0IF9UcCYgX190LCBjb25zdCBfVXAmIF9fdSkKKyAgICAgIHsKKwlyZXR1cm4gKChnZXQ8X19pPihfX3QpIDwgZ2V0PF9faT4oX191KSkKKwkJfHwgIShnZXQ8X19pPihfX3UpIDwgZ2V0PF9faT4oX190KSkgJiYKKwkJX190dXBsZV9jb21wYXJlPDAsIF9faSsxLCBfX2osIF9UcCwgX1VwPjo6X19sZXNzKF9fdCwgX191KSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxpbnQgX19pLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBzdHJ1Y3QgX190dXBsZV9jb21wYXJlPDAsIF9faSwgX19pLCBfVHAsIF9VcD4KKyAgICB7CisgICAgICBzdGF0aWMgYm9vbCBfX2VxKGNvbnN0IF9UcCYsIGNvbnN0IF9VcCYpCisgICAgICB7IHJldHVybiB0cnVlOyB9CisgICAgIAorICAgICAgc3RhdGljIGJvb2wgX19sZXNzKGNvbnN0IF9UcCYsIGNvbnN0IF9VcCYpCisgICAgICB7IHJldHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBib29sCisgICAgb3BlcmF0b3I9PShjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCSAgICAgICBjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX191KQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHVwbGU8X1RFbGVtZW50cy4uLj4gX1RwOworICAgICAgdHlwZWRlZiB0dXBsZTxfVUVsZW1lbnRzLi4uPiBfVXA7CisgICAgICByZXR1cm4gKF9fdHVwbGVfY29tcGFyZTx0dXBsZV9zaXplPF9UcD46OnZhbHVlIC0gdHVwbGVfc2l6ZTxfVXA+Ojp2YWx1ZSwKKwkgICAgICAwLCB0dXBsZV9zaXplPF9UcD46OnZhbHVlLCBfVHAsIF9VcD46Ol9fZXEoX190LCBfX3UpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR1cGxlPF9URWxlbWVudHMuLi4+IF9UcDsKKyAgICAgIHR5cGVkZWYgdHVwbGU8X1VFbGVtZW50cy4uLj4gX1VwOworICAgICAgcmV0dXJuIChfX3R1cGxlX2NvbXBhcmU8dHVwbGVfc2l6ZTxfVHA+Ojp2YWx1ZSAtIHR1cGxlX3NpemU8X1VwPjo6dmFsdWUsCisJICAgICAgMCwgdHVwbGVfc2l6ZTxfVHA+Ojp2YWx1ZSwgX1RwLCBfVXA+OjpfX2xlc3MoX190LCBfX3UpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwKKwkgICAgICAgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7IHJldHVybiAhKF9fdCA9PSBfX3UpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCSAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeyByZXR1cm4gX191IDwgX190OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBpbmxpbmUgYm9vbAorICAgIG9wZXJhdG9yPD0oY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwKKwkgICAgICAgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7IHJldHVybiAhKF9fdSA8IF9fdCk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGlubGluZSBib29sCisgICAgb3BlcmF0b3I+PShjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCSAgICAgICBjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX191KQorICAgIHsgcmV0dXJuICEoX190IDwgX191KTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyByZWZlcmVuY2Vfd3JhcHBlcjsKKworICAvLyBIZWxwZXIgd2hpY2ggYWRkcyBhIHJlZmVyZW5jZSB0byBhIHR5cGUgd2hlbiBnaXZlbiBhIHJlZmVyZW5jZV93cmFwcGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19zdHJpcF9yZWZlcmVuY2Vfd3JhcHBlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19zdHJpcF9yZWZlcmVuY2Vfd3JhcHBlcjxyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCYgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX3N0cmlwX3JlZmVyZW5jZV93cmFwcGVyPGNvbnN0IHJlZmVyZW5jZV93cmFwcGVyPF9UcD4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwJiBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgaW5saW5lIHR1cGxlPHR5cGVuYW1lIF9fc3RyaXBfcmVmZXJlbmNlX3dyYXBwZXI8X0VsZW1lbnRzPjo6X190eXBlLi4uPgorICAgIG1ha2VfdHVwbGUoX0VsZW1lbnRzLi4uIF9fYXJncykKKyAgICB7CisgICAgICB0eXBlZGVmIHR1cGxlPHR5cGVuYW1lIF9fc3RyaXBfcmVmZXJlbmNlX3dyYXBwZXI8X0VsZW1lbnRzPjo6X190eXBlLi4uPgorICAgICAgICBfX3Jlc3VsdF90eXBlOworICAgICAgcmV0dXJuIF9fcmVzdWx0X3R5cGUoX19hcmdzLi4uKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIGlubGluZSB0dXBsZTxfRWxlbWVudHMmLi4uPgorICAgIHRpZShfRWxlbWVudHMmLi4uIF9fYXJncykKKyAgICB7CisgICAgICByZXR1cm4gdHVwbGU8X0VsZW1lbnRzJi4uLj4oX19hcmdzLi4uKTsKKyAgICB9CisKKyAgLy8gQSBjbGFzcyAoYW5kIGluc3RhbmNlKSB3aGljaCBjYW4gYmUgdXNlZCBpbiAndGllJyB3aGVuIGFuIGVsZW1lbnQKKyAgLy8gb2YgYSB0dXBsZSBpcyBub3QgcmVxdWlyZWQKKyAgc3RydWN0IF9Td2FsbG93X2Fzc2lnbgorICB7CisgICAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgICAgX1N3YWxsb3dfYXNzaWduJgorICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYpCisgICAgICB7IHJldHVybiAqdGhpczsgfQorICB9OworCisgIC8vIFRPRE86IFB1dCB0aGlzIGluIHNvbWUga2luZCBvZiBzaGFyZWQgZmlsZS4KKyAgbmFtZXNwYWNlCisgIHsKKyAgICBfU3dhbGxvd19hc3NpZ24gaWdub3JlOworICB9OyAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1RVUExFCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS90eXBlX3RyYWl0cyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3R5cGVfdHJhaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzkyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS90eXBlX3RyYWl0cwpAQCAtMCwwICsxLDY4NyBAQAorLy8gVFIxIHR5cGVfdHJhaXRzIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvdHlwZV90cmFpdHMKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfVFlQRV9UUkFJVFMKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1RZUEVfVFJBSVRTIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8qKgorICAgKiBAYWRkdG9ncm91cCBtZXRhcHJvZ3JhbW1pbmcKKyAgICogQHsKKyAgICovCisKKyAgc3RydWN0IF9fc2ZpbmFlX3R5cGVzCisgIHsKKyAgICB0eXBlZGVmIGNoYXIgX19vbmU7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9fYXJyWzJdOyB9IF9fdHdvOworICB9OworCisjZGVmaW5lIF9ERUZJTkVfU1BFQ18wX0hFTFBFUiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTw+CisKKyNkZWZpbmUgX0RFRklORV9TUEVDXzFfSEVMUEVSICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKworI2RlZmluZSBfREVGSU5FX1NQRUNfMl9IRUxQRVIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ3A+CisKKyNkZWZpbmUgX0RFRklORV9TUEVDKF9PcmRlciwgX1RyYWl0LCBfVHlwZSwgX1ZhbHVlKSAgICBcCisgIF9ERUZJTkVfU1BFQ18jI19PcmRlciMjX0hFTFBFUiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0cnVjdCBfVHJhaXQ8X1R5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfVmFsdWU+IHsgfTsKKworICAvLyBoZWxwZXIgY2xhc3NlcyBbNC4zXS4KKworICAvLy8gaW50ZWdyYWxfY29uc3RhbnQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX192PgorICAgIHN0cnVjdCBpbnRlZ3JhbF9jb25zdGFudAorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdCBfVHAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfX3Y7CisgICAgICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIGludGVncmFsX2NvbnN0YW50PF9UcCwgX192PiAgIHR5cGU7CisgICAgfTsKKyAgCisgIC8vLyB0eXBlZGVmIGZvciB0cnVlX3R5cGUKKyAgdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCB0cnVlPiAgICAgdHJ1ZV90eXBlOworCisgIC8vLyB0eXBlZGVmIGZvciBmYWxzZV90eXBlCisgIHR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgZmFsc2U+ICAgIGZhbHNlX3R5cGU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX192PgorICAgIGNvbnN0IF9UcCBpbnRlZ3JhbF9jb25zdGFudDxfVHAsIF9fdj46OnZhbHVlOworCisgIC8vLyByZW1vdmVfY3YKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IHJlbW92ZV9jdjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19pc192b2lkX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworICBfREVGSU5FX1NQRUMoMCwgX19pc192b2lkX2hlbHBlciwgdm9pZCwgdHJ1ZSkKKworICAvLyBwcmltYXJ5IHR5cGUgY2F0ZWdvcmllcyBbNC41LjFdLgorCisgIC8vLyBpc192b2lkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfdm9pZAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX3ZvaWRfaGVscGVyPHR5cGVuYW1lCisJCQkJICAgICAgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2lzX2ludGVncmFsX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworICBfREVGSU5FX1NQRUMoMCwgX19pc19pbnRlZ3JhbF9oZWxwZXIsIGJvb2wsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgY2hhciwgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCBzaWduZWQgY2hhciwgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCB1bnNpZ25lZCBjaGFyLCB0cnVlKQorI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgd2NoYXJfdCwgdHJ1ZSkKKyNlbmRpZgorICBfREVGSU5FX1NQRUMoMCwgX19pc19pbnRlZ3JhbF9oZWxwZXIsIHNob3J0LCB0cnVlKQorICBfREVGSU5FX1NQRUMoMCwgX19pc19pbnRlZ3JhbF9oZWxwZXIsIHVuc2lnbmVkIHNob3J0LCB0cnVlKQorICBfREVGSU5FX1NQRUMoMCwgX19pc19pbnRlZ3JhbF9oZWxwZXIsIGludCwgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCB1bnNpZ25lZCBpbnQsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2ludGVncmFsX2hlbHBlciwgbG9uZywgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCB1bnNpZ25lZCBsb25nLCB0cnVlKQorICBfREVGSU5FX1NQRUMoMCwgX19pc19pbnRlZ3JhbF9oZWxwZXIsIGxvbmcgbG9uZywgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfaW50ZWdyYWxfaGVscGVyLCB1bnNpZ25lZCBsb25nIGxvbmcsIHRydWUpCisKKyAgLy8vIGlzX2ludGVncmFsCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfaW50ZWdyYWwKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19pbnRlZ3JhbF9oZWxwZXI8dHlwZW5hbWUKKwkJCQkgICAgICByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfZmxvYXRpbmdfcG9pbnRfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2Zsb2F0aW5nX3BvaW50X2hlbHBlciwgZmxvYXQsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX2Zsb2F0aW5nX3BvaW50X2hlbHBlciwgZG91YmxlLCB0cnVlKQorICBfREVGSU5FX1NQRUMoMCwgX19pc19mbG9hdGluZ19wb2ludF9oZWxwZXIsIGxvbmcgZG91YmxlLCB0cnVlKQorCisgIC8vLyBpc19mbG9hdGluZ19wb2ludAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2Zsb2F0aW5nX3BvaW50CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfZmxvYXRpbmdfcG9pbnRfaGVscGVyPHR5cGVuYW1lCisJCQkJICAgICAgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vLyBpc19hcnJheQorICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfYXJyYXkKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9TaXplPgorICAgIHN0cnVjdCBpc19hcnJheTxfVHBbX1NpemVdPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19hcnJheTxfVHBbXT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2lzX3BvaW50ZXJfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisgIF9ERUZJTkVfU1BFQygxLCBfX2lzX3BvaW50ZXJfaGVscGVyLCBfVHAqLCB0cnVlKQorCisgIC8vLyBpc19wb2ludGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcG9pbnRlcgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX3BvaW50ZXJfaGVscGVyPHR5cGVuYW1lCisJCQkJICAgICAgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vLyBpc19yZWZlcmVuY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19yZWZlcmVuY2U7CisKKyAgLy8vIGlzX2Z1bmN0aW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb247CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfbWVtYmVyX29iamVjdF9wb2ludGVyX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworICBfREVGSU5FX1NQRUMoMiwgX19pc19tZW1iZXJfb2JqZWN0X3BvaW50ZXJfaGVscGVyLCBfVHAgX0NwOjoqLAorCSAgICAgICAhaXNfZnVuY3Rpb248X1RwPjo6dmFsdWUpCisKKyAgLy8vIGlzX21lbWJlcl9vYmplY3RfcG9pbnRlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX21lbWJlcl9vYmplY3RfcG9pbnRlcgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX21lbWJlcl9vYmplY3RfcG9pbnRlcl9oZWxwZXI8CisJCQkJICAgICAgdHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworICBfREVGSU5FX1NQRUMoMiwgX19pc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcl9oZWxwZXIsIF9UcCBfQ3A6OiosCisJICAgICAgIGlzX2Z1bmN0aW9uPF9UcD46OnZhbHVlKQorCisgIC8vLyBpc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfaGVscGVyPAorCQkJCSAgICAgIHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLy8gaXNfZW51bQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2VudW0KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX2VudW0oX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX3VuaW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfdW5pb24KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX3VuaW9uKF9UcCk+CisgICAgeyB9OworCisgIC8vLyBpc19jbGFzcworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2NsYXNzCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19jbGFzcyhfVHApPgorICAgIHsgfTsKKworICAvLy8gaXNfZnVuY3Rpb24KKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4uLi4pPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pIGNvbnN0PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4uLi4pIGNvbnN0PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pIHZvbGF0aWxlPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4uLi4pIHZvbGF0aWxlPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pIGNvbnN0IHZvbGF0aWxlPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4uLi4pIGNvbnN0IHZvbGF0aWxlPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLy8gY29tcG9zaXRlIHR5cGUgdHJhaXRzIFs0LjUuMl0uCisgIAorICAvLy8gaXNfYXJpdGhtZXRpYworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2FyaXRobWV0aWMKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoaXNfaW50ZWdyYWw8X1RwPjo6dmFsdWUKKwkJCQkgICAgICB8fCBpc19mbG9hdGluZ19wb2ludDxfVHA+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vLyBpc19mdW5kYW1lbnRhbAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2Z1bmRhbWVudGFsCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKGlzX2FyaXRobWV0aWM8X1RwPjo6dmFsdWUKKwkJCQkgICAgICB8fCBpc192b2lkPF9UcD46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX29iamVjdAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX29iamVjdAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsICEoaXNfZnVuY3Rpb248X1RwPjo6dmFsdWUKKwkJCQkgICAgICAgfHwgaXNfcmVmZXJlbmNlPF9UcD46OnZhbHVlCisJCQkJICAgICAgIHx8IGlzX3ZvaWQ8X1RwPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLy8gaXNfbWVtYmVyX3BvaW50ZXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19tZW1iZXJfcG9pbnRlcjsKKworICAvLy8gaXNfc2NhbGFyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfc2NhbGFyCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKGlzX2FyaXRobWV0aWM8X1RwPjo6dmFsdWUKKwkJCQkgICAgICB8fCBpc19lbnVtPF9UcD46OnZhbHVlCisJCQkJICAgICAgfHwgaXNfcG9pbnRlcjxfVHA+Ojp2YWx1ZQorCQkJCSAgICAgIHx8IGlzX21lbWJlcl9wb2ludGVyPF9UcD46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX2NvbXBvdW5kCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfY29tcG91bmQKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAhaXNfZnVuZGFtZW50YWw8X1RwPjo6dmFsdWU+IHsgfTsKKworICAvLy8gaXNfbWVtYmVyX3BvaW50ZXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX21lbWJlcl9wb2ludGVyX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworICBfREVGSU5FX1NQRUMoMiwgX19pc19tZW1iZXJfcG9pbnRlcl9oZWxwZXIsIF9UcCBfQ3A6OiosIHRydWUpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICBzdHJ1Y3QgaXNfbWVtYmVyX3BvaW50ZXIKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19tZW1iZXJfcG9pbnRlcl9oZWxwZXI8CisJCQkJICAgICAgdHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vIHR5cGUgcHJvcGVydGllcyBbNC41LjNdLgorICAvLy8gaXNfY29uc3QKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IGlzX2NvbnN0CisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19jb25zdDxfVHAgY29uc3Q+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKyAgCisgIC8vLyBpc192b2xhdGlsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfdm9sYXRpbGUKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3ZvbGF0aWxlPF9UcCB2b2xhdGlsZT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8vLyBpc19lbXB0eQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2VtcHR5CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19lbXB0eShfVHApPgorICAgIHsgfTsKKworICAvLy8gaXNfcG9seW1vcnBoaWMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19wb2x5bW9ycGhpYworICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfcG9seW1vcnBoaWMoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX2Fic3RyYWN0CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfYWJzdHJhY3QKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX2Fic3RyYWN0KF9UcCk+CisgICAgeyB9OworCisgIC8vLyBoYXNfdmlydHVhbF9kZXN0cnVjdG9yCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcihfVHApPgorICAgIHsgfTsKKworICAvLy8gYWxpZ25tZW50X29mCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYWxpZ25tZW50X29mCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIF9fYWxpZ25vZl9fKF9UcCk+IHsgfTsKKyAgCisgIC8vLyByYW5rCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCByYW5rCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDA+IHsgfTsKKyAgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9TaXplPgorICAgIHN0cnVjdCByYW5rPF9UcFtfU2l6ZV0+CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDEgKyByYW5rPF9UcD46OnZhbHVlPiB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByYW5rPF9UcFtdPgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAxICsgcmFuazxfVHA+Ojp2YWx1ZT4geyB9OworCisgIC8vLyBleHRlbnQKKyAgdGVtcGxhdGU8dHlwZW5hbWUsIHVuc2lnbmVkIF9VaW50ID0gMD4KKyAgICBzdHJ1Y3QgZXh0ZW50CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDA+IHsgfTsKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdW5zaWduZWQgX1VpbnQsIHN0ZDo6c2l6ZV90IF9TaXplPgorICAgIHN0cnVjdCBleHRlbnQ8X1RwW19TaXplXSwgX1VpbnQ+CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsCisJCQkgICAgICAgX1VpbnQgPT0gMCA/IF9TaXplIDogZXh0ZW50PF9UcCwKKwkJCQkJCQkgICBfVWludCAtIDE+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB1bnNpZ25lZCBfVWludD4KKyAgICBzdHJ1Y3QgZXh0ZW50PF9UcFtdLCBfVWludD4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwKKwkJCSAgICAgICBfVWludCA9PSAwID8gMCA6IGV4dGVudDxfVHAsCisJCQkJCQkgICAgICAgX1VpbnQgLSAxPjo6dmFsdWU+CisgICAgeyB9OworCisgIC8vIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0eXBlcyBbNC42XS4KKworICAvLy8gaXNfc2FtZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgc3RydWN0IGlzX3NhbWUKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3NhbWU8X1RwLCBfVHA+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvLyBjb25zdC12b2xhdGlsZSBtb2RpZmljYXRpb25zIFs0LjcuMV0uCisKKyAgLy8vIHJlbW92ZV9jb25zdAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9jb25zdAorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfY29uc3Q8X1RwIGNvbnN0PgorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisgIAorICAvLy8gcmVtb3ZlX3ZvbGF0aWxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX3ZvbGF0aWxlCisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV92b2xhdGlsZTxfVHAgdm9sYXRpbGU+CisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKyAgCisgIC8vLyByZW1vdmVfY3YKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfY3YKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lCisgICAgICByZW1vdmVfY29uc3Q8dHlwZW5hbWUgcmVtb3ZlX3ZvbGF0aWxlPF9UcD46OnR5cGU+Ojp0eXBlICAgICB0eXBlOworICAgIH07CisgIAorICAvLy8gYWRkX2NvbnN0CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYWRkX2NvbnN0CisgICAgeyB0eXBlZGVmIF9UcCBjb25zdCAgICAgdHlwZTsgfTsKKyAgIAorICAvLy8gYWRkX3ZvbGF0aWxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYWRkX3ZvbGF0aWxlCisgICAgeyB0eXBlZGVmIF9UcCB2b2xhdGlsZSAgICAgdHlwZTsgfTsKKyAgCisgIC8vLyBhZGRfY3YKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBhZGRfY3YKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lCisgICAgICBhZGRfY29uc3Q8dHlwZW5hbWUgYWRkX3ZvbGF0aWxlPF9UcD46OnR5cGU+Ojp0eXBlICAgICB0eXBlOworICAgIH07CisKKyAgLy8gYXJyYXkgbW9kaWZpY2F0aW9ucyBbNC43LjNdLgorCisgIC8vLyByZW1vdmVfZXh0ZW50CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2V4dGVudAorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfU2l6ZT4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2V4dGVudDxfVHBbX1NpemVdPgorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfZXh0ZW50PF9UcFtdPgorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgLy8vIHJlbW92ZV9hbGxfZXh0ZW50cworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50cworICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBzdGQ6OnNpemVfdCBfU2l6ZT4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2FsbF9leHRlbnRzPF9UcFtfU2l6ZV0+CisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxfVHA+Ojp0eXBlICAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2FsbF9leHRlbnRzPF9UcFtdPgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfYWxsX2V4dGVudHM8X1RwPjo6dHlwZSAgICAgdHlwZTsgfTsKKworICAvLyBwb2ludGVyIG1vZGlmaWNhdGlvbnMgWzQuNy40XS4KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX3JlbW92ZV9wb2ludGVyX2hlbHBlcgorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IF9fcmVtb3ZlX3BvaW50ZXJfaGVscGVyPF9UcCwgX1VwKj4KKyAgICB7IHR5cGVkZWYgX1VwICAgICB0eXBlOyB9OworCisgIC8vLyByZW1vdmVfcG9pbnRlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9wb2ludGVyCisgICAgOiBwdWJsaWMgX19yZW1vdmVfcG9pbnRlcl9oZWxwZXI8X1RwLCB0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IHJlbW92ZV9yZWZlcmVuY2U7CisKKyAgLy8vIGFkZF9wb2ludGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYWRkX3BvaW50ZXIKKyAgICB7IHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlKiAgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfcmVmZXJlbmNlCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19yZWZlcmVuY2U8X1RwJj4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcG9kCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19wb2QoX1RwKSB8fCBpc192b2lkPF9UcD46OnZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc190cml2aWFsX2NvbnN0cnVjdG9yCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgaXNfcG9kPF9UcD46OnZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc190cml2aWFsX2NvcHkKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBpc19wb2Q8X1RwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX3RyaXZpYWxfYXNzaWduCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgaXNfcG9kPF9UcD46OnZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGhhc190cml2aWFsX2Rlc3RydWN0b3IKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBpc19wb2Q8X1RwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX25vdGhyb3dfY29uc3RydWN0b3IKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBpc19wb2Q8X1RwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX25vdGhyb3dfY29weQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIGlzX3BvZDxfVHA+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNfbm90aHJvd19hc3NpZ24KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBpc19wb2Q8X1RwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2lzX3NpZ25lZF9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfc2lnbmVkX2hlbHBlciwgc2lnbmVkIGNoYXIsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX3NpZ25lZF9oZWxwZXIsIHNob3J0LCB0cnVlKQorICBfREVGSU5FX1NQRUMoMCwgX19pc19zaWduZWRfaGVscGVyLCBpbnQsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX3NpZ25lZF9oZWxwZXIsIGxvbmcsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX3NpZ25lZF9oZWxwZXIsIGxvbmcgbG9uZywgdHJ1ZSkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3NpZ25lZAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX3NpZ25lZF9oZWxwZXI8dHlwZW5hbWUKKwkJCQkgICAgICByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfdW5zaWduZWRfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX3Vuc2lnbmVkX2hlbHBlciwgdW5zaWduZWQgY2hhciwgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfdW5zaWduZWRfaGVscGVyLCB1bnNpZ25lZCBzaG9ydCwgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfdW5zaWduZWRfaGVscGVyLCB1bnNpZ25lZCBpbnQsIHRydWUpCisgIF9ERUZJTkVfU1BFQygwLCBfX2lzX3Vuc2lnbmVkX2hlbHBlciwgdW5zaWduZWQgbG9uZywgdHJ1ZSkKKyAgX0RFRklORV9TUEVDKDAsIF9faXNfdW5zaWduZWRfaGVscGVyLCB1bnNpZ25lZCBsb25nIGxvbmcsIHRydWUpCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc191bnNpZ25lZAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX3Vuc2lnbmVkX2hlbHBlcjx0eXBlbmFtZQorCQkJCSAgICAgIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmFzZSwgdHlwZW5hbWUgX0Rlcml2ZWQ+CisgICAgc3RydWN0IF9faXNfYmFzZV9vZl9oZWxwZXIKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9jdjxfQmFzZT46OnR5cGUgICAgX05vQ3ZfQmFzZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2N2PF9EZXJpdmVkPjo6dHlwZSBfTm9Ddl9EZXJpdmVkOworICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZSA9IChpc19zYW1lPF9CYXNlLCBfRGVyaXZlZD46OnZhbHVlCisJCQkJICAgfHwgKF9faXNfYmFzZV9vZihfQmFzZSwgX0Rlcml2ZWQpCisJCQkJICAgICAgICYmICFpc19zYW1lPF9Ob0N2X0Jhc2UsCisJCQkJICAgICAgICAgICAgICAgICAgIF9Ob0N2X0Rlcml2ZWQ+Ojp2YWx1ZSkpOworICAgIH07CisgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CYXNlLCB0eXBlbmFtZSBfRGVyaXZlZD4KKyAgICBzdHJ1Y3QgaXNfYmFzZV9vZgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsCisJCQkgICAgICAgX19pc19iYXNlX29mX2hlbHBlcjxfQmFzZSwgX0Rlcml2ZWQ+OjpfX3ZhbHVlPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvPgorICAgIHN0cnVjdCBfX2lzX2NvbnZlcnRpYmxlX3NpbXBsZQorICAgIDogcHVibGljIF9fc2ZpbmFlX3R5cGVzCisgICAgeworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMgX19vbmUgX190ZXN0KF9Ubyk7CisgICAgICBzdGF0aWMgX190d28gX190ZXN0KC4uLik7CisgICAgICBzdGF0aWMgX0Zyb20gX19tYWtlRnJvbSgpOworICAgIAorICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWUgPSBzaXplb2YoX190ZXN0KF9fbWFrZUZyb20oKSkpID09IDE7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF9yZWZlcmVuY2U7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2ludF9vcl9jcmVmCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfcmVmZXJlbmNlPF9UcD46OnR5cGUgX19ycl9UcDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWUgPSAoaXNfaW50ZWdyYWw8X1RwPjo6dmFsdWUKKwkJCQkgICB8fCAoaXNfaW50ZWdyYWw8X19ycl9UcD46OnZhbHVlCisJCQkJICAgICAgICYmIGlzX2NvbnN0PF9fcnJfVHA+Ojp2YWx1ZQorCQkJCSAgICAgICAmJiAhaXNfdm9sYXRpbGU8X19ycl9UcD46OnZhbHVlKSk7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvLAorCSAgIGJvb2wgPSAoaXNfdm9pZDxfRnJvbT46OnZhbHVlIHx8IGlzX3ZvaWQ8X1RvPjo6dmFsdWUKKwkJICAgfHwgaXNfZnVuY3Rpb248X1RvPjo6dmFsdWUgfHwgaXNfYXJyYXk8X1RvPjo6dmFsdWUKKwkJICAgLy8gVGhpcyBzcGVjaWFsIGNhc2UgaXMgaGVyZSBvbmx5IHRvIGF2b2lkIHdhcm5pbmdzLgkKKwkJICAgfHwgKGlzX2Zsb2F0aW5nX3BvaW50PHR5cGVuYW1lCisJCSAgICAgICByZW1vdmVfcmVmZXJlbmNlPF9Gcm9tPjo6dHlwZT46OnZhbHVlCisJCSAgICAgICAmJiBfX2lzX2ludF9vcl9jcmVmPF9Ubz46Ol9fdmFsdWUpKT4KKyAgICBzdHJ1Y3QgX19pc19jb252ZXJ0aWJsZV9oZWxwZXIKKyAgICB7CisgICAgICAvLyAiQW4gaW1hZ2luYXJ5IGx2YWx1ZSBvZiB0eXBlIEZyb20uLi4iLgorICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZSA9IChfX2lzX2NvbnZlcnRpYmxlX3NpbXBsZTx0eXBlbmFtZQorCQkJCSAgIGFkZF9yZWZlcmVuY2U8X0Zyb20+Ojp0eXBlLCBfVG8+OjpfX3ZhbHVlKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8+CisgICAgc3RydWN0IF9faXNfY29udmVydGlibGVfaGVscGVyPF9Gcm9tLCBfVG8sIHRydWU+CisgICAgeyBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlID0gKGlzX3ZvaWQ8X1RvPjo6dmFsdWUKKwkJCQkgICB8fCAoX19pc19pbnRfb3JfY3JlZjxfVG8+OjpfX3ZhbHVlCisJCQkJICAgICAgICYmICFpc192b2lkPF9Gcm9tPjo6dmFsdWUpKTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvPgorICAgIHN0cnVjdCBpc19jb252ZXJ0aWJsZQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsCisJCQkgICAgICAgX19pc19jb252ZXJ0aWJsZV9oZWxwZXI8X0Zyb20sIF9Ubz46Ol9fdmFsdWU+CisgICAgeyB9OworCisgIC8vIHJlZmVyZW5jZSBtb2RpZmljYXRpb25zIFs0LjcuMl0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX3JlZmVyZW5jZQorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPF9UcCY+CisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKworICAvLyBOQjogQ2FyZWZ1bCB3aXRoIHJlZmVyZW5jZSB0byB2b2lkLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSAoaXNfdm9pZDxfVHA+Ojp2YWx1ZQorCQkJCSB8fCBpc19yZWZlcmVuY2U8X1RwPjo6dmFsdWUpPgorICAgIHN0cnVjdCBfX2FkZF9yZWZlcmVuY2VfaGVscGVyCisgICAgeyB0eXBlZGVmIF9UcCYgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX3JlZmVyZW5jZV9oZWxwZXI8X1RwLCB0cnVlPgorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBhZGRfcmVmZXJlbmNlCisgICAgOiBwdWJsaWMgX19hZGRfcmVmZXJlbmNlX2hlbHBlcjxfVHA+CisgICAgeyB9OworCisgIC8vIG90aGVyIHRyYW5zZm9ybWF0aW9ucyBbNC44XS4KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0xlbiwgc3RkOjpzaXplX3QgX0FsaWduPgorICAgIHN0cnVjdCBhbGlnbmVkX3N0b3JhZ2UKKyAgICB7IAorICAgICAgdW5pb24gdHlwZQorICAgICAgeworCXVuc2lnbmVkIGNoYXIgX19kYXRhW19MZW5dOworCXN0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoX0FsaWduKSkpKSB7IH0gX19hbGlnbjsgCisgICAgICB9OworICAgIH07CisKKyN1bmRlZiBfREVGSU5FX1NQRUNfMF9IRUxQRVIKKyN1bmRlZiBfREVGSU5FX1NQRUNfMV9IRUxQRVIKKyN1bmRlZiBfREVGSU5FX1NQRUNfMl9IRUxQRVIKKyN1bmRlZiBfREVGSU5FX1NQRUMKKworICAvLy8gQH0gZ3JvdXAgbWV0YXByb2dyYW1taW5nCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1RZUEVfVFJBSVRTCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS91bm9yZGVyZWRfbWFwIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvdW5vcmRlcmVkX21hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODEyMzY3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvdW5vcmRlcmVkX21hcApAQCAtMCwwICsxLDQ0IEBACisvLyBUUjEgdW5vcmRlcmVkX21hcCAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIxL3Vub3JkZXJlZF9tYXAKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfVU5PUkRFUkVEX01BUAorI2RlZmluZSBfR0xJQkNYWF9UUjFfVU5PUkRFUkVEX01BUCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8Yml0cy9zdGxfYWxnb2Jhc2UuaD4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jYXRvci5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+IC8vIGVxdWFsX3RvLCBfSWRlbnRpdHksIF9TZWxlY3Qxc3QKKyNpbmNsdWRlIDxiaXRzL3N0cmluZ2Z3ZC5oPgorI2luY2x1ZGUgPHRyMS90eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbF9oYXNoLmg+CisjaW5jbHVkZSA8dHIxL2hhc2h0YWJsZS5oPgorI2luY2x1ZGUgPHRyMS91bm9yZGVyZWRfbWFwLmg+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfVU5PUkRFUkVEX01BUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvdW5vcmRlcmVkX21hcC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvdW5vcmRlcmVkX21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzUwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS91bm9yZGVyZWRfbWFwLmgKQEAgLTAsMCArMSwyNzggQEAKKy8vIFRSMSB1bm9yZGVyZWRfbWFwIGltcGxlbWVudGF0aW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvdW5vcmRlcmVkX21hcC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4gQGhlYWRlcm5hbWV7dHIxL3Vub3JkZXJlZF9tYXB9CisgKi8KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CituYW1lc3BhY2UgdHIxCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIC8vIE5COiBXaGVuIHdlIGdldCB0eXBlZGVmIHRlbXBsYXRlcyB0aGVzZSBjbGFzcyBkZWZpbml0aW9ucworICAvLyB3aWxsIGJlIHVubmVjZXNzYXJ5LgorICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCisJICAgY2xhc3MgX0hhc2ggPSBoYXNoPF9LZXk+LAorCSAgIGNsYXNzIF9QcmVkID0gc3RkOjplcXVhbF90bzxfS2V5PiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGUgPSBmYWxzZT4KKyAgICBjbGFzcyBfX3Vub3JkZXJlZF9tYXAKKyAgICA6IHB1YmxpYyBfSGFzaHRhYmxlPF9LZXksIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+LCBfQWxsb2MsCisJCQlzdGQ6Ol9TZWxlY3Qxc3Q8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwgX1ByZWQsCisJCQlfSGFzaCwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCwKKwkJCV9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCV9fY2FjaGVfaGFzaF9jb2RlLCBmYWxzZSwgdHJ1ZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGU8X0tleSwgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4sIF9BbGxvYywKKwkJCSBzdGQ6Ol9TZWxlY3Qxc3Q8c3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiwgX1ByZWQsCisJCQkgX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQkgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJIF9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCSBfX2NhY2hlX2hhc2hfY29kZSwgZmFsc2UsIHRydWU+CisJX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3Vub3JkZXJlZF9tYXAoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJICAgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJICAgICAgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoKCksCisJICAgICAgX19lcWwsIHN0ZDo6X1NlbGVjdDFzdDxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+KCksIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwlfX3Vub3JkZXJlZF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCQlzaXplX3R5cGUgX19uID0gMTAsCisJCQljb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCWNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCWNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZygpLAorCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwKKwkJX19lcWwsIHN0ZDo6X1NlbGVjdDFzdDxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+KCksIF9fYSkKKwl7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X0tleT4sCisJICAgY2xhc3MgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4sCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZSA9IGZhbHNlPgorICAgIGNsYXNzIF9fdW5vcmRlcmVkX211bHRpbWFwCisgICAgOiBwdWJsaWMgX0hhc2h0YWJsZTxfS2V5LCBzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiwKKwkJCV9BbGxvYywKKwkJCXN0ZDo6X1NlbGVjdDFzdDxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LCBfUHJlZCwKKwkJCV9IYXNoLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nLAorCQkJX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJX19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LAorCQkJX19jYWNoZV9oYXNoX2NvZGUsIGZhbHNlLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9IYXNodGFibGU8X0tleSwgc3RkOjpwYWlyPGNvbnN0IF9LZXksIF9UcD4sCisJCQkgX0FsbG9jLAorCQkJIHN0ZDo6X1NlbGVjdDFzdDxzdGQ6OnBhaXI8Y29uc3QgX0tleSwgX1RwPiA+LCBfUHJlZCwKKwkJCSBfSGFzaCwgX19kZXRhaWw6Ol9Nb2RfcmFuZ2VfaGFzaGluZywKKwkJCSBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2gsCisJCQkgX19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LAorCQkJIF9fY2FjaGVfaGFzaF9jb2RlLCBmYWxzZSwgZmFsc2U+CisJX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3Vub3JkZXJlZF9tdWx0aW1hcChzaXplX3R5cGUgX19uID0gMTAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkgICAgICBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwKKwkgICAgICBfX2VxbCwgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4oKSwgX19hKQorICAgICAgeyB9CisKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJX191bm9yZGVyZWRfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCQkgICAgIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgX19uID0gMCwKKwkJCSAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nKCksCisJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5nZWRfaGFzaCgpLAorCQlfX2VxbCwgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4oKSwgX19hKQorCXsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYywKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3Vub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsCisJIF9BbGxvYywgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3gsCisJIF9fdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwKKwkgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jLAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGU+CisgICAgaW5saW5lIHZvaWQKKyAgICBzd2FwKF9fdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLAorCSBfQWxsb2MsIF9fY2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSBfX3Vub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwKKwkgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIGNvbXBvc2VkIG9mIHVuaXF1ZSBrZXlzIChjb250YWluaW5nCisgICAqICBhdCBtb3N0IG9uZSBvZiBlYWNoIGtleSB2YWx1ZSkgdGhhdCBhc3NvY2lhdGVzIHZhbHVlcyBvZiBhbm90aGVyIHR5cGUKKyAgICogIHdpdGggdGhlIGtleXMuCisgICAqCisgICAqICBAaW5ncm91cCB1bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhbmQKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sI3h4Ij51bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyPC9hPgorICAgKgorICAgKiAgQHBhcmFtICBLZXkgIFR5cGUgb2Yga2V5IG9iamVjdHMuCisgICAqICBAcGFyYW0gIFRwICBUeXBlIG9mIG1hcHBlZCBvYmplY3RzLgorICAgKiAgQHBhcmFtICBIYXNoICBIYXNoaW5nIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBoYXNoPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgUHJlZCAgUHJlZGljYXRlIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBlcXVhbF90bzxWYWx1ZT4uCisgICAqICBAcGFyYW0gIEFsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPEtleT4uCisgICAqCisgICAqIFRoZSByZXN1bHRpbmcgdmFsdWUgdHlwZSBvZiB0aGUgY29udGFpbmVyIGlzIHN0ZDo6cGFpcjxjb25zdCBLZXksIFRwPi4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X0tleT4sCisJICAgY2xhc3MgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9tYXAKKyAgICA6IHB1YmxpYyBfX3Vub3JkZXJlZF9tYXA8X0tleSwgX1RwLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fdW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiAgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tYXAoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgorCXVub3JkZXJlZF9tYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCSAgICAgIHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCSAgICAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisJOiBfQmFzZShfX2YsIF9fbCwgX19uLCBfX2hmLCBfX2VxbCwgX19hKQorCXsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBAYnJpZWYgQSBzdGFuZGFyZCBjb250YWluZXIgY29tcG9zZWQgb2YgZXF1aXZhbGVudCBrZXlzCisgICAqICAocG9zc2libHkgY29udGFpbmluZyBtdWx0aXBsZSBvZiBlYWNoIGtleSB2YWx1ZSkgdGhhdCBhc3NvY2lhdGVzCisgICAqICB2YWx1ZXMgb2YgYW5vdGhlciB0eXBlIHdpdGggdGhlIGtleXMuCisgICAqCisgICAqICBAaW5ncm91cCB1bm9yZGVyZWRfYXNzb2NpYXRpdmVfY29udGFpbmVycworICAgKgorICAgKiAgTWVldHMgdGhlIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LCBhbmQKKyAgICogIDxhIGhyZWY9InRhYmxlcy5odG1sI3h4Ij51bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVyPC9hPgorICAgKgorICAgKiAgQHBhcmFtICBLZXkgIFR5cGUgb2Yga2V5IG9iamVjdHMuCisgICAqICBAcGFyYW0gIFRwICBUeXBlIG9mIG1hcHBlZCBvYmplY3RzLgorICAgKiAgQHBhcmFtICBIYXNoICBIYXNoaW5nIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBoYXNoPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgUHJlZCAgUHJlZGljYXRlIGZ1bmN0aW9uIG9iamVjdCB0eXBlLCBkZWZhdWx0cyB0byBlcXVhbF90bzxWYWx1ZT4uCisgICAqICBAcGFyYW0gIEFsbG9jICBBbGxvY2F0b3IgdHlwZSwgZGVmYXVsdHMgdG8gYWxsb2NhdG9yPEtleT4uCisgICAqCisgICAqIFRoZSByZXN1bHRpbmcgdmFsdWUgdHlwZSBvZiB0aGUgY29udGFpbmVyIGlzIHN0ZDo6cGFpcjxjb25zdCBLZXksIFRwPi4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X0tleT4sCisJICAgY2xhc3MgX1ByZWQgPSBzdGQ6OmVxdWFsX3RvPF9LZXk+LAorCSAgIGNsYXNzIF9BbGxvYyA9IHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgorICAgIGNsYXNzIHVub3JkZXJlZF9tdWx0aW1hcAorICAgIDogcHVibGljIF9fdW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+CisgICAgeworICAgICAgdHlwZWRlZiBfX3Vub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiAgX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIHVub3JkZXJlZF9tdWx0aW1hcChzaXplX3R5cGUgX19uID0gMTAsCisJCQkgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZXFsLCBfX2EpCisgICAgICB7IH0KKworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl1bm9yZGVyZWRfbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19mLCBfSW5wdXRJdGVyYXRvciBfX2wsCisJCQkgICB0eXBlbmFtZSBfQmFzZTo6c2l6ZV90eXBlIF9fbiA9IDAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKwl7IH0KKworICAgIH07CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX194LAorCSB1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYz4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAodW5vcmRlcmVkX211bHRpbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPiYgX195KQorICAgIHsgX194LnN3YXAoX195KTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3Vub3JkZXJlZF9zZXQgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS91bm9yZGVyZWRfc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NjhhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS91bm9yZGVyZWRfc2V0CkBAIC0wLDAgKzEsNDQgQEAKKy8vIFRSMSB1bm9yZGVyZWRfc2V0IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvdW5vcmRlcmVkX3NldAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9VTk9SREVSRURfU0VUCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9VTk9SREVSRURfU0VUIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gLy8gZXF1YWxfdG8sIF9JZGVudGl0eSwgX1NlbGVjdDFzdAorI2luY2x1ZGUgPGJpdHMvc3RyaW5nZndkLmg+CisjaW5jbHVkZSA8dHIxL3R5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsX2hhc2guaD4KKyNpbmNsdWRlIDx0cjEvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8dHIxL3Vub3JkZXJlZF9zZXQuaD4KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMV9VTk9SREVSRURfU0VUCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS91bm9yZGVyZWRfc2V0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS91bm9yZGVyZWRfc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3MTJlNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3Vub3JkZXJlZF9zZXQuaApAQCAtMCwwICsxLDI2NyBAQAorLy8gVFIxIHVub3JkZXJlZF9zZXQgaW1wbGVtZW50YXRpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMS91bm9yZGVyZWRfc2V0LmgKKyAqICBUaGlzIGlzIGFuIGludGVybmFsIGhlYWRlciBmaWxlLCBpbmNsdWRlZCBieSBvdGhlciBsaWJyYXJ5IGhlYWRlcnMuCisgKiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXt0cjEvdW5vcmRlcmVkX3NldH0KKyAqLworCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjEKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gTkI6IFdoZW4gd2UgZ2V0IHR5cGVkZWYgdGVtcGxhdGVzIHRoZXNlIGNsYXNzIGRlZmluaXRpb25zCisgIC8vIHdpbGwgYmUgdW5uZWNlc3NhcnkuCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVmFsdWU+LAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGUgPSBmYWxzZT4KKyAgICBjbGFzcyBfX3Vub3JkZXJlZF9zZXQKKyAgICA6IHB1YmxpYyBfSGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfQWxsb2MsCisJCQlzdGQ6Ol9JZGVudGl0eTxfVmFsdWU+LCBfUHJlZCwKKwkJCV9IYXNoLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nLAorCQkJX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJX19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LAorCQkJX19jYWNoZV9oYXNoX2NvZGUsIHRydWUsIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkgc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPiwgX1ByZWQsCisJCQkgX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQkgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJIF9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCSBfX2NhY2hlX2hhc2hfY29kZSwgdHJ1ZSwgdHJ1ZT4KKwlfQmFzZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSAgICAgICBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpoYXNoZXIgICAgICAgICAgaGFzaGVyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6a2V5X2VxdWFsICAgICAgIGtleV9lcXVhbDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlICBhbGxvY2F0b3JfdHlwZTsKKworICAgICAgZXhwbGljaXQKKyAgICAgIF9fdW5vcmRlcmVkX3NldChzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkgICAgICBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwgX19lcWwsCisJICAgICAgc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPigpLCBfX2EpCisgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJX191bm9yZGVyZWRfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorCQkJc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQljb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQljb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkJX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoKCksIF9fZXFsLAorCQlzdGQ6Ol9JZGVudGl0eTxfVmFsdWU+KCksIF9fYSkKKwl7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVmFsdWU+LAorCSAgIGJvb2wgX19jYWNoZV9oYXNoX2NvZGUgPSBmYWxzZT4KKyAgICBjbGFzcyBfX3Vub3JkZXJlZF9tdWx0aXNldAorICAgIDogcHVibGljIF9IYXNodGFibGU8X1ZhbHVlLCBfVmFsdWUsIF9BbGxvYywKKwkJCXN0ZDo6X0lkZW50aXR5PF9WYWx1ZT4sIF9QcmVkLAorCQkJX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2gsCisJCQlfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksCisJCQlfX2NhY2hlX2hhc2hfY29kZSwgdHJ1ZSwgZmFsc2U+CisgICAgeworICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlPF9WYWx1ZSwgX1ZhbHVlLCBfQWxsb2MsCisJCQkgc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPiwgX1ByZWQsCisJCQkgX0hhc2gsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcsCisJCQkgX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAorCQkJIF9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwKKwkJCSBfX2NhY2hlX2hhc2hfY29kZSwgdHJ1ZSwgZmFsc2U+CisJX0Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX3Vub3JkZXJlZF9tdWx0aXNldChzaXplX3R5cGUgX19uID0gMTAsCisJCQkgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSAgIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorICAgICAgOiBfQmFzZShfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkgICAgICBfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2VkX2hhc2goKSwgX19lcWwsCisJICAgICAgc3RkOjpfSWRlbnRpdHk8X1ZhbHVlPigpLCBfX2EpCisgICAgICB7IH0KKworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwlfX3Vub3JkZXJlZF9tdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2YsIF9JbnB1dEl0ZXJhdG9yIF9fbCwKKwkJCSAgICAgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSBfX24gPSAwLAorCQkJICAgICBjb25zdCBoYXNoZXImIF9faGYgPSBoYXNoZXIoKSwKKwkJCSAgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkJICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZGV0YWlsOjpfTW9kX3JhbmdlX2hhc2hpbmcoKSwKKwkJX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoKCksIF9fZXFsLAorCQlzdGQ6Ol9JZGVudGl0eTxfVmFsdWU+KCksIF9fYSkKKwl7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0hhc2gsIGNsYXNzIF9QcmVkLCBjbGFzcyBfQWxsb2MsCisJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KKyAgICBpbmxpbmUgdm9pZAorICAgIHN3YXAoX191bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2MsIF9fY2FjaGVfaGFzaF9jb2RlPiYgX194LAorCSBfX3Vub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYywgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfSGFzaCwgY2xhc3MgX1ByZWQsIGNsYXNzIF9BbGxvYywKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcChfX3Vub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwKKwkgX0FsbG9jLCBfX2NhY2hlX2hhc2hfY29kZT4mIF9feCwKKwkgX191bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsCisJIF9BbGxvYywgX19jYWNoZV9oYXNoX2NvZGU+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKKworICAvKioKKyAgICogIEBicmllZiBBIHN0YW5kYXJkIGNvbnRhaW5lciBjb21wb3NlZCBvZiB1bmlxdWUga2V5cyAoY29udGFpbmluZworICAgKiAgYXQgbW9zdCBvbmUgb2YgZWFjaCBrZXkgdmFsdWUpIGluIHdoaWNoIHRoZSBlbGVtZW50cycga2V5cyBhcmUKKyAgICogIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzLgorICAgKgorICAgKiAgQGluZ3JvdXAgdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcnMKKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYW5kCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCN4eCI+dW5vcmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcjwvYT4KKyAgICoKKyAgICogIEBwYXJhbSAgVmFsdWUgIFR5cGUgb2Yga2V5IG9iamVjdHMuCisgICAqICBAcGFyYW0gIEhhc2ggIEhhc2hpbmcgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGhhc2g8VmFsdWU+LgorICAgKiAgQHBhcmFtICBQcmVkICBQcmVkaWNhdGUgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGVxdWFsX3RvPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8S2V5Pi4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfc2V0CisgICAgOiBwdWJsaWMgX191bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+CisgICAgeworICAgICAgdHlwZWRlZiBfX3Vub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4gIF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfc2V0KHNpemVfdHlwZSBfX24gPSAxMCwKKwkJICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgY29uc3Qga2V5X2VxdWFsJiBfX2VxbCA9IGtleV9lcXVhbCgpLAorCQkgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKyAgICAgIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KKwl1bm9yZGVyZWRfc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorCQkgICAgICBzaXplX3R5cGUgX19uID0gMTAsCisJCSAgICAgIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkgICAgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCSAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQorCTogX0Jhc2UoX19mLCBfX2wsIF9fbiwgX19oZiwgX19lcWwsIF9fYSkKKwl7IH0KKyAgICB9OworCisgIC8qKgorICAgKiAgQGJyaWVmIEEgc3RhbmRhcmQgY29udGFpbmVyIGNvbXBvc2VkIG9mIGVxdWl2YWxlbnQga2V5cworICAgKiAgKHBvc3NpYmx5IGNvbnRhaW5pbmcgbXVsdGlwbGUgb2YgZWFjaCBrZXkgdmFsdWUpIGluIHdoaWNoIHRoZQorICAgKiAgZWxlbWVudHMnIGtleXMgYXJlIHRoZSBlbGVtZW50cyB0aGVtc2VsdmVzLgorICAgKgorICAgKiAgQGluZ3JvdXAgdW5vcmRlcmVkX2Fzc29jaWF0aXZlX2NvbnRhaW5lcnMKKyAgICoKKyAgICogIE1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgYSA8YSBocmVmPSJ0YWJsZXMuaHRtbCM2NSI+Y29udGFpbmVyPC9hPiwgYW5kCisgICAqICA8YSBocmVmPSJ0YWJsZXMuaHRtbCN4eCI+dW5vcmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcjwvYT4KKyAgICoKKyAgICogIEBwYXJhbSAgVmFsdWUgIFR5cGUgb2Yga2V5IG9iamVjdHMuCisgICAqICBAcGFyYW0gIEhhc2ggIEhhc2hpbmcgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGhhc2g8VmFsdWU+LgorICAgKiAgQHBhcmFtICBQcmVkICBQcmVkaWNhdGUgZnVuY3Rpb24gb2JqZWN0IHR5cGUsIGRlZmF1bHRzIHRvIGVxdWFsX3RvPFZhbHVlPi4KKyAgICogIEBwYXJhbSAgQWxsb2MgIEFsbG9jYXRvciB0eXBlLCBkZWZhdWx0cyB0byBhbGxvY2F0b3I8S2V5Pi4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9WYWx1ZSwKKwkgICBjbGFzcyBfSGFzaCA9IGhhc2g8X1ZhbHVlPiwKKwkgICBjbGFzcyBfUHJlZCA9IHN0ZDo6ZXF1YWxfdG88X1ZhbHVlPiwKKwkgICBjbGFzcyBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfVmFsdWU+ID4KKyAgICBjbGFzcyB1bm9yZGVyZWRfbXVsdGlzZXQKKyAgICA6IHB1YmxpYyBfX3Vub3JkZXJlZF9tdWx0aXNldDxfVmFsdWUsIF9IYXNoLCBfUHJlZCwgX0FsbG9jPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX191bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4gIF9CYXNlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSAgICAgIHZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpzaXplX3R5cGUgICAgICAgc2l6ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6aGFzaGVyICAgICAgICAgIGhhc2hlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmtleV9lcXVhbCAgICAgICBrZXlfZXF1YWw7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSAgYWxsb2NhdG9yX3R5cGU7CisKKyAgICAgIGV4cGxpY2l0CisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQoc2l6ZV90eXBlIF9fbiA9IDEwLAorCQkJIGNvbnN0IGhhc2hlciYgX19oZiA9IGhhc2hlcigpLAorCQkJIGNvbnN0IGtleV9lcXVhbCYgX19lcWwgPSBrZXlfZXF1YWwoKSwKKwkJCSBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uLCBfX2hmLCBfX2VxbCwgX19hKQorICAgICAgeyB9CisKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CisJdW5vcmRlcmVkX211bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZiwgX0lucHV0SXRlcmF0b3IgX19sLAorCQkJICAgdHlwZW5hbWUgX0Jhc2U6OnNpemVfdHlwZSBfX24gPSAwLAorCQkJICAgY29uc3QgaGFzaGVyJiBfX2hmID0gaGFzaGVyKCksCisJCQkgICBjb25zdCBrZXlfZXF1YWwmIF9fZXFsID0ga2V5X2VxdWFsKCksCisJCQkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fZiwgX19sLCBfX24sIF9faGYsIF9fZXFsLCBfX2EpCisJeyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3gsCisJIHVub3JkZXJlZF9zZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feSkKKyAgICB7IF9feC5zd2FwKF9feSk7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVmFsdWUsIGNsYXNzIF9IYXNoLCBjbGFzcyBfUHJlZCwgY2xhc3MgX0FsbG9jPgorICAgIGlubGluZSB2b2lkCisgICAgc3dhcCh1bm9yZGVyZWRfbXVsdGlzZXQ8X1ZhbHVlLCBfSGFzaCwgX1ByZWQsIF9BbGxvYz4mIF9feCwKKwkgdW5vcmRlcmVkX211bHRpc2V0PF9WYWx1ZSwgX0hhc2gsIF9QcmVkLCBfQWxsb2M+JiBfX3kpCisgICAgeyBfX3guc3dhcChfX3kpOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvdXRpbGl0eSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3V0aWxpdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgyZDJkNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3V0aWxpdHkKQEAgLTAsMCArMSwxMDggQEAKKy8vIFRSMSB1dGlsaXR5IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvdXRpbGl0eQorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9VVElMSVRZCisjZGVmaW5lIF9HTElCQ1hYX1RSMV9VVElMSVRZIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9yZWxvcHMuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9wYWlyLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgY2xhc3MgdHVwbGVfc2l6ZTsKKworICB0ZW1wbGF0ZTxpbnQgX0ludCwgY2xhc3MgX1RwPgorICAgIGNsYXNzIHR1cGxlX2VsZW1lbnQ7CisKKyAgIC8vIFZhcmlvdXMgZnVuY3Rpb25zIHdoaWNoIGdpdmUgc3RkOjpwYWlyIGEgdHVwbGUtbGlrZSBpbnRlcmZhY2UuCisgIHRlbXBsYXRlPGNsYXNzIF9UcDEsIGNsYXNzIF9UcDI+CisgICAgc3RydWN0IHR1cGxlX3NpemU8c3RkOjpwYWlyPF9UcDEsIF9UcDI+ID4KKyAgICB7IHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSAyOyB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9UcDEsIGNsYXNzIF9UcDI+CisgICAgY29uc3QgaW50CisgICAgdHVwbGVfc2l6ZTxzdGQ6OnBhaXI8X1RwMSwgX1RwMj4gPjo6dmFsdWU7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4KKyAgICBzdHJ1Y3QgdHVwbGVfZWxlbWVudDwwLCBzdGQ6OnBhaXI8X1RwMSwgX1RwMj4gPgorICAgIHsgdHlwZWRlZiBfVHAxIHR5cGU7IH07CisgCisgIHRlbXBsYXRlPGNsYXNzIF9UcDEsIGNsYXNzIF9UcDI+CisgICAgc3RydWN0IHR1cGxlX2VsZW1lbnQ8MSwgc3RkOjpwYWlyPF9UcDEsIF9UcDI+ID4KKyAgICB7IHR5cGVkZWYgX1RwMiB0eXBlOyB9OworCisgIHRlbXBsYXRlPGludCBfSW50PgorICAgIHN0cnVjdCBfX3BhaXJfZ2V0OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19wYWlyX2dldDwwPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgICBzdGF0aWMgX1RwMSYgX19nZXQoc3RkOjpwYWlyPF9UcDEsIF9UcDI+JiBfX3BhaXIpCisgICAgICB7IHJldHVybiBfX3BhaXIuZmlyc3Q7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICAgIHN0YXRpYyBjb25zdCBfVHAxJiBfX2NvbnN0X2dldChjb25zdCBzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mIF9fcGFpcikKKyAgICAgIHsgcmV0dXJuIF9fcGFpci5maXJzdDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3BhaXJfZ2V0PDE+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICAgIHN0YXRpYyBfVHAyJiBfX2dldChzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mIF9fcGFpcikKKyAgICAgIHsgcmV0dXJuIF9fcGFpci5zZWNvbmQ7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICAgIHN0YXRpYyBjb25zdCBfVHAyJiBfX2NvbnN0X2dldChjb25zdCBzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mIF9fcGFpcikKKyAgICAgIHsgcmV0dXJuIF9fcGFpci5zZWNvbmQ7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPGludCBfSW50LCBjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgorICAgIGlubGluZSB0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9JbnQsIHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiA+Ojp0eXBlJgorICAgIGdldChzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mIF9faW4pCisgICAgeyByZXR1cm4gX19wYWlyX2dldDxfSW50Pjo6X19nZXQoX19pbik7IH0KKworICB0ZW1wbGF0ZTxpbnQgX0ludCwgY2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4KKyAgICBpbmxpbmUgY29uc3QgdHlwZW5hbWUgdHVwbGVfZWxlbWVudDxfSW50LCBzdGQ6OnBhaXI8X1RwMSwgX1RwMj4gPjo6dHlwZSYKKyAgICBnZXQoY29uc3Qgc3RkOjpwYWlyPF9UcDEsIF9UcDI+JiBfX2luKQorICAgIHsgcmV0dXJuIF9fcGFpcl9nZXQ8X0ludD46Ol9fY29uc3RfZ2V0KF9faW4pOyB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1VUSUxJVFkKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIxL3djaGFyLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS93Y2hhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTZhODUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS93Y2hhci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFRSMSB3Y2hhci5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvd2NoYXIuaAorICogIFRoaXMgaXMgYSBUUjEgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1RSMV9XQ0hBUl9ICisjZGVmaW5lIF9HTElCQ1hYX1RSMV9XQ0hBUl9IIDEKKworI2luY2x1ZGUgPHRyMS9jd2NoYXI+CisKKyNlbmRpZiAvLyBfR0xJQkNYWF9UUjFfV0NIQVJfSApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvd2N0eXBlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMS93Y3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTY4YTEzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjEvd2N0eXBlLmgKQEAgLTAsMCArMSwzNCBAQAorLy8gVFIxIHdjdHlwZS5oIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSB0cjEvd2N0eXBlLmgKKyAqICBUaGlzIGlzIGEgVFIxIEMrKyBMaWJyYXJ5IGhlYWRlci4gCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjFfV0NUWVBFX0gKKyNkZWZpbmUgX0dMSUJDWFhfVFIxX1dDVFlQRV9IIDEKKworI2luY2x1ZGUgPHRyMS9jd2N0eXBlPgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIxX1dDVFlQRV9ICmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMi9ib29sX3NldCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIyL2Jvb2xfc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTU2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMi9ib29sX3NldApAQCAtMCwwICsxLDMyMCBAQAorLy8gVFIyIDxib29sX3NldD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMi9ib29sX3NldAorICogIFRoaXMgaXMgYSBUUjIgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIyX0JPT0xfU0VUCisjZGVmaW5lIF9HTElCQ1hYX1RSMl9CT09MX1NFVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPHR5cGVpbmZvPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjIKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqICBib29sX3NldAorICAgKgorICAgKiAgU2VlIE4yMTM2LCBCb29sX3NldDogbXVsdGktdmFsdWVkIGxvZ2ljCisgICAqICBieSBIZXJ26SBCcvZubmltYW5uLCBHdWlsbGF1bWUgTWVscXVpb25kLCBTeWx2YWluIFBpb24uCisgICAqCisgICAqICBUaGUgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGlzIHNsaXBwZXJ5ISAgSSBtYXkgdXNlIHRoZSBuZXcKKyAgICogIGV4cGxpY2l0IGNvbnZlcnNpb24uICBUaGlzIGhhcyBiZWVuIHNwZWNpYWxpemVkIGluIHRoZSBsYW5ndWFnZQorICAgKiAgc28gdGhhdCBpbiBjb250ZXh0cyByZXF1aXJpbmcgYSBib29sIHRoZSBjb252ZXJzaW9uIGhhcHBlbnMKKyAgICogIGltcGxpY2l0bHkuICBUaHVzIG1vc3Qgb2JqZWN0aW9ucyBzaG91bGQgYmUgZWxpbWluYXRlZC4KKyAgICovCisgIGNsYXNzIGJvb2xfc2V0CisgIHsKKyAgcHVibGljOgorCisgICAgLy8vICBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgIGNvbnN0ZXhwciBib29sX3NldCgpIDogX01fYihfU19mYWxzZSkgeyB9CisKKyAgICAvLy8gIENvbnN0cnVjdG9yIGZyb20gYm9vbC4KKyAgICBjb25zdGV4cHIgYm9vbF9zZXQoYm9vbCBfX3QpIDogX01fYihfQm9vbF9zZXRfdmFsKF9fdCkpIHsgfQorCisgICAgLy8gSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMuCisgICAgYm9vbCBjb250YWlucyhib29sX3NldCBfX2IpIGNvbnN0CisgICAgeyByZXR1cm4gdGhpcy0+aXNfc2luZ2xldG9uKCkgJiYgdGhpcy0+ZXF1YWxzKF9fYik7IH0KKworICAgIC8vLyAgUmV0dXJuIHRydWUgaWYgc3RhdGVzIGFyZSBlcXVhbC4KKyAgICBib29sIGVxdWFscyhib29sX3NldCBfX2IpIGNvbnN0CisgICAgeyByZXR1cm4gX19iLl9NX2IgPT0gX01fYjsgfQorCisgICAgLy8vICBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGVtcHR5LgorICAgIGJvb2wgaXNfZW1wdHlzZXQoKSBjb25zdAorICAgIHsgcmV0dXJuIF9NX2IgPT0gX1NfZW1wdHk7IH0KKworICAgIC8vLyAgUmV0dXJuIHRydWUgaWYgdGhpcyBpcyBpbmRldGVybWluYXRlLgorICAgIGJvb2wgaXNfaW5kZXRlcm1pbmF0ZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fYiA9PSBfU19pbmRldDsgfQorCisgICAgLy8vICBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGZhbHNlIG9yIHRydWUgKG5vcm1hbCBib29sZWFuKS4KKyAgICBib29sIGlzX3NpbmdsZXRvbigpIGNvbnN0CisgICAgeyByZXR1cm4gX01fYiA9PSBfU19mYWxzZSB8fCBfTV9iID09IF9TX3RydWVfOyB9CisKKyAgICAvLy8gIENvbnZlcnNpb24gdG8gYm9vbC4KKyAgICAvL2V4cGxpY2l0CisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgaWYgKCEgaXNfc2luZ2xldG9uKCkpCisJdGhyb3cgc3RkOjpiYWRfY2FzdCgpOworICAgICAgcmV0dXJuIF9NX2I7CisgICAgfQorCisgICAgLy8vCisgICAgc3RhdGljIGJvb2xfc2V0IGluZGV0ZXJtaW5hdGUoKQorICAgIHsKKyAgICAgIGJvb2xfc2V0IF9fYjsKKyAgICAgIF9fYi5fTV9iID0gX1NfaW5kZXQ7CisgICAgICByZXR1cm4gX19iOworICAgIH0KKworICAgIC8vLworICAgIHN0YXRpYyBib29sX3NldCBlbXB0eXNldCgpCisgICAgeworICAgICAgYm9vbF9zZXQgX19iOworICAgICAgX19iLl9NX2IgPSBfU19lbXB0eTsKKyAgICAgIHJldHVybiBfX2I7CisgICAgfQorCisgICAgZnJpZW5kIGJvb2xfc2V0CisgICAgb3BlcmF0b3IhKGJvb2xfc2V0IF9fYikKKyAgICB7IHJldHVybiBfX2IuX01fbm90KCk7IH0KKworICAgIGZyaWVuZCBib29sX3NldAorICAgIG9wZXJhdG9yXihib29sX3NldCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgICB7IHJldHVybiBfX3MuX01feG9yKF9fdCk7IH0KKworICAgIGZyaWVuZCBib29sX3NldAorICAgIG9wZXJhdG9yfChib29sX3NldCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgICB7IHJldHVybiBfX3MuX01fb3IoX190KTsgfQorCisgICAgZnJpZW5kIGJvb2xfc2V0CisgICAgb3BlcmF0b3ImKGJvb2xfc2V0IF9fcywgYm9vbF9zZXQgX190KQorICAgIHsgcmV0dXJuIF9fcy5fTV9hbmQoX190KTsgfQorCisgICAgZnJpZW5kIGJvb2xfc2V0CisgICAgb3BlcmF0b3I9PShib29sX3NldCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgICB7IHJldHVybiBfX3MuX01fZXEoX190KTsgfQorCisKKyAgICAvLyAgVGhlc2Ugb3ZlcmxvYWRzIHJlcGxhY2UgdGhlIGZhY2V0IGFkZGl0aW9ucyBpbiB0aGUgcGFwZXIhCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVCwgdHlwZW5hbWUgVHJhaXRzPgorICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfb3N0cmVhbTxDaGFyVCwgVHJhaXRzPiYKKyAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPENoYXJULCBUcmFpdHM+JiBfX291dCwgYm9vbF9zZXQgX19iKQorICAgICAgeworCWludCBfX2EgPSBfX2IuX01fYjsKKwlfX291dCA8PCBfX2E7CisgICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVCwgdHlwZW5hbWUgVHJhaXRzPgorICAgICAgZnJpZW5kIHN0ZDo6YmFzaWNfaXN0cmVhbTxDaGFyVCwgVHJhaXRzPiYKKyAgICAgIG9wZXJhdG9yPj4oc3RkOjpiYXNpY19pc3RyZWFtPENoYXJULCBUcmFpdHM+JiBfX2luLCBib29sX3NldCYgX19iKQorICAgICAgeworCWxvbmcgX19jOworCV9faW4gPj4gX19jOworCWlmIChfX2MgPj0gX1NfZmFsc2UgJiYgX19jIDwgX1NfZW1wdHkpCisJICBfX2IuX01fYiA9IHN0YXRpY19jYXN0PF9Cb29sX3NldF92YWw+KF9fYyk7CisgICAgICB9CisKKyAgcHJpdmF0ZToKKworICAgIC8vLworICAgIGVudW0gX0Jvb2xfc2V0X3ZhbDogdW5zaWduZWQgY2hhcgorICAgIHsKKyAgICAgIF9TX2ZhbHNlID0gMCwKKyAgICAgIF9TX3RydWVfID0gMSwKKyAgICAgIF9TX2luZGV0ID0gMiwKKyAgICAgIF9TX2VtcHR5ID0gMworICAgIH07CisKKyAgICAvLy8gIEJvb2wgc2V0IHN0YXRlLgorICAgIF9Cb29sX3NldF92YWwgX01fYjsKKworICAgIC8vLworICAgIGJvb2xfc2V0KF9Cb29sX3NldF92YWwgX19jKSA6IF9NX2IoX19jKSB7IH0KKworICAgIC8vLworICAgIGJvb2xfc2V0IF9NX25vdCgpIGNvbnN0CisgICAgeyByZXR1cm4gX1Nfbm90W3RoaXMtPl9NX2JdOyB9CisKKyAgICAvLy8KKyAgICBib29sX3NldCBfTV94b3IoYm9vbF9zZXQgX19iKSBjb25zdAorICAgIHsgcmV0dXJuIF9TX3hvclt0aGlzLT5fTV9iXVtfX2IuX01fYl07IH0KKworICAgIC8vLworICAgIGJvb2xfc2V0IF9NX29yKGJvb2xfc2V0IF9fYikgY29uc3QKKyAgICB7IHJldHVybiBfU19vclt0aGlzLT5fTV9iXVtfX2IuX01fYl07IH0KKworICAgIC8vLworICAgIGJvb2xfc2V0IF9NX2FuZChib29sX3NldCBfX2IpIGNvbnN0CisgICAgeyByZXR1cm4gX1NfYW5kW3RoaXMtPl9NX2JdW19fYi5fTV9iXTsgfQorCisgICAgLy8vCisgICAgYm9vbF9zZXQgX01fZXEoYm9vbF9zZXQgX19iKSBjb25zdAorICAgIHsgcmV0dXJuIF9TX2VxW3RoaXMtPl9NX2JdW19fYi5fTV9iXTsgfQorCisgICAgLy8vCisgICAgc3RhdGljIF9Cb29sX3NldF92YWwgX1Nfbm90WzRdOworCisgICAgLy8vCisgICAgc3RhdGljIF9Cb29sX3NldF92YWwgX1NfeG9yWzRdWzRdOworCisgICAgLy8vCisgICAgc3RhdGljIF9Cb29sX3NldF92YWwgX1Nfb3JbNF1bNF07CisKKyAgICAvLy8KKyAgICBzdGF0aWMgX0Jvb2xfc2V0X3ZhbCBfU19hbmRbNF1bNF07CisKKyAgICAvLy8KKyAgICBzdGF0aWMgX0Jvb2xfc2V0X3ZhbCBfU19lcVs0XVs0XTsKKyAgfTsKKworICAvLyAgMjAuMi4zLjIgYm9vbF9zZXQgdmFsdWVzCisKKyAgaW5saW5lIGJvb2wKKyAgY29udGFpbnMoYm9vbF9zZXQgX19zLCBib29sX3NldCBfX3QpCisgIHsgcmV0dXJuIF9fcy5jb250YWlucyhfX3QpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgZXF1YWxzKGJvb2xfc2V0IF9fcywgYm9vbF9zZXQgX190KQorICB7IHJldHVybiBfX3MuZXF1YWxzKF9fdCk7IH0KKworICBpbmxpbmUgYm9vbAorICBpc19lbXB0eXNldChib29sX3NldCBfX2IpCisgIHsgcmV0dXJuIF9fYi5pc19lbXB0eXNldCgpOyB9CisKKyAgaW5saW5lIGJvb2wKKyAgaXNfaW5kZXRlcm1pbmF0ZShib29sX3NldCBfX2IpCisgIHsgcmV0dXJuIF9fYi5pc19pbmRldGVybWluYXRlKCk7IH0KKworICBpbmxpbmUgYm9vbAorICBpc19zaW5nbGV0b24oYm9vbF9zZXQgX19iKQorICB7IHJldHVybiBfX2IuaXNfc2luZ2xldG9uKCk7IH0KKworICBpbmxpbmUgYm9vbAorICBjZXJ0YWlubHkoYm9vbF9zZXQgX19iKQorICB7IHJldHVybiAhIF9fYi5jb250YWlucyhmYWxzZSk7IH0KKworICBpbmxpbmUgYm9vbAorICBwb3NzaWJseShib29sX3NldCBfX2IpCisgIHsgcmV0dXJuIF9fYi5jb250YWlucyh0cnVlKTsgfQorCisKKyAgLy8gIDIwLjIuMy4zIGJvb2xfc2V0IHNldCBvcGVyYXRpb25zCisKKyAgaW5saW5lIGJvb2xfc2V0CisgIHNldF91bmlvbihib29sIF9fcywgYm9vbF9zZXQgX190KQorICB7IHJldHVybiBib29sX3NldChfX3MpIHwgX190OyB9CisKKyAgaW5saW5lIGJvb2xfc2V0CisgIHNldF91bmlvbihib29sX3NldCBfX3MsIGJvb2wgX190KQorICB7IHJldHVybiBfX3MgfCBib29sX3NldChfX3QpOyB9CisKKyAgaW5saW5lIGJvb2xfc2V0CisgIHNldF91bmlvbihib29sX3NldCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgeyByZXR1cm4gX19zIHwgX190OyB9CisKKyAgaW5saW5lIGJvb2xfc2V0CisgIHNldF9pbnRlcnNlY3Rpb24oYm9vbCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgeyByZXR1cm4gYm9vbF9zZXQoX19zKSAmIF9fdDsgfQorCisgIGlubGluZSBib29sX3NldAorICBzZXRfaW50ZXJzZWN0aW9uKGJvb2xfc2V0IF9fcywgYm9vbCBfX3QpCisgIHsgcmV0dXJuIF9fcyAmIGJvb2xfc2V0KF9fdCk7IH0KKworICBpbmxpbmUgYm9vbF9zZXQKKyAgc2V0X2ludGVyc2VjdGlvbihib29sX3NldCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgeyByZXR1cm4gX19zICYgX190OyB9CisKKyAgaW5saW5lIGJvb2xfc2V0CisgIHNldF9jb21wbGVtZW50KGJvb2xfc2V0IF9fYikKKyAgeyByZXR1cm4gISBfX2I7IH0KKworCisgIC8vICAyMC4yLjMuNCBib29sX3NldCBsb2dpY2FsIG9wZXJhdG9ycworCisgIGlubGluZSBib29sX3NldAorICBvcGVyYXRvcl4oYm9vbCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgeyByZXR1cm4gYm9vbF9zZXQoX19zKSBeIF9fdDsgfQorCisgIGlubGluZSBib29sX3NldAorICBvcGVyYXRvcl4oYm9vbF9zZXQgX19zLCBib29sIF9fdCkKKyAgeyByZXR1cm4gX19zIF4gYm9vbF9zZXQoX190KTsgfQorCisgIGlubGluZSBib29sX3NldAorICBvcGVyYXRvcnwoYm9vbCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgeyByZXR1cm4gYm9vbF9zZXQoX19zKSB8IF9fdDsgfQorCisgIGlubGluZSBib29sX3NldAorICBvcGVyYXRvcnwoYm9vbF9zZXQgX19zLCBib29sIF9fdCkKKyAgeyByZXR1cm4gX19zIHwgYm9vbF9zZXQoX190KTsgfQorCisgIGlubGluZSBib29sX3NldAorICBvcGVyYXRvciYoYm9vbCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgeyByZXR1cm4gYm9vbF9zZXQoX19zKSAmIF9fdDsgfQorCisgIGlubGluZSBib29sX3NldAorICBvcGVyYXRvciYoYm9vbF9zZXQgX19zLCBib29sIF9fdCkKKyAgeyByZXR1cm4gX19zICYgYm9vbF9zZXQoX190KTsgfQorCisKKyAgLy8gIDIwLjIuMy41IGJvb2xfc2V0IHJlbGF0aW9uYWwgb3BlcmF0b3JzCisKKyAgaW5saW5lIGJvb2xfc2V0CisgIG9wZXJhdG9yPT0oYm9vbCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgeyByZXR1cm4gYm9vbF9zZXQoX19zKSA9PSBfX3Q7IH0KKworICBpbmxpbmUgYm9vbF9zZXQKKyAgb3BlcmF0b3I9PShib29sX3NldCBfX3MsIGJvb2wgX190KQorICB7IHJldHVybiBfX3MgPT0gYm9vbF9zZXQoX190KTsgfQorCisgIGlubGluZSBib29sX3NldAorICBvcGVyYXRvciE9KGJvb2wgX19zLCBib29sX3NldCBfX3QpCisgIHsgcmV0dXJuICEgKF9fcyA9PSBfX3QpOyB9CisKKyAgaW5saW5lIGJvb2xfc2V0CisgIG9wZXJhdG9yIT0oYm9vbF9zZXQgX19zLCBib29sIF9fdCkKKyAgeyByZXR1cm4gISAoX19zID09IF9fdCk7IH0KKworICBpbmxpbmUgYm9vbF9zZXQKKyAgb3BlcmF0b3IhPShib29sX3NldCBfX3MsIGJvb2xfc2V0IF9fdCkKKyAgeyByZXR1cm4gISAoX19zID09IF9fdCk7IH0KKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9Cit9CisKKyNpbmNsdWRlIDx0cjIvYm9vbF9zZXQudGNjPgorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIyX0JPT0xfU0VUCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMi9ib29sX3NldC50Y2MgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMi9ib29sX3NldC50Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4ODdjYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIyL2Jvb2xfc2V0LnRjYwpAQCAtMCwwICsxLDI3NyBAQAorLy8gVFIyIDxib29sX3NldD4gc3VwcG9ydCBmaWxlcyAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIyL2Jvb2xfc2V0LnRjYworICogIFRoaXMgaXMgYSBUUjIgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIyX0JPT0xfU0VUX1RDQworI2RlZmluZSBfR0xJQkNYWF9UUjJfQk9PTF9TRVRfVENDIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjIKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgYm9vbF9zZXQ6Ol9Cb29sX3NldF92YWwKKyAgYm9vbF9zZXQ6Ol9TX25vdFs0XSA9CisgIHsgX1NfdHJ1ZV8sIF9TX2ZhbHNlLCBfU19pbmRldCwgX1NfZW1wdHkgfTsKKworICBib29sX3NldDo6X0Jvb2xfc2V0X3ZhbAorICBib29sX3NldDo6X1NfeG9yWzRdWzRdID0KKyAgeyB7IF9TX2ZhbHNlLCBfU190cnVlXywgX1NfaW5kZXQsIF9TX2VtcHR5IH0sCisgICAgeyBfU190cnVlXywgX1NfZmFsc2UsIF9TX2luZGV0LCBfU19lbXB0eSB9LAorICAgIHsgX1NfaW5kZXQsIF9TX2luZGV0LCBfU19pbmRldCwgX1NfZW1wdHkgfSwKKyAgICB7IF9TX2VtcHR5LCBfU19lbXB0eSwgX1NfZW1wdHksIF9TX2VtcHR5IH0gfTsKKworICBib29sX3NldDo6X0Jvb2xfc2V0X3ZhbAorICBib29sX3NldDo6X1Nfb3JbNF1bNF0gPQorICB7IHsgX1NfZmFsc2UsIF9TX3RydWVfLCBfU19pbmRldCwgX1NfZW1wdHkgfSwKKyAgICB7IF9TX3RydWVfLCBfU190cnVlXywgX1NfdHJ1ZV8sIF9TX2VtcHR5IH0sCisgICAgeyBfU19pbmRldCwgX1NfdHJ1ZV8sIF9TX2luZGV0LCBfU19lbXB0eSB9LAorICAgIHsgX1NfZW1wdHksIF9TX2VtcHR5LCBfU19lbXB0eSwgX1NfZW1wdHkgfSB9OworCisgIGJvb2xfc2V0OjpfQm9vbF9zZXRfdmFsCisgIGJvb2xfc2V0OjpfU19hbmRbNF1bNF0gPQorICB7IHsgX1NfZmFsc2UsIF9TX2ZhbHNlLCBfU19mYWxzZSwgX1NfZW1wdHkgfSwKKyAgICB7IF9TX2ZhbHNlLCBfU190cnVlXywgX1NfaW5kZXQsIF9TX2VtcHR5IH0sCisgICAgeyBfU19mYWxzZSwgX1NfaW5kZXQsIF9TX2luZGV0LCBfU19lbXB0eSB9LAorICAgIHsgX1NfZW1wdHksIF9TX2VtcHR5LCBfU19lbXB0eSwgX1NfZW1wdHkgfSB9OworCisgIGJvb2xfc2V0OjpfQm9vbF9zZXRfdmFsCisgIGJvb2xfc2V0OjpfU19lcVs0XVs0XSA9CisgIHsgeyBfU190cnVlXywgX1NfZmFsc2UsIF9TX2luZGV0LCBfU19lbXB0eSB9LAorICAgIHsgX1NfZmFsc2UsIF9TX3RydWVfLCBfU19pbmRldCwgX1NfZW1wdHkgfSwKKyAgICB7IF9TX2luZGV0LCBfU19pbmRldCwgX1NfaW5kZXQsIF9TX2VtcHR5IH0sCisgICAgeyBfU19lbXB0eSwgX1NfZW1wdHksIF9TX2VtcHR5LCBfU19lbXB0eSB9IH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisvLyAgSSBvYmplY3QgdG8gdGhlc2UgdGhpbmdzLgorLy8gIFRoZSBzdHVmZiBpbiBsb2NhbGUgZmFjZXRzIGFyZSBmb3IgYmFzaWMgdHlwZXMuCisvLyAgSSB0aGluayB3ZSBjb3VsZCBoYWNrIG9wZXJhdG9yPDwgYW5kIG9wZXJhdG9yPj4uCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTnVtZXJpYyBwYXJzaW5nLgorICAgICAgICoKKyAgICAgICAqICBQYXJzZXMgdGhlIGlucHV0IHN0cmVhbSBpbnRvIHRoZSBib29sIEBhIHYuICBJdCBkb2VzIHNvIGJ5IGNhbGxpbmcKKyAgICAgICAqICBudW1fZ2V0Ojpkb19nZXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OmJvb2xhbHBoYSBpcyBzZXQsIGF0dGVtcHRzIHRvIHJlYWQKKyAgICAgICAqICBjdHlwZTxDaGFyVD46OnRydWVuYW1lKCkgb3IgY3R5cGU8Q2hhclQ+OjpmYWxzZW5hbWUoKS4gIFNldHMKKyAgICAgICAqICBAYSB2IHRvIHRydWUgb3IgZmFsc2UgaWYgc3VjY2Vzc2Z1bC4gIFNldHMgZXJyIHRvCisgICAgICAgKiAgaW9zX2Jhc2U6OmZhaWxiaXQgaWYgcmVhZGluZyB0aGUgc3RyaW5nIGZhaWxzLiAgU2V0cyBlcnIgdG8KKyAgICAgICAqICBpb3NfYmFzZTo6ZW9mYml0IGlmIHRoZSBzdHJlYW0gaXMgZW1wdGllZC4KKyAgICAgICAqCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OmJvb2xhbHBoYSBpcyBub3Qgc2V0LCBwcm9jZWVkcyBhcyB3aXRoIHJlYWRpbmcgYSBsb25nLAorICAgICAgICogIGV4Y2VwdCBpZiB0aGUgdmFsdWUgaXMgMSwgc2V0cyBAYSB2IHRvIHRydWUsIGlmIHRoZSB2YWx1ZSBpcyAwLCBzZXRzCisgICAgICAgKiAgQGEgdiB0byBmYWxzZSwgYW5kIG90aGVyd2lzZSBzZXQgZXJyIHRvIGlvc19iYXNlOjpmYWlsYml0LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIGluICBTdGFydCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBlbmQgIEVuZCBvZiBpbnB1dCBzdHJlYW0uCisgICAgICAgKiAgQHBhcmFtICBpbyAgU291cmNlIG9mIGxvY2FsZSBhbmQgZmxhZ3MuCisgICAgICAgKiAgQHBhcmFtICBlcnIgIEVycm9yIGZsYWdzIHRvIHNldC4KKyAgICAgICAqICBAcGFyYW0gIHYgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHJlYWRpbmcuCisgICAgICBpdGVyX3R5cGUKKyAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQorICAgICAgICovCisvKgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CisgICAgX0luSXRlcgorICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CisgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKKwkgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2xfc2V0JiBfX3YpIGNvbnN0CisgICAgeworICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkpCisJeworCSAgLy8gUGFyc2UgYm9vbCB2YWx1ZXMgYXMgbG9uZy4KKwkgIC8vIE5COiBXZSBjYW4ndCBqdXN0IGNhbGwgZG9fZ2V0KGxvbmcpIGhlcmUsIGFzIGl0IG1pZ2h0CisJICAvLyByZWZlciB0byBhIGRlcml2ZWQgY2xhc3MuCisJICBsb25nIF9fbCA9IC0xOworCSAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX2wpOworCSAgaWYgKF9fYyA+PSBfU19mYWxzZSAmJiBfX2MgPCBfU19lbXB0eSkKKwkgICAgX19iLl9NX2IgPSBzdGF0aWNfY2FzdDxfQm9vbF9zZXRfdmFsPihfX2MpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gV2hhdCBzaG91bGQgd2UgZG8gaGVyZT8KKwkgICAgICBfX3YgPSB0cnVlOworCSAgICAgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQorCQlfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8vIFBhcnNlIGJvb2wgdmFsdWVzIGFzIGFscGhhbnVtZXJpYy4KKwkgIHR5cGVkZWYgX19udW1wdW5jdF9jYWNoZTxfQ2hhclQ+ICBfX2NhY2hlX3R5cGU7CisJICBfX3VzZV9jYWNoZTxfX2NhY2hlX3R5cGU+IF9fdWM7CisJICBjb25zdCBsb2NhbGUmIF9fbG9jID0gX19pby5fTV9nZXRsb2MoKTsKKwkgIGNvbnN0IF9fY2FjaGVfdHlwZSogX19sYyA9IF9fdWMoX19sb2MpOworCisJICBib29sIF9fdGVzdGYgPSB0cnVlOworCSAgYm9vbCBfX3Rlc3R0ID0gdHJ1ZTsKKwkgIGJvb2wgX19kb25lZiA9IF9fbGMtPl9NX2ZhbHNlbmFtZV9zaXplID09IDA7CisJICBib29sIF9fZG9uZXQgPSBfX2xjLT5fTV90cnVlbmFtZV9zaXplID09IDA7CisJICBib29sIF9fdGVzdGVvZiA9IGZhbHNlOworCSAgc2l6ZV90IF9fbiA9IDA7CisJICB3aGlsZSAoIV9fZG9uZWYgfHwgIV9fZG9uZXQpCisJICAgIHsKKwkgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCisJCXsKKwkJICBfX3Rlc3Rlb2YgPSB0cnVlOworCQkgIGJyZWFrOworCQl9CisKKwkgICAgICBjb25zdCBjaGFyX3R5cGUgX19jID0gKl9fYmVnOworCisJICAgICAgaWYgKCFfX2RvbmVmKQorCQlfX3Rlc3RmID0gX19jID09IF9fbGMtPl9NX2ZhbHNlbmFtZVtfX25dOworCisJICAgICAgaWYgKCFfX3Rlc3RmICYmIF9fZG9uZXQpCisJCWJyZWFrOworCisJICAgICAgaWYgKCFfX2RvbmV0KQorCQlfX3Rlc3R0ID0gX19jID09IF9fbGMtPl9NX3RydWVuYW1lW19fbl07CisKKwkgICAgICBpZiAoIV9fdGVzdHQgJiYgX19kb25lZikKKwkJYnJlYWs7CisKKwkgICAgICBpZiAoIV9fdGVzdHQgJiYgIV9fdGVzdGYpCisJCWJyZWFrOworCisJICAgICAgKytfX247CisJICAgICAgKytfX2JlZzsKKworCSAgICAgIF9fZG9uZWYgPSAhX190ZXN0ZiB8fCBfX24gPj0gX19sYy0+X01fZmFsc2VuYW1lX3NpemU7CisJICAgICAgX19kb25ldCA9ICFfX3Rlc3R0IHx8IF9fbiA+PSBfX2xjLT5fTV90cnVlbmFtZV9zaXplOworCSAgICB9CisJICBpZiAoX190ZXN0ZiAmJiBfX24gPT0gX19sYy0+X01fZmFsc2VuYW1lX3NpemUgJiYgX19uKQorCSAgICB7CisJICAgICAgX192ID0gZmFsc2U7CisJICAgICAgaWYgKF9fdGVzdHQgJiYgX19uID09IF9fbGMtPl9NX3RydWVuYW1lX3NpemUpCisJCV9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgICAgZWxzZQorCQlfX2VyciA9IF9fdGVzdGVvZiA/IGlvc19iYXNlOjplb2ZiaXQgOiBpb3NfYmFzZTo6Z29vZGJpdDsKKwkgICAgfQorCSAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX19sYy0+X01fdHJ1ZW5hbWVfc2l6ZSAmJiBfX24pCisJICAgIHsKKwkgICAgICBfX3YgPSB0cnVlOworCSAgICAgIF9fZXJyID0gX190ZXN0ZW9mID8gaW9zX2Jhc2U6OmVvZmJpdCA6IGlvc19iYXNlOjpnb29kYml0OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisJICAgICAgLy8gMjMuIE51bV9nZXQgb3ZlcmZsb3cgcmVzdWx0LgorCSAgICAgIF9fdiA9IGZhbHNlOworCSAgICAgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJICAgICAgaWYgKF9fdGVzdGVvZikKKwkJX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiBfX2JlZzsKKyAgICB9CisqLworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE51bWVyaWMgZm9ybWF0dGluZy4KKyAgICAgICAqCisgICAgICAgKiAgRm9ybWF0cyB0aGUgYm9vbGVhbiBAYSB2IGFuZCBpbnNlcnRzIGl0IGludG8gYSBzdHJlYW0uICBJdCBkb2VzIHNvCisgICAgICAgKiAgYnkgY2FsbGluZyBudW1fcHV0Ojpkb19wdXQoKS4KKyAgICAgICAqCisgICAgICAgKiAgSWYgaW9zX2Jhc2U6OmJvb2xhbHBoYSBpcyBzZXQsIHdyaXRlcyBjdHlwZTxDaGFyVD46OnRydWVuYW1lKCkgb3IKKyAgICAgICAqICBjdHlwZTxDaGFyVD46OmZhbHNlbmFtZSgpLiAgT3RoZXJ3aXNlIGZvcm1hdHMgQGEgdiBhcyBhbiBpbnQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgcyAgU3RyZWFtIHRvIHdyaXRlIHRvLgorICAgICAgICogIEBwYXJhbSAgaW8gIFNvdXJjZSBvZiBsb2NhbGUgYW5kIGZsYWdzLgorICAgICAgICogIEBwYXJhbSAgZmlsbCAgQ2hhcl90eXBlIHRvIHVzZSBmb3IgZmlsbGluZy4KKyAgICAgICAqICBAcGFyYW0gIHYgIFZhbHVlIHRvIGZvcm1hdCBhbmQgaW5zZXJ0LgorICAgICAgICogIEByZXR1cm4gIEl0ZXJhdG9yIGFmdGVyIHdyaXRpbmcuCisgICAgICBpdGVyX3R5cGUKKyAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CisgICAgICAgKi8KKworLyoKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KKyAgICBfT3V0SXRlcgorICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgorICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbF9zZXQgX192KSBjb25zdAorICAgIHsKKyAgICAgIGNvbnN0IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOworICAgICAgaWYgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkKKwl7CisJICBjb25zdCBsb25nIF9fbCA9IF9fdjsKKwkgIF9fcyA9IF9NX2luc2VydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIHR5cGVkZWYgX19udW1wdW5jdF9jYWNoZTxfQ2hhclQ+IF9fY2FjaGVfdHlwZTsKKwkgIF9fdXNlX2NhY2hlPF9fY2FjaGVfdHlwZT4gX191YzsKKwkgIGNvbnN0IGxvY2FsZSYgX19sb2MgPSBfX2lvLl9NX2dldGxvYygpOworCSAgY29uc3QgX19jYWNoZV90eXBlKiBfX2xjID0gX191YyhfX2xvYyk7CisKKwkgIGNvbnN0IF9DaGFyVCogX19uYW1lID0gX192ID8gX19sYy0+X01fdHJ1ZW5hbWUKKwkJCQkgICAgIDogX19sYy0+X01fZmFsc2VuYW1lOworCSAgaW50IF9fbGVuID0gX192ID8gX19sYy0+X01fdHJ1ZW5hbWVfc2l6ZQorCQkJICA6IF9fbGMtPl9NX2ZhbHNlbmFtZV9zaXplOworCisJICBjb25zdCBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKKwkgIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2xlbikpCisJICAgIHsKKwkgICAgICBjb25zdCBzdHJlYW1zaXplIF9fcGxlbiA9IF9fdyAtIF9fbGVuOworCSAgICAgIF9DaGFyVCogX19wcworCQk9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKKwkJCQkJCQkqIF9fcGxlbikpOworCisJICAgICAgY2hhcl90cmFpdHM8X0NoYXJUPjo6YXNzaWduKF9fcHMsIF9fcGxlbiwgX19maWxsKTsKKwkgICAgICBfX2lvLndpZHRoKDApOworCisJICAgICAgaWYgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKSA9PSBpb3NfYmFzZTo6bGVmdCkKKwkJeworCQkgIF9fcyA9IHN0ZDo6X193cml0ZShfX3MsIF9fbmFtZSwgX19sZW4pOworCQkgIF9fcyA9IHN0ZDo6X193cml0ZShfX3MsIF9fcHMsIF9fcGxlbik7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBfX3MgPSBzdGQ6Ol9fd3JpdGUoX19zLCBfX3BzLCBfX3BsZW4pOworCQkgIF9fcyA9IHN0ZDo6X193cml0ZShfX3MsIF9fbmFtZSwgX19sZW4pOworCQl9CisJICAgICAgcmV0dXJuIF9fczsKKwkgICAgfQorCSAgX19pby53aWR0aCgwKTsKKwkgIF9fcyA9IHN0ZDo6X193cml0ZShfX3MsIF9fbmFtZSwgX19sZW4pOworCX0KKyAgICAgIHJldHVybiBfX3M7CisgICAgfQorKi8KKworI2VuZGlmIC8vIF9HTElCQ1hYX1RSMl9CT09MX1NFVF9UQ0MKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIyL2R5bmFtaWNfYml0c2V0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjIvZHluYW1pY19iaXRzZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlOWRjMgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIyL2R5bmFtaWNfYml0c2V0CkBAIC0wLDAgKzEsMTQ3MiBAQAorLy8gVFIyIDxkeW5hbWljX2JpdHNldD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIHRyMi9keW5hbWljX2JpdHNldAorICogIFRoaXMgaXMgYSBUUjIgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFIyX0RZTkFNSUNfQklUU0VUCisjZGVmaW5lIF9HTElCQ1hYX1RSMl9EWU5BTUlDX0JJVFNFVCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPG1lbW9yeT4gLy8gRm9yIHN0ZDo6YWxsb2NhdG9yCisjaW5jbHVkZSA8Yml0cy9mdW5jdGV4Y2VwdC5oPiAgIC8vIEZvciBpbnZhbGlkX2FyZ3VtZW50LCBvdXRfb2ZfcmFuZ2UsCisJCQkJLy8gb3ZlcmZsb3dfZXJyb3IKKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8Yml0cy9jeHhhYmlfZm9yY2VkLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMgoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIER5bmFtaWMgQml0c2V0LgorICAgKgorICAgKiAgU2VlIE4yMDUwLAorICAgKiAgUHJvcG9zYWwgdG8gQWRkIGEgRHluYW1pY2FsbHkgU2l6ZWFibGUgQml0c2V0IHRvIHRoZSBTdGFuZGFyZCBMaWJyYXJ5LgorICAgKi8KK25hbWVzcGFjZSBfX2RldGFpbAoreworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgX0Jvb2wyVUNoYXIKK3sKKyAgdHlwZWRlZiBUIHR5cGU7Cit9OworCit0ZW1wbGF0ZTw+CitjbGFzcyBfQm9vbDJVQ2hhcjxib29sPgoreworcHVibGljOgorICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsKK307CisKK30KKworICAvKioKKyAgICogIEJhc2UgY2xhc3MsIGdlbmVyYWwgY2FzZS4KKyAgICoKKyAgICogIFNlZSBkb2N1bWVudGF0aW9uIGZvciBkeW5hbWljX2JpdHNldC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Xb3JkVCA9IHVuc2lnbmVkIGxvbmcgbG9uZywKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfV29yZFQ+PgorICAgIHN0cnVjdCBfX2R5bmFtaWNfYml0c2V0X2Jhc2UKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8X1dvcmRUPjo6dmFsdWUsICJ0ZW1wbGF0ZSBhcmd1bWVudCAiCisJCSAgICAiX1dvcmRUIG5vdCBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIik7CisKKyAgICAgIHR5cGVkZWYgX1dvcmRUIGJsb2NrX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKworICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBfU19iaXRzX3Blcl9ibG9jayA9IF9fQ0hBUl9CSVRfXyAqIHNpemVvZihibG9ja190eXBlKTsKKyAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOworCisgICAgICAvLy8gMCBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgd29yZC4KKyAgICAgIHN0ZDo6dmVjdG9yPGJsb2NrX3R5cGUsIGFsbG9jYXRvcl90eXBlPiBfTV93OworCisgICAgICBleHBsaWNpdAorICAgICAgX19keW5hbWljX2JpdHNldF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2FsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX01fdyhfX2FsbG9jKQorICAgICAgeyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX2R5bmFtaWNfYml0c2V0X2Jhc2UoX19keW5hbWljX2JpdHNldF9iYXNlJiYgX19iKQorICAgICAgeyB0aGlzLT5fTV93LnN3YXAoX19iLl9NX3cpOyB9CisKKyAgICAgIGV4cGxpY2l0CisgICAgICBfX2R5bmFtaWNfYml0c2V0X2Jhc2Uoc2l6ZV90eXBlIF9fbmJpdHMsIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCA9IDBVTEwsCisJCQkgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hbGxvYyA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9NX3coX19uYml0cyAvIF9TX2JpdHNfcGVyX2Jsb2NrCisJICAgICArIChfX25iaXRzICUgX1NfYml0c19wZXJfYmxvY2sgPiAwKSwKKwkgICAgIF9fdmFsLCBfX2FsbG9jKQorICAgICAgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBfX21hc2sgPSB+c3RhdGljX2Nhc3Q8YmxvY2tfdHlwZT4oMCk7CisJc2l6ZV90IF9fbiA9IHN0ZDo6bWluKHRoaXMtPl9NX3cuc2l6ZSgpLAorCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgLyBzaXplb2YoYmxvY2tfdHlwZSkpOworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCisJICB7CisJICAgIHRoaXMtPl9NX3dbX19pXSA9IChfX3ZhbCAmIF9fbWFzaykgPj4gKF9faSAqIF9TX2JpdHNfcGVyX2Jsb2NrKTsKKwkgICAgX19tYXNrIDw8PSBfU19iaXRzX3Blcl9ibG9jazsKKwkgIH0KKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fYXNzaWduKGNvbnN0IF9fZHluYW1pY19iaXRzZXRfYmFzZSYgX19iKQorICAgICAgeyB0aGlzLT5fTV93ID0gX19iLl9NX3c7IH0KKworICAgICAgdm9pZAorICAgICAgX01fc3dhcChfX2R5bmFtaWNfYml0c2V0X2Jhc2UmIF9fYikKKyAgICAgIHsgdGhpcy0+X01fdy5zd2FwKF9fYi5fTV93KTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9jbGVhcigpCisgICAgICB7IHRoaXMtPl9NX3cuY2xlYXIoKTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9yZXNpemUoc2l6ZV90IF9fbmJpdHMsIGJvb2wgX192YWx1ZSkKKyAgICAgIHsKKwlzaXplX3QgX19zeiA9IF9fbmJpdHMgLyBfU19iaXRzX3Blcl9ibG9jazsKKwlpZiAoX19uYml0cyAlIF9TX2JpdHNfcGVyX2Jsb2NrID4gMCkKKwkgICsrX19zejsKKwlpZiAoX19zeiAhPSB0aGlzLT5fTV93LnNpemUoKSkKKwkgIHRoaXMtPl9NX3cucmVzaXplKF9fc3opOworICAgICAgfQorCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgX01fZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV93LmdldF9hbGxvY2F0b3IoKTsgfQorCisgICAgICBzdGF0aWMgc2l6ZV90eXBlCisgICAgICBfU193aGljaHdvcmQoc2l6ZV90eXBlIF9fcG9zKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gX19wb3MgLyBfU19iaXRzX3Blcl9ibG9jazsgfQorCisgICAgICBzdGF0aWMgc2l6ZV90eXBlCisgICAgICBfU193aGljaGJ5dGUoc2l6ZV90eXBlIF9fcG9zKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gKF9fcG9zICUgX1NfYml0c19wZXJfYmxvY2spIC8gX19DSEFSX0JJVF9fOyB9CisKKyAgICAgIHN0YXRpYyBzaXplX3R5cGUKKyAgICAgIF9TX3doaWNoYml0KHNpemVfdHlwZSBfX3Bvcykgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fcG9zICUgX1NfYml0c19wZXJfYmxvY2s7IH0KKworICAgICAgc3RhdGljIGJsb2NrX3R5cGUKKyAgICAgIF9TX21hc2tiaXQoc2l6ZV90eXBlIF9fcG9zKSBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gKHN0YXRpY19jYXN0PGJsb2NrX3R5cGU+KDEpKSA8PCBfU193aGljaGJpdChfX3Bvcyk7IH0KKworICAgICAgYmxvY2tfdHlwZSYKKyAgICAgIF9NX2dldHdvcmQoc2l6ZV90eXBlIF9fcG9zKQorICAgICAgeyByZXR1cm4gdGhpcy0+X01fd1tfU193aGljaHdvcmQoX19wb3MpXTsgfQorCisgICAgICBibG9ja190eXBlCisgICAgICBfTV9nZXR3b3JkKHNpemVfdHlwZSBfX3BvcykgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX3dbX1Nfd2hpY2h3b3JkKF9fcG9zKV07IH0KKworICAgICAgYmxvY2tfdHlwZSYKKyAgICAgIF9NX2hpd29yZCgpCisgICAgICB7IHJldHVybiB0aGlzLT5fTV93W19NX3cuc2l6ZSgpIC0gMV07IH0KKworICAgICAgYmxvY2tfdHlwZQorICAgICAgX01faGl3b3JkKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX3dbX01fdy5zaXplKCkgLSAxXTsgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19hbmQoY29uc3QgX19keW5hbWljX2JpdHNldF9iYXNlJiBfX3gpCisgICAgICB7CisJaWYgKF9feC5fTV93LnNpemUoKSA9PSB0aGlzLT5fTV93LnNpemUoKSkKKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IHRoaXMtPl9NX3cuc2l6ZSgpOyArK19faSkKKwkgICAgdGhpcy0+X01fd1tfX2ldICY9IF9feC5fTV93W19faV07CisJZWxzZQorCSAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19vcihjb25zdCBfX2R5bmFtaWNfYml0c2V0X2Jhc2UmIF9feCkKKyAgICAgIHsKKwlpZiAoX194Ll9NX3cuc2l6ZSgpID09IHRoaXMtPl9NX3cuc2l6ZSgpKQorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgdGhpcy0+X01fdy5zaXplKCk7ICsrX19pKQorCSAgICB0aGlzLT5fTV93W19faV0gfD0gX194Ll9NX3dbX19pXTsKKwllbHNlCisJICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX3hvcihjb25zdCBfX2R5bmFtaWNfYml0c2V0X2Jhc2UmIF9feCkKKyAgICAgIHsKKwlpZiAoX194Ll9NX3cuc2l6ZSgpID09IHRoaXMtPl9NX3cuc2l6ZSgpKQorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgdGhpcy0+X01fdy5zaXplKCk7ICsrX19pKQorCSAgICB0aGlzLT5fTV93W19faV0gXj0gX194Ll9NX3dbX19pXTsKKwllbHNlCisJICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2RvX2RpZihjb25zdCBfX2R5bmFtaWNfYml0c2V0X2Jhc2UmIF9feCkKKyAgICAgIHsKKwlpZiAoX194Ll9NX3cuc2l6ZSgpID09IHRoaXMtPl9NX3cuc2l6ZSgpKQorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgdGhpcy0+X01fdy5zaXplKCk7ICsrX19pKQorCSAgICB0aGlzLT5fTV93W19faV0gJj0gfl9feC5fTV93W19faV07CisJZWxzZQorCSAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19sZWZ0X3NoaWZ0KHNpemVfdCBfX3NoaWZ0KTsKKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmlnaHRfc2hpZnQoc2l6ZV90IF9fc2hpZnQpOworCisgICAgICB2b2lkCisgICAgICBfTV9kb19mbGlwKCkKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCB0aGlzLT5fTV93LnNpemUoKTsgKytfX2kpCisJICB0aGlzLT5fTV93W19faV0gPSB+dGhpcy0+X01fd1tfX2ldOworICAgICAgfQorCisgICAgICB2b2lkCisgICAgICBfTV9kb19zZXQoKQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IHRoaXMtPl9NX3cuc2l6ZSgpOyArK19faSkKKwkgIHRoaXMtPl9NX3dbX19pXSA9IH5zdGF0aWNfY2FzdDxibG9ja190eXBlPigwKTsKKyAgICAgIH0KKworICAgICAgdm9pZAorICAgICAgX01fZG9fcmVzZXQoKQorICAgICAgeworCWZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IHRoaXMtPl9NX3cuc2l6ZSgpOyArK19faSkKKwkgIHRoaXMtPl9NX3dbX19pXSA9IHN0YXRpY19jYXN0PGJsb2NrX3R5cGU+KDApOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBfTV9pc19lcXVhbChjb25zdCBfX2R5bmFtaWNfYml0c2V0X2Jhc2UmIF9feCkgY29uc3QKKyAgICAgIHsKKwlpZiAoX194LnNpemUoKSA9PSB0aGlzLT5zaXplKCkpCisJICB7CisJICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IHRoaXMtPl9NX3cuc2l6ZSgpOyArK19faSkKKwkgICAgICBpZiAodGhpcy0+X01fd1tfX2ldICE9IF9feC5fTV93W19faV0pCisJCXJldHVybiBmYWxzZTsKKwkgICAgcmV0dXJuIHRydWU7CisJICB9CisJZWxzZQorCSAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBib29sCisgICAgICBfTV9pc19sZXNzKGNvbnN0IF9fZHluYW1pY19iaXRzZXRfYmFzZSYgX194KSBjb25zdAorICAgICAgeworCWlmIChfX3guc2l6ZSgpID09IHRoaXMtPnNpemUoKSkKKwkgIHsKKwkgICAgZm9yIChzaXplX3QgX19pID0gdGhpcy0+X01fdy5zaXplKCk7IF9faSA+IDA7IC0tX19pKQorCSAgICAgIHsKKwkJaWYgKHRoaXMtPl9NX3dbX19pLTFdIDwgX194Ll9NX3dbX19pLTFdKQorCQkgIHJldHVybiB0cnVlOworCQllbHNlIGlmICh0aGlzLT5fTV93W19faS0xXSA+IF9feC5fTV93W19faS0xXSkKKwkJICByZXR1cm4gZmFsc2U7CisJICAgICAgfQorCSAgICByZXR1cm4gZmFsc2U7CisJICB9CisJZWxzZQorCSAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBzaXplX3QKKyAgICAgIF9NX2FyZV9hbGxfYXV4KCkgY29uc3QKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCB0aGlzLT5fTV93LnNpemUoKSAtIDE7ICsrX19pKQorCSAgaWYgKF9NX3dbX19pXSAhPSB+c3RhdGljX2Nhc3Q8YmxvY2tfdHlwZT4oMCkpCisJICAgIHJldHVybiAwOworCXJldHVybiAoKHRoaXMtPl9NX3cuc2l6ZSgpIC0gMSkgKiBfU19iaXRzX3Blcl9ibG9jaworCQkrIF9fYnVpbHRpbl9wb3Bjb3VudGwodGhpcy0+X01faGl3b3JkKCkpKTsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgX01faXNfYW55KCkgY29uc3QKKyAgICAgIHsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCB0aGlzLT5fTV93LnNpemUoKTsgKytfX2kpCisJICBpZiAodGhpcy0+X01fd1tfX2ldICE9IHN0YXRpY19jYXN0PGJsb2NrX3R5cGU+KDApKQorCSAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX3N1YnNldF9vZihjb25zdCBfX2R5bmFtaWNfYml0c2V0X2Jhc2UmIF9fYikKKyAgICAgIHsKKwlpZiAoX19iLnNpemUoKSA9PSB0aGlzLT5zaXplKCkpCisJICB7CisJICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9NX3cuc2l6ZSgpOyArK19faSkKKwkgICAgICBpZiAodGhpcy0+X01fd1tfX2ldICE9ICh0aGlzLT5fTV93W19faV0gfCBfX2IuX01fd1tfX2ldKSkKKwkJcmV0dXJuIGZhbHNlOworCSAgICByZXR1cm4gdHJ1ZTsKKwkgIH0KKwllbHNlCisJICByZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgICAgIGJvb2wKKyAgICAgIF9NX2lzX3Byb3Blcl9zdWJzZXRfb2YoY29uc3QgX19keW5hbWljX2JpdHNldF9iYXNlJiBfX2IpIGNvbnN0CisgICAgICB7CisJaWYgKHRoaXMtPmlzX3N1YnNldF9vZihfX2IpKQorCSAgeworCSAgICBpZiAoKnRoaXMgPT0gX19iKQorCSAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgZWxzZQorCSAgICAgIHJldHVybiB0cnVlOworCSAgfQorCWVsc2UKKwkgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgc2l6ZV90CisgICAgICBfTV9kb19jb3VudCgpIGNvbnN0CisgICAgICB7CisJc2l6ZV90IF9fcmVzdWx0ID0gMDsKKwlmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCB0aGlzLT5fTV93LnNpemUoKTsgKytfX2kpCisJICBfX3Jlc3VsdCArPSBfX2J1aWx0aW5fcG9wY291bnRsKHRoaXMtPl9NX3dbX19pXSk7CisJcmV0dXJuIF9fcmVzdWx0OworICAgICAgfQorCisgICAgICBzaXplX3R5cGUKKyAgICAgIF9NX3NpemUoKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fdy5zaXplKCk7IH0KKworICAgICAgdW5zaWduZWQgbG9uZworICAgICAgX01fZG9fdG9fdWxvbmcoKSBjb25zdDsKKworICAgICAgdW5zaWduZWQgbG9uZyBsb25nCisgICAgICBfTV9kb190b191bGxvbmcoKSBjb25zdDsKKworICAgICAgLy8gZmluZCBmaXJzdCAib24iIGJpdAorICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9kb19maW5kX2ZpcnN0KHNpemVfdCBfX25vdF9mb3VuZCkgY29uc3Q7CisKKyAgICAgIC8vIGZpbmQgdGhlIG5leHQgIm9uIiBiaXQgdGhhdCBmb2xsb3dzICJwcmV2IgorICAgICAgc2l6ZV90eXBlCisgICAgICBfTV9kb19maW5kX25leHQoc2l6ZV90IF9fcHJldiwgc2l6ZV90IF9fbm90X2ZvdW5kKSBjb25zdDsKKworICAgICAgLy8gZG8gYXBwZW5kIG9mIGJsb2NrCisgICAgICB2b2lkCisgICAgICBfTV9kb19hcHBlbmRfYmxvY2soYmxvY2tfdHlwZSBfX2Jsb2NrLCBzaXplX3R5cGUgX19wb3MpCisgICAgICB7CisJc2l6ZV90IF9fb2Zmc2V0ID0gX19wb3MgJSBfU19iaXRzX3Blcl9ibG9jazsKKwlpZiAoX19vZmZzZXQgPT0gMCkKKwkgIHRoaXMtPl9NX3cucHVzaF9iYWNrKF9fYmxvY2spOworCWVsc2UKKwkgIHsKKwkgICAgdGhpcy0+X01faGl3b3JkKCkgfD0gKF9fYmxvY2sgPDwgX19vZmZzZXQpOworCSAgICB0aGlzLT5fTV93LnB1c2hfYmFjayhfX2Jsb2NrID4+IChfU19iaXRzX3Blcl9ibG9jayAtIF9fb2Zmc2V0KSk7CisJICB9CisgICAgICB9CisgICAgfTsKKworICAvLyBEZWZpbml0aW9ucyBvZiBub24taW5saW5lIGZ1bmN0aW9ucyBmcm9tIF9fZHluYW1pY19iaXRzZXRfYmFzZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1dvcmRULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdm9pZAorICAgIF9fZHluYW1pY19iaXRzZXRfYmFzZTxfV29yZFQsIF9BbGxvYz46Ol9NX2RvX2xlZnRfc2hpZnQoc2l6ZV90IF9fc2hpZnQpCisgICAgeworICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19zaGlmdCAhPSAwLCAxKSkKKwl7CisJICBjb25zdCBzaXplX3QgX193c2hpZnQgPSBfX3NoaWZ0IC8gX1NfYml0c19wZXJfYmxvY2s7CisJICBjb25zdCBzaXplX3QgX19vZmZzZXQgPSBfX3NoaWZ0ICUgX1NfYml0c19wZXJfYmxvY2s7CisKKwkgIGlmIChfX29mZnNldCA9PSAwKQorCSAgICBmb3IgKHNpemVfdCBfX24gPSB0aGlzLT5fTV93LnNpemUoKSAtIDE7IF9fbiA+PSBfX3dzaGlmdDsgLS1fX24pCisJICAgICAgdGhpcy0+X01fd1tfX25dID0gdGhpcy0+X01fd1tfX24gLSBfX3dzaGlmdF07CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3QgX19zdWJfb2Zmc2V0ID0gX1NfYml0c19wZXJfYmxvY2sgLSBfX29mZnNldDsKKwkgICAgICBmb3IgKHNpemVfdCBfX24gPSBfTV93LnNpemUoKSAtIDE7IF9fbiA+IF9fd3NoaWZ0OyAtLV9fbikKKwkJdGhpcy0+X01fd1tfX25dID0gKCh0aGlzLT5fTV93W19fbiAtIF9fd3NoaWZ0XSA8PCBfX29mZnNldCkKKwkJCSAgICAgfCAodGhpcy0+X01fd1tfX24gLSBfX3dzaGlmdCAtIDFdID4+IF9fc3ViX29mZnNldCkpOworCSAgICAgIHRoaXMtPl9NX3dbX193c2hpZnRdID0gdGhpcy0+X01fd1swXSA8PCBfX29mZnNldDsKKwkgICAgfQorCisJICAvLy8vIHN0ZDo6ZmlsbCh0aGlzLT5fTV93LmJlZ2luKCksIHRoaXMtPl9NX3cuYmVnaW4oKSArIF9fd3NoaWZ0LAorCSAgLy8vLyAgICAgICAgICBzdGF0aWNfY2FzdDxfV29yZFQ+KDApKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Xb3JkVCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHZvaWQKKyAgICBfX2R5bmFtaWNfYml0c2V0X2Jhc2U8X1dvcmRULCBfQWxsb2M+OjpfTV9kb19yaWdodF9zaGlmdChzaXplX3QgX19zaGlmdCkKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3NoaWZ0ICE9IDAsIDEpKQorCXsKKwkgIGNvbnN0IHNpemVfdCBfX3dzaGlmdCA9IF9fc2hpZnQgLyBfU19iaXRzX3Blcl9ibG9jazsKKwkgIGNvbnN0IHNpemVfdCBfX29mZnNldCA9IF9fc2hpZnQgJSBfU19iaXRzX3Blcl9ibG9jazsKKwkgIGNvbnN0IHNpemVfdCBfX2xpbWl0ID0gdGhpcy0+X01fdy5zaXplKCkgLSBfX3dzaGlmdCAtIDE7CisKKwkgIGlmIChfX29mZnNldCA9PSAwKQorCSAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBfX24gPD0gX19saW1pdDsgKytfX24pCisJICAgICAgdGhpcy0+X01fd1tfX25dID0gdGhpcy0+X01fd1tfX24gKyBfX3dzaGlmdF07CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBzaXplX3QgX19zdWJfb2Zmc2V0ID0gKF9TX2JpdHNfcGVyX2Jsb2NrCisJCQkJCSAgIC0gX19vZmZzZXQpOworCSAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fbiA8IF9fbGltaXQ7ICsrX19uKQorCQl0aGlzLT5fTV93W19fbl0gPSAoKHRoaXMtPl9NX3dbX19uICsgX193c2hpZnRdID4+IF9fb2Zmc2V0KQorCQkJICAgICB8ICh0aGlzLT5fTV93W19fbiArIF9fd3NoaWZ0ICsgMV0gPDwgX19zdWJfb2Zmc2V0KSk7CisJICAgICAgdGhpcy0+X01fd1tfX2xpbWl0XSA9IHRoaXMtPl9NX3dbX01fdy5zaXplKCktMV0gPj4gX19vZmZzZXQ7CisJICAgIH0KKworCSAgLy8vL3N0ZDo6ZmlsbCh0aGlzLT5fTV93LmJlZ2luKCkgKyBfX2xpbWl0ICsgMSwgdGhpcy0+X01fdy5lbmQoKSwKKwkgIC8vLy8gICAgICAgICAgc3RhdGljX2Nhc3Q8X1dvcmRUPigwKSk7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfV29yZFQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICB1bnNpZ25lZCBsb25nCisgICAgX19keW5hbWljX2JpdHNldF9iYXNlPF9Xb3JkVCwgX0FsbG9jPjo6X01fZG9fdG9fdWxvbmcoKSBjb25zdAorICAgIHsKKyAgICAgIHNpemVfdCBfX24gPSBzaXplb2YodW5zaWduZWQgbG9uZykgLyBzaXplb2YoYmxvY2tfdHlwZSk7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSBfX247IF9faSA8IHRoaXMtPl9NX3cuc2l6ZSgpOyArK19faSkKKwlpZiAodGhpcy0+X01fd1tfX2ldKQorCSAgX190aHJvd19vdmVyZmxvd19lcnJvcihfX04oIl9fZHluYW1pY19iaXRzZXRfYmFzZTo6X01fZG9fdG9fdWxvbmciKSk7CisgICAgICB1bnNpZ25lZCBsb25nIF9fcmVzID0gMFVMOworICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uICYmIF9faSA8IHRoaXMtPl9NX3cuc2l6ZSgpOyArK19faSkKKwlfX3JlcyArPSB0aGlzLT5fTV93W19faV0gPDwgKF9faSAqIF9TX2JpdHNfcGVyX2Jsb2NrKTsKKyAgICAgIHJldHVybiBfX3JlczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1dvcmRULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgdW5zaWduZWQgbG9uZyBsb25nCisgICAgX19keW5hbWljX2JpdHNldF9iYXNlPF9Xb3JkVCwgX0FsbG9jPjo6X01fZG9fdG9fdWxsb25nKCkgY29uc3QKKyAgICB7CisgICAgICBzaXplX3QgX19uID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgLyBzaXplb2YoYmxvY2tfdHlwZSk7CisgICAgICBmb3IgKHNpemVfdCBfX2kgPSBfX247IF9faSA8IHRoaXMtPl9NX3cuc2l6ZSgpOyArK19faSkKKwlpZiAodGhpcy0+X01fd1tfX2ldKQorCSAgX190aHJvd19vdmVyZmxvd19lcnJvcihfX04oIl9fZHluYW1pY19iaXRzZXRfYmFzZTo6X01fZG9fdG9fdWxsb25nIikpOworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzID0gMFVMTDsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbiAmJiBfX2kgPCB0aGlzLT5fTV93LnNpemUoKTsgKytfX2kpCisJX19yZXMgKz0gdGhpcy0+X01fd1tfX2ldIDw8IChfX2kgKiBfU19iaXRzX3Blcl9ibG9jayk7CisgICAgICByZXR1cm4gX19yZXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Xb3JkVCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHNpemVfdAorICAgIF9fZHluYW1pY19iaXRzZXRfYmFzZTxfV29yZFQsIF9BbGxvYz4KKyAgICA6Ol9NX2RvX2ZpbmRfZmlyc3Qoc2l6ZV90IF9fbm90X2ZvdW5kKSBjb25zdAorICAgIHsKKyAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IHRoaXMtPl9NX3cuc2l6ZSgpOyArK19faSkKKwl7CisJICBfV29yZFQgX190aGlzd29yZCA9IHRoaXMtPl9NX3dbX19pXTsKKwkgIGlmIChfX3RoaXN3b3JkICE9IHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpCisJICAgIHJldHVybiAoX19pICogX1NfYml0c19wZXJfYmxvY2sKKwkJICAgICsgX19idWlsdGluX2N0emwoX190aGlzd29yZCkpOworCX0KKyAgICAgIC8vIG5vdCBmb3VuZCwgc28gcmV0dXJuIGFuIGluZGljYXRpb24gb2YgZmFpbHVyZS4KKyAgICAgIHJldHVybiBfX25vdF9mb3VuZDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1dvcmRULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc2l6ZV90CisgICAgX19keW5hbWljX2JpdHNldF9iYXNlPF9Xb3JkVCwgX0FsbG9jPgorICAgIDo6X01fZG9fZmluZF9uZXh0KHNpemVfdCBfX3ByZXYsIHNpemVfdCBfX25vdF9mb3VuZCkgY29uc3QKKyAgICB7CisgICAgICAvLyBtYWtlIGJvdW5kIGluY2x1c2l2ZQorICAgICAgKytfX3ByZXY7CisKKyAgICAgIC8vIGNoZWNrIG91dCBvZiBib3VuZHMKKyAgICAgIGlmIChfX3ByZXYgPj0gdGhpcy0+X01fdy5zaXplKCkgKiBfU19iaXRzX3Blcl9ibG9jaykKKwlyZXR1cm4gX19ub3RfZm91bmQ7CisKKyAgICAgIC8vIHNlYXJjaCBmaXJzdCB3b3JkCisgICAgICBzaXplX3QgX19pID0gX1Nfd2hpY2h3b3JkKF9fcHJldik7CisgICAgICBfV29yZFQgX190aGlzd29yZCA9IHRoaXMtPl9NX3dbX19pXTsKKworICAgICAgLy8gbWFzayBvZmYgYml0cyBiZWxvdyBib3VuZAorICAgICAgX190aGlzd29yZCAmPSAofnN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpIDw8IF9TX3doaWNoYml0KF9fcHJldik7CisKKyAgICAgIGlmIChfX3RoaXN3b3JkICE9IHN0YXRpY19jYXN0PF9Xb3JkVD4oMCkpCisJcmV0dXJuIChfX2kgKiBfU19iaXRzX3Blcl9ibG9jaworCQkrIF9fYnVpbHRpbl9jdHpsKF9fdGhpc3dvcmQpKTsKKworICAgICAgLy8gY2hlY2sgc3Vic2VxdWVudCB3b3JkcworICAgICAgZm9yICgrK19faTsgX19pIDwgdGhpcy0+X01fdy5zaXplKCk7ICsrX19pKQorCXsKKwkgIF9fdGhpc3dvcmQgPSB0aGlzLT5fTV93W19faV07CisJICBpZiAoX190aGlzd29yZCAhPSBzdGF0aWNfY2FzdDxfV29yZFQ+KDApKQorCSAgICByZXR1cm4gKF9faSAqIF9TX2JpdHNfcGVyX2Jsb2NrCisJCSAgICArIF9fYnVpbHRpbl9jdHpsKF9fdGhpc3dvcmQpKTsKKwl9CisgICAgICAvLyBub3QgZm91bmQsIHNvIHJldHVybiBhbiBpbmRpY2F0aW9uIG9mIGZhaWx1cmUuCisgICAgICByZXR1cm4gX19ub3RfZm91bmQ7CisgICAgfSAvLyBlbmQgX01fZG9fZmluZF9uZXh0CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFRoZSAlZHluYW1pY19iaXRzZXQgY2xhc3MgcmVwcmVzZW50cyBhIHNlcXVlbmNlIG9mIGJpdHMuCisgICAqCisgICAqICBAaW5ncm91cCBjb250YWluZXJzCisgICAqCisgICAqICAoTm90ZSB0aGF0ICVkeW5hbWljX2JpdHNldCBkb2VzIEBlIG5vdCBtZWV0IHRoZSBmb3JtYWwKKyAgICogIHJlcXVpcmVtZW50cyBvZiBhIDxhIGhyZWY9InRhYmxlcy5odG1sIzY1Ij5jb250YWluZXI8L2E+LgorICAgKiAgTWFpbmx5LCBpdCBsYWNrcyBpdGVyYXRvcnMuKQorICAgKgorICAgKiAgVGhlIHRlbXBsYXRlIGFyZ3VtZW50LCBAYSBOYiwgbWF5IGJlIGFueSBub24tbmVnYXRpdmUgbnVtYmVyLAorICAgKiAgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGJpdHMgKGUuZy4sICIwIiwgIjEyIiwgIjEwMjQqMTAyNCIpLgorICAgKgorICAgKiAgSW4gdGhlIGdlbmVyYWwgdW5vcHRpbWl6ZWQgY2FzZSwgc3RvcmFnZSBpcyBhbGxvY2F0ZWQgaW4KKyAgICogIHdvcmQtc2l6ZWQgYmxvY2tzLiAgTGV0IEIgYmUgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgd29yZCwgdGhlbgorICAgKiAgKE5iKyhCLTEpKS9CIHdvcmRzIHdpbGwgYmUgdXNlZCBmb3Igc3RvcmFnZS4gIEIgLSBOYiVCIGJpdHMgYXJlCisgICAqICB1bnVzZWQuICAoVGhleSBhcmUgdGhlIGhpZ2gtb3JkZXIgYml0cyBpbiB0aGUgaGlnaGVzdCB3b3JkLikgIEl0CisgICAqICBpcyBhIGNsYXNzIGludmFyaWFudCB0aGF0IHRob3NlIHVudXNlZCBiaXRzIGFyZSBhbHdheXMgemVyby4KKyAgICoKKyAgICogIElmIHlvdSB0aGluayBvZiAlZHluYW1pY19iaXRzZXQgYXMgImEgc2ltcGxlIGFycmF5IG9mIGJpdHMsIiBiZQorICAgKiAgYXdhcmUgdGhhdCB5b3VyIG1lbnRhbCBwaWN0dXJlIGlzIHJldmVyc2VkOiBhICVkeW5hbWljX2JpdHNldAorICAgKiAgYmVoYXZlcyB0aGUgc2FtZSB3YXkgYXMgYml0cyBpbiBpbnRlZ2VycyBkbywgd2l0aCB0aGUgYml0IGF0CisgICAqICBpbmRleCAwIGluIHRoZSAibGVhc3Qgc2lnbmlmaWNhbnQgLyByaWdodC1oYW5kIiBwb3NpdGlvbiwgYW5kCisgICAqICB0aGUgYml0IGF0IGluZGV4IE5iLTEgaW4gdGhlICJtb3N0IHNpZ25pZmljYW50IC8gbGVmdC1oYW5kIgorICAgKiAgcG9zaXRpb24uICBUaHVzLCB1bmxpa2Ugb3RoZXIgY29udGFpbmVycywgYSAlZHluYW1pY19iaXRzZXQncworICAgKiAgaW5kZXggImNvdW50cyBmcm9tIHJpZ2h0IHRvIGxlZnQsIiB0byBwdXQgaXQgdmVyeSBsb29zZWx5LgorICAgKgorICAgKiAgVGhpcyBiZWhhdmlvciBpcyBwcmVzZXJ2ZWQgd2hlbiB0cmFuc2xhdGluZyB0byBhbmQgZnJvbSBzdHJpbmdzLgorICAgKiAgRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBwcm9iYWJseQorICAgKiAgcHJpbnRzICJiKCdhJykgaXMgMDAwMTEwMDAwMSIgb24gYSBtb2Rlcm4gQVNDSUkgc3lzdGVtLgorICAgKgorICAgKiAgQGNvZGUKKyAgICogICAgICNpbmNsdWRlIDxkeW5hbWljX2JpdHNldD4KKyAgICogICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KKyAgICogICAgICNpbmNsdWRlIDxzc3RyZWFtPgorICAgKgorICAgKiAgICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAgICoKKyAgICogICAgIGludCBtYWluKCkKKyAgICogICAgIHsKKyAgICogICAgICAgICBsb25nICAgICAgICAgYSA9ICdhJzsKKyAgICogICAgICAgICBkeW5hbWljX2JpdHNldCAgIGIoYSk7CisgICAqCisgICAqICAgICAgICAgY291dCA8PCAiYignYScpIGlzICIgPDwgYiA8PCBlbmRsOworICAgKgorICAgKiAgICAgICAgIG9zdHJpbmdzdHJlYW0gczsKKyAgICogICAgICAgICBzIDw8IGI7CisgICAqICAgICAgICAgc3RyaW5nICBzdHIgPSBzLnN0cigpOworICAgKiAgICAgICAgIGNvdXQgPDwgImluZGV4IDMgaW4gdGhlIHN0cmluZyBpcyAiIDw8IHN0clszXSA8PCAiIGJ1dFxuIgorICAgKiAgICAgICAgICAgICAgPDwgImluZGV4IDMgaW4gdGhlIGJpdHNldCBpcyAiIDw8IGJbM10gPDwgZW5kbDsKKyAgICogICAgIH0KKyAgICogIEBlbmRjb2RlCisgICAqCisgICAqICBBbHNvIHNlZToKKyAgICogIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMrKy9tYW51YWwvYmswMXB0MTJjaDMzczAyLmh0bWwKKyAgICogIGZvciBhIGRlc2NyaXB0aW9uIG9mIGV4dGVuc2lvbnMuCisgICAqCisgICAqICBNb3N0IG9mIHRoZSBhY3R1YWwgY29kZSBpc24ndCBjb250YWluZWQgaW4gJWR5bmFtaWNfYml0c2V0PD4KKyAgICogIGl0c2VsZiwgYnV0IGluIHRoZSBiYXNlIGNsYXNzIF9fZHluYW1pY19iaXRzZXRfYmFzZS4gIFRoZSBiYXNlCisgICAqICBjbGFzcyB3b3JrcyB3aXRoIHdob2xlIHdvcmRzLCBub3Qgd2l0aCBpbmRpdmlkdWFsIGJpdHMuICBUaGlzCisgICAqICBhbGxvd3MgdXMgdG8gc3BlY2lhbGl6ZSBfX2R5bmFtaWNfYml0c2V0X2Jhc2UgZm9yIHRoZSBpbXBvcnRhbnQKKyAgICogIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgJWR5bmFtaWNfYml0c2V0IGlzIG9ubHkgYSBzaW5nbGUgd29yZC4KKyAgICoKKyAgICogIEV4dHJhIGNvbmZ1c2lvbiBjYW4gcmVzdWx0IGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBzdG9yYWdlIGZvcgorICAgKiAgX19keW5hbWljX2JpdHNldF9iYXNlIEBlIGlzIGEgdmVjdG9yLCBhbmQgaXMgaW5kZXhlZCBhcyBzdWNoLiAgVGhpcyBpcworICAgKiAgY2FyZWZ1bGx5IGVuY2Fwc3VsYXRlZC4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Xb3JkVCA9IHVuc2lnbmVkIGxvbmcgbG9uZywKKwkgICB0eXBlbmFtZSBfQWxsb2MgPSBzdGQ6OmFsbG9jYXRvcjxfV29yZFQ+PgorICAgIGNsYXNzIGR5bmFtaWNfYml0c2V0CisgICAgOiBwcml2YXRlIF9fZHluYW1pY19iaXRzZXRfYmFzZTxfV29yZFQsIF9BbGxvYz4KKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8X1dvcmRUPjo6dmFsdWUsICJ0ZW1wbGF0ZSBhcmd1bWVudCAiCisJCSAgICAiX1dvcmRUIG5vdCBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIik7CisKKyAgICBwdWJsaWM6CisKKyAgICAgIHR5cGVkZWYgX19keW5hbWljX2JpdHNldF9iYXNlPF9Xb3JkVCwgX0FsbG9jPiBfQmFzZTsKKyAgICAgIHR5cGVkZWYgX1dvcmRUIGJsb2NrX3R5cGU7CisgICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKKyAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKKworICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBiaXRzX3Blcl9ibG9jayA9IF9fQ0hBUl9CSVRfXyAqIHNpemVvZihibG9ja190eXBlKTsKKyAgICAgIC8vIFVzZSB0aGlzOiBjb25zdGV4cHIgc2l6ZV90eXBlIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90eXBlPjo6bWF4KCkuCisgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKKworICAgIHByaXZhdGU6CisKKyAgICAgIC8vICBDbGVhciB0aGUgdW51c2VkIGJpdHMgaW4gdGhlIHVwcGVybW9zdCB3b3JkLgorICAgICAgdm9pZAorICAgICAgX01fZG9fc2FuaXRpemUoKQorICAgICAgeworCXNpemVfdHlwZSBfX3NoaWZ0ID0gdGhpcy0+X01fTmIgJSBiaXRzX3Blcl9ibG9jazsKKwlpZiAoX19zaGlmdCA+IDApCisJICB0aGlzLT5fTV9oaXdvcmQoKSAmPSB+KCh+c3RhdGljX2Nhc3Q8YmxvY2tfdHlwZT4oMCkpIDw8IF9fc2hpZnQpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBUaGVzZSB2ZXJzaW9ucyBvZiBzaW5nbGUtYml0IHNldCwgcmVzZXQsIGZsaXAsIGFuZCB0ZXN0CisgICAgICAgKiAgZG8gbm8gcmFuZ2UgY2hlY2tpbmcuCisgICAgICAgKi8KKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYKKyAgICAgIF9NX3VuY2hlY2tlZF9zZXQoc2l6ZV90eXBlIF9fcG9zKQorICAgICAgeworCXRoaXMtPl9NX2dldHdvcmQoX19wb3MpIHw9IF9CYXNlOjpfU19tYXNrYml0KF9fcG9zKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYKKyAgICAgIF9NX3VuY2hlY2tlZF9zZXQoc2l6ZV90eXBlIF9fcG9zLCBpbnQgX192YWwpCisgICAgICB7CisJaWYgKF9fdmFsKQorCSAgdGhpcy0+X01fZ2V0d29yZChfX3BvcykgfD0gX0Jhc2U6Ol9TX21hc2tiaXQoX19wb3MpOworCWVsc2UKKwkgIHRoaXMtPl9NX2dldHdvcmQoX19wb3MpICY9IH5fQmFzZTo6X1NfbWFza2JpdChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mCisgICAgICBfTV91bmNoZWNrZWRfcmVzZXQoc2l6ZV90eXBlIF9fcG9zKQorICAgICAgeworCXRoaXMtPl9NX2dldHdvcmQoX19wb3MpICY9IH5fQmFzZTo6X1NfbWFza2JpdChfX3Bvcyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mCisgICAgICBfTV91bmNoZWNrZWRfZmxpcChzaXplX3R5cGUgX19wb3MpCisgICAgICB7CisJdGhpcy0+X01fZ2V0d29yZChfX3BvcykgXj0gX0Jhc2U6Ol9TX21hc2tiaXQoX19wb3MpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgYm9vbAorICAgICAgX01fdW5jaGVja2VkX3Rlc3Qoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgICAgeyByZXR1cm4gKCh0aGlzLT5fTV9nZXR3b3JkKF9fcG9zKSAmIF9CYXNlOjpfU19tYXNrYml0KF9fcG9zKSkKKwkJIT0gc3RhdGljX2Nhc3Q8X1dvcmRUPigwKSk7IH0KKworICAgICAgc2l6ZV90eXBlIF9NX05iOworCisgICAgcHVibGljOgorICAgICAgLyoqCisgICAgICAgKiAgVGhpcyBlbmNhcHN1bGF0ZXMgdGhlIGNvbmNlcHQgb2YgYSBzaW5nbGUgYml0LiAgQW4gaW5zdGFuY2UKKyAgICAgICAqICBvZiB0aGlzIGNsYXNzIGlzIGEgcHJveHkgZm9yIGFuIGFjdHVhbCBiaXQ7IHRoaXMgd2F5IHRoZQorICAgICAgICogIGluZGl2aWR1YWwgYml0IG9wZXJhdGlvbnMgYXJlIGRvbmUgYXMgZmFzdGVyIHdvcmQtc2l6ZQorICAgICAgICogIGJpdHdpc2UgaW5zdHJ1Y3Rpb25zLgorICAgICAgICoKKyAgICAgICAqICBNb3N0IHVzZXJzIHdpbGwgbmV2ZXIgbmVlZCB0byB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseTsKKyAgICAgICAqICBjb252ZXJzaW9ucyB0byBhbmQgZnJvbSBib29sIGFyZSBhdXRvbWF0aWMgYW5kIHNob3VsZCBiZQorICAgICAgICogIHRyYW5zcGFyZW50LiAgT3ZlcmxvYWRlZCBvcGVyYXRvcnMgaGVscCB0byBwcmVzZXJ2ZSB0aGUKKyAgICAgICAqICBpbGx1c2lvbi4KKyAgICAgICAqCisgICAgICAgKiAgKE9uIGEgdHlwaWNhbCBzeXN0ZW0sIHRoaXMgImJpdCAlcmVmZXJlbmNlIiBpcyA2NCB0aW1lcyB0aGUKKyAgICAgICAqICBzaXplIG9mIGFuIGFjdHVhbCBiaXQuICBIYS4pCisgICAgICAgKi8KKyAgICAgIGNsYXNzIHJlZmVyZW5jZQorICAgICAgeworCWZyaWVuZCBjbGFzcyBkeW5hbWljX2JpdHNldDsKKworCWJsb2NrX3R5cGUgKl9NX3dwOworCXNpemVfdHlwZSBfTV9icG9zOworCisJLy8gbGVmdCB1bmRlZmluZWQKKwlyZWZlcmVuY2UoKTsKKworICAgICAgcHVibGljOgorCXJlZmVyZW5jZShkeW5hbWljX2JpdHNldCYgX19iLCBzaXplX3R5cGUgX19wb3MpCisJeworCSAgdGhpcy0+X01fd3AgPSAmX19iLl9NX2dldHdvcmQoX19wb3MpOworCSAgdGhpcy0+X01fYnBvcyA9IF9CYXNlOjpfU193aGljaGJpdChfX3Bvcyk7CisJfQorCisJfnJlZmVyZW5jZSgpCisJeyB9CisKKwkvLyBGb3IgYltpXSA9IF9feDsKKwlyZWZlcmVuY2UmCisJb3BlcmF0b3I9KGJvb2wgX194KQorCXsKKwkgIGlmIChfX3gpCisJICAgICp0aGlzLT5fTV93cCB8PSBfQmFzZTo6X1NfbWFza2JpdCh0aGlzLT5fTV9icG9zKTsKKwkgIGVsc2UKKwkgICAgKnRoaXMtPl9NX3dwICY9IH5fQmFzZTo6X1NfbWFza2JpdCh0aGlzLT5fTV9icG9zKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKwkvLyBGb3IgYltpXSA9IGJbX19qXTsKKwlyZWZlcmVuY2UmCisJb3BlcmF0b3I9KGNvbnN0IHJlZmVyZW5jZSYgX19qKQorCXsKKwkgIGlmICgoKihfX2ouX01fd3ApICYgX0Jhc2U6Ol9TX21hc2tiaXQoX19qLl9NX2Jwb3MpKSkKKwkgICAgKnRoaXMtPl9NX3dwIHw9IF9CYXNlOjpfU19tYXNrYml0KHRoaXMtPl9NX2Jwb3MpOworCSAgZWxzZQorCSAgICAqdGhpcy0+X01fd3AgJj0gfl9CYXNlOjpfU19tYXNrYml0KHRoaXMtPl9NX2Jwb3MpOworCSAgcmV0dXJuICp0aGlzOworCX0KKworCS8vIEZsaXBzIHRoZSBiaXQKKwlib29sCisJb3BlcmF0b3J+KCkgY29uc3QKKwl7IHJldHVybiAoKihfTV93cCkgJiBfQmFzZTo6X1NfbWFza2JpdCh0aGlzLT5fTV9icG9zKSkgPT0gMDsgfQorCisJLy8gRm9yIF9feCA9IGJbaV07CisJb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisJeyByZXR1cm4gKCoodGhpcy0+X01fd3ApICYgX0Jhc2U6Ol9TX21hc2tiaXQodGhpcy0+X01fYnBvcykpICE9IDA7IH0KKworCS8vIEZvciBiW2ldLmZsaXAoKTsKKwlyZWZlcmVuY2UmCisJZmxpcCgpCisJeworCSAgKnRoaXMtPl9NX3dwIF49IF9CYXNlOjpfU19tYXNrYml0KHRoaXMtPl9NX2Jwb3MpOworCSAgcmV0dXJuICp0aGlzOworCX0KKyAgICAgIH07CisKKyAgICAgIGZyaWVuZCBjbGFzcyByZWZlcmVuY2U7CisKKyAgICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CisKKyAgICAgIC8vIDIzLjMuNS4xIGNvbnN0cnVjdG9yczoKKyAgICAgIC8vLyBBbGwgYml0cyBzZXQgdG8gemVyby4KKyAgICAgIGV4cGxpY2l0CisgICAgICBkeW5hbWljX2JpdHNldChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hbGxvYyA9IGFsbG9jYXRvcl90eXBlKCkpCisgICAgICA6IF9CYXNlKF9fYWxsb2MpLCBfTV9OYigwKQorICAgICAgeyB9CisKKyAgICAgIC8vLyBJbml0aWFsIGJpdHMgYml0d2lzZS1jb3BpZWQgZnJvbSBhIHNpbmdsZSB3b3JkIChvdGhlcnMgc2V0IHRvIHplcm8pLgorICAgICAgZXhwbGljaXQKKyAgICAgIGR5bmFtaWNfYml0c2V0KHNpemVfdHlwZSBfX25iaXRzLCB1bnNpZ25lZCBsb25nIGxvbmcgX192YWwgPSAwVUxMLAorCQkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2FsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19uYml0cywgX192YWwsIF9fYWxsb2MpLAorCV9NX05iKF9fbmJpdHMpCisgICAgICB7IH0KKworICAgICAgZHluYW1pY19iaXRzZXQoaW5pdGlhbGl6ZXJfbGlzdDxibG9ja190eXBlPiBfX2lsLAorCQkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2FsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hbGxvYyksIF9NX05iKDApCisgICAgICB7IHRoaXMtPmFwcGVuZChfX2lsKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFVzZSBhIHN1YnNldCBvZiBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBBIHN0cmluZyBvZiAnMCcgYW5kICcxJyBjaGFyYWN0ZXJzLgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIEluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gQHAgX19zdHIgdG8gdXNlLgorICAgICAgICogIEBwYXJhbSAgX19uICAgIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBwIF9fcG9zIGlzIGJpZ2dlciB0aGUgc2l6ZSBvZiBAcCBfX3N0ci4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6aW52YWxpZF9hcmd1bWVudCAgSWYgYSBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgc3RyaW5nCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIG5laXRoZXIgJzAnIG5vciAnMScuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jMT4KKwlleHBsaWNpdAorCWR5bmFtaWNfYml0c2V0KGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jMT4mIF9fc3RyLAorCQkgICAgICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYzE+OjpzaXplX3R5cGUKKwkJICAgICAgIF9fcG9zID0gMCwKKwkJICAgICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2MxPjo6c2l6ZV90eXBlCisJCSAgICAgICBfX24gPSBzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYzE+OjpucG9zLAorCQkgICAgICAgX0NoYXJUIF9femVybyA9IF9DaGFyVCgnMCcpLCBfQ2hhclQgX19vbmUgPSBfQ2hhclQoJzEnKSwKKwkJICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2FsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSkKKwk6IF9CYXNlKF9fYWxsb2MpLAorCSAgX01fTmIoMCkgLy8gV2F0Y2ggZm9yIG5wb3MuCisJeworCSAgaWYgKF9fcG9zID4gX19zdHIuc2l6ZSgpKQorCSAgICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImR5bmFtaWNfYml0c2V0OjpiaXRzZXQgaW5pdGlhbCBwb3NpdGlvbiAiCisJCQkJICAgICAibm90IHZhbGlkIikpOworCisJICAvLyBXYXRjaCBmb3IgbnBvcy4KKwkgIHRoaXMtPl9NX05iID0gKF9fbiA+IF9fc3RyLnNpemUoKSA/IF9fc3RyLnNpemUoKSAtIF9fcG9zIDogX19uKTsKKwkgIHRoaXMtPnJlc2l6ZSh0aGlzLT5fTV9OYik7CisJICB0aGlzLT5fTV9jb3B5X2Zyb21fc3RyaW5nKF9fc3RyLCBfX3BvcywgX19uLAorCQkJCSAgICBfQ2hhclQoJzAnKSwgX0NoYXJUKCcxJykpOworCX0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBDb25zdHJ1Y3QgZnJvbSBhIHN0cmluZy4KKyAgICAgICAqICBAcGFyYW0gIF9fc3RyICBBIHN0cmluZyBvZiAnMCcgYW5kICcxJyBjaGFyYWN0ZXJzLgorICAgICAgICogIEB0aHJvdyAgc3RkOjppbnZhbGlkX2FyZ3VtZW50ICBJZiBhIGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSBzdHJpbmcKKyAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggaXMgbmVpdGhlciAnMCcgbm9yICcxJy4KKyAgICAgICAqLworICAgICAgZXhwbGljaXQKKyAgICAgIGR5bmFtaWNfYml0c2V0KGNvbnN0IGNoYXIqIF9fc3RyLAorCQkgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2FsbG9jID0gYWxsb2NhdG9yX3R5cGUoKSkKKyAgICAgIDogX0Jhc2UoX19hbGxvYykKKyAgICAgIHsKKwlzaXplX3QgX19sZW4gPSAwOworCWlmIChfX3N0cikKKwkgIHdoaWxlIChfX3N0cltfX2xlbl0gIT0gJ1wwJykKKwkgICAgKytfX2xlbjsKKwl0aGlzLT5yZXNpemUoX19sZW4pOworCXRoaXMtPl9NX2NvcHlfZnJvbV9wdHI8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+PgorCQkgICAoX19zdHIsIF9fbGVuLCAwLCBfX2xlbiwgJzAnLCAnMScpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIENvcHkgY29uc3RydWN0b3IuCisgICAgICAgKi8KKyAgICAgIGR5bmFtaWNfYml0c2V0KGNvbnN0IGR5bmFtaWNfYml0c2V0JiBfX2IpCisgICAgICA6IF9CYXNlKF9fYiksIF9NX05iKF9fYi5zaXplKCkpCisgICAgICB7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBNb3ZlIGNvbnN0cnVjdG9yLgorICAgICAgICovCisgICAgICBkeW5hbWljX2JpdHNldChkeW5hbWljX2JpdHNldCYmIF9fYikKKyAgICAgIDogX0Jhc2Uoc3RkOjpmb3J3YXJkPF9CYXNlPihfX2IpKSwgX01fTmIoX19iLnNpemUoKSkKKyAgICAgIHsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFN3YXAgd2l0aCBhbm90aGVyIGJpdHNldC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgc3dhcChkeW5hbWljX2JpdHNldCYgX19iKQorICAgICAgeworCXRoaXMtPl9NX3N3YXAoX19iKTsKKwlzdGQ6OnN3YXAodGhpcy0+X01fTmIsIF9fYi5fTV9OYik7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWdubWVudC4KKyAgICAgICAqLworICAgICAgZHluYW1pY19iaXRzZXQmCisgICAgICBvcGVyYXRvcj0oY29uc3QgZHluYW1pY19iaXRzZXQmIF9fYikKKyAgICAgIHsKKwlpZiAoJl9fYiAhPSB0aGlzKQorCSAgeworCSAgICB0aGlzLT5fTV9hc3NpZ24oX19iKTsKKwkgICAgdGhpcy0+X01fTmIgPSBfX2IuX01fTmI7CisJICB9CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgTW92ZSBhc3NpZ25tZW50LgorICAgICAgICovCisgICAgICBkeW5hbWljX2JpdHNldCYKKyAgICAgIG9wZXJhdG9yPShkeW5hbWljX2JpdHNldCYmIF9fYikKKyAgICAgIHsKKwl0aGlzLT5zd2FwKF9fYik7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiB0aGUgYWxsb2NhdG9yIGZvciB0aGUgYml0c2V0LgorICAgICAgICovCisgICAgICBhbGxvY2F0b3JfdHlwZQorICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9nZXRfYWxsb2NhdG9yKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemUgdGhlIGJpdHNldC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcmVzaXplKHNpemVfdHlwZSBfX25iaXRzLCBib29sIF9fdmFsdWUgPSBmYWxzZSkKKyAgICAgIHsKKwl0aGlzLT5fTV9yZXNpemUoX19uYml0cywgX192YWx1ZSk7CisJdGhpcy0+X01fTmIgPSBfX25iaXRzOworCXRoaXMtPl9NX2RvX3Nhbml0aXplKCk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQ2xlYXIgdGhlIGJpdHNldC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgY2xlYXIoKQorICAgICAgeworCXRoaXMtPl9NX2NsZWFyKCk7CisJdGhpcy0+X01fTmIgPSAwOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFB1c2ggYSBiaXQgb250byB0aGUgaGlnaCBlbmQgb2YgdGhlIGJpdHNldC4KKyAgICAgICAqLworICAgICAgdm9pZAorICAgICAgcHVzaF9iYWNrKGJvb2wgX19iaXQpCisgICAgICB7CisJaWYgKHNpemVfdCBfX29mZnNldCA9IHRoaXMtPnNpemUoKSAlIGJpdHNfcGVyX2Jsb2NrID09IDApCisJICB0aGlzLT5fTV9kb19hcHBlbmRfYmxvY2soYmxvY2tfdHlwZSgwKSwgdGhpcy0+X01fTmIpOworCSsrdGhpcy0+X01fTmI7CisJdGhpcy0+X01fdW5jaGVja2VkX3NldCh0aGlzLT5fTV9OYiwgX19iaXQpOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhIGJsb2NrLgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBhcHBlbmQoYmxvY2tfdHlwZSBfX2Jsb2NrKQorICAgICAgeworCXRoaXMtPl9NX2RvX2FwcGVuZF9ibG9jayhfX2Jsb2NrLCB0aGlzLT5fTV9OYik7CisJdGhpcy0+X01fTmIgKz0gYml0c19wZXJfYmxvY2s7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZgorICAgICAgICovCisgICAgICB2b2lkCisgICAgICBhcHBlbmQoaW5pdGlhbGl6ZXJfbGlzdDxibG9ja190eXBlPiBfX2lsKQorICAgICAgeyB0aGlzLT5hcHBlbmQoX19pbC5iZWdpbigpLCBfX2lsLmVuZCgpKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFwcGVuZCBhbiBpdGVyYXRvciByYW5nZSBvZiBibG9ja3MuCisgICAgICAgKi8KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfQmxvY2tJbnB1dEl0ZXJhdG9yPgorCXZvaWQKKwlhcHBlbmQoX0Jsb2NrSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfQmxvY2tJbnB1dEl0ZXJhdG9yIF9fbGFzdCkKKwl7CisJICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKKwkgICAgdGhpcy0+YXBwZW5kKCpfX2ZpcnN0KTsKKwl9CisKKyAgICAgIC8vIDIzLjMuNS4yIGR5bmFtaWNfYml0c2V0IG9wZXJhdGlvbnM6CisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE9wZXJhdGlvbnMgb24gZHluYW1pY19iaXRzZXRzLgorICAgICAgICogIEBwYXJhbSAgX19yaHMgIEEgc2FtZS1zaXplZCBkeW5hbWljX2JpdHNldC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlc2Ugc2hvdWxkIGJlIHNlbGYtZXhwbGFuYXRvcnkuCisgICAgICAgKi8KKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYKKyAgICAgIG9wZXJhdG9yJj0oY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX3JocykKKyAgICAgIHsKKwl0aGlzLT5fTV9kb19hbmQoX19yaHMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JgorICAgICAgb3BlcmF0b3ImPShkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mJiBfX3JocykKKyAgICAgIHsKKwl0aGlzLT5fTV9kb19hbmQoc3RkOjptb3ZlKF9fcmhzKSk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mCisgICAgICBvcGVyYXRvcnw9KGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX19yaHMpCisgICAgICB7CisJdGhpcy0+X01fZG9fb3IoX19yaHMpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JgorICAgICAgb3BlcmF0b3JePShjb25zdCBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mIF9fcmhzKQorICAgICAgeworCXRoaXMtPl9NX2RvX3hvcihfX3Jocyk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mCisgICAgICBvcGVyYXRvci09KGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX19yaHMpCisgICAgICB7CisJdGhpcy0+X01fZG9fZGlmKF9fcmhzKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgICAvL0B9CisKKyAgICAgIC8vQHsKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgT3BlcmF0aW9ucyBvbiBkeW5hbWljX2JpdHNldHMuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC4KKyAgICAgICAqCisgICAgICAgKiAgVGhlc2Ugc2hvdWxkIGJlIHNlbGYtZXhwbGFuYXRvcnkuCisgICAgICAgKi8KKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYKKyAgICAgIG9wZXJhdG9yPDw9KHNpemVfdHlwZSBfX3BvcykKKyAgICAgIHsKKwlpZiAoX19idWlsdGluX2V4cGVjdChfX3BvcyA8IHRoaXMtPl9NX05iLCAxKSkKKwkgIHsKKwkgICAgdGhpcy0+X01fZG9fbGVmdF9zaGlmdChfX3Bvcyk7CisJICAgIHRoaXMtPl9NX2RvX3Nhbml0aXplKCk7CisJICB9CisJZWxzZQorCSAgdGhpcy0+X01fZG9fcmVzZXQoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYKKyAgICAgIG9wZXJhdG9yPj49KHNpemVfdHlwZSBfX3BvcykKKyAgICAgIHsKKwlpZiAoX19idWlsdGluX2V4cGVjdChfX3BvcyA8IHRoaXMtPl9NX05iLCAxKSkKKwkgIHsKKwkgICAgdGhpcy0+X01fZG9fcmlnaHRfc2hpZnQoX19wb3MpOworCSAgICB0aGlzLT5fTV9kb19zYW5pdGl6ZSgpOworCSAgfQorCWVsc2UKKwkgIHRoaXMtPl9NX2RvX3Jlc2V0KCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorICAgICAgLy9AfQorCisgICAgICAvLyBTZXQsIHJlc2V0LCBhbmQgZmxpcC4KKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBTZXRzIGV2ZXJ5IGJpdCB0byB0cnVlLgorICAgICAgICovCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mCisgICAgICBzZXQoKQorICAgICAgeworCXRoaXMtPl9NX2RvX3NldCgpOworCXRoaXMtPl9NX2RvX3Nhbml0aXplKCk7CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgU2V0cyBhIGdpdmVuIGJpdCB0byBhIHBhcnRpY3VsYXIgdmFsdWUuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgVGhlIGluZGV4IG9mIHRoZSBiaXQuCisgICAgICAgKiAgQHBhcmFtICBfX3ZhbCAgRWl0aGVyIHRydWUgb3IgZmFsc2UsIGRlZmF1bHRzIHRvIHRydWUuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om91dF9vZl9yYW5nZSAgSWYgQGEgX19wb3MgaXMgYmlnZ2VyIHRoZSBzaXplIG9mIHRoZSAlc2V0LgorICAgICAgICovCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mCisgICAgICBzZXQoc2l6ZV90eXBlIF9fcG9zLCBib29sIF9fdmFsID0gdHJ1ZSkKKyAgICAgIHsKKwlpZiAoX19wb3MgPj0gX01fTmIpCisJICBfX3Rocm93X291dF9vZl9yYW5nZShfX04oImR5bmFtaWNfYml0c2V0OjpzZXQiKSk7CisJcmV0dXJuIHRoaXMtPl9NX3VuY2hlY2tlZF9zZXQoX19wb3MsIF9fdmFsKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFNldHMgZXZlcnkgYml0IHRvIGZhbHNlLgorICAgICAgICovCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mCisgICAgICByZXNldCgpCisgICAgICB7CisJdGhpcy0+X01fZG9fcmVzZXQoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBTZXRzIGEgZ2l2ZW4gYml0IHRvIGZhbHNlLgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIFRoZSBpbmRleCBvZiB0aGUgYml0LgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zIGlzIGJpZ2dlciB0aGUgc2l6ZSBvZiB0aGUgJXNldC4KKyAgICAgICAqCisgICAgICAgKiAgU2FtZSBhcyB3cml0aW5nIEBjIHNldChfX3BvcywgZmFsc2UpLgorICAgICAgICovCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mCisgICAgICByZXNldChzaXplX3R5cGUgX19wb3MpCisgICAgICB7CisJaWYgKF9fcG9zID49IF9NX05iKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJkeW5hbWljX2JpdHNldDo6cmVzZXQiKSk7CisJcmV0dXJuIHRoaXMtPl9NX3VuY2hlY2tlZF9yZXNldChfX3Bvcyk7CisgICAgICB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUb2dnbGVzIGV2ZXJ5IGJpdCB0byBpdHMgb3Bwb3NpdGUgdmFsdWUuCisgICAgICAgKi8KKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYKKyAgICAgIGZsaXAoKQorICAgICAgeworCXRoaXMtPl9NX2RvX2ZsaXAoKTsKKwl0aGlzLT5fTV9kb19zYW5pdGl6ZSgpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRvZ2dsZXMgYSBnaXZlbiBiaXQgdG8gaXRzIG9wcG9zaXRlIHZhbHVlLgorICAgICAgICogIEBwYXJhbSAgX19wb3MgIFRoZSBpbmRleCBvZiB0aGUgYml0LgorICAgICAgICogIEB0aHJvdyAgc3RkOjpvdXRfb2ZfcmFuZ2UgIElmIEBhIF9fcG9zIGlzIGJpZ2dlciB0aGUgc2l6ZSBvZiB0aGUgJXNldC4KKyAgICAgICAqLworICAgICAgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JgorICAgICAgZmxpcChzaXplX3R5cGUgX19wb3MpCisgICAgICB7CisJaWYgKF9fcG9zID49IF9NX05iKQorCSAgX190aHJvd19vdXRfb2ZfcmFuZ2UoX19OKCJkeW5hbWljX2JpdHNldDo6ZmxpcCIpKTsKKwlyZXR1cm4gdGhpcy0+X01fdW5jaGVja2VkX2ZsaXAoX19wb3MpOworICAgICAgfQorCisgICAgICAvLy8gU2VlIHRoZSBuby1hcmd1bWVudCBmbGlwKCkuCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4KKyAgICAgIG9wZXJhdG9yfigpIGNvbnN0CisgICAgICB7IHJldHVybiBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4oKnRoaXMpLmZsaXAoKTsgfQorCisgICAgICAvL0B7CisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFycmF5LWluZGV4aW5nIHN1cHBvcnQuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgSW5kZXggaW50byB0aGUgJWR5bmFtaWNfYml0c2V0LgorICAgICAgICogIEByZXR1cm4gQSBib29sIGZvciBhICdjb25zdCAlZHluYW1pY19iaXRzZXQnLiAgRm9yIG5vbi1jb25zdAorICAgICAgICogICAgICAgICAgIGJpdHNldHMsIGFuIGluc3RhbmNlIG9mIHRoZSByZWZlcmVuY2UgcHJveHkgY2xhc3MuCisgICAgICAgKiAgQG5vdGUgVGhlc2Ugb3BlcmF0b3JzIGRvIG5vIHJhbmdlIGNoZWNraW5nIGFuZCB0aHJvdyBubworICAgICAgICogICAgICAgICBleGNlcHRpb25zLCBhcyByZXF1aXJlZCBieSBEUiAxMSB0byB0aGUgc3RhbmRhcmQuCisgICAgICAgKi8KKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCisgICAgICB7IHJldHVybiByZWZlcmVuY2UoKnRoaXMsX19wb3MpOyB9CisKKyAgICAgIGNvbnN0X3JlZmVyZW5jZQorICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiBfTV91bmNoZWNrZWRfdGVzdChfX3Bvcyk7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFJldHVybnMgYSBudW1lcmljYWwgaW50ZXJwcmV0YXRpb24gb2YgdGhlICVkeW5hbWljX2JpdHNldC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgaW50ZWdyYWwgZXF1aXZhbGVudCBvZiB0aGUgYml0cy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3ZlcmZsb3dfZXJyb3IgIElmIHRoZXJlIGFyZSB0b28gbWFueSBiaXRzIHRvIGJlCisgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRlZCBpbiBhbiBAYyB1bnNpZ25lZCBAYyBsb25nLgorICAgICAgICovCisgICAgICB1bnNpZ25lZCBsb25nCisgICAgICB0b191bG9uZygpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9kb190b191bG9uZygpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBSZXR1cm5zIGEgbnVtZXJpY2FsIGludGVycHJldGF0aW9uIG9mIHRoZSAlZHluYW1pY19iaXRzZXQuCisgICAgICAgKiAgQHJldHVybiAgVGhlIGludGVncmFsIGVxdWl2YWxlbnQgb2YgdGhlIGJpdHMuCisgICAgICAgKiAgQHRocm93ICBzdGQ6Om92ZXJmbG93X2Vycm9yICBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgYml0cyB0byBiZQorICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50ZWQgaW4gYW4gQGMgdW5zaWduZWQgQGMgbG9uZy4KKyAgICAgICAqLworICAgICAgdW5zaWduZWQgbG9uZyBsb25nCisgICAgICB0b191bGxvbmcoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fdG9fdWxsb25nKCk7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFJldHVybnMgYSBjaGFyYWN0ZXIgaW50ZXJwcmV0YXRpb24gb2YgdGhlICVkeW5hbWljX2JpdHNldC4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgc3RyaW5nIGVxdWl2YWxlbnQgb2YgdGhlIGJpdHMuCisgICAgICAgKgorICAgICAgICogIE5vdGUgdGhlIG9yZGVyaW5nIG9mIHRoZSBiaXRzOiAgZGVjcmVhc2luZyBjaGFyYWN0ZXIgcG9zaXRpb25zCisgICAgICAgKiAgY29ycmVzcG9uZCB0byBpbmNyZWFzaW5nIGJpdCBwb3NpdGlvbnMgKHNlZSB0aGUgbWFpbiBjbGFzcyBub3RlcyBmb3IKKyAgICAgICAqICBhbiBleGFtcGxlKS4KKyAgICAgICAqLworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUID0gY2hhciwKKwkgICAgICAgdHlwZW5hbWUgX1RyYWl0cyA9IHN0ZDo6Y2hhcl90cmFpdHM8X0NoYXJUPiwKKwkgICAgICAgdHlwZW5hbWUgX0FsbG9jMSA9IHN0ZDo6YWxsb2NhdG9yPF9DaGFyVD4+CisJc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2MxPgorCXRvX3N0cmluZyhfQ2hhclQgX196ZXJvID0gX0NoYXJUKCcwJyksIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKSBjb25zdAorCXsKKwkgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jMT4gX19yZXN1bHQ7CisJICBfTV9jb3B5X3RvX3N0cmluZyhfX3Jlc3VsdCwgX196ZXJvLCBfX29uZSk7CisJICByZXR1cm4gX19yZXN1bHQ7CisJfQorCisgICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBzdHJpbmcgb3BlcmF0aW9ucy4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKwl2b2lkCisJX01fY29weV9mcm9tX3B0cihjb25zdCBfQ2hhclQqLCBzaXplX3QsIHNpemVfdCwgc2l6ZV90LAorCQkJIF9DaGFyVCwgX0NoYXJUKTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2MxPgorCXZvaWQKKwlfTV9jb3B5X2Zyb21fc3RyaW5nKGNvbnN0IHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwKKwkJCSAgICBfVHJhaXRzLCBfQWxsb2MxPiYgX19zdHIsIHNpemVfdCBfX3Bvcywgc2l6ZV90IF9fbiwKKwkJCSAgICBfQ2hhclQgX196ZXJvID0gX0NoYXJUKCcwJyksCisJCQkgICAgX0NoYXJUIF9fb25lID0gX0NoYXJUKCcxJykpCisJeyBfTV9jb3B5X2Zyb21fcHRyPF9DaGFyVCwgX1RyYWl0cz4oX19zdHIuZGF0YSgpLCBfX3N0ci5zaXplKCksCisJCQkJCSAgICBfX3BvcywgX19uLCBfX3plcm8sIF9fb25lKTsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYzE+CisJdm9pZAorCV9NX2NvcHlfdG9fc3RyaW5nKHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jMT4mIF9fc3RyLAorCQkJICBfQ2hhclQgX196ZXJvID0gX0NoYXJUKCcwJyksCisJCQkgIF9DaGFyVCBfX29uZSA9IF9DaGFyVCgnMScpKSBjb25zdDsKKworICAgICAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIHdoaWNoIGFyZSBzZXQuCisgICAgICBzaXplX3R5cGUKKyAgICAgIGNvdW50KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2RvX2NvdW50KCk7IH0KKworICAgICAgLy8vIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzLgorICAgICAgc2l6ZV90eXBlCisgICAgICBzaXplKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX05iOyB9CisKKyAgICAgIC8vLyBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYmxvY2tzLgorICAgICAgc2l6ZV90eXBlCisgICAgICBudW1fYmxvY2tzKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX3NpemUoKTsgfQorCisgICAgICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkeW5hbWljX2JpdHNldCBpcyBlbXB0eS4KKyAgICAgIGJvb2wKKyAgICAgIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuICh0aGlzLT5fTV9OYiA9PSAwKTsgfQorCisgICAgICAvLy8gUmV0dXJucyB0aGUgbWF4aW11bSBzaXplIG9mIGEgZHluYW1pY19iaXRzZXQgb2JqZWN0IGhhdmluZyB0aGUgc2FtZQorICAgICAgLy8vIHR5cGUgYXMgKnRoaXMuCisgICAgICAvLy8gVGhlIHJlYWwgYW5zd2VyIGlzIG1heCgpICogYml0c19wZXJfYmxvY2sgYnV0IGlzIGxpa2VseSB0byBvdmVyZmxvdy4KKyAgICAgIGNvbnN0ZXhwciBzaXplX3R5cGUKKyAgICAgIG1heF9zaXplKCkgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8YmxvY2tfdHlwZT46Om1heCgpOyB9CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiBUZXN0cyB0aGUgdmFsdWUgb2YgYSBiaXQuCisgICAgICAgKiAgQHBhcmFtICBfX3BvcyAgVGhlIGluZGV4IG9mIGEgYml0LgorICAgICAgICogIEByZXR1cm4gIFRoZSB2YWx1ZSBhdCBAYSBfX3Bvcy4KKyAgICAgICAqICBAdGhyb3cgIHN0ZDo6b3V0X29mX3JhbmdlICBJZiBAYSBfX3BvcyBpcyBiaWdnZXIgdGhlIHNpemUgb2YgdGhlICVzZXQuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIHRlc3Qoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgICAgeworCWlmIChfX3BvcyA+PSBfTV9OYikKKwkgIF9fdGhyb3dfb3V0X29mX3JhbmdlKF9fTigiZHluYW1pY19iaXRzZXQ6OnRlc3QiKSk7CisJcmV0dXJuIF9NX3VuY2hlY2tlZF90ZXN0KF9fcG9zKTsKKyAgICAgIH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmIFRlc3RzIHdoZXRoZXIgYWxsIHRoZSBiaXRzIGFyZSBvbi4KKyAgICAgICAqICBAcmV0dXJuICBUcnVlIGlmIGFsbCB0aGUgYml0cyBhcmUgc2V0LgorICAgICAgICovCisgICAgICBib29sCisgICAgICBhbGwoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fYXJlX2FsbF9hdXgoKSA9PSBfTV9OYjsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgVGVzdHMgd2hldGhlciBhbnkgb2YgdGhlIGJpdHMgYXJlIG9uLgorICAgICAgICogIEByZXR1cm4gIFRydWUgaWYgYXQgbGVhc3Qgb25lIGJpdCBpcyBzZXQuCisgICAgICAgKi8KKyAgICAgIGJvb2wKKyAgICAgIGFueSgpIGNvbnN0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9pc19hbnkoKTsgfQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgVGVzdHMgd2hldGhlciBhbnkgb2YgdGhlIGJpdHMgYXJlIG9uLgorICAgICAgICogIEByZXR1cm4gIFRydWUgaWYgbm9uZSBvZiB0aGUgYml0cyBhcmUgc2V0LgorICAgICAgICovCisgICAgICBib29sCisgICAgICBub25lKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuICF0aGlzLT5fTV9pc19hbnkoKTsgfQorCisgICAgICAvL0B7CisgICAgICAvLy8gU2VsZi1leHBsYW5hdG9yeS4KKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPgorICAgICAgb3BlcmF0b3I8PChzaXplX3R5cGUgX19wb3MpIGNvbnN0CisgICAgICB7IHJldHVybiBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4oKnRoaXMpIDw8PSBfX3BvczsgfQorCisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4KKyAgICAgIG9wZXJhdG9yPj4oc2l6ZV90eXBlIF9fcG9zKSBjb25zdAorICAgICAgeyByZXR1cm4gZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+KCp0aGlzKSA+Pj0gX19wb3M7IH0KKyAgICAgIC8vQH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0ICJvbiIgYml0LgorICAgICAgICogIEByZXR1cm4gIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYml0IHNldCwgb3Igc2l6ZSgpIGlmIG5vdCBmb3VuZC4KKyAgICAgICAqICBAc2EgIGZpbmRfbmV4dAorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfZmlyc3QoKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fZmluZF9maXJzdCh0aGlzLT5fTV9OYik7IH0KKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBGaW5kcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgIm9uIiBiaXQgYWZ0ZXIgcHJldi4KKyAgICAgICAqICBAcmV0dXJuICBUaGUgaW5kZXggb2YgdGhlIG5leHQgYml0IHNldCwgb3Igc2l6ZSgpIGlmIG5vdCBmb3VuZC4KKyAgICAgICAqICBAcGFyYW0gIF9fcHJldiAgV2hlcmUgdG8gc3RhcnQgc2VhcmNoaW5nLgorICAgICAgICogIEBzYSAgZmluZF9maXJzdAorICAgICAgICovCisgICAgICBzaXplX3R5cGUKKyAgICAgIGZpbmRfbmV4dChzaXplX3QgX19wcmV2KSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fZG9fZmluZF9uZXh0KF9fcHJldiwgdGhpcy0+X01fTmIpOyB9CisKKyAgICAgIGJvb2wKKyAgICAgIGlzX3N1YnNldF9vZihjb25zdCBkeW5hbWljX2JpdHNldCYgX19iKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faXNfc3Vic2V0X29mKF9fYik7IH0KKworICAgICAgYm9vbAorICAgICAgaXNfcHJvcGVyX3N1YnNldF9vZihjb25zdCBkeW5hbWljX2JpdHNldCYgX19iKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01faXNfcHJvcGVyX3N1YnNldF9vZihfX2IpOyB9CisgICAgfTsKKworICAvLyBEZWZpbml0aW9ucyBvZiBub24taW5saW5lIG1lbWJlciBmdW5jdGlvbnMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Xb3JkVCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICAgIHZvaWQKKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPjo6CisgICAgICBfTV9jb3B5X2Zyb21fcHRyKGNvbnN0IF9DaGFyVCogX19zdHIsIHNpemVfdCBfX2xlbiwKKwkJICAgICAgIHNpemVfdCBfX3Bvcywgc2l6ZV90IF9fbiwgX0NoYXJUIF9femVybywgX0NoYXJUIF9fb25lKQorICAgICAgeworCXJlc2V0KCk7CisJY29uc3Qgc2l6ZV90IF9fbmJpdHMgPSBzdGQ6Om1pbihfTV9OYiwgc3RkOjptaW4oX19uLCBfX2xlbiAtIF9fcG9zKSk7CisJZm9yIChzaXplX3QgX19pID0gX19uYml0czsgX19pID4gMDsgLS1fX2kpCisJICB7CisJICAgIGNvbnN0IF9DaGFyVCBfX2MgPSBfX3N0cltfX3BvcyArIF9fbmJpdHMgLSBfX2ldOworCSAgICBpZiAoX1RyYWl0czo6ZXEoX19jLCBfX3plcm8pKQorCSAgICAgIDsKKwkgICAgZWxzZSBpZiAoX1RyYWl0czo6ZXEoX19jLCBfX29uZSkpCisJICAgICAgX01fdW5jaGVja2VkX3NldChfX2kgLSAxKTsKKwkgICAgZWxzZQorCSAgICAgIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChfX04oImR5bmFtaWNfYml0c2V0OjpfTV9jb3B5X2Zyb21fcHRyIikpOworCSAgfQorICAgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Xb3JkVCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jMT4KKyAgICAgIHZvaWQKKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPjo6CisgICAgICBfTV9jb3B5X3RvX3N0cmluZyhzdGQ6OmJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYzE+JiBfX3N0ciwKKwkJCV9DaGFyVCBfX3plcm8sIF9DaGFyVCBfX29uZSkgY29uc3QKKyAgICAgIHsKKwlfX3N0ci5hc3NpZ24oX01fTmIsIF9femVybyk7CisJZm9yIChzaXplX3QgX19pID0gX01fTmI7IF9faSA+IDA7IC0tX19pKQorCSAgaWYgKF9NX3VuY2hlY2tlZF90ZXN0KF9faSAtIDEpKQorCSAgICBfVHJhaXRzOjphc3NpZ24oX19zdHJbX01fTmIgLSBfX2ldLCBfX29uZSk7CisgICAgICB9CisKKworICAvL0B7CisgIC8vLyBUaGVzZSBjb21wYXJpc29ucyBmb3IgZXF1YWxpdHkvaW5lcXVhbGl0eSBhcmUsIHdlbGwsIEBlIGJpdHdpc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Xb3JkVCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGJvb2wKKyAgICBvcGVyYXRvcj09KGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgIGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01faXNfZXF1YWwoX19yaHMpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1dvcmRULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yIT0oY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiAhX19saHMuX01faXNfZXF1YWwoX19yaHMpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1dvcmRULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPChjb25zdCBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgIGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX19yaHMpCisgICAgeyByZXR1cm4gX19saHMuX01faXNfbGVzcyhfX3Jocyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfV29yZFQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBib29sCisgICAgb3BlcmF0b3I8PShjb25zdCBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mIF9fbGhzLAorCSAgICAgICBjb25zdCBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mIF9fcmhzKQorICAgIHsgcmV0dXJuICEoX19saHMgPiBfX3Jocyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfV29yZFQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBib29sCisgICAgb3BlcmF0b3I+KGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX19saHMsCisJICAgICAgY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiBfX3JocyA8IF9fbGhzOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1dvcmRULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX2xocywKKwkgICAgICAgY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX3JocykKKyAgICB7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9CisgIC8vQH0KKworICAvLyAyMy4zLjUuMyBiaXRzZXQgb3BlcmF0aW9uczoKKyAgLy9AeworICAvKioKKyAgICogIEBicmllZiAgR2xvYmFsIGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBiaXRzZXRzLgorICAgKiAgQHBhcmFtICBfX3ggIEEgYml0c2V0LgorICAgKiAgQHBhcmFtICBfX3kgIEEgYml0c2V0IG9mIHRoZSBzYW1lIHNpemUgYXMgQGEgX194LgorICAgKiAgQHJldHVybiAgQSBuZXcgYml0c2V0LgorICAgKgorICAgKiAgVGhlc2Ugc2hvdWxkIGJlIHNlbGYtZXhwbGFuYXRvcnkuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfV29yZFQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+CisgICAgb3BlcmF0b3ImKGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX195KQorICAgIHsKKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiBfX3Jlc3VsdChfX3gpOworICAgICAgX19yZXN1bHQgJj0gX195OworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfV29yZFQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBpbmxpbmUgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+CisgICAgb3BlcmF0b3J8KGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX194LAorCSAgICAgIGNvbnN0IGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiYgX195KQorICAgIHsKKyAgICAgIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPiBfX3Jlc3VsdChfX3gpOworICAgICAgX19yZXN1bHQgfD0gX195OworICAgICAgcmV0dXJuIF9fcmVzdWx0OworICAgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1dvcmRULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgaW5saW5lIGR5bmFtaWNfYml0c2V0PF9Xb3JkVCwgX0FsbG9jPgorICAgIG9wZXJhdG9yXihjb25zdCBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mIF9feCwKKwkgICAgICBjb25zdCBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mIF9feSkKKyAgICB7CisgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4gX19yZXN1bHQoX194KTsKKyAgICAgIF9fcmVzdWx0IF49IF9feTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9Xb3JkVCwgdHlwZW5hbWUgX0FsbG9jPgorICAgIGlubGluZSBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4KKyAgICBvcGVyYXRvci0oY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX3gsCisJICAgICAgY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX3kpCisgICAgeworICAgICAgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+IF9fcmVzdWx0KF9feCk7CisgICAgICBfX3Jlc3VsdCAtPSBfX3k7CisgICAgICByZXR1cm4gX19yZXN1bHQ7CisgICAgfQorICAvL0B9CisKKyAgLy9AeworICAvKioKKyAgICogIEBicmllZiBHbG9iYWwgSS9PIG9wZXJhdG9ycyBmb3IgYml0c2V0cy4KKyAgICoKKyAgICogIERpcmVjdCBJL08gYmV0d2VlbiBzdHJlYW1zIGFuZCBiaXRzZXRzIGlzIHN1cHBvcnRlZC4gIE91dHB1dCBpcworICAgKiAgc3RyYWlnaHRmb3J3YXJkLiAgSW5wdXQgd2lsbCBza2lwIHdoaXRlc3BhY2UgYW5kIG9ubHkgYWNjZXB0ICcwJworICAgKiAgYW5kICcxJyBjaGFyYWN0ZXJzLiAgVGhlICVkeW5hbWljX2JpdHNldCB3aWxsIGdyb3cgYXMgbmVjZXNzYXJ5CisgICAqICB0byBob2xkIHRoZSBzdHJpbmcgb2YgYml0cy4KKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywKKwkgICB0eXBlbmFtZSBfV29yZFQsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdGQ6OmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcj4+KHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAorCSAgICAgICBkeW5hbWljX2JpdHNldDxfV29yZFQsIF9BbGxvYz4mIF9feCkKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSAgICAgICAgICBjaGFyX3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICBfX2lzdHJlYW1fdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlvc19iYXNlICAgIF9faW9zX2Jhc2U7CisKKyAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cz4gX190bXA7CisgICAgICBfX3RtcC5yZXNlcnZlKF9feC5zaXplKCkpOworCisgICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19pcy53aWRlbignMCcpOworICAgICAgY29uc3QgY2hhcl90eXBlIF9fb25lID0gX19pcy53aWRlbignMScpOworCisgICAgICB0eXBlbmFtZSBfX2lvc19iYXNlOjppb3N0YXRlIF9fc3RhdGUgPSBfX2lvc19iYXNlOjpnb29kYml0OworICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX3NlbnRyeShfX2lzKTsKKyAgICAgIGlmIChfX3NlbnRyeSkKKwl7CisJICBfX3RyeQorCSAgICB7CisJICAgICAgd2hpbGUgKDEpCisJCXsKKwkJICBzdGF0aWMgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKKworCQkgIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9fYzEgPSBfX2lzLnJkYnVmKCktPnNidW1wYygpOworCQkgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MxLCBfX2VvZikpCisJCSAgICB7CisJCSAgICAgIF9fc3RhdGUgfD0gX19pb3NfYmFzZTo6ZW9mYml0OworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2MyID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYzEpOworCQkgICAgICBpZiAoX1RyYWl0czo6ZXEoX19jMiwgX196ZXJvKSkKKwkJCV9fdG1wLnB1c2hfYmFjayhfX3plcm8pOworCQkgICAgICBlbHNlIGlmIChfVHJhaXRzOjplcShfX2MyLCBfX29uZSkpCisJCQlfX3RtcC5wdXNoX2JhY2soX19vbmUpOworCQkgICAgICBlbHNlIGlmIChfVHJhaXRzOjoKKwkJCSAgICAgICBlcV9pbnRfdHlwZShfX2lzLnJkYnVmKCktPnNwdXRiYWNrYyhfX2MyKSwKKwkJCQkJICAgX19lb2YpKQorCQkJeworCQkJICBfX3N0YXRlIHw9IF9faW9zX2Jhc2U6OmZhaWxiaXQ7CisJCQkgIGJyZWFrOworCQkJfQorCQkgICAgICBlbHNlCisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICBfX2NhdGNoKF9fY3h4YWJpdjE6Ol9fZm9yY2VkX3Vud2luZCYpCisJICAgIHsKKwkgICAgICBfX2lzLl9NX3NldHN0YXRlKF9faW9zX2Jhc2U6OmJhZGJpdCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgICB7IF9faXMuX01fc2V0c3RhdGUoX19pb3NfYmFzZTo6YmFkYml0KTsgfQorCX0KKworICAgICAgX194LnJlc2l6ZShfX3RtcC5zaXplKCkpOworCisgICAgICBpZiAoX190bXAuZW1wdHkoKSAmJiBfX3guc2l6ZSgpKQorCV9fc3RhdGUgfD0gX19pb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgIGVsc2UKKwlfX3guX01fY29weV9mcm9tX3N0cmluZyhfX3RtcCwgc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwgX194LnNpemUoKSwKKwkJCQlfX3plcm8sIF9fb25lKTsKKyAgICAgIGlmIChfX3N0YXRlKQorCV9faXMuc2V0c3RhdGUoX19zdGF0ZSk7CisgICAgICByZXR1cm4gX19pczsKKyAgICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywKKwkgICAgdHlwZW5hbWUgX1dvcmRULCB0eXBlbmFtZSBfQWxsb2M+CisgICAgc3RkOjpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZHluYW1pY19iaXRzZXQ8X1dvcmRULCBfQWxsb2M+JiBfX3gpCisgICAgeworICAgICAgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzPiBfX3RtcDsKKworICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+PihfX29zLmdldGxvYygpKTsKKyAgICAgIF9feC5fTV9jb3B5X3RvX3N0cmluZyhfX3RtcCwgX19jdC53aWRlbignMCcpLCBfX2N0LndpZGVuKCcxJykpOworICAgICAgcmV0dXJuIF9fb3MgPDwgX190bXA7CisgICAgfQorICAvL0B9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyB0cjIKK30gLy8gc3RkCisKKyN1bmRlZiBfR0xJQkNYWF9CSVRTRVRfQklUU19QRVJfV09SRAorCisjZW5kaWYgLyogX0dMSUJDWFhfVFIyX0RZTkFNSUNfQklUU0VUICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMi9yYXRpbyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIyL3JhdGlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGQ1ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3RyMi9yYXRpbwpAQCAtMCwwICsxLDU5IEBACisvLyBUUjIgPHJhdGlvPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIyL3JhdGlvCisgKiAgVGhpcyBpcyBhIFRSMiBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2luY2x1ZGUgPHJhdGlvPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK25hbWVzcGFjZSB0cjIKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8aW50bWF4X3QgX1BuLCBzaXplX3QgX0JpdCwKKwkgICAgIGJvb2wgPSBfQml0IDwgc3RhdGljX2Nhc3Q8c2l6ZV90PgorCQkJICAoc3RkOjpudW1lcmljX2xpbWl0czxpbnRtYXhfdD46OmRpZ2l0cyk+CisgICAgc3RydWN0IF9fc2FmZV9sc2hpZnQKKyAgICB7IHN0YXRpYyBjb25zdCBpbnRtYXhfdCBfX3ZhbHVlID0gMDsgfTsKKworICAgIHRlbXBsYXRlPGludG1heF90IF9Qbiwgc2l6ZV90IF9CaXQ+CisgICAgICBzdHJ1Y3QgX19zYWZlX2xzaGlmdDxfUG4sIF9CaXQsIHRydWU+CisgICAgICB7IHN0YXRpYyBjb25zdCBpbnRtYXhfdCBfX3ZhbHVlID0gX1BuIDw8IF9CaXQ7IH07CisKKyAgLy8vIEFkZCBiaW5hcnkgcHJlZml4ZXMgKElFQyA2MDAyNy0yIEEuMiBhbmQgSVNPL0lFQyA4MDAwMCkuCisgIHR5cGVkZWYgcmF0aW88X19zYWZlX2xzaGlmdDwxLCAxMD46Ol9fdmFsdWUsIDE+IGtpYmk7CisgIHR5cGVkZWYgcmF0aW88X19zYWZlX2xzaGlmdDwxLCAyMD46Ol9fdmFsdWUsIDE+IG1lYmk7CisgIHR5cGVkZWYgcmF0aW88X19zYWZlX2xzaGlmdDwxLCAzMD46Ol9fdmFsdWUsIDE+IGdpYmk7CisgIHR5cGVkZWYgcmF0aW88X19zYWZlX2xzaGlmdDwxLCA0MD46Ol9fdmFsdWUsIDE+IHRlYmk7CisgIHR5cGVkZWYgcmF0aW88X19zYWZlX2xzaGlmdDwxLCA1MD46Ol9fdmFsdWUsIDE+IHBlYmk7CisgIHR5cGVkZWYgcmF0aW88X19zYWZlX2xzaGlmdDwxLCA2MD46Ol9fdmFsdWUsIDE+IGV4Ymk7CisgIC8vdHlwZWRlZiByYXRpbzxfX3NhZmVfbHNoaWZ0PDEsIDcwPjo6X192YWx1ZSwgMT4gemViaTsKKyAgLy90eXBlZGVmIHJhdGlvPF9fc2FmZV9sc2hpZnQ8MSwgODA+OjpfX3ZhbHVlLCAxPiB5b2JpOworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIyL3R5cGVfdHJhaXRzIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90cjIvdHlwZV90cmFpdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYxNjEyNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHIyL3R5cGVfdHJhaXRzCkBAIC0wLDAgKzEsMTA2IEBACisvLyBUUjIgPHR5cGVfdHJhaXRzPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHIyL3R5cGVfdHJhaXRzCisgKiAgVGhpcyBpcyBhIFRSMiBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UUjJfVFlQRV9UUkFJVFMKKyNkZWZpbmUgX0dMSUJDWFhfVFIyX1RZUEVfVFJBSVRTIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworbmFtZXNwYWNlIHRyMgoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgbWV0YXByb2dyYW1taW5nCisgICAqIEB7CisgICAqLworCisgIC8qKgorICAgKiAgU2VlIE4yOTY1OiBUeXBlIHRyYWl0cyBhbmQgYmFzZSBjbGFzc2VzCisgICAqICBieSBNaWNoYWVsIFNwZXJ0dXMKKyAgICovCisKKyAgLyoqCisgICAqICBTaW1wbGUgdHlwZWxpc3QuIENvbXBpbGUtdGltZSBsaXN0IG9mIHR5cGVzLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIHN0cnVjdCBfX3JlZmxlY3Rpb25fdHlwZWxpc3Q7CisKKyAgLy8vIFNwZWNpYWxpemF0aW9uIGZvciBhbiBlbXB0eSB0eXBlbGlzdC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3JlZmxlY3Rpb25fdHlwZWxpc3Q8PgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjp0cnVlX3R5cGUJCQkJCWVtcHR5OworICAgIH07CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9GaXJzdCwgdHlwZW5hbWUuLi4gX1Jlc3Q+CisgICAgc3RydWN0IF9fcmVmbGVjdGlvbl90eXBlbGlzdDxfRmlyc3QsIF9SZXN0Li4uPgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpmYWxzZV90eXBlCQkJCQllbXB0eTsKKworICAgICAgc3RydWN0IGZpcnN0CisgICAgICB7CisJdHlwZWRlZiBfRmlyc3QJCQkJCQl0eXBlOworICAgICAgfTsKKworICAgICAgc3RydWN0IHJlc3QKKyAgICAgIHsKKwl0eXBlZGVmIF9fcmVmbGVjdGlvbl90eXBlbGlzdDxfUmVzdC4uLj4JCQl0eXBlOworICAgICAgfTsKKyAgICB9OworCisgIC8vLyBTZXF1ZW5jZSBhYnN0cmFjdGlvbiBtZXRhZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgYSB0eXBlbGlzdC4KKworCisKKyAgLy8vIEVudW1lcmF0ZSBhbGwgdGhlIGJhc2UgY2xhc3NlcyBvZiBhIGNsYXNzLiBGb3JtIG9mIGEgdHlwZWxpc3QuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYmFzZXMKKyAgICB7CisgICAgICB0eXBlZGVmIF9fcmVmbGVjdGlvbl90eXBlbGlzdDxfX2Jhc2VzKF9UcCkuLi4+CQl0eXBlOworICAgIH07CisKKyAgLy8vIEVudW1lcmF0ZSBhbGwgdGhlIGRpcmVjdCBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcy4gRm9ybSBvZiBhIHR5cGVsaXN0LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGRpcmVjdF9iYXNlcworICAgIHsKKyAgICAgIHR5cGVkZWYgX19yZWZsZWN0aW9uX3R5cGVsaXN0PF9fZGlyZWN0X2Jhc2VzKF9UcCkuLi4+CXR5cGU7CisgICAgfTsKKworICAvLy8gQH0gZ3JvdXAgbWV0YXByb2dyYW1taW5nCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfQorfQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFIyX1RZUEVfVFJBSVRTCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3R1cGxlIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90dXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTJiMmUxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90dXBsZQpAQCAtMCwwICsxLDEwOTggQEAKKy8vIDx0dXBsZT4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvdHVwbGUKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVFVQTEUKKyNkZWZpbmUgX0dMSUJDWFhfVFVQTEUgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxiaXRzL3VzZXNfYWxsb2NhdG9yLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogIEBhZGR0b2dyb3VwIHV0aWxpdGllcworICAgKiAgQHsKKyAgICovCisKKyAgLy8gQWRkcyBhIGNvbnN0IHJlZmVyZW5jZSB0byBhIG5vbi1yZWZlcmVuY2UgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9jX3JlZgorICAgIHsgdHlwZWRlZiBjb25zdCBfVHAmIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9jX3JlZjxfVHAmPgorICAgIHsgdHlwZWRlZiBfVHAmIHR5cGU7IH07CisKKyAgLy8gQWRkcyBhIHJlZmVyZW5jZSB0byBhIG5vbi1yZWZlcmVuY2UgdHlwZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9yZWYKKyAgICB7IHR5cGVkZWYgX1RwJiB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hZGRfcmVmPF9UcCY+CisgICAgeyB0eXBlZGVmIF9UcCYgdHlwZTsgfTsKKworICAvLyBBZGRzIGFuIHJ2YWx1ZSByZWZlcmVuY2UgdG8gYSBub24tcmVmZXJlbmNlIHR5cGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hZGRfcl9yZWYKKyAgICB7IHR5cGVkZWYgX1RwJiYgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX3JfcmVmPF9UcCY+CisgICAgeyB0eXBlZGVmIF9UcCYgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSWR4LCB0eXBlbmFtZSBfSGVhZCwgYm9vbCBfSXNFbXB0eU5vdEZpbmFsPgorICAgIHN0cnVjdCBfSGVhZF9iYXNlOworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JZHgsIHR5cGVuYW1lIF9IZWFkPgorICAgIHN0cnVjdCBfSGVhZF9iYXNlPF9JZHgsIF9IZWFkLCB0cnVlPgorICAgIDogcHVibGljIF9IZWFkCisgICAgeworICAgICAgY29uc3RleHByIF9IZWFkX2Jhc2UoKQorICAgICAgOiBfSGVhZCgpIHsgfQorCisgICAgICBjb25zdGV4cHIgX0hlYWRfYmFzZShjb25zdCBfSGVhZCYgX19oKQorICAgICAgOiBfSGVhZChfX2gpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUhlYWQsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPCFpc19jb252ZXJ0aWJsZTxfVUhlYWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2VzX2FsbG9jX2Jhc2U+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGNvbnN0ZXhwciBfSGVhZF9iYXNlKF9VSGVhZCYmIF9faCkKKwk6IF9IZWFkKHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+KF9faCkpIHsgfQorCisgICAgICBfSGVhZF9iYXNlKF9fdXNlc19hbGxvYzApCisgICAgICA6IF9IZWFkKCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKwlfSGVhZF9iYXNlKF9fdXNlc19hbGxvYzE8X0FsbG9jPiBfX2EpCisJOiBfSGVhZChhbGxvY2F0b3JfYXJnLCAqX19hLl9NX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisJX0hlYWRfYmFzZShfX3VzZXNfYWxsb2MyPF9BbGxvYz4gX19hKQorCTogX0hlYWQoKl9fYS5fTV9hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VIZWFkPgorCV9IZWFkX2Jhc2UoX191c2VzX2FsbG9jMCwgX1VIZWFkJiYgX191aGVhZCkKKwk6IF9IZWFkKHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+KF9fdWhlYWQpKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfVUhlYWQ+CisJX0hlYWRfYmFzZShfX3VzZXNfYWxsb2MxPF9BbGxvYz4gX19hLCBfVUhlYWQmJiBfX3VoZWFkKQorCTogX0hlYWQoYWxsb2NhdG9yX2FyZywgKl9fYS5fTV9hLCBzdGQ6OmZvcndhcmQ8X1VIZWFkPihfX3VoZWFkKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1VIZWFkPgorCV9IZWFkX2Jhc2UoX191c2VzX2FsbG9jMjxfQWxsb2M+IF9fYSwgX1VIZWFkJiYgX191aGVhZCkKKwk6IF9IZWFkKHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+KF9fdWhlYWQpLCAqX19hLl9NX2EpIHsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIF9IZWFkJgorICAgICAgX01faGVhZChfSGVhZF9iYXNlJiBfX2IpIG5vZXhjZXB0IHsgcmV0dXJuIF9fYjsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9IZWFkJgorICAgICAgX01faGVhZChjb25zdCBfSGVhZF9iYXNlJiBfX2IpIG5vZXhjZXB0IHsgcmV0dXJuIF9fYjsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0lkeCwgdHlwZW5hbWUgX0hlYWQ+CisgICAgc3RydWN0IF9IZWFkX2Jhc2U8X0lkeCwgX0hlYWQsIGZhbHNlPgorICAgIHsKKyAgICAgIGNvbnN0ZXhwciBfSGVhZF9iYXNlKCkKKyAgICAgIDogX01faGVhZF9pbXBsKCkgeyB9CisKKyAgICAgIGNvbnN0ZXhwciBfSGVhZF9iYXNlKGNvbnN0IF9IZWFkJiBfX2gpCisgICAgICA6IF9NX2hlYWRfaW1wbChfX2gpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUhlYWQsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPCFpc19jb252ZXJ0aWJsZTxfVUhlYWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191c2VzX2FsbG9jX2Jhc2U+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGNvbnN0ZXhwciBfSGVhZF9iYXNlKF9VSGVhZCYmIF9faCkKKwk6IF9NX2hlYWRfaW1wbChzdGQ6OmZvcndhcmQ8X1VIZWFkPihfX2gpKSB7IH0KKworICAgICAgX0hlYWRfYmFzZShfX3VzZXNfYWxsb2MwKQorICAgICAgOiBfTV9oZWFkX2ltcGwoKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorCV9IZWFkX2Jhc2UoX191c2VzX2FsbG9jMTxfQWxsb2M+IF9fYSkKKwk6IF9NX2hlYWRfaW1wbChhbGxvY2F0b3JfYXJnLCAqX19hLl9NX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisJX0hlYWRfYmFzZShfX3VzZXNfYWxsb2MyPF9BbGxvYz4gX19hKQorCTogX01faGVhZF9pbXBsKCpfX2EuX01fYSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VSGVhZD4KKwlfSGVhZF9iYXNlKF9fdXNlc19hbGxvYzAsIF9VSGVhZCYmIF9fdWhlYWQpCisJOiBfTV9oZWFkX2ltcGwoc3RkOjpmb3J3YXJkPF9VSGVhZD4oX191aGVhZCkpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9VSGVhZD4KKwlfSGVhZF9iYXNlKF9fdXNlc19hbGxvYzE8X0FsbG9jPiBfX2EsIF9VSGVhZCYmIF9fdWhlYWQpCisJOiBfTV9oZWFkX2ltcGwoYWxsb2NhdG9yX2FyZywgKl9fYS5fTV9hLCBzdGQ6OmZvcndhcmQ8X1VIZWFkPihfX3VoZWFkKSkKKwl7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfVUhlYWQ+CisJX0hlYWRfYmFzZShfX3VzZXNfYWxsb2MyPF9BbGxvYz4gX19hLCBfVUhlYWQmJiBfX3VoZWFkKQorCTogX01faGVhZF9pbXBsKHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+KF9fdWhlYWQpLCAqX19hLl9NX2EpIHsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIF9IZWFkJgorICAgICAgX01faGVhZChfSGVhZF9iYXNlJiBfX2IpIG5vZXhjZXB0IHsgcmV0dXJuIF9fYi5fTV9oZWFkX2ltcGw7IH0KKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYKKyAgICAgIF9NX2hlYWQoY29uc3QgX0hlYWRfYmFzZSYgX19iKSBub2V4Y2VwdCB7IHJldHVybiBfX2IuX01faGVhZF9pbXBsOyB9CisKKyAgICAgIF9IZWFkIF9NX2hlYWRfaW1wbDsKKyAgICB9OworCisgIC8qKgorICAgKiBDb250YWlucyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBAYyB0dXBsZSB0ZW1wbGF0ZSwgc3RvcmVkCisgICAqIGFzIGEgcmVjdXJzaXZlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBmcm9tIHRoZSBmaXJzdCBlbGVtZW50IChtb3N0CisgICAqIGRlcml2ZWQgY2xhc3MpIHRvIHRoZSBsYXN0IChsZWFzdCBkZXJpdmVkIGNsYXNzKS4gVGhlIEBjIElkeAorICAgKiBwYXJhbWV0ZXIgZ2l2ZXMgdGhlIDAtYmFzZWQgaW5kZXggb2YgdGhlIGVsZW1lbnQgc3RvcmVkIGF0IHRoaXMKKyAgICogcG9pbnQgaW4gdGhlIGhpZXJhcmNoeTsgd2UgdXNlIGl0IHRvIGltcGxlbWVudCBhIGNvbnN0YW50LXRpbWUKKyAgICogZ2V0KCkgb3BlcmF0aW9uLgorICAgKi8KKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0lkeCwgdHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIHN0cnVjdCBfVHVwbGVfaW1wbDsgCisKKyAgLyoqCisgICAqIFplcm8tZWxlbWVudCB0dXBsZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB0aGUgYmFzaXMgY2FzZSBmb3IgdGhlIAorICAgKiBpbmhlcml0YW5jZSByZWN1cnNpb24uCisgICAqLworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSWR4PgorICAgIHN0cnVjdCBfVHVwbGVfaW1wbDxfSWR4PgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90LCB0eXBlbmFtZS4uLj4gZnJpZW5kIGNsYXNzIF9UdXBsZV9pbXBsOworCisgICAgICBfVHVwbGVfaW1wbCgpID0gZGVmYXVsdDsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBfVHVwbGVfaW1wbChhbGxvY2F0b3JfYXJnX3QsIGNvbnN0IF9BbGxvYyYpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisgICAgICAgIF9UdXBsZV9pbXBsKGFsbG9jYXRvcl9hcmdfdCwgY29uc3QgX0FsbG9jJiwgY29uc3QgX1R1cGxlX2ltcGwmKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgICAgICBfVHVwbGVfaW1wbChhbGxvY2F0b3JfYXJnX3QsIGNvbnN0IF9BbGxvYyYsIF9UdXBsZV9pbXBsJiYpIHsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgdm9pZCBfTV9zd2FwKF9UdXBsZV9pbXBsJikgbm9leGNlcHQgeyAvKiBuby1vcCAqLyB9CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfZW1wdHlfbm9uX3R1cGxlIDogaXNfZW1wdHk8X1RwPiB7IH07CisKKyAgLy8gVXNpbmcgRUJPIGZvciBlbGVtZW50cyB0aGF0IGFyZSB0dXBsZXMgY2F1c2VzIGFtYmlndW91cyBiYXNlIGVycm9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0VsMCwgdHlwZW5hbWUuLi4gX0VsPgorICAgIHN0cnVjdCBfX2lzX2VtcHR5X25vbl90dXBsZTx0dXBsZTxfRWwwLCBfRWwuLi4+PiA6IGZhbHNlX3R5cGUgeyB9OworCisgIC8vIFVzZSB0aGUgRW1wdHkgQmFzZS1jbGFzcyBPcHRpbWl6YXRpb24gZm9yIGVtcHR5LCBub24tZmluYWwgdHlwZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICB1c2luZyBfX2VtcHR5X25vdF9maW5hbAorICAgID0gdHlwZW5hbWUgY29uZGl0aW9uYWw8X19pc19maW5hbChfVHApLCBmYWxzZV90eXBlLAorCQkJICAgX19pc19lbXB0eV9ub25fdHVwbGU8X1RwPj46OnR5cGU7CisKKyAgLyoqCisgICAqIFJlY3Vyc2l2ZSB0dXBsZSBpbXBsZW1lbnRhdGlvbi4gSGVyZSB3ZSBzdG9yZSB0aGUgQGMgSGVhZCBlbGVtZW50CisgICAqIGFuZCBkZXJpdmUgZnJvbSBhIEBjIFR1cGxlX2ltcGwgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIGVsZW1lbnRzCisgICAqICh3aGljaCBjb250YWlucyB0aGUgQGMgVGFpbCkuCisgICAqLworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSWR4LCB0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1RhaWw+CisgICAgc3RydWN0IF9UdXBsZV9pbXBsPF9JZHgsIF9IZWFkLCBfVGFpbC4uLj4KKyAgICA6IHB1YmxpYyBfVHVwbGVfaW1wbDxfSWR4ICsgMSwgX1RhaWwuLi4+LAorICAgICAgcHJpdmF0ZSBfSGVhZF9iYXNlPF9JZHgsIF9IZWFkLCBfX2VtcHR5X25vdF9maW5hbDxfSGVhZD46OnZhbHVlPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90LCB0eXBlbmFtZS4uLj4gZnJpZW5kIGNsYXNzIF9UdXBsZV9pbXBsOworCisgICAgICB0eXBlZGVmIF9UdXBsZV9pbXBsPF9JZHggKyAxLCBfVGFpbC4uLj4gX0luaGVyaXRlZDsKKyAgICAgIHR5cGVkZWYgX0hlYWRfYmFzZTxfSWR4LCBfSGVhZCwgX19lbXB0eV9ub3RfZmluYWw8X0hlYWQ+Ojp2YWx1ZT4gX0Jhc2U7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX0hlYWQmICAKKyAgICAgIF9NX2hlYWQoX1R1cGxlX2ltcGwmIF9fdCkgbm9leGNlcHQgeyByZXR1cm4gX0Jhc2U6Ol9NX2hlYWQoX190KTsgfQorCisgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9IZWFkJgorICAgICAgX01faGVhZChjb25zdCBfVHVwbGVfaW1wbCYgX190KSBub2V4Y2VwdCB7IHJldHVybiBfQmFzZTo6X01faGVhZChfX3QpOyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX0luaGVyaXRlZCYKKyAgICAgIF9NX3RhaWwoX1R1cGxlX2ltcGwmIF9fdCkgbm9leGNlcHQgeyByZXR1cm4gX190OyB9CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX0luaGVyaXRlZCYKKyAgICAgIF9NX3RhaWwoY29uc3QgX1R1cGxlX2ltcGwmIF9fdCkgbm9leGNlcHQgeyByZXR1cm4gX190OyB9CisKKyAgICAgIGNvbnN0ZXhwciBfVHVwbGVfaW1wbCgpCisgICAgICA6IF9Jbmhlcml0ZWQoKSwgX0Jhc2UoKSB7IH0KKworICAgICAgZXhwbGljaXQgCisgICAgICBjb25zdGV4cHIgX1R1cGxlX2ltcGwoY29uc3QgX0hlYWQmIF9faGVhZCwgY29uc3QgX1RhaWwmLi4uIF9fdGFpbCkKKyAgICAgIDogX0luaGVyaXRlZChfX3RhaWwuLi4pLCBfQmFzZShfX2hlYWQpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUhlYWQsIHR5cGVuYW1lLi4uIF9VVGFpbCwgdHlwZW5hbWUgPSB0eXBlbmFtZQorICAgICAgICAgICAgICAgZW5hYmxlX2lmPHNpemVvZi4uLihfVGFpbCkgPT0gc2l6ZW9mLi4uKF9VVGFpbCk+Ojp0eXBlPiAKKyAgICAgICAgZXhwbGljaXQKKyAgICAgICAgY29uc3RleHByIF9UdXBsZV9pbXBsKF9VSGVhZCYmIF9faGVhZCwgX1VUYWlsJiYuLi4gX190YWlsKQorCTogX0luaGVyaXRlZChzdGQ6OmZvcndhcmQ8X1VUYWlsPihfX3RhaWwpLi4uKSwKKwkgIF9CYXNlKHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+KF9faGVhZCkpIHsgfQorCisgICAgICBjb25zdGV4cHIgX1R1cGxlX2ltcGwoY29uc3QgX1R1cGxlX2ltcGwmKSA9IGRlZmF1bHQ7CisKKyAgICAgIGNvbnN0ZXhwcgorICAgICAgX1R1cGxlX2ltcGwoX1R1cGxlX2ltcGwmJiBfX2luKQorICAgICAgbm9leGNlcHQoX19hbmRfPGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPiwKKwkgICAgICAgICAgICAgIGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9Jbmhlcml0ZWQ+Pjo6dmFsdWUpCisgICAgICA6IF9Jbmhlcml0ZWQoc3RkOjptb3ZlKF9NX3RhaWwoX19pbikpKSwgCisJX0Jhc2Uoc3RkOjpmb3J3YXJkPF9IZWFkPihfTV9oZWFkKF9faW4pKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgICAgIGNvbnN0ZXhwciBfVHVwbGVfaW1wbChjb25zdCBfVHVwbGVfaW1wbDxfSWR4LCBfVUVsZW1lbnRzLi4uPiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoX1R1cGxlX2ltcGw8X0lkeCwgX1VFbGVtZW50cy4uLj46Ol9NX3RhaWwoX19pbikpLAorCSAgX0Jhc2UoX1R1cGxlX2ltcGw8X0lkeCwgX1VFbGVtZW50cy4uLj46Ol9NX2hlYWQoX19pbikpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVUhlYWQsIHR5cGVuYW1lLi4uIF9VVGFpbHM+CisgICAgICAgIGNvbnN0ZXhwciBfVHVwbGVfaW1wbChfVHVwbGVfaW1wbDxfSWR4LCBfVUhlYWQsIF9VVGFpbHMuLi4+JiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoc3RkOjptb3ZlCisJCSAgICAgKF9UdXBsZV9pbXBsPF9JZHgsIF9VSGVhZCwgX1VUYWlscy4uLj46Ol9NX3RhaWwoX19pbikpKSwKKwkgIF9CYXNlKHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+CisJCShfVHVwbGVfaW1wbDxfSWR4LCBfVUhlYWQsIF9VVGFpbHMuLi4+OjpfTV9oZWFkKF9faW4pKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKwlfVHVwbGVfaW1wbChhbGxvY2F0b3JfYXJnX3QgX190YWcsIGNvbnN0IF9BbGxvYyYgX19hKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hKSwKKyAgICAgICAgICBfQmFzZShfX3VzZV9hbGxvYzxfSGVhZD4oX19hKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKwlfVHVwbGVfaW1wbChhbGxvY2F0b3JfYXJnX3QgX190YWcsIGNvbnN0IF9BbGxvYyYgX19hLAorCQkgICAgY29uc3QgX0hlYWQmIF9faGVhZCwgY29uc3QgX1RhaWwmLi4uIF9fdGFpbCkKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwgX190YWlsLi4uKSwKKyAgICAgICAgICBfQmFzZShfX3VzZV9hbGxvYzxfSGVhZCwgX0FsbG9jLCBfSGVhZD4oX19hKSwgX19oZWFkKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfVUhlYWQsIHR5cGVuYW1lLi4uIF9VVGFpbCwKKyAgICAgICAgICAgICAgIHR5cGVuYW1lID0gdHlwZW5hbWUgZW5hYmxlX2lmPHNpemVvZi4uLihfVGFpbCkKKwkJCQkJICAgICA9PSBzaXplb2YuLi4oX1VUYWlsKT46OnR5cGU+CisJX1R1cGxlX2ltcGwoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkgICAgICAgICAgICBfVUhlYWQmJiBfX2hlYWQsIF9VVGFpbCYmLi4uIF9fdGFpbCkKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwgc3RkOjpmb3J3YXJkPF9VVGFpbD4oX190YWlsKS4uLiksCisgICAgICAgICAgX0Jhc2UoX191c2VfYWxsb2M8X0hlYWQsIF9BbGxvYywgX1VIZWFkPihfX2EpLAorCSAgICAgICAgc3RkOjpmb3J3YXJkPF9VSGVhZD4oX19oZWFkKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICAgICAgX1R1cGxlX2ltcGwoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkgICAgICAgICAgICBjb25zdCBfVHVwbGVfaW1wbCYgX19pbikKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwgX01fdGFpbChfX2luKSksIAorICAgICAgICAgIF9CYXNlKF9fdXNlX2FsbG9jPF9IZWFkLCBfQWxsb2MsIF9IZWFkPihfX2EpLCBfTV9oZWFkKF9faW4pKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorCV9UdXBsZV9pbXBsKGFsbG9jYXRvcl9hcmdfdCBfX3RhZywgY29uc3QgX0FsbG9jJiBfX2EsCisJICAgICAgICAgICAgX1R1cGxlX2ltcGwmJiBfX2luKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hLCBzdGQ6Om1vdmUoX01fdGFpbChfX2luKSkpLCAKKwkgIF9CYXNlKF9fdXNlX2FsbG9jPF9IZWFkLCBfQWxsb2MsIF9IZWFkPihfX2EpLAorCSAgICAgICAgc3RkOjpmb3J3YXJkPF9IZWFkPihfTV9oZWFkKF9faW4pKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKwlfVHVwbGVfaW1wbChhbGxvY2F0b3JfYXJnX3QgX190YWcsIGNvbnN0IF9BbGxvYyYgX19hLAorCSAgICAgICAgICAgIGNvbnN0IF9UdXBsZV9pbXBsPF9JZHgsIF9VRWxlbWVudHMuLi4+JiBfX2luKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hLAorCQkgICAgIF9UdXBsZV9pbXBsPF9JZHgsIF9VRWxlbWVudHMuLi4+OjpfTV90YWlsKF9faW4pKSwKKwkgIF9CYXNlKF9fdXNlX2FsbG9jPF9IZWFkLCBfQWxsb2MsIF9IZWFkPihfX2EpLAorCQlfVHVwbGVfaW1wbDxfSWR4LCBfVUVsZW1lbnRzLi4uPjo6X01faGVhZChfX2luKSkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1VIZWFkLCB0eXBlbmFtZS4uLiBfVVRhaWxzPgorCV9UdXBsZV9pbXBsKGFsbG9jYXRvcl9hcmdfdCBfX3RhZywgY29uc3QgX0FsbG9jJiBfX2EsCisJICAgICAgICAgICAgX1R1cGxlX2ltcGw8X0lkeCwgX1VIZWFkLCBfVVRhaWxzLi4uPiYmIF9faW4pCisJOiBfSW5oZXJpdGVkKF9fdGFnLCBfX2EsIHN0ZDo6bW92ZQorCQkgICAgIChfVHVwbGVfaW1wbDxfSWR4LCBfVUhlYWQsIF9VVGFpbHMuLi4+OjpfTV90YWlsKF9faW4pKSksCisJICBfQmFzZShfX3VzZV9hbGxvYzxfSGVhZCwgX0FsbG9jLCBfVUhlYWQ+KF9fYSksCisgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9VSGVhZD4KKwkJKF9UdXBsZV9pbXBsPF9JZHgsIF9VSGVhZCwgX1VUYWlscy4uLj46Ol9NX2hlYWQoX19pbikpKSB7IH0KKworICAgICAgX1R1cGxlX2ltcGwmCisgICAgICBvcGVyYXRvcj0oY29uc3QgX1R1cGxlX2ltcGwmIF9faW4pCisgICAgICB7CisJX01faGVhZCgqdGhpcykgPSBfTV9oZWFkKF9faW4pOworCV9NX3RhaWwoKnRoaXMpID0gX01fdGFpbChfX2luKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIF9UdXBsZV9pbXBsJgorICAgICAgb3BlcmF0b3I9KF9UdXBsZV9pbXBsJiYgX19pbikKKyAgICAgIG5vZXhjZXB0KF9fYW5kXzxpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfSGVhZD4sCisJICAgICAgICAgICAgICBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfSW5oZXJpdGVkPj46OnZhbHVlKQorICAgICAgeworCV9NX2hlYWQoKnRoaXMpID0gc3RkOjpmb3J3YXJkPF9IZWFkPihfTV9oZWFkKF9faW4pKTsKKwlfTV90YWlsKCp0aGlzKSA9IHN0ZDo6bW92ZShfTV90YWlsKF9faW4pKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgICAgIF9UdXBsZV9pbXBsJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgX1R1cGxlX2ltcGw8X0lkeCwgX1VFbGVtZW50cy4uLj4mIF9faW4pCisgICAgICAgIHsKKwkgIF9NX2hlYWQoKnRoaXMpID0gX1R1cGxlX2ltcGw8X0lkeCwgX1VFbGVtZW50cy4uLj46Ol9NX2hlYWQoX19pbik7CisJICBfTV90YWlsKCp0aGlzKSA9IF9UdXBsZV9pbXBsPF9JZHgsIF9VRWxlbWVudHMuLi4+OjpfTV90YWlsKF9faW4pOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VIZWFkLCB0eXBlbmFtZS4uLiBfVVRhaWxzPgorICAgICAgICBfVHVwbGVfaW1wbCYKKyAgICAgICAgb3BlcmF0b3I9KF9UdXBsZV9pbXBsPF9JZHgsIF9VSGVhZCwgX1VUYWlscy4uLj4mJiBfX2luKQorICAgICAgICB7CisJICBfTV9oZWFkKCp0aGlzKSA9IHN0ZDo6Zm9yd2FyZDxfVUhlYWQ+CisJICAgIChfVHVwbGVfaW1wbDxfSWR4LCBfVUhlYWQsIF9VVGFpbHMuLi4+OjpfTV9oZWFkKF9faW4pKTsKKwkgIF9NX3RhaWwoKnRoaXMpID0gc3RkOjptb3ZlCisJICAgIChfVHVwbGVfaW1wbDxfSWR4LCBfVUhlYWQsIF9VVGFpbHMuLi4+OjpfTV90YWlsKF9faW4pKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICB2b2lkCisgICAgICBfTV9zd2FwKF9UdXBsZV9pbXBsJiBfX2luKQorICAgICAgbm9leGNlcHQobm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X0hlYWQmPigpLAorCQkJICAgICBzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkKKwkgICAgICAgJiYgbm9leGNlcHQoX01fdGFpbChfX2luKS5fTV9zd2FwKF9NX3RhaWwoX19pbikpKSkKKyAgICAgIHsKKwl1c2luZyBzdGQ6OnN3YXA7CisJc3dhcChfTV9oZWFkKCp0aGlzKSwgX01faGVhZChfX2luKSk7CisJX0luaGVyaXRlZDo6X01fc3dhcChfTV90YWlsKF9faW4pKTsKKyAgICAgIH0KKyAgICB9OworCisgIC8vLyBQcmltYXJ5IGNsYXNzIHRlbXBsYXRlLCB0dXBsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfRWxlbWVudHM+IAorICAgIGNsYXNzIHR1cGxlIDogcHVibGljIF9UdXBsZV9pbXBsPDAsIF9FbGVtZW50cy4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UdXBsZV9pbXBsPDAsIF9FbGVtZW50cy4uLj4gX0luaGVyaXRlZDsKKworICAgIHB1YmxpYzoKKyAgICAgIGNvbnN0ZXhwciB0dXBsZSgpCisgICAgICA6IF9Jbmhlcml0ZWQoKSB7IH0KKworICAgICAgZXhwbGljaXQKKyAgICAgIGNvbnN0ZXhwciB0dXBsZShjb25zdCBfRWxlbWVudHMmLi4uIF9fZWxlbWVudHMpCisgICAgICA6IF9Jbmhlcml0ZWQoX19lbGVtZW50cy4uLikgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9VRWxlbWVudHMsIHR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgZW5hYmxlX2lmPF9fYW5kXzxpc19jb252ZXJ0aWJsZTxfVUVsZW1lbnRzLAorCQkJCQlfRWxlbWVudHM+Li4uPjo6dmFsdWU+Ojp0eXBlPgorCWV4cGxpY2l0CisgICAgICAgIGNvbnN0ZXhwciB0dXBsZShfVUVsZW1lbnRzJiYuLi4gX19lbGVtZW50cykKKwk6IF9Jbmhlcml0ZWQoc3RkOjpmb3J3YXJkPF9VRWxlbWVudHM+KF9fZWxlbWVudHMpLi4uKSB7CX0KKworICAgICAgY29uc3RleHByIHR1cGxlKGNvbnN0IHR1cGxlJikgPSBkZWZhdWx0OworCisgICAgICBjb25zdGV4cHIgdHVwbGUodHVwbGUmJikgPSBkZWZhdWx0OyAKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cywgdHlwZW5hbWUgPSB0eXBlbmFtZQorICAgICAgICBlbmFibGVfaWY8X19hbmRfPGlzX2NvbnZlcnRpYmxlPGNvbnN0IF9VRWxlbWVudHMmLAorCQkJCQlfRWxlbWVudHM+Li4uPjo6dmFsdWU+Ojp0eXBlPgorICAgICAgICBjb25zdGV4cHIgdHVwbGUoY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9faW4pCisgICAgICAgIDogX0luaGVyaXRlZChzdGF0aWNfY2FzdDxjb25zdCBfVHVwbGVfaW1wbDwwLCBfVUVsZW1lbnRzLi4uPiY+KF9faW4pKQorICAgICAgICB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cywgdHlwZW5hbWUgPSB0eXBlbmFtZQorICAgICAgICBlbmFibGVfaWY8X19hbmRfPGlzX2NvbnZlcnRpYmxlPF9VRWxlbWVudHMsCisJCQkJCV9FbGVtZW50cz4uLi4+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGNvbnN0ZXhwciB0dXBsZSh0dXBsZTxfVUVsZW1lbnRzLi4uPiYmIF9faW4pCisgICAgICAgIDogX0luaGVyaXRlZChzdGF0aWNfY2FzdDxfVHVwbGVfaW1wbDwwLCBfVUVsZW1lbnRzLi4uPiYmPihfX2luKSkgeyB9CisKKyAgICAgIC8vIEFsbG9jYXRvci1leHRlbmRlZCBjb25zdHJ1Y3RvcnMuCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKwl0dXBsZShhbGxvY2F0b3JfYXJnX3QgX190YWcsIGNvbnN0IF9BbGxvYyYgX19hKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorCXR1cGxlKGFsbG9jYXRvcl9hcmdfdCBfX3RhZywgY29uc3QgX0FsbG9jJiBfX2EsCisJICAgICAgY29uc3QgX0VsZW1lbnRzJi4uLiBfX2VsZW1lbnRzKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hLCBfX2VsZW1lbnRzLi4uKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIGVuYWJsZV9pZjxzaXplb2YuLi4oX1VFbGVtZW50cykKKwkJCSA9PSBzaXplb2YuLi4oX0VsZW1lbnRzKT46OnR5cGU+CisJdHVwbGUoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkgICAgICBfVUVsZW1lbnRzJiYuLi4gX19lbGVtZW50cykKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwgc3RkOjpmb3J3YXJkPF9VRWxlbWVudHM+KF9fZWxlbWVudHMpLi4uKQorICAgICAgIAl7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorCXR1cGxlKGFsbG9jYXRvcl9hcmdfdCBfX3RhZywgY29uc3QgX0FsbG9jJiBfX2EsIGNvbnN0IHR1cGxlJiBfX2luKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hLCBzdGF0aWNfY2FzdDxjb25zdCBfSW5oZXJpdGVkJj4oX19pbikpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisJdHVwbGUoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwgdHVwbGUmJiBfX2luKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hLCBzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJiY+KF9faW4pKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIGVuYWJsZV9pZjxzaXplb2YuLi4oX1VFbGVtZW50cykKKwkJCSA9PSBzaXplb2YuLi4oX0VsZW1lbnRzKT46OnR5cGU+CisJdHVwbGUoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkgICAgICBjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwKKwkgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgX1R1cGxlX2ltcGw8MCwgX1VFbGVtZW50cy4uLj4mPihfX2luKSkKKwl7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIGVuYWJsZV9pZjxzaXplb2YuLi4oX1VFbGVtZW50cykKKwkJCSA9PSBzaXplb2YuLi4oX0VsZW1lbnRzKT46OnR5cGU+CisJdHVwbGUoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkgICAgICB0dXBsZTxfVUVsZW1lbnRzLi4uPiYmIF9faW4pCisJOiBfSW5oZXJpdGVkKF9fdGFnLCBfX2EsCisJICAgICAgICAgICAgIHN0YXRpY19jYXN0PF9UdXBsZV9pbXBsPDAsIF9VRWxlbWVudHMuLi4+JiY+KF9faW4pKQorCXsgfQorCisgICAgICB0dXBsZSYKKyAgICAgIG9wZXJhdG9yPShjb25zdCB0dXBsZSYgX19pbikKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gX19pbjsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHR1cGxlJgorICAgICAgb3BlcmF0b3I9KHR1cGxlJiYgX19pbikKKyAgICAgIG5vZXhjZXB0KGlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPF9Jbmhlcml0ZWQ+Ojp2YWx1ZSkKKyAgICAgIHsKKwlzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gc3RkOjptb3ZlKF9faW4pOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1VFbGVtZW50cywgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBlbmFibGVfaWY8c2l6ZW9mLi4uKF9VRWxlbWVudHMpCisJCQkgPT0gc2l6ZW9mLi4uKF9FbGVtZW50cyk+Ojp0eXBlPgorICAgICAgICB0dXBsZSYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX2luKQorICAgICAgICB7CisJICBzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gX19pbjsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9VRWxlbWVudHMsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPHNpemVvZi4uLihfVUVsZW1lbnRzKQorCQkJID09IHNpemVvZi4uLihfRWxlbWVudHMpPjo6dHlwZT4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPSh0dXBsZTxfVUVsZW1lbnRzLi4uPiYmIF9faW4pCisgICAgICAgIHsKKwkgIHN0YXRpY19jYXN0PF9Jbmhlcml0ZWQmPigqdGhpcykgPSBzdGQ6Om1vdmUoX19pbik7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB2b2lkCisgICAgICBzd2FwKHR1cGxlJiBfX2luKQorICAgICAgbm9leGNlcHQobm9leGNlcHQoX19pbi5fTV9zd2FwKF9faW4pKSkKKyAgICAgIHsgX0luaGVyaXRlZDo6X01fc3dhcChfX2luKTsgfQorICAgIH07CisKKyAgLy8gRXhwbGljaXQgc3BlY2lhbGl6YXRpb24sIHplcm8tZWxlbWVudCB0dXBsZS4KKyAgdGVtcGxhdGU8PiAgCisgICAgY2xhc3MgdHVwbGU8PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICB2b2lkIHN3YXAodHVwbGUmKSBub2V4Y2VwdCB7IC8qIG5vLW9wICovIH0KKyAgICB9OworCisgIC8vLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uLCAyLWVsZW1lbnQgdHVwbGUuCisgIC8vLyBJbmNsdWRlcyBjb25zdHJ1Y3Rpb24gYW5kIGFzc2lnbm1lbnQgZnJvbSBhIHBhaXIuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgorICAgIGNsYXNzIHR1cGxlPF9UMSwgX1QyPiA6IHB1YmxpYyBfVHVwbGVfaW1wbDwwLCBfVDEsIF9UMj4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UdXBsZV9pbXBsPDAsIF9UMSwgX1QyPiBfSW5oZXJpdGVkOworCisgICAgcHVibGljOgorICAgICAgY29uc3RleHByIHR1cGxlKCkKKyAgICAgIDogX0luaGVyaXRlZCgpIHsgfQorCisgICAgICBleHBsaWNpdAorICAgICAgY29uc3RleHByIHR1cGxlKGNvbnN0IF9UMSYgX19hMSwgY29uc3QgX1QyJiBfX2EyKQorICAgICAgOiBfSW5oZXJpdGVkKF9fYTEsIF9fYTIpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMiwgdHlwZW5hbWUgPSB0eXBlbmFtZQorCSAgICAgICBlbmFibGVfaWY8X19hbmRfPGlzX2NvbnZlcnRpYmxlPF9VMSwgX1QxPiwKKwkJCQlpc19jb252ZXJ0aWJsZTxfVTIsIF9UMj4+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGV4cGxpY2l0CisgICAgICAgIGNvbnN0ZXhwciB0dXBsZShfVTEmJiBfX2ExLCBfVTImJiBfX2EyKQorCTogX0luaGVyaXRlZChzdGQ6OmZvcndhcmQ8X1UxPihfX2ExKSwgc3RkOjpmb3J3YXJkPF9VMj4oX19hMikpIHsgfQorCisgICAgICBjb25zdGV4cHIgdHVwbGUoY29uc3QgdHVwbGUmKSA9IGRlZmF1bHQ7CisKKyAgICAgIGNvbnN0ZXhwciB0dXBsZSh0dXBsZSYmKSA9IGRlZmF1bHQ7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VMSwgdHlwZW5hbWUgX1UyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJZW5hYmxlX2lmPF9fYW5kXzxpc19jb252ZXJ0aWJsZTxjb25zdCBfVTEmLCBfVDE+LAorCQkJIGlzX2NvbnZlcnRpYmxlPGNvbnN0IF9VMiYsIF9UMj4+Ojp2YWx1ZT46OnR5cGU+CisgICAgICAgIGNvbnN0ZXhwciB0dXBsZShjb25zdCB0dXBsZTxfVTEsIF9VMj4mIF9faW4pCisJOiBfSW5oZXJpdGVkKHN0YXRpY19jYXN0PGNvbnN0IF9UdXBsZV9pbXBsPDAsIF9VMSwgX1UyPiY+KF9faW4pKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwkgICAgICAgZW5hYmxlX2lmPF9fYW5kXzxpc19jb252ZXJ0aWJsZTxfVTEsIF9UMT4sCisJCQkJaXNfY29udmVydGlibGU8X1UyLCBfVDI+Pjo6dmFsdWU+Ojp0eXBlPgorICAgICAgICBjb25zdGV4cHIgdHVwbGUodHVwbGU8X1UxLCBfVTI+JiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoc3RhdGljX2Nhc3Q8X1R1cGxlX2ltcGw8MCwgX1UxLCBfVTI+JiY+KF9faW4pKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTIsIHR5cGVuYW1lID0gdHlwZW5hbWUKKwllbmFibGVfaWY8X19hbmRfPGlzX2NvbnZlcnRpYmxlPGNvbnN0IF9VMSYsIF9UMT4sCisJCQkgaXNfY29udmVydGlibGU8Y29uc3QgX1UyJiwgX1QyPj46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgY29uc3RleHByIHR1cGxlKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX2luKQorCTogX0luaGVyaXRlZChfX2luLmZpcnN0LCBfX2luLnNlY29uZCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VMSwgdHlwZW5hbWUgX1UyLCB0eXBlbmFtZSA9IHR5cGVuYW1lCisJICAgICAgIGVuYWJsZV9pZjxfX2FuZF88aXNfY29udmVydGlibGU8X1UxLCBfVDE+LAorCQkJCWlzX2NvbnZlcnRpYmxlPF9VMiwgX1QyPj46OnZhbHVlPjo6dHlwZT4KKyAgICAgICAgY29uc3RleHByIHR1cGxlKHBhaXI8X1UxLCBfVTI+JiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoc3RkOjpmb3J3YXJkPF9VMT4oX19pbi5maXJzdCksCisJCSAgICAgc3RkOjpmb3J3YXJkPF9VMj4oX19pbi5zZWNvbmQpKSB7IH0KKworICAgICAgLy8gQWxsb2NhdG9yLWV4dGVuZGVkIGNvbnN0cnVjdG9ycy4KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorCXR1cGxlKGFsbG9jYXRvcl9hcmdfdCBfX3RhZywgY29uc3QgX0FsbG9jJiBfX2EpCisJOiBfSW5oZXJpdGVkKF9fdGFnLCBfX2EpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisJdHVwbGUoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwKKwkgICAgICBjb25zdCBfVDEmIF9fYTEsIGNvbnN0IF9UMiYgX19hMikKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwgX19hMSwgX19hMikgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisJdHVwbGUoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwgX1UxJiYgX19hMSwgX1UyJiYgX19hMikKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwgc3RkOjpmb3J3YXJkPF9VMT4oX19hMSksCisJICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfVTI+KF9fYTIpKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorCXR1cGxlKGFsbG9jYXRvcl9hcmdfdCBfX3RhZywgY29uc3QgX0FsbG9jJiBfX2EsIGNvbnN0IHR1cGxlJiBfX2luKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hLCBzdGF0aWNfY2FzdDxjb25zdCBfSW5oZXJpdGVkJj4oX19pbikpIHsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CisJdHVwbGUoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwgdHVwbGUmJiBfX2luKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hLCBzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJiY+KF9faW4pKSB7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKwl0dXBsZShhbGxvY2F0b3JfYXJnX3QgX190YWcsIGNvbnN0IF9BbGxvYyYgX19hLAorCSAgICAgIGNvbnN0IHR1cGxlPF9VMSwgX1UyPiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwKKwkgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgX1R1cGxlX2ltcGw8MCwgX1UxLCBfVTI+Jj4oX19pbikpCisJeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisJdHVwbGUoYWxsb2NhdG9yX2FyZ190IF9fdGFnLCBjb25zdCBfQWxsb2MmIF9fYSwgdHVwbGU8X1UxLCBfVTI+JiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwgc3RhdGljX2Nhc3Q8X1R1cGxlX2ltcGw8MCwgX1UxLCBfVTI+JiY+KF9faW4pKQorCXsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9VMSwgdHlwZW5hbWUgX1UyPgorICAgICAgICB0dXBsZShhbGxvY2F0b3JfYXJnX3QgX190YWcsIGNvbnN0IF9BbGxvYyYgX19hLAorCSAgICAgIGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX2luKQorCTogX0luaGVyaXRlZChfX3RhZywgX19hLCBfX2luLmZpcnN0LCBfX2luLnNlY29uZCkgeyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisgICAgICAgIHR1cGxlKGFsbG9jYXRvcl9hcmdfdCBfX3RhZywgY29uc3QgX0FsbG9jJiBfX2EsIHBhaXI8X1UxLCBfVTI+JiYgX19pbikKKwk6IF9Jbmhlcml0ZWQoX190YWcsIF9fYSwgc3RkOjpmb3J3YXJkPF9VMT4oX19pbi5maXJzdCksCisJCSAgICAgc3RkOjpmb3J3YXJkPF9VMj4oX19pbi5zZWNvbmQpKSB7IH0KKworICAgICAgdHVwbGUmCisgICAgICBvcGVyYXRvcj0oY29uc3QgdHVwbGUmIF9faW4pCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IF9faW47CisJcmV0dXJuICp0aGlzOworICAgICAgfQorCisgICAgICB0dXBsZSYKKyAgICAgIG9wZXJhdG9yPSh0dXBsZSYmIF9faW4pCisgICAgICBub2V4Y2VwdChpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfSW5oZXJpdGVkPjo6dmFsdWUpCisgICAgICB7CisJc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IHN0ZDo6bW92ZShfX2luKTsKKwlyZXR1cm4gKnRoaXM7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VMSwgdHlwZW5hbWUgX1UyPgorICAgICAgICB0dXBsZSYKKyAgICAgICAgb3BlcmF0b3I9KGNvbnN0IHR1cGxlPF9VMSwgX1UyPiYgX19pbikKKyAgICAgICAgeworCSAgc3RhdGljX2Nhc3Q8X0luaGVyaXRlZCY+KCp0aGlzKSA9IF9faW47CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPSh0dXBsZTxfVTEsIF9VMj4mJiBfX2luKQorICAgICAgICB7CisJICBzdGF0aWNfY2FzdDxfSW5oZXJpdGVkJj4oKnRoaXMpID0gc3RkOjptb3ZlKF9faW4pOworCSAgcmV0dXJuICp0aGlzOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1UxLCB0eXBlbmFtZSBfVTI+CisgICAgICAgIHR1cGxlJgorICAgICAgICBvcGVyYXRvcj0oY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9faW4pCisgICAgICAgIHsKKwkgIHRoaXMtPl9NX2hlYWQoKnRoaXMpID0gX19pbi5maXJzdDsKKwkgIHRoaXMtPl9NX3RhaWwoKnRoaXMpLl9NX2hlYWQoKnRoaXMpID0gX19pbi5zZWNvbmQ7CisJICByZXR1cm4gKnRoaXM7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVTEsIHR5cGVuYW1lIF9VMj4KKyAgICAgICAgdHVwbGUmCisgICAgICAgIG9wZXJhdG9yPShwYWlyPF9VMSwgX1UyPiYmIF9faW4pCisgICAgICAgIHsKKwkgIHRoaXMtPl9NX2hlYWQoKnRoaXMpID0gc3RkOjpmb3J3YXJkPF9VMT4oX19pbi5maXJzdCk7CisJICB0aGlzLT5fTV90YWlsKCp0aGlzKS5fTV9oZWFkKCp0aGlzKSA9IHN0ZDo6Zm9yd2FyZDxfVTI+KF9faW4uc2Vjb25kKTsKKwkgIHJldHVybiAqdGhpczsKKwl9CisKKyAgICAgIHZvaWQKKyAgICAgIHN3YXAodHVwbGUmIF9faW4pCisgICAgICBub2V4Y2VwdChub2V4Y2VwdChfX2luLl9NX3N3YXAoX19pbikpKQorICAgICAgeyBfSW5oZXJpdGVkOjpfTV9zd2FwKF9faW4pOyB9CisgICAgfTsKKworCisgIC8vLyBHaXZlcyB0aGUgdHlwZSBvZiB0aGUgaXRoIGVsZW1lbnQgb2YgYSBnaXZlbiB0dXBsZSB0eXBlLgorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2ksIHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgdHVwbGVfZWxlbWVudDsKKworICAvKioKKyAgICogUmVjdXJzaXZlIGNhc2UgZm9yIHR1cGxlX2VsZW1lbnQ6IHN0cmlwIG9mZiB0aGUgZmlyc3QgZWxlbWVudCBpbgorICAgKiB0aGUgdHVwbGUgYW5kIHJldHJpZXZlIHRoZSAoaS0xKXRoIGVsZW1lbnQgb2YgdGhlIHJlbWFpbmluZyB0dXBsZS4KKyAgICovCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9faSwgdHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PF9faSwgdHVwbGU8X0hlYWQsIF9UYWlsLi4uPiA+CisgICAgOiB0dXBsZV9lbGVtZW50PF9faSAtIDEsIHR1cGxlPF9UYWlsLi4uPiA+IHsgfTsKKworICAvKioKKyAgICogQmFzaXMgY2FzZSBmb3IgdHVwbGVfZWxlbWVudDogVGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIG9uZSB3ZSdyZSBzZWVraW5nLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PDAsIHR1cGxlPF9IZWFkLCBfVGFpbC4uLj4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX0hlYWQgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9faSwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PF9faSwgY29uc3QgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUKKyAgICAgIGFkZF9jb25zdDx0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9faSwgX1RwPjo6dHlwZT46OnR5cGUgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9faSwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PF9faSwgdm9sYXRpbGUgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUKKyAgICAgIGFkZF92b2xhdGlsZTx0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9faSwgX1RwPjo6dHlwZT46OnR5cGUgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9faSwgdHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCB0dXBsZV9lbGVtZW50PF9faSwgY29uc3Qgdm9sYXRpbGUgX1RwPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUKKyAgICAgIGFkZF9jdjx0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9faSwgX1RwPjo6dHlwZT46OnR5cGUgdHlwZTsKKyAgICB9OworCisgIC8vLyBGaW5kcyB0aGUgc2l6ZSBvZiBhIGdpdmVuIHR1cGxlIHR5cGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgdHVwbGVfc2l6ZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHR1cGxlX3NpemU8Y29uc3QgX1RwPgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PAorICAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9jdjxkZWNsdHlwZSh0dXBsZV9zaXplPF9UcD46OnZhbHVlKT46OnR5cGUsCisgICAgICAgICAgICAgdHVwbGVfc2l6ZTxfVHA+Ojp2YWx1ZT4geyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgdHVwbGVfc2l6ZTx2b2xhdGlsZSBfVHA+CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8CisgICAgICAgICAgICAgdHlwZW5hbWUgcmVtb3ZlX2N2PGRlY2x0eXBlKHR1cGxlX3NpemU8X1RwPjo6dmFsdWUpPjo6dHlwZSwKKyAgICAgICAgICAgICB0dXBsZV9zaXplPF9UcD46OnZhbHVlPiB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCB0dXBsZV9zaXplPGNvbnN0IHZvbGF0aWxlIF9UcD4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDwKKyAgICAgICAgICAgICB0eXBlbmFtZSByZW1vdmVfY3Y8ZGVjbHR5cGUodHVwbGVfc2l6ZTxfVHA+Ojp2YWx1ZSk+Ojp0eXBlLAorICAgICAgICAgICAgIHR1cGxlX3NpemU8X1RwPjo6dmFsdWU+IHsgfTsKKworICAvLy8gY2xhc3MgdHVwbGVfc2l6ZQorICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgc3RydWN0IHR1cGxlX3NpemU8dHVwbGU8X0VsZW1lbnRzLi4uPj4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgc2l6ZW9mLi4uKF9FbGVtZW50cyk+IHsgfTsKKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2ksIHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfVGFpbD4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19hZGRfcmVmPF9IZWFkPjo6dHlwZQorICAgIF9fZ2V0X2hlbHBlcihfVHVwbGVfaW1wbDxfX2ksIF9IZWFkLCBfVGFpbC4uLj4mIF9fdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfVHVwbGVfaW1wbDxfX2ksIF9IZWFkLCBfVGFpbC4uLj46Ol9NX2hlYWQoX190KTsgfQorCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9faSwgdHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9UYWlsPgorICAgIGNvbnN0ZXhwciB0eXBlbmFtZSBfX2FkZF9jX3JlZjxfSGVhZD46OnR5cGUKKyAgICBfX2dldF9oZWxwZXIoY29uc3QgX1R1cGxlX2ltcGw8X19pLCBfSGVhZCwgX1RhaWwuLi4+JiBfX3QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gX1R1cGxlX2ltcGw8X19pLCBfSGVhZCwgX1RhaWwuLi4+OjpfTV9oZWFkKF9fdCk7IH0KKworICAvLyBSZXR1cm4gYSByZWZlcmVuY2UgKGNvbnN0IHJlZmVyZW5jZSwgcnZhbHVlIHJlZmVyZW5jZSkgdG8gdGhlIGl0aCBlbGVtZW50CisgIC8vIG9mIGEgdHVwbGUuICBBbnkgY29uc3Qgb3Igbm9uLWNvbnN0IHJlZiBlbGVtZW50cyBhcmUgcmV0dXJuZWQgd2l0aCB0aGVpcgorICAvLyBvcmlnaW5hbCB0eXBlLgorICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2ksIHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgX19hZGRfcmVmPAorICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHR1cGxlX2VsZW1lbnQ8X19pLCB0dXBsZTxfRWxlbWVudHMuLi4+Pjo6dHlwZQorICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlCisgICAgZ2V0KHR1cGxlPF9FbGVtZW50cy4uLj4mIF9fdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2dldF9oZWxwZXI8X19pPihfX3QpOyB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fYWRkX2NfcmVmPAorICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHR1cGxlX2VsZW1lbnQ8X19pLCB0dXBsZTxfRWxlbWVudHMuLi4+Pjo6dHlwZQorICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlCisgICAgZ2V0KGNvbnN0IHR1cGxlPF9FbGVtZW50cy4uLj4mIF9fdCkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX2dldF9oZWxwZXI8X19pPihfX3QpOyB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCB0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgY29uc3RleHByIHR5cGVuYW1lIF9fYWRkX3JfcmVmPAorICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIHR1cGxlX2VsZW1lbnQ8X19pLCB0dXBsZTxfRWxlbWVudHMuLi4+Pjo6dHlwZQorICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlCisgICAgZ2V0KHR1cGxlPF9FbGVtZW50cy4uLj4mJiBfX3QpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gc3RkOjpmb3J3YXJkPHR5cGVuYW1lIHR1cGxlX2VsZW1lbnQ8X19pLAorCXR1cGxlPF9FbGVtZW50cy4uLj4+Ojp0eXBlJiY+KGdldDxfX2k+KF9fdCkpOyB9CisKKyAgLy8gVGhpcyBjbGFzcyBoZWxwcyBjb25zdHJ1Y3QgdGhlIHZhcmlvdXMgY29tcGFyaXNvbiBvcGVyYXRpb25zIG9uIHR1cGxlcworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2NoZWNrX2VxdWFsX3NpemUsIHN0ZDo6c2l6ZV90IF9faSwgc3RkOjpzaXplX3QgX19qLAorCSAgIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3R1cGxlX2NvbXBhcmU7CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX19pLCBzdGQ6OnNpemVfdCBfX2osIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3R1cGxlX2NvbXBhcmU8MCwgX19pLCBfX2osIF9UcCwgX1VwPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCAKKyAgICAgIF9fZXEoY29uc3QgX1RwJiBfX3QsIGNvbnN0IF9VcCYgX191KQorICAgICAgeworCXJldHVybiAoZ2V0PF9faT4oX190KSA9PSBnZXQ8X19pPihfX3UpICYmCisJCV9fdHVwbGVfY29tcGFyZTwwLCBfX2kgKyAxLCBfX2osIF9UcCwgX1VwPjo6X19lcShfX3QsIF9fdSkpOworICAgICAgfQorICAgICAKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCAKKyAgICAgIF9fbGVzcyhjb25zdCBfVHAmIF9fdCwgY29uc3QgX1VwJiBfX3UpCisgICAgICB7CisJcmV0dXJuICgoZ2V0PF9faT4oX190KSA8IGdldDxfX2k+KF9fdSkpCisJCXx8ICEoZ2V0PF9faT4oX191KSA8IGdldDxfX2k+KF9fdCkpICYmCisJCV9fdHVwbGVfY29tcGFyZTwwLCBfX2kgKyAxLCBfX2osIF9UcCwgX1VwPjo6X19sZXNzKF9fdCwgX191KSk7CisgICAgICB9CisgICAgfTsKKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfX2ksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX3R1cGxlX2NvbXBhcmU8MCwgX19pLCBfX2ksIF9UcCwgX1VwPgorICAgIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCAKKyAgICAgIF9fZXEoY29uc3QgX1RwJiwgY29uc3QgX1VwJikgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCAKKyAgICAgIF9fbGVzcyhjb25zdCBfVHAmLCBjb25zdCBfVXAmKSB7IHJldHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBjb25zdGV4cHIgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdHVwbGU8X1RFbGVtZW50cy4uLj4mIF9fdCwKKwkgICAgICAgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR1cGxlPF9URWxlbWVudHMuLi4+IF9UcDsKKyAgICAgIHR5cGVkZWYgdHVwbGU8X1VFbGVtZW50cy4uLj4gX1VwOworICAgICAgcmV0dXJuIGJvb2woX190dXBsZV9jb21wYXJlPHR1cGxlX3NpemU8X1RwPjo6dmFsdWUgLSB0dXBsZV9zaXplPF9VcD46OnZhbHVlLAorCSAgICAgIDAsIHR1cGxlX3NpemU8X1RwPjo6dmFsdWUsIF9UcCwgX1VwPjo6X19lcShfX3QsIF9fdSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGNvbnN0ZXhwciBib29sCisgICAgb3BlcmF0b3I8KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgY29uc3QgdHVwbGU8X1VFbGVtZW50cy4uLj4mIF9fdSkKKyAgICB7CisgICAgICB0eXBlZGVmIHR1cGxlPF9URWxlbWVudHMuLi4+IF9UcDsKKyAgICAgIHR5cGVkZWYgdHVwbGU8X1VFbGVtZW50cy4uLj4gX1VwOworICAgICAgcmV0dXJuIGJvb2woX190dXBsZV9jb21wYXJlPHR1cGxlX3NpemU8X1RwPjo6dmFsdWUgLSB0dXBsZV9zaXplPF9VcD46OnZhbHVlLAorCSAgICAgIDAsIHR1cGxlX3NpemU8X1RwPjo6dmFsdWUsIF9UcCwgX1VwPjo6X19sZXNzKF9fdCwgX191KSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9URWxlbWVudHMsIHR5cGVuYW1lLi4uIF9VRWxlbWVudHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCSAgICAgICBjb25zdCB0dXBsZTxfVUVsZW1lbnRzLi4uPiYgX191KQorICAgIHsgcmV0dXJuICEoX190ID09IF9fdSk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVEVsZW1lbnRzLCB0eXBlbmFtZS4uLiBfVUVsZW1lbnRzPgorICAgIGlubGluZSBjb25zdGV4cHIgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCB0dXBsZTxfVEVsZW1lbnRzLi4uPiYgX190LAorCSAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeyByZXR1cm4gX191IDwgX190OyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeyByZXR1cm4gIShfX3UgPCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RFbGVtZW50cywgdHlwZW5hbWUuLi4gX1VFbGVtZW50cz4KKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wKKyAgICBvcGVyYXRvcj49KGNvbnN0IHR1cGxlPF9URWxlbWVudHMuLi4+JiBfX3QsCisJICAgICAgIGNvbnN0IHR1cGxlPF9VRWxlbWVudHMuLi4+JiBfX3UpCisgICAgeyByZXR1cm4gIShfX3QgPCBfX3UpOyB9CisKKyAgLy8gTkI6IERSIDcwNS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0VsZW1lbnRzPgorICAgIGNvbnN0ZXhwciB0dXBsZTx0eXBlbmFtZSBfX2RlY2F5X2FuZF9zdHJpcDxfRWxlbWVudHM+OjpfX3R5cGUuLi4+CisgICAgbWFrZV90dXBsZShfRWxlbWVudHMmJi4uLiBfX2FyZ3MpCisgICAgeworICAgICAgdHlwZWRlZiB0dXBsZTx0eXBlbmFtZSBfX2RlY2F5X2FuZF9zdHJpcDxfRWxlbWVudHM+OjpfX3R5cGUuLi4+CisJX19yZXN1bHRfdHlwZTsKKyAgICAgIHJldHVybiBfX3Jlc3VsdF90eXBlKHN0ZDo6Zm9yd2FyZDxfRWxlbWVudHM+KF9fYXJncykuLi4pOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfRWxlbWVudHM+CisgICAgdHVwbGU8X0VsZW1lbnRzJiYuLi4+CisgICAgZm9yd2FyZF9hc190dXBsZShfRWxlbWVudHMmJi4uLiBfX2FyZ3MpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gdHVwbGU8X0VsZW1lbnRzJiYuLi4+KHN0ZDo6Zm9yd2FyZDxfRWxlbWVudHM+KF9fYXJncykuLi4pOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfdHVwbGVfbGlrZV9pbXBsIDogZmFsc2VfdHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVHBzPgorICAgIHN0cnVjdCBfX2lzX3R1cGxlX2xpa2VfaW1wbDx0dXBsZTxfVHBzLi4uPj4gOiB0cnVlX3R5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CisgICAgc3RydWN0IF9faXNfdHVwbGVfbGlrZV9pbXBsPHBhaXI8X1QxLCBfVDI+PiA6IHRydWVfdHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4KKyAgICBzdHJ1Y3QgX19pc190dXBsZV9saWtlX2ltcGw8YXJyYXk8X1RwLCBfTm0+PiA6IHRydWVfdHlwZQorICAgIHsgfTsKKworICAvLyBJbnRlcm5hbCB0eXBlIHRyYWl0IHRoYXQgYWxsb3dzIHVzIHRvIHNmaW5hZS1wcm90ZWN0IHR1cGxlX2NhdC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3R1cGxlX2xpa2UKKyAgICA6IHB1YmxpYyBfX2lzX3R1cGxlX2xpa2VfaW1wbDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdgorICAgICAgICAgICAgPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlPjo6dHlwZT46OnR5cGUKKyAgICB7IH07CisKKyAgLy8gU3RvcmVzIGEgdHVwbGUgb2YgaW5kaWNlcy4gIEFsc28gdXNlZCBieSBiaW5kKCkgdG8gZXh0cmFjdCB0aGUgZWxlbWVudHMKKyAgLy8gaW4gYSB0dXBsZS4gCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90Li4uIF9JbmRleGVzPgorICAgIHN0cnVjdCBfSW5kZXhfdHVwbGUKKyAgICB7CisgICAgICB0eXBlZGVmIF9JbmRleF90dXBsZTxfSW5kZXhlcy4uLiwgc2l6ZW9mLi4uKF9JbmRleGVzKT4gX19uZXh0OworICAgIH07CisKKyAgLy8gQnVpbGRzIGFuIF9JbmRleF90dXBsZTwwLCAxLCAyLCAuLi4sIF9OdW0tMT4uCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9OdW0+CisgICAgc3RydWN0IF9CdWlsZF9pbmRleF90dXBsZQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J1aWxkX2luZGV4X3R1cGxlPF9OdW0gLSAxPjo6X190eXBlOjpfX25leHQgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfQnVpbGRfaW5kZXhfdHVwbGU8MD4KKyAgICB7CisgICAgICB0eXBlZGVmIF9JbmRleF90dXBsZTw+IF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90LCB0eXBlbmFtZSwgdHlwZW5hbWUsIHN0ZDo6c2l6ZV90PgorICAgIHN0cnVjdCBfX21ha2VfdHVwbGVfaW1wbDsKKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSWR4LCB0eXBlbmFtZSBfVHVwbGUsIHR5cGVuYW1lLi4uIF9UcCwKKyAgICAgICAgICAgc3RkOjpzaXplX3QgX05tPgorICAgIHN0cnVjdCBfX21ha2VfdHVwbGVfaW1wbDxfSWR4LCB0dXBsZTxfVHAuLi4+LCBfVHVwbGUsIF9ObT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fbWFrZV90dXBsZV9pbXBsPF9JZHggKyAxLCB0dXBsZTxfVHAuLi4sCisJdHlwZW5hbWUgc3RkOjp0dXBsZV9lbGVtZW50PF9JZHgsIF9UdXBsZT46OnR5cGU+LCBfVHVwbGUsIF9ObT46Ol9fdHlwZQorICAgICAgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX05tLCB0eXBlbmFtZSBfVHVwbGUsIHR5cGVuYW1lLi4uIF9UcD4KKyAgICBzdHJ1Y3QgX19tYWtlX3R1cGxlX2ltcGw8X05tLCB0dXBsZTxfVHAuLi4+LCBfVHVwbGUsIF9ObT4KKyAgICB7CisgICAgICB0eXBlZGVmIHR1cGxlPF9UcC4uLj4gX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R1cGxlPgorICAgIHN0cnVjdCBfX2RvX21ha2VfdHVwbGUKKyAgICA6IHB1YmxpYyBfX21ha2VfdHVwbGVfaW1wbDwwLCB0dXBsZTw+LCBfVHVwbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp0dXBsZV9zaXplPF9UdXBsZT46OnZhbHVlPgorICAgIHsgfTsKKworICAvLyBSZXR1cm5zIHRoZSBzdGQ6OnR1cGxlIGVxdWl2YWxlbnQgb2YgYSB0dXBsZS1saWtlIHR5cGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UdXBsZT4KKyAgICBzdHJ1Y3QgX19tYWtlX3R1cGxlCisgICAgOiBwdWJsaWMgX19kb19tYWtlX3R1cGxlPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2N2CisgICAgICAgICAgICA8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UdXBsZT46OnR5cGU+Ojp0eXBlPgorICAgIHsgfTsKKworICAvLyBDb21iaW5lcyBzZXZlcmFsIHN0ZDo6dHVwbGUncyBpbnRvIGEgc2luZ2xlIG9uZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4+CisgICAgc3RydWN0IF9fY29tYmluZV90dXBsZXM7CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2NvbWJpbmVfdHVwbGVzPD4KKyAgICB7CisgICAgICB0eXBlZGVmIHR1cGxlPD4gX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RzPgorICAgIHN0cnVjdCBfX2NvbWJpbmVfdHVwbGVzPHR1cGxlPF9Ucy4uLj4+CisgICAgeworICAgICAgdHlwZWRlZiB0dXBsZTxfVHMuLi4+IF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9UMXMsIHR5cGVuYW1lLi4uIF9UMnMsIHR5cGVuYW1lLi4uIF9SZW0+CisgICAgc3RydWN0IF9fY29tYmluZV90dXBsZXM8dHVwbGU8X1Qxcy4uLj4sIHR1cGxlPF9UMnMuLi4+LCBfUmVtLi4uPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3R1cGxlczx0dXBsZTxfVDFzLi4uLCBfVDJzLi4uPiwKKwkJCQkJX1JlbS4uLj46Ol9fdHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLyBDb21wdXRlcyB0aGUgcmVzdWx0IHR5cGUgb2YgdHVwbGVfY2F0IGdpdmVuIGEgc2V0IG9mIHR1cGxlLWxpa2UgdHlwZXMuCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9UcGxzPgorICAgIHN0cnVjdCBfX3R1cGxlX2NhdF9yZXN1bHQKKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29tYmluZV90dXBsZXMKKyAgICAgICAgPHR5cGVuYW1lIF9fbWFrZV90dXBsZTxfVHBscz46Ol9fdHlwZS4uLj46Ol9fdHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLyBIZWxwZXIgdG8gZGV0ZXJtaW5lIHRoZSBpbmRleCBzZXQgZm9yIHRoZSBmaXJzdCB0dXBsZS1saWtlCisgIC8vIHR5cGUgb2YgYSBnaXZlbiBzZXQuCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uPgorICAgIHN0cnVjdCBfX21ha2VfMXN0X2luZGljZXM7CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX21ha2VfMXN0X2luZGljZXM8PgorICAgIHsKKyAgICAgIHR5cGVkZWYgc3RkOjpfSW5kZXhfdHVwbGU8PiBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9UcGxzPgorICAgIHN0cnVjdCBfX21ha2VfMXN0X2luZGljZXM8X1RwLCBfVHBscy4uLj4KKyAgICB7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6X0J1aWxkX2luZGV4X3R1cGxlPHN0ZDo6dHVwbGVfc2l6ZTwKKwl0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1RwPjo6dHlwZT46OnZhbHVlPjo6X190eXBlIF9fdHlwZTsKKyAgICB9OworCisgIC8vIFBlcmZvcm1zIHRoZSBhY3R1YWwgY29uY2F0ZW5hdGlvbiBieSBzdGVwLXdpc2UgZXhwYW5kaW5nIHR1cGxlLWxpa2UKKyAgLy8gb2JqZWN0cyBpbnRvIHRoZSBlbGVtZW50cywgIHdoaWNoIGFyZSBmaW5hbGx5IGZvcndhcmRlZCBpbnRvIHRoZQorICAvLyByZXN1bHQgdHVwbGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQsIHR5cGVuYW1lIF9JbmRpY2VzLCB0eXBlbmFtZS4uLiBfVHBscz4KKyAgICBzdHJ1Y3QgX190dXBsZV9jb25jYXRlcjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmV0LCBzdGQ6OnNpemVfdC4uLiBfSXMsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX1RwbHM+CisgICAgc3RydWN0IF9fdHVwbGVfY29uY2F0ZXI8X1JldCwgc3RkOjpfSW5kZXhfdHVwbGU8X0lzLi4uPiwgX1RwLCBfVHBscy4uLj4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVXM+CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgX1JldAorICAgICAgICBfU19kbyhfVHAmJiBfX3RwLCBfVHBscyYmLi4uIF9fdHBzLCBfVXMmJi4uLiBfX3VzKQorICAgICAgICB7CisJICB0eXBlZGVmIHR5cGVuYW1lIF9fbWFrZV8xc3RfaW5kaWNlczxfVHBscy4uLj46Ol9fdHlwZSBfX2lkeDsKKwkgIHR5cGVkZWYgX190dXBsZV9jb25jYXRlcjxfUmV0LCBfX2lkeCwgX1RwbHMuLi4+ICAgICAgX19uZXh0OworCSAgcmV0dXJuIF9fbmV4dDo6X1NfZG8oc3RkOjpmb3J3YXJkPF9UcGxzPihfX3RwcykuLi4sCisJCQkgICAgICAgc3RkOjpmb3J3YXJkPF9Vcz4oX191cykuLi4sCisJCQkgICAgICAgc3RkOjpnZXQ8X0lzPihzdGQ6OmZvcndhcmQ8X1RwPihfX3RwKSkuLi4pOworCX0KKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXQ+CisgICAgc3RydWN0IF9fdHVwbGVfY29uY2F0ZXI8X1JldCwgc3RkOjpfSW5kZXhfdHVwbGU8Pj4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVXM+CisJc3RhdGljIGNvbnN0ZXhwciBfUmV0CisJX1NfZG8oX1VzJiYuLi4gX191cykKKyAgICAgICAgeworCSAgcmV0dXJuIF9SZXQoc3RkOjpmb3J3YXJkPF9Vcz4oX191cykuLi4pOworCX0KKyAgICB9OworCisgIC8vLyB0dXBsZV9jYXQKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX1RwbHMsIHR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgICAgZW5hYmxlX2lmPF9fYW5kXzxfX2lzX3R1cGxlX2xpa2U8X1RwbHM+Li4uPjo6dmFsdWU+Ojp0eXBlPgorICAgIGNvbnN0ZXhwciBhdXRvCisgICAgdHVwbGVfY2F0KF9UcGxzJiYuLi4gX190cGxzKQorICAgIC0+IHR5cGVuYW1lIF9fdHVwbGVfY2F0X3Jlc3VsdDxfVHBscy4uLj46Ol9fdHlwZQorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190dXBsZV9jYXRfcmVzdWx0PF9UcGxzLi4uPjo6X190eXBlIF9fcmV0OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX21ha2VfMXN0X2luZGljZXM8X1RwbHMuLi4+OjpfX3R5cGUgX19pZHg7CisgICAgICB0eXBlZGVmIF9fdHVwbGVfY29uY2F0ZXI8X19yZXQsIF9faWR4LCBfVHBscy4uLj4gX19jb25jYXRlcjsKKyAgICAgIHJldHVybiBfX2NvbmNhdGVyOjpfU19kbyhzdGQ6OmZvcndhcmQ8X1RwbHM+KF9fdHBscykuLi4pOworICAgIH0KKworICAvLy8gdGllCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBpbmxpbmUgdHVwbGU8X0VsZW1lbnRzJi4uLj4KKyAgICB0aWUoX0VsZW1lbnRzJi4uLiBfX2FyZ3MpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gdHVwbGU8X0VsZW1lbnRzJi4uLj4oX19hcmdzLi4uKTsgfQorCisgIC8vLyBzd2FwCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9FbGVtZW50cz4KKyAgICBpbmxpbmUgdm9pZCAKKyAgICBzd2FwKHR1cGxlPF9FbGVtZW50cy4uLj4mIF9feCwgdHVwbGU8X0VsZW1lbnRzLi4uPiYgX195KQorICAgIG5vZXhjZXB0KG5vZXhjZXB0KF9feC5zd2FwKF9feSkpKQorICAgIHsgX194LnN3YXAoX195KTsgfQorCisgIC8vIEEgY2xhc3MgKGFuZCBpbnN0YW5jZSkgd2hpY2ggY2FuIGJlIHVzZWQgaW4gJ3RpZScgd2hlbiBhbiBlbGVtZW50CisgIC8vIG9mIGEgdHVwbGUgaXMgbm90IHJlcXVpcmVkCisgIHN0cnVjdCBfU3dhbGxvd19hc3NpZ24KKyAgeworICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICAgIGNvbnN0IF9Td2FsbG93X2Fzc2lnbiYKKyAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmKSBjb25zdAorICAgICAgeyByZXR1cm4gKnRoaXM7IH0KKyAgfTsKKworICBjb25zdCBfU3dhbGxvd19hc3NpZ24gaWdub3Jle307CisKKyAgLy8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHR1cGxlcworICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfVHlwZXMsIHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1Y3QgdXNlc19hbGxvY2F0b3I8dHVwbGU8X1R5cGVzLi4uPiwgX0FsbG9jPiA6IHRydWVfdHlwZSB7IH07CisKKyAgLy8gU2VlIHN0bF9wYWlyLmguLi4KKyAgdGVtcGxhdGU8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MxLCB0eXBlbmFtZS4uLiBfQXJnczI+CisgICAgICBpbmxpbmUKKyAgICAgIHBhaXI8X1QxLCBfVDI+OjoKKyAgICAgIHBhaXIocGllY2V3aXNlX2NvbnN0cnVjdF90LAorCSAgIHR1cGxlPF9BcmdzMS4uLj4gX19maXJzdCwgdHVwbGU8X0FyZ3MyLi4uPiBfX3NlY29uZCkKKyAgICAgIDogcGFpcihfX2ZpcnN0LCBfX3NlY29uZCwKKwkgICAgIHR5cGVuYW1lIF9CdWlsZF9pbmRleF90dXBsZTxzaXplb2YuLi4oX0FyZ3MxKT46Ol9fdHlwZSgpLAorCSAgICAgdHlwZW5hbWUgX0J1aWxkX2luZGV4X3R1cGxlPHNpemVvZi4uLihfQXJnczIpPjo6X190eXBlKCkpCisgICAgICB7IH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJnczEsIHN0ZDo6c2l6ZV90Li4uIF9JbmRleGVzMSwKKyAgICAgICAgICAgICB0eXBlbmFtZS4uLiBfQXJnczIsIHN0ZDo6c2l6ZV90Li4uIF9JbmRleGVzMj4KKyAgICAgIGlubGluZQorICAgICAgcGFpcjxfVDEsIF9UMj46OgorICAgICAgcGFpcih0dXBsZTxfQXJnczEuLi4+JiBfX3R1cGxlMSwgdHVwbGU8X0FyZ3MyLi4uPiYgX190dXBsZTIsCisJICAgX0luZGV4X3R1cGxlPF9JbmRleGVzMS4uLj4sIF9JbmRleF90dXBsZTxfSW5kZXhlczIuLi4+KQorICAgICAgOiBmaXJzdChzdGQ6OmZvcndhcmQ8X0FyZ3MxPihzdGQ6OmdldDxfSW5kZXhlczE+KF9fdHVwbGUxKSkuLi4pLAorICAgICAgICBzZWNvbmQoc3RkOjpmb3J3YXJkPF9BcmdzMj4oc3RkOjpnZXQ8X0luZGV4ZXMyPihfX3R1cGxlMikpLi4uKQorICAgICAgeyB9CisKKyAgLy8vIEB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVFVQTEUKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdHlwZV90cmFpdHMgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3R5cGVfdHJhaXRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNGI4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3R5cGVfdHJhaXRzCkBAIC0wLDAgKzEsMjA3NCBAQAorLy8gQysrMTEgPHR5cGVfdHJhaXRzPiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgaW5jbHVkZS90eXBlX3RyYWl0cworICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UWVBFX1RSQUlUUworI2RlZmluZSBfR0xJQkNYWF9UWVBFX1RSQUlUUyAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDwgMjAxMTAzTAorIyBpbmNsdWRlIDxiaXRzL2MrKzB4X3dhcm5pbmcuaD4KKyNlbHNlCisKKyNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBkZWZncm91cCBtZXRhcHJvZ3JhbW1pbmcgTWV0YXByb2dyYW1taW5nCisgICAqIEBpbmdyb3VwIHV0aWxpdGllcworICAgKgorICAgKiBUZW1wbGF0ZSB1dGlsaXRpZXMgZm9yIGNvbXBpbGUtdGltZSBpbnRyb3NwZWN0aW9uIGFuZCBtb2RpZmljYXRpb24sCisgICAqIGluY2x1ZGluZyB0eXBlIGNsYXNzaWZpY2F0aW9uIHRyYWl0cywgdHlwZSBwcm9wZXJ0eSBpbnNwZWN0aW9uIHRyYWl0cworICAgKiBhbmQgdHlwZSB0cmFuc2Zvcm1hdGlvbiB0cmFpdHMuCisgICAqCisgICAqIEB7CisgICAqLworCisgIC8vLyBpbnRlZ3JhbF9jb25zdGFudAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIF9UcCBfX3Y+CisgICAgc3RydWN0IGludGVncmFsX2NvbnN0YW50CisgICAgeworICAgICAgc3RhdGljIGNvbnN0ZXhwciBfVHAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9fdjsKKyAgICAgIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgaW50ZWdyYWxfY29uc3RhbnQ8X1RwLCBfX3Y+ICAgdHlwZTsKKyAgICAgIGNvbnN0ZXhwciBvcGVyYXRvciB2YWx1ZV90eXBlKCkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICB9OworICAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBfVHAgX192PgorICAgIGNvbnN0ZXhwciBfVHAgaW50ZWdyYWxfY29uc3RhbnQ8X1RwLCBfX3Y+Ojp2YWx1ZTsKKworICAvLy8gVGhlIHR5cGUgdXNlZCBhcyBhIGNvbXBpbGUtdGltZSBib29sZWFuIHdpdGggdHJ1ZSB2YWx1ZS4KKyAgdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCB0cnVlPiAgICAgdHJ1ZV90eXBlOworCisgIC8vLyBUaGUgdHlwZSB1c2VkIGFzIGEgY29tcGlsZS10aW1lIGJvb2xlYW4gd2l0aCBmYWxzZSB2YWx1ZS4KKyAgdHlwZWRlZiBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBmYWxzZT4gICAgZmFsc2VfdHlwZTsKKworICAvLyBNZXRhIHByb2dyYW1taW5nIGhlbHBlciB0eXBlcy4KKworICB0ZW1wbGF0ZTxib29sLCB0eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgc3RydWN0IGNvbmRpdGlvbmFsOworCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uPgorICAgIHN0cnVjdCBfX29yXzsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fb3JfPD4KKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CMT4KKyAgICBzdHJ1Y3QgX19vcl88X0IxPgorICAgIDogcHVibGljIF9CMQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQjEsIHR5cGVuYW1lIF9CMj4KKyAgICBzdHJ1Y3QgX19vcl88X0IxLCBfQjI+CisgICAgOiBwdWJsaWMgY29uZGl0aW9uYWw8X0IxOjp2YWx1ZSwgX0IxLCBfQjI+Ojp0eXBlCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CMSwgdHlwZW5hbWUgX0IyLCB0eXBlbmFtZSBfQjMsIHR5cGVuYW1lLi4uIF9Cbj4KKyAgICBzdHJ1Y3QgX19vcl88X0IxLCBfQjIsIF9CMywgX0JuLi4uPgorICAgIDogcHVibGljIGNvbmRpdGlvbmFsPF9CMTo6dmFsdWUsIF9CMSwgX19vcl88X0IyLCBfQjMsIF9Cbi4uLj4+Ojp0eXBlCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uPgorICAgIHN0cnVjdCBfX2FuZF87CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2FuZF88PgorICAgIDogcHVibGljIHRydWVfdHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQjE+CisgICAgc3RydWN0IF9fYW5kXzxfQjE+CisgICAgOiBwdWJsaWMgX0IxCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CMSwgdHlwZW5hbWUgX0IyPgorICAgIHN0cnVjdCBfX2FuZF88X0IxLCBfQjI+CisgICAgOiBwdWJsaWMgY29uZGl0aW9uYWw8X0IxOjp2YWx1ZSwgX0IyLCBfQjE+Ojp0eXBlCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CMSwgdHlwZW5hbWUgX0IyLCB0eXBlbmFtZSBfQjMsIHR5cGVuYW1lLi4uIF9Cbj4KKyAgICBzdHJ1Y3QgX19hbmRfPF9CMSwgX0IyLCBfQjMsIF9Cbi4uLj4KKyAgICA6IHB1YmxpYyBjb25kaXRpb25hbDxfQjE6OnZhbHVlLCBfX2FuZF88X0IyLCBfQjMsIF9Cbi4uLj4sIF9CMT46OnR5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1BwPgorICAgIHN0cnVjdCBfX25vdF8KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAhX1BwOjp2YWx1ZT4KKyAgICB7IH07CisKKyAgc3RydWN0IF9fc2ZpbmFlX3R5cGVzCisgIHsKKyAgICB0eXBlZGVmIGNoYXIgX19vbmU7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9fYXJyWzJdOyB9IF9fdHdvOworICB9OworCisgIC8vIEZvciBzZXZlcmFsIHNmaW5hZS1mcmllbmRseSB0cmFpdCBpbXBsZW1lbnRhdGlvbnMgd2UgdHJhbnNwb3J0IGJvdGggdGhlCisgIC8vIHJlc3VsdCBpbmZvcm1hdGlvbiAoYXMgdGhlIG1lbWJlciB0eXBlKSBhbmQgdGhlIGZhaWx1cmUgaW5mb3JtYXRpb24gKG5vCisgIC8vIG1lbWJlciB0eXBlKS4gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gc3RkOjplbmFibGVfaWYsIGJ1dCB3ZSBjYW5ub3QgdXNlCisgIC8vIHRoZW0sIGJlY2F1c2Ugd2UgbmVlZCB0byBkZXJpdmUgZnJvbSB0aGVtIGFzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fc3VjY2Vzc190eXBlCisgICAgeyB0eXBlZGVmIF9UcCB0eXBlOyB9OworCisgIHN0cnVjdCBfX2ZhaWx1cmVfdHlwZQorICB7IH07CisKKyAgLy8gUHJpbWFyeSB0eXBlIGNhdGVnb3JpZXMuCisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IHJlbW92ZV9jdjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19pc192b2lkX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc192b2lkX2hlbHBlcjx2b2lkPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLy8vIGlzX3ZvaWQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc192b2lkCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfdm9pZF9oZWxwZXI8dHlwZW5hbWUKKwkJCQkgICAgICByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfaW50ZWdyYWxfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVncmFsX2hlbHBlcjxib29sPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisgIAorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdyYWxfaGVscGVyPGNoYXI+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdyYWxfaGVscGVyPHNpZ25lZCBjaGFyPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVncmFsX2hlbHBlcjx1bnNpZ25lZCBjaGFyPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdyYWxfaGVscGVyPHdjaGFyX3Q+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKyNlbmRpZgorCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ3JhbF9oZWxwZXI8Y2hhcjE2X3Q+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdyYWxfaGVscGVyPGNoYXIzMl90PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVncmFsX2hlbHBlcjxzaG9ydD4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ3JhbF9oZWxwZXI8dW5zaWduZWQgc2hvcnQ+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdyYWxfaGVscGVyPGludD4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ3JhbF9oZWxwZXI8dW5zaWduZWQgaW50PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVncmFsX2hlbHBlcjxsb25nPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVncmFsX2hlbHBlcjx1bnNpZ25lZCBsb25nPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2ludGVncmFsX2hlbHBlcjxsb25nIGxvbmc+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdyYWxfaGVscGVyPHVuc2lnbmVkIGxvbmcgbG9uZz4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9JTlQxMjgpCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19pc19pbnRlZ3JhbF9oZWxwZXI8X19pbnQxMjg+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfaW50ZWdyYWxfaGVscGVyPHVuc2lnbmVkIF9faW50MTI4PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisjZW5kaWYKKworICAvLy8gaXNfaW50ZWdyYWwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19pbnRlZ3JhbAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX2ludGVncmFsX2hlbHBlcjx0eXBlbmFtZQorCQkJCSAgICAgIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19pc19mbG9hdGluZ19wb2ludF9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfZmxvYXRpbmdfcG9pbnRfaGVscGVyPGZsb2F0PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX2Zsb2F0aW5nX3BvaW50X2hlbHBlcjxkb3VibGU+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfZmxvYXRpbmdfcG9pbnRfaGVscGVyPGxvbmcgZG91YmxlPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0ZMT0FUMTI4KQorICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9faXNfZmxvYXRpbmdfcG9pbnRfaGVscGVyPF9fZmxvYXQxMjg+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKyNlbmRpZgorCisgIC8vLyBpc19mbG9hdGluZ19wb2ludAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2Zsb2F0aW5nX3BvaW50CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfZmxvYXRpbmdfcG9pbnRfaGVscGVyPHR5cGVuYW1lCisJCQkJICAgICAgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vLyBpc19hcnJheQorICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfYXJyYXkKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9TaXplPgorICAgIHN0cnVjdCBpc19hcnJheTxfVHBbX1NpemVdPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19hcnJheTxfVHBbXT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBfX2lzX3BvaW50ZXJfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3BvaW50ZXJfaGVscGVyPF9UcCo+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvLy8gaXNfcG9pbnRlcgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3BvaW50ZXIKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19wb2ludGVyX2hlbHBlcjx0eXBlbmFtZQorCQkJCSAgICAgIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLy8gaXNfbHZhbHVlX3JlZmVyZW5jZQorICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfbHZhbHVlX3JlZmVyZW5jZQorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfbHZhbHVlX3JlZmVyZW5jZTxfVHAmPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLy8vIGlzX3J2YWx1ZV9yZWZlcmVuY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IGlzX3J2YWx1ZV9yZWZlcmVuY2UKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3J2YWx1ZV9yZWZlcmVuY2U8X1RwJiY+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb247CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfbWVtYmVyX29iamVjdF9wb2ludGVyX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NwPgorICAgIHN0cnVjdCBfX2lzX21lbWJlcl9vYmplY3RfcG9pbnRlcl9oZWxwZXI8X1RwIF9DcDo6Kj4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAhaXNfZnVuY3Rpb248X1RwPjo6dmFsdWU+IHsgfTsKKworICAvLy8gaXNfbWVtYmVyX29iamVjdF9wb2ludGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfbWVtYmVyX29iamVjdF9wb2ludGVyCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfbWVtYmVyX29iamVjdF9wb2ludGVyX2hlbHBlcjwKKwkJCQkgICAgICB0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IF9faXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ3A+CisgICAgc3RydWN0IF9faXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXJfaGVscGVyPF9UcCBfQ3A6Oio+CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgaXNfZnVuY3Rpb248X1RwPjo6dmFsdWU+IHsgfTsKKworICAvLy8gaXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyX2hlbHBlcjwKKwkJCQkgICAgICB0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX2VudW0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19lbnVtCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19lbnVtKF9UcCk+CisgICAgeyB9OworCisgIC8vLyBpc191bmlvbgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3VuaW9uCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc191bmlvbihfVHApPgorICAgIHsgfTsKKworICAvLy8gaXNfY2xhc3MKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19jbGFzcworICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfY2xhc3MoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX2Z1bmN0aW9uCisgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgIHN0cnVjdCBpc19mdW5jdGlvbgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBpc19mdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLi4uLik+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uKSBjb25zdD4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4uLi4pIGNvbnN0PgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBpc19mdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLikgdm9sYXRpbGU+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZS4uLiBfQXJnVHlwZXM+CisgICAgc3RydWN0IGlzX2Z1bmN0aW9uPF9SZXMoX0FyZ1R5cGVzLi4uLi4uKSB2b2xhdGlsZT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SZXMsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgaXNfZnVuY3Rpb248X1JlcyhfQXJnVHlwZXMuLi4pIGNvbnN0IHZvbGF0aWxlPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCBpc19mdW5jdGlvbjxfUmVzKF9BcmdUeXBlcy4uLi4uLikgY29uc3Qgdm9sYXRpbGU+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgX19pc19udWxscHRyX3RfaGVscGVyCisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX2lzX251bGxwdHJfdF9oZWxwZXI8c3RkOjpudWxscHRyX3Q+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvLyBfX2lzX251bGxwdHJfdCAoZXh0ZW5zaW9uKS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX251bGxwdHJfdAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX251bGxwdHJfdF9oZWxwZXI8dHlwZW5hbWUKKwkJCQkgICAgICByZW1vdmVfY3Y8X1RwPjo6dHlwZT46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgLy8gQ29tcG9zaXRlIHR5cGUgY2F0ZWdvcmllcy4KKworICAvLy8gaXNfcmVmZXJlbmNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcmVmZXJlbmNlCisgICAgOiBwdWJsaWMgX19vcl88aXNfbHZhbHVlX3JlZmVyZW5jZTxfVHA+LAorICAgICAgICAgICAgICAgICAgIGlzX3J2YWx1ZV9yZWZlcmVuY2U8X1RwPj46OnR5cGUKKyAgICB7IH07CisKKyAgLy8vIGlzX2FyaXRobWV0aWMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19hcml0aG1ldGljCisgICAgOiBwdWJsaWMgX19vcl88aXNfaW50ZWdyYWw8X1RwPiwgaXNfZmxvYXRpbmdfcG9pbnQ8X1RwPj46OnR5cGUKKyAgICB7IH07CisKKyAgLy8vIGlzX2Z1bmRhbWVudGFsCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfZnVuZGFtZW50YWwKKyAgICA6IHB1YmxpYyBfX29yXzxpc19hcml0aG1ldGljPF9UcD4sIGlzX3ZvaWQ8X1RwPiwgX19pc19udWxscHRyX3Q8X1RwPj46OnR5cGUKKyAgICB7IH07CisKKyAgLy8vIGlzX29iamVjdAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX29iamVjdAorICAgIDogcHVibGljIF9fbm90XzxfX29yXzxpc19mdW5jdGlvbjxfVHA+LCBpc19yZWZlcmVuY2U8X1RwPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfdm9pZDxfVHA+Pj46OnR5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IGlzX21lbWJlcl9wb2ludGVyOworCisgIC8vLyBpc19zY2FsYXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19zY2FsYXIKKyAgICA6IHB1YmxpYyBfX29yXzxpc19hcml0aG1ldGljPF9UcD4sIGlzX2VudW08X1RwPiwgaXNfcG9pbnRlcjxfVHA+LAorICAgICAgICAgICAgICAgICAgIGlzX21lbWJlcl9wb2ludGVyPF9UcD4sIF9faXNfbnVsbHB0cl90PF9UcD4+Ojp0eXBlCisgICAgeyB9OworCisgIC8vLyBpc19jb21wb3VuZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2NvbXBvdW5kCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgIWlzX2Z1bmRhbWVudGFsPF9UcD46OnZhbHVlPiB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX21lbWJlcl9wb2ludGVyX2hlbHBlcgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NwPgorICAgIHN0cnVjdCBfX2lzX21lbWJlcl9wb2ludGVyX2hlbHBlcjxfVHAgX0NwOjoqPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgLy8vIGlzX21lbWJlcl9wb2ludGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfbWVtYmVyX3BvaW50ZXIKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19tZW1iZXJfcG9pbnRlcl9oZWxwZXI8CisJCQkJICAgICAgdHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vIFR5cGUgcHJvcGVydGllcy4KKworICAvLy8gaXNfY29uc3QKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IGlzX2NvbnN0CisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19jb25zdDxfVHAgY29uc3Q+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKyAgCisgIC8vLyBpc192b2xhdGlsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfdm9sYXRpbGUKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3ZvbGF0aWxlPF9UcCB2b2xhdGlsZT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8vLyBpc190cml2aWFsCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfdHJpdmlhbAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfdHJpdmlhbChfVHApPgorICAgIHsgfTsKKworICAvLyBpc190cml2aWFsbHlfY29weWFibGUgKHN0aWxsIHVuaW1wbGVtZW50ZWQpCisKKyAgLy8vIGlzX3N0YW5kYXJkX2xheW91dAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3N0YW5kYXJkX2xheW91dAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfc3RhbmRhcmRfbGF5b3V0KF9UcCk+CisgICAgeyB9OworCisgIC8vLyBpc19wb2QKKyAgLy8gQ291bGQgdXNlIGlzX3N0YW5kYXJkX2xheW91dCAmJiBpc190cml2aWFsIGluc3RlYWQgb2YgdGhlIGJ1aWx0aW4uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfcG9kCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19wb2QoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX2xpdGVyYWxfdHlwZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2xpdGVyYWxfdHlwZQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfbGl0ZXJhbF90eXBlKF9UcCk+CisgICAgeyB9OworCisgIC8vLyBpc19lbXB0eQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX2VtcHR5CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19pc19lbXB0eShfVHApPgorICAgIHsgfTsKKworICAvLy8gaXNfcG9seW1vcnBoaWMKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19wb2x5bW9ycGhpYworICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfcG9seW1vcnBoaWMoX1RwKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX2Fic3RyYWN0CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfYWJzdHJhY3QKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBfX2lzX2Fic3RyYWN0KF9UcCk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwKKwkgICBib29sID0gaXNfaW50ZWdyYWw8X1RwPjo6dmFsdWUsCisJICAgYm9vbCA9IGlzX2Zsb2F0aW5nX3BvaW50PF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX3NpZ25lZF9oZWxwZXIKKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfc2lnbmVkX2hlbHBlcjxfVHAsIGZhbHNlLCB0cnVlPgorICAgIDogcHVibGljIHRydWVfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX3NpZ25lZF9oZWxwZXI8X1RwLCB0cnVlLCBmYWxzZT4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBzdGF0aWNfY2FzdDxib29sPihfVHAoLTEpIDwgX1RwKDApKT4KKyAgICB7IH07CisKKyAgLy8vIGlzX3NpZ25lZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX3NpZ25lZAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfc2lnbmVkX2hlbHBlcjxfVHA+Ojp2YWx1ZT4KKyAgICB7IH07CisKKyAgLy8vIGlzX3Vuc2lnbmVkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfdW5zaWduZWQKKyAgICA6IHB1YmxpYyBfX2FuZF88aXNfYXJpdGhtZXRpYzxfVHA+LCBfX25vdF88aXNfc2lnbmVkPF9UcD4+Pjo6dHlwZQorICAgIHsgfTsKKworCisgIC8vIERlc3RydWN0aWJsZSBhbmQgY29uc3RydWN0aWJsZSB0eXBlIHByb3BlcnRpZXMuCisKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IGFkZF9ydmFsdWVfcmVmZXJlbmNlOworCisgIC8qKgorICAgKiAgQGJyaWVmICBVdGlsaXR5IHRvIHNpbXBsaWZ5IGV4cHJlc3Npb25zIHVzZWQgaW4gdW5ldmFsdWF0ZWQgb3BlcmFuZHMKKyAgICogIEBpbmdyb3VwIHV0aWxpdGllcworICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHR5cGVuYW1lIGFkZF9ydmFsdWVfcmVmZXJlbmNlPF9UcD46OnR5cGUgZGVjbHZhbCgpIG5vZXhjZXB0OworCisgIHRlbXBsYXRlPHR5cGVuYW1lLCB1bnNpZ25lZCA9IDA+CisgICAgc3RydWN0IGV4dGVudDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2FsbF9leHRlbnRzOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19hcnJheV9rbm93bl9ib3VuZHMKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoZXh0ZW50PF9UcD46OnZhbHVlID4gMCk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19hcnJheV91bmtub3duX2JvdW5kcworICAgIDogcHVibGljIF9fYW5kXzxpc19hcnJheTxfVHA+LCBfX25vdF88ZXh0ZW50PF9UcD4+Pjo6dHlwZQorICAgIHsgfTsKKyAgICAKKyAgLy8gSW4gTjMyOTAgaXNfZGVzdHJ1Y3RpYmxlIGRvZXMgbm90IHNheSBhbnl0aGluZyBhYm91dCBmdW5jdGlvbgorICAvLyB0eXBlcyBhbmQgYWJzdHJhY3QgdHlwZXMsIHNlZSBMV0cgMjA0OS4gVGhpcyBpbXBsZW1lbnRhdGlvbgorICAvLyBkZXNjcmliZXMgZnVuY3Rpb24gdHlwZXMgYXMgbm9uLWRlc3RydWN0aWJsZSBhbmQgYWxsIGNvbXBsZXRlCisgIC8vIG9iamVjdCB0eXBlcyBhcyBkZXN0cnVjdGlibGUsIGlmZiB0aGUgZXhwbGljaXQgZGVzdHJ1Y3RvcgorICAvLyBjYWxsIGV4cHJlc3Npb24gaXMgd2VsbGZvcm1lZC4KKyAgc3RydWN0IF9fZG9faXNfZGVzdHJ1Y3RpYmxlX2ltcGwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgPSBkZWNsdHlwZShkZWNsdmFsPF9UcCY+KCkufl9UcCgpKT4KKyAgICAgIHN0YXRpYyB0cnVlX3R5cGUgX190ZXN0KGludCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICAgIHN0YXRpYyBmYWxzZV90eXBlIF9fdGVzdCguLi4pOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19kZXN0cnVjdGlibGVfaW1wbAorICAgIDogcHVibGljIF9fZG9faXNfZGVzdHJ1Y3RpYmxlX2ltcGwKKyAgICB7CisgICAgICB0eXBlZGVmIGRlY2x0eXBlKF9fdGVzdDxfVHA+KDApKSB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLAorICAgICAgICAgICBib29sID0gX19vcl88aXNfdm9pZDxfVHA+LAorICAgICAgICAgICAgICAgICAgICAgICAgX19pc19hcnJheV91bmtub3duX2JvdW5kczxfVHA+LAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfZnVuY3Rpb248X1RwPj46OnZhbHVlLAorICAgICAgICAgICBib29sID0gX19vcl88aXNfcmVmZXJlbmNlPF9UcD4sIGlzX3NjYWxhcjxfVHA+Pjo6dmFsdWU+CisgICAgc3RydWN0IF9faXNfZGVzdHJ1Y3RpYmxlX3NhZmU7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2Rlc3RydWN0aWJsZV9zYWZlPF9UcCwgZmFsc2UsIGZhbHNlPgorICAgIDogcHVibGljIF9faXNfZGVzdHJ1Y3RpYmxlX2ltcGw8dHlwZW5hbWUKKyAgICAgICAgICAgICAgIHJlbW92ZV9hbGxfZXh0ZW50czxfVHA+Ojp0eXBlPjo6dHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfZGVzdHJ1Y3RpYmxlX3NhZmU8X1RwLCB0cnVlLCBmYWxzZT4KKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfZGVzdHJ1Y3RpYmxlX3NhZmU8X1RwLCBmYWxzZSwgdHJ1ZT4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8vLyBpc19kZXN0cnVjdGlibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19kZXN0cnVjdGlibGUKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19kZXN0cnVjdGlibGVfc2FmZTxfVHA+Ojp2YWx1ZSk+CisgICAgeyB9OworCisgIC8vIGlzX25vdGhyb3dfZGVzdHJ1Y3RpYmxlIHJlcXVpcmVzIHRoYXQgaXNfZGVzdHJ1Y3RpYmxlIGlzCisgIC8vIHNhdGlzZmllZCBhcyB3ZWxsLiAgV2UgcmVhbGl6ZSB0aGF0IGJ5IG1pbWljaW5nIHRoZQorICAvLyBpbXBsZW1lbnRhdGlvbiBvZiBpc19kZXN0cnVjdGlibGUgYnV0IHJlZmVyIHRvIG5vZXhjZXB0KGV4cHIpCisgIC8vIGluc3RlYWQgb2YgZGVjbHR5cGUoZXhwcikuCisgIHN0cnVjdCBfX2RvX2lzX250X2Rlc3RydWN0aWJsZV9pbXBsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBzdGF0aWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgbm9leGNlcHQoZGVjbHZhbDxfVHAmPigpLn5fVHAoKSk+CisgICAgICAgIF9fdGVzdChpbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgICBzdGF0aWMgZmFsc2VfdHlwZSBfX3Rlc3QoLi4uKTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbnRfZGVzdHJ1Y3RpYmxlX2ltcGwKKyAgICA6IHB1YmxpYyBfX2RvX2lzX250X2Rlc3RydWN0aWJsZV9pbXBsCisgICAgeworICAgICAgdHlwZWRlZiBkZWNsdHlwZShfX3Rlc3Q8X1RwPigwKSkgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwKKyAgICAgICAgICAgYm9vbCA9IF9fb3JfPGlzX3ZvaWQ8X1RwPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9faXNfYXJyYXlfdW5rbm93bl9ib3VuZHM8X1RwPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX2Z1bmN0aW9uPF9UcD4+Ojp2YWx1ZSwKKyAgICAgICAgICAgYm9vbCA9IF9fb3JfPGlzX3JlZmVyZW5jZTxfVHA+LCBpc19zY2FsYXI8X1RwPj46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX250X2Rlc3RydWN0aWJsZV9zYWZlOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19udF9kZXN0cnVjdGlibGVfc2FmZTxfVHAsIGZhbHNlLCBmYWxzZT4KKyAgICA6IHB1YmxpYyBfX2lzX250X2Rlc3RydWN0aWJsZV9pbXBsPHR5cGVuYW1lCisgICAgICAgICAgICAgICByZW1vdmVfYWxsX2V4dGVudHM8X1RwPjo6dHlwZT46OnR5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX250X2Rlc3RydWN0aWJsZV9zYWZlPF9UcCwgdHJ1ZSwgZmFsc2U+CisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX250X2Rlc3RydWN0aWJsZV9zYWZlPF9UcCwgZmFsc2UsIHRydWU+CisgICAgOiBwdWJsaWMgdHJ1ZV90eXBlIHsgfTsKKworICAvLy8gaXNfbm90aHJvd19kZXN0cnVjdGlibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19ub3Rocm93X2Rlc3RydWN0aWJsZQorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIChfX2lzX250X2Rlc3RydWN0aWJsZV9zYWZlPF9UcD46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgc3RydWN0IF9fZG9faXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX2ltcGwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgPSBkZWNsdHlwZShfVHAoKSk+CisgICAgICBzdGF0aWMgdHJ1ZV90eXBlIF9fdGVzdChpbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgICBzdGF0aWMgZmFsc2VfdHlwZSBfX3Rlc3QoLi4uKTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX2ltcGwKKyAgICA6IHB1YmxpYyBfX2RvX2lzX2RlZmF1bHRfY29uc3RydWN0aWJsZV9pbXBsCisgICAgeworICAgICAgdHlwZWRlZiBkZWNsdHlwZShfX3Rlc3Q8X1RwPigwKSkgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19kZWZhdWx0X2NvbnN0cnVjdGlibGVfYXRvbQorICAgIDogcHVibGljIF9fYW5kXzxfX25vdF88aXNfdm9pZDxfVHA+PiwKKyAgICAgICAgICAgICAgICAgICAgX19pc19kZWZhdWx0X2NvbnN0cnVjdGlibGVfaW1wbDxfVHA+Pjo6dHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSBpc19hcnJheTxfVHA+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19pc19kZWZhdWx0X2NvbnN0cnVjdGlibGVfc2FmZTsKKworICAvLyBUaGUgZm9sbG93aW5nIHRlY2huaXF1ZSBpcyBhIHdvcmthcm91bmQgZm9yIGEgY3VycmVudCBjb3JlIGxhbmd1YWdlCisgIC8vIHJlc3RyaWN0aW9uLCB3aGljaCBkb2VzIG5vdCBhbGxvdyBmb3IgYXJyYXkgdHlwZXMgdG8gb2NjdXIgaW4gCisgIC8vIGZ1bmN0aW9uYWwgY2FzdHMgb2YgdGhlIGZvcm0gVCgpLiAgQ29tcGxldGUgYXJyYXlzIGNhbiBiZSBkZWZhdWx0LQorICAvLyBjb25zdHJ1Y3RlZCwgaWYgdGhlIGVsZW1lbnQgdHlwZSBpcyBkZWZhdWx0LWNvbnN0cnVjdGlibGUsIGJ1dCAKKyAgLy8gYXJyYXlzIHdpdGggdW5rbm93biBib3VuZHMgYXJlIG5vdC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2RlZmF1bHRfY29uc3RydWN0aWJsZV9zYWZlPF9UcCwgdHJ1ZT4KKyAgICA6IHB1YmxpYyBfX2FuZF88X19pc19hcnJheV9rbm93bl9ib3VuZHM8X1RwPiwKKwkJICAgIF9faXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX2F0b208dHlwZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfYWxsX2V4dGVudHM8X1RwPjo6dHlwZT4+Ojp0eXBlCisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19kZWZhdWx0X2NvbnN0cnVjdGlibGVfc2FmZTxfVHAsIGZhbHNlPgorICAgIDogcHVibGljIF9faXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX2F0b208X1RwPjo6dHlwZQorICAgIHsgfTsKKworICAvLy8gaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX3NhZmU8CisJCQkJICAgICAgX1RwPjo6dmFsdWUpPgorICAgIHsgfTsKKworCisgIC8vIEltcGxlbWVudGF0aW9uIG9mIGlzX2NvbnN0cnVjdGlibGUuCisKKyAgLy8gVGhlIGhhcmRlc3QgcGFydCBvZiB0aGlzIHRyYWl0IGlzIHRoZSBiaW5hcnkgZGlyZWN0LWluaXRpYWxpemF0aW9uCisgIC8vIGNhc2UsIGJlY2F1c2Ugd2UgaGl0IGludG8gYSBmdW5jdGlvbmFsIGNhc3Qgb2YgdGhlIGZvcm0gVChhcmcpLgorICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgZGlmZmVyZW50IHN0cmF0ZWdpZXMgZGVwZW5kaW5nIG9uIHRoZQorICAvLyB0YXJnZXQgdHlwZSB0byByZWR1Y2UgdGhlIHRlc3Qgb3ZlcmhlYWQgYXMgbXVjaCBhcyBwb3NzaWJsZToKKyAgLy8KKyAgLy8gYSkgRm9yIGEgcmVmZXJlbmNlIHRhcmdldCB0eXBlLCB3ZSB1c2UgYSBzdGF0aWNfY2FzdCBleHByZXNzaW9uIAorICAvLyAgICBtb2R1bG8gaXRzIGV4dHJhIGNhc2VzLgorICAvLworICAvLyBiKSBGb3IgYSBub24tcmVmZXJlbmNlIHRhcmdldCB0eXBlIHdlIHVzZSBhIDo6bmV3IGV4cHJlc3Npb24uCisgIHN0cnVjdCBfX2RvX2lzX3N0YXRpY19jYXN0YWJsZV9pbXBsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvLCB0eXBlbmFtZQorICAgICAgICAgICAgID0gZGVjbHR5cGUoc3RhdGljX2Nhc3Q8X1RvPihkZWNsdmFsPF9Gcm9tPigpKSk+CisgICAgICBzdGF0aWMgdHJ1ZV90eXBlIF9fdGVzdChpbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgICAgc3RhdGljIGZhbHNlX3R5cGUgX190ZXN0KC4uLik7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9Ubz4KKyAgICBzdHJ1Y3QgX19pc19zdGF0aWNfY2FzdGFibGVfaW1wbAorICAgIDogcHVibGljIF9fZG9faXNfc3RhdGljX2Nhc3RhYmxlX2ltcGwKKyAgICB7CisgICAgICB0eXBlZGVmIGRlY2x0eXBlKF9fdGVzdDxfRnJvbSwgX1RvPigwKSkgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8+CisgICAgc3RydWN0IF9faXNfc3RhdGljX2Nhc3RhYmxlX3NhZmUKKyAgICA6IHB1YmxpYyBfX2lzX3N0YXRpY19jYXN0YWJsZV9pbXBsPF9Gcm9tLCBfVG8+Ojp0eXBlCisgICAgeyB9OworCisgIC8vIF9faXNfc3RhdGljX2Nhc3RhYmxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8+CisgICAgc3RydWN0IF9faXNfc3RhdGljX2Nhc3RhYmxlCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgKF9faXNfc3RhdGljX2Nhc3RhYmxlX3NhZmU8CisJCQkJICAgICAgX0Zyb20sIF9Ubz46OnZhbHVlKT4KKyAgICB7IH07CisKKyAgLy8gSW1wbGVtZW50YXRpb24gZm9yIG5vbi1yZWZlcmVuY2UgdHlwZXMuIFRvIG1lZXQgdGhlIHByb3BlcgorICAvLyB2YXJpYWJsZSBkZWZpbml0aW9uIHNlbWFudGljcywgd2UgYWxzbyBuZWVkIHRvIHRlc3QgZm9yCisgIC8vIGlzX2Rlc3RydWN0aWJsZSBpbiB0aGlzIGNhc2UuCisgIC8vIFRoaXMgZm9ybSBzaG91bGQgYmUgc2ltcGxpZmllZCBieSBhIHNpbmdsZSBleHByZXNzaW9uOgorICAvLyA6OmRlbGV0ZSA6Om5ldyBfVHAoZGVjbHZhbDxfQXJnPigpKSwgc2VlIGMrKy81MTIyMi4KKyAgc3RydWN0IF9fZG9faXNfZGlyZWN0X2NvbnN0cnVjdGlibGVfaW1wbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJnLCB0eXBlbmFtZQorCSAgICAgPSBkZWNsdHlwZSg6Om5ldyBfVHAoZGVjbHZhbDxfQXJnPigpKSk+CisgICAgICBzdGF0aWMgdHJ1ZV90eXBlIF9fdGVzdChpbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgICAgc3RhdGljIGZhbHNlX3R5cGUgX190ZXN0KC4uLik7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJnPgorICAgIHN0cnVjdCBfX2lzX2RpcmVjdF9jb25zdHJ1Y3RpYmxlX2ltcGwKKyAgICA6IHB1YmxpYyBfX2RvX2lzX2RpcmVjdF9jb25zdHJ1Y3RpYmxlX2ltcGwKKyAgICB7CisgICAgICB0eXBlZGVmIGRlY2x0eXBlKF9fdGVzdDxfVHAsIF9Bcmc+KDApKSB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJnPgorICAgIHN0cnVjdCBfX2lzX2RpcmVjdF9jb25zdHJ1Y3RpYmxlX25ld19zYWZlCisgICAgOiBwdWJsaWMgX19hbmRfPGlzX2Rlc3RydWN0aWJsZTxfVHA+LAorICAgICAgICAgICAgICAgICAgICBfX2lzX2RpcmVjdF9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwLCBfQXJnPj46OnR5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgIHN0cnVjdCBpc19zYW1lOworCisgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfYmFzZV9vZjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgcmVtb3ZlX3JlZmVyZW5jZTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvLCBib29sCisgICAgICAgICAgID0gX19ub3RfPF9fb3JfPGlzX3ZvaWQ8X0Zyb20+LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZnVuY3Rpb248X0Zyb20+Pj46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX2Jhc2VfdG9fZGVyaXZlZF9yZWY7CisKKyAgLy8gRGV0ZWN0IHdoZXRoZXIgd2UgaGF2ZSBhIGRvd25jYXN0IHNpdHVhdGlvbiBkdXJpbmcKKyAgLy8gcmVmZXJlbmNlIGJpbmRpbmcuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8+CisgICAgc3RydWN0IF9faXNfYmFzZV90b19kZXJpdmVkX3JlZjxfRnJvbSwgX1RvLCB0cnVlPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2N2PHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X0Zyb20KKyAgICAgICAgPjo6dHlwZT46OnR5cGUgX19zcmNfdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2N2PHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X1RvCisgICAgICAgID46OnR5cGU+Ojp0eXBlIF9fZHN0X3Q7CisgICAgICB0eXBlZGVmIF9fYW5kXzxfX25vdF88aXNfc2FtZTxfX3NyY190LCBfX2RzdF90Pj4sCisJCSAgICAgaXNfYmFzZV9vZjxfX3NyY190LCBfX2RzdF90Pj4gdHlwZTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IHR5cGU6OnZhbHVlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9Ubz4KKyAgICBzdHJ1Y3QgX19pc19iYXNlX3RvX2Rlcml2ZWRfcmVmPF9Gcm9tLCBfVG8sIGZhbHNlPgorICAgIDogcHVibGljIGZhbHNlX3R5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9UbywgYm9vbAorICAgICAgICAgICA9IF9fYW5kXzxpc19sdmFsdWVfcmVmZXJlbmNlPF9Gcm9tPiwKKyAgICAgICAgICAgICAgICAgICAgaXNfcnZhbHVlX3JlZmVyZW5jZTxfVG8+Pjo6dmFsdWU+CisgICAgc3RydWN0IF9faXNfbHZhbHVlX3RvX3J2YWx1ZV9yZWY7CisKKyAgLy8gRGV0ZWN0IHdoZXRoZXIgd2UgaGF2ZSBhbiBsdmFsdWUgb2Ygbm9uLWZ1bmN0aW9uIHR5cGUKKyAgLy8gYm91bmQgdG8gYSByZWZlcmVuY2UtY29tcGF0aWJsZSBydmFsdWUtcmVmZXJlbmNlLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvPgorICAgIHN0cnVjdCBfX2lzX2x2YWx1ZV90b19ydmFsdWVfcmVmPF9Gcm9tLCBfVG8sIHRydWU+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTwKKyAgICAgICAgX0Zyb20+Ojp0eXBlPjo6dHlwZSBfX3NyY190OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTwKKyAgICAgICAgX1RvPjo6dHlwZT46OnR5cGUgX19kc3RfdDsKKyAgICAgIHR5cGVkZWYgX19hbmRfPF9fbm90Xzxpc19mdW5jdGlvbjxfX3NyY190Pj4sIAorICAgICAgICBfX29yXzxpc19zYW1lPF9fc3JjX3QsIF9fZHN0X3Q+LAorCQkgICAgaXNfYmFzZV9vZjxfX2RzdF90LCBfX3NyY190Pj4+IHR5cGU7CisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPSB0eXBlOjp2YWx1ZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8+CisgICAgc3RydWN0IF9faXNfbHZhbHVlX3RvX3J2YWx1ZV9yZWY8X0Zyb20sIF9UbywgZmFsc2U+CisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZQorICAgIHsgfTsKKworICAvLyBIZXJlIHdlIGhhbmRsZSBkaXJlY3QtaW5pdGlhbGl6YXRpb24gdG8gYSByZWZlcmVuY2UgdHlwZSBhcyAKKyAgLy8gZXF1aXZhbGVudCB0byBhIHN0YXRpY19jYXN0IG1vZHVsbyBvdmVyc2hvb3RpbmcgY29udmVyc2lvbnMuCisgIC8vIFRoZXNlIGFyZSByZXN0cmljdGVkIHRvIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnM6CisgIC8vICAgIGEpIEEgYmFzZSBjbGFzcyB2YWx1ZSB0byBhIGRlcml2ZWQgY2xhc3MgcmVmZXJlbmNlCisgIC8vICAgIGIpIEFuIGx2YWx1ZSB0byBhbiBydmFsdWUtcmVmZXJlbmNlIG9mIHJlZmVyZW5jZS1jb21wYXRpYmxlIAorICAvLyAgICAgICB0eXBlcyB0aGF0IGFyZSBub3QgZnVuY3Rpb25zCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FyZz4KKyAgICBzdHJ1Y3QgX19pc19kaXJlY3RfY29uc3RydWN0aWJsZV9yZWZfY2FzdAorICAgIDogcHVibGljIF9fYW5kXzxfX2lzX3N0YXRpY19jYXN0YWJsZTxfQXJnLCBfVHA+LAorICAgICAgICAgICAgICAgICAgICBfX25vdF88X19vcl88X19pc19iYXNlX3RvX2Rlcml2ZWRfcmVmPF9BcmcsIF9UcD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzX2x2YWx1ZV90b19ydmFsdWVfcmVmPF9BcmcsIF9UcD4KKyAgICAgICAgICAgICAgICAgICA+Pj46OnR5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJnPgorICAgIHN0cnVjdCBfX2lzX2RpcmVjdF9jb25zdHJ1Y3RpYmxlX25ldworICAgIDogcHVibGljIGNvbmRpdGlvbmFsPGlzX3JlZmVyZW5jZTxfVHA+Ojp2YWx1ZSwKKwkJCSBfX2lzX2RpcmVjdF9jb25zdHJ1Y3RpYmxlX3JlZl9jYXN0PF9UcCwgX0FyZz4sCisJCQkgX19pc19kaXJlY3RfY29uc3RydWN0aWJsZV9uZXdfc2FmZTxfVHAsIF9Bcmc+CisJCQkgPjo6dHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Bcmc+CisgICAgc3RydWN0IF9faXNfZGlyZWN0X2NvbnN0cnVjdGlibGUKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19kaXJlY3RfY29uc3RydWN0aWJsZV9uZXc8CisJCQkJICAgICAgX1RwLCBfQXJnPjo6dmFsdWUpPgorICAgIHsgfTsKKworICAvLyBTaW5jZSBkZWZhdWx0LWNvbnN0cnVjdGlvbiBhbmQgYmluYXJ5IGRpcmVjdC1pbml0aWFsaXphdGlvbiBoYXZlCisgIC8vIGJlZW4gaGFuZGxlZCBzZXBhcmF0ZWx5LCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlbWFpbmluZworICAvLyBuLWFyeSBjb25zdHJ1Y3Rpb24gY2FzZXMgaXMgcmF0aGVyIHN0cmFpZ2h0Zm9yd2FyZC4gV2UgY2FuIHVzZQorICAvLyBoZXJlIGEgZnVuY3Rpb25hbCBjYXN0LCBiZWNhdXNlIGFycmF5IHR5cGVzIGFyZSBleGNsdWRlZCBhbnl3YXkKKyAgLy8gYW5kIHRoaXMgZm9ybSBpcyBuZXZlciBpbnRlcnByZXRlZCBhcyBhIEMgY2FzdC4KKyAgc3RydWN0IF9fZG9faXNfbmFyeV9jb25zdHJ1Y3RpYmxlX2ltcGwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3MsIHR5cGVuYW1lCisgICAgICAgICAgICAgPSBkZWNsdHlwZShfVHAoZGVjbHZhbDxfQXJncz4oKS4uLikpPgorICAgICAgc3RhdGljIHRydWVfdHlwZSBfX3Rlc3QoaW50KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4KKyAgICAgIHN0YXRpYyBmYWxzZV90eXBlIF9fdGVzdCguLi4pOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9faXNfbmFyeV9jb25zdHJ1Y3RpYmxlX2ltcGwKKyAgICA6IHB1YmxpYyBfX2RvX2lzX25hcnlfY29uc3RydWN0aWJsZV9pbXBsCisgICAgeworICAgICAgdHlwZWRlZiBkZWNsdHlwZShfX3Rlc3Q8X1RwLCBfQXJncy4uLj4oMCkpIHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX2lzX25hcnlfY29uc3RydWN0aWJsZQorICAgIDogcHVibGljIF9faXNfbmFyeV9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwLCBfQXJncy4uLj46OnR5cGUKKyAgICB7CisgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZi4uLihfQXJncykgPiAxLAorICAgICAgICAgICAgICAgICAgICAiT25seSB1c2VmdWwgZm9yID4gMSBhcmd1bWVudHMiKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9faXNfY29uc3RydWN0aWJsZV9pbXBsCisgICAgOiBwdWJsaWMgX19pc19uYXJ5X2NvbnN0cnVjdGlibGU8X1RwLCBfQXJncy4uLj4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQXJnPgorICAgIHN0cnVjdCBfX2lzX2NvbnN0cnVjdGlibGVfaW1wbDxfVHAsIF9Bcmc+CisgICAgOiBwdWJsaWMgX19pc19kaXJlY3RfY29uc3RydWN0aWJsZTxfVHAsIF9Bcmc+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwPgorICAgIDogcHVibGljIGlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxfVHA+CisgICAgeyB9OworCisgIC8vLyBpc19jb25zdHJ1Y3RpYmxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IGlzX2NvbnN0cnVjdGlibGUKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCAoX19pc19jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwLAorCQkJCSAgICAgIF9BcmdzLi4uPjo6dmFsdWUpPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSBpc192b2lkPF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX2NvcHlfY29uc3RydWN0aWJsZV9pbXBsOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19jb3B5X2NvbnN0cnVjdGlibGVfaW1wbDxfVHAsIHRydWU+CisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2NvcHlfY29uc3RydWN0aWJsZV9pbXBsPF9UcCwgZmFsc2U+CisgICAgOiBwdWJsaWMgaXNfY29uc3RydWN0aWJsZTxfVHAsIGNvbnN0IF9UcCY+CisgICAgeyB9OworCisgIC8vLyBpc19jb3B5X2NvbnN0cnVjdGlibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19jb3B5X2NvbnN0cnVjdGlibGUKKyAgICA6IHB1YmxpYyBfX2lzX2NvcHlfY29uc3RydWN0aWJsZV9pbXBsPF9UcD4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sID0gaXNfdm9pZDxfVHA+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19pc19tb3ZlX2NvbnN0cnVjdGlibGVfaW1wbDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbW92ZV9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwLCB0cnVlPgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19tb3ZlX2NvbnN0cnVjdGlibGVfaW1wbDxfVHAsIGZhbHNlPgorICAgIDogcHVibGljIGlzX2NvbnN0cnVjdGlibGU8X1RwLCBfVHAmJj4KKyAgICB7IH07CisKKyAgLy8vIGlzX21vdmVfY29uc3RydWN0aWJsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX21vdmVfY29uc3RydWN0aWJsZQorICAgIDogcHVibGljIF9faXNfbW92ZV9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbnRfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX2F0b20KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBub2V4Y2VwdChfVHAoKSk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbCA9IGlzX2FycmF5PF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX250X2RlZmF1bHRfY29uc3RydWN0aWJsZV9pbXBsOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19udF9kZWZhdWx0X2NvbnN0cnVjdGlibGVfaW1wbDxfVHAsIHRydWU+CisgICAgOiBwdWJsaWMgX19hbmRfPF9faXNfYXJyYXlfa25vd25fYm91bmRzPF9UcD4sCisJCSAgICBfX2lzX250X2RlZmF1bHRfY29uc3RydWN0aWJsZV9hdG9tPHR5cGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX2FsbF9leHRlbnRzPF9UcD46OnR5cGU+Pjo6dHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbnRfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwLCBmYWxzZT4KKyAgICA6IHB1YmxpYyBfX2lzX250X2RlZmF1bHRfY29uc3RydWN0aWJsZV9hdG9tPF9UcD4KKyAgICB7IH07CisKKyAgLy8vIGlzX25vdGhyb3dfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfbm90aHJvd19kZWZhdWx0X2NvbnN0cnVjdGlibGUKKyAgICA6IHB1YmxpYyBfX2FuZF88aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9UcD4sCisgICAgICAgICAgICAgICAgICAgIF9faXNfbnRfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwPj46OnR5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBzdHJ1Y3QgX19pc19udF9jb25zdHJ1Y3RpYmxlX2ltcGwKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLCBub2V4Y2VwdChfVHAoZGVjbHZhbDxfQXJncz4oKS4uLikpPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Bcmc+CisgICAgc3RydWN0IF9faXNfbnRfY29uc3RydWN0aWJsZV9pbXBsPF9UcCwgX0FyZz4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZXhjZXB0KHN0YXRpY19jYXN0PF9UcD4oZGVjbHZhbDxfQXJnPigpKSk+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19udF9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwPgorICAgIDogcHVibGljIGlzX25vdGhyb3dfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9UcD4KKyAgICB7IH07CisKKyAgLy8vIGlzX25vdGhyb3dfY29uc3RydWN0aWJsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBpc19ub3Rocm93X2NvbnN0cnVjdGlibGUKKyAgICA6IHB1YmxpYyBfX2FuZF88aXNfY29uc3RydWN0aWJsZTxfVHAsIF9BcmdzLi4uPiwKKwkJICAgIF9faXNfbnRfY29uc3RydWN0aWJsZV9pbXBsPF9UcCwgX0FyZ3MuLi4+Pjo6dHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSBpc192b2lkPF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlX2ltcGw7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwLCB0cnVlPgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19ub3Rocm93X2NvcHlfY29uc3RydWN0aWJsZV9pbXBsPF9UcCwgZmFsc2U+CisgICAgOiBwdWJsaWMgaXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPF9UcCwgY29uc3QgX1RwJj4KKyAgICB7IH07CisKKyAgLy8vIGlzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfbm90aHJvd19jb3B5X2NvbnN0cnVjdGlibGUKKyAgICA6IHB1YmxpYyBfX2lzX25vdGhyb3dfY29weV9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSBpc192b2lkPF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlX2ltcGw7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlX2ltcGw8X1RwLCB0cnVlPgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZV9pbXBsPF9UcCwgZmFsc2U+CisgICAgOiBwdWJsaWMgaXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPF9UcCwgX1RwJiY+CisgICAgeyB9OworCisgIC8vLyBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlCisgICAgOiBwdWJsaWMgX19pc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZV9pbXBsPF9UcD4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgY2xhc3MgX19pc19hc3NpZ25hYmxlX2hlbHBlcgorICAgIDogcHVibGljIF9fc2ZpbmFlX3R5cGVzCisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1VwMT4KKyAgICAgICAgc3RhdGljIGRlY2x0eXBlKGRlY2x2YWw8X1RwMT4oKSA9IGRlY2x2YWw8X1VwMT4oKSwgX19vbmUoKSkKKwlfX3Rlc3QoaW50KTsKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgICAgICBzdGF0aWMgX190d28gX190ZXN0KC4uLik7CisKKyAgICBwdWJsaWM6CisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPSBzaXplb2YoX190ZXN0PF9UcCwgX1VwPigwKSkgPT0gMTsKKyAgICB9OworCisgIC8vLyBpc19hc3NpZ25hYmxlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBpc19hc3NpZ25hYmxlCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzX2Fzc2lnbmFibGVfaGVscGVyPF9UcCwgX1VwPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbCA9IGlzX3ZvaWQ8X1RwPjo6dmFsdWU+CisgICAgc3RydWN0IF9faXNfY29weV9hc3NpZ25hYmxlX2ltcGw7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX2NvcHlfYXNzaWduYWJsZV9pbXBsPF9UcCwgdHJ1ZT4KKyAgICA6IHB1YmxpYyBmYWxzZV90eXBlIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfY29weV9hc3NpZ25hYmxlX2ltcGw8X1RwLCBmYWxzZT4KKyAgICA6IHB1YmxpYyBpc19hc3NpZ25hYmxlPF9UcCYsIGNvbnN0IF9UcCY+CisgICAgeyB9OworCisgIC8vLyBpc19jb3B5X2Fzc2lnbmFibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19jb3B5X2Fzc2lnbmFibGUKKyAgICA6IHB1YmxpYyBfX2lzX2NvcHlfYXNzaWduYWJsZV9pbXBsPF9UcD4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sID0gaXNfdm9pZDxfVHA+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19pc19tb3ZlX2Fzc2lnbmFibGVfaW1wbDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbW92ZV9hc3NpZ25hYmxlX2ltcGw8X1RwLCB0cnVlPgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19tb3ZlX2Fzc2lnbmFibGVfaW1wbDxfVHAsIGZhbHNlPgorICAgIDogcHVibGljIGlzX2Fzc2lnbmFibGU8X1RwJiwgX1RwJiY+CisgICAgeyB9OworCisgIC8vLyBpc19tb3ZlX2Fzc2lnbmFibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19tb3ZlX2Fzc2lnbmFibGUKKyAgICA6IHB1YmxpYyBfX2lzX21vdmVfYXNzaWduYWJsZV9pbXBsPF9UcD4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IF9faXNfbnRfYXNzaWduYWJsZV9pbXBsCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgbm9leGNlcHQoZGVjbHZhbDxfVHA+KCkgPSBkZWNsdmFsPF9VcD4oKSk+CisgICAgeyB9OworCisgIC8vLyBpc19ub3Rocm93X2Fzc2lnbmFibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgc3RydWN0IGlzX25vdGhyb3dfYXNzaWduYWJsZQorICAgIDogcHVibGljIF9fYW5kXzxpc19hc3NpZ25hYmxlPF9UcCwgX1VwPiwKKwkJICAgIF9faXNfbnRfYXNzaWduYWJsZV9pbXBsPF9UcCwgX1VwPj46OnR5cGUKKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sID0gaXNfdm9pZDxfVHA+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19pc19udF9jb3B5X2Fzc2lnbmFibGVfaW1wbDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9faXNfbnRfY29weV9hc3NpZ25hYmxlX2ltcGw8X1RwLCB0cnVlPgorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19udF9jb3B5X2Fzc2lnbmFibGVfaW1wbDxfVHAsIGZhbHNlPgorICAgIDogcHVibGljIGlzX25vdGhyb3dfYXNzaWduYWJsZTxfVHAmLCBjb25zdCBfVHAmPgorICAgIHsgfTsKKworICAvLy8gaXNfbm90aHJvd19jb3B5X2Fzc2lnbmFibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19ub3Rocm93X2NvcHlfYXNzaWduYWJsZQorICAgIDogcHVibGljIF9faXNfbnRfY29weV9hc3NpZ25hYmxlX2ltcGw8X1RwPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2wgPSBpc192b2lkPF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfX2lzX250X21vdmVfYXNzaWduYWJsZV9pbXBsOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19pc19udF9tb3ZlX2Fzc2lnbmFibGVfaW1wbDxfVHAsIHRydWU+CisgICAgOiBwdWJsaWMgZmFsc2VfdHlwZSB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2lzX250X21vdmVfYXNzaWduYWJsZV9pbXBsPF9UcCwgZmFsc2U+CisgICAgOiBwdWJsaWMgaXNfbm90aHJvd19hc3NpZ25hYmxlPF9UcCYsIF9UcCYmPgorICAgIHsgfTsKKworICAvLy8gaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZQorICAgIDogcHVibGljIF9faXNfbnRfbW92ZV9hc3NpZ25hYmxlX2ltcGw8X1RwPgorICAgIHsgfTsKKworICAvLy8gaXNfdHJpdmlhbGx5X2NvbnN0cnVjdGlibGUgKHN0aWxsIHVuaW1wbGVtZW50ZWQpCisgIAorICAvLy8gaXNfdHJpdmlhbGx5X2RlZmF1bHRfY29uc3RydWN0aWJsZSAoc3RpbGwgdW5pbXBsZW1lbnRlZCkKKworICAvLy8gaXNfdHJpdmlhbGx5X2NvcHlfY29uc3RydWN0aWJsZSAoc3RpbGwgdW5pbXBsZW1lbnRlZCkKKworICAvLy8gaXNfdHJpdmlhbGx5X21vdmVfY29uc3RydWN0aWJsZSAoc3RpbGwgdW5pbXBsZW1lbnRlZCkKKworICAvLy8gaXNfdHJpdmlhbGx5X2Fzc2lnbmFibGUgKHN0aWxsIHVuaW1wbGVtZW50ZWQpCisKKyAgLy8vIGlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGUgKHN0aWxsIHVuaW1wbGVtZW50ZWQpCisKKyAgLy8vIGlzX3RyaXZpYWxseV9tb3ZlX2Fzc2lnbmFibGUgKHN0aWxsIHVuaW1wbGVtZW50ZWQpCisKKyAgLy8vIGlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBpc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlCisgICAgOiBwdWJsaWMgX19hbmRfPGlzX2Rlc3RydWN0aWJsZTxfVHA+LCBpbnRlZ3JhbF9jb25zdGFudDxib29sLAorCQkJICAgICAgX19oYXNfdHJpdmlhbF9kZXN0cnVjdG9yKF9UcCk+Pjo6dHlwZQorICAgIHsgfTsKKworICAvLy8gaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvciAodGVtcG9yYXJ5IGxlZ2FjeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvcihfVHApPgorICAgIHsgfTsKKworICAvLy8gaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvciAodGVtcG9yYXJ5IGxlZ2FjeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yCisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19oYXNfdHJpdmlhbF9jb3B5KF9UcCk+CisgICAgeyB9OworCisgIC8vLyBoYXNfdHJpdmlhbF9jb3B5X2Fzc2lnbiAodGVtcG9yYXJ5IGxlZ2FjeSkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBoYXNfdHJpdmlhbF9jb3B5X2Fzc2lnbgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faGFzX3RyaXZpYWxfYXNzaWduKF9UcCk+CisgICAgeyB9OworCisgIC8vLyBoYXNfdmlydHVhbF9kZXN0cnVjdG9yCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcihfVHApPgorICAgIHsgfTsKKworICAKKyAgLy8gdHlwZSBwcm9wZXJ0eSBxdWVyaWVzLgorCisgIC8vLyBhbGlnbm1lbnRfb2YKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBhbGlnbm1lbnRfb2YKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgX19hbGlnbm9mX18oX1RwKT4geyB9OworICAKKyAgLy8vIHJhbmsKKyAgdGVtcGxhdGU8dHlwZW5hbWU+CisgICAgc3RydWN0IHJhbmsKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgMD4geyB9OworICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX1NpemU+CisgICAgc3RydWN0IHJhbms8X1RwW19TaXplXT4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgMSArIHJhbms8X1RwPjo6dmFsdWU+IHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJhbms8X1RwW10+CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDEgKyByYW5rPF9UcD46OnZhbHVlPiB7IH07CisKKyAgLy8vIGV4dGVudAorICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdW5zaWduZWQgX1VpbnQ+CisgICAgc3RydWN0IGV4dGVudAorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAwPiB7IH07CisgIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHVuc2lnbmVkIF9VaW50LCBzdGQ6OnNpemVfdCBfU2l6ZT4KKyAgICBzdHJ1Y3QgZXh0ZW50PF9UcFtfU2l6ZV0sIF9VaW50PgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LAorCQkJICAgICAgIF9VaW50ID09IDAgPyBfU2l6ZSA6IGV4dGVudDxfVHAsCisJCQkJCQkJICAgX1VpbnQgLSAxPjo6dmFsdWU+CisgICAgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdW5zaWduZWQgX1VpbnQ+CisgICAgc3RydWN0IGV4dGVudDxfVHBbXSwgX1VpbnQ+CisgICAgOiBwdWJsaWMgaW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsCisJCQkgICAgICAgX1VpbnQgPT0gMCA/IDAgOiBleHRlbnQ8X1RwLAorCQkJCQkJICAgICAgIF9VaW50IC0gMT46OnZhbHVlPgorICAgIHsgfTsKKworCisgIC8vIFR5cGUgcmVsYXRpb25zLgorCisgIC8vLyBpc19zYW1lCisgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KKyAgICBzdHJ1Y3QgaXNfc2FtZQorICAgIDogcHVibGljIGZhbHNlX3R5cGUgeyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgaXNfc2FtZTxfVHAsIF9UcD4KKyAgICA6IHB1YmxpYyB0cnVlX3R5cGUgeyB9OworCisgIC8vLyBpc19iYXNlX29mCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CYXNlLCB0eXBlbmFtZSBfRGVyaXZlZD4KKyAgICBzdHJ1Y3QgaXNfYmFzZV9vZgorICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PGJvb2wsIF9faXNfYmFzZV9vZihfQmFzZSwgX0Rlcml2ZWQpPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbSwgdHlwZW5hbWUgX1RvLAorICAgICAgICAgICBib29sID0gX19vcl88aXNfdm9pZDxfRnJvbT4sIGlzX2Z1bmN0aW9uPF9Ubz4sCisgICAgICAgICAgICAgICAgICAgICAgICBpc19hcnJheTxfVG8+Pjo6dmFsdWU+CisgICAgc3RydWN0IF9faXNfY29udmVydGlibGVfaGVscGVyCisgICAgeyBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPSBpc192b2lkPF9Ubz46OnZhbHVlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gcm9tLCB0eXBlbmFtZSBfVG8+CisgICAgY2xhc3MgX19pc19jb252ZXJ0aWJsZV9oZWxwZXI8X0Zyb20sIF9UbywgZmFsc2U+CisgICAgOiBwdWJsaWMgX19zZmluYWVfdHlwZXMKKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVG8xPgorICAgICAgICBzdGF0aWMgdm9pZCBfX3Rlc3RfYXV4KF9UbzEpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnJvbTEsIHR5cGVuYW1lIF9UbzE+CisgICAgICAgIHN0YXRpYyBkZWNsdHlwZShfX3Rlc3RfYXV4PF9UbzE+KHN0ZDo6ZGVjbHZhbDxfRnJvbTE+KCkpLCBfX29uZSgpKQorCV9fdGVzdChpbnQpOworCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgICAgIHN0YXRpYyBfX3R3byBfX3Rlc3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IHNpemVvZihfX3Rlc3Q8X0Zyb20sIF9Ubz4oMCkpID09IDE7CisgICAgfTsKKworICAvLy8gaXNfY29udmVydGlibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zyb20sIHR5cGVuYW1lIF9Ubz4KKyAgICBzdHJ1Y3QgaXNfY29udmVydGlibGUKKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxib29sLAorCQkJICAgICAgIF9faXNfY29udmVydGlibGVfaGVscGVyPF9Gcm9tLCBfVG8+Ojp2YWx1ZT4KKyAgICB7IH07CisKKworICAvLyBDb25zdC12b2xhdGlsZSBtb2RpZmljYXRpb25zLgorCisgIC8vLyByZW1vdmVfY29uc3QKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfY29uc3QKKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2NvbnN0PF9UcCBjb25zdD4KKyAgICB7IHR5cGVkZWYgX1RwICAgICB0eXBlOyB9OworICAKKyAgLy8vIHJlbW92ZV92b2xhdGlsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV92b2xhdGlsZQorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfdm9sYXRpbGU8X1RwIHZvbGF0aWxlPgorICAgIHsgdHlwZWRlZiBfVHAgICAgIHR5cGU7IH07CisgIAorICAvLy8gcmVtb3ZlX2N2CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2N2CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZQorICAgICAgcmVtb3ZlX2NvbnN0PHR5cGVuYW1lIHJlbW92ZV92b2xhdGlsZTxfVHA+Ojp0eXBlPjo6dHlwZSAgICAgdHlwZTsKKyAgICB9OworICAKKyAgLy8vIGFkZF9jb25zdAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF9jb25zdAorICAgIHsgdHlwZWRlZiBfVHAgY29uc3QgICAgIHR5cGU7IH07CisgICAKKyAgLy8vIGFkZF92b2xhdGlsZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF92b2xhdGlsZQorICAgIHsgdHlwZWRlZiBfVHAgdm9sYXRpbGUgICAgIHR5cGU7IH07CisgIAorICAvLy8gYWRkX2N2CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgYWRkX2N2CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZQorICAgICAgYWRkX2NvbnN0PHR5cGVuYW1lIGFkZF92b2xhdGlsZTxfVHA+Ojp0eXBlPjo6dHlwZSAgICAgdHlwZTsKKyAgICB9OworCisKKyAgLy8gUmVmZXJlbmNlIHRyYW5zZm9ybWF0aW9ucy4KKworICAvLy8gcmVtb3ZlX3JlZmVyZW5jZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9yZWZlcmVuY2UKKyAgICB7IHR5cGVkZWYgX1RwICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9yZWZlcmVuY2U8X1RwJj4KKyAgICB7IHR5cGVkZWYgX1RwICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9yZWZlcmVuY2U8X1RwJiY+CisgICAgeyB0eXBlZGVmIF9UcCAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLAorCSAgIGJvb2wgPSBfX2FuZF88X19ub3RfPGlzX3JlZmVyZW5jZTxfVHA+PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX25vdF88aXNfdm9pZDxfVHA+Pj46OnZhbHVlLAorCSAgIGJvb2wgPSBpc19ydmFsdWVfcmVmZXJlbmNlPF9UcD46OnZhbHVlPgorICAgIHN0cnVjdCBfX2FkZF9sdmFsdWVfcmVmZXJlbmNlX2hlbHBlcgorICAgIHsgdHlwZWRlZiBfVHAgICB0eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19hZGRfbHZhbHVlX3JlZmVyZW5jZV9oZWxwZXI8X1RwLCB0cnVlLCBmYWxzZT4KKyAgICB7IHR5cGVkZWYgX1RwJiAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX2FkZF9sdmFsdWVfcmVmZXJlbmNlX2hlbHBlcjxfVHAsIGZhbHNlLCB0cnVlPgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfcmVmZXJlbmNlPF9UcD46OnR5cGUmICAgdHlwZTsgfTsKKworICAvLy8gYWRkX2x2YWx1ZV9yZWZlcmVuY2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBhZGRfbHZhbHVlX3JlZmVyZW5jZQorICAgIDogcHVibGljIF9fYWRkX2x2YWx1ZV9yZWZlcmVuY2VfaGVscGVyPF9UcD4KKyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLAorICAgICAgICAgICBib29sID0gX19hbmRfPF9fbm90Xzxpc19yZWZlcmVuY2U8X1RwPj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgX19ub3RfPGlzX3ZvaWQ8X1RwPj4+Ojp2YWx1ZT4KKyAgICBzdHJ1Y3QgX19hZGRfcnZhbHVlX3JlZmVyZW5jZV9oZWxwZXIKKyAgICB7IHR5cGVkZWYgX1RwICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fYWRkX3J2YWx1ZV9yZWZlcmVuY2VfaGVscGVyPF9UcCwgdHJ1ZT4KKyAgICB7IHR5cGVkZWYgX1RwJiYgICB0eXBlOyB9OworCisgIC8vLyBhZGRfcnZhbHVlX3JlZmVyZW5jZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IGFkZF9ydmFsdWVfcmVmZXJlbmNlCisgICAgOiBwdWJsaWMgX19hZGRfcnZhbHVlX3JlZmVyZW5jZV9oZWxwZXI8X1RwPgorICAgIHsgfTsKKworCisgIC8vIFNpZ24gbW9kaWZpY2F0aW9ucy4KKworICAvLyBVdGlsaXR5IGZvciBjb25zdHJ1Y3RpbmcgaWRlbnRpY2FsbHkgY3YtcXVhbGlmaWVkIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5xdWFsaWZpZWQsIGJvb2wgX0lzQ29uc3QsIGJvb2wgX0lzVm9sPgorICAgIHN0cnVjdCBfX2N2X3NlbGVjdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9VbnF1YWxpZmllZD4KKyAgICBzdHJ1Y3QgX19jdl9zZWxlY3RvcjxfVW5xdWFsaWZpZWQsIGZhbHNlLCBmYWxzZT4KKyAgICB7IHR5cGVkZWYgX1VucXVhbGlmaWVkIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5xdWFsaWZpZWQ+CisgICAgc3RydWN0IF9fY3Zfc2VsZWN0b3I8X1VucXVhbGlmaWVkLCBmYWxzZSwgdHJ1ZT4KKyAgICB7IHR5cGVkZWYgdm9sYXRpbGUgX1VucXVhbGlmaWVkIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5xdWFsaWZpZWQ+CisgICAgc3RydWN0IF9fY3Zfc2VsZWN0b3I8X1VucXVhbGlmaWVkLCB0cnVlLCBmYWxzZT4KKyAgICB7IHR5cGVkZWYgY29uc3QgX1VucXVhbGlmaWVkIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVW5xdWFsaWZpZWQ+CisgICAgc3RydWN0IF9fY3Zfc2VsZWN0b3I8X1VucXVhbGlmaWVkLCB0cnVlLCB0cnVlPgorICAgIHsgdHlwZWRlZiBjb25zdCB2b2xhdGlsZSBfVW5xdWFsaWZpZWQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9RdWFsaWZpZWQsIHR5cGVuYW1lIF9VbnF1YWxpZmllZCwKKwkgICBib29sIF9Jc0NvbnN0ID0gaXNfY29uc3Q8X1F1YWxpZmllZD46OnZhbHVlLAorCSAgIGJvb2wgX0lzVm9sID0gaXNfdm9sYXRpbGU8X1F1YWxpZmllZD46OnZhbHVlPgorICAgIGNsYXNzIF9fbWF0Y2hfY3ZfcXVhbGlmaWVycworICAgIHsKKyAgICAgIHR5cGVkZWYgX19jdl9zZWxlY3RvcjxfVW5xdWFsaWZpZWQsIF9Jc0NvbnN0LCBfSXNWb2w+IF9fbWF0Y2g7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fbWF0Y2g6Ol9fdHlwZSBfX3R5cGU7IAorICAgIH07CisKKyAgLy8gVXRpbGl0eSBmb3IgZmluZGluZyB0aGUgdW5zaWduZWQgdmVyc2lvbnMgb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fbWFrZV91bnNpZ25lZAorICAgIHsgdHlwZWRlZiBfVHAgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3Vuc2lnbmVkPGNoYXI+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3Vuc2lnbmVkPHNpZ25lZCBjaGFyPgorICAgIHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV91bnNpZ25lZDxzaG9ydD4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3Vuc2lnbmVkPGludD4KKyAgICB7IHR5cGVkZWYgdW5zaWduZWQgaW50IF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV91bnNpZ25lZDxsb25nPgorICAgIHsgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV91bnNpZ25lZDxsb25nIGxvbmc+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3R5cGU7IH07CisKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0lOVDEyOCkKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX21ha2VfdW5zaWduZWQ8X19pbnQxMjg+CisgICAgeyB0eXBlZGVmIHVuc2lnbmVkIF9faW50MTI4IF9fdHlwZTsgfTsKKyNlbmRpZgorCisgIC8vIFNlbGVjdCBiZXR3ZWVuIGludGVncmFsIGFuZCBlbnVtOiBub3QgcG9zc2libGUgdG8gYmUgYm90aC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCAKKwkgICBib29sIF9Jc0ludCA9IGlzX2ludGVncmFsPF9UcD46OnZhbHVlLAorCSAgIGJvb2wgX0lzRW51bSA9IGlzX2VudW08X1RwPjo6dmFsdWU+CisgICAgY2xhc3MgX19tYWtlX3Vuc2lnbmVkX3NlbGVjdG9yOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyBfX21ha2VfdW5zaWduZWRfc2VsZWN0b3I8X1RwLCB0cnVlLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fbWFrZV91bnNpZ25lZDx0eXBlbmFtZSByZW1vdmVfY3Y8X1RwPjo6dHlwZT4gX191bnNpZ25lZHQ7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdW5zaWduZWR0OjpfX3R5cGUgX191bnNpZ25lZF90eXBlOworICAgICAgdHlwZWRlZiBfX21hdGNoX2N2X3F1YWxpZmllcnM8X1RwLCBfX3Vuc2lnbmVkX3R5cGU+IF9fY3ZfdW5zaWduZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY3ZfdW5zaWduZWQ6Ol9fdHlwZSBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgX19tYWtlX3Vuc2lnbmVkX3NlbGVjdG9yPF9UcCwgZmFsc2UsIHRydWU+CisgICAgeworICAgICAgLy8gV2l0aCAtZnNob3J0LWVudW1zLCBhbiBlbnVtIG1heSBiZSBhcyBzbWFsbCBhcyBhIGNoYXIuCisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19zbWFsbGVzdDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fYjAgPSBzaXplb2YoX1RwKSA8PSBzaXplb2YoX19zbWFsbGVzdCk7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX2IxID0gc2l6ZW9mKF9UcCkgPD0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fYjIgPSBzaXplb2YoX1RwKSA8PSBzaXplb2YodW5zaWduZWQgaW50KTsKKyAgICAgIHR5cGVkZWYgY29uZGl0aW9uYWw8X19iMiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nPiBfX2NvbmQyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbmQyOjp0eXBlIF9fY29uZDJfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uZGl0aW9uYWw8X19iMSwgdW5zaWduZWQgc2hvcnQsIF9fY29uZDJfdHlwZT4gX19jb25kMTsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25kMTo6dHlwZSBfX2NvbmQxX3R5cGU7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNvbmRpdGlvbmFsPF9fYjAsIF9fc21hbGxlc3QsIF9fY29uZDFfdHlwZT46OnR5cGUgX190eXBlOworICAgIH07CisKKyAgLy8gR2l2ZW4gYW4gaW50ZWdyYWwvZW51bSB0eXBlLCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgdW5zaWduZWQKKyAgLy8gaW50ZWdlciB0eXBlLgorICAvLyBQcmltYXJ5IHRlbXBsYXRlLgorICAvLy8gbWFrZV91bnNpZ25lZAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IG1ha2VfdW5zaWduZWQgCisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIF9fbWFrZV91bnNpZ25lZF9zZWxlY3RvcjxfVHA+OjpfX3R5cGUgdHlwZTsgfTsKKworICAvLyBJbnRlZ3JhbCwgYnV0IGRvbid0IGRlZmluZS4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBtYWtlX3Vuc2lnbmVkPGJvb2w+OworCisKKyAgLy8gVXRpbGl0eSBmb3IgZmluZGluZyB0aGUgc2lnbmVkIHZlcnNpb25zIG9mIHVuc2lnbmVkIGludGVncmFsIHR5cGVzLgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fbWFrZV9zaWduZWQKKyAgICB7IHR5cGVkZWYgX1RwIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fbWFrZV9zaWduZWQ8Y2hhcj4KKyAgICB7IHR5cGVkZWYgc2lnbmVkIGNoYXIgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3NpZ25lZDx1bnNpZ25lZCBjaGFyPgorICAgIHsgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX21ha2Vfc2lnbmVkPHVuc2lnbmVkIHNob3J0PgorICAgIHsgdHlwZWRlZiBzaWduZWQgc2hvcnQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3NpZ25lZDx1bnNpZ25lZCBpbnQ+CisgICAgeyB0eXBlZGVmIHNpZ25lZCBpbnQgX190eXBlOyB9OworCisgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgX19tYWtlX3NpZ25lZDx1bnNpZ25lZCBsb25nPgorICAgIHsgdHlwZWRlZiBzaWduZWQgbG9uZyBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX21ha2Vfc2lnbmVkPHVuc2lnbmVkIGxvbmcgbG9uZz4KKyAgICB7IHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBfX3R5cGU7IH07CisKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pICYmIGRlZmluZWQoX0dMSUJDWFhfVVNFX0lOVDEyOCkKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX21ha2Vfc2lnbmVkPHVuc2lnbmVkIF9faW50MTI4PgorICAgIHsgdHlwZWRlZiBfX2ludDEyOCBfX3R5cGU7IH07CisjZW5kaWYKKworICAvLyBTZWxlY3QgYmV0d2VlbiBpbnRlZ3JhbCBhbmQgZW51bTogbm90IHBvc3NpYmxlIHRvIGJlIGJvdGguCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgCisJICAgYm9vbCBfSXNJbnQgPSBpc19pbnRlZ3JhbDxfVHA+Ojp2YWx1ZSwKKwkgICBib29sIF9Jc0VudW0gPSBpc19lbnVtPF9UcD46OnZhbHVlPgorICAgIGNsYXNzIF9fbWFrZV9zaWduZWRfc2VsZWN0b3I7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIF9fbWFrZV9zaWduZWRfc2VsZWN0b3I8X1RwLCB0cnVlLCBmYWxzZT4KKyAgICB7CisgICAgICB0eXBlZGVmIF9fbWFrZV9zaWduZWQ8dHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+IF9fc2lnbmVkdDsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zaWduZWR0OjpfX3R5cGUgX19zaWduZWRfdHlwZTsKKyAgICAgIHR5cGVkZWYgX19tYXRjaF9jdl9xdWFsaWZpZXJzPF9UcCwgX19zaWduZWRfdHlwZT4gX19jdl9zaWduZWQ7CisKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY3Zfc2lnbmVkOjpfX3R5cGUgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGNsYXNzIF9fbWFrZV9zaWduZWRfc2VsZWN0b3I8X1RwLCBmYWxzZSwgdHJ1ZT4KKyAgICB7CisgICAgICAvLyBXaXRoIC1mc2hvcnQtZW51bXMsIGFuIGVudW0gbWF5IGJlIGFzIHNtYWxsIGFzIGEgY2hhci4KKyAgICAgIHR5cGVkZWYgc2lnbmVkIGNoYXIgX19zbWFsbGVzdDsKKyAgICAgIHN0YXRpYyBjb25zdCBib29sIF9fYjAgPSBzaXplb2YoX1RwKSA8PSBzaXplb2YoX19zbWFsbGVzdCk7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX2IxID0gc2l6ZW9mKF9UcCkgPD0gc2l6ZW9mKHNpZ25lZCBzaG9ydCk7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX2IyID0gc2l6ZW9mKF9UcCkgPD0gc2l6ZW9mKHNpZ25lZCBpbnQpOworICAgICAgdHlwZWRlZiBjb25kaXRpb25hbDxfX2IyLCBzaWduZWQgaW50LCBzaWduZWQgbG9uZz4gX19jb25kMjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25kMjo6dHlwZSBfX2NvbmQyX3R5cGU7CisgICAgICB0eXBlZGVmIGNvbmRpdGlvbmFsPF9fYjEsIHNpZ25lZCBzaG9ydCwgX19jb25kMl90eXBlPiBfX2NvbmQxOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbmQxOjp0eXBlIF9fY29uZDFfdHlwZTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29uZGl0aW9uYWw8X19iMCwgX19zbWFsbGVzdCwgX19jb25kMV90eXBlPjo6dHlwZSBfX3R5cGU7CisgICAgfTsKKworICAvLyBHaXZlbiBhbiBpbnRlZ3JhbC9lbnVtIHR5cGUsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBzaWduZWQKKyAgLy8gaW50ZWdlciB0eXBlLgorICAvLyBQcmltYXJ5IHRlbXBsYXRlLgorICAvLy8gbWFrZV9zaWduZWQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBtYWtlX3NpZ25lZCAKKyAgICB7IHR5cGVkZWYgdHlwZW5hbWUgX19tYWtlX3NpZ25lZF9zZWxlY3RvcjxfVHA+OjpfX3R5cGUgdHlwZTsgfTsKKworICAvLyBJbnRlZ3JhbCwgYnV0IGRvbid0IGRlZmluZS4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBtYWtlX3NpZ25lZDxib29sPjsKKworCisgIC8vIEFycmF5IG1vZGlmaWNhdGlvbnMuCisKKyAgLy8vIHJlbW92ZV9leHRlbnQKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfZXh0ZW50CisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9TaXplPgorICAgIHN0cnVjdCByZW1vdmVfZXh0ZW50PF9UcFtfU2l6ZV0+CisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IHJlbW92ZV9leHRlbnQ8X1RwW10+CisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKworICAvLy8gcmVtb3ZlX2FsbF9leHRlbnRzCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2FsbF9leHRlbnRzCisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9TaXplPgorICAgIHN0cnVjdCByZW1vdmVfYWxsX2V4dGVudHM8X1RwW19TaXplXT4KKyAgICB7IHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2FsbF9leHRlbnRzPF9UcD46OnR5cGUgICAgIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCByZW1vdmVfYWxsX2V4dGVudHM8X1RwW10+CisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxfVHA+Ojp0eXBlICAgICB0eXBlOyB9OworCisKKyAgLy8gUG9pbnRlciBtb2RpZmljYXRpb25zLgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWU+CisgICAgc3RydWN0IF9fcmVtb3ZlX3BvaW50ZXJfaGVscGVyCisgICAgeyB0eXBlZGVmIF9UcCAgICAgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBzdHJ1Y3QgX19yZW1vdmVfcG9pbnRlcl9oZWxwZXI8X1RwLCBfVXAqPgorICAgIHsgdHlwZWRlZiBfVXAgICAgIHR5cGU7IH07CisKKyAgLy8vIHJlbW92ZV9wb2ludGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX3BvaW50ZXIKKyAgICA6IHB1YmxpYyBfX3JlbW92ZV9wb2ludGVyX2hlbHBlcjxfVHAsIHR5cGVuYW1lIHJlbW92ZV9jdjxfVHA+Ojp0eXBlPgorICAgIHsgfTsKKworICAvLy8gYWRkX3BvaW50ZXIKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBhZGRfcG9pbnRlcgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfcmVmZXJlbmNlPF9UcD46OnR5cGUqICAgICB0eXBlOyB9OworCisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0xlbj4KKyAgICBzdHJ1Y3QgX19hbGlnbmVkX3N0b3JhZ2VfbXNhCisgICAgeyAKKyAgICAgIHVuaW9uIF9fdHlwZQorICAgICAgeworCXVuc2lnbmVkIGNoYXIgX19kYXRhW19MZW5dOworCXN0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXykpIHsgfSBfX2FsaWduOyAKKyAgICAgIH07CisgICAgfTsKKworICAvKioKKyAgICogIEBicmllZiBBbGlnbm1lbnQgdHlwZS4KKyAgICoKKyAgICogIFRoZSB2YWx1ZSBvZiBfQWxpZ24gaXMgYSBkZWZhdWx0LWFsaWdubWVudCB3aGljaCBzaGFsbCBiZSB0aGUKKyAgICogIG1vc3Qgc3RyaW5nZW50IGFsaWdubWVudCByZXF1aXJlbWVudCBmb3IgYW55IEMrKyBvYmplY3QgdHlwZQorICAgKiAgd2hvc2Ugc2l6ZSBpcyBubyBncmVhdGVyIHRoYW4gX0xlbiAoMy45KS4gVGhlIG1lbWJlciB0eXBlZGVmCisgICAqICB0eXBlIHNoYWxsIGJlIGEgUE9EIHR5cGUgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmluaXRpYWxpemVkCisgICAqICBzdG9yYWdlIGZvciBhbnkgb2JqZWN0IHdob3NlIHNpemUgaXMgYXQgbW9zdCBfTGVuIGFuZCB3aG9zZQorICAgKiAgYWxpZ25tZW50IGlzIGEgZGl2aXNvciBvZiBfQWxpZ24uCisgICovCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9MZW4sIHN0ZDo6c2l6ZV90IF9BbGlnbiA9CisJICAgX19hbGlnbm9mX18odHlwZW5hbWUgX19hbGlnbmVkX3N0b3JhZ2VfbXNhPF9MZW4+OjpfX3R5cGUpPgorICAgIHN0cnVjdCBhbGlnbmVkX3N0b3JhZ2UKKyAgICB7IAorICAgICAgdW5pb24gdHlwZQorICAgICAgeworCXVuc2lnbmVkIGNoYXIgX19kYXRhW19MZW5dOworCXN0cnVjdCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoX0FsaWduKSkpKSB7IH0gX19hbGlnbjsgCisgICAgICB9OworICAgIH07CisKKworICAvLyBEZWNheSB0cmFpdCBmb3IgYXJyYXlzIGFuZCBmdW5jdGlvbnMsIHVzZWQgZm9yIHBlcmZlY3QgZm9yd2FyZGluZworICAvLyBpbiBtYWtlX3BhaXIsIG1ha2VfdHVwbGUsIGV0Yy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwLCAKKwkgICBib29sIF9Jc0FycmF5ID0gaXNfYXJyYXk8X1VwPjo6dmFsdWUsCisJICAgYm9vbCBfSXNGdW5jdGlvbiA9IGlzX2Z1bmN0aW9uPF9VcD46OnZhbHVlPiAKKyAgICBzdHJ1Y3QgX19kZWNheV9zZWxlY3RvcjsKKworICAvLyBOQjogRFIgNzA1LgorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+IAorICAgIHN0cnVjdCBfX2RlY2F5X3NlbGVjdG9yPF9VcCwgZmFsc2UsIGZhbHNlPgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8X1VwPjo6dHlwZSBfX3R5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPiAKKyAgICBzdHJ1Y3QgX19kZWNheV9zZWxlY3RvcjxfVXAsIHRydWUsIGZhbHNlPgorICAgIHsgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfZXh0ZW50PF9VcD46OnR5cGUqIF9fdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+IAorICAgIHN0cnVjdCBfX2RlY2F5X3NlbGVjdG9yPF9VcCwgZmFsc2UsIHRydWU+CisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIGFkZF9wb2ludGVyPF9VcD46OnR5cGUgX190eXBlOyB9OworCisgIC8vLyBkZWNheQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IAorICAgIGNsYXNzIGRlY2F5IAorICAgIHsgCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X1RwPjo6dHlwZSBfX3JlbW92ZV90eXBlOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2RlY2F5X3NlbGVjdG9yPF9fcmVtb3ZlX3R5cGU+OjpfX3R5cGUgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBjbGFzcyByZWZlcmVuY2Vfd3JhcHBlcjsKKworICAvLyBIZWxwZXIgd2hpY2ggYWRkcyBhIHJlZmVyZW5jZSB0byBhIHR5cGUgd2hlbiBnaXZlbiBhIHJlZmVyZW5jZV93cmFwcGVyCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19zdHJpcF9yZWZlcmVuY2Vfd3JhcHBlcgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwIF9fdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgX19zdHJpcF9yZWZlcmVuY2Vfd3JhcHBlcjxyZWZlcmVuY2Vfd3JhcHBlcjxfVHA+ID4KKyAgICB7CisgICAgICB0eXBlZGVmIF9UcCYgX190eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBfX3N0cmlwX3JlZmVyZW5jZV93cmFwcGVyPGNvbnN0IHJlZmVyZW5jZV93cmFwcGVyPF9UcD4gPgorICAgIHsKKyAgICAgIHR5cGVkZWYgX1RwJiBfX3R5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZGVjYXlfYW5kX3N0cmlwCisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmlwX3JlZmVyZW5jZV93cmFwcGVyPAorCXR5cGVuYW1lIGRlY2F5PF9UcD46OnR5cGU+OjpfX3R5cGUgX190eXBlOworICAgIH07CisKKworICAvLyBQcmltYXJ5IHRlbXBsYXRlLgorICAvLy8gRGVmaW5lIGEgbWVtYmVyIHR5cGVkZWYgQGMgdHlwZSBvbmx5IGlmIGEgYm9vbGVhbiBjb25zdGFudCBpcyB0cnVlLgorICB0ZW1wbGF0ZTxib29sLCB0eXBlbmFtZSBfVHAgPSB2b2lkPgorICAgIHN0cnVjdCBlbmFibGVfaWYgCisgICAgeyB9OworCisgIC8vIFBhcnRpYWwgc3BlY2lhbGl6YXRpb24gZm9yIHRydWUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgZW5hYmxlX2lmPHRydWUsIF9UcD4KKyAgICB7IHR5cGVkZWYgX1RwIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0NvbmQ+CisgICAgdXNpbmcgX1JlcXVpcmUgPSB0eXBlbmFtZSBlbmFibGVfaWY8X19hbmRfPF9Db25kLi4uPjo6dmFsdWU+Ojp0eXBlOworCisgIC8vIFByaW1hcnkgdGVtcGxhdGUuCisgIC8vLyBEZWZpbmUgYSBtZW1iZXIgdHlwZWRlZiBAYyB0eXBlIHRvIG9uZSBvZiB0d28gYXJndW1lbnQgdHlwZXMuCisgIHRlbXBsYXRlPGJvb2wgX0NvbmQsIHR5cGVuYW1lIF9JZnRydWUsIHR5cGVuYW1lIF9JZmZhbHNlPgorICAgIHN0cnVjdCBjb25kaXRpb25hbAorICAgIHsgdHlwZWRlZiBfSWZ0cnVlIHR5cGU7IH07CisKKyAgLy8gUGFydGlhbCBzcGVjaWFsaXphdGlvbiBmb3IgZmFsc2UuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JZnRydWUsIHR5cGVuYW1lIF9JZmZhbHNlPgorICAgIHN0cnVjdCBjb25kaXRpb25hbDxmYWxzZSwgX0lmdHJ1ZSwgX0lmZmFsc2U+CisgICAgeyB0eXBlZGVmIF9JZmZhbHNlIHR5cGU7IH07CisKKyAgLy8vIGNvbW1vbl90eXBlCisgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9UcD4KKyAgICBzdHJ1Y3QgY29tbW9uX3R5cGU7CisKKyAgLy8gU2ZpbmFlLWZyaWVuZGx5IGNvbW1vbl90eXBlIGltcGxlbWVudGF0aW9uOgorCisgIHN0cnVjdCBfX2RvX2NvbW1vbl90eXBlX2ltcGwKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgICAgc3RhdGljIF9fc3VjY2Vzc190eXBlPHR5cGVuYW1lIGRlY2F5PGRlY2x0eXBlCisJCQkgICAgKHRydWUgPyBzdGQ6OmRlY2x2YWw8X1RwPigpCisJCQkgICAgIDogc3RkOjpkZWNsdmFsPF9VcD4oKSk+Ojp0eXBlPiBfU190ZXN0KGludCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgICBzdGF0aWMgX19mYWlsdXJlX3R5cGUgX1NfdGVzdCguLi4pOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIHN0cnVjdCBfX2NvbW1vbl90eXBlX2ltcGwKKyAgICA6IHByaXZhdGUgX19kb19jb21tb25fdHlwZV9pbXBsCisgICAgeworICAgICAgdHlwZWRlZiBkZWNsdHlwZShfU190ZXN0PF9UcCwgX1VwPigwKSkgdHlwZTsKKyAgICB9OworCisgIHN0cnVjdCBfX2RvX21lbWJlcl90eXBlX3dyYXBwZXIKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICAgIHN0YXRpYyBfX3N1Y2Nlc3NfdHlwZTx0eXBlbmFtZSBfVHA6OnR5cGU+IF9TX3Rlc3QoaW50KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lPgorICAgICAgc3RhdGljIF9fZmFpbHVyZV90eXBlIF9TX3Rlc3QoLi4uKTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fbWVtYmVyX3R5cGVfd3JhcHBlcgorICAgIDogcHJpdmF0ZSBfX2RvX21lbWJlcl90eXBlX3dyYXBwZXIKKyAgICB7CisgICAgICB0eXBlZGVmIGRlY2x0eXBlKF9TX3Rlc3Q8X1RwPigwKSkgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DVHAsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX2V4cGFuZGVkX2NvbW1vbl90eXBlX3dyYXBwZXIKKyAgICB7CisgICAgICB0eXBlZGVmIGNvbW1vbl90eXBlPHR5cGVuYW1lIF9DVHA6OnR5cGUsIF9BcmdzLi4uPiB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9fZXhwYW5kZWRfY29tbW9uX3R5cGVfd3JhcHBlcjxfX2ZhaWx1cmVfdHlwZSwgX0FyZ3MuLi4+CisgICAgeyB0eXBlZGVmIF9fZmFpbHVyZV90eXBlIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBjb21tb25fdHlwZTxfVHA+CisgICAgeyB0eXBlZGVmIHR5cGVuYW1lIGRlY2F5PF9UcD46OnR5cGUgdHlwZTsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBzdHJ1Y3QgY29tbW9uX3R5cGU8X1RwLCBfVXA+CisgICAgOiBwdWJsaWMgX19jb21tb25fdHlwZV9pbXBsPF9UcCwgX1VwPjo6dHlwZQorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcCwgdHlwZW5hbWUuLi4gX1ZwPgorICAgIHN0cnVjdCBjb21tb25fdHlwZTxfVHAsIF9VcCwgX1ZwLi4uPgorICAgIDogcHVibGljIF9fZXhwYW5kZWRfY29tbW9uX3R5cGVfd3JhcHBlcjx0eXBlbmFtZSBfX21lbWJlcl90eXBlX3dyYXBwZXI8CisgICAgICAgICAgICAgICBjb21tb25fdHlwZTxfVHAsIF9VcD4+Ojp0eXBlLCBfVnAuLi4+Ojp0eXBlCisgICAgeyB9OworCisgIC8vLyBUaGUgdW5kZXJseWluZyB0eXBlIG9mIGFuIGVudW0uCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBzdHJ1Y3QgdW5kZXJseWluZ190eXBlCisgICAgeworICAgICAgdHlwZWRlZiBfX3VuZGVybHlpbmdfdHlwZShfVHApIHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgc3RydWN0IF9fZGVjbHZhbF9wcm90ZWN0b3IKKyAgICB7CisgICAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3N0b3AgPSBmYWxzZTsKKyAgICAgIHN0YXRpYyB0eXBlbmFtZSBhZGRfcnZhbHVlX3JlZmVyZW5jZTxfVHA+Ojp0eXBlIF9fZGVsZWdhdGUoKTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdHlwZW5hbWUgYWRkX3J2YWx1ZV9yZWZlcmVuY2U8X1RwPjo6dHlwZQorICAgIGRlY2x2YWwoKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIHN0YXRpY19hc3NlcnQoX19kZWNsdmFsX3Byb3RlY3RvcjxfVHA+OjpfX3N0b3AsCisJCSAgICAiZGVjbHZhbCgpIG11c3Qgbm90IGJlIHVzZWQhIik7CisgICAgICByZXR1cm4gX19kZWNsdmFsX3Byb3RlY3RvcjxfVHA+OjpfX2RlbGVnYXRlKCk7CisgICAgfQorCisgIC8vLyByZXN1bHRfb2YKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpZ25hdHVyZT4KKyAgICBjbGFzcyByZXN1bHRfb2Y7CisKKyAgLy8gU2ZpbmFlLWZyaWVuZGx5IHJlc3VsdF9vZiBpbXBsZW1lbnRhdGlvbjoKKworICAvLyBbZnVuYy5yZXF1aXJlXSBwYXJhZ3JhcGggMSBidWxsZXQgMToKKyAgc3RydWN0IF9fcmVzdWx0X29mX21lbWZ1bl9yZWZfaW1wbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZwLCB0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICAgIHN0YXRpYyBfX3N1Y2Nlc3NfdHlwZTxkZWNsdHlwZSgKKyAgICAgIChzdGQ6OmRlY2x2YWw8X1RwMT4oKS4qc3RkOjpkZWNsdmFsPF9GcD4oKSkoc3RkOjpkZWNsdmFsPF9BcmdzPigpLi4uKQorICAgICAgKT4gX1NfdGVzdChpbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4+CisgICAgICBzdGF0aWMgX19mYWlsdXJlX3R5cGUgX1NfdGVzdCguLi4pOworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1QdHIsIHR5cGVuYW1lIF9BcmcsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX3Jlc3VsdF9vZl9tZW1mdW5fcmVmCisgICAgOiBwcml2YXRlIF9fcmVzdWx0X29mX21lbWZ1bl9yZWZfaW1wbAorICAgIHsKKyAgICAgIHR5cGVkZWYgZGVjbHR5cGUoX1NfdGVzdDxfTWVtUHRyLCBfQXJnLCBfQXJncy4uLj4oMCkpIHR5cGU7CisgICAgfTsKKworICAvLyBbZnVuYy5yZXF1aXJlXSBwYXJhZ3JhcGggMSBidWxsZXQgMjoKKyAgc3RydWN0IF9fcmVzdWx0X29mX21lbWZ1bl9kZXJlZl9pbXBsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnAsIHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgc3RhdGljIF9fc3VjY2Vzc190eXBlPGRlY2x0eXBlKAorICAgICAgKCgqc3RkOjpkZWNsdmFsPF9UcDE+KCkpLipzdGQ6OmRlY2x2YWw8X0ZwPigpKShzdGQ6OmRlY2x2YWw8X0FyZ3M+KCkuLi4pCisgICAgICApPiBfU190ZXN0KGludCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4KKyAgICAgIHN0YXRpYyBfX2ZhaWx1cmVfdHlwZSBfU190ZXN0KC4uLik7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01lbVB0ciwgdHlwZW5hbWUgX0FyZywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9fcmVzdWx0X29mX21lbWZ1bl9kZXJlZgorICAgIDogcHJpdmF0ZSBfX3Jlc3VsdF9vZl9tZW1mdW5fZGVyZWZfaW1wbAorICAgIHsKKyAgICAgIHR5cGVkZWYgZGVjbHR5cGUoX1NfdGVzdDxfTWVtUHRyLCBfQXJnLCBfQXJncy4uLj4oMCkpIHR5cGU7CisgICAgfTsKKworICAvLyBbZnVuYy5yZXF1aXJlXSBwYXJhZ3JhcGggMSBidWxsZXQgMzoKKyAgc3RydWN0IF9fcmVzdWx0X29mX21lbW9ial9yZWZfaW1wbAorICB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZwLCB0eXBlbmFtZSBfVHAxPgorICAgICAgc3RhdGljIF9fc3VjY2Vzc190eXBlPGRlY2x0eXBlKAorICAgICAgc3RkOjpkZWNsdmFsPF9UcDE+KCkuKnN0ZDo6ZGVjbHZhbDxfRnA+KCkKKyAgICAgICk+IF9TX3Rlc3QoaW50KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4KKyAgICAgIHN0YXRpYyBfX2ZhaWx1cmVfdHlwZSBfU190ZXN0KC4uLik7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01lbVB0ciwgdHlwZW5hbWUgX0FyZz4KKyAgICBzdHJ1Y3QgX19yZXN1bHRfb2ZfbWVtb2JqX3JlZgorICAgIDogcHJpdmF0ZSBfX3Jlc3VsdF9vZl9tZW1vYmpfcmVmX2ltcGwKKyAgICB7CisgICAgICB0eXBlZGVmIGRlY2x0eXBlKF9TX3Rlc3Q8X01lbVB0ciwgX0FyZz4oMCkpIHR5cGU7CisgICAgfTsKKworICAvLyBbZnVuYy5yZXF1aXJlXSBwYXJhZ3JhcGggMSBidWxsZXQgNDoKKyAgc3RydWN0IF9fcmVzdWx0X29mX21lbW9ial9kZXJlZl9pbXBsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnAsIHR5cGVuYW1lIF9UcDE+CisgICAgICBzdGF0aWMgX19zdWNjZXNzX3R5cGU8ZGVjbHR5cGUoCisgICAgICAoKnN0ZDo6ZGVjbHZhbDxfVHAxPigpKS4qc3RkOjpkZWNsdmFsPF9GcD4oKQorICAgICAgKT4gX1NfdGVzdChpbnQpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPgorICAgICAgc3RhdGljIF9fZmFpbHVyZV90eXBlIF9TX3Rlc3QoLi4uKTsKKyAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTWVtUHRyLCB0eXBlbmFtZSBfQXJnPgorICAgIHN0cnVjdCBfX3Jlc3VsdF9vZl9tZW1vYmpfZGVyZWYKKyAgICA6IHByaXZhdGUgX19yZXN1bHRfb2ZfbWVtb2JqX2RlcmVmX2ltcGwKKyAgICB7CisgICAgICB0eXBlZGVmIGRlY2x0eXBlKF9TX3Rlc3Q8X01lbVB0ciwgX0FyZz4oMCkpIHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTWVtUHRyLCB0eXBlbmFtZSBfQXJnPgorICAgIHN0cnVjdCBfX3Jlc3VsdF9vZl9tZW1vYmo7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcywgdHlwZW5hbWUgX0NsYXNzLCB0eXBlbmFtZSBfQXJnPgorICAgIHN0cnVjdCBfX3Jlc3VsdF9vZl9tZW1vYmo8X1JlcyBfQ2xhc3M6OiosIF9Bcmc+CisgICAgeworICAgICAgdHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTwKKyAgICAgICAgX0FyZz46OnR5cGU+Ojp0eXBlIF9Bcmd2YWw7CisgICAgICB0eXBlZGVmIF9SZXMgX0NsYXNzOjoqIF9NZW1QdHI7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNvbmRpdGlvbmFsPF9fb3JfPGlzX3NhbWU8X0FyZ3ZhbCwgX0NsYXNzPiwKKyAgICAgICAgaXNfYmFzZV9vZjxfQ2xhc3MsIF9Bcmd2YWw+Pjo6dmFsdWUsCisgICAgICAgIF9fcmVzdWx0X29mX21lbW9ial9yZWY8X01lbVB0ciwgX0FyZz4sCisgICAgICAgIF9fcmVzdWx0X29mX21lbW9ial9kZXJlZjxfTWVtUHRyLCBfQXJnPgorICAgICAgPjo6dHlwZTo6dHlwZSB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX01lbVB0ciwgdHlwZW5hbWUgX0FyZywgdHlwZW5hbWUuLi4gX0FyZ3M+CisgICAgc3RydWN0IF9fcmVzdWx0X29mX21lbWZ1bjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVzLCB0eXBlbmFtZSBfQ2xhc3MsIHR5cGVuYW1lIF9BcmcsIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgIHN0cnVjdCBfX3Jlc3VsdF9vZl9tZW1mdW48X1JlcyBfQ2xhc3M6OiosIF9BcmcsIF9BcmdzLi4uPgorICAgIHsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2N2PHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8CisgICAgICAgIF9Bcmc+Ojp0eXBlPjo6dHlwZSBfQXJndmFsOworICAgICAgdHlwZWRlZiBfUmVzIF9DbGFzczo6KiBfTWVtUHRyOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjb25kaXRpb25hbDxfX29yXzxpc19zYW1lPF9Bcmd2YWwsIF9DbGFzcz4sCisgICAgICAgIGlzX2Jhc2Vfb2Y8X0NsYXNzLCBfQXJndmFsPj46OnZhbHVlLAorICAgICAgICBfX3Jlc3VsdF9vZl9tZW1mdW5fcmVmPF9NZW1QdHIsIF9BcmcsIF9BcmdzLi4uPiwKKyAgICAgICAgX19yZXN1bHRfb2ZfbWVtZnVuX2RlcmVmPF9NZW1QdHIsIF9BcmcsIF9BcmdzLi4uPgorICAgICAgPjo6dHlwZTo6dHlwZSB0eXBlOworICAgIH07CisKKyAgdGVtcGxhdGU8Ym9vbCwgYm9vbCwgdHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX19yZXN1bHRfb2ZfaW1wbAorICAgIHsKKyAgICAgIHR5cGVkZWYgX19mYWlsdXJlX3R5cGUgdHlwZTsKKyAgICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9NZW1QdHIsIHR5cGVuYW1lIF9Bcmc+CisgICAgc3RydWN0IF9fcmVzdWx0X29mX2ltcGw8dHJ1ZSwgZmFsc2UsIF9NZW1QdHIsIF9Bcmc+CisgICAgOiBwdWJsaWMgX19yZXN1bHRfb2ZfbWVtb2JqPHR5cGVuYW1lIGRlY2F5PF9NZW1QdHI+Ojp0eXBlLCBfQXJnPgorICAgIHsgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTWVtUHRyLCB0eXBlbmFtZSBfQXJnLCB0eXBlbmFtZS4uLiBfQXJncz4KKyAgICBzdHJ1Y3QgX19yZXN1bHRfb2ZfaW1wbDxmYWxzZSwgdHJ1ZSwgX01lbVB0ciwgX0FyZywgX0FyZ3MuLi4+CisgICAgOiBwdWJsaWMgX19yZXN1bHRfb2ZfbWVtZnVuPHR5cGVuYW1lIGRlY2F5PF9NZW1QdHI+Ojp0eXBlLCBfQXJnLCBfQXJncy4uLj4KKyAgICB7IH07CisKKyAgLy8gW2Z1bmMucmVxdWlyZV0gcGFyYWdyYXBoIDEgYnVsbGV0IDU6CisgIHN0cnVjdCBfX3Jlc3VsdF9vZl9vdGhlcl9pbXBsCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lLi4uIF9BcmdzPgorICAgICAgc3RhdGljIF9fc3VjY2Vzc190eXBlPGRlY2x0eXBlKAorICAgICAgc3RkOjpkZWNsdmFsPF9Gbj4oKShzdGQ6OmRlY2x2YWw8X0FyZ3M+KCkuLi4pCisgICAgICApPiBfU190ZXN0KGludCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4KKyAgICAgIHN0YXRpYyBfX2ZhaWx1cmVfdHlwZSBfU190ZXN0KC4uLik7CisgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0Z1bmN0b3IsIHR5cGVuYW1lLi4uIF9BcmdUeXBlcz4KKyAgICBzdHJ1Y3QgX19yZXN1bHRfb2ZfaW1wbDxmYWxzZSwgZmFsc2UsIF9GdW5jdG9yLCBfQXJnVHlwZXMuLi4+CisgICAgOiBwcml2YXRlIF9fcmVzdWx0X29mX290aGVyX2ltcGwKKyAgICB7CisgICAgICB0eXBlZGVmIGRlY2x0eXBlKF9TX3Rlc3Q8X0Z1bmN0b3IsIF9BcmdUeXBlcy4uLj4oMCkpIHR5cGU7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRnVuY3RvciwgdHlwZW5hbWUuLi4gX0FyZ1R5cGVzPgorICAgIHN0cnVjdCByZXN1bHRfb2Y8X0Z1bmN0b3IoX0FyZ1R5cGVzLi4uKT4KKyAgICA6IHB1YmxpYyBfX3Jlc3VsdF9vZl9pbXBsPAorICAgICAgICBpc19tZW1iZXJfb2JqZWN0X3BvaW50ZXI8CisgICAgICAgICAgdHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxfRnVuY3Rvcj46OnR5cGUKKyAgICAgICAgPjo6dmFsdWUsCisgICAgICAgIGlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyPAorICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9yZWZlcmVuY2U8X0Z1bmN0b3I+Ojp0eXBlCisgICAgICAgID46OnZhbHVlLAorCSAgICBfRnVuY3RvciwgX0FyZ1R5cGVzLi4uCisgICAgICA+Ojp0eXBlCisgICAgeyB9OworCisgIC8vLyBAfSBncm91cCBtZXRhcHJvZ3JhbW1pbmcKKwkKKyAgLyoqCisgICAqICBVc2UgU0ZJTkFFIHRvIGRldGVybWluZSBpZiB0aGUgdHlwZSBfVHAgaGFzIGEgcHVibGljbHktYWNjZXNzaWJsZQorICAgKiAgbWVtYmVyIHR5cGUgX05UWVBFLgorICAgKi8KKyNkZWZpbmUgX0dMSUJDWFhfSEFTX05FU1RFRF9UWVBFKF9OVFlQRSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhc3MgX19oYXNfIyNfTlRZUEUjI19oZWxwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA6IF9fc2ZpbmFlX3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RydWN0IF9XcmFwX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBfX29uZSBfX3Rlc3QoX1dyYXBfdHlwZTx0eXBlbmFtZSBfVXA6Ol9OVFlQRT4qKTsgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBfX3R3byBfX3Rlc3QoLi4uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPSBzaXplb2YoX190ZXN0PF9UcD4oMCkpID09IDE7IFwKKyAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdHJ1Y3QgX19oYXNfIyNfTlRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDogaW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgX19oYXNfIyNfTlRZUEUjI19oZWxwZXIgICAgICAgICAgICBcCisJCQk8dHlwZW5hbWUgcmVtb3ZlX2N2PF9UcD46OnR5cGU+Ojp2YWx1ZT4gIFwKKyAgICB7IH07CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyNlbmRpZiAgLy8gQysrMTEKKworI2VuZGlmICAvLyBfR0xJQkNYWF9UWVBFX1RSQUlUUwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90eXBlaW5kZXggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3R5cGVpbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTZkYjMwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90eXBlaW5kZXgKQEAgLTAsMCArMSwxMTIgQEAKKy8vIEMrKzExIDx0eXBlaW5kZXg+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL3R5cGVpbmRleAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9UWVBFSU5ERVgKKyNkZWZpbmUgX0dMSUJDWFhfVFlQRUlOREVYIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPHR5cGVpbmZvPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLyoqCisgICAqIEBicmllZiBDbGFzcyB0eXBlX2luZGV4CisgICAqIEBpbmdyb3VwIHV0aWxpdGllcworICAgKgorICAgKiAgVGhlIGNsYXNzIHR5cGVfaW5kZXggcHJvdmlkZXMgYSBzaW1wbGUgd3JhcHBlciBmb3IgdHlwZV9pbmZvCisgICAqICB3aGljaCBjYW4gYmUgdXNlZCBhcyBhbiBpbmRleCB0eXBlIGluIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMKKyAgICogICgyMy42KSBhbmQgaW4gdW5vcmRlcmVkIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgKDIzLjcpLgorICAgKi8KKyAgc3RydWN0IHR5cGVfaW5kZXgKKyAgeworICAgIHR5cGVfaW5kZXgoY29uc3QgdHlwZV9pbmZvJiBfX3Jocykgbm9leGNlcHQKKyAgICA6IF9NX3RhcmdldCgmX19yaHMpIHsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmRleCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gKl9NX3RhcmdldCA9PSAqX19yaHMuX01fdGFyZ2V0OyB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3IhPShjb25zdCB0eXBlX2luZGV4JiBfX3JocykgY29uc3Qgbm9leGNlcHQKKyAgICB7IHJldHVybiAqX01fdGFyZ2V0ICE9ICpfX3Jocy5fTV90YXJnZXQ7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcjwoY29uc3QgdHlwZV9pbmRleCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gX01fdGFyZ2V0LT5iZWZvcmUoKl9fcmhzLl9NX3RhcmdldCk7IH0KKworICAgIGJvb2wKKyAgICBvcGVyYXRvcjw9KGNvbnN0IHR5cGVfaW5kZXgmIF9fcmhzKSBjb25zdCBub2V4Y2VwdAorICAgIHsgcmV0dXJuICFfX3Jocy5fTV90YXJnZXQtPmJlZm9yZSgqX01fdGFyZ2V0KTsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPihjb25zdCB0eXBlX2luZGV4JiBfX3JocykgY29uc3Qgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX3Jocy5fTV90YXJnZXQtPmJlZm9yZSgqX01fdGFyZ2V0KTsgfQorCisgICAgYm9vbAorICAgIG9wZXJhdG9yPj0oY29uc3QgdHlwZV9pbmRleCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0CisgICAgeyByZXR1cm4gIV9NX3RhcmdldC0+YmVmb3JlKCpfX3Jocy5fTV90YXJnZXQpOyB9CisKKyAgICBzaXplX3QKKyAgICBoYXNoX2NvZGUoKSBjb25zdCBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9NX3RhcmdldC0+aGFzaF9jb2RlKCk7IH0KKworICAgIGNvbnN0IGNoYXIqCisgICAgbmFtZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fdGFyZ2V0LT5uYW1lKCk7IH0KKworICBwcml2YXRlOgorICAgIGNvbnN0IHR5cGVfaW5mbyogX01fdGFyZ2V0OworICB9OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IGhhc2g7CisKKyAgLy8vIHN0ZDo6aGFzaCBzcGVjaWFsaXphdGlvbiBmb3IgdHlwZV9pbmRleC4KKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBoYXNoPHR5cGVfaW5kZXg+CisgICAgeworICAgICAgdHlwZWRlZiBzaXplX3QgICAgICAgIHJlc3VsdF90eXBlOworICAgICAgdHlwZWRlZiB0eXBlX2luZGV4ICBhcmd1bWVudF90eXBlOworCisgICAgICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgdHlwZV9pbmRleCYgX190aSkgY29uc3Qgbm9leGNlcHQKKyAgICAgIHsgcmV0dXJuIF9fdGkuaGFzaF9jb2RlKCk7IH0KKyAgICB9OworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAorCisjZW5kaWYgIC8vIEMrKzExCisKKyNlbmRpZiAgLy8gX0dMSUJDWFhfVFlQRUlOREVYCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3R5cGVpbmZvIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90eXBlaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTNkMGVmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy90eXBlaW5mbwpAQCAtMCwwICsxLDIyMiBAQAorLy8gUlRUSSBzdXBwb3J0IGZvciAtKi0gQysrIC0qLQorLy8gQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorLy8KKy8vIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgdHlwZWluZm8KKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX1RZUEVJTkZPCisjZGVmaW5lIF9UWVBFSU5GTworCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpbmNsdWRlIDxleGNlcHRpb24+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPGJpdHMvaGFzaF9ieXRlcy5oPgorI2VuZGlmCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQorCitleHRlcm4gIkMrKyIgeworCituYW1lc3BhY2UgX19jeHhhYml2MQoreworICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsKK30gLy8gbmFtZXNwYWNlIF9fY3h4YWJpdjEKKworLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdHlwZWluZm8gbmFtZXMgZm9yIHRoZSBzYW1lIHR5cGUgYXJlIG1lcmdlZCAoaW4gd2hpY2gKKy8vIGNhc2UgY29tcGFyaXNvbiBjYW4ganVzdCBjb21wYXJlIHBvaW50ZXJzKSBvciBub3QgKGluIHdoaWNoIGNhc2Ugc3RyaW5ncworLy8gbXVzdCBiZSBjb21wYXJlZCksIGFuZCB3aGV0aGVyIGNvbXBhcmlzb24gaXMgdG8gYmUgaW1wbGVtZW50ZWQgaW5saW5lIG9yCisvLyBub3QuICBXZSB1c2VkIHRvIGRvIGlubGluZSBwb2ludGVyIGNvbXBhcmlzb24gYnkgZGVmYXVsdCBpZiB3ZWFrIHN5bWJvbHMKKy8vIGFyZSBhdmFpbGFibGUsIGJ1dCBldmVuIHdpdGggd2VhayBzeW1ib2xzIHNvbWV0aW1lcyBuYW1lcyBhcmUgbm90IG1lcmdlZAorLy8gd2hlbiBvYmplY3RzIGFyZSBsb2FkZWQgd2l0aCBSVExEX0xPQ0FMLCBzbyBub3cgd2UgYWx3YXlzIHVzZSBzdHJjbXAgYnkKKy8vIGRlZmF1bHQuICBGb3IgQUJJIGNvbXBhdGliaWxpdHksIHdlIGRvIHRoZSBzdHJjbXAgaW5saW5lIGlmIHdlYWsgc3ltYm9scworLy8gYXJlIGF2YWlsYWJsZSwgYW5kIG91dC1vZi1saW5lIGlmIG5vdC4gIE91dC1vZi1saW5lIHBvaW50ZXIgY29tcGFyaXNvbgorLy8gaXMgdXNlZCB3aGVyZSB0aGUgb2JqZWN0IGZpbGVzIGFyZSB0byBiZSBwb3J0YWJsZSB0byBtdWx0aXBsZSBzeXN0ZW1zLAorLy8gc29tZSBvZiB3aGljaCBtYXkgbm90IGJlIGFibGUgdG8gdXNlIHBvaW50ZXIgY29tcGFyaXNvbiwgYnV0IHRoZQorLy8gcGFydGljdWxhciBzeXN0ZW0gZm9yIHdoaWNoIGxpYnN0ZGMrKyBpcyBiZWluZyBidWlsdCBjYW4gdXNlIHBvaW50ZXIKKy8vIGNvbXBhcmlzb247IGluIHBhcnRpY3VsYXIgZm9yIG1vc3QgQVJNIEVBQkkgc3lzdGVtcywgd2hlcmUgdGhlIEFCSQorLy8gc3BlY2lmaWVzIG91dC1vZi1saW5lIGNvbXBhcmlzb24uICBUaGUgY29tcGlsZXIncyB0YXJnZXQgY29uZmlndXJhdGlvbgorLy8gY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyBieSBkZWZpbmluZyBfX0dYWF9UWVBFSU5GT19FUVVBTElUWV9JTkxJTkUgdG8KKy8vIDEgb3IgMCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBjb21wYXJpc29uIGlzIGlubGluZSwgYW5kCisvLyBfX0dYWF9NRVJHRURfVFlQRUlORk9fTkFNRVMgdG8gMSBvciAwIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHBvaW50ZXIKKy8vIGNvbXBhcmlzb24gY2FuIGJlIHVzZWQuCisKKyNpZm5kZWYgX19HWFhfTUVSR0VEX1RZUEVJTkZPX05BTUVTCisvLyBCeSBkZWZhdWx0LCB0eXBlaW5mbyBuYW1lcyBhcmUgbm90IG1lcmdlZC4KKyNkZWZpbmUgX19HWFhfTUVSR0VEX1RZUEVJTkZPX05BTUVTIDAKKyNlbmRpZgorCisvLyBCeSBkZWZhdWx0IGZvbGxvdyB0aGUgb2xkIGlubGluZSBydWxlcyB0byBhdm9pZCBBQkkgY2hhbmdlcy4KKyNpZm5kZWYgX19HWFhfVFlQRUlORk9fRVFVQUxJVFlfSU5MSU5FCisgICNpZiAhX19HWFhfV0VBS19fCisgICAgI2RlZmluZSBfX0dYWF9UWVBFSU5GT19FUVVBTElUWV9JTkxJTkUgMAorICAjZWxzZQorICAgICNkZWZpbmUgX19HWFhfVFlQRUlORk9fRVFVQUxJVFlfSU5MSU5FIDEKKyAgI2VuZGlmCisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZAoreworICAvKioKKyAgICogIEBicmllZiAgUGFydCBvZiBSVFRJLgorICAgKgorICAgKiAgVGhlIEBjIHR5cGVfaW5mbyBjbGFzcyBkZXNjcmliZXMgdHlwZSBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgYnkKKyAgICogIGFuIGltcGxlbWVudGF0aW9uLgorICAqLworICBjbGFzcyB0eXBlX2luZm8KKyAgeworICBwdWJsaWM6CisgICAgLyoqIERlc3RydWN0b3IgZmlyc3QuIEJlaW5nIHRoZSBmaXJzdCBub24taW5saW5lIHZpcnR1YWwgZnVuY3Rpb24sIHRoaXMKKyAgICAgKiAgY29udHJvbHMgaW4gd2hpY2ggdHJhbnNsYXRpb24gdW5pdCB0aGUgdnRhYmxlIGlzIGVtaXR0ZWQuIFRoZQorICAgICAqICBjb21waWxlciBtYWtlcyB1c2Ugb2YgdGhhdCBpbmZvcm1hdGlvbiB0byBrbm93IHdoZXJlIHRvIGVtaXQKKyAgICAgKiAgdGhlIHJ1bnRpbWUtbWFuZGF0ZWQgdHlwZV9pbmZvIHN0cnVjdHVyZXMgaW4gdGhlIG5ldy1hYmkuICAqLworICAgIHZpcnR1YWwgfnR5cGVfaW5mbygpOworCisgICAgLyoqIFJldHVybnMgYW4gQGUgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBieXRlIHN0cmluZzsgdGhpcyBpcyBub3QKKyAgICAgKiAgcG9ydGFibGUgYmV0d2VlbiBjb21waWxlcnMhICAqLworICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIF9fbmFtZVswXSA9PSAnKicgPyBfX25hbWUgKyAxIDogX19uYW1lOyB9CisKKyNpZiAhX19HWFhfVFlQRUlORk9fRVFVQUxJVFlfSU5MSU5FCisgICAgLy8gSW4gb2xkIGFiaSwgb3Igd2hlbiB3ZWFrIHN5bWJvbHMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZXJlIGNhbgorICAgIC8vIGJlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBhIHR5cGVfaW5mbyBvYmplY3QgZm9yIG9uZQorICAgIC8vIHR5cGUuIFVuaXF1ZW5lc3MgbXVzdCB1c2UgdGhlIF9uYW1lIHZhbHVlLCBub3Qgb2JqZWN0IGFkZHJlc3MuCisgICAgYm9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQ7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUOworI2Vsc2UKKyAgI2lmICFfX0dYWF9NRVJHRURfVFlQRUlORk9fTkFNRVMKKyAgICAvKiogUmV0dXJucyB0cnVlIGlmIEBjICp0aGlzIHByZWNlZGVzIEBjIF9fYXJnIGluIHRoZSBpbXBsZW1lbnRhdGlvbidzCisgICAgICogIGNvbGxhdGlvbiBvcmRlci4gICovCisgICAgLy8gRXZlbiB3aXRoIHRoZSBuZXcgYWJpLCBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBkbG9wZW4KKyAgICAvLyB3ZSBjYW4gcnVuIGludG8gY2FzZXMgd2hlcmUgdHlwZV9pbmZvIG5hbWVzIGFyZW4ndCBtZXJnZWQsCisgICAgLy8gc28gd2Ugc3RpbGwgbmVlZCB0byBkbyBzdHJpbmcgY29tcGFyaXNvbi4KKyAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsgcmV0dXJuIChfX25hbWVbMF0gPT0gJyonICYmIF9fYXJnLl9fbmFtZVswXSA9PSAnKicpCisJPyBfX25hbWUgPCBfX2FyZy5fX25hbWUKKwk6IF9fYnVpbHRpbl9zdHJjbXAgKF9fbmFtZSwgX19hcmcuX19uYW1lKSA8IDA7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdCBfR0xJQkNYWF9OT0VYQ0VQVAorICAgIHsKKyAgICAgIHJldHVybiAoKF9fbmFtZSA9PSBfX2FyZy5fX25hbWUpCisJICAgICAgfHwgKF9fbmFtZVswXSAhPSAnKicgJiYKKwkJICBfX2J1aWx0aW5fc3RyY21wIChfX25hbWUsIF9fYXJnLl9fbmFtZSkgPT0gMCkpOworICAgIH0KKyAgI2Vsc2UKKyAgICAvLyBPbiBzb21lIHRhcmdldHMgd2UgY2FuIHJlbHkgb24gdHlwZV9pbmZvJ3MgTlRCUyBiZWluZyB1bmlxdWUsCisgICAgLy8gYW5kIHRoZXJlZm9yZSBhZGRyZXNzIGNvbXBhcmlzb25zIGFyZSBzdWZmaWNpZW50LgorICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QgX0dMSUJDWFhfTk9FWENFUFQKKyAgICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CisgICNlbmRpZgorI2VuZGlmCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0IF9HTElCQ1hYX05PRVhDRVBUCisgICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcpOyB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgc2l6ZV90IGhhc2hfY29kZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworIyAgaWYgIV9fR1hYX01FUkdFRF9UWVBFSU5GT19OQU1FUworICAgICAgcmV0dXJuIF9IYXNoX2J5dGVzKG5hbWUoKSwgX19idWlsdGluX3N0cmxlbihuYW1lKCkpLAorCQkJIHN0YXRpY19jYXN0PHNpemVfdD4oMHhjNzBmNjkwN1VMKSk7CisjICBlbHNlCisgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KF9fbmFtZSk7CisjICBlbmRpZgorICAgIH0KKyNlbmRpZiAvLyBDKysxMQorCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBpcyBhIHBvaW50ZXIgdHlwZSBvZiBzb21lIGtpbmQKKyAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVyX3AoKSBjb25zdDsKKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRoaXMgaXMgYSBmdW5jdGlvbiB0eXBlCisgICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OworCisgICAgLy8gVHJ5IGFuZCBjYXRjaCBhIHRocm93biB0eXBlLiBTdG9yZSBhbiBhZGp1c3RlZCBwb2ludGVyIHRvIHRoZQorICAgIC8vIGNhdWdodCB0eXBlIGluIFRIUl9PQkouIElmIFRIUl9UWVBFIGlzIG5vdCBhIHBvaW50ZXIgdHlwZSwgdGhlbgorICAgIC8vIFRIUl9PQkogcG9pbnRzIHRvIHRoZSB0aHJvd24gb2JqZWN0LiBJZiBUSFJfVFlQRSBpcyBhIHBvaW50ZXIKKyAgICAvLyB0eXBlLCB0aGVuIFRIUl9PQkogaXMgdGhlIHBvaW50ZXIgaXRzZWxmLiBPVVRFUiBpbmRpY2F0ZXMgdGhlCisgICAgLy8gbnVtYmVyIG9mIG91dGVyIHBvaW50ZXJzLCBhbmQgd2hldGhlciB0aGV5IHdlcmUgY29uc3QKKyAgICAvLyBxdWFsaWZpZWQuCisgICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLAorCQkJICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OworCisgICAgLy8gSW50ZXJuYWxseSB1c2VkIGR1cmluZyBjYXRjaCBtYXRjaGluZworICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25zdCBfX2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCisJCQkgICAgIHZvaWQgKipfX29ial9wdHIpIGNvbnN0OworCisgIHByb3RlY3RlZDoKKyAgICBjb25zdCBjaGFyICpfX25hbWU7CisKKyAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CisKKyAgcHJpdmF0ZToKKyAgICAvLy8gQXNzaWduaW5nIHR5cGVfaW5mbyBpcyBub3Qgc3VwcG9ydGVkLgorICAgIHR5cGVfaW5mbyYgb3BlcmF0b3I9KGNvbnN0IHR5cGVfaW5mbyYpOworICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiAgVGhyb3duIGR1cmluZyBpbmNvcnJlY3QgdHlwZWNhc3RpbmcuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqCisgICAqICBJZiB5b3UgYXR0ZW1wdCBhbiBpbnZhbGlkIEBjIGR5bmFtaWNfY2FzdCBleHByZXNzaW9uLCBhbiBpbnN0YW5jZSBvZgorICAgKiAgdGhpcyBjbGFzcyAob3Igc29tZXRoaW5nIGRlcml2ZWQgZnJvbSB0aGlzIGNsYXNzKSBpcyB0aHJvd24uICAqLworICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KKyAgeworICBwdWJsaWM6CisgICAgYmFkX2Nhc3QoKSBfR0xJQkNYWF9VU0VfTk9FWENFUFQgeyB9CisKKyAgICAvLyBUaGlzIGRlY2xhcmF0aW9uIGlzIG5vdCB1c2VsZXNzOgorICAgIC8vIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy0zLjAuMi9nY2NfNi5odG1sI1NFQzExOAorICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgX0dMSUJDWFhfVVNFX05PRVhDRVBUOworCisgICAgLy8gU2VlIGNvbW1lbnQgaW4gZWhfZXhjZXB0aW9uLmNjLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKyAgfTsKKworICAvKioKKyAgICogIEBicmllZiBUaHJvd24gd2hlbiBhIE5VTEwgcG9pbnRlciBpbiBhIEBjIHR5cGVpZCBleHByZXNzaW9uIGlzIHVzZWQuCisgICAqICBAaW5ncm91cCBleGNlcHRpb25zCisgICAqLworICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2VwdGlvbgorICB7CisgIHB1YmxpYzoKKyAgICBiYWRfdHlwZWlkICgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVCB7IH0KKworICAgIC8vIFRoaXMgZGVjbGFyYXRpb24gaXMgbm90IHVzZWxlc3M6CisgICAgLy8gaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTMuMC4yL2djY182Lmh0bWwjU0VDMTE4CisgICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIF9HTElCQ1hYX1VTRV9OT0VYQ0VQVDsKKworICAgIC8vIFNlZSBjb21tZW50IGluIGVoX2V4Y2VwdGlvbi5jYy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCBfR0xJQkNYWF9VU0VfTk9FWENFUFQ7CisgIH07Cit9IC8vIG5hbWVzcGFjZSBzdGQKKworfSAvLyBleHRlcm4gIkMrKyIKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Vub3JkZXJlZF9tYXAgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Vub3JkZXJlZF9tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxMDE3MwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdW5vcmRlcmVkX21hcApAQCAtMCwwICsxLDYxIEBACisvLyA8dW5vcmRlcmVkX21hcD4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvdW5vcmRlcmVkX21hcAorICogIFRoaXMgaXMgYSBTdGFuZGFyZCBDKysgTGlicmFyeSBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfR0xJQkNYWF9VTk9SREVSRURfTUFQCisjZGVmaW5lIF9HTElCQ1hYX1VOT1JERVJFRF9NQVAgMQorCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysweF93YXJuaW5nLmg+CisjZWxzZQorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL2FsbG9jX3RyYWl0cy5oPgorI2luY2x1ZGUgPGJpdHMvc3RsX2Z1bmN0aW9uLmg+IC8vIGVxdWFsX3RvLCBfSWRlbnRpdHksIF9TZWxlY3Qxc3QKKyNpbmNsdWRlIDxiaXRzL2Z1bmN0aW9uYWxfaGFzaC5oPgorI2luY2x1ZGUgPGJpdHMvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8Yml0cy91bm9yZGVyZWRfbWFwLmg+CisjaW5jbHVkZSA8Yml0cy9yYW5nZV9hY2Nlc3MuaD4KKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjIGluY2x1ZGUgPGRlYnVnL3Vub3JkZXJlZF9tYXA+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX1BST0ZJTEUKKyMgaW5jbHVkZSA8cHJvZmlsZS91bm9yZGVyZWRfbWFwPgorI2VuZGlmCisKKyNlbmRpZiAvLyBDKysxMQorCisjZW5kaWYgLy8gX0dMSUJDWFhfVU5PUkRFUkVEX01BUApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy91bm9yZGVyZWRfc2V0IGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy91bm9yZGVyZWRfc2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZTkxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3Vub3JkZXJlZF9zZXQKQEAgLTAsMCArMSw2MCBAQAorLy8gPHVub3JkZXJlZF9zZXQ+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBpbmNsdWRlL3Vub3JkZXJlZF9zZXQKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVU5PUkRFUkVEX1NFVAorI2RlZmluZSBfR0xJQkNYWF9VTk9SREVSRURfU0VUIDEKKworI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisjIGluY2x1ZGUgPGJpdHMvYysrMHhfd2FybmluZy5oPgorI2Vsc2UKKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgorI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY190cmFpdHMuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlvbi5oPiAvLyBlcXVhbF90bywgX0lkZW50aXR5LCBfU2VsZWN0MXN0CisjaW5jbHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2guaD4KKyNpbmNsdWRlIDxiaXRzL2hhc2h0YWJsZS5oPgorI2luY2x1ZGUgPGJpdHMvdW5vcmRlcmVkX3NldC5oPgorI2luY2x1ZGUgPGJpdHMvcmFuZ2VfYWNjZXNzLmg+CisKKyNpZmRlZiBfR0xJQkNYWF9ERUJVRworIyBpbmNsdWRlIDxkZWJ1Zy91bm9yZGVyZWRfc2V0PgorI2VuZGlmCisKKyNpZmRlZiBfR0xJQkNYWF9QUk9GSUxFCisjIGluY2x1ZGUgPHByb2ZpbGUvdW5vcmRlcmVkX3NldD4KKyNlbmRpZgorI2VuZGlmIC8vIEMrKzExCisKKyNlbmRpZiAvLyBfR0xJQkNYWF9VTk9SREVSRURfU0VUCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3V0aWxpdHkgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3V0aWxpdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0MmVhNAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdXRpbGl0eQpAQCAtMCwwICsxLDE2MCBAQAorLy8gPHV0aWxpdHk+IC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qKiBAZmlsZSBpbmNsdWRlL3V0aWxpdHkKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisjaWZuZGVmIF9HTElCQ1hYX1VUSUxJVFkKKyNkZWZpbmUgX0dMSUJDWFhfVVRJTElUWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworLyoqCisgKiBAZGVmZ3JvdXAgdXRpbGl0aWVzIFV0aWxpdGllcworICoKKyAqIENvbXBvbmVudHMgZGVlbWVkIGdlbmVyYWxseSB1c2VmdWwuIEluY2x1ZGVzIHBhaXIsIHR1cGxlLAorICogZm9yd2FyZC9tb3ZlIGhlbHBlcnMsIHJhdGlvLCBmdW5jdGlvbiBvYmplY3QsIG1ldGFwcm9ncmFtbWluZyBhbmQKKyAqIHR5cGUgdHJhaXRzLCB0aW1lLCBkYXRlLCBhbmQgbWVtb3J5IGZ1bmN0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9yZWxvcHMuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9wYWlyLmg+CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjaW5jbHVkZSA8Yml0cy9tb3ZlLmg+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICBjbGFzcyB0dXBsZV9zaXplOworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIGNsYXNzIF9UcD4KKyAgICBjbGFzcyB0dXBsZV9lbGVtZW50OworCisgICAvLyBWYXJpb3VzIGZ1bmN0aW9ucyB3aGljaCBnaXZlIHN0ZDo6cGFpciBhIHR1cGxlLWxpa2UgaW50ZXJmYWNlLgorICB0ZW1wbGF0ZTxjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgorICAgIHN0cnVjdCB0dXBsZV9zaXplPHN0ZDo6cGFpcjxfVHAxLCBfVHAyPj4KKyAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgMj4geyB9OworCisgIHRlbXBsYXRlPGNsYXNzIF9UcDEsIGNsYXNzIF9UcDI+CisgICAgc3RydWN0IHR1cGxlX2VsZW1lbnQ8MCwgc3RkOjpwYWlyPF9UcDEsIF9UcDI+PgorICAgIHsgdHlwZWRlZiBfVHAxIHR5cGU7IH07CisgCisgIHRlbXBsYXRlPGNsYXNzIF9UcDEsIGNsYXNzIF9UcDI+CisgICAgc3RydWN0IHR1cGxlX2VsZW1lbnQ8MSwgc3RkOjpwYWlyPF9UcDEsIF9UcDI+PgorICAgIHsgdHlwZWRlZiBfVHAyIHR5cGU7IH07CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludD4KKyAgICBzdHJ1Y3QgX19wYWlyX2dldDsKKworICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IF9fcGFpcl9nZXQ8MD4KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgICAgICBzdGF0aWMgY29uc3RleHByIF9UcDEmCisgICAgICAgIF9fZ2V0KHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiYgX19wYWlyKSBub2V4Y2VwdAorICAgICAgICB7IHJldHVybiBfX3BhaXIuZmlyc3Q7IH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBfVHAxJiYKKyAgICAgICAgX19tb3ZlX2dldChzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mJiBfX3BhaXIpIG5vZXhjZXB0CisgICAgICAgIHsgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxfVHAxPihfX3BhaXIuZmlyc3QpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1RwMSYKKyAgICAgICAgX19jb25zdF9nZXQoY29uc3Qgc3RkOjpwYWlyPF9UcDEsIF9UcDI+JiBfX3BhaXIpIG5vZXhjZXB0CisgICAgICAgIHsgcmV0dXJuIF9fcGFpci5maXJzdDsgfQorICAgIH07CisKKyAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBfX3BhaXJfZ2V0PDE+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4KKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBfVHAyJgorICAgICAgICBfX2dldChzdGQ6OnBhaXI8X1RwMSwgX1RwMj4mIF9fcGFpcikgbm9leGNlcHQKKyAgICAgICAgeyByZXR1cm4gX19wYWlyLnNlY29uZDsgfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPgorICAgICAgICBzdGF0aWMgY29uc3RleHByIF9UcDImJgorICAgICAgICBfX21vdmVfZ2V0KHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiYmIF9fcGFpcikgbm9leGNlcHQKKyAgICAgICAgeyByZXR1cm4gc3RkOjpmb3J3YXJkPF9UcDI+KF9fcGFpci5zZWNvbmQpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1RwMiYKKyAgICAgICAgX19jb25zdF9nZXQoY29uc3Qgc3RkOjpwYWlyPF9UcDEsIF9UcDI+JiBfX3BhaXIpIG5vZXhjZXB0CisgICAgICAgIHsgcmV0dXJuIF9fcGFpci5zZWNvbmQ7IH0KKyAgICB9OworCisgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IF9JbnQsIGNsYXNzIF9UcDEsIGNsYXNzIF9UcDI+CisgICAgY29uc3RleHByIHR5cGVuYW1lIHR1cGxlX2VsZW1lbnQ8X0ludCwgc3RkOjpwYWlyPF9UcDEsIF9UcDI+Pjo6dHlwZSYKKyAgICBnZXQoc3RkOjpwYWlyPF9UcDEsIF9UcDI+JiBfX2luKSBub2V4Y2VwdAorICAgIHsgcmV0dXJuIF9fcGFpcl9nZXQ8X0ludD46Ol9fZ2V0KF9faW4pOyB9CisKKyAgdGVtcGxhdGU8c3RkOjpzaXplX3QgX0ludCwgY2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4KKyAgICBjb25zdGV4cHIgdHlwZW5hbWUgdHVwbGVfZWxlbWVudDxfSW50LCBzdGQ6OnBhaXI8X1RwMSwgX1RwMj4+Ojp0eXBlJiYKKyAgICBnZXQoc3RkOjpwYWlyPF9UcDEsIF9UcDI+JiYgX19pbikgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX3BhaXJfZ2V0PF9JbnQ+OjpfX21vdmVfZ2V0KHN0ZDo6bW92ZShfX2luKSk7IH0KKworICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBfSW50LCBjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgorICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSB0dXBsZV9lbGVtZW50PF9JbnQsIHN0ZDo6cGFpcjxfVHAxLCBfVHAyPj46OnR5cGUmCisgICAgZ2V0KGNvbnN0IHN0ZDo6cGFpcjxfVHAxLCBfVHAyPiYgX19pbikgbm9leGNlcHQKKyAgICB7IHJldHVybiBfX3BhaXJfZ2V0PF9JbnQ+OjpfX2NvbnN0X2dldChfX2luKTsgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgorCisjZW5kaWYgLyogX0dMSUJDWFhfVVRJTElUWSAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy92YWxhcnJheSBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdmFsYXJyYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU5NmFmNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jKysvNC44LjMvdmFsYXJyYXkKQEAgLTAsMCArMSwxMjM1IEBACisvLyBUaGUgdGVtcGxhdGUgYW5kIGlubGluZXMgZm9yIHRoZSAtKi0gQysrIC0qLSB2YWxhcnJheSBjbGFzcy4KKworLy8gQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1ZGUvdmFsYXJyYXkKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLiAKKyAqLworCisvLyBXcml0dGVuIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPEdhYnJpZWwuRG9zLVJlaXNARFBUTWF0aHMuRU5TLUNhY2hhbi5Gcj4KKworI2lmbmRlZiBfR0xJQkNYWF9WQUxBUlJBWQorI2RlZmluZSBfR0xJQkNYWF9WQUxBUlJBWSAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGRlYnVnL2RlYnVnLmg+CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjZW5kaWYKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+IAorICAgIGNsYXNzIF9FeHByOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9UcDI+IAorICAgIGNsYXNzIF9WYWxBcnJheTsgICAgCisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsIHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGEsIGNsYXNzIF9Eb20+CisgICAgc3RydWN0IF9VbkNsb3M7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX09wZXIsCisgICAgICAgIHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGExLAorICAgICAgICB0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhMiwKKyAgICAgICAgY2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiAKKyAgICBjbGFzcyBfQmluQ2xvczsKKworICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiAKKyAgICBjbGFzcyBfU0Nsb3M7CisKKyAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gCisgICAgY2xhc3MgX0dDbG9zOworICAgIAorICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiAKKyAgICBjbGFzcyBfSUNsb3M7CisgICAgCisgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGEsIGNsYXNzIF9Eb20+IAorICAgIGNsYXNzIF9WYWxGdW5DbG9zOworICAKKyAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gCisgICAgY2xhc3MgX1JlZkZ1bkNsb3M7CisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBjbGFzcyB2YWxhcnJheTsgICAvLyBBbiBhcnJheSBvZiB0eXBlIF9UcAorICBjbGFzcyBzbGljZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJMQVMtbGlrZSBzbGljZSBvdXQgb2YgYW4gYXJyYXkKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBjbGFzcyBzbGljZV9hcnJheTsKKyAgY2xhc3MgZ3NsaWNlOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmFsaXplZCBzbGljZSBvdXQgb2YgYW4gYXJyYXkKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBjbGFzcyBnc2xpY2VfYXJyYXk7CisgIHRlbXBsYXRlPGNsYXNzIF9UcD4gY2xhc3MgbWFza19hcnJheTsgICAgIC8vIG1hc2tlZCBhcnJheQorICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNzIGluZGlyZWN0X2FycmF5OyAvLyBpbmRpcmVjdGVkIGFycmF5CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworI2luY2x1ZGUgPGJpdHMvdmFsYXJyYXlfYXJyYXkuaD4KKyNpbmNsdWRlIDxiaXRzL3ZhbGFycmF5X2JlZm9yZS5oPgorICAKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGRlZmdyb3VwIG51bWVyaWNfYXJyYXlzIE51bWVyaWMgQXJyYXlzCisgICAqIEBpbmdyb3VwIG51bWVyaWNzCisgICAqCisgICAqIENsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgcmVwcmVzZW50aW5nIGFuZCBtYW5pcHVsYXRpbmcgYXJyYXlzIG9mIGVsZW1lbnRzLgorICAgKiBAeworICAgKi8KKworICAvKioKKyAgICogIEBicmllZiAgU21hcnQgYXJyYXkgZGVzaWduZWQgdG8gc3VwcG9ydCBudW1lcmljIHByb2Nlc3NpbmcuCisgICAqCisgICAqICBBIHZhbGFycmF5IGlzIGFuIGFycmF5IHRoYXQgcHJvdmlkZXMgY29uc3RyYWludHMgaW50ZW5kZWQgdG8gYWxsb3cgZm9yCisgICAqICBlZmZlY3RpdmUgb3B0aW1pemF0aW9uIG9mIG51bWVyaWMgYXJyYXkgcHJvY2Vzc2luZyBieSByZWR1Y2luZyB0aGUKKyAgICogIGFsaWFzaW5nIHRoYXQgY2FuIHJlc3VsdCBmcm9tIHBvaW50ZXIgcmVwcmVzZW50YXRpb25zLiAgSXQgcmVwcmVzZW50cyBhCisgICAqICBvbmUtZGltZW5zaW9uYWwgYXJyYXkgZnJvbSB3aGljaCBkaWZmZXJlbnQgbXVsdGlkaW1lbnNpb25hbCBzdWJzZXRzIGNhbgorICAgKiAgYmUgYWNjZXNzZWQgYW5kIG1vZGlmaWVkLgorICAgKiAgCisgICAqICBAdHBhcmFtICBfVHAgIFR5cGUgb2Ygb2JqZWN0IGluIHRoZSBhcnJheS4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4gCisgICAgY2xhc3MgdmFsYXJyYXkKKyAgICB7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfT3A+CisJc3RydWN0IF9VbmFyeU9wIAorCXsKKwkgIHR5cGVkZWYgdHlwZW5hbWUgX19mdW48X09wLCBfVHA+OjpyZXN1bHRfdHlwZSBfX3J0OworCSAgdHlwZWRlZiBfRXhwcjxfVW5DbG9zPF9PcCwgX1ZhbEFycmF5LCBfVHA+LCBfX3J0PiBfUnQ7CisJfTsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOworICAgICAgCisJLy8gX2xpYi52YWxhcnJheS5jb25zXyBjb25zdHJ1Y3QvZGVzdHJveToKKyAgICAgIC8vLyAgQ29uc3RydWN0IGFuIGVtcHR5IGFycmF5LgorICAgICAgdmFsYXJyYXkoKTsKKworICAgICAgLy8vICBDb25zdHJ1Y3QgYW4gYXJyYXkgd2l0aCBAYSBuIGVsZW1lbnRzLgorICAgICAgZXhwbGljaXQgdmFsYXJyYXkoc2l6ZV90KTsKKworICAgICAgLy8vICBDb25zdHJ1Y3QgYW4gYXJyYXkgd2l0aCBAYSBuIGVsZW1lbnRzIGluaXRpYWxpemVkIHRvIEBhIHQuCisgICAgICB2YWxhcnJheShjb25zdCBfVHAmLCBzaXplX3QpOworCisgICAgICAvLy8gIENvbnN0cnVjdCBhbiBhcnJheSBpbml0aWFsaXplZCB0byB0aGUgZmlyc3QgQGEgbiBlbGVtZW50cyBvZiBAYSB0LgorICAgICAgdmFsYXJyYXkoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18sIHNpemVfdCk7CisKKyAgICAgIC8vLyAgQ29weSBjb25zdHJ1Y3Rvci4KKyAgICAgIHZhbGFycmF5KGNvbnN0IHZhbGFycmF5Jik7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvLy8gIE1vdmUgY29uc3RydWN0b3IuCisgICAgICB2YWxhcnJheSh2YWxhcnJheSYmKSBub2V4Y2VwdDsKKyNlbmRpZgorCisgICAgICAvLy8gIENvbnN0cnVjdCBhbiBhcnJheSB3aXRoIHRoZSBzYW1lIHNpemUgYW5kIHZhbHVlcyBpbiBAYSBzYS4KKyAgICAgIHZhbGFycmF5KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBDb25zdHJ1Y3QgYW4gYXJyYXkgd2l0aCB0aGUgc2FtZSBzaXplIGFuZCB2YWx1ZXMgaW4gQGEgZ2EuCisgICAgICB2YWxhcnJheShjb25zdCBnc2xpY2VfYXJyYXk8X1RwPiYpOworCisgICAgICAvLy8gIENvbnN0cnVjdCBhbiBhcnJheSB3aXRoIHRoZSBzYW1lIHNpemUgYW5kIHZhbHVlcyBpbiBAYSBtYS4KKyAgICAgIHZhbGFycmF5KGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYpOworCisgICAgICAvLy8gIENvbnN0cnVjdCBhbiBhcnJheSB3aXRoIHRoZSBzYW1lIHNpemUgYW5kIHZhbHVlcyBpbiBAYSBpYS4KKyAgICAgIHZhbGFycmF5KGNvbnN0IGluZGlyZWN0X2FycmF5PF9UcD4mKTsKKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vLyAgQ29uc3RydWN0IGFuIGFycmF5IHdpdGggYW4gaW5pdGlhbGl6ZXJfbGlzdCBvZiB2YWx1ZXMuCisgICAgICB2YWxhcnJheShpbml0aWFsaXplcl9saXN0PF9UcD4pOworI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisJdmFsYXJyYXkoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lKTsKKworICAgICAgfnZhbGFycmF5KCkgX0dMSUJDWFhfTk9FWENFUFQ7CisKKyAgICAgIC8vIF9saWIudmFsYXJyYXkuYXNzaWduXyBhc3NpZ25tZW50OgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ24gZWxlbWVudHMgdG8gYW4gYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEFzc2lnbiBlbGVtZW50cyBvZiBhcnJheSB0byB2YWx1ZXMgaW4gQGEgdi4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3YgIFZhbGFycmF5IHRvIGdldCB2YWx1ZXMgZnJvbS4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdik7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIE1vdmUgYXNzaWduIGVsZW1lbnRzIHRvIGFuIGFycmF5LgorICAgICAgICoKKyAgICAgICAqICBNb3ZlIGFzc2lnbiBlbGVtZW50cyBvZiBhcnJheSB0byB2YWx1ZXMgaW4gQGEgdi4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3YgIFZhbGFycmF5IHRvIGdldCB2YWx1ZXMgZnJvbS4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KHZhbGFycmF5PF9UcD4mJiBfX3YpIG5vZXhjZXB0OworI2VuZGlmCisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWduIGVsZW1lbnRzIHRvIGEgdmFsdWUuCisgICAgICAgKgorICAgICAgICogIEFzc2lnbiBhbGwgZWxlbWVudHMgb2YgYXJyYXkgdG8gQGEgdC4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3QgIFZhbHVlIGZvciBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX190KTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ24gZWxlbWVudHMgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBBc3NpZ24gZWxlbWVudHMgb2YgYXJyYXkgdG8gdmFsdWVzIGluIEBhIHNhLiAgUmVzdWx0cyBhcmUgdW5kZWZpbmVkCisgICAgICAgKiAgaWYgQGEgc2EgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoaXMgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19zYSAgQXJyYXkgc2xpY2UgdG8gZ2V0IHZhbHVlcyBmcm9tLgorICAgICAgICovCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgX19zYSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXNzaWduIGVsZW1lbnRzIHRvIGFuIGFycmF5IHN1YnNldC4KKyAgICAgICAqCisgICAgICAgKiAgQXNzaWduIGVsZW1lbnRzIG9mIGFycmF5IHRvIHZhbHVlcyBpbiBAYSBnYS4gIFJlc3VsdHMgYXJlIHVuZGVmaW5lZAorICAgICAgICogIGlmIEBhIGdhIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGlzIGFycmF5LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fZ2EgIEFycmF5IHNsaWNlIHRvIGdldCB2YWx1ZXMgZnJvbS4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IGdzbGljZV9hcnJheTxfVHA+JiBfX2dhKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ24gZWxlbWVudHMgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBBc3NpZ24gZWxlbWVudHMgb2YgYXJyYXkgdG8gdmFsdWVzIGluIEBhIG1hLiAgUmVzdWx0cyBhcmUgdW5kZWZpbmVkCisgICAgICAgKiAgaWYgQGEgbWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoaXMgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19tYSAgQXJyYXkgc2xpY2UgdG8gZ2V0IHZhbHVlcyBmcm9tLgorICAgICAgICovCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3QgbWFza19hcnJheTxfVHA+JiBfX21hKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBBc3NpZ24gZWxlbWVudHMgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBBc3NpZ24gZWxlbWVudHMgb2YgYXJyYXkgdG8gdmFsdWVzIGluIEBhIGlhLiAgUmVzdWx0cyBhcmUgdW5kZWZpbmVkCisgICAgICAgKiAgaWYgQGEgaWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoaXMgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19pYSAgQXJyYXkgc2xpY2UgdG8gZ2V0IHZhbHVlcyBmcm9tLgorICAgICAgICovCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYgX19pYSk7CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIEFzc2lnbiBlbGVtZW50cyB0byBhbiBpbml0aWFsaXplcl9saXN0LgorICAgICAgICoKKyAgICAgICAqICBBc3NpZ24gZWxlbWVudHMgb2YgYXJyYXkgdG8gdmFsdWVzIGluIEBhIF9fbC4gIFJlc3VsdHMgYXJlIHVuZGVmaW5lZAorICAgICAgICogIGlmIEBhIF9fbCBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHNpemUgYXMgdGhpcyBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX2wgIGluaXRpYWxpemVyX2xpc3QgdG8gZ2V0IHZhbHVlcyBmcm9tLgorICAgICAgICovCisgICAgICB2YWxhcnJheSYgb3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2wpOworI2VuZGlmCisKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IHZhbGFycmF5PF9UcD4mCisJb3BlcmF0b3I9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisKKyAgICAgIC8vIF9saWIudmFsYXJyYXkuYWNjZXNzXyBlbGVtZW50IGFjY2VzczoKKyAgICAgIC8qKgorICAgICAgICogIFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgaSd0aCBhcnJheSBlbGVtZW50LiAgCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19pICBJbmRleCBvZiBlbGVtZW50IHRvIHJldHVybi4KKyAgICAgICAqICBAcmV0dXJuICBSZWZlcmVuY2UgdG8gdGhlIGkndGggZWxlbWVudC4KKyAgICAgICAqLworICAgICAgX1RwJiAgICAgICAgICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX2kpOworCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAzODkuIENvbnN0IG92ZXJsb2FkIG9mIHZhbGFycmF5OjpvcGVyYXRvcltdIHJldHVybnMgYnkgdmFsdWUuCisgICAgICBjb25zdCBfVHAmICAgICAgICAgIG9wZXJhdG9yW10oc2l6ZV90KSBjb25zdDsKKworICAgICAgLy8gX2xpYi52YWxhcnJheS5zdWJfIHN1YnNldCBvcGVyYXRpb25zOgorICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgbmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgc2xpY2UgYXJndW1lbnQuICBUaGUgbmV3IHZhbGFycmF5IGhhcyB0aGUgc2FtZSBzaXplCisgICAgICAgKiAgYXMgdGhlIGlucHV0IHNsaWNlLiAgQHNlZSBzbGljZS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBzb3VyY2Ugc2xpY2UuCisgICAgICAgKiAgQHJldHVybiAgTmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgaW4gQGEgX19zLgorICAgICAgICovCisgICAgICBfRXhwcjxfU0Nsb3M8X1ZhbEFycmF5LCBfVHA+LCBfVHA+IG9wZXJhdG9yW10oc2xpY2UgX19zKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgbmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgc2xpY2UgYXJndW1lbnQuICBUaGUgbmV3IHZhbGFycmF5IGhhcyB0aGUgc2FtZSBzaXplCisgICAgICAgKiAgYXMgdGhlIGlucHV0IHNsaWNlLiAgQHNlZSBzbGljZS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBzb3VyY2Ugc2xpY2UuCisgICAgICAgKiAgQHJldHVybiAgTmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgZWxlbWVudHMgaW4gQGEgX19zLgorICAgICAgICovCisgICAgICBzbGljZV9hcnJheTxfVHA+ICAgIG9wZXJhdG9yW10oc2xpY2UgX19zKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgc2xpY2VfYXJyYXkgcmVmZXJlbmNpbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgc2xpY2UgYXJndW1lbnQuICBAc2VlIGdzbGljZS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBzb3VyY2Ugc2xpY2UuCisgICAgICAgKiAgQHJldHVybiAgU2xpY2VfYXJyYXkgcmVmZXJlbmNpbmcgZWxlbWVudHMgaW5kaWNhdGVkIGJ5IEBhIF9fcy4KKyAgICAgICAqLworICAgICAgX0V4cHI8X0dDbG9zPF9WYWxBcnJheSwgX1RwPiwgX1RwPiBvcGVyYXRvcltdKGNvbnN0IGdzbGljZSYgX19zKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgbmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgZ3NsaWNlIGFyZ3VtZW50LiAgVGhlIG5ldyB2YWxhcnJheSBoYXMKKyAgICAgICAqICB0aGUgc2FtZSBzaXplIGFzIHRoZSBpbnB1dCBnc2xpY2UuICBAc2VlIGdzbGljZS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX3MgIFRoZSBzb3VyY2UgZ3NsaWNlLgorICAgICAgICogIEByZXR1cm4gIE5ldyB2YWxhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIGluIEBhIF9fcy4KKyAgICAgICAqLworICAgICAgZ3NsaWNlX2FycmF5PF9UcD4gICBvcGVyYXRvcltdKGNvbnN0IGdzbGljZSYgX19zKTsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgbmV3IHZhbGFycmF5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUgaW5wdXQgaXMgYSB2YWxhcnJheSBvZiBib29sIHdoaWNoCisgICAgICAgKiAgcmVwcmVzZW50cyBhIGJpdG1hc2sgaW5kaWNhdGluZyB3aGljaCBlbGVtZW50cyBzaG91bGQgYmUgY29waWVkIGludG8KKyAgICAgICAqICB0aGUgbmV3IHZhbGFycmF5LiAgRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyBhZGRlZCB0byB0aGUgcmV0dXJuCisgICAgICAgKiAgdmFsYXJyYXkgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgYXJndW1lbnQgaXMgdHJ1ZS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX20gIFRoZSB2YWxhcnJheSBiaXRtYXNrLgorICAgICAgICogIEByZXR1cm4gIE5ldyB2YWxhcnJheSBjb250YWluaW5nIGVsZW1lbnRzIGluZGljYXRlZCBieSBAYSBfX20uCisgICAgICAgKi8KKyAgICAgIHZhbGFycmF5PF9UcD4gICAgICAgb3BlcmF0b3JbXShjb25zdCB2YWxhcnJheTxib29sPiYgX19tKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXR1cm4gYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgc3Vic2V0LgorICAgICAgICoKKyAgICAgICAqICBSZXR1cm5zIGEgbmV3IG1hc2tfYXJyYXkgcmVmZXJlbmNpbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUgaW5wdXQgaXMgYSB2YWxhcnJheSBvZiBib29sIHdoaWNoCisgICAgICAgKiAgcmVwcmVzZW50cyBhIGJpdG1hc2sgaW5kaWNhdGluZyB3aGljaCBlbGVtZW50cyBhcmUgcGFydCBvZiB0aGUKKyAgICAgICAqICBzdWJzZXQuICBFbGVtZW50cyBvZiB0aGUgYXJyYXkgYXJlIHBhcnQgb2YgdGhlIHN1YnNldCBpZiB0aGUKKyAgICAgICAqICBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIGFyZ3VtZW50IGlzIHRydWUuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19tICBUaGUgdmFsYXJyYXkgYml0bWFzay4KKyAgICAgICAqICBAcmV0dXJuICBOZXcgdmFsYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBpbmRpY2F0ZWQgYnkgQGEgX19tLgorICAgICAgICovCisgICAgICBtYXNrX2FycmF5PF9UcD4gICAgIG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8Ym9vbD4mIF9fbSk7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGFuIGFycmF5IHN1YnNldC4KKyAgICAgICAqCisgICAgICAgKiAgUmV0dXJucyBhIG5ldyB2YWxhcnJheSBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkKKyAgICAgICAqICBpbmRpY2F0ZWQgYnkgdGhlIGFyZ3VtZW50LiAgVGhlIGVsZW1lbnRzIGluIHRoZSBhcmd1bWVudCBhcmUKKyAgICAgICAqICBpbnRlcnByZXRlZCBhcyB0aGUgaW5kaWNlcyBvZiBlbGVtZW50cyBvZiB0aGlzIHZhbGFycmF5IHRvIGNvcHkgdG8KKyAgICAgICAqICB0aGUgcmV0dXJuIHZhbGFycmF5LgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9faSAgVGhlIHZhbGFycmF5IGVsZW1lbnQgaW5kZXggbGlzdC4KKyAgICAgICAqICBAcmV0dXJuICBOZXcgdmFsYXJyYXkgY29udGFpbmluZyBlbGVtZW50cyBpbiBAYSBfX3MuCisgICAgICAgKi8KKyAgICAgIF9FeHByPF9JQ2xvczxfVmFsQXJyYXksIF9UcD4sIF9UcD4KKyAgICAgICAgb3BlcmF0b3JbXShjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBzdWJzZXQuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYW4gaW5kaXJlY3RfYXJyYXkgcmVmZXJlbmNpbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorICAgICAgICogIGluZGljYXRlZCBieSB0aGUgYXJndW1lbnQuICBUaGUgZWxlbWVudHMgaW4gdGhlIGFyZ3VtZW50IGFyZQorICAgICAgICogIGludGVycHJldGVkIGFzIHRoZSBpbmRpY2VzIG9mIGVsZW1lbnRzIG9mIHRoaXMgdmFsYXJyYXkgdG8gaW5jbHVkZQorICAgICAgICogIGluIHRoZSBzdWJzZXQuICBUaGUgcmV0dXJuZWQgaW5kaXJlY3RfYXJyYXkgcmVmZXJzIHRvIHRoZXNlCisgICAgICAgKiAgZWxlbWVudHMuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19pICBUaGUgdmFsYXJyYXkgZWxlbWVudCBpbmRleCBsaXN0LgorICAgICAgICogIEByZXR1cm4gIEluZGlyZWN0X2FycmF5IHJlZmVyZW5jaW5nIGVsZW1lbnRzIGluIEBhIF9faS4KKyAgICAgICAqLworICAgICAgaW5kaXJlY3RfYXJyYXk8X1RwPiBvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSk7CisKKyAgICAgIC8vIF9saWIudmFsYXJyYXkudW5hcnlfIHVuYXJ5IG9wZXJhdG9yczoKKyAgICAgIC8vLyAgUmV0dXJuIGEgbmV3IHZhbGFycmF5IGJ5IGFwcGx5aW5nIHVuYXJ5ICsgdG8gZWFjaCBlbGVtZW50LgorICAgICAgdHlwZW5hbWUgX1VuYXJ5T3A8X191bmFyeV9wbHVzPjo6X1J0ICBvcGVyYXRvcisoKSBjb25zdDsKKworICAgICAgLy8vICBSZXR1cm4gYSBuZXcgdmFsYXJyYXkgYnkgYXBwbHlpbmcgdW5hcnkgLSB0byBlYWNoIGVsZW1lbnQuCisgICAgICB0eXBlbmFtZSBfVW5hcnlPcDxfX25lZ2F0ZT46Ol9SdCAgICAgIG9wZXJhdG9yLSgpIGNvbnN0OworCisgICAgICAvLy8gIFJldHVybiBhIG5ldyB2YWxhcnJheSBieSBhcHBseWluZyB1bmFyeSB+IHRvIGVhY2ggZWxlbWVudC4KKyAgICAgIHR5cGVuYW1lIF9VbmFyeU9wPF9fYml0d2lzZV9ub3Q+OjpfUnQgb3BlcmF0b3J+KCkgY29uc3Q7CisKKyAgICAgIC8vLyAgUmV0dXJuIGEgbmV3IHZhbGFycmF5IGJ5IGFwcGx5aW5nIHVuYXJ5ICEgdG8gZWFjaCBlbGVtZW50LgorICAgICAgdHlwZW5hbWUgX1VuYXJ5T3A8X19sb2dpY2FsX25vdD46Ol9SdCBvcGVyYXRvciEoKSBjb25zdDsKKworICAgICAgLy8gX2xpYi52YWxhcnJheS5jYXNzaWduXyBjb21wdXRlZCBhc3NpZ25tZW50OgorICAgICAgLy8vICBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgYXJyYXkgYnkgQGEgdC4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKj0oY29uc3QgX1RwJik7CisKKyAgICAgIC8vLyAgRGl2aWRlIGVhY2ggZWxlbWVudCBvZiBhcnJheSBieSBAYSB0LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPShjb25zdCBfVHAmKTsKKworICAgICAgLy8vICBTZXQgZWFjaCBlbGVtZW50IGUgb2YgYXJyYXkgdG8gZSAlIEBhIHQuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvciU9KGNvbnN0IF9UcCYpOworCisgICAgICAvLy8gIEFkZCBAYSB0IHRvIGVhY2ggZWxlbWVudCBvZiBhcnJheS4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKz0oY29uc3QgX1RwJik7CisKKyAgICAgIC8vLyAgU3VidHJhY3QgQGEgdCB0byBlYWNoIGVsZW1lbnQgb2YgYXJyYXkuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvci09KGNvbnN0IF9UcCYpOworCisgICAgICAvLy8gIFNldCBlYWNoIGVsZW1lbnQgZSBvZiBhcnJheSB0byBlIF4gQGEgdC4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yXj0oY29uc3QgX1RwJik7CisKKyAgICAgIC8vLyAgU2V0IGVhY2ggZWxlbWVudCBlIG9mIGFycmF5IHRvIGUgJiBAYSB0LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ImPShjb25zdCBfVHAmKTsKKworICAgICAgLy8vICBTZXQgZWFjaCBlbGVtZW50IGUgb2YgYXJyYXkgdG8gZSB8IEBhIHQuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcnw9KGNvbnN0IF9UcCYpOworCisgICAgICAvLy8gIExlZnQgc2hpZnQgZWFjaCBlbGVtZW50IGUgb2YgYXJyYXkgYnkgQGEgdCBiaXRzLgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I8PD0oY29uc3QgX1RwJik7CisKKyAgICAgIC8vLyAgUmlnaHQgc2hpZnQgZWFjaCBlbGVtZW50IGUgb2YgYXJyYXkgYnkgQGEgdCBiaXRzLgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I+Pj0oY29uc3QgX1RwJik7CisKKyAgICAgIC8vLyAgTXVsdGlwbHkgZWxlbWVudHMgb2YgYXJyYXkgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IqPShjb25zdCB2YWxhcnJheTxfVHA+Jik7CisKKyAgICAgIC8vLyAgRGl2aWRlIGVsZW1lbnRzIG9mIGFycmF5IGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgdmFsYXJyYXk8X1RwPiYpOworCisgICAgICAvLy8gIE1vZHVsbyBlbGVtZW50cyBvZiBhcnJheSBieSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvciU9KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBBZGQgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IHRvIGVsZW1lbnRzIG9mIGFycmF5LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IrPShjb25zdCB2YWxhcnJheTxfVHA+Jik7CisKKyAgICAgIC8vLyAgU3VidHJhY3QgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IGZyb20gZWxlbWVudHMgb2YgYXJyYXkuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvci09KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBMb2dpY2FsIHhvciBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgd2l0aCBlbGVtZW50cyBvZiBhcnJheS4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yXj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpOworCisgICAgICAvLy8gIExvZ2ljYWwgb3IgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2IHdpdGggZWxlbWVudHMgb2YgYXJyYXkuCisgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcnw9KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKworICAgICAgLy8vICBMb2dpY2FsIGFuZCBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG9mIEBhIHYgd2l0aCBlbGVtZW50cyBvZiBhcnJheS4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yJj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpOworCisgICAgICAvLy8gIExlZnQgc2hpZnQgZWxlbWVudHMgb2YgYXJyYXkgYnkgY29ycmVzcG9uZGluZyBlbGVtZW50cyBvZiBAYSB2LgorICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I8PD0oY29uc3QgdmFsYXJyYXk8X1RwPiYpOworCisgICAgICAvLy8gIFJpZ2h0IHNoaWZ0IGVsZW1lbnRzIG9mIGFycmF5IGJ5IGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgQGEgdi4KKyAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yPj49KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKKworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2YWxhcnJheTxfVHA+JiBvcGVyYXRvcio9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKTsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisJdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZhbGFycmF5PF9UcD4mIG9wZXJhdG9yJT0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpOworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2YWxhcnJheTxfVHA+JiBvcGVyYXRvcis9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKTsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisJdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ItPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZhbGFycmF5PF9UcD4mIG9wZXJhdG9yXj0oY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpOworICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KKwl2YWxhcnJheTxfVHA+JiBvcGVyYXRvcnw9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKTsKKyAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CisJdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ImPShjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcjw8PShjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jik7CisgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorCXZhbGFycmF5PF9UcD4mIG9wZXJhdG9yPj49KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKTsKKworICAgICAgLy8gX2xpYi52YWxhcnJheS5tZW1iZXJzXyBtZW1iZXIgZnVuY3Rpb25zOgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgICAgIC8vLyAgU3dhcC4KKyAgICAgIHZvaWQgc3dhcCh2YWxhcnJheTxfVHA+JiBfX3YpIG5vZXhjZXB0OworI2VuZGlmCisKKyAgICAgIC8vLyAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYXJyYXkuCisgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiB0aGUgc3VtIG9mIGFsbCBlbGVtZW50cyBpbiB0aGUgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEFjY3VtdWxhdGVzIHRoZSBzdW0gb2YgYWxsIGVsZW1lbnRzIGludG8gYSBUcCB1c2luZyArPS4gIFRoZSBvcmRlcgorICAgICAgICogIG9mIGFkZGluZyB0aGUgZWxlbWVudHMgaXMgdW5zcGVjaWZpZWQuCisgICAgICAgKi8KKyAgICAgIF9UcCAgICBzdW0oKSBjb25zdDsKKworICAgICAgLy8vICBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCB1c2luZyBvcGVyYXRvcjwoKS4KKyAgICAgIF9UcCAgICBtaW4oKSBjb25zdDsJCisKKyAgICAgIC8vLyAgUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgdXNpbmcgb3BlcmF0b3I8KCkuCisgICAgICBfVHAgICAgbWF4KCkgY29uc3Q7CQorCisgICAgICAvKioKKyAgICAgICAqICBAYnJpZWYgIFJldHVybiBhIHNoaWZ0ZWQgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIEEgbmV3IHZhbGFycmF5IGlzIGNvbnN0cnVjdGVkIGFzIGEgY29weSBvZiB0aGlzIGFycmF5IHdpdGggZWxlbWVudHMKKyAgICAgICAqICBpbiBzaGlmdGVkIHBvc2l0aW9ucy4gIEZvciBhbiBlbGVtZW50IHdpdGggaW5kZXggaSwgdGhlIG5ldyBwb3NpdGlvbgorICAgICAgICogIGlzIGkgLSBuLiAgVGhlIG5ldyB2YWxhcnJheSBoYXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgY3VycmVudCBvbmUuCisgICAgICAgKiAgTmV3IGVsZW1lbnRzIHdpdGhvdXQgYSB2YWx1ZSBhcmUgc2V0IHRvIDAuICBFbGVtZW50cyB3aG9zZSBuZXcKKyAgICAgICAqICBwb3NpdGlvbiBpcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5IGFyZSBkaXNjYXJkZWQuCisgICAgICAgKgorICAgICAgICogIFBvc2l0aXZlIGFyZ3VtZW50cyBzaGlmdCB0b3dhcmQgaW5kZXggMCwgZGlzY2FyZGluZyBlbGVtZW50cyBbMCwgbikuCisgICAgICAgKiAgTmVnYXRpdmUgYXJndW1lbnRzIGRpc2NhcmQgZWxlbWVudHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQHBhcmFtICBfX24gIE51bWJlciBvZiBlbGVtZW50IHBvc2l0aW9ucyB0byBzaGlmdC4KKyAgICAgICAqICBAcmV0dXJuICBOZXcgdmFsYXJyYXkgd2l0aCBlbGVtZW50cyBpbiBzaGlmdGVkIHBvc2l0aW9ucy4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiBzaGlmdCAoaW50IF9fbikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgUmV0dXJuIGEgcm90YXRlZCBhcnJheS4KKyAgICAgICAqCisgICAgICAgKiAgQSBuZXcgdmFsYXJyYXkgaXMgY29uc3RydWN0ZWQgYXMgYSBjb3B5IG9mIHRoaXMgYXJyYXkgd2l0aCBlbGVtZW50cworICAgICAgICogIGluIHNoaWZ0ZWQgcG9zaXRpb25zLiAgRm9yIGFuIGVsZW1lbnQgd2l0aCBpbmRleCBpLCB0aGUgbmV3IHBvc2l0aW9uCisgICAgICAgKiAgaXMgKGkgLSBuKSAlIHNpemUoKS4gIFRoZSBuZXcgdmFsYXJyYXkgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhlCisgICAgICAgKiAgY3VycmVudCBvbmUuICBFbGVtZW50cyB0aGF0IGFyZSBzaGlmdGVkIGJleW9uZCB0aGUgYXJyYXkgYm91bmRzIGFyZQorICAgICAgICogIHNoaWZ0ZWQgaW50byB0aGUgb3RoZXIgZW5kIG9mIHRoZSBhcnJheS4gIE5vIGVsZW1lbnRzIGFyZSBsb3N0LgorICAgICAgICoKKyAgICAgICAqICBQb3NpdGl2ZSBhcmd1bWVudHMgc2hpZnQgdG93YXJkIGluZGV4IDAsIHdyYXBwaW5nIGFyb3VuZCB0aGUgdG9wLgorICAgICAgICogIE5lZ2F0aXZlIGFyZ3VtZW50cyBzaGlmdCB0b3dhcmRzIHRoZSB0b3AsIHdyYXBwaW5nIGFyb3VuZCB0byAwLgorICAgICAgICoKKyAgICAgICAqICBAcGFyYW0gIF9fbiAgTnVtYmVyIG9mIGVsZW1lbnQgcG9zaXRpb25zIHRvIHJvdGF0ZS4KKyAgICAgICAqICBAcmV0dXJuICBOZXcgdmFsYXJyYXkgd2l0aCBlbGVtZW50cyBpbiBzaGlmdGVkIHBvc2l0aW9ucy4KKyAgICAgICAqLworICAgICAgdmFsYXJyYXk8X1RwPiBjc2hpZnQoaW50IF9fbikgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwbHkgYSBmdW5jdGlvbiB0byB0aGUgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBuZXcgdmFsYXJyYXkgd2l0aCBlbGVtZW50cyBhc3NpZ25lZCB0byB0aGUgcmVzdWx0IG9mCisgICAgICAgKiAgYXBwbHlpbmcgZnVuYyB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoaXMgYXJyYXkuICBUaGUgbmV3CisgICAgICAgKiAgYXJyYXkgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhpcyBvbmUuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgZnVuYyAgRnVuY3Rpb24gb2YgVHAgcmV0dXJuaW5nIFRwIHRvIGFwcGx5LgorICAgICAgICogIEByZXR1cm4gIE5ldyB2YWxhcnJheSB3aXRoIHRyYW5zZm9ybWVkIGVsZW1lbnRzLgorICAgICAgICovCisgICAgICBfRXhwcjxfVmFsRnVuQ2xvczxfVmFsQXJyYXksIF9UcD4sIF9UcD4gYXBwbHkoX1RwIGZ1bmMoX1RwKSkgY29uc3Q7CisKKyAgICAgIC8qKgorICAgICAgICogIEBicmllZiAgQXBwbHkgYSBmdW5jdGlvbiB0byB0aGUgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFJldHVybnMgYSBuZXcgdmFsYXJyYXkgd2l0aCBlbGVtZW50cyBhc3NpZ25lZCB0byB0aGUgcmVzdWx0IG9mCisgICAgICAgKiAgYXBwbHlpbmcgZnVuYyB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoaXMgYXJyYXkuICBUaGUgbmV3CisgICAgICAgKiAgYXJyYXkgaGFzIHRoZSBzYW1lIHNpemUgYXMgdGhpcyBvbmUuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgZnVuYyAgRnVuY3Rpb24gb2YgY29uc3QgVHAmIHJldHVybmluZyBUcCB0byBhcHBseS4KKyAgICAgICAqICBAcmV0dXJuICBOZXcgdmFsYXJyYXkgd2l0aCB0cmFuc2Zvcm1lZCBlbGVtZW50cy4KKyAgICAgICAqLworICAgICAgX0V4cHI8X1JlZkZ1bkNsb3M8X1ZhbEFycmF5LCBfVHA+LCBfVHA+IGFwcGx5KF9UcCBmdW5jKGNvbnN0IF9UcCYpKSBjb25zdDsKKworICAgICAgLyoqCisgICAgICAgKiAgQGJyaWVmICBSZXNpemUgYXJyYXkuCisgICAgICAgKgorICAgICAgICogIFJlc2l6ZSB0aGlzIGFycmF5IHRvIEBhIHNpemUgYW5kIHNldCBhbGwgZWxlbWVudHMgdG8gQGEgYy4gIEFsbAorICAgICAgICogIHJlZmVyZW5jZXMgYW5kIGl0ZXJhdG9ycyBhcmUgaW52YWxpZGF0ZWQuCisgICAgICAgKgorICAgICAgICogIEBwYXJhbSAgX19zaXplICBOZXcgYXJyYXkgc2l6ZS4KKyAgICAgICAqICBAcGFyYW0gIF9fYyAgTmV3IHZhbHVlIGZvciBhbGwgZWxlbWVudHMuCisgICAgICAgKi8KKyAgICAgIHZvaWQgcmVzaXplKHNpemVfdCBfX3NpemUsIF9UcCBfX2MgPSBfVHAoKSk7CisKKyAgICBwcml2YXRlOgorICAgICAgc2l6ZV90IF9NX3NpemU7CisgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfTV9kYXRhOworICAgICAgCisgICAgICBmcmllbmQgY2xhc3MgX0FycmF5PF9UcD47CisgICAgfTsKKyAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgY29uc3QgX1RwJgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oc2l6ZV90IF9faSkgY29uc3QKKyAgICB7IAorICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3N1YnNjcmlwdChfX2kpOworICAgICAgcmV0dXJuIF9NX2RhdGFbX19pXTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAmCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXShzaXplX3QgX19pKQorICAgIHsgCisgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc3Vic2NyaXB0KF9faSk7CisgICAgICByZXR1cm4gX01fZGF0YVtfX2ldOworICAgIH0KKworICAvLyBAfSBncm91cCBudW1lcmljX2FycmF5cworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNpbmNsdWRlIDxiaXRzL3ZhbGFycmF5X2FmdGVyLmg+CisjaW5jbHVkZSA8Yml0cy9zbGljZV9hcnJheS5oPgorI2luY2x1ZGUgPGJpdHMvZ3NsaWNlLmg+CisjaW5jbHVkZSA8Yml0cy9nc2xpY2VfYXJyYXkuaD4KKyNpbmNsdWRlIDxiaXRzL21hc2tfYXJyYXkuaD4KKyNpbmNsdWRlIDxiaXRzL2luZGlyZWN0X2FycmF5Lmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvKioKKyAgICogQGFkZHRvZ3JvdXAgbnVtZXJpY19hcnJheXMKKyAgICogQHsKKyAgICovCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KCkgOiBfTV9zaXplKDApLCBfTV9kYXRhKDApIHt9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSAKKyAgICB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheShzaXplX3QgX19uKSAKKyAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUKKyAgICB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheShjb25zdCBfVHAmIF9fdCwgc2l6ZV90IF9fbikKKyAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9maWxsX2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uLCBfX3QpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fcCwgc2l6ZV90IF9fbikKKyAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKSkKKyAgICB7IAorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9fcCAhPSAwIHx8IF9fbiA9PSAwKTsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX3AsIF9fcCArIF9fbiwgX01fZGF0YSk7IAorICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lCisgICAgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQorICAgIDogX01fc2l6ZShfX3YuX01fc2l6ZSksIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fdi5fTV9zaXplKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX3YuX01fZGF0YSwgX192Ll9NX2RhdGEgKyBfTV9zaXplLAorCQkJCSAgICAgX01fZGF0YSk7IH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KHZhbGFycmF5PF9UcD4mJiBfX3YpIG5vZXhjZXB0CisgICAgOiBfTV9zaXplKF9fdi5fTV9zaXplKSwgX01fZGF0YShfX3YuX01fZGF0YSkKKyAgICB7CisgICAgICBfX3YuX01fc2l6ZSA9IDA7CisgICAgICBfX3YuX01fZGF0YSA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mIF9fc2EpCisgICAgOiBfTV9zaXplKF9fc2EuX01fc3opLCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX3NhLl9NX3N6KSkKKyAgICB7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QKKwkoX19zYS5fTV9hcnJheSwgX19zYS5fTV9zeiwgX19zYS5fTV9zdHJpZGUsIF9BcnJheTxfVHA+KF9NX2RhdGEpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGNvbnN0IGdzbGljZV9hcnJheTxfVHA+JiBfX2dhKQorICAgIDogX01fc2l6ZShfX2dhLl9NX2luZGV4LnNpemUoKSksCisgICAgICBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKSkKKyAgICB7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QKKwkoX19nYS5fTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX19nYS5fTV9pbmRleCksCisJIF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYgX19tYSkKKyAgICA6IF9NX3NpemUoX19tYS5fTV9zeiksIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fbWEuX01fc3opKQorICAgIHsKKyAgICAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdAorCShfX21hLl9NX2FycmF5LCBfX21hLl9NX21hc2ssIF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGNvbnN0IGluZGlyZWN0X2FycmF5PF9UcD4mIF9faWEpCisgICAgOiBfTV9zaXplKF9faWEuX01fc3opLCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX2lhLl9NX3N6KSkKKyAgICB7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QKKwkoX19pYS5fTV9hcnJheSwgX19pYS5fTV9pbmRleCwgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2wpCisgICAgOiBfTV9zaXplKF9fbC5zaXplKCkpLCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX2wuc2l6ZSgpKSkKKyAgICB7IHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBfTV9kYXRhKTsgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46OnZhbGFycmF5KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkKKyAgICA6IF9NX3NpemUoX19lLnNpemUoKSksIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9NX3NpemUpKQorICAgIHsgc3RkOjpfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KF9fZSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZQorICAgIHZhbGFycmF5PF9UcD46On52YWxhcnJheSgpIF9HTElCQ1hYX05PRVhDRVBUCisgICAgeworICAgICAgc3RkOjpfX3ZhbGFycmF5X2Rlc3Ryb3lfZWxlbWVudHMoX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOworICAgICAgc3RkOjpfX3ZhbGFycmF5X3JlbGVhc2VfbWVtb3J5KF9NX2RhdGEpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4mCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA2MzAuIGFycmF5cyBvZiB2YWxhcnJheS4KKyAgICAgIGlmIChfTV9zaXplID09IF9fdi5fTV9zaXplKQorCXN0ZDo6X192YWxhcnJheV9jb3B5KF9fdi5fTV9kYXRhLCBfTV9zaXplLCBfTV9kYXRhKTsKKyAgICAgIGVsc2UKKwl7CisJICBpZiAoX01fZGF0YSkKKwkgICAgeworCSAgICAgIHN0ZDo6X192YWxhcnJheV9kZXN0cm95X2VsZW1lbnRzKF9NX2RhdGEsIF9NX2RhdGEgKyBfTV9zaXplKTsKKwkgICAgICBzdGQ6Ol9fdmFsYXJyYXlfcmVsZWFzZV9tZW1vcnkoX01fZGF0YSk7CisJICAgIH0KKwkgIF9NX3NpemUgPSBfX3YuX01fc2l6ZTsKKwkgIF9NX2RhdGEgPSBfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX01fc2l6ZSk7CisJICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX192Ll9NX2RhdGEsIF9fdi5fTV9kYXRhICsgX01fc2l6ZSwKKwkJCQkJIF9NX2RhdGEpOworCX0KKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYKKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0odmFsYXJyYXk8X1RwPiYmIF9fdikgbm9leGNlcHQKKyAgICB7CisgICAgICBpZiAoX01fZGF0YSkKKwl7CisJICBzdGQ6Ol9fdmFsYXJyYXlfZGVzdHJveV9lbGVtZW50cyhfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7CisJICBzdGQ6Ol9fdmFsYXJyYXlfcmVsZWFzZV9tZW1vcnkoX01fZGF0YSk7CisJfQorICAgICAgX01fc2l6ZSA9IF9fdi5fTV9zaXplOworICAgICAgX01fZGF0YSA9IF9fdi5fTV9kYXRhOworICAgICAgX192Ll9NX3NpemUgPSAwOworICAgICAgX192Ll9NX2RhdGEgPSAwOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4mCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGluaXRpYWxpemVyX2xpc3Q8X1RwPiBfX2wpCisgICAgeworICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gNjMwLiBhcnJheXMgb2YgdmFsYXJyYXkuCisgICAgICBpZiAoX01fc2l6ZSA9PSBfX2wuc2l6ZSgpKQorCXN0ZDo6X192YWxhcnJheV9jb3B5KF9fbC5iZWdpbigpLCBfX2wuc2l6ZSgpLCBfTV9kYXRhKTsKKyAgICAgIGVsc2UKKwl7CisJICBpZiAoX01fZGF0YSkKKwkgICAgeworCSAgICAgIHN0ZDo6X192YWxhcnJheV9kZXN0cm95X2VsZW1lbnRzKF9NX2RhdGEsIF9NX2RhdGEgKyBfTV9zaXplKTsKKwkgICAgICBzdGQ6Ol9fdmFsYXJyYXlfcmVsZWFzZV9tZW1vcnkoX01fZGF0YSk7CisJICAgIH0KKwkgIF9NX3NpemUgPSBfX2wuc2l6ZSgpOworCSAgX01fZGF0YSA9IF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKTsKKwkgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfX2wuYmVnaW4oKSwgX19sLmJlZ2luKCkgKyBfTV9zaXplLAorCQkJCQkgX01fZGF0YSk7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNlbmRpZgorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYKKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3QpCisgICAgeworICAgICAgc3RkOjpfX3ZhbGFycmF5X2ZpbGwoX01fZGF0YSwgX01fc2l6ZSwgX190KTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSB2YWxhcnJheTxfVHA+JgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPShjb25zdCBzbGljZV9hcnJheTxfVHA+JiBfX3NhKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9zaXplID09IF9fc2EuX01fc3opOworICAgICAgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19zYS5fTV9hcnJheSwgX19zYS5fTV9zeiwKKwkJCSAgIF9fc2EuX01fc3RyaWRlLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYKKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgZ3NsaWNlX2FycmF5PF9UcD4mIF9fZ2EpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3NpemUgPT0gX19nYS5fTV9pbmRleC5zaXplKCkpOworICAgICAgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19nYS5fTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX19nYS5fTV9pbmRleCksCisJCQkgICBfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYKKyAgICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0oY29uc3QgbWFza19hcnJheTxfVHA+JiBfX21hKQorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9zaXplID09IF9fbWEuX01fc3opOworICAgICAgc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19tYS5fTV9hcnJheSwgX19tYS5fTV9tYXNrLAorCQkJICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4mCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGluZGlyZWN0X2FycmF5PF9UcD4mIF9faWEpCisgICAgeworICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3NpemUgPT0gX19pYS5fTV9zeik7CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfY29weShfX2lhLl9NX2FycmF5LCBfX2lhLl9NX2luZGV4LAorCQkJICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOworICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+CisgICAgaW5saW5lIHZhbGFycmF5PF9UcD4mCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkKKyAgICB7CisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyA2MzAuIGFycmF5cyBvZiB2YWxhcnJheS4KKyAgICAgIGlmIChfTV9zaXplID09IF9fZS5zaXplKCkpCisJc3RkOjpfX3ZhbGFycmF5X2NvcHkoX19lLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7CisgICAgICBlbHNlCisJeworCSAgaWYgKF9NX2RhdGEpCisJICAgIHsKKwkgICAgICBzdGQ6Ol9fdmFsYXJyYXlfZGVzdHJveV9lbGVtZW50cyhfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7CisJICAgICAgc3RkOjpfX3ZhbGFycmF5X3JlbGVhc2VfbWVtb3J5KF9NX2RhdGEpOworCSAgICB9CisJICBfTV9zaXplID0gX19lLnNpemUoKTsKKwkgIF9NX2RhdGEgPSBfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX01fc2l6ZSk7CisJICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX19lLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7CisJfQorICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9FeHByPF9TQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oc2xpY2UgX19zKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgX1NDbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOworICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+KF9DbG9zdXJlIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19zKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgc2xpY2VfYXJyYXk8X1RwPgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oc2xpY2UgX19zKQorICAgIHsgcmV0dXJuIHNsaWNlX2FycmF5PF9UcD4oX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcyk7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9FeHByPF9HQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oY29uc3QgZ3NsaWNlJiBfX2dzKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgX0dDbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOworICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+CisJKF9DbG9zdXJlKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2dzLl9NX2luZGV4LT5fTV9pbmRleCkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIGdzbGljZV9hcnJheTxfVHA+CisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXShjb25zdCBnc2xpY2UmIF9fZ3MpCisgICAgeworICAgICAgcmV0dXJuIGdzbGljZV9hcnJheTxfVHA+CisJKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2dzLl9NX2luZGV4LT5fTV9pbmRleCk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8Ym9vbD4mIF9fbSkgY29uc3QKKyAgICB7CisgICAgICBzaXplX3QgX19zID0gMDsKKyAgICAgIHNpemVfdCBfX2UgPSBfX20uc2l6ZSgpOworICAgICAgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX2U7ICsrX19pKQorCWlmIChfX21bX19pXSkgKytfX3M7CisgICAgICByZXR1cm4gdmFsYXJyYXk8X1RwPihtYXNrX2FycmF5PF9UcD4oX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcywKKwkJCQkJICAgX0FycmF5PGJvb2w+IChfX20pKSk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgbWFza19hcnJheTxfVHA+CisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXShjb25zdCB2YWxhcnJheTxib29sPiYgX19tKQorICAgIHsKKyAgICAgIHNpemVfdCBfX3MgPSAwOworICAgICAgc2l6ZV90IF9fZSA9IF9fbS5zaXplKCk7CisgICAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fZTsgKytfX2kpCisJaWYgKF9fbVtfX2ldKSArK19fczsKKyAgICAgIHJldHVybiBtYXNrX2FycmF5PF9UcD4oX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcywgX0FycmF5PGJvb2w+KF9fbSkpOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgaW5saW5lIF9FeHByPF9JQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPgorICAgIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgX0lDbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOworICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+KF9DbG9zdXJlKCp0aGlzLCBfX2kpKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBpbmRpcmVjdF9hcnJheTxfVHA+CisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXShjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpCisgICAgeworICAgICAgcmV0dXJuIGluZGlyZWN0X2FycmF5PF9UcD4oX0FycmF5PF9UcD4oX01fZGF0YSksIF9faS5zaXplKCksCisJCQkJIF9BcnJheTxzaXplX3Q+KF9faSkpOworICAgIH0KKworI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgIGlubGluZSB2b2lkCisgICAgdmFsYXJyYXk8X1RwPjo6c3dhcCh2YWxhcnJheTxfVHA+JiBfX3YpIG5vZXhjZXB0CisgICAgeworICAgICAgc3RkOjpzd2FwKF9NX3NpemUsIF9fdi5fTV9zaXplKTsKKyAgICAgIHN0ZDo6c3dhcChfTV9kYXRhLCBfX3YuX01fZGF0YSk7CisgICAgfQorI2VuZGlmCisKKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgIGlubGluZSBzaXplX3QgCisgICAgdmFsYXJyYXk8X1RwPjo6c2l6ZSgpIGNvbnN0CisgICAgeyByZXR1cm4gX01fc2l6ZTsgfQorCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgdmFsYXJyYXk8X1RwPjo6c3VtKCkgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fc2l6ZSA+IDApOworICAgICAgcmV0dXJuIHN0ZDo6X192YWxhcnJheV9zdW0oX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgIGlubGluZSB2YWxhcnJheTxfVHA+CisgICAgIHZhbGFycmF5PF9UcD46OnNoaWZ0KGludCBfX24pIGNvbnN0CisgICAgIHsKKyAgICAgICB2YWxhcnJheTxfVHA+IF9fcmV0OworCisgICAgICAgaWYgKF9NX3NpemUgPT0gMCkKKwkgcmV0dXJuIF9fcmV0OworCisgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX190bXBfTV9kYXRhID0KKwkgc3RkOjpfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX01fc2l6ZSk7CisKKyAgICAgICBpZiAoX19uID09IDApCisJIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhLAorCQkJCQlfTV9kYXRhICsgX01fc2l6ZSwgX190bXBfTV9kYXRhKTsKKyAgICAgICBlbHNlIGlmIChfX24gPiAwKSAgICAgIC8vIHNoaWZ0IGxlZnQKKwkgeworCSAgIGlmIChzaXplX3QoX19uKSA+IF9NX3NpemUpCisJICAgICBfX24gPSBpbnQoX01fc2l6ZSk7CisKKwkgICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01fZGF0YSArIF9fbiwKKwkJCQkJICBfTV9kYXRhICsgX01fc2l6ZSwgX190bXBfTV9kYXRhKTsKKwkgICBzdGQ6Ol9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX190bXBfTV9kYXRhICsgX01fc2l6ZSAtIF9fbiwKKwkJCQkJICAgICBfX3RtcF9NX2RhdGEgKyBfTV9zaXplKTsKKwkgfQorICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgLy8gc2hpZnQgcmlnaHQKKwkgeworCSAgIGlmICgtc2l6ZV90KF9fbikgPiBfTV9zaXplKQorCSAgICAgX19uID0gLWludChfTV9zaXplKTsKKworCSAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSArIF9fbiwKKwkJCQkJICBfX3RtcF9NX2RhdGEgLSBfX24pOworCSAgIHN0ZDo6X192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfX3RtcF9NX2RhdGEsCisJCQkJCSAgICAgX190bXBfTV9kYXRhIC0gX19uKTsKKwkgfQorCisgICAgICAgX19yZXQuX01fc2l6ZSA9IF9NX3NpemU7CisgICAgICAgX19yZXQuX01fZGF0YSA9IF9fdG1wX01fZGF0YTsKKyAgICAgICByZXR1cm4gX19yZXQ7CisgICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgIGlubGluZSB2YWxhcnJheTxfVHA+CisgICAgIHZhbGFycmF5PF9UcD46OmNzaGlmdChpbnQgX19uKSBjb25zdAorICAgICB7CisgICAgICAgdmFsYXJyYXk8X1RwPiBfX3JldDsKKworICAgICAgIGlmIChfTV9zaXplID09IDApCisJIHJldHVybiBfX3JldDsKKworICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fdG1wX01fZGF0YSA9CisJIHN0ZDo6X192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9NX3NpemUpOworCisgICAgICAgaWYgKF9fbiA9PSAwKQorCSBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01fZGF0YSwKKwkJCQkJX01fZGF0YSArIF9NX3NpemUsIF9fdG1wX01fZGF0YSk7CisgICAgICAgZWxzZSBpZiAoX19uID4gMCkgICAgICAvLyBjc2hpZnQgbGVmdAorCSB7CisJICAgaWYgKHNpemVfdChfX24pID4gX01fc2l6ZSkKKwkgICAgIF9fbiA9IGludChfX24gJSBfTV9zaXplKTsKKworCSAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uLAorCQkJCQkgIF9fdG1wX01fZGF0YSArIF9NX3NpemUgLSBfX24pOworCSAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhICsgX19uLCBfTV9kYXRhICsgX01fc2l6ZSwKKwkJCQkJICBfX3RtcF9NX2RhdGEpOworCSB9CisgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAvLyBjc2hpZnQgcmlnaHQKKwkgeworCSAgIGlmICgtc2l6ZV90KF9fbikgPiBfTV9zaXplKQorCSAgICAgX19uID0gLWludCgtc2l6ZV90KF9fbikgJSBfTV9zaXplKTsKKworCSAgIHN0ZDo6X192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhICsgX01fc2l6ZSArIF9fbiwKKwkJCQkJICBfTV9kYXRhICsgX01fc2l6ZSwgX190bXBfTV9kYXRhKTsKKwkgICBzdGQ6Ol9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUgKyBfX24sCisJCQkJCSAgX190bXBfTV9kYXRhIC0gX19uKTsKKwkgfQorCisgICAgICAgX19yZXQuX01fc2l6ZSA9IF9NX3NpemU7CisgICAgICAgX19yZXQuX01fZGF0YSA9IF9fdG1wX01fZGF0YTsKKyAgICAgICByZXR1cm4gX19yZXQ7CisgICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgaW5saW5lIHZvaWQKKyAgICB2YWxhcnJheTxfVHA+OjpyZXNpemUoc2l6ZV90IF9fbiwgX1RwIF9fYykKKyAgICB7CisgICAgICAvLyBUaGlzIGNvbXBsaWNhdGlvbiBpcyBzbyB0byBtYWtlIHZhbGFycmF5PHZhbGFycmF5PFQ+ID4gd29yaworICAgICAgLy8gZXZlbiB0aG91Z2ggaXQgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZC4gIE5vYm9keSBzaG91bGQKKyAgICAgIC8vIGJlIHNheWluZyB2YWxhcnJheTx2YWxhcnJheTxUPiA+IGFueXdheS4gIFNlZSB0aGUgc3BlY3MuCisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfZGVzdHJveV9lbGVtZW50cyhfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7CisgICAgICBpZiAoX01fc2l6ZSAhPSBfX24pCisJeworCSAgc3RkOjpfX3ZhbGFycmF5X3JlbGVhc2VfbWVtb3J5KF9NX2RhdGEpOworCSAgX01fc2l6ZSA9IF9fbjsKKwkgIF9NX2RhdGEgPSBfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKTsKKwl9CisgICAgICBzdGQ6Ol9fdmFsYXJyYXlfZmlsbF9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSArIF9fbiwgX19jKTsKKyAgICB9CisgICAgCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKyAgICBpbmxpbmUgX1RwCisgICAgdmFsYXJyYXk8X1RwPjo6bWluKCkgY29uc3QKKyAgICB7CisgICAgICBfR0xJQkNYWF9ERUJVR19BU1NFUlQoX01fc2l6ZSA+IDApOworICAgICAgcmV0dXJuICpzdGQ6Om1pbl9lbGVtZW50KF9NX2RhdGEsIF9NX2RhdGEgKyBfTV9zaXplKTsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIGlubGluZSBfVHAKKyAgICB2YWxhcnJheTxfVHA+OjptYXgoKSBjb25zdAorICAgIHsKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfTV9zaXplID4gMCk7CisgICAgICByZXR1cm4gKnN0ZDo6bWF4X2VsZW1lbnQoX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOworICAgIH0KKyAgCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICBpbmxpbmUgX0V4cHI8X1ZhbEZ1bkNsb3M8X1ZhbEFycmF5LCBfVHA+LCBfVHA+CisgICAgdmFsYXJyYXk8X1RwPjo6YXBwbHkoX1RwIGZ1bmMoX1RwKSkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIF9WYWxGdW5DbG9zPF9WYWxBcnJheSwgX1RwPiBfQ2xvc3VyZTsKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZSgqdGhpcywgZnVuYykpOworICAgIH0KKworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgaW5saW5lIF9FeHByPF9SZWZGdW5DbG9zPF9WYWxBcnJheSwgX1RwPiwgX1RwPgorICAgIHZhbGFycmF5PF9UcD46OmFwcGx5KF9UcCBmdW5jKGNvbnN0IF9UcCAmKSkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIF9SZWZGdW5DbG9zPF9WYWxBcnJheSwgX1RwPiBfQ2xvc3VyZTsKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPihfQ2xvc3VyZSgqdGhpcywgZnVuYykpOworICAgIH0KKworI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX1VOQVJZX09QRVJBVE9SKF9PcCwgX05hbWUpICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSB0eXBlbmFtZSB2YWxhcnJheTxfVHA+Ojp0ZW1wbGF0ZSBfVW5hcnlPcDxfTmFtZT46Ol9SdCAgICAgIAlcCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wKCkgY29uc3QJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgdHlwZWRlZiBfVW5DbG9zPF9OYW1lLCBfVmFsQXJyYXksIF9UcD4gX0Nsb3N1cmU7CSAgICAgICAgICAgICAgICBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZSBfUnQ7ICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9SdD4oX0Nsb3N1cmUoKnRoaXMpKTsJCQlcCisgICAgfQorCisgICAgX0RFRklORV9WQUxBUlJBWV9VTkFSWV9PUEVSQVRPUigrLCBfX3VuYXJ5X3BsdXMpCisgICAgX0RFRklORV9WQUxBUlJBWV9VTkFSWV9PUEVSQVRPUigtLCBfX25lZ2F0ZSkKKyAgICBfREVGSU5FX1ZBTEFSUkFZX1VOQVJZX09QRVJBVE9SKH4sIF9fYml0d2lzZV9ub3QpCisgICAgX0RFRklORV9WQUxBUlJBWV9VTkFSWV9PUEVSQVRPUiAoISwgX19sb2dpY2FsX25vdCkKKworI3VuZGVmIF9ERUZJTkVfVkFMQVJSQVlfVU5BUllfT1BFUkFUT1IKKworI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX0FVR01FTlRFRF9BU1NJR05NRU5UKF9PcCwgX05hbWUpICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CQkJCQkJCVwKKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYJCQkJCQlcCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IF9UcCAmX190KQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfX3QpOwlcCisgICAgICByZXR1cm4gKnRoaXM7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CQkJCQkJCVwKKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYJCQkJCQlcCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKF9NX3NpemUgPT0gX192Ll9NX3NpemUpOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCAJCVwKKwkJCSAgICAgICBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOwkJXAorICAgICAgcmV0dXJuICp0aGlzOwkJCQkJCQlcCisgICAgfQorCitfREVGSU5FX1ZBTEFSUkFZX0FVR01FTlRFRF9BU1NJR05NRU5UKCssIF9fcGx1cykKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQoLSwgX19taW51cykKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQoKiwgX19tdWx0aXBsaWVzKQorX0RFRklORV9WQUxBUlJBWV9BVUdNRU5URURfQVNTSUdOTUVOVCgvLCBfX2RpdmlkZXMpCitfREVGSU5FX1ZBTEFSUkFZX0FVR01FTlRFRF9BU1NJR05NRU5UKCUsIF9fbW9kdWx1cykKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQoXiwgX19iaXR3aXNlX3hvcikKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQoJiwgX19iaXR3aXNlX2FuZCkKK19ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQofCwgX19iaXR3aXNlX29yKQorX0RFRklORV9WQUxBUlJBWV9BVUdNRU5URURfQVNTSUdOTUVOVCg8PCwgX19zaGlmdF9sZWZ0KQorX0RFRklORV9WQUxBUlJBWV9BVUdNRU5URURfQVNTSUdOTUVOVCg+PiwgX19zaGlmdF9yaWdodCkKKworI3VuZGVmIF9ERUZJTkVfVkFMQVJSQVlfQVVHTUVOVEVEX0FTU0lHTk1FTlQKKworI2RlZmluZSBfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQoX09wLCBfTmFtZSkgICAgICAgICAgXAorICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+CQkJCVwKKyAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYJCQkJCQlcCisgICAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgX09wIyM9KGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgX0FycmF5X2F1Z21lbnRlZF8jI19OYW1lKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOwlcCisgICAgICByZXR1cm4gKnRoaXM7CQkJCQkJCVwKKyAgICB9CisKK19ERUZJTkVfVkFMQVJSQVlfRVhQUl9BVUdNRU5URURfQVNTSUdOTUVOVCgrLCBfX3BsdXMpCitfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQoLSwgX19taW51cykKK19ERUZJTkVfVkFMQVJSQVlfRVhQUl9BVUdNRU5URURfQVNTSUdOTUVOVCgqLCBfX211bHRpcGxpZXMpCitfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQoLywgX19kaXZpZGVzKQorX0RFRklORV9WQUxBUlJBWV9FWFBSX0FVR01FTlRFRF9BU1NJR05NRU5UKCUsIF9fbW9kdWx1cykKK19ERUZJTkVfVkFMQVJSQVlfRVhQUl9BVUdNRU5URURfQVNTSUdOTUVOVCheLCBfX2JpdHdpc2VfeG9yKQorX0RFRklORV9WQUxBUlJBWV9FWFBSX0FVR01FTlRFRF9BU1NJR05NRU5UKCYsIF9fYml0d2lzZV9hbmQpCitfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQofCwgX19iaXR3aXNlX29yKQorX0RFRklORV9WQUxBUlJBWV9FWFBSX0FVR01FTlRFRF9BU1NJR05NRU5UKDw8LCBfX3NoaWZ0X2xlZnQpCitfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQoPj4sIF9fc2hpZnRfcmlnaHQpCisKKyN1bmRlZiBfREVGSU5FX1ZBTEFSUkFZX0VYUFJfQVVHTUVOVEVEX0FTU0lHTk1FTlQKKyAgICAKKworI2RlZmluZSBfREVGSU5FX0JJTkFSWV9PUEVSQVRPUihfT3AsIF9OYW1lKQkJCQlcCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4JCQkJCQlcCisgICAgaW5saW5lIF9FeHByPF9CaW5DbG9zPF9OYW1lLCBfVmFsQXJyYXksIF9WYWxBcnJheSwgX1RwLCBfVHA+LCAgICAgICBcCisgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZT4gICAgICAgICAgICAgICBcCisgICAgb3BlcmF0b3IgX09wKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX193KQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIF9HTElCQ1hYX0RFQlVHX0FTU0VSVChfX3Yuc2l6ZSgpID09IF9fdy5zaXplKCkpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHR5cGVkZWYgX0JpbkNsb3M8X05hbWUsIF9WYWxBcnJheSwgX1ZhbEFycmF5LCBfVHAsIF9UcD4gX0Nsb3N1cmU7IFwKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19mdW48X05hbWUsIF9UcD46OnJlc3VsdF90eXBlIF9SdDsgICAgICAgICAgICAgIFwKKyAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1J0PihfQ2xvc3VyZShfX3YsIF9fdykpOyAgICAgICAgICAgICAgICAgIFwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfTmFtZSwgX1ZhbEFycmF5LF9Db25zdGFudCwgX1RwLCBfVHA+LCAgICAgICAgXAorICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgX1RwPjo6cmVzdWx0X3R5cGU+ICAgICAgICAgICAgICAgXAorICAgIG9wZXJhdG9yIF9PcChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IF9UcCYgX190KQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9OYW1lLCBfVmFsQXJyYXksIF9Db25zdGFudCwgX1RwLCBfVHA+IF9DbG9zdXJlOwlcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZSBfUnQ7ICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9SdD4oX0Nsb3N1cmUoX192LCBfX3QpKTsJICAgICAgICAgICAgICAgIFwKKyAgICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CQkJCQkJXAorICAgIGlubGluZSBfRXhwcjxfQmluQ2xvczxfTmFtZSwgX0NvbnN0YW50LCBfVmFsQXJyYXksIF9UcCwgX1RwPiwgICAgICAgXAorICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfX2Z1bjxfTmFtZSwgX1RwPjo6cmVzdWx0X3R5cGU+ICAgICAgICAgICAgICAgXAorICAgIG9wZXJhdG9yIF9PcChjb25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICB0eXBlZGVmIF9CaW5DbG9zPF9OYW1lLCBfQ29uc3RhbnQsIF9WYWxBcnJheSwgX1RwLCBfVHA+IF9DbG9zdXJlOyBcCisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fZnVuPF9OYW1lLCBfVHA+OjpyZXN1bHRfdHlwZSBfUnQ7ICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9SdD4oX0Nsb3N1cmUoX190LCBfX3YpKTsgICAgICAgIAkgICAgICAgIFwKKyAgICB9CisKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKCssIF9fcGx1cykKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKC0sIF9fbWludXMpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUigqLCBfX211bHRpcGxpZXMpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUigvLCBfX2RpdmlkZXMpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUiglLCBfX21vZHVsdXMpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUiheLCBfX2JpdHdpc2VfeG9yKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoJiwgX19iaXR3aXNlX2FuZCkKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKHwsIF9fYml0d2lzZV9vcikKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKDw8LCBfX3NoaWZ0X2xlZnQpCitfREVGSU5FX0JJTkFSWV9PUEVSQVRPUig+PiwgX19zaGlmdF9yaWdodCkKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKCYmLCBfX2xvZ2ljYWxfYW5kKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IofHwsIF9fbG9naWNhbF9vcikKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKD09LCBfX2VxdWFsX3RvKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoIT0sIF9fbm90X2VxdWFsX3RvKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoPCwgX19sZXNzKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoPiwgX19ncmVhdGVyKQorX0RFRklORV9CSU5BUllfT1BFUkFUT1IoPD0sIF9fbGVzc19lcXVhbCkKK19ERUZJTkVfQklOQVJZX09QRVJBVE9SKD49LCBfX2dyZWF0ZXJfZXF1YWwpCisKKyN1bmRlZiBfREVGSU5FX0JJTkFSWV9PUEVSQVRPUgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mCisgICAqICAgICAgICAgIHRoZSB2YWxhcnJheS4KKyAgICogIEBwYXJhbSAgX192YSAgdmFsYXJyYXkuCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgaW5saW5lIF9UcCoKKyAgICBiZWdpbih2YWxhcnJheTxfVHA+JiBfX3ZhKQorICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX192YVswXSk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IG9mCisgICAqICAgICAgICAgIHRoZSBjb25zdCB2YWxhcnJheS4KKyAgICogIEBwYXJhbSAgX192YSAgdmFsYXJyYXkuCisgICAqLworICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CisgICAgaW5saW5lIGNvbnN0IF9UcCoKKyAgICBiZWdpbihjb25zdCB2YWxhcnJheTxfVHA+JiBfX3ZhKQorICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX192YVswXSk7IH0KKworICAvKioKKyAgICogIEBicmllZiAgUmV0dXJuIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgb2YKKyAgICogICAgICAgICAgdGhlIHZhbGFycmF5LgorICAgKiAgQHBhcmFtICBfX3ZhICB2YWxhcnJheS4KKyAgICovCisgIHRlbXBsYXRlPGNsYXNzIF9UcD4KKyAgICBpbmxpbmUgX1RwKgorICAgIGVuZCh2YWxhcnJheTxfVHA+JiBfX3ZhKQorICAgIHsgcmV0dXJuIHN0ZDo6X19hZGRyZXNzb2YoX192YVswXSkgKyBfX3ZhLnNpemUoKTsgfQorCisgIC8qKgorICAgKiAgQGJyaWVmICBSZXR1cm4gYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCBvZgorICAgKiAgICAgICAgICB0aGUgY29uc3QgdmFsYXJyYXkuCisgICAqICBAcGFyYW0gIF9fdmEgIHZhbGFycmF5LgorICAgKi8KKyAgdGVtcGxhdGU8Y2xhc3MgX1RwPgorICAgIGlubGluZSBjb25zdCBfVHAqCisgICAgZW5kKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdmEpCisgICAgeyByZXR1cm4gc3RkOjpfX2FkZHJlc3NvZihfX3ZhWzBdKSArIF9fdmEuc2l6ZSgpOyB9CisjZW5kaWYgLy8gQysrMTEKKworICAvLyBAfSBncm91cCBudW1lcmljX2FycmF5cworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZiAvKiBfR0xJQkNYWF9WQUxBUlJBWSAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy92ZWN0b3IgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvYysrLzQuOC4zL3ZlY3RvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDFjNWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2MrKy80LjguMy92ZWN0b3IKQEAgLTAsMCArMSw4MSBAQAorLy8gPHZlY3Rvcj4gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyAqIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyCisgKiBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyBkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2CisgKiBTaWxpY29uIEdyYXBoaWNzIENvbXB1dGVyIFN5c3RlbXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUKKyAqIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAorICogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyAqIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gIFNpbGljb24gR3JhcGhpY3MgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisvKiogQGZpbGUgaW5jbHVkZS92ZWN0b3IKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisKKyNpZm5kZWYgX0dMSUJDWFhfVkVDVE9SCisjZGVmaW5lIF9HTElCQ1hYX1ZFQ1RPUiAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGJpdHMvc3RsX2FsZ29iYXNlLmg+CisjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9jb25zdHJ1Y3QuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF91bmluaXRpYWxpemVkLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfdmVjdG9yLmg+CisjaW5jbHVkZSA8Yml0cy9zdGxfYnZlY3Rvci5oPiAKKyNpbmNsdWRlIDxiaXRzL3JhbmdlX2FjY2Vzcy5oPgorCisjaWZuZGVmIF9HTElCQ1hYX0VYUE9SVF9URU1QTEFURQorIyBpbmNsdWRlIDxiaXRzL3ZlY3Rvci50Y2M+CisjZW5kaWYKKworI2lmZGVmIF9HTElCQ1hYX0RFQlVHCisjIGluY2x1ZGUgPGRlYnVnL3ZlY3Rvcj4KKyNlbmRpZgorCisjaWZkZWYgX0dMSUJDWFhfUFJPRklMRQorIyBpbmNsdWRlIDxwcm9maWxlL3ZlY3Rvcj4KKyNlbmRpZgorCisjZW5kaWYgLyogX0dMSUJDWFhfVkVDVE9SICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9jb21wbGV4LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvY29tcGxleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWIyMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvY29tcGxleC5oCkBAIC0wLDAgKzEsMTI0IEBACisvKiAkTmV0QlNEOiBjb21wbGV4LmgsdiAxLjMgMjAxMC8wOS8xNSAxNjoxMTozMCBjaHJpc3RvcyBFeHAgJCAqLworCisvKgorICogV3JpdHRlbiBieSBNYXR0aGlhcyBEcm9jaG5lci4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2lmbmRlZglfQ09NUExFWF9ICisjZGVmaW5lCV9DT01QTEVYX0gKKworI2RlZmluZSBjb21wbGV4IF9Db21wbGV4CisjZGVmaW5lIF9Db21wbGV4X0kgMS4wZmkKKyNkZWZpbmUgSSBfQ29tcGxleF9JCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiA3LjMuNSBUcmlnb25vbWV0cmljIGZ1bmN0aW9ucyAqLworLyogNy4zLjUuMSBUaGUgY2Fjb3MgZnVuY3Rpb25zICovCitkb3VibGUgY29tcGxleCBjYWNvcyhkb3VibGUgY29tcGxleCk7CitmbG9hdCBjb21wbGV4IGNhY29zZihmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjUuMiBUaGUgY2FzaW4gZnVuY3Rpb25zICovCitkb3VibGUgY29tcGxleCBjYXNpbihkb3VibGUgY29tcGxleCk7CitmbG9hdCBjb21wbGV4IGNhc2luZihmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjUuMSBUaGUgY2F0YW4gZnVuY3Rpb25zICovCitkb3VibGUgY29tcGxleCBjYXRhbihkb3VibGUgY29tcGxleCk7CitmbG9hdCBjb21wbGV4IGNhdGFuZihmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjUuMSBUaGUgY2NvcyBmdW5jdGlvbnMgKi8KK2RvdWJsZSBjb21wbGV4IGNjb3MoZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleCBjY29zZihmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjUuMSBUaGUgY3NpbiBmdW5jdGlvbnMgKi8KK2RvdWJsZSBjb21wbGV4IGNzaW4oZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleCBjc2luZihmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjUuMSBUaGUgY3RhbiBmdW5jdGlvbnMgKi8KK2RvdWJsZSBjb21wbGV4IGN0YW4oZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleCBjdGFuZihmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjYgSHlwZXJib2xpYyBmdW5jdGlvbnMgKi8KKy8qIDcuMy42LjEgVGhlIGNhY29zaCBmdW5jdGlvbnMgKi8KK2RvdWJsZSBjb21wbGV4IGNhY29zaChkb3VibGUgY29tcGxleCk7CitmbG9hdCBjb21wbGV4IGNhY29zaGYoZmxvYXQgY29tcGxleCk7CisKKy8qIDcuMy42LjIgVGhlIGNhc2luaCBmdW5jdGlvbnMgKi8KK2RvdWJsZSBjb21wbGV4IGNhc2luaChkb3VibGUgY29tcGxleCk7CitmbG9hdCBjb21wbGV4IGNhc2luaGYoZmxvYXQgY29tcGxleCk7CisKKy8qIDcuMy42LjMgVGhlIGNhdGFuaCBmdW5jdGlvbnMgKi8KK2RvdWJsZSBjb21wbGV4IGNhdGFuaChkb3VibGUgY29tcGxleCk7CitmbG9hdCBjb21wbGV4IGNhdGFuaGYoZmxvYXQgY29tcGxleCk7CisKKy8qIDcuMy42LjQgVGhlIGNjb3NoIGZ1bmN0aW9ucyAqLworZG91YmxlIGNvbXBsZXggY2Nvc2goZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleCBjY29zaGYoZmxvYXQgY29tcGxleCk7CisKKy8qIDcuMy42LjUgVGhlIGNzaW5oIGZ1bmN0aW9ucyAqLworZG91YmxlIGNvbXBsZXggY3NpbmgoZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleCBjc2luaGYoZmxvYXQgY29tcGxleCk7CisKKy8qIDcuMy42LjYgVGhlIGN0YW5oIGZ1bmN0aW9ucyAqLworZG91YmxlIGNvbXBsZXggY3RhbmgoZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleCBjdGFuaGYoZmxvYXQgY29tcGxleCk7CisKKy8qIDcuMy43IEV4cG9uZW50aWFsIGFuZCBsb2dhcml0aG1pYyBmdW5jdGlvbnMgKi8KKy8qIDcuMy43LjEgVGhlIGNleHAgZnVuY3Rpb25zICovCitkb3VibGUgY29tcGxleCBjZXhwKGRvdWJsZSBjb21wbGV4KTsKK2Zsb2F0IGNvbXBsZXggY2V4cGYoZmxvYXQgY29tcGxleCk7CisKKy8qIDcuMy43LjIgVGhlIGNsb2cgZnVuY3Rpb25zICovCitkb3VibGUgY29tcGxleCBjbG9nKGRvdWJsZSBjb21wbGV4KTsKK2Zsb2F0IGNvbXBsZXggY2xvZ2YoZmxvYXQgY29tcGxleCk7CisKKy8qIDcuMy44IFBvd2VyIGFuZCBhYnNvbHV0ZS12YWx1ZSBmdW5jdGlvbnMgKi8KKy8qIDcuMy44LjEgVGhlIGNhYnMgZnVuY3Rpb25zICovCisvKiNpZm5kZWYgX19MSUJNMF9TT1VSQ0VfXyAqLworLyogYXZvaWQgY29uZmxpY3Qgd2l0aCBoaXN0b3JpY2FsIGNhYnMoc3RydWN0IGNvbXBsZXgpICovCisvKiBkb3VibGUgY2Ficyhkb3VibGUgY29tcGxleCkgX19SRU5BTUUoX19jOTlfY2Ficyk7CisgICBmbG9hdCBjYWJzZihmbG9hdCBjb21wbGV4KSBfX1JFTkFNRShfX2M5OV9jYWJzZik7CisgICAjZW5kaWYKKyovCitkb3VibGUgY2Ficyhkb3VibGUgY29tcGxleCkgOworZmxvYXQgY2Fic2YoZmxvYXQgY29tcGxleCkgOworCisvKiA3LjMuOC4yIFRoZSBjcG93IGZ1bmN0aW9ucyAqLworZG91YmxlIGNvbXBsZXggY3Bvdyhkb3VibGUgY29tcGxleCwgZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleCBjcG93ZihmbG9hdCBjb21wbGV4LCBmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjguMyBUaGUgY3NxcnQgZnVuY3Rpb25zICovCitkb3VibGUgY29tcGxleCBjc3FydChkb3VibGUgY29tcGxleCk7CitmbG9hdCBjb21wbGV4IGNzcXJ0ZihmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjkgTWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAqLworLyogNy4zLjkuMSBUaGUgY2FyZyBmdW5jdGlvbnMgKi8gCitkb3VibGUgY2FyZyhkb3VibGUgY29tcGxleCk7CitmbG9hdCBjYXJnZihmbG9hdCBjb21wbGV4KTsKKworLyogNy4zLjkuMiBUaGUgY2ltYWcgZnVuY3Rpb25zICovCitkb3VibGUgY2ltYWcoZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY2ltYWdmKGZsb2F0IGNvbXBsZXgpOworLypsb25nIGRvdWJsZSBjaW1hZ2wobG9uZyBkb3VibGUgY29tcGxleCk7ICovCisKKy8qIDcuMy45LjMgVGhlIGNvbmogZnVuY3Rpb25zICovCitkb3VibGUgY29tcGxleCBjb25qKGRvdWJsZSBjb21wbGV4KTsKK2Zsb2F0IGNvbXBsZXggY29uamYoZmxvYXQgY29tcGxleCk7CisvKmxvbmcgZG91YmxlIGNvbXBsZXggY29uamwobG9uZyBkb3VibGUgY29tcGxleCk7ICovCisKKy8qIDcuMy45LjQgVGhlIGNwcm9qIGZ1bmN0aW9ucyAqLworZG91YmxlIGNvbXBsZXggY3Byb2ooZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleCBjcHJvamYoZmxvYXQgY29tcGxleCk7CisvKmxvbmcgZG91YmxlIGNvbXBsZXggY3Byb2psKGxvbmcgZG91YmxlIGNvbXBsZXgpOyAqLworCisvKiA3LjMuOS41IFRoZSBjcmVhbCBmdW5jdGlvbnMgKi8KK2RvdWJsZSBjcmVhbChkb3VibGUgY29tcGxleCk7CitmbG9hdCBjcmVhbGYoZmxvYXQgY29tcGxleCk7CisvKmxvbmcgZG91YmxlIGNyZWFsbChsb25nIGRvdWJsZSBjb21wbGV4KTsgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmCS8qICEgX0NPTVBMRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2N0eXBlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvY3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmFkNWFiCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2N0eXBlLmgKQEAgLTAsMCArMSwxMTMgQEAKKyNpZm5kZWYgX0NUWVBFX0hfCisjZGVmaW5lIF9DVFlQRV9IXworCisjaW5jbHVkZSAiX2Fuc2kuaCIKKworX0JFR0lOX1NURF9DCisKK2ludCBfRVhGVU4oaXNhbG51bSwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXNhbHBoYSwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXNjbnRybCwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXNkaWdpdCwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXNncmFwaCwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXNsb3dlciwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXNwcmludCwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXNwdW5jdCwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXNzcGFjZSwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXN1cHBlciwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4oaXN4ZGlnaXQsKGludCBfX2MpKTsKK2ludCBfRVhGVU4odG9sb3dlciwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4odG91cHBlciwgKGludCBfX2MpKTsKKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCitpbnQgX0VYRlVOKGlzYmxhbmssIChpbnQgX19jKSk7CisjZW5kaWYKKworI2lmbmRlZiBfX1NUUklDVF9BTlNJX18KK2ludCBfRVhGVU4oaXNhc2NpaSwgKGludCBfX2MpKTsKK2ludCBfRVhGVU4odG9hc2NpaSwgKGludCBfX2MpKTsKKyNkZWZpbmUgX3RvbG93ZXIoX19jKSAoKHVuc2lnbmVkIGNoYXIpKF9fYykgLSAnQScgKyAnYScpCisjZGVmaW5lIF90b3VwcGVyKF9fYykgKCh1bnNpZ25lZCBjaGFyKShfX2MpIC0gJ2EnICsgJ0EnKQorI2VuZGlmCisKKyNkZWZpbmUJX1UJMDEKKyNkZWZpbmUJX0wJMDIKKyNkZWZpbmUJX04JMDQKKyNkZWZpbmUJX1MJMDEwCisjZGVmaW5lIF9QCTAyMAorI2RlZmluZSBfQwkwNDAKKyNkZWZpbmUgX1gJMDEwMAorI2RlZmluZQlfQgkwMjAwCisKKyNpZm5kZWYgX01CX0NBUEFCTEUKK19DT05TVAorI2VuZGlmCitleHRlcm4JX19JTVBPUlQgY2hhcgkqX19jdHlwZV9wdHJfXzsKKworI2lmbmRlZiBfX2NwbHVzcGx1cworLyogVGhlc2UgbWFjcm9zIGFyZSBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gaW4gYSBtYW5uZXIgdGhhdCB3aWxsIHRyaWdnZXIKKyAgIGEgZ2NjIC1XYWxsIHdhcm5pbmcgaWYgdGhlIHVzZXIgbWlzdGFrZW5seSBwYXNzZXMgYSAnY2hhcicgaW5zdGVhZAorICAgb2YgYW4gaW50IGNvbnRhaW5pbmcgYW4gJ3Vuc2lnbmVkIGNoYXInLiAgTm90ZSB0aGF0IHRoZSBzaXplb2Ygd2lsbAorICAgYWx3YXlzIGJlIDEsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBmb3IgbWFwcGluZyBFT0YgdG8gX19jdHlwZV9wdHJfX1swXTsKKyAgIHRoZSB1c2Ugb2YgYSByYXcgaW5kZXggaW5zaWRlIHRoZSBzaXplb2YgdHJpZ2dlcnMgdGhlIGdjYyB3YXJuaW5nIGlmCisgICBfX2Mgd2FzIG9mIHR5cGUgY2hhciwgYW5kIHNpemVvZiBtYXNrcyBzaWRlIGVmZmVjdHMgb2YgdGhlIGV4dHJhIF9fYy4KKyAgIE1lYW53aGlsZSwgdGhlIHJlYWwgaW5kZXggdG8gX19jdHlwZV9wdHJfXysxIG11c3QgYmUgY2FzdCB0byBpbnQsCisgICBzaW5jZSBpc2FscGhhKDB4MTAwMDAwMDAxTEwpIG11c3QgZXF1YWwgaXNhbHBoYSgxKSwgcmF0aGVyIHRoYW4gYmVpbmcKKyAgIGFuIG91dC1vZi1ib3VuZHMgcmVmZXJlbmNlIG9uIGEgNjQtYml0IG1hY2hpbmUuICAqLworI2RlZmluZSBfX2N0eXBlX2xvb2t1cChfX2MpICgoX19jdHlwZV9wdHJfXytzaXplb2YoIiJbX19jXSkpWyhpbnQpKF9fYyldKQorCisjZGVmaW5lCWlzYWxwaGEoX19jKQkoX19jdHlwZV9sb29rdXAoX19jKSYoX1V8X0wpKQorI2RlZmluZQlpc3VwcGVyKF9fYykJKChfX2N0eXBlX2xvb2t1cChfX2MpJihfVXxfTCkpPT1fVSkKKyNkZWZpbmUJaXNsb3dlcihfX2MpCSgoX19jdHlwZV9sb29rdXAoX19jKSYoX1V8X0wpKT09X0wpCisjZGVmaW5lCWlzZGlnaXQoX19jKQkoX19jdHlwZV9sb29rdXAoX19jKSZfTikKKyNkZWZpbmUJaXN4ZGlnaXQoX19jKQkoX19jdHlwZV9sb29rdXAoX19jKSYoX1h8X04pKQorI2RlZmluZQlpc3NwYWNlKF9fYykJKF9fY3R5cGVfbG9va3VwKF9fYykmX1MpCisjZGVmaW5lIGlzcHVuY3QoX19jKQkoX19jdHlwZV9sb29rdXAoX19jKSZfUCkKKyNkZWZpbmUgaXNhbG51bShfX2MpCShfX2N0eXBlX2xvb2t1cChfX2MpJihfVXxfTHxfTikpCisjZGVmaW5lIGlzcHJpbnQoX19jKQkoX19jdHlwZV9sb29rdXAoX19jKSYoX1B8X1V8X0x8X058X0IpKQorI2RlZmluZQlpc2dyYXBoKF9fYykJKF9fY3R5cGVfbG9va3VwKF9fYykmKF9QfF9VfF9MfF9OKSkKKyNkZWZpbmUgaXNjbnRybChfX2MpCShfX2N0eXBlX2xvb2t1cChfX2MpJl9DKQorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgXAorICAgICghZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyNkZWZpbmUgaXNibGFuayhfX2MpIFwKKyAgX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fIChfX2MpIF9feCA9IChfX2MpOwkJXAorICAgICAgICAoX19jdHlwZV9sb29rdXAoX194KSZfQikgfHwgKGludCkgKF9feCkgPT0gJ1x0Jzt9KQorI2VuZGlmCisKKworLyogTm9uLWdjYyB2ZXJzaW9ucyB3aWxsIGdldCB0aGUgbGlicmFyeSB2ZXJzaW9ucywgYW5kIHdpbGwgYmUKKyAgIHNsaWdodGx5IHNsb3dlci4gIFRoZXNlIG1hY3JvcyBhcmUgbm90IE5MUy1hd2FyZSBzbyB0aGV5IGFyZQorICAgZGlzYWJsZWQgaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyB0aGUgZXh0ZW5kZWQgY2hhcmFjdGVyIHNldHMuICovCisjIGlmIGRlZmluZWQoX19HTlVDX18pCisjICBpZiAhZGVmaW5lZCAoX01CX0VYVEVOREVEX0NIQVJTRVRTX0lTTykgJiYgIWRlZmluZWQgKF9NQl9FWFRFTkRFRF9DSEFSU0VUU19XSU5ET1dTKQorIyAgIGRlZmluZSB0b3VwcGVyKF9fYykgXAorICBfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18gKF9fYykgX194ID0gKF9fYyk7CVwKKyAgICAgIGlzbG93ZXIgKF9feCkgPyAoaW50KSBfX3ggLSAnYScgKyAnQScgOiAoaW50KSBfX3g7fSkKKyMgICBkZWZpbmUgdG9sb3dlcihfX2MpIFwKKyAgX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fIChfX2MpIF9feCA9IChfX2MpOwlcCisgICAgICBpc3VwcGVyIChfX3gpID8gKGludCkgX194IC0gJ0EnICsgJ2EnIDogKGludCkgX194O30pCisjICBlbHNlIC8qIF9NQl9FWFRFTkRFRF9DSEFSU0VUUyogKi8KKy8qIEFsbG93IGEgZ2NjIHdhcm5pbmcgaWYgdGhlIHVzZXIgcGFzc2VkICdjaGFyJywgYnV0IGRlZmVyIHRvIHRoZQorICAgZnVuY3Rpb24uICAqLworIyAgIGRlZmluZSB0b3VwcGVyKF9fYykgXAorICBfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18gKF9fYykgX194ID0gKF9fYyk7CVwKKyAgICAgICh2b2lkKSBfX2N0eXBlX3B0cl9fW19feF07ICh0b3VwcGVyKSAoX194KTt9KQorIyAgIGRlZmluZSB0b2xvd2VyKF9fYykgXAorICBfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18gKF9fYykgX194ID0gKF9fYyk7CVwKKyAgICAgICh2b2lkKSBfX2N0eXBlX3B0cl9fW19feF07ICh0b2xvd2VyKSAoX194KTt9KQorIyAgZW5kaWYgLyogX01CX0VYVEVOREVEX0NIQVJTRVRTKiAqLworIyBlbmRpZiAvKiBfX0dOVUNfXyAqLworI2VuZGlmIC8qICFfX2NwbHVzcGx1cyAqLworCisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworI2RlZmluZSBpc2FzY2lpKF9fYykJKCh1bnNpZ25lZCkoX19jKTw9MDE3NykKKyNkZWZpbmUgdG9hc2NpaShfX2MpCSgoX19jKSYwMTc3KQorI2VuZGlmCisKKy8qIEZvciBDKysgYmFja3dhcmQtY29tcGF0aWJpbGl0eSBvbmx5LiAgKi8KK2V4dGVybglfX0lNUE9SVCBfQ09OU1QgY2hhcglfY3R5cGVfW107CisKK19FTkRfU1REX0MKKworI2VuZGlmIC8qIF9DVFlQRV9IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2RpcmVudC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZWZjMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZGlyZW50LmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfRElSRU5UX0hfCisjZGVmaW5lIF9ESVJFTlRfSF8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvZGlyZW50Lmg+CisKKyNpZiAhZGVmaW5lZChNQVhOQU1MRU4pICYmICFkZWZpbmVkKF9QT1NJWF9TT1VSQ0UpCisjZGVmaW5lIE1BWE5BTUxFTiAxMDI0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKl9ESVJFTlRfSF8qLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2VudmxvY2suaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9lbnZsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiNmE4MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9lbnZsb2NrLmgKQEAgLTAsMCArMSwxNSBAQAorLyogZW52bG9jay5oIC0tIGhlYWRlciBmaWxlIGZvciBlbnYgcm91dGluZXMuICAqLworCisjaWZuZGVmIF9JTkNMVURFX0VOVkxPQ0tfSF8KKyNkZWZpbmUgX0lOQ0xVREVfRU5WTE9DS19IXworCisjaW5jbHVkZSA8X2Fuc2kuaD4KKyNpbmNsdWRlIDxzeXMvcmVlbnQuaD4KKworI2RlZmluZSBFTlZfTE9DSyBfX2Vudl9sb2NrKHJlZW50X3B0cikKKyNkZWZpbmUgRU5WX1VOTE9DSyBfX2Vudl91bmxvY2socmVlbnRfcHRyKQorCit2b2lkIF9FWEZVTihfX2Vudl9sb2NrLChzdHJ1Y3QgX3JlZW50ICpyZWVudCkpOwordm9pZCBfRVhGVU4oX19lbnZfdW5sb2NrLChzdHJ1Y3QgX3JlZW50ICpyZWVudCkpOworCisjZW5kaWYgLyogX0lOQ0xVREVfRU5WTE9DS19IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2VudnouaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9lbnZ6LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhMzFjMwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9lbnZ6LmgKQEAgLTAsMCArMSwxNiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAyIGJ5ICBSZWQgSGF0LCBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorICogaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBUaGUgbmV3bGliIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBhc3N1bWVzIHRoYXQgc2l6ZW9mKGNoYXIpID09IDEuICovCitjaGFyICogZW52el9lbnRyeSAoY29uc3QgY2hhciAqZW52eiwgc2l6ZV90IGVudnpfbGVuLCBjb25zdCBjaGFyICpuYW1lKTsKK2NoYXIgKiBlbnZ6X2dldCAoY29uc3QgY2hhciAqZW52eiwgc2l6ZV90IGVudnpfbGVuLCBjb25zdCBjaGFyICpuYW1lKTsKK2Vycm9yX3QgZW52el9hZGQgKGNoYXIgKiplbnZ6LCBzaXplX3QgKmVudnpfbGVuLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitlcnJvcl90IGVudnpfbWVyZ2UgKGNoYXIgKiplbnZ6LCBzaXplX3QgKmVudnpfbGVuLCBjb25zdCBjaGFyICplbnZ6Miwgc2l6ZV90IGVudnoyX2xlbiwgaW50IG92ZXJyaWRlKTsKK3ZvaWQgZW52el9yZW1vdmUoY2hhciAqKmVudnosIHNpemVfdCAqZW52el9sZW4sIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBlbnZ6X3N0cmlwIChjaGFyICoqZW52eiwgc2l6ZV90ICplbnZ6X2xlbik7CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZXJybm8uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYzJjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZXJybm8uaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fRVJSTk9fSF9fCisjZGVmaW5lIF9fRVJSTk9fSF9fCisKKyNpZm5kZWYgX19lcnJvcl90X2RlZmluZWQKK3R5cGVkZWYgaW50IGVycm9yX3Q7CisjZGVmaW5lIF9fZXJyb3JfdF9kZWZpbmVkIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL2Vycm5vLmg+CisKKyNlbmRpZiAvKiAhX19FUlJOT19IX18gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9mYXN0bWF0aC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2Zhc3RtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlZWE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9mYXN0bWF0aC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX0ZBU1RNQVRIX0hfCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisjZGVmaW5lIF9GQVNUTUFUSF9IXworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZmFzdG1hdGguaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiBfRkFTVE1BVEhfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9mY250bC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhOTE2NwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9mY250bC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzeXMvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9mbm1hdGNoLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZm5tYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzExZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZm5tYXRjaC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHNyYy9pbmNsdWRlL2ZubWF0Y2guaCx2IDEuMTAgMjAwMi8wMy8yMyAxNzoyNDo1MyBpbXAgRXhwICQKKyAqCUAoIylmbm1hdGNoLmgJOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKi8KKworI2lmbmRlZglfRk5NQVRDSF9IXworI2RlZmluZQlfRk5NQVRDSF9IXworCisjZGVmaW5lCUZOTV9OT01BVENICTEJLyogTWF0Y2ggZmFpbGVkLiAqLworCisjZGVmaW5lCUZOTV9OT0VTQ0FQRQkweDAxCS8qIERpc2FibGUgYmFja3NsYXNoIGVzY2FwaW5nLiAqLworI2RlZmluZQlGTk1fUEFUSE5BTUUJMHgwMgkvKiBTbGFzaCBtdXN0IGJlIG1hdGNoZWQgYnkgc2xhc2guICovCisjZGVmaW5lCUZOTV9QRVJJT0QJMHgwNAkvKiBQZXJpb2QgbXVzdCBiZSBtYXRjaGVkIGJ5IHBlcmlvZC4gKi8KKworI2lmIGRlZmluZWQoX0dOVV9TT1VSQ0UpIHx8ICFkZWZpbmVkKF9BTlNJX1NPVVJDRSkgJiYgIWRlZmluZWQoX1BPU0lYX1NPVVJDRSkKKyNkZWZpbmUJRk5NX0xFQURJTkdfRElSCTB4MDgJLyogSWdub3JlIC88dGFpbD4gYWZ0ZXIgSW1hdGNoLiAqLworI2RlZmluZQlGTk1fQ0FTRUZPTEQJMHgxMAkvKiBDYXNlIGluc2Vuc2l0aXZlIHNlYXJjaC4gKi8KKyNkZWZpbmUJRk5NX0lHTk9SRUNBU0UJRk5NX0NBU0VGT0xECisjZGVmaW5lCUZOTV9GSUxFX05BTUUJRk5NX1BBVEhOQU1FCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCitpbnQJIGZubWF0Y2goY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9GTk1BVENIX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZ2V0b3B0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZ2V0b3B0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4ZGE0YQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9nZXRvcHQuaApAQCAtMCwwICsxLDE5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworZ2V0b3B0LmggLSBSZWFkIGNvbW1hbmQgbGluZSBvcHRpb25zCisKK0FVVEhPUjogR3JlZ29yeSBQaWV0c2NoCitDUkVBVEVEIFRodSBKYW4gMDkgMjI6Mzc6MDAgMTk5NworCitERVNDUklQVElPTjoKKworVGhlIGdldG9wdCgpIGZ1bmN0aW9uIHBhcnNlcyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gIEl0cyBhcmd1bWVudHMgYXJnYworYW5kIGFyZ3YgYXJlIHRoZSBhcmd1bWVudCBjb3VudCBhbmQgYXJyYXkgYXMgcGFzc2VkIHRvIHRoZSBtYWluKCkgZnVuY3Rpb24KK29uIHByb2dyYW0gaW52b2NhdGlvbi4gIFRoZSBhcmd1bWVudCBvcHRzdHJpbmcgaXMgYSBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb24KK2NoYXJhY3RlcnMuICBJZiBzdWNoIGEgY2hhcmFjdGVyIGlzIGZvbGxvd2VkIGJ5IGEgY29sb24gKGA6JyksIHRoZSBvcHRpb24KK3Rha2VzIGFuIGFyZ3VtZW50LCB3aGljaCBpcyBwbGFjZWQgaW4gb3B0YXJnLiAgSWYgc3VjaCBhIGNoYXJhY3RlciBpcworZm9sbG93ZWQgYnkgdHdvIGNvbG9ucywgdGhlIG9wdGlvbiB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudCwgd2hpY2ggaXMKK3BsYWNlZCBpbiBvcHRhcmcuICBJZiB0aGUgb3B0aW9uIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnQsIG9wdGFyZyBpcyBOVUxMLgorCitUaGUgZXh0ZXJuYWwgdmFyaWFibGUgb3B0aW5kIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBhcnJheSBlbGVtZW50IG9mIGFyZ3YKK3RvIGJlIHByb2Nlc3NlZDsgaXQgY29tbXVuaWNhdGVzIGZyb20gb25lIGNhbGwgdG8gdGhlIG5leHQgd2hpY2ggZWxlbWVudCB0bworcHJvY2Vzcy4KKworVGhlIGdldG9wdF9sb25nKCkgZnVuY3Rpb24gd29ya3MgbGlrZSBnZXRvcHQoKSBleGNlcHQgdGhhdCBpdCBhbHNvIGFjY2VwdHMKK2xvbmcgb3B0aW9ucyBzdGFydGVkIGJ5IHR3byBkYXNoZXMgYC0tJy4gIElmIHRoZXNlIHRha2UgdmFsdWVzLCBpdCBpcyBlaXRoZXIKK2luIHRoZSBmb3JtCisKKy0tYXJnPXZhbHVlCisKKyBvcgorCistLWFyZyB2YWx1ZQorCitJdCB0YWtlcyB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgbG9uZ29wdHMgd2hpY2ggaXMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdAorZWxlbWVudCBvZiBhbiBhcnJheSBvZiB0eXBlIEdFVE9QVF9MT05HX09QVElPTl9ULCBkZWZpbmVkIGJlbG93LiAgVGhlIGxhc3QKK2VsZW1lbnQgb2YgdGhlIGFycmF5IGhhcyB0byBiZSBmaWxsZWQgd2l0aCBOVUxMIGZvciB0aGUgbmFtZSBmaWVsZC4KKworVGhlIGxvbmdpbmQgcG9pbnRlciBwb2ludHMgdG8gdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGxvbmcgb3B0aW9uIHJlbGF0aXZlCit0byBsb25nb3B0cyBpZiBpdCBpcyBub24tTlVMTC4KKworVGhlIGdldG9wdCgpIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9wdGlvbiBjaGFyYWN0ZXIgaWYgdGhlIG9wdGlvbiB3YXMgZm91bmQKK3N1Y2Nlc3NmdWxseSwgYDonIGlmIHRoZXJlIHdhcyBhIG1pc3NpbmcgcGFyYW1ldGVyIGZvciBvbmUgb2YgdGhlIG9wdGlvbnMsCitgPycgZm9yIGFuIHVua25vd24gb3B0aW9uIGNoYXJhY3RlciwgYW5kIEVPRiBmb3IgdGhlIGVuZCBvZiB0aGUgb3B0aW9uIGxpc3QuCisKK1RoZSBnZXRvcHRfbG9uZygpIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzIGRlc2NyaWJlZCBiZWxvdy4KKworVGhlIGZ1bmN0aW9uIGdldG9wdF9sb25nX29ubHkoKSBpcyBpZGVudGljYWwgdG8gZ2V0b3B0X2xvbmcoKSwgZXhjZXB0IHRoYXQgYQorcGx1cyBzaWduIGArJyBjYW4gaW50cm9kdWNlIGxvbmcgb3B0aW9ucyBhcyB3ZWxsIGFzIGAtLScuCisKK0Rlc2NyaWJlIGhvdyB0byBkZWFsIHdpdGggb3B0aW9ucyB0aGF0IGZvbGxvdyBub24tb3B0aW9uIEFSR1YtZWxlbWVudHMuCisKK0lmIHRoZSBjYWxsZXIgZGlkIG5vdCBzcGVjaWZ5IGFueXRoaW5nLCB0aGUgZGVmYXVsdCBpcyBSRVFVSVJFX09SREVSIGlmIHRoZQorZW52aXJvbm1lbnQgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIFBFUk1VVEUgb3RoZXJ3aXNlLgorCitSRVFVSVJFX09SREVSIG1lYW5zIGRvbid0IHJlY29nbml6ZSB0aGVtIGFzIG9wdGlvbnM7IHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKK3doZW4gdGhlIGZpcnN0IG5vbi1vcHRpb24gaXMgc2Vlbi4gIFRoaXMgaXMgd2hhdCBVbml4IGRvZXMuICBUaGlzIG1vZGUgb2YKK29wZXJhdGlvbiBpcyBzZWxlY3RlZCBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK1BPU0lYTFlfQ09SUkVDVCwgb3IgdXNpbmcgYCsnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG9wdHN0cmluZworcGFyYW1ldGVyLgorCitQRVJNVVRFIGlzIHRoZSBkZWZhdWx0LiAgV2UgcGVybXV0ZSB0aGUgY29udGVudHMgb2YgQVJHViBhcyB3ZSBzY2FuLCBzbyB0aGF0CitldmVudHVhbGx5IGFsbCB0aGUgbm9uLW9wdGlvbnMgYXJlIGF0IHRoZSBlbmQuICBUaGlzIGFsbG93cyBvcHRpb25zIHRvIGJlCitnaXZlbiBpbiBhbnkgb3JkZXIsIGV2ZW4gd2l0aCBwcm9ncmFtcyB0aGF0IHdlcmUgbm90IHdyaXR0ZW4gdG8gZXhwZWN0IHRoaXMuCisKK1JFVFVSTl9JTl9PUkRFUiBpcyBhbiBvcHRpb24gYXZhaWxhYmxlIHRvIHByb2dyYW1zIHRoYXQgd2VyZSB3cml0dGVuIHRvCitleHBlY3Qgb3B0aW9ucyBhbmQgb3RoZXIgQVJHVi1lbGVtZW50cyBpbiBhbnkgb3JkZXIgYW5kIHRoYXQgY2FyZSBhYm91dCB0aGUKK29yZGVyaW5nIG9mIHRoZSB0d28uICBXZSBkZXNjcmliZSBlYWNoIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50IGFzIGlmIGl0IHdlcmUKK3RoZSBhcmd1bWVudCBvZiBhbiBvcHRpb24gd2l0aCBjaGFyYWN0ZXIgY29kZSAxLiAgVXNpbmcgYC0nIGFzIHRoZSBmaXJzdAorY2hhcmFjdGVyIG9mIHRoZSBvcHRzdHJpbmcgcGFyYW1ldGVyIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KKworVGhlIHNwZWNpYWwgYXJndW1lbnQgYC0tJyBmb3JjZXMgYW4gZW5kIG9mIG9wdGlvbi1zY2FubmluZyByZWdhcmRsZXNzIG9mIHRoZQordmFsdWUgb2YgYG9yZGVyaW5nJy4gIEluIHRoZSBjYXNlIG9mIFJFVFVSTl9JTl9PUkRFUiwgb25seSBgLS0nIGNhbiBjYXVzZQorZ2V0b3B0KCkgYW5kIGZyaWVuZHMgdG8gcmV0dXJuIEVPRiB3aXRoIG9wdGluZCAhPSBhcmdjLgorCitDT1BZUklHSFQgTk9USUNFIEFORCBESVNDTEFJTUVSOgorCitDb3B5cmlnaHQgKEMpIDE5OTcgR3JlZ29yeSBQaWV0c2NoCisKK1RoaXMgZmlsZSBhbmQgdGhlIGFjY29tcGFueWluZyBnZXRvcHQuYyBpbXBsZW1lbnRhdGlvbiBmaWxlIGFyZSBoZXJlYnkgCitwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4gd2l0aG91dCByZXN0cmljdGlvbnMuICBKdXN0IGdpdmUgdGhlIGF1dGhvciAKK2NyZWRpdCwgZG9uJ3QgY2xhaW0geW91IHdyb3RlIGl0IG9yIHByZXZlbnQgYW55b25lIGVsc2UgZnJvbSB1c2luZyBpdC4KKworR3JlZ29yeSBQaWV0c2NoJ3MgY3VycmVudCBlLW1haWwgYWRkcmVzczoKK2dwaWV0c2NoQGNvbWNhc3QubmV0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIGEgZ2xpYmMtZXh0ZW5zaW9uIGhlYWRlciBmaWxlLiAqLworCisjaWZuZGVmIEdFVE9QVF9ICisjZGVmaW5lIEdFVE9QVF9ICisKKyNpbmNsdWRlIDxfYW5zaS5oPgorCisvKiBpbmNsdWRlIGZpbGVzIG5lZWRlZCBieSB0aGlzIGluY2x1ZGUgZmlsZSAqLworCisjZGVmaW5lIG5vX2FyZ3VtZW50CQkwCisjZGVmaW5lIHJlcXVpcmVkX2FyZ3VtZW50CTEKKyNkZWZpbmUgb3B0aW9uYWxfYXJndW1lbnQJMgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKK3sKKworI2VuZGlmCQkJCS8qIF9fY3BsdXNwbHVzICovCisKKy8qIHR5cGVzIGRlZmluZWQgYnkgdGhpcyBpbmNsdWRlIGZpbGUgKi8KKyAgc3RydWN0IG9wdGlvbgorICB7CisgICAgY2hhciAqbmFtZTsJCQkvKiB0aGUgbmFtZSBvZiB0aGUgbG9uZyBvcHRpb24gKi8KKyAgICBpbnQgaGFzX2FyZzsJCS8qIG9uZSBvZiB0aGUgYWJvdmUgbWFjcm9zICovCisgICAgaW50ICpmbGFnOwkJCS8qIGRldGVybWluZXMgaWYgZ2V0b3B0X2xvbmcoKSByZXR1cm5zIGEKKwkJCQkgKiB2YWx1ZSBmb3IgYSBsb25nIG9wdGlvbjsgaWYgaXQgaXMKKwkJCQkgKiBub24tTlVMTCwgMCBpcyByZXR1cm5lZCBhcyBhIGZ1bmN0aW9uCisJCQkJICogdmFsdWUgYW5kIHRoZSB2YWx1ZSBvZiB2YWwgaXMgc3RvcmVkIGluCisJCQkJICogdGhlIGFyZWEgcG9pbnRlZCB0byBieSBmbGFnLiAgT3RoZXJ3aXNlLAorCQkJCSAqIHZhbCBpcyByZXR1cm5lZC4gKi8KKyAgICBpbnQgdmFsOwkJCS8qIGRldGVybWluZXMgdGhlIHZhbHVlIHRvIHJldHVybiBpZiBmbGFnIGlzCisJCQkJICogTlVMTC4gKi8KKworICB9OworCisvKiBXaGlsZSBnZXRvcHQuaCBpcyBhIGdsaWJjIGV4dGVuc2lvbiwgdGhlIGZvbGxvd2luZyBhcmUgbmV3bGliIGV4dGVuc2lvbnMuCisgKiBUaGV5IGFyZSBvcHRpb25hbGx5IGluY2x1ZGVkIHZpYSB0aGUgX19uZWVkX2dldG9wdF9uZXdsaWIgZmxhZy4gICovCisKKyNpZmRlZiBfX25lZWRfZ2V0b3B0X25ld2xpYgorCisgIC8qIG1hY3JvcyBkZWZpbmVkIGJ5IHRoaXMgaW5jbHVkZSBmaWxlICovCisgICNkZWZpbmUgTk9fQVJHICAgICAgICAgIAlub19hcmd1bWVudAorICAjZGVmaW5lIFJFUVVJUkVEX0FSRyAgICAJcmVxdWlyZWRfYXJndW1lbnQKKyAgI2RlZmluZSBPUFRJT05BTF9BUkcgICAgCW9wdGlvbmFsX2FyZ3VtZW50CisKKyAgLyogVGhlIEdFVE9QVF9EQVRBX0lOSVRJQUxJWkVSIG1hY3JvIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHN0YXRpY2FsbHktCisgICAgIGFsbG9jYXRlZCB2YXJpYWJsZSBvZiB0eXBlIHN0cnVjdCBnZXRvcHRfZGF0YS4gICovCisgICNkZWZpbmUgR0VUT1BUX0RBVEFfSU5JVElBTElaRVIJezAsMCwwLDAsMH0KKworICAvKiBUaGVzZSAjZGVmaW5lcyBhcmUgdG8gbWFrZSBhY2Nlc3NpbmcgdGhlIHJlZW50cmFudCBmdW5jdGlvbnMgZWFzaWVyLiAgKi8KKyAgI2RlZmluZSBnZXRvcHRfcgkJX19nZXRvcHRfcgorICAjZGVmaW5lIGdldG9wdF9sb25nX3IJCV9fZ2V0b3B0X2xvbmdfcgorICAjZGVmaW5lIGdldG9wdF9sb25nX29ubHlfcglfX2dldG9wdF9sb25nX29ubHlfcgorCisgIC8qIFRoZSBnZXRvcHRfZGF0YSBzdHJ1Y3R1cmUgaXMgZm9yIHJlZW50cmFuY3kuIEl0cyBtZW1iZXJzIGFyZSBzaW1pbGFyIHRvCisgICAgIHRoZSBleHRlcm5hbGx5LWRlZmluZWQgdmFyaWFibGVzLiAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgZ2V0b3B0X2RhdGEKKyAgeworICAgIGNoYXIgKm9wdGFyZzsKKyAgICBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdCwgb3B0d2hlcmU7CisgIH0gZ2V0b3B0X2RhdGE7CisKKyNlbmRpZiAvKiBfX25lZWRfZ2V0b3B0X25ld2xpYiAqLworCisgIC8qIGV4dGVybmFsbHktZGVmaW5lZCB2YXJpYWJsZXMgKi8KKyAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyAgZXh0ZXJuIGludCBvcHRpbmQ7CisgIGV4dGVybiBpbnQgb3B0ZXJyOworICBleHRlcm4gaW50IG9wdG9wdDsKKworICAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCisgIGludCBfRVhGVU4gKGdldG9wdCwKKwkgICAgICAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgX19hcmd2W10sIGNvbnN0IGNoYXIgKl9fb3B0c3RyaW5nKSk7CisKKyAgaW50IF9FWEZVTiAoZ2V0b3B0X2xvbmcsCisJICAgICAgKGludCBfX2FyZ2MsIGNoYXIgKmNvbnN0IF9fYXJndltdLCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKwkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqIF9fbG9uZ29wdHMsIGludCAqX19sb25naW5kKSk7CisKKyAgaW50IF9FWEZVTiAoZ2V0b3B0X2xvbmdfb25seSwKKwkgICAgICAoaW50IF9fYXJnYywgY2hhciAqY29uc3QgX19hcmd2W10sIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICogX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQpKTsKKworI2lmZGVmIF9fbmVlZF9nZXRvcHRfbmV3bGliCisgIGludCBfRVhGVU4gKF9fZ2V0b3B0X3IsCisJICAgICAgKGludCBfX2FyZ2MsIGNoYXIgKmNvbnN0IF9fYXJndltdLCBjb25zdCBjaGFyICpfX29wdHN0cmluZywKKwkgICAgICAgc3RydWN0IGdldG9wdF9kYXRhICogX19kYXRhKSk7CisKKyAgaW50IF9FWEZVTiAoX19nZXRvcHRfbG9uZ19yLAorCSAgICAgIChpbnQgX19hcmdjLCBjaGFyICpjb25zdCBfX2FyZ3ZbXSwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiBfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKwkgICAgICAgc3RydWN0IGdldG9wdF9kYXRhICogX19kYXRhKSk7CisKKyAgaW50IF9FWEZVTiAoX19nZXRvcHRfbG9uZ19vbmx5X3IsCisJICAgICAgKGludCBfX2FyZ2MsIGNoYXIgKmNvbnN0IF9fYXJndltdLCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKwkgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqIF9fbG9uZ29wdHMsIGludCAqX19sb25naW5kLAorCSAgICAgICBzdHJ1Y3QgZ2V0b3B0X2RhdGEgKiBfX2RhdGEpKTsKKyNlbmRpZiAvKiBfX25lZWRfZ2V0b3B0X25ld2xpYiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK307CisKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAgKi8KKworI2VuZGlmIC8qIEdFVE9QVF9IICovCisKKy8qIEVORCBPRiBGSUxFIGdldG9wdC5oICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZ2xvYi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2dsb2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzM1MTM1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2dsb2IuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBHdWlkbyB2YW4gUm9zc3VtLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpZ2xvYi5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICogJEZyZWVCU0Q6IHNyYy9pbmNsdWRlL2dsb2IuaCx2IDEuNiAyMDAyLzAzLzIzIDE3OjI0OjUzIGltcCBFeHAgJAorICovCisKKyNpZm5kZWYgX0dMT0JfSF8KKyNkZWZpbmUJX0dMT0JfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitzdHJ1Y3Qgc3RhdDsKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgZ2xfcGF0aGM7CQkvKiBDb3VudCBvZiB0b3RhbCBwYXRocyBzbyBmYXIuICovCisJaW50IGdsX21hdGNoYzsJCS8qIENvdW50IG9mIHBhdGhzIG1hdGNoaW5nIHBhdHRlcm4uICovCisJaW50IGdsX29mZnM7CQkvKiBSZXNlcnZlZCBhdCBiZWdpbm5pbmcgb2YgZ2xfcGF0aHYuICovCisJaW50IGdsX2ZsYWdzOwkJLyogQ29weSBvZiBmbGFncyBwYXJhbWV0ZXIgdG8gZ2xvYi4gKi8KKwljaGFyICoqZ2xfcGF0aHY7CS8qIExpc3Qgb2YgcGF0aHMgbWF0Y2hpbmcgcGF0dGVybi4gKi8KKwkJCQkvKiBDb3B5IG9mIGVycmZ1bmMgcGFyYW1ldGVyIHRvIGdsb2IuICovCisJaW50ICgqZ2xfZXJyZnVuYykoY29uc3QgY2hhciAqLCBpbnQpOworCisJLyoKKwkgKiBBbHRlcm5hdGUgZmlsZXN5c3RlbSBhY2Nlc3MgbWV0aG9kcyBmb3IgZ2xvYjsgcmVwbGFjZW1lbnQKKwkgKiB2ZXJzaW9ucyBvZiBjbG9zZWRpcigzKSwgcmVhZGRpcigzKSwgb3BlbmRpcigzKSwgc3RhdCgyKQorCSAqIGFuZCBsc3RhdCgyKS4KKwkgKi8KKwl2b2lkICgqZ2xfY2xvc2VkaXIpKHZvaWQgKik7CisJc3RydWN0IGRpcmVudCAqKCpnbF9yZWFkZGlyKSh2b2lkICopOworCXZvaWQgKigqZ2xfb3BlbmRpcikoY29uc3QgY2hhciAqKTsKKwlpbnQgKCpnbF9sc3RhdCkoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKKwlpbnQgKCpnbF9zdGF0KShjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOworfSBnbG9iX3Q7CisKKyNkZWZpbmUJR0xPQl9BUFBFTkQJMHgwMDAxCS8qIEFwcGVuZCB0byBvdXRwdXQgZnJvbSBwcmV2aW91cyBjYWxsLiAqLworI2RlZmluZQlHTE9CX0RPT0ZGUwkweDAwMDIJLyogVXNlIGdsX29mZnMuICovCisjZGVmaW5lCUdMT0JfRVJSCTB4MDAwNAkvKiBSZXR1cm4gb24gZXJyb3IuICovCisjZGVmaW5lCUdMT0JfTUFSSwkweDAwMDgJLyogQXBwZW5kIC8gdG8gbWF0Y2hpbmcgZGlyZWN0b3JpZXMuICovCisjZGVmaW5lCUdMT0JfTk9DSEVDSwkweDAwMTAJLyogUmV0dXJuIHBhdHRlcm4gaXRzZWxmIGlmIG5vdGhpbmcgbWF0Y2hlcy4gKi8KKyNkZWZpbmUJR0xPQl9OT1NPUlQJMHgwMDIwCS8qIERvbid0IHNvcnQuICovCisKKyNkZWZpbmUJR0xPQl9BTFRESVJGVU5DCTB4MDA0MAkvKiBVc2UgYWx0ZXJuYXRlbHkgc3BlY2lmaWVkIGRpcmVjdG9yeSBmdW5jcy4gKi8KKyNkZWZpbmUJR0xPQl9CUkFDRQkweDAwODAJLyogRXhwYW5kIGJyYWNlcyBhbGEgY3NoLiAqLworI2RlZmluZQlHTE9CX01BR0NIQVIJMHgwMTAwCS8qIFBhdHRlcm4gaGFkIGdsb2JiaW5nIGNoYXJhY3RlcnMuICovCisjZGVmaW5lCUdMT0JfTk9NQUdJQwkweDAyMDAJLyogR0xPQl9OT0NIRUNLIHdpdGhvdXQgbWFnaWMgY2hhcnMgKGNzaCkuICovCisjZGVmaW5lCUdMT0JfUVVPVEUJMHgwNDAwCS8qIFF1b3RlIHNwZWNpYWwgY2hhcnMgd2l0aCBcLiAqLworI2RlZmluZQlHTE9CX1RJTERFCTB4MDgwMAkvKiBFeHBhbmQgdGlsZGUgbmFtZXMgZnJvbSB0aGUgcGFzc3dkIGZpbGUuICovCisjZGVmaW5lCUdMT0JfTElNSVQJMHgxMDAwCS8qIGxpbWl0IG51bWJlciBvZiByZXR1cm5lZCBwYXRocyAqLworCisvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhpcyBpcyB0aGUgb2xkIG5hbWUgZm9yIHRoaXMgb3B0aW9uICovCisjZGVmaW5lIEdMT0JfTUFYUEFUSAlHTE9CX0xJTUlUCisKKyNkZWZpbmUJR0xPQl9OT1NQQUNFCSgtMSkJLyogTWFsbG9jIGNhbGwgZmFpbGVkLiAqLworI2RlZmluZQlHTE9CX0FCRU5ECSgtMikJLyogVW5pZ25vcmVkIGVycm9yLiAqLworCitfX0JFR0lOX0RFQ0xTCitpbnQJZ2xvYihjb25zdCBjaGFyICosIGludCwgaW50ICgqKShjb25zdCBjaGFyICosIGludCksIGdsb2JfdCAqKTsKK3ZvaWQJZ2xvYmZyZWUoZ2xvYl90ICopOworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfR0xPQl9IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2dycC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2dycC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzNlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvZ3JwLmgKQEAgLTAsMCArMSw5NCBAQAorLyoJJE5ldEJTRDogZ3JwLmgsdiAxLjcgMTk5NS8wNC8yOSAwNTozMDo0MCBjZ2QgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylncnAuaAk4LjIgKEJlcmtlbGV5KSAxLzIxLzk0CisgKi8KKworI2lmbmRlZiBfR1JQX0hfCisjZGVmaW5lCV9HUlBfSF8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9fQ1lHV0lOX18KKyNpbmNsdWRlIDxjeWd3aW4vZ3JwLmg+CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9QT1NJWF9TT1VSQ0UpICYmICFkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpCisjZGVmaW5lCV9QQVRIX0dST1VQCQkiL2V0Yy9ncm91cCIKKyNlbmRpZgorCitzdHJ1Y3QgZ3JvdXAgeworCWNoYXIJKmdyX25hbWU7CQkvKiBncm91cCBuYW1lICovCisJY2hhcgkqZ3JfcGFzc3dkOwkJLyogZ3JvdXAgcGFzc3dvcmQgKi8KKwlnaWRfdAlncl9naWQ7CQkJLyogZ3JvdXAgaWQgKi8KKwljaGFyCSoqZ3JfbWVtOwkJLyogZ3JvdXAgbWVtYmVycyAqLworfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZuZGVmIF9fSU5TSURFX0NZR1dJTl9fCitzdHJ1Y3QgZ3JvdXAJKmdldGdyZ2lkIChnaWRfdCk7CitzdHJ1Y3QgZ3JvdXAJKmdldGdybmFtIChjb25zdCBjaGFyICopOworaW50CQkgZ2V0Z3JuYW1fciAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZ3JvdXAgKiwKKwkJCWNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgZ3JvdXAgKiopOworaW50CQkgZ2V0Z3JnaWRfciAoZ2lkX3QsIHN0cnVjdCBncm91cCAqLAorCQkJY2hhciAqLCBzaXplX3QsIHN0cnVjdCBncm91cCAqKik7CisjaWZuZGVmIF9QT1NJWF9TT1VSQ0UKK3N0cnVjdCBncm91cAkqZ2V0Z3JlbnQgKHZvaWQpOwordm9pZAkJIHNldGdyZW50ICh2b2lkKTsKK3ZvaWQJCSBlbmRncmVudCAodm9pZCk7CisjaWZuZGVmIF9fQ1lHV0lOX18KK3ZvaWQJCSBzZXRncmZpbGUgKGNvbnN0IGNoYXIgKik7CisjZW5kaWYgLyogIV9fQ1lHV0lOX18gKi8KKyNpZm5kZWYgX1hPUEVOX1NPVVJDRQorI2lmbmRlZiBfX0NZR1dJTl9fCitjaGFyCQkqZ3JvdXBfZnJvbV9naWQgKGdpZF90LCBpbnQpOworaW50CQkgc2V0Z3JvdXBlbnQgKGludCk7CisjZW5kaWYgLyogIV9fQ1lHV0lOX18gKi8KK2ludAkJIGluaXRncm91cHMgKGNvbnN0IGNoYXIgKiwgZ2lkX3QpOworI2VuZGlmIC8qICFfWE9QRU5fU09VUkNFICovCisjZW5kaWYgLyogIV9QT1NJWF9TT1VSQ0UgKi8KKyNlbmRpZiAvKiAhX19JTlNJREVfQ1lHV0lOX18gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qICFfR1JQX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvaWNvbnYuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9pY29udi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTI4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvaWNvbnYuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQsIEFydGVtIEIuIEJpdHl1Y2tpeSwgU29mdE1pbmUgQ29ycG9yYXRpb24uCisgKiBSaWdodHMgdHJhbnNmZXJyZWQgdG8gRnJhbmtsaW4gRWxlY3Ryb25pYyBQdWJsaXNoZXJzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9JQ09OVl9IXworI2RlZmluZSBfSUNPTlZfSF8KKworI2luY2x1ZGUgPF9hbnNpLmg+CisjaW5jbHVkZSA8cmVlbnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+CisKKy8qIGljb252X3Q6IGNoYXJzZXQgY29udmVyc2lvbiBkZXNjcmlwdG9yIHR5cGUgKi8KK3R5cGVkZWYgX2ljb252X3QgaWNvbnZfdDsKKworX0JFR0lOX1NURF9DCisKKyNpZm5kZWYgX1JFRU5UX09OTFkKK2ljb252X3QKK19FWEZVTihpY29udl9vcGVuLCAoX0NPTlNUIGNoYXIgKiwgX0NPTlNUIGNoYXIgKikpOworCitzaXplX3QKK19FWEZVTihpY29udiwgKGljb252X3QsIGNoYXIgKiosIHNpemVfdCAqLCBjaGFyICoqLCBzaXplX3QgKikpOworCitpbnQKK19FWEZVTihpY29udl9jbG9zZSwgKGljb252X3QpKTsKKyNlbmRpZgorCitpY29udl90CitfRVhGVU4oX2ljb252X29wZW5fciwgKHN0cnVjdCBfcmVlbnQgKiwgX0NPTlNUIGNoYXIgKiwgX0NPTlNUIGNoYXIgKikpOworCitzaXplX3QKK19FWEZVTihfaWNvbnZfciwgKHN0cnVjdCBfcmVlbnQgKiwgaWNvbnZfdCwgX0NPTlNUIGNoYXIgKiosCisgICAgICAgICAgICAgICAgICBzaXplX3QgKiwgY2hhciAqKiwgc2l6ZV90ICopKTsKKworaW50CitfRVhGVU4oX2ljb252X2Nsb3NlX3IsIChzdHJ1Y3QgX3JlZW50ICosIGljb252X3QpKTsKKworX0VORF9TVERfQworCisjZW5kaWYgLyogI2lmbmRlZiBfSUNPTlZfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9pZWVlZnAuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9pZWVlZnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjA2ZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2llZWVmcC5oCkBAIC0wLDAgKzEsMjU2IEBACisjaWZuZGVmIF9JRUVFX0ZQX0hfCisjZGVmaW5lIF9JRUVFX0ZQX0hfCisKKyNpbmNsdWRlICJfYW5zaS5oIgorCisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4KKworX0JFR0lOX1NURF9DCisKKy8qIEZJWE1FIEZJWE1FIEZJWE1FOgorICAgTmVpdGhlciBvZiBfX2llZWVfe2Zsb2F0LGRvdWJsZX1fc2hhcGVfdGFwZSBzZWVtIHRvIGJlIHVzZWQgYW55d2hlcmUKKyAgIGV4Y2VwdCBpbiBsaWJtL3Rlc3QuICBJZiB0aGF0IGlzIHRoZSBjYXNlLCBwbGVhc2UgZGVsZXRlIHRoZXNlIGZyb20gaGVyZS4KKyAgIElmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2UgaW5zZXJ0IGRvY3VtZW50YXRpb24gaGVyZSBkZXNjcmliaW5nIHdoeQorICAgdGhleSdyZSBuZWVkZWQuICAqLworCisjaWZkZWYgX19JRUVFX0JJR19FTkRJQU4KKwordHlwZWRlZiB1bmlvbiAKK3sKKyAgZG91YmxlIHZhbHVlOworICBzdHJ1Y3QgCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiA6IDE7CisgICAgdW5zaWduZWQgaW50IGV4cG9uZW50OiAxMTsKKyAgICB1bnNpZ25lZCBpbnQgZnJhY3Rpb24wOjQ7CisgICAgdW5zaWduZWQgaW50IGZyYWN0aW9uMToxNjsKKyAgICB1bnNpZ25lZCBpbnQgZnJhY3Rpb24yOjE2OworICAgIHVuc2lnbmVkIGludCBmcmFjdGlvbjM6MTY7CisgICAgCisgIH0gbnVtYmVyOworICBzdHJ1Y3QgCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiA6IDE7CisgICAgdW5zaWduZWQgaW50IGV4cG9uZW50OiAxMTsKKyAgICB1bnNpZ25lZCBpbnQgcXVpZXQ6MTsKKyAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24wOjM7CisgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uMToxNjsKKyAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24yOjE2OworICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbjM6MTY7CisgIH0gbmFuOworICBzdHJ1Y3QgCisgIHsKKyAgICB1bnNpZ25lZCBsb25nIG1zdzsKKyAgICB1bnNpZ25lZCBsb25nIGxzdzsKKyAgfSBwYXJ0czsKKyAgICBsb25nIGFzbG9uZ1syXTsKK30gX19pZWVlX2RvdWJsZV9zaGFwZV90eXBlOworCisjZW5kaWYKKworI2lmZGVmIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisKK3R5cGVkZWYgdW5pb24gCit7CisgIGRvdWJsZSB2YWx1ZTsKKyAgc3RydWN0IAorICB7CisjaWZkZWYgX19TTUFMTF9CSVRGSUVMRFMKKyAgICB1bnNpZ25lZCBpbnQgZnJhY3Rpb24zOjE2OworICAgIHVuc2lnbmVkIGludCBmcmFjdGlvbjI6MTY7CisgICAgdW5zaWduZWQgaW50IGZyYWN0aW9uMToxNjsKKyAgICB1bnNpZ25lZCBpbnQgZnJhY3Rpb24wOiA0OworI2Vsc2UKKyAgICB1bnNpZ25lZCBpbnQgZnJhY3Rpb24xOjMyOworICAgIHVuc2lnbmVkIGludCBmcmFjdGlvbjA6MjA7CisjZW5kaWYKKyAgICB1bnNpZ25lZCBpbnQgZXhwb25lbnQgOjExOworICAgIHVuc2lnbmVkIGludCBzaWduICAgICA6IDE7CisgIH0gbnVtYmVyOworICBzdHJ1Y3QgCisgIHsKKyNpZmRlZiBfX1NNQUxMX0JJVEZJRUxEUworICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbjM6MTY7CisgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uMjoxNjsKKyAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24xOjE2OworICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbjA6MzsKKyNlbHNlCisgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uMTozMjsKKyAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24wOjE5OworI2VuZGlmCisgICAgdW5zaWduZWQgaW50IHF1aWV0OjE7CisgICAgdW5zaWduZWQgaW50IGV4cG9uZW50OiAxMTsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiA6IDE7CisgIH0gbmFuOworICBzdHJ1Y3QgCisgIHsKKyAgICB1bnNpZ25lZCBsb25nIGxzdzsKKyAgICB1bnNpZ25lZCBsb25nIG1zdzsKKyAgfSBwYXJ0czsKKworICBsb25nIGFzbG9uZ1syXTsKKworfSBfX2llZWVfZG91YmxlX3NoYXBlX3R5cGU7CisKKyNlbmRpZgorCisjaWZkZWYgX19JRUVFX0JJR19FTkRJQU4KKwordHlwZWRlZiB1bmlvbgoreworICBmbG9hdCB2YWx1ZTsKKyAgc3RydWN0IAorICB7CisgICAgdW5zaWduZWQgaW50IHNpZ24gOiAxOworICAgIHVuc2lnbmVkIGludCBleHBvbmVudDogODsKKyAgICB1bnNpZ25lZCBpbnQgZnJhY3Rpb24wOiA3OworICAgIHVuc2lnbmVkIGludCBmcmFjdGlvbjE6IDE2OworICB9IG51bWJlcjsKKyAgc3RydWN0IAorICB7CisgICAgdW5zaWduZWQgaW50IHNpZ246MTsKKyAgICB1bnNpZ25lZCBpbnQgZXhwb25lbnQ6ODsKKyAgICB1bnNpZ25lZCBpbnQgcXVpZXQ6MTsKKyAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24wOjY7CisgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uMToxNjsKKyAgfSBuYW47CisgIGxvbmcgcDE7CisgIAorfSBfX2llZWVfZmxvYXRfc2hhcGVfdHlwZTsKKworI2VuZGlmCisKKyNpZmRlZiBfX0lFRUVfTElUVExFX0VORElBTgorCit0eXBlZGVmIHVuaW9uCit7CisgIGZsb2F0IHZhbHVlOworICBzdHJ1Y3QgCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgZnJhY3Rpb24wOiA3OworICAgIHVuc2lnbmVkIGludCBmcmFjdGlvbjE6IDE2OworICAgIHVuc2lnbmVkIGludCBleHBvbmVudDogODsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiA6IDE7CisgIH0gbnVtYmVyOworICBzdHJ1Y3QgCisgIHsKKyAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24xOjE2OworICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbjA6NjsKKyAgICB1bnNpZ25lZCBpbnQgcXVpZXQ6MTsKKyAgICB1bnNpZ25lZCBpbnQgZXhwb25lbnQ6ODsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbjoxOworICB9IG5hbjsKKyAgbG9uZyBwMTsKKyAgCit9IF9faWVlZV9mbG9hdF9zaGFwZV90eXBlOworCisjZW5kaWYKKworCisKKworCisvKiBGTE9BVElORyBST1VORElORyAqLworCit0eXBlZGVmIGludCBmcF9ybmQ7CisjZGVmaW5lIEZQX1JOIDAgCS8qIFJvdW5kIHRvIG5lYXJlc3QgCQkqLworI2RlZmluZSBGUF9STSAxCQkvKiBSb3VuZCBkb3duIAkJCSovCisjZGVmaW5lIEZQX1JQIDIJCS8qIFJvdW5kIHVwIAkJCSovCisjZGVmaW5lIEZQX1JaIDMJCS8qIFJvdW5kIHRvIHplcm8gKHRydW5hdGUpIAkqLworCitmcF9ybmQgX0VYRlVOKGZwZ2V0cm91bmQsKHZvaWQpKTsKK2ZwX3JuZCBfRVhGVU4oZnBzZXRyb3VuZCwgKGZwX3JuZCkpOworCisvKiBFWENFUFRJT05TICovCisKK3R5cGVkZWYgaW50IGZwX2V4Y2VwdDsKKyNkZWZpbmUgRlBfWF9JTlYgMHgxMAkvKiBJbnZhbGlkIG9wZXJhdGlvbiAJCSovCisjZGVmaW5lIEZQX1hfRFggIDB4ODAJLyogRGl2aWRlIGJ5IHplcm8JCSovCisjZGVmaW5lIEZQX1hfT0ZMIDB4MDQJLyogT3ZlcmZsb3cgZXhjZXB0aW9uCQkqLworI2RlZmluZSBGUF9YX1VGTCAweDAyCS8qIFVuZGVyZmxvdyBleGNlcHRpb24JCSovCisjZGVmaW5lIEZQX1hfSU1QIDB4MDEJLyogaW1wcmVjaXNlIGV4Y2VwdGlvbgkJKi8KKworZnBfZXhjZXB0IF9FWEZVTihmcGdldG1hc2ssKHZvaWQpKTsKK2ZwX2V4Y2VwdCBfRVhGVU4oZnBzZXRtYXNrLChmcF9leGNlcHQpKTsKK2ZwX2V4Y2VwdCBfRVhGVU4oZnBnZXRzdGlja3ksKHZvaWQpKTsKK2ZwX2V4Y2VwdCBfRVhGVU4oZnBzZXRzdGlja3ksIChmcF9leGNlcHQpKTsKKworLyogSU5URUdFUiBST1VORElORyAqLworCit0eXBlZGVmIGludCBmcF9yZGk7CisjZGVmaW5lIEZQX1JESV9UT1ogMAkvKiBSb3VuZCB0byBaZXJvIAkJKi8KKyNkZWZpbmUgRlBfUkRJX1JEICAxCS8qIEZvbGxvdyBmbG9hdCBtb2RlCQkqLworCitmcF9yZGkgX0VYRlVOKGZwZ2V0cm91bmR0b2ksKHZvaWQpKTsKK2ZwX3JkaSBfRVhGVU4oZnBzZXRyb3VuZHRvaSwoZnBfcmRpKSk7CisKKyN1bmRlZiBpc25hbgorI3VuZGVmIGlzaW5mCisKK2ludCBfRVhGVU4oaXNuYW4sIChkb3VibGUpKTsKK2ludCBfRVhGVU4oaXNpbmYsIChkb3VibGUpKTsKK2ludCBfRVhGVU4oZmluaXRlLCAoZG91YmxlKSk7CisKKworCitpbnQgX0VYRlVOKGlzbmFuZiwgKGZsb2F0KSk7CitpbnQgX0VYRlVOKGlzaW5mZiwgKGZsb2F0KSk7CitpbnQgX0VYRlVOKGZpbml0ZWYsIChmbG9hdCkpOworCisjZGVmaW5lIF9fSUVFRV9EQkxfRVhQQklBUyAxMDIzCisjZGVmaW5lIF9fSUVFRV9GTFRfRVhQQklBUyAxMjcKKworI2RlZmluZSBfX0lFRUVfREJMX0VYUExFTiAxMQorI2RlZmluZSBfX0lFRUVfRkxUX0VYUExFTiA4CisKKworI2RlZmluZSBfX0lFRUVfREJMX0ZSQUNMRU4gKDY0IC0gKF9fSUVFRV9EQkxfRVhQTEVOICsgMSkpCisjZGVmaW5lIF9fSUVFRV9GTFRfRlJBQ0xFTiAoMzIgLSAoX19JRUVFX0ZMVF9FWFBMRU4gKyAxKSkKKworI2RlZmluZSBfX0lFRUVfREJMX01BWFBPV1RXTwkoKGRvdWJsZSkoMUwgPDwgMzIgLSAyKSAqICgxTCA8PCAoMzItMTEpIC0gMzIgKyAxKSkKKyNkZWZpbmUgX19JRUVFX0ZMVF9NQVhQT1dUV08JKChmbG9hdCkoMUwgPDwgKDMyLTgpIC0gMSkpCisKKyNkZWZpbmUgX19JRUVFX0RCTF9OQU5fRVhQIDB4N2ZmCisjZGVmaW5lIF9fSUVFRV9GTFRfTkFOX0VYUCAweGZmCisKKyNpZm5kZWYgX19pZWVlZnBfaXNuYW5mCisjZGVmaW5lIF9faWVlZWZwX2lzbmFuZih4KSAoKCgqKGxvbmcgKikmKHgpICYgMHg3ZjgwMDAwMEwpPT0weDdmODAwMDAwTCkgJiYgXAorCQkJICAgICgoKihsb25nICopJih4KSAmIDB4MDA3ZmZmZmZMKSE9MDAwMDAwMDAwMEwpKQorI2VuZGlmCisjZGVmaW5lIGlzbmFuZih4KQlfX2llZWVmcF9pc25hbmYoeCkKKworI2lmbmRlZiBfX2llZWVmcF9pc2luZmYKKyNkZWZpbmUgX19pZWVlZnBfaXNpbmZmKHgpICgoKCoobG9uZyAqKSYoeCkgJiAweDdmODAwMDAwTCk9PTB4N2Y4MDAwMDBMKSAmJiBcCisJCQkgICAgKCgqKGxvbmcgKikmKHgpICYgMHgwMDdmZmZmZkwpPT0wMDAwMDAwMDAwTCkpCisjZW5kaWYKKyNkZWZpbmUgaXNpbmZmKHgpCV9faWVlZWZwX2lzaW5mZih4KQorCisjaWZuZGVmIF9faWVlZWZwX2Zpbml0ZWYKKyNkZWZpbmUgX19pZWVlZnBfZmluaXRlZih4KSAoKCgqKGxvbmcgKikmKHgpICYgMHg3ZjgwMDAwMEwpIT0weDdmODAwMDAwTCkpCisjZW5kaWYKKyNkZWZpbmUgZmluaXRlZih4KQlfX2llZWVmcF9maW5pdGVmKHgpCisKKyNpZmRlZiBfRE9VQkxFX0lTXzMyQklUUworI3VuZGVmIF9fSUVFRV9EQkxfRVhQQklBUworI2RlZmluZSBfX0lFRUVfREJMX0VYUEJJQVMgX19JRUVFX0ZMVF9FWFBCSUFTCisKKyN1bmRlZiBfX0lFRUVfREJMX0VYUExFTgorI2RlZmluZSBfX0lFRUVfREJMX0VYUExFTiBfX0lFRUVfRkxUX0VYUExFTgorCisjdW5kZWYgX19JRUVFX0RCTF9GUkFDTEVOCisjZGVmaW5lIF9fSUVFRV9EQkxfRlJBQ0xFTiBfX0lFRUVfRkxUX0ZSQUNMRU4KKworI3VuZGVmIF9fSUVFRV9EQkxfTUFYUE9XVFdPCisjZGVmaW5lIF9fSUVFRV9EQkxfTUFYUE9XVFdPIF9fSUVFRV9GTFRfTUFYUE9XVFdPCisKKyN1bmRlZiBfX0lFRUVfREJMX05BTl9FWFAKKyNkZWZpbmUgX19JRUVFX0RCTF9OQU5fRVhQIF9fSUVFRV9GTFRfTkFOX0VYUAorCisjdW5kZWYgX19pZWVlX2RvdWJsZV9zaGFwZV90eXBlCisjZGVmaW5lIF9faWVlZV9kb3VibGVfc2hhcGVfdHlwZSBfX2llZWVfZmxvYXRfc2hhcGVfdHlwZQorCisjZW5kaWYgLyogX0RPVUJMRV9JU18zMkJJVFMgKi8KKworX0VORF9TVERfQworCisjZW5kaWYgLyogX0lFRUVfRlBfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9pbnR0eXBlcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2ludHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzMWUyMQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9pbnR0eXBlcy5oCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IGJ5CisgKiBSYWxmIENvcnNlcGl1cywgVWxtL0dlcm1hbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorICogaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorICovCisKKy8qKgorICogIEBmaWxlICBpbnR0eXBlcy5oCisgKi8KKworI2lmbmRlZiBfSU5UVFlQRVNfSAorI2RlZmluZSBfSU5UVFlQRVNfSAorCisjaW5jbHVkZSA8c3lzL2ZlYXR1cmVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZGVmaW5lIF9fbmVlZF93Y2hhcl90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIERvbid0IHVzZSBfX1NURElOVF9FWFAgdGVzdCBzaW5jZSBHQ0MncyBzdGRpbnQuaCBwcm92aWRlcyBkaWZmZXJlbnQKKyAgIG1hY3JvcyB0aGFuIG5ld2xpYidzIHN0ZGludC5oLiAqLworI2lmIF9fR05VQ19QUkVSRVEoMywgMikKKyAgI2RlZmluZSBfX0lOVFRZUEVTX0VYUCh4KSBfXyMjeCMjX18KKyNlbHNlCisgICNkZWZpbmUgX19JTlRUWVBFU19FWFAoeCkgeAorICAjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworI2RlZmluZSBfX1NUUklOR0lGWShhKSAjYQorCisvKiA4LWJpdCB0eXBlcyAqLworI2RlZmluZSBfX1BSSTgoeCkgX19TVFJJTkdJRlkoeCkKKyNkZWZpbmUgX19TQ044KHgpIF9fU1RSSU5HSUZZKGhoIyN4KQorCisKKyNkZWZpbmUgUFJJZDgJCV9fUFJJOChkKQorI2RlZmluZSBQUklpOAkJX19QUkk4KGkpCisjZGVmaW5lIFBSSW84CQlfX1BSSTgobykKKyNkZWZpbmUgUFJJdTgJCV9fUFJJOCh1KQorI2RlZmluZSBQUkl4OAkJX19QUkk4KHgpCisjZGVmaW5lIFBSSVg4CQlfX1BSSTgoWCkKKworI2RlZmluZSBTQ05kOAkJX19TQ044KGQpCisjZGVmaW5lIFNDTmk4CQlfX1NDTjgoaSkKKyNkZWZpbmUgU0NObzgJCV9fU0NOOChvKQorI2RlZmluZSBTQ051OAkJX19TQ044KHUpCisjZGVmaW5lIFNDTng4CQlfX1NDTjgoeCkKKworCisjZGVmaW5lIFBSSWRMRUFTVDgJX19QUkk4KGQpCisjZGVmaW5lIFBSSWlMRUFTVDgJX19QUkk4KGkpCisjZGVmaW5lIFBSSW9MRUFTVDgJX19QUkk4KG8pCisjZGVmaW5lIFBSSXVMRUFTVDgJX19QUkk4KHUpCisjZGVmaW5lIFBSSXhMRUFTVDgJX19QUkk4KHgpCisjZGVmaW5lIFBSSVhMRUFTVDgJX19QUkk4KFgpCisKKyNkZWZpbmUgU0NOZExFQVNUOAlfX1NDTjgoZCkKKyNkZWZpbmUgU0NOaUxFQVNUOAlfX1NDTjgoaSkKKyNkZWZpbmUgU0NOb0xFQVNUOAlfX1NDTjgobykKKyNkZWZpbmUgU0NOdUxFQVNUOAlfX1NDTjgodSkKKyNkZWZpbmUgU0NOeExFQVNUOAlfX1NDTjgoeCkKKworCisjZGVmaW5lIFBSSWRGQVNUOAlfX1BSSTgoZCkKKyNkZWZpbmUgUFJJaUZBU1Q4CV9fUFJJOChpKQorI2RlZmluZSBQUklvRkFTVDgJX19QUkk4KG8pCisjZGVmaW5lIFBSSXVGQVNUOAlfX1BSSTgodSkKKyNkZWZpbmUgUFJJeEZBU1Q4CV9fUFJJOCh4KQorI2RlZmluZSBQUklYRkFTVDgJX19QUkk4KFgpCisKKyNkZWZpbmUgU0NOZEZBU1Q4CV9fU0NOOChkKQorI2RlZmluZSBTQ05pRkFTVDgJX19TQ044KGkpCisjZGVmaW5lIFNDTm9GQVNUOAlfX1NDTjgobykKKyNkZWZpbmUgU0NOdUZBU1Q4CV9fU0NOOCh1KQorI2RlZmluZSBTQ054RkFTVDgJX19TQ044KHgpCisKKy8qIDE2LWJpdCB0eXBlcyAqLworI2RlZmluZSBfX1BSSTE2KHgpIF9fU1RSSU5HSUZZKHgpCisjZGVmaW5lIF9fU0NOMTYoeCkgX19TVFJJTkdJRlkoaCMjeCkKKworCisjZGVmaW5lIFBSSWQxNgkJX19QUkkxNihkKQorI2RlZmluZSBQUklpMTYJCV9fUFJJMTYoaSkKKyNkZWZpbmUgUFJJbzE2CQlfX1BSSTE2KG8pCisjZGVmaW5lIFBSSXUxNgkJX19QUkkxNih1KQorI2RlZmluZSBQUkl4MTYJCV9fUFJJMTYoeCkKKyNkZWZpbmUgUFJJWDE2CQlfX1BSSTE2KFgpCisKKyNkZWZpbmUgU0NOZDE2CQlfX1NDTjE2KGQpCisjZGVmaW5lIFNDTmkxNgkJX19TQ04xNihpKQorI2RlZmluZSBTQ05vMTYJCV9fU0NOMTYobykKKyNkZWZpbmUgU0NOdTE2CQlfX1NDTjE2KHUpCisjZGVmaW5lIFNDTngxNgkJX19TQ04xNih4KQorCisKKyNkZWZpbmUgUFJJZExFQVNUMTYJX19QUkkxNihkKQorI2RlZmluZSBQUklpTEVBU1QxNglfX1BSSTE2KGkpCisjZGVmaW5lIFBSSW9MRUFTVDE2CV9fUFJJMTYobykKKyNkZWZpbmUgUFJJdUxFQVNUMTYJX19QUkkxNih1KQorI2RlZmluZSBQUkl4TEVBU1QxNglfX1BSSTE2KHgpCisjZGVmaW5lIFBSSVhMRUFTVDE2CV9fUFJJMTYoWCkKKworI2RlZmluZSBTQ05kTEVBU1QxNglfX1NDTjE2KGQpCisjZGVmaW5lIFNDTmlMRUFTVDE2CV9fU0NOMTYoaSkKKyNkZWZpbmUgU0NOb0xFQVNUMTYJX19TQ04xNihvKQorI2RlZmluZSBTQ051TEVBU1QxNglfX1NDTjE2KHUpCisjZGVmaW5lIFNDTnhMRUFTVDE2CV9fU0NOMTYoeCkKKworCisjZGVmaW5lIFBSSWRGQVNUMTYJX19QUkkxNihkKQorI2RlZmluZSBQUklpRkFTVDE2CV9fUFJJMTYoaSkKKyNkZWZpbmUgUFJJb0ZBU1QxNglfX1BSSTE2KG8pCisjZGVmaW5lIFBSSXVGQVNUMTYJX19QUkkxNih1KQorI2RlZmluZSBQUkl4RkFTVDE2CV9fUFJJMTYoeCkKKyNkZWZpbmUgUFJJWEZBU1QxNglfX1BSSTE2KFgpCisKKyNkZWZpbmUgU0NOZEZBU1QxNglfX1NDTjE2KGQpCisjZGVmaW5lIFNDTmlGQVNUMTYJX19TQ04xNihpKQorI2RlZmluZSBTQ05vRkFTVDE2CV9fU0NOMTYobykKKyNkZWZpbmUgU0NOdUZBU1QxNglfX1NDTjE2KHUpCisjZGVmaW5lIFNDTnhGQVNUMTYJX19TQ04xNih4KQorCisvKiAzMi1iaXQgdHlwZXMgKi8KKyNpZiBfX2hhdmVfbG9uZzMyCisjZGVmaW5lIF9fUFJJMzIoeCkgX19TVFJJTkdJRlkobCMjeCkKKyNkZWZpbmUgX19TQ04zMih4KSBfX1NUUklOR0lGWShsIyN4KQorI2Vsc2UKKyNkZWZpbmUgX19QUkkzMih4KSBfX1NUUklOR0lGWSh4KQorI2RlZmluZSBfX1NDTjMyKHgpIF9fU1RSSU5HSUZZKHgpCisjZW5kaWYKKworI2RlZmluZSBQUklkMzIJCV9fUFJJMzIoZCkKKyNkZWZpbmUgUFJJaTMyCQlfX1BSSTMyKGkpCisjZGVmaW5lIFBSSW8zMgkJX19QUkkzMihvKQorI2RlZmluZSBQUkl1MzIJCV9fUFJJMzIodSkKKyNkZWZpbmUgUFJJeDMyCQlfX1BSSTMyKHgpCisjZGVmaW5lIFBSSVgzMgkJX19QUkkzMihYKQorCisjZGVmaW5lIFNDTmQzMgkJX19TQ04zMihkKQorI2RlZmluZSBTQ05pMzIJCV9fU0NOMzIoaSkKKyNkZWZpbmUgU0NObzMyCQlfX1NDTjMyKG8pCisjZGVmaW5lIFNDTnUzMgkJX19TQ04zMih1KQorI2RlZmluZSBTQ054MzIJCV9fU0NOMzIoeCkKKworCisjZGVmaW5lIFBSSWRMRUFTVDMyCV9fUFJJMzIoZCkKKyNkZWZpbmUgUFJJaUxFQVNUMzIJX19QUkkzMihpKQorI2RlZmluZSBQUklvTEVBU1QzMglfX1BSSTMyKG8pCisjZGVmaW5lIFBSSXVMRUFTVDMyCV9fUFJJMzIodSkKKyNkZWZpbmUgUFJJeExFQVNUMzIJX19QUkkzMih4KQorI2RlZmluZSBQUklYTEVBU1QzMglfX1BSSTMyKFgpCisKKyNkZWZpbmUgU0NOZExFQVNUMzIJX19TQ04zMihkKQorI2RlZmluZSBTQ05pTEVBU1QzMglfX1NDTjMyKGkpCisjZGVmaW5lIFNDTm9MRUFTVDMyCV9fU0NOMzIobykKKyNkZWZpbmUgU0NOdUxFQVNUMzIJX19TQ04zMih1KQorI2RlZmluZSBTQ054TEVBU1QzMglfX1NDTjMyKHgpCisKKworI2RlZmluZSBQUklkRkFTVDMyCV9fUFJJMzIoZCkKKyNkZWZpbmUgUFJJaUZBU1QzMglfX1BSSTMyKGkpCisjZGVmaW5lIFBSSW9GQVNUMzIJX19QUkkzMihvKQorI2RlZmluZSBQUkl1RkFTVDMyCV9fUFJJMzIodSkKKyNkZWZpbmUgUFJJeEZBU1QzMglfX1BSSTMyKHgpCisjZGVmaW5lIFBSSVhGQVNUMzIJX19QUkkzMihYKQorCisjZGVmaW5lIFNDTmRGQVNUMzIJX19TQ04zMihkKQorI2RlZmluZSBTQ05pRkFTVDMyCV9fU0NOMzIoaSkKKyNkZWZpbmUgU0NOb0ZBU1QzMglfX1NDTjMyKG8pCisjZGVmaW5lIFNDTnVGQVNUMzIJX19TQ04zMih1KQorI2RlZmluZSBTQ054RkFTVDMyCV9fU0NOMzIoeCkKKworCisvKiA2NC1iaXQgdHlwZXMgKi8KKyNpZiBfX2hhdmVfbG9uZzY0CisjZGVmaW5lIF9fUFJJNjQoeCkgX19TVFJJTkdJRlkobCMjeCkKKyNkZWZpbmUgX19TQ042NCh4KSBfX1NUUklOR0lGWShsIyN4KQorI2VsaWYgX19oYXZlX2xvbmdsb25nNjQKKyNkZWZpbmUgX19QUkk2NCh4KSBfX1NUUklOR0lGWShsbCMjeCkKKyNkZWZpbmUgX19TQ042NCh4KSBfX1NUUklOR0lGWShsbCMjeCkKKyNlbHNlCisjZGVmaW5lIF9fUFJJNjQoeCkgX19TVFJJTkdJRlkoeCkKKyNkZWZpbmUgX19TQ042NCh4KSBfX1NUUklOR0lGWSh4KQorI2VuZGlmCisKKyNkZWZpbmUgUFJJZDY0CQlfX1BSSTY0KGQpCisjZGVmaW5lIFBSSWk2NAkJX19QUkk2NChpKQorI2RlZmluZSBQUklvNjQJCV9fUFJJNjQobykKKyNkZWZpbmUgUFJJdTY0CQlfX1BSSTY0KHUpCisjZGVmaW5lIFBSSXg2NAkJX19QUkk2NCh4KQorI2RlZmluZSBQUklYNjQJCV9fUFJJNjQoWCkKKworI2RlZmluZSBTQ05kNjQJCV9fU0NONjQoZCkKKyNkZWZpbmUgU0NOaTY0CQlfX1NDTjY0KGkpCisjZGVmaW5lIFNDTm82NAkJX19TQ042NChvKQorI2RlZmluZSBTQ051NjQJCV9fU0NONjQodSkKKyNkZWZpbmUgU0NOeDY0CQlfX1NDTjY0KHgpCisKKyNpZiBfX2ludDY0X3RfZGVmaW5lZAorI2RlZmluZSBQUklkTEVBU1Q2NAlfX1BSSTY0KGQpCisjZGVmaW5lIFBSSWlMRUFTVDY0CV9fUFJJNjQoaSkKKyNkZWZpbmUgUFJJb0xFQVNUNjQJX19QUkk2NChvKQorI2RlZmluZSBQUkl1TEVBU1Q2NAlfX1BSSTY0KHUpCisjZGVmaW5lIFBSSXhMRUFTVDY0CV9fUFJJNjQoeCkKKyNkZWZpbmUgUFJJWExFQVNUNjQJX19QUkk2NChYKQorCisjZGVmaW5lIFNDTmRMRUFTVDY0CV9fU0NONjQoZCkKKyNkZWZpbmUgU0NOaUxFQVNUNjQJX19TQ042NChpKQorI2RlZmluZSBTQ05vTEVBU1Q2NAlfX1NDTjY0KG8pCisjZGVmaW5lIFNDTnVMRUFTVDY0CV9fU0NONjQodSkKKyNkZWZpbmUgU0NOeExFQVNUNjQJX19TQ042NCh4KQorCisKKyNkZWZpbmUgUFJJZEZBU1Q2NAlfX1BSSTY0KGQpCisjZGVmaW5lIFBSSWlGQVNUNjQJX19QUkk2NChpKQorI2RlZmluZSBQUklvRkFTVDY0CV9fUFJJNjQobykKKyNkZWZpbmUgUFJJdUZBU1Q2NAlfX1BSSTY0KHUpCisjZGVmaW5lIFBSSXhGQVNUNjQJX19QUkk2NCh4KQorI2RlZmluZSBQUklYRkFTVDY0CV9fUFJJNjQoWCkKKworI2RlZmluZSBTQ05kRkFTVDY0CV9fU0NONjQoZCkKKyNkZWZpbmUgU0NOaUZBU1Q2NAlfX1NDTjY0KGkpCisjZGVmaW5lIFNDTm9GQVNUNjQJX19TQ042NChvKQorI2RlZmluZSBTQ051RkFTVDY0CV9fU0NONjQodSkKKyNkZWZpbmUgU0NOeEZBU1Q2NAlfX1NDTjY0KHgpCisjZW5kaWYKKworLyogbWF4LWJpdCB0eXBlcyAqLworI2lmIF9faGF2ZV9sb25nNjQKKyNkZWZpbmUgX19QUklNQVgoeCkgX19TVFJJTkdJRlkobCMjeCkKKyNkZWZpbmUgX19TQ05NQVgoeCkgX19TVFJJTkdJRlkobCMjeCkKKyNlbGlmIF9faGF2ZV9sb25nbG9uZzY0CisjZGVmaW5lIF9fUFJJTUFYKHgpIF9fU1RSSU5HSUZZKGxsIyN4KQorI2RlZmluZSBfX1NDTk1BWCh4KSBfX1NUUklOR0lGWShsbCMjeCkKKyNlbHNlCisjZGVmaW5lIF9fUFJJTUFYKHgpIF9fU1RSSU5HSUZZKHgpCisjZGVmaW5lIF9fU0NOTUFYKHgpIF9fU1RSSU5HSUZZKHgpCisjZW5kaWYKKworI2RlZmluZSBQUklkTUFYCQlfX1BSSU1BWChkKQorI2RlZmluZSBQUklpTUFYCQlfX1BSSU1BWChpKQorI2RlZmluZSBQUklvTUFYCQlfX1BSSU1BWChvKQorI2RlZmluZSBQUkl1TUFYCQlfX1BSSU1BWCh1KQorI2RlZmluZSBQUkl4TUFYCQlfX1BSSU1BWCh4KQorI2RlZmluZSBQUklYTUFYCQlfX1BSSU1BWChYKQorCisjZGVmaW5lIFNDTmRNQVgJCV9fU0NOTUFYKGQpCisjZGVmaW5lIFNDTmlNQVgJCV9fU0NOTUFYKGkpCisjZGVmaW5lIFNDTm9NQVgJCV9fU0NOTUFYKG8pCisjZGVmaW5lIFNDTnVNQVgJCV9fU0NOTUFYKHUpCisjZGVmaW5lIFNDTnhNQVgJCV9fU0NOTUFYKHgpCisKKy8qIHB0ciB0eXBlcyAqLworI2lmIFBUUkRJRkZfTUFYIDw9IF9fSU5UVFlQRVNfRVhQKElOVF9NQVgpCisjIGRlZmluZSBfX1BSSVBUUih4KSBfX1NUUklOR0lGWSh4KQorIyBkZWZpbmUgX19TQ05QVFIoeCkgX19TVFJJTkdJRlkoeCkKKyNlbGlmIFBUUkRJRkZfTUFYIDw9IF9fSU5UVFlQRVNfRVhQKExPTkdfTUFYKSB8fCAhZGVmaW5lZChfX2hhdmVfbG9uZ2xvbmc2NCkKKyMgZGVmaW5lIF9fUFJJUFRSKHgpIF9fU1RSSU5HSUZZKGwjI3gpCisjIGRlZmluZSBfX1NDTlBUUih4KSBfX1NUUklOR0lGWShsIyN4KQorI2Vsc2UKKyMgZGVmaW5lIF9fUFJJUFRSKHgpIF9fU1RSSU5HSUZZKGxsIyN4KQorIyBkZWZpbmUgX19TQ05QVFIoeCkgX19TVFJJTkdJRlkobGwjI3gpCisjZW5kaWYKKworI2RlZmluZSBQUklkUFRSCQlfX1BSSVBUUihkKQorI2RlZmluZSBQUklpUFRSCQlfX1BSSVBUUihpKQorI2RlZmluZSBQUklvUFRSCQlfX1BSSVBUUihvKQorI2RlZmluZSBQUkl1UFRSCQlfX1BSSVBUUih1KQorI2RlZmluZSBQUkl4UFRSCQlfX1BSSVBUUih4KQorI2RlZmluZSBQUklYUFRSCQlfX1BSSVBUUihYKQorCisjZGVmaW5lIFNDTmRQVFIJCV9fU0NOUFRSKGQpCisjZGVmaW5lIFNDTmlQVFIJCV9fU0NOUFRSKGkpCisjZGVmaW5lIFNDTm9QVFIJCV9fU0NOUFRSKG8pCisjZGVmaW5lIFNDTnVQVFIJCV9fU0NOUFRSKHUpCisjZGVmaW5lIFNDTnhQVFIJCV9fU0NOUFRSKHgpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnRtYXhfdAlxdW90OworICBpbnRtYXhfdAlyZW07Cit9IGltYXhkaXZfdDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitleHRlcm4gaW50bWF4X3QgIGltYXhhYnMoaW50bWF4X3Qgaik7CitleHRlcm4gaW1heGRpdl90IGltYXhkaXYoaW50bWF4X3QgbnVtZXIsIGludG1heF90IGRlbm9tZXIpOworZXh0ZXJuIGludG1heF90ICBzdHJ0b2ltYXgoY29uc3QgY2hhciAqX19yZXN0cmljdCwgY2hhciAqKl9fcmVzdHJpY3QsIGludCk7CitleHRlcm4gdWludG1heF90IHN0cnRvdW1heChjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBjaGFyICoqX19yZXN0cmljdCwgaW50KTsKK2V4dGVybiBpbnRtYXhfdCAgd2NzdG9pbWF4KGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIHdjaGFyX3QgKipfX3Jlc3RyaWN0LCBpbnQpOworZXh0ZXJuIHVpbnRtYXhfdCB3Y3N0b3VtYXgoY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgd2NoYXJfdCAqKl9fcmVzdHJpY3QsIGludCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2xhbmdpbmZvLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbGFuZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDQwYWRlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2xhbmdpbmZvLmgKQEAgLTAsMCArMSwzMTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAxIEFsZXhleSBaZWxraW4gPHBoYW50b21ARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBzcmMvaW5jbHVkZS9sYW5naW5mby5oLHYgMS41IDIwMDIvMDMvMjMgMTc6MjQ6NTMgaW1wIEV4cCAkCisgKi8KKworI2lmbmRlZiBfTEFOR0lORk9fSF8KKyNkZWZpbmUJX0xBTkdJTkZPX0hfCisKKyNpbmNsdWRlIDxuZXdsaWIuaD4KKyNpbmNsdWRlIDxzeXMvY29uZmlnLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK3R5cGVkZWYgaW50IG5sX2l0ZW07CisKK2VudW0gX19ubF9pdGVtCit7CisgIC8qIFBPU0lYIGFuZCBCU0QgZGVmaW5lZCBpdGVtcyBoYXZlIHRvIHN0aWNrIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKyAgICAgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KKyAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSA9IDAsCS8qIGNvZGVzZXQgbmFtZSAqLworI2RlZmluZSBDT0RFU0VUIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUKKyAgRF9UX0ZNVCwJCQkvKiBzdHJpbmcgZm9yIGZvcm1hdHRpbmcgZGF0ZSBhbmQgdGltZSAqLworI2RlZmluZSBEX1RfRk1UIERfVF9GTVQKKyAgRF9GTVQsCQkJLyogZGF0ZSBmb3JtYXQgc3RyaW5nICovCisjZGVmaW5lIERfRk1UIERfRk1UCisgIFRfRk1ULAkJCS8qIHRpbWUgZm9ybWF0IHN0cmluZyAqLworI2RlZmluZSBUX0ZNVCBUX0ZNVAorICBUX0ZNVF9BTVBNLAkJCS8qIGEubS4gb3IgcC5tLiB0aW1lIGZvcm1hdHRpbmcgc3RyaW5nICovCisjZGVmaW5lIFRfRk1UX0FNUE0gVF9GTVRfQU1QTQorICBBTV9TVFIsCQkJLyogQW50ZSBNZXJpZGlhbiBhZmZpeCAqLworI2RlZmluZSBBTV9TVFIgQU1fU1RSCisgIFBNX1NUUiwJCQkvKiBQb3N0IE1lcmlkaWFuIGFmZml4ICovCisjZGVmaW5lIFBNX1NUUiBQTV9TVFIKKworLyogd2VlayBkYXkgbmFtZXMgKi8KKyAgREFZXzEsCisjZGVmaW5lIERBWV8xIERBWV8xCisgIERBWV8yLAorI2RlZmluZSBEQVlfMiBEQVlfMgorICBEQVlfMywKKyNkZWZpbmUgREFZXzMgREFZXzMKKyAgREFZXzQsCisjZGVmaW5lIERBWV80IERBWV80CisgIERBWV81LAorI2RlZmluZSBEQVlfNSBEQVlfNQorICBEQVlfNiwKKyNkZWZpbmUgREFZXzYgREFZXzYKKyAgREFZXzcsCisjZGVmaW5lIERBWV83IERBWV83CisKKy8qIGFiYnJldmlhdGVkIHdlZWsgZGF5IG5hbWVzICovCisgIEFCREFZXzEsCisjZGVmaW5lIEFCREFZXzEgQUJEQVlfMQorICBBQkRBWV8yLAorI2RlZmluZSBBQkRBWV8yIEFCREFZXzIKKyAgQUJEQVlfMywKKyNkZWZpbmUgQUJEQVlfMyBBQkRBWV8zCisgIEFCREFZXzQsCisjZGVmaW5lIEFCREFZXzQgQUJEQVlfNAorICBBQkRBWV81LAorI2RlZmluZSBBQkRBWV81IEFCREFZXzUKKyAgQUJEQVlfNiwKKyNkZWZpbmUgQUJEQVlfNiBBQkRBWV82CisgIEFCREFZXzcsCisjZGVmaW5lIEFCREFZXzcgQUJEQVlfNworCisvKiBtb250aCBuYW1lcyAqLworICBNT05fMSwKKyNkZWZpbmUgTU9OXzEgTU9OXzEKKyAgTU9OXzIsCisjZGVmaW5lIE1PTl8yIE1PTl8yCisgIE1PTl8zLAorI2RlZmluZSBNT05fMyBNT05fMworICBNT05fNCwKKyNkZWZpbmUgTU9OXzQgTU9OXzQKKyAgTU9OXzUsCisjZGVmaW5lIE1PTl81IE1PTl81CisgIE1PTl82LAorI2RlZmluZSBNT05fNiBNT05fNgorICBNT05fNywKKyNkZWZpbmUgTU9OXzcgTU9OXzcKKyAgTU9OXzgsCisjZGVmaW5lIE1PTl84IE1PTl84CisgIE1PTl85LAorI2RlZmluZSBNT05fOSBNT05fOQorICBNT05fMTAsCisjZGVmaW5lIE1PTl8xMCBNT05fMTAKKyAgTU9OXzExLAorI2RlZmluZSBNT05fMTEgTU9OXzExCisgIE1PTl8xMiwKKyNkZWZpbmUgTU9OXzEyIE1PTl8xMgorCisvKiBhYmJyZXZpYXRlZCBtb250aCBuYW1lcyAqLworICBBQk1PTl8xLAorI2RlZmluZSBBQk1PTl8xIEFCTU9OXzEKKyAgQUJNT05fMiwKKyNkZWZpbmUgQUJNT05fMiBBQk1PTl8yCisgIEFCTU9OXzMsCisjZGVmaW5lIEFCTU9OXzMgQUJNT05fMworICBBQk1PTl80LAorI2RlZmluZSBBQk1PTl80IEFCTU9OXzQKKyAgQUJNT05fNSwKKyNkZWZpbmUgQUJNT05fNSBBQk1PTl81CisgIEFCTU9OXzYsCisjZGVmaW5lIEFCTU9OXzYgQUJNT05fNgorICBBQk1PTl83LAorI2RlZmluZSBBQk1PTl83IEFCTU9OXzcKKyAgQUJNT05fOCwKKyNkZWZpbmUgQUJNT05fOCBBQk1PTl84CisgIEFCTU9OXzksCisjZGVmaW5lIEFCTU9OXzkgQUJNT05fOQorICBBQk1PTl8xMCwKKyNkZWZpbmUgQUJNT05fMTAgQUJNT05fMTAKKyAgQUJNT05fMTEsCisjZGVmaW5lIEFCTU9OXzExIEFCTU9OXzExCisgIEFCTU9OXzEyLAorI2RlZmluZSBBQk1PTl8xMiBBQk1PTl8xMgorCisgIEVSQSwJCQkJLyogZXJhIGRlc2NyaXB0aW9uIHNlZ21lbnRzICovCisjZGVmaW5lIEVSQSBFUkEKKyAgRVJBX0RfRk1ULAkJCS8qIGVyYSBkYXRlIGZvcm1hdCBzdHJpbmcgKi8KKyNkZWZpbmUgRVJBX0RfRk1UIEVSQV9EX0ZNVAorICBFUkFfRF9UX0ZNVCwJCQkvKiBlcmEgZGF0ZSBhbmQgdGltZSBmb3JtYXQgc3RyaW5nICovCisjZGVmaW5lIEVSQV9EX1RfRk1UIEVSQV9EX1RfRk1UCisgIEVSQV9UX0ZNVCwJCQkvKiBlcmEgdGltZSBmb3JtYXQgc3RyaW5nICovCisjZGVmaW5lIEVSQV9UX0ZNVCBFUkFfVF9GTVQKKyAgQUxUX0RJR0lUUywJCQkvKiBhbHRlcm5hdGl2ZSBzeW1ib2xzIGZvciBkaWdpdHMgKi8KKyNkZWZpbmUgQUxUX0RJR0lUUyBBTFRfRElHSVRTCisKKyAgUkFESVhDSEFSLAkJCS8qIHJhZGl4IGNoYXIgKi8KKyNkZWZpbmUgUkFESVhDSEFSIFJBRElYQ0hBUgorICBUSE9VU0VQLAkJCS8qIHNlcGFyYXRvciBmb3IgdGhvdXNhbmRzICovCisjZGVmaW5lIFRIT1VTRVAgVEhPVVNFUAorCisgIFlFU0VYUFIsCQkJLyogYWZmaXJtYXRpdmUgcmVzcG9uc2UgZXhwcmVzc2lvbiAqLworI2RlZmluZSBZRVNFWFBSIFlFU0VYUFIKKyAgTk9FWFBSLAkJCS8qIG5lZ2F0aXZlIHJlc3BvbnNlIGV4cHJlc3Npb24gKi8KKyNkZWZpbmUgTk9FWFBSIE5PRVhQUgorICBZRVNTVFIsCQkJLyogYWZmaXJtYXRpdmUgcmVzcG9uc2UgZm9yIHllcy9ubyBxdWVyaWVzICovCisjZGVmaW5lIFlFU1NUUiBZRVNTVFIKKyAgTk9TVFIsCQkJLyogbmVnYXRpdmUgcmVzcG9uc2UgZm9yIHllcy9ubyBxdWVyaWVzICovCisjZGVmaW5lIE5PU1RSIE5PU1RSCisKKyAgQ1JOQ1lTVFIsCQkJLyogY3VycmVuY3kgc3ltYm9sICovCisjZGVmaW5lIENSTkNZU1RSIENSTkNZU1RSCisKKyAgRF9NRF9PUkRFUiwJCQkvKiBtb250aC9kYXkgb3JkZXIgKEJTRCBleHRlbnNpb24pICovCisjZGVmaW5lIERfTURfT1JERVIgRF9NRF9PUkRFUgorCisgIF9OTF9USU1FX0RBVEVfRk1UID0gODQsCS8qIGRhdGUgZm10IHVzZWQgYnkgZGF0ZSgxKSAoR05VIGV4dGVuc2lvbikgKi8KKyNkZWZpbmUgX0RBVEVfRk1UIF9OTF9USU1FX0RBVEVfRk1UCisKKyNpZmRlZiBfX0hBVkVfTE9DQUxFX0lORk9fXworICBfTkxfQ1RZUEVfTUJfQ1VSX01BWCwKKyAgX05MX01FU1NBR0VTX0NPREVTRVQsCisKKyNpZmRlZiBfX0hBVkVfTE9DQUxFX0lORk9fRVhURU5ERURfXworCisgIC8qIE5PVEU6CisgIAorICAgICBBbHdheXMgbWFpbnRhaW4gdGhlIG9yZGVyIGFuZCBwb3NpdGlvbiBvZiBleGlzdGluZyBlbnRyaWVzIQorICAgICBBbHdheXMgYXBwZW5kIG5ldyBlbnRyeSB0byB0aGUgbGlzdCwgcHJpb3IgdG8gdGhlIGRlZmluaXRpb24KKyAgICAgb2YgX05MX0xPQ0FMRV9FWFRFTkRFRF9MQVNUX0VOVFJZLiAqLworCisgIF9OTF9MT0NBTEVfRVhURU5ERURfRklSU1RfRU5UUlksCisKKyAgX05MX0NUWVBFX09VVERJR0lUUzBfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVFMxX01CLAorICBfTkxfQ1RZUEVfT1VURElHSVRTMl9NQiwKKyAgX05MX0NUWVBFX09VVERJR0lUUzNfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVFM0X01CLAorICBfTkxfQ1RZUEVfT1VURElHSVRTNV9NQiwKKyAgX05MX0NUWVBFX09VVERJR0lUUzZfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVFM3X01CLAorICBfTkxfQ1RZUEVfT1VURElHSVRTOF9NQiwKKyAgX05MX0NUWVBFX09VVERJR0lUUzlfTUIsCisgIF9OTF9DVFlQRV9PVVRESUdJVFMwX1dDLAorICBfTkxfQ1RZUEVfT1VURElHSVRTMV9XQywKKyAgX05MX0NUWVBFX09VVERJR0lUUzJfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVFMzX1dDLAorICBfTkxfQ1RZUEVfT1VURElHSVRTNF9XQywKKyAgX05MX0NUWVBFX09VVERJR0lUUzVfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVFM2X1dDLAorICBfTkxfQ1RZUEVfT1VURElHSVRTN19XQywKKyAgX05MX0NUWVBFX09VVERJR0lUUzhfV0MsCisgIF9OTF9DVFlQRV9PVVRESUdJVFM5X1dDLAorCisgIF9OTF9USU1FX0NPREVTRVQsCisgIF9OTF9USU1FX1dNT05fMSwKKyAgX05MX1RJTUVfV01PTl8yLAorICBfTkxfVElNRV9XTU9OXzMsCisgIF9OTF9USU1FX1dNT05fNCwKKyAgX05MX1RJTUVfV01PTl81LAorICBfTkxfVElNRV9XTU9OXzYsCisgIF9OTF9USU1FX1dNT05fNywKKyAgX05MX1RJTUVfV01PTl84LAorICBfTkxfVElNRV9XTU9OXzksCisgIF9OTF9USU1FX1dNT05fMTAsCisgIF9OTF9USU1FX1dNT05fMTEsCisgIF9OTF9USU1FX1dNT05fMTIsCisgIF9OTF9USU1FX1dNT05USF8xLAorICBfTkxfVElNRV9XTU9OVEhfMiwKKyAgX05MX1RJTUVfV01PTlRIXzMsCisgIF9OTF9USU1FX1dNT05USF80LAorICBfTkxfVElNRV9XTU9OVEhfNSwKKyAgX05MX1RJTUVfV01PTlRIXzYsCisgIF9OTF9USU1FX1dNT05USF83LAorICBfTkxfVElNRV9XTU9OVEhfOCwKKyAgX05MX1RJTUVfV01PTlRIXzksCisgIF9OTF9USU1FX1dNT05USF8xMCwKKyAgX05MX1RJTUVfV01PTlRIXzExLAorICBfTkxfVElNRV9XTU9OVEhfMTIsCisgIF9OTF9USU1FX1dXREFZXzEsCisgIF9OTF9USU1FX1dXREFZXzIsCisgIF9OTF9USU1FX1dXREFZXzMsCisgIF9OTF9USU1FX1dXREFZXzQsCisgIF9OTF9USU1FX1dXREFZXzUsCisgIF9OTF9USU1FX1dXREFZXzYsCisgIF9OTF9USU1FX1dXREFZXzcsCisgIF9OTF9USU1FX1dXRUVLREFZXzEsCisgIF9OTF9USU1FX1dXRUVLREFZXzIsCisgIF9OTF9USU1FX1dXRUVLREFZXzMsCisgIF9OTF9USU1FX1dXRUVLREFZXzQsCisgIF9OTF9USU1FX1dXRUVLREFZXzUsCisgIF9OTF9USU1FX1dXRUVLREFZXzYsCisgIF9OTF9USU1FX1dXRUVLREFZXzcsCisgIF9OTF9USU1FX1dUX0ZNVCwKKyAgX05MX1RJTUVfV0RfRk1ULAorICBfTkxfVElNRV9XRF9UX0ZNVCwKKyAgX05MX1RJTUVfV0FNX1NUUiwKKyAgX05MX1RJTUVfV1BNX1NUUiwKKyAgX05MX1RJTUVfV0RBVEVfRk1ULAorICBfTkxfVElNRV9XVF9GTVRfQU1QTSwKKyAgX05MX1RJTUVfV0VSQSwKKyAgX05MX1RJTUVfV0VSQV9EX0ZNVCwKKyAgX05MX1RJTUVfV0VSQV9EX1RfRk1ULAorICBfTkxfVElNRV9XRVJBX1RfRk1ULAorICBfTkxfVElNRV9XQUxUX0RJR0lUUywKKworICBfTkxfTlVNRVJJQ19DT0RFU0VULAorICBfTkxfTlVNRVJJQ19HUk9VUElORywKKyAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKKyAgX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywKKworICBfTkxfTU9ORVRBUllfSU5UX0NVUlJfU1lNQk9MLAorICBfTkxfTU9ORVRBUllfQ1VSUkVOQ1lfU1lNQk9MLAorICBfTkxfTU9ORVRBUllfTU9OX0RFQ0lNQUxfUE9JTlQsCisgIF9OTF9NT05FVEFSWV9NT05fVEhPVVNBTkRTX1NFUCwKKyAgX05MX01PTkVUQVJZX01PTl9HUk9VUElORywKKyAgX05MX01PTkVUQVJZX1BPU0lUSVZFX1NJR04sCisgIF9OTF9NT05FVEFSWV9ORUdBVElWRV9TSUdOLAorICBfTkxfTU9ORVRBUllfSU5UX0ZSQUNfRElHSVRTLAorICBfTkxfTU9ORVRBUllfRlJBQ19ESUdJVFMsCisgIF9OTF9NT05FVEFSWV9QX0NTX1BSRUNFREVTLAorICBfTkxfTU9ORVRBUllfUF9TRVBfQllfU1BBQ0UsCisgIF9OTF9NT05FVEFSWV9OX0NTX1BSRUNFREVTLAorICBfTkxfTU9ORVRBUllfTl9TRVBfQllfU1BBQ0UsCisgIF9OTF9NT05FVEFSWV9QX1NJR05fUE9TTiwKKyAgX05MX01PTkVUQVJZX05fU0lHTl9QT1NOLAorICBfTkxfTU9ORVRBUllfSU5UX1BfQ1NfUFJFQ0VERVMsCisgIF9OTF9NT05FVEFSWV9JTlRfUF9TRVBfQllfU1BBQ0UsCisgIF9OTF9NT05FVEFSWV9JTlRfTl9DU19QUkVDRURFUywKKyAgX05MX01PTkVUQVJZX0lOVF9OX1NFUF9CWV9TUEFDRSwKKyAgX05MX01PTkVUQVJZX0lOVF9QX1NJR05fUE9TTiwKKyAgX05MX01PTkVUQVJZX0lOVF9OX1NJR05fUE9TTiwKKyAgX05MX01PTkVUQVJZX0NPREVTRVQsCisgIF9OTF9NT05FVEFSWV9XSU5UX0NVUlJfU1lNQk9MLAorICBfTkxfTU9ORVRBUllfV0NVUlJFTkNZX1NZTUJPTCwKKyAgX05MX01PTkVUQVJZX1dNT05fREVDSU1BTF9QT0lOVCwKKyAgX05MX01PTkVUQVJZX1dNT05fVEhPVVNBTkRTX1NFUCwKKyAgX05MX01PTkVUQVJZX1dQT1NJVElWRV9TSUdOLAorICBfTkxfTU9ORVRBUllfV05FR0FUSVZFX1NJR04sCisKKyAgX05MX01FU1NBR0VTX1dZRVNFWFBSLAorICBfTkxfTUVTU0FHRVNfV05PRVhQUiwKKyAgX05MX01FU1NBR0VTX1dZRVNTVFIsCisgIF9OTF9NRVNTQUdFU19XTk9TVFIsCisKKyAgX05MX0NPTExBVEVfQ09ERVNFVCwKKworICAvKiBUaGlzIE1VU1QgYmUgdGhlIGxhc3QgZW50cnkgc2luY2UgaXQncyB1c2VkIHRvIGNoZWNrIGZvciBhbiBhcnJheQorICAgICBpbmRleCBpbiBubF9sYW5naW5mbygpLiAqLworICBfTkxfTE9DQUxFX0VYVEVOREVEX0xBU1RfRU5UUlkKKworI2VuZGlmIC8qIF9fSEFWRV9MT0NBTEVfSU5GT19FWFRFTkRFRF9fICovCisjZW5kaWYgLyogX19IQVZFX0xPQ0FMRV9JTkZPX18gKi8KKworfTsKKworX19CRUdJTl9ERUNMUworY2hhcgkqbmxfbGFuZ2luZm8obmxfaXRlbSk7CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9MQU5HSU5GT19IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2xpYmdlbi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL2xpYmdlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZmFiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbGliZ2VuLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGxpYmdlbi5oIC0gZGVmaW5lZCBieSBYUEc0CisgKi8KKworI2lmbmRlZiBfTElCR0VOX0hfCisjZGVmaW5lIF9MSUJHRU5fSF8KKworI2luY2x1ZGUgIl9hbnNpLmgiCisjaW5jbHVkZSA8c3lzL3JlZW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworY2hhciAgICAgICpfRVhGVU4oYmFzZW5hbWUsICAgICAoY2hhciAqKSk7CitjaGFyICAgICAgKl9FWEZVTihkaXJuYW1lLCAgICAgKGNoYXIgKikpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0xJQkdFTl9IXyAqLworCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbGltaXRzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4NjhhNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9saW1pdHMuaApAQCAtMCwwICsxLDE0NiBAQAorI2lmbmRlZiBfTElCQ19MSU1JVFNfSF8KKyMgZGVmaW5lIF9MSUJDX0xJTUlUU19IXwkxCisKKyNpbmNsdWRlIDxuZXdsaWIuaD4KKworIyBpZmRlZiBfTUJfTEVOX01BWAorIyAgZGVmaW5lIE1CX0xFTl9NQVgJX01CX0xFTl9NQVgKKyMgZWxzZQorIyAgZGVmaW5lIE1CX0xFTl9NQVggICAgMQorIyBlbmRpZgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cywgaWYgX1dBTlRfSU9fUE9TX0FSR1MuICAqLworIyBpZm5kZWYgTkxfQVJHTUFYCisjICBkZWZpbmUgTkxfQVJHTUFYIDMyCisjIGVuZGlmCisKKy8qIGlmIGRvIG5vdCBoYXZlICNpbmNsdWRlX25leHQgc3VwcG9ydCwgdGhlbiB3ZQorICAgaGF2ZSB0byBkZWZpbmUgdGhlIGxpbWl0cyBoZXJlLiAqLworIyBpZiAhZGVmaW5lZCBfX0dOVUNfXyB8fCBfX0dOVUNfXyA8IDIKKworIyAgaWZuZGVmIF9MSU1JVFNfSAorIyAgIGRlZmluZSBfTElNSVRTX0gJMQorCisjICAgaW5jbHVkZSA8c3lzL2NvbmZpZy5oPgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGBjaGFyJy4gICovCisjICAgdW5kZWYgQ0hBUl9CSVQKKyMgICBkZWZpbmUgQ0hBUl9CSVQgOAorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgY2hhcicgY2FuIGhvbGQuICAqLworIyAgIHVuZGVmIFNDSEFSX01JTgorIyAgIGRlZmluZSBTQ0hBUl9NSU4gKC0xMjgpCisjICAgdW5kZWYgU0NIQVJfTUFYCisjICAgZGVmaW5lIFNDSEFSX01BWCAxMjcKKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgY2hhcicgY2FuIGhvbGQuICAoTWluaW11bSBpcyAwKS4gICovCisjICAgdW5kZWYgVUNIQVJfTUFYCisjICAgZGVmaW5lIFVDSEFSX01BWCAyNTUKKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgYSBgY2hhcicgY2FuIGhvbGQuICAqLworIyAgIGlmZGVmIF9fQ0hBUl9VTlNJR05FRF9fCisjICAgIHVuZGVmIENIQVJfTUlOCisjICAgIGRlZmluZSBDSEFSX01JTiAwCisjICAgIHVuZGVmIENIQVJfTUFYCisjICAgIGRlZmluZSBDSEFSX01BWCAyNTUKKyMgICBlbHNlCisjICAgIHVuZGVmIENIQVJfTUlOCisjICAgIGRlZmluZSBDSEFSX01JTiAoLTEyOCkKKyMgICAgdW5kZWYgQ0hBUl9NQVgKKyMgICAgZGVmaW5lIENIQVJfTUFYIDEyNworIyAgIGVuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBzaG9ydCBpbnQnIGNhbiBob2xkLiAgKi8KKyMgICB1bmRlZiBTSFJUX01JTgorLyogRm9yIHRoZSBzYWtlIG9mIDE2IGJpdCBob3N0cywgd2UgbWF5IG5vdCB1c2UgLTMyNzY4ICovCisjICAgZGVmaW5lIFNIUlRfTUlOICgtMzI3NjctMSkKKyMgICB1bmRlZiBTSFJUX01BWAorIyAgIGRlZmluZSBTSFJUX01BWCAzMjc2NworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBzaG9ydCBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworIyAgIHVuZGVmIFVTSFJUX01BWAorIyAgIGRlZmluZSBVU0hSVF9NQVggNjU1MzUKKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgYSBgc2lnbmVkIGludCcgY2FuIGhvbGQuICAqLworIyAgIGlmbmRlZiBfX0lOVF9NQVhfXworIyAgICBkZWZpbmUgX19JTlRfTUFYX18gMjE0NzQ4MzY0NworIyAgIGVuZGlmCisjICAgdW5kZWYgSU5UX01JTgorIyAgIGRlZmluZSBJTlRfTUlOICgtSU5UX01BWC0xKQorIyAgIHVuZGVmIElOVF9NQVgKKyMgICBkZWZpbmUgSU5UX01BWCBfX0lOVF9NQVhfXworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworIyAgIHVuZGVmIFVJTlRfTUFYCisjICAgZGVmaW5lIFVJTlRfTUFYIChJTlRfTUFYICogMlUgKyAxKQorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBpbnQnIGNhbiBob2xkLgorICAgKFNhbWUgYXMgYGludCcpLiAgKi8KKyMgICBpZm5kZWYgX19MT05HX01BWF9fCisjICAgIGlmIGRlZmluZWQgKF9fYWxwaGFfXykgfHwgKGRlZmluZWQgKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKSkgfHwgZGVmaW5lZCAoX19zcGFyY3Y5KQorIyAgICAgZGVmaW5lIF9fTE9OR19NQVhfXyA5MjIzMzcyMDM2ODU0Nzc1ODA3TAorIyAgICBlbHNlCisjICAgICBkZWZpbmUgX19MT05HX01BWF9fIDIxNDc0ODM2NDdMCisjICAgIGVuZGlmIC8qIF9fYWxwaGFfXyB8fCBzcGFyYzY0ICovCisjICAgZW5kaWYKKyMgICB1bmRlZiBMT05HX01JTgorIyAgIGRlZmluZSBMT05HX01JTiAoLUxPTkdfTUFYLTEpCisjICAgdW5kZWYgTE9OR19NQVgKKyMgICBkZWZpbmUgTE9OR19NQVggX19MT05HX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGxvbmcgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyMgICB1bmRlZiBVTE9OR19NQVgKKyMgICBkZWZpbmUgVUxPTkdfTUFYIChMT05HX01BWCAqIDJVTCArIDEpCisKKyMgICBpZm5kZWYgX19MT05HX0xPTkdfTUFYX18KKyMgICAgZGVmaW5lIF9fTE9OR19MT05HX01BWF9fIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAorIyAgIGVuZGlmCisKKyMgICBpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBsb25nIGxvbmcgaW50JyBjYW4gaG9sZC4gICovCisjICAgIHVuZGVmIExMT05HX01JTgorIyAgICBkZWZpbmUgTExPTkdfTUlOICgtTExPTkdfTUFYLTEpCisjICAgIHVuZGVmIExMT05HX01BWAorIyAgICBkZWZpbmUgTExPTkdfTUFYIF9fTE9OR19MT05HX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworIyAgICB1bmRlZiBVTExPTkdfTUFYCisjICAgIGRlZmluZSBVTExPTkdfTUFYIChMTE9OR19NQVggKiAyVUxMICsgMSkKKyMgICBlbmRpZgorCisjICBpZiBkZWZpbmVkIChfX0dOVV9MSUJSQVJZX18pID8gZGVmaW5lZCAoX19VU0VfR05VKSA6ICFkZWZpbmVkIChfX1NUUklDVF9BTlNJX18pCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAqLworIyAgICB1bmRlZiBMT05HX0xPTkdfTUlOCisjICAgIGRlZmluZSBMT05HX0xPTkdfTUlOICgtTE9OR19MT05HX01BWC0xKQorIyAgICB1bmRlZiBMT05HX0xPTkdfTUFYCisjICAgIGRlZmluZSBMT05HX0xPTkdfTUFYIF9fTE9OR19MT05HX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworIyAgICB1bmRlZiBVTE9OR19MT05HX01BWAorIyAgICBkZWZpbmUgVUxPTkdfTE9OR19NQVggKExPTkdfTE9OR19NQVggKiAyVUxMICsgMSkKKyMgICBlbmRpZgorCisjICBlbmRpZiAvKiBfTElNSVRTX0ggICovCisjIGVuZGlmCSAvKiBHQ0MgMi4gICovCisKKyNlbmRpZgkgLyogIV9MSUJDX0xJTUlUU19IXyAqLworCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfR0NDX0xJTUlUU19IXworLyogYF9HQ0NfTElNSVRTX0hfJyBpcyB3aGF0IEdDQydzIGZpbGUgZGVmaW5lcy4gICovCisjIGluY2x1ZGVfbmV4dCA8bGltaXRzLmg+CisjZW5kaWYgLyogX19HTlVDX18gJiYgIV9HQ0NfTElNSVRTX0hfICovCisKKyNpZm5kZWYgX1BPU0lYMl9SRV9EVVBfTUFYCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmVwZWF0ZWQgb2NjdXJyZW5jZXMgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAqICAgIHBlcm1pdHRlZCB3aGVuIHVzaW5nIHRoZSBpbnRlcnZhbCBub3RhdGlvbiBgXHtNLE5cfScuICAqLworI2RlZmluZSBfUE9TSVgyX1JFX0RVUF9NQVggICAgICAgICAgICAgIDI1NQorI2VuZGlmIC8qIF9QT1NJWDJfUkVfRFVQX01BWCAgKi8KKworI2lmbmRlZiBBUkdfTUFYCisjZGVmaW5lIEFSR19NQVgJCTQwOTYKKyNlbmRpZgorCisjaWZuZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYCTQwOTYKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbG9jYWxlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbG9jYWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkNjU4ZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9sb2NhbGUuaApAQCAtMCwwICsxLDY0IEBACisvKgorCWxvY2FsZS5oCisJVmFsdWVzIGFwcHJvcHJpYXRlIGZvciB0aGUgZm9ybWF0dGluZyBvZiBtb25ldGFyeSBhbmQgb3RoZXIKKwludW1iZXJpYyBxdWFudGl0aWVzLgorKi8KKworI2lmbmRlZiBfTE9DQUxFX0hfCisjZGVmaW5lIF9MT0NBTEVfSF8KKworI2luY2x1ZGUgIl9hbnNpLmgiCisKKyNkZWZpbmUgX19uZWVkX05VTEwKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2RlZmluZSBMQ19BTEwJICAgIDAKKyNkZWZpbmUgTENfQ09MTEFURSAgMQorI2RlZmluZSBMQ19DVFlQRSAgICAyCisjZGVmaW5lIExDX01PTkVUQVJZIDMKKyNkZWZpbmUgTENfTlVNRVJJQyAgNAorI2RlZmluZSBMQ19USU1FICAgICA1CisjZGVmaW5lIExDX01FU1NBR0VTIDYKKworX0JFR0lOX1NURF9DCisKK3N0cnVjdCBsY29udgoreworICBjaGFyICpkZWNpbWFsX3BvaW50OworICBjaGFyICp0aG91c2FuZHNfc2VwOworICBjaGFyICpncm91cGluZzsKKyAgY2hhciAqaW50X2N1cnJfc3ltYm9sOworICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CisgIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OworICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKKyAgY2hhciAqbW9uX2dyb3VwaW5nOworICBjaGFyICpwb3NpdGl2ZV9zaWduOworICBjaGFyICpuZWdhdGl2ZV9zaWduOworICBjaGFyIGludF9mcmFjX2RpZ2l0czsKKyAgY2hhciBmcmFjX2RpZ2l0czsKKyAgY2hhciBwX2NzX3ByZWNlZGVzOworICBjaGFyIHBfc2VwX2J5X3NwYWNlOworICBjaGFyIG5fY3NfcHJlY2VkZXM7CisgIGNoYXIgbl9zZXBfYnlfc3BhY2U7CisgIGNoYXIgcF9zaWduX3Bvc247CisgIGNoYXIgbl9zaWduX3Bvc247CisgIGNoYXIgaW50X25fY3NfcHJlY2VkZXM7CisgIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOworICBjaGFyIGludF9uX3NpZ25fcG9zbjsKKyAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsKKyAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CisgIGNoYXIgaW50X3Bfc2lnbl9wb3NuOworfTsKKworI2lmbmRlZiBfUkVFTlRfT05MWQorY2hhciAqX0VYRlVOKHNldGxvY2FsZSwoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpKTsKK3N0cnVjdCBsY29udiAqX0VYRlVOKGxvY2FsZWNvbnYsKHZvaWQpKTsKKyNlbmRpZgorCitzdHJ1Y3QgX3JlZW50OworY2hhciAqX0VYRlVOKF9zZXRsb2NhbGVfciwoc3RydWN0IF9yZWVudCAqLCBpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxvY2FsZSkpOworc3RydWN0IGxjb252ICpfRVhGVU4oX2xvY2FsZWNvbnZfciwoc3RydWN0IF9yZWVudCAqKSk7CisKK19FTkRfU1REX0MKKworI2VuZGlmIC8qIF9MT0NBTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL19kZWZhdWx0X3R5cGVzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9fZGVmYXVsdF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmUwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9fZGVmYXVsdF90eXBlcy5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogICRJZCQKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX19ERUZBVUxUX1RZUEVTX0gKKyNkZWZpbmUgX01BQ0hJTkVfX0RFRkFVTFRfVFlQRVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qCisgKiBHdWVzcyBvbiB0eXBlcyBieSBleGFtaW5pbmcgKl9NSU4gLyAqX01BWCBkZWZpbmVzLgorICovCisjaWYgX19HTlVDX1BSRVJFUSAoMywgMykKKy8qIEdDQyA+PSAzLjMuMCBoYXMgX188dmFsPl9fIGltcGxpY2l0bHkgZGVmaW5lZC4gKi8KKyNkZWZpbmUgX19FWFAoeCkgX18jI3gjI19fCisjZWxzZQorLyogRmFsbCBiYWNrIHRvIFBPU0lYIHZlcnNpb25zIGZyb20gPGxpbWl0cy5oPiAqLworI2RlZmluZSBfX0VYUCh4KSB4CisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKworI2lmIF9fRVhQKFNDSEFSX01BWCkgPT0gMHg3ZgordHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdCA7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90IDsKKyNkZWZpbmUgX19faW50OF90X2RlZmluZWQgMQorI2VuZGlmCisKKyNpZiBfX0VYUChJTlRfTUFYKSA9PSAweDdmZmYKK3R5cGVkZWYgc2lnbmVkIGludCBfX2ludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQxNl90OworI2RlZmluZSBfX19pbnQxNl90X2RlZmluZWQgMQorI2VsaWYgX19FWFAoU0hSVF9NQVgpID09IDB4N2ZmZgordHlwZWRlZiBzaWduZWQgc2hvcnQgX19pbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3VpbnQxNl90OworI2RlZmluZSBfX19pbnQxNl90X2RlZmluZWQgMQorI2VsaWYgX19FWFAoU0NIQVJfTUFYKSA9PSAweDdmZmYKK3R5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDE2X3Q7CisjZGVmaW5lIF9fX2ludDE2X3RfZGVmaW5lZCAxCisjZW5kaWYKKworI2lmIF9fX2ludDE2X3RfZGVmaW5lZAordHlwZWRlZiBfX2ludDE2X3QgX19pbnRfbGVhc3QxNl90OwordHlwZWRlZiBfX3VpbnQxNl90IF9fdWludF9sZWFzdDE2X3Q7CisjZGVmaW5lIF9fX2ludF9sZWFzdDE2X3RfZGVmaW5lZCAxCisKKyNpZiAhX19faW50OF90X2RlZmluZWQKK3R5cGVkZWYgX19pbnQxNl90IF9faW50X2xlYXN0OF90OwordHlwZWRlZiBfX3VpbnQxNl90IF9fdWludF9sZWFzdDhfdDsKKyNkZWZpbmUgX19faW50X2xlYXN0OF90X2RlZmluZWQgMQorI2VuZGlmCisjZW5kaWYKKworI2lmIF9fRVhQKElOVF9NQVgpID09IDB4N2ZmZmZmZmZMCit0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKKyNkZWZpbmUgX19faW50MzJfdF9kZWZpbmVkIDEKKyNlbGlmIF9fRVhQKExPTkdfTUFYKSA9PSAweDdmZmZmZmZmTAordHlwZWRlZiBzaWduZWQgbG9uZyBfX2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191aW50MzJfdDsKKyNkZWZpbmUgX19faW50MzJfdF9kZWZpbmVkIDEKKyNlbGlmIF9fRVhQKFNIUlRfTUFYKSA9PSAweDdmZmZmZmZmTAordHlwZWRlZiBzaWduZWQgc2hvcnQgX19pbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3VpbnQzMl90OworI2RlZmluZSBfX19pbnQzMl90X2RlZmluZWQgMQorI2VsaWYgX19FWFAoU0NIQVJfTUFYKSA9PSAweDdmZmZmZmZmTAordHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50MzJfdDsKKyNkZWZpbmUgX19faW50MzJfdF9kZWZpbmVkIDEKKyNlbmRpZgorCisjaWYgX19faW50MzJfdF9kZWZpbmVkCit0eXBlZGVmIF9faW50MzJfdCBfX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIF9fdWludDMyX3QgX191aW50X2xlYXN0MzJfdDsKKyNkZWZpbmUgX19faW50X2xlYXN0MzJfdF9kZWZpbmVkIDEKKworI2lmICFfX19pbnQ4X3RfZGVmaW5lZAordHlwZWRlZiBfX2ludDMyX3QgX19pbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9fdWludDMyX3QgX191aW50X2xlYXN0OF90OworI2RlZmluZSBfX19pbnRfbGVhc3Q4X3RfZGVmaW5lZCAxCisjZW5kaWYKKyNpZiAhX19faW50MTZfdF9kZWZpbmVkCit0eXBlZGVmIF9faW50MzJfdCBfX2ludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9fdWludDMyX3QgX191aW50X2xlYXN0MTZfdDsKKyNkZWZpbmUgX19faW50X2xlYXN0MTZfdF9kZWZpbmVkIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBfX0VYUChMT05HX01BWCkgPiAweDdmZmZmZmZmCit0eXBlZGVmIHNpZ25lZCBsb25nIF9faW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VpbnQ2NF90OworI2RlZmluZSBfX19pbnQ2NF90X2RlZmluZWQgMQorCisvKiBHQ0MgaGFzIF9fTE9OR19MT05HX01BWF9fICovCisjZWxpZiAgZGVmaW5lZChfX0xPTkdfTE9OR19NQVhfXykgJiYgKF9fTE9OR19MT05HX01BWF9fID4gMHg3ZmZmZmZmZikKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBfX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3VpbnQ2NF90OworI2RlZmluZSBfX19pbnQ2NF90X2RlZmluZWQgMQorCisvKiBQT1NJWCBtYW5kYXRlcyBMTE9OR19NQVggaW4gPGxpbWl0cy5oPiAqLworI2VsaWYgIGRlZmluZWQoTExPTkdfTUFYKSAmJiAoTExPTkdfTUFYID4gMHg3ZmZmZmZmZikKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBfX2ludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3VpbnQ2NF90OworI2RlZmluZSBfX19pbnQ2NF90X2RlZmluZWQgMQorCisjZWxpZiAgX19FWFAoSU5UX01BWCkgPiAweDdmZmZmZmZmCit0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50NjRfdDsKKyNkZWZpbmUgX19faW50NjRfdF9kZWZpbmVkIDEKKyNlbmRpZgorCisjdW5kZWYgX19FWFAKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9NQUNISU5FX19ERUZBVUxUX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmOWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICBDb3B5cmlnaHQgKGMpIDIwMTIgQVJNIEx0ZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAzLiBUaGUgbmFtZSBvZiB0aGUgY29tcGFueSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgICAgIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVJNIExURCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAgIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICAgSU4gTk8gRVZFTlQgU0hBTEwgQVJNIExURCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgICBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9NQUNISU5FX19UWVBFU19ICisjZGVmaW5lIF9NQUNISU5FX19UWVBFU19ICisKKyNpbmNsdWRlIDxtYWNoaW5lL19kZWZhdWx0X3R5cGVzLmg+CisKKyNkZWZpbmUgX19zc2l6ZV90X2RlZmluZWQKK3R5cGVkZWYgbG9uZyBzaWduZWQgaW50IF9zc2l6ZV90OworCisjZW5kaWYgLyogX01BQ0hJTkVfX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL2Fuc2kuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL2Fuc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzdiNmQwCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvYW5zaS5oCkBAIC0wLDAgKzEgQEAKKy8qIGR1bW15IGhlYWRlciBmaWxlIHRvIHN1cHBvcnQgQlNEIGNvbXBpbGVyICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZWJjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9fTUFDSElORV9FTkRJQU5fSF9fCisKKyNpbmNsdWRlIDxzeXMvY29uZmlnLmg+CisKKyNpZm5kZWYgQklHX0VORElBTgorI2RlZmluZSBCSUdfRU5ESUFOIDQzMjEKKyNlbmRpZgorI2lmbmRlZiBMSVRUTEVfRU5ESUFOCisjZGVmaW5lIExJVFRMRV9FTkRJQU4gMTIzNAorI2VuZGlmCisKKyNpZm5kZWYgQllURV9PUkRFUgorI2lmIGRlZmluZWQoX19JRUVFX0xJVFRMRV9FTkRJQU4pIHx8IGRlZmluZWQoX19JRUVFX0JZVEVTX0xJVFRMRV9FTkRJQU4pCisjZGVmaW5lIEJZVEVfT1JERVIgTElUVExFX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgQllURV9PUkRFUiBCSUdfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX19NQUNISU5FX0VORElBTl9IX18gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL2Zhc3RtYXRoLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9mYXN0bWF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxM2JlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9mYXN0bWF0aC5oCkBAIC0wLDAgKzEsMTAwIEBACisjaWZkZWYgX19zeXN2bmVjdjcwX3RhcmdldAorZG91YmxlIEVYRlVOKGZhc3Rfc2luLChkb3VibGUpKTsKK2RvdWJsZSBFWEZVTihmYXN0X2NvcywoZG91YmxlKSk7Citkb3VibGUgRVhGVU4oZmFzdF90YW4sKGRvdWJsZSkpOworCitkb3VibGUgRVhGVU4oZmFzdF9hc2luLChkb3VibGUpKTsKK2RvdWJsZSBFWEZVTihmYXN0X2Fjb3MsKGRvdWJsZSkpOworZG91YmxlIEVYRlVOKGZhc3RfYXRhbiwoZG91YmxlKSk7CisKK2RvdWJsZSBFWEZVTihmYXN0X3NpbmgsKGRvdWJsZSkpOworZG91YmxlIEVYRlVOKGZhc3RfY29zaCwoZG91YmxlKSk7Citkb3VibGUgRVhGVU4oZmFzdF90YW5oLChkb3VibGUpKTsKKworZG91YmxlIEVYRlVOKGZhc3RfYXNpbmgsKGRvdWJsZSkpOworZG91YmxlIEVYRlVOKGZhc3RfYWNvc2gsKGRvdWJsZSkpOworZG91YmxlIEVYRlVOKGZhc3RfYXRhbmgsKGRvdWJsZSkpOworCitkb3VibGUgRVhGVU4oZmFzdF9hYnMsKGRvdWJsZSkpOworZG91YmxlIEVYRlVOKGZhc3Rfc3FydCwoZG91YmxlKSk7Citkb3VibGUgRVhGVU4oZmFzdF9leHAyLChkb3VibGUpKTsKK2RvdWJsZSBFWEZVTihmYXN0X2V4cDEwLChkb3VibGUpKTsKK2RvdWJsZSBFWEZVTihmYXN0X2V4cGUsKGRvdWJsZSkpOworZG91YmxlIEVYRlVOKGZhc3RfbG9nMTAsKGRvdWJsZSkpOworZG91YmxlIEVYRlVOKGZhc3RfbG9nMiwoZG91YmxlKSk7Citkb3VibGUgRVhGVU4oZmFzdF9sb2dlLChkb3VibGUpKTsKKworCisjZGVmaW5lCXNpbih4KQkJZmFzdF9zaW4oeCkKKyNkZWZpbmUJY29zKHgpCQlmYXN0X2Nvcyh4KQorI2RlZmluZQl0YW4oeCkJCWZhc3RfdGFuKHgpCisjZGVmaW5lCWFzaW4oeCkJCWZhc3RfYXNpbih4KQorI2RlZmluZQlhY29zKHgpCQlmYXN0X2Fjb3MoeCkKKyNkZWZpbmUJYXRhbih4KQkJZmFzdF9hdGFuKHgpCisjZGVmaW5lCXNpbmgoeCkJCWZhc3Rfc2luaCh4KQorI2RlZmluZQljb3NoKHgpCQlmYXN0X2Nvc2goeCkKKyNkZWZpbmUJdGFuaCh4KQkJZmFzdF90YW5oKHgpCisjZGVmaW5lCWFzaW5oKHgpCWZhc3RfYXNpbmgoeCkKKyNkZWZpbmUJYWNvc2goeCkJZmFzdF9hY29zaCh4KQorI2RlZmluZQlhdGFuaCh4KQlmYXN0X2F0YW5oKHgpCisjZGVmaW5lCWFicyh4KQkJZmFzdF9hYnMoeCkKKyNkZWZpbmUJc3FydCh4KQkJZmFzdF9zcXJ0KHgpCisjZGVmaW5lCWV4cDIoeCkJCWZhc3RfZXhwMih4KQorI2RlZmluZQlleHAxMCh4KQlmYXN0X2V4cDEwKHgpCisjZGVmaW5lCWV4cGUoeCkJCWZhc3RfZXhwZSh4KQorI2RlZmluZQlsb2cxMCh4KQlmYXN0X2xvZzEwKHgpCisjZGVmaW5lCWxvZzIoeCkJCWZhc3RfbG9nMih4KQorI2RlZmluZQlsb2dlKHgpCQlmYXN0X2xvZ2UoeCkKKworI2lmZGVmIF9IQVZFX1NUREMKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW4gYXNzZW1ibGVyLCB0aGV5IHJlYWxseSBkbyB0YWtlIGZsb2F0cy4gVGhpcworICAgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGEgcmVhbCBBTlNJIGNvbXBpbGVyICovCisKK2Zsb2F0IEVYRlVOKGZhc3Rfc2luZiwoZmxvYXQpKTsKK2Zsb2F0IEVYRlVOKGZhc3RfY29zZiwoZmxvYXQpKTsKK2Zsb2F0IEVYRlVOKGZhc3RfdGFuZiwoZmxvYXQpKTsKKworZmxvYXQgRVhGVU4oZmFzdF9hc2luZiwoZmxvYXQpKTsKK2Zsb2F0IEVYRlVOKGZhc3RfYWNvc2YsKGZsb2F0KSk7CitmbG9hdCBFWEZVTihmYXN0X2F0YW5mLChmbG9hdCkpOworCitmbG9hdCBFWEZVTihmYXN0X3NpbmhmLChmbG9hdCkpOworZmxvYXQgRVhGVU4oZmFzdF9jb3NoZiwoZmxvYXQpKTsKK2Zsb2F0IEVYRlVOKGZhc3RfdGFuaGYsKGZsb2F0KSk7CisKK2Zsb2F0IEVYRlVOKGZhc3RfYXNpbmhmLChmbG9hdCkpOworZmxvYXQgRVhGVU4oZmFzdF9hY29zaGYsKGZsb2F0KSk7CitmbG9hdCBFWEZVTihmYXN0X2F0YW5oZiwoZmxvYXQpKTsKKworZmxvYXQgRVhGVU4oZmFzdF9hYnNmLChmbG9hdCkpOworZmxvYXQgRVhGVU4oZmFzdF9zcXJ0ZiwoZmxvYXQpKTsKK2Zsb2F0IEVYRlVOKGZhc3RfZXhwMmYsKGZsb2F0KSk7CitmbG9hdCBFWEZVTihmYXN0X2V4cDEwZiwoZmxvYXQpKTsKK2Zsb2F0IEVYRlVOKGZhc3RfZXhwZWYsKGZsb2F0KSk7CitmbG9hdCBFWEZVTihmYXN0X2xvZzEwZiwoZmxvYXQpKTsKK2Zsb2F0IEVYRlVOKGZhc3RfbG9nMmYsKGZsb2F0KSk7CitmbG9hdCBFWEZVTihmYXN0X2xvZ2VmLChmbG9hdCkpOworI2RlZmluZQlzaW5mKHgpCQlmYXN0X3NpbmYoeCkKKyNkZWZpbmUJY29zZih4KQkJZmFzdF9jb3NmKHgpCisjZGVmaW5lCXRhbmYoeCkJCWZhc3RfdGFuZih4KQorI2RlZmluZQlhc2luZih4KQlmYXN0X2FzaW5mKHgpCisjZGVmaW5lCWFjb3NmKHgpCWZhc3RfYWNvc2YoeCkKKyNkZWZpbmUJYXRhbmYoeCkJZmFzdF9hdGFuZih4KQorI2RlZmluZQlzaW5oZih4KQlmYXN0X3NpbmhmKHgpCisjZGVmaW5lCWNvc2hmKHgpCWZhc3RfY29zaGYoeCkKKyNkZWZpbmUJdGFuaGYoeCkJZmFzdF90YW5oZih4KQorI2RlZmluZQlhc2luaGYoeCkJZmFzdF9hc2luaGYoeCkKKyNkZWZpbmUJYWNvc2hmKHgpCWZhc3RfYWNvc2hmKHgpCisjZGVmaW5lCWF0YW5oZih4KQlmYXN0X2F0YW5oZih4KQorI2RlZmluZQlhYnNmKHgpCQlmYXN0X2Fic2YoeCkKKyNkZWZpbmUJc3FydGYoeCkJZmFzdF9zcXJ0Zih4KQorI2RlZmluZQlleHAyZih4KQlmYXN0X2V4cDJmKHgpCisjZGVmaW5lCWV4cDEwZih4KQlmYXN0X2V4cDEwZih4KQorI2RlZmluZQlleHBlZih4KQlmYXN0X2V4cGVmKHgpCisjZGVmaW5lCWxvZzEwZih4KQlmYXN0X2xvZzEwZih4KQorI2RlZmluZQlsb2cyZih4KQlmYXN0X2xvZzJmKHgpCisjZGVmaW5lCWxvZ2VmKHgpCWZhc3RfbG9nZWYoeCkKKyNlbmRpZgorLyogT3ZlcnJpZGUgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIG1hdGguaCAqLworI2VuZGlmIC8qIF9fc3lzdm5lY3Y3MF90YXJnZXQgKi8KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvaWVlZWZwLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9pZWVlZnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDJlN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvaWVlZWZwLmgKQEAgLTAsMCArMSw0MjQgQEAKKyNpZm5kZWYgX19JRUVFX0JJR19FTkRJQU4KKyNpZm5kZWYgX19JRUVFX0xJVFRMRV9FTkRJQU4KKworLyogVGhpcyBmaWxlIGNhbiBkZWZpbmUgbWFjcm9zIHRvIGNob29zZSB2YXJpYXRpb25zIG9mIHRoZSBJRUVFIGZsb2F0CisgICBmb3JtYXQ6CisKKyAgIF9GTFRfTEFSR0VTVF9FWFBPTkVOVF9JU19OT1JNQUwKKworCURlZmluZWQgaWYgdGhlIGZsb2F0IGZvcm1hdCB1c2VzIHRoZSBsYXJnZXN0IGV4cG9uZW50IGZvciBmaW5pdGUKKwludW1iZXJzIHJhdGhlciB0aGFuIE5hTiBhbmQgaW5maW5pdHkgcmVwcmVzZW50YXRpb25zLiAgU3VjaCBhCisJZm9ybWF0IGNhbm5vdCByZXByZXNlbnQgTmFOcyBvciBpbmZpbml0aWVzIGF0IGFsbCwgYnV0IGl0J3MgRkxUX01BWAorCWlzIHR3aWNlIHRoZSBJRUVFIHZhbHVlLgorCisgICBfRkxUX05PX0RFTk9STUFMUworCisJRGVmaW5lZCBpZiB0aGUgZmxvYXQgZm9ybWF0IGRvZXMgbm90IHN1cHBvcnQgSUVFRSBkZW5vcm1hbHMuICBFdmVyeQorCWZsb2F0IHdpdGggYSB6ZXJvIGV4cG9uZW50IGlzIHRha2VuIHRvIGJlIGEgemVybyByZXByZXNlbnRhdGlvbi4KKyAKKyAgID8/PyBBdCB0aGUgbW9tZW50LCB0aGVyZSBhcmUgbm8gZXF1aXZhbGVudCBtYWNyb3MgYWJvdmUgZm9yIGRvdWJsZXMgYW5kCisgICB0aGUgbWFjcm9zIGFyZSBub3QgZnVsbHkgc3VwcG9ydGVkIGJ5IC0tZW5hYmxlLW5ld2xpYi1ody1mcC4KKworICAgX19JRUVFX0JJR19FTkRJQU4KKworICAgICAgICBEZWZpbmVkIGlmIHRoZSBmbG9hdCBmb3JtYXQgaXMgYmlnIGVuZGlhbi4gIFRoaXMgaXMgbXV0dWFsbHkgZXhjbHVzaXZlCisgICAgICAgIHdpdGggX19JRUVFX0xJVFRMRV9FTkRJQU4uCisKKyAgIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisgCisgICAgICAgIERlZmluZWQgaWYgdGhlIGZsb2F0IGZvcm1hdCBpcyBsaXR0bGUgZW5kaWFuLiAgVGhpcyBpcyBtdXR1YWxseSBleGNsdXNpdmUKKyAgICAgICAgd2l0aCBfX0lFRUVfQklHX0VORElBTi4KKworICAgTm90ZSB0aGF0IG9uZSBvZiBfX0lFRUVfQklHX0VORElBTiBvciBfX0lFRUVfTElUVExFX0VORElBTiBtdXN0IGJlIHNwZWNpZmllZCBmb3IgYQorICAgcGxhdGZvcm0gb3IgZXJyb3Igd2lsbCBvY2N1ci4KKworICAgX19JRUVFX0JZVEVTX0xJVFRMRV9FTkRJQU4KKworICAgICAgICBUaGlzIGZsYWcgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIF9fSUVFRV9CSUdfRU5ESUFOIHRvIGRlc2NyaWJlIGEgc2l0dWF0aW9uIAorCXdoZXJlYnkgbXVsdGlwbGUgd29yZHMgb2YgYW4gSUVFRSBmbG9hdGluZyBwb2ludCBhcmUgaW4gYmlnIGVuZGlhbiBvcmRlciwgYnV0IHRoZQorCXdvcmRzIHRoZW1zZWx2ZXMgYXJlIGxpdHRsZSBlbmRpYW4gd2l0aCByZXNwZWN0IHRvIHRoZSBieXRlcy4KKworICAgX0RPVUJMRV9JU18zMkJJVFMgCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgZG91YmxlIGJ5IHVzaW5nIHRoZSAzMi1iaXQgSUVFRQorICAgICAgICBmbG9hdCB0eXBlLgorCisgICBfRkxPQVRfQVJHCisKKyAgICAgICAgVGhpcyByZXByZXNlbnRzIHdoYXQgdHlwZSBhIGZsb2F0IGFyZyBpcyBwYXNzZWQgYXMuICBJdCBpcyB1c2VkIHdoZW4gdGhlIHR5cGUgaXMKKyAgICAgICAgbm90IHByb21vdGVkIHRvIGRvdWJsZS4KKwkKKyovCisKKyNpZiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fdGh1bWJfXykpICYmICFkZWZpbmVkKF9fTUFWRVJJQ0tfXykKKy8qIEFSTSB0cmFkaXRpb25hbGx5IHVzZWQgYmlnLWVuZGlhbiB3b3JkczsgYW5kIHdpdGhpbiB0aG9zZSB3b3JkcyB0aGUKKyAgIGJ5dGUgb3JkZXJpbmcgd2FzIGJpZyBvciBsaXR0bGUgZW5kaWFuIGRlcGVuZGluZyB1cG9uIHRoZSB0YXJnZXQuCisgICBNb2Rlcm4gZmxvYXRpbmctcG9pbnQgZm9ybWF0cyBhcmUgbmF0dXJhbGx5IG9yZGVyZWQ7IGluIHRoaXMgY2FzZQorICAgX19WRlBfRlBfXyB3aWxsIGJlIGRlZmluZWQsIGV2ZW4gaWYgc29mdC1mbG9hdC4gICovCisjaWZkZWYgX19WRlBfRlBfXworIyBpZmRlZiBfX0FSTUVMX18KKyMgIGRlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorIyBlbHNlCisjICBkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfX0lFRUVfQklHX0VORElBTgorIyBpZmRlZiBfX0FSTUVMX18KKyMgIGRlZmluZSBfX0lFRUVfQllURVNfTElUVExFX0VORElBTgorIyBlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYWFyY2g2NF9fKQorI2lmIGRlZmluZWQgKF9fQUFSQ0g2NEVMX18pCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZWxzZQorI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fZXBpcGhhbnlfXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2RlZmluZSBTdWRkZW5fVW5kZXJmbG93IDEKKyNlbmRpZgorCisjaWZkZWYgX19ocHBhX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19uZHMzMl9fCisjaWZkZWYgX19iaWdfZW5kaWFuX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbHNlCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19TUFVfXworI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorCisjZGVmaW5lIGlzZmluaXRlKF9feSkgXAorCShfX2V4dGVuc2lvbl9fICh7aW50IF9fY3k7IFwKKwkJKHNpemVvZiAoX195KSA9PSBzaXplb2YgKGZsb2F0KSkgID8gKDEpIDogXAorCQkoX19jeSA9IGZwY2xhc3NpZnkoX195KSkgIT0gRlBfSU5GSU5JVEUgJiYgX19jeSAhPSBGUF9OQU47fSkpCisKKyNkZWZpbmUgaXNpbmYoX194KSAoKHNpemVvZiAoX194KSA9PSBzaXplb2YgKGZsb2F0KSkgID8gICgwKSA6IF9faXNpbmZkKF9feCkpCisjZGVmaW5lIGlzbmFuKF9feCkgKChzaXplb2YgKF9feCkgPT0gc2l6ZW9mIChmbG9hdCkpICA/ICAoMCkgOiBfX2lzbmFuZChfX3gpKQorCisvKgorICogTWFjcm9zIGZvciB1c2UgaW4gaWVlZWZwLmguIFdlIGNhbid0IGp1c3QgZGVmaW5lIHRoZSByZWFsIG9uZXMgaGVyZQorICogKGxpa2UgdGhvc2UgYWJvdmUpIGFzIHdlIGhhdmUgbmFtZSBzcGFjZSBpc3N1ZXMgd2hlbiB0aGlzIGlzICpub3QqCisgKiBpbmNsdWRlZCB2aWEgZ2VuZXJpYyB0aGUgaWVlZWZwLmguCisgKi8KKyNkZWZpbmUgX19pZWVlZnBfaXNuYW5mKHgpCTAKKyNkZWZpbmUgX19pZWVlZnBfaXNpbmZmKHgpCTAKKyNkZWZpbmUgX19pZWVlZnBfZmluaXRlZih4KQkxCisjZW5kaWYKKworI2lmZGVmIF9fc3BhcmNfXworI2lmZGVmIF9fTElUVExFX0VORElBTl9EQVRBX18KKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbHNlCisjZGVmaW5lIF9fSUVFRV9CSUdfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX202OGtfXykgfHwgZGVmaW5lZChfX21jNjgwMDBfXykKKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX21jNjhoYzExX18pIHx8IGRlZmluZWQoX19tYzY4aGMxMl9fKSB8fCBkZWZpbmVkKF9fbWM2OGhjMXhfXykKKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNpZmRlZiBfX0hBVkVfU0hPUlRfRE9VQkxFX18KKyMgZGVmaW5lIF9ET1VCTEVfSVNfMzJCSVRTCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19IODMwMF9fKSB8fCBkZWZpbmVkIChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkIChfX0g4MzAwU19fKSB8fCBkZWZpbmVkIChfX0g4NTAwX18pIHx8IGRlZmluZWQgKF9fSDgzMDBTWF9fKQorI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2RlZmluZSBfRkxPQVRfQVJHIGZsb2F0CisjZGVmaW5lIF9ET1VCTEVfSVNfMzJCSVRTCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9feGMxNnhfXykgfHwgZGVmaW5lZCAoX194YzE2eExfXykgfHwgZGVmaW5lZCAoX194YzE2eFNfXykKKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgX0ZMT0FUX0FSRyBmbG9hdAorI2RlZmluZSBfRE9VQkxFX0lTXzMyQklUUworI2VuZGlmCisKKworI2lmZGVmIF9fc2hfXworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZWxzZQorI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1NIMkVfXykgfHwgZGVmaW5lZChfX1NIM0VfXykgfHwgZGVmaW5lZChfX1NINF9TSU5HTEVfT05MWV9fKSB8fCBkZWZpbmVkKF9fU0gyQV9TSU5HTEVfT05MWV9fKQorI2RlZmluZSBfRE9VQkxFX0lTXzMyQklUUworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9BTTI5SworI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19pMzg2X18KKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19pOTYwX18KKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19sbTMyX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19NMzJSX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfQzR4KSB8fCBkZWZpbmVkKF9DM3gpCisjZGVmaW5lIF9fSUVFRV9CSUdfRU5ESUFOCisjZGVmaW5lIF9ET1VCTEVfSVNfMzJCSVRTCisjZW5kaWYKKworI2lmZGVmIF9fVE1TMzIwQzZYX18KKyNpZmRlZiBfQklHX0VORElBTgorI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1RJQzgwX18KKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19NSVBTRUxfXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2VuZGlmCisjaWZkZWYgX19NSVBTRUJfXworI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX01NSVhfXworI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX0QzMFZfXworI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2VuZGlmCisKKy8qIG5lY3Y3MCB3YXMgX19JRUVFX0xJVFRMRV9FTkRJQU4uICovCisKKyNpZmRlZiBfX1c2NV9fCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIF9ET1VCTEVfSVNfMzJCSVRTCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19aODAwMV9fKSB8fCBkZWZpbmVkKF9fWjgwMDJfXykKKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19tODhrX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19tbjEwMzAwX18KKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19tbjEwMjAwX18KKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgX0RPVUJMRV9JU18zMkJJVFMKKyNlbmRpZgorCisjaWZkZWYgX192ODAwCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2lmZGVmIF9fdjg1MAorI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX0QxMFZfXworI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2lmIF9fRE9VQkxFX18gPT0gMzIKKyNkZWZpbmUgX0RPVUJMRV9JU18zMkJJVFMKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1BQQ19fCisjaWYgKGRlZmluZWQoX0JJR19FTkRJQU4pICYmIF9CSUdfRU5ESUFOKSB8fCAoZGVmaW5lZChfQUlYKSAmJiBfQUlYKQorI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2Vsc2UKKyNpZiAoZGVmaW5lZChfTElUVExFX0VORElBTikgJiYgX0xJVFRMRV9FTkRJQU4pIHx8IChkZWZpbmVkKF9fc3VuX18pICYmIF9fc3VuX18pIHx8IChkZWZpbmVkKF9XSU4zMikgJiYgX1dJTjMyKQorI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX194c3Rvcm15MTZfXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX2FyY19fCisjaWZkZWYgX19iaWdfZW5kaWFuX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbHNlCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19DUlhfXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX2ZyMzBfXworI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX21jb3JlX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19tdF9fCisjZGVmaW5lIF9fSUVFRV9CSUdfRU5ESUFOCisjZW5kaWYKKworI2lmZGVmIF9fZnJ2X18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19tb3hpZV9fCisjaWZkZWYgX19NT1hJRV9CSUdfRU5ESUFOX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbHNlCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19pYTY0X18KKyNpZmRlZiBfX0JJR19FTkRJQU5fXworI2RlZmluZSBfX0lFRUVfQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX0FWUl9fCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIF9ET1VCTEVfSVNfMzJCSVRTCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19vcjMyX18pIHx8IGRlZmluZWQoX19vcjFrX18pIHx8IGRlZmluZWQoX19vcjE2X18pCisjZGVmaW5lIF9fSUVFRV9CSUdfRU5ESUFOCisjZW5kaWYKKworI2lmZGVmIF9fSVAyS19fCisjZGVmaW5lIF9fSUVFRV9CSUdfRU5ESUFOCisjZGVmaW5lIF9fU01BTExfQklURklFTERTCisjZGVmaW5lIF9ET1VCTEVfSVNfMzJCSVRTCisjZW5kaWYKKworI2lmZGVmIF9faXEyMDAwX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX19NQVZFUklDS19fCisjaWZkZWYgX19BUk1FTF9fCisjICBkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNlbHNlICAvKiBtdXN0IGJlIF9fQVJNRUJfXyAqLworIyAgZGVmaW5lIF9fSUVFRV9CSUdfRU5ESUFOCisjZW5kaWYgLyogX19BUk1FTF9fICovCisjZW5kaWYgLyogX19NQVZFUklDS19fICovCisKKyNpZmRlZiBfX20zMmNfXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2RlZmluZSBfX1NNQUxMX0JJVEZJRUxEUworI2VuZGlmCisKKyNpZmRlZiBfX0NSSVNfXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX0JGSU5fXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX3g4Nl82NF9fCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2lmZGVmIF9fbWVwX18KKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX01JQ1JPQkxBWkVfXworI2lmbmRlZiBfX01JQ1JPQkxBWkVFTF9fCisjZGVmaW5lIF9fSUVFRV9CSUdfRU5ESUFOCisjZWxzZQorI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fTVNQNDMwX18KKyNkZWZpbmUgX19JRUVFX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgX19TTUFMTF9CSVRGSUVMRFMJLyogMTYgQml0IElOVCAqLworI2VuZGlmCisKKyNpZmRlZiBfX1JMNzhfXworI2RlZmluZSBfX0lFRUVfTElUVExFX0VORElBTgorI2RlZmluZSBfX1NNQUxMX0JJVEZJRUxEUwkvKiAxNiBCaXQgSU5UICovCisjZGVmaW5lIF9ET1VCTEVfSVNfMzJCSVRTCisjZW5kaWYKKworI2lmZGVmIF9fUlhfXworCisjaWZkZWYgX19SWF9CSUdfRU5ESUFOX18KKyNkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyNlbHNlCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2lmbmRlZiBfX1JYXzY0QklUX0RPVUJMRVNfXworI2RlZmluZSBfRE9VQkxFX0lTXzMyQklUUworI2VuZGlmCisKKyNpZmRlZiBfX1JYXzE2QklUX0lOVFNfXworI2RlZmluZSBfX1NNQUxMX0JJVEZJRUxEUworI2VuZGlmCisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX19DUjE2X18pIHx8IGRlZmluZWQoX19DUjE2Q19fKSB8fGRlZmluZWQoX19DUjE2Q1BfXykpCisjZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIF9fU01BTExfQklURklFTERTCS8qIDE2IEJpdCBJTlQgKi8KKyNlbmRpZgorCisjaWZkZWYgX19OSU9TMl9fCisjIGlmZGVmIF9fbmlvczJfYmlnX2VuZGlhbl9fCisjICBkZWZpbmUgX19JRUVFX0JJR19FTkRJQU4KKyMgZWxzZQorIyAgZGVmaW5lIF9fSUVFRV9MSVRUTEVfRU5ESUFOCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfX0lFRUVfQklHX0VORElBTgorI2lmbmRlZiBfX0lFRUVfTElUVExFX0VORElBTgorI2Vycm9yIEVuZGlhbmVzcyBub3QgZGVjbGFyZWQhIQorI2VuZGlmIC8qIG5vdCBfX0lFRUVfTElUVExFX0VORElBTiAqLworI2VuZGlmIC8qIG5vdCBfX0lFRUVfQklHX0VORElBTiAqLworCisjZW5kaWYgLyogbm90IF9fSUVFRV9MSVRUTEVfRU5ESUFOICovCisjZW5kaWYgLyogbm90IF9fSUVFRV9CSUdfRU5ESUFOICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL21hbGxvYy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvbWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhZGE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL21hbGxvYy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZglfTUFDSE1BTExPQ19IXworI2RlZmluZQlfTUFDSE1BTExPQ19IXworCisvKiBwbGFjZSBob2xkZXIgc28gcGxhdGZvcm1zIG1heSBhZGQgbWFsbG9jLmggZXh0ZW5zaW9ucyAqLworCisjZW5kaWYJLyogX01BQ0hNQUxMT0NfSF8gKi8KKworCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9wYXJhbS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGY4YmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvcGFyYW0uaApAQCAtMCwwICsxIEBACisvKiBQbGFjZSBob2xkZXIgZm9yIG1hY2hpbmUtc3BlY2lmaWMgcGFyYW0uaC4gICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAtZGouaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL3NldGptcC1kai5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYTVlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAtZGouaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTkxIERKIERlbG9yaWUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24sIG1vZGlmaWNhdGlvbiwgYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBpcyBwZXJtaXR0ZWQKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGZvbGxvd2luZyBwYXJhZ3JhcGggYXJlCisgKiBkdXBsaWNhdGVkIGluIGFsbCBzdWNoIGZvcm1zLgorICoKKyAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgKiB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyogTW9kaWZpZWQgdG8gdXNlIFNFVEpNUF9ESl9IIHJhdGhlciB0aGFuIFNFVEpNUF9IIHRvIGF2b2lkCisgICBjb25mbGljdGluZyB3aXRoIHNldGptcC5oLiAgSWFuIFRheWxvciwgQ3lnbnVzIHN1cHBvcnQsIEFwcmlsLAorICAgMTk5My4gICovCisKKyNpZm5kZWYgX1NFVEpNUF9ESl9IXworI2RlZmluZSBfU0VUSk1QX0RKX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBsb25nIGVheDsKKyAgdW5zaWduZWQgbG9uZyBlYng7CisgIHVuc2lnbmVkIGxvbmcgZWN4OworICB1bnNpZ25lZCBsb25nIGVkeDsKKyAgdW5zaWduZWQgbG9uZyBlc2k7CisgIHVuc2lnbmVkIGxvbmcgZWRpOworICB1bnNpZ25lZCBsb25nIGVicDsKKyAgdW5zaWduZWQgbG9uZyBlc3A7CisgIHVuc2lnbmVkIGxvbmcgZWlwOworfSBqbXBfYnVmWzFdOworCitleHRlcm4gaW50IHNldGptcChqbXBfYnVmKTsKK2V4dGVybiB2b2lkIGxvbmdqbXAoam1wX2J1ZiwgaW50KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTQwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaApAQCAtMCwwICsxLDQxNCBAQAorCitfQkVHSU5fU1REX0MKKworI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX3RodW1iX18pCisvKgorICogQWxsIGNhbGxlZSBwcmVzZXJ2ZWQgcmVnaXN0ZXJzOgorICogdjEgLSB2NywgZnAsIGlwLCBzcCwgbHIsIGY0LCBmNSwgZjYsIGY3CisgKi8KKyNkZWZpbmUgX0pCTEVOIDIzCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCisjZGVmaW5lIF9KQkxFTiAyMgorI2RlZmluZSBfSkJUWVBFIGxvbmcgbG9uZworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVZSX18pCisjZGVmaW5lIF9KQkxFTiAyNAorI2VuZGlmCisKKyNpZmRlZiBfX3NwYXJjX18KKy8qCisgKiBvbnNzdGFjayxzaWdtYXNrLHNwLHBjLG5wYyxwc3IsZzEsbzAsd2JjbnQgKHNpZ2NvbnRleHQpLgorICogQWxsIGVsc2UgcmVjb3ZlcmVkIGJ5IHVuZGVyL292ZXIoZmxvdykgaGFuZGxpbmcuCisgKi8KKyNkZWZpbmUJX0pCTEVOCTEzCisjZW5kaWYKKworI2lmZGVmIF9fQkZJTl9fCisjZGVmaW5lIF9KQkxFTiAgNDAKKyNlbmRpZgorCisjaWZkZWYgX19lcGlwaGFueV9fCisvKiBBbGwgY2FsbGVlIHByZXNlcnZlZCByZWdpc3RlcnM6IHI0LXIxMCxmcCwgc3AsIGxyLHIxNSwgcjMyLXIzOSAgKi8KKyNkZWZpbmUgX0pCVFlQRSBsb25nIGxvbmcKKyNkZWZpbmUgX0pCTEVOIDEwCisjZW5kaWYKKworLyogbmVjdjcwIHdhcyA5IGFzIHdlbGwuICovCisKKyNpZiBkZWZpbmVkKF9fbTY4a19fKSB8fCBkZWZpbmVkKF9fbWM2ODAwMF9fKQorLyoKKyAqIG9uc3N0YWNrLHNpZ21hc2ssc3AscGMscHNsLGQyLWQ3LGEyLWE2LAorICogZnAyLWZwNwlmb3IgNjg4ODEuCisgKiBBbGwgZWxzZSByZWNvdmVyZWQgYnkgdW5kZXIvb3ZlcihmbG93KSBoYW5kbGluZy4KKyAqLworI2RlZmluZQlfSkJMRU4JMzQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX21jNjhoYzExX18pIHx8IGRlZmluZWQoX19tYzY4aGMxMl9fKSB8fCBkZWZpbmVkKF9fbWM2OGhjMXhfXykKKy8qCisgKiBELCBYLCBZIGFyZSBub3Qgc2F2ZWQuCisgKiBPbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBwc2V1ZG8gc29mdCByZWdpc3RlcnMgKG1heCAzMikuCisgKi8KKyNkZWZpbmUgX0pCTEVOICAzMgorI2VuZGlmCisKKyNpZmRlZiBfX25kczMyX18KKy8qIE9ubHkgMTcgd29yZHMgYXJlIGN1cnJlbnRseSBuZWVkZWQuCisgICBQcmVzZXJ2ZSBvbmUgd29yZCBzbG90IGlmIHdlIG5lZWQgdG8gZXhwYW5kLgorICAgQ2hlY2sgbmV3bGliL2xpYmMvbWFjaGluZS9uZHMzMi9zZXRqbXAuUyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICovCisjZGVmaW5lIF9KQkxFTiAxOAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fWjgwMDFfXykgfHwgZGVmaW5lZChfX1o4MDAyX18pCisvKiAxNiByZWdzICsgcGMgKi8KKyNkZWZpbmUgX0pCTEVOIDIwCisjZW5kaWYKKworI2lmZGVmIF9BTTI5SworLyoKKyAqIG9uc3N0YWNrLHNpZ21hc2ssc3AscGMsbnBjLHBzcixnMSxvMCx3YmNudCAoc2lnY29udGV4dCkuCisgKiBBbGwgZWxzZSByZWNvdmVyZWQgYnkgdW5kZXIvb3ZlcihmbG93KSBoYW5kbGluZy4KKyAqLworI2RlZmluZQlfSkJMRU4JOQorI2VuZGlmCisKKyNpZmRlZiBfX2kzODZfXworIyBpZiBkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkIChfSkJMRU4pCisjICBkZWZpbmUgX0pCTEVOICgxMyAqIDQpCisjIGVsaWYgZGVmaW5lZChfX3VuaXhfXykgfHwgZGVmaW5lZChfX3J0ZW1zX18pCisjICBkZWZpbmUgX0pCTEVOCTkKKyMgZWxzZQorIyAgaW5jbHVkZSAic2V0am1wLWRqLmgiCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9feDg2XzY0X18KKyMgaWZkZWYgX19DWUdXSU5fXworIyAgZGVmaW5lIF9KQlRZUEUgbG9uZworIyAgZGVmaW5lIF9KQkxFTiAgMzIKKyMgZWxzZQorIyAgZGVmaW5lIF9KQlRZUEUgbG9uZyBsb25nCisjICBkZWZpbmUgX0pCTEVOICA4CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9faTk2MF9fCisjZGVmaW5lIF9KQkxFTiAzNQorI2VuZGlmCisKKyNpZmRlZiBfX00zMlJfXworLyogT25seSA4IHdvcmRzIGFyZSBjdXJyZW50bHkgbmVlZGVkLiAgMTAgZ2l2ZXMgdXMgc29tZSBzbG9wIGlmIHdlIG5lZWQKKyAgIHRvIGV4cGFuZC4gICovCisjZGVmaW5lIF9KQkxFTiAxMAorI2VuZGlmCisKKyNpZmRlZiBfX21pcHNfXworI2lmZGVmIF9fbWlwczY0CisjZGVmaW5lIF9KQlRZUEUgbG9uZyBsb25nCisjZW5kaWYKKyNpZmRlZiBfX21pcHNfc29mdF9mbG9hdAorI2RlZmluZSBfSkJMRU4gMTEKKyNlbHNlCisjZGVmaW5lIF9KQkxFTiAyMworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fbTg4MDAwX18KKyNkZWZpbmUgX0pCTEVOIDIxCisjZW5kaWYKKworI2lmZGVmIF9fSDgzMDBfXworI2RlZmluZSBfSkJMRU4gNQorI2RlZmluZSBfSkJUWVBFIGludAorI2VuZGlmCisKKyNpZmRlZiBfX0g4MzAwSF9fCisvKiBzYW1lIGFzIEg4LzMwMCBidXQgcmVnaXN0ZXJzIGFyZSB0d2ljZSBhcyBiaWcgKi8KKyNkZWZpbmUgX0pCTEVOIDUKKyNkZWZpbmUgX0pCVFlQRSBsb25nCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fSDgzMDBTX18pIHx8IGRlZmluZWQgKF9fSDgzMDBTWF9fKQorLyogc2FtZSBhcyBIOC8zMDAgYnV0IHJlZ2lzdGVycyBhcmUgdHdpY2UgYXMgYmlnICovCisjZGVmaW5lIF9KQkxFTiA1CisjZGVmaW5lIF9KQlRZUEUgbG9uZworI2VuZGlmCisKKyNpZmRlZiBfX0g4NTAwX18KKyNkZWZpbmUgX0pCTEVOIDQKKyNlbmRpZgorCisjaWZkZWYgIF9fc2hfXworI2lmIF9fU0g1X18KKyNkZWZpbmUgX0pCTEVOIDUwCisjZGVmaW5lIF9KQlRZUEUgbG9uZyBsb25nCisjZWxzZQorI2RlZmluZSBfSkJMRU4gMjAKKyNlbmRpZiAvKiBfX1NINV9fICovCisjZW5kaWYKKworI2lmZGVmICBfX3Y4MDAKKyNkZWZpbmUgX0pCTEVOIDI4CisjZW5kaWYKKworI2lmZGVmIF9fUFBDX18KKyNpZmRlZiBfX0FMVElWRUNfXworI2RlZmluZSBfSkJMRU4gNjQKKyNlbHNlCisjZGVmaW5lIF9KQkxFTiAzMgorI2VuZGlmCisjZGVmaW5lIF9KQlRZUEUgZG91YmxlCisjZW5kaWYKKworI2lmZGVmIF9fTUlDUk9CTEFaRV9fCisjZGVmaW5lIF9KQkxFTiAgMjAKKyNkZWZpbmUgX0pCVFlQRSB1bnNpZ25lZCBpbnQKKyNlbmRpZgorCisjaWZkZWYgX19ocHBhX18KKy8qICVyMzAsICVyMi0lcjE4LCAlcjI3LCBwYWQsICVmcjEyLSVmcjE1LgorICAgTm90ZSBzcGFjZSBleGlzdHMgZm9yIHRoZSBGUCByZWdpc3RlcnMsIGJ1dCB0aGV5IGFyZSBub3QKKyAgIHNhdmVkLiAgKi8KKyNkZWZpbmUgX0pCTEVOIDI4CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19tbjEwMzAwX18pIHx8IGRlZmluZWQoX19tbjEwMjAwX18pCisjaWZkZWYgX19BTTMzXzJfXworI2RlZmluZSBfSkJMRU4gMjYKKyNlbHNlCisvKiBBIGd1ZXNzICovCisjZGVmaW5lIF9KQkxFTiAxMAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fdjg1MAorLyogSSB0aGluayBvdXIgc2V0am1wIGlzIHNhdmluZyAxNSByZWdzIGF0IHRoZSBtb21lbnQuICBHaXZlcyB1cyBvbmUgd29yZAorICAgc2xvcCBpZiB3ZSBuZWVkIHRvIGV4cGFuZC4gICovCisjZGVmaW5lIF9KQkxFTiAxNgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9DNHgpCisjZGVmaW5lIF9KQkxFTiAxMAorI2VuZGlmCisjaWYgZGVmaW5lZChfQzN4KQorI2RlZmluZSBfSkJMRU4gOQorI2VuZGlmCisKKyNpZmRlZiBfX1RNUzMyMEM2WF9fCisjZGVmaW5lIF9KQkxFTiAxMworI2VuZGlmCisKKyNpZmRlZiBfX1RJQzgwX18KKyNkZWZpbmUgX0pCTEVOIDEzCisjZW5kaWYKKworI2lmZGVmIF9fRDEwVl9fCisjZGVmaW5lIF9KQkxFTiA4CisjZW5kaWYKKworI2lmZGVmIF9fRDMwVl9fCisjZGVmaW5lIF9KQkxFTiAoKDY0IC8qIEdQUiAqLyArICgyKjIpIC8qIEFDcyAqLyArIDE4IC8qIENScyAqLykgLyAyKQorI2RlZmluZSBfSkJUWVBFIGRvdWJsZQorI2VuZGlmCisKKyNpZmRlZiBfX2Zydl9fCisjZGVmaW5lIF9KQkxFTiAoNjgvMikgIC8qIHJvb20gZm9yIDY4IDMyLWJpdCByZWdzICovCisjZGVmaW5lIF9KQlRZUEUgZG91YmxlCisjZW5kaWYKKworI2lmZGVmIF9fbW94aWVfXworI2RlZmluZSBfSkJMRU4gMTYKKyNlbmRpZgorCisjaWZkZWYgX19DUlhfXworI2RlZmluZSBfSkJMRU4gOQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChfX0NSMTZfXykgfHwgZGVmaW5lZChfX0NSMTZDX18pIHx8ZGVmaW5lZChfX0NSMTZDUF9fKSkKKy8qIHI2LCByNywgcjgsIHI5LCByMTAsIHIxMSwgcjEyIChyMTJMLCByMTJIKSwgCisgKiByMTMgKHIxM0wsIHIxM0gpLCByYShyYUwsIHJhSCksIHNwKHNwTCwgc3BIKSAqLworI2RlZmluZSBfSkJMRU4gMTQKKyNkZWZpbmUgX0pCVFlQRSB1bnNpZ25lZCBzaG9ydAorI2VuZGlmCisKKyNpZmRlZiBfX2ZyMzBfXworI2RlZmluZSBfSkJMRU4gMTAKKyNlbmRpZgorCisjaWZkZWYgX19pcTIwMDBfXworI2RlZmluZSBfSkJMRU4gMzIKKyNlbmRpZgorCisjaWZkZWYgX19tY29yZV9fCisjZGVmaW5lIF9KQkxFTiAxNgorI2VuZGlmCisKKyNpZmRlZiBfX01NSVhfXworLyogVXNpbmcgYSBsYXlvdXQgY29tcGF0aWJsZSB3aXRoIEdDQydzIGJ1aWx0LWluLiAgKi8KKyNkZWZpbmUgX0pCTEVOIDUKKyNkZWZpbmUgX0pCVFlQRSB1bnNpZ25lZCBsb25nCisjZW5kaWYKKworI2lmZGVmIF9fbXRfXworI2RlZmluZSBfSkJMRU4gMTYKKyNlbmRpZgorCisjaWZkZWYgX19TUFVfXworI2RlZmluZSBfSkJMRU4gNTAgCisjZGVmaW5lIF9KQlRZUEUgX192ZWN0b3Igc2lnbmVkIGludAorI2VuZGlmCisKKyNpZmRlZiBfX3hzdG9ybXkxNl9fCisvKiA0IEdQUnMgcGx1cyBTUCBwbHVzIFBDLiAqLworI2RlZmluZSBfSkJMRU4gOAorI2VuZGlmCisKKyNpZmRlZiBfX21lcF9fCisvKiAxNiBHUFJzLCBwYywgaGksIGxvICovCisjZGVmaW5lIF9KQkxFTiAxOQorI2VuZGlmCisKKyNpZmRlZiBfX0NSSVNfXworI2RlZmluZSBfSkJMRU4gMTgKKyNlbmRpZgorCisjaWZkZWYgX19sbTMyX18KKyNkZWZpbmUgX0pCTEVOIDE5CisjZW5kaWYKKworI2lmZGVmIF9fbTMyY19fCisjaWYgZGVmaW5lZChfX3I4Y19jcHVfXykgfHwgZGVmaW5lZChfX20xNmNfY3B1X18pCisjZGVmaW5lIF9KQkxFTiAoMjIvMikKKyNlbHNlCisjZGVmaW5lIF9KQkxFTiAoMzQvMikKKyNlbmRpZgorI2RlZmluZSBfSkJUWVBFIHVuc2lnbmVkIHNob3J0CisjZW5kaWYgLyogX19tMzJjX18gKi8KKworI2lmZGVmIF9fTVNQNDMwX18KKyNkZWZpbmUgX0pCTEVOIDkKKworI2lmZGVmIF9fTVNQNDMwWF9MQVJHRV9fCisjZGVmaW5lIF9KQlRZUEUgdW5zaWduZWQgbG9uZworI2Vsc2UKKyNkZWZpbmUgX0pCVFlQRSB1bnNpZ25lZCBzaG9ydAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fUkw3OF9fCisvKiBUaHJlZSBiYW5rcyBvZiByZWdpc3RlcnMsIFNQLCBDUywgRVMsIFBDICovCisjZGVmaW5lIF9KQkxFTiAoOCozKzgpCisjZGVmaW5lIF9KQlRZUEUgdW5zaWduZWQgY2hhcgorI2VuZGlmCisKKy8qCisgKiBUaGVyZSBhcmUgdHdvIHZlcnNpb25zIG9mIHNldGptcCgpL2xvbmdqbXAoKToKKyAqICAgMSkgQ29tcGlsZXIgKGdjYykgYnVpbHQtaW4gdmVyc2lvbnMuCisgKiAgIDIpIEZ1bmN0aW9uLWNhbGwgdmVyc2lvbnMuCisgKgorICogVGhlIGJ1aWx0LWluIHZlcnNpb25zIGFyZSB1c2VkIG1vc3Qgb2YgdGhlIHRpbWUuICBXaGVuIHVzZWQsIGdjYyByZXBsYWNlcworICogY2FsbHMgdG8gc2V0am1wKCkvbG9uZ2ptcCgpIHdpdGggaW5saW5lIGFzc2VtYmx5IGNvZGUuICBUaGUgYnVpbHQtaW4gCisgKiB2ZXJzaW9ucyBzYXZlL3Jlc3RvcmUgYSB2YXJpYWJsZSBudW1iZXIgb2YgcmVnaXN0ZXJzLgorCisgKiBfSkJMRU4gaXMgc2V0IHRvIDQwIHRvIGJlIHVsdHJhLXNhZmUgd2l0aCB0aGUgYnVpbHQtaW4gdmVyc2lvbnMuCisgKiBJdCBvbmx5IG5lZWRzIHRvIGJlIDEyIGZvciB0aGUgZnVuY3Rpb24tY2FsbCB2ZXJzaW9ucworICogYnV0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgdXNlZCBieSBib3RoIHZlcnNpb25zLgorICovCisjaWZkZWYgX19OSU9TMl9fCisjZGVmaW5lIF9KQkxFTiA0MAorI2RlZmluZSBfSkJUWVBFIHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjaWZkZWYgX19SWF9fCisjZGVmaW5lIF9KQkxFTiAweDQ0CisjZW5kaWYKKworI2lmZGVmIF9KQkxFTgorI2lmZGVmIF9KQlRZUEUKK3R5cGVkZWYJX0pCVFlQRSBqbXBfYnVmW19KQkxFTl07CisjZWxzZQordHlwZWRlZglpbnQgam1wX2J1ZltfSkJMRU5dOworI2VuZGlmCisjZW5kaWYKKworX0VORF9TVERfQworCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fcnRlbXNfXykKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBQT1NJWCBzaWdzZXRqbXAvc2lnbG9uZ2ptcCBtYWNyb3MgKi8KKyNpZmRlZiBfSkJUWVBFCit0eXBlZGVmIF9KQlRZUEUgc2lnam1wX2J1ZltfSkJMRU4rMSsoKHNpemVvZiAoX0pCVFlQRSkgKyBzaXplb2YgKHNpZ3NldF90KSAtIDEpCisJCQkJICAgICAvc2l6ZW9mIChfSkJUWVBFKSldOworI2Vsc2UKK3R5cGVkZWYgaW50IHNpZ2ptcF9idWZbX0pCTEVOKzErKHNpemVvZiAoc2lnc2V0X3QpL3NpemVvZiAoaW50KSldOworI2VuZGlmCisKKyNkZWZpbmUgX1NBVkVNQVNLCV9KQkxFTgorI2RlZmluZSBfU0lHTUFTSwkoX0pCTEVOKzEpCisKKyNpZmRlZiBfX0NZR1dJTl9fCisjIGRlZmluZSBfQ1lHV0lOX1dPUktJTkdfU0lHU0VUSk1QCisjZW5kaWYKKworI2lmZGVmIF9QT1NJWF9USFJFQURTCisjZGVmaW5lIF9fU0lHTUFTS19GVU5DIHB0aHJlYWRfc2lnbWFzaworI2Vsc2UKKyNkZWZpbmUgX19TSUdNQVNLX0ZVTkMgc2lncHJvY21hc2sKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKworI2RlZmluZSBzaWdzZXRqbXAoZW52LCBzYXZlbWFzaykgXAorICAgICAgICAgICAgX19leHRlbnNpb25fXyBcCisgICAgICAgICAgICAoeyBcCisgICAgICAgICAgICAgIHNpZ2ptcF9idWYgKl9zamJ1ZiA9ICYoZW52KTsgXAorICAgICAgICAgICAgICAoKCpfc2pidWYpW19TQVZFTUFTS10gPSBzYXZlbWFzayxcCisgICAgICAgICAgICAgIF9fU0lHTUFTS19GVU5DIChTSUdfU0VUTUFTSywgMCwgKHNpZ3NldF90ICopKCgqX3NqYnVmKSArIF9TSUdNQVNLKSksXAorICAgICAgICAgICAgICBzZXRqbXAgKCpfc2pidWYpKTsgXAorICAgICAgICAgICAgfSkKKworI2RlZmluZSBzaWdsb25nam1wKGVudiwgdmFsKSBcCisgICAgICAgICAgICBfX2V4dGVuc2lvbl9fIFwKKyAgICAgICAgICAgICh7IFwKKyAgICAgICAgICAgICAgc2lnam1wX2J1ZiAqX3NqYnVmID0gJihlbnYpOyBcCisgICAgICAgICAgICAgICgoKCgqX3NqYnVmKVtfU0FWRU1BU0tdKSA/IFwKKyAgICAgICAgICAgICAgIF9fU0lHTUFTS19GVU5DIChTSUdfU0VUTUFTSywgKHNpZ3NldF90ICopKCgqX3NqYnVmKSArIF9TSUdNQVNLKSwgMClcCisgICAgICAgICAgICAgICA6IDApLCBcCisgICAgICAgICAgICAgICBsb25nam1wICgqX3NqYnVmLCB2YWwpKTsgXAorICAgICAgICAgICAgfSkKKworI2Vsc2UgLyogIV9fR05VQ19fICovCisKKyNkZWZpbmUgc2lnc2V0am1wKGVudiwgc2F2ZW1hc2spICgoZW52KVtfU0FWRU1BU0tdID0gc2F2ZW1hc2ssXAorICAgICAgICAgICAgICAgX19TSUdNQVNLX0ZVTkMgKFNJR19TRVRNQVNLLCAwLCAoc2lnc2V0X3QgKikgKChlbnYpICsgX1NJR01BU0spKSxcCisgICAgICAgICAgICAgICBzZXRqbXAgKGVudikpCisKKyNkZWZpbmUgc2lnbG9uZ2ptcChlbnYsIHZhbCkgKCgoKGVudilbX1NBVkVNQVNLXSk/XAorICAgICAgICAgICAgICAgX19TSUdNQVNLX0ZVTkMgKFNJR19TRVRNQVNLLCAoc2lnc2V0X3QgKikgKChlbnYpICsgX1NJR01BU0spLCAwKTowKSxcCisgICAgICAgICAgICAgICBsb25nam1wIChlbnYsIHZhbCkpCisKKyNlbmRpZgorCisvKiBQT1NJWCBfc2V0am1wL19sb25nam1wLCBtYWludGFpbmVkIGZvciBYU0kgY29tcGF0aWJpbGl0eS4gIFRoZXNlCisgICBhcmUgZXF1aXZhbGVudCB0byBzaWdzZXRqbXAvc2lnbG9uZ2ptcCB3aGVuIG5vdCBzYXZpbmcgdGhlIHNpZ25hbCBtYXNrLgorICAgTmV3IGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHNpZ3NldGptcC9zaWdsb25nam1wIGluc3RlYWQuICovCisjaWZkZWYgX19DWUdXSU5fXworZXh0ZXJuIHZvaWQgX2xvbmdqbXAoam1wX2J1ZiwgaW50KTsKK2V4dGVybiBpbnQgX3NldGptcChqbXBfYnVmKTsKKyNlbHNlCisjZGVmaW5lIF9zZXRqbXAoZW52KQkJc2lnc2V0am1wICgoZW52KSwgMCkKKyNkZWZpbmUgX2xvbmdqbXAoZW52LCB2YWwpCXNpZ2xvbmdqbXAgKChlbnYpLCAodmFsKSkKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIF9fQ1lHV0lOX18gb3IgX19ydGVtc19fICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9zdGRsaWIuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL3N0ZGxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhM2YzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS9zdGRsaWIuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYJX01BQ0hTVERMSUJfSF8KKyNkZWZpbmUJX01BQ0hTVERMSUJfSF8KKworLyogcGxhY2UgaG9sZGVyIHNvIHBsYXRmb3JtcyBtYXkgYWRkIHN0ZGxpYi5oIGV4dGVuc2lvbnMgKi8KKworI2VuZGlmCS8qIF9NQUNIU1RETElCX0hfICovCisKKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvdGVybWlvcy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZmQ0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS90ZXJtaW9zLmgKQEAgLTAsMCArMSBAQAorI2RlZmluZSBfX01BWF9CQVVEICBCNDAwMDAwMApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvdGltZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hY2hpbmUvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTJjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS90aW1lLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZglfTUFDSFRJTUVfSF8KKyNkZWZpbmUJX01BQ0hUSU1FX0hfCisKKyNpZiBkZWZpbmVkKF9fcnRlbXNfXykKKyNkZWZpbmUgX0NMT0NLU19QRVJfU0VDXyAgc3lzY29uZihfU0NfQ0xLX1RDSykKKyNlbHNlICAvKiAhX19ydGVtc19fICovCisjaWYgZGVmaW5lZChfX2FhcmNoNjRfXykgfHwgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fdGh1bWJfXykKKyNkZWZpbmUgX0NMT0NLU19QRVJfU0VDXyAxMDAKKyNlbmRpZgorI2VuZGlmIC8qICFfX3J0ZW1zX18gKi8KKworI2lmZGVmIF9fU1BVX18KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ludCBuYW5vc2xlZXAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CisjZW5kaWYKKworI2VuZGlmCS8qIF9NQUNIVElNRV9IXyAqLworCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWNoaW5lL3R5cGVzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTc1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFjaGluZS90eXBlcy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYJX01BQ0hUWVBFU19IXworI2RlZmluZQlfTUFDSFRZUEVTX0hfCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBzZWN0aW9uIGlzIFJURU1TIHNwZWNpZmljIGFuZCBpcyBuZWVkZWQgdG8gbW9yZQorICogIGNsb3NlbHkgbWF0Y2ggdGhlIHR5cGVzIGRlZmluZWQgaW4gdGhlIEJTRCBtYWNoaW5lL3R5cGVzLmguCisgKiAgVGhpcyBpcyBuZWVkZWQgdG8gbGV0IHRoZSBSVEVNUy9CU0QgVENQL0lQIHN0YWNrIGNvbXBpbGUuCisgKi8KKyNpZiBkZWZpbmVkKF9fcnRlbXNfXykKKyNpbmNsdWRlIDxtYWNoaW5lL190eXBlcy5oPgorI2VuZGlmCisKKyNkZWZpbmUJX0NMT0NLX1RfCXVuc2lnbmVkIGxvbmcJCS8qIGNsb2NrKCkgKi8KKyNkZWZpbmUJX1RJTUVfVF8JbG9uZwkJCS8qIHRpbWUoKSAqLworI2RlZmluZSBfQ0xPQ0tJRF9UXyAJdW5zaWduZWQgbG9uZworI2RlZmluZSBfVElNRVJfVF8gICAJdW5zaWduZWQgbG9uZworCisjaWZuZGVmIF9IQVZFX1NZU1RZUEVTCit0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7Cit0eXBlZGVmIGludCBfX3BpZF90OworI2lmZGVmIF9fR05VQ19fCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX2xvZmZfdDsKKyNlbHNlCit0eXBlZGVmIGxvbmcgaW50IF9fbG9mZl90OworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCS8qIF9NQUNIVFlQRVNfSF8gKi8KKworCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFsbG9jLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiNWVmZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYWxsb2MuaApAQCAtMCwwICsxLDE2OSBAQAorLyogbWFsbG9jLmggLS0gaGVhZGVyIGZpbGUgZm9yIG1lbW9yeSByb3V0aW5lcy4gICovCisKKyNpZm5kZWYgX0lOQ0xVREVfTUFMTE9DX0hfCisjZGVmaW5lIF9JTkNMVURFX01BTExPQ19IXworCisjaW5jbHVkZSA8X2Fuc2kuaD4KKyNpbmNsdWRlIDxzeXMvcmVlbnQuaD4KKworI2RlZmluZSBfX25lZWRfc2l6ZV90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIGluY2x1ZGUgYW55IG1hY2hpbmUtc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLworI2luY2x1ZGUgPG1hY2hpbmUvbWFsbG9jLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogVGhpcyB2ZXJzaW9uIG9mIHN0cnVjdCBtYWxsaW5mbyBtdXN0IG1hdGNoIHRoZSBvbmUgaW4KKyAgIGxpYmMvc3RkbGliL21hbGxvY3IuYy4gICovCisKK3N0cnVjdCBtYWxsaW5mbyB7CisgIHNpemVfdCBhcmVuYTsgICAgLyogdG90YWwgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIHNpemVfdCBvcmRibGtzOyAgLyogbnVtYmVyIG9mIG5vbi1pbnVzZSBjaHVua3MgKi8KKyAgc2l6ZV90IHNtYmxrczsgICAvKiB1bnVzZWQgLS0gYWx3YXlzIHplcm8gKi8KKyAgc2l6ZV90IGhibGtzOyAgICAvKiBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zICovCisgIHNpemVfdCBoYmxraGQ7ICAgLyogdG90YWwgc3BhY2UgaW4gbW1hcHBlZCByZWdpb25zICovCisgIHNpemVfdCB1c21ibGtzOyAgLyogdW51c2VkIC0tIGFsd2F5cyB6ZXJvICovCisgIHNpemVfdCBmc21ibGtzOyAgLyogdW51c2VkIC0tIGFsd2F5cyB6ZXJvICovCisgIHNpemVfdCB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIHNpemVfdCBmb3JkYmxrczsgLyogdG90YWwgbm9uLWludXNlIHNwYWNlICovCisgIHNpemVfdCBrZWVwY29zdDsgLyogdG9wLW1vc3QsIHJlbGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KK307CQorCisvKiBUaGUgcm91dGluZXMuICAqLworCitleHRlcm4gX1BUUiBtYWxsb2MgX1BBUkFNUyAoKHNpemVfdCkpOworI2lmZGVmIF9fQ1lHV0lOX18KKyN1bmRlZiBfbWFsbG9jX3IKKyNkZWZpbmUgX21hbGxvY19yKHIsIHMpIG1hbGxvYyAocykKKyNlbHNlCitleHRlcm4gX1BUUiBfbWFsbG9jX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgc2l6ZV90KSk7CisjZW5kaWYKKworZXh0ZXJuIF9WT0lEIGZyZWUgX1BBUkFNUyAoKF9QVFIpKTsKKyNpZmRlZiBfX0NZR1dJTl9fCisjdW5kZWYgX2ZyZWVfcgorI2RlZmluZSBfZnJlZV9yKHIsIHApIGZyZWUgKHApCisjZWxzZQorZXh0ZXJuIF9WT0lEIF9mcmVlX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgX1BUUikpOworI2VuZGlmCisKK2V4dGVybiBfUFRSIHJlYWxsb2MgX1BBUkFNUyAoKF9QVFIsIHNpemVfdCkpOworI2lmZGVmIF9fQ1lHV0lOX18KKyN1bmRlZiBfcmVhbGxvY19yCisjZGVmaW5lIF9yZWFsbG9jX3IociwgcCwgcykgcmVhbGxvYyAocCwgcykKKyNlbHNlCitleHRlcm4gX1BUUiBfcmVhbGxvY19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIF9QVFIsIHNpemVfdCkpOworI2VuZGlmCisKK2V4dGVybiBfUFRSIGNhbGxvYyBfUEFSQU1TICgoc2l6ZV90LCBzaXplX3QpKTsKKyNpZmRlZiBfX0NZR1dJTl9fCisjdW5kZWYgX2NhbGxvY19yCisjZGVmaW5lIF9jYWxsb2NfcihyLCBzMSwgczIpIGNhbGxvYyAoczEsIHMyKTsKKyNlbHNlCitleHRlcm4gX1BUUiBfY2FsbG9jX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgc2l6ZV90LCBzaXplX3QpKTsKKyNlbmRpZgorCitleHRlcm4gX1BUUiBtZW1hbGlnbiBfUEFSQU1TICgoc2l6ZV90LCBzaXplX3QpKTsKKyNpZmRlZiBfX0NZR1dJTl9fCisjdW5kZWYgX21lbWFsaWduX3IKKyNkZWZpbmUgX21lbWFsaWduX3IociwgczEsIHMyKSBtZW1hbGlnbiAoczEsIHMyKTsKKyNlbHNlCitleHRlcm4gX1BUUiBfbWVtYWxpZ25fciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBzaXplX3QsIHNpemVfdCkpOworI2VuZGlmCisKK2V4dGVybiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8gX1BBUkFNUyAoKHZvaWQpKTsKKyNpZmRlZiBfX0NZR1dJTl9fCisjdW5kZWYgX21hbGxpbmZvX3IKKyNkZWZpbmUgX21hbGxpbmZvX3IocikgbWFsbGluZm8gKCkKKyNlbHNlCitleHRlcm4gc3RydWN0IG1hbGxpbmZvIF9tYWxsaW5mb19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICopKTsKKyNlbmRpZgorCitleHRlcm4gdm9pZCBtYWxsb2Nfc3RhdHMgX1BBUkFNUyAoKHZvaWQpKTsKKyNpZmRlZiBfX0NZR1dJTl9fCisjdW5kZWYgX21hbGxvY19zdGF0c19yCisjZGVmaW5lIF9tYWxsb2Nfc3RhdHNfcihyKSBtYWxsb2Nfc3RhdHMgKCkKKyNlbHNlCitleHRlcm4gdm9pZCBfbWFsbG9jX3N0YXRzX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKikpOworI2VuZGlmCisKK2V4dGVybiBpbnQgbWFsbG9wdCBfUEFSQU1TICgoaW50LCBpbnQpKTsKKyNpZmRlZiBfX0NZR1dJTl9fCisjdW5kZWYgX21hbGxvcHRfcgorI2RlZmluZSBfbWFsbG9wdF9yKGkxLCBpMikgbWFsbG9wdCAoaTEsIGkyKQorI2Vsc2UKK2V4dGVybiBpbnQgX21hbGxvcHRfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBpbnQsIGludCkpOworI2VuZGlmCisKK2V4dGVybiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplIF9QQVJBTVMgKChfUFRSKSk7CisjaWZkZWYgX19DWUdXSU5fXworI3VuZGVmIF9tYWxsb2NfdXNhYmxlX3NpemVfcgorI2RlZmluZSBfbWFsbG9jX3VzYWJsZV9zaXplX3IociwgcCkgbWFsbG9jX3VzYWJsZV9zaXplIChwKQorI2Vsc2UKK2V4dGVybiBzaXplX3QgX21hbGxvY191c2FibGVfc2l6ZV9yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIF9QVFIpKTsKKyNlbmRpZgorCisvKiBUaGVzZSBhcmVuJ3QgdG9vIHVzZWZ1bCBvbiBhbiBlbWJlZGRlZCBzeXN0ZW0sIGJ1dCB3ZSBkZWZpbmUgdGhlbQorICAgYW55aG93LiAgKi8KKworZXh0ZXJuIF9QVFIgdmFsbG9jIF9QQVJBTVMgKChzaXplX3QpKTsKKyNpZmRlZiBfX0NZR1dJTl9fCisjdW5kZWYgX3ZhbGxvY19yCisjZGVmaW5lIF92YWxsb2NfcihyLCBzKSB2YWxsb2MgKHMpCisjZWxzZQorZXh0ZXJuIF9QVFIgX3ZhbGxvY19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIHNpemVfdCkpOworI2VuZGlmCisKK2V4dGVybiBfUFRSIHB2YWxsb2MgX1BBUkFNUyAoKHNpemVfdCkpOworI2lmZGVmIF9fQ1lHV0lOX18KKyN1bmRlZiBfcHZhbGxvY19yCisjZGVmaW5lIF9wdmFsbG9jX3IociwgcykgcHZhbGxvYyAocykKKyNlbHNlCitleHRlcm4gX1BUUiBfcHZhbGxvY19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIHNpemVfdCkpOworI2VuZGlmCisKK2V4dGVybiBpbnQgbWFsbG9jX3RyaW0gX1BBUkFNUyAoKHNpemVfdCkpOworI2lmZGVmIF9fQ1lHV0lOX18KKyN1bmRlZiBfbWFsbG9jX3RyaW1fcgorI2RlZmluZSBfbWFsbG9jX3RyaW1fcihyLCBzKSBtYWxsb2NfdHJpbSAocykKKyNlbHNlCitleHRlcm4gaW50IF9tYWxsb2NfdHJpbV9yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIHNpemVfdCkpOworI2VuZGlmCisKKy8qIEEgY29tcGF0aWJpbGl0eSByb3V0aW5lIGZvciBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhlIGFsbG9jYXRvci4gICovCisKK2V4dGVybiBfVk9JRCBtc3RhdHMgX1BBUkFNUyAoKGNoYXIgKikpOworI2lmZGVmIF9fQ1lHV0lOX18KKyN1bmRlZiBfbXN0YXRzX3IKKyNkZWZpbmUgX21zdGF0c19yKHIsIHApIG1zdGF0cyAocCkKKyNlbHNlCitleHRlcm4gX1ZPSUQgX21zdGF0c19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKikpOworI2VuZGlmCisKKy8qIFNWSUQyL1hQRyBtYWxsb3B0IG9wdGlvbnMgKi8KKworI2RlZmluZSBNX01YRkFTVCAgMSAgICAvKiBVTlVTRUQgaW4gdGhpcyBtYWxsb2MgKi8KKyNkZWZpbmUgTV9OTEJMS1MgIDIgICAgLyogVU5VU0VEIGluIHRoaXMgbWFsbG9jICovCisjZGVmaW5lIE1fR1JBSU4gICAzICAgIC8qIFVOVVNFRCBpbiB0aGlzIG1hbGxvYyAqLworI2RlZmluZSBNX0tFRVAgICAgNCAgICAvKiBVTlVTRUQgaW4gdGhpcyBtYWxsb2MgKi8KKworLyogbWFsbG9wdCBvcHRpb25zIHRoYXQgYWN0dWFsbHkgZG8gc29tZXRoaW5nICovCisgIAorI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgIC0xCisjZGVmaW5lIE1fVE9QX1BBRCAgICAgICAgICAgLTIKKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAtMyAKKyNkZWZpbmUgTV9NTUFQX01BWCAgICAgICAgICAtNAorCisjaWZuZGVmIF9fQ1lHV0lOX18KKy8qIFNvbWUgc3lzdGVtcyBwcm92aWRlIHRoaXMsIHNvIGRvIHRvbyBmb3IgY29tcGF0aWJpbGl0eS4gICovCitleHRlcm4gdm9pZCBjZnJlZSBfUEFSQU1TICgoX1BUUikpOworI2VuZGlmIC8qIF9fQ1lHV0lOX18gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9JTkNMVURFX01BTExPQ19IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL21hdGguaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2ZmVjZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9tYXRoLmgKQEAgLTAsMCArMSw2MDAgQEAKKyNpZm5kZWYgIF9NQVRIX0hfCisKKyNkZWZpbmUgIF9NQVRIX0hfCisKKyNpbmNsdWRlIDxzeXMvcmVlbnQuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2llZWVmcC5oPgorI2luY2x1ZGUgIl9hbnNpLmgiCisKK19CRUdJTl9TVERfQworCisvKiBfX2RtYXRoLCBfX2ZtYXRoLCBhbmQgX19sZG1hdGggYXJlIG9ubHkgaGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAqIGluIGNhc2UgYW55IGNvZGUgdXNlZCB0aGVtLiAgVGhleSBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgTmV3bGliLCBpdHNlbGYsCisgKiBvdGhlciB0aGFuIGxlZ2FjeS4gICovCit1bmlvbiBfX2RtYXRoCit7CisgIGRvdWJsZSBkOworICBfX1VMb25nIGlbMl07Cit9OworCit1bmlvbiBfX2ZtYXRoCit7CisgIGZsb2F0IGY7CisgIF9fVUxvbmcgaVsxXTsKK307CisKKyNpZiBkZWZpbmVkKF9IQVZFX0xPTkdfRE9VQkxFKQordW5pb24gX19sZG1hdGgKK3sKKyAgbG9uZyBkb3VibGUgbGQ7CisgIF9fVUxvbmcgaVs0XTsKK307CisjZW5kaWYKKworLyogTmF0dXJhbCBsb2cgb2YgMiAqLworI2RlZmluZSBfTV9MTjIgICAgICAgIDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3CisKKyNpZiBfX0dOVUNfUFJFUkVRICgzLCAzKQorIC8qIGdjYyA+PSAzLjMgaW1wbGljaXRseSBkZWZpbmVzIGJ1aWx0aW5zIGZvciBIVUdFX1ZBTHggdmFsdWVzLiAgKi8KKworIyBpZm5kZWYgSFVHRV9WQUwKKyMgIGRlZmluZSBIVUdFX1ZBTCAoX19idWlsdGluX2h1Z2VfdmFsKCkpCisjIGVuZGlmCisKKyMgaWZuZGVmIEhVR0VfVkFMRgorIyAgZGVmaW5lIEhVR0VfVkFMRiAoX19idWlsdGluX2h1Z2VfdmFsZigpKQorIyBlbmRpZgorCisjIGlmbmRlZiBIVUdFX1ZBTEwKKyMgIGRlZmluZSBIVUdFX1ZBTEwgKF9fYnVpbHRpbl9odWdlX3ZhbGwoKSkKKyMgZW5kaWYKKworIyBpZm5kZWYgSU5GSU5JVFkKKyMgIGRlZmluZSBJTkZJTklUWSAoX19idWlsdGluX2luZmYoKSkKKyMgZW5kaWYKKworIyBpZm5kZWYgTkFOCisjICBkZWZpbmUgTkFOIChfX2J1aWx0aW5fbmFuZigiIikpCisjIGVuZGlmCisKKyNlbHNlIC8qICFnY2MgPj0gMy4zICAqLworCisgLyogICAgICBObyBidWlsdGlucy4gIFVzZSBmaXhlZCBkZWZpbmVzIGluc3RlYWQuICAoQWxsIDMgSFVHRSBwbHVzIHRoZSBJTkZJTklUWQorICAqIGFuZCBOQU4gbWFjcm9zIGFyZSByZXF1aXJlZCB0byBiZSBjb25zdGFudCBleHByZXNzaW9ucy4gIFVzaW5nIGEgdmFyaWFibGUtLQorICAqIGV2ZW4gYSBzdGF0aWMgY29uc3QtLWRvZXMgbm90IG1lZXQgdGhpcyByZXF1aXJlbWVudCwgYXMgaXQgY2Fubm90IGJlCisgICogZXZhbHVhdGVkIGF0IHRyYW5zbGF0aW9uIHRpbWUuKQorICAqICAgICAgVGhlIGluZmluaXRpZXMgYXJlIGRvbmUgdXNpbmcgbnVtYmVycyB0aGF0IGFyZSBmYXIgaW4gZXhjZXNzIG9mCisgICogc29tZXRoaW5nIHRoYXQgd291bGQgYmUgZXhwZWN0ZWQgdG8gYmUgZW5jb3VudGVyZWQgaW4gYSBmbG9hdGluZy1wb2ludAorICAqIGltcGxlbWVudGF0aW9uLiAgKEEgbW9yZSBjZXJ0YWluIHdheSB1c2VzIHZhbHVlcyBmcm9tIGZsb2F0LmgsIGJ1dCB0aGF0IGlzCisgICogYXZvaWRlZCBiZWNhdXNlIHN5c3RlbSBpbmNsdWRlcyBhcmUgbm90IHN1cHBvc2VkIHRvIGluY2x1ZGUgZWFjaCBvdGhlci4pCisgICogICAgICBUaGlzIG1ldGhvZCBtaWdodCBwcm9kdWNlIHdhcm5pbmdzIGZyb20gc29tZSBjb21waWxlcnMuICAoSXQgZG9lcyBpbgorICAqIG5ld2VyIEdDQ3MsIGJ1dCBub3QgZm9yIG9uZXMgdGhhdCB3b3VsZCBoaXQgdGhpcyAjZWxzZS4pICBJZiB0aGlzIGhhcHBlbnMsCisgICogcGxlYXNlIHJlcG9ydCBkZXRhaWxzIHRvIHRoZSBOZXdsaWIgbWFpbGluZyBsaXN0LiAgKi8KKworICNpZm5kZWYgSFVHRV9WQUwKKyAgI2RlZmluZSBIVUdFX1ZBTCAoMS4wZTk5OTk5OTk5OSkKKyAjZW5kaWYKKworICNpZm5kZWYgSFVHRV9WQUxGCisgICNkZWZpbmUgSFVHRV9WQUxGICgxLjBlOTk5OTk5OTk5RikKKyAjZW5kaWYKKworICNpZiAhZGVmaW5lZChIVUdFX1ZBTEwpICAmJiAgZGVmaW5lZChfSEFWRV9MT05HX0RPVUJMRSkKKyAgI2RlZmluZSBIVUdFX1ZBTEwgKDEuMGU5OTk5OTk5OTlMKQorICNlbmRpZgorCisgI2lmICFkZWZpbmVkKElORklOSVRZKQorICAjZGVmaW5lIElORklOSVRZIChIVUdFX1ZBTEYpCisgI2VuZGlmCisKKyAjaWYgIWRlZmluZWQoTkFOKQorICAjaWYgZGVmaW5lZChfX0dOVUNfXykgICYmICBkZWZpbmVkKF9fY3BsdXNwbHVzKQorICAgIC8qIEV4Y2VwdGlvbjogIG9sZGVyIGcrKyB2ZXJzaW9ucyB3YXJuIGFib3V0IHRoZSBkaXZpZGUgYnkgMCB1c2VkIGluIHRoZQorICAgICAqIG5vcm1hbCBjYXNlIChldmVuIHRob3VnaCBvbGRlciBnY2NzIGRvIG5vdCkuICBUaGlzIHRyaWNrIHN1cHByZXNzZXMgdGhlCisgICAgICogd2FybmluZywgYnV0IGNhdXNlcyBlcnJvcnMgZm9yIHBsYWluIGdjYywgc28gaXMgb25seSB1c2VkIGluIHRoZSBvbmUKKyAgICAgKiBzcGVjaWFsIGNhc2UuICAqLworICAgIHN0YXRpYyBjb25zdCB1bmlvbiB7IF9fVUxvbmcgX19pWzFdOyBmbG9hdCBfX2Q7IH0gX19OYW5mID0gezB4N0ZDMDAwMDB9OworICAgICNkZWZpbmUgTkFOIChfX05hbmYuX19kKQorICAjZWxzZQorICAgICNkZWZpbmUgTkFOICgwLjBGLzAuMEYpCisgICNlbmRpZgorICNlbmRpZgorCisjZW5kaWYgLyogIWdjYyA+PSAzLjMgICovCisKKy8qIFJlZW50cmFudCBBTlNJIEMgZnVuY3Rpb25zLiAgKi8KKworI2lmbmRlZiBfX21hdGhfNjg4ODEKK2V4dGVybiBkb3VibGUgYXRhbiBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgY29zIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBzaW4gX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIHRhbiBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgdGFuaCBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgZnJleHAgX1BBUkFNUygoZG91YmxlLCBpbnQgKikpOworZXh0ZXJuIGRvdWJsZSBtb2RmIF9QQVJBTVMoKGRvdWJsZSwgZG91YmxlICopKTsKK2V4dGVybiBkb3VibGUgY2VpbCBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgZmFicyBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgZmxvb3IgX1BBUkFNUygoZG91YmxlKSk7CisjZW5kaWYgLyogISBkZWZpbmVkIChfX21hdGhfNjg4ODEpICovCisKKy8qIE5vbiByZWVudHJhbnQgQU5TSSBDIGZ1bmN0aW9ucy4gICovCisKKyNpZm5kZWYgX1JFRU5UX09OTFkKKyNpZm5kZWYgX19tYXRoXzY4ODgxCitleHRlcm4gZG91YmxlIGFjb3MgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGFzaW4gX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGF0YW4yIF9QQVJBTVMoKGRvdWJsZSwgZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGNvc2ggX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIHNpbmggX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGV4cCBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgbGRleHAgX1BBUkFNUygoZG91YmxlLCBpbnQpKTsKK2V4dGVybiBkb3VibGUgbG9nIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBsb2cxMCBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgcG93IF9QQVJBTVMoKGRvdWJsZSwgZG91YmxlKSk7CitleHRlcm4gZG91YmxlIHNxcnQgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGZtb2QgX1BBUkFNUygoZG91YmxlLCBkb3VibGUpKTsKKyNlbmRpZiAvKiAhIGRlZmluZWQgKF9fbWF0aF82ODg4MSkgKi8KKyNlbmRpZiAvKiAhIGRlZmluZWQgKF9SRUVOVF9PTkxZKSAqLworCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogSVNPIEM5OSB0eXBlcyBhbmQgbWFjcm9zLiAqLworCisvKiBGSVhNRTogIEZMVF9FVkFMX01FVEhPRCBzaG91bGQgc29tZWhvdyBiZSBnb3R0ZW4gZnJvbSBmbG9hdC5oICh3aGljaCBpcyBoYXJkLAorICogY29uc2lkZXJpbmcgdGhhdCB0aGUgc3RhbmRhcmQgc2F5cyB0aGUgaW5jbHVkZXMgaXQgZGVmaW5lcyBzaG91bGQgbm90CisgKiBpbmNsdWRlIG90aGVyIGluY2x1ZGVzIHRoYXQgaXQgZGVmaW5lcykgYW5kIHRoYXQgdmFsdWUgdXNlZC4gIChUaGlzIGNhbiBiZQorICogc29sdmVkLCBidXQgYXV0b2NvbmYgaGFzIGEgYnVnIHdoaWNoIG1ha2VzIHRoZSBzb2x1dGlvbiBtb3JlIGRpZmZpY3VsdCwgc28KKyAqIGl0IGhhcyBiZWVuIHNraXBwZWQgZm9yIG5vdy4pICAqLworI2lmICFkZWZpbmVkKEZMVF9FVkFMX01FVEhPRCkgJiYgZGVmaW5lZChfX0ZMVF9FVkFMX01FVEhPRF9fKQorICAjZGVmaW5lIEZMVF9FVkFMX01FVEhPRCBfX0ZMVF9FVkFMX01FVEhPRF9fCisgICNkZWZpbmUgX19UTVBfRkxUX0VWQUxfTUVUSE9ECisjZW5kaWYgLyogRkxUX0VWQUxfTUVUSE9EICovCisjaWYgZGVmaW5lZCBGTFRfRVZBTF9NRVRIT0QKKyAgI2lmIEZMVF9FVkFMX01FVEhPRCA9PSAwCisgICAgdHlwZWRlZiBmbG9hdCAgZmxvYXRfdDsKKyAgICB0eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsKKyAgICNlbGlmIEZMVF9FVkFMX01FVEhPRCA9PSAxCisgICAgdHlwZWRlZiBkb3VibGUgZmxvYXRfdDsKKyAgICB0eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsKKyAgICNlbGlmIEZMVF9FVkFMX01FVEhPRCA9PSAyCisgICAgdHlwZWRlZiBsb25nIGRvdWJsZSBmbG9hdF90OworICAgIHR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CisgICAjZWxzZQorICAgIC8qIEltcGxlbWVudGF0aW9uLWRlZmluZWQuICBBc3N1bWUgZmxvYXRfdCBhbmQgZG91YmxlX3QgaGF2ZSBiZWVuCisgICAgICogZGVmaW5lZCBwcmV2aW91c2x5IGZvciB0aGlzIGNvbmZpZ3VyYXRpb24gKGUuZy4gY29uZmlnLmgpLiAqLworICAjZW5kaWYKKyNlbHNlCisgICAgLyogQXNzdW1lIGJhc2ljIGRlZmluaXRpb25zLiAgKi8KKyAgICB0eXBlZGVmIGZsb2F0ICBmbG9hdF90OworICAgIHR5cGVkZWYgZG91YmxlIGRvdWJsZV90OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1RNUF9GTFRfRVZBTF9NRVRIT0QpCisgICN1bmRlZiBGTFRfRVZBTF9NRVRIT0QKKyNlbmRpZgorCisjZGVmaW5lIEZQX05BTiAgICAgICAgIDAKKyNkZWZpbmUgRlBfSU5GSU5JVEUgICAgMQorI2RlZmluZSBGUF9aRVJPICAgICAgICAyCisjZGVmaW5lIEZQX1NVQk5PUk1BTCAgIDMKKyNkZWZpbmUgRlBfTk9STUFMICAgICAgNAorCisjaWZuZGVmIEZQX0lMT0dCMAorIyBkZWZpbmUgRlBfSUxPR0IwICgtSU5UX01BWCkKKyNlbmRpZgorI2lmbmRlZiBGUF9JTE9HQk5BTgorIyBkZWZpbmUgRlBfSUxPR0JOQU4gSU5UX01BWAorI2VuZGlmCisKKyNpZm5kZWYgTUFUSF9FUlJOTworIyBkZWZpbmUgTUFUSF9FUlJOTyAxCisjZW5kaWYKKyNpZm5kZWYgTUFUSF9FUlJFWENFUFQKKyMgZGVmaW5lIE1BVEhfRVJSRVhDRVBUIDIKKyNlbmRpZgorI2lmbmRlZiBtYXRoX2VycmhhbmRsaW5nCisjIGRlZmluZSBtYXRoX2VycmhhbmRsaW5nIE1BVEhfRVJSTk8KKyNlbmRpZgorCitleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCB4KTsKK2V4dGVybiBpbnQgX19pc2luZmQgKGRvdWJsZSB4KTsKK2V4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IHgpOworZXh0ZXJuIGludCBfX2lzbmFuZCAoZG91YmxlIHgpOworZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChmbG9hdCB4KTsKK2V4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZCAoZG91YmxlIHgpOworZXh0ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCB4KTsKK2V4dGVybiBpbnQgX19zaWduYml0ZCAoZG91YmxlIHgpOworCisjZGVmaW5lIGZwY2xhc3NpZnkoX194KSBcCisJKChzaXplb2YoX194KSA9PSBzaXplb2YoZmxvYXQpKSAgPyBfX2ZwY2xhc3NpZnlmKF9feCkgOiBcCisJX19mcGNsYXNzaWZ5ZChfX3gpKQorCisjaWZuZGVmIGlzZmluaXRlCisgICNkZWZpbmUgaXNmaW5pdGUoX195KSBcCisgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHtpbnQgX19jeSA9IGZwY2xhc3NpZnkoX195KTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jeSAhPSBGUF9JTkZJTklURSAmJiBfX2N5ICE9IEZQX05BTjt9KSkKKyNlbmRpZgorCisvKiBOb3RlOiBpc2luZiBhbmQgaXNuYW4gd2VyZSBvbmNlIGZ1bmN0aW9ucyBpbiBuZXdsaWIgdGhhdCB0b29rIGRvdWJsZQorICogICAgICAgYXJndW1lbnRzLiAgQzk5IHNwZWNpZmllcyB0aGF0IHRoZXNlIG5hbWVzIGFyZSByZXNlcnZlZCBmb3IgbWFjcm9zCisgKiAgICAgICBzdXBwb3J0aW5nIG11bHRpcGxlIGZsb2F0aW5nIHBvaW50IHR5cGVzLiAgVGh1cywgdGhleSBhcmUKKyAqICAgICAgIG5vdyBkZWZpbmVkIGFzIG1hY3Jvcy4gIEltcGxlbWVudGF0aW9ucyBvZiB0aGUgb2xkIGZ1bmN0aW9ucworICogICAgICAgdGFraW5nIGRvdWJsZSBhcmd1bWVudHMgc3RpbGwgZXhpc3QgZm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZXMKKyAqICAgICAgIChwcm90b3R5cGVzIGZvciB0aGVtIGFyZSBpbiA8aWVlZWZwLmg+KS4gICovCisjaWZuZGVmIGlzaW5mCisgICNkZWZpbmUgaXNpbmYoeSkgKGZwY2xhc3NpZnkoeSkgPT0gRlBfSU5GSU5JVEUpCisjZW5kaWYKKworI2lmbmRlZiBpc25hbgorICAjZGVmaW5lIGlzbmFuKHkpIChmcGNsYXNzaWZ5KHkpID09IEZQX05BTikKKyNlbmRpZgorCisjZGVmaW5lIGlzbm9ybWFsKHkpIChmcGNsYXNzaWZ5KHkpID09IEZQX05PUk1BTCkKKyNkZWZpbmUgc2lnbmJpdChfX3gpIFwKKwkoKHNpemVvZihfX3gpID09IHNpemVvZihmbG9hdCkpICA/ICBfX3NpZ25iaXRmKF9feCkgOiBcCisJCV9fc2lnbmJpdGQoX194KSkKKworI2RlZmluZSBpc2dyZWF0ZXIoeCx5KSBcCisgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHtfX3R5cGVvZl9fKHgpIF9feCA9ICh4KTsgX190eXBlb2ZfXyh5KSBfX3kgPSAoeSk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc3Vub3JkZXJlZChfX3gsX195KSAmJiAoX194ID4gX195KTt9KSkKKyNkZWZpbmUgaXNncmVhdGVyZXF1YWwoeCx5KSBcCisgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHtfX3R5cGVvZl9fKHgpIF9feCA9ICh4KTsgX190eXBlb2ZfXyh5KSBfX3kgPSAoeSk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc3Vub3JkZXJlZChfX3gsX195KSAmJiAoX194ID49IF9feSk7fSkpCisjZGVmaW5lIGlzbGVzcyh4LHkpIFwKKyAgICAgICAgICAoX19leHRlbnNpb25fXyAoe19fdHlwZW9mX18oeCkgX194ID0gKHgpOyBfX3R5cGVvZl9fKHkpIF9feSA9ICh5KTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzdW5vcmRlcmVkKF9feCxfX3kpICYmIChfX3ggPCBfX3kpO30pKQorI2RlZmluZSBpc2xlc3NlcXVhbCh4LHkpIFwKKyAgICAgICAgICAoX19leHRlbnNpb25fXyAoe19fdHlwZW9mX18oeCkgX194ID0gKHgpOyBfX3R5cGVvZl9fKHkpIF9feSA9ICh5KTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzdW5vcmRlcmVkKF9feCxfX3kpICYmIChfX3ggPD0gX195KTt9KSkKKyNkZWZpbmUgaXNsZXNzZ3JlYXRlcih4LHkpIFwKKyAgICAgICAgICAoX19leHRlbnNpb25fXyAoe19fdHlwZW9mX18oeCkgX194ID0gKHgpOyBfX3R5cGVvZl9fKHkpIF9feSA9ICh5KTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzdW5vcmRlcmVkKF9feCxfX3kpICYmIChfX3ggPCBfX3kgfHwgX194ID4gX195KTt9KSkKKworI2RlZmluZSBpc3Vub3JkZXJlZChhLGIpIFwKKyAgICAgICAgICAoX19leHRlbnNpb25fXyAoe19fdHlwZW9mX18oYSkgX19hID0gKGEpOyBfX3R5cGVvZl9fKGIpIF9fYiA9IChiKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBjbGFzc2lmeShfX2EpID09IEZQX05BTiB8fCBmcGNsYXNzaWZ5KF9fYikgPT0gRlBfTkFOO30pKQorCisvKiBOb24gQU5TSSBkb3VibGUgcHJlY2lzaW9uIGZ1bmN0aW9ucy4gICovCisKK2V4dGVybiBkb3VibGUgaW5maW5pdHkgX1BBUkFNUygodm9pZCkpOworZXh0ZXJuIGRvdWJsZSBuYW4gX1BBUkFNUygoY29uc3QgY2hhciAqKSk7CitleHRlcm4gaW50IGZpbml0ZSBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgY29weXNpZ24gX1BBUkFNUygoZG91YmxlLCBkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgbG9nYiBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBpbnQgaWxvZ2IgX1BBUkFNUygoZG91YmxlKSk7CisKK2V4dGVybiBkb3VibGUgYXNpbmggX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGNicnQgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIG5leHRhZnRlciBfUEFSQU1TKChkb3VibGUsIGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSByaW50IF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBzY2FsYm4gX1BBUkFNUygoZG91YmxlLCBpbnQpKTsKKworZXh0ZXJuIGRvdWJsZSBleHAyIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIF9QQVJBTVMoKGRvdWJsZSwgbG9uZyBpbnQpKTsKK2V4dGVybiBkb3VibGUgdGdhbW1hIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gbG9uZyBpbnQgbHJpbnQgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gX0xPTkdfTE9OR19UWVBFIGludCBsbHJpbnQgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIHJvdW5kIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmQgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIHRydW5jIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSByZW1xdW8gX1BBUkFNUygoZG91YmxlLCBkb3VibGUsIGludCAqKSk7CitleHRlcm4gZG91YmxlIGZkaW0gX1BBUkFNUygoZG91YmxlLCBkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgZm1heCBfUEFSQU1TKChkb3VibGUsIGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBmbWluIF9QQVJBTVMoKGRvdWJsZSwgZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGZtYSBfUEFSQU1TKChkb3VibGUsIGRvdWJsZSwgZG91YmxlKSk7CisKKyNpZm5kZWYgX19tYXRoXzY4ODgxCitleHRlcm4gZG91YmxlIGxvZzFwIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBleHBtMSBfUEFSQU1TKChkb3VibGUpKTsKKyNlbmRpZiAvKiAhIGRlZmluZWQgKF9fbWF0aF82ODg4MSkgKi8KKworI2lmbmRlZiBfUkVFTlRfT05MWQorZXh0ZXJuIGRvdWJsZSBhY29zaCBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgYXRhbmggX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIHJlbWFpbmRlciBfUEFSQU1TKChkb3VibGUsIGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBnYW1tYSBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgbGdhbW1hIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBlcmYgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGVyZmMgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGxvZzIgX1BBUkFNUygoZG91YmxlKSk7CisjaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIGxvZzIoeCkgKGxvZyAoeCkgLyBfTV9MTjIpCisjZW5kaWYKKworI2lmbmRlZiBfX21hdGhfNjg4ODEKK2V4dGVybiBkb3VibGUgaHlwb3QgX1BBUkFNUygoZG91YmxlLCBkb3VibGUpKTsKKyNlbmRpZgorCisjZW5kaWYgLyogISBkZWZpbmVkIChfUkVFTlRfT05MWSkgKi8KKworLyogU2luZ2xlIHByZWNpc2lvbiB2ZXJzaW9ucyBvZiBBTlNJIGZ1bmN0aW9ucy4gICovCisKK2V4dGVybiBmbG9hdCBhdGFuZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGNvc2YgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBzaW5mIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgdGFuZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHRhbmhmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgZnJleHBmIF9QQVJBTVMoKGZsb2F0LCBpbnQgKikpOworZXh0ZXJuIGZsb2F0IG1vZGZmIF9QQVJBTVMoKGZsb2F0LCBmbG9hdCAqKSk7CitleHRlcm4gZmxvYXQgY2VpbGYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBmYWJzZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGZsb29yZiBfUEFSQU1TKChmbG9hdCkpOworCisjaWZuZGVmIF9SRUVOVF9PTkxZCitleHRlcm4gZmxvYXQgYWNvc2YgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBhc2luZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGF0YW4yZiBfUEFSQU1TKChmbG9hdCwgZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBjb3NoZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHNpbmhmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgZXhwZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGxkZXhwZiBfUEFSQU1TKChmbG9hdCwgaW50KSk7CitleHRlcm4gZmxvYXQgbG9nZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGxvZzEwZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHBvd2YgX1BBUkFNUygoZmxvYXQsIGZsb2F0KSk7CitleHRlcm4gZmxvYXQgc3FydGYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBmbW9kZiBfUEFSQU1TKChmbG9hdCwgZmxvYXQpKTsKKyNlbmRpZiAvKiAhIGRlZmluZWQgKF9SRUVOVF9PTkxZKSAqLworCisvKiBPdGhlciBzaW5nbGUgcHJlY2lzaW9uIGZ1bmN0aW9ucy4gICovCisKK2V4dGVybiBmbG9hdCBleHAyZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHNjYWxibG5mIF9QQVJBTVMoKGZsb2F0LCBsb25nIGludCkpOworZXh0ZXJuIGZsb2F0IHRnYW1tYWYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBuZWFyYnlpbnRmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gbG9uZyBpbnQgbHJpbnRmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gX0xPTkdfTE9OR19UWVBFIGxscmludGYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCByb3VuZGYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBsb25nIGludCBscm91bmRmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHRydW5jZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHJlbXF1b2YgX1BBUkFNUygoZmxvYXQsIGZsb2F0LCBpbnQgKikpOworZXh0ZXJuIGZsb2F0IGZkaW1mIF9QQVJBTVMoKGZsb2F0LCBmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGZtYXhmIF9QQVJBTVMoKGZsb2F0LCBmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGZtaW5mIF9QQVJBTVMoKGZsb2F0LCBmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGZtYWYgX1BBUkFNUygoZmxvYXQsIGZsb2F0LCBmbG9hdCkpOworCitleHRlcm4gZmxvYXQgaW5maW5pdHlmIF9QQVJBTVMoKHZvaWQpKTsKK2V4dGVybiBmbG9hdCBuYW5mIF9QQVJBTVMoKGNvbnN0IGNoYXIgKikpOworZXh0ZXJuIGludCBmaW5pdGVmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgY29weXNpZ25mIF9QQVJBTVMoKGZsb2F0LCBmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGxvZ2JmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gaW50IGlsb2diZiBfUEFSQU1TKChmbG9hdCkpOworCitleHRlcm4gZmxvYXQgYXNpbmhmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgY2JydGYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIF9QQVJBTVMoKGZsb2F0LCBmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHJpbnRmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgc2NhbGJuZiBfUEFSQU1TKChmbG9hdCwgaW50KSk7CitleHRlcm4gZmxvYXQgbG9nMXBmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgZXhwbTFmIF9QQVJBTVMoKGZsb2F0KSk7CisKKyNpZm5kZWYgX1JFRU5UX09OTFkKK2V4dGVybiBmbG9hdCBhY29zaGYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBhdGFuaGYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCByZW1haW5kZXJmIF9QQVJBTVMoKGZsb2F0LCBmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGdhbW1hZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGxnYW1tYWYgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBlcmZmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgZXJmY2YgX1BBUkFNUygoZmxvYXQpKTsKK2V4dGVybiBmbG9hdCBsb2cyZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IGh5cG90ZiBfUEFSQU1TKChmbG9hdCwgZmxvYXQpKTsKKyNlbmRpZiAvKiAhIGRlZmluZWQgKF9SRUVOVF9PTkxZKSAqLworCisvKiBPbiBwbGF0Zm9ybXMgd2hlcmUgbG9uZyBkb3VibGUgZXF1YWxzIGRvdWJsZS4gICovCisjaWZkZWYgX0xEQkxfRVFfREJMCisvKiBSZWVudHJhbnQgQU5TSSBDIGZ1bmN0aW9ucy4gICovCisjaWZuZGVmIF9fbWF0aF82ODg4MQorZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgY29zbCBfUEFSQU1TKChsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSB0YW5sIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgX1BBUkFNUygobG9uZyBkb3VibGUgdmFsdWUsIGludCAqKSk7CitleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgX1BBUkFNUygobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlICopKTsKK2V4dGVybiBsb25nIGRvdWJsZSBjZWlsbCBfUEFSQU1TKChsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CisjZW5kaWYgLyogISBkZWZpbmVkIChfX21hdGhfNjg4ODEpICovCisvKiBOb24gcmVlbnRyYW50IEFOU0kgQyBmdW5jdGlvbnMuICAqLworI2lmbmRlZiBfUkVFTlRfT05MWQorI2lmbmRlZiBfX21hdGhfNjg4ODEKK2V4dGVybiBsb25nIGRvdWJsZSBhY29zbCBfUEFSQU1TKChsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIF9QQVJBTVMoKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBleHBsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIF9QQVJBTVMoKGxvbmcgZG91YmxlLCBpbnQpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBsb2dsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgcG93bCBfUEFSQU1TKChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCBfUEFSQU1TKChsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIF9QQVJBTVMoKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCBfUEFSQU1TKChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpKTsKKyNlbmRpZiAvKiAhIGRlZmluZWQgKF9fbWF0aF82ODg4MSkgKi8KKyNlbmRpZiAvKiAhIGRlZmluZWQgKF9SRUVOVF9PTkxZKSAqLworZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCBfUEFSQU1TKChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBuYW5sIF9QQVJBTVMoKGNvbnN0IGNoYXIgKikpOworZXh0ZXJuIGludCBpbG9nYmwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCBfUEFSQU1TKChsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgX1BBUkFNUygobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgcmludGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIF9QQVJBTVMoKGxvbmcgZG91YmxlLCBpbnQpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBleHAybCBfUEFSQU1TKChsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIF9QQVJBTVMoKGxvbmcgZG91YmxlLCBsb25nKSk7CitleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCBfUEFSQU1TKChsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGludCBscmludGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGxvbmcgaW50IGxscmludGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGxyb3VuZGwgX1BBUkFNUygobG9uZyBkb3VibGUpKTsKK2V4dGVybiBfTE9OR19MT05HX1RZUEUgaW50IGxscm91bmRsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCBfUEFSQU1TKChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGludCAqKSk7CitleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwgX1BBUkFNUygobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgX1BBUkFNUygobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgX1BBUkFNUygobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgZm1hbCBfUEFSQU1TKChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKSk7CisjaWZuZGVmIF9SRUVOVF9PTkxZCitleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCBfUEFSQU1TKChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpKTsKK2V4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CitleHRlcm4gbG9uZyBkb3VibGUgZXJmbCBfUEFSQU1TKChsb25nIGRvdWJsZSkpOworZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIF9QQVJBTVMoKGxvbmcgZG91YmxlKSk7CisjZW5kaWYgLyogISBkZWZpbmVkIChfUkVFTlRfT05MWSkgKi8KKyNlbHNlIC8qICFfTERCTF9FUV9EQkwgKi8KKyNpZmRlZiBfX2kzODZfXworLyogT3RoZXIgbG9uZyBkb3VibGUgcHJlY2lzaW9uIGZ1bmN0aW9ucy4gICovCitleHRlcm4gX0xPTkdfRE9VQkxFIHJpbnRsIF9QQVJBTVMoKF9MT05HX0RPVUJMRSkpOworZXh0ZXJuIGxvbmcgaW50IGxyaW50bCBfUEFSQU1TKChfTE9OR19ET1VCTEUpKTsKK2V4dGVybiBfTE9OR19MT05HX1RZUEUgbGxyaW50bCBfUEFSQU1TKChfTE9OR19ET1VCTEUpKTsKKyNlbmRpZiAvKiBfX2kzODZfXyAqLworI2VuZGlmIC8qICFfTERCTF9FUV9EQkwgKi8KKworI2VuZGlmIC8qICFkZWZpbmVkIChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCAqLworCisjaWYgIWRlZmluZWQgKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKKworZXh0ZXJuIGRvdWJsZSBkcmVtIF9QQVJBTVMoKGRvdWJsZSwgZG91YmxlKSk7CitleHRlcm4gdm9pZCBzaW5jb3MgX1BBUkFNUygoZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICopKTsKK2V4dGVybiBkb3VibGUgZ2FtbWFfciBfUEFSQU1TKChkb3VibGUsIGludCAqKSk7CitleHRlcm4gZG91YmxlIGxnYW1tYV9yIF9QQVJBTVMoKGRvdWJsZSwgaW50ICopKTsKKworZXh0ZXJuIGRvdWJsZSB5MCBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgeTEgX1BBUkFNUygoZG91YmxlKSk7CitleHRlcm4gZG91YmxlIHluIF9QQVJBTVMoKGludCwgZG91YmxlKSk7CitleHRlcm4gZG91YmxlIGowIF9QQVJBTVMoKGRvdWJsZSkpOworZXh0ZXJuIGRvdWJsZSBqMSBfUEFSQU1TKChkb3VibGUpKTsKK2V4dGVybiBkb3VibGUgam4gX1BBUkFNUygoaW50LCBkb3VibGUpKTsKKworZXh0ZXJuIGZsb2F0IGRyZW1mIF9QQVJBTVMoKGZsb2F0LCBmbG9hdCkpOworZXh0ZXJuIHZvaWQgc2luY29zZiBfUEFSQU1TKChmbG9hdCwgZmxvYXQgKiwgZmxvYXQgKikpOworZXh0ZXJuIGZsb2F0IGdhbW1hZl9yIF9QQVJBTVMoKGZsb2F0LCBpbnQgKikpOworZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciBfUEFSQU1TKChmbG9hdCwgaW50ICopKTsKKworZXh0ZXJuIGZsb2F0IHkwZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHkxZiBfUEFSQU1TKChmbG9hdCkpOworZXh0ZXJuIGZsb2F0IHluZiBfUEFSQU1TKChpbnQsIGZsb2F0KSk7CitleHRlcm4gZmxvYXQgajBmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgajFmIF9QQVJBTVMoKGZsb2F0KSk7CitleHRlcm4gZmxvYXQgam5mIF9QQVJBTVMoKGludCwgZmxvYXQpKTsKKworLyogR05VIGV4dGVuc2lvbnMgKi8KKyMgaWZuZGVmIGV4cDEwCitleHRlcm4gZG91YmxlIGV4cDEwIF9QQVJBTVMoKGRvdWJsZSkpOworIyBlbmRpZgorIyBpZm5kZWYgcG93MTAKK2V4dGVybiBkb3VibGUgcG93MTAgX1BBUkFNUygoZG91YmxlKSk7CisjIGVuZGlmCisjIGlmbmRlZiBleHAxMGYKK2V4dGVybiBmbG9hdCBleHAxMGYgX1BBUkFNUygoZmxvYXQpKTsKKyMgZW5kaWYKKyMgaWZuZGVmIHBvdzEwZgorZXh0ZXJuIGZsb2F0IHBvdzEwZiBfUEFSQU1TKChmbG9hdCkpOworIyBlbmRpZgorCisjZW5kaWYgLyogIWRlZmluZWQgKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykgKi8KKworI2lmbmRlZiBfX1NUUklDVF9BTlNJX18KKworLyogVGhlIGdhbW1hIGZ1bmN0aW9ucyB1c2UgYSBnbG9iYWwgdmFyaWFibGUsIHNpZ25nYW0uICAqLworI2lmbmRlZiBfUkVFTlRfT05MWQorI2RlZmluZSBzaWduZ2FtICgqX19zaWduZ2FtKCkpCitleHRlcm4gaW50ICpfX3NpZ25nYW0gX1BBUkFNUygodm9pZCkpOworI2VuZGlmIC8qICEgZGVmaW5lZCAoX1JFRU5UX09OTFkpICovCisKKyNkZWZpbmUgX19zaWduZ2FtX3IocHRyKSBfUkVFTlRfU0lHTkdBTShwdHIpCisKKy8qIFRoZSBleGNlcHRpb24gc3RydWN0dXJlIHBhc3NlZCB0byB0aGUgbWF0aGVyciByb3V0aW5lLiAgKi8KKy8qIFdlIGhhdmUgYSBwcm9ibGVtIHdoZW4gdXNpbmcgQysrIHNpbmNlIGBleGNlcHRpb24nIGlzIGEgcmVzZXJ2ZWQKKyAgIG5hbWUgaW4gQysrLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworc3RydWN0IF9fZXhjZXB0aW9uCisjZWxzZQorc3RydWN0IGV4Y2VwdGlvbgorI2VuZGlmCit7CisgIGludCB0eXBlOworICBjaGFyICpuYW1lOworICBkb3VibGUgYXJnMTsKKyAgZG91YmxlIGFyZzI7CisgIGRvdWJsZSByZXR2YWw7CisgIGludCBlcnI7Cit9OworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiBpbnQgbWF0aGVyciBfUEFSQU1TKChzdHJ1Y3QgX19leGNlcHRpb24gKmUpKTsKKyNlbHNlCitleHRlcm4gaW50IG1hdGhlcnIgX1BBUkFNUygoc3RydWN0IGV4Y2VwdGlvbiAqZSkpOworI2VuZGlmCisKKy8qIFZhbHVlcyBmb3IgdGhlIHR5cGUgZmllbGQgb2Ygc3RydWN0IGV4Y2VwdGlvbi4gICovCisKKyNkZWZpbmUgRE9NQUlOIDEKKyNkZWZpbmUgU0lORyAyCisjZGVmaW5lIE9WRVJGTE9XIDMKKyNkZWZpbmUgVU5ERVJGTE9XIDQKKyNkZWZpbmUgVExPU1MgNQorI2RlZmluZSBQTE9TUyA2CisKKy8qIFVzZWZ1bCBjb25zdGFudHMuICAqLworCisjZGVmaW5lIE1BWEZMT0FUCTMuNDAyODIzNDdlKzM4RgorCisjZGVmaW5lIE1fRQkJMi43MTgyODE4Mjg0NTkwNDUyMzU0CisjZGVmaW5lIE1fTE9HMkUJCTEuNDQyNjk1MDQwODg4OTYzNDA3NAorI2RlZmluZSBNX0xPRzEwRQkwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1CisjZGVmaW5lIE1fTE4yCQlfTV9MTjIKKyNkZWZpbmUgTV9MTjEwCQkyLjMwMjU4NTA5Mjk5NDA0NTY4NDAyCisjZGVmaW5lIE1fUEkJCTMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKKyNkZWZpbmUgTV9UV09QSSAgICAgICAgIChNX1BJICogMi4wKQorI2RlZmluZSBNX1BJXzIJCTEuNTcwNzk2MzI2Nzk0ODk2NjE5MjMKKyNkZWZpbmUgTV9QSV80CQkwLjc4NTM5ODE2MzM5NzQ0ODMwOTYyCisjZGVmaW5lIE1fM1BJXzQJCTIuMzU2MTk0NDkwMTkyMzQ0ODM3MEUwCisjZGVmaW5lIE1fU1FSVFBJICAgICAgICAxLjc3MjQ1Mzg1MDkwNTUxNjAyNzkyOTgxCisjZGVmaW5lIE1fMV9QSQkJMC4zMTgzMDk4ODYxODM3OTA2NzE1NAorI2RlZmluZSBNXzJfUEkJCTAuNjM2NjE5NzcyMzY3NTgxMzQzMDgKKyNkZWZpbmUgTV8yX1NRUlRQSQkxLjEyODM3OTE2NzA5NTUxMjU3MzkwCisjZGVmaW5lIE1fU1FSVDIJCTEuNDE0MjEzNTYyMzczMDk1MDQ4ODAKKyNkZWZpbmUgTV9TUVJUMV8yCTAuNzA3MTA2NzgxMTg2NTQ3NTI0NDAKKyNkZWZpbmUgTV9MTjJMTyAgICAgICAgIDEuOTA4MjE0OTI5MjcwNTg3NzAwMEUtMTAKKyNkZWZpbmUgTV9MTjJISSAgICAgICAgIDYuOTMxNDcxODAzNjkxMjM4MTY0OUUtMQorI2RlZmluZSBNX1NRUlQzCTEuNzMyMDUwODA3NTY4ODc3MTkwMDAKKyNkZWZpbmUgTV9JVkxOMTAgICAgICAgIDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUgLyogMSAvIGxvZygxMCkgKi8KKyNkZWZpbmUgTV9MT0cyX0UgICAgICAgIF9NX0xOMgorI2RlZmluZSBNX0lOVkxOMiAgICAgICAgMS40NDI2OTUwNDA4ODg5NjMzODcwRTAgIC8qIDEgLyBsb2coMikgKi8KKworLyogR2xvYmFsIGNvbnRyb2wgb3ZlciBmZGxpYm0gZXJyb3IgaGFuZGxpbmcuICAqLworCitlbnVtIF9fZmRsaWJtX3ZlcnNpb24KK3sKKyAgX19mZGxpYm1faWVlZSA9IC0xLAorICBfX2ZkbGlibV9zdmlkLAorICBfX2ZkbGlibV94b3BlbiwKKyAgX19mZGxpYm1fcG9zaXgKK307CisKKyNkZWZpbmUgX0xJQl9WRVJTSU9OX1RZUEUgZW51bSBfX2ZkbGlibV92ZXJzaW9uCisjZGVmaW5lIF9MSUJfVkVSU0lPTiBfX2ZkbGliX3ZlcnNpb24KKworZXh0ZXJuIF9fSU1QT1JUIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKKworI2RlZmluZSBfSUVFRV8gIF9fZmRsaWJtX2llZWUKKyNkZWZpbmUgX1NWSURfICBfX2ZkbGlibV9zdmlkCisjZGVmaW5lIF9YT1BFTl8gX19mZGxpYm1feG9wZW4KKyNkZWZpbmUgX1BPU0lYXyBfX2ZkbGlibV9wb3NpeAorCisjZW5kaWYgLyogISBkZWZpbmVkIChfX1NUUklDVF9BTlNJX18pICovCisKK19FTkRfU1REX0MKKworI2lmZGVmIF9fRkFTVF9NQVRIX18KKyNpbmNsdWRlIDxtYWNoaW5lL2Zhc3RtYXRoLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9NQVRIX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbmV3bGliLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvbmV3bGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhNTk5OQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9uZXdsaWIuaApAQCAtMCwwICsxLDE4OSBAQAorLyogbmV3bGliLmguICBHZW5lcmF0ZWQgZnJvbSBuZXdsaWIuaGluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBuZXdsaWIuaGluLiAgTWFudWFsbHkgZWRpdGVkIGZyb20gdGhlIG91dHB1dCBvZiBhdXRvaGVhZGVyIHRvCisgICByZW1vdmUgYWxsIFBBQ0tBR0VfIG1hY3JvcyB3aGljaCB3aWxsIGNvbGxpZGUgd2l0aCBhbnkgdXNlcgorICAgcGFja2FnZSB1c2luZyBuZXdsaWIgaGVhZGVyIGZpbGVzIGFuZCBoYXZpbmcgaXRzIG93biBwYWNrYWdlIG5hbWUsCisgICB2ZXJzaW9uLCBldGMuLi4gICovCisjaWZuZGVmIF9fTkVXTElCX0hfXworCisjZGVmaW5lIF9fTkVXTElCX0hfXyAxCisKKy8qIEVML0lYIGxldmVsICovCisvKiAjdW5kZWYgX0VMSVhfTEVWRUwgKi8KKworLyogTmV3bGliIHZlcnNpb24gKi8KKyNkZWZpbmUgX05FV0xJQl9WRVJTSU9OICIyLjAuMCIKKworLyogQzk5IGZvcm1hdHMgc3VwcG9ydCAoc3VjaCBhcyAlYSwgJXp1LCAuLi4pIGluIElPIGZ1bmN0aW9ucyBsaWtlCisgKiBwcmludGYvc2NhbmYgZW5hYmxlZCAqLworI2RlZmluZSBfV0FOVF9JT19DOTlfRk9STUFUUyAxCisKKy8qIGxvbmcgbG9uZyB0eXBlIHN1cHBvcnQgaW4gSU8gZnVuY3Rpb25zIGxpa2UgcHJpbnRmL3NjYW5mIGVuYWJsZWQgKi8KKyNkZWZpbmUgX1dBTlRfSU9fTE9OR19MT05HIDEKKworLyogUmVnaXN0ZXIgYXBwbGljYXRpb24gZmluYWxpemF0aW9uIGZ1bmN0aW9uIHVzaW5nIGF0ZXhpdC4gKi8KKy8qICN1bmRlZiBfV0FOVF9SRUdJU1RFUl9GSU5JICovCisKKy8qIGxvbmcgZG91YmxlIHR5cGUgc3VwcG9ydCBpbiBJTyBmdW5jdGlvbnMgbGlrZSBwcmludGYvc2NhbmYgZW5hYmxlZCAqLworI2RlZmluZSBfV0FOVF9JT19MT05HX0RPVUJMRSAxCisKKy8qIFBvc2l0aW9uYWwgYXJndW1lbnQgc3VwcG9ydCBpbiBwcmludGYgZnVuY3Rpb25zIGVuYWJsZWQuICAqLworLyogI3VuZGVmIF9XQU5UX0lPX1BPU19BUkdTICovCisKKy8qIE9wdGlvbmFsIHJlZW50cmFudCBzdHJ1Y3Qgc3VwcG9ydC4gIFVzZWQgbW9zdGx5IG9uIHBsYXRmb3JtcyB3aXRoCisgICB2ZXJ5IHJlc3RyaWN0ZWQgc3RvcmFnZS4gICovCisvKiAjdW5kZWYgX1dBTlRfUkVFTlRfU01BTEwgKi8KKworLyogTXVsdGlieXRlIHN1cHBvcnRlZCAqLworLyogI3VuZGVmIF9NQl9DQVBBQkxFICovCisKKy8qIE1CX0xFTl9NQVggKi8KKyNkZWZpbmUgX01CX0xFTl9NQVggMQorCisvKiBJQ09OViBlbmFibGVkICovCisvKiAjdW5kZWYgX0lDT05WX0VOQUJMRUQgKi8KKworLyogRW5hYmxlIElDT05WIGV4dGVybmFsIENDUyBmaWxlcyBsb2FkaW5nIGNhcGFiaWxpdGllcyAqLworLyogI3VuZGVmIF9JQ09OVl9FTkFCTEVfRVhURVJOQUxfQ0NTICovCisKKy8qIERlZmluZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIC5wcmVpbml0X2FycmF5Ly5pbml0X2FycmF5Ly5maW5pX2FycmF5CisgKiBzZWN0aW9ucy4gICovCisjZGVmaW5lIEhBVkVfSU5JVEZJTklfQVJSQVkgMQorCisvKiBUcnVlIGlmIGF0ZXhpdCgpIG1heSBkeW5hbWljYWxseSBhbGxvY2F0ZSBzcGFjZSBmb3IgY2xlYW51cAorICAgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgX0FURVhJVF9EWU5BTUlDX0FMTE9DIDEKKworLyogVHJ1ZSBpZiBsb25nIGRvdWJsZSBzdXBwb3J0ZWQuICAqLworI2RlZmluZSBfSEFWRV9MT05HX0RPVUJMRSAxCisKKy8qIFRydWUgaWYgbG9uZyBkb3VibGUgc3VwcG9ydGVkIGFuZCBpdCBpcyBlcXVhbCB0byBkb3VibGUuICAqLworLyogI3VuZGVmIF9MREJMX0VRX0RCTCAqLworIAorLyogRGVmaW5lIGlmIGl2byBzdXBwb3J0ZWQgaW4gc3RyZWFtaW8uICAqLworI2RlZmluZSBfRlZXUklURV9JTl9TVFJFQU1JTyAxCisKKy8qIERlZmluZSBpZiBmc2VlayBmdW5jdGlvbnMgc3VwcG9ydCBzZWVrIG9wdGltaXphdGlvbi4gICovCisjZGVmaW5lIF9GU0VFS19PUFRJTUlaQVRJT04gMQorCisvKiBEZWZpbmUgaWYgd2lkZSBjaGFyIG9yaWVudGF0aW9uIGlzIHN1cHBvcnRlZC4gICovCisjZGVmaW5lIF9XSURFX09SSUVOVCAxCisKKy8qIERlZmluZSBpZiB1bmJ1ZmZlcmVkIHN0cmVhbSBmaWxlIG9wdGltaXphdGlvbiBpcyBzdXBwb3J0ZWQuICAqLworI2RlZmluZSBfVU5CVUZfU1RSRUFNX09QVCAxCisKKy8qIERlZmluZSBpZiBsaXRlIHZlcnNpb24gb2YgZXhpdCBzdXBwb3J0ZWQuICAqLworLyogI3VuZGVmIF9MSVRFX0VYSVQgKi8KKworLyogRGVmaW5lIGlmIGRlY2xhcmUgYXRleGl0IGRhdGEgYXMgZ2xvYmFsLiAgKi8KKy8qICN1bmRlZiBfUkVFTlRfR0xPQkFMX0FURVhJVCAqLworCisvKgorICogSWNvbnYgZW5jb2RpbmdzIGVuYWJsZWQgKCJ0byIgZGlyZWN0aW9uKQorICovCisvKiAjdW5kZWYgX0lDT05WX1RPX0VOQ09ESU5HX0JJRzUgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfQ1A3NzUgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfQ1A4NTAgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfQ1A4NTIgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfQ1A4NTUgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfQ1A4NjYgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfRVVDX0pQICovCisvKiAjdW5kZWYgX0lDT05WX1RPX0VOQ09ESU5HX0VVQ19UVyAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19FVUNfS1IgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfSVNPXzg4NTlfMSAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19JU09fODg1OV8xMCAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19JU09fODg1OV8xMSAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19JU09fODg1OV8xMyAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19JU09fODg1OV8xNCAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19JU09fODg1OV8xNSAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19JU09fODg1OV8yICovCisvKiAjdW5kZWYgX0lDT05WX1RPX0VOQ09ESU5HX0lTT184ODU5XzMgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfSVNPXzg4NTlfNCAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19JU09fODg1OV81ICovCisvKiAjdW5kZWYgX0lDT05WX1RPX0VOQ09ESU5HX0lTT184ODU5XzYgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfSVNPXzg4NTlfNyAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19JU09fODg1OV84ICovCisvKiAjdW5kZWYgX0lDT05WX1RPX0VOQ09ESU5HX0lTT184ODU5XzkgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfSVNPX0lSXzExMSAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19LT0k4X1IgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfS09JOF9SVSAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19LT0k4X1UgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfS09JOF9VTkkgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfVUNTXzIgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfVUNTXzJfSU5URVJOQUwgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfVUNTXzJCRSAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19VQ1NfMkxFICovCisvKiAjdW5kZWYgX0lDT05WX1RPX0VOQ09ESU5HX1VDU180ICovCisvKiAjdW5kZWYgX0lDT05WX1RPX0VOQ09ESU5HX1VDU180X0lOVEVSTkFMICovCisvKiAjdW5kZWYgX0lDT05WX1RPX0VOQ09ESU5HX1VDU180QkUgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfVUNTXzRMRSAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19VU19BU0NJSSAqLworLyogI3VuZGVmIF9JQ09OVl9UT19FTkNPRElOR19VVEZfMTYgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfVVRGXzE2QkUgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfVVRGXzE2TEUgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfVVRGXzggKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTAgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTEgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTIgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTMgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTQgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTUgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTYgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTcgKi8KKy8qICN1bmRlZiBfSUNPTlZfVE9fRU5DT0RJTkdfV0lOXzEyNTggKi8KKworLyoKKyAqIEljb252IGVuY29kaW5ncyBlbmFibGVkICgiZnJvbSIgZGlyZWN0aW9uKQorICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfQklHNSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX0NQNzc1ICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfQ1A4NTAgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19DUDg1MiAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX0NQODU1ICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfQ1A4NjYgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19FVUNfSlAgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19FVUNfVFcgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19FVUNfS1IgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19JU09fODg1OV8xICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfSVNPXzg4NTlfMTAgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19JU09fODg1OV8xMSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX0lTT184ODU5XzEzICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfSVNPXzg4NTlfMTQgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19JU09fODg1OV8xNSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX0lTT184ODU5XzIgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19JU09fODg1OV8zICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfSVNPXzg4NTlfNCAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX0lTT184ODU5XzUgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19JU09fODg1OV82ICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfSVNPXzg4NTlfNyAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX0lTT184ODU5XzggKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19JU09fODg1OV85ICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfSVNPX0lSXzExMSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX0tPSThfUiAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX0tPSThfUlUgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19LT0k4X1UgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19LT0k4X1VOSSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX1VDU18yICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfVUNTXzJfSU5URVJOQUwgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19VQ1NfMkJFICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfVUNTXzJMRSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX1VDU180ICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfVUNTXzRfSU5URVJOQUwgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19VQ1NfNEJFICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfVUNTXzRMRSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX1VTX0FTQ0lJICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfVVRGXzE2ICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfVVRGXzE2QkUgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19VVEZfMTZMRSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX1VURl84ICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfV0lOXzEyNTAgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19XSU5fMTI1MSAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX1dJTl8xMjUyICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfV0lOXzEyNTMgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19XSU5fMTI1NCAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX1dJTl8xMjU1ICovCisvKiAjdW5kZWYgX0lDT05WX0ZST01fRU5DT0RJTkdfV0lOXzEyNTYgKi8KKy8qICN1bmRlZiBfSUNPTlZfRlJPTV9FTkNPRElOR19XSU5fMTI1NyAqLworLyogI3VuZGVmIF9JQ09OVl9GUk9NX0VOQ09ESU5HX1dJTl8xMjU4ICovCisKKyNlbmRpZiAvKiAhX19ORVdMSUJfSF9fICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9wYXRocy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3BhdGhzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjNzBmNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9wYXRocy5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZglfUEFUSFNfSF8KKyNkZWZpbmUgX1BBVEhTX0hfCisKKyNkZWZpbmUgX1BBVEhfREVWCSIvZGV2LyIKKyNkZWZpbmUgX1BBVEhfREVWTlVMTCAgICIvZGV2L251bGwiCisjZGVmaW5lIF9QQVRIX0RFVlpFUk8gICAiL2Rldi96ZXJvIgorI2RlZmluZSBfUEFUSF9CU0hFTEwgICAgIi9iaW4vc2giCisKKyNlbmRpZiAvKiBfUEFUSFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9wdGhyZWFkLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvcHRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmN2YzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvcHRocmVhZC5oCkBAIC0wLDAgKzEsMzY2IEBACisvKiAgcHRocmVhZC5oCisgKgorICogIFdyaXR0ZW4gYnkgSm9lbCBTaGVycmlsbCA8am9lbEBPQVJjb3JwLmNvbT4uCisgKgorICogIENPUFlSSUdIVCAoYykgMTk4OS0yMDEwLgorICogIE9uLUxpbmUgQXBwbGljYXRpb25zIFJlc2VhcmNoIENvcnBvcmF0aW9uIChPQVIpLgorICoKKyAqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICBwdXJwb3NlIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZQorICogIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgYW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weQorICogIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRZLiAgSU4gUEFSVElDVUxBUiwgIFRIRSBBVVRIT1IgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT04KKyAqICBPUiBXQVJSQU5UWSBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNRVJDSEFOVEFCSUxJVFkgT0YgVEhJUworICogIFNPRlRXQVJFIE9SIElUUyBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqICAkSWQkCisgKi8KKworI2lmbmRlZiBfX1BUSFJFQURfaAorI2RlZmluZSBfX1BUSFJFQURfaAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmIGRlZmluZWQoX1BPU0lYX1RIUkVBRFMpCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3NjaGVkLmg+CisKKy8qIFJlZ2lzdGVyIEZvcmsgSGFuZGxlcnMgKi8KK2ludAlfRVhGVU4ocHRocmVhZF9hdGZvcmssKHZvaWQgKCpwcmVwYXJlKSh2b2lkKSwgdm9pZCAoKnBhcmVudCkodm9pZCksCisgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNoaWxkKSh2b2lkKSkpOworICAgICAgICAgIAorLyogTXV0ZXggSW5pdGlhbGl6YXRpb24gQXR0cmlidXRlcywgUDEwMDMuMWMvRHJhZnQgMTAsIHAuIDgxICovCisKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleGF0dHJfaW5pdCwgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikpOworaW50CV9FWEZVTihwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95LCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQsCisJCShfQ09OU1QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgICpfX3BzaGFyZWQpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCwKKwkJKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fcHNoYXJlZCkpOworCisjaWYgZGVmaW5lZChfVU5JWDk4X1RIUkVBRF9NVVRFWF9BVFRSSUJVVEVTKQorCisvKiBTaW5nbGUgVU5JWCBTcGVjaWZpY2F0aW9uIDIgTXV0ZXggQXR0cmlidXRlcyB0eXBlcyAqLworCitpbnQgX0VYRlVOKHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUsCisJCShfQ09OU1QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgKl9fa2luZCkpOworaW50IF9FWEZVTihwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlLAorCQkocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSk7CisKKyNlbmRpZgorCisvKiBJbml0aWFsaXppbmcgYW5kIERlc3Ryb3lpbmcgYSBNdXRleCwgUDEwMDMuMWMvRHJhZnQgMTAsIHAuIDg3ICovCisKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleF9pbml0LAorCShwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsIF9DT05TVCBwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleF9kZXN0cm95LCAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSk7CisKKy8qIFRoaXMgaXMgdXNlZCB0byBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBwdGhyZWFkX211dGV4X3QuIEV4YW1wbGU6CisgIAorICAgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisgKi8KKworI2RlZmluZSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSICAoKHB0aHJlYWRfbXV0ZXhfdCkgMHhGRkZGRkZGRikKKworLyogIExvY2tpbmcgYW5kIFVubG9ja2luZyBhIE11dGV4LCBQMTAwMy4xYy9EcmFmdCAxMCwgcC4gOTMKKyAgICBOT1RFOiBQMTAwMy40Yi9EOCBhZGRzIHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKCksIHAuIDI5ICovCisKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleF9sb2NrLCAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaywgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkpOworaW50CV9FWEZVTihwdGhyZWFkX211dGV4X3VubG9jaywgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkpOworCisjaWYgZGVmaW5lZChfUE9TSVhfVElNRU9VVFMpCisKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleF90aW1lZGxvY2ssCisJKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX0NPTlNUIHN0cnVjdCB0aW1lc3BlYyAqX190aW1lb3V0KSk7CisKKyNlbmRpZiAvKiBfUE9TSVhfVElNRU9VVFMgKi8KKworLyogQ29uZGl0aW9uIFZhcmlhYmxlIEluaXRpYWxpemF0aW9uIEF0dHJpYnV0ZXMsIFAxMDAzLjFjL0RyYWZ0IDEwLCBwLiA5NiAqLworIAoraW50CV9FWEZVTihwdGhyZWFkX2NvbmRhdHRyX2luaXQsIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikpOworaW50CV9FWEZVTihwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3ksIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikpOworaW50CV9FWEZVTihwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQsCisJCShfQ09OU1QgcHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsIGludCAqX19wc2hhcmVkKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCwKKwkJKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyLCBpbnQgX19wc2hhcmVkKSk7CisgCisvKiBJbml0aWFsaXppbmcgYW5kIERlc3Ryb3lpbmcgYSBDb25kaXRpb24gVmFyaWFibGUsIFAxMDAzLjFjL0RyYWZ0IDEwLCBwLiA4NyAqLworIAoraW50CV9FWEZVTihwdGhyZWFkX2NvbmRfaW5pdCwKKwkocHRocmVhZF9jb25kX3QgKl9fY29uZCwgX0NPTlNUIHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfY29uZF9kZXN0cm95LCAocHRocmVhZF9jb25kX3QgKl9fbXV0ZXgpKTsKKyAKKy8qIFRoaXMgaXMgdXNlZCB0byBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBwdGhyZWFkX2NvbmRfdC4gRXhhbXBsZToKKyAgCisgICAgcHRocmVhZF9jb25kX3QgY29uZCA9IFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjsKKyAqLworIAorI2RlZmluZSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIgICgocHRocmVhZF9jb25kX3QpIDB4RkZGRkZGRkYpCisgCisvKiBCcm9hZGNhc3RpbmcgYW5kIFNpZ25hbGluZyBhIENvbmRpdGlvbiwgUDEwMDMuMWMvRHJhZnQgMTAsIHAuIDEwMSAqLworIAoraW50CV9FWEZVTihwdGhyZWFkX2NvbmRfc2lnbmFsLCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkpOworaW50CV9FWEZVTihwdGhyZWFkX2NvbmRfYnJvYWRjYXN0LCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkpOworIAorLyogV2FpdGluZyBvbiBhIENvbmRpdGlvbiwgUDEwMDMuMWMvRHJhZnQgMTAsIHAuIDEwNSAqLworIAoraW50CV9FWEZVTihwdGhyZWFkX2NvbmRfd2FpdCwKKwkocHRocmVhZF9jb25kX3QgKl9fY29uZCwgcHRocmVhZF9tdXRleF90ICpfX211dGV4KSk7CisgCitpbnQJX0VYRlVOKHB0aHJlYWRfY29uZF90aW1lZHdhaXQsCisJCShwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCisJCV9DT05TVCBzdHJ1Y3QgdGltZXNwZWMgKl9fYWJzdGltZSkpOworIAorI2lmIGRlZmluZWQoX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HKQorCisvKiBUaHJlYWQgQ3JlYXRpb24gU2NoZWR1bGluZyBBdHRyaWJ1dGVzLCBQMTAwMy4xYy9EcmFmdCAxMCwgcC4gMTIwICovCisKK2ludAlfRVhGVU4ocHRocmVhZF9hdHRyX3NldHNjb3BlLAorCQkocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fY29udGVudGlvbnNjb3BlKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9nZXRzY29wZSwKKwkoX0NPTlNUIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19jb250ZW50aW9uc2NvcGUpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCwKKwkocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9faW5oZXJpdHNjaGVkKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQsCisJKF9DT05TVCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9faW5oZXJpdHNjaGVkKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSwKKwkocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSwKKwkoX0NPTlNUIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCAqX19wb2xpY3kpKTsKKworI2VuZGlmIC8qIGRlZmluZWQoX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HKSAqLworCitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtLAorCShwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBfQ09OU1Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtLAorCShfQ09OU1QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSk7CisKKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORykKKworLyogRHluYW1pYyBUaHJlYWQgU2NoZWR1bGluZyBQYXJhbWV0ZXJzIEFjY2VzcywgUDEwMDMuMWMvRHJhZnQgMTAsIHAuIDEyNCAqLworCitpbnQJX0VYRlVOKHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSwKKwkocHRocmVhZF90IF9fcHRocmVhZCwgaW50ICpfX3BvbGljeSwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfc2V0c2NoZWRwYXJhbSwKKwkocHRocmVhZF90IF9fcHRocmVhZCwgaW50IF9fcG9saWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pKTsKKworI2VuZGlmIC8qIGRlZmluZWQoX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HKSAqLworCisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVCkgfHwgZGVmaW5lZChfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVCkKKworLyogTXV0ZXggSW5pdGlhbGl6YXRpb24gU2NoZWR1bGluZyBBdHRyaWJ1dGVzLCBQMTAwMy4xYy9EcmFmdCAxMCwgcC4gMTI4ICovCisgCitpbnQJX0VYRlVOKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByb3RvY29sLAorCShwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBfX3Byb3RvY29sKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfbXV0ZXhhdHRyX2dldHByb3RvY29sLAorCShfQ09OU1QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgKl9fcHJvdG9jb2wpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleGF0dHJfc2V0cHJpb2NlaWxpbmcsCisJKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fcHJpb2NlaWxpbmcpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleGF0dHJfZ2V0cHJpb2NlaWxpbmcsCisJKF9DT05TVCBwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCAqX19wcmlvY2VpbGluZykpOworCisjZW5kaWYgLyogX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQgfHwgX1BPU0lYX1RIUkVBRF9QUklPX1BST1RFQ1QgKi8KKworI2lmIGRlZmluZWQoX1BPU0lYX1RIUkVBRF9QUklPX1BST1RFQ1QpCisKKy8qIENoYW5nZSB0aGUgUHJpb3JpdHkgQ2VpbGluZyBvZiBhIE11dGV4LCBQMTAwMy4xYy9EcmFmdCAxMCwgcC4gMTMxICovCisKK2ludAlfRVhGVU4ocHRocmVhZF9tdXRleF9zZXRwcmlvY2VpbGluZywKKwkocHRocmVhZF9tdXRleF90ICpfX211dGV4LCBpbnQgX19wcmlvY2VpbGluZywgaW50ICpfX29sZF9jZWlsaW5nKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2NlaWxpbmcsCisJKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgaW50ICpfX3ByaW9jZWlsaW5nKSk7CisKKyNlbmRpZiAvKiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVCAqLworCisvKiBUaHJlYWQgQ3JlYXRpb24gQXR0cmlidXRlcywgUDEwMDMuMWMvRHJhZnQgMTAsIHAsIDE0MCAqLworCitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9pbml0LCAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikpOworaW50CV9FWEZVTihwdGhyZWFkX2F0dHJfZGVzdHJveSwgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9hdHRyX3NldHN0YWNrLCAocHRocmVhZF9hdHRyX3QgKmF0dHIsCisJdm9pZCAqX19zdGFja2FkZHIsIHNpemVfdCBfX3N0YWNrc2l6ZSkpOworaW50CV9FWEZVTihwdGhyZWFkX2F0dHJfZ2V0c3RhY2ssIChfQ09OU1QgcHRocmVhZF9hdHRyX3QgKmF0dHIsCisJdm9pZCAqKl9fc3RhY2thZGRyLCBzaXplX3QgKl9fc3RhY2tzaXplKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUsCisJKF9DT05TVCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgKl9fc3RhY2tzaXplKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUsCisJKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCBfX3N0YWNrc2l6ZSkpOworaW50CV9FWEZVTihwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyLAorCShfQ09OU1QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqKl9fc3RhY2thZGRyKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIsCisJKHB0aHJlYWRfYXR0cl90ICAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkcikpOworaW50CV9FWEZVTihwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUsCisJKF9DT05TVCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9fZGV0YWNoc3RhdGUpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlLAorCShwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19kZXRhY2hzdGF0ZSkpOworaW50CV9FWEZVTihwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplLAorCShfQ09OU1QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90ICpfX2d1YXJkc2l6ZSkpOworaW50CV9FWEZVTihwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplLAorCShwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgX19ndWFyZHNpemUpKTsKKworLyogVGhyZWFkIENyZWF0aW9uLCBQMTAwMy4xYy9EcmFmdCAxMCwgcC4gMTQ0ICovCisKK2ludAlfRVhGVU4ocHRocmVhZF9jcmVhdGUsCisJKHB0aHJlYWRfdCAqX19wdGhyZWFkLCBfQ09OU1QgcHRocmVhZF9hdHRyX3QgICpfX2F0dHIsCisJdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpKCB2b2lkICogKSwgdm9pZCAqX19hcmcpKTsKKworLyogV2FpdCBmb3IgVGhyZWFkIFRlcm1pbmF0aW9uLCBQMTAwMy4xYy9EcmFmdCAxMCwgcC4gMTQ3ICovCisKK2ludAlfRVhGVU4ocHRocmVhZF9qb2luLCAocHRocmVhZF90IF9fcHRocmVhZCwgdm9pZCAqKl9fdmFsdWVfcHRyKSk7CisKKy8qIERldGFjaGluZyBhIFRocmVhZCwgUDEwMDMuMWMvRHJhZnQgMTAsIHAuIDE0OSAqLworCitpbnQJX0VYRlVOKHB0aHJlYWRfZGV0YWNoLCAocHRocmVhZF90IF9fcHRocmVhZCkpOworCisvKiBUaHJlYWQgVGVybWluYXRpb24sIHAxMDAzLjFjL0RyYWZ0IDEwLCBwLiAxNTAgKi8KKwordm9pZAlfRVhGVU4ocHRocmVhZF9leGl0LCAodm9pZCAqX192YWx1ZV9wdHIpKTsKKworLyogR2V0IENhbGxpbmcgVGhyZWFkJ3MgSUQsIHAxMDAzLjFjL0RyYWZ0IDEwLCBwLiBYWFggKi8KKworcHRocmVhZF90CV9FWEZVTihwdGhyZWFkX3NlbGYsICh2b2lkKSk7CisKKy8qIENvbXBhcmUgVGhyZWFkIElEcywgcDEwMDMuMWMvRHJhZnQgMTAsIHAuIDE1MyAqLworCitpbnQJX0VYRlVOKHB0aHJlYWRfZXF1YWwsIChwdGhyZWFkX3QgX190MSwgcHRocmVhZF90IF9fdDIpKTsKKworLyogRHluYW1pYyBQYWNrYWdlIEluaXRpYWxpemF0aW9uICovCisKKy8qIFRoaXMgaXMgdXNlZCB0byBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBwdGhyZWFkX29uY2VfdC4gRXhhbXBsZToKKyAgCisgICAgcHRocmVhZF9vbmNlX3Qgb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworICAKKyAgICBOT1RFOiAgVGhpcyBpcyBuYW1lZCBpbmNvbnNpc3RlbnRseSAtLSBpdCBzaG91bGQgYmUgSU5JVElBTElaRVIuICAqLworIAorI2RlZmluZSBQVEhSRUFEX09OQ0VfSU5JVCAgeyAxLCAwIH0gIC8qIGlzIGluaXRpYWxpemVkIGFuZCBub3QgcnVuICovCisgCitpbnQJX0VYRlVOKHB0aHJlYWRfb25jZSwKKwkocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLCB2b2lkICgqX19pbml0X3JvdXRpbmUpKHZvaWQpKSk7CisKKy8qIFRocmVhZC1TcGVjaWZpYyBEYXRhIEtleSBDcmVhdGUsIFAxMDAzLjFjL0RyYWZ0IDEwLCBwLiAxNjMgKi8KKworaW50CV9FWEZVTihwdGhyZWFkX2tleV9jcmVhdGUsCisJKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cnVjdG9yKSggdm9pZCAqICkpKTsKKworLyogVGhyZWFkLVNwZWNpZmljIERhdGEgTWFuYWdlbWVudCwgUDEwMDMuMWMvRHJhZnQgMTAsIHAuIDE2NSAqLworCitpbnQJX0VYRlVOKHB0aHJlYWRfc2V0c3BlY2lmaWMsCisJKHB0aHJlYWRfa2V5X3QgX19rZXksIF9DT05TVCB2b2lkICpfX3ZhbHVlKSk7Cit2b2lkICoJX0VYRlVOKHB0aHJlYWRfZ2V0c3BlY2lmaWMsIChwdGhyZWFkX2tleV90IF9fa2V5KSk7CisKKy8qIFRocmVhZC1TcGVjaWZpYyBEYXRhIEtleSBEZWxldGlvbiwgUDEwMDMuMWMvRHJhZnQgMTAsIHAuIDE2NyAqLworCitpbnQJX0VYRlVOKHB0aHJlYWRfa2V5X2RlbGV0ZSwgKHB0aHJlYWRfa2V5X3QgX19rZXkpKTsKKworLyogRXhlY3V0aW9uIG9mIGEgVGhyZWFkLCBQMTAwMy4xYy9EcmFmdCAxMCwgcC4gMTgxICovCisKKyNkZWZpbmUgUFRIUkVBRF9DQU5DRUxfRU5BQkxFICAwCisjZGVmaW5lIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUgMQorCisjZGVmaW5lIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVEIDAKKyNkZWZpbmUgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTIDEKKworI2RlZmluZSBQVEhSRUFEX0NBTkNFTEVEICgodm9pZCAqKSAtMSkKKworaW50CV9FWEZVTihwdGhyZWFkX2NhbmNlbCwgKHB0aHJlYWRfdCBfX3B0aHJlYWQpKTsKKworLyogU2V0dGluZyBDYW5jZWxhYmlsaXR5IFN0YXRlLCBQMTAwMy4xYy9EcmFmdCAxMCwgcC4gMTgzICovCisKK2ludAlfRVhGVU4ocHRocmVhZF9zZXRjYW5jZWxzdGF0ZSwgKGludCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9zZXRjYW5jZWx0eXBlLCAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpKTsKK3ZvaWQgCV9FWEZVTihwdGhyZWFkX3Rlc3RjYW5jZWwsICh2b2lkKSk7CisKKy8qIEVzdGFibGlzaGluZyBDYW5jZWxsYXRpb24gSGFuZGxlcnMsIFAxMDAzLjFjL0RyYWZ0IDEwLCBwLiAxODQgKi8KKwordm9pZCAJX0VYRlVOKHB0aHJlYWRfY2xlYW51cF9wdXNoLAorCSh2b2lkICgqX19yb3V0aW5lKSggdm9pZCAqICksIHZvaWQgKl9fYXJnKSk7Cit2b2lkIAlfRVhGVU4ocHRocmVhZF9jbGVhbnVwX3BvcCwgKGludCBfX2V4ZWN1dGUpKTsKKworI2lmIGRlZmluZWQoX1BPU0lYX1RIUkVBRF9DUFVUSU1FKQorIAorLyogQWNjZXNzaW5nIGEgVGhyZWFkIENQVS10aW1lIENsb2NrLCBQMTAwMy40Yi9EOCwgcC4gNTggKi8KKyAKK2ludAlfRVhGVU4ocHRocmVhZF9nZXRjcHVjbG9ja2lkLAorCShwdGhyZWFkX3QgX19wdGhyZWFkX2lkLCBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpKTsKKyAKKyNlbmRpZiAvKiBkZWZpbmVkKF9QT1NJWF9USFJFQURfQ1BVVElNRSkgKi8KKworCisjZW5kaWYgLyogZGVmaW5lZChfUE9TSVhfVEhSRUFEUykgKi8KKworI2lmIGRlZmluZWQoX1BPU0lYX0JBUlJJRVJTKQorCitpbnQJX0VYRlVOKHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCwgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYmFycmllcmF0dHJfZGVzdHJveSwgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJlZCwKKwkoX0NPTlNUIHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLCBpbnQgKl9fcHNoYXJlZCkpOworaW50CV9FWEZVTihwdGhyZWFkX2JhcnJpZXJhdHRyX3NldHBzaGFyZWQsCisJKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLCBpbnQgX19wc2hhcmVkKSk7CisKKyNkZWZpbmUgUFRIUkVBRF9CQVJSSUVSX1NFUklBTF9USFJFQUQgLTEKKworaW50CV9FWEZVTihwdGhyZWFkX2JhcnJpZXJfaW5pdCwKKwkocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllciwKKwlfQ09OU1QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIsIHVuc2lnbmVkIF9fY291bnQpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3ksIChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfYmFycmllcl93YWl0LChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSk7CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9QT1NJWF9CQVJSSUVSUykgKi8KKworI2lmIGRlZmluZWQoX1BPU0lYX1NQSU5fTE9DS1MpCisKK2ludAlfRVhGVU4ocHRocmVhZF9zcGluX2luaXQsCisJKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19zcGlubG9jaywgaW50IF9fcHNoYXJlZCkpOworaW50CV9FWEZVTihwdGhyZWFkX3NwaW5fZGVzdHJveSwgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19zcGlubG9jaykpOworaW50CV9FWEZVTihwdGhyZWFkX3NwaW5fbG9jaywgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19zcGlubG9jaykpOworaW50CV9FWEZVTihwdGhyZWFkX3NwaW5fdHJ5bG9jaywgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19zcGlubG9jaykpOworaW50CV9FWEZVTihwdGhyZWFkX3NwaW5fdW5sb2NrLCAocHRocmVhZF9zcGlubG9ja190ICpfX3NwaW5sb2NrKSk7CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9QT1NJWF9TUElOX0xPQ0tTKSAqLworCisjaWYgZGVmaW5lZChfUE9TSVhfUkVBREVSX1dSSVRFUl9MT0NLUykKKworLyogVGhpcyBpcyB1c2VkIHRvIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSBhIHB0aHJlYWRfcndsb2NrX3QuIEV4YW1wbGU6CisgIAorICAgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSOworICovCisKKyNkZWZpbmUgUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIgICgocHRocmVhZF9yd2xvY2tfdCkgMHhGRkZGRkZGRikKKworaW50CV9FWEZVTihwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdCwgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3ksIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkLAorCShfQ09OU1QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3BzaGFyZWQpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQsCisJKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsIGludCBfX3BzaGFyZWQpKTsKKworaW50CV9FWEZVTihwdGhyZWFkX3J3bG9ja19pbml0LAorCShwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaywgX0NPTlNUIHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9yd2xvY2tfZGVzdHJveSwgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfcndsb2NrX3JkbG9jaywocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spKTsKK2ludAlfRVhGVU4ocHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrLChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykpOworaW50CV9FWEZVTihwdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jaywKKyAgICAgICAgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrLCBfQ09OU1Qgc3RydWN0IHRpbWVzcGVjICpfX2Fic3RpbWUpKTsKK2ludAlfRVhGVU4ocHRocmVhZF9yd2xvY2tfdW5sb2NrLChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykpOworaW50CV9FWEZVTihwdGhyZWFkX3J3bG9ja193cmxvY2ssKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSk7CitpbnQJX0VYRlVOKHB0aHJlYWRfcndsb2NrX3RyeXdybG9jaywocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spKTsKK2ludAlfRVhGVU4ocHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2ssCisgICAgICAgIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaywgX0NPTlNUIHN0cnVjdCB0aW1lc3BlYyAqX19hYnN0aW1lKSk7CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9QT1NJWF9SRUFERVJfV1JJVEVSX0xPQ0tTKSAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorLyogZW5kIG9mIGluY2x1ZGUgZmlsZSAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3B3ZC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3B3ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MjZhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvcHdkLmgKQEAgLTAsMCArMSw3OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcHdkLmgJNS4xMyAoQmVya2VsZXkpIDUvMjgvOTEKKyAqLworCisjaWZuZGVmIF9QV0RfSF8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNkZWZpbmUJX1BXRF9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZm5kZWYgX1BPU0lYX1NPVVJDRQorI2RlZmluZQlfUEFUSF9QQVNTV0QJCSIvZXRjL3Bhc3N3ZCIKKworI2RlZmluZQlfUEFTU1dPUkRfTEVOCQkxMjgJLyogbWF4IGxlbmd0aCwgbm90IGNvdW50aW5nIE5VTEwgKi8KKyNlbmRpZgorCitzdHJ1Y3QgcGFzc3dkIHsKKwljaGFyCSpwd19uYW1lOwkJLyogdXNlciBuYW1lICovCisJY2hhcgkqcHdfcGFzc3dkOwkJLyogZW5jcnlwdGVkIHBhc3N3b3JkICovCisJdWlkX3QJcHdfdWlkOwkJCS8qIHVzZXIgdWlkICovCisJZ2lkX3QJcHdfZ2lkOwkJCS8qIHVzZXIgZ2lkICovCisJY2hhcgkqcHdfY29tbWVudDsJCS8qIGNvbW1lbnQgKi8KKwljaGFyCSpwd19nZWNvczsJCS8qIEhvbmV5d2VsbCBsb2dpbiBpbmZvICovCisJY2hhcgkqcHdfZGlyOwkJLyogaG9tZSBkaXJlY3RvcnkgKi8KKwljaGFyCSpwd19zaGVsbDsJCS8qIGRlZmF1bHQgc2hlbGwgKi8KK307CisKKyNpZm5kZWYgX19JTlNJREVfQ1lHV0lOX18KK3N0cnVjdCBwYXNzd2QJKmdldHB3dWlkICh1aWRfdCk7CitzdHJ1Y3QgcGFzc3dkCSpnZXRwd25hbSAoY29uc3QgY2hhciAqKTsKK2ludCAJCSBnZXRwd25hbV9yIChjb25zdCBjaGFyICosIHN0cnVjdCBwYXNzd2QgKiwKKwkJCWNoYXIgKiwgc2l6ZV90ICwgc3RydWN0IHBhc3N3ZCAqKik7CitpbnQJCSBnZXRwd3VpZF9yICh1aWRfdCwgc3RydWN0IHBhc3N3ZCAqLCBjaGFyICosCisJCQlzaXplX3QsIHN0cnVjdCBwYXNzd2QgKiopOworI2lmbmRlZiBfUE9TSVhfU09VUkNFCitzdHJ1Y3QgcGFzc3dkCSpnZXRwd2VudCAodm9pZCk7Cit2b2lkCQkgc2V0cHdlbnQgKHZvaWQpOwordm9pZAkJIGVuZHB3ZW50ICh2b2lkKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX1BXRF9IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3JlZW50LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvcmVlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjFiZTcxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3JlZW50LmgKQEAgLTAsMCArMSwxODkgQEAKKy8qIFRoaXMgaGVhZGVyIGZpbGUgcHJvdmlkZXMgdGhlIHJlZW50cmFuY3kuICAqLworCisvKiBUaGUgcmVlbnRyYW50IHN5c3RlbSBjYWxscyBoZXJlIHNlcnZlIHR3byBwdXJwb3NlczoKKworICAgMSkgUHJvdmlkZSByZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlIHN5c3RlbSBjYWxscyB0aGUgQU5TSSBDIGxpYnJhcnkKKyAgICAgIHJlcXVpcmVzLgorICAgMikgUHJvdmlkZSB0aGVzZSBzeXN0ZW0gY2FsbHMgaW4gYSBuYW1lc3BhY2UgY2xlYW4gd2F5LgorCisgICBJdCBpcyBpbnRlbmRlZCB0aGF0ICphbGwqIHN5c3RlbSBjYWxscyB0aGF0IHRoZSBBTlNJIEMgbGlicmFyeSBuZWVkcworICAgYmUgZGVjbGFyZWQgaGVyZS4gIEl0IGRvY3VtZW50cyB0aGVtIGFsbCBpbiBvbmUgcGxhY2UuICBBbGwgbGlicmFyeSBhY2Nlc3MKKyAgIHRvIHRoZSBzeXN0ZW0gaXMgdmlhIHNvbWUgZm9ybSBvZiB0aGVzZSBmdW5jdGlvbnMuCisKKyAgIFRoZSB0YXJnZXQgbWF5IHByb3ZpZGUgdGhlIG5lZWRlZCBzeXNjYWxscyBieSBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKworICAgMSkgRGVmaW5lIHRoZSByZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlIHN5c2NhbGxzIGRpcmVjdGx5LgorICAgICAgKGVnOiBfb3Blbl9yLCBfY2xvc2VfciwgZXRjLikuICBQbGVhc2Uga2VlcCB0aGUgbmFtZXNwYWNlIGNsZWFuLgorICAgICAgV2hlbiB5b3UgZG8gdGhpcywgc2V0ICJzeXNjYWxsX2RpciIgdG8gInN5c2NhbGxzIiBhbmQgYWRkCisgICAgICAtRFJFRU5UUkFOVF9TWVNDQUxMU19QUk9WSURFRCB0byBuZXdsaWJfY2ZsYWdzIGluIGNvbmZpZ3VyZS5ob3N0LgorCisgICAyKSBEZWZpbmUgbmFtZXNwYWNlIGNsZWFuIHZlcnNpb25zIG9mIHRoZSBzeXN0ZW0gY2FsbHMgYnkgcHJlZml4aW5nCisgICAgICB0aGVtIHdpdGggJ18nIChlZzogX29wZW4sIF9jbG9zZSwgZXRjLikuICBUZWNobmljYWxseSwgdGhlcmUgd29uJ3QgYmUKKyAgICAgIHRydWUgcmVlbnRyYW5jeSBhdCB0aGUgc3lzY2FsbCBsZXZlbCwgYnV0IHRoZSBsaWJyYXJ5IHdpbGwgYmUgbmFtZXNwYWNlCisgICAgICBjbGVhbi4KKyAgICAgIFdoZW4geW91IGRvIHRoaXMsIHNldCAic3lzY2FsbF9kaXIiIHRvICJzeXNjYWxscyIgaW4gY29uZmlndXJlLmhvc3QuCisKKyAgIDMpIERlZmluZSBvciBvdGhlcndpc2UgcHJvdmlkZSB0aGUgcmVndWxhciB2ZXJzaW9ucyBvZiB0aGUgc3lzY2FsbHMKKyAgICAgIChlZzogb3BlbiwgY2xvc2UsIGV0Yy4pLiAgVGhlIGxpYnJhcnkgd29uJ3QgYmUgcmVlbnRyYW50IG5vciBuYW1lc3BhY2UKKyAgICAgIGNsZWFuLCBidXQgYXQgbGVhc3QgaXQgd2lsbCB3b3JrLgorICAgICAgV2hlbiB5b3UgZG8gdGhpcywgYWRkIC1ETUlTU0lOR19TWVNDQUxMX05BTUVTIHRvIG5ld2xpYl9jZmxhZ3MgaW4KKyAgICAgIGNvbmZpZ3VyZS5ob3N0LgorCisgICA0KSBEZWZpbmUgb3Igb3RoZXJ3aXNlIHByb3ZpZGUgdGhlIHJlZ3VsYXIgdmVyc2lvbnMgb2YgdGhlIHN5c2NhbGxzLAorICAgICAgYW5kIGRvIG5vdCBzdXBwbHkgZnVuY3Rpb25hbCBpbnRlcmZhY2VzIGZvciBhbnkgb2YgdGhlIHJlZW50cmFudAorICAgICAgY2FsbHMuIFdpdGggdGhpcyBtZXRob2QsIHRoZSByZWVudHJhbnQgc3lzY2FsbHMgYXJlIHJlZGVmaW5lZCB0bworICAgICAgZGlyZWN0bHkgY2FsbCB0aGUgcmVndWxhciBzeXN0ZW0gY2FsbCB3aXRob3V0IHRoZSByZWVudHJhbmN5IGFyZ3VtZW50LgorICAgICAgV2hlbiB5b3UgZG8gdGhpcywgc3BlY2lmeSBib3RoIC1EUkVFTlRSQU5UX1NZU0NBTExTX1BST1ZJREVEIGFuZCAKKyAgICAgIC1ETUlTU0lOR19TWVNDQUxMX05BTUVTIHZpYSBuZXdsaWJfY2ZsYWdzIGluIGNvbmZpZ3VyZS5ob3N0IGFuZCBkbworICAgICAgbm90IHNwZWNpZnkgInN5c2NhbGxfZGlyIi4KKworICAgU3R1YnMgb2YgdGhlIHJlZW50cmFudCB2ZXJzaW9ucyBvZiB0aGUgc3lzY2FsbHMgZXhpc3QgaW4gdGhlIGxpYmMvcmVlbnQKKyAgIHNvdXJjZSBkaXJlY3RvcnkgYW5kIGFyZSBwcm92aWRlZCBpZiBSRUVOVFJBTlRfU1lTQ0FMTFNfUFJPVklERUQgaXNuJ3QgCisgICBkZWZpbmVkLiAgVGhlc2Ugc3R1YnMgY2FsbCB0aGUgbmF0aXZlIHN5c3RlbSBjYWxsczogX29wZW4sIF9jbG9zZSwgZXRjLiAKKyAgIGlmIE1JU1NJTkdfU1lTQ0FMTF9OQU1FUyBpcyAqbm90KiBkZWZpbmVkLCBvdGhlcndpc2UgdGhleSBjYWxsIHRoZQorICAgbm9uLXVuZGVyc2NvcmVkIHZlcnNpb25zOiBvcGVuLCBjbG9zZSwgZXRjLiB3aGVuIE1JU1NJTkdfU1lTQ0FMTF9OQU1FUworICAgKmlzKiBkZWZpbmVkLgorCisgICBCeSBkZWZhdWx0LCBuZXdsaWIgZnVuY3Rpb25zIGNhbGwgdGhlIHJlZW50cmFudCBzeXNjYWxscyBpbnRlcm5hbGx5LAorICAgcGFzc2luZyBhIHJlZW50cmFuY3kgc3RydWN0dXJlIGFzIGFuIGFyZ3VtZW50LiAgVGhpcyByZWVudHJhbmN5IHN0cnVjdHVyZQorICAgY29udGFpbnMgZGF0YSB0aGF0IGlzIHRocmVhZC1zcGVjaWZpYy4gIEZvciBleGFtcGxlLCB0aGUgZXJybm8gdmFsdWUgaXMKKyAgIGtlcHQgaW4gdGhlIHJlZW50cmFuY3kgc3RydWN0dXJlLiAgSWYgbXVsdGlwbGUgdGhyZWFkcyBleGlzdCwgZWFjaCB3aWxsCisgICBrZWVwIGEgc2VwYXJhdGUgZXJybm8gdmFsdWUgd2hpY2ggaXMgaW50dWl0aXZlIHNpbmNlIHRoZSBhcHBsaWNhdGlvbiBmbG93CisgICBjYW5ub3QgY2hlY2sgZm9yIGZhaWx1cmUgcmVsaWFibHkgb3RoZXJ3aXNlLgorCisgICBUaGUgcmVlbnRyYW50IHN5c2NhbGxzIGFyZSBlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtLCBieSB0aGUgCisgICBsaWJjL3JlZW50IHN0dWJzLCBvciBpbiB0aGUgY2FzZSBvZiBib3RoIE1JU1NJTkdfU1lTQ0FMTF9OQU1FUyBhbmQgCisgICBSRUVOVFJBTlRfU1lTQ0FMTFNfUFJPVklERUQgYmVpbmcgZGVmaW5lZCwgdGhlIGNhbGxzIGFyZSByZWRlZmluZWQgdG8KKyAgIHNpbXBseSBjYWxsIHRoZSByZWd1bGFyIHN5c2NhbGxzIHdpdGggbm8gcmVlbnRyYW5jeSBzdHJ1Y3QgYXJndW1lbnQuCisKKyAgIEEgc2luZ2xlLXRocmVhZGVkIGFwcGxpY2F0aW9uIGRvZXMgbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHJlZW50cmFuY3kKKyAgIHN0cnVjdHVyZS4gIEl0IGlzIHVzZWQgaW50ZXJuYWxseS4gIAorCisgICBBIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uIG5lZWRzIGVpdGhlciB0byBtYW51YWxseSBtYW5hZ2UgcmVlbnRyYW5jeSAKKyAgIHN0cnVjdHVyZXMgb3IgdXNlIGR5bmFtaWMgcmVlbnRyYW5jeS4KKyAgIAorICAgTWFudWFsbHkgbWFuYWdpbmcgcmVlbnRyYW5jeSBzdHJ1Y3R1cmVzIGVudGFpbHMgY2FsbGluZyBzcGVjaWFsIHJlZW50cmFudAorICAgdmVyc2lvbnMgb2YgbmV3bGliIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYW4gYWRkaXRpb25hbCByZWVudHJhbmN5IGFyZ3VtZW50LgorICAgRm9yIGV4YW1wbGUsIF9wcmludGZfci4gIEJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUKKyAgIHJlZW50cmFuY3kgc3RydWN0dXJlLiAgQnkgZGVmYXVsdCwgdGhlIG5vcm1hbCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbgorICAgdXNlcyB0aGUgZGVmYXVsdCByZWVudHJhbmN5IHN0cnVjdHVyZTogX1JFRU5ULiAgVGhlIHJlZW50cmFuY3kgc3RydWN0dXJlCisgICBpcyBwYXNzZWQgaW50ZXJuYWxseSwgZXZlbnR1YWxseSB0byB0aGUgcmVlbnRyYW50IHN5c2NhbGxzIHRoZW1zZWx2ZXMuCisgICBIb3cgdGhlIHN0cnVjdHVyZXMgYXJlIHN0b3JlZCBhbmQgYWNjZXNzZWQgaW4gdGhpcyBtb2RlbCBpcyB1cCB0byB0aGUKKyAgIGFwcGxpY2F0aW9uLgorCisgICBEeW5hbWljIHJlZW50cmFuY3kgaXMgc3BlY2lmaWVkIGJ5IHRoZSBfX0RZTkFNSUNfUkVFTlRfXyBmbGFnLiAgVGhpcworICAgZmxhZyBkZW5vdGVzIHNldHRpbmcgdXAgYSBtYWNybyB0byByZXBsYWNlIF9SRUVOVCB3aXRoIGEgZnVuY3Rpb24gY2FsbAorICAgdG8gX19nZXRyZWVudCgpLiAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0KKyAgIGFuZCBpdCBpcyBtZWFudCB0byByZXR1cm4gdGhlIHJlZW50cmFuY3kgc3RydWN0dXJlIGZvciB0aGUgY3VycmVudAorICAgdGhyZWFkLiAgV2hlbiB0aGUgcmVndWxhciBDIGZ1bmN0aW9ucyAoZS5nLiBwcmludGYpIGdvIHRvIGNhbGwgaW50ZXJuYWwKKyAgIHJvdXRpbmVzIHdpdGggdGhlIGRlZmF1bHQgX1JFRU5UIHN0cnVjdHVyZSwgdGhleSBlbmQgdXAgY2FsbGluZyB3aXRoIAorICAgdGhlIHJlZW50cmFuY3kgc3RydWN0dXJlIGZvciB0aGUgdGhyZWFkLiAgVGh1cywgYXBwbGljYXRpb24gY29kZSBkb2VzIG5vdAorICAgbmVlZCB0byBjYWxsIHRoZSBfciByb3V0aW5lcyBub3Igd29ycnkgYWJvdXQgcmVlbnRyYW5jeSBzdHJ1Y3R1cmVzLiAgKi8KKworLyogV0FSTklORzogQWxsIGlkZW50aWZpZXJzIGhlcmUgbXVzdCBiZWdpbiB3aXRoIGFuIHVuZGVyc2NvcmUuICBUaGlzIGZpbGUgaXMKKyAgIGluY2x1ZGVkIGJ5IHN0ZGlvLmggYW5kIG90aGVycyBhbmQgd2UgdGhlcmVmb3JlIG11c3Qgb25seSB1c2UgaWRlbnRpZmllcnMKKyAgIGluIHRoZSBuYW1lc3BhY2UgYWxsb3R0ZWQgdG8gdXMuICAqLworCisjaWZuZGVmIF9SRUVOVF9IXworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2RlZmluZSBfUkVFTlRfSF8KKworI2luY2x1ZGUgPHN5cy9yZWVudC5oPgorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3R5cGVzLmg+CisKKyNkZWZpbmUgX19uZWVkX3NpemVfdAorI2RlZmluZSBfX25lZWRfcHRyZGlmZl90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIEZJWE1FOiBub3QgbmFtZXNwYWNlIGNsZWFuICovCitzdHJ1Y3Qgc3RhdDsKK3N0cnVjdCB0bXM7CitzdHJ1Y3QgdGltZXZhbDsKK3N0cnVjdCB0aW1lem9uZTsKKworI2lmIGRlZmluZWQoUkVFTlRSQU5UX1NZU0NBTExTX1BST1ZJREVEKSAmJiBkZWZpbmVkKE1JU1NJTkdfU1lTQ0FMTF9OQU1FUykKKworI2RlZmluZSBfY2xvc2VfcihfX3JlZW50LCBfX2ZkKSAgICAgICAgICAgICAgICAgICBjbG9zZShfX2ZkKQorI2RlZmluZSBfZXhlY3ZlX3IoX19yZWVudCwgX19mLCBfX2FyZywgX19lbnYpICAgICBleGVjdmUoX19mLCBfX2FyZywgX19lbnYpCisjZGVmaW5lIF9mY250bF9yKF9fcmVlbnQsIF9fZmQsIF9fY21kLCBfX2FyZykgICAgIGZjbnRsKF9fZmQsIF9fY21kLCBfX2FyZykKKyNkZWZpbmUgX2ZvcmtfcihfX3JlZW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yaygpCisjZGVmaW5lIF9mc3RhdF9yKF9fcmVlbnQsIF9fZmRlcywgX19zdGF0KSAgICAgICAgIGZzdGF0KF9fZmRlcywgX19zdGF0KQorI2RlZmluZSBfZ2V0cGlkX3IoX19yZWVudCkgICAgICAgICAgICAgICAgICAgICAgICBnZXRwaWQoKQorI2RlZmluZSBfaXNhdHR5X3IoX19yZWVudCwgX19kZXNjKSAgICAgICAgICAgICAgICBpc2F0dHkoX19kZXNjKQorI2RlZmluZSBfa2lsbF9yKF9fcmVlbnQsIF9fcGlkLCBfX3NpZ25hbCkgICAgICAgICBraWxsKF9fcGlkLCBfX3NpZ25hbCkKKyNkZWZpbmUgX2xpbmtfcihfX3JlZW50LCBfX29sZHBhdGgsIF9fbmV3cGF0aCkgICAgbGluayhfX29sZHBhdGgsIF9fbmV3cGF0aCkKKyNkZWZpbmUgX2xzZWVrX3IoX19yZWVudCwgX19mZGVzLCBfX29mZiwgX193KSAgICAgbHNlZWsoX19mZGVzLCBfX29mZiwgX193KQorI2RlZmluZSBfbWtkaXJfcihfX3JlZW50LCBfX3BhdGgsIF9fbSkJCSAgbWtkaXIoX19wYXRoLCBfX20pCisjZGVmaW5lIF9vcGVuX3IoX19yZWVudCwgX19wYXRoLCBfX2ZsYWcsIF9fbSkgICAgIG9wZW4oX19wYXRoLCBfX2ZsYWcsIF9fbSkKKyNkZWZpbmUgX3JlYWRfcihfX3JlZW50LCBfX2ZkLCBfX2J1ZmYsIF9fY250KSAgICAgcmVhZChfX2ZkLCBfX2J1ZmYsIF9fY250KQorI2RlZmluZSBfcmVuYW1lX3IoX19yZWVudCwgX19vbGQsIF9fbmV3KQkgIHJlbmFtZShfX29sZCwgX19uZXcpCisjZGVmaW5lIF9zYnJrX3IoX19yZWVudCwgX19pbmNyKSAgICAgICAgICAgICAgICAgIHNicmsoX19pbmNyKQorI2RlZmluZSBfc3RhdF9yKF9fcmVlbnQsIF9fcGF0aCwgX19idWZmKSAgICAgICAgICBzdGF0KF9fcGF0aCwgX19idWZmKQorI2RlZmluZSBfdGltZXNfcihfX3JlZW50LCBfX3RpbWUpICAgICAgICAgICAgICAgICB0aW1lcyhfX3RpbWUpCisjZGVmaW5lIF91bmxpbmtfcihfX3JlZW50LCBfX3BhdGgpICAgICAgICAgICAgICAgIHVubGluayhfX3BhdGgpCisjZGVmaW5lIF93YWl0X3IoX19yZWVudCwgX19zdGF0dXMpICAgICAgICAgICAgICAgIHdhaXQoX19zdGF0dXMpCisjZGVmaW5lIF93cml0ZV9yKF9fcmVlbnQsIF9fZmQsIF9fYnVmZiwgX19jbnQpICAgIHdyaXRlKF9fZmQsIF9fYnVmZiwgX19jbnQpCisjZGVmaW5lIF9nZXR0aW1lb2ZkYXlfcihfX3JlZW50LCBfX3RwLCBfX3R6cCkgICAgIGdldHRpbWVvZmRheShfX3RwLCBfX3R6cCkKKworI2lmZGVmIF9fTEFSR0U2NF9GSUxFUworI2RlZmluZSBfbHNlZWs2NF9yKF9fcmVlbnQsIF9fZmQsIF9fb2ZmLCBfX3cpICAgICBsc2VlazY0KF9fZmQsIF9fb2ZmLCBfX3cpCisjZGVmaW5lIF9mc3RhdDY0X3IoX19yZWVudCwgX19mZCwgX19idWZmKSAgICAgICAgIGZzdGF0NjQoX19mZCwgX19idWZmKQorI2RlZmluZSBfb3BlbjY0X3IoX19yZWVudCwgX19wYXRoLCBfX2ZsYWcsIF9fbSkgICBvcGVuNjQoX19wYXRoLCBfX2ZsYWcsIF9fbSkKKyNlbmRpZgorCisjZWxzZQorLyogUmVlbnRyYW50IHZlcnNpb25zIG9mIHN5c3RlbSBjYWxscy4gICovCisKK2V4dGVybiBpbnQgX2Nsb3NlX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgaW50KSk7CitleHRlcm4gaW50IF9leGVjdmVfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNoYXIgKmNvbnN0ICosIGNoYXIgKmNvbnN0ICopKTsKK2V4dGVybiBpbnQgX2ZjbnRsX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgaW50LCBpbnQsIGludCkpOworZXh0ZXJuIGludCBfZm9ya19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICopKTsKK2V4dGVybiBpbnQgX2ZzdGF0X3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgaW50LCBzdHJ1Y3Qgc3RhdCAqKSk7CitleHRlcm4gaW50IF9nZXRwaWRfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqKSk7CitleHRlcm4gaW50IF9pc2F0dHlfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBpbnQpKTsKK2V4dGVybiBpbnQgX2tpbGxfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBpbnQsIGludCkpOworZXh0ZXJuIGludCBfbGlua19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitleHRlcm4gX29mZl90IF9sc2Vla19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIGludCwgX29mZl90LCBpbnQpKTsKK2V4dGVybiBpbnQgX21rZGlyX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBpbnQpKTsKK2V4dGVybiBpbnQgX29wZW5fciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGludCwgaW50KSk7CitleHRlcm4gX3NzaXplX3QgX3JlYWRfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBpbnQsIHZvaWQgKiwgc2l6ZV90KSk7CitleHRlcm4gaW50IF9yZW5hbWVfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworZXh0ZXJuIHZvaWQgKl9zYnJrX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgcHRyZGlmZl90KSk7CitleHRlcm4gaW50IF9zdGF0X3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKSk7CitleHRlcm4gX0NMT0NLX1RfIF90aW1lc19yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIHN0cnVjdCB0bXMgKikpOworZXh0ZXJuIGludCBfdW5saW5rX3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKSk7CitleHRlcm4gaW50IF93YWl0X3IgX1BBUkFNUyAoKHN0cnVjdCBfcmVlbnQgKiwgaW50ICopKTsKK2V4dGVybiBfc3NpemVfdCBfd3JpdGVfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KSk7CisKKy8qIFRoaXMgb25lIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGF2YWlsYWJsZSBvbiBhbGwgdGFyZ2V0cy4gICovCitleHRlcm4gaW50IF9nZXR0aW1lb2ZkYXlfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBzdHJ1Y3QgdGltZXZhbCAqX190cCwgdm9pZCAqX190enApKTsKKworI2lmZGVmIF9fTEFSR0U2NF9GSUxFUworCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjZGVmaW5lIHN0YXQ2NCBzdGF0CisjZW5kaWYKK3N0cnVjdCBzdGF0NjQ7CisKK2V4dGVybiBfb2ZmNjRfdCBfbHNlZWs2NF9yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIGludCwgX29mZjY0X3QsIGludCkpOworZXh0ZXJuIGludCBfZnN0YXQ2NF9yIF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICosIGludCwgc3RydWN0IHN0YXQ2NCAqKSk7CitleHRlcm4gaW50IF9vcGVuNjRfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGludCwgaW50KSk7CitleHRlcm4gaW50IF9zdGF0NjRfciBfUEFSQU1TICgoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0NjQgKikpOworCisvKiBEb24ndCBwb2xsdXRlIG5hbWVzcGFjZSBpZiBub3QgYnVpbGRpbmcgbmV3bGliLiAqLworI2lmIGRlZmluZWQgKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkIChfQ09NUElMSU5HX05FV0xJQikKKyN1bmRlZiBzdGF0NjQKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX1JFRU5UX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvcmVnZGVmLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvcmVnZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmMTQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9yZWdkZWYuaApAQCAtMCwwICsxLDcgQEAKKy8qIHJlZ2RlZi5oIC0tIGRlZmluZSByZWdpc3RlciBuYW1lcy4gICovCisKKy8qIFRoaXMgaXMgYSBzdGFuZGFyZCBpbmNsdWRlIGZpbGUgZm9yIE1JUFMgdGFyZ2V0cy4gIE90aGVyIHRhcmdldAorICAgcHJvYmFibHkgZG9uJ3QgZGVmaW5lIGl0LCBhbmQgYXR0ZW1wdHMgdG8gaW5jbHVkZSB0aGlzIGZpbGUgd2lsbAorICAgZmFpbC4gICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL3JlZ2RlZi5oPgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3JlZ2V4LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvcmVnZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM3OGY0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3JlZ2V4LmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyIEhlbnJ5IFNwZW5jZXIuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEhlbnJ5IFNwZW5jZXIgb2YgdGhlIFVuaXZlcnNpdHkgb2YgVG9yb250by4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXJlZ2V4LmgJOC4yIChCZXJrZWxleSkgMS8zLzk0CisgKiAkRnJlZUJTRDogc3JjL2luY2x1ZGUvcmVnZXguaCx2IDEuNCAyMDAyLzAzLzIzIDE3OjI0OjUzIGltcCBFeHAgJAorICovCisKKyNpZm5kZWYgX1JFR0VYX0hfCisjZGVmaW5lCV9SRUdFWF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKy8qIHR5cGVzICovCit0eXBlZGVmIG9mZl90IHJlZ29mZl90OworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHJlX21hZ2ljOworCXNpemVfdCByZV9uc3ViOwkJLyogbnVtYmVyIG9mIHBhcmVudGhlc2l6ZWQgc3ViZXhwcmVzc2lvbnMgKi8KKwlfX2NvbnN0IGNoYXIgKnJlX2VuZHA7CS8qIGVuZCBwb2ludGVyIGZvciBSRUdfUEVORCAqLworCXN0cnVjdCByZV9ndXRzICpyZV9nOwkvKiBub25lIG9mIHlvdXIgYnVzaW5lc3MgOi0pICovCit9IHJlZ2V4X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlyZWdvZmZfdCBybV9zbzsJCS8qIHN0YXJ0IG9mIG1hdGNoICovCisJcmVnb2ZmX3Qgcm1fZW87CQkvKiBlbmQgb2YgbWF0Y2ggKi8KK30gcmVnbWF0Y2hfdDsKKworLyogcmVnY29tcCgpIGZsYWdzICovCisjZGVmaW5lCVJFR19CQVNJQwkwMDAwCisjZGVmaW5lCVJFR19FWFRFTkRFRAkwMDAxCisjZGVmaW5lCVJFR19JQ0FTRQkwMDAyCisjZGVmaW5lCVJFR19OT1NVQgkwMDA0CisjZGVmaW5lCVJFR19ORVdMSU5FCTAwMTAKKyNkZWZpbmUJUkVHX05PU1BFQwkwMDIwCisjZGVmaW5lCVJFR19QRU5ECTAwNDAKKyNkZWZpbmUJUkVHX0RVTVAJMDIwMAorCisvKiByZWdlcnJvcigpIGZsYWdzICovCisjZGVmaW5lCVJFR19OT01BVENICSAxCisjZGVmaW5lCVJFR19CQURQQVQJIDIKKyNkZWZpbmUJUkVHX0VDT0xMQVRFCSAzCisjZGVmaW5lCVJFR19FQ1RZUEUJIDQKKyNkZWZpbmUJUkVHX0VFU0NBUEUJIDUKKyNkZWZpbmUJUkVHX0VTVUJSRUcJIDYKKyNkZWZpbmUJUkVHX0VCUkFDSwkgNworI2RlZmluZQlSRUdfRVBBUkVOCSA4CisjZGVmaW5lCVJFR19FQlJBQ0UJIDkKKyNkZWZpbmUJUkVHX0JBREJSCTEwCisjZGVmaW5lCVJFR19FUkFOR0UJMTEKKyNkZWZpbmUJUkVHX0VTUEFDRQkxMgorI2RlZmluZQlSRUdfQkFEUlBUCTEzCisjZGVmaW5lCVJFR19FTVBUWQkxNAorI2RlZmluZQlSRUdfQVNTRVJUCTE1CisjZGVmaW5lCVJFR19JTlZBUkcJMTYKKyNkZWZpbmUJUkVHX0FUT0kJMjU1CS8qIGNvbnZlcnQgbmFtZSB0byBudW1iZXIgKCEpICovCisjZGVmaW5lCVJFR19JVE9BCTA0MDAJLyogY29udmVydCBudW1iZXIgdG8gbmFtZSAoISkgKi8KKworLyogcmVnZXhlYygpIGZsYWdzICovCisjZGVmaW5lCVJFR19OT1RCT0wJMDAwMDEKKyNkZWZpbmUJUkVHX05PVEVPTAkwMDAwMgorI2RlZmluZQlSRUdfU1RBUlRFTkQJMDAwMDQKKyNkZWZpbmUJUkVHX1RSQUNFCTAwNDAwCS8qIHRyYWNpbmcgb2YgZXhlY3V0aW9uICovCisjZGVmaW5lCVJFR19MQVJHRQkwMTAwMAkvKiBmb3JjZSBsYXJnZSByZXByZXNlbnRhdGlvbiAqLworI2RlZmluZQlSRUdfQkFDS1IJMDIwMDAJLyogZm9yY2UgdXNlIG9mIGJhY2tyZWYgY29kZSAqLworCitfX0JFR0lOX0RFQ0xTCitpbnQJcmVnY29tcChyZWdleF90ICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK3NpemVfdAlyZWdlcnJvcihpbnQsIGNvbnN0IHJlZ2V4X3QgKiwgY2hhciAqLCBzaXplX3QpOworaW50CXJlZ2V4ZWMoY29uc3QgcmVnZXhfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgcmVnbWF0Y2hfdCBbXSwgaW50KTsKK3ZvaWQJcmVnZnJlZShyZWdleF90ICopOworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfUkVHRVhfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zY2hlZC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0YWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zY2hlZC5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgV3JpdHRlbiBieSBKb2VsIFNoZXJyaWxsIDxqb2VsQE9BUmNvcnAuY29tPi4KKyAqCisgKiAgQ09QWVJJR0hUIChjKSAxOTg5LTIwMTAuCisgKiAgT24tTGluZSBBcHBsaWNhdGlvbnMgUmVzZWFyY2ggQ29ycG9yYXRpb24gKE9BUikuCisgKgorICogIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogIHB1cnBvc2Ugd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgbm90aWNlCisgKiAgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBhbnkgc29mdHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5CisgKiAgb3IgbW9kaWZpY2F0aW9uIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogIFRISVMgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCAgVEhFIEFVVEhPUiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTgorICogIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWSBPRiBUSElTCisgKiAgU09GVFdBUkUgT1IgSVRTIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogICRJZCQKKyAqLworCisjaWZuZGVmIF9TQ0hFRF9IXworI2RlZmluZSBfU0NIRURfSF8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zY2hlZC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HKQorLyoKKyAqICBYQkQgMTMgLSBTZXQgU2NoZWR1bGluZyBQYXJhbWV0ZXJzLCBQMTAwMy4xYi0yMDA4LCBwLiAxODAzCisgKi8KK2ludCBzY2hlZF9zZXRwYXJhbSgKKyAgcGlkX3QgICAgICAgICAgICAgICAgICAgICBfX3BpZCwKKyAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtCispOworCisvKgorICogIFhCRCAxMyAtIFNldCBTY2hlZHVsaW5nIFBhcmFtZXRlcnMsIFAxMDAzLjFiLTIwMDgsIHAuIDE4MDAKKyAqLworaW50IHNjaGVkX2dldHBhcmFtKAorICBwaWRfdCAgICAgICAgICAgICAgICAgICAgIF9fcGlkLAorICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gICAgICAgKl9fcGFyYW0KKyk7CisKKy8qCisgKiAgWEJEIDEzIC0gU2V0IFNjaGVkdWxpbmcgUG9saWN5IGFuZCBTY2hlZHVsaW5nIFBhcmFtZXRlcnMsCisgKiAgICAgICAgIFAxMDAzLjFiLTIwMDgsIHAuIDE4MDUKKyAqLworaW50IHNjaGVkX3NldHNjaGVkdWxlcigKKyAgcGlkX3QgICAgICAgICAgICAgICAgICAgICBfX3BpZCwKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgICBfX3BvbGljeSwKKyAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtCispOworCisvKgorICogIFhCRCAxMyAtIEdldCBTY2hlZHVsaW5nIFBvbGljeSwgUDEwMDMuMWItMjAwOCwgcC4gMTgwMQorICovCitpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyKAorICBwaWRfdCAgICAgICAgICAgICAgICAgICAgIF9fcGlkCispOworCisvKgorICogIFhCRCAxMyAtIEdldCBTY2hlZHVsaW5nIFBhcmFtZXRlciBMaW1pdHMsIFAxMDAzLjFiLTIwMDgsIHAuIDE3OTkKKyAqLworaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoCisgIGludCBfX3BvbGljeQorKTsKKworaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4oCisgIGludCAgX19wb2xpY3kKKyk7CisKKy8qCisgKiAgWEJEIDEzIC0gR2V0IFNjaGVkdWxpbmcgUGFyYW1ldGVyIExpbWl0cywgUDEwMDMuMWItMjAwOCwgcC4gMTgwMgorICovCitpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsKAorICBwaWRfdCAgICAgICAgICAgICBfX3BpZCwKKyAgc3RydWN0IHRpbWVzcGVjICAqX19pbnRlcnZhbAorKTsKKyNlbmRpZiAvKiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORyAqLworCisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEUykgfHwgZGVmaW5lZChfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORykKKworLyoKKyAqICBYQkQgMTMgLSBZaWVsZCBQcm9jZXNzb3IsIFAxMDAzLjFiLTIwMDgsIHAuIDE4MDcKKyAqLworaW50IHNjaGVkX3lpZWxkKCB2b2lkICk7CisKKyNlbmRpZiAvKiBfUE9TSVhfVEhSRUFEUyBvciBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1NDSEVEX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc2VhcmNoLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc2VhcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyYzQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zZWFyY2guaApAQCAtMCwwICsxLDY0IEBACisvKgkkTmV0QlNEOiBzZWFyY2guaCx2IDEuMTIgMTk5OS8wMi8yMiAxMDozNDoyOCBjaHJpc3RvcyBFeHAgJAkqLworLyogJEZyZWVCU0Q6IHNyYy9pbmNsdWRlL3NlYXJjaC5oLHYgMS40IDIwMDIvMDMvMjMgMTc6MjQ6NTMgaW1wIEV4cCAkICovCisKKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+CisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpZm5kZWYgX1NFQVJDSF9IXworI2RlZmluZSBfU0VBUkNIX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2Fuc2kuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QgZW50cnkgeworCWNoYXIgKmtleTsKKwl2b2lkICpkYXRhOworfSBFTlRSWTsKKwordHlwZWRlZiBlbnVtIHsKKwlGSU5ELCBFTlRFUgorfSBBQ1RJT047CisKK3R5cGVkZWYgZW51bSB7CisJcHJlb3JkZXIsCisJcG9zdG9yZGVyLAorCWVuZG9yZGVyLAorCWxlYWYKK30gVklTSVQ7CisKKyNpZmRlZiBfU0VBUkNIX1BSSVZBVEUKK3R5cGVkZWYgc3RydWN0IG5vZGUgeworCWNoYXIgICAgICAgICAqa2V5OworCXN0cnVjdCBub2RlICAqbGxpbmssICpybGluazsKK30gbm9kZV90OworI2VuZGlmCisKK3N0cnVjdCBoc2VhcmNoX2RhdGEKK3sKKyAgc3RydWN0IGludGVybmFsX2hlYWQgKmh0YWJsZTsKKyAgc2l6ZV90IGh0YWJsZXNpemU7Cit9OworCisjaWZuZGVmIF9fY29tcGFyX2ZuX3RfZGVmaW5lZAorI2RlZmluZSBfX2NvbXBhcl9mbl90X2RlZmluZWQKK3R5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKyNlbmRpZgorCitfX0JFR0lOX0RFQ0xTCitpbnQJIGhjcmVhdGUoc2l6ZV90KTsKK3ZvaWQJIGhkZXN0cm95KHZvaWQpOworRU5UUlkJKmhzZWFyY2goRU5UUlksIEFDVElPTik7CitpbnQJIGhjcmVhdGVfcihzaXplX3QsIHN0cnVjdCBoc2VhcmNoX2RhdGEgKik7Cit2b2lkCSBoZGVzdHJveV9yKHN0cnVjdCBoc2VhcmNoX2RhdGEgKik7CitpbnQJaHNlYXJjaF9yKEVOVFJZLCBBQ1RJT04sIEVOVFJZICoqLCBzdHJ1Y3QgaHNlYXJjaF9kYXRhICopOwordm9pZAkqdGRlbGV0ZShjb25zdCB2b2lkICosIHZvaWQgKiosIF9fY29tcGFyX2ZuX3QpOwordm9pZAl0ZGVzdHJveSAodm9pZCAqLCB2b2lkICgqKSh2b2lkICopKTsKK3ZvaWQJKnRmaW5kKGNvbnN0IHZvaWQgKiwgdm9pZCAqKiwgX19jb21wYXJfZm5fdCk7Cit2b2lkCSp0c2VhcmNoKGNvbnN0IHZvaWQgKiwgdm9pZCAqKiwgX19jb21wYXJfZm5fdCk7Cit2b2lkICAgICAgdHdhbGsoY29uc3Qgdm9pZCAqLCB2b2lkICgqKShjb25zdCB2b2lkICosIFZJU0lULCBpbnQpKTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhX1NFQVJDSF9IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3NldGptcC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3NldGptcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NThkOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc2V0am1wLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKwlzZXRqbXAuaAorCXN0dWJzIGZvciBmdXR1cmUgdXNlLgorKi8KKworI2lmbmRlZiBfU0VUSk1QX0hfCisjZGVmaW5lIF9TRVRKTVBfSF8KKworI2luY2x1ZGUgIl9hbnNpLmgiCisjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KKworX0JFR0lOX1NURF9DCisKK3ZvaWQJX0VYRlVOKGxvbmdqbXAsKGptcF9idWYgX19qbXBiLCBpbnQgX19yZXR2YWwpKTsKK2ludAlfRVhGVU4oc2V0am1wLChqbXBfYnVmIF9fam1wYikpOworCitfRU5EX1NURF9DCisKKyNlbmRpZiAvKiBfU0VUSk1QX0hfICovCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zaWduYWwuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzUwYTJlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3NpZ25hbC5oCkBAIC0wLDAgKzEsMzIgQEAKKyNpZm5kZWYgX1NJR05BTF9IXworI2RlZmluZSBfU0lHTkFMX0hfCisKKyNpbmNsdWRlICJfYW5zaS5oIgorI2luY2x1ZGUgPHN5cy9zaWduYWwuaD4KKworX0JFR0lOX1NURF9DCisKK3R5cGVkZWYgaW50CXNpZ19hdG9taWNfdDsJCS8qIEF0b21pYyBlbnRpdHkgdHlwZSAoQU5TSSkgKi8KKyNpZm5kZWYgX1BPU0lYX1NPVVJDRQordHlwZWRlZiBfc2lnX2Z1bmNfcHRyIHNpZ190OwkJLyogQlNEIG5hbWluZyAqLwordHlwZWRlZiBfc2lnX2Z1bmNfcHRyIHNpZ2hhbmRsZXJfdDsJLyogZ2xpYmMgbmFtaW5nICovCisjZW5kaWYgLyogIV9QT1NJWF9TT1VSQ0UgKi8KKworI2RlZmluZSBTSUdfREZMICgoX3NpZ19mdW5jX3B0cikwKQkvKiBEZWZhdWx0IGFjdGlvbiAqLworI2RlZmluZSBTSUdfSUdOICgoX3NpZ19mdW5jX3B0cikxKQkvKiBJZ25vcmUgYWN0aW9uICovCisjZGVmaW5lIFNJR19FUlIgKChfc2lnX2Z1bmNfcHRyKS0xKQkvKiBFcnJvciByZXR1cm4gKi8KKworc3RydWN0IF9yZWVudDsKKworX3NpZ19mdW5jX3B0ciBfRVhGVU4oX3NpZ25hbF9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIF9zaWdfZnVuY19wdHIpKTsKK2ludAlfRVhGVU4oX3JhaXNlX3IsIChzdHJ1Y3QgX3JlZW50ICosIGludCkpOworCisjaWZuZGVmIF9SRUVOVF9PTkxZCitfc2lnX2Z1bmNfcHRyIF9FWEZVTihzaWduYWwsIChpbnQsIF9zaWdfZnVuY19wdHIpKTsKK2ludAlfRVhGVU4ocmFpc2UsIChpbnQpKTsKK3ZvaWQJX0VYRlVOKHBzaWduYWwsIChpbnQsIGNvbnN0IGNoYXIgKikpOworI2VuZGlmCisKK19FTkRfU1REX0MKKworI2VuZGlmIC8qIF9TSUdOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zcGF3bi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3NwYXduLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4NjdiNQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zcGF3bi5oCkBAIC0wLDAgKzEsMTE5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOCBFZCBTY2hvdXRlbiA8ZWRARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1NQQVdOX0hfCisjZGVmaW5lIF9TUEFXTl9IXworCisjaW5jbHVkZSA8X2Fuc2kuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+CisjZGVmaW5lIF9fbmVlZF9zaWdzZXRfdAorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitzdHJ1Y3Qgc2NoZWRfcGFyYW07CisKK3R5cGVkZWYgc3RydWN0IF9fcG9zaXhfc3Bhd25hdHRyCQkqcG9zaXhfc3Bhd25hdHRyX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX3Bvc2l4X3NwYXduX2ZpbGVfYWN0aW9ucwkqcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3Q7CisKKyNkZWZpbmUgUE9TSVhfU1BBV05fUkVTRVRJRFMJCTB4MDEKKyNkZWZpbmUgUE9TSVhfU1BBV05fU0VUUEdST1VQCQkweDAyCisjZGVmaW5lIFBPU0lYX1NQQVdOX1NFVFNDSEVEUEFSQU0JMHgwNAorI2RlZmluZSBQT1NJWF9TUEFXTl9TRVRTQ0hFRFVMRVIJMHgwOAorI2RlZmluZSBQT1NJWF9TUEFXTl9TRVRTSUdERUYJCTB4MTAKKyNkZWZpbmUgUE9TSVhfU1BBV05fU0VUU0lHTUFTSwkJMHgyMAorCitfQkVHSU5fU1REX0MKKy8qCisgKiBTcGF3biByb3V0aW5lcworICoKKyAqIFhYWCBib3RoIGFycmF5cyBzaG91bGQgYmUgX19yZXN0cmljdCwgYnV0IHRoaXMgZG9lcyBub3Qgd29yayB3aGVuIEdDQworICogaXMgaW52b2tlZCB3aXRoIC1zdGQ9Yzk5LgorICovCitpbnQgX0VYRlVOKHBvc2l4X3NwYXduLCAocGlkX3QgKiAgX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCisJY29uc3QgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKiwgY29uc3QgcG9zaXhfc3Bhd25hdHRyX3QgKiBfX3Jlc3RyaWN0LAorCWNoYXIgKiBjb25zdCBbXSwgY2hhciAqIGNvbnN0IFtdKQorKTsKK2ludCBfRVhGVU4ocG9zaXhfc3Bhd25wLCAocGlkX3QgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKKwljb25zdCBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqLCBjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqIF9fcmVzdHJpY3QsCisJY2hhciAqIGNvbnN0IFtdLCBjaGFyICogY29uc3QgW10pCispOworCisvKgorICogRmlsZSBkZXNjcmlwdG9yIGFjdGlvbnMKKyAqLworaW50IF9FWEZVTihwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdCwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICopKTsKK2ludCBfRVhGVU4ocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25fZGVzdHJveSwgKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc190ICopKTsKKworaW50IF9FWEZVTihwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkb3BlbiwKKwkocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKiBfX3Jlc3RyaWN0LCBpbnQsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBpbnQsIG1vZGVfdCkKKyk7CitpbnQgX0VYRlVOKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRkdXAyLAorCShwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCAqLCBpbnQsIGludCkKKyk7CitpbnQgX0VYRlVOKHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRjbG9zZSwKKwkocG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX3QgKiwgaW50KQorKTsKKworLyoKKyAqIFNwYXduIGF0dHJpYnV0ZXMKKyAqLworaW50IF9FWEZVTihwb3NpeF9zcGF3bmF0dHJfaW5pdCwgKHBvc2l4X3NwYXduYXR0cl90ICopKTsKK2ludCBfRVhGVU4ocG9zaXhfc3Bhd25hdHRyX2Rlc3Ryb3ksIChwb3NpeF9zcGF3bmF0dHJfdCAqKSk7CisKK2ludCBfRVhGVU4ocG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzLAorCShjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqIF9fcmVzdHJpY3QsIHNob3J0ICogX19yZXN0cmljdCkKKyk7CitpbnQgX0VYRlVOKHBvc2l4X3NwYXduYXR0cl9nZXRwZ3JvdXAsCisJKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICogX19yZXN0cmljdCwgcGlkX3QgKiBfX3Jlc3RyaWN0KSk7CitpbnQgX0VYRlVOKHBvc2l4X3NwYXduYXR0cl9nZXRzY2hlZHBhcmFtLAorCShjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqIF9fcmVzdHJpY3QsIHN0cnVjdCBzY2hlZF9wYXJhbSAqIF9fcmVzdHJpY3QpCispOworaW50IF9FWEZVTihwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwb2xpY3ksCisJKGNvbnN0IHBvc2l4X3NwYXduYXR0cl90ICogX19yZXN0cmljdCwgaW50ICogX19yZXN0cmljdCkKKyk7CitpbnQgX0VYRlVOKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdkZWZhdWx0LAorCShjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqIF9fcmVzdHJpY3QsIHNpZ3NldF90ICogX19yZXN0cmljdCkKKyk7CitpbnQgX0VYRlVOKHBvc2l4X3NwYXduYXR0cl9nZXRzaWdtYXNrLAorCShjb25zdCBwb3NpeF9zcGF3bmF0dHJfdCAqIF9fcmVzdHJpY3QsIHNpZ3NldF90ICogX19yZXN0cmljdCkKKyk7CisKK2ludCBfRVhGVU4ocG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzLCAocG9zaXhfc3Bhd25hdHRyX3QgKiwgc2hvcnQpKTsKK2ludCBfRVhGVU4ocG9zaXhfc3Bhd25hdHRyX3NldHBncm91cCwgKHBvc2l4X3NwYXduYXR0cl90ICosIHBpZF90KSk7CitpbnQgX0VYRlVOKHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtLAorCShwb3NpeF9zcGF3bmF0dHJfdCAqIF9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqIF9fcmVzdHJpY3QpCispOworaW50IF9FWEZVTihwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3ksIChwb3NpeF9zcGF3bmF0dHJfdCAqLCBpbnQpKTsKK2ludCBfRVhGVU4ocG9zaXhfc3Bhd25hdHRyX3NldHNpZ2RlZmF1bHQsCisJKHBvc2l4X3NwYXduYXR0cl90ICogX19yZXN0cmljdCwgY29uc3Qgc2lnc2V0X3QgKiBfX3Jlc3RyaWN0KQorKTsKK2ludCBfRVhGVU4ocG9zaXhfc3Bhd25hdHRyX3NldHNpZ21hc2ssCisJKHBvc2l4X3NwYXduYXR0cl90ICogX19yZXN0cmljdCwgY29uc3Qgc2lnc2V0X3QgKiBfX3Jlc3RyaWN0KQorKTsKK19FTkRfU1REX0MKKworI2VuZGlmIC8qICFfU1BBV05fSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdGRhdG9taWMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdGRhdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWMwY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N0ZGF0b21pYy5oCkBAIC0wLDAgKzEsNDEzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBFZCBTY2hvdXRlbiA8ZWRARnJlZUJTRC5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgRGF2aWQgQ2hpc25hbGwgPHRoZXJhdmVuQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmIF9TVERBVE9NSUNfSF8KKyNkZWZpbmUJX1NUREFUT01JQ19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCisjaWYgX19oYXNfZXh0ZW5zaW9uKGNfYXRvbWljKSB8fCBfX2hhc19leHRlbnNpb24oY3h4X2F0b21pYykKKyNkZWZpbmUJX19DTEFOR19BVE9NSUNTCisjZWxpZiBfX0dOVUNfUFJFUkVRX18oNCwgNykKKyNkZWZpbmUJX19HTlVDX0FUT01JQ1MKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lCV9fU1lOQ19BVE9NSUNTCisjZWxzZQorI2Vycm9yICJzdGRhdG9taWMuaCBkb2VzIG5vdCBzdXBwb3J0IHlvdXIgY29tcGlsZXIiCisjZW5kaWYKKworLyoKKyAqIDcuMTcuMSBBdG9taWMgbG9jay1mcmVlIG1hY3Jvcy4KKyAqLworCisjaWZkZWYgX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19CT09MX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQ0hBUl9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVJfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfQ0hBUl9MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUJX19HQ0NfQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX0lOVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0lOVF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19JTlRfTE9DS19GUkVFCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0xPTkdfTE9DS19GUkVFCQlfX0dDQ19BVE9NSUNfTE9OR19MT0NLX0ZSRUUKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUKKyNlbmRpZgorCisvKgorICogNy4xNy4yIEluaXRpYWxpemF0aW9uLgorICovCisKKyNpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX1ZBUl9JTklUKHZhbHVlKQkJKHZhbHVlKQorI2RlZmluZQlhdG9taWNfaW5pdChvYmosIHZhbHVlKQkJX19jMTFfYXRvbWljX2luaXQob2JqLCB2YWx1ZSkKKyNlbHNlCisjZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCXsgLl9fdmFsID0gKHZhbHVlKSB9CisjZGVmaW5lCWF0b21pY19pbml0KG9iaiwgdmFsdWUpCQkoKHZvaWQpKChvYmopLT5fX3ZhbCA9ICh2YWx1ZSkpKQorI2VuZGlmCisKKy8qCisgKiBDbGFuZyBhbmQgcmVjZW50IEdDQyBib3RoIHByb3ZpZGUgcHJlZGVmaW5lZCBtYWNyb3MgZm9yIHRoZSBtZW1vcnkKKyAqIG9yZGVyaW5ncy4gIElmIHdlIGFyZSB1c2luZyBhIGNvbXBpbGVyIHRoYXQgZG9lc24ndCBkZWZpbmUgdGhlbSwgdXNlIHRoZQorICogY2xhbmcgdmFsdWVzIC0gdGhlc2Ugd2lsbCBiZSBpZ25vcmVkIGluIHRoZSBmYWxsYmFjayBwYXRoLgorICovCisKKyNpZm5kZWYgX19BVE9NSUNfUkVMQVhFRAorI2RlZmluZSBfX0FUT01JQ19SRUxBWEVECQkwCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQ09OU1VNRQorI2RlZmluZSBfX0FUT01JQ19DT05TVU1FCQkxCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQUNRVUlSRQorI2RlZmluZSBfX0FUT01JQ19BQ1FVSVJFCQkyCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfUkVMRUFTRQorI2RlZmluZSBfX0FUT01JQ19SRUxFQVNFCQkzCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQUNRX1JFTAorI2RlZmluZSBfX0FUT01JQ19BQ1FfUkVMCQk0CisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfU0VRX0NTVAorI2RlZmluZSBfX0FUT01JQ19TRVFfQ1NUCQk1CisjZW5kaWYKKworLyoKKyAqIDcuMTcuMyBPcmRlciBhbmQgY29uc2lzdGVuY3kuCisgKgorICogVGhlIG1lbW9yeV9vcmRlcl8qIGNvbnN0YW50cyB0aGF0IGRlbm90ZSB0aGUgYmFycmllciBiZWhhdmlvdXIgb2YgdGhlCisgKiBhdG9taWMgb3BlcmF0aW9ucy4KKyAqLworCit0eXBlZGVmIGVudW0geworCW1lbW9yeV9vcmRlcl9yZWxheGVkID0gX19BVE9NSUNfUkVMQVhFRCwKKwltZW1vcnlfb3JkZXJfY29uc3VtZSA9IF9fQVRPTUlDX0NPTlNVTUUsCisJbWVtb3J5X29yZGVyX2FjcXVpcmUgPSBfX0FUT01JQ19BQ1FVSVJFLAorCW1lbW9yeV9vcmRlcl9yZWxlYXNlID0gX19BVE9NSUNfUkVMRUFTRSwKKwltZW1vcnlfb3JkZXJfYWNxX3JlbCA9IF9fQVRPTUlDX0FDUV9SRUwsCisJbWVtb3J5X29yZGVyX3NlcV9jc3QgPSBfX0FUT01JQ19TRVFfQ1NUCit9IG1lbW9yeV9vcmRlcjsKKworLyoKKyAqIDcuMTcuNCBGZW5jZXMuCisgKi8KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY190aHJlYWRfZmVuY2UobWVtb3J5X29yZGVyIF9fb3JkZXIgX191bnVzZWQpCit7CisKKyNpZmRlZiBfX0NMQU5HX0FUT01JQ1MKKwlfX2MxMV9hdG9taWNfdGhyZWFkX2ZlbmNlKF9fb3JkZXIpOworI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKwlfX2F0b21pY190aHJlYWRfZmVuY2UoX19vcmRlcik7CisjZWxzZQorCV9fc3luY19zeW5jaHJvbml6ZSgpOworI2VuZGlmCit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfc2lnbmFsX2ZlbmNlKG1lbW9yeV9vcmRlciBfX29yZGVyIF9fdW51c2VkKQoreworCisjaWZkZWYgX19DTEFOR19BVE9NSUNTCisJX19jMTFfYXRvbWljX3NpZ25hbF9mZW5jZShfX29yZGVyKTsKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisJX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fb3JkZXIpOworI2Vsc2UKKwlfX2FzbSB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKTsKKyNlbmRpZgorfQorCisvKgorICogNy4xNy41IExvY2stZnJlZSBwcm9wZXJ0eS4KKyAqLworCisjaWYgZGVmaW5lZChfS0VSTkVMKQorLyogQXRvbWljcyBpbiBrZXJuZWxzcGFjZSBhcmUgYWx3YXlzIGxvY2stZnJlZS4gKi8KKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwkoKHZvaWQpKG9iaiksIChfQm9vbCkxKQorI2VsaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19pc19sb2NrX2ZyZWUob2JqKSBcCisJX19hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZigqKG9iaikpLCBvYmopCisjZWxpZiBkZWZpbmVkKF9fR05VQ19BVE9NSUNTKQorI2RlZmluZQlhdG9taWNfaXNfbG9ja19mcmVlKG9iaikgXAorCV9fYXRvbWljX2lzX2xvY2tfZnJlZShzaXplb2YoKG9iaiktPl9fdmFsKSwgJihvYmopLT5fX3ZhbCkKKyNlbHNlCisjZGVmaW5lCWF0b21pY19pc19sb2NrX2ZyZWUob2JqKSBcCisJKCh2b2lkKShvYmopLCBzaXplb2YoKG9iaiktPl9fdmFsKSA8PSBzaXplb2Yodm9pZCAqKSkKKyNlbmRpZgorCisvKgorICogNy4xNy42IEF0b21pYyBpbnRlZ2VyIHR5cGVzLgorICovCisKK3R5cGVkZWYgX0F0b21pYyhfQm9vbCkJCQlhdG9taWNfYm9vbDsKK3R5cGVkZWYgX0F0b21pYyhjaGFyKQkJCWF0b21pY19jaGFyOwordHlwZWRlZiBfQXRvbWljKHNpZ25lZCBjaGFyKQkJYXRvbWljX3NjaGFyOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGNoYXIpCQlhdG9taWNfdWNoYXI7Cit0eXBlZGVmIF9BdG9taWMoc2hvcnQpCQkJYXRvbWljX3Nob3J0OwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIHNob3J0KQkJYXRvbWljX3VzaG9ydDsKK3R5cGVkZWYgX0F0b21pYyhpbnQpCQkJYXRvbWljX2ludDsKK3R5cGVkZWYgX0F0b21pYyh1bnNpZ25lZCBpbnQpCQlhdG9taWNfdWludDsKK3R5cGVkZWYgX0F0b21pYyhsb25nKQkJCWF0b21pY19sb25nOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGxvbmcpCQlhdG9taWNfdWxvbmc7Cit0eXBlZGVmIF9BdG9taWMobG9uZyBsb25nKQkJYXRvbWljX2xsb25nOwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGxvbmcgbG9uZykJYXRvbWljX3VsbG9uZzsKKyNpZiAwCit0eXBlZGVmIF9BdG9taWMoX19jaGFyMTZfdCkJCWF0b21pY19jaGFyMTZfdDsKK3R5cGVkZWYgX0F0b21pYyhfX2NoYXIzMl90KQkJYXRvbWljX2NoYXIzMl90OworI2VuZGlmCit0eXBlZGVmIF9BdG9taWMod2NoYXJfdCkJCWF0b21pY193Y2hhcl90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDhfdCkJCWF0b21pY19pbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDhfdCkJCWF0b21pY191aW50X2xlYXN0OF90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDE2X3QpCQlhdG9taWNfaW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2xlYXN0MTZfdCkJCWF0b21pY191aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3QzMl90KQkJYXRvbWljX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDMyX3QpCQlhdG9taWNfdWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2xlYXN0NjRfdCkJCWF0b21pY19pbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3Q2NF90KQkJYXRvbWljX3VpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0OF90KQkJYXRvbWljX2ludF9mYXN0OF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDhfdCkJCWF0b21pY191aW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3QxNl90KQkJYXRvbWljX2ludF9mYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3QxNl90KQkJYXRvbWljX3VpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3QzMl90KQkJYXRvbWljX2ludF9mYXN0MzJfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3QzMl90KQkJYXRvbWljX3VpbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3Q2NF90KQkJYXRvbWljX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3Q2NF90KQkJYXRvbWljX3VpbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50cHRyX3QpCQlhdG9taWNfaW50cHRyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludHB0cl90KQkJYXRvbWljX3VpbnRwdHJfdDsKK3R5cGVkZWYgX0F0b21pYyhzaXplX3QpCQkJYXRvbWljX3NpemVfdDsKK3R5cGVkZWYgX0F0b21pYyhwdHJkaWZmX3QpCQlhdG9taWNfcHRyZGlmZl90OwordHlwZWRlZiBfQXRvbWljKGludG1heF90KQkJYXRvbWljX2ludG1heF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRtYXhfdCkJCWF0b21pY191aW50bWF4X3Q7CisKKy8qCisgKiA3LjE3LjcgT3BlcmF0aW9ucyBvbiBhdG9taWMgdHlwZXMuCisgKi8KKworLyoKKyAqIENvbXBpbGVyLXNwZWNpZmljIG9wZXJhdGlvbnMuCisgKi8KKworI2lmIGRlZmluZWQoX19DTEFOR19BVE9NSUNTKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCV9fYzExX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhvYmplY3QsIGV4cGVjdGVkLCBkZXNpcmVkLAlcCisJICAgIHN1Y2Nlc3MsIGZhaWx1cmUpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKKwlfX2MxMV9hdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKG9iamVjdCwgZXhwZWN0ZWQsIGRlc2lyZWQsCVwKKwkgICAgc3VjY2VzcywgZmFpbHVyZSkKKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2V4Y2hhbmdlKG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfYWRkKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfYW5kKG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9vcihvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX3N1YihvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX3hvcihvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfbG9hZF9leHBsaWNpdChvYmplY3QsIG9yZGVyKQkJCQlcCisJX19jMTFfYXRvbWljX2xvYWQob2JqZWN0LCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQkJXAorCV9fYzExX2F0b21pY19zdG9yZShvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQorI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKKwlfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJihvYmplY3QpLT5fX3ZhbCwgZXhwZWN0ZWQsCQlcCisJICAgIGRlc2lyZWQsIDAsIHN1Y2Nlc3MsIGZhaWx1cmUpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKKwlfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24oJihvYmplY3QpLT5fX3ZhbCwgZXhwZWN0ZWQsCQlcCisJICAgIGRlc2lyZWQsIDEsIHN1Y2Nlc3MsIGZhaWx1cmUpCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2V4Y2hhbmdlX24oJihvYmplY3QpLT5fX3ZhbCwgZGVzaXJlZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF9hZGQoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF9hbmQoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX29yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfc3ViKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfeG9yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfbG9hZF9leHBsaWNpdChvYmplY3QsIG9yZGVyKQkJCQlcCisJX19hdG9taWNfbG9hZF9uKCYob2JqZWN0KS0+X192YWwsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCQlcCisJX19hdG9taWNfc3RvcmVfbigmKG9iamVjdCktPl9fdmFsLCBkZXNpcmVkLCBvcmRlcikKKyNlbHNlCisjZGVmaW5lCV9fYXRvbWljX2FwcGx5X3N0cmlkZShvYmplY3QsIG9wZXJhbmQpIFwKKwkoKChfX3R5cGVvZl9fKChvYmplY3QpLT5fX3ZhbCkpMCkgKyAob3BlcmFuZCkpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJX19leHRlbnNpb25fXyAoewkJCVwKKwlfX3R5cGVvZl9fKGV4cGVjdGVkKSBfX2VwID0gKGV4cGVjdGVkKTsJCQkJXAorCV9fdHlwZW9mX18oKl9fZXApIF9fZSA9ICpfX2VwOwkJCQkJXAorCSh2b2lkKShzdWNjZXNzKTsgKHZvaWQpKGZhaWx1cmUpOwkJCQlcCisJKF9Cb29sKSgoKl9fZXAgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJihvYmplY3QpLT5fX3ZhbCwJXAorCSAgICBfX2UsIGRlc2lyZWQpKSA9PSBfX2UpOwkJCQkJXAorfSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisJCWRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCisjaWYgX19oYXNfYnVpbHRpbihfX3N5bmNfc3dhcCkKKy8qIENsYW5nIHByb3ZpZGVzIGEgZnVsbC1iYXJyaWVyIGF0b21pYyBleGNoYW5nZSAtIHVzZSBpdCBpZiBhdmFpbGFibGUuICovCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfc3dhcCgmKG9iamVjdCktPl9fdmFsLCBkZXNpcmVkKSkKKyNlbHNlCisvKgorICogX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCkgaXMgb25seSBhbiBhY3F1aXJlIGJhcnJpZXIgaW4gdGhlb3J5IChhbHRob3VnaCBpbgorICogcHJhY3RpY2UgaXQgaXMgdXN1YWxseSBhIGZ1bGwgYmFycmllcikgc28gd2UgbmVlZCBhbiBleHBsaWNpdCBiYXJyaWVyIGJlZm9yZQorICogaXQuCisgKi8KKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQlcCitfX2V4dGVuc2lvbl9fICh7CQkJCQkJCVwKKwlfX3R5cGVvZl9fKG9iamVjdCkgX19vID0gKG9iamVjdCk7CQkJCVwKKwlfX3R5cGVvZl9fKGRlc2lyZWQpIF9fZCA9IChkZXNpcmVkKTsJCQkJXAorCSh2b2lkKShvcmRlcik7CQkJCQkJCVwKKwlfX3N5bmNfc3luY2hyb25pemUoKTsJCQkJCQlcCisJX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCYoX19vKS0+X192YWwsIF9fZCk7CQkJXAorfSkKKyNlbmRpZgorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfYWRkKCYob2JqZWN0KS0+X192YWwsCQlcCisJICAgIF9fYXRvbWljX2FwcGx5X3N0cmlkZShvYmplY3QsIG9wZXJhbmQpKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FuZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfb3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX2ZldGNoX2FuZF9zdWIoJihvYmplY3QpLT5fX3ZhbCwJCVwKKwkgICAgX19hdG9taWNfYXBwbHlfc3RyaWRlKG9iamVjdCwgb3BlcmFuZCkpKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfeG9yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQpKQorI2RlZmluZQlhdG9taWNfbG9hZF9leHBsaWNpdChvYmplY3QsIG9yZGVyKQkJCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfYWRkKCYob2JqZWN0KS0+X192YWwsIDApKQorI2RlZmluZQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCQlcCisJKCh2b2lkKWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKSkKKyNlbmRpZgorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb25zLgorICoKKyAqIERvbid0IHByb3ZpZGUgdGhlc2UgaW4ga2VybmVsIHNwYWNlLiBJbiBrZXJuZWwgc3BhY2UsIHdlIHNob3VsZCBiZQorICogZGlzY2lwbGluZWQgZW5vdWdoIHRvIGFsd2F5cyBwcm92aWRlIGV4cGxpY2l0IGJhcnJpZXJzLgorICovCisKKyNpZm5kZWYgX0tFUk5FTAorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisJICAgIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayhvYmplY3QsIGV4cGVjdGVkLCBkZXNpcmVkKQkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZXhjaGFuZ2Uob2JqZWN0LCBkZXNpcmVkKQkJCQlcCisJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hZGQob2JqZWN0LCBvcGVyYW5kKQkJCQlcCisJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19sb2FkKG9iamVjdCkJCQkJCQlcCisJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX3N0b3JlKG9iamVjdCwgZGVzaXJlZCkJCQkJCVwKKwlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNlbmRpZiAvKiAhX0tFUk5FTCAqLworCisvKgorICogNy4xNy44IEF0b21pYyBmbGFnIHR5cGUgYW5kIG9wZXJhdGlvbnMuCisgKgorICogWFhYOiBBc3N1bWUgYXRvbWljX2Jvb2wgY2FuIGJlIHVzZWQgYXMgYW4gYXRvbWljX2ZsYWcuIElzIHRoZXJlIHNvbWUKKyAqIGtpbmQgb2YgY29tcGlsZXIgYnVpbHQtaW4gdHlwZSB3ZSBjb3VsZCB1c2U/CisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWF0b21pY19ib29sCV9fZmxhZzsKK30gYXRvbWljX2ZsYWc7CisKKyNkZWZpbmUJQVRPTUlDX0ZMQUdfSU5JVAkJeyBBVE9NSUNfVkFSX0lOSVQoMCkgfQorCitzdGF0aWMgX19pbmxpbmUgX0Jvb2wKK2F0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QsCisgICAgbWVtb3J5X29yZGVyIF9fb3JkZXIpCit7CisJcmV0dXJuIChhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoJl9fb2JqZWN0LT5fX2ZsYWcsIDEsIF9fb3JkZXIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbGFnICpfX29iamVjdCwgbWVtb3J5X29yZGVyIF9fb3JkZXIpCit7CisKKwlhdG9taWNfc3RvcmVfZXhwbGljaXQoJl9fb2JqZWN0LT5fX2ZsYWcsIDAsIF9fb3JkZXIpOworfQorCisjaWZuZGVmIF9LRVJORUwKK3N0YXRpYyBfX2lubGluZSBfQm9vbAorYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGF0b21pY19mbGFnICpfX29iamVjdCkKK3sKKworCXJldHVybiAoYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KF9fb2JqZWN0LAorCSAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX2ZsYWdfY2xlYXIodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0KQoreworCisJYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoX19vYmplY3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKK30KKyNlbmRpZiAvKiAhX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9TVERBVE9NSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdGRpbnQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdGRpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDM3NGFlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N0ZGludC5oCkBAIC0wLDAgKzEsNDkzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IGJ5CisgKiBSYWxmIENvcnNlcGl1cywgVWxtL0dlcm1hbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZQorICogaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorICovCisKKyNpZm5kZWYgX1NURElOVF9ICisjZGVmaW5lIF9TVERJTlRfSAorCisjaW5jbHVkZSA8X2Fuc2kuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgX19HTlVDX1BSRVJFUSAoMywgMikKKy8qIGdjYyA+IDMuMiBpbXBsaWNpdGx5IGRlZmluZXMgdGhlIHZhbHVlcyB3ZSBhcmUgaW50ZXJlc3RlZCAqLworI2RlZmluZSBfX1NURElOVF9FWFAoeCkgX18jI3gjI19fCisjZWxzZQorI2RlZmluZSBfX1NURElOVF9FWFAoeCkgeAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKy8qIENoZWNrIGlmICJsb25nIGxvbmciIGlzIDY0Yml0IHdpZGUgKi8KKy8qIE1vZGVybiBHQ0NzIHByb3ZpZGUgX19MT05HX0xPTkdfTUFYX18sIFNVU3YzIHdhbnRzIExMT05HX01BWCAqLworI2lmICggZGVmaW5lZChfX0xPTkdfTE9OR19NQVhfXykgJiYgKF9fTE9OR19MT05HX01BWF9fID4gMHg3ZmZmZmZmZikgKSBcCisgIHx8ICggZGVmaW5lZChMTE9OR19NQVgpICYmIChMTE9OR19NQVggPiAweDdmZmZmZmZmKSApCisjZGVmaW5lIF9faGF2ZV9sb25nbG9uZzY0IDEKKyNlbmRpZgorCisvKiBDaGVjayBpZiAibG9uZyIgaXMgNjRiaXQgb3IgMzJiaXQgd2lkZSAqLworI2lmIF9fU1RESU5UX0VYUChMT05HX01BWCkgPiAweDdmZmZmZmZmCisjZGVmaW5lIF9faGF2ZV9sb25nNjQgMQorI2VsaWYgX19TVERJTlRfRVhQKExPTkdfTUFYKSA9PSAweDdmZmZmZmZmICYmICFkZWZpbmVkKF9fU1BVX18pCisjZGVmaW5lIF9faGF2ZV9sb25nMzIgMQorI2VuZGlmCisKKyNpZiBfX1NURElOVF9FWFAoU0NIQVJfTUFYKSA9PSAweDdmCit0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdCA7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdCA7CisjZGVmaW5lIF9faW50OF90X2RlZmluZWQgMQorI2VuZGlmCisKKyNpZiBfX2ludDhfdF9kZWZpbmVkCit0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9sZWFzdDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90OworI2RlZmluZSBfX2ludF9sZWFzdDhfdF9kZWZpbmVkIDEKKyNlbmRpZgorCisjaWYgX19TVERJTlRfRVhQKFNIUlRfTUFYKSA9PSAweDdmZmYKK3R5cGVkZWYgc2lnbmVkIHNob3J0IGludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90OworI2RlZmluZSBfX2ludDE2X3RfZGVmaW5lZCAxCisjZWxpZiBfX1NURElOVF9FWFAoSU5UX01BWCkgPT0gMHg3ZmZmCit0eXBlZGVmIHNpZ25lZCBpbnQgaW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQxNl90OworI2RlZmluZSBfX2ludDE2X3RfZGVmaW5lZCAxCisjZWxpZiBfX1NURElOVF9FWFAoU0NIQVJfTUFYKSA9PSAweDdmZmYKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50MTZfdDsKKyNkZWZpbmUgX19pbnQxNl90X2RlZmluZWQgMQorI2VuZGlmCisKKyNpZiBfX2ludDE2X3RfZGVmaW5lZAordHlwZWRlZiBpbnQxNl90ICAgCWludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IAl1aW50X2xlYXN0MTZfdDsKKyNkZWZpbmUgX19pbnRfbGVhc3QxNl90X2RlZmluZWQgMQorCisjaWYgIV9faW50X2xlYXN0OF90X2RlZmluZWQKK3R5cGVkZWYgaW50MTZfdAkgICAJaW50X2xlYXN0OF90OwordHlwZWRlZiB1aW50MTZfdCAgCXVpbnRfbGVhc3Q4X3Q7CisjZGVmaW5lIF9faW50X2xlYXN0OF90X2RlZmluZWQgMQorI2VuZGlmCisjZW5kaWYKKworI2lmIF9faGF2ZV9sb25nMzIKK3R5cGVkZWYgc2lnbmVkIGxvbmcgaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50MzJfdDsKKyNkZWZpbmUgX19pbnQzMl90X2RlZmluZWQgMQorI2VsaWYgX19TVERJTlRfRVhQKElOVF9NQVgpID09IDB4N2ZmZmZmZmZMCit0eXBlZGVmIHNpZ25lZCBpbnQgaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OworI2RlZmluZSBfX2ludDMyX3RfZGVmaW5lZCAxCisjZWxpZiBfX1NURElOVF9FWFAoU0hSVF9NQVgpID09IDB4N2ZmZmZmZmZMCit0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MzJfdDsKKyNkZWZpbmUgX19pbnQzMl90X2RlZmluZWQgMQorI2VsaWYgX19TVERJTlRfRVhQKFNDSEFSX01BWCkgPT0gMHg3ZmZmZmZmZkwKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50MzJfdDsKKyNkZWZpbmUgX19pbnQzMl90X2RlZmluZWQgMQorI2VuZGlmCisKKyNpZiBfX2ludDMyX3RfZGVmaW5lZAordHlwZWRlZiBpbnQzMl90ICAgCWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IAl1aW50X2xlYXN0MzJfdDsKKyNkZWZpbmUgX19pbnRfbGVhc3QzMl90X2RlZmluZWQgMQorCisjaWYgIV9faW50X2xlYXN0OF90X2RlZmluZWQKK3R5cGVkZWYgaW50MzJfdAkgICAJaW50X2xlYXN0OF90OwordHlwZWRlZiB1aW50MzJfdCAgCXVpbnRfbGVhc3Q4X3Q7CisjZGVmaW5lIF9faW50X2xlYXN0OF90X2RlZmluZWQgMQorI2VuZGlmCisKKyNpZiAhX19pbnRfbGVhc3QxNl90X2RlZmluZWQKK3R5cGVkZWYgaW50MzJfdAkgICAJaW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgdWludDMyX3QgIAl1aW50X2xlYXN0MTZfdDsKKyNkZWZpbmUgX19pbnRfbGVhc3QxNl90X2RlZmluZWQgMQorI2VuZGlmCisjZW5kaWYKKworI2lmIF9faGF2ZV9sb25nNjQKK3R5cGVkZWYgc2lnbmVkIGxvbmcgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50NjRfdDsKKyNkZWZpbmUgX19pbnQ2NF90X2RlZmluZWQgMQorI2VsaWYgX19oYXZlX2xvbmdsb25nNjQKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7CisjZGVmaW5lIF9faW50NjRfdF9kZWZpbmVkIDEKKyNlbGlmICBfX1NURElOVF9FWFAoSU5UX01BWCkgPiAweDdmZmZmZmZmCit0eXBlZGVmIHNpZ25lZCBpbnQgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ2NF90OworI2RlZmluZSBfX2ludDY0X3RfZGVmaW5lZCAxCisjZW5kaWYKKworI2lmIF9faW50NjRfdF9kZWZpbmVkCit0eXBlZGVmIGludDY0X3QgICAJaW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgdWludDY0X3QgCXVpbnRfbGVhc3Q2NF90OworI2RlZmluZSBfX2ludF9sZWFzdDY0X3RfZGVmaW5lZCAxCisKKyNpZiAhX19pbnRfbGVhc3Q4X3RfZGVmaW5lZAordHlwZWRlZiBpbnQ2NF90CSAgIAlpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAJdWludF9sZWFzdDhfdDsKKyNkZWZpbmUgX19pbnRfbGVhc3Q4X3RfZGVmaW5lZCAxCisjZW5kaWYKKworI2lmICFfX2ludF9sZWFzdDE2X3RfZGVmaW5lZAordHlwZWRlZiBpbnQ2NF90CSAgIAlpbnRfbGVhc3QxNl90OwordHlwZWRlZiB1aW50NjRfdCAgCXVpbnRfbGVhc3QxNl90OworI2RlZmluZSBfX2ludF9sZWFzdDE2X3RfZGVmaW5lZCAxCisjZW5kaWYKKworI2lmICFfX2ludF9sZWFzdDMyX3RfZGVmaW5lZAordHlwZWRlZiBpbnQ2NF90CSAgIAlpbnRfbGVhc3QzMl90OwordHlwZWRlZiB1aW50NjRfdCAgCXVpbnRfbGVhc3QzMl90OworI2RlZmluZSBfX2ludF9sZWFzdDMyX3RfZGVmaW5lZCAxCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogRmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMKKyAqCisgKiBBc3N1bWUgaW50IHRvIGJlIHRoZSBmYXN0ZXN0IHR5cGUgZm9yIGFsbCB0eXBlcyB3aXRoIGEgd2lkdGggCisgKiBsZXNzIHRoYW4gX19JTlRfTUFYX18gcnNwLiBJTlRfTUFYCisgKi8KKyNpZiBfX1NURElOVF9FWFAoSU5UX01BWCkgPj0gMHg3ZgorICB0eXBlZGVmIHNpZ25lZCBpbnQgaW50X2Zhc3Q4X3Q7CisgIHR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDhfdDsKKyNkZWZpbmUgX19pbnRfZmFzdDhfdF9kZWZpbmVkIDEKKyNlbmRpZgorCisjaWYgX19TVERJTlRfRVhQKElOVF9NQVgpID49IDB4N2ZmZgorICB0eXBlZGVmIHNpZ25lZCBpbnQgaW50X2Zhc3QxNl90OworICB0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zhc3QxNl90OworI2RlZmluZSBfX2ludF9mYXN0MTZfdF9kZWZpbmVkIDEKKyNlbmRpZgorCisjaWYgX19TVERJTlRfRVhQKElOVF9NQVgpID49IDB4N2ZmZmZmZmYKKyAgdHlwZWRlZiBzaWduZWQgaW50IGludF9mYXN0MzJfdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MzJfdDsKKyNkZWZpbmUgX19pbnRfZmFzdDMyX3RfZGVmaW5lZCAxCisjZW5kaWYKKworI2lmIF9fU1RESU5UX0VYUChJTlRfTUFYKSA+IDB4N2ZmZmZmZmYKKyAgdHlwZWRlZiBzaWduZWQgaW50IGludF9mYXN0NjRfdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0NjRfdDsKKyNkZWZpbmUgX19pbnRfZmFzdDY0X3RfZGVmaW5lZCAxCisjZW5kaWYKKworLyoKKyAqIEZhbGwgYmFjayB0byBbdV1pbnRfbGVhc3Q8Tj5fdCBmb3IgW3VdaW50X2Zhc3Q8Tj5fdCB0eXBlcworICogbm90IGhhdmluZyBiZWVuIGRlZmluZWQsIHlldC4KKyAqIExlYXZlIHVuZGVmaW5lZCwgaWYgW3VdaW50X2xlYXN0PE4+X3Qgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGUuCisgKi8KKyNpZiAhX19pbnRfZmFzdDhfdF9kZWZpbmVkCisjaWYgX19pbnRfbGVhc3Q4X3RfZGVmaW5lZAorICB0eXBlZGVmIGludF9sZWFzdDhfdCBpbnRfZmFzdDhfdDsKKyAgdHlwZWRlZiB1aW50X2xlYXN0OF90IHVpbnRfZmFzdDhfdDsKKyNkZWZpbmUgX19pbnRfZmFzdDhfdF9kZWZpbmVkIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhX19pbnRfZmFzdDE2X3RfZGVmaW5lZAorI2lmIF9faW50X2xlYXN0MTZfdF9kZWZpbmVkCisgIHR5cGVkZWYgaW50X2xlYXN0MTZfdCBpbnRfZmFzdDE2X3Q7CisgIHR5cGVkZWYgdWludF9sZWFzdDE2X3QgdWludF9mYXN0MTZfdDsKKyNkZWZpbmUgX19pbnRfZmFzdDE2X3RfZGVmaW5lZCAxCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIV9faW50X2Zhc3QzMl90X2RlZmluZWQKKyNpZiBfX2ludF9sZWFzdDMyX3RfZGVmaW5lZAorICB0eXBlZGVmIGludF9sZWFzdDMyX3QgaW50X2Zhc3QzMl90OworICB0eXBlZGVmIHVpbnRfbGVhc3QzMl90IHVpbnRfZmFzdDMyX3Q7CisjZGVmaW5lIF9faW50X2Zhc3QzMl90X2RlZmluZWQgMQorI2VuZGlmCisjZW5kaWYKKworI2lmICFfX2ludF9mYXN0NjRfdF9kZWZpbmVkCisjaWYgX19pbnRfbGVhc3Q2NF90X2RlZmluZWQKKyAgdHlwZWRlZiBpbnRfbGVhc3Q2NF90IGludF9mYXN0NjRfdDsKKyAgdHlwZWRlZiB1aW50X2xlYXN0NjRfdCB1aW50X2Zhc3Q2NF90OworI2RlZmluZSBfX2ludF9mYXN0NjRfdF9kZWZpbmVkIDEKKyNlbmRpZgorI2VuZGlmCisKKy8qIEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKy8qIE1vZGVybiBHQ0NzIHByb3ZpZGUgX19JTlRNQVhfVFlQRV9fICovCisjaWYgZGVmaW5lZChfX0lOVE1BWF9UWVBFX18pCisgIHR5cGVkZWYgX19JTlRNQVhfVFlQRV9fIGludG1heF90OworI2VsaWYgX19oYXZlX2xvbmdsb25nNjQKKyAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludG1heF90OworI2Vsc2UKKyAgdHlwZWRlZiBzaWduZWQgbG9uZyBpbnRtYXhfdDsKKyNlbmRpZgorCisvKiBNb2Rlcm4gR0NDcyBwcm92aWRlIF9fVUlOVE1BWF9UWVBFX18gKi8KKyNpZiBkZWZpbmVkKF9fVUlOVE1BWF9UWVBFX18pCisgIHR5cGVkZWYgX19VSU5UTUFYX1RZUEVfXyB1aW50bWF4X3Q7CisjZWxpZiBfX2hhdmVfbG9uZ2xvbmc2NAorICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50bWF4X3Q7CisjZWxzZQorICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludG1heF90OworI2VuZGlmCisKKy8qCisgKiBHQ0MgZG9lc24ndCBwcm92aWRlIGFuIGFwcHJvcHJpYXRlIG1hY3JvIGZvciBbdV1pbnRwdHJfdAorICogRm9yIG5vdywgdXNlIF9fUFRSRElGRl9UWVBFX18KKyAqLworI2lmIGRlZmluZWQoX19QVFJESUZGX1RZUEVfXykKK3R5cGVkZWYgc2lnbmVkIF9fUFRSRElGRl9UWVBFX18gaW50cHRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9fUFRSRElGRl9UWVBFX18gdWludHB0cl90OworI2RlZmluZSBJTlRQVFJfTUFYIFBUUkRJRkZfTUFYCisjZGVmaW5lIElOVFBUUl9NSU4gUFRSRElGRl9NSU4KKyNpZmRlZiBfX1VJTlRQVFJfTUFYX18KKyNkZWZpbmUgVUlOVFBUUl9NQVggX19VSU5UUFRSX01BWF9fCisjZWxzZQorI2RlZmluZSBVSU5UUFRSX01BWCAoMlVMICogUFRSRElGRl9NQVggKyAxKQorI2VuZGlmCisjZWxzZQorLyoKKyAqIEZhbGxiYWNrIHRvIGhhcmRjb2RlZCB2YWx1ZXMsIAorICogc2hvdWxkIGJlIHZhbGlkIG9uIGNwdSdzIHdpdGggMzJiaXQgaW50LzMyYml0IHZvaWQqCisgKi8KK3R5cGVkZWYgc2lnbmVkIGxvbmcgaW50cHRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OworI2RlZmluZSBJTlRQVFJfTUFYIF9fU1RESU5UX0VYUChMT05HX01BWCkKKyNkZWZpbmUgSU5UUFRSX01JTiAoLV9fU1RESU5UX0VYUChMT05HX01BWCkgLSAxKQorI2RlZmluZSBVSU5UUFRSX01BWCAoX19TVERJTlRfRVhQKExPTkdfTUFYKSAqIDJVTCArIDEpCisjZW5kaWYKKworLyogTGltaXRzIG9mIFNwZWNpZmllZC1XaWR0aCBJbnRlZ2VyIFR5cGVzICovCisKKyNpZiBfX2ludDhfdF9kZWZpbmVkCisjZGVmaW5lIElOVDhfTUlOIAktMTI4CisjZGVmaW5lIElOVDhfTUFYIAkgMTI3CisjZGVmaW5lIFVJTlQ4X01BWCAJIDI1NQorI2VuZGlmCisKKyNpZiBfX2ludF9sZWFzdDhfdF9kZWZpbmVkCisjZGVmaW5lIElOVF9MRUFTVDhfTUlOIAktMTI4CisjZGVmaW5lIElOVF9MRUFTVDhfTUFYIAkgMTI3CisjZGVmaW5lIFVJTlRfTEVBU1Q4X01BWAkgMjU1CisjZWxzZQorI2Vycm9yIHJlcXVpcmVkIHR5cGUgaW50X2xlYXN0OF90IG1pc3NpbmcKKyNlbmRpZgorCisjaWYgX19pbnQxNl90X2RlZmluZWQKKyNkZWZpbmUgSU5UMTZfTUlOIAktMzI3NjgKKyNkZWZpbmUgSU5UMTZfTUFYIAkgMzI3NjcKKyNkZWZpbmUgVUlOVDE2X01BWCAJIDY1NTM1CisjZW5kaWYKKworI2lmIF9faW50X2xlYXN0MTZfdF9kZWZpbmVkCisjZGVmaW5lIElOVF9MRUFTVDE2X01JTgktMzI3NjgKKyNkZWZpbmUgSU5UX0xFQVNUMTZfTUFYCSAzMjc2NworI2RlZmluZSBVSU5UX0xFQVNUMTZfTUFYIDY1NTM1CisjZWxzZQorI2Vycm9yIHJlcXVpcmVkIHR5cGUgaW50X2xlYXN0MTZfdCBtaXNzaW5nCisjZW5kaWYKKworI2lmIF9faW50MzJfdF9kZWZpbmVkCisjaWYgX19oYXZlX2xvbmczMgorI2RlZmluZSBJTlQzMl9NSU4gCSAoLTIxNDc0ODM2NDdMLTEpCisjZGVmaW5lIElOVDMyX01BWCAJIDIxNDc0ODM2NDdMCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgNDI5NDk2NzI5NVVMCisjZWxzZQorI2RlZmluZSBJTlQzMl9NSU4gCSAoLTIxNDc0ODM2NDctMSkKKyNkZWZpbmUgSU5UMzJfTUFYIAkgMjE0NzQ4MzY0NworI2RlZmluZSBVSU5UMzJfTUFYICAgICAgIDQyOTQ5NjcyOTVVCisjZW5kaWYKKyNlbmRpZgorCisjaWYgX19pbnRfbGVhc3QzMl90X2RlZmluZWQKKyNpZiBfX2hhdmVfbG9uZzMyCisjZGVmaW5lIElOVF9MRUFTVDMyX01JTiAgKC0yMTQ3NDgzNjQ3TC0xKQorI2RlZmluZSBJTlRfTEVBU1QzMl9NQVggIDIxNDc0ODM2NDdMCisjZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggNDI5NDk2NzI5NVVMCisjZWxzZQorI2RlZmluZSBJTlRfTEVBU1QzMl9NSU4gICgtMjE0NzQ4MzY0Ny0xKQorI2RlZmluZSBJTlRfTEVBU1QzMl9NQVggIDIxNDc0ODM2NDcKKyNkZWZpbmUgVUlOVF9MRUFTVDMyX01BWCA0Mjk0OTY3Mjk1VQorI2VuZGlmCisjZWxzZQorI2Vycm9yIHJlcXVpcmVkIHR5cGUgaW50X2xlYXN0MzJfdCBtaXNzaW5nCisjZW5kaWYKKworI2lmIF9faW50NjRfdF9kZWZpbmVkCisjaWYgX19oYXZlX2xvbmc2NAorI2RlZmluZSBJTlQ2NF9NSU4gCSgtOTIyMzM3MjAzNjg1NDc3NTgwN0wtMUwpCisjZGVmaW5lIElOVDY0X01BWCAJIDkyMjMzNzIwMzY4NTQ3NzU4MDdMCisjZGVmaW5lIFVJTlQ2NF9NQVggCTE4NDQ2NzQ0MDczNzA5NTUxNjE1VQorI2VsaWYgX19oYXZlX2xvbmdsb25nNjQKKyNkZWZpbmUgSU5UNjRfTUlOIAkoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xTEwpCisjZGVmaW5lIElOVDY0X01BWCAJIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAorI2RlZmluZSBVSU5UNjRfTUFYIAkxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTAorI2VuZGlmCisjZW5kaWYKKworI2lmIF9faW50X2xlYXN0NjRfdF9kZWZpbmVkCisjaWYgX19oYXZlX2xvbmc2NAorI2RlZmluZSBJTlRfTEVBU1Q2NF9NSU4gICgtOTIyMzM3MjAzNjg1NDc3NTgwN0wtMUwpCisjZGVmaW5lIElOVF9MRUFTVDY0X01BWCAgOTIyMzM3MjAzNjg1NDc3NTgwN0wKKyNkZWZpbmUgVUlOVF9MRUFTVDY0X01BWCAxODQ0Njc0NDA3MzcwOTU1MTYxNVUKKyNlbGlmIF9faGF2ZV9sb25nbG9uZzY0CisjZGVmaW5lIElOVF9MRUFTVDY0X01JTiAgKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwtMUxMKQorI2RlZmluZSBJTlRfTEVBU1Q2NF9NQVggIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAorI2RlZmluZSBVSU5UX0xFQVNUNjRfTUFYIDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMCisjZW5kaWYKKyNlbmRpZgorCisjaWYgX19pbnRfZmFzdDhfdF9kZWZpbmVkCisjaWYgX19TVERJTlRfRVhQKElOVF9NQVgpID49IDB4N2YKKyNkZWZpbmUgSU5UX0ZBU1Q4X01JTgkoLV9fU1RESU5UX0VYUChJTlRfTUFYKS0xKQorI2RlZmluZSBJTlRfRkFTVDhfTUFYCV9fU1RESU5UX0VYUChJTlRfTUFYKQorI2RlZmluZSBVSU5UX0ZBU1Q4X01BWAkoX19TVERJTlRfRVhQKElOVF9NQVgpKjJVKzFVKQorI2Vsc2UKKyNkZWZpbmUgSU5UX0ZBU1Q4X01JTglJTlRfTEVBU1Q4X01JTgorI2RlZmluZSBJTlRfRkFTVDhfTUFYCUlOVF9MRUFTVDhfTUFYCisjZGVmaW5lIFVJTlRfRkFTVDhfTUFYCVVJTlRfTEVBU1Q4X01BWAorI2VuZGlmCisjZW5kaWYKKworI2lmIF9faW50X2Zhc3QxNl90X2RlZmluZWQKKyNpZiBfX1NURElOVF9FWFAoSU5UX01BWCkgPj0gMHg3ZmZmCisjZGVmaW5lIElOVF9GQVNUMTZfTUlOCSgtX19TVERJTlRfRVhQKElOVF9NQVgpLTEpCisjZGVmaW5lIElOVF9GQVNUMTZfTUFYCV9fU1RESU5UX0VYUChJTlRfTUFYKQorI2RlZmluZSBVSU5UX0ZBU1QxNl9NQVgJKF9fU1RESU5UX0VYUChJTlRfTUFYKSoyVSsxVSkKKyNlbHNlCisjZGVmaW5lIElOVF9GQVNUMTZfTUlOCUlOVF9MRUFTVDE2X01JTgorI2RlZmluZSBJTlRfRkFTVDE2X01BWAlJTlRfTEVBU1QxNl9NQVgKKyNkZWZpbmUgVUlOVF9GQVNUMTZfTUFYCVVJTlRfTEVBU1QxNl9NQVgKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBfX2ludF9mYXN0MzJfdF9kZWZpbmVkCisjaWYgX19TVERJTlRfRVhQKElOVF9NQVgpID49IDB4N2ZmZmZmZmYKKyNkZWZpbmUgSU5UX0ZBU1QzMl9NSU4JKC1fX1NURElOVF9FWFAoSU5UX01BWCktMSkKKyNkZWZpbmUgSU5UX0ZBU1QzMl9NQVgJX19TVERJTlRfRVhQKElOVF9NQVgpCisjZGVmaW5lIFVJTlRfRkFTVDMyX01BWAkoX19TVERJTlRfRVhQKElOVF9NQVgpKjJVKzFVKQorI2Vsc2UKKyNkZWZpbmUgSU5UX0ZBU1QzMl9NSU4JSU5UX0xFQVNUMzJfTUlOCisjZGVmaW5lIElOVF9GQVNUMzJfTUFYCUlOVF9MRUFTVDMyX01BWAorI2RlZmluZSBVSU5UX0ZBU1QzMl9NQVgJVUlOVF9MRUFTVDMyX01BWAorI2VuZGlmCisjZW5kaWYKKworI2lmIF9faW50X2Zhc3Q2NF90X2RlZmluZWQKKyNpZiBfX1NURElOVF9FWFAoSU5UX01BWCkgPiAweDdmZmZmZmZmCisjZGVmaW5lIElOVF9GQVNUNjRfTUlOCSgtX19TVERJTlRfRVhQKElOVF9NQVgpLTEpCisjZGVmaW5lIElOVF9GQVNUNjRfTUFYCV9fU1RESU5UX0VYUChJTlRfTUFYKQorI2RlZmluZSBVSU5UX0ZBU1Q2NF9NQVgJKF9fU1RESU5UX0VYUChJTlRfTUFYKSoyVSsxVSkKKyNlbHNlCisjZGVmaW5lIElOVF9GQVNUNjRfTUlOCUlOVF9MRUFTVDY0X01JTgorI2RlZmluZSBJTlRfRkFTVDY0X01BWAlJTlRfTEVBU1Q2NF9NQVgKKyNkZWZpbmUgVUlOVF9GQVNUNjRfTUFYCVVJTlRfTEVBU1Q2NF9NQVgKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX0lOVE1BWF9NQVhfXworI2RlZmluZSBJTlRNQVhfTUFYIF9fSU5UTUFYX01BWF9fCisjZGVmaW5lIElOVE1BWF9NSU4gKC1JTlRNQVhfTUFYIC0gMSkKKyNlbGlmIGRlZmluZWQoX19JTlRNQVhfVFlQRV9fKQorLyogQWxsIHJlbGV2YW50IEdDQyB2ZXJzaW9ucyBwcmVmZXIgbG9uZyB0byBsb25nIGxvbmcgZm9yIGludG1heF90LiAgKi8KKyNkZWZpbmUgSU5UTUFYX01BWCBJTlQ2NF9NQVgKKyNkZWZpbmUgSU5UTUFYX01JTiBJTlQ2NF9NSU4KKyNlbmRpZgorCisjaWZkZWYgX19VSU5UTUFYX01BWF9fCisjZGVmaW5lIFVJTlRNQVhfTUFYIF9fVUlOVE1BWF9NQVhfXworI2VsaWYgZGVmaW5lZChfX1VJTlRNQVhfVFlQRV9fKQorLyogQWxsIHJlbGV2YW50IEdDQyB2ZXJzaW9ucyBwcmVmZXIgbG9uZyB0byBsb25nIGxvbmcgZm9yIGludG1heF90LiAgKi8KKyNkZWZpbmUgVUlOVE1BWF9NQVggVUlOVDY0X01BWAorI2VuZGlmCisKKy8qIFRoaXMgbXVzdCBtYXRjaCBzaXplX3QgaW4gc3RkZGVmLmgsIGN1cnJlbnRseSBsb25nIHVuc2lnbmVkIGludCAqLworI2lmZGVmIF9fU0laRV9NQVhfXworI2RlZmluZSBTSVpFX01BWCBfX1NJWkVfTUFYX18KKyNlbHNlCisjZGVmaW5lIFNJWkVfTUFYIChfX1NURElOVF9FWFAoTE9OR19NQVgpICogMlVMICsgMSkKKyNlbmRpZgorCisvKiBUaGlzIG11c3QgbWF0Y2ggc2lnX2F0b21pY190IGluIDxzaWduYWwuaD4gKGN1cnJlbnRseSBpbnQpICovCisjZGVmaW5lIFNJR19BVE9NSUNfTUlOICgtX19TVERJTlRfRVhQKElOVF9NQVgpIC0gMSkKKyNkZWZpbmUgU0lHX0FUT01JQ19NQVggX19TVERJTlRfRVhQKElOVF9NQVgpCisKKy8qIFRoaXMgbXVzdCBtYXRjaCBwdHJkaWZmX3QgIGluIDxzdGRkZWYuaD4gKGN1cnJlbnRseSBsb25nIGludCkgKi8KKyNpZmRlZiBfX1BUUkRJRkZfTUFYX18KKyNkZWZpbmUgUFRSRElGRl9NQVggX19QVFJESUZGX01BWF9fCisjZWxzZQorI2RlZmluZSBQVFJESUZGX01BWCBfX1NURElOVF9FWFAoTE9OR19NQVgpCisjZW5kaWYKKyNkZWZpbmUgUFRSRElGRl9NSU4gKC1QVFJESUZGX01BWCAtIDEpCisKKyNpZmRlZiBfX1dDSEFSX01BWF9fCisjZGVmaW5lIFdDSEFSX01BWCBfX1dDSEFSX01BWF9fCisjZW5kaWYKKyNpZmRlZiBfX1dDSEFSX01JTl9fCisjZGVmaW5lIFdDSEFSX01JTiBfX1dDSEFSX01JTl9fCisjZW5kaWYKKworLyogd2ludF90IGlzIHVuc2lnbmVkIGludCBvbiBhbG1vc3QgYWxsIEdDQyB0YXJnZXRzLiAgKi8KKyNpZmRlZiBfX1dJTlRfTUFYX18KKyNkZWZpbmUgV0lOVF9NQVggX19XSU5UX01BWF9fCisjZWxzZQorI2RlZmluZSBXSU5UX01BWCAoX19TVERJTlRfRVhQKElOVF9NQVgpICogMlUgKyAxVSkKKyNlbmRpZgorI2lmZGVmIF9fV0lOVF9NSU5fXworI2RlZmluZSBXSU5UX01JTiBfX1dJTlRfTUlOX18KKyNlbHNlCisjZGVmaW5lIFdJTlRfTUlOIDBVCisjZW5kaWYKKworLyoqIE1hY3JvcyBmb3IgbWluaW11bS13aWR0aCBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb25zICovCisjZGVmaW5lIElOVDhfQyh4KQl4CisjaWYgX19TVERJTlRfRVhQKElOVF9NQVgpID4gMHg3ZgorI2RlZmluZSBVSU5UOF9DKHgpCXgKKyNlbHNlCisjZGVmaW5lIFVJTlQ4X0MoeCkJeCMjVQorI2VuZGlmCisKKyNkZWZpbmUgSU5UMTZfQyh4KQl4CisjaWYgX19TVERJTlRfRVhQKElOVF9NQVgpID4gMHg3ZmZmCisjZGVmaW5lIFVJTlQxNl9DKHgpCXgKKyNlbHNlCisjZGVmaW5lIFVJTlQxNl9DKHgpCXgjI1UKKyNlbmRpZgorCisjaWYgX19oYXZlX2xvbmczMgorI2RlZmluZSBJTlQzMl9DKHgpCXgjI0wKKyNkZWZpbmUgVUlOVDMyX0MoeCkJeCMjVUwKKyNlbHNlCisjZGVmaW5lIElOVDMyX0MoeCkJeAorI2RlZmluZSBVSU5UMzJfQyh4KQl4IyNVCisjZW5kaWYKKworI2lmIF9faW50NjRfdF9kZWZpbmVkCisjaWYgX19oYXZlX2xvbmc2NAorI2RlZmluZSBJTlQ2NF9DKHgpCXgjI0wKKyNkZWZpbmUgVUlOVDY0X0MoeCkJeCMjVUwKKyNlbHNlCisjZGVmaW5lIElOVDY0X0MoeCkJeCMjTEwKKyNkZWZpbmUgVUlOVDY0X0MoeCkJeCMjVUxMCisjZW5kaWYKKyNlbmRpZgorCisvKiogTWFjcm9zIGZvciBncmVhdGVzdC13aWR0aCBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24gKi8KKyNpZiBfX2hhdmVfbG9uZzY0CisjZGVmaW5lIElOVE1BWF9DKHgpCXgjI0wKKyNkZWZpbmUgVUlOVE1BWF9DKHgpCXgjI1VMCisjZWxzZQorI2RlZmluZSBJTlRNQVhfQyh4KQl4IyNMTAorI2RlZmluZSBVSU5UTUFYX0MoeCkJeCMjVUxMCisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1NURElOVF9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3RkaW8uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdGRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MWI1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3RkaW8uaApAQCAtMCwwICsxLDY4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGFyZSBwZXJtaXR0ZWQKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFyZQorICogZHVwbGljYXRlZCBpbiBhbGwgc3VjaCBmb3JtcyBhbmQgdGhhdCBhbnkgZG9jdW1lbnRhdGlvbiwKKyAqIGFkdmVydGlzaW5nIG1hdGVyaWFscywgYW5kIG90aGVyIG1hdGVyaWFscyByZWxhdGVkIHRvIHN1Y2gKKyAqIGRpc3RyaWJ1dGlvbiBhbmQgdXNlIGFja25vd2xlZGdlIHRoYXQgdGhlIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQKKyAqIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5LiAgVGhlIG5hbWUgb2YgdGhlCisgKiBVbml2ZXJzaXR5IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICoJQCgjKXN0ZGlvLmgJNS4zIChCZXJrZWxleSkgMy8xNS84NgorICovCisKKy8qCisgKiBOQjogdG8gZml0IHRoaW5ncyBpbiBzaXggY2hhcmFjdGVyIG1vbm9jYXNlIGV4dGVybmFscywgdGhlCisgKiBzdGRpbyBjb2RlIHVzZXMgdGhlIHByZWZpeCBgX19zJyBmb3Igc3RkaW8gb2JqZWN0cywgdHlwaWNhbGx5CisgKiBmb2xsb3dlZCBieSBhIHRocmVlLWNoYXJhY3RlciBhdHRlbXB0IGF0IGEgbW5lbW9uaWMuCisgKi8KKworI2lmbmRlZiBfU1RESU9fSF8KKyNkZWZpbmUJX1NURElPX0hfCisKKyNpbmNsdWRlICJfYW5zaS5oIgorCisjZGVmaW5lCV9GU1RESU8JCQkvKiBgYGZ1bmN0aW9uIHN0ZGlvJycgKi8KKworI2RlZmluZSBfX25lZWRfc2l6ZV90CisjZGVmaW5lIF9fbmVlZF9OVUxMCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNkZWZpbmUgX19uZWVkX19fdmFfbGlzdAorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKgorICogPHN5cy9yZWVudC5oPiBkZWZpbmVzIF9fRklMRSwgX2Zwb3NfdC4KKyAqIFRoZXkgbXVzdCBiZSBkZWZpbmVkIHRoZXJlIGJlY2F1c2Ugc3RydWN0IF9yZWVudCBuZWVkcyB0aGVtIChhbmQgd2UgZG9uJ3QKKyAqIHdhbnQgcmVlbnQuaCB0byBpbmNsdWRlIHRoaXMgZmlsZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3JlZW50Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19CRUdJTl9TVERfQworCit0eXBlZGVmIF9fRklMRSBGSUxFOworCisjaWZkZWYgX19DWUdXSU5fXwordHlwZWRlZiBfZnBvczY0X3QgZnBvc190OworI2Vsc2UKK3R5cGVkZWYgX2Zwb3NfdCBmcG9zX3Q7CisjaWZkZWYgX19MQVJHRTY0X0ZJTEVTCit0eXBlZGVmIF9mcG9zNjRfdCBmcG9zNjRfdDsKKyNlbmRpZgorI2VuZGlmIC8qICFfX0NZR1dJTl9fICovCisKKyNpbmNsdWRlIDxzeXMvc3RkaW8uaD4KKworI2RlZmluZQlfX1NMQkYJMHgwMDAxCQkvKiBsaW5lIGJ1ZmZlcmVkICovCisjZGVmaW5lCV9fU05CRgkweDAwMDIJCS8qIHVuYnVmZmVyZWQgKi8KKyNkZWZpbmUJX19TUkQJMHgwMDA0CQkvKiBPSyB0byByZWFkICovCisjZGVmaW5lCV9fU1dSCTB4MDAwOAkJLyogT0sgdG8gd3JpdGUgKi8KKwkvKiBSRCBhbmQgV1IgYXJlIG5ldmVyIHNpbXVsdGFuZW91c2x5IGFzc2VydGVkICovCisjZGVmaW5lCV9fU1JXCTB4MDAxMAkJLyogb3BlbiBmb3IgcmVhZGluZyAmIHdyaXRpbmcgKi8KKyNkZWZpbmUJX19TRU9GCTB4MDAyMAkJLyogZm91bmQgRU9GICovCisjZGVmaW5lCV9fU0VSUgkweDAwNDAJCS8qIGZvdW5kIGVycm9yICovCisjZGVmaW5lCV9fU01CRgkweDAwODAJCS8qIF9idWYgaXMgZnJvbSBtYWxsb2MgKi8KKyNkZWZpbmUJX19TQVBQCTB4MDEwMAkJLyogZmRvcGVuKCllZCBpbiBhcHBlbmQgbW9kZSAtIHNvIG11c3QgIHdyaXRlIHRvIGVuZCAqLworI2RlZmluZQlfX1NTVFIJMHgwMjAwCQkvKiB0aGlzIGlzIGFuIHNwcmludGYvc25wcmludGYgc3RyaW5nICovCisjZGVmaW5lCV9fU09QVAkweDA0MDAJCS8qIGRvIGZzZWVrKCkgb3B0aW1pc2F0aW9uICovCisjZGVmaW5lCV9fU05QVAkweDA4MDAJCS8qIGRvIG5vdCBkbyBmc2VlaygpIG9wdGltaXNhdGlvbiAqLworI2RlZmluZQlfX1NPRkYJMHgxMDAwCQkvKiBzZXQgaWZmIF9vZmZzZXQgaXMgaW4gZmFjdCBjb3JyZWN0ICovCisjZGVmaW5lCV9fU09SRAkweDIwMDAJCS8qIHRydWUgPT4gc3RyZWFtIG9yaWVudGF0aW9uIChieXRlL3dpZGUpIGRlY2lkZWQgKi8KKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBkZWZpbmUgX19TQ0xFICAweDQwMDAgICAgICAgIC8qIGNvbnZlcnQgbGluZSBlbmRpbmdzIENSL0xGIDwtPiBOTCAqLworI2VuZGlmCisjZGVmaW5lCV9fU0w2NAkweDgwMDAJCS8qIGlzIDY0LWJpdCBvZmZzZXQgbGFyZ2UgZmlsZSAqLworCisvKiBfZmxhZ3MyIGZsYWdzICovCisjZGVmaW5lCV9fU1dJRAkweDIwMDAJCS8qIHRydWUgPT4gc3RyZWFtIG9yaWVudGF0aW9uIHdpZGUsIGZhbHNlID0+IGJ5dGUsIG9ubHkgdmFsaWQgaWYgX19TT1JEIGluIF9mbGFncyBpcyB0cnVlICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHRocmVlIGRlZmluaXRpb25zIGFyZSBmb3IgQU5TSSBDLCB3aGljaCB0b29rIHRoZW0KKyAqIGZyb20gU3lzdGVtIFYsIHdoaWNoIHN0dXBpZGx5IHRvb2sgaW50ZXJuYWwgaW50ZXJmYWNlIG1hY3JvcyBhbmQKKyAqIG1hZGUgdGhlbSBvZmZpY2lhbCBhcmd1bWVudHMgdG8gc2V0dmJ1ZigpLCB3aXRob3V0IHJlbmFtaW5nIHRoZW0uCisgKiBIZW5jZSwgdGhlc2UgdWdseSBfSU94eHggbmFtZXMgYXJlICpzdXBwb3NlZCogdG8gYXBwZWFyIGluIHVzZXIgY29kZS4KKyAqCisgKiBBbHRob3VnaCB0aGVzZSBoYXBwZW4gdG8gbWF0Y2ggdGhlaXIgY291bnRlcnBhcnRzIGFib3ZlLCB0aGUKKyAqIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHJlbHkgb24gdGhhdCAoc28gdGhlc2UgY291bGQgYmUgcmVudW1iZXJlZCkuCisgKi8KKyNkZWZpbmUJX0lPRkJGCTAJCS8qIHNldHZidWYgc2hvdWxkIHNldCBmdWxseSBidWZmZXJlZCAqLworI2RlZmluZQlfSU9MQkYJMQkJLyogc2V0dmJ1ZiBzaG91bGQgc2V0IGxpbmUgYnVmZmVyZWQgKi8KKyNkZWZpbmUJX0lPTkJGCTIJCS8qIHNldHZidWYgc2hvdWxkIHNldCB1bmJ1ZmZlcmVkICovCisKKyNkZWZpbmUJRU9GCSgtMSkKKworI2lmZGVmIF9fQlVGU0laX18KKyNkZWZpbmUJQlVGU0laCQlfX0JVRlNJWl9fCisjZWxzZQorI2RlZmluZQlCVUZTSVoJCTEwMjQKKyNlbmRpZgorCisjaWZkZWYgX19GT1BFTl9NQVhfXworI2RlZmluZSBGT1BFTl9NQVgJX19GT1BFTl9NQVhfXworI2Vsc2UKKyNkZWZpbmUJRk9QRU5fTUFYCTIwCisjZW5kaWYKKworI2lmZGVmIF9fRklMRU5BTUVfTUFYX18KKyNkZWZpbmUgRklMRU5BTUVfTUFYICAgIF9fRklMRU5BTUVfTUFYX18KKyNlbHNlCisjZGVmaW5lCUZJTEVOQU1FX01BWAkxMDI0CisjZW5kaWYKKworI2lmZGVmIF9fTF90bXBuYW1fXworI2RlZmluZSBMX3RtcG5hbQlfX0xfdG1wbmFtX18KKyNlbHNlCisjZGVmaW5lCUxfdG1wbmFtCUZJTEVOQU1FX01BWAorI2VuZGlmCisKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCisjZGVmaW5lIFBfdG1wZGlyICAgICAgICAiL3RtcCIKKyNlbmRpZgorCisjaWZuZGVmIFNFRUtfU0VUCisjZGVmaW5lCVNFRUtfU0VUCTAJLyogc2V0IGZpbGUgb2Zmc2V0IHRvIG9mZnNldCAqLworI2VuZGlmCisjaWZuZGVmIFNFRUtfQ1VSCisjZGVmaW5lCVNFRUtfQ1VSCTEJLyogc2V0IGZpbGUgb2Zmc2V0IHRvIGN1cnJlbnQgcGx1cyBvZmZzZXQgKi8KKyNlbmRpZgorI2lmbmRlZiBTRUVLX0VORAorI2RlZmluZQlTRUVLX0VORAkyCS8qIHNldCBmaWxlIG9mZnNldCB0byBFT0YgcGx1cyBvZmZzZXQgKi8KKyNlbmRpZgorCisjZGVmaW5lCVRNUF9NQVgJCTI2CisKKyNkZWZpbmUJc3RkaW4JKF9SRUVOVC0+X3N0ZGluKQorI2RlZmluZQlzdGRvdXQJKF9SRUVOVC0+X3N0ZG91dCkKKyNkZWZpbmUJc3RkZXJyCShfUkVFTlQtPl9zdGRlcnIpCisKKyNkZWZpbmUgX3N0ZGluX3IoeCkJKCh4KS0+X3N0ZGluKQorI2RlZmluZSBfc3Rkb3V0X3IoeCkJKCh4KS0+X3N0ZG91dCkKKyNkZWZpbmUgX3N0ZGVycl9yKHgpCSgoeCktPl9zdGRlcnIpCisKKy8qCisgKiBGdW5jdGlvbnMgZGVmaW5lZCBpbiBBTlNJIEMgc3RhbmRhcmQuCisgKi8KKworI2lmbmRlZiBfX1ZBTElTVAorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fVkFMSVNUIF9fZ251Y192YV9saXN0CisjZWxzZQorI2RlZmluZSBfX1ZBTElTVCBjaGFyKgorI2VuZGlmCisjZW5kaWYKKworRklMRSAqCV9FWEZVTih0bXBmaWxlLCAodm9pZCkpOworY2hhciAqCV9FWEZVTih0bXBuYW0sIChjaGFyICopKTsKK2ludAlfRVhGVU4oZmNsb3NlLCAoRklMRSAqKSk7CitpbnQJX0VYRlVOKGZmbHVzaCwgKEZJTEUgKikpOworRklMRSAqCV9FWEZVTihmcmVvcGVuLCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKikpOwordm9pZAlfRVhGVU4oc2V0YnVmLCAoRklMRSAqLCBjaGFyICopKTsKK2ludAlfRVhGVU4oc2V0dmJ1ZiwgKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCkpOworaW50CV9FWEZVTihmcHJpbnRmLCAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpKTsKK2ludAlfRVhGVU4oZnNjYW5mLCAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDMpKSkpOworaW50CV9FWEZVTihwcmludGYsIChjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAyKSkpKTsKK2ludAlfRVhGVU4oc2NhbmYsIChjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDIpKSkpOworaW50CV9FWEZVTihzc2NhbmYsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMykpKSk7CitpbnQJX0VYRlVOKHZmcHJpbnRmLCAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSkpOworaW50CV9FWEZVTih2cHJpbnRmLCAoY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAwKSkpKTsKK2ludAlfRVhGVU4odnNwcmludGYsIChjaGFyICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKSk7CitpbnQJX0VYRlVOKGZnZXRjLCAoRklMRSAqKSk7CitjaGFyICogIF9FWEZVTihmZ2V0cywgKGNoYXIgKiwgaW50LCBGSUxFICopKTsKK2ludAlfRVhGVU4oZnB1dGMsIChpbnQsIEZJTEUgKikpOworaW50CV9FWEZVTihmcHV0cywgKGNvbnN0IGNoYXIgKiwgRklMRSAqKSk7CitpbnQJX0VYRlVOKGdldGMsIChGSUxFICopKTsKK2ludAlfRVhGVU4oZ2V0Y2hhciwgKHZvaWQpKTsKK2NoYXIgKiAgX0VYRlVOKGdldHMsIChjaGFyICopKTsKK2ludAlfRVhGVU4ocHV0YywgKGludCwgRklMRSAqKSk7CitpbnQJX0VYRlVOKHB1dGNoYXIsIChpbnQpKTsKK2ludAlfRVhGVU4ocHV0cywgKGNvbnN0IGNoYXIgKikpOworaW50CV9FWEZVTih1bmdldGMsIChpbnQsIEZJTEUgKikpOworc2l6ZV90CV9FWEZVTihmcmVhZCwgKF9QVFIsIHNpemVfdCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopKTsKK3NpemVfdAlfRVhGVU4oZndyaXRlLCAoY29uc3QgX1BUUiAsIHNpemVfdCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopKTsKKyNpZmRlZiBfQ09NUElMSU5HX05FV0xJQgoraW50CV9FWEZVTihmZ2V0cG9zLCAoRklMRSAqLCBfZnBvc190ICopKTsKKyNlbHNlCitpbnQJX0VYRlVOKGZnZXRwb3MsIChGSUxFICosIGZwb3NfdCAqKSk7CisjZW5kaWYKK2ludAlfRVhGVU4oZnNlZWssIChGSUxFICosIGxvbmcsIGludCkpOworI2lmZGVmIF9DT01QSUxJTkdfTkVXTElCCitpbnQJX0VYRlVOKGZzZXRwb3MsIChGSUxFICosIGNvbnN0IF9mcG9zX3QgKikpOworI2Vsc2UKK2ludAlfRVhGVU4oZnNldHBvcywgKEZJTEUgKiwgY29uc3QgZnBvc190ICopKTsKKyNlbmRpZgorbG9uZwlfRVhGVU4oZnRlbGwsICggRklMRSAqKSk7Cit2b2lkCV9FWEZVTihyZXdpbmQsIChGSUxFICopKTsKK3ZvaWQJX0VYRlVOKGNsZWFyZXJyLCAoRklMRSAqKSk7CitpbnQJX0VYRlVOKGZlb2YsIChGSUxFICopKTsKK2ludAlfRVhGVU4oZmVycm9yLCAoRklMRSAqKSk7Cit2b2lkICAgIF9FWEZVTihwZXJyb3IsIChjb25zdCBjaGFyICopKTsKKyNpZm5kZWYgX1JFRU5UX09OTFkKK0ZJTEUgKglfRVhGVU4oZm9wZW4sIChjb25zdCBjaGFyICpfbmFtZSwgY29uc3QgY2hhciAqX3R5cGUpKTsKK2ludAlfRVhGVU4oc3ByaW50ZiwgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKSk7CitpbnQJX0VYRlVOKHJlbW92ZSwgKGNvbnN0IGNoYXIgKikpOworaW50CV9FWEZVTihyZW5hbWUsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworI2lmZGVmIF9DT01QSUxJTkdfTkVXTElCCitpbnQJX0VYRlVOKF9yZW5hbWUsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19VU0VfWE9QRU4ySykKKyNpZmRlZiBfQ09NUElMSU5HX05FV0xJQgoraW50CV9FWEZVTihmc2Vla28sIChGSUxFICosIF9vZmZfdCwgaW50KSk7Citfb2ZmX3QJX0VYRlVOKGZ0ZWxsbywgKCBGSUxFICopKTsKKyNlbHNlCitpbnQJX0VYRlVOKGZzZWVrbywgKEZJTEUgKiwgb2ZmX3QsIGludCkpOworb2ZmX3QJX0VYRlVOKGZ0ZWxsbywgKCBGSUxFICopKTsKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorI2lmbmRlZiBfUkVFTlRfT05MWQoraW50CV9FWEZVTihhc2lwcmludGYsIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpKTsKK2NoYXIgKglfRVhGVU4oYXNuaXByaW50ZiwgKGNoYXIgKiwgc2l6ZV90ICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSkpOworY2hhciAqCV9FWEZVTihhc25wcmludGYsIChjaGFyICosIHNpemVfdCAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpKTsKK2ludAlfRVhGVU4oYXNwcmludGYsIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpKTsKKyNpZm5kZWYgZGlwcmludGYKK2ludAlfRVhGVU4oZGlwcmludGYsIChpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSkpOworI2VuZGlmCitpbnQJX0VYRlVOKGZjbG9zZWFsbCwgKF9WT0lEKSk7CitpbnQJX0VYRlVOKGZpcHJpbnRmLCAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpKTsKK2ludAlfRVhGVU4oZmlzY2FuZiwgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAzKSkpKTsKK2ludAlfRVhGVU4oaXByaW50ZiwgKGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDEsIDIpKSkpOworaW50CV9FWEZVTihpc2NhbmYsIChjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDIpKSkpOworaW50CV9FWEZVTihzaXByaW50ZiwgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKSk7CitpbnQJX0VYRlVOKHNpc2NhbmYsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMykpKSk7CitpbnQJX0VYRlVOKHNucHJpbnRmLCAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSkpOworaW50CV9FWEZVTihzbmlwcmludGYsIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKSk7CitjaGFyICoJX0VYRlVOKHRlbXBuYW0sIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworaW50CV9FWEZVTih2YXNpcHJpbnRmLCAoY2hhciAqKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpKTsKK2NoYXIgKglfRVhGVU4odmFzbmlwcmludGYsIChjaGFyICosIHNpemVfdCAqLCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSkpOworY2hhciAqCV9FWEZVTih2YXNucHJpbnRmLCAoY2hhciAqLCBzaXplX3QgKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpKTsKK2ludAlfRVhGVU4odmFzcHJpbnRmLCAoY2hhciAqKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpKTsKK2ludAlfRVhGVU4odmRpcHJpbnRmLCAoaW50LCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSkpOworaW50CV9FWEZVTih2ZmlwcmludGYsIChGSUxFICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKSk7CitpbnQJX0VYRlVOKHZmaXNjYW5mLCAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKSk7CitpbnQJX0VYRlVOKHZmc2NhbmYsIChGSUxFICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpKTsKK2ludAlfRVhGVU4odmlwcmludGYsIChjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDEsIDApKSkpOworaW50CV9FWEZVTih2aXNjYW5mLCAoY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSkpOworaW50CV9FWEZVTih2c2NhbmYsIChjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKSk7CitpbnQJX0VYRlVOKHZzaXByaW50ZiwgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpKTsKK2ludAlfRVhGVU4odnNpc2NhbmYsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpKTsKK2ludAlfRVhGVU4odnNuaXByaW50ZiwgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSkpOworaW50CV9FWEZVTih2c25wcmludGYsIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpKTsKK2ludAlfRVhGVU4odnNzY2FuZiwgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSkpOworI2VuZGlmIC8qICFfUkVFTlRfT05MWSAqLworI2VuZGlmIC8qICFfX1NUUklDVF9BTlNJX18gKi8KKworLyoKKyAqIFJvdXRpbmVzIGluIFBPU0lYIDEwMDMuMToyMDAxLgorICovCisKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCisjaWZuZGVmIF9SRUVOVF9PTkxZCitGSUxFICoJX0VYRlVOKGZkb3BlbiwgKGludCwgY29uc3QgY2hhciAqKSk7CisjZW5kaWYKK2ludAlfRVhGVU4oZmlsZW5vLCAoRklMRSAqKSk7CitpbnQJX0VYRlVOKGdldHcsIChGSUxFICopKTsKK2ludAlfRVhGVU4ocGNsb3NlLCAoRklMRSAqKSk7CitGSUxFICogIF9FWEZVTihwb3BlbiwgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitpbnQJX0VYRlVOKHB1dHcsIChpbnQsIEZJTEUgKikpOwordm9pZCAgICBfRVhGVU4oc2V0YnVmZmVyLCAoRklMRSAqLCBjaGFyICosIGludCkpOworaW50CV9FWEZVTihzZXRsaW5lYnVmLCAoRklMRSAqKSk7CitpbnQJX0VYRlVOKGdldGNfdW5sb2NrZWQsIChGSUxFICopKTsKK2ludAlfRVhGVU4oZ2V0Y2hhcl91bmxvY2tlZCwgKHZvaWQpKTsKK3ZvaWQJX0VYRlVOKGZsb2NrZmlsZSwgKEZJTEUgKikpOworaW50CV9FWEZVTihmdHJ5bG9ja2ZpbGUsIChGSUxFICopKTsKK3ZvaWQJX0VYRlVOKGZ1bmxvY2tmaWxlLCAoRklMRSAqKSk7CitpbnQJX0VYRlVOKHB1dGNfdW5sb2NrZWQsIChpbnQsIEZJTEUgKikpOworaW50CV9FWEZVTihwdXRjaGFyX3VubG9ja2VkLCAoaW50KSk7CisjZW5kaWYgLyogISBfX1NUUklDVF9BTlNJX18gKi8KKworLyoKKyAqIFJvdXRpbmVzIGluIFBPU0lYIDEwMDMuMToyMDB4LgorICovCisKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCisjIGlmbmRlZiBfUkVFTlRfT05MWQorIyAgaWZuZGVmIGRwcmludGYKK2ludAlfRVhGVU4oZHByaW50ZiwgKGludCwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKSk7CisjICBlbmRpZgorRklMRSAqCV9FWEZVTihmbWVtb3BlbiwgKHZvaWQgKiwgc2l6ZV90LCBjb25zdCBjaGFyICopKTsKKy8qIGdldGRlbGltIC0gc2VlIF9fZ2V0ZGVsaW0gZm9yIG5vdyAqLworLyogZ2V0bGluZSAtIHNlZSBfX2dldGxpbmUgZm9yIG5vdyAqLworRklMRSAqCV9FWEZVTihvcGVuX21lbXN0cmVhbSwgKGNoYXIgKiosIHNpemVfdCAqKSk7CisjaWYgZGVmaW5lZCAoX19DWUdXSU5fXykKK2ludAlfRVhGVU4ocmVuYW1lYXQsIChpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopKTsKKyNlbmRpZgoraW50CV9FWEZVTih2ZHByaW50ZiwgKGludCwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpKTsKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogUmVjdXJzaXZlIHZlcnNpb25zIG9mIHRoZSBhYm92ZS4KKyAqLworCitpbnQJX0VYRlVOKF9hc2lwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKSk7CitjaGFyICoJX0VYRlVOKF9hc25pcHJpbnRmX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgc2l6ZV90ICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDQsIDUpKSkpOworY2hhciAqCV9FWEZVTihfYXNucHJpbnRmX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgc2l6ZV90ICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDQsIDUpKSkpOworaW50CV9FWEZVTihfYXNwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKSk7CitpbnQJX0VYRlVOKF9kaXByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSkpOworaW50CV9FWEZVTihfZHByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSkpOworaW50CV9FWEZVTihfZmNsb3NlX3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKikpOworaW50CV9FWEZVTihfZmNsb3NlYWxsX3IsIChzdHJ1Y3QgX3JlZW50ICopKTsKK0ZJTEUgKglfRVhGVU4oX2Zkb3Blbl9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworaW50CV9FWEZVTihfZmZsdXNoX3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKikpOworaW50CV9FWEZVTihfZmdldGNfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqKSk7CitjaGFyICogIF9FWEZVTihfZmdldHNfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBpbnQsIEZJTEUgKikpOworI2lmZGVmIF9DT01QSUxJTkdfTkVXTElCCitpbnQJX0VYRlVOKF9mZ2V0cG9zX3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgX2Zwb3NfdCAqKSk7CitpbnQJX0VYRlVOKF9mc2V0cG9zX3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgY29uc3QgX2Zwb3NfdCAqKSk7CisjZWxzZQoraW50CV9FWEZVTihfZmdldHBvc19yLCAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGZwb3NfdCAqKSk7CitpbnQJX0VYRlVOKF9mc2V0cG9zX3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgY29uc3QgZnBvc190ICopKTsKKyNlbmRpZgoraW50CV9FWEZVTihfZmlwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpKTsKK2ludAlfRVhGVU4oX2Zpc2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDMsIDQpKSkpOworRklMRSAqCV9FWEZVTihfZm1lbW9wZW5fciwgKHN0cnVjdCBfcmVlbnQgKiwgdm9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKikpOworRklMRSAqCV9FWEZVTihfZm9wZW5fciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK0ZJTEUgKglfRVhGVU4oX2ZyZW9wZW5fciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKikpOworaW50CV9FWEZVTihfZnByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSkpOworaW50CV9FWEZVTihfZnB1cmdlX3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKikpOworaW50CV9FWEZVTihfZnB1dGNfciwgKHN0cnVjdCBfcmVlbnQgKiwgaW50LCBGSUxFICopKTsKK2ludAlfRVhGVU4oX2ZwdXRzX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKSk7CitzaXplX3QJX0VYRlVOKF9mcmVhZF9yLCAoc3RydWN0IF9yZWVudCAqLCBfUFRSLCBzaXplX3QgX3NpemUsIHNpemVfdCBfbiwgRklMRSAqKSk7CitpbnQJX0VYRlVOKF9mc2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDMsIDQpKSkpOworaW50CV9FWEZVTihfZnNlZWtfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBsb25nLCBpbnQpKTsKK2ludAlfRVhGVU4oX2ZzZWVrb19yLChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgX29mZl90LCBpbnQpKTsKK2xvbmcJX0VYRlVOKF9mdGVsbF9yLCAoc3RydWN0IF9yZWVudCAqLCBGSUxFICopKTsKK19vZmZfdAlfRVhGVU4oX2Z0ZWxsb19yLChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKikpOwordm9pZAlfRVhGVU4oX3Jld2luZF9yLCAoc3RydWN0IF9yZWVudCAqLCBGSUxFICopKTsKK3NpemVfdAlfRVhGVU4oX2Z3cml0ZV9yLCAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBfUFRSICwgc2l6ZV90IF9zaXplLCBzaXplX3QgX24sIEZJTEUgKikpOworaW50CV9FWEZVTihfZ2V0Y19yLCAoc3RydWN0IF9yZWVudCAqLCBGSUxFICopKTsKK2ludAlfRVhGVU4oX2dldGNfdW5sb2NrZWRfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqKSk7CitpbnQJX0VYRlVOKF9nZXRjaGFyX3IsIChzdHJ1Y3QgX3JlZW50ICopKTsKK2ludAlfRVhGVU4oX2dldGNoYXJfdW5sb2NrZWRfciwgKHN0cnVjdCBfcmVlbnQgKikpOworY2hhciAqCV9FWEZVTihfZ2V0c19yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopKTsKK2ludAlfRVhGVU4oX2lwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKSk7CitpbnQJX0VYRlVOKF9pc2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAzKSkpKTsKK0ZJTEUgKglfRVhGVU4oX29wZW5fbWVtc3RyZWFtX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiosIHNpemVfdCAqKSk7Cit2b2lkCV9FWEZVTihfcGVycm9yX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKikpOworaW50CV9FWEZVTihfcHJpbnRmX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSkpOworaW50CV9FWEZVTihfcHV0Y19yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIEZJTEUgKikpOworaW50CV9FWEZVTihfcHV0Y191bmxvY2tlZF9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIEZJTEUgKikpOworaW50CV9FWEZVTihfcHV0Y2hhcl91bmxvY2tlZF9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQpKTsKK2ludAlfRVhGVU4oX3B1dGNoYXJfciwgKHN0cnVjdCBfcmVlbnQgKiwgaW50KSk7CitpbnQJX0VYRlVOKF9wdXRzX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKikpOworaW50CV9FWEZVTihfcmVtb3ZlX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKikpOworaW50CV9FWEZVTihfcmVuYW1lX3IsIChzdHJ1Y3QgX3JlZW50ICosCisJCQkgICBjb25zdCBjaGFyICpfb2xkLCBjb25zdCBjaGFyICpfbmV3KSk7CitpbnQJX0VYRlVOKF9zY2FuZl9yLCAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDMpKSkpOworaW50CV9FWEZVTihfc2lwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpKTsKK2ludAlfRVhGVU4oX3Npc2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDMsIDQpKSkpOworaW50CV9FWEZVTihfc25pcHJpbnRmX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpKTsKK2ludAlfRVhGVU4oX3NucHJpbnRmX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpKTsKK2ludAlfRVhGVU4oX3NwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpKTsKK2ludAlfRVhGVU4oX3NzY2FuZl9yLCAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMywgNCkpKSk7CitjaGFyICoJX0VYRlVOKF90ZW1wbmFtX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitGSUxFICoJX0VYRlVOKF90bXBmaWxlX3IsIChzdHJ1Y3QgX3JlZW50ICopKTsKK2NoYXIgKglfRVhGVU4oX3RtcG5hbV9yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopKTsKK2ludAlfRVhGVU4oX3VuZ2V0Y19yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIEZJTEUgKikpOworaW50CV9FWEZVTihfdmFzaXByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICoqLCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSkpOworY2hhciAqCV9FWEZVTihfdmFzbmlwcmludGZfciwgKHN0cnVjdCBfcmVlbnQqLCBjaGFyICosIHNpemVfdCAqLCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDQsIDApKSkpOworY2hhciAqCV9FWEZVTihfdmFzbnByaW50Zl9yLCAoc3RydWN0IF9yZWVudCosIGNoYXIgKiwgc2l6ZV90ICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgNCwgMCkpKSk7CitpbnQJX0VYRlVOKF92YXNwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpKTsKK2ludAlfRVhGVU4oX3ZkaXByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKSk7CitpbnQJX0VYRlVOKF92ZHByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKSk7CitpbnQJX0VYRlVOKF92ZmlwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSkpOworaW50CV9FWEZVTihfdmZpc2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMywgMCkpKSk7CitpbnQJX0VYRlVOKF92ZnByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKSk7CitpbnQJX0VYRlVOKF92ZnNjYW5mX3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDMsIDApKSkpOworaW50CV9FWEZVTihfdmlwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpKTsKK2ludAlfRVhGVU4oX3Zpc2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSkpOworaW50CV9FWEZVTihfdnByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIF9fVkFMSVNUKQorICAgICAgICAgICAgICAgX0FUVFJJQlVURSAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSkpOworaW50CV9FWEZVTihfdnNjYW5mX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpKTsKK2ludAlfRVhGVU4oX3ZzaXByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKSk7CitpbnQJX0VYRlVOKF92c2lzY2FuZl9yLCAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAzLCAwKSkpKTsKK2ludAlfRVhGVU4oX3ZzbmlwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgNCwgMCkpKSk7CitpbnQJX0VYRlVOKF92c25wcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgNCwgMCkpKSk7CitpbnQJX0VYRlVOKF92c3ByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19WQUxJU1QpCisgICAgICAgICAgICAgICBfQVRUUklCVVRFICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKSk7CitpbnQJX0VYRlVOKF92c3NjYW5mX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX1ZBTElTVCkKKyAgICAgICAgICAgICAgIF9BVFRSSUJVVEUgKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDMsIDApKSkpOworCisvKiBPdGhlciBleHRlbnNpb25zLiAgKi8KKworaW50CV9FWEZVTihmcHVyZ2UsIChGSUxFICopKTsKK3NzaXplX3QgX0VYRlVOKF9fZ2V0ZGVsaW0sIChjaGFyICoqLCBzaXplX3QgKiwgaW50LCBGSUxFICopKTsKK3NzaXplX3QgX0VYRlVOKF9fZ2V0bGluZSwgKGNoYXIgKiosIHNpemVfdCAqLCBGSUxFICopKTsKKworI2lmZGVmIF9fTEFSR0U2NF9GSUxFUworI2lmICFkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX0NPTVBJTElOR19ORVdMSUIpCitGSUxFICoJX0VYRlVOKGZkb3BlbjY0LCAoaW50LCBjb25zdCBjaGFyICopKTsKK0ZJTEUgKiAgX0VYRlVOKGZvcGVuNjQsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworRklMRSAqICBfRVhGVU4oZnJlb3BlbjY0LCAoX0NPTlNUIGNoYXIgKiwgX0NPTlNUIGNoYXIgKiwgRklMRSAqKSk7Citfb2ZmNjRfdCBfRVhGVU4oZnRlbGxvNjQsIChGSUxFICopKTsKK19vZmY2NF90IF9FWEZVTihmc2Vla282NCwgKEZJTEUgKiwgX29mZjY0X3QsIGludCkpOworaW50ICAgICBfRVhGVU4oZmdldHBvczY0LCAoRklMRSAqLCBfZnBvczY0X3QgKikpOworaW50ICAgICBfRVhGVU4oZnNldHBvczY0LCAoRklMRSAqLCBjb25zdCBfZnBvczY0X3QgKikpOworRklMRSAqICBfRVhGVU4odG1wZmlsZTY0LCAodm9pZCkpOworCitGSUxFICoJX0VYRlVOKF9mZG9wZW42NF9yLCAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworRklMRSAqICBfRVhGVU4oX2ZvcGVuNjRfciwgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworRklMRSAqICBfRVhGVU4oX2ZyZW9wZW42NF9yLCAoc3RydWN0IF9yZWVudCAqLCBfQ09OU1QgY2hhciAqLCBfQ09OU1QgY2hhciAqLCBGSUxFICopKTsKK19vZmY2NF90IF9FWEZVTihfZnRlbGxvNjRfciwgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqKSk7Citfb2ZmNjRfdCBfRVhGVU4oX2ZzZWVrbzY0X3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgX29mZjY0X3QsIGludCkpOworaW50ICAgICBfRVhGVU4oX2ZnZXRwb3M2NF9yLCAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIF9mcG9zNjRfdCAqKSk7CitpbnQgICAgIF9FWEZVTihfZnNldHBvczY0X3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgY29uc3QgX2Zwb3M2NF90ICopKTsKK0ZJTEUgKiAgX0VYRlVOKF90bXBmaWxlNjRfciwgKHN0cnVjdCBfcmVlbnQgKikpOworI2VuZGlmIC8qICFfX0NZR1dJTl9fICovCisjZW5kaWYgLyogX19MQVJHRTY0X0ZJTEVTICovCisKKy8qCisgKiBSb3V0aW5lcyBpbnRlcm5hbCB0byB0aGUgaW1wbGVtZW50YXRpb24uCisgKi8KKworaW50CV9FWEZVTihfX3NyZ2V0X3IsIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKikpOworaW50CV9FWEZVTihfX3N3YnVmX3IsIChzdHJ1Y3QgX3JlZW50ICosIGludCwgRklMRSAqKSk7CisKKy8qCisgKiBTdGRpbyBmdW5jdGlvbi1hY2Nlc3MgaW50ZXJmYWNlLgorICovCisKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCisjIGlmZGVmIF9fTEFSR0U2NF9GSUxFUworRklMRQkqX0VYRlVOKGZ1bm9wZW4sKGNvbnN0IF9QVFIgX19jb29raWUsCisJCWludCAoKl9fcmVhZGZuKShfUFRSIF9fYywgY2hhciAqX19idWYsCisJCQkJX1JFQURfV1JJVEVfQlVGU0laRV9UWVBFIF9fbiksCisJCWludCAoKl9fd3JpdGVmbikoX1BUUiBfX2MsIGNvbnN0IGNoYXIgKl9fYnVmLAorCQkJCSBfUkVBRF9XUklURV9CVUZTSVpFX1RZUEUgX19uKSwKKwkJX2Zwb3M2NF90ICgqX19zZWVrZm4pKF9QVFIgX19jLCBfZnBvczY0X3QgX19vZmYsIGludCBfX3doZW5jZSksCisJCWludCAoKl9fY2xvc2VmbikoX1BUUiBfX2MpKSk7CitGSUxFCSpfRVhGVU4oX2Z1bm9wZW5fciwoc3RydWN0IF9yZWVudCAqLCBjb25zdCBfUFRSIF9fY29va2llLAorCQlpbnQgKCpfX3JlYWRmbikoX1BUUiBfX2MsIGNoYXIgKl9fYnVmLAorCQkJCV9SRUFEX1dSSVRFX0JVRlNJWkVfVFlQRSBfX24pLAorCQlpbnQgKCpfX3dyaXRlZm4pKF9QVFIgX19jLCBjb25zdCBjaGFyICpfX2J1ZiwKKwkJCQkgX1JFQURfV1JJVEVfQlVGU0laRV9UWVBFIF9fbiksCisJCV9mcG9zNjRfdCAoKl9fc2Vla2ZuKShfUFRSIF9fYywgX2Zwb3M2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpLAorCQlpbnQgKCpfX2Nsb3NlZm4pKF9QVFIgX19jKSkpOworIyBlbHNlCitGSUxFCSpfRVhGVU4oZnVub3BlbiwoY29uc3QgX1BUUiBfX2Nvb2tpZSwKKwkJaW50ICgqX19yZWFkZm4pKF9QVFIgX19jb29raWUsIGNoYXIgKl9fYnVmLAorCQkJCV9SRUFEX1dSSVRFX0JVRlNJWkVfVFlQRSBfX24pLAorCQlpbnQgKCpfX3dyaXRlZm4pKF9QVFIgX19jb29raWUsIGNvbnN0IGNoYXIgKl9fYnVmLAorCQkJCSBfUkVBRF9XUklURV9CVUZTSVpFX1RZUEUgX19uKSwKKwkJZnBvc190ICgqX19zZWVrZm4pKF9QVFIgX19jb29raWUsIGZwb3NfdCBfX29mZiwgaW50IF9fd2hlbmNlKSwKKwkJaW50ICgqX19jbG9zZWZuKShfUFRSIF9fY29va2llKSkpOworRklMRQkqX0VYRlVOKF9mdW5vcGVuX3IsKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgX1BUUiBfX2Nvb2tpZSwKKwkJaW50ICgqX19yZWFkZm4pKF9QVFIgX19jb29raWUsIGNoYXIgKl9fYnVmLAorCQkJCV9SRUFEX1dSSVRFX0JVRlNJWkVfVFlQRSBfX24pLAorCQlpbnQgKCpfX3dyaXRlZm4pKF9QVFIgX19jb29raWUsIGNvbnN0IGNoYXIgKl9fYnVmLAorCQkJCSBfUkVBRF9XUklURV9CVUZTSVpFX1RZUEUgX19uKSwKKwkJZnBvc190ICgqX19zZWVrZm4pKF9QVFIgX19jb29raWUsIGZwb3NfdCBfX29mZiwgaW50IF9fd2hlbmNlKSwKKwkJaW50ICgqX19jbG9zZWZuKShfUFRSIF9fY29va2llKSkpOworIyBlbmRpZiAvKiAhX19MQVJHRTY0X0ZJTEVTICovCisKKyMgZGVmaW5lCWZyb3BlbihfX2Nvb2tpZSwgX19mbikgZnVub3BlbihfX2Nvb2tpZSwgX19mbiwgKGludCAoKikoKSkwLCBcCisJCQkJCSAgICAgICAoZnBvc190ICgqKSgpKTAsIChpbnQgKCopKCkpMCkKKyMgZGVmaW5lCWZ3b3BlbihfX2Nvb2tpZSwgX19mbikgZnVub3BlbihfX2Nvb2tpZSwgKGludCAoKikoKSkwLCBfX2ZuLCBcCisJCQkJCSAgICAgICAoZnBvc190ICgqKSgpKTAsIChpbnQgKCopKCkpMCkKKwordHlwZWRlZiBzc2l6ZV90IGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Qodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKK3R5cGVkZWYgc3NpemVfdCBjb29raWVfd3JpdGVfZnVuY3Rpb25fdCh2b2lkICpfX2Nvb2tpZSwgY29uc3QgY2hhciAqX19idWYsCisJCQkJCXNpemVfdCBfX24pOworIyBpZmRlZiBfX0xBUkdFNjRfRklMRVMKK3R5cGVkZWYgaW50IGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Qodm9pZCAqX19jb29raWUsIF9vZmY2NF90ICpfX29mZiwKKwkJCQkgICBpbnQgX193aGVuY2UpOworIyBlbHNlCit0eXBlZGVmIGludCBjb29raWVfc2Vla19mdW5jdGlvbl90KHZvaWQgKl9fY29va2llLCBvZmZfdCAqX19vZmYsIGludCBfX3doZW5jZSk7CisjIGVuZGlmIC8qICFfX0xBUkdFNjRfRklMRVMgKi8KK3R5cGVkZWYgaW50IGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90KHZvaWQgKl9fY29va2llKTsKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFRoZXNlIGZvdXIgc3RydWN0IG1lbWJlciBuYW1lcyBhcmUgZGljdGF0ZWQgYnkgTGludXg7IGhvcGVmdWxseSwKKyAgICAgdGhleSBkb24ndCBjb25mbGljdCB3aXRoIGFueSBtYWNyb3MuICAqLworICBjb29raWVfcmVhZF9mdW5jdGlvbl90ICAqcmVhZDsKKyAgY29va2llX3dyaXRlX2Z1bmN0aW9uX3QgKndyaXRlOworICBjb29raWVfc2Vla19mdW5jdGlvbl90ICAqc2VlazsKKyAgY29va2llX2Nsb3NlX2Z1bmN0aW9uX3QgKmNsb3NlOworfSBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CitGSUxFICpfRVhGVU4oZm9wZW5jb29raWUsKHZvaWQgKl9fY29va2llLAorCQljb25zdCBjaGFyICpfX21vZGUsIGNvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Z1bmN0aW9ucykpOworRklMRSAqX0VYRlVOKF9mb3BlbmNvb2tpZV9yLChzdHJ1Y3QgX3JlZW50ICosIHZvaWQgKl9fY29va2llLAorCQljb25zdCBjaGFyICpfX21vZGUsIGNvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Z1bmN0aW9ucykpOworI2VuZGlmIC8qICEgX19TVFJJQ1RfQU5TSV9fICovCisKKyNpZm5kZWYgX19DVVNUT01fRklMRV9JT19fCisvKgorICogVGhlIF9fc2ZvbyBtYWNyb3MgYXJlIGhlcmUgc28gdGhhdCB3ZSBjYW4gCisgKiBkZWZpbmUgZnVuY3Rpb24gdmVyc2lvbnMgaW4gdGhlIEMgbGlicmFyeS4KKyAqLworI2RlZmluZSAgICAgICBfX3NnZXRjX3Jhd19yKF9fcHRyLCBfX2YpICgtLShfX2YpLT5fciA8IDAgPyBfX3NyZ2V0X3IoX19wdHIsIF9fZikgOiAoaW50KSgqKF9fZiktPl9wKyspKQorCisjaWZkZWYgX19TQ0xFCisvKiAgRm9yIGEgcGxhdGZvcm0gd2l0aCBDUi9MRiwgYWRkaXRpb25hbCBsb2dpYyBpcyByZXF1aXJlZCBieQorICBfX3NnZXRjX3Igd2hpY2ggd291bGQgb3RoZXJ3aXNlIHNpbXBseSBiZSBhIG1hY3JvOyB0aGVyZWZvcmUgd2UKKyAgdXNlIGFuIGlubGluZWQgZnVuY3Rpb24uICBUaGUgZnVuY3Rpb24gaXMgb25seSBtZWFudCB0byBiZSBpbmxpbmVkCisgIGluIHBsYWNlIGFzIHVzZWQgYW5kIHRoZSBmdW5jdGlvbiBib2R5IHNob3VsZCBuZXZlciBiZSBlbWl0dGVkLiAgCisKKyAgVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBtZWFucyB0byB0aGlzIGVuZCB3aGVuIGNvbXBpbGluZyB3aXRoIEdDQywKKyAgb25lIHdoZW4gY29tcGlsaW5nIHdpdGggYSBzdGFuZGFyZCBDOTkgY29tcGlsZXIsIGFuZCBmb3Igb3RoZXIKKyAgY29tcGlsZXJzIHdlJ3JlIGp1c3Qgc3R1Y2suICBBdCB0aGUgbW9tZW50LCB0aGlzIGlzc3VlIG9ubHkKKyAgYWZmZWN0cyB0aGUgQ3lnd2luIHRhcmdldCwgc28gd2UnbGwgbW9zdCBsaWtlbHkgYmUgdXNpbmcgR0NDLiAqLworCitfRUxJREFCTEVfSU5MSU5FIGludCBfX3NnZXRjX3Ioc3RydWN0IF9yZWVudCAqX19wdHIsIEZJTEUgKl9fcCk7CisKK19FTElEQUJMRV9JTkxJTkUgaW50IF9fc2dldGNfcihzdHJ1Y3QgX3JlZW50ICpfX3B0ciwgRklMRSAqX19wKQorICB7CisgICAgaW50IF9fYyA9IF9fc2dldGNfcmF3X3IoX19wdHIsIF9fcCk7CisgICAgaWYgKChfX3AtPl9mbGFncyAmIF9fU0NMRSkgJiYgKF9fYyA9PSAnXHInKSkKKyAgICAgIHsKKyAgICAgIGludCBfX2MyID0gX19zZ2V0Y19yYXdfcihfX3B0ciwgX19wKTsKKyAgICAgIGlmIChfX2MyID09ICdcbicpCisgICAgICAgIF9fYyA9IF9fYzI7CisgICAgICBlbHNlCisgICAgICAgIHVuZ2V0YyhfX2MyLCBfX3ApOworICAgICAgfQorICAgIHJldHVybiBfX2M7CisgIH0KKyNlbHNlCisjZGVmaW5lIF9fc2dldGNfcihfX3B0ciwgX19wKSBfX3NnZXRjX3Jhd19yKF9fcHRyLCBfX3ApCisjZW5kaWYKKworI2lmZGVmIF9uZXZlciAvKiBfX0dOVUNfXyAqLworLyogSWYgdGhpcyBpbmxpbmUgaXMgYWN0dWFsbHkgdXNlZCwgdGhlbiBzeXN0ZW1zIHVzaW5nIGNvZmYgZGVidWdnaW5nCisgICBpbmZvIGdldCBob3BlbGVzc2x5IGNvbmZ1c2VkLiAgMjFzZXB0OTMgcmljaEBjeWdudXMuY29tLiAgKi8KK19FTElEQUJMRV9JTkxJTkUgaW50IF9fc3B1dGNfcihzdHJ1Y3QgX3JlZW50ICpfcHRyLCBpbnQgX2MsIEZJTEUgKl9wKSB7CisJaWYgKC0tX3AtPl93ID49IDAgfHwgKF9wLT5fdyA+PSBfcC0+X2xiZnNpemUgJiYgKGNoYXIpX2MgIT0gJ1xuJykpCisJCXJldHVybiAoKl9wLT5fcCsrID0gX2MpOworCWVsc2UKKwkJcmV0dXJuIChfX3N3YnVmX3IoX3B0ciwgX2MsIF9wKSk7Cit9CisjZWxzZQorLyoKKyAqIFRoaXMgaGFzIGJlZW4gdHVuZWQgdG8gZ2VuZXJhdGUgcmVhc29uYWJsZSBjb2RlIG9uIHRoZSB2YXggdXNpbmcgcGNjCisgKi8KKyNkZWZpbmUgICAgICAgX19zcHV0Y19yYXdfcihfX3B0ciwgX19jLCBfX3ApIFwKKwkoLS0oX19wKS0+X3cgPCAwID8gXAorCQkoX19wKS0+X3cgPj0gKF9fcCktPl9sYmZzaXplID8gXAorCQkJKCooX19wKS0+X3AgPSAoX19jKSksICooX19wKS0+X3AgIT0gJ1xuJyA/IFwKKwkJCQkoaW50KSooX19wKS0+X3ArKyA6IFwKKwkJCQlfX3N3YnVmX3IoX19wdHIsICdcbicsIF9fcCkgOiBcCisJCQlfX3N3YnVmX3IoX19wdHIsIChpbnQpKF9fYyksIF9fcCkgOiBcCisJCSgqKF9fcCktPl9wID0gKF9fYyksIChpbnQpKihfX3ApLT5fcCsrKSkKKyNpZmRlZiBfX1NDTEUKKyNkZWZpbmUgX19zcHV0Y19yKF9fcHRyLCBfX2MsIF9fcCkgXAorICAgICAgICAoKCgoX19wKS0+X2ZsYWdzICYgX19TQ0xFKSAmJiAoKF9fYykgPT0gJ1xuJykpIFwKKyAgICAgICAgICA/IF9fc3B1dGNfcmF3X3IoX19wdHIsICdccicsIChfX3ApKSA6IDAgLCBcCisgICAgICAgIF9fc3B1dGNfcmF3X3IoKF9fcHRyKSwgKF9fYyksIChfX3ApKSkKKyNlbHNlCisjZGVmaW5lIF9fc3B1dGNfcihfX3B0ciwgX19jLCBfX3ApIF9fc3B1dGNfcmF3X3IoX19wdHIsIF9fYywgX19wKQorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZQlfX3NmZW9mKHApCSgoKHApLT5fZmxhZ3MgJiBfX1NFT0YpICE9IDApCisjZGVmaW5lCV9fc2ZlcnJvcihwKQkoKChwKS0+X2ZsYWdzICYgX19TRVJSKSAhPSAwKQorI2RlZmluZQlfX3NjbGVhcmVycihwKQkoKHZvaWQpKChwKS0+X2ZsYWdzICY9IH4oX19TRVJSfF9fU0VPRikpKQorI2RlZmluZQlfX3NmaWxlbm8ocCkJKChwKS0+X2ZpbGUpCisKKyNpZm5kZWYgX1JFRU5UX1NNQUxMCisjZGVmaW5lCWZlb2YocCkJCV9fc2Zlb2YocCkKKyNkZWZpbmUJZmVycm9yKHApCV9fc2ZlcnJvcihwKQorI2RlZmluZQljbGVhcmVycihwKQlfX3NjbGVhcmVycihwKQorI2VuZGlmCisKKyNpZiAwIC8qbmRlZiBfX1NUUklDVF9BTlNJX18gLSBGSVhNRTogbXVzdCBpbml0aWFsaXplIHN0ZGlvIGZpcnN0LCB1c2UgZm4gKi8KKyNkZWZpbmUJZmlsZW5vKHApCV9fc2ZpbGVubyhwKQorI2VuZGlmCisKKyNpZm5kZWYgX19DWUdXSU5fXworI2lmbmRlZiBsaW50CisjZGVmaW5lCWdldGMoZnApCV9fc2dldGNfcihfUkVFTlQsIGZwKQorI2RlZmluZSBwdXRjKHgsIGZwKQlfX3NwdXRjX3IoX1JFRU5ULCB4LCBmcCkKKyNlbmRpZiAvKiBsaW50ICovCisjZW5kaWYgLyogX19DWUdXSU5fXyAqLworCisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworLyogZmFzdCBhbHdheXMtYnVmZmVyZWQgdmVyc2lvbiwgdHJ1ZSBpZmYgZXJyb3IgKi8KKyNkZWZpbmUJZmFzdF9wdXRjKHgscCkgKC0tKHApLT5fdyA8IDAgPyBcCisJX19zd2J1Zl9yKF9SRUVOVCwgKGludCkoeCksIHApID09IEVPRiA6ICgqKHApLT5fcCA9ICh4KSwgKHApLT5fcCsrLCAwKSkKKworI2RlZmluZQlMX2N1c2VyaWQJOQkJLyogcG9zaXggc2F5cyBpdCBnb2VzIGluIHN0ZGlvLmggOiggKi8KKyNpZmRlZiBfX0NZR1dJTl9fCisjZGVmaW5lIExfY3Rlcm1pZCAgICAgICAxNgorI2VuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qICFfX0NVU1RPTV9GSUxFX0lPX18gKi8KKworI2RlZmluZQlnZXRjaGFyKCkJZ2V0YyhzdGRpbikKKyNkZWZpbmUJcHV0Y2hhcih4KQlwdXRjKHgsIHN0ZG91dCkKKworX0VORF9TVERfQworCisjZW5kaWYgLyogX1NURElPX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3RkaW9fZXh0LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3RkaW9fZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzMGM4OAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdGRpb19leHQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogc3RkaW9fZXh0LmgKKyAqCisgKiBEZWZpbml0aW9ucyBmb3IgSS9PIGludGVybmFsIG9wZXJhdGlvbnMsIG9yaWdpbmFsbHkgZnJvbSBTb2xhcmlzLgorICovCisKKyNpZm5kZWYgX1NURElPX0VYVF9IXworI2RlZmluZSBfU1RESU9fRVhUX0hfCisKKyNpZmRlZiBfX3J0ZW1zX18KKyNlcnJvciAiPHN0ZGlvX2V4dC5oPiBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitfQkVHSU5fU1REX0MKKwordm9pZAkgX0VYRlVOKF9fZnB1cmdlLChGSUxFICopKTsKKworLyogVE9ETzoKKworICAgdm9pZCBfZmx1c2hsYmYgKHZvaWQpOworICAgaW50IF9fZnNldGxvY2tpbmcgKEZJTEUgKl9fZnAsIGludCBfX3R5cGUpOworKi8KKworI2lmZGVmICBfX0dOVUNfXworCitfRUxJREFCTEVfSU5MSU5FIGlubGluZSBzaXplX3QKK19fZmJ1ZnNpemUgKEZJTEUgKl9fZnApIHsgcmV0dXJuIChzaXplX3QpIF9fZnAtPl9iZi5fc2l6ZTsgfQorCitfRUxJREFCTEVfSU5MSU5FIGlubGluZSBpbnQKK19fZnJlYWRpbmcgKEZJTEUgKl9fZnApIHsgcmV0dXJuIChfX2ZwLT5fZmxhZ3MgJiBfX1NSRCkgIT0gMDsgfQorCitfRUxJREFCTEVfSU5MSU5FIGlubGluZSBpbnQKK19fZndyaXRpbmcgKEZJTEUgKl9fZnApIHsgcmV0dXJuIChfX2ZwLT5fZmxhZ3MgJiBfX1NXUikgIT0gMDsgfQorCitfRUxJREFCTEVfSU5MSU5FIGlubGluZSBpbnQKK19fZnJlYWRhYmxlIChGSUxFICpfX2ZwKSB7IHJldHVybiAoX19mcC0+X2ZsYWdzICYgKF9fU1JEIHwgX19TUlcpKSAhPSAwOyB9CisKK19FTElEQUJMRV9JTkxJTkUgaW5saW5lIGludAorX19md3JpdGVhYmxlIChGSUxFICpfX2ZwKSB7IHJldHVybiAoX19mcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcpKSAhPSAwOyB9CisKK19FTElEQUJMRV9JTkxJTkUgaW5saW5lIGludAorX19mbGJmIChGSUxFICpfX2ZwKSB7IHJldHVybiAoX19mcC0+X2ZsYWdzICYgX19TTEJGKSAhPSAwOyB9CisKK19FTElEQUJMRV9JTkxJTkUgaW5saW5lIHNpemVfdAorX19mcGVuZGluZyAoRklMRSAqX19mcCkgeyByZXR1cm4gX19mcC0+X3AgLSBfX2ZwLT5fYmYuX2Jhc2U7IH0KKworI2Vsc2UKKworI2RlZmluZSBfX2ZidWZzaXplKF9fZnApICgoc2l6ZV90KSAoX19mcCktPl9iZi5fc2l6ZSkKKyNkZWZpbmUgX19mcmVhZGluZyhfX2ZwKSAoKChfX2ZwKS0+X2ZsYWdzICYgX19TUkQpICE9IDApCisjZGVmaW5lIF9fZndyaXRpbmcoX19mcCkgKCgoX19mcCktPl9mbGFncyAmIF9fU1dSKSAhPSAwKQorI2RlZmluZSBfX2ZyZWFkYWJsZShfX2ZwKSAoKChfX2ZwKS0+X2ZsYWdzICYgKF9fU1JEIHwgX19TUlcpKSAhPSAwKQorI2RlZmluZSBfX2Z3cml0ZWFibGUoX19mcCkgKCgoX19mcCktPl9mbGFncyAmIChfX1NXUiB8IF9fU1JXKSkgIT0gMCkKKyNkZWZpbmUgX19mbGJmKF9fZnApICgoKF9fZnApLT5fZmxhZ3MgJiBfX1NMQkYpICE9IDApCisjZGVmaW5lIF9fZnBlbmRpbmcoX19mcCkgKChzaXplX3QpICgoX19mcCktPl9wIC0gKF9fZnApLT5fYmYuX2Jhc2UpKQorCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworX0VORF9TVERfQworCisjZW5kaWYgLyogX1NURElPX0VYVF9IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N0ZGxpYi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N0ZGxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTVhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3RkbGliLmgKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBzdGRsaWIuaAorICoKKyAqIERlZmluaXRpb25zIGZvciBjb21tb24gdHlwZXMsIHZhcmlhYmxlcywgYW5kIGZ1bmN0aW9ucy4KKyAqLworCisjaWZuZGVmIF9TVERMSUJfSF8KKyNkZWZpbmUgX1NURExJQl9IXworCisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4KKyNpbmNsdWRlICJfYW5zaS5oIgorCisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNkZWZpbmUgX19uZWVkX3djaGFyX3QKKyNkZWZpbmUgX19uZWVkX05VTEwKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPHN5cy9yZWVudC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc3RkbGliLmg+CisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworI2luY2x1ZGUgPGFsbG9jYS5oPgorI2VuZGlmCisKKyNpZmRlZiBfX0NZR1dJTl9fCisjaW5jbHVkZSA8Y3lnd2luL3N0ZGxpYi5oPgorI2VuZGlmCisKK19CRUdJTl9TVERfQworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgaW50IHF1b3Q7IC8qIHF1b3RpZW50ICovCisgIGludCByZW07IC8qIHJlbWFpbmRlciAqLworfSBkaXZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgIGxvbmcgcXVvdDsgLyogcXVvdGllbnQgKi8KKyAgbG9uZyByZW07IC8qIHJlbWFpbmRlciAqLworfSBsZGl2X3Q7CisKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCit0eXBlZGVmIHN0cnVjdAoreworICBsb25nIGxvbmcgaW50IHF1b3Q7IC8qIHF1b3RpZW50ICovCisgIGxvbmcgbG9uZyBpbnQgcmVtOyAvKiByZW1haW5kZXIgKi8KK30gbGxkaXZfdDsKKyNlbmRpZgorCisjaWZuZGVmIF9fY29tcGFyX2ZuX3RfZGVmaW5lZAorI2RlZmluZSBfX2NvbXBhcl9mbl90X2RlZmluZWQKK3R5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKGNvbnN0IF9QVFIsIGNvbnN0IF9QVFIpOworI2VuZGlmCisKKyNkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNkZWZpbmUgRVhJVF9TVUNDRVNTIDAKKworI2RlZmluZSBSQU5EX01BWCBfX1JBTkRfTUFYCisKK2ludAlfRVhGVU4oX19sb2NhbGVfbWJfY3VyX21heCwoX1ZPSUQpKTsKKworI2RlZmluZSBNQl9DVVJfTUFYIF9fbG9jYWxlX21iX2N1cl9tYXgoKQorCitfVk9JRAlfRVhGVU4oYWJvcnQsKF9WT0lEKSBfQVRUUklCVVRFICgobm9yZXR1cm4pKSk7CitpbnQJX0VYRlVOKGFicywoaW50KSk7CitpbnQJX0VYRlVOKGF0ZXhpdCwoX1ZPSUQgKCpfX2Z1bmMpKF9WT0lEKSkpOworZG91YmxlCV9FWEZVTihhdG9mLChjb25zdCBjaGFyICpfX25wdHIpKTsKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCitmbG9hdAlfRVhGVU4oYXRvZmYsKGNvbnN0IGNoYXIgKl9fbnB0cikpOworI2VuZGlmCitpbnQJX0VYRlVOKGF0b2ksKGNvbnN0IGNoYXIgKl9fbnB0cikpOworaW50CV9FWEZVTihfYXRvaV9yLChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fbnB0cikpOworbG9uZwlfRVhGVU4oYXRvbCwoY29uc3QgY2hhciAqX19ucHRyKSk7Citsb25nCV9FWEZVTihfYXRvbF9yLChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fbnB0cikpOworX1BUUglfRVhGVU4oYnNlYXJjaCwoY29uc3QgX1BUUiBfX2tleSwKKwkJICAgICAgIGNvbnN0IF9QVFIgX19iYXNlLAorCQkgICAgICAgc2l6ZV90IF9fbm1lbWIsCisJCSAgICAgICBzaXplX3QgX19zaXplLAorCQkgICAgICAgX19jb21wYXJfZm5fdCBfY29tcGFyKSk7CitfUFRSCV9FWEZVTl9OT1RIUk9XKGNhbGxvYywoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpKTsKK2Rpdl90CV9FWEZVTihkaXYsKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkpOworX1ZPSUQJX0VYRlVOKGV4aXQsKGludCBfX3N0YXR1cykgX0FUVFJJQlVURSAoKG5vcmV0dXJuKSkpOworX1ZPSUQJX0VYRlVOX05PVEhST1coZnJlZSwoX1BUUikpOworY2hhciAqICBfRVhGVU4oZ2V0ZW52LChjb25zdCBjaGFyICpfX3N0cmluZykpOworY2hhciAqCV9FWEZVTihfZ2V0ZW52X3IsKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19zdHJpbmcpKTsKK2NoYXIgKglfRVhGVU4oX2ZpbmRlbnYsKF9DT05TVCBjaGFyICosIGludCAqKSk7CitjaGFyICoJX0VYRlVOKF9maW5kZW52X3IsKHN0cnVjdCBfcmVlbnQgKiwgX0NPTlNUIGNoYXIgKiwgaW50ICopKTsKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCitleHRlcm4gY2hhciAqc3Vib3B0YXJnOwkJCS8qIGdldHN1Ym9wdCgzKSBleHRlcm5hbCB2YXJpYWJsZSAqLworaW50CV9FWEZVTihnZXRzdWJvcHQsKGNoYXIgKiosIGNoYXIgKiBjb25zdCAqLCBjaGFyICoqKSk7CisjZW5kaWYKK2xvbmcJX0VYRlVOKGxhYnMsKGxvbmcpKTsKK2xkaXZfdAlfRVhGVU4obGRpdiwobG9uZyBfX251bWVyLCBsb25nIF9fZGVub20pKTsKK19QVFIJX0VYRlVOX05PVEhST1cobWFsbG9jLChzaXplX3QgX19zaXplKSk7CitpbnQJX0VYRlVOKG1ibGVuLChjb25zdCBjaGFyICosIHNpemVfdCkpOworaW50CV9FWEZVTihfbWJsZW5fciwoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgX21ic3RhdGVfdCAqKSk7CitpbnQJX0VYRlVOKG1idG93Yywod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCkpOworaW50CV9FWEZVTihfbWJ0b3djX3IsKHN0cnVjdCBfcmVlbnQgKiwgd2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgX21ic3RhdGVfdCAqKSk7CitpbnQJX0VYRlVOKHdjdG9tYiwoY2hhciAqLCB3Y2hhcl90KSk7CitpbnQJX0VYRlVOKF93Y3RvbWJfciwoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIHdjaGFyX3QsIF9tYnN0YXRlX3QgKikpOworc2l6ZV90CV9FWEZVTihtYnN0b3djcywod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCkpOworc2l6ZV90CV9FWEZVTihfbWJzdG93Y3Nfciwoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopKTsKK3NpemVfdAlfRVhGVU4od2NzdG9tYnMsKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpKTsKK3NpemVfdAlfRVhGVU4oX3djc3RvbWJzX3IsKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCwgX21ic3RhdGVfdCAqKSk7CisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworI2lmbmRlZiBfUkVFTlRfT05MWQorY2hhciAqCV9FWEZVTihta2R0ZW1wLChjaGFyICopKTsKK2ludAlfRVhGVU4obWtvc3RlbXAsKGNoYXIgKiwgaW50KSk7CitpbnQJX0VYRlVOKG1rb3N0ZW1wcywoY2hhciAqLCBpbnQsIGludCkpOworaW50CV9FWEZVTihta3N0ZW1wLChjaGFyICopKTsKK2ludAlfRVhGVU4obWtzdGVtcHMsKGNoYXIgKiwgaW50KSk7CitjaGFyICoJX0VYRlVOKG1rdGVtcCwoY2hhciAqKSBfQVRUUklCVVRFICgoX193YXJuaW5nX18gKCJ0aGUgdXNlIG9mIGBta3RlbXAnIGlzIGRhbmdlcm91czsgdXNlIGBta3N0ZW1wJyBpbnN0ZWFkIikpKSk7CisjZW5kaWYKK2NoYXIgKglfRVhGVU4oX21rZHRlbXBfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKSk7CitpbnQJX0VYRlVOKF9ta29zdGVtcF9yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIGludCkpOworaW50CV9FWEZVTihfbWtvc3RlbXBzX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgaW50LCBpbnQpKTsKK2ludAlfRVhGVU4oX21rc3RlbXBfciwgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKSk7CitpbnQJX0VYRlVOKF9ta3N0ZW1wc19yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIGludCkpOworY2hhciAqCV9FWEZVTihfbWt0ZW1wX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKikgX0FUVFJJQlVURSAoKF9fd2FybmluZ19fICgidGhlIHVzZSBvZiBgbWt0ZW1wJyBpcyBkYW5nZXJvdXM7IHVzZSBgbWtzdGVtcCcgaW5zdGVhZCIpKSkpOworI2VuZGlmCitfVk9JRAlfRVhGVU4ocXNvcnQsKF9QVFIgX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfY29tcGFyKSk7CitpbnQJX0VYRlVOKHJhbmQsKF9WT0lEKSk7CitfUFRSCV9FWEZVTl9OT1RIUk9XKHJlYWxsb2MsKF9QVFIgX19yLCBzaXplX3QgX19zaXplKSk7CisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworX1BUUglfRVhGVU4ocmVhbGxvY2YsKF9QVFIgX19yLCBzaXplX3QgX19zaXplKSk7CisjZW5kaWYKK19WT0lECV9FWEZVTihzcmFuZCwodW5zaWduZWQgX19zZWVkKSk7Citkb3VibGUJX0VYRlVOKHN0cnRvZCwoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSKSk7Citkb3VibGUJX0VYRlVOKF9zdHJ0b2Rfciwoc3RydWN0IF9yZWVudCAqLGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUikpOworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkgfHwgKF9fY3BsdXNwbHVzID49IDIwMTEwM0wpCitmbG9hdAlfRVhGVU4oc3RydG9mLChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIpKTsKKyNlbmRpZgorI2lmbmRlZiBfX1NUUklDVF9BTlNJX18KKy8qIHRoZSBmb2xsb3dpbmcgc3RydG9kZiBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZC4uLnVzZSBzdHJ0b2YgaW5zdGVhZCAqLworIyBpZm5kZWYgc3RydG9kZiAKKyMgIGRlZmluZSBzdHJ0b2RmIHN0cnRvZgorIyBlbmRpZgorI2VuZGlmCitsb25nCV9FWEZVTihzdHJ0b2wsKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSkpOworbG9uZwlfRVhGVU4oX3N0cnRvbF9yLChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKSk7Cit1bnNpZ25lZCBsb25nIF9FWEZVTihzdHJ0b3VsLChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpKTsKK3Vuc2lnbmVkIGxvbmcgX0VYRlVOKF9zdHJ0b3VsX3IsKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpKTsKKworaW50CV9FWEZVTihzeXN0ZW0sKGNvbnN0IGNoYXIgKl9fc3RyaW5nKSk7CisKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCitsb25nICAgIF9FWEZVTihhNjRsLChjb25zdCBjaGFyICpfX2lucHV0KSk7CitjaGFyICogIF9FWEZVTihsNjRhLChsb25nIF9faW5wdXQpKTsKK2NoYXIgKiAgX0VYRlVOKF9sNjRhX3IsKHN0cnVjdCBfcmVlbnQgKixsb25nIF9faW5wdXQpKTsKK2ludAlfRVhGVU4ob25fZXhpdCwoX1ZPSUQgKCpfX2Z1bmMpKGludCwgX1BUUiksX1BUUiBfX2FyZykpOworX1ZPSUQJX0VYRlVOKF9FeGl0LChpbnQgX19zdGF0dXMpIF9BVFRSSUJVVEUgKChub3JldHVybikpKTsKK2ludAlfRVhGVU4ocHV0ZW52LChjaGFyICpfX3N0cmluZykpOworaW50CV9FWEZVTihfcHV0ZW52X3IsKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqX19zdHJpbmcpKTsKK19QVFIJX0VYRlVOKF9yZWFsbG9jZl9yLChzdHJ1Y3QgX3JlZW50ICosIF9QVFIsIHNpemVfdCkpOworaW50CV9FWEZVTihzZXRlbnYsKGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUpKTsKK2ludAlfRVhGVU4oX3NldGVudl9yLChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUpKTsKKworY2hhciAqCV9FWEZVTihnY3Z0LChkb3VibGUsaW50LGNoYXIgKikpOworY2hhciAqCV9FWEZVTihnY3Z0ZiwoZmxvYXQsaW50LGNoYXIgKikpOworY2hhciAqCV9FWEZVTihmY3Z0LChkb3VibGUsaW50LGludCAqLGludCAqKSk7CitjaGFyICoJX0VYRlVOKGZjdnRmLChmbG9hdCxpbnQsaW50ICosaW50ICopKTsKK2NoYXIgKglfRVhGVU4oZWN2dCwoZG91YmxlLGludCxpbnQgKixpbnQgKikpOworY2hhciAqCV9FWEZVTihlY3Z0YnVmLChkb3VibGUsIGludCwgaW50KiwgaW50KiwgY2hhciAqKSk7CitjaGFyICoJX0VYRlVOKGZjdnRidWYsKGRvdWJsZSwgaW50LCBpbnQqLCBpbnQqLCBjaGFyICopKTsKK2NoYXIgKglfRVhGVU4oZWN2dGYsKGZsb2F0LGludCxpbnQgKixpbnQgKikpOworY2hhciAqCV9FWEZVTihkdG9hLChkb3VibGUsIGludCwgaW50LCBpbnQgKiwgaW50KiwgY2hhcioqKSk7CitpbnQJX0VYRlVOKHJhbmRfciwodW5zaWduZWQgKl9fc2VlZCkpOworCitkb3VibGUgX0VYRlVOKGRyYW5kNDgsKF9WT0lEKSk7Citkb3VibGUgX0VYRlVOKF9kcmFuZDQ4X3IsKHN0cnVjdCBfcmVlbnQgKikpOworZG91YmxlIF9FWEZVTihlcmFuZDQ4LCh1bnNpZ25lZCBzaG9ydCBbM10pKTsKK2RvdWJsZSBfRVhGVU4oX2VyYW5kNDhfciwoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pKTsKK2xvbmcgICBfRVhGVU4oanJhbmQ0OCwodW5zaWduZWQgc2hvcnQgWzNdKSk7Citsb25nICAgX0VYRlVOKF9qcmFuZDQ4X3IsKHN0cnVjdCBfcmVlbnQgKiwgdW5zaWduZWQgc2hvcnQgWzNdKSk7CitfVk9JRCAgX0VYRlVOKGxjb25nNDgsKHVuc2lnbmVkIHNob3J0IFs3XSkpOworX1ZPSUQgIF9FWEZVTihfbGNvbmc0OF9yLChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFs3XSkpOworbG9uZyAgIF9FWEZVTihscmFuZDQ4LChfVk9JRCkpOworbG9uZyAgIF9FWEZVTihfbHJhbmQ0OF9yLChzdHJ1Y3QgX3JlZW50ICopKTsKK2xvbmcgICBfRVhGVU4obXJhbmQ0OCwoX1ZPSUQpKTsKK2xvbmcgICBfRVhGVU4oX21yYW5kNDhfciwoc3RydWN0IF9yZWVudCAqKSk7Citsb25nICAgX0VYRlVOKG5yYW5kNDgsKHVuc2lnbmVkIHNob3J0IFszXSkpOworbG9uZyAgIF9FWEZVTihfbnJhbmQ0OF9yLChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFszXSkpOwordW5zaWduZWQgc2hvcnQgKgorICAgICAgIF9FWEZVTihzZWVkNDgsKHVuc2lnbmVkIHNob3J0IFszXSkpOwordW5zaWduZWQgc2hvcnQgKgorICAgICAgIF9FWEZVTihfc2VlZDQ4X3IsKHN0cnVjdCBfcmVlbnQgKiwgdW5zaWduZWQgc2hvcnQgWzNdKSk7CitfVk9JRCAgX0VYRlVOKHNyYW5kNDgsKGxvbmcpKTsKK19WT0lEICBfRVhGVU4oX3NyYW5kNDhfciwoc3RydWN0IF9yZWVudCAqLCBsb25nKSk7Citsb25nIGxvbmcgX0VYRlVOKGF0b2xsLChjb25zdCBjaGFyICpfX25wdHIpKTsKK2xvbmcgbG9uZyBfRVhGVU4oX2F0b2xsX3IsKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19ucHRyKSk7Citsb25nIGxvbmcgX0VYRlVOKGxsYWJzLChsb25nIGxvbmcpKTsKK2xsZGl2X3QJX0VYRlVOKGxsZGl2LChsb25nIGxvbmcgX19udW1lciwgbG9uZyBsb25nIF9fZGVub20pKTsKKyNlbmRpZiAvKiAhIF9fU1RSSUNUX0FOU0lfXyAqLworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkgfHwgKF9fY3BsdXNwbHVzID49IDIwMTEwM0wpCitsb25nIGxvbmcgX0VYRlVOKHN0cnRvbGwsKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSkpOworI2VuZGlmCisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworbG9uZyBsb25nIF9FWEZVTihfc3RydG9sbF9yLChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSkpOworI2VuZGlmIC8qICEgX19TVFJJQ1RfQU5TSV9fICovCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKSB8fCAoX19jcGx1c3BsdXMgPj0gMjAxMTAzTCkKK3Vuc2lnbmVkIGxvbmcgbG9uZyBfRVhGVU4oc3RydG91bGwsKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSkpOworI2VuZGlmCisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXwordW5zaWduZWQgbG9uZyBsb25nIF9FWEZVTihfc3RydG91bGxfciwoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jhc2UpKTsKKworI2lmbmRlZiBfX0NZR1dJTl9fCitfVk9JRAlfRVhGVU4oY2ZyZWUsKF9QVFIpKTsKK2ludAlfRVhGVU4odW5zZXRlbnYsKGNvbnN0IGNoYXIgKl9fc3RyaW5nKSk7CitpbnQJX0VYRlVOKF91bnNldGVudl9yLChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKSk7CisjZW5kaWYKKworI2lmZGVmIF9fcnRlbXNfXworaW50IF9FWEZVTihwb3NpeF9tZW1hbGlnbiwodm9pZCAqKiwgc2l6ZV90LCBzaXplX3QpKTsKKyNlbmRpZgorCisjZW5kaWYgLyogISBfX1NUUklDVF9BTlNJX18gKi8KKworY2hhciAqCV9FWEZVTihfZHRvYV9yLChzdHJ1Y3QgX3JlZW50ICosIGRvdWJsZSwgaW50LCBpbnQsIGludCAqLCBpbnQqLCBjaGFyKiopKTsKKyNpZm5kZWYgX19DWUdXSU5fXworX1BUUglfRVhGVU5fTk9USFJPVyhfbWFsbG9jX3IsKHN0cnVjdCBfcmVlbnQgKiwgc2l6ZV90KSk7CitfUFRSCV9FWEZVTl9OT1RIUk9XKF9jYWxsb2Nfciwoc3RydWN0IF9yZWVudCAqLCBzaXplX3QsIHNpemVfdCkpOworX1ZPSUQJX0VYRlVOX05PVEhST1coX2ZyZWVfciwoc3RydWN0IF9yZWVudCAqLCBfUFRSKSk7CitfUFRSCV9FWEZVTl9OT1RIUk9XKF9yZWFsbG9jX3IsKHN0cnVjdCBfcmVlbnQgKiwgX1BUUiwgc2l6ZV90KSk7CitfVk9JRAlfRVhGVU4oX21zdGF0c19yLChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKikpOworI2VuZGlmCitpbnQJX0VYRlVOKF9zeXN0ZW1fciwoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopKTsKKworX1ZPSUQJX0VYRlVOKF9fZXByaW50ZiwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKSk7CisKKy8qIE9uIHBsYXRmb3JtcyB3aGVyZSBsb25nIGRvdWJsZSBlcXVhbHMgZG91YmxlLiAgKi8KKyNpZmRlZiBfTERCTF9FUV9EQkwKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpIHx8IChfX2NwbHVzcGx1cyA+PSAyMDExMDNMKQorZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CisjZW5kaWYKK2V4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOworI2VuZGlmIC8qIF9MREJMX0VRX0RCTCAqLworCitfRU5EX1NURF9DCisKKyNlbmRpZiAvKiBfU1RETElCX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3RyaW5nLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyNWI0NgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdHJpbmcuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIHN0cmluZy5oCisgKgorICogRGVmaW5pdGlvbnMgZm9yIG1lbW9yeSBhbmQgc3RyaW5nIGZ1bmN0aW9ucy4KKyAqLworCisjaWZuZGVmIF9TVFJJTkdfSF8KKyNkZWZpbmUJX1NUUklOR19IXworCisjaW5jbHVkZSAiX2Fuc2kuaCIKKyNpbmNsdWRlIDxzeXMvcmVlbnQuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvZmVhdHVyZXMuaD4KKworI2RlZmluZSBfX25lZWRfc2l6ZV90CisjZGVmaW5lIF9fbmVlZF9OVUxMCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK19CRUdJTl9TVERfQworCitfUFRSIAkgX0VYRlVOKG1lbWNociwoY29uc3QgX1BUUiwgaW50LCBzaXplX3QpKTsKK2ludCAJIF9FWEZVTihtZW1jbXAsKGNvbnN0IF9QVFIsIGNvbnN0IF9QVFIsIHNpemVfdCkpOworX1BUUiAJIF9FWEZVTihtZW1jcHksKF9QVFIgX19yZXN0cmljdCwgY29uc3QgX1BUUiBfX3Jlc3RyaWN0LCBzaXplX3QpKTsKK19QVFIJIF9FWEZVTihtZW1tb3ZlLChfUFRSLCBjb25zdCBfUFRSLCBzaXplX3QpKTsKK19QVFIJIF9FWEZVTihtZW1zZXQsKF9QVFIsIGludCwgc2l6ZV90KSk7CitjaGFyIAkqX0VYRlVOKHN0cmNhdCwoY2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCkpOworY2hhciAJKl9FWEZVTihzdHJjaHIsKGNvbnN0IGNoYXIgKiwgaW50KSk7CitpbnQJIF9FWEZVTihzdHJjbXAsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitpbnQJIF9FWEZVTihzdHJjb2xsLChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworY2hhciAJKl9FWEZVTihzdHJjcHksKGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QpKTsKK3NpemVfdAkgX0VYRlVOKHN0cmNzcG4sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitjaGFyIAkqX0VYRlVOKHN0cmVycm9yLChpbnQpKTsKK3NpemVfdAkgX0VYRlVOKHN0cmxlbiwoY29uc3QgY2hhciAqKSk7CitjaGFyIAkqX0VYRlVOKHN0cm5jYXQsKGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHNpemVfdCkpOworaW50CSBfRVhGVU4oc3RybmNtcCwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCkpOworY2hhciAJKl9FWEZVTihzdHJuY3B5LChjaGFyICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QpKTsKK2NoYXIgCSpfRVhGVU4oc3RycGJyaywoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK2NoYXIgCSpfRVhGVU4oc3RycmNociwoY29uc3QgY2hhciAqLCBpbnQpKTsKK3NpemVfdAkgX0VYRlVOKHN0cnNwbiwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK2NoYXIgCSpfRVhGVU4oc3Ryc3RyLChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworCisjaWZuZGVmIF9SRUVOVF9PTkxZCitjaGFyIAkqX0VYRlVOKHN0cnRvaywoY2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCkpOworI2VuZGlmCisKK3NpemVfdAkgX0VYRlVOKHN0cnhmcm0sKGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHNpemVfdCkpOworCisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworY2hhciAJKl9FWEZVTihzdHJ0b2tfciwoY2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgY2hhciAqKl9fcmVzdHJpY3QpKTsKKworaW50CSBfRVhGVU4oYmNtcCwoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCkpOwordm9pZAkgX0VYRlVOKGJjb3B5LChjb25zdCB2b2lkICosIHZvaWQgKiwgc2l6ZV90KSk7Cit2b2lkCSBfRVhGVU4oYnplcm8sKHZvaWQgKiwgc2l6ZV90KSk7CitpbnQJIF9FWEZVTihmZnMsKGludCkpOworY2hhciAJKl9FWEZVTihpbmRleCwoY29uc3QgY2hhciAqLCBpbnQpKTsKK19QVFIJIF9FWEZVTihtZW1jY3B5LChfUFRSIF9fcmVzdHJpY3QsIGNvbnN0IF9QVFIgX19yZXN0cmljdCwgaW50LCBzaXplX3QpKTsKK19QVFIJIF9FWEZVTihtZW1wY3B5LChfUFRSLCBjb25zdCBfUFRSLCBzaXplX3QpKTsKK19QVFIJIF9FWEZVTihtZW1tZW0sIChjb25zdCBfUFRSLCBzaXplX3QsIGNvbnN0IF9QVFIsIHNpemVfdCkpOworX1BUUiAJIF9FWEZVTihtZW1yY2hyLChjb25zdCBfUFRSLCBpbnQsIHNpemVfdCkpOworX1BUUiAJIF9FWEZVTihyYXdtZW1jaHIsKGNvbnN0IF9QVFIsIGludCkpOworY2hhciAJKl9FWEZVTihyaW5kZXgsKGNvbnN0IGNoYXIgKiwgaW50KSk7CitjaGFyIAkqX0VYRlVOKHN0cGNweSwoY2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCkpOworY2hhciAJKl9FWEZVTihzdHBuY3B5LChjaGFyICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QpKTsKK2ludAkgX0VYRlVOKHN0cmNhc2VjbXAsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitjaGFyCSpfRVhGVU4oc3RyY2FzZXN0ciwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK2NoYXIgCSpfRVhGVU4oc3RyY2hybnVsLChjb25zdCBjaGFyICosIGludCkpOworI2VuZGlmCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCAoX1hPUEVOX1NPVVJDRSAtIDApID49IDUwMAorY2hhciAJKl9FWEZVTihzdHJkdXAsKGNvbnN0IGNoYXIgKikpOworI2VuZGlmCisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworY2hhciAJKl9FWEZVTihfc3RyZHVwX3IsKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKSk7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IChfWE9QRU5fU09VUkNFIC0gMCkgPj0gNzAwCitjaGFyIAkqX0VYRlVOKHN0cm5kdXAsKGNvbnN0IGNoYXIgKiwgc2l6ZV90KSk7CisjZW5kaWYKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyIAkqX0VYRlVOKF9zdHJuZHVwX3IsKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpKTsKKy8qIFRoZXJlIGFyZSB0d28gY29tbW9uIHN0cmVycm9yX3IgdmFyaWFudHMuICBJZiB5b3UgcmVxdWVzdAorICAgX0dOVV9TT1VSQ0UsIHlvdSBnZXQgdGhlIEdOVSB2ZXJzaW9uOyBvdGhlcndpc2UgeW91IGdldCB0aGUgUE9TSVgKKyAgIHZlcnNpb24uICBQT1NJWCByZXF1aXJlcyB0aGF0ICN1bmRlZiBzdHJlcnJvcl9yIHdpbGwgc3RpbGwgbGV0IHlvdQorICAgaW52b2tlIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uLCBidXQgdGhhdCByZXF1aXJlcyBnY2Mgc3VwcG9ydC4gICovCisjaWZkZWYgX0dOVV9TT1VSQ0UKK2NoYXIgICAgKl9FWEZVTihzdHJlcnJvcl9yLChpbnQsIGNoYXIgKiwgc2l6ZV90KSk7CisjZWxzZQorIyBpZmRlZiBfX0dOVUNfXworaW50ICAgICAgX0VYRlVOKHN0cmVycm9yX3IsKGludCwgY2hhciAqLCBzaXplX3QpKSBfX2FzbV9fIChfX0FTTU5BTUUgKCJfX3hwZ19zdHJlcnJvcl9yIikpOworIyBlbHNlCitpbnQgICAgICBfRVhGVU4oX194cGdfc3RyZXJyb3JfciwoaW50LCBjaGFyICosIHNpemVfdCkpOworIyAgZGVmaW5lIHN0cmVycm9yX3IgX194cGdfc3RyZXJyb3JfcgorIyBlbmRpZgorI2VuZGlmCitzaXplX3QJIF9FWEZVTihzdHJsY2F0LChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KSk7CitzaXplX3QJIF9FWEZVTihzdHJsY3B5LChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KSk7CitpbnQJIF9FWEZVTihzdHJuY2FzZWNtcCwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCkpOworc2l6ZV90CSBfRVhGVU4oc3RybmxlbiwoY29uc3QgY2hhciAqLCBzaXplX3QpKTsKK2NoYXIgCSpfRVhGVU4oc3Ryc2VwLChjaGFyICoqLCBjb25zdCBjaGFyICopKTsKK2NoYXIJKl9FWEZVTihzdHJsd3IsKGNoYXIgKikpOworY2hhcgkqX0VYRlVOKHN0cnVwciwoY2hhciAqKSk7CisjaWZuZGVmIERFRlNfSAkvKiBLbHVkZ2UgdG8gd29yayBhcm91bmQgcHJvYmxlbSBjb21waWxpbmcgaW4gZ2RiICovCitjaGFyICAqX0VYRlVOKHN0cnNpZ25hbCwgKGludCBfX3NpZ25vKSk7CisjZW5kaWYKKyNpZmRlZiBfX0NZR1dJTl9fCitpbnQgICAgIF9FWEZVTihzdHJ0b3NpZ25vLCAoY29uc3QgY2hhciAqX19uYW1lKSk7CisjZW5kaWYKKworLyogUmVjdXJzaXZlIHZlcnNpb24gb2Ygc3RyZXJyb3IuICAqLworY2hhciAqCV9FWEZVTihfc3RyZXJyb3JfciwgKHN0cnVjdCBfcmVlbnQgKiwgaW50LCBpbnQsIGludCAqKSk7CisKKyNpZiBkZWZpbmVkIF9HTlVfU09VUkNFICYmIGRlZmluZWQgX19HTlVDX18KKyNkZWZpbmUgc3RyZHVwYShfX3MpIFwKKwkoX19leHRlbnNpb25fXyAoe2NvbnN0IGNoYXIgKl9faW4gPSAoX19zKTsgXAorCQkJIHNpemVfdCBfX2xlbiA9IHN0cmxlbiAoX19pbikgKyAxOyBcCisJCQkgY2hhciAqIF9fb3V0ID0gKGNoYXIgKikgX19idWlsdGluX2FsbG9jYSAoX19sZW4pOyBcCisJCQkgKGNoYXIgKikgbWVtY3B5IChfX291dCwgX19pbiwgX19sZW4pO30pKQorI2RlZmluZSBzdHJuZHVwYShfX3MsIF9fbikgXAorCShfX2V4dGVuc2lvbl9fICh7Y29uc3QgY2hhciAqX19pbiA9IChfX3MpOyBcCisJCQkgc2l6ZV90IF9fbGVuID0gc3RybmxlbiAoX19pbiwgKF9fbikpICsgMTsgXAorCQkJIGNoYXIgKl9fb3V0ID0gKGNoYXIgKikgX19idWlsdGluX2FsbG9jYSAoX19sZW4pOyBcCisJCQkgX19vdXRbX19sZW4tMV0gPSAnXDAnOyBcCisJCQkgKGNoYXIgKikgbWVtY3B5IChfX291dCwgX19pbiwgX19sZW4tMSk7fSkpCisjZW5kaWYgLyogX0dOVV9TT1VSQ0UgJiYgX19HTlVDX18gKi8KKworLyogVGhlc2UgZnVuY3Rpb24gbmFtZXMgYXJlIHVzZWQgb24gV2luZG93cyBhbmQgcGVyaGFwcyBvdGhlciBzeXN0ZW1zLiAgKi8KKyNpZm5kZWYgc3RyY21waQorI2RlZmluZSBzdHJjbXBpIHN0cmNhc2VjbXAKKyNlbmRpZgorI2lmbmRlZiBzdHJpY21wCisjZGVmaW5lIHN0cmljbXAgc3RyY2FzZWNtcAorI2VuZGlmCisjaWZuZGVmIHN0cm5jbXBpCisjZGVmaW5lIHN0cm5jbXBpIHN0cm5jYXNlY21wCisjZW5kaWYKKyNpZm5kZWYgc3RybmljbXAKKyNkZWZpbmUgc3RybmljbXAgc3RybmNhc2VjbXAKKyNlbmRpZgorCisjZW5kaWYgLyogISBfX1NUUklDVF9BTlNJX18gKi8KKworI2luY2x1ZGUgPHN5cy9zdHJpbmcuaD4KKworX0VORF9TVERfQworCisjZW5kaWYgLyogX1NUUklOR19IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N0cmluZ3MuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdHJpbmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxZDgxZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zdHJpbmdzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIHN0cmluZ3MuaAorICoKKyAqIERlZmluaXRpb25zIGZvciBzdHJpbmcgb3BlcmF0aW9ucy4KKyAqLworCisjaWZuZGVmIF9TVFJJTkdTX0hfCisjZGVmaW5lIF9TVFJJTkdTX0hfCisKKyNpbmNsdWRlICJfYW5zaS5oIgorI2luY2x1ZGUgPHN5cy9yZWVudC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIGZvciBzaXplX3QgKi8KKworX0JFR0lOX1NURF9DCisKKyNpZiAhZGVmaW5lZCBfX1NUUklDVF9BTlNJX18gJiYgX1BPU0lYX1ZFUlNJT04gPCAyMDA4MDlMCisvKiAKKyAqIE1hcmtlZCBMRUdBQ1kgaW4gT3BlbiBHcm91cCBCYXNlIFNwZWNpZmljYXRpb25zIElzc3VlIDYvSUVFRSBTdGQgMTAwMy4xLTIwMDQKKyAqIFJlbW92ZWQgZnJvbSBPcGVuIEdyb3VwIEJhc2UgU3BlY2lmaWNhdGlvbnMgSXNzdWUgNy9JRUVFIFN0ZCAxMDAzLjEtMjAwOAorICovCitpbnQJIF9FWEZVTihiY21wLChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KSk7Cit2b2lkCSBfRVhGVU4oYmNvcHksKGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpKTsKK3ZvaWQJIF9FWEZVTihiemVybywodm9pZCAqLCBzaXplX3QpKTsKK2NoYXIgCSpfRVhGVU4oaW5kZXgsKGNvbnN0IGNoYXIgKiwgaW50KSk7CitjaGFyIAkqX0VYRlVOKHJpbmRleCwoY29uc3QgY2hhciAqLCBpbnQpKTsKKyNlbmRpZiAvKiAhIF9fU1RSSUNUX0FOU0lfXyAqLworCitpbnQJIF9FWEZVTihmZnMsKGludCkpOworaW50CSBfRVhGVU4oc3RyY2FzZWNtcCwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK2ludAkgX0VYRlVOKHN0cm5jYXNlY21wLChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KSk7CisKK19FTkRfU1REX0MKKworI2VuZGlmIC8qIF9TVFJJTkdTX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL19kZWZhdWx0X2ZjbnRsLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL19kZWZhdWx0X2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4NDEzNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvX2RlZmF1bHRfZmNudGwuaApAQCAtMCwwICsxLDIwNCBAQAorCisjaWZuZGVmCV9TWVNfX0RFRkFVTFRfRkNOVExfSF8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNkZWZpbmUJX1NZU19fREVGQVVMVF9GQ05UTF9IXworI2luY2x1ZGUgPF9hbnNpLmg+CisjZGVmaW5lCV9GT1BFTgkJKC0xKQkvKiBmcm9tIHN5cy9maWxlLmgsIGtlcm5lbCB1c2Ugb25seSAqLworI2RlZmluZQlfRlJFQUQJCTB4MDAwMQkvKiByZWFkIGVuYWJsZWQgKi8KKyNkZWZpbmUJX0ZXUklURQkJMHgwMDAyCS8qIHdyaXRlIGVuYWJsZWQgKi8KKyNkZWZpbmUJX0ZBUFBFTkQJMHgwMDA4CS8qIGFwcGVuZCAod3JpdGVzIGd1YXJhbnRlZWQgYXQgdGhlIGVuZCkgKi8KKyNkZWZpbmUJX0ZNQVJLCQkweDAwMTAJLyogaW50ZXJuYWw7IG1hcmsgZHVyaW5nIGdjKCkgKi8KKyNkZWZpbmUJX0ZERUZFUgkJMHgwMDIwCS8qIGludGVybmFsOyBkZWZlciBmb3IgbmV4dCBnYyBwYXNzICovCisjZGVmaW5lCV9GQVNZTkMJCTB4MDA0MAkvKiBzaWduYWwgcGdycCB3aGVuIGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUJX0ZTSExPQ0sJMHgwMDgwCS8qIEJTRCBmbG9jaygpIHNoYXJlZCBsb2NrIHByZXNlbnQgKi8KKyNkZWZpbmUJX0ZFWExPQ0sJMHgwMTAwCS8qIEJTRCBmbG9jaygpIGV4Y2x1c2l2ZSBsb2NrIHByZXNlbnQgKi8KKyNkZWZpbmUJX0ZDUkVBVAkJMHgwMjAwCS8qIG9wZW4gd2l0aCBmaWxlIGNyZWF0ZSAqLworI2RlZmluZQlfRlRSVU5DCQkweDA0MDAJLyogb3BlbiB3aXRoIHRydW5jYXRpb24gKi8KKyNkZWZpbmUJX0ZFWENMCQkweDA4MDAJLyogZXJyb3Igb24gb3BlbiBpZiBmaWxlIGV4aXN0cyAqLworI2RlZmluZQlfRk5CSU8JCTB4MTAwMAkvKiBub24gYmxvY2tpbmcgSS9PIChzeXM1IHN0eWxlKSAqLworI2RlZmluZQlfRlNZTkMJCTB4MjAwMAkvKiBkbyBhbGwgd3JpdGVzIHN5bmNocm9ub3VzbHkgKi8KKyNkZWZpbmUJX0ZOT05CTE9DSwkweDQwMDAJLyogbm9uIGJsb2NraW5nIEkvTyAoUE9TSVggc3R5bGUpICovCisjZGVmaW5lCV9GTkRFTEFZCV9GTk9OQkxPQ0sJLyogbm9uIGJsb2NraW5nIEkvTyAoNC4yIHN0eWxlKSAqLworI2RlZmluZQlfRk5PQ1RUWQkweDgwMDAJLyogZG9uJ3QgYXNzaWduIGEgY3R0eSBvbiB0aGlzIG9wZW4gKi8KKworI2RlZmluZQlPX0FDQ01PREUJKE9fUkRPTkxZfE9fV1JPTkxZfE9fUkRXUikKKworLyoKKyAqIEZsYWcgdmFsdWVzIGZvciBvcGVuKDIpIGFuZCBmY250bCgyKQorICogVGhlIGtlcm5lbCBhZGRzIDEgdG8gdGhlIG9wZW4gbW9kZXMgdG8gdHVybiBpdCBpbnRvIHNvbWUKKyAqIGNvbWJpbmF0aW9uIG9mIEZSRUFEIGFuZCBGV1JJVEUuCisgKi8KKyNkZWZpbmUJT19SRE9OTFkJMAkJLyogKzEgPT0gRlJFQUQgKi8KKyNkZWZpbmUJT19XUk9OTFkJMQkJLyogKzEgPT0gRldSSVRFICovCisjZGVmaW5lCU9fUkRXUgkJMgkJLyogKzEgPT0gRlJFQUR8RldSSVRFICovCisjZGVmaW5lCU9fQVBQRU5ECV9GQVBQRU5ECisjZGVmaW5lCU9fQ1JFQVQJCV9GQ1JFQVQKKyNkZWZpbmUJT19UUlVOQwkJX0ZUUlVOQworI2RlZmluZQlPX0VYQ0wJCV9GRVhDTAorI2RlZmluZSBPX1NZTkMJCV9GU1lOQworLyoJT19OREVMQVkJX0ZOREVMQVkgCXNldCBpbiBpbmNsdWRlL2ZjbnRsLmggKi8KKy8qCU9fTkRFTEFZCV9GTkJJTyAJCXNldCBpbiBpbmNsdWRlL2ZjbnRsLmggKi8KKyNkZWZpbmUJT19OT05CTE9DSwlfRk5PTkJMT0NLCisjZGVmaW5lCU9fTk9DVFRZCV9GTk9DVFRZCisvKiBGb3IgbWFjaGluZXMgd2hpY2ggY2FyZSAtICovCisjaWYgZGVmaW5lZCAoX1dJTjMyKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKQorI2RlZmluZSBfRkJJTkFSWSAgICAgICAgMHgxMDAwMAorI2RlZmluZSBfRlRFWFQgICAgICAgICAgMHgyMDAwMAorI2RlZmluZSBfRk5PSU5IRVJJVAkweDQwMDAwCisKKyNkZWZpbmUgT19CSU5BUlkJX0ZCSU5BUlkKKyNkZWZpbmUgT19URVhUCQlfRlRFWFQKKyNkZWZpbmUgT19OT0lOSEVSSVQJX0ZOT0lOSEVSSVQKKy8qIE9fQ0xPRVhFQyBpcyB0aGUgTGludXggZXF1aXZhbGVudCB0byBPX05PSU5IRVJJVCAqLworI2RlZmluZSBPX0NMT0VYRUMJX0ZOT0lOSEVSSVQKKworLyogVGhlIHdpbmRvd3MgaGVhZGVyIGZpbGVzIGRlZmluZSB2ZXJzaW9ucyB3aXRoIGEgbGVhZGluZyB1bmRlcnNjb3JlLiAgKi8KKyNkZWZpbmUgX09fUkRPTkxZCU9fUkRPTkxZCisjZGVmaW5lIF9PX1dST05MWQlPX1dST05MWQorI2RlZmluZSBfT19SRFdSCQlPX1JEV1IKKyNkZWZpbmUgX09fQVBQRU5ECU9fQVBQRU5ECisjZGVmaW5lIF9PX0NSRUFUCU9fQ1JFQVQKKyNkZWZpbmUgX09fVFJVTkMJT19UUlVOQworI2RlZmluZSBfT19FWENMCQlPX0VYQ0wKKyNkZWZpbmUgX09fVEVYVAkJT19URVhUCisjZGVmaW5lIF9PX0JJTkFSWQlPX0JJTkFSWQorI2RlZmluZSBfT19SQVcJCU9fQklOQVJZCisjZGVmaW5lIF9PX05PSU5IRVJJVAlPX05PSU5IRVJJVAorI2VuZGlmCisKKyNpZm5kZWYJX1BPU0lYX1NPVVJDRQorCisvKgorICogRmxhZ3MgdGhhdCB3b3JrIGZvciBmY250bChmZCwgRl9TRVRGTCwgRlhYWFgpCisgKi8KKyNkZWZpbmUJRkFQUEVORAkJX0ZBUFBFTkQKKyNkZWZpbmUJRlNZTkMJCV9GU1lOQworI2RlZmluZQlGQVNZTkMJCV9GQVNZTkMKKyNkZWZpbmUJRk5CSU8JCV9GTkJJTworI2RlZmluZQlGTk9OQklPCQlfRk5PTkJMT0NLCS8qIFhYWCBmaXggdG8gYmUgTk9OQkxPQ0sgZXZlcnl3aGVyZSAqLworI2RlZmluZQlGTkRFTEFZCQlfRk5ERUxBWQorCisvKgorICogRmxhZ3MgdGhhdCBhcmUgZGlzYWxsb3dlZCBmb3IgZmNudGwncyAoRkNOVExDQU5UKTsKKyAqIHVzZWQgZm9yIG9wZW5zLCBpbnRlcm5hbCBzdGF0ZSwgb3IgbG9ja2luZy4KKyAqLworI2RlZmluZQlGUkVBRAkJX0ZSRUFECisjZGVmaW5lCUZXUklURQkJX0ZXUklURQorI2RlZmluZQlGTUFSSwkJX0ZNQVJLCisjZGVmaW5lCUZERUZFUgkJX0ZERUZFUgorI2RlZmluZQlGU0hMT0NLCQlfRlNITE9DSworI2RlZmluZQlGRVhMT0NLCQlfRkVYTE9DSworCisvKgorICogVGhlIHJlc3Qgb2YgdGhlIGZsYWdzLCB1c2VkIG9ubHkgZm9yIG9wZW5zCisgKi8KKyNkZWZpbmUJRk9QRU4JCV9GT1BFTgorI2RlZmluZQlGQ1JFQVQJCV9GQ1JFQVQKKyNkZWZpbmUJRlRSVU5DCQlfRlRSVU5DCisjZGVmaW5lCUZFWENMCQlfRkVYQ0wKKyNkZWZpbmUJRk5PQ1RUWQkJX0ZOT0NUVFkKKworI2VuZGlmCS8qICFfUE9TSVhfU09VUkNFICovCisKKy8qIFhYWCBjbG9zZSBvbiBleGVjIHJlcXVlc3Q7IG11c3QgbWF0Y2ggVUZfRVhDTE9TRSBpbiB1c2VyLmggKi8KKyNkZWZpbmUJRkRfQ0xPRVhFQwkxCS8qIHBvc2l4ICovCisKKy8qIGZjbnRsKDIpIHJlcXVlc3RzICovCisjZGVmaW5lCUZfRFVQRkQJCTAJLyogRHVwbGljYXRlIGZpbGRlcyAqLworI2RlZmluZQlGX0dFVEZECQkxCS8qIEdldCBmaWxkZXMgZmxhZ3MgKGNsb3NlIG9uIGV4ZWMpICovCisjZGVmaW5lCUZfU0VURkQJCTIJLyogU2V0IGZpbGRlcyBmbGFncyAoY2xvc2Ugb24gZXhlYykgKi8KKyNkZWZpbmUJRl9HRVRGTAkJMwkvKiBHZXQgZmlsZSBmbGFncyAqLworI2RlZmluZQlGX1NFVEZMCQk0CS8qIFNldCBmaWxlIGZsYWdzICovCisjaWZuZGVmCV9QT1NJWF9TT1VSQ0UKKyNkZWZpbmUJRl9HRVRPV04gCTUJLyogR2V0IG93bmVyIC0gZm9yIEFTWU5DICovCisjZGVmaW5lCUZfU0VUT1dOIAk2CS8qIFNldCBvd25lciAtIGZvciBBU1lOQyAqLworI2VuZGlmCS8qICFfUE9TSVhfU09VUkNFICovCisjZGVmaW5lCUZfR0VUTEsgIAk3CS8qIEdldCByZWNvcmQtbG9ja2luZyBpbmZvcm1hdGlvbiAqLworI2RlZmluZQlGX1NFVExLICAJOAkvKiBTZXQgb3IgQ2xlYXIgYSByZWNvcmQtbG9jayAoTm9uLUJsb2NraW5nKSAqLworI2RlZmluZQlGX1NFVExLVyAJOQkvKiBTZXQgb3IgQ2xlYXIgYSByZWNvcmQtbG9jayAoQmxvY2tpbmcpICovCisjaWZuZGVmCV9QT1NJWF9TT1VSQ0UKKyNkZWZpbmUJRl9SR0VUTEsgCTEwCS8qIFRlc3QgYSByZW1vdGUgbG9jayB0byBzZWUgaWYgaXQgaXMgYmxvY2tlZCAqLworI2RlZmluZQlGX1JTRVRMSyAJMTEJLyogU2V0IG9yIHVubG9jayBhIHJlbW90ZSBsb2NrICovCisjZGVmaW5lCUZfQ05WVCAJCTEyCS8qIENvbnZlcnQgYSBmaGFuZGxlIHRvIGFuIG9wZW4gZmQgKi8KKyNkZWZpbmUJRl9SU0VUTEtXIAkxMwkvKiBTZXQgb3IgQ2xlYXIgcmVtb3RlIHJlY29yZC1sb2NrKEJsb2NraW5nKSAqLworI2VuZGlmCS8qICFfUE9TSVhfU09VUkNFICovCisjaWZkZWYgX19DWUdXSU5fXworI2RlZmluZQlGX0RVUEZEX0NMT0VYRUMJMTQJLyogQXMgRl9EVVBGRCwgYnV0IHNldCBjbG9zZS1vbi1leGVjIGZsYWcgKi8KKyNlbmRpZgorCisvKiBmY250bCgyKSBmbGFncyAobF90eXBlIGZpZWxkIG9mIGZsb2NrIHN0cnVjdHVyZSkgKi8KKyNkZWZpbmUJRl9SRExDSwkJMQkvKiByZWFkIGxvY2sgKi8KKyNkZWZpbmUJRl9XUkxDSwkJMgkvKiB3cml0ZSBsb2NrICovCisjZGVmaW5lCUZfVU5MQ0sJCTMJLyogcmVtb3ZlIGxvY2socykgKi8KKyNpZm5kZWYJX1BPU0lYX1NPVVJDRQorI2RlZmluZQlGX1VOTEtTWVMJNAkvKiByZW1vdmUgcmVtb3RlIGxvY2tzIGZvciBhIGdpdmVuIHN5c3RlbSAqLworI2VuZGlmCS8qICFfUE9TSVhfU09VUkNFICovCisKKyNpZmRlZiBfX0NZR1dJTl9fCisvKiBTcGVjaWFsIGRlc2NyaXB0b3IgdmFsdWUgdG8gZGVub3RlIHRoZSBjd2QgaW4gY2FsbHMgdG8gb3BlbmF0KDIpIGV0Yy4gKi8KKyNkZWZpbmUgQVRfRkRDV0QgLTIKKworLyogRmxhZyB2YWx1ZXMgZm9yIGZhY2Nlc3NhdDIpIGV0IGFsLiAqLworI2RlZmluZSBBVF9FQUNDRVNTICAgICAgICAgICAgICAxCisjZGVmaW5lIEFUX1NZTUxJTktfTk9GT0xMT1cgICAgIDIKKyNkZWZpbmUgQVRfU1lNTElOS19GT0xMT1cgICAgICAgNAorI2RlZmluZSBBVF9SRU1PVkVESVIgICAgICAgICAgICA4CisjZW5kaWYKKworLyojaW5jbHVkZSA8c3lzL3N0ZHR5cGVzLmg+Ki8KKworI2lmbmRlZiBfX0NZR1dJTl9fCisvKiBmaWxlIHNlZ21lbnQgbG9ja2luZyBzZXQgZGF0YSB0eXBlIC0gaW5mb3JtYXRpb24gcGFzc2VkIHRvIHN5c3RlbSBieSB1c2VyICovCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0CWxfdHlwZTsJCS8qIEZfUkRMQ0ssIEZfV1JMQ0ssIG9yIEZfVU5MQ0sgKi8KKwlzaG9ydAlsX3doZW5jZTsJLyogZmxhZyB0byBjaG9vc2Ugc3RhcnRpbmcgb2Zmc2V0ICovCisJbG9uZwlsX3N0YXJ0OwkvKiByZWxhdGl2ZSBvZmZzZXQsIGluIGJ5dGVzICovCisJbG9uZwlsX2xlbjsJCS8qIGxlbmd0aCwgaW4gYnl0ZXM7IDAgbWVhbnMgbG9jayB0byBFT0YgKi8KKwlzaG9ydAlsX3BpZDsJCS8qIHJldHVybmVkIHdpdGggRl9HRVRMSyAqLworCXNob3J0CWxfeHh4OwkJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KK307CisjZW5kaWYgLyogX19DWUdXSU5fXyAqLworCisjaWZuZGVmCV9QT1NJWF9TT1VSQ0UKKy8qIGV4dGVuZGVkIGZpbGUgc2VnbWVudCBsb2NraW5nIHNldCBkYXRhIHR5cGUgKi8KK3N0cnVjdCBlZmxvY2sgeworCXNob3J0CWxfdHlwZTsJCS8qIEZfUkRMQ0ssIEZfV1JMQ0ssIG9yIEZfVU5MQ0sgKi8KKwlzaG9ydAlsX3doZW5jZTsJLyogZmxhZyB0byBjaG9vc2Ugc3RhcnRpbmcgb2Zmc2V0ICovCisJbG9uZwlsX3N0YXJ0OwkvKiByZWxhdGl2ZSBvZmZzZXQsIGluIGJ5dGVzICovCisJbG9uZwlsX2xlbjsJCS8qIGxlbmd0aCwgaW4gYnl0ZXM7IDAgbWVhbnMgbG9jayB0byBFT0YgKi8KKwlzaG9ydAlsX3BpZDsJCS8qIHJldHVybmVkIHdpdGggRl9HRVRMSyAqLworCXNob3J0CWxfeHh4OwkJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKwlsb25nCWxfcnBpZDsJCS8qIFJlbW90ZSBwcm9jZXNzIGlkIHdhbnRpbmcgdGhpcyBsb2NrICovCisJbG9uZwlsX3JzeXM7CQkvKiBSZW1vdGUgc3lzdGVtIGlkIHdhbnRpbmcgdGhpcyBsb2NrICovCit9OworI2VuZGlmCS8qICFfUE9TSVhfU09VUkNFICovCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CQkvKiBzaWdoLiBmb3IgdGhlIG1vZGUgYml0cyBmb3Igb3Blbi9jcmVhdCAqLworCitleHRlcm4gaW50IG9wZW4gX1BBUkFNUyAoKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pKTsKK2V4dGVybiBpbnQgY3JlYXQgX1BBUkFNUyAoKGNvbnN0IGNoYXIgKiwgbW9kZV90KSk7CitleHRlcm4gaW50IGZjbnRsIF9QQVJBTVMgKChpbnQsIGludCwgLi4uKSk7CisjaWZkZWYgX19DWUdXSU5fXworI2luY2x1ZGUgPHN5cy90aW1lLmg+CitleHRlcm4gaW50IGZ1dGltZXNhdCBfUEFSQU1TICgoaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1ldmFsICopKTsKK2V4dGVybiBpbnQgb3BlbmF0IF9QQVJBTVMgKChpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pKTsKKyNlbmRpZgorCisvKiBQcm92aWRlIF88c3lzdGVtY2FsbD4gcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHNvbWUgdmVyc2lvbnMKKyAgIG9mIG5ld2xpYi4gICovCisjaWZkZWYgX0NPTVBJTElOR19ORVdMSUIKK2V4dGVybiBpbnQgX29wZW4gX1BBUkFNUyAoKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pKTsKK2V4dGVybiBpbnQgX2ZjbnRsIF9QQVJBTVMgKChpbnQsIGludCwgLi4uKSk7CisjaWZkZWYgX19MQVJHRTY0X0ZJTEVTCitleHRlcm4gaW50IF9vcGVuNjQgX1BBUkFNUyAoKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYJLyogIV9TWVNfX0RFRkFVTFRfRkNOVExfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvX3R5cGVzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YmMyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL190eXBlcy5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFOU0kgQyBuYW1lc3BhY2UgY2xlYW4gdXRpbGl0eSB0eXBlZGVmcyAqLworCisvKiBUaGlzIGZpbGUgZGVmaW5lcyB2YXJpb3VzIHR5cGVkZWZzIG5lZWRlZCBieSB0aGUgc3lzdGVtIGNhbGxzIHRoYXQgc3VwcG9ydAorICAgdGhlIEMgbGlicmFyeS4gIEJhc2ljYWxseSwgdGhleSdyZSBqdXN0IHRoZSBQT1NJWCB2ZXJzaW9ucyB3aXRoIGFuICdfJworICAgcHJlcGVuZGVkLiAgVGhpcyBmaWxlIGxpdmVzIGluIHRoZSBgc3lzJyBkaXJlY3Rvcnkgc28gdGFyZ2V0cyBjYW4gcHJvdmlkZQorICAgdGhlaXIgb3duIGlmIGRlc2lyZWQgKG9yIHRoZXkgY2FuIHB1dCB0YXJnZXQgZGVwZW5kYW50IGNvbmRpdGlvbmFscyBoZXJlKS4KKyovCisKKyNpZm5kZWYJX1NZU19fVFlQRVNfSAorI2RlZmluZSBfU1lTX19UWVBFU19ICisKKyNpbmNsdWRlIDxtYWNoaW5lL190eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisKKyNpZm5kZWYgX19vZmZfdF9kZWZpbmVkCit0eXBlZGVmIGxvbmcgX29mZl90OworI2VuZGlmCisKKyNpZm5kZWYgX19kZXZfdF9kZWZpbmVkCit0eXBlZGVmIHNob3J0IF9fZGV2X3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX3VpZF90X2RlZmluZWQKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191aWRfdDsKKyNlbmRpZgorI2lmbmRlZiBfX2dpZF90X2RlZmluZWQKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19naWRfdDsKKyNlbmRpZgorCisjaWZuZGVmIF9fb2ZmNjRfdF9kZWZpbmVkCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9vZmY2NF90OworI2VuZGlmCisKKy8qCisgKiBXZSBuZWVkIGZwb3NfdCBmb3IgdGhlIGZvbGxvd2luZywgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhIGxlYWRpbmcgIl8iLAorICogc28gd2UgdXNlIF9mcG9zX3QgaW5zdGVhZC4KKyAqLworI2lmbmRlZiBfX2Zwb3NfdF9kZWZpbmVkCit0eXBlZGVmIGxvbmcgX2Zwb3NfdDsJCS8qIFhYWCBtdXN0IG1hdGNoIG9mZl90IGluIDxzeXMvdHlwZXMuaD4gKi8KKwkJCQkvKiAoYW5kIG11c3QgYmUgYGxvbmcnIGZvciBub3cpICovCisjZW5kaWYKKworI2lmZGVmIF9fTEFSR0U2NF9GSUxFUworI2lmbmRlZiBfX2Zwb3M2NF90X2RlZmluZWQKK3R5cGVkZWYgX29mZjY0X3QgX2Zwb3M2NF90OworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfX3NzaXplX3RfZGVmaW5lZAorI2lmZGVmIF9fU0laRV9UWVBFX18KKy8qIElmIF9fU0laRV9UWVBFX18gaXMgZGVmaW5lZCAoZ2NjKSB3ZSBkZWZpbmUgc3NpemVfdCBiYXNlZCBvbiBzaXplX3QuCisgICBXZSBzaW1wbHkgY2hhbmdlICJ1bnNpZ25lZCIgdG8gInNpZ25lZCIgZm9yIHRoaXMgc2luZ2xlIGRlZmluaXRpb24KKyAgIHRvIG1ha2Ugc3VyZSBzc2l6ZV90IGFuZCBzaXplX3Qgb25seSBkaWZmZXIgYnkgdGhlaXIgc2lnbmVkbmVzcy4gKi8KKyNkZWZpbmUgdW5zaWduZWQgc2lnbmVkCit0eXBlZGVmIF9fU0laRV9UWVBFX18gX3NzaXplX3Q7CisjdW5kZWYgdW5zaWduZWQKKyNlbHNlCisjaWYgZGVmaW5lZChfX0lOVF9NQVhfXykgJiYgX19JTlRfTUFYX18gPT0gMjE0NzQ4MzY0NwordHlwZWRlZiBpbnQgX3NzaXplX3Q7CisjZWxzZQordHlwZWRlZiBsb25nIF9zc2l6ZV90OworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIF9fbmVlZF93aW50X3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmbmRlZiBfX21ic3RhdGVfdF9kZWZpbmVkCisvKiBDb252ZXJzaW9uIHN0YXRlIGluZm9ybWF0aW9uLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGludCBfX2NvdW50OworICB1bmlvbgorICB7CisgICAgd2ludF90IF9fd2NoOworICAgIHVuc2lnbmVkIGNoYXIgX193Y2hiWzRdOworICB9IF9fdmFsdWU7CQkvKiBWYWx1ZSBzbyBmYXIuICAqLworfSBfbWJzdGF0ZV90OworI2VuZGlmCisKKyNpZm5kZWYgX19mbG9ja190X2RlZmluZWQKK3R5cGVkZWYgX0xPQ0tfUkVDVVJTSVZFX1QgX2Zsb2NrX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX2ljb252X3RfZGVmaW5lZAorLyogSWNvbnYgZGVzY3JpcHRvciB0eXBlICovCit0eXBlZGVmIHZvaWQgKl9pY29udl90OworI2VuZGlmCisKKyNlbmRpZgkvKiBfU1lTX19UWVBFU19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2NkZWZzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2NkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2MTY4MwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvY2RlZnMuaApAQCAtMCwwICsxLDcwNCBAQAorLyogbGliYy9zeXMvbGludXgvc3lzL2NkZWZzLmggLSBIZWxwZXIgbWFjcm9zIGZvciBLJlIgdnMuIEFOU0kgQyBjb21wYXQuICovCisKKy8qIFdyaXR0ZW4gMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEJlcmtlbGV5IFNvZnR3YXJlIERlc2lnbiwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpY2RlZnMuaAk4LjggKEJlcmtlbGV5KSAxLzkvOTUKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYJX1NZU19DREVGU19IXworI2RlZmluZQlfU1lTX0NERUZTX0hfCisKKyNpbmNsdWRlIDxzeXMvZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBfX1BNVChhcmdzKQlhcmdzCisjZGVmaW5lIF9fRE9UUyAgICAJLCAuLi4KKyNkZWZpbmUgX19USFJPVworCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIF9fQVNNTkFNRShjbmFtZSkgIF9fWFNUUklORyAoX19VU0VSX0xBQkVMX1BSRUZJWF9fKSBjbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgX19wdHJfdCB2b2lkICoKKyNkZWZpbmUgX19sb25nX2RvdWJsZV90ICBsb25nIGRvdWJsZQorCisjZGVmaW5lIF9fYXR0cmlidXRlX21hbGxvY19fCisjZGVmaW5lIF9fYXR0cmlidXRlX3B1cmVfXworI2RlZmluZSBfX2F0dHJpYnV0ZV9mb3JtYXRfc3RyZm1vbl9fKGEsYikKKyNkZWZpbmUgX19mbGV4YXJyICAgICAgWzBdCisKKyNpZm5kZWYgX19CT1VOREVEX1BPSU5URVJTX18KKyMgZGVmaW5lIF9fYm91bmRlZCAgICAgIC8qIG5vdGhpbmcgKi8KKyMgZGVmaW5lIF9fdW5ib3VuZGVkICAgIC8qIG5vdGhpbmcgKi8KKyMgZGVmaW5lIF9fcHRydmFsdWUgICAgIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisvKgorICogVGVzdGluZyBhZ2FpbnN0IENsYW5nLXNwZWNpZmljIGV4dGVuc2lvbnMuCisgKi8KKworI2lmbmRlZglfX2hhc19leHRlbnNpb24KKyNkZWZpbmUJX19oYXNfZXh0ZW5zaW9uCQlfX2hhc19mZWF0dXJlCisjZW5kaWYKKyNpZm5kZWYJX19oYXNfZmVhdHVyZQorI2RlZmluZQlfX2hhc19mZWF0dXJlKHgpCTAKKyNlbmRpZgorI2lmbmRlZglfX2hhc19pbmNsdWRlCisjZGVmaW5lCV9faGFzX2luY2x1ZGUoeCkJMAorI2VuZGlmCisjaWZuZGVmCV9faGFzX2J1aWx0aW4KKyNkZWZpbmUJX19oYXNfYnVpbHRpbih4KQkwCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lCV9fQkVHSU5fREVDTFMJZXh0ZXJuICJDIiB7CisjZGVmaW5lCV9fRU5EX0RFQ0xTCX0KKyNlbHNlCisjZGVmaW5lCV9fQkVHSU5fREVDTFMKKyNkZWZpbmUJX19FTkRfREVDTFMKKyNlbmRpZgorCisvKgorICogVGhpcyBjb2RlIGhhcyBiZWVuIHB1dCBpbiBwbGFjZSB0byBoZWxwIHJlZHVjZSB0aGUgYWRkaXRpb24gb2YKKyAqIGNvbXBpbGVyIHNwZWNpZmljIGRlZmluZXMgaW4gRnJlZUJTRCBjb2RlLiAgSXQgaGVscHMgdG8gYWlkIGluCisgKiBoYXZpbmcgYSBjb21waWxlci1hZ25vc3RpYyBzb3VyY2UgdHJlZS4KKyAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorCisjaWYgX19HTlVDX18gPj0gMyB8fCBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCisjZGVmaW5lIF9fR05VQ0xJS0VfQVNNIDMKKyNkZWZpbmUgX19HTlVDTElLRV9NQVRIX0JVSUxUSU5fQ09OU1RBTlRTCisjZWxzZQorI2RlZmluZSBfX0dOVUNMSUtFX0FTTSAyCisjZW5kaWYKKyNkZWZpbmUgX19HTlVDTElLRV9fX1RZUEVPRiAxCisjZGVmaW5lIF9fR05VQ0xJS0VfX19PRkZTRVRPRiAxCisjZGVmaW5lIF9fR05VQ0xJS0VfX19TRUNUSU9OIDEKKworI2lmbmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjIGRlZmluZSBfX0dOVUNMSUtFX0NUT1JfU0VDVElPTl9IQU5ETElORyAxCisjZW5kaWYKKworI2RlZmluZSBfX0dOVUNMSUtFX0JVSUxUSU5fQ09OU1RBTlRfUCAxCisjIGlmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykgXAorICAgICYmIF9fSU5URUxfQ09NUElMRVIgPCA4MDAKKyMgIHVuZGVmIF9fR05VQ0xJS0VfQlVJTFRJTl9DT05TVEFOVF9QCisjIGVuZGlmCisKKyNpZiAoX19HTlVDX01JTk9SX18gPiA5NSB8fCBfX0dOVUNfXyA+PSAzKSAmJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorIyBkZWZpbmUgX19HTlVDTElLRV9CVUlMVElOX1ZBUkFSR1MgMQorIyBkZWZpbmUgX19HTlVDTElLRV9CVUlMVElOX1NUREFSRyAxCisjIGRlZmluZSBfX0dOVUNMSUtFX0JVSUxUSU5fVkFBTElTVCAxCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjIGRlZmluZSBfX0dOVUNfVkFfTElTVF9DT01QQVRJQklMSVRZIDEKKyNlbmRpZgorCisvKgorICogQ29tcGlsZXIgbWVtb3J5IGJhcnJpZXJzLCBzcGVjaWZpYyB0byBnY2MgYW5kIGNsYW5nLgorICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKyNkZWZpbmUJX19jb21waWxlcl9tZW1iYXIoKQlfX2FzbSBfX3ZvbGF0aWxlKCIgIiA6IDogOiAibWVtb3J5IikKKyNlbmRpZgorCisjaWZuZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgZGVmaW5lIF9fR05VQ0xJS0VfQlVJTFRJTl9ORVhUX0FSRyAxCisjIGRlZmluZSBfX0dOVUNMSUtFX01BVEhfQlVJTFRJTl9SRUxPUFMKKyNlbmRpZgorCisjZGVmaW5lIF9fR05VQ0xJS0VfQlVJTFRJTl9NRU1DUFkgMQorCisvKiBYWFg6IGlmIF9fR05VQ19fID49IDI6IG5vdCB0ZXN0ZWQgZXZlcnl3aGVyZSBvcmlnaW5hbGx5LCB3aGVyZSByZXBsYWNlZCAqLworI2RlZmluZSBfX0NDX1NVUFBPUlRTX0lOTElORSAxCisjZGVmaW5lIF9fQ0NfU1VQUE9SVFNfX19JTkxJTkUgMQorI2RlZmluZSBfX0NDX1NVUFBPUlRTX19fSU5MSU5FX18gMQorCisjZGVmaW5lIF9fQ0NfU1VQUE9SVFNfX19GVU5DX18gMQorI2RlZmluZSBfX0NDX1NVUFBPUlRTX1dBUk5JTkcgMQorCisjZGVmaW5lIF9fQ0NfU1VQUE9SVFNfVkFSQURJQ19YWFggMSAvKiBzZWUgdmFyYXJncy5oICovCisKKyNkZWZpbmUgX19DQ19TVVBQT1JUU19EWU5BTUlDX0FSUkFZX0lOSVQgMQorCisjZW5kaWYgLyogX19HTlVDX18gfHwgX19JTlRFTF9DT01QSUxFUiAqLworCisvKgorICogVGhlIF9fQ09OQ0FUIG1hY3JvIGlzIHVzZWQgdG8gY29uY2F0ZW5hdGUgcGFydHMgb2Ygc3ltYm9sIG5hbWVzLCBlLmcuCisgKiB3aXRoICIjZGVmaW5lIE9MRChmb28pIF9fQ09OQ0FUKG9sZCxmb28pIiwgT0xEKGZvbykgcHJvZHVjZXMgb2xkZm9vLgorICogVGhlIF9fQ09OQ0FUIG1hY3JvIGlzIGEgYml0IHRyaWNreSB0byB1c2UgaWYgaXQgbXVzdCB3b3JrIGluIG5vbi1BTlNJCisgKiBtb2RlIC0tIHRoZXJlIG11c3QgYmUgbm8gc3BhY2VzIGJldHdlZW4gaXRzIGFyZ3VtZW50cywgYW5kIGZvciBuZXN0ZWQKKyAqIF9fQ09OQ0FUJ3MsIGFsbCB0aGUgX19DT05DQVQncyBtdXN0IGJlIGF0IHRoZSBsZWZ0LiAgX19DT05DQVQgY2FuIGFsc28KKyAqIGNvbmNhdGVuYXRlIGRvdWJsZS1xdW90ZWQgc3RyaW5ncyBwcm9kdWNlZCBieSB0aGUgX19TVFJJTkcgbWFjcm8sIGJ1dAorICogdGhpcyBvbmx5IHdvcmtzIHdpdGggQU5TSSBDLgorICoKKyAqIF9fWFNUUklORyBpcyBsaWtlIF9fU1RSSU5HLCBidXQgaXQgZXhwYW5kcyBhbnkgbWFjcm9zIGluIGl0cyBhcmd1bWVudAorICogZmlyc3QuICBJdCBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIEFOU0kgQy4KKyAqLworI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lCV9fUChwcm90b3MpCXByb3RvcwkJLyogZnVsbC1ibG93biBBTlNJIEMgKi8KKyNkZWZpbmUJX19DT05DQVQxKHgseSkJeCAjIyB5CisjZGVmaW5lCV9fQ09OQ0FUKHgseSkJX19DT05DQVQxKHgseSkKKyNkZWZpbmUJX19TVFJJTkcoeCkJI3gJCS8qIHN0cmluZ2lmeSB3aXRob3V0IGV4cGFuZGluZyB4ICovCisjZGVmaW5lCV9fWFNUUklORyh4KQlfX1NUUklORyh4KQkvKiBleHBhbmQgeCwgdGhlbiBzdHJpbmdpZnkgKi8KKworI2RlZmluZQlfX2NvbnN0CQljb25zdAkJLyogZGVmaW5lIHJlc2VydmVkIG5hbWVzIHRvIHN0YW5kYXJkICovCisjZGVmaW5lCV9fc2lnbmVkCXNpZ25lZAorI2RlZmluZQlfX3ZvbGF0aWxlCXZvbGF0aWxlCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUJX19pbmxpbmUJaW5saW5lCQkvKiBjb252ZXJ0IHRvIEMrKyBrZXl3b3JkICovCisjZWxzZQorI2lmICEoZGVmaW5lZChfX0NDX1NVUFBPUlRTX19fSU5MSU5FKSkKKyNkZWZpbmUJX19pbmxpbmUJCQkvKiBkZWxldGUgR0NDIGtleXdvcmQgKi8KKyNlbmRpZiAvKiAhIF9fQ0NfU1VQUE9SVFNfX19JTkxJTkUgKi8KKyNlbmRpZiAvKiAhX19jcGx1c3BsdXMgKi8KKworI2Vsc2UJLyogIShfX1NURENfXyB8fCBfX2NwbHVzcGx1cykgKi8KKyNkZWZpbmUJX19QKHByb3RvcykJKCkJCS8qIHRyYWRpdGlvbmFsIEMgcHJlcHJvY2Vzc29yICovCisjZGVmaW5lCV9fQ09OQ0FUKHgseSkJeC8qKi95CisjZGVmaW5lCV9fU1RSSU5HKHgpCSJ4IgorCisjaWYgIWRlZmluZWQoX19DQ19TVVBQT1JUU19fX0lOTElORSkKKyNkZWZpbmUJX19jb25zdAkJCQkvKiBkZWxldGUgcHNldWRvLUFOU0kgQyBrZXl3b3JkcyAqLworI2RlZmluZQlfX2lubGluZQorI2RlZmluZQlfX3NpZ25lZAorI2RlZmluZQlfX3ZvbGF0aWxlCisvKgorICogSW4gbm9uLUFOU0kgQyBlbnZpcm9ubWVudHMsIG5ldyBwcm9ncmFtcyB3aWxsIHdhbnQgQU5TSS1vbmx5IEMga2V5d29yZHMKKyAqIGRlbGV0ZWQgZnJvbSB0aGUgcHJvZ3JhbSBhbmQgb2xkIHByb2dyYW1zIHdpbGwgd2FudCB0aGVtIGxlZnQgYWxvbmUuCisgKiBXaGVuIHVzaW5nIGEgY29tcGlsZXIgb3RoZXIgdGhhbiBnY2MsIHByb2dyYW1zIHVzaW5nIHRoZSBBTlNJIEMga2V5d29yZHMKKyAqIGNvbnN0LCBpbmxpbmUgZXRjLiBhcyBub3JtYWwgaWRlbnRpZmllcnMgc2hvdWxkIGRlZmluZSAtRE5PX0FOU0lfS0VZV09SRFMuCisgKiBXaGVuIHVzaW5nICJnY2MgLXRyYWRpdGlvbmFsIiwgd2UgYXNzdW1lIHRoYXQgdGhpcyBpcyB0aGUgaW50ZW50OyBpZgorICogX19HTlVDX18gaXMgZGVmaW5lZCBidXQgX19TVERDX18gaXMgbm90LCB3ZSBsZWF2ZSB0aGUgbmV3IGtleXdvcmRzIGFsb25lLgorICovCisjaWZuZGVmCU5PX0FOU0lfS0VZV09SRFMKKyNkZWZpbmUJY29uc3QJCQkJLyogZGVsZXRlIEFOU0kgQyBrZXl3b3JkcyAqLworI2RlZmluZQlpbmxpbmUKKyNkZWZpbmUJc2lnbmVkCisjZGVmaW5lCXZvbGF0aWxlCisjZW5kaWYJLyogIU5PX0FOU0lfS0VZV09SRFMgKi8KKyNlbmRpZgkvKiAhX19DQ19TVVBQT1JUU19fX0lOTElORSAqLworI2VuZGlmCS8qICEoX19TVERDX18gfHwgX19jcGx1c3BsdXMpICovCisKKy8qCisgKiBDb21waWxlci1kZXBlbmRlbnQgbWFjcm9zIHRvIGhlbHAgZGVjbGFyZSBkZWFkIChub24tcmV0dXJuaW5nKSBhbmQKKyAqIHB1cmUgKG5vIHNpZGUgZWZmZWN0cykgZnVuY3Rpb25zLCBhbmQgdW51c2VkIHZhcmlhYmxlcy4gIFRoZXkgYXJlCisgKiBudWxsIGV4Y2VwdCBmb3IgdmVyc2lvbnMgb2YgZ2NjIHRoYXQgYXJlIGtub3duIHRvIHN1cHBvcnQgdGhlIGZlYXR1cmVzCisgKiBwcm9wZXJseSAob2xkIHZlcnNpb25zIG9mIGdjYy0yIHN1cHBvcnRlZCB0aGUgZGVhZCBhbmQgcHVyZSBmZWF0dXJlcworICogaW4gYSBkaWZmZXJlbnQgKHdyb25nKSB3YXkpLiAgSWYgd2UgZG8gbm90IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24KKyAqIGZvciBhIGdpdmVuIGNvbXBpbGVyLCBsZXQgdGhlIGNvbXBpbGUgZmFpbCBpZiBpdCBpcyB0b2xkIHRvIHVzZQorICogYSBmZWF0dXJlIHRoYXQgd2UgY2Fubm90IGxpdmUgd2l0aG91dC4KKyAqLworI2lmZGVmIGxpbnQKKyNkZWZpbmUJX19kZWFkMgorI2RlZmluZQlfX3B1cmUyCisjZGVmaW5lCV9fdW51c2VkCisjZGVmaW5lCV9fcGFja2VkCisjZGVmaW5lCV9fYWxpZ25lZCh4KQorI2RlZmluZQlfX3NlY3Rpb24oeCkKKyNlbHNlCisjaWYgIV9fR05VQ19QUkVSRVFfXygyLCA1KSAmJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZQlfX2RlYWQyCisjZGVmaW5lCV9fcHVyZTIKKyNkZWZpbmUJX191bnVzZWQKKyNlbmRpZgorI2lmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNSAmJiBfX0dOVUNfTUlOT1JfXyA8IDcgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUJX19kZWFkMgkJX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKyNkZWZpbmUJX19wdXJlMgkJX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkKKyNkZWZpbmUJX191bnVzZWQKKy8qIFhYWCBGaW5kIG91dCB3aGF0IHRvIGRvIGZvciBfX3BhY2tlZCwgX19hbGlnbmVkIGFuZCBfX3NlY3Rpb24gKi8KKyNlbmRpZgorI2lmIF9fR05VQ19QUkVSRVFfXygyLCA3KQorI2RlZmluZQlfX2RlYWQyCQlfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2RlZmluZQlfX3B1cmUyCQlfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKQorI2RlZmluZQlfX3VudXNlZAlfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKyNkZWZpbmUJX191c2VkCQlfX2F0dHJpYnV0ZV9fKChfX3VzZWRfXykpCisjZGVmaW5lCV9fcGFja2VkCV9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKQorI2RlZmluZQlfX2FsaWduZWQoeCkJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oeCkpKQorI2RlZmluZQlfX3NlY3Rpb24oeCkJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oeCkpKQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBfX2RlYWQyCQlfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2RlZmluZSBfX3B1cmUyCQlfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKQorI2RlZmluZSBfX3VudXNlZAlfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKyNkZWZpbmUgX191c2VkCQlfX2F0dHJpYnV0ZV9fKChfX3VzZWRfXykpCisjZGVmaW5lIF9fcGFja2VkCV9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKQorI2RlZmluZSBfX2FsaWduZWQoeCkJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oeCkpKQorI2RlZmluZSBfX3NlY3Rpb24oeCkJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oeCkpKQorI2VuZGlmCisjZW5kaWYKKworI2lmICFfX0dOVUNfUFJFUkVRX18oMiwgOTUpCisjZGVmaW5lCV9fYWxpZ25vZih4KQlfX29mZnNldG9mKHN0cnVjdCB7IGNoYXIgX19hOyB4IF9fYjsgfSwgX19iKQorI2VuZGlmCisKKy8qCisgKiBLZXl3b3JkcyBhZGRlZCBpbiBDMTEuCisgKi8KKworI2lmICFkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pIHx8IF9fU1REQ19WRVJTSU9OX18gPCAyMDExMTJMCisKKyNpZiAhX19oYXNfZXh0ZW5zaW9uKGNfYWxpZ25hcykKKyNpZiAoZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTCkgfHwgXAorICAgIF9faGFzX2V4dGVuc2lvbihjeHhfYWxpZ25hcykKKyNkZWZpbmUJX0FsaWduYXMoeCkJCWFsaWduYXMoeCkKKyNlbHNlCisvKiBYWFg6IE9ubHkgZW11bGF0ZXMgX0FsaWduYXMoY29uc3RhbnQtZXhwcmVzc2lvbik7IG5vdCBfQWxpZ25hcyh0eXBlLW5hbWUpLiAqLworI2RlZmluZQlfQWxpZ25hcyh4KQkJX19hbGlnbmVkKHgpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorI2RlZmluZQlfQWxpZ25vZih4KQkJYWxpZ25vZih4KQorI2Vsc2UKKyNkZWZpbmUJX0FsaWdub2YoeCkJCV9fYWxpZ25vZih4KQorI2VuZGlmCisKKyNpZiAhX19oYXNfZXh0ZW5zaW9uKGNfYXRvbWljKSAmJiAhX19oYXNfZXh0ZW5zaW9uKGN4eF9hdG9taWMpCisvKgorICogTm8gbmF0aXZlIHN1cHBvcnQgZm9yIF9BdG9taWMoKS4gUGxhY2Ugb2JqZWN0IGluIHN0cnVjdHVyZSB0byBwcmV2ZW50CisgKiBtb3N0IGZvcm1zIG9mIGRpcmVjdCBub24tYXRvbWljIGFjY2Vzcy4KKyAqLworI2RlZmluZQlfQXRvbWljKFQpCQlzdHJ1Y3QgeyBUIHZvbGF0aWxlIF9fdmFsOyB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpICYmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNkZWZpbmUJX05vcmV0dXJuCQlbW25vcmV0dXJuXV0KKyNlbHNlCisjZGVmaW5lCV9Ob3JldHVybgkJX19kZWFkMgorI2VuZGlmCisKKyNpZiBfX0dOVUNfUFJFUkVRX18oNCwgNikgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpCisvKiAgRG8gbm90aGluZzogX1N0YXRpY19hc3NlcnQoKSB3b3JrcyBhcyBwZXIgQzExICovCisjZWxpZiAhX19oYXNfZXh0ZW5zaW9uKGNfc3RhdGljX2Fzc2VydCkKKyNpZiAoZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTCkgfHwgXAorICAgIF9faGFzX2V4dGVuc2lvbihjeHhfc3RhdGljX2Fzc2VydCkKKyNkZWZpbmUJX1N0YXRpY19hc3NlcnQoeCwgeSkJc3RhdGljX2Fzc2VydCh4LCB5KQorI2VsaWYgZGVmaW5lZChfX0NPVU5URVJfXykKKyNkZWZpbmUJX1N0YXRpY19hc3NlcnQoeCwgeSkJX19TdGF0aWNfYXNzZXJ0KHgsIF9fQ09VTlRFUl9fKQorI2RlZmluZQlfX1N0YXRpY19hc3NlcnQoeCwgeSkJX19fU3RhdGljX2Fzc2VydCh4LCB5KQorI2RlZmluZQlfX19TdGF0aWNfYXNzZXJ0KHgsIHkpCXR5cGVkZWYgY2hhciBfX2Fzc2VydF8gIyMgeVsoeCkgPyAxIDogLTFdCisjZWxzZQorI2RlZmluZQlfU3RhdGljX2Fzc2VydCh4LCB5KQlzdHJ1Y3QgX19oYWNrCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIV9faGFzX2V4dGVuc2lvbihjX3RocmVhZF9sb2NhbCkKKy8qIFhYWDogQ2hhbmdlIHRoaXMgdG8gdGVzdCBhZ2FpbnN0IEMrKzExIHdoZW4gY2xhbmcgaW4gYmFzZSBzdXBwb3J0cyBpdC4gKi8KKyNpZiAvKiAoZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTCkgfHwgKi8gXAorICAgIF9faGFzX2V4dGVuc2lvbihjeHhfdGhyZWFkX2xvY2FsKQorI2RlZmluZQlfVGhyZWFkX2xvY2FsCQl0aHJlYWRfbG9jYWwKKyNlbHNlCisjZGVmaW5lCV9UaHJlYWRfbG9jYWwJCV9fdGhyZWFkCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyB8fCBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEyTCAqLworCisvKgorICogRW11bGF0aW9uIG9mIEMxMSBfR2VuZXJpYygpLiAgVW5saWtlIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgQzExCisgKiBrZXl3b3JkcywgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIHVzaW5nIGV4YWN0bHkgdGhlIHNhbWUKKyAqIHN5bnRheC4gIFRoZXJlZm9yZSBpbXBsZW1lbnQgc29tZXRoaW5nIHNpbWlsYXIgdW5kZXIgdGhlIG5hbWUKKyAqIF9fZ2VuZXJpYygpLiAgVW5saWtlIF9HZW5lcmljKCksIHRoaXMgbWFjcm8gY2FuIG9ubHkgZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gYSBzaW5nbGUgdHlwZSwgc28gaXQgcmVxdWlyZXMgbmVzdGVkIGludm9jYXRpb25zIHRvCisgKiBkaXN0aW5ndWlzaCBtdWx0aXBsZSBjYXNlcy4KKyAqLworCisjaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwKKyNkZWZpbmUJX19nZW5lcmljKGV4cHIsIHQsIHllcywgbm8pCQkJCQlcCisJX0dlbmVyaWMoZXhwciwgdDogeWVzLCBkZWZhdWx0OiBubykKKyNlbGlmIF9fR05VQ19QUkVSRVFfXygzLCAxKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUJX19nZW5lcmljKGV4cHIsIHQsIHllcywgbm8pCQkJCQlcCisJX19idWlsdGluX2Nob29zZV9leHByKAkJCQkJCVwKKwkgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZihleHByKSwgdCksIHllcywgbm8pCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVFfXygyLCA5NikKKyNkZWZpbmUJX19tYWxsb2NfbGlrZQlfX2F0dHJpYnV0ZV9fKChfX21hbGxvY19fKSkKKyNkZWZpbmUJX19wdXJlCQlfX2F0dHJpYnV0ZV9fKChfX3B1cmVfXykpCisjZWxzZQorI2RlZmluZQlfX21hbGxvY19saWtlCisjZGVmaW5lCV9fcHVyZQorI2VuZGlmCisKKyNpZiBfX0dOVUNfUFJFUkVRX18oMywgMSkgfHwgKGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgX19JTlRFTF9DT01QSUxFUiA+PSA4MDApCisjZGVmaW5lCV9fYWx3YXlzX2lubGluZQlfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisjZWxzZQorI2RlZmluZQlfX2Fsd2F5c19pbmxpbmUKKyNlbmRpZgorCisjaWYgX19HTlVDX1BSRVJFUV9fKDMsIDEpCisjZGVmaW5lCV9fbm9pbmxpbmUJX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXykpCisjZWxzZQorI2RlZmluZQlfX25vaW5saW5lCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVFfXygzLCAzKQorI2RlZmluZSBfX25vbm51bGwoeCkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18oeCkpKQorI2Vsc2UKKyNkZWZpbmUgX19ub25udWxsKHgpCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVFfXygzLCA0KQorI2RlZmluZQlfX2Zhc3RjYWxsCV9fYXR0cmlidXRlX18oKF9fZmFzdGNhbGxfXykpCisjZWxzZQorI2RlZmluZQlfX2Zhc3RjYWxsCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVFfXyg0LCAxKQorI2RlZmluZQlfX3JldHVybnNfdHdpY2UJX19hdHRyaWJ1dGVfXygoX19yZXR1cm5zX3R3aWNlX18pKQorI2Vsc2UKKyNkZWZpbmUJX19yZXR1cm5zX3R3aWNlCisjZW5kaWYKKworLyogWFhYOiBzaG91bGQgdXNlIGAjaWYgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMScuICovCisjaWYgIV9fR05VQ19QUkVSRVFfXygyLCA3KSAmJiAhZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZQlfX2Z1bmNfXwlOVUxMCisjZW5kaWYKKworLyoKKyAqIEdDQyAyLjk1IHByb3ZpZGVzIGBfX3Jlc3RyaWN0JyBhcyBhbiBleHRlbnNpb24gdG8gQzkwIHRvIHN1cHBvcnQgdGhlCisgKiBDOTktc3BlY2lmaWMgYHJlc3RyaWN0JyB0eXBlIHF1YWxpZmllci4gIFdlIGhhcHBlbiB0byB1c2UgYF9fcmVzdHJpY3QnIGFzCisgKiBhIHdheSB0byBkZWZpbmUgdGhlIGByZXN0cmljdCcgdHlwZSBxdWFsaWZpZXIgd2l0aG91dCBkaXN0dXJiaW5nIG9sZGVyCisgKiBzb2Z0d2FyZSB0aGF0IGlzIHVuYXdhcmUgb2YgQzk5IGtleXdvcmRzLgorICovCisjaWYgIShfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID09IDk1KQorI2lmICFkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pIHx8IF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDEgfHwgZGVmaW5lZChsaW50KQorI2RlZmluZQlfX3Jlc3RyaWN0CisjZWxzZQorI2RlZmluZQlfX3Jlc3RyaWN0CXJlc3RyaWN0CisjZW5kaWYKKyNlbmRpZgorCisvKgorICogR05VIEMgdmVyc2lvbiAyLjk2IGFkZHMgZXhwbGljaXQgYnJhbmNoIHByZWRpY3Rpb24gc28gdGhhdAorICogdGhlIENQVSBiYWNrLWVuZCBjYW4gaGludCB0aGUgcHJvY2Vzc29yIGFuZCBhbHNvIHNvIHRoYXQKKyAqIGNvZGUgYmxvY2tzIGNhbiBiZSByZW9yZGVyZWQgc3VjaCB0aGF0IHRoZSBwcmVkaWN0ZWQgcGF0aAorICogc2VlcyBhIG1vcmUgbGluZWFyIGZsb3csIHRodXMgaW1wcm92aW5nIGNhY2hlIGJlaGF2aW9yLCBldGMuCisgKgorICogVGhlIGZvbGxvd2luZyB0d28gbWFjcm9zIHByb3ZpZGUgdXMgd2l0aCBhIHdheSB0byB1dGlsaXplIHRoaXMKKyAqIGNvbXBpbGVyIGZlYXR1cmUuICBVc2UgX19wcmVkaWN0X3RydWUoKSBpZiB5b3UgZXhwZWN0IHRoZSBleHByZXNzaW9uCisgKiB0byBldmFsdWF0ZSB0byB0cnVlLCBhbmQgX19wcmVkaWN0X2ZhbHNlKCkgaWYgeW91IGV4cGVjdCB0aGUKKyAqIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdG8gZmFsc2UuCisgKgorICogQSBmZXcgbm90ZXMgYWJvdXQgdXNhZ2U6CisgKgorICoJKiBHZW5lcmFsbHksIF9fcHJlZGljdF9mYWxzZSgpIGVycm9yIGNvbmRpdGlvbiBjaGVja3MgKHVubGVzcworICoJICB5b3UgaGF2ZSBzb21lIF9zdHJvbmdfIHJlYXNvbiB0byBkbyBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UKKyAqCSAgZG9jdW1lbnQgaXQpLCBhbmQvb3IgX19wcmVkaWN0X3RydWUoKSBgbm8tZXJyb3InIGNvbmRpdGlvbgorICoJICBjaGVja3MsIGFzc3VtaW5nIHlvdSB3YW50IHRvIG9wdGltaXplIGZvciB0aGUgbm8tZXJyb3IgY2FzZS4KKyAqCisgKgkqIE90aGVyIHRoYW4gdGhhdCwgaWYgeW91IGRvbid0IGtub3cgdGhlIGxpa2VsaWhvb2Qgb2YgYSB0ZXN0CisgKgkgIHN1Y2NlZWRpbmcgZnJvbSBlbXBpcmljYWwgb3Igb3RoZXIgYGhhcmQnIGV2aWRlbmNlLCBkb24ndAorICoJICBtYWtlIHByZWRpY3Rpb25zLgorICoKKyAqCSogVGhlc2UgYXJlIG1lYW50IHRvIGJlIHVzZWQgaW4gcGxhY2VzIHRoYXQgYXJlIHJ1biBgYSBsb3QnLgorICoJICBJdCBpcyB3YXN0ZWZ1bCB0byBtYWtlIHByZWRpY3Rpb25zIGluIGNvZGUgdGhhdCBpcyBydW4KKyAqCSAgc2VsZG9tbHkgKGUuZy4gYXQgc3Vic3lzdGVtIGluaXRpYWxpemF0aW9uIHRpbWUpIGFzIHRoZQorICoJICBiYXNpYyBibG9jayByZW9yZGVyaW5nIHRoYXQgdGhpcyBhZmZlY3RzIGNhbiBvZnRlbiBnZW5lcmF0ZQorICoJICBsYXJnZXIgY29kZS4KKyAqLworI2lmIF9fR05VQ19QUkVSRVFfXygyLCA5NikKKyNkZWZpbmUgX19wcmVkaWN0X3RydWUoZXhwKSAgICAgX19idWlsdGluX2V4cGVjdCgoZXhwKSwgMSkKKyNkZWZpbmUgX19wcmVkaWN0X2ZhbHNlKGV4cCkgICAgX19idWlsdGluX2V4cGVjdCgoZXhwKSwgMCkKKyNlbHNlCisjZGVmaW5lIF9fcHJlZGljdF90cnVlKGV4cCkgICAgIChleHApCisjZGVmaW5lIF9fcHJlZGljdF9mYWxzZShleHApICAgIChleHApCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVFfXyg0LCAyKQorI2RlZmluZQlfX2hpZGRlbglfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKQorI2RlZmluZQlfX2V4cG9ydGVkCV9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKQorI2Vsc2UKKyNkZWZpbmUJX19oaWRkZW4KKyNkZWZpbmUJX19leHBvcnRlZAorI2VuZGlmCisKKyNkZWZpbmUgX19vZmZzZXRvZih0eXBlLCBmaWVsZCkJb2Zmc2V0b2YodHlwZSwgZmllbGQpCisjZGVmaW5lCV9fcmFuZ2VvZih0eXBlLCBzdGFydCwgZW5kKSBcCisJKF9fb2Zmc2V0b2YodHlwZSwgZW5kKSAtIF9fb2Zmc2V0b2YodHlwZSwgc3RhcnQpKQorCisvKgorICogR2l2ZW4gdGhlIHBvaW50ZXIgeCB0byB0aGUgbWVtYmVyIG0gb2YgdGhlIHN0cnVjdCBzLCByZXR1cm4KKyAqIGEgcG9pbnRlciB0byB0aGUgY29udGFpbmluZyBzdHJ1Y3R1cmUuICBXaGVuIHVzaW5nIEdDQywgd2UgZmlyc3QKKyAqIGFzc2lnbiBwb2ludGVyIHggdG8gYSBsb2NhbCB2YXJpYWJsZSwgdG8gY2hlY2sgdGhhdCBpdHMgdHlwZSBpcworICogY29tcGF0aWJsZSB3aXRoIG1lbWJlciBtLgorICovCisjaWYgX19HTlVDX1BSRVJFUV9fKDMsIDEpCisjZGVmaW5lCV9fY29udGFpbmVyb2YoeCwgcywgbSkgKHsJCQkJCVwKKwljb25zdCB2b2xhdGlsZSBfX3R5cGVvZl9fKCgocyAqKTApLT5tKSAqX194ID0gKHgpOwkJXAorCV9fREVRVUFMSUZZKHMgKiwgKGNvbnN0IHZvbGF0aWxlIGNoYXIgKilfX3ggLSBfX29mZnNldG9mKHMsIG0pKTtcCit9KQorI2Vsc2UKKyNkZWZpbmUJX19jb250YWluZXJvZih4LCBzLCBtKQkJCQkJCVwKKwlfX0RFUVVBTElGWShzICosIChjb25zdCB2b2xhdGlsZSBjaGFyICopKHgpIC0gX19vZmZzZXRvZihzLCBtKSkKKyNlbmRpZgorCisvKgorICogQ29tcGlsZXItZGVwZW5kZW50IG1hY3JvcyB0byBkZWNsYXJlIHRoYXQgZnVuY3Rpb25zIHRha2UgcHJpbnRmLWxpa2UKKyAqIG9yIHNjYW5mLWxpa2UgYXJndW1lbnRzLiAgVGhleSBhcmUgbnVsbCBleGNlcHQgZm9yIHZlcnNpb25zIG9mIGdjYworICogdGhhdCBhcmUga25vd24gdG8gc3VwcG9ydCB0aGUgZmVhdHVyZXMgcHJvcGVybHkgKG9sZCB2ZXJzaW9ucyBvZiBnY2MtMgorICogZGlkbid0IHBlcm1pdCBrZWVwaW5nIHRoZSBrZXl3b3JkcyBvdXQgb2YgdGhlIGFwcGxpY2F0aW9uIG5hbWVzcGFjZSkuCisgKi8KKyNpZiAhX19HTlVDX1BSRVJFUV9fKDIsIDcpICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCisjZGVmaW5lCV9fcHJpbnRmbGlrZShmbXRhcmcsIGZpcnN0dmFyYXJnKQorI2RlZmluZQlfX3NjYW5mbGlrZShmbXRhcmcsIGZpcnN0dmFyYXJnKQorI2RlZmluZQlfX2Zvcm1hdF9hcmcoZm10YXJnKQorI2RlZmluZQlfX3N0cmZtb25saWtlKGZtdGFyZywgZmlyc3R2YXJhcmcpCisjZGVmaW5lCV9fc3RyZnRpbWVsaWtlKGZtdGFyZywgZmlyc3R2YXJhcmcpCisjZWxzZQorI2RlZmluZQlfX3ByaW50Zmxpa2UoZm10YXJnLCBmaXJzdHZhcmFyZykgXAorCSAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBmbXRhcmcsIGZpcnN0dmFyYXJnKSkpCisjZGVmaW5lCV9fc2NhbmZsaWtlKGZtdGFyZywgZmlyc3R2YXJhcmcpIFwKKwkgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19zY2FuZl9fLCBmbXRhcmcsIGZpcnN0dmFyYXJnKSkpCisjZGVmaW5lCV9fZm9ybWF0X2FyZyhmbXRhcmcpCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X2FyZ19fIChmbXRhcmcpKSkKKyNkZWZpbmUJX19zdHJmbW9ubGlrZShmbXRhcmcsIGZpcnN0dmFyYXJnKSBcCisJICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fc3RyZm1vbl9fLCBmbXRhcmcsIGZpcnN0dmFyYXJnKSkpCisjZGVmaW5lCV9fc3RyZnRpbWVsaWtlKGZtdGFyZywgZmlyc3R2YXJhcmcpIFwKKwkgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19zdHJmdGltZV9fLCBmbXRhcmcsIGZpcnN0dmFyYXJnKSkpCisjZW5kaWYKKworLyogQ29tcGlsZXItZGVwZW5kZW50IG1hY3JvcyB0aGF0IHJlbHkgb24gRnJlZUJTRC1zcGVjaWZpYyBleHRlbnNpb25zLiAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX2NjX3ZlcnNpb24pICYmIF9fRnJlZUJTRF9jY192ZXJzaW9uID49IDMwMDAwMSAmJiBcCisgICAgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUJX19wcmludGYwbGlrZShmbXRhcmcsIGZpcnN0dmFyYXJnKSBcCisJICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmMF9fLCBmbXRhcmcsIGZpcnN0dmFyYXJnKSkpCisjZWxzZQorI2RlZmluZQlfX3ByaW50ZjBsaWtlKGZtdGFyZywgZmlyc3R2YXJhcmcpCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyNpZm5kZWYgX19JTlRFTF9DT01QSUxFUgorI2RlZmluZQlfX3N0cm9uZ19yZWZlcmVuY2Uoc3ltLGFsaWFzc3ltKQlcCisJZXh0ZXJuIF9fdHlwZW9mIChzeW0pIGFsaWFzc3ltIF9fYXR0cmlidXRlX18gKChfX2FsaWFzX18gKCNzeW0pKSkKKyNlbmRpZgorI2lmZGVmIF9fRUxGX18KKyNpZmRlZiBfX1NURENfXworI2RlZmluZQlfX3dlYWtfcmVmZXJlbmNlKHN5bSxhbGlhcykJXAorCV9fYXNtX18oIi53ZWFrICIgI2FsaWFzKTsJXAorCV9fYXNtX18oIi5lcXUgIiAgI2FsaWFzICIsICIgI3N5bSkKKyNkZWZpbmUJX193YXJuX3JlZmVyZW5jZXMoc3ltLG1zZykJXAorCV9fYXNtX18oIi5zZWN0aW9uIC5nbnUud2FybmluZy4iICNzeW0pOwlcCisJX19hc21fXygiLmFzY2l6IFwiIiBtc2cgIlwiIik7CVwKKwlfX2FzbV9fKCIucHJldmlvdXMiKQorI2RlZmluZQlfX3N5bV9jb21wYXQoc3ltLGltcGwsdmVyaWQpCVwKKwlfX2FzbV9fKCIuc3ltdmVyICIgI2ltcGwgIiwgIiAjc3ltICJAIiAjdmVyaWQpCisjZGVmaW5lCV9fc3ltX2RlZmF1bHQoc3ltLGltcGwsdmVyaWQpCVwKKwlfX2FzbV9fKCIuc3ltdmVyICIgI2ltcGwgIiwgIiAjc3ltICJAQCIgI3ZlcmlkKQorI2Vsc2UKKyNkZWZpbmUJX193ZWFrX3JlZmVyZW5jZShzeW0sYWxpYXMpCVwKKwlfX2FzbV9fKCIud2VhayBhbGlhcyIpOwkJXAorCV9fYXNtX18oIi5lcXUgYWxpYXMsIHN5bSIpCisjZGVmaW5lCV9fd2Fybl9yZWZlcmVuY2VzKHN5bSxtc2cpCVwKKwlfX2FzbV9fKCIuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3ltIik7IFwKKwlfX2FzbV9fKCIuYXNjaXogXCJtc2dcIiIpOwlcCisJX19hc21fXygiLnByZXZpb3VzIikKKyNkZWZpbmUJX19zeW1fY29tcGF0KHN5bSxpbXBsLHZlcmlkKQlcCisJX19hc21fXygiLnN5bXZlciBpbXBsLCBzeW1AdmVyaWQiKQorI2RlZmluZQlfX3N5bV9kZWZhdWx0KGltcGwsc3ltLHZlcmlkKQlcCisJX19hc21fXygiLnN5bXZlciBpbXBsLCBzeW1AQHZlcmlkIikKKyNlbmRpZgkvKiBfX1NURENfXyAqLworI2Vsc2UJLyogIV9fRUxGX18gKi8KKyNpZmRlZiBfX1NURENfXworI2RlZmluZQlfX3dlYWtfcmVmZXJlbmNlKHN5bSxhbGlhcykJXAorCV9fYXNtX18oIi5zdGFicyBcIl8iICNhbGlhcyAiXCIsMTEsMCwwLDAiKTsJXAorCV9fYXNtX18oIi5zdGFicyBcIl8iICNzeW0gIlwiLDEsMCwwLDAiKQorI2RlZmluZQlfX3dhcm5fcmVmZXJlbmNlcyhzeW0sbXNnKQlcCisJX19hc21fXygiLnN0YWJzIFwiIiBtc2cgIlwiLDMwLDAsMCwwIik7CQlcCisJX19hc21fXygiLnN0YWJzIFwiXyIgI3N5bSAiXCIsMSwwLDAsMCIpCisjZWxzZQorI2RlZmluZQlfX3dlYWtfcmVmZXJlbmNlKHN5bSxhbGlhcykJXAorCV9fYXNtX18oIi5zdGFicyBcIl8vKiovYWxpYXNcIiwxMSwwLDAsMCIpOwlcCisJX19hc21fXygiLnN0YWJzIFwiXy8qKi9zeW1cIiwxLDAsMCwwIikKKyNkZWZpbmUJX193YXJuX3JlZmVyZW5jZXMoc3ltLG1zZykJXAorCV9fYXNtX18oIi5zdGFicyBtc2csMzAsMCwwLDAiKTsJCQlcCisJX19hc21fXygiLnN0YWJzIFwiXy8qKi9zeW1cIiwxLDAsMCwwIikKKyNlbmRpZgkvKiBfX1NURENfXyAqLworI2VuZGlmCS8qIF9fRUxGX18gKi8KKyNlbmRpZgkvKiBfX0dOVUNfXyB8fCBfX0lOVEVMX0NPTVBJTEVSICovCisKKyNpZm5kZWYJX19GQlNESUQKKyNkZWZpbmUJX19GQlNESUQocykJc3RydWN0IF9faGFjaworI2VuZGlmCisKKyNpZm5kZWYJX19SQ1NJRAorI2RlZmluZQlfX1JDU0lEKHMpCXN0cnVjdCBfX2hhY2sKKyNlbmRpZgorCisjaWZuZGVmCV9fUkNTSURfU09VUkNFCisjZGVmaW5lCV9fUkNTSURfU09VUkNFKHMpCXN0cnVjdCBfX2hhY2sKKyNlbmRpZgorCisjaWZuZGVmCV9fU0NDU0lECisjZGVmaW5lCV9fU0NDU0lEKHMpCXN0cnVjdCBfX2hhY2sKKyNlbmRpZgorCisjaWZuZGVmCV9fQ09QWVJJR0hUCisjZGVmaW5lCV9fQ09QWVJJR0hUKHMpCXN0cnVjdCBfX2hhY2sKKyNlbmRpZgorCisjaWZuZGVmCV9fREVDT05TVAorI2RlZmluZQlfX0RFQ09OU1QodHlwZSwgdmFyKQkoKHR5cGUpKHVpbnRwdHJfdCkoY29uc3Qgdm9pZCAqKSh2YXIpKQorI2VuZGlmCisKKyNpZm5kZWYJX19ERVZPTEFUSUxFCisjZGVmaW5lCV9fREVWT0xBVElMRSh0eXBlLCB2YXIpCSgodHlwZSkodWludHB0cl90KSh2b2xhdGlsZSB2b2lkICopKHZhcikpCisjZW5kaWYKKworI2lmbmRlZglfX0RFUVVBTElGWQorI2RlZmluZQlfX0RFUVVBTElGWSh0eXBlLCB2YXIpCSgodHlwZSkodWludHB0cl90KShjb25zdCB2b2xhdGlsZSB2b2lkICopKHZhcikpCisjZW5kaWYKKworLyotCisgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBhbiBleHRlbnNpb24gb2YgdGhlIGJlaGF2aW9yIG9yaWdpbmFsbHkKKyAqIGltcGxlbWVudGVkIGluIDxzeXMvX3Bvc2l4Lmg+LCBidXQgd2l0aCBhIGRpZmZlcmVudCBsZXZlbCBvZiBncmFudWxhcml0eS4KKyAqIFBPU0lYLjEgcmVxdWlyZXMgdGhhdCB0aGUgbWFjcm9zIHdlIHRlc3QgYmUgZGVmaW5lZCBiZWZvcmUgYW55IHN0YW5kYXJkCisgKiBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZC4KKyAqCisgKiBIZXJlJ3MgYSBxdWljayBydW4tZG93biBvZiB0aGUgdmVyc2lvbnM6CisgKiAgZGVmaW5lZChfUE9TSVhfU09VUkNFKQkJMTAwMy4xLTE5ODgKKyAqICBfUE9TSVhfQ19TT1VSQ0UgPT0gMQkJMTAwMy4xLTE5OTAKKyAqICBfUE9TSVhfQ19TT1VSQ0UgPT0gMgkJMTAwMy4yLTE5OTIgQyBMYW5ndWFnZSBCaW5kaW5nIE9wdGlvbgorICogIF9QT1NJWF9DX1NPVVJDRSA9PSAxOTkzMDkJCTEwMDMuMWItMTk5MworICogIF9QT1NJWF9DX1NPVVJDRSA9PSAxOTk1MDYJCTEwMDMuMWMtMTk5NSwgMTAwMy4xaS0xOTk1LAorICoJCQkJCWFuZCB0aGUgb21uaWJ1cyBJU08vSUVDIDk5NDUtMTogMTk5NgorICogIF9QT1NJWF9DX1NPVVJDRSA9PSAyMDAxMTIJCTEwMDMuMS0yMDAxCisgKiAgX1BPU0lYX0NfU09VUkNFID09IDIwMDgwOQkJMTAwMy4xLTIwMDgKKyAqCisgKiBJbiBhZGRpdGlvbiwgdGhlIFgvT3BlbiBQb3J0YWJpbGl0eSBHdWlkZSwgd2hpY2ggaXMgbm93IHRoZSBTaW5nbGUgVU5JWAorICogU3BlY2lmaWNhdGlvbiwgZGVmaW5lcyBhIGZlYXR1cmUtdGVzdCBtYWNybyB3aGljaCBpbmRpY2F0ZXMgdGhlIHZlcnNpb24gb2YKKyAqIHRoYXQgc3BlY2lmaWNhdGlvbiwgYW5kIHdoaWNoIHN1YnN1bWVzIF9QT1NJWF9DX1NPVVJDRS4KKyAqCisgKiBPdXIgbWFjcm9zIGJlZ2luIHdpdGggdHdvIHVuZGVyc2NvcmVzIHRvIGF2b2lkIG5hbWVzcGFjZSBzY3Jld2FnZS4KKyAqLworCisvKiBEZWFsIHdpdGggSUVFRSBTdGQuIDEwMDMuMS0xOTkwLCBpbiB3aGljaCBfUE9TSVhfQ19TT1VSQ0UgPT0gMS4gKi8KKyNpZiBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgJiYgX1BPU0lYX0NfU09VUkNFID09IDEKKyN1bmRlZiBfUE9TSVhfQ19TT1VSQ0UJCS8qIFByb2JhYmx5IGlsbGVnYWwsIGJ1dCBiZXlvbmQgY2FyaW5nIG5vdy4gKi8KKyNkZWZpbmUJX1BPU0lYX0NfU09VUkNFCQkxOTkwMDkKKyNlbmRpZgorCisvKiBEZWFsIHdpdGggSUVFRSBTdGQuIDEwMDMuMi0xOTkyLCBpbiB3aGljaCBfUE9TSVhfQ19TT1VSQ0UgPT0gMi4gKi8KKyNpZiBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgJiYgX1BPU0lYX0NfU09VUkNFID09IDIKKyN1bmRlZiBfUE9TSVhfQ19TT1VSQ0UKKyNkZWZpbmUJX1BPU0lYX0NfU09VUkNFCQkxOTkyMDkKKyNlbmRpZgorCisvKiBEZWFsIHdpdGggdmFyaW91cyBYL09wZW4gUG9ydGFiaWxpdHkgR3VpZGVzIGFuZCBTaW5nbGUgVU5JWCBTcGVjLiAqLworI2lmZGVmIF9YT1BFTl9TT1VSQ0UKKyNpZiBfWE9QRU5fU09VUkNFIC0gMCA+PSA3MDAKKyNkZWZpbmUJX19YU0lfVklTSUJMRQkJNzAwCisjdW5kZWYgX1BPU0lYX0NfU09VUkNFCisjZGVmaW5lCV9QT1NJWF9DX1NPVVJDRQkJMjAwODA5CisjZWxpZiBfWE9QRU5fU09VUkNFIC0gMCA+PSA2MDAKKyNkZWZpbmUJX19YU0lfVklTSUJMRQkJNjAwCisjdW5kZWYgX1BPU0lYX0NfU09VUkNFCisjZGVmaW5lCV9QT1NJWF9DX1NPVVJDRQkJMjAwMTEyCisjZWxpZiBfWE9QRU5fU09VUkNFIC0gMCA+PSA1MDAKKyNkZWZpbmUJX19YU0lfVklTSUJMRQkJNTAwCisjdW5kZWYgX1BPU0lYX0NfU09VUkNFCisjZGVmaW5lCV9QT1NJWF9DX1NPVVJDRQkJMTk5NTA2CisjZW5kaWYKKyNlbmRpZgorCisvKgorICogRGVhbCB3aXRoIGFsbCB2ZXJzaW9ucyBvZiBQT1NJWC4gIFRoZSBvcmRlcmluZyByZWxhdGl2ZSB0byB0aGUgdGVzdHMgYWJvdmUgaXMKKyAqIGltcG9ydGFudC4KKyAqLworI2lmIGRlZmluZWQoX1BPU0lYX1NPVVJDRSkgJiYgIWRlZmluZWQoX1BPU0lYX0NfU09VUkNFKQorI2RlZmluZQlfUE9TSVhfQ19TT1VSQ0UJCTE5ODgwOAorI2VuZGlmCisjaWZkZWYgX1BPU0lYX0NfU09VUkNFCisjaWYgX1BPU0lYX0NfU09VUkNFID49IDIwMDgwOQorI2RlZmluZQlfX1BPU0lYX1ZJU0lCTEUJCTIwMDgwOQorI2RlZmluZQlfX0lTT19DX1ZJU0lCTEUJCTE5OTkKKyNlbGlmIF9QT1NJWF9DX1NPVVJDRSA+PSAyMDAxMTIKKyNkZWZpbmUJX19QT1NJWF9WSVNJQkxFCQkyMDAxMTIKKyNkZWZpbmUJX19JU09fQ19WSVNJQkxFCQkxOTk5CisjZWxpZiBfUE9TSVhfQ19TT1VSQ0UgPj0gMTk5NTA2CisjZGVmaW5lCV9fUE9TSVhfVklTSUJMRQkJMTk5NTA2CisjZGVmaW5lCV9fSVNPX0NfVklTSUJMRQkJMTk5MAorI2VsaWYgX1BPU0lYX0NfU09VUkNFID49IDE5OTMwOQorI2RlZmluZQlfX1BPU0lYX1ZJU0lCTEUJCTE5OTMwOQorI2RlZmluZQlfX0lTT19DX1ZJU0lCTEUJCTE5OTAKKyNlbGlmIF9QT1NJWF9DX1NPVVJDRSA+PSAxOTkyMDkKKyNkZWZpbmUJX19QT1NJWF9WSVNJQkxFCQkxOTkyMDkKKyNkZWZpbmUJX19JU09fQ19WSVNJQkxFCQkxOTkwCisjZWxpZiBfUE9TSVhfQ19TT1VSQ0UgPj0gMTk5MDA5CisjZGVmaW5lCV9fUE9TSVhfVklTSUJMRQkJMTk5MDA5CisjZGVmaW5lCV9fSVNPX0NfVklTSUJMRQkJMTk5MAorI2Vsc2UKKyNkZWZpbmUJX19QT1NJWF9WSVNJQkxFCQkxOTg4MDgKKyNkZWZpbmUJX19JU09fQ19WSVNJQkxFCQkwCisjZW5kaWYgLyogX1BPU0lYX0NfU09VUkNFICovCisjZWxzZQorLyotCisgKiBEZWFsIHdpdGggX0FOU0lfU09VUkNFOgorICogSWYgaXQgaXMgZGVmaW5lZCwgYW5kIG5vIG90aGVyIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IGlzIGV4cGxpY2l0bHkKKyAqIHJlcXVlc3RlZCwgdGhlbiBkZWZpbmUgb3VyIGludGVybmFsIGZlYXR1cmUtdGVzdCBtYWNyb3MgdG8gemVyby4gIFRoaXMKKyAqIG1ha2VzIG5vIGRpZmZlcmVuY2UgdG8gdGhlIHByZXByb2Nlc3NvciAodW5kZWZpbmVkIHN5bWJvbHMgaW4gcHJlcHJvY2Vzc2luZworICogZXhwcmVzc2lvbnMgYXJlIGRlZmluZWQgdG8gaGF2ZSB2YWx1ZSB6ZXJvKSwgYnV0IG1ha2VzIGl0IG1vcmUgY29udmVuaWVudCBmb3IKKyAqIGEgdGVzdCBwcm9ncmFtIHRvIHByaW50IG91dCB0aGUgdmFsdWVzLgorICoKKyAqIElmIGEgcHJvZ3JhbSBtaXN0YWtlbmx5IGRlZmluZXMgX0FOU0lfU09VUkNFIGFuZCBzb21lIG90aGVyIG1hY3JvIHN1Y2ggYXMKKyAqIF9QT1NJWF9DX1NPVVJDRSwgd2Ugd2lsbCBhc3N1bWUgdGhhdCBpdCB3YW50cyB0aGUgYnJvYWRlciBjb21waWxhdGlvbgorICogZW52aXJvbm1lbnQgKGFuZCBpbiBmYWN0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUpLgorICovCisjaWYgZGVmaW5lZChfQU5TSV9TT1VSQ0UpCS8qIEhpZGUgYWxtb3N0IGV2ZXJ5dGhpbmcuICovCisjZGVmaW5lCV9fUE9TSVhfVklTSUJMRQkJMAorI2RlZmluZQlfX1hTSV9WSVNJQkxFCQkwCisjZGVmaW5lCV9fQlNEX1ZJU0lCTEUJCTAKKyNkZWZpbmUJX19JU09fQ19WSVNJQkxFCQkxOTkwCisjZWxpZiBkZWZpbmVkKF9DOTlfU09VUkNFKQkvKiBMb2NhbGlzbSB0byBzcGVjaWZ5IHN0cmljdCBDOTkgZW52LiAqLworI2RlZmluZQlfX1BPU0lYX1ZJU0lCTEUJCTAKKyNkZWZpbmUJX19YU0lfVklTSUJMRQkJMAorI2RlZmluZQlfX0JTRF9WSVNJQkxFCQkwCisjZGVmaW5lCV9fSVNPX0NfVklTSUJMRQkJMTk5OQorI2VsaWYgZGVmaW5lZChfQzExX1NPVVJDRSkJLyogTG9jYWxpc20gdG8gc3BlY2lmeSBzdHJpY3QgQzExIGVudi4gKi8KKyNkZWZpbmUJX19QT1NJWF9WSVNJQkxFCQkwCisjZGVmaW5lCV9fWFNJX1ZJU0lCTEUJCTAKKyNkZWZpbmUJX19CU0RfVklTSUJMRQkJMAorI2RlZmluZQlfX0lTT19DX1ZJU0lCTEUJCTIwMTEKKyNlbHNlCQkJCS8qIERlZmF1bHQgZW52aXJvbm1lbnQ6IHNob3cgZXZlcnl0aGluZy4gKi8KKyNkZWZpbmUJX19QT1NJWF9WSVNJQkxFCQkyMDA4MDkKKyNkZWZpbmUJX19YU0lfVklTSUJMRQkJNzAwCisjZGVmaW5lCV9fQlNEX1ZJU0lCTEUJCTEKKyNkZWZpbmUJX19JU09fQ19WSVNJQkxFCQkyMDExCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogIV9TWVNfQ0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvY29uZmlnLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZTNmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2NvbmZpZy5oCkBAIC0wLDAgKzEsMjgyIEBACisjaWZuZGVmIF9fU1lTX0NPTkZJR19IX18KKyNkZWZpbmUgX19TWVNfQ09ORklHX0hfXworCisjaW5jbHVkZSA8bWFjaGluZS9pZWVlZnAuaD4gIC8qIGZsb2F0aW5nIHBvaW50IG1hY3JvcyAqLworI2luY2x1ZGUgPHN5cy9mZWF0dXJlcy5oPgkvKiBQT1NJWCBkZWZzICovCisKKyNpZmRlZiBfX2FhcmNoNjRfXworI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UIDE2CisjZW5kaWYKKworLyogZXhjZXB0aW9ucyBmaXJzdCAqLworI2lmIGRlZmluZWQoX19IODUwMF9fKSB8fCBkZWZpbmVkKF9fVzY1X18pCisjZGVmaW5lIF9fU01BTExfQklURklFTERTCisvKiA/Pz8gIFRoaXMgY29uZGl0aW9uYWwgaXMgdHJ1ZSBmb3IgdGhlIGg4NTAwIGFuZCB0aGUgdzY1LCBkZWZpbmluZyBIODMwMAorICAgaW4gdGhvc2UgY2FzZXMgcHJvYmFibHkgaXNuJ3QgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLiAgKi8KKyNkZWZpbmUgSDgzMDAgMQorI2VuZGlmCisKKy8qIDE2IGJpdCBpbnRlZ2VyIG1hY2hpbmVzICovCisjaWYgZGVmaW5lZChfX1o4MDAxX18pIHx8IGRlZmluZWQoX19aODAwMl9fKSB8fCBkZWZpbmVkKF9fSDg1MDBfXykgfHwgZGVmaW5lZChfX1c2NV9fKSB8fCBkZWZpbmVkIChfX21uMTAyMDBfXykgfHwgZGVmaW5lZCAoX19BVlJfXykKKworI3VuZGVmIElOVF9NQVgKKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBJTlRfTUFYIDMyNzY3CisjZGVmaW5lIFVJTlRfTUFYIDY1NTM1CisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fSDgzMDBfXykgfHwgZGVmaW5lZCAoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKSB8fCBkZWZpbmVkIChfX0g4MzAwU1hfXykKKyNkZWZpbmUgX19TTUFMTF9CSVRGSUVMRFMKKyNkZWZpbmUgSDgzMDAgMQorI3VuZGVmIElOVF9NQVgKKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBJTlRfTUFYIF9fSU5UX01BWF9fCisjZGVmaW5lIFVJTlRfTUFYIChfX0lOVF9NQVhfXyAqIDJVICsgMSkKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX19DUjE2X18pIHx8IGRlZmluZWQoX19DUjE2Q19fKSB8fGRlZmluZWQoX19DUjE2Q1BfXykpCisjaWZuZGVmIF9fSU5UMzJfXworI2RlZmluZSBfX1NNQUxMX0JJVEZJRUxEUyAgICAgIAorI3VuZGVmIElOVF9NQVgKKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBJTlRfTUFYIDMyNzY3CisjZGVmaW5lIFVJTlRfTUFYIChfX0lOVF9NQVhfXyAqIDJVICsgMSkKKyNlbHNlIC8qIElOVDMyICovCisjdW5kZWYgSU5UX01BWAorI3VuZGVmIFVJTlRfTUFYCisjZGVmaW5lIElOVF9NQVggMjE0NzQ4MzY0NworI2RlZmluZSBVSU5UX01BWCAoX19JTlRfTUFYX18gKiAyVSArIDEpCisjZW5kaWYgLyogSU5UMzIgKi8KKworI2VuZGlmIC8qIENSMTZDICovCisKKyNpZiBkZWZpbmVkIChfX3hjMTZ4X18pIHx8IGRlZmluZWQgKF9feGMxNnhMX18pIHx8IGRlZmluZWQgKF9feGMxNnhTX18pCisjZGVmaW5lIF9fU01BTExfQklURklFTERTCisjZW5kaWYKKworI2lmZGVmIF9fVzY1X18KKyNkZWZpbmUgX19TTUFMTF9CSVRGSUVMRFMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0QxMFZfXykKKyNkZWZpbmUgX19TTUFMTF9CSVRGSUVMRFMKKyN1bmRlZiBJTlRfTUFYCisjdW5kZWYgVUlOVF9NQVgKKyNkZWZpbmUgSU5UX01BWCBfX0lOVF9NQVhfXworI2RlZmluZSBVSU5UX01BWCAoX19JTlRfTUFYX18gKiAyVSArIDEpCisjZGVmaW5lIF9QT0lOVEVSX0lOVCBzaG9ydAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fbWM2OGhjMTFfXykgfHwgZGVmaW5lZChfX21jNjhoYzEyX18pIHx8IGRlZmluZWQoX19tYzY4aGMxeF9fKQorI3VuZGVmIElOVF9NQVgKKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBJTlRfTUFYIF9fSU5UX01BWF9fCisjZGVmaW5lIFVJTlRfTUFYIChfX0lOVF9NQVhfXyAqIDJVICsgMSkKKyNkZWZpbmUgX1BPSU5URVJfSU5UIHNob3J0CisjZW5kaWYKKworI2lmZGVmIF9fX0FNMjlLX18KKyNkZWZpbmUgX0ZMT0FUX1JFVCBkb3VibGUKKyNlbmRpZgorCisjaWZkZWYgX19pMzg2X18KKyNpZm5kZWYgX191bml4X18KKy8qIGluIG90aGVyIHdvcmRzLCBnbzMyICovCisjZGVmaW5lIF9GTE9BVF9SRVQgZG91YmxlCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX1JET1NfXykKKy8qIHdlIHdhbnQgdGhlIHJlZW50cmFuY3kgc3RydWN0dXJlIHRvIGJlIHJldHVybmVkIGJ5IGEgZnVuY3Rpb24gKi8KKyNkZWZpbmUgX19EWU5BTUlDX1JFRU5UX18KKyNkZWZpbmUgSEFWRV9HRVREQVRFCisjZGVmaW5lIF9IQVZFX1NZU1RZUEVTCisjZGVmaW5lIF9SRUFEX1dSSVRFX1JFVFVSTl9UWVBFIF9zc2l6ZV90CisjZGVmaW5lIF9fTEFSR0U2NF9GSUxFUyAxCisvKiB3ZSB1c2Ugc29tZSBnbGliYyBoZWFkZXIgZmlsZXMgc28gdHVybiBvbiBnbGliYyBsYXJnZSBmaWxlIGZlYXR1cmUgKi8KKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAxCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19tbjEwMjAwX18KKyNkZWZpbmUgX19TTUFMTF9CSVRGSUVMRFMKKyNlbmRpZgorCisjaWZkZWYgX19BVlJfXworI2RlZmluZSBfX1NNQUxMX0JJVEZJRUxEUworI2RlZmluZSBfUE9JTlRFUl9JTlQgc2hvcnQKKyNlbmRpZgorCisjaWZkZWYgX192ODUwCisjZGVmaW5lIF9fQVRUUklCVVRFX0lNUFVSRV9QVFJfXyBfX2F0dHJpYnV0ZV9fKChfX3NkYV9fKSkKKyNlbmRpZgorCisvKiBGb3IgdGhlIFBvd2VyUEMgZWFiaSwgZm9yY2UgdGhlIF9pbXB1cmVfcHRyIHRvIGJlIGluIC5zZGF0YSAqLworI2lmIGRlZmluZWQoX19QUENfXykKKyNpZiBkZWZpbmVkKF9DQUxMX1NZU1YpCisjZGVmaW5lIF9fQVRUUklCVVRFX0lNUFVSRV9QVFJfXyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLnNkYXRhIikpKQorI2VuZGlmCisjaWZkZWYgX19TUEVfXworI2RlZmluZSBfTE9OR19ET1VCTEUgZG91YmxlCisjZW5kaWYKKyNlbmRpZgorCisvKiBDb25maWd1cmUgc21hbGwgUkVFTlQgc3RydWN0dXJlIGZvciBYaWxpbnggTWljcm9CbGF6ZSBwbGF0Zm9ybXMgKi8KKyNpZiBkZWZpbmVkIChfX01JQ1JPQkxBWkVfXykKKyNpZm5kZWYgX1JFRU5UX1NNQUxMCisjZGVmaW5lIF9SRUVOVF9TTUFMTAorI2VuZGlmCisvKiBYaWxpbnggWE1LIHVzZXMgVW5peDk4IG11dGV4ICovCisjaWZkZWYgX19YTUtfXworI2RlZmluZSBfVU5JWDk4X1RIUkVBRF9NVVRFWF9BVFRSSUJVVEVTCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX21pcHNfXykgJiYgIWRlZmluZWQoX19ydGVtc19fKQorI2RlZmluZSBfX0FUVFJJQlVURV9JTVBVUkVfUFRSX18gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5zZGF0YSIpKSkKKyNlbmRpZgorCisjaWZkZWYgX194c3Rvcm15MTZfXworI2RlZmluZSBfX1NNQUxMX0JJVEZJRUxEUworI3VuZGVmIElOVF9NQVgKKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBJTlRfTUFYIF9fSU5UX01BWF9fCisjZGVmaW5lIFVJTlRfTUFYIChfX0lOVF9NQVhfXyAqIDJVICsgMSkKKyNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCA4CisjZGVmaW5lIF9QT0lOVEVSX0lOVCBzaG9ydAorI2RlZmluZSBfX0JVRlNJWl9fIDE2CisjZGVmaW5lIF9SRUVOVF9TTUFMTAorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fTVNQNDMwX18KKyNpZm5kZWYgX1JFRU5UX1NNQUxMCisjZGVmaW5lIF9SRUVOVF9TTUFMTAorI2VuZGlmCisKKyNkZWZpbmUgX19TTUFMTF9CSVRGSUVMRFMKKworI2lmZGVmIF9fTVNQNDMwWF9MQVJHRV9fCisjZGVmaW5lIF9QT0lOVEVSX0lOVCBsb25nCisjZWxzZQorI2RlZmluZSBfUE9JTlRFUl9JTlQgaW50CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19tMzJjX18KKyNkZWZpbmUgX19TTUFMTF9CSVRGSUVMRFMKKyN1bmRlZiBJTlRfTUFYCisjdW5kZWYgVUlOVF9NQVgKKyNkZWZpbmUgSU5UX01BWCBfX0lOVF9NQVhfXworI2RlZmluZSBVSU5UX01BWCAoX19JTlRfTUFYX18gKiAyVSArIDEpCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgOAorI2lmIGRlZmluZWQoX19yOGNfY3B1X18pIHx8IGRlZmluZWQoX19tMTZjX2NwdV9fKQorI2RlZmluZSBfUE9JTlRFUl9JTlQgc2hvcnQKKyNlbHNlCisjZGVmaW5lIF9QT0lOVEVSX0lOVCBsb25nCisjZW5kaWYKKyNkZWZpbmUgX19CVUZTSVpfXyAxNgorI2RlZmluZSBfUkVFTlRfU01BTEwKKyNlbmRpZiAvKiBfX20zMmNfXyAqLworCisjaWZkZWYgX19TUFVfXworI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UIDE2CisjZGVmaW5lIF9fQ1VTVE9NX0ZJTEVfSU9fXworI2VuZGlmCisKKy8qIFRoaXMgYmxvY2sgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIEdDQydzIGxpbWl0cy5oLiAgVGhlIHBvaW50CisgICBvZiBoYXZpbmcgdGhlc2UgZGVmaW5pdGlvbnMgaGVyZSBpcyB0byBub3QgaW5jbHVkZSBsaW1pdHMuaCwgd2hpY2gKKyAgIHdvdWxkIHBvbGx1dGUgdGhlIHVzZXIgbmFtZXNwYWNlLCB3aGlsZSBzdGlsbCB1c2luZyB0eXBlcyBvZiB0aGUKKyAgIHRoZSBjb3JyZWN0IHdpZHRocyB3aGVuIGRlY2lkaW5nIGhvdyB0byBkZWZpbmUgX19pbnQzMl90IGFuZAorICAgX19pbnQ2NF90LiAgKi8KKyNpZm5kZWYgX19JTlRfTUFYX18KKyMgaWZkZWYgSU5UX01BWAorIyAgZGVmaW5lIF9fSU5UX01BWF9fIElOVF9NQVgKKyMgZWxzZQorIyAgZGVmaW5lIF9fSU5UX01BWF9fIDIxNDc0ODM2NDcKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fTE9OR19NQVhfXworIyBpZmRlZiBMT05HX01BWAorIyAgZGVmaW5lIF9fTE9OR19NQVhfXyBMT05HX01BWAorIyBlbHNlCisjICBpZiBkZWZpbmVkIChfX2FscGhhX18pIHx8IChkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykpIFwKKyAgICAgIHx8IGRlZmluZWQgKF9fc3BhcmN2OSkKKyMgICBkZWZpbmUgX19MT05HX01BWF9fIDkyMjMzNzIwMzY4NTQ3NzU4MDdMCisjICBlbHNlCisjICAgZGVmaW5lIF9fTE9OR19NQVhfXyAyMTQ3NDgzNjQ3TAorIyAgZW5kaWYgLyogX19hbHBoYV9fIHx8IHNwYXJjNjQgKi8KKyMgZW5kaWYKKyNlbmRpZgorLyogRW5kIG9mIGJsb2NrIHRoYXQgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIEdDQydzIGxpbWl0cy5oLiAgKi8KKworI2lmbmRlZiBfUE9JTlRFUl9JTlQKKyNkZWZpbmUgX1BPSU5URVJfSU5UIGxvbmcKKyNlbmRpZgorCisjaWZkZWYgX19mcnZfXworI2RlZmluZSBfX0FUVFJJQlVURV9JTVBVUkVfUFRSX18gX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5zZGF0YSIpKSkKKyNlbmRpZgorI3VuZGVmIF9fUkFORF9NQVgKKyNpZiBfX0lOVF9NQVhfXyA9PSAzMjc2NworI2RlZmluZSBfX1JBTkRfTUFYIDMyNzY3CisjZWxzZQorI2RlZmluZSBfX1JBTkRfTUFYIDB4N2ZmZmZmZmYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorI2luY2x1ZGUgPGN5Z3dpbi9jb25maWcuaD4KKyNpZiAhZGVmaW5lZCAoX19TVFJJQ1RfQU5TSV9fKSB8fCAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorI2RlZmluZSBfX1VTRV9YT1BFTjJLIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fcnRlbXNfXykKKyNkZWZpbmUgX19GSUxFTkFNRV9NQVhfXyAyNTUKKyNkZWZpbmUgX1JFQURfV1JJVEVfUkVUVVJOX1RZUEUgX3NzaXplX3QKKyNkZWZpbmUgX19EWU5BTUlDX1JFRU5UX18KKyNkZWZpbmUgX1JFRU5UX0dMT0JBTF9BVEVYSVQKKyNlbmRpZgorCisjaWZuZGVmIF9fRVhQT1JUCisjZGVmaW5lIF9fRVhQT1JUCisjZW5kaWYKKworI2lmbmRlZiBfX0lNUE9SVAorI2RlZmluZSBfX0lNUE9SVAorI2VuZGlmCisKKy8qIERlZmluZSByZXR1cm4gdHlwZSBvZiByZWFkL3dyaXRlIHJvdXRpbmVzLiAgSW4gUE9TSVgsIHRoZSByZXR1cm4gdHlwZQorICAgZm9yIHJlYWQoKS93cml0ZSgpIGlzICJzc2l6ZV90IiBidXQgbGVnYWN5IG5ld2xpYiBjb2RlIGhhcyBiZWVuIHVzaW5nCisgICAiaW50IiBmb3Igc29tZSB0aW1lLiAgSWYgbm90IHNwZWNpZmllZCwgImludCIgaXMgZGVmYXVsdGVkLiAgKi8KKyNpZm5kZWYgX1JFQURfV1JJVEVfUkVUVVJOX1RZUEUKKyNkZWZpbmUgX1JFQURfV1JJVEVfUkVUVVJOX1RZUEUgaW50CisjZW5kaWYKKy8qIERlZmluZSBgY291bnQnIHBhcmFtZXRlciBvZiByZWFkL3dyaXRlIHJvdXRpbmVzLiAgSW4gUE9TSVgsIHRoZSBgY291bnQnCisgICBwYXJhbWV0ZXIgaXMgInNpemVfdCIgYnV0IGxlZ2FjeSBuZXdsaWIgY29kZSBoYXMgYmVlbiB1c2luZyAiaW50IiBmb3Igc29tZQorICAgdGltZS4gIElmIG5vdCBzcGVjaWZpZWQsICJpbnQiIGlzIGRlZmF1bHRlZC4gICovCisjaWZuZGVmIF9SRUFEX1dSSVRFX0JVRlNJWkVfVFlQRQorI2RlZmluZSBfUkVBRF9XUklURV9CVUZTSVpFX1RZUEUgaW50CisjZW5kaWYKKworI2lmbmRlZiBfX1dDSEFSX01BWF9fCisjaWYgX19JTlRfTUFYX18gPT0gMzI3NjcgfHwgZGVmaW5lZCAoX1dJTjMyKQorI2RlZmluZSBfX1dDSEFSX01BWF9fIDB4ZmZmZnUKKyNlbmRpZgorI2VuZGlmCisKKy8qIFNlZSBpZiBzbWFsbCByZWVudCBhc2tlZCBmb3IgYXQgY29uZmlndXJhdGlvbiB0aW1lIGFuZAorICAgaXMgbm90IGNob3NlbiBieSB0aGUgcGxhdGZvcm0gYnkgZGVmYXVsdC4gICovCisjaWZkZWYgX1dBTlRfUkVFTlRfU01BTEwKKyNpZm5kZWYgX1JFRU5UX1NNQUxMCisjZGVmaW5lIF9SRUVOVF9TTUFMTAorI2VuZGlmCisjZW5kaWYKKworLyogSWYgX01CX0VYVEVOREVEX0NIQVJTRVRTX0FMTCBpcyBzZXQsIHdlIHdhbnQgYWxsIG9mIHRoZSBleHRlbmRlZAorICAgY2hhcnNldHMuICBUaGUgZXh0ZW5kZWQgY2hhcnNldHMgYWRkIGEgZmV3IGZ1bmN0aW9ucyBhbmQgYSBjb3VwbGUKKyAgIG9mIHRhYmxlcyBvZiBhIGZldyBLIGVhY2guICovCisjaWZkZWYgX01CX0VYVEVOREVEX0NIQVJTRVRTX0FMTAorI2RlZmluZSBfTUJfRVhURU5ERURfQ0hBUlNFVFNfSVNPIDEKKyNkZWZpbmUgX01CX0VYVEVOREVEX0NIQVJTRVRTX1dJTkRPV1MgMQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1NZU19DT05GSUdfSF9fICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2N1c3RvbV9maWxlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2N1c3RvbV9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYzMTRmYgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvY3VzdG9tX2ZpbGUuaApAQCAtMCwwICsxLDIgQEAKKyNlcnJvciBTeXN0ZW0tc3BlY2lmaWMgY3VzdG9tX2ZpbGUuaCBpcyBtaXNzaW5nLgorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2Rpci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9kaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjAxNTBkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9kaXIuaApAQCAtMCwwICsxLDEwIEBACisvKiBCU0QgcHJlZGVjZXNzb3Igb2YgUE9TSVguMSA8ZGlyZW50Lmg+IGFuZCBzdHJ1Y3QgZGlyZW50ICovCisKKyNpZm5kZWYgX1NZU19ESVJfSF8KKyNkZWZpbmUgX1NZU19ESVJfSF8KKworI2luY2x1ZGUgPGRpcmVudC5oPgorCisjZGVmaW5lIGRpcmVjdCBkaXJlbnQKKworI2VuZGlmIC8qX1NZU19ESVJfSF8qLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9kaXJlbnQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvZGlyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmYjVjMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvZGlyZW50LmgKQEAgLTAsMCArMSwxMyBAQAorLyogPGRpcmVudC5oPiBpbmNsdWRlcyA8c3lzL2RpcmVudC5oPiwgd2hpY2ggaXMgdGhpcyBmaWxlLiAgT24gYQorICAgc3lzdGVtIHdoaWNoIHN1cHBvcnRzIDxkaXJlbnQuaD4sIHRoaXMgZmlsZSBpcyBvdmVycmlkZGVuIGJ5CisgICBkaXJlbnQuaCBpbiB0aGUgbGliYy9zeXMvLi4uL3N5cyBkaXJlY3RvcnkuICBPbiBhIHN5c3RlbSB3aGljaCBkb2VzCisgICBub3Qgc3VwcG9ydCA8ZGlyZW50Lmg+LCB3ZSB3aWxsIGdldCB0aGlzIGZpbGUgd2hpY2ggdXNlcyAjZXJyb3IgdG8gZm9yY2UKKyAgIGFuIGVycm9yLiAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2Vycm9yICI8ZGlyZW50Lmg+IG5vdCBzdXBwb3J0ZWQiCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9lcnJuby5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5M2IyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2Vycm5vLmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qIGVycm5vIGlzIG5vdCBhIGdsb2JhbCB2YXJpYWJsZSwgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UgdXNpbmcgaXQKKyAgIG5vbi1yZWVudHJhbnQuICBJbnN0ZWFkLCBpdHMgYWRkcmVzcyBpcyByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24KKyAgIF9fZXJybm8uICAqLworCisjaWZuZGVmIF9TWVNfRVJSTk9fSF8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNkZWZpbmUgX1NZU19FUlJOT19IXworCisjaW5jbHVkZSA8c3lzL3JlZW50Lmg+CisKKyNpZm5kZWYgX1JFRU5UX09OTFkKKyNkZWZpbmUgZXJybm8gKCpfX2Vycm5vKCkpCitleHRlcm4gaW50ICpfX2Vycm5vIF9QQVJBTVMgKCh2b2lkKSk7CisjZW5kaWYKKworLyogUGxlYXNlIGRvbid0IHVzZSB0aGVzZSB2YXJpYWJsZXMgZGlyZWN0bHkuCisgICBVc2Ugc3RyZXJyb3IgaW5zdGVhZC4gKi8KK2V4dGVybiBfX0lNUE9SVCBfQ09OU1QgY2hhciAqIF9DT05TVCBfc3lzX2Vycmxpc3RbXTsKK2V4dGVybiBfX0lNUE9SVCBpbnQgX3N5c19uZXJyOworI2lmZGVmIF9fQ1lHV0lOX18KK2V4dGVybiBfX0lNUE9SVCBjb25zdCBjaGFyICogY29uc3Qgc3lzX2Vycmxpc3RbXTsKK2V4dGVybiBfX0lNUE9SVCBpbnQgc3lzX25lcnI7CitleHRlcm4gX19JTVBPUlQgY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWU7CitleHRlcm4gX19JTVBPUlQgY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CisjZW5kaWYKKworI2RlZmluZSBfX2Vycm5vX3IocHRyKSAoKHB0ciktPl9lcnJubykKKworI2RlZmluZQlFUEVSTSAxCQkvKiBOb3Qgc3VwZXItdXNlciAqLworI2RlZmluZQlFTk9FTlQgMgkvKiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5ICovCisjZGVmaW5lCUVTUkNIIDMJCS8qIE5vIHN1Y2ggcHJvY2VzcyAqLworI2RlZmluZQlFSU5UUiA0CQkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCAqLworI2RlZmluZQlFSU8gNQkJLyogSS9PIGVycm9yICovCisjZGVmaW5lCUVOWElPIDYJCS8qIE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MgKi8KKyNkZWZpbmUJRTJCSUcgNwkJLyogQXJnIGxpc3QgdG9vIGxvbmcgKi8KKyNkZWZpbmUJRU5PRVhFQyA4CS8qIEV4ZWMgZm9ybWF0IGVycm9yICovCisjZGVmaW5lCUVCQURGIDkJCS8qIEJhZCBmaWxlIG51bWJlciAqLworI2RlZmluZQlFQ0hJTEQgMTAJLyogTm8gY2hpbGRyZW4gKi8KKyNkZWZpbmUJRUFHQUlOIDExCS8qIE5vIG1vcmUgcHJvY2Vzc2VzICovCisjZGVmaW5lCUVOT01FTSAxMgkvKiBOb3QgZW5vdWdoIGNvcmUgKi8KKyNkZWZpbmUJRUFDQ0VTIDEzCS8qIFBlcm1pc3Npb24gZGVuaWVkICovCisjZGVmaW5lCUVGQVVMVCAxNAkvKiBCYWQgYWRkcmVzcyAqLworI2lmZGVmIF9fTElOVVhfRVJSTk9fRVhURU5TSU9OU19fCisjZGVmaW5lCUVOT1RCTEsgMTUJLyogQmxvY2sgZGV2aWNlIHJlcXVpcmVkICovCisjZW5kaWYKKyNkZWZpbmUJRUJVU1kgMTYJLyogTW91bnQgZGV2aWNlIGJ1c3kgKi8KKyNkZWZpbmUJRUVYSVNUIDE3CS8qIEZpbGUgZXhpc3RzICovCisjZGVmaW5lCUVYREVWIDE4CS8qIENyb3NzLWRldmljZSBsaW5rICovCisjZGVmaW5lCUVOT0RFViAxOQkvKiBObyBzdWNoIGRldmljZSAqLworI2RlZmluZQlFTk9URElSIDIwCS8qIE5vdCBhIGRpcmVjdG9yeSAqLworI2RlZmluZQlFSVNESVIgMjEJLyogSXMgYSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUJRUlOVkFMIDIyCS8qIEludmFsaWQgYXJndW1lbnQgKi8KKyNkZWZpbmUJRU5GSUxFIDIzCS8qIFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtICovCisjZGVmaW5lCUVNRklMRSAyNAkvKiBUb28gbWFueSBvcGVuIGZpbGVzICovCisjZGVmaW5lCUVOT1RUWSAyNQkvKiBOb3QgYSB0eXBld3JpdGVyICovCisjZGVmaW5lCUVUWFRCU1kgMjYJLyogVGV4dCBmaWxlIGJ1c3kgKi8KKyNkZWZpbmUJRUZCSUcgMjcJLyogRmlsZSB0b28gbGFyZ2UgKi8KKyNkZWZpbmUJRU5PU1BDIDI4CS8qIE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlICovCisjZGVmaW5lCUVTUElQRSAyOQkvKiBJbGxlZ2FsIHNlZWsgKi8KKyNkZWZpbmUJRVJPRlMgMzAJLyogUmVhZCBvbmx5IGZpbGUgc3lzdGVtICovCisjZGVmaW5lCUVNTElOSyAzMQkvKiBUb28gbWFueSBsaW5rcyAqLworI2RlZmluZQlFUElQRSAzMgkvKiBCcm9rZW4gcGlwZSAqLworI2RlZmluZQlFRE9NIDMzCQkvKiBNYXRoIGFyZyBvdXQgb2YgZG9tYWluIG9mIGZ1bmMgKi8KKyNkZWZpbmUJRVJBTkdFIDM0CS8qIE1hdGggcmVzdWx0IG5vdCByZXByZXNlbnRhYmxlICovCisjZGVmaW5lCUVOT01TRyAzNQkvKiBObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSAqLworI2RlZmluZQlFSURSTSAzNgkvKiBJZGVudGlmaWVyIHJlbW92ZWQgKi8KKyNpZmRlZiBfX0xJTlVYX0VSUk5PX0VYVEVOU0lPTlNfXworI2RlZmluZQlFQ0hSTkcgMzcJLyogQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lCUVMMk5TWU5DIDM4CS8qIExldmVsIDIgbm90IHN5bmNocm9uaXplZCAqLworI2RlZmluZQlFTDNITFQgMzkJLyogTGV2ZWwgMyBoYWx0ZWQgKi8KKyNkZWZpbmUJRUwzUlNUIDQwCS8qIExldmVsIDMgcmVzZXQgKi8KKyNkZWZpbmUJRUxOUk5HIDQxCS8qIExpbmsgbnVtYmVyIG91dCBvZiByYW5nZSAqLworI2RlZmluZQlFVU5BVENIIDQyCS8qIFByb3RvY29sIGRyaXZlciBub3QgYXR0YWNoZWQgKi8KKyNkZWZpbmUJRU5PQ1NJIDQzCS8qIE5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxhYmxlICovCisjZGVmaW5lCUVMMkhMVCA0NAkvKiBMZXZlbCAyIGhhbHRlZCAqLworI2VuZGlmCisjZGVmaW5lCUVERUFETEsgNDUJLyogRGVhZGxvY2sgY29uZGl0aW9uICovCisjZGVmaW5lCUVOT0xDSyA0NgkvKiBObyByZWNvcmQgbG9ja3MgYXZhaWxhYmxlICovCisjaWZkZWYgX19MSU5VWF9FUlJOT19FWFRFTlNJT05TX18KKyNkZWZpbmUgRUJBREUgNTAJLyogSW52YWxpZCBleGNoYW5nZSAqLworI2RlZmluZSBFQkFEUiA1MQkvKiBJbnZhbGlkIHJlcXVlc3QgZGVzY3JpcHRvciAqLworI2RlZmluZSBFWEZVTEwgNTIJLyogRXhjaGFuZ2UgZnVsbCAqLworI2RlZmluZSBFTk9BTk8gNTMJLyogTm8gYW5vZGUgKi8KKyNkZWZpbmUgRUJBRFJRQyA1NAkvKiBJbnZhbGlkIHJlcXVlc3QgY29kZSAqLworI2RlZmluZSBFQkFEU0xUIDU1CS8qIEludmFsaWQgc2xvdCAqLworI2RlZmluZSBFREVBRExPQ0sgNTYJLyogRmlsZSBsb2NraW5nIGRlYWRsb2NrIGVycm9yICovCisjZGVmaW5lIEVCRk9OVCA1NwkvKiBCYWQgZm9udCBmaWxlIGZtdCAqLworI2VuZGlmCisjZGVmaW5lIEVOT1NUUiA2MAkvKiBEZXZpY2Ugbm90IGEgc3RyZWFtICovCisjZGVmaW5lIEVOT0RBVEEgNjEJLyogTm8gZGF0YSAoZm9yIG5vIGRlbGF5IGlvKSAqLworI2RlZmluZSBFVElNRSA2MgkvKiBUaW1lciBleHBpcmVkICovCisjZGVmaW5lIEVOT1NSIDYzCS8qIE91dCBvZiBzdHJlYW1zIHJlc291cmNlcyAqLworI2lmZGVmIF9fTElOVVhfRVJSTk9fRVhURU5TSU9OU19fCisjZGVmaW5lIEVOT05FVCA2NAkvKiBNYWNoaW5lIGlzIG5vdCBvbiB0aGUgbmV0d29yayAqLworI2RlZmluZSBFTk9QS0cgNjUJLyogUGFja2FnZSBub3QgaW5zdGFsbGVkICovCisjZGVmaW5lIEVSRU1PVEUgNjYJLyogVGhlIG9iamVjdCBpcyByZW1vdGUgKi8KKyNlbmRpZgorI2RlZmluZSBFTk9MSU5LIDY3CS8qIFRoZSBsaW5rIGhhcyBiZWVuIHNldmVyZWQgKi8KKyNpZmRlZiBfX0xJTlVYX0VSUk5PX0VYVEVOU0lPTlNfXworI2RlZmluZSBFQURWIDY4CQkvKiBBZHZlcnRpc2UgZXJyb3IgKi8KKyNkZWZpbmUgRVNSTU5UIDY5CS8qIFNybW91bnQgZXJyb3IgKi8KKyNkZWZpbmUJRUNPTU0gNzAJLyogQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kICovCisjZW5kaWYKKyNkZWZpbmUgRVBST1RPIDcxCS8qIFByb3RvY29sIGVycm9yICovCisjZGVmaW5lCUVNVUxUSUhPUCA3NAkvKiBNdWx0aWhvcCBhdHRlbXB0ZWQgKi8KKyNpZmRlZiBfX0xJTlVYX0VSUk5PX0VYVEVOU0lPTlNfXworI2RlZmluZQlFTEJJTiA3NQkvKiBJbm9kZSBpcyByZW1vdGUgKG5vdCByZWFsbHkgZXJyb3IpICovCisjZGVmaW5lCUVET1RET1QgNzYJLyogQ3Jvc3MgbW91bnQgcG9pbnQgKG5vdCByZWFsbHkgZXJyb3IpICovCisjZW5kaWYKKyNkZWZpbmUgRUJBRE1TRyA3NwkvKiBUcnlpbmcgdG8gcmVhZCB1bnJlYWRhYmxlIG1lc3NhZ2UgKi8KKyNkZWZpbmUgRUZUWVBFIDc5CS8qIEluYXBwcm9wcmlhdGUgZmlsZSB0eXBlIG9yIGZvcm1hdCAqLworI2lmZGVmIF9fTElOVVhfRVJSTk9fRVhURU5TSU9OU19fCisjZGVmaW5lIEVOT1RVTklRIDgwCS8qIEdpdmVuIGxvZy4gbmFtZSBub3QgdW5pcXVlICovCisjZGVmaW5lIEVCQURGRCA4MQkvKiBmLmQuIGludmFsaWQgZm9yIHRoaXMgb3BlcmF0aW9uICovCisjZGVmaW5lIEVSRU1DSEcgODIJLyogUmVtb3RlIGFkZHJlc3MgY2hhbmdlZCAqLworI2RlZmluZSBFTElCQUNDIDgzCS8qIENhbid0IGFjY2VzcyBhIG5lZWRlZCBzaGFyZWQgbGliICovCisjZGVmaW5lIEVMSUJCQUQgODQJLyogQWNjZXNzaW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWIgKi8KKyNkZWZpbmUgRUxJQlNDTiA4NQkvKiAubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkICovCisjZGVmaW5lIEVMSUJNQVggODYJLyogQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IGxpYnMgKi8KKyNkZWZpbmUgRUxJQkVYRUMgODcJLyogQXR0ZW1wdGluZyB0byBleGVjIGEgc2hhcmVkIGxpYnJhcnkgKi8KKyNlbmRpZgorI2RlZmluZSBFTk9TWVMgODgJLyogRnVuY3Rpb24gbm90IGltcGxlbWVudGVkICovCisjaWZkZWYgX19DWUdXSU5fXworI2RlZmluZSBFTk1GSUxFIDg5ICAgICAgLyogTm8gbW9yZSBmaWxlcyAqLworI2VuZGlmCisjZGVmaW5lIEVOT1RFTVBUWSA5MAkvKiBEaXJlY3Rvcnkgbm90IGVtcHR5ICovCisjZGVmaW5lIEVOQU1FVE9PTE9ORyA5MQkvKiBGaWxlIG9yIHBhdGggbmFtZSB0b28gbG9uZyAqLworI2RlZmluZSBFTE9PUCA5MgkvKiBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyAqLworI2RlZmluZSBFT1BOT1RTVVBQIDk1CS8qIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRyYW5zcG9ydCBlbmRwb2ludCAqLworI2RlZmluZSBFUEZOT1NVUFBPUlQgOTYgLyogUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgRUNPTk5SRVNFVCAxMDQgIC8qIENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciAqLworI2RlZmluZSBFTk9CVUZTIDEwNQkvKiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisjZGVmaW5lIEVBRk5PU1VQUE9SVCAxMDYgLyogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCBmYW1pbHkgKi8KKyNkZWZpbmUgRVBST1RPVFlQRSAxMDcJLyogUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0ICovCisjZGVmaW5lIEVOT1RTT0NLIDEwOAkvKiBTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQgKi8KKyNkZWZpbmUgRU5PUFJPVE9PUFQgMTA5CS8qIFByb3RvY29sIG5vdCBhdmFpbGFibGUgKi8KKyNpZmRlZiBfX0xJTlVYX0VSUk5PX0VYVEVOU0lPTlNfXworI2RlZmluZSBFU0hVVERPV04gMTEwCS8qIENhbid0IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duICovCisjZW5kaWYKKyNkZWZpbmUgRUNPTk5SRUZVU0VEIDExMQkvKiBDb25uZWN0aW9uIHJlZnVzZWQgKi8KKyNkZWZpbmUgRUFERFJJTlVTRSAxMTIJCS8qIEFkZHJlc3MgYWxyZWFkeSBpbiB1c2UgKi8KKyNkZWZpbmUgRUNPTk5BQk9SVEVEIDExMwkvKiBDb25uZWN0aW9uIGFib3J0ZWQgKi8KKyNkZWZpbmUgRU5FVFVOUkVBQ0ggMTE0CQkvKiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlICovCisjZGVmaW5lIEVORVRET1dOIDExNQkJLyogTmV0d29yayBpbnRlcmZhY2UgaXMgbm90IGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUgRVRJTUVET1VUIDExNgkJLyogQ29ubmVjdGlvbiB0aW1lZCBvdXQgKi8KKyNkZWZpbmUgRUhPU1RET1dOIDExNwkJLyogSG9zdCBpcyBkb3duICovCisjZGVmaW5lIEVIT1NUVU5SRUFDSCAxMTgJLyogSG9zdCBpcyB1bnJlYWNoYWJsZSAqLworI2RlZmluZSBFSU5QUk9HUkVTUyAxMTkJCS8qIENvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBFQUxSRUFEWSAxMjAJCS8qIFNvY2tldCBhbHJlYWR5IGNvbm5lY3RlZCAqLworI2RlZmluZSBFREVTVEFERFJSRVEgMTIxCS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQgKi8KKyNkZWZpbmUgRU1TR1NJWkUgMTIyCQkvKiBNZXNzYWdlIHRvbyBsb25nICovCisjZGVmaW5lIEVQUk9UT05PU1VQUE9SVCAxMjMJLyogVW5rbm93biBwcm90b2NvbCAqLworI2lmZGVmIF9fTElOVVhfRVJSTk9fRVhURU5TSU9OU19fCisjZGVmaW5lIEVTT0NLVE5PU1VQUE9SVCAxMjQJLyogU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCAqLworI2VuZGlmCisjZGVmaW5lIEVBRERSTk9UQVZBSUwgMTI1CS8qIEFkZHJlc3Mgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZSBFTkVUUkVTRVQgMTI2CisjZGVmaW5lIEVJU0NPTk4gMTI3CQkvKiBTb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgKi8KKyNkZWZpbmUgRU5PVENPTk4gMTI4CQkvKiBTb2NrZXQgaXMgbm90IGNvbm5lY3RlZCAqLworI2RlZmluZSBFVE9PTUFOWVJFRlMgMTI5CisjaWZkZWYgX19MSU5VWF9FUlJOT19FWFRFTlNJT05TX18KKyNkZWZpbmUgRVBST0NMSU0gMTMwCisjZGVmaW5lIEVVU0VSUyAxMzEKKyNlbmRpZgorI2RlZmluZSBFRFFVT1QgMTMyCisjZGVmaW5lIEVTVEFMRSAxMzMKKyNkZWZpbmUgRU5PVFNVUCAxMzQJCS8qIE5vdCBzdXBwb3J0ZWQgKi8KKyNpZmRlZiBfX0xJTlVYX0VSUk5PX0VYVEVOU0lPTlNfXworI2RlZmluZSBFTk9NRURJVU0gMTM1ICAgLyogTm8gbWVkaXVtIChpbiB0YXBlIGRyaXZlKSAqLworI2VuZGlmCisjaWZkZWYgX19DWUdXSU5fXworI2RlZmluZSBFTk9TSEFSRSAxMzYgICAgLyogTm8gc3VjaCBob3N0IG9yIG5ldHdvcmsgcGF0aCAqLworI2RlZmluZSBFQ0FTRUNMQVNIIDEzNyAgLyogRmlsZW5hbWUgZXhpc3RzIHdpdGggZGlmZmVyZW50IGNhc2UgKi8KKyNlbmRpZgorI2RlZmluZSBFSUxTRVEgMTM4CisjZGVmaW5lIEVPVkVSRkxPVyAxMzkJLyogVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSAqLworI2RlZmluZSBFQ0FOQ0VMRUQgMTQwCS8qIE9wZXJhdGlvbiBjYW5jZWxlZCAqLworI2RlZmluZSBFTk9UUkVDT1ZFUkFCTEUgMTQxCS8qIFN0YXRlIG5vdCByZWNvdmVyYWJsZSAqLworI2RlZmluZSBFT1dORVJERUFEIDE0MgkvKiBQcmV2aW91cyBvd25lciBkaWVkICovCisjaWZkZWYgX19MSU5VWF9FUlJOT19FWFRFTlNJT05TX18KKyNkZWZpbmUgRVNUUlBJUEUgMTQzCS8qIFN0cmVhbXMgcGlwZSBlcnJvciAqLworI2VuZGlmCisjZGVmaW5lIEVXT1VMREJMT0NLIEVBR0FJTgkvKiBPcGVyYXRpb24gd291bGQgYmxvY2sgKi8KKworI2RlZmluZSBfX0VMQVNURVJST1IgMjAwMAkvKiBVc2VycyBjYW4gYWRkIHZhbHVlcyBzdGFydGluZyBoZXJlICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX1NZU19FUlJOT19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2ZjbnRsLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4NWY0MAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvZmNudGwuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgX1NZU19GQ05UTF9IXworI2RlZmluZSBfU1lTX0ZDTlRMX0hfCisjaW5jbHVkZSA8c3lzL19kZWZhdWx0X2ZjbnRsLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvZmVhdHVyZXMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvZmVhdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2JhNTEzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9mZWF0dXJlcy5oCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogIFdyaXR0ZW4gYnkgSm9lbCBTaGVycmlsbCA8am9lbEBPQVJjb3JwLmNvbT4uCisgKgorICogIENPUFlSSUdIVCAoYykgMTk4OS0yMDAwLgorICoKKyAqICBPbi1MaW5lIEFwcGxpY2F0aW9ucyBSZXNlYXJjaCBDb3Jwb3JhdGlvbiAoT0FSKS4KKyAqCisgKiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgcHVycG9zZSB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UKKyAqICBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIGFueSBzb2Z0d2FyZSB3aGljaCBpcyBvciBpbmNsdWRlcyBhIGNvcHkKKyAqICBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiAgVEhJUyBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsICBUSEUgQVVUSE9SIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OCisgKiAgT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUVSQ0hBTlRBQklMSVRZIE9GIFRISVMKKyAqICBTT0ZUV0FSRSBPUiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKiAgJElkJAorICovCisKKyNpZm5kZWYgX1NZU19GRUFUVVJFU19ICisjZGVmaW5lIF9TWVNfRkVBVFVSRVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIE1hY3JvIHRvIHRlc3QgdmVyc2lvbiBvZiBHQ0MuICBSZXR1cm5zIDAgZm9yIG5vbi1HQ0Mgb3IgdG9vIG9sZCBHQ0MuICovCisjaWZuZGVmIF9fR05VQ19QUkVSRVEKKyMgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBkZWZpbmVkIF9fR05VQ19NSU5PUl9fCisjICBkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgXAorCSgoX19HTlVDX18gPDwgMTYpICsgX19HTlVDX01JTk9SX18gPj0gKChtYWopIDw8IDE2KSArIChtaW4pKQorIyBlbHNlCisjICBkZWZpbmUgX19HTlVDX1BSRVJFUShtYWosIG1pbikgMAorIyBlbmRpZgorI2VuZGlmIC8qIF9fR05VQ19QUkVSRVEgKi8KKy8qIFZlcnNpb24gd2l0aCB0cmFpbGluZyB1bmRlcnNjb3JlcyBmb3IgQlNEIGNvbXBhdGliaWxpdHkuICovCisjZGVmaW5lCV9fR05VQ19QUkVSRVFfXyhtYSwgbWkpCV9fR05VQ19QUkVSRVEobWEsIG1pKQorCisvKiBSVEVNUyBhZGhlcmVzIHRvIFBPU0lYIC0tIDEwMDMuMWIgd2l0aCBzb21lIGZlYXR1cmVzIGZyb20gYW5uZXhlcy4gICovCisKKyNpZmRlZiBfX3J0ZW1zX18KKyNkZWZpbmUgX1BPU0lYX0pPQl9DT05UUk9MICAgICAJCTEKKyNkZWZpbmUgX1BPU0lYX1NBVkVEX0lEUyAgICAgICAJCTEKKyNkZWZpbmUgX1BPU0lYX1ZFUlNJT04JCQkxOTkzMDlMCisjZGVmaW5lIF9QT1NJWF9BU1lOQ0hST05PVVNfSU8JCTEKKyNkZWZpbmUgX1BPU0lYX0ZTWU5DCQkJMQorI2RlZmluZSBfUE9TSVhfTUFQUEVEX0ZJTEVTCQkxCisjZGVmaW5lIF9QT1NJWF9NRU1MT0NLCQkJMQorI2RlZmluZSBfUE9TSVhfTUVNTE9DS19SQU5HRQkJMQorI2RlZmluZSBfUE9TSVhfTUVNT1JZX1BST1RFQ1RJT04JMQorI2RlZmluZSBfUE9TSVhfTUVTU0FHRV9QQVNTSU5HCQkxCisjZGVmaW5lIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sJCTIwMDExMkwKKyNkZWZpbmUgX1BPU0lYX1BSSU9SSVRJWkVEX0lPCQkxCisjZGVmaW5lIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HCTEKKyNkZWZpbmUgX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMJCTEKKyNkZWZpbmUgX1BPU0lYX1NFTUFQSE9SRVMJCTEKKy8qICNkZWZpbmUgX1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUwkxICovCisjZGVmaW5lIF9QT1NJWF9TWU5DSFJPTklaRURfSU8JCTEKKyNkZWZpbmUgX1BPU0lYX1RJTUVSUwkJCTEKKyNkZWZpbmUgX1BPU0lYX0JBUlJJRVJTICAgICAgICAgICAgICAgICAyMDAxMTJMCisjZGVmaW5lIF9QT1NJWF9SRUFERVJfV1JJVEVSX0xPQ0tTICAgICAgMjAwMTEyTAorI2RlZmluZSBfUE9TSVhfU1BJTl9MT0NLUyAgICAgICAgICAgICAgIDIwMDExMkwKKworCisvKiBJbiBQMTAwMy4xYiBidXQgZGVmaW5lZCBieSBkcmFmdHMgYXQgbGVhc3QgYXMgZWFybHkgYXMgUDEwMDMuMWMvRDEwICAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEUwkJCQkxCisjZGVmaW5lIF9QT1NJWF9USFJFQURfQVRUUl9TVEFDS0FERFIJCTEKKyNkZWZpbmUgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRQkJMQorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcJMQorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVAkJMQorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVAkJMQorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVECQkxCisjZGVmaW5lIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMJCTEKKworLyogUDEwMDMuNGIvRDggZGVmaW5lcyB0aGUgY29uc3RhbnRzIGJlbG93IHRoaXMgY29tbWVudC4gKi8KKyNkZWZpbmUgX1BPU0lYX1NQQVdOCQkJCTEKKyNkZWZpbmUgX1BPU0lYX1RJTUVPVVRTCQkJCTEKKyNkZWZpbmUgX1BPU0lYX0NQVVRJTUUJCQkJMQorI2RlZmluZSBfUE9TSVhfVEhSRUFEX0NQVVRJTUUJCQkxCisjZGVmaW5lIF9QT1NJWF9TUE9SQURJQ19TRVJWRVIJCQkxCisjZGVmaW5lIF9QT1NJWF9USFJFQURfU1BPUkFESUNfU0VSVkVSCQkxCisjZGVmaW5lIF9QT1NJWF9ERVZJQ0VfQ09OVFJPTAkJCTEKKyNkZWZpbmUgX1BPU0lYX0RFVkNUTF9ESVJFQ1RJT04JCQkxCisjZGVmaW5lIF9QT1NJWF9JTlRFUlJVUFRfQ09OVFJPTAkJMQorI2RlZmluZSBfUE9TSVhfQURWSVNPUllfSU5GTwkJCTEKKworLyogVU5JWDk4IGFkZGVkIHNvbWUgbmV3IHB0aHJlYWQgbXV0ZXggYXR0cmlidXRlcyAqLworI2RlZmluZSBfVU5JWDk4X1RIUkVBRF9NVVRFWF9BVFRSSUJVVEVTICAgICAgICAgMQorCisjZW5kaWYKKworLyogWE1LIGxvb3NlbHkgYWRoZXJlcyB0byBQT1NJWCAtLSAxMDAzLjEgKi8KKyNpZmRlZiBfX1hNS19fCisjZGVmaW5lIF9QT1NJWF9USFJFQURTCQkJCTEKKyNkZWZpbmUgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCTEKKyNlbmRpZgorCisKKyNpZmRlZiBfX3N2cjRfXworIyBkZWZpbmUgX1BPU0lYX0pPQl9DT05UUk9MICAgICAxCisjIGRlZmluZSBfUE9TSVhfU0FWRURfSURTICAgICAgIDEKKyMgZGVmaW5lIF9QT1NJWF9WRVJTSU9OIDE5OTAwOUwKKyNlbmRpZgorCisjaWZkZWYgX19DWUdXSU5fXworCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyNkZWZpbmUgX1BPU0lYX1ZFUlNJT04JCQkJMjAwMTEyTAorI2RlZmluZSBfUE9TSVgyX1ZFUlNJT04JCQkJMjAwMTEyTAorI2RlZmluZSBfWE9QRU5fVkVSU0lPTgkJCQkgICA2MDAKKworI2RlZmluZSBfUE9TSVhfQURWSVNPUllfSU5GTwkJCTIwMDExMkwKKy8qICNkZWZpbmUgX1BPU0lYX0FTWU5DSFJPTk9VU19JTwkJICAgIC0xICovCisvKiAjZGVmaW5lIF9QT1NJWF9CQVJSSUVSUwkJCSAgICAtMSAqLworI2RlZmluZSBfUE9TSVhfQ0hPV05fUkVTVFJJQ1RFRAkJCSAgICAgMQorI2RlZmluZSBfUE9TSVhfQ0xPQ0tfU0VMRUNUSU9OCQkJMjAwMTEyTAorI2RlZmluZSBfUE9TSVhfQ1BVVElNRQkJCSAgICAJMjAwMTEyTAorI2RlZmluZSBfUE9TSVhfRlNZTkMJCQkJMjAwMTEyTAorI2RlZmluZSBfUE9TSVhfSVBWNgkJCQkyMDAxMTJMCisjZGVmaW5lIF9QT1NJWF9KT0JfQ09OVFJPTAkJCSAgICAgMQorI2RlZmluZSBfUE9TSVhfTUFQUEVEX0ZJTEVTCQkJMjAwMTEyTAorLyogI2RlZmluZSBfUE9TSVhfTUVNTE9DSwkJCSAgICAtMSAqLworI2RlZmluZSBfUE9TSVhfTUVNTE9DS19SQU5HRQkJCTIwMDExMkwKKyNkZWZpbmUgX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OCQkyMDAxMTJMCisjZGVmaW5lIF9QT1NJWF9NRVNTQUdFX1BBU1NJTkcJCQkyMDAxMTJMCisjZGVmaW5lIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sJCQkyMDAxMTJMCisjZGVmaW5lIF9QT1NJWF9OT19UUlVOQwkJCQkgICAgIDEKKy8qICNkZWZpbmUgX1BPU0lYX1BSSU9SSVRJWkVEX0lPCQkgICAgLTEgKi8KKyNkZWZpbmUgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcJCTIwMDExMkwKKyNkZWZpbmUgX1BPU0lYX1JBV19TT0NLRVRTCQkJMjAwMTEyTAorI2RlZmluZSBfUE9TSVhfUkVBREVSX1dSSVRFUl9MT0NLUwkJMjAwMTEyTAorI2RlZmluZSBfUE9TSVhfUkVBTFRJTUVfU0lHTkFMUwkJCTIwMDExMkwKKyNkZWZpbmUgX1BPU0lYX1JFR0VYUAkJCQkgICAgIDEKKyNkZWZpbmUgX1BPU0lYX1NBVkVEX0lEUwkJCSAgICAgMQorI2RlZmluZSBfUE9TSVhfU0VNQVBIT1JFUwkJCTIwMDExMkwKKyNkZWZpbmUgX1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUwkJMjAwMTEyTCAKKyNkZWZpbmUgX1BPU0lYX1NIRUxMCQkJCSAgICAgMQorLyogI2RlZmluZSBfUE9TSVhfU1BBV04JCQkJICAgIC0xICovCisjZGVmaW5lIF9QT1NJWF9TUElOX0xPQ0tTCQkJICAgIDIwMDExMkwKKy8qICNkZWZpbmUgX1BPU0lYX1NQT1JBRElDX1NFUlZFUgkJICAgIC0xICovCisjZGVmaW5lIF9QT1NJWF9TWU5DSFJPTklaRURfSU8JCQkyMDAxMTJMCisjZGVmaW5lIF9QT1NJWF9USFJFQURfQVRUUl9TVEFDS0FERFIJCTIwMDExMkwKKyNkZWZpbmUgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRQkJMjAwMTEyTAorI2RlZmluZSBfUE9TSVhfVEhSRUFEX0NQVVRJTUUJCQkyMDAxMTJMCisvKiAjZGVmaW5lIF9QT1NJWF9USFJFQURfUFJJT19JTkhFUklUCQkgICAgLTEgKi8KKy8qICNkZWZpbmUgX1BPU0lYX1RIUkVBRF9QUklPX1BST1RFQ1QJCSAgICAtMSAqLworI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcJMjAwMTEyTAorI2RlZmluZSBfUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVECQkyMDAxMTJMCisjZGVmaW5lIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMJCTIwMDExMkwKKy8qICNkZWZpbmUgX1BPU0lYX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIJICAgIC0xICovCisjZGVmaW5lIF9QT1NJWF9USFJFQURTCQkJCTIwMDExMkwKKy8qICNkZWZpbmUgX1BPU0lYX1RJTUVPVVRTCQkJICAgIC0xICovCisjZGVmaW5lIF9QT1NJWF9USU1FUlMJCQkJICAgICAxCisvKiAjZGVmaW5lIF9QT1NJWF9UUkFDRQkJCQkgICAgLTEgKi8KKy8qICNkZWZpbmUgX1BPU0lYX1RSQUNFX0VWRU5UX0ZJTFRFUgkJICAgIC0xICovCisvKiAjZGVmaW5lIF9QT1NJWF9UUkFDRV9JTkhFUklUCQkJICAgIC0xICovCisvKiAjZGVmaW5lIF9QT1NJWF9UUkFDRV9MT0cJCQkgICAgLTEgKi8KKy8qICNkZWZpbmUgX1BPU0lYX1RZUEVEX01FTU9SWV9PQkpFQ1RTCQkgICAgLTEgKi8KKyNkZWZpbmUgX1BPU0lYX1ZESVNBQkxFCQkJCSAgICdcMCcKKyNkZWZpbmUgX1BPU0lYMl9DX0JJTkQJCQkJMjAwMTEyTAorI2RlZmluZSBfUE9TSVgyX0NfREVWCQkJCTIwMDExMkwKKyNkZWZpbmUgX1BPU0lYMl9DSEFSX1RFUk0JCQkyMDAxMTJMCisvKiAjZGVmaW5lIF9QT1NJWDJfRk9SVF9ERVYJCQkgICAgLTEgKi8KKy8qICNkZWZpbmUgX1BPU0lYMl9GT1JUX1JVTgkJCSAgICAtMSAqLworLyogI2RlZmluZSBfUE9TSVgyX0xPQ0FMRURFRgkJCSAgICAtMSAqLworLyogI2RlZmluZSBfUE9TSVgyX1BCUwkJCQkgICAgLTEgKi8KKy8qICNkZWZpbmUgX1BPU0lYMl9QQlNfQUNDT1VOVElORwkJICAgIC0xICovCisvKiAjZGVmaW5lIF9QT1NJWDJfUEJTX0NIRUNLUE9JTlQJCSAgICAtMSAqLworLyogI2RlZmluZSBfUE9TSVgyX1BCU19MT0NBVEUJCQkgICAgLTEgKi8KKy8qICNkZWZpbmUgX1BPU0lYMl9QQlNfTUVTU0FHRQkJCSAgICAtMSAqLworLyogI2RlZmluZSBfUE9TSVgyX1BCU19UUkFDSwkJCSAgICAtMSAqLworI2RlZmluZSBfUE9TSVgyX1NXX0RFVgkJCQkyMDAxMTJMCisjZGVmaW5lIF9QT1NJWDJfVVBFCQkJCTIwMDExMkwKKyNkZWZpbmUgX1BPU0lYX1Y2X0lMUDMyX09GRjMyCQkJICAgIC0xCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgX1BPU0lYX1Y2X0lMUDMyX09GRkJJRwkJCSAgICAtMQorI2RlZmluZSBfUE9TSVhfVjZfTFA2NF9PRkY2NAkJCSAgICAgMQorI2RlZmluZSBfUE9TSVhfVjZfTFBCSUdfT0ZGQklHCQkJICAgICAxCisjZWxzZQorI2RlZmluZSBfUE9TSVhfVjZfSUxQMzJfT0ZGQklHCQkJICAgICAxCisjZGVmaW5lIF9QT1NJWF9WNl9MUDY0X09GRjY0CQkJICAgIC0xCisjZGVmaW5lIF9QT1NJWF9WNl9MUEJJR19PRkZCSUcJCQkgICAgLTEKKyNlbmRpZgorI2RlZmluZSBfWEJTNV9JTFAzMl9PRkYzMgkJCV9QT1NJWF9WNl9JTFAzMl9PRkYzMgorI2RlZmluZSBfWEJTNV9JTFAzMl9PRkZCSUcJCQlfUE9TSVhfVjZfSUxQMzJfT0ZGQklHCisjZGVmaW5lIF9YQlM1X0xQNjRfT0ZGNjQJCQlfUE9TSVhfVjZfTFA2NF9PRkY2NAorI2RlZmluZSBfWEJTNV9MUEJJR19PRkZCSUcJCQlfUE9TSVhfVjZfTFBCSUdfT0ZGQklHCisjZGVmaW5lIF9YT1BFTl9DUllQVAkJCQkgICAgIDEKKyNkZWZpbmUgX1hPUEVOX0VOSF9JMThOCQkJCSAgICAgMQorLyogI2RlZmluZSBfWE9QRU5fTEVHQUNZCQkJICAgIC0xICovCisvKiAjZGVmaW5lIF9YT1BFTl9SRUFMVElNRQkJCSAgICAtMSAqLworLyogI2RlZmluZSBfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUwkJICAgIC0xICovCisjZGVmaW5lIF9YT1BFTl9TSE0JCQkJICAgICAxCisvKiAjZGVmaW5lIF9YT1BFTl9TVFJFQU1TCQkJICAgIC0xICovCisvKiAjZGVmaW5lIF9YT1BFTl9VTklYCQkJCSAgICAtMSAqLworCisjZW5kaWYgLyogIV9fU1RSSUNUX0FOU0lfXyB8fCBfX2NwbHVzcGx1cyB8fCBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgKi8KKworLyogVGhlIHZhbHVlIGNvcnJlc3BvbmRzIHRvIFVOSUNPREUgdmVyc2lvbiA0LjAsIHdoaWNoIGlzIHRoZSB2ZXJzaW9uCisgICBzdXBwb3J0ZWQgYnkgWFAuICBOZXdsaWIgc3VwcG9ydHMgNS4yICgyMDExKSBidXQgc28gZmFyIEN5Z3dpbiBuZWVkcworICAgdGhlIE1TIGNvbnZlcnNpb25zIGZvciBkb3VibGUtYnl0ZSBjaGFyc2V0cy4gKi8KKyNkZWZpbmUgX19TVERDX0lTT18xMDY0Nl9fIDIwMDMwNUwKKworI2VuZGlmIC8qIF9fQ1lHV0lOX18gKi8KKworLyogUGVyIHRoZSBwZXJtaXNzaW9uIGdpdmVuIGluIFBPU0lYLjEtMjAwOCBzZWN0aW9uIDIuMi4xLCBkZWZpbmUKKyAqIF9QT1NJWF9DX1NPVVJDRSBpZiBfWE9QRU5fU09VUkNFIGlzIGRlZmluZWQgYW5kIF9QT1NJWF9DX1NPVVJDRSBpcyBub3QuCisgKiAoX1hPUEVOX1NPVVJDRSBpbmRpY2F0ZXMgdGhhdCBYU0kgZXh0ZW5zaW9ucyBhcmUgZGVzaXJlZCBieSBhbiBhcHBsaWNhdGlvbi4pCisgKiBUaGlzIHBlcm1pc3Npb24gaXMgZmlyc3QgZ3JhbnRlZCBpbiAyMDA4LCBidXQgdXNlIGl0IGZvciBvbGRlciBvbmVzLCBhbHNvLgorICogQWxsb3cgZm9yIF9YT1BFTl9TT1VSQ0UgdG8gYmUgZW1wdHkgKGZyb20gdGhlIGVhcmxpZXN0IGZvcm0gb2YgaXQsIGJlZm9yZSBpdAorICogd2FzIHJlcXVpcmVkIHRvIGhhdmUgc3BlY2lmaWMgdmFsdWVzKS4KKyAqLworI2lmICFkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgICYmICBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIAorICAjaWYgKF9YT1BFTl9TT1VSQ0UgLSAwKSA9PSA3MDAJLyogUE9TSVguMS0yMDA4ICovCisgICAgI2RlZmluZSBfUE9TSVhfQ19TT1VSQ0UgICAgICAgMjAwODA5TAorICAgI2VsaWYgKF9YT1BFTl9TT1VSQ0UgLSAwKSA9PSA2MDAJLyogUE9TSVguMS0yMDAxIG9yIDIwMDQgKi8KKyAgICAjZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAgICAgICAyMDAxMTJMCisgICAjZWxpZiAoX1hPUEVOX1NPVVJDRSAtIDApID09IDUwMAkvKiBQT1NJWC4xLTE5OTUgKi8KKyAgICAjZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAgICAgICAxOTk1MDZMCisgICAjZWxpZiAoX1hPUEVOX1NPVVJDRSAtIDApIDwgNTAwCS8qIHJlYWxseSBvbGQgKi8KKyAgICAjZGVmaW5lIF9QT1NJWF9DX1NPVVJDRSAgICAgICAyCisgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX1NZU19GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2ZpbGUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZDRmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2ZpbGUuaApAQCAtMCwwICsxLDIgQEAKKworI2luY2x1ZGUgPHN5cy9mY250bC5oPgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9pY29udm5scy5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9pY29udm5scy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZWExODMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2ljb252bmxzLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0LCBBcnRlbSBCLiBCaXR5dWNraXkuCisgKiBSaWdodHMgdHJhbnNmZXJyZWQgdG8gRnJhbmtsaW4gRWxlY3Ryb25pYyBQdWJsaXNoZXJzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBGdW50aW9ucywgbWFjcm9zLCBldGMgaW1wbGltZW50ZWQgaW4gaWNvbnYgbGlicmFyeSBidXQgdXNlZCBieSBvdGhlcgorICogTkxTLXJlbGF0ZWQgc3Vic3lzdGVtcyB0b28uCisgKi8KKyNpZm5kZWYgX19TWVNfSUNPTlZOTFNfSF9fCisjZGVmaW5lIF9fU1lTX0lDT05WTkxTX0hfXworCisjaW5jbHVkZSA8X2Fuc2kuaD4KKyNpbmNsdWRlIDxyZWVudC5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KKworLyogSWNvbnYgZGF0YSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUgKi8KKyNkZWZpbmUgTkxTX0VOVlZBUl9OQU1FICAiTkxTUEFUSCIKKy8qIERlZmF1bHQgTkxTUEFUSCB2YWx1ZSAqLworI2RlZmluZSBJQ09OVl9ERUZBVUxUX05MU1BBVEggIi91c3IvbG9jYWxlIgorLyogRGlyZWN0aW9uIG1hcmtlcnMgKi8KKyNkZWZpbmUgSUNPTlZfTkxTX0ZST00gMAorI2RlZmluZSBJQ09OVl9OTFNfVE8gICAxCisKK19WT0lECitfRVhGVU4oX2ljb252X25sc19nZXRfc3RhdGUsIChpY29udl90IGNkLCBtYnN0YXRlX3QgKnBzLCBpbnQgZGlyZWN0aW9uKSk7CisKK2ludAorX0VYRlVOKF9pY29udl9ubHNfc2V0X3N0YXRlLCAoaWNvbnZfdCBjZCwgbWJzdGF0ZV90ICpwcywgaW50IGRpcmVjdGlvbikpOworCitpbnQKK19FWEZVTihfaWNvbnZfbmxzX2lzX3N0YXRlZnVsLCAoaWNvbnZfdCBjZCwgaW50IGRpcmVjdGlvbikpOworCitpbnQKK19FWEZVTihfaWNvbnZfbmxzX2dldF9tYl9jdXJfbWF4LCAoaWNvbnZfdCBjZCwgaW50IGRpcmVjdGlvbikpOworCitzaXplX3QKK19FWEZVTihfaWNvbnZfbmxzX2NvbnYsIChzdHJ1Y3QgX3JlZW50ICpycHRyLCBpY29udl90IGNkLAorICAgICAgICAgICAgICAgICAgICAgICAgX0NPTlNUIGNoYXIgKippbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KSk7CisKK19DT05TVCBjaGFyICoKK19FWEZVTihfaWNvbnZfbmxzX2NvbnN0cnVjdF9maWxlbmFtZSwgKHN0cnVjdCBfcmVlbnQgKnJwdHIsIF9DT05TVCBjaGFyICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ09OU1QgY2hhciAqZGlyLCBfQ09OU1QgY2hhciAqZXh0KSk7CisKKworaW50CitfRVhGVU4oX2ljb252X25sc19vcGVuLCAoc3RydWN0IF9yZWVudCAqcnB0ciwgX0NPTlNUIGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnZfdCAqdG93YywgaWNvbnZfdCAqZnJvbXdjLCBpbnQgZmxhZykpOworCitjaGFyICoKK19FWEZVTihfaWNvbnZfcmVzb2x2ZV9lbmNvZGluZ19uYW1lLCAoc3RydWN0IF9yZWVudCAqcnB0ciwgX0NPTlNUIGNoYXIgKmNhKSk7CisKKyNlbmRpZiAvKiBfX1NZU19JQ09OVk5MU19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9sb2NrLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDc1ZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9sb2NrLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfX1NZU19MT0NLX0hfXworI2RlZmluZSBfX1NZU19MT0NLX0hfXworCisvKiBkdW1teSBsb2NrIHJvdXRpbmVzIGZvciBzaW5nbGUtdGhyZWFkZWQgYXBzICovCisKK3R5cGVkZWYgaW50IF9MT0NLX1Q7Cit0eXBlZGVmIGludCBfTE9DS19SRUNVUlNJVkVfVDsKKyAKKyNpbmNsdWRlIDxfYW5zaS5oPgorCisjZGVmaW5lIF9fTE9DS19JTklUKGNsYXNzLGxvY2spIHN0YXRpYyBpbnQgbG9jayA9IDA7CisjZGVmaW5lIF9fTE9DS19JTklUX1JFQ1VSU0lWRShjbGFzcyxsb2NrKSBzdGF0aWMgaW50IGxvY2sgPSAwOworI2RlZmluZSBfX2xvY2tfaW5pdChsb2NrKSAoX0NBU1RfVk9JRCAwKQorI2RlZmluZSBfX2xvY2tfaW5pdF9yZWN1cnNpdmUobG9jaykgKF9DQVNUX1ZPSUQgMCkKKyNkZWZpbmUgX19sb2NrX2Nsb3NlKGxvY2spIChfQ0FTVF9WT0lEIDApCisjZGVmaW5lIF9fbG9ja19jbG9zZV9yZWN1cnNpdmUobG9jaykgKF9DQVNUX1ZPSUQgMCkKKyNkZWZpbmUgX19sb2NrX2FjcXVpcmUobG9jaykgKF9DQVNUX1ZPSUQgMCkKKyNkZWZpbmUgX19sb2NrX2FjcXVpcmVfcmVjdXJzaXZlKGxvY2spIChfQ0FTVF9WT0lEIDApCisjZGVmaW5lIF9fbG9ja190cnlfYWNxdWlyZShsb2NrKSAoX0NBU1RfVk9JRCAwKQorI2RlZmluZSBfX2xvY2tfdHJ5X2FjcXVpcmVfcmVjdXJzaXZlKGxvY2spIChfQ0FTVF9WT0lEIDApCisjZGVmaW5lIF9fbG9ja19yZWxlYXNlKGxvY2spIChfQ0FTVF9WT0lEIDApCisjZGVmaW5lIF9fbG9ja19yZWxlYXNlX3JlY3Vyc2l2ZShsb2NrKSAoX0NBU1RfVk9JRCAwKQorCisjZW5kaWYgLyogX19TWVNfTE9DS19IX18gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvcGFyYW0uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwM2QzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9wYXJhbS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qIFRoaXMgaXMgYSBkdW1teSA8c3lzL3BhcmFtLmg+IGZpbGUsIG5vdCBjdXN0b21pemVkIGZvciBhbnkKKyAgIHBhcnRpY3VsYXIgc3lzdGVtLiAgSWYgdGhlcmUgaXMgYSBwYXJhbS5oIGluIGxpYmMvc3lzL1NZU0RJUi9zeXMsCisgICBpdCB3aWxsIG92ZXJyaWRlIHRoaXMgb25lLiAgKi8KKworI2lmbmRlZiBfU1lTX1BBUkFNX0gKKyMgZGVmaW5lIF9TWVNfUEFSQU1fSAorCisjaW5jbHVkZSA8c3lzL2NvbmZpZy5oPgorI2luY2x1ZGUgPHN5cy9zeXNsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcGFyYW0uaD4KKworI2lmbmRlZiBIWgorIyBkZWZpbmUgSFogKDYwKQorI2VuZGlmCisjaWZuZGVmIE5PRklMRQorIyBkZWZpbmUgTk9GSUxFCSg2MCkKKyNlbmRpZgorI2lmbmRlZiBQQVRIU0laRQorIyBkZWZpbmUgUEFUSFNJWkUgKDEwMjQpCisjZW5kaWYKKworI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCisKKyNkZWZpbmUgTUFYKGEsYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgTUlOKGEsYikgKChhKSA8IChiKSA/IChhKSA6IChiKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3F1ZXVlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjN2RhYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvcXVldWUuaApAQCAtMCwwICsxLDY5MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcXVldWUuaAk4LjUgKEJlcmtlbGV5KSA4LzIwLzk0CisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmIF9TWVNfUVVFVUVfSF8KKyNkZWZpbmUJX1NZU19RVUVVRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBmb3VyIHR5cGVzIG9mIGRhdGEgc3RydWN0dXJlczogc2luZ2x5LWxpbmtlZCBsaXN0cywKKyAqIHNpbmdseS1saW5rZWQgdGFpbCBxdWV1ZXMsIGxpc3RzIGFuZCB0YWlsIHF1ZXVlcy4KKyAqCisgKiBBIHNpbmdseS1saW5rZWQgbGlzdCBpcyBoZWFkZWQgYnkgYSBzaW5nbGUgZm9yd2FyZCBwb2ludGVyLiBUaGUgZWxlbWVudHMKKyAqIGFyZSBzaW5nbHkgbGlua2VkIGZvciBtaW5pbXVtIHNwYWNlIGFuZCBwb2ludGVyIG1hbmlwdWxhdGlvbiBvdmVyaGVhZCBhdAorICogdGhlIGV4cGVuc2Ugb2YgTyhuKSByZW1vdmFsIGZvciBhcmJpdHJhcnkgZWxlbWVudHMuIE5ldyBlbGVtZW50cyBjYW4gYmUKKyAqIGFkZGVkIHRvIHRoZSBsaXN0IGFmdGVyIGFuIGV4aXN0aW5nIGVsZW1lbnQgb3IgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgKiBFbGVtZW50cyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGhlYWQgb2YgdGhlIGxpc3Qgc2hvdWxkIHVzZSB0aGUgZXhwbGljaXQKKyAqIG1hY3JvIGZvciB0aGlzIHB1cnBvc2UgZm9yIG9wdGltdW0gZWZmaWNpZW5jeS4gQSBzaW5nbHktbGlua2VkIGxpc3QgbWF5CisgKiBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24uICBTaW5nbHktbGlua2VkIGxpc3RzIGFyZSBpZGVhbAorICogZm9yIGFwcGxpY2F0aW9ucyB3aXRoIGxhcmdlIGRhdGFzZXRzIGFuZCBmZXcgb3Igbm8gcmVtb3ZhbHMgb3IgZm9yCisgKiBpbXBsZW1lbnRpbmcgYSBMSUZPIHF1ZXVlLgorICoKKyAqIEEgc2luZ2x5LWxpbmtlZCB0YWlsIHF1ZXVlIGlzIGhlYWRlZCBieSBhIHBhaXIgb2YgcG9pbnRlcnMsIG9uZSB0byB0aGUKKyAqIGhlYWQgb2YgdGhlIGxpc3QgYW5kIHRoZSBvdGhlciB0byB0aGUgdGFpbCBvZiB0aGUgbGlzdC4gVGhlIGVsZW1lbnRzIGFyZQorICogc2luZ2x5IGxpbmtlZCBmb3IgbWluaW11bSBzcGFjZSBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb24gb3ZlcmhlYWQgYXQgdGhlCisgKiBleHBlbnNlIG9mIE8obikgcmVtb3ZhbCBmb3IgYXJiaXRyYXJ5IGVsZW1lbnRzLiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkCisgKiB0byB0aGUgbGlzdCBhZnRlciBhbiBleGlzdGluZyBlbGVtZW50LCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgb3IgYXQgdGhlCisgKiBlbmQgb2YgdGhlIGxpc3QuIEVsZW1lbnRzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgaGVhZCBvZiB0aGUgdGFpbCBxdWV1ZQorICogc2hvdWxkIHVzZSB0aGUgZXhwbGljaXQgbWFjcm8gZm9yIHRoaXMgcHVycG9zZSBmb3Igb3B0aW11bSBlZmZpY2llbmN5LgorICogQSBzaW5nbHktbGlua2VkIHRhaWwgcXVldWUgbWF5IG9ubHkgYmUgdHJhdmVyc2VkIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KKyAqIFNpbmdseS1saW5rZWQgdGFpbCBxdWV1ZXMgYXJlIGlkZWFsIGZvciBhcHBsaWNhdGlvbnMgd2l0aCBsYXJnZSBkYXRhc2V0cworICogYW5kIGZldyBvciBubyByZW1vdmFscyBvciBmb3IgaW1wbGVtZW50aW5nIGEgRklGTyBxdWV1ZS4KKyAqCisgKiBBIGxpc3QgaXMgaGVhZGVkIGJ5IGEgc2luZ2xlIGZvcndhcmQgcG9pbnRlciAob3IgYW4gYXJyYXkgb2YgZm9yd2FyZAorICogcG9pbnRlcnMgZm9yIGEgaGFzaCB0YWJsZSBoZWFkZXIpLiBUaGUgZWxlbWVudHMgYXJlIGRvdWJseSBsaW5rZWQKKyAqIHNvIHRoYXQgYW4gYXJiaXRyYXJ5IGVsZW1lbnQgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCBhIG5lZWQgdG8KKyAqIHRyYXZlcnNlIHRoZSBsaXN0LiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZQorICogb3IgYWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCBvciBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gQSBsaXN0CisgKiBtYXkgYmUgdHJhdmVyc2VkIGluIGVpdGhlciBkaXJlY3Rpb24uCisgKgorICogQSB0YWlsIHF1ZXVlIGlzIGhlYWRlZCBieSBhIHBhaXIgb2YgcG9pbnRlcnMsIG9uZSB0byB0aGUgaGVhZCBvZiB0aGUKKyAqIGxpc3QgYW5kIHRoZSBvdGhlciB0byB0aGUgdGFpbCBvZiB0aGUgbGlzdC4gVGhlIGVsZW1lbnRzIGFyZSBkb3VibHkKKyAqIGxpbmtlZCBzbyB0aGF0IGFuIGFyYml0cmFyeSBlbGVtZW50IGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgYSBuZWVkIHRvCisgKiB0cmF2ZXJzZSB0aGUgbGlzdC4gTmV3IGVsZW1lbnRzIGNhbiBiZSBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUgb3IKKyAqIGFmdGVyIGFuIGV4aXN0aW5nIGVsZW1lbnQsIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBvciBhdCB0aGUgZW5kIG9mCisgKiB0aGUgbGlzdC4gQSB0YWlsIHF1ZXVlIG1heSBiZSB0cmF2ZXJzZWQgaW4gZWl0aGVyIGRpcmVjdGlvbi4KKyAqCisgKiBGb3IgZGV0YWlscyBvbiB0aGUgdXNlIG9mIHRoZXNlIG1hY3Jvcywgc2VlIHRoZSBxdWV1ZSgzKSBtYW51YWwgcGFnZS4KKyAqCisgKgorICoJCQkJU0xJU1QJTElTVAlTVEFJTFEJVEFJTFEKKyAqIF9IRUFECQkJKwkrCSsJKworICogX0hFQURfSU5JVElBTElaRVIJCSsJKwkrCSsKKyAqIF9FTlRSWQkJCSsJKwkrCSsKKyAqIF9JTklUCQkJKwkrCSsJKworICogX0VNUFRZCQkJKwkrCSsJKworICogX0ZJUlNUCQkJKwkrCSsJKworICogX05FWFQJCQkrCSsJKwkrCisgKiBfUFJFVgkJCS0JKwktCSsKKyAqIF9MQVNUCQkJLQktCSsJKworICogX0ZPUkVBQ0gJCQkrCSsJKwkrCisgKiBfRk9SRUFDSF9TQUZFCQkrCSsJKwkrCisgKiBfRk9SRUFDSF9SRVZFUlNFCQktCS0JLQkrCisgKiBfRk9SRUFDSF9SRVZFUlNFX1NBRkUJLQktCS0JKworICogX0lOU0VSVF9IRUFECQkJKwkrCSsJKworICogX0lOU0VSVF9CRUZPUkUJCS0JKwktCSsKKyAqIF9JTlNFUlRfQUZURVIJCSsJKwkrCSsKKyAqIF9JTlNFUlRfVEFJTAkJCS0JLQkrCSsKKyAqIF9DT05DQVQJCQktCS0JKwkrCisgKiBfUkVNT1ZFX0FGVEVSCQkrCS0JKwktCisgKiBfUkVNT1ZFX0hFQUQJCQkrCS0JKwktCisgKiBfUkVNT1ZFCQkJKwkrCSsJKworICogX1NXQVAJCQkrCSsJKwkrCisgKgorICovCisjaWZkZWYgUVVFVUVfTUFDUk9fREVCVUcKKy8qIFN0b3JlIHRoZSBsYXN0IDIgcGxhY2VzIHRoZSBxdWV1ZSBlbGVtZW50IG9yIGhlYWQgd2FzIGFsdGVyZWQgKi8KK3N0cnVjdCBxbV90cmFjZSB7CisJdW5zaWduZWQgbG9uZwkgbGFzdGxpbmU7CisJdW5zaWduZWQgbG9uZwkgcHJldmxpbmU7CisJY29uc3QgY2hhcgkqbGFzdGZpbGU7CisJY29uc3QgY2hhcgkqcHJldmZpbGU7Cit9OworCisjZGVmaW5lCVRSQUNFQlVGCXN0cnVjdCBxbV90cmFjZSB0cmFjZTsKKyNkZWZpbmUJVFJBQ0VCVUZfSU5JVElBTElaRVIJeyBfX0ZJTEVfXywgX19MSU5FX18sIE5VTEwsIDAgfSAsCisjZGVmaW5lCVRSQVNISVQoeCkJZG8geyh4KSA9ICh2b2lkICopLTE7fSB3aGlsZSAoMCkKKyNkZWZpbmUJUU1EX1NBVkVMSU5LKG5hbWUsIGxpbmspCXZvaWQgKipuYW1lID0gKHZvaWQgKikmKGxpbmspCisKKyNkZWZpbmUJUU1EX1RSQUNFX0hFQUQoaGVhZCkgZG8gewkJCQkJXAorCShoZWFkKS0+dHJhY2UucHJldmxpbmUgPSAoaGVhZCktPnRyYWNlLmxhc3RsaW5lOwkJXAorCShoZWFkKS0+dHJhY2UucHJldmZpbGUgPSAoaGVhZCktPnRyYWNlLmxhc3RmaWxlOwkJXAorCShoZWFkKS0+dHJhY2UubGFzdGxpbmUgPSBfX0xJTkVfXzsJCQkJXAorCShoZWFkKS0+dHJhY2UubGFzdGZpbGUgPSBfX0ZJTEVfXzsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlRTURfVFJBQ0VfRUxFTShlbGVtKSBkbyB7CQkJCQlcCisJKGVsZW0pLT50cmFjZS5wcmV2bGluZSA9IChlbGVtKS0+dHJhY2UubGFzdGxpbmU7CQlcCisJKGVsZW0pLT50cmFjZS5wcmV2ZmlsZSA9IChlbGVtKS0+dHJhY2UubGFzdGZpbGU7CQlcCisJKGVsZW0pLT50cmFjZS5sYXN0bGluZSA9IF9fTElORV9fOwkJCQlcCisJKGVsZW0pLT50cmFjZS5sYXN0ZmlsZSA9IF9fRklMRV9fOwkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorI2RlZmluZQlRTURfVFJBQ0VfRUxFTShlbGVtKQorI2RlZmluZQlRTURfVFJBQ0VfSEVBRChoZWFkKQorI2RlZmluZQlRTURfU0FWRUxJTksobmFtZSwgbGluaykKKyNkZWZpbmUJVFJBQ0VCVUYKKyNkZWZpbmUJVFJBQ0VCVUZfSU5JVElBTElaRVIKKyNkZWZpbmUJVFJBU0hJVCh4KQorI2VuZGlmCS8qIFFVRVVFX01BQ1JPX0RFQlVHICovCisKKy8qCisgKiBTaW5nbHktbGlua2VkIExpc3QgZGVjbGFyYXRpb25zLgorICovCisjZGVmaW5lCVNMSVNUX0hFQUQobmFtZSwgdHlwZSkJCQkJCQlcCitzdHJ1Y3QgbmFtZSB7CQkJCQkJCQlcCisJc3RydWN0IHR5cGUgKnNsaF9maXJzdDsJLyogZmlyc3QgZWxlbWVudCAqLwkJCVwKK30KKworI2RlZmluZQlTTElTVF9IRUFEX0lOSVRJQUxJWkVSKGhlYWQpCQkJCQlcCisJeyBOVUxMIH0KKworI2RlZmluZQlTTElTVF9FTlRSWSh0eXBlKQkJCQkJCVwKK3N0cnVjdCB7CQkJCQkJCQlcCisJc3RydWN0IHR5cGUgKnNsZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlcCit9CisKKy8qCisgKiBTaW5nbHktbGlua2VkIExpc3QgZnVuY3Rpb25zLgorICovCisjZGVmaW5lCVNMSVNUX0VNUFRZKGhlYWQpCSgoaGVhZCktPnNsaF9maXJzdCA9PSBOVUxMKQorCisjZGVmaW5lCVNMSVNUX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnNsaF9maXJzdCkKKworI2RlZmluZQlTTElTVF9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCQlcCisJZm9yICgodmFyKSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcik7CQkJCQkJCVwKKwkgICAgKHZhcikgPSBTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKyNkZWZpbmUJU0xJU1RfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorCWZvciAoKHZhcikgPSBTTElTVF9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgICh2YXIpICYmICgodHZhcikgPSBTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorCSAgICAodmFyKSA9ICh0dmFyKSkKKworI2RlZmluZQlTTElTVF9GT1JFQUNIX1BSRVZQVFIodmFyLCB2YXJwLCBoZWFkLCBmaWVsZCkJCQlcCisJZm9yICgodmFycCkgPSAmU0xJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAoKHZhcikgPSAqKHZhcnApKSAhPSBOVUxMOwkJCQkJXAorCSAgICAodmFycCkgPSAmU0xJU1RfTkVYVCgodmFyKSwgZmllbGQpKQorCisjZGVmaW5lCVNMSVNUX0lOSVQoaGVhZCkgZG8gewkJCQkJCVwKKwlTTElTVF9GSVJTVCgoaGVhZCkpID0gTlVMTDsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU0xJU1RfSU5TRVJUX0FGVEVSKHNsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCVNMSVNUX05FWFQoKGVsbSksIGZpZWxkKSA9IFNMSVNUX05FWFQoKHNsaXN0ZWxtKSwgZmllbGQpOwlcCisJU0xJU1RfTkVYVCgoc2xpc3RlbG0pLCBmaWVsZCkgPSAoZWxtKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlTTElTVF9JTlNFUlRfSEVBRChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCVNMSVNUX05FWFQoKGVsbSksIGZpZWxkKSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJXAorCVNMSVNUX0ZJUlNUKChoZWFkKSkgPSAoZWxtKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU0xJU1RfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSktPmZpZWxkLnNsZV9uZXh0KQorCisjZGVmaW5lCVNMSVNUX1JFTU9WRShoZWFkLCBlbG0sIHR5cGUsIGZpZWxkKSBkbyB7CQkJXAorCVFNRF9TQVZFTElOSyhvbGRuZXh0LCAoZWxtKS0+ZmllbGQuc2xlX25leHQpOwkJCVwKKwlpZiAoU0xJU1RfRklSU1QoKGhlYWQpKSA9PSAoZWxtKSkgewkJCQlcCisJCVNMSVNUX1JFTU9WRV9IRUFEKChoZWFkKSwgZmllbGQpOwkJCVwKKwl9CQkJCQkJCQlcCisJZWxzZSB7CQkJCQkJCQlcCisJCXN0cnVjdCB0eXBlICpjdXJlbG0gPSBTTElTVF9GSVJTVCgoaGVhZCkpOwkJXAorCQl3aGlsZSAoU0xJU1RfTkVYVChjdXJlbG0sIGZpZWxkKSAhPSAoZWxtKSkJCVwKKwkJCWN1cmVsbSA9IFNMSVNUX05FWFQoY3VyZWxtLCBmaWVsZCk7CQlcCisJCVNMSVNUX1JFTU9WRV9BRlRFUihjdXJlbG0sIGZpZWxkKTsJCQlcCisJfQkJCQkJCQkJXAorCVRSQVNISVQoKm9sZG5leHQpOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgU0xJU1RfUkVNT1ZFX0FGVEVSKGVsbSwgZmllbGQpIGRvIHsJCQkJXAorCVNMSVNUX05FWFQoZWxtLCBmaWVsZCkgPQkJCQkJXAorCSAgICBTTElTVF9ORVhUKFNMSVNUX05FWFQoZWxtLCBmaWVsZCksIGZpZWxkKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNMSVNUX1JFTU9WRV9IRUFEKGhlYWQsIGZpZWxkKSBkbyB7CQkJCVwKKwlTTElTVF9GSVJTVCgoaGVhZCkpID0gU0xJU1RfTkVYVChTTElTVF9GSVJTVCgoaGVhZCkpLCBmaWVsZCk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgU0xJU1RfU1dBUChoZWFkMSwgaGVhZDIsIHR5cGUpIGRvIHsJCQkJXAorCXN0cnVjdCB0eXBlICpzd2FwX2ZpcnN0ID0gU0xJU1RfRklSU1QoaGVhZDEpOwkJCVwKKwlTTElTVF9GSVJTVChoZWFkMSkgPSBTTElTVF9GSVJTVChoZWFkMik7CQkJXAorCVNMSVNUX0ZJUlNUKGhlYWQyKSA9IHN3YXBfZmlyc3Q7CQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBTaW5nbHktbGlua2VkIFRhaWwgcXVldWUgZGVjbGFyYXRpb25zLgorICovCisjZGVmaW5lCVNUQUlMUV9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAorc3RydWN0IG5hbWUgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpzdHFoX2ZpcnN0Oy8qIGZpcnN0IGVsZW1lbnQgKi8JCQlcCisJc3RydWN0IHR5cGUgKipzdHFoX2xhc3Q7LyogYWRkciBvZiBsYXN0IG5leHQgZWxlbWVudCAqLwkJXAorfQorCisjZGVmaW5lCVNUQUlMUV9IRUFEX0lOSVRJQUxJWkVSKGhlYWQpCQkJCQlcCisJeyBOVUxMLCAmKGhlYWQpLnN0cWhfZmlyc3QgfQorCisjZGVmaW5lCVNUQUlMUV9FTlRSWSh0eXBlKQkJCQkJCVwKK3N0cnVjdCB7CQkJCQkJCQlcCisJc3RydWN0IHR5cGUgKnN0cWVfbmV4dDsJLyogbmV4dCBlbGVtZW50ICovCQkJXAorfQorCisvKgorICogU2luZ2x5LWxpbmtlZCBUYWlsIHF1ZXVlIGZ1bmN0aW9ucy4KKyAqLworI2RlZmluZQlTVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMikgZG8gewkJCQlcCisJaWYgKCFTVEFJTFFfRU1QVFkoKGhlYWQyKSkpIHsJCQkJCVwKKwkJKihoZWFkMSktPnN0cWhfbGFzdCA9IChoZWFkMiktPnN0cWhfZmlyc3Q7CQlcCisJCShoZWFkMSktPnN0cWhfbGFzdCA9IChoZWFkMiktPnN0cWhfbGFzdDsJCVwKKwkJU1RBSUxRX0lOSVQoKGhlYWQyKSk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlTVEFJTFFfRU1QVFkoaGVhZCkJKChoZWFkKS0+c3RxaF9maXJzdCA9PSBOVUxMKQorCisjZGVmaW5lCVNUQUlMUV9GSVJTVChoZWFkKQkoKGhlYWQpLT5zdHFoX2ZpcnN0KQorCisjZGVmaW5lCVNUQUlMUV9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCVwKKwlmb3IoKHZhcikgPSBTVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICh2YXIpOwkJCQkJCQlcCisJICAgKHZhcikgPSBTVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpKQorCisKKyNkZWZpbmUJU1RBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKwlmb3IgKCh2YXIpID0gU1RBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcikgJiYgKCh0dmFyKSA9IFNUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorCSAgICAodmFyKSA9ICh0dmFyKSkKKworI2RlZmluZQlTVEFJTFFfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAorCVNUQUlMUV9GSVJTVCgoaGVhZCkpID0gTlVMTDsJCQkJCVwKKwkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoKGhlYWQpKTsJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNUQUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgdHFlbG0sIGVsbSwgZmllbGQpIGRvIHsJCVwKKwlpZiAoKFNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgPSBTVEFJTFFfTkVYVCgodHFlbG0pLCBmaWVsZCkpID09IE5VTEwpXAorCQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAorCVNUQUlMUV9ORVhUKCh0cWVsbSksIGZpZWxkKSA9IChlbG0pOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNUQUlMUV9JTlNFUlRfSEVBRChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCWlmICgoU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IFNUQUlMUV9GSVJTVCgoaGVhZCkpKSA9PSBOVUxMKQlcCisJCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCisJU1RBSUxRX0ZJUlNUKChoZWFkKSkgPSAoZWxtKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU1RBSUxRX0lOU0VSVF9UQUlMKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IE5VTEw7CQkJCVwKKwkqKGhlYWQpLT5zdHFoX2xhc3QgPSAoZWxtKTsJCQkJCVwKKwkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU1RBSUxRX0xBU1QoaGVhZCwgdHlwZSwgZmllbGQpCQkJCQlcCisJKFNUQUlMUV9FTVBUWSgoaGVhZCkpID8gTlVMTCA6CQkJCQlcCisJICAgIF9fY29udGFpbmVyb2YoKGhlYWQpLT5zdHFoX2xhc3QsIHN0cnVjdCB0eXBlLCBmaWVsZC5zdHFlX25leHQpKQorCisjZGVmaW5lCVNUQUlMUV9ORVhUKGVsbSwgZmllbGQpCSgoZWxtKS0+ZmllbGQuc3RxZV9uZXh0KQorCisjZGVmaW5lCVNUQUlMUV9SRU1PVkUoaGVhZCwgZWxtLCB0eXBlLCBmaWVsZCkgZG8gewkJCVwKKwlRTURfU0FWRUxJTksob2xkbmV4dCwgKGVsbSktPmZpZWxkLnN0cWVfbmV4dCk7CQkJXAorCWlmIChTVEFJTFFfRklSU1QoKGhlYWQpKSA9PSAoZWxtKSkgewkJCQlcCisJCVNUQUlMUV9SRU1PVkVfSEVBRCgoaGVhZCksIGZpZWxkKTsJCQlcCisJfQkJCQkJCQkJXAorCWVsc2UgewkJCQkJCQkJXAorCQlzdHJ1Y3QgdHlwZSAqY3VyZWxtID0gU1RBSUxRX0ZJUlNUKChoZWFkKSk7CQlcCisJCXdoaWxlIChTVEFJTFFfTkVYVChjdXJlbG0sIGZpZWxkKSAhPSAoZWxtKSkJCVwKKwkJCWN1cmVsbSA9IFNUQUlMUV9ORVhUKGN1cmVsbSwgZmllbGQpOwkJXAorCQlTVEFJTFFfUkVNT1ZFX0FGVEVSKGhlYWQsIGN1cmVsbSwgZmllbGQpOwkJXAorCX0JCQkJCQkJCVwKKwlUUkFTSElUKCpvbGRuZXh0KTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFNUQUlMUV9SRU1PVkVfQUZURVIoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlpZiAoKFNUQUlMUV9ORVhUKGVsbSwgZmllbGQpID0JCQkJCVwKKwkgICAgIFNUQUlMUV9ORVhUKFNUQUlMUV9ORVhUKGVsbSwgZmllbGQpLCBmaWVsZCkpID09IE5VTEwpCVwKKwkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU1RBSUxRX1JFTU9WRV9IRUFEKGhlYWQsIGZpZWxkKSBkbyB7CQkJCVwKKwlpZiAoKFNUQUlMUV9GSVJTVCgoaGVhZCkpID0JCQkJCVwKKwkgICAgIFNUQUlMUV9ORVhUKFNUQUlMUV9GSVJTVCgoaGVhZCkpLCBmaWVsZCkpID09IE5VTEwpCQlcCisJCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlTVEFJTFFfUkVNT1ZFX0hFQURfVU5USUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlpZiAoKFNUQUlMUV9GSVJTVCgoaGVhZCkpID0gU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKSkgPT0gTlVMTCkJXAorCQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoKGhlYWQpKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgU1RBSUxRX1NXQVAoaGVhZDEsIGhlYWQyLCB0eXBlKSBkbyB7CQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3dhcF9maXJzdCA9IFNUQUlMUV9GSVJTVChoZWFkMSk7CQkJXAorCXN0cnVjdCB0eXBlICoqc3dhcF9sYXN0ID0gKGhlYWQxKS0+c3RxaF9sYXN0OwkJCVwKKwlTVEFJTFFfRklSU1QoaGVhZDEpID0gU1RBSUxRX0ZJUlNUKGhlYWQyKTsJCQlcCisJKGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9sYXN0OwkJCVwKKwlTVEFJTFFfRklSU1QoaGVhZDIpID0gc3dhcF9maXJzdDsJCQkJXAorCShoZWFkMiktPnN0cWhfbGFzdCA9IHN3YXBfbGFzdDsJCQkJCVwKKwlpZiAoU1RBSUxRX0VNUFRZKGhlYWQxKSkJCQkJCVwKKwkJKGhlYWQxKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9GSVJTVChoZWFkMSk7CQlcCisJaWYgKFNUQUlMUV9FTVBUWShoZWFkMikpCQkJCQlcCisJCShoZWFkMiktPnN0cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoaGVhZDIpOwkJXAorfSB3aGlsZSAoMCkKKworCisvKgorICogTGlzdCBkZWNsYXJhdGlvbnMuCisgKi8KKyNkZWZpbmUJTElTVF9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAorc3RydWN0IG5hbWUgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpsaF9maXJzdDsJLyogZmlyc3QgZWxlbWVudCAqLwkJCVwKK30KKworI2RlZmluZQlMSVNUX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwgfQorCisjZGVmaW5lCUxJU1RfRU5UUlkodHlwZSkJCQkJCQlcCitzdHJ1Y3QgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpsZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlcCisJc3RydWN0IHR5cGUgKipsZV9wcmV2OwkvKiBhZGRyZXNzIG9mIHByZXZpb3VzIG5leHQgZWxlbWVudCAqLwlcCit9CisKKy8qCisgKiBMaXN0IGZ1bmN0aW9ucy4KKyAqLworCisjaWYgKGRlZmluZWQoX0tFUk5FTCkgJiYgZGVmaW5lZChJTlZBUklBTlRTKSkKKyNkZWZpbmUJUU1EX0xJU1RfQ0hFQ0tfSEVBRChoZWFkLCBmaWVsZCkgZG8gewkJCQlcCisJaWYgKExJU1RfRklSU1QoKGhlYWQpKSAhPSBOVUxMICYmCQkJCVwKKwkgICAgTElTVF9GSVJTVCgoaGVhZCkpLT5maWVsZC5sZV9wcmV2ICE9CQkJXAorCSAgICAgJkxJU1RfRklSU1QoKGhlYWQpKSkJCQkJCVwKKwkJcGFuaWMoIkJhZCBsaXN0IGhlYWQgJXAgZmlyc3QtPnByZXYgIT0gaGVhZCIsIChoZWFkKSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJUU1EX0xJU1RfQ0hFQ0tfTkVYVChlbG0sIGZpZWxkKSBkbyB7CQkJCVwKKwlpZiAoTElTVF9ORVhUKChlbG0pLCBmaWVsZCkgIT0gTlVMTCAmJgkJCQlcCisJICAgIExJU1RfTkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC5sZV9wcmV2ICE9CQkJXAorCSAgICAgJigoZWxtKS0+ZmllbGQubGVfbmV4dCkpCQkJCQlcCisJICAgICAJcGFuaWMoIkJhZCBsaW5rIGVsbSAlcCBuZXh0LT5wcmV2ICE9IGVsbSIsIChlbG0pKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlRTURfTElTVF9DSEVDS19QUkVWKGVsbSwgZmllbGQpIGRvIHsJCQkJXAorCWlmICgqKGVsbSktPmZpZWxkLmxlX3ByZXYgIT0gKGVsbSkpCQkJCVwKKwkJcGFuaWMoIkJhZCBsaW5rIGVsbSAlcCBwcmV2LT5uZXh0ICE9IGVsbSIsIChlbG0pKTsJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX0hFQUQoaGVhZCwgZmllbGQpCisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX05FWFQoZWxtLCBmaWVsZCkKKyNkZWZpbmUJUU1EX0xJU1RfQ0hFQ0tfUFJFVihlbG0sIGZpZWxkKQorI2VuZGlmIC8qIChfS0VSTkVMICYmIElOVkFSSUFOVFMpICovCisKKyNkZWZpbmUJTElTVF9FTVBUWShoZWFkKQkoKGhlYWQpLT5saF9maXJzdCA9PSBOVUxMKQorCisjZGVmaW5lCUxJU1RfRklSU1QoaGVhZCkJKChoZWFkKS0+bGhfZmlyc3QpCisKKyNkZWZpbmUJTElTVF9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCQlcCisJZm9yICgodmFyKSA9IExJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAodmFyKTsJCQkJCQkJXAorCSAgICAodmFyKSA9IExJU1RfTkVYVCgodmFyKSwgZmllbGQpKQorCisjZGVmaW5lCUxJU1RfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorCWZvciAoKHZhcikgPSBMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcikgJiYgKCh0dmFyKSA9IExJU1RfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJCVwKKwkgICAgKHZhcikgPSAodHZhcikpCisKKyNkZWZpbmUJTElTVF9JTklUKGhlYWQpIGRvIHsJCQkJCQlcCisJTElTVF9GSVJTVCgoaGVhZCkpID0gTlVMTDsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJTElTVF9JTlNFUlRfQUZURVIobGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlRTURfTElTVF9DSEVDS19ORVhUKGxpc3RlbG0sIGZpZWxkKTsJCQkJXAorCWlmICgoTElTVF9ORVhUKChlbG0pLCBmaWVsZCkgPSBMSVNUX05FWFQoKGxpc3RlbG0pLCBmaWVsZCkpICE9IE5VTEwpXAorCQlMSVNUX05FWFQoKGxpc3RlbG0pLCBmaWVsZCktPmZpZWxkLmxlX3ByZXYgPQkJXAorCQkgICAgJkxJU1RfTkVYVCgoZWxtKSwgZmllbGQpOwkJCQlcCisJTElTVF9ORVhUKChsaXN0ZWxtKSwgZmllbGQpID0gKGVsbSk7CQkJCVwKKwkoZWxtKS0+ZmllbGQubGVfcHJldiA9ICZMSVNUX05FWFQoKGxpc3RlbG0pLCBmaWVsZCk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCUxJU1RfSU5TRVJUX0JFRk9SRShsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCVFNRF9MSVNUX0NIRUNLX1BSRVYobGlzdGVsbSwgZmllbGQpOwkJCQlcCisJKGVsbSktPmZpZWxkLmxlX3ByZXYgPSAobGlzdGVsbSktPmZpZWxkLmxlX3ByZXY7CQlcCisJTElTVF9ORVhUKChlbG0pLCBmaWVsZCkgPSAobGlzdGVsbSk7CQkJCVwKKwkqKGxpc3RlbG0pLT5maWVsZC5sZV9wcmV2ID0gKGVsbSk7CQkJCVwKKwkobGlzdGVsbSktPmZpZWxkLmxlX3ByZXYgPSAmTElTVF9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCQlcCisJUU1EX0xJU1RfQ0hFQ0tfSEVBRCgoaGVhZCksIGZpZWxkKTsJCQkJXAorCWlmICgoTElTVF9ORVhUKChlbG0pLCBmaWVsZCkgPSBMSVNUX0ZJUlNUKChoZWFkKSkpICE9IE5VTEwpCVwKKwkJTElTVF9GSVJTVCgoaGVhZCkpLT5maWVsZC5sZV9wcmV2ID0gJkxJU1RfTkVYVCgoZWxtKSwgZmllbGQpO1wKKwlMSVNUX0ZJUlNUKChoZWFkKSkgPSAoZWxtKTsJCQkJCVwKKwkoZWxtKS0+ZmllbGQubGVfcHJldiA9ICZMSVNUX0ZJUlNUKChoZWFkKSk7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlMSVNUX05FWFQoZWxtLCBmaWVsZCkJKChlbG0pLT5maWVsZC5sZV9uZXh0KQorCisjZGVmaW5lCUxJU1RfUFJFVihlbG0sIGhlYWQsIHR5cGUsIGZpZWxkKQkJCQlcCisJKChlbG0pLT5maWVsZC5sZV9wcmV2ID09ICZMSVNUX0ZJUlNUKChoZWFkKSkgPyBOVUxMIDoJCVwKKwkgICAgX19jb250YWluZXJvZigoZWxtKS0+ZmllbGQubGVfcHJldiwgc3RydWN0IHR5cGUsIGZpZWxkLmxlX25leHQpKQorCisjZGVmaW5lCUxJU1RfUkVNT1ZFKGVsbSwgZmllbGQpIGRvIHsJCQkJCVwKKwlRTURfU0FWRUxJTksob2xkbmV4dCwgKGVsbSktPmZpZWxkLmxlX25leHQpOwkJCVwKKwlRTURfU0FWRUxJTksob2xkcHJldiwgKGVsbSktPmZpZWxkLmxlX3ByZXYpOwkJCVwKKwlRTURfTElTVF9DSEVDS19ORVhUKGVsbSwgZmllbGQpOwkJCQlcCisJUU1EX0xJU1RfQ0hFQ0tfUFJFVihlbG0sIGZpZWxkKTsJCQkJXAorCWlmIChMSVNUX05FWFQoKGVsbSksIGZpZWxkKSAhPSBOVUxMKQkJCQlcCisJCUxJU1RfTkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC5sZV9wcmV2ID0gCQlcCisJCSAgICAoZWxtKS0+ZmllbGQubGVfcHJldjsJCQkJXAorCSooZWxtKS0+ZmllbGQubGVfcHJldiA9IExJU1RfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAorCVRSQVNISVQoKm9sZG5leHQpOwkJCQkJCVwKKwlUUkFTSElUKCpvbGRwcmV2KTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIExJU1RfU1dBUChoZWFkMSwgaGVhZDIsIHR5cGUsIGZpZWxkKSBkbyB7CQkJXAorCXN0cnVjdCB0eXBlICpzd2FwX3RtcCA9IExJU1RfRklSU1QoKGhlYWQxKSk7CQkJXAorCUxJU1RfRklSU1QoKGhlYWQxKSkgPSBMSVNUX0ZJUlNUKChoZWFkMikpOwkJCVwKKwlMSVNUX0ZJUlNUKChoZWFkMikpID0gc3dhcF90bXA7CQkJCQlcCisJaWYgKChzd2FwX3RtcCA9IExJU1RfRklSU1QoKGhlYWQxKSkpICE9IE5VTEwpCQkJXAorCQlzd2FwX3RtcC0+ZmllbGQubGVfcHJldiA9ICZMSVNUX0ZJUlNUKChoZWFkMSkpOwkJXAorCWlmICgoc3dhcF90bXAgPSBMSVNUX0ZJUlNUKChoZWFkMikpKSAhPSBOVUxMKQkJCVwKKwkJc3dhcF90bXAtPmZpZWxkLmxlX3ByZXYgPSAmTElTVF9GSVJTVCgoaGVhZDIpKTsJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBUYWlsIHF1ZXVlIGRlY2xhcmF0aW9ucy4KKyAqLworI2RlZmluZQlUQUlMUV9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAorc3RydWN0IG5hbWUgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICp0cWhfZmlyc3Q7CS8qIGZpcnN0IGVsZW1lbnQgKi8JCQlcCisJc3RydWN0IHR5cGUgKip0cWhfbGFzdDsJLyogYWRkciBvZiBsYXN0IG5leHQgZWxlbWVudCAqLwkJXAorCVRSQUNFQlVGCQkJCQkJCVwKK30KKworI2RlZmluZQlUQUlMUV9IRUFEX0lOSVRJQUxJWkVSKGhlYWQpCQkJCQlcCisJeyBOVUxMLCAmKGhlYWQpLnRxaF9maXJzdCwgVFJBQ0VCVUZfSU5JVElBTElaRVIgfQorCisjZGVmaW5lCVRBSUxRX0VOVFJZKHR5cGUpCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqdHFlX25leHQ7CS8qIG5leHQgZWxlbWVudCAqLwkJCVwKKwlzdHJ1Y3QgdHlwZSAqKnRxZV9wcmV2OwkvKiBhZGRyZXNzIG9mIHByZXZpb3VzIG5leHQgZWxlbWVudCAqLwlcCisJVFJBQ0VCVUYJCQkJCQkJXAorfQorCisvKgorICogVGFpbCBxdWV1ZSBmdW5jdGlvbnMuCisgKi8KKyNpZiAoZGVmaW5lZChfS0VSTkVMKSAmJiBkZWZpbmVkKElOVkFSSUFOVFMpKQorI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfSEVBRChoZWFkLCBmaWVsZCkgZG8gewkJCQlcCisJaWYgKCFUQUlMUV9FTVBUWShoZWFkKSAmJgkJCQkJXAorCSAgICBUQUlMUV9GSVJTVCgoaGVhZCkpLT5maWVsZC50cWVfcHJldiAhPQkJCVwKKwkgICAgICZUQUlMUV9GSVJTVCgoaGVhZCkpKQkJCQkJXAorCQlwYW5pYygiQmFkIHRhaWxxIGhlYWQgJXAgZmlyc3QtPnByZXYgIT0gaGVhZCIsIChoZWFkKSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1RBSUwoaGVhZCwgZmllbGQpIGRvIHsJCQkJXAorCWlmICgqKGhlYWQpLT50cWhfbGFzdCAhPSBOVUxMKQkJCQkJXAorCSAgICAJcGFuaWMoIkJhZCB0YWlscSBORVhUKCVwLT50cWhfbGFzdCkgIT0gTlVMTCIsIChoZWFkKSk7IAlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19ORVhUKGVsbSwgZmllbGQpIGRvIHsJCQkJXAorCWlmIChUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgIT0gTlVMTCAmJgkJCQlcCisJICAgIFRBSUxRX05FWFQoKGVsbSksIGZpZWxkKS0+ZmllbGQudHFlX3ByZXYgIT0JCQlcCisJICAgICAmKChlbG0pLT5maWVsZC50cWVfbmV4dCkpCQkJCQlcCisJCXBhbmljKCJCYWQgbGluayBlbG0gJXAgbmV4dC0+cHJldiAhPSBlbG0iLCAoZWxtKSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCkgZG8gewkJCQlcCisJaWYgKCooZWxtKS0+ZmllbGQudHFlX3ByZXYgIT0gKGVsbSkpCQkJCVwKKwkJcGFuaWMoIkJhZCBsaW5rIGVsbSAlcCBwcmV2LT5uZXh0ICE9IGVsbSIsIChlbG0pKTsJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19IRUFEKGhlYWQsIGZpZWxkKQorI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfVEFJTChoZWFkLCBoZWFkbmFtZSkKKyNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX05FWFQoZWxtLCBmaWVsZCkKKyNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCkKKyNlbmRpZiAvKiAoX0tFUk5FTCAmJiBJTlZBUklBTlRTKSAqLworCisjZGVmaW5lCVRBSUxRX0NPTkNBVChoZWFkMSwgaGVhZDIsIGZpZWxkKSBkbyB7CQkJCVwKKwlpZiAoIVRBSUxRX0VNUFRZKGhlYWQyKSkgewkJCQkJXAorCQkqKGhlYWQxKS0+dHFoX2xhc3QgPSAoaGVhZDIpLT50cWhfZmlyc3Q7CQlcCisJCShoZWFkMiktPnRxaF9maXJzdC0+ZmllbGQudHFlX3ByZXYgPSAoaGVhZDEpLT50cWhfbGFzdDsJXAorCQkoaGVhZDEpLT50cWhfbGFzdCA9IChoZWFkMiktPnRxaF9sYXN0OwkJCVwKKwkJVEFJTFFfSU5JVCgoaGVhZDIpKTsJCQkJCVwKKwkJUU1EX1RSQUNFX0hFQUQoaGVhZDEpOwkJCQkJXAorCQlRTURfVFJBQ0VfSEVBRChoZWFkMik7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlUQUlMUV9FTVBUWShoZWFkKQkoKGhlYWQpLT50cWhfZmlyc3QgPT0gTlVMTCkKKworI2RlZmluZQlUQUlMUV9GSVJTVChoZWFkKQkoKGhlYWQpLT50cWhfZmlyc3QpCisKKyNkZWZpbmUJVEFJTFFfRk9SRUFDSCh2YXIsIGhlYWQsIGZpZWxkKQkJCQkJXAorCWZvciAoKHZhcikgPSBUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgICh2YXIpOwkJCQkJCQlcCisJICAgICh2YXIpID0gVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpKQorCisjZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKKwlmb3IgKCh2YXIpID0gVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAodmFyKSAmJiAoKHR2YXIpID0gVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJCVwKKwkgICAgKHZhcikgPSAodHZhcikpCisKKyNkZWZpbmUJVEFJTFFfRk9SRUFDSF9SRVZFUlNFKHZhciwgaGVhZCwgaGVhZG5hbWUsIGZpZWxkKQkJXAorCWZvciAoKHZhcikgPSBUQUlMUV9MQVNUKChoZWFkKSwgaGVhZG5hbWUpOwkJCVwKKwkgICAgKHZhcik7CQkJCQkJCVwKKwkgICAgKHZhcikgPSBUQUlMUV9QUkVWKCh2YXIpLCBoZWFkbmFtZSwgZmllbGQpKQorCisjZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfUkVWRVJTRV9TQUZFKHZhciwgaGVhZCwgaGVhZG5hbWUsIGZpZWxkLCB0dmFyKQlcCisJZm9yICgodmFyKSA9IFRBSUxRX0xBU1QoKGhlYWQpLCBoZWFkbmFtZSk7CQkJXAorCSAgICAodmFyKSAmJiAoKHR2YXIpID0gVEFJTFFfUFJFVigodmFyKSwgaGVhZG5hbWUsIGZpZWxkKSwgMSk7CVwKKwkgICAgKHZhcikgPSAodHZhcikpCisKKyNkZWZpbmUJVEFJTFFfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAorCVRBSUxRX0ZJUlNUKChoZWFkKSkgPSBOVUxMOwkJCQkJXAorCShoZWFkKS0+dHFoX2xhc3QgPSAmVEFJTFFfRklSU1QoKGhlYWQpKTsJCQlcCisJUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlUQUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgbGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAorCVFNRF9UQUlMUV9DSEVDS19ORVhUKGxpc3RlbG0sIGZpZWxkKTsJCQkJXAorCWlmICgoVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpID0gVEFJTFFfTkVYVCgobGlzdGVsbSksIGZpZWxkKSkgIT0gTlVMTClcCisJCVRBSUxRX05FWFQoKGVsbSksIGZpZWxkKS0+ZmllbGQudHFlX3ByZXYgPSAJCVwKKwkJICAgICZUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQkJCVwKKwllbHNlIHsJCQkJCQkJCVwKKwkJKGhlYWQpLT50cWhfbGFzdCA9ICZUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCisJCVFNRF9UUkFDRV9IRUFEKGhlYWQpOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlUQUlMUV9ORVhUKChsaXN0ZWxtKSwgZmllbGQpID0gKGVsbSk7CQkJCVwKKwkoZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAmVEFJTFFfTkVYVCgobGlzdGVsbSksIGZpZWxkKTsJCVwKKwlRTURfVFJBQ0VfRUxFTSgmKGVsbSktPmZpZWxkKTsJCQkJCVwKKwlRTURfVFJBQ0VfRUxFTSgmbGlzdGVsbS0+ZmllbGQpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVRBSUxRX0lOU0VSVF9CRUZPUkUobGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlRTURfVEFJTFFfQ0hFQ0tfUFJFVihsaXN0ZWxtLCBmaWVsZCk7CQkJCVwKKwkoZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAobGlzdGVsbSktPmZpZWxkLnRxZV9wcmV2OwkJXAorCVRBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IChsaXN0ZWxtKTsJCQkJXAorCSoobGlzdGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gKGVsbSk7CQkJCVwKKwkobGlzdGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKKwlRTURfVFJBQ0VfRUxFTSgmKGVsbSktPmZpZWxkKTsJCQkJCVwKKwlRTURfVFJBQ0VfRUxFTSgmbGlzdGVsbS0+ZmllbGQpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVRBSUxRX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJUU1EX1RBSUxRX0NIRUNLX0hFQUQoaGVhZCwgZmllbGQpOwkJCQlcCisJaWYgKChUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgPSBUQUlMUV9GSVJTVCgoaGVhZCkpKSAhPSBOVUxMKQlcCisJCVRBSUxRX0ZJUlNUKChoZWFkKSktPmZpZWxkLnRxZV9wcmV2ID0JCQlcCisJCSAgICAmVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQkoaGVhZCktPnRxaF9sYXN0ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKKwlUQUlMUV9GSVJTVCgoaGVhZCkpID0gKGVsbSk7CQkJCQlcCisJKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gJlRBSUxRX0ZJUlNUKChoZWFkKSk7CQkJXAorCVFNRF9UUkFDRV9IRUFEKGhlYWQpOwkJCQkJCVwKKwlRTURfVFJBQ0VfRUxFTSgmKGVsbSktPmZpZWxkKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJVEFJTFFfSU5TRVJUX1RBSUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlRTURfVEFJTFFfQ0hFQ0tfVEFJTChoZWFkLCBmaWVsZCk7CQkJCVwKKwlUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgPSBOVUxMOwkJCQlcCisJKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gKGhlYWQpLT50cWhfbGFzdDsJCQlcCisJKihoZWFkKS0+dHFoX2xhc3QgPSAoZWxtKTsJCQkJCVwKKwkoaGVhZCktPnRxaF9sYXN0ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCQlcCisJUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQkJXAorCVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlUQUlMUV9MQVNUKGhlYWQsIGhlYWRuYW1lKQkJCQkJXAorCSgqKCgoc3RydWN0IGhlYWRuYW1lICopKChoZWFkKS0+dHFoX2xhc3QpKS0+dHFoX2xhc3QpKQorCisjZGVmaW5lCVRBSUxRX05FWFQoZWxtLCBmaWVsZCkgKChlbG0pLT5maWVsZC50cWVfbmV4dCkKKworI2RlZmluZQlUQUlMUV9QUkVWKGVsbSwgaGVhZG5hbWUsIGZpZWxkKQkJCQlcCisJKCooKChzdHJ1Y3QgaGVhZG5hbWUgKikoKGVsbSktPmZpZWxkLnRxZV9wcmV2KSktPnRxaF9sYXN0KSkKKworI2RlZmluZQlUQUlMUV9SRU1PVkUoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCQlcCisJUU1EX1NBVkVMSU5LKG9sZG5leHQsIChlbG0pLT5maWVsZC50cWVfbmV4dCk7CQkJXAorCVFNRF9TQVZFTElOSyhvbGRwcmV2LCAoZWxtKS0+ZmllbGQudHFlX3ByZXYpOwkJCVwKKwlRTURfVEFJTFFfQ0hFQ0tfTkVYVChlbG0sIGZpZWxkKTsJCQkJXAorCVFNRF9UQUlMUV9DSEVDS19QUkVWKGVsbSwgZmllbGQpOwkJCQlcCisJaWYgKChUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkpICE9IE5VTEwpCQkJCVwKKwkJVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC50cWVfcHJldiA9IAkJXAorCQkgICAgKGVsbSktPmZpZWxkLnRxZV9wcmV2OwkJCQlcCisJZWxzZSB7CQkJCQkJCQlcCisJCShoZWFkKS0+dHFoX2xhc3QgPSAoZWxtKS0+ZmllbGQudHFlX3ByZXY7CQlcCisJCVFNRF9UUkFDRV9IRUFEKGhlYWQpOwkJCQkJXAorCX0JCQkJCQkJCVwKKwkqKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAorCVRSQVNISVQoKm9sZG5leHQpOwkJCQkJCVwKKwlUUkFTSElUKCpvbGRwcmV2KTsJCQkJCQlcCisJUU1EX1RSQUNFX0VMRU0oJihlbG0pLT5maWVsZCk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFRBSUxRX1NXQVAoaGVhZDEsIGhlYWQyLCB0eXBlLCBmaWVsZCkgZG8gewkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3dhcF9maXJzdCA9IChoZWFkMSktPnRxaF9maXJzdDsJCQlcCisJc3RydWN0IHR5cGUgKipzd2FwX2xhc3QgPSAoaGVhZDEpLT50cWhfbGFzdDsJCQlcCisJKGhlYWQxKS0+dHFoX2ZpcnN0ID0gKGhlYWQyKS0+dHFoX2ZpcnN0OwkJCVwKKwkoaGVhZDEpLT50cWhfbGFzdCA9IChoZWFkMiktPnRxaF9sYXN0OwkJCQlcCisJKGhlYWQyKS0+dHFoX2ZpcnN0ID0gc3dhcF9maXJzdDsJCQkJXAorCShoZWFkMiktPnRxaF9sYXN0ID0gc3dhcF9sYXN0OwkJCQkJXAorCWlmICgoc3dhcF9maXJzdCA9IChoZWFkMSktPnRxaF9maXJzdCkgIT0gTlVMTCkJCQlcCisJCXN3YXBfZmlyc3QtPmZpZWxkLnRxZV9wcmV2ID0gJihoZWFkMSktPnRxaF9maXJzdDsJXAorCWVsc2UJCQkJCQkJCVwKKwkJKGhlYWQxKS0+dHFoX2xhc3QgPSAmKGhlYWQxKS0+dHFoX2ZpcnN0OwkJXAorCWlmICgoc3dhcF9maXJzdCA9IChoZWFkMiktPnRxaF9maXJzdCkgIT0gTlVMTCkJCQlcCisJCXN3YXBfZmlyc3QtPmZpZWxkLnRxZV9wcmV2ID0gJihoZWFkMiktPnRxaF9maXJzdDsJXAorCWVsc2UJCQkJCQkJCVwKKwkJKGhlYWQyKS0+dHFoX2xhc3QgPSAmKGhlYWQyKS0+dHFoX2ZpcnN0OwkJXAorfSB3aGlsZSAoMCkKKworI2lmZGVmIF9LRVJORUwKKworLyoKKyAqIFhYWCBpbnNxdWUoKSBhbmQgcmVtcXVlKCkgYXJlIGFuIG9sZCB3YXkgb2YgaGFuZGxpbmcgY2VydGFpbiBxdWV1ZXMuCisgKiBUaGV5IGJvZ3VzbHkgYXNzdW1lcyB0aGF0IGFsbCBxdWV1ZSBoZWFkcyBsb29rIGFsaWtlLgorICovCisKK3N0cnVjdCBxdWVoZWFkIHsKKwlzdHJ1Y3QgcXVlaGVhZCAqcWhfbGluazsKKwlzdHJ1Y3QgcXVlaGVhZCAqcWhfcmxpbms7Cit9OworCisjaWZkZWYJX19HTlVDX18KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2luc3F1ZSh2b2lkICphLCB2b2lkICpiKQoreworCXN0cnVjdCBxdWVoZWFkICplbGVtZW50ID0gKHN0cnVjdCBxdWVoZWFkICopYSwKKwkJICpoZWFkID0gKHN0cnVjdCBxdWVoZWFkICopYjsKKworCWVsZW1lbnQtPnFoX2xpbmsgPSBoZWFkLT5xaF9saW5rOworCWVsZW1lbnQtPnFoX3JsaW5rID0gaGVhZDsKKwloZWFkLT5xaF9saW5rID0gZWxlbWVudDsKKwllbGVtZW50LT5xaF9saW5rLT5xaF9ybGluayA9IGVsZW1lbnQ7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCityZW1xdWUodm9pZCAqYSkKK3sKKwlzdHJ1Y3QgcXVlaGVhZCAqZWxlbWVudCA9IChzdHJ1Y3QgcXVlaGVhZCAqKWE7CisKKwllbGVtZW50LT5xaF9saW5rLT5xaF9ybGluayA9IGVsZW1lbnQtPnFoX3JsaW5rOworCWVsZW1lbnQtPnFoX3JsaW5rLT5xaF9saW5rID0gZWxlbWVudC0+cWhfbGluazsKKwllbGVtZW50LT5xaF9ybGluayA9IDA7Cit9CisKKyNlbHNlIC8qICFfX0dOVUNfXyAqLworCit2b2lkCWluc3F1ZSh2b2lkICphLCB2b2lkICpiKTsKK3ZvaWQJcmVtcXVlKHZvaWQgKmEpOworCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qICFfU1lTX1FVRVVFX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3JlZW50LmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3JlZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1YjNlZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvcmVlbnQuaApAQCAtMCwwICsxLDc5MCBAQAorLyogVGhpcyBoZWFkZXIgZmlsZSBwcm92aWRlcyB0aGUgcmVlbnRyYW5jeS4gICovCisKKy8qIFdBUk5JTkc6IEFsbCBpZGVudGlmaWVycyBoZXJlIG11c3QgYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlLiAgVGhpcyBmaWxlIGlzCisgICBpbmNsdWRlZCBieSBzdGRpby5oIGFuZCBvdGhlcnMgYW5kIHdlIHRoZXJlZm9yZSBtdXN0IG9ubHkgdXNlIGlkZW50aWZpZXJzCisgICBpbiB0aGUgbmFtZXNwYWNlIGFsbG90dGVkIHRvIHVzLiAgKi8KKworI2lmbmRlZiBfU1lTX1JFRU5UX0hfCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisjZGVmaW5lIF9TWVNfUkVFTlRfSF8KKworI2luY2x1ZGUgPF9hbnNpLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCisjZGVmaW5lIF9OVUxMIDAKKworI2lmbmRlZiBfX0xvbmcKKyNpZiBfX0xPTkdfTUFYX18gPT0gMjE0NzQ4MzY0N0wKKyNkZWZpbmUgX19Mb25nIGxvbmcKK3R5cGVkZWYgdW5zaWduZWQgX19Mb25nIF9fVUxvbmc7CisjZWxpZiBfX0lOVF9NQVhfXyA9PSAyMTQ3NDgzNjQ3CisjZGVmaW5lIF9fTG9uZyBpbnQKK3R5cGVkZWYgdW5zaWduZWQgX19Mb25nIF9fVUxvbmc7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoIF9fTG9uZykKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWZuZGVmIF9fTG9uZworI2RlZmluZSBfX0xvbmcgX19pbnQzMl90Cit0eXBlZGVmIF9fdWludDMyX3QgX19VTG9uZzsKKyNlbmRpZgorCitzdHJ1Y3QgX3JlZW50OworCisvKgorICogSWYgX1JFRU5UX1NNQUxMIGlzIGRlZmluZWQsIHdlIG1ha2Ugc3RydWN0IF9yZWVudCBhcyBzbWFsbCBhcyBwb3NzaWJsZSwKKyAqIGJ5IGhhdmluZyBuZWFybHkgZXZlcnl0aGluZyBwb3NzaWJsZSBhbGxvY2F0ZWQgYXQgZmlyc3QgdXNlLgorICovCisKK3N0cnVjdCBfQmlnaW50Cit7CisgIHN0cnVjdCBfQmlnaW50ICpfbmV4dDsKKyAgaW50IF9rLCBfbWF4d2RzLCBfc2lnbiwgX3dkczsKKyAgX19VTG9uZyBfeFsxXTsKK307CisKKy8qIG5lZWRlZCBieSByZWVudHJhbnQgc3RydWN0dXJlICovCitzdHJ1Y3QgX190bQoreworICBpbnQgICBfX3RtX3NlYzsKKyAgaW50ICAgX190bV9taW47CisgIGludCAgIF9fdG1faG91cjsKKyAgaW50ICAgX190bV9tZGF5OworICBpbnQgICBfX3RtX21vbjsKKyAgaW50ICAgX190bV95ZWFyOworICBpbnQgICBfX3RtX3dkYXk7CisgIGludCAgIF9fdG1feWRheTsKKyAgaW50ICAgX190bV9pc2RzdDsKK307CisKKy8qCisgKiBhdGV4aXQoKSBzdXBwb3J0LgorICovCisKKyNkZWZpbmUJX0FURVhJVF9TSVpFIDMyCS8qIG11c3QgYmUgYXQgbGVhc3QgMzIgdG8gZ3VhcmFudGVlIEFOU0kgY29uZm9ybWFuY2UgKi8KKworc3RydWN0IF9vbl9leGl0X2FyZ3MgeworCXZvaWQgKiAgX2ZuYXJnc1tfQVRFWElUX1NJWkVdOwkgICAgICAgIC8qIHVzZXIgZm4gYXJncyAqLworCXZvaWQgKglfZHNvX2hhbmRsZVtfQVRFWElUX1NJWkVdOworCS8qIEJpdG1hc2sgaXMgc2V0IGlmIHVzZXIgZnVuY3Rpb24gdGFrZXMgYXJndW1lbnRzLiAgKi8KKwlfX1VMb25nIF9mbnR5cGVzOyAgICAgICAgICAgCSAgICAgICAgLyogdHlwZSBvZiBleGl0IHJvdXRpbmUgLQorCQkJCSAgIE11c3QgaGF2ZSBhdCBsZWFzdCBfQVRFWElUX1NJWkUgYml0cyAqLworCS8qIEJpdG1hc2sgaXMgc2V0IGlmIGZ1bmN0aW9uIHdhcyByZWdpc3RlcmVkIHZpYSBfX2N4YV9hdGV4aXQuICAqLworCV9fVUxvbmcgX2lzX2N4YTsKK307CisKKyNpZmRlZiBfUkVFTlRfU01BTEwKK3N0cnVjdCBfYXRleGl0IHsKKwlzdHJ1Y3QJX2F0ZXhpdCAqX25leHQ7CQkJLyogbmV4dCBpbiBsaXN0ICovCisJaW50CV9pbmQ7CQkJCS8qIG5leHQgaW5kZXggaW4gdGhpcyB0YWJsZSAqLworCXZvaWQJKCpfZm5zW19BVEVYSVRfU0laRV0pKHZvaWQpOwkvKiB0aGUgdGFibGUgaXRzZWxmICovCisgICAgICAgIHN0cnVjdCBfb25fZXhpdF9hcmdzICogX29uX2V4aXRfYXJnc19wdHI7Cit9OworIyBkZWZpbmUgX0FURVhJVF9JTklUIHtfTlVMTCwgMCwge19OVUxMfSwgX05VTEx9CisjZWxzZQorc3RydWN0IF9hdGV4aXQgeworCXN0cnVjdAlfYXRleGl0ICpfbmV4dDsJCQkvKiBuZXh0IGluIGxpc3QgKi8KKwlpbnQJX2luZDsJCQkJLyogbmV4dCBpbmRleCBpbiB0aGlzIHRhYmxlICovCisJLyogU29tZSBlbnRyaWVzIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBjYWxsZWQsIGFuZCB3aWxsIGJlIE5VTEwuICAqLworCXZvaWQJKCpfZm5zW19BVEVYSVRfU0laRV0pKHZvaWQpOwkvKiB0aGUgdGFibGUgaXRzZWxmICovCisgICAgICAgIHN0cnVjdCBfb25fZXhpdF9hcmdzIF9vbl9leGl0X2FyZ3M7Cit9OworIyBkZWZpbmUgX0FURVhJVF9JTklUIHtfTlVMTCwgMCwge19OVUxMfSwge3tfTlVMTH0sIHtfTlVMTH0sIDAsIDB9fQorI2VuZGlmCisKKyNpZmRlZiBfUkVFTlRfR0xPQkFMX0FURVhJVAorIyBkZWZpbmUgX1JFRU5UX0lOSVRfQVRFWElUCisjZWxzZQorIyBkZWZpbmUgX1JFRU5UX0lOSVRfQVRFWElUIFwKKyAgX05VTEwsIF9BVEVYSVRfSU5JVCwKKyNlbmRpZgorCisvKgorICogU3RkaW8gYnVmZmVycy4KKyAqCisgKiBUaGlzIGFuZCBfX0ZJTEUgYXJlIGRlZmluZWQgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdGhlbSBmb3Igc3RydWN0IF9yZWVudCwKKyAqIGJ1dCB3ZSBkb24ndCB3YW50IHN0ZGlvLmggaW5jbHVkZWQgd2hlbiBzdGRsaWIuaCBpcy4KKyAqLworCitzdHJ1Y3QgX19zYnVmIHsKKwl1bnNpZ25lZCBjaGFyICpfYmFzZTsKKwlpbnQJX3NpemU7Cit9OworCisvKgorICogU3RkaW8gc3RhdGUgdmFyaWFibGVzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgYWx3YXlzIGhvbGQ6CisgKgorICoJaWYgKF9mbGFncyYoX19TTEJGfF9fU1dSKSkgPT0gKF9fU0xCRnxfX1NXUiksCisgKgkJX2xiZnNpemUgaXMgLV9iZi5fc2l6ZSwgZWxzZSBfbGJmc2l6ZSBpcyAwCisgKglpZiBfZmxhZ3MmX19TUkQsIF93IGlzIDAKKyAqCWlmIF9mbGFncyZfX1NXUiwgX3IgaXMgMAorICoKKyAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBnZXRjIGFuZCBwdXRjIG1hY3JvcyAob3IgaW5saW5lIGZ1bmN0aW9ucykgbmV2ZXIKKyAqIHRyeSB0byB3cml0ZSBvciByZWFkIGZyb20gYSBmaWxlIHRoYXQgaXMgaW4gYHJlYWQnIG9yIGB3cml0ZScgbW9kZS4KKyAqIChNb3Jlb3ZlciwgdGhleSBjYW4sIGFuZCBkbywgYXV0b21hdGljYWxseSBzd2l0Y2ggZnJvbSByZWFkIG1vZGUgdG8KKyAqIHdyaXRlIG1vZGUsIGFuZCBiYWNrLCBvbiAicisiIGFuZCAidysiIGZpbGVzLikKKyAqCisgKiBfbGJmc2l6ZSBpcyB1c2VkIG9ubHkgdG8gbWFrZSB0aGUgaW5saW5lIGxpbmUtYnVmZmVyZWQgb3V0cHV0IHN0cmVhbQorICogY29kZSBhcyBjb21wYWN0IGFzIHBvc3NpYmxlLgorICoKKyAqIF91YiwgX3VwLCBhbmQgX3VyIGFyZSB1c2VkIHdoZW4gdW5nZXRjKCkgcHVzaGVzIGJhY2sgbW9yZSBjaGFyYWN0ZXJzCisgKiB0aGFuIGZpdCBpbiB0aGUgY3VycmVudCBfYmYsIG9yIHdoZW4gdW5nZXRjKCkgcHVzaGVzIGJhY2sgYSBjaGFyYWN0ZXIKKyAqIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIHByZXZpb3VzIG9uZSBpbiBfYmYuICBXaGVuIHRoaXMgaGFwcGVucywKKyAqIF91Yi5fYmFzZSBiZWNvbWVzIG5vbi1uaWwgKGkuZS4sIGEgc3RyZWFtIGhhcyB1bmdldGMoKSBkYXRhIGlmZgorICogX3ViLl9iYXNlIT1OVUxMKSBhbmQgX3VwIGFuZCBfdXIgc2F2ZSB0aGUgY3VycmVudCB2YWx1ZXMgb2YgX3AgYW5kIF9yLgorICovCisKKyNpZmRlZiBfUkVFTlRfU01BTEwKKy8qCisgKiBzdHJ1Y3QgX19zRklMRV9mYWtlIGlzIHRoZSBzdGFydCBvZiBhIHN0cnVjdCBfX3NGSUxFLCB3aXRoIG9ubHkgdGhlCisgKiBtaW5pbWFsIGZpZWxkcyBhbGxvY2F0ZWQuICBJbiBfX3Npbml0KCkgd2UgcmVhbGx5IGFsbG9jYXRlIHRoZSAzCisgKiBzdGFuZGFyZCBzdHJlYW1zLCBldGMuLCBhbmQgcG9pbnQgYXdheSBmcm9tIHRoaXMgZmFrZS4KKyAqLworc3RydWN0IF9fc0ZJTEVfZmFrZSB7CisgIHVuc2lnbmVkIGNoYXIgKl9wOwkvKiBjdXJyZW50IHBvc2l0aW9uIGluIChzb21lKSBidWZmZXIgKi8KKyAgaW50CV9yOwkJLyogcmVhZCBzcGFjZSBsZWZ0IGZvciBnZXRjKCkgKi8KKyAgaW50CV93OwkJLyogd3JpdGUgc3BhY2UgbGVmdCBmb3IgcHV0YygpICovCisgIHNob3J0CV9mbGFnczsJCS8qIGZsYWdzLCBiZWxvdzsgdGhpcyBGSUxFIGlzIGZyZWUgaWYgMCAqLworICBzaG9ydAlfZmlsZTsJCS8qIGZpbGVubywgaWYgVW5peCBkZXNjcmlwdG9yLCBlbHNlIC0xICovCisgIHN0cnVjdCBfX3NidWYgX2JmOwkvKiB0aGUgYnVmZmVyIChhdCBsZWFzdCAxIGJ5dGUsIGlmICFOVUxMKSAqLworICBpbnQJX2xiZnNpemU7CS8qIDAgb3IgLV9iZi5fc2l6ZSwgZm9yIGlubGluZSBwdXRjICovCisKKyAgc3RydWN0IF9yZWVudCAqX2RhdGE7Cit9OworCisvKiBGb2xsb3dpbmcgaXMgbmVlZGVkIGJvdGggaW4gbGliYy9zdGRpbyBhbmQgbGliYy9zdGRsaWIgc28gd2UgcHV0IGl0CisgKiBoZXJlIGluc3RlYWQgb2YgbGliYy9zdGRpby9sb2NhbC5oIHdoZXJlIGl0IHdhcyBwcmV2aW91c2x5LiAqLworCitleHRlcm4gX1ZPSUQgICBfRVhGVU4oX19zaW5pdCwoc3RydWN0IF9yZWVudCAqKSk7CisKKyMgZGVmaW5lIF9SRUVOVF9TTUFMTF9DSEVDS19JTklUKHB0cikJCVwKKyAgZG8JCQkJCQlcCisgICAgewkJCQkJCVwKKyAgICAgIGlmICgocHRyKSAmJiAhKHB0ciktPl9fc2RpZGluaXQpCQlcCisJX19zaW5pdCAocHRyKTsJCQkJXAorICAgIH0JCQkJCQlcCisgIHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIF9SRUVOVF9TTUFMTF9DSEVDS19JTklUKHB0cikgLyogbm90aGluZyAqLworI2VuZGlmCisKK3N0cnVjdCBfX3NGSUxFIHsKKyAgdW5zaWduZWQgY2hhciAqX3A7CS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gKHNvbWUpIGJ1ZmZlciAqLworICBpbnQJX3I7CQkvKiByZWFkIHNwYWNlIGxlZnQgZm9yIGdldGMoKSAqLworICBpbnQJX3c7CQkvKiB3cml0ZSBzcGFjZSBsZWZ0IGZvciBwdXRjKCkgKi8KKyAgc2hvcnQJX2ZsYWdzOwkJLyogZmxhZ3MsIGJlbG93OyB0aGlzIEZJTEUgaXMgZnJlZSBpZiAwICovCisgIHNob3J0CV9maWxlOwkJLyogZmlsZW5vLCBpZiBVbml4IGRlc2NyaXB0b3IsIGVsc2UgLTEgKi8KKyAgc3RydWN0IF9fc2J1ZiBfYmY7CS8qIHRoZSBidWZmZXIgKGF0IGxlYXN0IDEgYnl0ZSwgaWYgIU5VTEwpICovCisgIGludAlfbGJmc2l6ZTsJLyogMCBvciAtX2JmLl9zaXplLCBmb3IgaW5saW5lIHB1dGMgKi8KKworI2lmZGVmIF9SRUVOVF9TTUFMTAorICBzdHJ1Y3QgX3JlZW50ICpfZGF0YTsKKyNlbmRpZgorCisgIC8qIG9wZXJhdGlvbnMgKi8KKyAgX1BUUglfY29va2llOwkvKiBjb29raWUgcGFzc2VkIHRvIGlvIGZ1bmN0aW9ucyAqLworCisgIF9SRUFEX1dSSVRFX1JFVFVSTl9UWVBFIF9FWEZOUFRSKF9yZWFkLCAoc3RydWN0IF9yZWVudCAqLCBfUFRSLAorCQkJCQkgICBjaGFyICosIF9SRUFEX1dSSVRFX0JVRlNJWkVfVFlQRSkpOworICBfUkVBRF9XUklURV9SRVRVUk5fVFlQRSBfRVhGTlBUUihfd3JpdGUsIChzdHJ1Y3QgX3JlZW50ICosIF9QVFIsCisJCQkJCSAgICBjb25zdCBjaGFyICosCisJCQkJCSAgICBfUkVBRF9XUklURV9CVUZTSVpFX1RZUEUpKTsKKyAgX2Zwb3NfdCBfRVhGTlBUUihfc2VlaywgKHN0cnVjdCBfcmVlbnQgKiwgX1BUUiwgX2Zwb3NfdCwgaW50KSk7CisgIGludCBfRVhGTlBUUihfY2xvc2UsIChzdHJ1Y3QgX3JlZW50ICosIF9QVFIpKTsKKworICAvKiBzZXBhcmF0ZSBidWZmZXIgZm9yIGxvbmcgc2VxdWVuY2VzIG9mIHVuZ2V0YygpICovCisgIHN0cnVjdCBfX3NidWYgX3ViOwkvKiB1bmdldGMgYnVmZmVyICovCisgIHVuc2lnbmVkIGNoYXIgKl91cDsJLyogc2F2ZWQgX3Agd2hlbiBfcCBpcyBkb2luZyB1bmdldGMgZGF0YSAqLworICBpbnQJX3VyOwkJLyogc2F2ZWQgX3Igd2hlbiBfciBpcyBjb3VudGluZyB1bmdldGMgZGF0YSAqLworCisgIC8qIHRyaWNrcyB0byBtZWV0IG1pbmltdW0gcmVxdWlyZW1lbnRzIGV2ZW4gd2hlbiBtYWxsb2MoKSBmYWlscyAqLworICB1bnNpZ25lZCBjaGFyIF91YnVmWzNdOwkvKiBndWFyYW50ZWUgYW4gdW5nZXRjKCkgYnVmZmVyICovCisgIHVuc2lnbmVkIGNoYXIgX25idWZbMV07CS8qIGd1YXJhbnRlZSBhIGdldGMoKSBidWZmZXIgKi8KKworICAvKiBzZXBhcmF0ZSBidWZmZXIgZm9yIGZnZXRsaW5lKCkgd2hlbiBsaW5lIGNyb3NzZXMgYnVmZmVyIGJvdW5kYXJ5ICovCisgIHN0cnVjdCBfX3NidWYgX2xiOwkvKiBidWZmZXIgZm9yIGZnZXRsaW5lKCkgKi8KKworICAvKiBVbml4IHN0ZGlvIGZpbGVzIGdldCBhbGlnbmVkIHRvIGJsb2NrIGJvdW5kYXJpZXMgb24gZnNlZWsoKSAqLworICBpbnQJX2Jsa3NpemU7CS8qIHN0YXQuc3RfYmxrc2l6ZSAobWF5IGJlICE9IF9iZi5fc2l6ZSkgKi8KKyAgX29mZl90IF9vZmZzZXQ7CS8qIGN1cnJlbnQgbHNlZWsgb2Zmc2V0ICovCisKKyNpZm5kZWYgX1JFRU5UX1NNQUxMCisgIHN0cnVjdCBfcmVlbnQgKl9kYXRhOwkvKiBIZXJlIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eT8gUmVtb3ZlPyAqLworI2VuZGlmCisKKyNpZm5kZWYgX19TSU5HTEVfVEhSRUFEX18KKyAgX2Zsb2NrX3QgX2xvY2s7CS8qIGZvciB0aHJlYWQtc2FmZXR5IGxvY2tpbmcgKi8KKyNlbmRpZgorICBfbWJzdGF0ZV90IF9tYnN0YXRlOwkvKiBmb3Igd2lkZSBjaGFyIHN0ZGlvIGZ1bmN0aW9ucy4gKi8KKyAgaW50ICAgX2ZsYWdzMjsgICAgICAgIC8qIGZvciBmdXR1cmUgdXNlICovCit9OworCisjaWZkZWYgX19DVVNUT01fRklMRV9JT19fCisKKy8qIEdldCBjdXN0b20gX0ZJTEUgZGVmaW5pdGlvbi4gICovCisjaW5jbHVkZSA8c3lzL2N1c3RvbV9maWxlLmg+CisKKyNlbHNlIC8qICFfX0NVU1RPTV9GSUxFX0lPX18gKi8KKyNpZmRlZiBfX0xBUkdFNjRfRklMRVMKK3N0cnVjdCBfX3NGSUxFNjQgeworICB1bnNpZ25lZCBjaGFyICpfcDsJLyogY3VycmVudCBwb3NpdGlvbiBpbiAoc29tZSkgYnVmZmVyICovCisgIGludAlfcjsJCS8qIHJlYWQgc3BhY2UgbGVmdCBmb3IgZ2V0YygpICovCisgIGludAlfdzsJCS8qIHdyaXRlIHNwYWNlIGxlZnQgZm9yIHB1dGMoKSAqLworICBzaG9ydAlfZmxhZ3M7CQkvKiBmbGFncywgYmVsb3c7IHRoaXMgRklMRSBpcyBmcmVlIGlmIDAgKi8KKyAgc2hvcnQJX2ZpbGU7CQkvKiBmaWxlbm8sIGlmIFVuaXggZGVzY3JpcHRvciwgZWxzZSAtMSAqLworICBzdHJ1Y3QgX19zYnVmIF9iZjsJLyogdGhlIGJ1ZmZlciAoYXQgbGVhc3QgMSBieXRlLCBpZiAhTlVMTCkgKi8KKyAgaW50CV9sYmZzaXplOwkvKiAwIG9yIC1fYmYuX3NpemUsIGZvciBpbmxpbmUgcHV0YyAqLworCisgIHN0cnVjdCBfcmVlbnQgKl9kYXRhOworCisgIC8qIG9wZXJhdGlvbnMgKi8KKyAgX1BUUglfY29va2llOwkvKiBjb29raWUgcGFzc2VkIHRvIGlvIGZ1bmN0aW9ucyAqLworCisgIF9SRUFEX1dSSVRFX1JFVFVSTl9UWVBFIF9FWEZOUFRSKF9yZWFkLCAoc3RydWN0IF9yZWVudCAqLCBfUFRSLAorCQkJCQkgICBjaGFyICosIF9SRUFEX1dSSVRFX0JVRlNJWkVfVFlQRSkpOworICBfUkVBRF9XUklURV9SRVRVUk5fVFlQRSBfRVhGTlBUUihfd3JpdGUsIChzdHJ1Y3QgX3JlZW50ICosIF9QVFIsCisJCQkJCSAgICBjb25zdCBjaGFyICosCisJCQkJCSAgICBfUkVBRF9XUklURV9CVUZTSVpFX1RZUEUpKTsKKyAgX2Zwb3NfdCBfRVhGTlBUUihfc2VlaywgKHN0cnVjdCBfcmVlbnQgKiwgX1BUUiwgX2Zwb3NfdCwgaW50KSk7CisgIGludCBfRVhGTlBUUihfY2xvc2UsIChzdHJ1Y3QgX3JlZW50ICosIF9QVFIpKTsKKworICAvKiBzZXBhcmF0ZSBidWZmZXIgZm9yIGxvbmcgc2VxdWVuY2VzIG9mIHVuZ2V0YygpICovCisgIHN0cnVjdCBfX3NidWYgX3ViOwkvKiB1bmdldGMgYnVmZmVyICovCisgIHVuc2lnbmVkIGNoYXIgKl91cDsJLyogc2F2ZWQgX3Agd2hlbiBfcCBpcyBkb2luZyB1bmdldGMgZGF0YSAqLworICBpbnQJX3VyOwkJLyogc2F2ZWQgX3Igd2hlbiBfciBpcyBjb3VudGluZyB1bmdldGMgZGF0YSAqLworCisgIC8qIHRyaWNrcyB0byBtZWV0IG1pbmltdW0gcmVxdWlyZW1lbnRzIGV2ZW4gd2hlbiBtYWxsb2MoKSBmYWlscyAqLworICB1bnNpZ25lZCBjaGFyIF91YnVmWzNdOwkvKiBndWFyYW50ZWUgYW4gdW5nZXRjKCkgYnVmZmVyICovCisgIHVuc2lnbmVkIGNoYXIgX25idWZbMV07CS8qIGd1YXJhbnRlZSBhIGdldGMoKSBidWZmZXIgKi8KKworICAvKiBzZXBhcmF0ZSBidWZmZXIgZm9yIGZnZXRsaW5lKCkgd2hlbiBsaW5lIGNyb3NzZXMgYnVmZmVyIGJvdW5kYXJ5ICovCisgIHN0cnVjdCBfX3NidWYgX2xiOwkvKiBidWZmZXIgZm9yIGZnZXRsaW5lKCkgKi8KKworICAvKiBVbml4IHN0ZGlvIGZpbGVzIGdldCBhbGlnbmVkIHRvIGJsb2NrIGJvdW5kYXJpZXMgb24gZnNlZWsoKSAqLworICBpbnQJX2Jsa3NpemU7CS8qIHN0YXQuc3RfYmxrc2l6ZSAobWF5IGJlICE9IF9iZi5fc2l6ZSkgKi8KKyAgaW50ICAgX2ZsYWdzMjsgICAgICAgIC8qIGZvciBmdXR1cmUgdXNlICovCisKKyAgX29mZjY0X3QgX29mZnNldDsgICAgIC8qIGN1cnJlbnQgbHNlZWsgb2Zmc2V0ICovCisgIF9mcG9zNjRfdCBfRVhGTlBUUihfc2VlazY0LCAoc3RydWN0IF9yZWVudCAqLCBfUFRSLCBfZnBvczY0X3QsIGludCkpOworCisjaWZuZGVmIF9fU0lOR0xFX1RIUkVBRF9fCisgIF9mbG9ja190IF9sb2NrOwkvKiBmb3IgdGhyZWFkLXNhZmV0eSBsb2NraW5nICovCisjZW5kaWYKKyAgX21ic3RhdGVfdCBfbWJzdGF0ZTsJLyogZm9yIHdpZGUgY2hhciBzdGRpbyBmdW5jdGlvbnMuICovCit9OwordHlwZWRlZiBzdHJ1Y3QgX19zRklMRTY0IF9fRklMRTsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBfX3NGSUxFICAgX19GSUxFOworI2VuZGlmIC8qIF9fTEFSR0U2NF9GSUxFUyAqLworI2VuZGlmIC8qICFfX0NVU1RPTV9GSUxFX0lPX18gKi8KKworc3RydWN0IF9nbHVlCit7CisgIHN0cnVjdCBfZ2x1ZSAqX25leHQ7CisgIGludCBfbmlvYnM7CisgIF9fRklMRSAqX2lvYnM7Cit9OworCisvKgorICogcmFuZDQ4IGZhbWlseSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKyNkZWZpbmUgICAgICAgIF9SQU5ENDhfU0VFRF8wICAoMHgzMzBlKQorI2RlZmluZSAgICAgICAgX1JBTkQ0OF9TRUVEXzEgICgweGFiY2QpCisjZGVmaW5lICAgICAgICBfUkFORDQ4X1NFRURfMiAgKDB4MTIzNCkKKyNkZWZpbmUgICAgICAgIF9SQU5ENDhfTVVMVF8wICAoMHhlNjZkKQorI2RlZmluZSAgICAgICAgX1JBTkQ0OF9NVUxUXzEgICgweGRlZWMpCisjZGVmaW5lICAgICAgICBfUkFORDQ4X01VTFRfMiAgKDB4MDAwNSkKKyNkZWZpbmUgICAgICAgIF9SQU5ENDhfQUREICAgICAoMHgwMDBiKQorc3RydWN0IF9yYW5kNDggeworICB1bnNpZ25lZCBzaG9ydCBfc2VlZFszXTsKKyAgdW5zaWduZWQgc2hvcnQgX211bHRbM107CisgIHVuc2lnbmVkIHNob3J0IF9hZGQ7CisjaWZkZWYgX1JFRU5UX1NNQUxMCisgIC8qIFB1dCB0aGlzIGluIGhlcmUgYXMgd2VsbCwgZm9yIGdvb2QgbHVjay4gICovCisgIF9fZXh0ZW5zaW9uX18gdW5zaWduZWQgbG9uZyBsb25nIF9yYW5kX25leHQ7CisjZW5kaWYKK307CisKKy8qIEhvdyBiaWcgdGhlIHNvbWUgYXJyYXlzIGFyZS4gICovCisjZGVmaW5lIF9SRUVOVF9FTUVSR0VOQ1lfU0laRSAyNQorI2RlZmluZSBfUkVFTlRfQVNDVElNRV9TSVpFIDI2CisjZGVmaW5lIF9SRUVOVF9TSUdOQUxfU0laRSAyNAorCisvKgorICogc3RydWN0IF9yZWVudAorICoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zICphbGwqIGdsb2JhbHMgbmVlZGVkIGJ5IHRoZSBsaWJyYXJ5LgorICogSXQncyByYWlzb24gZCdldHJlIGlzIHRvIGZhY2lsaXRhdGUgdGhyZWFkcyBieSBtYWtpbmcgYWxsIGxpYnJhcnkgcm91dGluZXMKKyAqIHJlZW50cmFudC4gIElFOiBBbGwgc3RhdGUgaW5mb3JtYXRpb24gaXMgY29udGFpbmVkIGhlcmUuCisgKi8KKworI2lmZGVmIF9SRUVOVF9TTUFMTAorCitzdHJ1Y3QgX21wcmVjCit7CisgIC8qIHVzZWQgYnkgbXByZWMgcm91dGluZXMgKi8KKyAgc3RydWN0IF9CaWdpbnQgKl9yZXN1bHQ7CisgIGludCBfcmVzdWx0X2s7CisgIHN0cnVjdCBfQmlnaW50ICpfcDVzOworICBzdHJ1Y3QgX0JpZ2ludCAqKl9mcmVlbGlzdDsKK307CisKKworc3RydWN0IF9taXNjX3JlZW50Cit7CisgIC8qIG1pc2NlbGxhbmVvdXMgcmVlbnRyYW50IGRhdGEgKi8KKyAgY2hhciAqX3N0cnRva19sYXN0OworICBfbWJzdGF0ZV90IF9tYmxlbl9zdGF0ZTsKKyAgX21ic3RhdGVfdCBfd2N0b21iX3N0YXRlOworICBfbWJzdGF0ZV90IF9tYnRvd2Nfc3RhdGU7CisgIGNoYXIgX2w2NGFfYnVmWzhdOworICBpbnQgX2dldGRhdGVfZXJyOworICBfbWJzdGF0ZV90IF9tYnJsZW5fc3RhdGU7CisgIF9tYnN0YXRlX3QgX21icnRvd2Nfc3RhdGU7CisgIF9tYnN0YXRlX3QgX21ic3J0b3djc19zdGF0ZTsKKyAgX21ic3RhdGVfdCBfd2NydG9tYl9zdGF0ZTsKKyAgX21ic3RhdGVfdCBfd2NzcnRvbWJzX3N0YXRlOworfTsKKworLyogVGhpcyB2ZXJzaW9uIG9mIF9yZWVudCBpcyBsYWlkIG91dCB3aXRoICJpbnQicyBpbiBwYWlycywgdG8gaGVscAorICogcG9ydHMgd2l0aCAxNi1iaXQgaW50J3MgYnV0IDMyLWJpdCBwb2ludGVycywgYWxpZ24gbmljZWx5LiAgKi8KK3N0cnVjdCBfcmVlbnQKK3sKKyAgLyogQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBwdXQgX2Vycm5vIGZpcnN0IGZvciBiaW5hcnkKKyAgICAgY29tcGF0aWJpbGl0eSB3aXRoIG5vbiBfUkVFTlRfU01BTEwgdGFyZ2V0cy4gICovCisgIGludCBfZXJybm87CQkJLyogbG9jYWwgY29weSBvZiBlcnJubyAqLworCisgIC8qIEZJTEUgaXMgYSBiaWcgc3RydWN0IGFuZCBtYXkgY2hhbmdlIG92ZXIgdGltZS4gIFRvIHRyeSB0byBhY2hpZXZlIGJpbmFyeQorICAgICBjb21wYXRpYmlsaXR5IHdpdGggZnV0dXJlIHZlcnNpb25zLCBwdXQgc3RkaW4sc3Rkb3V0LHN0ZGVyciBoZXJlLgorICAgICBUaGVzZSBhcmUgcG9pbnRlcnMgaW50byBtZW1iZXIgX19zZiBkZWZpbmVkIGJlbG93LiAgKi8KKyAgX19GSUxFICpfc3RkaW4sICpfc3Rkb3V0LCAqX3N0ZGVycjsJLyogWFhYICovCisKKyAgaW50ICBfaW5jOwkJCS8qIHVzZWQgYnkgdG1wbmFtICovCisKKyAgY2hhciAqX2VtZXJnZW5jeTsKKworICBpbnQgX19zZGlkaW5pdDsJCS8qIDEgbWVhbnMgc3RkaW8gaGFzIGJlZW4gaW5pdCdkICovCisKKyAgaW50IF9jdXJyZW50X2NhdGVnb3J5OwkvKiB1bnVzZWQgKi8KKyAgX0NPTlNUIGNoYXIgKl9jdXJyZW50X2xvY2FsZTsJLyogdW51c2VkICovCisKKyAgc3RydWN0IF9tcHJlYyAqX21wOworCisgIHZvaWQgX0VYRk5QVFIoX19jbGVhbnVwLCAoc3RydWN0IF9yZWVudCAqKSk7CisKKyAgaW50IF9nYW1tYV9zaWduZ2FtOworCisgIC8qIHVzZWQgYnkgc29tZSBmcCBjb252ZXJzaW9uIHJvdXRpbmVzICovCisgIGludCBfY3Z0bGVuOwkJCS8qIHNob3VsZCBiZSBzaXplX3QgKi8KKyAgY2hhciAqX2N2dGJ1ZjsKKworICBzdHJ1Y3QgX3JhbmQ0OCAqX3I0ODsKKyAgc3RydWN0IF9fdG0gKl9sb2NhbHRpbWVfYnVmOworICBjaGFyICpfYXNjdGltZV9idWY7CisKKyAgLyogc2lnbmFsIGluZm8gKi8KKyAgdm9pZCAoKiooX3NpZ19mdW5jKSkoaW50KTsKKworIyBpZm5kZWYgX1JFRU5UX0dMT0JBTF9BVEVYSVQKKyAgLyogYXRleGl0IHN0dWZmICovCisgIHN0cnVjdCBfYXRleGl0ICpfYXRleGl0OworICBzdHJ1Y3QgX2F0ZXhpdCBfYXRleGl0MDsKKyMgZW5kaWYKKworICBzdHJ1Y3QgX2dsdWUgX19zZ2x1ZTsJCQkvKiByb290IG9mIGdsdWUgY2hhaW4gKi8KKyAgX19GSUxFICpfX3NmOwkJCSAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9ycyAqLworICBzdHJ1Y3QgX21pc2NfcmVlbnQgKl9taXNjOyAgICAgICAgICAgIC8qIHN0cnRvaywgbXVsdGlieXRlIHN0YXRlcyAqLworICBjaGFyICpfc2lnbmFsX2J1ZjsgICAgICAgICAgICAgICAgICAgIC8qIHN0cnNpZ25hbCAqLworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBfX3NGSUxFX2Zha2UgX19zZl9mYWtlX3N0ZGluOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBfX3NGSUxFX2Zha2UgX19zZl9mYWtlX3N0ZG91dDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgX19zRklMRV9mYWtlIF9fc2ZfZmFrZV9zdGRlcnI7CisKKyMgZGVmaW5lIF9SRUVOVF9JTklUKHZhcikgXAorICB7IDAsIFwKKyAgICAoX19GSUxFICopJl9fc2ZfZmFrZV9zdGRpbiwgXAorICAgIChfX0ZJTEUgKikmX19zZl9mYWtlX3N0ZG91dCwgXAorICAgIChfX0ZJTEUgKikmX19zZl9mYWtlX3N0ZGVyciwgXAorICAgIDAsIFwKKyAgICBfTlVMTCwgXAorICAgIDAsIFwKKyAgICAwLCBcCisgICAgIkMiLCBcCisgICAgX05VTEwsIFwKKyAgICBfTlVMTCwgXAorICAgIDAsIFwKKyAgICAwLCBcCisgICAgX05VTEwsIFwKKyAgICBfTlVMTCwgXAorICAgIF9OVUxMLCBcCisgICAgX05VTEwsIFwKKyAgICBfTlVMTCwgXAorICAgIF9SRUVOVF9JTklUX0FURVhJVCBcCisgICAge19OVUxMLCAwLCBfTlVMTH0sIFwKKyAgICBfTlVMTCwgXAorICAgIF9OVUxMLCBcCisgICAgX05VTEwgXAorICB9CisKKyNkZWZpbmUgX1JFRU5UX0lOSVRfUFRSKHZhcikgXAorICB7IG1lbXNldCgodmFyKSwgMCwgc2l6ZW9mKCoodmFyKSkpOyBcCisgICAgKHZhciktPl9zdGRpbiA9IChfX0ZJTEUgKikmX19zZl9mYWtlX3N0ZGluOyBcCisgICAgKHZhciktPl9zdGRvdXQgPSAoX19GSUxFICopJl9fc2ZfZmFrZV9zdGRvdXQ7IFwKKyAgICAodmFyKS0+X3N0ZGVyciA9IChfX0ZJTEUgKikmX19zZl9mYWtlX3N0ZGVycjsgXAorICAgICh2YXIpLT5fY3VycmVudF9sb2NhbGUgPSAiQyI7IFwKKyAgfQorCisvKiBPbmx5IGJ1aWx0IHRoZSBhc3NlcnQoKSBjYWxscyBpZiB3ZSBhcmUgYnVpbHQgd2l0aCBkZWJ1Z2dpbmcuICAqLworI2lmIERFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIF9fcmVlbnRfYXNzZXJ0KHgpIGFzc2VydCh4KQorI2Vsc2UKKyNkZWZpbmUgX19yZWVudF9hc3NlcnQoeCkgKCh2b2lkKTApCisjZW5kaWYKKworI2lmZGVmIF9fQ1VTVE9NX0ZJTEVfSU9fXworI2Vycm9yIEN1c3RvbSBGSUxFIEkvTyBhbmQgX1JFRU5UX1NNQUxMIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorI2VuZGlmCisKKy8qIEdlbmVyaWMgX1JFRU5UIGNoZWNrIG1hY3JvLiAgKi8KKyNkZWZpbmUgX1JFRU5UX0NIRUNLKHZhciwgd2hhdCwgdHlwZSwgc2l6ZSwgaW5pdCkgZG8geyBcCisgIHN0cnVjdCBfcmVlbnQgKl9yID0gKHZhcik7IFwKKyAgaWYgKF9yLT53aGF0ID09IE5VTEwpIHsgXAorICAgIF9yLT53aGF0ID0gKHR5cGUpbWFsbG9jKHNpemUpOyBcCisgICAgX19yZWVudF9hc3NlcnQoX3ItPndoYXQpOyBcCisgICAgaW5pdDsgXAorICB9IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX1JFRU5UX0NIRUNLX1RNKHZhcikgXAorICBfUkVFTlRfQ0hFQ0sodmFyLCBfbG9jYWx0aW1lX2J1Ziwgc3RydWN0IF9fdG0gKiwgc2l6ZW9mICooKHZhciktPl9sb2NhbHRpbWVfYnVmKSwgXAorICAgIC8qIG5vdGhpbmcgKi8pCisKKyNkZWZpbmUgX1JFRU5UX0NIRUNLX0FTQ1RJTUVfQlVGKHZhcikgXAorICBfUkVFTlRfQ0hFQ0sodmFyLCBfYXNjdGltZV9idWYsIGNoYXIgKiwgX1JFRU5UX0FTQ1RJTUVfU0laRSwgXAorICAgIG1lbXNldCgodmFyKS0+X2FzY3RpbWVfYnVmLCAwLCBfUkVFTlRfQVNDVElNRV9TSVpFKSkKKworLyogSGFuZGxlIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgcmFuZDQ4IHN0cnVjdHVyZS4gKi8KKyNkZWZpbmUgX1JFRU5UX0lOSVRfUkFORDQ4KHZhcikgZG8geyBcCisgIHN0cnVjdCBfcmVlbnQgKl9yID0gKHZhcik7IFwKKyAgX3ItPl9yNDgtPl9zZWVkWzBdID0gX1JBTkQ0OF9TRUVEXzA7IFwKKyAgX3ItPl9yNDgtPl9zZWVkWzFdID0gX1JBTkQ0OF9TRUVEXzE7IFwKKyAgX3ItPl9yNDgtPl9zZWVkWzJdID0gX1JBTkQ0OF9TRUVEXzI7IFwKKyAgX3ItPl9yNDgtPl9tdWx0WzBdID0gX1JBTkQ0OF9NVUxUXzA7IFwKKyAgX3ItPl9yNDgtPl9tdWx0WzFdID0gX1JBTkQ0OF9NVUxUXzE7IFwKKyAgX3ItPl9yNDgtPl9tdWx0WzJdID0gX1JBTkQ0OF9NVUxUXzI7IFwKKyAgX3ItPl9yNDgtPl9hZGQgPSBfUkFORDQ4X0FERDsgXAorICBfci0+X3I0OC0+X3JhbmRfbmV4dCA9IDE7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lIF9SRUVOVF9DSEVDS19SQU5ENDgodmFyKSBcCisgIF9SRUVOVF9DSEVDSyh2YXIsIF9yNDgsIHN0cnVjdCBfcmFuZDQ4ICosIHNpemVvZiAqKCh2YXIpLT5fcjQ4KSwgX1JFRU5UX0lOSVRfUkFORDQ4KCh2YXIpKSkKKworI2RlZmluZSBfUkVFTlRfSU5JVF9NUCh2YXIpIGRvIHsgXAorICBzdHJ1Y3QgX3JlZW50ICpfciA9ICh2YXIpOyBcCisgIF9yLT5fbXAtPl9yZXN1bHRfayA9IDA7IFwKKyAgX3ItPl9tcC0+X3Jlc3VsdCA9IF9yLT5fbXAtPl9wNXMgPSBfTlVMTDsgXAorICBfci0+X21wLT5fZnJlZWxpc3QgPSBfTlVMTDsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1JFRU5UX0NIRUNLX01QKHZhcikgXAorICBfUkVFTlRfQ0hFQ0sodmFyLCBfbXAsIHN0cnVjdCBfbXByZWMgKiwgc2l6ZW9mICooKHZhciktPl9tcCksIF9SRUVOVF9JTklUX01QKHZhcikpCisKKyNkZWZpbmUgX1JFRU5UX0NIRUNLX0VNRVJHRU5DWSh2YXIpIFwKKyAgX1JFRU5UX0NIRUNLKHZhciwgX2VtZXJnZW5jeSwgY2hhciAqLCBfUkVFTlRfRU1FUkdFTkNZX1NJWkUsIC8qIG5vdGhpbmcgKi8pCisKKyNkZWZpbmUgX1JFRU5UX0lOSVRfTUlTQyh2YXIpIGRvIHsgXAorICBzdHJ1Y3QgX3JlZW50ICpfciA9ICh2YXIpOyBcCisgIF9yLT5fbWlzYy0+X3N0cnRva19sYXN0ID0gX05VTEw7IFwKKyAgX3ItPl9taXNjLT5fbWJsZW5fc3RhdGUuX19jb3VudCA9IDA7IFwKKyAgX3ItPl9taXNjLT5fbWJsZW5fc3RhdGUuX192YWx1ZS5fX3djaCA9IDA7IFwKKyAgX3ItPl9taXNjLT5fd2N0b21iX3N0YXRlLl9fY291bnQgPSAwOyBcCisgIF9yLT5fbWlzYy0+X3djdG9tYl9zdGF0ZS5fX3ZhbHVlLl9fd2NoID0gMDsgXAorICBfci0+X21pc2MtPl9tYnRvd2Nfc3RhdGUuX19jb3VudCA9IDA7IFwKKyAgX3ItPl9taXNjLT5fbWJ0b3djX3N0YXRlLl9fdmFsdWUuX193Y2ggPSAwOyBcCisgIF9yLT5fbWlzYy0+X21icmxlbl9zdGF0ZS5fX2NvdW50ID0gMDsgXAorICBfci0+X21pc2MtPl9tYnJsZW5fc3RhdGUuX192YWx1ZS5fX3djaCA9IDA7IFwKKyAgX3ItPl9taXNjLT5fbWJydG93Y19zdGF0ZS5fX2NvdW50ID0gMDsgXAorICBfci0+X21pc2MtPl9tYnJ0b3djX3N0YXRlLl9fdmFsdWUuX193Y2ggPSAwOyBcCisgIF9yLT5fbWlzYy0+X21ic3J0b3djc19zdGF0ZS5fX2NvdW50ID0gMDsgXAorICBfci0+X21pc2MtPl9tYnNydG93Y3Nfc3RhdGUuX192YWx1ZS5fX3djaCA9IDA7IFwKKyAgX3ItPl9taXNjLT5fd2NydG9tYl9zdGF0ZS5fX2NvdW50ID0gMDsgXAorICBfci0+X21pc2MtPl93Y3J0b21iX3N0YXRlLl9fdmFsdWUuX193Y2ggPSAwOyBcCisgIF9yLT5fbWlzYy0+X3djc3J0b21ic19zdGF0ZS5fX2NvdW50ID0gMDsgXAorICBfci0+X21pc2MtPl93Y3NydG9tYnNfc3RhdGUuX192YWx1ZS5fX3djaCA9IDA7IFwKKyAgX3ItPl9taXNjLT5fbDY0YV9idWZbMF0gPSAnXDAnOyBcCisgIF9yLT5fbWlzYy0+X2dldGRhdGVfZXJyID0gMDsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1JFRU5UX0NIRUNLX01JU0ModmFyKSBcCisgIF9SRUVOVF9DSEVDSyh2YXIsIF9taXNjLCBzdHJ1Y3QgX21pc2NfcmVlbnQgKiwgc2l6ZW9mICooKHZhciktPl9taXNjKSwgX1JFRU5UX0lOSVRfTUlTQyh2YXIpKQorCisjZGVmaW5lIF9SRUVOVF9DSEVDS19TSUdOQUxfQlVGKHZhcikgXAorICBfUkVFTlRfQ0hFQ0sodmFyLCBfc2lnbmFsX2J1ZiwgY2hhciAqLCBfUkVFTlRfU0lHTkFMX1NJWkUsIC8qIG5vdGhpbmcgKi8pCisKKyNkZWZpbmUgX1JFRU5UX1NJR05HQU0ocHRyKQkoKHB0ciktPl9nYW1tYV9zaWduZ2FtKQorI2RlZmluZSBfUkVFTlRfUkFORF9ORVhUKHB0cikJKChwdHIpLT5fcjQ4LT5fcmFuZF9uZXh0KQorI2RlZmluZSBfUkVFTlRfUkFORDQ4X1NFRUQocHRyKQkoKHB0ciktPl9yNDgtPl9zZWVkKQorI2RlZmluZSBfUkVFTlRfUkFORDQ4X01VTFQocHRyKQkoKHB0ciktPl9yNDgtPl9tdWx0KQorI2RlZmluZSBfUkVFTlRfUkFORDQ4X0FERChwdHIpCSgocHRyKS0+X3I0OC0+X2FkZCkKKyNkZWZpbmUgX1JFRU5UX01QX1JFU1VMVChwdHIpCSgocHRyKS0+X21wLT5fcmVzdWx0KQorI2RlZmluZSBfUkVFTlRfTVBfUkVTVUxUX0socHRyKQkoKHB0ciktPl9tcC0+X3Jlc3VsdF9rKQorI2RlZmluZSBfUkVFTlRfTVBfUDVTKHB0cikJKChwdHIpLT5fbXAtPl9wNXMpCisjZGVmaW5lIF9SRUVOVF9NUF9GUkVFTElTVChwdHIpCSgocHRyKS0+X21wLT5fZnJlZWxpc3QpCisjZGVmaW5lIF9SRUVOVF9BU0NUSU1FX0JVRihwdHIpCSgocHRyKS0+X2FzY3RpbWVfYnVmKQorI2RlZmluZSBfUkVFTlRfVE0ocHRyKQkJKChwdHIpLT5fbG9jYWx0aW1lX2J1ZikKKyNkZWZpbmUgX1JFRU5UX0VNRVJHRU5DWShwdHIpCSgocHRyKS0+X2VtZXJnZW5jeSkKKyNkZWZpbmUgX1JFRU5UX1NUUlRPS19MQVNUKHB0cikJKChwdHIpLT5fbWlzYy0+X3N0cnRva19sYXN0KQorI2RlZmluZSBfUkVFTlRfTUJMRU5fU1RBVEUocHRyKQkoKHB0ciktPl9taXNjLT5fbWJsZW5fc3RhdGUpCisjZGVmaW5lIF9SRUVOVF9NQlRPV0NfU1RBVEUocHRyKSgocHRyKS0+X21pc2MtPl9tYnRvd2Nfc3RhdGUpCisjZGVmaW5lIF9SRUVOVF9XQ1RPTUJfU1RBVEUocHRyKSgocHRyKS0+X21pc2MtPl93Y3RvbWJfc3RhdGUpCisjZGVmaW5lIF9SRUVOVF9NQlJMRU5fU1RBVEUocHRyKSAoKHB0ciktPl9taXNjLT5fbWJybGVuX3N0YXRlKQorI2RlZmluZSBfUkVFTlRfTUJSVE9XQ19TVEFURShwdHIpICgocHRyKS0+X21pc2MtPl9tYnJ0b3djX3N0YXRlKQorI2RlZmluZSBfUkVFTlRfTUJTUlRPV0NTX1NUQVRFKHB0cikgKChwdHIpLT5fbWlzYy0+X21ic3J0b3djc19zdGF0ZSkKKyNkZWZpbmUgX1JFRU5UX1dDUlRPTUJfU1RBVEUocHRyKSAoKHB0ciktPl9taXNjLT5fd2NydG9tYl9zdGF0ZSkKKyNkZWZpbmUgX1JFRU5UX1dDU1JUT01CU19TVEFURShwdHIpICgocHRyKS0+X21pc2MtPl93Y3NydG9tYnNfc3RhdGUpCisjZGVmaW5lIF9SRUVOVF9MNjRBX0JVRihwdHIpICAgICgocHRyKS0+X21pc2MtPl9sNjRhX2J1ZikKKyNkZWZpbmUgX1JFRU5UX0dFVERBVEVfRVJSX1AocHRyKSAoJigocHRyKS0+X21pc2MtPl9nZXRkYXRlX2VycikpCisjZGVmaW5lIF9SRUVOVF9TSUdOQUxfQlVGKHB0cikgICgocHRyKS0+X3NpZ25hbF9idWYpCisKKyNlbHNlIC8qICFfUkVFTlRfU01BTEwgKi8KKworc3RydWN0IF9yZWVudAoreworICBpbnQgX2Vycm5vOwkJCS8qIGxvY2FsIGNvcHkgb2YgZXJybm8gKi8KKworICAvKiBGSUxFIGlzIGEgYmlnIHN0cnVjdCBhbmQgbWF5IGNoYW5nZSBvdmVyIHRpbWUuICBUbyB0cnkgdG8gYWNoaWV2ZSBiaW5hcnkKKyAgICAgY29tcGF0aWJpbGl0eSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucywgcHV0IHN0ZGluLHN0ZG91dCxzdGRlcnIgaGVyZS4KKyAgICAgVGhlc2UgYXJlIHBvaW50ZXJzIGludG8gbWVtYmVyIF9fc2YgZGVmaW5lZCBiZWxvdy4gICovCisgIF9fRklMRSAqX3N0ZGluLCAqX3N0ZG91dCwgKl9zdGRlcnI7CisKKyAgaW50ICBfaW5jOwkJCS8qIHVzZWQgYnkgdG1wbmFtICovCisgIGNoYXIgX2VtZXJnZW5jeVtfUkVFTlRfRU1FUkdFTkNZX1NJWkVdOworCisgIGludCBfY3VycmVudF9jYXRlZ29yeTsJLyogdXNlZCBieSBzZXRsb2NhbGUgKi8KKyAgX0NPTlNUIGNoYXIgKl9jdXJyZW50X2xvY2FsZTsKKworICBpbnQgX19zZGlkaW5pdDsJCS8qIDEgbWVhbnMgc3RkaW8gaGFzIGJlZW4gaW5pdCdkICovCisKKyAgdm9pZCBfRVhGTlBUUihfX2NsZWFudXAsIChzdHJ1Y3QgX3JlZW50ICopKTsKKworICAvKiB1c2VkIGJ5IG1wcmVjIHJvdXRpbmVzICovCisgIHN0cnVjdCBfQmlnaW50ICpfcmVzdWx0OworICBpbnQgX3Jlc3VsdF9rOworICBzdHJ1Y3QgX0JpZ2ludCAqX3A1czsKKyAgc3RydWN0IF9CaWdpbnQgKipfZnJlZWxpc3Q7CisKKyAgLyogdXNlZCBieSBzb21lIGZwIGNvbnZlcnNpb24gcm91dGluZXMgKi8KKyAgaW50IF9jdnRsZW47CQkJLyogc2hvdWxkIGJlIHNpemVfdCAqLworICBjaGFyICpfY3Z0YnVmOworCisgIHVuaW9uCisgICAgeworICAgICAgc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgX3VudXNlZF9yYW5kOworICAgICAgICAgIGNoYXIgKiBfc3RydG9rX2xhc3Q7CisgICAgICAgICAgY2hhciBfYXNjdGltZV9idWZbX1JFRU5UX0FTQ1RJTUVfU0laRV07CisgICAgICAgICAgc3RydWN0IF9fdG0gX2xvY2FsdGltZV9idWY7CisgICAgICAgICAgaW50IF9nYW1tYV9zaWduZ2FtOworICAgICAgICAgIF9fZXh0ZW5zaW9uX18gdW5zaWduZWQgbG9uZyBsb25nIF9yYW5kX25leHQ7CisgICAgICAgICAgc3RydWN0IF9yYW5kNDggX3I0ODsKKyAgICAgICAgICBfbWJzdGF0ZV90IF9tYmxlbl9zdGF0ZTsKKyAgICAgICAgICBfbWJzdGF0ZV90IF9tYnRvd2Nfc3RhdGU7CisgICAgICAgICAgX21ic3RhdGVfdCBfd2N0b21iX3N0YXRlOworICAgICAgICAgIGNoYXIgX2w2NGFfYnVmWzhdOworICAgICAgICAgIGNoYXIgX3NpZ25hbF9idWZbX1JFRU5UX1NJR05BTF9TSVpFXTsKKyAgICAgICAgICBpbnQgX2dldGRhdGVfZXJyOworICAgICAgICAgIF9tYnN0YXRlX3QgX21icmxlbl9zdGF0ZTsKKyAgICAgICAgICBfbWJzdGF0ZV90IF9tYnJ0b3djX3N0YXRlOworICAgICAgICAgIF9tYnN0YXRlX3QgX21ic3J0b3djc19zdGF0ZTsKKyAgICAgICAgICBfbWJzdGF0ZV90IF93Y3J0b21iX3N0YXRlOworICAgICAgICAgIF9tYnN0YXRlX3QgX3djc3J0b21ic19zdGF0ZTsKKwkgIGludCBfaF9lcnJubzsKKyAgICAgICAgfSBfcmVlbnQ7CisgIC8qIFR3byBuZXh0IHR3byBmaWVsZHMgd2VyZSBvbmNlIHVzZWQgYnkgbWFsbG9jLiAgVGhleSBhcmUgbm8gbG9uZ2VyCisgICAgIHVzZWQuIFRoZXkgYXJlIHVzZWQgdG8gcHJlc2VydmUgdGhlIHNwYWNlIHVzZWQgYmVmb3JlIHNvIGFzIHRvCisgICAgIGFsbG93IGFkZGl0aW9uIG9mIG5ldyByZWVudCBmaWVsZHMgYW5kIGtlZXAgYmluYXJ5IGNvbXBhdGliaWxpdHkuICAgKi8KKyAgICAgIHN0cnVjdAorICAgICAgICB7CisjZGVmaW5lIF9OX0xJU1RTIDMwCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqIF9uZXh0ZltfTl9MSVNUU107CisgICAgICAgICAgdW5zaWduZWQgaW50IF9ubWFsbG9jW19OX0xJU1RTXTsKKyAgICAgICAgfSBfdW51c2VkOworICAgIH0gX25ldzsKKworIyBpZm5kZWYgX1JFRU5UX0dMT0JBTF9BVEVYSVQKKyAgLyogYXRleGl0IHN0dWZmICovCisgIHN0cnVjdCBfYXRleGl0ICpfYXRleGl0OwkvKiBwb2ludHMgdG8gaGVhZCBvZiBMSUZPIHN0YWNrICovCisgIHN0cnVjdCBfYXRleGl0IF9hdGV4aXQwOwkvKiBvbmUgZ3VhcmFudGVlZCB0YWJsZSwgcmVxdWlyZWQgYnkgQU5TSSAqLworIyBlbmRpZgorCisgIC8qIHNpZ25hbCBpbmZvICovCisgIHZvaWQgKCoqKF9zaWdfZnVuYykpKGludCk7CisKKyAgLyogVGhlc2UgYXJlIGhlcmUgbGFzdCBzbyB0aGF0IF9fRklMRSBjYW4gZ3JvdyB3aXRob3V0IGNoYW5naW5nIHRoZSBvZmZzZXRzCisgICAgIG9mIHRoZSBhYm92ZSBtZW1iZXJzIChvbiB0aGUgb2ZmIGNoYW5jZSB0aGF0IGZ1dHVyZSBiaW5hcnkgY29tcGF0aWJpbGl0eQorICAgICB3b3VsZCBiZSBicm9rZW4gb3RoZXJ3aXNlKS4gICovCisgIHN0cnVjdCBfZ2x1ZSBfX3NnbHVlOwkJLyogcm9vdCBvZiBnbHVlIGNoYWluICovCisgIF9fRklMRSBfX3NmWzNdOyAgCQkvKiBmaXJzdCB0aHJlZSBmaWxlIGRlc2NyaXB0b3JzICovCit9OworCisjZGVmaW5lIF9SRUVOVF9JTklUKHZhcikgXAorICB7IDAsIFwKKyAgICAmKHZhcikuX19zZlswXSwgXAorICAgICYodmFyKS5fX3NmWzFdLCBcCisgICAgJih2YXIpLl9fc2ZbMl0sIFwKKyAgICAwLCBcCisgICAgIiIsIFwKKyAgICAwLCBcCisgICAgIkMiLCBcCisgICAgMCwgXAorICAgIF9OVUxMLCBcCisgICAgX05VTEwsIFwKKyAgICAwLCBcCisgICAgX05VTEwsIFwKKyAgICBfTlVMTCwgXAorICAgIDAsIFwKKyAgICBfTlVMTCwgXAorICAgIHsgXAorICAgICAgeyBcCisgICAgICAgIDAsIFwKKyAgICAgICAgX05VTEwsIFwKKyAgICAgICAgIiIsIFwKKyAgICAgICAgezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LCBcCisgICAgICAgIDAsIFwKKyAgICAgICAgMSwgXAorICAgICAgICB7IFwKKyAgICAgICAgICB7X1JBTkQ0OF9TRUVEXzAsIF9SQU5ENDhfU0VFRF8xLCBfUkFORDQ4X1NFRURfMn0sIFwKKyAgICAgICAgICB7X1JBTkQ0OF9NVUxUXzAsIF9SQU5ENDhfTVVMVF8xLCBfUkFORDQ4X01VTFRfMn0sIFwKKyAgICAgICAgICBfUkFORDQ4X0FERCBcCisgICAgICAgIH0sIFwKKyAgICAgICAgezAsIHswfX0sIFwKKyAgICAgICAgezAsIHswfX0sIFwKKyAgICAgICAgezAsIHswfX0sIFwKKyAgICAgICAgIiIsIFwKKyAgICAgICAgIiIsIFwKKyAgICAgICAgMCwgXAorICAgICAgICB7MCwgezB9fSwgXAorICAgICAgICB7MCwgezB9fSwgXAorICAgICAgICB7MCwgezB9fSwgXAorICAgICAgICB7MCwgezB9fSwgXAorICAgICAgICB7MCwgezB9fSBcCisgICAgICB9IFwKKyAgICB9LCBcCisgICAgX1JFRU5UX0lOSVRfQVRFWElUIFwKKyAgICBfTlVMTCwgXAorICAgIHtfTlVMTCwgMCwgX05VTEx9IFwKKyAgfQorCisjZGVmaW5lIF9SRUVOVF9JTklUX1BUUih2YXIpIFwKKyAgeyBtZW1zZXQoKHZhciksIDAsIHNpemVvZigqKHZhcikpKTsgXAorICAgICh2YXIpLT5fc3RkaW4gPSAmKHZhciktPl9fc2ZbMF07IFwKKyAgICAodmFyKS0+X3N0ZG91dCA9ICYodmFyKS0+X19zZlsxXTsgXAorICAgICh2YXIpLT5fc3RkZXJyID0gJih2YXIpLT5fX3NmWzJdOyBcCisgICAgKHZhciktPl9jdXJyZW50X2xvY2FsZSA9ICJDIjsgXAorICAgICh2YXIpLT5fbmV3Ll9yZWVudC5fcmFuZF9uZXh0ID0gMTsgXAorICAgICh2YXIpLT5fbmV3Ll9yZWVudC5fcjQ4Ll9zZWVkWzBdID0gX1JBTkQ0OF9TRUVEXzA7IFwKKyAgICAodmFyKS0+X25ldy5fcmVlbnQuX3I0OC5fc2VlZFsxXSA9IF9SQU5ENDhfU0VFRF8xOyBcCisgICAgKHZhciktPl9uZXcuX3JlZW50Ll9yNDguX3NlZWRbMl0gPSBfUkFORDQ4X1NFRURfMjsgXAorICAgICh2YXIpLT5fbmV3Ll9yZWVudC5fcjQ4Ll9tdWx0WzBdID0gX1JBTkQ0OF9NVUxUXzA7IFwKKyAgICAodmFyKS0+X25ldy5fcmVlbnQuX3I0OC5fbXVsdFsxXSA9IF9SQU5ENDhfTVVMVF8xOyBcCisgICAgKHZhciktPl9uZXcuX3JlZW50Ll9yNDguX211bHRbMl0gPSBfUkFORDQ4X01VTFRfMjsgXAorICAgICh2YXIpLT5fbmV3Ll9yZWVudC5fcjQ4Ll9hZGQgPSBfUkFORDQ4X0FERDsgXAorICB9CisKKyNkZWZpbmUgX1JFRU5UX0NIRUNLX1JBTkQ0OChwdHIpCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgX1JFRU5UX0NIRUNLX01QKHB0cikJCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgX1JFRU5UX0NIRUNLX1RNKHB0cikJCS8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgX1JFRU5UX0NIRUNLX0FTQ1RJTUVfQlVGKHB0cikJLyogbm90aGluZyAqLworI2RlZmluZSBfUkVFTlRfQ0hFQ0tfRU1FUkdFTkNZKHB0cikJLyogbm90aGluZyAqLworI2RlZmluZSBfUkVFTlRfQ0hFQ0tfTUlTQyhwdHIpCSAgICAgICAgLyogbm90aGluZyAqLworI2RlZmluZSBfUkVFTlRfQ0hFQ0tfU0lHTkFMX0JVRihwdHIpCS8qIG5vdGhpbmcgKi8KKworI2RlZmluZSBfUkVFTlRfU0lHTkdBTShwdHIpCSgocHRyKS0+X25ldy5fcmVlbnQuX2dhbW1hX3NpZ25nYW0pCisjZGVmaW5lIF9SRUVOVF9SQU5EX05FWFQocHRyKQkoKHB0ciktPl9uZXcuX3JlZW50Ll9yYW5kX25leHQpCisjZGVmaW5lIF9SRUVOVF9SQU5ENDhfU0VFRChwdHIpCSgocHRyKS0+X25ldy5fcmVlbnQuX3I0OC5fc2VlZCkKKyNkZWZpbmUgX1JFRU5UX1JBTkQ0OF9NVUxUKHB0cikJKChwdHIpLT5fbmV3Ll9yZWVudC5fcjQ4Ll9tdWx0KQorI2RlZmluZSBfUkVFTlRfUkFORDQ4X0FERChwdHIpCSgocHRyKS0+X25ldy5fcmVlbnQuX3I0OC5fYWRkKQorI2RlZmluZSBfUkVFTlRfTVBfUkVTVUxUKHB0cikJKChwdHIpLT5fcmVzdWx0KQorI2RlZmluZSBfUkVFTlRfTVBfUkVTVUxUX0socHRyKQkoKHB0ciktPl9yZXN1bHRfaykKKyNkZWZpbmUgX1JFRU5UX01QX1A1UyhwdHIpCSgocHRyKS0+X3A1cykKKyNkZWZpbmUgX1JFRU5UX01QX0ZSRUVMSVNUKHB0cikJKChwdHIpLT5fZnJlZWxpc3QpCisjZGVmaW5lIF9SRUVOVF9BU0NUSU1FX0JVRihwdHIpCSgocHRyKS0+X25ldy5fcmVlbnQuX2FzY3RpbWVfYnVmKQorI2RlZmluZSBfUkVFTlRfVE0ocHRyKQkJKCYocHRyKS0+X25ldy5fcmVlbnQuX2xvY2FsdGltZV9idWYpCisjZGVmaW5lIF9SRUVOVF9FTUVSR0VOQ1kocHRyKQkoKHB0ciktPl9lbWVyZ2VuY3kpCisjZGVmaW5lIF9SRUVOVF9TVFJUT0tfTEFTVChwdHIpCSgocHRyKS0+X25ldy5fcmVlbnQuX3N0cnRva19sYXN0KQorI2RlZmluZSBfUkVFTlRfTUJMRU5fU1RBVEUocHRyKQkoKHB0ciktPl9uZXcuX3JlZW50Ll9tYmxlbl9zdGF0ZSkKKyNkZWZpbmUgX1JFRU5UX01CVE9XQ19TVEFURShwdHIpKChwdHIpLT5fbmV3Ll9yZWVudC5fbWJ0b3djX3N0YXRlKQorI2RlZmluZSBfUkVFTlRfV0NUT01CX1NUQVRFKHB0cikoKHB0ciktPl9uZXcuX3JlZW50Ll93Y3RvbWJfc3RhdGUpCisjZGVmaW5lIF9SRUVOVF9NQlJMRU5fU1RBVEUocHRyKSgocHRyKS0+X25ldy5fcmVlbnQuX21icmxlbl9zdGF0ZSkKKyNkZWZpbmUgX1JFRU5UX01CUlRPV0NfU1RBVEUocHRyKSgocHRyKS0+X25ldy5fcmVlbnQuX21icnRvd2Nfc3RhdGUpCisjZGVmaW5lIF9SRUVOVF9NQlNSVE9XQ1NfU1RBVEUocHRyKSgocHRyKS0+X25ldy5fcmVlbnQuX21ic3J0b3djc19zdGF0ZSkKKyNkZWZpbmUgX1JFRU5UX1dDUlRPTUJfU1RBVEUocHRyKSgocHRyKS0+X25ldy5fcmVlbnQuX3djcnRvbWJfc3RhdGUpCisjZGVmaW5lIF9SRUVOVF9XQ1NSVE9NQlNfU1RBVEUocHRyKSgocHRyKS0+X25ldy5fcmVlbnQuX3djc3J0b21ic19zdGF0ZSkKKyNkZWZpbmUgX1JFRU5UX0w2NEFfQlVGKHB0cikgICAgKChwdHIpLT5fbmV3Ll9yZWVudC5fbDY0YV9idWYpCisjZGVmaW5lIF9SRUVOVF9TSUdOQUxfQlVGKHB0cikgICgocHRyKS0+X25ldy5fcmVlbnQuX3NpZ25hbF9idWYpCisjZGVmaW5lIF9SRUVOVF9HRVREQVRFX0VSUl9QKHB0cikgKCYoKHB0ciktPl9uZXcuX3JlZW50Ll9nZXRkYXRlX2VycikpCisKKyNlbmRpZiAvKiAhX1JFRU5UX1NNQUxMICovCisKKy8qIFRoaXMgdmFsdWUgaXMgdXNlZCBpbiBzdGRsaWIvbWlzYy5jLiAgcmVlbnQvcmVlbnQuYyBoYXMgdG8ga25vdyBpdAorICAgYXMgd2VsbCB0byBtYWtlIHN1cmUgdGhlIGZyZWVsaXN0IGlzIGNvcnJlY3RseSBmcmVlJ2QuICBUaGVyZWZvcmUKKyAgIHdlIGRlZmluZSBpdCBoZXJlLCByYXRoZXIgdGhhbiBpbiBzdGRsaWIvbWlzYy5jLCBhcyBiZWZvcmUuICovCisjZGVmaW5lIF9LbWF4IChzaXplb2YgKHNpemVfdCkgPDwgMykKKworLyoKKyAqIEFsbCByZWZlcmVuY2VzIHRvIHN0cnVjdCBfcmVlbnQgYXJlIHZpYSB0aGlzIHBvaW50ZXIuCisgKiBJbnRlcm5hbGx5LCBuZXdsaWIgcm91dGluZXMgdGhhdCBuZWVkIHRvIHJlZmVyZW5jZSBpdCBzaG91bGQgdXNlIF9SRUVOVC4KKyAqLworCisjaWZuZGVmIF9fQVRUUklCVVRFX0lNUFVSRV9QVFJfXworI2RlZmluZSBfX0FUVFJJQlVURV9JTVBVUkVfUFRSX18KKyNlbmRpZgorCitleHRlcm4gc3RydWN0IF9yZWVudCAqX2ltcHVyZV9wdHIgX19BVFRSSUJVVEVfSU1QVVJFX1BUUl9fOworZXh0ZXJuIHN0cnVjdCBfcmVlbnQgKl9DT05TVCBfZ2xvYmFsX2ltcHVyZV9wdHIgX19BVFRSSUJVVEVfSU1QVVJFX1BUUl9fOworCit2b2lkIF9yZWNsYWltX3JlZW50IF9QQVJBTVMgKChzdHJ1Y3QgX3JlZW50ICopKTsKKworLyogI2RlZmluZSBfUkVFTlRfT05MWSBkZWZpbmUgdGhpcyB0byBnZXQgb25seSByZWVudHJhbnQgcm91dGluZXMgKi8KKworI2lmIGRlZmluZWQoX19EWU5BTUlDX1JFRU5UX18pICYmICFkZWZpbmVkKF9fU0lOR0xFX1RIUkVBRF9fKQorI2lmbmRlZiBfX2dldHJlZW50CisgIHN0cnVjdCBfcmVlbnQgKiBfRVhGVU4oX19nZXRyZWVudCwgKHZvaWQpKTsKKyNlbmRpZgorIyBkZWZpbmUgX1JFRU5UIChfX2dldHJlZW50KCkpCisjZWxzZSAvKiBfX1NJTkdMRV9USFJFQURfXyB8fCAhX19EWU5BTUlDX1JFRU5UX18gKi8KKyMgZGVmaW5lIF9SRUVOVCBfaW1wdXJlX3B0cgorI2VuZGlmIC8qIF9fU0lOR0xFX1RIUkVBRF9fIHx8ICFfX0RZTkFNSUNfUkVFTlRfXyAqLworCisjZGVmaW5lIF9HTE9CQUxfUkVFTlQgX2dsb2JhbF9pbXB1cmVfcHRyCisKKyNpZmRlZiBfUkVFTlRfR0xPQkFMX0FURVhJVAorZXh0ZXJuIHN0cnVjdCBfYXRleGl0ICpfZ2xvYmFsX2F0ZXhpdDsgLyogcG9pbnRzIHRvIGhlYWQgb2YgTElGTyBzdGFjayAqLworIyBkZWZpbmUgX0dMT0JBTF9BVEVYSVQgX2dsb2JhbF9hdGV4aXQKKyNlbHNlCisjIGRlZmluZSBfR0xPQkFMX0FURVhJVCAoX0dMT0JBTF9SRUVOVC0+X2F0ZXhpdCkKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIF9TWVNfUkVFTlRfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjgyNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX1NZU19SRVNPVVJDRV9IXworI2RlZmluZSBfU1lTX1JFU09VUkNFX0hfCisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjZGVmaW5lCVJVU0FHRV9TRUxGCTAJCS8qIGNhbGxpbmcgcHJvY2VzcyAqLworI2RlZmluZQlSVVNBR0VfQ0hJTERSRU4JLTEJCS8qIHRlcm1pbmF0ZWQgY2hpbGQgcHJvY2Vzc2VzICovCisKK3N0cnVjdCBydXNhZ2UgeworICAJc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CS8qIHVzZXIgdGltZSB1c2VkICovCisJc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CS8qIHN5c3RlbSB0aW1lIHVzZWQgKi8KK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3NjaGVkLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3NDI5NAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvc2NoZWQuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogIFdyaXR0ZW4gYnkgSm9lbCBTaGVycmlsbCA8am9lbEBPQVJjb3JwLmNvbT4uCisgKgorICogIENPUFlSSUdIVCAoYykgMTk4OS0yMDEwLgorICogIE9uLUxpbmUgQXBwbGljYXRpb25zIFJlc2VhcmNoIENvcnBvcmF0aW9uIChPQVIpLgorICoKKyAqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICBwdXJwb3NlIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZQorICogIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgYW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weQorICogIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqICBUSElTIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogIFdBUlJBTlRZLiAgSU4gUEFSVElDVUxBUiwgIFRIRSBBVVRIT1IgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT04KKyAqICBPUiBXQVJSQU5UWSBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNRVJDSEFOVEFCSUxJVFkgT0YgVEhJUworICogIFNPRlRXQVJFIE9SIElUUyBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqICAkSWQ6IHNjaGVkLmgsdiAxLjIgMjAwMi8wNi8yMCAxOTo1MToyNCBmaXR6c2ltIEV4cCAkCisgKi8KKworCisjaWZuZGVmIF9TWVNfU0NIRURfSF8KKyNkZWZpbmUgX1NZU19TQ0hFRF9IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFNjaGVkdWxpbmcgUG9saWNpZXMgKi8KKy8qIE9wZW4gR3JvdXAgU3BlY2lmaWNhdGlvbnMgSXNzdWUgNiAqLworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKKyNkZWZpbmUgU0NIRURfT1RIRVIgICAgMworI2Vsc2UKKyNkZWZpbmUgU0NIRURfT1RIRVIgICAgMAorI2VuZGlmCisKKyNkZWZpbmUgU0NIRURfRklGTyAgICAgMQorI2RlZmluZSBTQ0hFRF9SUiAgICAgICAyCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9TUE9SQURJQ19TRVJWRVIpCisjZGVmaW5lIFNDSEVEX1NQT1JBRElDIDQKKyNlbmRpZgorCisvKiBTY2hlZHVsaW5nIFBhcmFtZXRlcnMgKi8KKy8qIE9wZW4gR3JvdXAgU3BlY2lmaWNhdGlvbnMgSXNzdWUgNiAqLworCitzdHJ1Y3Qgc2NoZWRfcGFyYW0geworICBpbnQgc2NoZWRfcHJpb3JpdHk7ICAgICAgICAgICAvKiBQcm9jZXNzIGV4ZWN1dGlvbiBzY2hlZHVsaW5nIHByaW9yaXR5ICovCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9TUE9SQURJQ19TRVJWRVIpIHx8IGRlZmluZWQoX1BPU0lYX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIpCisgIGludCBzY2hlZF9zc19sb3dfcHJpb3JpdHk7ICAgIC8qIExvdyBzY2hlZHVsaW5nIHByaW9yaXR5IGZvciBzcG9yYWRpYyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHNlcnZlciAqLworICBzdHJ1Y3QgdGltZXNwZWMgc2NoZWRfc3NfcmVwbF9wZXJpb2Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGxlbmlzaG1lbnQgcGVyaW9kIGZvciBzcG9yYWRpYyBzZXJ2ZXIgKi8KKyAgc3RydWN0IHRpbWVzcGVjIHNjaGVkX3NzX2luaXRfYnVkZ2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgYnVkZ2V0IGZvciBzcG9yYWRpYyBzZXJ2ZXIgKi8KKyAgaW50IHNjaGVkX3NzX21heF9yZXBsOyAgICAgICAvKiBNYXhpbXVtIHBlbmRpbmcgcmVwbGVuaXNobWVudHMgZm9yICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3BvcmFkaWMgc2VydmVyICovCisjZW5kaWYKK307CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorLyogZW5kIG9mIGluY2x1ZGUgZmlsZSAqLworCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3NpZ25hbC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDZiYTA4Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9zaWduYWwuaApAQCAtMCwwICsxLDMxNyBAQAorLyogc3lzL3NpZ25hbC5oICovCisKKyNpZm5kZWYgX1NZU19TSUdOQUxfSAorI2RlZmluZSBfU1lTX1NJR05BTF9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlICJfYW5zaS5oIgorI2luY2x1ZGUgPHN5cy9mZWF0dXJlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiAjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXyovCisKKy8qIEN5Z3dpbiBkZWZpbmVzIGl0J3Mgb3duIHNpZ3NldF90IGluIGluY2x1ZGUvY3lnd2luL3NpZ25hbC5oICovCisjaWZuZGVmIF9fQ1lHV0lOX18KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX3J0ZW1zX18pCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9SRUFMVElNRV9TSUdOQUxTKQorCisvKiBzaWdldl9ub3RpZnkgdmFsdWVzCisgICBOT1RFOiBQMTAwMy4xYy9EMTAsIHAuIDM0IGFkZHMgU0lHRVZfVEhSRUFELiAgKi8KKworI2RlZmluZSBTSUdFVl9OT05FICAgMSAgLyogTm8gYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbiBzaGFsbCBiZSBkZWxpdmVyZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgd2hlbiB0aGUgZXZlbnQgb2YgaW50ZXJlc3Qgb2NjdXJzLiAqLworI2RlZmluZSBTSUdFVl9TSUdOQUwgMiAgLyogQSBxdWV1ZWQgc2lnbmFsLCB3aXRoIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qICB2YWx1ZSwgc2hhbGwgYmUgZGVsaXZlcmVkIHdoZW4gdGhlIGV2ZW50IG9mICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgaW50ZXJlc3Qgb2NjdXJzLiAqLworI2RlZmluZSBTSUdFVl9USFJFQUQgMyAgLyogQSBub3RpZmljYXRpb24gZnVuY3Rpb24gc2hhbGwgYmUgY2FsbGVkIHRvICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHBlcmZvcm0gbm90aWZpY2F0aW9uLiAqLworCisvKiAgU2lnbmFsIEdlbmVyYXRpb24gYW5kIERlbGl2ZXJ5LCBQMTAwMy4xYi0xOTkzLCBwLiA2MworICAgIE5PVEU6IFAxMDAzLjFjL0QxMCwgcC4gMzQgYWRkcyBzaWdldl9ub3RpZnlfZnVuY3Rpb24gYW5kCisgICAgICAgICAgc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMgdG8gdGhlIHNpZ2V2ZW50IHN0cnVjdHVyZS4gICovCisKK3VuaW9uIHNpZ3ZhbCB7CisgIGludCAgICBzaXZhbF9pbnQ7ICAgIC8qIEludGVnZXIgc2lnbmFsIHZhbHVlICovCisgIHZvaWQgICpzaXZhbF9wdHI7ICAgIC8qIFBvaW50ZXIgc2lnbmFsIHZhbHVlICovCit9OworCitzdHJ1Y3Qgc2lnZXZlbnQgeworICBpbnQgICAgICAgICAgICAgIHNpZ2V2X25vdGlmeTsgICAgICAgICAgICAgICAvKiBOb3RpZmljYXRpb24gdHlwZSAqLworICBpbnQgICAgICAgICAgICAgIHNpZ2V2X3NpZ25vOyAgICAgICAgICAgICAgICAvKiBTaWduYWwgbnVtYmVyICovCisgIHVuaW9uIHNpZ3ZhbCAgICAgc2lnZXZfdmFsdWU7ICAgICAgICAgICAgICAgIC8qIFNpZ25hbCB2YWx1ZSAqLworCisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEUykKKyAgdm9pZCAgICAgICAgICAgKCpzaWdldl9ub3RpZnlfZnVuY3Rpb24pKCB1bmlvbiBzaWd2YWwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90aWZpY2F0aW9uIGZ1bmN0aW9uICovCisgIHB0aHJlYWRfYXR0cl90ICAqc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXM7ICAgIC8qIE5vdGlmaWNhdGlvbiBBdHRyaWJ1dGVzICovCisjZW5kaWYKK307CisKKy8qIFNpZ25hbCBBY3Rpb25zLCBQMTAwMy4xYi0xOTkzLCBwLiA2NCAqLworLyogc2lfY29kZSB2YWx1ZXMsIHAuIDY2ICovCisKKyNkZWZpbmUgU0lfVVNFUiAgICAxICAgIC8qIFNlbnQgYnkgYSB1c2VyLiBraWxsKCksIGFib3J0KCksIGV0YyAqLworI2RlZmluZSBTSV9RVUVVRSAgIDIgICAgLyogU2VudCBieSBzaWdxdWV1ZSgpICovCisjZGVmaW5lIFNJX1RJTUVSICAgMyAgICAvKiBTZW50IGJ5IGV4cGlyYXRpb24gb2YgYSB0aW1lcl9zZXR0aW1lKCkgdGltZXIgKi8KKyNkZWZpbmUgU0lfQVNZTkNJTyA0ICAgIC8qIEluZGljYXRlcyBjb21wbGV0aW9uIG9mIGFzeWNuaHJvbm91cyBJTyAqLworI2RlZmluZSBTSV9NRVNHUSAgIDUgICAgLyogSW5kaWNhdGVzIGFycml2YWwgb2YgYSBtZXNzYWdlIGF0IGFuIGVtcHR5IHF1ZXVlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50ICAgICAgICAgIHNpX3NpZ25vOyAgICAvKiBTaWduYWwgbnVtYmVyICovCisgIGludCAgICAgICAgICBzaV9jb2RlOyAgICAgLyogQ2F1c2Ugb2YgdGhlIHNpZ25hbCAqLworICB1bmlvbiBzaWd2YWwgc2lfdmFsdWU7ICAgIC8qIFNpZ25hbCB2YWx1ZSAqLworfSBzaWdpbmZvX3Q7CisjZW5kaWYKKworLyogIDMuMy44IFN5bmNocm9ub3VzbHkgQWNjZXB0IGEgU2lnbmFsLCBQMTAwMy4xYi0xOTkzLCBwLiA3NiAqLworCisjZGVmaW5lIFNBX05PQ0xEU1RPUCAxICAgLyogRG8gbm90IGdlbmVyYXRlIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wICovCisjZGVmaW5lIFNBX1NJR0lORk8gICAyICAgLyogSW52b2tlIHRoZSBzaWduYWwgY2F0Y2hpbmcgZnVuY3Rpb24gd2l0aCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgdGhyZWUgYXJndW1lbnRzIGluc3RlYWQgb2Ygb25lLiAqLworCisvKiBzdHJ1Y3Qgc2lnYWN0aW9uIG5vdGVzIGZyb20gUE9TSVg6CisgKgorICogICgxKSBSb3V0aW5lcyBzdG9yZWQgaW4gc2FfaGFuZGxlciBzaG91bGQgdGFrZSBhIHNpbmdsZSBpbnQgYXMKKyAqICAgICAgdGhlaXIgYXJndW1lbnQgYWx0aG91Z2ggdGhlIFBPU0lYIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUgdGhpcy4KKyAqICAgICAgVGhpcyBpcyBub3QgbG9uZ2VyIHRydWUgc2luY2UgYXQgbGVhc3QgUE9TSVguMS0yMDA4CisgKiAgKDIpIFRoZSBmaWVsZHMgc2FfaGFuZGxlciBhbmQgc2Ffc2lnYWN0aW9uIG1heSBvdmVybGFwLCBhbmQgYSBjb25mb3JtaW5nCisgKiAgICAgIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgdXNlIGJvdGggc2ltdWx0YW5lb3VzbHkuCisgKi8KKwordHlwZWRlZiB2b2lkICgqX3NpZ19mdW5jX3B0cikoaW50KTsKKworc3RydWN0IHNpZ2FjdGlvbiB7CisgIGludCAgICAgICAgIHNhX2ZsYWdzOyAgICAgICAvKiBTcGVjaWFsIGZsYWdzIHRvIGFmZmVjdCBiZWhhdmlvciBvZiBzaWduYWwgKi8KKyAgc2lnc2V0X3QgICAgc2FfbWFzazsgICAgICAgIC8qIEFkZGl0aW9uYWwgc2V0IG9mIHNpZ25hbHMgdG8gYmUgYmxvY2tlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBkdXJpbmcgZXhlY3V0aW9uIG9mIHNpZ25hbC1jYXRjaGluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBmdW5jdGlvbi4gKi8KKyAgdW5pb24geworICAgIF9zaWdfZnVuY19wdHIgX2hhbmRsZXI7ICAvKiBTSUdfREZMLCBTSUdfSUdOLCBvciBwb2ludGVyIHRvIGEgZnVuY3Rpb24gKi8KKyNpZiBkZWZpbmVkKF9QT1NJWF9SRUFMVElNRV9TSUdOQUxTKQorICAgIHZvaWQgICAgICAoKl9zaWdhY3Rpb24pKCBpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICogKTsKKyNlbmRpZgorICB9IF9zaWduYWxfaGFuZGxlcnM7Cit9OworCisjZGVmaW5lIHNhX2hhbmRsZXIgICAgX3NpZ25hbF9oYW5kbGVycy5faGFuZGxlcgorI2lmIGRlZmluZWQoX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMpCisjZGVmaW5lIHNhX3NpZ2FjdGlvbiAgX3NpZ25hbF9oYW5kbGVycy5fc2lnYWN0aW9uCisjZW5kaWYKKworI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorI2luY2x1ZGUgPGN5Z3dpbi9zaWduYWwuaD4KKyNlbHNlCisjZGVmaW5lIFNBX05PQ0xEU1RPUCAxICAvKiBvbmx5IHZhbHVlIHN1cHBvcnRlZCBub3cgZm9yIHNhX2ZsYWdzICovCisKK3R5cGVkZWYgdm9pZCAoKl9zaWdfZnVuY19wdHIpKGludCk7CisKK3N0cnVjdCBzaWdhY3Rpb24gCit7CisJX3NpZ19mdW5jX3B0ciBzYV9oYW5kbGVyOworCXNpZ3NldF90IHNhX21hc2s7CisJaW50IHNhX2ZsYWdzOworfTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fcnRlbXNfXykgKi8KKworI2RlZmluZSBTSUdfU0VUTUFTSyAwCS8qIHNldCBtYXNrIHdpdGggc2lncHJvY21hc2soKSAqLworI2RlZmluZSBTSUdfQkxPQ0sgMQkvKiBzZXQgb2Ygc2lnbmFscyB0byBibG9jayAqLworI2RlZmluZSBTSUdfVU5CTE9DSyAyCS8qIHNldCBvZiBzaWduYWxzIHRvLCB3ZWxsLCB1bmJsb2NrICovCisKKy8qIFRoZXNlIGRlcGVuZCB1cG9uIHRoZSB0eXBlIG9mIHNpZ3NldF90LCB3aGljaCByaWdodCBub3cgCisgICBpcyBhbHdheXMgYSBsb25nLi4gVGhleSdyZSBpbiB0aGUgUE9TSVggbmFtZXNwYWNlLCBidXQKKyAgIGFyZSBub3QgQU5TSS4gKi8KKyNkZWZpbmUgc2lnYWRkc2V0KHdoYXQsc2lnKSAoKih3aGF0KSB8PSAoMTw8KHNpZykpLCAwKQorI2RlZmluZSBzaWdkZWxzZXQod2hhdCxzaWcpICgqKHdoYXQpICY9IH4oMTw8KHNpZykpLCAwKQorI2RlZmluZSBzaWdlbXB0eXNldCh3aGF0KSAgICgqKHdoYXQpID0gMCwgMCkKKyNkZWZpbmUgc2lnZmlsbHNldCh3aGF0KSAgICAoKih3aGF0KSA9IH4oMCksIDApCisjZGVmaW5lIHNpZ2lzbWVtYmVyKHdoYXQsc2lnKSAoKCgqKHdoYXQpKSAmICgxPDwoc2lnKSkpICE9IDApCisKK2ludCBfRVhGVU4oc2lncHJvY21hc2ssIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqc2V0LCBzaWdzZXRfdCAqb3NldCkpOworCisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEUykKK2ludCBfRVhGVU4ocHRocmVhZF9zaWdtYXNrLCAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9zZXQpKTsKKyNlbmRpZgorCisvKiBwcm90b3MgZm9yIGZ1bmN0aW9ucyBmb3VuZCBpbiB3aW5zdXAgc291cmNlcyBmb3IgQ1lHV0lOICovCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fcnRlbXNfXykKKyN1bmRlZiBzaWdhZGRzZXQKKyN1bmRlZiBzaWdkZWxzZXQKKyN1bmRlZiBzaWdlbXB0eXNldAorI3VuZGVmIHNpZ2ZpbGxzZXQKKyN1bmRlZiBzaWdpc21lbWJlcgorCisjaWZkZWYgX0NPTVBJTElOR19ORVdMSUIKK2ludCBfRVhGVU4oX2tpbGwsIChwaWRfdCwgaW50KSk7CisjZW5kaWYKK2ludCBfRVhGVU4oa2lsbCwgKHBpZF90LCBpbnQpKTsKK2ludCBfRVhGVU4oa2lsbHBnLCAocGlkX3QsIGludCkpOworaW50IF9FWEZVTihzaWdhY3Rpb24sIChpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKiwgc3RydWN0IHNpZ2FjdGlvbiAqKSk7CitpbnQgX0VYRlVOKHNpZ2FkZHNldCwgKHNpZ3NldF90ICosIGNvbnN0IGludCkpOworaW50IF9FWEZVTihzaWdkZWxzZXQsIChzaWdzZXRfdCAqLCBjb25zdCBpbnQpKTsKK2ludCBfRVhGVU4oc2lnaXNtZW1iZXIsIChjb25zdCBzaWdzZXRfdCAqLCBpbnQpKTsKK2ludCBfRVhGVU4oc2lnZmlsbHNldCwgKHNpZ3NldF90ICopKTsKK2ludCBfRVhGVU4oc2lnZW1wdHlzZXQsIChzaWdzZXRfdCAqKSk7CitpbnQgX0VYRlVOKHNpZ3BlbmRpbmcsIChzaWdzZXRfdCAqKSk7CitpbnQgX0VYRlVOKHNpZ3N1c3BlbmQsIChjb25zdCBzaWdzZXRfdCAqKSk7CitpbnQgX0VYRlVOKHNpZ3BhdXNlLCAoaW50KSk7CisKKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURTKQorI2lmZGVmIF9fQ1lHV0lOX18KKyMgIGlmbmRlZiBfQ1lHV0lOX1RZUEVTX0gKKyMgICAgZXJyb3IgWW91IG5lZWQgdGhlIHdpbnN1cCBzb3VyY2VzIG9yIGEgY3lnd2luIGluc3RhbGxhdGlvbiB0byBjb21waWxlIHRoZSBjeWd3aW4gdmVyc2lvbiBvZiBuZXdsaWIuCisjICBlbmRpZgorI2VuZGlmCitpbnQgX0VYRlVOKHB0aHJlYWRfa2lsbCwgKHB0aHJlYWRfdCB0aHJlYWQsIGludCBzaWcpKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfUE9TSVhfUkVBTFRJTUVfU0lHTkFMUykKKworLyogIDMuMy44IFN5bmNocm9ub3VzbHkgQWNjZXB0IGEgU2lnbmFsLCBQMTAwMy4xYi0xOTkzLCBwLiA3NgorICAgIE5PVEU6IFAxMDAzLjFjL0QxMCwgcC4gMzkgYWRkcyBzaWd3YWl0KCkuICAqLworCitpbnQgX0VYRlVOKHNpZ3dhaXRpbmZvLCAoY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnaW5mb190ICppbmZvKSk7CitpbnQgX0VYRlVOKHNpZ3RpbWVkd2FpdCwKKyAgKGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICAqdGltZW91dCkKKyk7CitpbnQgX0VYRlVOKHNpZ3dhaXQsIChjb25zdCBzaWdzZXRfdCAqc2V0LCBpbnQgKnNpZykpOworCisvKiAgMy4zLjkgUXVldWUgYSBTaWduYWwgdG8gYSBQcm9jZXNzLCBQMTAwMy4xYi0xOTkzLCBwLiA3OCAqLworaW50IF9FWEZVTihzaWdxdWV1ZSwgKHBpZF90IHBpZCwgaW50IHNpZ25vLCBjb25zdCB1bmlvbiBzaWd2YWwgdmFsdWUpKTsKKworI2VuZGlmIC8qIGRlZmluZWQoX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMpICovCisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19ydGVtc19fKSAqLworCisvKiAjZW5kaWYgX19TVFJJQ1RfQU5TSV9fICovCisKKyNpZiBkZWZpbmVkKF9fX0FNMjlLX18pCisvKiBUaGVzZSBhbGwgbmVlZCB0byBiZSBkZWZpbmVkIGZvciBBTlNJIEMsIGJ1dCBJIGRvbid0IHRoaW5rIHRoZXkgYXJlCisgICBtZWFuaW5nZnVsLiAgKi8KKyNkZWZpbmUgU0lHQUJSVCAxCisjZGVmaW5lIFNJR0ZQRSAxCisjZGVmaW5lIFNJR0lMTCAxCisjZGVmaW5lIFNJR0lOVCAxCisjZGVmaW5lIFNJR1NFR1YgMQorI2RlZmluZSBTSUdURVJNIDEKKy8qIFRoZXNlIG5lZWQgdG8gYmUgZGVmaW5lZCBmb3IgUE9TSVgsIGFuZCBzb21lIG90aGVycyBkbyB0b28uICAqLworI2RlZmluZSBTSUdIVVAgMQorI2RlZmluZSBTSUdRVUlUIDEKKyNkZWZpbmUgTlNJRyAyCisjZWxpZiBkZWZpbmVkKF9fR08zMl9fKQorI2RlZmluZSBTSUdJTlQgIDEKKyNkZWZpbmUgU0lHS0lMTCAyCisjZGVmaW5lIFNJR1BJUEUgMworI2RlZmluZSBTSUdGUEUgIDQKKyNkZWZpbmUgU0lHSFVQICA1CisjZGVmaW5lIFNJR1RFUk0gNgorI2RlZmluZSBTSUdTRUdWIDcKKyNkZWZpbmUgU0lHVFNUUCA4CisjZGVmaW5lIFNJR1FVSVQgOQorI2RlZmluZSBTSUdUUkFQIDEwCisjZGVmaW5lIFNJR0lMTCAgMTEKKyNkZWZpbmUgU0lHRU1UICAxMgorI2RlZmluZSBTSUdBTFJNIDEzCisjZGVmaW5lIFNJR0JVUyAgMTQKKyNkZWZpbmUgU0lHTE9TVCAxNQorI2RlZmluZSBTSUdTVE9QIDE2CisjZGVmaW5lIFNJR0FCUlQgMTcKKyNkZWZpbmUgU0lHVVNSMQkxOAorI2RlZmluZSBTSUdVU1IyCTE5CisjZGVmaW5lIE5TSUcgICAgMjAKKyNlbGlmICFkZWZpbmVkKFNJR1RSQVApCisjZGVmaW5lCVNJR0hVUAkxCS8qIGhhbmd1cCAqLworI2RlZmluZQlTSUdJTlQJMgkvKiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJU0lHUVVJVAkzCS8qIHF1aXQgKi8KKyNkZWZpbmUJU0lHSUxMCTQJLyogaWxsZWdhbCBpbnN0cnVjdGlvbiAobm90IHJlc2V0IHdoZW4gY2F1Z2h0KSAqLworI2RlZmluZQlTSUdUUkFQCTUJLyogdHJhY2UgdHJhcCAobm90IHJlc2V0IHdoZW4gY2F1Z2h0KSAqLworI2RlZmluZQlTSUdJT1QJNgkvKiBJT1QgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUJU0lHQUJSVCA2CS8qIHVzZWQgYnkgYWJvcnQsIHJlcGxhY2UgU0lHSU9UIGluIHRoZSBmdXR1cmUgKi8KKyNkZWZpbmUJU0lHRU1UCTcJLyogRU1UIGluc3RydWN0aW9uICovCisjZGVmaW5lCVNJR0ZQRQk4CS8qIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiAqLworI2RlZmluZQlTSUdLSUxMCTkJLyoga2lsbCAoY2Fubm90IGJlIGNhdWdodCBvciBpZ25vcmVkKSAqLworI2RlZmluZQlTSUdCVVMJMTAJLyogYnVzIGVycm9yICovCisjZGVmaW5lCVNJR1NFR1YJMTEJLyogc2VnbWVudGF0aW9uIHZpb2xhdGlvbiAqLworI2RlZmluZQlTSUdTWVMJMTIJLyogYmFkIGFyZ3VtZW50IHRvIHN5c3RlbSBjYWxsICovCisjZGVmaW5lCVNJR1BJUEUJMTMJLyogd3JpdGUgb24gYSBwaXBlIHdpdGggbm8gb25lIHRvIHJlYWQgaXQgKi8KKyNkZWZpbmUJU0lHQUxSTQkxNAkvKiBhbGFybSBjbG9jayAqLworI2RlZmluZQlTSUdURVJNCTE1CS8qIHNvZnR3YXJlIHRlcm1pbmF0aW9uIHNpZ25hbCBmcm9tIGtpbGwgKi8KKworI2lmIGRlZmluZWQoX19ydGVtc19fKQorI2RlZmluZQlTSUdVUkcJMTYJLyogdXJnZW50IGNvbmRpdGlvbiBvbiBJTyBjaGFubmVsICovCisjZGVmaW5lCVNJR1NUT1AJMTcJLyogc2VuZGFibGUgc3RvcCBzaWduYWwgbm90IGZyb20gdHR5ICovCisjZGVmaW5lCVNJR1RTVFAJMTgJLyogc3RvcCBzaWduYWwgZnJvbSB0dHkgKi8KKyNkZWZpbmUJU0lHQ09OVAkxOQkvKiBjb250aW51ZSBhIHN0b3BwZWQgcHJvY2VzcyAqLworI2RlZmluZQlTSUdDSExECTIwCS8qIHRvIHBhcmVudCBvbiBjaGlsZCBzdG9wIG9yIGV4aXQgKi8KKyNkZWZpbmUJU0lHQ0xECTIwCS8qIFN5c3RlbSBWIG5hbWUgZm9yIFNJR0NITEQgKi8KKyNkZWZpbmUJU0lHVFRJTgkyMQkvKiB0byByZWFkZXJzIHBncnAgdXBvbiBiYWNrZ3JvdW5kIHR0eSByZWFkICovCisjZGVmaW5lCVNJR1RUT1UJMjIJLyogbGlrZSBUVElOIGZvciBvdXRwdXQgaWYgKHRwLT50X2xvY2FsJkxUT1NUT1ApICovCisjZGVmaW5lCVNJR0lPCTIzCS8qIGlucHV0L291dHB1dCBwb3NzaWJsZSBzaWduYWwgKi8KKyNkZWZpbmUJU0lHUE9MTAlTSUdJTwkvKiBTeXN0ZW0gViBuYW1lIGZvciBTSUdJTyAqLworI2RlZmluZQlTSUdXSU5DSCAyNAkvKiB3aW5kb3cgY2hhbmdlZCAqLworI2RlZmluZQlTSUdVU1IxIDI1CS8qIHVzZXIgZGVmaW5lZCBzaWduYWwgMSAqLworI2RlZmluZQlTSUdVU1IyIDI2CS8qIHVzZXIgZGVmaW5lZCBzaWduYWwgMiAqLworCisvKiBSZWFsLVRpbWUgU2lnbmFscyBSYW5nZSwgUDEwMDMuMWItMTk5MywgcC4gNjEKKyAgIE5PVEU6IEJ5IFAxMDAzLjFiLTE5OTMsIHRoaXMgc2hvdWxkIGJlIGF0IGxlYXN0IFJUU0lHX01BWAorICAgICAgICAgKHdoaWNoIGlzIGEgbWluaW11bSBvZiA4KSBzaWduYWxzLgorICovCisjZGVmaW5lIFNJR1JUTUlOIDI3CisjZGVmaW5lIFNJR1JUTUFYIDMxCisjZGVmaW5lIF9fU0lHRklSU1ROT1RSVCBTSUdIVVAKKyNkZWZpbmUgX19TSUdMQVNUTk9UUlQgIFNJR1VTUjIKKworI2RlZmluZSBOU0lHCTMyICAgICAgLyogc2lnbmFsIDAgaW1wbGllZCAqLworCisjZWxpZiBkZWZpbmVkKF9fc3ZyNF9fKQorLyogc3ZyNCBzcGVjaWZpY3MuIGRpZmZlcmVudCBzaWduYWxzIGFib3ZlIDE1LCBhbmQgc2lnYWN0aW9uLiAqLworI2RlZmluZQlTSUdVU1IxCTE2CisjZGVmaW5lIFNJR1VTUjIJMTcKKyNkZWZpbmUgU0lHQ0xECTE4CisjZGVmaW5lCVNJR1BXUgkxOQorI2RlZmluZSBTSUdXSU5DSCAyMAorI2RlZmluZQlTSUdQT0xMCTIyCS8qIDIwIGZvciB4Lm91dCBiaW5hcmllcyEhISEgKi8KKyNkZWZpbmUJU0lHU1RPUAkyMwkvKiBzZW5kYWJsZSBzdG9wIHNpZ25hbCBub3QgZnJvbSB0dHkgKi8KKyNkZWZpbmUJU0lHVFNUUAkyNAkvKiBzdG9wIHNpZ25hbCBmcm9tIHR0eSAqLworI2RlZmluZQlTSUdDT05UCTI1CS8qIGNvbnRpbnVlIGEgc3RvcHBlZCBwcm9jZXNzICovCisjZGVmaW5lCVNJR1RUSU4JMjYJLyogdG8gcmVhZGVycyBwZ3JwIHVwb24gYmFja2dyb3VuZCB0dHkgcmVhZCAqLworI2RlZmluZQlTSUdUVE9VCTI3CS8qIGxpa2UgVFRJTiBmb3Igb3V0cHV0IGlmICh0cC0+dF9sb2NhbCZMVE9TVE9QKSAqLworI2RlZmluZSBOU0lHCTI4CQorI2Vsc2UKKyNkZWZpbmUJU0lHVVJHCTE2CS8qIHVyZ2VudCBjb25kaXRpb24gb24gSU8gY2hhbm5lbCAqLworI2RlZmluZQlTSUdTVE9QCTE3CS8qIHNlbmRhYmxlIHN0b3Agc2lnbmFsIG5vdCBmcm9tIHR0eSAqLworI2RlZmluZQlTSUdUU1RQCTE4CS8qIHN0b3Agc2lnbmFsIGZyb20gdHR5ICovCisjZGVmaW5lCVNJR0NPTlQJMTkJLyogY29udGludWUgYSBzdG9wcGVkIHByb2Nlc3MgKi8KKyNkZWZpbmUJU0lHQ0hMRAkyMAkvKiB0byBwYXJlbnQgb24gY2hpbGQgc3RvcCBvciBleGl0ICovCisjZGVmaW5lCVNJR0NMRAkyMAkvKiBTeXN0ZW0gViBuYW1lIGZvciBTSUdDSExEICovCisjZGVmaW5lCVNJR1RUSU4JMjEJLyogdG8gcmVhZGVycyBwZ3JwIHVwb24gYmFja2dyb3VuZCB0dHkgcmVhZCAqLworI2RlZmluZQlTSUdUVE9VCTIyCS8qIGxpa2UgVFRJTiBmb3Igb3V0cHV0IGlmICh0cC0+dF9sb2NhbCZMVE9TVE9QKSAqLworI2RlZmluZQlTSUdJTwkyMwkvKiBpbnB1dC9vdXRwdXQgcG9zc2libGUgc2lnbmFsICovCisjZGVmaW5lCVNJR1BPTEwJU0lHSU8JLyogU3lzdGVtIFYgbmFtZSBmb3IgU0lHSU8gKi8KKyNkZWZpbmUJU0lHWENQVQkyNAkvKiBleGNlZWRlZCBDUFUgdGltZSBsaW1pdCAqLworI2RlZmluZQlTSUdYRlNaCTI1CS8qIGV4Y2VlZGVkIGZpbGUgc2l6ZSBsaW1pdCAqLworI2RlZmluZQlTSUdWVEFMUk0gMjYJLyogdmlydHVhbCB0aW1lIGFsYXJtICovCisjZGVmaW5lCVNJR1BST0YJMjcJLyogcHJvZmlsaW5nIHRpbWUgYWxhcm0gKi8KKyNkZWZpbmUJU0lHV0lOQ0ggMjgJLyogd2luZG93IGNoYW5nZWQgKi8KKyNkZWZpbmUJU0lHTE9TVCAyOQkvKiByZXNvdXJjZSBsb3N0IChlZywgcmVjb3JkLWxvY2sgbG9zdCkgKi8KKyNkZWZpbmUJU0lHVVNSMSAzMAkvKiB1c2VyIGRlZmluZWQgc2lnbmFsIDEgKi8KKyNkZWZpbmUJU0lHVVNSMiAzMQkvKiB1c2VyIGRlZmluZWQgc2lnbmFsIDIgKi8KKyNkZWZpbmUgTlNJRwkzMiAgICAgIC8qIHNpZ25hbCAwIGltcGxpZWQgKi8KKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNpZm5kZWYgX1NJR05BTF9IXworLyogU29tZSBhcHBsaWNhdGlvbnMgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCA8c3lzL3NpZ25hbC5oPgorICogYW5kIDxzaWduYWwuaD4gYXJlIGVxdWl2YWxlbnQgaW4gZ2xpYmMuICBBbGxvdyBmb3IgdGhhdCBoZXJlLiAgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorI2VuZGlmIC8qIF9TWVNfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvc3RhdC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3YmNhYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvc3RhdC5oCkBAIC0wLDAgKzEsMTg1IEBACisjaWZuZGVmCV9TWVNfU1RBVF9ICisjZGVmaW5lCV9TWVNfU1RBVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPF9hbnNpLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBkaidzIHN0YXQgZGVmaW5lcyBfU1RBVF9IXyAqLworI2lmbmRlZiBfU1RBVF9IXworCisvKiBJdCBpcyBpbnRlbmRlZCB0aGF0IHRoZSBsYXlvdXQgb2YgdGhpcyBzdHJ1Y3R1cmUgbm90IGNoYW5nZSB3aGVuIHRoZQorICAgc2l6ZXMgb2YgYW55IG9mIHRoZSBiYXNpYyB0eXBlcyBjaGFuZ2UgKHNob3J0LCBpbnQsIGxvbmcpIFt2aWEgYSBjb21waWxlCisgICB0aW1lIG9wdGlvbl0uICAqLworCisjaWZkZWYgX19DWUdXSU5fXworI2luY2x1ZGUgPGN5Z3dpbi9zdGF0Lmg+CisjaWZkZWYgX0NPTVBJTElOR19ORVdMSUIKKyNkZWZpbmUgc3RhdDY0IHN0YXQKKyNlbmRpZgorI2Vsc2UKK3N0cnVjdAlzdGF0IAoreworICBkZXZfdAkJc3RfZGV2OworICBpbm9fdAkJc3RfaW5vOworICBtb2RlX3QJc3RfbW9kZTsKKyAgbmxpbmtfdAlzdF9ubGluazsKKyAgdWlkX3QJCXN0X3VpZDsKKyAgZ2lkX3QJCXN0X2dpZDsKKyAgZGV2X3QJCXN0X3JkZXY7CisgIG9mZl90CQlzdF9zaXplOworI2lmIGRlZmluZWQoX19ydGVtc19fKQorICBzdHJ1Y3QgdGltZXNwZWMgc3RfYXRpbTsKKyAgc3RydWN0IHRpbWVzcGVjIHN0X210aW07CisgIHN0cnVjdCB0aW1lc3BlYyBzdF9jdGltOworICBibGtzaXplX3QgICAgIHN0X2Jsa3NpemU7CisgIGJsa2NudF90CXN0X2Jsb2NrczsKKyNlbHNlCisgIC8qIFN5c1Yvc2NvIGRvZXNuJ3QgaGF2ZSB0aGUgcmVzdC4uLiBCdXQgU29sYXJpcywgZWFiaSBkb2VzLiAgKi8KKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSAmJiAhZGVmaW5lZChfX1BQQ19fKSAmJiAhZGVmaW5lZChfX3N1bl9fKQorICB0aW1lX3QJc3RfYXRpbWU7CisgIHRpbWVfdAlzdF9tdGltZTsKKyAgdGltZV90CXN0X2N0aW1lOworI2Vsc2UKKyAgdGltZV90CXN0X2F0aW1lOworICBsb25nCQlzdF9zcGFyZTE7CisgIHRpbWVfdAlzdF9tdGltZTsKKyAgbG9uZwkJc3Rfc3BhcmUyOworICB0aW1lX3QJc3RfY3RpbWU7CisgIGxvbmcJCXN0X3NwYXJlMzsKKyAgbG9uZwkJc3RfYmxrc2l6ZTsKKyAgbG9uZwkJc3RfYmxvY2tzOworICBsb25nCXN0X3NwYXJlNFsyXTsKKyNlbmRpZgorI2VuZGlmCit9OworCisjaWYgZGVmaW5lZChfX3J0ZW1zX18pCisjZGVmaW5lIHN0X2F0aW1lIHN0X2F0aW0udHZfc2VjCisjZGVmaW5lIHN0X2N0aW1lIHN0X2N0aW0udHZfc2VjCisjZGVmaW5lIHN0X210aW1lIHN0X210aW0udHZfc2VjCisjZW5kaWYKKworI2VuZGlmCisKKyNkZWZpbmUJX0lGTVQJCTAxNzAwMDAJLyogdHlwZSBvZiBmaWxlICovCisjZGVmaW5lCQlfSUZESVIJMDA0MDAwMAkvKiBkaXJlY3RvcnkgKi8KKyNkZWZpbmUJCV9JRkNIUgkwMDIwMDAwCS8qIGNoYXJhY3RlciBzcGVjaWFsICovCisjZGVmaW5lCQlfSUZCTEsJMDA2MDAwMAkvKiBibG9jayBzcGVjaWFsICovCisjZGVmaW5lCQlfSUZSRUcJMDEwMDAwMAkvKiByZWd1bGFyICovCisjZGVmaW5lCQlfSUZMTksJMDEyMDAwMAkvKiBzeW1ib2xpYyBsaW5rICovCisjZGVmaW5lCQlfSUZTT0NLCTAxNDAwMDAJLyogc29ja2V0ICovCisjZGVmaW5lCQlfSUZJRk8JMDAxMDAwMAkvKiBmaWZvICovCisKKyNkZWZpbmUgCVNfQkxLU0laRSAgMTAyNCAvKiBzaXplIG9mIGEgYmxvY2sgKi8KKworI2RlZmluZQlTX0lTVUlECQkwMDA0MDAwCS8qIHNldCB1c2VyIGlkIG9uIGV4ZWN1dGlvbiAqLworI2RlZmluZQlTX0lTR0lECQkwMDAyMDAwCS8qIHNldCBncm91cCBpZCBvbiBleGVjdXRpb24gKi8KKyNkZWZpbmUJU19JU1ZUWAkJMDAwMTAwMAkvKiBzYXZlIHN3YXBwZWQgdGV4dCBldmVuIGFmdGVyIHVzZSAqLworI2lmbmRlZglfUE9TSVhfU09VUkNFCisjZGVmaW5lCVNfSVJFQUQJCTAwMDA0MDAJLyogcmVhZCBwZXJtaXNzaW9uLCBvd25lciAqLworI2RlZmluZQlTX0lXUklURSAJMDAwMDIwMAkvKiB3cml0ZSBwZXJtaXNzaW9uLCBvd25lciAqLworI2RlZmluZQlTX0lFWEVDCQkwMDAwMTAwCS8qIGV4ZWN1dGUvc2VhcmNoIHBlcm1pc3Npb24sIG93bmVyICovCisjZGVmaW5lCVNfRU5GTVQgCTAwMDIwMDAJLyogZW5mb3JjZW1lbnQtbW9kZSBsb2NraW5nICovCisjZW5kaWYJLyogIV9QT1NJWF9TT1VSQ0UgKi8KKworI2RlZmluZQlTX0lGTVQJCV9JRk1UCisjZGVmaW5lCVNfSUZESVIJCV9JRkRJUgorI2RlZmluZQlTX0lGQ0hSCQlfSUZDSFIKKyNkZWZpbmUJU19JRkJMSwkJX0lGQkxLCisjZGVmaW5lCVNfSUZSRUcJCV9JRlJFRworI2RlZmluZQlTX0lGTE5LCQlfSUZMTksKKyNkZWZpbmUJU19JRlNPQ0sJX0lGU09DSworI2RlZmluZQlTX0lGSUZPCQlfSUZJRk8KKworI2lmZGVmIF9XSU4zMgorLyogVGhlIFdpbmRvd3MgaGVhZGVyIGZpbGVzIGRlZmluZSBfU18gZm9ybXMgb2YgdGhlc2UsIHNvIHdlIGRvIHRvbworICAgZm9yIGVhc2llciBwb3J0YWJpbGl0eS4gICovCisjZGVmaW5lIF9TX0lGTVQJCV9JRk1UCisjZGVmaW5lIF9TX0lGRElSCV9JRkRJUgorI2RlZmluZSBfU19JRkNIUglfSUZDSFIKKyNkZWZpbmUgX1NfSUZJRk8JX0lGSUZPCisjZGVmaW5lIF9TX0lGUkVHCV9JRlJFRworI2RlZmluZSBfU19JUkVBRAkwMDAwNDAwCisjZGVmaW5lIF9TX0lXUklURQkwMDAwMjAwCisjZGVmaW5lIF9TX0lFWEVDCTAwMDAxMDAKKyNlbmRpZgorCisjZGVmaW5lCVNfSVJXWFUgCShTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVhVU1IpCisjZGVmaW5lCQlTX0lSVVNSCTAwMDA0MDAJLyogcmVhZCBwZXJtaXNzaW9uLCBvd25lciAqLworI2RlZmluZQkJU19JV1VTUgkwMDAwMjAwCS8qIHdyaXRlIHBlcm1pc3Npb24sIG93bmVyICovCisjZGVmaW5lCQlTX0lYVVNSIDAwMDAxMDAvKiBleGVjdXRlL3NlYXJjaCBwZXJtaXNzaW9uLCBvd25lciAqLworI2RlZmluZQlTX0lSV1hHCQkoU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lYR1JQKQorI2RlZmluZQkJU19JUkdSUAkwMDAwMDQwCS8qIHJlYWQgcGVybWlzc2lvbiwgZ3JvdXAgKi8KKyNkZWZpbmUJCVNfSVdHUlAJMDAwMDAyMAkvKiB3cml0ZSBwZXJtaXNzaW9uLCBncm91Z3JvdXAgKi8KKyNkZWZpbmUJCVNfSVhHUlAgMDAwMDAxMC8qIGV4ZWN1dGUvc2VhcmNoIHBlcm1pc3Npb24sIGdyb3VwICovCisjZGVmaW5lCVNfSVJXWE8JCShTX0lST1RIIHwgU19JV09USCB8IFNfSVhPVEgpCisjZGVmaW5lCQlTX0lST1RICTAwMDAwMDQJLyogcmVhZCBwZXJtaXNzaW9uLCBvdGhlciAqLworI2RlZmluZQkJU19JV09USAkwMDAwMDAyCS8qIHdyaXRlIHBlcm1pc3Npb24sIG90aGVyICovCisjZGVmaW5lCQlTX0lYT1RIIDAwMDAwMDEvKiBleGVjdXRlL3NlYXJjaCBwZXJtaXNzaW9uLCBvdGhlciAqLworCisjaWZuZGVmIF9QT1NJWF9TT1VSQ0UKKyNkZWZpbmUgQUNDRVNTUEVSTVMgKFNfSVJXWFUgfCBTX0lSV1hHIHwgU19JUldYTykgLyogMDc3NyAqLworI2RlZmluZSBBTExQRVJNUyAoU19JU1VJRCB8IFNfSVNHSUQgfCBTX0lTVlRYIHwgU19JUldYVSB8IFNfSVJXWEcgfCBTX0lSV1hPKSAvKiAwNzc3NyAqLworI2RlZmluZSBERUZGSUxFTU9ERSAoU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBTX0lXT1RIKSAvKiAwNjY2ICovCisjZW5kaWYKKworI2RlZmluZQlTX0lTQkxLKG0pCSgoKG0pJl9JRk1UKSA9PSBfSUZCTEspCisjZGVmaW5lCVNfSVNDSFIobSkJKCgobSkmX0lGTVQpID09IF9JRkNIUikKKyNkZWZpbmUJU19JU0RJUihtKQkoKChtKSZfSUZNVCkgPT0gX0lGRElSKQorI2RlZmluZQlTX0lTRklGTyhtKQkoKChtKSZfSUZNVCkgPT0gX0lGSUZPKQorI2RlZmluZQlTX0lTUkVHKG0pCSgoKG0pJl9JRk1UKSA9PSBfSUZSRUcpCisjZGVmaW5lCVNfSVNMTksobSkJKCgobSkmX0lGTVQpID09IF9JRkxOSykKKyNkZWZpbmUJU19JU1NPQ0sobSkJKCgobSkmX0lGTVQpID09IF9JRlNPQ0spCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisvKiBTcGVjaWFsIHR2X25zZWMgdmFsdWVzIGZvciBmdXRpbWVucygyKSBhbmQgdXRpbWVuc2F0KDIpLiAqLworI2RlZmluZSBVVElNRV9OT1cJLTJMCisjZGVmaW5lIFVUSU1FX09NSVQJLTFMCisjZW5kaWYKKworaW50CV9FWEZVTihjaG1vZCwoIGNvbnN0IGNoYXIgKl9fcGF0aCwgbW9kZV90IF9fbW9kZSApKTsKK2ludCAgICAgX0VYRlVOKGZjaG1vZCwoaW50IF9fZmQsIG1vZGVfdCBfX21vZGUpKTsKK2ludAlfRVhGVU4oZnN0YXQsKCBpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9fc2J1ZiApKTsKK2ludAlfRVhGVU4obWtkaXIsKCBjb25zdCBjaGFyICpfcGF0aCwgbW9kZV90IF9fbW9kZSApKTsKK2ludAlfRVhGVU4obWtmaWZvLCggY29uc3QgY2hhciAqX19wYXRoLCBtb2RlX3QgX19tb2RlICkpOworaW50CV9FWEZVTihzdGF0LCggY29uc3QgY2hhciAqX19wYXRoLCBzdHJ1Y3Qgc3RhdCAqX19zYnVmICkpOworbW9kZV90CV9FWEZVTih1bWFzaywoIG1vZGVfdCBfX21hc2sgKSk7CisKKyNpZiBkZWZpbmVkIChfX1NQVV9fKSB8fCBkZWZpbmVkKF9fcnRlbXNfXykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChfX0lOU0lERV9DWUdXSU5fXykKK2ludAlfRVhGVU4obHN0YXQsKCBjb25zdCBjaGFyICpfX3BhdGgsIHN0cnVjdCBzdGF0ICpfX2J1ZiApKTsKK2ludAlfRVhGVU4obWtub2QsKCBjb25zdCBjaGFyICpfX3BhdGgsIG1vZGVfdCBfX21vZGUsIGRldl90IF9fZGV2ICkpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChfX0lOU0lERV9DWUdXSU5fXykKK2ludAlfRVhGVU4oZmNobW9kYXQsIChpbnQsIGNvbnN0IGNoYXIgKiwgbW9kZV90LCBpbnQpKTsKK2ludAlfRVhGVU4oZnN0YXRhdCwgKGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpKTsKK2ludAlfRVhGVU4obWtkaXJhdCwgKGludCwgY29uc3QgY2hhciAqLCBtb2RlX3QpKTsKK2ludAlfRVhGVU4obWtmaWZvYXQsIChpbnQsIGNvbnN0IGNoYXIgKiwgbW9kZV90KSk7CitpbnQJX0VYRlVOKG1rbm9kYXQsIChpbnQsIGNvbnN0IGNoYXIgKiwgbW9kZV90LCBkZXZfdCkpOworaW50CV9FWEZVTih1dGltZW5zYXQsIChpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIGludCkpOworaW50CV9FWEZVTihmdXRpbWVucywgKGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopKTsKKyNlbmRpZgorCisvKiBQcm92aWRlIHByb3RvdHlwZXMgZm9yIG1vc3Qgb2YgdGhlIF88c3lzdGVtY2FsbD4gbmFtZXMgdGhhdCBhcmUKKyAgIHByb3ZpZGVkIGluIG5ld2xpYiBmb3Igc29tZSBjb21waWxlcnMuICAqLworI2lmZGVmIF9DT01QSUxJTkdfTkVXTElCCitpbnQJX0VYRlVOKF9mc3RhdCwoIGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19zYnVmICkpOworaW50CV9FWEZVTihfc3RhdCwoIGNvbnN0IGNoYXIgKl9fcGF0aCwgc3RydWN0IHN0YXQgKl9fc2J1ZiApKTsKK2ludAlfRVhGVU4oX21rZGlyLCggY29uc3QgY2hhciAqX3BhdGgsIG1vZGVfdCBfX21vZGUgKSk7CisjaWZkZWYgX19MQVJHRTY0X0ZJTEVTCitzdHJ1Y3Qgc3RhdDY0OworaW50CV9FWEZVTihfc3RhdDY0LCggY29uc3QgY2hhciAqX19wYXRoLCBzdHJ1Y3Qgc3RhdDY0ICpfX3NidWYgKSk7CitpbnQJX0VYRlVOKF9mc3RhdDY0LCggaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9fc2J1ZiApKTsKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiAhX1NUQVRfSF8gKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX1NZU19TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvc3RkaW8uaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvc3RkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTE4ZmUxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy9zdGRpby5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX05FV0xJQl9TVERJT19ICisjZGVmaW5lIF9ORVdMSUJfU1RESU9fSAorCisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvcmVlbnQuaD4KKworLyogSW50ZXJuYWwgbG9ja2luZyBtYWNyb3MsIHVzZWQgdG8gcHJvdGVjdCBzdGRpbyBmdW5jdGlvbnMuICBJbiB0aGUKKyAgIGdlbmVyYWwgY2FzZSwgZXhwYW5kIHRvIG5vdGhpbmcuIFVzZSBfX1NTVFIgZmxhZyBpbiBGSUxFIF9mbGFncyB0bworICAgZGV0ZWN0IGlmIEZJTEUgaXMgcHJpdmF0ZSB0byBzcHJpbnRmL3NzY2FuZiBjbGFzcyBvZiBmdW5jdGlvbnM7IGlmCisgICBzZXQgdGhlbiBkbyBub3RoaW5nIGFzIGxvY2sgaXMgbm90IGluaXRpYWxpc2VkLiAqLworI2lmICFkZWZpbmVkKF9mbG9ja2ZpbGUpCisjaWZuZGVmIF9fU0lOR0xFX1RIUkVBRF9fCisjICBkZWZpbmUgX2Zsb2NrZmlsZShmcCkgKCgoZnApLT5fZmxhZ3MgJiBfX1NTVFIpID8gMCA6IF9fbG9ja19hY3F1aXJlX3JlY3Vyc2l2ZSgoZnApLT5fbG9jaykpCisjZWxzZQorIyAgZGVmaW5lIF9mbG9ja2ZpbGUoZnApCShfQ0FTVF9WT0lEIDApCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX2Z1bmxvY2tmaWxlKQorI2lmbmRlZiBfX1NJTkdMRV9USFJFQURfXworIyAgZGVmaW5lIF9mdW5sb2NrZmlsZShmcCkgKCgoZnApLT5fZmxhZ3MgJiBfX1NTVFIpID8gMCA6IF9fbG9ja19yZWxlYXNlX3JlY3Vyc2l2ZSgoZnApLT5fbG9jaykpCisjZWxzZQorIyAgZGVmaW5lIF9mdW5sb2NrZmlsZShmcCkJKF9DQVNUX1ZPSUQgMCkKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAvKiBfTkVXTElCX1NURElPX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvc3RyaW5nLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZWRmNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3N0cmluZy5oCkBAIC0wLDAgKzEsMiBAQAorLyogVGhpcyBpcyBhIGR1bW15IDxzeXMvc3RyaW5nLmg+IHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IKKyAgIHN5c3RlbXMgdGhhdCBuZWVkIHRvIGhhdmUgYSBzcGVjaWFsIGhlYWRlciBmaWxlLiAgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvc3lzbGltaXRzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3N5c2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWRiZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3N5c2xpbWl0cy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXN5c2xpbWl0cy5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICogJEZyZWVCU0Q6IHNyYy9zeXMvc3lzL3N5c2xpbWl0cy5oLHYgMS4xMCAyMDAxLzA2LzE4IDIwOjI0OjU0IHdvbGxtYW4gRXhwICQKKyAqLworCisjaWZuZGVmIF9TWVNfU1lTTElNSVRTX0hfCisjZGVmaW5lIF9TWVNfU1lTTElNSVRTX0hfCisKKyNkZWZpbmUJQVJHX01BWAkJCTY1NTM2CS8qIG1heCBieXRlcyBmb3IgYW4gZXhlYyBmdW5jdGlvbiAqLworI2lmbmRlZiBDSElMRF9NQVgKKyNkZWZpbmUJQ0hJTERfTUFYCQkgICA0MAkvKiBtYXggc2ltdWx0YW5lb3VzIHByb2Nlc3NlcyAqLworI2VuZGlmCisjZGVmaW5lCUxJTktfTUFYCQkzMjc2NwkvKiBtYXggZmlsZSBsaW5rIGNvdW50ICovCisjZGVmaW5lCU1BWF9DQU5PTgkJICAyNTUJLyogbWF4IGJ5dGVzIGluIHRlcm0gY2Fub24gaW5wdXQgbGluZSAqLworI2RlZmluZQlNQVhfSU5QVVQJCSAgMjU1CS8qIG1heCBieXRlcyBpbiB0ZXJtaW5hbCBpbnB1dCAqLworI2RlZmluZQlOQU1FX01BWAkJICAyNTUJLyogbWF4IGJ5dGVzIGluIGEgZmlsZSBuYW1lICovCisjZGVmaW5lCU5HUk9VUFNfTUFYCQkgICAxNgkvKiBtYXggc3VwcGxlbWVudGFsIGdyb3VwIGlkJ3MgKi8KKyNpZm5kZWYgT1BFTl9NQVgKKyNkZWZpbmUJT1BFTl9NQVgJCSAgIDY0CS8qIG1heCBvcGVuIGZpbGVzIHBlciBwcm9jZXNzICovCisjZW5kaWYKKyNkZWZpbmUJUEFUSF9NQVgJCSAxMDI0CS8qIG1heCBieXRlcyBpbiBwYXRobmFtZSAqLworI2RlZmluZQlQSVBFX0JVRgkJICA1MTIJLyogbWF4IGJ5dGVzIGZvciBhdG9taWMgcGlwZSB3cml0ZXMgKi8KKyNkZWZpbmUJSU9WX01BWAkJCSAxMDI0CS8qIG1heCBlbGVtZW50cyBpbiBpL28gdmVjdG9yICovCisKKyNkZWZpbmUJQkNfQkFTRV9NQVgJCSAgIDk5CS8qIG1heCBpYmFzZS9vYmFzZSB2YWx1ZXMgaW4gYmMoMSkgKi8KKyNkZWZpbmUJQkNfRElNX01BWAkJIDIwNDgJLyogbWF4IGFycmF5IGVsZW1lbnRzIGluIGJjKDEpICovCisjZGVmaW5lCUJDX1NDQUxFX01BWAkJICAgOTkJLyogbWF4IHNjYWxlIHZhbHVlIGluIGJjKDEpICovCisjZGVmaW5lCUJDX1NUUklOR19NQVgJCSAxMDAwCS8qIG1heCBjb25zdCBzdHJpbmcgbGVuZ3RoIGluIGJjKDEpICovCisjZGVmaW5lCUNPTExfV0VJR0hUU19NQVgJICAgIDAJLyogbWF4IHdlaWdodHMgZm9yIG9yZGVyIGtleXdvcmQgKi8KKyNkZWZpbmUJRVhQUl9ORVNUX01BWAkJICAgMzIJLyogbWF4IGV4cHJlc3Npb25zIG5lc3RlZCBpbiBleHByKDEpICovCisjZGVmaW5lCUxJTkVfTUFYCQkgMjA0OAkvKiBtYXggYnl0ZXMgaW4gYW4gaW5wdXQgbGluZSAqLworI2RlZmluZQlSRV9EVVBfTUFYCQkgIDI1NQkvKiBtYXggUkUncyBpbiBpbnRlcnZhbCBub3RhdGlvbiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdGltZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwZWY1NQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdGltZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qIHRpbWUuaCAtLSBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhbmRhcmQgVW5peCA8c3lzL3RpbWUuaD4gZmlsZS4KKyAgIFdyaXR0ZW4gYnkgR2VvZmZyZXkgTm9lciA8bm9lckBjeWdudXMuY29tPgorICAgUHVibGljIGRvbWFpbjsgbm8gcmlnaHRzIHJlc2VydmVkLiAqLworCisjaWZuZGVmIF9TWVNfVElNRV9IXworI2RlZmluZSBfU1lTX1RJTUVfSF8KKworI2luY2x1ZGUgPF9hbnNpLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBfVElNRVZBTF9ERUZJTkVECisjZGVmaW5lIF9USU1FVkFMX0RFRklORUQKK3N0cnVjdCB0aW1ldmFsIHsKKyAgdGltZV90ICAgICAgdHZfc2VjOworICBzdXNlY29uZHNfdCB0dl91c2VjOworfTsKKworLyogQlNEIHRpbWUgbWFjcm9zIHVzZWQgYnkgUlRFTVMgY29kZSAqLworI2lmIGRlZmluZWQgKF9fcnRlbXNfXykgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykKKworLyogQ29udmVuaWVuY2UgbWFjcm9zIGZvciBvcGVyYXRpb25zIG9uIHRpbWV2YWxzLgorICAgTk9URTogYHRpbWVyY21wJyBkb2VzIG5vdCB3b3JrIGZvciA+PSBvciA8PS4gICovCisjZGVmaW5lCXRpbWVyaXNzZXQodHZwKQkJKCh0dnApLT50dl9zZWMgfHwgKHR2cCktPnR2X3VzZWMpCisjZGVmaW5lCXRpbWVyY2xlYXIodHZwKQkJKCh0dnApLT50dl9zZWMgPSAodHZwKS0+dHZfdXNlYyA9IDApCisjZGVmaW5lCXRpbWVyY21wKGEsIGIsIENNUCkgCQkJCQkJICAgICAgXAorICAoKChhKS0+dHZfc2VjID09IChiKS0+dHZfc2VjKSA/IAkJCQkJICAgICAgXAorICAgKChhKS0+dHZfdXNlYyBDTVAgKGIpLT50dl91c2VjKSA6IAkJCQkJICAgICAgXAorICAgKChhKS0+dHZfc2VjIENNUCAoYiktPnR2X3NlYykpCisjZGVmaW5lCXRpbWVyYWRkKGEsIGIsIHJlc3VsdCkJCQkJCQkgICAgICBcCisgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgKHJlc3VsdCktPnR2X3NlYyA9IChhKS0+dHZfc2VjICsgKGIpLT50dl9zZWM7CQkJICAgICAgXAorICAgIChyZXN1bHQpLT50dl91c2VjID0gKGEpLT50dl91c2VjICsgKGIpLT50dl91c2VjOwkJCSAgICAgIFwKKyAgICBpZiAoKHJlc3VsdCktPnR2X3VzZWMgPj0gMTAwMDAwMCkJCQkJCSAgICAgIFwKKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisJKysocmVzdWx0KS0+dHZfc2VjOwkJCQkJCSAgICAgIFwKKwkocmVzdWx0KS0+dHZfdXNlYyAtPSAxMDAwMDAwOwkJCQkJICAgICAgXAorICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUJdGltZXJzdWIoYSwgYiwgcmVzdWx0KQkJCQkJCSAgICAgIFwKKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKyAgICAocmVzdWx0KS0+dHZfc2VjID0gKGEpLT50dl9zZWMgLSAoYiktPnR2X3NlYzsJCQkgICAgICBcCisgICAgKHJlc3VsdCktPnR2X3VzZWMgPSAoYSktPnR2X3VzZWMgLSAoYiktPnR2X3VzZWM7CQkJICAgICAgXAorICAgIGlmICgocmVzdWx0KS0+dHZfdXNlYyA8IDApIHsJCQkJCSAgICAgIFwKKyAgICAgIC0tKHJlc3VsdCktPnR2X3NlYzsJCQkJCQkgICAgICBcCisgICAgICAocmVzdWx0KS0+dHZfdXNlYyArPSAxMDAwMDAwOwkJCQkJICAgICAgXAorICAgIH0JCQkJCQkJCQkgICAgICBcCisgIH0gd2hpbGUgKDApCisjZW5kaWYgLyogZGVmaW5lZCAoX19ydGVtc19fKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKSAqLworI2VuZGlmIC8qICFfVElNRVZBTF9ERUZJTkVEICovCisKK3N0cnVjdCB0aW1lem9uZSB7CisgIGludCB0el9taW51dGVzd2VzdDsKKyAgaW50IHR6X2RzdHRpbWU7Cit9OworCisjaWZkZWYgX19DWUdXSU5fXworI2luY2x1ZGUgPGN5Z3dpbi9zeXNfdGltZS5oPgorI2VuZGlmIC8qIF9fQ1lHV0lOX18gKi8KKworI2RlZmluZSBJVElNRVJfUkVBTCAgICAgMAorI2RlZmluZSBJVElNRVJfVklSVFVBTCAgMQorI2RlZmluZSBJVElNRVJfUFJPRiAgICAgMgorCitzdHJ1Y3QgIGl0aW1lcnZhbCB7CisgIHN0cnVjdCAgdGltZXZhbCBpdF9pbnRlcnZhbDsKKyAgc3RydWN0ICB0aW1ldmFsIGl0X3ZhbHVlOworfTsKKworI2lmZGVmIF9DT01QSUxJTkdfTkVXTElCCitpbnQgX0VYRlVOKF9nZXR0aW1lb2ZkYXksIChzdHJ1Y3QgdGltZXZhbCAqX19wLCB2b2lkICpfX3R6KSk7CisjZW5kaWYKKworaW50IF9FWEZVTihnZXR0aW1lb2ZkYXksIChzdHJ1Y3QgdGltZXZhbCAqX19wLCB2b2lkICpfX3R6KSk7CitpbnQgX0VYRlVOKHNldHRpbWVvZmRheSwgKGNvbnN0IHN0cnVjdCB0aW1ldmFsICosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSAqKSk7CitpbnQgX0VYRlVOKHV0aW1lcywgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fdHZwKSk7CitpbnQgX0VYRlVOKGdldGl0aW1lciwgKGludCBfX3doaWNoLCBzdHJ1Y3QgaXRpbWVydmFsICpfX3ZhbHVlKSk7CitpbnQgX0VYRlVOKHNldGl0aW1lciwgKGludCBfX3doaWNoLCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpfX3ZhbHVlLAorCQkJCQlzdHJ1Y3QgaXRpbWVydmFsICpfX292YWx1ZSkpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIF9TWVNfVElNRV9IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy90aW1lYi5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy90aW1lYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmMzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3RpbWViLmgKQEAgLTAsMCArMSwzOSBAQAorLyogdGltZWIuaCAtLSBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhbmRhcmQgVW5peCA8c3lzL3RpbWViLmg+IGZpbGUuCisgICBXcml0dGVuIGJ5IElhbiBMYW5jZSBUYXlsb3IgPGlhbkBjeWdudXMuY29tPgorICAgUHVibGljIGRvbWFpbjsgbm8gcmlnaHRzIHJlc2VydmVkLgorCisgICA8c3lzL3RpbWViLmg+IGRlY2xhcmVzIHRoZSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgZnRpbWUgZnVuY3Rpb24sIGFzCisgICB3ZWxsIGFzIHRoZSBmdGltZSBmdW5jdGlvbiBpdHNlbGYuICBOZXdsaWIgZG9lcyBub3QgcHJvdmlkZSBhbgorICAgaW1wbGVtZW50YXRpb24gb2YgZnRpbWUuICAqLworCisjaWZuZGVmIF9TWVNfVElNRUJfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgX1NZU19USU1FQl9ICisKKyNpbmNsdWRlIDxfYW5zaS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvdHlwZXMuaD4KKworI2lmbmRlZiBfX3RpbWVfdF9kZWZpbmVkCit0eXBlZGVmIF9USU1FX1RfIHRpbWVfdDsKKyNkZWZpbmUgX190aW1lX3RfZGVmaW5lZAorI2VuZGlmCisKK3N0cnVjdCB0aW1lYgoreworICB0aW1lX3QgdGltZTsKKyAgdW5zaWduZWQgc2hvcnQgbWlsbGl0bTsKKyAgc2hvcnQgdGltZXpvbmU7CisgIHNob3J0IGRzdGZsYWc7Cit9OworCitleHRlcm4gaW50IGZ0aW1lIF9QQVJBTVMgKChzdHJ1Y3QgdGltZWIgKikpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogISBkZWZpbmVkIChfU1lTX1RJTUVCX0gpICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3RpbWVzLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3RpbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3ODEyYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdGltZXMuaApAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmCV9TWVNfVElNRVNfSAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2RlZmluZQlfU1lTX1RJTUVTX0gKKworI2luY2x1ZGUgPF9hbnNpLmg+CisjaW5jbHVkZSA8bWFjaGluZS90eXBlcy5oPgorCisjaWZuZGVmIF9fY2xvY2tfdF9kZWZpbmVkCit0eXBlZGVmIF9DTE9DS19UXyBjbG9ja190OworI2RlZmluZSBfX2Nsb2NrX3RfZGVmaW5lZAorI2VuZGlmCisKKy8qICBHZXQgUHJvY2VzcyBUaW1lcywgUDEwMDMuMWItMTk5MywgcC4gOTIgKi8KK3N0cnVjdCB0bXMgeworCWNsb2NrX3QJdG1zX3V0aW1lOwkJLyogdXNlciB0aW1lICovCisJY2xvY2tfdAl0bXNfc3RpbWU7CQkvKiBzeXN0ZW0gdGltZSAqLworCWNsb2NrX3QJdG1zX2N1dGltZTsJCS8qIHVzZXIgdGltZSwgY2hpbGRyZW4gKi8KKwljbG9ja190CXRtc19jc3RpbWU7CQkvKiBzeXN0ZW0gdGltZSwgY2hpbGRyZW4gKi8KK307CisKK2Nsb2NrX3QgX0VYRlVOKHRpbWVzLChzdHJ1Y3QgdG1zICopKTsKKyNpZmRlZiBfQ09NUElMSU5HX05FV0xJQgorY2xvY2tfdCBfRVhGVU4oX3RpbWVzLChzdHJ1Y3QgdG1zICopKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCS8qICFfU1lTX1RJTUVTX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdHlwZXMuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjI3Y2E5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy90eXBlcy5oCkBAIC0wLDAgKzEsNTEzIEBACisvKiB1bmlmaWVkIHN5cy90eXBlcy5oOiAKKyAgIHN0YXJ0IHdpdGggc2VmJ3Mgc3lzdmkzODYgdmVyc2lvbi4KKyAgIG1lcmdlIGdvMzIgdmVyc2lvbiAtLSBhIGZldyBpZmRlZnMuCisgICBoODMwMGhtcywgaDgzMDB4cmF5LCBhbmQgc3lzdm5lY3Y3MCBkaXNhZ3JlZSBvbiB0aGUgZm9sbG93aW5nIHR5cGVzOgorCisgICB0eXBlZGVmIGludCBnaWRfdDsKKyAgIHR5cGVkZWYgaW50IHVpZF90OworICAgdHlwZWRlZiBpbnQgZGV2X3Q7CisgICB0eXBlZGVmIGludCBpbm9fdDsKKyAgIHR5cGVkZWYgaW50IG1vZGVfdDsKKyAgIHR5cGVkZWYgaW50IGNhZGRyX3Q7CisKKyAgIGhvd2V2ZXIsIHRoZXNlIGFyZW4ndCAicmVhc29uYWJsZSIgdmFsdWVzLCB0aGUgc3lzdmkzODYgb25lcyBtYWtlIGZhciAKKyAgIG1vcmUgc2Vuc2UsIGFuZCBzaG91bGQgd29yayBzdWZmaWNpZW50bHkgd2VsbCAoaW4gcGFydGljdWxhciwgaDgzMDAgCisgICBkb2Vzbid0IGhhdmUgYSBzdGF0LCBhbmQgdGhlIG5lY3Y3MCBkb2Vzbid0IG1hdHRlci4pIC0tIGVpY2hpbgorICovCisKKyNpZm5kZWYgX1NZU19UWVBFU19ICisKKyNpbmNsdWRlIDxfYW5zaS5oPgorCisjaWZuZGVmIF9fSU5UVFlQRVNfREVGSU5FRF9fCisjZGVmaW5lIF9fSU5UVFlQRVNfREVGSU5FRF9fCisKKyNpbmNsdWRlIDxtYWNoaW5lL190eXBlcy5oPgorCisjaWYgZGVmaW5lZChfX3J0ZW1zX18pIHx8IGRlZmluZWQoX19YTUtfXykKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBzZWN0aW9uIGlzIFJURU1TIHNwZWNpZmljIGFuZCBpcyBuZWVkZWQgdG8gbW9yZQorICogIGNsb3NlbHkgbWF0Y2ggdGhlIHR5cGVzIGRlZmluZWQgaW4gdGhlIEJTRCBzeXMvdHlwZXMuaC4KKyAqICBUaGlzIGlzIG5lZWRlZCB0byBsZXQgdGhlIFJURU1TL0JTRCBUQ1AvSVAgc3RhY2sgY29tcGlsZS4KKyAqLworCisvKiBkZXByZWNhdGVkICovCisjaWYgX19faW50OF90X2RlZmluZWQKK3R5cGVkZWYgX191aW50OF90CXVfaW50OF90OworI2VuZGlmCisjaWYgX19faW50MTZfdF9kZWZpbmVkCit0eXBlZGVmIF9fdWludDE2X3QJdV9pbnQxNl90OworI2VuZGlmIAorI2lmIF9fX2ludDMyX3RfZGVmaW5lZAordHlwZWRlZiBfX3VpbnQzMl90CXVfaW50MzJfdDsKKyNlbmRpZgorCisjaWYgX19faW50NjRfdF9kZWZpbmVkCit0eXBlZGVmIF9fdWludDY0X3QJdV9pbnQ2NF90OworCisvKiBkZXByZWNhdGVkICovCit0eXBlZGVmCV9fdWludDY0X3QJdV9xdWFkX3Q7Cit0eXBlZGVmCV9faW50NjRfdAlxdWFkX3Q7Cit0eXBlZGVmCXF1YWRfdCAqCXFhZGRyX3Q7CisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiAhIF9fSU5UVFlQRVNfREVGSU5FRCAqLworCisjaWZuZGVmIF9fbmVlZF9pbnR0eXBlcworCisjZGVmaW5lIF9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKworI2lmZGVmIF9faTM4Nl9fCisjaWYgZGVmaW5lZCAoR08zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKQorI2RlZmluZSBfX01TX3R5cGVzX18KKyNlbmRpZgorI2VuZGlmCisKKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjIGluY2x1ZGUgPG1hY2hpbmUvdHlwZXMuaD4KKworLyogVG8gZW5zdXJlIHRoZSBzdGF0IHN0cnVjdCdzIGxheW91dCBkb2Vzbid0IGNoYW5nZSB3aGVuIHNpemVvZihpbnQpLCBldGMuCisgICBjaGFuZ2VzLCB3ZSBhc3N1bWUgc2l6ZW9mIHNob3J0IGFuZCBsb25nIG5ldmVyIGNoYW5nZSBhbmQgaGF2ZSBhbGwgdHlwZXMKKyAgIHVzZWQgdG8gZGVmaW5lIHN0cnVjdCBzdGF0IHVzZSB0aGVtIGFuZCBub3QgaW50IHdoZXJlIHBvc3NpYmxlLgorICAgV2hlcmUgbm90IHBvc3NpYmxlLCBfU1RfSU5UeHggYXJlIHVzZWQuICBJdCB3b3VsZCBiZSBwcmVmZXJhYmxlIHRvIG5vdCBoYXZlCisgICBzdWNoIGFzc3VtcHRpb25zLCBidXQgdW50aWwgdGhlIGV4dHJhIGZsdWZmIGlzIG5lY2Vzc2FyeSwgaXQncyBhdm9pZGVkLgorICAgTm8gNjQgYml0IHRhcmdldHMgdXNlIHN0YXQgeWV0LiAgV2hhdCB0byBkbyBhYm91dCB0aGVtIGlzIHBvc3Rwb25lZAorICAgdW50aWwgbmVjZXNzYXJ5LiAgKi8KKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfU1RfSU5UMzIgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSkKKyNlbHNlCisjZGVmaW5lIF9TVF9JTlQzMgorI2VuZGlmCisKKyMgaWZuZGVmCV9QT1NJWF9TT1VSQ0UKKworIyAgZGVmaW5lCXBoeXNhZHIJCXBoeXNhZHJfdAorIyAgZGVmaW5lCXF1YWQJCXF1YWRfdAorCisjaWZuZGVmIF9CU0RUWVBFU19ERUZJTkVECisvKiBhbHNvIGRlZmluZWQgaW4gbWluZ3cvZ21vbi5oIGFuZCBpbiB3MzJhcGkvd2luc29ja1syXS5oICovCisjaWZuZGVmIF9fdV9jaGFyX2RlZmluZWQKK3R5cGVkZWYJdW5zaWduZWQgY2hhcgl1X2NoYXI7CisjZGVmaW5lIF9fdV9jaGFyX2RlZmluZWQKKyNlbmRpZgorI2lmbmRlZiBfX3Vfc2hvcnRfZGVmaW5lZAordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAl1X3Nob3J0OworI2RlZmluZSBfX3Vfc2hvcnRfZGVmaW5lZAorI2VuZGlmCisjaWZuZGVmIF9fdV9pbnRfZGVmaW5lZAordHlwZWRlZgl1bnNpZ25lZCBpbnQJdV9pbnQ7CisjZGVmaW5lIF9fdV9pbnRfZGVmaW5lZAorI2VuZGlmCisjaWZuZGVmIF9fdV9sb25nX2RlZmluZWQKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwl1X2xvbmc7CisjZGVmaW5lIF9fdV9sb25nX2RlZmluZWQKKyNlbmRpZgorI2RlZmluZSBfQlNEVFlQRVNfREVGSU5FRAorI2VuZGlmCisKK3R5cGVkZWYJdW5zaWduZWQgc2hvcnQJdXNob3J0OwkJLyogU3lzdGVtIFYgY29tcGF0aWJpbGl0eSAqLwordHlwZWRlZgl1bnNpZ25lZCBpbnQJdWludDsJCS8qIFN5c3RlbSBWIGNvbXBhdGliaWxpdHkgKi8KK3R5cGVkZWYJdW5zaWduZWQgbG9uZwl1bG9uZzsJCS8qIFN5c3RlbSBWIGNvbXBhdGliaWxpdHkgKi8KKyMgZW5kaWYJLyohX1BPU0lYX1NPVVJDRSAqLworCisjaWZuZGVmIF9fY2xvY2tfdF9kZWZpbmVkCit0eXBlZGVmIF9DTE9DS19UXyBjbG9ja190OworI2RlZmluZSBfX2Nsb2NrX3RfZGVmaW5lZAorI2VuZGlmCisKKyNpZm5kZWYgX190aW1lX3RfZGVmaW5lZAordHlwZWRlZiBfVElNRV9UXyB0aW1lX3Q7CisjZGVmaW5lIF9fdGltZV90X2RlZmluZWQKKyNlbmRpZgorCisjaWZuZGVmIF9fdGltZXNwZWNfZGVmaW5lZAorI2RlZmluZSBfX3RpbWVzcGVjX2RlZmluZWQKKy8qIFRpbWUgVmFsdWUgU3BlY2lmaWNhdGlvbiBTdHJ1Y3R1cmVzLCBQMTAwMy4xYi0xOTkzLCBwLiAyNjEgKi8KKworc3RydWN0IHRpbWVzcGVjIHsKKyAgdGltZV90ICB0dl9zZWM7ICAgLyogU2Vjb25kcyAqLworICBsb25nICAgIHR2X25zZWM7ICAvKiBOYW5vc2Vjb25kcyAqLworfTsKKyNlbmRpZgorCitzdHJ1Y3QgaXRpbWVyc3BlYyB7CisgIHN0cnVjdCB0aW1lc3BlYyAgaXRfaW50ZXJ2YWw7ICAvKiBUaW1lciBwZXJpb2QgKi8KKyAgc3RydWN0IHRpbWVzcGVjICBpdF92YWx1ZTsgICAgIC8qIFRpbWVyIGV4cGlyYXRpb24gKi8KK307CisKKyNpZm5kZWYgX19kYWRkcl90X2RlZmluZWQKK3R5cGVkZWYJbG9uZwlkYWRkcl90OworI2RlZmluZSBfX2RhZGRyX3RfZGVmaW5lZAorI2VuZGlmCisjaWZuZGVmIF9fY2FkZHJfdF9kZWZpbmVkCit0eXBlZGVmCWNoYXIgKgljYWRkcl90OworI2RlZmluZSBfX2NhZGRyX3RfZGVmaW5lZAorI2VuZGlmCisKKyNpZm5kZWYgX19DWUdXSU5fXworI2lmIGRlZmluZWQoX19NU190eXBlc19fKSB8fCBkZWZpbmVkKF9fcnRlbXNfXykgfHwgXAorICAgIGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fU1BVX18pCit0eXBlZGVmCXVuc2lnbmVkIGxvbmcJaW5vX3Q7CisjZWxzZQordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlpbm9fdDsKKyNlbmRpZgorI2VuZGlmIC8qX19DWUdXSU5fXyovCisKKyNpZmRlZiBfX01TX3R5cGVzX18KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB2bV9vZmZzZXRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB2bV9zaXplX3Q7CisKKyNkZWZpbmUgX19CSVRfVFlQRVNfREVGSU5FRF9fCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X2ludDE2X3Q7Cit0eXBlZGVmIGludCBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90OwordHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfaW50NjRfdDsKK3R5cGVkZWYgaW50MzJfdCByZWdpc3Rlcl90OworI2VuZGlmIC8qIF9fTVNfdHlwZXNfXyAqLworCisvKgorICogQWxsIHRoZXNlIHNob3VsZCBiZSBtYWNoaW5lIHNwZWNpZmljIC0gcmlnaHQgbm93IHRoZXkgYXJlIGFsbCBicm9rZW4uCisgKiBIb3dldmVyLCBmb3IgYWxsIG9mIEN5Z251cycgZW1iZWRkZWQgdGFyZ2V0cywgd2Ugd2FudCB0aGVtIHRvIGFsbCBiZQorICogdGhlIHNhbWUuICBPdGhlcndpc2UgdGhpbmdzIGxpa2Ugc2l6ZW9mIChzdHJ1Y3Qgc3RhdCkgbWlnaHQgZGVwZW5kIG9uCisgKiBob3cgdGhlIGZpbGUgd2FzIGNvbXBpbGVkIChlLmcuIC1taW50MTYgdnMgLW1pbnQzMiwgZXRjLikuCisgKi8KKworI2lmbmRlZiBfX0NZR1dJTl9fCS8qIHdoaWNoIGRlZmluZXMgdGhlc2UgdHlwZXMgaW4gaXQncyBvd24gdHlwZXMuaC4gKi8KK3R5cGVkZWYgX29mZl90CW9mZl90OwordHlwZWRlZiBfX2Rldl90IGRldl90OwordHlwZWRlZiBfX3VpZF90IHVpZF90OwordHlwZWRlZiBfX2dpZF90IGdpZF90OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fWE1LX18pCit0eXBlZGVmIHNpZ25lZCBjaGFyIHBpZF90OworI2Vsc2UKK3R5cGVkZWYgaW50IHBpZF90OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fcnRlbXNfXykKK3R5cGVkZWYgX21vZGVfdCBtb2RlX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfX0NZR1dJTl9fCit0eXBlZGVmCWxvbmcga2V5X3Q7CisjZW5kaWYKK3R5cGVkZWYgX3NzaXplX3Qgc3NpemVfdDsKKworI2lmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKF9fcnRlbXNfXykKKyNpZmRlZiBfX01TX3R5cGVzX18KK3R5cGVkZWYJY2hhciAqCWFkZHJfdDsKK3R5cGVkZWYgaW50IG1vZGVfdDsKKyNlbHNlCisjaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiAhZGVmaW5lZCAoX19zcGFyY192OV9fKQorI2lmZGVmIF9fc3ZyNF9fCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW9kZV90OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OworI2VuZGlmCisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBpbnQgbW9kZV90IF9TVF9JTlQzMjsKKyNlbmRpZgorI2VuZGlmIC8qICEgX19NU190eXBlc19fICovCisjZW5kaWYgLypfX0NZR1dJTl9fKi8KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBubGlua190OworCisvKiBXZSBkb24ndCBkZWZpbmUgZmRfc2V0IGFuZCBmcmllbmRzIGlmIHdlIGFyZSBjb21waWxpbmcgUE9TSVgKKyAgIHNvdXJjZSwgb3IgaWYgd2UgaGF2ZSBpbmNsdWRlZCAob3IgbWF5IGluY2x1ZGUgYXMgaW5kaWNhdGVkCisgICBieSBfX1VTRV9XMzJfU09DS0VUUykgdGhlIFczMmFwaSB3aW5zb2NrWzJdLmggaGVhZGVyIHdoaWNoCisgICBkZWZpbmVzIFdpbmRvd3MgdmVyc2lvbnMgb2YgdGhlbS4gICBOb3RlIHRoYXQgYSBwcm9ncmFtIHdoaWNoCisgICBpbmNsdWRlcyB0aGUgVzMyYXBpIHdpbnNvY2tbMl0uaCBoZWFkZXIgbXVzdCBrbm93IHdoYXQgaXQgaXMgZG9pbmc7CisgICBpdCBtdXN0IG5vdCBjYWxsIHRoZSBjeWd3aW4zMiBzZWxlY3QgZnVuY3Rpb24uCisqLworIyBpZiAhKGRlZmluZWQgKF9QT1NJWF9TT1VSQ0UpIHx8IGRlZmluZWQgKF9XSU5TT0NLX0gpIHx8IGRlZmluZWQgKF9XSU5TT0NLQVBJXykgfHwgZGVmaW5lZCAoX19VU0VfVzMyX1NPQ0tFVFMpKSAKKyMgIGRlZmluZSBfU1lTX1RZUEVTX0ZEX1NFVAorIyAgZGVmaW5lCU5CQlkJOAkJLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlICovCisvKgorICogU2VsZWN0IHVzZXMgYml0IG1hc2tzIG9mIGZpbGUgZGVzY3JpcHRvcnMgaW4gbG9uZ3MuCisgKiBUaGVzZSBtYWNyb3MgbWFuaXB1bGF0ZSBzdWNoIGJpdCBmaWVsZHMgKHRoZSBmaWxlc3lzdGVtIG1hY3JvcyB1c2UgY2hhcnMpLgorICogRkRfU0VUU0laRSBtYXkgYmUgZGVmaW5lZCBieSB0aGUgdXNlciwgYnV0IHRoZSBkZWZhdWx0IGhlcmUKKyAqIHNob3VsZCBiZSA+PSBOT0ZJTEUgKHBhcmFtLmgpLgorICovCisjICBpZm5kZWYJRkRfU0VUU0laRQorIwlkZWZpbmUJRkRfU0VUU0laRQk2NAorIyAgZW5kaWYKKwordHlwZWRlZglsb25nCWZkX21hc2s7CisjICBkZWZpbmUJTkZEQklUUwkoc2l6ZW9mIChmZF9tYXNrKSAqIE5CQlkpCS8qIGJpdHMgcGVyIG1hc2sgKi8KKyMgIGlmbmRlZglob3dtYW55CisjCWRlZmluZQlob3dtYW55KHgseSkJKCgoeCkrKCh5KS0xKSkvKHkpKQorIyAgZW5kaWYKKworLyogV2UgdXNlIGEgbWFjcm8gZm9yIGZkX3NldCBzbyB0aGF0IGluY2x1ZGluZyBTb2NrZXRzLmggYWZ0ZXJ3YXJkcworICAgY2FuIHdvcmsuICAqLwordHlwZWRlZglzdHJ1Y3QgX3R5cGVzX2ZkX3NldCB7CisJZmRfbWFzawlmZHNfYml0c1tob3dtYW55KEZEX1NFVFNJWkUsIE5GREJJVFMpXTsKK30gX3R5cGVzX2ZkX3NldDsKKworI2RlZmluZSBmZF9zZXQgX3R5cGVzX2ZkX3NldAorCisjICBkZWZpbmUJRkRfU0VUKG4sIHApCSgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSB8PSAoMUwgPDwgKChuKSAlIE5GREJJVFMpKSkKKyMgIGRlZmluZQlGRF9DTFIobiwgcCkJKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICY9IH4oMUwgPDwgKChuKSAlIE5GREJJVFMpKSkKKyMgIGRlZmluZQlGRF9JU1NFVChuLCBwKQkoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAoMUwgPDwgKChuKSAlIE5GREJJVFMpKSkKKyMgIGRlZmluZQlGRF9aRVJPKHApCShfX2V4dGVuc2lvbl9fICh2b2lkKSh7IFwKKyAgICAgc2l6ZV90IF9faTsgXAorICAgICBjaGFyICpfX3RtcCA9IChjaGFyICopcDsgXAorICAgICBmb3IgKF9faSA9IDA7IF9faSA8IHNpemVvZiAoKihwKSk7ICsrX19pKSBcCisgICAgICAgKl9fdG1wKysgPSAwOyBcCit9KSkKKworIyBlbmRpZgkvKiAhKGRlZmluZWQgKF9QT1NJWF9TT1VSQ0UpIHx8IGRlZmluZWQgKF9XSU5TT0NLX0gpIHx8IGRlZmluZWQgKF9XSU5TT0NLQVBJXykgfHwgZGVmaW5lZCAoX19VU0VfVzMyX1NPQ0tFVFMpKSAqLworCisjdW5kZWYgX19NU190eXBlc19fCisjdW5kZWYgX1NUX0lOVDMyCisKKworI2lmbmRlZiBfX2Nsb2NraWRfdF9kZWZpbmVkCit0eXBlZGVmIF9DTE9DS0lEX1RfIGNsb2NraWRfdDsKKyNkZWZpbmUgX19jbG9ja2lkX3RfZGVmaW5lZAorI2VuZGlmCisKKyNpZm5kZWYgX190aW1lcl90X2RlZmluZWQKK3R5cGVkZWYgX1RJTUVSX1RfIHRpbWVyX3Q7CisjZGVmaW5lIF9fdGltZXJfdF9kZWZpbmVkCisjZW5kaWYKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVzZWNvbmRzX3Q7Cit0eXBlZGVmIGxvbmcgc3VzZWNvbmRzX3Q7CisKKyNpbmNsdWRlIDxzeXMvZmVhdHVyZXMuaD4KKworCisvKiBDeWd3aW4gd2lsbCBwcm9iYWJseSBuZXZlciBoYXZlIGZ1bGwgcG9zaXggY29tcGxpYW5jZSBkdWUgdG8gbGl0dGxlIHRoaW5ncworICogbGlrZSBhbiBpbmFiaWxpdHkgdG8gc2V0IHRoZSBzdGFja2FkZHJlc3MuIEN5Z3dpbiBpcyBhbHNvIHVzaW5nIHZvaWQgKiAgCisgKiBwb2ludGVycyByYXRoZXIgdGhhbiBzdHJ1Y3RzIHRvIGVuc3VyZSBtYXhpbXVtIGJpbmFyeSBjb21wYXRhYmlsaXR5IHdpdGgKKyAqIHByZXZpb3VzIHJlbGVhc2VzLgorICogVGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IHVzZSB0aGUgdHlwZXMgZGVmaW5lZCBoZXJlLCBidXQgcmF0aGVyIGluCisgKiA8Y3lnd2luL3R5cGVzLmg+CisgKi8KKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURTKSAmJiAhZGVmaW5lZChfX0NZR1dJTl9fKQorCisjaW5jbHVkZSA8c3lzL3NjaGVkLmg+CisKKy8qCisgKiAgMi41IFByaW1pdGl2ZSBTeXN0ZW0gRGF0YSBUeXBlcywgIFAxMDAzLjFjL0QxMCwgcC4gMTkuCisgKi8KKworI2lmIGRlZmluZWQoX19YTUtfXykKK3R5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfdDsgICAgICAgICAgLyogaWRlbnRpZnkgYSB0aHJlYWQgKi8KKyNlbHNlCit0eXBlZGVmIF9fdWludDMyX3QgcHRocmVhZF90OyAgICAgICAgICAgIC8qIGlkZW50aWZ5IGEgdGhyZWFkICovCisjZW5kaWYKKworLyogUDEwMDMuMWMvRDEwLCBwLiAxMTgtMTE5ICovCisjZGVmaW5lIFBUSFJFQURfU0NPUEVfUFJPQ0VTUyAwCisjZGVmaW5lIFBUSFJFQURfU0NPUEVfU1lTVEVNICAxCisKKy8qIFAxMDAzLjFjL0QxMCwgcC4gMTExICovCisjZGVmaW5lIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCAgMSAgICAgIC8qIHNjaGVkdWxpbmcgcG9saWN5IGFuZCBhc3NvY2lhdGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgYXR0cmlidXRlcyBhcmUgaW5oZXJpdGVkIGZyb20gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICB0aGUgY2FsbGluZyB0aHJlYWQuICovCisjZGVmaW5lIFBUSFJFQURfRVhQTElDSVRfU0NIRUQgMiAgICAgIC8qIHNldCBmcm9tIHByb3ZpZGVkIGF0dHJpYnV0ZSBvYmplY3QgKi8KKworLyogUDEwMDMuMWMvRDEwLCBwLiAxNDEgKi8KKyNkZWZpbmUgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQgMAorI2RlZmluZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSAgMQorCisjaWYgZGVmaW5lZChfX1hNS19fKQordHlwZWRlZiBzdHJ1Y3QgcHRocmVhZF9hdHRyX3MgeworICBpbnQgY29udGVudGlvbnNjb3BlOworICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gc2NoZWRwYXJhbTsKKyAgaW50ICBkZXRhY2hzdGF0ZTsKKyAgdm9pZCAqc3RhY2thZGRyOworICBzaXplX3Qgc3RhY2tzaXplOworfSBwdGhyZWFkX2F0dHJfdDsKKworI2RlZmluZSBQVEhSRUFEX1NUQUNLX01JTiAgICAgICAyMDAKKworI2Vsc2UgLyogIWRlZmluZWQoX19YTUtfXykgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGlzX2luaXRpYWxpemVkOworICB2b2lkICpzdGFja2FkZHI7CisgIGludCBzdGFja3NpemU7CisgIGludCBjb250ZW50aW9uc2NvcGU7CisgIGludCBpbmhlcml0c2NoZWQ7CisgIGludCBzY2hlZHBvbGljeTsKKyAgc3RydWN0IHNjaGVkX3BhcmFtIHNjaGVkcGFyYW07CisjaWYgZGVmaW5lZChfX3J0ZW1zX18pCisgIHNpemVfdCBndWFyZHNpemU7CisjZW5kaWYKKworICAvKiBQMTAwMy40Yi9EOCwgcC4gNTQgYWRkcyBjcHV0aW1lX2Nsb2NrX2FsbG93ZWQgYXR0cmlidXRlLiAgKi8KKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURfQ1BVVElNRSkKKyAgaW50ICBjcHV0aW1lX2Nsb2NrX2FsbG93ZWQ7ICAvKiBzZWUgdGltZS5oICovCisjZW5kaWYKKyAgaW50ICBkZXRhY2hzdGF0ZTsKKworfSBwdGhyZWFkX2F0dHJfdDsKKworI2VuZGlmIC8qICFkZWZpbmVkKF9fWE1LX18pICovCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURfUFJPQ0VTU19TSEFSRUQpCisvKiBOT1RFOiBQMTAwMy4xYy9EMTAsIHAuIDgxIGRlZmluZXMgZm9sbG93aW5nIHZhbHVlcyBmb3IgcHJvY2Vzc19zaGFyZWQuICAqLworCisjZGVmaW5lIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFIDAgLyogdmlzaWJsZSB3aXRoaW4gb25seSB0aGUgY3JlYXRpbmcgcHJvY2VzcyAqLworI2RlZmluZSBQVEhSRUFEX1BST0NFU1NfU0hBUkVEICAxIC8qIHZpc2libGUgdG9vIGFsbCBwcm9jZXNzZXMgd2l0aCBhY2Nlc3MgdG8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHRoZSBtZW1vcnkgd2hlcmUgdGhlIHJlc291cmNlIGlzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBsb2NhdGVkICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoX1BPU0lYX1RIUkVBRF9QUklPX1BST1RFQ1QpCisvKiBNdXRleGVzICovCisKKy8qIFZhbHVlcyBmb3IgYmxvY2tpbmcgcHJvdG9jb2wuICovCisKKyNkZWZpbmUgUFRIUkVBRF9QUklPX05PTkUgICAgMAorI2RlZmluZSBQVEhSRUFEX1BSSU9fSU5IRVJJVCAxCisjZGVmaW5lIFBUSFJFQURfUFJJT19QUk9URUNUIDIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfVU5JWDk4X1RIUkVBRF9NVVRFWF9BVFRSSUJVVEVTKQorCisvKiBWYWx1ZXMgZm9yIG11dGV4IHR5cGUgKi8KKworLyogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBwYXJ0IG9mIHRoZSBYL09wZW4gU3lzdGVtIEludGVyZmFjZSAoWFNJKS4gKi8KKworLyoKKyAqIFRoaXMgdHlwZSBvZiBtdXRleCBkb2VzIG5vdCBkZXRlY3QgZGVhZGxvY2suIEEgdGhyZWFkIGF0dGVtcHRpbmcgdG8KKyAqIHJlbG9jayB0aGlzIG11dGV4IHdpdGhvdXQgZmlyc3QgdW5sb2NraW5nIGl0IHNoYWxsIGRlYWRsb2NrLiBBdHRlbXB0aW5nCisgKiB0byB1bmxvY2sgYSBtdXRleCBsb2NrZWQgYnkgYSBkaWZmZXJlbnQgdGhyZWFkIHJlc3VsdHMgaW4gdW5kZWZpbmVkCisgKiBiZWhhdmlvci4gIEF0dGVtcHRpbmcgdG8gdW5sb2NrIGFuIHVubG9ja2VkIG11dGV4IHJlc3VsdHMgaW4gdW5kZWZpbmVkCisgKiBiZWhhdmlvci4KKyAqLworI2RlZmluZSBQVEhSRUFEX01VVEVYX05PUk1BTCAgICAgMAorCisvKgorICogQSB0aHJlYWQgYXR0ZW1wdGluZyB0byByZWxvY2sgdGhpcyBtdXRleCB3aXRob3V0IGZpcnN0IHVubG9ja2luZworICogaXQgc2hhbGwgc3VjY2VlZCBpbiBsb2NraW5nIHRoZSBtdXRleC4gIFRoZSByZWxvY2tpbmcgZGVhZGxvY2sgd2hpY2gKKyAqIGNhbiBvY2N1ciB3aXRoIG11dGV4ZXMgb2YgdHlwZSBQVEhSRUFEX01VVEVYX05PUk1BTCBjYW5ub3Qgb2NjdXIgd2l0aAorICogdGhpcyB0eXBlIG9mIG11dGV4LiAgTXVsdGlwbGUgbG9ja3Mgb2YgdGhpcyBtdXRleCBzaGFsbCByZXF1aXJlIHRoZQorICogc2FtZSBudW1iZXIgb2YgdW5sb2NrcyB0byByZWxlYXNlIHRoZSBtdXRleCBiZWZvcmUgYW5vdGhlciB0aHJlYWQgY2FuCisgKiBhY3F1aXJlIHRoZSBtdXRleC4gQSB0aHJlYWQgYXR0ZW1wdGluZyB0byB1bmxvY2sgYSBtdXRleCB3aGljaCBhbm90aGVyCisgKiB0aHJlYWQgaGFzIGxvY2tlZCBzaGFsbCByZXR1cm4gd2l0aCBhbiBlcnJvci4gIEEgdGhyZWFkIGF0dGVtcHRpbmcgdG8KKyAqIHVubG9jayBhbiB1bmxvY2tlZCBtdXRleCBzaGFsbCByZXR1cm4gd2l0aCBhbiBlcnJvci4KKyAqLworI2RlZmluZSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSAgMQorCisvKiAKKyAqIFRoaXMgdHlwZSBvZiBtdXRleCBwcm92aWRlcyBlcnJvciBjaGVja2luZy4gQSB0aHJlYWQgYXR0ZW1wdGluZworICogdG8gcmVsb2NrIHRoaXMgbXV0ZXggd2l0aG91dCBmaXJzdCB1bmxvY2tpbmcgaXQgc2hhbGwgcmV0dXJuIHdpdGggYW4KKyAqIGVycm9yLiBBIHRocmVhZCBhdHRlbXB0aW5nIHRvIHVubG9jayBhIG11dGV4IHdoaWNoIGFub3RoZXIgdGhyZWFkIGhhcworICogbG9ja2VkIHNoYWxsIHJldHVybiB3aXRoIGFuIGVycm9yLiBBIHRocmVhZCBhdHRlbXB0aW5nIHRvIHVubG9jayBhbgorICogdW5sb2NrZWQgbXV0ZXggc2hhbGwgcmV0dXJuIHdpdGggYW4gZXJyb3IuCisgKi8KKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLIDIKKworLyoKKyAqIEF0dGVtcHRpbmcgdG8gcmVjdXJzaXZlbHkgbG9jayBhIG11dGV4IG9mIHRoaXMgdHlwZSByZXN1bHRzCisgKiBpbiB1bmRlZmluZWQgYmVoYXZpb3IuIEF0dGVtcHRpbmcgdG8gdW5sb2NrIGEgbXV0ZXggb2YgdGhpcyB0eXBlCisgKiB3aGljaCB3YXMgbm90IGxvY2tlZCBieSB0aGUgY2FsbGluZyB0aHJlYWQgcmVzdWx0cyBpbiB1bmRlZmluZWQKKyAqIGJlaGF2aW9yLiBBdHRlbXB0aW5nIHRvIHVubG9jayBhIG11dGV4IG9mIHRoaXMgdHlwZSB3aGljaCBpcyBub3QgbG9ja2VkCisgKiByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvci4gQW4gaW1wbGVtZW50YXRpb24gbWF5IG1hcCB0aGlzIG11dGV4IHRvCisgKiBvbmUgb2YgdGhlIG90aGVyIG11dGV4IHR5cGVzLgorICovCisjZGVmaW5lIFBUSFJFQURfTVVURVhfREVGQVVMVCAgICAzCisKKyNlbmRpZiAvKiAhZGVmaW5lZChfVU5JWDk4X1RIUkVBRF9NVVRFWF9BVFRSSUJVVEVTKSAqLworCisjaWYgZGVmaW5lZChfX1hNS19fKQordHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9tdXRleF90OyAgICAvKiBpZGVudGlmeSBhIG11dGV4ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IHR5cGU7Cit9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CisKKyNlbHNlIC8qICFkZWZpbmVkKF9fWE1LX18pICovCit0eXBlZGVmIF9fdWludDMyX3QgcHRocmVhZF9tdXRleF90OyAgICAgIC8qIGlkZW50aWZ5IGEgbXV0ZXggKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgICBpc19pbml0aWFsaXplZDsKKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURfUFJPQ0VTU19TSEFSRUQpCisgIGludCAgIHByb2Nlc3Nfc2hhcmVkOyAgLyogYWxsb3cgbXV0ZXggdG8gYmUgc2hhcmVkIGFtb25nc3QgcHJvY2Vzc2VzICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURfUFJJT19QUk9URUNUKQorICBpbnQgICBwcmlvX2NlaWxpbmc7CisgIGludCAgIHByb3RvY29sOworI2VuZGlmCisjaWYgZGVmaW5lZChfVU5JWDk4X1RIUkVBRF9NVVRFWF9BVFRSSUJVVEVTKQorICBpbnQgdHlwZTsKKyNlbmRpZgorICBpbnQgICByZWN1cnNpdmU7Cit9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CisjZW5kaWYgLyogIWRlZmluZWQoX19YTUtfXykgKi8KKworLyogQ29uZGl0aW9uIFZhcmlhYmxlcyAqLworCit0eXBlZGVmIF9fdWludDMyX3QgcHRocmVhZF9jb25kX3Q7ICAgICAgIC8qIGlkZW50aWZ5IGEgY29uZGl0aW9uIHZhcmlhYmxlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50ICAgaXNfaW5pdGlhbGl6ZWQ7CisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVEKQorICBpbnQgICBwcm9jZXNzX3NoYXJlZDsgICAgICAgLyogYWxsb3cgdGhpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBwcm9jZXNzZXMgKi8KKyNlbmRpZgorfSBwdGhyZWFkX2NvbmRhdHRyX3Q7ICAgICAgICAgLyogYSBjb25kaXRpb24gYXR0cmlidXRlIG9iamVjdCAqLworCisvKiBLZXlzICovCisKK3R5cGVkZWYgX191aW50MzJfdCBwdGhyZWFkX2tleV90OyAgICAgICAgLyogdGhyZWFkLXNwZWNpZmljIGRhdGEga2V5cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAgIGlzX2luaXRpYWxpemVkOyAgLyogaXMgdGhpcyBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQ/ICovCisgIGludCAgIGluaXRfZXhlY3V0ZWQ7ICAgLyogaGFzIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGJlZW4gcnVuPyAqLworfSBwdGhyZWFkX29uY2VfdDsgICAgICAgLyogZHluYW1pYyBwYWNrYWdlIGluaXRpYWxpemF0aW9uICovCisjZWxzZQorI2lmIGRlZmluZWQgKF9fQ1lHV0lOX18pCisjaW5jbHVkZSA8Y3lnd2luL3R5cGVzLmg+CisjZW5kaWYKKyNlbmRpZiAvKiBkZWZpbmVkKF9QT1NJWF9USFJFQURTKSAqLworCisvKiBQT1NJWCBCYXJyaWVyIFR5cGVzICovCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9CQVJSSUVSUykKK3R5cGVkZWYgX191aW50MzJfdCBwdGhyZWFkX2JhcnJpZXJfdDsgICAgICAgIC8qIFBPU0lYIEJhcnJpZXIgT2JqZWN0ICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAgIGlzX2luaXRpYWxpemVkOyAgLyogaXMgdGhpcyBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQ/ICovCisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVEKQorICBpbnQgICBwcm9jZXNzX3NoYXJlZDsgICAgICAgLyogYWxsb3cgdGhpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBwcm9jZXNzZXMgKi8KKyNlbmRpZgorfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7CisjZW5kaWYgLyogZGVmaW5lZChfUE9TSVhfQkFSUklFUlMpICovCisKKy8qIFBPU0lYIFNwaW4gTG9jayBUeXBlcyAqLworCisjaWYgIWRlZmluZWQgKF9fQ1lHV0lOX18pCisjaWYgZGVmaW5lZChfUE9TSVhfU1BJTl9MT0NLUykKK3R5cGVkZWYgX191aW50MzJfdCBwdGhyZWFkX3NwaW5sb2NrX3Q7ICAgICAgICAvKiBQT1NJWCBTcGluIExvY2sgT2JqZWN0ICovCisjZW5kaWYgLyogZGVmaW5lZChfUE9TSVhfU1BJTl9MT0NLUykgKi8KKworLyogUE9TSVggUmVhZGVyL1dyaXRlciBMb2NrIFR5cGVzICovCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9SRUFERVJfV1JJVEVSX0xPQ0tTKQordHlwZWRlZiBfX3VpbnQzMl90IHB0aHJlYWRfcndsb2NrX3Q7ICAgICAgICAgLyogUE9TSVggUldMb2NrIE9iamVjdCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgICBpc19pbml0aWFsaXplZDsgICAgICAgLyogaXMgdGhpcyBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZWQ/ICovCisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVEKQorICBpbnQgICBwcm9jZXNzX3NoYXJlZDsgICAgICAgLyogYWxsb3cgdGhpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBwcm9jZXNzZXMgKi8KKyNlbmRpZgorfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKKyNlbmRpZiAvKiBkZWZpbmVkKF9QT1NJWF9SRUFERVJfV1JJVEVSX0xPQ0tTKSAqLworI2VuZGlmIC8qIF9fQ1lHV0lOX18gKi8KKworI2VuZGlmICAvKiAhX19uZWVkX2ludHR5cGVzICovCisKKyN1bmRlZiBfX25lZWRfaW50dHlwZXMKKworI2VuZGlmCS8qIF9TWVNfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy91bmlzdGQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFhYWNmYQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdW5pc3RkLmgKQEAgLTAsMCArMSw1MDYgQEAKKyNpZm5kZWYgX1NZU19VTklTVERfSAorI2RlZmluZSBfU1lTX1VOSVNURF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPF9hbnNpLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorI2RlZmluZSBfX25lZWRfc2l6ZV90CisjZGVmaW5lIF9fbmVlZF9wdHJkaWZmX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworCit2b2lkCV9FWEZVTihfZXhpdCwgKGludCBfX3N0YXR1cyApIF9BVFRSSUJVVEUgKChub3JldHVybikpKTsKKworaW50CV9FWEZVTihhY2Nlc3MsKGNvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fYW1vZGUgKSk7Cit1bnNpZ25lZCAgX0VYRlVOKGFsYXJtLCAodW5zaWduZWQgX19zZWNzICkpOworaW50ICAgICBfRVhGVU4oY2hkaXIsIChjb25zdCBjaGFyICpfX3BhdGggKSk7CitpbnQgICAgIF9FWEZVTihjaG1vZCwgKGNvbnN0IGNoYXIgKl9fcGF0aCwgbW9kZV90IF9fbW9kZSApKTsKKyNpZiAhZGVmaW5lZChfX0lOU0lERV9DWUdXSU5fXykKK2ludCAgICAgX0VYRlVOKGNob3duLCAoY29uc3QgY2hhciAqX19wYXRoLCB1aWRfdCBfX293bmVyLCBnaWRfdCBfX2dyb3VwICkpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fcnRlbXNfXykKK2ludCAgICAgX0VYRlVOKGNocm9vdCwgKGNvbnN0IGNoYXIgKl9fcGF0aCApKTsKKyNlbmRpZgoraW50ICAgICBfRVhGVU4oY2xvc2UsIChpbnQgX19maWxkZXMgKSk7CisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorc2l6ZV90CV9FWEZVTihjb25mc3RyLCAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikpOworI2VuZGlmCitjaGFyICogIF9FWEZVTihjdGVybWlkLCAoY2hhciAqX19zICkpOworY2hhciAqICBfRVhGVU4oY3VzZXJpZCwgKGNoYXIgKl9fcyApKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCitpbnQJX0VYRlVOKGRhZW1vbiwgKGludCBub2NoZGlyLCBpbnQgbm9jbG9zZSkpOworI2VuZGlmCitpbnQgICAgIF9FWEZVTihkdXAsIChpbnQgX19maWxkZXMgKSk7CitpbnQgICAgIF9FWEZVTihkdXAyLCAoaW50IF9fZmlsZGVzLCBpbnQgX19maWxkZXMyICkpOworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKK2ludCAgICAgX0VYRlVOKGR1cDMsIChpbnQgX19maWxkZXMsIGludCBfX2ZpbGRlczIsIGludCBmbGFncykpOworaW50CV9FWEZVTihlYWNjZXNzLCAoY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19tb2RlKSk7Cit2b2lkCV9FWEZVTihlbmR1c2Vyc2hlbGwsICh2b2lkKSk7CitpbnQJX0VYRlVOKGV1aWRhY2Nlc3MsIChjb25zdCBjaGFyICpfX3BhdGgsIGludCBfX21vZGUpKTsKKyNlbmRpZgoraW50ICAgICBfRVhGVU4oZXhlY2wsIChjb25zdCBjaGFyICpfX3BhdGgsIGNvbnN0IGNoYXIgKiwgLi4uICkpOworaW50ICAgICBfRVhGVU4oZXhlY2xlLCAoY29uc3QgY2hhciAqX19wYXRoLCBjb25zdCBjaGFyICosIC4uLiApKTsKK2ludCAgICAgX0VYRlVOKGV4ZWNscCwgKGNvbnN0IGNoYXIgKl9fZmlsZSwgY29uc3QgY2hhciAqLCAuLi4gKSk7CisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQoraW50ICAgICBfRVhGVU4oZXhlY2xwZSwgKGNvbnN0IGNoYXIgKl9fZmlsZSwgY29uc3QgY2hhciAqLCAuLi4gKSk7CisjZW5kaWYKK2ludCAgICAgX0VYRlVOKGV4ZWN2LCAoY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICogY29uc3QgX19hcmd2W10gKSk7CitpbnQgICAgIF9FWEZVTihleGVjdmUsIChjb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKiBjb25zdCBfX2FyZ3ZbXSwgY2hhciAqIGNvbnN0IF9fZW52cFtdICkpOworaW50ICAgICBfRVhGVU4oZXhlY3ZwLCAoY29uc3QgY2hhciAqX19maWxlLCBjaGFyICogY29uc3QgX19hcmd2W10gKSk7CisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQoraW50ICAgICBfRVhGVU4oZXhlY3ZwZSwgKGNvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqIGNvbnN0IF9fYXJndltdLCBjaGFyICogY29uc3QgX19lbnZwW10gKSk7CitpbnQJX0VYRlVOKGZhY2Nlc3NhdCwgKGludCBfX2RpcmZkLCBjb25zdCBjaGFyICpfX3BhdGgsIGludCBfX21vZGUsIGludCBfX2ZsYWdzKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19ydGVtc19fKSB8fCBkZWZpbmVkKF9fU1BVX18pCitpbnQgICAgIF9FWEZVTihmY2hkaXIsIChpbnQgX19maWxkZXMpKTsKKyNlbmRpZgoraW50ICAgICBfRVhGVU4oZmNobW9kLCAoaW50IF9fZmlsZGVzLCBtb2RlX3QgX19tb2RlICkpOworI2lmICFkZWZpbmVkKF9fSU5TSURFX0NZR1dJTl9fKQoraW50ICAgICBfRVhGVU4oZmNob3duLCAoaW50IF9fZmlsZGVzLCB1aWRfdCBfX293bmVyLCBnaWRfdCBfX2dyb3VwICkpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQoraW50CV9FWEZVTihmY2hvd25hdCwgKGludCBfX2RpcmZkLCBjb25zdCBjaGFyICpfX3BhdGgsIHVpZF90IF9fb3duZXIsIGdpZF90IF9fZ3JvdXAsIGludCBfX2ZsYWdzKSk7CitpbnQJX0VYRlVOKGZleGVjdmUsIChpbnQgX19mZCwgY2hhciAqIGNvbnN0IF9fYXJndltdLCBjaGFyICogY29uc3QgX19lbnZwW10gKSk7CisjZW5kaWYKK3BpZF90ICAgX0VYRlVOKGZvcmssICh2b2lkICkpOworbG9uZyAgICBfRVhGVU4oZnBhdGhjb25mLCAoaW50IF9fZmQsIGludCBfX25hbWUgKSk7CitpbnQgICAgIF9FWEZVTihmc3luYywgKGludCBfX2ZkKSk7CitpbnQgICAgIF9FWEZVTihmZGF0YXN5bmMsIChpbnQgX19mZCkpOworI2lmIGRlZmluZWQoX19DWUdXSU5fXykKK2NoYXIgKiAgX0VYRlVOKGdldF9jdXJyZW50X2Rpcl9uYW1lLCAodm9pZCkpOworI2VuZGlmCitjaGFyICogIF9FWEZVTihnZXRjd2QsIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSApKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCitpbnQJX0VYRlVOKGdldGRvbWFpbm5hbWUgLChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikpOworI2VuZGlmCisjaWYgIWRlZmluZWQoX19JTlNJREVfQ1lHV0lOX18pCitnaWRfdCAgIF9FWEZVTihnZXRlZ2lkLCAodm9pZCApKTsKK3VpZF90ICAgX0VYRlVOKGdldGV1aWQsICh2b2lkICkpOworZ2lkX3QgICBfRVhGVU4oZ2V0Z2lkLCAodm9pZCApKTsKKyNlbmRpZgoraW50ICAgICBfRVhGVU4oZ2V0Z3JvdXBzLCAoaW50IF9fZ2lkc2V0c2l6ZSwgZ2lkX3QgX19ncm91cGxpc3RbXSApKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCitsb25nICAgIF9FWEZVTihnZXRob3N0aWQsICh2b2lkKSk7CisjZW5kaWYKK2NoYXIgKiAgX0VYRlVOKGdldGxvZ2luLCAodm9pZCApKTsKKyNpZiBkZWZpbmVkKF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMpCitpbnQgX0VYRlVOKGdldGxvZ2luX3IsIChjaGFyICpuYW1lLCBzaXplX3QgbmFtZXNpemUpICk7CisjZW5kaWYKK2NoYXIgKiAgX0VYRlVOKGdldHBhc3MsIChjb25zdCBjaGFyICpfX3Byb21wdCkpOworaW50CV9FWEZVTihnZXRwYWdlc2l6ZSwgKHZvaWQpKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCitpbnQgICAgX0VYRlVOKGdldHBlZXJlaWQsIChpbnQsIHVpZF90ICosIGdpZF90ICopKTsKKyNlbmRpZgorcGlkX3QgICBfRVhGVU4oZ2V0cGdpZCwgKHBpZF90KSk7CitwaWRfdCAgIF9FWEZVTihnZXRwZ3JwLCAodm9pZCApKTsKK3BpZF90ICAgX0VYRlVOKGdldHBpZCwgKHZvaWQgKSk7CitwaWRfdCAgIF9FWEZVTihnZXRwcGlkLCAodm9pZCApKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19ydGVtc19fKQorcGlkX3QgICBfRVhGVU4oZ2V0c2lkLCAocGlkX3QpKTsKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fSU5TSURFX0NZR1dJTl9fKQordWlkX3QgICBfRVhGVU4oZ2V0dWlkLCAodm9pZCApKTsKKyNlbmRpZgorI2lmZGVmIF9fQ1lHV0lOX18KK2NoYXIgKglfRVhGVU4oZ2V0dXNlcnNoZWxsLCAodm9pZCkpOworY2hhciAqICBfRVhGVU4oZ2V0d2QsIChjaGFyICpfX2J1ZiApKTsKK2ludAlfRVhGVU4oaXJ1c2Vyb2ssICh1bnNpZ25lZCBsb25nIHJhZGRyLCBpbnQgc3VwZXJ1c2VyLCBjb25zdCBjaGFyICpydXNlciwgY29uc3QgY2hhciAqbHVzZXIpKTsKKyNlbmRpZgoraW50ICAgICBfRVhGVU4oaXNhdHR5LCAoaW50IF9fZmlsZGVzICkpOworI2lmICFkZWZpbmVkKF9fSU5TSURFX0NZR1dJTl9fKQoraW50ICAgICBfRVhGVU4obGNob3duLCAoY29uc3QgY2hhciAqX19wYXRoLCB1aWRfdCBfX293bmVyLCBnaWRfdCBfX2dyb3VwICkpOworI2VuZGlmCitpbnQgICAgIF9FWEZVTihsaW5rLCAoY29uc3QgY2hhciAqX19wYXRoMSwgY29uc3QgY2hhciAqX19wYXRoMiApKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCitpbnQgICAgIF9FWEZVTihsaW5rYXQsIChpbnQgX19kaXJmZDEsIGNvbnN0IGNoYXIgKl9fcGF0aDEsIGludCBfX2RpcmZkMiwgY29uc3QgY2hhciAqX19wYXRoMiwgaW50IF9fZmxhZ3MgKSk7CisjZW5kaWYKK2ludAlfRVhGVU4obmljZSwgKGludCBfX25pY2VfdmFsdWUgKSk7CisjaWYgIWRlZmluZWQoX19JTlNJREVfQ1lHV0lOX18pCitvZmZfdCAgIF9FWEZVTihsc2VlaywgKGludCBfX2ZpbGRlcywgb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSApKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19TUFVfXykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQorI2RlZmluZSBGX1VMT0NLCTAKKyNkZWZpbmUgRl9MT0NLCTEKKyNkZWZpbmUgRl9UTE9DSwkyCisjZGVmaW5lIEZfVEVTVAkzCitpbnQgICAgIF9FWEZVTihsb2NrZiwgKGludCBfX2ZkLCBpbnQgX19jbWQsIG9mZl90IF9fbGVuKSk7CisjZW5kaWYKK2xvbmcgICAgX0VYRlVOKHBhdGhjb25mLCAoY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lICkpOworaW50ICAgICBfRVhGVU4ocGF1c2UsICh2b2lkICkpOworI2lmZGVmIF9fQ1lHV0lOX18KK2ludAlfRVhGVU4ocHRocmVhZF9hdGZvcmssICh2b2lkICgqKSh2b2lkKSwgdm9pZCAoKikodm9pZCksIHZvaWQgKCopKHZvaWQpKSk7CisjZW5kaWYKK2ludCAgICAgX0VYRlVOKHBpcGUsIChpbnQgX19maWxkZXNbMl0gKSk7CisjaWZkZWYgX19DWUdXSU5fXworaW50ICAgICBfRVhGVU4ocGlwZTIsIChpbnQgX19maWxkZXNbMl0sIGludCBmbGFncykpOworI2VuZGlmCitzc2l6ZV90IF9FWEZVTihwcmVhZCwgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBvZmZfdCBfX29mZnNldCkpOworc3NpemVfdCBfRVhGVU4ocHdyaXRlLCAoaW50IF9fZmQsIGNvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIG9mZl90IF9fb2Zmc2V0KSk7CitfUkVBRF9XUklURV9SRVRVUk5fVFlQRSBfRVhGVU4ocmVhZCwgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGUgKSk7CisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQoraW50CV9FWEZVTihycmVzdnBvcnQsIChpbnQgKl9fYWxwb3J0KSk7CitpbnQJX0VYRlVOKHJldm9rZSwgKGNoYXIgKl9fcGF0aCkpOworI2VuZGlmCitpbnQgICAgIF9FWEZVTihybWRpciwgKGNvbnN0IGNoYXIgKl9fcGF0aCApKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCitpbnQJX0VYRlVOKHJ1c2Vyb2ssIChjb25zdCBjaGFyICpyaG9zdCwgaW50IHN1cGVydXNlciwgY29uc3QgY2hhciAqcnVzZXIsIGNvbnN0IGNoYXIgKmx1c2VyKSk7CisjZW5kaWYKK3ZvaWQgKiAgX0VYRlVOKHNicmssICAocHRyZGlmZl90IF9faW5jcikpOworI2lmICFkZWZpbmVkKF9fSU5TSURFX0NZR1dJTl9fKQorI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX3J0ZW1zX18pCitpbnQgICAgIF9FWEZVTihzZXRlZ2lkLCAoZ2lkX3QgX19naWQgKSk7CitpbnQgICAgIF9FWEZVTihzZXRldWlkLCAodWlkX3QgX191aWQgKSk7CisjZW5kaWYKK2ludCAgICAgX0VYRlVOKHNldGdpZCwgKGdpZF90IF9fZ2lkICkpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQoraW50CV9FWEZVTihzZXRncm91cHMsIChpbnQgbmdyb3VwcywgY29uc3QgZ2lkX3QgKmdyb3VwbGlzdCApKTsKKyNlbmRpZgoraW50ICAgICBfRVhGVU4oc2V0cGdpZCwgKHBpZF90IF9fcGlkLCBwaWRfdCBfX3BnaWQgKSk7CitpbnQgICAgIF9FWEZVTihzZXRwZ3JwLCAodm9pZCApKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKF9fSU5TSURFX0NZR1dJTl9fKQoraW50CV9FWEZVTihzZXRyZWdpZCwgKGdpZF90IF9fcmdpZCwgZ2lkX3QgX19lZ2lkKSk7CitpbnQJX0VYRlVOKHNldHJldWlkLCAodWlkX3QgX19ydWlkLCB1aWRfdCBfX2V1aWQpKTsKKyNlbmRpZgorcGlkX3QgICBfRVhGVU4oc2V0c2lkLCAodm9pZCApKTsKKyNpZiAhZGVmaW5lZChfX0lOU0lERV9DWUdXSU5fXykKK2ludCAgICAgX0VYRlVOKHNldHVpZCwgKHVpZF90IF9fdWlkICkpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQordm9pZAlfRVhGVU4oc2V0dXNlcnNoZWxsLCAodm9pZCkpOworI2VuZGlmCit1bnNpZ25lZCBfRVhGVU4oc2xlZXAsICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzICkpOwordm9pZCAgICBfRVhGVU4oc3dhYiwgKGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzc2l6ZV90KSk7Citsb25nICAgIF9FWEZVTihzeXNjb25mLCAoaW50IF9fbmFtZSApKTsKK3BpZF90ICAgX0VYRlVOKHRjZ2V0cGdycCwgKGludCBfX2ZpbGRlcyApKTsKK2ludCAgICAgX0VYRlVOKHRjc2V0cGdycCwgKGludCBfX2ZpbGRlcywgcGlkX3QgX19wZ3JwX2lkICkpOworY2hhciAqICBfRVhGVU4odHR5bmFtZSwgKGludCBfX2ZpbGRlcyApKTsKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19ydGVtc19fKQoraW50ICAgICBfRVhGVU4odHR5bmFtZV9yLCAoaW50LCBjaGFyICosIHNpemVfdCkpOyAKKyNlbmRpZgoraW50ICAgICBfRVhGVU4odW5saW5rLCAoY29uc3QgY2hhciAqX19wYXRoICkpOworaW50IAlfRVhGVU4odXNsZWVwLCAodXNlY29uZHNfdCBfX3VzZWNvbmRzKSk7CitpbnQgICAgIF9FWEZVTih2aGFuZ3VwLCAodm9pZCApKTsKK19SRUFEX1dSSVRFX1JFVFVSTl9UWVBFIF9FWEZVTih3cml0ZSwgKGludCBfX2ZkLCBjb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGUgKSk7CisKKyNpZmRlZiBfX0NZR1dJTl9fCisjIGRlZmluZSBfX1VOSVNURF9HRVRPUFRfXworIyBpbmNsdWRlIDxnZXRvcHQuaD4KKyMgdW5kZWYgX19VTklTVERfR0VUT1BUX18KKyNlbHNlCitleHRlcm4gY2hhciAqb3B0YXJnOwkJCS8qIGdldG9wdCgzKSBleHRlcm5hbCB2YXJpYWJsZXMgKi8KK2V4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKK2ludAkgZ2V0b3B0KGludCwgY2hhciAqIGNvbnN0IFtdLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBvcHRyZXNldDsJCQkvKiBnZXRvcHQoMykgZXh0ZXJuYWwgdmFyaWFibGUgKi8KKyNlbmRpZgorCisjaWZuZGVmICAgICAgICBfUE9TSVhfU09VUkNFCitwaWRfdCAgIF9FWEZVTih2Zm9yaywgKHZvaWQgKSk7CisjZW5kaWYgLyogX1BPU0lYX1NPVVJDRSAqLworCisjaWZkZWYgX0NPTVBJTElOR19ORVdMSUIKKy8qIFByb3ZpZGUgcHJvdG90eXBlcyBmb3IgbW9zdCBvZiB0aGUgXzxzeXN0ZW1jYWxsPiBuYW1lcyB0aGF0IGFyZQorICAgcHJvdmlkZWQgaW4gbmV3bGliIGZvciBzb21lIGNvbXBpbGVycy4gICovCitpbnQgICAgIF9FWEZVTihfY2xvc2UsIChpbnQgX19maWxkZXMgKSk7CitwaWRfdCAgIF9FWEZVTihfZm9yaywgKHZvaWQgKSk7CitwaWRfdCAgIF9FWEZVTihfZ2V0cGlkLCAodm9pZCApKTsKK2ludAlfRVhGVU4oX2lzYXR0eSwgKGludCBfX2ZpbGRlcyApKTsKK2ludCAgICAgX0VYRlVOKF9saW5rLCAoY29uc3QgY2hhciAqX19wYXRoMSwgY29uc3QgY2hhciAqX19wYXRoMiApKTsKK19vZmZfdCAgIF9FWEZVTihfbHNlZWssIChpbnQgX19maWxkZXMsIF9vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlICkpOworI2lmZGVmIF9fTEFSR0U2NF9GSUxFUworX29mZjY0X3QgX0VYRlVOKF9sc2VlazY0LCAoaW50IF9fZmlsZWRlcywgX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSApKTsKKyNlbmRpZgorX1JFQURfV1JJVEVfUkVUVVJOX1RZUEUgX0VYRlVOKF9yZWFkLCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZSApKTsKK3ZvaWQgKiAgX0VYRlVOKF9zYnJrLCAgKHB0cmRpZmZfdCBfX2luY3IpKTsKK2ludCAgICAgX0VYRlVOKF91bmxpbmssIChjb25zdCBjaGFyICpfX3BhdGggKSk7CitfUkVBRF9XUklURV9SRVRVUk5fVFlQRSBfRVhGVU4oX3dyaXRlLCAoaW50IF9fZmQsIGNvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZSApKTsKK2ludCAgICAgX0VYRlVOKF9leGVjdmUsIChjb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKiBjb25zdCBfX2FyZ3ZbXSwgY2hhciAqIGNvbnN0IF9fZW52cFtdICkpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19ydGVtc19fKSB8fCBkZWZpbmVkKF9fc2hfXykgfHwgZGVmaW5lZChfX1NQVV9fKQorI2lmICFkZWZpbmVkKF9fSU5TSURFX0NZR1dJTl9fKQoraW50ICAgICBfRVhGVU4oZnRydW5jYXRlLCAoaW50IF9fZmQsIG9mZl90IF9fbGVuZ3RoKSk7CitpbnQgICAgIF9FWEZVTih0cnVuY2F0ZSwgKGNvbnN0IGNoYXIgKiwgb2ZmX3QgX19sZW5ndGgpKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19ydGVtc19fKQoraW50CV9FWEZVTihnZXRkdGFibGVzaXplLCAodm9pZCkpOworaW50CV9FWEZVTihzZXRkdGFibGVzaXplLCAoaW50KSk7Cit1c2Vjb25kc190IF9FWEZVTih1YWxhcm0sICh1c2Vjb25kc190IF9fdXNlY29uZHMsIHVzZWNvbmRzX3QgX19pbnRlcnZhbCkpOworI2lmICEoZGVmaW5lZCAgKF9XSU5TT0NLX0gpIHx8IGRlZmluZWQgKF9XSU5TT0NLQVBJXykgfHwgZGVmaW5lZCAoX19VU0VfVzMyX1NPQ0tFVFMpKQorLyogd2luc29ja1syXS5oIGRlZmluZXMgYXMgX19zdGRjYWxsLCBhbmQgd2l0aCBpbnQgYXMgMm5kIGFyZyAqLworIGludAlfRVhGVU4oZ2V0aG9zdG5hbWUsIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikpOworI2VuZGlmCitjaGFyICoJX0VYRlVOKG1rdGVtcCwgKGNoYXIgKikpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19TUFVfXykgfHwgZGVmaW5lZChfX3J0ZW1zX18pCit2b2lkICAgIF9FWEZVTihzeW5jLCAodm9pZCkpOworI2VuZGlmCisKK3NzaXplX3QgX0VYRlVOKHJlYWRsaW5rLCAoY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSk7CisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorc3NpemVfdAlfRVhGVU4ocmVhZGxpbmthdCwgKGludCBfX2RpcmZkMSwgY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSk7CisjZW5kaWYKK2ludCAgICAgX0VYRlVOKHN5bWxpbmssIChjb25zdCBjaGFyICpfX25hbWUxLCBjb25zdCBjaGFyICpfX25hbWUyKSk7CisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQoraW50CV9FWEZVTihzeW1saW5rYXQsIChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSk7CitpbnQJX0VYRlVOKHVubGlua2F0LCAoaW50LCBjb25zdCBjaGFyICosIGludCkpOworI2VuZGlmCisKKyNkZWZpbmUJRl9PSwkwCisjZGVmaW5lCVJfT0sJNAorI2RlZmluZQlXX09LCTIKKyNkZWZpbmUJWF9PSwkxCisKKyMgZGVmaW5lCVNFRUtfU0VUCTAKKyMgZGVmaW5lCVNFRUtfQ1VSCTEKKyMgZGVmaW5lCVNFRUtfRU5ECTIKKworI2luY2x1ZGUgPHN5cy9mZWF0dXJlcy5oPgorCisjZGVmaW5lIFNURElOX0ZJTEVOTyAgICAwICAgICAgIC8qIHN0YW5kYXJkIGlucHV0IGZpbGUgZGVzY3JpcHRvciAqLworI2RlZmluZSBTVERPVVRfRklMRU5PICAgMSAgICAgICAvKiBzdGFuZGFyZCBvdXRwdXQgZmlsZSBkZXNjcmlwdG9yICovCisjZGVmaW5lIFNUREVSUl9GSUxFTk8gICAyICAgICAgIC8qIHN0YW5kYXJkIGVycm9yIGZpbGUgZGVzY3JpcHRvciAqLworCisvKgorICogIHN5c2NvbmYgdmFsdWVzIHBlciBJRUVFIFN0ZCAxMDAzLjEsIDIwMDggRWRpdGlvbgorICovCisKKyNkZWZpbmUgX1NDX0FSR19NQVggICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgX1NDX0NISUxEX01BWCAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgX1NDX0NMS19UQ0sgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgX1NDX05HUk9VUFNfTUFYICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgX1NDX09QRU5fTUFYICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgX1NDX0pPQl9DT05UUk9MICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgX1NDX1NBVkVEX0lEUyAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgX1NDX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgX1NDX1BBR0VTSVpFICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgX1NDX1BBR0VfU0laRSAgICAgICAgICAgICAgICAgICAgIF9TQ19QQUdFU0laRQorLyogVGhlc2UgYXJlIG5vbi1QT1NJWCB2YWx1ZXMgd2UgYWNjaWRlbnRhbGx5IGludHJvZHVjZWQgaW4gMjAwMCB3aXRob3V0CisgICBndWFyZGluZyB0aGVtLiAgS2VlcGluZyB0aGVtIHVuZ3VhcmRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KKyNkZWZpbmUgX1NDX05QUk9DRVNTT1JTX0NPTkYgICAgICAgICAgICAgIDkKKyNkZWZpbmUgX1NDX05QUk9DRVNTT1JTX09OTE4gICAgICAgICAgICAgMTAKKyNkZWZpbmUgX1NDX1BIWVNfUEFHRVMgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgX1NDX0FWUEhZU19QQUdFUyAgICAgICAgICAgICAgICAgMTIKKy8qIEVuZCBvZiBub24tUE9TSVggdmFsdWVzLiAqLworI2RlZmluZSBfU0NfTVFfT1BFTl9NQVggICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBfU0NfTVFfUFJJT19NQVggICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBfU0NfUlRTSUdfTUFYICAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBfU0NfU0VNX05TRU1TX01BWCAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBfU0NfU0VNX1ZBTFVFX01BWCAgICAgICAgICAgICAgICAxNworI2RlZmluZSBfU0NfU0lHUVVFVUVfTUFYICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBfU0NfVElNRVJfTUFYICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSBfU0NfVFpOQU1FX01BWCAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBfU0NfQVNZTkNIUk9OT1VTX0lPICAgICAgICAgICAgICAyMQorI2RlZmluZSBfU0NfRlNZTkMgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBfU0NfTUFQUEVEX0ZJTEVTICAgICAgICAgICAgICAgICAyMworI2RlZmluZSBfU0NfTUVNTE9DSyAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBfU0NfTUVNTE9DS19SQU5HRSAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBfU0NfTUVNT1JZX1BST1RFQ1RJT04gICAgICAgICAgICAyNgorI2RlZmluZSBfU0NfTUVTU0FHRV9QQVNTSU5HICAgICAgICAgICAgICAyNworI2RlZmluZSBfU0NfUFJJT1JJVElaRURfSU8gICAgICAgICAgICAgICAyOAorI2RlZmluZSBfU0NfUkVBTFRJTUVfU0lHTkFMUyAgICAgICAgICAgICAyOQorI2RlZmluZSBfU0NfU0VNQVBIT1JFUyAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTICAgICAgICAzMQorI2RlZmluZSBfU0NfU1lOQ0hST05JWkVEX0lPICAgICAgICAgICAgICAzMgorI2RlZmluZSBfU0NfVElNRVJTICAgICAgICAgICAgICAgICAgICAgICAzMworI2RlZmluZSBfU0NfQUlPX0xJU1RJT19NQVggICAgICAgICAgICAgICAzNAorI2RlZmluZSBfU0NfQUlPX01BWCAgICAgICAgICAgICAgICAgICAgICAzNQorI2RlZmluZSBfU0NfQUlPX1BSSU9fREVMVEFfTUFYICAgICAgICAgICAzNgorI2RlZmluZSBfU0NfREVMQVlUSU1FUl9NQVggICAgICAgICAgICAgICAzNworI2RlZmluZSBfU0NfVEhSRUFEX0tFWVNfTUFYICAgICAgICAgICAgICAzOAorI2RlZmluZSBfU0NfVEhSRUFEX1NUQUNLX01JTiAgICAgICAgICAgICAzOQorI2RlZmluZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYICAgICAgICAgICA0MAorI2RlZmluZSBfU0NfVFRZX05BTUVfTUFYICAgICAgICAgICAgICAgICA0MQorI2RlZmluZSBfU0NfVEhSRUFEUyAgICAgICAgICAgICAgICAgICAgICA0MgorI2RlZmluZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSICAgICAgICA0MworI2RlZmluZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFICAgICAgICA0NAorI2RlZmluZSBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcgICA0NQorI2RlZmluZSBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCAgICAgICAgICA0NgorLyogX1NDX1RIUkVBRF9QUklPX1BST1RFQ1Qgd2FzIF9TQ19USFJFQURfUFJJT19DRUlMSU5HIGluIGVhcmx5IGRyYWZ0cyAqLworI2RlZmluZSBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCAgICAgICAgICA0NworI2RlZmluZSBfU0NfVEhSRUFEX1BSSU9fQ0VJTElORyAgICAgICAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVAorI2RlZmluZSBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVEICAgICAgICA0OAorI2RlZmluZSBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TICAgICAgICA0OQorI2RlZmluZSBfU0NfR0VUR1JfUl9TSVpFX01BWCAgICAgICAgICAgICA1MAorI2RlZmluZSBfU0NfR0VUUFdfUl9TSVpFX01BWCAgICAgICAgICAgICA1MQorI2RlZmluZSBfU0NfTE9HSU5fTkFNRV9NQVggICAgICAgICAgICAgICA1MgorI2RlZmluZSBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUyA1MworI2RlZmluZSBfU0NfQURWSVNPUllfSU5GTyAgICAgICAgICAgICAgICA1NAorI2RlZmluZSBfU0NfQVRFWElUX01BWCAgICAgICAgICAgICAgICAgICA1NQorI2RlZmluZSBfU0NfQkFSUklFUlMgICAgICAgICAgICAgICAgICAgICA1NgorI2RlZmluZSBfU0NfQkNfQkFTRV9NQVggICAgICAgICAgICAgICAgICA1NworI2RlZmluZSBfU0NfQkNfRElNX01BWCAgICAgICAgICAgICAgICAgICA1OAorI2RlZmluZSBfU0NfQkNfU0NBTEVfTUFYICAgICAgICAgICAgICAgICA1OQorI2RlZmluZSBfU0NfQkNfU1RSSU5HX01BWCAgICAgICAgICAgICAgICA2MAorI2RlZmluZSBfU0NfQ0xPQ0tfU0VMRUNUSU9OICAgICAgICAgICAgICA2MQorI2RlZmluZSBfU0NfQ09MTF9XRUlHSFRTX01BWCAgICAgICAgICAgICA2MgorI2RlZmluZSBfU0NfQ1BVVElNRSAgICAgICAgICAgICAgICAgICAgICA2MworI2RlZmluZSBfU0NfRVhQUl9ORVNUX01BWCAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBfU0NfSE9TVF9OQU1FX01BWCAgICAgICAgICAgICAgICA2NQorI2RlZmluZSBfU0NfSU9WX01BWCAgICAgICAgICAgICAgICAgICAgICA2NgorI2RlZmluZSBfU0NfSVBWNiAgICAgICAgICAgICAgICAgICAgICAgICA2NworI2RlZmluZSBfU0NfTElORV9NQVggICAgICAgICAgICAgICAgICAgICA2OAorI2RlZmluZSBfU0NfTU9OT1RPTklDX0NMT0NLICAgICAgICAgICAgICA2OQorI2RlZmluZSBfU0NfUkFXX1NPQ0tFVFMgICAgICAgICAgICAgICAgICA3MAorI2RlZmluZSBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUyAgICAgICAgICA3MQorI2RlZmluZSBfU0NfUkVHRVhQICAgICAgICAgICAgICAgICAgICAgICA3MgorI2RlZmluZSBfU0NfUkVfRFVQX01BWCAgICAgICAgICAgICAgICAgICA3MworI2RlZmluZSBfU0NfU0hFTEwgICAgICAgICAgICAgICAgICAgICAgICA3NAorI2RlZmluZSBfU0NfU1BBV04gICAgICAgICAgICAgICAgICAgICAgICA3NQorI2RlZmluZSBfU0NfU1BJTl9MT0NLUyAgICAgICAgICAgICAgICAgICA3NgorI2RlZmluZSBfU0NfU1BPUkFESUNfU0VSVkVSICAgICAgICAgICAgICA3NworI2RlZmluZSBfU0NfU1NfUkVQTF9NQVggICAgICAgICAgICAgICAgICA3OAorI2RlZmluZSBfU0NfU1lNTE9PUF9NQVggICAgICAgICAgICAgICAgICA3OQorI2RlZmluZSBfU0NfVEhSRUFEX0NQVVRJTUUgICAgICAgICAgICAgICA4MAorI2RlZmluZSBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiAgICAgICA4MQorI2RlZmluZSBfU0NfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgICA4MgorI2RlZmluZSBfU0NfVFJBQ0UgICAgICAgICAgICAgICAgICAgICAgICA4MworI2RlZmluZSBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSICAgICAgICAgICA4NAorI2RlZmluZSBfU0NfVFJBQ0VfRVZFTlRfTkFNRV9NQVggICAgICAgICA4NQorI2RlZmluZSBfU0NfVFJBQ0VfSU5IRVJJVCAgICAgICAgICAgICAgICA4NgorI2RlZmluZSBfU0NfVFJBQ0VfTE9HICAgICAgICAgICAgICAgICAgICA4NworI2RlZmluZSBfU0NfVFJBQ0VfTkFNRV9NQVggICAgICAgICAgICAgICA4OAorI2RlZmluZSBfU0NfVFJBQ0VfU1lTX01BWCAgICAgICAgICAgICAgICA4OQorI2RlZmluZSBfU0NfVFJBQ0VfVVNFUl9FVkVOVF9NQVggICAgICAgICA5MAorI2RlZmluZSBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMgICAgICAgICA5MQorI2RlZmluZSBfU0NfVjdfSUxQMzJfT0ZGMzIgICAgICAgICAgICAgICA5MgorI2RlZmluZSBfU0NfVjZfSUxQMzJfT0ZGMzIgICAgICAgICAgICAgICBfU0NfVjdfSUxQMzJfT0ZGMzIKKyNkZWZpbmUgX1NDX1hCUzVfSUxQMzJfT0ZGMzIgICAgICAgICAgICAgX1NDX1Y3X0lMUDMyX09GRjMyCisjZGVmaW5lIF9TQ19WN19JTFAzMl9PRkZCSUcgICAgICAgICAgICAgIDkzCisjZGVmaW5lIF9TQ19WNl9JTFAzMl9PRkZCSUcgICAgICAgICAgICAgIF9TQ19WN19JTFAzMl9PRkZCSUcKKyNkZWZpbmUgX1NDX1hCUzVfSUxQMzJfT0ZGQklHICAgICAgICAgICAgX1NDX1Y3X0lMUDMyX09GRkJJRworI2RlZmluZSBfU0NfVjdfTFA2NF9PRkY2NCAgICAgICAgICAgICAgICA5NAorI2RlZmluZSBfU0NfVjZfTFA2NF9PRkY2NCAgICAgICAgICAgICAgICBfU0NfVjdfTFA2NF9PRkY2NAorI2RlZmluZSBfU0NfWEJTNV9MUDY0X09GRjY0ICAgICAgICAgICAgICBfU0NfVjdfTFA2NF9PRkY2NAorI2RlZmluZSBfU0NfVjdfTFBCSUdfT0ZGQklHICAgICAgICAgICAgICA5NQorI2RlZmluZSBfU0NfVjZfTFBCSUdfT0ZGQklHICAgICAgICAgICAgICBfU0NfVjdfTFBCSUdfT0ZGQklHCisjZGVmaW5lIF9TQ19YQlM1X0xQQklHX09GRkJJRyAgICAgICAgICAgIF9TQ19WN19MUEJJR19PRkZCSUcKKyNkZWZpbmUgX1NDX1hPUEVOX0NSWVBUICAgICAgICAgICAgICAgICAgOTYKKyNkZWZpbmUgX1NDX1hPUEVOX0VOSF9JMThOICAgICAgICAgICAgICAgOTcKKyNkZWZpbmUgX1NDX1hPUEVOX0xFR0FDWSAgICAgICAgICAgICAgICAgOTgKKyNkZWZpbmUgX1NDX1hPUEVOX1JFQUxUSU1FICAgICAgICAgICAgICAgOTkKKyNkZWZpbmUgX1NDX1NUUkVBTV9NQVggICAgICAgICAgICAgICAgICAxMDAKKyNkZWZpbmUgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcgICAgICAgICAxMDEKKyNkZWZpbmUgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMgICAgICAxMDIKKyNkZWZpbmUgX1NDX1hPUEVOX1NITSAgICAgICAgICAgICAgICAgICAxMDMKKyNkZWZpbmUgX1NDX1hPUEVOX1NUUkVBTVMgICAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgX1NDX1hPUEVOX1VOSVggICAgICAgICAgICAgICAgICAxMDUKKyNkZWZpbmUgX1NDX1hPUEVOX1ZFUlNJT04gICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgX1NDXzJfQ0hBUl9URVJNICAgICAgICAgICAgICAgICAxMDcKKyNkZWZpbmUgX1NDXzJfQ19CSU5EICAgICAgICAgICAgICAgICAgICAxMDgKKyNkZWZpbmUgX1NDXzJfQ19ERVYgICAgICAgICAgICAgICAgICAgICAxMDkKKyNkZWZpbmUgX1NDXzJfRk9SVF9ERVYgICAgICAgICAgICAgICAgICAxMTAKKyNkZWZpbmUgX1NDXzJfRk9SVF9SVU4gICAgICAgICAgICAgICAgICAxMTEKKyNkZWZpbmUgX1NDXzJfTE9DQUxFREVGICAgICAgICAgICAgICAgICAxMTIKKyNkZWZpbmUgX1NDXzJfUEJTICAgICAgICAgICAgICAgICAgICAgICAxMTMKKyNkZWZpbmUgX1NDXzJfUEJTX0FDQ09VTlRJTkcgICAgICAgICAgICAxMTQKKyNkZWZpbmUgX1NDXzJfUEJTX0NIRUNLUE9JTlQgICAgICAgICAgICAxMTUKKyNkZWZpbmUgX1NDXzJfUEJTX0xPQ0FURSAgICAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgX1NDXzJfUEJTX01FU1NBR0UgICAgICAgICAgICAgICAxMTcKKyNkZWZpbmUgX1NDXzJfUEJTX1RSQUNLICAgICAgICAgICAgICAgICAxMTgKKyNkZWZpbmUgX1NDXzJfU1dfREVWICAgICAgICAgICAgICAgICAgICAxMTkKKyNkZWZpbmUgX1NDXzJfVVBFICAgICAgICAgICAgICAgICAgICAgICAxMjAKKyNkZWZpbmUgX1NDXzJfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAxMjEKKyNkZWZpbmUgX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19JTkhFUklUICAxMjIKKyNkZWZpbmUgX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19QUk9URUNUICAxMjMKKyNkZWZpbmUgX1NDX1hPUEVOX1VVQ1AgICAgICAgICAgICAgICAgICAxMjQKKworLyoKKyAqICBwYXRoY29uZiB2YWx1ZXMgcGVyIElFRUUgU3RkIDEwMDMuMSwgMjAwOCBFZGl0aW9uCisgKi8KKworI2RlZmluZSBfUENfTElOS19NQVggICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBfUENfTUFYX0NBTk9OICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBfUENfTUFYX0lOUFVUICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBfUENfTkFNRV9NQVggICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBfUENfUEFUSF9NQVggICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBfUENfUElQRV9CVUYgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBfUENfQ0hPV05fUkVTVFJJQ1RFRCAgICAgICAgICAgICAgNgorI2RlZmluZSBfUENfTk9fVFJVTkMgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBfUENfVkRJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBfUENfQVNZTkNfSU8gICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBfUENfUFJJT19JTyAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBfUENfU1lOQ19JTyAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBfUENfRklMRVNJWkVCSVRTICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBfUENfMl9TWU1MSU5LUyAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBfUENfU1lNTElOS19NQVggICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBfUENfQUxMT0NfU0laRV9NSU4gICAgICAgICAgICAgICAxNQorI2RlZmluZSBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFICAgICAgICAgICAxNgorI2RlZmluZSBfUENfUkVDX01BWF9YRkVSX1NJWkUgICAgICAgICAgICAxNworI2RlZmluZSBfUENfUkVDX01JTl9YRkVSX1NJWkUgICAgICAgICAgICAxOAorI2RlZmluZSBfUENfUkVDX1hGRVJfQUxJR04gICAgICAgICAgICAgICAxOQorI2RlZmluZSBfUENfVElNRVNUQU1QX1JFU09MVVRJT04gICAgICAgICAyMAorI2lmZGVmIF9fQ1lHV0lOX18KKy8qIEFzayBmb3IgUE9TSVggcGVybWlzc2lvbiBiaXRzIHN1cHBvcnQuICovCisjZGVmaW5lIF9QQ19QT1NJWF9QRVJNSVNTSU9OUyAgICAgICAgICAgIDkwCisvKiBBc2sgZm9yIGZ1bGwgUE9TSVggcGVybWlzc2lvbiBzdXBwb3J0IGluY2x1ZGluZyB1aWQvZ2lkIHNldHRpbmdzLiAqLworI2RlZmluZSBfUENfUE9TSVhfU0VDVVJJVFkgICAgICAgICAgICAgICA5MQorI2VuZGlmCisKKy8qCisgKiAgY29uZnN0ciB2YWx1ZXMgcGVyIElFRUUgU3RkIDEwMDMuMSwgMjAwNCBFZGl0aW9uCisgKi8KKworI2lmZGVmIF9fQ1lHV0lOX18JLyogT25seSBkZWZpbmVkIG9uIEN5Z3dpbiBmb3Igbm93LiAqLworI2RlZmluZSBfQ1NfUEFUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIF9DU19QT1NJWF9WN19JTFAzMl9PRkYzMl9DRkxBR1MgICAgICAgIDEKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0NGTEFHUyAgICAgICBfQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfQ0ZMQUdTCisjZGVmaW5lIF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUyAgICAgICAgICAgX0NTX1BPU0lYX1Y3X0lMUDMyX09GRjMyX0NGTEFHUworI2RlZmluZSBfQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfTERGTEFHUyAgICAgICAyCisjZGVmaW5lIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MREZMQUdTICAgICAgX0NTX1BPU0lYX1Y3X0lMUDMyX09GRjMyX0xERkxBR1MKKyNkZWZpbmUgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTERGTEFHUyAgICAgICAgICBfQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfTERGTEFHUworI2RlZmluZSBfQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfTElCUyAgICAgICAgICAzCisjZGVmaW5lIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSUJTICAgICAgICAgX0NTX1BPU0lYX1Y3X0lMUDMyX09GRjMyX0xJQlMKKyNkZWZpbmUgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUyAgICAgICAgICAgICBfQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfTElCUworI2RlZmluZSBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MgICAgICAgICA0CisjZGVmaW5lIF9DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfQ0ZMQUdTICAgICAgIDUKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19DRkxBR1MgICAgICBfQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGQklHX0NGTEFHUworI2RlZmluZSBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfQ0ZMQUdTICAgICAgICAgIF9DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfQ0ZMQUdTCisjZGVmaW5lIF9DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfTERGTEFHUyAgICAgIDYKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MREZMQUdTICAgICBfQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGQklHX0xERkxBR1MKKyNkZWZpbmUgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1MgICAgICAgICBfQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGQklHX0xERkxBR1MKKyNkZWZpbmUgX0NTX1BPU0lYX1Y3X0lMUDMyX09GRkJJR19MSUJTICAgICAgICAgNworI2RlZmluZSBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMgICAgICAgIF9DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfTElCUworI2RlZmluZSBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUyAgICAgICAgICAgIF9DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfTElCUworI2RlZmluZSBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTICAgICAgICA4CisjZGVmaW5lIF9DU19QT1NJWF9WN19MUDY0X09GRjY0X0NGTEFHUyAgICAgICAgIDkKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTICAgICAgICBfQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9DRkxBR1MKKyNkZWZpbmUgX0NTX1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MgICAgICAgICAgICBfQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9DRkxBR1MKKyNkZWZpbmUgX0NTX1BPU0lYX1Y3X0xQNjRfT0ZGNjRfTERGTEFHUyAgICAgICAxMAorI2RlZmluZSBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MREZMQUdTICAgICAgIF9DU19QT1NJWF9WN19MUDY0X09GRjY0X0xERkxBR1MKKyNkZWZpbmUgX0NTX1hCUzVfTFA2NF9PRkY2NF9MREZMQUdTICAgICAgICAgICBfQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9MREZMQUdTCisjZGVmaW5lIF9DU19QT1NJWF9WN19MUDY0X09GRjY0X0xJQlMgICAgICAgICAgMTEKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUyAgICAgICAgICBfQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9MSUJTCisjZGVmaW5lIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUyAgICAgICAgICAgICAgX0NTX1BPU0lYX1Y3X0xQNjRfT0ZGNjRfTElCUworI2RlZmluZSBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUyAgICAgICAgIDEyCisjZGVmaW5lIF9DU19QT1NJWF9WN19MUEJJR19PRkZCSUdfQ0ZMQUdTICAgICAgMTMKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19DRkxBR1MgICAgICBfQ1NfUE9TSVhfVjdfTFBCSUdfT0ZGQklHX0NGTEFHUworI2RlZmluZSBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfQ0ZMQUdTICAgICAgICAgIF9DU19QT1NJWF9WN19MUEJJR19PRkZCSUdfQ0ZMQUdTCisjZGVmaW5lIF9DU19QT1NJWF9WN19MUEJJR19PRkZCSUdfTERGTEFHUyAgICAgMTQKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTICAgICBfQ1NfUE9TSVhfVjdfTFBCSUdfT0ZGQklHX0xERkxBR1MKKyNkZWZpbmUgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xERkxBR1MgICAgICAgICBfQ1NfUE9TSVhfVjdfTFBCSUdfT0ZGQklHX0xERkxBR1MKKyNkZWZpbmUgX0NTX1BPU0lYX1Y3X0xQQklHX09GRkJJR19MSUJTICAgICAgICAxNQorI2RlZmluZSBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMgICAgICAgIF9DU19QT1NJWF9WN19MUEJJR19PRkZCSUdfTElCUworI2RlZmluZSBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUyAgICAgICAgICAgIF9DU19QT1NJWF9WN19MUEJJR19PRkZCSUdfTElCUworI2RlZmluZSBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTICAgICAgIDE2CisjZGVmaW5lIF9DU19QT1NJWF9WN19XSURUSF9SRVNUUklDVEVEX0VOVlMgICAgMTcKKyNkZWZpbmUgX0NTX1BPU0lYX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUyAgICBfQ1NfUE9TSVhfVjdfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTCisjZGVmaW5lIF9DU19YQlM1X1dJRFRIX1JFU1RSSUNURURfRU5WUyAgICAgICAgX0NTX1BPU0lYX1Y3X1dJRFRIX1JFU1RSSUNURURfRU5WUworI2RlZmluZSBfQ1NfUE9TSVhfVjdfVEhSRUFEU19DRkxBR1MgICAgICAgICAgIDE4CisjZGVmaW5lIF9DU19QT1NJWF9WN19USFJFQURTX0xERkxBR1MgICAgICAgICAgMTkKKyNkZWZpbmUgX0NTX1Y3X0VOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBfQ1NfVjZfRU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DU19WN19FTlYKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIF9TWVNfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdXRpbWUuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTkzN2YxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3N5cy91dGltZS5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX1NZU19VVElNRV9ICisjZGVmaW5lIF9TWVNfVVRJTUVfSAorCisvKiBUaGlzIGlzIGEgZHVtbXkgPHN5cy91dGltZS5oPiBmaWxlLCBub3QgY3VzdG9taXplZCBmb3IgYW55CisgICBwYXJ0aWN1bGFyIHN5c3RlbS4gIElmIHRoZXJlIGlzIGEgdXRpbWUuaCBpbiBsaWJjL3N5cy9TWVNESVIvc3lzLAorICAgaXQgd2lsbCBvdmVycmlkZSB0aGlzIG9uZS4gICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworc3RydWN0IHV0aW1idWYgCit7CisgIHRpbWVfdCBhY3RpbWU7CisgIHRpbWVfdCBtb2R0aW1lOyAKK307CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgorCisjZW5kaWYgLyogX1NZU19VVElNRV9IICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3dhaXQuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS9zeXMvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZmUzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvc3lzL3dhaXQuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9TWVNfV0FJVF9ICisjZGVmaW5lIF9TWVNfV0FJVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjZGVmaW5lIFdOT0hBTkcgMQorI2RlZmluZSBXVU5UUkFDRUQgMgorCisvKiBBIHN0YXR1cyBsb29rcyBsaWtlOgorICAgICAgPDIgYnl0ZXMgaW5mbz4gPDIgYnl0ZXMgY29kZT4KKworICAgICAgPGNvZGU+ID09IDAsIGNoaWxkIGhhcyBleGl0ZWQsIGluZm8gaXMgdGhlIGV4aXQgdmFsdWUKKyAgICAgIDxjb2RlPiA9PSAxLi43ZSwgY2hpbGQgaGFzIGV4aXRlZCwgaW5mbyBpcyB0aGUgc2lnbmFsIG51bWJlci4KKyAgICAgIDxjb2RlPiA9PSA3ZiwgY2hpbGQgaGFzIHN0b3BwZWQsIGluZm8gd2FzIHRoZSBzaWduYWwgbnVtYmVyLgorICAgICAgPGNvZGU+ID09IDgwLCB0aGVyZSB3YXMgYSBjb3JlIGR1bXAuCisqLworICAgCisjZGVmaW5lIFdJRkVYSVRFRCh3KQkoKCh3KSAmIDB4ZmYpID09IDApCisjZGVmaW5lIFdJRlNJR05BTEVEKHcpCSgoKHcpICYgMHg3ZikgPiAwICYmICgoKHcpICYgMHg3ZikgPCAweDdmKSkKKyNkZWZpbmUgV0lGU1RPUFBFRCh3KQkoKCh3KSAmIDB4ZmYpID09IDB4N2YpCisjZGVmaW5lIFdFWElUU1RBVFVTKHcpCSgoKHcpID4+IDgpICYgMHhmZikKKyNkZWZpbmUgV1RFUk1TSUcodykJKCh3KSAmIDB4N2YpCisjZGVmaW5lIFdTVE9QU0lHCVdFWElUU1RBVFVTCisKK3BpZF90IHdhaXQgKGludCAqKTsKK3BpZF90IHdhaXRwaWQgKHBpZF90LCBpbnQgKiwgaW50KTsKKworI2lmZGVmIF9DT01QSUxJTkdfTkVXTElCCitwaWRfdCBfd2FpdCAoaW50ICopOworI2VuZGlmCisKKy8qIFByb3ZpZGUgcHJvdG90eXBlcyBmb3IgbW9zdCBvZiB0aGUgXzxzeXN0ZW1jYWxsPiBuYW1lcyB0aGF0IGFyZQorICAgcHJvdmlkZWQgaW4gbmV3bGliIGZvciBzb21lIGNvbXBpbGVycy4gICovCitwaWRfdCBfd2FpdCAoaW50ICopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK307CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdGFyLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdiMDZkZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS90YXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogdGFyLmgKKyAqLworCisjaWZuZGVmIF9UQVJfSAorI2RlZmluZSBfVEFSX0gKKworLyogR2VuZXJhbCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBUTUFHSUMgCQkidXN0YXIiIC8qIHVzdGFyIHBsdXMgbnVsbCBieXRlLiAqLworI2RlZmluZSBUTUFHTEVOIAk2IAkvKiBMZW5ndGggb2YgdGhlIGFib3ZlLiAqLworI2RlZmluZSBUVkVSU0lPTiAJIjAwIgkvKiAwMCB3aXRob3V0IGEgbnVsbCBieXRlLiAqLworI2RlZmluZSBUVkVSU0xFTgkyCS8qIExlbmd0aCBvZiB0aGUgYWJvdmUuICovCisKKy8qIFR5cGVmbGFnIGZpZWxkIGRlZmluaXRpb25zICovCisjZGVmaW5lIFJFR1RZUEUgCScwJwkvKiBSZWd1bGFyIGZpbGUuICovCisjZGVmaW5lIEFSRUdUWVBFCSdcMCcJLyogUmVndWxhciBmaWxlLiAqLworI2RlZmluZSBMTktUWVBFCQknMScJLyogTGluay4gKi8KKyNkZWZpbmUgU1lNVFlQRQkJJzInCS8qIFN5bWJvbGljIGxpbmsuICovCisjZGVmaW5lIENIUlRZUEUJCSczJwkvKiBDaGFyYWN0ZXIgc3BlY2lhbC4gKi8KKyNkZWZpbmUgQkxLVFlQRQkJJzQnCS8qIEJsb2NrIHNwZWNpYWwuICovCisjZGVmaW5lIERJUlRZUEUJCSc1JwkvKiBEaXJlY3RvcnkuICovCisjZGVmaW5lIEZJRk9UWVBFCSc2JwkvKiBGSUZPIHNwZWNpYWwuICovCisjZGVmaW5lIENPTlRUWVBFCSc3JwkvKiBSZXNlcnZlZC4gKi8KKworLyogTW9kZSBmaWVsZCBiaXQgZGVmaW5pdGlvbnMgKG9jdGFsKSAqLworI2RlZmluZQlUU1VJRAkJMDQwMDAJLyogU2V0IFVJRCBvbiBleGVjdXRpb24uICovCisjZGVmaW5lCVRTR0lECQkwMjAwMAkvKiBTZXQgR0lEIG9uIGV4ZWN1dGlvbi4gKi8KKyNkZWZpbmUJVFNWVFgJCTAxMDAwCS8qIE9uIGRpcmVjdG9yaWVzLCByZXN0cmljdGVkIGRlbGV0aW9uIGZsYWcuICovCisjZGVmaW5lCVRVUkVBRAkJMDA0MDAJLyogUmVhZCBieSBvd25lci4gKi8KKyNkZWZpbmUJVFVXUklURQkJMDAyMDAJLyogV3JpdGUgYnkgb3duZXIuICovCisjZGVmaW5lCVRVRVhFQwkJMDAxMDAJLyogRXhlY3V0ZS9zZWFyY2ggYnkgb3duZXIuICovCisjZGVmaW5lCVRHUkVBRAkJMDAwNDAJLyogUmVhZCBieSBncm91cC4gKi8KKyNkZWZpbmUJVEdXUklURQkJMDAwMjAJLyogV3JpdGUgYnkgZ3JvdXAuICovCisjZGVmaW5lCVRHRVhFQwkJMDAwMTAJLyogRXhlY3V0ZS9zZWFyY2ggYnkgZ3JvdXAuICovCisjZGVmaW5lCVRPUkVBRAkJMDAwMDQJLyogUmVhZCBieSBvdGhlci4gKi8KKyNkZWZpbmUJVE9XUklURQkJMDAwMDIJLyogV3JpdGUgYnkgb3RoZXIuICovCisjZGVmaW5lCVRPRVhFQwkJMDAwMDEJLyogRXhlY3V0ZS9zZWFyY2ggYnkgb3RoZXIuICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3Rlcm1pb3MuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxODIwYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS90ZXJtaW9zLmgKQEAgLTAsMCArMSw3IEBACisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisjaW5jbHVkZSA8c3lzL3Rlcm1pb3MuaD4KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdGdtYXRoLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdGdtYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljODMxMQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS90Z21hdGguaApAQCAtMCwwICsxLDE4NCBAQAorLyogaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvdGdtYXRoLmguaHRtbCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU3RlZmFuIEZhcmZlbGVkZXIuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX1RHTUFUSF9IXworI2RlZmluZQlfVEdNQVRIX0hfCisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaWZkZWYgbG9nMgorI3VuZGVmIGxvZzIKKyNlbmRpZgorCisvKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiA8dGdtYXRoLmg+IHJlcXVpcmVzIHR3byBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQKKyAqIG1hY3JvcyB0byBiZSBkZWZpbmVkOgorICogX190Z19pbXBsX3NpbXBsZSh4LCB5LCB6LCBmbiwgZm5mLCBmbmwsIC4uLikKKyAqCUludm9rZXMgZm5sKCkgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcmVhbCB0eXBlIG9mIHgsIHkgb3IgeiBpcyBsb25nCisgKglkb3VibGUsIGZuKCkgaWYgaXQgaXMgZG91YmxlIG9yIGFueSBoYXMgYW4gaW50ZWdlciB0eXBlLCBhbmQgZm5mKCkKKyAqCW90aGVyd2lzZS4KKyAqIF9fdGdfaW1wbF9mdWxsKHgsIHksIHosIGZuLCBmbmYsIGZubCwgY2ZuLCBjZm5mLCBjZm5sLCAuLi4pCisgKglJbnZva2VzIFtjXWZubCgpIGlmIHRoZSBjb3JyZXNwb25kaW5nIHJlYWwgdHlwZSBvZiB4LCB5IG9yIHogaXMgbG9uZworICoJZG91YmxlLCBbY11mbigpIGlmIGl0IGlzIGRvdWJsZSBvciBhbnkgaGFzIGFuIGludGVnZXIgdHlwZSwgYW5kCisgKglbY11mbmYoKSBvdGhlcndpc2UuICBUaGUgZnVuY3Rpb24gd2l0aCB0aGUgJ2MnIHByZWZpeCBpcyBjYWxsZWQgaWYKKyAqCWFueSBvZiB4LCB5IG9yIHogaXMgYSBjb21wbGV4IG51bWJlci4KKyAqIEJvdGggbWFjcm9zIGNhbGwgdGhlIGNob3NlbiBmdW5jdGlvbiB3aXRoIGFsbCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQKKyAqIHRvIHRoZW0sIGFzIGdpdmVuIGJ5IF9fVkFfQVJHU19fLgorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSBtYWNyb3MgY2Fubm90IGJlIGltcGxlbWVudGVkIHdpdGggQydzID86IG9wZXJhdG9yLAorICogYmVjYXVzZSB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHdob2xlIGV4cHJlc3Npb24gd291bGQgaW5jb3JyZWN0bHkgYmUgbG9uZworICogZG91YmxlIGNvbXBsZXggcmVnYXJkbGVzcyBvZiB0aGUgYXJndW1lbnQgdHlwZXMuCisgKi8KKworLyogcmVxdWlyZXMgR0NDID49IDMuMSAqLworI2lmICFfX0dOVUNfUFJFUkVRICgzLCAxKQorI2Vycm9yICI8dGdtYXRoLmg+IG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBjb21waWxlciIKKyNlbmRpZgorCisjZGVmaW5lCV9fdGdfdHlwZShfX2UsIF9fdCkJCQkJCQlcCisJX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKF9fZSksIF9fdCkKKyNkZWZpbmUJX190Z190eXBlMyhfX2UxLCBfX2UyLCBfX2UzLCBfX3QpCQkJCVwKKwkoX190Z190eXBlKF9fZTEsIF9fdCkgfHwgX190Z190eXBlKF9fZTIsIF9fdCkgfHwgCQlcCisJIF9fdGdfdHlwZShfX2UzLCBfX3QpKQorI2RlZmluZQlfX3RnX3R5cGVfY29ycihfX2UxLCBfX2UyLCBfX2UzLCBfX3QpCQkJCVwKKwkoX190Z190eXBlMyhfX2UxLCBfX2UyLCBfX2UzLCBfX3QpIHx8IAkJCQlcCisJIF9fdGdfdHlwZTMoX19lMSwgX19lMiwgX19lMywgX190IF9Db21wbGV4KSkKKyNkZWZpbmUJX190Z19pbnRlZ2VyKF9fZTEsIF9fZTIsIF9fZTMpCQkJCQlcCisJKCgoX190eXBlb2ZfXyhfX2UxKSkxLjUgPT0gMSkgfHwgKChfX3R5cGVvZl9fKF9fZTIpKTEuNSA9PSAxKSB8fAlcCisJICgoX190eXBlb2ZfXyhfX2UzKSkxLjUgPT0gMSkpCisjZGVmaW5lCV9fdGdfaXNfY29tcGxleChfX2UxLCBfX2UyLCBfX2UzKQkJCQlcCisJKF9fdGdfdHlwZTMoX19lMSwgX19lMiwgX19lMywgZmxvYXQgX0NvbXBsZXgpIHx8CQlcCisJIF9fdGdfdHlwZTMoX19lMSwgX19lMiwgX19lMywgZG91YmxlIF9Db21wbGV4KSB8fAkJXAorCSBfX3RnX3R5cGUzKF9fZTEsIF9fZTIsIF9fZTMsIGxvbmcgZG91YmxlIF9Db21wbGV4KSB8fAkJXAorCSBfX3RnX3R5cGUzKF9fZTEsIF9fZTIsIF9fZTMsIF9fdHlwZW9mX18oX0NvbXBsZXhfSSkpKQorCisjaWZkZWYgX0xEQkxfRVFfREJMCisjZGVmaW5lCV9fdGdfaW1wbF9zaW1wbGUoeCwgeSwgeiwgZm4sIGZuZiwgZm5sLCAuLi4pCQkJXAorCV9fYnVpbHRpbl9jaG9vc2VfZXhwcihfX3RnX3R5cGVfY29ycih4LCB5LCB6LCBsb25nIGRvdWJsZSksCVwKKwkgICAgZm5sKF9fVkFfQVJHU19fKSwgX19idWlsdGluX2Nob29zZV9leHByKAkJCVwKKwkJX190Z190eXBlX2NvcnIoeCwgeSwgeiwgZG91YmxlKSB8fCBfX3RnX2ludGVnZXIoeCwgeSwgeiksXAorCQlmbihfX1ZBX0FSR1NfXyksIGZuZihfX1ZBX0FSR1NfXykpKQorI2Vsc2UKKyNkZWZpbmUJX190Z19pbXBsX3NpbXBsZShfX3gsIF9feSwgX196LCBfX2ZuLCBfX2ZuZiwgX19mbmwsIC4uLikJXAorCShfX3RnX3R5cGVfY29ycihfX3gsIF9feSwgX196LCBkb3VibGUpIHx8IF9fdGdfaW50ZWdlcihfX3gsIF9feSwgX196KSkgXAorCQk/IF9fZm4oX19WQV9BUkdTX18pIDogX19mbmYoX19WQV9BUkdTX18pCisjZW5kaWYKKworI2RlZmluZQlfX3RnX2ltcGxfZnVsbChfX3gsIF9feSwgX196LCBfX2ZuLCBfX2ZuZiwgX19mbmwsIF9fY2ZuLCBfX2NmbmYsIF9fY2ZubCwgLi4uKQlcCisJX19idWlsdGluX2Nob29zZV9leHByKF9fdGdfaXNfY29tcGxleChfX3gsIF9feSwgX196KSwJCVwKKwkgICAgX190Z19pbXBsX3NpbXBsZShfX3gsIF9feSwgX196LCBfX2NmbiwgX19jZm5mLCBfX2NmbmwsIF9fVkFfQVJHU19fKSwJXAorCSAgICBfX3RnX2ltcGxfc2ltcGxlKF9feCwgX195LCBfX3osIF9fZm4sIF9fZm5mLCBfX2ZubCwgX19WQV9BUkdTX18pKQorCisvKiBNYWNyb3MgdG8gc2F2ZSBsb3RzIG9mIHJlcGV0aXRpb24gYmVsb3cgKi8KKyNkZWZpbmUJX190Z19zaW1wbGUoX194LCBfX2ZuKQkJCQkJCVwKKwlfX3RnX2ltcGxfc2ltcGxlKF9feCwgX194LCBfX3gsIF9fZm4sIF9fZm4jI2YsIF9fZm4jI2wsIF9feCkKKyNkZWZpbmUJX190Z19zaW1wbGUyKF9feCwgX195LCBfX2ZuKQkJCQkJXAorCV9fdGdfaW1wbF9zaW1wbGUoX194LCBfX3gsIF9feSwgX19mbiwgX19mbiMjZiwgX19mbiMjbCwgX194LCBfX3kpCisjZGVmaW5lCV9fdGdfc2ltcGxldihfX3gsIF9fZm4sIC4uLikJCQkJCVwKKwlfX3RnX2ltcGxfc2ltcGxlKF9feCwgX194LCBfX3gsIF9fZm4sIF9fZm4jI2YsIF9fZm4jI2wsIF9fVkFfQVJHU19fKQorI2RlZmluZQlfX3RnX2Z1bGwoX194LCBfX2ZuKQkJCQkJCVwKKwlfX3RnX2ltcGxfZnVsbChfX3gsIF9feCwgX194LCBfX2ZuLCBfX2ZuIyNmLCBfX2ZuIyNsLCBjIyNfX2ZuLCBjIyNfX2ZuIyNmLCBjIyNfX2ZuIyNsLCBfX3gpCisKKy8qIDcuMjIjNCAtLSBUaGVzZSBtYWNyb3MgZXhwYW5kIHRvIHJlYWwgb3IgY29tcGxleCBmdW5jdGlvbnMsIGRlcGVuZGluZyBvbgorICogdGhlIHR5cGUgb2YgdGhlaXIgYXJndW1lbnRzLiAqLworI2RlZmluZQlhY29zKF9feCkJCV9fdGdfZnVsbChfX3gsIGFjb3MpCisjZGVmaW5lCWFzaW4oX194KQkJX190Z19mdWxsKF9feCwgYXNpbikKKyNkZWZpbmUJYXRhbihfX3gpCQlfX3RnX2Z1bGwoX194LCBhdGFuKQorI2RlZmluZQlhY29zaChfX3gpCQlfX3RnX2Z1bGwoX194LCBhY29zaCkKKyNkZWZpbmUJYXNpbmgoX194KQkJX190Z19mdWxsKF9feCwgYXNpbmgpCisjZGVmaW5lCWF0YW5oKF9feCkJCV9fdGdfZnVsbChfX3gsIGF0YW5oKQorI2RlZmluZQljb3MoX194KQkJX190Z19mdWxsKF9feCwgY29zKQorI2RlZmluZQlzaW4oX194KQkJX190Z19mdWxsKF9feCwgc2luKQorI2RlZmluZQl0YW4oX194KQkJX190Z19mdWxsKF9feCwgdGFuKQorI2RlZmluZQljb3NoKF9feCkJCV9fdGdfZnVsbChfX3gsIGNvc2gpCisjZGVmaW5lCXNpbmgoX194KQkJX190Z19mdWxsKF9feCwgc2luaCkKKyNkZWZpbmUJdGFuaChfX3gpCQlfX3RnX2Z1bGwoX194LCB0YW5oKQorI2RlZmluZQlleHAoX194KQkJX190Z19mdWxsKF9feCwgZXhwKQorI2RlZmluZQlsb2coX194KQkJX190Z19mdWxsKF9feCwgbG9nKQorI2RlZmluZQlwb3coX194LCBfX3kpCQlfX3RnX2ltcGxfZnVsbChfX3gsIF9feCwgX195LCBwb3csIHBvd2YsIHBvd2wsCVwKKwkJCQkJCWNwb3csIGNwb3dmLCBjcG93bCwgX194LCBfX3kpCisjZGVmaW5lCXNxcnQoX194KQkJX190Z19mdWxsKF9feCwgc3FydCkKKworLyogIlRoZSBjb3JyZXNwb25kaW5nIHR5cGUtZ2VuZXJpYyBtYWNybyBmb3IgZmFicyBhbmQgY2FicyBpcyBmYWJzLiIgKi8KKyNkZWZpbmUJZmFicyhfX3gpCQlfX3RnX2ltcGxfZnVsbChfX3gsIF9feCwgX194LCBmYWJzLCBmYWJzZiwgZmFic2wsCVwKKwkJCQkJCWNhYnMsIGNhYnNmLCBjYWJzbCwgX194KQorCisvKiA3LjIyIzUgLS0gVGhlc2UgbWFjcm9zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGFyZ3VtZW50cyB3aXRoIHJlYWwgdHlwZS4gKi8KKyNkZWZpbmUJYXRhbjIoX194LCBfX3kpCQlfX3RnX3NpbXBsZTIoX194LCBfX3ksIGF0YW4yKQorI2RlZmluZQljYnJ0KF9feCkJCV9fdGdfc2ltcGxlKF9feCwgY2JydCkKKyNkZWZpbmUJY2VpbChfX3gpCQlfX3RnX3NpbXBsZShfX3gsIGNlaWwpCisjZGVmaW5lCWNvcHlzaWduKF9feCwgX195KQlfX3RnX3NpbXBsZTIoX194LCBfX3ksIGNvcHlzaWduKQorI2RlZmluZQllcmYoX194KQkJX190Z19zaW1wbGUoX194LCBlcmYpCisjZGVmaW5lCWVyZmMoX194KQkJX190Z19zaW1wbGUoX194LCBlcmZjKQorI2RlZmluZQlleHAyKF9feCkJCV9fdGdfc2ltcGxlKF9feCwgZXhwMikKKyNkZWZpbmUJZXhwbTEoX194KQkJX190Z19zaW1wbGUoX194LCBleHBtMSkKKyNkZWZpbmUJZmRpbShfX3gsIF9feSkJCV9fdGdfc2ltcGxlMihfX3gsIF9feSwgZmRpbSkKKyNkZWZpbmUJZmxvb3IoX194KQkJX190Z19zaW1wbGUoX194LCBmbG9vcikKKyNkZWZpbmUJZm1hKF9feCwgX195LCBfX3opCV9fdGdfaW1wbF9zaW1wbGUoX194LCBfX3ksIF9feiwgZm1hLCBmbWFmLCBmbWFsLCBcCisJCQkJCQkgX194LCBfX3ksIF9feikKKyNkZWZpbmUJZm1heChfX3gsIF9feSkJCV9fdGdfc2ltcGxlMihfX3gsIF9feSwgZm1heCkKKyNkZWZpbmUJZm1pbihfX3gsIF9feSkJCV9fdGdfc2ltcGxlMihfX3gsIF9feSwgZm1pbikKKyNkZWZpbmUJZm1vZChfX3gsIF9feSkJCV9fdGdfc2ltcGxlMihfX3gsIF9feSwgZm1vZCkKKyNkZWZpbmUJZnJleHAoX194LCBfX3kpCQlfX3RnX3NpbXBsZXYoX194LCBmcmV4cCwgX194LCBfX3kpCisjZGVmaW5lCWh5cG90KF9feCwgX195KQkJX190Z19zaW1wbGUyKF9feCwgX195LCBoeXBvdCkKKyNkZWZpbmUJaWxvZ2IoX194KQkJX190Z19zaW1wbGUoX194LCBpbG9nYikKKyNkZWZpbmUJbGRleHAoX194LCBfX3kpCQlfX3RnX3NpbXBsZXYoX194LCBsZGV4cCwgX194LCBfX3kpCisjZGVmaW5lCWxnYW1tYShfX3gpCQlfX3RnX3NpbXBsZShfX3gsIGxnYW1tYSkKKyNkZWZpbmUJbGxyaW50KF9feCkJCV9fdGdfc2ltcGxlKF9feCwgbGxyaW50KQorI2RlZmluZQlsbHJvdW5kKF9feCkJCV9fdGdfc2ltcGxlKF9feCwgbGxyb3VuZCkKKyNkZWZpbmUJbG9nMTAoX194KQkJX190Z19zaW1wbGUoX194LCBsb2cxMCkKKyNkZWZpbmUJbG9nMXAoX194KQkJX190Z19zaW1wbGUoX194LCBsb2cxcCkKKyNkZWZpbmUJbG9nMihfX3gpCQlfX3RnX3NpbXBsZShfX3gsIGxvZzIpCisjZGVmaW5lCWxvZ2IoX194KQkJX190Z19zaW1wbGUoX194LCBsb2diKQorI2RlZmluZQlscmludChfX3gpCQlfX3RnX3NpbXBsZShfX3gsIGxyaW50KQorI2RlZmluZQlscm91bmQoX194KQkJX190Z19zaW1wbGUoX194LCBscm91bmQpCisjZGVmaW5lCW5lYXJieWludChfX3gpCQlfX3RnX3NpbXBsZShfX3gsIG5lYXJieWludCkKKyNkZWZpbmUJbmV4dGFmdGVyKF9feCwgX195KQlfX3RnX3NpbXBsZTIoX194LCBfX3ksIG5leHRhZnRlcikKKy8qIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZXZlbiBmb3IgX0xEQkxfRVFfREJMIHBsYXRmb3JtcworI2RlZmluZQluZXh0dG93YXJkKF9feCwgX195KQlfX3RnX3NpbXBsZXYoX194LCBuZXh0dG93YXJkLCBfX3gsIF9feSkKKyovCisjZGVmaW5lCXJlbWFpbmRlcihfX3gsIF9feSkJX190Z19zaW1wbGUyKF9feCwgX195LCByZW1haW5kZXIpCisjZGVmaW5lCXJlbXF1byhfX3gsIF9feSwgX196KQlfX3RnX2ltcGxfc2ltcGxlKF9feCwgX194LCBfX3ksIHJlbXF1bywgcmVtcXVvZiwJXAorCQkJCQkJIHJlbXF1b2wsIF9feCwgX195LCBfX3opCisjZGVmaW5lCXJpbnQoX194KQkJX190Z19zaW1wbGUoX194LCByaW50KQorI2RlZmluZQlyb3VuZChfX3gpCQlfX3RnX3NpbXBsZShfX3gsIHJvdW5kKQorI2RlZmluZQlzY2FsYm4oX194LCBfX3kpCV9fdGdfc2ltcGxldihfX3gsIHNjYWxibiwgX194LCBfX3kpCisjZGVmaW5lCXNjYWxibG4oX194LCBfX3kpCV9fdGdfc2ltcGxldihfX3gsIHNjYWxibG4sIF9feCwgX195KQorI2RlZmluZQl0Z2FtbWEoX194KQkJX190Z19zaW1wbGUoX194LCB0Z2FtbWEpCisjZGVmaW5lCXRydW5jKF9feCkJCV9fdGdfc2ltcGxlKF9feCwgdHJ1bmMpCisKKy8qIDcuMjIjNiAtLSBUaGVzZSBtYWNyb3MgYWx3YXlzIGV4cGFuZCB0byBjb21wbGV4IGZ1bmN0aW9ucy4gKi8KKyNkZWZpbmUJY2FyZyhfX3gpCQlfX3RnX3NpbXBsZShfX3gsIGNhcmcpCisjZGVmaW5lCWNpbWFnKF9feCkJCV9fdGdfc2ltcGxlKF9feCwgY2ltYWcpCisjZGVmaW5lCWNvbmooX194KQkJX190Z19zaW1wbGUoX194LCBjb25qKQorI2RlZmluZQljcHJvaihfX3gpCQlfX3RnX3NpbXBsZShfX3gsIGNwcm9qKQorI2RlZmluZQljcmVhbChfX3gpCQlfX3RnX3NpbXBsZShfX3gsIGNyZWFsKQorCisjZW5kaWYgLyogIV9UR01BVEhfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS90aW1lLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NjAyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdGltZS5oCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogdGltZS5oCisgKiAKKyAqIFN0cnVjdCBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggdGltZS4KKyAqLworCisjaWZuZGVmIF9USU1FX0hfCisjZGVmaW5lIF9USU1FX0hfCisKKyNpbmNsdWRlICJfYW5zaS5oIgorI2luY2x1ZGUgPHN5cy9yZWVudC5oPgorCisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNkZWZpbmUgX19uZWVkX05VTEwKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworLyogR2V0IF9DTE9DS1NfUEVSX1NFQ18gKi8KKyNpbmNsdWRlIDxtYWNoaW5lL3RpbWUuaD4KKworI2lmbmRlZiBfQ0xPQ0tTX1BFUl9TRUNfCisjZGVmaW5lIF9DTE9DS1NfUEVSX1NFQ18gMTAwMAorI2VuZGlmCisKKyNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMgX0NMT0NLU19QRVJfU0VDXworI2RlZmluZSBDTEtfVENLIENMT0NLU19QRVJfU0VDCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX0JFR0lOX1NURF9DCisKK3N0cnVjdCB0bQoreworICBpbnQJdG1fc2VjOworICBpbnQJdG1fbWluOworICBpbnQJdG1faG91cjsKKyAgaW50CXRtX21kYXk7CisgIGludAl0bV9tb247CisgIGludAl0bV95ZWFyOworICBpbnQJdG1fd2RheTsKKyAgaW50CXRtX3lkYXk7CisgIGludAl0bV9pc2RzdDsKK307CisKK2Nsb2NrX3QJICAgX0VYRlVOKGNsb2NrLCAgICAodm9pZCkpOworZG91YmxlCSAgIF9FWEZVTihkaWZmdGltZSwgKHRpbWVfdCBfdGltZTIsIHRpbWVfdCBfdGltZTEpKTsKK3RpbWVfdAkgICBfRVhGVU4obWt0aW1lLCAgIChzdHJ1Y3QgdG0gKl90aW1lcHRyKSk7Cit0aW1lX3QJICAgX0VYRlVOKHRpbWUsICAgICAodGltZV90ICpfdGltZXIpKTsKKyNpZm5kZWYgX1JFRU5UX09OTFkKK2NoYXIJICAqX0VYRlVOKGFzY3RpbWUsICAoY29uc3Qgc3RydWN0IHRtICpfdGJsb2NrKSk7CitjaGFyCSAgKl9FWEZVTihjdGltZSwgICAgKGNvbnN0IHRpbWVfdCAqX3RpbWUpKTsKK3N0cnVjdCB0bSAqX0VYRlVOKGdtdGltZSwgICAoY29uc3QgdGltZV90ICpfdGltZXIpKTsKK3N0cnVjdCB0bSAqX0VYRlVOKGxvY2FsdGltZSwoY29uc3QgdGltZV90ICpfdGltZXIpKTsKKyNlbmRpZgorc2l6ZV90CSAgIF9FWEZVTihzdHJmdGltZSwgKGNoYXIgKl9zLCBzaXplX3QgX21heHNpemUsIGNvbnN0IGNoYXIgKl9mbXQsIGNvbnN0IHN0cnVjdCB0bSAqX3QpKTsKKworY2hhcgkgICpfRVhGVU4oYXNjdGltZV9yLAkoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKikpOworY2hhcgkgICpfRVhGVU4oY3RpbWVfciwJKGNvbnN0IHRpbWVfdCAqLCBjaGFyICopKTsKK3N0cnVjdCB0bSAqX0VYRlVOKGdtdGltZV9yLAkoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKSk7CitzdHJ1Y3QgdG0gKl9FWEZVTihsb2NhbHRpbWVfciwJKGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKikpOworCitfRU5EX1NURF9DCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBfX1NUUklDVF9BTlNJX18KK2NoYXIgICAgICAqX0VYRlVOKHN0cnB0aW1lLCAgICAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgdG0gKikpOworX1ZPSUQgICAgICBfRVhGVU4odHpzZXQsCShfVk9JRCkpOworX1ZPSUQgICAgICBfRVhGVU4oX3R6c2V0X3IsCShzdHJ1Y3QgX3JlZW50ICopKTsKKwordHlwZWRlZiBzdHJ1Y3QgX190enJ1bGVfc3RydWN0Cit7CisgIGNoYXIgY2g7CisgIGludCBtOworICBpbnQgbjsKKyAgaW50IGQ7CisgIGludCBzOworICB0aW1lX3QgY2hhbmdlOworICBsb25nIG9mZnNldDsgLyogTWF0Y2ggdHlwZSBvZiBfdGltZXpvbmUuICovCit9IF9fdHpydWxlX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IF9fdHppbmZvX3N0cnVjdAoreworICBpbnQgX190em5vcnRoOworICBpbnQgX190enllYXI7CisgIF9fdHpydWxlX3R5cGUgX190enJ1bGVbMl07Cit9IF9fdHppbmZvX3R5cGU7CisKK19fdHppbmZvX3R5cGUgKl9FWEZVTiAoX19nZXR0emluZm8sIChfVk9JRCkpOworCisvKiBnZXRkYXRlIGZ1bmN0aW9ucyAqLworCisjaWZkZWYgSEFWRV9HRVREQVRFCisjaWZuZGVmIF9SRUVOVF9PTkxZCisjZGVmaW5lIGdldGRhdGVfZXJyICgqX19nZXRkYXRlX2VycigpKQoraW50ICpfRVhGVU4oX19nZXRkYXRlX2VyciwoX1ZPSUQpKTsKKworc3RydWN0IHRtICoJX0VYRlVOKGdldGRhdGUsIChjb25zdCBjaGFyICopKTsKKy8qIGdldGRhdGVfZXJyIGlzIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gaW5kaWNhdGUgdGhlIGVycm9yLgorICAgICAxICB0aGUgREFURU1TSyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwKKyAgICAgMiAgdGhlIHRlbXBsYXRlIGZpbGUgY2Fubm90IGJlIG9wZW5lZCBmb3IgcmVhZGluZywKKyAgICAgMyAgZmFpbGVkIHRvIGdldCBmaWxlIHN0YXR1cyBpbmZvcm1hdGlvbiwKKyAgICAgNCAgdGhlIHRlbXBsYXRlIGZpbGUgaXMgbm90IGEgcmVndWxhciBmaWxlLAorICAgICA1ICBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCB3aGlsZSByZWFkaW5nIHRoZSB0ZW1wbGF0ZSBmaWxlLAorICAgICA2ICBtZW1vcnkgYWxsaWNhdGlvbiBmYWlsZWQgKG5vdCBlbm91Z2ggbWVtb3J5IGF2YWlsYWJsZSksCisgICAgIDcgIHRoZXJlIGlzIG5vIGxpbmUgaW4gdGhlIHRlbXBsYXRlIHRoYXQgbWF0Y2hlcyB0aGUgaW5wdXQsCisgICAgIDggIGludmFsaWQgaW5wdXQgc3BlY2lmaWNhdGlvbiAgKi8KKyNlbmRpZiAvKiAhX1JFRU5UX09OTFkgKi8KKworLyogZ2V0ZGF0ZV9yIHJldHVybnMgdGhlIGVycm9yIGNvZGUgYXMgYWJvdmUgKi8KK2ludAkJX0VYRlVOKGdldGRhdGVfciwgKGNvbnN0IGNoYXIgKiwgc3RydWN0IHRtICopKTsKKyNlbmRpZiAvKiBIQVZFX0dFVERBVEUgKi8KKworLyogZGVmaW5lcyBmb3IgdGhlIG9wZW5ncm91cCBzcGVjaWZpY2F0aW9ucyBEZXJpdmVkIGZyb20gSXNzdWUgMSBvZiB0aGUgU1ZJRC4gICovCitleHRlcm4gX19JTVBPUlQgbG9uZyBfdGltZXpvbmU7CitleHRlcm4gX19JTVBPUlQgaW50IF9kYXlsaWdodDsKK2V4dGVybiBfX0lNUE9SVCBjaGFyICpfdHpuYW1lWzJdOworCisvKiBQT1NJWCBkZWZpbmVzIHRoZSBleHRlcm5hbCB0em5hbWUgYmVpbmcgZGVmaW5lZCBpbiB0aW1lLmggKi8KKyNpZm5kZWYgdHpuYW1lCisjZGVmaW5lIHR6bmFtZSBfdHpuYW1lCisjZW5kaWYKKyNlbmRpZiAvKiAhX19TVFJJQ1RfQU5TSV9fICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvZmVhdHVyZXMuaD4KKworI2lmZGVmIF9fQ1lHV0lOX18KKyNpbmNsdWRlIDxjeWd3aW4vdGltZS5oPgorI2VuZGlmIC8qX19DWUdXSU5fXyovCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9USU1FUlMpCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBDbG9ja3MsIFAxMDAzLjFiLTE5OTMsIHAuIDI2MyAqLworCitpbnQgX0VYRlVOKGNsb2NrX3NldHRpbWUsIChjbG9ja2lkX3QgY2xvY2tfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHApKTsKK2ludCBfRVhGVU4oY2xvY2tfZ2V0dGltZSwgKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCkpOworaW50IF9FWEZVTihjbG9ja19nZXRyZXMsICAoY2xvY2tpZF90IGNsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnJlcykpOworCisvKiBDcmVhdGUgYSBQZXItUHJvY2VzcyBUaW1lciwgUDEwMDMuMWItMTk5MywgcC4gMjY0ICovCisKK2ludCBfRVhGVU4odGltZXJfY3JlYXRlLAorICAoY2xvY2tpZF90IGNsb2NrX2lkLCBzdHJ1Y3Qgc2lnZXZlbnQgKmV2cCwgdGltZXJfdCAqdGltZXJpZCkpOworCisvKiBEZWxldGUgYSBQZXJfcHJvY2VzcyBUaW1lciwgUDEwMDMuMWItMTk5MywgcC4gMjY2ICovCisKK2ludCBfRVhGVU4odGltZXJfZGVsZXRlLCAodGltZXJfdCB0aW1lcmlkKSk7CisKKy8qIFBlci1Qcm9jZXNzIFRpbWVycywgUDEwMDMuMWItMTk5MywgcC4gMjY3ICovCisKK2ludCBfRVhGVU4odGltZXJfc2V0dGltZSwKKyAgKHRpbWVyX3QgdGltZXJpZCwgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqdmFsdWUsCisgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqb3ZhbHVlKSk7CitpbnQgX0VYRlVOKHRpbWVyX2dldHRpbWUsICh0aW1lcl90IHRpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICp2YWx1ZSkpOworaW50IF9FWEZVTih0aW1lcl9nZXRvdmVycnVuLCAodGltZXJfdCB0aW1lcmlkKSk7CisKKy8qIEhpZ2ggUmVzb2x1dGlvbiBTbGVlcCwgUDEwMDMuMWItMTk5MywgcC4gMjY5ICovCisKK2ludCBfRVhGVU4obmFub3NsZWVwLCAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICAqcnF0cCwgc3RydWN0IHRpbWVzcGVjICpybXRwKSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogX1BPU0lYX1RJTUVSUyAqLworCisjaWYgZGVmaW5lZChfUE9TSVhfQ0xPQ0tfU0VMRUNUSU9OKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2ludCBfRVhGVU4oY2xvY2tfbmFub3NsZWVwLAorICAoY2xvY2tpZF90IGNsb2NrX2lkLCBpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcnF0cCwKKyAgIHN0cnVjdCB0aW1lc3BlYyAqcm10cCkpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1BPU0lYX0NMT0NLX1NFTEVDVElPTiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIENQVS10aW1lIENsb2NrIEF0dHJpYnV0ZXMsIFAxMDAzLjRiL0Q4LCBwLiA1NCAqLworCisvKiB2YWx1ZXMgZm9yIHRoZSBjbG9jayBlbmFibGUgYXR0cmlidXRlICovCisKKyNkZWZpbmUgQ0xPQ0tfRU5BQkxFRCAgMSAgLyogY2xvY2sgaXMgZW5hYmxlZCwgaS5lLiBjb3VudGluZyBleGVjdXRpb24gdGltZSAqLworI2RlZmluZSBDTE9DS19ESVNBQkxFRCAwICAvKiBjbG9jayBpcyBkaXNhYmxlZCAqLworCisvKiB2YWx1ZXMgZm9yIHRoZSBwdGhyZWFkIGNwdXRpbWVfY2xvY2tfYWxsb3dlZCBhdHRyaWJ1dGUgKi8KKworI2RlZmluZSBDTE9DS19BTExPV0VEICAgIDEgLyogSWYgYSB0aHJlYWQgaXMgY3JlYXRlZCB3aXRoIHRoaXMgdmFsdWUgYSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBDUFUtdGltZSBjbG9jayBhdHRhY2hlZCB0byB0aGF0IHRocmVhZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBzaGFsbCBiZSBhY2Nlc3NpYmxlLiAqLworI2RlZmluZSBDTE9DS19ESVNBTExPV0VEIDAgLyogSWYgYSB0aHJlYWQgaXMgY3JlYXRlZCB3aXRoIHRoaXMgdmFsdWUsIHRoZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICB0aHJlYWQgc2hhbGwgbm90IGhhdmUgYSBDUFUtdGltZSBjbG9jayAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBhY2Nlc3NpYmxlLiAqLworCisvKiBNYW5pZmVzdCBDb25zdGFudHMsIFAxMDAzLjFiLTE5OTMsIHAuIDI2MiAqLworCisjZGVmaW5lIENMT0NLX1JFQUxUSU1FIChjbG9ja2lkX3QpMQorCisvKiBGbGFnIGluZGljYXRpbmcgdGltZSBpcyAiYWJzb2x1dGUiIHdpdGggcmVzcGVjdCB0byB0aGUgY2xvY2sKKyAgIGFzc29jaWF0ZWQgd2l0aCBhIHRpbWUuICAqLworCisjZGVmaW5lIFRJTUVSX0FCU1RJTUUJNAorCisvKiBNYW5pZmVzdCBDb25zdGFudHMsIFAxMDAzLjRiL0Q4LCBwLiA1NSAqLworCisjaWYgZGVmaW5lZChfUE9TSVhfQ1BVVElNRSkKKworLyogV2hlbiB1c2VkIGluIGEgY2xvY2sgb3IgdGltZXIgZnVuY3Rpb24gY2FsbCwgdGhpcyBpcyBpbnRlcnByZXRlZCBhcworICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIENQVV90aW1lIGNsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgUFJPQ0VTUworICAgbWFraW5nIHRoZSBmdW5jdGlvbiBjYWxsLiAgKi8KKworI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgKGNsb2NraWRfdCkyCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfUE9TSVhfVEhSRUFEX0NQVVRJTUUpCisKKy8qICBXaGVuIHVzZWQgaW4gYSBjbG9jayBvciB0aW1lciBmdW5jdGlvbiBjYWxsLCB0aGlzIGlzIGludGVycHJldGVkIGFzCisgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIENQVV90aW1lIGNsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgVEhSRUFECisgICAgbWFraW5nIHRoZSBmdW5jdGlvbiBjYWxsLiAgKi8KKworI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRCAoY2xvY2tpZF90KTMKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0spCisKKy8qICBUaGUgaWRlbnRpZmllciBmb3IgdGhlIHN5c3RlbS13aWRlIG1vbm90b25pYyBjbG9jaywgd2hpY2ggaXMgZGVmaW5lZAorICogICAgICBhcyBhIGNsb2NrIHdob3NlIHZhbHVlIGNhbm5vdCBiZSBzZXQgdmlhIGNsb2NrX3NldHRpbWUoKSBhbmQgd2hpY2ggCisgKiAgICAgICAgICBjYW5ub3QgaGF2ZSBiYWNrd2FyZCBjbG9jayBqdW1wcy4gKi8KKworI2RlZmluZSBDTE9DS19NT05PVE9OSUMgKGNsb2NraWRfdCk0CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfUE9TSVhfQ1BVVElNRSkKKworLyogQWNjZXNzaW5nIGEgUHJvY2VzcyBDUFUtdGltZSBDTG9jaywgUDEwMDMuNGIvRDgsIHAuIDU1ICovCisKK2ludCBfRVhGVU4oY2xvY2tfZ2V0Y3B1Y2xvY2tpZCwgKHBpZF90IHBpZCwgY2xvY2tpZF90ICpjbG9ja19pZCkpOworCisjZW5kaWYgLyogX1BPU0lYX0NQVVRJTUUgKi8KKworI2lmIGRlZmluZWQoX1BPU0lYX0NQVVRJTUUpIHx8IGRlZmluZWQoX1BPU0lYX1RIUkVBRF9DUFVUSU1FKQorCisvKiBDUFUtdGltZSBDbG9jayBBdHRyaWJ1dGUgQWNjZXNzLCBQMTAwMy40Yi9EOCwgcC4gNTYgKi8KKworaW50IF9FWEZVTihjbG9ja19zZXRlbmFibGVfYXR0ciwgKGNsb2NraWRfdCBjbG9ja19pZCwgaW50IGF0dHIpKTsKK2ludCBfRVhGVU4oY2xvY2tfZ2V0ZW5hYmxlX2F0dHIsIChjbG9ja2lkX3QgY2xvY2tfaWQsIGludCAqYXR0cikpOworCisjZW5kaWYgLyogX1BPU0lYX0NQVVRJTUUgb3IgX1BPU0lYX1RIUkVBRF9DUFVUSU1FICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfVElNRV9IXyAqLworCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdW5jdHJsLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdW5jdHJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0MDc1MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS91bmN0cmwuaApAQCAtMCwwICsxLDQ2IEBACisvKiBGcm9tIGN1cnNlcy5oLiAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfVU5DVFJMX0hfCisjZGVmaW5lIF9VTkNUUkxfSF8KKworI2luY2x1ZGUgPF9hbnNpLmg+CisKKyNkZWZpbmUgdW5jdHJsKGMpCQlfX3VuY3RybFsoYykgJiAweGZmXQorI2RlZmluZSB1bmN0cmxsZW4oY2gpCQlfX3VuY3RybGxlblsoY2gpICYgMHhmZl0KKworZXh0ZXJuIF9fSU1QT1JUIF9DT05TVCBjaGFyICogX0NPTlNUIF9fdW5jdHJsWzI1Nl07CS8qIENvbnRyb2wgc3RyaW5ncy4gKi8KK2V4dGVybiBfX0lNUE9SVCBfQ09OU1QgY2hhciBfX3VuY3RybGxlblsyNTZdOwkvKiBDb250cm9sIHN0cmluZ3MgbGVuZ3RoLiAqLworCisjZW5kaWYgLyogX1VOQ1RSTF9IXyAqLwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3VuaXN0ZC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZmNhODQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvdW5pc3RkLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9VTklTVERfSF8KKyNkZWZpbmUgX1VOSVNURF9IXworCisjIGluY2x1ZGUgPHN5cy91bmlzdGQuaD4KKworI2VuZGlmIC8qIF9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS91dGltZS5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3V0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyODkxYQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS91dGltZS5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPF9hbnNpLmg+CisKKy8qIFRoZSB1dGltZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIGxpYmMvc3lzLzxhcmNoPi9zeXMgaWYgaXQgZXhpc3RzLiAqLworI2luY2x1ZGUgPHN5cy91dGltZS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3V0bXAuaCBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS91dG1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjZjZmOAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS91dG1wLmgKQEAgLTAsMCArMSw4IEBACisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisjaW5jbHVkZSA8c3lzL3V0bXAuaD4KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS93Y2hhci5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3djaGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwN2RkYwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS93Y2hhci5oCkBAIC0wLDAgKzEsMTg3IEBACisjaWZuZGVmIF9XQ0hBUl9IXworI2RlZmluZSBfV0NIQVJfSF8KKworI2luY2x1ZGUgPF9hbnNpLmg+CisKKyNpbmNsdWRlIDxzeXMvcmVlbnQuaD4KKworI2RlZmluZSBfX25lZWRfc2l6ZV90CisjZGVmaW5lIF9fbmVlZF93Y2hhcl90CisjZGVmaW5lIF9fbmVlZF93aW50X3QKKyNkZWZpbmUgX19uZWVkX05VTEwKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2RlZmluZSBfX25lZWRfX192YV9saXN0CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qIEZvciBfbWJzdGF0ZV90IGRlZmluaXRpb24uICovCisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCisvKiBGb3IgX19TVERDX0lTT18xMDY0Nl9fICovCisjaW5jbHVkZSA8c3lzL2ZlYXR1cmVzLmg+CisKKyNpZm5kZWYgV0VPRgorIyBkZWZpbmUgV0VPRiAoKHdpbnRfdCktMSkKKyNlbmRpZgorCisjaWZuZGVmIFdDSEFSX01JTgorI2RlZmluZSBXQ0hBUl9NSU4gMAorI2VuZGlmCisKKyNpZm5kZWYgV0NIQVJfTUFYCisjaWZkZWYgX19XQ0hBUl9NQVhfXworI2RlZmluZSBXQ0hBUl9NQVggX19XQ0hBUl9NQVhfXworI2Vsc2UKKyNkZWZpbmUgV0NIQVJfTUFYIDB4N2ZmZmZmZmZ1CisjZW5kaWYKKyNlbmRpZgorCitfQkVHSU5fU1REX0MKKworLyogQXMgcmVxdWlyZWQgYnkgUE9TSVguMS0yMDA4LCBkZWNsYXJlIHRtIGFzIGluY29tcGxldGUgdHlwZS4KKyAgIFRoZSBhY3R1YWwgZGVmaW5pdGlvbiBpcyBpbiB0aW1lLmguICovCitzdHJ1Y3QgdG07CisKKyNpZm5kZWYgX01CU1RBVEVfVAorI2RlZmluZSBfTUJTVEFURV9UCit0eXBlZGVmIF9tYnN0YXRlX3QgbWJzdGF0ZV90OworI2VuZGlmIC8qIF9NQlNUQVRFX1QgKi8KKword2ludF90CV9FWEZVTihidG93YywgKGludCkpOworaW50CV9FWEZVTih3Y3RvYiwgKHdpbnRfdCkpOworc2l6ZV90CV9FWEZVTihtYnJsZW4sIChjb25zdCBjaGFyICogLCBzaXplX3QsIG1ic3RhdGVfdCAqKSk7CitzaXplX3QJX0VYRlVOKG1icnRvd2MsICh3Y2hhcl90ICogLCBjb25zdCBjaGFyICogLCBzaXplX3QsIG1ic3RhdGVfdCAqKSk7CitzaXplX3QJX0VYRlVOKF9tYnJ0b3djX3IsIChzdHJ1Y3QgX3JlZW50ICosIHdjaGFyX3QgKiAsIGNvbnN0IGNoYXIgKiAsIAorCQkJc2l6ZV90LCBtYnN0YXRlX3QgKikpOworaW50CV9FWEZVTihtYnNpbml0LCAoY29uc3QgbWJzdGF0ZV90ICopKTsKK3NpemVfdAlfRVhGVU4obWJzbnJ0b3djcywgKHdjaGFyX3QgKiAsIGNvbnN0IGNoYXIgKiogLCBzaXplX3QsIHNpemVfdCwKKwkJCW1ic3RhdGVfdCAqKSk7CitzaXplX3QJX0VYRlVOKF9tYnNucnRvd2NzX3IsIChzdHJ1Y3QgX3JlZW50ICosIHdjaGFyX3QgKiAsIGNvbnN0IGNoYXIgKiogLAorCQkJc2l6ZV90LCBzaXplX3QsIG1ic3RhdGVfdCAqKSk7CitzaXplX3QJX0VYRlVOKG1ic3J0b3djcywgKHdjaGFyX3QgKiAsIGNvbnN0IGNoYXIgKiogLCBzaXplX3QsIG1ic3RhdGVfdCAqKSk7CitzaXplX3QJX0VYRlVOKF9tYnNydG93Y3NfciwgKHN0cnVjdCBfcmVlbnQgKiwgd2NoYXJfdCAqICwgY29uc3QgY2hhciAqKiAsIHNpemVfdCwgbWJzdGF0ZV90ICopKTsKK3NpemVfdAlfRVhGVU4od2NydG9tYiwgKGNoYXIgKiAsIHdjaGFyX3QsIG1ic3RhdGVfdCAqKSk7CitzaXplX3QJX0VYRlVOKF93Y3J0b21iX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiAsIHdjaGFyX3QsIG1ic3RhdGVfdCAqKSk7CitzaXplX3QJX0VYRlVOKHdjc25ydG9tYnMsIChjaGFyICogLCBjb25zdCB3Y2hhcl90ICoqICwgc2l6ZV90LCBzaXplX3QsCisJCQltYnN0YXRlX3QgKikpOworc2l6ZV90CV9FWEZVTihfd2NzbnJ0b21ic19yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICogLCBjb25zdCB3Y2hhcl90ICoqICwgCisJCQlzaXplX3QsIHNpemVfdCwgbWJzdGF0ZV90ICopKTsKK3NpemVfdAlfRVhGVU4od2NzcnRvbWJzLCAoY2hhciAqICwgY29uc3Qgd2NoYXJfdCAqKiAsIHNpemVfdCwgbWJzdGF0ZV90ICopKTsKK3NpemVfdAlfRVhGVU4oX3djc3J0b21ic19yLCAoc3RydWN0IF9yZWVudCAqLCBjaGFyICogLCBjb25zdCB3Y2hhcl90ICoqICwgCisJCQlzaXplX3QsIG1ic3RhdGVfdCAqKSk7CitpbnQJX0VYRlVOKHdjc2Nhc2VjbXAsIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKikpOword2NoYXJfdAkqX0VYRlVOKHdjc2NhdCwgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKikpOword2NoYXJfdAkqX0VYRlVOKHdjc2NociwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCkpOworaW50CV9FWEZVTih3Y3NjbXAsIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKikpOworaW50CV9FWEZVTih3Y3Njb2xsLCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopKTsKK3djaGFyX3QJKl9FWEZVTih3Y3NjcHksICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICopKTsKK3djaGFyX3QJKl9FWEZVTih3Y3BjcHksICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICopKTsKK3djaGFyX3QJKl9FWEZVTih3Y3NkdXAsIChjb25zdCB3Y2hhcl90ICopKTsKK3djaGFyX3QJKl9FWEZVTihfd2NzZHVwX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IHdjaGFyX3QgKiApKTsKK3NpemVfdAlfRVhGVU4od2NzY3NwbiwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKSk7CitzaXplX3QgIF9FWEZVTih3Y3NmdGltZSwgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIGNvbnN0IHN0cnVjdCB0bSAqKSk7CitzaXplX3QJX0VYRlVOKHdjc2xjYXQsICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KSk7CitzaXplX3QJX0VYRlVOKHdjc2xjcHksICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KSk7CitzaXplX3QJX0VYRlVOKHdjc2xlbiwgKGNvbnN0IHdjaGFyX3QgKikpOworaW50CV9FWEZVTih3Y3NuY2FzZWNtcCwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpKTsKK3djaGFyX3QJKl9FWEZVTih3Y3NuY2F0LCAod2NoYXJfdCAqICwgY29uc3Qgd2NoYXJfdCAqICwgc2l6ZV90KSk7CitpbnQJX0VYRlVOKHdjc25jbXAsIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KSk7Cit3Y2hhcl90CSpfRVhGVU4od2NzbmNweSwgKHdjaGFyX3QgKiAgLCBjb25zdCB3Y2hhcl90ICogLCBzaXplX3QpKTsKK3djaGFyX3QJKl9FWEZVTih3Y3BuY3B5LCAod2NoYXJfdCAqICAsIGNvbnN0IHdjaGFyX3QgKiAsIHNpemVfdCkpOworc2l6ZV90CV9FWEZVTih3Y3NubGVuLCAoY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpKTsKK3djaGFyX3QJKl9FWEZVTih3Y3NwYnJrLCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopKTsKK3djaGFyX3QJKl9FWEZVTih3Y3NyY2hyLCAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KSk7CitzaXplX3QJX0VYRlVOKHdjc3NwbiwgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKSk7Cit3Y2hhcl90CSpfRVhGVU4od2Nzc3RyLCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopKTsKK3djaGFyX3QJKl9FWEZVTih3Y3N0b2ssICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKikpOworZG91YmxlIF9FWEZVTih3Y3N0b2QsIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopKTsKK2RvdWJsZSBfRVhGVU4oX3djc3RvZF9yLCAoc3RydWN0IF9yZWVudCAqLCBjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopKTsKK2Zsb2F0IF9FWEZVTih3Y3N0b2YsIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopKTsKK2Zsb2F0IF9FWEZVTihfd2NzdG9mX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKikpOworaW50CV9FWEZVTih3Y3N3aWR0aCwgKGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KSk7CitzaXplX3QJX0VYRlVOKHdjc3hmcm0sICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KSk7CitpbnQJX0VYRlVOKHdjd2lkdGgsIChjb25zdCB3Y2hhcl90KSk7Cit3Y2hhcl90CSpfRVhGVU4od21lbWNociwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KSk7CitpbnQJX0VYRlVOKHdtZW1jbXAsIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KSk7Cit3Y2hhcl90CSpfRVhGVU4od21lbWNweSwgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIHNpemVfdCkpOword2NoYXJfdAkqX0VYRlVOKHdtZW1tb3ZlLCAod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCkpOword2NoYXJfdAkqX0VYRlVOKHdtZW1zZXQsICh3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCkpOworCitsb25nICAgIF9FWEZVTih3Y3N0b2wsIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCkpOworbG9uZyBsb25nIF9FWEZVTih3Y3N0b2xsLCAoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpKTsKK3Vuc2lnbmVkIGxvbmcgX0VYRlVOKHdjc3RvdWwsIChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCkpOwordW5zaWduZWQgbG9uZyBsb25nIF9FWEZVTih3Y3N0b3VsbCwgKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KSk7Citsb25nICAgIF9FWEZVTihfd2NzdG9sX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KSk7Citsb25nIGxvbmcgX0VYRlVOKF93Y3N0b2xsX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KSk7Cit1bnNpZ25lZCBsb25nIF9FWEZVTihfd2NzdG91bF9yLCAoc3RydWN0IF9yZWVudCAqLCBjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCkpOwordW5zaWduZWQgbG9uZyBsb25nIF9FWEZVTihfd2NzdG91bGxfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpKTsKKword2ludF90IF9FWEZVTihmZ2V0d2MsIChfX0ZJTEUgKikpOword2NoYXJfdCAqX0VYRlVOKGZnZXR3cywgKHdjaGFyX3QgKiwgaW50LCBfX0ZJTEUgKikpOword2ludF90IF9FWEZVTihmcHV0d2MsICh3Y2hhcl90LCBfX0ZJTEUgKikpOworaW50IF9FWEZVTihmcHV0d3MsIChjb25zdCB3Y2hhcl90ICosIF9fRklMRSAqKSk7CitpbnQgX0VYRlVOIChmd2lkZSwgKF9fRklMRSAqLCBpbnQpKTsKK3dpbnRfdCBfRVhGVU4gKGdldHdjLCAoX19GSUxFICopKTsKK3dpbnRfdCBfRVhGVU4gKGdldHdjaGFyLCAodm9pZCkpOword2ludF90IF9FWEZVTihwdXR3YywgKHdjaGFyX3QsIF9fRklMRSAqKSk7Cit3aW50X3QgX0VYRlVOKHB1dHdjaGFyLCAod2NoYXJfdCkpOword2ludF90IF9FWEZVTiAodW5nZXR3YywgKHdpbnRfdCB3YywgX19GSUxFICopKTsKKword2ludF90IF9FWEZVTihfZmdldHdjX3IsIChzdHJ1Y3QgX3JlZW50ICosIF9fRklMRSAqKSk7Cit3Y2hhcl90ICpfRVhGVU4oX2ZnZXR3c19yLCAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90ICosIGludCwgX19GSUxFICopKTsKK3dpbnRfdCBfRVhGVU4oX2ZwdXR3Y19yLCAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90LCBfX0ZJTEUgKikpOworaW50IF9FWEZVTihfZnB1dHdzX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IHdjaGFyX3QgKiwgX19GSUxFICopKTsKK2ludCBfRVhGVU4gKF9md2lkZV9yLCAoc3RydWN0IF9yZWVudCAqLCBfX0ZJTEUgKiwgaW50KSk7Cit3aW50X3QgX0VYRlVOIChfZ2V0d2NfciwgKHN0cnVjdCBfcmVlbnQgKiwgX19GSUxFICopKTsKK3dpbnRfdCBfRVhGVU4gKF9nZXR3Y2hhcl9yLCAoc3RydWN0IF9yZWVudCAqcHRyKSk7Cit3aW50X3QgX0VYRlVOKF9wdXR3Y19yLCAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90LCBfX0ZJTEUgKikpOword2ludF90IF9FWEZVTihfcHV0d2NoYXJfciwgKHN0cnVjdCBfcmVlbnQgKiwgd2NoYXJfdCkpOword2ludF90IF9FWEZVTiAoX3VuZ2V0d2NfciwgKHN0cnVjdCBfcmVlbnQgKiwgd2ludF90IHdjLCBfX0ZJTEUgKikpOworCitfX0ZJTEUgKl9FWEZVTiAob3Blbl93bWVtc3RyZWFtLCAod2NoYXJfdCAqKiwgc2l6ZV90ICopKTsKK19fRklMRSAqX0VYRlVOIChfb3Blbl93bWVtc3RyZWFtX3IsIChzdHJ1Y3QgX3JlZW50ICosIHdjaGFyX3QgKiosIHNpemVfdCAqKSk7CisKKyNpZm5kZWYgX19WQUxJU1QKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfX1ZBTElTVCBfX2dudWNfdmFfbGlzdAorI2Vsc2UKKyNkZWZpbmUgX19WQUxJU1QgY2hhcioKKyNlbmRpZgorI2VuZGlmCisKK2ludAlfRVhGVU4oZndwcmludGYsIChfX0ZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pKTsKK2ludAlfRVhGVU4oc3dwcmludGYsICh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pKTsKK2ludAlfRVhGVU4odmZ3cHJpbnRmLCAoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgX19WQUxJU1QpKTsKK2ludAlfRVhGVU4odnN3cHJpbnRmLCAod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgX19WQUxJU1QpKTsKK2ludAlfRVhGVU4odndwcmludGYsIChjb25zdCB3Y2hhcl90ICosIF9fVkFMSVNUKSk7CitpbnQJX0VYRlVOKHdwcmludGYsIChjb25zdCB3Y2hhcl90ICosIC4uLikpOworCitpbnQJX0VYRlVOKF9md3ByaW50Zl9yLCAoc3RydWN0IF9yZWVudCAqLCBfX0ZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pKTsKK2ludAlfRVhGVU4oX3N3cHJpbnRmX3IsIChzdHJ1Y3QgX3JlZW50ICosIHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIC4uLikpOworaW50CV9FWEZVTihfdmZ3cHJpbnRmX3IsIChzdHJ1Y3QgX3JlZW50ICosIF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIF9fVkFMSVNUKSk7CitpbnQJX0VYRlVOKF92c3dwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgd2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgX19WQUxJU1QpKTsKK2ludAlfRVhGVU4oX3Z3cHJpbnRmX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IHdjaGFyX3QgKiwgX19WQUxJU1QpKTsKK2ludAlfRVhGVU4oX3dwcmludGZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pKTsKKworaW50CV9FWEZVTihmd3NjYW5mLCAoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKSk7CitpbnQJX0VYRlVOKHN3c2NhbmYsIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKSk7CitpbnQJX0VYRlVOKHZmd3NjYW5mLCAoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgX19WQUxJU1QpKTsKK2ludAlfRVhGVU4odnN3c2NhbmYsIChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgX19WQUxJU1QpKTsKK2ludAlfRVhGVU4odndzY2FuZiwgKGNvbnN0IHdjaGFyX3QgKiwgX19WQUxJU1QpKTsKK2ludAlfRVhGVU4od3NjYW5mLCAoY29uc3Qgd2NoYXJfdCAqLCAuLi4pKTsKKworaW50CV9FWEZVTihfZndzY2FuZl9yLCAoc3RydWN0IF9yZWVudCAqLCBfX0ZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pKTsKK2ludAlfRVhGVU4oX3N3c2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIC4uLikpOworaW50CV9FWEZVTihfdmZ3c2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgX19WQUxJU1QpKTsKK2ludAlfRVhGVU4oX3Zzd3NjYW5mX3IsIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBfX1ZBTElTVCkpOworaW50CV9FWEZVTihfdndzY2FuZl9yLCAoc3RydWN0IF9yZWVudCAqLCBjb25zdCB3Y2hhcl90ICosIF9fVkFMSVNUKSk7CitpbnQJX0VYRlVOKF93c2NhbmZfciwgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pKTsKKworI2RlZmluZSBnZXR3YyhmcCkJZmdldHdjKGZwKQorI2RlZmluZSBwdXR3Yyh3YyxmcCkJZnB1dHdjKCh3YyksIChmcCkpCisjZGVmaW5lIGdldHdjaGFyKCkJZmdldHdjKF9SRUVOVC0+X3N0ZGluKQorI2RlZmluZSBwdXR3Y2hhcih3YykJZnB1dHdjKCh3YyksIF9SRUVOVC0+X3N0ZG91dCkKKworX0VORF9TVERfQworCisjZW5kaWYgLyogX1dDSEFSX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvd2N0eXBlLmggYi9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvd2N0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyYzlkZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvaW5jbHVkZS93Y3R5cGUuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9XQ1RZUEVfSF8KKyNkZWZpbmUgX1dDVFlQRV9IXworCisjaW5jbHVkZSA8X2Fuc2kuaD4KKyNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+CisKKyNkZWZpbmUgX19uZWVkX3dpbnRfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZuZGVmIFdFT0YKKyMgZGVmaW5lIFdFT0YgKCh3aW50X3QpLTEpCisjZW5kaWYKKworX0JFR0lOX1NURF9DCisKKyNpZm5kZWYgX1dDVFlQRV9UCisjZGVmaW5lIF9XQ1RZUEVfVAordHlwZWRlZiBpbnQgd2N0eXBlX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfV0NUUkFOU19UCisjZGVmaW5lIF9XQ1RSQU5TX1QKK3R5cGVkZWYgaW50IHdjdHJhbnNfdDsKKyNlbmRpZgorCitpbnQJX0VYRlVOKGlzd2FscGhhLCAod2ludF90KSk7CitpbnQJX0VYRlVOKGlzd2FsbnVtLCAod2ludF90KSk7CitpbnQJX0VYRlVOKGlzd2JsYW5rLCAod2ludF90KSk7CitpbnQJX0VYRlVOKGlzd2NudHJsLCAod2ludF90KSk7CitpbnQJX0VYRlVOKGlzd2N0eXBlLCAod2ludF90LCB3Y3R5cGVfdCkpOworaW50CV9FWEZVTihpc3dkaWdpdCwgKHdpbnRfdCkpOworaW50CV9FWEZVTihpc3dncmFwaCwgKHdpbnRfdCkpOworaW50CV9FWEZVTihpc3dsb3dlciwgKHdpbnRfdCkpOworaW50CV9FWEZVTihpc3dwcmludCwgKHdpbnRfdCkpOworaW50CV9FWEZVTihpc3dwdW5jdCwgKHdpbnRfdCkpOworaW50CV9FWEZVTihpc3dzcGFjZSwgKHdpbnRfdCkpOworaW50CV9FWEZVTihpc3d1cHBlciwgKHdpbnRfdCkpOworaW50CV9FWEZVTihpc3d4ZGlnaXQsICh3aW50X3QpKTsKK3dpbnRfdAlfRVhGVU4odG93Y3RyYW5zLCAod2ludF90LCB3Y3RyYW5zX3QpKTsKK3dpbnRfdAlfRVhGVU4odG93dXBwZXIsICh3aW50X3QpKTsKK3dpbnRfdAlfRVhGVU4odG93bG93ZXIsICh3aW50X3QpKTsKK3djdHJhbnNfdCBfRVhGVU4od2N0cmFucywgKGNvbnN0IGNoYXIgKikpOword2N0eXBlX3QgX0VYRlVOKHdjdHlwZSwgKGNvbnN0IGNoYXIgKikpOworCitfRU5EX1NURF9DCisKKyNlbmRpZiAvKiBfV0NUWVBFX0hfICovCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2luY2x1ZGUvd29yZGV4cC5oIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3dvcmRleHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjg3NjgxCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9pbmNsdWRlL3dvcmRleHAuaApAQCAtMCwwICsxLDUzIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMTAgYnkgIFJlZCBIYXQsIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCisgKiBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfV09SREVYUF9IXworI2RlZmluZSBfV09SREVYUF9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworc3RydWN0IF93b3JkZXhwX3QKK3sKKyAgc2l6ZV90IHdlX3dvcmRjOwkvKiBDb3VudCBvZiB3b3JkcyBtYXRjaGVkIGJ5IHdvcmRzLiAqLworICBjaGFyICoqd2Vfd29yZHY7CS8qIFBvaW50ZXIgdG8gbGlzdCBvZiBleHBhbmRlZCB3b3Jkcy4gKi8KKyAgc2l6ZV90IHdlX29mZnM7CS8qIFNsb3RzIHRvIHJlc2VydmUgYXQgdGhlIGJlZ2lubmluZyBvZiB3ZV93b3Jkdi4gKi8KK307CisKK3R5cGVkZWYgc3RydWN0IF93b3JkZXhwX3Qgd29yZGV4cF90OworCisjZGVmaW5lCVdSREVfRE9PRkZTCTB4MDAwMQkvKiBVc2Ugd2Vfb2Zmcy4gKi8KKyNkZWZpbmUJV1JERV9BUFBFTkQJMHgwMDAyCS8qIEFwcGVuZCB0byBvdXRwdXQgZnJvbSBwcmV2aW91cyBjYWxsLiAqLworI2RlZmluZQlXUkRFX05PQ01ECTB4MDAwNAkvKiBEb24ndCBwZXJmb3JtIGNvbW1hbmQgc3Vic3RpdHV0aW9uLiAqLworI2RlZmluZQlXUkRFX1JFVVNFCTB4MDAwOAkvKiBwd29yZGV4cCBwb2ludHMgdG8gYSB3b3JkZXhwX3Qgc3RydWN0IHJldHVybmVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwcmV2aW91cyBzdWNjZXNzZnVsIGNhbGwgdG8gd29yZGV4cC4gKi8KKyNkZWZpbmUJV1JERV9TSE9XRVJSCTB4MDAxMAkvKiBQcmludCBlcnJvciBtZXNzYWdlcyB0byBzdGRlcnIuICovCisjZGVmaW5lCVdSREVfVU5ERUYJMHgwMDIwCS8qIFJlcG9ydCBhdHRlbXB0IHRvIGV4cGFuZCB1bmRlZmluZWQgc2hlbGwgdmFyaWFibGUuICovCisKK2VudW0geworICBXUkRFX1NVQ0NFU1MsCisgIFdSREVfTk9TUEFDRSwKKyAgV1JERV9CQURDSEFSLAorICBXUkRFX0JBRFZBTCwKKyAgV1JERV9DTURTVUIsCisgIFdSREVfU1lOVEFYLAorICBXUkRFX05PU1lTCit9OworCisvKiBOb3RlOiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHdvcmRleHAgcmVxdWlyZXMgYSB2ZXJzaW9uIG9mIGJhc2gKKyAgIHRoYXQgc3VwcG9ydHMgdGhlIC0td29yZGV4cCBhbmQgLS1wcm90ZWN0ZWQgYXJndW1lbnRzIHRvIGJlIHByZXNlbnQKKyAgIG9uIHRoZSBzeXN0ZW0uICBJdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBXUkRFX1VOREVGIGZsYWcuICovCitpbnQgd29yZGV4cChjb25zdCBjaGFyICosIHdvcmRleHBfdCAqLCBpbnQpOwordm9pZCB3b3JkZnJlZSh3b3JkZXhwX3QgKik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfV09SREVYUF9IXyAgKi8KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2FlbS12YWxpZGF0aW9uLnNwZWNzIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvYWVtLXZhbGlkYXRpb24uc3BlY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwYzkyZAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2FlbS12YWxpZGF0aW9uLnNwZWNzCkBAIC0wLDAgKzEsMTIgQEAKKyMgYWVtLXZlLnNwZWNzCisjCisjIFNwZWMgZmlsZSBmb3IgQUFyY2g2NCBiYXJlbWV0YWwgbmV3bGliLCBsaWJnbG9zcyBvbiB0aGUgdmFsaWRhdGlvbiBwbGF0Zm9ybQorIyB3aXRoIEFuZ2VsQVBJIHNlbWktaG9zdGluZy4KKworJXJlbmFtZSBsaWIgbGliYworCisqbGliZ2xvc3M6CistbHJkaW1vbgorCisqbGliOgorY3B1LWluaXQvcmRpbW9uLWFlbS1lbDMubyVzIC0tc3RhcnQtZ3JvdXAgJShsaWJjKSAlKGxpYmdsb3NzKSAtLWVuZC1ncm91cApkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvYWVtLXZlLnNwZWNzIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvYWVtLXZlLnNwZWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWQzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9hZW0tdmUuc3BlY3MKQEAgLTAsMCArMSwxOSBAQAorIyBhZW0tdmUuc3BlY3MKKyMKKyMgU3BlYyBmaWxlIGZvciBBQXJjaDY0IGJhcmVtZXRhbCBuZXdsaWIsIGxpYmdsb3NzIG9uIFZFIHBsYXRmb3JtIHdpdGggQW5nZWxBUEkKKyMgc2VtaS1ob3N0aW5nLgorIworIyBUaGlzIFNwZWMgZmlsZSBpcyBhbHNvIGFwcHJvcHJpYXRlIGZvciB0aGUgZm91bmRhdGlvbiBtb2RlbC4KKworJXJlbmFtZSBsaW5rIG9sZF9saW5rCisKKypsaW5rOgorLVR0ZXh0LXNlZ21lbnQgMHg4MDAwMDAwMCAlKG9sZF9saW5rKQorCislcmVuYW1lIGxpYiBsaWJjCisKKypsaWJnbG9zczoKKy1scmRpbW9uCisKKypsaWI6CitjcHUtaW5pdC9yZGltb24tYWVtLWVsMy5vJXMgLS1zdGFydC1ncm91cCAlKGxpYmMpICUobGliZ2xvc3MpIC0tZW5kLWdyb3VwCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9jcHUtaW5pdC9yZGltb24tYWVtLWVsMy5vIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvY3B1LWluaXQvcmRpbW9uLWFlbS1lbDMubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjAxNzA5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvY3B1LWluaXQvcmRpbW9uLWFlbS1lbDMubwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9jcnQwLm8gYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9jcnQwLm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4NjM5YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2NydDAubwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZi54IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTFlYjAzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueApAQCAtMCwwICsxLDIxMiBAQAorLyogRGVmYXVsdCBsaW5rZXIgc2NyaXB0LCBmb3Igbm9ybWFsIGV4ZWN1dGFibGVzICovCitPVVRQVVRfRk9STUFUKCJlbGY2NC1saXR0bGVhYXJjaDY0IiwgImVsZjY0LWJpZ2FhcmNoNjQiLAorCSAgICAgICJlbGY2NC1saXR0bGVhYXJjaDY0IikKK09VVFBVVF9BUkNIKGFhcmNoNjQpCitFTlRSWShfc3RhcnQpCitTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIvYWFyY2g2NC1ub25lLWVsZiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIiKTsgU0VBUkNIX0RJUigiPS9saWIvYWFyY2g2NC1ub25lLWVsZiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIvYWFyY2g2NC1ub25lLWVsZiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwNDAwMDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwNDAwMDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbGEuaW5pdCAgICAgIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbGEudGV4dCAgICAgIDogeyAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbGEucm9kYXRhICAgIDogeyAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8gLnJlbGEuZGF0YS5yZWwucm8uKiAucmVsYS5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhICAgICAgOiB7ICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsYS50ZGF0YQkgIDogeyAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGJzcwkgIDogeyAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLmN0b3JzICAgICA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsYS5kdG9ycyAgICAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbGEuZ290ICAgICAgIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbGEuaXBsdCAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0LmV4aXQgLnRleHQuZXhpdC4qKQorICAgICooLnRleHQuc3RhcnR1cCAudGV4dC5zdGFydHVwLiopCisgICAgKigudGV4dC5ob3QgLnRleHQuaG90LiopCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmdvdC5wbHQgICAgICAgIDogeyAqKC5nb3QucGx0KSAgKiguaWdvdC5wbHQpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueGJuIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueGJuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODE3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZi54Ym4KQEAgLTAsMCArMSwyMTIgQEAKKy8qIFNjcmlwdCBmb3IgLU46IG1peCB0ZXh0IGFuZCBkYXRhIG9uIHNhbWUgcGFnZTsgZG9uJ3QgYWxpZ24gZGF0YSAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtbGl0dGxlYWFyY2g2NCIsICJlbGY2NC1iaWdhYXJjaDY0IiwKKwkgICAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIpCitPVVRQVVRfQVJDSChhYXJjaDY0KQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCk7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvIC5yZWxhLmRhdGEucmVsLnJvLiogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWxhLmdvdCAgICAgICA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbGEuYnNzICAgICAgIDogeyAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IC47CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdCkgKiguaWdvdCkgfQorICAuZ290LnBsdCAgICAgICAgOiB7ICooLmdvdC5wbHQpICAqKC5pZ290LnBsdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgX19kYXRhX3N0YXJ0ID0gLiA7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgLiA9IC47CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAgMHg4MDAwMCA6CisgIHsKKyAgICBfc3RhY2sgPSAuOworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZi54YyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnhjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYjRmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZi54YwpAQCAtMCwwICsxLDIxMyBAQAorLyogU2NyaXB0IGZvciAteiBjb21icmVsb2M6IGNvbWJpbmUgYW5kIHNvcnQgcmVsb2Mgc2VjdGlvbnMgKi8KK09VVFBVVF9GT1JNQVQoImVsZjY0LWxpdHRsZWFhcmNoNjQiLCAiZWxmNjQtYmlnYWFyY2g2NCIsCisJICAgICAgImVsZjY0LWxpdHRsZWFhcmNoNjQiKQorT1VUUFVUX0FSQ0goYWFyY2g2NCkKK0VOVFJZKF9zdGFydCkKK1NFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYi9hYXJjaDY0LW5vbmUtZWxmIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xvY2FsL2xpYiIpOyBTRUFSQ0hfRElSKCI9L2xpYi9hYXJjaDY0LW5vbmUtZWxmIik7IFNFQVJDSF9ESVIoIj0vbGliIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYi9hYXJjaDY0LW5vbmUtZWxmIik7IFNFQVJDSF9ESVIoIj0vdXNyL2xpYiIpOworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4MDA0MDAwMDApKTsgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4MDA0MDAwMDApOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsYS5keW4gICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaW5pdCkKKyAgICAgICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbGEuZmluaSkKKyAgICAgICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsYS5jdG9ycykKKyAgICAgICooLnJlbGEuZHRvcnMpCisgICAgICAqKC5yZWxhLmdvdCkKKyAgICAgICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0LmV4aXQgLnRleHQuZXhpdC4qKQorICAgICooLnRleHQuc3RhcnR1cCAudGV4dC5zdGFydHVwLiopCisgICAgKigudGV4dC5ob3QgLnRleHQuaG90LiopCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmdvdC5wbHQgICAgICAgIDogeyAqKC5nb3QucGx0KSAgKiguaWdvdC5wbHQpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueG4gYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZi54bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY0OWFjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueG4KQEAgLTAsMCArMSwyMTIgQEAKKy8qIFNjcmlwdCBmb3IgLW46IG1peCB0ZXh0IGFuZCBkYXRhIG9uIHNhbWUgcGFnZSAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtbGl0dGxlYWFyY2g2NCIsICJlbGY2NC1iaWdhYXJjaDY0IiwKKwkgICAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIpCitPVVRQVVRfQVJDSChhYXJjaDY0KQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCk7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvIC5yZWxhLmRhdGEucmVsLnJvLiogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWxhLmdvdCAgICAgICA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbGEuYnNzICAgICAgIDogeyAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290KSAqKC5pZ290KSB9CisgIC5nb3QucGx0ICAgICAgICA6IHsgKiguZ290LnBsdCkgICooLmlnb3QucGx0KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnhyIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0MjU1NQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnhyCkBAIC0wLDAgKzEsMTQzIEBACisvKiBTY3JpcHQgZm9yIGxkIC1yOiBsaW5rIHdpdGhvdXQgcmVsb2NhdGlvbiAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtbGl0dGxlYWFyY2g2NCIsICJlbGY2NC1iaWdhYXJjaDY0IiwKKwkgICAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIpCitPVVRQVVRfQVJDSChhYXJjaDY0KQorIC8qIEZvciBzb21lIHJlYXNvbiwgdGhlIFNvbGFyaXMgbGlua2VyIG1ha2VzIGJhZCBleGVjdXRhYmxlcworICBpZiBnbGQgLXIgaXMgdXNlZCBhbmQgdGhlIGludGVybWVkaWF0ZSBmaWxlIGhhcyBzZWN0aW9ucyBzdGFydGluZworICBhdCBub24temVybyBhZGRyZXNzZXMuICBDb3VsZCBiZSBhIFNvbGFyaXMgbGQgYnVnLCBjb3VsZCBiZSBhIEdOVSBsZAorICBidWcuICBCdXQgZm9yIG5vdyBhc3NpZ25pbmcgdGhlIHplcm8gdm1hcyB3b3Jrcy4gICovCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLmludGVycCAgICAgICAwIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgIDAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAwIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgIDAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgIDAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gIDAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kIDA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAwOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbGEuaW5pdCAgICAwIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbGEudGV4dCAgICAwIDogeyAqKC5yZWxhLnRleHQpIH0KKyAgLnJlbGEuZmluaSAgICAwIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbGEucm9kYXRhICAwIDogeyAqKC5yZWxhLnJvZGF0YSkgfQorICAucmVsYS5kYXRhLnJlbC5ybyAwIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvKSB9CisgIC5yZWxhLmRhdGEgICAgMCA6IHsgKigucmVsYS5kYXRhKSB9CisgIC5yZWxhLnRkYXRhCTAgOiB7ICooLnJlbGEudGRhdGEpIH0KKyAgLnJlbGEudGJzcwkwIDogeyAqKC5yZWxhLnRic3MpIH0KKyAgLnJlbGEuY3RvcnMgICAwIDogeyAqKC5yZWxhLmN0b3JzKSB9CisgIC5yZWxhLmR0b3JzICAgMCA6IHsgKigucmVsYS5kdG9ycykgfQorICAucmVsYS5nb3QgICAgIDAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWxhLmJzcyAgICAgMCA6IHsgKigucmVsYS5ic3MpIH0KKyAgLnJlbGEuaXBsdCAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgIDAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAwIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAwIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAwIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgMCA6CisgIHsKKyAgICAqKC50ZXh0IC5zdHViKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5maW5pICAgICAgICAgMCA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9ID0wCisgIC5yb2RhdGEgICAgICAgMCA6IHsgKigucm9kYXRhKSB9CisgIC5yb2RhdGExICAgICAgMCA6IHsgKigucm9kYXRhMSkgfQorICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAwIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAwIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUKKyAgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaGVzZSBzZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBTdW4vT3JhY2xlIEMrKyBjb21waWxlci4gICovCisgIC5leGNlcHRpb25fcmFuZ2VzIDAgOiBPTkxZX0lGX1JPIHsgKiguZXhjZXB0aW9uX3JhbmdlcworICAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAwIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAwIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAwIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJMCA6IHsgKigudGRhdGEpIH0KKyAgLnRic3MJCTAgOiB7ICooLnRic3MpIH0KKyAgLnByZWluaXRfYXJyYXkgICAwIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5qY3IgICAgICAgICAgMCA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZHluYW1pYyAgICAgIDAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAwIDogeyAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmdvdC5wbHQgICAgICAwIDogeyAqKC5nb3QucGx0KSAgKiguaWdvdC5wbHQpIH0KKyAgLmRhdGEgICAgICAgICAwIDoKKyAgeworICAgICooLmRhdGEpCisgIH0KKyAgLmRhdGExICAgICAgICAwIDogeyAqKC5kYXRhMSkgfQorICAuYnNzICAgICAgICAgIDAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICB9CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8pIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAwIDoKKyAgeworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnhzIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1OTdjZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnhzCkBAIC0wLDAgKzEsMjAzIEBACisvKiBTY3JpcHQgZm9yIGxkIC0tc2hhcmVkOiBsaW5rIHNoYXJlZCBsaWJyYXJ5ICovCitPVVRQVVRfRk9STUFUKCJlbGY2NC1saXR0bGVhYXJjaDY0IiwgImVsZjY0LWJpZ2FhcmNoNjQiLAorCSAgICAgICJlbGY2NC1saXR0bGVhYXJjaDY0IikKK09VVFBVVF9BUkNIKGFhcmNoNjQpCitFTlRSWShfc3RhcnQpCitTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIvYWFyY2g2NC1ub25lLWVsZiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9sb2NhbC9saWIiKTsgU0VBUkNIX0RJUigiPS9saWIvYWFyY2g2NC1ub25lLWVsZiIpOyBTRUFSQ0hfRElSKCI9L2xpYiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIvYWFyY2g2NC1ub25lLWVsZiIpOyBTRUFSQ0hfRElSKCI9L3Vzci9saWIiKTsKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbGEuaW5pdCAgICAgIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbGEudGV4dCAgICAgIDogeyAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbGEucm9kYXRhICAgIDogeyAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8gLnJlbGEuZGF0YS5yZWwucm8uKiAucmVsYS5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhICAgICAgOiB7ICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsYS50ZGF0YQkgIDogeyAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGJzcwkgIDogeyAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLmN0b3JzICAgICA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsYS5kdG9ycyAgICAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbGEuZ290ICAgICAgIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbGEuaXBsdCAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290KSAqKC5pZ290KSB9CisgIC5nb3QucGx0ICAgICAgICA6IHsgKiguZ290LnBsdCkgICooLmlnb3QucGx0KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnhzYyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnhzYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFlZTYyCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueHNjCkBAIC0wLDAgKzEsMjAyIEBACisvKiBTY3JpcHQgZm9yIC0tc2hhcmVkIC16IGNvbWJyZWxvYzogc2hhcmVkIGxpYnJhcnksIGNvbWJpbmUgJiBzb3J0IHJlbG9jcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtbGl0dGxlYWFyY2g2NCIsICJlbGY2NC1iaWdhYXJjaDY0IiwKKwkgICAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIpCitPVVRQVVRfQVJDSChhYXJjaDY0KQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDApICsgU0laRU9GX0hFQURFUlM7CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0LmV4aXQgLnRleHQuZXhpdC4qKQorICAgICooLnRleHQuc3RhcnR1cCAudGV4dC5zdGFydHVwLiopCisgICAgKigudGV4dC5ob3QgLnRleHQuaG90LiopCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmdvdC5wbHQgICAgICAgIDogeyAqKC5nb3QucGx0KSAgKiguaWdvdC5wbHQpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueHN3IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDBjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZi54c3cKQEAgLTAsMCArMSwyMDEgQEAKKy8qIFNjcmlwdCBmb3IgLS1zaGFyZWQgLXogY29tYnJlbG9jIC16IG5vdyAteiByZWxybzogc2hhcmVkIGxpYnJhcnksIGNvbWJpbmUgJiBzb3J0IHJlbG9jcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtbGl0dGxlYWFyY2g2NCIsICJlbGY2NC1iaWdhYXJjaDY0IiwKKwkgICAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIpCitPVVRQVVRfQVJDSChhYXJjaDY0KQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDApICsgU0laRU9GX0hFQURFUlM7CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0LmV4aXQgLnRleHQuZXhpdC4qKQorICAgICooLnRleHQuc3RhcnR1cCAudGV4dC5zdGFydHVwLiopCisgICAgKigudGV4dC5ob3QgLnRleHQuaG90LiopCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnh1IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1MTFlOQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmLnh1CkBAIC0wLDAgKzEsMTQ0IEBACisvKiBTY3JpcHQgZm9yIGxkIC1VcjogbGluayB3L291dCByZWxvY2F0aW9uLCBkbyBjcmVhdGUgY29uc3RydWN0b3JzICovCitPVVRQVVRfRk9STUFUKCJlbGY2NC1saXR0bGVhYXJjaDY0IiwgImVsZjY0LWJpZ2FhcmNoNjQiLAorCSAgICAgICJlbGY2NC1saXR0bGVhYXJjaDY0IikKK09VVFBVVF9BUkNIKGFhcmNoNjQpCisgLyogRm9yIHNvbWUgcmVhc29uLCB0aGUgU29sYXJpcyBsaW5rZXIgbWFrZXMgYmFkIGV4ZWN1dGFibGVzCisgIGlmIGdsZCAtciBpcyB1c2VkIGFuZCB0aGUgaW50ZXJtZWRpYXRlIGZpbGUgaGFzIHNlY3Rpb25zIHN0YXJ0aW5nCisgIGF0IG5vbi16ZXJvIGFkZHJlc3Nlcy4gIENvdWxkIGJlIGEgU29sYXJpcyBsZCBidWcsIGNvdWxkIGJlIGEgR05VIGxkCisgIGJ1Zy4gIEJ1dCBmb3Igbm93IGFzc2lnbmluZyB0aGUgemVybyB2bWFzIHdvcmtzLiAgKi8KK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuaW50ZXJwICAgICAgIDAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgMCA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgIDAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgMCA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgMCA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgMCA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgMDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yIDA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsYS5pbml0ICAgIDAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsYS50ZXh0ICAgIDAgOiB7ICooLnJlbGEudGV4dCkgfQorICAucmVsYS5maW5pICAgIDAgOiB7ICooLnJlbGEuZmluaSkgfQorICAucmVsYS5yb2RhdGEgIDAgOiB7ICooLnJlbGEucm9kYXRhKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvIDAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8pIH0KKyAgLnJlbGEuZGF0YSAgICAwIDogeyAqKC5yZWxhLmRhdGEpIH0KKyAgLnJlbGEudGRhdGEJMCA6IHsgKigucmVsYS50ZGF0YSkgfQorICAucmVsYS50YnNzCTAgOiB7ICooLnJlbGEudGJzcykgfQorICAucmVsYS5jdG9ycyAgIDAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAwIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWxhLmdvdCAgICAgMCA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbGEuYnNzICAgICAwIDogeyAqKC5yZWxhLmJzcykgfQorICAucmVsYS5pcGx0ICAgIDAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgIDAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgIDAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAwIDoKKyAgeworICAgICooLnRleHQgLnN0dWIpCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAwIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0gPTAKKyAgLnJvZGF0YSAgICAgICAwIDogeyAqKC5yb2RhdGEpIH0KKyAgLnJvZGF0YTEgICAgICAwIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgMCA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzIDAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkwIDogeyAqKC50ZGF0YSkgfQorICAudGJzcwkJMCA6IHsgKigudGJzcykgfQorICAucHJlaW5pdF9hcnJheSAgIDAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmpjciAgICAgICAgICAwIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5keW5hbWljICAgICAgMCA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgIDAgOiB7ICooLmdvdCkgKiguaWdvdCkgfQorICAuZ290LnBsdCAgICAgIDAgOiB7ICooLmdvdC5wbHQpICAqKC5pZ290LnBsdCkgfQorICAuZGF0YSAgICAgICAgIDAgOgorICB7CisgICAgKiguZGF0YSkKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgIDAgOiB7ICooLmRhdGExKSB9CisgIC5ic3MgICAgICAgICAgMCA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgIH0KKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbykgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgIDAgOgorICB7CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueHcgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZi54dwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWE4NmJkCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGYueHcKQEAgLTAsMCArMSwyMTIgQEAKKy8qIFNjcmlwdCBmb3IgLXogY29tYnJlbG9jIC16IG5vdyAteiByZWxybzogY29tYmluZSBhbmQgc29ydCByZWxvYyBzZWN0aW9ucyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtbGl0dGxlYWFyY2g2NCIsICJlbGY2NC1iaWdhYXJjaDY0IiwKKwkgICAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIpCitPVVRQVVRfQVJDSChhYXJjaDY0KQorRU5UUlkoX3N0YXJ0KQorU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbG9jYWwvbGliIik7IFNFQVJDSF9ESVIoIj0vbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS9saWIiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliL2FhcmNoNjQtbm9uZS1lbGYiKTsgU0VBUkNIX0RJUigiPS91c3IvbGliIik7CitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCk7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUKKyAgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaGVzZSBzZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBTdW4vT3JhY2xlIEMrKyBjb21waWxlci4gICovCisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JPIHsgKiguZXhjZXB0aW9uX3JhbmdlcworICAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTihDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSArICguICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnggYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWFhODNjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLngKQEAgLTAsMCArMSwyMTEgQEAKKy8qIERlZmF1bHQgbGlua2VyIHNjcmlwdCwgZm9yIG5vcm1hbCBleGVjdXRhYmxlcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtYmlnYWFyY2g2NCIsICJlbGY2NC1iaWdhYXJjaDY0IiwKKwkgICAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIpCitPVVRQVVRfQVJDSChhYXJjaDY0KQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4MDA0MDAwMDApKTsgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4MDA0MDAwMDApOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS5maW5pICAgICAgOiB7ICooLnJlbGEuZmluaSkgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyAucmVsYS5kYXRhLnJlbC5yby4qIC5yZWxhLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5yZWxhLmRhdGEgICAgICA6IHsgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWxhLnRkYXRhCSAgOiB7ICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsYS50YnNzCSAgOiB7ICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbGEuY3RvcnMgICAgIDogeyAqKC5yZWxhLmN0b3JzKSB9CisgIC5yZWxhLmR0b3JzICAgICA6IHsgKigucmVsYS5kdG9ycykgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWxhLmJzcyAgICAgICA6IHsgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5pcGx0ICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUKKyAgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaGVzZSBzZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBTdW4vT3JhY2xlIEMrKyBjb21waWxlci4gICovCisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JPIHsgKiguZXhjZXB0aW9uX3JhbmdlcworICAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTihDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSArICguICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdCkgKiguaWdvdCkgfQorICAuZ290LnBsdCAgICAgICAgOiB7ICooLmdvdC5wbHQpICAqKC5pZ290LnBsdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgX19kYXRhX3N0YXJ0ID0gLiA7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgLiA9IC47CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAgMHg4MDAwMCA6CisgIHsKKyAgICBfc3RhY2sgPSAuOworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueGJuIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnhibgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzY1MjkzCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnhibgpAQCAtMCwwICsxLDIxMSBAQAorLyogU2NyaXB0IGZvciAtTjogbWl4IHRleHQgYW5kIGRhdGEgb24gc2FtZSBwYWdlOyBkb24ndCBhbGlnbiBkYXRhICovCitPVVRQVVRfRk9STUFUKCJlbGY2NC1iaWdhYXJjaDY0IiwgImVsZjY0LWJpZ2FhcmNoNjQiLAorCSAgICAgICJlbGY2NC1saXR0bGVhYXJjaDY0IikKK09VVFBVVF9BUkNIKGFhcmNoNjQpCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCk7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvIC5yZWxhLmRhdGEucmVsLnJvLiogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWxhLmdvdCAgICAgICA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbGEuYnNzICAgICAgIDogeyAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IC47CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdCkgKiguaWdvdCkgfQorICAuZ290LnBsdCAgICAgICAgOiB7ICooLmdvdC5wbHQpICAqKC5pZ290LnBsdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgX19kYXRhX3N0YXJ0ID0gLiA7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgLiA9IC47CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAgMHg4MDAwMCA6CisgIHsKKyAgICBfc3RhY2sgPSAuOworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueGMgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2ZTE4OQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmYi54YwpAQCAtMCwwICsxLDIxMiBAQAorLyogU2NyaXB0IGZvciAteiBjb21icmVsb2M6IGNvbWJpbmUgYW5kIHNvcnQgcmVsb2Mgc2VjdGlvbnMgKi8KK09VVFBVVF9GT1JNQVQoImVsZjY0LWJpZ2FhcmNoNjQiLCAiZWxmNjQtYmlnYWFyY2g2NCIsCisJICAgICAgImVsZjY0LWxpdHRsZWFhcmNoNjQiKQorT1VUUFVUX0FSQ0goYWFyY2g2NCkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwNDAwMDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwNDAwMDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbGEuZHluICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmluaXQpCisgICAgICAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWxhLmZpbmkpCisgICAgICAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbGEuY3RvcnMpCisgICAgICAqKC5yZWxhLmR0b3JzKQorICAgICAgKigucmVsYS5nb3QpCisgICAgICAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290KSAqKC5pZ290KSB9CisgIC5nb3QucGx0ICAgICAgICA6IHsgKiguZ290LnBsdCkgICooLmlnb3QucGx0KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmYi54biBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmYi54bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODk4Zjk3Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnhuCkBAIC0wLDAgKzEsMjExIEBACisvKiBTY3JpcHQgZm9yIC1uOiBtaXggdGV4dCBhbmQgZGF0YSBvbiBzYW1lIHBhZ2UgKi8KK09VVFBVVF9GT1JNQVQoImVsZjY0LWJpZ2FhcmNoNjQiLCAiZWxmNjQtYmlnYWFyY2g2NCIsCisJICAgICAgImVsZjY0LWxpdHRsZWFhcmNoNjQiKQorT1VUUFVUX0FSQ0goYWFyY2g2NCkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwNDAwMDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDAwNDAwMDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbGEuaW5pdCAgICAgIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbGEudGV4dCAgICAgIDogeyAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbGEucm9kYXRhICAgIDogeyAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8gLnJlbGEuZGF0YS5yZWwucm8uKiAucmVsYS5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhICAgICAgOiB7ICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsYS50ZGF0YQkgIDogeyAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGJzcwkgIDogeyAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLmN0b3JzICAgICA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsYS5kdG9ycyAgICAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbGEuZ290ICAgICAgIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbGEuaXBsdCAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0LmV4aXQgLnRleHQuZXhpdC4qKQorICAgICooLnRleHQuc3RhcnR1cCAudGV4dC5zdGFydHVwLiopCisgICAgKigudGV4dC5ob3QgLnRleHQuaG90LiopCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICB9ID0wCisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9ID0wCisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmdvdC5wbHQgICAgICAgIDogeyAqKC5nb3QucGx0KSAgKiguaWdvdC5wbHQpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnhyIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnhyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZWNmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHIKQEAgLTAsMCArMSwxNDMgQEAKKy8qIFNjcmlwdCBmb3IgbGQgLXI6IGxpbmsgd2l0aG91dCByZWxvY2F0aW9uICovCitPVVRQVVRfRk9STUFUKCJlbGY2NC1iaWdhYXJjaDY0IiwgImVsZjY0LWJpZ2FhcmNoNjQiLAorCSAgICAgICJlbGY2NC1saXR0bGVhYXJjaDY0IikKK09VVFBVVF9BUkNIKGFhcmNoNjQpCisgLyogRm9yIHNvbWUgcmVhc29uLCB0aGUgU29sYXJpcyBsaW5rZXIgbWFrZXMgYmFkIGV4ZWN1dGFibGVzCisgIGlmIGdsZCAtciBpcyB1c2VkIGFuZCB0aGUgaW50ZXJtZWRpYXRlIGZpbGUgaGFzIHNlY3Rpb25zIHN0YXJ0aW5nCisgIGF0IG5vbi16ZXJvIGFkZHJlc3Nlcy4gIENvdWxkIGJlIGEgU29sYXJpcyBsZCBidWcsIGNvdWxkIGJlIGEgR05VIGxkCisgIGJ1Zy4gIEJ1dCBmb3Igbm93IGFzc2lnbmluZyB0aGUgemVybyB2bWFzIHdvcmtzLiAgKi8KK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuaW50ZXJwICAgICAgIDAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgMCA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgIDAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgMCA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgMCA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgMCA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgMDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yIDA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsYS5pbml0ICAgIDAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsYS50ZXh0ICAgIDAgOiB7ICooLnJlbGEudGV4dCkgfQorICAucmVsYS5maW5pICAgIDAgOiB7ICooLnJlbGEuZmluaSkgfQorICAucmVsYS5yb2RhdGEgIDAgOiB7ICooLnJlbGEucm9kYXRhKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvIDAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8pIH0KKyAgLnJlbGEuZGF0YSAgICAwIDogeyAqKC5yZWxhLmRhdGEpIH0KKyAgLnJlbGEudGRhdGEJMCA6IHsgKigucmVsYS50ZGF0YSkgfQorICAucmVsYS50YnNzCTAgOiB7ICooLnJlbGEudGJzcykgfQorICAucmVsYS5jdG9ycyAgIDAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAwIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWxhLmdvdCAgICAgMCA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbGEuYnNzICAgICAwIDogeyAqKC5yZWxhLmJzcykgfQorICAucmVsYS5pcGx0ICAgIDAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfSA9MAorICAucGx0ICAgICAgICAgIDAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgIDAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAwIDoKKyAgeworICAgICooLnRleHQgLnN0dWIpCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAwIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0gPTAKKyAgLnJvZGF0YSAgICAgICAwIDogeyAqKC5yb2RhdGEpIH0KKyAgLnJvZGF0YTEgICAgICAwIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgMCA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzIDAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkwIDogeyAqKC50ZGF0YSkgfQorICAudGJzcwkJMCA6IHsgKigudGJzcykgfQorICAucHJlaW5pdF9hcnJheSAgIDAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmpjciAgICAgICAgICAwIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5keW5hbWljICAgICAgMCA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgIDAgOiB7ICooLmdvdCkgKiguaWdvdCkgfQorICAuZ290LnBsdCAgICAgIDAgOiB7ICooLmdvdC5wbHQpICAqKC5pZ290LnBsdCkgfQorICAuZGF0YSAgICAgICAgIDAgOgorICB7CisgICAgKiguZGF0YSkKKyAgfQorICAuZGF0YTEgICAgICAgIDAgOiB7ICooLmRhdGExKSB9CisgIC5ic3MgICAgICAgICAgMCA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgIH0KKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbykgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgIDAgOgorICB7CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnhzIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnhzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzJmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHMKQEAgLTAsMCArMSwyMDIgQEAKKy8qIFNjcmlwdCBmb3IgbGQgLS1zaGFyZWQ6IGxpbmsgc2hhcmVkIGxpYnJhcnkgKi8KK09VVFBVVF9GT1JNQVQoImVsZjY0LWJpZ2FhcmNoNjQiLCAiZWxmNjQtYmlnYWFyY2g2NCIsCisJICAgICAgImVsZjY0LWxpdHRsZWFhcmNoNjQiKQorT1VUUFVUX0FSQ0goYWFyY2g2NCkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbGEuaW5pdCAgICAgIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbGEudGV4dCAgICAgIDogeyAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbGEucm9kYXRhICAgIDogeyAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8gLnJlbGEuZGF0YS5yZWwucm8uKiAucmVsYS5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhICAgICAgOiB7ICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikgfQorICAucmVsYS50ZGF0YQkgIDogeyAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGJzcwkgIDogeyAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLmN0b3JzICAgICA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsYS5kdG9ycyAgICAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbGEuZ290ICAgICAgIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbGEuaXBsdCAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290KSAqKC5pZ290KSB9CisgIC5nb3QucGx0ICAgICAgICA6IHsgKiguZ290LnBsdCkgICooLmlnb3QucGx0KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmYi54c2MgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyY2E0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHNjCkBAIC0wLDAgKzEsMjAxIEBACisvKiBTY3JpcHQgZm9yIC0tc2hhcmVkIC16IGNvbWJyZWxvYzogc2hhcmVkIGxpYnJhcnksIGNvbWJpbmUgJiBzb3J0IHJlbG9jcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmNjQtYmlnYWFyY2g2NCIsICJlbGY2NC1iaWdhYXJjaDY0IiwKKwkgICAgICAiZWxmNjQtbGl0dGxlYWFyY2g2NCIpCitPVVRQVVRfQVJDSChhYXJjaDY0KQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsYS5keW4gICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaW5pdCkKKyAgICAgICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbGEuZmluaSkKKyAgICAgICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsYS5jdG9ycykKKyAgICAgICooLnJlbGEuZHRvcnMpCisgICAgICAqKC5yZWxhLmdvdCkKKyAgICAgICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopCisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0gPTAKKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA9MAorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfSA9MAorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290KSAqKC5pZ290KSB9CisgIC5nb3QucGx0ICAgICAgICA6IHsgKiguZ290LnBsdCkgICooLmlnb3QucGx0KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmYi54c3cgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHN3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMWIzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHN3CkBAIC0wLDAgKzEsMjAwIEBACisvKiBTY3JpcHQgZm9yIC0tc2hhcmVkIC16IGNvbWJyZWxvYyAteiBub3cgLXogcmVscm86IHNoYXJlZCBsaWJyYXJ5LCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjY0LWJpZ2FhcmNoNjQiLCAiZWxmNjQtYmlnYWFyY2g2NCIsCisJICAgICAgImVsZjY0LWxpdHRsZWFhcmNoNjQiKQorT1VUUFVUX0FSQ0goYWFyY2g2NCkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMCkgKyBTSVpFT0ZfSEVBREVSUzsKKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbGEuZHluICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmluaXQpCisgICAgICAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWxhLmZpbmkpCisgICAgICAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbGEuY3RvcnMpCisgICAgICAqKC5yZWxhLmR0b3JzKQorICAgICAgKigucmVsYS5nb3QpCisgICAgICAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKQorICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUKKyAgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaGVzZSBzZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBTdW4vT3JhY2xlIEMrKyBjb21waWxlci4gICovCisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JPIHsgKiguZXhjZXB0aW9uX3JhbmdlcworICAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTihDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSArICguICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnh1IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FhcmNoNjRlbGZiLnh1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2IxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHUKQEAgLTAsMCArMSwxNDQgQEAKKy8qIFNjcmlwdCBmb3IgbGQgLVVyOiBsaW5rIHcvb3V0IHJlbG9jYXRpb24sIGRvIGNyZWF0ZSBjb25zdHJ1Y3RvcnMgKi8KK09VVFBVVF9GT1JNQVQoImVsZjY0LWJpZ2FhcmNoNjQiLCAiZWxmNjQtYmlnYWFyY2g2NCIsCisJICAgICAgImVsZjY0LWxpdHRsZWFhcmNoNjQiKQorT1VUUFVUX0FSQ0goYWFyY2g2NCkKKyAvKiBGb3Igc29tZSByZWFzb24sIHRoZSBTb2xhcmlzIGxpbmtlciBtYWtlcyBiYWQgZXhlY3V0YWJsZXMKKyAgaWYgZ2xkIC1yIGlzIHVzZWQgYW5kIHRoZSBpbnRlcm1lZGlhdGUgZmlsZSBoYXMgc2VjdGlvbnMgc3RhcnRpbmcKKyAgYXQgbm9uLXplcm8gYWRkcmVzc2VzLiAgQ291bGQgYmUgYSBTb2xhcmlzIGxkIGJ1ZywgY291bGQgYmUgYSBHTlUgbGQKKyAgYnVnLiAgQnV0IGZvciBub3cgYXNzaWduaW5nIHRoZSB6ZXJvIHZtYXMgd29ya3MuICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC5pbnRlcnAgICAgICAgMCA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAwIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgMCA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAwIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAwIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAwIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAwOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgMDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWxhLmluaXQgICAgMCA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWxhLnRleHQgICAgMCA6IHsgKigucmVsYS50ZXh0KSB9CisgIC5yZWxhLmZpbmkgICAgMCA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWxhLnJvZGF0YSAgMCA6IHsgKigucmVsYS5yb2RhdGEpIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsYS5kYXRhLnJlbC5ybykgfQorICAucmVsYS5kYXRhICAgIDAgOiB7ICooLnJlbGEuZGF0YSkgfQorICAucmVsYS50ZGF0YQkwIDogeyAqKC5yZWxhLnRkYXRhKSB9CisgIC5yZWxhLnRic3MJMCA6IHsgKigucmVsYS50YnNzKSB9CisgIC5yZWxhLmN0b3JzICAgMCA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsYS5kdG9ycyAgIDAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbGEuZ290ICAgICAwIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsYS5ic3MgICAgIDAgOiB7ICooLnJlbGEuYnNzKSB9CisgIC5yZWxhLmlwbHQgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgMCA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgMCA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgMCA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgIDAgOgorICB7CisgICAgKigudGV4dCAuc3R1YikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA9MAorICAuZmluaSAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfSA9MAorICAucm9kYXRhICAgICAgIDAgOiB7ICooLnJvZGF0YSkgfQorICAucm9kYXRhMSAgICAgIDAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgMCA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgMCA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAwIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgMCA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgMCA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgMCA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCTAgOiB7ICooLnRkYXRhKSB9CisgIC50YnNzCQkwIDogeyAqKC50YnNzKSB9CisgIC5wcmVpbml0X2FycmF5ICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgfQorICAuamNyICAgICAgICAgIDAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmR5bmFtaWMgICAgICAwIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgMCA6IHsgKiguZ290KSAqKC5pZ290KSB9CisgIC5nb3QucGx0ICAgICAgMCA6IHsgKiguZ290LnBsdCkgICooLmlnb3QucGx0KSB9CisgIC5kYXRhICAgICAgICAgMCA6CisgIHsKKyAgICAqKC5kYXRhKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgMCA6IHsgKiguZGF0YTEpIH0KKyAgLmJzcyAgICAgICAgICAwIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgfQorICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgMCA6CisgIHsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHcgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYWFyY2g2NGVsZmIueHcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2NmI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hYXJjaDY0ZWxmYi54dwpAQCAtMCwwICsxLDIxMSBAQAorLyogU2NyaXB0IGZvciAteiBjb21icmVsb2MgLXogbm93IC16IHJlbHJvOiBjb21iaW5lIGFuZCBzb3J0IHJlbG9jIHNlY3Rpb25zICovCitPVVRQVVRfRk9STUFUKCJlbGY2NC1iaWdhYXJjaDY0IiwgImVsZjY0LWJpZ2FhcmNoNjQiLAorCSAgICAgICJlbGY2NC1saXR0bGVhYXJjaDY0IikKK09VVFBVVF9BUkNIKGFhcmNoNjQpCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHgwMDQwMDAwMCk7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWxhLmR5biAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pbml0KQorICAgICAgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsYS5maW5pKQorICAgICAgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbGEuZGF0YSAucmVsYS5kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWxhLmN0b3JzKQorICAgICAgKigucmVsYS5kdG9ycykKKyAgICAgICooLnJlbGEuZ290KQorICAgICAgKigucmVsYS5ic3MgLnJlbGEuYnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9ID0wCisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0gPTAKKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0gPTAKKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUKKyAgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaGVzZSBzZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBTdW4vT3JhY2xlIEMrKyBjb21waWxlci4gICovCisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JPIHsgKiguZXhjZXB0aW9uX3JhbmdlcworICAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTihDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSArICguICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZi54IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZi54Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5N2FhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLngKQEAgLTAsMCArMSwyMzcgQEAKKy8qIERlZmF1bHQgbGlua2VyIHNjcmlwdCwgZm9yIG5vcm1hbCBleGVjdXRhYmxlcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWJpZ2FybSIsCisJICAgICAgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHg4MDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDgwMDApOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmluaXQgICAgICAgOiB7ICooLnJlbC5pbml0KSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWwudGV4dCAgICAgICA6IHsgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWwuZmluaSAgICAgICA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAgIDogeyAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbC5kYXRhLnJlbC5ybyAucmVsLmRhdGEucmVsLnJvLiogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvIC5yZWxhLmRhdGEucmVsLnJvLiogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0KKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0KKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9zdGFydCA9IC4pOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9lbmQgPSAuKTsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueGJuIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZi54Ym4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzNmMyNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueGJuCkBAIC0wLDAgKzEsMjM3IEBACisvKiBTY3JpcHQgZm9yIC1OOiBtaXggdGV4dCBhbmQgZGF0YSBvbiBzYW1lIHBhZ2U7IGRvbid0IGFsaWduIGRhdGEgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4ODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHg4MDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8gLnJlbC5kYXRhLnJlbC5yby4qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyAucmVsYS5kYXRhLnJlbC5yby4qIC5yZWxhLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5yZWwuZGF0YSAgICAgICA6IHsgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWxhLmRhdGEgICAgICA6IHsgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWwudGRhdGEJICA6IHsgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWxhLnRkYXRhCSAgOiB7ICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsLnRic3MJICA6IHsgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsYS50YnNzCSAgOiB7ICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbC5jdG9ycyAgICAgIDogeyAqKC5yZWwuY3RvcnMpIH0KKyAgLnJlbGEuY3RvcnMgICAgIDogeyAqKC5yZWxhLmN0b3JzKSB9CisgIC5yZWwuZHRvcnMgICAgICA6IHsgKigucmVsLmR0b3JzKSB9CisgIC5yZWxhLmR0b3JzICAgICA6IHsgKigucmVsYS5kdG9ycykgfQorICAucmVsLmdvdCAgICAgICAgOiB7ICooLnJlbC5nb3QpIH0KKyAgLnJlbGEuZ290ICAgICAgIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsLmJzcyAgICAgICAgOiB7ICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbGEuYnNzICAgICAgIDogeyAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWwuaXBsdCAgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5pcGx0ICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9CisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9CisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9CisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfc3RhcnQgPSAuKTsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfZW5kID0gLik7CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IC47CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZi54YyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlZjI3MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueGMKQEAgLTAsMCArMSwyNDAgQEAKKy8qIFNjcmlwdCBmb3IgLXogY29tYnJlbG9jOiBjb21iaW5lIGFuZCBzb3J0IHJlbG9jIHNlY3Rpb25zICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDgwMDApKTsgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4ODAwMCk7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuZHluICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLmluaXQpCisgICAgICAqKC5yZWwudGV4dCAucmVsLnRleHQuKiAucmVsLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWwuZmluaSkKKyAgICAgICooLnJlbC5yb2RhdGEgLnJlbC5yb2RhdGEuKiAucmVsLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWwuZGF0YS5yZWwucm8gLnJlbC5kYXRhLnJlbC5yby4qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopCisgICAgICAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsLmN0b3JzKQorICAgICAgKigucmVsLmR0b3JzKQorICAgICAgKigucmVsLmdvdCkKKyAgICAgICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEuZHluICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmluaXQpCisgICAgICAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWxhLmZpbmkpCisgICAgICAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbGEuY3RvcnMpCisgICAgICAqKC5yZWxhLmR0b3JzKQorICAgICAgKigucmVsYS5nb3QpCisgICAgICAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0KKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0KKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9zdGFydCA9IC4pOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9lbmQgPSAuKTsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueG4gYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnhuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYzE2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnhuCkBAIC0wLDAgKzEsMjM3IEBACisvKiBTY3JpcHQgZm9yIC1uOiBtaXggdGV4dCBhbmQgZGF0YSBvbiBzYW1lIHBhZ2UgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4ODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHg4MDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8gLnJlbC5kYXRhLnJlbC5yby4qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyAucmVsYS5kYXRhLnJlbC5yby4qIC5yZWxhLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5yZWwuZGF0YSAgICAgICA6IHsgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWxhLmRhdGEgICAgICA6IHsgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWwudGRhdGEJICA6IHsgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWxhLnRkYXRhCSAgOiB7ICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsLnRic3MJICA6IHsgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsYS50YnNzCSAgOiB7ICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbC5jdG9ycyAgICAgIDogeyAqKC5yZWwuY3RvcnMpIH0KKyAgLnJlbGEuY3RvcnMgICAgIDogeyAqKC5yZWxhLmN0b3JzKSB9CisgIC5yZWwuZHRvcnMgICAgICA6IHsgKigucmVsLmR0b3JzKSB9CisgIC5yZWxhLmR0b3JzICAgICA6IHsgKigucmVsYS5kdG9ycykgfQorICAucmVsLmdvdCAgICAgICAgOiB7ICooLnJlbC5nb3QpIH0KKyAgLnJlbGEuZ290ICAgICAgIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsLmJzcyAgICAgICAgOiB7ICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbGEuYnNzICAgICAgIDogeyAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWwuaXBsdCAgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5pcGx0ICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9CisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9CisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9CisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfc3RhcnQgPSAuKTsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfZW5kID0gLik7CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290LnBsdCkgKiguaWdvdC5wbHQpICooLmdvdCkgKiguaWdvdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgX19kYXRhX3N0YXJ0ID0gLiA7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgLiA9IC47CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAgMHg4MDAwMCA6CisgIHsKKyAgICBfc3RhY2sgPSAuOworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnhyIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZi54cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGY2YTFlCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZi54cgpAQCAtMCwwICsxLDE2NCBAQAorLyogU2NyaXB0IGZvciBsZCAtcjogbGluayB3aXRob3V0IHJlbG9jYXRpb24gKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorIC8qIEZvciBzb21lIHJlYXNvbiwgdGhlIFNvbGFyaXMgbGlua2VyIG1ha2VzIGJhZCBleGVjdXRhYmxlcworICBpZiBnbGQgLXIgaXMgdXNlZCBhbmQgdGhlIGludGVybWVkaWF0ZSBmaWxlIGhhcyBzZWN0aW9ucyBzdGFydGluZworICBhdCBub24temVybyBhZGRyZXNzZXMuICBDb3VsZCBiZSBhIFNvbGFyaXMgbGQgYnVnLCBjb3VsZCBiZSBhIEdOVSBsZAorICBidWcuICBCdXQgZm9yIG5vdyBhc3NpZ25pbmcgdGhlIHplcm8gdm1hcyB3b3Jrcy4gICovCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLmludGVycCAgICAgICAwIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgIDAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAwIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgIDAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgIDAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gIDAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kIDA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAwOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAwIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgIDAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgIDAgOiB7ICooLnJlbC50ZXh0KSB9CisgIC5yZWxhLnRleHQgICAgMCA6IHsgKigucmVsYS50ZXh0KSB9CisgIC5yZWwuZmluaSAgICAgMCA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAwIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAwIDogeyAqKC5yZWwucm9kYXRhKSB9CisgIC5yZWxhLnJvZGF0YSAgMCA6IHsgKigucmVsYS5yb2RhdGEpIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAwIDogeyAqKC5yZWwuZGF0YS5yZWwucm8pIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsYS5kYXRhLnJlbC5ybykgfQorICAucmVsLmRhdGEgICAgIDAgOiB7ICooLnJlbC5kYXRhKSB9CisgIC5yZWxhLmRhdGEgICAgMCA6IHsgKigucmVsYS5kYXRhKSB9CisgIC5yZWwudGRhdGEJMCA6IHsgKigucmVsLnRkYXRhKSB9CisgIC5yZWxhLnRkYXRhCTAgOiB7ICooLnJlbGEudGRhdGEpIH0KKyAgLnJlbC50YnNzCTAgOiB7ICooLnJlbC50YnNzKSB9CisgIC5yZWxhLnRic3MJMCA6IHsgKigucmVsYS50YnNzKSB9CisgIC5yZWwuY3RvcnMgICAgMCA6IHsgKigucmVsLmN0b3JzKSB9CisgIC5yZWxhLmN0b3JzICAgMCA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsLmR0b3JzICAgIDAgOiB7ICooLnJlbC5kdG9ycykgfQorICAucmVsYS5kdG9ycyAgIDAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbC5nb3QgICAgICAwIDogeyAqKC5yZWwuZ290KSB9CisgIC5yZWxhLmdvdCAgICAgMCA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbC5ic3MgICAgICAwIDogeyAqKC5yZWwuYnNzKSB9CisgIC5yZWxhLmJzcyAgICAgMCA6IHsgKigucmVsYS5ic3MpIH0KKyAgLnJlbC5pcGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgMCA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9CisgIC5wbHQgICAgICAgICAgMCA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgMCA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgIDAgOgorICB7CisgICAgKigudGV4dCAuc3R1YikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfQorICAuZmluaSAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfQorICAucm9kYXRhICAgICAgIDAgOiB7ICooLnJvZGF0YSkgfQorICAucm9kYXRhMSAgICAgIDAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAwIDogeyAqKC5BUk0uZXh0YWIpIH0KKyAgLkFSTS5leGlkeCAwIDogeyAqKC5BUk0uZXhpZHgpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgMCA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgMCA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAwIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgMCA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgMCA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgMCA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCTAgOiB7ICooLnRkYXRhKSB9CisgIC50YnNzCQkwIDogeyAqKC50YnNzKSB9CisgIC5wcmVpbml0X2FycmF5ICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgfQorICAuamNyICAgICAgICAgIDAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmR5bmFtaWMgICAgICAwIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgMCA6IHsgKiguZ290LnBsdCkgKiguaWdvdC5wbHQpICooLmdvdCkgKiguaWdvdCkgfQorICAuZGF0YSAgICAgICAgIDAgOgorICB7CisgICAgKiguZGF0YSkKKyAgfQorICAuZGF0YTEgICAgICAgIDAgOiB7ICooLmRhdGExKSB9CisgIC5ic3MgICAgICAgICAgMCA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgIH0KKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbykgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgIDAgOgorICB7CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZi54cyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4MDFiZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueHMKQEAgLTAsMCArMSwyMjYgQEAKKy8qIFNjcmlwdCBmb3IgbGQgLS1zaGFyZWQ6IGxpbmsgc2hhcmVkIGxpYnJhcnkgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmluaXQgICAgICAgOiB7ICooLnJlbC5pbml0KSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWwudGV4dCAgICAgICA6IHsgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWwuZmluaSAgICAgICA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAgIDogeyAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbC5kYXRhLnJlbC5ybyAucmVsLmRhdGEucmVsLnJvLiogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvIC5yZWxhLmRhdGEucmVsLnJvLiogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9CisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9CisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9CisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfc3RhcnQgPSAuKTsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfZW5kID0gLik7CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290LnBsdCkgKiguaWdvdC5wbHQpICooLmdvdCkgKiguaWdvdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgX19kYXRhX3N0YXJ0ID0gLiA7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgLiA9IC47CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAgMHg4MDAwMCA6CisgIHsKKyAgICBfc3RhY2sgPSAuOworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnhzYyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueHNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDk2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnhzYwpAQCAtMCwwICsxLDIyNSBAQAorLyogU2NyaXB0IGZvciAtLXNoYXJlZCAteiBjb21icmVsb2M6IHNoYXJlZCBsaWJyYXJ5LCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvIC5yZWwuZGF0YS5yZWwucm8uKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgKigucmVsLmlwbHQpCisgICAgfQorICAucmVsYS5keW4gICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaW5pdCkKKyAgICAgICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbGEuZmluaSkKKyAgICAgICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsYS5jdG9ycykKKyAgICAgICooLnJlbGEuZHRvcnMpCisgICAgICAqKC5yZWxhLmdvdCkKKyAgICAgICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopCisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0KKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0KKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9zdGFydCA9IC4pOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9lbmQgPSAuKTsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueHN3IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZi54c3cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0ZTk3MgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueHN3CkBAIC0wLDAgKzEsMjI1IEBACisvKiBTY3JpcHQgZm9yIC0tc2hhcmVkIC16IGNvbWJyZWxvYyAteiBub3cgLXogcmVscm86IHNoYXJlZCBsaWJyYXJ5LCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvIC5yZWwuZGF0YS5yZWwucm8uKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgKigucmVsLmlwbHQpCisgICAgfQorICAucmVsYS5keW4gICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaW5pdCkKKyAgICAgICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbGEuZmluaSkKKyAgICAgICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsYS5jdG9ycykKKyAgICAgICooLnJlbGEuZHRvcnMpCisgICAgICAqKC5yZWxhLmdvdCkKKyAgICAgICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopCisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0KKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0KKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9zdGFydCA9IC4pOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9lbmQgPSAuKTsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueHUgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnh1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZWZiMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnh1CkBAIC0wLDAgKzEsMTY1IEBACisvKiBTY3JpcHQgZm9yIGxkIC1VcjogbGluayB3L291dCByZWxvY2F0aW9uLCBkbyBjcmVhdGUgY29uc3RydWN0b3JzICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKKyAvKiBGb3Igc29tZSByZWFzb24sIHRoZSBTb2xhcmlzIGxpbmtlciBtYWtlcyBiYWQgZXhlY3V0YWJsZXMKKyAgaWYgZ2xkIC1yIGlzIHVzZWQgYW5kIHRoZSBpbnRlcm1lZGlhdGUgZmlsZSBoYXMgc2VjdGlvbnMgc3RhcnRpbmcKKyAgYXQgbm9uLXplcm8gYWRkcmVzc2VzLiAgQ291bGQgYmUgYSBTb2xhcmlzIGxkIGJ1ZywgY291bGQgYmUgYSBHTlUgbGQKKyAgYnVnLiAgQnV0IGZvciBub3cgYXNzaWduaW5nIHRoZSB6ZXJvIHZtYXMgd29ya3MuICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC5pbnRlcnAgICAgICAgMCA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAwIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgMCA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAwIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAwIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAwIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAwOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgMDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuaW5pdCAgICAgMCA6IHsgKigucmVsLmluaXQpIH0KKyAgLnJlbGEuaW5pdCAgICAwIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbC50ZXh0ICAgICAwIDogeyAqKC5yZWwudGV4dCkgfQorICAucmVsYS50ZXh0ICAgIDAgOiB7ICooLnJlbGEudGV4dCkgfQorICAucmVsLmZpbmkgICAgIDAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgMCA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgMCA6IHsgKigucmVsLnJvZGF0YSkgfQorICAucmVsYS5yb2RhdGEgIDAgOiB7ICooLnJlbGEucm9kYXRhKSB9CisgIC5yZWwuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsLmRhdGEucmVsLnJvKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvIDAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8pIH0KKyAgLnJlbC5kYXRhICAgICAwIDogeyAqKC5yZWwuZGF0YSkgfQorICAucmVsYS5kYXRhICAgIDAgOiB7ICooLnJlbGEuZGF0YSkgfQorICAucmVsLnRkYXRhCTAgOiB7ICooLnJlbC50ZGF0YSkgfQorICAucmVsYS50ZGF0YQkwIDogeyAqKC5yZWxhLnRkYXRhKSB9CisgIC5yZWwudGJzcwkwIDogeyAqKC5yZWwudGJzcykgfQorICAucmVsYS50YnNzCTAgOiB7ICooLnJlbGEudGJzcykgfQorICAucmVsLmN0b3JzICAgIDAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgIDAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAwIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAwIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgMCA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgIDAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgMCA6IHsgKigucmVsLmJzcykgfQorICAucmVsYS5ic3MgICAgIDAgOiB7ICooLnJlbGEuYnNzKSB9CisgIC5yZWwuaXBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsLmlwbHQpCisgICAgfQorICAucmVsYS5pcGx0ICAgIDAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWwucGx0ICAgICAgMCA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfQorICAucGx0ICAgICAgICAgIDAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgIDAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAwIDoKKyAgeworICAgICooLnRleHQgLnN0dWIpCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0KKyAgLmZpbmkgICAgICAgICAwIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgLnJvZGF0YSAgICAgICAwIDogeyAqKC5yb2RhdGEpIH0KKyAgLnJvZGF0YTEgICAgICAwIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgMCA6IHsgKiguQVJNLmV4dGFiKSB9CisgIC5BUk0uZXhpZHggMCA6IHsgKiguQVJNLmV4aWR4KSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgMCA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzIDAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkwIDogeyAqKC50ZGF0YSkgfQorICAudGJzcwkJMCA6IHsgKigudGJzcykgfQorICAucHJlaW5pdF9hcnJheSAgIDAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmpjciAgICAgICAgICAwIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5keW5hbWljICAgICAgMCA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgIDAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAwIDoKKyAgeworICAgICooLmRhdGEpCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAwIDogeyAqKC5kYXRhMSkgfQorICAuYnNzICAgICAgICAgIDAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICB9CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8pIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAwIDoKKyAgeworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGYueHcgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnh3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTM5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmLnh3CkBAIC0wLDAgKzEsMjQwIEBACisvKiBTY3JpcHQgZm9yIC16IGNvbWJyZWxvYyAteiBub3cgLXogcmVscm86IGNvbWJpbmUgYW5kIHNvcnQgcmVsb2Mgc2VjdGlvbnMgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4ODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHg4MDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5keW4gICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwuaW5pdCkKKyAgICAgICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbC5maW5pKQorICAgICAgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbC5kYXRhLnJlbC5ybyAucmVsLmRhdGEucmVsLnJvLiogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikKKyAgICAgICooLnJlbC5kYXRhIC5yZWwuZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbC50ZGF0YSAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbC50YnNzIC5yZWwudGJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWwuY3RvcnMpCisgICAgICAqKC5yZWwuZHRvcnMpCisgICAgICAqKC5yZWwuZ290KQorICAgICAgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5keW4gICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaW5pdCkKKyAgICAgICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbGEuZmluaSkKKyAgICAgICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsYS5jdG9ycykKKyAgICAgICooLnJlbGEuZHRvcnMpCisgICAgICAqKC5yZWxhLmdvdCkKKyAgICAgICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWwucGx0ICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfQorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0LmV4aXQgLnRleHQuZXhpdC4qKQorICAgICooLnRleHQuc3RhcnR1cCAudGV4dC5zdGFydHVwLiopCisgICAgKigudGV4dC5ob3QgLnRleHQuaG90LiopCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICAgICooLmdsdWVfN3QpICooLmdsdWVfNykgKigudmZwMTFfdmVuZWVyKSAqKC52NF9ieCkKKyAgfQorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfQorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIFBST1ZJREVfSElEREVOIChfX2V4aWR4X3N0YXJ0ID0gLik7CisgIC5BUk0uZXhpZHggICA6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKyAgIFBST1ZJREVfSElEREVOIChfX2V4aWR4X2VuZCA9IC4pOworICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUKKyAgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaGVzZSBzZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBTdW4vT3JhY2xlIEMrKyBjb21waWxlci4gICovCisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JPIHsgKiguZXhjZXB0aW9uX3JhbmdlcworICAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTihDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSArICguICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueCBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLngKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0ODE5MAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLngKQEAgLTAsMCArMSwyMzcgQEAKKy8qIERlZmF1bHQgbGlua2VyIHNjcmlwdCwgZm9yIG5vcm1hbCBleGVjdXRhYmxlcyAqLworT1VUUFVUX0ZPUk1BVCgiZWxmMzItYmlnYXJtIiwgImVsZjMyLWJpZ2FybSIsCisJICAgICAgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgUFJPVklERSAoX19leGVjdXRhYmxlX3N0YXJ0ID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHg4MDAwKSk7IC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDgwMDApOworICAuaW50ZXJwICAgICAgICAgOiB7ICooLmludGVycCkgfQorICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmluaXQgICAgICAgOiB7ICooLnJlbC5pbml0KSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWwudGV4dCAgICAgICA6IHsgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWwuZmluaSAgICAgICA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAgIDogeyAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbC5kYXRhLnJlbC5ybyAucmVsLmRhdGEucmVsLnJvLiogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvIC5yZWxhLmRhdGEucmVsLnJvLiogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0KKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0KKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9zdGFydCA9IC4pOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9lbmQgPSAuKTsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnhibiBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnhibgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGY0MzI0Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueGJuCkBAIC0wLDAgKzEsMjM3IEBACisvKiBTY3JpcHQgZm9yIC1OOiBtaXggdGV4dCBhbmQgZGF0YSBvbiBzYW1lIHBhZ2U7IGRvbid0IGFsaWduIGRhdGEgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4ODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHg4MDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8gLnJlbC5kYXRhLnJlbC5yby4qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyAucmVsYS5kYXRhLnJlbC5yby4qIC5yZWxhLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5yZWwuZGF0YSAgICAgICA6IHsgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWxhLmRhdGEgICAgICA6IHsgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWwudGRhdGEJICA6IHsgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWxhLnRkYXRhCSAgOiB7ICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsLnRic3MJICA6IHsgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsYS50YnNzCSAgOiB7ICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbC5jdG9ycyAgICAgIDogeyAqKC5yZWwuY3RvcnMpIH0KKyAgLnJlbGEuY3RvcnMgICAgIDogeyAqKC5yZWxhLmN0b3JzKSB9CisgIC5yZWwuZHRvcnMgICAgICA6IHsgKigucmVsLmR0b3JzKSB9CisgIC5yZWxhLmR0b3JzICAgICA6IHsgKigucmVsYS5kdG9ycykgfQorICAucmVsLmdvdCAgICAgICAgOiB7ICooLnJlbC5nb3QpIH0KKyAgLnJlbGEuZ290ICAgICAgIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsLmJzcyAgICAgICAgOiB7ICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbGEuYnNzICAgICAgIDogeyAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWwuaXBsdCAgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5pcGx0ICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9CisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9CisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9CisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfc3RhcnQgPSAuKTsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfZW5kID0gLik7CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IC47CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueGMgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmYi54YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWExZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueGMKQEAgLTAsMCArMSwyNDAgQEAKKy8qIFNjcmlwdCBmb3IgLXogY29tYnJlbG9jOiBjb21iaW5lIGFuZCBzb3J0IHJlbG9jIHNlY3Rpb25zICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1iaWdhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICBQUk9WSURFIChfX2V4ZWN1dGFibGVfc3RhcnQgPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAweDgwMDApKTsgLiA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4ODAwMCk7CisgIC5pbnRlcnAgICAgICAgICA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgICA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAgIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAgIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAgIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAgOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgIDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuZHluICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLmluaXQpCisgICAgICAqKC5yZWwudGV4dCAucmVsLnRleHQuKiAucmVsLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWwuZmluaSkKKyAgICAgICooLnJlbC5yb2RhdGEgLnJlbC5yb2RhdGEuKiAucmVsLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWwuZGF0YS5yZWwucm8gLnJlbC5kYXRhLnJlbC5yby4qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopCisgICAgICAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsLmN0b3JzKQorICAgICAgKigucmVsLmR0b3JzKQorICAgICAgKigucmVsLmdvdCkKKyAgICAgICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9lbmQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbGEuZHluICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLmluaXQpCisgICAgICAqKC5yZWxhLnRleHQgLnJlbGEudGV4dC4qIC5yZWxhLmdudS5saW5rb25jZS50LiopCisgICAgICAqKC5yZWxhLmZpbmkpCisgICAgICAqKC5yZWxhLnJvZGF0YSAucmVsYS5yb2RhdGEuKiAucmVsYS5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbGEuY3RvcnMpCisgICAgICAqKC5yZWxhLmR0b3JzKQorICAgICAgKigucmVsYS5nb3QpCisgICAgICAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0KKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0KKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9zdGFydCA9IC4pOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9lbmQgPSAuKTsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnhuIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1M2I5MQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnhuCkBAIC0wLDAgKzEsMjM3IEBACisvKiBTY3JpcHQgZm9yIC1uOiBtaXggdGV4dCBhbmQgZGF0YSBvbiBzYW1lIHBhZ2UgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4ODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHg4MDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAgIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgICAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgICAgOiB7ICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsYS50ZXh0ICAgICAgOiB7ICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikgfQorICAucmVsLmZpbmkgICAgICAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgICA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgICA6IHsgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsYS5yb2RhdGEgICAgOiB7ICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWwuZGF0YS5yZWwucm8gLnJlbC5kYXRhLnJlbC5yby4qIC5yZWwuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gICA6IHsgKigucmVsYS5kYXRhLnJlbC5ybyAucmVsYS5kYXRhLnJlbC5yby4qIC5yZWxhLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5yZWwuZGF0YSAgICAgICA6IHsgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWxhLmRhdGEgICAgICA6IHsgKigucmVsYS5kYXRhIC5yZWxhLmRhdGEuKiAucmVsYS5nbnUubGlua29uY2UuZC4qKSB9CisgIC5yZWwudGRhdGEJICA6IHsgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWxhLnRkYXRhCSAgOiB7ICooLnJlbGEudGRhdGEgLnJlbGEudGRhdGEuKiAucmVsYS5nbnUubGlua29uY2UudGQuKikgfQorICAucmVsLnRic3MJICA6IHsgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsYS50YnNzCSAgOiB7ICooLnJlbGEudGJzcyAucmVsYS50YnNzLiogLnJlbGEuZ251LmxpbmtvbmNlLnRiLiopIH0KKyAgLnJlbC5jdG9ycyAgICAgIDogeyAqKC5yZWwuY3RvcnMpIH0KKyAgLnJlbGEuY3RvcnMgICAgIDogeyAqKC5yZWxhLmN0b3JzKSB9CisgIC5yZWwuZHRvcnMgICAgICA6IHsgKigucmVsLmR0b3JzKSB9CisgIC5yZWxhLmR0b3JzICAgICA6IHsgKigucmVsYS5kdG9ycykgfQorICAucmVsLmdvdCAgICAgICAgOiB7ICooLnJlbC5nb3QpIH0KKyAgLnJlbGEuZ290ICAgICAgIDogeyAqKC5yZWxhLmdvdCkgfQorICAucmVsLmJzcyAgICAgICAgOiB7ICooLnJlbC5ic3MgLnJlbC5ic3MuKiAucmVsLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbGEuYnNzICAgICAgIDogeyAqKC5yZWxhLmJzcyAucmVsYS5ic3MuKiAucmVsYS5nbnUubGlua29uY2UuYi4qKSB9CisgIC5yZWwuaXBsdCAgICAgICA6CisgICAgeworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5pcGx0ICAgICAgOgorICAgIHsKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9zdGFydCA9IC4pOworICAgICAgKigucmVsYS5pcGx0KQorICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X2VuZCA9IC4pOworICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9CisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9CisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9CisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfc3RhcnQgPSAuKTsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfZW5kID0gLik7CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5pbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKKyAgICBLRUVQICgqKC5maW5pX2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290LnBsdCkgKiguaWdvdC5wbHQpICooLmdvdCkgKiguaWdvdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgX19kYXRhX3N0YXJ0ID0gLiA7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgLiA9IC47CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAgMHg4MDAwMCA6CisgIHsKKyAgICBfc3RhY2sgPSAuOworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmYi54ciBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnhyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MWFmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmYi54cgpAQCAtMCwwICsxLDE2NCBAQAorLyogU2NyaXB0IGZvciBsZCAtcjogbGluayB3aXRob3V0IHJlbG9jYXRpb24gKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorIC8qIEZvciBzb21lIHJlYXNvbiwgdGhlIFNvbGFyaXMgbGlua2VyIG1ha2VzIGJhZCBleGVjdXRhYmxlcworICBpZiBnbGQgLXIgaXMgdXNlZCBhbmQgdGhlIGludGVybWVkaWF0ZSBmaWxlIGhhcyBzZWN0aW9ucyBzdGFydGluZworICBhdCBub24temVybyBhZGRyZXNzZXMuICBDb3VsZCBiZSBhIFNvbGFyaXMgbGQgYnVnLCBjb3VsZCBiZSBhIEdOVSBsZAorICBidWcuICBCdXQgZm9yIG5vdyBhc3NpZ25pbmcgdGhlIHplcm8gdm1hcyB3b3Jrcy4gICovCitTRUNUSU9OUworeworICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAgLmludGVycCAgICAgICAwIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgIDAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAwIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgIDAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgIDAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gIDAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kIDA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAwOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5pbml0ICAgICAwIDogeyAqKC5yZWwuaW5pdCkgfQorICAucmVsYS5pbml0ICAgIDAgOiB7ICooLnJlbGEuaW5pdCkgfQorICAucmVsLnRleHQgICAgIDAgOiB7ICooLnJlbC50ZXh0KSB9CisgIC5yZWxhLnRleHQgICAgMCA6IHsgKigucmVsYS50ZXh0KSB9CisgIC5yZWwuZmluaSAgICAgMCA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAwIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAwIDogeyAqKC5yZWwucm9kYXRhKSB9CisgIC5yZWxhLnJvZGF0YSAgMCA6IHsgKigucmVsYS5yb2RhdGEpIH0KKyAgLnJlbC5kYXRhLnJlbC5ybyAwIDogeyAqKC5yZWwuZGF0YS5yZWwucm8pIH0KKyAgLnJlbGEuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsYS5kYXRhLnJlbC5ybykgfQorICAucmVsLmRhdGEgICAgIDAgOiB7ICooLnJlbC5kYXRhKSB9CisgIC5yZWxhLmRhdGEgICAgMCA6IHsgKigucmVsYS5kYXRhKSB9CisgIC5yZWwudGRhdGEJMCA6IHsgKigucmVsLnRkYXRhKSB9CisgIC5yZWxhLnRkYXRhCTAgOiB7ICooLnJlbGEudGRhdGEpIH0KKyAgLnJlbC50YnNzCTAgOiB7ICooLnJlbC50YnNzKSB9CisgIC5yZWxhLnRic3MJMCA6IHsgKigucmVsYS50YnNzKSB9CisgIC5yZWwuY3RvcnMgICAgMCA6IHsgKigucmVsLmN0b3JzKSB9CisgIC5yZWxhLmN0b3JzICAgMCA6IHsgKigucmVsYS5jdG9ycykgfQorICAucmVsLmR0b3JzICAgIDAgOiB7ICooLnJlbC5kdG9ycykgfQorICAucmVsYS5kdG9ycyAgIDAgOiB7ICooLnJlbGEuZHRvcnMpIH0KKyAgLnJlbC5nb3QgICAgICAwIDogeyAqKC5yZWwuZ290KSB9CisgIC5yZWxhLmdvdCAgICAgMCA6IHsgKigucmVsYS5nb3QpIH0KKyAgLnJlbC5ic3MgICAgICAwIDogeyAqKC5yZWwuYnNzKSB9CisgIC5yZWxhLmJzcyAgICAgMCA6IHsgKigucmVsYS5ic3MpIH0KKyAgLnJlbC5pcGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAwIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgMCA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9CisgIC5wbHQgICAgICAgICAgMCA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgMCA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgIDAgOgorICB7CisgICAgKigudGV4dCAuc3R1YikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgfQorICAuZmluaSAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfQorICAucm9kYXRhICAgICAgIDAgOiB7ICooLnJvZGF0YSkgfQorICAucm9kYXRhMSAgICAgIDAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAwIDogeyAqKC5BUk0uZXh0YWIpIH0KKyAgLkFSTS5leGlkeCAwIDogeyAqKC5BUk0uZXhpZHgpIH0KKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgMCA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgMCA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAwIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgMCA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgMCA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgMCA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCTAgOiB7ICooLnRkYXRhKSB9CisgIC50YnNzCQkwIDogeyAqKC50YnNzKSB9CisgIC5wcmVpbml0X2FycmF5ICAgMCA6CisgIHsKKyAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KSkKKyAgfQorICAuamNyICAgICAgICAgIDAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmR5bmFtaWMgICAgICAwIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgMCA6IHsgKiguZ290LnBsdCkgKiguaWdvdC5wbHQpICooLmdvdCkgKiguaWdvdCkgfQorICAuZGF0YSAgICAgICAgIDAgOgorICB7CisgICAgKiguZGF0YSkKKyAgfQorICAuZGF0YTEgICAgICAgIDAgOiB7ICooLmRhdGExKSB9CisgIC5ic3MgICAgICAgICAgMCA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgIH0KKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbykgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgIDAgOgorICB7CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueHMgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmYi54cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjdjOTRjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueHMKQEAgLTAsMCArMSwyMjYgQEAKKy8qIFNjcmlwdCBmb3IgbGQgLS1zaGFyZWQ6IGxpbmsgc2hhcmVkIGxpYnJhcnkgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmluaXQgICAgICAgOiB7ICooLnJlbC5pbml0KSB9CisgIC5yZWxhLmluaXQgICAgICA6IHsgKigucmVsYS5pbml0KSB9CisgIC5yZWwudGV4dCAgICAgICA6IHsgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWxhLnRleHQgICAgICA6IHsgKigucmVsYS50ZXh0IC5yZWxhLnRleHQuKiAucmVsYS5nbnUubGlua29uY2UudC4qKSB9CisgIC5yZWwuZmluaSAgICAgICA6IHsgKigucmVsLmZpbmkpIH0KKyAgLnJlbGEuZmluaSAgICAgIDogeyAqKC5yZWxhLmZpbmkpIH0KKyAgLnJlbC5yb2RhdGEgICAgIDogeyAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yZWxhLnJvZGF0YSAgICA6IHsgKigucmVsYS5yb2RhdGEgLnJlbGEucm9kYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnIuKikgfQorICAucmVsLmRhdGEucmVsLnJvICAgOiB7ICooLnJlbC5kYXRhLnJlbC5ybyAucmVsLmRhdGEucmVsLnJvLiogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAucmVsYS5kYXRhLnJlbC5ybyAgIDogeyAqKC5yZWxhLmRhdGEucmVsLnJvIC5yZWxhLmRhdGEucmVsLnJvLiogLnJlbGEuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLnJlbC5kYXRhICAgICAgIDogeyAqKC5yZWwuZGF0YSAucmVsLmRhdGEuKiAucmVsLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbGEuZGF0YSAgICAgIDogeyAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopIH0KKyAgLnJlbC50ZGF0YQkgIDogeyAqKC5yZWwudGRhdGEgLnJlbC50ZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnJlbGEudGRhdGEJICA6IHsgKigucmVsYS50ZGF0YSAucmVsYS50ZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC5yZWwudGJzcwkgIDogeyAqKC5yZWwudGJzcyAucmVsLnRic3MuKiAucmVsLmdudS5saW5rb25jZS50Yi4qKSB9CisgIC5yZWxhLnRic3MJICA6IHsgKigucmVsYS50YnNzIC5yZWxhLnRic3MuKiAucmVsYS5nbnUubGlua29uY2UudGIuKikgfQorICAucmVsLmN0b3JzICAgICAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgICAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAgIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAgIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgICA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgICAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgICA6IHsgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikgfQorICAucmVsYS5ic3MgICAgICAgOiB7ICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopIH0KKyAgLnJlbC5pcGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICB9CisgIC5yZWxhLmlwbHQgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5pcGx0KQorICAgIH0KKyAgLnJlbC5wbHQgICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwucGx0KQorICAgIH0KKyAgLnJlbGEucGx0ICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWxhLnBsdCkKKyAgICB9CisgIC5pbml0ICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguaW5pdCkpKQorICB9CisgIC5wbHQgICAgICAgICAgICA6IHsgKigucGx0KSB9CisgIC5pcGx0ICAgICAgICAgICA6IHsgKiguaXBsdCkgfQorICAudGV4dCAgICAgICAgICAgOgorICB7CisgICAgKigudGV4dC51bmxpa2VseSAudGV4dC4qX3VubGlrZWx5KQorICAgICooLnRleHQuZXhpdCAudGV4dC5leGl0LiopCisgICAgKigudGV4dC5zdGFydHVwIC50ZXh0LnN0YXJ0dXAuKikKKyAgICAqKC50ZXh0LmhvdCAudGV4dC5ob3QuKikKKyAgICAqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiopCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgICAgKiguZ2x1ZV83dCkgKiguZ2x1ZV83KSAqKC52ZnAxMV92ZW5lZXIpICooLnY0X2J4KQorICB9CisgIC5maW5pICAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlRfTk9ORSguZmluaSkpKQorICB9CisgIFBST1ZJREUgKF9fZXRleHQgPSAuKTsKKyAgUFJPVklERSAoX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgICAgICA6IHsgKigucm9kYXRhIC5yb2RhdGEuKiAuZ251LmxpbmtvbmNlLnIuKikgfQorICAucm9kYXRhMSAgICAgICAgOiB7ICooLnJvZGF0YTEpIH0KKyAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfc3RhcnQgPSAuKTsKKyAgLkFSTS5leGlkeCAgIDogeyAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikgfQorICAgUFJPVklERV9ISURERU4gKF9fZXhpZHhfZW5kID0gLik7CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLiA9IEFMSUdOKENPTlNUQU5UIChNQVhQQUdFU0laRSkpICsgKC4gJiAoQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSAtIDEpKTsKKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgICAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlICAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkgIDogeyAqKC50ZGF0YSAudGRhdGEuKiAuZ251LmxpbmtvbmNlLnRkLiopIH0KKyAgLnRic3MJCSAgOiB7ICooLnRic3MgLnRic3MuKiAuZ251LmxpbmtvbmNlLnRiLiopICooLnRjb21tb24pIH0KKyAgLnByZWluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkpKQorICB9CisgIC5pbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmluaXRfYXJyYXkpKQorICB9CisgIC5maW5pX2FycmF5ICAgICA6CisgIHsKKyAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQorICAgIEtFRVAgKCooLmZpbmlfYXJyYXkpKQorICB9CisgIC5jdG9ycyAgICAgICAgICA6CisgIHsKKyAgICAvKiBnY2MgdXNlcyBjcnRiZWdpbi5vIHRvIGZpbmQgdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNvbnN0cnVjdG9ycywgc28gd2UgbWFrZSBzdXJlIGl0IGlzCisgICAgICAgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgYSB3aWxkY2FyZCwgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciBpZiB0aGUgdXNlciBkb2VzIG5vdAorICAgICAgIGFjdHVhbGx5IGxpbmsgYWdhaW5zdCBjcnRiZWdpbi5vOyB0aGUKKyAgICAgICBsaW5rZXIgd29uJ3QgbG9vayBmb3IgYSBmaWxlIHRvIG1hdGNoIGEKKyAgICAgICB3aWxkY2FyZC4gIFRoZSB3aWxkY2FyZCBhbHNvIG1lYW5zIHRoYXQgaXQKKyAgICAgICBkb2Vzbid0IG1hdHRlciB3aGljaCBkaXJlY3RvcnkgY3J0YmVnaW4ubworICAgICAgIGlzIGluLiAgKi8KKyAgICBLRUVQICgqY3J0YmVnaW4ubyguY3RvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguY3RvcnMpKQorICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0aGUgLmN0b3Igc2VjdGlvbiBmcm9tCisgICAgICAgdGhlIGNydGVuZC5vIGZpbGUgdW50aWwgYWZ0ZXIgdGhlIHNvcnRlZCBjdG9ycy4KKyAgICAgICBUaGUgLmN0b3Igc2VjdGlvbiBmcm9tIHRoZSBjcnRlbmQgZmlsZSBjb250YWlucyB0aGUKKyAgICAgICBlbmQgb2YgY3RvcnMgbWFya2VyIGFuZCBpdCBtdXN0IGJlIGxhc3QgKi8KKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuY3RvcnMpKQorICAgIEtFRVAgKCooU09SVCguY3RvcnMuKikpKQorICAgIEtFRVAgKCooLmN0b3JzKSkKKyAgfQorICAuZHRvcnMgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmR0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmR0b3JzKSkKKyAgICBLRUVQICgqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpjcnRlbmQ/Lm8gKSAuZHRvcnMpKQorICAgIEtFRVAgKCooU09SVCguZHRvcnMuKikpKQorICAgIEtFRVAgKCooLmR0b3JzKSkKKyAgfQorICAuamNyICAgICAgICAgICAgOiB7IEtFRVAgKCooLmpjcikpIH0KKyAgLmRhdGEucmVsLnJvIDogeyAqKC5kYXRhLnJlbC5yby5sb2NhbCogLmdudS5saW5rb25jZS5kLnJlbC5yby5sb2NhbC4qKSAqKC5kYXRhLnJlbC5ybyAuZGF0YS5yZWwucm8uKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLiopIH0KKyAgLmR5bmFtaWMgICAgICAgIDogeyAqKC5keW5hbWljKSB9CisgIC5nb3QgICAgICAgICAgICA6IHsgKiguZ290LnBsdCkgKiguaWdvdC5wbHQpICooLmdvdCkgKiguaWdvdCkgfQorICAuZGF0YSAgICAgICAgICAgOgorICB7CisgICAgX19kYXRhX3N0YXJ0ID0gLiA7CisgICAgKiguZGF0YSAuZGF0YS4qIC5nbnUubGlua29uY2UuZC4qKQorICAgIFNPUlQoQ09OU1RSVUNUT1JTKQorICB9CisgIC5kYXRhMSAgICAgICAgICA6IHsgKiguZGF0YTEpIH0KKyAgX2VkYXRhID0gLjsgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgLiA9IC47CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgX19ic3Nfc3RhcnRfXyA9IC47CisgIC5ic3MgICAgICAgICAgICA6CisgIHsKKyAgICooLmR5bmJzcykKKyAgICooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICAgLiA9IEFMSUdOKC4gIT0gMCA/IDMyIC8gOCA6IDEpOworICB9CisgIF9ic3NfZW5kX18gPSAuIDsgX19ic3NfZW5kX18gPSAuIDsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIC4gPSBBTElHTigzMiAvIDgpOworICBfX2VuZF9fID0gLiA7CisgIF9lbmQgPSAuOyBQUk9WSURFIChlbmQgPSAuKTsKKyAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KKyAgLnN0YWIgICAgICAgICAgMCA6IHsgKiguc3RhYikgfQorICAuc3RhYnN0ciAgICAgICAwIDogeyAqKC5zdGFic3RyKSB9CisgIC5zdGFiLmV4Y2wgICAgIDAgOiB7ICooLnN0YWIuZXhjbCkgfQorICAuc3RhYi5leGNsc3RyICAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggICAgMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50ICAgICAgIDAgOiB7ICooLmNvbW1lbnQpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAuICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1ZykgfQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAgLyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbyAuZ251LmxpbmtvbmNlLndpLiopIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAgMHg4MDAwMCA6CisgIHsKKyAgICBfc3RhY2sgPSAuOworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KKyAgL0RJU0NBUkQvIDogeyAqKC5ub3RlLkdOVS1zdGFjaykgKiguZ251X2RlYnVnbGluaykgKiguZ251Lmx0b18qKSB9Cit9CmRpZmYgLS1naXQgYS9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmYi54c2MgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9sZHNjcmlwdHMvYXJtZWxmYi54c2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5ZTlkNgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnhzYwpAQCAtMCwwICsxLDIyNSBAQAorLyogU2NyaXB0IGZvciAtLXNoYXJlZCAteiBjb21icmVsb2M6IHNoYXJlZCBsaWJyYXJ5LCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvIC5yZWwuZGF0YS5yZWwucm8uKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgKigucmVsLmlwbHQpCisgICAgfQorICAucmVsYS5keW4gICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaW5pdCkKKyAgICAgICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbGEuZmluaSkKKyAgICAgICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsYS5jdG9ycykKKyAgICAgICooLnJlbGEuZHRvcnMpCisgICAgICAqKC5yZWxhLmdvdCkKKyAgICAgICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopCisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0KKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0KKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9zdGFydCA9IC4pOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9lbmQgPSAuKTsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnhzdyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnhzdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzg2NDlmCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueHN3CkBAIC0wLDAgKzEsMjI1IEBACisvKiBTY3JpcHQgZm9yIC0tc2hhcmVkIC16IGNvbWJyZWxvYyAteiBub3cgLXogcmVscm86IHNoYXJlZCBsaWJyYXJ5LCBjb21iaW5lICYgc29ydCByZWxvY3MgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC4gPSBTRUdNRU5UX1NUQVJUKCJ0ZXh0LXNlZ21lbnQiLCAwKSArIFNJWkVPRl9IRUFERVJTOworICAubm90ZS5nbnUuYnVpbGQtaWQgOiB7ICooLm5vdGUuZ251LmJ1aWxkLWlkKSB9CisgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorICAucmVsLmR5biAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5pbml0KQorICAgICAgKigucmVsLnRleHQgLnJlbC50ZXh0LiogLnJlbC5nbnUubGlua29uY2UudC4qKQorICAgICAgKigucmVsLmZpbmkpCisgICAgICAqKC5yZWwucm9kYXRhIC5yZWwucm9kYXRhLiogLnJlbC5nbnUubGlua29uY2Uuci4qKQorICAgICAgKigucmVsLmRhdGEucmVsLnJvIC5yZWwuZGF0YS5yZWwucm8uKiAucmVsLmdudS5saW5rb25jZS5kLnJlbC5yby4qKQorICAgICAgKigucmVsLmRhdGEgLnJlbC5kYXRhLiogLnJlbC5nbnUubGlua29uY2UuZC4qKQorICAgICAgKigucmVsLnRkYXRhIC5yZWwudGRhdGEuKiAucmVsLmdudS5saW5rb25jZS50ZC4qKQorICAgICAgKigucmVsLnRic3MgLnJlbC50YnNzLiogLnJlbC5nbnUubGlua29uY2UudGIuKikKKyAgICAgICooLnJlbC5jdG9ycykKKyAgICAgICooLnJlbC5kdG9ycykKKyAgICAgICooLnJlbC5nb3QpCisgICAgICAqKC5yZWwuYnNzIC5yZWwuYnNzLiogLnJlbC5nbnUubGlua29uY2UuYi4qKQorICAgICAgKigucmVsLmlwbHQpCisgICAgfQorICAucmVsYS5keW4gICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaW5pdCkKKyAgICAgICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbGEuZmluaSkKKyAgICAgICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsYS5jdG9ycykKKyAgICAgICooLnJlbGEuZHRvcnMpCisgICAgICAqKC5yZWxhLmdvdCkKKyAgICAgICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopCisgICAgICAqKC5yZWxhLmlwbHQpCisgICAgfQorICAucmVsLnBsdCAgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbC5wbHQpCisgICAgfQorICAucmVsYS5wbHQgICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEucGx0KQorICAgIH0KKyAgLmluaXQgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5pbml0KSkpCisgIH0KKyAgLnBsdCAgICAgICAgICAgIDogeyAqKC5wbHQpIH0KKyAgLmlwbHQgICAgICAgICAgIDogeyAqKC5pcGx0KSB9CisgIC50ZXh0ICAgICAgICAgICA6CisgIHsKKyAgICAqKC50ZXh0LnVubGlrZWx5IC50ZXh0LipfdW5saWtlbHkpCisgICAgKigudGV4dC5leGl0IC50ZXh0LmV4aXQuKikKKyAgICAqKC50ZXh0LnN0YXJ0dXAgLnRleHQuc3RhcnR1cC4qKQorICAgICooLnRleHQuaG90IC50ZXh0LmhvdC4qKQorICAgICooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKikKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5nbHVlXzd0KSAqKC5nbHVlXzcpICooLnZmcDExX3ZlbmVlcikgKigudjRfYngpCisgIH0KKyAgLmZpbmkgICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgUFJPVklERSAoX19ldGV4dCA9IC4pOworICBQUk9WSURFIChfZXRleHQgPSAuKTsKKyAgUFJPVklERSAoZXRleHQgPSAuKTsKKyAgLnJvZGF0YSAgICAgICAgIDogeyAqKC5yb2RhdGEgLnJvZGF0YS4qIC5nbnUubGlua29uY2Uuci4qKSB9CisgIC5yb2RhdGExICAgICAgICA6IHsgKigucm9kYXRhMSkgfQorICAuQVJNLmV4dGFiICAgOiB7ICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9zdGFydCA9IC4pOworICAuQVJNLmV4aWR4ICAgOiB7ICooLkFSTS5leGlkeCogLmdudS5saW5rb25jZS5hcm1leGlkeC4qKSB9CisgICBQUk9WSURFX0hJRERFTiAoX19leGlkeF9lbmQgPSAuKTsKKyAgLmVoX2ZyYW1lX2hkciA6IHsgKiguZWhfZnJhbWVfaGRyKSB9CisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUk8geyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUk8geyAqKC5nY2NfZXhjZXB0X3RhYmxlCisgIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLyogVGhlc2Ugc2VjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSB0aGUgU3VuL09yYWNsZSBDKysgY29tcGlsZXIuICAqLworICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9STyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMKKyAgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIEFkanVzdCB0aGUgYWRkcmVzcyBmb3IgdGhlIGRhdGEgc2VnbWVudC4gIFdlIHdhbnQgdG8gYWRqdXN0IHVwIHRvCisgICAgIHRoZSBzYW1lIGFkZHJlc3Mgd2l0aGluIHRoZSBwYWdlIG9uIHRoZSBuZXh0IHBhZ2UgdXAuICAqLworICAuID0gQUxJR04oQ09OU1RBTlQgKE1BWFBBR0VTSVpFKSkgKyAoLiAmIChDT05TVEFOVCAoTUFYUEFHRVNJWkUpIC0gMSkpOworICAvKiBFeGNlcHRpb24gaGFuZGxpbmcgICovCisgIC5laF9mcmFtZSAgICAgICA6IE9OTFlfSUZfUlcgeyBLRUVQICgqKC5laF9mcmFtZSkpIH0KKyAgLmdjY19leGNlcHRfdGFibGUgICA6IE9OTFlfSUZfUlcgeyAqKC5nY2NfZXhjZXB0X3RhYmxlIC5nY2NfZXhjZXB0X3RhYmxlLiopIH0KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgICA6IE9OTFlfSUZfUlcgeyAqKC5leGNlcHRpb25fcmFuZ2VzIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSBzZWN0aW9ucyAgKi8KKyAgLnRkYXRhCSAgOiB7ICooLnRkYXRhIC50ZGF0YS4qIC5nbnUubGlua29uY2UudGQuKikgfQorICAudGJzcwkJICA6IHsgKigudGJzcyAudGJzcy4qIC5nbnUubGlua29uY2UudGIuKikgKigudGNvbW1vbikgfQorICAucHJlaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmluaXRfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgIH0KKyAgLmZpbmlfYXJyYXkgICAgIDoKKyAgeworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgIH0KKyAgLmN0b3JzICAgICAgICAgIDoKKyAgeworICAgIC8qIGdjYyB1c2VzIGNydGJlZ2luLm8gdG8gZmluZCB0aGUgc3RhcnQgb2YKKyAgICAgICB0aGUgY29uc3RydWN0b3JzLCBzbyB3ZSBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBmaXJzdC4gIEJlY2F1c2UgdGhpcyBpcyBhIHdpbGRjYXJkLCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSB1c2VyIGRvZXMgbm90CisgICAgICAgYWN0dWFsbHkgbGluayBhZ2FpbnN0IGNydGJlZ2luLm87IHRoZQorICAgICAgIGxpbmtlciB3b24ndCBsb29rIGZvciBhIGZpbGUgdG8gbWF0Y2ggYQorICAgICAgIHdpbGRjYXJkLiAgVGhlIHdpbGRjYXJkIGFsc28gbWVhbnMgdGhhdCBpdAorICAgICAgIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIGRpcmVjdG9yeSBjcnRiZWdpbi5vCisgICAgICAgaXMgaW4uICAqLworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5jdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5jdG9ycykpCisgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSAuY3RvciBzZWN0aW9uIGZyb20KKyAgICAgICB0aGUgY3J0ZW5kLm8gZmlsZSB1bnRpbCBhZnRlciB0aGUgc29ydGVkIGN0b3JzLgorICAgICAgIFRoZSAuY3RvciBzZWN0aW9uIGZyb20gdGhlIGNydGVuZCBmaWxlIGNvbnRhaW5zIHRoZQorICAgICAgIGVuZCBvZiBjdG9ycyBtYXJrZXIgYW5kIGl0IG11c3QgYmUgbGFzdCAqLworICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5jdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5jdG9ycy4qKSkpCisgICAgS0VFUCAoKiguY3RvcnMpKQorICB9CisgIC5kdG9ycyAgICAgICAgICA6CisgIHsKKyAgICBLRUVQICgqY3J0YmVnaW4ubyguZHRvcnMpKQorICAgIEtFRVAgKCpjcnRiZWdpbj8ubyguZHRvcnMpKQorICAgIEtFRVAgKCooRVhDTFVERV9GSUxFICgqY3J0ZW5kLm8gKmNydGVuZD8ubyApIC5kdG9ycykpCisgICAgS0VFUCAoKihTT1JUKC5kdG9ycy4qKSkpCisgICAgS0VFUCAoKiguZHRvcnMpKQorICB9CisgIC5qY3IgICAgICAgICAgICA6IHsgS0VFUCAoKiguamNyKSkgfQorICAuZGF0YS5yZWwucm8gOiB7ICooLmRhdGEucmVsLnJvLmxvY2FsKiAuZ251LmxpbmtvbmNlLmQucmVsLnJvLmxvY2FsLiopICooLmRhdGEucmVsLnJvIC5kYXRhLnJlbC5yby4qIC5nbnUubGlua29uY2UuZC5yZWwucm8uKikgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0KKyAgLmdvdCAgICAgICAgICAgIDogeyAqKC5nb3QucGx0KSAqKC5pZ290LnBsdCkgKiguZ290KSAqKC5pZ290KSB9CisgIC5kYXRhICAgICAgICAgICA6CisgIHsKKyAgICBfX2RhdGFfc3RhcnQgPSAuIDsKKyAgICAqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAgIDogeyAqKC5kYXRhMSkgfQorICBfZWRhdGEgPSAuOyBQUk9WSURFIChlZGF0YSA9IC4pOworICAuID0gLjsKKyAgX19ic3Nfc3RhcnQgPSAuOworICBfX2Jzc19zdGFydF9fID0gLjsKKyAgLmJzcyAgICAgICAgICAgIDoKKyAgeworICAgKiguZHluYnNzKQorICAgKiguYnNzIC5ic3MuKiAuZ251LmxpbmtvbmNlLmIuKikKKyAgICooQ09NTU9OKQorICAgLyogQWxpZ24gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgLmJzcyBzZWN0aW9uIG9jY3VwaWVzIHNwYWNlIHVwIHRvCisgICAgICBfZW5kLiAgQWxpZ24gYWZ0ZXIgLmJzcyB0byBlbnN1cmUgY29ycmVjdCBhbGlnbm1lbnQgZXZlbiBpZiB0aGUKKyAgICAgIC5ic3Mgc2VjdGlvbiBkaXNhcHBlYXJzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGlucHV0IHNlY3Rpb25zLgorICAgICAgRklYTUU6IFdoeSBkbyB3ZSBuZWVkIGl0PyBXaGVuIHRoZXJlIGlzIG5vIC5ic3Mgc2VjdGlvbiwgd2UgZG9uJ3QKKyAgICAgIHBhZCB0aGUgLmRhdGEgc2VjdGlvbi4gICovCisgICAuID0gQUxJR04oLiAhPSAwID8gMzIgLyA4IDogMSk7CisgIH0KKyAgX2Jzc19lbmRfXyA9IC4gOyBfX2Jzc19lbmRfXyA9IC4gOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgLiA9IEFMSUdOKDMyIC8gOCk7CisgIF9fZW5kX18gPSAuIDsKKyAgX2VuZCA9IC47IFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAgICAgICAgICAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyICAgICAgIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAgICAgMCA6IHsgKiguc3RhYi5leGNsKSB9CisgIC5zdGFiLmV4Y2xzdHIgIDAgOiB7ICooLnN0YWIuZXhjbHN0cikgfQorICAuc3RhYi5pbmRleCAgICAwIDogeyAqKC5zdGFiLmluZGV4KSB9CisgIC5zdGFiLmluZGV4c3RyIDAgOiB7ICooLnN0YWIuaW5kZXhzdHIpIH0KKyAgLmNvbW1lbnQgICAgICAgMCA6IHsgKiguY29tbWVudCkgfQorICAvKiBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4KKyAgICAgU3ltYm9scyBpbiB0aGUgRFdBUkYgZGVidWdnaW5nIHNlY3Rpb25zIGFyZSByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nCisgICAgIG9mIHRoZSBzZWN0aW9uIHNvIHdlIGJlZ2luIHRoZW0gYXQgMC4gICovCisgIC8qIERXQVJGIDEgKi8KKyAgLmRlYnVnICAgICAgICAgIDAgOiB7ICooLmRlYnVnKSB9CisgIC5saW5lICAgICAgICAgICAwIDogeyAqKC5saW5lKSB9CisgIC8qIEdOVSBEV0FSRiAxIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3NyY2luZm8gIDAgOiB7ICooLmRlYnVnX3NyY2luZm8pIH0KKyAgLmRlYnVnX3NmbmFtZXMgIDAgOiB7ICooLmRlYnVnX3NmbmFtZXMpIH0KKyAgLyogRFdBUkYgMS4xIGFuZCBEV0FSRiAyICovCisgIC5kZWJ1Z19hcmFuZ2VzICAwIDogeyAqKC5kZWJ1Z19hcmFuZ2VzKSB9CisgIC5kZWJ1Z19wdWJuYW1lcyAwIDogeyAqKC5kZWJ1Z19wdWJuYW1lcykgfQorICAvKiBEV0FSRiAyICovCisgIC5kZWJ1Z19pbmZvICAgICAwIDogeyAqKC5kZWJ1Z19pbmZvIC5nbnUubGlua29uY2Uud2kuKikgfQorICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5lICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9CisgIC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8gIDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNpb25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9CisgIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogRFdBUkYgMyAqLworICAuZGVidWdfcHVidHlwZXMgMCA6IHsgKiguZGVidWdfcHVidHlwZXMpIH0KKyAgLmRlYnVnX3JhbmdlcyAgIDAgOiB7ICooLmRlYnVnX3JhbmdlcykgfQorICAvKiBEV0FSRiBFeHRlbnNpb24uICAqLworICAuZGVidWdfbWFjcm8gICAgMCA6IHsgKiguZGVidWdfbWFjcm8pIH0KKyAgICAuc3RhY2sgICAgICAgICAweDgwMDAwIDoKKyAgeworICAgIF9zdGFjayA9IC47CisgICAgKiguc3RhY2spCisgIH0KKyAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7IEtFRVAgKCooLkFSTS5hdHRyaWJ1dGVzKSkgS0VFUCAoKiguZ251LmF0dHJpYnV0ZXMpKSB9CisgIC5ub3RlLmdudS5hcm0uaWRlbnQgMCA6IHsgS0VFUCAoKigubm90ZS5nbnUuYXJtLmlkZW50KSkgfQorICAvRElTQ0FSRC8gOiB7ICooLm5vdGUuR05VLXN0YWNrKSAqKC5nbnVfZGVidWdsaW5rKSAqKC5nbnUubHRvXyopIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnh1IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxZDY0MwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnh1CkBAIC0wLDAgKzEsMTY1IEBACisvKiBTY3JpcHQgZm9yIGxkIC1VcjogbGluayB3L291dCByZWxvY2F0aW9uLCBkbyBjcmVhdGUgY29uc3RydWN0b3JzICovCitPVVRQVVRfRk9STUFUKCJlbGYzMi1iaWdhcm0iLCAiZWxmMzItYmlnYXJtIiwKKwkgICAgICAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKKyAvKiBGb3Igc29tZSByZWFzb24sIHRoZSBTb2xhcmlzIGxpbmtlciBtYWtlcyBiYWQgZXhlY3V0YWJsZXMKKyAgaWYgZ2xkIC1yIGlzIHVzZWQgYW5kIHRoZSBpbnRlcm1lZGlhdGUgZmlsZSBoYXMgc2VjdGlvbnMgc3RhcnRpbmcKKyAgYXQgbm9uLXplcm8gYWRkcmVzc2VzLiAgQ291bGQgYmUgYSBTb2xhcmlzIGxkIGJ1ZywgY291bGQgYmUgYSBHTlUgbGQKKyAgYnVnLiAgQnV0IGZvciBub3cgYXNzaWduaW5nIHRoZSB6ZXJvIHZtYXMgd29ya3MuICAqLworU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIC5pbnRlcnAgICAgICAgMCA6IHsgKiguaW50ZXJwKSB9CisgIC5ub3RlLmdudS5idWlsZC1pZCA6IHsgKigubm90ZS5nbnUuYnVpbGQtaWQpIH0KKyAgLmhhc2ggICAgICAgICAwIDogeyAqKC5oYXNoKSB9CisgIC5nbnUuaGFzaCAgICAgMCA6IHsgKiguZ251Lmhhc2gpIH0KKyAgLmR5bnN5bSAgICAgICAwIDogeyAqKC5keW5zeW0pIH0KKyAgLmR5bnN0ciAgICAgICAwIDogeyAqKC5keW5zdHIpIH0KKyAgLmdudS52ZXJzaW9uICAwIDogeyAqKC5nbnUudmVyc2lvbikgfQorICAuZ251LnZlcnNpb25fZCAwOiB7ICooLmdudS52ZXJzaW9uX2QpIH0KKyAgLmdudS52ZXJzaW9uX3IgMDogeyAqKC5nbnUudmVyc2lvbl9yKSB9CisgIC5yZWwuaW5pdCAgICAgMCA6IHsgKigucmVsLmluaXQpIH0KKyAgLnJlbGEuaW5pdCAgICAwIDogeyAqKC5yZWxhLmluaXQpIH0KKyAgLnJlbC50ZXh0ICAgICAwIDogeyAqKC5yZWwudGV4dCkgfQorICAucmVsYS50ZXh0ICAgIDAgOiB7ICooLnJlbGEudGV4dCkgfQorICAucmVsLmZpbmkgICAgIDAgOiB7ICooLnJlbC5maW5pKSB9CisgIC5yZWxhLmZpbmkgICAgMCA6IHsgKigucmVsYS5maW5pKSB9CisgIC5yZWwucm9kYXRhICAgMCA6IHsgKigucmVsLnJvZGF0YSkgfQorICAucmVsYS5yb2RhdGEgIDAgOiB7ICooLnJlbGEucm9kYXRhKSB9CisgIC5yZWwuZGF0YS5yZWwucm8gMCA6IHsgKigucmVsLmRhdGEucmVsLnJvKSB9CisgIC5yZWxhLmRhdGEucmVsLnJvIDAgOiB7ICooLnJlbGEuZGF0YS5yZWwucm8pIH0KKyAgLnJlbC5kYXRhICAgICAwIDogeyAqKC5yZWwuZGF0YSkgfQorICAucmVsYS5kYXRhICAgIDAgOiB7ICooLnJlbGEuZGF0YSkgfQorICAucmVsLnRkYXRhCTAgOiB7ICooLnJlbC50ZGF0YSkgfQorICAucmVsYS50ZGF0YQkwIDogeyAqKC5yZWxhLnRkYXRhKSB9CisgIC5yZWwudGJzcwkwIDogeyAqKC5yZWwudGJzcykgfQorICAucmVsYS50YnNzCTAgOiB7ICooLnJlbGEudGJzcykgfQorICAucmVsLmN0b3JzICAgIDAgOiB7ICooLnJlbC5jdG9ycykgfQorICAucmVsYS5jdG9ycyAgIDAgOiB7ICooLnJlbGEuY3RvcnMpIH0KKyAgLnJlbC5kdG9ycyAgICAwIDogeyAqKC5yZWwuZHRvcnMpIH0KKyAgLnJlbGEuZHRvcnMgICAwIDogeyAqKC5yZWxhLmR0b3JzKSB9CisgIC5yZWwuZ290ICAgICAgMCA6IHsgKigucmVsLmdvdCkgfQorICAucmVsYS5nb3QgICAgIDAgOiB7ICooLnJlbGEuZ290KSB9CisgIC5yZWwuYnNzICAgICAgMCA6IHsgKigucmVsLmJzcykgfQorICAucmVsYS5ic3MgICAgIDAgOiB7ICooLnJlbGEuYnNzKSB9CisgIC5yZWwuaXBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsLmlwbHQpCisgICAgfQorICAucmVsYS5pcGx0ICAgIDAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICB9CisgIC5yZWwucGx0ICAgICAgMCA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgMCA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgIDAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfQorICAucGx0ICAgICAgICAgIDAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgIDAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAwIDoKKyAgeworICAgICooLnRleHQgLnN0dWIpCisgICAgLyogLmdudS53YXJuaW5nIHNlY3Rpb25zIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBieSBlbGYzMi5lbS4gICovCisgICAgKiguZ251Lndhcm5pbmcpCisgIH0KKyAgLmZpbmkgICAgICAgICAwIDoKKyAgeworICAgIEtFRVAgKCooU09SVF9OT05FKC5maW5pKSkpCisgIH0KKyAgLnJvZGF0YSAgICAgICAwIDogeyAqKC5yb2RhdGEpIH0KKyAgLnJvZGF0YTEgICAgICAwIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgMCA6IHsgKiguQVJNLmV4dGFiKSB9CisgIC5BUk0uZXhpZHggMCA6IHsgKiguQVJNLmV4aWR4KSB9CisgIC5laF9mcmFtZV9oZHIgOiB7ICooLmVoX2ZyYW1lX2hkcikgfQorICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JPIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JPIHsgKiguZ2NjX2V4Y2VwdF90YWJsZQorICAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC8qIFRoZXNlIHNlY3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIFN1bi9PcmFjbGUgQysrIGNvbXBpbGVyLiAgKi8KKyAgLmV4Y2VwdGlvbl9yYW5nZXMgMCA6IE9OTFlfSUZfUk8geyAqKC5leGNlcHRpb25fcmFuZ2VzCisgIC5leGNlcHRpb25fcmFuZ2VzKikgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQuICBXZSB3YW50IHRvIGFkanVzdCB1cCB0bworICAgICB0aGUgc2FtZSBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZSBvbiB0aGUgbmV4dCBwYWdlIHVwLiAgKi8KKyAgLyogRXhjZXB0aW9uIGhhbmRsaW5nICAqLworICAuZWhfZnJhbWUgICAgIDAgOiBPTkxZX0lGX1JXIHsgS0VFUCAoKiguZWhfZnJhbWUpKSB9CisgIC5nY2NfZXhjZXB0X3RhYmxlIDAgOiBPTkxZX0lGX1JXIHsgKiguZ2NjX2V4Y2VwdF90YWJsZSAuZ2NjX2V4Y2VwdF90YWJsZS4qKSB9CisgIC5leGNlcHRpb25fcmFuZ2VzIDAgOiBPTkxZX0lGX1JXIHsgKiguZXhjZXB0aW9uX3JhbmdlcyAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogVGhyZWFkIExvY2FsIFN0b3JhZ2Ugc2VjdGlvbnMgICovCisgIC50ZGF0YQkwIDogeyAqKC50ZGF0YSkgfQorICAudGJzcwkJMCA6IHsgKigudGJzcykgfQorICAucHJlaW5pdF9hcnJheSAgIDAgOgorICB7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgIH0KKyAgLmpjciAgICAgICAgICAwIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5keW5hbWljICAgICAgMCA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgIDAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAwIDoKKyAgeworICAgICooLmRhdGEpCisgICAgU09SVChDT05TVFJVQ1RPUlMpCisgIH0KKyAgLmRhdGExICAgICAgICAwIDogeyAqKC5kYXRhMSkgfQorICAuYnNzICAgICAgICAgIDAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1PTikKKyAgIC8qIEFsaWduIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIC5ic3Mgc2VjdGlvbiBvY2N1cGllcyBzcGFjZSB1cCB0bworICAgICAgX2VuZC4gIEFsaWduIGFmdGVyIC5ic3MgdG8gZW5zdXJlIGNvcnJlY3QgYWxpZ25tZW50IGV2ZW4gaWYgdGhlCisgICAgICAuYnNzIHNlY3Rpb24gZGlzYXBwZWFycyBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnB1dCBzZWN0aW9ucy4KKyAgICAgIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCBpdD8gV2hlbiB0aGVyZSBpcyBubyAuYnNzIHNlY3Rpb24sIHdlIGRvbid0CisgICAgICBwYWQgdGhlIC5kYXRhIHNlY3Rpb24uICAqLworICB9CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8pIH0KKyAgLmRlYnVnX2FiYnJldiAgIDAgOiB7ICooLmRlYnVnX2FiYnJldikgfQorICAuZGVidWdfbGluZSAgICAgMCA6IHsgKiguZGVidWdfbGluZSkgfQorICAuZGVidWdfZnJhbWUgICAgMCA6IHsgKiguZGVidWdfZnJhbWUpIH0KKyAgLmRlYnVnX3N0ciAgICAgIDAgOiB7ICooLmRlYnVnX3N0cikgfQorICAuZGVidWdfbG9jICAgICAgMCA6IHsgKiguZGVidWdfbG9jKSB9CisgIC5kZWJ1Z19tYWNpbmZvICAwIDogeyAqKC5kZWJ1Z19tYWNpbmZvKSB9CisgIC8qIFNHSS9NSVBTIERXQVJGIDIgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfd2Vha25hbWVzIDAgOiB7ICooLmRlYnVnX3dlYWtuYW1lcykgfQorICAuZGVidWdfZnVuY25hbWVzIDAgOiB7ICooLmRlYnVnX2Z1bmNuYW1lcykgfQorICAuZGVidWdfdHlwZW5hbWVzIDAgOiB7ICooLmRlYnVnX3R5cGVuYW1lcykgfQorICAuZGVidWdfdmFybmFtZXMgIDAgOiB7ICooLmRlYnVnX3Zhcm5hbWVzKSB9CisgIC8qIERXQVJGIDMgKi8KKyAgLmRlYnVnX3B1YnR5cGVzIDAgOiB7ICooLmRlYnVnX3B1YnR5cGVzKSB9CisgIC5kZWJ1Z19yYW5nZXMgICAwIDogeyAqKC5kZWJ1Z19yYW5nZXMpIH0KKyAgLyogRFdBUkYgRXh0ZW5zaW9uLiAgKi8KKyAgLmRlYnVnX21hY3JvICAgIDAgOiB7ICooLmRlYnVnX21hY3JvKSB9CisgICAgLnN0YWNrICAgICAgICAwIDoKKyAgeworICAgICooLnN0YWNrKQorICB9CisgIC5BUk0uYXR0cmlidXRlcyAwIDogeyBLRUVQICgqKC5BUk0uYXR0cmlidXRlcykpIEtFRVAgKCooLmdudS5hdHRyaWJ1dGVzKSkgfQorICAubm90ZS5nbnUuYXJtLmlkZW50IDAgOiB7IEtFRVAgKCooLm5vdGUuZ251LmFybS5pZGVudCkpIH0KK30KZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnh3IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGRzY3JpcHRzL2FybWVsZmIueHcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlZjFmNwotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xkc2NyaXB0cy9hcm1lbGZiLnh3CkBAIC0wLDAgKzEsMjQwIEBACisvKiBTY3JpcHQgZm9yIC16IGNvbWJyZWxvYyAteiBub3cgLXogcmVscm86IGNvbWJpbmUgYW5kIHNvcnQgcmVsb2Mgc2VjdGlvbnMgKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLWJpZ2FybSIsICJlbGYzMi1iaWdhcm0iLAorCSAgICAgICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKyAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCisgIFBST1ZJREUgKF9fZXhlY3V0YWJsZV9zdGFydCA9IFNFR01FTlRfU1RBUlQoInRleHQtc2VnbWVudCIsIDB4ODAwMCkpOyAuID0gU0VHTUVOVF9TVEFSVCgidGV4dC1zZWdtZW50IiwgMHg4MDAwKTsKKyAgLmludGVycCAgICAgICAgIDogeyAqKC5pbnRlcnApIH0KKyAgLm5vdGUuZ251LmJ1aWxkLWlkIDogeyAqKC5ub3RlLmdudS5idWlsZC1pZCkgfQorICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0KKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQorICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQorICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CisgIC5nbnUudmVyc2lvbl9kICA6IHsgKiguZ251LnZlcnNpb25fZCkgfQorICAuZ251LnZlcnNpb25fciAgOiB7ICooLmdudS52ZXJzaW9uX3IpIH0KKyAgLnJlbC5keW4gICAgICAgIDoKKyAgICB7CisgICAgICAqKC5yZWwuaW5pdCkKKyAgICAgICooLnJlbC50ZXh0IC5yZWwudGV4dC4qIC5yZWwuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbC5maW5pKQorICAgICAgKigucmVsLnJvZGF0YSAucmVsLnJvZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLnIuKikKKyAgICAgICooLnJlbC5kYXRhLnJlbC5ybyAucmVsLmRhdGEucmVsLnJvLiogLnJlbC5nbnUubGlua29uY2UuZC5yZWwucm8uKikKKyAgICAgICooLnJlbC5kYXRhIC5yZWwuZGF0YS4qIC5yZWwuZ251LmxpbmtvbmNlLmQuKikKKyAgICAgICooLnJlbC50ZGF0YSAucmVsLnRkYXRhLiogLnJlbC5nbnUubGlua29uY2UudGQuKikKKyAgICAgICooLnJlbC50YnNzIC5yZWwudGJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLnRiLiopCisgICAgICAqKC5yZWwuY3RvcnMpCisgICAgICAqKC5yZWwuZHRvcnMpCisgICAgICAqKC5yZWwuZ290KQorICAgICAgKigucmVsLmJzcyAucmVsLmJzcy4qIC5yZWwuZ251LmxpbmtvbmNlLmIuKikKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X3N0YXJ0ID0gLik7CisgICAgICAqKC5yZWwuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbF9pcGx0X2VuZCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsYV9pcGx0X3N0YXJ0ID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfZW5kID0gLik7CisgICAgfQorICAucmVsYS5keW4gICAgICAgOgorICAgIHsKKyAgICAgICooLnJlbGEuaW5pdCkKKyAgICAgICooLnJlbGEudGV4dCAucmVsYS50ZXh0LiogLnJlbGEuZ251LmxpbmtvbmNlLnQuKikKKyAgICAgICooLnJlbGEuZmluaSkKKyAgICAgICooLnJlbGEucm9kYXRhIC5yZWxhLnJvZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5yLiopCisgICAgICAqKC5yZWxhLmRhdGEgLnJlbGEuZGF0YS4qIC5yZWxhLmdudS5saW5rb25jZS5kLiopCisgICAgICAqKC5yZWxhLnRkYXRhIC5yZWxhLnRkYXRhLiogLnJlbGEuZ251LmxpbmtvbmNlLnRkLiopCisgICAgICAqKC5yZWxhLnRic3MgLnJlbGEudGJzcy4qIC5yZWxhLmdudS5saW5rb25jZS50Yi4qKQorICAgICAgKigucmVsYS5jdG9ycykKKyAgICAgICooLnJlbGEuZHRvcnMpCisgICAgICAqKC5yZWxhLmdvdCkKKyAgICAgICooLnJlbGEuYnNzIC5yZWxhLmJzcy4qIC5yZWxhLmdudS5saW5rb25jZS5iLiopCisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxfaXBsdF9zdGFydCA9IC4pOworICAgICAgUFJPVklERV9ISURERU4gKF9fcmVsX2lwbHRfZW5kID0gLik7CisgICAgICBQUk9WSURFX0hJRERFTiAoX19yZWxhX2lwbHRfc3RhcnQgPSAuKTsKKyAgICAgICooLnJlbGEuaXBsdCkKKyAgICAgIFBST1ZJREVfSElEREVOIChfX3JlbGFfaXBsdF9lbmQgPSAuKTsKKyAgICB9CisgIC5yZWwucGx0ICAgICAgICA6CisgICAgeworICAgICAgKigucmVsLnBsdCkKKyAgICB9CisgIC5yZWxhLnBsdCAgICAgICA6CisgICAgeworICAgICAgKigucmVsYS5wbHQpCisgICAgfQorICAuaW5pdCAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmluaXQpKSkKKyAgfQorICAucGx0ICAgICAgICAgICAgOiB7ICooLnBsdCkgfQorICAuaXBsdCAgICAgICAgICAgOiB7ICooLmlwbHQpIH0KKyAgLnRleHQgICAgICAgICAgIDoKKyAgeworICAgICooLnRleHQudW5saWtlbHkgLnRleHQuKl91bmxpa2VseSkKKyAgICAqKC50ZXh0LmV4aXQgLnRleHQuZXhpdC4qKQorICAgICooLnRleHQuc3RhcnR1cCAudGV4dC5zdGFydHVwLiopCisgICAgKigudGV4dC5ob3QgLnRleHQuaG90LiopCisgICAgKigudGV4dCAuc3R1YiAudGV4dC4qIC5nbnUubGlua29uY2UudC4qKQorICAgIC8qIC5nbnUud2FybmluZyBzZWN0aW9ucyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYnkgZWxmMzIuZW0uICAqLworICAgICooLmdudS53YXJuaW5nKQorICAgICooLmdsdWVfN3QpICooLmdsdWVfNykgKigudmZwMTFfdmVuZWVyKSAqKC52NF9ieCkKKyAgfQorICAuZmluaSAgICAgICAgICAgOgorICB7CisgICAgS0VFUCAoKihTT1JUX05PTkUoLmZpbmkpKSkKKyAgfQorICBQUk9WSURFIChfX2V0ZXh0ID0gLik7CisgIFBST1ZJREUgKF9ldGV4dCA9IC4pOworICBQUk9WSURFIChldGV4dCA9IC4pOworICAucm9kYXRhICAgICAgICAgOiB7ICooLnJvZGF0YSAucm9kYXRhLiogLmdudS5saW5rb25jZS5yLiopIH0KKyAgLnJvZGF0YTEgICAgICAgIDogeyAqKC5yb2RhdGExKSB9CisgIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0KKyAgIFBST1ZJREVfSElEREVOIChfX2V4aWR4X3N0YXJ0ID0gLik7CisgIC5BUk0uZXhpZHggICA6IHsgKiguQVJNLmV4aWR4KiAuZ251LmxpbmtvbmNlLmFybWV4aWR4LiopIH0KKyAgIFBST1ZJREVfSElEREVOIChfX2V4aWR4X2VuZCA9IC4pOworICAuZWhfZnJhbWVfaGRyIDogeyAqKC5laF9mcmFtZV9oZHIpIH0KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9STyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9STyB7ICooLmdjY19leGNlcHRfdGFibGUKKyAgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAvKiBUaGVzZSBzZWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBTdW4vT3JhY2xlIEMrKyBjb21waWxlci4gICovCisgIC5leGNlcHRpb25fcmFuZ2VzICAgOiBPTkxZX0lGX1JPIHsgKiguZXhjZXB0aW9uX3JhbmdlcworICAuZXhjZXB0aW9uX3JhbmdlcyopIH0KKyAgLyogQWRqdXN0IHRoZSBhZGRyZXNzIGZvciB0aGUgZGF0YSBzZWdtZW50LiAgV2Ugd2FudCB0byBhZGp1c3QgdXAgdG8KKyAgICAgdGhlIHNhbWUgYWRkcmVzcyB3aXRoaW4gdGhlIHBhZ2Ugb24gdGhlIG5leHQgcGFnZSB1cC4gICovCisgIC4gPSBBTElHTihDT05TVEFOVCAoTUFYUEFHRVNJWkUpKSArICguICYgKENPTlNUQU5UIChNQVhQQUdFU0laRSkgLSAxKSk7CisgIC8qIEV4Y2VwdGlvbiBoYW5kbGluZyAgKi8KKyAgLmVoX2ZyYW1lICAgICAgIDogT05MWV9JRl9SVyB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQorICAuZ2NjX2V4Y2VwdF90YWJsZSAgIDogT05MWV9JRl9SVyB7ICooLmdjY19leGNlcHRfdGFibGUgLmdjY19leGNlcHRfdGFibGUuKikgfQorICAuZXhjZXB0aW9uX3JhbmdlcyAgIDogT05MWV9JRl9SVyB7ICooLmV4Y2VwdGlvbl9yYW5nZXMgLmV4Y2VwdGlvbl9yYW5nZXMqKSB9CisgIC8qIFRocmVhZCBMb2NhbCBTdG9yYWdlIHNlY3Rpb25zICAqLworICAudGRhdGEJICA6IHsgKigudGRhdGEgLnRkYXRhLiogLmdudS5saW5rb25jZS50ZC4qKSB9CisgIC50YnNzCQkgIDogeyAqKC50YnNzIC50YnNzLiogLmdudS5saW5rb25jZS50Yi4qKSAqKC50Y29tbW9uKSB9CisgIC5wcmVpbml0X2FycmF5ICAgICA6CisgIHsKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuaW5pdF9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguaW5pdF9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuZmluaV9hcnJheSAgICAgOgorICB7CisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOworICAgIEtFRVAgKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCAoKiguZmluaV9hcnJheSkpCisgICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsKKyAgfQorICAuY3RvcnMgICAgICAgICAgOgorICB7CisgICAgLyogZ2NjIHVzZXMgY3J0YmVnaW4ubyB0byBmaW5kIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBjb25zdHJ1Y3RvcnMsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcworICAgICAgIGZpcnN0LiAgQmVjYXVzZSB0aGlzIGlzIGEgd2lsZGNhcmQsIGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QKKyAgICAgICBhY3R1YWxseSBsaW5rIGFnYWluc3QgY3J0YmVnaW4ubzsgdGhlCisgICAgICAgbGlua2VyIHdvbid0IGxvb2sgZm9yIGEgZmlsZSB0byBtYXRjaCBhCisgICAgICAgd2lsZGNhcmQuICBUaGUgd2lsZGNhcmQgYWxzbyBtZWFucyB0aGF0IGl0CisgICAgICAgZG9lc24ndCBtYXR0ZXIgd2hpY2ggZGlyZWN0b3J5IGNydGJlZ2luLm8KKyAgICAgICBpcyBpbi4gICovCisgICAgS0VFUCAoKmNydGJlZ2luLm8oLmN0b3JzKSkKKyAgICBLRUVQICgqY3J0YmVnaW4/Lm8oLmN0b3JzKSkKKyAgICAvKiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGUgdGhlIC5jdG9yIHNlY3Rpb24gZnJvbQorICAgICAgIHRoZSBjcnRlbmQubyBmaWxlIHVudGlsIGFmdGVyIHRoZSBzb3J0ZWQgY3RvcnMuCisgICAgICAgVGhlIC5jdG9yIHNlY3Rpb24gZnJvbSB0aGUgY3J0ZW5kIGZpbGUgY29udGFpbnMgdGhlCisgICAgICAgZW5kIG9mIGN0b3JzIG1hcmtlciBhbmQgaXQgbXVzdCBiZSBsYXN0ICovCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmN0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmN0b3JzLiopKSkKKyAgICBLRUVQICgqKC5jdG9ycykpCisgIH0KKyAgLmR0b3JzICAgICAgICAgIDoKKyAgeworICAgIEtFRVAgKCpjcnRiZWdpbi5vKC5kdG9ycykpCisgICAgS0VFUCAoKmNydGJlZ2luPy5vKC5kdG9ycykpCisgICAgS0VFUCAoKihFWENMVURFX0ZJTEUgKCpjcnRlbmQubyAqY3J0ZW5kPy5vICkgLmR0b3JzKSkKKyAgICBLRUVQICgqKFNPUlQoLmR0b3JzLiopKSkKKyAgICBLRUVQICgqKC5kdG9ycykpCisgIH0KKyAgLmpjciAgICAgICAgICAgIDogeyBLRUVQICgqKC5qY3IpKSB9CisgIC5kYXRhLnJlbC5ybyA6IHsgKiguZGF0YS5yZWwucm8ubG9jYWwqIC5nbnUubGlua29uY2UuZC5yZWwucm8ubG9jYWwuKikgKiguZGF0YS5yZWwucm8gLmRhdGEucmVsLnJvLiogLmdudS5saW5rb25jZS5kLnJlbC5yby4qKSB9CisgIC5keW5hbWljICAgICAgICA6IHsgKiguZHluYW1pYykgfQorICAuZ290ICAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmlnb3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0KKyAgLmRhdGEgICAgICAgICAgIDoKKyAgeworICAgIF9fZGF0YV9zdGFydCA9IC4gOworICAgICooLmRhdGEgLmRhdGEuKiAuZ251LmxpbmtvbmNlLmQuKikKKyAgICBTT1JUKENPTlNUUlVDVE9SUykKKyAgfQorICAuZGF0YTEgICAgICAgICAgOiB7ICooLmRhdGExKSB9CisgIF9lZGF0YSA9IC47IFBST1ZJREUgKGVkYXRhID0gLik7CisgIC4gPSAuOworICBfX2Jzc19zdGFydCA9IC47CisgIF9fYnNzX3N0YXJ0X18gPSAuOworICAuYnNzICAgICAgICAgICAgOgorICB7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKQorICAgKihDT01NT04pCisgICAvKiBBbGlnbiBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSAuYnNzIHNlY3Rpb24gb2NjdXBpZXMgc3BhY2UgdXAgdG8KKyAgICAgIF9lbmQuICBBbGlnbiBhZnRlciAuYnNzIHRvIGVuc3VyZSBjb3JyZWN0IGFsaWdubWVudCBldmVuIGlmIHRoZQorICAgICAgLmJzcyBzZWN0aW9uIGRpc2FwcGVhcnMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW5wdXQgc2VjdGlvbnMuCisgICAgICBGSVhNRTogV2h5IGRvIHdlIG5lZWQgaXQ/IFdoZW4gdGhlcmUgaXMgbm8gLmJzcyBzZWN0aW9uLCB3ZSBkb24ndAorICAgICAgcGFkIHRoZSAuZGF0YSBzZWN0aW9uLiAgKi8KKyAgIC4gPSBBTElHTiguICE9IDAgPyAzMiAvIDggOiAxKTsKKyAgfQorICBfYnNzX2VuZF9fID0gLiA7IF9fYnNzX2VuZF9fID0gLiA7CisgIC4gPSBBTElHTigzMiAvIDgpOworICAuID0gQUxJR04oMzIgLyA4KTsKKyAgX19lbmRfXyA9IC4gOworICBfZW5kID0gLjsgUFJPVklERSAoZW5kID0gLik7CisgIC8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisgIC5zdGFiICAgICAgICAgIDAgOiB7ICooLnN0YWIpIH0KKyAgLnN0YWJzdHIgICAgICAgMCA6IHsgKiguc3RhYnN0cikgfQorICAuc3RhYi5leGNsICAgICAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAgMCA6IHsgKiguc3RhYi5leGNsc3RyKSB9CisgIC5zdGFiLmluZGV4ICAgIDAgOiB7ICooLnN0YWIuaW5kZXgpIH0KKyAgLnN0YWIuaW5kZXhzdHIgMCA6IHsgKiguc3RhYi5pbmRleHN0cikgfQorICAuY29tbWVudCAgICAgICAwIDogeyAqKC5jb21tZW50KSB9CisgIC8qIERXQVJGIGRlYnVnIHNlY3Rpb25zLgorICAgICBTeW1ib2xzIGluIHRoZSBEV0FSRiBkZWJ1Z2dpbmcgc2VjdGlvbnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcKKyAgICAgb2YgdGhlIHNlY3Rpb24gc28gd2UgYmVnaW4gdGhlbSBhdCAwLiAgKi8KKyAgLyogRFdBUkYgMSAqLworICAuZGVidWcgICAgICAgICAgMCA6IHsgKiguZGVidWcpIH0KKyAgLmxpbmUgICAgICAgICAgIDAgOiB7ICooLmxpbmUpIH0KKyAgLyogR05VIERXQVJGIDEgZXh0ZW5zaW9ucyAqLworICAuZGVidWdfc3JjaW5mbyAgMCA6IHsgKiguZGVidWdfc3JjaW5mbykgfQorICAuZGVidWdfc2ZuYW1lcyAgMCA6IHsgKiguZGVidWdfc2ZuYW1lcykgfQorICAvKiBEV0FSRiAxLjEgYW5kIERXQVJGIDIgKi8KKyAgLmRlYnVnX2FyYW5nZXMgIDAgOiB7ICooLmRlYnVnX2FyYW5nZXMpIH0KKyAgLmRlYnVnX3B1Ym5hbWVzIDAgOiB7ICooLmRlYnVnX3B1Ym5hbWVzKSB9CisgIC8qIERXQVJGIDIgKi8KKyAgLmRlYnVnX2luZm8gICAgIDAgOiB7ICooLmRlYnVnX2luZm8gLmdudS5saW5rb25jZS53aS4qKSB9CisgIC5kZWJ1Z19hYmJyZXYgICAwIDogeyAqKC5kZWJ1Z19hYmJyZXYpIH0KKyAgLmRlYnVnX2xpbmUgICAgIDAgOiB7ICooLmRlYnVnX2xpbmUpIH0KKyAgLmRlYnVnX2ZyYW1lICAgIDAgOiB7ICooLmRlYnVnX2ZyYW1lKSB9CisgIC5kZWJ1Z19zdHIgICAgICAwIDogeyAqKC5kZWJ1Z19zdHIpIH0KKyAgLmRlYnVnX2xvYyAgICAgIDAgOiB7ICooLmRlYnVnX2xvYykgfQorICAuZGVidWdfbWFjaW5mbyAgMCA6IHsgKiguZGVidWdfbWFjaW5mbykgfQorICAvKiBTR0kvTUlQUyBEV0FSRiAyIGV4dGVuc2lvbnMgKi8KKyAgLmRlYnVnX3dlYWtuYW1lcyAwIDogeyAqKC5kZWJ1Z193ZWFrbmFtZXMpIH0KKyAgLmRlYnVnX2Z1bmNuYW1lcyAwIDogeyAqKC5kZWJ1Z19mdW5jbmFtZXMpIH0KKyAgLmRlYnVnX3R5cGVuYW1lcyAwIDogeyAqKC5kZWJ1Z190eXBlbmFtZXMpIH0KKyAgLmRlYnVnX3Zhcm5hbWVzICAwIDogeyAqKC5kZWJ1Z192YXJuYW1lcykgfQorICAvKiBEV0FSRiAzICovCisgIC5kZWJ1Z19wdWJ0eXBlcyAwIDogeyAqKC5kZWJ1Z19wdWJ0eXBlcykgfQorICAuZGVidWdfcmFuZ2VzICAgMCA6IHsgKiguZGVidWdfcmFuZ2VzKSB9CisgIC8qIERXQVJGIEV4dGVuc2lvbi4gICovCisgIC5kZWJ1Z19tYWNybyAgICAwIDogeyAqKC5kZWJ1Z19tYWNybykgfQorICAgIC5zdGFjayAgICAgICAgIDB4ODAwMDAgOgorICB7CisgICAgX3N0YWNrID0gLjsKKyAgICAqKC5zdGFjaykKKyAgfQorICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgS0VFUCAoKiguQVJNLmF0dHJpYnV0ZXMpKSBLRUVQICgqKC5nbnUuYXR0cmlidXRlcykpIH0KKyAgLm5vdGUuZ251LmFybS5pZGVudCAwIDogeyBLRUVQICgqKC5ub3RlLmdudS5hcm0uaWRlbnQpKSB9CisgIC9ESVNDQVJELyA6IHsgKigubm90ZS5HTlUtc3RhY2spICooLmdudV9kZWJ1Z2xpbmspICooLmdudS5sdG9fKikgfQorfQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGliYy5hIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGliYy5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjJmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9saWJjLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGliZy5hIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGliZy5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZjJmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9saWJnLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGliZ2ZvcnRyYW4uYSBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xpYmdmb3J0cmFuLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1M2ZjZQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xpYmdmb3J0cmFuLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGliZ2ZvcnRyYW4uc3BlYyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xpYmdmb3J0cmFuLnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExMjk5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xpYmdmb3J0cmFuLnNwZWMKQEAgLTAsMCArMSw4IEBACisjCisjIFRoaXMgc3BlYyBmaWxlIGlzIHJlYWQgYnkgZ2ZvcnRyYW4gd2hlbiBsaW5raW5nLgorIyBJdCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpYnJhcmllcyB3ZSBuZWVkIHRvIGxpbmsgaW4sIGluIHRoZSByaWdodAorIyBvcmRlci4KKyMKKworJXJlbmFtZSBsaWIgbGlib3JpZworKmxpYjogIC1sbSAlKGxpYmdjYykgJShsaWJvcmlnKQpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlibS5hIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlibS5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZGQ1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9saWJtLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlibm9zeXMuYSBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xpYm5vc3lzLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyZmExOQotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xpYm5vc3lzLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlicmRpbW9uLmEgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9saWJyZGltb24uYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWRlODk2Ci0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlicmRpbW9uLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlic3RkYysrLmEgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9saWJzdGRjKysuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBlM2ZjCi0tLSAvZGV2L251bGwKKysrIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlic3RkYysrLmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlic3RkYysrLmEtZ2RiLnB5IGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlic3RkYysrLmEtZ2RiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YzYxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9saWJzdGRjKysuYS1nZGIucHkKQEAgLTAsMCArMSw2MCBAQAorIyAtKi0gcHl0aG9uIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworaW1wb3J0IHN5cworaW1wb3J0IGdkYgoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAorCitweXRob25kaXIgPSAnL2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4L2luc3RhbGwvc2hhcmUvZ2NjLTQuOC4zL3B5dGhvbicKK2xpYmRpciA9ICcvY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvaW5zdGFsbC9hYXJjaDY0LW5vbmUtZWxmL2xpYicKKworIyBUaGlzIGZpbGUgbWlnaHQgYmUgbG9hZGVkIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCBvYmpmaWxlLiAgVGhpcworIyBjYW4gaGFwcGVuIGlmIHRoZSB1c2VyIGxvYWRzIGl0IG1hbnVhbGx5LiAgSW4gdGhpcyBjYXNlIHdlIGRvbid0CisjIHVwZGF0ZSBzeXMucGF0aDsgaW5zdGVhZCB3ZSBqdXN0IGhvcGUgdGhlIHVzZXIgbWFuYWdlZCB0byBkbyB0aGF0CisjIGJlZm9yZWhhbmQuCitpZiBnZGIuY3VycmVudF9vYmpmaWxlICgpIGlzIG5vdCBOb25lOgorICAgICMgVXBkYXRlIG1vZHVsZSBwYXRoLiAgV2Ugd2FudCB0byBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gbGliZGlyCisgICAgIyB0byBweXRob25kaXIsIGFuZCB0aGVuIHdlIHdhbnQgdG8gYXBwbHkgdGhhdCByZWxhdGl2ZSBwYXRoIHRvIHRoZQorICAgICMgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIG9iamZpbGUgd2l0aCB3aGljaCB0aGlzIGZpbGUgaXMgYXNzb2NpYXRlZC4KKyAgICAjIFRoaXMgcHJlc2VydmVzIHJlbG9jYXRhYmlsaXR5IG9mIHRoZSBnY2MgdHJlZS4KKworICAgICMgRG8gYSBzaW1wbGUgbm9ybWFsaXphdGlvbiB0aGF0IHJlbW92ZXMgZHVwbGljYXRlIHNlcGFyYXRvcnMuCisgICAgcHl0aG9uZGlyID0gb3MucGF0aC5ub3JtcGF0aCAocHl0aG9uZGlyKQorICAgIGxpYmRpciA9IG9zLnBhdGgubm9ybXBhdGggKGxpYmRpcikKKworICAgIHByZWZpeCA9IG9zLnBhdGguY29tbW9ucHJlZml4IChbbGliZGlyLCBweXRob25kaXJdKQorICAgICMgSW4gc29tZSBiaXphcnJlIGNvbmZpZ3VyYXRpb24gd2UgbWlnaHQgaGF2ZSBmb3VuZCBhIG1hdGNoIGluIHRoZQorICAgICMgbWlkZGxlIG9mIGEgZGlyZWN0b3J5IG5hbWUuCisgICAgaWYgcHJlZml4Wy0xXSAhPSAnLyc6CisgICAgICAgIHByZWZpeCA9IG9zLnBhdGguZGlybmFtZSAocHJlZml4KSArICcvJworCisgICAgIyBTdHJpcCBvZmYgdGhlIHByZWZpeC4KKyAgICBweXRob25kaXIgPSBweXRob25kaXJbbGVuIChwcmVmaXgpOl0KKyAgICBsaWJkaXIgPSBsaWJkaXJbbGVuIChwcmVmaXgpOl0KKworICAgICMgQ29tcHV0ZSB0aGUgIi4uInMgbmVlZGVkIHRvIGdldCBmcm9tIGxpYmRpciB0byB0aGUgcHJlZml4LgorICAgIGRvdGRvdHMgPSAoJy4uJyArIG9zLnNlcCkgKiBsZW4gKGxpYmRpci5zcGxpdCAob3Muc2VwKSkKKworICAgIG9iamZpbGUgPSBnZGIuY3VycmVudF9vYmpmaWxlICgpLmZpbGVuYW1lCisgICAgZGlyXyA9IG9zLnBhdGguam9pbiAob3MucGF0aC5kaXJuYW1lIChvYmpmaWxlKSwgZG90ZG90cywgcHl0aG9uZGlyKQorCisgICAgaWYgbm90IGRpcl8gaW4gc3lzLnBhdGg6CisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBkaXJfKQorCisjIExvYWQgdGhlIHByZXR0eS1wcmludGVycy4KK2Zyb20gbGlic3RkY3h4LnY2LnByaW50ZXJzIGltcG9ydCByZWdpc3Rlcl9saWJzdGRjeHhfcHJpbnRlcnMKK3JlZ2lzdGVyX2xpYnN0ZGN4eF9wcmludGVycyAoZ2RiLmN1cnJlbnRfb2JqZmlsZSAoKSkKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xpYnN1cGMrKy5hIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbGlic3VwYysrLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliNjRiMAotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL2xpYnN1cGMrKy5hCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FhcmNoNjQtbm9uZS1lbGYvbGliL25vc3lzLnNwZWNzIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvbm9zeXMuc3BlY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZmVmYgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL25vc3lzLnNwZWNzCkBAIC0wLDAgKzEsOCBAQAorJXJlbmFtZSBsaWIgbGliYworCisqbGliZ2xvc3M6CistbG5vc3lzCisKKypsaWI6CistLXN0YXJ0LWdyb3VwICUobGliYykgJShsaWJnbG9zcykgLS1lbmQtZ3JvdXAKKwpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvcmRpbW9uLWNydDAubyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL3JkaW1vbi1jcnQwLm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4NjM5YgotLS0gL2Rldi9udWxsCisrKyBiL2FhcmNoNjQtbm9uZS1lbGYvbGliL3JkaW1vbi1jcnQwLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYWFyY2g2NC1ub25lLWVsZi9saWIvcmRpbW9uLnNwZWNzIGIvYWFyY2g2NC1ub25lLWVsZi9saWIvcmRpbW9uLnNwZWNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTY0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hYXJjaDY0LW5vbmUtZWxmL2xpYi9yZGltb24uc3BlY3MKQEAgLTAsMCArMSw3IEBACislcmVuYW1lIGxpYiBsaWJjCisKKypsaWJnbG9zczoKKy1scmRpbW9uCisKKypsaWI6CistLXN0YXJ0LWdyb3VwICUobGliYykgJShsaWJnbG9zcykgLS1lbmQtZ3JvdXAKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWFkZHIybGluZSBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWFkZHIybGluZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZDY2NGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtYWRkcjJsaW5lCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWFyIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtYXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjcwN2I2MQotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWFzIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtYXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjcyMzczMAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWFzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWMrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWMrKwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5lNmI4NmYzCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtYysrCkBAIC0wLDAgKzEgQEAKK2FhcmNoNjQtbm9uZS1lbGYtZysrClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYmluL2FhcmNoNjQtbm9uZS1lbGYtYysrZmlsdCBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWMrK2ZpbHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjQ2MTljMAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWMrK2ZpbHQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FhcmNoNjQtbm9uZS1lbGYtY3BwIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzOTkyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1jcHAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FhcmNoNjQtbm9uZS1lbGYtY3QtbmcuY29uZmlnIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtY3QtbmcuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Mjk0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1jdC1uZy5jb25maWcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FhcmNoNjQtbm9uZS1lbGYtZWxmZWRpdCBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWVsZmVkaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDBlOWVjNAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWVsZmVkaXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FhcmNoNjQtbm9uZS1lbGYtZysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtZysrCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjYzJhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1nKysKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL2FhcmNoNjQtbm9uZS1lbGYtZ2NjIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtZ2NjCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLmZmN2NjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY2MKQEAgLTAsMCArMSBAQAorYWFyY2g2NC1ub25lLWVsZi1nY2MtNC44LjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY2MtNC44LjMgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY2MtNC44LjMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzgzNTBiYwotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWdjYy00LjguMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY2MtYXIgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY2MtYXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWI0MTRiOAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWdjYy1hcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY2Mtbm0gYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY2Mtbm0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDliOWNhMAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWdjYy1ubQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY2MtcmFubGliIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtZ2NjLXJhbmxpYgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNWQ1OWJiCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtZ2NjLXJhbmxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1nY292IGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtZ2NvdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNzMyMmU4Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtZ2NvdgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1nZGIgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1nZGIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODlmNDgyZAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWdkYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1nZm9ydHJhbiBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWdmb3J0cmFuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliYzMwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1nZm9ydHJhbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1ncHJvZiBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWdwcm9mCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzMjI4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1ncHJvZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1sZCBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWxkCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjYyZDUzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1sZApAQCAtMCwwICsxIEBACithYXJjaDY0LW5vbmUtZWxmLWxkLmJmZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWxkLmJmZCBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLWxkLmJmZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOWU0NjAwCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtbGQuYmZkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLW5tIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtbm0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjNjN2RiNgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLW5tCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLW9iamNvcHkgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1vYmpjb3B5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlYWQ5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1vYmpjb3B5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLW9iamR1bXAgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1vYmpkdW1wCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE5MjgyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1vYmpkdW1wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLXBrZy1jb25maWcgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1wa2ctY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiNTg3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1wa2ctY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorIworIyBXcmFwcGVyIHNjcmlwdCB0aGF0IGNhbGxzIHRoZSByZWFsIHBrZy1jb25maWcgd2l0aCB0aGUgcmVsb2NhdGVkCisjIHN5c3Jvb3QgbG9jYXRpb24KKyMKK3NldCAtZQorCitHQ0M9IiR7MCUlLXBrZy1jb25maWd9LWdjYyIKK01BQ0hJTkU9YCIkR0NDIiAtZHVtcG1hY2hpbmVgCitTWVNST09UPWAiJEdDQyIgLXByaW50LXN5c3Jvb3RgCisKK2V4cG9ydCBQS0dfQ09ORklHX0RJUj0KK2V4cG9ydCBQS0dfQ09ORklHX0xJQkRJUj0iJHtTWVNST09UfS91c3IvbGliLyR7TUFDSElORX0vcGtnY29uZmlnIjoiJHtTWVNST09UfS91c3IvbGliL3BrZ2NvbmZpZyI6IiR7U1lTUk9PVH0vdXNyL3NoYXJlL3BrZ2NvbmZpZyIKK2V4cG9ydCBQS0dfQ09ORklHX1NZU1JPT1RfRElSPSIke1NZU1JPT1R9IgorCitleGVjICIkMC1yZWFsIiAiJEAiCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1wa2ctY29uZmlnLXJlYWwgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1wa2ctY29uZmlnLXJlYWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDAxOGMyNQotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLXBrZy1jb25maWctcmVhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1yYW5saWIgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1yYW5saWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTExZWQzMAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLXJhbmxpYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1yZWFkZWxmIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtcmVhZGVsZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZDY3YzZmCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtcmVhZGVsZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1zaXplIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtc2l6ZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYjlmNTdjCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtc2l6ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1zdHJpbmdzIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtc3RyaW5ncwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMjY5NjgyCi0tLSAvZGV2L251bGwKKysrIGIvYmluL2FhcmNoNjQtbm9uZS1lbGYtc3RyaW5ncwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vYWFyY2g2NC1ub25lLWVsZi1zdHJpcCBiL2Jpbi9hYXJjaDY0LW5vbmUtZWxmLXN0cmlwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3MjM2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWFyY2g2NC1ub25lLWVsZi1zdHJpcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY3J0YmVnaW4ubyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9jcnRiZWdpbi5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NzBjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY3J0YmVnaW4ubwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY3J0ZW5kLm8gYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY3J0ZW5kLm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhNDI3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9jcnRlbmQubwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY3J0aS5vIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2NydGkubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzMxNGQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2NydGkubwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY3J0bi5vIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2NydG4ubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzVjOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2NydG4ubwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS1maXhlZC9SRUFETUUgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS1maXhlZC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4NmE3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlLWZpeGVkL1JFQURNRQpAQCAtMCwwICsxLDE0IEBACitUaGlzIFJFQURNRSBmaWxlIGlzIGNvcGllZCBpbnRvIHRoZSBkaXJlY3RvcnkgZm9yIEdDQy1vbmx5IGhlYWRlciBmaWxlcword2hlbiBmaXhpbmNsdWRlcyBpcyBydW4gYnkgdGhlIG1ha2VmaWxlIGZvciBHQ0MuCisKK01hbnkgb2YgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgYXV0b21hdGljYWxseSBlZGl0ZWQgZnJvbSB0aGUKK3N0YW5kYXJkIHN5c3RlbSBoZWFkZXIgZmlsZXMgYnkgdGhlIGZpeGluY2x1ZGVzIHByb2Nlc3MuICBUaGV5IGFyZQorc3lzdGVtLXNwZWNpZmljLCBhbmQgd2lsbCBub3Qgd29yayBvbiBhbnkgb3RoZXIga2luZCBvZiBzeXN0ZW0uICBUaGV5CithcmUgYWxzbyBub3QgcGFydCBvZiBHQ0MuICBUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNhdXNlCitHQ0MgcmVxdWlyZXMgQU5TSSBDIGhlYWRlcnMgYW5kIG1hbnkgdmVuZG9ycyBzdXBwbHkgQU5TSS1pbmNvbXBhdGlibGUKK2hlYWRlcnMuCisKK0JlY2F1c2UgdGhpcyBpcyBhbiBhdXRvbWF0ZWQgcHJvY2Vzcywgc29tZXRpbWVzIGhlYWRlcnMgZ2V0ICJmaXhlZCIKK3RoYXQgZG8gbm90LCBzdHJpY3RseSBzcGVha2luZywgbmVlZCBhIGZpeC4gIEFzIGxvbmcgYXMgbm90aGluZyBpcyBicm9rZW4KK2J5IHRoZSBwcm9jZXNzLCBpdCBpcyBqdXN0IGFuIHVuZm9ydHVuYXRlIGNvbGxhdGVyYWwgaW5jb252ZW5pZW5jZS4KK1dlIHdvdWxkIGxpa2UgdG8gcmVjdGlmeSBpdCwgaWYgaXQgaXMgbm90ICJ0b28gaW5jb252ZW5pZW50Ii4KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlLWZpeGVkL2xpbWl0cy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUtZml4ZWQvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyYzJjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlLWZpeGVkL2xpbWl0cy5oCkBAIC0wLDAgKzEsMTI2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfTElNSVRTX0hfX18KKyNkZWZpbmUgX0xJTUlUU19IX19fCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgYGNoYXInLiAgKi8KKyN1bmRlZiBDSEFSX0JJVAorI2RlZmluZSBDSEFSX0JJVCBfX0NIQVJfQklUX18KKworLyogTWF4aW11bSBsZW5ndGggb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KKyNpZm5kZWYgTUJfTEVOX01BWAorI2RlZmluZSBNQl9MRU5fTUFYIDEKKyNlbmRpZgorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgY2hhcicgY2FuIGhvbGQuICAqLworI3VuZGVmIFNDSEFSX01JTgorI2RlZmluZSBTQ0hBUl9NSU4gKC1TQ0hBUl9NQVggLSAxKQorI3VuZGVmIFNDSEFSX01BWAorI2RlZmluZSBTQ0hBUl9NQVggX19TQ0hBUl9NQVhfXworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBjaGFyJyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyN1bmRlZiBVQ0hBUl9NQVgKKyNpZiBfX1NDSEFSX01BWF9fID09IF9fSU5UX01BWF9fCisjIGRlZmluZSBVQ0hBUl9NQVggKFNDSEFSX01BWCAqIDJVICsgMVUpCisjZWxzZQorIyBkZWZpbmUgVUNIQVJfTUFYIChTQ0hBUl9NQVggKiAyICsgMSkKKyNlbmRpZgorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBjaGFyJyBjYW4gaG9sZC4gICovCisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KKyMgdW5kZWYgQ0hBUl9NSU4KKyMgaWYgX19TQ0hBUl9NQVhfXyA9PSBfX0lOVF9NQVhfXworIyAgZGVmaW5lIENIQVJfTUlOIDBVCisjIGVsc2UKKyMgIGRlZmluZSBDSEFSX01JTiAwCisjIGVuZGlmCisjIHVuZGVmIENIQVJfTUFYCisjIGRlZmluZSBDSEFSX01BWCBVQ0hBUl9NQVgKKyNlbHNlCisjIHVuZGVmIENIQVJfTUlOCisjIGRlZmluZSBDSEFSX01JTiBTQ0hBUl9NSU4KKyMgdW5kZWYgQ0hBUl9NQVgKKyMgZGVmaW5lIENIQVJfTUFYIFNDSEFSX01BWAorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBzaG9ydCBpbnQnIGNhbiBob2xkLiAgKi8KKyN1bmRlZiBTSFJUX01JTgorI2RlZmluZSBTSFJUX01JTiAoLVNIUlRfTUFYIC0gMSkKKyN1bmRlZiBTSFJUX01BWAorI2RlZmluZSBTSFJUX01BWCBfX1NIUlRfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgc2hvcnQgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyN1bmRlZiBVU0hSVF9NQVgKKyNpZiBfX1NIUlRfTUFYX18gPT0gX19JTlRfTUFYX18KKyMgZGVmaW5lIFVTSFJUX01BWCAoU0hSVF9NQVggKiAyVSArIDFVKQorI2Vsc2UKKyMgZGVmaW5lIFVTSFJUX01BWCAoU0hSVF9NQVggKiAyICsgMSkKKyNlbmRpZgorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgaW50JyBjYW4gaG9sZC4gICovCisjdW5kZWYgSU5UX01JTgorI2RlZmluZSBJTlRfTUlOICgtSU5UX01BWCAtIDEpCisjdW5kZWYgSU5UX01BWAorI2RlZmluZSBJTlRfTUFYIF9fSU5UX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGludCcgY2FuIGhvbGQuICAoTWluaW11bSBpcyAwKS4gICovCisjdW5kZWYgVUlOVF9NQVgKKyNkZWZpbmUgVUlOVF9NQVggKElOVF9NQVggKiAyVSArIDFVKQorCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBpbnQnIGNhbiBob2xkLgorICAgKFNhbWUgYXMgYGludCcpLiAgKi8KKyN1bmRlZiBMT05HX01JTgorI2RlZmluZSBMT05HX01JTiAoLUxPTkdfTUFYIC0gMUwpCisjdW5kZWYgTE9OR19NQVgKKyNkZWZpbmUgTE9OR19NQVggX19MT05HX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGxvbmcgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyN1bmRlZiBVTE9OR19NQVgKKyNkZWZpbmUgVUxPTkdfTUFYIChMT05HX01BWCAqIDJVTCArIDFVTCkKKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgYSBgc2lnbmVkIGxvbmcgbG9uZyBpbnQnIGNhbiBob2xkLiAgKi8KKyMgdW5kZWYgTExPTkdfTUlOCisjIGRlZmluZSBMTE9OR19NSU4gKC1MTE9OR19NQVggLSAxTEwpCisjIHVuZGVmIExMT05HX01BWAorIyBkZWZpbmUgTExPTkdfTUFYIF9fTE9OR19MT05HX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworIyB1bmRlZiBVTExPTkdfTUFYCisjIGRlZmluZSBVTExPTkdfTUFYIChMTE9OR19NQVggKiAyVUxMICsgMVVMTCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19HTlVfTElCUkFSWV9fKSA/IGRlZmluZWQgKF9fVVNFX0dOVSkgOiAhZGVmaW5lZCAoX19TVFJJQ1RfQU5TSV9fKQorLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgYSBgc2lnbmVkIGxvbmcgbG9uZyBpbnQnIGNhbiBob2xkLiAgKi8KKyMgdW5kZWYgTE9OR19MT05HX01JTgorIyBkZWZpbmUgTE9OR19MT05HX01JTiAoLUxPTkdfTE9OR19NQVggLSAxTEwpCisjIHVuZGVmIExPTkdfTE9OR19NQVgKKyMgZGVmaW5lIExPTkdfTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAoTWluaW11bSBpcyAwKS4gICovCisjIHVuZGVmIFVMT05HX0xPTkdfTUFYCisjIGRlZmluZSBVTE9OR19MT05HX01BWCAoTE9OR19MT05HX01BWCAqIDJVTEwgKyAxVUxMKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTElNSVRTX0hfX18gKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlLWZpeGVkL3N5c2xpbWl0cy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUtZml4ZWQvc3lzbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2MjgwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlLWZpeGVkL3N5c2xpbWl0cy5oCkBAIC0wLDAgKzEsOCBAQAorLyogc3lzbGltaXRzLmggc3RhbmRzIGZvciB0aGUgc3lzdGVtJ3Mgb3duIGxpbWl0cy5oIGZpbGUuCisgICBJZiB3ZSBjYW4gdXNlIGl0IG9rIHVubW9kaWZpZWQsIHRoZW4gd2UgaW5zdGFsbCB0aGlzIHRleHQuCisgICBJZiBmaXhpbmNsdWRlcyBmaXhlcyBpdCwgdGhlbiB0aGUgZml4ZWQgdmVyc2lvbiBpcyBpbnN0YWxsZWQKKyAgIGluc3RlYWQgb2YgdGhpcyB0ZXh0LiAgKi8KKworI2RlZmluZSBfR0NDX05FWFRfTElNSVRTX0gJCS8qIHRlbGwgZ2NjJ3MgbGltaXRzLmggdG8gcmVjdXJzZSAqLworI2luY2x1ZGVfbmV4dCA8bGltaXRzLmg+CisjdW5kZWYgX0dDQ19ORVhUX0xJTUlUU19ICmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9hcm1fbmVvbi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvYXJtX25lb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjMwZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvYXJtX25lb24uaApAQCAtMCwwICsxLDI1NjM5IEBACisvKiBBUk0gTkVPTiBpbnRyaW5zaWNzIGluY2x1ZGUgZmlsZS4KKworICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBBUk0gTHRkLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIKKyAgIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorICAgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorICAgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisgICBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworICAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9BQVJDSDY0X05FT05fSF8KKyNkZWZpbmUgX0FBUkNINjRfTkVPTl9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNkZWZpbmUgX19BQVJDSDY0X1VJTlQ2NF9DKF9fQykgKCh1aW50NjRfdCkgX19DKQorI2RlZmluZSBfX0FBUkNINjRfSU5UNjRfQyhfX0MpICgoaW50NjRfdCkgX19DKQorCit0eXBlZGVmIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgaW50OHg4X3QKKyAgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoOCkpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSBpbnQxNng0X3QKKyAgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoOCkpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSBpbnQzMngyX3QKKyAgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoOCkpKTsKK3R5cGVkZWYgaW50NjRfdCBpbnQ2NHgxX3Q7Cit0eXBlZGVmIGludDMyX3QgaW50MzJ4MV90OwordHlwZWRlZiBpbnQxNl90IGludDE2eDFfdDsKK3R5cGVkZWYgaW50OF90IGludDh4MV90OwordHlwZWRlZiBkb3VibGUgZmxvYXQ2NHgxX3Q7Cit0eXBlZGVmIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2YgZmxvYXQzMngyX3QKKyAgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoOCkpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9wb2x5OCBwb2x5OHg4X3QKKyAgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoOCkpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9wb2x5MTYgcG9seTE2eDRfdAorICBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg4KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3VxaSB1aW50OHg4X3QKKyAgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoOCkpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF91aGkgdWludDE2eDRfdAorICBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg4KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3VzaSB1aW50MzJ4Ml90CisgIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDgpKSk7Cit0eXBlZGVmIHVpbnQ2NF90IHVpbnQ2NHgxX3Q7Cit0eXBlZGVmIHVpbnQzMl90IHVpbnQzMngxX3Q7Cit0eXBlZGVmIHVpbnQxNl90IHVpbnQxNngxX3Q7Cit0eXBlZGVmIHVpbnQ4X3QgdWludDh4MV90OwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpIGludDh4MTZfdAorICBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSBpbnQxNng4X3QKKyAgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpKSk7Cit0eXBlZGVmIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgaW50MzJ4NF90CisgIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpIGludDY0eDJfdAorICBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zZiBmbG9hdDMyeDRfdAorICBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9kZiBmbG9hdDY0eDJfdAorICBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICgxNikpKTsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9wb2x5OCBwb2x5OHgxNl90CisgIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3BvbHkxNiBwb2x5MTZ4OF90CisgIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3VxaSB1aW50OHgxNl90CisgIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3VoaSB1aW50MTZ4OF90CisgIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3VzaSB1aW50MzJ4NF90CisgIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3VkaSB1aW50NjR4Ml90CisgIF9fYXR0cmlidXRlX18gKChfX3ZlY3Rvcl9zaXplX18gKDE2KSkpOworCit0eXBlZGVmIGZsb2F0IGZsb2F0MzJfdDsKK3R5cGVkZWYgZG91YmxlIGZsb2F0NjRfdDsKK3R5cGVkZWYgX19idWlsdGluX2FhcmNoNjRfc2ltZF9wb2x5OCBwb2x5OF90OwordHlwZWRlZiBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3BvbHkxNiBwb2x5MTZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDJfdAoreworICBpbnQ4eDhfdCB2YWxbMl07Cit9IGludDh4OHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDh4MTZ4Ml90Cit7CisgIGludDh4MTZfdCB2YWxbMl07Cit9IGludDh4MTZ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng0eDJfdAoreworICBpbnQxNng0X3QgdmFsWzJdOworfSBpbnQxNng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4OHgyX3QKK3sKKyAgaW50MTZ4OF90IHZhbFsyXTsKK30gaW50MTZ4OHgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDJ4Ml90Cit7CisgIGludDMyeDJfdCB2YWxbMl07Cit9IGludDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMng0eDJfdAoreworICBpbnQzMng0X3QgdmFsWzJdOworfSBpbnQzMng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MXgyX3QKK3sKKyAgaW50NjR4MV90IHZhbFsyXTsKK30gaW50NjR4MXgyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDJ4Ml90Cit7CisgIGludDY0eDJfdCB2YWxbMl07Cit9IGludDY0eDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHg4eDJfdAoreworICB1aW50OHg4X3QgdmFsWzJdOworfSB1aW50OHg4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4MTZ4Ml90Cit7CisgIHVpbnQ4eDE2X3QgdmFsWzJdOworfSB1aW50OHgxNngyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng0eDJfdAoreworICB1aW50MTZ4NF90IHZhbFsyXTsKK30gdWludDE2eDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4OHgyX3QKK3sKKyAgdWludDE2eDhfdCB2YWxbMl07Cit9IHVpbnQxNng4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDJ4Ml90Cit7CisgIHVpbnQzMngyX3QgdmFsWzJdOworfSB1aW50MzJ4MngyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMng0eDJfdAoreworICB1aW50MzJ4NF90IHZhbFsyXTsKK30gdWludDMyeDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MXgyX3QKK3sKKyAgdWludDY0eDFfdCB2YWxbMl07Cit9IHVpbnQ2NHgxeDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDJ4Ml90Cit7CisgIHVpbnQ2NHgyX3QgdmFsWzJdOworfSB1aW50NjR4MngyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4MngyX3QKK3sKKyAgZmxvYXQzMngyX3QgdmFsWzJdOworfSBmbG9hdDMyeDJ4Ml90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDR4Ml90Cit7CisgIGZsb2F0MzJ4NF90IHZhbFsyXTsKK30gZmxvYXQzMng0eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgyeDJfdAoreworICBmbG9hdDY0eDJfdCB2YWxbMl07Cit9IGZsb2F0NjR4MngyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MXgyX3QKK3sKKyAgZmxvYXQ2NHgxX3QgdmFsWzJdOworfSBmbG9hdDY0eDF4Ml90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5OHg4eDJfdAoreworICBwb2x5OHg4X3QgdmFsWzJdOworfSBwb2x5OHg4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTh4MTZ4Ml90Cit7CisgIHBvbHk4eDE2X3QgdmFsWzJdOworfSBwb2x5OHgxNngyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng0eDJfdAoreworICBwb2x5MTZ4NF90IHZhbFsyXTsKK30gcG9seTE2eDR4Ml90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4OHgyX3QKK3sKKyAgcG9seTE2eDhfdCB2YWxbMl07Cit9IHBvbHkxNng4eDJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDNfdAoreworICBpbnQ4eDhfdCB2YWxbM107Cit9IGludDh4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDh4MTZ4M190Cit7CisgIGludDh4MTZfdCB2YWxbM107Cit9IGludDh4MTZ4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng0eDNfdAoreworICBpbnQxNng0X3QgdmFsWzNdOworfSBpbnQxNng0eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4OHgzX3QKK3sKKyAgaW50MTZ4OF90IHZhbFszXTsKK30gaW50MTZ4OHgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDJ4M190Cit7CisgIGludDMyeDJfdCB2YWxbM107Cit9IGludDMyeDJ4M190OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMng0eDNfdAoreworICBpbnQzMng0X3QgdmFsWzNdOworfSBpbnQzMng0eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MXgzX3QKK3sKKyAgaW50NjR4MV90IHZhbFszXTsKK30gaW50NjR4MXgzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDJ4M190Cit7CisgIGludDY0eDJfdCB2YWxbM107Cit9IGludDY0eDJ4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHg4eDNfdAoreworICB1aW50OHg4X3QgdmFsWzNdOworfSB1aW50OHg4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4MTZ4M190Cit7CisgIHVpbnQ4eDE2X3QgdmFsWzNdOworfSB1aW50OHgxNngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng0eDNfdAoreworICB1aW50MTZ4NF90IHZhbFszXTsKK30gdWludDE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4OHgzX3QKK3sKKyAgdWludDE2eDhfdCB2YWxbM107Cit9IHVpbnQxNng4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDJ4M190Cit7CisgIHVpbnQzMngyX3QgdmFsWzNdOworfSB1aW50MzJ4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMng0eDNfdAoreworICB1aW50MzJ4NF90IHZhbFszXTsKK30gdWludDMyeDR4M190OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MXgzX3QKK3sKKyAgdWludDY0eDFfdCB2YWxbM107Cit9IHVpbnQ2NHgxeDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDJ4M190Cit7CisgIHVpbnQ2NHgyX3QgdmFsWzNdOworfSB1aW50NjR4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4MngzX3QKK3sKKyAgZmxvYXQzMngyX3QgdmFsWzNdOworfSBmbG9hdDMyeDJ4M190OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDR4M190Cit7CisgIGZsb2F0MzJ4NF90IHZhbFszXTsKK30gZmxvYXQzMng0eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgyeDNfdAoreworICBmbG9hdDY0eDJfdCB2YWxbM107Cit9IGZsb2F0NjR4MngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MXgzX3QKK3sKKyAgZmxvYXQ2NHgxX3QgdmFsWzNdOworfSBmbG9hdDY0eDF4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5OHg4eDNfdAoreworICBwb2x5OHg4X3QgdmFsWzNdOworfSBwb2x5OHg4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTh4MTZ4M190Cit7CisgIHBvbHk4eDE2X3QgdmFsWzNdOworfSBwb2x5OHgxNngzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng0eDNfdAoreworICBwb2x5MTZ4NF90IHZhbFszXTsKK30gcG9seTE2eDR4M190OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4OHgzX3QKK3sKKyAgcG9seTE2eDhfdCB2YWxbM107Cit9IHBvbHkxNng4eDNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDRfdAoreworICBpbnQ4eDhfdCB2YWxbNF07Cit9IGludDh4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDh4MTZ4NF90Cit7CisgIGludDh4MTZfdCB2YWxbNF07Cit9IGludDh4MTZ4NF90OworCit0eXBlZGVmIHN0cnVjdCBpbnQxNng0eDRfdAoreworICBpbnQxNng0X3QgdmFsWzRdOworfSBpbnQxNng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50MTZ4OHg0X3QKK3sKKyAgaW50MTZ4OF90IHZhbFs0XTsKK30gaW50MTZ4OHg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDMyeDJ4NF90Cit7CisgIGludDMyeDJfdCB2YWxbNF07Cit9IGludDMyeDJ4NF90OworCit0eXBlZGVmIHN0cnVjdCBpbnQzMng0eDRfdAoreworICBpbnQzMng0X3QgdmFsWzRdOworfSBpbnQzMng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaW50NjR4MXg0X3QKK3sKKyAgaW50NjR4MV90IHZhbFs0XTsKK30gaW50NjR4MXg0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGludDY0eDJ4NF90Cit7CisgIGludDY0eDJfdCB2YWxbNF07Cit9IGludDY0eDJ4NF90OworCit0eXBlZGVmIHN0cnVjdCB1aW50OHg4eDRfdAoreworICB1aW50OHg4X3QgdmFsWzRdOworfSB1aW50OHg4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDh4MTZ4NF90Cit7CisgIHVpbnQ4eDE2X3QgdmFsWzRdOworfSB1aW50OHgxNng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQxNng0eDRfdAoreworICB1aW50MTZ4NF90IHZhbFs0XTsKK30gdWludDE2eDR4NF90OworCit0eXBlZGVmIHN0cnVjdCB1aW50MTZ4OHg0X3QKK3sKKyAgdWludDE2eDhfdCB2YWxbNF07Cit9IHVpbnQxNng4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDMyeDJ4NF90Cit7CisgIHVpbnQzMngyX3QgdmFsWzRdOworfSB1aW50MzJ4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVpbnQzMng0eDRfdAoreworICB1aW50MzJ4NF90IHZhbFs0XTsKK30gdWludDMyeDR4NF90OworCit0eXBlZGVmIHN0cnVjdCB1aW50NjR4MXg0X3QKK3sKKyAgdWludDY0eDFfdCB2YWxbNF07Cit9IHVpbnQ2NHgxeDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWludDY0eDJ4NF90Cit7CisgIHVpbnQ2NHgyX3QgdmFsWzRdOworfSB1aW50NjR4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0MzJ4Mng0X3QKK3sKKyAgZmxvYXQzMngyX3QgdmFsWzRdOworfSBmbG9hdDMyeDJ4NF90OworCit0eXBlZGVmIHN0cnVjdCBmbG9hdDMyeDR4NF90Cit7CisgIGZsb2F0MzJ4NF90IHZhbFs0XTsKK30gZmxvYXQzMng0eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgZmxvYXQ2NHgyeDRfdAoreworICBmbG9hdDY0eDJfdCB2YWxbNF07Cit9IGZsb2F0NjR4Mng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGZsb2F0NjR4MXg0X3QKK3sKKyAgZmxvYXQ2NHgxX3QgdmFsWzRdOworfSBmbG9hdDY0eDF4NF90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5OHg4eDRfdAoreworICBwb2x5OHg4X3QgdmFsWzRdOworfSBwb2x5OHg4eDRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcG9seTh4MTZ4NF90Cit7CisgIHBvbHk4eDE2X3QgdmFsWzRdOworfSBwb2x5OHgxNng0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHBvbHkxNng0eDRfdAoreworICBwb2x5MTZ4NF90IHZhbFs0XTsKK30gcG9seTE2eDR4NF90OworCit0eXBlZGVmIHN0cnVjdCBwb2x5MTZ4OHg0X3QKK3sKKyAgcG9seTE2eDhfdCB2YWxbNF07Cit9IHBvbHkxNng4eDRfdDsKKworLyogdmdldF9sYW5lIGludGVybmFsIG1hY3Jvcy4gICovCisKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRfbGFuZV9hbnkoX19zaXplLCBfX2Nhc3RfcmV0LCBfX2Nhc3RfYSwgX19hLCBfX2IpIFwKKyAgKF9fY2FzdF9yZXQJCQkJCQkJCVwKKyAgICAgX19idWlsdGluX2FhcmNoNjRfZ2V0X2xhbmUjI19fc2l6ZSAoX19jYXN0X2EgX19hLCBfX2IpKQorCisjZGVmaW5lIF9fYWFyY2g2NF92Z2V0X2xhbmVfZjMyKF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2MnNmLCAsICwgX19hLCBfX2IpCisjZGVmaW5lIF9fYWFyY2g2NF92Z2V0X2xhbmVfZjY0KF9fYSwgX19iKSAoX19hKQorCisjZGVmaW5lIF9fYWFyY2g2NF92Z2V0X2xhbmVfcDgoX19hLCBfX2IpIFwKKyAgX19hYXJjaDY0X3ZnZXRfbGFuZV9hbnkgKHY4cWksIChwb2x5OF90KSwgKGludDh4OF90KSwgX19hLCBfX2IpCisjZGVmaW5lIF9fYWFyY2g2NF92Z2V0X2xhbmVfcDE2KF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2NGhpLCAocG9seTE2X3QpLCAoaW50MTZ4NF90KSwgX19hLCBfX2IpCisKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRfbGFuZV9zOChfX2EsIF9fYikgXAorICBfX2FhcmNoNjRfdmdldF9sYW5lX2FueSAodjhxaSwgLCAsX19hLCBfX2IpCisjZGVmaW5lIF9fYWFyY2g2NF92Z2V0X2xhbmVfczE2KF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2NGhpLCAsICxfX2EsIF9fYikKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRfbGFuZV9zMzIoX19hLCBfX2IpIFwKKyAgX19hYXJjaDY0X3ZnZXRfbGFuZV9hbnkgKHYyc2ksICwgLF9fYSwgX19iKQorI2RlZmluZSBfX2FhcmNoNjRfdmdldF9sYW5lX3M2NChfX2EsIF9fYikgKF9fYSkKKworI2RlZmluZSBfX2FhcmNoNjRfdmdldF9sYW5lX3U4KF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2OHFpLCAodWludDhfdCksIChpbnQ4eDhfdCksIF9fYSwgX19iKQorI2RlZmluZSBfX2FhcmNoNjRfdmdldF9sYW5lX3UxNihfX2EsIF9fYikgXAorICBfX2FhcmNoNjRfdmdldF9sYW5lX2FueSAodjRoaSwgKHVpbnQxNl90KSwgKGludDE2eDRfdCksIF9fYSwgX19iKQorI2RlZmluZSBfX2FhcmNoNjRfdmdldF9sYW5lX3UzMihfX2EsIF9fYikgXAorICBfX2FhcmNoNjRfdmdldF9sYW5lX2FueSAodjJzaSwgKHVpbnQzMl90KSwgKGludDMyeDJfdCksIF9fYSwgX19iKQorI2RlZmluZSBfX2FhcmNoNjRfdmdldF9sYW5lX3U2NChfX2EsIF9fYikgKF9fYSkKKworI2RlZmluZSBfX2FhcmNoNjRfdmdldHFfbGFuZV9mMzIoX19hLCBfX2IpIFwKKyAgX19hYXJjaDY0X3ZnZXRfbGFuZV9hbnkgKHY0c2YsICwgLCBfX2EsIF9fYikKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRxX2xhbmVfZjY0KF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2MmRmLCAsICwgX19hLCBfX2IpCisKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRxX2xhbmVfcDgoX19hLCBfX2IpIFwKKyAgX19hYXJjaDY0X3ZnZXRfbGFuZV9hbnkgKHYxNnFpLCAocG9seThfdCksIChpbnQ4eDE2X3QpLCBfX2EsIF9fYikKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRxX2xhbmVfcDE2KF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2OGhpLCAocG9seTE2X3QpLCAoaW50MTZ4OF90KSwgX19hLCBfX2IpCisKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRxX2xhbmVfczgoX19hLCBfX2IpIFwKKyAgX19hYXJjaDY0X3ZnZXRfbGFuZV9hbnkgKHYxNnFpLCAsICxfX2EsIF9fYikKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRxX2xhbmVfczE2KF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2OGhpLCAsICxfX2EsIF9fYikKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRxX2xhbmVfczMyKF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2NHNpLCAsICxfX2EsIF9fYikKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRxX2xhbmVfczY0KF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2MmRpLCAsICxfX2EsIF9fYikKKworI2RlZmluZSBfX2FhcmNoNjRfdmdldHFfbGFuZV91OChfX2EsIF9fYikgXAorICBfX2FhcmNoNjRfdmdldF9sYW5lX2FueSAodjE2cWksICh1aW50OF90KSwgKGludDh4MTZfdCksIF9fYSwgX19iKQorI2RlZmluZSBfX2FhcmNoNjRfdmdldHFfbGFuZV91MTYoX19hLCBfX2IpIFwKKyAgX19hYXJjaDY0X3ZnZXRfbGFuZV9hbnkgKHY4aGksICh1aW50MTZfdCksIChpbnQxNng4X3QpLCBfX2EsIF9fYikKKyNkZWZpbmUgX19hYXJjaDY0X3ZnZXRxX2xhbmVfdTMyKF9fYSwgX19iKSBcCisgIF9fYWFyY2g2NF92Z2V0X2xhbmVfYW55ICh2NHNpLCAodWludDMyX3QpLCAoaW50MzJ4NF90KSwgX19hLCBfX2IpCisjZGVmaW5lIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3U2NChfX2EsIF9fYikgXAorICBfX2FhcmNoNjRfdmdldF9sYW5lX2FueSAodjJkaSwgKHVpbnQ2NF90KSwgKGludDY0eDJfdCksIF9fYSwgX19iKQorCisvKiB2YWRkICAqLworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkcV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkcV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHFfZjY0IChmbG9hdDY0eDJfdCBfX2EsIGZsb2F0NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkcV91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSArIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zYWRkbHY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zYWRkbHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zYWRkbHYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGxfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdWFkZGx2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGxfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdWFkZGx2NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgICAoaW50MTZ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbF91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91YWRkbHYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgIChpbnQzMngyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGxfaGlnaF9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NhZGRsMnYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGxfaGlnaF9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zYWRkbDJ2OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGxfaGlnaF9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zYWRkbDJ2NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRsX2hpZ2hfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91YWRkbDJ2MTZxaSAoKGludDh4MTZfdCkgX19hLAorCQkJCQkJICAgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbF9oaWdoX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VhZGRsMnY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgICAoaW50MTZ4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbF9oaWdoX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VhZGRsMnY0c2kgKChpbnQzMng0X3QpIF9fYSwKKwkJCQkJCSAgICAoaW50MzJ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR3X3M4IChpbnQxNng4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zYWRkd3Y4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkd19zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zYWRkd3Y0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkd19zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zYWRkd3Yyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHdfdTggKHVpbnQxNng4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VhZGR3djhxaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkd191MTYgKHVpbnQzMng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91YWRkd3Y0aGkgKChpbnQzMng0X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR3X3UzMiAodWludDY0eDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VhZGR3djJzaSAoKGludDY0eDJfdCkgX19hLAorCQkJCQkJICAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkd19oaWdoX3M4IChpbnQxNng4X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc2FkZHcydjE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkd19oaWdoX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NhZGR3MnY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkd19oaWdoX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NhZGR3MnY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHdfaGlnaF91OCAodWludDE2eDhfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VhZGR3MnYxNnFpICgoaW50MTZ4OF90KSBfX2EsCisJCQkJCQkgICAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR3X2hpZ2hfdTE2ICh1aW50MzJ4NF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdWFkZHcydjhoaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR3X2hpZ2hfdTMyICh1aW50NjR4Ml90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdWFkZHcydjRzaSAoKGludDY0eDJfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aGFkZF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NoYWRkdjhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NoYWRkdjRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NoYWRkdjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdWhhZGR2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aGFkZF91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91aGFkZHY0aGkgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VoYWRkdjJzaSAoKGludDMyeDJfdCkgX19hLAorCQkJCQkJICAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aGFkZHFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9zaGFkZHYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhhZGRxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NoYWRkdjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zaGFkZHY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhhZGRxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfdWhhZGR2MTZxaSAoKGludDh4MTZfdCkgX19hLAorCQkJCQkJICAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91aGFkZHY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZoYWRkcV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91aGFkZHY0c2kgKChpbnQzMng0X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQzMng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcmhhZGR2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJoYWRkX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NyaGFkZHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3JoYWRkdjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VyaGFkZHY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJICAgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXJoYWRkdjRoaSAoKGludDE2eDRfdCkgX19hLAorCQkJCQkJICAgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZF91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91cmhhZGR2MnNpICgoaW50MzJ4Ml90KSBfX2EsCisJCQkJCQkgICAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3JoYWRkdjE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NyaGFkZHY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmhhZGRxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NyaGFkZHY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJoYWRkcV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VyaGFkZHYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXJoYWRkdjhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAgIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyaGFkZHFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXJoYWRkdjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkaG5fczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9hZGRobnY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkaG5fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkaG52NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGhuX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhudjJkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRobl91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhudjhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAoaW50MTZ4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkaG5fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkaG52NHNpICgoaW50MzJ4NF90KSBfX2EsCisJCQkJCQkgICAoaW50MzJ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkaG5fdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkaG52MmRpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgICAoaW50NjR4Ml90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJhZGRobl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JhZGRobnY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmFkZGhuX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JhZGRobnY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmFkZGhuX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JhZGRobnYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmFkZGhuX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmFkZGhudjhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAgKGludDE2eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJhZGRobl91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG52NHNpICgoaW50MzJ4NF90KSBfX2EsCisJCQkJCQkgICAgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJhZGRobl91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG52MmRpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgICAgKGludDY0eDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkaG5faGlnaF9zMTYgKGludDh4OF90IF9fYSwgaW50MTZ4OF90IF9fYiwgaW50MTZ4OF90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhuMnY4aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRobl9oaWdoX3MzMiAoaW50MTZ4NF90IF9fYSwgaW50MzJ4NF90IF9fYiwgaW50MzJ4NF90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhuMnY0c2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRobl9oaWdoX3M2NCAoaW50MzJ4Ml90IF9fYSwgaW50NjR4Ml90IF9fYiwgaW50NjR4Ml90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhuMnYyZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkaG5faGlnaF91MTYgKHVpbnQ4eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iLCB1aW50MTZ4OF90IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9hZGRobjJ2OGhpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAgICAoaW50MTZ4OF90KSBfX2IsCisJCQkJCQkgICAgKGludDE2eDhfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGhuX2hpZ2hfdTMyICh1aW50MTZ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIHVpbnQzMng0X3QgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhuMnY0c2kgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgICAoaW50MzJ4NF90KSBfX2IsCisJCQkJCQkgICAgKGludDMyeDRfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGhuX2hpZ2hfdTY0ICh1aW50MzJ4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IsIHVpbnQ2NHgyX3QgX19jKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FkZGhuMnYyZGkgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgICAoaW50NjR4Ml90KSBfX2IsCisJCQkJCQkgICAgKGludDY0eDJfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmFkZGhuX2hpZ2hfczE2IChpbnQ4eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MpCit7CisgIHJldHVybiAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yYWRkaG4ydjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJhZGRobl9oaWdoX3MzMiAoaW50MTZ4NF90IF9fYSwgaW50MzJ4NF90IF9fYiwgaW50MzJ4NF90IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JhZGRobjJ2NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmFkZGhuX2hpZ2hfczY0IChpbnQzMngyX3QgX19hLCBpbnQ2NHgyX3QgX19iLCBpbnQ2NHgyX3QgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmFkZGhuMnYyZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmFkZGhuX2hpZ2hfdTE2ICh1aW50OHg4X3QgX19hLCB1aW50MTZ4OF90IF9fYiwgdWludDE2eDhfdCBfX2MpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmFkZGhuMnY4aGkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJICAgICAoaW50MTZ4OF90KSBfX2IsCisJCQkJCQkgICAgIChpbnQxNng4X3QpIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyYWRkaG5faGlnaF91MzIgKHVpbnQxNng0X3QgX19hLCB1aW50MzJ4NF90IF9fYiwgdWludDMyeDRfdCBfX2MpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmFkZGhuMnY0c2kgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgICAgKGludDMyeDRfdCkgX19iLAorCQkJCQkJICAgICAoaW50MzJ4NF90KSBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmFkZGhuX2hpZ2hfdTY0ICh1aW50MzJ4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IsIHVpbnQ2NHgyX3QgX19jKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JhZGRobjJ2MmRpICgoaW50MzJ4Ml90KSBfX2EsCisJCQkJCQkgICAgIChpbnQ2NHgyX3QpIF9fYiwKKwkJCQkJCSAgICAgKGludDY0eDJfdCkgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkaXZfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAvIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkaXZxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgLyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZGl2cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19hIC8gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX3A4IChwb2x5OHg4X3QgX19hLCBwb2x5OHg4X3QgX19iKQoreworICByZXR1cm4gKHBvbHk4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcG11bHY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gX19hICogX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX2Y2NCAoZmxvYXQ2NHgyX3QgX19hLCBmbG9hdDY0eDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gX19hICogX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAqIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHFfcDggKHBvbHk4eDE2X3QgX19hLCBwb2x5OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9wbXVsdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhbmRfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhbmRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhbmRxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFuZHFfczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kcV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YW5kcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFuZHFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgJiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhbmRxX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19hICYgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JyX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycl91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JycV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JycV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gX19hIHwgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZvcnJxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycnFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ycnFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZvcnJxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gX19hIHwgX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JycV91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcl9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcnFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcnFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZW9ycV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zlb3JxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gX19hIF4gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZW9ycV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSBeIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmVvcnFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgXiBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY19zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY191MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY191NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY3FfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY3FfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljcV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljcV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJpY3FfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgJiB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YmljcV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAmIH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZiaWNxX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19hICYgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5fczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JuX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5fdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JuX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybl9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JuX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JucV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybnFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JucV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5xX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5xX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2b3JucV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSB8IH5fX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zvcm5xX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gX19hIHwgfl9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm9ybnFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgfCB+X19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3ViX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3ViX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1Yl91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VicV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VicV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gX19hIC0gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VicV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19hIC0gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VicV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gX19hIC0gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VicV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YnFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgLSBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJxX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19hIC0gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJsX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJsdjhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJsX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJsdjRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJsX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJsdjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VibF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3VibHY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJICAgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VibF91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3VibHY0aGkgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJsX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzdWJsdjJzaSAoKGludDMyeDJfdCkgX19hLAorCQkJCQkJICAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VibF9oaWdoX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3N1YmwydjE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VibF9oaWdoX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJsMnY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3VibF9oaWdoX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJsMnY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmxfaGlnaF91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzdWJsMnYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJsX2hpZ2hfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXN1YmwydjhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAgIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJsX2hpZ2hfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXN1YmwydjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YndfczggKGludDE2eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJ3djhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJ3djRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzdWJ3djJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Vid191OCAodWludDE2eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXN1Ynd2OHFpICgoaW50MTZ4OF90KSBfX2EsCisJCQkJCQkgICAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X3UxNiAodWludDMyeDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzdWJ3djRoaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgKGludDE2eDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YndfdTMyICh1aW50NjR4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXN1Ynd2MnNpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgICAoaW50MzJ4Ml90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X2hpZ2hfczggKGludDE2eDhfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc3VidzJ2MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X2hpZ2hfczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3N1YncydjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJ3X2hpZ2hfczMyIChpbnQ2NHgyX3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3N1YncydjRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Vid19oaWdoX3U4ICh1aW50MTZ4OF90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXN1YncydjE2cWkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgICAgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YndfaGlnaF91MTYgKHVpbnQzMng0X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3VidzJ2OGhpICgoaW50MzJ4NF90KSBfX2EsCisJCQkJCQkgICAgKGludDE2eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YndfaGlnaF91MzIgKHVpbnQ2NHgyX3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3VidzJ2NHNpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgICAgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhZGR2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhZGR2NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhZGR2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhZGRkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXFhZGR2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZF91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cWFkZHY0aGkgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxYWRkdjJzaSAoKGludDMyeDJfdCkgX19hLAorCQkJCQkJICAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFhZGRkaSAoKGludDY0eDFfdCkgX19hLAorCQkJCQkJIChpbnQ2NHgxX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhZGR2MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWFkZHY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhZGR2NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxYWRkdjJkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF91cWFkZHYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxYWRkdjhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAgKGludDE2eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxYWRkdjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRxX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxYWRkdjJkaSAoKGludDY0eDJfdCkgX19hLAorCQkJCQkJICAgKGludDY0eDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzdWJ2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzdWJ2NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzdWJ2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzdWJkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzdWJ2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXN1Yl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXN1YnY0aGkgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc3VidjJzaSAoKGludDMyeDJfdCkgX19hLAorCQkJCQkJICAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzdWJkaSAoKGludDY0eDFfdCkgX19hLAorCQkJCQkJIChpbnQ2NHgxX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzdWJ2MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3VicV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXN1YnY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXN1YnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzdWJ2NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc3VidjJkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXN1YnFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXN1YnYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc3VidjhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAgKGludDE2eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc3VidjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJxX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc3VidjJkaSAoKGludDY0eDJfdCkgX19hLAorCQkJCQkJICAgKGludDY0eDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbmVnX3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbmVndjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW5lZ19zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcW5lZ3Y0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFuZWdfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FuZWd2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbmVncV9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbmVndjE2cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFuZWdxX3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbmVndjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW5lZ3FfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3FuZWd2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhYnN2OHFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWJzX3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxYWJzdjRoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFic19zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWFic3Yyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhYnN2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFic3FfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhYnN2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWJzcV9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWFic3Y0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsaF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtdWxodjRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FkbXVsaHYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxocV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtdWxodjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGh2NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3FyZG11bGh2NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FyZG11bGh2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcmRtdWxodjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxocV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXJkbXVsaHY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfczggKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19hOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfczE2ICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2E7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNyZWF0ZV9zMzIgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3JlYXRlX3M2NCAodWludDY0X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19hOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNyZWF0ZV9mMzIgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdCkgX19hOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfdTggKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNyZWF0ZV91MTYgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2E7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfdTMyICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19hOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3JlYXRlX3U2NCAodWludDY0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfZjY0ICh1aW50NjRfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NyZWF0ZWRmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjcmVhdGVfcDggKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpIF9fYTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNyZWF0ZV9wMTYgKHVpbnQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KSBfX2E7Cit9CisKKy8qIHZnZXRfbGFuZSAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xhbmVfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldF9sYW5lX2YzMiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbGFuZV9mNjQgKGZsb2F0NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0X2xhbmVfZjY0IChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbGFuZV9wOCAocG9seTh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0X2xhbmVfcDggKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbGFuZV9wMTYgKHBvbHkxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19hYXJjaDY0X3ZnZXRfbGFuZV9wMTYgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xhbmVfczggKGludDh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0X2xhbmVfczggKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3MxNiAoaW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0X2xhbmVfczE2IChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbGFuZV9zMzIgKGludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldF9sYW5lX3MzMiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xhbmVfczY0IChpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19hYXJjaDY0X3ZnZXRfbGFuZV9zNjQgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3U4ICh1aW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19hYXJjaDY0X3ZnZXRfbGFuZV91OCAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3UxNiAodWludDE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldF9sYW5lX3UxNiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3UzMiAodWludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldF9sYW5lX3UzMiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sYW5lX3U2NCAodWludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldF9sYW5lX3U2NCAoX19hLCBfX2IpOworfQorCisvKiB2Z2V0cV9sYW5lICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldHFfbGFuZV9mMzIgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0cV9sYW5lX2Y2NCAoZmxvYXQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19hYXJjaDY0X3ZnZXRxX2xhbmVfZjY0IChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfcDggKHBvbHk4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19hYXJjaDY0X3ZnZXRxX2xhbmVfcDggKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfcDE2IChwb2x5MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3AxNiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfczggKGludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldHFfbGFuZV9zOCAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0cV9sYW5lX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3MxNiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0cV9sYW5lX3MzMiAoaW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3MzMiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0cV9sYW5lX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3M2NCAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0cV9sYW5lX3U4ICh1aW50OHgxNl90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3U4IChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0cV9sYW5lX3UxNiAodWludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldHFfbGFuZV91MTYgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRxX2xhbmVfdTMyICh1aW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3UzMiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldHFfbGFuZV91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19hYXJjaDY0X3ZnZXRxX2xhbmVfdTY0IChfX2EsIF9fYik7Cit9CisKKy8qIHZyZWludGVycHJldCAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDhfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3A4X3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3A4X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3A4X3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaWRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wOF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3A4X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OHFpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wOF91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OHFpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDhfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXYyc2kgKChpbnQzMngyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3A4X3U2NCAodWludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4cWlkaSAoKGludDY0eDFfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDhfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDhfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXYxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3A4X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wOF9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDhfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3A4X2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3A4X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjE2cWkgKChpbnQ4eDE2X3QpCisJCQkJCQkJICAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDhfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjhoaSAoKGludDE2eDhfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3A4X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXY0c2kgKChpbnQzMng0X3QpCisJCQkJCQkJICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wOF91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MmRpICgoaW50NjR4Ml90KQorCQkJCQkJCSAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDhfcDE2IChwb2x5MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjhoaSAoKGludDE2eDhfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDE2X3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3AxNl9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjRoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3AxNl9zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjJzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3AxNl9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wMTZfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjJzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3AxNl91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0aGl2OHFpICgoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9wMTZfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0aGl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDE2X3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjJzaSAoKGludDMyeDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3AxNl91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaWRpICgoaW50NjR4MV90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfcDE2X3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wMTZfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjE2cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDE2X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3AxNl9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wMTZfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXYyZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDE2X2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXY0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDE2X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2MTZxaSAoKGludDh4MTZfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3AxNl91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfcDE2X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9wMTZfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3AxNl9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAocG9seTE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjE2cWkgKChpbnQ4eDE2X3QpCisJCQkJCQkJICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9mMzJfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNmdjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9mMzJfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyc2Z2NGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X2YzMl9zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzZnYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfZjMyX3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNmZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfZjMyX3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyc2Z2OHFpICgoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfZjMyX3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzZnY0aGkgKChpbnQxNng0X3QpCisJCQkJCQkJICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9mMzJfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNmdjJzaSAoKGludDMyeDJfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X2YzMl91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyc2ZkaSAoKGludDY0eDFfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9mMzJfcDggKHBvbHk4eDhfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzZnY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9mMzJfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNmdjRoaSAoKGludDE2eDRfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9mMzJfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzZnYxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9mMzJfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2Z2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9mMzJfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2Z2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9mMzJfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2Z2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9mMzJfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2Z2MTZxaSAoKGludDh4MTZfdCkKKwkJCQkJCQkgICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzZnY4aGkgKChpbnQxNng4X3QpCisJCQkJCQkJICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzZnY0c2kgKChpbnQzMng0X3QpCisJCQkJCQkJICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzZnYyZGkgKChpbnQ2NHgyX3QpCisJCQkJCQkJICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfZjMyX3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNmdjE2cWkgKChpbnQ4eDE2X3QpCisJCQkJCQkJICAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX2YzMl9wMTYgKHBvbHkxNng4X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2Z2OGhpICgoaW50MTZ4OF90KQorCQkJCQkJCSAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M2NF9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXRkaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M2NF9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldGRpdjRoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zNjRfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldGRpdjJzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXRkaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldGRpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldGRpdjJzaSAoKGludDMyeDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczY0X3U2NCAodWludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldGRpZGkgKChpbnQ2NHgxX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M2NF9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2OHFpICgoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M2NF9wMTYgKHBvbHkxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXRkaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3M2NF9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczY0X3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zNjRfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczY0X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczY0X3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczY0X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2NHNpICgoaW50MzJ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczY0X3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczY0X3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczY0X3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTY0X3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXRkaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91NjRfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2NGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTY0X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldGRpdjJzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U2NF9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXRkaWRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTY0X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2MnNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTY0X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2OHFpICgoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91NjRfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldGRpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U2NF91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2MnNpICgoaW50MzJ4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTY0X3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2OHFpICgoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91NjRfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldGRpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91NjRfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRpdjE2cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTY0X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U2NF9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRpdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91NjRfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXYyZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTY0X2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXY0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTY0X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2MTZxaSAoKGludDh4MTZfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U2NF91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTY0X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91NjRfcDggKHBvbHk4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXYxNnFpICgoaW50OHgxNl90KQorCQkJCQkJCSAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTY0X3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zOF9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczhfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4cWl2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M4X3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OHFpZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczhfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczhfdTggKHVpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zOF91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4cWl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3M4X3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXYyc2kgKChpbnQzMngyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczhfdTY0ICh1aW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OHFpZGkgKChpbnQ2NHgxX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczhfcDggKHBvbHk4eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zOF9wMTYgKHBvbHkxNng0X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4cWl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczhfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXY4aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3M4X3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczhfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3M4X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MTZxaSAoKGludDh4MTZfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczhfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczhfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2NHNpICgoaW50MzJ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczhfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczhfcDggKHBvbHk4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXYxNnFpICgoaW50OHgxNl90KQorCQkJCQkJCSAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zOF9wMTYgKHBvbHkxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MxNl9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MxNl9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0aGlkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjJzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMTZfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MxNl91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjJzaSAoKGludDMyeDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X3U2NCAodWludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0aGlkaSAoKGludDY0eDFfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczE2X3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMTZfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zMTZfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2MTZxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MxNl9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXYyZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zMTZfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2NHNpICgoaW50MzJ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2MmRpICgoaW50NjR4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXYxNnFpICgoaW50OHgxNl90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczE2X3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMzJfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyc2l2NGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMzJfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNpZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczMyX3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyc2l2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF9zMzJfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXYyc2kgKChpbnQzMngyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNpZGkgKChpbnQ2NHgxX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3MzMl9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfczMyX3AxNiAocG9seTE2eDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYyc2l2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczMyX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjE2cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV9zMzJfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl9zNjQgKGludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfczMyX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2MTZxaSAoKGludDh4MTZfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjJkaSAoKGludDY0eDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2MTZxaSAoKGludDh4MTZfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3MzMl9wMTYgKHBvbHkxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdThfczggKGludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U4X3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U4X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U4X3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaWRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91OF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3U4X3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4cWl2NGhpICgoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91OF91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OHFpdjJzaSAoKGludDMyeDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdThfdTY0ICh1aW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaWRpICgoaW50NjR4MV90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91OF9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdThfcDE2IChwb2x5MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdThfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXYxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U4X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91OF9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdThfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U4X2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U4X3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXY4aGkgKChpbnQxNng4X3QpCisJCQkJCQkJICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91OF91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2NHNpICgoaW50MzJ4NF90KQorCQkJCQkJCSAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdThfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjJkaSAoKGludDY0eDJfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3U4X3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjE2cWkgKChpbnQ4eDE2X3QpCisJCQkJCQkJICAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdThfcDE2IChwb2x5MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjhoaSAoKGludDE2eDhfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTE2X3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UxNl9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjRoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UxNl9zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjJzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UxNl9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MTZfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjJzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UxNl91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0aGl2OHFpICgoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MTZfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0aGl2MnNpICgoaW50MzJ4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTE2X3U2NCAodWludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpZGkgKChpbnQ2NHgxX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MTZfcDggKHBvbHk4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTE2X3AxNiAocG9seTE2eDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MTZfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjE2cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UxNl9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MTZfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXYyZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXY0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2MTZxaSAoKGludDh4MTZfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UxNl91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXY0c2kgKChpbnQzMng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjJkaSAoKGludDY0eDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MTZfcDggKHBvbHk4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXYxNnFpICgoaW50OHgxNl90KQorCQkJCQkJCSAgICAgIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTE2X3AxNiAocG9seTE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UzMl9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXY4cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MzJfczE2IChpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXY0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MzJfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MzJfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaWRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTMyX2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldF91MzJfdTggKHVpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNpdjhxaSAoKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTMyX3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNpdjRoaSAoKGludDE2eDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UzMl91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaWRpICgoaW50NjR4MV90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRfdTMyX3A4IChwb2x5OHg4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXY4cWkgKChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0X3UzMl9wMTYgKHBvbHkxNng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXY0aGkgKChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTMyX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzaXYxNnFpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MzJfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzaXY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTMyX3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjE2cWkgKChpbnQ4eDE2X3QpCisJCQkJCQkJICAgICAgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlaW50ZXJwcmV0cV91MzJfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2OGhpICgoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzaXYyZGkgKChpbnQ2NHgyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWludGVycHJldHFfdTMyX3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2MTZxaSAoKGludDh4MTZfdCkKKwkJCQkJCQkgICAgICBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVpbnRlcnByZXRxX3UzMl9wMTYgKHBvbHkxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzaXY4aGkgKChpbnQxNng4X3QpIF9fYSk7Cit9CisKKyNkZWZpbmUgX19HRVRfTE9XKF9fVFlQRSkgXAorICB1aW50NjR4Ml90IHRtcCA9IHZyZWludGVycHJldHFfdTY0XyMjX19UWVBFIChfX2EpOyAgXAorICB1aW50NjRfdCBsbyA9IHZnZXRxX2xhbmVfdTY0ICh0bXAsIDApOyAgXAorICByZXR1cm4gdnJlaW50ZXJwcmV0XyMjX19UWVBFIyNfdTY0IChsbyk7CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xvd19mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgX19HRVRfTE9XIChmMzIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0cV9sYW5lX2Y2NCAoX19hLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xvd19wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIF9fR0VUX0xPVyAocDgpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xvd19wMTYgKHBvbHkxNng4X3QgX19hKQoreworICBfX0dFVF9MT1cgKHAxNik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xvd19zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgX19HRVRfTE9XIChzOCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfczE2IChpbnQxNng4X3QgX19hKQoreworICBfX0dFVF9MT1cgKHMxNik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfczMyIChpbnQzMng0X3QgX19hKQoreworICBfX0dFVF9MT1cgKHMzMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9zNjQgKF9fYSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICBfX0dFVF9MT1cgKHU4KTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9sb3dfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgX19HRVRfTE9XICh1MTYpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2xvd191MzIgKHVpbnQzMng0X3QgX19hKQoreworICBfX0dFVF9MT1cgKHUzMik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfbG93X3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0cV9sYW5lX3U2NCAoX19hLCAwKTsKK30KKworI3VuZGVmIF9fR0VUX0xPVworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NvbWJpbmV2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNvbWJpbmVfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY29tYmluZXY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y29tYmluZV9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jb21iaW5ldjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NvbWJpbmVkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNvbWJpbmVfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY29tYmluZXYyc2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNvbWJpbmVfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY29tYmluZXY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJICAgICAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NvbWJpbmV2NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgICAgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NvbWJpbmV2MnNpICgoaW50MzJ4Ml90KSBfX2EsCisJCQkJCQkgICAgIChpbnQzMngyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NvbWJpbmVkaSAoKGludDY0eDFfdCkgX19hLAorCQkJCQkJICAgKGludDY0eDFfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zjb21iaW5lX2Y2NCAoZmxvYXQ2NHgxX3QgX19hLCBmbG9hdDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NvbWJpbmVkZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y29tYmluZV9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgcmV0dXJuIChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jb21iaW5ldjhxaSAoKGludDh4OF90KSBfX2EsCisJCQkJCQkgICAgIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNvbWJpbmVfcDE2IChwb2x5MTZ4NF90IF9fYSwgcG9seTE2eDRfdCBfX2IpCit7CisgIHJldHVybiAocG9seTE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY29tYmluZXY0aGkgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgICAgKGludDE2eDRfdCkgX19iKTsKK30KKworLyogU3RhcnQgb2YgdGVtcG9yYXJ5IGlubGluZSBhc20gaW1wbGVtZW50YXRpb25zLiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFfczggKGludDh4OF90IGEsIGludDh4OF90IGIsIGludDh4OF90IGMpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhYmEgJTAuOGIsJTIuOGIsJTMuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhX3MxNiAoaW50MTZ4NF90IGEsIGludDE2eDRfdCBiLCBpbnQxNng0X3QgYykKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhYmEgJTAuNGgsJTIuNGgsJTMuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhX3MzMiAoaW50MzJ4Ml90IGEsIGludDMyeDJfdCBiLCBpbnQzMngyX3QgYykKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhYmEgJTAuMnMsJTIuMnMsJTMuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhX3U4ICh1aW50OHg4X3QgYSwgdWludDh4OF90IGIsIHVpbnQ4eDhfdCBjKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFiYSAlMC44YiwlMi44YiwlMy44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIsIHVpbnQxNng0X3QgYykKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWJhICUwLjRoLCUyLjRoLCUzLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFfdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYiwgdWludDMyeDJfdCBjKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmEgJTAuMnMsJTIuMnMsJTMuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhbF9oaWdoX3M4IChpbnQxNng4X3QgYSwgaW50OHgxNl90IGIsIGludDh4MTZfdCBjKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiYWwyICUwLjhoLCUyLjE2YiwlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhbF9oaWdoX3MxNiAoaW50MzJ4NF90IGEsIGludDE2eDhfdCBiLCBpbnQxNng4X3QgYykKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhYmFsMiAlMC40cywlMi44aCwlMy44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFsX2hpZ2hfczMyIChpbnQ2NHgyX3QgYSwgaW50MzJ4NF90IGIsIGludDMyeDRfdCBjKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiYWwyICUwLjJkLCUyLjRzLCUzLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFsX2hpZ2hfdTggKHVpbnQxNng4X3QgYSwgdWludDh4MTZfdCBiLCB1aW50OHgxNl90IGMpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFiYWwyICUwLjhoLCUyLjE2YiwlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYWxfaGlnaF91MTYgKHVpbnQzMng0X3QgYSwgdWludDE2eDhfdCBiLCB1aW50MTZ4OF90IGMpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFiYWwyICUwLjRzLCUyLjhoLCUzLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFsX2hpZ2hfdTMyICh1aW50NjR4Ml90IGEsIHVpbnQzMng0X3QgYiwgdWludDMyeDRfdCBjKQoreworICB1aW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmFsMiAlMC4yZCwlMi40cywlMy40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFsX3M4IChpbnQxNng4X3QgYSwgaW50OHg4X3QgYiwgaW50OHg4X3QgYykKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhYmFsICUwLjhoLCUyLjhiLCUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYWxfczE2IChpbnQzMng0X3QgYSwgaW50MTZ4NF90IGIsIGludDE2eDRfdCBjKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiYWwgJTAuNHMsJTIuNGgsJTMuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhbF9zMzIgKGludDY0eDJfdCBhLCBpbnQzMngyX3QgYiwgaW50MzJ4Ml90IGMpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWJhbCAlMC4yZCwlMi4ycywlMy4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhbF91OCAodWludDE2eDhfdCBhLCB1aW50OHg4X3QgYiwgdWludDh4OF90IGMpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFiYWwgJTAuOGgsJTIuOGIsJTMuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYWxfdTE2ICh1aW50MzJ4NF90IGEsIHVpbnQxNng0X3QgYiwgdWludDE2eDRfdCBjKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmFsICUwLjRzLCUyLjRoLCUzLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFsX3UzMiAodWludDY0eDJfdCBhLCB1aW50MzJ4Ml90IGIsIHVpbnQzMngyX3QgYykKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWJhbCAlMC4yZCwlMi4ycywlMy4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFxX3M4IChpbnQ4eDE2X3QgYSwgaW50OHgxNl90IGIsIGludDh4MTZfdCBjKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiYSAlMC4xNmIsJTIuMTZiLCUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiLCBpbnQxNng4X3QgYykKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhYmEgJTAuOGgsJTIuOGgsJTMuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJhcV9zMzIgKGludDMyeDRfdCBhLCBpbnQzMng0X3QgYiwgaW50MzJ4NF90IGMpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWJhICUwLjRzLCUyLjRzLCUzLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmFxX3U4ICh1aW50OHgxNl90IGEsIHVpbnQ4eDE2X3QgYiwgdWludDh4MTZfdCBjKQoreworICB1aW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmEgJTAuMTZiLCUyLjE2YiwlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYXFfdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNng4X3QgYiwgdWludDE2eDhfdCBjKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmEgJTAuOGgsJTIuOGgsJTMuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiYXFfdTMyICh1aW50MzJ4NF90IGEsIHVpbnQzMng0X3QgYiwgdWludDMyeDRfdCBjKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmEgJTAuNHMsJTIuNHMsJTMuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRfZjMyIChmbG9hdDMyeDJfdCBhLCBmbG9hdDMyeDJfdCBiKQoreworICBmbG9hdDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmYWJkICUwLjJzLCAlMS4ycywgJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkX3M4IChpbnQ4eDhfdCBhLCBpbnQ4eDhfdCBiKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWJkICUwLjhiLCAlMS44YiwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZF9zMTYgKGludDE2eDRfdCBhLCBpbnQxNng0X3QgYikKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhYmQgJTAuNGgsICUxLjRoLCAlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkX3MzMiAoaW50MzJ4Ml90IGEsIGludDMyeDJfdCBiKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiZCAlMC4ycywgJTEuMnMsICUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRfdTggKHVpbnQ4eDhfdCBhLCB1aW50OHg4X3QgYikKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmQgJTAuOGIsICUxLjhiLCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZF91MTYgKHVpbnQxNng0X3QgYSwgdWludDE2eDRfdCBiKQoreworICB1aW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmQgJTAuNGgsICUxLjRoLCAlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZF91MzIgKHVpbnQzMngyX3QgYSwgdWludDMyeDJfdCBiKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmQgJTAuMnMsICUxLjJzLCAlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkZF9mNjQgKGZsb2F0NjRfdCBhLCBmbG9hdDY0X3QgYikKK3sKKyAgZmxvYXQ2NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImZhYmQgJWQwLCAlZDEsICVkMiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkbF9oaWdoX3M4IChpbnQ4eDE2X3QgYSwgaW50OHgxNl90IGIpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWJkbDIgJTAuOGgsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkbF9oaWdoX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiZGwyICUwLjRzLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRsX2hpZ2hfczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWJkbDIgJTAuMmQsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRsX2hpZ2hfdTggKHVpbnQ4eDE2X3QgYSwgdWludDh4MTZfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmRsMiAlMC44aCwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkbF9oaWdoX3UxNiAodWludDE2eDhfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFiZGwyICUwLjRzLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkbF9oaWdoX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidWFiZGwyICUwLjJkLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRsX3M4IChpbnQ4eDhfdCBhLCBpbnQ4eDhfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiZGwgJTAuOGgsICUxLjhiLCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkbF9zMTYgKGludDE2eDRfdCBhLCBpbnQxNng0X3QgYikKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhYmRsICUwLjRzLCAlMS40aCwgJTIuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZGxfczMyIChpbnQzMngyX3QgYSwgaW50MzJ4Ml90IGIpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWJkbCAlMC4yZCwgJTEuMnMsICUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkbF91OCAodWludDh4OF90IGEsIHVpbnQ4eDhfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmRsICUwLjhoLCAlMS44YiwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRsX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFiZGwgJTAuNHMsICUxLjRoLCAlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZGxfdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYikKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWJkbCAlMC4yZCwgJTEuMnMsICUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZHFfZjMyIChmbG9hdDMyeDRfdCBhLCBmbG9hdDMyeDRfdCBiKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmYWJkICUwLjRzLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkcV9mNjQgKGZsb2F0NjR4Ml90IGEsIGZsb2F0NjR4Ml90IGIpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZhYmQgJTAuMmQsICUxLjJkLCAlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkcV9zOCAoaW50OHgxNl90IGEsIGludDh4MTZfdCBiKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiZCAlMC4xNmIsICUxLjE2YiwgJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiZCAlMC44aCwgJTEuOGgsICUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYmRxX3MzMiAoaW50MzJ4NF90IGEsIGludDMyeDRfdCBiKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FiZCAlMC40cywgJTEuNHMsICUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkcV91OCAodWludDh4MTZfdCBhLCB1aW50OHgxNl90IGIpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFiZCAlMC4xNmIsICUxLjE2YiwgJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJkcV91MTYgKHVpbnQxNng4X3QgYSwgdWludDE2eDhfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhYmQgJTAuOGgsICUxLjhoLCAlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZHFfdTMyICh1aW50MzJ4NF90IGEsIHVpbnQzMng0X3QgYikKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWJkICUwLjRzLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFiZHNfZjMyIChmbG9hdDMyX3QgYSwgZmxvYXQzMl90IGIpCit7CisgIGZsb2F0MzJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmYWJkICVzMCwgJXMxLCAlczIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRsdl9zOCAoaW50OHg4X3QgYSkKK3sKKyAgaW50MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWRkbHYgJWgwLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGx2X3MxNiAoaW50MTZ4NF90IGEpCit7CisgIGludDMyX3QgcmVzdWx0OworICBfX2FzbV9fICgic2FkZGx2ICVzMCwlMS40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbHZfdTggKHVpbnQ4eDhfdCBhKQoreworICB1aW50MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWRkbHYgJWgwLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRsdl91MTYgKHVpbnQxNng0X3QgYSkKK3sKKyAgdWludDMyX3QgcmVzdWx0OworICBfX2FzbV9fICgidWFkZGx2ICVzMCwlMS40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRsdnFfczggKGludDh4MTZfdCBhKQoreworICBpbnQxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhZGRsdiAlaDAsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGx2cV9zMTYgKGludDE2eDhfdCBhKQoreworICBpbnQzMl90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhZGRsdiAlczAsJTEuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbHZxX3MzMiAoaW50MzJ4NF90IGEpCit7CisgIGludDY0X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FkZGx2ICVkMCwlMS40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbHZxX3U4ICh1aW50OHgxNl90IGEpCit7CisgIHVpbnQxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhZGRsdiAlaDAsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRsdnFfdTE2ICh1aW50MTZ4OF90IGEpCit7CisgIHVpbnQzMl90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhZGRsdiAlczAsJTEuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZGx2cV91MzIgKHVpbnQzMng0X3QgYSkKK3sKKyAgdWludDY0X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFkZGx2ICVkMCwlMS40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX2YzMiAodWludDMyeDJfdCBhLCBmbG9hdDMyeDJfdCBiLCBmbG9hdDMyeDJfdCBjKQoreworICBmbG9hdDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuOGIsICUyLjhiLCAlMy44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xfcDggKHVpbnQ4eDhfdCBhLCBwb2x5OHg4X3QgYiwgcG9seTh4OF90IGMpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuOGIsICUyLjhiLCAlMy44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX3AxNiAodWludDE2eDRfdCBhLCBwb2x5MTZ4NF90IGIsIHBvbHkxNng0X3QgYykKK3sKKyAgcG9seTE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuOGIsICUyLjhiLCAlMy44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbF9zOCAodWludDh4OF90IGEsIGludDh4OF90IGIsIGludDh4OF90IGMpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImJzbCAlMC44YiwgJTIuOGIsICUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbF9zMTYgKHVpbnQxNng0X3QgYSwgaW50MTZ4NF90IGIsIGludDE2eDRfdCBjKQoreworICBpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiYnNsICUwLjhiLCAlMi44YiwgJTMuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNsX3MzMiAodWludDMyeDJfdCBhLCBpbnQzMngyX3QgYiwgaW50MzJ4Ml90IGMpCit7CisgIGludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuOGIsICUyLjhiLCAlMy44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xfczY0ICh1aW50NjR4MV90IGEsIGludDY0eDFfdCBiLCBpbnQ2NHgxX3QgYykKK3sKKyAgaW50NjR4MV90IHJlc3VsdDsKKyAgX19hc21fXyAoImJzbCAlMC44YiwgJTIuOGIsICUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbF91OCAodWludDh4OF90IGEsIHVpbnQ4eDhfdCBiLCB1aW50OHg4X3QgYykKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImJzbCAlMC44YiwgJTIuOGIsICUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xfdTE2ICh1aW50MTZ4NF90IGEsIHVpbnQxNng0X3QgYiwgdWludDE2eDRfdCBjKQoreworICB1aW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImJzbCAlMC44YiwgJTIuOGIsICUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xfdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYiwgdWludDMyeDJfdCBjKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImJzbCAlMC44YiwgJTIuOGIsICUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xfdTY0ICh1aW50NjR4MV90IGEsIHVpbnQ2NHgxX3QgYiwgdWludDY0eDFfdCBjKQoreworICB1aW50NjR4MV90IHJlc3VsdDsKKyAgX19hc21fXyAoImJzbCAlMC44YiwgJTIuOGIsICUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV9mMzIgKHVpbnQzMng0X3QgYSwgZmxvYXQzMng0X3QgYiwgZmxvYXQzMng0X3QgYykKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiYnNsICUwLjE2YiwgJTIuMTZiLCAlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xxX2Y2NCAodWludDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiLCBmbG9hdDY0eDJfdCBjKQoreworICBmbG9hdDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV9wOCAodWludDh4MTZfdCBhLCBwb2x5OHgxNl90IGIsIHBvbHk4eDE2X3QgYykKK3sKKyAgcG9seTh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV9wMTYgKHVpbnQxNng4X3QgYSwgcG9seTE2eDhfdCBiLCBwb2x5MTZ4OF90IGMpCit7CisgIHBvbHkxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiYnNsICUwLjE2YiwgJTIuMTZiLCAlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV9zOCAodWludDh4MTZfdCBhLCBpbnQ4eDE2X3QgYiwgaW50OHgxNl90IGMpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xxX3MxNiAodWludDE2eDhfdCBhLCBpbnQxNng4X3QgYiwgaW50MTZ4OF90IGMpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xxX3MzMiAodWludDMyeDRfdCBhLCBpbnQzMng0X3QgYiwgaW50MzJ4NF90IGMpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xxX3M2NCAodWludDY0eDJfdCBhLCBpbnQ2NHgyX3QgYiwgaW50NjR4Ml90IGMpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV91OCAodWludDh4MTZfdCBhLCB1aW50OHgxNl90IGIsIHVpbnQ4eDE2X3QgYykKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YnNscV91MTYgKHVpbnQxNng4X3QgYSwgdWludDE2eDhfdCBiLCB1aW50MTZ4OF90IGMpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiYnNsICUwLjE2YiwgJTIuMTZiLCAlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmJzbHFfdTMyICh1aW50MzJ4NF90IGEsIHVpbnQzMng0X3QgYiwgdWludDMyeDRfdCBjKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImJzbCAlMC4xNmIsICUyLjE2YiwgJTMuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zic2xxX3U2NCAodWludDY0eDJfdCBhLCB1aW50NjR4Ml90IGIsIHVpbnQ2NHgyX3QgYykKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJic2wgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsc19zOCAoaW50OHg4X3QgYSkKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgiY2xzICUwLjhiLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xzX3MxNiAoaW50MTZ4NF90IGEpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbHMgJTAuNGgsJTEuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHNfczMyIChpbnQzMngyX3QgYSkKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImNscyAlMC4ycywlMS4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsc3FfczggKGludDh4MTZfdCBhKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiY2xzICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHNxX3MxNiAoaW50MTZ4OF90IGEpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbHMgJTAuOGgsJTEuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHNxX3MzMiAoaW50MzJ4NF90IGEpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbHMgJTAuNHMsJTEuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsel9zOCAoaW50OHg4X3QgYSkKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgiY2x6ICUwLjhiLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x6X3MxNiAoaW50MTZ4NF90IGEpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbHogJTAuNGgsJTEuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHpfczMyIChpbnQzMngyX3QgYSkKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImNseiAlMC4ycywlMS4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsel91OCAodWludDh4OF90IGEpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbHogJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x6X3UxNiAodWludDE2eDRfdCBhKQoreworICB1aW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImNseiAlMC40aCwlMS40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHpfdTMyICh1aW50MzJ4Ml90IGEpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiY2x6ICUwLjJzLCUxLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x6cV9zOCAoaW50OHgxNl90IGEpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbHogJTAuMTZiLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsenFfczE2IChpbnQxNng4X3QgYSkKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImNseiAlMC44aCwlMS44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsenFfczMyIChpbnQzMng0X3QgYSkKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImNseiAlMC40cywlMS40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHpxX3U4ICh1aW50OHgxNl90IGEpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiY2x6ICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x6cV91MTYgKHVpbnQxNng4X3QgYSkKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbHogJTAuOGgsJTEuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x6cV91MzIgKHVpbnQzMng0X3QgYSkKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbHogJTAuNHMsJTEuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbnRfcDggKHBvbHk4eDhfdCBhKQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgiY250ICUwLjhiLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbnRfczggKGludDh4OF90IGEpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImNudCAlMC44YiwlMS44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNudF91OCAodWludDh4OF90IGEpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbnQgJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y250cV9wOCAocG9seTh4MTZfdCBhKQoreworICBwb2x5OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImNudCAlMC4xNmIsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y250cV9zOCAoaW50OHgxNl90IGEpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbnQgJTAuMTZiLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbnRxX3U4ICh1aW50OHgxNl90IGEpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiY250ICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZjb3B5cV9sYW5lX2YzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5zWyUyXSwgJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAiaSIoYiksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmNvcHlxX2xhbmVfZjY0KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmRbJTJdLCAlMy5kWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJpIihiKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y29weXFfbGFuZV9wOChhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuYlslMl0sICUzLmJbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgImkiKGIpLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjb3B5cV9sYW5lX3AxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5oWyUyXSwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAiaSIoYiksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmNvcHlxX2xhbmVfczgoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDE2X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDE2X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDE2X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmJbJTJdLCAlMy5iWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJpIihiKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y29weXFfbGFuZV9zMTYoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuaFslMl0sICUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgImkiKGIpLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjb3B5cV9sYW5lX3MzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5zWyUyXSwgJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAiaSIoYiksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmNvcHlxX2xhbmVfczY0KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmRbJTJdLCAlMy5kWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJpIihiKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y29weXFfbGFuZV91OChhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDE2X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDE2X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDE2X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuYlslMl0sICUzLmJbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgImkiKGIpLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjb3B5cV9sYW5lX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5oWyUyXSwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAiaSIoYiksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmNvcHlxX2xhbmVfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLnNbJTJdLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJpIihiKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y29weXFfbGFuZV91NjQoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuZFslMl0sICUzLmRbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgImkiKGIpLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisvKiB2Y3Z0X2YxNl9mMzIgbm90IHN1cHBvcnRlZCAqLworCisvKiB2Y3Z0X2YzMl9mMTYgbm90IHN1cHBvcnRlZCAqLworCisvKiB2Y3Z0X2hpZ2hfZjE2X2YzMiBub3Qgc3VwcG9ydGVkICovCisKKy8qIHZjdnRfaGlnaF9mMzJfZjE2IG5vdCBzdXBwb3J0ZWQgKi8KKworc3RhdGljIGZsb2F0MzJ4Ml90IHZkdXBfbl9mMzIgKGZsb2F0MzJfdCk7CisKKyNkZWZpbmUgdmN2dF9uX2YzMl9zMzIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic2N2dGYgJTAuMnMsICUxLjJzLCAjJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y3Z0X25fZjMyX3UzMihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1Y3Z0ZiAlMC4ycywgJTEuMnMsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjdnRfbl9zMzJfZjMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZjdnR6cyAlMC4ycywgJTEuMnMsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmN2dF9uX3UzMl9mMzIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZmN2dHp1ICUwLjJzLCAlMS4ycywgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y3Z0ZF9uX2Y2NF9zNjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzY3Z0ZiAlZDAsJWQxLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjdnRkX25fZjY0X3U2NChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVjdnRmICVkMCwlZDEsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmN2dGRfbl9zNjRfZjY0KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZmN2dHpzICVkMCwlZDEsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y3Z0ZF9uX3U2NF9mNjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJmY3Z0enUgJWQwLCVkMSwlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjdnRxX25fZjMyX3MzMihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNjdnRmICUwLjRzLCAlMS40cywgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmN2dHFfbl9mMzJfdTMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidWN2dGYgJTAuNHMsICUxLjRzLCAjJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y3Z0cV9uX2Y2NF9zNjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzY3Z0ZiAlMC4yZCwgJTEuMmQsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjdnRxX25fZjY0X3U2NChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVjdnRmICUwLjJkLCAlMS4yZCwgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmN2dHFfbl9zMzJfZjMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZmN2dHpzICUwLjRzLCAlMS40cywgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y3Z0cV9uX3M2NF9mNjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJmY3Z0enMgJTAuMmQsICUxLjJkLCAjJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjdnRxX25fdTMyX2YzMihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZjdnR6dSAlMC40cywgJTEuNHMsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmN2dHFfbl91NjRfZjY0KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZmN2dHp1ICUwLjJkLCAlMS4yZCwgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y3Z0c19uX2YzMl9zMzIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzY3Z0ZiAlczAsJXMxLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZjdnRzX25fZjMyX3UzMihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVjdnRmICVzMCwlczEsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmN2dHNfbl9zMzJfZjMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZmN2dHpzICVzMCwlczEsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Y3Z0c19uX3UzMl9mMzIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJmY3Z0enUgJXMwLCVzMSwlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHhfZjMyX2Y2NCAoZmxvYXQ2NHgyX3QgYSkKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZmN2dHhuICUwLjJzLCUxLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnR4X2hpZ2hfZjMyX2Y2NCAoZmxvYXQ2NHgyX3QgYSkKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZmN2dHhuMiAlMC40cywlMS4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHhkX2YzMl9mNjQgKGZsb2F0NjRfdCBhKQoreworICBmbG9hdDMyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZmN2dHhuICVzMCwlZDEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZkdXBfbGFuZV9mMzIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImR1cCAlMC4ycywlMS5zWyUyXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmR1cF9sYW5lX3A4KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHg4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHg4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZHVwICUwLjhiLCUxLmJbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZHVwX2xhbmVfcDE2KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJkdXAgJTAuNGgsJTEuaFslMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZkdXBfbGFuZV9zOChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHg4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHg4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImR1cCAlMC44YiwlMS5iWyUyXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmR1cF9sYW5lX3MxNihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZHVwICUwLjRoLCUxLmhbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZHVwX2xhbmVfczMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJkdXAgJTAuMnMsJTEuc1slMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZkdXBfbGFuZV9zNjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4MV90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4MV90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5kWzBdLCUxLmRbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmR1cF9sYW5lX3U4KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OHg4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OHg4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZHVwICUwLjhiLCUxLmJbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZHVwX2xhbmVfdTE2KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJkdXAgJTAuNGgsJTEuaFslMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZkdXBfbGFuZV91MzIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImR1cCAlMC4ycywlMS5zWyUyXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmR1cF9sYW5lX3U2NChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4MV90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4MV90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmRbMF0sJTEuZFslMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbl9mMzIgKGZsb2F0MzJfdCBhKQoreworICBmbG9hdDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuMnMsICV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3A4ICh1aW50MzJfdCBhKQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjhiLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBfbl9wMTYgKHVpbnQzMl90IGEpCit7CisgIHBvbHkxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjRoLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwX25fczggKGludDMyX3QgYSkKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjhiLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3MxNiAoaW50MzJfdCBhKQoreworICBpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjRoLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3MzMiAoaW50MzJfdCBhKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjJzLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3M2NCAoaW50NjRfdCBhKQoreworICBpbnQ2NHgxX3QgcmVzdWx0OworICBfX2FzbV9fICgiaW5zICUwLmRbMF0sJXgxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwX25fdTggKHVpbnQzMl90IGEpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuOGIsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3UxNiAodWludDMyX3QgYSkKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuNGgsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3UzMiAodWludDMyX3QgYSkKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuMnMsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cF9uX3U2NCAodWludDY0X3QgYSkKK3sKKyAgdWludDY0eDFfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwleDEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZkdXBkX2xhbmVfZjY0KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImR1cCAlZDAsICUxLmRbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmR1cHFfbGFuZV9mMzIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZHVwICUwLjRzLCUxLnNbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZHVwcV9sYW5lX2Y2NChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4MV90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJkdXAgJTAuMmQsJTEuZFslMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZkdXBxX2xhbmVfcDgoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4MTZfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImR1cCAlMC4xNmIsJTEuYlslMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmR1cHFfbGFuZV9wMTYoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZHVwICUwLjhoLCUxLmhbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZHVwcV9sYW5lX3M4KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4MTZfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJkdXAgJTAuMTZiLCUxLmJbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZkdXBxX2xhbmVfczE2KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImR1cCAlMC44aCwlMS5oWyUyXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmR1cHFfbGFuZV9zMzIoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZHVwICUwLjRzLCUxLnNbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZHVwcV9sYW5lX3M2NChhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDFfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJkdXAgJTAuMmQsJTEuZFslMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZkdXBxX2xhbmVfdTgoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4MTZfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImR1cCAlMC4xNmIsJTEuYlslMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmR1cHFfbGFuZV91MTYoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZHVwICUwLjhoLCUxLmhbJTJdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZHVwcV9sYW5lX3UzMihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJkdXAgJTAuNHMsJTEuc1slMl0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZkdXBxX2xhbmVfdTY0KGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDFfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImR1cCAlMC4yZCwlMS5kWyUyXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX2YzMiAoZmxvYXQzMl90IGEpCit7CisgIGZsb2F0MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC40cywgJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBxX25fZjY0IChmbG9hdDY0X3QgYSkKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjJkLCAleDEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3A4ICh1aW50MzJfdCBhKQoreworICBwb2x5OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC4xNmIsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbl9wMTYgKHVpbnQzMl90IGEpCit7CisgIHBvbHkxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjhoLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbl9zOCAoaW50MzJfdCBhKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjE2YiwldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBxX25fczE2IChpbnQzMl90IGEpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuOGgsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3MzMiAoaW50MzJfdCBhKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjRzLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbl9zNjQgKGludDY0X3QgYSkKK3sKKyAgaW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC4yZCwleDEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3U4ICh1aW50MzJfdCBhKQoreworICB1aW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC4xNmIsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cHFfbl91MTYgKHVpbnQzMl90IGEpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjhoLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBxX25fdTMyICh1aW50MzJfdCBhKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC40cywldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwcV9uX3U2NCAodWludDY0X3QgYSkKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuMmQsJXgxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSB2ZHVwc19sYW5lX2YzMihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJkdXAgJXMwLCAlMS5zWyUyXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZleHRfZjMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImV4dCAlMC44YiwgJTEuOGIsICUyLjhiLCAjJTMqNCIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmV4dF9mNjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDFfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDFfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDFfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZXh0ICUwLjhiLCAlMS44YiwgJTIuOGIsICMlMyo4IiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZXh0X3A4KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJleHQgJTAuOGIsJTEuOGIsJTIuOGIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZleHRfcDE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImV4dCAlMC44YiwgJTEuOGIsICUyLjhiLCAjJTMqMiIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmV4dF9zOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZXh0ICUwLjhiLCUxLjhiLCUyLjhiLCUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZXh0X3MxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJleHQgJTAuOGIsICUxLjhiLCAlMi44YiwgIyUzKjIiICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZleHRfczMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImV4dCAlMC44YiwgJTEuOGIsICUyLjhiLCAjJTMqNCIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmV4dF9zNjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgxX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgxX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgxX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZXh0ICUwLjhiLCAlMS44YiwgJTIuOGIsICMlMyo4IiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZXh0X3U4KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJleHQgJTAuOGIsJTEuOGIsJTIuOGIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZleHRfdTE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImV4dCAlMC44YiwgJTEuOGIsICUyLjhiLCAjJTMqMiIgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmV4dF91MzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZXh0ICUwLjhiLCAlMS44YiwgJTIuOGIsICMlMyo0IiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZXh0X3U2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgxX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgxX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgxX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJleHQgJTAuOGIsICUxLjhiLCAlMi44YiwgIyUzKjgiICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZleHRxX2YzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImV4dCAlMC4xNmIsICUxLjE2YiwgJTIuMTZiLCAjJTMqNCIgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmV4dHFfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZXh0ICUwLjE2YiwgJTEuMTZiLCAlMi4xNmIsICMlMyo4IiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZXh0cV9wOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJleHQgJTAuMTZiLCAlMS4xNmIsICUyLjE2YiwgIyUzIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZleHRxX3AxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImV4dCAlMC4xNmIsICUxLjE2YiwgJTIuMTZiLCAjJTMqMiIgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmV4dHFfczgoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDE2X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDE2X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ4eDE2X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZXh0ICUwLjE2YiwgJTEuMTZiLCAlMi4xNmIsICMlMyIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZXh0cV9zMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJleHQgJTAuMTZiLCAlMS4xNmIsICUyLjE2YiwgIyUzKjIiICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZleHRxX3MzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImV4dCAlMC4xNmIsICUxLjE2YiwgJTIuMTZiLCAjJTMqNCIgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmV4dHFfczY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZXh0ICUwLjE2YiwgJTEuMTZiLCAlMi4xNmIsICMlMyo4IiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZXh0cV91OChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDE2X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDE2X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDE2X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJleHQgJTAuMTZiLCAlMS4xNmIsICUyLjE2YiwgIyUzIiAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZleHRxX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImV4dCAlMC4xNmIsICUxLjE2YiwgJTIuMTZiLCAjJTMqMiIgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmV4dHFfdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZXh0ICUwLjE2YiwgJTEuMTZiLCAlMi4xNmIsICMlMyo0IiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2ZXh0cV91NjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJleHQgJTAuMTZiLCAlMS4xNmIsICUyLjE2YiwgIyUzKjgiICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmZtYV9mMzIgKGZsb2F0MzJ4Ml90IGEsIGZsb2F0MzJ4Ml90IGIsIGZsb2F0MzJ4Ml90IGMpCit7CisgIGZsb2F0MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtbGEgJTAuMnMsJTIuMnMsJTMuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSB2Zm1hX2xhbmVfZjMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJmbWxhICUwLjJzLCUyLjJzLCUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZmbWFkX2xhbmVfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtbGEgJWQwLCVkMSwlMi5kWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Zm1hcV9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJ4NF90IGIsIGZsb2F0MzJ4NF90IGMpCit7CisgIGZsb2F0MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtbGEgJTAuNHMsJTIuNHMsJTMuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZmbWFxX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYiwgZmxvYXQ2NHgyX3QgYykKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1sYSAlMC4yZCwlMi4yZCwlMy4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZmbWFxX2xhbmVfZjMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtbGEgJTAuNHMsJTIuNHMsJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmZtYXFfbGFuZV9mNjQoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZm1sYSAlMC4yZCwlMi4yZCwlMy5kWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2Zm1hc19sYW5lX2YzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJmbWxhICVzMCwlczEsJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmZtYV9uX2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYiwgZmxvYXQzMl90IGMpCit7CisgIGZsb2F0MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtbGEgJTAuMnMsICUyLjJzLCAlMy5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Zm1hcV9uX2YzMiAoZmxvYXQzMng0X3QgYSwgZmxvYXQzMng0X3QgYiwgZmxvYXQzMl90IGMpCit7CisgIGZsb2F0MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtbGEgJTAuNHMsICUyLjRzLCAlMy5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Zm1hcV9uX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYiwgZmxvYXQ2NF90IGMpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtbGEgJTAuMmQsICUyLjJkLCAlMy5kWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Zm1zX2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYiwgZmxvYXQzMngyX3QgYykKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1scyAlMC4ycywlMi4ycywlMy4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZmbXNkX2xhbmVfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtbHMgJWQwLCVkMSwlMi5kWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Zm1zcV9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJ4NF90IGIsIGZsb2F0MzJ4NF90IGMpCit7CisgIGZsb2F0MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtbHMgJTAuNHMsJTIuNHMsJTMuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZmbXNxX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYiwgZmxvYXQ2NHgyX3QgYykKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1scyAlMC4yZCwlMi4yZCwlMy4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZmbXNzX2xhbmVfZjMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMl90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMl90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtbHMgJXMwLCVzMSwlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2hpZ2hfZjMyIChmbG9hdDMyeDRfdCBhKQoreworICBmbG9hdDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2hpZ2hfZjY0IChmbG9hdDY0eDJfdCBhKQoreworICBmbG9hdDY0eDFfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9oaWdoX3A4IChwb2x5OHgxNl90IGEpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF9wMTYgKHBvbHkxNng4X3QgYSkKK3sKKyAgcG9seTE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Z2V0X2hpZ2hfczggKGludDh4MTZfdCBhKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9oaWdoX3MxNiAoaW50MTZ4OF90IGEpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9oaWdoX3MzMiAoaW50MzJ4NF90IGEpCit7CisgIGludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9oaWdoX3M2NCAoaW50NjR4Ml90IGEpCit7CisgIGludDY0eDFfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmdldF9oaWdoX3U4ICh1aW50OHgxNl90IGEpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF91MTYgKHVpbnQxNng4X3QgYSkKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF91MzIgKHVpbnQzMng0X3QgYSkKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZnZXRfaGlnaF91NjQgKHVpbnQ2NHgyX3QgYSkKK3sKKyAgdWludDY0eDFfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJpbnMgJTAuZFswXSwgJTEuZFsxXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1Yl9zOCAoaW50OHg4X3QgYSwgaW50OHg4X3QgYikKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgic2hzdWIgJTAuOGIsICUxLjhiLCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1Yl9zMTYgKGludDE2eDRfdCBhLCBpbnQxNng0X3QgYikKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNoc3ViICUwLjRoLCAlMS40aCwgJTIuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhzdWJfczMyIChpbnQzMngyX3QgYSwgaW50MzJ4Ml90IGIpCit7CisgIGludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzaHN1YiAlMC4ycywgJTEuMnMsICUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zoc3ViX3U4ICh1aW50OHg4X3QgYSwgdWludDh4OF90IGIpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1aHN1YiAlMC44YiwgJTEuOGIsICUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1Yl91MTYgKHVpbnQxNng0X3QgYSwgdWludDE2eDRfdCBiKQoreworICB1aW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVoc3ViICUwLjRoLCAlMS40aCwgJTIuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zoc3ViX3UzMiAodWludDMyeDJfdCBhLCB1aW50MzJ4Ml90IGIpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgidWhzdWIgJTAuMnMsICUxLjJzLCAlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1YnFfczggKGludDh4MTZfdCBhLCBpbnQ4eDE2X3QgYikKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInNoc3ViICUwLjE2YiwgJTEuMTZiLCAlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmhzdWJxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic2hzdWIgJTAuOGgsICUxLjhoLCAlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1YnFfczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzaHN1YiAlMC40cywgJTEuNHMsICUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2aHN1YnFfdTggKHVpbnQ4eDE2X3QgYSwgdWludDh4MTZfdCBiKQoreworICB1aW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInVoc3ViICUwLjE2YiwgJTEuMTZiLCAlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zoc3VicV91MTYgKHVpbnQxNng4X3QgYSwgdWludDE2eDhfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVoc3ViICUwLjhoLCAlMS44aCwgJTIuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zoc3VicV91MzIgKHVpbnQzMng0X3QgYSwgdWludDMyeDRfdCBiKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVoc3ViICUwLjRzLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqIGEpCit7CisgIGZsb2F0MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjJzfSwgJTEiCisJICAgOiAiPXciKHJlc3VsdCkKKwkgICA6ICJVdHYiKCphKQorCSAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9kdXBfZjY0IChjb25zdCBmbG9hdDY0X3QgKiBhKQoreworICBmbG9hdDY0eDFfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDFyIHslMC4xZH0sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF9wOCAoY29uc3QgcG9seThfdCAqIGEpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDFyIHslMC44Yn0sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9kdXBfcDE2IChjb25zdCBwb2x5MTZfdCAqIGEpCit7CisgIHBvbHkxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxciB7JTAuNGh9LCAlMSIKKwkgICA6ICI9dyIocmVzdWx0KQorCSAgIDogIlV0diIoKmEpCisJICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF9zOCAoY29uc3QgaW50OF90ICogYSkKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxciB7JTAuOGJ9LCAlMSIKKwkgICA6ICI9dyIocmVzdWx0KQorCSAgIDogIlV0diIoKmEpCisJICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9kdXBfczE2IChjb25zdCBpbnQxNl90ICogYSkKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjRofSwgJTEiCisJICAgOiAiPXciKHJlc3VsdCkKKwkgICA6ICJVdHYiKCphKQorCSAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfZHVwX3MzMiAoY29uc3QgaW50MzJfdCAqIGEpCit7CisgIGludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDFyIHslMC4yc30sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF9zNjQgKGNvbnN0IGludDY0X3QgKiBhKQoreworICBpbnQ2NHgxX3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxciB7JTAuMWR9LCAlMSIKKwkgICA6ICI9dyIocmVzdWx0KQorCSAgIDogIlV0diIoKmEpCisJICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9kdXBfdTggKGNvbnN0IHVpbnQ4X3QgKiBhKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxciB7JTAuOGJ9LCAlMSIKKwkgICA6ICI9dyIocmVzdWx0KQorCSAgIDogIlV0diIoKmEpCisJICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfZHVwX3UxNiAoY29uc3QgdWludDE2X3QgKiBhKQoreworICB1aW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjRofSwgJTEiCisJICAgOiAiPXciKHJlc3VsdCkKKwkgICA6ICJVdHYiKCphKQorCSAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX2R1cF91MzIgKGNvbnN0IHVpbnQzMl90ICogYSkKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDFyIHslMC4yc30sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9kdXBfdTY0IChjb25zdCB1aW50NjRfdCAqIGEpCit7CisgIHVpbnQ2NHgxX3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxciB7JTAuMWR9LCAlMSIKKwkgICA6ICI9dyIocmVzdWx0KQorCSAgIDogIlV0diIoKmEpCisJICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgdmxkMV9sYW5lX2YzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBjb25zdCBmbG9hdDMyX3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibGQxIHslMC5zfVslMV0sICUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJpIiAoYyksICJVdHYiKCphXyksICIwIihiXykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bGQxX2xhbmVfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4MV90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNvbnN0IGZsb2F0NjRfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4MV90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJsZDEgeyUwLmR9WyUxXSwgJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImkiIChjKSwgIlV0diIoKmFfKSwgIjAiKGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZsZDFfbGFuZV9wOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY29uc3QgcG9seThfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImxkMSB7JTAuYn1bJTFdLCAlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiaSIgKGMpLCAiVXR2IigqYV8pLCAiMCIoYl8pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmxkMV9sYW5lX3AxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBjb25zdCBwb2x5MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibGQxIHslMC5ofVslMV0sICUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJpIiAoYyksICJVdHYiKCphXyksICIwIihiXykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bGQxX2xhbmVfczgoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNvbnN0IGludDhfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJsZDEgeyUwLmJ9WyUxXSwgJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImkiIChjKSwgIlV0diIoKmFfKSwgIjAiKGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZsZDFfbGFuZV9zMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY29uc3QgaW50MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImxkMSB7JTAuaH1bJTFdLCAlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiaSIgKGMpLCAiVXR2IigqYV8pLCAiMCIoYl8pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmxkMV9sYW5lX3MzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBjb25zdCBpbnQzMl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibGQxIHslMC5zfVslMV0sICUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJpIiAoYyksICJVdHYiKCphXyksICIwIihiXykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bGQxX2xhbmVfczY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDFfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNvbnN0IGludDY0X3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDFfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJsZDEgeyUwLmR9WyUxXSwgJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImkiIChjKSwgIlV0diIoKmFfKSwgIjAiKGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZsZDFfbGFuZV91OChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY29uc3QgdWludDhfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImxkMSB7JTAuYn1bJTFdLCAlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiaSIgKGMpLCAiVXR2IigqYV8pLCAiMCIoYl8pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmxkMV9sYW5lX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBjb25zdCB1aW50MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibGQxIHslMC5ofVslMV0sICUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJpIiAoYyksICJVdHYiKCphXyksICIwIihiXykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bGQxX2xhbmVfdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNvbnN0IHVpbnQzMl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJsZDEgeyUwLnN9WyUxXSwgJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImkiIChjKSwgIlV0diIoKmFfKSwgIjAiKGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZsZDFfbGFuZV91NjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDFfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY29uc3QgdWludDY0X3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDFfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImxkMSB7JTAuZH1bJTFdLCAlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiaSIgKGMpLCAiVXR2IigqYV8pLCAiMCIoYl8pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9kdXBfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBhKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDFyIHslMC40c30sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2R1cF9mNjQgKGNvbnN0IGZsb2F0NjRfdCAqIGEpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjJkfSwgJTEiCisJICAgOiAiPXciKHJlc3VsdCkKKwkgICA6ICJVdHYiKCphKQorCSAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9kdXBfcDggKGNvbnN0IHBvbHk4X3QgKiBhKQoreworICBwb2x5OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjE2Yn0sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3AxNiAoY29uc3QgcG9seTE2X3QgKiBhKQoreworICBwb2x5MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjhofSwgJTEiCisJICAgOiAiPXciKHJlc3VsdCkKKwkgICA6ICJVdHYiKCphKQorCSAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2R1cF9zOCAoY29uc3QgaW50OF90ICogYSkKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjE2Yn0sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9kdXBfczE2IChjb25zdCBpbnQxNl90ICogYSkKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjhofSwgJTEiCisJICAgOiAiPXciKHJlc3VsdCkKKwkgICA6ICJVdHYiKCphKQorCSAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2R1cF9zMzIgKGNvbnN0IGludDMyX3QgKiBhKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxciB7JTAuNHN9LCAlMSIKKwkgICA6ICI9dyIocmVzdWx0KQorCSAgIDogIlV0diIoKmEpCisJICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3M2NCAoY29uc3QgaW50NjRfdCAqIGEpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDFyIHslMC4yZH0sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3U4IChjb25zdCB1aW50OF90ICogYSkKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDFyIHslMC4xNmJ9LCAlMSIKKwkgICA6ICI9dyIocmVzdWx0KQorCSAgIDogIlV0diIoKmEpCisJICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2R1cF91MTYgKGNvbnN0IHVpbnQxNl90ICogYSkKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDFyIHslMC44aH0sICUxIgorCSAgIDogIj13IihyZXN1bHQpCisJICAgOiAiVXR2IigqYSkKKwkgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZHVwX3UzMiAoY29uc3QgdWludDMyX3QgKiBhKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMXIgeyUwLjRzfSwgJTEiCisJICAgOiAiPXciKHJlc3VsdCkKKwkgICA6ICJVdHYiKCphKQorCSAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9kdXBfdTY0IChjb25zdCB1aW50NjRfdCAqIGEpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxciB7JTAuMmR9LCAlMSIKKwkgICA6ICI9dyIocmVzdWx0KQorCSAgIDogIlV0diIoKmEpCisJICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgdmxkMXFfbGFuZV9mMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBjb25zdCBmbG9hdDMyX3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibGQxIHslMC5zfVslMV0sICUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJpIihjKSwgIlV0diIoKmFfKSwgIjAiKGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bGQxcV9sYW5lX2Y2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNvbnN0IGZsb2F0NjRfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJsZDEgeyUwLmR9WyUxXSwgJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImkiKGMpLCAiVXR2IigqYV8pLCAiMCIoYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZsZDFxX2xhbmVfcDgoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4MTZfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY29uc3QgcG9seThfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4MTZfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImxkMSB7JTAuYn1bJTFdLCAlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiaSIoYyksICJVdHYiKCphXyksICIwIihiXykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmxkMXFfbGFuZV9wMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBjb25zdCBwb2x5MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibGQxIHslMC5ofVslMV0sICUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJpIihjKSwgIlV0diIoKmFfKSwgIjAiKGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bGQxcV9sYW5lX3M4KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4MTZfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNvbnN0IGludDhfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4MTZfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJsZDEgeyUwLmJ9WyUxXSwgJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImkiKGMpLCAiVXR2IigqYV8pLCAiMCIoYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZsZDFxX2xhbmVfczE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY29uc3QgaW50MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImxkMSB7JTAuaH1bJTFdLCAlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiaSIoYyksICJVdHYiKCphXyksICIwIihiXykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmxkMXFfbGFuZV9zMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBjb25zdCBpbnQzMl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibGQxIHslMC5zfVslMV0sICUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJpIihjKSwgIlV0diIoKmFfKSwgIjAiKGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bGQxcV9sYW5lX3M2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNvbnN0IGludDY0X3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJsZDEgeyUwLmR9WyUxXSwgJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImkiKGMpLCAiVXR2IigqYV8pLCAiMCIoYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZsZDFxX2xhbmVfdTgoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4MTZfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY29uc3QgdWludDhfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4MTZfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImxkMSB7JTAuYn1bJTFdLCAlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiaSIoYyksICJVdHYiKCphXyksICIwIihiXykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdmxkMXFfbGFuZV91MTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBjb25zdCB1aW50MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibGQxIHslMC5ofVslMV0sICUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJpIihjKSwgIlV0diIoKmFfKSwgIjAiKGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bGQxcV9sYW5lX3UzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGNvbnN0IHVpbnQzMl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJsZDEgeyUwLnN9WyUxXSwgJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogImkiKGMpLCAiVXR2IigqYV8pLCAiMCIoYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZsZDFxX2xhbmVfdTY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgY29uc3QgdWludDY0X3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImxkMSB7JTAuZH1bJTFdLCAlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiaSIoYyksICJVdHYiKCphXyksICIwIihiXykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYV9sYW5lX2YzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCB0MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZm11bCAlMS4ycywgJTMuMnMsICU0LnNbJTVdOyBmYWRkICUwLjJzLCAlMC4ycywgJTEuMnMiIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSwgIj13Iih0MSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhX2xhbmVfczE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbGEgJTAuNGgsICUyLjRoLCAlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFfbGFuZV9zMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm1sYSAlMC4ycywgJTIuMnMsICUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYV9sYW5lX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibWxhICUwLjRoLCAlMi40aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhX2xhbmVfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbGEgJTAuMnMsICUyLjJzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFfbGFuZXFfczE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm1sYSAlMC40aCwgJTIuNGgsICUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYV9sYW5lcV9zMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibWxhICUwLjJzLCAlMi4ycywgJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhX2xhbmVxX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbGEgJTAuNGgsICUyLjRoLCAlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFfbGFuZXFfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm1sYSAlMC4ycywgJTIuMnMsICUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhX25fZjMyIChmbG9hdDMyeDJfdCBhLCBmbG9hdDMyeDJfdCBiLCBmbG9hdDMyX3QgYykKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBmbG9hdDMyeDJfdCB0MTsKKyAgX19hc21fXyAoImZtdWwgJTEuMnMsICUzLjJzLCAlNC5zWzBdOyBmYWRkICUwLjJzLCAlMC4ycywgJTEuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpLCAiPXciKHQxKQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9uX3MxNiAoaW50MTZ4NF90IGEsIGludDE2eDRfdCBiLCBpbnQxNl90IGMpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbGEgJTAuNGgsJTIuNGgsJTMuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfbl9zMzIgKGludDMyeDJfdCBhLCBpbnQzMngyX3QgYiwgaW50MzJfdCBjKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjJzLCUyLjJzLCUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9uX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIsIHVpbnQxNl90IGMpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjRoLCUyLjRoLCUzLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9uX3UzMiAodWludDMyeDJfdCBhLCB1aW50MzJ4Ml90IGIsIHVpbnQzMl90IGMpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjJzLCUyLjJzLCUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfczggKGludDh4OF90IGEsIGludDh4OF90IGIsIGludDh4OF90IGMpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1sYSAlMC44YiwgJTIuOGIsICUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9zMTYgKGludDE2eDRfdCBhLCBpbnQxNng0X3QgYiwgaW50MTZ4NF90IGMpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbGEgJTAuNGgsICUyLjRoLCAlMy40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFfczMyIChpbnQzMngyX3QgYSwgaW50MzJ4Ml90IGIsIGludDMyeDJfdCBjKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjJzLCAlMi4ycywgJTMuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhX3U4ICh1aW50OHg4X3QgYSwgdWludDh4OF90IGIsIHVpbnQ4eDhfdCBjKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjhiLCAlMi44YiwgJTMuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV91MTYgKHVpbnQxNng0X3QgYSwgdWludDE2eDRfdCBiLCB1aW50MTZ4NF90IGMpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjRoLCAlMi40aCwgJTMuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV91MzIgKHVpbnQzMngyX3QgYSwgdWludDMyeDJfdCBiLCB1aW50MzJ4Ml90IGMpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjJzLCAlMi4ycywgJTMuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfczE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbWxhbDIgJTAuNHMsICUyLjhoLCAlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZV9zMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNtbGFsMiAlMC4yZCwgJTIuNHMsICUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidW1sYWwyICUwLjRzLCAlMi44aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1bWxhbDIgJTAuMmQsICUyLjRzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfczE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNtbGFsMiAlMC40cywgJTIuOGgsICUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYWxfaGlnaF9sYW5lcV9zMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic21sYWwyICUwLjJkLCAlMi40cywgJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhbF9oaWdoX2xhbmVxX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1bWxhbDIgJTAuNHMsICUyLjhoLCAlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFsX2hpZ2hfbGFuZXFfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtbGFsMiAlMC4yZCwgJTIuNHMsICUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfaGlnaF9uX3MxNiAoaW50MzJ4NF90IGEsIGludDE2eDhfdCBiLCBpbnQxNl90IGMpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWxhbDIgJTAuNHMsJTIuOGgsJTMuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX2hpZ2hfbl9zMzIgKGludDY0eDJfdCBhLCBpbnQzMng0X3QgYiwgaW50MzJfdCBjKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic21sYWwyICUwLjJkLCUyLjRzLCUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfaGlnaF9uX3UxNiAodWludDMyeDRfdCBhLCB1aW50MTZ4OF90IGIsIHVpbnQxNl90IGMpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sYWwyICUwLjRzLCUyLjhoLCUzLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfaGlnaF9uX3UzMiAodWludDY0eDJfdCBhLCB1aW50MzJ4NF90IGIsIHVpbnQzMl90IGMpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sYWwyICUwLjJkLCUyLjRzLCUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9oaWdoX3M4IChpbnQxNng4X3QgYSwgaW50OHgxNl90IGIsIGludDh4MTZfdCBjKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic21sYWwyICUwLjhoLCUyLjE2YiwlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9oaWdoX3MxNiAoaW50MzJ4NF90IGEsIGludDE2eDhfdCBiLCBpbnQxNng4X3QgYykKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtbGFsMiAlMC40cywlMi44aCwlMy44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX2hpZ2hfczMyIChpbnQ2NHgyX3QgYSwgaW50MzJ4NF90IGIsIGludDMyeDRfdCBjKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic21sYWwyICUwLjJkLCUyLjRzLCUzLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX2hpZ2hfdTggKHVpbnQxNng4X3QgYSwgdWludDh4MTZfdCBiLCB1aW50OHgxNl90IGMpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sYWwyICUwLjhoLCUyLjE2YiwlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfaGlnaF91MTYgKHVpbnQzMng0X3QgYSwgdWludDE2eDhfdCBiLCB1aW50MTZ4OF90IGMpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sYWwyICUwLjRzLCUyLjhoLCUzLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX2hpZ2hfdTMyICh1aW50NjR4Ml90IGEsIHVpbnQzMng0X3QgYiwgdWludDMyeDRfdCBjKQoreworICB1aW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtbGFsMiAlMC4yZCwlMi40cywlMy40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZtbGFsX2xhbmVfczE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNtbGFsICUwLjRzLCUyLjRoLCUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYWxfbGFuZV9zMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic21sYWwgJTAuMmQsJTIuMnMsJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhbF9sYW5lX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1bWxhbCAlMC40cywlMi40aCwlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFsX2xhbmVfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtbGFsICUwLjJkLCAlMi4ycywgJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYWxfbGFuZXFfczE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic21sYWwgJTAuNHMsICUyLjRoLCAlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhbF9sYW5lcV9zMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbWxhbCAlMC4yZCwgJTIuMnMsICUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFsX2xhbmVxX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtbGFsICUwLjRzLCAlMi40aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYWxfbGFuZXFfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidW1sYWwgJTAuMmQsICUyLjJzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9uX3MxNiAoaW50MzJ4NF90IGEsIGludDE2eDRfdCBiLCBpbnQxNl90IGMpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWxhbCAlMC40cywlMi40aCwlMy5oWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfbl9zMzIgKGludDY0eDJfdCBhLCBpbnQzMngyX3QgYiwgaW50MzJfdCBjKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic21sYWwgJTAuMmQsJTIuMnMsJTMuc1swXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9uX3UxNiAodWludDMyeDRfdCBhLCB1aW50MTZ4NF90IGIsIHVpbnQxNl90IGMpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sYWwgJTAuNHMsJTIuNGgsJTMuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9uX3UzMiAodWludDY0eDJfdCBhLCB1aW50MzJ4Ml90IGIsIHVpbnQzMl90IGMpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sYWwgJTAuMmQsJTIuMnMsJTMuc1swXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX3M4IChpbnQxNng4X3QgYSwgaW50OHg4X3QgYiwgaW50OHg4X3QgYykKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtbGFsICUwLjhoLCUyLjhiLCUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfczE2IChpbnQzMng0X3QgYSwgaW50MTZ4NF90IGIsIGludDE2eDRfdCBjKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic21sYWwgJTAuNHMsJTIuNGgsJTMuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF9zMzIgKGludDY0eDJfdCBhLCBpbnQzMngyX3QgYiwgaW50MzJ4Ml90IGMpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWxhbCAlMC4yZCwlMi4ycywlMy4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhbF91OCAodWludDE2eDhfdCBhLCB1aW50OHg4X3QgYiwgdWludDh4OF90IGMpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sYWwgJTAuOGgsJTIuOGIsJTMuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYWxfdTE2ICh1aW50MzJ4NF90IGEsIHVpbnQxNng0X3QgYiwgdWludDE2eDRfdCBjKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtbGFsICUwLjRzLCUyLjRoLCUzLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFsX3UzMiAodWludDY0eDJfdCBhLCB1aW50MzJ4Ml90IGIsIHVpbnQzMngyX3QgYykKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bWxhbCAlMC4yZCwlMi4ycywlMy4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZtbGFxX2xhbmVfZjMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgdDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtdWwgJTEuNHMsICUzLjRzLCAlNC5zWyU1XTsgZmFkZCAlMC40cywgJTAuNHMsICUxLjRzIiBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCksICI9dyIodDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYXFfbGFuZV9zMTYoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibWxhICUwLjhoLCAlMi44aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhcV9sYW5lX3MzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbGEgJTAuNHMsICUyLjRzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFxX2xhbmVfdTE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm1sYSAlMC44aCwgJTIuOGgsICUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYXFfbGFuZV91MzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibWxhICUwLjRzLCAlMi40cywgJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhcV9sYW5lcV9zMTYoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbGEgJTAuOGgsICUyLjhoLCAlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbGFxX2xhbmVxX3MzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm1sYSAlMC40cywgJTIuNHMsICUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sYXFfbGFuZXFfdTE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibWxhICUwLjhoLCAlMi44aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxhcV9sYW5lcV91MzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbGEgJTAuNHMsICUyLjRzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfbl9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJ4NF90IGIsIGZsb2F0MzJfdCBjKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIGZsb2F0MzJ4NF90IHQxOworICBfX2FzbV9fICgiZm11bCAlMS40cywgJTMuNHMsICU0LnNbMF07IGZhZGQgJTAuNHMsICUwLjRzLCAlMS40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCksICI9dyIodDEpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX25fZjY0IChmbG9hdDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiLCBmbG9hdDY0X3QgYykKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBmbG9hdDY0eDJfdCB0MTsKKyAgX19hc21fXyAoImZtdWwgJTEuMmQsICUzLjJkLCAlNC5kWzBdOyBmYWRkICUwLjJkLCAlMC4yZCwgJTEuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpLCAiPXciKHQxKQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfbl9zMTYgKGludDE2eDhfdCBhLCBpbnQxNng4X3QgYiwgaW50MTZfdCBjKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjhoLCUyLjhoLCUzLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9uX3MzMiAoaW50MzJ4NF90IGEsIGludDMyeDRfdCBiLCBpbnQzMl90IGMpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbGEgJTAuNHMsJTIuNHMsJTMuc1swXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9uX3UxNiAodWludDE2eDhfdCBhLCB1aW50MTZ4OF90IGIsIHVpbnQxNl90IGMpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjhoLCUyLjhoLCUzLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfbl91MzIgKHVpbnQzMng0X3QgYSwgdWludDMyeDRfdCBiLCB1aW50MzJfdCBjKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1sYSAlMC40cywlMi40cywlMy5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfczggKGludDh4MTZfdCBhLCBpbnQ4eDE2X3QgYiwgaW50OHgxNl90IGMpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbGEgJTAuMTZiLCAlMi4xNmIsICUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiLCBpbnQxNng4X3QgYykKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1sYSAlMC44aCwgJTIuOGgsICUzLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIsIGludDMyeDRfdCBjKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjRzLCAlMi40cywgJTMuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfdTggKHVpbnQ4eDE2X3QgYSwgdWludDh4MTZfdCBiLCB1aW50OHgxNl90IGMpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxhICUwLjE2YiwgJTIuMTZiLCAlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYXFfdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNng4X3QgYiwgdWludDE2eDhfdCBjKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1sYSAlMC44aCwgJTIuOGgsICUzLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbGFxX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJ4NF90IGIsIHVpbnQzMng0X3QgYykKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbGEgJTAuNHMsICUyLjRzLCAlMy40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZtbHNfbGFuZV9mMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgdDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtdWwgJTEuMnMsICUzLjJzLCAlNC5zWyU1XTsgZnN1YiAlMC4ycywgJTAuMnMsICUxLjJzIiBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCksICI9dyIodDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc19sYW5lX3MxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibWxzICUwLjRoLCUyLjRoLCUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzX2xhbmVfczMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbHMgJTAuMnMsJTIuMnMsJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbHNfbGFuZV91MTYoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm1scyAlMC40aCwlMi40aCwlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc19sYW5lX3UzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibWxzICUwLjJzLCUyLjJzLCUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNfbl9mMzIgKGZsb2F0MzJ4Ml90IGEsIGZsb2F0MzJ4Ml90IGIsIGZsb2F0MzJfdCBjKQoreworICBmbG9hdDMyeDJfdCByZXN1bHQ7CisgIGZsb2F0MzJ4Ml90IHQxOworICBfX2FzbV9fICgiZm11bCAlMS4ycywgJTMuMnMsICU0LnNbMF07IGZzdWIgJTAuMnMsICUwLjJzLCAlMS4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCksICI9dyIodDEpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX25fczE2IChpbnQxNng0X3QgYSwgaW50MTZ4NF90IGIsIGludDE2X3QgYykKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC40aCwgJTIuNGgsICUzLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX25fczMyIChpbnQzMngyX3QgYSwgaW50MzJ4Ml90IGIsIGludDMyX3QgYykKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC4ycywgJTIuMnMsICUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc19uX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIsIHVpbnQxNl90IGMpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxzICUwLjRoLCAlMi40aCwgJTMuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX25fdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYiwgdWludDMyX3QgYykKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbHMgJTAuMnMsICUyLjJzLCAlMy5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX3M4IChpbnQ4eDhfdCBhLCBpbnQ4eDhfdCBiLCBpbnQ4eDhfdCBjKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbHMgJTAuOGIsJTIuOGIsJTMuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX3MxNiAoaW50MTZ4NF90IGEsIGludDE2eDRfdCBiLCBpbnQxNng0X3QgYykKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC40aCwlMi40aCwlMy40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNfczMyIChpbnQzMngyX3QgYSwgaW50MzJ4Ml90IGIsIGludDMyeDJfdCBjKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibWxzICUwLjJzLCUyLjJzLCUzLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc191OCAodWludDh4OF90IGEsIHVpbnQ4eDhfdCBiLCB1aW50OHg4X3QgYykKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC44YiwlMi44YiwlMy44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIsIHVpbnQxNng0X3QgYykKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbHMgJTAuNGgsJTIuNGgsJTMuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc191MzIgKHVpbnQzMngyX3QgYSwgdWludDMyeDJfdCBiLCB1aW50MzJ4Ml90IGMpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibWxzICUwLjJzLCUyLjJzLCUzLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3MxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic21sc2wyICUwLjRzLCAlMi44aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVfczMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbWxzbDIgJTAuMmQsICUyLjRzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZV91MTYoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtbHNsMiAlMC40cywgJTIuOGgsICUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lX3UzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidW1sc2wyICUwLjJkLCAlMi40cywgJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3MxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbWxzbDIgJTAuNHMsICUyLjhoLCAlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbHNsX2hpZ2hfbGFuZXFfczMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNtbHNsMiAlMC4yZCwgJTIuNHMsICUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc2xfaGlnaF9sYW5lcV91MTYoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidW1sc2wyICUwLjRzLCAlMi44aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzbF9oaWdoX2xhbmVxX3UzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1bWxzbDIgJTAuMmQsICUyLjRzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX2hpZ2hfbl9zMTYgKGludDMyeDRfdCBhLCBpbnQxNng4X3QgYiwgaW50MTZfdCBjKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic21sc2wyICUwLjRzLCAlMi44aCwgJTMuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX2hpZ2hfbl9zMzIgKGludDY0eDJfdCBhLCBpbnQzMng0X3QgYiwgaW50MzJfdCBjKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic21sc2wyICUwLjJkLCAlMi40cywgJTMuc1swXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9oaWdoX25fdTE2ICh1aW50MzJ4NF90IGEsIHVpbnQxNng4X3QgYiwgdWludDE2X3QgYykKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bWxzbDIgJTAuNHMsICUyLjhoLCAlMy5oWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX2hpZ2hfbl91MzIgKHVpbnQ2NHgyX3QgYSwgdWludDMyeDRfdCBiLCB1aW50MzJfdCBjKQoreworICB1aW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtbHNsMiAlMC4yZCwgJTIuNHMsICUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9oaWdoX3M4IChpbnQxNng4X3QgYSwgaW50OHgxNl90IGIsIGludDh4MTZfdCBjKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic21sc2wyICUwLjhoLCUyLjE2YiwlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9oaWdoX3MxNiAoaW50MzJ4NF90IGEsIGludDE2eDhfdCBiLCBpbnQxNng4X3QgYykKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtbHNsMiAlMC40cywlMi44aCwlMy44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX2hpZ2hfczMyIChpbnQ2NHgyX3QgYSwgaW50MzJ4NF90IGIsIGludDMyeDRfdCBjKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic21sc2wyICUwLjJkLCUyLjRzLCUzLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX2hpZ2hfdTggKHVpbnQxNng4X3QgYSwgdWludDh4MTZfdCBiLCB1aW50OHgxNl90IGMpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sc2wyICUwLjhoLCUyLjE2YiwlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc2xfaGlnaF91MTYgKHVpbnQzMng0X3QgYSwgdWludDE2eDhfdCBiLCB1aW50MTZ4OF90IGMpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sc2wyICUwLjRzLCUyLjhoLCUzLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX2hpZ2hfdTMyICh1aW50NjR4Ml90IGEsIHVpbnQzMng0X3QgYiwgdWludDMyeDRfdCBjKQoreworICB1aW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtbHNsMiAlMC4yZCwlMi40cywlMy40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZtbHNsX2xhbmVfczE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNtbHNsICUwLjRzLCAlMi40aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc2xfbGFuZV9zMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic21sc2wgJTAuMmQsICUyLjJzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzbF9sYW5lX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1bWxzbCAlMC40cywgJTIuNGgsICUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbHNsX2xhbmVfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtbHNsICUwLjJkLCAlMi4ycywgJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc2xfbGFuZXFfczE2KGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic21sc2wgJTAuNHMsICUyLjRoLCAlMy5oWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzbF9sYW5lcV9zMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbWxzbCAlMC4yZCwgJTIuMnMsICUzLnNbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbHNsX2xhbmVxX3UxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtbHNsICUwLjRzLCAlMi40aCwgJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc2xfbGFuZXFfdTMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidW1sc2wgJTAuMmQsICUyLjJzLCAlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9uX3MxNiAoaW50MzJ4NF90IGEsIGludDE2eDRfdCBiLCBpbnQxNl90IGMpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWxzbCAlMC40cywgJTIuNGgsICUzLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9uX3MzMiAoaW50NjR4Ml90IGEsIGludDMyeDJfdCBiLCBpbnQzMl90IGMpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWxzbCAlMC4yZCwgJTIuMnMsICUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc2xfbl91MTYgKHVpbnQzMng0X3QgYSwgdWludDE2eDRfdCBiLCB1aW50MTZfdCBjKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtbHNsICUwLjRzLCAlMi40aCwgJTMuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9uX3UzMiAodWludDY0eDJfdCBhLCB1aW50MzJ4Ml90IGIsIHVpbnQzMl90IGMpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidW1sc2wgJTAuMmQsICUyLjJzLCAlMy5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc2xfczggKGludDE2eDhfdCBhLCBpbnQ4eDhfdCBiLCBpbnQ4eDhfdCBjKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic21sc2wgJTAuOGgsICUyLjhiLCAlMy44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX3MxNiAoaW50MzJ4NF90IGEsIGludDE2eDRfdCBiLCBpbnQxNng0X3QgYykKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtbHNsICUwLjRzLCAlMi40aCwgJTMuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzbF9zMzIgKGludDY0eDJfdCBhLCBpbnQzMngyX3QgYiwgaW50MzJ4Ml90IGMpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWxzbCAlMC4yZCwgJTIuMnMsICUzLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX3U4ICh1aW50MTZ4OF90IGEsIHVpbnQ4eDhfdCBiLCB1aW50OHg4X3QgYykKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bWxzbCAlMC44aCwgJTIuOGIsICUzLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX3UxNiAodWludDMyeDRfdCBhLCB1aW50MTZ4NF90IGIsIHVpbnQxNng0X3QgYykKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bWxzbCAlMC40cywgJTIuNGgsICUzLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNsX3UzMiAodWludDY0eDJfdCBhLCB1aW50MzJ4Ml90IGIsIHVpbnQzMngyX3QgYykKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bWxzbCAlMC4yZCwgJTIuMnMsICUzLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgdm1sc3FfbGFuZV9mMzIoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCB0MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZm11bCAlMS40cywgJTMuNHMsICU0LnNbJTVdOyBmc3ViICUwLjRzLCAlMC40cywgJTEuNHMiIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSwgIj13Iih0MSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzcV9sYW5lX3MxNihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBjXyA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbHMgJTAuOGgsJTIuOGgsJTMuaFslNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbHNxX2xhbmVfczMyKGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm1scyAlMC40cywlMi40cywlMy5zWyU0XSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAidyIoY18pLCAiaSIoZCkgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc3FfbGFuZV91MTYoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGNfID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibWxzICUwLjhoLCUyLjhoLCUzLmhbJTRdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJ3IihjXyksICJpIihkKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzcV9sYW5lX3UzMihhLCBiLCBjLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgY18gPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtbHMgJTAuNHMsJTIuNHMsJTMuc1slNF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgInciKGNfKSwgImkiKGQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtbHNxX2xhbmVxX2YzMihfX2EsIF9fYiwgX19jLCBfX2QpCQkJCVwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJXAorICAgICh7CQkJCQkJCQkJXAorICAgICAgIGZsb2F0MzJ4NF90IF9fY18gPSAoX19jKTsJCQkJCVwKKyAgICAgICBmbG9hdDMyeDRfdCBfX2JfID0gKF9fYik7CQkJCQlcCisgICAgICAgZmxvYXQzMng0X3QgX19hXyA9IChfX2EpOwkJCQkJXAorICAgICAgIGZsb2F0MzJ4NF90IF9fcmVzdWx0OwkJCQkJCVwKKyAgICAgICBmbG9hdDMyeDRfdCBfX3QxOwkJCQkJCVwKKyAgICAgICBfX2FzbV9fICgiZm11bCAlMS40cywgJTMuNHMsICU0LnNbJTVdOyBmc3ViICUwLjRzLCAlMC40cywgJTEuNHMiCVwKKyAgICAgICAgICAgICAgICA6ICI9dyIoX19yZXN1bHQpLCAiPXciKF9fdDEpCQkJCVwKKyAgICAgICAgICAgICAgICA6ICIwIihfX2FfKSwgInciKF9fYl8pLCAidyIoX19jXyksICJpIihfX2QpCQlcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CQkJCQlcCisgICAgICAgX19yZXN1bHQ7CQkJCQkJCVwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzcV9sYW5lcV9zMTYoX19hLCBfX2IsIF9fYywgX19kKQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgICAoewkJCQkJCQkJCVwKKyAgICAgICBpbnQxNng4X3QgX19jXyA9IChfX2MpOwkJCQkJCVwKKyAgICAgICBpbnQxNng4X3QgX19iXyA9IChfX2IpOwkJCQkJCVwKKyAgICAgICBpbnQxNng4X3QgX19hXyA9IChfX2EpOwkJCQkJCVwKKyAgICAgICBpbnQxNng4X3QgX19yZXN1bHQ7CQkJCQkJXAorICAgICAgIF9fYXNtX18gKCJtbHMgJTAuOGgsICUyLjhoLCAlMy5oWyU0XSIJCQkJXAorICAgICAgICAgICAgICAgIDogIj13IihfX3Jlc3VsdCkJCQkJCVwKKyAgICAgICAgICAgICAgICA6ICIwIihfX2FfKSwgInciKF9fYl8pLCAidyIoX19jXyksICJpIihfX2QpCQlcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CQkJCQlcCisgICAgICAgX19yZXN1bHQ7CQkJCQkJCVwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzcV9sYW5lcV9zMzIoX19hLCBfX2IsIF9fYywgX19kKQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgICAoewkJCQkJCQkJCVwKKyAgICAgICBpbnQzMng0X3QgX19jXyA9IChfX2MpOwkJCQkJCVwKKyAgICAgICBpbnQzMng0X3QgX19iXyA9IChfX2IpOwkJCQkJCVwKKyAgICAgICBpbnQzMng0X3QgX19hXyA9IChfX2EpOwkJCQkJCVwKKyAgICAgICBpbnQzMng0X3QgX19yZXN1bHQ7CQkJCQkJXAorICAgICAgIF9fYXNtX18gKCJtbHMgJTAuNHMsICUyLjRzLCAlMy5zWyU0XSIJCQkJXAorICAgICAgICAgICAgICAgIDogIj13IihfX3Jlc3VsdCkJCQkJCVwKKyAgICAgICAgICAgICAgICA6ICIwIihfX2FfKSwgInciKF9fYl8pLCAidyIoX19jXyksICJpIihfX2QpCQlcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CQkJCQlcCisgICAgICAgX19yZXN1bHQ7CQkJCQkJCVwKKyAgICAgfSkKKworI2RlZmluZSB2bWxzcV9sYW5lcV91MTYoX19hLCBfX2IsIF9fYywgX19kKQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgICAoewkJCQkJCQkJCVwKKyAgICAgICB1aW50MTZ4OF90IF9fY18gPSAoX19jKTsJCQkJCQlcCisgICAgICAgdWludDE2eDhfdCBfX2JfID0gKF9fYik7CQkJCQkJXAorICAgICAgIHVpbnQxNng4X3QgX19hXyA9IChfX2EpOwkJCQkJCVwKKyAgICAgICB1aW50MTZ4OF90IF9fcmVzdWx0OwkJCQkJCVwKKyAgICAgICBfX2FzbV9fICgibWxzICUwLjhoLCAlMi44aCwgJTMuaFslNF0iCQkJCVwKKyAgICAgICAgICAgICAgICA6ICI9dyIoX19yZXN1bHQpCQkJCQlcCisgICAgICAgICAgICAgICAgOiAiMCIoX19hXyksICJ3IihfX2JfKSwgInciKF9fY18pLCAiaSIoX19kKQkJXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOwkJCQkJXAorICAgICAgIF9fcmVzdWx0OwkJCQkJCQlcCisgICAgIH0pCisKKyNkZWZpbmUgdm1sc3FfbGFuZXFfdTMyKF9fYSwgX19iLCBfX2MsIF9fZCkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICAgKHsJCQkJCQkJCQlcCisgICAgICAgdWludDMyeDRfdCBfX2NfID0gKF9fYyk7CQkJCQkJXAorICAgICAgIHVpbnQzMng0X3QgX19iXyA9IChfX2IpOwkJCQkJCVwKKyAgICAgICB1aW50MzJ4NF90IF9fYV8gPSAoX19hKTsJCQkJCQlcCisgICAgICAgdWludDMyeDRfdCBfX3Jlc3VsdDsJCQkJCQlcCisgICAgICAgX19hc21fXyAoIm1scyAlMC40cywgJTIuNHMsICUzLnNbJTRdIgkJCQlcCisgICAgICAgICAgICAgICAgOiAiPXciKF9fcmVzdWx0KQkJCQkJXAorICAgICAgICAgICAgICAgIDogIjAiKF9fYV8pLCAidyIoX19iXyksICJ3IihfX2NfKSwgImkiKF9fZCkJCVwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsJCQkJCVwKKyAgICAgICBfX3Jlc3VsdDsJCQkJCQkJXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3Ffbl9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJ4NF90IGIsIGZsb2F0MzJfdCBjKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIGZsb2F0MzJ4NF90IHQxOworICBfX2FzbV9fICgiZm11bCAlMS40cywgJTMuNHMsICU0LnNbMF07IGZzdWIgJTAuNHMsICUwLjRzLCAlMS40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCksICI9dyIodDEpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX25fZjY0IChmbG9hdDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiLCBmbG9hdDY0X3QgYykKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBmbG9hdDY0eDJfdCB0MTsKKyAgX19hc21fXyAoImZtdWwgJTEuMmQsICUzLjJkLCAlNC5kWzBdOyBmc3ViICUwLjJkLCAlMC4yZCwgJTEuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpLCAiPXciKHQxKQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3Ffbl9zMTYgKGludDE2eDhfdCBhLCBpbnQxNng4X3QgYiwgaW50MTZfdCBjKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxzICUwLjhoLCAlMi44aCwgJTMuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX25fczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIsIGludDMyX3QgYykKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC40cywgJTIuNHMsICUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3Ffbl91MTYgKHVpbnQxNng4X3QgYSwgdWludDE2eDhfdCBiLCB1aW50MTZfdCBjKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC44aCwgJTIuOGgsICUzLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3Ffbl91MzIgKHVpbnQzMng0X3QgYSwgdWludDMyeDRfdCBiLCB1aW50MzJfdCBjKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC40cywgJTIuNHMsICUzLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV9zOCAoaW50OHgxNl90IGEsIGludDh4MTZfdCBiLCBpbnQ4eDE2X3QgYykKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC4xNmIsJTIuMTZiLCUzLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiLCBpbnQxNng4X3QgYykKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC44aCwlMi44aCwlMy44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX3MzMiAoaW50MzJ4NF90IGEsIGludDMyeDRfdCBiLCBpbnQzMng0X3QgYykKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC40cywlMi40cywlMy40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV91OCAodWludDh4MTZfdCBhLCB1aW50OHgxNl90IGIsIHVpbnQ4eDE2X3QgYykKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtbHMgJTAuMTZiLCUyLjE2YiwlMy4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sc3FfdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNng4X3QgYiwgdWludDE2eDhfdCBjKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm1scyAlMC44aCwlMi44aCwlMy44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzcV91MzIgKHVpbnQzMng0X3QgYSwgdWludDMyeDRfdCBiLCB1aW50MzJ4NF90IGMpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibWxzICUwLjRzLCUyLjRzLCUzLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92X25fZjMyIChmbG9hdDMyX3QgYSkKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjJzLCAldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl9wOCAodWludDMyX3QgYSkKK3sKKyAgcG9seTh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC44YiwldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92X25fcDE2ICh1aW50MzJfdCBhKQoreworICBwb2x5MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC40aCwldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdl9uX3M4IChpbnQzMl90IGEpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC44YiwldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl9zMTYgKGludDMyX3QgYSkKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC40aCwldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl9zMzIgKGludDMyX3QgYSkKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC4ycywldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl9zNjQgKGludDY0X3QgYSkKK3sKKyAgaW50NjR4MV90IHJlc3VsdDsKKyAgX19hc21fXyAoImlucyAlMC5kWzBdLCV4MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdl9uX3U4ICh1aW50MzJfdCBhKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjhiLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl91MTYgKHVpbnQzMl90IGEpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjRoLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl91MzIgKHVpbnQzMl90IGEpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjJzLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3Zfbl91NjQgKHVpbnQ2NF90IGEpCit7CisgIHVpbnQ2NHgxX3QgcmVzdWx0OworICBfX2FzbV9fICgiaW5zICUwLmRbMF0sJXgxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bF9oaWdoX3M4IChpbnQ4eDE2X3QgYSkKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNzaGxsMiAlMC44aCwlMS4xNmIsIzAiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZsX2hpZ2hfczE2IChpbnQxNng4X3QgYSkKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNzaGxsMiAlMC40cywlMS44aCwjMCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdmxfaGlnaF9zMzIgKGludDMyeDRfdCBhKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic3NobGwyICUwLjJkLCUxLjRzLCMwIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdmxfaGlnaF91OCAodWludDh4MTZfdCBhKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVzaGxsMiAlMC44aCwlMS4xNmIsIzAiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bF9oaWdoX3UxNiAodWludDE2eDhfdCBhKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVzaGxsMiAlMC40cywlMS44aCwjMCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZsX2hpZ2hfdTMyICh1aW50MzJ4NF90IGEpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidXNobGwyICUwLjJkLCUxLjRzLCMwIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bF9zOCAoaW50OHg4X3QgYSkKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNzaGxsICUwLjhoLCUxLjhiLCMwIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bF9zMTYgKGludDE2eDRfdCBhKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic3NobGwgJTAuNHMsJTEuNGgsIzAiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZsX3MzMiAoaW50MzJ4Ml90IGEpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzc2hsbCAlMC4yZCwlMS4ycywjMCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZsX3U4ICh1aW50OHg4X3QgYSkKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1c2hsbCAlMC44aCwlMS44YiwjMCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZsX3UxNiAodWludDE2eDRfdCBhKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVzaGxsICUwLjRzLCUxLjRoLCMwIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdmxfdTMyICh1aW50MzJ4Ml90IGEpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidXNobGwgJTAuMmQsJTEuMnMsIzAiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZuX2hpZ2hfczE2IChpbnQ4eDhfdCBhLCBpbnQxNng4X3QgYikKK3sKKyAgaW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3M4IChhLCB2Y3JlYXRlX3M4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInh0bjIgJTAuMTZiLCUxLjhoIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bl9oaWdoX3MzMiAoaW50MTZ4NF90IGEsIGludDMyeDRfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0ID0gdmNvbWJpbmVfczE2IChhLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJ4dG4yICUwLjhoLCUxLjRzIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bl9oaWdoX3M2NCAoaW50MzJ4Ml90IGEsIGludDY0eDJfdCBiKQoreworICBpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfczMyIChhLCB2Y3JlYXRlX3MzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJ4dG4yICUwLjRzLCUxLjJkIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdm5faGlnaF91MTYgKHVpbnQ4eDhfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTggKGEsIHZjcmVhdGVfdTggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgieHRuMiAlMC4xNmIsJTEuOGgiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bl9oaWdoX3UzMiAodWludDE2eDRfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTE2IChhLCB2Y3JlYXRlX3UxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJ4dG4yICUwLjhoLCUxLjRzIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdm5faGlnaF91NjQgKHVpbnQzMngyX3QgYSwgdWludDY0eDJfdCBiKQoreworICB1aW50MzJ4NF90IHJlc3VsdCA9IHZjb21iaW5lX3UzMiAoYSwgdmNyZWF0ZV91MzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgieHRuMiAlMC40cywlMS4yZCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92bl9zMTYgKGludDE2eDhfdCBhKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ4dG4gJTAuOGIsJTEuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZuX3MzMiAoaW50MzJ4NF90IGEpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ4dG4gJTAuNGgsJTEuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZuX3M2NCAoaW50NjR4Ml90IGEpCit7CisgIGludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ4dG4gJTAuMnMsJTEuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZuX3UxNiAodWludDE2eDhfdCBhKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgieHRuICUwLjhiLCUxLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdm5fdTMyICh1aW50MzJ4NF90IGEpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgieHRuICUwLjRoLCUxLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdm5fdTY0ICh1aW50NjR4Ml90IGEpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgieHRuICUwLjJzLCUxLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZxX25fZjMyIChmbG9hdDMyX3QgYSkKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjRzLCAldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdnFfbl9mNjQgKGZsb2F0NjRfdCBhKQoreworICByZXR1cm4gKGZsb2F0NjR4Ml90KSB7YSwgYX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZxX25fcDggKHVpbnQzMl90IGEpCit7CisgIHBvbHk4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjE2YiwldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3AxNiAodWludDMyX3QgYSkKK3sKKyAgcG9seTE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuOGgsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3M4IChpbnQzMl90IGEpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuMTZiLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdnFfbl9zMTYgKGludDMyX3QgYSkKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC44aCwldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZxX25fczMyIChpbnQzMl90IGEpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuNHMsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3M2NCAoaW50NjRfdCBhKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjJkLCV4MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZxX25fdTggKHVpbnQzMl90IGEpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjE2YiwldzEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bW92cV9uX3UxNiAodWludDMyX3QgYSkKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJkdXAgJTAuOGgsJXcxIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJyIihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1vdnFfbl91MzIgKHVpbnQzMl90IGEpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZHVwICUwLjRzLCV3MSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiciIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztb3ZxX25fdTY0ICh1aW50NjRfdCBhKQoreworICB1aW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImR1cCAlMC4yZCwleDEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInIiKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZtdWxfbGFuZV9mMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtdWwgJTAuMnMsJTEuMnMsJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bF9sYW5lX3MxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibXVsICUwLjRoLCUxLjRoLCUyLmhbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVsX2xhbmVfczMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtdWwgJTAuMnMsJTEuMnMsJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxfbGFuZV91MTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm11bCAlMC40aCwlMS40aCwlMi5oWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bF9sYW5lX3UzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibXVsICUwLjJzLCAlMS4ycywgJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVsX2xhbmVxX2YzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJmbXVsICUwLjJzLCAlMS4ycywgJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxfbGFuZXFfczE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm11bCAlMC40aCwgJTEuNGgsICUyLmhbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bF9sYW5lcV9zMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibXVsICUwLjJzLCAlMS4ycywgJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVsX2xhbmVxX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtdWwgJTAuNGgsICUxLjRoLCAlMi5oWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxfbGFuZXFfdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm11bCAlMC4ycywgJTEuMnMsICUyLnNbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX25fZjMyIChmbG9hdDMyeDJfdCBhLCBmbG9hdDMyX3QgYikKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm11bCAlMC4ycywlMS4ycywlMi5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxfbl9zMTYgKGludDE2eDRfdCBhLCBpbnQxNl90IGIpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtdWwgJTAuNGgsJTEuNGgsJTIuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsX25fczMyIChpbnQzMngyX3QgYSwgaW50MzJfdCBiKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibXVsICUwLjJzLCUxLjJzLCUyLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxfbl91MTYgKHVpbnQxNng0X3QgYSwgdWludDE2X3QgYikKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtdWwgJTAuNGgsJTEuNGgsJTIuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bF9uX3UzMiAodWludDMyeDJfdCBhLCB1aW50MzJfdCBiKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoIm11bCAlMC4ycywlMS4ycywlMi5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZtdWxkX2xhbmVfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtdWwgJWQwLCVkMSwlMi5kWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3MxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic211bGwyICUwLjRzLCAlMS44aCwgJTIuaFslM10iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVfczMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbXVsbDIgJTAuMmQsICUxLjRzLCAlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZV91MTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtdWxsMiAlMC40cywgJTEuOGgsICUyLmhbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lX3UzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidW11bGwyICUwLjJkLCAlMS40cywgJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3MxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbXVsbDIgJTAuNHMsICUxLjhoLCAlMi5oWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxsX2hpZ2hfbGFuZXFfczMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNtdWxsMiAlMC4yZCwgJTEuNHMsICUyLnNbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bGxfaGlnaF9sYW5lcV91MTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidW11bGwyICUwLjRzLCAlMS44aCwgJTIuaFslM10iICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVsbF9oaWdoX2xhbmVxX3UzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1bXVsbDIgJTAuMmQsICUxLjRzLCAlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX2hpZ2hfbl9zMTYgKGludDE2eDhfdCBhLCBpbnQxNl90IGIpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbXVsbDIgJTAuNHMsJTEuOGgsJTIuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9oaWdoX25fczMyIChpbnQzMng0X3QgYSwgaW50MzJfdCBiKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic211bGwyICUwLjJkLCUxLjRzLCUyLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX2hpZ2hfbl91MTYgKHVpbnQxNng4X3QgYSwgdWludDE2X3QgYikKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bXVsbDIgJTAuNHMsJTEuOGgsJTIuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bGxfaGlnaF9uX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJfdCBiKQoreworICB1aW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtdWxsMiAlMC4yZCwlMS40cywlMi5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9oaWdoX3A4IChwb2x5OHgxNl90IGEsIHBvbHk4eDE2X3QgYikKK3sKKyAgcG9seTE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJwbXVsbDIgJTAuOGgsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9oaWdoX3M4IChpbnQ4eDE2X3QgYSwgaW50OHgxNl90IGIpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbXVsbDIgJTAuOGgsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9oaWdoX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic211bGwyICUwLjRzLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX2hpZ2hfczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbXVsbDIgJTAuMmQsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX2hpZ2hfdTggKHVpbnQ4eDE2X3QgYSwgdWludDh4MTZfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtdWxsMiAlMC44aCwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9oaWdoX3UxNiAodWludDE2eDhfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidW11bGwyICUwLjRzLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9oaWdoX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidW11bGwyICUwLjJkLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZtdWxsX2xhbmVfczE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNtdWxsICUwLjRzLCUxLjRoLCUyLmhbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bGxfbGFuZV9zMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic211bGwgJTAuMmQsJTEuMnMsJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVsbF9sYW5lX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1bXVsbCAlMC40cywlMS40aCwlMi5oWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxsX2xhbmVfdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtdWxsICUwLjJkLCAlMS4ycywgJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bGxfbGFuZXFfczE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic211bGwgJTAuNHMsICUxLjRoLCAlMi5oWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVsbF9sYW5lcV9zMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbXVsbCAlMC4yZCwgJTEuMnMsICUyLnNbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxsX2xhbmVxX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVtdWxsICUwLjRzLCAlMS40aCwgJTIuaFslM10iICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bGxfbGFuZXFfdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidW11bGwgJTAuMmQsICUxLjJzLCAlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9uX3MxNiAoaW50MTZ4NF90IGEsIGludDE2X3QgYikKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtdWxsICUwLjRzLCUxLjRoLCUyLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bGxfbl9zMzIgKGludDMyeDJfdCBhLCBpbnQzMl90IGIpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbXVsbCAlMC4yZCwlMS4ycywlMi5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9uX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZfdCBiKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtdWxsICUwLjRzLCUxLjRoLCUyLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX25fdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMl90IGIpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidW11bGwgJTAuMmQsJTEuMnMsJTIuc1swXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bGxfcDggKHBvbHk4eDhfdCBhLCBwb2x5OHg4X3QgYikKK3sKKyAgcG9seTE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJwbXVsbCAlMC44aCwgJTEuOGIsICUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX3M4IChpbnQ4eDhfdCBhLCBpbnQ4eDhfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic211bGwgJTAuOGgsICUxLjhiLCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF9zMTYgKGludDE2eDRfdCBhLCBpbnQxNng0X3QgYikKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtdWxsICUwLjRzLCAlMS40aCwgJTIuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bGxfczMyIChpbnQzMngyX3QgYSwgaW50MzJ4Ml90IGIpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbXVsbCAlMC4yZCwgJTEuMnMsICUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVsbF91OCAodWludDh4OF90IGEsIHVpbnQ4eDhfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtdWxsICUwLjhoLCAlMS44YiwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxsX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidW11bGwgJTAuNHMsICUxLjRoLCAlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bGxfdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYikKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bXVsbCAlMC4yZCwgJTEuMnMsICUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZtdWxxX2xhbmVfZjMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtdWwgJTAuNHMsICUxLjRzLCAlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bHFfbGFuZV9mNjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDFfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZm11bCAlMC4yZCwlMS4yZCwlMi5kWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVscV9sYW5lX3MxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtdWwgJTAuOGgsJTEuOGgsJTIuaFslM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxxX2xhbmVfczMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm11bCAlMC40cywlMS40cywlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bHFfbGFuZV91MTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibXVsICUwLjhoLCUxLjhoLCUyLmhbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVscV9sYW5lX3UzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtdWwgJTAuNHMsICUxLjRzLCAlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxxX2xhbmVxX2YzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtdWwgJTAuNHMsICUxLjRzLCAlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bHFfbGFuZXFfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDY0eDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZm11bCAlMC4yZCwlMS4yZCwlMi5kWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVscV9sYW5lcV9zMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtdWwgJTAuOGgsICUxLjhoLCAlMi5oWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWxxX2xhbmVxX3MzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoIm11bCAlMC40cywgJTEuNHMsICUyLnNbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdm11bHFfbGFuZXFfdTE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgibXVsICUwLjhoLCAlMS44aCwgJTIuaFslM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2bXVscV9sYW5lcV91MzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJtdWwgJTAuNHMsICUxLjRzLCAlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHFfbl9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJfdCBiKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbXVsICUwLjRzLCUxLjRzLCUyLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9uX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NF90IGIpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtdWwgJTAuMmQsJTEuMmQsJTIuZFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVscV9uX3MxNiAoaW50MTZ4OF90IGEsIGludDE2X3QgYikKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm11bCAlMC44aCwlMS44aCwlMi5oWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX25fczMyIChpbnQzMng0X3QgYSwgaW50MzJfdCBiKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibXVsICUwLjRzLCUxLjRzLCUyLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX25fdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNl90IGIpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgibXVsICUwLjhoLCUxLjhoLCUyLmhbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWxxX25fdTMyICh1aW50MzJ4NF90IGEsIHVpbnQzMl90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibXVsICUwLjRzLCUxLjRzLCUyLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgdm11bHNfbGFuZV9mMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZm11bCAlczAsJXMxLCUyLnNbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtdWx4X2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYikKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm11bHggJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgdm11bHhfbGFuZV9mMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiZm11bHggJTAuMnMsJTEuMnMsJTIuc1slM10iICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVseGRfZjY0IChmbG9hdDY0X3QgYSwgZmxvYXQ2NF90IGIpCit7CisgIGZsb2F0NjRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbXVseCAlZDAsICVkMSwgJWQyIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHhxX2YzMiAoZmxvYXQzMng0X3QgYSwgZmxvYXQzMng0X3QgYikKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZm11bHggJTAuNHMsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXVseHFfZjY0IChmbG9hdDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiKQoreworICBmbG9hdDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbXVseCAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSB2bXVseHFfbGFuZV9mMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJmbXVseCAlMC40cywlMS40cywlMi5zWyUzXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZtdWx4cV9sYW5lX2Y2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImZtdWx4ICUwLjJkLCUxLjJkLCUyLmRbJTNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm11bHhzX2YzMiAoZmxvYXQzMl90IGEsIGZsb2F0MzJfdCBiKQoreworICBmbG9hdDMyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm11bHggJXMwLCAlczEsICVzMiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZuX3A4IChwb2x5OHg4X3QgYSkKK3sKKyAgcG9seTh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm12biAlMC44YiwlMS44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZuX3M4IChpbnQ4eDhfdCBhKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtdm4gJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztdm5fczE2IChpbnQxNng0X3QgYSkKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm12biAlMC44YiwlMS44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bl9zMzIgKGludDMyeDJfdCBhKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibXZuICUwLjhiLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZuX3U4ICh1aW50OHg4X3QgYSkKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm12biAlMC44YiwlMS44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Ztdm5fdTE2ICh1aW50MTZ4NF90IGEpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibXZuICUwLjhiLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bl91MzIgKHVpbnQzMngyX3QgYSkKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtdm4gJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZucV9wOCAocG9seTh4MTZfdCBhKQoreworICBwb2x5OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoIm12biAlMC4xNmIsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZucV9zOCAoaW50OHgxNl90IGEpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtdm4gJTAuMTZiLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bnFfczE2IChpbnQxNng4X3QgYSkKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm12biAlMC4xNmIsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZucV9zMzIgKGludDMyeDRfdCBhKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibXZuICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZucV91OCAodWludDh4MTZfdCBhKQoreworICB1aW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoIm12biAlMC4xNmIsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm12bnFfdTE2ICh1aW50MTZ4OF90IGEpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgibXZuICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bXZucV91MzIgKHVpbnQzMng0X3QgYSkKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJtdm4gJTAuMTZiLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVnX2YzMiAoZmxvYXQzMngyX3QgYSkKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm5lZyAlMC4ycywlMS4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVnX3M4IChpbnQ4eDhfdCBhKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJuZWcgJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZuZWdfczE2IChpbnQxNng0X3QgYSkKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoIm5lZyAlMC40aCwlMS40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm5lZ19zMzIgKGludDMyeDJfdCBhKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgibmVnICUwLjJzLCUxLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZuZWdxX2YzMiAoZmxvYXQzMng0X3QgYSkKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZm5lZyAlMC40cywlMS40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVncV9mNjQgKGZsb2F0NjR4Ml90IGEpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZuZWcgJTAuMmQsJTEuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZuZWdxX3M4IChpbnQ4eDE2X3QgYSkKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoIm5lZyAlMC4xNmIsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVncV9zMTYgKGludDE2eDhfdCBhKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgibmVnICUwLjhoLCUxLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVncV9zMzIgKGludDMyeDRfdCBhKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgibmVnICUwLjRzLCUxLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bmVncV9zNjQgKGludDY0eDJfdCBhKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgibmVnICUwLjJkLCUxLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxfczggKGludDE2eDRfdCBhLCBpbnQ4eDhfdCBiKQoreworICBpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FkYWxwICUwLjRoLCUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRhbF9zMTYgKGludDMyeDJfdCBhLCBpbnQxNng0X3QgYikKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhZGFscCAlMC4ycywlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxfczMyIChpbnQ2NHgxX3QgYSwgaW50MzJ4Ml90IGIpCit7CisgIGludDY0eDFfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWRhbHAgJTAuMWQsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRhbF91OCAodWludDE2eDRfdCBhLCB1aW50OHg4X3QgYikKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWRhbHAgJTAuNGgsJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRhbF91MTYgKHVpbnQzMngyX3QgYSwgdWludDE2eDRfdCBiKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhZGFscCAlMC4ycywlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGFsX3UzMiAodWludDY0eDFfdCBhLCB1aW50MzJ4Ml90IGIpCit7CisgIHVpbnQ2NHgxX3QgcmVzdWx0OworICBfX2FzbV9fICgidWFkYWxwICUwLjFkLCUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRhbHFfczggKGludDE2eDhfdCBhLCBpbnQ4eDE2X3QgYikKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhZGFscCAlMC44aCwlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIjAiKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGFscV9zMTYgKGludDMyeDRfdCBhLCBpbnQxNng4X3QgYikKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhZGFscCAlMC40cywlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiMCIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxxX3MzMiAoaW50NjR4Ml90IGEsIGludDMyeDRfdCBiKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgic2FkYWxwICUwLjJkLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxxX3U4ICh1aW50MTZ4OF90IGEsIHVpbnQ4eDE2X3QgYikKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWRhbHAgJTAuOGgsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxxX3UxNiAodWludDMyeDRfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFkYWxwICUwLjRzLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkYWxxX3UzMiAodWludDY0eDJfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidWFkYWxwICUwLjJkLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICIwIihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfZjMyIChmbG9hdDMyeDJfdCBhLCBmbG9hdDMyeDJfdCBiKQoreworICBmbG9hdDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmYWRkcCAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2FkZHB2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfYWRkcHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hZGRwdjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkcHY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkcHY0aGkgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgKGludDE2eDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfYWRkcHYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGRfZjY0IChmbG9hdDY0eDJfdCBhKQoreworICBmbG9hdDY0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZmFkZHAgJWQwLCUxLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGxfczggKGludDh4OF90IGEpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWRkbHAgJTAuNGgsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbF9zMTYgKGludDE2eDRfdCBhKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgic2FkZGxwICUwLjJzLCUxLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGxfczMyIChpbnQzMngyX3QgYSkKK3sKKyAgaW50NjR4MV90IHJlc3VsdDsKKyAgX19hc21fXyAoInNhZGRscCAlMC4xZCwlMS4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbF91OCAodWludDh4OF90IGEpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFkZGxwICUwLjRoLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRsX3UxNiAodWludDE2eDRfdCBhKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhZGRscCAlMC4ycywlMS40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbF91MzIgKHVpbnQzMngyX3QgYSkKK3sKKyAgdWludDY0eDFfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWRkbHAgJTAuMWQsJTEuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbHFfczggKGludDh4MTZfdCBhKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FkZGxwICUwLjhoLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRscV9zMTYgKGludDE2eDhfdCBhKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic2FkZGxwICUwLjRzLCUxLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGxxX3MzMiAoaW50MzJ4NF90IGEpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWRkbHAgJTAuMmQsJTEuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGxxX3U4ICh1aW50OHgxNl90IGEpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFkZGxwICUwLjhoLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkbHFfdTE2ICh1aW50MTZ4OF90IGEpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidWFkZGxwICUwLjRzLCUxLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRscV91MzIgKHVpbnQzMng0X3QgYSkKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1YWRkbHAgJTAuMmQsJTEuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRxX2YzMiAoZmxvYXQzMng0X3QgYSwgZmxvYXQzMng0X3QgYikKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZmFkZHAgJTAuNHMsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZHFfZjY0IChmbG9hdDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiKQoreworICBmbG9hdDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmYWRkcCAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZHFfczggKGludDh4MTZfdCBhLCBpbnQ4eDE2X3QgYikKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImFkZHAgJTAuMTZiLCUxLjE2YiwlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiYWRkcCAlMC44aCwlMS44aCwlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZHFfczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJhZGRwICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkcV9zNjQgKGludDY0eDJfdCBhLCBpbnQ2NHgyX3QgYikKK3sKKyAgaW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImFkZHAgJTAuMmQsJTEuMmQsJTIuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwYWRkcV91OCAodWludDh4MTZfdCBhLCB1aW50OHgxNl90IGIpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiYWRkcCAlMC4xNmIsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRxX3UxNiAodWludDE2eDhfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiYWRkcCAlMC44aCwlMS44aCwlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRxX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiYWRkcCAlMC40cywlMS40cywlMi40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBhZGRxX3U2NCAodWludDY0eDJfdCBhLCB1aW50NjR4Ml90IGIpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiYWRkcCAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZHNfZjMyIChmbG9hdDMyeDJfdCBhKQoreworICBmbG9hdDMyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZmFkZHAgJXMwLCUxLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4X2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYikKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1heHAgJTAuMnMsICUxLjJzLCAlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4X3M4IChpbnQ4eDhfdCBhLCBpbnQ4eDhfdCBiKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWF4cCAlMC44YiwgJTEuOGIsICUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4X3MxNiAoaW50MTZ4NF90IGEsIGludDE2eDRfdCBiKQoreworICBpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic21heHAgJTAuNGgsICUxLjRoLCAlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1heF9zMzIgKGludDMyeDJfdCBhLCBpbnQzMngyX3QgYikKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtYXhwICUwLjJzLCAlMS4ycywgJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhfdTggKHVpbnQ4eDhfdCBhLCB1aW50OHg4X3QgYikKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtYXhwICUwLjhiLCAlMS44YiwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4X3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1heHAgJTAuNGgsICUxLjRoLCAlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhfdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYikKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bWF4cCAlMC4ycywgJTEuMnMsICUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhubV9mMzIgKGZsb2F0MzJ4Ml90IGEsIGZsb2F0MzJ4Ml90IGIpCit7CisgIGZsb2F0MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtYXhubXAgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1heG5tcV9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJ4NF90IGIpCit7CisgIGZsb2F0MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtYXhubXAgJTAuNHMsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1heG5tcV9mNjQgKGZsb2F0NjR4Ml90IGEsIGZsb2F0NjR4Ml90IGIpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtYXhubXAgJTAuMmQsJTEuMmQsJTIuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhubXFkX2Y2NCAoZmxvYXQ2NHgyX3QgYSkKK3sKKyAgZmxvYXQ2NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtYXhubXAgJWQwLCUxLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1heG5tc19mMzIgKGZsb2F0MzJ4Ml90IGEpCit7CisgIGZsb2F0MzJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbWF4bm1wICVzMCwlMS4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1heHFfZjMyIChmbG9hdDMyeDRfdCBhLCBmbG9hdDMyeDRfdCBiKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbWF4cCAlMC40cywgJTEuNHMsICUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhxX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYikKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1heHAgJTAuMmQsICUxLjJkLCAlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1heHFfczggKGludDh4MTZfdCBhLCBpbnQ4eDE2X3QgYikKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtYXhwICUwLjE2YiwgJTEuMTZiLCAlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic21heHAgJTAuOGgsICUxLjhoLCAlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1heHFfczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWF4cCAlMC40cywgJTEuNHMsICUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1heHFfdTggKHVpbnQ4eDE2X3QgYSwgdWludDh4MTZfdCBiKQoreworICB1aW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtYXhwICUwLjE2YiwgJTEuMTZiLCAlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4cV91MTYgKHVpbnQxNng4X3QgYSwgdWludDE2eDhfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtYXhwICUwLjhoLCAlMS44aCwgJTIuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4cV91MzIgKHVpbnQzMng0X3QgYSwgdWludDMyeDRfdCBiKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtYXhwICUwLjRzLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtYXhxZF9mNjQgKGZsb2F0NjR4Ml90IGEpCit7CisgIGZsb2F0NjRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbWF4cCAlZDAsJTEuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWF4c19mMzIgKGZsb2F0MzJ4Ml90IGEpCit7CisgIGZsb2F0MzJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbWF4cCAlczAsJTEuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtaW5fZjMyIChmbG9hdDMyeDJfdCBhLCBmbG9hdDMyeDJfdCBiKQoreworICBmbG9hdDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbWlucCAlMC4ycywgJTEuMnMsICUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtaW5fczggKGludDh4OF90IGEsIGludDh4OF90IGIpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtaW5wICUwLjhiLCAlMS44YiwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtaW5fczE2IChpbnQxNng0X3QgYSwgaW50MTZ4NF90IGIpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWlucCAlMC40aCwgJTEuNGgsICUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWluX3MzMiAoaW50MzJ4Ml90IGEsIGludDMyeDJfdCBiKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgic21pbnAgJTAuMnMsICUxLjJzLCAlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbl91OCAodWludDh4OF90IGEsIHVpbnQ4eDhfdCBiKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1pbnAgJTAuOGIsICUxLjhiLCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtaW5fdTE2ICh1aW50MTZ4NF90IGEsIHVpbnQxNng0X3QgYikKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1bWlucCAlMC40aCwgJTEuNGgsICUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbl91MzIgKHVpbnQzMngyX3QgYSwgdWludDMyeDJfdCBiKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVtaW5wICUwLjJzLCAlMS4ycywgJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbm5tX2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYikKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1pbm5tcCAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWlubm1xX2YzMiAoZmxvYXQzMng0X3QgYSwgZmxvYXQzMng0X3QgYikKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1pbm5tcCAlMC40cywlMS40cywlMi40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWlubm1xX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYikKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1pbm5tcCAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbm5tcWRfZjY0IChmbG9hdDY0eDJfdCBhKQoreworICBmbG9hdDY0X3QgcmVzdWx0OworICBfX2FzbV9fICgiZm1pbm5tcCAlZDAsJTEuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWlubm1zX2YzMiAoZmxvYXQzMngyX3QgYSkKK3sKKyAgZmxvYXQzMl90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtaW5ubXAgJXMwLCUxLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWlucV9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJ4NF90IGIpCit7CisgIGZsb2F0MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtaW5wICUwLjRzLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbnFfZjY0IChmbG9hdDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiKQoreworICBmbG9hdDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmbWlucCAlMC4yZCwgJTEuMmQsICUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWlucV9zOCAoaW50OHgxNl90IGEsIGludDh4MTZfdCBiKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgic21pbnAgJTAuMTZiLCAlMS4xNmIsICUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbnFfczE2IChpbnQxNng4X3QgYSwgaW50MTZ4OF90IGIpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzbWlucCAlMC44aCwgJTEuOGgsICUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWlucV9zMzIgKGludDMyeDRfdCBhLCBpbnQzMng0X3QgYikKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNtaW5wICUwLjRzLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZwbWlucV91OCAodWludDh4MTZfdCBhLCB1aW50OHgxNl90IGIpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1pbnAgJTAuMTZiLCAlMS4xNmIsICUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtaW5xX3UxNiAodWludDE2eDhfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1pbnAgJTAuOGgsICUxLjhoLCAlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtaW5xX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidW1pbnAgJTAuNHMsICUxLjRzLCAlMi40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cG1pbnFkX2Y2NCAoZmxvYXQ2NHgyX3QgYSkKK3sKKyAgZmxvYXQ2NF90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtaW5wICVkMCwlMS4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnBtaW5zX2YzMiAoZmxvYXQzMngyX3QgYSkKK3sKKyAgZmxvYXQzMl90IHJlc3VsdDsKKyAgX19hc21fXyAoImZtaW5wICVzMCwlMS4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsaF9uX3MxNiAoaW50MTZ4NF90IGEsIGludDE2X3QgYikKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInNxZG11bGggJTAuNGgsJTEuNGgsJTIuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxoX25fczMyIChpbnQzMngyX3QgYSwgaW50MzJfdCBiKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgic3FkbXVsaCAlMC4ycywlMS4ycywlMi5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhxX25fczE2IChpbnQxNng4X3QgYSwgaW50MTZfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic3FkbXVsaCAlMC44aCwlMS44aCwlMi5oWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhxX25fczMyIChpbnQzMng0X3QgYSwgaW50MzJfdCBiKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic3FkbXVsaCAlMC40cywlMS40cywlMi5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bl9oaWdoX3MxNiAoaW50OHg4X3QgYSwgaW50MTZ4OF90IGIpCit7CisgIGludDh4MTZfdCByZXN1bHQgPSB2Y29tYmluZV9zOCAoYSwgdmNyZWF0ZV9zOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJzcXh0bjIgJTAuMTZiLCAlMS44aCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3ZuX2hpZ2hfczMyIChpbnQxNng0X3QgYSwgaW50MzJ4NF90IGIpCit7CisgIGludDE2eDhfdCByZXN1bHQgPSB2Y29tYmluZV9zMTYgKGEsIHZjcmVhdGVfczE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInNxeHRuMiAlMC44aCwgJTEuNHMiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bl9oaWdoX3M2NCAoaW50MzJ4Ml90IGEsIGludDY0eDJfdCBiKQoreworICBpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfczMyIChhLCB2Y3JlYXRlX3MzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJzcXh0bjIgJTAuNHMsICUxLjJkIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3ZuX2hpZ2hfdTE2ICh1aW50OHg4X3QgYSwgdWludDE2eDhfdCBiKQoreworICB1aW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3U4IChhLCB2Y3JlYXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInVxeHRuMiAlMC4xNmIsICUxLjhoIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3ZuX2hpZ2hfdTMyICh1aW50MTZ4NF90IGEsIHVpbnQzMng0X3QgYikKK3sKKyAgdWludDE2eDhfdCByZXN1bHQgPSB2Y29tYmluZV91MTYgKGEsIHZjcmVhdGVfdTE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInVxeHRuMiAlMC44aCwgJTEuNHMiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdm5faGlnaF91NjQgKHVpbnQzMngyX3QgYSwgdWludDY0eDJfdCBiKQoreworICB1aW50MzJ4NF90IHJlc3VsdCA9IHZjb21iaW5lX3UzMiAoYSwgdmNyZWF0ZV91MzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgidXF4dG4yICUwLjRzLCAlMS4yZCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92dW5faGlnaF9zMTYgKHVpbnQ4eDhfdCBhLCBpbnQxNng4X3QgYikKK3sKKyAgdWludDh4MTZfdCByZXN1bHQgPSB2Y29tYmluZV91OCAoYSwgdmNyZWF0ZV91OCAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJzcXh0dW4yICUwLjE2YiwgJTEuOGgiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdnVuX2hpZ2hfczMyICh1aW50MTZ4NF90IGEsIGludDMyeDRfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3UxNiAoYSwgdmNyZWF0ZV91MTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgic3F4dHVuMiAlMC44aCwgJTEuNHMiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdnVuX2hpZ2hfczY0ICh1aW50MzJ4Ml90IGEsIGludDY0eDJfdCBiKQoreworICB1aW50MzJ4NF90IHJlc3VsdCA9IHZjb21iaW5lX3UzMiAoYSwgdmNyZWF0ZV91MzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgic3F4dHVuMiAlMC40cywgJTEuMmQiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxoX25fczE2IChpbnQxNng0X3QgYSwgaW50MTZfdCBiKQoreworICBpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgic3FyZG11bGggJTAuNGgsJTEuNGgsJTIuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaF9uX3MzMiAoaW50MzJ4Ml90IGEsIGludDMyX3QgYikKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInNxcmRtdWxoICUwLjJzLCUxLjJzLCUyLnNbMF0iCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhxX25fczE2IChpbnQxNng4X3QgYSwgaW50MTZfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgic3FyZG11bGggJTAuOGgsJTEuOGgsJTIuaFswXSIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaHFfbl9zMzIgKGludDMyeDRfdCBhLCBpbnQzMl90IGIpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzcXJkbXVsaCAlMC40cywlMS40cywlMi5zWzBdIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3MxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHg4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3M4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3M4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNxcnNocm4yICUwLjE2YiwgJTEuOGgsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fczMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgcmVzdWx0ID0gdmNvbWJpbmVfczE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfczE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3Fyc2hybjIgJTAuOGgsICUxLjRzLCAjJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl9zNjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCByZXN1bHQgPSB2Y29tYmluZV9zMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV9zMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzcXJzaHJuMiAlMC40cywgJTEuMmQsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZxcnNocm5faGlnaF9uX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4MTZfdCByZXN1bHQgPSB2Y29tYmluZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVxcnNocm4yICUwLjE2YiwgJTEuOGgsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnFyc2hybl9oaWdoX25fdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidXFyc2hybjIgJTAuOGgsICUxLjRzLCAjJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cXJzaHJuX2hpZ2hfbl91NjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1cXJzaHJuMiAlMC40cywgJTEuMmQsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZxcnNocnVuX2hpZ2hfbl9zMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4MTZfdCByZXN1bHQgPSB2Y29tYmluZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNxcnNocnVuMiAlMC4xNmIsICUxLjhoLCAjJTIiICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnFyc2hydW5faGlnaF9uX3MzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3Fyc2hydW4yICUwLjhoLCAlMS40cywgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cXJzaHJ1bl9oaWdoX25fczY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzcXJzaHJ1bjIgJTAuNHMsICUxLjJkLCAjJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZxc2hybl9oaWdoX25fczE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHg4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3M4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3M4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNxc2hybjIgJTAuMTZiLCAlMS44aCwgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl9zMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgcmVzdWx0ID0gdmNvbWJpbmVfczE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfczE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3FzaHJuMiAlMC44aCwgJTEuNHMsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cXNocm5faGlnaF9uX3M2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCByZXN1bHQgPSB2Y29tYmluZV9zMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV9zMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzcXNocm4yICUwLjRzLCAlMS4yZCwgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZxc2hybl9oaWdoX25fdTE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4MTZfdCByZXN1bHQgPSB2Y29tYmluZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICBcCisgICAgICAgX19hc21fXyAoInVxc2hybjIgJTAuMTZiLCAlMS44aCwgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnFzaHJuX2hpZ2hfbl91MzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgidXFzaHJuMiAlMC44aCwgJTEuNHMsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cXNocm5faGlnaF9uX3U2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJ1cXNocm4yICUwLjRzLCAlMS4yZCwgIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZxc2hydW5faGlnaF9uX3MxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4MTZfdCByZXN1bHQgPSB2Y29tYmluZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNxc2hydW4yICUwLjE2YiwgJTEuOGgsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnFzaHJ1bl9oaWdoX25fczMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3FzaHJ1bjIgJTAuOGgsICUxLjRzLCAjJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cXNocnVuX2hpZ2hfbl9zNjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzcXNocnVuMiAlMC40cywgJTEuMmQsICMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJiaXRfczggKGludDh4OF90IGEpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJiaXQgJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyYml0X3U4ICh1aW50OHg4X3QgYSkKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJiaXQgJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyYml0cV9zOCAoaW50OHgxNl90IGEpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyYml0ICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmJpdHFfdTggKHVpbnQ4eDE2X3QgYSkKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyYml0ICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVjcGVfdTMyICh1aW50MzJ4Ml90IGEpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgidXJlY3BlICUwLjJzLCUxLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlY3BlcV91MzIgKHVpbnQzMng0X3QgYSkKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1cmVjcGUgJTAuNHMsJTEuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYxNl9wOCAocG9seTh4OF90IGEpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXYxNiAlMC44YiwlMS44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MTZfczggKGludDh4OF90IGEpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjE2ICUwLjhiLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MTZfdTggKHVpbnQ4eDhfdCBhKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MTYgJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MTZxX3A4IChwb2x5OHgxNl90IGEpCit7CisgIHBvbHk4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MTYgJTAuMTZiLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjE2cV9zOCAoaW50OHgxNl90IGEpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXYxNiAlMC4xNmIsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjE2cV91OCAodWludDh4MTZfdCBhKQoreworICB1aW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjE2ICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYzMl9wOCAocG9seTh4OF90IGEpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXYzMiAlMC44YiwlMS44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYzMl9wMTYgKHBvbHkxNng0X3QgYSkKK3sKKyAgcG9seTE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXYzMiAlMC40aCwlMS40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJfczggKGludDh4OF90IGEpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjMyICUwLjhiLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJfczE2IChpbnQxNng0X3QgYSkKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjMyICUwLjRoLCUxLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJfdTggKHVpbnQ4eDhfdCBhKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MzIgJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJfdTE2ICh1aW50MTZ4NF90IGEpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MzIgJTAuNGgsJTEuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJxX3A4IChwb2x5OHgxNl90IGEpCit7CisgIHBvbHk4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MzIgJTAuMTZiLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYzMnFfcDE2IChwb2x5MTZ4OF90IGEpCit7CisgIHBvbHkxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MzIgJTAuOGgsJTEuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYzMnFfczggKGludDh4MTZfdCBhKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MzIgJTAuMTZiLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjMycV9zMTYgKGludDE2eDhfdCBhKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MzIgJTAuOGgsJTEuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2MzJxX3U4ICh1aW50OHgxNl90IGEpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MzIgJTAuMTZiLCUxLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXYzMnFfdTE2ICh1aW50MTZ4OF90IGEpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2MzIgJTAuOGgsJTEuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjY0X2YzMiAoZmxvYXQzMngyX3QgYSkKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2NjQgJTAuMnMsJTEuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NF9wOCAocG9seTh4OF90IGEpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXY2NCAlMC44YiwlMS44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NF9wMTYgKHBvbHkxNng0X3QgYSkKK3sKKyAgcG9seTE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXY2NCAlMC40aCwlMS40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfczggKGludDh4OF90IGEpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjY0ICUwLjhiLCUxLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfczE2IChpbnQxNng0X3QgYSkKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjY0ICUwLjRoLCUxLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfczMyIChpbnQzMngyX3QgYSkKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjY0ICUwLjJzLCUxLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfdTggKHVpbnQ4eDhfdCBhKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2NjQgJTAuOGIsJTEuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfdTE2ICh1aW50MTZ4NF90IGEpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2NjQgJTAuNGgsJTEuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRfdTMyICh1aW50MzJ4Ml90IGEpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2NjQgJTAuMnMsJTEuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjY0cV9mMzIgKGZsb2F0MzJ4NF90IGEpCit7CisgIGZsb2F0MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjY0ICUwLjRzLCUxLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjY0cV9wOCAocG9seTh4MTZfdCBhKQoreworICBwb2x5OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjY0ICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRxX3AxNiAocG9seTE2eDhfdCBhKQoreworICBwb2x5MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjY0ICUwLjhoLCUxLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRxX3M4IChpbnQ4eDE2X3QgYSkKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjY0ICUwLjE2YiwlMS4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NHFfczE2IChpbnQxNng4X3QgYSkKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJldjY0ICUwLjhoLCUxLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmV2NjRxX3MzMiAoaW50MzJ4NF90IGEpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXY2NCAlMC40cywlMS40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NHFfdTggKHVpbnQ4eDE2X3QgYSkKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXY2NCAlMC4xNmIsJTEuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJldjY0cV91MTYgKHVpbnQxNng4X3QgYSkKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyZXY2NCAlMC44aCwlMS44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZXY2NHFfdTMyICh1aW50MzJ4NF90IGEpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgicmV2NjQgJTAuNHMsJTEuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIHZyc2hybl9oaWdoX25fczE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHg4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3M4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3M4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInJzaHJuMiAlMC4xNmIsJTEuOGgsIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl9zMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgcmVzdWx0ID0gdmNvbWJpbmVfczE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfczE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgicnNocm4yICUwLjhoLCUxLjRzLCMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cnNocm5faGlnaF9uX3M2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCByZXN1bHQgPSB2Y29tYmluZV9zMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV9zMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJyc2hybjIgJTAuNHMsJTEuMmQsIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZyc2hybl9oaWdoX25fdTE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4MTZfdCByZXN1bHQgPSB2Y29tYmluZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3U4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInJzaHJuMiAlMC4xNmIsJTEuOGgsIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnJzaHJuX2hpZ2hfbl91MzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgicnNocm4yICUwLjhoLCUxLjRzLCMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cnNocm5faGlnaF9uX3U2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV91MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJyc2hybjIgJTAuNHMsJTEuMmQsIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZyc2hybl9uX3MxNihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHg4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInJzaHJuICUwLjhiLCUxLjhoLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnJzaHJuX25fczMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgicnNocm4gJTAuNGgsJTEuNHMsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cnNocm5fbl9zNjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJyc2hybiAlMC4ycywlMS4yZCwlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZyc2hybl9uX3UxNihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInJzaHJuICUwLjhiLCUxLjhoLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnJzaHJuX25fdTMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgicnNocm4gJTAuNGgsJTEuNHMsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2cnNocm5fbl91NjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJyc2hybiAlMC4ycywlMS4yZCwlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcXJ0ZV9mMzIgKGZsb2F0MzJ4Ml90IGEpCit7CisgIGZsb2F0MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZyc3FydGUgJTAuMnMsJTEuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcXJ0ZV9mNjQgKGZsb2F0NjR4Ml90IGEpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZyc3FydGUgJTAuMmQsJTEuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNxcnRlX3UzMiAodWludDMyeDJfdCBhKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInVyc3FydGUgJTAuMnMsJTEuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3FydGVkX2Y2NCAoZmxvYXQ2NF90IGEpCit7CisgIGZsb2F0NjRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmcnNxcnRlICVkMCwlZDEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcXJ0ZXFfZjMyIChmbG9hdDMyeDRfdCBhKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmcnNxcnRlICUwLjRzLCUxLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3FydGVxX2Y2NCAoZmxvYXQ2NHgyX3QgYSkKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZnJzcXJ0ZSAlMC4yZCwlMS4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3FydGVxX3UzMiAodWludDMyeDRfdCBhKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVyc3FydGUgJTAuNHMsJTEuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3FydGVzX2YzMiAoZmxvYXQzMl90IGEpCit7CisgIGZsb2F0MzJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmcnNxcnRlICVzMCwlczEiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcXJ0c19mMzIgKGZsb2F0MzJ4Ml90IGEsIGZsb2F0MzJ4Ml90IGIpCit7CisgIGZsb2F0MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoImZyc3FydHMgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcXJ0c2RfZjY0IChmbG9hdDY0X3QgYSwgZmxvYXQ2NF90IGIpCit7CisgIGZsb2F0NjRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmcnNxcnRzICVkMCwlZDEsJWQyIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcXJ0c3FfZjMyIChmbG9hdDMyeDRfdCBhLCBmbG9hdDMyeDRfdCBiKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmcnNxcnRzICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcXJ0c3FfZjY0IChmbG9hdDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiKQoreworICBmbG9hdDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmcnNxcnRzICUwLjJkLCUxLjJkLCUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3FydHNzX2YzMiAoZmxvYXQzMl90IGEsIGZsb2F0MzJfdCBiKQoreworICBmbG9hdDMyX3QgcmVzdWx0OworICBfX2FzbV9fICgiZnJzcXJ0cyAlczAsJXMxLCVzMiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3J0c3FfZjY0IChmbG9hdDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiKQoreworICBmbG9hdDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJmcnNxcnRzICUwLjJkLCUxLjJkLCUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5faGlnaF9zMTYgKGludDh4OF90IGEsIGludDE2eDhfdCBiLCBpbnQxNng4X3QgYykKK3sKKyAgaW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3M4IChhLCB2Y3JlYXRlX3M4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInJzdWJobjIgJTAuMTZiLCAlMS44aCwgJTIuOGgiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzdWJobl9oaWdoX3MzMiAoaW50MTZ4NF90IGEsIGludDMyeDRfdCBiLCBpbnQzMng0X3QgYykKK3sKKyAgaW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3MxNiAoYSwgdmNyZWF0ZV9zMTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgicnN1YmhuMiAlMC44aCwgJTEuNHMsICUyLjRzIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5faGlnaF9zNjQgKGludDMyeDJfdCBhLCBpbnQ2NHgyX3QgYiwgaW50NjR4Ml90IGMpCit7CisgIGludDMyeDRfdCByZXN1bHQgPSB2Y29tYmluZV9zMzIgKGEsIHZjcmVhdGVfczMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInJzdWJobjIgJTAuNHMsICUxLjJkLCAlMi4yZCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzdWJobl9oaWdoX3UxNiAodWludDh4OF90IGEsIHVpbnQxNng4X3QgYiwgdWludDE2eDhfdCBjKQoreworICB1aW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3U4IChhLCB2Y3JlYXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInJzdWJobjIgJTAuMTZiLCAlMS44aCwgJTIuOGgiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5faGlnaF91MzIgKHVpbnQxNng0X3QgYSwgdWludDMyeDRfdCBiLCB1aW50MzJ4NF90IGMpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTE2IChhLCB2Y3JlYXRlX3UxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJyc3ViaG4yICUwLjhoLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5faGlnaF91NjQgKHVpbnQzMngyX3QgYSwgdWludDY0eDJfdCBiLCB1aW50NjR4Ml90IGMpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTMyIChhLCB2Y3JlYXRlX3UzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJyc3ViaG4yICUwLjRzLCAlMS4yZCwgJTIuMmQiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnN1YmhuX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyc3ViaG4gJTAuOGIsICUxLjhoLCAlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnN1YmhuX3MzMiAoaW50MzJ4NF90IGEsIGludDMyeDRfdCBiKQoreworICBpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgicnN1YmhuICUwLjRoLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzdWJobl9zNjQgKGludDY0eDJfdCBhLCBpbnQ2NHgyX3QgYikKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInJzdWJobiAlMC4ycywgJTEuMmQsICUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5fdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNng4X3QgYikKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInJzdWJobiAlMC44YiwgJTEuOGgsICUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnN1YmhuX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgicnN1YmhuICUwLjRoLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3ViaG5fdTY0ICh1aW50NjR4Ml90IGEsIHVpbnQ2NHgyX3QgYikKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJyc3ViaG4gJTAuMnMsICUxLjJkLCAlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2RlZmluZSB2c2V0X2xhbmVfZjMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuc1slM10sICV3MSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgIjAiKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzZXRfbGFuZV9mNjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgxX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgxX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5kWyUzXSwgJXgxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAiMCIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNldF9sYW5lX3A4KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHg4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHg4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmJbJTNdLCAldzEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICIwIihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2V0X2xhbmVfcDE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNl90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuaFslM10sICV3MSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgIjAiKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzZXRfbGFuZV9zOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHg4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHg4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5iWyUzXSwgJXcxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAiMCIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNldF9sYW5lX3MxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNl90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmhbJTNdLCAldzEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICIwIihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2V0X2xhbmVfczMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuc1slM10sICV3MSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgIjAiKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzZXRfbGFuZV9zNjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4MV90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4MV90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5kWyUzXSwgJXgxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAiMCIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNldF9sYW5lX3U4KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OHg4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OHg4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmJbJTNdLCAldzEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICIwIihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2V0X2xhbmVfdTE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNl90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng0X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuaFslM10sICV3MSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgIjAiKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzZXRfbGFuZV91MzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDJfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5zWyUzXSwgJXcxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAiMCIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNldF9sYW5lX3U2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4MV90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4MV90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmRbJTNdLCAleDEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICIwIihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2V0cV9sYW5lX2YzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuc1slM10sICV3MSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgIjAiKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzZXRxX2xhbmVfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5kWyUzXSwgJXgxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAiMCIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNldHFfbGFuZV9wOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHgxNl90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHgxNl90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmJbJTNdLCAldzEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICIwIihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2V0cV9sYW5lX3AxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNl90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuaFslM10sICV3MSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgIjAiKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzZXRxX2xhbmVfczgoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHgxNl90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHgxNl90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5iWyUzXSwgJXcxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAiMCIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNldHFfbGFuZV9zMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNl90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmhbJTNdLCAldzEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICIwIihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2V0cV9sYW5lX3MzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuc1slM10sICV3MSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgIjAiKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzZXRxX2xhbmVfczY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5kWyUzXSwgJXgxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAiMCIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNldHFfbGFuZV91OChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OHgxNl90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OHgxNl90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmJbJTNdLCAldzEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICIwIihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2V0cV9sYW5lX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNl90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJpbnMgJTAuaFslM10sICV3MSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgIjAiKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzZXRxX2xhbmVfdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoImlucyAlMC5zWyUzXSwgJXcxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAiMCIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNldHFfbGFuZV91NjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgiaW5zICUwLmRbJTNdLCAleDEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICIwIihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2hybl9oaWdoX25fczE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4MTZfdCByZXN1bHQgPSB2Y29tYmluZV9zOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV9zOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzaHJuMiAlMC4xNmIsJTEuOGgsIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl9zMzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3MxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3MxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNocm4yICUwLjhoLCUxLjRzLCMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNocm5faGlnaF9uX3M2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMng0X3QgcmVzdWx0ID0gdmNvbWJpbmVfczMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfczMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic2hybjIgJTAuNHMsJTEuMmQsIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2hybl9oaWdoX25fdTE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDE2X3QgcmVzdWx0ID0gdmNvbWJpbmVfdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhXywgdmNyZWF0ZV91OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7ICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzaHJuMiAlMC4xNmIsJTEuOGgsIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIit3IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzaHJuX2hpZ2hfbl91MzIoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDhfdCByZXN1bHQgPSB2Y29tYmluZV91MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFfLCB2Y3JlYXRlX3UxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNocm4yICUwLjhoLCUxLjRzLCMlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNocm5faGlnaF9uX3U2NChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4NF90IHJlc3VsdCA9IHZjb21iaW5lX3UzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYV8sIHZjcmVhdGVfdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOyAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic2hybjIgJTAuNHMsJTEuMmQsIyUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIrdyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2hybl9uX3MxNihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzaHJuICUwLjhiLCUxLjhoLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzaHJuX25fczMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MzJ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNocm4gJTAuNGgsJTEuNHMsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNocm5fbl9zNjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQ2NHgyX3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic2hybiAlMC4ycywlMS4yZCwlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2hybl9uX3UxNihhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQ4eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzaHJuICUwLjhiLCUxLjhoLCUyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInciKGFfKSwgImkiKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzaHJuX25fdTMyKGEsIGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDE2eDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNocm4gJTAuNGgsJTEuNHMsJTIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAidyIoYV8pLCAiaSIoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNocm5fbl91NjQoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MzJ4Ml90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic2hybiAlMC4ycywlMS4yZCwlMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJ3IihhXyksICJpIihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2xpX25fcDgoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbGkgJTAuOGIsJTIuOGIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzbGlfbl9wMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDRfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDRfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNsaSAlMC40aCwlMi40aCwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNsaXFfbl9wOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHgxNl90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHgxNl90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHgxNl90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic2xpICUwLjE2YiwlMi4xNmIsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c2xpcV9uX3AxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng4X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng4X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzbGkgJTAuOGgsJTIuOGgsJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzcmlfbl9wOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4OF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4OF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNyaSAlMC44YiwlMi44YiwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnNyaV9uX3AxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4NF90IGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4NF90IHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3JpICUwLjRoLCUyLjRoLCUzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICI9dyIocmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICIwIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c3JpcV9uX3A4KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHk4eDE2X3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzcmkgJTAuMTZiLCUyLjE2YiwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj13IihyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIjAiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzcmlxX25fcDE2KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTE2eDhfdCByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInNyaSAlMC44aCwlMi44aCwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiPXciKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiMCIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnN0MV9sYW5lX2YzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyeDJfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBmbG9hdDMyX3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3QxIHslMS5zfVslMl0sWyUwXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c3QxX2xhbmVfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjR4MV90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0NjRfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzdDEgeyUxLmR9WyUyXSxbJTBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzdDFfbGFuZV9wOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seTh4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcG9seThfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInN0MSB7JTEuYn1bJTJdLFslMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnN0MV9sYW5lX3AxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3QxIHslMS5ofVslMl0sWyUwXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c3QxX2xhbmVfczgoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDh4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDhfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzdDEgeyUxLmJ9WyUyXSxbJTBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzdDFfbGFuZV9zMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInN0MSB7JTEuaH1bJTJdLFslMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnN0MV9sYW5lX3MzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQzMl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3QxIHslMS5zfVslMl0sWyUwXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c3QxX2xhbmVfczY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0eDFfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDY0X3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzdDEgeyUxLmR9WyUyXSxbJTBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzdDFfbGFuZV91OChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDh4OF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDhfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInN0MSB7JTEuYn1bJTJdLFslMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnN0MV9sYW5lX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50MTZfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3QxIHslMS5ofVslMl0sWyUwXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c3QxX2xhbmVfdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMngyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQzMl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzdDEgeyUxLnN9WyUyXSxbJTBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzdDFfbGFuZV91NjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0eDFfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDY0X3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInN0MSB7JTEuZH1bJTJdLFslMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKworI2RlZmluZSB2c3QxcV9sYW5lX2YzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJ4NF90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZsb2F0MzJfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzdDEgeyUxLnN9WyUyXSxbJTBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzdDFxX2xhbmVfZjY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NHgyX3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZmxvYXQ2NF90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInN0MSB7JTEuZH1bJTJdLFslMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnN0MXFfbGFuZV9wOChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OHgxNl90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwb2x5OF90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3QxIHslMS5ifVslMl0sWyUwXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c3QxcV9sYW5lX3AxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHBvbHkxNl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzdDEgeyUxLmh9WyUyXSxbJTBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzdDFxX2xhbmVfczgoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OHgxNl90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50OF90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInN0MSB7JTEuYn1bJTJdLFslMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnN0MXFfbGFuZV9zMTYoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpbnQxNl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3QxIHslMS5ofVslMl0sWyUwXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c3QxcV9sYW5lX3MzMihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGludDMyX3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzdDEgeyUxLnN9WyUyXSxbJTBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzdDFxX2xhbmVfczY0KGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjR4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50NjRfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInN0MSB7JTEuZH1bJTJdLFslMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnN0MXFfbGFuZV91OChhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OHgxNl90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50OF90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3QxIHslMS5ifVslMl0sWyUwXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworI2RlZmluZSB2c3QxcV9sYW5lX3UxNihhLCBiLCBjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2V4dGVuc2lvbl9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNng4X3QgYl8gPSAoYik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVpbnQxNl90ICogYV8gPSAoYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIF9fYXNtX18gKCJzdDEgeyUxLmh9WyUyXSxbJTBdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogInIiKGFfKSwgInciKGJfKSwgImkiKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9KQorCisjZGVmaW5lIHZzdDFxX2xhbmVfdTMyKGEsIGIsIGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fZXh0ZW5zaW9uX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyeDRfdCBiXyA9IChiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWludDMyX3QgKiBhXyA9IChhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgX19hc21fXyAoInN0MSB7JTEuc31bJTJdLFslMF0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAiciIoYV8pLCAidyIoYl8pLCAiaSIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIH0pCisKKyNkZWZpbmUgdnN0MXFfbGFuZV91NjQoYSwgYiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19leHRlbnNpb25fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjR4Ml90IGJfID0gKGIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1aW50NjRfdCAqIGFfID0gKGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2FzbV9fICgic3QxIHslMS5kfVslMl0sWyUwXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJyIihhXyksICJ3IihiXyksICJpIihjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3ViaG5faGlnaF9zMTYgKGludDh4OF90IGEsIGludDE2eDhfdCBiLCBpbnQxNng4X3QgYykKK3sKKyAgaW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3M4IChhLCB2Y3JlYXRlX3M4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInN1YmhuMiAlMC4xNmIsICUxLjhoLCAlMi44aCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3ViaG5faGlnaF9zMzIgKGludDE2eDRfdCBhLCBpbnQzMng0X3QgYiwgaW50MzJ4NF90IGMpCit7CisgIGludDE2eDhfdCByZXN1bHQgPSB2Y29tYmluZV9zMTYgKGEsIHZjcmVhdGVfczE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInN1YmhuMiAlMC44aCwgJTEuNHMsICUyLjRzIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl9oaWdoX3M2NCAoaW50MzJ4Ml90IGEsIGludDY0eDJfdCBiLCBpbnQ2NHgyX3QgYykKK3sKKyAgaW50MzJ4NF90IHJlc3VsdCA9IHZjb21iaW5lX3MzMiAoYSwgdmNyZWF0ZV9zMzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgic3ViaG4yICUwLjRzLCAlMS4yZCwgJTIuMmQiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl9oaWdoX3UxNiAodWludDh4OF90IGEsIHVpbnQxNng4X3QgYiwgdWludDE2eDhfdCBjKQoreworICB1aW50OHgxNl90IHJlc3VsdCA9IHZjb21iaW5lX3U4IChhLCB2Y3JlYXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInN1YmhuMiAlMC4xNmIsICUxLjhoLCAlMi44aCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYiksICJ3IihjKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmhuX2hpZ2hfdTMyICh1aW50MTZ4NF90IGEsIHVpbnQzMng0X3QgYiwgdWludDMyeDRfdCBjKQoreworICB1aW50MTZ4OF90IHJlc3VsdCA9IHZjb21iaW5lX3UxNiAoYSwgdmNyZWF0ZV91MTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgic3ViaG4yICUwLjhoLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGIpLCAidyIoYykKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl9oaWdoX3U2NCAodWludDMyeDJfdCBhLCB1aW50NjR4Ml90IGIsIHVpbnQ2NHgyX3QgYykKK3sKKyAgdWludDMyeDRfdCByZXN1bHQgPSB2Y29tYmluZV91MzIgKGEsIHZjcmVhdGVfdTMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInN1YmhuMiAlMC40cywgJTEuMmQsICUyLjJkIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihiKSwgInciKGMpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmhuX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzdWJobiAlMC44YiwgJTEuOGgsICUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl9zMzIgKGludDMyeDRfdCBhLCBpbnQzMng0X3QgYikKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInN1YmhuICUwLjRoLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmhuX3M2NCAoaW50NjR4Ml90IGEsIGludDY0eDJfdCBiKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgic3ViaG4gJTAuMnMsICUxLjJkLCAlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3ViaG5fdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNng4X3QgYikKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInN1YmhuICUwLjhiLCAlMS44aCwgJTIuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl91MzIgKHVpbnQzMng0X3QgYSwgdWludDMyeDRfdCBiKQoreworICB1aW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInN1YmhuICUwLjRoLCAlMS40cywgJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdWJobl91NjQgKHVpbnQ2NHgyX3QgYSwgdWludDY0eDJfdCBiKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInN1YmhuICUwLjJzLCAlMS4yZCwgJTIuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMV9mMzIgKGZsb2F0MzJ4Ml90IGEsIGZsb2F0MzJ4Ml90IGIpCit7CisgIGZsb2F0MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjEgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFfcDggKHBvbHk4eDhfdCBhLCBwb2x5OHg4X3QgYikKK3sKKyAgcG9seTh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjEgJTAuOGIsJTEuOGIsJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4xX3AxNiAocG9seTE2eDRfdCBhLCBwb2x5MTZ4NF90IGIpCit7CisgIHBvbHkxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC40aCwlMS40aCwlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4xX3M4IChpbnQ4eDhfdCBhLCBpbnQ4eDhfdCBiKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4xICUwLjhiLCUxLjhiLCUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4xX3MxNiAoaW50MTZ4NF90IGEsIGludDE2eDRfdCBiKQoreworICBpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC40aCwlMS40aCwlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMV9zMzIgKGludDMyeDJfdCBhLCBpbnQzMngyX3QgYikKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjEgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFfdTggKHVpbnQ4eDhfdCBhLCB1aW50OHg4X3QgYikKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjEgJTAuOGIsJTEuOGIsJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4xX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC40aCwlMS40aCwlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFfdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYikKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4xICUwLjJzLCUxLjJzLCUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFxX2YzMiAoZmxvYXQzMng0X3QgYSwgZmxvYXQzMng0X3QgYikKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC40cywlMS40cywlMi40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4xcV9mNjQgKGZsb2F0NjR4Ml90IGEsIGZsb2F0NjR4Ml90IGIpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjEgJTAuMmQsJTEuMmQsJTIuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4xcV9wOCAocG9seTh4MTZfdCBhLCBwb2x5OHgxNl90IGIpCit7CisgIHBvbHk4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC4xNmIsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFxX3AxNiAocG9seTE2eDhfdCBhLCBwb2x5MTZ4OF90IGIpCit7CisgIHBvbHkxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC44aCwlMS44aCwlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMXFfczggKGludDh4MTZfdCBhLCBpbnQ4eDE2X3QgYikKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjEgJTAuMTZiLCUxLjE2YiwlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC44aCwlMS44aCwlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMXFfczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4xICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4xcV9zNjQgKGludDY0eDJfdCBhLCBpbnQ2NHgyX3QgYikKK3sKKyAgaW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjEgJTAuMmQsJTEuMmQsJTIuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4xcV91OCAodWludDh4MTZfdCBhLCB1aW50OHgxNl90IGIpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC4xNmIsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFxX3UxNiAodWludDE2eDhfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC44aCwlMS44aCwlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFxX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC40cywlMS40cywlMi40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjFxX3U2NCAodWludDY0eDJfdCBhLCB1aW50NjR4Ml90IGIpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMSAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4yX2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYikKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMiAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMl9wOCAocG9seTh4OF90IGEsIHBvbHk4eDhfdCBiKQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMiAlMC44YiwlMS44YiwlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjJfcDE2IChwb2x5MTZ4NF90IGEsIHBvbHkxNng0X3QgYikKK3sKKyAgcG9seTE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjJfczggKGludDh4OF90IGEsIGludDh4OF90IGIpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjIgJTAuOGIsJTEuOGIsJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjJfczE2IChpbnQxNng0X3QgYSwgaW50MTZ4NF90IGIpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4yX3MzMiAoaW50MzJ4Ml90IGEsIGludDMyeDJfdCBiKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMiAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMl91OCAodWludDh4OF90IGEsIHVpbnQ4eDhfdCBiKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMiAlMC44YiwlMS44YiwlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjJfdTE2ICh1aW50MTZ4NF90IGEsIHVpbnQxNng0X3QgYikKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMl91MzIgKHVpbnQzMngyX3QgYSwgdWludDMyeDJfdCBiKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjIgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMnFfZjMyIChmbG9hdDMyeDRfdCBhLCBmbG9hdDMyeDRfdCBiKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjJxX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYikKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMiAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjJxX3A4IChwb2x5OHgxNl90IGEsIHBvbHk4eDE2X3QgYikKK3sKKyAgcG9seTh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjE2YiwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMnFfcDE2IChwb2x5MTZ4OF90IGEsIHBvbHkxNng4X3QgYikKK3sKKyAgcG9seTE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4ycV9zOCAoaW50OHgxNl90IGEsIGludDh4MTZfdCBiKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMiAlMC4xNmIsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMnFfczE2IChpbnQxNng4X3QgYSwgaW50MTZ4OF90IGIpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm4ycV9zMzIgKGludDMyeDRfdCBhLCBpbnQzMng0X3QgYikKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInRybjIgJTAuNHMsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjJxX3M2NCAoaW50NjR4Ml90IGEsIGludDY0eDJfdCBiKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidHJuMiAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybjJxX3U4ICh1aW50OHgxNl90IGEsIHVpbnQ4eDE2X3QgYikKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjE2YiwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMnFfdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNng4X3QgYikKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMnFfdTMyICh1aW50MzJ4NF90IGEsIHVpbnQzMng0X3QgYikKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuMnFfdTY0ICh1aW50NjR4Ml90IGEsIHVpbnQ2NHgyX3QgYikKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0cm4yICUwLjJkLCUxLjJkLCUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RfcDggKHBvbHk4eDhfdCBhLCBwb2x5OHg4X3QgYikKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImNtdHN0ICUwLjhiLCAlMS44YiwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RfcDE2IChwb2x5MTZ4NF90IGEsIHBvbHkxNng0X3QgYikKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbXRzdCAlMC40aCwgJTEuNGgsICUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHN0cV9wOCAocG9seTh4MTZfdCBhLCBwb2x5OHgxNl90IGIpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiY210c3QgJTAuMTZiLCAlMS4xNmIsICUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdHFfcDE2IChwb2x5MTZ4OF90IGEsIHBvbHkxNng4X3QgYikKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJjbXRzdCAlMC44aCwgJTEuOGgsICUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAxX2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYikKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMSAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMV9wOCAocG9seTh4OF90IGEsIHBvbHk4eDhfdCBiKQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMSAlMC44YiwlMS44YiwlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDFfcDE2IChwb2x5MTZ4NF90IGEsIHBvbHkxNng0X3QgYikKK3sKKyAgcG9seTE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDFfczggKGludDh4OF90IGEsIGludDh4OF90IGIpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDEgJTAuOGIsJTEuOGIsJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDFfczE2IChpbnQxNng0X3QgYSwgaW50MTZ4NF90IGIpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAxX3MzMiAoaW50MzJ4Ml90IGEsIGludDMyeDJfdCBiKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMSAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMV91OCAodWludDh4OF90IGEsIHVpbnQ4eDhfdCBiKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMSAlMC44YiwlMS44YiwlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDFfdTE2ICh1aW50MTZ4NF90IGEsIHVpbnQxNng0X3QgYikKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMV91MzIgKHVpbnQzMngyX3QgYSwgdWludDMyeDJfdCBiKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDEgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMXFfZjMyIChmbG9hdDMyeDRfdCBhLCBmbG9hdDMyeDRfdCBiKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDFxX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYikKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMSAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDFxX3A4IChwb2x5OHgxNl90IGEsIHBvbHk4eDE2X3QgYikKK3sKKyAgcG9seTh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjE2YiwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMXFfcDE2IChwb2x5MTZ4OF90IGEsIHBvbHkxNng4X3QgYikKK3sKKyAgcG9seTE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAxcV9zOCAoaW50OHgxNl90IGEsIGludDh4MTZfdCBiKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMSAlMC4xNmIsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMXFfczE2IChpbnQxNng4X3QgYSwgaW50MTZ4OF90IGIpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAxcV9zMzIgKGludDMyeDRfdCBhLCBpbnQzMng0X3QgYikKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDEgJTAuNHMsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDFxX3M2NCAoaW50NjR4Ml90IGEsIGludDY0eDJfdCBiKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMSAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDFxX3U4ICh1aW50OHgxNl90IGEsIHVpbnQ4eDE2X3QgYikKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjE2YiwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMXFfdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNng4X3QgYikKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMXFfdTMyICh1aW50MzJ4NF90IGEsIHVpbnQzMng0X3QgYikKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMXFfdTY0ICh1aW50NjR4Ml90IGEsIHVpbnQ2NHgyX3QgYikKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAxICUwLjJkLCUxLjJkLCUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDJfZjMyIChmbG9hdDMyeDJfdCBhLCBmbG9hdDMyeDJfdCBiKQoreworICBmbG9hdDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAyICUwLjJzLCUxLjJzLCUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAyX3A4IChwb2x5OHg4X3QgYSwgcG9seTh4OF90IGIpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAyICUwLjhiLCUxLjhiLCUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMl9wMTYgKHBvbHkxNng0X3QgYSwgcG9seTE2eDRfdCBiKQoreworICBwb2x5MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuNGgsJTEuNGgsJTIuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMl9zOCAoaW50OHg4X3QgYSwgaW50OHg4X3QgYikKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMiAlMC44YiwlMS44YiwlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMl9zMTYgKGludDE2eDRfdCBhLCBpbnQxNng0X3QgYikKK3sKKyAgaW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuNGgsJTEuNGgsJTIuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDJfczMyIChpbnQzMngyX3QgYSwgaW50MzJ4Ml90IGIpCit7CisgIGludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAyICUwLjJzLCUxLjJzLCUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAyX3U4ICh1aW50OHg4X3QgYSwgdWludDh4OF90IGIpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAyICUwLjhiLCUxLjhiLCUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMl91MTYgKHVpbnQxNng0X3QgYSwgdWludDE2eDRfdCBiKQoreworICB1aW50MTZ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuNGgsJTEuNGgsJTIuNGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAyX3UzMiAodWludDMyeDJfdCBhLCB1aW50MzJ4Ml90IGIpCit7CisgIHVpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMiAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAycV9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJ4NF90IGIpCit7CisgIGZsb2F0MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuNHMsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMnFfZjY0IChmbG9hdDY0eDJfdCBhLCBmbG9hdDY0eDJfdCBiKQoreworICBmbG9hdDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAyICUwLjJkLCUxLjJkLCUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMnFfcDggKHBvbHk4eDE2X3QgYSwgcG9seTh4MTZfdCBiKQoreworICBwb2x5OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuMTZiLCUxLjE2YiwlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAycV9wMTYgKHBvbHkxNng4X3QgYSwgcG9seTE2eDhfdCBiKQoreworICBwb2x5MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuOGgsJTEuOGgsJTIuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDJxX3M4IChpbnQ4eDE2X3QgYSwgaW50OHgxNl90IGIpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAyICUwLjE2YiwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAycV9zMTYgKGludDE2eDhfdCBhLCBpbnQxNng4X3QgYikKK3sKKyAgaW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuOGgsJTEuOGgsJTIuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnV6cDJxX3MzMiAoaW50MzJ4NF90IGEsIGludDMyeDRfdCBiKQoreworICBpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgidXpwMiAlMC40cywlMS40cywlMi40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMnFfczY0IChpbnQ2NHgyX3QgYSwgaW50NjR4Ml90IGIpCit7CisgIGludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ1enAyICUwLjJkLCUxLjJkLCUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXpwMnFfdTggKHVpbnQ4eDE2X3QgYSwgdWludDh4MTZfdCBiKQoreworICB1aW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuMTZiLCUxLjE2YiwlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAycV91MTYgKHVpbnQxNng4X3QgYSwgdWludDE2eDhfdCBiKQoreworICB1aW50MTZ4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuOGgsJTEuOGgsJTIuOGgiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAycV91MzIgKHVpbnQzMng0X3QgYSwgdWludDMyeDRfdCBiKQoreworICB1aW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuNHMsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1enAycV91NjQgKHVpbnQ2NHgyX3QgYSwgdWludDY0eDJfdCBiKQoreworICB1aW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInV6cDIgJTAuMmQsJTEuMmQsJTIuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMV9mMzIgKGZsb2F0MzJ4Ml90IGEsIGZsb2F0MzJ4Ml90IGIpCit7CisgIGZsb2F0MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDEgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFfcDggKHBvbHk4eDhfdCBhLCBwb2x5OHg4X3QgYikKK3sKKyAgcG9seTh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDEgJTAuOGIsJTEuOGIsJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAxX3AxNiAocG9seTE2eDRfdCBhLCBwb2x5MTZ4NF90IGIpCit7CisgIHBvbHkxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC40aCwlMS40aCwlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAxX3M4IChpbnQ4eDhfdCBhLCBpbnQ4eDhfdCBiKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAxICUwLjhiLCUxLjhiLCUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAxX3MxNiAoaW50MTZ4NF90IGEsIGludDE2eDRfdCBiKQoreworICBpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC40aCwlMS40aCwlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMV9zMzIgKGludDMyeDJfdCBhLCBpbnQzMngyX3QgYikKK3sKKyAgaW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDEgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFfdTggKHVpbnQ4eDhfdCBhLCB1aW50OHg4X3QgYikKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDEgJTAuOGIsJTEuOGIsJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAxX3UxNiAodWludDE2eDRfdCBhLCB1aW50MTZ4NF90IGIpCit7CisgIHVpbnQxNng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC40aCwlMS40aCwlMi40aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFfdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYikKK3sKKyAgdWludDMyeDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAxICUwLjJzLCUxLjJzLCUyLjJzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFxX2YzMiAoZmxvYXQzMng0X3QgYSwgZmxvYXQzMng0X3QgYikKK3sKKyAgZmxvYXQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC40cywlMS40cywlMi40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAxcV9mNjQgKGZsb2F0NjR4Ml90IGEsIGZsb2F0NjR4Ml90IGIpCit7CisgIGZsb2F0NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDEgJTAuMmQsJTEuMmQsJTIuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAxcV9wOCAocG9seTh4MTZfdCBhLCBwb2x5OHgxNl90IGIpCit7CisgIHBvbHk4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC4xNmIsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFxX3AxNiAocG9seTE2eDhfdCBhLCBwb2x5MTZ4OF90IGIpCit7CisgIHBvbHkxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC44aCwlMS44aCwlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMXFfczggKGludDh4MTZfdCBhLCBpbnQ4eDE2X3QgYikKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDEgJTAuMTZiLCUxLjE2YiwlMi4xNmIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFxX3MxNiAoaW50MTZ4OF90IGEsIGludDE2eDhfdCBiKQoreworICBpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC44aCwlMS44aCwlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMXFfczMyIChpbnQzMng0X3QgYSwgaW50MzJ4NF90IGIpCit7CisgIGludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAxICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAxcV9zNjQgKGludDY0eDJfdCBhLCBpbnQ2NHgyX3QgYikKK3sKKyAgaW50NjR4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDEgJTAuMmQsJTEuMmQsJTIuMmQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAxcV91OCAodWludDh4MTZfdCBhLCB1aW50OHgxNl90IGIpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC4xNmIsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFxX3UxNiAodWludDE2eDhfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHVpbnQxNng4X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC44aCwlMS44aCwlMi44aCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFxX3UzMiAodWludDMyeDRfdCBhLCB1aW50MzJ4NF90IGIpCit7CisgIHVpbnQzMng0X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC40cywlMS40cywlMi40cyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDFxX3U2NCAodWludDY0eDJfdCBhLCB1aW50NjR4Ml90IGIpCit7CisgIHVpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMSAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAyX2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYikKK3sKKyAgZmxvYXQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMiAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMl9wOCAocG9seTh4OF90IGEsIHBvbHk4eDhfdCBiKQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMiAlMC44YiwlMS44YiwlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDJfcDE2IChwb2x5MTZ4NF90IGEsIHBvbHkxNng0X3QgYikKK3sKKyAgcG9seTE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDJfczggKGludDh4OF90IGEsIGludDh4OF90IGIpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDIgJTAuOGIsJTEuOGIsJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDJfczE2IChpbnQxNng0X3QgYSwgaW50MTZ4NF90IGIpCit7CisgIGludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAyX3MzMiAoaW50MzJ4Ml90IGEsIGludDMyeDJfdCBiKQoreworICBpbnQzMngyX3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMiAlMC4ycywlMS4ycywlMi4ycyIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMl91OCAodWludDh4OF90IGEsIHVpbnQ4eDhfdCBiKQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMiAlMC44YiwlMS44YiwlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDJfdTE2ICh1aW50MTZ4NF90IGEsIHVpbnQxNng0X3QgYikKK3sKKyAgdWludDE2eDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjRoLCUxLjRoLCUyLjRoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMl91MzIgKHVpbnQzMngyX3QgYSwgdWludDMyeDJfdCBiKQoreworICB1aW50MzJ4Ml90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDIgJTAuMnMsJTEuMnMsJTIuMnMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMnFfZjMyIChmbG9hdDMyeDRfdCBhLCBmbG9hdDMyeDRfdCBiKQoreworICBmbG9hdDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDJxX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYikKK3sKKyAgZmxvYXQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMiAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDJxX3A4IChwb2x5OHgxNl90IGEsIHBvbHk4eDE2X3QgYikKK3sKKyAgcG9seTh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjE2YiwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMnFfcDE2IChwb2x5MTZ4OF90IGEsIHBvbHkxNng4X3QgYikKK3sKKyAgcG9seTE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAycV9zOCAoaW50OHgxNl90IGEsIGludDh4MTZfdCBiKQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMiAlMC4xNmIsJTEuMTZiLCUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMnFfczE2IChpbnQxNng4X3QgYSwgaW50MTZ4OF90IGIpCit7CisgIGludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z6aXAycV9zMzIgKGludDMyeDRfdCBhLCBpbnQzMng0X3QgYikKK3sKKyAgaW50MzJ4NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInppcDIgJTAuNHMsJTEuNHMsJTIuNHMiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDJxX3M2NCAoaW50NjR4Ml90IGEsIGludDY0eDJfdCBiKQoreworICBpbnQ2NHgyX3QgcmVzdWx0OworICBfX2FzbV9fICgiemlwMiAlMC4yZCwlMS4yZCwlMi4yZCIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnppcDJxX3U4ICh1aW50OHgxNl90IGEsIHVpbnQ4eDE2X3QgYikKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjE2YiwlMS4xNmIsJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMnFfdTE2ICh1aW50MTZ4OF90IGEsIHVpbnQxNng4X3QgYikKK3sKKyAgdWludDE2eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjhoLCUxLjhoLCUyLjhoIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMnFfdTMyICh1aW50MzJ4NF90IGEsIHVpbnQzMng0X3QgYikKK3sKKyAgdWludDMyeDRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjRzLCUxLjRzLCUyLjRzIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2emlwMnFfdTY0ICh1aW50NjR4Ml90IGEsIHVpbnQ2NHgyX3QgYikKK3sKKyAgdWludDY0eDJfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ6aXAyICUwLjJkLCUxLjJkLCUyLjJkIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCisvKiBFbmQgb2YgdGVtcG9yYXJ5IGlubGluZSBhc20gaW1wbGVtZW50YXRpb25zLiAgKi8KKworLyogU3RhcnQgb2YgdGVtcG9yYXJ5IGlubGluZSBhc20gZm9yIHZsZG4sIHZzdG4gYW5kIGZyaWVuZHMuICAqLworCisvKiBDcmVhdGUgc3RydWN0IGVsZW1lbnQgdHlwZXMgZm9yIGR1cGxpY2F0aW5nIGxvYWRzLgorCisgICBDcmVhdGUgMiBlbGVtZW50IHN0cnVjdHVyZXMgb2Y6CisKKyAgICstLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKyAgIHwgICAgICB8IDggIHwgMTYgfCAzMiB8IDY0IHwKKyAgICstLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKyAgIHxpbnQgICB8IFkgIHwgWSAgfCBOICB8IE4gIHwKKyAgICstLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKyAgIHx1aW50ICB8IFkgIHwgWSAgfCBOICB8IE4gIHwKKyAgICstLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKyAgIHxmbG9hdCB8IC0gIHwgLSAgfCBOICB8IE4gIHwKKyAgICstLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKyAgIHxwb2x5ICB8IFkgIHwgWSAgfCAtICB8IC0gIHwKKyAgICstLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLSsKKworICAgQ3JlYXRlIDMgZWxlbWVudCBzdHJ1Y3R1cmVzIG9mOgorCisgICArLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICB8ICAgICAgfCA4ICB8IDE2IHwgMzIgfCA2NCB8CisgICArLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICB8aW50ICAgfCBZICB8IFkgIHwgWSAgfCBZICB8CisgICArLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICB8dWludCAgfCBZICB8IFkgIHwgWSAgfCBZICB8CisgICArLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICB8ZmxvYXQgfCAtICB8IC0gIHwgWSAgfCBZICB8CisgICArLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICB8cG9seSAgfCBZICB8IFkgIHwgLSAgfCAtICB8CisgICArLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisKKyAgIENyZWF0ZSA0IGVsZW1lbnQgc3RydWN0dXJlcyBvZjoKKworICAgKy0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKworICAgfCAgICAgIHwgOCAgfCAxNiB8IDMyIHwgNjQgfAorICAgKy0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKworICAgfGludCAgIHwgWSAgfCBOICB8IE4gIHwgWSAgfAorICAgKy0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKworICAgfHVpbnQgIHwgWSAgfCBOICB8IE4gIHwgWSAgfAorICAgKy0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKworICAgfGZsb2F0IHwgLSAgfCAtICB8IE4gIHwgWSAgfAorICAgKy0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKworICAgfHBvbHkgIHwgWSAgfCBOICB8IC0gIHwgLSAgfAorICAgKy0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKworCisgIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNhc3RpbmcgbWVtb3J5IHJlZmVyZW5jZS4gICovCisjZGVmaW5lIF9fU1RSVUNUTih0LCBzeiwgbmVsZW0pCQkJXAorICB0eXBlZGVmIHN0cnVjdCB0ICMjIHN6ICMjIHggIyMgbmVsZW0gIyMgX3QgewlcCisgICAgdCAjIyBzeiAjIyBfdCB2YWxbbmVsZW1dOwkJCVwKKyAgfSAgdCAjIyBzeiAjIyB4ICMjIG5lbGVtICMjIF90OworCisvKiAyLWVsZW1lbnQgc3RydWN0cy4gICovCitfX1NUUlVDVE4gKGludCwgOCwgMikKK19fU1RSVUNUTiAoaW50LCAxNiwgMikKK19fU1RSVUNUTiAodWludCwgOCwgMikKK19fU1RSVUNUTiAodWludCwgMTYsIDIpCitfX1NUUlVDVE4gKHBvbHksIDgsIDIpCitfX1NUUlVDVE4gKHBvbHksIDE2LCAyKQorLyogMy1lbGVtZW50IHN0cnVjdHMuICAqLworX19TVFJVQ1ROIChpbnQsIDgsIDMpCitfX1NUUlVDVE4gKGludCwgMTYsIDMpCitfX1NUUlVDVE4gKGludCwgMzIsIDMpCitfX1NUUlVDVE4gKGludCwgNjQsIDMpCitfX1NUUlVDVE4gKHVpbnQsIDgsIDMpCitfX1NUUlVDVE4gKHVpbnQsIDE2LCAzKQorX19TVFJVQ1ROICh1aW50LCAzMiwgMykKK19fU1RSVUNUTiAodWludCwgNjQsIDMpCitfX1NUUlVDVE4gKGZsb2F0LCAzMiwgMykKK19fU1RSVUNUTiAoZmxvYXQsIDY0LCAzKQorX19TVFJVQ1ROIChwb2x5LCA4LCAzKQorX19TVFJVQ1ROIChwb2x5LCAxNiwgMykKKy8qIDQtZWxlbWVudCBzdHJ1Y3RzLiAgKi8KK19fU1RSVUNUTiAoaW50LCA4LCA0KQorX19TVFJVQ1ROIChpbnQsIDY0LCA0KQorX19TVFJVQ1ROICh1aW50LCA4LCA0KQorX19TVFJVQ1ROICh1aW50LCA2NCwgNCkKK19fU1RSVUNUTiAocG9seSwgOCwgNCkKK19fU1RSVUNUTiAoZmxvYXQsIDY0LCA0KQorI3VuZGVmIF9fU1RSVUNUTgorCisjZGVmaW5lIF9fTEQyUl9GVU5DKHJldHR5cGUsIHN0cnVjdHR5cGUsIHB0cnR5cGUsCQkJXAorCQkgICAgcmVnc3VmZml4LCBmdW5jc3VmZml4LCBRKQkJCQlcCisgIF9fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHJldHR5cGUJCQkJCVwKKyAgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkgCQkJCQlcCisgIHZsZDIgIyMgUSAjIyBfZHVwXyAjIyBmdW5jc3VmZml4IChjb25zdCBwdHJ0eXBlICpwdHIpCQkJXAorICB7CQkJCQkJCQkJXAorICAgIHJldHR5cGUgcmVzdWx0OwkJCQkJCQlcCisgICAgX19hc21fXyAoImxkMnIge3YxNi4iICNyZWdzdWZmaXggIiwgdjE3LiIgI3JlZ3N1ZmZpeCAifSwgJTFcblx0IglcCisJICAgICAic3QxIHt2MTYuIiAjcmVnc3VmZml4ICIsIHYxNy4iICNyZWdzdWZmaXggIn0sICUwXG5cdCIJXAorCSAgICAgOiAiPVEiKHJlc3VsdCkJCQkJCQlcCisJICAgICA6ICJRIigqKGNvbnN0IHN0cnVjdHR5cGUgKilwdHIpCQkJCVwKKwkgICAgIDogIm1lbW9yeSIsICJ2MTYiLCAidjE3Iik7CQkJCQlcCisgICAgcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAorICB9CisKK19fTEQyUl9GVU5DIChmbG9hdDMyeDJ4Ml90LCBmbG9hdDMyeDJfdCwgZmxvYXQzMl90LCAycywgZjMyLCkKK19fTEQyUl9GVU5DIChmbG9hdDY0eDF4Ml90LCBmbG9hdDY0eDJfdCwgZmxvYXQ2NF90LCAxZCwgZjY0LCkKK19fTEQyUl9GVU5DIChwb2x5OHg4eDJfdCwgcG9seTh4Ml90LCBwb2x5OF90LCA4YiwgcDgsKQorX19MRDJSX0ZVTkMgKHBvbHkxNng0eDJfdCwgcG9seTE2eDJfdCwgcG9seTE2X3QsIDRoLCBwMTYsKQorX19MRDJSX0ZVTkMgKGludDh4OHgyX3QsIGludDh4Ml90LCBpbnQ4X3QsIDhiLCBzOCwpCitfX0xEMlJfRlVOQyAoaW50MTZ4NHgyX3QsIGludDE2eDJfdCwgaW50MTZfdCwgNGgsIHMxNiwpCitfX0xEMlJfRlVOQyAoaW50MzJ4MngyX3QsIGludDMyeDJfdCwgaW50MzJfdCwgMnMsIHMzMiwpCitfX0xEMlJfRlVOQyAoaW50NjR4MXgyX3QsIGludDY0eDJfdCwgaW50NjRfdCwgMWQsIHM2NCwpCitfX0xEMlJfRlVOQyAodWludDh4OHgyX3QsIHVpbnQ4eDJfdCwgdWludDhfdCwgOGIsIHU4LCkKK19fTEQyUl9GVU5DICh1aW50MTZ4NHgyX3QsIHVpbnQxNngyX3QsIHVpbnQxNl90LCA0aCwgdTE2LCkKK19fTEQyUl9GVU5DICh1aW50MzJ4MngyX3QsIHVpbnQzMngyX3QsIHVpbnQzMl90LCAycywgdTMyLCkKK19fTEQyUl9GVU5DICh1aW50NjR4MXgyX3QsIHVpbnQ2NHgyX3QsIHVpbnQ2NF90LCAxZCwgdTY0LCkKK19fTEQyUl9GVU5DIChmbG9hdDMyeDR4Ml90LCBmbG9hdDMyeDJfdCwgZmxvYXQzMl90LCA0cywgZjMyLCBxKQorX19MRDJSX0ZVTkMgKGZsb2F0NjR4MngyX3QsIGZsb2F0NjR4Ml90LCBmbG9hdDY0X3QsIDJkLCBmNjQsIHEpCitfX0xEMlJfRlVOQyAocG9seTh4MTZ4Ml90LCBwb2x5OHgyX3QsIHBvbHk4X3QsIDE2YiwgcDgsIHEpCitfX0xEMlJfRlVOQyAocG9seTE2eDh4Ml90LCBwb2x5MTZ4Ml90LCBwb2x5MTZfdCwgOGgsIHAxNiwgcSkKK19fTEQyUl9GVU5DIChpbnQ4eDE2eDJfdCwgaW50OHgyX3QsIGludDhfdCwgMTZiLCBzOCwgcSkKK19fTEQyUl9GVU5DIChpbnQxNng4eDJfdCwgaW50MTZ4Ml90LCBpbnQxNl90LCA4aCwgczE2LCBxKQorX19MRDJSX0ZVTkMgKGludDMyeDR4Ml90LCBpbnQzMngyX3QsIGludDMyX3QsIDRzLCBzMzIsIHEpCitfX0xEMlJfRlVOQyAoaW50NjR4MngyX3QsIGludDY0eDJfdCwgaW50NjRfdCwgMmQsIHM2NCwgcSkKK19fTEQyUl9GVU5DICh1aW50OHgxNngyX3QsIHVpbnQ4eDJfdCwgdWludDhfdCwgMTZiLCB1OCwgcSkKK19fTEQyUl9GVU5DICh1aW50MTZ4OHgyX3QsIHVpbnQxNngyX3QsIHVpbnQxNl90LCA4aCwgdTE2LCBxKQorX19MRDJSX0ZVTkMgKHVpbnQzMng0eDJfdCwgdWludDMyeDJfdCwgdWludDMyX3QsIDRzLCB1MzIsIHEpCitfX0xEMlJfRlVOQyAodWludDY0eDJ4Ml90LCB1aW50NjR4Ml90LCB1aW50NjRfdCwgMmQsIHU2NCwgcSkKKworI2RlZmluZSBfX0xEMl9MQU5FX0ZVTkMocmV0dHlwZSwgcHRydHlwZSwgcmVnc3VmZml4LAkJCVwKKwkJCWxuc3VmZml4LCBmdW5jc3VmZml4LCBRKQkJCVwKKyAgX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcmV0dHlwZQkJCQkJXAorICBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQkJCQkJXAorICB2bGQyICMjIFEgIyMgX2xhbmVfICMjIGZ1bmNzdWZmaXggKGNvbnN0IHB0cnR5cGUgKnB0ciwJCVwKKwkJCQkgICAgIHJldHR5cGUgYiwgY29uc3QgaW50IGMpCQlcCisgIHsJCQkJCQkJCQlcCisgICAgcmV0dHlwZSByZXN1bHQ7CQkJCQkJCVwKKyAgICBfX2FzbV9fICgibGQxIHt2MTYuIiAjcmVnc3VmZml4ICIsIHYxNy4iICNyZWdzdWZmaXggIn0sICUxXG5cdCIJXAorCSAgICAgImxkMiB7djE2LiIgI2xuc3VmZml4ICIsIHYxNy4iICNsbnN1ZmZpeCAifVslM10sICUyXG5cdCIJXAorCSAgICAgInN0MSB7djE2LiIgI3JlZ3N1ZmZpeCAiLCB2MTcuIiAjcmVnc3VmZml4ICJ9LCAlMFxuXHQiCVwKKwkgICAgIDogIj1RIihyZXN1bHQpCQkJCQkJXAorCSAgICAgOiAiUSIoYiksICJRIigqKGNvbnN0IHJldHR5cGUgKilwdHIpLCAiaSIoYykJCVwKKwkgICAgIDogIm1lbW9yeSIsICJ2MTYiLCAidjE3Iik7CQkJCQlcCisgICAgcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAorICB9CisKK19fTEQyX0xBTkVfRlVOQyAoaW50OHg4eDJfdCwgdWludDhfdCwgOGIsIGIsIHM4LCkKK19fTEQyX0xBTkVfRlVOQyAoZmxvYXQzMngyeDJfdCwgZmxvYXQzMl90LCAycywgcywgZjMyLCkKK19fTEQyX0xBTkVfRlVOQyAoZmxvYXQ2NHgxeDJfdCwgZmxvYXQ2NF90LCAxZCwgZCwgZjY0LCkKK19fTEQyX0xBTkVfRlVOQyAocG9seTh4OHgyX3QsIHBvbHk4X3QsIDhiLCBiLCBwOCwpCitfX0xEMl9MQU5FX0ZVTkMgKHBvbHkxNng0eDJfdCwgcG9seTE2X3QsIDRoLCBoLCBwMTYsKQorX19MRDJfTEFORV9GVU5DIChpbnQxNng0eDJfdCwgaW50MTZfdCwgNGgsIGgsIHMxNiwpCitfX0xEMl9MQU5FX0ZVTkMgKGludDMyeDJ4Ml90LCBpbnQzMl90LCAycywgcywgczMyLCkKK19fTEQyX0xBTkVfRlVOQyAoaW50NjR4MXgyX3QsIGludDY0X3QsIDFkLCBkLCBzNjQsKQorX19MRDJfTEFORV9GVU5DICh1aW50OHg4eDJfdCwgdWludDhfdCwgOGIsIGIsIHU4LCkKK19fTEQyX0xBTkVfRlVOQyAodWludDE2eDR4Ml90LCB1aW50MTZfdCwgNGgsIGgsIHUxNiwpCitfX0xEMl9MQU5FX0ZVTkMgKHVpbnQzMngyeDJfdCwgdWludDMyX3QsIDJzLCBzLCB1MzIsKQorX19MRDJfTEFORV9GVU5DICh1aW50NjR4MXgyX3QsIHVpbnQ2NF90LCAxZCwgZCwgdTY0LCkKK19fTEQyX0xBTkVfRlVOQyAoZmxvYXQzMng0eDJfdCwgZmxvYXQzMl90LCA0cywgcywgZjMyLCBxKQorX19MRDJfTEFORV9GVU5DIChmbG9hdDY0eDJ4Ml90LCBmbG9hdDY0X3QsIDJkLCBkLCBmNjQsIHEpCitfX0xEMl9MQU5FX0ZVTkMgKHBvbHk4eDE2eDJfdCwgcG9seThfdCwgMTZiLCBiLCBwOCwgcSkKK19fTEQyX0xBTkVfRlVOQyAocG9seTE2eDh4Ml90LCBwb2x5MTZfdCwgOGgsIGgsIHAxNiwgcSkKK19fTEQyX0xBTkVfRlVOQyAoaW50OHgxNngyX3QsIGludDhfdCwgMTZiLCBiLCBzOCwgcSkKK19fTEQyX0xBTkVfRlVOQyAoaW50MTZ4OHgyX3QsIGludDE2X3QsIDhoLCBoLCBzMTYsIHEpCitfX0xEMl9MQU5FX0ZVTkMgKGludDMyeDR4Ml90LCBpbnQzMl90LCA0cywgcywgczMyLCBxKQorX19MRDJfTEFORV9GVU5DIChpbnQ2NHgyeDJfdCwgaW50NjRfdCwgMmQsIGQsIHM2NCwgcSkKK19fTEQyX0xBTkVfRlVOQyAodWludDh4MTZ4Ml90LCB1aW50OF90LCAxNmIsIGIsIHU4LCBxKQorX19MRDJfTEFORV9GVU5DICh1aW50MTZ4OHgyX3QsIHVpbnQxNl90LCA4aCwgaCwgdTE2LCBxKQorX19MRDJfTEFORV9GVU5DICh1aW50MzJ4NHgyX3QsIHVpbnQzMl90LCA0cywgcywgdTMyLCBxKQorX19MRDJfTEFORV9GVU5DICh1aW50NjR4MngyX3QsIHVpbnQ2NF90LCAyZCwgZCwgdTY0LCBxKQorCisjZGVmaW5lIF9fTEQzUl9GVU5DKHJldHR5cGUsIHN0cnVjdHR5cGUsIHB0cnR5cGUsCQkJXAorCQkgICAgcmVnc3VmZml4LCBmdW5jc3VmZml4LCBRKQkJCQlcCisgIF9fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHJldHR5cGUJCQkJCVwKKyAgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkJCQkJCVwKKyAgdmxkMyAjIyBRICMjIF9kdXBfICMjIGZ1bmNzdWZmaXggKGNvbnN0IHB0cnR5cGUgKnB0cikJCQlcCisgIHsJCQkJCQkJCQlcCisgICAgcmV0dHlwZSByZXN1bHQ7CQkJCQkJCVwKKyAgICBfX2FzbV9fICgibGQzciB7djE2LiIgI3JlZ3N1ZmZpeCAiIC0gdjE4LiIgI3JlZ3N1ZmZpeCAifSwgJTFcblx0IglcCisJICAgICAic3QxIHt2MTYuIiAjcmVnc3VmZml4ICIgLSB2MTguIiAjcmVnc3VmZml4ICJ9LCAlMFxuXHQiCVwKKwkgICAgIDogIj1RIihyZXN1bHQpCQkJCQkJXAorCSAgICAgOiAiUSIoKihjb25zdCBzdHJ1Y3R0eXBlICopcHRyKQkJCQlcCisJICAgICA6ICJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiKTsJCQkJXAorICAgIHJldHVybiByZXN1bHQ7CQkJCQkJCVwKKyAgfQorCitfX0xEM1JfRlVOQyAoZmxvYXQzMngyeDNfdCwgZmxvYXQzMngzX3QsIGZsb2F0MzJfdCwgMnMsIGYzMiwpCitfX0xEM1JfRlVOQyAoZmxvYXQ2NHgxeDNfdCwgZmxvYXQ2NHgzX3QsIGZsb2F0NjRfdCwgMWQsIGY2NCwpCitfX0xEM1JfRlVOQyAocG9seTh4OHgzX3QsIHBvbHk4eDNfdCwgcG9seThfdCwgOGIsIHA4LCkKK19fTEQzUl9GVU5DIChwb2x5MTZ4NHgzX3QsIHBvbHkxNngzX3QsIHBvbHkxNl90LCA0aCwgcDE2LCkKK19fTEQzUl9GVU5DIChpbnQ4eDh4M190LCBpbnQ4eDNfdCwgaW50OF90LCA4YiwgczgsKQorX19MRDNSX0ZVTkMgKGludDE2eDR4M190LCBpbnQxNngzX3QsIGludDE2X3QsIDRoLCBzMTYsKQorX19MRDNSX0ZVTkMgKGludDMyeDJ4M190LCBpbnQzMngzX3QsIGludDMyX3QsIDJzLCBzMzIsKQorX19MRDNSX0ZVTkMgKGludDY0eDF4M190LCBpbnQ2NHgzX3QsIGludDY0X3QsIDFkLCBzNjQsKQorX19MRDNSX0ZVTkMgKHVpbnQ4eDh4M190LCB1aW50OHgzX3QsIHVpbnQ4X3QsIDhiLCB1OCwpCitfX0xEM1JfRlVOQyAodWludDE2eDR4M190LCB1aW50MTZ4M190LCB1aW50MTZfdCwgNGgsIHUxNiwpCitfX0xEM1JfRlVOQyAodWludDMyeDJ4M190LCB1aW50MzJ4M190LCB1aW50MzJfdCwgMnMsIHUzMiwpCitfX0xEM1JfRlVOQyAodWludDY0eDF4M190LCB1aW50NjR4M190LCB1aW50NjRfdCwgMWQsIHU2NCwpCitfX0xEM1JfRlVOQyAoZmxvYXQzMng0eDNfdCwgZmxvYXQzMngzX3QsIGZsb2F0MzJfdCwgNHMsIGYzMiwgcSkKK19fTEQzUl9GVU5DIChmbG9hdDY0eDJ4M190LCBmbG9hdDY0eDNfdCwgZmxvYXQ2NF90LCAyZCwgZjY0LCBxKQorX19MRDNSX0ZVTkMgKHBvbHk4eDE2eDNfdCwgcG9seTh4M190LCBwb2x5OF90LCAxNmIsIHA4LCBxKQorX19MRDNSX0ZVTkMgKHBvbHkxNng4eDNfdCwgcG9seTE2eDNfdCwgcG9seTE2X3QsIDhoLCBwMTYsIHEpCitfX0xEM1JfRlVOQyAoaW50OHgxNngzX3QsIGludDh4M190LCBpbnQ4X3QsIDE2YiwgczgsIHEpCitfX0xEM1JfRlVOQyAoaW50MTZ4OHgzX3QsIGludDE2eDNfdCwgaW50MTZfdCwgOGgsIHMxNiwgcSkKK19fTEQzUl9GVU5DIChpbnQzMng0eDNfdCwgaW50MzJ4M190LCBpbnQzMl90LCA0cywgczMyLCBxKQorX19MRDNSX0ZVTkMgKGludDY0eDJ4M190LCBpbnQ2NHgzX3QsIGludDY0X3QsIDJkLCBzNjQsIHEpCitfX0xEM1JfRlVOQyAodWludDh4MTZ4M190LCB1aW50OHgzX3QsIHVpbnQ4X3QsIDE2YiwgdTgsIHEpCitfX0xEM1JfRlVOQyAodWludDE2eDh4M190LCB1aW50MTZ4M190LCB1aW50MTZfdCwgOGgsIHUxNiwgcSkKK19fTEQzUl9GVU5DICh1aW50MzJ4NHgzX3QsIHVpbnQzMngzX3QsIHVpbnQzMl90LCA0cywgdTMyLCBxKQorX19MRDNSX0ZVTkMgKHVpbnQ2NHgyeDNfdCwgdWludDY0eDNfdCwgdWludDY0X3QsIDJkLCB1NjQsIHEpCisKKyNkZWZpbmUgX19MRDNfTEFORV9GVU5DKHJldHR5cGUsIHB0cnR5cGUsIHJlZ3N1ZmZpeCwJCQlcCisJCQlsbnN1ZmZpeCwgZnVuY3N1ZmZpeCwgUSkJCQlcCisgIF9fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHJldHR5cGUJCQkJCVwKKyAgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkJCQkJCVwKKyAgdmxkMyAjIyBRICMjIF9sYW5lXyAjIyBmdW5jc3VmZml4IChjb25zdCBwdHJ0eXBlICpwdHIsCQlcCisJCQkJICAgICByZXR0eXBlIGIsIGNvbnN0IGludCBjKQkJXAorICB7CQkJCQkJCQkJXAorICAgIHJldHR5cGUgcmVzdWx0OwkJCQkJCQlcCisgICAgX19hc21fXyAoImxkMSB7djE2LiIgI3JlZ3N1ZmZpeCAiIC0gdjE4LiIgI3JlZ3N1ZmZpeCAifSwgJTFcblx0IglcCisJICAgICAibGQzIHt2MTYuIiAjbG5zdWZmaXggIiAtIHYxOC4iICNsbnN1ZmZpeCAifVslM10sICUyXG5cdCIJXAorCSAgICAgInN0MSB7djE2LiIgI3JlZ3N1ZmZpeCAiIC0gdjE4LiIgI3JlZ3N1ZmZpeCAifSwgJTBcblx0IglcCisJICAgICA6ICI9USIocmVzdWx0KQkJCQkJCVwKKwkgICAgIDogIlEiKGIpLCAiUSIoKihjb25zdCByZXR0eXBlICopcHRyKSwgImkiKGMpCQlcCisJICAgICA6ICJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiKTsJCQkJXAorICAgIHJldHVybiByZXN1bHQ7CQkJCQkJCVwKKyAgfQorCitfX0xEM19MQU5FX0ZVTkMgKGludDh4OHgzX3QsIHVpbnQ4X3QsIDhiLCBiLCBzOCwpCitfX0xEM19MQU5FX0ZVTkMgKGZsb2F0MzJ4MngzX3QsIGZsb2F0MzJfdCwgMnMsIHMsIGYzMiwpCitfX0xEM19MQU5FX0ZVTkMgKGZsb2F0NjR4MXgzX3QsIGZsb2F0NjRfdCwgMWQsIGQsIGY2NCwpCitfX0xEM19MQU5FX0ZVTkMgKHBvbHk4eDh4M190LCBwb2x5OF90LCA4YiwgYiwgcDgsKQorX19MRDNfTEFORV9GVU5DIChwb2x5MTZ4NHgzX3QsIHBvbHkxNl90LCA0aCwgaCwgcDE2LCkKK19fTEQzX0xBTkVfRlVOQyAoaW50MTZ4NHgzX3QsIGludDE2X3QsIDRoLCBoLCBzMTYsKQorX19MRDNfTEFORV9GVU5DIChpbnQzMngyeDNfdCwgaW50MzJfdCwgMnMsIHMsIHMzMiwpCitfX0xEM19MQU5FX0ZVTkMgKGludDY0eDF4M190LCBpbnQ2NF90LCAxZCwgZCwgczY0LCkKK19fTEQzX0xBTkVfRlVOQyAodWludDh4OHgzX3QsIHVpbnQ4X3QsIDhiLCBiLCB1OCwpCitfX0xEM19MQU5FX0ZVTkMgKHVpbnQxNng0eDNfdCwgdWludDE2X3QsIDRoLCBoLCB1MTYsKQorX19MRDNfTEFORV9GVU5DICh1aW50MzJ4MngzX3QsIHVpbnQzMl90LCAycywgcywgdTMyLCkKK19fTEQzX0xBTkVfRlVOQyAodWludDY0eDF4M190LCB1aW50NjRfdCwgMWQsIGQsIHU2NCwpCitfX0xEM19MQU5FX0ZVTkMgKGZsb2F0MzJ4NHgzX3QsIGZsb2F0MzJfdCwgNHMsIHMsIGYzMiwgcSkKK19fTEQzX0xBTkVfRlVOQyAoZmxvYXQ2NHgyeDNfdCwgZmxvYXQ2NF90LCAyZCwgZCwgZjY0LCBxKQorX19MRDNfTEFORV9GVU5DIChwb2x5OHgxNngzX3QsIHBvbHk4X3QsIDE2YiwgYiwgcDgsIHEpCitfX0xEM19MQU5FX0ZVTkMgKHBvbHkxNng4eDNfdCwgcG9seTE2X3QsIDhoLCBoLCBwMTYsIHEpCitfX0xEM19MQU5FX0ZVTkMgKGludDh4MTZ4M190LCBpbnQ4X3QsIDE2YiwgYiwgczgsIHEpCitfX0xEM19MQU5FX0ZVTkMgKGludDE2eDh4M190LCBpbnQxNl90LCA4aCwgaCwgczE2LCBxKQorX19MRDNfTEFORV9GVU5DIChpbnQzMng0eDNfdCwgaW50MzJfdCwgNHMsIHMsIHMzMiwgcSkKK19fTEQzX0xBTkVfRlVOQyAoaW50NjR4MngzX3QsIGludDY0X3QsIDJkLCBkLCBzNjQsIHEpCitfX0xEM19MQU5FX0ZVTkMgKHVpbnQ4eDE2eDNfdCwgdWludDhfdCwgMTZiLCBiLCB1OCwgcSkKK19fTEQzX0xBTkVfRlVOQyAodWludDE2eDh4M190LCB1aW50MTZfdCwgOGgsIGgsIHUxNiwgcSkKK19fTEQzX0xBTkVfRlVOQyAodWludDMyeDR4M190LCB1aW50MzJfdCwgNHMsIHMsIHUzMiwgcSkKK19fTEQzX0xBTkVfRlVOQyAodWludDY0eDJ4M190LCB1aW50NjRfdCwgMmQsIGQsIHU2NCwgcSkKKworI2RlZmluZSBfX0xENFJfRlVOQyhyZXR0eXBlLCBzdHJ1Y3R0eXBlLCBwdHJ0eXBlLAkJCVwKKwkJICAgIHJlZ3N1ZmZpeCwgZnVuY3N1ZmZpeCwgUSkJCQkJXAorICBfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSByZXR0eXBlCQkJCQlcCisgIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCQkJCQlcCisgIHZsZDQgIyMgUSAjIyBfZHVwXyAjIyBmdW5jc3VmZml4IChjb25zdCBwdHJ0eXBlICpwdHIpCQkJXAorICB7CQkJCQkJCQkJXAorICAgIHJldHR5cGUgcmVzdWx0OwkJCQkJCQlcCisgICAgX19hc21fXyAoImxkNHIge3YxNi4iICNyZWdzdWZmaXggIiAtIHYxOS4iICNyZWdzdWZmaXggIn0sICUxXG5cdCIJXAorCSAgICAgInN0MSB7djE2LiIgI3JlZ3N1ZmZpeCAiIC0gdjE5LiIgI3JlZ3N1ZmZpeCAifSwgJTBcblx0IglcCisJICAgICA6ICI9USIocmVzdWx0KQkJCQkJCVwKKwkgICAgIDogIlEiKCooY29uc3Qgc3RydWN0dHlwZSAqKXB0cikJCQkJXAorCSAgICAgOiAibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4IiwgInYxOSIpOwkJCVwKKyAgICByZXR1cm4gcmVzdWx0OwkJCQkJCQlcCisgIH0KKworX19MRDRSX0ZVTkMgKGZsb2F0MzJ4Mng0X3QsIGZsb2F0MzJ4NF90LCBmbG9hdDMyX3QsIDJzLCBmMzIsKQorX19MRDRSX0ZVTkMgKGZsb2F0NjR4MXg0X3QsIGZsb2F0NjR4NF90LCBmbG9hdDY0X3QsIDFkLCBmNjQsKQorX19MRDRSX0ZVTkMgKHBvbHk4eDh4NF90LCBwb2x5OHg0X3QsIHBvbHk4X3QsIDhiLCBwOCwpCitfX0xENFJfRlVOQyAocG9seTE2eDR4NF90LCBwb2x5MTZ4NF90LCBwb2x5MTZfdCwgNGgsIHAxNiwpCitfX0xENFJfRlVOQyAoaW50OHg4eDRfdCwgaW50OHg0X3QsIGludDhfdCwgOGIsIHM4LCkKK19fTEQ0Ul9GVU5DIChpbnQxNng0eDRfdCwgaW50MTZ4NF90LCBpbnQxNl90LCA0aCwgczE2LCkKK19fTEQ0Ul9GVU5DIChpbnQzMngyeDRfdCwgaW50MzJ4NF90LCBpbnQzMl90LCAycywgczMyLCkKK19fTEQ0Ul9GVU5DIChpbnQ2NHgxeDRfdCwgaW50NjR4NF90LCBpbnQ2NF90LCAxZCwgczY0LCkKK19fTEQ0Ul9GVU5DICh1aW50OHg4eDRfdCwgdWludDh4NF90LCB1aW50OF90LCA4YiwgdTgsKQorX19MRDRSX0ZVTkMgKHVpbnQxNng0eDRfdCwgdWludDE2eDRfdCwgdWludDE2X3QsIDRoLCB1MTYsKQorX19MRDRSX0ZVTkMgKHVpbnQzMngyeDRfdCwgdWludDMyeDRfdCwgdWludDMyX3QsIDJzLCB1MzIsKQorX19MRDRSX0ZVTkMgKHVpbnQ2NHgxeDRfdCwgdWludDY0eDRfdCwgdWludDY0X3QsIDFkLCB1NjQsKQorX19MRDRSX0ZVTkMgKGZsb2F0MzJ4NHg0X3QsIGZsb2F0MzJ4NF90LCBmbG9hdDMyX3QsIDRzLCBmMzIsIHEpCitfX0xENFJfRlVOQyAoZmxvYXQ2NHgyeDRfdCwgZmxvYXQ2NHg0X3QsIGZsb2F0NjRfdCwgMmQsIGY2NCwgcSkKK19fTEQ0Ul9GVU5DIChwb2x5OHgxNng0X3QsIHBvbHk4eDRfdCwgcG9seThfdCwgMTZiLCBwOCwgcSkKK19fTEQ0Ul9GVU5DIChwb2x5MTZ4OHg0X3QsIHBvbHkxNng0X3QsIHBvbHkxNl90LCA4aCwgcDE2LCBxKQorX19MRDRSX0ZVTkMgKGludDh4MTZ4NF90LCBpbnQ4eDRfdCwgaW50OF90LCAxNmIsIHM4LCBxKQorX19MRDRSX0ZVTkMgKGludDE2eDh4NF90LCBpbnQxNng0X3QsIGludDE2X3QsIDhoLCBzMTYsIHEpCitfX0xENFJfRlVOQyAoaW50MzJ4NHg0X3QsIGludDMyeDRfdCwgaW50MzJfdCwgNHMsIHMzMiwgcSkKK19fTEQ0Ul9GVU5DIChpbnQ2NHgyeDRfdCwgaW50NjR4NF90LCBpbnQ2NF90LCAyZCwgczY0LCBxKQorX19MRDRSX0ZVTkMgKHVpbnQ4eDE2eDRfdCwgdWludDh4NF90LCB1aW50OF90LCAxNmIsIHU4LCBxKQorX19MRDRSX0ZVTkMgKHVpbnQxNng4eDRfdCwgdWludDE2eDRfdCwgdWludDE2X3QsIDhoLCB1MTYsIHEpCitfX0xENFJfRlVOQyAodWludDMyeDR4NF90LCB1aW50MzJ4NF90LCB1aW50MzJfdCwgNHMsIHUzMiwgcSkKK19fTEQ0Ul9GVU5DICh1aW50NjR4Mng0X3QsIHVpbnQ2NHg0X3QsIHVpbnQ2NF90LCAyZCwgdTY0LCBxKQorCisjZGVmaW5lIF9fTEQ0X0xBTkVfRlVOQyhyZXR0eXBlLCBwdHJ0eXBlLCByZWdzdWZmaXgsCQkJXAorCQkJbG5zdWZmaXgsIGZ1bmNzdWZmaXgsIFEpCQkJXAorICBfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSByZXR0eXBlCQkJCQlcCisgIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCQkJCQlcCisgIHZsZDQgIyMgUSAjIyBfbGFuZV8gIyMgZnVuY3N1ZmZpeCAoY29uc3QgcHRydHlwZSAqcHRyLAkJXAorCQkJCSAgICAgcmV0dHlwZSBiLCBjb25zdCBpbnQgYykJCVwKKyAgewkJCQkJCQkJCVwKKyAgICByZXR0eXBlIHJlc3VsdDsJCQkJCQkJXAorICAgIF9fYXNtX18gKCJsZDEge3YxNi4iICNyZWdzdWZmaXggIiAtIHYxOS4iICNyZWdzdWZmaXggIn0sICUxXG5cdCIJXAorCSAgICAgImxkNCB7djE2LiIgI2xuc3VmZml4ICIgLSB2MTkuIiAjbG5zdWZmaXggIn1bJTNdLCAlMlxuXHQiCVwKKwkgICAgICJzdDEge3YxNi4iICNyZWdzdWZmaXggIiAtIHYxOS4iICNyZWdzdWZmaXggIn0sICUwXG5cdCIJXAorCSAgICAgOiAiPVEiKHJlc3VsdCkJCQkJCQlcCisJICAgICA6ICJRIihiKSwgIlEiKCooY29uc3QgcmV0dHlwZSAqKXB0ciksICJpIihjKQkJXAorCSAgICAgOiAibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4IiwgInYxOSIpOwkJCVwKKyAgICByZXR1cm4gcmVzdWx0OwkJCQkJCQlcCisgIH0KKworX19MRDRfTEFORV9GVU5DIChpbnQ4eDh4NF90LCB1aW50OF90LCA4YiwgYiwgczgsKQorX19MRDRfTEFORV9GVU5DIChmbG9hdDMyeDJ4NF90LCBmbG9hdDMyX3QsIDJzLCBzLCBmMzIsKQorX19MRDRfTEFORV9GVU5DIChmbG9hdDY0eDF4NF90LCBmbG9hdDY0X3QsIDFkLCBkLCBmNjQsKQorX19MRDRfTEFORV9GVU5DIChwb2x5OHg4eDRfdCwgcG9seThfdCwgOGIsIGIsIHA4LCkKK19fTEQ0X0xBTkVfRlVOQyAocG9seTE2eDR4NF90LCBwb2x5MTZfdCwgNGgsIGgsIHAxNiwpCitfX0xENF9MQU5FX0ZVTkMgKGludDE2eDR4NF90LCBpbnQxNl90LCA0aCwgaCwgczE2LCkKK19fTEQ0X0xBTkVfRlVOQyAoaW50MzJ4Mng0X3QsIGludDMyX3QsIDJzLCBzLCBzMzIsKQorX19MRDRfTEFORV9GVU5DIChpbnQ2NHgxeDRfdCwgaW50NjRfdCwgMWQsIGQsIHM2NCwpCitfX0xENF9MQU5FX0ZVTkMgKHVpbnQ4eDh4NF90LCB1aW50OF90LCA4YiwgYiwgdTgsKQorX19MRDRfTEFORV9GVU5DICh1aW50MTZ4NHg0X3QsIHVpbnQxNl90LCA0aCwgaCwgdTE2LCkKK19fTEQ0X0xBTkVfRlVOQyAodWludDMyeDJ4NF90LCB1aW50MzJfdCwgMnMsIHMsIHUzMiwpCitfX0xENF9MQU5FX0ZVTkMgKHVpbnQ2NHgxeDRfdCwgdWludDY0X3QsIDFkLCBkLCB1NjQsKQorX19MRDRfTEFORV9GVU5DIChmbG9hdDMyeDR4NF90LCBmbG9hdDMyX3QsIDRzLCBzLCBmMzIsIHEpCitfX0xENF9MQU5FX0ZVTkMgKGZsb2F0NjR4Mng0X3QsIGZsb2F0NjRfdCwgMmQsIGQsIGY2NCwgcSkKK19fTEQ0X0xBTkVfRlVOQyAocG9seTh4MTZ4NF90LCBwb2x5OF90LCAxNmIsIGIsIHA4LCBxKQorX19MRDRfTEFORV9GVU5DIChwb2x5MTZ4OHg0X3QsIHBvbHkxNl90LCA4aCwgaCwgcDE2LCBxKQorX19MRDRfTEFORV9GVU5DIChpbnQ4eDE2eDRfdCwgaW50OF90LCAxNmIsIGIsIHM4LCBxKQorX19MRDRfTEFORV9GVU5DIChpbnQxNng4eDRfdCwgaW50MTZfdCwgOGgsIGgsIHMxNiwgcSkKK19fTEQ0X0xBTkVfRlVOQyAoaW50MzJ4NHg0X3QsIGludDMyX3QsIDRzLCBzLCBzMzIsIHEpCitfX0xENF9MQU5FX0ZVTkMgKGludDY0eDJ4NF90LCBpbnQ2NF90LCAyZCwgZCwgczY0LCBxKQorX19MRDRfTEFORV9GVU5DICh1aW50OHgxNng0X3QsIHVpbnQ4X3QsIDE2YiwgYiwgdTgsIHEpCitfX0xENF9MQU5FX0ZVTkMgKHVpbnQxNng4eDRfdCwgdWludDE2X3QsIDhoLCBoLCB1MTYsIHEpCitfX0xENF9MQU5FX0ZVTkMgKHVpbnQzMng0eDRfdCwgdWludDMyX3QsIDRzLCBzLCB1MzIsIHEpCitfX0xENF9MQU5FX0ZVTkMgKHVpbnQ2NHgyeDRfdCwgdWludDY0X3QsIDJkLCBkLCB1NjQsIHEpCisKKyNkZWZpbmUgX19TVDJfTEFORV9GVU5DKGludHlwZSwgcHRydHlwZSwgcmVnc3VmZml4LAkJCVwKKwkJCWxuc3VmZml4LCBmdW5jc3VmZml4LCBRKQkJCVwKKyAgX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZAkJCQkJXAorICBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQkJCQkJXAorICB2c3QyICMjIFEgIyMgX2xhbmVfICMjIGZ1bmNzdWZmaXggKGNvbnN0IHB0cnR5cGUgKnB0ciwJCVwKKwkJCQkgICAgIGludHlwZSBiLCBjb25zdCBpbnQgYykJCVwKKyAgewkJCQkJCQkJCVwKKyAgICBfX2FzbV9fICgibGQxIHt2MTYuIiAjcmVnc3VmZml4ICIsIHYxNy4iICNyZWdzdWZmaXggIn0sICUxXG5cdCIJXAorCSAgICAgInN0MiB7djE2LiIgI2xuc3VmZml4ICIsIHYxNy4iICNsbnN1ZmZpeCAifVslMl0sICUwXG5cdCIJXAorCSAgICAgOiAiPVEiKCooaW50eXBlICopIHB0cikJCQkJCVwKKwkgICAgIDogIlEiKGIpLCAiaSIoYykJCQkJCQlcCisJICAgICA6ICJtZW1vcnkiLCAidjE2IiwgInYxNyIpOwkJCQkJXAorICB9CisKK19fU1QyX0xBTkVfRlVOQyAoaW50OHg4eDJfdCwgaW50OF90LCA4YiwgYiwgczgsKQorX19TVDJfTEFORV9GVU5DIChmbG9hdDMyeDJ4Ml90LCBmbG9hdDMyX3QsIDJzLCBzLCBmMzIsKQorX19TVDJfTEFORV9GVU5DIChmbG9hdDY0eDF4Ml90LCBmbG9hdDY0X3QsIDFkLCBkLCBmNjQsKQorX19TVDJfTEFORV9GVU5DIChwb2x5OHg4eDJfdCwgcG9seThfdCwgOGIsIGIsIHA4LCkKK19fU1QyX0xBTkVfRlVOQyAocG9seTE2eDR4Ml90LCBwb2x5MTZfdCwgNGgsIGgsIHAxNiwpCitfX1NUMl9MQU5FX0ZVTkMgKGludDE2eDR4Ml90LCBpbnQxNl90LCA0aCwgaCwgczE2LCkKK19fU1QyX0xBTkVfRlVOQyAoaW50MzJ4MngyX3QsIGludDMyX3QsIDJzLCBzLCBzMzIsKQorX19TVDJfTEFORV9GVU5DIChpbnQ2NHgxeDJfdCwgaW50NjRfdCwgMWQsIGQsIHM2NCwpCitfX1NUMl9MQU5FX0ZVTkMgKHVpbnQ4eDh4Ml90LCB1aW50OF90LCA4YiwgYiwgdTgsKQorX19TVDJfTEFORV9GVU5DICh1aW50MTZ4NHgyX3QsIHVpbnQxNl90LCA0aCwgaCwgdTE2LCkKK19fU1QyX0xBTkVfRlVOQyAodWludDMyeDJ4Ml90LCB1aW50MzJfdCwgMnMsIHMsIHUzMiwpCitfX1NUMl9MQU5FX0ZVTkMgKHVpbnQ2NHgxeDJfdCwgdWludDY0X3QsIDFkLCBkLCB1NjQsKQorX19TVDJfTEFORV9GVU5DIChmbG9hdDMyeDR4Ml90LCBmbG9hdDMyX3QsIDRzLCBzLCBmMzIsIHEpCitfX1NUMl9MQU5FX0ZVTkMgKGZsb2F0NjR4MngyX3QsIGZsb2F0NjRfdCwgMmQsIGQsIGY2NCwgcSkKK19fU1QyX0xBTkVfRlVOQyAocG9seTh4MTZ4Ml90LCBwb2x5OF90LCAxNmIsIGIsIHA4LCBxKQorX19TVDJfTEFORV9GVU5DIChwb2x5MTZ4OHgyX3QsIHBvbHkxNl90LCA4aCwgaCwgcDE2LCBxKQorX19TVDJfTEFORV9GVU5DIChpbnQ4eDE2eDJfdCwgaW50OF90LCAxNmIsIGIsIHM4LCBxKQorX19TVDJfTEFORV9GVU5DIChpbnQxNng4eDJfdCwgaW50MTZfdCwgOGgsIGgsIHMxNiwgcSkKK19fU1QyX0xBTkVfRlVOQyAoaW50MzJ4NHgyX3QsIGludDMyX3QsIDRzLCBzLCBzMzIsIHEpCitfX1NUMl9MQU5FX0ZVTkMgKGludDY0eDJ4Ml90LCBpbnQ2NF90LCAyZCwgZCwgczY0LCBxKQorX19TVDJfTEFORV9GVU5DICh1aW50OHgxNngyX3QsIHVpbnQ4X3QsIDE2YiwgYiwgdTgsIHEpCitfX1NUMl9MQU5FX0ZVTkMgKHVpbnQxNng4eDJfdCwgdWludDE2X3QsIDhoLCBoLCB1MTYsIHEpCitfX1NUMl9MQU5FX0ZVTkMgKHVpbnQzMng0eDJfdCwgdWludDMyX3QsIDRzLCBzLCB1MzIsIHEpCitfX1NUMl9MQU5FX0ZVTkMgKHVpbnQ2NHgyeDJfdCwgdWludDY0X3QsIDJkLCBkLCB1NjQsIHEpCisKKyNkZWZpbmUgX19TVDNfTEFORV9GVU5DKGludHlwZSwgcHRydHlwZSwgcmVnc3VmZml4LAkJCVwKKwkJCWxuc3VmZml4LCBmdW5jc3VmZml4LCBRKQkJCVwKKyAgX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZAkJCQkJXAorICBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQkJCQkJXAorICB2c3QzICMjIFEgIyMgX2xhbmVfICMjIGZ1bmNzdWZmaXggKGNvbnN0IHB0cnR5cGUgKnB0ciwJCVwKKwkJCQkgICAgIGludHlwZSBiLCBjb25zdCBpbnQgYykJCVwKKyAgewkJCQkJCQkJCVwKKyAgICBfX2FzbV9fICgibGQxIHt2MTYuIiAjcmVnc3VmZml4ICIgLSB2MTguIiAjcmVnc3VmZml4ICJ9LCAlMVxuXHQiCVwKKwkgICAgICJzdDMge3YxNi4iICNsbnN1ZmZpeCAiIC0gdjE4LiIgI2xuc3VmZml4ICJ9WyUyXSwgJTBcblx0IglcCisJICAgICA6ICI9USIoKihpbnR5cGUgKikgcHRyKQkJCQkJXAorCSAgICAgOiAiUSIoYiksICJpIihjKQkJCQkJCVwKKwkgICAgIDogIm1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIpOwkJCQlcCisgIH0KKworX19TVDNfTEFORV9GVU5DIChpbnQ4eDh4M190LCBpbnQ4X3QsIDhiLCBiLCBzOCwpCitfX1NUM19MQU5FX0ZVTkMgKGZsb2F0MzJ4MngzX3QsIGZsb2F0MzJfdCwgMnMsIHMsIGYzMiwpCitfX1NUM19MQU5FX0ZVTkMgKGZsb2F0NjR4MXgzX3QsIGZsb2F0NjRfdCwgMWQsIGQsIGY2NCwpCitfX1NUM19MQU5FX0ZVTkMgKHBvbHk4eDh4M190LCBwb2x5OF90LCA4YiwgYiwgcDgsKQorX19TVDNfTEFORV9GVU5DIChwb2x5MTZ4NHgzX3QsIHBvbHkxNl90LCA0aCwgaCwgcDE2LCkKK19fU1QzX0xBTkVfRlVOQyAoaW50MTZ4NHgzX3QsIGludDE2X3QsIDRoLCBoLCBzMTYsKQorX19TVDNfTEFORV9GVU5DIChpbnQzMngyeDNfdCwgaW50MzJfdCwgMnMsIHMsIHMzMiwpCitfX1NUM19MQU5FX0ZVTkMgKGludDY0eDF4M190LCBpbnQ2NF90LCAxZCwgZCwgczY0LCkKK19fU1QzX0xBTkVfRlVOQyAodWludDh4OHgzX3QsIHVpbnQ4X3QsIDhiLCBiLCB1OCwpCitfX1NUM19MQU5FX0ZVTkMgKHVpbnQxNng0eDNfdCwgdWludDE2X3QsIDRoLCBoLCB1MTYsKQorX19TVDNfTEFORV9GVU5DICh1aW50MzJ4MngzX3QsIHVpbnQzMl90LCAycywgcywgdTMyLCkKK19fU1QzX0xBTkVfRlVOQyAodWludDY0eDF4M190LCB1aW50NjRfdCwgMWQsIGQsIHU2NCwpCitfX1NUM19MQU5FX0ZVTkMgKGZsb2F0MzJ4NHgzX3QsIGZsb2F0MzJfdCwgNHMsIHMsIGYzMiwgcSkKK19fU1QzX0xBTkVfRlVOQyAoZmxvYXQ2NHgyeDNfdCwgZmxvYXQ2NF90LCAyZCwgZCwgZjY0LCBxKQorX19TVDNfTEFORV9GVU5DIChwb2x5OHgxNngzX3QsIHBvbHk4X3QsIDE2YiwgYiwgcDgsIHEpCitfX1NUM19MQU5FX0ZVTkMgKHBvbHkxNng4eDNfdCwgcG9seTE2X3QsIDhoLCBoLCBwMTYsIHEpCitfX1NUM19MQU5FX0ZVTkMgKGludDh4MTZ4M190LCBpbnQ4X3QsIDE2YiwgYiwgczgsIHEpCitfX1NUM19MQU5FX0ZVTkMgKGludDE2eDh4M190LCBpbnQxNl90LCA4aCwgaCwgczE2LCBxKQorX19TVDNfTEFORV9GVU5DIChpbnQzMng0eDNfdCwgaW50MzJfdCwgNHMsIHMsIHMzMiwgcSkKK19fU1QzX0xBTkVfRlVOQyAoaW50NjR4MngzX3QsIGludDY0X3QsIDJkLCBkLCBzNjQsIHEpCitfX1NUM19MQU5FX0ZVTkMgKHVpbnQ4eDE2eDNfdCwgdWludDhfdCwgMTZiLCBiLCB1OCwgcSkKK19fU1QzX0xBTkVfRlVOQyAodWludDE2eDh4M190LCB1aW50MTZfdCwgOGgsIGgsIHUxNiwgcSkKK19fU1QzX0xBTkVfRlVOQyAodWludDMyeDR4M190LCB1aW50MzJfdCwgNHMsIHMsIHUzMiwgcSkKK19fU1QzX0xBTkVfRlVOQyAodWludDY0eDJ4M190LCB1aW50NjRfdCwgMmQsIGQsIHU2NCwgcSkKKworI2RlZmluZSBfX1NUNF9MQU5FX0ZVTkMoaW50eXBlLCBwdHJ0eXBlLCByZWdzdWZmaXgsCQkJXAorCQkJbG5zdWZmaXgsIGZ1bmNzdWZmaXgsIFEpCQkJXAorICBfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkCQkJCQlcCisgIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCQkJCQlcCisgIHZzdDQgIyMgUSAjIyBfbGFuZV8gIyMgZnVuY3N1ZmZpeCAoY29uc3QgcHRydHlwZSAqcHRyLAkJXAorCQkJCSAgICAgaW50eXBlIGIsIGNvbnN0IGludCBjKQkJXAorICB7CQkJCQkJCQkJXAorICAgIF9fYXNtX18gKCJsZDEge3YxNi4iICNyZWdzdWZmaXggIiAtIHYxOS4iICNyZWdzdWZmaXggIn0sICUxXG5cdCIJXAorCSAgICAgInN0NCB7djE2LiIgI2xuc3VmZml4ICIgLSB2MTkuIiAjbG5zdWZmaXggIn1bJTJdLCAlMFxuXHQiCVwKKwkgICAgIDogIj1RIigqKGludHlwZSAqKSBwdHIpCQkJCQlcCisJICAgICA6ICJRIihiKSwgImkiKGMpCQkJCQkJXAorCSAgICAgOiAibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4IiwgInYxOSIpOwkJCVwKKyAgfQorCitfX1NUNF9MQU5FX0ZVTkMgKGludDh4OHg0X3QsIGludDhfdCwgOGIsIGIsIHM4LCkKK19fU1Q0X0xBTkVfRlVOQyAoZmxvYXQzMngyeDRfdCwgZmxvYXQzMl90LCAycywgcywgZjMyLCkKK19fU1Q0X0xBTkVfRlVOQyAoZmxvYXQ2NHgxeDRfdCwgZmxvYXQ2NF90LCAxZCwgZCwgZjY0LCkKK19fU1Q0X0xBTkVfRlVOQyAocG9seTh4OHg0X3QsIHBvbHk4X3QsIDhiLCBiLCBwOCwpCitfX1NUNF9MQU5FX0ZVTkMgKHBvbHkxNng0eDRfdCwgcG9seTE2X3QsIDRoLCBoLCBwMTYsKQorX19TVDRfTEFORV9GVU5DIChpbnQxNng0eDRfdCwgaW50MTZfdCwgNGgsIGgsIHMxNiwpCitfX1NUNF9MQU5FX0ZVTkMgKGludDMyeDJ4NF90LCBpbnQzMl90LCAycywgcywgczMyLCkKK19fU1Q0X0xBTkVfRlVOQyAoaW50NjR4MXg0X3QsIGludDY0X3QsIDFkLCBkLCBzNjQsKQorX19TVDRfTEFORV9GVU5DICh1aW50OHg4eDRfdCwgdWludDhfdCwgOGIsIGIsIHU4LCkKK19fU1Q0X0xBTkVfRlVOQyAodWludDE2eDR4NF90LCB1aW50MTZfdCwgNGgsIGgsIHUxNiwpCitfX1NUNF9MQU5FX0ZVTkMgKHVpbnQzMngyeDRfdCwgdWludDMyX3QsIDJzLCBzLCB1MzIsKQorX19TVDRfTEFORV9GVU5DICh1aW50NjR4MXg0X3QsIHVpbnQ2NF90LCAxZCwgZCwgdTY0LCkKK19fU1Q0X0xBTkVfRlVOQyAoZmxvYXQzMng0eDRfdCwgZmxvYXQzMl90LCA0cywgcywgZjMyLCBxKQorX19TVDRfTEFORV9GVU5DIChmbG9hdDY0eDJ4NF90LCBmbG9hdDY0X3QsIDJkLCBkLCBmNjQsIHEpCitfX1NUNF9MQU5FX0ZVTkMgKHBvbHk4eDE2eDRfdCwgcG9seThfdCwgMTZiLCBiLCBwOCwgcSkKK19fU1Q0X0xBTkVfRlVOQyAocG9seTE2eDh4NF90LCBwb2x5MTZfdCwgOGgsIGgsIHAxNiwgcSkKK19fU1Q0X0xBTkVfRlVOQyAoaW50OHgxNng0X3QsIGludDhfdCwgMTZiLCBiLCBzOCwgcSkKK19fU1Q0X0xBTkVfRlVOQyAoaW50MTZ4OHg0X3QsIGludDE2X3QsIDhoLCBoLCBzMTYsIHEpCitfX1NUNF9MQU5FX0ZVTkMgKGludDMyeDR4NF90LCBpbnQzMl90LCA0cywgcywgczMyLCBxKQorX19TVDRfTEFORV9GVU5DIChpbnQ2NHgyeDRfdCwgaW50NjRfdCwgMmQsIGQsIHM2NCwgcSkKK19fU1Q0X0xBTkVfRlVOQyAodWludDh4MTZ4NF90LCB1aW50OF90LCAxNmIsIGIsIHU4LCBxKQorX19TVDRfTEFORV9GVU5DICh1aW50MTZ4OHg0X3QsIHVpbnQxNl90LCA4aCwgaCwgdTE2LCBxKQorX19TVDRfTEFORV9GVU5DICh1aW50MzJ4NHg0X3QsIHVpbnQzMl90LCA0cywgcywgdTMyLCBxKQorX19TVDRfTEFORV9GVU5DICh1aW50NjR4Mng0X3QsIHVpbnQ2NF90LCAyZCwgZCwgdTY0LCBxKQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbHZfczMyIChpbnQzMngyX3QgYSkKK3sKKyAgaW50NjRfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJzYWRkbHAgJTAuMWQsICUxLjJzIiA6ICI9dyIocmVzdWx0KSA6ICJ3IihhKSA6ICk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkbHZfdTMyICh1aW50MzJ4Ml90IGEpCit7CisgIHVpbnQ2NF90IHJlc3VsdDsKKyAgX19hc21fXyAoInVhZGRscCAlMC4xZCwgJTEuMnMiIDogIj13IihyZXN1bHQpIDogInciKGEpIDogKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cGFkZGRfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfYWRkcGRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhfbGFuZXFfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsaF9sYW5lcXY0aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhfbGFuZXFfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsaF9sYW5lcXYyc2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhxX2xhbmVxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGhfbGFuZXF2OGhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxocV9sYW5lcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtdWxoX2xhbmVxdjRzaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhfbGFuZXFfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gIF9fYnVpbHRpbl9hYXJjaDY0X3NxcmRtdWxoX2xhbmVxdjRoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhfbGFuZXFfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FyZG11bGhfbGFuZXF2MnNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaHFfbGFuZXFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FyZG11bGhfbGFuZXF2OGhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaHFfbGFuZXFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FyZG11bGhfbGFuZXF2NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworLyogVGFibGUgaW50cmluc2ljcy4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YmwxX3A4IChwb2x5OHgxNl90IGEsIHVpbnQ4eDhfdCBiKQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgidGJsICUwLjhiLCB7JTEuMTZifSwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKGEpLCAidyIoYikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRibDFfczggKGludDh4MTZfdCBhLCBpbnQ4eDhfdCBiKQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0YmwgJTAuOGIsIHslMS4xNmJ9LCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRibDFfdTggKHVpbnQ4eDE2X3QgYSwgdWludDh4OF90IGIpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0YmwgJTAuOGIsIHslMS4xNmJ9LCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YmwxcV9wOCAocG9seTh4MTZfdCBhLCB1aW50OHgxNl90IGIpCit7CisgIHBvbHk4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgidGJsICUwLjE2YiwgeyUxLjE2Yn0sICUyLjE2YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIoYSksICJ3IihiKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRibDFxX3M4IChpbnQ4eDE2X3QgYSwgaW50OHgxNl90IGIpCit7CisgIGludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0YmwgJTAuMTZiLCB7JTEuMTZifSwgJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRibDFxX3U4ICh1aW50OHgxNl90IGEsIHVpbnQ4eDE2X3QgYikKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJ0YmwgJTAuMTZiLCB7JTEuMTZifSwgJTIuMTZiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3IihhKSwgInciKGIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YmwyX3M4IChpbnQ4eDE2eDJfdCB0YWIsIGludDh4OF90IGlkeCkKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YmwgJTAuOGIsIHt2MTYuMTZiLCB2MTcuMTZifSwgJTIuOGJcblx0IgorCSAgIDoiPXciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YmwyX3U4ICh1aW50OHgxNngyX3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YmwgJTAuOGIsIHt2MTYuMTZiLCB2MTcuMTZifSwgJTIuOGJcblx0IgorCSAgIDoiPXciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YmwyX3A4IChwb2x5OHgxNngyX3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YmwgJTAuOGIsIHt2MTYuMTZiLCB2MTcuMTZifSwgJTIuOGJcblx0IgorCSAgIDoiPXciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YmwycV9zOCAoaW50OHgxNngyX3QgdGFiLCBpbnQ4eDE2X3QgaWR4KQoreworICBpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YmwgJTAuMTZiLCB7djE2LjE2YiwgdjE3LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiI9dyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YmwycV91OCAodWludDh4MTZ4Ml90IHRhYiwgdWludDh4MTZfdCBpZHgpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YmwgJTAuMTZiLCB7djE2LjE2YiwgdjE3LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiI9dyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YmwycV9wOCAocG9seTh4MTZ4Ml90IHRhYiwgdWludDh4MTZfdCBpZHgpCit7CisgIHBvbHk4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YmwgJTAuMTZiLCB7djE2LjE2YiwgdjE3LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiI9dyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJsM19zOCAoaW50OHgxNngzX3QgdGFiLCBpbnQ4eDhfdCBpZHgpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOC4xNmJ9LCAlMVxuXHQiCisJICAgInRibCAlMC44Yiwge3YxNi4xNmIgLSB2MTguMTZifSwgJTIuOGJcblx0IgorCSAgIDoiPXciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJsM191OCAodWludDh4MTZ4M190IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOC4xNmJ9LCAlMVxuXHQiCisJICAgInRibCAlMC44Yiwge3YxNi4xNmIgLSB2MTguMTZifSwgJTIuOGJcblx0IgorCSAgIDoiPXciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJsM19wOCAocG9seTh4MTZ4M190IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgcG9seTh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOC4xNmJ9LCAlMVxuXHQiCisJICAgInRibCAlMC44Yiwge3YxNi4xNmIgLSB2MTguMTZifSwgJTIuOGJcblx0IgorCSAgIDoiPXciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJsM3FfczggKGludDh4MTZ4M190IHRhYiwgaW50OHgxNl90IGlkeCkKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOC4xNmJ9LCAlMVxuXHQiCisJICAgInRibCAlMC4xNmIsIHt2MTYuMTZiIC0gdjE4LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiI9dyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJsM3FfdTggKHVpbnQ4eDE2eDNfdCB0YWIsIHVpbnQ4eDE2X3QgaWR4KQoreworICB1aW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOC4xNmJ9LCAlMVxuXHQiCisJICAgInRibCAlMC4xNmIsIHt2MTYuMTZiIC0gdjE4LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiI9dyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJsM3FfcDggKHBvbHk4eDE2eDNfdCB0YWIsIHVpbnQ4eDE2X3QgaWR4KQoreworICBwb2x5OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOC4xNmJ9LCAlMVxuXHQiCisJICAgInRibCAlMC4xNmIsIHt2MTYuMTZiIC0gdjE4LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiI9dyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRibDRfczggKGludDh4MTZ4NF90IHRhYiwgaW50OHg4X3QgaWR4KQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTkuMTZifSwgJTFcblx0IgorCSAgICJ0YmwgJTAuOGIsIHt2MTYuMTZiIC0gdjE5LjE2Yn0sICUyLjhiXG5cdCIKKwkgICA6Ij13IihyZXN1bHQpCisJICAgOiJRIih0YWIpLCJ3IihpZHgpCisJICAgOiJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiLCAidjE5Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0Ymw0X3U4ICh1aW50OHgxNng0X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICB1aW50OHg4X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE5LjE2Yn0sICUxXG5cdCIKKwkgICAidGJsICUwLjhiLCB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMi44YlxuXHQiCisJICAgOiI9dyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4IiwgInYxOSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJsNF9wOCAocG9seTh4MTZ4NF90IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgcG9seTh4OF90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMVxuXHQiCisJICAgInRibCAlMC44Yiwge3YxNi4xNmIgLSB2MTkuMTZifSwgJTIuOGJcblx0IgorCSAgIDoiPXciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIsICJ2MTkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJsNHFfczggKGludDh4MTZ4NF90IHRhYiwgaW50OHgxNl90IGlkeCkKK3sKKyAgaW50OHgxNl90IHJlc3VsdDsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMVxuXHQiCisJICAgInRibCAlMC4xNmIsIHt2MTYuMTZiIC0gdjE5LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiI9dyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4IiwgInYxOSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRibDRxX3U4ICh1aW50OHgxNng0X3QgdGFiLCB1aW50OHgxNl90IGlkeCkKK3sKKyAgdWludDh4MTZfdCByZXN1bHQ7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTkuMTZifSwgJTFcblx0IgorCSAgICJ0YmwgJTAuMTZiLCB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMi4xNmJcblx0IgorCSAgIDoiPXciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIsICJ2MTkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0Ymw0cV9wOCAocG9seTh4MTZ4NF90IHRhYiwgdWludDh4MTZfdCBpZHgpCit7CisgIHBvbHk4eDE2X3QgcmVzdWx0OworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE5LjE2Yn0sICUxXG5cdCIKKwkgICAidGJsICUwLjE2Yiwge3YxNi4xNmIgLSB2MTkuMTZifSwgJTIuMTZiXG5cdCIKKwkgICA6Ij13IihyZXN1bHQpCisJICAgOiJRIih0YWIpLCJ3IihpZHgpCisJICAgOiJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiLCAidjE5Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJ4MV9zOCAoaW50OHg4X3QgciwgaW50OHgxNl90IHRhYiwgaW50OHg4X3QgaWR4KQoreworICBpbnQ4eDhfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgidGJ4ICUwLjhiLHslMS4xNmJ9LCUyLjhiIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3Iih0YWIpLCAidyIoaWR4KQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRieDFfdTggKHVpbnQ4eDhfdCByLCB1aW50OHgxNl90IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgdWludDh4OF90IHJlc3VsdCA9IHI7CisgIF9fYXNtX18gKCJ0YnggJTAuOGIseyUxLjE2Yn0sJTIuOGIiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKHRhYiksICJ3IihpZHgpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJ4MV9wOCAocG9seTh4OF90IHIsIHBvbHk4eDE2X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICBwb2x5OHg4X3QgcmVzdWx0ID0gcjsKKyAgX19hc21fXyAoInRieCAlMC44Yix7JTEuMTZifSwlMi44YiIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIodGFiKSwgInciKGlkeCkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngxcV9zOCAoaW50OHgxNl90IHIsIGludDh4MTZfdCB0YWIsIGludDh4MTZfdCBpZHgpCit7CisgIGludDh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgidGJ4ICUwLjE2Yix7JTEuMTZifSwlMi4xNmIiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKHRhYiksICJ3IihpZHgpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRieDFxX3U4ICh1aW50OHgxNl90IHIsIHVpbnQ4eDE2X3QgdGFiLCB1aW50OHgxNl90IGlkeCkKK3sKKyAgdWludDh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgidGJ4ICUwLjE2Yix7JTEuMTZifSwlMi4xNmIiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKHRhYiksICJ3IihpZHgpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRieDFxX3A4IChwb2x5OHgxNl90IHIsIHBvbHk4eDE2X3QgdGFiLCB1aW50OHgxNl90IGlkeCkKK3sKKyAgcG9seTh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgidGJ4ICUwLjE2Yix7JTEuMTZifSwlMi4xNmIiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKHRhYiksICJ3IihpZHgpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngyX3M4IChpbnQ4eDhfdCByLCBpbnQ4eDE2eDJfdCB0YWIsIGludDh4OF90IGlkeCkKK3sKKyAgaW50OHg4X3QgcmVzdWx0ID0gcjsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiwgdjE3LjE2Yn0sICUxXG5cdCIKKwkgICAidGJ4ICUwLjhiLCB7djE2LjE2YiwgdjE3LjE2Yn0sICUyLjhiXG5cdCIKKwkgICA6Iit3IihyZXN1bHQpCisJICAgOiJRIih0YWIpLCJ3IihpZHgpCisJICAgOiJtZW1vcnkiLCAidjE2IiwgInYxNyIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJ4Ml91OCAodWludDh4OF90IHIsIHVpbnQ4eDE2eDJfdCB0YWIsIHVpbnQ4eDhfdCBpZHgpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YnggJTAuOGIsIHt2MTYuMTZiLCB2MTcuMTZifSwgJTIuOGJcblx0IgorCSAgIDoiK3ciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngyX3A4IChwb2x5OHg4X3QgciwgcG9seTh4MTZ4Ml90IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgcG9seTh4OF90IHJlc3VsdCA9IHI7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIsIHYxNy4xNmJ9LCAlMVxuXHQiCisJICAgInRieCAlMC44Yiwge3YxNi4xNmIsIHYxNy4xNmJ9LCAlMi44YlxuXHQiCisJICAgOiIrdyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJ4MnFfczggKGludDh4MTZfdCByLCBpbnQ4eDE2eDJfdCB0YWIsIGludDh4MTZfdCBpZHgpCit7CisgIGludDh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YnggJTAuMTZiLCB7djE2LjE2YiwgdjE3LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiIrdyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngycV91OCAodWludDh4MTZfdCByLCB1aW50OHgxNngyX3QgdGFiLCB1aW50OHgxNl90IGlkeCkKK3sKKyAgdWludDh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YnggJTAuMTZiLCB7djE2LjE2YiwgdjE3LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiIrdyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngycV9wOCAocG9seTh4MTZfdCByLCBwb2x5OHgxNngyX3QgdGFiLCB1aW50OHgxNl90IGlkeCkKK3sKKyAgcG9seTh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiLCB2MTcuMTZifSwgJTFcblx0IgorCSAgICJ0YnggJTAuMTZiLCB7djE2LjE2YiwgdjE3LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiIrdyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngzX3M4IChpbnQ4eDhfdCByLCBpbnQ4eDE2eDNfdCB0YWIsIGludDh4OF90IGlkeCkKK3sKKyAgaW50OHg4X3QgcmVzdWx0ID0gcjsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOC4xNmJ9LCAlMVxuXHQiCisJICAgInRieCAlMC44Yiwge3YxNi4xNmIgLSB2MTguMTZifSwgJTIuOGJcblx0IgorCSAgIDoiK3ciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJ4M191OCAodWludDh4OF90IHIsIHVpbnQ4eDE2eDNfdCB0YWIsIHVpbnQ4eDhfdCBpZHgpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE4LjE2Yn0sICUxXG5cdCIKKwkgICAidGJ4ICUwLjhiLCB7djE2LjE2YiAtIHYxOC4xNmJ9LCAlMi44YlxuXHQiCisJICAgOiIrdyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngzX3A4IChwb2x5OHg4X3QgciwgcG9seTh4MTZ4M190IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgcG9seTh4OF90IHJlc3VsdCA9IHI7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTguMTZifSwgJTFcblx0IgorCSAgICJ0YnggJTAuOGIsIHt2MTYuMTZiIC0gdjE4LjE2Yn0sICUyLjhiXG5cdCIKKwkgICA6Iit3IihyZXN1bHQpCisJICAgOiJRIih0YWIpLCJ3IihpZHgpCisJICAgOiJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJ4M3FfczggKGludDh4MTZfdCByLCBpbnQ4eDE2eDNfdCB0YWIsIGludDh4MTZfdCBpZHgpCit7CisgIGludDh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE4LjE2Yn0sICUxXG5cdCIKKwkgICAidGJ4ICUwLjE2Yiwge3YxNi4xNmIgLSB2MTguMTZifSwgJTIuMTZiXG5cdCIKKwkgICA6Iit3IihyZXN1bHQpCisJICAgOiJRIih0YWIpLCJ3IihpZHgpCisJICAgOiJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngzcV91OCAodWludDh4MTZfdCByLCB1aW50OHgxNngzX3QgdGFiLCB1aW50OHgxNl90IGlkeCkKK3sKKyAgdWludDh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE4LjE2Yn0sICUxXG5cdCIKKwkgICAidGJ4ICUwLjE2Yiwge3YxNi4xNmIgLSB2MTguMTZifSwgJTIuMTZiXG5cdCIKKwkgICA6Iit3IihyZXN1bHQpCisJICAgOiJRIih0YWIpLCJ3IihpZHgpCisJICAgOiJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0YngzcV9wOCAocG9seTh4MTZfdCByLCBwb2x5OHgxNngzX3QgdGFiLCB1aW50OHgxNl90IGlkeCkKK3sKKyAgcG9seTh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE4LjE2Yn0sICUxXG5cdCIKKwkgICAidGJ4ICUwLjE2Yiwge3YxNi4xNmIgLSB2MTguMTZifSwgJTIuMTZiXG5cdCIKKwkgICA6Iit3IihyZXN1bHQpCisJICAgOiJRIih0YWIpLCJ3IihpZHgpCisJICAgOiJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnF0Yng0X3M4IChpbnQ4eDhfdCByLCBpbnQ4eDE2eDRfdCB0YWIsIGludDh4OF90IGlkeCkKK3sKKyAgaW50OHg4X3QgcmVzdWx0ID0gcjsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMVxuXHQiCisJICAgInRieCAlMC44Yiwge3YxNi4xNmIgLSB2MTkuMTZifSwgJTIuOGJcblx0IgorCSAgIDoiK3ciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIsICJ2MTkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRieDRfdTggKHVpbnQ4eDhfdCByLCB1aW50OHgxNng0X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICB1aW50OHg4X3QgcmVzdWx0ID0gcjsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMVxuXHQiCisJICAgInRieCAlMC44Yiwge3YxNi4xNmIgLSB2MTkuMTZifSwgJTIuOGJcblx0IgorCSAgIDoiK3ciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIsICJ2MTkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRieDRfcDggKHBvbHk4eDhfdCByLCBwb2x5OHgxNng0X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICBwb2x5OHg4X3QgcmVzdWx0ID0gcjsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMVxuXHQiCisJICAgInRieCAlMC44Yiwge3YxNi4xNmIgLSB2MTkuMTZifSwgJTIuOGJcblx0IgorCSAgIDoiK3ciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIsICJ2MTkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJ4NHFfczggKGludDh4MTZfdCByLCBpbnQ4eDE2eDRfdCB0YWIsIGludDh4MTZfdCBpZHgpCit7CisgIGludDh4MTZfdCByZXN1bHQgPSByOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE5LjE2Yn0sICUxXG5cdCIKKwkgICAidGJ4ICUwLjE2Yiwge3YxNi4xNmIgLSB2MTkuMTZifSwgJTIuMTZiXG5cdCIKKwkgICA6Iit3IihyZXN1bHQpCisJICAgOiJRIih0YWIpLCJ3IihpZHgpCisJICAgOiJtZW1vcnkiLCAidjE2IiwgInYxNyIsICJ2MTgiLCAidjE5Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxdGJ4NHFfdTggKHVpbnQ4eDE2X3QgciwgdWludDh4MTZ4NF90IHRhYiwgdWludDh4MTZfdCBpZHgpCit7CisgIHVpbnQ4eDE2X3QgcmVzdWx0ID0gcjsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMVxuXHQiCisJICAgInRieCAlMC4xNmIsIHt2MTYuMTZiIC0gdjE5LjE2Yn0sICUyLjE2YlxuXHQiCisJICAgOiIrdyIocmVzdWx0KQorCSAgIDoiUSIodGFiKSwidyIoaWR4KQorCSAgIDoibWVtb3J5IiwgInYxNiIsICJ2MTciLCAidjE4IiwgInYxOSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXRieDRxX3A4IChwb2x5OHgxNl90IHIsIHBvbHk4eDE2eDRfdCB0YWIsIHVpbnQ4eDE2X3QgaWR4KQoreworICBwb2x5OHgxNl90IHJlc3VsdCA9IHI7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTkuMTZifSwgJTFcblx0IgorCSAgICJ0YnggJTAuMTZiLCB7djE2LjE2YiAtIHYxOS4xNmJ9LCAlMi4xNmJcblx0IgorCSAgIDoiK3ciKHJlc3VsdCkKKwkgICA6IlEiKHRhYiksInciKGlkeCkKKwkgICA6Im1lbW9yeSIsICJ2MTYiLCAidjE3IiwgInYxOCIsICJ2MTkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogVjcgbGVnYWN5IHRhYmxlIGludHJpbnNpY3MuICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRibDFfczggKGludDh4OF90IHRhYiwgaW50OHg4X3QgaWR4KQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIGludDh4MTZfdCB0ZW1wID0gdmNvbWJpbmVfczggKHRhYiwgdmNyZWF0ZV9zOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJ0YmwgJTAuOGIsIHslMS4xNmJ9LCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIodGVtcCksICJ3IihpZHgpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YmwxX3U4ICh1aW50OHg4X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICB1aW50OHg4X3QgcmVzdWx0OworICB1aW50OHgxNl90IHRlbXAgPSB2Y29tYmluZV91OCAodGFiLCB2Y3JlYXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoInRibCAlMC44YiwgeyUxLjE2Yn0sICUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3Iih0ZW1wKSwgInciKGlkeCkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRibDFfcDggKHBvbHk4eDhfdCB0YWIsIHVpbnQ4eDhfdCBpZHgpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIHBvbHk4eDE2X3QgdGVtcCA9IHZjb21iaW5lX3A4ICh0YWIsIHZjcmVhdGVfcDggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgidGJsICUwLjhiLCB7JTEuMTZifSwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKHRlbXApLCAidyIoaWR4KQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YmwyX3M4IChpbnQ4eDh4Ml90IHRhYiwgaW50OHg4X3QgaWR4KQoreworICBpbnQ4eDhfdCByZXN1bHQ7CisgIGludDh4MTZfdCB0ZW1wID0gdmNvbWJpbmVfczggKHRhYi52YWxbMF0sIHRhYi52YWxbMV0pOworICBfX2FzbV9fICgidGJsICUwLjhiLCB7JTEuMTZifSwgJTIuOGIiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogInciKHRlbXApLCAidyIoaWR4KQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJsMl91OCAodWludDh4OHgyX3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICB1aW50OHg4X3QgcmVzdWx0OworICB1aW50OHgxNl90IHRlbXAgPSB2Y29tYmluZV91OCAodGFiLnZhbFswXSwgdGFiLnZhbFsxXSk7CisgIF9fYXNtX18gKCJ0YmwgJTAuOGIsIHslMS4xNmJ9LCAlMi44YiIKKyAgICAgICAgICAgOiAiPXciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIodGVtcCksICJ3IihpZHgpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YmwyX3A4IChwb2x5OHg4eDJfdCB0YWIsIHVpbnQ4eDhfdCBpZHgpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIHBvbHk4eDE2X3QgdGVtcCA9IHZjb21iaW5lX3A4ICh0YWIudmFsWzBdLCB0YWIudmFsWzFdKTsKKyAgX19hc21fXyAoInRibCAlMC44YiwgeyUxLjE2Yn0sICUyLjhiIgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3Iih0ZW1wKSwgInciKGlkeCkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJsM19zOCAoaW50OHg4eDNfdCB0YWIsIGludDh4OF90IGlkeCkKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBpbnQ4eDE2eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3M4ICh0YWIudmFsWzBdLCB0YWIudmFsWzFdKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9zOCAodGFiLnZhbFsyXSwgdmNyZWF0ZV9zOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTcuMTZiIH0sICUxXG5cdCIKKwkgICAidGJsICUwLjhiLCB7djE2LjE2YiAtIHYxNy4xNmJ9LCAlMi44YlxuXHQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIlEiKHRlbXApLCAidyIoaWR4KQorICAgICAgICAgICA6ICJ2MTYiLCAidjE3IiwgIm1lbW9yeSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YmwzX3U4ICh1aW50OHg4eDNfdCB0YWIsIHVpbnQ4eDhfdCBpZHgpCit7CisgIHVpbnQ4eDhfdCByZXN1bHQ7CisgIHVpbnQ4eDE2eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3U4ICh0YWIudmFsWzBdLCB0YWIudmFsWzFdKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91OCAodGFiLnZhbFsyXSwgdmNyZWF0ZV91OCAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTcuMTZiIH0sICUxXG5cdCIKKwkgICAidGJsICUwLjhiLCB7djE2LjE2YiAtIHYxNy4xNmJ9LCAlMi44YlxuXHQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIlEiKHRlbXApLCAidyIoaWR4KQorICAgICAgICAgICA6ICJ2MTYiLCAidjE3IiwgIm1lbW9yeSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YmwzX3A4IChwb2x5OHg4eDNfdCB0YWIsIHVpbnQ4eDhfdCBpZHgpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIHBvbHk4eDE2eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3A4ICh0YWIudmFsWzBdLCB0YWIudmFsWzFdKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9wOCAodGFiLnZhbFsyXSwgdmNyZWF0ZV9wOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTcuMTZiIH0sICUxXG5cdCIKKwkgICAidGJsICUwLjhiLCB7djE2LjE2YiAtIHYxNy4xNmJ9LCAlMi44YlxuXHQiCisgICAgICAgICAgIDogIj13IihyZXN1bHQpCisgICAgICAgICAgIDogIlEiKHRlbXApLCAidyIoaWR4KQorICAgICAgICAgICA6ICJ2MTYiLCAidjE3IiwgIm1lbW9yeSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRibDRfczggKGludDh4OHg0X3QgdGFiLCBpbnQ4eDhfdCBpZHgpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgaW50OHgxNngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9zOCAodGFiLnZhbFswXSwgdGFiLnZhbFsxXSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfczggKHRhYi52YWxbMl0sIHRhYi52YWxbM10pOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE3LjE2YiB9LCAlMVxuXHQiCisJICAgInRibCAlMC44Yiwge3YxNi4xNmIgLSB2MTcuMTZifSwgJTIuOGJcblx0IgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJRIih0ZW1wKSwgInciKGlkeCkKKyAgICAgICAgICAgOiAidjE2IiwgInYxNyIsICJtZW1vcnkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJsNF91OCAodWludDh4OHg0X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICB1aW50OHg4X3QgcmVzdWx0OworICB1aW50OHgxNngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV91OCAodGFiLnZhbFswXSwgdGFiLnZhbFsxXSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfdTggKHRhYi52YWxbMl0sIHRhYi52YWxbM10pOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE3LjE2YiB9LCAlMVxuXHQiCisJICAgInRibCAlMC44Yiwge3YxNi4xNmIgLSB2MTcuMTZifSwgJTIuOGJcblx0IgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJRIih0ZW1wKSwgInciKGlkeCkKKyAgICAgICAgICAgOiAidjE2IiwgInYxNyIsICJtZW1vcnkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJsNF9wOCAocG9seTh4OHg0X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBwb2x5OHgxNngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9wOCAodGFiLnZhbFswXSwgdGFiLnZhbFsxXSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfcDggKHRhYi52YWxbMl0sIHRhYi52YWxbM10pOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE3LjE2YiB9LCAlMVxuXHQiCisJICAgInRibCAlMC44Yiwge3YxNi4xNmIgLSB2MTcuMTZifSwgJTIuOGJcblx0IgorICAgICAgICAgICA6ICI9dyIocmVzdWx0KQorICAgICAgICAgICA6ICJRIih0ZW1wKSwgInciKGlkeCkKKyAgICAgICAgICAgOiAidjE2IiwgInYxNyIsICJtZW1vcnkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YngxX3M4IChpbnQ4eDhfdCByLCBpbnQ4eDhfdCB0YWIsIGludDh4OF90IGlkeCkKK3sKKyAgaW50OHg4X3QgcmVzdWx0OworICBpbnQ4eDhfdCB0bXAxOworICBpbnQ4eDE2X3QgdGVtcCA9IHZjb21iaW5lX3M4ICh0YWIsIHZjcmVhdGVfczggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgibW92aSAlMC44YiwgOFxuXHQiCisJICAgImNtaHMgJTAuOGIsICUzLjhiLCAlMC44YlxuXHQiCisJICAgInRibCAlMS44YiwgeyUyLjE2Yn0sICUzLjhiXG5cdCIKKwkgICAiYnNsICUwLjhiLCAlNC44YiwgJTEuOGJcblx0IgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KSwgIj0mdyIodG1wMSkKKyAgICAgICAgICAgOiAidyIodGVtcCksICJ3IihpZHgpLCAidyIocikKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDFfdTggKHVpbnQ4eDhfdCByLCB1aW50OHg4X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICB1aW50OHg4X3QgcmVzdWx0OworICB1aW50OHg4X3QgdG1wMTsKKyAgdWludDh4MTZfdCB0ZW1wID0gdmNvbWJpbmVfdTggKHRhYiwgdmNyZWF0ZV91OCAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJtb3ZpICUwLjhiLCA4XG5cdCIKKwkgICAiY21ocyAlMC44YiwgJTMuOGIsICUwLjhiXG5cdCIKKwkgICAidGJsICUxLjhiLCB7JTIuMTZifSwgJTMuOGJcblx0IgorCSAgICJic2wgJTAuOGIsICU0LjhiLCAlMS44YlxuXHQiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpLCAiPSZ3Iih0bXAxKQorICAgICAgICAgICA6ICJ3Iih0ZW1wKSwgInciKGlkeCksICJ3IihyKQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJ4MV9wOCAocG9seTh4OF90IHIsIHBvbHk4eDhfdCB0YWIsIHVpbnQ4eDhfdCBpZHgpCit7CisgIHBvbHk4eDhfdCByZXN1bHQ7CisgIHBvbHk4eDhfdCB0bXAxOworICBwb2x5OHgxNl90IHRlbXAgPSB2Y29tYmluZV9wOCAodGFiLCB2Y3JlYXRlX3A4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoIm1vdmkgJTAuOGIsIDhcblx0IgorCSAgICJjbWhzICUwLjhiLCAlMy44YiwgJTAuOGJcblx0IgorCSAgICJ0YmwgJTEuOGIsIHslMi4xNmJ9LCAlMy44YlxuXHQiCisJICAgImJzbCAlMC44YiwgJTQuOGIsICUxLjhiXG5cdCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCksICI9JnciKHRtcDEpCisgICAgICAgICAgIDogInciKHRlbXApLCAidyIoaWR4KSwgInciKHIpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDJfczggKGludDh4OF90IHIsIGludDh4OHgyX3QgdGFiLCBpbnQ4eDhfdCBpZHgpCit7CisgIGludDh4OF90IHJlc3VsdCA9IHI7CisgIGludDh4MTZfdCB0ZW1wID0gdmNvbWJpbmVfczggKHRhYi52YWxbMF0sIHRhYi52YWxbMV0pOworICBfX2FzbV9fICgidGJ4ICUwLjhiLCB7JTEuMTZifSwgJTIuOGIiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogInciKHRlbXApLCAidyIoaWR4KQorICAgICAgICAgICA6IC8qIE5vIGNsb2JiZXJzICovKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJ4Ml91OCAodWludDh4OF90IHIsIHVpbnQ4eDh4Ml90IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgdWludDh4OF90IHJlc3VsdCA9IHI7CisgIHVpbnQ4eDE2X3QgdGVtcCA9IHZjb21iaW5lX3U4ICh0YWIudmFsWzBdLCB0YWIudmFsWzFdKTsKKyAgX19hc21fXyAoInRieCAlMC44YiwgeyUxLjE2Yn0sICUyLjhiIgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJ3Iih0ZW1wKSwgInciKGlkeCkKKyAgICAgICAgICAgOiAvKiBObyBjbG9iYmVycyAqLyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDJfcDggKHBvbHk4eDhfdCByLCBwb2x5OHg4eDJfdCB0YWIsIHVpbnQ4eDhfdCBpZHgpCit7CisgIHBvbHk4eDhfdCByZXN1bHQgPSByOworICBwb2x5OHgxNl90IHRlbXAgPSB2Y29tYmluZV9wOCAodGFiLnZhbFswXSwgdGFiLnZhbFsxXSk7CisgIF9fYXNtX18gKCJ0YnggJTAuOGIsIHslMS4xNmJ9LCAlMi44YiIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAidyIodGVtcCksICJ3IihpZHgpCisgICAgICAgICAgIDogLyogTm8gY2xvYmJlcnMgKi8pOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRieDNfczggKGludDh4OF90IHIsIGludDh4OHgzX3QgdGFiLCBpbnQ4eDhfdCBpZHgpCit7CisgIGludDh4OF90IHJlc3VsdDsKKyAgaW50OHg4X3QgdG1wMTsKKyAgaW50OHgxNngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9zOCAodGFiLnZhbFswXSwgdGFiLnZhbFsxXSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfczggKHRhYi52YWxbMl0sIHZjcmVhdGVfczggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMHgwKSkpOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE3LjE2Yn0sICUyXG5cdCIKKwkgICAibW92aSAlMC44YiwgMjRcblx0IgorCSAgICJjbWhzICUwLjhiLCAlMy44YiwgJTAuOGJcblx0IgorCSAgICJ0YmwgJTEuOGIsIHt2MTYuMTZiIC0gdjE3LjE2Yn0sICUzLjhiXG5cdCIKKwkgICAiYnNsICUwLjhiLCAlNC44YiwgJTEuOGJcblx0IgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KSwgIj0mdyIodG1wMSkKKyAgICAgICAgICAgOiAiUSIodGVtcCksICJ3IihpZHgpLCAidyIocikKKyAgICAgICAgICAgOiAidjE2IiwgInYxNyIsICJtZW1vcnkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJ4M191OCAodWludDh4OF90IHIsIHVpbnQ4eDh4M190IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgdWludDh4OF90IHJlc3VsdDsKKyAgdWludDh4OF90IHRtcDE7CisgIHVpbnQ4eDE2eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3U4ICh0YWIudmFsWzBdLCB0YWIudmFsWzFdKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91OCAodGFiLnZhbFsyXSwgdmNyZWF0ZV91OCAoX19BQVJDSDY0X1VJTlQ2NF9DICgweDApKSk7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTcuMTZifSwgJTJcblx0IgorCSAgICJtb3ZpICUwLjhiLCAyNFxuXHQiCisJICAgImNtaHMgJTAuOGIsICUzLjhiLCAlMC44YlxuXHQiCisJICAgInRibCAlMS44Yiwge3YxNi4xNmIgLSB2MTcuMTZifSwgJTMuOGJcblx0IgorCSAgICJic2wgJTAuOGIsICU0LjhiLCAlMS44YlxuXHQiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpLCAiPSZ3Iih0bXAxKQorICAgICAgICAgICA6ICJRIih0ZW1wKSwgInciKGlkeCksICJ3IihyKQorICAgICAgICAgICA6ICJ2MTYiLCAidjE3IiwgIm1lbW9yeSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0YngzX3A4IChwb2x5OHg4X3QgciwgcG9seTh4OHgzX3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICBwb2x5OHg4X3QgcmVzdWx0OworICBwb2x5OHg4X3QgdG1wMTsKKyAgcG9seTh4MTZ4Ml90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfcDggKHRhYi52YWxbMF0sIHRhYi52YWxbMV0pOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3A4ICh0YWIudmFsWzJdLCB2Y3JlYXRlX3A4IChfX0FBUkNINjRfVUlOVDY0X0MgKDB4MCkpKTsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxNy4xNmJ9LCAlMlxuXHQiCisJICAgIm1vdmkgJTAuOGIsIDI0XG5cdCIKKwkgICAiY21ocyAlMC44YiwgJTMuOGIsICUwLjhiXG5cdCIKKwkgICAidGJsICUxLjhiLCB7djE2LjE2YiAtIHYxNy4xNmJ9LCAlMy44YlxuXHQiCisJICAgImJzbCAlMC44YiwgJTQuOGIsICUxLjhiXG5cdCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCksICI9JnciKHRtcDEpCisgICAgICAgICAgIDogIlEiKHRlbXApLCAidyIoaWR4KSwgInciKHIpCisgICAgICAgICAgIDogInYxNiIsICJ2MTciLCAibWVtb3J5Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJ4NF9zOCAoaW50OHg4X3QgciwgaW50OHg4eDRfdCB0YWIsIGludDh4OF90IGlkeCkKK3sKKyAgaW50OHg4X3QgcmVzdWx0ID0gcjsKKyAgaW50OHgxNngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9zOCAodGFiLnZhbFswXSwgdGFiLnZhbFsxXSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfczggKHRhYi52YWxbMl0sIHRhYi52YWxbM10pOworICBfX2FzbV9fICgibGQxIHt2MTYuMTZiIC0gdjE3LjE2YiB9LCAlMVxuXHQiCisJICAgInRieCAlMC44Yiwge3YxNi4xNmIgLSB2MTcuMTZifSwgJTIuOGJcblx0IgorICAgICAgICAgICA6ICIrdyIocmVzdWx0KQorICAgICAgICAgICA6ICJRIih0ZW1wKSwgInciKGlkeCkKKyAgICAgICAgICAgOiAidjE2IiwgInYxNyIsICJtZW1vcnkiKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dGJ4NF91OCAodWludDh4OF90IHIsIHVpbnQ4eDh4NF90IHRhYiwgdWludDh4OF90IGlkeCkKK3sKKyAgdWludDh4OF90IHJlc3VsdCA9IHI7CisgIHVpbnQ4eDE2eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3U4ICh0YWIudmFsWzBdLCB0YWIudmFsWzFdKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91OCAodGFiLnZhbFsyXSwgdGFiLnZhbFszXSk7CisgIF9fYXNtX18gKCJsZDEge3YxNi4xNmIgLSB2MTcuMTZiIH0sICUxXG5cdCIKKwkgICAidGJ4ICUwLjhiLCB7djE2LjE2YiAtIHYxNy4xNmJ9LCAlMi44YlxuXHQiCisgICAgICAgICAgIDogIit3IihyZXN1bHQpCisgICAgICAgICAgIDogIlEiKHRlbXApLCAidyIoaWR4KQorICAgICAgICAgICA6ICJ2MTYiLCAidjE3IiwgIm1lbW9yeSIpOworICByZXR1cm4gcmVzdWx0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0Yng0X3A4IChwb2x5OHg4X3QgciwgcG9seTh4OHg0X3QgdGFiLCB1aW50OHg4X3QgaWR4KQoreworICBwb2x5OHg4X3QgcmVzdWx0ID0gcjsKKyAgcG9seTh4MTZ4Ml90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfcDggKHRhYi52YWxbMF0sIHRhYi52YWxbMV0pOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3A4ICh0YWIudmFsWzJdLCB0YWIudmFsWzNdKTsKKyAgX19hc21fXyAoImxkMSB7djE2LjE2YiAtIHYxNy4xNmIgfSwgJTFcblx0IgorCSAgICJ0YnggJTAuOGIsIHt2MTYuMTZiIC0gdjE3LjE2Yn0sICUyLjhiXG5cdCIKKyAgICAgICAgICAgOiAiK3ciKHJlc3VsdCkKKyAgICAgICAgICAgOiAiUSIodGVtcCksICJ3IihpZHgpCisgICAgICAgICAgIDogInYxNiIsICJ2MTciLCAibWVtb3J5Iik7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEVuZCBvZiB0ZW1wb3JhcnkgaW5saW5lIGFzbS4gICovCisKKy8qIFN0YXJ0IG9mIG9wdGltYWwgaW1wbGVtZW50YXRpb25zIGluIGFwcHJvdmVkIG9yZGVyLiAgKi8KKworLyogdmFicyAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYnNfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hYnN2MnNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic19mNjQgKGZsb2F0NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic19zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfYWJzdjhxaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJzX3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2Fic3Y0aGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic19zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hYnN2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYnNfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2xsYWJzIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic3FfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hYnN2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic3FfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hYnN2MmRmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYnNxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfYWJzdjE2cWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFic3FfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfYWJzdjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWJzcV9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9hYnN2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhYnNxX3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2Fic3YyZGkgKF9fYSk7Cit9CisKKy8qIHZhZGQgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkZF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgKyBfX2I7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGRkX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hICsgX19iOworfQorCisvKiB2YWRkdiAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR2X3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0X2xhbmVfczggKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NwbHVzX3Y4cWkgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkdl9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0X2xhbmVfczE2IChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zcGx1c192NGhpIChfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHZfczMyIChpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gdmdldF9sYW5lX3MzMiAoX19idWlsdGluX2FhcmNoNjRfcmVkdWNfc3BsdXNfdjJzaSAoX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR2X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gdmdldF9sYW5lX3U4ICgodWludDh4OF90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191cGx1c192OHFpICgoaW50OHg4X3QpIF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHZfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRfbGFuZV91MTYgKCh1aW50MTZ4NF90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191cGx1c192NGhpICgoaW50MTZ4NF90KSBfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR2X3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0X2xhbmVfdTMyICgodWludDMyeDJfdCkKKwkJX19idWlsdGluX2FhcmNoNjRfcmVkdWNfdXBsdXNfdjJzaSAoKGludDMyeDJfdCkgX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmFkZHZxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9zOCAoX19idWlsdGluX2FhcmNoNjRfcmVkdWNfc3BsdXNfdjE2cWkgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkdnFfczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9zMTYgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NwbHVzX3Y4aGkgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkdnFfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9zMzIgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NwbHVzX3Y0c2kgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkdnFfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9zNjQgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NwbHVzX3YyZGkgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkdnFfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV91OCAoKHVpbnQ4eDE2X3QpCisJCV9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3VwbHVzX3YxNnFpICgoaW50OHgxNl90KSBfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR2cV91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV91MTYgKCh1aW50MTZ4OF90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191cGx1c192OGhpICgoaW50MTZ4OF90KSBfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR2cV91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV91MzIgKCh1aW50MzJ4NF90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191cGx1c192NHNpICgoaW50MzJ4NF90KSBfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR2cV91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV91NjQgKCh1aW50NjR4Ml90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191cGx1c192MmRpICgoaW50NjR4Ml90KSBfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkdl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgZmxvYXQzMngyX3QgdCA9IF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NwbHVzX3Yyc2YgKF9fYSk7CisgIHJldHVybiB2Z2V0X2xhbmVfZjMyICh0LCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2YWRkdnFfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIGZsb2F0MzJ4NF90IHQgPSBfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zcGx1c192NHNmIChfX2EpOworICByZXR1cm4gdmdldHFfbGFuZV9mMzIgKHQsIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZhZGR2cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgZmxvYXQ2NHgyX3QgdCA9IF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NwbHVzX3YyZGYgKF9fYSk7CisgIHJldHVybiB2Z2V0cV9sYW5lX2Y2NCAodCwgMCk7Cit9CisKKy8qIHZjYWdlICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhZ2VzX2YzMiAoZmxvYXQzMl90IF9fYSwgZmxvYXQzMl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX19hKSA+PSBfX2J1aWx0aW5fZmFic2YgKF9fYikgPyAtMSA6IDA7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjYWdlX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiB2YWJzX2YzMiAoX19hKSA+PSB2YWJzX2YzMiAoX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhZ2VxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiB2YWJzcV9mMzIgKF9fYSkgPj0gdmFic3FfZjMyIChfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhZ2VkX2Y2NCAoZmxvYXQ2NF90IF9fYSwgZmxvYXQ2NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX2EpID49IF9fYnVpbHRpbl9mYWJzIChfX2IpID8gLTEgOiAwOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2FnZXFfZjY0IChmbG9hdDY0eDJfdCBfX2EsIGZsb2F0NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIHZhYnNxX2Y2NCAoX19hKSA+PSB2YWJzcV9mNjQgKF9fYik7Cit9CisKKy8qIHZjYWd0ICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhZ3RzX2YzMiAoZmxvYXQzMl90IF9fYSwgZmxvYXQzMl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAoX19hKSA+IF9fYnVpbHRpbl9mYWJzZiAoX19iKSA/IC0xIDogMDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhZ3RfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIHZhYnNfZjMyIChfX2EpID4gdmFic19mMzIgKF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjYWd0cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gdmFic3FfZjMyIChfX2EpID4gdmFic3FfZjMyIChfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhZ3RkX2Y2NCAoZmxvYXQ2NF90IF9fYSwgZmxvYXQ2NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX2EpID4gX19idWlsdGluX2ZhYnMgKF9fYikgPyAtMSA6IDA7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjYWd0cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gdmFic3FfZjY0IChfX2EpID4gdmFic3FfZjY0IChfX2IpOworfQorCisvKiB2Y2FsZSAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhbGVfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIHZhYnNfZjMyIChfX2EpIDw9IHZhYnNfZjMyIChfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2FsZXFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIHZhYnNxX2YzMiAoX19hKSA8PSB2YWJzcV9mMzIgKF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjYWxlcV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gdmFic3FfZjY0IChfX2EpIDw9IHZhYnNxX2Y2NCAoX19iKTsKK30KKworLyogdmNhbHQgICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjYWx0X2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiB2YWJzX2YzMiAoX19hKSA8IHZhYnNfZjMyIChfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2FsdHFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIHZhYnNxX2YzMiAoX19hKSA8IHZhYnNxX2YzMiAoX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNhbHRxX2Y2NCAoZmxvYXQ2NHgyX3QgX19hLCBmbG9hdDY0eDJfdCBfX2IpCit7CisgIHJldHVybiB2YWJzcV9mNjQgKF9fYSkgPCB2YWJzcV9mNjQgKF9fYik7Cit9CisKKy8qIHZjZXEgLSB2ZWN0b3IuICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXYyc2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcV9mNjQgKGZsb2F0NjR4MV90IF9fYSwgZmxvYXQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hID09IF9fYiA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcV9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcV9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA9PSBfX2IgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjhxaSAoKGludDh4OF90KSBfX2EsCisJCQkJCQkgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcV91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA9PSBfX2IgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxcV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2NHNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFxX2Y2NCAoZmxvYXQ2NHgyX3QgX19hLCBmbG9hdDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXYyZGYgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXFfcDggKHBvbHk4eDE2X3QgX19hLCBwb2x5OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxcV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjJkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxcV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2MTZxaSAoKGludDh4MTZfdCkgX19hLAorCQkJCQkJICAgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgKGludDE2eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXY0c2kgKChpbnQzMng0X3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXYyZGkgKChpbnQ2NHgyX3QpIF9fYSwKKwkJCQkJCSAgKGludDY0eDJfdCkgX19iKTsKK30KKworLyogdmNlcSAtIHNjYWxhci4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2Vxc19mMzIgKGZsb2F0MzJfdCBfX2EsIGZsb2F0MzJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPT0gX19iID8gLTEgOiAwOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxZF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPT0gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcWRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPT0gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXFkX2Y2NCAoZmxvYXQ2NF90IF9fYSwgZmxvYXQ2NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA9PSBfX2IgPyAtMWxsIDogMGxsOworfQorCisvKiB2Y2VxeiAtIHZlY3Rvci4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICBmbG9hdDMyeDJfdCBfX2IgPSB7MC4wZiwgMC4wZn07CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXYyc2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpfZjY0IChmbG9hdDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPT0gMC4wID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2Vxel9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcG9seTh4OF90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpfczggKGludDh4OF90IF9fYSkKK3sKKyAgaW50OHg4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpfczE2IChpbnQxNng0X3QgX19hKQoreworICBpbnQxNng0X3QgX19iID0gezAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgaW50MzJ4Ml90IF9fYiA9IHswLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2Vxel9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPT0gMGxsID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2Vxel91OCAodWludDh4OF90IF9fYSkKK3sKKyAgdWludDh4OF90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6X3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHVpbnQxNng0X3QgX19iID0gezAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6X3UzMiAodWludDMyeDJfdCBfX2EpCit7CisgIHVpbnQzMngyX3QgX19iID0gezAsIDB9OworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2MnNpICgoaW50MzJ4Ml90KSBfX2EsCisJCQkJCQkgIChpbnQzMngyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6X3U2NCAodWludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPT0gMGxsID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpxX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICBmbG9hdDMyeDRfdCBfX2IgPSB7MC4wZiwgMC4wZiwgMC4wZiwgMC4wZn07CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXY0c2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpxX2Y2NCAoZmxvYXQ2NHgyX3QgX19hKQoreworICBmbG9hdDY0eDJfdCBfX2IgPSB7MC4wLCAwLjB9OworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2MmRmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6cV9wOCAocG9seTh4MTZfdCBfX2EpCit7CisgIHBvbHk4eDE2X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6cV9zOCAoaW50OHgxNl90IF9fYSkKK3sKKyAgaW50OHgxNl90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpxX3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgaW50MTZ4OF90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxenFfczMyIChpbnQzMng0X3QgX19hKQoreworICBpbnQzMng0X3QgX19iID0gezAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6cV9zNjQgKGludDY0eDJfdCBfX2EpCit7CisgIGludDY0eDJfdCBfX2IgPSB7MCwgMH07CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpxX3U4ICh1aW50OHgxNl90IF9fYSkKK3sKKyAgdWludDh4MTZfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2MTZxaSAoKGludDh4MTZfdCkgX19hLAorCQkJCQkJICAgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpxX3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHVpbnQxNng4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZXF2OGhpICgoaW50MTZ4OF90KSBfX2EsCisJCQkJCQkgIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZXF6cV91MzIgKHVpbnQzMng0X3QgX19hKQoreworICB1aW50MzJ4NF90IF9fYiA9IHswLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWVxdjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAoaW50MzJ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxenFfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgdWludDY0eDJfdCBfX2IgPSB7MCwgMH07CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21lcXYyZGkgKChpbnQ2NHgyX3QpIF9fYSwKKwkJCQkJCSAgKGludDY0eDJfdCkgX19iKTsKK30KKworLyogdmNlcXogLSBzY2FsYXIuICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpzX2YzMiAoZmxvYXQzMl90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA9PSAwLjBmID8gLTEgOiAwOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxemRfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gX19hID09IDAgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2VxemRfdTY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gX19hID09IDAgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNlcXpkX2Y2NCAoZmxvYXQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA9PSAwLjAgPyAtMWxsIDogMGxsOworfQorCisvKiB2Y2dlIC0gdmVjdG9yLiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2MnNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VfZjY0IChmbG9hdDY0eDFfdCBfX2EsIGZsb2F0NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA+PSBfX2IgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VfcDggKHBvbHk4eDhfdCBfX2EsIHBvbHk4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjhxaSAoKGludDh4OF90KSBfX2EsCisJCQkJCQkgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZV9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZV9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZV9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPj0gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlX3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2MnNpICgoaW50MzJ4Ml90KSBfX2EsCisJCQkJCQkgIChpbnQzMngyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPj0gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjRzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlcV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2MmRmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VxX3A4IChwb2x5OHgxNl90IF9fYSwgcG9seTh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlcV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlcV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldXYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlcV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldXY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgKGludDE2eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2NHNpICgoaW50MzJ4NF90KSBfX2EsCisJCQkJCQkgIChpbnQzMng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VxX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V1djJkaSAoKGludDY0eDJfdCkgX19hLAorCQkJCQkJICAoaW50NjR4Ml90KSBfX2IpOworfQorCisvKiB2Y2dlIC0gc2NhbGFyLiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VzX2YzMiAoZmxvYXQzMl90IF9fYSwgZmxvYXQzMl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA+PSBfX2IgPyAtMSA6IDA7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2VkX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA+PSBfX2IgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlZF91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA+PSBfX2IgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZWRfZjY0IChmbG9hdDY0X3QgX19hLCBmbG9hdDY0X3QgX19iKQoreworICByZXR1cm4gX19hID49IF9fYiA/IC0xbGwgOiAwbGw7Cit9CisKKy8qIHZjZ2V6IC0gdmVjdG9yLiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIGZsb2F0MzJ4Ml90IF9fYiA9IHswLjBmLCAwLjBmfTsKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjJzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlel9mNjQgKGZsb2F0NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA+PSAwLjAgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2V6X3A4IChwb2x5OHg4X3QgX19hKQoreworICBwb2x5OHg4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlel9zOCAoaW50OHg4X3QgX19hKQoreworICBpbnQ4eDhfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlel9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIGludDE2eDRfdCBfX2IgPSB7MCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpfczMyIChpbnQzMngyX3QgX19hKQoreworICBpbnQzMngyX3QgX19iID0gezAsIDB9OworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2V6X3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA+PSAwbGwgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2V6X3U4ICh1aW50OHg4X3QgX19hKQoreworICB1aW50OHg4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2V6X3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHVpbnQxNng0X3QgX19iID0gezAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V1djRoaSAoKGludDE2eDRfdCkgX19hLAorCQkJCQkJICAoaW50MTZ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlel91MzIgKHVpbnQzMngyX3QgX19hKQoreworICB1aW50MzJ4Ml90IF9fYiA9IHswLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldXYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpfdTY0ICh1aW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA+PSAwbGwgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlenFfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIGZsb2F0MzJ4NF90IF9fYiA9IHswLjBmLCAwLjBmLCAwLjBmLCAwLjBmfTsKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjRzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlenFfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIGZsb2F0NjR4Ml90IF9fYiA9IHswLjAsIDAuMH07CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXYyZGYgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpxX3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcG9seTh4MTZfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2MTZxaSAoKGludDh4MTZfdCkgX19hLAorCQkJCQkJICAgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICBpbnQ4eDE2X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCSAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlenFfczE2IChpbnQxNng4X3QgX19hKQoreworICBpbnQxNng4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2V6cV9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIGludDMyeDRfdCBfX2IgPSB7MCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpxX3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgaW50NjR4Ml90IF9fYiA9IHswLCAwfTsKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjJkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlenFfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICB1aW50OHgxNl90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2MTZxaSAoKGludDh4MTZfdCkgX19hLAorCQkJCQkJICAgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpxX3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHVpbnQxNng4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V1djhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAoaW50MTZ4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlenFfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgdWludDMyeDRfdCBfX2IgPSB7MCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2NHNpICgoaW50MzJ4NF90KSBfX2EsCisJCQkJCQkgIChpbnQzMng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ2V6cV91NjQgKHVpbnQ2NHgyX3QgX19hKQoreworICB1aW50NjR4Ml90IF9fYiA9IHswLCAwfTsKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldXYyZGkgKChpbnQ2NHgyX3QpIF9fYSwKKwkJCQkJCSAgKGludDY0eDJfdCkgX19iKTsKK30KKworLyogdmNnZXogLSBzY2FsYXIuICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpzX2YzMiAoZmxvYXQzMl90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA+PSAwLjBmID8gLTEgOiAwOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlemRfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gX19hID49IDAgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2dlemRfdTY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gX19hID49IDAgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNnZXpkX2Y2NCAoZmxvYXQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA+PSAwLjAgPyAtMWxsIDogMGxsOworfQorCisvKiB2Y2d0IC0gdmVjdG9yLiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2MnNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3RfZjY0IChmbG9hdDY0eDFfdCBfX2EsIGZsb2F0NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA+IF9fYiA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndF9wOCAocG9seTh4OF90IF9fYSwgcG9seTh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndF9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA+IF9fYiA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndF91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R1djhxaSAoKGludDh4OF90KSBfX2EsCisJCQkJCQkgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R1djRoaSAoKGludDE2eDRfdCkgX19hLAorCQkJCQkJICAoaW50MTZ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R1djJzaSAoKGludDMyeDJfdCkgX19hLAorCQkJCQkJICAoaW50MzJ4Ml90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0X3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hID4gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djRzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2MmRmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3RxX3A4IChwb2x5OHgxNl90IF9fYSwgcG9seTh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0cV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3RxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0cV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0dXYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0cV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0dXY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgKGludDE2eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHFfdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHV2NHNpICgoaW50MzJ4NF90KSBfX2EsCisJCQkJCQkgIChpbnQzMng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3RxX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R1djJkaSAoKGludDY0eDJfdCkgX19hLAorCQkJCQkJICAoaW50NjR4Ml90KSBfX2IpOworfQorCisvKiB2Y2d0IC0gc2NhbGFyLiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3RzX2YzMiAoZmxvYXQzMl90IF9fYSwgZmxvYXQzMl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA+IF9fYiA/IC0xIDogMDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndGRfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hID4gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndGRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPiBfX2IgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndGRfZjY0IChmbG9hdDY0X3QgX19hLCBmbG9hdDY0X3QgX19iKQoreworICByZXR1cm4gX19hID4gX19iID8gLTFsbCA6IDBsbDsKK30KKworLyogdmNndHogLSB2ZWN0b3IuICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0el9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgZmxvYXQzMngyX3QgX19iID0gezAuMGYsIDAuMGZ9OworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2MnNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6X2Y2NCAoZmxvYXQ2NHgxX3QgX19hKQoreworICByZXR1cm4gX19hID4gMC4wID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0el9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcG9seTh4OF90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHpfczggKGludDh4OF90IF9fYSkKK3sKKyAgaW50OHg4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHpfczE2IChpbnQxNng0X3QgX19hKQoreworICBpbnQxNng0X3QgX19iID0gezAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgaW50MzJ4Ml90IF9fYiA9IHswLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0el9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPiAwbGwgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6X3U4ICh1aW50OHg4X3QgX19hKQoreworICB1aW50OHg4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHV2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6X3UxNiAodWludDE2eDRfdCBfX2EpCit7CisgIHVpbnQxNng0X3QgX19iID0gezAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R1djRoaSAoKGludDE2eDRfdCkgX19hLAorCQkJCQkJICAoaW50MTZ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0el91MzIgKHVpbnQzMngyX3QgX19hKQoreworICB1aW50MzJ4Ml90IF9fYiA9IHswLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0dXYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHpfdTY0ICh1aW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA+IDBsbCA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgZmxvYXQzMng0X3QgX19iID0gezAuMGYsIDAuMGYsIDAuMGYsIDAuMGZ9OworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2NHNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgZmxvYXQ2NHgyX3QgX19iID0gezAuMCwgMC4wfTsKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djJkZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0enFfcDggKHBvbHk4eDE2X3QgX19hKQoreworICBwb2x5OHgxNl90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0enFfczggKGludDh4MTZfdCBfX2EpCit7CisgIGludDh4MTZfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6cV9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIGludDE2eDhfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHpxX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgaW50MzJ4NF90IF9fYiA9IHswLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0enFfczY0IChpbnQ2NHgyX3QgX19hKQoreworICBpbnQ2NHgyX3QgX19iID0gezAsIDB9OworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6cV91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHVpbnQ4eDE2X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0dXYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0enFfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgdWludDE2eDhfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHV2OGhpICgoaW50MTZ4OF90KSBfX2EsCisJCQkJCQkgIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjZ3R6cV91MzIgKHVpbnQzMng0X3QgX19hKQoreworICB1aW50MzJ4NF90IF9fYiA9IHswLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0dXY0c2kgKChpbnQzMng0X3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHpxX3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHVpbnQ2NHgyX3QgX19iID0gezAsIDB9OworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R1djJkaSAoKGludDY0eDJfdCkgX19hLAorCQkJCQkJICAoaW50NjR4Ml90KSBfX2IpOworfQorCisvKiB2Y2d0eiAtIHNjYWxhci4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0enNfZjMyIChmbG9hdDMyX3QgX19hKQoreworICByZXR1cm4gX19hID4gMC4wZiA/IC0xIDogMDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNndHpkX3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA+IDAgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0emRfdTY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gX19hID4gMCA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2d0emRfZjY0IChmbG9hdDY0X3QgX19hKQoreworICByZXR1cm4gX19hID4gMC4wID8gLTFsbCA6IDBsbDsKK30KKworLyogdmNsZSAtIHZlY3Rvci4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVfZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjJzZiAoX19iLCBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlX2Y2NCAoZmxvYXQ2NHgxX3QgX19hLCBmbG9hdDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPD0gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlX3A4IChwb2x5OHg4X3QgX19hLCBwb2x5OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXY4cWkgKChpbnQ4eDhfdCkgX19iLAorCQkJCQkJIChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2OHFpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2NGhpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2MnNpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hIDw9IF9fYiA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZV91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V1djhxaSAoKGludDh4OF90KSBfX2IsCisJCQkJCQkgKGludDh4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V1djRoaSAoKGludDE2eDRfdCkgX19iLAorCQkJCQkJICAoaW50MTZ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlX3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V1djJzaSAoKGludDMyeDJfdCkgX19iLAorCQkJCQkJICAoaW50MzJ4Ml90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hIDw9IF9fYiA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVxX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXY0c2YgKF9fYiwgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXFfZjY0IChmbG9hdDY0eDJfdCBfX2EsIGZsb2F0NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjJkZiAoX19iLCBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlcV9wOCAocG9seTh4MTZfdCBfX2EsIHBvbHk4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2MTZxaSAoKGludDh4MTZfdCkgX19iLAorCQkJCQkJICAgKGludDh4MTZfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXYxNnFpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldjhoaSAoX19iLCBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlcV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXY0c2kgKF9fYiwgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXFfczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V2MmRpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2MTZxaSAoKGludDh4MTZfdCkgX19iLAorCQkJCQkJICAgKGludDh4MTZfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXFfdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21nZXV2OGhpICgoaW50MTZ4OF90KSBfX2IsCisJCQkJCQkgIChpbnQxNng4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVxX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ2V1djRzaSAoKGludDMyeDRfdCkgX19iLAorCQkJCQkJICAoaW50MzJ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlcV91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWdldXYyZGkgKChpbnQ2NHgyX3QpIF9fYiwKKwkJCQkJCSAgKGludDY0eDJfdCkgX19hKTsKK30KKworLyogdmNsZSAtIHNjYWxhci4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlc19mMzIgKGZsb2F0MzJfdCBfX2EsIGZsb2F0MzJfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPD0gX19iID8gLTEgOiAwOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlZF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPD0gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZWRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPD0gX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGVkX2Y2NCAoZmxvYXQ2NF90IF9fYSwgZmxvYXQ2NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA8PSBfX2IgPyAtMWxsIDogMGxsOworfQorCisvKiB2Y2xleiAtIHZlY3Rvci4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGV6X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICBmbG9hdDMyeDJfdCBfX2IgPSB7MC4wZiwgMC4wZn07CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21sZXYyc2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXpfZjY0IChmbG9hdDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPD0gMC4wID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlel9wOCAocG9seTh4OF90IF9fYSkKK3sKKyAgcG9seTh4OF90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtbGV2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXpfczggKGludDh4OF90IF9fYSkKK3sKKyAgaW50OHg4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21sZXY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXpfczE2IChpbnQxNng0X3QgX19hKQoreworICBpbnQxNng0X3QgX19iID0gezAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtbGV2NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGV6X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgaW50MzJ4Ml90IF9fYiA9IHswLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWxldjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlel9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPD0gMGxsID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXpfdTY0ICh1aW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA8PSAwbGwgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlenFfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIGZsb2F0MzJ4NF90IF9fYiA9IHswLjBmLCAwLjBmLCAwLjBmLCAwLjBmfTsKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWxldjRzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlenFfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIGZsb2F0NjR4Ml90IF9fYiA9IHswLjAsIDAuMH07CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21sZXYyZGYgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXpxX3A4IChwb2x5OHgxNl90IF9fYSkKK3sKKyAgcG9seTh4MTZfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtbGV2MTZxaSAoKGludDh4MTZfdCkgX19hLAorCQkJCQkJICAgKGludDh4MTZfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXpxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICBpbnQ4eDE2X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCSAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtbGV2MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlenFfczE2IChpbnQxNng4X3QgX19hKQoreworICBpbnQxNng4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtbGV2OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGV6cV9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIGludDMyeDRfdCBfX2IgPSB7MCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21sZXY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsZXpxX3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgaW50NjR4Ml90IF9fYiA9IHswLCAwfTsKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWxldjJkaSAoX19hLCBfX2IpOworfQorCisvKiB2Y2xleiAtIHNjYWxhci4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlenNfZjMyIChmbG9hdDMyX3QgX19hKQoreworICByZXR1cm4gX19hIDw9IDAuMGYgPyAtMSA6IDA7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGV6ZF9zNjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPD0gMCA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbGV6ZF91NjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPD0gMCA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2xlemRfZjY0IChmbG9hdDY0X3QgX19hKQoreworICByZXR1cm4gX19hIDw9IDAuMCA/IC0xbGwgOiAwbGw7Cit9CisKKy8qIHZjbHQgLSB2ZWN0b3IuICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0X2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHYyc2YgKF9fYiwgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdF9mNjQgKGZsb2F0NjR4MV90IF9fYSwgZmxvYXQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hIDwgX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0X3A4IChwb2x5OHg4X3QgX19hLCBwb2x5OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHY4cWkgKChpbnQ4eDhfdCkgX19iLAorCQkJCQkJIChpbnQ4eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0X3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2OHFpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2NGhpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2MnNpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hIDwgX19iID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0X3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHV2OHFpICgoaW50OHg4X3QpIF9fYiwKKwkJCQkJCSAoaW50OHg4X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRfdTE2ICh1aW50MTZ4NF90IF9fYSwgdWludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHV2NGhpICgoaW50MTZ4NF90KSBfX2IsCisJCQkJCQkgIChpbnQxNng0X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRfdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHV2MnNpICgoaW50MzJ4Ml90KSBfX2IsCisJCQkJCQkgIChpbnQzMngyX3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPCBfX2IgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2NHNmIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX2Y2NCAoZmxvYXQ2NHgyX3QgX19hLCBmbG9hdDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHYyZGYgKF9fYiwgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdHFfcDggKHBvbHk4eDE2X3QgX19hLCBwb2x5OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djE2cWkgKChpbnQ4eDE2X3QpIF9fYiwKKwkJCQkJCSAgIChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2MTZxaSAoX19iLCBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0cV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHY4aGkgKF9fYiwgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdHFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R2NHNpIChfX2IsIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0djJkaSAoX19iLCBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0cV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R1djE2cWkgKChpbnQ4eDE2X3QpIF9fYiwKKwkJCQkJCSAgIChpbnQ4eDE2X3QpIF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHRxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtZ3R1djhoaSAoKGludDE2eDhfdCkgX19iLAorCQkJCQkJICAoaW50MTZ4OF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0cV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWd0dXY0c2kgKChpbnQzMng0X3QpIF9fYiwKKwkJCQkJCSAgKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdHFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21ndHV2MmRpICgoaW50NjR4Ml90KSBfX2IsCisJCQkJCQkgIChpbnQ2NHgyX3QpIF9fYSk7Cit9CisKKy8qIHZjbHQgLSBzY2FsYXIuICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdHNfZjMyIChmbG9hdDMyX3QgX19hLCBmbG9hdDMyX3QgX19iKQoreworICByZXR1cm4gX19hIDwgX19iID8gLTEgOiAwOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0ZF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPCBfX2IgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0ZF91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSA8IF9fYiA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0ZF9mNjQgKGZsb2F0NjRfdCBfX2EsIGZsb2F0NjRfdCBfX2IpCit7CisgIHJldHVybiBfX2EgPCBfX2IgPyAtMWxsIDogMGxsOworfQorCisvKiB2Y2x0eiAtIHZlY3Rvci4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICBmbG9hdDMyeDJfdCBfX2IgPSB7MC4wZiwgMC4wZn07CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY21sdHYyc2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdHpfZjY0IChmbG9hdDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPCAwLjAgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6X3A4IChwb2x5OHg4X3QgX19hKQoreworICBwb2x5OHg4X3QgX19iID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21sdHY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0el9zOCAoaW50OHg4X3QgX19hKQoreworICBpbnQ4eDhfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWx0djhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0el9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIGludDE2eDRfdCBfX2IgPSB7MCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfY21sdHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdHpfczMyIChpbnQzMngyX3QgX19hKQoreworICBpbnQzMngyX3QgX19iID0gezAsIDB9OworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtbHR2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6X3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYSA8IDBsbCA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgZmxvYXQzMng0X3QgX19iID0gezAuMGYsIDAuMGYsIDAuMGYsIDAuMGZ9OworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtbHR2NHNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgZmxvYXQ2NHgyX3QgX19iID0gezAuMCwgMC4wfTsKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWx0djJkZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0enFfcDggKHBvbHk4eDE2X3QgX19hKQoreworICBwb2x5OHgxNl90IF9fYiA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21sdHYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0enFfczggKGludDh4MTZfdCBfX2EpCit7CisgIGludDh4MTZfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY21sdHYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6cV9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIGludDE2eDhfdCBfX2IgPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY21sdHY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmNsdHpxX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgaW50MzJ4NF90IF9fYiA9IHswLCAwLCAwLCAwfTsKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbWx0djRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0enFfczY0IChpbnQ2NHgyX3QgX19hKQoreworICBpbnQ2NHgyX3QgX19iID0gezAsIDB9OworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtbHR2MmRpIChfX2EsIF9fYik7Cit9CisKKy8qIHZjbHR6IC0gc2NhbGFyLiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6c19mMzIgKGZsb2F0MzJfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPCAwLjBmID8gLTEgOiAwOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y2x0emRfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gX19hIDwgMCA/IC0xbGwgOiAwbGw7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6ZF91NjQgKGludDY0eDFfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPCAwID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjbHR6ZF9mNjQgKGZsb2F0NjRfdCBfX2EpCit7CisgIHJldHVybiBfX2EgPCAwLjAgPyAtMWxsIDogMGxsOworfQorCisvKiB2Y3Z0IChkb3VibGUgLT4gZmxvYXQpLiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRfZjMyX2Y2NCAoZmxvYXQ2NHgyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZmxvYXRfdHJ1bmNhdGVfbG9fdjJzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRfaGlnaF9mMzJfZjY0IChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2Zsb2F0X3RydW5jYXRlX2hpX3Y0c2YgKF9fYSwgX19iKTsKK30KKworLyogdmN2dCAoZmxvYXQgLT4gZG91YmxlKS4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0X2Y2NF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZmxvYXRfZXh0ZW5kX2xvX3YyZGYgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0X2hpZ2hfZjY0X2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfdmVjX3VucGFja3NfaGlfdjRzZiAoX19hKTsKK30KKworLyogdmN2dCAgKDx1PmludCAtPiBmbG9hdCkgICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dGRfZjY0X3M2NCAoaW50NjRfdCBfX2EpCit7CisgIHJldHVybiAoZmxvYXQ2NF90KSBfX2E7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dGRfZjY0X3U2NCAodWludDY0X3QgX19hKQoreworICByZXR1cm4gKGZsb2F0NjRfdCkgX19hOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRzX2YzMl9zMzIgKGludDMyX3QgX19hKQoreworICByZXR1cm4gKGZsb2F0MzJfdCkgX19hOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRzX2YzMl91MzIgKHVpbnQzMl90IF9fYSkKK3sKKyAgcmV0dXJuIChmbG9hdDMyX3QpIF9fYTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRfZjMyX3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2Zsb2F0djJzaXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0X2YzMl91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZmxvYXR1bnN2MnNpdjJzZiAoKGludDMyeDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRxX2YzMl9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mbG9hdHY0c2l2NHNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHFfZjMyX3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mbG9hdHVuc3Y0c2l2NHNmICgoaW50MzJ4NF90KSBfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHFfZjY0X3M2NCAoaW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2Zsb2F0djJkaXYyZGYgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cV9mNjRfdTY0ICh1aW50NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2Zsb2F0dW5zdjJkaXYyZGYgKChpbnQ2NHgyX3QpIF9fYSk7Cit9CisKKy8qIHZjdnQgKGZsb2F0IC0+IDx1PmludCkgICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRkX3M2NF9mNjQgKGZsb2F0NjRfdCBfX2EpCit7CisgIHJldHVybiAoaW50NjRfdCkgX19hOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dGRfdTY0X2Y2NCAoZmxvYXQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50NjRfdCkgX19hOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0c19zMzJfZjMyIChmbG9hdDMyX3QgX19hKQoreworICByZXR1cm4gKGludDMyX3QpIF9fYTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRzX3UzMl9mMzIgKGZsb2F0MzJfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyX3QpIF9fYTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0X3MzMl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xidHJ1bmN2MnNmdjJzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dF91MzJfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIC8qIFRPRE86IFRoaXMgY2FzdCBzaG91bGQgZ28gYXdheSB3aGVuIGJ1aWx0aW5zIGhhdmUKKyAgICAgdGhlaXIgY29ycmVjdCB0eXBlcy4gICovCisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfbGJ0cnVuY3V2MnNmdjJzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cV9zMzJfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sYnRydW5jdjRzZnY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRxX3UzMl9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgLyogVE9ETzogVGhpcyBjYXN0IHNob3VsZCBnbyBhd2F5IHdoZW4gYnVpbHRpbnMgaGF2ZQorICAgICB0aGVpciBjb3JyZWN0IHR5cGVzLiAgKi8KKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9sYnRydW5jdXY0c2Z2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRxX3M2NF9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xidHJ1bmN2MmRmdjJkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHFfdTY0X2Y2NCAoZmxvYXQ2NHgyX3QgX19hKQoreworICAvKiBUT0RPOiBUaGlzIGNhc3Qgc2hvdWxkIGdvIGF3YXkgd2hlbiBidWlsdGlucyBoYXZlCisgICAgIHRoZWlyIGNvcnJlY3QgdHlwZXMuICAqLworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xidHJ1bmN1djJkZnYyZGkgKF9fYSk7Cit9CisKKy8qIHZjdnRhICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0YWRfczY0X2Y2NCAoZmxvYXQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xyb3VuZGRmZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0YWRfdTY0X2Y2NCAoZmxvYXQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xyb3VuZHVkZmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0YXNfczMyX2YzMiAoZmxvYXQzMl90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xyb3VuZHNmc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0YXNfdTMyX2YzMiAoZmxvYXQzMl90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xyb3VuZHVzZnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRhX3MzMl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xyb3VuZHYyc2Z2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0YV91MzJfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIC8qIFRPRE86IFRoaXMgY2FzdCBzaG91bGQgZ28gYXdheSB3aGVuIGJ1aWx0aW5zIGhhdmUKKyAgICAgdGhlaXIgY29ycmVjdCB0eXBlcy4gICovCisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfbHJvdW5kdXYyc2Z2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRhcV9zMzJfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9scm91bmR2NHNmdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dGFxX3UzMl9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgLyogVE9ETzogVGhpcyBjYXN0IHNob3VsZCBnbyBhd2F5IHdoZW4gYnVpbHRpbnMgaGF2ZQorICAgICB0aGVpciBjb3JyZWN0IHR5cGVzLiAgKi8KKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9scm91bmR1djRzZnY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dGFxX3M2NF9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xyb3VuZHYyZGZ2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0YXFfdTY0X2Y2NCAoZmxvYXQ2NHgyX3QgX19hKQoreworICAvKiBUT0RPOiBUaGlzIGNhc3Qgc2hvdWxkIGdvIGF3YXkgd2hlbiBidWlsdGlucyBoYXZlCisgICAgIHRoZWlyIGNvcnJlY3QgdHlwZXMuICAqLworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xyb3VuZHV2MmRmdjJkaSAoX19hKTsKK30KKworLyogdmN2dG0gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRtZF9zNjRfZjY0IChmbG9hdDY0X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2xmbG9vciAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRtZF91NjRfZjY0IChmbG9hdDY0X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfbGZsb29ydWRmZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRtc19zMzJfZjMyIChmbG9hdDMyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2lmbG9vcmYgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0bXNfdTMyX2YzMiAoZmxvYXQzMl90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xmbG9vcnVzZnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRtX3MzMl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xmbG9vcnYyc2Z2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0bV91MzJfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIC8qIFRPRE86IFRoaXMgY2FzdCBzaG91bGQgZ28gYXdheSB3aGVuIGJ1aWx0aW5zIGhhdmUKKyAgICAgdGhlaXIgY29ycmVjdCB0eXBlcy4gICovCisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfbGZsb29ydXYyc2Z2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRtcV9zMzJfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sZmxvb3J2NHNmdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dG1xX3UzMl9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgLyogVE9ETzogVGhpcyBjYXN0IHNob3VsZCBnbyBhd2F5IHdoZW4gYnVpbHRpbnMgaGF2ZQorICAgICB0aGVpciBjb3JyZWN0IHR5cGVzLiAgKi8KKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9sZmxvb3J1djRzZnY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dG1xX3M2NF9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xmbG9vcnYyZGZ2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0bXFfdTY0X2Y2NCAoZmxvYXQ2NHgyX3QgX19hKQoreworICAvKiBUT0RPOiBUaGlzIGNhc3Qgc2hvdWxkIGdvIGF3YXkgd2hlbiBidWlsdGlucyBoYXZlCisgICAgIHRoZWlyIGNvcnJlY3QgdHlwZXMuICAqLworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xmbG9vcnV2MmRmdjJkaSAoX19hKTsKK30KKworLyogdmN2dG4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRuZF9zNjRfZjY0IChmbG9hdDY0X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfbGZyaW50bmRmZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0bmRfdTY0X2Y2NCAoZmxvYXQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xmcmludG51ZGZkaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dG5zX3MzMl9mMzIgKGZsb2F0MzJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sZnJpbnRuc2ZzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRuc191MzJfZjMyIChmbG9hdDMyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfbGZyaW50bnVzZnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRuX3MzMl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xmcmludG52MnNmdjJzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dG5fdTMyX2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICAvKiBUT0RPOiBUaGlzIGNhc3Qgc2hvdWxkIGdvIGF3YXkgd2hlbiBidWlsdGlucyBoYXZlCisgICAgIHRoZWlyIGNvcnJlY3QgdHlwZXMuICAqLworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xmcmludG51djJzZnYyc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dG5xX3MzMl9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xmcmludG52NHNmdjRzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dG5xX3UzMl9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgLyogVE9ETzogVGhpcyBjYXN0IHNob3VsZCBnbyBhd2F5IHdoZW4gYnVpbHRpbnMgaGF2ZQorICAgICB0aGVpciBjb3JyZWN0IHR5cGVzLiAgKi8KKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9sZnJpbnRudXY0c2Z2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRucV9zNjRfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sZnJpbnRudjJkZnYyZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRucV91NjRfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIC8qIFRPRE86IFRoaXMgY2FzdCBzaG91bGQgZ28gYXdheSB3aGVuIGJ1aWx0aW5zIGhhdmUKKyAgICAgdGhlaXIgY29ycmVjdCB0eXBlcy4gICovCisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfbGZyaW50bnV2MmRmdjJkaSAoX19hKTsKK30KKworLyogdmN2dHAgICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRwZF9zNjRfZjY0IChmbG9hdDY0X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2xjZWlsIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHBkX3U2NF9mNjQgKGZsb2F0NjRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sY2VpbHVkZmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cHNfczMyX2YzMiAoZmxvYXQzMl90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9pY2VpbGYgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cHNfdTMyX2YzMiAoZmxvYXQzMl90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xjZWlsdXNmc2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHBfczMyX2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfbGNlaWx2MnNmdjJzaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmN2dHBfdTMyX2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICAvKiBUT0RPOiBUaGlzIGNhc3Qgc2hvdWxkIGdvIGF3YXkgd2hlbiBidWlsdGlucyBoYXZlCisgICAgIHRoZWlyIGNvcnJlY3QgdHlwZXMuICAqLworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xjZWlsdXYyc2Z2MnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRwcV9zMzJfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sY2VpbHY0c2Z2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cHFfdTMyX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICAvKiBUT0RPOiBUaGlzIGNhc3Qgc2hvdWxkIGdvIGF3YXkgd2hlbiBidWlsdGlucyBoYXZlCisgICAgIHRoZWlyIGNvcnJlY3QgdHlwZXMuICAqLworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xjZWlsdXY0c2Z2NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZjdnRwcV9zNjRfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sY2VpbHYyZGZ2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2Y3Z0cHFfdTY0X2Y2NCAoZmxvYXQ2NHgyX3QgX19hKQoreworICAvKiBUT0RPOiBUaGlzIGNhc3Qgc2hvdWxkIGdvIGF3YXkgd2hlbiBidWlsdGlucyBoYXZlCisgICAgIHRoZWlyIGNvcnJlY3QgdHlwZXMuICAqLworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xjZWlsdXYyZGZ2MmRpIChfX2EpOworfQorCisvKiB2ZHVwICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwYl9sYW5lX3M4IChpbnQ4eDE2X3QgYSwgaW50IGNvbnN0IGIpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldHFfbGFuZV9zOCAoYSwgYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cGJfbGFuZV91OCAodWludDh4MTZfdCBhLCBpbnQgY29uc3QgYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3U4IChhLCBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwaF9sYW5lX3MxNiAoaW50MTZ4OF90IGEsIGludCBjb25zdCBiKQoreworICByZXR1cm4gX19hYXJjaDY0X3ZnZXRxX2xhbmVfczE2IChhLCBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cGhfbGFuZV91MTYgKHVpbnQxNng4X3QgYSwgaW50IGNvbnN0IGIpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldHFfbGFuZV91MTYgKGEsIGIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBzX2xhbmVfczMyIChpbnQzMng0X3QgYSwgaW50IGNvbnN0IGIpCit7CisgIHJldHVybiBfX2FhcmNoNjRfdmdldHFfbGFuZV9zMzIgKGEsIGIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2ZHVwc19sYW5lX3UzMiAodWludDMyeDRfdCBhLCBpbnQgY29uc3QgYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3UzMiAoYSwgYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmR1cGRfbGFuZV9zNjQgKGludDY0eDJfdCBhLCBpbnQgY29uc3QgYikKK3sKKyAgcmV0dXJuIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3M2NCAoYSwgYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZkdXBkX2xhbmVfdTY0ICh1aW50NjR4Ml90IGEsIGludCBjb25zdCBiKQoreworICByZXR1cm4gX19hYXJjaDY0X3ZnZXRxX2xhbmVfdTY0IChhLCBiKTsKK30KKworLyogdmxkMSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xkMXYyc2YgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIGEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9mNjQgKGNvbnN0IGZsb2F0NjRfdCAqYSkKK3sKKyAgcmV0dXJuICphOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfcDggKGNvbnN0IHBvbHk4X3QgKmEpCit7CisgIHJldHVybiAocG9seTh4OF90KQorICAgIF9fYnVpbHRpbl9hYXJjaDY0X2xkMXY4cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIGEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX3AxNiAoY29uc3QgcG9seTE2X3QgKmEpCit7CisgIHJldHVybiAocG9seTE2eDRfdCkKKyAgICBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2NGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfczggKGNvbnN0IGludDhfdCAqYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xkMXY4cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIGEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfczE2IChjb25zdCBpbnQxNl90ICphKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfbGQxdjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV9zMzIgKGNvbnN0IGludDMyX3QgKmEpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2MnNpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX3M2NCAoY29uc3QgaW50NjRfdCAqYSkKK3sKKyAgcmV0dXJuICphOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfdTggKGNvbnN0IHVpbnQ4X3QgKmEpCit7CisgIHJldHVybiAodWludDh4OF90KQorICAgIF9fYnVpbHRpbl9hYXJjaDY0X2xkMXY4cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIGEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxX3UxNiAoY29uc3QgdWludDE2X3QgKmEpCit7CisgIHJldHVybiAodWludDE2eDRfdCkKKyAgICBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2NGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMV91MzIgKGNvbnN0IHVpbnQzMl90ICphKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpCisgICAgX19idWlsdGluX2FhcmNoNjRfbGQxdjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgKikgYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFfdTY0IChjb25zdCB1aW50NjRfdCAqYSkKK3sKKyAgcmV0dXJuICphOworfQorCisvKiB2bGQxcSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfZjMyIChjb25zdCBmbG9hdDMyX3QgKmEpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2NHNmICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zZiAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX2Y2NCAoY29uc3QgZmxvYXQ2NF90ICphKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfbGQxdjJkZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGYgKikgYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX3A4IChjb25zdCBwb2x5OF90ICphKQoreworICByZXR1cm4gKHBvbHk4eDE2X3QpCisgICAgX19idWlsdGluX2FhcmNoNjRfbGQxdjE2cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIGEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9wMTYgKGNvbnN0IHBvbHkxNl90ICphKQoreworICByZXR1cm4gKHBvbHkxNng4X3QpCisgICAgX19idWlsdGluX2FhcmNoNjRfbGQxdjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfczggKGNvbnN0IGludDhfdCAqYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2xkMXYxNnFpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9zMTYgKGNvbnN0IGludDE2X3QgKmEpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2OGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9zMzIgKGNvbnN0IGludDMyX3QgKmEpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2NHNpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV9zNjQgKGNvbnN0IGludDY0X3QgKmEpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2MmRpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfdTggKGNvbnN0IHVpbnQ4X3QgKmEpCit7CisgIHJldHVybiAodWludDh4MTZfdCkKKyAgICBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDFxX3UxNiAoY29uc3QgdWludDE2X3QgKmEpCit7CisgIHJldHVybiAodWludDE2eDhfdCkKKyAgICBfX2J1aWx0aW5fYWFyY2g2NF9sZDF2OGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBhKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMXFfdTMyIChjb25zdCB1aW50MzJfdCAqYSkKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KQorICAgIF9fYnVpbHRpbl9hYXJjaDY0X2xkMXY0c2kgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIGEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQxcV91NjQgKGNvbnN0IHVpbnQ2NF90ICphKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpCisgICAgX19idWlsdGluX2FhcmNoNjRfbGQxdjJkaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgYSk7Cit9CisKKy8qIHZsZG4gKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MXgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfczY0IChjb25zdCBpbnQ2NF90ICogX19hKQoreworICBpbnQ2NHgxeDJfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDJkaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2lkaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2lkaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDF4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX3U2NCAoY29uc3QgdWludDY0X3QgKiBfX2EpCit7CisgIHVpbnQ2NHgxeDJfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDJkaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ29pZGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaWRpIChfX28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDF4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX2Y2NCAoY29uc3QgZmxvYXQ2NF90ICogX19hKQoreworICBmbG9hdDY0eDF4Ml90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMmRmICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9kZiAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ29pZGYgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2lkZiAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9zOCAoY29uc3QgaW50OF90ICogX19hKQoreworICBpbnQ4eDh4Ml90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMnY4cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2OHFpIChfX28sIDApOworICByZXQudmFsWzFdID0gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ29pdjhxaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHBvbHk4eDh4Ml90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMnY4cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAocG9seTh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ29pdjhxaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2OHFpIChfX28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMl9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EpCit7CisgIGludDE2eDR4Ml90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMnY0aGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ29pdjRoaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2NGhpIChfX28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSkKK3sKKyAgcG9seTE2eDR4Ml90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMnY0aGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaXY0aGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaXY0aGkgKF9fbywgMSk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSkKK3sKKyAgaW50MzJ4MngyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2MnNpIChfX28sIDApOworICByZXQudmFsWzFdID0gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaXYyc2kgKF9fbywgMSk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICB1aW50OHg4eDJfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDJ2OHFpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaXY4cWkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ29pdjhxaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQyX3UxNiAoY29uc3QgdWludDE2X3QgKiBfX2EpCit7CisgIHVpbnQxNng0eDJfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDJ2NGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2NGhpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2NGhpIChfX28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSkKK3sKKyAgdWludDMyeDJ4Ml90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMnYyc2kgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaXYyc2kgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaXYyc2kgKF9fbywgMSk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBfX2EpCit7CisgIGZsb2F0MzJ4MngyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjJzZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2YgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdvaXYyc2YgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnb2l2MnNmIChfX28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfczggKGNvbnN0IGludDhfdCAqIF9fYSkKK3sKKyAgaW50OHgxNngyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjE2cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjE2cWkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjE2cWkgKF9fbywgMSk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHBvbHk4eDE2eDJfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDJ2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjE2cWkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAocG9seTh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdvaXYxNnFpIChfX28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfczE2IChjb25zdCBpbnQxNl90ICogX19hKQoreworICBpbnQxNng4eDJfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDJ2OGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdvaXY4aGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjhoaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICBwb2x5MTZ4OHgyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjhoaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjhoaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJxX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSkKK3sKKyAgaW50MzJ4NHgyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnb2l2NHNpIChfX28sIDApOworICByZXQudmFsWzFdID0gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdvaXY0c2kgKF9fbywgMSk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV9zNjQgKGNvbnN0IGludDY0X3QgKiBfX2EpCit7CisgIGludDY0eDJ4Ml90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMnYyZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjJkaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnb2l2MmRpIChfX28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDJxX3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICB1aW50OHgxNngyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjE2cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdvaXYxNnFpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnb2l2MTZxaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV91MTYgKGNvbnN0IHVpbnQxNl90ICogX19hKQoreworICB1aW50MTZ4OHgyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjhoaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjhoaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV91MzIgKGNvbnN0IHVpbnQzMl90ICogX19hKQoreworICB1aW50MzJ4NHgyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjRzaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjRzaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjRzaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV91NjQgKGNvbnN0IHVpbnQ2NF90ICogX19hKQoreworICB1aW50NjR4MngyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjJkaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjJkaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjJkaSAoX19vLCAxKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkMnFfZjMyIChjb25zdCBmbG9hdDMyX3QgKiBfX2EpCit7CisgIGZsb2F0MzJ4NHgyX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQydjRzZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2YgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdvaXY0c2YgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnb2l2NHNmIChfX28sIDEpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQycV9mNjQgKGNvbnN0IGZsb2F0NjRfdCAqIF9fYSkKK3sKKyAgZmxvYXQ2NHgyeDJfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDJ2MmRmICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9kZiAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ29pdjJkZiAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdvaXYyZGYgKF9fbywgMSk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDF4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX3M2NCAoY29uc3QgaW50NjRfdCAqIF9fYSkKK3sKKyAgaW50NjR4MXgzX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQzZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGkgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxeDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM191NjQgKGNvbnN0IHVpbnQ2NF90ICogX19hKQoreworICB1aW50NjR4MXgzX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQzZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaWRpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2lkaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGkgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4MXgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfZjY0IChjb25zdCBmbG9hdDY0X3QgKiBfX2EpCit7CisgIGZsb2F0NjR4MXgzX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQzZGYgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RmICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2lkZiAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaWRmIChfX28sIDEpOworICByZXQudmFsWzJdID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGYgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfczggKGNvbnN0IGludDhfdCAqIF9fYSkKK3sKKyAgaW50OHg4eDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDN2OHFpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjhxaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY4cWkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2OHFpIChfX28sIDIpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHg4eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM19wOCAoY29uc3QgcG9seThfdCAqIF9fYSkKK3sKKyAgcG9seTh4OHgzX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQzdjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2OHFpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHBvbHk4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY4cWkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAocG9seTh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjhxaSAoX19vLCAyKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfczE2IChjb25zdCBpbnQxNl90ICogX19hKQoreworICBpbnQxNng0eDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDN2NGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY0aGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjRoaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2NGhpIChfX28sIDIpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4NHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfcDE2IChjb25zdCBwb2x5MTZfdCAqIF9fYSkKK3sKKyAgcG9seTE2eDR4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3Y0aGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY0aGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY0aGkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAocG9seTE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY0aGkgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSkKK3sKKyAgaW50MzJ4MngzX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQzdjJzaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2MnNpIChfX28sIDApOworICByZXQudmFsWzFdID0gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXYyc2kgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjJzaSAoX19vLCAyKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNfdTggKGNvbnN0IHVpbnQ4X3QgKiBfX2EpCit7CisgIHVpbnQ4eDh4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3Y4cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjhxaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2OHFpIChfX28sIDEpOworICByZXQudmFsWzJdID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY4cWkgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM191MTYgKGNvbnN0IHVpbnQxNl90ICogX19hKQoreworICB1aW50MTZ4NHgzX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQzdjRoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjRoaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjRoaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjRoaSAoX19vLCAyKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EpCit7CisgIHVpbnQzMngyeDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDN2MnNpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2MnNpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2MnNpIChfX28sIDEpOworICByZXQudmFsWzJdID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2MnNpIChfX28sIDIpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzX2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hKQoreworICBmbG9hdDMyeDJ4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3Yyc2YgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2MnNmIChfX28sIDApOworICByZXQudmFsWzFdID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjJzZiAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXYyc2YgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzcV9zOCAoY29uc3QgaW50OF90ICogX19hKQoreworICBpbnQ4eDE2eDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDN2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2MTZxaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2MTZxaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2MTZxaSAoX19vLCAyKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4MTZ4M190IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQzcV9wOCAoY29uc3QgcG9seThfdCAqIF9fYSkKK3sKKyAgcG9seTh4MTZ4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3YxNnFpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2MTZxaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjE2cWkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAocG9seTh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYxNnFpIChfX28sIDIpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfczE2IChjb25zdCBpbnQxNl90ICogX19hKQoreworICBpbnQxNng4eDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDN2OGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4aGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjhoaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2OGhpIChfX28sIDIpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5MTZ4OHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX3AxNiAoY29uc3QgcG9seTE2X3QgKiBfX2EpCit7CisgIHBvbHkxNng4eDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDN2OGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2OGhpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2OGhpIChfX28sIDEpOworICByZXQudmFsWzJdID0gKHBvbHkxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2OGhpIChfX28sIDIpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfczMyIChjb25zdCBpbnQzMl90ICogX19hKQoreworICBpbnQzMng0eDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDN2NHNpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2kgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjRzaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2NHNpIChfX28sIDIpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyeDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfczY0IChjb25zdCBpbnQ2NF90ICogX19hKQoreworICBpbnQ2NHgyeDNfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDN2MmRpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjJkaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2MmRpIChfX28sIDIpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNngzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICB1aW50OHgxNngzX3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQzdjE2cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYxNnFpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2MTZxaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjE2cWkgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSkKK3sKKyAgdWludDE2eDh4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3Y4aGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4aGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4aGkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4aGkgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0eDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSkKK3sKKyAgdWludDMyeDR4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3Y0c2kgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2kgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2kgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2kgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyeDNfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkM3FfdTY0IChjb25zdCB1aW50NjRfdCAqIF9fYSkKK3sKKyAgdWludDY0eDJ4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3YyZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGkgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NHgzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hKQoreworICBmbG9hdDMyeDR4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3Y0c2YgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2NHNmIChfX28sIDApOworICByZXQudmFsWzFdID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjRzZiAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2YgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4MngzX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDNxX2Y2NCAoY29uc3QgZmxvYXQ2NF90ICogX19hKQoreworICBmbG9hdDY0eDJ4M190IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkM3YyZGYgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RmICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2MmRmIChfX28sIDApOworICByZXQudmFsWzFdID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjJkZiAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGYgKF9fbywgMik7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDF4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X3M2NCAoY29uc3QgaW50NjRfdCAqIF9fYSkKK3sKKyAgaW50NjR4MXg0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0ZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpZGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpZGkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpZGkgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpZGkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF91NjQgKGNvbnN0IHVpbnQ2NF90ICogX19hKQoreworICB1aW50NjR4MXg0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0ZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aWRpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGlkaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9ICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpZGkgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aWRpIChfX28sIDMpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDF4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X2Y2NCAoY29uc3QgZmxvYXQ2NF90ICogX19hKQoreworICBmbG9hdDY0eDF4NF90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkNGRmICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9kZiAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpZGYgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGlkZiAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChmbG9hdDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aWRmIChfX28sIDIpOworICByZXQudmFsWzNdID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpZGYgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfczggKGNvbnN0IGludDhfdCAqIF9fYSkKK3sKKyAgaW50OHg4eDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2OHFpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjhxaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXY4cWkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2OHFpIChfX28sIDIpOworICByZXQudmFsWzNdID0gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjhxaSAoX19vLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTh4OHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHBvbHk4eDh4NF90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkNHY4cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAocG9seTh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjhxaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2OHFpIChfX28sIDEpOworICByZXQudmFsWzJdID0gKHBvbHk4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXY4cWkgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAocG9seTh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjhxaSAoX19vLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfczE2IChjb25zdCBpbnQxNl90ICogX19hKQoreworICBpbnQxNng0eDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2NGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXY0aGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2NGhpIChfX28sIDIpOworICByZXQudmFsWzNdID0gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXY0aGkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICBwb2x5MTZ4NHg0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0djRoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAyKTsKKyAgcmV0LnZhbFszXSA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Mng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRfczMyIChjb25zdCBpbnQzMl90ICogX19hKQoreworICBpbnQzMngyeDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2MnNpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXYyc2kgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjJzaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2MnNpIChfX28sIDIpOworICByZXQudmFsWzNdID0gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXYyc2kgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDh4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X3U4IChjb25zdCB1aW50OF90ICogX19hKQoreworICB1aW50OHg4eDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2OHFpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXY4cWkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjhxaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9ICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2OHFpIChfX28sIDIpOworICByZXQudmFsWzNdID0gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXY4cWkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNF91MTYgKGNvbnN0IHVpbnQxNl90ICogX19hKQoreworICB1aW50MTZ4NHg0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0djRoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAyKTsKKyAgcmV0LnZhbFszXSA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoX19vLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X3UzMiAoY29uc3QgdWludDMyX3QgKiBfX2EpCit7CisgIHVpbnQzMngyeDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2MnNpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2MnNpIChfX28sIDApOworICByZXQudmFsWzFdID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2MnNpIChfX28sIDEpOworICByZXQudmFsWzJdID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2MnNpIChfX28sIDIpOworICByZXQudmFsWzNdID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2MnNpIChfX28sIDMpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0X2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hKQoreworICBmbG9hdDMyeDJ4NF90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkNHYyc2YgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2MnNmIChfX28sIDApOworICByZXQudmFsWzFdID0gKGZsb2F0MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ3hpdjJzZiAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWd4aXYyc2YgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAoZmxvYXQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVneGl2MnNmIChfX28sIDMpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfczggKGNvbnN0IGludDhfdCAqIF9fYSkKK3sKKyAgaW50OHgxNng0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0djE2cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjE2cWkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjE2cWkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjE2cWkgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjE2cWkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfcDggKGNvbnN0IHBvbHk4X3QgKiBfX2EpCit7CisgIHBvbHk4eDE2eDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjE2cWkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAocG9seTh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYxNnFpIChfX28sIDEpOworICByZXQudmFsWzJdID0gKHBvbHk4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2MTZxaSAoX19vLCAyKTsKKyAgcmV0LnZhbFszXSA9IChwb2x5OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjE2cWkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDh4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0cV9zMTYgKGNvbnN0IGludDE2X3QgKiBfX2EpCit7CisgIGludDE2eDh4NF90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkNHY4aGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjhoaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2OGhpIChfX28sIDEpOworICByZXQudmFsWzJdID0gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY4aGkgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjhoaSAoX19vLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDh4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0cV9wMTYgKGNvbnN0IHBvbHkxNl90ICogX19hKQoreworICBwb2x5MTZ4OHg0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0djhoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjhoaSAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjhoaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjhoaSAoX19vLCAyKTsKKyAgcmV0LnZhbFszXSA9IChwb2x5MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjhoaSAoX19vLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRxX3MzMiAoY29uc3QgaW50MzJfdCAqIF9fYSkKK3sKKyAgaW50MzJ4NHg0X3QgcmV0OworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQ0djRzaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2NHNpIChfX28sIDApOworICByZXQudmFsWzFdID0gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY0c2kgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjRzaSAoX19vLCAyKTsKKyAgcmV0LnZhbFszXSA9IChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2NHNpIChfX28sIDMpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfczY0IChjb25zdCBpbnQ2NF90ICogX19hKQoreworICBpbnQ2NHgyeDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2MmRpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjJkaSAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2MmRpIChfX28sIDIpOworICByZXQudmFsWzNdID0gKGludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfdTggKGNvbnN0IHVpbnQ4X3QgKiBfX2EpCit7CisgIHVpbnQ4eDE2eDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2MTZxaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hKTsKKyAgcmV0LnZhbFswXSA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjE2cWkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYxNnFpIChfX28sIDEpOworICByZXQudmFsWzJdID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2MTZxaSAoX19vLCAyKTsKKyAgcmV0LnZhbFszXSA9ICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjE2cWkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfdTE2IChjb25zdCB1aW50MTZfdCAqIF9fYSkKK3sKKyAgdWludDE2eDh4NF90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkNHY4aGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY4aGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY4aGkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY4aGkgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY4aGkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfdTMyIChjb25zdCB1aW50MzJfdCAqIF9fYSkKK3sKKyAgdWludDMyeDR4NF90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkNHY0c2kgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY0c2kgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY0c2kgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY0c2kgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY0c2kgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordmxkNHFfdTY0IChjb25zdCB1aW50NjRfdCAqIF9fYSkKK3sKKyAgdWludDY0eDJ4NF90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkNHYyZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGkgKF9fbywgMCk7CisgIHJldC52YWxbMV0gPSAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGkgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGkgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGkgKF9fbywgMyk7CisgIHJldHVybiByZXQ7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NHg0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZsZDRxX2YzMiAoY29uc3QgZmxvYXQzMl90ICogX19hKQoreworICBmbG9hdDMyeDR4NF90IHJldDsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkNHY0c2YgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIF9fYSk7CisgIHJldC52YWxbMF0gPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2NHNmIChfX28sIDApOworICByZXQudmFsWzFdID0gKGZsb2F0MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjRzZiAoX19vLCAxKTsKKyAgcmV0LnZhbFsyXSA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXY0c2YgKF9fbywgMik7CisgIHJldC52YWxbM10gPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2NHNmIChfX28sIDMpOworICByZXR1cm4gcmV0OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bGQ0cV9mNjQgKGNvbnN0IGZsb2F0NjRfdCAqIF9fYSkKK3sKKyAgZmxvYXQ2NHgyeDRfdCByZXQ7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDR2MmRmICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9kZiAqKSBfX2EpOworICByZXQudmFsWzBdID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjJkZiAoX19vLCAwKTsKKyAgcmV0LnZhbFsxXSA9IChmbG9hdDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGYgKF9fbywgMSk7CisgIHJldC52YWxbMl0gPSAoZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVneGl2MmRmIChfX28sIDIpOworICByZXQudmFsWzNdID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ3hpdjJkZiAoX19vLCAzKTsKKyAgcmV0dXJuIHJldDsKK30KKworLyogdm1heCAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc21heF9uYW52MnNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4X3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NtYXh2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWF4djRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc21heHYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4X3U4ICh1aW50OHg4X3QgX19hLCB1aW50OHg4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdW1heHY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heF91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91bWF4djRoaSAoKGludDE2eDRfdCkgX19hLAorCQkJCQkJICAoaW50MTZ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4X3UzMiAodWludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VtYXh2MnNpICgoaW50MzJ4Ml90KSBfX2EsCisJCQkJCQkgIChpbnQzMngyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc21heF9uYW52NHNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc21heF9uYW52MmRmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWF4djE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4cV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWF4djhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NtYXh2NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhxX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfdW1heHYxNnFpICgoaW50OHgxNl90KSBfX2EsCisJCQkJCQkgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4cV91MTYgKHVpbnQxNng4X3QgX19hLCB1aW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91bWF4djhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAoaW50MTZ4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4cV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91bWF4djRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAoaW50MzJ4NF90KSBfX2IpOworfQorCisvKiB2bWF4bm0gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4bm1fZjMyIChmbG9hdDMyeDJfdCBfX2EsIGZsb2F0MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NtYXh2MnNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4bm1xX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWF4djRzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heG5tcV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc21heHYyZGYgKF9fYSwgX19iKTsKK30KKworLyogdm1heHYgICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHZfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0X2xhbmVfZjMyIChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWF4X25hbl92MnNmIChfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4dl9zOCAoaW50OHg4X3QgX19hKQoreworICByZXR1cm4gdmdldF9sYW5lX3M4IChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWF4X3Y4cWkgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4dl9zMTYgKGludDE2eDRfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0X2xhbmVfczE2IChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWF4X3Y0aGkgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4dl9zMzIgKGludDMyeDJfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0X2xhbmVfczMyIChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWF4X3Yyc2kgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4dl91OCAodWludDh4OF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRfbGFuZV91OCAoKHVpbnQ4eDhfdCkKKwkJX19idWlsdGluX2FhcmNoNjRfcmVkdWNfdW1heF92OHFpICgoaW50OHg4X3QpIF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHZfdTE2ICh1aW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRfbGFuZV91MTYgKCh1aW50MTZ4NF90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191bWF4X3Y0aGkgKChpbnQxNng0X3QpIF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHZfdTMyICh1aW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRfbGFuZV91MzIgKCh1aW50MzJ4Ml90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191bWF4X3Yyc2kgKChpbnQzMngyX3QpIF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXh2cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRxX2xhbmVfZjMyIChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWF4X25hbl92NHNmIChfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4dnFfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0cV9sYW5lX2Y2NCAoX19idWlsdGluX2FhcmNoNjRfcmVkdWNfc21heF9uYW5fdjJkZiAoX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHZxX3M4IChpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9zOCAoX19idWlsdGluX2FhcmNoNjRfcmVkdWNfc21heF92MTZxaSAoX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXh2cV9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0cV9sYW5lX3MxNiAoX19idWlsdGluX2FhcmNoNjRfcmVkdWNfc21heF92OGhpIChfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHZxX3MzMiAoaW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRxX2xhbmVfczMyIChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWF4X3Y0c2kgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4dnFfdTggKHVpbnQ4eDE2X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV91OCAoKHVpbnQ4eDE2X3QpCisJCV9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3VtYXhfdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1heHZxX3UxNiAodWludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0cV9sYW5lX3UxNiAoKHVpbnQxNng4X3QpCisJCV9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3VtYXhfdjhoaSAoKGludDE2eDhfdCkgX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4dnFfdTMyICh1aW50MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRxX2xhbmVfdTMyICgodWludDMyeDRfdCkKKwkJX19idWlsdGluX2FhcmNoNjRfcmVkdWNfdW1heF92NHNpICgoaW50MzJ4NF90KSBfX2EpLCAwKTsKK30KKworLyogdm1heG5tdiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4bm12X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gdmdldF9sYW5lX2YzMiAoX19idWlsdGluX2FhcmNoNjRfcmVkdWNfc21heF92MnNmIChfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWF4bm12cV9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRxX2xhbmVfZjMyIChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWF4X3Y0c2YgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtYXhubXZxX2Y2NCAoZmxvYXQ2NHgyX3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9mNjQgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NtYXhfdjJkZiAoX19hKSwgMCk7Cit9CisKKy8qIHZtaW4gICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWluX2YzMiAoZmxvYXQzMngyX3QgX19hLCBmbG9hdDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWluX25hbnYyc2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5fczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc21pbnY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWluX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NtaW52NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWludjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5fdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91bWludjhxaSAoKGludDh4OF90KSBfX2EsCisJCQkJCQkgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWluX3UxNiAodWludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VtaW52NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5fdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdW1pbnYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5xX2YzMiAoZmxvYXQzMng0X3QgX19hLCBmbG9hdDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWluX25hbnY0c2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5xX2Y2NCAoZmxvYXQ2NHgyX3QgX19hLCBmbG9hdDY0eDJfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWluX25hbnYyZGYgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWlucV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NtaW52MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5xX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NtaW52OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbnFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc21pbnY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbnFfdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF91bWludjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5xX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VtaW52OGhpICgoaW50MTZ4OF90KSBfX2EsCisJCQkJCQkgIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5xX3UzMiAodWludDMyeDRfdCBfX2EsIHVpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VtaW52NHNpICgoaW50MzJ4NF90KSBfX2EsCisJCQkJCQkgIChpbnQzMng0X3QpIF9fYik7Cit9CisKKy8qIHZtaW5ubSAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5ubV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc21pbnYyc2YgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5ubXFfZjMyIChmbG9hdDMyeDRfdCBfX2EsIGZsb2F0MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NtaW52NHNmIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWlubm1xX2Y2NCAoZmxvYXQ2NHgyX3QgX19hLCBmbG9hdDY0eDJfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zbWludjJkZiAoX19hLCBfX2IpOworfQorCisvKiB2bWludiAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWludl9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRfbGFuZV9mMzIgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NtaW5fbmFuX3Yyc2YgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW52X3M4IChpbnQ4eDhfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0X2xhbmVfczggKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NtaW5fdjhxaSAoX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW52X3MxNiAoaW50MTZ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRfbGFuZV9zMTYgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NtaW5fdjRoaSAoX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW52X3MzMiAoaW50MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRfbGFuZV9zMzIgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NtaW5fdjJzaSAoX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW52X3U4ICh1aW50OHg4X3QgX19hKQoreworICByZXR1cm4gdmdldF9sYW5lX3U4ICgodWludDh4OF90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191bWluX3Y4cWkgKChpbnQ4eDhfdCkgX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWludl91MTYgKHVpbnQxNng0X3QgX19hKQoreworICByZXR1cm4gdmdldF9sYW5lX3UxNiAoKHVpbnQxNng0X3QpCisJCV9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3VtaW5fdjRoaSAoKGludDE2eDRfdCkgX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWludl91MzIgKHVpbnQzMngyX3QgX19hKQoreworICByZXR1cm4gdmdldF9sYW5lX3UzMiAoKHVpbnQzMngyX3QpCisJCV9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3VtaW5fdjJzaSAoKGludDMyeDJfdCkgX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbnZxX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9mMzIgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NtaW5fbmFuX3Y0c2YgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW52cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRxX2xhbmVfZjY0IChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWluX25hbl92MmRmIChfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWludnFfczggKGludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0cV9sYW5lX3M4IChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWluX3YxNnFpIChfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbnZxX3MxNiAoaW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRxX2xhbmVfczE2IChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWluX3Y4aGkgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWludnFfczMyIChpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9zMzIgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NtaW5fdjRzaSAoX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW52cV91OCAodWludDh4MTZfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0cV9sYW5lX3U4ICgodWludDh4MTZfdCkKKwkJX19idWlsdGluX2FhcmNoNjRfcmVkdWNfdW1pbl92MTZxaSAoKGludDh4MTZfdCkgX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWludnFfdTE2ICh1aW50MTZ4OF90IF9fYSkKK3sKKyAgcmV0dXJuIHZnZXRxX2xhbmVfdTE2ICgodWludDE2eDhfdCkKKwkJX19idWlsdGluX2FhcmNoNjRfcmVkdWNfdW1pbl92OGhpICgoaW50MTZ4OF90KSBfX2EpLCAwKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW52cV91MzIgKHVpbnQzMng0X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV91MzIgKCh1aW50MzJ4NF90KQorCQlfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y191bWluX3Y0c2kgKChpbnQzMng0X3QpIF9fYSksIDApOworfQorCisvKiB2bWlubm12ICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5ubXZfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0X2xhbmVfZjMyIChfX2J1aWx0aW5fYWFyY2g2NF9yZWR1Y19zbWluX3Yyc2YgKF9fYSksIDApOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtaW5ubXZxX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gdmdldHFfbGFuZV9mMzIgKF9fYnVpbHRpbl9hYXJjaDY0X3JlZHVjX3NtaW5fdjRzZiAoX19hKSwgMCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1pbm5tdnFfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiB2Z2V0cV9sYW5lX2Y2NCAoX19idWlsdGluX2FhcmNoNjRfcmVkdWNfc21pbl92MmRmIChfX2EpLCAwKTsKK30KKworLyogdm1sYSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordm1sYV9mMzIgKGZsb2F0MzJ4Ml90IGEsIGZsb2F0MzJ4Ml90IGIsIGZsb2F0MzJ4Ml90IGMpCit7CisgIHJldHVybiBhICsgYiAqIGM7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9mMzIgKGZsb2F0MzJ4NF90IGEsIGZsb2F0MzJ4NF90IGIsIGZsb2F0MzJ4NF90IGMpCit7CisgIHJldHVybiBhICsgYiAqIGM7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxhcV9mNjQgKGZsb2F0NjR4Ml90IGEsIGZsb2F0NjR4Ml90IGIsIGZsb2F0NjR4Ml90IGMpCit7CisgIHJldHVybiBhICsgYiAqIGM7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2bWxzX2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYiwgZmxvYXQzMngyX3QgYykKK3sKKyAgcmV0dXJuIGEgLSBiICogYzsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX2YzMiAoZmxvYXQzMng0X3QgYSwgZmxvYXQzMng0X3QgYiwgZmxvYXQzMng0X3QgYykKK3sKKyAgcmV0dXJuIGEgLSBiICogYzsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZtbHNxX2Y2NCAoZmxvYXQ2NHgyX3QgYSwgZmxvYXQ2NHgyX3QgYiwgZmxvYXQ2NHgyX3QgYykKK3sKKyAgcmV0dXJuIGEgLSBiICogYzsKK30KKworLyogdnFhYnMgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFic3FfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKGludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhYnN2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNiX3M4IChpbnQ4eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxYWJzcWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNoX3MxNiAoaW50MTZ4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxYWJzaGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhYnNzX3MzMiAoaW50MzJ4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxYWJzc2kgKF9fYSk7Cit9CisKKy8qIHZxYWRkICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZGJfczggKGludDh4MV90IF9fYSwgaW50OHgxX3QgX19iKQoreworICByZXR1cm4gKGludDh4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWFkZHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRoX3MxNiAoaW50MTZ4MV90IF9fYSwgaW50MTZ4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxYWRkaGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZHNfczMyIChpbnQzMngxX3QgX19hLCBpbnQzMngxX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FhZGRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxYWRkZF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWFkZGRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFhZGRiX3U4ICh1aW50OHgxX3QgX19hLCB1aW50OHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFhZGRxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZGhfdTE2ICh1aW50MTZ4MV90IF9fYSwgdWludDE2eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFhZGRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZHNfdTMyICh1aW50MzJ4MV90IF9fYSwgdWludDMyeDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFhZGRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWFkZGRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFhZGRkaSAoX19hLCBfX2IpOworfQorCisvKiB2cWRtbGFsICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2eDRfdCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbGFsdjRoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9oaWdoX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4OF90IF9fYiwgaW50MTZ4OF90IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWwydjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9oaWdoX2xhbmVfczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng4X3QgX19iLCBpbnQxNng4X3QgX19jLAorCQkgICAgICAgaW50IGNvbnN0IF9fZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWwyX2xhbmV2OGhpIChfX2EsIF9fYiwgX19jLCBfX2QpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxfaGlnaF9sYW5lcV9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MsCisJCQlpbnQgY29uc3QgX19kKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxhbDJfbGFuZXF2OGhpIChfX2EsIF9fYiwgX19jLCBfX2QpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxfaGlnaF9uX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4OF90IF9fYiwgaW50MTZfdCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbGFsMl9udjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9sYW5lX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZ4NF90IF9fYywgaW50IGNvbnN0IF9fZCkKK3sKKyAgaW50MTZ4OF90IF9fdG1wID0gdmNvbWJpbmVfczE2IChfX2MsIHZjcmVhdGVfczE2IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWxfbGFuZXY0aGkgKF9fYSwgX19iLCBfX3RtcCwgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbGFsX2xhbmVxX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgaW50MTZ4OF90IF9fYywgaW50IGNvbnN0IF9fZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWxfbGFuZXF2NGhpIChfX2EsIF9fYiwgX19jLCBfX2QpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxfbl9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2X3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxhbF9udjRoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbGFsdjJzaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9oaWdoX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4NF90IF9fYiwgaW50MzJ4NF90IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWwydjRzaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9oaWdoX2xhbmVfczMyIChpbnQ2NHgyX3QgX19hLCBpbnQzMng0X3QgX19iLCBpbnQzMng0X3QgX19jLAorCQkgICAgICAgaW50IGNvbnN0IF9fZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWwyX2xhbmV2NHNpIChfX2EsIF9fYiwgX19jLCBfX2QpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxfaGlnaF9sYW5lcV9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyeDRfdCBfX2MsCisJCQlpbnQgY29uc3QgX19kKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxhbDJfbGFuZXF2NHNpIChfX2EsIF9fYiwgX19jLCBfX2QpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxfaGlnaF9uX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4NF90IF9fYiwgaW50MzJfdCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbGFsMl9udjRzaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbF9sYW5lX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJ4Ml90IF9fYywgaW50IGNvbnN0IF9fZCkKK3sKKyAgaW50MzJ4NF90IF9fdG1wID0gdmNvbWJpbmVfczMyIChfX2MsIHZjcmVhdGVfczMyIChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWxfbGFuZXYyc2kgKF9fYSwgX19iLCBfX3RtcCwgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbGFsX2xhbmVxX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgaW50MzJ4NF90IF9fYywgaW50IGNvbnN0IF9fZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWxfbGFuZXF2MnNpIChfX2EsIF9fYiwgX19jLCBfX2QpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxfbl9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyX3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxhbF9udjJzaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbGhfczE2IChpbnQzMngxX3QgX19hLCBpbnQxNngxX3QgX19iLCBpbnQxNngxX3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxhbGhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbGFsaF9sYW5lX3MxNiAoaW50MzJ4MV90IF9fYSwgaW50MTZ4MV90IF9fYiwgaW50MTZ4OF90IF9fYywgY29uc3QgaW50IF9fZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWxfbGFuZWhpIChfX2EsIF9fYiwgX19jLCBfX2QpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sYWxzX3MzMiAoaW50NjR4MV90IF9fYSwgaW50MzJ4MV90IF9fYiwgaW50MzJ4MV90IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sYWxzaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxhbHNfbGFuZV9zMzIgKGludDY0eDFfdCBfX2EsIGludDMyeDFfdCBfX2IsIGludDMyeDRfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbGFsX2xhbmVzaSAoX19hLCBfX2IsIF9fYywgX19kKTsKK30KKworLyogdnFkbWxzbCAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNng0X3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxzbHY0aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfaGlnaF9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2eDhfdCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsMnY4aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfaGlnaF9sYW5lX3MxNiAoaW50MzJ4NF90IF9fYSwgaW50MTZ4OF90IF9fYiwgaW50MTZ4OF90IF9fYywKKwkJICAgICAgIGludCBjb25zdCBfX2QpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsMl9sYW5ldjhoaSAoX19hLCBfX2IsIF9fYywgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbHNsX2hpZ2hfbGFuZXFfczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng4X3QgX19iLCBpbnQxNng4X3QgX19jLAorCQkJaW50IGNvbnN0IF9fZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sc2wyX2xhbmVxdjhoaSAoX19hLCBfX2IsIF9fYywgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbHNsX2hpZ2hfbl9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDhfdCBfX2IsIGludDE2X3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxzbDJfbnY4aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfbGFuZV9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2eDRfdCBfX2MsIGludCBjb25zdCBfX2QpCit7CisgIGludDE2eDhfdCBfX3RtcCA9IHZjb21iaW5lX3MxNiAoX19jLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsX2xhbmV2NGhpIChfX2EsIF9fYiwgX190bXAsIF9fZCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxzbF9sYW5lcV9zMTYgKGludDMyeDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGludDE2eDhfdCBfX2MsIGludCBjb25zdCBfX2QpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsX2xhbmVxdjRoaSAoX19hLCBfX2IsIF9fYywgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbHNsX25fczE2IChpbnQzMng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQxNl90IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sc2xfbnY0aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfczMyIChpbnQ2NHgyX3QgX19hLCBpbnQzMngyX3QgX19iLCBpbnQzMngyX3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxzbHYyc2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfaGlnaF9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyeDRfdCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsMnY0c2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfaGlnaF9sYW5lX3MzMiAoaW50NjR4Ml90IF9fYSwgaW50MzJ4NF90IF9fYiwgaW50MzJ4NF90IF9fYywKKwkJICAgICAgIGludCBjb25zdCBfX2QpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsMl9sYW5ldjRzaSAoX19hLCBfX2IsIF9fYywgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbHNsX2hpZ2hfbGFuZXFfczMyIChpbnQ2NHgyX3QgX19hLCBpbnQzMng0X3QgX19iLCBpbnQzMng0X3QgX19jLAorCQkJaW50IGNvbnN0IF9fZCkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sc2wyX2xhbmVxdjRzaSAoX19hLCBfX2IsIF9fYywgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbHNsX2hpZ2hfbl9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDRfdCBfX2IsIGludDMyX3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxzbDJfbnY0c2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xfbGFuZV9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDJfdCBfX2MsIGludCBjb25zdCBfX2QpCit7CisgIGludDMyeDRfdCBfX3RtcCA9IHZjb21iaW5lX3MzMiAoX19jLCB2Y3JlYXRlX3MzMiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsX2xhbmV2MnNpIChfX2EsIF9fYiwgX190bXAsIF9fZCk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxzbF9sYW5lcV9zMzIgKGludDY0eDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGludDMyeDRfdCBfX2MsIGludCBjb25zdCBfX2QpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsX2xhbmVxdjJzaSAoX19hLCBfX2IsIF9fYywgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbHNsX25fczMyIChpbnQ2NHgyX3QgX19hLCBpbnQzMngyX3QgX19iLCBpbnQzMl90IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sc2xfbnYyc2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xoX3MxNiAoaW50MzJ4MV90IF9fYSwgaW50MTZ4MV90IF9fYiwgaW50MTZ4MV90IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG1sc2xoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbWxzbGhfbGFuZV9zMTYgKGludDMyeDFfdCBfX2EsIGludDE2eDFfdCBfX2IsIGludDE2eDhfdCBfX2MsIGNvbnN0IGludCBfX2QpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsX2xhbmVoaSAoX19hLCBfX2IsIF9fYywgX19kKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtbHNsc19zMzIgKGludDY0eDFfdCBfX2EsIGludDMyeDFfdCBfX2IsIGludDMyeDFfdCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtbHNsc2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG1sc2xzX2xhbmVfczMyIChpbnQ2NHgxX3QgX19hLCBpbnQzMngxX3QgX19iLCBpbnQzMng0X3QgX19jLCBjb25zdCBpbnQgX19kKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbWxzbF9sYW5lc2kgKF9fYSwgX19iLCBfX2MsIF9fZCk7Cit9CisKKy8qIHZxZG11bGggKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxoX2xhbmVfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsaF9sYW5ldjRoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsaF9sYW5lX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGhfbGFuZXYyc2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGhxX2xhbmVfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsaF9sYW5ldjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsaHFfbGFuZV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtdWxoX2xhbmV2NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxoaF9zMTYgKGludDE2eDFfdCBfX2EsIGludDE2eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtdWxoaGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxoaF9sYW5lX3MxNiAoaW50MTZ4MV90IF9fYSwgaW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGhfbGFuZWhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxoc19zMzIgKGludDMyeDFfdCBfX2EsIGludDMyeDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtdWxoc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxoc19sYW5lX3MzMiAoaW50MzJ4MV90IF9fYSwgaW50MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGhfbGFuZXNpIChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdnFkbXVsbCAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGxfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsbHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX2hpZ2hfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsbDJ2OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsbF9oaWdoX2xhbmVfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iLCBpbnQgY29uc3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsbDJfbGFuZXY4aGkgKF9fYSwgX19iLF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsbF9oaWdoX2xhbmVxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYiwgaW50IGNvbnN0IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGwyX2xhbmVxdjhoaSAoX19hLCBfX2IsX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX2hpZ2hfbl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsbDJfbnY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX2xhbmVfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iLCBpbnQgY29uc3QgX19jKQoreworICBpbnQxNng4X3QgX190bXAgPSB2Y29tYmluZV9zMTYgKF9fYiwgdmNyZWF0ZV9zMTYgKF9fQUFSQ0g2NF9JTlQ2NF9DICgwKSkpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsbF9sYW5ldjRoaSAoX19hLCBfX3RtcCwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX2xhbmVxX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4OF90IF9fYiwgaW50IGNvbnN0IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGxfbGFuZXF2NGhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX25fczE2IChpbnQxNng0X3QgX19hLCBpbnQxNl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGxfbnY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGx2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFkbXVsbF9oaWdoX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGwydjRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxZG11bGxfaGlnaF9sYW5lX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYiwgaW50IGNvbnN0IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGwyX2xhbmV2NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX2hpZ2hfbGFuZXFfczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iLCBpbnQgY29uc3QgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsbDJfbGFuZXF2NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX2hpZ2hfbl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsbDJfbnY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX2xhbmVfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iLCBpbnQgY29uc3QgX19jKQoreworICBpbnQzMng0X3QgX190bXAgPSB2Y29tYmluZV9zMzIgKF9fYiwgdmNyZWF0ZV9zMzIgKF9fQUFSQ0g2NF9JTlQ2NF9DICgwKSkpOworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FkbXVsbF9sYW5ldjJzaSAoX19hLCBfX3RtcCwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX2xhbmVxX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4NF90IF9fYiwgaW50IGNvbnN0IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGxfbGFuZXF2MnNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsX25fczMyIChpbnQzMngyX3QgX19hLCBpbnQzMl90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGxfbnYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsaF9zMTYgKGludDE2eDFfdCBfX2EsIGludDE2eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtdWxsaGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsaF9sYW5lX3MxNiAoaW50MTZ4MV90IF9fYSwgaW50MTZ4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGxfbGFuZWhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsc19zMzIgKGludDMyeDFfdCBfX2EsIGludDMyeDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcWRtdWxsc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cWRtdWxsc19sYW5lX3MzMiAoaW50MzJ4MV90IF9fYSwgaW50MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxZG11bGxfbGFuZXNpIChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdnFtb3ZuICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdm5fczE2IChpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcW1vdm52OGhpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bl9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcW1vdm52NHNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bl9zNjQgKGludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcW1vdm52MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bl91MTYgKHVpbnQxNng4X3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXFtb3ZudjhoaSAoKGludDE2eDhfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3ZuX3UzMiAodWludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXFtb3ZudjRzaSAoKGludDMyeDRfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3ZuX3U2NCAodWludDY0eDJfdCBfX2EpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXFtb3ZudjJkaSAoKGludDY0eDJfdCkgX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bmhfczE2IChpbnQxNngxX3QgX19hKQoreworICByZXR1cm4gKGludDh4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcW1vdm5oaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW1vdm5zX3MzMiAoaW50MzJ4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbW92bnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bmRfczY0IChpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKGludDMyeDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3Ftb3ZuZGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3ZuaF91MTYgKHVpbnQxNngxX3QgX19hKQoreworICByZXR1cm4gKHVpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFtb3ZuaGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92bnNfdTMyICh1aW50MzJ4MV90IF9fYSkKK3sKKyAgcmV0dXJuICh1aW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cW1vdm5zaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3ZuZF91NjQgKHVpbnQ2NHgxX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxbW92bmRpIChfX2EpOworfQorCisvKiB2cW1vdnVuICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3Z1bl9zMTYgKGludDE2eDhfdCBfX2EpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcW1vdnVudjhoaSAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3Z1bl9zMzIgKGludDMyeDRfdCBfX2EpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3Ftb3Z1bnY0c2kgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92dW5fczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbW92dW52MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3Z1bmhfczE2IChpbnQxNngxX3QgX19hKQoreworICByZXR1cm4gKGludDh4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcW1vdnVuaGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFtb3Z1bnNfczMyIChpbnQzMngxX3QgX19hKQoreworICByZXR1cm4gKGludDE2eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3Ftb3Z1bnNpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxbW92dW5kX3M2NCAoaW50NjR4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbW92dW5kaSAoX19hKTsKK30KKworLyogdnFuZWcgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cW5lZ3FfczY0IChpbnQ2NHgyX3QgX19hKQoreworICByZXR1cm4gKGludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FuZWd2MmRpIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFuZWdiX3M4IChpbnQ4eDFfdCBfX2EpCit7CisgIHJldHVybiAoaW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbmVncWkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFuZWdoX3MxNiAoaW50MTZ4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbmVnaGkgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFuZWdzX3MzMiAoaW50MzJ4MV90IF9fYSkKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxbmVnc2kgKF9fYSk7Cit9CisKKy8qIHZxcmRtdWxoICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhfbGFuZV9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAgX19idWlsdGluX2FhcmNoNjRfc3FyZG11bGhfbGFuZXY0aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxoX2xhbmVfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FyZG11bGhfbGFuZXYyc2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxocV9sYW5lX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxcmRtdWxoX2xhbmV2OGhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaHFfbGFuZV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcXJkbXVsaF9sYW5ldjRzaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhoX3MxNiAoaW50MTZ4MV90IF9fYSwgaW50MTZ4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcmRtdWxoaGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJkbXVsaGhfbGFuZV9zMTYgKGludDE2eDFfdCBfX2EsIGludDE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcXJkbXVsaF9sYW5laGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcmRtdWxoc19zMzIgKGludDMyeDFfdCBfX2EsIGludDMyeDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXJkbXVsaHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyZG11bGhzX2xhbmVfczMyIChpbnQzMngxX3QgX19hLCBpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FyZG11bGhfbGFuZXNpIChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdnFyc2hsICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3Fyc2hsdjhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcXJzaGx2NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hsX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNobHYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3Fyc2hsZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxfdTggKHVpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxcnNobHY4cWkgKChpbnQ4eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxfdTE2ICh1aW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXJzaGx2NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobF91MzIgKHVpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxcnNobHYyc2kgKChpbnQzMngyX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hsX3U2NCAodWludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFyc2hsZGkgKChpbnQ2NHgxX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3Fyc2hsdjE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNobHY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNobHY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNobHYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hscV91OCAodWludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfdXFyc2hsdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hscV91MTYgKHVpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxcnNobHY4aGkgKChpbnQxNng4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hscV91MzIgKHVpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxcnNobHY0c2kgKChpbnQzMng0X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hscV91NjQgKHVpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxcnNobHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobGJfczggKGludDh4MV90IF9fYSwgaW50OHgxX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3Fyc2hscWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxoX3MxNiAoaW50MTZ4MV90IF9fYSwgaW50MTZ4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNobGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hsc19zMzIgKGludDMyeDFfdCBfX2EsIGludDMyeDFfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcXJzaGxzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobGRfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3Fyc2hsZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxiX3U4ICh1aW50OHgxX3QgX19hLCB1aW50OHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFyc2hscWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hsaF91MTYgKHVpbnQxNngxX3QgX19hLCB1aW50MTZ4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXJzaGxoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaGxzX3UzMiAodWludDMyeDFfdCBfX2EsIHVpbnQzMngxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxcnNobHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNobGRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFyc2hsZGkgKF9fYSwgX19iKTsKK30KKworLyogdnFyc2hybiAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hybl9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3Fyc2hybl9udjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocm5fbl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXJzaHJuX252NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hybl9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNocm5fbnYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJuX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxcnNocm5fbnY4aGkgKChpbnQxNng4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hybl9uX3UzMiAodWludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXFyc2hybl9udjRzaSAoKGludDMyeDRfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJuX25fdTY0ICh1aW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXJzaHJuX252MmRpICgoaW50NjR4Ml90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJuaF9uX3MxNiAoaW50MTZ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3Fyc2hybl9uaGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJuc19uX3MzMiAoaW50MzJ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNocm5fbnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFyc2hybmRfbl9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXJzaHJuX25kaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocm5oX25fdTE2ICh1aW50MTZ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VxcnNocm5fbmhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocm5zX25fdTMyICh1aW50MzJ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXJzaHJuX25zaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJuZF9uX3U2NCAodWludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFyc2hybl9uZGkgKF9fYSwgX19iKTsKK30KKworLyogdnFyc2hydW4gKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJ1bl9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNocnVuX252OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocnVuX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNocnVuX252NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocnVuX25fczY0IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNocnVuX252MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXJzaHJ1bmhfbl9zMTYgKGludDE2eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNocnVuX25oaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocnVuc19uX3MzMiAoaW50MzJ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNocnVuX25zaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZxcnNocnVuZF9uX3M2NCAoaW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnNocnVuX25kaSAoX19hLCBfX2IpOworfQorCisvKiB2cXNobCAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FzaGx2OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FzaGx2NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfczMyIChpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FzaGx2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FzaGxkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsX3U4ICh1aW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobHY4cWkgKChpbnQ4eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobF91MTYgKHVpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hsdjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobF91MzIgKHVpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hsdjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobF91NjQgKHVpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hsZGkgKChpbnQ2NHgxX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobHYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX3MxNiAoaW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsdjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobHY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHFfczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FzaGx2MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV91OCAodWludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaGx2MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobHY4aGkgKChpbnQxNng4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX3UzMiAodWludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaGx2NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV91NjQgKHVpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hsdjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxiX3M4IChpbnQ4eDFfdCBfX2EsIGludDh4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hscWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobGhfczE2IChpbnQxNngxX3QgX19hLCBpbnQxNngxX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FzaGxoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsc19zMzIgKGludDMyeDFfdCBfX2EsIGludDMyeDFfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxkX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobGJfdTggKHVpbnQ4eDFfdCBfX2EsIHVpbnQ4eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsaF91MTYgKHVpbnQxNngxX3QgX19hLCB1aW50MTZ4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsc191MzIgKHVpbnQzMngxX3QgX19hLCB1aW50MzJ4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsZF91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobGRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobF9uX3M4IChpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsX252OHFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl9zMTYgKGludDE2eDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobF9udjRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsX25fczMyIChpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGxfbnYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobF9uX3M2NCAoaW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsX25kaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsX25fdTggKHVpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobF9udjhxaSAoKGludDh4OF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsX25fdTE2ICh1aW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobF9udjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobF9uX3UzMiAodWludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaGxfbnYyc2kgKChpbnQzMngyX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxfbl91NjQgKHVpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hsX25kaSAoKGludDY0eDFfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV9uX3M4IChpbnQ4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGxfbnYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX25fczE2IChpbnQxNng4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGxfbnY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobF9udjRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsX252MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV9uX3U4ICh1aW50OHgxNl90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobF9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGxxX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNobF9udjhoaSAoKGludDE2eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHFfbl91MzIgKHVpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hsX252NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hscV9uX3U2NCAodWludDY0eDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaGxfbnYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsYl9uX3M4IChpbnQ4eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsX25xaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsaF9uX3MxNiAoaW50MTZ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsX25oaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsc19uX3MzMiAoaW50MzJ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsX25zaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsZF9uX3M2NCAoaW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsX25kaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsYl9uX3U4ICh1aW50OHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaGxfbnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsaF9uX3UxNiAodWludDE2eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaGxfbmhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsc19uX3UzMiAodWludDMyeDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaGxfbnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsZF9uX3U2NCAodWludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaGxfbmRpIChfX2EsIF9fYik7Cit9CisKKy8qIHZxc2hsdSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdV9uX3M4IChpbnQ4eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobHVfbnY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGx1X25fczE2IChpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsdV9udjRoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHVfbl9zMzIgKGludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGx1X252MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdV9uX3M2NCAoaW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobHVfbmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdXFfbl9zOCAoaW50OHgxNl90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobHVfbnYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdXFfbl9zMTYgKGludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGx1X252OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdXFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGx1X252NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdXFfbl9zNjQgKGludDY0eDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGx1X252MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHViX25fczggKGludDh4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGx1X25xaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hsdWhfbl9zMTYgKGludDE2eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNobHVfbmhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaGx1c19uX3MzMiAoaW50MzJ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hsdV9uc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNobHVkX25fczY0IChpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaGx1X25kaSAoX19hLCBfX2IpOworfQorCisvKiB2cXNocm4gKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hybl9uX3MxNiAoaW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaHJuX252OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJuX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaHJuX252NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJuX25fczY0IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaHJuX252MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJuX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hybl9udjhoaSAoKGludDE2eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocm5fbl91MzIgKHVpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hybl9udjRzaSAoKGludDMyeDRfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocm5fbl91NjQgKHVpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hybl9udjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJuaF9uX3MxNiAoaW50MTZ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaHJuX25oaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc2hybnNfbl9zMzIgKGludDMyeDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNocm5fbnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJuZF9uX3M2NCAoaW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hybl9uZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocm5oX25fdTE2ICh1aW50MTZ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc2hybl9uaGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJuc19uX3UzMiAodWludDMyeDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXFzaHJuX25zaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocm5kX25fdTY0ICh1aW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cXNocm5fbmRpIChfX2EsIF9fYik7Cit9CisKKy8qIHZxc2hydW4gKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocnVuX25fczE2IChpbnQxNng4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaHJ1bl9udjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocnVuX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hydW5fbnY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJ1bl9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNocnVuX252MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocnVuaF9uX3MxNiAoaW50MTZ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzaHJ1bl9uaGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXNocnVuc19uX3MzMiAoaW50MzJ4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc2hydW5fbnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzaHJ1bmRfbl9zNjQgKGludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXNocnVuX25kaSAoX19hLCBfX2IpOworfQorCisvKiB2cXN1YiAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJiX3M4IChpbnQ4eDFfdCBfX2EsIGludDh4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzdWJxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViaF9zMTYgKGludDE2eDFfdCBfX2EsIGludDE2eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcXN1YmhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJzX3MzMiAoaW50MzJ4MV90IF9fYSwgaW50MzJ4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nxc3Vic2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cXN1YmRfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3FzdWJkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zxc3ViYl91OCAodWludDh4MV90IF9fYSwgdWludDh4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc3VicWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJoX3UxNiAodWludDE2eDFfdCBfX2EsIHVpbnQxNngxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc3ViaGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJzX3UzMiAodWludDMyeDFfdCBfX2EsIHVpbnQzMngxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc3Vic2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnFzdWJkX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vxc3ViZGkgKF9fYSwgX19iKTsKK30KKworLyogdnJlY3BlICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWNwZXNfZjMyIChmbG9hdDMyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZnJlY3Blc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlY3BlZF9mNjQgKGZsb2F0NjRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mcmVjcGVkZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWNwZV9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2ZyZWNwZXYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVjcGVxX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZnJlY3BldjRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWNwZXFfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mcmVjcGV2MmRmIChfX2EpOworfQorCisvKiB2cmVjcHMgICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlY3Bzc19mMzIgKGZsb2F0MzJfdCBfX2EsIGZsb2F0MzJfdCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mcmVjcHNzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWNwc2RfZjY0IChmbG9hdDY0X3QgX19hLCBmbG9hdDY0X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZnJlY3BzZGYgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZyZWNwc19mMzIgKGZsb2F0MzJ4Ml90IF9fYSwgZmxvYXQzMngyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZnJlY3BzdjJzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlY3BzcV9mMzIgKGZsb2F0MzJ4NF90IF9fYSwgZmxvYXQzMng0X3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZnJlY3BzdjRzZiAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlY3BzcV9mNjQgKGZsb2F0NjR4Ml90IF9fYSwgZmxvYXQ2NHgyX3QgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfZnJlY3BzdjJkZiAoX19hLCBfX2IpOworfQorCisvKiB2cmVjcHggICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJlY3B4c19mMzIgKGZsb2F0MzJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mcmVjcHhzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cmVjcHhkX2Y2NCAoZmxvYXQ2NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2ZyZWNweGRmIChfX2EpOworfQorCisvKiB2cm5kICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJuZF9mMzIgKGZsb2F0MzJ4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2J0cnVuY3Yyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5kcV9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2J0cnVuY3Y0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5kcV9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2J0cnVuY3YyZGYgKF9fYSk7Cit9CisKKy8qIHZybmRhICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJuZGFfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yb3VuZHYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5kYXFfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yb3VuZHY0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5kYXFfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yb3VuZHYyZGYgKF9fYSk7Cit9CisKKy8qIHZybmRpICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJuZGlfZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9uZWFyYnlpbnR2MnNmIChfX2EpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJuZGlxX2YzMiAoZmxvYXQzMng0X3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfbmVhcmJ5aW50djRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZybmRpcV9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X25lYXJieWludHYyZGYgKF9fYSk7Cit9CisKKy8qIHZybmRtICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJuZG1fZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mbG9vcnYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5kbXFfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mbG9vcnY0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5kbXFfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mbG9vcnYyZGYgKF9fYSk7Cit9CisKKy8qIHZybmRuICAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJuZG5fZjMyIChmbG9hdDMyeDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mcmludG52MnNmIChfX2EpOworfQorX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZybmRucV9mMzIgKGZsb2F0MzJ4NF90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2ZyaW50bnY0c2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5kbnFfZjY0IChmbG9hdDY0eDJfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9mcmludG52MmRmIChfX2EpOworfQorCisvKiB2cm5kcCAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZybmRwX2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfY2VpbHYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5kcHFfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9jZWlsdjRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZybmRwcV9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X2NlaWx2MmRmIChfX2EpOworfQorCisvKiB2cm5keCAgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZybmR4X2YzMiAoZmxvYXQzMngyX3QgX19hKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfcmludHYyc2YgKF9fYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cm5keHFfZjMyIChmbG9hdDMyeDRfdCBfX2EpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9yaW50djRzZiAoX19hKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZybmR4cV9mNjQgKGZsb2F0NjR4Ml90IF9fYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3JpbnR2MmRmIChfX2EpOworfQorCisvKiB2cnNobCAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNobHY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobF9zMTYgKGludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNobHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNobHYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNobGRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxfdTggKHVpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc2hsdjhxaSAoKGludDh4OF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hsX3UxNiAodWludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXJzaGx2NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hsX3UzMiAodWludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXJzaGx2MnNpICgoaW50MzJ4Ml90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hsX3U2NCAodWludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXJzaGxkaSAoKGludDY0eDFfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hscV9zOCAoaW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc2hsdjE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3JzaGx2OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc2hsdjRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hscV9zNjQgKGludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNobHYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxxX3U4ICh1aW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF91cnNobHYxNnFpICgoaW50OHgxNl90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hscV91MTYgKHVpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc2hsdjhoaSAoKGludDE2eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNobHFfdTMyICh1aW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cnNobHY0c2kgKChpbnQzMng0X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxxX3U2NCAodWludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXJzaGx2MmRpICgoaW50NjR4Ml90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxkX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc2hsZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaGxkX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc2hsZGkgKF9fYSwgX19iKTsKK30KKworLyogdnJzaHIgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hyX25fczggKGludDh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3JzaHJfbnY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocl9uX3MxNiAoaW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc2hyX252NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJfbl9zMzIgKGludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNocl9udjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hyX25fczY0IChpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3JzaHJfbmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJfbl91OCAodWludDh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc2hyX252OHFpICgoaW50OHg4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJfbl91MTYgKHVpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc2hyX252NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hyX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91cnNocl9udjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocl9uX3U2NCAodWludDY0eDFfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXJzaHJfbmRpICgoaW50NjR4MV90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJxX25fczggKGludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNocl9udjE2cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocnFfbl9zMTYgKGludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNocl9udjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hycV9uX3MzMiAoaW50MzJ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc2hyX252NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJxX25fczY0IChpbnQ2NHgyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3JzaHJfbnYyZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJxX25fdTggKHVpbnQ4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc2hyX252MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocnFfbl91MTYgKHVpbnQxNng4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc2hyX252OGhpICgoaW50MTZ4OF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hycV9uX3UzMiAodWludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXJzaHJfbnY0c2kgKChpbnQzMng0X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzaHJxX25fdTY0ICh1aW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91cnNocl9udjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc2hyZF9uX3M2NCAoaW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc2hyX25kaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNocmRfbl91NjQgKHVpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc2hyX25kaSAoX19hLCBfX2IpOworfQorCisvKiB2cnNyYSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFfbl9zOCAoaW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc3JhX252OHFpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYV9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc3JhX252NGhpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYV9uX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc3JhX252MnNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYV9uX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc3JhX25kaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFfbl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc3JhX252OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAgICAoaW50OHg4X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFfbl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cnNyYV9udjRoaSAoKGludDE2eDRfdCkgX19hLAorCQkJCQkJICAgICAoaW50MTZ4NF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3JhX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXJzcmFfbnYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgICAgKGludDMyeDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYV9uX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc3JhX25kaSAoKGludDY0eDFfdCkgX19hLAorCQkJCQkJICAgKGludDY0eDFfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3JhcV9uX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3JzcmFfbnYxNnFpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYXFfbl9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNyYV9udjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFxX25fczMyIChpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3JzcmFfbnY0c2kgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3JhcV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Nyc3JhX252MmRpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFxX25fdTggKHVpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF91cnNyYV9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgICAgIChpbnQ4eDE2X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnJzcmFxX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgdWludDE2eDhfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXJzcmFfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgICAgKGludDE2eDhfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYXFfbl91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91cnNyYV9udjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgICAoaW50MzJ4NF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zyc3JhcV9uX3U2NCAodWludDY0eDJfdCBfX2EsIHVpbnQ2NHgyX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3Vyc3JhX252MmRpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgICAgIChpbnQ2NHgyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYWRfbl9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zcnNyYV9uZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2cnNyYWRfbl91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91cnNyYV9uZGkgKF9fYSwgX19iLCBfX2MpOworfQorCisvKiB2c2hsICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fczggKGludDh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobHY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fczE2IChpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fczMyIChpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobHYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fczY0IChpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobGRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF9uX3U4ICh1aW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobHY4cWkgKChpbnQ4eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fdTE2ICh1aW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9hc2hsdjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9hc2hsdjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX25fdTY0ICh1aW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9hc2hsZGkgKChpbnQ2NHgxX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV9uX3M4IChpbnQ4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobHYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfbl9zMTYgKGludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9hc2hsdjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobHY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FzaGx2MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX25fdTggKHVpbnQ4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FzaGx2MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV9uX3UxNiAodWludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobHY4aGkgKChpbnQxNng4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfbl91MzIgKHVpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FzaGx2NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX25fdTY0ICh1aW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9hc2hsdjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxkX25fczY0IChpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfYXNobGRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxkX25fdTY0ICh1aW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9hc2hsZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfczggKGludDh4OF90IF9fYSwgaW50OHg4X3QgX19iKQoreworICByZXR1cm4gKGludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc2hsdjhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfczE2IChpbnQxNng0X3QgX19hLCBpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3NobHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX3MzMiAoaW50MzJ4Ml90IF9fYSwgaW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzaGx2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc2hsZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX3U4ICh1aW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c2hsdjhxaSAoKGludDh4OF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxfdTE2ICh1aW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c2hsdjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsX3UzMiAodWludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXNobHYyc2kgKChpbnQzMngyX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobF91NjQgKHVpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzaGxkaSAoKGludDY0eDFfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3NobHYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3NobHY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc2hsdjRzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzaGx2MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX3U4ICh1aW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF91c2hsdjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobHFfdTE2ICh1aW50MTZ4OF90IF9fYSwgaW50MTZ4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c2hsdjhoaSAoKGludDE2eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hscV91MzIgKHVpbnQzMng0X3QgX19hLCBpbnQzMng0X3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzaGx2NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxxX3U2NCAodWludDY0eDJfdCBfX2EsIGludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXNobHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsZF9zNjQgKGludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc2hsZGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobGRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXNobGRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobGxfaGlnaF9uX3M4IChpbnQ4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3NobGwyX252MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxsX2hpZ2hfbl9zMTYgKGludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zc2hsbDJfbnY4aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsbF9oaWdoX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3NobGwyX252NHNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxsX2hpZ2hfbl91OCAodWludDh4MTZfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXNobGwyX252MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsbF9oaWdoX25fdTE2ICh1aW50MTZ4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c2hsbDJfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobGxfaGlnaF9uX3UzMiAodWludDMyeDRfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXNobGwyX252NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobGxfbl9zOCAoaW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3NobGxfbnY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsbF9uX3MxNiAoaW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NzaGxsX252NGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobGxfbl9zMzIgKGludDMyeDJfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zc2hsbF9udjJzaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hsbF9uX3U4ICh1aW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzaGxsX252OHFpICgoaW50OHg4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNobGxfbl91MTYgKHVpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzaGxsX252NGhpICgoaW50MTZ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaGxsX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91c2hsbF9udjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IpOworfQorCisvKiB2c2hyICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fczggKGludDh4OF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfYXNocnY4cWkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fczE2IChpbnQxNng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfYXNocnY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fczMyIChpbnQzMngyX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfYXNocnYyc2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fczY0IChpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfYXNocmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocl9uX3U4ICh1aW50OHg4X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfbHNocnY4cWkgKChpbnQ4eDhfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fdTE2ICh1aW50MTZ4NF90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9sc2hydjRoaSAoKGludDE2eDRfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9sc2hydjJzaSAoKGludDMyeDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hyX25fdTY0ICh1aW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9sc2hyZGkgKChpbnQ2NHgxX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hycV9uX3M4IChpbnQ4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfYXNocnYxNnFpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocnFfbl9zMTYgKGludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9hc2hydjhoaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJxX25fczMyIChpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfYXNocnY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hycV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2FzaHJ2MmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJxX25fdTggKHVpbnQ4eDE2X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xzaHJ2MTZxaSAoKGludDh4MTZfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2hycV9uX3UxNiAodWludDE2eDhfdCBfX2EsIGNvbnN0IGludCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfbHNocnY4aGkgKChpbnQxNng4X3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNocnFfbl91MzIgKHVpbnQzMng0X3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2xzaHJ2NHNpICgoaW50MzJ4NF90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJxX25fdTY0ICh1aW50NjR4Ml90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9sc2hydjJkaSAoKGludDY0eDJfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJkX25fczY0IChpbnQ2NHgxX3QgX19hLCBjb25zdCBpbnQgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfYXNocmRpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzaHJkX25fdTY0ICh1aW50NjR4MV90IF9fYSwgY29uc3QgaW50IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9sc2hyZGkgKF9fYSwgX19iKTsKK30KKworLyogdnNsaSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaV9uX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3NsaV9udjhxaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaV9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzbGlfbnY0aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlfbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc2xpX252MnNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpX25fczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3NsaV9uZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlfbl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzbGlfbnY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJICAgKGludDh4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlfbl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c2xpX252NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgICAgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXNsaV9udjJzaSAoKGludDMyeDJfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMngyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaV9uX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzbGlfbmRpICgoaW50NjR4MV90KSBfX2EsCisJCQkJCQkgIChpbnQ2NHgxX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpcV9uX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3NsaV9udjE2cWkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlxX25fczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3NsaV9udjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaXFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc2xpX252NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpcV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzbGlfbnYyZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpcV9uX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfdXNsaV9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgICAgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpcV9uX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzbGlfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgICAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlxX25fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXNsaV9udjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMng0X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNsaXFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91c2xpX252MmRpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgICAgKGludDY0eDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzbGlkX25fczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3NsaV9uZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c2xpZF9uX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzbGlfbmRpIChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdnNxYWRkICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNxYWRkX3U4ICh1aW50OHg4X3QgX19hLCBpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3FhZGR2OHFpICgoaW50OHg4X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNxYWRkX3UxNiAodWludDE2eDRfdCBfX2EsIGludDE2eDRfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXNxYWRkdjRoaSAoKGludDE2eDRfdCkgX19hLAorCQkJCQkJICAgIChpbnQxNng0X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcWFkZF91MzIgKHVpbnQzMngyX3QgX19hLCBpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcWFkZHYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgICAoaW50MzJ4Ml90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3FhZGRfdTY0ICh1aW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3FhZGRkaSAoKGludDY0eDFfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3FhZGRxX3U4ICh1aW50OHgxNl90IF9fYSwgaW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxNl90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3FhZGR2MTZxaSAoKGludDh4MTZfdCkgX19hLAorCQkJCQkJICAgICAoaW50OHgxNl90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3FhZGRxX3UxNiAodWludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfdXNxYWRkdjhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAgIChpbnQxNng4X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcWFkZHFfdTMyICh1aW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3FhZGR2NHNpICgoaW50MzJ4NF90KSBfX2EsCisJCQkJCQkgICAgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNxYWRkcV91NjQgKHVpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcWFkZHYyZGkgKChpbnQ2NHgyX3QpIF9fYSwKKwkJCQkJCSAgICAoaW50NjR4Ml90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcWFkZGJfdTggKHVpbnQ4eDFfdCBfX2EsIGludDh4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcWFkZHFpICgoaW50OHgxX3QpIF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNxYWRkaF91MTYgKHVpbnQxNngxX3QgX19hLCBpbnQxNngxX3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcWFkZGhpICgoaW50MTZ4MV90KSBfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcWFkZHNfdTMyICh1aW50MzJ4MV90IF9fYSwgaW50MzJ4MV90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3FhZGRzaSAoKGludDMyeDFfdCkgX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3FhZGRkX3U2NCAodWludDY0eDFfdCBfX2EsIGludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfdXNxYWRkZGkgKChpbnQ2NHgxX3QpIF9fYSwgX19iKTsKK30KKworLyogdnNxcnQgKi8KK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3FydF9mMzIgKGZsb2F0MzJ4Ml90IGEpCit7CisgIHJldHVybiBfX2J1aWx0aW5fYWFyY2g2NF9zcXJ0djJzZiAoYSk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGZsb2F0MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3FydHFfZjMyIChmbG9hdDMyeDRfdCBhKQoreworICByZXR1cm4gX19idWlsdGluX2FhcmNoNjRfc3FydHY0c2YgKGEpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNxcnRxX2Y2NCAoZmxvYXQ2NHgyX3QgYSkKK3sKKyAgcmV0dXJuIF9fYnVpbHRpbl9hYXJjaDY0X3NxcnR2MmRmIChhKTsKK30KKworLyogdnNyYSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYV9uX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyYV9udjhxaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYV9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzcmFfbnY0aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFfbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc3JhX252MnNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhX25fczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyYV9uZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFfbl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcmFfbnY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJICAgKGludDh4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFfbl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3JhX252NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgICAgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXNyYV9udjJzaSAoKGludDMyeDJfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMngyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYV9uX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcmFfbmRpICgoaW50NjR4MV90KSBfX2EsCisJCQkJCQkgIChpbnQ2NHgxX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhcV9uX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyYV9udjE2cWkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFxX25fczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyYV9udjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYXFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc3JhX252NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhcV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzcmFfbnYyZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhcV9uX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfdXNyYV9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgICAgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhcV9uX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcmFfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgICAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFxX25fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXNyYV9udjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMng0X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyYXFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3JhX252MmRpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgICAgKGludDY0eDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmFkX25fczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyYV9uZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JhZF9uX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcmFfbmRpIChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdnNyaSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaV9uX3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyaV9udjhxaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaV9uX3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzcmlfbnY0aGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zzcmlfbl9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc3JpX252MnNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpX25fczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyaV9uZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zzcmlfbl91OCAodWludDh4OF90IF9fYSwgdWludDh4OF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcmlfbnY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJICAgKGludDh4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Zzcmlfbl91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3JpX252NGhpICgoaW50MTZ4NF90KSBfX2EsCisJCQkJCQkgICAgKGludDE2eDRfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpX25fdTMyICh1aW50MzJ4Ml90IF9fYSwgdWludDMyeDJfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfdXNyaV9udjJzaSAoKGludDMyeDJfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMngyX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaV9uX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcmlfbmRpICgoaW50NjR4MV90KSBfX2EsCisJCQkJCQkgIChpbnQ2NHgxX3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpcV9uX3M4IChpbnQ4eDE2X3QgX19hLCBpbnQ4eDE2X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyaV9udjE2cWkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmlxX25fczE2IChpbnQxNng4X3QgX19hLCBpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyaV9udjhoaSAoX19hLCBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaXFfbl9zMzIgKGludDMyeDRfdCBfX2EsIGludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAoaW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9zc3JpX252NHNpIChfX2EsIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpcV9uX3M2NCAoaW50NjR4Ml90IF9fYSwgaW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuIChpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3NzcmlfbnYyZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpcV9uX3U4ICh1aW50OHgxNl90IF9fYSwgdWludDh4MTZfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfdXNyaV9udjE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgICAgKGludDh4MTZfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpcV9uX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcmlfbnY4aGkgKChpbnQxNng4X3QpIF9fYSwKKwkJCQkJCSAgICAoaW50MTZ4OF90KSBfX2IsIF9fYyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmlxX25fdTMyICh1aW50MzJ4NF90IF9fYSwgdWludDMyeDRfdCBfX2IsIGNvbnN0IGludCBfX2MpCit7CisgIHJldHVybiAodWludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfdXNyaV9udjRzaSAoKGludDMyeDRfdCkgX19hLAorCQkJCQkJICAgIChpbnQzMng0X3QpIF9fYiwgX19jKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnNyaXFfbl91NjQgKHVpbnQ2NHgyX3QgX19hLCB1aW50NjR4Ml90IF9fYiwgY29uc3QgaW50IF9fYykKK3sKKyAgcmV0dXJuICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF91c3JpX252MmRpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgICAgKGludDY0eDJfdCkgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzcmlkX25fczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3NyaV9uZGkgKF9fYSwgX19iLCBfX2MpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3JpZF9uX3U2NCAodWludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iLCBjb25zdCBpbnQgX19jKQoreworICByZXR1cm4gKHVpbnQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3VzcmlfbmRpIChfX2EsIF9fYiwgX19jKTsKK30KKworLyogdnN0MSAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX2YzMiAoZmxvYXQzMl90ICphLCBmbG9hdDMyeDJfdCBiKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF2MnNmICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zZiAqKSBhLCBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV9mNjQgKGZsb2F0NjRfdCAqYSwgZmxvYXQ2NHgxX3QgYikKK3sKKyAgKmEgPSBiOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3A4IChwb2x5OF90ICphLCBwb2x5OHg4X3QgYikKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxdjhxaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgYSwKKwkJCSAgICAgKGludDh4OF90KSBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV9wMTYgKHBvbHkxNl90ICphLCBwb2x5MTZ4NF90IGIpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXY0aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIGEsCisJCQkgICAgIChpbnQxNng0X3QpIGIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3M4IChpbnQ4X3QgKmEsIGludDh4OF90IGIpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXY4cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIGEsIGIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3MxNiAoaW50MTZfdCAqYSwgaW50MTZ4NF90IGIpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXY0aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIGEsIGIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3MzMiAoaW50MzJfdCAqYSwgaW50MzJ4Ml90IGIpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXYyc2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIGEsIGIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3M2NCAoaW50NjRfdCAqYSwgaW50NjR4MV90IGIpCit7CisgICphID0gYjsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV91OCAodWludDhfdCAqYSwgdWludDh4OF90IGIpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXY4cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIGEsCisJCQkgICAgIChpbnQ4eDhfdCkgYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFfdTE2ICh1aW50MTZfdCAqYSwgdWludDE2eDRfdCBiKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF2NGhpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBhLAorCQkJICAgICAoaW50MTZ4NF90KSBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MV91MzIgKHVpbnQzMl90ICphLCB1aW50MzJ4Ml90IGIpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXYyc2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIGEsCisJCQkgICAgIChpbnQzMngyX3QpIGIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxX3U2NCAodWludDY0X3QgKmEsIHVpbnQ2NHgxX3QgYikKK3sKKyAgKmEgPSBiOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxcV9mMzIgKGZsb2F0MzJfdCAqYSwgZmxvYXQzMng0X3QgYikKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxdjRzZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2YgKikgYSwgYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX2Y2NCAoZmxvYXQ2NF90ICphLCBmbG9hdDY0eDJfdCBiKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF2MmRmICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kZiAqKSBhLCBiKTsKK30KKworLyogdnN0MXEgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfcDggKHBvbHk4X3QgKmEsIHBvbHk4eDE2X3QgYikKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxdjE2cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIGEsCisJCQkgICAgICAoaW50OHgxNl90KSBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfcDE2IChwb2x5MTZfdCAqYSwgcG9seTE2eDhfdCBiKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF2OGhpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBhLAorCQkJICAgICAoaW50MTZ4OF90KSBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfczggKGludDhfdCAqYSwgaW50OHgxNl90IGIpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXYxNnFpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBhLCBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfczE2IChpbnQxNl90ICphLCBpbnQxNng4X3QgYikKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxdjhoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgYSwgYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDFxX3MzMiAoaW50MzJfdCAqYSwgaW50MzJ4NF90IGIpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXY0c2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIGEsIGIpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QxcV9zNjQgKGludDY0X3QgKmEsIGludDY0eDJfdCBiKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF2MmRpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBhLCBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfdTggKHVpbnQ4X3QgKmEsIHVpbnQ4eDE2X3QgYikKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxdjE2cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIGEsCisJCQkgICAgICAoaW50OHgxNl90KSBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfdTE2ICh1aW50MTZfdCAqYSwgdWludDE2eDhfdCBiKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF2OGhpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBhLAorCQkJICAgICAoaW50MTZ4OF90KSBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfdTMyICh1aW50MzJfdCAqYSwgdWludDMyeDRfdCBiKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF2NHNpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBhLAorCQkJICAgICAoaW50MzJ4NF90KSBiKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MXFfdTY0ICh1aW50NjRfdCAqYSwgdWludDY0eDJfdCBiKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF2MmRpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBhLAorCQkJICAgICAoaW50NjR4Ml90KSBiKTsKK30KKworLyogdnN0biAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkCit2c3QyX3M2NCAoaW50NjRfdCAqIF9fYSwgaW50NjR4MXgyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgaW50NjR4MngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9zNjQgKHZhbC52YWxbMF0sIHZjcmVhdGVfczY0IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9zNjQgKHZhbC52YWxbMV0sIHZjcmVhdGVfczY0IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjJkaSAoX19vLCAoaW50NjR4Ml90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MmRpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQKK3ZzdDJfdTY0ICh1aW50NjRfdCAqIF9fYSwgdWludDY0eDF4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIHVpbnQ2NHgyeDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3U2NCAodmFsLnZhbFswXSwgdmNyZWF0ZV91NjQgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91NjQgKHZhbC52YWxbMV0sIHZjcmVhdGVfdTY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRpIChfX28sIChpbnQ2NHgyX3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDJkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkCit2c3QyX2Y2NCAoZmxvYXQ2NF90ICogX19hLCBmbG9hdDY0eDF4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIGZsb2F0NjR4MngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9mNjQgKHZhbC52YWxbMF0sIHZjcmVhdGVfZjY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfZjY0ICh2YWwudmFsWzFdLCB2Y3JlYXRlX2Y2NCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjJkZiAoX19vLCAoZmxvYXQ2NHgyX3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MmRmICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kZiAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQKK3ZzdDJfczggKGludDhfdCAqIF9fYSwgaW50OHg4eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBpbnQ4eDE2eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3M4ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3M4IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9zOCAodmFsLnZhbFsxXSwgdmNyZWF0ZV9zOCAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MnY4cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml9wOCAocG9seThfdCAqIF9fYSwgcG9seTh4OHgyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgcG9seTh4MTZ4Ml90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfcDggKHZhbC52YWxbMF0sIHZjcmVhdGVfcDggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9wOCAodmFsLnZhbFsxXSwgdmNyZWF0ZV9wOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDJ2OHFpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfczE2IChpbnQxNl90ICogX19hLCBpbnQxNng0eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBpbnQxNng4eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3MxNiAodmFsLnZhbFswXSwgdmNyZWF0ZV9zMTYgKF9fQUFSQ0g2NF9JTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3MxNiAodmFsLnZhbFsxXSwgdmNyZWF0ZV9zMTYgKF9fQUFSQ0g2NF9JTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjRoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QyX3AxNiAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng0eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBwb2x5MTZ4OHgyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9wMTYgKHZhbC52YWxbMF0sIHZjcmVhdGVfcDE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfcDE2ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3AxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjRoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QyX3MzMiAoaW50MzJfdCAqIF9fYSwgaW50MzJ4MngyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgaW50MzJ4NHgyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9zMzIgKHZhbC52YWxbMF0sIHZjcmVhdGVfczMyIChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9zMzIgKHZhbC52YWxbMV0sIHZjcmVhdGVfczMyIChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzaSAoX19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MnYyc2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0Ml91OCAodWludDhfdCAqIF9fYSwgdWludDh4OHgyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgdWludDh4MTZ4Ml90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfdTggKHZhbC52YWxbMF0sIHZjcmVhdGVfdTggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91OCAodmFsLnZhbFsxXSwgdmNyZWF0ZV91OCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDJ2OHFpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfdTE2ICh1aW50MTZfdCAqIF9fYSwgdWludDE2eDR4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIHVpbnQxNng4eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3UxNiAodmFsLnZhbFswXSwgdmNyZWF0ZV91MTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91MTYgKHZhbC52YWxbMV0sIHZjcmVhdGVfdTE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDJ2NGhpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfdTMyICh1aW50MzJfdCAqIF9fYSwgdWludDMyeDJ4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIHVpbnQzMng0eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3UzMiAodmFsLnZhbFswXSwgdmNyZWF0ZV91MzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91MzIgKHZhbC52YWxbMV0sIHZjcmVhdGVfdTMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2NHNpIChfX28sIChpbnQzMng0X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDJ2MnNpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJfZjMyIChmbG9hdDMyX3QgKiBfX2EsIGZsb2F0MzJ4MngyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgZmxvYXQzMng0eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX2YzMiAodmFsLnZhbFswXSwgdmNyZWF0ZV9mMzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9mMzIgKHZhbC52YWxbMV0sIHZjcmVhdGVfZjMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjJzZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2YgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV9zOCAoaW50OF90ICogX19hLCBpbnQ4eDE2eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjE2cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfcDggKHBvbHk4X3QgKiBfX2EsIHBvbHk4eDE2eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjE2cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfczE2IChpbnQxNl90ICogX19hLCBpbnQxNng4eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MnY4aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfcDE2IChwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDh4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjhoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV9zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDR4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2NHNpIChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzaSAoX19vLCAoaW50MzJ4NF90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjRzaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV9zNjQgKGludDY0X3QgKiBfX2EsIGludDY0eDJ4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRpIChfX28sIChpbnQ2NHgyX3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjJkaSAoX19vLCAoaW50NjR4Ml90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjJkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV91OCAodWludDhfdCAqIF9fYSwgdWludDh4MTZ4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDJ2MTZxaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV91MTYgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4OHgyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDJ2OGhpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJxX3UzMiAodWludDMyX3QgKiBfX2EsIHVpbnQzMng0eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzaSAoX19vLCAoaW50MzJ4NF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MnY0c2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0MnFfdTY0ICh1aW50NjRfdCAqIF9fYSwgdWludDY0eDJ4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRpIChfX28sIChpbnQ2NHgyX3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjJkaSAoX19vLCAoaW50NjR4Ml90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QydjJkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QycV9mMzIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMng0eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHZhbC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDJ2NHNmICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zZiAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDJxX2Y2NCAoZmxvYXQ2NF90ICogX19hLCBmbG9hdDY0eDJ4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRmIChfX28sIChmbG9hdDY0eDJfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRmIChfX28sIChmbG9hdDY0eDJfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MnYyZGYgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RmICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZAordnN0M19zNjQgKGludDY0X3QgKiBfX2EsIGludDY0eDF4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIGludDY0eDJ4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfczY0ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3M2NCAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfczY0ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3M2NCAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzJdID0gdmNvbWJpbmVfczY0ICh2YWwudmFsWzJdLCB2Y3JlYXRlX3M2NCAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRpIChfX28sIChpbnQ2NHgyX3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M2RpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQKK3ZzdDNfdTY0ICh1aW50NjRfdCAqIF9fYSwgdWludDY0eDF4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIHVpbnQ2NHgyeDNfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3U2NCAodmFsLnZhbFswXSwgdmNyZWF0ZV91NjQgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91NjQgKHZhbC52YWxbMV0sIHZjcmVhdGVfdTY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzJdID0gdmNvbWJpbmVfdTY0ICh2YWwudmFsWzJdLCB2Y3JlYXRlX3U2NCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRpIChfX28sIChpbnQ2NHgyX3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDNkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkCit2c3QzX2Y2NCAoZmxvYXQ2NF90ICogX19hLCBmbG9hdDY0eDF4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIGZsb2F0NjR4MngzX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9mNjQgKHZhbC52YWxbMF0sIHZjcmVhdGVfZjY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfZjY0ICh2YWwudmFsWzFdLCB2Y3JlYXRlX2Y2NCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX2Y2NCAodmFsLnZhbFsyXSwgdmNyZWF0ZV9mNjQgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRmIChfX28sIChmbG9hdDY0eDJfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkZiAoX19vLCAoZmxvYXQ2NHgyX3QpIHRlbXAudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QzZGYgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RmICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZAordnN0M19zOCAoaW50OF90ICogX19hLCBpbnQ4eDh4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIGludDh4MTZ4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfczggKHZhbC52YWxbMF0sIHZjcmVhdGVfczggKF9fQUFSQ0g2NF9JTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3M4ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3M4IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9zOCAodmFsLnZhbFsyXSwgdmNyZWF0ZV9zOCAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y4cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19wOCAocG9seThfdCAqIF9fYSwgcG9seTh4OHgzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgcG9seTh4MTZ4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfcDggKHZhbC52YWxbMF0sIHZjcmVhdGVfcDggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9wOCAodmFsLnZhbFsxXSwgdmNyZWF0ZV9wOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX3A4ICh2YWwudmFsWzJdLCB2Y3JlYXRlX3A4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y4cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDR4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIGludDE2eDh4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfczE2ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfczE2ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzJdID0gdmNvbWJpbmVfczE2ICh2YWwudmFsWzJdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y0aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19wMTYgKHBvbHkxNl90ICogX19hLCBwb2x5MTZ4NHgzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgcG9seTE2eDh4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfcDE2ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3AxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3AxNiAodmFsLnZhbFsxXSwgdmNyZWF0ZV9wMTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9wMTYgKHZhbC52YWxbMl0sIHZjcmVhdGVfcDE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y0aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDJ4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIGludDMyeDR4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfczMyICh2YWwudmFsWzBdLCB2Y3JlYXRlX3MzMiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfczMyICh2YWwudmFsWzFdLCB2Y3JlYXRlX3MzMiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzJdID0gdmNvbWJpbmVfczMyICh2YWwudmFsWzJdLCB2Y3JlYXRlX3MzMiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNpIChfX28sIChpbnQzMng0X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Yyc2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M191OCAodWludDhfdCAqIF9fYSwgdWludDh4OHgzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgdWludDh4MTZ4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfdTggKHZhbC52YWxbMF0sIHZjcmVhdGVfdTggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91OCAodmFsLnZhbFsxXSwgdmNyZWF0ZV91OCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX3U4ICh2YWwudmFsWzJdLCB2Y3JlYXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y4cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M191MTYgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4NHgzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgdWludDE2eDh4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfdTE2ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3UxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3UxNiAodmFsLnZhbFsxXSwgdmNyZWF0ZV91MTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV91MTYgKHZhbC52YWxbMl0sIHZjcmVhdGVfdTE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y0aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M191MzIgKHVpbnQzMl90ICogX19hLCB1aW50MzJ4MngzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgdWludDMyeDR4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfdTMyICh2YWwudmFsWzBdLCB2Y3JlYXRlX3UzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3UzMiAodmFsLnZhbFsxXSwgdmNyZWF0ZV91MzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV91MzIgKHZhbC52YWxbMl0sIHZjcmVhdGVfdTMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNpIChfX28sIChpbnQzMng0X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Yyc2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M19mMzIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMngyeDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBmbG9hdDMyeDR4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfZjMyICh2YWwudmFsWzBdLCB2Y3JlYXRlX2YzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX2YzMiAodmFsLnZhbFsxXSwgdmNyZWF0ZV9mMzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9mMzIgKHZhbC52YWxbMl0sIHZjcmVhdGVfZjMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY0c2YgKF9fbywgKGZsb2F0MzJ4NF90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Yyc2YgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfczggKGludDhfdCAqIF9fYSwgaW50OHgxNngzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QzdjE2cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfcDggKHBvbHk4X3QgKiBfX2EsIHBvbHk4eDE2eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDN2MTZxaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzcV9zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDh4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y4aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfcDE2IChwb2x5MTZfdCAqIF9fYSwgcG9seTE2eDh4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y4aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfczMyIChpbnQzMl90ICogX19hLCBpbnQzMng0eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNpIChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDN2NHNpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX3M2NCAoaW50NjRfdCAqIF9fYSwgaW50NjR4MngzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRpIChfX28sIChpbnQ2NHgyX3QpIHZhbC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB2YWwudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QzdjJkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3QzcV91OCAodWludDhfdCAqIF9fYSwgdWludDh4MTZ4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3YxNnFpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX3UxNiAodWludDE2X3QgKiBfX2EsIHVpbnQxNng4eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDN2OGhpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX3UzMiAodWludDMyX3QgKiBfX2EsIHVpbnQzMng0eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNpIChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDN2NHNpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX3U2NCAodWludDY0X3QgKiBfX2EsIHVpbnQ2NHgyeDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRpIChfX28sIChpbnQ2NHgyX3QpIHZhbC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDN2MmRpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDNxX2YzMiAoZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDR4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0M3Y0c2YgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0M3FfZjY0IChmbG9hdDY0X3QgKiBfX2EsIGZsb2F0NjR4MngzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QzdjJkZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGYgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkCit2c3Q0X3M2NCAoaW50NjRfdCAqIF9fYSwgaW50NjR4MXg0X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgaW50NjR4Mng0X3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9zNjQgKHZhbC52YWxbMF0sIHZjcmVhdGVfczY0IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9zNjQgKHZhbC52YWxbMV0sIHZjcmVhdGVfczY0IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9zNjQgKHZhbC52YWxbMl0sIHZjcmVhdGVfczY0IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbM10gPSB2Y29tYmluZV9zNjQgKHZhbC52YWxbM10sIHZjcmVhdGVfczY0IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MmRpIChfX28sIChpbnQ2NHgyX3QpIHRlbXAudmFsWzJdLCAyKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbM10sIDMpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDRkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkCit2c3Q0X3U2NCAodWludDY0X3QgKiBfX2EsIHVpbnQ2NHgxeDRfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICB1aW50NjR4Mng0X3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV91NjQgKHZhbC52YWxbMF0sIHZjcmVhdGVfdTY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfdTY0ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3U2NCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX3U2NCAodmFsLnZhbFsyXSwgdmNyZWF0ZV91NjQgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbM10gPSB2Y29tYmluZV91NjQgKHZhbC52YWxbM10sIHZjcmVhdGVfdTY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MmRpIChfX28sIChpbnQ2NHgyX3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MmRpIChfX28sIChpbnQ2NHgyX3QpIHRlbXAudmFsWzNdLCAzKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Q0ZGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZAordnN0NF9mNjQgKGZsb2F0NjRfdCAqIF9fYSwgZmxvYXQ2NHgxeDRfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBmbG9hdDY0eDJ4NF90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfZjY0ICh2YWwudmFsWzBdLCB2Y3JlYXRlX2Y2NCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX2Y2NCAodmFsLnZhbFsxXSwgdmNyZWF0ZV9mNjQgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9mNjQgKHZhbC52YWxbMl0sIHZjcmVhdGVfZjY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzNdID0gdmNvbWJpbmVfZjY0ICh2YWwudmFsWzNdLCB2Y3JlYXRlX2Y2NCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjJkZiAoX19vLCAoZmxvYXQ2NHgyX3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MmRmIChfX28sIChmbG9hdDY0eDJfdCkgdGVtcC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjJkZiAoX19vLCAoZmxvYXQ2NHgyX3QpIHRlbXAudmFsWzNdLCAzKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Q0ZGYgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RmICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZAordnN0NF9zOCAoaW50OF90ICogX19hLCBpbnQ4eDh4NF90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIGludDh4MTZ4NF90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfczggKHZhbC52YWxbMF0sIHZjcmVhdGVfczggKF9fQUFSQ0g2NF9JTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3M4ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3M4IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9zOCAodmFsLnZhbFsyXSwgdmNyZWF0ZV9zOCAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzNdID0gdmNvbWJpbmVfczggKHZhbC52YWxbM10sIHZjcmVhdGVfczggKF9fQUFSQ0g2NF9JTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbM10sIDMpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDR2OHFpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfcDggKHBvbHk4X3QgKiBfX2EsIHBvbHk4eDh4NF90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIHBvbHk4eDE2eDRfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3A4ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3A4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfcDggKHZhbC52YWxbMV0sIHZjcmVhdGVfcDggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9wOCAodmFsLnZhbFsyXSwgdmNyZWF0ZV9wOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFszXSA9IHZjb21iaW5lX3A4ICh2YWwudmFsWzNdLCB2Y3JlYXRlX3A4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHY4cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF9zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDR4NF90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIGludDE2eDh4NF90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfczE2ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfczE2ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzJdID0gdmNvbWJpbmVfczE2ICh2YWwudmFsWzJdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzNdID0gdmNvbWJpbmVfczE2ICh2YWwudmFsWzNdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY4aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzNdLCAzKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Q0djRoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0X3AxNiAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng0eDRfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBwb2x5MTZ4OHg0X3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9wMTYgKHZhbC52YWxbMF0sIHZjcmVhdGVfcDE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfcDE2ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3AxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX3AxNiAodmFsLnZhbFsyXSwgdmNyZWF0ZV9wMTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbM10gPSB2Y29tYmluZV9wMTYgKHZhbC52YWxbM10sIHZjcmVhdGVfcDE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY4aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzNdLCAzKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Q0djRoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0X3MzMiAoaW50MzJfdCAqIF9fYSwgaW50MzJ4Mng0X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgaW50MzJ4NHg0X3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9zMzIgKHZhbC52YWxbMF0sIHZjcmVhdGVfczMyIChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9zMzIgKHZhbC52YWxbMV0sIHZjcmVhdGVfczMyIChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9zMzIgKHZhbC52YWxbMl0sIHZjcmVhdGVfczMyIChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbM10gPSB2Y29tYmluZV9zMzIgKHZhbC52YWxbM10sIHZjcmVhdGVfczMyIChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNpIChfX28sIChpbnQzMng0X3QpIHRlbXAudmFsWzJdLCAyKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxbM10sIDMpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDR2MnNpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRfdTggKHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDh4NF90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIHVpbnQ4eDE2eDRfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3U4ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfdTggKHZhbC52YWxbMV0sIHZjcmVhdGVfdTggKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV91OCAodmFsLnZhbFsyXSwgdmNyZWF0ZV91OCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFszXSA9IHZjb21iaW5lX3U4ICh2YWwudmFsWzNdLCB2Y3JlYXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHY4cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF91MTYgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4NHg0X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgdWludDE2eDh4NF90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfdTE2ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3UxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3UxNiAodmFsLnZhbFsxXSwgdmNyZWF0ZV91MTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV91MTYgKHZhbC52YWxbMl0sIHZjcmVhdGVfdTE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzNdID0gdmNvbWJpbmVfdTE2ICh2YWwudmFsWzNdLCB2Y3JlYXRlX3UxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY4aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHY0aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF91MzIgKHVpbnQzMl90ICogX19hLCB1aW50MzJ4Mng0X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgdWludDMyeDR4NF90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfdTMyICh2YWwudmFsWzBdLCB2Y3JlYXRlX3UzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3UzMiAodmFsLnZhbFsxXSwgdmNyZWF0ZV91MzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV91MzIgKHZhbC52YWxbMl0sIHZjcmVhdGVfdTMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzNdID0gdmNvbWJpbmVfdTMyICh2YWwudmFsWzNdLCB2Y3JlYXRlX3UzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNpIChfX28sIChpbnQzMng0X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHYyc2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NF9mMzIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMngyeDRfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBmbG9hdDMyeDR4NF90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJpbmVfZjMyICh2YWwudmFsWzBdLCB2Y3JlYXRlX2YzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX2YzMiAodmFsLnZhbFsxXSwgdmNyZWF0ZV9mMzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9mMzIgKHZhbC52YWxbMl0sIHZjcmVhdGVfZjMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzNdID0gdmNvbWJpbmVfZjMyICh2YWwudmFsWzNdLCB2Y3JlYXRlX2YzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY0c2YgKF9fbywgKGZsb2F0MzJ4NF90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdGVtcC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHRlbXAudmFsWzNdLCAzKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Q0djJzZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2YgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV9zOCAoaW50OF90ICogX19hLCBpbnQ4eDE2eDRfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHYxNnFpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX3A4IChwb2x5OF90ICogX19hLCBwb2x5OHgxNng0X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzJdLCAyKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbM10sIDMpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDR2MTZxaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV9zMTYgKGludDE2X3QgKiBfX2EsIGludDE2eDh4NF90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY4aGkgKF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbM10sIDMpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDR2OGhpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX3AxNiAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng4eDRfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY4aGkgKF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzNdLCAzKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Q0djhoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV9zMzIgKGludDMyX3QgKiBfX2EsIGludDMyeDR4NF90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNpIChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY0c2kgKF9fbywgKGludDMyeDRfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNpIChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbM10sIDMpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDR2NHNpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX3M2NCAoaW50NjRfdCAqIF9fYSwgaW50NjR4Mng0X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGkgKF9fbywgKGludDY0eDJfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MmRpIChfX28sIChpbnQ2NHgyX3QpIHZhbC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB2YWwudmFsWzJdLCAyKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGkgKF9fbywgKGludDY0eDJfdCkgdmFsLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHYyZGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NHFfdTggKHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDE2eDRfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHYxNnFpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX3UxNiAodWludDE2X3QgKiBfX2EsIHVpbnQxNng4eDRfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfeGkgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY4aGkgKF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMl0sIDIpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzNdLCAzKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Q0djhoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3Q0cV91MzIgKHVpbnQzMl90ICogX19hLCB1aW50MzJ4NHg0X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY0c2kgKF9fbywgKGludDMyeDRfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNpIChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzaSAoX19vLCAoaW50MzJ4NF90KSB2YWwudmFsWzJdLCAyKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXY0c2kgKF9fbywgKGludDMyeDRfdCkgdmFsLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHY0c2kgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NHFfdTY0ICh1aW50NjRfdCAqIF9fYSwgdWludDY0eDJ4NF90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MmRpIChfX28sIChpbnQ2NHgyX3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGkgKF9fbywgKGludDY0eDJfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2MmRpIChfX28sIChpbnQ2NHgyX3QpIHZhbC52YWxbM10sIDMpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDR2MmRpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3ZzdDRxX2YzMiAoZmxvYXQzMl90ICogX19hLCBmbG9hdDMyeDR4NF90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF94aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVneGl2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdmFsLnZhbFszXSwgMyk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0NHY0c2YgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN0NHFfZjY0IChmbG9hdDY0X3QgKiBfX2EsIGZsb2F0NjR4Mng0X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3hpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzJdLCAyKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWd4aXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzNdLCAzKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Q0djJkZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGYgKikgX19hLCBfX28pOworfQorCisvKiB2c3ViICovCisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnN1YmRfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gX19hIC0gX19iOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50NjR4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2c3ViZF91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIF9fYSAtIF9fYjsKK30KKworLyogdnRybiAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBmbG9hdDMyeDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX2YzMiAoZmxvYXQzMngyX3QgYSwgZmxvYXQzMngyX3QgYikKK3sKKyAgcmV0dXJuIChmbG9hdDMyeDJ4Ml90KSB7dnRybjFfZjMyIChhLCBiKSwgdnRybjJfZjMyIChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHk4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3A4IChwb2x5OHg4X3QgYSwgcG9seTh4OF90IGIpCit7CisgIHJldHVybiAocG9seTh4OHgyX3QpIHt2dHJuMV9wOCAoYSwgYiksIHZ0cm4yX3A4IChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHBvbHkxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybl9wMTYgKHBvbHkxNng0X3QgYSwgcG9seTE2eDRfdCBiKQoreworICByZXR1cm4gKHBvbHkxNng0eDJfdCkge3Z0cm4xX3AxNiAoYSwgYiksIHZ0cm4yX3AxNiAoYSwgYil9OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3M4IChpbnQ4eDhfdCBhLCBpbnQ4eDhfdCBiKQoreworICByZXR1cm4gKGludDh4OHgyX3QpIHt2dHJuMV9zOCAoYSwgYiksIHZ0cm4yX3M4IChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3MxNiAoaW50MTZ4NF90IGEsIGludDE2eDRfdCBiKQoreworICByZXR1cm4gKGludDE2eDR4Ml90KSB7dnRybjFfczE2IChhLCBiKSwgdnRybjJfczE2IChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDJ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3MzMiAoaW50MzJ4Ml90IGEsIGludDMyeDJfdCBiKQoreworICByZXR1cm4gKGludDMyeDJ4Ml90KSB7dnRybjFfczMyIChhLCBiKSwgdnRybjJfczMyIChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJuX3U4ICh1aW50OHg4X3QgYSwgdWludDh4OF90IGIpCit7CisgIHJldHVybiAodWludDh4OHgyX3QpIHt2dHJuMV91OCAoYSwgYiksIHZ0cm4yX3U4IChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybl91MTYgKHVpbnQxNng0X3QgYSwgdWludDE2eDRfdCBiKQoreworICByZXR1cm4gKHVpbnQxNng0eDJfdCkge3Z0cm4xX3UxNiAoYSwgYiksIHZ0cm4yX3UxNiAoYSwgYil9OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4MngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm5fdTMyICh1aW50MzJ4Ml90IGEsIHVpbnQzMngyX3QgYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4MngyX3QpIHt2dHJuMV91MzIgKGEsIGIpLCB2dHJuMl91MzIgKGEsIGIpfTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgZmxvYXQzMng0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybnFfZjMyIChmbG9hdDMyeDRfdCBhLCBmbG9hdDMyeDRfdCBiKQoreworICByZXR1cm4gKGZsb2F0MzJ4NHgyX3QpIHt2dHJuMXFfZjMyIChhLCBiKSwgdnRybjJxX2YzMiAoYSwgYil9OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBwb2x5OHgxNngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm5xX3A4IChwb2x5OHgxNl90IGEsIHBvbHk4eDE2X3QgYikKK3sKKyAgcmV0dXJuIChwb2x5OHgxNngyX3QpIHt2dHJuMXFfcDggKGEsIGIpLCB2dHJuMnFfcDggKGEsIGIpfTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgcG9seTE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9wMTYgKHBvbHkxNng4X3QgYSwgcG9seTE2eDhfdCBiKQoreworICByZXR1cm4gKHBvbHkxNng4eDJfdCkge3Z0cm4xcV9wMTYgKGEsIGIpLCB2dHJuMnFfcDE2IChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MTZ4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9zOCAoaW50OHgxNl90IGEsIGludDh4MTZfdCBiKQoreworICByZXR1cm4gKGludDh4MTZ4Ml90KSB7dnRybjFxX3M4IChhLCBiKSwgdnRybjJxX3M4IChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDh4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9zMTYgKGludDE2eDhfdCBhLCBpbnQxNng4X3QgYikKK3sKKyAgcmV0dXJuIChpbnQxNng4eDJfdCkge3Z0cm4xcV9zMTYgKGEsIGIpLCB2dHJuMnFfczE2IChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDMyeDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV9zMzIgKGludDMyeDRfdCBhLCBpbnQzMng0X3QgYikKK3sKKyAgcmV0dXJuIChpbnQzMng0eDJfdCkge3Z0cm4xcV9zMzIgKGEsIGIpLCB2dHJuMnFfczMyIChhLCBiKX07Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ4eDE2eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRybnFfdTggKHVpbnQ4eDE2X3QgYSwgdWludDh4MTZfdCBiKQoreworICByZXR1cm4gKHVpbnQ4eDE2eDJfdCkge3Z0cm4xcV91OCAoYSwgYiksIHZ0cm4ycV91OCAoYSwgYil9OworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OHgyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0cm5xX3UxNiAodWludDE2eDhfdCBhLCB1aW50MTZ4OF90IGIpCit7CisgIHJldHVybiAodWludDE2eDh4Ml90KSB7dnRybjFxX3UxNiAoYSwgYiksIHZ0cm4ycV91MTYgKGEsIGIpfTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHJucV91MzIgKHVpbnQzMng0X3QgYSwgdWludDMyeDRfdCBiKQoreworICByZXR1cm4gKHVpbnQzMng0eDJfdCkge3Z0cm4xcV91MzIgKGEsIGIpLCB2dHJuMnFfdTMyIChhLCBiKX07Cit9CisKKy8qIHZ0c3QgKi8KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHN0X3M4IChpbnQ4eDhfdCBfX2EsIGludDh4OF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtdHN0djhxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHN0X3MxNiAoaW50MTZ4NF90IF9fYSwgaW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbXRzdHY0aGkgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdF9zMzIgKGludDMyeDJfdCBfX2EsIGludDMyeDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfY210c3R2MnNpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RfczY0IChpbnQ2NHgxX3QgX19hLCBpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKF9fYSAmIF9fYikgPyAtMWxsIDogMGxsOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHg4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RfdTggKHVpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbXRzdHY4cWkgKChpbnQ4eDhfdCkgX19hLAorCQkJCQkJIChpbnQ4eDhfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDE2eDRfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdF91MTYgKHVpbnQxNng0X3QgX19hLCB1aW50MTZ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbXRzdHY0aGkgKChpbnQxNng0X3QpIF9fYSwKKwkJCQkJCSAgKGludDE2eDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDMyeDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdF91MzIgKHVpbnQzMngyX3QgX19hLCB1aW50MzJ4Ml90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbXRzdHYyc2kgKChpbnQzMngyX3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDJfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdF91NjQgKHVpbnQ2NHgxX3QgX19hLCB1aW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChfX2EgJiBfX2IpID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDh4MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdHFfczggKGludDh4MTZfdCBfX2EsIGludDh4MTZfdCBfX2IpCit7CisgIHJldHVybiAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfY210c3R2MTZxaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MTZ4OF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHN0cV9zMTYgKGludDE2eDhfdCBfX2EsIGludDE2eDhfdCBfX2IpCit7CisgIHJldHVybiAodWludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfY210c3R2OGhpIChfX2EsIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RxX3MzMiAoaW50MzJ4NF90IF9fYSwgaW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbXRzdHY0c2kgKF9fYSwgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdHFfczY0IChpbnQ2NHgyX3QgX19hLCBpbnQ2NHgyX3QgX19iKQoreworICByZXR1cm4gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtdHN0djJkaSAoX19hLCBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHN0cV91OCAodWludDh4MTZfdCBfX2EsIHVpbnQ4eDE2X3QgX19iKQoreworICByZXR1cm4gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtdHN0djE2cWkgKChpbnQ4eDE2X3QpIF9fYSwKKwkJCQkJCSAgIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQxNng4X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RxX3UxNiAodWludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKHVpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2NtdHN0djhoaSAoKGludDE2eDhfdCkgX19hLAorCQkJCQkJICAoaW50MTZ4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSB1aW50MzJ4NF90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dHN0cV91MzIgKHVpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9jbXRzdHY0c2kgKChpbnQzMng0X3QpIF9fYSwKKwkJCQkJCSAgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDJfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdHFfdTY0ICh1aW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAodWludDY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRfY210c3R2MmRpICgoaW50NjR4Ml90KSBfX2EsCisJCQkJCQkgIChpbnQ2NHgyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHVpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z0c3RkX3M2NCAoaW50NjR4MV90IF9fYSwgaW50NjR4MV90IF9fYikKK3sKKyAgcmV0dXJuIChfX2EgJiBfX2IpID8gLTFsbCA6IDBsbDsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgdWludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnRzdGRfdTY0ICh1aW50NjR4MV90IF9fYSwgdWludDY0eDFfdCBfX2IpCit7CisgIHJldHVybiAoX19hICYgX19iKSA/IC0xbGwgOiAwbGw7Cit9CisKKy8qIHZ1cWFkZCAqLworCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ4eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnVxYWRkX3M4IChpbnQ4eDhfdCBfX2EsIHVpbnQ4eDhfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3N1cWFkZHY4cWkgKF9fYSwgKGludDh4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQxNng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1cWFkZF9zMTYgKGludDE2eDRfdCBfX2EsIHVpbnQxNng0X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfc3VxYWRkdjRoaSAoX19hLCAoaW50MTZ4NF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngyX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1cWFkZF9zMzIgKGludDMyeDJfdCBfX2EsIHVpbnQzMngyX3QgX19iKQoreworICByZXR1cm4gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfc3VxYWRkdjJzaSAoX19hLCAoaW50MzJ4Ml90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQ2NHgxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1cWFkZF9zNjQgKGludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3VxYWRkZGkgKF9fYSwgKGludDY0eDFfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50OHgxNl90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXFhZGRxX3M4IChpbnQ4eDE2X3QgX19hLCB1aW50OHgxNl90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3N1cWFkZHYxNnFpIChfX2EsIChpbnQ4eDE2X3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDE2eDhfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnVxYWRkcV9zMTYgKGludDE2eDhfdCBfX2EsIHVpbnQxNng4X3QgX19iKQoreworICByZXR1cm4gKGludDE2eDhfdCkgX19idWlsdGluX2FhcmNoNjRfc3VxYWRkdjhoaSAoX19hLCAoaW50MTZ4OF90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMng0X3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1cWFkZHFfczMyIChpbnQzMng0X3QgX19hLCB1aW50MzJ4NF90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X3N1cWFkZHY0c2kgKF9fYSwgKGludDMyeDRfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50NjR4Ml90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXFhZGRxX3M2NCAoaW50NjR4Ml90IF9fYSwgdWludDY0eDJfdCBfX2IpCit7CisgIHJldHVybiAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9zdXFhZGR2MmRpIChfX2EsIChpbnQ2NHgyX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDh4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXFhZGRiX3M4IChpbnQ4eDFfdCBfX2EsIHVpbnQ4eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50OHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3N1cWFkZHFpIChfX2EsIChpbnQ4eDFfdCkgX19iKTsKK30KKworX19leHRlbnNpb25fXyBzdGF0aWMgX19pbmxpbmUgaW50MTZ4MV90IF9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpCit2dXFhZGRoX3MxNiAoaW50MTZ4MV90IF9fYSwgdWludDE2eDFfdCBfX2IpCit7CisgIHJldHVybiAoaW50MTZ4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9zdXFhZGRoaSAoX19hLCAoaW50MTZ4MV90KSBfX2IpOworfQorCitfX2V4dGVuc2lvbl9fIHN0YXRpYyBfX2lubGluZSBpbnQzMngxX3QgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkKK3Z1cWFkZHNfczMyIChpbnQzMngxX3QgX19hLCB1aW50MzJ4MV90IF9fYikKK3sKKyAgcmV0dXJuIChpbnQzMngxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X3N1cWFkZHNpIChfX2EsIChpbnQzMngxX3QpIF9fYik7Cit9CisKK19fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIGludDY0eDFfdCBfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKQordnVxYWRkZF9zNjQgKGludDY0eDFfdCBfX2EsIHVpbnQ2NHgxX3QgX19iKQoreworICByZXR1cm4gKGludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfc3VxYWRkZGkgKF9fYSwgKGludDY0eDFfdCkgX19iKTsKK30KKworI2RlZmluZSBfX0RFRklOVEVSTEVBVkUob3AsIHJldHR5cGUsIGludHlwZSwgZnVuY3N1ZmZpeCwgUSkgCQlcCisgIF9fZXh0ZW5zaW9uX18gc3RhdGljIF9faW5saW5lIHJldHR5cGUJCQkJCVwKKyAgX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSkJCQkJCVwKKyAgdiAjIyBvcCAjIyBRICMjIF8gIyMgZnVuY3N1ZmZpeCAoaW50eXBlIGEsIGludHlwZSBiKQkJCVwKKyAgewkJCQkJCQkJCVwKKyAgICByZXR1cm4gKHJldHR5cGUpIHt2ICMjIG9wICMjIDEgIyMgUSAjIyBfICMjIGZ1bmNzdWZmaXggKGEsIGIpLAlcCisJCSAgICAgIHYgIyMgb3AgIyMgMiAjIyBRICMjIF8gIyMgZnVuY3N1ZmZpeCAoYSwgYil9OwlcCisgIH0KKworI2RlZmluZSBfX0lOVEVSTEVBVkVfTElTVChvcCkJCQkJCVwKKyAgX19ERUZJTlRFUkxFQVZFIChvcCwgZmxvYXQzMngyeDJfdCwgZmxvYXQzMngyX3QsIGYzMiwpCVwKKyAgX19ERUZJTlRFUkxFQVZFIChvcCwgcG9seTh4OHgyX3QsIHBvbHk4eDhfdCwgcDgsKQkJXAorICBfX0RFRklOVEVSTEVBVkUgKG9wLCBwb2x5MTZ4NHgyX3QsIHBvbHkxNng0X3QsIHAxNiwpCQlcCisgIF9fREVGSU5URVJMRUFWRSAob3AsIGludDh4OHgyX3QsIGludDh4OF90LCBzOCwpCQlcCisgIF9fREVGSU5URVJMRUFWRSAob3AsIGludDE2eDR4Ml90LCBpbnQxNng0X3QsIHMxNiwpCQlcCisgIF9fREVGSU5URVJMRUFWRSAob3AsIGludDMyeDJ4Ml90LCBpbnQzMngyX3QsIHMzMiwpCQlcCisgIF9fREVGSU5URVJMRUFWRSAob3AsIHVpbnQ4eDh4Ml90LCB1aW50OHg4X3QsIHU4LCkJCVwKKyAgX19ERUZJTlRFUkxFQVZFIChvcCwgdWludDE2eDR4Ml90LCB1aW50MTZ4NF90LCB1MTYsKQkJXAorICBfX0RFRklOVEVSTEVBVkUgKG9wLCB1aW50MzJ4MngyX3QsIHVpbnQzMngyX3QsIHUzMiwpCQlcCisgIF9fREVGSU5URVJMRUFWRSAob3AsIGZsb2F0MzJ4NHgyX3QsIGZsb2F0MzJ4NF90LCBmMzIsIHEpCVwKKyAgX19ERUZJTlRFUkxFQVZFIChvcCwgcG9seTh4MTZ4Ml90LCBwb2x5OHgxNl90LCBwOCwgcSkJCVwKKyAgX19ERUZJTlRFUkxFQVZFIChvcCwgcG9seTE2eDh4Ml90LCBwb2x5MTZ4OF90LCBwMTYsIHEpCVwKKyAgX19ERUZJTlRFUkxFQVZFIChvcCwgaW50OHgxNngyX3QsIGludDh4MTZfdCwgczgsIHEpCQlcCisgIF9fREVGSU5URVJMRUFWRSAob3AsIGludDE2eDh4Ml90LCBpbnQxNng4X3QsIHMxNiwgcSkJCVwKKyAgX19ERUZJTlRFUkxFQVZFIChvcCwgaW50MzJ4NHgyX3QsIGludDMyeDRfdCwgczMyLCBxKQkJXAorICBfX0RFRklOVEVSTEVBVkUgKG9wLCB1aW50OHgxNngyX3QsIHVpbnQ4eDE2X3QsIHU4LCBxKQkJXAorICBfX0RFRklOVEVSTEVBVkUgKG9wLCB1aW50MTZ4OHgyX3QsIHVpbnQxNng4X3QsIHUxNiwgcSkJXAorICBfX0RFRklOVEVSTEVBVkUgKG9wLCB1aW50MzJ4NHgyX3QsIHVpbnQzMng0X3QsIHUzMiwgcSkKKworLyogdnV6cCAqLworCitfX0lOVEVSTEVBVkVfTElTVCAodXpwKQorCisvKiB2emlwICovCisKK19fSU5URVJMRUFWRV9MSVNUICh6aXApCisKKyN1bmRlZiBfX0lOVEVSTEVBVkVfTElTVAorI3VuZGVmIF9fREVGSU5URVJMRUFWRQorCisvKiBFbmQgb2Ygb3B0aW1hbCBpbXBsZW1lbnRhdGlvbnMgaW4gYXBwcm92ZWQgb3JkZXIuICAqLworCisjdW5kZWYgX19hYXJjaDY0X3ZnZXRfbGFuZV9hbnkKKyN1bmRlZiBfX2FhcmNoNjRfdmdldF9sYW5lX2YzMgorI3VuZGVmIF9fYWFyY2g2NF92Z2V0X2xhbmVfZjY0CisjdW5kZWYgX19hYXJjaDY0X3ZnZXRfbGFuZV9wOAorI3VuZGVmIF9fYWFyY2g2NF92Z2V0X2xhbmVfcDE2CisjdW5kZWYgX19hYXJjaDY0X3ZnZXRfbGFuZV9zOAorI3VuZGVmIF9fYWFyY2g2NF92Z2V0X2xhbmVfczE2CisjdW5kZWYgX19hYXJjaDY0X3ZnZXRfbGFuZV9zMzIKKyN1bmRlZiBfX2FhcmNoNjRfdmdldF9sYW5lX3M2NAorI3VuZGVmIF9fYWFyY2g2NF92Z2V0X2xhbmVfdTgKKyN1bmRlZiBfX2FhcmNoNjRfdmdldF9sYW5lX3UxNgorI3VuZGVmIF9fYWFyY2g2NF92Z2V0X2xhbmVfdTMyCisjdW5kZWYgX19hYXJjaDY0X3ZnZXRfbGFuZV91NjQKKworI3VuZGVmIF9fYWFyY2g2NF92Z2V0cV9sYW5lX2YzMgorI3VuZGVmIF9fYWFyY2g2NF92Z2V0cV9sYW5lX2Y2NAorI3VuZGVmIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3A4CisjdW5kZWYgX19hYXJjaDY0X3ZnZXRxX2xhbmVfcDE2CisjdW5kZWYgX19hYXJjaDY0X3ZnZXRxX2xhbmVfczgKKyN1bmRlZiBfX2FhcmNoNjRfdmdldHFfbGFuZV9zMTYKKyN1bmRlZiBfX2FhcmNoNjRfdmdldHFfbGFuZV9zMzIKKyN1bmRlZiBfX2FhcmNoNjRfdmdldHFfbGFuZV9zNjQKKyN1bmRlZiBfX2FhcmNoNjRfdmdldHFfbGFuZV91OAorI3VuZGVmIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3UxNgorI3VuZGVmIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3UzMgorI3VuZGVmIF9fYWFyY2g2NF92Z2V0cV9sYW5lX3U2NAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL2Zsb2F0LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9mbG9hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNDYxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9mbG9hdC5oCkBAIC0wLDAgKzEsMjc3IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyoKKyAqIElTTyBDIFN0YW5kYXJkOiAgNS4yLjQuMi4yICBDaGFyYWN0ZXJpc3RpY3Mgb2YgZmxvYXRpbmcgdHlwZXMgPGZsb2F0Lmg+CisgKi8KKworI2lmbmRlZiBfRkxPQVRfSF9fXworI2RlZmluZSBfRkxPQVRfSF9fXworCisvKiBSYWRpeCBvZiBleHBvbmVudCByZXByZXNlbnRhdGlvbiwgYi4gKi8KKyN1bmRlZiBGTFRfUkFESVgKKyNkZWZpbmUgRkxUX1JBRElYCV9fRkxUX1JBRElYX18KKworLyogTnVtYmVyIG9mIGJhc2UtRkxUX1JBRElYIGRpZ2l0cyBpbiB0aGUgc2lnbmlmaWNhbmQsIHAuICAqLworI3VuZGVmIEZMVF9NQU5UX0RJRworI3VuZGVmIERCTF9NQU5UX0RJRworI3VuZGVmIExEQkxfTUFOVF9ESUcKKyNkZWZpbmUgRkxUX01BTlRfRElHCV9fRkxUX01BTlRfRElHX18KKyNkZWZpbmUgREJMX01BTlRfRElHCV9fREJMX01BTlRfRElHX18KKyNkZWZpbmUgTERCTF9NQU5UX0RJRwlfX0xEQkxfTUFOVF9ESUdfXworCisvKiBOdW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMsIHEsIHN1Y2ggdGhhdCBhbnkgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdpdGggcQorICAgZGVjaW1hbCBkaWdpdHMgY2FuIGJlIHJvdW5kZWQgaW50byBhIGZsb2F0aW5nLXBvaW50IG51bWJlciB3aXRoIHAgcmFkaXggYgorICAgZGlnaXRzIGFuZCBiYWNrIGFnYWluIHdpdGhvdXQgY2hhbmdlIHRvIHRoZSBxIGRlY2ltYWwgZGlnaXRzLAorCisJcCAqIGxvZzEwKGIpCQkJaWYgYiBpcyBhIHBvd2VyIG9mIDEwCisJZmxvb3IoKHAgLSAxKSAqIGxvZzEwKGIpKQlvdGhlcndpc2UKKyovCisjdW5kZWYgRkxUX0RJRworI3VuZGVmIERCTF9ESUcKKyN1bmRlZiBMREJMX0RJRworI2RlZmluZSBGTFRfRElHCQlfX0ZMVF9ESUdfXworI2RlZmluZSBEQkxfRElHCQlfX0RCTF9ESUdfXworI2RlZmluZSBMREJMX0RJRwlfX0xEQkxfRElHX18KKworLyogTWluaW11bSBpbnQgeCBzdWNoIHRoYXQgRkxUX1JBRElYKiooeC0xKSBpcyBhIG5vcm1hbGl6ZWQgZmxvYXQsIGVtaW4gKi8KKyN1bmRlZiBGTFRfTUlOX0VYUAorI3VuZGVmIERCTF9NSU5fRVhQCisjdW5kZWYgTERCTF9NSU5fRVhQCisjZGVmaW5lIEZMVF9NSU5fRVhQCV9fRkxUX01JTl9FWFBfXworI2RlZmluZSBEQkxfTUlOX0VYUAlfX0RCTF9NSU5fRVhQX18KKyNkZWZpbmUgTERCTF9NSU5fRVhQCV9fTERCTF9NSU5fRVhQX18KKworLyogTWluaW11bSBuZWdhdGl2ZSBpbnRlZ2VyIHN1Y2ggdGhhdCAxMCByYWlzZWQgdG8gdGhhdCBwb3dlciBpcyBpbiB0aGUKKyAgIHJhbmdlIG9mIG5vcm1hbGl6ZWQgZmxvYXRpbmctcG9pbnQgbnVtYmVycywKKworCWNlaWwobG9nMTAoYikgKiAoZW1pbiAtIDEpKQorKi8KKyN1bmRlZiBGTFRfTUlOXzEwX0VYUAorI3VuZGVmIERCTF9NSU5fMTBfRVhQCisjdW5kZWYgTERCTF9NSU5fMTBfRVhQCisjZGVmaW5lIEZMVF9NSU5fMTBfRVhQCV9fRkxUX01JTl8xMF9FWFBfXworI2RlZmluZSBEQkxfTUlOXzEwX0VYUAlfX0RCTF9NSU5fMTBfRVhQX18KKyNkZWZpbmUgTERCTF9NSU5fMTBfRVhQCV9fTERCTF9NSU5fMTBfRVhQX18KKworLyogTWF4aW11bSBpbnQgeCBzdWNoIHRoYXQgRkxUX1JBRElYKiooeC0xKSBpcyBhIHJlcHJlc2VudGFibGUgZmxvYXQsIGVtYXguICAqLworI3VuZGVmIEZMVF9NQVhfRVhQCisjdW5kZWYgREJMX01BWF9FWFAKKyN1bmRlZiBMREJMX01BWF9FWFAKKyNkZWZpbmUgRkxUX01BWF9FWFAJX19GTFRfTUFYX0VYUF9fCisjZGVmaW5lIERCTF9NQVhfRVhQCV9fREJMX01BWF9FWFBfXworI2RlZmluZSBMREJMX01BWF9FWFAJX19MREJMX01BWF9FWFBfXworCisvKiBNYXhpbXVtIGludGVnZXIgc3VjaCB0aGF0IDEwIHJhaXNlZCB0byB0aGF0IHBvd2VyIGlzIGluIHRoZSByYW5nZSBvZgorICAgcmVwcmVzZW50YWJsZSBmaW5pdGUgZmxvYXRpbmctcG9pbnQgbnVtYmVycywKKworCWZsb29yKGxvZzEwKCgxIC0gYioqLXApICogYioqZW1heCkpCisqLworI3VuZGVmIEZMVF9NQVhfMTBfRVhQCisjdW5kZWYgREJMX01BWF8xMF9FWFAKKyN1bmRlZiBMREJMX01BWF8xMF9FWFAKKyNkZWZpbmUgRkxUX01BWF8xMF9FWFAJX19GTFRfTUFYXzEwX0VYUF9fCisjZGVmaW5lIERCTF9NQVhfMTBfRVhQCV9fREJMX01BWF8xMF9FWFBfXworI2RlZmluZSBMREJMX01BWF8xMF9FWFAJX19MREJMX01BWF8xMF9FWFBfXworCisvKiBNYXhpbXVtIHJlcHJlc2VudGFibGUgZmluaXRlIGZsb2F0aW5nLXBvaW50IG51bWJlciwKKworCSgxIC0gYioqLXApICogYioqZW1heAorKi8KKyN1bmRlZiBGTFRfTUFYCisjdW5kZWYgREJMX01BWAorI3VuZGVmIExEQkxfTUFYCisjZGVmaW5lIEZMVF9NQVgJCV9fRkxUX01BWF9fCisjZGVmaW5lIERCTF9NQVgJCV9fREJMX01BWF9fCisjZGVmaW5lIExEQkxfTUFYCV9fTERCTF9NQVhfXworCisvKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIDEgYW5kIHRoZSBsZWFzdCB2YWx1ZSBncmVhdGVyIHRoYW4gMSB0aGF0IGlzCisgICByZXByZXNlbnRhYmxlIGluIHRoZSBnaXZlbiBmbG9hdGluZyBwb2ludCB0eXBlLCBiKioxLXAuICAqLworI3VuZGVmIEZMVF9FUFNJTE9OCisjdW5kZWYgREJMX0VQU0lMT04KKyN1bmRlZiBMREJMX0VQU0lMT04KKyNkZWZpbmUgRkxUX0VQU0lMT04JX19GTFRfRVBTSUxPTl9fCisjZGVmaW5lIERCTF9FUFNJTE9OCV9fREJMX0VQU0lMT05fXworI2RlZmluZSBMREJMX0VQU0lMT04JX19MREJMX0VQU0lMT05fXworCisvKiBNaW5pbXVtIG5vcm1hbGl6ZWQgcG9zaXRpdmUgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBiKiooZW1pbiAtIDEpLiAgKi8KKyN1bmRlZiBGTFRfTUlOCisjdW5kZWYgREJMX01JTgorI3VuZGVmIExEQkxfTUlOCisjZGVmaW5lIEZMVF9NSU4JCV9fRkxUX01JTl9fCisjZGVmaW5lIERCTF9NSU4JCV9fREJMX01JTl9fCisjZGVmaW5lIExEQkxfTUlOCV9fTERCTF9NSU5fXworCisvKiBBZGRpdGlvbiByb3VuZHMgdG8gMDogemVybywgMTogbmVhcmVzdCwgMjogK2luZiwgMzogLWluZiwgLTE6IHVua25vd24uICAqLworLyogPz8/IFRoaXMgaXMgc3VwcG9zZWQgdG8gY2hhbmdlIHdpdGggY2FsbHMgdG8gZmVzZXRyb3VuZCBpbiA8ZmVudi5oPi4gICovCisjdW5kZWYgRkxUX1JPVU5EUworI2RlZmluZSBGTFRfUk9VTkRTIDEKKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorLyogVGhlIGZsb2F0aW5nLXBvaW50IGV4cHJlc3Npb24gZXZhbHVhdGlvbiBtZXRob2QuCisgICAgICAgIC0xICBpbmRldGVybWluYXRlCisgICAgICAgICAwICBldmFsdWF0ZSBhbGwgb3BlcmF0aW9ucyBhbmQgY29uc3RhbnRzIGp1c3QgdG8gdGhlIHJhbmdlIGFuZAorICAgICAgICAgICAgcHJlY2lzaW9uIG9mIHRoZSB0eXBlCisgICAgICAgICAxICBldmFsdWF0ZSBvcGVyYXRpb25zIGFuZCBjb25zdGFudHMgb2YgdHlwZSBmbG9hdCBhbmQgZG91YmxlCisgICAgICAgICAgICB0byB0aGUgcmFuZ2UgYW5kIHByZWNpc2lvbiBvZiB0aGUgZG91YmxlIHR5cGUsIGV2YWx1YXRlCisgICAgICAgICAgICBsb25nIGRvdWJsZSBvcGVyYXRpb25zIGFuZCBjb25zdGFudHMgdG8gdGhlIHJhbmdlIGFuZAorICAgICAgICAgICAgcHJlY2lzaW9uIG9mIHRoZSBsb25nIGRvdWJsZSB0eXBlCisgICAgICAgICAyICBldmFsdWF0ZSBhbGwgb3BlcmF0aW9ucyBhbmQgY29uc3RhbnRzIHRvIHRoZSByYW5nZSBhbmQKKyAgICAgICAgICAgIHByZWNpc2lvbiBvZiB0aGUgbG9uZyBkb3VibGUgdHlwZQorCisgICA/Pz8gVGhpcyBvdWdodCB0byBjaGFuZ2Ugd2l0aCB0aGUgc2V0dGluZyBvZiB0aGUgZnAgY29udHJvbCB3b3JkOworICAgdGhlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBjb21waWxlciBhc3N1bWVzIHRoZSB3aWRlc3Qgc2V0dGluZy4gICovCisjdW5kZWYgRkxUX0VWQUxfTUVUSE9ECisjZGVmaW5lIEZMVF9FVkFMX01FVEhPRAlfX0ZMVF9FVkFMX01FVEhPRF9fCisKKy8qIE51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cywgbiwgc3VjaCB0aGF0IGFueSBmbG9hdGluZy1wb2ludCBudW1iZXIgaW4gdGhlCisgICB3aWRlc3Qgc3VwcG9ydGVkIGZsb2F0aW5nIHR5cGUgd2l0aCBwbWF4IHJhZGl4IGIgZGlnaXRzIGNhbiBiZSByb3VuZGVkCisgICB0byBhIGZsb2F0aW5nLXBvaW50IG51bWJlciB3aXRoIG4gZGVjaW1hbCBkaWdpdHMgYW5kIGJhY2sgYWdhaW4gd2l0aG91dAorICAgY2hhbmdlIHRvIHRoZSB2YWx1ZSwKKworCXBtYXggKiBsb2cxMChiKQkJCWlmIGIgaXMgYSBwb3dlciBvZiAxMAorCWNlaWwoMSArIHBtYXggKiBsb2cxMChiKSkJb3RoZXJ3aXNlCisqLworI3VuZGVmIERFQ0lNQUxfRElHCisjZGVmaW5lIERFQ0lNQUxfRElHCV9fREVDSU1BTF9ESUdfXworCisjZW5kaWYgLyogQzk5ICovCisKKyNpZiBkZWZpbmVkIChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwKKy8qIFZlcnNpb25zIG9mIERFQ0lNQUxfRElHIGZvciBlYWNoIGZsb2F0aW5nLXBvaW50IHR5cGUuICAqLworI3VuZGVmIEZMVF9ERUNJTUFMX0RJRworI3VuZGVmIERCTF9ERUNJTUFMX0RJRworI3VuZGVmIExEQkxfREVDSU1BTF9ESUcKKyNkZWZpbmUgRkxUX0RFQ0lNQUxfRElHCQlfX0ZMVF9ERUNJTUFMX0RJR19fCisjZGVmaW5lIERCTF9ERUNJTUFMX0RJRwkJX19EQkxfREVDSU1BTF9ESUdfXworI2RlZmluZSBMREJMX0RFQ0lNQUxfRElHCV9fREVDSU1BTF9ESUdfXworCisvKiBXaGV0aGVyIHR5cGVzIHN1cHBvcnQgc3Vibm9ybWFsIG51bWJlcnMuICAqLworI3VuZGVmIEZMVF9IQVNfU1VCTk9STQorI3VuZGVmIERCTF9IQVNfU1VCTk9STQorI3VuZGVmIExEQkxfSEFTX1NVQk5PUk0KKyNkZWZpbmUgRkxUX0hBU19TVUJOT1JNCQlfX0ZMVF9IQVNfREVOT1JNX18KKyNkZWZpbmUgREJMX0hBU19TVUJOT1JNCQlfX0RCTF9IQVNfREVOT1JNX18KKyNkZWZpbmUgTERCTF9IQVNfU1VCTk9STQlfX0xEQkxfSEFTX0RFTk9STV9fCisKKy8qIE1pbmltdW0gcG9zaXRpdmUgdmFsdWVzLCBpbmNsdWRpbmcgc3Vibm9ybWFscy4gICovCisjdW5kZWYgRkxUX1RSVUVfTUlOCisjdW5kZWYgREJMX1RSVUVfTUlOCisjdW5kZWYgTERCTF9UUlVFX01JTgorI2lmIF9fRkxUX0hBU19ERU5PUk1fXworI2RlZmluZSBGTFRfVFJVRV9NSU4JX19GTFRfREVOT1JNX01JTl9fCisjZWxzZQorI2RlZmluZSBGTFRfVFJVRV9NSU4JX19GTFRfTUlOX18KKyNlbmRpZgorI2lmIF9fREJMX0hBU19ERU5PUk1fXworI2RlZmluZSBEQkxfVFJVRV9NSU4JX19EQkxfREVOT1JNX01JTl9fCisjZWxzZQorI2RlZmluZSBEQkxfVFJVRV9NSU4JX19EQkxfTUlOX18KKyNlbmRpZgorI2lmIF9fTERCTF9IQVNfREVOT1JNX18KKyNkZWZpbmUgTERCTF9UUlVFX01JTglfX0xEQkxfREVOT1JNX01JTl9fCisjZWxzZQorI2RlZmluZSBMREJMX1RSVUVfTUlOCV9fTERCTF9NSU5fXworI2VuZGlmCisKKyNlbmRpZiAvKiBDMTEgKi8KKworI2lmZGVmIF9fU1REQ19XQU5UX0RFQ19GUF9fCisvKiBEcmFmdCBUZWNobmljYWwgUmVwb3J0IDI0NzMyLCBleHRlbnNpb24gZm9yIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQKKyAgIGFyaXRobWV0aWM6IENoYXJhY3RlcmlzdGljIG9mIGRlY2ltYWwgZmxvYXRpbmcgdHlwZXMgPGZsb2F0Lmg+LiAgKi8KKworLyogTnVtYmVyIG9mIGJhc2UtRkxUX1JBRElYIGRpZ2l0cyBpbiB0aGUgc2lnbmlmaWNhbmQsIHAuICAqLworI3VuZGVmIERFQzMyX01BTlRfRElHCisjdW5kZWYgREVDNjRfTUFOVF9ESUcKKyN1bmRlZiBERUMxMjhfTUFOVF9ESUcKKyNkZWZpbmUgREVDMzJfTUFOVF9ESUcJX19ERUMzMl9NQU5UX0RJR19fCisjZGVmaW5lIERFQzY0X01BTlRfRElHCV9fREVDNjRfTUFOVF9ESUdfXworI2RlZmluZSBERUMxMjhfTUFOVF9ESUcJX19ERUMxMjhfTUFOVF9ESUdfXworCisvKiBNaW5pbXVtIGV4cG9uZW50LiAqLworI3VuZGVmIERFQzMyX01JTl9FWFAKKyN1bmRlZiBERUM2NF9NSU5fRVhQCisjdW5kZWYgREVDMTI4X01JTl9FWFAKKyNkZWZpbmUgREVDMzJfTUlOX0VYUAlfX0RFQzMyX01JTl9FWFBfXworI2RlZmluZSBERUM2NF9NSU5fRVhQCV9fREVDNjRfTUlOX0VYUF9fCisjZGVmaW5lIERFQzEyOF9NSU5fRVhQCV9fREVDMTI4X01JTl9FWFBfXworCisvKiBNYXhpbXVtIGV4cG9uZW50LiAqLworI3VuZGVmIERFQzMyX01BWF9FWFAKKyN1bmRlZiBERUM2NF9NQVhfRVhQCisjdW5kZWYgREVDMTI4X01BWF9FWFAKKyNkZWZpbmUgREVDMzJfTUFYX0VYUAlfX0RFQzMyX01BWF9FWFBfXworI2RlZmluZSBERUM2NF9NQVhfRVhQCV9fREVDNjRfTUFYX0VYUF9fCisjZGVmaW5lIERFQzEyOF9NQVhfRVhQCV9fREVDMTI4X01BWF9FWFBfXworCisvKiBNYXhpbXVtIHJlcHJlc2VudGFibGUgZmluaXRlIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgICAodGhlcmUgYXJlIDYsIDE1LCBhbmQgMzMgOXMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRzIHJlc3BlY3RpdmVseSkuICovCisjdW5kZWYgREVDMzJfTUFYCisjdW5kZWYgREVDNjRfTUFYCisjdW5kZWYgREVDMTI4X01BWAorI2RlZmluZSBERUMzMl9NQVggICBfX0RFQzMyX01BWF9fCisjZGVmaW5lIERFQzY0X01BWCAgIF9fREVDNjRfTUFYX18KKyNkZWZpbmUgREVDMTI4X01BWCAgX19ERUMxMjhfTUFYX18KKworLyogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAxIGFuZCB0aGUgbGVhc3QgdmFsdWUgZ3JlYXRlciB0aGFuIDEgdGhhdCBpcworICAgcmVwcmVzZW50YWJsZSBpbiB0aGUgZ2l2ZW4gZmxvYXRpbmcgcG9pbnQgdHlwZS4gKi8KKyN1bmRlZiBERUMzMl9FUFNJTE9OCisjdW5kZWYgREVDNjRfRVBTSUxPTgorI3VuZGVmIERFQzEyOF9FUFNJTE9OCisjZGVmaW5lIERFQzMyX0VQU0lMT04JX19ERUMzMl9FUFNJTE9OX18KKyNkZWZpbmUgREVDNjRfRVBTSUxPTglfX0RFQzY0X0VQU0lMT05fXworI2RlZmluZSBERUMxMjhfRVBTSUxPTglfX0RFQzEyOF9FUFNJTE9OX18KKworLyogTWluaW11bSBub3JtYWxpemVkIHBvc2l0aXZlIGZsb2F0aW5nLXBvaW50IG51bWJlci4gKi8KKyN1bmRlZiBERUMzMl9NSU4KKyN1bmRlZiBERUM2NF9NSU4KKyN1bmRlZiBERUMxMjhfTUlOCisjZGVmaW5lIERFQzMyX01JTglfX0RFQzMyX01JTl9fCisjZGVmaW5lIERFQzY0X01JTglfX0RFQzY0X01JTl9fCisjZGVmaW5lIERFQzEyOF9NSU4JX19ERUMxMjhfTUlOX18KKworLyogTWluaW11bSBzdWJub3JtYWwgcG9zaXRpdmUgZmxvYXRpbmctcG9pbnQgbnVtYmVyLiAqLworI3VuZGVmIERFQzMyX1NVQk5PUk1BTF9NSU4KKyN1bmRlZiBERUM2NF9TVUJOT1JNQUxfTUlOCisjdW5kZWYgREVDMTI4X1NVQk5PUk1BTF9NSU4KKyNkZWZpbmUgREVDMzJfU1VCTk9STUFMX01JTiAgICAgICBfX0RFQzMyX1NVQk5PUk1BTF9NSU5fXworI2RlZmluZSBERUM2NF9TVUJOT1JNQUxfTUlOICAgICAgIF9fREVDNjRfU1VCTk9STUFMX01JTl9fCisjZGVmaW5lIERFQzEyOF9TVUJOT1JNQUxfTUlOICAgICAgX19ERUMxMjhfU1VCTk9STUFMX01JTl9fCisKKy8qIFRoZSBmbG9hdGluZy1wb2ludCBleHByZXNzaW9uIGV2YWx1YXRpb24gbWV0aG9kLgorICAgICAgICAgLTEgIGluZGV0ZXJtaW5hdGUKKyAgICAgICAgIDAgIGV2YWx1YXRlIGFsbCBvcGVyYXRpb25zIGFuZCBjb25zdGFudHMganVzdCB0byB0aGUgcmFuZ2UgYW5kCisgICAgICAgICAgICBwcmVjaXNpb24gb2YgdGhlIHR5cGUKKyAgICAgICAgIDEgIGV2YWx1YXRlIG9wZXJhdGlvbnMgYW5kIGNvbnN0YW50cyBvZiB0eXBlIF9EZWNpbWFsMzIgCisJICAgIGFuZCBfRGVjaW1hbDY0IHRvIHRoZSByYW5nZSBhbmQgcHJlY2lzaW9uIG9mIHRoZSBfRGVjaW1hbDY0IAorICAgICAgICAgICAgdHlwZSwgZXZhbHVhdGUgX0RlY2ltYWwxMjggb3BlcmF0aW9ucyBhbmQgY29uc3RhbnRzIHRvIHRoZSAKKwkgICAgcmFuZ2UgYW5kIHByZWNpc2lvbiBvZiB0aGUgX0RlY2ltYWwxMjggdHlwZTsKKwkgMiAgZXZhbHVhdGUgYWxsIG9wZXJhdGlvbnMgYW5kIGNvbnN0YW50cyB0byB0aGUgcmFuZ2UgYW5kCisJICAgIHByZWNpc2lvbiBvZiB0aGUgX0RlY2ltYWwxMjggdHlwZS4gICovCisKKyN1bmRlZiBERUNfRVZBTF9NRVRIT0QKKyNkZWZpbmUgREVDX0VWQUxfTUVUSE9ECV9fREVDX0VWQUxfTUVUSE9EX18KKworI2VuZGlmIC8qIF9fU1REQ19XQU5UX0RFQ19GUF9fICovCisKKyNlbmRpZiAvKiBfRkxPQVRfSF9fXyAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvaXNvNjQ2LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9pc282NDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmRlYzkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvaXNvNjQ2LmgKQEAgLTAsMCArMSw0NSBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qCisgKiBJU08gQyBTdGFuZGFyZDogIDcuOSAgQWx0ZXJuYXRpdmUgc3BlbGxpbmdzICA8aXNvNjQ2Lmg+CisgKi8KKworI2lmbmRlZiBfSVNPNjQ2X0gKKyNkZWZpbmUgX0lTTzY0Nl9ICisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgYW5kCSYmCisjZGVmaW5lIGFuZF9lcQkmPQorI2RlZmluZSBiaXRhbmQJJgorI2RlZmluZSBiaXRvcgl8CisjZGVmaW5lIGNvbXBsCX4KKyNkZWZpbmUgbm90CSEKKyNkZWZpbmUgbm90X2VxCSE9CisjZGVmaW5lIG9yCXx8CisjZGVmaW5lIG9yX2VxCXw9CisjZGVmaW5lIHhvcgleCisjZGVmaW5lIHhvcl9lcQlePQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3RkYWxpZ24uaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3N0ZGFsaWduLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1NDVkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3N0ZGFsaWduLmgKQEAgLTAsMCArMSwzOSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIElTTyBDMVg6IDcuMTUgQWxpZ25tZW50IDxzdGRhbGlnbi5oPi4gICovCisKKyNpZm5kZWYgX1NUREFMSUdOX0gKKyNkZWZpbmUgX1NUREFMSUdOX0gKKworI2lmbmRlZiBfX2NwbHVzcGx1cworCisjZGVmaW5lIGFsaWduYXMgX0FsaWduYXMKKyNkZWZpbmUgYWxpZ25vZiBfQWxpZ25vZgorCisjZGVmaW5lIF9fYWxpZ25hc19pc19kZWZpbmVkIDEKKyNkZWZpbmUgX19hbGlnbm9mX2lzX2RlZmluZWQgMQorCisjZW5kaWYKKworI2VuZGlmCS8qIHN0ZGFsaWduLmggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3N0ZGFyZy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3RkYXJnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0ZTBkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3N0ZGFyZy5oCkBAIC0wLDAgKzEsMTI2IEBACisvKiBDb3B5cmlnaHQgKEMpIDE5ODktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyoKKyAqIElTTyBDIFN0YW5kYXJkOiAgNy4xNSAgVmFyaWFibGUgYXJndW1lbnRzICA8c3RkYXJnLmg+CisgKi8KKworI2lmbmRlZiBfU1REQVJHX0gKKyNpZm5kZWYgX0FOU0lfU1REQVJHX0hfCisjaWZuZGVmIF9fbmVlZF9fX3ZhX2xpc3QKKyNkZWZpbmUgX1NUREFSR19ICisjZGVmaW5lIF9BTlNJX1NUREFSR19IXworI2VuZGlmIC8qIG5vdCBfX25lZWRfX192YV9saXN0ICovCisjdW5kZWYgX19uZWVkX19fdmFfbGlzdAorCisvKiBEZWZpbmUgX19nbnVjX3ZhX2xpc3QuICAqLworCisjaWZuZGVmIF9fR05VQ19WQV9MSVNUCisjZGVmaW5lIF9fR05VQ19WQV9MSVNUCit0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OworI2VuZGlmCisKKy8qIERlZmluZSB0aGUgc3RhbmRhcmQgbWFjcm9zIGZvciB0aGUgdXNlciwKKyAgIGlmIHRoaXMgaW52b2NhdGlvbiB3YXMgZnJvbSB0aGUgdXNlciBwcm9ncmFtLiAgKi8KKyNpZmRlZiBfU1REQVJHX0gKKworI2RlZmluZSB2YV9zdGFydCh2LGwpCV9fYnVpbHRpbl92YV9zdGFydCh2LGwpCisjZGVmaW5lIHZhX2VuZCh2KQlfX2J1aWx0aW5fdmFfZW5kKHYpCisjZGVmaW5lIHZhX2FyZyh2LGwpCV9fYnVpbHRpbl92YV9hcmcodixsKQorI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgX19TVERDX1ZFUlNJT05fXyArIDAgPj0gMTk5OTAwTCB8fCBkZWZpbmVkKF9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fKQorI2RlZmluZSB2YV9jb3B5KGQscykJX19idWlsdGluX3ZhX2NvcHkoZCxzKQorI2VuZGlmCisjZGVmaW5lIF9fdmFfY29weShkLHMpCV9fYnVpbHRpbl92YV9jb3B5KGQscykKKworLyogRGVmaW5lIHZhX2xpc3QsIGlmIGRlc2lyZWQsIGZyb20gX19nbnVjX3ZhX2xpc3QuICovCisvKiBXZSBkZWxpYmVyYXRlbHkgZG8gbm90IGRlZmluZSB2YV9saXN0IHdoZW4gY2FsbGVkIGZyb20KKyAgIHN0ZGlvLmgsIGJlY2F1c2UgQU5TSSBDIHNheXMgdGhhdCBzdGRpby5oIGlzIG5vdCBzdXBwb3NlZCB0byBkZWZpbmUKKyAgIHZhX2xpc3QuICBzdGRpby5oIG5lZWRzIHRvIGhhdmUgYWNjZXNzIHRvIHRoYXQgZGF0YSB0eXBlLCAKKyAgIGJ1dCBtdXN0IG5vdCB1c2UgdGhhdCBuYW1lLiAgSXQgc2hvdWxkIHVzZSB0aGUgbmFtZSBfX2dudWNfdmFfbGlzdCwKKyAgIHdoaWNoIGlzIHNhZmUgYmVjYXVzZSBpdCBpcyByZXNlcnZlZCBmb3IgdGhlIGltcGxlbWVudGF0aW9uLiAgKi8KKworI2lmZGVmIF9CU0RfVkFfTElTVAorI3VuZGVmIF9CU0RfVkFfTElTVAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCAoZGVmaW5lZChfU0NPX0RTKSAmJiAhZGVmaW5lZChfX1ZBX0xJU1QpKQorLyogU1ZSNC4yIHVzZXMgX1ZBX0xJU1QgZm9yIGFuIGludGVybmFsIGFsaWFzIGZvciB2YV9saXN0LAorICAgc28gd2UgbXVzdCBhdm9pZCB0ZXN0aW5nIGl0IGFuZCBzZXR0aW5nIGl0IGhlcmUuCisgICBTVlI0IHVzZXMgX1ZBX0xJU1QgYXMgYSBmbGFnIGluIHN0ZGFyZy5oLCBidXQgd2Ugc2hvdWxkCisgICBoYXZlIG5vIGNvbmZsaWN0IHdpdGggdGhhdC4gICovCisjaWZuZGVmIF9WQV9MSVNUXworI2RlZmluZSBfVkFfTElTVF8KKyNpZmRlZiBfX2k4NjBfXworI2lmbmRlZiBfVkFfTElTVAorI2RlZmluZSBfVkFfTElTVCB2YV9saXN0CisjZW5kaWYKKyNlbmRpZiAvKiBfX2k4NjBfXyAqLwordHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OworI2lmZGVmIF9TQ09fRFMKKyNkZWZpbmUgX19WQV9MSVNUCisjZW5kaWYKKyNlbmRpZiAvKiBfVkFfTElTVF8gKi8KKyNlbHNlIC8qIG5vdCBfX3N2cjRfXyB8fCBfU0NPX0RTICovCisKKy8qIFRoZSBtYWNybyBfVkFfTElTVF8gaXMgdGhlIHNhbWUgdGhpbmcgdXNlZCBieSB0aGlzIGZpbGUgaW4gVWx0cml4LgorICAgQnV0IG9uIEJTRCBORVQyIHdlIG11c3Qgbm90IHRlc3Qgb3IgZGVmaW5lIG9yIHVuZGVmIGl0LgorICAgKE5vdGUgdGhhdCB0aGUgY29tbWVudHMgaW4gTkVUIDIncyBhbnNpLmgKKyAgIGFyZSBpbmNvcnJlY3QgZm9yIF9WQV9MSVNUXy0tc2VlIHN0ZGlvLmghKSAgKi8KKyNpZiAhZGVmaW5lZCAoX1ZBX0xJU1RfKSB8fCBkZWZpbmVkIChfX0JTRF9ORVQyX18pIHx8IGRlZmluZWQgKF9fX18zODZCU0RfX19fKSB8fCBkZWZpbmVkIChfX2JzZGlfXykgfHwgZGVmaW5lZCAoX19zZXF1ZW50X18pIHx8IGRlZmluZWQgKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFdJTk5UKQorLyogVGhlIG1hY3JvIF9WQV9MSVNUX0RFRklORUQgaXMgdXNlZCBpbiBXaW5kb3dzIE5UIDMuNSAgKi8KKyNpZm5kZWYgX1ZBX0xJU1RfREVGSU5FRAorLyogVGhlIG1hY3JvIF9WQV9MSVNUIGlzIHVzZWQgaW4gU0NPIFVuaXggMy4yLiAgKi8KKyNpZm5kZWYgX1ZBX0xJU1QKKy8qIFRoZSBtYWNybyBfVkFfTElTVF9UX0ggaXMgdXNlZCBpbiB0aGUgQnVsbCBkcHgyICAqLworI2lmbmRlZiBfVkFfTElTVF9UX0gKKy8qIFRoZSBtYWNybyBfX3ZhX2xpc3RfXyBpcyB1c2VkIGJ5IEJlT1MuICAqLworI2lmbmRlZiBfX3ZhX2xpc3RfXwordHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OworI2VuZGlmIC8qIG5vdCBfX3ZhX2xpc3RfXyAqLworI2VuZGlmIC8qIG5vdCBfVkFfTElTVF9UX0ggKi8KKyNlbmRpZiAvKiBub3QgX1ZBX0xJU1QgKi8KKyNlbmRpZiAvKiBub3QgX1ZBX0xJU1RfREVGSU5FRCAqLworI2lmICEoZGVmaW5lZCAoX19CU0RfTkVUMl9fKSB8fCBkZWZpbmVkIChfX19fMzg2QlNEX19fXykgfHwgZGVmaW5lZCAoX19ic2RpX18pIHx8IGRlZmluZWQgKF9fc2VxdWVudF9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0RfXykpCisjZGVmaW5lIF9WQV9MSVNUXworI2VuZGlmCisjaWZuZGVmIF9WQV9MSVNUCisjZGVmaW5lIF9WQV9MSVNUCisjZW5kaWYKKyNpZm5kZWYgX1ZBX0xJU1RfREVGSU5FRAorI2RlZmluZSBfVkFfTElTVF9ERUZJTkVECisjZW5kaWYKKyNpZm5kZWYgX1ZBX0xJU1RfVF9ICisjZGVmaW5lIF9WQV9MSVNUX1RfSAorI2VuZGlmCisjaWZuZGVmIF9fdmFfbGlzdF9fCisjZGVmaW5lIF9fdmFfbGlzdF9fCisjZW5kaWYKKworI2VuZGlmIC8qIG5vdCBfVkFfTElTVF8sIGV4Y2VwdCBvbiBjZXJ0YWluIHN5c3RlbXMgKi8KKworI2VuZGlmIC8qIG5vdCBfX3N2cjRfXyAqLworCisjZW5kaWYgLyogX1NUREFSR19IICovCisKKyNlbmRpZiAvKiBub3QgX0FOU0lfU1REQVJHX0hfICovCisjZW5kaWYgLyogbm90IF9TVERBUkdfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3RkYm9vbC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3RkYm9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNDZlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9zdGRib29sLmgKQEAgLTAsMCArMSw1MCBAQAorLyogQ29weXJpZ2h0IChDKSAxOTk4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qCisgKiBJU08gQyBTdGFuZGFyZDogIDcuMTYgIEJvb2xlYW4gdHlwZSBhbmQgdmFsdWVzICA8c3RkYm9vbC5oPgorICovCisKKyNpZm5kZWYgX1NUREJPT0xfSAorI2RlZmluZSBfU1REQk9PTF9ICisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKworI2RlZmluZSBib29sCV9Cb29sCisjZGVmaW5lIHRydWUJMQorI2RlZmluZSBmYWxzZQkwCisKKyNlbHNlIC8qIF9fY3BsdXNwbHVzICovCisKKy8qIFN1cHBvcnRpbmcgPHN0ZGJvb2wuaD4gaW4gQysrIGlzIGEgR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIF9Cb29sCWJvb2wKKyNkZWZpbmUgYm9vbAlib29sCisjZGVmaW5lIGZhbHNlCWZhbHNlCisjZGVmaW5lIHRydWUJdHJ1ZQorCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyogU2lnbmFsIHRoYXQgYWxsIHRoZSBkZWZpbml0aW9ucyBhcmUgcHJlc2VudC4gICovCisjZGVmaW5lIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCTEKKworI2VuZGlmCS8qIHN0ZGJvb2wuaCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3RkZGVmLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9zdGRkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRkZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3RkZGVmLmgKQEAgLTAsMCArMSw0MzkgQEAKKy8qIENvcHlyaWdodCAoQykgMTk4OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKgorICogSVNPIEMgU3RhbmRhcmQ6ICA3LjE3ICBDb21tb24gZGVmaW5pdGlvbnMgIDxzdGRkZWYuaD4KKyAqLworI2lmICghZGVmaW5lZChfU1REREVGX0gpICYmICFkZWZpbmVkKF9TVERERUZfSF8pICYmICFkZWZpbmVkKF9BTlNJX1NURERFRl9IKSBcCisgICAgICYmICFkZWZpbmVkKF9fU1REREVGX0hfXykpIFwKKyAgICB8fCBkZWZpbmVkKF9fbmVlZF93Y2hhcl90KSB8fCBkZWZpbmVkKF9fbmVlZF9zaXplX3QpIFwKKyAgICB8fCBkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpIHx8IGRlZmluZWQoX19uZWVkX05VTEwpIFwKKyAgICB8fCBkZWZpbmVkKF9fbmVlZF93aW50X3QpCisKKy8qIEFueSBvbmUgb2YgdGhlc2Ugc3ltYm9scyBfX25lZWRfKiBtZWFucyB0aGF0IEdOVSBsaWJjCisgICB3YW50cyB1cyBqdXN0IHRvIGRlZmluZSBvbmUgZGF0YSB0eXBlLiAgU28gZG9uJ3QgZGVmaW5lCisgICB0aGUgc3ltYm9scyB0aGF0IGluZGljYXRlIHRoaXMgZmlsZSdzIGVudGlyZSBqb2IgaGFzIGJlZW4gZG9uZS4gICovCisjaWYgKCFkZWZpbmVkKF9fbmVlZF93Y2hhcl90KSAmJiAhZGVmaW5lZChfX25lZWRfc2l6ZV90KQlcCisgICAgICYmICFkZWZpbmVkKF9fbmVlZF9wdHJkaWZmX3QpICYmICFkZWZpbmVkKF9fbmVlZF9OVUxMKQlcCisgICAgICYmICFkZWZpbmVkKF9fbmVlZF93aW50X3QpKQorI2RlZmluZSBfU1REREVGX0gKKyNkZWZpbmUgX1NURERFRl9IXworLyogc25hcm9mZkBuZXh0LmNvbSBzYXlzIHRoZSBOZVhUIG5lZWRzIHRoaXMuICAqLworI2RlZmluZSBfQU5TSV9TVERERUZfSAorI2VuZGlmCisKKyNpZm5kZWYgX19zeXNfc3RkdHlwZXNfaAorLyogVGhpcyBhdm9pZHMgbG9zc2FnZSBvbiBTdW5PUyBidXQgb25seSBpZiBzdGR0eXBlcy5oIGNvbWVzIGZpcnN0LgorICAgVGhlcmUncyBubyB3YXkgdG8gd2luIHdpdGggdGhlIG90aGVyIG9yZGVyISAgU3VuIGxvc3NhZ2UuICAqLworCisvKiBPbiA0LjNic2QtbmV0MiwgbWFrZSBzdXJlIGFuc2kuaCBpcyBpbmNsdWRlZCwgc28gd2UgaGF2ZQorICAgb25lIGxlc3MgY2FzZSB0byBkZWFsIHdpdGggaW4gdGhlIGZvbGxvd2luZy4gICovCisjaWYgZGVmaW5lZCAoX19CU0RfTkVUMl9fKSB8fCBkZWZpbmVkIChfX19fMzg2QlNEX19fXykgfHwgKGRlZmluZWQgKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX18gPCA1KSkgfHwgZGVmaW5lZChfX05ldEJTRF9fKQorI2luY2x1ZGUgPG1hY2hpbmUvYW5zaS5oPgorI2VuZGlmCisvKiBPbiBGcmVlQlNEIDUsIG1hY2hpbmUvYW5zaS5oIGRvZXMgbm90IGV4aXN0IGFueW1vcmUuLi4gKi8KKyNpZiBkZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fID49IDUpCisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorI2VuZGlmCisKKy8qIEluIDQuM2JzZC1uZXQyLCBtYWNoaW5lL2Fuc2kuaCBkZWZpbmVzIHRoZXNlIHN5bWJvbHMsIHdoaWNoIGFyZQorICAgZGVmaW5lZCBpZiB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGlzICpub3QqIGRlZmluZWQuCisgICBGcmVlQlNELTIuMSBkZWZpbmVzIF9NQUNISU5FX0FOU0lfSF8gaW5zdGVhZCBvZiBfQU5TSV9IXy4KKyAgIE5ldEJTRCBkZWZpbmVzIF9JMzg2X0FOU0lfSF8gYW5kIF9YODZfNjRfQU5TSV9IXyBpbnN0ZWFkIG9mIF9BTlNJX0hfICovCisjaWYgZGVmaW5lZChfQU5TSV9IXykgfHwgZGVmaW5lZChfTUFDSElORV9BTlNJX0hfKSB8fCBkZWZpbmVkKF9YODZfNjRfQU5TSV9IXykgIHx8IGRlZmluZWQoX0kzODZfQU5TSV9IXykKKyNpZiAhZGVmaW5lZChfU0laRV9UXykgJiYgIWRlZmluZWQoX0JTRF9TSVpFX1RfKQorI2RlZmluZSBfU0laRV9UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfUFRSRElGRl9UXykgJiYgIWRlZmluZWQoX0JTRF9QVFJESUZGX1RfKQorI2RlZmluZSBfUFRSRElGRl9UCisjZW5kaWYKKy8qIE9uIEJTRC8zODYgMS4xLCBhdCBsZWFzdCwgbWFjaGluZS9hbnNpLmggZGVmaW5lcyBfQlNEX1dDSEFSX1RfCisgICBpbnN0ZWFkIG9mIF9XQ0hBUl9UXy4gKi8KKyNpZiAhZGVmaW5lZChfV0NIQVJfVF8pICYmICFkZWZpbmVkKF9CU0RfV0NIQVJfVF8pCisjaWZuZGVmIF9CU0RfV0NIQVJfVF8KKyNkZWZpbmUgX1dDSEFSX1QKKyNlbmRpZgorI2VuZGlmCisvKiBVbmRlZiBfRk9PX1RfIGlmIHdlIGFyZSBzdXBwb3NlZCB0byBkZWZpbmUgZm9vX3QuICAqLworI2lmIGRlZmluZWQgKF9fbmVlZF9wdHJkaWZmX3QpIHx8IGRlZmluZWQgKF9TVERERUZfSF8pCisjdW5kZWYgX1BUUkRJRkZfVF8KKyN1bmRlZiBfQlNEX1BUUkRJRkZfVF8KKyNlbmRpZgorI2lmIGRlZmluZWQgKF9fbmVlZF9zaXplX3QpIHx8IGRlZmluZWQgKF9TVERERUZfSF8pCisjdW5kZWYgX1NJWkVfVF8KKyN1bmRlZiBfQlNEX1NJWkVfVF8KKyNlbmRpZgorI2lmIGRlZmluZWQgKF9fbmVlZF93Y2hhcl90KSB8fCBkZWZpbmVkIChfU1REREVGX0hfKQorI3VuZGVmIF9XQ0hBUl9UXworI3VuZGVmIF9CU0RfV0NIQVJfVF8KKyNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoX0FOU0lfSF8pIHx8IGRlZmluZWQoX01BQ0hJTkVfQU5TSV9IXykgfHwgZGVmaW5lZChfWDg2XzY0X0FOU0lfSF8pIHx8IGRlZmluZWQoX0kzODZfQU5TSV9IXykgKi8KKworLyogU2VxdWVudCdzIGhlYWRlciBmaWxlcyB1c2UgX1BUUkRJRkZfVF8gaW4gc29tZSBjb25mbGljdGluZyB3YXkuCisgICBKdXN0IGlnbm9yZSBpdC4gICovCisjaWYgZGVmaW5lZCAoX19zZXF1ZW50X18pICYmIGRlZmluZWQgKF9QVFJESUZGX1RfKQorI3VuZGVmIF9QVFJESUZGX1RfCisjZW5kaWYKKworLyogT24gVnhXb3JrcywgPHR5cGUvdnhUeXBlc0Jhc2UuaD4gbWF5IGhhdmUgZGVmaW5lZCBtYWNyb3MgbGlrZQorICAgX1RZUEVfc2l6ZV90IHdoaWNoIHdpbGwgdHlwZWRlZiBzaXplX3QuICBmaXhpbmNsdWRlcyBwYXRjaGVkIHRoZQorICAgdnhUeXBlc0Jhc2UuaCBzbyB0aGF0IHRoaXMgbWFjcm8gaXMgb25seSBkZWZpbmVkIGlmIF9HQ0NfU0laRV9UIGlzCisgICBub3QgZGVmaW5lZCwgYW5kIHNvIHRoYXQgZGVmaW5pbmcgdGhpcyBtYWNybyBkZWZpbmVzIF9HQ0NfU0laRV9ULgorICAgSWYgd2UgZmluZCB0aGF0IHRoZSBtYWNyb3MgYXJlIHN0aWxsIGRlZmluZWQgYXQgdGhpcyBwb2ludCwgd2UgbXVzdAorICAgaW52b2tlIHRoZW0gc28gdGhhdCB0aGUgdHlwZSBpcyBkZWZpbmVkIGFzIGV4cGVjdGVkLiAgKi8KKyNpZiBkZWZpbmVkIChfVFlQRV9wdHJkaWZmX3QpICYmIChkZWZpbmVkIChfX25lZWRfcHRyZGlmZl90KSB8fCBkZWZpbmVkIChfU1REREVGX0hfKSkKK19UWVBFX3B0cmRpZmZfdDsKKyN1bmRlZiBfVFlQRV9wdHJkaWZmX3QKKyNlbmRpZgorI2lmIGRlZmluZWQgKF9UWVBFX3NpemVfdCkgJiYgKGRlZmluZWQgKF9fbmVlZF9zaXplX3QpIHx8IGRlZmluZWQgKF9TVERERUZfSF8pKQorX1RZUEVfc2l6ZV90OworI3VuZGVmIF9UWVBFX3NpemVfdAorI2VuZGlmCisjaWYgZGVmaW5lZCAoX1RZUEVfd2NoYXJfdCkgJiYgKGRlZmluZWQgKF9fbmVlZF93Y2hhcl90KSB8fCBkZWZpbmVkIChfU1REREVGX0hfKSkKK19UWVBFX3djaGFyX3Q7CisjdW5kZWYgX1RZUEVfd2NoYXJfdAorI2VuZGlmCisKKy8qIEluIGNhc2Ugbm9ib2R5IGhhcyBkZWZpbmVkIHRoZXNlIHR5cGVzLCBidXQgd2UgYXJlbid0IHJ1bm5pbmcgdW5kZXIKKyAgIEdDQyAyLjAwLCBtYWtlIHN1cmUgdGhhdCBfX1BUUkRJRkZfVFlQRV9fLCBfX1NJWkVfVFlQRV9fLCBhbmQKKyAgIF9fV0NIQVJfVFlQRV9fIGhhdmUgcmVhc29uYWJsZSB2YWx1ZXMuICBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlCisgICBwYXJ0cyBvZiBHQ0MgaXMgY29tcGlsZWQgYnkgYW4gb2xkZXIgY29tcGlsZXIsIHRoYXQgYWN0dWFsbHkKKyAgIGluY2x1ZGUgZ3N0ZGRlZi5oLCBzdWNoIGFzIGNvbGxlY3QyLiAgKi8KKworLyogU2lnbmVkIHR5cGUgb2YgZGlmZmVyZW5jZSBvZiB0d28gcG9pbnRlcnMuICAqLworCisvKiBEZWZpbmUgdGhpcyB0eXBlIGlmIHdlIGFyZSBkb2luZyB0aGUgd2hvbGUgam9iLAorICAgb3IgaWYgd2Ugd2FudCB0aGlzIHR5cGUgaW4gcGFydGljdWxhci4gICovCisjaWYgZGVmaW5lZCAoX1NURERFRl9IKSB8fCBkZWZpbmVkIChfX25lZWRfcHRyZGlmZl90KQorI2lmbmRlZiBfUFRSRElGRl9UCS8qIGluIGNhc2UgPHN5cy90eXBlcy5oPiBoYXMgZGVmaW5lZCBpdC4gKi8KKyNpZm5kZWYgX1RfUFRSRElGRl8KKyNpZm5kZWYgX1RfUFRSRElGRgorI2lmbmRlZiBfX1BUUkRJRkZfVAorI2lmbmRlZiBfUFRSRElGRl9UXworI2lmbmRlZiBfQlNEX1BUUkRJRkZfVF8KKyNpZm5kZWYgX19faW50X3B0cmRpZmZfdF9oCisjaWZuZGVmIF9HQ0NfUFRSRElGRl9UCisjZGVmaW5lIF9QVFJESUZGX1QKKyNkZWZpbmUgX1RfUFRSRElGRl8KKyNkZWZpbmUgX1RfUFRSRElGRgorI2RlZmluZSBfX1BUUkRJRkZfVAorI2RlZmluZSBfUFRSRElGRl9UXworI2RlZmluZSBfQlNEX1BUUkRJRkZfVF8KKyNkZWZpbmUgX19faW50X3B0cmRpZmZfdF9oCisjZGVmaW5lIF9HQ0NfUFRSRElGRl9UCisjaWZuZGVmIF9fUFRSRElGRl9UWVBFX18KKyNkZWZpbmUgX19QVFJESUZGX1RZUEVfXyBsb25nIGludAorI2VuZGlmCit0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gcHRyZGlmZl90OworI2VuZGlmIC8qIF9HQ0NfUFRSRElGRl9UICovCisjZW5kaWYgLyogX19faW50X3B0cmRpZmZfdF9oICovCisjZW5kaWYgLyogX0JTRF9QVFJESUZGX1RfICovCisjZW5kaWYgLyogX1BUUkRJRkZfVF8gKi8KKyNlbmRpZiAvKiBfX1BUUkRJRkZfVCAqLworI2VuZGlmIC8qIF9UX1BUUkRJRkYgKi8KKyNlbmRpZiAvKiBfVF9QVFJESUZGXyAqLworI2VuZGlmIC8qIF9QVFJESUZGX1QgKi8KKworLyogSWYgdGhpcyBzeW1ib2wgaGFzIGRvbmUgaXRzIGpvYiwgZ2V0IHJpZCBvZiBpdC4gICovCisjdW5kZWYJX19uZWVkX3B0cmRpZmZfdAorCisjZW5kaWYgLyogX1NURERFRl9IIG9yIF9fbmVlZF9wdHJkaWZmX3QuICAqLworCisvKiBVbnNpZ25lZCB0eXBlIG9mIGBzaXplb2YnIHNvbWV0aGluZy4gICovCisKKy8qIERlZmluZSB0aGlzIHR5cGUgaWYgd2UgYXJlIGRvaW5nIHRoZSB3aG9sZSBqb2IsCisgICBvciBpZiB3ZSB3YW50IHRoaXMgdHlwZSBpbiBwYXJ0aWN1bGFyLiAgKi8KKyNpZiBkZWZpbmVkIChfU1REREVGX0gpIHx8IGRlZmluZWQgKF9fbmVlZF9zaXplX3QpCisjaWZuZGVmIF9fc2l6ZV90X18JLyogQmVPUyAqLworI2lmbmRlZiBfX1NJWkVfVF9fCS8qIENyYXkgVW5pY29zL01rICovCisjaWZuZGVmIF9TSVpFX1QJLyogaW4gY2FzZSA8c3lzL3R5cGVzLmg+IGhhcyBkZWZpbmVkIGl0LiAqLworI2lmbmRlZiBfU1lTX1NJWkVfVF9ICisjaWZuZGVmIF9UX1NJWkVfCisjaWZuZGVmIF9UX1NJWkUKKyNpZm5kZWYgX19TSVpFX1QKKyNpZm5kZWYgX1NJWkVfVF8KKyNpZm5kZWYgX0JTRF9TSVpFX1RfCisjaWZuZGVmIF9TSVpFX1RfREVGSU5FRF8KKyNpZm5kZWYgX1NJWkVfVF9ERUZJTkVECisjaWZuZGVmIF9CU0RfU0laRV9UX0RFRklORURfCS8qIERhcndpbiAqLworI2lmbmRlZiBfU0laRV9UX0RFQ0xBUkVECS8qIEZyZWVCU0QgNSAqLworI2lmbmRlZiBfX19pbnRfc2l6ZV90X2gKKyNpZm5kZWYgX0dDQ19TSVpFX1QKKyNpZm5kZWYgX1NJWkVUXworI2lmbmRlZiBfX3NpemVfdAorI2RlZmluZSBfX3NpemVfdF9fCS8qIEJlT1MgKi8KKyNkZWZpbmUgX19TSVpFX1RfXwkvKiBDcmF5IFVuaWNvcy9NayAqLworI2RlZmluZSBfU0laRV9UCisjZGVmaW5lIF9TWVNfU0laRV9UX0gKKyNkZWZpbmUgX1RfU0laRV8KKyNkZWZpbmUgX1RfU0laRQorI2RlZmluZSBfX1NJWkVfVAorI2RlZmluZSBfU0laRV9UXworI2RlZmluZSBfQlNEX1NJWkVfVF8KKyNkZWZpbmUgX1NJWkVfVF9ERUZJTkVEXworI2RlZmluZSBfU0laRV9UX0RFRklORUQKKyNkZWZpbmUgX0JTRF9TSVpFX1RfREVGSU5FRF8JLyogRGFyd2luICovCisjZGVmaW5lIF9TSVpFX1RfREVDTEFSRUQJLyogRnJlZUJTRCA1ICovCisjZGVmaW5lIF9fX2ludF9zaXplX3RfaAorI2RlZmluZSBfR0NDX1NJWkVfVAorI2RlZmluZSBfU0laRVRfCisjaWYgKGRlZmluZWQgKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX18gPj0gNSkpIFwKKyAgfHwgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCisvKiBfX3NpemVfdCBpcyBhIHR5cGVkZWYgb24gRnJlZUJTRCA1LCBtdXN0IG5vdCB0cmFzaCBpdC4gKi8KKyNlbGlmIGRlZmluZWQgKF9fVk1TX18pCisvKiBfX3NpemVfdCBpcyBhbHNvIGEgdHlwZWRlZiBvbiBWTVMuICAqLworI2Vsc2UKKyNkZWZpbmUgX19zaXplX3QKKyNlbmRpZgorI2lmbmRlZiBfX1NJWkVfVFlQRV9fCisjZGVmaW5lIF9fU0laRV9UWVBFX18gbG9uZyB1bnNpZ25lZCBpbnQKKyNlbmRpZgorI2lmICEoZGVmaW5lZCAoX19HTlVHX18pICYmIGRlZmluZWQgKHNpemVfdCkpCit0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90OworI2lmZGVmIF9fQkVPU19fCit0eXBlZGVmIGxvbmcgc3NpemVfdDsKKyNlbmRpZiAvKiBfX0JFT1NfXyAqLworI2VuZGlmIC8qICEoZGVmaW5lZCAoX19HTlVHX18pICYmIGRlZmluZWQgKHNpemVfdCkpICovCisjZW5kaWYgLyogX19zaXplX3QgKi8KKyNlbmRpZiAvKiBfU0laRVRfICovCisjZW5kaWYgLyogX0dDQ19TSVpFX1QgKi8KKyNlbmRpZiAvKiBfX19pbnRfc2l6ZV90X2ggKi8KKyNlbmRpZiAvKiBfU0laRV9UX0RFQ0xBUkVEICovCisjZW5kaWYgLyogX0JTRF9TSVpFX1RfREVGSU5FRF8gKi8KKyNlbmRpZiAvKiBfU0laRV9UX0RFRklORUQgKi8KKyNlbmRpZiAvKiBfU0laRV9UX0RFRklORURfICovCisjZW5kaWYgLyogX0JTRF9TSVpFX1RfICovCisjZW5kaWYgLyogX1NJWkVfVF8gKi8KKyNlbmRpZiAvKiBfX1NJWkVfVCAqLworI2VuZGlmIC8qIF9UX1NJWkUgKi8KKyNlbmRpZiAvKiBfVF9TSVpFXyAqLworI2VuZGlmIC8qIF9TWVNfU0laRV9UX0ggKi8KKyNlbmRpZiAvKiBfU0laRV9UICovCisjZW5kaWYgLyogX19TSVpFX1RfXyAqLworI2VuZGlmIC8qIF9fc2l6ZV90X18gKi8KKyN1bmRlZglfX25lZWRfc2l6ZV90CisjZW5kaWYgLyogX1NURERFRl9IIG9yIF9fbmVlZF9zaXplX3QuICAqLworCisKKy8qIFdpZGUgY2hhcmFjdGVyIHR5cGUuCisgICBMb2NhbGUtd3JpdGVycyBzaG91bGQgY2hhbmdlIHRoaXMgYXMgbmVjZXNzYXJ5IHRvCisgICBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgdW5pcXVlIHZhbHVlcyBub3QgYmV0d2VlbiAwIGFuZCAxMjcsCisgICBhbmQgbm90ICh3Y2hhcl90KSAtMSwgZm9yIGVhY2ggZGVmaW5lZCBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KKworLyogRGVmaW5lIHRoaXMgdHlwZSBpZiB3ZSBhcmUgZG9pbmcgdGhlIHdob2xlIGpvYiwKKyAgIG9yIGlmIHdlIHdhbnQgdGhpcyB0eXBlIGluIHBhcnRpY3VsYXIuICAqLworI2lmIGRlZmluZWQgKF9TVERERUZfSCkgfHwgZGVmaW5lZCAoX19uZWVkX3djaGFyX3QpCisjaWZuZGVmIF9fd2NoYXJfdF9fCS8qIEJlT1MgKi8KKyNpZm5kZWYgX19XQ0hBUl9UX18JLyogQ3JheSBVbmljb3MvTWsgKi8KKyNpZm5kZWYgX1dDSEFSX1QKKyNpZm5kZWYgX1RfV0NIQVJfCisjaWZuZGVmIF9UX1dDSEFSCisjaWZuZGVmIF9fV0NIQVJfVAorI2lmbmRlZiBfV0NIQVJfVF8KKyNpZm5kZWYgX0JTRF9XQ0hBUl9UXworI2lmbmRlZiBfQlNEX1dDSEFSX1RfREVGSU5FRF8gICAgLyogRGFyd2luICovCisjaWZuZGVmIF9CU0RfUlVORV9UX0RFRklORURfCS8qIERhcndpbiAqLworI2lmbmRlZiBfV0NIQVJfVF9ERUNMQVJFRCAvKiBGcmVlQlNEIDUgKi8KKyNpZm5kZWYgX1dDSEFSX1RfREVGSU5FRF8KKyNpZm5kZWYgX1dDSEFSX1RfREVGSU5FRAorI2lmbmRlZiBfV0NIQVJfVF9ICisjaWZuZGVmIF9fX2ludF93Y2hhcl90X2gKKyNpZm5kZWYgX19JTlRfV0NIQVJfVF9ICisjaWZuZGVmIF9HQ0NfV0NIQVJfVAorI2RlZmluZSBfX3djaGFyX3RfXwkvKiBCZU9TICovCisjZGVmaW5lIF9fV0NIQVJfVF9fCS8qIENyYXkgVW5pY29zL01rICovCisjZGVmaW5lIF9XQ0hBUl9UCisjZGVmaW5lIF9UX1dDSEFSXworI2RlZmluZSBfVF9XQ0hBUgorI2RlZmluZSBfX1dDSEFSX1QKKyNkZWZpbmUgX1dDSEFSX1RfCisjZGVmaW5lIF9CU0RfV0NIQVJfVF8KKyNkZWZpbmUgX1dDSEFSX1RfREVGSU5FRF8KKyNkZWZpbmUgX1dDSEFSX1RfREVGSU5FRAorI2RlZmluZSBfV0NIQVJfVF9ICisjZGVmaW5lIF9fX2ludF93Y2hhcl90X2gKKyNkZWZpbmUgX19JTlRfV0NIQVJfVF9ICisjZGVmaW5lIF9HQ0NfV0NIQVJfVAorI2RlZmluZSBfV0NIQVJfVF9ERUNMQVJFRAorCisvKiBPbiBCU0QvMzg2IDEuMSwgYXQgbGVhc3QsIG1hY2hpbmUvYW5zaS5oIGRlZmluZXMgX0JTRF9XQ0hBUl9UXworICAgaW5zdGVhZCBvZiBfV0NIQVJfVF8sIGFuZCBfQlNEX1JVTkVfVF8gKHdoaWNoLCB1bmxpa2UgdGhlIG90aGVyCisgICBzeW1ib2xzIGluIHRoZSBfRk9PX1RfIGZhbWlseSwgc3RheXMgZGVmaW5lZCBldmVuIGFmdGVyIGl0cworICAgY29ycmVzcG9uZGluZyB0eXBlIGlzIGRlZmluZWQpLiAgSWYgd2UgZGVmaW5lIHdjaGFyX3QsIHRoZW4gd2UKKyAgIG11c3QgdW5kZWYgX1dDSEFSX1RfOyBmb3IgQlNELzM4NiAxLjEgKGFuZCBwZXJoYXBzIG90aGVycyksIGlmCisgICB3ZSB1bmRlZiBfV0NIQVJfVF8sIHRoZW4gd2UgbXVzdCBhbHNvIGRlZmluZSBydW5lX3QsIHNpbmNlIAorICAgaGVhZGVycyBsaWtlIHJ1bmV0eXBlLmggYXNzdW1lIHRoYXQgaWYgbWFjaGluZS9hbnNpLmggaXMgaW5jbHVkZWQsCisgICBhbmQgX0JTRF9XQ0hBUl9UXyBpcyBub3QgZGVmaW5lZCwgdGhlbiBydW5lX3QgaXMgYXZhaWxhYmxlLgorICAgbWFjaGluZS9hbnNpLmggc2F5cywgIk5vdGUgdGhhdCBfV0NIQVJfVF8gYW5kIF9SVU5FX1RfIG11c3QgYmUgb2YKKyAgIHRoZSBzYW1lIHR5cGUuIiAqLworI2lmZGVmIF9CU0RfV0NIQVJfVF8KKyN1bmRlZiBfQlNEX1dDSEFSX1RfCisjaWZkZWYgX0JTRF9SVU5FX1RfCisjaWYgIWRlZmluZWQgKF9BTlNJX1NPVVJDRSkgJiYgIWRlZmluZWQgKF9QT1NJWF9TT1VSQ0UpCit0eXBlZGVmIF9CU0RfUlVORV9UXyBydW5lX3Q7CisjZGVmaW5lIF9CU0RfV0NIQVJfVF9ERUZJTkVEXworI2RlZmluZSBfQlNEX1JVTkVfVF9ERUZJTkVEXwkvKiBEYXJ3aW4gKi8KKyNpZiBkZWZpbmVkIChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF9fIDwgNSkKKy8qIFdoeSBpcyB0aGlzIGZpbGUgc28gaGFyZCB0byBtYWludGFpbiBwcm9wZXJseT8gIEluIGNvbnRyYXN0IHRvCisgICB0aGUgY29tbWVudCBhYm92ZSByZWdhcmRpbmcgQlNELzM4NiAxLjEsIG9uIEZyZWVCU0QgZm9yIGFzIGxvbmcKKyAgIGFzIHRoZSBzeW1ib2wgaGFzIGV4aXN0ZWQsIF9CU0RfUlVORV9UXyBtdXN0IG5vdCBzdGF5IGRlZmluZWQgb3IKKyAgIHJlZHVuZGFudCB0eXBlZGVmcyB3aWxsIG9jY3VyIHdoZW4gc3RkbGliLmggaXMgaW5jbHVkZWQgYWZ0ZXIgdGhpcyBmaWxlLiAqLworI3VuZGVmIF9CU0RfUlVORV9UXworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisvKiBGcmVlQlNEIDUgY2FuJ3QgYmUgaGFuZGxlZCB3ZWxsIHVzaW5nICJ0cmFkaXRpb25hbCIgbG9naWMgYWJvdmUKKyAgIHNpbmNlIGl0IG5vIGxvbmdlciBkZWZpbmVzIF9CU0RfUlVORV9UXyB5ZXQgc3RpbGwgZGVzaXJlcyB0byBleHBvcnQKKyAgIHJ1bmVfdCBpbiBzb21lIGNhc2VzLi4uICovCisjaWYgZGVmaW5lZCAoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfXyA+PSA1KQorI2lmICFkZWZpbmVkIChfQU5TSV9TT1VSQ0UpICYmICFkZWZpbmVkIChfUE9TSVhfU09VUkNFKQorI2lmIF9fQlNEX1ZJU0lCTEUKKyNpZm5kZWYgX1JVTkVfVF9ERUNMQVJFRAordHlwZWRlZiBfX3J1bmVfdCAgICAgICAgcnVuZV90OworI2RlZmluZSBfUlVORV9UX0RFQ0xBUkVECisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBfX1dDSEFSX1RZUEVfXworI2RlZmluZSBfX1dDSEFSX1RZUEVfXyBpbnQKKyNlbmRpZgorI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZiBfX1dDSEFSX1RZUEVfXyB3Y2hhcl90OworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogX1dDSEFSX1RfREVDTEFSRUQgKi8KKyNlbmRpZiAvKiBfQlNEX1JVTkVfVF9ERUZJTkVEXyAqLworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogX19XQ0hBUl9UX18gKi8KKyNlbmRpZiAvKiBfX3djaGFyX3RfXyAqLworI3VuZGVmCV9fbmVlZF93Y2hhcl90CisjZW5kaWYgLyogX1NURERFRl9IIG9yIF9fbmVlZF93Y2hhcl90LiAgKi8KKworI2lmIGRlZmluZWQgKF9fbmVlZF93aW50X3QpCisjaWZuZGVmIF9XSU5UX1QKKyNkZWZpbmUgX1dJTlRfVAorCisjaWZuZGVmIF9fV0lOVF9UWVBFX18KKyNkZWZpbmUgX19XSU5UX1RZUEVfXyB1bnNpZ25lZCBpbnQKKyNlbmRpZgordHlwZWRlZiBfX1dJTlRfVFlQRV9fIHdpbnRfdDsKKyNlbmRpZgorI3VuZGVmIF9fbmVlZF93aW50X3QKKyNlbmRpZgorCisvKiAgSW4gNC4zYnNkLW5ldDIsIGxlYXZlIHRoZXNlIHVuZGVmaW5lZCB0byBpbmRpY2F0ZSB0aGF0IHNpemVfdCwgZXRjLgorICAgIGFyZSBhbHJlYWR5IGRlZmluZWQuICAqLworLyogIEJTRC9PUyAzLjEgYW5kIEZyZWVCU0QgWzIzXS54IHJlcXVpcmUgdGhlIE1BQ0hJTkVfQU5TSV9IIGNoZWNrIGhlcmUuICAqLworLyogIE5ldEJTRCA1IHJlcXVpcmVzIHRoZSBJMzg2X0FOU0lfSCBhbmQgWDg2XzY0X0FOU0lfSCBjaGVja3MgaGVyZS4gICovCisjaWYgZGVmaW5lZChfQU5TSV9IXykgfHwgZGVmaW5lZChfTUFDSElORV9BTlNJX0hfKSB8fCBkZWZpbmVkKF9YODZfNjRfQU5TSV9IXykgfHwgZGVmaW5lZChfSTM4Nl9BTlNJX0hfKQorLyogIFRoZSByZWZlcmVuY2VzIHRvIF9HQ0NfUFRSRElGRl9UXywgX0dDQ19TSVpFX1RfLCBhbmQgX0dDQ19XQ0hBUl9UXworICAgIGFyZSBwcm9iYWJseSB0eXBvcyBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgYmVmb3JlIDIuOCBpcyByZWxlYXNlZC4gICovCisjaWZkZWYgX0dDQ19QVFJESUZGX1RfCisjdW5kZWYgX1BUUkRJRkZfVF8KKyN1bmRlZiBfQlNEX1BUUkRJRkZfVF8KKyNlbmRpZgorI2lmZGVmIF9HQ0NfU0laRV9UXworI3VuZGVmIF9TSVpFX1RfCisjdW5kZWYgX0JTRF9TSVpFX1RfCisjZW5kaWYKKyNpZmRlZiBfR0NDX1dDSEFSX1RfCisjdW5kZWYgX1dDSEFSX1RfCisjdW5kZWYgX0JTRF9XQ0hBUl9UXworI2VuZGlmCisvKiAgVGhlIGZvbGxvd2luZyBvbmVzIGFyZSB0aGUgcmVhbCBvbmVzLiAgKi8KKyNpZmRlZiBfR0NDX1BUUkRJRkZfVAorI3VuZGVmIF9QVFJESUZGX1RfCisjdW5kZWYgX0JTRF9QVFJESUZGX1RfCisjZW5kaWYKKyNpZmRlZiBfR0NDX1NJWkVfVAorI3VuZGVmIF9TSVpFX1RfCisjdW5kZWYgX0JTRF9TSVpFX1RfCisjZW5kaWYKKyNpZmRlZiBfR0NDX1dDSEFSX1QKKyN1bmRlZiBfV0NIQVJfVF8KKyN1bmRlZiBfQlNEX1dDSEFSX1RfCisjZW5kaWYKKyNlbmRpZiAvKiBfQU5TSV9IXyB8fCBfTUFDSElORV9BTlNJX0hfIHx8IF9YODZfNjRfQU5TSV9IXyB8fCBfSTM4Nl9BTlNJX0hfICovCisKKyNlbmRpZiAvKiBfX3N5c19zdGR0eXBlc19oICovCisKKy8qIEEgbnVsbCBwb2ludGVyIGNvbnN0YW50LiAgKi8KKworI2lmIGRlZmluZWQgKF9TVERERUZfSCkgfHwgZGVmaW5lZCAoX19uZWVkX05VTEwpCisjdW5kZWYgTlVMTAkJLyogaW4gY2FzZSA8c3RkaW8uaD4gaGFzIGRlZmluZWQgaXQuICovCisjaWZkZWYgX19HTlVHX18KKyNkZWZpbmUgTlVMTCBfX251bGwKKyNlbHNlICAgLyogRysrICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIE5VTEwgKCh2b2lkICopMCkKKyNlbHNlICAgLyogQysrICovCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmICAvKiBDKysgKi8KKyNlbmRpZiAgLyogRysrICovCisjZW5kaWYJLyogTlVMTCBub3QgZGVmaW5lZCBhbmQgPHN0ZGRlZi5oPiBvciBuZWVkIE5VTEwuICAqLworI3VuZGVmCV9fbmVlZF9OVUxMCisKKyNpZmRlZiBfU1REREVGX0gKKworLyogT2Zmc2V0IG9mIG1lbWJlciBNRU1CRVIgaW4gYSBzdHJ1Y3Qgb2YgdHlwZSBUWVBFLiAqLworI2RlZmluZSBvZmZzZXRvZihUWVBFLCBNRU1CRVIpIF9fYnVpbHRpbl9vZmZzZXRvZiAoVFlQRSwgTUVNQkVSKQorCisjaWYgKGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCkgXAorICB8fCAoZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTCkKKyNpZm5kZWYgX0dDQ19NQVhfQUxJR05fVAorI2RlZmluZSBfR0NDX01BWF9BTElHTl9UCisvKiBUeXBlIHdob3NlIGFsaWdubWVudCBpcyBzdXBwb3J0ZWQgaW4gZXZlcnkgY29udGV4dCBhbmQgaXMgYXQgbGVhc3QKKyAgIGFzIGdyZWF0IGFzIHRoYXQgb2YgYW55IHN0YW5kYXJkIHR5cGUgbm90IHVzaW5nIGFsaWdubWVudAorICAgc3BlY2lmaWVycy4gICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGxvbmcgbG9uZyBfX21heF9hbGlnbl9sbCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhfX2FsaWdub2ZfXyhsb25nIGxvbmcpKSkpOworICBsb25nIGRvdWJsZSBfX21heF9hbGlnbl9sZCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhfX2FsaWdub2ZfXyhsb25nIGRvdWJsZSkpKSk7Cit9IG1heF9hbGlnbl90OworI2VuZGlmCisjZW5kaWYgLyogQzExIG9yIEMrKzExLiAgKi8KKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpICYmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyNpZm5kZWYgX0dYWF9OVUxMUFRSX1QKKyNkZWZpbmUgX0dYWF9OVUxMUFRSX1QKKyAgdHlwZWRlZiBkZWNsdHlwZShudWxscHRyKSBudWxscHRyX3Q7CisjZW5kaWYKKyNlbmRpZiAvKiBDKysxMS4gICovCisKKyNlbmRpZiAvKiBfU1REREVGX0ggd2FzIGRlZmluZWQgdGhpcyB0aW1lICovCisKKyNlbmRpZiAvKiAhX1NURERFRl9IICYmICFfU1REREVGX0hfICYmICFfQU5TSV9TVERERUZfSCAmJiAhX19TVERERUZfSF9fCisJICB8fCBfX25lZWRfWFhYIHdhcyBub3QgZGVmaW5lZCBiZWZvcmUgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3N0ZGZpeC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3RkZml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjZWYxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3N0ZGZpeC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogSVNPL0lFQyBKVEMxIFNDMjIgV0cxNCBOMTE2OQorICogRGF0ZTogMjAwNi0wNC0wNAorICogSVNPL0lFQyBUUiAxODAzNworICogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIC0gQyAtIEV4dGVuc2lvbnMgdG8gc3VwcG9ydCBlbWJlZGRlZCBwcm9jZXNzb3JzCisgKi8KKworI2lmbmRlZiBfU1RERklYX0gKKyNkZWZpbmUgX1NUREZJWF9ICisKKy8qIDcuMThhLjEgSW50cm9kdWN0aW9uLiAgKi8KKworI3VuZGVmIGZyYWN0CisjdW5kZWYgYWNjdW0KKyN1bmRlZiBzYXQKKyNkZWZpbmUgZnJhY3QJCV9GcmFjdAorI2RlZmluZSBhY2N1bQkJX0FjY3VtCisjZGVmaW5lIHNhdAkJX1NhdAorCisvKiA3LjE4YS4zIFByZWNpc2lvbiBtYWNyb3MuICAqLworCisjdW5kZWYgU0ZSQUNUX0ZCSVQKKyN1bmRlZiBTRlJBQ1RfTUlOCisjdW5kZWYgU0ZSQUNUX01BWAorI3VuZGVmIFNGUkFDVF9FUFNJTE9OCisjZGVmaW5lIFNGUkFDVF9GQklUCV9fU0ZSQUNUX0ZCSVRfXworI2RlZmluZSBTRlJBQ1RfTUlOCV9fU0ZSQUNUX01JTl9fCisjZGVmaW5lIFNGUkFDVF9NQVgJX19TRlJBQ1RfTUFYX18KKyNkZWZpbmUgU0ZSQUNUX0VQU0lMT04JX19TRlJBQ1RfRVBTSUxPTl9fCisKKyN1bmRlZiBVU0ZSQUNUX0ZCSVQKKyN1bmRlZiBVU0ZSQUNUX01JTgorI3VuZGVmIFVTRlJBQ1RfTUFYCisjdW5kZWYgVVNGUkFDVF9FUFNJTE9OCisjZGVmaW5lIFVTRlJBQ1RfRkJJVAlfX1VTRlJBQ1RfRkJJVF9fCisjZGVmaW5lIFVTRlJBQ1RfTUlOCV9fVVNGUkFDVF9NSU5fXwkJLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVTRlJBQ1RfTUFYCV9fVVNGUkFDVF9NQVhfXworI2RlZmluZSBVU0ZSQUNUX0VQU0lMT04JX19VU0ZSQUNUX0VQU0lMT05fXworCisjdW5kZWYgRlJBQ1RfRkJJVAorI3VuZGVmIEZSQUNUX01JTgorI3VuZGVmIEZSQUNUX01BWAorI3VuZGVmIEZSQUNUX0VQU0lMT04KKyNkZWZpbmUgRlJBQ1RfRkJJVAlfX0ZSQUNUX0ZCSVRfXworI2RlZmluZSBGUkFDVF9NSU4JX19GUkFDVF9NSU5fXworI2RlZmluZSBGUkFDVF9NQVgJX19GUkFDVF9NQVhfXworI2RlZmluZSBGUkFDVF9FUFNJTE9OCV9fRlJBQ1RfRVBTSUxPTl9fCisKKyN1bmRlZiBVRlJBQ1RfRkJJVAorI3VuZGVmIFVGUkFDVF9NSU4KKyN1bmRlZiBVRlJBQ1RfTUFYCisjdW5kZWYgVUZSQUNUX0VQU0lMT04KKyNkZWZpbmUgVUZSQUNUX0ZCSVQJX19VRlJBQ1RfRkJJVF9fCisjZGVmaW5lIFVGUkFDVF9NSU4JX19VRlJBQ1RfTUlOX18JCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBVRlJBQ1RfTUFYCV9fVUZSQUNUX01BWF9fCisjZGVmaW5lIFVGUkFDVF9FUFNJTE9OCV9fVUZSQUNUX0VQU0lMT05fXworCisjdW5kZWYgTEZSQUNUX0ZCSVQKKyN1bmRlZiBMRlJBQ1RfTUlOCisjdW5kZWYgTEZSQUNUX01BWAorI3VuZGVmIExGUkFDVF9FUFNJTE9OCisjZGVmaW5lIExGUkFDVF9GQklUCV9fTEZSQUNUX0ZCSVRfXworI2RlZmluZSBMRlJBQ1RfTUlOCV9fTEZSQUNUX01JTl9fCisjZGVmaW5lIExGUkFDVF9NQVgJX19MRlJBQ1RfTUFYX18KKyNkZWZpbmUgTEZSQUNUX0VQU0lMT04JX19MRlJBQ1RfRVBTSUxPTl9fCisKKyN1bmRlZiBVTEZSQUNUX0ZCSVQKKyN1bmRlZiBVTEZSQUNUX01JTgorI3VuZGVmIFVMRlJBQ1RfTUFYCisjdW5kZWYgVUxGUkFDVF9FUFNJTE9OCisjZGVmaW5lIFVMRlJBQ1RfRkJJVAlfX1VMRlJBQ1RfRkJJVF9fCisjZGVmaW5lIFVMRlJBQ1RfTUlOCV9fVUxGUkFDVF9NSU5fXwkJLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVMRlJBQ1RfTUFYCV9fVUxGUkFDVF9NQVhfXworI2RlZmluZSBVTEZSQUNUX0VQU0lMT04JX19VTEZSQUNUX0VQU0lMT05fXworCisjdW5kZWYgTExGUkFDVF9GQklUCisjdW5kZWYgTExGUkFDVF9NSU4KKyN1bmRlZiBMTEZSQUNUX01BWAorI3VuZGVmIExMRlJBQ1RfRVBTSUxPTgorI2RlZmluZSBMTEZSQUNUX0ZCSVQJX19MTEZSQUNUX0ZCSVRfXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExGUkFDVF9NSU4JX19MTEZSQUNUX01JTl9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExGUkFDVF9NQVgJX19MTEZSQUNUX01BWF9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExGUkFDVF9FUFNJTE9OCV9fTExGUkFDVF9FUFNJTE9OX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisKKyN1bmRlZiBVTExGUkFDVF9GQklUCisjdW5kZWYgVUxMRlJBQ1RfTUlOCisjdW5kZWYgVUxMRlJBQ1RfTUFYCisjdW5kZWYgVUxMRlJBQ1RfRVBTSUxPTgorI2RlZmluZSBVTExGUkFDVF9GQklUCV9fVUxMRlJBQ1RfRkJJVF9fCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBVTExGUkFDVF9NSU4JX19VTExGUkFDVF9NSU5fXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVUxMRlJBQ1RfTUFYCV9fVUxMRlJBQ1RfTUFYX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVMTEZSQUNUX0VQU0lMT04JX19VTExGUkFDVF9FUFNJTE9OX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisKKyN1bmRlZiBTQUNDVU1fRkJJVAorI3VuZGVmIFNBQ0NVTV9JQklUCisjdW5kZWYgU0FDQ1VNX01JTgorI3VuZGVmIFNBQ0NVTV9NQVgKKyN1bmRlZiBTQUNDVU1fRVBTSUxPTgorI2RlZmluZSBTQUNDVU1fRkJJVAlfX1NBQ0NVTV9GQklUX18KKyNkZWZpbmUgU0FDQ1VNX0lCSVQJX19TQUNDVU1fSUJJVF9fCisjZGVmaW5lIFNBQ0NVTV9NSU4JX19TQUNDVU1fTUlOX18KKyNkZWZpbmUgU0FDQ1VNX01BWAlfX1NBQ0NVTV9NQVhfXworI2RlZmluZSBTQUNDVU1fRVBTSUxPTglfX1NBQ0NVTV9FUFNJTE9OX18KKworI3VuZGVmIFVTQUNDVU1fRkJJVAorI3VuZGVmIFVTQUNDVU1fSUJJVAorI3VuZGVmIFVTQUNDVU1fTUlOCisjdW5kZWYgVVNBQ0NVTV9NQVgKKyN1bmRlZiBVU0FDQ1VNX0VQU0lMT04KKyNkZWZpbmUgVVNBQ0NVTV9GQklUCV9fVVNBQ0NVTV9GQklUX18KKyNkZWZpbmUgVVNBQ0NVTV9JQklUCV9fVVNBQ0NVTV9JQklUX18KKyNkZWZpbmUgVVNBQ0NVTV9NSU4JX19VU0FDQ1VNX01JTl9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVVNBQ0NVTV9NQVgJX19VU0FDQ1VNX01BWF9fCisjZGVmaW5lIFVTQUNDVU1fRVBTSUxPTglfX1VTQUNDVU1fRVBTSUxPTl9fCisKKyN1bmRlZiBBQ0NVTV9GQklUCisjdW5kZWYgQUNDVU1fSUJJVAorI3VuZGVmIEFDQ1VNX01JTgorI3VuZGVmIEFDQ1VNX01BWAorI3VuZGVmIEFDQ1VNX0VQU0lMT04KKyNkZWZpbmUgQUNDVU1fRkJJVAlfX0FDQ1VNX0ZCSVRfXworI2RlZmluZSBBQ0NVTV9JQklUCV9fQUNDVU1fSUJJVF9fCisjZGVmaW5lIEFDQ1VNX01JTglfX0FDQ1VNX01JTl9fCisjZGVmaW5lIEFDQ1VNX01BWAlfX0FDQ1VNX01BWF9fCisjZGVmaW5lIEFDQ1VNX0VQU0lMT04JX19BQ0NVTV9FUFNJTE9OX18KKworI3VuZGVmIFVBQ0NVTV9GQklUCisjdW5kZWYgVUFDQ1VNX0lCSVQKKyN1bmRlZiBVQUNDVU1fTUlOCisjdW5kZWYgVUFDQ1VNX01BWAorI3VuZGVmIFVBQ0NVTV9FUFNJTE9OCisjZGVmaW5lIFVBQ0NVTV9GQklUCV9fVUFDQ1VNX0ZCSVRfXworI2RlZmluZSBVQUNDVU1fSUJJVAlfX1VBQ0NVTV9JQklUX18KKyNkZWZpbmUgVUFDQ1VNX01JTglfX1VBQ0NVTV9NSU5fXwkJLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVBQ0NVTV9NQVgJX19VQUNDVU1fTUFYX18KKyNkZWZpbmUgVUFDQ1VNX0VQU0lMT04JX19VQUNDVU1fRVBTSUxPTl9fCisKKyN1bmRlZiBMQUNDVU1fRkJJVAorI3VuZGVmIExBQ0NVTV9JQklUCisjdW5kZWYgTEFDQ1VNX01JTgorI3VuZGVmIExBQ0NVTV9NQVgKKyN1bmRlZiBMQUNDVU1fRVBTSUxPTgorI2RlZmluZSBMQUNDVU1fRkJJVAlfX0xBQ0NVTV9GQklUX18KKyNkZWZpbmUgTEFDQ1VNX0lCSVQJX19MQUNDVU1fSUJJVF9fCisjZGVmaW5lIExBQ0NVTV9NSU4JX19MQUNDVU1fTUlOX18KKyNkZWZpbmUgTEFDQ1VNX01BWAlfX0xBQ0NVTV9NQVhfXworI2RlZmluZSBMQUNDVU1fRVBTSUxPTglfX0xBQ0NVTV9FUFNJTE9OX18KKworI3VuZGVmIFVMQUNDVU1fRkJJVAorI3VuZGVmIFVMQUNDVU1fSUJJVAorI3VuZGVmIFVMQUNDVU1fTUlOCisjdW5kZWYgVUxBQ0NVTV9NQVgKKyN1bmRlZiBVTEFDQ1VNX0VQU0lMT04KKyNkZWZpbmUgVUxBQ0NVTV9GQklUCV9fVUxBQ0NVTV9GQklUX18KKyNkZWZpbmUgVUxBQ0NVTV9JQklUCV9fVUxBQ0NVTV9JQklUX18KKyNkZWZpbmUgVUxBQ0NVTV9NSU4JX19VTEFDQ1VNX01JTl9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVUxBQ0NVTV9NQVgJX19VTEFDQ1VNX01BWF9fCisjZGVmaW5lIFVMQUNDVU1fRVBTSUxPTglfX1VMQUNDVU1fRVBTSUxPTl9fCisKKyN1bmRlZiBMTEFDQ1VNX0ZCSVQKKyN1bmRlZiBMTEFDQ1VNX0lCSVQKKyN1bmRlZiBMTEFDQ1VNX01JTgorI3VuZGVmIExMQUNDVU1fTUFYCisjdW5kZWYgTExBQ0NVTV9FUFNJTE9OCisjZGVmaW5lIExMQUNDVU1fRkJJVAlfX0xMQUNDVU1fRkJJVF9fCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBMTEFDQ1VNX0lCSVQJX19MTEFDQ1VNX0lCSVRfXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExBQ0NVTV9NSU4JX19MTEFDQ1VNX01JTl9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExBQ0NVTV9NQVgJX19MTEFDQ1VNX01BWF9fCQkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgTExBQ0NVTV9FUFNJTE9OCV9fTExBQ0NVTV9FUFNJTE9OX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisKKyN1bmRlZiBVTExBQ0NVTV9GQklUCisjdW5kZWYgVUxMQUNDVU1fSUJJVAorI3VuZGVmIFVMTEFDQ1VNX01JTgorI3VuZGVmIFVMTEFDQ1VNX01BWAorI3VuZGVmIFVMTEFDQ1VNX0VQU0lMT04KKyNkZWZpbmUgVUxMQUNDVU1fRkJJVAlfX1VMTEFDQ1VNX0ZCSVRfXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVUxMQUNDVU1fSUJJVAlfX1VMTEFDQ1VNX0lCSVRfXwkvKiBHQ0MgZXh0ZW5zaW9uLiAgKi8KKyNkZWZpbmUgVUxMQUNDVU1fTUlOCV9fVUxMQUNDVU1fTUlOX18JLyogR0NDIGV4dGVuc2lvbi4gICovCisjZGVmaW5lIFVMTEFDQ1VNX01BWAlfX1VMTEFDQ1VNX01BWF9fCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBVTExBQ0NVTV9FUFNJTE9OCV9fVUxMQUNDVU1fRVBTSUxPTl9fCS8qIEdDQyBleHRlbnNpb24uICAqLworCisjZW5kaWYgLyogX1NUREZJWF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9zdGRpbnQtZ2NjLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9zdGRpbnQtZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTczMzllMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3N0ZGludC1nY2MuaApAQCAtMCwwICsxLDI2MyBAQAorLyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCitwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCiszLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK2EgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CitzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qCisgKiBJU08gQyBTdGFuZGFyZDogIDcuMTggIEludGVnZXIgdHlwZXMgIDxzdGRpbnQuaD4KKyAqLworCisjaWZuZGVmIF9HQ0NfU1RESU5UX0gKKyNkZWZpbmUgX0dDQ19TVERJTlRfSAorCisvKiA3LjguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKworI2lmZGVmIF9fSU5UOF9UWVBFX18KK3R5cGVkZWYgX19JTlQ4X1RZUEVfXyBpbnQ4X3Q7CisjZW5kaWYKKyNpZmRlZiBfX0lOVDE2X1RZUEVfXwordHlwZWRlZiBfX0lOVDE2X1RZUEVfXyBpbnQxNl90OworI2VuZGlmCisjaWZkZWYgX19JTlQzMl9UWVBFX18KK3R5cGVkZWYgX19JTlQzMl9UWVBFX18gaW50MzJfdDsKKyNlbmRpZgorI2lmZGVmIF9fSU5UNjRfVFlQRV9fCit0eXBlZGVmIF9fSU5UNjRfVFlQRV9fIGludDY0X3Q7CisjZW5kaWYKKyNpZmRlZiBfX1VJTlQ4X1RZUEVfXwordHlwZWRlZiBfX1VJTlQ4X1RZUEVfXyB1aW50OF90OworI2VuZGlmCisjaWZkZWYgX19VSU5UMTZfVFlQRV9fCit0eXBlZGVmIF9fVUlOVDE2X1RZUEVfXyB1aW50MTZfdDsKKyNlbmRpZgorI2lmZGVmIF9fVUlOVDMyX1RZUEVfXwordHlwZWRlZiBfX1VJTlQzMl9UWVBFX18gdWludDMyX3Q7CisjZW5kaWYKKyNpZmRlZiBfX1VJTlQ2NF9UWVBFX18KK3R5cGVkZWYgX19VSU5UNjRfVFlQRV9fIHVpbnQ2NF90OworI2VuZGlmCisKKy8qIDcuOC4xLjIgTWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKK3R5cGVkZWYgX19JTlRfTEVBU1Q4X1RZUEVfXyBpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9fSU5UX0xFQVNUMTZfVFlQRV9fIGludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9fSU5UX0xFQVNUMzJfVFlQRV9fIGludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIF9fSU5UX0xFQVNUNjRfVFlQRV9fIGludF9sZWFzdDY0X3Q7Cit0eXBlZGVmIF9fVUlOVF9MRUFTVDhfVFlQRV9fIHVpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9fVUlOVF9MRUFTVDE2X1RZUEVfXyB1aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX19VSU5UX0xFQVNUMzJfVFlQRV9fIHVpbnRfbGVhc3QzMl90OwordHlwZWRlZiBfX1VJTlRfTEVBU1Q2NF9UWVBFX18gdWludF9sZWFzdDY0X3Q7CisKKy8qIDcuOC4xLjMgRmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KKwordHlwZWRlZiBfX0lOVF9GQVNUOF9UWVBFX18gaW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9fSU5UX0ZBU1QxNl9UWVBFX18gaW50X2Zhc3QxNl90OwordHlwZWRlZiBfX0lOVF9GQVNUMzJfVFlQRV9fIGludF9mYXN0MzJfdDsKK3R5cGVkZWYgX19JTlRfRkFTVDY0X1RZUEVfXyBpbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9fVUlOVF9GQVNUOF9UWVBFX18gdWludF9mYXN0OF90OwordHlwZWRlZiBfX1VJTlRfRkFTVDE2X1RZUEVfXyB1aW50X2Zhc3QxNl90OwordHlwZWRlZiBfX1VJTlRfRkFTVDMyX1RZUEVfXyB1aW50X2Zhc3QzMl90OwordHlwZWRlZiBfX1VJTlRfRkFTVDY0X1RZUEVfXyB1aW50X2Zhc3Q2NF90OworCisvKiA3LjguMS40IEludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycyAqLworCisjaWZkZWYgX19JTlRQVFJfVFlQRV9fCit0eXBlZGVmIF9fSU5UUFRSX1RZUEVfXyBpbnRwdHJfdDsKKyNlbmRpZgorI2lmZGVmIF9fVUlOVFBUUl9UWVBFX18KK3R5cGVkZWYgX19VSU5UUFRSX1RZUEVfXyB1aW50cHRyX3Q7CisjZW5kaWYKKworLyogNy44LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKK3R5cGVkZWYgX19JTlRNQVhfVFlQRV9fIGludG1heF90OwordHlwZWRlZiBfX1VJTlRNQVhfVFlQRV9fIHVpbnRtYXhfdDsKKworI2lmICghZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMIFwKKyAgICAgfHwgZGVmaW5lZCBfX1NURENfTElNSVRfTUFDUk9TKQorCisvKiA3LjE4LjIgTGltaXRzIG9mIHNwZWNpZmllZC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCisKKyNpZmRlZiBfX0lOVDhfTUFYX18KKyMgdW5kZWYgSU5UOF9NQVgKKyMgZGVmaW5lIElOVDhfTUFYIF9fSU5UOF9NQVhfXworIyB1bmRlZiBJTlQ4X01JTgorIyBkZWZpbmUgSU5UOF9NSU4gKC1JTlQ4X01BWCAtIDEpCisjZW5kaWYKKyNpZmRlZiBfX1VJTlQ4X01BWF9fCisjIHVuZGVmIFVJTlQ4X01BWAorIyBkZWZpbmUgVUlOVDhfTUFYIF9fVUlOVDhfTUFYX18KKyNlbmRpZgorI2lmZGVmIF9fSU5UMTZfTUFYX18KKyMgdW5kZWYgSU5UMTZfTUFYCisjIGRlZmluZSBJTlQxNl9NQVggX19JTlQxNl9NQVhfXworIyB1bmRlZiBJTlQxNl9NSU4KKyMgZGVmaW5lIElOVDE2X01JTiAoLUlOVDE2X01BWCAtIDEpCisjZW5kaWYKKyNpZmRlZiBfX1VJTlQxNl9NQVhfXworIyB1bmRlZiBVSU5UMTZfTUFYCisjIGRlZmluZSBVSU5UMTZfTUFYIF9fVUlOVDE2X01BWF9fCisjZW5kaWYKKyNpZmRlZiBfX0lOVDMyX01BWF9fCisjIHVuZGVmIElOVDMyX01BWAorIyBkZWZpbmUgSU5UMzJfTUFYIF9fSU5UMzJfTUFYX18KKyMgdW5kZWYgSU5UMzJfTUlOCisjIGRlZmluZSBJTlQzMl9NSU4gKC1JTlQzMl9NQVggLSAxKQorI2VuZGlmCisjaWZkZWYgX19VSU5UMzJfTUFYX18KKyMgdW5kZWYgVUlOVDMyX01BWAorIyBkZWZpbmUgVUlOVDMyX01BWCBfX1VJTlQzMl9NQVhfXworI2VuZGlmCisjaWZkZWYgX19JTlQ2NF9NQVhfXworIyB1bmRlZiBJTlQ2NF9NQVgKKyMgZGVmaW5lIElOVDY0X01BWCBfX0lOVDY0X01BWF9fCisjIHVuZGVmIElOVDY0X01JTgorIyBkZWZpbmUgSU5UNjRfTUlOICgtSU5UNjRfTUFYIC0gMSkKKyNlbmRpZgorI2lmZGVmIF9fVUlOVDY0X01BWF9fCisjIHVuZGVmIFVJTlQ2NF9NQVgKKyMgZGVmaW5lIFVJTlQ2NF9NQVggX19VSU5UNjRfTUFYX18KKyNlbmRpZgorCisjdW5kZWYgSU5UX0xFQVNUOF9NQVgKKyNkZWZpbmUgSU5UX0xFQVNUOF9NQVggX19JTlRfTEVBU1Q4X01BWF9fCisjdW5kZWYgSU5UX0xFQVNUOF9NSU4KKyNkZWZpbmUgSU5UX0xFQVNUOF9NSU4gKC1JTlRfTEVBU1Q4X01BWCAtIDEpCisjdW5kZWYgVUlOVF9MRUFTVDhfTUFYCisjZGVmaW5lIFVJTlRfTEVBU1Q4X01BWCBfX1VJTlRfTEVBU1Q4X01BWF9fCisjdW5kZWYgSU5UX0xFQVNUMTZfTUFYCisjZGVmaW5lIElOVF9MRUFTVDE2X01BWCBfX0lOVF9MRUFTVDE2X01BWF9fCisjdW5kZWYgSU5UX0xFQVNUMTZfTUlOCisjZGVmaW5lIElOVF9MRUFTVDE2X01JTiAoLUlOVF9MRUFTVDE2X01BWCAtIDEpCisjdW5kZWYgVUlOVF9MRUFTVDE2X01BWAorI2RlZmluZSBVSU5UX0xFQVNUMTZfTUFYIF9fVUlOVF9MRUFTVDE2X01BWF9fCisjdW5kZWYgSU5UX0xFQVNUMzJfTUFYCisjZGVmaW5lIElOVF9MRUFTVDMyX01BWCBfX0lOVF9MRUFTVDMyX01BWF9fCisjdW5kZWYgSU5UX0xFQVNUMzJfTUlOCisjZGVmaW5lIElOVF9MRUFTVDMyX01JTiAoLUlOVF9MRUFTVDMyX01BWCAtIDEpCisjdW5kZWYgVUlOVF9MRUFTVDMyX01BWAorI2RlZmluZSBVSU5UX0xFQVNUMzJfTUFYIF9fVUlOVF9MRUFTVDMyX01BWF9fCisjdW5kZWYgSU5UX0xFQVNUNjRfTUFYCisjZGVmaW5lIElOVF9MRUFTVDY0X01BWCBfX0lOVF9MRUFTVDY0X01BWF9fCisjdW5kZWYgSU5UX0xFQVNUNjRfTUlOCisjZGVmaW5lIElOVF9MRUFTVDY0X01JTiAoLUlOVF9MRUFTVDY0X01BWCAtIDEpCisjdW5kZWYgVUlOVF9MRUFTVDY0X01BWAorI2RlZmluZSBVSU5UX0xFQVNUNjRfTUFYIF9fVUlOVF9MRUFTVDY0X01BWF9fCisKKyN1bmRlZiBJTlRfRkFTVDhfTUFYCisjZGVmaW5lIElOVF9GQVNUOF9NQVggX19JTlRfRkFTVDhfTUFYX18KKyN1bmRlZiBJTlRfRkFTVDhfTUlOCisjZGVmaW5lIElOVF9GQVNUOF9NSU4gKC1JTlRfRkFTVDhfTUFYIC0gMSkKKyN1bmRlZiBVSU5UX0ZBU1Q4X01BWAorI2RlZmluZSBVSU5UX0ZBU1Q4X01BWCBfX1VJTlRfRkFTVDhfTUFYX18KKyN1bmRlZiBJTlRfRkFTVDE2X01BWAorI2RlZmluZSBJTlRfRkFTVDE2X01BWCBfX0lOVF9GQVNUMTZfTUFYX18KKyN1bmRlZiBJTlRfRkFTVDE2X01JTgorI2RlZmluZSBJTlRfRkFTVDE2X01JTiAoLUlOVF9GQVNUMTZfTUFYIC0gMSkKKyN1bmRlZiBVSU5UX0ZBU1QxNl9NQVgKKyNkZWZpbmUgVUlOVF9GQVNUMTZfTUFYIF9fVUlOVF9GQVNUMTZfTUFYX18KKyN1bmRlZiBJTlRfRkFTVDMyX01BWAorI2RlZmluZSBJTlRfRkFTVDMyX01BWCBfX0lOVF9GQVNUMzJfTUFYX18KKyN1bmRlZiBJTlRfRkFTVDMyX01JTgorI2RlZmluZSBJTlRfRkFTVDMyX01JTiAoLUlOVF9GQVNUMzJfTUFYIC0gMSkKKyN1bmRlZiBVSU5UX0ZBU1QzMl9NQVgKKyNkZWZpbmUgVUlOVF9GQVNUMzJfTUFYIF9fVUlOVF9GQVNUMzJfTUFYX18KKyN1bmRlZiBJTlRfRkFTVDY0X01BWAorI2RlZmluZSBJTlRfRkFTVDY0X01BWCBfX0lOVF9GQVNUNjRfTUFYX18KKyN1bmRlZiBJTlRfRkFTVDY0X01JTgorI2RlZmluZSBJTlRfRkFTVDY0X01JTiAoLUlOVF9GQVNUNjRfTUFYIC0gMSkKKyN1bmRlZiBVSU5UX0ZBU1Q2NF9NQVgKKyNkZWZpbmUgVUlOVF9GQVNUNjRfTUFYIF9fVUlOVF9GQVNUNjRfTUFYX18KKworI2lmZGVmIF9fSU5UUFRSX01BWF9fCisjIHVuZGVmIElOVFBUUl9NQVgKKyMgZGVmaW5lIElOVFBUUl9NQVggX19JTlRQVFJfTUFYX18KKyMgdW5kZWYgSU5UUFRSX01JTgorIyBkZWZpbmUgSU5UUFRSX01JTiAoLUlOVFBUUl9NQVggLSAxKQorI2VuZGlmCisjaWZkZWYgX19VSU5UUFRSX01BWF9fCisjIHVuZGVmIFVJTlRQVFJfTUFYCisjIGRlZmluZSBVSU5UUFRSX01BWCBfX1VJTlRQVFJfTUFYX18KKyNlbmRpZgorCisjdW5kZWYgSU5UTUFYX01BWAorI2RlZmluZSBJTlRNQVhfTUFYIF9fSU5UTUFYX01BWF9fCisjdW5kZWYgSU5UTUFYX01JTgorI2RlZmluZSBJTlRNQVhfTUlOICgtSU5UTUFYX01BWCAtIDEpCisjdW5kZWYgVUlOVE1BWF9NQVgKKyNkZWZpbmUgVUlOVE1BWF9NQVggX19VSU5UTUFYX01BWF9fCisKKy8qIDcuMTguMyBMaW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcyAqLworCisjdW5kZWYgUFRSRElGRl9NQVgKKyNkZWZpbmUgUFRSRElGRl9NQVggX19QVFJESUZGX01BWF9fCisjdW5kZWYgUFRSRElGRl9NSU4KKyNkZWZpbmUgUFRSRElGRl9NSU4gKC1QVFJESUZGX01BWCAtIDEpCisKKyN1bmRlZiBTSUdfQVRPTUlDX01BWAorI2RlZmluZSBTSUdfQVRPTUlDX01BWCBfX1NJR19BVE9NSUNfTUFYX18KKyN1bmRlZiBTSUdfQVRPTUlDX01JTgorI2RlZmluZSBTSUdfQVRPTUlDX01JTiBfX1NJR19BVE9NSUNfTUlOX18KKworI3VuZGVmIFNJWkVfTUFYCisjZGVmaW5lIFNJWkVfTUFYIF9fU0laRV9NQVhfXworCisjdW5kZWYgV0NIQVJfTUFYCisjZGVmaW5lIFdDSEFSX01BWCBfX1dDSEFSX01BWF9fCisjdW5kZWYgV0NIQVJfTUlOCisjZGVmaW5lIFdDSEFSX01JTiBfX1dDSEFSX01JTl9fCisKKyN1bmRlZiBXSU5UX01BWAorI2RlZmluZSBXSU5UX01BWCBfX1dJTlRfTUFYX18KKyN1bmRlZiBXSU5UX01JTgorI2RlZmluZSBXSU5UX01JTiBfX1dJTlRfTUlOX18KKworI2VuZGlmIC8qICghZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisJICAgfHwgZGVmaW5lZCBfX1NURENfTElNSVRfTUFDUk9TKSAgKi8KKworI2lmICghZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMIFwKKyAgICAgfHwgZGVmaW5lZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TKQorCisjdW5kZWYgSU5UOF9DCisjZGVmaW5lIElOVDhfQyhjKSBfX0lOVDhfQyhjKQorI3VuZGVmIElOVDE2X0MKKyNkZWZpbmUgSU5UMTZfQyhjKSBfX0lOVDE2X0MoYykKKyN1bmRlZiBJTlQzMl9DCisjZGVmaW5lIElOVDMyX0MoYykgX19JTlQzMl9DKGMpCisjdW5kZWYgSU5UNjRfQworI2RlZmluZSBJTlQ2NF9DKGMpIF9fSU5UNjRfQyhjKQorI3VuZGVmIFVJTlQ4X0MKKyNkZWZpbmUgVUlOVDhfQyhjKSBfX1VJTlQ4X0MoYykKKyN1bmRlZiBVSU5UMTZfQworI2RlZmluZSBVSU5UMTZfQyhjKSBfX1VJTlQxNl9DKGMpCisjdW5kZWYgVUlOVDMyX0MKKyNkZWZpbmUgVUlOVDMyX0MoYykgX19VSU5UMzJfQyhjKQorI3VuZGVmIFVJTlQ2NF9DCisjZGVmaW5lIFVJTlQ2NF9DKGMpIF9fVUlOVDY0X0MoYykKKyN1bmRlZiBJTlRNQVhfQworI2RlZmluZSBJTlRNQVhfQyhjKSBfX0lOVE1BWF9DKGMpCisjdW5kZWYgVUlOVE1BWF9DCisjZGVmaW5lIFVJTlRNQVhfQyhjKSBfX1VJTlRNQVhfQyhjKQorCisjZW5kaWYgLyogKCFkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKwkgICB8fCBkZWZpbmVkIF9fU1REQ19DT05TVEFOVF9NQUNST1MpICovCisKKyNlbmRpZiAvKiBfR0NDX1NURElOVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9zdGRpbnQuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjZmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9zdGRpbnQuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9HQ0NfV1JBUF9TVERJTlRfSAorI2lmIF9fU1REQ19IT1NURURfXworIyBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgIHVuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyMgIGRlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCisjICB1bmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCisjICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUworIyBlbmRpZgorIyBpbmNsdWRlX25leHQgPHN0ZGludC5oPgorI2Vsc2UKKyMgaW5jbHVkZSAic3RkaW50LWdjYy5oIgorI2VuZGlmCisjZGVmaW5lIF9HQ0NfV1JBUF9TVERJTlRfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS9zdGRub3JldHVybi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3Rkbm9yZXR1cm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTRiZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvc3Rkbm9yZXR1cm4uaApAQCAtMCwwICsxLDM1IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogSVNPIEMxWDogNy4yMyBfTm9yZXR1cm4gPHN0ZG5vcmV0dXJuLmg+LiAgKi8KKworI2lmbmRlZiBfU1RETk9SRVRVUk5fSAorI2RlZmluZSBfU1RETk9SRVRVUk5fSAorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisKKyNkZWZpbmUgbm9yZXR1cm4gX05vcmV0dXJuCisKKyNlbmRpZgorCisjZW5kaWYJLyogc3Rkbm9yZXR1cm4uaCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvdGdtYXRoLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS90Z21hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDllZDZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luY2x1ZGUvdGdtYXRoLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQXBwbGUsIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyoKKyAqIElTTyBDIFN0YW5kYXJkOiAgNy4yMiAgVHlwZS1nZW5lcmljIG1hdGggPHRnbWF0aC5oPgorICovCisKKyNpZm5kZWYgX1RHTUFUSF9ICisjZGVmaW5lIF9UR01BVEhfSAorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8Y29tcGxleC5oPgorCisvKiBOYW1pbmcgY29udmVudGlvbjogZ2VuZXJpYyBtYWNyb3MgYXJlIGRlZmluaW5nIHVzaW5nCisgICBfX1RHTUFUSF9DUExYKiwgX19UR01BVEhfUkVBTCosIGFuZCBfX1RHTUFUSF9DUExYX09OTFkuICBfQ1BMWAorICAgbWVhbnMgdGhlIGdlbmVyaWMgYXJndW1lbnQocykgbWF5IGJlIHJlYWwgb3IgY29tcGxleCwgX1JFQUwgbWVhbnMKKyAgIHJlYWwgb25seSwgX0NQTFggbWVhbnMgY29tcGxleCBvbmx5LiAgSWYgdGhlcmUgaXMgbm8gc3VmZml4LCB3ZSBhcmUKKyAgIGRlZmluaW5nIGEgZnVuY3Rpb24gb2Ygb25lIGdlbmVyaWMgYXJndW1lbnQuICBJZiB0aGUgc3VmZml4IGlzIF9uCisgICBpdCBpcyBhIGZ1bmN0aW9uIG9mIG4gZ2VuZXJpYyBhcmd1bWVudHMuICBJZiB0aGUgc3VmZml4IGlzIF9tX24gaXQKKyAgIGlzIGEgZnVuY3Rpb24gb2YgbiBhcmd1bWVudHMsIHRoZSBmaXJzdCBtIG9mIHdoaWNoIGFyZSBnZW5lcmljLiAgV2UKKyAgIG9ubHkgZGVmaW5lIHRoZXNlIG1hY3JvcyBmb3IgdmFsdWVzIG9mIG4gYW5kL29yIG0gdGhhdCBhcmUgbmVlZGVkLiAqLworCisvKiBUaGUgZ2VuZXJhbCBydWxlcyBmb3IgZ2VuZXJpYyBtYWNyb3MgYXJlIGdpdmVuIGluIDcuMjIgcGFyYWdyYXBocyAxIGFuZCAyLgorICAgSWYgYW55IGdlbmVyaWMgcGFyYW1ldGVyIGlzIGNvbXBsZXgsIHdlIHVzZSBhIGNvbXBsZXggdmVyc2lvbi4gIE90aGVyd2lzZQorICAgd2UgdXNlIGEgcmVhbCB2ZXJzaW9uLiAgSWYgdGhlIHJlYWwgcGFydCBvZiBhbnkgZ2VuZXJpYyBwYXJhbWV0ZXIgaXMgbG9uZworICAgZG91YmxlLCB3ZSB1c2UgdGhlIGxvbmcgZG91YmxlIHZlcnNpb24uICBPdGhlcndpc2UgaWYgdGhlIHJlYWwgcGFydCBvZiBhbnkKKyAgIGdlbmVyaWMgcGFyYW1ldGVyIGlzIGRvdWJsZSBvciBvZiBpbnRlZ2VyIHR5cGUsIHdlIHVzZSB0aGUgZG91YmxlIHZlcnNpb24uCisgICBPdGhlcndpc2Ugd2UgdXNlIHRoZSBmbG9hdCB2ZXJzaW9uLiAqLworCisjZGVmaW5lIF9fdGdfY3BseChleHByKSBcCisgIF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlKGV4cHIpID09IDkKKworI2RlZmluZSBfX3RnX2xkYmwoZXhwcikgXAorICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKF9fdHlwZW9mX18oZXhwciksIGxvbmcgZG91YmxlKQorCisjZGVmaW5lIF9fdGdfZGJsKGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcChfX3R5cGVvZl9fKGV4cHIpLCBkb3VibGUpICAgIFwKKyAgIHx8IF9fYnVpbHRpbl9jbGFzc2lmeV90eXBlKGV4cHIpID09IDEpCisKKyNkZWZpbmUgX190Z19jaG9vc2UoeCxmLGQsbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2J1aWx0aW5fY2hvb3NlX2V4cHIoX190Z19sZGJsKHgpLCBsLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fY2hvb3NlX2V4cHIoX190Z19kYmwoeCksIGQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmKSkKKworI2RlZmluZSBfX3RnX2Nob29zZV8yKHgseSxmLGQsbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIF9fYnVpbHRpbl9jaG9vc2VfZXhwcihfX3RnX2xkYmwoeCkgfHwgX190Z19sZGJsKHkpLCBsLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9jaG9vc2VfZXhwcihfX3RnX2RibCh4KSB8fCBfX3RnX2RibCh5KSwgZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYpKQorCisjZGVmaW5lIF9fdGdfY2hvb3NlXzMoeCx5LHosZixkLGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIF9fYnVpbHRpbl9jaG9vc2VfZXhwcihfX3RnX2xkYmwoeCkgfHwgX190Z19sZGJsKHkpIHx8IF9fdGdfbGRibCh6KSwgbCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgX19idWlsdGluX2Nob29zZV9leHByKF9fdGdfZGJsKHgpIHx8IF9fdGdfZGJsKHkpICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX190Z19kYmwoeiksIGQsICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmKSkKKworI2RlZmluZSBfX1RHTUFUSF9DUExYKHosUixDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2J1aWx0aW5fY2hvb3NlX2V4cHIgKF9fdGdfY3BseCh6KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfY2hvb3NlIChfX3JlYWxfXyh6KSwgQyMjZih6KSwgKEMpKHopLCBDIyNsKHopKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfY2hvb3NlICh6LCBSIyNmKHopLCAoUikoeiksIFIjI2woeikpKQorCisjZGVmaW5lIF9fVEdNQVRIX0NQTFhfMih6MSx6MixSLEMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2J1aWx0aW5fY2hvb3NlX2V4cHIgKF9fdGdfY3BseCh6MSkgfHwgX190Z19jcGx4KHoyKSwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX3RnX2Nob29zZV8yIChfX3JlYWxfXyh6MSksIF9fcmVhbF9fKHoyKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyMjZih6MSx6MiksIChDKSh6MSx6MiksIEMjI2woejEsejIpKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGdfY2hvb3NlXzIgKHoxLCB6MiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSIyNmKHoxLHoyKSwgKFIpKHoxLHoyKSwgUiMjbCh6MSx6MikpKQorCisjZGVmaW5lIF9fVEdNQVRIX1JFQUwoeCxSKSBcCisgIF9fdGdfY2hvb3NlICh4LCBSIyNmKHgpLCAoUikoeCksIFIjI2woeCkpCisjZGVmaW5lIF9fVEdNQVRIX1JFQUxfMih4LHksUikgXAorICBfX3RnX2Nob29zZV8yICh4LCB5LCBSIyNmKHgseSksIChSKSh4LHkpLCBSIyNsKHgseSkpCisjZGVmaW5lIF9fVEdNQVRIX1JFQUxfMyh4LHkseixSKSBcCisgIF9fdGdfY2hvb3NlXzMgKHgsIHksIHosIFIjI2YoeCx5LHopLCAoUikoeCx5LHopLCBSIyNsKHgseSx6KSkKKyNkZWZpbmUgX19UR01BVEhfUkVBTF8xXzIoeCx5LFIpIFwKKyAgX190Z19jaG9vc2UgKHgsIFIjI2YoeCx5KSwgKFIpKHgseSksIFIjI2woeCx5KSkKKyNkZWZpbmUgX19UR01BVEhfUkVBTF8yXzMoeCx5LHosUikgXAorICBfX3RnX2Nob29zZV8yICh4LCB5LCBSIyNmKHgseSx6KSwgKFIpKHgseSx6KSwgUiMjbCh4LHkseikpCisjZGVmaW5lIF9fVEdNQVRIX0NQTFhfT05MWSh6LEMpIFwKKyAgX190Z19jaG9vc2UgKF9fcmVhbF9fKHopLCBDIyNmKHopLCAoQykoeiksIEMjI2woeikpCisKKy8qIEZ1bmN0aW9ucyBkZWZpbmVkIGluIGJvdGggPG1hdGguaD4gYW5kIDxjb21wbGV4Lmg+ICg3LjIycDQpICovCisjZGVmaW5lIGFjb3MoeikgICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCBhY29zLCBjYWNvcykKKyNkZWZpbmUgYXNpbih6KSAgICAgICAgICBfX1RHTUFUSF9DUExYKHosIGFzaW4sIGNhc2luKQorI2RlZmluZSBhdGFuKHopICAgICAgICAgIF9fVEdNQVRIX0NQTFgoeiwgYXRhbiwgY2F0YW4pCisjZGVmaW5lIGFjb3NoKHopICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCBhY29zaCwgY2Fjb3NoKQorI2RlZmluZSBhc2luaCh6KSAgICAgICAgIF9fVEdNQVRIX0NQTFgoeiwgYXNpbmgsIGNhc2luaCkKKyNkZWZpbmUgYXRhbmgoeikgICAgICAgICBfX1RHTUFUSF9DUExYKHosIGF0YW5oLCBjYXRhbmgpCisjZGVmaW5lIGNvcyh6KSAgICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCBjb3MsIGNjb3MpCisjZGVmaW5lIHNpbih6KSAgICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCBzaW4sIGNzaW4pCisjZGVmaW5lIHRhbih6KSAgICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCB0YW4sIGN0YW4pCisjZGVmaW5lIGNvc2goeikgICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCBjb3NoLCBjY29zaCkKKyNkZWZpbmUgc2luaCh6KSAgICAgICAgICBfX1RHTUFUSF9DUExYKHosIHNpbmgsIGNzaW5oKQorI2RlZmluZSB0YW5oKHopICAgICAgICAgIF9fVEdNQVRIX0NQTFgoeiwgdGFuaCwgY3RhbmgpCisjZGVmaW5lIGV4cCh6KSAgICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCBleHAsIGNleHApCisjZGVmaW5lIGxvZyh6KSAgICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCBsb2csIGNsb2cpCisjZGVmaW5lIHBvdyh6MSx6MikgICAgICAgX19UR01BVEhfQ1BMWF8yKHoxLCB6MiwgcG93LCBjcG93KQorI2RlZmluZSBzcXJ0KHopICAgICAgICAgIF9fVEdNQVRIX0NQTFgoeiwgc3FydCwgY3NxcnQpCisjZGVmaW5lIGZhYnMoeikgICAgICAgICAgX19UR01BVEhfQ1BMWCh6LCBmYWJzLCBjYWJzKQorCisvKiBGdW5jdGlvbnMgZGVmaW5lZCBpbiA8bWF0aC5oPiBvbmx5ICg3LjIycDUpICovCisjZGVmaW5lIGF0YW4yKHgseSkgICAgICAgX19UR01BVEhfUkVBTF8yKHgsIHksIGF0YW4yKQorI2RlZmluZSBjYnJ0KHgpICAgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgY2JydCkKKyNkZWZpbmUgY2VpbCh4KSAgICAgICAgICBfX1RHTUFUSF9SRUFMKHgsIGNlaWwpCisjZGVmaW5lIGNvcHlzaWduKHgseSkgICAgX19UR01BVEhfUkVBTF8yKHgsIHksIGNvcHlzaWduKQorI2RlZmluZSBlcmYoeCkgICAgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgZXJmKQorI2RlZmluZSBlcmZjKHgpICAgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgZXJmYykKKyNkZWZpbmUgZXhwMih4KSAgICAgICAgICBfX1RHTUFUSF9SRUFMKHgsIGV4cDIpCisjZGVmaW5lIGV4cG0xKHgpICAgICAgICAgX19UR01BVEhfUkVBTCh4LCBleHBtMSkKKyNkZWZpbmUgZmRpbSh4LHkpICAgICAgICBfX1RHTUFUSF9SRUFMXzIoeCwgeSwgZmRpbSkKKyNkZWZpbmUgZmxvb3IoeCkgICAgICAgICBfX1RHTUFUSF9SRUFMKHgsIGZsb29yKQorI2RlZmluZSBmbWEoeCx5LHopICAgICAgIF9fVEdNQVRIX1JFQUxfMyh4LCB5LCB6LCBmbWEpCisjZGVmaW5lIGZtYXgoeCx5KSAgICAgICAgX19UR01BVEhfUkVBTF8yKHgsIHksIGZtYXgpCisjZGVmaW5lIGZtaW4oeCx5KSAgICAgICAgX19UR01BVEhfUkVBTF8yKHgsIHksIGZtaW4pCisjZGVmaW5lIGZtb2QoeCx5KSAgICAgICAgX19UR01BVEhfUkVBTF8yKHgsIHksIGZtb2QpCisjZGVmaW5lIGZyZXhwKHgseSkgICAgICAgX19UR01BVEhfUkVBTF8xXzIoeCwgeSwgZnJleHApCisjZGVmaW5lIGh5cG90KHgseSkgICAgICAgX19UR01BVEhfUkVBTF8yKHgsIHksIGh5cG90KQorI2RlZmluZSBpbG9nYih4KSAgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgaWxvZ2IpCisjZGVmaW5lIGxkZXhwKHgseSkgICAgICAgX19UR01BVEhfUkVBTF8xXzIoeCwgeSwgbGRleHApCisjZGVmaW5lIGxnYW1tYSh4KSAgICAgICAgX19UR01BVEhfUkVBTCh4LCBsZ2FtbWEpCisjZGVmaW5lIGxscmludCh4KSAgICAgICAgX19UR01BVEhfUkVBTCh4LCBsbHJpbnQpCisjZGVmaW5lIGxscm91bmQoeCkgICAgICAgX19UR01BVEhfUkVBTCh4LCBsbHJvdW5kKQorI2RlZmluZSBsb2cxMCh4KSAgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgbG9nMTApCisjZGVmaW5lIGxvZzFwKHgpICAgICAgICAgX19UR01BVEhfUkVBTCh4LCBsb2cxcCkKKyNkZWZpbmUgbG9nMih4KSAgICAgICAgICBfX1RHTUFUSF9SRUFMKHgsIGxvZzIpCisjZGVmaW5lIGxvZ2IoeCkgICAgICAgICAgX19UR01BVEhfUkVBTCh4LCBsb2diKQorI2RlZmluZSBscmludCh4KSAgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgbHJpbnQpCisjZGVmaW5lIGxyb3VuZCh4KSAgICAgICAgX19UR01BVEhfUkVBTCh4LCBscm91bmQpCisjZGVmaW5lIG5lYXJieWludCh4KSAgICAgX19UR01BVEhfUkVBTCh4LCBuZWFyYnlpbnQpCisjZGVmaW5lIG5leHRhZnRlcih4LHkpICAgX19UR01BVEhfUkVBTF8yKHgsIHksIG5leHRhZnRlcikKKyNkZWZpbmUgbmV4dHRvd2FyZCh4LHkpICBfX1RHTUFUSF9SRUFMXzFfMih4LCB5LCBuZXh0dG93YXJkKQorI2RlZmluZSByZW1haW5kZXIoeCx5KSAgIF9fVEdNQVRIX1JFQUxfMih4LCB5LCByZW1haW5kZXIpCisjZGVmaW5lIHJlbXF1byh4LHkseikgICAgX19UR01BVEhfUkVBTF8yXzMoeCwgeSwgeiwgcmVtcXVvKQorI2RlZmluZSByaW50KHgpICAgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgcmludCkKKyNkZWZpbmUgcm91bmQoeCkgICAgICAgICBfX1RHTUFUSF9SRUFMKHgsIHJvdW5kKQorI2RlZmluZSBzY2FsYm4oeCx5KSAgICAgIF9fVEdNQVRIX1JFQUxfMV8yKHgsIHksIHNjYWxibikKKyNkZWZpbmUgc2NhbGJsbih4LHkpICAgICBfX1RHTUFUSF9SRUFMXzFfMih4LCB5LCBzY2FsYmxuKQorI2RlZmluZSB0Z2FtbWEoeCkgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgdGdhbW1hKQorI2RlZmluZSB0cnVuYyh4KSAgICAgICAgIF9fVEdNQVRIX1JFQUwoeCwgdHJ1bmMpCisKKy8qIEZ1bmN0aW9ucyBkZWZpbmVkIGluIDxjb21wbGV4Lmg+IG9ubHkgKDcuMjJwNikgKi8KKyNkZWZpbmUgY2FyZyh6KSAgICAgICAgICBfX1RHTUFUSF9DUExYX09OTFkoeiwgY2FyZykKKyNkZWZpbmUgY2ltYWcoeikgICAgICAgICBfX1RHTUFUSF9DUExYX09OTFkoeiwgY2ltYWcpCisjZGVmaW5lIGNvbmooeikgICAgICAgICAgX19UR01BVEhfQ1BMWF9PTkxZKHosIGNvbmopCisjZGVmaW5lIGNwcm9qKHopICAgICAgICAgX19UR01BVEhfQ1BMWF9PTkxZKHosIGNwcm9qKQorI2RlZmluZSBjcmVhbCh6KSAgICAgICAgIF9fVEdNQVRIX0NQTFhfT05MWSh6LCBjcmVhbCkKKworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX1RHTUFUSF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS91bndpbmQuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3Vud2luZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZDc4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS91bndpbmQuaApAQCAtMCwwICsxLDI5MyBAQAorLyogRXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBmcmFtZSB1bndpbmQgcnVudGltZSBpbnRlcmZhY2Ugcm91dGluZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBpcyBkZXJpdmVkIGZyb20gdGhlIEMrKyBBQkkgZm9yIElBLTY0LiAgV2hlcmUgd2UgZGl2ZXJnZQorICAgZm9yIGNyb3NzLWFyY2hpdGVjdHVyZSBjb21wYXRpYmlsaXR5IGFyZSBub3RlZCB3aXRoICJAQEAiLiAgKi8KKworI2lmbmRlZiBfVU5XSU5EX0gKKyNkZWZpbmUgX1VOV0lORF9ICisKKyNpZiBkZWZpbmVkIChfX1NFSF9fKSAmJiAhZGVmaW5lZCAoX19VU0lOR19TSkxKX0VYQ0VQVElPTlNfXykKKy8qIE9ubHkgZm9yIF9HQ0Nfc3BlY2lmaWNfaGFuZGxlci4gICovCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpZm5kZWYgSElERV9FWFBPUlRTCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIExldmVsIDE6IEJhc2UgQUJJICAqLworCisvKiBAQEAgVGhlIElBLTY0IEFCSSB1c2VzIHVpbnQ2NCB0aHJvdWdob3V0LiAgTW9zdCBwbGFjZXMgdGhpcyBpcworICAgaW5lZmZpY2llbnQgZm9yIDMyLWJpdCBhbmQgc21hbGxlciBtYWNoaW5lcy4gICovCit0eXBlZGVmIHVuc2lnbmVkIF9VbndpbmRfV29yZCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX3Vud2luZF93b3JkX18pKSk7Cit0eXBlZGVmIHNpZ25lZCBfVW53aW5kX1N3b3JkIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fdW53aW5kX3dvcmRfXykpKTsKKyNpZiBkZWZpbmVkKF9faWE2NF9fKSAmJiBkZWZpbmVkKF9faHB1eF9fKQordHlwZWRlZiB1bnNpZ25lZCBfVW53aW5kX1B0ciBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX3dvcmRfXykpKTsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIF9VbndpbmRfUHRyIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fcG9pbnRlcl9fKSkpOworI2VuZGlmCit0eXBlZGVmIHVuc2lnbmVkIF9VbndpbmRfSW50ZXJuYWxfUHRyIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fcG9pbnRlcl9fKSkpOworCisvKiBAQEAgVGhlIElBLTY0IEFCSSB1c2VzIGEgNjQtYml0IHdvcmQgdG8gaWRlbnRpZnkgdGhlIHByb2R1Y2VyIGFuZAorICAgY29uc3VtZXIgb2YgYW4gZXhjZXB0aW9uLiAgV2UnbGwgZ28gYWxvbmcgd2l0aCB0aGlzIGZvciBub3cgZXZlbiBvbgorICAgMzItYml0IG1hY2hpbmVzLiAgV2UnbGwgbmVlZCB0byBwcm92aWRlIHNvbWUgb3RoZXIgb3B0aW9uIGZvcgorICAgMTYtYml0IG1hY2hpbmVzIGFuZCBmb3IgbWFjaGluZXMgd2l0aCA+IDggYml0cyBwZXIgYnl0ZS4gICovCit0eXBlZGVmIHVuc2lnbmVkIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKKworLyogVGhlIHVud2luZCBpbnRlcmZhY2UgdXNlcyByZWFzb24gY29kZXMgaW4gc2V2ZXJhbCBjb250ZXh0cyB0bworICAgaWRlbnRpZnkgdGhlIHJlYXNvbnMgZm9yIGZhaWx1cmVzIG9yIG90aGVyIGFjdGlvbnMuICAqLwordHlwZWRlZiBlbnVtCit7CisgIF9VUkNfTk9fUkVBU09OID0gMCwKKyAgX1VSQ19GT1JFSUdOX0VYQ0VQVElPTl9DQVVHSFQgPSAxLAorICBfVVJDX0ZBVEFMX1BIQVNFMl9FUlJPUiA9IDIsCisgIF9VUkNfRkFUQUxfUEhBU0UxX0VSUk9SID0gMywKKyAgX1VSQ19OT1JNQUxfU1RPUCA9IDQsCisgIF9VUkNfRU5EX09GX1NUQUNLID0gNSwKKyAgX1VSQ19IQU5ETEVSX0ZPVU5EID0gNiwKKyAgX1VSQ19JTlNUQUxMX0NPTlRFWFQgPSA3LAorICBfVVJDX0NPTlRJTlVFX1VOV0lORCA9IDgKK30gX1Vud2luZF9SZWFzb25fQ29kZTsKKworCisvKiBUaGUgdW53aW5kIGludGVyZmFjZSB1c2VzIGEgcG9pbnRlciB0byBhbiBleGNlcHRpb24gaGVhZGVyIG9iamVjdAorICAgYXMgaXRzIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24uIEluIGdlbmVyYWwsIHRoZQorICAgZnVsbCByZXByZXNlbnRhdGlvbiBvZiBhbiBleGNlcHRpb24gb2JqZWN0IGlzIGxhbmd1YWdlLSBhbmQKKyAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLCBidXQgaXQgd2lsbCBiZSBwcmVmaXhlZCBieSBhIGhlYWRlcgorICAgdW5kZXJzdG9vZCBieSB0aGUgdW53aW5kIGludGVyZmFjZS4gICovCisKK3N0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbjsKKwordHlwZWRlZiB2b2lkICgqX1Vud2luZF9FeGNlcHRpb25fQ2xlYW51cF9GbikgKF9VbndpbmRfUmVhc29uX0NvZGUsCisJCQkJCSAgICAgIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKKworc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uCit7CisgIF9VbndpbmRfRXhjZXB0aW9uX0NsYXNzIGV4Y2VwdGlvbl9jbGFzczsKKyAgX1Vud2luZF9FeGNlcHRpb25fQ2xlYW51cF9GbiBleGNlcHRpb25fY2xlYW51cDsKKworI2lmICFkZWZpbmVkIChfX1VTSU5HX1NKTEpfRVhDRVBUSU9OU19fKSAmJiBkZWZpbmVkIChfX1NFSF9fKQorICBfVW53aW5kX1dvcmQgcHJpdmF0ZV9bNl07CisjZWxzZQorICBfVW53aW5kX1dvcmQgcHJpdmF0ZV8xOworICBfVW53aW5kX1dvcmQgcHJpdmF0ZV8yOworI2VuZGlmCisKKyAgLyogQEBAIFRoZSBJQS02NCBBQkkgc2F5cyB0aGF0IHRoaXMgc3RydWN0dXJlIG11c3QgYmUgZG91YmxlLXdvcmQgYWxpZ25lZC4KKyAgICAgVGFraW5nIHRoYXQgbGl0ZXJhbGx5IGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSBnZW5lcmljYWxseS4gIEluc3RlYWQgd2UKKyAgICAgcHJvdmlkZSB0aGUgbWF4aW11bSBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgYW55IHR5cGUgZm9yIHRoZSBtYWNoaW5lLiAgKi8KK30gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18pKTsKKworCisvKiBUaGUgQUNUSU9OUyBhcmd1bWVudCB0byB0aGUgcGVyc29uYWxpdHkgcm91dGluZSBpcyBhIGJpdHdpc2UgT1Igb2Ygb25lCisgICBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzLiAgKi8KK3R5cGVkZWYgaW50IF9VbndpbmRfQWN0aW9uOworCisjZGVmaW5lIF9VQV9TRUFSQ0hfUEhBU0UJMQorI2RlZmluZSBfVUFfQ0xFQU5VUF9QSEFTRQkyCisjZGVmaW5lIF9VQV9IQU5ETEVSX0ZSQU1FCTQKKyNkZWZpbmUgX1VBX0ZPUkNFX1VOV0lORAk4CisjZGVmaW5lIF9VQV9FTkRfT0ZfU1RBQ0sJMTYKKworLyogVGhlIHRhcmdldCBjYW4gb3ZlcnJpZGUgdGhpcyBtYWNybyB0byBkZWZpbmUgYW55IGJhY2stZW5kLXNwZWNpZmljCisgICBhdHRyaWJ1dGVzIHJlcXVpcmVkIGZvciB0aGUgbG93ZXN0LWxldmVsIHN0YWNrIGZyYW1lLiAgKi8KKyNpZm5kZWYgTElCR0NDMl9VTldJTkRfQVRUUklCVVRFCisjZGVmaW5lIExJQkdDQzJfVU5XSU5EX0FUVFJJQlVURQorI2VuZGlmCisKKy8qIFRoaXMgaXMgYW4gb3BhcXVlIHR5cGUgdXNlZCB0byByZWZlciB0byBhIHN5c3RlbS1zcGVjaWZpYyBkYXRhCisgICBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgc3lzdGVtIHVud2luZGVyLiBUaGlzIGNvbnRleHQgaXMgY3JlYXRlZCBhbmQKKyAgIGRlc3Ryb3llZCBieSB0aGUgc3lzdGVtLCBhbmQgcGFzc2VkIHRvIHRoZSBwZXJzb25hbGl0eSByb3V0aW5lCisgICBkdXJpbmcgdW53aW5kaW5nLiAgKi8KK3N0cnVjdCBfVW53aW5kX0NvbnRleHQ7CisKKy8qIFJhaXNlIGFuIGV4Y2VwdGlvbiwgcGFzc2luZyBhbG9uZyB0aGUgZ2l2ZW4gZXhjZXB0aW9uIG9iamVjdC4gICovCitleHRlcm4gX1Vud2luZF9SZWFzb25fQ29kZSBMSUJHQ0MyX1VOV0lORF9BVFRSSUJVVEUKK19VbndpbmRfUmFpc2VFeGNlcHRpb24gKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKKworLyogUmFpc2UgYW4gZXhjZXB0aW9uIGZvciBmb3JjZWQgdW53aW5kaW5nLiAgKi8KKwordHlwZWRlZiBfVW53aW5kX1JlYXNvbl9Db2RlICgqX1Vud2luZF9TdG9wX0ZuKQorICAgICAoaW50LCBfVW53aW5kX0FjdGlvbiwgX1Vud2luZF9FeGNlcHRpb25fQ2xhc3MsCisgICAgICBzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwgc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCB2b2lkICopOworCitleHRlcm4gX1Vud2luZF9SZWFzb25fQ29kZSBMSUJHQ0MyX1VOV0lORF9BVFRSSUJVVEUKK19VbndpbmRfRm9yY2VkVW53aW5kIChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKiwgX1Vud2luZF9TdG9wX0ZuLCB2b2lkICopOworCisvKiBIZWxwZXIgdG8gaW52b2tlIHRoZSBleGNlcHRpb25fY2xlYW51cCByb3V0aW5lLiAgKi8KK2V4dGVybiB2b2lkIF9VbndpbmRfRGVsZXRlRXhjZXB0aW9uIChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CisKKy8qIFJlc3VtZSBwcm9wYWdhdGlvbiBvZiBhbiBleGlzdGluZyBleGNlcHRpb24uICBUaGlzIGlzIHVzZWQgYWZ0ZXIKKyAgIGUuZy4gZXhlY3V0aW5nIGNsZWFudXAgY29kZSwgYW5kIG5vdCB0byBpbXBsZW1lbnQgcmV0aHJvd2luZy4gICovCitleHRlcm4gdm9pZCBMSUJHQ0MyX1VOV0lORF9BVFRSSUJVVEUKK19VbndpbmRfUmVzdW1lIChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24gKik7CisKKy8qIEBAQCBSZXN1bWUgcHJvcGFnYXRpb24gb2YgYSBGT1JDRV9VTldJTkQgZXhjZXB0aW9uLCBvciB0byByZXRocm93CisgICBhIG5vcm1hbCBleGNlcHRpb24gdGhhdCB3YXMgaGFuZGxlZC4gICovCitleHRlcm4gX1Vud2luZF9SZWFzb25fQ29kZSBMSUJHQ0MyX1VOV0lORF9BVFRSSUJVVEUKK19VbndpbmRfUmVzdW1lX29yX1JldGhyb3cgKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKKworLyogQEBAIFVzZSB1bndpbmQgZGF0YSB0byBwZXJmb3JtIGEgc3RhY2sgYmFja3RyYWNlLiAgVGhlIHRyYWNlIGNhbGxiYWNrCisgICBpcyBjYWxsZWQgZm9yIGV2ZXJ5IHN0YWNrIGZyYW1lIGluIHRoZSBjYWxsIGNoYWluLCBidXQgbm8gY2xlYW51cAorICAgYWN0aW9ucyBhcmUgcGVyZm9ybWVkLiAgKi8KK3R5cGVkZWYgX1Vud2luZF9SZWFzb25fQ29kZSAoKl9VbndpbmRfVHJhY2VfRm4pCisgICAgIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIHZvaWQgKik7CisKK2V4dGVybiBfVW53aW5kX1JlYXNvbl9Db2RlIExJQkdDQzJfVU5XSU5EX0FUVFJJQlVURQorX1Vud2luZF9CYWNrdHJhY2UgKF9VbndpbmRfVHJhY2VfRm4sIHZvaWQgKik7CisKKy8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3IgY29tbXVuaWNhdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdW53aW5kCisgICBjb250ZXh0IChpLmUuIHRoZSB1bndpbmQgZGVzY3JpcHRvcnMgYW5kIHRoZSB1c2VyIHJlZ2lzdGVyIHN0YXRlKSBiZXR3ZWVuCisgICB0aGUgdW53aW5kIGxpYnJhcnkgYW5kIHRoZSBwZXJzb25hbGl0eSByb3V0aW5lIGFuZCBsYW5kaW5nIHBhZC4gIE9ubHkKKyAgIHNlbGVjdGVkIHJlZ2lzdGVycyBtYXkgYmUgbWFuaXB1bGF0ZWQuICAqLworCitleHRlcm4gX1Vud2luZF9Xb3JkIF9VbndpbmRfR2V0R1IgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgaW50KTsKK2V4dGVybiB2b2lkIF9VbndpbmRfU2V0R1IgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKiwgaW50LCBfVW53aW5kX1dvcmQpOworCitleHRlcm4gX1Vud2luZF9QdHIgX1Vud2luZF9HZXRJUCAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKK2V4dGVybiBfVW53aW5kX1B0ciBfVW53aW5kX0dldElQSW5mbyAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqLCBpbnQgKik7CitleHRlcm4gdm9pZCBfVW53aW5kX1NldElQIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICosIF9VbndpbmRfUHRyKTsKKworLyogQEBAIFJldHJpZXZlIHRoZSBDRkEgb2YgdGhlIGdpdmVuIGNvbnRleHQuICAqLworZXh0ZXJuIF9VbndpbmRfV29yZCBfVW53aW5kX0dldENGQSAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKworZXh0ZXJuIHZvaWQgKl9VbndpbmRfR2V0TGFuZ3VhZ2VTcGVjaWZpY0RhdGEgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKik7CisKK2V4dGVybiBfVW53aW5kX1B0ciBfVW53aW5kX0dldFJlZ2lvblN0YXJ0IChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworCisKKy8qIFRoZSBwZXJzb25hbGl0eSByb3V0aW5lIGlzIHRoZSBmdW5jdGlvbiBpbiB0aGUgQysrIChvciBvdGhlciBsYW5ndWFnZSkKKyAgIHJ1bnRpbWUgbGlicmFyeSB3aGljaCBzZXJ2ZXMgYXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIHN5c3RlbSB1bndpbmQKKyAgIGxpYnJhcnkgYW5kIGxhbmd1YWdlLXNwZWNpZmljIGV4Y2VwdGlvbiBoYW5kbGluZyBzZW1hbnRpY3MuICBJdCBpcworICAgc3BlY2lmaWMgdG8gdGhlIGNvZGUgZnJhZ21lbnQgZGVzY3JpYmVkIGJ5IGFuIHVud2luZCBpbmZvIGJsb2NrLCBhbmQKKyAgIGl0IGlzIGFsd2F5cyByZWZlcmVuY2VkIHZpYSB0aGUgcG9pbnRlciBpbiB0aGUgdW53aW5kIGluZm8gYmxvY2ssIGFuZAorICAgaGVuY2UgaXQgaGFzIG5vIEFCSS1zcGVjaWZpZWQgbmFtZS4KKworICAgTm90ZSB0aGF0IHRoaXMgaW1wbGllcyB0aGF0IHR3byBkaWZmZXJlbnQgQysrIGltcGxlbWVudGF0aW9ucyBjYW4KKyAgIHVzZSBkaWZmZXJlbnQgbmFtZXMsIGFuZCBoYXZlIGRpZmZlcmVudCBjb250ZW50cyBpbiB0aGUgbGFuZ3VhZ2UKKyAgIHNwZWNpZmljIGRhdGEgYXJlYS4gIE1vcmVvdmVyLCB0aGF0IHRoZSBsYW5ndWFnZSBzcGVjaWZpYyBkYXRhCisgICBhcmVhIGNvbnRhaW5zIG5vIHZlcnNpb24gaW5mbyBiZWNhdXNlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGludm9rZWQKKyAgIHByb3ZpZGVzIG1vcmUgZWZmZWN0aXZlIHZlcnNpb25pbmcgYnkgZGV0ZWN0aW5nIGF0IGxpbmsgdGltZSB0aGUKKyAgIGxhY2sgb2YgY29kZSB0byBoYW5kbGUgdGhlIGRpZmZlcmVudCBkYXRhIGZvcm1hdC4gICovCisKK3R5cGVkZWYgX1Vud2luZF9SZWFzb25fQ29kZSAoKl9VbndpbmRfUGVyc29uYWxpdHlfRm4pCisgICAgIChpbnQsIF9VbndpbmRfQWN0aW9uLCBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcywKKyAgICAgIHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqLCBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworCisvKiBAQEAgVGhlIGZvbGxvd2luZyBhbHRlcm5hdGUgZW50cnkgcG9pbnRzIGFyZSBmb3Igc2V0am1wL2xvbmdqbXAKKyAgIGJhc2VkIHVud2luZGluZy4gICovCisKK3N0cnVjdCBTakxqX0Z1bmN0aW9uX0NvbnRleHQ7CitleHRlcm4gdm9pZCBfVW53aW5kX1NqTGpfUmVnaXN0ZXIgKHN0cnVjdCBTakxqX0Z1bmN0aW9uX0NvbnRleHQgKik7CitleHRlcm4gdm9pZCBfVW53aW5kX1NqTGpfVW5yZWdpc3RlciAoc3RydWN0IFNqTGpfRnVuY3Rpb25fQ29udGV4dCAqKTsKKworZXh0ZXJuIF9VbndpbmRfUmVhc29uX0NvZGUgTElCR0NDMl9VTldJTkRfQVRUUklCVVRFCitfVW53aW5kX1NqTGpfUmFpc2VFeGNlcHRpb24gKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKK2V4dGVybiBfVW53aW5kX1JlYXNvbl9Db2RlIExJQkdDQzJfVU5XSU5EX0FUVFJJQlVURQorX1Vud2luZF9TakxqX0ZvcmNlZFVud2luZCAoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICosIF9VbndpbmRfU3RvcF9Gbiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIExJQkdDQzJfVU5XSU5EX0FUVFJJQlVURQorX1Vud2luZF9TakxqX1Jlc3VtZSAoc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uICopOworZXh0ZXJuIF9VbndpbmRfUmVhc29uX0NvZGUgTElCR0NDMl9VTldJTkRfQVRUUklCVVRFCitfVW53aW5kX1NqTGpfUmVzdW1lX29yX1JldGhyb3cgKHN0cnVjdCBfVW53aW5kX0V4Y2VwdGlvbiAqKTsKKworLyogQEBAIFRoZSBmb2xsb3dpbmcgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGJhc2UgYWRkcmVzc2VzIGZvciB0ZXh0CisgICBhbmQgZGF0YS1yZWxhdGl2ZSBhZGRyZXNzaW5nIGluIHRoZSBMRFNBLiAgSW4gb3JkZXIgdG8gc3RheSBsaW5rCisgICBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkIEFCSSBmb3IgSUEtNjQsIHdlIGlubGluZSB0aGVzZS4gICovCisKKyNpZmRlZiBfX2lhNjRfXworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgaW5saW5lIF9VbndpbmRfUHRyCitfVW53aW5kX0dldERhdGFSZWxCYXNlIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICpfQykKK3sKKyAgLyogVGhlIEdQIGlzIHN0b3JlZCBpbiBSMS4gICovCisgIHJldHVybiBfVW53aW5kX0dldEdSIChfQywgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX1Vud2luZF9QdHIKK19VbndpbmRfR2V0VGV4dFJlbEJhc2UgKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9DIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkpCit7CisgIGFib3J0ICgpOworICByZXR1cm4gMDsKK30KKworLyogQEBAIFJldHJpZXZlIHRoZSBCYWNraW5nIFN0b3JlIFBvaW50ZXIgb2YgdGhlIGdpdmVuIGNvbnRleHQuICAqLworZXh0ZXJuIF9VbndpbmRfV29yZCBfVW53aW5kX0dldEJTUCAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKKyNlbHNlCitleHRlcm4gX1Vud2luZF9QdHIgX1Vud2luZF9HZXREYXRhUmVsQmFzZSAoc3RydWN0IF9VbndpbmRfQ29udGV4dCAqKTsKK2V4dGVybiBfVW53aW5kX1B0ciBfVW53aW5kX0dldFRleHRSZWxCYXNlIChzdHJ1Y3QgX1Vud2luZF9Db250ZXh0ICopOworI2VuZGlmCisKKy8qIEBAQCBHaXZlbiBhbiBhZGRyZXNzLCByZXR1cm4gdGhlIGVudHJ5IHBvaW50IG9mIHRoZSBmdW5jdGlvbiB0aGF0CisgICBjb250YWlucyBpdC4gICovCitleHRlcm4gdm9pZCAqIF9VbndpbmRfRmluZEVuY2xvc2luZ0Z1bmN0aW9uICh2b2lkICpwYyk7CisKKyNpZm5kZWYgX19TSVpFT0ZfTE9OR19fCisgICNlcnJvciAiX19TSVpFT0ZfTE9OR19fIG1hY3JvIG5vdCBkZWZpbmVkIgorI2VuZGlmCisKKyNpZm5kZWYgX19TSVpFT0ZfUE9JTlRFUl9fCisgICNlcnJvciAiX19TSVpFT0ZfUE9JTlRFUl9fIG1hY3JvIG5vdCBkZWZpbmVkIgorI2VuZGlmCisKKworLyogbGViMTI4IHR5cGUgbnVtYmVycyBoYXZlIGEgcG90ZW50aWFsbHkgdW5saW1pdGVkIHNpemUuCisgICBUaGUgdGFyZ2V0IG9mIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgb2YgX3NsZWIxMjhfdCBhbmQgX3VsZWIxMjhfdAorICAgaXMgdG8gaGF2ZSBlZmZpY2llbnQgZGF0YSB0eXBlcyBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgbGViMTI4IHR5cGUKKyAgIG51bWJlcnMgdXNlZCBpbiB0aGUgdW53aW5kIGNvZGUuCisgICBNb3N0bHkgdGhlc2UgdHlwZXMgd2lsbCBzaW1wbHkgYmUgZGVmaW5lZCB0byBsb25nIGFuZCB1bnNpZ25lZCBsb25nCisgICBleGNlcHQgd2hlbiBhIHVuc2lnbmVkIGxvbmcgZGF0YSB0eXBlIG9uIHRoZSB0YXJnZXQgbWFjaGluZSBpcyBub3QKKyAgIGNhcGFibGUgb2Ygc3RvcmluZyBhIHBvaW50ZXIuICAqLworCisjaWYgX19TSVpFT0ZfTE9OR19fID49IF9fU0laRU9GX1BPSU5URVJfXworICB0eXBlZGVmIGxvbmcgX3NsZWIxMjhfdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIF91bGViMTI4X3Q7CisjZWxpZiBfX1NJWkVPRl9MT05HX0xPTkdfXyA+PSBfX1NJWkVPRl9QT0lOVEVSX18KKyAgdHlwZWRlZiBsb25nIGxvbmcgX3NsZWIxMjhfdDsKKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX3VsZWIxMjhfdDsKKyNlbHNlCisjIGVycm9yICJXaGF0IHR5cGUgc2hhbGwgd2UgdXNlIGZvciBfc2xlYjEyOF90PyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19TRUhfXykgJiYgIWRlZmluZWQgKF9fVVNJTkdfU0pMSl9FWENFUFRJT05TX18pCisvKiBIYW5kbGVzIHRoZSBtYXBwaW5nIGZyb20gU0VIIHRvIEdDQyBpbnRlcmZhY2VzLiAgKi8KK0VYQ0VQVElPTl9ESVNQT1NJVElPTiBfR0NDX3NwZWNpZmljX2hhbmRsZXIgKFBFWENFUFRJT05fUkVDT1JELCB2b2lkICosCisJCQkJCSAgICAgUENPTlRFWFQsIFBESVNQQVRDSEVSX0NPTlRFWFQsCisJCQkJCSAgICAgX1Vud2luZF9QZXJzb25hbGl0eV9Gbik7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2lmbmRlZiBISURFX0VYUE9SVFMKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisjZW5kaWYKKworI2VuZGlmIC8qIHVud2luZC5oICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS92YXJhcmdzLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5jbHVkZS92YXJhcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5ODAzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbmNsdWRlL3ZhcmFyZ3MuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX1ZBUkFSR1NfSAorI2RlZmluZSBfVkFSQVJHU19ICisKKyNlcnJvciAiR0NDIG5vIGxvbmdlciBpbXBsZW1lbnRzIDx2YXJhcmdzLmg+LiIKKyNlcnJvciAiUmV2aXNlIHlvdXIgY29kZSB0byB1c2UgPHN0ZGFyZy5oPi4iCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvZml4aW5jX2xpc3QgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5zdGFsbC10b29scy9maXhpbmNfbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJiYzJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvZml4aW5jX2xpc3QKQEAgLTAsMCArMSBAQAorOwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvZ3N5c2xpbWl0cy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvZ3N5c2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjI4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5zdGFsbC10b29scy9nc3lzbGltaXRzLmgKQEAgLTAsMCArMSw4IEBACisvKiBzeXNsaW1pdHMuaCBzdGFuZHMgZm9yIHRoZSBzeXN0ZW0ncyBvd24gbGltaXRzLmggZmlsZS4KKyAgIElmIHdlIGNhbiB1c2UgaXQgb2sgdW5tb2RpZmllZCwgdGhlbiB3ZSBpbnN0YWxsIHRoaXMgdGV4dC4KKyAgIElmIGZpeGluY2x1ZGVzIGZpeGVzIGl0LCB0aGVuIHRoZSBmaXhlZCB2ZXJzaW9uIGlzIGluc3RhbGxlZAorICAgaW5zdGVhZCBvZiB0aGlzIHRleHQuICAqLworCisjZGVmaW5lIF9HQ0NfTkVYVF9MSU1JVFNfSAkJLyogdGVsbCBnY2MncyBsaW1pdHMuaCB0byByZWN1cnNlICovCisjaW5jbHVkZV9uZXh0IDxsaW1pdHMuaD4KKyN1bmRlZiBfR0NDX05FWFRfTElNSVRTX0gKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL2luY2x1ZGUvUkVBRE1FIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvaW5jbHVkZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4NmE3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL2luY2x1ZGUvUkVBRE1FCkBAIC0wLDAgKzEsMTQgQEAKK1RoaXMgUkVBRE1FIGZpbGUgaXMgY29waWVkIGludG8gdGhlIGRpcmVjdG9yeSBmb3IgR0NDLW9ubHkgaGVhZGVyIGZpbGVzCit3aGVuIGZpeGluY2x1ZGVzIGlzIHJ1biBieSB0aGUgbWFrZWZpbGUgZm9yIEdDQy4KKworTWFueSBvZiB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBhdXRvbWF0aWNhbGx5IGVkaXRlZCBmcm9tIHRoZQorc3RhbmRhcmQgc3lzdGVtIGhlYWRlciBmaWxlcyBieSB0aGUgZml4aW5jbHVkZXMgcHJvY2Vzcy4gIFRoZXkgYXJlCitzeXN0ZW0tc3BlY2lmaWMsIGFuZCB3aWxsIG5vdCB3b3JrIG9uIGFueSBvdGhlciBraW5kIG9mIHN5c3RlbS4gIFRoZXkKK2FyZSBhbHNvIG5vdCBwYXJ0IG9mIEdDQy4gIFRoZSByZWFzb24gd2UgaGF2ZSB0byBkbyB0aGlzIGlzIGJlY2F1c2UKK0dDQyByZXF1aXJlcyBBTlNJIEMgaGVhZGVycyBhbmQgbWFueSB2ZW5kb3JzIHN1cHBseSBBTlNJLWluY29tcGF0aWJsZQoraGVhZGVycy4KKworQmVjYXVzZSB0aGlzIGlzIGFuIGF1dG9tYXRlZCBwcm9jZXNzLCBzb21ldGltZXMgaGVhZGVycyBnZXQgImZpeGVkIgordGhhdCBkbyBub3QsIHN0cmljdGx5IHNwZWFraW5nLCBuZWVkIGEgZml4LiAgQXMgbG9uZyBhcyBub3RoaW5nIGlzIGJyb2tlbgorYnkgdGhlIHByb2Nlc3MsIGl0IGlzIGp1c3QgYW4gdW5mb3J0dW5hdGUgY29sbGF0ZXJhbCBpbmNvbnZlbmllbmNlLgorV2Ugd291bGQgbGlrZSB0byByZWN0aWZ5IGl0LCBpZiBpdCBpcyBub3QgInRvbyBpbmNvbnZlbmllbnQiLgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvaW5jbHVkZS9saW1pdHMuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL2luY2x1ZGUvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyYzJjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL2luY2x1ZGUvbGltaXRzLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qIENvcHlyaWdodCAoQykgMTk5MS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIF9MSU1JVFNfSF9fXworI2RlZmluZSBfTElNSVRTX0hfX18KKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBgY2hhcicuICAqLworI3VuZGVmIENIQVJfQklUCisjZGVmaW5lIENIQVJfQklUIF9fQ0hBUl9CSVRfXworCisvKiBNYXhpbXVtIGxlbmd0aCBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuICAqLworI2lmbmRlZiBNQl9MRU5fTUFYCisjZGVmaW5lIE1CX0xFTl9NQVggMQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBjaGFyJyBjYW4gaG9sZC4gICovCisjdW5kZWYgU0NIQVJfTUlOCisjZGVmaW5lIFNDSEFSX01JTiAoLVNDSEFSX01BWCAtIDEpCisjdW5kZWYgU0NIQVJfTUFYCisjZGVmaW5lIFNDSEFSX01BWCBfX1NDSEFSX01BWF9fCisKKy8qIE1heGltdW0gdmFsdWUgYW4gYHVuc2lnbmVkIGNoYXInIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVDSEFSX01BWAorI2lmIF9fU0NIQVJfTUFYX18gPT0gX19JTlRfTUFYX18KKyMgZGVmaW5lIFVDSEFSX01BWCAoU0NIQVJfTUFYICogMlUgKyAxVSkKKyNlbHNlCisjIGRlZmluZSBVQ0hBUl9NQVggKFNDSEFSX01BWCAqIDIgKyAxKQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYGNoYXInIGNhbiBob2xkLiAgKi8KKyNpZmRlZiBfX0NIQVJfVU5TSUdORURfXworIyB1bmRlZiBDSEFSX01JTgorIyBpZiBfX1NDSEFSX01BWF9fID09IF9fSU5UX01BWF9fCisjICBkZWZpbmUgQ0hBUl9NSU4gMFUKKyMgZWxzZQorIyAgZGVmaW5lIENIQVJfTUlOIDAKKyMgZW5kaWYKKyMgdW5kZWYgQ0hBUl9NQVgKKyMgZGVmaW5lIENIQVJfTUFYIFVDSEFSX01BWAorI2Vsc2UKKyMgdW5kZWYgQ0hBUl9NSU4KKyMgZGVmaW5lIENIQVJfTUlOIFNDSEFSX01JTgorIyB1bmRlZiBDSEFSX01BWAorIyBkZWZpbmUgQ0hBUl9NQVggU0NIQVJfTUFYCisjZW5kaWYKKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgYSBgc2lnbmVkIHNob3J0IGludCcgY2FuIGhvbGQuICAqLworI3VuZGVmIFNIUlRfTUlOCisjZGVmaW5lIFNIUlRfTUlOICgtU0hSVF9NQVggLSAxKQorI3VuZGVmIFNIUlRfTUFYCisjZGVmaW5lIFNIUlRfTUFYIF9fU0hSVF9NQVhfXworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBzaG9ydCBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVTSFJUX01BWAorI2lmIF9fU0hSVF9NQVhfXyA9PSBfX0lOVF9NQVhfXworIyBkZWZpbmUgVVNIUlRfTUFYIChTSFJUX01BWCAqIDJVICsgMVUpCisjZWxzZQorIyBkZWZpbmUgVVNIUlRfTUFYIChTSFJUX01BWCAqIDIgKyAxKQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBpbnQnIGNhbiBob2xkLiAgKi8KKyN1bmRlZiBJTlRfTUlOCisjZGVmaW5lIElOVF9NSU4gKC1JTlRfTUFYIC0gMSkKKyN1bmRlZiBJTlRfTUFYCisjZGVmaW5lIElOVF9NQVggX19JTlRfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBVSU5UX01BWCAoSU5UX01BWCAqIDJVICsgMVUpCisKKy8qIE1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGEgYHNpZ25lZCBsb25nIGludCcgY2FuIGhvbGQuCisgICAoU2FtZSBhcyBgaW50JykuICAqLworI3VuZGVmIExPTkdfTUlOCisjZGVmaW5lIExPTkdfTUlOICgtTE9OR19NQVggLSAxTCkKKyN1bmRlZiBMT05HX01BWAorI2RlZmluZSBMT05HX01BWCBfX0xPTkdfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgbG9uZyBpbnQnIGNhbiBob2xkLiAgKE1pbmltdW0gaXMgMCkuICAqLworI3VuZGVmIFVMT05HX01BWAorI2RlZmluZSBVTE9OR19NQVggKExPTkdfTUFYICogMlVMICsgMVVMKQorCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAqLworIyB1bmRlZiBMTE9OR19NSU4KKyMgZGVmaW5lIExMT05HX01JTiAoLUxMT05HX01BWCAtIDFMTCkKKyMgdW5kZWYgTExPTkdfTUFYCisjIGRlZmluZSBMTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18KKworLyogTWF4aW11bSB2YWx1ZSBhbiBgdW5zaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAoTWluaW11bSBpcyAwKS4gICovCisjIHVuZGVmIFVMTE9OR19NQVgKKyMgZGVmaW5lIFVMTE9OR19NQVggKExMT05HX01BWCAqIDJVTEwgKyAxVUxMKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX0dOVV9MSUJSQVJZX18pID8gZGVmaW5lZCAoX19VU0VfR05VKSA6ICFkZWZpbmVkIChfX1NUUklDVF9BTlNJX18pCisvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBhIGBzaWduZWQgbG9uZyBsb25nIGludCcgY2FuIGhvbGQuICAqLworIyB1bmRlZiBMT05HX0xPTkdfTUlOCisjIGRlZmluZSBMT05HX0xPTkdfTUlOICgtTE9OR19MT05HX01BWCAtIDFMTCkKKyMgdW5kZWYgTE9OR19MT05HX01BWAorIyBkZWZpbmUgTE9OR19MT05HX01BWCBfX0xPTkdfTE9OR19NQVhfXworCisvKiBNYXhpbXVtIHZhbHVlIGFuIGB1bnNpZ25lZCBsb25nIGxvbmcgaW50JyBjYW4gaG9sZC4gIChNaW5pbXVtIGlzIDApLiAgKi8KKyMgdW5kZWYgVUxPTkdfTE9OR19NQVgKKyMgZGVmaW5lIFVMT05HX0xPTkdfTUFYIChMT05HX0xPTkdfTUFYICogMlVMTCArIDFVTEwpCisjZW5kaWYKKworI2VuZGlmIC8qIF9MSU1JVFNfSF9fXyAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvbWFjcm9fbGlzdCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL21hY3JvX2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL21hY3JvX2xpc3QKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL21raGVhZGVycy5jb25mIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvbWtoZWFkZXJzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhYzY5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL21raGVhZGVycy5jb25mCkBAIC0wLDAgKzEsMyBAQAorU1lTVEVNX0hFQURFUl9ESVI9Ii9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC9pbnN0YWxsL2FhcmNoNjQtbm9uZS1lbGYvc3lzLWluY2x1ZGUiCitPVEhFUl9GSVhJTkNMVURFU19ESVJTPSIiCitTVE1QX0ZJWElOQz0ic3RtcC1maXhpbmMiCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbGliY2FmX3NpbmdsZS5hIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmNhZl9zaW5nbGUuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWNkMmNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmNhZl9zaW5nbGUuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbGliZ2NjLmEgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbGliZ2NjLmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmNTdhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9saWJnY2MuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbGliZ2Nvdi5hIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmdjb3YuYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdmM2QzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmdjb3YuYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbGliZ2ZvcnRyYW5iZWdpbi5hIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmdmb3J0cmFuYmVnaW4uYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmYxZWQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmdmb3J0cmFuYmVnaW4uYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2d0eXBlLnN0YXRlIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9ndHlwZS5zdGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA2Mjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9ndHlwZS5zdGF0ZQpAQCAtMCwwICsxLDMxOTA5IEBACis7Ozs7QEBAQCBHQ0MgZ2VuZ3R5cGUgc3RhdGUKKzs7OyBET04nVCBFRElUIFRISVMgRklMRSwgc2luY2UgZ2VuZXJhdGVkIGJ5IEdDQydzIGdlbmd0eXBlCis7OzsgVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXMgdGllZCB0byBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiBHQ0MuCis7OzsgRG9uJ3QgcGFyc2UgdGhpcyBmaWxlIHdpaG91dCBrbm93aW5nIEdDQyBnZW5ndHlwZSBpbnRlcm5hbHMuCis7OzsgVGhpcyBmaWxlIHNob3VsZCBiZSBwYXJzZWQgYnkgdGhlIHNhbWUgZ2VuZ3R5cGUgd2hpY2ggd3JvdGUgaXQuCisKKyghdmVyc2lvbiAgIjQuOC4zIDIwMTMxMTExIChwcmVyZWxlYXNlKSIpCisKKyghc3JjZGlyICAiL2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MiKQorCisoIWxhbmd1YWdlcyA5IGFkYSBjIGNwIGZvcnRyYW4gZ28gamF2YSBsdG8gb2JqYyBvYmpjcCkKKworKCFmaWxlc2xpc3QgMTgxCisoIXNyY2ZpbGUgNTExICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIpCisoIXNyY2ZpbGUgNTExICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiKQorKCFzcmNmaWxlIDUxMSAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcC1pZC1kYXRhLmgiKQorKCFzcmNmaWxlIDUxMSAgImlucHV0LmgiKQorKCFzcmNmaWxlIDUxMSAgImNvcmV0eXBlcy5oIikKKyghZmlsZSA1MTEgICJhdXRvLWhvc3QuaCIpCisoIXNyY2ZpbGUgNTExICAiLi4vaW5jbHVkZS9hbnNpZGVjbC5oIikKKyghZmlsZSA1MTEgICJvcHRpb25zLmgiKQorKCFzcmNmaWxlIDUxMSAgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuaCIpCisoIXNyY2ZpbGUgNTExICAiY29uZmlnL2RieGVsZi5oIikKKyghc3JjZmlsZSA1MTEgICJjb25maWcvZWxmb3MuaCIpCisoIXNyY2ZpbGUgNTExICAiY29uZmlnL25ld2xpYi1zdGRpbnQuaCIpCisoIXNyY2ZpbGUgNTExICAiY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1lbGYuaCIpCisoIXNyY2ZpbGUgNTExICAiY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1lbGYtcmF3LmgiKQorKCFzcmNmaWxlIDUxMSAgImNvbmZpZy9pbml0ZmluaS1hcnJheS5oIikKKyghc3JjZmlsZSA1MTEgICJkZWZhdWx0cy5oIikKKyghc3JjZmlsZSA1MTEgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIpCisoIXNyY2ZpbGUgNTExICAiLi4vaW5jbHVkZS9zcGxheS10cmVlLmgiKQorKCFzcmNmaWxlIDUxMSAgImJpdG1hcC5oIikKKyghc3JjZmlsZSA1MTEgICJhbGlhcy5oIikKKyghc3JjZmlsZSA1MTEgICJjb3ZlcmFnZS5jIikKKyghc3JjZmlsZSA1MTEgICJydGwuaCIpCisoIXNyY2ZpbGUgNTExICAib3B0YWJzLmgiKQorKCFzcmNmaWxlIDUxMSAgInRyZWUuaCIpCisoIXNyY2ZpbGUgNTExICAibGliZnVuY3MuaCIpCisoIXNyY2ZpbGUgNTExICAiLi4vbGliY3BwL2luY2x1ZGUvc3ltdGFiLmgiKQorKCFzcmNmaWxlIDUxMSAgIi4uL2luY2x1ZGUvb2JzdGFjay5oIikKKyghc3JjZmlsZSA1MTEgICJyZWFsLmgiKQorKCFzcmNmaWxlIDUxMSAgImZ1bmN0aW9uLmgiKQorKCFzcmNmaWxlIDUxMSAgImluc24tYWRkci5oIikKKyghc3JjZmlsZSA1MTEgICJod2ludC5oIikKKyghc3JjZmlsZSA1MTEgICJmaXhlZC12YWx1ZS5oIikKKyghc3JjZmlsZSA1MTEgICJvdXRwdXQuaCIpCisoIXNyY2ZpbGUgNTExICAiY2ZnbG9vcC5oIikKKyghc3JjZmlsZSA1MTEgICJjc2VsaWIuaCIpCisoIXNyY2ZpbGUgNTExICAiYmFzaWMtYmxvY2suaCIpCisoIXNyY2ZpbGUgNTExICAiaXBhLXJlZi5oIikKKyghc3JjZmlsZSA1MTEgICJjZ3JhcGguaCIpCisoIXNyY2ZpbGUgNTExICAicmVsb2FkLmgiKQorKCFzcmNmaWxlIDUxMSAgImNhbGxlci1zYXZlLmMiKQorKCFzcmNmaWxlIDUxMSAgInN5bXRhYi5jIikKKyghc3JjZmlsZSA1MTEgICJhbGlhcy5jIikKKyghc3JjZmlsZSA1MTEgICJiaXRtYXAuYyIpCisoIXNyY2ZpbGUgNTExICAiY3NlbGliLmMiKQorKCFzcmNmaWxlIDUxMSAgImNncmFwaC5jIikKKyghc3JjZmlsZSA1MTEgICJpcGEtcHJvcC5jIikKKyghc3JjZmlsZSA1MTEgICJpcGEtY3AuYyIpCisoIXNyY2ZpbGUgNTExICAiZGJ4b3V0LmMiKQorKCFzcmNmaWxlIDUxMSAgImR3YXJmMm91dC5oIikKKyghc3JjZmlsZSA1MTEgICJkd2FyZjJhc20uYyIpCisoIXNyY2ZpbGUgNTExICAiZHdhcmYyY2ZpLmMiKQorKCFzcmNmaWxlIDUxMSAgImR3YXJmMm91dC5jIikKKyghc3JjZmlsZSA1MTEgICJ0cmVlLXZlY3QtZ2VuZXJpYy5jIikKKyghc3JjZmlsZSA1MTEgICJkb2p1bXAuYyIpCisoIXNyY2ZpbGUgNTExICAiZW1pdC1ydGwuYyIpCisoIXNyY2ZpbGUgNTExICAiZXhjZXB0LmgiKQorKCFzcmNmaWxlIDUxMSAgImV4cGxvdy5jIikKKyghc3JjZmlsZSA1MTEgICJleHByLmMiKQorKCFzcmNmaWxlIDUxMSAgImV4cHIuaCIpCisoIXNyY2ZpbGUgNTExICAiZnVuY3Rpb24uYyIpCisoIXNyY2ZpbGUgNTExICAiZXhjZXB0LmMiKQorKCFzcmNmaWxlIDUxMSAgImdjc2UuYyIpCisoIXNyY2ZpbGUgNTExICAiZ29kdW1wLmMiKQorKCFzcmNmaWxlIDUxMSAgImxpc3RzLmMiKQorKCFzcmNmaWxlIDUxMSAgIm9wdGFicy5jIikKKyghc3JjZmlsZSA1MTEgICJwcm9maWxlLmMiKQorKCFzcmNmaWxlIDUxMSAgIm1jZi5jIikKKyghc3JjZmlsZSA1MTEgICJyZWctc3RhY2suYyIpCisoIXNyY2ZpbGUgNTExICAiY2ZncnRsLmMiKQorKCFzcmNmaWxlIDUxMSAgInNkYm91dC5jIikKKyghc3JjZmlsZSA1MTEgICJzdG9yLWxheW91dC5jIikKKyghc3JjZmlsZSA1MTEgICJzdHJpbmdwb29sLmMiKQorKCFzcmNmaWxlIDUxMSAgInRyZWUuYyIpCisoIXNyY2ZpbGUgNTExICAidmFyYXNtLmMiKQorKCFzcmNmaWxlIDUxMSAgImdpbXBsZS5oIikKKyghc3JjZmlsZSA1MTEgICJnaW1wbGUuYyIpCisoIXNyY2ZpbGUgNTExICAidHJlZS1tdWRmbGFwLmMiKQorKCFzcmNmaWxlIDUxMSAgInRyZWUtZmxvdy5oIikKKyghc3JjZmlsZSA1MTEgICJ0cmVlLXNzYW5hbWVzLmMiKQorKCFzcmNmaWxlIDUxMSAgInRyZWUtZWguYyIpCisoIXNyY2ZpbGUgNTExICAidHJlZS1zc2EtYWRkcmVzcy5jIikKKyghc3JjZmlsZSA1MTEgICJ0cmVlLWNmZy5jIikKKyghc3JjZmlsZSA1MTEgICJ0cmVlLWRmYS5jIikKKyghc3JjZmlsZSA1MTEgICJ0cmVlLWl0ZXJhdG9yLmMiKQorKCFzcmNmaWxlIDUxMSAgImdpbXBsaWZ5LmMiKQorKCFzcmNmaWxlIDUxMSAgInRyZWUtY2hyZWMuaCIpCisoIXNyY2ZpbGUgNTExICAidHJlZS1zY2FsYXItZXZvbHV0aW9uLmMiKQorKCFzcmNmaWxlIDUxMSAgInRyZWUtc3NhLW9wZXJhbmRzLmgiKQorKCFzcmNmaWxlIDUxMSAgInRyZWUtcHJvZmlsZS5jIikKKyghc3JjZmlsZSA1MTEgICJ0cmVlLW5lc3RlZC5jIikKKyghc3JjZmlsZSA1MTEgICJ0cmVlLXBhcmxvb3BzLmMiKQorKCFzcmNmaWxlIDUxMSAgIm9tcC1sb3cuYyIpCisoIXNyY2ZpbGUgNTExICAidGFyZ2hvb2tzLmMiKQorKCFzcmNmaWxlIDUxMSAgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYyIpCisoIXNyY2ZpbGUgNTExICAicGFzc2VzLmMiKQorKCFzcmNmaWxlIDUxMSAgImNncmFwaHVuaXQuYyIpCisoIXNyY2ZpbGUgNTExICAiY2dyYXBoY2xvbmVzLmMiKQorKCFzcmNmaWxlIDUxMSAgInRyZWUtc3NhLXByb3BhZ2F0ZS5jIikKKyghc3JjZmlsZSA1MTEgICJ0cmVlLXBoaW5vZGVzLmMiKQorKCFzcmNmaWxlIDUxMSAgImx0by1zeW10YWIuYyIpCisoIXNyY2ZpbGUgNTExICAidHJlZS1zc2EtYWxpYXMuaCIpCisoIXNyY2ZpbGUgNTExICAiaXBhLXByb3AuaCIpCisoIXNyY2ZpbGUgNTExICAidHJhbnMtbWVtLmMiKQorKCFzcmNmaWxlIDUxMSAgImx0by1zdHJlYW1lci5oIikKKyghc3JjZmlsZSA1MTEgICJ0YXJnZXQtZ2xvYmFscy5oIikKKyghc3JjZmlsZSA1MTEgICJpcGEtaW5saW5lLmgiKQorKCFzcmNmaWxlIDUxMSAgImFzYW4uYyIpCisoIXNyY2ZpbGUgNTExICAidHNhbi5jIikKKyghc3JjZmlsZSAxICAiYWRhL2djYy1pbnRlcmZhY2UvYWRhLXRyZWUuaCIpCisoIXNyY2ZpbGUgMSAgImFkYS9nY2MtaW50ZXJmYWNlL2dpZ2kuaCIpCisoIXNyY2ZpbGUgMSAgImFkYS9nY2MtaW50ZXJmYWNlL2RlY2wuYyIpCisoIXNyY2ZpbGUgMSAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiKQorKCFzcmNmaWxlIDEgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIikKKyghc3JjZmlsZSAxICAiYWRhL2djYy1pbnRlcmZhY2UvbWlzYy5jIikKKyghc3JjZmlsZSAyICAiYy9jLWxhbmcuYyIpCisoIXNyY2ZpbGUgMTMwICAiYy9jLXRyZWUuaCIpCisoIXNyY2ZpbGUgMTMwICAiYy9jLWRlY2wuYyIpCisoIXNyY2ZpbGUgMzkwICAiYy1mYW1pbHkvYy1jb21tb24uYyIpCisoIXNyY2ZpbGUgMzkwICAiYy1mYW1pbHkvYy1jb21tb24uaCIpCisoIXNyY2ZpbGUgMzkwICAiYy1mYW1pbHkvYy1vYmpjLmgiKQorKCFzcmNmaWxlIDM4NiAgImMtZmFtaWx5L2MtY3BwYnVpbHRpbi5jIikKKyghc3JjZmlsZSAzOTAgICJjLWZhbWlseS9jLXByYWdtYS5oIikKKyghc3JjZmlsZSAzOTAgICJjLWZhbWlseS9jLXByYWdtYS5jIikKKyghc3JjZmlsZSAxMzAgICJjL2Mtb2JqYy1jb21tb24uYyIpCisoIXNyY2ZpbGUgMTMwICAiYy9jLXBhcnNlci5jIikKKyghc3JjZmlsZSAxMzAgICJjL2MtbGFuZy5oIikKKyghc3JjZmlsZSAyNjAgICJjcC9ydHRpLmMiKQorKCFzcmNmaWxlIDI2MCAgImNwL21hbmdsZS5jIikKKyghc3JjZmlsZSAyNjAgICJjcC9uYW1lLWxvb2t1cC5oIikKKyghc3JjZmlsZSAyNjAgICJjcC9uYW1lLWxvb2t1cC5jIikKKyghc3JjZmlsZSAyNjAgICJjcC9jcC10cmVlLmgiKQorKCFzcmNmaWxlIDI2MCAgImNwL2RlY2wuaCIpCisoIXNyY2ZpbGUgMjYwICAiY3AvY2FsbC5jIikKKyghc3JjZmlsZSAyNjAgICJjcC9kZWNsLmMiKQorKCFzcmNmaWxlIDI2MCAgImNwL2RlY2wyLmMiKQorKCFzcmNmaWxlIDI2MCAgImNwL3B0LmMiKQorKCFzcmNmaWxlIDI2MCAgImNwL3JlcG8uYyIpCisoIXNyY2ZpbGUgMjYwICAiY3Avc2VtYW50aWNzLmMiKQorKCFzcmNmaWxlIDI2MCAgImNwL3RyZWUuYyIpCisoIXNyY2ZpbGUgMjYwICAiY3AvcGFyc2VyLmgiKQorKCFzcmNmaWxlIDI2MCAgImNwL3BhcnNlci5jIikKKyghc3JjZmlsZSAyNjAgICJjcC9tZXRob2QuYyIpCisoIXNyY2ZpbGUgMjYwICAiY3AvdHlwZWNrMi5jIikKKyghc3JjZmlsZSAyNjAgICJjLWZhbWlseS9jLWxleC5jIikKKyghc3JjZmlsZSAyNjAgICJjcC9jbGFzcy5jIikKKyghc3JjZmlsZSAyNjAgICJjcC9jcC1vYmpjcC1jb21tb24uYyIpCisoIXNyY2ZpbGUgNCAgImNwL2NwLWxhbmcuYyIpCisoIXNyY2ZpbGUgNCAgImNwL2V4Y2VwdC5jIikKKyghc3JjZmlsZSA4ICAiZm9ydHJhbi9mOTUtbGFuZy5jIikKKyghc3JjZmlsZSA4ICAiZm9ydHJhbi90cmFucy1kZWNsLmMiKQorKCFzcmNmaWxlIDggICJmb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jIikKKyghc3JjZmlsZSA4ICAiZm9ydHJhbi90cmFucy1pby5jIikKKyghc3JjZmlsZSA4ICAiZm9ydHJhbi90cmFucy1zdG10LmMiKQorKCFzcmNmaWxlIDggICJmb3J0cmFuL3RyYW5zLXR5cGVzLmMiKQorKCFzcmNmaWxlIDggICJmb3J0cmFuL3RyYW5zLXR5cGVzLmgiKQorKCFzcmNmaWxlIDggICJmb3J0cmFuL3RyYW5zLmgiKQorKCFzcmNmaWxlIDggICJmb3J0cmFuL3RyYW5zLWNvbnN0LmgiKQorKCFzcmNmaWxlIDE2ICAiZ28vZ28tbGFuZy5jIikKKyghc3JjZmlsZSAxNiAgImdvL2dvLWMuaCIpCisoIXNyY2ZpbGUgMzIgICJqYXZhL2phdmEtdHJlZS5oIikKKyghc3JjZmlsZSAzMiAgImphdmEvamNmLmgiKQorKCFzcmNmaWxlIDMyICAiamF2YS9wYXJzZS5oIikKKyghc3JjZmlsZSAzMiAgImphdmEvYnVpbHRpbnMuYyIpCisoIXNyY2ZpbGUgMzIgICJqYXZhL2NsYXNzLmMiKQorKCFzcmNmaWxlIDMyICAiamF2YS9jb25zdGFudHMuYyIpCisoIXNyY2ZpbGUgMzIgICJqYXZhL2RlY2wuYyIpCisoIXNyY2ZpbGUgMzIgICJqYXZhL2V4cHIuYyIpCisoIXNyY2ZpbGUgMzIgICJqYXZhL2pjZi1wYXJzZS5jIikKKyghc3JjZmlsZSAzMiAgImphdmEvbGFuZy5jIikKKyghc3JjZmlsZSAzMiAgImphdmEvbWFuZ2xlLmMiKQorKCFzcmNmaWxlIDMyICAiamF2YS9yZXNvdXJjZS5jIikKKyghc3JjZmlsZSA2NCAgImx0by9sdG8tdHJlZS5oIikKKyghc3JjZmlsZSA2NCAgImx0by9sdG8tbGFuZy5jIikKKyghc3JjZmlsZSA2NCAgImx0by9sdG8uYyIpCisoIXNyY2ZpbGUgMzg0ICAib2JqYy9vYmpjLW1hcC5oIikKKyghc3JjZmlsZSAzODQgICJvYmpjL29iamMtYWN0LmgiKQorKCFzcmNmaWxlIDM4NCAgIm9iamMvb2JqYy1hY3QuYyIpCisoIXNyY2ZpbGUgMzg0ICAib2JqYy9vYmpjLXJ1bnRpbWUtc2hhcmVkLXN1cHBvcnQuYyIpCisoIXNyY2ZpbGUgMzg0ICAib2JqYy9vYmpjLWdudS1ydW50aW1lLWFiaS0wMS5jIikKKyghc3JjZmlsZSAzODQgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMS5jIikKKyghc3JjZmlsZSAzODQgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIikKKykKKworKCFzdHJ1Y3R1cmVzIDk1MgorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMSAKKyghdHlwZSBwb2ludGVyIDIgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEpCispCisgZ2NfcG9pbnRlZF90byAidmVjPGl2YXJyZWZfZW50cnksdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMjc2MSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIHVuZGVmaW5lZCAzIG5pbCAgZ2NfdW51c2VkICJ2YV9nYyIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMzkpCispCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDI3NjEpCituaWwgKQorKCFwYWlyICAiaXZhcnJlZl9lbnRyeSIKKyghdHlwZSBzdHJ1Y3QgNCBuaWwgIGdjX3VzZWQgIml2YXJyZWZfZW50cnkiCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAyNzU5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZGVjbCIKKyghdHlwZSBwb2ludGVyIDUgCisoIXR5cGUgcG9pbnRlciA2IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSB1bmlvbiA3IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorIGdjX3BvaW50ZWRfdG8gInRyZWVfbm9kZSIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY3NikKKworKCFmaWVsZHMgMzggCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIHN0cnVjdCA4IG5pbCAgZ2NfdXNlZCAidHJlZV9iYXNlIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NzMpCisKKyghZmllbGRzIDE4IAorKCFwYWlyICAiY29kZSIKKyghdHlwZSBzY2FsYXJfbm9uY2hhciA5IAorKCF0eXBlIHBvaW50ZXIgMTAgCisoIXR5cGUgcG9pbnRlciAxMSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMCkKKykKKyBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCispCisgZ2NfcG9pbnRlZF90bykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0MTkpCituaWwgKQorKCFwYWlyICAic2lkZV9lZmZlY3RzX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDIxKQorbmlsICkKKyghcGFpciAgImNvbnN0YW50X2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDIyKQorbmlsICkKKyghcGFpciAgImFkZHJlc3NhYmxlX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDIzKQorbmlsICkKKyghcGFpciAgInZvbGF0aWxlX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDI0KQorbmlsICkKKyghcGFpciAgInJlYWRvbmx5X2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDI1KQorbmlsICkKKyghcGFpciAgImFzbV93cml0dGVuX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDI2KQorbmlsICkKKyghcGFpciAgIm5vd2FybmluZ19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQyNykKK25pbCApCisoIXBhaXIgICJ2aXNpdGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQyOCkKK25pbCApCisoIXBhaXIgICJ1c2VkX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDMwKQorbmlsICkKKyghcGFpciAgIm5vdGhyb3dfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0MzEpCituaWwgKQorKCFwYWlyICAic3RhdGljX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDMyKQorbmlsICkKKyghcGFpciAgInB1YmxpY19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQzMykKK25pbCApCisoIXBhaXIgICJwcml2YXRlX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDM0KQorbmlsICkKKyghcGFpciAgInByb3RlY3RlZF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQzNSkKK25pbCApCisoIXBhaXIgICJkZXByZWNhdGVkX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDM2KQorbmlsICkKKyghcGFpciAgImRlZmF1bHRfZGVmX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDM3KQorbmlsICkKKyghcGFpciAgInUiCisoIXR5cGUgdW5pb24gMTIgbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy90cmVlLmg6NDM5IgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NzIpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJiaXRzIgorKCF0eXBlIHN0cnVjdCAxMyBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL3RyZWUuaDo0NDIiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQ2NCkKKworKCFmaWVsZHMgMTUgCisoIXBhaXIgICJsYW5nX2ZsYWdfMCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NDMpCituaWwgKQorKCFwYWlyICAibGFuZ19mbGFnXzEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDQ0KQorbmlsICkKKyghcGFpciAgImxhbmdfZmxhZ18yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQ0NSkKK25pbCApCisoIXBhaXIgICJsYW5nX2ZsYWdfMyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NDYpCituaWwgKQorKCFwYWlyICAibGFuZ19mbGFnXzQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDQ3KQorbmlsICkKKyghcGFpciAgImxhbmdfZmxhZ181IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQ0OCkKK25pbCApCisoIXBhaXIgICJsYW5nX2ZsYWdfNiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NDkpCituaWwgKQorKCFwYWlyICAic2F0dXJhdGluZ19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQ1MCkKK25pbCApCisoIXBhaXIgICJ1bnNpZ25lZF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQ1MikKK25pbCApCisoIXBhaXIgICJwYWNrZWRfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NTMpCituaWwgKQorKCFwYWlyICAidXNlcl9hbGlnbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NTQpCituaWwgKQorKCFwYWlyICAibmFtZWxlc3NfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NTUpCituaWwgKQorKCFwYWlyICAic3BhcmUwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDQ1NikKK25pbCApCisoIXBhaXIgICJzcGFyZTEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDU4KQorbmlsICkKKyghcGFpciAgImFkZHJlc3Nfc3BhY2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDYzKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDY0KQorbmlsICkKKyghcGFpciAgImxlbmd0aCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NjkpCituaWwgKQorKCFwYWlyICAidmVyc2lvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NzEpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA0NzIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzYzNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0JBU0UiKQorKQorKQorKCFwYWlyICAidHlwZWQiCisoIXR5cGUgc3RydWN0IDE0IG5pbCAgZ2NfdXNlZCAidHJlZV90eXBlZCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNzE5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOCkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA3MTcpCituaWwgKQorKCFwYWlyICAidHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA3MTgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjM2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfVFlQRUQiKQorKQorKQorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIHN0cnVjdCAxNSBuaWwgIGdjX3VzZWQgInRyZWVfY29tbW9uIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiA3MjQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ0eXBlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNzIyKQorbmlsICkKKyghcGFpciAgImNoYWluIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDcyMykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2MzcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19DT01NT04iKQorKQorKQorKCFwYWlyICAiaW50X2NzdCIKKyghdHlwZSBzdHJ1Y3QgMTYgbmlsICBnY191c2VkICJ0cmVlX2ludF9jc3QiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0MTYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ0eXBlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTQxNCkKK25pbCApCisoIXBhaXIgICJpbnRfY3N0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0MTUpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjM4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfSU5UX0NTVCIpCispCispCisoIXBhaXIgICJyZWFsX2NzdCIKKyghdHlwZSBzdHJ1Y3QgMTcgbmlsICBnY191c2VkICJ0cmVlX3JlYWxfY3N0IgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNDI5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidHlwZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0MjcpCituaWwgKQorKCFwYWlyICAicmVhbF9jc3RfcHRyIgorKCF0eXBlIHBvaW50ZXIgMTggbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDE5IAorKCF0eXBlIGFscmVhZHlfc2VlbiAxOCkKKyBnY19wb2ludGVkX3RvICJyZWFsX3ZhbHVlIgorKCFzcmNmaWxlbG9jICAicmVhbC5oIiA1MikKKworKCFmaWVsZHMgNyAKKyghcGFpciAgImNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJyZWFsLmgiIDQ1KQorbmlsICkKKyghcGFpciAgImRlY2ltYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJlYWwuaCIgNDYpCituaWwgKQorKCFwYWlyICAic2lnbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicmVhbC5oIiA0NykKK25pbCApCisoIXBhaXIgICJzaWduYWxsaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJyZWFsLmgiIDQ4KQorbmlsICkKKyghcGFpciAgImNhbm9uaWNhbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicmVhbC5oIiA0OSkKK25pbCApCisoIXBhaXIgICJ1ZXhwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJyZWFsLmgiIDUwKQorbmlsICkKKyghcGFpciAgInNpZyIKKyghdHlwZSBhcnJheSAyMCBuaWwgIGdjX3VzZWQgIlNJR1NaIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKykKKworKCFzcmNmaWxlbG9jICAicmVhbC5oIiA1MSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0MjgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjM5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfUkVBTF9DU1QiKQorKQorKQorKCFwYWlyICAiZml4ZWRfY3N0IgorKCF0eXBlIHN0cnVjdCAyMSBuaWwgIGdjX3VzZWQgInRyZWVfZml4ZWRfY3N0IgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNDQxKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidHlwZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0MzkpCituaWwgKQorKCFwYWlyICAiZml4ZWRfY3N0X3B0ciIKKyghdHlwZSBwb2ludGVyIDIyIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAyMyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjIpCisgZ2NfcG9pbnRlZF90byAiZml4ZWRfdmFsdWUiCisoIXNyY2ZpbGVsb2MgICJmaXhlZC12YWx1ZS5oIiAzMSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImRhdGEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZpeGVkLXZhbHVlLmgiIDI5KQorbmlsICkKKyghcGFpciAgIm1vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZpeGVkLXZhbHVlLmgiIDMwKQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTQ0MCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NDApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19GSVhFRF9DU1QiKQorKQorKQorKCFwYWlyICAidmVjdG9yIgorKCF0eXBlIHN0cnVjdCAyNCBuaWwgIGdjX3VzZWQgInRyZWVfdmVjdG9yIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNDczKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidHlwZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0NzEpCituaWwgKQorKCFwYWlyICAiZWx0cyIKKyghdHlwZSBhcnJheSAyNSBuaWwgIGdjX3VzZWQgIjEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0NzIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICJUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAoVFJFRV9UWVBFICgodHJlZSkmJWgpKSIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NDEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19WRUNUT1IiKQorKQorKQorKCFwYWlyICAic3RyaW5nIgorKCF0eXBlIHN0cnVjdCAyNiBuaWwgIGdjX3VzZWQgInRyZWVfc3RyaW5nIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNDUzKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAidHlwZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0NTApCituaWwgKQorKCFwYWlyICAibGVuZ3RoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0NTEpCituaWwgKQorKCFwYWlyICAic3RyIgorKCF0eXBlIGFycmF5IDI3IG5pbCAgZ2NfdXNlZCAiMSIgCisoIXR5cGUgc2NhbGFyX2NoYXIgMjggCisoIXR5cGUgcG9pbnRlciAyOSAKKyghdHlwZSBwb2ludGVyIDMwIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5KQorKQorIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKykKKyBnY191c2VkKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0NTIpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjQyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfU1RSSU5HIikKKykKKykKKyghcGFpciAgImNvbXBsZXgiCisoIXR5cGUgc3RydWN0IDMxIG5pbCAgZ2NfdXNlZCAidHJlZV9jb21wbGV4IgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNDYzKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAidHlwZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0NjApCituaWwgKQorKCFwYWlyICAicmVhbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNDYxKQorbmlsICkKKyghcGFpciAgImltYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTQ2MikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NDMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19DT01QTEVYIikKKykKKykKKyghcGFpciAgImlkZW50aWZpZXIiCisoIXR5cGUgc3RydWN0IDMyIG5pbCAgZ2NfdXNlZCAidHJlZV9pZGVudGlmaWVyIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNDk2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNDk0KQorbmlsICkKKyghcGFpciAgImlkIgorKCF0eXBlIHN0cnVjdCAzMyAKKyghdHlwZSBwb2ludGVyIDM0IAorKCF0eXBlIHBvaW50ZXIgMzUgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzQpCispCisgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMzKQorKQorIGdjX3VzZWQgImh0X2lkZW50aWZpZXIiCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9zeW10YWIuaCIgMzUpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJzdHIiCisoIXR5cGUgc3RyaW5nIDM2IG5pbCAgZ2NfdXNlZCkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvc3ltdGFiLmgiIDMyKQorbmlsICkKKyghcGFpciAgImxlbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvc3ltdGFiLmgiIDMzKQorbmlsICkKKyghcGFpciAgImhhc2hfdmFsdWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL3N5bXRhYi5oIiAzNCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE0OTUpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjQ0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfSURFTlRJRklFUiIpCispCispCisoIXBhaXIgICJkZWNsX21pbmltYWwiCisoIXR5cGUgc3RydWN0IDM3IG5pbCAgZ2NfdXNlZCAidHJlZV9kZWNsX21pbmltYWwiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI2NDcpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI2NDIpCituaWwgKQorKCFwYWlyICAibG9jdXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjY0MykKK25pbCApCisoIXBhaXIgICJ1aWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjY0NCkKK25pbCApCisoIXBhaXIgICJuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI2NDUpCituaWwgKQorKCFwYWlyICAiY29udGV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyNjQ2KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY0NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0RFQ0xfTUlOSU1BTCIpCispCispCisoIXBhaXIgICJkZWNsX2NvbW1vbiIKKyghdHlwZSBzdHJ1Y3QgMzggbmlsICBnY191c2VkICJ0cmVlX2RlY2xfY29tbW9uIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODc0KQorCisoIWZpZWxkcyAzNSAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzcpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjgxMCkKK25pbCApCisoIXBhaXIgICJzaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4MTEpCituaWwgKQorKCFwYWlyICAibW9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODEzKQorbmlsICkKKyghcGFpciAgIm5vbmxvY2FsX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjgxNSkKK25pbCApCisoIXBhaXIgICJ2aXJ0dWFsX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjgxNikKK25pbCApCisoIXBhaXIgICJpZ25vcmVkX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjgxNykKK25pbCApCisoIXBhaXIgICJhYnN0cmFjdF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4MTgpCituaWwgKQorKCFwYWlyICAiYXJ0aWZpY2lhbF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4MTkpCituaWwgKQorKCFwYWlyICAicHJlc2VydmVfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODIwKQorbmlsICkKKyghcGFpciAgImRlYnVnX2V4cHJfaXNfZnJvbSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODIxKQorbmlsICkKKyghcGFpciAgImxhbmdfZmxhZ18wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4MjMpCituaWwgKQorKCFwYWlyICAibGFuZ19mbGFnXzEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjgyNCkKK25pbCApCisoIXBhaXIgICJsYW5nX2ZsYWdfMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODI1KQorbmlsICkKKyghcGFpciAgImxhbmdfZmxhZ18zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4MjYpCituaWwgKQorKCFwYWlyICAibGFuZ19mbGFnXzQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjgyNykKK25pbCApCisoIXBhaXIgICJsYW5nX2ZsYWdfNSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODI4KQorbmlsICkKKyghcGFpciAgImxhbmdfZmxhZ182IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4MjkpCituaWwgKQorKCFwYWlyICAibGFuZ19mbGFnXzciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjgzMCkKK25pbCApCisoIXBhaXIgICJsYW5nX2ZsYWdfOCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODMxKQorbmlsICkKKyghcGFpciAgImRlY2xfZmxhZ18wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4MzUpCituaWwgKQorKCFwYWlyICAiZGVjbF9mbGFnXzEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjgzOSkKK25pbCApCisoIXBhaXIgICJkZWNsX2ZsYWdfMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODQzKQorbmlsICkKKyghcGFpciAgImRlY2xfZmxhZ18zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4NDUpCituaWwgKQorKCFwYWlyICAiZ2ltcGxlX3JlZ19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4NDgpCituaWwgKQorKCFwYWlyICAiZGVjbF9ieV9yZWZlcmVuY2VfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODUwKQorbmlsICkKKyghcGFpciAgImRlY2xfcmVhZF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4NTIpCituaWwgKQorKCFwYWlyICAiZGVjbF9ub25zaGFyZWFibGVfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODU0KQorbmlsICkKKyghcGFpciAgIm9mZl9hbGlnbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODU3KQorbmlsICkKKyghcGFpciAgImFsaWduIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4NjIpCituaWwgKQorKCFwYWlyICAicHRfdWlkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4NjUpCituaWwgKQorKCFwYWlyICAic2l6ZV91bml0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI4NjcpCituaWwgKQorKCFwYWlyICAiaW5pdGlhbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODY4KQorbmlsICkKKyghcGFpciAgImF0dHJpYnV0ZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjg2OSkKK25pbCApCisoIXBhaXIgICJhYnN0cmFjdF9vcmlnaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjg3MCkKK25pbCApCisoIXBhaXIgICJsYW5nX3NwZWNpZmljIgorKCF0eXBlIHBvaW50ZXIgMzkgbmlsICBnY191c2VkCisoIXR5cGUgbGFuZ19zdHJ1Y3QgNDAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5KQorIGdjX3BvaW50ZWRfdG8gImxhbmdfZGVjbCIKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL2FkYS10cmVlLmgiIDQxKQorCisoIWZpZWxkcyAwICkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdmFyaWFibGVfc2l6ZSBzdHJpbmcgICIiKQorKQorNTExICghaG9tb3R5cGVzIDcKKworKCF0eXBlIHN0cnVjdCA0MSBuaWwgIGdjX3BvaW50ZWRfdG8gImxhbmdfZGVjbCIKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tdHJlZS5oIiAzNCkKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImR1bW15IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLXRyZWUuaCIgMzMpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdmFyaWFibGVfc2l6ZSBzdHJpbmcgICIiKQorKQorNjQgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQwKQorKQorCisoIXR5cGUgc3RydWN0IDQyIG5pbCAgZ2NfcG9pbnRlZF90byAibGFuZ19kZWNsIgorKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgODE4KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZGVzYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgODEyKQorbmlsICkKKyghcGFpciAgInUiCisoIXR5cGUgdW5pb24gNDMgbmlsICBnY191c2VkICJsYW5nX2RlY2xfdSIKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDgxNykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImYiCisoIXR5cGUgc3RydWN0IDQ0IG5pbCAgZ2NfdXNlZCAibGFuZ19kZWNsX2Z1bmMiCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA3NDQpCisKKyghZmllbGRzIDIwIAorKCFwYWlyICAiY29kZV9vZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDcxNykKK25pbCApCisoIXBhaXIgICJjb2RlX2xlbmd0aCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzE4KQorbmlsICkKKyghcGFpciAgImxpbmVudW1iZXJzX29mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzE5KQorbmlsICkKKyghcGFpciAgImxvY2FsdmFyaWFibGVzX29mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzIwKQorbmlsICkKKyghcGFpciAgImFyZ19zbG90cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzIxKQorbmlsICkKKyghcGFpciAgIm1heF9sb2NhbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDcyMikKK25pbCApCisoIXBhaXIgICJtYXhfc3RhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDcyMykKK25pbCApCisoIXBhaXIgICJhcmdfc2xvdF9jb3VudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzI0KQorbmlsICkKKyghcGFpciAgImxhc3RfbGluZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzI1KQorbmlsICkKKyghcGFpciAgInRocm93c19saXN0IgorKCF0eXBlIHBvaW50ZXIgNDUgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNDYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorIGdjX3BvaW50ZWRfdG8gInZlYzx0cmVlLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjA4NSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwODUpCituaWwgKQorKCFwYWlyICAidHJlZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDg1KQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDcyNikKK25pbCApCisoIXBhaXIgICJleGNfb2JqIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA3MjcpCituaWwgKQorKCFwYWlyICAiaW5pdF90ZXN0X3RhYmxlIgorKCF0eXBlIHBvaW50ZXIgNDcgbmlsICBnY191c2VkCisoIXR5cGUgcGFyYW1fc3RydWN0IDQ4IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0NykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgc3RydWN0IDQ5IAorKCF0eXBlIHBvaW50ZXIgNTAgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCispCisgZ2NfdXNlZCAiaHRhYiIKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiAxNDIpCisKKyghZmllbGRzIDE1IAorKCFwYWlyICAiaGFzaF9mIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgMTAyKQorbmlsICkKKyghcGFpciAgImVxX2YiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiAxMDUpCituaWwgKQorKCFwYWlyICAiZGVsX2YiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiAxMDgpCituaWwgKQorKCFwYWlyICAiZW50cmllcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiAxMTEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIlaC5zaXplIikKKworKCFvcHRpb24gdXNlX3BhcmFtIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJzaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgMTE0KQorbmlsICkKKyghcGFpciAgIm5fZWxlbWVudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiAxMTcpCituaWwgKQorKCFwYWlyICAibl9kZWxldGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgMTIwKQorbmlsICkKKyghcGFpciAgInNlYXJjaGVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgMTI0KQorbmlsICkKKyghcGFpciAgImNvbGxpc2lvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiAxMjgpCituaWwgKQorKCFwYWlyICAiYWxsb2NfZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9oYXNodGFiLmgiIDEzMSkKK25pbCApCisoIXBhaXIgICJmcmVlX2YiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiAxMzIpCituaWwgKQorKCFwYWlyICAiYWxsb2NfYXJnIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMCkKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9oYXNodGFiLmgiIDEzNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiYWxsb2Nfd2l0aF9hcmdfZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9oYXNodGFiLmgiIDEzNikKK25pbCApCisoIXBhaXIgICJmcmVlX3dpdGhfYXJnX2YiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiAxMzcpCituaWwgKQorKCFwYWlyICAic2l6ZV9wcmltZV9pbmRleCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9oYXNodGFiLmgiIDE0MSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgcG9pbnRlciA1MSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUxKQorIGdjX3BvaW50ZWRfdG8gInRyZWV0cmVlaGFzaF9lbnRyeSIKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDc0OSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImtleSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzQ3KQorbmlsICkKKyghcGFpciAgInZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA3NDgpCituaWwgKSkKK25pbCAzMiBuaWwgKQorKQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzMwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1MikKKykKKykKKykKKyghcGFpciAgImljdCIKKyghdHlwZSBwb2ludGVyIDUzIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHBhcmFtX3N0cnVjdCA1NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzMzKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3KQorKQorKQorKQorKCFwYWlyICAibmF0aXZlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA3MzUpCituaWwgKQorKCFwYWlyICAic3RyaWN0ZnAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDczNikKK25pbCApCisoIXBhaXIgICJpbnZpc2libGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDczNykKK25pbCApCisoIXBhaXIgICJkdW1teSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzQwKQorbmlsICkKKyghcGFpciAgImxvY2FsX2NuaSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzQxKQorbmlsICkKKyghcGFpciAgImJyaWRnZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzQyKQorbmlsICkKKyghcGFpciAgInZhcmFyZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDc0MykKK25pbCApKQorbmlsIDMyIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDgxNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkxBTkdfREVDTF9GVU5DIikKKykKKykKKyghcGFpciAgInYiCisoIXR5cGUgc3RydWN0IDU1IG5pbCAgZ2NfdXNlZCAibGFuZ19kZWNsX3ZhciIKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDgwNSkKKworKCFmaWVsZHMgMTAgCisoIXBhaXIgICJzbG90X251bWJlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzk1KQorbmlsICkKKyghcGFpciAgInN0YXJ0X3BjIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA3OTYpCituaWwgKQorKCFwYWlyICAiZW5kX3BjIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA3OTcpCituaWwgKQorKCFwYWlyICAic2xvdF9jaGFpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzk4KQorbmlsICkKKyghcGFpciAgIm93bmVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA3OTkpCituaWwgKQorKCFwYWlyICAiZnJlZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDgwMCkKK25pbCApCisoIXBhaXIgICJsb2NhbF9zbG90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4MDEpCituaWwgKQorKCFwYWlyICAiY2xhc3NfZmllbGQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDgwMikKK25pbCApCisoIXBhaXIgICJ2dGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDgwMykKK25pbCApCisoIXBhaXIgICJmaWVsZF9lbnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4MDQpCituaWwgKSkKK25pbCAzMiBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4MTYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJMQU5HX0RFQ0xfVkFSIikKKykKKykpCituaWwgMzIgCisoIXR5cGUgbGFuZ19zdHJ1Y3QgNTYgbmlsICBnY191c2VkICJsYW5nX2RlY2xfdSIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjAxOSkKKworKCFmaWVsZHMgMCApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiJWguYmFzZS5zZWxlY3RvciIpCispCisyOTIgKCFob21vdHlwZXMgMgorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQzKQorCisoIXR5cGUgdW5pb24gNTcgbmlsICBnY191c2VkICJsYW5nX2RlY2xfdSIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjAxOSkKKworKCFmaWVsZHMgNSAKKyghcGFpciAgImJhc2UiCisoIXR5cGUgc3RydWN0IDU4IG5pbCAgZ2NfdXNlZCAibGFuZ19kZWNsX2Jhc2UiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE4OTgpCisKKyghZmllbGRzIDEyIAorKCFwYWlyICAic2VsZWN0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTg4NSkKK25pbCApCisoIXBhaXIgICJsYW5ndWFnZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxODg2KQorbmlsICkKKyghcGFpciAgInVzZV90ZW1wbGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxODg3KQorbmlsICkKKyghcGFpciAgIm5vdF9yZWFsbHlfZXh0ZXJuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE4ODgpCituaWwgKQorKCFwYWlyICAiaW5pdGlhbGl6ZWRfaW5fY2xhc3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTg4OSkKK25pbCApCisoIXBhaXIgICJyZXBvX2F2YWlsYWJsZV9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE4OTApCituaWwgKQorKCFwYWlyICAidGhyZWFkcHJpdmF0ZV9vcl9kZWxldGVkX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTg5MSkKK25pbCApCisoIXBhaXIgICJhbnRpY2lwYXRlZF9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE4OTIpCituaWwgKQorKCFwYWlyICAiZnJpZW5kX2F0dHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTg5MykKK25pbCApCisoIXBhaXIgICJ0ZW1wbGF0ZV9jb252X3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTg5NCkKK25pbCApCisoIXBhaXIgICJvZHJfdXNlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxODk1KQorbmlsICkKKyghcGFpciAgInUyc2VsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE4OTYpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAyMDE0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWZhdWx0IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJtaW4iCisoIXR5cGUgc3RydWN0IDU5IG5pbCAgZ2NfdXNlZCAibGFuZ19kZWNsX21pbiIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTkzMSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImJhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5MTMpCituaWwgKQorKCFwYWlyICAidGVtcGxhdGVfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTIwKQorbmlsICkKKyghcGFpciAgInUyIgorKCF0eXBlIHVuaW9uIDYwIG5pbCAgZ2NfdXNlZCAibGFuZ19kZWNsX3UyIgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTMwKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiYWNjZXNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5MjYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIwIikKKykKKykKKyghcGFpciAgImRpc2NyaW1pbmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTkyOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjEiKQorKQorKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTMwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIiUwLnUuYmFzZS51MnNlbCIpCispCispKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDIwMTUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIwIikKKykKKykKKyghcGFpciAgImZuIgorKCF0eXBlIHN0cnVjdCA2MSBuaWwgIGdjX3VzZWQgImxhbmdfZGVjbF9mbiIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTk5MSkKKworKCFmaWVsZHMgMjEgCisoIXBhaXIgICJtaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5MzYpCituaWwgKQorKCFwYWlyICAib3BlcmF0b3JfY29kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTQwKQorbmlsICkKKyghcGFpciAgImdsb2JhbF9jdG9yX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTk0MikKK25pbCApCisoIXBhaXIgICJnbG9iYWxfZHRvcl9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5NDMpCituaWwgKQorKCFwYWlyICAiY29uc3RydWN0b3JfYXR0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTQ0KQorbmlsICkKKyghcGFpciAgImRlc3RydWN0b3JfYXR0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTQ1KQorbmlsICkKKyghcGFpciAgImFzc2lnbm1lbnRfb3BlcmF0b3JfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTQ2KQorbmlsICkKKyghcGFpciAgInN0YXRpY19mdW5jdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTQ3KQorbmlsICkKKyghcGFpciAgInB1cmVfdmlydHVhbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTQ4KQorbmlsICkKKyghcGFpciAgImRlZmF1bHRlZF9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5NDkpCituaWwgKQorKCFwYWlyICAiaGFzX2luX2NoYXJnZV9wYXJtX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTk1MSkKK25pbCApCisoIXBhaXIgICJoYXNfdnR0X3Bhcm1fcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTUyKQorbmlsICkKKyghcGFpciAgInBlbmRpbmdfaW5saW5lX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTk1MykKK25pbCApCisoIXBhaXIgICJub25jb252ZXJ0aW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5NTQpCituaWwgKQorKCFwYWlyICAidGh1bmtfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTU1KQorbmlsICkKKyghcGFpciAgInRoaXNfdGh1bmtfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTU2KQorbmlsICkKKyghcGFpciAgImhpZGRlbl9mcmllbmRfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTU3KQorbmlsICkKKyghcGFpciAgImJlZnJpZW5kaW5nX2NsYXNzZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTk2MykKK25pbCApCisoIXBhaXIgICJjb250ZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5NzEpCituaWwgKQorKCFwYWlyICAidTUiCisoIXR5cGUgdW5pb24gNjIgbmlsICBnY191c2VkICJsYW5nX2RlY2xfdTUiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5ODIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJjbG9uZWRfZnVuY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTk3NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKQorKCFwYWlyICAiZml4ZWRfb2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5ODEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIxIikKKykKKykpCituaWwgMjYwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTk4MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICIlMS50aHVua19wIikKKykKKykKKyghcGFpciAgInUiCisoIXR5cGUgdW5pb24gNjMgbmlsICBnY191c2VkICJsYW5nX2RlY2xfdTMiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5ODkpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJwZW5kaW5nX2lubGluZV9pbmZvIgorKCF0eXBlIHBvaW50ZXIgNjQgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDY1IAorKCF0eXBlIGFscmVhZHlfc2VlbiA2NCkKKyBnY19wb2ludGVkX3RvICJjcF90b2tlbl9jYWNoZSIKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxMjQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJmaXJzdCIKKyghdHlwZSBwb2ludGVyIDY2IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDY3IAorKCF0eXBlIGFscmVhZHlfc2VlbiA2NikKKyBnY191c2VkICJjcF90b2tlbiIKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiA3MCkKKworKCFmaWVsZHMgOSAKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiA0MykKK25pbCApCisoIXBhaXIgICJrZXl3b3JkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgNDYpCituaWwgKQorKCFwYWlyICAiZmxhZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgNDgpCituaWwgKQorKCFwYWlyICAicHJhZ21hX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiA1MCkKK25pbCApCisoIXBhaXIgICJpbXBsaWNpdF9leHRlcm5fYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDUyKQorbmlsICkKKyghcGFpciAgImFtYmlndW91c19wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgNTYpCituaWwgKQorKCFwYWlyICAicHVyZ2VkX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiA2MCkKK25pbCApCisoIXBhaXIgICJsb2NhdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDYyKQorbmlsICkKKyghcGFpciAgInUiCisoIXR5cGUgdW5pb24gNjggbmlsICBnY191c2VkICJjcF90b2tlbl92YWx1ZSIKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiA2OSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInRyZWVfY2hlY2tfdmFsdWUiCisoIXR5cGUgcG9pbnRlciA2OSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNzAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5KQorIGdjX3BvaW50ZWRfdG8gInRyZWVfY2hlY2siCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzcpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDMxKQorbmlsICkKKyghcGFpciAgImNoZWNrcyIKKyghdHlwZSBwb2ludGVyIDcxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDcyIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3MSkKKyBnY19wb2ludGVkX3RvICJ2ZWM8ZGVmZXJyZWRfYWNjZXNzX2NoZWNrLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImNwL3NlbWFudGljcy5jIiAxMzApCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDEzMCkKK25pbCApCisoIXBhaXIgICJkZWZlcnJlZF9hY2Nlc3NfY2hlY2siCisoIXR5cGUgc3RydWN0IDczIG5pbCAgZ2NfdXNlZCAiZGVmZXJyZWRfYWNjZXNzX2NoZWNrIgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1NTg1KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiYmluZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNTU3OCkKK25pbCApCisoIXBhaXIgICJkZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU1ODApCituaWwgKQorKCFwYWlyICAiZGlhZ19kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU1ODIpCituaWwgKQorKCFwYWlyICAibG9jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU1ODQpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDEzMCkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzMpCituaWwgKQorKCFwYWlyICAicXVhbGlmeWluZ19zY29wZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDM2KQorbmlsICkpCituaWwgMjYwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiA2NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjEiKQorKQorKQorKCFwYWlyICAidmFsdWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiA2OCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDY5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIiglMS50eXBlID09IENQUF9URU1QTEFURV9JRCkgfHwgKCUxLnR5cGUgPT0gQ1BQX05FU1RFRF9OQU1FX1NQRUNJRklFUikiKQorKQorKSkKK25pbCAyNjAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDEyMCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAibGFzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjYpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxMjMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykpCituaWwgMjYwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTk4NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjEiKQorKQorKQorKCFwYWlyICAic2F2ZWRfbGFuZ3VhZ2VfZnVuY3Rpb24iCisoIXR5cGUgcG9pbnRlciA3NCBuaWwgIGdjX3VzZWQKKyghdHlwZSBsYW5nX3N0cnVjdCA3NSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzQpCisgZ2NfcG9pbnRlZF90byAibGFuZ3VhZ2VfZnVuY3Rpb24iCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAxMzcpCisKKyghZmllbGRzIDAgKQorbmlsIDUxMSAoIWhvbW90eXBlcyA3CisKKyghdHlwZSBzdHJ1Y3QgNzYgbmlsICBnY19wb2ludGVkX3RvICJsYW5ndWFnZV9mdW5jdGlvbiIKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tdHJlZS5oIiA0NCkKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImR1bW15IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLXRyZWUuaCIgNDMpCituaWwgKSkKK25pbCA2NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzUpCispCisKKyghdHlwZSBzdHJ1Y3QgNzcgbmlsICBnY19wb2ludGVkX3RvICJsYW5ndWFnZV9mdW5jdGlvbiIKKyghc3JjZmlsZWxvYyAgImphdmEvbGFuZy5jIiAxMTgpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJ1bnVzZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvbGFuZy5jIiAxMTcpCituaWwgKSkKK25pbCAzMiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzUpCispCisKKyghdHlwZSBzdHJ1Y3QgNzggbmlsICBnY19wb2ludGVkX3RvICJsYW5ndWFnZV9mdW5jdGlvbiIKKyghc3JjZmlsZWxvYyAgImdvL2dvLWxhbmcuYyIgODIpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJkdW1teSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ28vZ28tbGFuZy5jIiA4MSkKK25pbCApKQorbmlsIDE2IAorKCF0eXBlIGFscmVhZHlfc2VlbiA3NSkKKykKKworKCF0eXBlIHN0cnVjdCA3OSBuaWwgIGdjX3BvaW50ZWRfdG8gImxhbmd1YWdlX2Z1bmN0aW9uIgorKCFzcmNmaWxlbG9jICAiZm9ydHJhbi9mOTUtbGFuZy5jIiA3NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImJpbmRpbmdfbGV2ZWwiCisoIXR5cGUgcG9pbnRlciA4MCBuaWwgIGdjX3VzZWQKKyghdHlwZSBsYW5nX3N0cnVjdCA4MSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODApCisgZ2NfcG9pbnRlZF90byAiYmluZGluZ19sZXZlbCIKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vZjk1LWxhbmcuYyIgMjkyKQorCisoIWZpZWxkcyAwICkKK25pbCA0MCAoIWhvbW90eXBlcyAyCisKKyghdHlwZSBzdHJ1Y3QgODIgbmlsICBnY19wb2ludGVkX3RvICJiaW5kaW5nX2xldmVsIgorKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDQyMCkKKworKCFmaWVsZHMgMTAgCisoIXBhaXIgICJuYW1lcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDM4OCkKK25pbCApCisoIXBhaXIgICJzaGFkb3dlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDM5NCkKK25pbCApCisoIXBhaXIgICJibG9ja3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvZGVjbC5jIiAzOTkpCituaWwgKQorKCFwYWlyICAibGV2ZWxfY2hhaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgwKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2RlY2wuYyIgNDAyKQorbmlsICkKKyghcGFpciAgImVuZF9wYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDQwNSkKK25pbCApCisoIXBhaXIgICJzdGFydF9wYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDQwNykKK25pbCApCisoIXBhaXIgICJzdG10cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDQxMCkKK25pbCApCisoIXBhaXIgICJleGNlcHRpb25fcmFuZ2UiCisoIXR5cGUgcG9pbnRlciA4MyBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHN0cnVjdCA4NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODMpCisgZ2NfdW51c2VkICJlaF9yYW5nZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImphdmEvZGVjbC5jIiA0MTMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImJpbmRpbmdfZGVwdGgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvZGVjbC5jIiA0MTYpCituaWwgKQorKCFwYWlyICAibG9jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2RlY2wuYyIgNDE5KQorbmlsICkpCituaWwgMzIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgxKQorKQorCisoIXR5cGUgc3RydWN0IDg1IG5pbCAgZ2NfcG9pbnRlZF90byAiYmluZGluZ19sZXZlbCIKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vZjk1LWxhbmcuYyIgMjkyKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAibmFtZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vZjk1LWxhbmcuYyIgMjg2KQorbmlsICkKKyghcGFpciAgImJsb2NrcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi9mOTUtbGFuZy5jIiAyODkpCituaWwgKQorKCFwYWlyICAibGV2ZWxfY2hhaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgwKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL2Y5NS1sYW5nLmMiIDI5MSkKK25pbCApKQorbmlsIDggCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgxKQorKQorKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL2Y5NS1sYW5nLmMiIDc1KQorbmlsICkpCituaWwgOCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzUpCispCisKKyghdHlwZSBzdHJ1Y3QgODYgbmlsICBnY19wb2ludGVkX3RvICJsYW5ndWFnZV9mdW5jdGlvbiIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTEwNykKKworKCFmaWVsZHMgMTkgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIHN0cnVjdCA4NyBuaWwgIGdjX3VzZWQgImNfbGFuZ3VhZ2VfZnVuY3Rpb24iCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5oIiA1MTQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ4X3N0bXRfdHJlZSIKKyghdHlwZSBzdHJ1Y3QgODggCisoIXR5cGUgcG9pbnRlciA4OSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA4OCkKKykKKyBnY191c2VkICJzdG10X3RyZWVfcyIKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDQ5OSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInhfY3VyX3N0bXRfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDQ4NykKK25pbCApCisoIXBhaXIgICJzdG10c19hcmVfZnVsbF9leHByc19wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5oIiA0OTgpCituaWwgKSkKK25pbCAzOTAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uaCIgNTA5KQorbmlsICkKKyghcGFpciAgImxvY2FsX3R5cGVkZWZzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uaCIgNTEzKQorbmlsICkpCituaWwgMzkwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTA4MykKK25pbCApCisoIXBhaXIgICJ4X2NkdG9yX2xhYmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwODUpCituaWwgKQorKCFwYWlyICAieF9jdXJyZW50X2NsYXNzX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMDg2KQorbmlsICkKKyghcGFpciAgInhfY3VycmVudF9jbGFzc19yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTA4NykKK25pbCApCisoIXBhaXIgICJ4X2VoX3NwZWNfYmxvY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTA4OCkKK25pbCApCisoIXBhaXIgICJ4X2luX2NoYXJnZV9wYXJtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwODkpCituaWwgKQorKCFwYWlyICAieF92dHRfcGFybSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMDkwKQorbmlsICkKKyghcGFpciAgInhfcmV0dXJuX3ZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwOTEpCituaWwgKQorKCFwYWlyICAieF9hdXRvX3JldHVybl9wYXR0ZXJuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwOTIpCituaWwgKQorKCFwYWlyICAicmV0dXJuc192YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMDk0KQorbmlsICkKKyghcGFpciAgInJldHVybnNfbnVsbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMDk1KQorbmlsICkKKyghcGFpciAgInJldHVybnNfYWJub3JtYWxseSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMDk2KQorbmlsICkKKyghcGFpciAgInhfaW5fZnVuY3Rpb25fdHJ5X2hhbmRsZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTA5NykKK25pbCApCisoIXBhaXIgICJ4X2luX2Jhc2VfaW5pdGlhbGl6ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTA5OCkKK25pbCApCisoIXBhaXIgICJjYW5fdGhyb3ciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTEwMSkKK25pbCApCisoIXBhaXIgICJ4X25hbWVkX2xhYmVscyIKKyghdHlwZSBwb2ludGVyIDkwIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHBhcmFtX3N0cnVjdCA5MSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTApCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIHBvaW50ZXIgOTIgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDkzIAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MikKKyBnY19wb2ludGVkX3RvICJuYW1lZF9sYWJlbF9lbnRyeSIKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wuYyIgMjMwKQorCisoIWZpZWxkcyA4IAorKCFwYWlyICAibGFiZWxfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvZGVjbC5jIiAyMDcpCituaWwgKQorKCFwYWlyICAiYmluZGluZ19sZXZlbCIKKyghdHlwZSBwb2ludGVyIDk0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA5NSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTQpCisgZ2NfcG9pbnRlZF90byAiY3BfYmluZGluZ19sZXZlbCIKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDI1OCkKKworKCFmaWVsZHMgMTkgCisoIXBhaXIgICJuYW1lcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMTg2KQorbmlsICkKKyghcGFpciAgIm5hbWVzcGFjZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDE4OSkKK25pbCApCisoIXBhaXIgICJzdGF0aWNfZGVjbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAxOTIpCituaWwgKQorKCFwYWlyICAidXNpbmdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAxOTUpCituaWwgKQorKCFwYWlyICAidXNpbmdfZGlyZWN0aXZlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMTk5KQorbmlsICkKKyghcGFpciAgImNsYXNzX3NoYWRvd2VkIgorKCF0eXBlIHBvaW50ZXIgOTYgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgOTcgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2KQorIGdjX3BvaW50ZWRfdG8gInZlYzxjcF9jbGFzc19iaW5kaW5nLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDIwMykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyMDMpCituaWwgKQorKCFwYWlyICAiY3BfY2xhc3NfYmluZGluZyIKKyghdHlwZSBzdHJ1Y3QgOTggbmlsICBnY191c2VkICJjcF9jbGFzc19iaW5kaW5nIgorKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMTQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiYmFzZSIKKyghdHlwZSBwb2ludGVyIDk5IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAxMDAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk5KQorIGdjX3BvaW50ZWRfdG8gImN4eF9iaW5kaW5nIgorKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgNzYpCisKKyghZmllbGRzIDYgCisoIXBhaXIgICJwcmV2aW91cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTkpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDY3KQorbmlsICkKKyghcGFpciAgInZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiA2OSkKK25pbCApCisoIXBhaXIgICJ0eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiA3MSkKK25pbCApCisoIXBhaXIgICJzY29wZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTQpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDczKQorbmlsICkKKyghcGFpciAgInZhbHVlX2lzX2luaGVyaXRlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgNzQpCituaWwgKQorKCFwYWlyICAiaXNfbG9jYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDc1KQorbmlsICkpCituaWwgMjYwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDE0MykKK25pbCApCisoIXBhaXIgICJpZGVudGlmaWVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAxNDUpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMjAzKQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDIwMykKK25pbCApCisoIXBhaXIgICJ0eXBlX3NoYWRvd2VkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyMTApCituaWwgKQorKCFwYWlyICAic2hhZG93ZWRfbGFiZWxzIgorKCF0eXBlIHBvaW50ZXIgMTAxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDEwMiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAxKQorIGdjX3BvaW50ZWRfdG8gInZlYzxjcF9sYWJlbF9iaW5kaW5nLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDIxNCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyMTQpCituaWwgKQorKCFwYWlyICAiY3BfbGFiZWxfYmluZGluZyIKKyghdHlwZSBzdHJ1Y3QgMTAzIG5pbCAgZ2NfdXNlZCAiY3BfbGFiZWxfYmluZGluZyIKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDE1NCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImxhYmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAxNTEpCituaWwgKQorKCFwYWlyICAicHJldl92YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMTUzKQorbmlsICkpCituaWwgMjYwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDIxNCkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyMTQpCituaWwgKQorKCFwYWlyICAiYmxvY2tzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyMTkpCituaWwgKQorKCFwYWlyICAidGhpc19lbnRpdHkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDIyMykKK25pbCApCisoIXBhaXIgICJsZXZlbF9jaGFpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTQpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDIyNikKK25pbCApCisoIXBhaXIgICJkZWFkX3ZhcnNfZnJvbV9mb3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyMzEpCituaWwgKQorKCFwYWlyICAic3RhdGVtZW50X2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDIzNSkKK25pbCApCisoIXBhaXIgICJiaW5kaW5nX2RlcHRoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyMzgpCituaWwgKQorKCFwYWlyICAia2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMjQzKQorbmlsICkKKyghcGFpciAgImV4cGxpY2l0X3NwZWNfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMjQ3KQorbmlsICkKKyghcGFpciAgImtlZXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDI1MCkKK25pbCApCisoIXBhaXIgICJtb3JlX2NsZWFudXBzX29rIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyNTQpCituaWwgKQorKCFwYWlyICAiaGF2ZV9jbGVhbnVwcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMjU1KQorbmlsICkpCituaWwgMjYwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wuYyIgMjEyKQorbmlsICkKKyghcGFpciAgIm5hbWVzX2luX3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDIxNikKK25pbCApCisoIXBhaXIgICJiYWRfZGVjbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDIxOSkKK25pbCApCisoIXBhaXIgICJ1c2VzIgorKCF0eXBlIHBvaW50ZXIgMTA0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAxMDUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNCkKKyBnY19wb2ludGVkX3RvICJuYW1lZF9sYWJlbF91c2VfZW50cnkiCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDE5OSkKKworKCFmaWVsZHMgNSAKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNCkKKworKCFzcmNmaWxlbG9jICAiY3AvZGVjbC5jIiAxODQpCituaWwgKQorKCFwYWlyICAiYmluZGluZ19sZXZlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTQpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wuYyIgMTg4KQorbmlsICkKKyghcGFpciAgIm5hbWVzX2luX3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDE5MikKK25pbCApCisoIXBhaXIgICJvX2dvdG9fbG9jdXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wuYyIgMTk0KQorbmlsICkKKyghcGFpciAgImluX29tcF9zY29wZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvZGVjbC5jIiAxOTgpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5uZXh0IikKKykKKzI2MCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDIyMikKK25pbCApCisoIXBhaXIgICJpbl90cnlfc2NvcGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wuYyIgMjI3KQorbmlsICkKKyghcGFpciAgImluX2NhdGNoX3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDIyOCkKK25pbCApCisoIXBhaXIgICJpbl9vbXBfc2NvcGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wuYyIgMjI5KQorbmlsICkpCituaWwgMjYwIG5pbCApCispCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDExMDMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkzKQorKQorKQorKQorKCFwYWlyICAiYmluZGluZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDExMDQpCituaWwgKQorKCFwYWlyICAieF9sb2NhbF9uYW1lcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTEwNSkKK25pbCApCisoIXBhaXIgICJleHRlcm5fZGVjbF9tYXAiCisoIXR5cGUgcG9pbnRlciAxMDYgbmlsICBnY191c2VkCisoIXR5cGUgcGFyYW1fc3RydWN0IDEwNyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA2KQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBwb2ludGVyIDEwOCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMTA5IAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDgpCisgZ2NfcG9pbnRlZF90byAiY3h4X2ludF90cmVlX21hcCIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTA3NSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInVpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMDczKQorbmlsICkKKyghcGFpciAgInRvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwNzQpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKykKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTEwNikKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA5KQorKQorKQorKSkKK25pbCAyNjAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1KQorKQorCisoIXR5cGUgc3RydWN0IDExMCBuaWwgIGdjX3BvaW50ZWRfdG8gImxhbmd1YWdlX2Z1bmN0aW9uIgorKCFzcmNmaWxlbG9jICAiYy9jLWxhbmcuaCIgNTYpCisKKyghZmllbGRzIDkgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4NykKKworKCFzcmNmaWxlbG9jICAiYy9jLWxhbmcuaCIgNDcpCituaWwgKQorKCFwYWlyICAieF9icmVha19sYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWxhbmcuaCIgNDgpCituaWwgKQorKCFwYWlyICAieF9jb250X2xhYmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtbGFuZy5oIiA0OSkKK25pbCApCisoIXBhaXIgICJ4X3N3aXRjaF9zdGFjayIKKyghdHlwZSBwb2ludGVyIDExMSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHN0cnVjdCAxMTIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMSkKKyBnY191bnVzZWQgImNfc3dpdGNoIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiYy9jLWxhbmcuaCIgNTApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImFyZ19pbmZvIgorKCF0eXBlIHBvaW50ZXIgMTEzIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDExNCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzKQorIGdjX3VudXNlZCAiY19hcmdfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImMvYy1sYW5nLmgiIDUxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJyZXR1cm5zX3ZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtbGFuZy5oIiA1MikKK25pbCApCisoIXBhaXIgICJyZXR1cm5zX251bGwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1sYW5nLmgiIDUzKQorbmlsICkKKyghcGFpciAgInJldHVybnNfYWJub3JtYWxseSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWxhbmcuaCIgNTQpCituaWwgKQorKCFwYWlyICAid2Fybl9hYm91dF9yZXR1cm5fdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWxhbmcuaCIgNTUpCituaWwgKSkKK25pbCAxMzAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1KQorKQorCisoIXR5cGUgc3RydWN0IDExNSBuaWwgIGdjX3BvaW50ZWRfdG8gImxhbmd1YWdlX2Z1bmN0aW9uIgorKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTM3KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAicGFybV9hdHRyX2NhY2hlIgorKCF0eXBlIHBvaW50ZXIgMTE2IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDExNyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE2KQorIGdjX3BvaW50ZWRfdG8gInZlYzxwYXJtX2F0dHIsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTMzKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDEzMykKK25pbCApCisoIXBhaXIgICJwYXJtX2F0dHIiCisoIXR5cGUgcG9pbnRlciAxMTggbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDExOSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE4KQorIGdjX3BvaW50ZWRfdG8gInBhcm1fYXR0cl9kIgorKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTI3KQorCisoIWZpZWxkcyA1IAorKCFwYWlyICAiaWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDEyMikKK25pbCApCisoIXBhaXIgICJkaW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDEyMykKK25pbCApCisoIXBhaXIgICJmaXJzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTI0KQorbmlsICkKKyghcGFpciAgImxhc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDEyNSkKK25pbCApCisoIXBhaXIgICJsZW5ndGgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDEyNikKK25pbCApKQorbmlsIDEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTMzKQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDEzMykKK25pbCApCisoIXBhaXIgICJuYW1lZF9yZXRfdmFsIgorKCF0eXBlIHBvaW50ZXIgMTIwIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAxMjEgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMCkKKyBnY19wb2ludGVkX3RvICJiaXRtYXBfaGVhZF9kZWYiCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTg5KQorCisoIWZpZWxkcyA1IAorKCFwYWlyICAiaW5keCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYml0bWFwLmgiIDE4MSkKK25pbCApCisoIXBhaXIgICJkZXNjcmlwdG9yX2lkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTgyKQorbmlsICkKKyghcGFpciAgImZpcnN0IgorKCF0eXBlIHBvaW50ZXIgMTIyIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAxMjMgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMikKKyBnY19wb2ludGVkX3RvICJiaXRtYXBfZWxlbWVudF9kZWYiCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTc1KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIyKQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTcxKQorbmlsICkKKyghcGFpciAgInByZXYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMikKKworKCFzcmNmaWxlbG9jICAiYml0bWFwLmgiIDE3MikKK25pbCApCisoIXBhaXIgICJpbmR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTczKQorbmlsICkKKyghcGFpciAgImJpdHMiCisoIXR5cGUgYXJyYXkgMTI0IG5pbCAgZ2NfdXNlZCAiQklUTUFQX0VMRU1FTlRfV09SRFMiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorKQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTc0KQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX3ByZXYgc3RyaW5nICAiJWgucHJldiIpCisKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiJWgubmV4dCIpCispCis1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiYml0bWFwLmgiIDE4NSkKK25pbCApCisoIXBhaXIgICJjdXJyZW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjIpCisKKyghc3JjZmlsZWxvYyAgImJpdG1hcC5oIiAxODYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIm9ic3RhY2siCisoIXR5cGUgcG9pbnRlciAxMjUgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDEyNiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI1KQorIGdjX3BvaW50ZWRfdG8gImJpdG1hcF9vYnN0YWNrIgorKCFzcmNmaWxlbG9jICAiYml0bWFwLmgiIDE1NikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImVsZW1lbnRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjIpCisKKyghc3JjZmlsZWxvYyAgImJpdG1hcC5oIiAxNTMpCituaWwgKQorKCFwYWlyICAiaGVhZHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMCkKKworKCFzcmNmaWxlbG9jICAiYml0bWFwLmgiIDE1NCkKK25pbCApCisoIXBhaXIgICJvYnN0YWNrIgorKCF0eXBlIHN0cnVjdCAxMjcgbmlsICBnY191bnVzZWQgIm9ic3RhY2sibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTU1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTg3KQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDEzNCkKK25pbCApCisoIXBhaXIgICJvdGhlcl9yZXRfdmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTM1KQorbmlsICkKKyghcGFpciAgImduYXRfcmV0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAxMzYpCituaWwgKSkKK25pbCAxIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3NSkKKykKKykKKykKKykKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTg4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMCIpCispCispKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5ODkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiJTEucGVuZGluZ19pbmxpbmVfcCIpCispCispKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDIwMTYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIxIikKKykKKykKKyghcGFpciAgIm5zIgorKCF0eXBlIHN0cnVjdCAxMjggbmlsICBnY191c2VkICJsYW5nX2RlY2xfbnMiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE5OTgpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1OCkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTk2KQorbmlsICkKKyghcGFpciAgImxldmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5NCkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxOTk3KQorbmlsICkpCituaWwgMjYwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjAxNykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjIiKQorKQorKQorKCFwYWlyICAicGFybSIKKyghdHlwZSBzdHJ1Y3QgMTI5IG5pbCAgZ2NfdXNlZCAibGFuZ19kZWNsX3Bhcm0iCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDIwMDYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1OCkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAyMDAzKQorbmlsICkKKyghcGFpciAgImxldmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDIwMDQpCituaWwgKQorKCFwYWlyICAiaW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjAwNSkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDIwMTgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIzIikKKykKKykpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiJWguYmFzZS5zZWxlY3RvciIpCispCisyNjAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU2KQorKQorKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4MTcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiJTAuZGVzYyIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCispCiszMiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDApCispCisKKyghdHlwZSBzdHJ1Y3QgMTMwIG5pbCAgZ2NfcG9pbnRlZF90byAibGFuZ19kZWNsIgorKCFzcmNmaWxlbG9jICAiZ28vZ28tbGFuZy5jIiA1NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImR1bW15IgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKworKCFzcmNmaWxlbG9jICAiZ28vZ28tbGFuZy5jIiA1NSkKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCispCisxNiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDApCispCisKKyghdHlwZSBzdHJ1Y3QgMTMxIG5pbCAgZ2NfcG9pbnRlZF90byAibGFuZ19kZWNsIgorKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA4MTQpCisKKyghZmllbGRzIDYgCisoIXBhaXIgICJzYXZlZF9kZXNjcmlwdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDgwNCkKK25pbCApCisoIXBhaXIgICJzdHJpbmdsZW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgODA5KQorbmlsICkKKyghcGFpciAgImFkZHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgODEwKQorbmlsICkKKyghcGFpciAgInNwYW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgODExKQorbmlsICkKKyghcGFpciAgInRva2VuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDgxMykKK25pbCApCisoIXBhaXIgICJjYWZfb2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDgxMykKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCispCis4IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MCkKKykKKworKCF0eXBlIHN0cnVjdCAxMzIgbmlsICBnY19wb2ludGVkX3RvICJsYW5nX2RlY2wiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDIwMjApCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJ1IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1NikKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAyMDE5KQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHZhcmlhYmxlX3NpemUgc3RyaW5nICAiIikKKykKKzI2MCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDApCispCisKKyghdHlwZSBzdHJ1Y3QgMTMzIG5pbCAgZ2NfcG9pbnRlZF90byAibGFuZ19kZWNsIgorKCFzcmNmaWxlbG9jICAiYy9jLWxhbmcuaCIgNDApCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJkdW1teSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghc3JjZmlsZWxvYyAgImMvYy1sYW5nLmgiIDM5KQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHZhcmlhYmxlX3NpemUgc3RyaW5nICAiIikKKykKKzEzMCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDApCispCisKKyghdHlwZSBzdHJ1Y3QgMTM0IG5pbCAgZ2NfcG9pbnRlZF90byAibGFuZ19kZWNsIgorKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvYWRhLXRyZWUuaCIgNDEpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJ0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS9hZGEtdHJlZS5oIiA0MSkKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCispCisxIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MCkKKykKKykKKykKKykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyODczKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY0NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0RFQ0xfQ09NTU9OIikKKykKKykKKyghcGFpciAgImRlY2xfd2l0aF9ydGwiCisoIXR5cGUgc3RydWN0IDEzNSBuaWwgIGdjX3VzZWQgInRyZWVfZGVjbF93aXRoX3J0bCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjkzNSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzgpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjkzMykKK25pbCApCisoIXBhaXIgICJydGwiCisoIXR5cGUgcG9pbnRlciAxMzYgCisoIXR5cGUgcG9pbnRlciAxMzcgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgc3RydWN0IDEzOCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorIGdjX3BvaW50ZWRfdG8gInJ0eF9kZWYiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ3KQorCisoIWZpZWxkcyAxMSAKKyghcGFpciAgImNvZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyNTcpCituaWwgKQorKCFwYWlyICAibW9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDI2MCkKK25pbCApCisoIXBhaXIgICJqdW1wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjY5KQorbmlsICkKKyghcGFpciAgImNhbGwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyNzQpCituaWwgKQorKCFwYWlyICAidW5jaGFuZ2luZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDI4NSkKK25pbCApCisoIXBhaXIgICJ2b2xhdGlsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjk4KQorbmlsICkKKyghcGFpciAgImluX3N0cnVjdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDMxMikKK25pbCApCisoIXBhaXIgICJ1c2VkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzIxKQorbmlsICkKKyghcGFpciAgImZyYW1lX3JlbGF0ZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzMjkpCituaWwgKQorKCFwYWlyICAicmV0dXJuX3ZhbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDMzNSkKK25pbCApCisoIXBhaXIgICJ1IgorKCF0eXBlIHVuaW9uIDEzOSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfc3VidW5pb24iCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxNDUgCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE0MCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfZGVidWdfcGFyYW1ldGVyX3JlZiIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3RyZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkRFQlVHX1BBUkFNRVRFUl9SRUYiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTQxIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9lbnRyeV92YWx1ZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJFTlRSWV9WQUxVRSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNDIgbmlsICBnY191c2VkICJydHhfZGVmX2RlYnVnX2ltcGxpY2l0X3B0ciIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3RyZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkRFQlVHX0lNUExJQ0lUX1BUUiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNDMgbmlsICBnY191c2VkICJydHhfZGVmX3Zhcl9sb2NhdGlvbiIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICIuZmxkWzJdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfdHJlZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVkFSX0xPQ0FUSU9OIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE0NCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfZm1hIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgIi5mbGRbMl0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJGTUEiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTQ1IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91c190cnVuY2F0ZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVU19UUlVOQ0FURSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNDYgbmlsICBnY191c2VkICJydHhfZGVmX3NzX3RydW5jYXRlIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlNTX1RSVU5DQVRFIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE0NyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdXNfbWludXMiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVU19NSU5VUyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNDggbmlsICBnY191c2VkICJydHhfZGVmX3VzX2FzaGlmdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlVTX0FTSElGVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNDkgbmlsICBnY191c2VkICJydHhfZGVmX3NzX2FzaGlmdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlNTX0FTSElGVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNTAgbmlsICBnY191c2VkICJydHhfZGVmX3NzX2FicyIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTU19BQlMiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTUxIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91c19uZWciCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVVNfTkVHIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE1MiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfc3NfbmVnIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlNTX05FRyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNTMgbmlsICBnY191c2VkICJydHhfZGVmX3NzX21pbnVzIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU1NfTUlOVVMiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTU0IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91c19wbHVzIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVVNfUExVUyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNTUgbmlsICBnY191c2VkICJydHhfZGVmX3NzX3BsdXMiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTU19QTFVTIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE1NiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdmVjX2R1cGxpY2F0ZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJWRUNfRFVQTElDQVRFIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE1NyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdmVjX2NvbmNhdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlZFQ19DT05DQVQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTU4IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl92ZWNfc2VsZWN0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVkVDX1NFTEVDVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNTkgbmlsICBnY191c2VkICJydHhfZGVmX3ZlY19tZXJnZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICIuZmxkWzJdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVkVDX01FUkdFIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE2MCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfbG9fc3VtIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTE9fU1VNIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE2MSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfaGlnaCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJISUdIIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE2MiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfemVyb19leHRyYWN0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgIi5mbGRbMl0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJaRVJPX0VYVFJBQ1QiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTYzIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9zaWduX2V4dHJhY3QiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiLmZsZFsyXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlNJR05fRVhUUkFDVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNjQgbmlsICBnY191c2VkICJydHhfZGVmX3Bhcml0eSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJQQVJJVFkiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTY1IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9wb3Bjb3VudCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJQT1BDT1VOVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNjYgbmlsICBnY191c2VkICJydHhfZGVmX2N0eiIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJDVFoiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTY3IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9jbHoiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ0xaIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE2OCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfY2xyc2IiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ0xSU0IiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTY5IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9mZnMiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiRkZTIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE3MCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfYnN3YXAiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQlNXQVAiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTcxIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9zcXJ0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlNRUlQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTcyIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9hYnMiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQUJTIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE3MyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdW5zaWduZWRfc2F0X2ZyYWN0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlVOU0lHTkVEX1NBVF9GUkFDVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxNzQgbmlsICBnY191c2VkICJydHhfZGVmX3NhdF9mcmFjdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTQVRfRlJBQ1QiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTc1IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91bnNpZ25lZF9mcmFjdF9jb252ZXJ0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlVOU0lHTkVEX0ZSQUNUX0NPTlZFUlQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTc2IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9mcmFjdF9jb252ZXJ0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkZSQUNUX0NPTlZFUlQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTc3IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91bnNpZ25lZF9maXgiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVU5TSUdORURfRklYIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE3OCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdW5zaWduZWRfZmxvYXQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVU5TSUdORURfRkxPQVQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTc5IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9maXgiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiRklYIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE4MCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfZmxvYXQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiRkxPQVQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTgxIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9mbG9hdF90cnVuY2F0ZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJGTE9BVF9UUlVOQ0FURSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxODIgbmlsICBnY191c2VkICJydHhfZGVmX2Zsb2F0X2V4dGVuZCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJGTE9BVF9FWFRFTkQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTgzIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl90cnVuY2F0ZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUUlVOQ0FURSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxODQgbmlsICBnY191c2VkICJydHhfZGVmX3plcm9fZXh0ZW5kIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlpFUk9fRVhURU5EIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE4NSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfc2lnbl9leHRlbmQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU0lHTl9FWFRFTkQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTg2IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9sdGd0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTFRHVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxODcgbmlsICBnY191c2VkICJydHhfZGVmX3VubHQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVTkxUIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE4OCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdW5sZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlVOTEUiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTg5IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91bmd0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVU5HVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxOTAgbmlsICBnY191c2VkICJydHhfZGVmX3VuZ2UiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVTkdFIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDE5MSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdW5lcSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlVORVEiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTkyIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9vcmRlcmVkIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiT1JERVJFRCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxOTMgbmlsICBnY191c2VkICJydHhfZGVmX3Vub3JkZXJlZCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlVOT1JERVJFRCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxOTQgbmlsICBnY191c2VkICJydHhfZGVmX2x0dSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkxUVSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxOTUgbmlsICBnY191c2VkICJydHhfZGVmX2xldSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkxFVSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxOTYgbmlsICBnY191c2VkICJydHhfZGVmX2d0dSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdUVSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxOTcgbmlsICBnY191c2VkICJydHhfZGVmX2dldSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdFVSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAxOTggbmlsICBnY191c2VkICJydHhfZGVmX2x0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTFQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMTk5IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9sZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkxFIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIwMCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfZ3QiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMDEgbmlsICBnY191c2VkICJydHhfZGVmX2dlIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiR0UiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjAyIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9lcSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkVRIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIwMyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfbmUiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJORSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMDQgbmlsICBnY191c2VkICJydHhfZGVmX3Bvc3RfbW9kaWZ5IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiUE9TVF9NT0RJRlkiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjA1IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9wcmVfbW9kaWZ5IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiUFJFX01PRElGWSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMDYgbmlsICBnY191c2VkICJydHhfZGVmX3Bvc3RfaW5jIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlBPU1RfSU5DIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIwNyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfcG9zdF9kZWMiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiUE9TVF9ERUMiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjA4IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9wcmVfaW5jIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlBSRV9JTkMiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjA5IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9wcmVfZGVjIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlBSRV9ERUMiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjEwIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91bWF4IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVU1BWCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMTEgbmlsICBnY191c2VkICJydHhfZGVmX3VtaW4iCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVTUlOIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIxMiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfc21heCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlNNQVgiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjEzIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9zbWluIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU01JTiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMTQgbmlsICBnY191c2VkICJydHhfZGVmX3JvdGF0ZXJ0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiUk9UQVRFUlQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjE1IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9sc2hpZnRydCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkxTSElGVFJUIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIxNiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfYXNoaWZ0cnQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJBU0hJRlRSVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMTcgbmlsICBnY191c2VkICJydHhfZGVmX3JvdGF0ZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlJPVEFURSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMTggbmlsICBnY191c2VkICJydHhfZGVmX2FzaGlmdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkFTSElGVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMTkgbmlsICBnY191c2VkICJydHhfZGVmX25vdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOT1QiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjIwIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl94b3IiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJYT1IiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjIxIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9pb3IiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJJT1IiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjIyIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9hbmQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJBTkQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjIzIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91bW9kIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVU1PRCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMjQgbmlsICBnY191c2VkICJydHhfZGVmX3VkaXYiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVRElWIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIyNSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfbW9kIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTU9EIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIyNiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdXNfZGl2IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVVNfRElWIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIyNyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfc3NfZGl2IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU1NfRElWIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIyOCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfZGl2IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiRElWIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIyOSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdXNfbXVsdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlVTX01VTFQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjMwIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9zc19tdWx0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU1NfTVVMVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMzEgbmlsICBnY191c2VkICJydHhfZGVmX211bHQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJNVUxUIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIzMiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfbmVnIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIk5FRyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMzMgbmlsICBnY191c2VkICJydHhfZGVmX21pbnVzIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTUlOVVMiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjM0IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9wbHVzIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiUExVUyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMzUgbmlsICBnY191c2VkICJydHhfZGVmX2NvbXBhcmUiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJDT01QQVJFIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDIzNiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfaWZfdGhlbl9lbHNlIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgIi5mbGRbMl0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJJRl9USEVOX0VMU0UiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjM3IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9jYzAiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAwICkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNDMCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyMzggbmlsICBnY191c2VkICJydHhfZGVmX3N5bWJvbF9yZWYiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiYmxvY2tfc3ltIgorKCF0eXBlIHVuaW9uIDIzOSBuaWwgIGdjX3VzZWQgImZha2VfdW5pb25fMSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI0MCBuaWwgIGdjX3VzZWQgImJsb2NrX3N5bWJvbCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMTcpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJmbGQiCisoIXR5cGUgYXJyYXkgMjQxIG5pbCAgZ2NfdW51c2VkICIzIiAKKyghdHlwZSB1bmlvbiAyNDIgbmlsICBnY191bnVzZWQgInJ0dW5pb25fZGVmIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiYmxvY2siCisoIXR5cGUgcG9pbnRlciAyNDMgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDI0NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQzKQorIGdjX3BvaW50ZWRfdG8gIm9iamVjdF9ibG9jayIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyNTApCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJzZWN0IgorKCF0eXBlIHBvaW50ZXIgMjQ1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVuaW9uIDI0NiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorIGdjX3BvaW50ZWRfdG8gInNlY3Rpb24iCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNDk4KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIHN0cnVjdCAyNDcgbmlsICBnY191c2VkICJzZWN0aW9uX2NvbW1vbiIKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA0NDApCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJmbGFncyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDQzOSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNDk0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJuYW1lZCIKKyghdHlwZSBzdHJ1Y3QgMjQ4IG5pbCAgZ2NfdXNlZCAibmFtZWRfc2VjdGlvbiIKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA0NTIpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NykKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDQ0NCkKK25pbCApCisoIXBhaXIgICJuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDQ0NykKK25pbCApCisoIXBhaXIgICJkZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNDUxKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA0OTUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTRUNUSU9OX05BTUVEIikKKykKKykKKyghcGFpciAgInVubmFtZWQiCisoIXR5cGUgc3RydWN0IDI0OSBuaWwgIGdjX3VzZWQgInVubmFtZWRfc2VjdGlvbiIKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA0NjkpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NykKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDQ2MCkKK25pbCApCisoIXBhaXIgICJjYWxsYmFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDQ2NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiZGF0YSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTApCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA0NjUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDQ2OCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNDk2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU0VDVElPTl9VTk5BTUVEIikKKykKKykKKyghcGFpciAgIm5vc3dpdGNoIgorKCF0eXBlIHN0cnVjdCAyNTAgbmlsICBnY191c2VkICJub3N3aXRjaF9zZWN0aW9uIgorKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDQ5MCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ3KQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNDg2KQorbmlsICkKKyghcGFpciAgImNhbGxiYWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNDg5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNDk3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU0VDVElPTl9OT1NXSVRDSCIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIlNFQ1RJT05fU1RZTEUgKCYoJWgpKSIpCispCis1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIyMykKK25pbCApCisoIXBhaXIgICJhbGlnbm1lbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMjYpCituaWwgKQorKCFwYWlyICAic2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIyOSkKK25pbCApCisoIXBhaXIgICJvYmplY3RzIgorKCF0eXBlIHBvaW50ZXIgMjUxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDI1MiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjUxKQorIGdjX3BvaW50ZWRfdG8gInZlYzxydHgsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDIzOSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjM5KQorbmlsICkKKyghcGFpciAgInJ0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjM5KQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMzkpCituaWwgKQorKCFwYWlyICAiYW5jaG9ycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjUxKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjQ5KQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMTIpCituaWwgKQorKCFwYWlyICAib2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjE2KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDk1NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjEiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyOTkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiU1lNQk9MX1JFRl9IQVNfQkxPQ0tfSU5GT19QICgmJTApIikKKykKKykKKyghcGFpciAgIi5mbGRbMl0uIgorKCF0eXBlIHVuaW9uIDI1MyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfc3ltYm9sX3N1YnVuaW9uIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInJ0X2NvbnN0YW50IgorKCF0eXBlIHBvaW50ZXIgMjU0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAyNTUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI1NCkKKyBnY19wb2ludGVkX3RvICJjb25zdGFudF9kZXNjcmlwdG9yX3J0eCIKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAzMzc4KQorCisoIWZpZWxkcyAxMCAKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI1NCkKKworKCFzcmNmaWxlbG9jICAidmFyYXNtLmMiIDMzNjgpCituaWwgKQorKCFwYWlyICAibWVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAzMzY5KQorbmlsICkKKyghcGFpciAgInN5bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgMzM3MCkKK25pbCApCisoIXBhaXIgICJjb25zdGFudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgMzM3MSkKK25pbCApCisoIXBhaXIgICJvZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAzMzcyKQorbmlsICkKKyghcGFpciAgImhhc2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAzMzczKQorbmlsICkKKyghcGFpciAgIm1vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAzMzc0KQorbmlsICkKKyghcGFpciAgImFsaWduIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgMzM3NSkKK25pbCApCisoIXBhaXIgICJsYWJlbG5vIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgMzM3NikKK25pbCApCisoIXBhaXIgICJtYXJrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgMzM3NykKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIiVoLm5leHQiKQorKQorNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDExNjEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIxIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJydF90cmVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTU5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWZhdWx0IHN0cmluZyAgIiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJDT05TVEFOVF9QT09MX0FERFJFU1NfUCAoJiUwKSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9zdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTWU1CT0xfUkVGIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI1NiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfbGFiZWxfcmVmIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkxBQkVMX1JFRiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyNTcgbmlsICBnY191c2VkICJydHhfZGVmX21lbSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X21lbSIKKyghdHlwZSBwb2ludGVyIDI1OCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMjU5IAorKCF0eXBlIGFscmVhZHlfc2VlbiAyNTgpCisgZ2NfcG9pbnRlZF90byAibWVtX2F0dHJzIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDE2OSkKKworKCFmaWVsZHMgOCAKKyghcGFpciAgImV4cHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAxNDMpCituaWwgKQorKCFwYWlyICAib2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMTQ3KQorbmlsICkKKyghcGFpciAgInNpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAxNTEpCituaWwgKQorKCFwYWlyICAiYWxpYXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAxNTQpCituaWwgKQorKCFwYWlyICAiYWxpZ24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAxNTkpCituaWwgKQorKCFwYWlyICAiYWRkcnNwYWNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDE2MikKK25pbCApCisoIXBhaXIgICJvZmZzZXRfa25vd25fcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDE2NSkKK25pbCApCisoIXBhaXIgICJzaXplX2tub3duX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAxNjgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJNRU0iKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjYwIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9jb25jYXRuIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR2ZWMiCisoIXR5cGUgcG9pbnRlciAyNjEgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDI2MiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjYxKQorIGdjX3BvaW50ZWRfdG8gInJ0dmVjX2RlZiIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzODcpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJudW1fZWxlbSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDM4NSkKK25pbCApCisoIXBhaXIgICJlbGVtIgorKCF0eXBlIGFycmF5IDI2MyBuaWwgIGdjX3VzZWQgIjEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCispCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzODYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIlaC5udW1fZWxlbSIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCispCis1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ09OQ0FUTiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyNjQgbmlsICBnY191c2VkICJydHhfZGVmX2NvbmNhdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNPTkNBVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyNjUgbmlsICBnY191c2VkICJydHhfZGVmX3N0cmljdF9sb3dfcGFydCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTVFJJQ1RfTE9XX1BBUlQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjY2IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9zdWJyZWciCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU1VCUkVHIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI2NyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfc2NyYXRjaCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU0NSQVRDSCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyNjggbmlsICBnY191c2VkICJydHhfZGVmX3JlZyIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICIuZmxkWzJdLnJ0X3JlZyIKKyghdHlwZSBwb2ludGVyIDI2OSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMjcwIAorKCF0eXBlIGFscmVhZHlfc2VlbiAyNjkpCisgZ2NfcG9pbnRlZF90byAicmVnX2F0dHJzIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDE4MSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAxNzkpCituaWwgKQorKCFwYWlyICAib2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMTgwKQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlJFRyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyNzEgbmlsICBnY191c2VkICJydHhfZGVmX3BjIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMCApCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJQQyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyNzIgbmlsICBnY191c2VkICJydHhfZGVmX2NvbnN0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNPTlNUIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI3MyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfY29uc3Rfc3RyaW5nIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfc3RyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ09OU1RfU1RSSU5HIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI3NCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfY29uc3RfdmVjdG9yIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR2ZWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI2MSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ09OU1RfVkVDVE9SIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI3NSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfY29uc3RfZG91YmxlIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJDT05TVF9ET1VCTEUiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjc2IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9jb25zdF9maXhlZCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICIuZmxkWzJdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzFdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ09OU1RfRklYRUQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjc3IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9jb25zdF9pbnQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNPTlNUX0lOVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyNzggbmlsICBnY191c2VkICJydHhfZGVmX3RyYXBfaWYiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUUkFQX0lGIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI3OSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfZWhfcmV0dXJuIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMCApCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJFSF9SRVRVUk4iKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjgwIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9zaW1wbGVfcmV0dXJuIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMCApCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTSU1QTEVfUkVUVVJOIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI4MSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfcmV0dXJuIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMCApCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJSRVRVUk4iKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjgyIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9jYWxsIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ0FMTCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyODMgbmlsICBnY191c2VkICJydHhfZGVmX2Nsb2JiZXIiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ0xPQkJFUiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyODQgbmlsICBnY191c2VkICJydHhfZGVmX3VzZSIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVU0UiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjg1IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9zZXQiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTRVQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjg2IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9wcmVmZXRjaCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICIuZmxkWzJdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiUFJFRkVUQ0giKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjg3IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9hZGRyX2RpZmZfdmVjIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgNSAKKyghcGFpciAgIi5mbGRbNF0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbM10ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsyXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0dmVjIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNjEpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQUREUl9ESUZGX1ZFQyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyODggbmlsICBnY191c2VkICJydHhfZGVmX2FkZHJfdmVjIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR2ZWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI2MSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQUREUl9WRUMiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjg5IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91bnNwZWNfdm9sYXRpbGUiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjYxKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVTlNQRUNfVk9MQVRJTEUiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjkwIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl91bnNwZWMiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiLmZsZFsxXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9ydHZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjYxKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJVTlNQRUMiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMjkxIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9hc21fb3BlcmFuZHMiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyA3IAorKCFwYWlyICAiLmZsZFs2XS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFs1XS5ydF9ydHZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjYxKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNF0ucnRfcnR2ZWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI2MSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzNdLnJ0X3J0dmVjIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNjEpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsyXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9zdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfc3RyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQVNNX09QRVJBTkRTIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI5MiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfYXNtX2lucHV0IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIi5mbGRbMV0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfc3RyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQVNNX0lOUFVUIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDI5MyBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfcGFyYWxsZWwiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjYxKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJQQVJBTExFTCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyOTQgbmlsICBnY191c2VkICJydHhfZGVmX2NvbmRfZXhlYyIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNPTkRfRVhFQyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAyOTUgbmlsICBnY191c2VkICJydHhfZGVmX25vdGUiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyA3IAorKCFwYWlyICAiLmZsZFs2XS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFs1XS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFs0XS4iCisoIXR5cGUgdW5pb24gMjk2IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9ub3RlX3N1YnVuaW9uIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMTcgCisoIXBhaXIgICJydF9zdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTI3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWZhdWx0IHN0cmluZyAgIiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTQxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX0NGSV9MQUJFTCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTQxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX0NGSSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTQxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX1NXSVRDSF9URVhUX1NFQ1RJT05TIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDExNDEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOT1RFX0lOU05fQkFTSUNfQkxPQ0siKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTM3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX0NBTExfQVJHX0xPQ0FUSU9OIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTEzNykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIk5PVEVfSU5TTl9WQVJfTE9DQVRJT04iKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTE0MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIk5PVEVfSU5TTl9FSF9SRUdJT05fRU5EIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDExNDEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOT1RFX0lOU05fRUhfUkVHSU9OX0JFRyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTQxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX0VQSUxPR1VFX0JFRyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTQxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX1BST0xPR1VFX0VORCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTQxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX0ZVTkNUSU9OX0JFRyIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRfdHJlZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTEzMikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIk5PVEVfSU5TTl9CTE9DS19FTkQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInJ0X3RyZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDExMzIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOT1RFX0lOU05fQkxPQ0tfQkVHIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJydF9zdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTI3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX0RFTEVURURfREVCVUdfTEFCRUwiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInJ0X3N0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDExMjcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOT1RFX0lOU05fREVMRVRFRF9MQUJFTCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMTQxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiTk9URV9JTlNOX0RFTEVURUQiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiTk9URV9LSU5EICgmJTApIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzNdLnJ0X2JiIgorKCF0eXBlIHBvaW50ZXIgMjk3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAyOTggCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NykKKyBnY19wb2ludGVkX3RvICJiYXNpY19ibG9ja19kZWYiCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyMjEpCisKKyghZmllbGRzIDEzIAorKCFwYWlyICAicHJlZHMiCisoIXR5cGUgcG9pbnRlciAyOTkgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMzAwIAorKCF0eXBlIGFscmVhZHlfc2VlbiAyOTkpCisgZ2NfcG9pbnRlZF90byAidmVjPGVkZ2UsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMTgxKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDE4MSkKK25pbCApCisoIXBhaXIgICJlZGdlIgorKCF0eXBlIHBvaW50ZXIgMzAxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAzMDIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwMSkKKyBnY19wb2ludGVkX3RvICJlZGdlX2RlZiIKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDYxKQorCisoIWZpZWxkcyAwICkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMTgxKQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDE4MSkKK25pbCApCisoIXBhaXIgICJzdWNjcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjk5KQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAxODIpCituaWwgKQorKCFwYWlyICAiYXV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMCkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMTg1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJsb29wX2ZhdGhlciIKKyghdHlwZSBwb2ludGVyIDMwMyBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMzA0IAorKCF0eXBlIGFscmVhZHlfc2VlbiAzMDMpCisgZ2NfcG9pbnRlZF90byAibG9vcCIKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgMTc1KQorCisoIWZpZWxkcyAyMSAKKyghcGFpciAgIm51bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxMDYpCituaWwgKQorKCFwYWlyICAibmluc25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDEwOSkKK25pbCApCisoIXBhaXIgICJoZWFkZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxMTIpCituaWwgKQorKCFwYWlyICAibGF0Y2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxMTUpCituaWwgKQorKCFwYWlyICAibHB0X2RlY2lzaW9uIgorKCF0eXBlIHN0cnVjdCAzMDUgbmlsICBnY191c2VkICJscHRfZGVjaXNpb24iCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDQzKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZGVjaXNpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgNDEpCituaWwgKQorKCFwYWlyICAidGltZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgNDIpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxMTgpCituaWwgKQorKCFwYWlyICAiYXZfbmluc25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDEyMSkKK25pbCApCisoIXBhaXIgICJudW1fbm9kZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgMTI0KQorbmlsICkKKyghcGFpciAgInN1cGVybG9vcHMiCisoIXR5cGUgcG9pbnRlciAzMDYgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMzA3IAorKCF0eXBlIGFscmVhZHlfc2VlbiAzMDYpCisgZ2NfcG9pbnRlZF90byAidmVjPGxvb3BfcCx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDEyNykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDEyNykKK25pbCApCisoIXBhaXIgICJsb29wX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwMykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxMjcpCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxMjcpCituaWwgKQorKCFwYWlyICAiaW5uZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwMykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxMzApCituaWwgKQorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzAzKQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDEzMykKK25pbCApCisoIXBhaXIgICJhdXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwKQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDEzNikKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAibmJfaXRlcmF0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxNDUpCituaWwgKQorKCFwYWlyICAibmJfaXRlcmF0aW9uc191cHBlcl9ib3VuZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxNDkpCituaWwgKQorKCFwYWlyICAibmJfaXRlcmF0aW9uc19lc3RpbWF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxNTQpCituaWwgKQorKCFwYWlyICAiYW55X3VwcGVyX2JvdW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDE1NikKK25pbCApCisoIXBhaXIgICJhbnlfZXN0aW1hdGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgMTU3KQorbmlsICkKKyghcGFpciAgImNhbl9iZV9wYXJhbGxlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxNjApCituaWwgKQorKCFwYWlyICAid2FybmVkX2FnZ3Jlc3NpdmVfbG9vcF9vcHRpbWl6YXRpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDE2NCkKK25pbCApCisoIXBhaXIgICJlc3RpbWF0ZV9zdGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxNjgpCituaWwgKQorKCFwYWlyICAiYm91bmRzIgorKCF0eXBlIHBvaW50ZXIgMzA4IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAzMDkgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwOCkKKyBnY19wb2ludGVkX3RvICJuYl9pdGVyX2JvdW5kIgorKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiA3NSkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgInN0bXQiCisoIXR5cGUgcG9pbnRlciAzMTAgbmlsICBnY191c2VkCisoIXR5cGUgdW5pb24gMzExIAorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisgZ2NfcG9pbnRlZF90byAiZ2ltcGxlX3N0YXRlbWVudF9kIgorKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDcxOCkKKworKCFmaWVsZHMgMjYgCisoIXBhaXIgICJnc2Jhc2UiCisoIXR5cGUgc3RydWN0IDMxMiBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfYmFzZSIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyMDgpCisKKyghZmllbGRzIDE0IAorKCFwYWlyICAiY29kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDE1MikKK25pbCApCisoIXBhaXIgICJub193YXJuaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMTU1KQorbmlsICkKKyghcGFpciAgInZpc2l0ZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAxNTkpCituaWwgKQorKCFwYWlyICAibm9udGVtcG9yYWxfbW92ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDE2MikKK25pbCApCisoIXBhaXIgICJwbGYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAxNjkpCituaWwgKQorKCFwYWlyICAibW9kaWZpZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAxNzMpCituaWwgKQorKCFwYWlyICAiaGFzX3ZvbGF0aWxlX29wcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDE3NikKK25pbCApCisoIXBhaXIgICJzdWJjb2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMTgyKQorbmlsICkKKyghcGFpciAgInVpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDE4NykKK25pbCApCisoIXBhaXIgICJsb2NhdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDE5MSkKK25pbCApCisoIXBhaXIgICJudW1fb3BzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMTk0KQorbmlsICkKKyghcGFpciAgImJiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOTcpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAxOTgpCituaWwgKQorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjA2KQorbmlsICkKKyghcGFpciAgInByZXYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDIwNykKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5uZXh0IikKKykKKzUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjkyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiR1NTX0JBU0UiKQorKQorKQorKCFwYWlyICAiZ3NvcHMiCisoIXR5cGUgc3RydWN0IDMxMyBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMiCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjM5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAib3BiYXNlIgorKCF0eXBlIHN0cnVjdCAzMTQgbmlsICBnY191c2VkICJnaW1wbGVfc3RhdGVtZW50X3dpdGhfb3BzX2Jhc2UiCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjI0KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZ3NiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTIpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyMTYpCituaWwgKQorKCFwYWlyICAidXNlX29wcyIKKyghdHlwZSBwb2ludGVyIDMxNSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHN0cnVjdCAzMTYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxNSkKKyBnY191bnVzZWQgInVzZV9vcHR5cGVfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyMjMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyMzIpCituaWwgKQorKCFwYWlyICAib3AiCisoIXR5cGUgYXJyYXkgMzE3IG5pbCAgZ2NfdXNlZCAiMSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyMzgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIlaC5vcGJhc2UuZ3NiYXNlLm51bV9vcHMiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDY5MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19XSVRIX09QUyIpCispCispCisoIXBhaXIgICJnc21lbWJhc2UiCisoIXR5cGUgc3RydWN0IDMxOCBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UiCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjU0KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAib3BiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTQpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyNDcpCituaWwgKQorKCFwYWlyICAidmRlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDI1MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAidnVzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDI1MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDY5NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19XSVRIX01FTV9PUFNfQkFTRSIpCispCispCisoIXBhaXIgICJnc21lbSIKKyghdHlwZSBzdHJ1Y3QgMzE5IG5pbCAgZ2NfdXNlZCAiZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHMiCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjY5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAibWVtYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzE4KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjYyKQorbmlsICkKKyghcGFpciAgIm9wIgorKCF0eXBlIGFycmF5IDMyMCBuaWwgIGdjX3VzZWQgIjEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjY4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiJWgubWVtYmFzZS5vcGJhc2UuZ3NiYXNlLm51bV9vcHMiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDY5NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19XSVRIX01FTV9PUFMiKQorKQorKQorKCFwYWlyICAiZ2ltcGxlX2NhbGwiCisoIXR5cGUgc3RydWN0IDMyMSBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfY2FsbCIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyOTQpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJtZW1iYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTgpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyNzcpCituaWwgKQorKCFwYWlyICAiY2FsbF91c2VkIgorKCF0eXBlIHN0cnVjdCAzMjIgbmlsICBnY191c2VkICJwdF9zb2x1dGlvbiIKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLWFsaWFzLmgiIDU3KQorCisoIWZpZWxkcyA3IAorKCFwYWlyICAiYW55dGhpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLWFsaWFzLmgiIDMyKQorbmlsICkKKyghcGFpciAgIm5vbmxvY2FsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1hbGlhcy5oIiAzNikKK25pbCApCisoIXBhaXIgICJlc2NhcGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1hbGlhcy5oIiA0MCkKK25pbCApCisoIXBhaXIgICJpcGFfZXNjYXBlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtYWxpYXMuaCIgNDQpCituaWwgKQorKCFwYWlyICAibnVsbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtYWxpYXMuaCIgNDgpCituaWwgKQorKCFwYWlyICAidmFyc19jb250YWluc19nbG9iYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLWFsaWFzLmgiIDUyKQorbmlsICkKKyghcGFpciAgInZhcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMCkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtYWxpYXMuaCIgNTYpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDI4MCkKK25pbCApCisoIXBhaXIgICJjYWxsX2Nsb2JiZXJlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzIyKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjgxKQorbmlsICkKKyghcGFpciAgInUiCisoIXR5cGUgdW5pb24gMzIzIG5pbCAgZ2NfdXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL2dpbXBsZS5oOjI4NCIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyODcpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJmbnR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAyODUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIwIikKKykKKykKKyghcGFpciAgImludGVybmFsX2ZuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMjg2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiR0ZfQ0FMTF9JTlRFUk5BTCIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIiUxLm1lbWJhc2Uub3BiYXNlLmdzYmFzZS5zdWJjb2RlICYgR0ZfQ0FMTF9JTlRFUk5BTCIpCispCis1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDI4NykKK25pbCApCisoIXBhaXIgICJvcCIKKyghdHlwZSBhcnJheSAzMjQgbmlsICBnY191c2VkICIxIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDI5MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgIiVoLm1lbWJhc2Uub3BiYXNlLmdzYmFzZS5udW1fb3BzIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2OTYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfQ0FMTCIpCispCispCisoIXBhaXIgICJvbXAiCisoIXR5cGUgc3RydWN0IDMyNSBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfb21wIgorKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDMwNSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImdzYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEyKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzAxKQorbmlsICkKKyghcGFpciAgImJvZHkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDMwNCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjk3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiR1NTX09NUCIpCispCispCisoIXBhaXIgICJnaW1wbGVfYmluZCIKKyghdHlwZSBzdHJ1Y3QgMzI2IG5pbCAgZ2NfdXNlZCAiZ2ltcGxlX3N0YXRlbWVudF9iaW5kIgorKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDMyOCkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgImdzYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEyKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzEyKQorbmlsICkKKyghcGFpciAgInZhcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzMTYpCituaWwgKQorKCFwYWlyICAiYmxvY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzMjQpCituaWwgKQorKCFwYWlyICAiYm9keSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzI3KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2OTgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfQklORCIpCispCispCisoIXBhaXIgICJnaW1wbGVfY2F0Y2giCisoIXR5cGUgc3RydWN0IDMyNyBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfY2F0Y2giCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzQyKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiZ3NiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTIpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzMzUpCituaWwgKQorKCFwYWlyICAidHlwZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzMzgpCituaWwgKQorKCFwYWlyICAiaGFuZGxlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzQxKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2OTkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfQ0FUQ0giKQorKQorKQorKCFwYWlyICAiZ2ltcGxlX2VoX2ZpbHRlciIKKyghdHlwZSBzdHJ1Y3QgMzI4IG5pbCAgZ2NfdXNlZCAiZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIiCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzU4KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiZ3NiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTIpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzNDkpCituaWwgKQorKCFwYWlyICAidHlwZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzNTMpCituaWwgKQorKCFwYWlyICAiZmFpbHVyZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzU3KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA3MDApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfRUhfRklMVEVSIikKKykKKykKKyghcGFpciAgImdpbXBsZV9laF9tbnQiCisoIXR5cGUgc3RydWN0IDMyOSBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfZWhfbW50IgorKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDM3OCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImdzYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEyKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzc0KQorbmlsICkKKyghcGFpciAgImZuZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDM3NykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNzAxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiR1NTX0VIX01OVCIpCispCispCisoIXBhaXIgICJnaW1wbGVfZWhfZWxzZSIKKyghdHlwZSBzdHJ1Y3QgMzMwIG5pbCAgZ2NfdXNlZCAiZ2ltcGxlX3N0YXRlbWVudF9laF9lbHNlIgorKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDM2OCkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImdzYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEyKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzY0KQorbmlsICkKKyghcGFpciAgIm5fYm9keSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzY3KQorbmlsICkKKyghcGFpciAgImVfYm9keSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzY3KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA3MDIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfRUhfRUxTRSIpCispCispCisoIXBhaXIgICJnaW1wbGVfcGhpIgorKCF0eXBlIHN0cnVjdCAzMzEgbmlsICBnY191c2VkICJnaW1wbGVfc3RhdGVtZW50X3BoaSIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzOTUpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJnc2Jhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMikKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDM4NCkKK25pbCApCisoIXBhaXIgICJjYXBhY2l0eSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDM4NykKK25pbCApCisoIXBhaXIgICJuYXJncyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDM4OCkKK25pbCApCisoIXBhaXIgICJyZXN1bHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzOTEpCituaWwgKQorKCFwYWlyICAiYXJncyIKKyghdHlwZSBhcnJheSAzMzIgbmlsICBnY191c2VkICIxIiAKKyghdHlwZSBzdHJ1Y3QgMzMzIG5pbCAgZ2NfdXNlZCAicGhpX2FyZ19kIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxOTg5KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiaW1tX3VzZSIKKyghdHlwZSBzdHJ1Y3QgMzM0IAorKCF0eXBlIHBvaW50ZXIgMzM1IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMzNCkKKykKKyBnY191c2VkICJzc2FfdXNlX29wZXJhbmRfZCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTk2MikKKworKCFmaWVsZHMgNCAKKyghcGFpciAgInByZXYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMzNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxOTUzKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJuZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMzUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTk1NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAibG9jIgorKCF0eXBlIHVuaW9uIDMzNiBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL3RyZWUuaDoxOTYwIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxOTYwKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAic3RtdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE5NjApCituaWwgKQorKCFwYWlyICAic3NhX25hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTk2MCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE5NjApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInVzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNikKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxOTYxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE5ODYpCituaWwgKQorKCFwYWlyICAiZGVmIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE5ODcpCituaWwgKQorKCFwYWlyICAibG9jdXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTk4OCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzk0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiJWgubmFyZ3MiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDcwMykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19QSEkiKQorKQorKQorKCFwYWlyICAiZ2ltcGxlX2VoX2N0cmwiCisoIXR5cGUgc3RydWN0IDMzNyBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfZWhfY3RybCIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA0MDgpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJnc2Jhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMikKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQwMykKK25pbCApCisoIXBhaXIgICJyZWdpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA0MDcpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDcwNCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19FSF9DVFJMIikKKykKKykKKyghcGFpciAgImdpbXBsZV90cnkiCisoIXR5cGUgc3RydWN0IDMzOCBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfdHJ5IgorKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQyNCkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImdzYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEyKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNDE1KQorbmlsICkKKyghcGFpciAgImV2YWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQxOSkKK25pbCApCisoIXBhaXIgICJjbGVhbnVwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA0MjMpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDcwNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19UUlkiKQorKQorKQorKCFwYWlyICAiZ2ltcGxlX3djZSIKKyghdHlwZSBzdHJ1Y3QgMzM5IG5pbCAgZ2NfdXNlZCAiZ2ltcGxlX3N0YXRlbWVudF93Y2UiCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNDU0KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZ3NiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTIpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA0NDQpCituaWwgKQorKCFwYWlyICAiY2xlYW51cCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNDUzKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA3MDYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfV0NFIikKKykKKykKKyghcGFpciAgImdpbXBsZV9hc20iCisoIXR5cGUgc3RydWN0IDM0MCBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfYXNtIgorKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQ4MCkKKworKCFmaWVsZHMgNyAKKyghcGFpciAgIm1lbWJhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxOCkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQ2MikKK25pbCApCisoIXBhaXIgICJzdHJpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNDY2KQorbmlsICkKKyghcGFpciAgIm5pIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQ3MCkKK25pbCApCisoIXBhaXIgICJubyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA0NzEpCituaWwgKQorKCFwYWlyICAibmMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNDcyKQorbmlsICkKKyghcGFpciAgIm5sIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQ3MykKK25pbCApCisoIXBhaXIgICJvcCIKKyghdHlwZSBhcnJheSAzNDEgbmlsICBnY191c2VkICIxIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQ3OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgIiVoLm1lbWJhc2Uub3BiYXNlLmdzYmFzZS5udW1fb3BzIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA3MDcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfQVNNIikKKykKKykKKyghcGFpciAgImdpbXBsZV9vbXBfY3JpdGljYWwiCisoIXR5cGUgc3RydWN0IDM0MiBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfb21wX2NyaXRpY2FsIgorKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDQ5MSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIm9tcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzI1KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNDg2KQorbmlsICkKKyghcGFpciAgIm5hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA0OTApCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDcwOCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19PTVBfQ1JJVElDQUwiKQorKQorKQorKCFwYWlyICAiZ2ltcGxlX29tcF9mb3IiCisoIXR5cGUgc3RydWN0IDM0MyBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfb21wX2ZvciIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1MzApCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJvbXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMyNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDUxNSkKK25pbCApCisoIXBhaXIgICJjbGF1c2VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNTE4KQorbmlsICkKKyghcGFpciAgImNvbGxhcHNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNTIyKQorbmlsICkKKyghcGFpciAgIml0ZXIiCisoIXR5cGUgcG9pbnRlciAzNDQgbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgMzQ1IAorKCF0eXBlIGFscmVhZHlfc2VlbiAzNDQpCisgZ2NfdXNlZCAiZ2ltcGxlX29tcF9mb3JfaXRlciIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1MDkpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJjb25kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNDk2KQorbmlsICkKKyghcGFpciAgImluZGV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNDk5KQorbmlsICkKKyghcGFpciAgImluaXRpYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1MDIpCituaWwgKQorKCFwYWlyICAiZmluYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1MDUpCituaWwgKQorKCFwYWlyICAiaW5jciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDUwOCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNTI1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiJWguY29sbGFwc2UiKQorKQorKQorKCFwYWlyICAicHJlX2JvZHkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDUyOSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiR1NTX09NUF9GT1IiKQorKQorKQorKCFwYWlyICAiZ2ltcGxlX29tcF9wYXJhbGxlbCIKKyghdHlwZSBzdHJ1Y3QgMzQ2IG5pbCAgZ2NfdXNlZCAiZ2ltcGxlX3N0YXRlbWVudF9vbXBfcGFyYWxsZWwiCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNTUwKQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAib21wIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMjUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1MzcpCituaWwgKQorKCFwYWlyICAiY2xhdXNlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDU0MSkKK25pbCApCisoIXBhaXIgICJjaGlsZF9mbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDU0NSkKK25pbCApCisoIXBhaXIgICJkYXRhX2FyZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDU0OSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNzEwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiR1NTX09NUF9QQVJBTExFTCIpCispCispCisoIXBhaXIgICJnaW1wbGVfb21wX3Rhc2siCisoIXR5cGUgc3RydWN0IDM0NyBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2siCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNTY3KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAicGFyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNDYpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1NTcpCituaWwgKQorKCFwYWlyICAiY29weV9mbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDU2MSkKK25pbCApCisoIXBhaXIgICJhcmdfc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDU2NSkKK25pbCApCisoIXBhaXIgICJhcmdfYWxpZ24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1NjYpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDcxMSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19PTVBfVEFTSyIpCispCispCisoIXBhaXIgICJnaW1wbGVfb21wX3NlY3Rpb25zIgorKCF0eXBlIHN0cnVjdCAzNDggbmlsICBnY191c2VkICJnaW1wbGVfc3RhdGVtZW50X29tcF9zZWN0aW9ucyIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1ODcpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJvbXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMyNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDU3OCkKK25pbCApCisoIXBhaXIgICJjbGF1c2VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNTgxKQorbmlsICkKKyghcGFpciAgImNvbnRyb2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA1ODYpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDcxMikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkdTU19PTVBfU0VDVElPTlMiKQorKQorKQorKCFwYWlyICAiZ2ltcGxlX29tcF9zaW5nbGUiCisoIXR5cGUgc3RydWN0IDM0OSBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZSIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2MTMpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJvbXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMyNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDYwOSkKK25pbCApCisoIXBhaXIgICJjbGF1c2VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjEyKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA3MTMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfT01QX1NJTkdMRSIpCispCispCisoIXBhaXIgICJnaW1wbGVfb21wX2NvbnRpbnVlIgorKCF0eXBlIHN0cnVjdCAzNTAgbmlsICBnY191c2VkICJnaW1wbGVfc3RhdGVtZW50X29tcF9jb250aW51ZSIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2MDMpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJnc2Jhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMikKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDU5NikKK25pbCApCisoIXBhaXIgICJjb250cm9sX2RlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDU5OSkKK25pbCApCisoIXBhaXIgICJjb250cm9sX3VzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDYwMikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNzE0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiR1NTX09NUF9DT05USU5VRSIpCispCispCisoIXBhaXIgICJnaW1wbGVfb21wX2F0b21pY19sb2FkIgorKCF0eXBlIHN0cnVjdCAzNTEgbmlsICBnY191c2VkICJnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfbG9hZCIKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2MjYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJnc2Jhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMikKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDYyMikKK25pbCApCisoIXBhaXIgICJyaHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2MjUpCituaWwgKQorKCFwYWlyICAibGhzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjI1KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA3MTUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfT01QX0FUT01JQ19MT0FEIikKKykKKykKKyghcGFpciAgImdpbXBsZV9vbXBfYXRvbWljX3N0b3JlIgorKCF0eXBlIHN0cnVjdCAzNTIgbmlsICBnY191c2VkICJnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfc3RvcmUiCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjM3KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZ3NiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTIpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2MzMpCituaWwgKQorKCFwYWlyICAidmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjM2KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA3MTYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfT01QX0FUT01JQ19TVE9SRSIpCispCispCisoIXBhaXIgICJnaW1wbGVfdHJhbnNhY3Rpb24iCisoIXR5cGUgc3RydWN0IDM1MyBuaWwgIGdjX3VzZWQgImdpbXBsZV9zdGF0ZW1lbnRfdHJhbnNhY3Rpb24iCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjc3KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiZ3NiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTgpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA2NzApCituaWwgKQorKCFwYWlyICAiYm9keSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjczKQorbmlsICkKKyghcGFpciAgImxhYmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNjc2KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA3MTcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJHU1NfVFJBTlNBQ1RJT04iKQorKQorKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdmFyaWFibGVfc2l6ZSBzdHJpbmcgICIiKQorCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIiVoLmdzYmFzZS5uZXh0IikKKworKCFvcHRpb24gZGVzYyBzdHJpbmcgICJnaW1wbGVfc3RhdGVtZW50X3N0cnVjdHVyZSAoJiVoKSIpCispCis1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiA1NykKK25pbCApCisoIXBhaXIgICJib3VuZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiA2NikKK25pbCApCisoIXBhaXIgICJpc19leGl0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDcxKQorbmlsICkKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwOCkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiA3NCkKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIiVoLm5leHQiKQorKQorNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgMTcxKQorbmlsICkKKyghcGFpciAgImV4aXRzIgorKCF0eXBlIHBvaW50ZXIgMzU0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAzNTUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM1NCkKKyBnY19wb2ludGVkX3RvICJsb29wX2V4aXQiCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDg5KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzAxKQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDgxKQorbmlsICkKKyghcGFpciAgInByZXYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM1NCkKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiA4NCkKK25pbCApCisoIXBhaXIgICJuZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNTQpCisKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgODUpCituaWwgKQorKCFwYWlyICAibmV4dF9lIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNTQpCisKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgODgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxNzQpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5uZXh0IikKKykKKzUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAxODgpCituaWwgKQorKCFwYWlyICAiZG9tIgorKCF0eXBlIGFycmF5IDM1NiBuaWwgIGdjX3VudXNlZCAiMiIgCisoIXR5cGUgcG9pbnRlciAzNTcgbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgMzU4IAorKCF0eXBlIGFscmVhZHlfc2VlbiAzNTcpCisgZ2NfdW51c2VkICJldF9ub2RlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKykKKykKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMTkxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJwcmV2X2JiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOTcpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDE5NCkKK25pbCApCisoIXBhaXIgICJuZXh0X2JiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOTcpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDE5NSkKK25pbCApCisoIXBhaXIgICJpbCIKKyghdHlwZSB1bmlvbiAzNTkgbmlsICBnY191c2VkICJiYXNpY19ibG9ja19pbF9kZXBlbmRlbnQiCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyMDMpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJnaW1wbGUiCisoIXR5cGUgc3RydWN0IDM2MCBuaWwgIGdjX3VzZWQgImdpbXBsZV9iYl9pbmZvIgorKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMTUxKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAic2VxIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDE0NykKK25pbCApCisoIXBhaXIgICJwaGlfbm9kZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMTUwKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDE5OCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKQorKCFwYWlyICAieCIKKyghdHlwZSBzdHJ1Y3QgMzYxIG5pbCAgZ2NfdXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL2Jhc2ljLWJsb2NrLmg6MTk5IgorKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMjAyKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiaGVhZF8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMjAwKQorbmlsICkKKyghcGFpciAgInJ0bCIKKyghdHlwZSBwb2ludGVyIDM2MiBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMzYzIAorKCF0eXBlIGFscmVhZHlfc2VlbiAzNjIpCisgZ2NfcG9pbnRlZF90byAicnRsX2JiX2luZm8iCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAxNDMpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJlbmRfIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDEzNykKK25pbCApCisoIXBhaXIgICJoZWFkZXJfIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDE0MSkKK25pbCApCisoIXBhaXIgICJmb290ZXJfIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDE0MikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyMDEpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMjAyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMSIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyMDMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiKCglMS5mbGFncyAmIEJCX1JUTCkgIT0gMCkiKQorKQorKQorKCFwYWlyICAiZmxhZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDIwNikKK25pbCApCisoIXBhaXIgICJpbmRleCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMjA5KQorbmlsICkKKyghcGFpciAgImNvdW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyMTIpCituaWwgKQorKCFwYWlyICAiZnJlcXVlbmN5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyMTUpCituaWwgKQorKCFwYWlyICAiZGlzY3JpbWluYXRvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMjIwKQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX3ByZXYgc3RyaW5nICAiJWgucHJldl9iYiIpCisKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiJWgubmV4dF9iYiIpCispCis1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzJdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIk5PVEUiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMzY0IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9jb2RlX2xhYmVsIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgOCAKKyghcGFpciAgIi5mbGRbN10ucnRfc3RyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzZdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzVdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzRdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbM10ucnRfYmIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NykKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzJdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNPREVfTEFCRUwiKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMzY1IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9iYXJyaWVyIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgOCAKKyghcGFpciAgIi5mbGRbN10ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNl0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNV0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNF0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbM10ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMl0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQkFSUklFUiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAzNjYgbmlsICBnY191c2VkICJydHhfZGVmX2NhbGxfaW5zbiIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDkgCisoIXBhaXIgICIuZmxkWzhdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbN10ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFs2XS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFs1XS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFs0XS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzNdLnJ0X2JiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOTcpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsyXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJDQUxMX0lOU04iKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMzY3IG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9qdW1wX2luc24iCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyA5IAorKCFwYWlyICAiLmZsZFs4XS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzddLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNl0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNV0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFszXS5ydF9iYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjk3KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMl0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiSlVNUF9JTlNOIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDM2OCBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfaW5zbiIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDggCisoIXBhaXIgICIuZmxkWzddLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNl0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNV0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbNF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFszXS5ydF9iYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjk3KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMl0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFsxXS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzBdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiSU5TTiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAzNjkgbmlsICBnY191c2VkICJydHhfZGVmX2RlYnVnX2luc24iCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyA4IAorKCFwYWlyICAiLmZsZFs3XS5ydF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzZdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzVdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzRdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbM10ucnRfYmIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NykKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIuZmxkWzJdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMV0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiLmZsZFswXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkRFQlVHX0lOU04iKQorCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIiIKKyghdHlwZSBzdHJ1Y3QgMzcwIG5pbCAgZ2NfdXNlZCAicnR4X2RlZl9hZGRyZXNzIgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgIi5mbGRbMF0ucnRfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJBRERSRVNTIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDM3MSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfc2VxdWVuY2UiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9ydHZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjYxKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJTRVFVRU5DRSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAzNzIgbmlsICBnY191c2VkICJydHhfZGVmX2luc25fbGlzdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIklOU05fTElTVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAzNzMgbmlsICBnY191c2VkICJydHhfZGVmX2V4cHJfbGlzdCIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICIuZmxkWzFdLnJ0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIi5mbGRbMF0ucnRfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkVYUFJfTElTVCIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiIgorKCF0eXBlIHN0cnVjdCAzNzQgbmlsICBnY191c2VkICJydHhfZGVmX2RlYnVnX2V4cHIiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF90cmVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMjgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkb3Qgc3RyaW5nICAiIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEzMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJERUJVR19FWFBSIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDM3NSBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfdmFsdWUiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQ2KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiLmZsZFswXS5ydF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDEyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTMwOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlZBTFVFIikKKworKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICIiCisoIXR5cGUgc3RydWN0IDM3NiBuaWwgIGdjX3VzZWQgInJ0eF9kZWZfVW5Lbm93biIKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDYpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICIuZmxkWzBdLnJ0X2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgMTI4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVU5LTk9XTiIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCis1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJHRVRfQ09ERSAoJiUwKSIpCisKKyghb3B0aW9uIHNwZWNpYWwgc3RyaW5nICAicnR4X2RlZiIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCisKKyghb3B0aW9uIGNoYWluX3ByZXYgc3RyaW5nICAiUlRYX1BSRVYgKCYlaCkiKQorCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIlJUWF9ORVhUICgmJWgpIikKKykKKzUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI5MzQpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjQ3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfREVDTF9XUlRMIikKKykKKykKKyghcGFpciAgImRlY2xfbm9uX2NvbW1vbiIKKyghdHlwZSBzdHJ1Y3QgMzc3IG5pbCAgZ2NfdXNlZCAidHJlZV9kZWNsX25vbl9jb21tb24iCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMzMDkpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgc3RydWN0IDM3OCBuaWwgIGdjX3VzZWQgInRyZWVfZGVjbF93aXRoX3ZpcyIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzIyMikKKworKCFmaWVsZHMgMTkgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMTkzKQorbmlsICkKKyghcGFpciAgImFzc2VtYmxlcl9uYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMxOTQpCituaWwgKQorKCFwYWlyICAic2VjdGlvbl9uYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMxOTUpCituaWwgKQorKCFwYWlyICAiY29tZGF0X2dyb3VwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMxOTYpCituaWwgKQorKCFwYWlyICAiZGVmZXJfb3V0cHV0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMxOTkpCituaWwgKQorKCFwYWlyICAiaGFyZF9yZWdpc3RlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMjAwKQorbmlsICkKKyghcGFpciAgImNvbW1vbl9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMDEpCituaWwgKQorKCFwYWlyICAiaW5fdGV4dF9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMDIpCituaWwgKQorKCFwYWlyICAiaW5fY29uc3RhbnRfcG9vbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMjAzKQorbmlsICkKKyghcGFpciAgImRsbGltcG9ydF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMDQpCituaWwgKQorKCFwYWlyICAid2Vha19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMDYpCituaWwgKQorKCFwYWlyICAiaW1wbGljaXRfc2VjdGlvbl9uYW1lX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzIwOCkKK25pbCApCisoIXBhaXIgICJzZWVuX2luX2JpbmRfZXhwciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMjEwKQorbmlsICkKKyghcGFpciAgImNvbWRhdF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMTEpCituaWwgKQorKCFwYWlyICAidmlzaWJpbGl0eSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMjEyKQorbmlsICkKKyghcGFpciAgInZpc2liaWxpdHlfc3BlY2lmaWVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMTMpCituaWwgKQorKCFwYWlyICAidGxzX21vZGVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMTUpCituaWwgKQorKCFwYWlyICAiaW5pdF9wcmlvcml0eV9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMTgpCituaWwgKQorKCFwYWlyICAic2hhZG93ZWRfZm9yX3Zhcl9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMjApCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMzAwKQorbmlsICkKKyghcGFpciAgInNhdmVkX3RyZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzMwMikKK25pbCApCisoIXBhaXIgICJhcmd1bWVudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzMwNCkKK25pbCApCisoIXBhaXIgICJyZXN1bHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzMwNikKK25pbCApCisoIXBhaXIgICJ2aW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzMwOCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NDgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19ERUNMX05PTl9DT01NT04iKQorKQorKQorKCFwYWlyICAicGFybV9kZWNsIgorKCF0eXBlIHN0cnVjdCAzNzkgbmlsICBnY191c2VkICJ0cmVlX3Bhcm1fZGVjbCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzA1NykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMwNTUpCituaWwgKQorKCFwYWlyICAiaW5jb21pbmdfcnRsIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzA1NikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19QQVJNX0RFQ0wiKQorKQorKQorKCFwYWlyICAiZGVjbF93aXRoX3ZpcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzc4KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NTApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19ERUNMX1dJVEhfVklTIikKKykKKykKKyghcGFpciAgInZhcl9kZWNsIgorKCF0eXBlIHN0cnVjdCAzODAgbmlsICBnY191c2VkICJ0cmVlX3Zhcl9kZWNsIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMjc5KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNzgpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzI3OCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NTEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19WQVJfREVDTCIpCispCispCisoIXBhaXIgICJmaWVsZF9kZWNsIgorKCF0eXBlIHN0cnVjdCAzODEgbmlsICBnY191c2VkICJ0cmVlX2ZpZWxkX2RlY2wiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMwMTMpCisKKyghZmllbGRzIDYgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM4KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMwMDYpCituaWwgKQorKCFwYWlyICAib2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMwMDgpCituaWwgKQorKCFwYWlyICAiYml0X2ZpZWxkX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzAwOSkKK25pbCApCisoIXBhaXIgICJxdWFsaWZpZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzAxMCkKK25pbCApCisoIXBhaXIgICJiaXRfb2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMwMTEpCituaWwgKQorKCFwYWlyICAiZmNvbnRleHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzAxMikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NTIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19GSUVMRF9ERUNMIikKKykKKykKKyghcGFpciAgImxhYmVsX2RlY2wiCisoIXR5cGUgc3RydWN0IDM4MiBuaWwgIGdjX3VzZWQgInRyZWVfbGFiZWxfZGVjbCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzAzNSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMwMzIpCituaWwgKQorKCFwYWlyICAibGFiZWxfZGVjbF91aWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzAzMykKK25pbCApCisoIXBhaXIgICJlaF9sYW5kaW5nX3BhZF9uciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMDM0KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY1MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0xBQkVMX0RFQ0wiKQorKQorKQorKCFwYWlyICAicmVzdWx0X2RlY2wiCisoIXR5cGUgc3RydWN0IDM4MyBuaWwgIGdjX3VzZWQgInRyZWVfcmVzdWx0X2RlY2wiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMwMzkpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzMDM4KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY1NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX1JFU1VMVF9ERUNMIikKKykKKykKKyghcGFpciAgImNvbnN0X2RlY2wiCisoIXR5cGUgc3RydWN0IDM4NCBuaWwgIGdjX3VzZWQgInRyZWVfY29uc3RfZGVjbCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzA0MykKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzgpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzA0MikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NTUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19DT05TVF9ERUNMIikKKykKKykKKyghcGFpciAgInR5cGVfZGVjbCIKKyghdHlwZSBzdHJ1Y3QgMzg1IG5pbCAgZ2NfdXNlZCAidHJlZV90eXBlX2RlY2wiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM1NTQpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM3NykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTUyKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY1NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX1RZUEVfREVDTCIpCispCispCisoIXBhaXIgICJmdW5jdGlvbl9kZWNsIgorKCF0eXBlIHN0cnVjdCAzODYgbmlsICBnY191c2VkICJ0cmVlX2Z1bmN0aW9uX2RlY2wiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM1MTcpCisKKyghZmllbGRzIDI2IAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNzcpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzQ3NykKK25pbCApCisoIXBhaXIgICJmIgorKCF0eXBlIHBvaW50ZXIgMzg3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAzODggCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM4NykKKyBnY19wb2ludGVkX3RvICJmdW5jdGlvbiIKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDY0NCkKKworKCFmaWVsZHMgMzcgCisoIXBhaXIgICJlaCIKKyghdHlwZSBwb2ludGVyIDM4OSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMzkwIAorKCF0eXBlIGFscmVhZHlfc2VlbiAzODkpCisgZ2NfcG9pbnRlZF90byAiZWhfc3RhdHVzIgorKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIyMSkKKworKCFmaWVsZHMgNiAKKyghcGFpciAgInJlZ2lvbl90cmVlIgorKCF0eXBlIHBvaW50ZXIgMzkxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAzOTIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5MSkKKyBnY19wb2ludGVkX3RvICJlaF9yZWdpb25fZCIKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxODMpCisKKyghZmllbGRzIDEwIAorKCFwYWlyICAib3V0ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5MSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDEyNCkKK25pbCApCisoIXBhaXIgICJpbm5lciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzkxKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTI3KQorbmlsICkKKyghcGFpciAgIm5leHRfcGVlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzkxKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTI4KQorbmlsICkKKyghcGFpciAgImluZGV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTMxKQorbmlsICkKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxMzQpCituaWwgKQorKCFwYWlyICAidSIKKyghdHlwZSB1bmlvbiAzOTMgbmlsICBnY191c2VkICJlaF9yZWdpb25fdSIKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxNzApCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJlaF90cnkiCisoIXR5cGUgc3RydWN0IDM5NCBuaWwgIGdjX3VzZWQgImVoX3JlZ2lvbl91X3RyeSIKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxNDIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJmaXJzdF9jYXRjaCIKKyghdHlwZSBwb2ludGVyIDM5NSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMzk2IAorKCF0eXBlIGFscmVhZHlfc2VlbiAzOTUpCisgZ2NfcG9pbnRlZF90byAiZWhfY2F0Y2hfZCIKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxMTcpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJuZXh0X2NhdGNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzOTUpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxMDEpCituaWwgKQorKCFwYWlyICAicHJldl9jYXRjaCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzk1KQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTAyKQorbmlsICkKKyghcGFpciAgInR5cGVfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDEwNikKK25pbCApCisoIXBhaXIgICJmaWx0ZXJfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDExMSkKK25pbCApCisoIXBhaXIgICJsYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDExNikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTQwKQorbmlsICkKKyghcGFpciAgImxhc3RfY2F0Y2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5NSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE0MSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTQyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiRVJUX1RSWSIpCispCispCisoIXBhaXIgICJhbGxvd2VkIgorKCF0eXBlIHN0cnVjdCAzOTcgbmlsICBnY191c2VkICJlaF9yZWdpb25fdV9hbGxvd2VkIgorKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE1NikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInR5cGVfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE0NikKK25pbCApCisoIXBhaXIgICJsYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE1MCkKK25pbCApCisoIXBhaXIgICJmaWx0ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxNTUpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE1NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkVSVF9BTExPV0VEX0VYQ0VQVElPTlMiKQorKQorKQorKCFwYWlyICAibXVzdF9ub3RfdGhyb3ciCisoIXR5cGUgc3RydWN0IDM5OCBuaWwgIGdjX3VzZWQgImVoX3JlZ2lvbl91X211c3Rfbm90X3Rocm93IgorKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE2OSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImZhaWx1cmVfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE2NikKK25pbCApCisoIXBhaXIgICJmYWlsdXJlX2xvYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE2OCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTY5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiRVJUX01VU1RfTk9UX1RIUk9XIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxNzApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiJTAudHlwZSIpCispCispCisoIXBhaXIgICJsYW5kaW5nX3BhZHMiCisoIXR5cGUgcG9pbnRlciAzOTkgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDQwMCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzk5KQorIGdjX3BvaW50ZWRfdG8gImVoX2xhbmRpbmdfcGFkX2QiCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgOTQpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJuZXh0X2xwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzOTkpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiA3NSkKK25pbCApCisoIXBhaXIgICJyZWdpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5MSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDc4KQorbmlsICkKKyghcGFpciAgInBvc3RfbGFuZGluZ19wYWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiA4MykKK25pbCApCisoIXBhaXIgICJsYW5kaW5nX3BhZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgOTApCituaWwgKQorKCFwYWlyICAiaW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiA5MykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTczKQorbmlsICkKKyghcGFpciAgImV4Y19wdHJfcmVnIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxNzgpCituaWwgKQorKCFwYWlyICAiZmlsdGVyX3JlZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTc4KQorbmlsICkKKyghcGFpciAgInVzZV9jeGFfZW5kX2NsZWFudXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxODIpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE5NykKK25pbCApCisoIXBhaXIgICJyZWdpb25fYXJyYXkiCisoIXR5cGUgcG9pbnRlciA0MDEgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNDAyIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MDEpCisgZ2NfcG9pbnRlZF90byAidmVjPGVoX3JlZ2lvbix2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMjAwKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAyMDApCituaWwgKQorKCFwYWlyICAiZWhfcmVnaW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzOTEpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAyMDApCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIwMCkKK25pbCApCisoIXBhaXIgICJscF9hcnJheSIKKyghdHlwZSBwb2ludGVyIDQwMyBuaWwgIGdjX3VzZWQKKyghdHlwZSB1c2VyX3N0cnVjdCA0MDQgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQwMykKKyBnY19wb2ludGVkX3RvICJ2ZWM8ZWhfbGFuZGluZ19wYWQsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIwMykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMjAzKQorbmlsICkKKyghcGFpciAgImVoX2xhbmRpbmdfcGFkIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzOTkpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAyMDMpCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIwMykKK25pbCApCisoIXBhaXIgICJ0aHJvd19zdG10X3RhYmxlIgorKCF0eXBlIHBvaW50ZXIgNDA1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHBhcmFtX3N0cnVjdCA0MDYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQwNSkKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgcG9pbnRlciA0MDcgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDQwOCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDA3KQorIGdjX3BvaW50ZWRfdG8gInRocm93X3N0bXRfbm9kZSIKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAyOTIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJzdG10IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAyOTApCituaWwgKQorKCFwYWlyICAibHBfbnIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAyOTEpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAyMDcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQwOCkKKykKKykKKykKKyghcGFpciAgInR0eXBlX2RhdGEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMjExKQorbmlsICkKKyghcGFpciAgImVoc3BlY19kYXRhIgorKCF0eXBlIHVuaW9uIDQwOSBuaWwgIGdjX3VzZWQgImVoX3N0YXR1c191IgorKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIyMCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImFybV9lYWJpIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIxOCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjEiKQorKQorKQorKCFwYWlyICAib3RoZXIiCisoIXR5cGUgcG9pbnRlciA0MTAgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNDExIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MTApCisgZ2NfcG9pbnRlZF90byAidmVjPHVjaGFyLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE1MikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxNTIpCituaWwgKQorKCFwYWlyICAidWNoYXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxNTIpCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIxOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIyMCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJ0YXJnZXRtLmFybV9lYWJpX3Vud2luZGVyIikKKykKKykpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDUwOSkKK25pbCApCisoIXBhaXIgICJjZmciCisoIXR5cGUgcG9pbnRlciA0MTIgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDQxMyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDEyKQorIGdjX3BvaW50ZWRfdG8gImNvbnRyb2xfZmxvd19ncmFwaCIKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDMyMykKKworKCFmaWVsZHMgMTIgCisoIXBhaXIgICJ4X2VudHJ5X2Jsb2NrX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjk3KQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyOTApCituaWwgKQorKCFwYWlyICAieF9leGl0X2Jsb2NrX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjk3KQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyOTEpCituaWwgKQorKCFwYWlyICAieF9iYXNpY19ibG9ja19pbmZvIgorKCF0eXBlIHBvaW50ZXIgNDE0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDQxNSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDE0KQorIGdjX3BvaW50ZWRfdG8gInZlYzxiYXNpY19ibG9jayx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyOTQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMjk0KQorbmlsICkKKyghcGFpciAgImJhc2ljX2Jsb2NrIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOTcpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDI5NCkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAyOTQpCituaWwgKQorKCFwYWlyICAieF9uX2Jhc2ljX2Jsb2NrcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMjk3KQorbmlsICkKKyghcGFpciAgInhfbl9lZGdlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMzAwKQorbmlsICkKKyghcGFpciAgInhfbGFzdF9iYXNpY19ibG9jayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMzAzKQorbmlsICkKKyghcGFpciAgImxhc3RfbGFiZWxfdWlkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAzMDYpCituaWwgKQorKCFwYWlyICAieF9sYWJlbF90b19ibG9ja19tYXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQxNCkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMzEwKQorbmlsICkKKyghcGFpciAgInhfcHJvZmlsZV9zdGF0dXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDMxMikKK25pbCApCisoIXBhaXIgICJ4X2RvbV9jb21wdXRlZCIKKyghdHlwZSBhcnJheSA0MTYgbmlsICBnY191c2VkICIyIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKykKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMzE1KQorbmlsICkKKyghcGFpciAgInhfbl9iYnNfaW5fZG9tX3RyZWUiCisoIXR5cGUgYXJyYXkgNDE3IG5pbCAgZ2NfdXNlZCAiMiIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCispCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDMxOCkKK25pbCApCisoIXBhaXIgICJtYXhfanVtcHRhYmxlX2VudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDMyMikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA1MTIpCituaWwgKQorKCFwYWlyICAiZ2ltcGxlX2JvZHkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTE1KQorbmlsICkKKyghcGFpciAgImdpbXBsZV9kZiIKKyghdHlwZSBwb2ludGVyIDQxOCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNDE5IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MTgpCisgZ2NfcG9pbnRlZF90byAiZ2ltcGxlX2RmIgorKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDkzKQorCisoIWZpZWxkcyAxMyAKKyghcGFpciAgIm1vZGlmaWVkX25vcmV0dXJuX2NhbGxzIgorKCF0eXBlIHBvaW50ZXIgNDIwIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDQyMSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDIwKQorIGdjX3BvaW50ZWRfdG8gInZlYzxnaW1wbGUsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDUyKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA1MikKK25pbCApCisoIXBhaXIgICJnaW1wbGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDUyKQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA1MikKK25pbCApCisoIXBhaXIgICJzc2FfbmFtZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNTUpCituaWwgKQorKCFwYWlyICAidm9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNTgpCituaWwgKQorKCFwYWlyICAiZXNjYXBlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzIyKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNjEpCituaWwgKQorKCFwYWlyICAiZGVjbHNfdG9fcG9pbnRlcnMiCisoIXR5cGUgcG9pbnRlciA0MjIgbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgNDIzIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MjIpCisgZ2NfdW51c2VkICJwb2ludGVyX21hcF90Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDY1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJmcmVlX3NzYW5hbWVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDY4KQorbmlsICkKKyghcGFpciAgImRlZmF1bHRfZGVmcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA3NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKykKKykKKykKKyghcGFpciAgInNzYV9yZW5hbWluZ19uZWVkZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA3NykKK25pbCApCisoIXBhaXIgICJyZW5hbWVfdm9wcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDgwKQorbmlsICkKKyghcGFpciAgImluX3NzYV9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgODMpCituaWwgKQorKCFwYWlyICAiaXBhX3B0YSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDg2KQorbmlsICkKKyghcGFpciAgInNzYV9vcGVyYW5kcyIKKyghdHlwZSBzdHJ1Y3QgNDI0IG5pbCAgZ2NfdXNlZCAic3NhX29wZXJhbmRzIgorKCFzcmNmaWxlbG9jICAidHJlZS1zc2Etb3BlcmFuZHMuaCIgNjMpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJvcGVyYW5kX21lbW9yeSIKKyghdHlwZSBwb2ludGVyIDQyNSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNDI2IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MjUpCisgZ2NfcG9pbnRlZF90byAic3NhX29wZXJhbmRfbWVtb3J5X2QiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1vcGVyYW5kcy5oIiA1MSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQyNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2Etb3BlcmFuZHMuaCIgNDkpCituaWwgKQorKCFwYWlyICAibWVtIgorKCF0eXBlIGFycmF5IDQyNyBuaWwgIGdjX3VzZWQgIjEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKykKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2Etb3BlcmFuZHMuaCIgNTApCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdmFyaWFibGVfc2l6ZSBzdHJpbmcgICIiKQorCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIiVoLm5leHQiKQorKQorNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLW9wZXJhbmRzLmgiIDU1KQorbmlsICkKKyghcGFpciAgIm9wZXJhbmRfbWVtb3J5X2luZGV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1vcGVyYW5kcy5oIiA1NikKK25pbCApCisoIXBhaXIgICJzc2Ffb3BlcmFuZF9tZW1fc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2Etb3BlcmFuZHMuaCIgNTgpCituaWwgKQorKCFwYWlyICAib3BzX2FjdGl2ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2Etb3BlcmFuZHMuaCIgNjApCituaWwgKQorKCFwYWlyICAiZnJlZV91c2VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLW9wZXJhbmRzLmgiIDYyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgODgpCituaWwgKQorKCFwYWlyICAidG1fcmVzdGFydCIKKyghdHlwZSBwb2ludGVyIDQyOCBuaWwgIGdjX3VzZWQKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgNDI5IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MjgpCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIHBvaW50ZXIgNDMwIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA0MzEgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQzMCkKKyBnY19wb2ludGVkX3RvICJ0bV9yZXN0YXJ0X25vZGUiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNDEpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJzdG10IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiAzOSkKK25pbCApCisoIXBhaXIgICJsYWJlbF9vcl9saXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNDApCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA5MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDMxKQorKQorKQorKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTE4KQorbmlsICkKKyghcGFpciAgInhfY3VycmVudF9sb29wcyIKKyghdHlwZSBwb2ludGVyIDQzMiBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNDMzIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MzIpCisgZ2NfcG9pbnRlZF90byAibG9vcHMiCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDIwOSkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgInN0YXRlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDE5NykKK25pbCApCisoIXBhaXIgICJsYXJyYXkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwNikKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAyMDApCituaWwgKQorKCFwYWlyICAiZXhpdHMiCisoIXR5cGUgcG9pbnRlciA0MzQgbmlsICBnY191c2VkCisoIXR5cGUgcGFyYW1fc3RydWN0IDQzNSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDM0KQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzU0KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAyMDUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM1NSkKKykKKykKKykKKyghcGFpciAgInRyZWVfcm9vdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzAzKQorCisoIXNyY2ZpbGVsb2MgICJjZmdsb29wLmgiIDIwOCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA1MjEpCituaWwgKQorKCFwYWlyICAic3UiCisoIXR5cGUgcG9pbnRlciA0MzYgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDQzNyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDM2KQorIGdjX3BvaW50ZWRfdG8gInN0YWNrX3VzYWdlIgorKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNDk0KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAic3RhdGljX3N0YWNrX3NpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDQ4MSkKK25pbCApCisoIXBhaXIgICJkeW5hbWljX3N0YWNrX3NpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDQ4NSkKK25pbCApCisoIXBhaXIgICJwdXNoZWRfc3RhY2tfc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNDg5KQorbmlsICkKKyghcGFpciAgImhhc191bmJvdW5kZWRfZHluYW1pY19zdGFja19zaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA0OTMpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTI0KQorbmlsICkKKyghcGFpciAgInZhbHVlX2hpc3RvZ3JhbXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUwKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA1MjcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDUzMikKK25pbCApCisoIXBhaXIgICJzdGF0aWNfY2hhaW5fZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTM2KQorbmlsICkKKyghcGFpciAgIm5vbmxvY2FsX2dvdG9fc2F2ZV9hcmVhIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA1NDEpCituaWwgKQorKCFwYWlyICAibG9jYWxfZGVjbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA1NDQpCituaWwgKQorKCFwYWlyICAibWFjaGluZSIKKyghdHlwZSBwb2ludGVyIDQzOCBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHN0cnVjdCA0MzkgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQzOCkKKyBnY19tYXliZV9wb2ludGVkX3RvICJtYWNoaW5lX2Z1bmN0aW9uIgorKCFzcmNmaWxlbG9jICAiY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oIiA1MjIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJmcmFtZSIKKyghdHlwZSBzdHJ1Y3QgNDQwIG5pbCAgZ2NfdXNlZCAiYWFyY2g2NF9mcmFtZSIKKyghc3JjZmlsZWxvYyAgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuaCIgNTEyKQorCisoIWZpZWxkcyA2IAorKCFwYWlyICAicmVnX29mZnNldCIKKyghdHlwZSBhcnJheSA0NDEgbmlsICBnY191c2VkICJGSVJTVF9QU0VVRE9fUkVHSVNURVIiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorKQorCisoIXNyY2ZpbGVsb2MgICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LmgiIDUwMykKK25pbCApCisoIXBhaXIgICJzYXZlZF9yZWdzX3NpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuaCIgNTA0KQorbmlsICkKKyghcGFpciAgInBhZGRpbmcwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LmgiIDUwNykKK25pbCApCisoIXBhaXIgICJoYXJkZnBfb2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LmgiIDUwOCkKK25pbCApCisoIXBhaXIgICJmcF9scl9vZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuaCIgNTA5KQorbmlsICkKKyghcGFpciAgImxhaWRfb3V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LmgiIDUxMSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LmgiIDUxNikKK25pbCApCisoIXBhaXIgICJzYXZlZF92YXJhcmdzX3NpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuaCIgNTIwKQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDU0OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gbWF5YmVfdW5kZWYgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImxhbmd1YWdlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NCkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTUyKQorbmlsICkKKyghcGFpciAgInVzZWRfdHlwZXNfaGFzaCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDU1NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKykKKykKKykKKyghcGFpciAgImZkZSIKKyghdHlwZSBwb2ludGVyIDQ0MiBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNDQzIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDIpCisgZ2NfcG9pbnRlZF90byAiZHdfZmRlX3N0cnVjdCIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxMDgpCisKKyghZmllbGRzIDIyIAorKCFwYWlyICAiZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDc2KQorbmlsICkKKyghcGFpciAgImR3X2ZkZV9iZWdpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA3NykKK25pbCApCisoIXBhaXIgICJkd19mZGVfY3VycmVudF9sYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA3OCkKK25pbCApCisoIXBhaXIgICJkd19mZGVfZW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDc5KQorbmlsICkKKyghcGFpciAgImR3X2ZkZV92bXNfZW5kX3Byb2xvZ3VlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDgwKQorbmlsICkKKyghcGFpciAgImR3X2ZkZV92bXNfYmVnaW5fZXBpbG9ndWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgODEpCituaWwgKQorKCFwYWlyICAiZHdfZmRlX3NlY29uZF9iZWdpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA4MikKK25pbCApCisoIXBhaXIgICJkd19mZGVfc2Vjb25kX2VuZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA4MykKK25pbCApCisoIXBhaXIgICJkd19mZGVfY2ZpIgorKCF0eXBlIHBvaW50ZXIgNDQ0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDQ0NSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQ0KQorIGdjX3BvaW50ZWRfdG8gInZlYzxkd19jZmlfcmVmLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA2NSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgNjUpCituaWwgKQorKCFwYWlyICAiZHdfY2ZpX3JlZiIKKyghdHlwZSBwb2ludGVyIDQ0NiBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNDQ3IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDYpCisgZ2NfcG9pbnRlZF90byAiZHdfY2ZpX3N0cnVjdCIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA2MSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImR3X2NmaV9vcGMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA1NikKK25pbCApCisoIXBhaXIgICJkd19jZmlfb3BybmQxIgorKCF0eXBlIHVuaW9uIDQ0OCBuaWwgIGdjX3VzZWQgImR3X2NmaV9vcHJuZF9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgNTIpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJkd19jZmlfcmVnX251bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDQ4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiZHdfY2ZpX29wcm5kX3JlZ19udW0iKQorKQorKQorKCFwYWlyICAiZHdfY2ZpX29mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDQ5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiZHdfY2ZpX29wcm5kX29mZnNldCIpCispCispCisoIXBhaXIgICJkd19jZmlfYWRkciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA1MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X2NmaV9vcHJuZF9hZGRyIikKKykKKykKKyghcGFpciAgImR3X2NmaV9sb2MiCisoIXR5cGUgcG9pbnRlciA0NDkgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDQ1MCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQ5KQorIGdjX3BvaW50ZWRfdG8gImR3X2xvY19kZXNjcl9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMjE4KQorCisoIWZpZWxkcyA2IAorKCFwYWlyICAiZHdfbG9jX25leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ0OSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDIxMCkKK25pbCApCisoIXBhaXIgICJkd19sb2Nfb3BjIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMjExKQorbmlsICkKKyghcGFpciAgImR0cHJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDIxNCkKK25pbCApCisoIXBhaXIgICJkd19sb2NfYWRkciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDIxNSkKK25pbCApCisoIXBhaXIgICJkd19sb2Nfb3BybmQxIgorKCF0eXBlIHN0cnVjdCA0NTEgCisoIXR5cGUgcG9pbnRlciA0NTIgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUxKQorKQorIGdjX3VzZWQgImR3X3ZhbF9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMjAzKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAidmFsX2NsYXNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTcyKQorbmlsICkKKyghcGFpciAgInZhbF9lbnRyeSIKKyghdHlwZSBwb2ludGVyIDQ1MyBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNDU0IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0NTMpCisgZ2NfcG9pbnRlZF90byAiYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTIyMCkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgImtpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjExKQorbmlsICkKKyghcGFpciAgInJlZmNvdW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTIxMikKK25pbCApCisoIXBhaXIgICJpbmRleCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDEyMTMpCituaWwgKQorKCFwYWlyICAiYWRkciIKKyghdHlwZSB1bmlvbiA0NTUgbmlsICBnY191c2VkICJhZGRyX3RhYmxlX2VudHJ5X3N0cnVjdF91bmlvbiIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjE4KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAicnRsIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjE2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMCIpCispCispCisoIXBhaXIgICJsYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjE3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMSIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTIxOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICIlMS5raW5kIikKKykKKykpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxNzMpCituaWwgKQorKCFwYWlyICAidiIKKyghdHlwZSB1bmlvbiA0NTYgbmlsICBnY191c2VkICJkd192YWxfc3RydWN0X3VuaW9uIgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDIwMSkKKworKCFmaWVsZHMgMTcgCisoIXBhaXIgICJ2YWxfYWRkciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTc2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiZHdfdmFsX2NsYXNzX2FkZHIiKQorKQorKQorKCFwYWlyICAidmFsX29mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE3NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X3ZhbF9jbGFzc19vZmZzZXQiKQorKQorKQorKCFwYWlyICAidmFsX2xvY19saXN0IgorKCF0eXBlIHBvaW50ZXIgNDU3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA0NTggCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1NykKKyBnY19wb2ludGVkX3RvICJkd19sb2NfbGlzdF9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTI0NSkKKworKCFmaWVsZHMgMTIgCisoIXBhaXIgICJkd19sb2NfbmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDU3KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTIyNykKK25pbCApCisoIXBhaXIgICJiZWdpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjI4KQorbmlsICkKKyghcGFpciAgImJlZ2luX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NTMpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjI5KQorbmlsICkKKyghcGFpciAgImVuZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjMwKQorbmlsICkKKyghcGFpciAgImxsX3N5bWJvbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjMxKQorbmlsICkKKyghcGFpciAgInNlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTIzMykKK25pbCApCisoIXBhaXIgICJleHByIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjM0KQorbmlsICkKKyghcGFpciAgImhhc2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjM1KQorbmlsICkKKyghcGFpciAgInJlc29sdmVkX2FkZHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjM4KQorbmlsICkKKyghcGFpciAgInJlcGxhY2VkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTI0MCkKK25pbCApCisoIXBhaXIgICJlbWl0dGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTI0MSkKK25pbCApCisoIXBhaXIgICJmb3JjZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDEyNDQpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE3OCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X3ZhbF9jbGFzc19sb2NfbGlzdCIpCispCispCisoIXBhaXIgICJ2YWxfbG9jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxNzkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJkd192YWxfY2xhc3NfbG9jIikKKykKKykKKyghcGFpciAgInZhbF9pbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlZmF1bHQgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInZhbF91bnNpZ25lZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE4MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X3ZhbF9jbGFzc191bnNpZ25lZF9jb25zdCIpCispCispCisoIXBhaXIgICJ2YWxfZG91YmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTgyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiZHdfdmFsX2NsYXNzX2NvbnN0X2RvdWJsZSIpCispCispCisoIXBhaXIgICJ2YWxfdmVjIgorKCF0eXBlIHN0cnVjdCA0NTkgbmlsICBnY191c2VkICJkd192ZWNfc3RydWN0IgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE2MykKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImFycmF5IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE2MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gYXRvbWljIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJsZW5ndGgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxNjEpCituaWwgKQorKCFwYWlyICAiZWx0X3NpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxNjIpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE4MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X3ZhbF9jbGFzc192ZWMiKQorKQorKQorKCFwYWlyICAidmFsX2RpZV9yZWYiCisoIXR5cGUgc3RydWN0IDQ2MCBuaWwgIGdjX3VzZWQgImR3X3ZhbF9kaWVfdW5pb24iCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTg4KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZGllIgorKCF0eXBlIHBvaW50ZXIgNDYxIAorKCF0eXBlIHBvaW50ZXIgNDYyIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA0NjEpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIHN0cnVjdCA0NjMgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MSkKKyBnY19wb2ludGVkX3RvICJkaWVfc3RydWN0IgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MjYpCisKKyghZmllbGRzIDEzIAorKCFwYWlyICAiZGllX2lkIgorKCF0eXBlIHVuaW9uIDQ2NCBuaWwgIGdjX3VzZWQgImRpZV9zeW1ib2xfb3JfdHlwZV9ub2RlIgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MTApCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJkaWVfc3ltYm9sIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MDgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIwIikKKykKKykKKyghcGFpciAgImRpZV90eXBlX25vZGUiCisoIXR5cGUgcG9pbnRlciA0NjUgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDQ2NiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDY1KQorIGdjX3BvaW50ZWRfdG8gImNvbWRhdF90eXBlX3N0cnVjdCIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTc2KQorCisoIWZpZWxkcyA1IAorKCFwYWlyICAicm9vdF9kaWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1NzEpCituaWwgKQorKCFwYWlyICAidHlwZV9kaWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1NzIpCituaWwgKQorKCFwYWlyICAic2tlbGV0b25fZGllIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NjEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTczKQorbmlsICkKKyghcGFpciAgInNpZ25hdHVyZSIKKyghdHlwZSBhcnJheSA0NjcgbmlsICBnY191c2VkICJEV0FSRl9UWVBFX1NJR05BVFVSRV9TSVpFIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCispCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTc0KQorbmlsICkKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1NzUpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIxIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTExKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIiUwLmNvbWRhdF90eXBlX3AiKQorKQorKQorKCFwYWlyICAiZGllX2F0dHIiCisoIXR5cGUgcG9pbnRlciA0NjggbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNDY5IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0NjgpCisgZ2NfcG9pbnRlZF90byAidmVjPGR3X2F0dHJfbm9kZSx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjUxMikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjUxMikKK25pbCApCisoIXBhaXIgICJkd19hdHRyX25vZGUiCisoIXR5cGUgc3RydWN0IDQ3MCAKKyghdHlwZSBwb2ludGVyIDQ3MSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA0NzApCispCisgZ2NfdXNlZCAiZHdfYXR0cl9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjQ5NykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImR3X2F0dHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDk1KQorbmlsICkKKyghcGFpciAgImR3X2F0dHJfdmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NTEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDk2KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTEyKQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTEyKQorbmlsICkKKyghcGFpciAgImRpZV9wYXJlbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MTMpCituaWwgKQorKCFwYWlyICAiZGllX2NoaWxkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NjEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTE0KQorbmlsICkKKyghcGFpciAgImRpZV9zaWIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MTUpCituaWwgKQorKCFwYWlyICAiZGllX2RlZmluaXRpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MTYpCituaWwgKQorKCFwYWlyICAiZGllX29mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MTcpCituaWwgKQorKCFwYWlyICAiZGllX2FiYnJldiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MTgpCituaWwgKQorKCFwYWlyICAiZGllX21hcmsiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTE5KQorbmlsICkKKyghcGFpciAgImRlY2xfaWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTIwKQorbmlsICkKKyghcGFpciAgImRpZV90YWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTIxKQorbmlsICkKKyghcGFpciAgImRpZV9wZXJlbm5pYWxfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MjMpCituaWwgKQorKCFwYWlyICAiY29tZGF0X3R5cGVfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1MjQpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fY2lyY3VsYXIgc3RyaW5nICAiJWguZGllX3NpYiIpCispCis1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE4NikKK25pbCApCisoIXBhaXIgICJleHRlcm5hbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE4NykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTg4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiZHdfdmFsX2NsYXNzX2RpZV9yZWYiKQorKQorKQorKCFwYWlyICAidmFsX2ZkZV9pbmRleCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE4OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X3ZhbF9jbGFzc19mZGVfcmVmIikKKykKKykKKyghcGFpciAgInZhbF9zdHIiCisoIXR5cGUgcG9pbnRlciA0NzIgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDQ3MyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDcyKQorIGdjX3BvaW50ZWRfdG8gImluZGlyZWN0X3N0cmluZ19ub2RlIgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDIwNSkKKworKCFmaWVsZHMgNSAKKyghcGFpciAgInN0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyMDApCituaWwgKQorKCFwYWlyICAicmVmY291bnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyMDEpCituaWwgKQorKCFwYWlyICAiZm9ybSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDIwMikKK25pbCApCisoIXBhaXIgICJsYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyMDMpCituaWwgKQorKCFwYWlyICAiaW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyMDQpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE5MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X3ZhbF9jbGFzc19zdHIiKQorKQorKQorKCFwYWlyICAidmFsX2xibF9pZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxOTEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJkd192YWxfY2xhc3NfbGJsX2lkIikKKykKKykKKyghcGFpciAgInZhbF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE5MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X3ZhbF9jbGFzc19mbGFnIikKKykKKykKKyghcGFpciAgInZhbF9maWxlIgorKCF0eXBlIHBvaW50ZXIgNDc0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA0NzUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ3NCkKKyBnY19wb2ludGVkX3RvICJkd2FyZl9maWxlX2RhdGEiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTE5MCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImZpbGVuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDExODgpCituaWwgKQorKCFwYWlyICAiZW1pdHRlZF9udW1iZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMTg5KQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxOTMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJkd192YWxfY2xhc3NfZmlsZSIpCispCispCisoIXBhaXIgICJ2YWxfZGF0YTgiCisoIXR5cGUgYXJyYXkgNDc2IG5pbCAgZ2NfdXNlZCAiOCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4KQorKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTk0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiZHdfdmFsX2NsYXNzX2RhdGE4IikKKykKKykKKyghcGFpciAgInZhbF9kZWNsX3JlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDE5NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X3ZhbF9jbGFzc19kZWNsX3JlZiIpCispCispCisoIXBhaXIgICJ2YWxfdm1zX2RlbHRhIgorKCF0eXBlIHN0cnVjdCA0NzcgbmlsICBnY191c2VkICJkd192YWxfdm1zX2RlbHRhX3VuaW9uIgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDIwMCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImxibDEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTk4KQorbmlsICkKKyghcGFpciAgImxibDIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTk5KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAyMDApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJkd192YWxfY2xhc3Nfdm1zX2RlbHRhIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAyMDIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiJTEudmFsX2NsYXNzIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAyMTYpCituaWwgKQorKCFwYWlyICAiZHdfbG9jX29wcm5kMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUxKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMjE3KQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA1MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgImR3X2NmaV9vcHJuZF9sb2MiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDU4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgImR3X2NmaV9vcHJuZDFfZGVzYyAoJTEuZHdfY2ZpX29wYykiKQorKQorKQorKCFwYWlyICAiZHdfY2ZpX29wcm5kMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQ4KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgNjApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiZHdfY2ZpX29wcm5kMl9kZXNjICglMS5kd19jZmlfb3BjKSIpCispCispKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgNjUpCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDg0KQorbmlsICkKKyghcGFpciAgImR3X2ZkZV9zd2l0Y2hfY2ZpX2luZGV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgODUpCituaWwgKQorKCFwYWlyICAic3RhY2tfcmVhbGlnbm1lbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA4NikKK25pbCApCisoIXBhaXIgICJmdW5jZGVmX251bWJlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDg4KQorbmlsICkKKyghcGFpciAgImZkZV9pbmRleCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDg5KQorbmlsICkKKyghcGFpciAgImRyYXBfcmVnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgOTIpCituaWwgKQorKCFwYWlyICAidmRyYXBfcmVnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgOTQpCituaWwgKQorKCFwYWlyICAiYWxsX3Rocm93ZXJzX2FyZV9zaWJjYWxscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDk2KQorbmlsICkKKyghcGFpciAgInVzZXNfZWhfbHNkYSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDk3KQorbmlsICkKKyghcGFpciAgIm5vdGhyb3ciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA5OCkKK25pbCApCisoIXBhaXIgICJzdGFja19yZWFsaWduIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTAwKQorbmlsICkKKyghcGFpciAgImRyYXBfcmVnX3NhdmVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTAyKQorbmlsICkKKyghcGFpciAgImluX3N0ZF9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTA0KQorbmlsICkKKyghcGFpciAgInNlY29uZF9pbl9zdGRfc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDEwNykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA1NjApCituaWwgKQorKCFwYWlyICAibGFzdF9zdG10X3VpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTYzKQorbmlsICkKKyghcGFpciAgImZ1bmNkZWZfbm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDU2NikKK25pbCApCisoIXBhaXIgICJmdW5jdGlvbl9zdGFydF9sb2N1cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTY5KQorbmlsICkKKyghcGFpciAgImZ1bmN0aW9uX2VuZF9sb2N1cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTcyKQorbmlsICkKKyghcGFpciAgImN1cnJfcHJvcGVydGllcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTc1KQorbmlsICkKKyghcGFpciAgImxhc3RfdmVyaWZpZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDU3NikKK25pbCApCisoIXBhaXIgICJjYW5ub3RfYmVfY29waWVkX3JlYXNvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDU4MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAidmFfbGlzdF9ncHJfc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNTg4KQorbmlsICkKKyghcGFpciAgInZhX2xpc3RfZnByX3NpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDU5MikKK25pbCApCisoIXBhaXIgICJjYWxsc19zZXRqbXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDU5NSkKK25pbCApCisoIXBhaXIgICJjYWxsc19hbGxvY2EiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDU5OSkKK25pbCApCisoIXBhaXIgICJoYXNfbm9ubG9jYWxfbGFiZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDYwMykKK25pbCApCisoIXBhaXIgICJjYW5ub3RfYmVfY29waWVkX3NldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjA4KQorbmlsICkKKyghcGFpciAgInN0ZGFyZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjExKQorbmlsICkKKyghcGFpciAgImFmdGVyX2lubGluaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA2MTMpCituaWwgKQorKCFwYWlyICAiYWx3YXlzX2lubGluZV9mdW5jdGlvbnNfaW5saW5lZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjE0KQorbmlsICkKKyghcGFpciAgImNhbl90aHJvd19ub25fY2FsbF9leGNlcHRpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA2MTgpCituaWwgKQorKCFwYWlyICAiY2FuX2RlbGV0ZV9kZWFkX2V4Y2VwdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDYyMikKK25pbCApCisoIXBhaXIgICJyZXR1cm5zX3N0cnVjdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjI5KQorbmlsICkKKyghcGFpciAgInJldHVybnNfcGNjX3N0cnVjdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjMzKQorbmlsICkKKyghcGFpciAgImhhc19sb2NhbF9leHBsaWNpdF9yZWdfdmFycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjM3KQorbmlsICkKKyghcGFpciAgImlzX3RodW5rIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA2NDMpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNDc5KQorbmlsICkKKyghcGFpciAgInBlcnNvbmFsaXR5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM0ODIpCituaWwgKQorKCFwYWlyICAiZnVuY3Rpb25fc3BlY2lmaWNfdGFyZ2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM0ODUpCituaWwgKQorKCFwYWlyICAiZnVuY3Rpb25fc3BlY2lmaWNfb3B0aW1pemF0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM0ODYpCituaWwgKQorKCFwYWlyICAiZnVuY3Rpb25fY29kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNDkyKQorbmlsICkKKyghcGFpciAgImJ1aWx0X2luX2NsYXNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM0OTMpCituaWwgKQorKCFwYWlyICAic3RhdGljX2N0b3JfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNDk1KQorbmlsICkKKyghcGFpciAgInN0YXRpY19kdG9yX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzQ5NikKK25pbCApCisoIXBhaXIgICJ1bmlubGluYWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNDk3KQorbmlsICkKKyghcGFpciAgInBvc3NpYmx5X2lubGluZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzQ5OSkKK25pbCApCisoIXBhaXIgICJub3ZvcHNfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTAwKQorbmlsICkKKyghcGFpciAgInJldHVybnNfdHdpY2VfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTAxKQorbmlsICkKKyghcGFpciAgIm1hbGxvY19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM1MDIpCituaWwgKQorKCFwYWlyICAib3BlcmF0b3JfbmV3X2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzUwMykKK25pbCApCisoIXBhaXIgICJkZWNsYXJlZF9pbmxpbmVfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTA0KQorbmlsICkKKyghcGFpciAgInJlZ2RlY2xfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTA1KQorbmlsICkKKyghcGFpciAgIm5vX2lubGluZV93YXJuaW5nX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzUwNikKK25pbCApCisoIXBhaXIgICJub19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzUwOCkKK25pbCApCisoIXBhaXIgICJub19saW1pdF9zdGFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTA5KQorbmlsICkKKyghcGFpciAgImRpc3JlZ2FyZF9pbmxpbmVfbGltaXRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM1MTApCituaWwgKQorKCFwYWlyICAicHVyZV9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM1MTEpCituaWwgKQorKCFwYWlyICAibG9vcGluZ19jb25zdF9vcl9wdXJlX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzUxMikKK25pbCApCisoIXBhaXIgICJoYXNfZGVidWdfYXJnc19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM1MTMpCituaWwgKQorKCFwYWlyICAidG1fY2xvbmVfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTE0KQorbmlsICkKKyghcGFpciAgInZlcnNpb25lZF9mdW5jdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTE1KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY1NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0ZVTkNUSU9OX0RFQ0wiKQorKQorKQorKCFwYWlyICAidHJhbnNsYXRpb25fdW5pdF9kZWNsIgorKCF0eXBlIHN0cnVjdCA0NzggbmlsICBnY191c2VkICJ0cmVlX3RyYW5zbGF0aW9uX3VuaXRfZGVjbCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzUzMSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzgpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzUyNikKK25pbCApCisoIXBhaXIgICJsYW5ndWFnZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzUyOCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjU5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfVFJBTlNMQVRJT05fVU5JVF9ERUNMIikKKykKKykKKyghcGFpciAgInR5cGVfY29tbW9uIgorKCF0eXBlIHN0cnVjdCA0NzkgbmlsICBnY191c2VkICJ0cmVlX3R5cGVfY29tbW9uIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzgwKQorCisoIWZpZWxkcyAzMCAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM0MikKK25pbCApCisoIXBhaXIgICJzaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNDMpCituaWwgKQorKCFwYWlyICAic2l6ZV91bml0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNDQpCituaWwgKQorKCFwYWlyICAiYXR0cmlidXRlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzQ1KQorbmlsICkKKyghcGFpciAgInVpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzQ2KQorbmlsICkKKyghcGFpciAgInByZWNpc2lvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzQ4KQorbmlsICkKKyghcGFpciAgIm5vX2ZvcmNlX2Jsa19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNDkpCituaWwgKQorKCFwYWlyICAibmVlZHNfY29uc3RydWN0aW5nX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM1MCkKK25pbCApCisoIXBhaXIgICJ0cmFuc3BhcmVudF9hZ2dyX2ZsYWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM1MSkKK25pbCApCisoIXBhaXIgICJyZXN0cmljdF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNTIpCituaWwgKQorKCFwYWlyICAiY29udGFpbnNfcGxhY2Vob2xkZXJfYml0cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzUzKQorbmlsICkKKyghcGFpciAgIm1vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM1NSkKK25pbCApCisoIXBhaXIgICJzdHJpbmdfZmxhZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzU3KQorbmlsICkKKyghcGFpciAgImxhbmdfZmxhZ18wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNTgpCituaWwgKQorKCFwYWlyICAibGFuZ19mbGFnXzEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM1OSkKK25pbCApCisoIXBhaXIgICJsYW5nX2ZsYWdfMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzYwKQorbmlsICkKKyghcGFpciAgImxhbmdfZmxhZ18zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNjEpCituaWwgKQorKCFwYWlyICAibGFuZ19mbGFnXzQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM2MikKK25pbCApCisoIXBhaXIgICJsYW5nX2ZsYWdfNSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzYzKQorbmlsICkKKyghcGFpciAgImxhbmdfZmxhZ182IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNjQpCituaWwgKQorKCFwYWlyICAiYWxpZ24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM2NikKK25pbCApCisoIXBhaXIgICJhbGlhc19zZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM2NykKK25pbCApCisoIXBhaXIgICJwb2ludGVyX3RvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNjgpCituaWwgKQorKCFwYWlyICAicmVmZXJlbmNlX3RvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNjkpCituaWwgKQorKCFwYWlyICAic3ltdGFiIgorKCF0eXBlIHVuaW9uIDQ4MCBuaWwgIGdjX3VzZWQgInRyZWVfdHlwZV9zeW10YWIiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNzQpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJhZGRyZXNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNzEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUWVBFX1NZTVRBQl9JU19BRERSRVNTIikKKykKKykKKyghcGFpciAgInBvaW50ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNzIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUWVBFX1NZTVRBQl9JU19QT0lOVEVSIikKKykKKykKKyghcGFpciAgImRpZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDYxKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNzMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUWVBFX1NZTVRBQl9JU19ESUUiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzc0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgImRlYnVnX2hvb2tzLT50cmVlX3R5cGVfc3ltdGFiX2ZpZWxkIikKKykKKykKKyghcGFpciAgIm5hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM3NSkKK25pbCApCisoIXBhaXIgICJuZXh0X3ZhcmlhbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM3NikKK25pbCApCisoIXBhaXIgICJtYWluX3ZhcmlhbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjM3NykKK25pbCApCisoIXBhaXIgICJjb250ZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNzgpCituaWwgKQorKCFwYWlyICAiY2Fub25pY2FsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzNzkpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjYwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfVFlQRV9DT01NT04iKQorKQorKQorKCFwYWlyICAidHlwZV93aXRoX2xhbmdfc3BlY2lmaWMiCisoIXR5cGUgc3RydWN0IDQ4MSBuaWwgIGdjX3VzZWQgInRyZWVfdHlwZV93aXRoX2xhbmdfc3BlY2lmaWMiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzODkpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ3OSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMzg2KQorbmlsICkKKyghcGFpciAgImxhbmdfc3BlY2lmaWMiCisoIXR5cGUgcG9pbnRlciA0ODIgbmlsICBnY191c2VkCisoIXR5cGUgbGFuZ19zdHJ1Y3QgNDgzIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0ODIpCisgZ2NfcG9pbnRlZF90byAibGFuZ190eXBlIgorKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvYWRhLXRyZWUuaCIgNDApCisKKyghZmllbGRzIDAgKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCispCis1MTEgKCFob21vdHlwZXMgNworCisoIXR5cGUgc3RydWN0IDQ4NCBuaWwgIGdjX3BvaW50ZWRfdG8gImxhbmdfdHlwZSIKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tdHJlZS5oIiAzOSkKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImR1bW15IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLXRyZWUuaCIgMzgpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdmFyaWFibGVfc2l6ZSBzdHJpbmcgICIiKQorKQorNjQgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ4MykKKykKKworKCF0eXBlIHN0cnVjdCA0ODUgbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3R5cGUiCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA5MjYpCisKKyghZmllbGRzIDI5IAorKCFwYWlyICAic2lnbmF0dXJlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4NzYpCituaWwgKQorKCFwYWlyICAiamNmIgorKCF0eXBlIHBvaW50ZXIgNDg2IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA0ODcgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ4NikKKyBnY19wb2ludGVkX3RvICJKQ0YiCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiAxMjMpCisKKyghZmllbGRzIDE2IAorKCFwYWlyICAiYnVmZmVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgMTA2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJidWZmZXJfZW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgMTA3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJyZWFkX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDEwOCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicmVhZF9lbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiAxMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInJpZ2h0X3ppcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgMTEwKQorbmlsICkKKyghcGFpciAgImZpbmlzaGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiAxMTEpCituaWwgKQorKCFwYWlyICAiZmlsYnVmIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiAxMTIpCituaWwgKQorKCFwYWlyICAicmVhZF9zdGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTApCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDExMykKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiZmlsZW5hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiAxMTQpCituaWwgKQorKCFwYWlyICAiY2xhc3NuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgMTE1KQorbmlsICkKKyghcGFpciAgInppcGQiCisoIXR5cGUgcG9pbnRlciA0ODggbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgNDg5IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0ODgpCisgZ2NfdW51c2VkICJaaXBEaXJlY3RvcnkibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiAxMTcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImFjY2Vzc19mbGFncyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgMTE4KQorbmlsICkKKyghcGFpciAgInRoaXNfY2xhc3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDExOSkKK25pbCApCisoIXBhaXIgICJzdXBlcl9jbGFzcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgMTIwKQorbmlsICkKKyghcGFpciAgImNwb29sIgorKCF0eXBlIHN0cnVjdCA0OTAgCisoIXR5cGUgcG9pbnRlciA0OTEgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5MCkKKykKKyBnY19wb2ludGVkX3RvICJDUG9vbCIKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDg4KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiY2FwYWNpdHkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDc5KQorbmlsICkKKyghcGFpciAgImNvdW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiA4MikKK25pbCApCisoIXBhaXIgICJ0YWdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMCkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgODQpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGF0b21pYyBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiZGF0YSIKKyghdHlwZSBwb2ludGVyIDQ5MiBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHVuaW9uIDQ5MyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkyKQorIGdjX3VzZWQgImNwb29sX2VudHJ5IgorKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgNzEpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ3IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiA2OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKQorKCFwYWlyICAidCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgNzApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIxIikKKykKKykpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHZhcmlhYmxlX3NpemUgc3RyaW5nICAiIikKKykKKzMyIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDg3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgImNwb29sX2VudHJ5X2lzX3RyZWUgKCUxLnRhZ3MlYSkiKQorCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiJWguY291bnQiKQorKQorKSkKK25pbCAzMiBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiAxMjEpCituaWwgKQorKCFwYWlyICAiYm9vdHN0cmFwX21ldGhvZHMiCisoIXR5cGUgc3RydWN0IDQ5NCBuaWwgIGdjX3VzZWQgIkJvb3RzdHJhcE1ldGhvZHMiCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiA5OSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImNvdW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiA5NykKK25pbCApCisoIXBhaXIgICJtZXRob2RzIgorKCF0eXBlIHBvaW50ZXIgNDk1IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDQ5NiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDk1KQorIGdjX3VzZWQgImJvb3RzdHJhcF9tZXRob2QiCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiA5NCkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgIm1ldGhvZF9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDkxKQorbmlsICkKKyghcGFpciAgIm51bV9hcmd1bWVudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDkyKQorbmlsICkKKyghcGFpciAgImJvb3RzdHJhcF9hcmd1bWVudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiA5MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gYXRvbWljIHN0cmluZyAgIiIpCispCispKQorbmlsIDMyIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDk4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiJWguY291bnQiKQorKQorKSkKK25pbCAzMiBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiAxMjIpCituaWwgKSkKK25pbCAzMiBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4NzcpCituaWwgKQorKCFwYWlyICAiY3Bvb2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5MSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgODc4KQorbmlsICkKKyghcGFpciAgImNwb29sX2RhdGFfcmVmIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4NzkpCituaWwgKQorKCFwYWlyICAicGFja2FnZV9saXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4ODApCituaWwgKQorKCFwYWlyICAib3RhYmxlX21ldGhvZHMiCisoIXR5cGUgcG9pbnRlciA0OTcgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNDk4IAorKCF0eXBlIGFscmVhZHlfc2VlbiA0OTcpCisgZ2NfcG9pbnRlZF90byAidmVjPG1ldGhvZF9lbnRyeSx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4ODIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgODgyKQorbmlsICkKKyghcGFpciAgIm1ldGhvZF9lbnRyeSIKKyghdHlwZSBzdHJ1Y3QgNDk5IG5pbCAgZ2NfdXNlZCAibWV0aG9kX2VudHJ5X2QiCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4NjkpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJtZXRob2QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDg2NykKK25pbCApCisoIXBhaXIgICJzcGVjaWFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4NjgpCituaWwgKSkKK25pbCAzMiBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4ODIpCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgODgyKQorbmlsICkKKyghcGFpciAgIm90YWJsZV9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4ODQpCituaWwgKQorKCFwYWlyICAib3RhYmxlX3N5bXNfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgODg1KQorbmlsICkKKyghcGFpciAgImF0YWJsZV9tZXRob2RzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0OTcpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDg4NykKK25pbCApCisoIXBhaXIgICJhdGFibGVfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgODg5KQorbmlsICkKKyghcGFpciAgImF0YWJsZV9zeW1zX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDg5MCkKK25pbCApCisoIXBhaXIgICJpdGFibGVfbWV0aG9kcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDk3KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4OTIpCituaWwgKQorKCFwYWlyICAiaXRhYmxlX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDg5NCkKK25pbCApCisoIXBhaXIgICJpdGFibGVfc3ltc19kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4OTUpCituaWwgKQorKCFwYWlyICAiY3RhYmxlX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDg5NykKK25pbCApCisoIXBhaXIgICJjYXRjaF9jbGFzc2VzIgorKCF0eXBlIHBvaW50ZXIgNTAwIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDUwMSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTAwKQorIGdjX3BvaW50ZWRfdG8gInZlYzxjb25zdHJ1Y3Rvcl9lbHQsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNTgwKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTU4MCkKK25pbCApCisoIXBhaXIgICJjb25zdHJ1Y3Rvcl9lbHQiCisoIXR5cGUgc3RydWN0IDUwMiBuaWwgIGdjX3VzZWQgImNvbnN0cnVjdG9yX2VsdF9kIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNTc1KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiaW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTU3MykKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNTc0KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTU4MCkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA4OTkpCituaWwgKQorKCFwYWlyICAidHlwZV90b19ydW50aW1lX21hcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDcpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDkwMSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTIpCispCispCispCisoIXBhaXIgICJ0eXBlX2Fzc2VydGlvbnMiCisoIXR5cGUgcG9pbnRlciA1MDMgbmlsICBnY191c2VkCisoIXR5cGUgcGFyYW1fc3RydWN0IDUwNCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTAzKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBwb2ludGVyIDUwNSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTA2IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1MDUpCisgZ2NfcG9pbnRlZF90byAidHlwZV9hc3NlcnRpb24iCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA3ODYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJhc3NlcnRpb25fY29kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzgzKQorbmlsICkKKyghcGFpciAgIm9wMSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzg0KQorbmlsICkKKyghcGFpciAgIm9wMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNzg1KQorbmlsICkpCituaWwgMzIgbmlsICkKKykKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDkwNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTA2KQorKQorKQorKQorKCFwYWlyICAicGFja2FnZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgOTA5KQorbmlsICkKKyghcGFpciAgInJlZmxlY3Rpb25fZGF0YSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDkxMikKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicmVmbGVjdGlvbl9kYXRhc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgOTE1KQorbmlsICkKKyghcGFpciAgInBpYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgOTE4KQorbmlsICkKKyghcGFpciAgInBvaWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDkxOSkKK25pbCApCisoIXBhaXIgICJzdHJpY3RmcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgOTIwKQorbmlsICkKKyghcGFpciAgImFzc2VydGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDkyMSkKK25pbCApCisoIXBhaXIgICJkdW1teV9jbGFzcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgOTIyKQorbmlsICkKKyghcGFpciAgImVudW1fY2xhc3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDkyMykKK25pbCApCisoIXBhaXIgICJzeW50aGV0aWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDkyNCkKK25pbCApCisoIXBhaXIgICJhbm5vdGF0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA5MjUpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdmFyaWFibGVfc2l6ZSBzdHJpbmcgICIiKQorKQorMzIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ4MykKKykKKworKCF0eXBlIHN0cnVjdCA1MDcgbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3R5cGUiCisoIXNyY2ZpbGVsb2MgICJnby9nby1sYW5nLmMiIDQ5KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiZHVtbXkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4KQorCisoIXNyY2ZpbGVsb2MgICJnby9nby1sYW5nLmMiIDQ4KQorbmlsICkpCituaWwgMTYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ4MykKKykKKworKCF0eXBlIHN0cnVjdCA1MDggbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3R5cGUiCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDgwMCkKKworKCFmaWVsZHMgMTUgCisoIXBhaXIgICJyYW5rIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDc4NikKK25pbCApCisoIXBhaXIgICJjb3JhbmsiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzg2KQorbmlsICkKKyghcGFpciAgImFraW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDc4NykKK25pbCApCisoIXBhaXIgICJsYm91bmQiCisoIXR5cGUgYXJyYXkgNTA5IG5pbCAgZ2NfdXNlZCAiR0ZDX01BWF9ESU1FTlNJT05TIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3ODgpCituaWwgKQorKCFwYWlyICAidWJvdW5kIgorKCF0eXBlIGFycmF5IDUxMCBuaWwgIGdjX3VzZWQgIkdGQ19NQVhfRElNRU5TSU9OUyIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzg5KQorbmlsICkKKyghcGFpciAgInN0cmlkZSIKKyghdHlwZSBhcnJheSA1MTEgbmlsICBnY191c2VkICJHRkNfTUFYX0RJTUVOU0lPTlMiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDc5MCkKK25pbCApCisoIXBhaXIgICJzaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDc5MSkKK25pbCApCisoIXBhaXIgICJvZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzkyKQorbmlsICkKKyghcGFpciAgImR0eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDc5MykKK25pbCApCisoIXBhaXIgICJkYXRhcHRyX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzk0KQorbmlsICkKKyghcGFpciAgInNwYW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzk1KQorbmlsICkKKyghcGFpciAgImJhc2VfZGVjbCIKKyghdHlwZSBhcnJheSA1MTIgbmlsICBnY191c2VkICIyIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3OTYpCituaWwgKQorKCFwYWlyICAibm9ucmVzdHJpY3RlZF90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDc5NykKK25pbCApCisoIXBhaXIgICJjYWZfdG9rZW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzk4KQorbmlsICkKKyghcGFpciAgImNhZl9vZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzk5KQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHZhcmlhYmxlX3NpemUgc3RyaW5nICAiIikKKykKKzggCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ4MykKKykKKworKCF0eXBlIHN0cnVjdCA1MTMgbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3R5cGUiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0NDIpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJ1IgorKCF0eXBlIHVuaW9uIDUxNCBuaWwgIGdjX3VzZWQgImxhbmdfdHlwZV91IgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDQxKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiaCIKKyghdHlwZSBzdHJ1Y3QgNTE1IG5pbCAgZ2NfdXNlZCAibGFuZ190eXBlX2hlYWRlciIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTMyNSkKKworKCFmaWVsZHMgOCAKKyghcGFpciAgImlzX2xhbmdfdHlwZV9jbGFzcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzE1KQorbmlsICkKKyghcGFpciAgImhhc190eXBlX2NvbnZlcnNpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTMxNykKK25pbCApCisoIXBhaXIgICJoYXNfY29weV9jdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzMTgpCituaWwgKQorKCFwYWlyICAiaGFzX2RlZmF1bHRfY3RvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzE5KQorbmlsICkKKyghcGFpciAgImNvbnN0X25lZWRzX2luaXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTMyMCkKK25pbCApCisoIXBhaXIgICJyZWZfbmVlZHNfaW5pdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzIxKQorbmlsICkKKyghcGFpciAgImhhc19jb25zdF9jb3B5X2Fzc2lnbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzIyKQorbmlsICkKKyghcGFpciAgInNwYXJlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzMjQpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDM4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJjIgorKCF0eXBlIHN0cnVjdCA1MTYgbmlsICBnY191c2VkICJsYW5nX3R5cGVfY2xhc3MiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0MjgpCisKKyghZmllbGRzIDY0IAorKCFwYWlyICAiaCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTE1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNDEpCituaWwgKQorKCFwYWlyICAiYWxpZ24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNDMpCituaWwgKQorKCFwYWlyICAiaGFzX211dGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM0NSkKK25pbCApCisoIXBhaXIgICJjb21faW50ZXJmYWNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNDYpCituaWwgKQorKCFwYWlyICAibm9uX3BvZF9jbGFzcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzQ3KQorbmlsICkKKyghcGFpciAgIm5lYXJseV9lbXB0eV9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNDgpCituaWwgKQorKCFwYWlyICAidXNlcl9hbGlnbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzQ5KQorbmlsICkKKyghcGFpciAgImhhc19jb3B5X2Fzc2lnbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzUwKQorbmlsICkKKyghcGFpciAgImhhc19uZXciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM1MSkKK25pbCApCisoIXBhaXIgICJoYXNfYXJyYXlfbmV3IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNTIpCituaWwgKQorKCFwYWlyICAiZ2V0c19kZWxldGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM1NCkKK25pbCApCisoIXBhaXIgICJpbnRlcmZhY2Vfb25seSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzU1KQorbmlsICkKKyghcGFpciAgImludGVyZmFjZV91bmtub3duIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNTYpCituaWwgKQorKCFwYWlyICAiY29udGFpbnNfZW1wdHlfY2xhc3NfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzU3KQorbmlsICkKKyghcGFpciAgImFub25fYWdnciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzU4KQorbmlsICkKKyghcGFpciAgIm5vbl96ZXJvX2luaXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM1OSkKK25pbCApCisoIXBhaXIgICJlbXB0eV9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNjApCituaWwgKQorKCFwYWlyICAidmVjX25ld191c2VzX2Nvb2tpZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzYyKQorbmlsICkKKyghcGFpciAgImRlY2xhcmVkX2NsYXNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNjMpCituaWwgKQorKCFwYWlyICAiZGlhbW9uZF9zaGFwZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM2NCkKK25pbCApCisoIXBhaXIgICJyZXBlYXRlZF9iYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNjUpCituaWwgKQorKCFwYWlyICAiYmVpbmdfZGVmaW5lZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzY2KQorbmlsICkKKyghcGFpciAgImphdmFfaW50ZXJmYWNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNjcpCituaWwgKQorKCFwYWlyICAiZGVidWdfcmVxdWVzdGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNjgpCituaWwgKQorKCFwYWlyICAiZmllbGRzX3JlYWRvbmx5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNjkpCituaWwgKQorKCFwYWlyICAidXNlX3RlbXBsYXRlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNzEpCituaWwgKQorKCFwYWlyICAicHRybWVtZnVuY19mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNzIpCituaWwgKQorKCFwYWlyICAid2FzX2Fub255bW91cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzczKQorbmlsICkKKyghcGFpciAgImxhenlfZGVmYXVsdF9jdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNzQpCituaWwgKQorKCFwYWlyICAibGF6eV9jb3B5X2N0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM3NSkKK25pbCApCisoIXBhaXIgICJsYXp5X2NvcHlfYXNzaWduIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNzYpCituaWwgKQorKCFwYWlyICAibGF6eV9kZXN0cnVjdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzNzcpCituaWwgKQorKCFwYWlyICAiaGFzX2NvbnN0X2NvcHlfY3RvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzc5KQorbmlsICkKKyghcGFpciAgImhhc19jb21wbGV4X2NvcHlfY3RvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzgwKQorbmlsICkKKyghcGFpciAgImhhc19jb21wbGV4X2NvcHlfYXNzaWduIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzODEpCituaWwgKQorKCFwYWlyICAibm9uX2FnZ3JlZ2F0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzgyKQorbmlsICkKKyghcGFpciAgImhhc19jb21wbGV4X2RmbHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM4MykKK25pbCApCisoIXBhaXIgICJoYXNfbGlzdF9jdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzODQpCituaWwgKQorKCFwYWlyICAibm9uX3N0ZF9sYXlvdXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM4NSkKK25pbCApCisoIXBhaXIgICJpc19saXRlcmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzODYpCituaWwgKQorKCFwYWlyICAibGF6eV9tb3ZlX2N0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM4OCkKK25pbCApCisoIXBhaXIgICJsYXp5X21vdmVfYXNzaWduIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzODkpCituaWwgKQorKCFwYWlyICAiaGFzX2NvbXBsZXhfbW92ZV9jdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzOTApCituaWwgKQorKCFwYWlyICAiaGFzX2NvbXBsZXhfbW92ZV9hc3NpZ24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM5MSkKK25pbCApCisoIXBhaXIgICJoYXNfY29uc3RleHByX2N0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTM5MikKK25pbCApCisoIXBhaXIgICJpc19maW5hbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzkzKQorbmlsICkKKyghcGFpciAgImR1bW15IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0MDIpCituaWwgKQorKCFwYWlyICAicHJpbWFyeV9iYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0MDQpCituaWwgKQorKCFwYWlyICAidmNhbGxfaW5kaWNlcyIKKyghdHlwZSBwb2ludGVyIDUxNyBuaWwgIGdjX3VzZWQKKyghdHlwZSB1c2VyX3N0cnVjdCA1MTggCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUxNykKKyBnY19wb2ludGVkX3RvICJ2ZWM8dHJlZV9wYWlyX3MsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDA1KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQwNSkKK25pbCApCisoIXBhaXIgICJ0cmVlX3BhaXJfcyIKKyghdHlwZSBzdHJ1Y3QgNTE5IAorKCF0eXBlIHBvaW50ZXIgNTIwIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUxOSkKKykKKyBnY191c2VkICJ0cmVlX3BhaXJfcyIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTMwOCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInB1cnBvc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTMwNikKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMzA3KQorbmlsICkpCituaWwgMjYwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQwNSkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0MDUpCituaWwgKQorKCFwYWlyICAidnRhYmxlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDA2KQorbmlsICkKKyghcGFpciAgInR5cGVpbmZvX3ZhciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDA3KQorbmlsICkKKyghcGFpciAgInZiYXNlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQwOCkKK25pbCApCisoIXBhaXIgICJuZXN0ZWRfdWR0cyIKKyghdHlwZSBwb2ludGVyIDUyMSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTIyIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1MjEpCisgZ2NfcG9pbnRlZF90byAiYmluZGluZ190YWJsZV9zIgorKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuYyIgMTQwKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiY2hhaW4iCisoIXR5cGUgcG9pbnRlciA1MjMgbmlsICBnY191bnVzZWQKKyghdHlwZSBwb2ludGVyIDUyNCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTIzKQorIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTI1IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1MjQpCisgZ2NfcG9pbnRlZF90byAiYmluZGluZ19lbnRyeV9zIgorKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMzgpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJjaGFpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTI0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAzNSkKK25pbCApCisoIXBhaXIgICJuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAzNikKK25pbCApCisoIXBhaXIgICJ0eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAzNykKK25pbCApKQorbmlsIDI2MCBuaWwgKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5jIiAxMzIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIlaC5jaGFpbl9jb3VudCIpCispCispCisoIXBhaXIgICJjaGFpbl9jb3VudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuYyIgMTM2KQorbmlsICkKKyghcGFpciAgImVudHJ5X2NvdW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5jIiAxMzkpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDA5KQorbmlsICkKKyghcGFpciAgImFzX2Jhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQxMCkKK25pbCApCisoIXBhaXIgICJwdXJlX3ZpcnR1YWxzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDExKQorbmlsICkKKyghcGFpciAgImZyaWVuZF9jbGFzc2VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0MTIpCituaWwgKQorKCFwYWlyICAibWV0aG9kcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQxMykKKworKCFvcHRpb25zIAorKCFvcHRpb24gcmVvcmRlciBzdHJpbmcgICJyZXNvcnRfdHlwZV9tZXRob2RfdmVjIikKKykKKykKKyghcGFpciAgImtleV9tZXRob2QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQxNCkKK25pbCApCisoIXBhaXIgICJkZWNsX2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQxNSkKK25pbCApCisoIXBhaXIgICJ0ZW1wbGF0ZV9pbmZvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0MTYpCituaWwgKQorKCFwYWlyICAiYmVmcmllbmRpbmdfY2xhc3NlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDE3KQorbmlsICkKKyghcGFpciAgIm9iamNfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDIxKQorbmlsICkKKyghcGFpciAgInNvcnRlZF9maWVsZHMiCisoIXR5cGUgcG9pbnRlciA1MjYgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDUyNyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTI2KQorIGdjX3BvaW50ZWRfdG8gInNvcnRlZF9maWVsZHNfdHlwZSIKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDQ0NSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImxlbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uaCIgNDQzKQorbmlsICkKKyghcGFpciAgImVsdHMiCisoIXR5cGUgYXJyYXkgNTI4IG5pbCAgZ2NfdXNlZCAiMSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDQ0NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgIiVoLmxlbiIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCispCiszOTAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDI1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiByZW9yZGVyIHN0cmluZyAgInJlc29ydF9zb3J0ZWRfZmllbGRzIikKKykKKykKKyghcGFpciAgImxhbWJkYV9leHByIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0MjcpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDM5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMSIpCispCispCisoIXBhaXIgICJwdHJtZW0iCisoIXR5cGUgc3RydWN0IDUyOSBuaWwgIGdjX3VzZWQgImxhbmdfdHlwZV9wdHJtZW0iCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0MzMpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1MTUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQzMSkKK25pbCApCisoIXBhaXIgICJyZWNvcmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQzMikKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDE0NDApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIwIikKKykKKykpCituaWwgMjYwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTQ0MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICIlaC5oLmlzX2xhbmdfdHlwZV9jbGFzcyIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB2YXJpYWJsZV9zaXplIHN0cmluZyAgIiIpCispCisyNjAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ4MykKKykKKworKCF0eXBlIHN0cnVjdCA1MzAgbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3R5cGUiCisoIXNyY2ZpbGVsb2MgICJjL2MtbGFuZy5oIiAzNikKKworKCFmaWVsZHMgNCAKKyghcGFpciAgInMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUyNikKKworKCFzcmNmaWxlbG9jICAiYy9jLWxhbmcuaCIgMjgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHJlb3JkZXIgc3RyaW5nICAicmVzb3J0X3NvcnRlZF9maWVsZHMiKQorKQorKQorKCFwYWlyICAiZW51bV9taW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMvYy1sYW5nLmgiIDMwKQorbmlsICkKKyghcGFpciAgImVudW1fbWF4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtbGFuZy5oIiAzMSkKK25pbCApCisoIXBhaXIgICJvYmpjX2luZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMvYy1sYW5nLmgiIDM1KQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHZhcmlhYmxlX3NpemUgc3RyaW5nICAiIikKKykKKzEzMCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDgzKQorKQorCisoIXR5cGUgc3RydWN0IDUzMSBuaWwgIGdjX3BvaW50ZWRfdG8gImxhbmdfdHlwZSIKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL2FkYS10cmVlLmgiIDQwKQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAidCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvYWRhLXRyZWUuaCIgNDApCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdmFyaWFibGVfc2l6ZSBzdHJpbmcgICIiKQorKQorMSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDgzKQorKQorKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIzODgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjYyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfVFlQRV9XSVRIX0xBTkdfU1BFQ0lGSUMiKQorKQorKQorKCFwYWlyICAidHlwZV9ub25fY29tbW9uIgorKCF0eXBlIHN0cnVjdCA1MzIgbmlsICBnY191c2VkICJ0cmVlX3R5cGVfbm9uX2NvbW1vbiIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjQzOSkKKworKCFmaWVsZHMgNSAKKyghcGFpciAgIndpdGhfbGFuZ19zcGVjaWZpYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDgxKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI0MzQpCituaWwgKQorKCFwYWlyICAidmFsdWVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI0MzUpCituaWwgKQorKCFwYWlyICAibWludmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI0MzYpCituaWwgKQorKCFwYWlyICAibWF4dmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI0MzcpCituaWwgKQorKCFwYWlyICAiYmluZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjQzOCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NjQpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19UWVBFX05PTl9DT01NT04iKQorKQorKQorKCFwYWlyICAibGlzdCIKKyghdHlwZSBzdHJ1Y3QgNTMzIG5pbCAgZ2NfdXNlZCAidHJlZV9saXN0IgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNTA2KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNTAzKQorbmlsICkKKyghcGFpciAgInB1cnBvc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTUwNCkKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNTA1KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY2NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0xJU1QiKQorKQorKQorKCFwYWlyICAidmVjIgorKCF0eXBlIHN0cnVjdCA1MzQgbmlsICBnY191c2VkICJ0cmVlX3ZlYyIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTUxOCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTUxNikKK25pbCApCisoIXBhaXIgICJhIgorKCF0eXBlIGFycmF5IDUzNSBuaWwgIGdjX3VzZWQgIjEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE1MTcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICJUUkVFX1ZFQ19MRU5HVEggKCh0cmVlKSYlaCkiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjY2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfVkVDIikKKykKKykKKyghcGFpciAgImV4cCIKKyghdHlwZSBzdHJ1Y3QgNTM2IG5pbCAgZ2NfdXNlZCAidHJlZV9leHAiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE4OTIpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJ0eXBlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTg4NykKK25pbCApCisoIXBhaXIgICJsb2N1cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxODg4KQorbmlsICkKKyghcGFpciAgIm9wZXJhbmRzIgorKCF0eXBlIHVuaW9uIDUzNyBuaWwgIGdjX3VzZWQgInRyZWVfZXhwX3N1YnVuaW9uIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxODkxKQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiIgorKCF0eXBlIGFycmF5IDUzOCBuaWwgIGdjX3VzZWQgIjEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiAxMzM3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWZhdWx0IHN0cmluZyAgIiIpCisKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICJUUkVFX09QRVJBTkRfTEVOR1RIICgodHJlZSkgJiUwKSIpCisKKyghb3B0aW9uIGRvdCBzdHJpbmcgICIiKQorKQorKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZG90IHN0cmluZyAgIiIpCispCis1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxODkxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIlRSRUVfQ09ERSAoKHRyZWUpICYlMCkiKQorCisoIW9wdGlvbiBzcGVjaWFsIHN0cmluZyAgInRyZWVfZXhwIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY2NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0VYUCIpCispCispCisoIXBhaXIgICJzc2FfbmFtZSIKKyghdHlwZSBzdHJ1Y3QgNTM5IG5pbCAgZ2NfdXNlZCAidHJlZV9zc2FfbmFtZSIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTk4MSkKKworKCFmaWVsZHMgNSAKKyghcGFpciAgInR5cGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNCkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxOTY4KQorbmlsICkKKyghcGFpciAgInZhciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxOTcxKQorbmlsICkKKyghcGFpciAgImRlZl9zdG10IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTk3NCkKK25pbCApCisoIXBhaXIgICJwdHJfaW5mbyIKKyghdHlwZSBwb2ludGVyIDU0MCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTQxIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1NDApCisgZ2NfcG9pbnRlZF90byAicHRyX2luZm9fZGVmIgorKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDE0OCkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInB0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMjIpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiAxMzApCituaWwgKQorKCFwYWlyICAiYWxpZ24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiAxNDIpCituaWwgKQorKCFwYWlyICAibWlzYWxpZ24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiAxNDcpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxOTc3KQorbmlsICkKKyghcGFpciAgImltbV91c2VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMzQpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTk4MCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NjgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19TU0FfTkFNRSIpCispCispCisoIXBhaXIgICJibG9jayIKKyghdHlwZSBzdHJ1Y3QgNTQyIG5pbCAgZ2NfdXNlZCAidHJlZV9ibG9jayIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjA5MikKKworKCFmaWVsZHMgMTIgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwNzYpCituaWwgKQorKCFwYWlyICAiY2hhaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjA3NykKK25pbCApCisoIXBhaXIgICJhYnN0cmFjdF9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwNzkpCituaWwgKQorKCFwYWlyICAiYmxvY2tfbnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwODApCituaWwgKQorKCFwYWlyICAibG9jdXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjA4MikKK25pbCApCisoIXBhaXIgICJ2YXJzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwODQpCituaWwgKQorKCFwYWlyICAibm9ubG9jYWxpemVkX3ZhcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwODUpCituaWwgKQorKCFwYWlyICAic3ViYmxvY2tzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwODcpCituaWwgKQorKCFwYWlyICAic3VwZXJjb250ZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwODgpCituaWwgKQorKCFwYWlyICAiYWJzdHJhY3Rfb3JpZ2luIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwODkpCituaWwgKQorKCFwYWlyICAiZnJhZ21lbnRfb3JpZ2luIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwOTApCituaWwgKQorKCFwYWlyICAiZnJhZ21lbnRfY2hhaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjA5MSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NjkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19CTE9DSyIpCispCispCisoIXBhaXIgICJiaW5mbyIKKyghdHlwZSBzdHJ1Y3QgNTQzIG5pbCAgZ2NfdXNlZCAidHJlZV9iaW5mbyIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjU1OCkKKworKCFmaWVsZHMgMTAgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI1NDUpCituaWwgKQorKCFwYWlyICAib2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI1NDcpCituaWwgKQorKCFwYWlyICAidnRhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI1NDgpCituaWwgKQorKCFwYWlyICAidmlydHVhbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjU0OSkKK25pbCApCisoIXBhaXIgICJ2cHRyX2ZpZWxkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI1NTApCituaWwgKQorKCFwYWlyICAiYmFzZV9hY2Nlc3NlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjU1MSkKK25pbCApCisoIXBhaXIgICJpbmhlcml0YW5jZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyNTUyKQorbmlsICkKKyghcGFpciAgInZ0dF9zdWJ2dHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjU1NCkKK25pbCApCisoIXBhaXIgICJ2dHRfdnB0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyNTU1KQorbmlsICkKKyghcGFpciAgImJhc2VfYmluZm9zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NikKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyNTU3KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY3MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0JJTkZPIikKKykKKykKKyghcGFpciAgInN0bXRfbGlzdCIKKyghdHlwZSBzdHJ1Y3QgNTQ0IG5pbCAgZ2NfdXNlZCAidHJlZV9zdGF0ZW1lbnRfbGlzdCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzU3OSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInR5cGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNCkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTc2KQorbmlsICkKKyghcGFpciAgImhlYWQiCisoIXR5cGUgcG9pbnRlciA1NDUgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDU0NiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTQ1KQorIGdjX3BvaW50ZWRfdG8gInRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzU3MikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInByZXYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU0NSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTY5KQorbmlsICkKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU0NSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTcwKQorbmlsICkKKyghcGFpciAgInN0bXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzU3MSkKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9wcmV2IHN0cmluZyAgIiVoLnByZXYiKQorCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIiVoLm5leHQiKQorKQorNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzU3NykKK25pbCApCisoIXBhaXIgICJ0YWlsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1NDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzU3OCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM2NzEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19TVEFURU1FTlRfTElTVCIpCispCispCisoIXBhaXIgICJjb25zdHJ1Y3RvciIKKyghdHlwZSBzdHJ1Y3QgNTQ3IG5pbCAgZ2NfdXNlZCAidHJlZV9jb25zdHJ1Y3RvciIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTU4MSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInR5cGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNCkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNTc5KQorbmlsICkKKyghcGFpciAgImVsdHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUwMCkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAxNTgwKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY3MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0NPTlNUUlVDVE9SIikKKykKKykKKyghcGFpciAgIm9tcF9jbGF1c2UiCisoIXR5cGUgc3RydWN0IDU0OCBuaWwgIGdjX3VzZWQgInRyZWVfb21wX2NsYXVzZSIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjAyMCkKKworKCFmaWVsZHMgNyAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjAwNSkKK25pbCApCisoIXBhaXIgICJsb2N1cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDA2KQorbmlsICkKKyghcGFpciAgImNvZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjAwNykKK25pbCApCisoIXBhaXIgICJzdWJjb2RlIgorKCF0eXBlIHVuaW9uIDU0OSBuaWwgIGdjX3VudXNlZCAib21wX2NsYXVzZV9zdWJjb2RlIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDEyKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiZGVmYXVsdF9raW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwMDkpCituaWwgKQorKCFwYWlyICAic2NoZWR1bGVfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDEwKQorbmlsICkKKyghcGFpciAgInJlZHVjdGlvbl9jb2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDIwMTEpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDEyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJnaW1wbGVfcmVkdWN0aW9uX2luaXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDE2KQorbmlsICkKKyghcGFpciAgImdpbXBsZV9yZWR1Y3Rpb25fbWVyZ2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDE3KQorbmlsICkKKyghcGFpciAgIm9wcyIKKyghdHlwZSBhcnJheSA1NTAgbmlsICBnY191c2VkICIxIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDE5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAib21wX2NsYXVzZV9udW1fb3BzW09NUF9DTEFVU0VfQ09ERSAoKHRyZWUpJiVoKV0iKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjczKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfT01QX0NMQVVTRSIpCispCispCisoIXBhaXIgICJvcHRpbWl6YXRpb24iCisoIXR5cGUgc3RydWN0IDU1MSBuaWwgIGdjX3VzZWQgInRyZWVfb3B0aW1pemF0aW9uX29wdGlvbiIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzU5NykKKworKCFmaWVsZHMgNCAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzU4NSkKK25pbCApCisoIXBhaXIgICJvcHRzIgorKCF0eXBlIHN0cnVjdCA1NTIgbmlsICBnY191c2VkICJjbF9vcHRpbWl6YXRpb24iCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM3MTYpCisKKyghZmllbGRzIDE4NSAKKyghcGFpciAgInhfYWxpZ25fZnVuY3Rpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1MzEpCituaWwgKQorKCFwYWlyICAieF9hbGlnbl9qdW1wcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTMyKQorbmlsICkKKyghcGFpciAgInhfYWxpZ25fbGFiZWxzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1MzMpCituaWwgKQorKCFwYWlyICAieF9hbGlnbl9sb29wcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTM0KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19zY2hlZF9zdGFsbGVkX2luc25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1MzUpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NjaGVkX3N0YWxsZWRfaW5zbnNfZGVwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1MzYpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2ZwX2NvbnRyYWN0X21vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzUzNykKK25pbCApCisoIXBhaXIgICJ4X29wdGltaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTM4KQorbmlsICkKKyghcGFpciAgInhfb3B0aW1pemVfc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzUzOSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfYWdncmVzc2l2ZV9sb29wX29wdGltaXphdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU0MCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfYXN5bmNocm9ub3VzX3Vud2luZF90YWJsZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU0MSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfYnJhbmNoX29uX2NvdW50X3JlZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTQyKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19icmFuY2hfcHJvYmFiaWxpdGllcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTQzKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19icmFuY2hfdGFyZ2V0X2xvYWRfb3B0aW1pemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU0NCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfYnJhbmNoX3RhcmdldF9sb2FkX29wdGltaXplMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTQ1KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19idHJfYmJfZXhjbHVzaXZlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NDYpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2NhbGxlcl9zYXZlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTQ3KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19jb21iaW5lX3N0YWNrX2FkanVzdG1lbnRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NDgpCituaWwgKQorKCFwYWlyICAieF9mbGFnX25vX2NvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTQ5KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19jb21wYXJlX2VsaW1fYWZ0ZXJfcmVsb2FkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NTApCituaWwgKQorKCFwYWlyICAieF9mbGFnX2NvbnNlcnZlX3N0YWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NTEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2Nwcm9wX3JlZ2lzdGVycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTUyKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19jcm9zc2p1bXBpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU1MykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfY3NlX2ZvbGxvd19qdW1wcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTU0KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19jeF9mb3J0cmFuX3J1bGVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NTUpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2N4X2xpbWl0ZWRfcmFuZ2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU1NikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfZGF0YV9zZWN0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTU3KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19kY2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU1OCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfZGVmZXJfcG9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NTkpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2RlbGF5ZWRfYnJhbmNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NjApCituaWwgKQorKCFwYWlyICAieF9mbGFnX2RlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NjEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2RldmlydHVhbGl6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTYyKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19kc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU2MykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfZWFybHlfaW5saW5pbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU2NCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfZXhjZXB0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTY1KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTY2KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19maW5pdGVfbWF0aF9vbmx5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NjcpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2Zsb2F0X3N0b3JlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NjgpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2ZvcndhcmRfcHJvcGFnYXRlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NjkpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2djc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU3MCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfZ2NzZV9hZnRlcl9yZWxvYWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU3MSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfZ2NzZV9sYXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU3MikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfZ2NzZV9sbSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTczKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19nY3NlX3NtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NzQpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2dyYXBoaXRlX2lkZW50aXR5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NzUpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2d1ZXNzX2JyYW5jaF9wcm9iIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NzYpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2hvaXN0X2FkamFjZW50X2xvYWRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1NzcpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2lmX2NvbnZlcnNpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU3OCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfaWZfY29udmVyc2lvbjIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU3OSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfbm9faW5saW5lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1ODApCituaWwgKQorKCFwYWlyICAieF9mbGFnX2lubGluZV9hdG9taWNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1ODEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2lubGluZV9mdW5jdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU4MikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfaW5saW5lX2Z1bmN0aW9uc19jYWxsZWRfb25jZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTgzKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19pbmxpbmVfc21hbGxfZnVuY3Rpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1ODQpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2lwYV9jcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTg1KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19pcGFfY3BfY2xvbmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU4NikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfaXBhX3Byb2ZpbGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU4NykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfaXBhX3B0YSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTg4KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19pcGFfcHVyZV9jb25zdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTg5KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19pcGFfcmVmZXJlbmNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1OTApCituaWwgKQorKCFwYWlyICAieF9mbGFnX2lwYV9zcmEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU5MSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfaXJhX2hvaXN0X3ByZXNzdXJlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1OTIpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2l2b3B0cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTkzKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19qdW1wX3RhYmxlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNTk0KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19sb29wX2Jsb2NrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1OTUpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2xvb3BfaW50ZXJjaGFuZ2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU5NikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfbG9vcF9vcHRpbWl6ZV9pc2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU5NykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfbG9vcF9wYXJhbGxlbGl6ZV9hbGwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzU5OCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfbG9vcF9zdHJpcF9taW5lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM1OTkpCituaWwgKQorKCFwYWlyICAieF9mbGFnX2Vycm5vX21hdGgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYwMCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfbWVyZ2VfY29uc3RhbnRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MDEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX21vZHVsb19zY2hlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjAyKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19tb3ZlX2xvb3BfaW52YXJpYW50cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjAzKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19ub25fY2FsbF9leGNlcHRpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MDQpCituaWwgKQorKCFwYWlyICAieF9mbGFnX25vdGhyb3dfb3B0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MDUpCituaWwgKQorKCFwYWlyICAieF9mbGFnX29taXRfZnJhbWVfcG9pbnRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjA2KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19vcHRfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjA3KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19yZWdtb3ZlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MDgpCituaWwgKQorKCFwYWlyICAieF9mbGFnX29wdGltaXplX3NpYmxpbmdfY2FsbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYwOSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfb3B0aW1pemVfc3RybGVuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MTApCituaWwgKQorKCFwYWlyICAieF9mbGFnX3BhY2tfc3RydWN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MTEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3BlZWxfbG9vcHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYxMikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfbm9fcGVlcGhvbGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYxMykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfcGVlcGhvbGUyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MTQpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3ByZWRpY3RpdmVfY29tbW9uaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MTUpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3ByZWZldGNoX2xvb3BfYXJyYXlzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MTYpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3BjY19zdHJ1Y3RfcmV0dXJuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MTcpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3JlbmFtZV9yZWdpc3RlcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYxOCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfcmVvcmRlcl9ibG9ja3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYxOSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfcmVvcmRlcl9ibG9ja3NfYW5kX3BhcnRpdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjIwKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19yZW9yZGVyX2Z1bmN0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjIxKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19yZXJ1bl9jc2VfYWZ0ZXJfbG9vcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjIyKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19yZXNjaGVkX21vZHVsb19zY2hlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjIzKQorbmlsICkKKyghcGFpciAgInhfZmxhZ19yb3VuZGluZ19tYXRoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MjQpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3J0dGkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYyNSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2NoZWRfY3JpdGljYWxfcGF0aF9oZXVyaXN0aWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYyNikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2NoZWRfZGVwX2NvdW50X2hldXJpc3RpYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjI3KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19zY2hlZF9ncm91cF9oZXVyaXN0aWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYyOCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2NoZWR1bGVfaW50ZXJibG9jayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjI5KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19zY2hlZF9sYXN0X2luc25faGV1cmlzdGljIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MzApCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NjaGVkX3ByZXNzdXJlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MzEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NjaGVkX3JhbmtfaGV1cmlzdGljIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MzIpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MzMpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NjaGVkX3NwZWNfaW5zbl9oZXVyaXN0aWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzYzNCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2NoZWR1bGVfc3BlY3VsYXRpdmVfbG9hZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjM1KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19zY2hlZHVsZV9zcGVjdWxhdGl2ZV9sb2FkX2Rhbmdlcm91cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjM2KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19zY2hlZDJfdXNlX3N1cGVyYmxvY2tzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MzcpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NjaGVkdWxlX2luc25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2MzgpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NjaGVkdWxlX2luc25zX2FmdGVyX3JlbG9hZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjM5KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19zZWN0aW9uX2FuY2hvcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY0MCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2VsX3NjaGVkX3BpcGVsaW5pbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY0MSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2VsX3NjaGVkX3BpcGVsaW5pbmdfb3V0ZXJfbG9vcHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY0MikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2VsX3NjaGVkX3Jlc2NoZWR1bGVfcGlwZWxpbmVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NDMpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NlbGVjdGl2ZV9zY2hlZHVsaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NDQpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NlbGVjdGl2ZV9zY2hlZHVsaW5nMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjQ1KQorbmlsICkKKyghcGFpciAgInhfZmxhZ19zaG9ydF9kb3VibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY0NikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2hvcnRfZW51bXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY0NykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2hvcnRfd2NoYXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY0OCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2hyaW5rX3dyYXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY0OSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2lnbmFsaW5nX25hbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY1MCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc2lnbmVkX3plcm9zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NTEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NpbmdsZV9wcmVjaXNpb25fY29uc3RhbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY1MikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc3BsaXRfaXZzX2luX3Vucm9sbGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NTMpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3NwbGl0X3dpZGVfdHlwZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY1NCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc3RyaWN0X2FsaWFzaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NTUpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3N0cmljdF9lbnVtcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjU2KQorbmlsICkKKyghcGFpciAgInhfZmxhZ190aHJlYWRfanVtcHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY1NykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdGhyZWFkc2FmZV9zdGF0aWNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NTgpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RvcGxldmVsX3Jlb3JkZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY1OSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJhcHBpbmdfbWF0aCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjYwKQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmFwdiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjYxKQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX2JpdF9jY3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY2MikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9idWlsdGluX2NhbGxfZGNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NjMpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfY2NwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NjQpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfY2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY2NSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfc3NhX2NvYWxlc2NlX3ZhcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY2NikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9jb3B5X3Byb3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY2NykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9jb3B5cmVuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NjgpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfY3NlbGltIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NjkpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfZGNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NzApCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfZG9tIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NzEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfZHNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NzIpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfZm9yd3Byb3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY3MykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9mcmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY3NCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9sb29wX2Rpc3RyaWJ1dGVfcGF0dGVybnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY3NSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9sb29wX2Rpc3RyaWJ1dGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjc2KQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX2xvb3BfaWZfY29udmVydCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjc3KQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX2xvb3BfaWZfY29udmVydF9zdG9yZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY3OCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9sb29wX2ltIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2NzkpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfbG9vcF9pdmNhbm9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2ODApCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfbG9vcF9vcHRpbWl6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjgxKQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX2xpdmVfcmFuZ2Vfc3BsaXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY4MikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9wYXJ0aWFsX3ByZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjgzKQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX3BoaXByb3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY4NCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9wcmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY4NSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9wdGEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY4NikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9yZWFzc29jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2ODcpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfc2Nldl9jcHJvcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjg4KQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX3NpbmsiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzY4OSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdHJlZV9zbHBfdmVjdG9yaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2OTApCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfc2xzciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjkxKQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX3NyYSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjkyKQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX3N3aXRjaF9jb252ZXJzaW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2OTMpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfdGFpbF9tZXJnZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjk0KQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX3RlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNjk1KQorbmlsICkKKyghcGFpciAgInhfZmxhZ190cmVlX3ZlY3RfbG9vcF92ZXJzaW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2OTYpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfdmVjdG9yaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2OTcpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3RyZWVfdnJwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2OTgpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3VuaXRfYXRfYV90aW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM2OTkpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3Vucm9sbF9hbGxfbG9vcHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzcwMCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdW5yb2xsX2xvb3BzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM3MDEpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3Vuc2FmZV9sb29wX29wdGltaXphdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzcwMikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNzAzKQorbmlsICkKKyghcGFpciAgInhfZmxhZ191bnN3aXRjaF9sb29wcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNzA0KQorbmlsICkKKyghcGFpciAgInhfZmxhZ191bndpbmRfdGFibGVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM3MDUpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3Zhcl90cmFja2luZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNzA2KQorbmlsICkKKyghcGFpciAgInhfZmxhZ192YXJfdHJhY2tpbmdfYXNzaWdubWVudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzcwNykKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzX3RvZ2dsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNzA4KQorbmlsICkKKyghcGFpciAgInhfZmxhZ192YXJfdHJhY2tpbmdfdW5pbml0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM3MDkpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3ZhcmlhYmxlX2V4cGFuc2lvbl9pbl91bnJvbGxlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNzEwKQorbmlsICkKKyghcGFpciAgInhfZmxhZ192ZWN0X2Nvc3RfbW9kZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzcxMSkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfdmFsdWVfcHJvZmlsZV90cmFuc2Zvcm1hdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzcxMikKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfd2ViIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM3MTMpCituaWwgKQorKCFwYWlyICAieF9mbGFnX3dob2xlX3Byb2dyYW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzcxNCkKK25pbCApCisoIXBhaXIgICJ4X2ZsYWdfd3JhcHYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghZmlsZWxvYyAgIm9wdGlvbnMuaCIgMzcxNSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM1ODgpCituaWwgKQorKCFwYWlyICAib3B0YWJzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNTkyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBhdG9taWMgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImJhc2Vfb3B0YWJzIgorKCF0eXBlIHBvaW50ZXIgNTUzIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDU1NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTUzKQorIGdjX3VudXNlZCAidGFyZ2V0X29wdGFicyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzU5NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjc0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfT1BUSU1JWkFUSU9OIikKKykKKykKKyghcGFpciAgInRhcmdldF9vcHRpb24iCisoIXR5cGUgc3RydWN0IDU1NSBuaWwgIGdjX3VzZWQgInRyZWVfdGFyZ2V0X29wdGlvbiIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzYyMCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzYxNikKK25pbCApCisoIXBhaXIgICJvcHRzIgorKCF0eXBlIHN0cnVjdCA1NTYgbmlsICBnY191c2VkICJjbF90YXJnZXRfb3B0aW9uIgorKCFmaWxlbG9jICAib3B0aW9ucy5oIiAzNzIyKQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAieF9mbGFnX29taXRfbGVhZl9mcmFtZV9wb2ludGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIWZpbGVsb2MgICJvcHRpb25zLmgiIDM3MjEpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAzNjE5KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMzY3NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX1RBUkdFVF9PUFRJT04iKQorKQorKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdmFyaWFibGVfc2l6ZSBzdHJpbmcgICIiKQorCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgInRyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKQorCisoIW9wdGlvbiBwdHJfYWxpYXMgdHlwZSAKKyghdHlwZSBsYW5nX3N0cnVjdCA1NTcgbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3RyZWVfbm9kZSIKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL2FkYS10cmVlLmgiIDMzKQorCisoIWZpZWxkcyAwICkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICJDT0RFX0NPTlRBSU5TX1NUUlVDVCAoVFJFRV9DT0RFICgmJWguZ2VuZXJpYyksIFRTX0NPTU1PTikgPyAoKHVuaW9uIGxhbmdfdHJlZV9ub2RlICopIFRSRUVfQ0hBSU4gKCYlaC5nZW5lcmljKSkgOiBOVUxMIikKKworKCFvcHRpb24gZGVzYyBzdHJpbmcgICIwIikKKykKKzUxMSAoIWhvbW90eXBlcyA3CisKKyghdHlwZSB1bmlvbiA1NTggbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3RyZWVfbm9kZSIKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tdHJlZS5oIiA1NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImdlbmVyaWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcpCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tdHJlZS5oIiA1NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJ0cmVlX25vZGVfc3RydWN0dXJlICgmJWgpIikKKworKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0xUT19HRU5FUklDIikKKykKKykpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiQ09ERV9DT05UQUlOU19TVFJVQ1QgKFRSRUVfQ09ERSAoJiVoLmdlbmVyaWMpLCBUU19DT01NT04pID8gKCh1bmlvbiBsYW5nX3RyZWVfbm9kZSAqKSBUUkVFX0NIQUlOICgmJWguZ2VuZXJpYykpIDogTlVMTCIpCisKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAibHRvX3RyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKQorKQorNjQgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU1NykKKykKKworKCF0eXBlIHVuaW9uIDU1OSBuaWwgIGdjX3BvaW50ZWRfdG8gImxhbmdfdHJlZV9ub2RlIgorKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNTk2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZ2VuZXJpYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNTk0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgInRyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKQorCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMCIpCispCispCisoIXBhaXIgICJpZGVudGlmaWVyIgorKCF0eXBlIGxhbmdfc3RydWN0IDU2MCBuaWwgIGdjX3VzZWQgImxhbmdfaWRlbnRpZmllciIKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDIzMikKKworKCFmaWVsZHMgMCApCituaWwgNTEwICghaG9tb3R5cGVzIDYKKworKCF0eXBlIHN0cnVjdCA1NjEgbmlsICBnY191c2VkICJsYW5nX2lkZW50aWZpZXIiCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLXRyZWUuaCIgMjkpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMikKKworKCFzcmNmaWxlbG9jICAibHRvL2x0by10cmVlLmgiIDI4KQorbmlsICkpCituaWwgNjQgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU2MCkKKykKKworKCF0eXBlIHN0cnVjdCA1NjIgbmlsICBnY191c2VkICJsYW5nX2lkZW50aWZpZXIiCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA1ODUpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJpZ25vcmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMyKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA1NzgpCituaWwgKQorKCFwYWlyICAiZ2xvYmFsX3ZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiA1NzkpCituaWwgKQorKCFwYWlyICAibG9jYWxfdmFsdWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDU4MCkKK25pbCApCisoIXBhaXIgICJ1dGY4X3JlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNTg0KQorbmlsICkpCituaWwgMzIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU2MCkKKykKKworKCF0eXBlIHN0cnVjdCA1NjMgbmlsICBnY191c2VkICJsYW5nX2lkZW50aWZpZXIiCisoIXNyY2ZpbGVsb2MgICJnby9nby1sYW5nLmMiIDY0KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMikKKworKCFzcmNmaWxlbG9jICAiZ28vZ28tbGFuZy5jIiA2MykKK25pbCApKQorbmlsIDE2IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1NjApCispCisKKyghdHlwZSBzdHJ1Y3QgNTY0IG5pbCAgZ2NfdXNlZCAibGFuZ19pZGVudGlmaWVyIgorKCFzcmNmaWxlbG9jICAiZm9ydHJhbi9mOTUtbGFuZy5jIiA1NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzIpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vZjk1LWxhbmcuYyIgNTUpCituaWwgKSkKK25pbCA4IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1NjApCispCisKKyghdHlwZSBzdHJ1Y3QgNTY1IG5pbCAgZ2NfdXNlZCAibGFuZ19pZGVudGlmaWVyIgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAyNDQpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJjX2NvbW1vbiIKKyghdHlwZSBzdHJ1Y3QgNTY2IG5pbCAgZ2NfdXNlZCAiY19jb21tb25faWRlbnRpZmllciIKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDMxNykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDMxNSkKK25pbCApCisoIXBhaXIgICJub2RlIgorKCF0eXBlIHN0cnVjdCA1NjcgCisoIXR5cGUgcG9pbnRlciA1NjggCisoIXR5cGUgcG9pbnRlciA1NjkgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTY4KQorKQorIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA1NjcpCispCisgZ2NfdXNlZCAiY3BwX2hhc2hub2RlIgorKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDY5NikKKworKCFmaWVsZHMgNyAKKyghcGFpciAgImlkZW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMykKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDY4NikKK25pbCApCisoIXBhaXIgICJpc19kaXJlY3RpdmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiA2ODcpCituaWwgKQorKCFwYWlyICAiZGlyZWN0aXZlX2luZGV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgNjg4KQorbmlsICkKKyghcGFpciAgInJpZF9jb2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOCkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDY5MSkKK25pbCApCisoIXBhaXIgICJ0eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgNjkyKQorbmlsICkKKyghcGFpciAgImZsYWdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgNjkzKQorbmlsICkKKyghcGFpciAgInZhbHVlIgorKCF0eXBlIHVuaW9uIDU3MCBuaWwgIGdjX3VzZWQgIl9jcHBfaGFzaG5vZGVfdmFsdWUiCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgNjgzKQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAibWFjcm8iCisoIXR5cGUgcG9pbnRlciA1NzEgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDU3MiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTcxKQorIGdjX3BvaW50ZWRfdG8gImNwcF9tYWNybyIKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcC1pZC1kYXRhLmgiIDgwKQorCisoIWZpZWxkcyAxMSAKKyghcGFpciAgInBhcmFtcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTY5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHAtaWQtZGF0YS5oIiA0MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgIiVoLnBhcmFtYyIpCisKKyghb3B0aW9uIG5lc3RlZF9wdHIgbmVzdGVkIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3KQorICIlaCA/IEhUX0lERU5UX1RPX0dDQ19JREVOVCAoSFRfTk9ERSAoJWgpKSA6IE5VTEwiICIlaCA/IENQUF9IQVNITk9ERSAoR0NDX0lERU5UX1RPX0hUX0lERU5UICglaCkpIDogTlVMTCIpCispCispCisoIXBhaXIgICJleHAiCisoIXR5cGUgdW5pb24gNTczIG5pbCAgZ2NfdXNlZCAiY3BwX21hY3JvX3UiCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHAtaWQtZGF0YS5oIiA1MCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInRva2VucyIKKyghdHlwZSBwb2ludGVyIDU3NCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTc1IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1NzQpCisgZ2NfcG9pbnRlZF90byAiY3BwX3Rva2VuIgorKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDI0NykKKworKCFmaWVsZHMgNCAKKyghcGFpciAgInNyY19sb2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAyMjIpCituaWwgKQorKCFwYWlyICAidHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDIyMykKK25pbCApCisoIXBhaXIgICJmbGFncyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDIyNCkKK25pbCApCisoIXBhaXIgICJ2YWwiCisoIXR5cGUgdW5pb24gNTc2IG5pbCAgZ2NfdXNlZCAiY3BwX3Rva2VuX3UiCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMjQ2KQorCisoIWZpZWxkcyA2IAorKCFwYWlyICAibm9kZSIKKyghdHlwZSBzdHJ1Y3QgNTc3IG5pbCAgZ2NfdXNlZCAiY3BwX2lkZW50aWZpZXIiCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMjE3KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAibm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTY4KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMjE2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBuZXN0ZWRfcHRyIG5lc3RlZCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKyAiJWggPyBIVF9JREVOVF9UT19HQ0NfSURFTlQgKEhUX05PREUgKCVoKSkgOiBOVUxMIiAiJWggPyBDUFBfSEFTSE5PREUgKEdDQ19JREVOVF9UT19IVF9JREVOVCAoJWgpKSA6IE5VTEwiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDIyOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNQUF9UT0tFTl9GTERfTk9ERSIpCispCispCisoIXBhaXIgICJzb3VyY2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU3NCkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDIzMikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNQUF9UT0tFTl9GTERfU09VUkNFIikKKykKKykKKyghcGFpciAgInN0ciIKKyghdHlwZSBzdHJ1Y3QgNTc4IG5pbCAgZ2NfdXNlZCAiY3BwX3N0cmluZyIKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAxNzQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJsZW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAxNzIpCituaWwgKQorKCFwYWlyICAidGV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAxNzMpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDIzNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNQUF9UT0tFTl9GTERfU1RSIikKKykKKykKKyghcGFpciAgIm1hY3JvX2FyZyIKKyghdHlwZSBzdHJ1Y3QgNTc5IG5pbCAgZ2NfdXNlZCAiY3BwX21hY3JvX2FyZyIKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAyMDcpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJhcmdfbm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAyMDYpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDIzOCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIkNQUF9UT0tFTl9GTERfQVJHX05PIikKKykKKykKKyghcGFpciAgInRva2VuX25vIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMjQyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiQ1BQX1RPS0VOX0ZMRF9UT0tFTl9OTyIpCispCispCisoIXBhaXIgICJwcmFnbWEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAyNDUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJDUFBfVE9LRU5fRkxEX1BSQUdNQSIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMjQ2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgImNwcF90b2tlbl92YWxfaW5kZXggKCYlMSkiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwLWlkLWRhdGEuaCIgNDgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIlMC5jb3VudCIpCisKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIwIikKKykKKykKKyghcGFpciAgInRleHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHAtaWQtZGF0YS5oIiA0OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjEiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwLWlkLWRhdGEuaCIgNTApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiJTEudHJhZGl0aW9uYWwiKQorKQorKQorKCFwYWlyICAibGluZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwLWlkLWRhdGEuaCIgNTMpCituaWwgKQorKCFwYWlyICAiY291bnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcC1pZC1kYXRhLmgiIDU2KQorbmlsICkKKyghcGFpciAgInBhcmFtYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwLWlkLWRhdGEuaCIgNTkpCituaWwgKQorKCFwYWlyICAiZnVuX2xpa2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcC1pZC1kYXRhLmgiIDYyKQorbmlsICkKKyghcGFpciAgInZhcmlhZGljIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHAtaWQtZGF0YS5oIiA2NSkKK25pbCApCisoIXBhaXIgICJzeXNoZHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcC1pZC1kYXRhLmgiIDY4KQorbmlsICkKKyghcGFpciAgInVzZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcC1pZC1kYXRhLmgiIDcxKQorbmlsICkKKyghcGFpciAgInRyYWRpdGlvbmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHAtaWQtZGF0YS5oIiA3NCkKK25pbCApCisoIXBhaXIgICJleHRyYV90b2tlbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcC1pZC1kYXRhLmgiIDc5KQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiA2NzYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOVFZfTUFDUk8iKQorKQorKQorKCFwYWlyICAiYW5zd2VycyIKKyghdHlwZSBwb2ludGVyIDU4MCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTgxIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODApCisgZ2NfcG9pbnRlZF90byAiYW5zd2VyIgorKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwLWlkLWRhdGEuaCIgMzEpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJuZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODApCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcC1pZC1kYXRhLmgiIDI4KQorbmlsICkKKyghcGFpciAgImNvdW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHAtaWQtZGF0YS5oIiAyOSkKK25pbCApCisoIXBhaXIgICJmaXJzdCIKKyghdHlwZSBhcnJheSA1ODIgbmlsICBnY191c2VkICIxIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTc1KQorKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHAtaWQtZGF0YS5oIiAzMCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgIiVoLmNvdW50IikKKykKKykpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiA2NzgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOVFZfQU5TV0VSIikKKykKKykKKyghcGFpciAgImJ1aWx0aW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiA2ODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOVFZfQlVJTFRJTiIpCispCispCisoIXBhaXIgICJhcmdfaW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiA2ODIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJOVFZfQVJHVU1FTlQiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDY5NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJDUFBfSEFTSE5PREVfVkFMVUVfSURYICglMSkiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uaCIgMzE2KQorbmlsICkpCituaWwgMzkwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjM5KQorbmlsICkKKyghcGFpciAgIm5hbWVzcGFjZV9iaW5kaW5ncyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjQwKQorbmlsICkKKyghcGFpciAgImJpbmRpbmdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5OSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAyNDEpCituaWwgKQorKCFwYWlyICAiY2xhc3NfdGVtcGxhdGVfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAyNDIpCituaWwgKQorKCFwYWlyICAibGFiZWxfdmFsdWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjQzKQorbmlsICkpCituaWwgMjYwIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1NjApCispCisKKyghdHlwZSBzdHJ1Y3QgNTgzIG5pbCAgZ2NfdXNlZCAibGFuZ19pZGVudGlmaWVyIgorKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMjMyKQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiY29tbW9uX2lkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1NjYpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDIyOCkKK25pbCApCisoIXBhaXIgICJzeW1ib2xfYmluZGluZyIKKyghdHlwZSBwb2ludGVyIDU4NCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTg1IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODQpCisgZ2NfcG9pbnRlZF90byAiY19iaW5kaW5nIgorKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMjAyKQorCisoIWZpZWxkcyAxMSAKKyghcGFpciAgInUiCisoIXR5cGUgdW5pb24gNTg2IG5pbCAgZ2NfdXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL2MvYy1kZWNsLmM6MTg4IgorKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMTkxKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMTg5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMCIpCispCispCisoIXBhaXIgICJsYWJlbCIKKyghdHlwZSBwb2ludGVyIDU4NyBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTg4IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODcpCisgZ2NfcG9pbnRlZF90byAiY19sYWJlbF92YXJzIgorKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMzA2KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAic2hhZG93ZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU4NykKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMjk0KQorbmlsICkKKyghcGFpciAgImxhYmVsX2JpbmRpbmdzIgorKCF0eXBlIHN0cnVjdCA1ODkgbmlsICBnY191c2VkICJjX3Nwb3RfYmluZGluZ3MiCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyNzMpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJzY29wZSIKKyghdHlwZSBwb2ludGVyIDU5MCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNTkxIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1OTApCisgZ2NfcG9pbnRlZF90byAiY19zY29wZSIKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDQwOCkKKworKCFmaWVsZHMgMTQgCisoIXBhaXIgICJvdXRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTkwKQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAzNTUpCituaWwgKQorKCFwYWlyICAib3V0ZXJfZnVuY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5MCkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMzU4KQorbmlsICkKKyghcGFpciAgImJpbmRpbmdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODQpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDM2MSkKK25pbCApCisoIXBhaXIgICJibG9ja3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDM2NSkKK25pbCApCisoIXBhaXIgICJibG9ja3NfbGFzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMzY2KQorbmlsICkKKyghcGFpciAgImRlcHRoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAzNzApCituaWwgKQorKCFwYWlyICAicGFybV9mbGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAzNzQpCituaWwgKQorKCFwYWlyICAiaGFkX3ZsYV91bnNwZWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDM3OCkKK25pbCApCisoIXBhaXIgICJ3YXJuZWRfZm9yd2FyZF9wYXJtX2RlY2xzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAzODMpCituaWwgKQorKCFwYWlyICAiZnVuY3Rpb25fYm9keSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMzg5KQorbmlsICkKKyghcGFpciAgImtlZXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDM5MikKK25pbCApCisoIXBhaXIgICJmbG9hdF9jb25zdF9kZWNpbWFsNjQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDM5NSkKK25pbCApCisoIXBhaXIgICJoYXNfbGFiZWxfYmluZGluZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDQwMCkKK25pbCApCisoIXBhaXIgICJoYXNfanVtcF91bnNhZmVfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDA3KQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiJWgub3V0ZXIiKQorKQorMTMwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDI1OCkKK25pbCApCisoIXBhaXIgICJiaW5kaW5nc19pbl9zY29wZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTg0KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyNjIpCituaWwgKQorKCFwYWlyICAic3RtdF9leHBycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMjY5KQorbmlsICkKKyghcGFpciAgImxlZnRfc3RtdF9leHByIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyNzIpCituaWwgKSkKK25pbCAxMzAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMjk2KQorbmlsICkKKyghcGFpciAgImRlY2xzX2luX3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMzAxKQorbmlsICkKKyghcGFpciAgImdvdG9zIgorKCF0eXBlIHBvaW50ZXIgNTkyIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDU5MyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTkyKQorIGdjX3BvaW50ZWRfdG8gInZlYzxjX2dvdG9fYmluZGluZ3NfcCx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAzMDUpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMzA1KQorbmlsICkKKyghcGFpciAgImNfZ290b19iaW5kaW5nc19wIgorKCF0eXBlIHBvaW50ZXIgNTk0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA1OTUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5NCkKKyBnY19wb2ludGVkX3RvICJjX2dvdG9fYmluZGluZ3MiCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyODQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJsb2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDI4MSkKK25pbCApCisoIXBhaXIgICJnb3RvX2JpbmRpbmdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDI4MykKK25pbCApKQorbmlsIDEzMCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAzMDUpCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMzA1KQorbmlsICkpCituaWwgMTMwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDE5MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjEiKQorKQorKSkKK25pbCAxMzAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgMTkxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIlRSRUVfQ09ERSAoJTAuZGVjbCkgPT0gTEFCRUxfREVDTCIpCispCispCisoIXBhaXIgICJkZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAxOTIpCituaWwgKQorKCFwYWlyICAiaWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDE5MykKK25pbCApCisoIXBhaXIgICJwcmV2IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODQpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDE5NCkKK25pbCApCisoIXBhaXIgICJzaGFkb3dlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTg0KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAxOTUpCituaWwgKQorKCFwYWlyICAiZGVwdGgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDE5NikKK25pbCApCisoIXBhaXIgICJpbnZpc2libGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDE5NykKK25pbCApCisoIXBhaXIgICJuZXN0ZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDE5OCkKK25pbCApCisoIXBhaXIgICJpbm5lcl9jb21wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAxOTkpCituaWwgKQorKCFwYWlyICAiaW5fc3RydWN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyMDApCituaWwgKQorKCFwYWlyICAibG9jdXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDIwMSkKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIiVoLnByZXYiKQorKQorMTMwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDIyOSkKK25pbCApCisoIXBhaXIgICJ0YWdfYmluZGluZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTg0KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyMzApCituaWwgKQorKCFwYWlyICAibGFiZWxfYmluZGluZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTg0KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyMzEpCituaWwgKSkKK25pbCAxMzAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU2MCkKKykKKykKKykKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgNTk1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMSIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIkNPREVfQ09OVEFJTlNfU1RSVUNUIChUUkVFX0NPREUgKCYlaC5nZW5lcmljKSwgVFNfQ09NTU9OKSA/ICgodW5pb24gbGFuZ190cmVlX25vZGUgKikgVFJFRV9DSEFJTiAoJiVoLmdlbmVyaWMpKSA6IE5VTEwiKQorCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIlRSRUVfQ09ERSAoJiVoLmdlbmVyaWMpID09IElERU5USUZJRVJfTk9ERSIpCispCiszMiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTU3KQorKQorCisoIXR5cGUgdW5pb24gNTk2IG5pbCAgZ2NfcG9pbnRlZF90byAibGFuZ190cmVlX25vZGUiCisoIXNyY2ZpbGVsb2MgICJnby9nby1sYW5nLmMiIDc1KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZ2VuZXJpYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKworKCFzcmNmaWxlbG9jICAiZ28vZ28tbGFuZy5jIiA3MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJ0cmVlX25vZGVfc3RydWN0dXJlICgmJWgpIikKKworKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKQorKCFwYWlyICAiaWRlbnRpZmllciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTYwKQorCisoIXNyY2ZpbGVsb2MgICJnby9nby1sYW5nLmMiIDc0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMSIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIkNPREVfQ09OVEFJTlNfU1RSVUNUIChUUkVFX0NPREUgKCYlaC5nZW5lcmljKSwgVFNfQ09NTU9OKSA/ICgodW5pb24gbGFuZ190cmVlX25vZGUgKikgVFJFRV9DSEFJTiAoJiVoLmdlbmVyaWMpKSA6IE5VTEwiKQorCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIlRSRUVfQ09ERSAoJiVoLmdlbmVyaWMpID09IElERU5USUZJRVJfTk9ERSIpCispCisxNiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTU3KQorKQorCisoIXR5cGUgdW5pb24gNTk3IG5pbCAgZ2NfcG9pbnRlZF90byAibGFuZ190cmVlX25vZGUiCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL2Y5NS1sYW5nLmMiIDY2KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZ2VuZXJpYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi9mOTUtbGFuZy5jIiA2NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJ0cmVlX25vZGVfc3RydWN0dXJlICgmJWgpIikKKworKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKQorKCFwYWlyICAiaWRlbnRpZmllciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTYwKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL2Y5NS1sYW5nLmMiIDY1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiMSIpCispCispKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIkNPREVfQ09OVEFJTlNfU1RSVUNUIChUUkVFX0NPREUgKCYlaC5nZW5lcmljKSwgVFNfQ09NTU9OKSA/ICgodW5pb24gbGFuZ190cmVlX25vZGUgKikgVFJFRV9DSEFJTiAoJiVoLmdlbmVyaWMpKSA6IE5VTEwiKQorCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIlRSRUVfQ09ERSAoJiVoLmdlbmVyaWMpID09IElERU5USUZJRVJfTk9ERSIpCispCis4IAorKCF0eXBlIGFscmVhZHlfc2VlbiA1NTcpCispCisKKyghdHlwZSB1bmlvbiA1OTggbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3RyZWVfbm9kZSIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzk4KQorCisoIWZpZWxkcyAxNCAKKyghcGFpciAgImdlbmVyaWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzc4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgInRyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKQorCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfQ1BfR0VORVJJQyIpCispCispCisoIXBhaXIgICJ0cGkiCisoIXR5cGUgc3RydWN0IDU5OSBuaWwgIGdjX3VzZWQgInRlbXBsYXRlX3Bhcm1faW5kZXhfcyIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjYxKQorCisoIWZpZWxkcyA1IAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAyNTYpCituaWwgKQorKCFwYWlyICAiaW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjU3KQorbmlsICkKKyghcGFpciAgImxldmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDI1OCkKK25pbCApCisoIXBhaXIgICJvcmlnX2xldmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDI1OSkKK25pbCApCisoIXBhaXIgICJkZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDI2MCkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc3OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0NQX1RQSSIpCispCispCisoIXBhaXIgICJwdHJtZW0iCisoIXR5cGUgc3RydWN0IDYwMCAKKyghdHlwZSBwb2ludGVyIDYwMSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA2MDApCispCisgZ2NfdXNlZCAicHRybWVtX2NzdCIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjY3KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAyNjUpCituaWwgKQorKCFwYWlyICAibWVtYmVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDI2NikKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0NQX1BUUk1FTSIpCispCispCisoIXBhaXIgICJvdmVybG9hZCIKKyghdHlwZSBzdHJ1Y3QgNjAyIG5pbCAgZ2NfdXNlZCAidHJlZV9vdmVybG9hZCIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMzQyKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAzNDApCituaWwgKQorKCFwYWlyICAiZnVuY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMzQxKQorbmlsICkpCituaWwgMjYwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzgxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfQ1BfT1ZFUkxPQUQiKQorKQorKQorKCFwYWlyICAiYmFzZWxpbmsiCisoIXR5cGUgc3RydWN0IDYwMyBuaWwgIGdjX3VzZWQgInRyZWVfYmFzZWxpbmsiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDM3NSkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMzcxKQorbmlsICkKKyghcGFpciAgImJpbmZvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDM3MikKK25pbCApCisoIXBhaXIgICJmdW5jdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMzczKQorbmlsICkKKyghcGFpciAgImFjY2Vzc19iaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAzNzQpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3ODIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19DUF9CQVNFTElOSyIpCispCispCisoIXBhaXIgICJkZWZhdWx0X2FyZyIKKyghdHlwZSBzdHJ1Y3QgNjA0IG5pbCAgZ2NfdXNlZCAidHJlZV9kZWZhdWx0X2FyZyIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNTQwKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1MzcpCituaWwgKQorKCFwYWlyICAidG9rZW5zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NCkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1MzgpCituaWwgKQorKCFwYWlyICAiaW5zdGFudGlhdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDUzOSkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc4MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0NQX0RFRkFVTFRfQVJHIikKKykKKykKKyghcGFpciAgImRlZmVycmVkX25vZXhjZXB0IgorKCF0eXBlIHN0cnVjdCA2MDUgbmlsICBnY191c2VkICJ0cmVlX2RlZmVycmVkX25vZXhjZXB0IgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1NTYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU1MykKK25pbCApCisoIXBhaXIgICJwYXR0ZXJuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU1NCkKK25pbCApCisoIXBhaXIgICJhcmdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU1NSkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc4NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0NQX0RFRkVSUkVEX05PRVhDRVBUIikKKykKKykKKyghcGFpciAgImlkZW50aWZpZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU2MCkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3ODUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19DUF9JREVOVElGSUVSIikKKykKKykKKyghcGFpciAgInN0YXRpY19hc3NlcnRpb24iCisoIXR5cGUgc3RydWN0IDYwNiBuaWwgIGdjX3VzZWQgInRyZWVfc3RhdGljX2Fzc2VydCIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNTc5KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiY29tbW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1NzUpCituaWwgKQorKCFwYWlyICAiY29uZGl0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU3NikKK25pbCApCisoIXBhaXIgICJtZXNzYWdlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU3NykKK25pbCApCisoIXBhaXIgICJsb2NhdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1NzgpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3ODcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19DUF9TVEFUSUNfQVNTRVJUIikKKykKKykKKyghcGFpciAgImFyZ3VtZW50X3BhY2tfc2VsZWN0IgorKCF0eXBlIHN0cnVjdCA2MDcgbmlsICBnY191c2VkICJ0cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0IgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1ODUpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU4MikKK25pbCApCisoIXBhaXIgICJhcmd1bWVudF9wYWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU4MykKK25pbCApCisoIXBhaXIgICJpbmRleCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1ODQpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3ODkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19DUF9BUkdVTUVOVF9QQUNLX1NFTEVDVCIpCispCispCisoIXBhaXIgICJ0cmFpdF9leHByZXNzaW9uIgorKCF0eXBlIHN0cnVjdCA2MDggbmlsICBnY191c2VkICJ0cmVlX3RyYWl0X2V4cHIiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDYzMykKKworKCFmaWVsZHMgNCAKKyghcGFpciAgImNvbW1vbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNjI5KQorbmlsICkKKyghcGFpciAgInR5cGUxIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDYzMCkKK25pbCApCisoIXBhaXIgICJ0eXBlMiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA2MzEpCituaWwgKQorKCFwYWlyICAia2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA2MzIpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3OTEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJUU19DUF9UUkFJVF9FWFBSIikKKykKKykKKyghcGFpciAgImxhbWJkYV9leHByZXNzaW9uIgorKCF0eXBlIHN0cnVjdCA2MDkgbmlsICBnY191c2VkICJ0cmVlX2xhbWJkYV9leHByIgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3MTgpCisKKyghZmllbGRzIDEwIAorKCFwYWlyICAidHlwZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDcwOCkKK25pbCApCisoIXBhaXIgICJjYXB0dXJlX2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzA5KQorbmlsICkKKyghcGFpciAgInRoaXNfY2FwdHVyZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3MTApCituaWwgKQorKCFwYWlyICAicmV0dXJuX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzExKQorbmlsICkKKyghcGFpciAgImV4dHJhX3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDcxMikKK25pbCApCisoIXBhaXIgICJjbG9zdXJlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDcxMykKK25pbCApCisoIXBhaXIgICJwZW5kaW5nX3Byb3hpZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDcxNCkKK25pbCApCisoIXBhaXIgICJsb2N1cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3MTUpCituaWwgKQorKCFwYWlyICAiZGVmYXVsdF9jYXB0dXJlX21vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzE2KQorbmlsICkKKyghcGFpciAgImRpc2NyaW1pbmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzE3KQorbmlsICkpCituaWwgMjYwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzkzKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfQ1BfTEFNQkRBX0VYUFIiKQorKQorKQorKCFwYWlyICAidGVtcGxhdGVfaW5mbyIKKyghdHlwZSBzdHJ1Y3QgNjEwIG5pbCAgZ2NfdXNlZCAidHJlZV90ZW1wbGF0ZV9pbmZvIgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3NTIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJjb21tb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc1MCkKK25pbCApCisoIXBhaXIgICJ0eXBlZGVmc19uZWVkaW5nX2FjY2Vzc19jaGVja2luZyIKKyghdHlwZSBwb2ludGVyIDYxMSBuaWwgIGdjX3VzZWQKKyghdHlwZSB1c2VyX3N0cnVjdCA2MTIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYxMSkKKyBnY19wb2ludGVkX3RvICJ2ZWM8cXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc1MSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc1MSkKK25pbCApCisoIXBhaXIgICJxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90IgorKCF0eXBlIHN0cnVjdCA2MTMgbmlsICBnY191c2VkICJxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV9zIgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3MzgpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJ0eXBlZGVmX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzM1KQorbmlsICkKKyghcGFpciAgImNvbnRleHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzM2KQorbmlsICkKKyghcGFpciAgImxvY3VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDczNykKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc1MSkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc1MSkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDc5NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlRTX0NQX1RFTVBMQVRFX0lORk8iKQorKQorKQorKCFwYWlyICAidXNlcmRlZl9saXRlcmFsIgorKCF0eXBlIHN0cnVjdCA2MTQgbmlsICBnY191c2VkICJ0cmVlX3VzZXJkZWZfbGl0ZXJhbCIKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDExMDIpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5oIiAxMDk3KQorbmlsICkKKyghcGFpciAgInN1ZmZpeF9pZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uaCIgMTA5OCkKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uaCIgMTA5OSkKK25pbCApCisoIXBhaXIgICJudW1fc3RyaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5oIiAxMTAwKQorbmlsICkKKyghcGFpciAgIm92ZXJmbG93IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5oIiAxMTAxKQorbmlsICkpCituaWwgMzkwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNzk3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiVFNfQ1BfVVNFUkRFRl9MSVRFUkFMIikKKykKKykpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiKHVuaW9uIGxhbmdfdHJlZV9ub2RlICopIGNfdHJlZV9jaGFpbl9uZXh0ICgmJWguZ2VuZXJpYykiKQorCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgImNwX3RyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKQorKQorMjYwIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1NTcpCispCisKKyghdHlwZSB1bmlvbiA2MTUgbmlsICBnY19wb2ludGVkX3RvICJsYW5nX3RyZWVfbm9kZSIKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDI0NykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImdlbmVyaWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDI0NSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJ0cmVlX25vZGVfc3RydWN0dXJlICgmJWgpIikKKworKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKQorKCFwYWlyICAiaWRlbnRpZmllciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTYwKQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyNDYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIxIikKKykKKykpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiKHVuaW9uIGxhbmdfdHJlZV9ub2RlICopIGNfdHJlZV9jaGFpbl9uZXh0ICgmJWguZ2VuZXJpYykiKQorCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIlRSRUVfQ09ERSAoJiVoLmdlbmVyaWMpID09IElERU5USUZJRVJfTk9ERSIpCispCisxMzAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU1NykKKykKKworKCF0eXBlIHVuaW9uIDYxNiBuaWwgIGdjX3BvaW50ZWRfdG8gImxhbmdfdHJlZV9ub2RlIgorKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvYWRhLXRyZWUuaCIgMzMpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJnZW5lcmljIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS9hZGEtdHJlZS5oIiAzMikKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICJ0cmVlX25vZGVfc3RydWN0dXJlICgmJWgpIikKKworKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICJDT0RFX0NPTlRBSU5TX1NUUlVDVCAoVFJFRV9DT0RFICgmJWguZ2VuZXJpYyksIFRTX0NPTU1PTikgPyAoKHVuaW9uIGxhbmdfdHJlZV9ub2RlICopIFRSRUVfQ0hBSU4gKCYlaC5nZW5lcmljKSkgOiBOVUxMIikKKworKCFvcHRpb24gZGVzYyBzdHJpbmcgICIwIikKKykKKzEgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU1NykKKykKKykKKykKKykKKykKKzUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAyNzU3KQorbmlsICkKKyghcGFpciAgIm9mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMjc1OCkKK25pbCApKQorbmlsIDM4NCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAyNzYxKQorbmlsICkpCispCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNCkKKworKCF0eXBlIHVzZXJfc3RydWN0IDYxNyAKKyghdHlwZSBwb2ludGVyIDYxOCBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjE3KQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzxwcm90X2xpc3RfZW50cnksdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTI1NykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMjU3KQorbmlsICkKKyghcGFpciAgInByb3RfbGlzdF9lbnRyeSIKKyghdHlwZSBzdHJ1Y3QgNjE5IG5pbCAgZ2NfdXNlZCAicHJvdF9saXN0X2VudHJ5IgorKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTI1NikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImlkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMjU0KQorbmlsICkKKyghcGFpciAgInJlZmRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDEyNTUpCituaWwgKSkKK25pbCAzODQgbmlsICkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTI1NykKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYxOSkKKworKCF0eXBlIHVzZXJfc3RydWN0IDYyMCAKKyghdHlwZSBwb2ludGVyIDYyMSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjIwKQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzxtc2dyZWZfZW50cnksdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTIwMykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMjAzKQorbmlsICkKKyghcGFpciAgIm1zZ3JlZl9lbnRyeSIKKyghdHlwZSBzdHJ1Y3QgNjIyIG5pbCAgZ2NfdXNlZCAibXNncmVmX2VudHJ5IgorKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTIwMSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImZ1bmMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDExOTgpCituaWwgKQorKCFwYWlyICAic2VsbmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTE5OSkKK25pbCApCisoIXBhaXIgICJyZWZkZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMjAwKQorbmlsICkpCituaWwgMzg0IG5pbCApCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDEyMDMpCituaWwgKSkKKykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2MjIpCisKKyghdHlwZSB1c2VyX3N0cnVjdCA2MjMgCisoIXR5cGUgcG9pbnRlciA2MjQgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYyMykKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8aWRlbnRfZGF0YV90dXBsZSx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMDM5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDEwMzkpCituaWwgKQorKCFwYWlyICAiaWRlbnRfZGF0YV90dXBsZSIKKyghdHlwZSBzdHJ1Y3QgNjI1IG5pbCAgZ2NfdXNlZCAiaWRlbnRfZGF0YV90dXBsZSIKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDEwMTcpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJpZGVudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTAxNSkKK25pbCApCisoIXBhaXIgICJkYXRhIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMDE2KQorbmlsICkpCituaWwgMzg0IG5pbCApCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDEwMzkpCituaWwgKSkKKykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2MjUpCisKKyghdHlwZSBzdHJ1Y3QgNjI2IG5pbCAgZ2NfdW51c2VkICJkZWNsX25hbWVfaGFzaCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjI3IAorKCF0eXBlIHBvaW50ZXIgNjI4IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA2MjcpCispCisgZ2NfcG9pbnRlZF90byAic3RyaW5nX2Rlc2NyaXB0b3IiCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmMiIDI1OCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImxpdGVyYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuYyIgMjU0KQorbmlsICkKKyghcGFpciAgImNvbnN0cnVjdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmMiIDI1NykKK25pbCApKQorbmlsIDM4NCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDYyOSBuaWwgIGdjX3VudXNlZCAib2JqY190cnlfY29udGV4dCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjMwIAorKCF0eXBlIHBvaW50ZXIgNjMxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA2MzApCispCisgZ2NfcG9pbnRlZF90byAiaW1wX2VudHJ5IgorKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5oIiAyNjcpCisKKyghZmllbGRzIDYgCisoIXBhaXIgICJuZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2MzEpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMjYxKQorbmlsICkKKyghcGFpciAgImltcF9jb250ZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmgiIDI2MikKK25pbCApCisoIXBhaXIgICJpbXBfdGVtcGxhdGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMjYzKQorbmlsICkKKyghcGFpciAgImNsYXNzX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMjY0KQorbmlsICkKKyghcGFpciAgIm1ldGFfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5oIiAyNjUpCituaWwgKQorKCFwYWlyICAiaGFzX2N4eF9jZHRvcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMjY2KQorbmlsICkpCituaWwgMzg0IG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjMyIAorKCF0eXBlIHBvaW50ZXIgNjMzIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA2MzIpCispCisgZ2NfcG9pbnRlZF90byAiaGFzaGVkX2F0dHJpYnV0ZSIKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMjQ0KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjMzKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmgiIDI0MikKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5oIiAyNDMpCituaWwgKSkKK25pbCAzODQgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2MzQgCisoIXR5cGUgcG9pbnRlciA2MzUgCisoIXR5cGUgcG9pbnRlciA2MzYgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYzNSkKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYzNCkKKykKKyBnY19wb2ludGVkX3RvICJoYXNoZWRfZW50cnkiCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmgiIDI1MCkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImxpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYzMykKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5oIiAyNDcpCituaWwgKQorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjM1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmgiIDI0OCkKK25pbCApCisoIXBhaXIgICJrZXkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMjQ5KQorbmlsICkpCituaWwgMzg0IG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjM3IAorKCF0eXBlIHBvaW50ZXIgNjM4IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA2MzcpCispCisgZ2NfcG9pbnRlZF90byAib2JqY19tYXBfcHJpdmF0ZSIKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1tYXAuaCIgNzkpCisKKyghZmllbGRzIDcgCisoIXBhaXIgICJudW1iZXJfb2Zfc2xvdHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1tYXAuaCIgNTQpCituaWwgKQorKCFwYWlyICAibWFzayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW1hcC5oIiA1NykKK25pbCApCisoIXBhaXIgICJudW1iZXJfb2Zfbm9uX2VtcHR5X3Nsb3RzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbWFwLmgiIDYyKQorbmlsICkKKyghcGFpciAgIm1heF9udW1iZXJfb2Zfbm9uX2VtcHR5X3Nsb3RzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbWFwLmgiIDY4KQorbmlsICkKKyghcGFpciAgIm1heGltdW1fbG9hZF9mYWN0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1tYXAuaCIgNzEpCituaWwgKQorKCFwYWlyICAic2xvdHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1tYXAuaCIgNzQpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIlaC5udW1iZXJfb2Zfc2xvdHMiKQorKQorKQorKCFwYWlyICAidmFsdWVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbWFwLmgiIDc4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiJWgubnVtYmVyX29mX3Nsb3RzIikKKykKKykpCituaWwgMzg0IG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjM5IG5pbCAgZ2NfdW51c2VkICJsdG9fc2VjdGlvbl9saXN0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NDAgbmlsICBnY191bnVzZWQgImZpbGVfZGF0YV9saXN0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NDEgbmlsICBnY191bnVzZWQgInN0cmVhbWVyX3RyZWVfY2FjaGVfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjQyIG5pbCAgZ2NfdW51c2VkICJ0eXBlX2hhc2hfcGFpciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjQzIAorKCF0eXBlIHBvaW50ZXIgNjQ0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA2NDMpCispCisgZ2NfcG9pbnRlZF90byAiZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5X3MiCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLmMiIDM3MykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8uYyIgMzcxKQorbmlsICkKKyghcGFpciAgImxlYWRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAibHRvL2x0by5jIiAzNzIpCituaWwgKSkKK25pbCA2NCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDY0NSBuaWwgIGdjX3VudXNlZCAic2NjcyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjQ2IAorKCF0eXBlIHBvaW50ZXIgNjQ3IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY0NikKKykKKyBnY191bnVzZWQgInR5cGVfcGFpcl9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NDggbmlsICBnY191bnVzZWQgImx0b19zZWN0aW9uX3Nsb3QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDY0OSBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL2phdmEvZXhwci5jOjIwNTgibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDY1MCBuaWwgIGdjX3VudXNlZCAiY2xhc3NfZmxhZ19ub2RlX3N0cnVjdCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjUxIG5pbCAgZ2NfdXNlZCAiYnVpbHRpbl9yZWNvcmQiCisoIXNyY2ZpbGVsb2MgICJqYXZhL2J1aWx0aW5zLmMiIDgyKQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiY2xhc3NfbmFtZSIKKyghdHlwZSB1bmlvbiA2NTIgbmlsICBnY191c2VkICJzdHJpbmdfb3JfdHJlZSIKKyghc3JjZmlsZWxvYyAgImphdmEvYnVpbHRpbnMuYyIgNzQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiamF2YS9idWlsdGlucy5jIiA3MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjAiKQorKQorKQorKCFwYWlyICAidCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9idWlsdGlucy5jIiA3MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIjEiKQorKQorKSkKK25pbCAzMiBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2J1aWx0aW5zLmMiIDc4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZXNjIHN0cmluZyAgIjEiKQorKQorKQorKCFwYWlyICAibWV0aG9kX25hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY1MikKKworKCFzcmNmaWxlbG9jICAiamF2YS9idWlsdGlucy5jIiA3OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICIxIikKKykKKykKKyghcGFpciAgImNyZWF0b3IiCisoIXR5cGUgcG9pbnRlciA2NTMgbmlsICBnY191bnVzZWQKKyghdHlwZSB1bmRlZmluZWQgNjU0IAorKCF0eXBlIGFscmVhZHlfc2VlbiA2NTMpCisgZ2NfdW51c2VkICJidWlsdGluX2NyZWF0b3JfZnVuY3Rpb24iCisoIXNyY2ZpbGVsb2MgICJqYXZhL2J1aWx0aW5zLmMiIDgwKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2J1aWx0aW5zLmMiIDgwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJidWlsdGluX2NvZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvYnVpbHRpbnMuYyIgODEpCituaWwgKSkKK25pbCAzMiBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY1NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2NTIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDg5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0OTYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0OTkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTA2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0ODcpCisKKyghdHlwZSBzdHJ1Y3QgNjU1IG5pbCAgZ2NfdW51c2VkICJzdGF0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NTYgbmlsICBnY191bnVzZWQgImdmY19pbnRlcmZhY2VfbWFwcGluZyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjU3IG5pbCAgZ2NfdW51c2VkICJnZmNfaW50ZXJmYWNlX3N5bV9tYXBwaW5nIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NTggbmlsICBnY191c2VkICJnZmNfcG93ZGVjbF9saXN0IgorKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3MTApCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJpbnRlZ2VyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDcwNykKK25pbCApCisoIXBhaXIgICJyZWFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDcwOCkKK25pbCApCisoIXBhaXIgICJjbXBseCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3MDkpCituaWwgKSkKK25pbCA4IG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjU5IG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvZm9ydHJhbi90cmFucy5oOjMzNCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjYwIG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvZm9ydHJhbi90cmFucy5oOjMyMiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjYxIG5pbCAgZ2NfdW51c2VkICJnZmNfbG9vcGluZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDY2MiBuaWwgIGdjX3VudXNlZCAiZ2ZjX3NzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NjMgbmlsICBnY191bnVzZWQgImdmY19zc19pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NjQgbmlsICBnY191bnVzZWQgImdmY19hcnJheV9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NjUgbmlsICBnY191bnVzZWQgImdmY19zZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjY2IG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvZm9ydHJhbi90cmFucy5oOjMxIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NjcgbmlsICBnY191bnVzZWQgImZvcmFsbF9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NjggbmlsICBnY191bnVzZWQgIml0ZXJfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjY5IG5pbCAgZ2NfdXNlZCAiZ2ZjX3N0X3BhcmFtZXRlciIKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW8uYyIgNzcpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pby5jIiA3NSkKK25pbCApCisoIXBhaXIgICJ0eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWlvLmMiIDc2KQorbmlsICkpCituaWwgOCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDY3MCBuaWwgIGdjX3VzZWQgImdmY19zdF9wYXJhbWV0ZXJfZmllbGQiCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWlvLmMiIDcxKQorCisoIWZpZWxkcyA2IAorKCFwYWlyICAibmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW8uYyIgNjUpCituaWwgKQorKCFwYWlyICAibWFzayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pby5jIiA2NikKK25pbCApCisoIXBhaXIgICJwYXJhbV90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWlvLmMiIDY3KQorbmlsICkKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW8uYyIgNjgpCituaWwgKQorKCFwYWlyICAiZmllbGQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW8uYyIgNjkpCituaWwgKQorKCFwYWlyICAiZmllbGRfbGVuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWlvLmMiIDcwKQorbmlsICkpCituaWwgOCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDY3MSBuaWwgIGdjX3VzZWQgImdmY19pbnRyaW5zaWNfbWFwX3QiCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jIiA4MikKKworKCFmaWVsZHMgMTkgCisoIXBhaXIgICJpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYyIgNDgpCituaWwgKQorKCFwYWlyICAiZmxvYXRfYnVpbHRfaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMiIDUyKQorbmlsICkKKyghcGFpciAgImRvdWJsZV9idWlsdF9pbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYyIgNTMpCituaWwgKQorKCFwYWlyICAibG9uZ19kb3VibGVfYnVpbHRfaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMiIDU0KQorbmlsICkKKyghcGFpciAgImNvbXBsZXhfZmxvYXRfYnVpbHRfaW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMiIDU1KQorbmlsICkKKyghcGFpciAgImNvbXBsZXhfZG91YmxlX2J1aWx0X2luIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jIiA1NikKK25pbCApCisoIXBhaXIgICJjb21wbGV4X2xvbmdfZG91YmxlX2J1aWx0X2luIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jIiA1NykKK25pbCApCisoIXBhaXIgICJsaWJtX25hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMiIDYyKQorbmlsICkKKyghcGFpciAgImNvbXBsZXhfYXZhaWxhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jIiA2NSkKK25pbCApCisoIXBhaXIgICJpc19jb25zdGFudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYyIgNjgpCituaWwgKQorKCFwYWlyICAibmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMiIDcxKQorbmlsICkKKyghcGFpciAgInJlYWw0X2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMiIDc0KQorbmlsICkKKyghcGFpciAgInJlYWw4X2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMiIDc1KQorbmlsICkKKyghcGFpciAgInJlYWwxMF9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jIiA3NikKK25pbCApCisoIXBhaXIgICJyZWFsMTZfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYyIgNzcpCituaWwgKQorKCFwYWlyICAiY29tcGxleDRfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYyIgNzgpCituaWwgKQorKCFwYWlyICAiY29tcGxleDhfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYyIgNzkpCituaWwgKQorKCFwYWlyICAiY29tcGxleDEwX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW50cmluc2ljLmMiIDgwKQorbmlsICkKKyghcGFpciAgImNvbXBsZXgxNl9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jIiA4MSkKK25pbCApKQorbmlsIDggbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NzIgCisoIXR5cGUgcG9pbnRlciA2NzMgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY3MikKKykKKyBnY19wb2ludGVkX3RvICJtb2R1bGVfaHRhYl9lbnRyeSIKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNTYwKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAibmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNTU3KQorbmlsICkKKyghcGFpciAgIm5hbWVzcGFjZV9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDU1OCkKK25pbCApCisoIXBhaXIgICJkZWNscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNTU5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3KQorKQorKQorKSkKK25pbCA4IG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODEpCisKKyghdHlwZSB1c2VyX3N0cnVjdCA2NzQgCisoIXR5cGUgcG9pbnRlciA2NzUgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY3NCkKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8cGVuZGluZ19ub2V4Y2VwdCx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjcC9leGNlcHQuYyIgMTE4MCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9leGNlcHQuYyIgMTE4MCkKK25pbCApCisoIXBhaXIgICJwZW5kaW5nX25vZXhjZXB0IgorKCF0eXBlIHN0cnVjdCA2NzYgbmlsICBnY191c2VkICJwZW5kaW5nX25vZXhjZXB0IgorKCFzcmNmaWxlbG9jICAiY3AvZXhjZXB0LmMiIDExNzkpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJmbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvZXhjZXB0LmMiIDExNzcpCituaWwgKQorKCFwYWlyICAibG9jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9leGNlcHQuYyIgMTE3OCkKK25pbCApKQorbmlsIDQgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvZXhjZXB0LmMiIDExODApCituaWwgKSkKKykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2NzYpCisKKyghdHlwZSBzdHJ1Y3QgNjc3IG5pbCAgZ2NfdW51c2VkICJzZWNvbmRhcnlfdnB0cl92dHRfaW5pdF9kYXRhX3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDY3OCBuaWwgIGdjX3VudXNlZCAiZmluZF9maW5hbF9vdmVycmlkZXJfZGF0YV9zIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2NzkgbmlsICBnY191bnVzZWQgImFiaV90YWdfZGF0YSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjgwIG5pbCAgZ2NfdW51c2VkICJ2dGJsX2luaXRfZGF0YV9zIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2ODEgCisoIXR5cGUgcG9pbnRlciA2ODIgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjgxKQorKQorIGdjX3VudXNlZCAiY2xhc3Nfc3RhY2tfbm9kZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjgzIAorKCF0eXBlIHBvaW50ZXIgNjg0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA2ODMpCispCisgZ2NfcG9pbnRlZF90byAicGVuZGluZ19hYnN0cmFjdF90eXBlIgorKCFzcmNmaWxlbG9jICAiY3AvdHlwZWNrMi5jIiAxNTApCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJkZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC90eXBlY2syLmMiIDEzOSkKK25pbCApCisoIXBhaXIgICJ0eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC90eXBlY2syLmMiIDE0MikKK25pbCApCisoIXBhaXIgICJsb2N1cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvdHlwZWNrMi5jIiAxNDYpCituaWwgKQorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjg0KQorCisoIXNyY2ZpbGVsb2MgICJjcC90eXBlY2syLmMiIDE0OSkKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIiVoLm5leHQiKQorKQorMjYwIG5pbCApCisKKyghdHlwZSB1c2VyX3N0cnVjdCA2ODUgCisoIXR5cGUgcG9pbnRlciA2ODYgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY4NSkKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8dHJlZV9pbnQsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmMiIDgxOTcpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmMiIDgxOTcpCituaWwgKQorKCFwYWlyICAidHJlZV9pbnQiCisoIXR5cGUgc3RydWN0IDY4NyBuaWwgIGdjX3VzZWQgInRyZWVfaW50IgorKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmMiIDgxOTYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuYyIgODE5NCkKK25pbCApCisoIXBhaXIgICJpIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuYyIgODE5NSkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuYyIgODE5NykKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY4NykKKworKCF0eXBlIHN0cnVjdCA2ODggbmlsICBnY191bnVzZWQgImNwX3BhcnNlcl9leHByZXNzaW9uX3N0YWNrX2VudHJ5Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA2ODkgbmlsICBnY191bnVzZWQgImNwX3BhcnNlcl9iaW5hcnlfb3BlcmF0aW9uc19tYXBfbm9kZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNjkwIAorKCF0eXBlIHBvaW50ZXIgNjkxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA2OTApCispCisgZ2NfcG9pbnRlZF90byAiY3BfcGFyc2VyIgorKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDM0MykKKworKCFmaWVsZHMgMjcgCisoIXBhaXIgICJsZXhlciIKKyghdHlwZSBwb2ludGVyIDY5MiBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNjkzIAorKCF0eXBlIGFscmVhZHlfc2VlbiA2OTIpCisgZ2NfcG9pbnRlZF90byAiY3BfbGV4ZXIiCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTA5KQorCisoIWZpZWxkcyA3IAorKCFwYWlyICAiYnVmZmVyIgorKCF0eXBlIHBvaW50ZXIgNjk0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDY5NSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjk0KQorIGdjX3BvaW50ZWRfdG8gInZlYzxjcF90b2tlbix2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgODQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDg0KQorbmlsICkKKyghcGFpciAgImNwX3Rva2VuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDg0KQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiA4NCkKK25pbCApCisoIXBhaXIgICJsYXN0X3Rva2VuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NikKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDg4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJuZXh0X3Rva2VuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NikKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDkyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJzYXZlZF90b2tlbnMiCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNjk2IG5pbCAgZ2NfdW51c2VkICJ2ZWM8Y3BfdG9rZW5fcG9zaXRpb24+IgorKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDk4KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiY3BfdG9rZW5fcG9zaXRpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY2KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgOTgpCituaWwgKSkKKykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDk4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJuZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2OTIpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxMDEpCituaWwgKQorKCFwYWlyICAiZGVidWdnaW5nX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxMDQpCituaWwgKQorKCFwYWlyICAiaW5fcHJhZ21hIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTA4KQorbmlsICkpCituaWwgMjYwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAyMDIpCituaWwgKQorKCFwYWlyICAic2NvcGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAyMTcpCituaWwgKQorKCFwYWlyICAib2JqZWN0X3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMjI0KQorbmlsICkKKyghcGFpciAgInF1YWxpZnlpbmdfc2NvcGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAyMjUpCituaWwgKQorKCFwYWlyICAiY29udGV4dCIKKyghdHlwZSBwb2ludGVyIDY5NyBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgNjk4IAorKCF0eXBlIGFscmVhZHlfc2VlbiA2OTcpCisgZ2NfcG9pbnRlZF90byAiY3BfcGFyc2VyX2NvbnRleHQiCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTk1KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAic3RhdHVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTg2KQorbmlsICkKKyghcGFpciAgIm9iamVjdF90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTkxKQorbmlsICkKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5NykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDE5NCkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMjM2KQorbmlsICkKKyghcGFpciAgImFsbG93X2dudV9leHRlbnNpb25zX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAyNDApCituaWwgKQorKCFwYWlyICAiZ3JlYXRlcl90aGFuX2lzX29wZXJhdG9yX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAyNDcpCituaWwgKQorKCFwYWlyICAiZGVmYXVsdF9hcmdfb2tfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDI1MikKK25pbCApCisoIXBhaXIgICJpbnRlZ3JhbF9jb25zdGFudF9leHByZXNzaW9uX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAyNTYpCituaWwgKQorKCFwYWlyICAiYWxsb3dfbm9uX2ludGVncmFsX2NvbnN0YW50X2V4cHJlc3Npb25fcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDI2MikKK25pbCApCisoIXBhaXIgICJub25faW50ZWdyYWxfY29uc3RhbnRfZXhwcmVzc2lvbl9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMjY2KQorbmlsICkKKyghcGFpciAgImxvY2FsX3ZhcmlhYmxlc19mb3JiaWRkZW5fcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDI3MCkKK25pbCApCisoIXBhaXIgICJpbl91bmJyYWNlZF9saW5rYWdlX3NwZWNpZmljYXRpb25fcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDI3NSkKK25pbCApCisoIXBhaXIgICJpbl9kZWNsYXJhdG9yX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAyNzkpCituaWwgKQorKCFwYWlyICAiaW5fdGVtcGxhdGVfYXJndW1lbnRfbGlzdF9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMjgyKQorbmlsICkKKyghcGFpciAgImluX3N0YXRlbWVudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAyOTQpCituaWwgKQorKCFwYWlyICAiaW5fc3dpdGNoX3N0YXRlbWVudF9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzAwKQorbmlsICkKKyghcGFpciAgImluX3R5cGVfaWRfaW5fZXhwcl9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzA1KQorbmlsICkKKyghcGFpciAgImltcGxpY2l0X2V4dGVybl9jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzA5KQorbmlsICkKKyghcGFpciAgInRyYW5zbGF0ZV9zdHJpbmdzX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAzMTMpCituaWwgKQorKCFwYWlyICAiaW5fZnVuY3Rpb25fYm9keSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDMxNykKK25pbCApCisoIXBhaXIgICJpbl90cmFuc2FjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAzMjEpCituaWwgKQorKCFwYWlyICAiY29sb25fY29ycmVjdHNfdG9fc2NvcGVfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDMyNCkKK25pbCApCisoIXBhaXIgICJ0eXBlX2RlZmluaXRpb25fZm9yYmlkZGVuX21lc3NhZ2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzI5KQorbmlsICkKKyghcGFpciAgInVucGFyc2VkX3F1ZXVlcyIKKyghdHlwZSBwb2ludGVyIDY5OSBuaWwgIGdjX3VzZWQKKyghdHlwZSB1c2VyX3N0cnVjdCA3MDAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5OSkKKyBnY19wb2ludGVkX3RvICJ2ZWM8Y3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5LHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAzMzQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDMzNCkKK25pbCApCisoIXBhaXIgICJjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnkiCisoIXR5cGUgc3RydWN0IDcwMSBuaWwgIGdjX3VzZWQgImNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeV9kIgorKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDE2NSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImZ1bnNfd2l0aF9kZWZhdWx0X2FyZ3MiCisoIXR5cGUgcG9pbnRlciA3MDIgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNzAzIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3MDIpCisgZ2NfcG9pbnRlZF90byAidmVjPGNwX2RlZmF1bHRfYXJnX2VudHJ5LHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxNTYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDE1NikKK25pbCApCisoIXBhaXIgICJjcF9kZWZhdWx0X2FyZ19lbnRyeSIKKyghdHlwZSBzdHJ1Y3QgNzA0IG5pbCAgZ2NfdXNlZCAiY3BfZGVmYXVsdF9hcmdfZW50cnlfZCIKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxNDgpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJjbGFzc190eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTQ0KQorbmlsICkKKyghcGFpciAgImRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxNDcpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDE1NikKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTU2KQorbmlsICkKKyghcGFpciAgImZ1bnNfd2l0aF9kZWZpbml0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxNjApCituaWwgKQorKCFwYWlyICAibnNkbWlzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDE2NCkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzM0KQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAzMzQpCituaWwgKQorKCFwYWlyICAibnVtX2NsYXNzZXNfYmVpbmdfZGVmaW5lZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDMzOCkKK25pbCApCisoIXBhaXIgICJudW1fdGVtcGxhdGVfcGFyYW1ldGVyX2xpc3RzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzQyKQorbmlsICkpCituaWwgMjYwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzAwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA3MDEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzAzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcwNCkKKworKCF0eXBlIHN0cnVjdCA3MDUgbmlsICBnY191bnVzZWQgImNwX3Rva2VuX2lkZW50X2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5MykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2OTYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjk1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcwKQorCisoIXR5cGUgc3RydWN0IDcwNiBuaWwgIGdjX3VudXNlZCAibGlzdF9wcm94eSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzA3IG5pbCAgZ2NfdW51c2VkICJjcGx1c19hcnJheV9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3MDggCisoIXR5cGUgcG9pbnRlciA3MDkgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcwOCkKKykKKyBnY19wb2ludGVkX3RvICJjb25zdGV4cHJfY2FsbCIKKyghc3JjZmlsZWxvYyAgImNwL3NlbWFudGljcy5jIiA2NDM0KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAiZnVuZGVmIgorKCF0eXBlIHBvaW50ZXIgNzEwIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA3MTEgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcxMCkKKyBnY19wb2ludGVkX3RvICJjb25zdGV4cHJfZnVuZGVmIgorKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDU3NjcpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJkZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgNTc2NSkKK25pbCApCisoIXBhaXIgICJib2R5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgNTc2NikKK25pbCApKQorbmlsIDI2MCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgNjQxOCkKK25pbCApCisoIXBhaXIgICJiaW5kaW5ncyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDY0MjUpCituaWwgKQorKCFwYWlyICAicmVzdWx0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgNjQzMCkKK25pbCApCisoIXBhaXIgICJoYXNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgNjQzMykKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcxMSkKKworKCF0eXBlIHVzZXJfc3RydWN0IDcxMiAKKyghdHlwZSBwb2ludGVyIDcxMyBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzEyKQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzxkZWZlcnJlZF9hY2Nlc3MsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDEzOCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgMTM4KQorbmlsICkKKyghcGFpciAgImRlZmVycmVkX2FjY2VzcyIKKyghdHlwZSBzdHJ1Y3QgNzE0IG5pbCAgZ2NfdXNlZCAiZGVmZXJyZWRfYWNjZXNzIgorKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDEzNSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImRlZmVycmVkX2FjY2Vzc19jaGVja3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcxKQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgMTMwKQorbmlsICkKKyghcGFpciAgImRlZmVycmluZ19hY2Nlc3NfY2hlY2tzX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3NlbWFudGljcy5jIiAxMzMpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDEzOCkKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcxNCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA3MikKKworKCF0eXBlIHN0cnVjdCA3MTUgbmlsICBnY191bnVzZWQgInBhaXJfZm5fZGF0YSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzE2IG5pbCAgZ2NfdW51c2VkICJ0ZW1wbGF0ZV9wYXJtX2RhdGEibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDcxNyBuaWwgIGdjX3VudXNlZCAiZmluZF9wYXJhbWV0ZXJfcGFja19kYXRhIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3MTggCisoIXR5cGUgcG9pbnRlciA3MTkgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcxOCkKKykKKyBnY19wb2ludGVkX3RvICJzcGVjX2VudHJ5IgorKCFzcmNmaWxlbG9jICAiY3AvcHQuYyIgODgpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJ0bXBsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA4NSkKK25pbCApCisoIXBhaXIgICJhcmdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA4NikKK25pbCApCisoIXBhaXIgICJzcGVjIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA4NykKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDcyMCAKKyghdHlwZSBwb2ludGVyIDcyMSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzIwKQorKQorIGdjX3BvaW50ZWRfdG8gInBlbmRpbmdfdGVtcGxhdGUiCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA1NSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcyMSkKKworKCFzcmNmaWxlbG9jICAiY3AvcHQuYyIgNTMpCituaWwgKQorKCFwYWlyICAidGluc3QiCisoIXR5cGUgcG9pbnRlciA3MjIgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDcyMyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzIyKQorIGdjX3BvaW50ZWRfdG8gInRpbnN0X2xldmVsIgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0OTA5KQorCisoIWZpZWxkcyA1IAorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzIyKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ4OTQpCituaWwgKQorKCFwYWlyICAiZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0ODk5KQorbmlsICkKKyghcGFpciAgImxvY3VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ5MDIpCituaWwgKQorKCFwYWlyICAiZXJyb3JzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ5MDUpCituaWwgKQorKCFwYWlyICAiaW5fc3lzdGVtX2hlYWRlcl9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ5MDgpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5uZXh0IikKKykKKzI2MCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA1NCkKK25pbCApKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBjaGFpbl9uZXh0IHN0cmluZyAgIiVoLm5leHQiKQorKQorMjYwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzI0IAorKCF0eXBlIHBvaW50ZXIgNzI1IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcyNCkKKykKKyBnY191bnVzZWQgInByaW9yaXR5X2luZm9fcyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzI2IG5pbCAgZ2NfdW51c2VkICJyZXNoYXBlX2l0ZXJhdG9yX3QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDcyNyBuaWwgIGdjX3VudXNlZCAicHJlZGVmaW5lZF9pZGVudGlmaWVyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3MjggbmlsICBnY191bnVzZWQgInR5cGVuYW1lX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDcyOSBuaWwgIGdjX3VudXNlZCAiY3Bfc3dpdGNoIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHVzZXJfc3RydWN0IDczMCAKKyghdHlwZSBwb2ludGVyIDczMSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzMwKQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzxpbmNvbXBsZXRlX3Zhcix2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDI2MCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDI2MCkKK25pbCApCisoIXBhaXIgICJpbmNvbXBsZXRlX3ZhciIKKyghdHlwZSBzdHJ1Y3QgNzMyIG5pbCAgZ2NfdXNlZCAiaW5jb21wbGV0ZV92YXJfZCIKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wuYyIgMjU3KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvZGVjbC5jIiAyNTUpCituaWwgKQorKCFwYWlyICAiaW5jb21wbGV0ZV90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDI1NikKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDI2MCkKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDczMikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMDUpCisKKyghdHlwZSBzdHJ1Y3QgNzMzIG5pbCAgZ2NfdW51c2VkICJjb252ZXJzaW9uX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDczNCBuaWwgIGdjX3VudXNlZCAiY2FuZGlkYXRlX3dhcm5pbmcibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDczNSBuaWwgIGdjX3VudXNlZCAiel9jYW5kaWRhdGUibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDczNiBuaWwgIGdjX3VudXNlZCAicmVqZWN0aW9uX3JlYXNvbiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzM3IG5pbCAgZ2NfdW51c2VkICJjb252ZXJzaW9uIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3MzggbmlsICBnY191bnVzZWQgImRpYWdub3N0aWNfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzMpCisKKyghdHlwZSBzdHJ1Y3QgNzM5IG5pbCAgZ2NfdW51c2VkICJjcF9wYXJhbWV0ZXJfZGVjbGFyYXRvciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzQwIG5pbCAgZ2NfdW51c2VkICJjcF9kZWNsYXJhdG9yIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3NDEgbmlsICBnY191bnVzZWQgImNwX2RlY2xfc3BlY2lmaWVyX3NlcSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzQyIG5pbCAgZ2NfdXNlZCAib3BlcmF0b3JfbmFtZV9pbmZvX3QiCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ2NTMpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJpZGVudGlmaWVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ2NDYpCituaWwgKQorKCFwYWlyICAibmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDY0OCkKK25pbCApCisoIXBhaXIgICJtYW5nbGVkX25hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ2NTApCituaWwgKQorKCFwYWlyICAiYXJpdHkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDY1MikKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDc0MyBuaWwgIGdjX3VudXNlZCAiYWdncl9pbml0X2V4cHJfYXJnX2l0ZXJhdG9yX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTE0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUyOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1MTYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTE4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUxNSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1MTkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTMpCisKKyghdHlwZSB1c2VyX3N0cnVjdCA3NDQgCisoIXR5cGUgcG9pbnRlciA3NDUgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc0NCkKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8Y3h4X3NhdmVkX2JpbmRpbmcsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5ODkpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5ODkpCituaWwgKQorKCFwYWlyICAiY3h4X3NhdmVkX2JpbmRpbmciCisoIXR5cGUgc3RydWN0IDc0NiBuaWwgIGdjX3VzZWQgImN4eF9zYXZlZF9iaW5kaW5nIgorKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgODYpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJpZGVudGlmaWVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiA4MikKK25pbCApCisoIXBhaXIgICJiaW5kaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5OSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgODQpCituaWwgKQorKCFwYWlyICAicmVhbF90eXBlX3ZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiA4NSkKK25pbCApKQorbmlsIDI2MCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDk4OSkKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYxMCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2MTIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjEzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYwOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2MDgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjA3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYwNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2MDUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjA0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYwMykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2MDIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjAwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5OSkKKworKCF0eXBlIHN0cnVjdCA3NDcgCisoIXR5cGUgcG9pbnRlciA3NDggbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc0NykKKykKKyBnY19wb2ludGVkX3RvICJzYXZlZF9zY29wZSIKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTAyMCkKKworKCFmaWVsZHMgMjQgCisoIXBhaXIgICJvbGRfYmluZGluZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc0NSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5ODkpCituaWwgKQorKCFwYWlyICAib2xkX25hbWVzcGFjZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5OTApCituaWwgKQorKCFwYWlyICAiZGVjbF9uc19saXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5OTEpCituaWwgKQorKCFwYWlyICAiY2xhc3NfbmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5OTIpCituaWwgKQorKCFwYWlyICAiY2xhc3NfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5OTMpCituaWwgKQorKCFwYWlyICAiYWNjZXNzX3NwZWNpZmllciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5OTQpCituaWwgKQorKCFwYWlyICAiZnVuY3Rpb25fZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5OTUpCituaWwgKQorKCFwYWlyICAibGFuZ19iYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5OTYpCituaWwgKQorKCFwYWlyICAibGFuZ19uYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDk5NykKK25pbCApCisoIXBhaXIgICJ0ZW1wbGF0ZV9wYXJtcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA5OTgpCituaWwgKQorKCFwYWlyICAieF9wcmV2aW91c19jbGFzc19sZXZlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTQpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgOTk5KQorbmlsICkKKyghcGFpciAgInhfc2F2ZWRfdHJlZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMDAwKQorbmlsICkKKyghcGFpciAgInhfY3VycmVudF9jbGFzc19wdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTAwMykKK25pbCApCisoIXBhaXIgICJ4X2N1cnJlbnRfY2xhc3NfcmVmIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwMDQpCituaWwgKQorKCFwYWlyICAieF9wcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTAwNikKK25pbCApCisoIXBhaXIgICJ4X3Byb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTAwNykKK25pbCApCisoIXBhaXIgICJ4X3Byb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxMDA4KQorbmlsICkKKyghcGFpciAgIm5lZWRfcG9wX2Z1bmN0aW9uX2NvbnRleHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTAwOSkKK25pbCApCisoIXBhaXIgICJ1bmV2YWx1YXRlZF9vcGVyYW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwMTEpCituaWwgKQorKCFwYWlyICAiaW5oaWJpdF9ldmFsdWF0aW9uX3dhcm5pbmdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwMTIpCituaWwgKQorKCFwYWlyICAieF9zdG10X3RyZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwMTQpCituaWwgKQorKCFwYWlyICAiY2xhc3NfYmluZGluZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwMTYpCituaWwgKQorKCFwYWlyICAiYmluZGluZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwMTcpCituaWwgKQorKCFwYWlyICAicHJldiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzQ4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEwMTkpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3NDkgbmlsICBnY191bnVzZWQgImFyZ19sb29rdXAibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwOSkKKworKCF0eXBlIHN0cnVjdCA3NTAgbmlsICBnY191bnVzZWQgInNjb3BlX2JpbmRpbmcibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwMikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5NykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMDMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzQ2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwMCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1MjUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTIyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcyMykKKworKCF0eXBlIHN0cnVjdCA3NTEgbmlsICBnY191c2VkICJnbG9iYWxzIgorKCFzcmNmaWxlbG9jICAiY3AvbWFuZ2xlLmMiIDEwNCkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgInN1YnN0aXR1dGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9tYW5nbGUuYyIgOTMpCituaWwgKQorKCFwYWlyICAiZW50aXR5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9tYW5nbGUuYyIgOTYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInBhcm1fZGVwdGgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL21hbmdsZS5jIiA5OSkKK25pbCApCisoIXBhaXIgICJuZWVkX2FiaV93YXJuaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9tYW5nbGUuYyIgMTAzKQorbmlsICkpCituaWwgMjYwIG5pbCApCisKKyghdHlwZSB1c2VyX3N0cnVjdCA3NTIgCisoIXR5cGUgcG9pbnRlciA3NTMgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1MikKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8dGluZm9fcyx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjcC9ydHRpLmMiIDEwMikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9ydHRpLmMiIDEwMikKK25pbCApCisoIXBhaXIgICJ0aW5mb19zIgorKCF0eXBlIHN0cnVjdCA3NTQgbmlsICBnY191c2VkICJ0aW5mb19zIgorKCFzcmNmaWxlbG9jICAiY3AvcnR0aS5jIiA3MSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3J0dGkuYyIgNjQpCituaWwgKQorKCFwYWlyICAidnRhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9ydHRpLmMiIDY2KQorbmlsICkKKyghcGFpciAgIm5hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3J0dGkuYyIgNjkpCituaWwgKSkKK25pbCAyNjAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY3AvcnR0aS5jIiAxMDIpCituaWwgKSkKKykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA3NTQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEyKQorCisoIXR5cGUgc3RydWN0IDc1NSBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL2MvYy1wYXJzZXIuYzo1NTg5Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3NTYgCisoIXR5cGUgcG9pbnRlciA3NTcgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1NikKKykKKyBnY19wb2ludGVkX3RvICJjX3BhcnNlciIKKyghc3JjZmlsZWxvYyAgImMvYy1wYXJzZXIuYyIgMjAxKQorCisoIWZpZWxkcyAxMSAKKyghcGFpciAgInRva2VucyIKKyghdHlwZSBhcnJheSA3NTggbmlsICBnY191c2VkICIyIiAKKyghdHlwZSBzdHJ1Y3QgNzU5IG5pbCAgZ2NfdXNlZCAiY190b2tlbiIKKyghc3JjZmlsZWxvYyAgImMvYy1wYXJzZXIuYyIgMTU4KQorCisoIWZpZWxkcyA2IAorKCFwYWlyICAidHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxNDQpCituaWwgKQorKCFwYWlyICAiaWRfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxNDcpCituaWwgKQorKCFwYWlyICAia2V5d29yZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxNTApCituaWwgKQorKCFwYWlyICAicHJhZ21hX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1wYXJzZXIuYyIgMTUzKQorbmlsICkKKyghcGFpciAgImxvY2F0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtcGFyc2VyLmMiIDE1NSkKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxNTcpCituaWwgKSkKK25pbCAxMzAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxNjUpCituaWwgKQorKCFwYWlyICAidG9rZW5zX2F2YWlsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtcGFyc2VyLmMiIDE2NykKK25pbCApCisoIXBhaXIgICJlcnJvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxNzEpCituaWwgKQorKCFwYWlyICAiaW5fcHJhZ21hIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtcGFyc2VyLmMiIDE3NCkKK25pbCApCisoIXBhaXIgICJpbl9pZl9ibG9jayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxNzYpCituaWwgKQorKCFwYWlyICAibGV4X3VudHJhbnNsYXRlZF9zdHJpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1wYXJzZXIuYyIgMTc4KQorbmlsICkKKyghcGFpciAgIm9iamNfcHFfY29udGV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxODQpCituaWwgKQorKCFwYWlyICAib2JqY19jb3VsZF9iZV9mb3JlYWNoX2NvbnRleHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1wYXJzZXIuYyIgMTg5KQorbmlsICkKKyghcGFpciAgIm9iamNfbmVlZF9yYXdfaWRlbnRpZmllciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAxOTQpCituaWwgKQorKCFwYWlyICAiaW5fdHJhbnNhY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1wYXJzZXIuYyIgMTk3KQorbmlsICkKKyghcGFpciAgIm9iamNfcHJvcGVydHlfYXR0cl9jb250ZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtcGFyc2VyLmMiIDIwMCkKK25pbCApKQorbmlsIDEzMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1OSkKKworKCF0eXBlIHN0cnVjdCA3NjAgbmlsICBnY191bnVzZWQgIm9tcF9wcmFnbWFfZGVmIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3NjEgbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy9jLWZhbWlseS9jLXByYWdtYS5jOjExNTMibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDc2MiAKKyghdHlwZSBwb2ludGVyIDc2MyBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzYyKQorKQorIGdjX3BvaW50ZWRfdG8gIm9wdF9zdGFjayIKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDg4NikKKworKCFmaWVsZHMgNSAKKyghcGFpciAgInByZXYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc2MykKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgODgxKQorbmlsICkKKyghcGFpciAgInRhcmdldF9iaW5hcnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDg4MikKK25pbCApCisoIXBhaXIgICJ0YXJnZXRfc3RyaW5ncyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgODgzKQorbmlsICkKKyghcGFpciAgIm9wdGltaXplX2JpbmFyeSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgODg0KQorbmlsICkKKyghcGFpciAgIm9wdGltaXplX3N0cmluZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDg4NSkKK25pbCApKQorbmlsIDM5MCBuaWwgKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNzY0IAorKCF0eXBlIHBvaW50ZXIgNzY1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA3NjQpCispCisgZ2NfcG9pbnRlZF90byAidmVjPHBlbmRpbmdfcmVkZWZpbml0aW9uLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDQxNykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5jIiA0MTcpCituaWwgKQorKCFwYWlyICAicGVuZGluZ19yZWRlZmluaXRpb24iCisoIXR5cGUgc3RydWN0IDc2NiBuaWwgIGdjX3VzZWQgInBlbmRpbmdfcmVkZWZpbml0aW9uX2QiCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5jIiA0MTQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJvbGRuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5jIiA0MTIpCituaWwgKQorKCFwYWlyICAibmV3bmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgNDEzKQorbmlsICkpCituaWwgMzkwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDQxNykKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc2NikKKworKCF0eXBlIHVzZXJfc3RydWN0IDc2NyAKKyghdHlwZSBwb2ludGVyIDc2OCBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzY3KQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzxwZW5kaW5nX3dlYWssdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgMjQzKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDI0MykKK25pbCApCisoIXBhaXIgICJwZW5kaW5nX3dlYWsiCisoIXR5cGUgc3RydWN0IDc2OSBuaWwgIGdjX3VzZWQgInBlbmRpbmdfd2Vha19kIgorKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgMjQwKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAibmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgMjM4KQorbmlsICkKKyghcGFpciAgInZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5jIiAyMzkpCituaWwgKSkKK25pbCAzOTAgbmlsICkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgMjQzKQorbmlsICkpCispCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzY5KQorCisoIXR5cGUgc3RydWN0IDc3MCAKKyghdHlwZSBwb2ludGVyIDc3MSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzcwKQorKQorIGdjX3BvaW50ZWRfdG8gImFsaWduX3N0YWNrIgorKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgNTApCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJhbGlnbm1lbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDQ3KQorbmlsICkKKyghcGFpciAgImlkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5jIiA0OCkKK25pbCApCisoIXBhaXIgICJwcmV2IgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NzEpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDQ5KQorbmlsICkpCituaWwgMzkwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzcyIG5pbCAgZ2NfdW51c2VkICJpbnRlcm5hbF9wcmFnbWFfaGFuZGxlcl9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHVuaW9uIDc3MyBuaWwgIGdjX3VudXNlZCAiZ2VuX3ByYWdtYV9oYW5kbGVyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3NzQgbmlsICBnY191c2VkICJsYXp5X2hleF9mcF92YWx1ZV9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNwcGJ1aWx0aW4uYyIgMTAzMCkKKworKCFmaWVsZHMgNSAKKyghcGFpciAgImhleF9zdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNwcGJ1aWx0aW4uYyIgMTAyNSkKK25pbCApCisoIXBhaXIgICJtYWNybyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTcxKQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNwcGJ1aWx0aW4uYyIgMTAyNikKK25pbCApCisoIXBhaXIgICJtb2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNwcGJ1aWx0aW4uYyIgMTAyNykKK25pbCApCisoIXBhaXIgICJkaWdpdHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY3BwYnVpbHRpbi5jIiAxMDI4KQorbmlsICkKKyghcGFpciAgImZwX3N1ZmZpeCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY3BwYnVpbHRpbi5jIiAxMDI5KQorbmlsICkpCituaWwgMzg2IG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjE0KQorCisoIXR5cGUgc3RydWN0IDc3NSBuaWwgIGdjX3VudXNlZCAiY19maWxlaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzc2IG5pbCAgZ2NfdW51c2VkICJjX2NvbW1vbl9yZXN3b3JkIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHVzZXJfc3RydWN0IDc3NyAKKyghdHlwZSBwb2ludGVyIDc3OCBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzc3KQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzx0cmVlX2djX3ZlYyx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5jIiAxMTI0MikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5jIiAxMTI0MikKK25pbCApCisoIXBhaXIgICJ0cmVlX2djX3ZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmMiIDExMjQyKQorbmlsICkpCispCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODcpCisKKyghdHlwZSBzdHJ1Y3QgNzc5IG5pbCAgZ2NfdW51c2VkICJyZWFzb25fb3B0aW9uX2NvZGVzX3QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgNzgwIAorKCF0eXBlIHBvaW50ZXIgNzgxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA3ODApCispCisgZ2NfcG9pbnRlZF90byAidmVjPGNvbnN0X2NoYXJfcCx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5jIiA4Nzk0KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmMiIDg3OTQpCituaWwgKQorKCFwYWlyICAiY29uc3RfY2hhcl9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uYyIgODc5NCkKK25pbCApKQorKQorCisoIXR5cGUgc3RydWN0IDc4MiBuaWwgIGdjX3VudXNlZCAiZGlzYWJsZWRfYnVpbHRpbiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzgzIG5pbCAgZ2NfdW51c2VkICJ0bGlzdF9jYWNoZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzg0IG5pbCAgZ2NfdW51c2VkICJ0bGlzdCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzg1IG5pbCAgZ2NfdW51c2VkICJ2aXNpYmlsaXR5X2ZsYWdzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3ODYgbmlsICBnY191bnVzZWQgImZuYW1lX3Zhcl90Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1MjcpCisKKyghdHlwZSBzdHJ1Y3QgNzg3IAorKCF0eXBlIHBvaW50ZXIgNzg4IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA3ODcpCispCisgZ2NfcG9pbnRlZF90byAiY19pbmxpbmVfc3RhdGljIgorKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDc5KQorCisoIWZpZWxkcyA1IAorKCFwYWlyICAibG9jYXRpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDQ2NikKK25pbCApCisoIXBhaXIgICJmdW5jdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDY5KQorbmlsICkKKyghcGFpciAgInN0YXRpY19kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiA0NzIpCituaWwgKQorKCFwYWlyICAidHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDc1KQorbmlsICkKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc4OCkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDc4KQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiJWgubmV4dCIpCispCisxMzAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1OTMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTk1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1NjApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTY2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU4NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1ODYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTg4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg4KQorCisoIXR5cGUgc3RydWN0IDc4OSBuaWwgIGdjX3VudXNlZCAiY19zdHJ1Y3RfcGFyc2VfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTg5KQorCisoIXR5cGUgc3RydWN0IDc5MCBuaWwgIGdjX3VudXNlZCAiY19lbnVtX2NvbnRlbnRzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3OTEgbmlsICBnY191bnVzZWQgImNfcGFybSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzkyIG5pbCAgZ2NfdW51c2VkICJjX3R5cGVfbmFtZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgNzkzIG5pbCAgZ2NfdW51c2VkICJjX2RlY2xhcmF0b3IibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNCkKKworKCF0eXBlIHN0cnVjdCA3OTQgbmlsICBnY191bnVzZWQgImNfYXJnX3RhZ19kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3OTUgbmlsICBnY191bnVzZWQgImNfZGVjbHNwZWNzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3OTYgbmlsICBnY191bnVzZWQgImNfdHlwZXNwZWMibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDc5NyBuaWwgIGdjX3VudXNlZCAiY19leHByIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA3OTggbmlsICBnY191bnVzZWQgImxhbmdfaG9va3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDc5OSAKKyghdHlwZSBwb2ludGVyIDgwMCBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzk5KQorKQorIGdjX3BvaW50ZWRfdG8gInBhZF90eXBlX2hhc2giCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiAyMjQpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJoYXNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiAyMjIpCituaWwgKQorKCFwYWlyICAidHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdXRpbHMuYyIgMjIzKQorbmlsICkpCituaWwgMSBuaWwgKQorCisoIXR5cGUgc3RydWN0IDgwMSAKKyghdHlwZSBwb2ludGVyIDgwMiBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gODAxKQorKQorIGdjX3BvaW50ZWRfdG8gImduYXRfYmluZGluZ19sZXZlbCIKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3V0aWxzLmMiIDE5MikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImNoYWluIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MDIpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3V0aWxzLmMiIDE4NikKK25pbCApCisoIXBhaXIgICJibG9jayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdXRpbHMuYyIgMTg4KQorbmlsICkKKyghcGFpciAgImptcGJ1Zl9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiAxOTEpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5jaGFpbiIpCispCisxIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODAzIG5pbCAgZ2NfdW51c2VkICJucnZfZGF0YSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSB1c2VyX3N0cnVjdCA4MDQgCisoIXR5cGUgcG9pbnRlciA4MDUgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgwNCkKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8bG9vcF9pbmZvLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDIyMikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMjIpCituaWwgKQorKCFwYWlyICAibG9vcF9pbmZvIgorKCF0eXBlIHBvaW50ZXIgODA2IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA4MDcgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgwNikKKyBnY19wb2ludGVkX3RvICJsb29wX2luZm9fZCIKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDIxNikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImxhYmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMTMpCituaWwgKQorKCFwYWlyICAibG9vcF92YXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDIxNCkKK25pbCApCisoIXBhaXIgICJjaGVja3MiCisoIXR5cGUgcG9pbnRlciA4MDggbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgODA5IAorKCF0eXBlIGFscmVhZHlfc2VlbiA4MDgpCisgZ2NfcG9pbnRlZF90byAidmVjPHJhbmdlX2NoZWNrX2luZm8sdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMjE1KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDIxNSkKK25pbCApCisoIXBhaXIgICJyYW5nZV9jaGVja19pbmZvIgorKCF0eXBlIHBvaW50ZXIgODEwIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA4MTEgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgxMCkKKyBnY19wb2ludGVkX3RvICJyYW5nZV9jaGVja19pbmZvX2QiCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMDYpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJsb3dfYm91bmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDIwMikKK25pbCApCisoIXBhaXIgICJoaWdoX2JvdW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMDMpCituaWwgKQorKCFwYWlyICAidHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMjA0KQorbmlsICkKKyghcGFpciAgImludmFyaWFudF9jb25kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMDUpCituaWwgKSkKK25pbCAxIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDIxNSkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMTUpCituaWwgKSkKK25pbCAxIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDIyMikKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgwNykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4MDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODExKQorCisoIXR5cGUgc3RydWN0IDgxMiAKKyghdHlwZSBwb2ludGVyIDgxMyBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gODEyKQorKQorIGdjX3BvaW50ZWRfdG8gImVsYWJfaW5mbyIKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDE3NykKKworKCFmaWVsZHMgMyAKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgxMykKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTc0KQorbmlsICkKKyghcGFpciAgImVsYWJfcHJvYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTc1KQorbmlsICkKKyghcGFpciAgImduYXRfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTc2KQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiJWgubmV4dCIpCispCisxIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODE0IAorKCF0eXBlIHBvaW50ZXIgODE1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA4MTQpCispCisgZ2NfcG9pbnRlZF90byAic3RtdF9ncm91cCIKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDE2MSkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgInByZXZpb3VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MTUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDE1NykKK25pbCApCisoIXBhaXIgICJzdG10X2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDE1OCkKK25pbCApCisoIXBhaXIgICJibG9jayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTU5KQorbmlsICkKKyghcGFpciAgImNsZWFudXBzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAxNjApCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5wcmV2aW91cyIpCispCisxIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExOSkKKworKCF0eXBlIHN0cnVjdCA4MTYgbmlsICBnY191bnVzZWQgIkVsaXN0X0hlYWRlciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODE3IG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvYWRhL2djYy1pbnRlcmZhY2UvZGVjbC5jOjE3MiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODE4IG5pbCAgZ2NfdW51c2VkICJ2YXJpYW50X2Rlc2NfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODE5IG5pbCAgZ2NfdW51c2VkICJzdWJzdF9wYWlyX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDgyMCBuaWwgIGdjX3VudXNlZCAiaW5jb21wbGV0ZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODIxIG5pbCAgZ2NfdW51c2VkICJhdHRyaWIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDgyMiBuaWwgIGdjX3VudXNlZCAiTGlzdF9IZWFkZXIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDgyMyBuaWwgIGdjX3VudXNlZCAiU3RyaW5nX0VudHJ5Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4MjQgbmlsICBnY191bnVzZWQgIkVsbXRfSXRlbSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODI1IG5pbCAgZ2NfdW51c2VkICJOb2RlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4MjYgbmlsICBnY191bnVzZWQgIkZpbGVfSW5mb19UeXBlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4MjcgbmlsICBnY191bnVzZWQgImFzYW5fYWRkX3N0cmluZ19jc3RzX2RhdGEibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDgyOCBuaWwgIGdjX3VudXNlZCAiYXNhbl9tZW1fcmVmX2hhc2hlciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODI5IG5pbCAgZ2NfdW51c2VkICJhc2FuX21lbV9yZWYibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDgzMCBuaWwgIGdjX3VudXNlZCAiZWRnZV9ncm93dGhfY2FjaGVfZW50cnkibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDgzMSBuaWwgIGdjX3VudXNlZCAiaW5saW5lX3BhcmFtX3N1bW1hcnkibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgODMyIAorKCF0eXBlIHBvaW50ZXIgODMzIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA4MzIpCispCisgZ2NfcG9pbnRlZF90byAidmVjPGlubGluZV9zdW1tYXJ5X3QsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxNjEpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxNjEpCituaWwgKQorKCFwYWlyICAiaW5saW5lX3N1bW1hcnlfdCIKKyghdHlwZSBzdHJ1Y3QgODM0IG5pbCAgZ2NfdXNlZCAiaW5saW5lX3N1bW1hcnkiCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDE1NykKKworKCFmaWVsZHMgMTUgCisoIXBhaXIgICJlc3RpbWF0ZWRfc2VsZl9zdGFja19zaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDExNSkKK25pbCApCisoIXBhaXIgICJzZWxmX3NpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgMTE3KQorbmlsICkKKyghcGFpciAgInNlbGZfdGltZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMTkpCituaWwgKQorKCFwYWlyICAiaW5saW5hYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDEyMikKK25pbCApCisoIXBhaXIgICJlc3RpbWF0ZWRfc3RhY2tfc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMjkpCituaWwgKQorKCFwYWlyICAic3RhY2tfZnJhbWVfb2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDEzMSkKK25pbCApCisoIXBhaXIgICJ0aW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDEzMykKK25pbCApCisoIXBhaXIgICJzaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDEzNCkKK25pbCApCisoIXBhaXIgICJjb25kcyIKKyghdHlwZSBwb2ludGVyIDgzNSBuaWwgIGdjX3VzZWQKKyghdHlwZSB1c2VyX3N0cnVjdCA4MzYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzNSkKKyBnY19wb2ludGVkX3RvICJ2ZWM8Y29uZGl0aW9uLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgNzYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiA3NikKK25pbCApCisoIXBhaXIgICJjb25kaXRpb24iCisoIXR5cGUgc3RydWN0IDgzNyBuaWwgIGdjX3VzZWQgImNvbmRpdGlvbiIKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgNDQpCisKKyghZmllbGRzIDYgCisoIXBhaXIgICJvZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgMzQpCituaWwgKQorKCFwYWlyICAidmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDM1KQorbmlsICkKKyghcGFpciAgIm9wZXJhbmRfbnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDM2KQorbmlsICkKKyghcGFpciAgImNvZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgMzcpCituaWwgKQorKCFwYWlyICAiYWdnX2NvbnRlbnRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDQwKQorbmlsICkKKyghcGFpciAgImJ5X3JlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiA0MykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDc2KQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgMTM4KQorbmlsICkKKyghcGFpciAgImVudHJ5IgorKCF0eXBlIHBvaW50ZXIgODM4IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDgzOSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODM4KQorIGdjX3BvaW50ZWRfdG8gInZlYzxzaXplX3RpbWVfZW50cnksdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMzkpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMzkpCituaWwgKQorKCFwYWlyICAic2l6ZV90aW1lX2VudHJ5IgorKCF0eXBlIHN0cnVjdCA4NDAgbmlsICBnY191c2VkICJzaXplX3RpbWVfZW50cnkiCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDEwNykKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInByZWRpY2F0ZSIKKyghdHlwZSBzdHJ1Y3QgODQxIAorKCF0eXBlIHBvaW50ZXIgODQyIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg0MSkKKykKKyBnY191c2VkICJwcmVkaWNhdGUiCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDkyKQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiY2xhdXNlIgorKCF0eXBlIGFycmF5IDg0MyBuaWwgIGdjX3VzZWQgIk1BWF9DTEFVU0VTICsgMSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCispCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgOTEpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMDQpCituaWwgKQorKCFwYWlyICAic2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMDUpCituaWwgKQorKCFwYWlyICAidGltZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMDYpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMzkpCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMzkpCituaWwgKQorKCFwYWlyICAibG9vcF9pdGVyYXRpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4NDIpCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgMTQzKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJsb29wX3N0cmlkZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODQyKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDE0NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiYXJyYXlfaW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg0MikKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxNDgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImdyb3d0aCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxNTQpCituaWwgKQorKCFwYWlyICAic2NjX25vIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDE1NikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDE2MSkKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4NDApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODQxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4MzcpCisKKyghdHlwZSBzdHJ1Y3QgODQ0IG5pbCAgZ2NfdW51c2VkICJ0YXJnZXRfZ2xvYmFscyIKKyghc3JjZmlsZWxvYyAgInRhcmdldC1nbG9iYWxzLmgiIDU4KQorCisoIWZpZWxkcyAxNiAKKyghcGFpciAgImZsYWdfc3RhdGUiCisoIXR5cGUgcG9pbnRlciA4NDUgbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgODQ2IAorKCF0eXBlIGFscmVhZHlfc2VlbiA4NDUpCisgZ2NfdW51c2VkICJ0YXJnZXRfZmxhZ19zdGF0ZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRhcmdldC1nbG9iYWxzLmgiIDQyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJyZWdzIgorKCF0eXBlIHBvaW50ZXIgODQ3IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg0OCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODQ3KQorIGdjX3VudXNlZCAidGFyZ2V0X3JlZ3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0YXJnZXQtZ2xvYmFscy5oIiA0MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicnRsIgorKCF0eXBlIHBvaW50ZXIgODQ5IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg1MCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODQ5KQorIGdjX3VzZWQgInRhcmdldF9ydGwiCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjI5OSkKKworKCFmaWVsZHMgNyAKKyghcGFpciAgInhfZ2xvYmFsX3J0bCIKKyghdHlwZSBhcnJheSA4NTEgbmlsICBnY191c2VkICJHUl9NQVgiIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCispCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMjc0KQorbmlsICkKKyghcGFpciAgInhfcGljX29mZnNldF90YWJsZV9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIyNzcpCituaWwgKQorKCFwYWlyICAieF9yZXR1cm5fYWRkcmVzc19wb2ludGVyX3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjI4MikKK25pbCApCisoIXBhaXIgICJ4X2luaXRpYWxfcmVnbm9fcmVnX3J0eCIKKyghdHlwZSBhcnJheSA4NTIgbmlsICBnY191c2VkICJGSVJTVF9QU0VVRE9fUkVHSVNURVIiIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCispCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMjg4KQorbmlsICkKKyghcGFpciAgInhfdG9wX29mX3N0YWNrIgorKCF0eXBlIGFycmF5IDg1MyBuaWwgIGdjX3VzZWQgIk1BWF9NQUNISU5FX01PREUiIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCispCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMjkxKQorbmlsICkKKyghcGFpciAgInhfc3RhdGljX3JlZ19iYXNlX3ZhbHVlIgorKCF0eXBlIGFycmF5IDg1NCBuaWwgIGdjX3VzZWQgIkZJUlNUX1BTRVVET19SRUdJU1RFUiIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKykKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIyOTUpCituaWwgKQorKCFwYWlyICAieF9tb2RlX21lbV9hdHRycyIKKyghdHlwZSBhcnJheSA4NTUgbmlsICBnY191c2VkICIoaW50KSBNQVhfTUFDSElORV9NT0RFIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjU4KQorKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjI5OCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0YXJnZXQtZ2xvYmFscy5oIiA0NCkKK25pbCApCisoIXBhaXIgICJoYXJkX3JlZ3MiCisoIXR5cGUgcG9pbnRlciA4NTYgbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgODU3IAorKCF0eXBlIGFscmVhZHlfc2VlbiA4NTYpCisgZ2NfdW51c2VkICJ0YXJnZXRfaGFyZF9yZWdzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAidGFyZ2V0LWdsb2JhbHMuaCIgNDUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInJlbG9hZCIKKyghdHlwZSBwb2ludGVyIDg1OCBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHN0cnVjdCA4NTkgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg1OCkKKyBnY191bnVzZWQgInRhcmdldF9yZWxvYWQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0YXJnZXQtZ2xvYmFscy5oIiA0NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiZXhwbWVkIgorKCF0eXBlIHBvaW50ZXIgODYwIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg2MSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODYwKQorIGdjX3VudXNlZCAidGFyZ2V0X2V4cG1lZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRhcmdldC1nbG9iYWxzLmgiIDQ3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJvcHRhYnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU1MykKKworKCFzcmNmaWxlbG9jICAidGFyZ2V0LWdsb2JhbHMuaCIgNDgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImxpYmZ1bmNzIgorKCF0eXBlIHBvaW50ZXIgODYyIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg2MyAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODYyKQorIGdjX3VzZWQgInRhcmdldF9saWJmdW5jcyIKKyghc3JjZmlsZWxvYyAgImxpYmZ1bmNzLmgiIDcxKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAieF9saWJmdW5jX3RhYmxlIgorKCF0eXBlIGFycmF5IDg2NCBuaWwgIGdjX3VzZWQgIkxUSV9NQVgiIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCispCisKKyghc3JjZmlsZWxvYyAgImxpYmZ1bmNzLmgiIDY3KQorbmlsICkKKyghcGFpciAgInhfbGliZnVuY19oYXNoIgorKCF0eXBlIHBvaW50ZXIgODY1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHBhcmFtX3N0cnVjdCA4NjYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg2NSkKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgcG9pbnRlciA4NjcgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDg2OCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODY3KQorIGdjX3BvaW50ZWRfdG8gImxpYmZ1bmNfZW50cnkiCisoIXNyY2ZpbGVsb2MgICJsaWJmdW5jcy5oIiA2MSkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgIm9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJsaWJmdW5jcy5oIiA1OSkKK25pbCApCisoIXBhaXIgICJtb2RlMSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAibGliZnVuY3MuaCIgNTkpCituaWwgKQorKCFwYWlyICAibW9kZTIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImxpYmZ1bmNzLmgiIDU5KQorbmlsICkKKyghcGFpciAgImxpYmZ1bmMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAibGliZnVuY3MuaCIgNjApCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImxpYmZ1bmNzLmgiIDcwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA4NjgpCispCispCispKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0YXJnZXQtZ2xvYmFscy5oIiA0OSkKK25pbCApCisoIXBhaXIgICJjZmdsb29wIgorKCF0eXBlIHBvaW50ZXIgODY5IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg3MCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODY5KQorIGdjX3VudXNlZCAidGFyZ2V0X2NmZ2xvb3AibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0YXJnZXQtZ2xvYmFscy5oIiA1MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiaXJhIgorKCF0eXBlIHBvaW50ZXIgODcxIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg3MiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODcxKQorIGdjX3VudXNlZCAidGFyZ2V0X2lyYSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRhcmdldC1nbG9iYWxzLmgiIDUxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJpcmFfaW50IgorKCF0eXBlIHBvaW50ZXIgODczIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg3NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODczKQorIGdjX3VudXNlZCAidGFyZ2V0X2lyYV9pbnQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0YXJnZXQtZ2xvYmFscy5oIiA1MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAibHJhX2ludCIKKyghdHlwZSBwb2ludGVyIDg3NSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHN0cnVjdCA4NzYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg3NSkKKyBnY191bnVzZWQgInRhcmdldF9scmFfaW50Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAidGFyZ2V0LWdsb2JhbHMuaCIgNTMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImJ1aWx0aW5zIgorKCF0eXBlIHBvaW50ZXIgODc3IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg3OCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODc3KQorIGdjX3VudXNlZCAidGFyZ2V0X2J1aWx0aW5zIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAidGFyZ2V0LWdsb2JhbHMuaCIgNTQpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImdjc2UiCisoIXR5cGUgcG9pbnRlciA4NzkgbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgODgwIAorKCF0eXBlIGFscmVhZHlfc2VlbiA4NzkpCisgZ2NfdW51c2VkICJ0YXJnZXRfZ2NzZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRhcmdldC1nbG9iYWxzLmgiIDU1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJiYl9yZW9yZGVyIgorKCF0eXBlIHBvaW50ZXIgODgxIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg4MiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODgxKQorIGdjX3VudXNlZCAidGFyZ2V0X2JiX3Jlb3JkZXIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJ0YXJnZXQtZ2xvYmFscy5oIiA1NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAibG93ZXJfc3VicmVnIgorKCF0eXBlIHBvaW50ZXIgODgzIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgc3RydWN0IDg4NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gODgzKQorIGdjX3VudXNlZCAidGFyZ2V0X2xvd2VyX3N1YnJlZyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRhcmdldC1nbG9iYWxzLmgiIDU3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg4NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4ODIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODc4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg3NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4NzQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODcyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg2MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4NTcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODQ4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg0NikKKworKCF0eXBlIHN0cnVjdCA4ODUgbmlsICBnY191bnVzZWQgImx0b19zaW1wbGVfb3V0cHV0X2Jsb2NrIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4ODYgbmlsICBnY191bnVzZWQgImx0b19zaW1wbGVfaGVhZGVyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4ODcgbmlsICBnY191bnVzZWQgImx0b19vdXRwdXRfc3RyZWFtIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4ODggbmlsICBnY191bnVzZWQgImx0b19jaGFyX3B0cl9iYXNlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4ODkgbmlsICBnY191bnVzZWQgImdjb3ZfY3RyX3N1bW1hcnkibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgODkwIG5pbCAgZ2NfdW51c2VkICJ2ZWM8cmVzX3BhaXI+IgorKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDU2NikKKworKCFmaWVsZHMgMSAKKyghcGFpciAgInJlc19wYWlyIgorKCF0eXBlIHN0cnVjdCA4OTEgbmlsICBnY191bnVzZWQgInJlc19wYWlyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDU2NikKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg5MSkKKworKCF0eXBlIHN0cnVjdCA4OTIgbmlsICBnY191bnVzZWQgImx0b190cmVlX3JlZl9lbmNvZGVyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4OTMgbmlsICBnY191bnVzZWQgImx0b19kZWNsX3Nsb3QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDg5NCBuaWwgIGdjX3VzZWQgImx0b190cmVlX3JlZl90YWJsZSIKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiA0NjcpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ0cmVlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNikKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDQ2MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgIiVoLnNpemUiKQorKQorKQorKCFwYWlyICAic2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDQ2NikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgc3RydWN0IDg5NSBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL2x0by1zdHJlYW1lci5oOjQ1MSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgODk2IAorKCF0eXBlIHBvaW50ZXIgODk3IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg5NikKKykKKyBnY191bnVzZWQgImx0b19zeW10YWJfZW5jb2Rlcl9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA4OTggbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy9sdG8tc3RyZWFtZXIuaDo0MjYibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDg5OSBuaWwgIGdjX3VudXNlZCAibHRvX3N0YXRzX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDkwMCBuaWwgIGdjX3VudXNlZCAibHRvX2FzbV9oZWFkZXIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDkwMSBuaWwgIGdjX3VudXNlZCAibHRvX2RlY2xfaGVhZGVyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5MDIgbmlsICBnY191bnVzZWQgImx0b19mdW5jdGlvbl9oZWFkZXIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDkwMyBuaWwgIGdjX3VudXNlZCAibHRvX2hlYWRlciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTA0IAorKCF0eXBlIHBvaW50ZXIgOTA1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MDQpCispCisgZ2NfcG9pbnRlZF90byAibHRvX2luX2RlY2xfc3RhdGUiCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNDk3KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAic3RyZWFtcyIKKyghdHlwZSBhcnJheSA5MDYgbmlsICBnY191c2VkICJMVE9fTl9ERUNMX1NUUkVBTVMiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA4OTQpCispCisKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiA0OTIpCituaWwgKQorKCFwYWlyICAiZm5fZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDQ5NikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgc3RydWN0IDkwNyBuaWwgIGdjX3VudXNlZCAiY3JlYXRlX3ZlcnNpb25fYWxpYXNfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTA4IG5pbCAgZ2NfdW51c2VkICJkZW1hbmdsZV9jb21wb25lbnQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgOTA5IG5pbCAgZ2NfdW51c2VkICJ2ZWM8Y2dyYXBoX25vZGVfcHRyPiIKKyghc3JjZmlsZWxvYyAgInRyYW5zLW1lbS5jIiAzODg3KQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiY2dyYXBoX25vZGVfcHRyIgorKCF0eXBlIHBvaW50ZXIgOTEwIAorKCF0eXBlIHBvaW50ZXIgOTExIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTApCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIHN0cnVjdCA5MTIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxMCkKKyBnY19wb2ludGVkX3RvICJjZ3JhcGhfbm9kZSIKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyODIpCisKKyghZmllbGRzIDMzIAorKCFwYWlyICAic3ltYm9sIgorKCF0eXBlIHN0cnVjdCA5MTMgbmlsICBnY191c2VkICJzeW10YWJfbm9kZV9iYXNlIgorKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDkxKQorCisoIWZpZWxkcyAxNyAKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0NikKK25pbCApCisoIXBhaXIgICJyZXNvbHV0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDkpCituaWwgKQorKCFwYWlyICAiYWRkcmVzc190YWtlbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDUzKQorbmlsICkKKyghcGFpciAgInVzZWRfZnJvbV9vdGhlcl9wYXJ0aXRpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA1NSkKK25pbCApCisoIXBhaXIgICJpbl9vdGhlcl9wYXJ0aXRpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA1OSkKK25pbCApCisoIXBhaXIgICJleHRlcm5hbGx5X3Zpc2libGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA2MSkKK25pbCApCisoIXBhaXIgICJmb3JjZV9vdXRwdXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA2NCkKK25pbCApCisoIXBhaXIgICJvcmRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDY3KQorbmlsICkKKyghcGFpciAgImRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA2OSkKK25pbCApCisoIXBhaXIgICJyZWZfbGlzdCIKKyghdHlwZSBzdHJ1Y3QgOTE0IG5pbCAgZ2NfdXNlZCAiaXBhX3JlZl9saXN0IgorKCFzcmNmaWxlbG9jICAiaXBhLXJlZi5oIiA1OSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInJlZmVyZW5jZXMiCisoIXR5cGUgcG9pbnRlciA5MTUgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgOTE2IAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTUpCisgZ2NfcG9pbnRlZF90byAidmVjPGlwYV9yZWZfdCx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJpcGEtcmVmLmgiIDU1KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImlwYS1yZWYuaCIgNTUpCituaWwgKQorKCFwYWlyICAiaXBhX3JlZl90IgorKCF0eXBlIHN0cnVjdCA5MTcgCisoIXR5cGUgcG9pbnRlciA5MTggbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTE3KQorKQorIGdjX3VzZWQgImlwYV9yZWYiCisoIXNyY2ZpbGVsb2MgICJpcGEtcmVmLmgiIDQ1KQorCisoIWZpZWxkcyA1IAorKCFwYWlyICAicmVmZXJyaW5nIgorKCF0eXBlIHBvaW50ZXIgOTE5IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVuaW9uIDkyMCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTE5KQorIGdjX3BvaW50ZWRfdG8gInN5bXRhYl9ub2RlX2RlZiIKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0ODgpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJzeW1ib2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxMykKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQ4MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIlNZTVRBQl9TWU1CT0wiKQorKQorKQorKCFwYWlyICAieF9mdW5jdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTEyKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDg2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU1lNVEFCX0ZVTkNUSU9OIikKKykKKykKKyghcGFpciAgInhfdmFyaWFibGUiCisoIXR5cGUgc3RydWN0IDkyMSAKKyghdHlwZSBwb2ludGVyIDkyMiBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MjEpCispCisgZ2NfdXNlZCAidmFycG9vbF9ub2RlIgorKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQ2NykKKworKCFmaWVsZHMgNyAKKyghcGFpciAgInN5bWJvbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTEzKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDUyKQorbmlsICkKKyghcGFpciAgImFsaWFzX29mIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDU0KQorbmlsICkKKyghcGFpciAgImFuYWx5emVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDU4KQorbmlsICkKKyghcGFpciAgImZpbmFsaXplZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQ2MCkKK25pbCApCisoIXBhaXIgICJvdXRwdXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0NjIpCituaWwgKQorKCFwYWlyICAiYWxpYXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0NjUpCituaWwgKQorKCFwYWlyICAiZXh0cmFfbmFtZV9hbGlhcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQ2NikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDg3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiU1lNVEFCX1ZBUklBQkxFIikKKykKKykpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX3ByZXYgc3RyaW5nICAiJWguc3ltYm9sLnByZXZpb3VzIikKKworKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5zeW1ib2wubmV4dCIpCisKKyghb3B0aW9uIGRlc2Mgc3RyaW5nICAiJWguc3ltYm9sLnR5cGUiKQorKQorNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImlwYS1yZWYuaCIgNDApCituaWwgKQorKCFwYWlyICAicmVmZXJyZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXJlZi5oIiA0MSkKK25pbCApCisoIXBhaXIgICJzdG10IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisKKyghc3JjZmlsZWxvYyAgImlwYS1yZWYuaCIgNDIpCituaWwgKQorKCFwYWlyICAicmVmZXJyZWRfaW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1yZWYuaCIgNDMpCituaWwgKQorKCFwYWlyICAidXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcmVmLmgiIDQ0KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImlwYS1yZWYuaCIgNTUpCituaWwgKSkKKykKKykKKworKCFzcmNmaWxlbG9jICAiaXBhLXJlZi5oIiA1NSkKK25pbCApCisoIXBhaXIgICJyZWZlcnJpbmciCisoIXR5cGUgdXNlcl9zdHJ1Y3QgOTIzIG5pbCAgZ2NfdW51c2VkICJ2ZWM8aXBhX3JlZl9wdHI+IgorKCFzcmNmaWxlbG9jICAiaXBhLXJlZi5oIiA1OCkKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImlwYV9yZWZfcHRyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTgpCisKKyghc3JjZmlsZWxvYyAgImlwYS1yZWYuaCIgNTgpCituaWwgKSkKKykKKworKCFzcmNmaWxlbG9jICAiaXBhLXJlZi5oIiA1OCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDcyKQorbmlsICkKKyghcGFpciAgInNhbWVfY29tZGF0X2dyb3VwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA3NSkKK25pbCApCisoIXBhaXIgICJsdG9fZmlsZV9kYXRhIgorKCF0eXBlIHBvaW50ZXIgOTI0IAorKCF0eXBlIHBvaW50ZXIgOTI1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MjQpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIHN0cnVjdCA5MjYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyNCkKKyBnY19wb2ludGVkX3RvICJsdG9fZmlsZV9kZWNsX2RhdGEiCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTcwKQorCisoIWZpZWxkcyAxMiAKKyghcGFpciAgImN1cnJlbnRfZGVjbF9zdGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTA1KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTM4KQorbmlsICkKKyghcGFpciAgImdsb2JhbF9kZWNsX3N0YXRlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MDUpCisKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiA1NDIpCituaWwgKQorKCFwYWlyICAic3ltdGFiX25vZGVfZW5jb2RlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODk3KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTQ1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJmdW5jdGlvbl9kZWNsX3N0YXRlcyIKKyghdHlwZSBwb2ludGVyIDkyNyBuaWwgIGdjX3VzZWQKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgOTI4IAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MjcpCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5MDUpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTQ4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MDQpCispCispCispCisoIXBhaXIgICJmaWxlX25hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTUxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJzZWN0aW9uX2hhc2hfdGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUwKQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTU0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJyZW5hbWluZ19oYXNoX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1MCkKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDU1NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTI0KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTYwKQorbmlsICkKKyghcGFpciAgImlkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTYzKQorbmlsICkKKyghcGFpciAgInJlc3BhaXJzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4OTApCisKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiA1NjYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIm1heF9pbmRleCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDU2NykKK25pbCApCisoIXBhaXIgICJwcm9maWxlX2luZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg4OSkKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDU2OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDc4KQorbmlsICkKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDgxKQorbmlsICkKKyghcGFpciAgInByZXZpb3VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA4MikKK25pbCApCisoIXBhaXIgICJuZXh0X3NoYXJpbmdfYXNtX25hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDg3KQorbmlsICkKKyghcGFpciAgInByZXZpb3VzX3NoYXJpbmdfYXNtX25hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDg4KQorbmlsICkKKyghcGFpciAgImF1eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA5MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDIwNikKK25pbCApCisoIXBhaXIgICJjYWxsZWVzIgorKCF0eXBlIHBvaW50ZXIgOTI5IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA5MzAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyOSkKKyBnY19wb2ludGVkX3RvICJjZ3JhcGhfZWRnZSIKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0NDApCisKKyghZmllbGRzIDE4IAorKCFwYWlyICAiY291bnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MDYpCituaWwgKQorKCFwYWlyICAiY2FsbGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MDcpCituaWwgKQorKCFwYWlyICAiY2FsbGVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MDgpCituaWwgKQorKCFwYWlyICAicHJldl9jYWxsZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQwOSkKK25pbCApCisoIXBhaXIgICJuZXh0X2NhbGxlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTI5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDEwKQorbmlsICkKKyghcGFpciAgInByZXZfY2FsbGVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MjkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MTEpCituaWwgKQorKCFwYWlyICAibmV4dF9jYWxsZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQxMikKK25pbCApCisoIXBhaXIgICJjYWxsX3N0bXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQxMykKK25pbCApCisoIXBhaXIgICJpbmRpcmVjdF9pbmZvIgorKCF0eXBlIHBvaW50ZXIgOTMxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA5MzIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkzMSkKKyBnY19wb2ludGVkX3RvICJjZ3JhcGhfaW5kaXJlY3RfY2FsbF9pbmZvIgorKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQwMikKKworKCFmaWVsZHMgOCAKKyghcGFpciAgIm9mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDM4MykKK25pbCApCisoIXBhaXIgICJvdHJfdG9rZW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAzODUpCituaWwgKQorKCFwYWlyICAib3RyX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAzODcpCituaWwgKQorKCFwYWlyICAicGFyYW1faW5kZXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAzODkpCituaWwgKQorKCFwYWlyICAiZWNmX2ZsYWdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMzkxKQorbmlsICkKKyghcGFpciAgInBvbHltb3JwaGljIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMzk1KQorbmlsICkKKyghcGFpciAgImFnZ19jb250ZW50cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDM5OCkKK25pbCApCisoIXBhaXIgICJieV9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MDEpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQxNikKK25pbCApCisoIXBhaXIgICJhdXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDE3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJpbmxpbmVfZmFpbGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDIwKQorbmlsICkKKyghcGFpciAgImx0b19zdG10X3VpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQyMykKK25pbCApCisoIXBhaXIgICJmcmVxdWVuY3kiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MjcpCituaWwgKQorKCFwYWlyICAidWlkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDI5KQorbmlsICkKKyghcGFpciAgImluZGlyZWN0X2lubGluaW5nX2VkZ2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MzEpCituaWwgKQorKCFwYWlyICAiaW5kaXJlY3RfdW5rbm93bl9jYWxsZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MzQpCituaWwgKQorKCFwYWlyICAiY2FsbF9zdG10X2Nhbm5vdF9pbmxpbmVfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQzNykKK25pbCApCisoIXBhaXIgICJjYW5fdGhyb3dfZXh0ZXJuYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA0MzkpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fcHJldiBzdHJpbmcgICIlaC5wcmV2X2NhbGxlciIpCisKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiJWgubmV4dF9jYWxsZXIiKQorKQorNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyMDcpCituaWwgKQorKCFwYWlyICAiY2FsbGVycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTI5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjA4KQorbmlsICkKKyghcGFpciAgImluZGlyZWN0X2NhbGxzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MjkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyMTEpCituaWwgKQorKCFwYWlyICAib3JpZ2luIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyMTUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIG5lc3RlZF9wdHIgbmVzdGVkIAorKCF0eXBlIGFscmVhZHlfc2VlbiA5MjApCisgIihzeW10YWJfbm9kZSklaCIgIihzdHJ1Y3QgY2dyYXBoX25vZGUgKikoJWgpIikKKykKKykKKyghcGFpciAgIm5lc3RlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTEwKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjE5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBuZXN0ZWRfcHRyIG5lc3RlZCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTIwKQorICIoc3ltdGFiX25vZGUpJWgiICIoc3RydWN0IGNncmFwaF9ub2RlICopKCVoKSIpCispCispCisoIXBhaXIgICJuZXh0X25lc3RlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTEwKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjIzKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBuZXN0ZWRfcHRyIG5lc3RlZCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTIwKQorICIoc3ltdGFiX25vZGUpJWgiICIoc3RydWN0IGNncmFwaF9ub2RlICopKCVoKSIpCispCispCisoIXBhaXIgICJuZXh0X3NpYmxpbmdfY2xvbmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxMCkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDIyNSkKK25pbCApCisoIXBhaXIgICJwcmV2X3NpYmxpbmdfY2xvbmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxMCkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDIyNikKK25pbCApCisoIXBhaXIgICJjbG9uZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxMCkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDIyNykKK25pbCApCisoIXBhaXIgICJjbG9uZV9vZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTEwKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjI4KQorbmlsICkKKyghcGFpciAgImNhbGxfc2l0ZV9oYXNoIgorKCF0eXBlIHBvaW50ZXIgOTMzIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHBhcmFtX3N0cnVjdCA5MzQgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkzMykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyOSkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyMzEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkzMCkKKykKKykKKykKKyghcGFpciAgImZvcm1lcl9jbG9uZV9vZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDIzMykKK25pbCApCisoIXBhaXIgICJpcGFfdHJhbnNmb3Jtc190b19hcHBseSIKKyghdHlwZSB1c2VyX3N0cnVjdCA5MzUgbmlsICBnY191bnVzZWQgInZlYzxpcGFfb3B0X3Bhc3M+IgorKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDIzOCkKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImlwYV9vcHRfcGFzcyIKKyghdHlwZSBwb2ludGVyIDkzNiBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHN0cnVjdCA5MzcgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkzNikKKyBnY191bnVzZWQgImlwYV9vcHRfcGFzc19kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDIzOCkKK25pbCApKQorKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjM4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJsb2NhbCIKKyghdHlwZSBzdHJ1Y3QgOTM4IG5pbCAgZ2NfdXNlZCAiY2dyYXBoX2xvY2FsX2luZm8iCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTU5KQorCisoIWZpZWxkcyA2IAorKCFwYWlyICAibG9jYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxNDEpCituaWwgKQorKCFwYWlyICAiZmluYWxpemVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTQ0KQorbmlsICkKKyghcGFpciAgInZlcnNpb25hYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTQ3KQorbmlsICkKKyghcGFpciAgImNhbl9jaGFuZ2Vfc2lnbmF0dXJlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTUxKQorbmlsICkKKyghcGFpciAgInJlZGVmaW5lZF9leHRlcm5faW5saW5lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTU1KQorbmlsICkKKyghcGFpciAgInRtX21heV9lbnRlcl9pcnIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxNTgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI0MCkKK25pbCApCisoIXBhaXIgICJnbG9iYWwiCisoIXR5cGUgc3RydWN0IDkzOSBuaWwgIGdjX3VzZWQgImNncmFwaF9nbG9iYWxfaW5mbyIKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxNjgpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJpbmxpbmVkX3RvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxNjcpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI0MSkKK25pbCApCisoIXBhaXIgICJydGwiCisoIXR5cGUgc3RydWN0IDk0MCBuaWwgIGdjX3VzZWQgImNncmFwaF9ydGxfaW5mbyIKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxNzUpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJwcmVmZXJyZWRfaW5jb21pbmdfc3RhY2tfYm91bmRhcnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxNzQpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI0MikKK25pbCApCisoIXBhaXIgICJjbG9uZSIKKyghdHlwZSBzdHJ1Y3QgOTQxIG5pbCAgZ2NfdXNlZCAiY2dyYXBoX2Nsb25lX2luZm8iCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTk5KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAidHJlZV9tYXAiCisoIXR5cGUgcG9pbnRlciA5NDIgbmlsICBnY191c2VkCisoIXR5cGUgdXNlcl9zdHJ1Y3QgOTQzIAorKCF0eXBlIGFscmVhZHlfc2VlbiA5NDIpCisgZ2NfcG9pbnRlZF90byAidmVjPGlwYV9yZXBsYWNlX21hcF9wLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxOTYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDE5NikKK25pbCApCisoIXBhaXIgICJpcGFfcmVwbGFjZV9tYXBfcCIKKyghdHlwZSBwb2ludGVyIDk0NCBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgOTQ1IAorKCF0eXBlIGFscmVhZHlfc2VlbiA5NDQpCisgZ2NfcG9pbnRlZF90byAiaXBhX3JlcGxhY2VfbWFwIgorKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDE5MSkKKworKCFmaWVsZHMgNSAKKyghcGFpciAgIm9sZF90cmVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTgyKQorbmlsICkKKyghcGFpciAgIm5ld190cmVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTg0KQorbmlsICkKKyghcGFpciAgInBhcm1fbnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTg2KQorbmlsICkKKyghcGFpciAgInJlcGxhY2VfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDE4OCkKK25pbCApCisoIXBhaXIgICJyZWZfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDE5MCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTk2KQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxOTYpCituaWwgKQorKCFwYWlyICAiYXJnc190b19za2lwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxOTcpCituaWwgKQorKCFwYWlyICAiY29tYmluZWRfYXJnc190b19za2lwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxOTgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI0MykKK25pbCApCisoIXBhaXIgICJ0aHVuayIKKyghdHlwZSBzdHJ1Y3QgOTQ2IG5pbCAgZ2NfdXNlZCAiY2dyYXBoX3RodW5rX2luZm8iCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTMzKQorCisoIWZpZWxkcyA2IAorKCFwYWlyICAiZml4ZWRfb2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTI2KQorbmlsICkKKyghcGFpciAgInZpcnR1YWxfdmFsdWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxMjcpCituaWwgKQorKCFwYWlyICAiYWxpYXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxMjgpCituaWwgKQorKCFwYWlyICAidGhpc19hZGp1c3RpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxMjkpCituaWwgKQorKCFwYWlyICAidmlydHVhbF9vZmZzZXRfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDEzMCkKK25pbCApCisoIXBhaXIgICJ0aHVua19wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTMyKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyNDQpCituaWwgKQorKCFwYWlyICAiY291bnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyNDcpCituaWwgKQorKCFwYWlyICAiY291bnRfbWF0ZXJpYWxpemF0aW9uX3NjYWxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjUwKQorbmlsICkKKyghcGFpciAgInVpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI1MikKK25pbCApCisoIXBhaXIgICJhYnN0cmFjdF9hbmRfbmVlZGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjU2KQorbmlsICkKKyghcGFpciAgImxvd2VyZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyNTgpCituaWwgKQorKCFwYWlyICAiYW5hbHl6ZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyNjEpCituaWwgKQorKCFwYWlyICAicHJvY2VzcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI2MykKK25pbCApCisoIXBhaXIgICJhbGlhcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI2NSkKK25pbCApCisoIXBhaXIgICJzYW1lX2JvZHlfYWxpYXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyNjcpCituaWwgKQorKCFwYWlyICAiZnJlcXVlbmN5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjcwKQorbmlsICkKKyghcGFpciAgIm9ubHlfY2FsbGVkX2F0X3N0YXJ0dXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyNzIpCituaWwgKQorKCFwYWlyICAib25seV9jYWxsZWRfYXRfZXhpdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI3NCkKK25pbCApCisoIXBhaXIgICJ0bV9jbG9uZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI3OSkKK25pbCApCisoIXBhaXIgICJkaXNwYXRjaGVyX2Z1bmN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjgxKQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInRyYW5zLW1lbS5jIiAzODg3KQorbmlsICkpCispCisKKyghdHlwZSBzdHJ1Y3QgOTQ3IG5pbCAgZ2NfdW51c2VkICJ0bV9pcGFfY2dfZGF0YSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTQ4IG5pbCAgZ2NfdW51c2VkICJ0bV9tZW1vcHRfYml0bWFwcyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTQ5IAorKCF0eXBlIHBvaW50ZXIgOTUwIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk0OSkKKykKKyBnY191bnVzZWQgInRtX21lbW9wIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5NTEgbmlsICBnY191bnVzZWQgImJiMnJlZ19zdHVmZiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTUyIAorKCF0eXBlIHBvaW50ZXIgOTUzIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk1MikKKykKKyBnY191bnVzZWQgInRtX3JlZ2lvbiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTU0IG5pbCAgZ2NfdW51c2VkICJ0bV9uZXdfbWVtX21hcCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTU1IAorKCF0eXBlIHBvaW50ZXIgOTU2IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk1NSkKKykKKyBnY191bnVzZWQgInRtX2xvZ19lbnRyeSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTU3IG5pbCAgZ2NfdW51c2VkICJkaWFnbm9zZV90bSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSB1c2VyX3N0cnVjdCA5NTggbmlsICBnY191bnVzZWQgInZlYzxpcGFfcGFybV9hZGp1c3RtZW50X3Q+IgorKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNTkyKQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAiaXBhX3Bhcm1fYWRqdXN0bWVudF90IgorKCF0eXBlIHN0cnVjdCA5NTkgbmlsICBnY191bnVzZWQgImlwYV9wYXJtX2FkanVzdG1lbnQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA1OTIpCituaWwgKSkKKykKKworKCF0eXBlIHVzZXJfc3RydWN0IDk2MCAKKyghdHlwZSBwb2ludGVyIDk2MSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTYwKQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzxpcGFfZWRnZV9hcmdzX3QsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNDM3KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDQzNykKK25pbCApCisoIXBhaXIgICJpcGFfZWRnZV9hcmdzX3QiCisoIXR5cGUgc3RydWN0IDk2MiBuaWwgIGdjX3VzZWQgImlwYV9lZGdlX2FyZ3MiCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA0MDQpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJqdW1wX2Z1bmN0aW9ucyIKKyghdHlwZSBwb2ludGVyIDk2MyBuaWwgIGdjX3VzZWQKKyghdHlwZSB1c2VyX3N0cnVjdCA5NjQgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2MykKKyBnY19wb2ludGVkX3RvICJ2ZWM8aXBhX2p1bXBfZnVuY190LHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDQwMykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA0MDMpCituaWwgKQorKCFwYWlyICAiaXBhX2p1bXBfZnVuY190IgorKCF0eXBlIHN0cnVjdCA5NjUgbmlsICBnY191c2VkICJpcGFfanVtcF9mdW5jIgorKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTc5KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiYWdnIgorKCF0eXBlIHN0cnVjdCA5NjYgCisoIXR5cGUgcG9pbnRlciA5NjcgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTY2KQorKQorIGdjX3VzZWQgImlwYV9hZ2dfanVtcF9mdW5jdGlvbiIKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDE1NCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIml0ZW1zIgorKCF0eXBlIHBvaW50ZXIgOTY4IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDk2OSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTY4KQorIGdjX3BvaW50ZWRfdG8gInZlYzxpcGFfYWdnX2pmX2l0ZW1fdCx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxNTEpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTUxKQorbmlsICkKKyghcGFpciAgImlwYV9hZ2dfamZfaXRlbV90IgorKCF0eXBlIHN0cnVjdCA5NzAgbmlsICBnY191c2VkICJpcGFfYWdnX2pmX2l0ZW0iCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxNDIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJvZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDEzOCkKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTQxKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDE1MSkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxNTEpCituaWwgKQorKCFwYWlyICAiYnlfcmVmIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxNTMpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTY2KQorbmlsICkKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDE2OCkKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSB1bmlvbiA5NzEgbmlsICBnY191c2VkICJqdW1wX2Z1bmNfdmFsdWUiCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxNzgpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJrbm93bl90eXBlIgorKCF0eXBlIHN0cnVjdCA5NzIgbmlsICBnY191c2VkICJpcGFfa25vd25fdHlwZV9kYXRhIgorKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgODUpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJvZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDgwKQorbmlsICkKKyghcGFpciAgImJhc2VfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgODIpCituaWwgKQorKCFwYWlyICAiY29tcG9uZW50X3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDg0KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDE3NCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdGFnIHN0cmluZyAgIklQQV9KRl9LTk9XTl9UWVBFIikKKykKKykKKyghcGFpciAgImNvbnN0YW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxNzUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJJUEFfSkZfQ09OU1QiKQorKQorKQorKCFwYWlyICAicGFzc190aHJvdWdoIgorKCF0eXBlIHN0cnVjdCA5NzMgbmlsICBnY191c2VkICJpcGFfcGFzc190aHJvdWdoX2RhdGEiCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxMDgpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJvcGVyYW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA5MykKK25pbCApCisoIXBhaXIgICJmb3JtYWxfaWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDk1KQorbmlsICkKKyghcGFpciAgIm9wZXJhdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTAwKQorbmlsICkKKyghcGFpciAgImFnZ19wcmVzZXJ2ZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDEwNykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxNzYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICJJUEFfSkZfUEFTU19USFJPVUdIIikKKykKKykKKyghcGFpciAgImFuY2VzdG9yIgorKCF0eXBlIHN0cnVjdCA5NzQgbmlsICBnY191c2VkICJpcGFfYW5jZXN0b3JfamZfZGF0YSIKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDEyMykKKworKCFmaWVsZHMgNCAKKyghcGFpciAgIm9mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTE2KQorbmlsICkKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDExOCkKK25pbCApCisoIXBhaXIgICJmb3JtYWxfaWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDEyMCkKK25pbCApCisoIXBhaXIgICJhZ2dfcHJlc2VydmVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxMjIpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTc3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiB0YWcgc3RyaW5nICAiSVBBX0pGX0FOQ0VTVE9SIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDE3OCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICIlMS50eXBlIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDQwMykKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA0MDMpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNDM3KQorbmlsICkpCispCisKKyghdHlwZSB1c2VyX3N0cnVjdCA5NzUgCisoIXR5cGUgcG9pbnRlciA5NzYgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk3NSkKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8aXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDQzNSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA0MzUpCituaWwgKQorKCFwYWlyICAiaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wIgorKCF0eXBlIHBvaW50ZXIgOTc3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCA5NzggCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk3NykKKyBnY19wb2ludGVkX3RvICJpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlIgorKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMzkxKQorCisoIWZpZWxkcyA1IAorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTc3KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAzODIpCituaWwgKQorKCFwYWlyICAib2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAzODQpCituaWwgKQorKCFwYWlyICAidmFsdWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDM4NikKK25pbCApCisoIXBhaXIgICJpbmRleCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMzg4KQorbmlsICkKKyghcGFpciAgImJ5X3JlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMzkwKQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDQzNSkKK25pbCApKQorKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2NCkKKworKCF0eXBlIHN0cnVjdCA5NzkgbmlsICBnY191bnVzZWQgImlwYV9wYXJhbV9kZXNjcmlwdG9yIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5NzEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTY5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk3NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5NzMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTcyKQorCisoIXR5cGUgc3RydWN0IDk4MCBuaWwgIGdjX3VudXNlZCAiYW9fcmVmX3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDk4MSBuaWwgIGdjX3VudXNlZCAicHJvcF9zdGF0c19kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5ODIgbmlsICBnY191bnVzZWQgImNncmFwaF9vcmRlcl9zb3J0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5ODMgCisoIXR5cGUgcG9pbnRlciA5ODQgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTgzKQorKQorIGdjX3VudXNlZCAibHRvX291dF9kZWNsX3N0YXRlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5ODUgbmlsICBnY191bnVzZWQgInBhc3NfbGlzdF9ub2RlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5ODYgCisoIXR5cGUgcG9pbnRlciA5ODcgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTg2KQorKQorIGdjX3VudXNlZCAidWlkX3JhbmdlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5ODggbmlsICBnY191bnVzZWQgInBhc3NfcmVnaXN0cnkibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDk4OSBuaWwgIGdjX3VudXNlZCAiZHVtcF9maWxlX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDk5MCBuaWwgIGdjX3VudXNlZCAib3B0X3Bhc3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDk5MSBuaWwgIGdjX3VudXNlZCAiZ2NjX3RhcmdldCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTkyIG5pbCAgZ2NfdW51c2VkICJleHBhbmRfdmVjX3Blcm1fZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTkzIG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jOjYyMTkibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDk5NCBuaWwgIGdjX3VudXNlZCAiYWFyY2g2NF9vcHRpb25fZXh0ZW5zaW9uIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5OTUgbmlsICBnY191bnVzZWQgInByb2Nlc3NvciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTk2IG5pbCAgZ2NfdW51c2VkICJzaW1kX2ltbWVkaWF0ZV9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5OTcgbmlsICBnY191bnVzZWQgImFhcmNoNjRfYWRkcmVzc19pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCA5OTggbmlsICBnY191bnVzZWQgImNsX29wdGlvbl9zdGF0ZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgOTk5IG5pbCAgZ2NfdW51c2VkICJfc3RtdF92ZWNfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAwMCBuaWwgIGdjX3VudXNlZCAib21wX3Rhc2tjb3B5X2NvbnRleHQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMDEgbmlsICBnY191bnVzZWQgIm9tcF9mb3JfZGF0YSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAwMiBuaWwgIGdjX3VudXNlZCAib21wX2Zvcl9kYXRhX2xvb3AibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMDMgbmlsICBnY191bnVzZWQgIm9tcF9jb250ZXh0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDA0IG5pbCAgZ2NfdW51c2VkICJjbHNuX2RhdGEibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMDUgbmlsICBnY191bnVzZWQgImVsdl9kYXRhIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDA2IG5pbCAgZ2NfdW51c2VkICJkYXRhX2RlcGVuZGVuY2VfcmVsYXRpb24ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMDcgCisoIXR5cGUgcG9pbnRlciAxMDA4IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwMDcpCispCisgZ2NfdW51c2VkICJsYW1iZGFfdHJhbnNfbWF0cml4X3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMDkgbmlsICBnY191bnVzZWQgIm5hbWVfdG9fY29weV9lbHQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMTAgbmlsICBnY191bnVzZWQgInJlZHVjdGlvbl9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDExIG5pbCAgZ2NfdW51c2VkICJuZXN0aW5nX2NvcHlfYm9keV9kYXRhIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDEyIG5pbCAgZ2NfdW51c2VkICJuZXN0aW5nX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMTMgbmlsICBnY191bnVzZWQgInNzYV9vcGVyYW5kX2l0ZXJhdG9yX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQyNikKKworKCF0eXBlIHN0cnVjdCAxMDE0IG5pbCAgZ2NfdW51c2VkICJjaHJlY19zdGF0cyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAxNSAKKyghdHlwZSBwb2ludGVyIDEwMTYgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwMTUpCispCisgZ2NfcG9pbnRlZF90byAic2Nldl9pbmZvX3N0ciIKKyghc3JjZmlsZWxvYyAgInRyZWUtc2NhbGFyLWV2b2x1dGlvbi5jIiAyNzkpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJpbnN0YW50aWF0ZWRfYmVsb3ciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NykKKworKCFzcmNmaWxlbG9jICAidHJlZS1zY2FsYXItZXZvbHV0aW9uLmMiIDI3NikKK25pbCApCisoIXBhaXIgICJ2YXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc2NhbGFyLWV2b2x1dGlvbi5jIiAyNzcpCituaWwgKQorKCFwYWlyICAiY2hyZWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc2NhbGFyLWV2b2x1dGlvbi5jIiAyNzgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDE3IG5pbCAgZ2NfdW51c2VkICJnaW1wbGlmeV9pbml0X2N0b3JfcHJlZXZhbF9kYXRhIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDE4IG5pbCAgZ2NfdW51c2VkICJnaW1wbGVfdGVtcF9oYXNoX2VsdCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAxOSBuaWwgIGdjX3VudXNlZCAibnVtYmVyZWRfdHJlZV9kIgorKCFzcmNmaWxlbG9jICAidHJlZS1kZmEuYyIgNjk5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1kZmEuYyIgNjk3KQorbmlsICkKKyghcGFpciAgIm51bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1kZmEuYyIgNjk4KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAyMCBuaWwgIGdjX3VudXNlZCAiZGZhX3N0YXRzX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMjEgbmlsICBnY191bnVzZWQgIm1vdmVfc3RtdF9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDIyIG5pbCAgZ2NfdW51c2VkICJsb2N1c19kaXNjcmltX21hcCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAyMyBuaWwgIGdjX3VudXNlZCAiY2ZnX3N0YXRzX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTAyNCAKKyghdHlwZSBwb2ludGVyIDEwMjUgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwMjQpCispCisgZ2NfcG9pbnRlZF90byAidmVjPG1lbV9hZGRyX3RlbXBsYXRlLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLWFkZHJlc3MuYyIgODYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtYWRkcmVzcy5jIiA4NikKK25pbCApCisoIXBhaXIgICJtZW1fYWRkcl90ZW1wbGF0ZSIKKyghdHlwZSBzdHJ1Y3QgMTAyNiBuaWwgIGdjX3VzZWQgIm1lbV9hZGRyX3RlbXBsYXRlIgorKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtYWRkcmVzcy5jIiA3OSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInJlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1hZGRyZXNzLmMiIDc0KQorbmlsICkKKyghcGFpciAgInN0ZXBfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM3KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1hZGRyZXNzLmMiIDc1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJvZmZfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM3KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1hZGRyZXNzLmMiIDc3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1hZGRyZXNzLmMiIDg2KQorbmlsICkpCispCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAyNikKKworKCF0eXBlIHN0cnVjdCAxMDI3IG5pbCAgZ2NfdW51c2VkICJsYWJlbHNfcyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAyOCBuaWwgIGdjX3VudXNlZCAibGVoX3RmX3N0YXRlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDI5IG5pbCAgZ2NfdW51c2VkICJsZWhfc3RhdGUibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMzAgbmlsICBnY191bnVzZWQgImdvdG9fcXVldWVfbm9kZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAzMSBuaWwgIGdjX3VudXNlZCAiZmluYWxseV90cmVlX25vZGUibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgdW5pb24gMTAzMiBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL3RyZWUtZWguYzo0MSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAzMyBuaWwgIGdjX3VudXNlZCAiYWZmaW5lX3RyZWVfY29tYmluYXRpb24ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwMzQgbmlsICBnY191bnVzZWQgInRyZWVfbml0ZXJfZGVzYyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTAzNSBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL3RyZWUtZmxvdy5oOjU3MCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSB1bmRlZmluZWQgMTAzNiBuaWwgIGdjX3VudXNlZCAidmxfZW1iZWQiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNDg0KQorKQorCisoIXR5cGUgdW5kZWZpbmVkIDEwMzcgbmlsICBnY191bnVzZWQgInZhX2hlYXAiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNDg0KQorKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTAzOCBuaWwgIGdjX3VudXNlZCAidmVjPGVkZ2VfdmFyX21hcCx2YV9oZWFwLHZsX2VtYmVkPiIKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA0ODQpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJ2bF9lbWJlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAzNikKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDQ4NCkKK25pbCApCisoIXBhaXIgICJ2YV9oZWFwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDM3KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNDg0KQorbmlsICkKKyghcGFpciAgImVkZ2VfdmFyX21hcCIKKyghdHlwZSBzdHJ1Y3QgMTAzOSBuaWwgIGdjX3VudXNlZCAiX2VkZ2VfdmFyX21hcCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA0ODQpCituaWwgKSkKKykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMDM5KQorCisoIXR5cGUgc3RydWN0IDEwNDAgbmlsICBnY191bnVzZWQgIm9tcF9yZWdpb24ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwNDEgbmlsICBnY191bnVzZWQgImludF90cmVlX21hcCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA0MiBuaWwgIGdjX3VudXNlZCAiaW1tZWRpYXRlX3VzZV9pdGVyYXRvcl9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDQzIG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvdHJlZS1mbG93Lmg6MTAzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0MjQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDIxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQzMSkKKworKCF0eXBlIHN0cnVjdCAxMDQ0IG5pbCAgZ2NfdW51c2VkICJtZl94Zm9ybV9kZWNsc19kYXRhIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDQ1IG5pbCAgZ2NfdW51c2VkICJjb3VudF9wdHJfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA0NiBuaWwgIGdjX3VudXNlZCAid2Fsa19zdG10X2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwNDcgbmlsICBnY191bnVzZWQgImdpbXBsaWZ5X29tcF9jdHgibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwNDggbmlsICBnY191bnVzZWQgImdpbXBsaWZ5X2N0eCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzUzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM1MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNTEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM1MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNDgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzQ3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM0NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNDMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzQ1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM0MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNDApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzM5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMzOCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMzcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzMxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMyOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMzApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzI4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMyNykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMjYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzI1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMyMSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMjMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzIyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMTgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxNCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMTYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEyKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTA0OSBuaWwgIGdjX3VudXNlZCAidmVjPGdpbXBsZT4iCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzgpCisKKyghZmllbGRzIDEgCisoIXBhaXIgICJnaW1wbGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDM4KQorbmlsICkpCispCisKKyghdHlwZSBzdHJ1Y3QgMTA1MCBuaWwgIGdjX3VudXNlZCAidG1fYWxpYXNfcGFpciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA1MSBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL3ZhcmFzbS5jOjQ3MTIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwNTIgbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy92YXJhc20uYzo0NDY0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDUzIG5pbCAgZ2NfdW51c2VkICJhc21faW50X29wIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDU0IG5pbCAgZ2NfdW51c2VkICJhZGRyX2NvbnN0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDU1IG5pbCAgZ2NfdW51c2VkICJzaW1wbGVfaXBhX29wdF9wYXNzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDU2IG5pbCAgZ2NfdW51c2VkICJmcmVlX2xhbmdfZGF0YV9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDU3IAorKCF0eXBlIHBvaW50ZXIgMTA1OCBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA1NykKKykKKyBnY19wb2ludGVkX3RvICJ0eXBlX2hhc2giCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmMiIDE2MikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImhhc2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuYyIgMTYwKQorbmlsICkKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuYyIgMTYxKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA1OSAKKyghdHlwZSBwb2ludGVyIDEwNjAgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNTkpCispCisgZ2NfcG9pbnRlZF90byAic3RyaW5nX3Bvb2xfZGF0YSIKKyghc3JjZmlsZWxvYyAgInN0cmluZ3Bvb2wuYyIgMjUyKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiZW50cmllcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzUpCisKKyghc3JjZmlsZWxvYyAgInN0cmluZ3Bvb2wuYyIgMjQ5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBuZXN0ZWRfcHRyIG5lc3RlZCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKyAiJWggPyBIVF9JREVOVF9UT19HQ0NfSURFTlQgKCVoKSA6IE5VTEwiICIlaCA/IEdDQ19JREVOVF9UT19IVF9JREVOVCAoJWgpIDogTlVMTCIpCisKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIlaC5uc2xvdHMiKQorKQorKQorKCFwYWlyICAibnNsb3RzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJzdHJpbmdwb29sLmMiIDI1MCkKK25pbCApCisoIXBhaXIgICJuZWxlbWVudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInN0cmluZ3Bvb2wuYyIgMjUxKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA2MSBuaWwgIGdjX3VudXNlZCAiY2ZnX2hvb2tzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDYyIAorKCF0eXBlIHBvaW50ZXIgMTA2MyBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDYyKQorKQorIGdjX3VudXNlZCAiYmxvY2tfaW5mb19kZWYibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwNjQgCisoIXR5cGUgcG9pbnRlciAxMDY1IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNjQpCispCisgZ2NfdW51c2VkICJzdGFja19kZWYibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgdW5pb24gMTA2NiBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL21jZi5jOjM0NCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA2NyBuaWwgIGdjX3VudXNlZCAiYXVnbWVudGluZ19wYXRoX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwNjggbmlsICBnY191bnVzZWQgInF1ZXVlX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwNjkgbmlsICBnY191bnVzZWQgImZpeHVwX2dyYXBoX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwNzAgCisoIXR5cGUgcG9pbnRlciAxMDcxIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNzApCispCisgZ2NfdW51c2VkICJmaXh1cF92ZXJ0ZXhfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA3MiAKKyghdHlwZSBwb2ludGVyIDEwNzMgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA3MikKKykKKyBnY191bnVzZWQgImZpeHVwX2VkZ2VfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA3NCBuaWwgIGdjX3VudXNlZCAiZWRnZV9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDc1IG5pbCAgZ2NfdW51c2VkICJiYl9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDc2IG5pbCAgZ2NfdW51c2VkICJhdG9taWNfb3BfZnVuY3Rpb25zIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDc3IG5pbCAgZ2NfdW51c2VkICJub19jb25mbGljdF9kYXRhIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDc4IG5pbCAgZ2NfdW51c2VkICJnb2R1bXBfY29udGFpbmVyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDc5IG5pbCAgZ2NfdW51c2VkICJtYWNyb19oYXNoX3ZhbHVlIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDgwIG5pbCAgZ2NfdW51c2VkICJtZW1fY29uZmxpY3RfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA4MSBuaWwgIGdjX3VudXNlZCAicmVnX2F2YWlsX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTA4MiBuaWwgIGdjX3VudXNlZCAidmVjPG1vZGlmeV9wYWlyPiIKKyghc3JjZmlsZWxvYyAgImdjc2UuYyIgNjEwKQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAibW9kaWZ5X3BhaXIiCisoIXR5cGUgc3RydWN0IDEwODMgbmlsICBnY191bnVzZWQgIm1vZGlmeV9wYWlyX3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJnY3NlLmMiIDYxMCkKK25pbCApKQorKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTA4NCBuaWwgIGdjX3VudXNlZCAidmVjPHJ0eD4iCisoIXNyY2ZpbGVsb2MgICJnY3NlLmMiIDYwOSkKKworKCFmaWVsZHMgMSAKKyghcGFpciAgInJ0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJnY3NlLmMiIDYwOSkKK25pbCApKQorKQorCisoIXR5cGUgc3RydWN0IDEwODUgbmlsICBnY191bnVzZWQgImJiX2RhdGEibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwODMpCisKKyghdHlwZSBzdHJ1Y3QgMTA4NiBuaWwgIGdjX3VudXNlZCAibHNfZXhwciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA4NyBuaWwgIGdjX3VudXNlZCAiaGFzaF90YWJsZV9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDg4IAorKCF0eXBlIHBvaW50ZXIgMTA4OSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDg4KQorKQorIGdjX3VudXNlZCAib2NjciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA5MCBuaWwgIGdjX3VudXNlZCAiZXhwciJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODgwKQorCisoIXR5cGUgc3RydWN0IDEwOTEgbmlsICBnY191bnVzZWQgImFjdGlvbl9yZWNvcmQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwOTIgbmlsICBnY191bnVzZWQgInR0eXBlc19maWx0ZXIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwOTMgbmlsICBnY191bnVzZWQgImR1cGxpY2F0ZV9laF9yZWdpb25zX2RhdGEibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwOTQgbmlsICBnY191bnVzZWQgImhhcmRfcmVnX3NldF9jb250YWluZXIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwOTUgbmlsICBnY191bnVzZWQgImFzc2lnbl9wYXJtX2RhdGFfb25lIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMDk2IG5pbCAgZ2NfdW51c2VkICJhc3NpZ25fcGFybV9kYXRhX2FsbCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTA5NyAKKyghdHlwZSBwb2ludGVyIDEwOTggbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA5NykKKykKKyBnY191c2VkICJpbml0aWFsX3ZhbHVlX3BhaXIiCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiAxMjE4KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiaGFyZF9yZWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgMTIxNikKK25pbCApCisoIXBhaXIgICJwc2V1ZG8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgMTIxNykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEwOTkgCisoIXR5cGUgcG9pbnRlciAxMTAwIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDk5KQorKQorIGdjX3BvaW50ZWRfdG8gInRlbXBfc2xvdF9hZGRyZXNzX2VudHJ5IgorKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNTU3KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiaGFzaCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNTU0KQorbmlsICkKKyghcGFpciAgImFkZHJlc3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNTU1KQorbmlsICkKKyghcGFpciAgInRlbXBfc2xvdCIKKyghdHlwZSBwb2ludGVyIDExMDEgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDExMDIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMDEpCisgZ2NfcG9pbnRlZF90byAidGVtcF9zbG90IgorKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNTQ1KQorCisoIWZpZWxkcyAxMCAKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMDEpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmMiIDUyMSkKK25pbCApCisoIXBhaXIgICJwcmV2IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTAxKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiA1MjMpCituaWwgKQorKCFwYWlyICAic2xvdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiA1MjUpCituaWwgKQorKCFwYWlyICAic2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNTI3KQorbmlsICkKKyghcGFpciAgInR5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmMiIDUzMikKK25pbCApCisoIXBhaXIgICJhbGlnbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNTM0KQorbmlsICkKKyghcGFpciAgImluX3VzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmMiIDUzNikKK25pbCApCisoIXBhaXIgICJsZXZlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNTM4KQorbmlsICkKKyghcGFpciAgImJhc2Vfb2Zmc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiA1NDEpCituaWwgKQorKCFwYWlyICAiZnVsbF9zaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiA1NDQpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNTU2KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTEwMyBuaWwgIGdjX3VudXNlZCAibG9jYXRlX2FuZF9wYWRfYXJnX2RhdGEibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExMDQgbmlsICBnY191bnVzZWQgImFyZ3Nfc2l6ZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTEwNSBuaWwgIGdjX3VudXNlZCAibWVtX2FkZHJlc3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExMDYgCisoIXR5cGUgcG9pbnRlciAxMTA3IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMDYpCispCisgZ2NfdW51c2VkICJzZXBhcmF0ZV9vcHMibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExMDggbmlsICBnY191bnVzZWQgInN0b3JlX2J5X3BpZWNlc19kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTA5IG5pbCAgZ2NfdW51c2VkICJtb3ZlX2J5X3BpZWNlc19kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0MDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDA4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQwNCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0MDIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzkzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzOTcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzk0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0MDApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDIzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5MikKKworKCF0eXBlIHN0cnVjdCAxMTEwIG5pbCAgZ2NfdW51c2VkICJnaW1wbGVfb3B0X3Bhc3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExMTEgbmlsICBnY191bnVzZWQgImZpbGVfbmFtZV9hY3F1aXJlX2RhdGEibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExMTIgbmlsICBnY191bnVzZWQgImRpcl9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTEzIG5pbCAgZ2NfdW51c2VkICJmaWxlX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExMTQgbmlsICBnY191bnVzZWQgImV4dGVybmFsX3JlZiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTExNSBuaWwgIGdjX3VudXNlZCAiZGVjbF90YWJsZV9lbnRyeSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTExNiBuaWwgIGdjX3VudXNlZCAiY3VfaGFzaF90YWJsZV9lbnRyeSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTExNyBuaWwgIGdjX3VudXNlZCAiY2hlY2tzdW1fYXR0cmlidXRlcyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTExOCBuaWwgIGdjX3VudXNlZCAibWQ1X2N0eCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSB1c2VyX3N0cnVjdCAxMTE5IAorKCF0eXBlIHBvaW50ZXIgMTEyMCBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTExOSkKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8ZGllX2FyZ19lbnRyeSx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg4MikKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg4MikKK25pbCApCisoIXBhaXIgICJkaWVfYXJnX2VudHJ5IgorKCF0eXBlIHN0cnVjdCAxMTIxIG5pbCAgZ2NfdXNlZCAiZGllX2FyZ19lbnRyeV9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjcwNSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImRpZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDYxKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjcwMykKK25pbCApCisoIXBhaXIgICJhcmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzA0KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODgyKQorbmlsICkpCispCisKKyghdHlwZSB1c2VyX3N0cnVjdCAxMTIyIAorKCF0eXBlIHBvaW50ZXIgMTEyMyBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEyMikKKykKKyBnY19wb2ludGVkX3RvICJ2ZWM8bWFjaW5mb19lbnRyeSx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjgzMCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjgzMCkKK25pbCApCisoIXBhaXIgICJtYWNpbmZvX2VudHJ5IgorKCF0eXBlIHN0cnVjdCAxMTI0IG5pbCAgZ2NfdXNlZCAibWFjaW5mb19zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU1OSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImNvZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU1NikKK25pbCApCisoIXBhaXIgICJsaW5lbm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTU3KQorbmlsICkKKyghcGFpciAgImluZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU1OCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjgzMCkKK25pbCApKQorKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTEyNSAKKyghdHlwZSBwb2ludGVyIDExMjYgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMjUpCispCisgZ2NfcG9pbnRlZF90byAidmVjPHB1Ym5hbWVfZW50cnksdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI4MjIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI4MjIpCituaWwgKQorKCFwYWlyICAicHVibmFtZV9lbnRyeSIKKyghdHlwZSBzdHJ1Y3QgMTEyNyAKKyghdHlwZSBwb2ludGVyIDExMjggbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEyNykKKykKKyBnY191c2VkICJwdWJuYW1lX3N0cnVjdCIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTQzKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZGllIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NjEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTQxKQorbmlsICkKKyghcGFpciAgIm5hbWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU0MikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjgyMikKK25pbCApKQorKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTEyOSAKKyghdHlwZSBwb2ludGVyIDExMzAgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMjkpCispCisgZ2NfcG9pbnRlZF90byAidmVjPGR3X2xpbmVfaW5mb190YWJsZV9wLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODE0KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODE0KQorbmlsICkKKyghcGFpciAgImR3X2xpbmVfaW5mb190YWJsZV9wIgorKCF0eXBlIHBvaW50ZXIgMTEzMSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMTEzMiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzMSkKKyBnY19wb2ludGVkX3RvICJkd19saW5lX2luZm9fdGFibGVfc3RydWN0IgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0ODUpCisKKyghZmllbGRzIDggCisoIXBhaXIgICJlbmRfbGFiZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjQ3MykKK25pbCApCisoIXBhaXIgICJmaWxlX251bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0NzcpCituaWwgKQorKCFwYWlyICAibGluZV9udW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDc4KQorbmlsICkKKyghcGFpciAgImNvbHVtbl9udW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDc5KQorbmlsICkKKyghcGFpciAgImRpc2NyaW1fbnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjQ4MCkKK25pbCApCisoIXBhaXIgICJpc19zdG10IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjQ4MSkKK25pbCApCisoIXBhaXIgICJpbl91c2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDgyKQorbmlsICkKKyghcGFpciAgImVudHJpZXMiCisoIXR5cGUgcG9pbnRlciAxMTMzIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDExMzQgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMzMpCisgZ2NfcG9pbnRlZF90byAidmVjPGR3X2xpbmVfaW5mb19lbnRyeSx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjQ4NCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjQ4NCkKK25pbCApCisoIXBhaXIgICJkd19saW5lX2luZm9fZW50cnkiCisoIXR5cGUgc3RydWN0IDExMzUgCisoIXR5cGUgcG9pbnRlciAxMTM2IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMzUpCispCisgZ2NfdXNlZCAiZHdfbGluZV9pbmZvX3N0cnVjdCIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDY4KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAib3Bjb2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjQ2NikKK25pbCApCisoIXBhaXIgICJ2YWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDY3KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDg0KQorbmlsICkpCispCispCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDg0KQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODE0KQorbmlsICkpCispCisKKyghdHlwZSBzdHJ1Y3QgMTEzNyAKKyghdHlwZSBwb2ludGVyIDExMzggbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMzcpCispCisgZ2NfcG9pbnRlZF90byAiY2FjaGVkX2R3X2xvY19saXN0X2RlZiIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzc5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiZGVjbF9pZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3NzUpCituaWwgKQorKCFwYWlyICAibG9jX2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1NykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3NzgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTM5IAorKCF0eXBlIHBvaW50ZXIgMTE0MCBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzOSkKKykKKyBnY19wb2ludGVkX3RvICJjYWxsX2FyZ19sb2Nfbm9kZSIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzUzKQorCisoIWZpZWxkcyA2IAorKCFwYWlyICAiY2FsbF9hcmdfbG9jX25vdGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3NDcpCituaWwgKQorKCFwYWlyICAibGFiZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjc0OCkKK25pbCApCisoIXBhaXIgICJibG9jayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3NDkpCituaWwgKQorKCFwYWlyICAidGFpbF9jYWxsX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzUwKQorbmlsICkKKyghcGFpciAgInN5bWJvbF9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3NTEpCituaWwgKQorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0MCkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3NTIpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5uZXh0IikKKykKKzUxMSBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNDEgCisoIXR5cGUgcG9pbnRlciAxMTQyIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTQxKQorKQorIGdjX3BvaW50ZWRfdG8gInZhcl9sb2NfbGlzdF9kZWYiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjc0MikKKworKCFmaWVsZHMgNCAKKyghcGFpciAgImZpcnN0IgorKCF0eXBlIHBvaW50ZXIgMTE0MyBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMTE0NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0MykKKyBnY19wb2ludGVkX3RvICJ2YXJfbG9jX25vZGUiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjcyMSkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImxvYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjcxOCkKK25pbCApCisoIXBhaXIgICJsYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzE5KQorbmlsICkKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNDMpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzIwKQorbmlsICkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGNoYWluX25leHQgc3RyaW5nICAiJWgubmV4dCIpCispCis1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3MjUpCituaWwgKQorKCFwYWlyICAibGFzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0MykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3MzMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiJWgiKQorKQorKQorKCFwYWlyICAibGFzdF9iZWZvcmVfc3dpdGNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTQzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjczOCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gc2tpcCBzdHJpbmcgICIlaCIpCispCispCisoIXBhaXIgICJkZWNsX2lkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjc0MSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNDQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEyMSkKKworKCF0eXBlIHN0cnVjdCAxMTQ1IG5pbCAgZ2NfdW51c2VkICJza2VsZXRvbl9jaGFpbl9zdHJ1Y3QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNDYgCisoIXR5cGUgcG9pbnRlciAxMTQ3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTQ2KQorKQorIGdjX3BvaW50ZWRfdG8gImxpbWJvX2RpZV9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU4NCkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImRpZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDYxKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU4MSkKK25pbCApCisoIXBhaXIgICJjcmVhdGVkX2ZvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1ODIpCituaWwgKQorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0NykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1ODMpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMTI0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NjQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzMikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMTM0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2NikKKworKCF0eXBlIHN0cnVjdCAxMTQ4IAorKCF0eXBlIHBvaW50ZXIgMTE0OSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0OCkKKykKKyBnY19wb2ludGVkX3RvICJkd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0IgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1NjYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJiZWdpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTY0KQorbmlsICkKKyghcGFpciAgImVuZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTY1KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTE1MCAKKyghdHlwZSBwb2ludGVyIDExNTEgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNTApCispCisgZ2NfcG9pbnRlZF90byAiZHdfcmFuZ2VzX3N0cnVjdCIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNTUxKQorCisoIWZpZWxkcyAxIAorKCFwYWlyICAibnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU1MCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMjcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzNSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NzApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDU1KQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTE1MiAKKyghdHlwZSBwb2ludGVyIDExNTMgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNTIpCispCisgZ2NfcG9pbnRlZF90byAidmVjPGRlZmVycmVkX2xvY2F0aW9ucyx2YV9nYz4iCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTE5OSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTE5OSkKK25pbCApCisoIXBhaXIgICJkZWZlcnJlZF9sb2NhdGlvbnMiCisoIXR5cGUgc3RydWN0IDExNTQgbmlsICBnY191c2VkICJkZWZlcnJlZF9sb2NhdGlvbnNfc3RydWN0IgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDExOTYpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YXJpYWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDExOTQpCituaWwgKQorKCFwYWlyICAiZGllIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NjEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMTk1KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMTk5KQorbmlsICkpCispCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE1NCkKKworKCF0eXBlIHVzZXJfc3RydWN0IDExNTUgCisoIXR5cGUgcG9pbnRlciAxMTU2IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTU1KQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzxkd19mZGVfcmVmLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxOTcpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE5NykKK25pbCApCisoIXBhaXIgICJkd19mZGVfcmVmIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDIpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxOTcpCituaWwgKSkKKykKKworKCF0eXBlIHN0cnVjdCAxMTU3IG5pbCAgZ2NfdW51c2VkICJydGxfb3B0X3Bhc3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNTggbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy9kd2FyZjJjZmkuYzoxOTIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNTkgCisoIXR5cGUgcG9pbnRlciAxMTYwIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNTkpCispCisgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvZHdhcmYyY2ZpLmM6OTgibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNjEgCisoIXR5cGUgcG9pbnRlciAxMTYyIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTYxKQorKQorIGdjX3BvaW50ZWRfdG8gInJlZ19zYXZlZF9pbl9kYXRhX3N0cnVjdCIKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiA3NykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgIm9yaWdfcmVnIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiA3NSkKK25pbCApCisoIXBhaXIgICJzYXZlZF9pbl9yZWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyY2ZpLmMiIDc2KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTE2MyAKKyghdHlwZSBwb2ludGVyIDExNjQgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNjMpCispCisgZ2NfcG9pbnRlZF90byAiZHdfY2ZpX3Jvd19zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJjZmkuYyIgNzEpCisKKyghZmllbGRzIDMgCisoIXBhaXIgICJjZmEiCisoIXR5cGUgc3RydWN0IDExNjUgbmlsICBnY191c2VkICJjZmFfbG9jIgorKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDEyNCkKKworKCFmaWVsZHMgNSAKKyghcGFpciAgIm9mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDExOCkKK25pbCApCisoIXBhaXIgICJiYXNlX29mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDExOSkKK25pbCApCisoIXBhaXIgICJyZWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxMjEpCituaWwgKQorKCFwYWlyICAiaW5kaXJlY3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxMjIpCituaWwgKQorKCFwYWlyICAiaW5fdXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTIzKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiA2NikKK25pbCApCisoIXBhaXIgICJjZmFfY2ZpIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiA2NykKK25pbCApCisoIXBhaXIgICJyZWdfc2F2ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQ0KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJjZmkuYyIgNzApCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTY2IG5pbCAgZ2NfdW51c2VkICJhcnJheV9kZXNjcl9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NTYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDc3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ3NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NzMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDYwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NTkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE2NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NDUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQ4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NTApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQ3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1MSkKKworKCF0eXBlIHN0cnVjdCAxMTY3IG5pbCAgZ2NfdW51c2VkICJkYnhfZmlsZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTE2OCAKKyghdHlwZSBwb2ludGVyIDExNjkgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNjgpCispCisgZ2NfcG9pbnRlZF90byAidHlwZWluZm8iCisoIXNyY2ZpbGVsb2MgICJkYnhvdXQuYyIgMTcyKQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAic3RhdHVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkYnhvdXQuYyIgMTY5KQorbmlsICkKKyghcGFpciAgImZpbGVfbnVtYmVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkYnhvdXQuYyIgMTcwKQorbmlsICkKKyghcGFpciAgInR5cGVfbnVtYmVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkYnhvdXQuYyIgMTcxKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gODM0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2NikKKworKCF0eXBlIHN0cnVjdCAxMTcwIG5pbCAgZ2NfdW51c2VkICJ0b3BvX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNzEgbmlsICBnY191bnVzZWQgImNhbGxlcl9zdGF0aXN0aWNzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTcyIG5pbCAgZ2NfdW51c2VkICJpcGFfZGZzX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNzMgbmlsICBnY191bnVzZWQgImlwY3BfcGFyYW1fbGF0dGljZXMibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNzQgbmlsICBnY191bnVzZWQgImlwY3BfYWdnX2xhdHRpY2UibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNzUgbmlsICBnY191bnVzZWQgImlwY3BfbGF0dGljZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTE3NiBuaWwgIGdjX3VudXNlZCAiaXBjcF92YWx1ZV9zb3VyY2UibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNzcgbmlsICBnY191bnVzZWQgImlwY3BfdmFsdWUibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExNzggbmlsICBnY191bnVzZWQgImx0b19pbnB1dF9ibG9jayJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTE3OSBuaWwgIGdjX3VudXNlZCAib3V0cHV0X2Jsb2NrIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTgwIG5pbCAgZ2NfdW51c2VkICJkYXRhX2luIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTgxIG5pbCAgZ2NfdW51c2VkICJiaXRwYWNrX2QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk1OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5NzgpCisKKyghdHlwZSBzdHJ1Y3QgMTE4MiBuaWwgIGdjX3VudXNlZCAiaW5saW5lX2VkZ2Vfc3VtbWFyeSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTYyKQorCisoIXR5cGUgc3RydWN0IDExODMgbmlsICBnY191bnVzZWQgImlwYV9rbm93bl9hZ2dfY29udGVudHNfbGlzdCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTE4NCBuaWwgIGdjX3VudXNlZCAidHlwZV9jaGFuZ2VfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTcwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2NSkKKworKCF0eXBlIHN0cnVjdCAxMTg1IG5pbCAgZ2NfdW51c2VkICJpcGFfbm9kZV9wYXJhbXMibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExODYgbmlsICBnY191bnVzZWQgInBhcmFtX2FuYWx5c2lzX2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExODcgbmlsICBnY191bnVzZWQgImNncmFwaF9wcm9wYWdhdGVfZnJlcXVlbmN5X2RhdGEibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExODggbmlsICBnY191bnVzZWQgImNzZWxpYl9yZWNvcmRfYXV0b2luY19kYXRhIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTg5IG5pbCAgZ2NfdW51c2VkICJleHBhbmRfdmFsdWVfZGF0YSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTE5MCBuaWwgIGdjX3VudXNlZCAiZWx0X2xpc3QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExOTEgbmlsICBnY191bnVzZWQgIm91dHB1dF9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMTkyIG5pbCAgZ2NfdW51c2VkICJsb2MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDExOTMgCisoIXR5cGUgcG9pbnRlciAxMTk0IG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExOTMpCispCisgZ2NfdW51c2VkICJiaXRtYXBfZGVzY3JpcHRvcl9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHVzZXJfc3RydWN0IDExOTUgCisoIXR5cGUgcG9pbnRlciAxMTk2IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTk1KQorKQorIGdjX3BvaW50ZWRfdG8gInZlYzxhbGlhc19zZXRfZW50cnksdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAiYWxpYXMuYyIgMjYyKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidmFfZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMpCisKKyghc3JjZmlsZWxvYyAgImFsaWFzLmMiIDI2MikKK25pbCApCisoIXBhaXIgICJhbGlhc19zZXRfZW50cnkiCisoIXR5cGUgcG9pbnRlciAxMTk3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAxMTk4IAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTk3KQorIGdjX3BvaW50ZWRfdG8gImFsaWFzX3NldF9lbnRyeV9kIgorKCFzcmNmaWxlbG9jICAiYWxpYXMuYyIgMTQ1KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAiYWxpYXNfc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJhbGlhcy5jIiAxMzEpCituaWwgKQorKCFwYWlyICAiaGFzX3plcm9fY2hpbGQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImFsaWFzLmMiIDEzNSkKK25pbCApCisoIXBhaXIgICJjaGlsZHJlbiIKKyghdHlwZSBwb2ludGVyIDExOTkgbmlsICBnY191c2VkCisoIXR5cGUgcGFyYW1fc3RydWN0IDEyMDAgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExOTkpCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIHN0cnVjdCAxMjAxIAorKCF0eXBlIHBvaW50ZXIgMTIwMiBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjAxKQorKQorIGdjX3VzZWQgInNwbGF5X3RyZWVfcyIKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiAxMjMpCisKKyghZmllbGRzIDcgCisoIXBhaXIgICJyb290IgorKCF0eXBlIHBvaW50ZXIgMTIwMyBuaWwgIGdjX3VudXNlZAorKCF0eXBlIHN0cnVjdCAxMjA0IAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjAzKQorIGdjX3VzZWQgInNwbGF5X3RyZWVfbm9kZV9zIgorKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9zcGxheS10cmVlLmgiIDk5KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAia2V5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgOTEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHVzZV9wYXJhbTEgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgOTQpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHVzZV9wYXJhbTIgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImxlZnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMDMpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiA5NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gdXNlX3BhcmFtcyBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAicmlnaHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMDMpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiA5OCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdXNlX3BhcmFtcyBzdHJpbmcgICIiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9zcGxheS10cmVlLmgiIDEwNCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gdXNlX3BhcmFtcyBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiY29tcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9zcGxheS10cmVlLmgiIDEwNykKK25pbCApCisoIXBhaXIgICJkZWxldGVfa2V5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgMTEwKQorbmlsICkKKyghcGFpciAgImRlbGV0ZV92YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9zcGxheS10cmVlLmgiIDExMykKK25pbCApCisoIXBhaXIgICJhbGxvY2F0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9zcGxheS10cmVlLmgiIDExNikKK25pbCApCisoIXBhaXIgICJkZWFsbG9jYXRlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgMTE5KQorbmlsICkKKyghcGFpciAgImFsbG9jYXRlX2RhdGEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwKQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgMTIyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorbmlsIAorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiYWxpYXMuYyIgMTQ0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbTJfaXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKykKKworKCFvcHRpb24gcGFyYW0xX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCispCispCispKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICJhbGlhcy5jIiAyNjIpCituaWwgKSkKKykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMTk4KQorCisoIXR5cGUgc3RydWN0IDEyMDUgbmlsICBnY191bnVzZWQgInNhdmVkX2hhcmRfcmVnIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjA2IG5pbCAgZ2NfdW51c2VkICJpbnNuX2NoYWluIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjA3IG5pbCAgZ2NfdW51c2VkICJyZWdfZXF1aXZzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4NTkpCisKKyghdHlwZSBzdHJ1Y3QgMTIwOCBuaWwgIGdjX3VudXNlZCAicmVsb2FkIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjA5IAorKCF0eXBlIHBvaW50ZXIgMTIxMCBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIwOSkKKykKKyBnY19wb2ludGVkX3RvICJjb25zdGFudF9kZXNjcmlwdG9yX3RyZWUiCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTE0MikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInJ0bCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTEzMykKK25pbCApCisoIXBhaXIgICJ2YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDExMzYpCituaWwgKQorKCFwYWlyICAiaGFzaCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDExNDEpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjExIG5pbCAgZ2NfdW51c2VkICJjZ3JhcGhfMm5vZGVfaG9va19saXN0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjEyIG5pbCAgZ2NfdW51c2VkICJjZ3JhcGhfMmVkZ2VfaG9va19saXN0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjEzIG5pbCAgZ2NfdW51c2VkICJjZ3JhcGhfbm9kZV9ob29rX2xpc3QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyMTQgbmlsICBnY191bnVzZWQgImNncmFwaF9lZGdlX2hvb2tfbGlzdCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTIxNSAKKyghdHlwZSBwb2ludGVyIDEyMTYgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMTUpCispCisgZ2NfcG9pbnRlZF90byAiYXNtX25vZGUiCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDc4KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIxNikKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDQ3MykKK25pbCApCisoIXBhaXIgICJhc21fc3RyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDc1KQorbmlsICkKKyghcGFpciAgIm9yZGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDc3KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTMyKQorCisoIXR5cGUgc3RydWN0IDEyMTcgbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy9jZ3JhcGguaDozNjMibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyMTggbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy9jZ3JhcGguaDozNTYibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyMTkgCisoIXR5cGUgcG9pbnRlciAxMjIwIG5pbCAgZ2NfdW51c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMTkpCispCisgZ2NfdW51c2VkICJ2YXJwb29sX25vZGVfc2V0X2RlZiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTIyMSAKKyghdHlwZSBwb2ludGVyIDEyMjIgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIyMSkKKykKKyBnY191bnVzZWQgImNncmFwaF9ub2RlX3NldF9kZWYibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyMjMgCisoIXR5cGUgcG9pbnRlciAxMjI0IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjIzKQorKQorIGdjX3BvaW50ZWRfdG8gImNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8iCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMzEwKQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAidGhpc19ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyOTEpCituaWwgKQorKCFwYWlyICAicHJldiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIyNCkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDI5NSkKK25pbCApCisoIXBhaXIgICJuZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjI0KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjk5KQorbmlsICkKKyghcGFpciAgImRpc3BhdGNoZXJfcmVzb2x2ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAzMDkpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5MzUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTMwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk0MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5NDMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTQ1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk0MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5MzkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTM4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk0NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5MTMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTI2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxNCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5MjMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTE2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxNykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5MjApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTIxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxMikKKworKCF0eXBlIHN0cnVjdCAxMjI1IG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvYmFzaWMtYmxvY2suaDo1NzQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyMjYgbmlsICBnY191bnVzZWQgImVkZ2VfbGlzdCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTIyNyBuaWwgIGdjX3VudXNlZCAiY2VfaWZfYmxvY2sibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQxNSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNTkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM1OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMDApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2MykKKworKCF0eXBlIHN0cnVjdCAxMjI4IG5pbCAgZ2NfdW51c2VkICJwcm9maWxlX3JlY29yZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTIyOSBuaWwgIGdjX3VudXNlZCAiZ2Nvdl93b3JraW5nX3NldF9pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjMwIG5pbCAgZ2NfdW51c2VkICJjc2VsaWJfc2V0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjMxIG5pbCAgZ2NfdW51c2VkICJlbHRfbG9jX2xpc3QibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyMzIgbmlsICBnY191bnVzZWQgImNzZWxpYl92YWxfc3RydWN0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4NzApCisKKyghdHlwZSBzdHJ1Y3QgMTIzMyBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL2NmZ2xvb3AuaDo1NDQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyMzQgbmlsICBnY191bnVzZWQgIm5pdGVyX2Rlc2MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyMzUgbmlsICBnY191bnVzZWQgInJ0eF9pdiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTIzNiBuaWwgIGdjX3VudXNlZCAiZW5pX3dlaWdodHNfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzA3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwNCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNTUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzA5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwNSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNTApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNDcpCisKKyghdHlwZSBzdHJ1Y3QgMTIzNyAKKyghdHlwZSBwb2ludGVyIDEyMzggbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMzcpCispCisgZ2NfcG9pbnRlZF90byAidHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5IgorKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjc5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAidHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjc3KQorbmlsICkKKyghcGFpciAgInZhcl9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA2NzgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA3NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0MzMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDEzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0MzcpCisKKyghdHlwZSBzdHJ1Y3QgMTIzOSBuaWwgIGdjX3VzZWQgInJ0bF9kYXRhIgorKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNDU0KQorCisoIWZpZWxkcyA1NSAKKyghcGFpciAgImV4cHIiCisoIXR5cGUgc3RydWN0IDEyNDAgbmlsICBnY191c2VkICJleHByX3N0YXR1cyIKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDEzOSkKKworKCFmaWVsZHMgNiAKKyghcGFpciAgInhfcGVuZGluZ19zdGFja19hZGp1c3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDEwNCkKK25pbCApCisoIXBhaXIgICJ4X2luaGliaXRfZGVmZXJfcG9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxMjEpCituaWwgKQorKCFwYWlyICAieF9zdGFja19wb2ludGVyX2RlbHRhIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxMjcpCituaWwgKQorKCFwYWlyICAieF9zYXZlcmVnc192YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxMzIpCituaWwgKQorKCFwYWlyICAieF9hcHBseV9hcmdzX3ZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDEzNSkKK25pbCApCisoIXBhaXIgICJ4X2ZvcmNlZF9sYWJlbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMTM4KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDIzNykKK25pbCApCisoIXBhaXIgICJlbWl0IgorKCF0eXBlIHN0cnVjdCAxMjQxIG5pbCAgZ2NfdXNlZCAiZW1pdF9zdGF0dXMiCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA4MikKKworKCFmaWVsZHMgOSAKKyghcGFpciAgInhfcmVnX3J0eF9ubyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNDUpCituaWwgKQorKCFwYWlyICAieF9maXJzdF9sYWJlbF9udW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDQ4KQorbmlsICkKKyghcGFpciAgInhfZmlyc3RfaW5zbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA1NSkKK25pbCApCisoIXBhaXIgICJ4X2xhc3RfaW5zbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA1NikKK25pbCApCisoIXBhaXIgICJzZXF1ZW5jZV9zdGFjayIKKyghdHlwZSBwb2ludGVyIDEyNDIgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDEyNDMgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNDIpCisgZ2NfcG9pbnRlZF90byAic2VxdWVuY2Vfc3RhY2siCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA0MCkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImZpcnN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDM3KQorbmlsICkKKyghcGFpciAgImxhc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzgpCituaWwgKQorKCFwYWlyICAibmV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI0MikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzkpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjIpCituaWwgKQorKCFwYWlyICAieF9jdXJfaW5zbl91aWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDY2KQorbmlsICkKKyghcGFpciAgInhfY3VyX2RlYnVnX2luc25fdWlkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA3MCkKK25pbCApCisoIXBhaXIgICJyZWdub19wb2ludGVyX2FsaWduX2xlbmd0aCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNzYpCituaWwgKQorKCFwYWlyICAicmVnbm9fcG9pbnRlcl9hbGlnbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDgxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyMzgpCituaWwgKQorKCFwYWlyICAidmFyYXNtIgorKCF0eXBlIHN0cnVjdCAxMjQ0IG5pbCAgZ2NfdXNlZCAidmFyYXNtX3N0YXR1cyIKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE4MSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInBvb2wiCisoIXR5cGUgcG9pbnRlciAxMjQ1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIHN0cnVjdCAxMjQ2IAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjQ1KQorIGdjX3BvaW50ZWRfdG8gInJ0eF9jb25zdGFudF9wb29sIgorKCFzcmNmaWxlbG9jICAidmFyYXNtLmMiIDMzNjUpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJmaXJzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjU0KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgMzM1MykKK25pbCApCisoIXBhaXIgICJsYXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNTQpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAzMzU0KQorbmlsICkKKyghcGFpciAgImNvbnN0X3J0eF9odGFiIgorKCF0eXBlIHBvaW50ZXIgMTI0NyBuaWwgIGdjX3VzZWQKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTI0OCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI0NykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI1NCkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAzMzYwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAyNTUpCispCispCispCisoIXBhaXIgICJvZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAzMzY0KQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE3NikKK25pbCApCisoIXBhaXIgICJkZWZlcnJlZF9jb25zdGFudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE4MCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyMzkpCituaWwgKQorKCFwYWlyICAiYXJncyIKKyghdHlwZSBzdHJ1Y3QgMTI0OSBuaWwgIGdjX3VzZWQgImluY29taW5nX2FyZ3MiCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyMTApCisKKyghZmllbGRzIDYgCisoIXBhaXIgICJwb3BzX2FyZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE4OCkKK25pbCApCisoIXBhaXIgICJzaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxOTMpCituaWwgKQorKCFwYWlyICAicHJldGVuZF9hcmdzX3NpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE5OCkKK25pbCApCisoIXBhaXIgICJhcmdfb2Zmc2V0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyMDIpCituaWwgKQorKCFwYWlyICAiaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjA2KQorbmlsICkKKyghcGFpciAgImludGVybmFsX2FyZ19wb2ludGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDIwOSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyNDApCituaWwgKQorKCFwYWlyICAic3Vic2VjdGlvbnMiCisoIXR5cGUgc3RydWN0IDEyNTAgbmlsICBnY191c2VkICJmdW5jdGlvbl9zdWJzZWN0aW9ucyIKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDIyMikKKworKCFmaWVsZHMgNCAKKyghcGFpciAgImhvdF9zZWN0aW9uX2xhYmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjE4KQorbmlsICkKKyghcGFpciAgImNvbGRfc2VjdGlvbl9sYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDIxOSkKK25pbCApCisoIXBhaXIgICJob3Rfc2VjdGlvbl9lbmRfbGFiZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyMjApCituaWwgKQorKCFwYWlyICAiY29sZF9zZWN0aW9uX2VuZF9sYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDIyMSkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyNDEpCituaWwgKQorKCFwYWlyICAiZWgiCisoIXR5cGUgc3RydWN0IDEyNTEgbmlsICBnY191c2VkICJydGxfZWgiCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxNTUpCisKKyghZmllbGRzIDcgCisoIXBhaXIgICJlaHJfc3RhY2thZGoiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMTQ1KQorbmlsICkKKyghcGFpciAgImVocl9oYW5kbGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE0NikKK25pbCApCisoIXBhaXIgICJlaHJfbGFiZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMTQ3KQorbmlsICkKKyghcGFpciAgInNqbGpfZmMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMTQ5KQorbmlsICkKKyghcGFpciAgInNqbGpfZXhpdF9hZnRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxNTApCituaWwgKQorKCFwYWlyICAiYWN0aW9uX3JlY29yZF9kYXRhIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0MTApCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE1MikKK25pbCApCisoIXBhaXIgICJjYWxsX3NpdGVfcmVjb3JkX3YiCisoIXR5cGUgYXJyYXkgMTI1MiBuaWwgIGdjX3VzZWQgIjIiIAorKCF0eXBlIHBvaW50ZXIgMTI1MyBuaWwgIGdjX3VzZWQKKyghdHlwZSB1c2VyX3N0cnVjdCAxMjU0IAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjUzKQorIGdjX3BvaW50ZWRfdG8gInZlYzxjYWxsX3NpdGVfcmVjb3JkLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE1NCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxNTQpCituaWwgKQorKCFwYWlyICAiY2FsbF9zaXRlX3JlY29yZCIKKyghdHlwZSBwb2ludGVyIDEyNTUgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDEyNTYgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNTUpCisgZ2NfcG9pbnRlZF90byAiY2FsbF9zaXRlX3JlY29yZF9kIgorKCFzcmNmaWxlbG9jICAiZXhjZXB0LmMiIDE2OCkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImxhbmRpbmdfcGFkIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5jIiAxNjYpCituaWwgKQorKCFwYWlyICAiYWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuYyIgMTY3KQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE1NCkKK25pbCApKQorKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAxNTQpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjQyKQorbmlsICkKKyghcGFpciAgIm91dGdvaW5nX2FyZ3Nfc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjQ4KQorbmlsICkKKyghcGFpciAgInJldHVybl9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjU0KQorbmlsICkKKyghcGFpciAgImhhcmRfcmVnX2luaXRpYWxfdmFscyIKKyghdHlwZSBwb2ludGVyIDEyNTcgbmlsICBnY191c2VkCisoIXR5cGUgc3RydWN0IDEyNTggCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNTcpCisgZ2NfcG9pbnRlZF90byAiaW5pdGlhbF92YWx1ZV9zdHJ1Y3QiCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiAxMjI2KQorCisoIWZpZWxkcyAzIAorKCFwYWlyICAibnVtX2VudHJpZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmMiIDEyMjMpCituaWwgKQorKCFwYWlyICAibWF4X2VudHJpZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmMiIDEyMjQpCituaWwgKQorKCFwYWlyICAiZW50cmllcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA5OCkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgMTIyNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgIiVoLm51bV9lbnRyaWVzIikKKykKKykpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDI2MSkKK25pbCApCisoIXBhaXIgICJzdGFja19wcm90ZWN0X2d1YXJkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyNjUpCituaWwgKQorKCFwYWlyICAieF9ub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDI2OSkKK25pbCApCisoIXBhaXIgICJ4X3JldHVybl9sYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyNzQpCituaWwgKQorKCFwYWlyICAieF9uYWtlZF9yZXR1cm5fbGFiZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjc5KQorbmlsICkKKyghcGFpciAgInhfc3RhY2tfc2xvdF9saXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDI4MykKK25pbCApCisoIXBhaXIgICJmcmFtZV9zcGFjZV9saXN0IgorKCF0eXBlIHBvaW50ZXIgMTI1OSBuaWwgIGdjX3VzZWQKKyghdHlwZSBzdHJ1Y3QgMTI2MCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI1OSkKKyBnY19wb2ludGVkX3RvICJmcmFtZV9zcGFjZSIKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDIzMykKKworKCFmaWVsZHMgMyAKKyghcGFpciAgIm5leHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNTkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDIyOSkKK25pbCApCisoIXBhaXIgICJzdGFydCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjMxKQorbmlsICkKKyghcGFpciAgImxlbmd0aCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjMyKQorbmlsICkpCituaWwgNTExIG5pbCApCispCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDI4NikKK25pbCApCisoIXBhaXIgICJ4X3N0YWNrX2NoZWNrX3Byb2JlX25vdGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMjg5KQorbmlsICkKKyghcGFpciAgInhfYXJnX3BvaW50ZXJfc2F2ZV9hcmVhIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDI5NSkKK25pbCApCisoIXBhaXIgICJkcmFwX3JlZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAyOTgpCituaWwgKQorKCFwYWlyICAieF9mcmFtZV9vZmZzZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDMwMykKK25pbCApCisoIXBhaXIgICJ4X3Bhcm1fYmlydGhfaW5zbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzMDYpCituaWwgKQorKCFwYWlyICAieF91c2VkX3RlbXBfc2xvdHMiCisoIXR5cGUgcG9pbnRlciAxMjYxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIHVzZXJfc3RydWN0IDEyNjIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNjEpCisgZ2NfcG9pbnRlZF90byAidmVjPHRlbXBfc2xvdF9wLHZhX2djPiIKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDMwOSkKKworKCFmaWVsZHMgMiAKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzMDkpCituaWwgKQorKCFwYWlyICAidGVtcF9zbG90X3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMDEpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDMwOSkKK25pbCApKQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzMDkpCituaWwgKQorKCFwYWlyICAieF9hdmFpbF90ZW1wX3Nsb3RzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTAxKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzMTIpCituaWwgKQorKCFwYWlyICAieF90ZW1wX3Nsb3RfbGV2ZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDMxNSkKK25pbCApCisoIXBhaXIgICJzdGFja19hbGlnbm1lbnRfbmVlZGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzMTkpCituaWwgKQorKCFwYWlyICAicHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzMjMpCituaWwgKQorKCFwYWlyICAicGFybV9zdGFja19ib3VuZGFyeSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzI2KQorbmlsICkKKyghcGFpciAgIm1heF91c2VkX3N0YWNrX3Nsb3RfYWxpZ25tZW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzMjkpCituaWwgKQorKCFwYWlyICAic3RhY2tfYWxpZ25tZW50X2VzdGltYXRlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzM4KQorbmlsICkKKyghcGFpciAgImFjY2Vzc2VzX3ByaW9yX2ZyYW1lcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzQ0KQorbmlsICkKKyghcGFpciAgImNhbGxzX2VoX3JldHVybiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzQ3KQorbmlsICkKKyghcGFpciAgInNhdmVzX2FsbF9yZWdpc3RlcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDM1MSkKK25pbCApCisoIXBhaXIgICJoYXNfbm9ubG9jYWxfZ290byIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzU1KQorbmlsICkKKyghcGFpciAgImhhc19hc21fc3RhdGVtZW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzNTgpCituaWwgKQorKCFwYWlyICAiYWxsX3Rocm93ZXJzX2FyZV9zaWJjYWxscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzY1KQorbmlsICkKKyghcGFpciAgImxpbWl0X3N0YWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzNjkpCituaWwgKQorKCFwYWlyICAicHJvZmlsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzcyKQorbmlsICkKKyghcGFpciAgInVzZXNfY29uc3RfcG9vbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzc1KQorbmlsICkKKyghcGFpciAgInVzZXNfcGljX29mZnNldF90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzc4KQorbmlsICkKKyghcGFpciAgInVzZXNfZWhfbHNkYSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzgxKQorbmlsICkKKyghcGFpciAgInRhaWxfY2FsbF9lbWl0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzODQpCituaWwgKQorKCFwYWlyICAiYXJnX3BvaW50ZXJfc2F2ZV9hcmVhX2luaXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDM4NykKK25pbCApCisoIXBhaXIgICJmcmFtZV9wb2ludGVyX25lZWRlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMzkyKQorbmlsICkKKyghcGFpciAgIm1heWJlX2hvdF9pbnNuX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDM5NSkKK25pbCApCisoIXBhaXIgICJzdGFja19yZWFsaWduX25lZWRlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNDAyKQorbmlsICkKKyghcGFpciAgInN0YWNrX3JlYWxpZ25fdHJpZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDQwNykKK25pbCApCisoIXBhaXIgICJuZWVkX2RyYXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDQxMSkKK25pbCApCisoIXBhaXIgICJzdGFja19yZWFsaWduX3Byb2Nlc3NlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNDE2KQorbmlsICkKKyghcGFpciAgInN0YWNrX3JlYWxpZ25fZmluYWxpemVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA0MjApCituaWwgKQorKCFwYWlyICAiZGJyX3NjaGVkdWxlZF9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA0MjMpCituaWwgKQorKCFwYWlyICAibm90aHJvdyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNDI4KQorbmlsICkKKyghcGFpciAgInNocmlua193cmFwcGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA0MzEpCituaWwgKQorKCFwYWlyICAic3BfaXNfdW5jaGFuZ2luZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNDM2KQorbmlsICkKKyghcGFpciAgImlzX2xlYWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDQ0MikKK25pbCApCisoIXBhaXIgICJ1c2VzX29ubHlfbGVhZl9yZWdzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA0NDcpCituaWwgKQorKCFwYWlyICAiYXNtX2Nsb2JiZXJzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA0NTMpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjYyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNTgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI2MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjUwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI0NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjQ2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkzNykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NDMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEwMikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0MTkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI1MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjU0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQxMSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjU2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNDApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI0MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjQzKQorCisoIXR5cGUgc3RydWN0IDEyNjMgbmlsICBnY191bnVzZWQgInJlYWxfZm9ybWF0Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjY0IG5pbCAgZ2NfdW51c2VkICJfb2JzdGFja19jaHVuayJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTI2NSBuaWwgIGdjX3VudXNlZCAiaHQibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg2MykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4NjgpCisKKyghdHlwZSBzdHJ1Y3QgMTI2NiBuaWwgIGdjX3VzZWQgImJ1aWx0aW5faW5mb190eXBlX2QiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDY0NjgpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJkZWNsIgorKCF0eXBlIGFycmF5IDEyNjcgbmlsICBnY191c2VkICIoaW50KUVORF9CVUlMVElOUyIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjQ2NikKK25pbCApCisoIXBhaXIgICJpbXBsaWNpdF9wIgorKCF0eXBlIGFycmF5IDEyNjggbmlsICBnY191c2VkICIoaW50KUVORF9CVUlMVElOUyIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjQ2NykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyNjkgbmlsICBnY191bnVzZWQgImNvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3JfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTI3MCBuaWwgIGdjX3VudXNlZCAiY2FsbF9leHByX2FyZ19pdGVyYXRvcl9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjcxIAorKCF0eXBlIHBvaW50ZXIgMTI3MiBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3MSkKKykKKyBnY19wb2ludGVkX3RvICJ0cmVlX3ZlY19tYXAiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDYyOTMpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJiYXNlIgorKCF0eXBlIHN0cnVjdCAxMjczIG5pbCAgZ2NfdXNlZCAidHJlZV9tYXBfYmFzZSIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjIzNSkKKworKCFmaWVsZHMgMSAKKyghcGFpciAgImZyb20iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjIzNCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDYyOTEpCituaWwgKQorKCFwYWlyICAidG8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDYyOTIpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjc0IAorKCF0eXBlIHBvaW50ZXIgMTI3NSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3NCkKKykKKyBnY19wb2ludGVkX3RvICJ0cmVlX3ByaW9yaXR5X21hcCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjI4MikKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImJhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNzMpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjI3OSkKK25pbCApCisoIXBhaXIgICJpbml0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDYyODApCituaWwgKQorKCFwYWlyICAiZmluaSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA2MjgxKQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTI3NiAKKyghdHlwZSBwb2ludGVyIDEyNzcgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNzYpCispCisgZ2NfcG9pbnRlZF90byAidHJlZV9pbnRfbWFwIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiA2MjcwKQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3MykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA2MjY4KQorbmlsICkKKyghcGFpciAgInRvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDYyNjkpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjc4IAorKCF0eXBlIHBvaW50ZXIgMTI3OSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3OCkKKykKKyBnY19wb2ludGVkX3RvICJ0cmVlX2RlY2xfbWFwIgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiA2MjU5KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAiYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3MykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA2MjU3KQorbmlsICkKKyghcGFpciAgInRvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDYyNTgpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjgwIAorKCF0eXBlIHBvaW50ZXIgMTI4MSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI4MCkKKykKKyBnY19wb2ludGVkX3RvICJ0cmVlX21hcCIKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjI0OCkKKworKCFmaWVsZHMgMyAKKyghcGFpciAgImJhc2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNzMpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjI0NSkKK25pbCApCisoIXBhaXIgICJoYXNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDYyNDYpCituaWwgKQorKCFwYWlyICAidG8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjI0NykKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNzMpCisKKyghdHlwZSBzdHJ1Y3QgMTI4MiBuaWwgIGdjX3VudXNlZCAicG9pbnRlcl9zZXRfdCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTI4MyBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjL3RyZWUuaDo1NTIzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjg0IAorKCF0eXBlIHBvaW50ZXIgMTI4NSBuaWwgIGdjX3VudXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjg0KQorKQorIGdjX3VudXNlZCAicmVjb3JkX2xheW91dF9pbmZvX3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEyODYgbmlsICBnY191bnVzZWQgImF0dHJpYnV0ZV9zcGVjIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1NTcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTU1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU1MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1NDQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTQ2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM4NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NzgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzg2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM3NykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzODApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzc4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM3OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzODQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzgzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM4MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzODEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU0MykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1MzIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDgxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ4MykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NzkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDgwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1NDIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTQ4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMzMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTM5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMzNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMzQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTQxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUzNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1MzcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTQ3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUwMSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1MDIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTM0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUzMykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzKQorCisoIXR5cGUgdXNlcl9zdHJ1Y3QgMTI4NyAKKyghdHlwZSBwb2ludGVyIDEyODggbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyODcpCispCisgZ2NfcG9pbnRlZF90byAidmVjPGFsaWFzX3BhaXIsdmFfZ2M+IgorKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyNTEpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJ2YV9nYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMykKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyNTEpCituaWwgKQorKCFwYWlyICAiYWxpYXNfcGFpciIKKyghdHlwZSBzdHJ1Y3QgMTI4OSBuaWwgIGdjX3VzZWQgImFsaWFzX3BhaXIiCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDI0NykKKworKCFmaWVsZHMgMiAKKyghcGFpciAgImRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjQ1KQorbmlsICkKKyghcGFpciAgInRhcmdldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyNDYpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyNTEpCituaWwgKSkKKykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjg5KQorCisoIXR5cGUgc3RydWN0IDEyOTAgbmlsICBnY191bnVzZWQgImV4cGFuZF9vcGVyYW5kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjkxIG5pbCAgZ2NfdW51c2VkICJleHRyYWN0aW9uX2luc24ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU1NCkKKworKCF0eXBlIHN0cnVjdCAxMjkyIG5pbCAgZ2NfdW51c2VkICJjb252ZXJ0X29wdGFiX2xpYmNhbGxfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTI5MyBuaWwgIGdjX3VudXNlZCAib3B0YWJfbGliY2FsbF9kIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjk0IG5pbCAgZ2NfdW51c2VkICJydGxfaG9va3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg1MCkKKworKCF0eXBlIHN0cnVjdCAxMjk1IG5pbCAgZ2NfdW51c2VkICJzdWJyZWdfaW5mbyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTI5NiBuaWwgIGdjX3VudXNlZCAicmVwbGFjZV9sYWJlbF9kYXRhIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzODgpCisKKyghdHlwZSBzdHJ1Y3QgMTI5NyBuaWwgIGdjX3VudXNlZCAiYWRkcmVzc19pbmZvIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMjk4IG5pbCAgZ2NfdW51c2VkICJmdWxsX3J0eF9jb3N0cyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNDEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0MykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNDQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQ1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNDcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQ4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNTApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTUxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE1MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNTMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTU0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE1NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNTYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTU3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE1OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNTkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTYwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE2MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNjIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTYzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE2NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNjUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTY2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE2NykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNjgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTY5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE3MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNzEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTcyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE3MykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNzQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTc1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE3NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxNzcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTc4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE3OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxODApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTgxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE4MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxODMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTg0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE4NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxODYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTg3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE4OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxODkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTkwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE5MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxOTIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTkzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE5NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxOTUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTk2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE5NykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxOTgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTk5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIwMCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMDEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjAyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIwMykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMDQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjA1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIwNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMDcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjA4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIwOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMTApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjExKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIxMikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMTMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjE0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIxNSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMTYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjE3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIxOCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMTkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjIwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIyMSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMjIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjIzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIyNCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMjUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjI2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIyNykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMjgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjI5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIzMCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMzEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjMyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIzMykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMzQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjM1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIzNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMzcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjM4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIzOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNTYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjU3KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI2MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNjQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjY1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI2NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNjcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjY4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI3MSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNzIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjczKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI3NCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNzUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjc2KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI3NykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNzgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjc5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4MCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyODEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgyKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4MykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyODQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjg1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyODcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjg4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyOTApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjkxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyOTMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjk0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNjQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzY1KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNjcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzY4KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM2OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNzApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzcxKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM3MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNzMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzc0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM3NSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzNzYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjUzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNTUpCisKKyghdHlwZSB1bmlvbiAxMjk5IG5pbCAgZ2NfdW51c2VkICJ1IgorKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NikKKworKCFmaWVsZHMgNSAKKyghcGFpciAgImZsZCIKKyghdHlwZSBhcnJheSAxMzAwIG5pbCAgZ2NfdW51c2VkICIxIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQyKQorKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQxKQorbmlsICkKKyghcGFpciAgImh3aW50IgorKCF0eXBlIGFycmF5IDEzMDEgbmlsICBnY191bnVzZWQgIjEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQyKQorbmlsICkKKyghcGFpciAgImJsb2NrX3N5bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQwKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMzQzKQorbmlsICkKKyghcGFpciAgInJ2IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDM0NCkKK25pbCApCisoIXBhaXIgICJmdiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjMpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAzNDUpCituaWwgKSkKK25pbCA1MTEgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyMykKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI1MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNDApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNzApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjU5KQorCisoIXR5cGUgc3RydWN0IDEzMDIgbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy9ydGwuaDoxMTYibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEzMDMgbmlsICBnY191bnVzZWQgImdjb3Zfc3VtbWFyeSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTMwNCBuaWwgIGdjX3VudXNlZCAiY291bnRzX2VudHJ5Im5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMzA1IAorKCF0eXBlIHBvaW50ZXIgMTMwNiBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMwNSkKKykKKyBnY19wb2ludGVkX3RvICJjb3ZlcmFnZV9kYXRhIgorKCFzcmNmaWxlbG9jICAiY292ZXJhZ2UuYyIgNjQpCisKKyghZmllbGRzIDYgCisoIXBhaXIgICJuZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzA2KQorCisoIXNyY2ZpbGVsb2MgICJjb3ZlcmFnZS5jIiA1OCkKK25pbCApCisoIXBhaXIgICJpZGVudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY292ZXJhZ2UuYyIgNTkpCituaWwgKQorKCFwYWlyICAibGluZW5vX2NoZWNrc3VtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjb3ZlcmFnZS5jIiA2MCkKK25pbCApCisoIXBhaXIgICJjZmdfY2hlY2tzdW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNvdmVyYWdlLmMiIDYxKQorbmlsICkKKyghcGFpciAgImZuX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNvdmVyYWdlLmMiIDYyKQorbmlsICkKKyghcGFpciAgImN0cl92YXJzIgorKCF0eXBlIGFycmF5IDEzMDcgbmlsICBnY191c2VkICJHQ09WX0NPVU5URVJTIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiY292ZXJhZ2UuYyIgNjMpCituaWwgKSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gY2hhaW5fbmV4dCBzdHJpbmcgICIlaC5uZXh0IikKKykKKzUxMSBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEzMDggbmlsICBnY191bnVzZWQgImFub255bW91czovY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy9iaXRtYXAuaDozMTYibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIzKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMDEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIwNCkKKworKCF0eXBlIHN0cnVjdCAxMzA5IG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oOjU1MiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDM5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ0MCkKKworKCF0eXBlIHVuaW9uIDEzMTAgbmlsICBnY191bnVzZWQgIl9kb250X3VzZV90cmVlX2hlcmVfIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMzExIG5pbCAgZ2NfdW51c2VkICJfZG9udF91c2VfcnR2ZWNfaGVyZV8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEzMTIgbmlsICBnY191bnVzZWQgIl9kb250X3VzZV9ydHhfaGVyZV8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5OCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAzMDIpCisKKyghdHlwZSBzdHJ1Y3QgMTMxMyBuaWwgIGdjX3VudXNlZCAicHJldHR5X3ByaW50X2luZm8ibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEzMTQgbmlsICBnY191bnVzZWQgImRpYWdub3N0aWNfY29udGV4dCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTMxNSBuaWwgIGdjX3VudXNlZCAiY2xfb3B0aW9uX2hhbmRsZXJzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMzE2IG5pbCAgZ2NfdW51c2VkICJjbF9kZWNvZGVkX29wdGlvbiJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTMxNyBuaWwgIGdjX3VudXNlZCAiY2xfb3B0aW9uIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1NTIpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTU2KQorCisoIXR5cGUgc3RydWN0IDEzMTggbmlsICBnY191bnVzZWQgImdjY19vcHRpb25zIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNDYpCisKKyghdHlwZSBzdHJ1Y3QgMTMxOSBuaWwgIGdjX3VudXNlZCAiZ2ltcGxlX3N0bXRfaXRlcmF0b3JfZCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzExKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI2MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMzgpCisKKyghdHlwZSBzdHJ1Y3QgMTMyMCAKKyghdHlwZSBwb2ludGVyIDEzMjEgbmlsICBnY191bnVzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMyMCkKKykKKyBnY191bnVzZWQgInNpbXBsZV9iaXRtYXBfZGVmIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTczKQorCisoIXR5cGUgc3RydWN0IDEzMjIgbmlsICBnY191bnVzZWQgInNhdmVfbWFjcm9fZGF0YSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTMyMyBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjLy4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oOjk4NCJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTMyNCBuaWwgIGdjX3VudXNlZCAiYW5vbnltb3VzOi9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvc3JjL2djYy1saW5hcm8tNC44LTIwMTMuMTEvZ2NjLy4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oOjk3MyJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBzdHJ1Y3QgMTMyNSBuaWwgIGdjX3VudXNlZCAiY3BwX251bSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzMpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTcwKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU3NikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1NzcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTc5KQorCisoIXR5cGUgc3RydWN0IDEzMjYgbmlsICBnY191bnVzZWQgIl9jcHBfZmlsZSJuaWwgCisoIWZpZWxkcyAwICkKK25pbCAwIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTgxKQorCisoIXR5cGUgc3RydWN0IDEzMjcgbmlsICBnY191bnVzZWQgImNwcF9kaXIibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEzMjggbmlsICBnY191bnVzZWQgImNwcF9jYWxsYmFja3MibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU3MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1NzgpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTc1KQorCisoIXR5cGUgc3RydWN0IDEzMjkgbmlsICBnY191bnVzZWQgImNwcF9vcHRpb25zIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMzMwIG5pbCAgZ2NfdW51c2VkICJjcHBfYnVmZmVyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMzMxIG5pbCAgZ2NfdW51c2VkICJjcHBfcmVhZGVyIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMzMyIG5pbCAgZ2NfdW51c2VkICJsaW5lbWFwX3N0YXRzIm5pbCAKKyghZmllbGRzIDAgKQorbmlsIDAgbmlsICkKKworKCF0eXBlIHN0cnVjdCAxMzMzIG5pbCAgZ2NfdW51c2VkICJhbm9ueW1vdXM6L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9nY2MvLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaDo2MjcibmlsIAorKCFmaWVsZHMgMCApCituaWwgMCBuaWwgKQorCisoIXR5cGUgc3RydWN0IDEzMzQgCisoIXR5cGUgcG9pbnRlciAxMzM1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzM0KQorKQorIGdjX3BvaW50ZWRfdG8gImxpbmVfbWFwcyIKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDMxOCkKKworKCFmaWVsZHMgMTAgCisoIXBhaXIgICJpbmZvX29yZGluYXJ5IgorKCF0eXBlIHN0cnVjdCAxMzM2IG5pbCAgZ2NfdXNlZCAibWFwc19pbmZvIgorKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgMjU5KQorCisoIWZpZWxkcyA0IAorKCFwYWlyICAibWFwcyIKKyghdHlwZSBwb2ludGVyIDEzMzcgbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgMTMzOCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMzNykKKyBnY191c2VkICJsaW5lX21hcCIKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDIxMykKKworKCFmaWVsZHMgMyAKKyghcGFpciAgInN0YXJ0X2xvY2F0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyMDQpCituaWwgKQorKCFwYWlyICAicmVhc29uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyMDcpCituaWwgKQorKCFwYWlyICAiZCIKKyghdHlwZSB1bmlvbiAxMzM5IG5pbCAgZ2NfdXNlZCAibWFwX3UiCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyMTIpCisKKyghZmllbGRzIDIgCisoIXBhaXIgICJvcmRpbmFyeSIKKyghdHlwZSBzdHJ1Y3QgMTM0MCBuaWwgIGdjX3VzZWQgImxpbmVfbWFwX29yZGluYXJ5IgorKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgODcpCisKKyghZmllbGRzIDUgCisoIXBhaXIgICJ0b19maWxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgNzEpCituaWwgKQorKCFwYWlyICAidG9fbGluZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgNzIpCituaWwgKQorKCFwYWlyICAiaW5jbHVkZWRfZnJvbSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgNzcpCituaWwgKQorKCFwYWlyICAic3lzcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDgzKQorbmlsICkKKyghcGFpciAgImNvbHVtbl9iaXRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiA4NikKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyMTApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIwIikKKykKKykKKyghcGFpciAgIm1hY3JvIgorKCF0eXBlIHN0cnVjdCAxMzQxIG5pbCAgZ2NfdXNlZCAibGluZV9tYXBfbWFjcm8iCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAxNzUpCisKKyghZmllbGRzIDQgCisoIXBhaXIgICJtYWNybyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTY4KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAxMDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIG5lc3RlZF9wdHIgbmVzdGVkIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3KQorICIlaCA/IEhUX0lERU5UX1RPX0dDQ19JREVOVCAoSFRfTk9ERSAoJWgpKSA6IE5VTEwiICIlaCA/IENQUF9IQVNITk9ERSAoR0NDX0lERU5UX1RPX0hUX0lERU5UICglaCkpIDogTlVMTCIpCispCispCisoIXBhaXIgICJuX3Rva2VucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgMTEyKQorbmlsICkKKyghcGFpciAgIm1hY3JvX2xvY2F0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTApCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDE2NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gYXRvbWljIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJleHBhbnNpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDE3NCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyMTEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHRhZyBzdHJpbmcgICIxIikKKykKKykpCituaWwgNTExIG5pbCApCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDIxMikKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVzYyBzdHJpbmcgICIlMS5yZWFzb24gPT0gTENfRU5URVJfTUFDUk8iKQorKQorKSkKK25pbCA1MTEgbmlsICkKKykKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgMjQ5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiJWgudXNlZCIpCispCispCisoIXBhaXIgICJhbGxvY2F0ZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDI1MikKK25pbCApCisoIXBhaXIgICJ1c2VkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyNTYpCituaWwgKQorKCFwYWlyICAiY2FjaGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDI1OCkKK25pbCApKQorbmlsIDUxMSBuaWwgKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyODkpCituaWwgKQorKCFwYWlyICAiaW5mb19tYWNybyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMzNikKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgMjkxKQorbmlsICkKKyghcGFpciAgImRlcHRoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyOTQpCituaWwgKQorKCFwYWlyICAidHJhY2VfaW5jbHVkZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDI5NykKK25pbCApCisoIXBhaXIgICJoaWdoZXN0X2xvY2F0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAzMDApCituaWwgKQorKCFwYWlyICAiaGlnaGVzdF9saW5lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAzMDMpCituaWwgKQorKCFwYWlyICAibWF4X2NvbHVtbl9oaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAzMDcpCituaWwgKQorKCFwYWlyICAicmVhbGxvY2F0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDMxMSkKK25pbCApCisoIXBhaXIgICJyb3VuZF9hbGxvY19zaXplIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAzMTUpCituaWwgKQorKCFwYWlyICAibG9jYXRpb25fYWRob2NfZGF0YV9tYXAiCisoIXR5cGUgc3RydWN0IDEzNDIgbmlsICBnY191c2VkICJsb2NhdGlvbl9hZGhvY19kYXRhX21hcCIKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDI4NCkKKworKCFmaWVsZHMgNCAKKyghcGFpciAgImh0YWIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUwKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyODApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHNraXAgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImN1cnJfbG9jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyODEpCituaWwgKQorKCFwYWlyICAiYWxsb2NhdGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyODIpCituaWwgKQorKCFwYWlyICAiZGF0YSIKKyghdHlwZSBwb2ludGVyIDEzNDMgbmlsICBnY191bnVzZWQKKyghdHlwZSBzdHJ1Y3QgMTM0NCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM0MykKKyBnY191c2VkICJsb2NhdGlvbl9hZGhvY19kYXRhIgorKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgMjY1KQorCisoIWZpZWxkcyAyIAorKCFwYWlyICAibG9jdXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDI2MykKK25pbCApCisoIXBhaXIgICJkYXRhIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMCkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgMjY0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBza2lwIHN0cmluZyAgIiIpCispCispKQorbmlsIDUxMSBuaWwgKQorKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiAyODMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIlaC5hbGxvY2F0ZWQiKQorKQorKSkKK25pbCA1MTEgbmlsICkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgMzE3KQorbmlsICkpCituaWwgNTExIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM0MikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMzQ0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMzYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMzOCkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMzM5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNDEpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1NjcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM0MCkKKykKKworKCF0eXBlZGVmcyA1MzMKKworKCFwYWlyICAidmVjPGl2YXJyZWZfZW50cnksdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAyNzYxKQorbmlsICkKKyghcGFpciAgIml2YXJyZWZfZW50cnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDI3NTkpCituaWwgKQorKCFwYWlyICAidmVjPHByb3RfbGlzdF9lbnRyeSx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYxNykKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTI1NykKK25pbCApCisoIXBhaXIgICJwcm90X2xpc3RfZW50cnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYxOSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTI1NikKK25pbCApCisoIXBhaXIgICJ2ZWM8bXNncmVmX2VudHJ5LHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjIwKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMjAzKQorbmlsICkKKyghcGFpciAgIm1zZ3JlZl9lbnRyeSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjIyKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMjAxKQorbmlsICkKKyghcGFpciAgInZlYzxpZGVudF9kYXRhX3R1cGxlLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjIzKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxMDM5KQorbmlsICkKKyghcGFpciAgImlkZW50X2RhdGFfdHVwbGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYyNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTAxNykKK25pbCApCisoIXBhaXIgICJzdHJpbmdfc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5oIiA2MzMpCituaWwgKQorKCFwYWlyICAiYXR0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjMzKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmgiIDIzOSkKK25pbCApCisoIXBhaXIgICJoYXNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2MzUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMjM4KQorbmlsICkKKyghcGFpciAgIm9iamNfcHJvcGVydHlfYXNzaWduX3NlbWFudGljcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5oIiA4NikKK25pbCApCisoIXBhaXIgICJvYmpjX21hcF9pdGVyYXRvcl90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbWFwLmgiIDI0MSkKK25pbCApCisoIXBhaXIgICJvYmpjX21hcF90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2MzgpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1tYXAuaCIgOTApCituaWwgKQorKCFwYWlyICAib2JqY19tYXBfcHJpdmF0ZV9oYXNoX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1tYXAuaCIgNDApCituaWwgKQorKCFwYWlyICAiZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NDMpCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8uYyIgMzczKQorbmlsICkKKyghcGFpciAgInR5cGVfcGFpcl90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NDcpCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8uYyIgMzA3KQorbmlsICkKKyghcGFpciAgInJld3JpdGVfcnVsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjQ5KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2V4cHIuYyIgMjA2NikKK25pbCApCisoIXBhaXIgICJjbGFzc19mbGFnX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY1MCkKKworKCFzcmNmaWxlbG9jICAiamF2YS9jbGFzcy5jIiA4MikKK25pbCApCisoIXBhaXIgICJidWlsdGluX2NyZWF0b3JfZnVuY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY1NCkKKworKCFzcmNmaWxlbG9jICAiamF2YS9idWlsdGlucy5jIiA4MCkKK25pbCApCisoIXBhaXIgICJKQ0YiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ4NykKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgMTIzKQorbmlsICkKKyghcGFpciAgIkJvb3RzdHJhcE1ldGhvZHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5NCkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YuaCIgOTkpCituaWwgKQorKCFwYWlyICAiYm9vdHN0cmFwX21ldGhvZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDk2KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiA5NCkKK25pbCApCisoIXBhaXIgICJDUG9vbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkwKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2pjZi5oIiA4OCkKK25pbCApCisoIXBhaXIgICJqY2ZfZmlsYnVmX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLmgiIDY2KQorbmlsICkKKyghcGFpciAgInZlYzxtZXRob2RfZW50cnksdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA0OTgpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDg4MikKK25pbCApCisoIXBhaXIgICJtZXRob2RfZW50cnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5OSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9qYXZhLXRyZWUuaCIgODY5KQorbmlsICkKKyghcGFpciAgInR5cGVfYXNzZXJ0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1MDYpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDc4NikKK25pbCApCisoIXBhaXIgICJqdl9hdHRyX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDc4MCkKK25pbCApCisoIXBhaXIgICJqdl9hdHRyX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDc3MCkKK25pbCApCisoIXBhaXIgICJjb25zdGFudF9wb29sIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0OTApCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDEzNSkKK25pbCApCisoIXBhaXIgICJnb19jaGFyX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5KQorCisoIXNyY2ZpbGVsb2MgICJnby9nby1sYW5nLmMiIDE2MikKK25pbCApCisoIXBhaXIgICJnZmNfaW50ZXJmYWNlX21hcHBpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY1NikKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA5MzYpCituaWwgKQorKCFwYWlyICAiZ2ZjX2ludGVyZmFjZV9zeW1fbWFwcGluZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjU3KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDkyMSkKK25pbCApCisoIXBhaXIgICJnZmNfcG93ZGVjbF9saXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NTgpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzExKQorbmlsICkKKyghcGFpciAgImdmY193cmFwcGVkX2Jsb2NrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NTkpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgMzM5KQorbmlsICkKKyghcGFpciAgImdmY19zYXZlZF92YXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY2MCkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiAzMjYpCituaWwgKQorKCFwYWlyICAiZ2ZjX2xvb3BpbmZvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NjEpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgMzE2KQorbmlsICkKKyghcGFpciAgImdmY19zcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjYyKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDI2NykKK25pbCApCisoIXBhaXIgICJnZmNfc3NfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjYzKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDIyNykKK25pbCApCisoIXBhaXIgICJnZmNfc3NfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiAxODMpCituaWwgKQorKCFwYWlyICAiZ2ZjX2FycmF5X2luZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY2NCkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiAxMzgpCituaWwgKQorKCFwYWlyICAiZ2ZjX2NvYXJyYXlfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiAxMDcpCituaWwgKQorKCFwYWlyICAiZ2ZjX3NlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NjUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgOTUpCituaWwgKQorKCFwYWlyICAic3RtdGJsb2NrX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY2NikKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiAzNSkKK25pbCApCisoIXBhaXIgICJnZmNfcGFja2VkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLXR5cGVzLmgiIDUyKQorbmlsICkKKyghcGFpciAgImZvcmFsbF9pbmZvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NjcpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtc3RtdC5jIiA1NykKK25pbCApCisoIXBhaXIgICJpdGVyX2luZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY2OCkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1zdG10LmMiIDQ2KQorbmlsICkKKyghcGFpciAgImdmY19zdF9wYXJhbWV0ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY2OSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pby5jIiA3OCkKK25pbCApCisoIXBhaXIgICJnZmNfc3RfcGFyYW1ldGVyX2ZpZWxkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NzApCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW8uYyIgNzIpCituaWwgKQorKCFwYWlyICAiZ2ZjX2ludHJpbnNpY19tYXBfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjcxKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jIiA4MykKK25pbCApCisoIXBhaXIgICJ2ZWM8cGVuZGluZ19ub2V4Y2VwdCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY3NCkKKworKCFzcmNmaWxlbG9jICAiY3AvZXhjZXB0LmMiIDExODApCituaWwgKQorKCFwYWlyICAicGVuZGluZ19ub2V4Y2VwdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjc2KQorCisoIXNyY2ZpbGVsb2MgICJjcC9leGNlcHQuYyIgMTE3OSkKK25pbCApCisoIXBhaXIgICJzZWNvbmRhcnlfdnB0cl92dHRfaW5pdF9kYXRhIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NzcpCisKKyghc3JjZmlsZWxvYyAgImNwL2NsYXNzLmMiIDgyMzEpCituaWwgKQorKCFwYWlyICAiZmluZF9maW5hbF9vdmVycmlkZXJfZGF0YSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjc4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jbGFzcy5jIiAyMTEzKQorbmlsICkKKyghcGFpciAgInN1Ym9iamVjdF9vZmZzZXRfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NsYXNzLmMiIDEwMCkKK25pbCApCisoIXBhaXIgICJ2dGJsX2luaXRfZGF0YSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjgwKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jbGFzcy5jIiA5NykKK25pbCApCisoIXBhaXIgICJjbGFzc19zdGFja19ub2RlX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY4MikKKworKCFzcmNmaWxlbG9jICAiY3AvY2xhc3MuYyIgNjYpCituaWwgKQorKCFwYWlyICAibWFuZ2xpbmdfZmxhZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL21ldGhvZC5jIiA1NSkKK25pbCApCisoIXBhaXIgICJ2ZWM8dHJlZV9pbnQsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2ODUpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5jIiA4MTk3KQorbmlsICkKKyghcGFpciAgInRyZWVfaW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2ODcpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5jIiA4MTk2KQorbmlsICkKKyghcGFpciAgImNwX3BhcnNlcl9leHByZXNzaW9uX3N0YWNrIgorKCF0eXBlIGFycmF5IDEzNDUgbmlsICBnY191bnVzZWQgIk5VTV9QUkVDX1ZBTFVFUyIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY4OCkKKykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmMiIDE2NDApCituaWwgKQorKCFwYWlyICAiY3BfcGFyc2VyX2V4cHJlc3Npb25fc3RhY2tfZW50cnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY4OCkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmMiIDE2MzQpCituaWwgKQorKCFwYWlyICAiY3BfcGFyc2VyX2JpbmFyeV9vcGVyYXRpb25zX21hcF9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2ODkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5jIiAxNjE4KQorbmlsICkKKyghcGFpciAgImNwX3BhcnNlcl9kZWNsYXJhdG9yX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5jIiAxNTg0KQorbmlsICkKKyghcGFpciAgImNwX3BhcnNlcl9mbGFncyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmMiIDE1NzIpCituaWwgKQorKCFwYWlyICAicmVxdWlyZWRfdG9rZW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5jIiAxNzgpCituaWwgKQorKCFwYWlyICAibmFtZV9sb29rdXBfZXJyb3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5jIiAxMjIpCituaWwgKQorKCFwYWlyICAibm9uX2ludGVncmFsX2NvbnN0YW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuYyIgMTEwKQorbmlsICkKKyghcGFpciAgImNwX3BhcnNlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjkwKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMzQzKQorbmlsICkKKyghcGFpciAgInZlYzxjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnksdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA3MDApCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAzMzQpCituaWwgKQorKCFwYWlyICAiY3BfcGFyc2VyX2NvbnRleHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5OCkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDE5NSkKK25pbCApCisoIXBhaXIgICJjcF9wYXJzZXJfc3RhdHVzX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxNzkpCituaWwgKQorKCFwYWlyICAiY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA3MDEpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxNjUpCituaWwgKQorKCFwYWlyICAidmVjPGNwX2RlZmF1bHRfYXJnX2VudHJ5LHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzAzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTU2KQorbmlsICkKKyghcGFpciAgImNwX2RlZmF1bHRfYXJnX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA3MDQpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5oIiAxNDgpCituaWwgKQorKCFwYWlyICAiY3BfdG9rZW5faWRlbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcwNSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDEzOCkKK25pbCApCisoIXBhaXIgICJjcF90b2tlbl9jYWNoZV9wdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTI2KQorbmlsICkKKyghcGFpciAgImNwX3Rva2VuX2NhY2hlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDEyNCkKK25pbCApCisoIXBhaXIgICJjcF9sZXhlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjkzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuaCIgMTA5KQorbmlsICkKKyghcGFpciAgInZlYzxjcF90b2tlbl9wb3NpdGlvbj4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5NikKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDk4KQorbmlsICkKKyghcGFpciAgInZlYzxjcF90b2tlbix2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5NSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDg0KQorbmlsICkKKyghcGFpciAgImNwX3Rva2VuX3Bvc2l0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NikKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDc0KQorbmlsICkKKyghcGFpciAgImNwX3Rva2VuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmgiIDcwKQorbmlsICkKKyghcGFpciAgImNwbHVzX2FycmF5X2luZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcwNykKKworKCFzcmNmaWxlbG9jICAiY3AvdHJlZS5jIiA3MjUpCituaWwgKQorKCFwYWlyICAiY29uc3RleHByX2NhbGwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcwOCkKKworKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDY0MzQpCituaWwgKQorKCFwYWlyICAiY29uc3RleHByX2Z1bmRlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzExKQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgNTc2NykKK25pbCApCisoIXBhaXIgICJ2ZWM8ZGVmZXJyZWRfYWNjZXNzLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzEyKQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgMTM4KQorbmlsICkKKyghcGFpciAgImRlZmVycmVkX2FjY2VzcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzE0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgMTM1KQorbmlsICkKKyghcGFpciAgInZlYzxkZWZlcnJlZF9hY2Nlc3NfY2hlY2ssdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA3MikKKworKCFzcmNmaWxlbG9jICAiY3Avc2VtYW50aWNzLmMiIDEzMCkKK25pbCApCisoIXBhaXIgICJzcGVjX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA3MTgpCisKKyghc3JjZmlsZWxvYyAgImNwL3B0LmMiIDg4KQorbmlsICkKKyghcGFpciAgInRyZWVfZm5fdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcHQuYyIgNDcpCituaWwgKQorKCFwYWlyICAicHJpb3JpdHlfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzI1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsMi5jIiA2NSkKK25pbCApCisoIXBhaXIgICJyZXNoYXBlX2l0ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcyNikKKworKCFzcmNmaWxlbG9jICAiY3AvZGVjbC5jIiA1MDM2KQorbmlsICkKKyghcGFpciAgInByZWRlZmluZWRfaWRlbnRpZmllciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzI3KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDM1ODcpCituaWwgKQorKCFwYWlyICAidHlwZW5hbWVfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzI4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDMxNjcpCituaWwgKQorKCFwYWlyICAidmVjPGluY29tcGxldGVfdmFyLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzMwKQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDI2MCkKK25pbCApCisoIXBhaXIgICJpbmNvbXBsZXRlX3ZhciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzMyKQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDI1NykKK25pbCApCisoIXBhaXIgICJjYW5kaWRhdGVfd2FybmluZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzM0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jYWxsLmMiIDQzNikKK25pbCApCisoIXBhaXIgICJ6X2NhbmRpZGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzM1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jYWxsLmMiIDQzNCkKK25pbCApCisoIXBhaXIgICJjb252ZXJzaW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3MzcpCisKKyghc3JjZmlsZWxvYyAgImNwL2NhbGwuYyIgNzgpCituaWwgKQorKCFwYWlyICAiY29udmVyc2lvbl9yYW5rIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jYWxsLmMiIDcyKQorbmlsICkKKyghcGFpciAgImNvbnZlcnNpb25fa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY2FsbC5jIiA1OCkKK25pbCApCisoIXBhaXIgICJkZWZlcnJlZF9hY2Nlc3NfY2hlY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDczKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDU1ODUpCituaWwgKQorKCFwYWlyICAid2Fsa19uYW1lc3BhY2VzX2ZuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDUxODUpCituaWwgKQorKCFwYWlyICAiY3BfcGFyYW1ldGVyX2RlY2xhcmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDczOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0ODA0KQorbmlsICkKKyghcGFpciAgImNwX2RlY2xhcmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc0MCkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0ODAyKQorbmlsICkKKyghcGFpciAgImNwX2RlY2xhcmF0b3Jfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0Nzk4KQorbmlsICkKKyghcGFpciAgImNwX2RlY2xfc3BlY2lmaWVyX3NlcSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzQxKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ3ODYpCituaWwgKQorKCFwYWlyICAiY3BfZGVjbF9zcGVjIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ3NDIpCituaWwgKQorKCFwYWlyICAiY3Bfc3RvcmFnZV9jbGFzcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0NzExKQorbmlsICkKKyghcGFpciAgImNwX3ZpcnRfc3BlY2lmaWVycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0NjgxKQorbmlsICkKKyghcGFpciAgImNwX2N2X3F1YWxzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ2NjUpCituaWwgKQorKCFwYWlyICAib3BlcmF0b3JfbmFtZV9pbmZvX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc0MikKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0NjUzKQorbmlsICkKKyghcGFpciAgInVuaWZpY2F0aW9uX2tpbmRfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0MjkxKQorbmlsICkKKyghcGFpciAgImJhc2Vfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0MjUzKQorbmlsICkKKyghcGFpciAgImRlZmVycmluZ19raW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQyNDApCituaWwgKQorKCFwYWlyICAiYmFzZV9hY2Nlc3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDIzMykKK25pbCApCisoIXBhaXIgICJ0c3Vic3RfZmxhZ3NfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0MjE5KQorbmlsICkKKyghcGFpciAgImR1cmF0aW9uX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDE5MCkKK25pbCApCisoIXBhaXIgICJsaW5rYWdlX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDE4MykKK25pbCApCisoIXBhaXIgICJzcGVjaWFsX2Z1bmN0aW9uX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDE2MCkKK25pbCApCisoIXBhaXIgICJhY2Nlc3Nfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0MTM5KQorbmlsICkKKyghcGFpciAgInRtcGxfc3BlY19raW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQxMjgpCituaWwgKQorKCFwYWlyICAiY3BfbHZhbHVlX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDExMCkKK25pbCApCisoIXBhaXIgICJhZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc0MykKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAzMDE0KQorbmlsICkKKyghcGFpciAgInZlYzx0cmVlX3BhaXJfcyx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUxOCkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiAxNDA1KQorbmlsICkKKyghcGFpciAgInRyZWVfcGFpcl9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1MjApCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTMwOSkKK25pbCApCisoIXBhaXIgICJ0cmVlX3BhaXJfcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTE5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDEzMDgpCituaWwgKQorKCFwYWlyICAidmVjPGN4eF9zYXZlZF9iaW5kaW5nLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzQ0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDk4OSkKK25pbCApCisoIXBhaXIgICJ2ZWM8cXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYxMikKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA3NTEpCituaWwgKQorKCFwYWlyICAicXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjEzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDczOSkKK25pbCApCisoIXBhaXIgICJjcF90cmFpdF9raW5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDYxNSkKK25pbCApCisoIXBhaXIgICJpbXBsX2NvbnZfdm9pZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0NjgpCituaWwgKQorKCFwYWlyICAiaW1wbF9jb252X3JocyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0NTcpCituaWwgKQorKCFwYWlyICAiZXhwcl9saXN0X2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDQ3KQorbmlsICkKKyghcGFpciAgImNvbXBvc2l0ZV9wb2ludGVyX29wZXJhdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0NDApCituaWwgKQorKCFwYWlyICAiY3BwMHhfd2Fybl9zdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDI4KQorbmlsICkKKyghcGFpciAgImNwX2lkX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMzkxKQorbmlsICkKKyghcGFpciAgInB0cm1lbV9jc3RfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjAxKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDI2OCkKK25pbCApCisoIXBhaXIgICJ0ZW1wbGF0ZV9wYXJtX2luZGV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1OTkpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMjYyKQorbmlsICkKKyghcGFpciAgInZlYzxjcF9sYWJlbF9iaW5kaW5nLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAyKQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyMTQpCituaWwgKQorKCFwYWlyICAidmVjPGNwX2NsYXNzX2JpbmRpbmcsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5NykKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMjAzKQorbmlsICkKKyghcGFpciAgImNwX2xhYmVsX2JpbmRpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwMykKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMTU0KQorbmlsICkKKyghcGFpciAgImNwX2NsYXNzX2JpbmRpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk4KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAxNDYpCituaWwgKQorKCFwYWlyICAidGFnX3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAxNDApCituaWwgKQorKCFwYWlyICAic2NvcGVfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMTIzKQorbmlsICkKKyghcGFpciAgImN4eF9zYXZlZF9iaW5kaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NDYpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDg2KQorbmlsICkKKyghcGFpciAgImNwX2JpbmRpbmdfbGV2ZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiA1NSkKK25pbCApCisoIXBhaXIgICJjeHhfYmluZGluZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAwKQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiA1MikKK25pbCApCisoIXBhaXIgICJidF9mb3JlYWNoX3Byb2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmgiIDMyKQorbmlsICkKKyghcGFpciAgImJpbmRpbmdfZW50cnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUyNCkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMjkpCituaWwgKQorKCFwYWlyICAiYmluZGluZ190YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTIxKQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyOCkKK25pbCApCisoIXBhaXIgICJzdWJzdGl0dXRpb25faWRlbnRpZmllcl9pbmRleF90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9tYW5nbGUuYyIgMTMxKQorbmlsICkKKyghcGFpciAgImdsb2JhbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1MSkKKworKCFzcmNmaWxlbG9jICAiY3AvbWFuZ2xlLmMiIDEwNCkKK25pbCApCisoIXBhaXIgICJ2ZWM8dGluZm9fcyx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1MikKKworKCFzcmNmaWxlbG9jICAiY3AvcnR0aS5jIiAxMDIpCituaWwgKQorKCFwYWlyICAidGluZm9fa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcnR0aS5jIiA4OCkKK25pbCApCisoIXBhaXIgICJ0aW5mb19zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NTQpCisKKyghc3JjZmlsZWxvYyAgImNwL3J0dGkuYyIgNzEpCituaWwgKQorKCFwYWlyICAiY19kdHJfc3luIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtcGFyc2VyLmMiIDEwOTMpCituaWwgKQorKCFwYWlyICAiY19wYXJzZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1NikKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAyMDEpCituaWwgKQorKCFwYWlyICAiY190b2tlbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzU5KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtcGFyc2VyLmMiIDE1OCkKK25pbCApCisoIXBhaXIgICJjX2lkX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMvYy1wYXJzZXIuYyIgMTM4KQorbmlsICkKKyghcGFpciAgInByYWdtYV9uc19uYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NjEpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDExNTYpCituaWwgKQorKCFwYWlyICAib3B0X3N0YWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NjIpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDg4NikKK25pbCApCisoIXBhaXIgICJ2ZWM8cGVuZGluZ19yZWRlZmluaXRpb24sdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NjQpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDQxNykKK25pbCApCisoIXBhaXIgICJwZW5kaW5nX3JlZGVmaW5pdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzY2KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5jIiA0MTQpCituaWwgKQorKCFwYWlyICAidmVjPHBlbmRpbmdfd2Vhayx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc2NykKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgMjQzKQorbmlsICkKKyghcGFpciAgInBlbmRpbmdfd2VhayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzY5KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5jIiAyNDApCituaWwgKQorKCFwYWlyICAiYWxpZ25fc3RhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc3MCkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgNTApCituaWwgKQorKCFwYWlyICAiaW50ZXJuYWxfcHJhZ21hX2hhbmRsZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc3MikKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuaCIgMTA4KQorbmlsICkKKyghcGFpciAgInByYWdtYV9oYW5kbGVyXzJhcmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmgiIDkyKQorbmlsICkKKyghcGFpciAgInByYWdtYV9oYW5kbGVyXzFhcmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmgiIDg5KQorbmlsICkKKyghcGFpciAgInByYWdtYV9vbXBfY2xhdXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5oIiA3NikKK25pbCApCisoIXBhaXIgICJwcmFnbWFfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuaCIgNTEpCituaWwgKQorKCFwYWlyICAib2JqY19pdmFyX3Zpc2liaWxpdHlfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1vYmpjLmgiIDI5KQorbmlsICkKKyghcGFpciAgInN0bXRfdHJlZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODkpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDUwMSkKK25pbCApCisoIXBhaXIgICJyZWZfb3BlcmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDQ4MSkKK25pbCApCisoIXBhaXIgICJjX2xhbmd1YWdlX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmgiIDQ1OCkKK25pbCApCisoIXBhaXIgICJ2ZWM8dHJlZV9nY192ZWMsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NzcpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmMiIDExMjQyKQorbmlsICkKKyghcGFpciAgInRyZWVfZ2NfdmVjIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uYyIgMTEyNDEpCituaWwgKQorKCFwYWlyICAidmVjPGNvbnN0X2NoYXJfcCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc4MCkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uYyIgODc5NCkKK25pbCApCisoIXBhaXIgICJjb25zdF9jaGFyX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5jIiA4NzkzKQorbmlsICkKKyghcGFpciAgImRpc2FibGVkX2J1aWx0aW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc4MikKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uYyIgNTY1OCkKK25pbCApCisoIXBhaXIgICJjX2JpbmRpbmdfcHRyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODQpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDQ5NykKK25pbCApCisoIXBhaXIgICJ2ZWM8Y19nb3RvX2JpbmRpbmdzX3AsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1OTMpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDMwNSkKK25pbCApCisoIXBhaXIgICJjX2dvdG9fYmluZGluZ3NfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTk0KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAyODYpCituaWwgKQorKCFwYWlyICAiY19hcmdfdGFnIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3OTQpCisKKyghc3JjZmlsZWxvYyAgImMvYy10cmVlLmgiIDM1OSkKK25pbCApCisoIXBhaXIgICJjX2V4cHJfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzk3KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtdHJlZS5oIiAxMzMpCituaWwgKQorKCFwYWlyICAiYnVpbHRpbl90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiA1Nzk3KQorbmlsICkKKyghcGFpciAgInZlYzxsb29wX2luZm8sdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MDQpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDIyMikKK25pbCApCisoIXBhaXIgICJsb29wX2luZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgwNikKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMjE4KQorbmlsICkKKyghcGFpciAgInZlYzxyYW5nZV9jaGVja19pbmZvLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODA5KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMTUpCituaWwgKQorKCFwYWlyICAicmFuZ2VfY2hlY2tfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODEwKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMDgpCituaWwgKQorKCFwYWlyICAidmVjPHBhcm1fYXR0cix2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNykKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTMzKQorbmlsICkKKyghcGFpciAgInBhcm1fYXR0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE4KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAxMjkpCituaWwgKQorKCFwYWlyICAiaW50cmluX2JpbmRpbmdfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODE3KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS9kZWNsLmMiIDE3NikKK25pbCApCisoIXBhaXIgICJ2YXJpYW50X2Rlc2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgxOCkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvZGVjbC5jIiAxMjMpCituaWwgKQorKCFwYWlyICAic3Vic3RfcGFpciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODE5KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS9kZWNsLmMiIDEwOCkKK25pbCApCisoIXBhaXIgICJlZGdlX2dyb3d0aF9jYWNoZV9lbnRyeSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODMwKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDE5OSkKK25pbCApCisoIXBhaXIgICJpbmxpbmVfZWRnZV9zdW1tYXJ5X3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExODIpCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgMTkyKQorbmlsICkKKyghcGFpciAgImlubGluZV9wYXJhbV9zdW1tYXJ5X3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzMSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxNzUpCituaWwgKQorKCFwYWlyICAidmVjPGlubGluZV9zdW1tYXJ5X3QsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MzIpCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgMTYxKQorbmlsICkKKyghcGFpciAgImlubGluZV9zdW1tYXJ5X3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzNCkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxNjApCituaWwgKQorKCFwYWlyICAidmVjPHNpemVfdGltZV9lbnRyeSx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxMzkpCituaWwgKQorKCFwYWlyICAic2l6ZV90aW1lX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA4NDApCisKKyghc3JjZmlsZWxvYyAgImlwYS1pbmxpbmUuaCIgMTA3KQorbmlsICkKKyghcGFpciAgImNsYXVzZV90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDg4KQorbmlsICkKKyghcGFpciAgImNvbmRpdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzNSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiA3NikKK25pbCApCisoIXBhaXIgICJ2ZWM8Y29uZGl0aW9uLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODM2KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtaW5saW5lLmgiIDc2KQorbmlsICkKKyghcGFpciAgImlubGluZV9oaW50cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiA3MykKK25pbCApCisoIXBhaXIgICJjb25kaXRpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzNykKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiA0NCkKK25pbCApCisoIXBhaXIgICJsdG9fZmlsZV9kZWNsX2RhdGFfcHRyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MjQpCisKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiA1NzIpCituaWwgKQorKCFwYWlyICAidmVjPHJlc19wYWlyPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODkwKQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTY2KQorbmlsICkKKyghcGFpciAgInJlc19wYWlyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4OTEpCisKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiA1MjgpCituaWwgKQorKCFwYWlyICAibHRvX291dF9kZWNsX3N0YXRlX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTg0KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNTE4KQorbmlsICkKKyghcGFpciAgImx0b19pbl9kZWNsX3N0YXRlX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTA1KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNDk5KQorbmlsICkKKyghcGFpciAgImx0b19zeW10YWJfZW5jb2Rlcl9pdGVyYXRvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODk1KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgNDU0KQorbmlsICkKKyghcGFpciAgImx0b19zeW10YWJfZW5jb2Rlcl90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA4OTcpCisKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiA0NDcpCituaWwgKQorKCFwYWlyICAibHRvX2VuY29kZXJfZW50cnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg5OCkKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDQzNykKK25pbCApCisoIXBhaXIgICJsdG9fZnJlZV9zZWN0aW9uX2RhdGFfZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAibHRvLXN0cmVhbWVyLmgiIDMwOCkKK25pbCApCisoIXBhaXIgICJsdG9fZ2V0X3NlY3Rpb25fZGF0YV9mIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgMjk5KQorbmlsICkKKyghcGFpciAgImxkX3BsdWdpbl9zeW1ib2xfcmVzb2x1dGlvbl90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgMjY3KQorbmlsICkKKyghcGFpciAgImx0b19kZWNsX3N0cmVhbV9lX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiAyNjUpCituaWwgKQorKCFwYWlyICAibHRvX2RlY2xfZmxhZ3NfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghc3JjZmlsZWxvYyAgImx0by1zdHJlYW1lci5oIiAxNDYpCituaWwgKQorKCFwYWlyICAiY2dyYXBoX25vZGVfcXVldWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkwOSkKKworKCFzcmNmaWxlbG9jICAidHJhbnMtbWVtLmMiIDM4ODcpCituaWwgKQorKCFwYWlyICAidmVjPGNncmFwaF9ub2RlX3B0cj4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkwOSkKKworKCFzcmNmaWxlbG9jICAidHJhbnMtbWVtLmMiIDM4ODcpCituaWwgKQorKCFwYWlyICAidG1fbWVtb3BfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTUwKQorCisoIXNyY2ZpbGVsb2MgICJ0cmFucy1tZW0uYyIgMzE0NykKK25pbCApCisoIXBhaXIgICJ0bV9yZWdpb25fcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTUzKQorCisoIXNyY2ZpbGVsb2MgICJ0cmFucy1tZW0uYyIgMTc0MikKK25pbCApCisoIXBhaXIgICJ0bV9uZXdfbWVtX21hcF90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5NTQpCisKKyghc3JjZmlsZWxvYyAgInRyYW5zLW1lbS5jIiA5MDYpCituaWwgKQorKCFwYWlyICAidG1fbG9nX2VudHJ5X3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk1NikKKworKCFzcmNmaWxlbG9jICAidHJhbnMtbWVtLmMiIDg4MCkKK25pbCApCisoIXBhaXIgICJpcGFfcGFybV9hZGp1c3RtZW50X3ZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTU4KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA1OTIpCituaWwgKQorKCFwYWlyICAidmVjPGlwYV9wYXJtX2FkanVzdG1lbnRfdD4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk1OCkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNTkyKQorbmlsICkKKyghcGFpciAgImlwYV9wYXJtX2FkanVzdG1lbnRfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTU5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA1OTApCituaWwgKQorKCFwYWlyICAidmVjPGlwYV9lZGdlX2FyZ3NfdCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2MCkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNDM3KQorbmlsICkKKyghcGFpciAgInZlYzxpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3AsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5NzUpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDQzNSkKK25pbCApCisoIXBhaXIgICJpcGFfbm9kZV9wYXJhbXNfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE4NSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNDI4KQorbmlsICkKKyghcGFpciAgImlwYV9lZGdlX2FyZ3NfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTYyKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiA0MDQpCituaWwgKQorKCFwYWlyICAidmVjPGlwYV9qdW1wX2Z1bmNfdCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2NCkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNDAzKQorbmlsICkKKyghcGFpciAgImlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTc3KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAzOTMpCituaWwgKQorKCFwYWlyICAiaXBhX3BhcmFtX2Rlc2NyaXB0b3JfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTc5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAzMDMpCituaWwgKQorKCFwYWlyICAiaXBhX2p1bXBfZnVuY190IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5NjUpCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDE3OSkKK25pbCApCisoIXBhaXIgICJpcGFfYWdnX2p1bXBfZnVuY3Rpb25fdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTY2KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcHJvcC5oIiAxNTcpCituaWwgKQorKCFwYWlyICAiaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2NykKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTU2KQorbmlsICkKKyghcGFpciAgInZlYzxpcGFfYWdnX2pmX2l0ZW1fdCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2OSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgMTUxKQorbmlsICkKKyghcGFpciAgImlwYV9hZ2dfamZfaXRlbV90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5NzApCisKKyghc3JjZmlsZWxvYyAgImlwYS1wcm9wLmgiIDE0MikKK25pbCApCisoIXBhaXIgICJhb19yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk4MCkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtYWxpYXMuaCIgODkpCituaWwgKQorKCFwYWlyICAidWlkX3JhbmdlX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk4NykKKworKCFzcmNmaWxlbG9jICAicGFzc2VzLmMiIDc2NikKK25pbCApCisoIXBhaXIgICJjaGFyX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjkpCisKKyghc3JjZmlsZWxvYyAgInBhc3Nlcy5jIiA2MzIpCituaWwgKQorKCFwYWlyICAiYWFyY2g2NF9zaW1kX21hbmdsZV9tYXBfZW50cnkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk5MykKKworKCFzcmNmaWxlbG9jICAiY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jIiA2MjIzKQorbmlsICkKKyghcGFpciAgImFhcmNoNjRfY2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYyIgMzAzKQorbmlsICkKKyghcGFpciAgIm9tcF9jb250ZXh0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDAzKQorCisoIXNyY2ZpbGVsb2MgICJvbXAtbG93LmMiIDEwMykKK25pbCApCisoIXBhaXIgICJsYW1iZGFfdHJhbnNfbWF0cml4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDA4KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXBhcmxvb3BzLmMiIDI1MSkKK25pbCApCisoIXBhaXIgICJzc2Ffb3BfaXRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAxMykKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2Etb3BlcmFuZHMuaCIgMTMwKQorbmlsICkKKyghcGFpciAgInVzZV9vcHR5cGVfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzE1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1vcGVyYW5kcy5oIiA0MikKK25pbCApCisoIXBhaXIgICJ1c2Vfb3BlcmFuZF9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMzUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLW9wZXJhbmRzLmgiIDMwKQorbmlsICkKKyghcGFpciAgImRlZl9vcGVyYW5kX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLW9wZXJhbmRzLmgiIDI3KQorbmlsICkKKyghcGFpciAgInRfYm9vbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zY2FsYXItZXZvbHV0aW9uLmMiIDkxMSkKK25pbCApCisoIXBhaXIgICJjaGFyX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGlmeS5jIiA4MjgyKQorbmlsICkKKyghcGFpciAgImVsdF90IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDE4KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGlmeS5jIiA5NykKK25pbCApCisoIXBhaXIgICJudW1iZXJlZF90cmVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDE5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWRmYS5jIiA3MDApCituaWwgKQorKCFwYWlyICAidmVjPG1lbV9hZGRyX3RlbXBsYXRlLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAyNCkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtYWRkcmVzcy5jIiA4NikKK25pbCApCisoIXBhaXIgICJtZW1fYWRkcl90ZW1wbGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAyNikKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtYWRkcmVzcy5jIiA3OSkKK25pbCApCisoIXBhaXIgICJ0cmVlbXBsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAzMikKKworKCFzcmNmaWxlbG9jICAidHJlZS1laC5jIiA0MSkKK25pbCApCisoIXBhaXIgICJ0cmFuc2Zvcm1fY2FsbGJhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA2NjUpCituaWwgKQorKCFwYWlyICAiYWZmaW5lX2l2IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDM1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNTc2KQorbmlsICkKKyghcGFpciAgIndhbGtfdXNlX2RlZl9jaGFpbnNfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA1MDQpCituaWwgKQorKCFwYWlyICAiZWRnZV92YXJfbWFwX3ZlY3RvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAzOCkKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDQ4NCkKK25pbCApCisoIXBhaXIgICJ2bF9lbWJlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAzNikKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDQ4NCkKK25pbCApCisoIXBhaXIgICJ2YV9oZWFwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDM3KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNDg0KQorbmlsICkKKyghcGFpciAgInZlYzxlZGdlX3Zhcl9tYXAsdmFfaGVhcCx2bF9lbWJlZD4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwMzgpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiA0ODQpCituaWwgKQorKCFwYWlyICAiZWRnZV92YXJfbWFwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDM5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNDgwKQorbmlsICkKKyghcGFpciAgImltbV91c2VfaXRlcmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNDIpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtZmxvdy5oIiAyMjIpCituaWwgKQorKCFwYWlyICAiaHRhYl9pdGVyYXRvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA0MykKKworKCFzcmNmaWxlbG9jICAidHJlZS1mbG93LmgiIDEwNykKK25pbCApCisoIXBhaXIgICJ2ZWM8Z2ltcGxlLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDIxKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWZsb3cuaCIgNTIpCituaWwgKQorKCFwYWlyICAid2Fsa19zdG10X2ZuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgNTI4OSkKK25pbCApCisoIXBhaXIgICJmYWxsYmFja190IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgOTMzKQorbmlsICkKKyghcGFpciAgImdpbXBsZV9wcmVkaWNhdGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiA5MTUpCituaWwgKQorKCFwYWlyICAiZ2ltcGxlX3ZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA0OSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmgiIDM4KQorbmlsICkKKyghcGFpciAgInZlYzxnaW1wbGU+IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDQ5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuaCIgMzgpCituaWwgKQorKCFwYWlyICAiZ2ltcGxlX3NlcV9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisKKyghc3JjZmlsZWxvYyAgImdpbXBsZS5oIiAzNCkKK25pbCApCisoIXBhaXIgICJ0bV9hbGlhc19wYWlyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDUwKQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgNTY2NCkKK25pbCApCisoIXBhaXIgICJvY19sb2NhbF9zdGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA1MSkKKworKCFzcmNmaWxlbG9jICAidmFyYXNtLmMiIDQ3MzYpCituaWwgKQorKCFwYWlyICAib2Nfb3V0ZXJfc3RhdGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNTIpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiA0NDY3KQorbmlsICkKKyghcGFpciAgImJsb2NrX2luZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNjMpCisKKyghc3JjZmlsZWxvYyAgInJlZy1zdGFjay5jIiAyMTQpCituaWwgKQorKCFwYWlyICAic3RhY2tfcHRyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDY1KQorCisoIXNyY2ZpbGVsb2MgICJyZWctc3RhY2suYyIgMjAxKQorbmlsICkKKyghcGFpciAgImF1Z21lbnRpbmdfcGF0aF90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDY3KQorCisoIXNyY2ZpbGVsb2MgICJtY2YuYyIgMTQwKQorbmlsICkKKyghcGFpciAgInF1ZXVlX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNjgpCisKKyghc3JjZmlsZWxvYyAgIm1jZi5jIiAxMjkpCituaWwgKQorKCFwYWlyICAiZml4dXBfZ3JhcGhfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA2OSkKKworKCFzcmNmaWxlbG9jICAibWNmLmMiIDEyMSkKK25pbCApCisoIXBhaXIgICJmaXh1cF92ZXJ0ZXhfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA3MSkKKworKCFzcmNmaWxlbG9jICAibWNmLmMiIDEwNCkKK25pbCApCisoIXBhaXIgICJmaXh1cF92ZXJ0ZXhfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA3MCkKKworKCFzcmNmaWxlbG9jICAibWNmLmMiIDEwMikKK25pbCApCisoIXBhaXIgICJmaXh1cF9lZGdlX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNzMpCisKKyghc3JjZmlsZWxvYyAgIm1jZi5jIiA5NSkKK25pbCApCisoIXBhaXIgICJmaXh1cF9lZGdlX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNzIpCisKKyghc3JjZmlsZWxvYyAgIm1jZi5jIiA5MykKK25pbCApCisoIXBhaXIgICJlZGdlX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm1jZi5jIiA3NCkKK25pbCApCisoIXBhaXIgICJ2ZWNfbW9kaWZ5X3BhaXJfaGVhcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA4MikKKworKCFzcmNmaWxlbG9jICAiZ2NzZS5jIiA2MTApCituaWwgKQorKCFwYWlyICAidmVjPG1vZGlmeV9wYWlyPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA4MikKKworKCFzcmNmaWxlbG9jICAiZ2NzZS5jIiA2MTApCituaWwgKQorKCFwYWlyICAidmVjX3J0eF9oZWFwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDg0KQorCisoIXNyY2ZpbGVsb2MgICJnY3NlLmMiIDYwOSkKK25pbCApCisoIXBhaXIgICJ2ZWM8cnR4PiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA4NCkKKworKCFzcmNmaWxlbG9jICAiZ2NzZS5jIiA2MDkpCituaWwgKQorKCFwYWlyICAibW9kaWZ5X3BhaXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwODMpCisKKyghc3JjZmlsZWxvYyAgImdjc2UuYyIgMzc5KQorbmlsICkKKyghcGFpciAgIm9jY3JfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTA4OSkKKworKCFzcmNmaWxlbG9jICAiZ2NzZS5jIiAzMDkpCituaWwgKQorKCFwYWlyICAiaW5pdGlhbF92YWx1ZV9zdHJ1Y3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNTgpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmMiIDEyMjYpCituaWwgKQorKCFwYWlyICAiaW5pdGlhbF92YWx1ZV9wYWlyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDk3KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiAxMjE4KQorbmlsICkKKyghcGFpciAgImZ1bmN0aW9uX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM4NykKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgMTM4KQorbmlsICkKKyghcGFpciAgInNlcG9wcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEwNykKKworKCFzcmNmaWxlbG9jICAiZXhwci5oIiAxNDEpCituaWwgKQorKCFwYWlyICAiZHVwbGljYXRlX2VoX3JlZ2lvbnNfbWFwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMjUxKQorbmlsICkKKyghcGFpciAgInZlYzxlaF9sYW5kaW5nX3BhZCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQwNCkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDIwMykKK25pbCApCisoIXBhaXIgICJ2ZWM8ZWhfcmVnaW9uLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDAyKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMjAwKQorbmlsICkKKyghcGFpciAgImVoX3JlZ2lvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzkxKQorCisoIXNyY2ZpbGVsb2MgICJleGNlcHQuaCIgMTg3KQorbmlsICkKKyghcGFpciAgImVoX2NhdGNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzOTUpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5oIiAxODYpCituaWwgKQorKCFwYWlyICAiZWhfbGFuZGluZ19wYWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM5OSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmgiIDE4NSkKK25pbCApCisoIXBhaXIgICJlbGVtX29wX2Z1bmMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtdmVjdC1nZW5lcmljLmMiIDEwMykKK25pbCApCisoIXBhaXIgICJkY2hhcl9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE4NzYxKQorbmlsICkKKyghcGFpciAgInZlYzxkaWVfYXJnX2VudHJ5LHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTExOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI4ODIpCituaWwgKQorKCFwYWlyICAidmVjPG1hY2luZm9fZW50cnksdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTIyKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjgzMCkKK25pbCApCisoIXBhaXIgICJ2ZWM8cHVibmFtZV9lbnRyeSx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMjUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODIyKQorbmlsICkKKyghcGFpciAgInZlYzxkd19saW5lX2luZm9fdGFibGVfcCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMjkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODE0KQorbmlsICkKKyghcGFpciAgImNhY2hlZF9kd19sb2NfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzNykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3ODApCituaWwgKQorKCFwYWlyICAidmFyX2xvY19saXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTQxKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjc0MykKK25pbCApCisoIXBhaXIgICJkaWVfYXJnX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTIxKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjcwNSkKK25pbCApCisoIXBhaXIgICJza2VsZXRvbl9jaGFpbl9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTQ1KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU5MykKK25pbCApCisoIXBhaXIgICJsaW1ib19kaWVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0NikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI1ODUpCituaWwgKQorKCFwYWlyICAiY29tZGF0X3R5cGVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDY2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU3NykKK25pbCApCisoIXBhaXIgICJtYWNpbmZvX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTI0KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU2MCkKK25pbCApCisoIXBhaXIgICJwdWJuYW1lX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTI3KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjU0NCkKK25pbCApCisoIXBhaXIgICJkaWVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDYzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjUyNykKK25pbCApCisoIXBhaXIgICJ2ZWM8ZHdfYXR0cl9ub2RlLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDY5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjUxMikKK25pbCApCisoIXBhaXIgICJkd19hdHRyX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ3MCkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0OTgpCituaWwgKQorKCFwYWlyICAiZHdfbGluZV9pbmZvX3RhYmxlX3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMzEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDg3KQorbmlsICkKKyghcGFpciAgImR3X2xpbmVfaW5mb190YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzMikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0ODUpCituaWwgKQorKCFwYWlyICAidmVjPGR3X2xpbmVfaW5mb19lbnRyeSx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMzQpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDg0KQorbmlsICkKKyghcGFpciAgImR3X2xpbmVfaW5mb19lbnRyeSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzNSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0NjgpCituaWwgKQorKCFwYWlyICAiY29tZGF0X3R5cGVfbm9kZV9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0MzIpCituaWwgKQorKCFwYWlyICAiZHdfcmFuZ2VzX2J5X2xhYmVsX3JlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0OSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0MzEpCituaWwgKQorKCFwYWlyICAiZHdfcmFuZ2VzX3JlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE1MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0MzApCituaWwgKQorKCFwYWlyICAicHVibmFtZV9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMjgpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDI5KQorbmlsICkKKyghcGFpciAgImR3X2xpbmVfaW5mb19yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDI4KQorbmlsICkKKyghcGFpciAgImR3X2F0dHJfcmVmIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NzEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNDI3KQorbmlsICkKKyghcGFpciAgImR3X29mZnNldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI0MjMpCituaWwgKQorKCFwYWlyICAiZHdfbG9jX2xpc3Rfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDU4KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTI0NSkKK25pbCApCisoIXBhaXIgICJhZGRyX3RhYmxlX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NTQpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMjIxKQorbmlsICkKKyghcGFpciAgInZlYzxkZWZlcnJlZF9sb2NhdGlvbnMsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTUyKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTE5OSkKK25pbCApCisoIXBhaXIgICJkZWZlcnJlZF9sb2NhdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNTQpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMTk2KQorbmlsICkKKyghcGFpciAgInZlYzxkd19mZGVfcmVmLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE1NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE5NykKK25pbCApCisoIXBhaXIgICJxdWV1ZWRfcmVnX3NhdmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNTgpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiAxOTYpCituaWwgKQorKCFwYWlyICAiZHdfdHJhY2VfaW5mb19yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNjApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiAxNTMpCituaWwgKQorKCFwYWlyICAiZHdfdHJhY2VfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE1OSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyY2ZpLmMiIDE1MCkKK25pbCApCisoIXBhaXIgICJyZWdfc2F2ZWRfaW5fZGF0YSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE2MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyY2ZpLmMiIDc3KQorbmlsICkKKyghcGFpciAgImR3X2NmaV9yb3ciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNjMpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiA3MSkKK25pbCApCisoIXBhaXIgICJkd19sb2NfZGVzY3Jfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUwKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMjE5KQorbmlsICkKKyghcGFpciAgImR3X3ZhbF9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NTEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAyMDQpCituaWwgKQorKCFwYWlyICAiZHdfdmVjX2NvbnN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NTkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxNjQpCituaWwgKQorKCFwYWlyICAiZHdfY2ZhX2xvY2F0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTY1KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgMTI0KQorbmlsICkKKyghcGFpciAgImR3X2ZkZV9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDMpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAxMDkpCituaWwgKQorKCFwYWlyICAiZHdfZmRlX3JlZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQyKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgNjcpCituaWwgKQorKCFwYWlyICAiY2ZpX3ZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQ0KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgNjUpCituaWwgKQorKCFwYWlyICAidmVjPGR3X2NmaV9yZWYsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA2NSkKK25pbCApCisoIXBhaXIgICJkd19jZmlfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDQ3KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuaCIgNjIpCituaWwgKQorKCFwYWlyICAiZHdfY2ZpX29wcm5kIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDgpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiA1MykKK25pbCApCisoIXBhaXIgICJkd19sb2NfbGlzdF9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1NykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDMxKQorbmlsICkKKyghcGFpciAgImR3X2xvY19kZXNjcl9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ0OSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDMwKQorbmlsICkKKyghcGFpciAgImR3X2NmaV9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ0NikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDI5KQorbmlsICkKKyghcGFpciAgImR3X3ZhbF9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1MikKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDI4KQorbmlsICkKKyghcGFpciAgImNvbnN0X2R3X2RpZV9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDI2KQorbmlsICkKKyghcGFpciAgImR3X2RpZV9yZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmgiIDI1KQorbmlsICkKKyghcGFpciAgImNvbnN0X2JpdG1hcF9kZXNjcmlwdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTk0KQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuYyIgNDUpCituaWwgKQorKCFwYWlyICAiYml0bWFwX2Rlc2NyaXB0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExOTQpCisKKyghc3JjZmlsZWxvYyAgImJpdG1hcC5jIiA0NCkKK25pbCApCisoIXBhaXIgICJ2ZWM8YWxpYXNfc2V0X2VudHJ5LHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE5NSkKKworKCFzcmNmaWxlbG9jICAiYWxpYXMuYyIgMjYyKQorbmlsICkKKyghcGFpciAgImFsaWFzX3NldF9lbnRyeSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE5NykKKworKCFzcmNmaWxlbG9jICAiYWxpYXMuYyIgMTQ2KQorbmlsICkKKyghcGFpciAgInJlZ19lcXVpdnNfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIwNykKKworKCFzcmNmaWxlbG9jICAicmVsb2FkLmgiIDI0MSkKK25pbCApCisoIXBhaXIgICJjZ3JhcGhfMm5vZGVfaG9vayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDYzNCkKK25pbCApCisoIXBhaXIgICJjZ3JhcGhfMmVkZ2VfaG9vayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDYzMikKK25pbCApCisoIXBhaXIgICJjZ3JhcGhfbm9kZV9ob29rIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNjMwKQorbmlsICkKKyghcGFpciAgImNncmFwaF9lZGdlX2hvb2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA2MjkpCituaWwgKQorKCFwYWlyICAiY2dyYXBoX2VkZ2VfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTI5KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgNDQ1KQorbmlsICkKKyghcGFpciAgImNncmFwaF9pbmxpbmVfZmFpbGVkX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAzNzMpCituaWwgKQorKCFwYWlyICAidmFycG9vbF9ub2RlX3NldF9pdGVyYXRvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIxNykKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDM2NikKK25pbCApCisoIXBhaXIgICJjZ3JhcGhfbm9kZV9zZXRfaXRlcmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMTgpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAzNTkpCituaWwgKQorKCFwYWlyICAidmFycG9vbF9ub2RlX3NldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIyMCkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDM1MSkKK25pbCApCisoIXBhaXIgICJjZ3JhcGhfbm9kZV9zZXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMjIpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAzNDgpCituaWwgKQorKCFwYWlyICAidmFycG9vbF9ub2RlX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTIyKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMzM3KQorbmlsICkKKyghcGFpciAgImNncmFwaF9ub2RlX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTEwKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMjg1KQorbmlsICkKKyghcGFpciAgInZlYzxpcGFfb3B0X3Bhc3M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MzUpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAyMzgpCituaWwgKQorKCFwYWlyICAidmVjPGlwYV9yZXBsYWNlX21hcF9wLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTQzKQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguaCIgMTk2KQorbmlsICkKKyghcGFpciAgImlwYV9yZXBsYWNlX21hcF9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5NDQpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiAxOTIpCituaWwgKQorKCFwYWlyICAidmVjPGlwYV9yZWZfcHRyPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTIzKQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcmVmLmgiIDU4KQorbmlsICkKKyghcGFpciAgInZlYzxpcGFfcmVmX3QsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTYpCisKKyghc3JjZmlsZWxvYyAgImlwYS1yZWYuaCIgNTUpCituaWwgKQorKCFwYWlyICAiaXBhX3JlZl9wdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxOCkKKworKCFzcmNmaWxlbG9jICAiaXBhLXJlZi5oIiA0OCkKK25pbCApCisoIXBhaXIgICJpcGFfcmVmX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxNykKKworKCFzcmNmaWxlbG9jICAiaXBhLXJlZi5oIiA0NykKK25pbCApCisoIXBhaXIgICJjb25zdF9zeW10YWJfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTE5KQorCisoIXNyY2ZpbGVsb2MgICJpcGEtcmVmLmgiIDI1KQorbmlsICkKKyghcGFpciAgInN5bXRhYl9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTkpCisKKyghc3JjZmlsZWxvYyAgImlwYS1yZWYuaCIgMjQpCituaWwgKQorKCFwYWlyICAiZWRnZV9pdGVyYXRvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIyNSkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgNTc3KQorbmlsICkKKyghcGFpciAgImNlX2lmX2Jsb2NrX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMjcpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDQ2NSkKK25pbCApCisoIXBhaXIgICJ2ZWM8YmFzaWNfYmxvY2ssdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA0MTUpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDI5NCkKK25pbCApCisoIXBhaXIgICJfX2Fzc2VydF9naW1wbGVfYmJfc21hbGxlcl9ydGxfYmIiCisoIXR5cGUgYXJyYXkgMTM0NiBuaWwgIGdjX3VudXNlZCAiKGludClzaXplb2Yoc3RydWN0IHJ0bF9iYl9pbmZvKVxuICAgICAgICAgICAgICAgLSAoaW50KXNpemVvZiAoc3RydWN0IGdpbXBsZV9iYl9pbmZvKSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCispCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDIyNykKK25pbCApCisoIXBhaXIgICJ2ZWM8ZWRnZSx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwMCkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgMTgxKQorbmlsICkKKyghcGFpciAgImdjb3Zfd29ya2luZ19zZXRfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIyOSkKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgOTgpCituaWwgKQorKCFwYWlyICAiZWRnZV9kZWYiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwMikKKworKCFzcmNmaWxlbG9jICAiYmFzaWMtYmxvY2suaCIgNjEpCituaWwgKQorKCFwYWlyICAiZ2Nvdl90eXBlX3Vuc2lnbmVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJiYXNpYy1ibG9jay5oIiAzMykKK25pbCApCisoIXBhaXIgICJnY292X3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImJhc2ljLWJsb2NrLmgiIDMyKQorbmlsICkKKyghcGFpciAgImNzZWxpYl9leHBhbmRfY2FsbGJhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNzZWxpYi5oIiA4NCkKK25pbCApCisoIXBhaXIgICJjc2VsaWJfdmFsIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjMyKQorCisoIXNyY2ZpbGVsb2MgICJjc2VsaWIuaCIgNDApCituaWwgKQorKCFwYWlyICAibG9vcF9pdGVyYXRvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIzMykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiA1NTApCituaWwgKQorKCFwYWlyICAidmVjPGxvb3BfcCx2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMwNykKKworKCFzcmNmaWxlbG9jICAiY2ZnbG9vcC5oIiAxMjcpCituaWwgKQorKCFwYWlyICAibG9vcF9wIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMDMpCisKKyghc3JjZmlsZWxvYyAgImNmZ2xvb3AuaCIgOTEpCituaWwgKQorKCFwYWlyICAibm9zd2l0Y2hfc2VjdGlvbl9jYWxsYmFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDQ4MikKK25pbCApCisoIXBhaXIgICJ1bm5hbWVkX3NlY3Rpb25fY2FsbGJhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA0NTYpCituaWwgKQorKCFwYWlyICAiX19nY2NfaG9zdF93aWRlX2ludF9fIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJod2ludC5oIiA4NCkKK25pbCApCisoIXBhaXIgICJ2ZWM8dGVtcF9zbG90X3AsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjYyKQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiAzMDkpCituaWwgKQorKCFwYWlyICAiaXBhX29wdF9wYXNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MzYpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE3MSkKK25pbCApCisoIXBhaXIgICJ0ZW1wX3Nsb3RfcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEwMSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMTY2KQorbmlsICkKKyghcGFpciAgInZlYzxjYWxsX3NpdGVfcmVjb3JkLHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI1NCkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMTU0KQorbmlsICkKKyghcGFpciAgInZlYzx1Y2hhcix2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQxMSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgMTUyKQorbmlsICkKKyghcGFpciAgImNhbGxfc2l0ZV9yZWNvcmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNTUpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDE0MSkKK25pbCApCisoIXBhaXIgICJodF9jYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvc3ltdGFiLmgiIDg5KQorbmlsICkKKyghcGFpciAgImhhc2hub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNCkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvc3ltdGFiLmgiIDQxKQorbmlsICkKKyghcGFpciAgImNwcF9oYXNoX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjY1KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9zeW10YWIuaCIgNDApCituaWwgKQorKCFwYWlyICAiaHRfaWRlbnRpZmllcl9wdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM0KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9zeW10YWIuaCIgMzApCituaWwgKQorKCFwYWlyICAiaHRfaWRlbnRpZmllciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzMpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL3N5bXRhYi5oIiAyOSkKK25pbCApCisoIXBhaXIgICJidWlsdGluX2luZm9fdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI2NikKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA2NDY4KQorbmlsICkKKyghcGFpciAgImNvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNjkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjM2MikKK25pbCApCisoIXBhaXIgICJjYWxsX2V4cHJfYXJnX2l0ZXJhdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjcwKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDYzNTYpCituaWwgKQorKCFwYWlyICAidHJlZV9ub2RlX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjIxNykKK25pbCApCisoIXBhaXIgICJ3YWxrX3RyZWVfbGgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjE3OSkKK25pbCApCisoIXBhaXIgICJ3YWxrX3RyZWVfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNjE3NCkKK25pbCApCisoIXBhaXIgICJmdW5jdGlvbl9hcmdzX2l0ZXJhdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjgzKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDU1MjUpCituaWwgKQorKCFwYWlyICAicmVjb3JkX2xheW91dF9pbmZvIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjg1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDUxMzkpCituaWwgKQorKCFwYWlyICAiaW50ZWdlcl90eXBlX2tpbmQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDUxOCkKK25pbCApCisoIXBhaXIgICJwcmlvcml0eV90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDMyMzYpCituaWwgKQorKCFwYWlyICAidmVjPHRyZWUsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NikKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiAyMDg1KQorbmlsICkKKyghcGFpciAgInNzYV91c2Vfb3BlcmFuZF90IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMzQpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTk2MikKK25pbCApCisoIXBhaXIgICJ2ZWM8Y29uc3RydWN0b3JfZWx0LHZhX2djPiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTAxKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDE1ODApCituaWwgKQorKCFwYWlyICAiY29uc3RydWN0b3JfZWx0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1MDIpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMTU3NSkKK25pbCApCisoIXBhaXIgICJ2ZWM8YWxpYXNfcGFpcix2YV9nYz4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyODcpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjUxKQorbmlsICkKKyghcGFpciAgImFsaWFzX3BhaXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyODkpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjQ3KQorbmlsICkKKyghcGFpciAgImRpcmVjdF9vcHRhYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib3B0YWJzLmgiIDI4KQorbmlsICkKKyghcGFpciAgImNvbnZlcnRfb3B0YWIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9wdGFicy5oIiAyNykKK25pbCApCisoIXBhaXIgICJvcHRhYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib3B0YWJzLmgiIDI2KQorbmlsICkKKyghcGFpciAgImhhc2hfcnR4X2NhbGxiYWNrX2Z1bmN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjA5OSkKK25pbCApCisoIXBhaXIgICJydHhfZXF1YWxfcF9jYWxsYmFja19mdW5jdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIwOTQpCituaWwgKQorKCFwYWlyICAiZm9yX2VhY2hfaW5jX2RlY19mbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIwOTApCituaWwgKQorKCFwYWlyICAicnR4X2Z1bmN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjA3OSkKK25pbCApCisoIXBhaXIgICJyZXBsYWNlX2xhYmVsX2RhdGEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyOTYpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMDA2KQorbmlsICkKKyghcGFpciAgInZhX2djIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjM5KQorbmlsICkKKyghcGFpciAgInZlYzxydHgsdmFfZ2M+IgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNTIpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMzkpCituaWwgKQorKCFwYWlyICAicnR1bmlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQyKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjAyKQorbmlsICkKKyghcGFpciAgInJlZ19hdHRycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjcwKQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMTgxKQorbmlsICkKKyghcGFpciAgIm1lbV9hdHRycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjU5KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMTY5KQorbmlsICkKKyghcGFpciAgImFkZHJfZGlmZl92ZWNfZmxhZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMDIpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAxMzMpCituaWwgKQorKCFwYWlyICAiY291bnRzX2VudHJ5X3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMDQpCisKKyghc3JjZmlsZWxvYyAgImNvdmVyYWdlLmMiIDg1KQorbmlsICkKKyghcGFpciAgImFsaWFzX3NldF90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJhbGlhcy5oIiAyOSkKK25pbCApCisoIXBhaXIgICJiaXRtYXBfaXRlcmF0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMDgpCisKKyghc3JjZmlsZWxvYyAgImJpdG1hcC5oIiAzMzApCituaWwgKQorKCFwYWlyICAiYml0bWFwX2hlYWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMSkKKworKCFzcmNmaWxlbG9jICAiYml0bWFwLmgiIDE4OSkKK25pbCApCisoIXBhaXIgICJiaXRtYXBfZWxlbWVudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIzKQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuaCIgMTc1KQorbmlsICkKKyghcGFpciAgImJpdG1hcF9vYnN0YWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjYpCisKKyghc3JjZmlsZWxvYyAgImJpdG1hcC5oIiAxNTYpCituaWwgKQorKCFwYWlyICAiQklUTUFQX1dPUkQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImJpdG1hcC5oIiAxMzYpCituaWwgKQorKCFwYWlyICAic3BsYXlfdHJlZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIwMikKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9zcGxheS10cmVlLmgiIDEyNSkKK25pbCApCisoIXBhaXIgICJzcGxheV90cmVlX2RlYWxsb2NhdGVfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiA4NikKK25pbCApCisoIXBhaXIgICJzcGxheV90cmVlX2FsbG9jYXRlX2ZuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgODApCituaWwgKQorKCFwYWlyICAic3BsYXlfdHJlZV9mb3JlYWNoX2ZuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgNzQpCituaWwgKQorKCFwYWlyICAic3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiA3MSkKK25pbCApCisoIXBhaXIgICJzcGxheV90cmVlX2RlbGV0ZV9rZXlfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiA2NykKK25pbCApCisoIXBhaXIgICJzcGxheV90cmVlX2NvbXBhcmVfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiA2MykKK25pbCApCisoIXBhaXIgICJzcGxheV90cmVlX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMDMpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiA1OSkKK25pbCApCisoIXBhaXIgICJzcGxheV90cmVlX3ZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgNTYpCituaWwgKQorKCFwYWlyICAic3BsYXlfdHJlZV9rZXkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvc3BsYXktdHJlZS5oIiA1NSkKK25pbCApCisoIXBhaXIgICJodGFiX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUwKQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgMTQ0KQorbmlsICkKKyghcGFpciAgImh0YWJfZnJlZV93aXRoX2FyZyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vaW5jbHVkZS9oYXNodGFiLmgiIDgzKQorbmlsICkKKyghcGFpciAgImh0YWJfYWxsb2Nfd2l0aF9hcmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiA4MikKK25pbCApCisoIXBhaXIgICJodGFiX2ZyZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiA3OCkKK25pbCApCisoIXBhaXIgICJodGFiX2FsbG9jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgNzUpCituaWwgKQorKCFwYWlyICAiaHRhYl90cmF2IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgNjkpCituaWwgKQorKCFwYWlyICAiaHRhYl9kZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2luY2x1ZGUvaGFzaHRhYi5oIiA2MykKK25pbCApCisoIXBhaXIgICJodGFiX2VxIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgNTkpCituaWwgKQorKCFwYWlyICAiaHRhYl9oYXNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgNTIpCituaWwgKQorKCFwYWlyICAiaGFzaHZhbF90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9pbmNsdWRlL2hhc2h0YWIuaCIgNDcpCituaWwgKQorKCFwYWlyICAibWFjaGluZV9mdW5jdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDM5KQorCisoIXNyY2ZpbGVsb2MgICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LmgiIDUyMikKK25pbCApCisoIXBhaXIgICJndF9wb2ludGVyX29wZXJhdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjb3JldHlwZXMuaCIgMjA0KQorbmlsICkKKyghcGFpciAgInJlZ19jbGFzc190IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjb3JldHlwZXMuaCIgMTcwKQorbmlsICkKKyghcGFpciAgImNvbnN0X2Jhc2ljX2Jsb2NrIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyOTcpCisKKyghc3JjZmlsZWxvYyAgImNvcmV0eXBlcy5oIiAxNTcpCituaWwgKQorKCFwYWlyICAiYmFzaWNfYmxvY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI5NykKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDE1NikKK25pbCApCisoIXBhaXIgICJjb25zdF9lZGdlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMDEpCisKKyghc3JjZmlsZWxvYyAgImNvcmV0eXBlcy5oIiAxNTQpCituaWwgKQorKCFwYWlyICAiZWRnZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzAxKQorCisoIXNyY2ZpbGVsb2MgICJjb3JldHlwZXMuaCIgMTUzKQorbmlsICkKKyghcGFpciAgImFkZHJfc3BhY2VfdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjgpCisKKyghc3JjZmlsZWxvYyAgImNvcmV0eXBlcy5oIiA4MSkKK25pbCApCisoIXBhaXIgICJwcmV0dHlfcHJpbnRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMxMykKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDc4KQorbmlsICkKKyghcGFpciAgImRpYWdub3N0aWNfY29udGV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMxNCkKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDc2KQorbmlsICkKKyghcGFpciAgInNlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NikKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDY4KQorbmlsICkKKyghcGFpciAgImdpbXBsZV9zdG10X2l0ZXJhdG9yIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzE5KQorCisoIXNyY2ZpbGVsb2MgICJjb3JldHlwZXMuaCIgNjYpCituaWwgKQorKCFwYWlyICAiZ2ltcGxlX3NlcSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzEwKQorCisoIXNyY2ZpbGVsb2MgICJjb3JldHlwZXMuaCIgNjQpCituaWwgKQorKCFwYWlyICAiY29uc3RfZ2ltcGxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMTApCisKKyghc3JjZmlsZWxvYyAgImNvcmV0eXBlcy5oIiA2MykKK25pbCApCisoIXBhaXIgICJnaW1wbGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDMxMCkKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDYyKQorbmlsICkKKyghcGFpciAgImNvbnN0X3RyZWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNvcmV0eXBlcy5oIiA2MCkKK25pbCApCisoIXBhaXIgICJ0cmVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjb3JldHlwZXMuaCIgNTkpCituaWwgKQorKCFwYWlyICAiY29uc3RfcnR2ZWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI2MSkKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDU3KQorbmlsICkKKyghcGFpciAgInJ0dmVjIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNjEpCisKKyghc3JjZmlsZWxvYyAgImNvcmV0eXBlcy5oIiA1NikKK25pbCApCisoIXBhaXIgICJjb25zdF9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDU0KQorbmlsICkKKyghcGFpciAgInJ0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJjb3JldHlwZXMuaCIgNTMpCituaWwgKQorKCFwYWlyICAiY29uc3Rfc2JpdG1hcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMyMSkKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDUxKQorbmlsICkKKyghcGFpciAgInNiaXRtYXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMjEpCisKKyghc3JjZmlsZWxvYyAgImNvcmV0eXBlcy5oIiA1MCkKK25pbCApCisoIXBhaXIgICJjb25zdF9iaXRtYXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMCkKKworKCFzcmNmaWxlbG9jICAiY29yZXR5cGVzLmgiIDQ4KQorbmlsICkKKyghcGFpciAgImJpdG1hcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIwKQorCisoIXNyY2ZpbGVsb2MgICJjb3JldHlwZXMuaCIgNDcpCituaWwgKQorKCFwYWlyICAibG9jYXRpb25fdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiaW5wdXQuaCIgNDYpCituaWwgKQorKCFwYWlyICAidWNoYXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI4KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHAtaWQtZGF0YS5oIiAyMSkKK25pbCApCisoIXBhaXIgICJjcHBfY2IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAxMDA2KQorbmlsICkKKyghcGFpciAgImNwcF9jb21tZW50X3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzIzKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgOTkzKQorbmlsICkKKyghcGFpciAgImNwcF9jb21tZW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzI0KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgOTc5KQorbmlsICkKKyghcGFpciAgImNwcF9udW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMjUpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiA4MDkpCituaWwgKQorKCFwYWlyICAiY3BwX251bV9wYXJ0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgODA4KQorbmlsICkKKyghcGFpciAgIm1pc3NpbmdfaGVhZGVyX2NiIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgNTA1KQorbmlsICkKKyghcGFpciAgImNwcGNoYXJfc2lnbmVkX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAyNjgpCituaWwgKQorKCFwYWlyICAiY3BwY2hhcl90IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMjY3KQorbmlsICkKKyghcGFpciAgImNwcF9kaXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMjcpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAzNykKK25pbCApCisoIXBhaXIgICJjcHBfY2FsbGJhY2tzIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzI4KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMzYpCituaWwgKQorKCFwYWlyICAiY3BwX21hY3JvIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1NzIpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAzNSkKK25pbCApCisoIXBhaXIgICJjcHBfaGFzaG5vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU2NykKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDM0KQorbmlsICkKKyghcGFpciAgImNwcF9zdHJpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU3OCkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDMzKQorbmlsICkKKyghcGFpciAgImNwcF90b2tlbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTc1KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMzIpCituaWwgKQorKCFwYWlyICAiY3BwX29wdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMjkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2NwcGxpYi5oIiAzMSkKK25pbCApCisoIXBhaXIgICJjcHBfYnVmZmVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzMwKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9jcHBsaWIuaCIgMzApCituaWwgKQorKCFwYWlyICAiY3BwX3JlYWRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTMzMSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvY3BwbGliLmgiIDI5KQorbmlsICkKKyghcGFpciAgImV4cGFuZGVkX2xvY2F0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzMzKQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiA2NDApCituaWwgKQorKCFwYWlyICAibGluZV9tYXBfcm91bmRfYWxsb2Nfc2l6ZV9mdW5jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiA1NykKK25pbCApCisoIXBhaXIgICJsaW5lX21hcF9yZWFsbG9jIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICIuLi9saWJjcHAvaW5jbHVkZS9saW5lLW1hcC5oIiA1MykKK25pbCApCisoIXBhaXIgICJzb3VyY2VfbG9jYXRpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIi4uL2xpYmNwcC9pbmNsdWRlL2xpbmUtbWFwLmgiIDUwKQorbmlsICkKKyghcGFpciAgImxpbmVudW1fdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiLi4vbGliY3BwL2luY2x1ZGUvbGluZS1tYXAuaCIgNDcpCituaWwgKQorKCFwYWlyICAiUFRSIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMCkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgNTQ1MSkKK25pbCApCisoIXBhaXIgICJ2b2lkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiA1NDQ4KQorbmlsICkKKyghcGFpciAgIkpDRl91MiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgNTQ0NykKK25pbCApCisoIXBhaXIgICJqd29yZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgNTQ0NikKK25pbCApCisoIXBhaXIgICJ1aW50cHRyX3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDU0NDUpCituaWwgKQorKCFwYWlyICAidWludDgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDU0NDQpCituaWwgKQorKCFwYWlyICAidWludDY0X3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDU0NDMpCituaWwgKQorKCFwYWlyICAiZG91YmxlX2ludCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgNTQ0MikKK25pbCApCisoIXBhaXIgICJGSVhFRF9WQUxVRV9UWVBFIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnZW5ndHlwZS5jIiA1NDQxKQorbmlsICkKKyghcGFpciAgIlJFQUxfVkFMVUVfVFlQRSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZ2VuZ3R5cGUuYyIgNTQ0MCkKK25pbCApCisoIXBhaXIgICJDVU1VTEFUSVZFX0FSR1MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImdlbmd0eXBlLmMiIDU0MzkpCituaWwgKSkKKworKCFwYXJhbV9zdHJ1Y3RzIDQ3CisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM0NyBuaWwgIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIwNCkKK25pbCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM0OCBuaWwgIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIwNCkKK25pbCAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzNDkgbmlsICBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMDQpCituaWwgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzNTAgCisoIXR5cGUgcG9pbnRlciAxMzUxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzUwKQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjI4KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1MDQpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDgpCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM1MiAKKyghdHlwZSBwb2ludGVyIDEzNTMgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNTIpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA2NzMpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzNTQgCisoIXR5cGUgcG9pbnRlciAxMzU1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzU0KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjg0KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxMzU2IAorKCF0eXBlIHBvaW50ZXIgMTM1NyBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM1NikKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcwOSkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM1OCAKKyghdHlwZSBwb2ludGVyIDEzNTkgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNTgpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA3MTApCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzNjAgCisoIXR5cGUgcG9pbnRlciAxMzYxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYwKQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzE5KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMDcpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTEpCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM2MiAKKyghdHlwZSBwb2ludGVyIDEzNjMgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNjIpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA4MDApCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyOCkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxMzY0IAorKCF0eXBlIHBvaW50ZXIgMTM2NSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2NCkKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMDEpCituaWwgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzNjYgCisoIXR5cGUgcG9pbnRlciAxMzY3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzY2KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTAxNikKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDI5KQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzNjggCisoIXR5cGUgcG9pbnRlciAxMzY5IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzY4KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3NykKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM3MCAKKyghdHlwZSBwb2ludGVyIDEzNzEgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNzApCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjgxKQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjQ4KQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzNzIgCisoIXR5cGUgcG9pbnRlciAxMzczIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzcyKQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIxMCkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM3NCAKKyghdHlwZSBwb2ludGVyIDEzNzUgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNzQpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAyNDMpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzNzYgCisoIXR5cGUgcG9pbnRlciAxMzc3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzc2KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxMzc4IAorKCF0eXBlIHBvaW50ZXIgMTM3OSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM3OCkKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNzUpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzODAgCisoIXR5cGUgcG9pbnRlciAxMzgxIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzgwKQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3MikKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM4MiAKKyghdHlwZSBwb2ludGVyIDEzODMgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzODIpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjc5KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxMzg0IAorKCF0eXBlIHBvaW50ZXIgMTM4NSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM4NCkKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNTgpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzODYgCisoIXR5cGUgcG9pbnRlciAxMzg3IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzg2KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEwMCkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDA2KQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzODggCisoIXR5cGUgcG9pbnRlciAxMzg5IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzg4KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjY5KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxMzkwIAorKCF0eXBlIHBvaW50ZXIgMTM5MSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM5MCkKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI1OCkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTM5MiAKKyghdHlwZSBwb2ludGVyIDEzOTMgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzOTIpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzOTQgCisoIXR5cGUgcG9pbnRlciAxMzk1IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzk0KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUzKQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxMzk2IAorKCF0eXBlIHBvaW50ZXIgMTM5NyBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM5NikKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMzgpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDEzOTggCisoIXR5cGUgcG9pbnRlciAxMzk5IG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzk4KQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0MikKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTQwMCAKKyghdHlwZSBwb2ludGVyIDE0MDEgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0MDApCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiA0OSkKKworKCF0eXBlIGFscmVhZHlfc2VlbiA0NjEpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgcGFyYW1fc3RydWN0IDE0MDIgCisoIXR5cGUgcG9pbnRlciAxNDAzIG5pbCAgZ2NfdXNlZAorKCF0eXBlIGFscmVhZHlfc2VlbiAxNDAyKQorKQorIGdjX3BvaW50ZWRfdG8KKyghdHlwZSBhbHJlYWR5X3NlZW4gNDkpCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDc0KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxNDA0IAorKCF0eXBlIHBvaW50ZXIgMTQwNSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQwNCkKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ3MikKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBwYXJhbV9zdHJ1Y3QgMTQwNiAKKyghdHlwZSBwb2ludGVyIDE0MDcgbmlsICBnY191c2VkCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0MDYpCispCisgZ2NfcG9pbnRlZF90bworKCF0eXBlIGFscmVhZHlfc2VlbiAxMjAxKQorbmlsIAorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIwMCkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxNDA4IAorKCF0eXBlIHBvaW50ZXIgMTQwOSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQwOCkKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxOSkKK25pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCApCisKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTM0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQzNSkKKworKCF0eXBlIHBhcmFtX3N0cnVjdCAxNDEwIAorKCF0eXBlIHBvaW50ZXIgMTQxMSBuaWwgIGdjX3VzZWQKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQxMCkKKykKKyBnY19wb2ludGVkX3RvCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ5KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMzgpCituaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgKQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU0KQorCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg2NikKKykKKworKCF2YXJpYWJsZXMgNjIwCisKKyghcGFpciAgIm9iamNfZWhfcGVyc29uYWxpdHlfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMzYzMikKK25pbCApCisoIXBhaXIgICJuZXh0X3YyX0VIVFlQRV9pZF9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAzNDIyKQorbmlsICkKKyghcGFpciAgIm5leHRfdjJfZWh2dGFibGVfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMzQyMSkKK25pbCApCisoIXBhaXIgICJvYmpjX3YyX2VodHlwZV90ZW1wbGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMzQyMCkKK25pbCApCisoIXBhaXIgICJlaHR5cGVfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjI0KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAzMDUxKQorbmlsICkKKyghcGFpciAgIml2YXJfb2Zmc2V0X3JlZnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDIpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDI3NjEpCituaWwgKQorKCFwYWlyICAicHJvdGxpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYxOCkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMjEwNikKK25pbCApCisoIXBhaXIgICJub25sYXp5X2NhdGVnb3J5X2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAyMDE4KQorbmlsICkKKyghcGFpciAgImNhdGVnb3J5X2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAyMDA3KQorbmlsICkKKyghcGFpciAgIm5vbmxhenlfY2xhc3NfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDE5OTYpCituaWwgKQorKCFwYWlyICAiY2xhc3NfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDE5ODgpCituaWwgKQorKCFwYWlyICAibWV0YWNsYXNzX3N1cGVyX3JlZnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYyNCkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTQzNCkKK25pbCApCisoIXBhaXIgICJjbGFzc19zdXBlcl9yZWZzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2MjQpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDE0MzMpCituaWwgKQorKCFwYWlyICAicHJvdHJlZnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYxOCkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTI1NykKK25pbCApCisoIXBhaXIgICJtc2dyZWZzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2MjEpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDEyMDMpCituaWwgKQorKCFwYWlyICAiY2xhc3NyZWZzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2MjQpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDEwMzkpCituaWwgKQorKCFwYWlyICAiZXh0ZXJuX25hbWVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2MzYpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmMiIDIzNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgIlNJWkVIQVNIVEFCTEUiKQorKQorKQorKCFwYWlyICAib2JqY192Ml9nbG9iYWxfdHJlZXMiCisoIXR5cGUgYXJyYXkgMTQxMiBuaWwgIGdjX3VzZWQgIk9DVElfVjJfTUFYIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDIuYyIgMTg1KQorbmlsICkKKyghcGFpciAgIm9iamNfcnRfdHJlZXMiCisoIXR5cGUgYXJyYXkgMTQxMyBuaWwgIGdjX3VzZWQgIk9DVElfUlRfTUVUQV9NQVgiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMi5jIiAxODIpCituaWwgKQorKCFwYWlyICAib2JqY19laF9wZXJzb25hbGl0eV9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMS5jIiAyODE4KQorbmlsICkKKyghcGFpciAgIlYxX1Byb3BlcnR5X2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAxLmMiIDE1MTUpCituaWwgKQorKCFwYWlyICAiVjFfUHJvdG9jb2xFeHRfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDEuYyIgMTUxNCkKK25pbCApCisoIXBhaXIgICJWMV9Qcm90b2NvbF9PUFRfQ0xTX01FVEhPRFNfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDEuYyIgMTUxMykKK25pbCApCisoIXBhaXIgICJWMV9Qcm90b2NvbF9PUFRfTlNUX01FVEhPRFNfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDEuYyIgMTUxMikKK25pbCApCisoIXBhaXIgICJvYmpjX2NsYXNzX2V4dF90ZW1wbGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDEuYyIgMTEwNykKK25pbCApCisoIXBhaXIgICJvYmpjX3Byb3RvY29sX2V4dGVuc2lvbl90ZW1wbGF0ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDEuYyIgMTA3MykKK25pbCApCisoIXBhaXIgICJvYmpjX3YxX3Byb3BlcnR5X3RlbXBsYXRlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtbmV4dC1ydW50aW1lLWFiaS0wMS5jIiAxMDQzKQorbmlsICkKKyghcGFpciAgImNsYXNzX3JlZmVyZW5jZV9pZHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAxLmMiIDY3NSkKK25pbCApCisoIXBhaXIgICJvYmpjX3J0X3RyZWVzIgorKCF0eXBlIGFycmF5IDE0MTQgbmlsICBnY191c2VkICJPQ1RJX1JUX01FVEFfTUFYIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLW5leHQtcnVudGltZS1hYmktMDEuYyIgMTA2KQorbmlsICkKKyghcGFpciAgIm9iamNfZWhfcGVyc29uYWxpdHlfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWdudS1ydW50aW1lLWFiaS0wMS5jIiAyMTM2KQorbmlsICkKKyghcGFpciAgIm51bV9zdGF0aWNfaW5zdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWdudS1ydW50aW1lLWFiaS0wMS5jIiA4NTcpCituaWwgKQorKCFwYWlyICAibWV0YV9iYXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtZ251LXJ1bnRpbWUtYWJpLTAxLmMiIDE5MCkKK25pbCApCisoIXBhaXIgICJvYmpjX21ldGEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1nbnUtcnVudGltZS1hYmktMDEuYyIgMTg5KQorbmlsICkKKyghcGFpciAgInByb3BlcnR5X25hbWVfYXR0cl9pZHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1ydW50aW1lLXNoYXJlZC1zdXBwb3J0LmMiIDI5MykKK25pbCApCisoIXBhaXIgICJtZXRoX3Zhcl90eXBlc19pZHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1ydW50aW1lLXNoYXJlZC1zdXBwb3J0LmMiIDI5MikKK25pbCApCisoIXBhaXIgICJtZXRoX3Zhcl9uYW1lc19pZHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1ydW50aW1lLXNoYXJlZC1zdXBwb3J0LmMiIDI5MSkKK25pbCApCisoIXBhaXIgICJvYmpjX3J0X3RyZWVzIgorKCF0eXBlIGFycmF5IDE0MTUgbmlsICBnY191c2VkICJPQ1RJX1JUX01FVEFfTUFYIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLXJ1bnRpbWUtc2hhcmVkLXN1cHBvcnQuYyIgNTUpCituaWwgKQorKCFwYWlyICAib2JqY19wYXJtbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5jIiA4MjE2KQorbmlsICkKKyghcGFpciAgImludGVyZmFjZV9tYXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYzOCkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5jIiAzNzU2KQorbmlsICkKKyghcGFpciAgInN0cmluZ19sYXlvdXRfY2hlY2tlZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5jIiAzMDQxKQorbmlsICkKKyghcGFpciAgInN0cmluZ19odGFiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzUxKQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmMiIDI2MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjI3KQorKQorKQorKQorKCFwYWlyICAiYWxpYXNfbmFtZV9tYXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYzOCkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5jIiAxNzApCituaWwgKQorKCFwYWlyICAiY2xhc3NfbmFtZV9tYXAiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYzOCkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5jIiAxNjkpCituaWwgKQorKCFwYWlyICAiY2xhc3NfbWV0aG9kX21hcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjM4KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmMiIDE2NSkKK25pbCApCisoIXBhaXIgICJpbnN0YW5jZV9tZXRob2RfbWFwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2MzgpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuYyIgMTY0KQorbmlsICkKKyghcGFpciAgIm9iamNfZ2xvYmFsX3RyZWVzIgorKCF0eXBlIGFycmF5IDE0MTYgbmlsICBnY191c2VkICJPQ1RJX01BWCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMzk5KQorbmlsICkKKyghcGFpciAgIm9iamNfaXZhcl92aXNpYmlsaXR5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmgiIDI3MykKK25pbCApCisoIXBhaXIgICJjYXRfY291bnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgIm9iamMvb2JqYy1hY3QuaCIgMjcxKQorbmlsICkKKyghcGFpciAgImltcF9jb3VudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5oIiAyNzApCituaWwgKQorKCFwYWlyICAiaW1wX2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDYzMSkKKworKCFzcmNmaWxlbG9jICAib2JqYy9vYmpjLWFjdC5oIiAyNjkpCituaWwgKQorKCFwYWlyICAibG9jYWxfdmFyaWFibGVzX3RvX3ZvbGF0aWxpemUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJvYmpjL29iamMtYWN0LmgiIDI1NikKK25pbCApCisoIXBhaXIgICJsdG9fZWhfcGVyc29uYWxpdHlfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAibHRvL2x0by5jIiAzMjg0KQorbmlsICkKKyghcGFpciAgInJlYWxfZmlsZV9kZWNsX2RhdGEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyNSkKKworKCFzcmNmaWxlbG9jICAibHRvL2x0by5jIiAyODk2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAicmVhbF9maWxlX2NvdW50ICsgMSIpCispCispCisoIXBhaXIgICJhbGxfZmlsZV9kZWNsX2RhdGEiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyNSkKKworKCFzcmNmaWxlbG9jICAibHRvL2x0by5jIiAyODY0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAibHRvX3N0YXRzLm51bV9pbnB1dF9maWxlcyArIDEiKQorKQorKQorKCFwYWlyICAidHJlZV93aXRoX3ZhcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUzKQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLmMiIDE0MDUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcpCispCisKKyghb3B0aW9uIGlmX21hcmtlZCBzdHJpbmcgICJnZ2NfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAiZ2ltcGxlX3R5cGVfbGVhZGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2NDQpCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8uYyIgMzc3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiR0lNUExFX1RZUEVfTEVBREVSX1NJWkUiKQorKQorKQorKCFwYWlyICAidHlwZV9oYXNoX2NhY2hlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzY5KQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLmMiIDI4OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3NikKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgInRyZWVfaW50X21hcF9tYXJrZWRfcCIpCispCispCisoIXBhaXIgICJnaW1wbGVfdHlwZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUzKQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLmMiIDI4NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgImdnY19tYXJrZWRfcCIpCispCispCisoIXBhaXIgICJmaXJzdF9wZXJzb25hbGl0eV9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLmMiIDQ5KQorbmlsICkKKyghcGFpciAgInJlZ2lzdGVyZWRfYnVpbHRpbl90eXBlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAibHRvL2x0by1sYW5nLmMiIDY3OSkKK25pbCApCisoIXBhaXIgICJzaWduZWRfc2l6ZV90eXBlX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tbGFuZy5jIiAxODApCituaWwgKQorKCFwYWlyICAidWludG1heF90eXBlX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tbGFuZy5jIiAxNzkpCituaWwgKQorKCFwYWlyICAiaW50bWF4X3R5cGVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAibHRvL2x0by1sYW5nLmMiIDE3OCkKK25pbCApCisoIXBhaXIgICJ3aW50X3R5cGVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAibHRvL2x0by1sYW5nLmMiIDE3NykKK25pbCApCisoIXBhaXIgICJjb25zdF9zdHJpbmdfdHlwZV9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLWxhbmcuYyIgMTc2KQorbmlsICkKKyghcGFpciAgInN0cmluZ190eXBlX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tbGFuZy5jIiAxNzUpCituaWwgKQorKCFwYWlyICAiYnVpbHRpbl90eXBlcyIKKyghdHlwZSBhcnJheSAxNDE3IG5pbCAgZ2NfdXNlZCAiKGludCkgQlRfTEFTVCArIDEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJsdG8vbHRvLWxhbmcuYyIgMTczKQorbmlsICkKKyghcGFpciAgImJ1aWx0X2luX2F0dHJpYnV0ZXMiCisoIXR5cGUgYXJyYXkgMTQxOCBuaWwgIGdjX3VzZWQgIihpbnQpIEFUVFJfTEFTVCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImx0by9sdG8tbGFuZy5jIiAxMjgpCituaWwgKQorKCFwYWlyICAicmVzb3VyY2VzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9yZXNvdXJjZS5jIiAzOSkKK25pbCApCisoIXBhaXIgICJjb21wcmVzc2lvbl90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9tYW5nbGUuYyIgMjk3KQorbmlsICkKKyghcGFpciAgImF0bXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvbWFuZ2xlLmMiIDcxKQorbmlsICkKKyghcGFpciAgImphdmFfZWhfcGVyc29uYWxpdHlfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9sYW5nLmMiIDkxMykKK25pbCApCisoIXBhaXIgICJsYXN0X2Vycm9yX2Z1bmN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2xhbmcuYyIgNDgxKQorbmlsICkKKyghcGFpciAgImxhc3RfZXJyb3JfZnVuY3Rpb25fY29udGV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9sYW5nLmMiIDQ4MCkKK25pbCApCisoIXBhaXIgICJhbGxfY2xhc3NfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLXBhcnNlLmMiIDg3KQorbmlsICkKKyghcGFpciAgIm1haW5famNmIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0ODYpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamNmLXBhcnNlLmMiIDg0KQorbmlsICkKKyghcGFpciAgInBhcnNlX3Jvb3RzIgorKCF0eXBlIGFycmF5IDE0MTkgbmlsICBnY191c2VkICIyIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiamF2YS9qY2YtcGFyc2UuYyIgNzIpCituaWwgKQorKCFwYWlyICAiY2xhc3NfaWRlbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvZXhwci5jIiAyMzU4KQorbmlsICkKKyghcGFpciAgInBhZ2Vfc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9leHByLmMiIDEyOCkKK25pbCApCisoIXBhaXIgICJxdWlja19zdGFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvZXhwci5jIiAxMjQpCituaWwgKQorKCFwYWlyICAibmNvZGVfaWRlbnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvZXhwci5jIiA5MCkKK25pbCApCisoIXBhaXIgICJtZXRob2RzX2lkZW50IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2V4cHIuYyIgODkpCituaWwgKQorKCFwYWlyICAib3BlcmFuZF90eXBlIgorKCF0eXBlIGFycmF5IDE0MjAgbmlsICBnY191c2VkICI1OSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImphdmEvZXhwci5jIiA4NykKK25pbCApCisoIXBhaXIgICJnbG9iYWxfYmluZGluZ19sZXZlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODApCisKKyghc3JjZmlsZWxvYyAgImphdmEvZGVjbC5jIiA0MzYpCituaWwgKQorKCFwYWlyICAiZnJlZV9iaW5kaW5nX2xldmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MCkKKworKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDQzMCkKK25pbCApCisoIXBhaXIgICJjdXJyZW50X2JpbmRpbmdfbGV2ZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgwKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2RlY2wuYyIgNDI2KQorbmlsICkKKyghcGFpciAgInBlbmRpbmdfbG9jYWxfZGVjbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvZGVjbC5jIiAxMTUpCituaWwgKQorKCFwYWlyICAiYmFzZV9kZWNsX21hcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDEwNykKK25pbCApCisoIXBhaXIgICJkZWNsX21hcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9kZWNsLmMiIDEwMSkKK25pbCApCisoIXBhaXIgICJ0YWdfbm9kZXMiCisoIXR5cGUgYXJyYXkgMTQyMSBuaWwgIGdjX3VzZWQgIjEzIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiamF2YS9jb25zdGFudHMuYyIgMzE2KQorbmlsICkKKyghcGFpciAgImFsaWFzX2xhYmVsbm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImphdmEvY2xhc3MuYyIgMTM2OSkKK25pbCApCisoIXBhaXIgICJ0aGlzX2NsYXNzZG9sbGFyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2NsYXNzLmMiIDEwMykKK25pbCApCisoIXBhaXIgICJyZWdpc3RlcmVkX2NsYXNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiamF2YS9jbGFzcy5jIiA5OSkKK25pbCApCisoIXBhaXIgICJjbGFzc19yb290cyIKKyghdHlwZSBhcnJheSAxNDIyIG5pbCAgZ2NfdXNlZCAiNCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImphdmEvY2xhc3MuYyIgOTMpCituaWwgKQorKCFwYWlyICAiamF2YV9idWlsdGlucyIKKyghdHlwZSBhcnJheSAxNDIzIG5pbCAgZ2NfdXNlZCAiIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjUxKQorKQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2J1aWx0aW5zLmMiIDg0KQorbmlsICkKKyghcGFpciAgInBlbmRpbmdfc3RhdGljX2ZpZWxkcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDExODIpCituaWwgKQorKCFwYWlyICAic29mdF9yZXNvbHZlcG9vbGVudHJ5X25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDU3NSkKK25pbCApCisoIXBhaXIgICJqYXZhX2dsb2JhbF90cmVlcyIKKyghdHlwZSBhcnJheSAxNDI0IG5pbCAgZ2NfdXNlZCAiSlRJX01BWCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDMxOSkKK25pbCApCisoIXBhaXIgICJjb25zdGFudHNfZGF0YV9maWVsZF9kZWNsX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDE3OCkKK25pbCApCisoIXBhaXIgICJjb25zdGFudHNfZmllbGRfZGVjbF9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiAxNzUpCituaWwgKQorKCFwYWlyICAiZ2NqX2FiaV92ZXJzaW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiAxNzIpCituaWwgKQorKCFwYWlyICAiamF2YV9pb19zZXJpYWxpemFibGVfaWRlbnRpZmllcl9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiAxNzEpCituaWwgKQorKCFwYWlyICAiamF2YV9sYW5nX2Nsb25lYWJsZV9pZGVudGlmaWVyX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImphdmEvamF2YS10cmVlLmgiIDE3MCkKK25pbCApCisoIXBhaXIgICJjdXJyZW50X2pjZiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDg2KQorCisoIXNyY2ZpbGVsb2MgICJqYXZhL2phdmEtdHJlZS5oIiAxMjEpCituaWwgKQorKCFwYWlyICAiZ29fbm9uX3plcm9fc3RydWN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJnby9nby1jLmgiIDY0KQorbmlsICkKKyghcGFpciAgImdvX2djX3Jvb3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImdvL2dvLWxhbmcuYyIgNDQwKQorbmlsICkKKyghcGFpciAgImdmY19yYW5rX2NzdCIKKyghdHlwZSBhcnJheSAxNDI1IG5pbCAgZ2NfdXNlZCAiR0ZDX01BWF9ESU1FTlNJT05TICsgMSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtY29uc3QuaCIgNjApCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfc3Jfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NjApCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfc2lfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NTkpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfc2Nfa2luZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NTgpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfaWFyZ2MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzU1KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3NpemUxIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDc1NCkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9zaXplMCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NTMpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfY29udmVydF9jaGFyNF90b19jaGFyMSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NTApCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfY29udmVydF9jaGFyMV90b19jaGFyNCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NDkpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfc2VsZWN0X3N0cmluZ19jaGFyNCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NDYpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfYWRqdXN0cl9jaGFyNCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NDUpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfYWRqdXN0bF9jaGFyNCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NDQpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfc3RyaW5nX21pbm1heF9jaGFyNCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3NDMpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfc3RyaW5nX3RyaW1fY2hhcjQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzQyKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3N0cmluZ192ZXJpZnlfY2hhcjQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzQxKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3N0cmluZ19zY2FuX2NoYXI0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDc0MCkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9zdHJpbmdfaW5kZXhfY2hhcjQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzM5KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3N0cmluZ19sZW5fdHJpbV9jaGFyNCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3MzgpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfY29uY2F0X3N0cmluZ19jaGFyNCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3MzcpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfY29tcGFyZV9zdHJpbmdfY2hhcjQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzM2KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3NlbGVjdF9zdHJpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzM1KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2FkanVzdHIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzM0KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2FkanVzdGwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzMzKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3N0cmluZ19taW5tYXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzMyKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3N0cmluZ190cmltIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDczMSkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9zdHJpbmdfdmVyaWZ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDczMCkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9zdHJpbmdfc2NhbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3MjkpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfc3RyaW5nX2luZGV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDcyOCkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9zdHJpbmdfbGVuX3RyaW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzI3KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2NvbmNhdF9zdHJpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzI2KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2NvbXBhcmVfc3RyaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDcyNSkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF96Z2VtbSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3MjIpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfY2dlbW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzIxKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2RnZW1tIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDcyMCkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9zZ2VtbSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3MTkpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfbWF0aF9pc2hmdGMxNiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA3MTYpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfbWF0aF9pc2hmdGM4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDcxNSkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9tYXRoX2lzaGZ0YzQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzE0KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX21hdGhfcG93aSIKKyghdHlwZSBhcnJheSAxNDI2IG5pbCAgZ2NfdXNlZCAiNCIgCisoIXR5cGUgYXJyYXkgMTQyNyBuaWwgIGdjX3VzZWQgIjMiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA2NTgpCispCispCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzEzKQorbmlsICkKKyghcGFpciAgImdmb3J0X2d2YXJfY2FmX3RoaXNfaW1hZ2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNzAwKQorbmlsICkKKyghcGFpciAgImdmb3J0X2d2YXJfY2FmX251bV9pbWFnZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjk5KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2NhZl9lcnJvcl9zdG9wX3N0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2OTYpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfY2FmX2Vycm9yX3N0b3AiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjk1KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2NhZl9zeW5jX2ltYWdlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2OTQpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfY2FmX3N5bmNfYWxsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDY5MykKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9jYWZfZW5kX2NyaXRpY2FsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDY5MikKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9jYWZfY3JpdGljYWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjkxKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2NhZl9kZXJlZ2lzdGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDY5MCkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9jYWZfcmVnaXN0ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjg5KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2NhZl9maW5hbGl6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2ODgpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfY2FmX2luaXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjg3KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2Fzc29jaWF0ZWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjgzKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2luX3VucGFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2ODIpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfaW5fcGFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2ODEpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfZmRhdGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjgwKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2N0aW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDY3OSkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF90dHluYW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjc4KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3NldF9vcHRpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDY3NykKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9zZXRfZnBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDY3NikKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9nZW5lcmF0ZV9lcnJvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2NzUpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfb3NfZXJyb3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjc0KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3J1bnRpbWVfd2FybmluZ19hdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2NzMpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfcnVudGltZV9lcnJvcl9hdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2NzIpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfcnVudGltZV9lcnJvciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2NzEpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfZXJyb3Jfc3RvcF9zdHJpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjcwKQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX2Vycm9yX3N0b3BfbnVtZXJpYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2NjkpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfc3RvcF9zdHJpbmciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjY4KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3N0b3BfbnVtZXJpY19mMDgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMuaCIgNjY3KQorbmlsICkKKyghcGFpciAgImdmb3JfZm5kZWNsX3N0b3BfbnVtZXJpYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy5oIiA2NjYpCituaWwgKQorKCFwYWlyICAiZ2Zvcl9mbmRlY2xfcGF1c2Vfc3RyaW5nIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDY2NSkKK25pbCApCisoIXBhaXIgICJnZm9yX2ZuZGVjbF9wYXVzZV9udW1lcmljIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDY2NCkKK25pbCApCisoIXBhaXIgICJnZmNfc3RhdGljX2N0b3JzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLmgiIDU3MSkKK25pbCApCisoIXBhaXIgICJnZmNfY2hhcmxlbl90eXBlX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtdHlwZXMuaCIgNDApCituaWwgKQorKCFwYWlyICAiY29tcGxleF9mbG9hdDEyOF90eXBlX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtdHlwZXMuaCIgMzQpCituaWwgKQorKCFwYWlyICAiZmxvYXQxMjhfdHlwZV9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLXR5cGVzLmgiIDMzKQorbmlsICkKKyghcGFpciAgInBjaGFyX3R5cGVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5oIiAzMikKK25pbCApCisoIXBhaXIgICJwcnZvaWRfdHlwZV9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLXR5cGVzLmgiIDMxKQorbmlsICkKKyghcGFpciAgInB2b2lkX3R5cGVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5oIiAzMCkKK25pbCApCisoIXBhaXIgICJwcHZvaWRfdHlwZV9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLXR5cGVzLmgiIDI5KQorbmlsICkKKyghcGFpciAgImdmY19jaGFyYWN0ZXIxX3R5cGVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5oIiAyOCkKK25pbCApCisoIXBhaXIgICJnZmNfYXJyYXlfcmFuZ2VfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5oIiAyNykKK25pbCApCisoIXBhaXIgICJnZmNfYXJyYXlfaW5kZXhfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5oIiAyNikKK25pbCApCisoIXBhaXIgICJnZmNfcGNoYXJhY3Rlcl90eXBlcyIKKyghdHlwZSBhcnJheSAxNDI4IG5pbCAgZ2NfdXNlZCAiTUFYX0NIQVJBQ1RFUl9LSU5EUyArIDEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLXR5cGVzLmMiIDEwMSkKK25pbCApCisoIXBhaXIgICJnZmNfY2hhcmFjdGVyX3R5cGVzIgorKCF0eXBlIGFycmF5IDE0MjkgbmlsICBnY191c2VkICJNQVhfQ0hBUkFDVEVSX0tJTkRTICsgMSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtdHlwZXMuYyIgMTAwKQorbmlsICkKKyghcGFpciAgImdmY19jb21wbGV4X3R5cGVzIgorKCF0eXBlIGFycmF5IDE0MzAgbmlsICBnY191c2VkICJNQVhfUkVBTF9LSU5EUyArIDEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLXR5cGVzLmMiIDk2KQorbmlsICkKKyghcGFpciAgImdmY19yZWFsX3R5cGVzIgorKCF0eXBlIGFycmF5IDE0MzEgbmlsICBnY191c2VkICJNQVhfUkVBTF9LSU5EUyArIDEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLXR5cGVzLmMiIDk1KQorbmlsICkKKyghcGFpciAgImdmY19sb2dpY2FsX3R5cGVzIgorKCF0eXBlIGFycmF5IDE0MzIgbmlsICBnY191c2VkICJNQVhfSU5UX0tJTkRTICsgMSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtdHlwZXMuYyIgOTEpCituaWwgKQorKCFwYWlyICAiZ2ZjX2ludGVnZXJfdHlwZXMiCisoIXR5cGUgYXJyYXkgMTQzMyBuaWwgIGdjX3VzZWQgIk1BWF9JTlRfS0lORFMgKyAxIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5jIiA5MCkKK25pbCApCisoIXBhaXIgICJnZmNfYXJyYXlfZGVzY3JpcHRvcl9iYXNlX2NhZiIKKyghdHlwZSBhcnJheSAxNDM0IG5pbCAgZ2NfdXNlZCAiMiAqIChHRkNfTUFYX0RJTUVOU0lPTlMrMSkiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLXR5cGVzLmMiIDgyKQorbmlsICkKKyghcGFpciAgImdmY19hcnJheV9kZXNjcmlwdG9yX2Jhc2UiCisoIXR5cGUgYXJyYXkgMTQzNSBuaWwgIGdjX3VzZWQgIjIgKiAoR0ZDX01BWF9ESU1FTlNJT05TKzEpIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5jIiA4MSkKK25pbCApCisoIXBhaXIgICJnZmNfbWF4X2FycmF5X2VsZW1lbnRfc2l6ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5jIiA4MCkKK25pbCApCisoIXBhaXIgICJnZmNfZGVzY19kaW1fdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy10eXBlcy5jIiA3OSkKK25pbCApCisoIXBhaXIgICJzZWxlY3Rfc3RydWN0IgorKCF0eXBlIGFycmF5IDE0MzYgbmlsICBnY191c2VkICIyIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1zdG10LmMiIDIxMTIpCituaWwgKQorKCFwYWlyICAiZHRfcGFybSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pby5jIiAxNTgpCituaWwgKQorKCFwYWlyICAiaW9jYWxsIgorKCF0eXBlIGFycmF5IDE0MzcgbmlsICBnY191c2VkICJJT0NBTExfTlVNIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pby5jIiAxNDkpCituaWwgKQorKCFwYWlyICAic3RfcGFyYW1ldGVyX2ZpZWxkIgorKCF0eXBlIGFycmF5IDE0MzggbmlsICBnY191c2VkICIiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA2NzApCispCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW8uYyIgOTkpCituaWwgKQorKCFwYWlyICAic3RfcGFyYW1ldGVyIgorKCF0eXBlIGFycmF5IDE0MzkgbmlsICBnY191c2VkICIiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA2NjkpCispCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtaW8uYyIgODgpCituaWwgKQorKCFwYWlyICAiZ2ZjX2ludHJpbnNpY19tYXAiCisoIXR5cGUgYXJyYXkgMTQ0MCBuaWwgIGdjX3VzZWQgIiIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY3MSkKKykKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1pbnRyaW5zaWMuYyIgMTEyKQorbmlsICkKKyghcGFpciAgIm1vZHVsZV9odGFiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzUzKQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWRlY2wuYyIgMzk0MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjcyKQorKQorKQorKQorKCFwYWlyICAic2F2ZWRfbG9jYWxfZGVjbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtZGVjbC5jIiA2NykKK25pbCApCisoIXBhaXIgICJub25sb2NhbF9kdW1teV9kZWNscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1kZWNsLmMiIDYzKQorbmlsICkKKyghcGFpciAgInNhdmVkX3BhcmVudF9mdW5jdGlvbl9kZWNscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi90cmFucy1kZWNsLmMiIDYwKQorbmlsICkKKyghcGFpciAgInNhdmVkX2Z1bmN0aW9uX2RlY2xzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJmb3J0cmFuL3RyYW5zLWRlY2wuYyIgNTkpCituaWwgKQorKCFwYWlyICAicGFyZW50X2Zha2VfcmVzdWx0X2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtZGVjbC5jIiA1NCkKK25pbCApCisoIXBhaXIgICJjdXJyZW50X2Zha2VfcmVzdWx0X2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vdHJhbnMtZGVjbC5jIiA1MykKK25pbCApCisoIXBhaXIgICJnbG9iYWxfYmluZGluZ19sZXZlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODApCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vZjk1LWxhbmcuYyIgMjk5KQorbmlsICkKKyghcGFpciAgImN1cnJlbnRfYmluZGluZ19sZXZlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODApCisKKyghc3JjZmlsZWxvYyAgImZvcnRyYW4vZjk1LWxhbmcuYyIgMjk1KQorbmlsICkKKyghcGFpciAgImN1cnJlbnRfdHJhbnNsYXRpb25fdW5pdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi9mOTUtbGFuZy5jIiAxNjMpCituaWwgKQorKCFwYWlyICAiZnJlZV9iaW5kaW5nX2xldmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MCkKKworKCFzcmNmaWxlbG9jICAiZm9ydHJhbi9mOTUtbGFuZy5jIiAxNTcpCituaWwgKQorKCFwYWlyICAicGVuZGluZ19ub2V4Y2VwdF9jaGVja3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY3NSkKKworKCFzcmNmaWxlbG9jICAiY3AvZXhjZXB0LmMiIDExODApCituaWwgKQorKCFwYWlyICAiY3BfZWhfcGVyc29uYWxpdHlfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtbGFuZy5jIiAxMzYpCituaWwgKQorKCFwYWlyICAic2hhZG93ZWRfdmFyX2Zvcl9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzgzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC1vYmpjcC1jb21tb24uYyIgMTg5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjc4KQorKQorCisoIW9wdGlvbiBpZl9tYXJrZWQgc3RyaW5nICAidHJlZV9kZWNsX21hcF9tYXJrZWRfcCIpCispCispCisoIXBhaXIgICJhYm9ydF9mbmRlY2xfYWRkciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY2xhc3MuYyIgODYxMSkKK25pbCApCisoIXBhaXIgICJzaXplb2ZfYmlnZ2VzdF9lbXB0eV9jbGFzcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY2xhc3MuYyIgMTA4KQorbmlsICkKKyghcGFpciAgImFic3RyYWN0X3BlbmRpbmdfdmFycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM1NSkKKworKCFzcmNmaWxlbG9jICAiY3AvdHlwZWNrMi5jIiAxODIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY4MykKKykKKykKKykKKyghcGFpciAgInRodW5rX2xhYmVsbm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL21ldGhvZC5jIiAyMDQpCituaWwgKQorKCFwYWlyICAidGhlX3BhcnNlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNjkxKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuYyIgMjgxMjkpCituaWwgKQorKCFwYWlyICAibGFtYmRhX3Njb3BlX3N0YWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2ODYpCisKKyghc3JjZmlsZWxvYyAgImNwL3BhcnNlci5jIiA4MTk3KQorbmlsICkKKyghcGFpciAgImxhbWJkYV9jb3VudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmMiIDgxOTEpCituaWwgKQorKCFwYWlyICAibGFtYmRhX3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wYXJzZXIuYyIgODE5MCkKK25pbCApCisoIXBhaXIgICJjcF9wYXJzZXJfY29udGV4dF9mcmVlX2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDY5NykKKworKCFzcmNmaWxlbG9jICAiY3AvcGFyc2VyLmMiIDE2NTEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlbGV0YWJsZSBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAibGlzdF9oYXNoX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1MykKKworKCFzcmNmaWxlbG9jICAiY3AvdHJlZS5jIiAxNTc4KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3KQorKQorKQorKQorKCFwYWlyICAiY3BsdXNfYXJyYXlfaHRhYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisKKyghc3JjZmlsZWxvYyAgImNwL3RyZWUuYyIgNzQxKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3KQorKQorKQorKQorKCFwYWlyICAiY29uc3RleHByX2NhbGxfdGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNTcpCisKKyghc3JjZmlsZWxvYyAgImNwL3NlbWFudGljcy5jIiA2NDM5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3MDgpCispCispCispCisoIXBhaXIgICJjb25zdGV4cHJfZnVuZGVmX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzU5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgNTc3MikKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzExKQorKQorKQorKQorKCFwYWlyICAiZGVmZXJyZWRfYWNjZXNzX25vX2NoZWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgMTM5KQorbmlsICkKKyghcGFpciAgImRlZmVycmVkX2FjY2Vzc19zdGFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzEzKQorCisoIXNyY2ZpbGVsb2MgICJjcC9zZW1hbnRpY3MuYyIgMTM4KQorbmlsICkKKyghcGFpciAgInBlbmRpbmdfcmVwbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3JlcG8uYyIgNDUpCituaWwgKQorKCFwYWlyICAibGFzdF9lcnJvcl90aW5zdF9sZXZlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzIyKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA3OTMxKQorbmlsICkKKyghcGFpciAgImNhbm9uaWNhbF90ZW1wbGF0ZV9wYXJtcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL3B0LmMiIDEwMCkKK25pbCApCisoIXBhaXIgICJ0eXBlX3NwZWNpYWxpemF0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2MSkKKworKCFzcmNmaWxlbG9jICAiY3AvcHQuYyIgOTQpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcxOCkKKykKKykKKykKKyghcGFpciAgImRlY2xfc3BlY2lhbGl6YXRpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYxKQorCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA5MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzE4KQorKQorKQorKQorKCFwYWlyICAic2F2ZWRfYWNjZXNzX3Njb3BlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA2OCkKK25pbCApCisoIXBhaXIgICJjdXJyZW50X3RpbnN0X2xldmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3MjIpCisKKyghc3JjZmlsZWxvYyAgImNwL3B0LmMiIDY2KQorbmlsICkKKyghcGFpciAgInNhdmVkX3RyZWVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9wdC5jIiA2MykKK25pbCApCisoIXBhaXIgICJsYXN0X3BlbmRpbmdfdGVtcGxhdGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcyMSkKKworKCFzcmNmaWxlbG9jICAiY3AvcHQuYyIgNTgpCituaWwgKQorKCFwYWlyICAicGVuZGluZ190ZW1wbGF0ZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcyMSkKKworKCFzcmNmaWxlbG9jICAiY3AvcHQuYyIgNTcpCituaWwgKQorKCFwYWlyICAic3NkZl9kZWNscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wyLmMiIDMxMTcpCituaWwgKQorKCFwYWlyICAic3NkZl9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsMi5jIiAzMTEzKQorbmlsICkKKyghcGFpciAgInByaW9yaXR5X2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wyLmMiIDMxMTApCituaWwgKQorKCFwYWlyICAiaW5pdGlhbGl6ZV9wX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wyLmMiIDMxMDcpCituaWwgKQorKCFwYWlyICAibm9fbGlua2FnZV9kZWNscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wyLmMiIDk5KQorbmlsICkKKyghcGFpciAgImRlZmVycmVkX2ZucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wyLmMiIDk1KQorbmlsICkKKyghcGFpciAgInBlbmRpbmdfc3RhdGljcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wyLmMiIDkxKQorbmlsICkKKyghcGFpciAgInN0YXJ0X2NsZWFudXBfY250IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDY2OTYpCituaWwgKQorKCFwYWlyICAidHlwZW5hbWVfaHRhYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisKKyghc3JjZmlsZWxvYyAgImNwL2RlY2wuYyIgMzE5MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKykKKykKKykKKyghcGFpciAgImluY29tcGxldGVfdmFycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzMxKQorCisoIXNyY2ZpbGVsb2MgICJjcC9kZWNsLmMiIDI2MCkKK25pbCApCisoIXBhaXIgICJqYXZhX2lmYWNlX2xvb2t1cF9mbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY2FsbC5jIiA3MTUwKQorbmlsICkKKyghcGFpciAgImRlZmF1bHRfYXJnX2NvbnRleHQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jYWxsLmMiIDYzNTIpCituaWwgKQorKCFwYWlyICAidW5lbWl0dGVkX3RpbmZvX2RlY2xzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA1NTE4KQorbmlsICkKKyghcGFpciAgImRlZmVycmVkX21hcmtfdXNlZF9jYWxscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNTIwNikKK25pbCApCisoIXBhaXIgICJhc3NpZ25tZW50X29wZXJhdG9yX25hbWVfaW5mbyIKKyghdHlwZSBhcnJheSAxNDQxIG5pbCAgZ2NfdXNlZCAiKGludCkgTUFYX1RSRUVfQ09ERVMiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3NDIpCispCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDY2MCkKK25pbCApCisoIXBhaXIgICJvcGVyYXRvcl9uYW1lX2luZm8iCisoIXR5cGUgYXJyYXkgMTQ0MiBuaWwgIGdjX3VzZWQgIihpbnQpIE1BWF9UUkVFX0NPREVTIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzQyKQorKQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQ2NTcpCituaWwgKQorKCFwYWlyICAidGxzX2FnZ3JlZ2F0ZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgNDQxMykKK25pbCApCisoIXBhaXIgICJzdGF0aWNfYWdncmVnYXRlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0NDExKQorbmlsICkKKyghcGFpciAgImxvY2FsX2NsYXNzZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9jcC10cmVlLmgiIDQyOTkpCituaWwgKQorKCFwYWlyICAiaW50ZWdlcl90d29fbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA0MjYxKQorbmlsICkKKyghcGFpciAgInNjb3BlX2NoYWluIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NDgpCisKKyghc3JjZmlsZWxvYyAgImNwL2NwLXRyZWUuaCIgMTA3MCkKK25pbCApCisoIXBhaXIgICJjcF9nbG9iYWxfdHJlZXMiCisoIXR5cGUgYXJyYXkgMTQ0MyBuaWwgIGdjX3VzZWQgIkNQVElfTUFYIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiY3AvY3AtdHJlZS5oIiA4NzEpCituaWwgKQorKCFwYWlyICAibGFtYmRhX2NudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuYyIgMjAwMikKK25pbCApCisoIXBhaXIgICJhbm9uX2NudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuYyIgMTk4MykKK25pbCApCisoIXBhaXIgICJmcmVlX2JpbmRpbmdfbGV2ZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk0KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5jIiAxNDQ1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWxldGFibGUgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImZyZWVfYmluZGluZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk5KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5jIiAyNzYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlbGV0YWJsZSBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiZnJlZV9iaW5kaW5nX2VudHJ5IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1MjQpCisKKyghc3JjZmlsZWxvYyAgImNwL25hbWUtbG9va3VwLmMiIDkyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWxldGFibGUgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImFub255bW91c19uYW1lc3BhY2VfbmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuYyIgNjMpCituaWwgKQorKCFwYWlyICAiZ2xvYmFsX3R5cGVfbm9kZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMjc4KQorbmlsICkKKyghcGFpciAgImdsb2JhbF9zY29wZV9uYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjcC9uYW1lLWxvb2t1cC5oIiAyNzMpCituaWwgKQorKCFwYWlyICAiZ2xvYmFsX25hbWVzcGFjZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY3AvbmFtZS1sb29rdXAuaCIgMjcyKQorbmlsICkKKyghcGFpciAgInRlbXBfY291bnQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNwL21hbmdsZS5jIiAzODM4KQorbmlsICkKKyghcGFpciAgImNvbnZfdHlwZV9uYW1lcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisKKyghc3JjZmlsZWxvYyAgImNwL21hbmdsZS5jIiAzNzExKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA3KQorKQorKQorKQorKCFwYWlyICAic3Vic3RfaWRlbnRpZmllcnMiCisoIXR5cGUgYXJyYXkgMTQ0NCBuaWwgIGdjX3VzZWQgIlNVQklEX01BWCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImNwL21hbmdsZS5jIiAxMzUpCituaWwgKQorKCFwYWlyICAiRyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzUxKQorCisoIXNyY2ZpbGVsb2MgICJjcC9tYW5nbGUuYyIgMTA2KQorbmlsICkKKyghcGFpciAgInRpbmZvX2Rlc2NzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NTMpCisKKyghc3JjZmlsZWxvYyAgImNwL3J0dGkuYyIgMTAyKQorbmlsICkKKyghcGFpciAgInRoZV9wYXJzZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc1NykKKworKCFzcmNmaWxlbG9jICAiYy9jLXBhcnNlci5jIiAyMDcpCituaWwgKQorKCFwYWlyICAib3B0aW9uc19zdGFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNzYzKQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLXByYWdtYS5jIiA4ODgpCituaWwgKQorKCFwYWlyICAicGVuZGluZ19yZWRlZmluZV9leHRuYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NjUpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDQxNykKK25pbCApCisoIXBhaXIgICJwZW5kaW5nX3dlYWtzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NjgpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmMiIDI0MykKK25pbCApCisoIXBhaXIgICJhbGlnbm1lbnRfc3RhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc3MSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1wcmFnbWEuYyIgNTIpCituaWwgKQorKCFwYWlyICAicHJhZ21hX2V4dGVybl9wcmVmaXgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtcHJhZ21hLmgiIDE0OCkKK25pbCApCisoIXBhaXIgICJsYXp5X2hleF9mcF92YWx1ZV9jb3VudCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jcHBidWlsdGluLmMiIDEwMzIpCituaWwgKQorKCFwYWlyICAibGF6eV9oZXhfZnBfdmFsdWVzIgorKCF0eXBlIGFycmF5IDE0NDUgbmlsICBnY191c2VkICIxMiIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc3NCkKKykKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jcHBidWlsdGluLmMiIDEwMzEpCituaWwgKQorKCFwYWlyICAicGVuZGluZ19sYW5nX2NoYW5nZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uaCIgOTI3KQorbmlsICkKKyghcGFpciAgImNfZ2xvYmFsX3RyZWVzIgorKCF0eXBlIGFycmF5IDE0NDYgbmlsICBnY191c2VkICJDVElfTUFYIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uaCIgNDM4KQorbmlsICkKKyghcGFpciAgInJpZHBvaW50ZXJzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA2KQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5oIiAyMjkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICIoaW50KSBSSURfTUFYIikKKykKKykKKyghcGFpciAgInRyZWVfdmVjdG9yX2NhY2hlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3NzgpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmMiIDExMjQyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWxldGFibGUgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgIm9wdGltaXplX2FyZ3MiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc4MSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uYyIgODc5NCkKK25pbCApCisoIXBhaXIgICJjb21wb3VuZF9saXRlcmFsX251bWJlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYy1mYW1pbHkvYy1jb21tb24uYyIgNTYyOSkKK25pbCApCisoIXBhaXIgICJidWlsdF9pbl9hdHRyaWJ1dGVzIgorKCF0eXBlIGFycmF5IDE0NDcgbmlsICBnY191c2VkICIoaW50KSBBVFRSX0xBU1QiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJjLWZhbWlseS9jLWNvbW1vbi5jIiA1MDA2KQorbmlsICkKKyghcGFpciAgInR5cGVfaGFzaF90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmMiIDQ3MzUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcpCispCispCispCisoIXBhaXIgICJyZWdpc3RlcmVkX2J1aWx0aW5fdHlwZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMtZmFtaWx5L2MtY29tbW9uLmMiIDMzOTUpCituaWwgKQorKCFwYWlyICAiZXh0X2Jsb2NrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiAxMDAyMykKK25pbCApCisoIXBhaXIgICJjX2lubGluZV9zdGF0aWNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA3ODgpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDQ4MykKK25pbCApCisoIXBhaXIgICJiaW5kaW5nX2ZyZWVsaXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1ODQpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDQzNSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVsZXRhYmxlIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJzY29wZV9mcmVlbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTkwKQorCisoIXNyY2ZpbGVsb2MgICJjL2MtZGVjbC5jIiA0MzEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlbGV0YWJsZSBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiZXh0ZXJuYWxfc2NvcGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5MCkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDI3KQorbmlsICkKKyghcGFpciAgImZpbGVfc2NvcGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5MCkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDIyKQorbmlsICkKKyghcGFpciAgImN1cnJlbnRfZnVuY3Rpb25fc2NvcGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5MCkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDE4KQorbmlsICkKKyghcGFpciAgImN1cnJlbnRfc2NvcGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDU5MCkKKworKCFzcmNmaWxlbG9jICAiYy9jLWRlY2wuYyIgNDEyKQorbmlsICkKKyghcGFpciAgInZpc2libGVfYnVpbHRpbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDExOSkKK25pbCApCisoIXBhaXIgICJjX3N0bXRfdHJlZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODgpCisKKyghc3JjZmlsZWxvYyAgImMvYy1kZWNsLmMiIDExMikKK25pbCApCisoIXBhaXIgICJnbmF0X2VoX3BlcnNvbmFsaXR5X2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL21pc2MuYyIgODAwKQorbmlsICkKKyghcGFpciAgImJ1aWx0X2luX2F0dHJpYnV0ZXMiCisoIXR5cGUgYXJyYXkgMTQ0OCBuaWwgIGdjX3VzZWQgIihpbnQpIEFUVFJfTEFTVCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3V0aWxzLmMiIDU5MzYpCituaWwgKQorKCFwYWlyICAiYnVpbHRpbl90eXBlcyIKKyghdHlwZSBhcnJheSAxNDQ5IG5pbCAgZ2NfdXNlZCAiKGludCkgQlRfTEFTVCArIDEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiA1ODAwKQorbmlsICkKKyghcGFpciAgImR1bW15X2dsb2JhbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdXRpbHMuYyIgNTU5MSkKK25pbCApCisoIXBhaXIgICJwYWRfdHlwZV9oYXNoX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYzKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiAyMjgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDc5OSkKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgInBhZF90eXBlX2hhc2hfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAiZnJlZV9ibG9ja19jaGFpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdXRpbHMuYyIgMjEzKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWxldGFibGUgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImdsb2JhbF9yZW5hbWluZ19wb2ludGVycyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3V0aWxzLmMiIDIxMCkKK25pbCApCisoIXBhaXIgICJidWlsdGluX2RlY2xzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdXRpbHMuYyIgMjA3KQorbmlsICkKKyghcGFpciAgImdsb2JhbF9kZWNscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3V0aWxzLmMiIDIwNCkKK25pbCApCisoIXBhaXIgICJnbG9iYWxfY29udGV4dCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdXRpbHMuYyIgMjAxKQorbmlsICkKKyghcGFpciAgImZyZWVfYmluZGluZ19sZXZlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODAyKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiAxOTgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlbGV0YWJsZSBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiY3VycmVudF9iaW5kaW5nX2xldmVsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MDIpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3V0aWxzLmMiIDE5NSkKK25pbCApCisoIXBhaXIgICJmbG9hdF90eXBlcyIKKyghdHlwZSBhcnJheSAxNDUwIG5pbCAgZ2NfdXNlZCAiTlVNX01BQ0hJTkVfTU9ERVMiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiAxNzkpCituaWwgKQorKCFwYWlyICAic2lnbmVkX2FuZF91bnNpZ25lZF90eXBlcyIKKyghdHlwZSBhcnJheSAxNDUxIG5pbCAgZ2NfdXNlZCAiMiAqIE1BWF9CSVRTX1BFUl9XT1JEICsgMSIgCisoIXR5cGUgYXJyYXkgMTQ1MiBuaWwgIGdjX3VzZWQgIjIiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiAxNzYpCituaWwgKQorKCFwYWlyICAiZHVtbXlfbm9kZV90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNikKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdXRpbHMuYyIgMTU5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAibWF4X2duYXRfbm9kZXMiKQorKQorKQorKCFwYWlyICAiYXNzb2NpYXRlX2duYXRfdG9fZ251IgorKCF0eXBlIGFscmVhZHlfc2VlbiA2KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS91dGlscy5jIiAxNDcpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGxlbmd0aCBzdHJpbmcgICJtYXhfZ25hdF9ub2RlcyIpCispCispCisoIXBhaXIgICJnbmF0X3Ztc19jb25kaXRpb25faGFuZGxlcl9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyNjk4KQorbmlsICkKKyghcGFpciAgInZtc19idWlsdGluX2VzdGFibGlzaF9oYW5kbGVyX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDI2OTcpCituaWwgKQorKCFwYWlyICAiZ251X3Byb2dyYW1fZXJyb3JfbGFiZWxfc3RhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMjcpCituaWwgKQorKCFwYWlyICAiZ251X3N0b3JhZ2VfZXJyb3JfbGFiZWxfc3RhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMjYpCituaWwgKQorKCFwYWlyICAiZ251X2NvbnN0cmFpbnRfZXJyb3JfbGFiZWxfc3RhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAyMjUpCituaWwgKQorKCFwYWlyICAiZ251X2xvb3Bfc3RhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgwNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMjIyKQorbmlsICkKKyghcGFpciAgImdudV9yZXR1cm5fdmFyX3N0YWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTk4KQorbmlsICkKKyghcGFpciAgImdudV9yZXR1cm5fbGFiZWxfc3RhY2siCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAxOTQpCituaWwgKQorKCFwYWlyICAiZ251X2VsYWJfcHJvY19zdGFjayIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDE5MCkKK25pbCApCisoIXBhaXIgICJnbnVfaW5jb21pbmdfZXhjX3B0ciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTg3KQorbmlsICkKKyghcGFpciAgImdudV9leGNlcHRfcHRyX3N0YWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvdHJhbnMuYyIgMTg0KQorbmlsICkKKyghcGFpciAgImVsYWJfaW5mb19saXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MTMpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDE3OSkKK25pbCApCisoIXBhaXIgICJzdG10X2dyb3VwX2ZyZWVfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gODE1KQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS90cmFucy5jIiAxNjYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlbGV0YWJsZSBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAiY3VycmVudF9zdG10X2dyb3VwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4MTUpCisKKyghc3JjZmlsZWxvYyAgImFkYS9nY2MtaW50ZXJmYWNlL3RyYW5zLmMiIDE2MykKK25pbCApCisoIXBhaXIgICJhbm5vdGF0ZV92YWx1ZV9jYWNoZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2OSkKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvZGVjbC5jIiAxMjgpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyNzYpCispCisKKyghb3B0aW9uIGlmX21hcmtlZCBzdHJpbmcgICJ0cmVlX2ludF9tYXBfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAiZ25hdF9yYWlzZV9kZWNsc19leHQiCisoIXR5cGUgYXJyYXkgMTQ1MyBuaWwgIGdjX3VzZWQgIihpbnQpIExBU1RfUkVBU09OX0NPREUgKyAxIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiYWRhL2djYy1pbnRlcmZhY2UvZ2lnaS5oIiA0MzQpCituaWwgKQorKCFwYWlyICAiZ25hdF9yYWlzZV9kZWNscyIKKyghdHlwZSBhcnJheSAxNDU0IG5pbCAgZ2NfdXNlZCAiKGludCkgTEFTVF9SRUFTT05fQ09ERSArIDEiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS9naWdpLmgiIDQzMykKK25pbCApCisoIXBhaXIgICJnbmF0X3N0ZF9kZWNscyIKKyghdHlwZSBhcnJheSAxNDU1IG5pbCAgZ2NfdXNlZCAiKGludCkgQURUX0xBU1QiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJhZGEvZ2NjLWludGVyZmFjZS9naWdpLmgiIDQzMikKK25pbCApCisoIXBhaXIgICJhc2FuX2N0b3Jfc3RhdGVtZW50cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiYXNhbi5jIiAyMTg2KQorbmlsICkKKyghcGFpciAgInNoYWRvd19wdHJfdHlwZXMiCisoIXR5cGUgYXJyYXkgMTQ1NiBuaWwgIGdjX3VzZWQgIjIiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorCisoIXNyY2ZpbGVsb2MgICJhc2FuLmMiIDIxNSkKK25pbCApCisoIXBhaXIgICJpbmxpbmVfc3VtbWFyeV92ZWMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDgzMykKKworKCFzcmNmaWxlbG9jICAiaXBhLWlubGluZS5oIiAxNjEpCituaWwgKQorKCFwYWlyICAibHRvX2dsb2JhbF92YXJfZGVjbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJsdG8tc3RyZWFtZXIuaCIgODU3KQorbmlsICkKKyghcGFpciAgInRtX3dyYXBfbWFwIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzcxKQorCisoIXNyY2ZpbGVsb2MgICJ0cmFucy1tZW0uYyIgNDQwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjgwKQorKQorCisoIW9wdGlvbiBpZl9tYXJrZWQgc3RyaW5nICAidHJlZV9tYXBfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAiaXBhX2VkZ2VfYXJnc192ZWN0b3IiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk2MSkKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNDM3KQorbmlsICkKKyghcGFpciAgImlwYV9ub2RlX2FnZ19yZXBsYWNlbWVudHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDk3NikKKworKCFzcmNmaWxlbG9jICAiaXBhLXByb3AuaCIgNDM1KQorbmlsICkKKyghcGFpciAgImlwYV9lc2NhcGVkX3B0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAzMjIpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtc3NhLWFsaWFzLmgiIDE0MSkKK25pbCApCisoIXBhaXIgICJmcmVlX3BoaW5vZGVzIgorKCF0eXBlIGFycmF5IDE0NTcgbmlsICBnY191c2VkICJOVU1fQlVDS0VUUyAtIDIiIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0MjApCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUtcGhpbm9kZXMuYyIgNzApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlbGV0YWJsZSBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAidmFyeWluZ19zc2FfZWRnZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQyMCkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtcHJvcGFnYXRlLmMiIDE1OCkKK25pbCApCisoIXBhaXIgICJpbnRlcmVzdGluZ19zc2FfZWRnZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQyMCkKKworKCFzcmNmaWxlbG9jICAidHJlZS1zc2EtcHJvcGFnYXRlLmMiIDE0MikKK25pbCApCisoIXBhaXIgICJjbG9uZV9mbl9pZF9udW0iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaGNsb25lcy5jIiAyNDgpCituaWwgKQorKCFwYWlyICAidnRhYmxlX2VudHJ5X3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaHVuaXQuYyIgMjE3KQorbmlsICkKKyghcGFpciAgImFzbV9sYXN0X25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMTYpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaHVuaXQuYyIgMjE0KQorbmlsICkKKyghcGFpciAgIm9yZGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTEpCisKKyghc3JjZmlsZWxvYyAgInBhc3Nlcy5jIiAxNzI5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAibm5vZGVzIikKKykKKykKKyghcGFpciAgInZhX2xpc3RfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jIiA1MzQzKQorbmlsICkKKyghcGFpciAgInRsc19nZXRfYWRkcl9saWJmdW5jIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYyIgNDY2KQorbmlsICkKKyghcGFpciAgImd0eV9kdW1teSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jIiAyODUpCituaWwgKQorKCFwYWlyICAic3RhY2tfY2hrX2ZhaWxfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidGFyZ2hvb2tzLmMiIDY2MykKK25pbCApCisoIXBhaXIgICJzdGFja19jaGtfZ3VhcmRfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidGFyZ2hvb2tzLmMiIDYzMCkKK25pbCApCisoIXBhaXIgICJjcml0aWNhbF9uYW1lX211dGV4ZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNjUpCisKKyghc3JjZmlsZWxvYyAgIm9tcC1sb3cuYyIgNjMzOSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW0yX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghb3B0aW9uIHBhcmFtMV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorKQorKQorKQorKCFwYWlyICAidG1wX29tcGZuX2lkX251bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib21wLWxvdy5jIiAxNTU0KQorbmlsICkKKyghcGFpciAgInBhcmFsbGVsaXplZF9mdW5jdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMCkKKworKCFzcmNmaWxlbG9jICAidHJlZS1wYXJsb29wcy5jIiAxMzkxKQorbmlsICkKKyghcGFpciAgInRyYW1wb2xpbmVfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1uZXN0ZWQuYyIgNDY3KQorbmlsICkKKyghcGFpciAgInB0cl92b2lkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXByb2ZpbGUuYyIgNTUpCituaWwgKQorKCFwYWlyICAiaWNfZ2Nvdl90eXBlX3B0cl92YXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtcHJvZmlsZS5jIiA1NCkKK25pbCApCisoIXBhaXIgICJpY192b2lkX3B0cl92YXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtcHJvZmlsZS5jIiA1MykKK25pbCApCisoIXBhaXIgICJ0cmVlX2lvcl9wcm9maWxlcl9mbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1wcm9maWxlLmMiIDUwKQorbmlsICkKKyghcGFpciAgInRyZWVfYXZlcmFnZV9wcm9maWxlcl9mbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1wcm9maWxlLmMiIDQ5KQorbmlsICkKKyghcGFpciAgInRyZWVfaW5kaXJlY3RfY2FsbF9wcm9maWxlcl9mbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1wcm9maWxlLmMiIDQ4KQorbmlsICkKKyghcGFpciAgInRyZWVfb25lX3ZhbHVlX3Byb2ZpbGVyX2ZuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXByb2ZpbGUuYyIgNDcpCituaWwgKQorKCFwYWlyICAidHJlZV9wb3cyX3Byb2ZpbGVyX2ZuIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXByb2ZpbGUuYyIgNDYpCituaWwgKQorKCFwYWlyICAidHJlZV9pbnRlcnZhbF9wcm9maWxlcl9mbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1wcm9maWxlLmMiIDQ1KQorbmlsICkKKyghcGFpciAgImdjb3ZfdHlwZV9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXByb2ZpbGUuYyIgNDQpCituaWwgKQorKCFwYWlyICAic2NhbGFyX2V2b2x1dGlvbl9pbmZvIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzY3KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNjYWxhci1ldm9sdXRpb24uYyIgMzAwKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDE1KQorKQorKQorKQorKCFwYWlyICAiY2hyZWNfa25vd24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtY2hyZWMuaCIgMzApCituaWwgKQorKCFwYWlyICAiY2hyZWNfZG9udF9rbm93IgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLWNocmVjLmgiIDI5KQorbmlsICkKKyghcGFpciAgInRtcF92YXJfaWRfbnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGlmeS5jIiA0MTUpCituaWwgKQorKCFwYWlyICAic3RtdF9saXN0X2NhY2hlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1pdGVyYXRvci5jIiAzMykKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVsZXRhYmxlIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJtZW1fYWRkcl90ZW1wbGF0ZV9saXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDI1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXNzYS1hZGRyZXNzLmMiIDg2KQorbmlsICkKKyghcGFpciAgImVucXVldWVkX2NhbGxfc3RtdF9jaGFpbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1tdWRmbGFwLmMiIDEyMzQpCituaWwgKQorKCFwYWlyICAiZGVmZXJyZWRfc3RhdGljX2RlY2xzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1tdWRmbGFwLmMiIDEyMzEpCituaWwgKQorKCFwYWlyICAibWFya2VkX3RyZWVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1MykKKworKCFzcmNmaWxlbG9jICAidHJlZS1tdWRmbGFwLmMiIDExOTQpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcpCispCispCispCisoIXBhaXIgICJtZl9zZXRfb3B0aW9uc19mbmRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtbXVkZmxhcC5jIiAyOTQpCituaWwgKQorKCFwYWlyICAibWZfaW5pdF9mbmRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtbXVkZmxhcC5jIiAyOTEpCituaWwgKQorKCFwYWlyICAibWZfdW5yZWdpc3Rlcl9mbmRlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtbXVkZmxhcC5jIiAyODgpCituaWwgKQorKCFwYWlyICAibWZfcmVnaXN0ZXJfZm5kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLW11ZGZsYXAuYyIgMjg1KQorbmlsICkKKyghcGFpciAgIm1mX2NoZWNrX2ZuZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1tdWRmbGFwLmMiIDI4MikKK25pbCApCisoIXBhaXIgICJtZl9jYWNoZV9tYXNrX2RlY2xfbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1tdWRmbGFwLmMiIDI3OSkKK25pbCApCisoIXBhaXIgICJtZl9jYWNoZV9zaGlmdF9kZWNsX2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtbXVkZmxhcC5jIiAyNzYpCituaWwgKQorKCFwYWlyICAibWZfY2FjaGVfbWFza19kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLW11ZGZsYXAuYyIgMjcxKQorbmlsICkKKyghcGFpciAgIm1mX2NhY2hlX3NoaWZ0X2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtbXVkZmxhcC5jIiAyNjgpCituaWwgKQorKCFwYWlyICAibWZfY2FjaGVfYXJyYXlfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1tdWRmbGFwLmMiIDI2NSkKK25pbCApCisoIXBhaXIgICJtZl9jYWNoZV9zdHJ1Y3RwdHJfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1tdWRmbGFwLmMiIDI2MikKK25pbCApCisoIXBhaXIgICJtZl9jYWNoZV9zdHJ1Y3RfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS1tdWRmbGFwLmMiIDI1OSkKK25pbCApCisoIXBhaXIgICJtZl91aW50cHRyX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUtbXVkZmxhcC5jIiAyNTYpCituaWwgKQorKCFwYWlyICAiY2Fub25pY2FsX3R5cGVfaGFzaF9jYWNoZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2OSkKKworKCFzcmNmaWxlbG9jICAiZ2ltcGxlLmMiIDQ0KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjc2KQorKQorCisoIW9wdGlvbiBpZl9tYXJrZWQgc3RyaW5nICAidHJlZV9pbnRfbWFwX21hcmtlZF9wIikKKykKKykKKyghcGFpciAgImdpbXBsZV9jYW5vbmljYWxfdHlwZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUzKQorCisoIXNyY2ZpbGVsb2MgICJnaW1wbGUuYyIgNDIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcpCispCisKKyghb3B0aW9uIGlmX21hcmtlZCBzdHJpbmcgICJnZ2NfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAiZWxmX2ZpbmlfYXJyYXlfc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgNzQzMCkKK25pbCApCisoIXBhaXIgICJlbGZfaW5pdF9hcnJheV9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiA3NDI5KQorbmlsICkKKyghcGFpciAgInRtX2Nsb25lX2hhc2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNzEpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiA1NjIyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjgwKQorKQorCisoIW9wdGlvbiBpZl9tYXJrZWQgc3RyaW5nICAidHJlZV9tYXBfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAid2Vha3JlZl90YXJnZXRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgNTMxMikKK25pbCApCisoIXBhaXIgICJjb25zdF9kZXNjX2h0YWIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNzMpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAyNjcyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjA5KQorKQorKQorKQorKCFwYWlyICAiaW5pdGlhbF90cmFtcG9saW5lIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAyMzgzKQorbmlsICkKKyghcGFpciAgIndlYWtfZGVjbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAyMTYxKQorbmlsICkKKyghcGFpciAgInBlbmRpbmdfYXNzZW1ibGVfZXh0ZXJuYWxzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgMjA5MSkKK25pbCApCisoIXBhaXIgICJzaGFyZWRfY29uc3RhbnRfcG9vbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI0NSkKKworKCFzcmNmaWxlbG9jICAidmFyYXNtLmMiIDE4NSkKK25pbCApCisoIXBhaXIgICJhbmNob3JfbGFiZWxubyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidmFyYXNtLmMiIDE4MikKK25pbCApCisoIXBhaXIgICJvYmplY3RfYmxvY2tfaHRhYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM3NSkKKworKCFzcmNmaWxlbG9jICAidmFyYXNtLmMiIDE3OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ0KQorKQorKQorKQorKCFwYWlyICAic2VjdGlvbl9odGFiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzc3KQorCisoIXNyY2ZpbGVsb2MgICJ2YXJhc20uYyIgMTc2KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDYpCispCispCispCisoIXBhaXIgICJ1bm5hbWVkX3NlY3Rpb25zIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiAxNjgpCituaWwgKQorKCFwYWlyICAiY29uc3RfbGFiZWxubyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidmFyYXNtLmMiIDc1KQorbmlsICkKKyghcGFpciAgIndlYWtfZ2xvYmFsX29iamVjdF9uYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKworKCFzcmNmaWxlbG9jICAidmFyYXNtLmMiIDYxKQorbmlsICkKKyghcGFpciAgImZpcnN0X2dsb2JhbF9vYmplY3RfbmFtZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgInZhcmFzbS5jIiA2MCkKK25pbCApCisoIXBhaXIgICJnY2NfZWhfcGVyc29uYWxpdHlfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5jIiAxMTQzMykKK25pbCApCisoIXBhaXIgICJub25zdGFuZGFyZF9pbnRlZ2VyX3R5cGVfY2FjaGUiCisoIXR5cGUgYXJyYXkgMTQ1OCBuaWwgIGdjX3VzZWQgIjIgKiBNQVhfSU5UX0NBQ0hFRF9QUkVDICsgMiIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuYyIgNzMwNykKK25pbCApCisoIXBhaXIgICJpbml0X3ByaW9yaXR5X2Zvcl9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzc5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmMiIDIwNikKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3NCkKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgInRyZWVfcHJpb3JpdHlfbWFwX21hcmtlZF9wIikKKykKKykKKyghcGFpciAgImRlYnVnX2FyZ3NfZm9yX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzODEpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuYyIgMjAyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjcxKQorKQorCisoIW9wdGlvbiBpZl9tYXJrZWQgc3RyaW5nICAidHJlZV92ZWNfbWFwX21hcmtlZF9wIikKKykKKykKKyghcGFpciAgInZhbHVlX2V4cHJfZm9yX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzODMpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuYyIgMTk5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjc4KQorKQorCisoIW9wdGlvbiBpZl9tYXJrZWQgc3RyaW5nICAidHJlZV9kZWNsX21hcF9tYXJrZWRfcCIpCispCispCisoIXBhaXIgICJkZWJ1Z19leHByX2Zvcl9kZWNsIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzgzKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmMiIDE5NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI3OCkKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgInRyZWVfZGVjbF9tYXBfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAiY2xfb3B0aW9uX2hhc2hfdGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUzKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmMiIDE5MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgImdnY19tYXJrZWRfcCIpCispCispCisoIXBhaXIgICJjbF90YXJnZXRfb3B0aW9uX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuYyIgMTg4KQorbmlsICkKKyghcGFpciAgImNsX29wdGltaXphdGlvbl9ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmMiIDE4NykKK25pbCApCisoIXBhaXIgICJpbnRfY3N0X2hhc2hfdGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUzKQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmMiIDE4MCkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgImdnY19tYXJrZWRfcCIpCispCispCisoIXBhaXIgICJpbnRfY3N0X25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuYyIgMTc4KQorbmlsICkKKyghcGFpciAgInR5cGVfaGFzaF90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM4NSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5jIiAxNzUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwNTcpCispCisKKyghb3B0aW9uIGlmX21hcmtlZCBzdHJpbmcgICJ0eXBlX2hhc2hfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAibmV4dF9kZWJ1Z19kZWNsX3VpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5jIiAxNTQpCituaWwgKQorKCFwYWlyICAibmV4dF90eXBlX3VpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5jIiAxNTEpCituaWwgKQorKCFwYWlyICAibmV4dF9kZWNsX3VpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAidHJlZS5jIiAxNDkpCituaWwgKQorKCFwYWlyICAic3BkIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMDYwKQorCisoIXNyY2ZpbGVsb2MgICJzdHJpbmdwb29sLmMiIDI1NCkKK25pbCApCisoIXBhaXIgICJzaXplX2Z1bmN0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgInN0b3ItbGF5b3V0LmMiIDk5KQorbmlsICkKKyghcGFpciAgInNkYm91dF9pbml0aWFsaXplZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAic2Rib3V0LmMiIDY2KQorbmlsICkKKyghcGFpciAgInByZWluaXRfc3ltYm9scyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAic2Rib3V0LmMiIDY1KQorbmlsICkKKyghcGFpciAgImRlZmVycmVkX2dsb2JhbF9kZWNscyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgInNkYm91dC5jIiA1OSkKK25pbCApCisoIXBhaXIgICJ1bm5hbWVkX3N0cnVjdF9udW1iZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgInNkYm91dC5jIiA1NSkKK25pbCApCisoIXBhaXIgICJhbm9ueW1vdXNfdHlwZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInNkYm91dC5jIiA1MSkKK25pbCApCisoIXBhaXIgICJjZmdfbGF5b3V0X2Z1bmN0aW9uX2hlYWRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJjZmdydGwuYyIgNjcpCituaWwgKQorKCFwYWlyICAiY2ZnX2xheW91dF9mdW5jdGlvbl9mb290ZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiY2ZncnRsLmMiIDY2KQorbmlsICkKKyghcGFpciAgImxpYmZ1bmNfZGVjbHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUzKQorCisoIXNyY2ZpbGVsb2MgICJvcHRhYnMuYyIgNjAwNikKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNykKKykKKykKKykKKyghcGFpciAgInVudXNlZF9leHByX2xpc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAibGlzdHMuYyIgMzYpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIGRlbGV0YWJsZSBzdHJpbmcgICIiKQorKQorKQorKCFwYWlyICAidW51c2VkX2luc25fbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJsaXN0cy5jIiAzMykKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVsZXRhYmxlIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJxdWV1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImdvZHVtcC5jIiA1OSkKK25pbCApCisoIXBhaXIgICJ0ZXN0X2luc24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZ2NzZS5jIiA4MDcpCituaWwgKQorKCFwYWlyICAic2psal9mY190eXBlX25vZGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5jIiAxNTYpCituaWwgKQorKCFwYWlyICAidHlwZV90b19ydW50aW1lX21hcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNTMpCisKKyghc3JjZmlsZWxvYyAgImV4Y2VwdC5jIiAxNTMpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDcpCispCispCispCisoIXBhaXIgICJjYWxsX3NpdGVfYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZXhjZXB0LmMiIDE1MSkKK25pbCApCisoIXBhaXIgICJpbml0aWFsX3RyYW1wb2xpbmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgNDk4NSkKK25pbCApCisoIXBhaXIgICJuZXh0X2Jsb2NrX2luZGV4IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiA0MzIxKQorbmlsICkKKyghcGFpciAgInRlbXBfc2xvdF9hZGRyZXNzX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzg3KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5jIiA1NDkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEwOTkpCispCispCispCisoIXBhaXIgICJlcGlsb2d1ZV9pbnNuX2hhc2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzOTMpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmMiIDExMSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM4KQorKQorCisoIW9wdGlvbiBpZl9tYXJrZWQgc3RyaW5nICAiZ2djX21hcmtlZF9wIikKKykKKykKKyghcGFpciAgInByb2xvZ3VlX2luc25faGFzaCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM5MykKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgMTA5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzgpCispCisKKyghb3B0aW9uIGlmX21hcmtlZCBzdHJpbmcgICJnZ2NfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAiZnVuY2RlZl9ubyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uYyIgOTgpCituaWwgKQorKCFwYWlyICAiYmxvY2tfY2xlYXJfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImV4cHIuaCIgMjk2KQorbmlsICkKKyghcGFpciAgImJsb2NrX21vdmVfZm4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImV4cHIuYyIgMTM3NikKK25pbCApCisoIXBhaXIgICJzdGFja19jaGVja19saWJmdW5jIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImV4cGxvdy5jIiAxNTA4KQorbmlsICkKKyghcGFpciAgImhhcmRfcmVnX2Nsb2JiZXJzIgorKCF0eXBlIGFycmF5IDE0NTkgbmlsICBnY191c2VkICJOVU1fTUFDSElORV9NT0RFUyIgCisoIXR5cGUgYXJyYXkgMTQ2MCBuaWwgIGdjX3VzZWQgIkZJUlNUX1BTRVVET19SRUdJU1RFUiIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKykKKykKKworKCFzcmNmaWxlbG9jICAiZW1pdC1ydGwuYyIgNTk4MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVsZXRhYmxlIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJmcmVlX3NlcXVlbmNlX3N0YWNrIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjQyKQorCisoIXNyY2ZpbGVsb2MgICJlbWl0LXJ0bC5jIiA1MTI3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWxldGFibGUgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgInNwaWxsX3Nsb3RfZGVjbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAiZW1pdC1ydGwuYyIgMjM3OSkKK25pbCApCisoIXBhaXIgICJjb25zdF9maXhlZF9odGFiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzkzKQorCisoIXNyY2ZpbGVsb2MgICJlbWl0LXJ0bC5jIiAxNDEpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzOCkKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgImdnY19tYXJrZWRfcCIpCispCispCisoIXBhaXIgICJjb25zdF9kb3VibGVfaHRhYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM5MykKKworKCFzcmNmaWxlbG9jICAiZW1pdC1ydGwuYyIgMTM3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzgpCispCisKKyghb3B0aW9uIGlmX21hcmtlZCBzdHJpbmcgICJnZ2NfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAicmVnX2F0dHJzX2h0YWIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzODkpCisKKyghc3JjZmlsZWxvYyAgImVtaXQtcnRsLmMiIDEzMykKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjcwKQorKQorCisoIW9wdGlvbiBpZl9tYXJrZWQgc3RyaW5nICAiZ2djX21hcmtlZF9wIikKKykKKykKKyghcGFpciAgIm1lbV9hdHRyc19odGFiIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzkxKQorCisoIXNyY2ZpbGVsb2MgICJlbWl0LXJ0bC5jIiAxMjkpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI1OSkKKykKKworKCFvcHRpb24gaWZfbWFya2VkIHN0cmluZyAgImdnY19tYXJrZWRfcCIpCispCispCisoIXBhaXIgICJjb25zdF9pbnRfaHRhYiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM5MykKKworKCFzcmNmaWxlbG9jICAiZW1pdC1ydGwuYyIgMTI1KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzgpCispCisKKyghb3B0aW9uIGlmX21hcmtlZCBzdHJpbmcgICJnZ2NfbWFya2VkX3AiKQorKQorKQorKCFwYWlyICAibGFiZWxfbnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJlbWl0LXJ0bC5jIiA4NykKK25pbCApCisoIXBhaXIgICJzaGlmdF90ZXN0IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImRvanVtcC5jIiAxMzUpCituaWwgKQorKCFwYWlyICAiYW5kX3Rlc3QiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiZG9qdW1wLmMiIDEzNCkKK25pbCApCisoIXBhaXIgICJhbmRfcmVnIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImRvanVtcC5jIiAxMzMpCituaWwgKQorKCFwYWlyICAidmVjdG9yX2xhc3RfbnVuaXRzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXZlY3QtZ2VuZXJpYy5jIiA3OCkKK25pbCApCisoIXBhaXIgICJ2ZWN0b3JfbGFzdF90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLXZlY3QtZ2VuZXJpYy5jIiA3NykKK25pbCApCisoIXBhaXIgICJ2ZWN0b3JfaW5uZXJfdHlwZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKworKCFzcmNmaWxlbG9jICAidHJlZS12ZWN0LWdlbmVyaWMuYyIgNzYpCituaWwgKQorKCFwYWlyICAiYWRkcl9pbmRleF90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM5NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDQwNzUpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1NCkKKykKKykKKykKKyghcGFpciAgImdlbmVyaWNfdHlwZV9pbnN0YW5jZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg4OCkKK25pbCApCisoIXBhaXIgICJ0bXBsX3ZhbHVlX3Bhcm1fZGllX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTIwKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg4MikKK25pbCApCisoIXBhaXIgICJmaWxlX3RhYmxlX2xhc3RfbG9va3VwIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NzQpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODgwKQorbmlsICkKKyghcGFpciAgImxhYmVsX251bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI4NzcpCituaWwgKQorKCFwYWlyICAibGFzdF9lbWl0dGVkX2ZpbGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ3NCkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI4NzQpCituaWwgKQorKCFwYWlyICAicG9jX2xhYmVsX251bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI4NjgpCituaWwgKQorKCFwYWlyICAibG9jbGFiZWxfbnVtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg2NSkKK25pbCApCisoIXBhaXIgICJoYXZlX2xvY2F0aW9uX2xpc3RzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg2MikKK25pbCApCisoIXBhaXIgICJyYW5nZXNfYnlfbGFiZWxfaW5fdXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg1NSkKK25pbCApCisoIXBhaXIgICJyYW5nZXNfYnlfbGFiZWxfYWxsb2NhdGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg1MikKK25pbCApCisoIXBhaXIgICJyYW5nZXNfYnlfbGFiZWwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODQ5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAicmFuZ2VzX2J5X2xhYmVsX2FsbG9jYXRlZCIpCispCispCisoIXBhaXIgICJyYW5nZXNfdGFibGVfaW5fdXNlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg0NSkKK25pbCApCisoIXBhaXIgICJyYW5nZXNfdGFibGVfYWxsb2NhdGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjg0MikKK25pbCApCisoIXBhaXIgICJyYW5nZXNfdGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNTEpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODM5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAicmFuZ2VzX3RhYmxlX2FsbG9jYXRlZCIpCispCispCisoIXBhaXIgICJtYWNpbmZvX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTIzKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjgzMCkKK25pbCApCisoIXBhaXIgICJwdWJ0eXBlX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTI2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjgyNikKK25pbCApCisoIXBhaXIgICJwdWJuYW1lX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTI2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjgyMikKK25pbCApCisoIXBhaXIgICJzZXBhcmF0ZV9saW5lX2luZm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExMzApCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyODE0KQorbmlsICkKKyghcGFpciAgImNvbGRfdGV4dF9zZWN0aW9uX2xpbmVfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzMSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI4MTEpCituaWwgKQorKCFwYWlyICAidGV4dF9zZWN0aW9uX2xpbmVfaW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzMSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI4MTApCituaWwgKQorKCFwYWlyICAiYWJicmV2X2RpZV90YWJsZV9pbl91c2UiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzk1KQorbmlsICkKKyghcGFpciAgImFiYnJldl9kaWVfdGFibGVfYWxsb2NhdGVkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjc5MikKK25pbCApCisoIXBhaXIgICJhYmJyZXZfZGllX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NjIpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzg5KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBsZW5ndGggc3RyaW5nICAiYWJicmV2X2RpZV90YWJsZV9hbGxvY2F0ZWQiKQorKQorKQorKCFwYWlyICAiY2FjaGVkX2R3X2xvY19saXN0X3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzk3KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjc4MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTEzNykKKykKKykKKykKKyghcGFpciAgImNhbGxfYXJnX2xvY2F0aW9ucyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0MCkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3NjApCituaWwgKQorKCFwYWlyICAiZGVjbF9sb2NfdGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzOTkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyNzU3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTQxKQorKQorKQorKQorKCFwYWlyICAiY29tbW9uX2Jsb2NrX2RpZV90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQwMSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI3MDApCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ2MykKKykKKykKKykKKyghcGFpciAgImRlY2xfZGllX3RhYmxlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNDAxKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjY5NikKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDYzKQorKQorKQorKQorKCFwYWlyICAiZmlsZV90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQwMykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI2OTIpCisKKyghb3B0aW9ucyAKKyghb3B0aW9uIHBhcmFtX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ3NSkKKykKKykKKykKKyghcGFpciAgImRlZmVycmVkX2FzbV9uYW1lIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTQ3KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjY4OSkKK25pbCApCisoIXBhaXIgICJsaW1ib19kaWVfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE0NykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDI2ODUpCituaWwgKQorKCFwYWlyICAiY29tZGF0X3R5cGVfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDY1KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjY4MikKK25pbCApCisoIXBhaXIgICJzaW5nbGVfY29tcF91bml0X2RpZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDYxKQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjY3OSkKK25pbCApCisoIXBhaXIgICJkZWZlcnJlZF9sb2NhdGlvbnNfbGlzdCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE1MykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDExOTkpCituaWwgKQorKCFwYWlyICAiY3VycmVudF91bml0X3BlcnNvbmFsaXR5IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyMzApCituaWwgKQorKCFwYWlyICAiY29sZF90ZXh0X3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDIyMCkKK25pbCApCisoIXBhaXIgICJjb2xkX3RleHRfc2VjdGlvbl91c2VkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjE3KQorbmlsICkKKyghcGFpciAgInRleHRfc2VjdGlvbl91c2VkIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjE2KQorbmlsICkKKyghcGFpciAgImhhdmVfbXVsdGlwbGVfZnVuY3Rpb25fc2VjdGlvbnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAyMTIpCituaWwgKQorKCFwYWlyICAiZHcyX3N0cmluZ19jb3VudGVyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjA5KQorbmlsICkKKyghcGFpciAgImRlYnVnX3N0cl9oYXNoIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxNDA1KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMjA3KQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBwYXJhbV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiA0NzMpCispCispCispCisoIXBhaXIgICJmZGVfdmVjIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMTU2KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTk3KQorbmlsICkKKyghcGFpciAgImRlYnVnX2ZyYW1lX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE2MikKK25pbCApCisoIXBhaXIgICJkZWJ1Z19yYW5nZXNfc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTYxKQorbmlsICkKKyghcGFpciAgImRlYnVnX3N0cl9vZmZzZXRzX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE2MCkKK25pbCApCisoIXBhaXIgICJkZWJ1Z19zdHJfc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTU5KQorbmlsICkKKyghcGFpciAgImRlYnVnX3B1YnR5cGVzX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE1OCkKK25pbCApCisoIXBhaXIgICJkZWJ1Z19wdWJuYW1lc19zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxNTcpCituaWwgKQorKCFwYWlyICAiZGVidWdfbG9jX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE1NikKK25pbCApCisoIXBhaXIgICJkZWJ1Z19za2VsZXRvbl9saW5lX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE1NSkKK25pbCApCisoIXBhaXIgICJkZWJ1Z19saW5lX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE1NCkKK25pbCApCisoIXBhaXIgICJkZWJ1Z19tYWNpbmZvX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE1MykKK25pbCApCisoIXBhaXIgICJkZWJ1Z19hZGRyX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE1MikKK25pbCApCisoIXBhaXIgICJkZWJ1Z19hcmFuZ2VzX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDE1MSkKK25pbCApCisoIXBhaXIgICJkZWJ1Z19za2VsZXRvbl9hYmJyZXZfc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJvdXQuYyIgMTUwKQorbmlsICkKKyghcGFpciAgImRlYnVnX2FiYnJldl9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxNDkpCituaWwgKQorKCFwYWlyICAiZGVidWdfc2tlbGV0b25faW5mb19zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxNDgpCituaWwgKQorKCFwYWlyICAiZGVidWdfaW5mb19zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxNDcpCituaWwgKQorKCFwYWlyICAiZGVjbF9zY29wZV90YWJsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxNDQpCituaWwgKQorKCFwYWlyICAiaW5jb21wbGV0ZV90eXBlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gNDUpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5jIiAxMzcpCituaWwgKQorKCFwYWlyICAidXNlZF9ydHhfYXJyYXkiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI1MSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyb3V0LmMiIDEzMSkKK25pbCApCisoIXBhaXIgICJzYXZlZF9kb19jZmlfYXNtIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkd2FyZjJjZmkuYyIgMzI4NykKK25pbCApCisoIXBhaXIgICJkd2FyZjJvdXRfY2ZpX2xhYmVsX251bSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyY2ZpLmMiIDE3MCkKK25pbCApCisoIXBhaXIgICJjaWVfcmV0dXJuX3NhdmUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNjIpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiAxNjgpCituaWwgKQorKCFwYWlyICAiY2llX2NmaV9yb3ciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDExNjQpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmNmaS5jIiAxNjYpCituaWwgKQorKCFwYWlyICAiZHcyX2NvbnN0X2xhYmVsbm8iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMmFzbS5jIiA3OTUpCituaWwgKQorKCFwYWlyICAiaW5kaXJlY3RfcG9vbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTQwNykKKworKCFzcmNmaWxlbG9jICAiZHdhcmYyYXNtLmMiIDc5MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW0yX2lzIHR5cGUgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghb3B0aW9uIHBhcmFtMV9pcyB0eXBlIAorKCF0eXBlIGFscmVhZHlfc2VlbiAzNikKKykKKykKKykKKyghcGFpciAgImNpZV9jZmlfdmVjIgorKCF0eXBlIGFscmVhZHlfc2VlbiA0NDQpCisKKyghc3JjZmlsZWxvYyAgImR3YXJmMm91dC5oIiAyNDQpCituaWwgKQorKCFwYWlyICAibGFzdGZpbGVfaXNfYmFzZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZGJ4b3V0LmMiIDI0OSkKK25pbCApCisoIXBhaXIgICJsYXN0ZmlsZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgImRieG91dC5jIiAyNDUpCituaWwgKQorKCFwYWlyICAic291cmNlX2xhYmVsX251bWJlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZGJ4b3V0LmMiIDI0MSkKK25pbCApCisoIXBhaXIgICJkYnhvdXRfc291cmNlX2xpbmVfY291bnRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiZGJ4b3V0LmMiIDIzNikKK25pbCApCisoIXBhaXIgICJzY29wZV9sYWJlbG5vIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJkYnhvdXQuYyIgMjMyKQorbmlsICkKKyghcGFpciAgIm5leHRfZmlsZV9udW1iZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImRieG91dC5jIiAyMjgpCituaWwgKQorKCFwYWlyICAicHJlaW5pdF9zeW1ib2xzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJkYnhvdXQuYyIgMTk1KQorbmlsICkKKyghcGFpciAgIm5leHRfdHlwZV9udW1iZXIiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImRieG91dC5jIiAxODkpCituaWwgKQorKCFwYWlyICAidHlwZXZlY19sZW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkpCisKKyghc3JjZmlsZWxvYyAgImRieG91dC5jIiAxODMpCituaWwgKQorKCFwYWlyICAidHlwZXZlYyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE2OSkKKworKCFzcmNmaWxlbG9jICAiZGJ4b3V0LmMiIDE3OSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgInR5cGV2ZWNfbGVuIikKKykKKykKKyghcGFpciAgInZlcnNpb25faW5mb19ub2RlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjI0KQorCisoIXNyY2ZpbGVsb2MgICJjZ3JhcGguYyIgMTYzKQorbmlsICkKKyghcGFpciAgImZyZWVfZWRnZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkyOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmMiIDEyOSkKK25pbCApCisoIXBhaXIgICJmcmVlX25vZGVzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA5MTApCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5jIiAxMjYpCituaWwgKQorKCFwYWlyICAiY2FsbG1lbSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJjc2VsaWIuYyIgMTc0KQorbmlsICkKKyghcGFpciAgImJpdG1hcF9nZ2NfZnJlZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIyKQorCisoIXNyY2ZpbGVsb2MgICJiaXRtYXAuYyIgMTMyKQorCisoIW9wdGlvbnMgCisoIW9wdGlvbiBkZWxldGFibGUgc3RyaW5nICAiIikKKykKKykKKyghcGFpciAgImZyYW1lX3NldCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiYWxpYXMuYyIgOTc4KQorbmlsICkKKyghcGFpciAgInZhcmFyZ3Nfc2V0IgorKCF0eXBlIGFscmVhZHlfc2VlbiA5KQorCisoIXNyY2ZpbGVsb2MgICJhbGlhcy5jIiA5NTYpCituaWwgKQorKCFwYWlyICAiYWxpYXNfc2V0cyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTE5NikKKworKCFzcmNmaWxlbG9jICAiYWxpYXMuYyIgMjYyKQorbmlsICkKKyghcGFpciAgInJlZ19rbm93bl92YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjUxKQorCisoIXNyY2ZpbGVsb2MgICJhbGlhcy5jIiAyNDApCituaWwgKQorKCFwYWlyICAib2xkX3JlZ19iYXNlX3ZhbHVlIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNTEpCisKKyghc3JjZmlsZWxvYyAgImFsaWFzLmMiIDIyMSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gZGVsZXRhYmxlIHN0cmluZyAgIiIpCispCispCisoIXBhaXIgICJhcmdfYmFzZV92YWx1ZSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJhbGlhcy5jIiAyMTMpCituaWwgKQorKCFwYWlyICAicmVnX2Jhc2VfdmFsdWUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI1MSkKKworKCFzcmNmaWxlbG9jICAiYWxpYXMuYyIgMjA4KQorbmlsICkKKyghcGFpciAgImFzc2VtYmxlcl9uYW1lX2hhc2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0MDkpCisKKyghc3JjZmlsZWxvYyAgInN5bXRhYi5jIiA1MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTIwKQorKQorKQorKQorKCFwYWlyICAic3ltdGFiX2hhc2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0MDkpCisKKyghc3JjZmlsZWxvYyAgInN5bXRhYi5jIiA1MSkKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gOTIwKQorKQorKQorKQorKCFwYWlyICAicmVzdGluc24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiY2FsbGVyLXNhdmUuYyIgMTA2KQorbmlsICkKKyghcGFpciAgInNhdmVpbnNuIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgImNhbGxlci1zYXZlLmMiIDEwNSkKK25pbCApCisoIXBhaXIgICJ0ZXN0X21lbSIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJjYWxsZXItc2F2ZS5jIiAxMDQpCituaWwgKQorKCFwYWlyICAidGVzdF9yZWciCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiY2FsbGVyLXNhdmUuYyIgMTAzKQorbmlsICkKKyghcGFpciAgInJlc3RwYXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiY2FsbGVyLXNhdmUuYyIgMTAyKQorbmlsICkKKyghcGFpciAgInNhdmVwYXQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAiY2FsbGVyLXNhdmUuYyIgMTAxKQorbmlsICkKKyghcGFpciAgInN5bXRhYl9vcmRlciIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDUzNSkKK25pbCApCisoIXBhaXIgICJhc21fbm9kZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyMTYpCisKKyghc3JjZmlsZWxvYyAgImNncmFwaC5oIiA1MzQpCituaWwgKQorKCFwYWlyICAiY2dyYXBoX2VkZ2VfbWF4X3VpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDUxMykKK25pbCApCisoIXBhaXIgICJjZ3JhcGhfbWF4X3VpZCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDUxMikKK25pbCApCisoIXBhaXIgICJjZ3JhcGhfbl9ub2RlcyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDUxMSkKK25pbCApCisoIXBhaXIgICJzeW10YWJfbm9kZXMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDkxOSkKKworKCFzcmNmaWxlbG9jICAiY2dyYXBoLmgiIDUxMCkKK25pbCApCisoIXBhaXIgICJpbl9jb2xkX3NlY3Rpb25fcCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gOSkKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDUyMikKK25pbCApCisoIXBhaXIgICJpbl9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA1MjEpCituaWwgKQorKCFwYWlyICAiYnNzX25vc3dpdGNoX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDUxOSkKK25pbCApCisoIXBhaXIgICJsY29tbV9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA1MTgpCituaWwgKQorKCFwYWlyICAiY29tbV9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA1MTcpCituaWwgKQorKCFwYWlyICAidGxzX2NvbW1fc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNTE2KQorbmlsICkKKyghcGFpciAgImVoX2ZyYW1lX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDUxNSkKK25pbCApCisoIXBhaXIgICJleGNlcHRpb25fc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNTE0KQorbmlsICkKKyghcGFpciAgInNic3Nfc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNTEzKQorbmlsICkKKyghcGFpciAgImJzc19zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA1MTIpCituaWwgKQorKCFwYWlyICAiZHRvcnNfc2VjdGlvbiIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMjQ1KQorCisoIXNyY2ZpbGVsb2MgICJvdXRwdXQuaCIgNTExKQorbmlsICkKKyghcGFpciAgImN0b3JzX3NlY3Rpb24iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDI0NSkKKworKCFzcmNmaWxlbG9jICAib3V0cHV0LmgiIDUxMCkKK25pbCApCisoIXBhaXIgICJzZGF0YV9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA1MDkpCituaWwgKQorKCFwYWlyICAicmVhZG9ubHlfZGF0YV9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA1MDgpCituaWwgKQorKCFwYWlyICAiZGF0YV9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA1MDcpCituaWwgKQorKCFwYWlyICAidGV4dF9zZWN0aW9uIgorKCF0eXBlIGFscmVhZHlfc2VlbiAyNDUpCisKKyghc3JjZmlsZWxvYyAgIm91dHB1dC5oIiA1MDYpCituaWwgKQorKCFwYWlyICAidHlwZXNfdXNlZF9ieV9jdXJfdmFyX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA2OTUpCituaWwgKQorKCFwYWlyICAidHlwZXNfdXNlZF9ieV92YXJzX2hhc2giCisoIXR5cGUgYWxyZWFkeV9zZWVuIDE0MTEpCisKKyghc3JjZmlsZWxvYyAgImZ1bmN0aW9uLmgiIDY4NykKKworKCFvcHRpb25zIAorKCFvcHRpb24gcGFyYW1faXMgdHlwZSAKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTIzNykKKykKKykKKykKKyghcGFpciAgImNmdW4iCisoIXR5cGUgYWxyZWFkeV9zZWVuIDM4NykKKworKCFzcmNmaWxlbG9jICAiZnVuY3Rpb24uaCIgNjYzKQorbmlsICkKKyghcGFpciAgInhfcnRsIgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMjM5KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA0NzEpCituaWwgKQorKCFwYWlyICAicmVnbm9fcmVnX3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM3KQorCisoIXNyY2ZpbGVsb2MgICJmdW5jdGlvbi5oIiA5MykKKworKCFvcHRpb25zIAorKCFvcHRpb24gbGVuZ3RoIHN0cmluZyAgImNydGwtPmVtaXQueF9yZWdfcnR4X25vIikKKykKKykKKyghcGFpciAgImRlZmF1bHRfdGFyZ2V0X2xpYmZ1bmNzIgorKCF0eXBlIGFscmVhZHlfc2VlbiA4NjMpCisKKyghc3JjZmlsZWxvYyAgImxpYmZ1bmNzLmgiIDczKQorbmlsICkKKyghcGFpciAgImJ1aWx0aW5faW5mbyIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTI2NikKKworKCFzcmNmaWxlbG9jICAidHJlZS5oIiA2NDcwKQorbmlsICkKKyghcGFpciAgImN1cnJlbnRfZnVuY3Rpb25fZnVuY19iZWdpbl9sYWJlbCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMzYpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNTUyMCkKK25pbCApCisoIXBhaXIgICJjdXJyZW50X2Z1bmN0aW9uX2RlY2wiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNTUxNykKK25pbCApCisoIXBhaXIgICJzaXpldHlwZV90YWIiCisoIXR5cGUgYXJyYXkgMTQ2MSBuaWwgIGdjX3VzZWQgIihpbnQpIHN0a190eXBlX2tpbmRfbGFzdCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNTIxMikKK25pbCApCisoIXBhaXIgICJpbnRlZ2VyX3R5cGVzIgorKCF0eXBlIGFycmF5IDE0NjIgbmlsICBnY191c2VkICJpdGtfbm9uZSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDUyMikKK25pbCApCisoIXBhaXIgICJnbG9iYWxfdHJlZXMiCisoIXR5cGUgYXJyYXkgMTQ2MyBuaWwgIGdjX3VzZWQgIlRJX01BWCIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCispCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgNDMxNSkKK25pbCApCisoIXBhaXIgICJhbGxfdHJhbnNsYXRpb25fdW5pdHMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDQ1KQorCisoIXNyY2ZpbGVsb2MgICJ0cmVlLmgiIDM1MzQpCituaWwgKQorKCFwYWlyICAiYWxpYXNfcGFpcnMiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEyODgpCisKKyghc3JjZmlsZWxvYyAgInRyZWUuaCIgMjUxKQorbmlsICkKKyghcGFpciAgInN0YWNrX2xpbWl0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjcyNykKK25pbCApCisoIXBhaXIgICJkZWZhdWx0X3RhcmdldF9ydGwiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDg1MCkKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIzMDEpCituaWwgKQorKCFwYWlyICAic2ltcGxlX3JldHVybl9ydHgiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIyMDIpCituaWwgKQorKCFwYWlyICAicmV0X3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjIwMSkKK25pbCApCisoIXBhaXIgICJjYzBfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMjAwKQorbmlsICkKKyghcGFpciAgInBjX3J0eCIKKyghdHlwZSBhbHJlYWR5X3NlZW4gMTM2KQorCisoIXNyY2ZpbGVsb2MgICJydGwuaCIgMjE5OSkKK25pbCApCisoIXBhaXIgICJjb25zdF90aW55X3J0eCIKKyghdHlwZSBhcnJheSAxNDY0IG5pbCAgZ2NfdXNlZCAiNCIgCisoIXR5cGUgYXJyYXkgMTQ2NSBuaWwgIGdjX3VzZWQgIihpbnQpIE1BWF9NQUNISU5FX01PREUiIAorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCispCispCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMTg2KQorbmlsICkKKyghcGFpciAgImNvbnN0X3RydWVfcnR4IgorKCF0eXBlIGFscmVhZHlfc2VlbiAxMzYpCisKKyghc3JjZmlsZWxvYyAgInJ0bC5oIiAyMTg0KQorbmlsICkKKyghcGFpciAgImNvbnN0X2ludF9ydHgiCisoIXR5cGUgYXJyYXkgMTQ2NiBuaWwgIGdjX3VzZWQgIk1BWF9TQVZFRF9DT05TVF9JTlQgKiAyICsgMSIgCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzNikKKykKKworKCFzcmNmaWxlbG9jICAicnRsLmgiIDIxNzgpCituaWwgKQorKCFwYWlyICAiZ2Nvdl9mbl9pbmZvX3B0cl90eXBlIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjb3ZlcmFnZS5jIiAxMDMpCituaWwgKQorKCFwYWlyICAiZ2Nvdl9mbl9pbmZvX3R5cGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDUpCisKKyghc3JjZmlsZWxvYyAgImNvdmVyYWdlLmMiIDEwMikKK25pbCApCisoIXBhaXIgICJnY292X2luZm9fdmFyIgorKCF0eXBlIGFscmVhZHlfc2VlbiA1KQorCisoIXNyY2ZpbGVsb2MgICJjb3ZlcmFnZS5jIiAxMDEpCituaWwgKQorKCFwYWlyICAiZm5fdl9jdHJzIgorKCF0eXBlIGFycmF5IDE0NjcgbmlsICBnY191c2VkICJHQ09WX0NPVU5URVJTIiAKKyghdHlwZSBhbHJlYWR5X3NlZW4gNSkKKykKKworKCFzcmNmaWxlbG9jICAiY292ZXJhZ2UuYyIgOTYpCituaWwgKQorKCFwYWlyICAiZnVuY3Rpb25zX2hlYWQiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMDYpCisKKyghc3JjZmlsZWxvYyAgImNvdmVyYWdlLmMiIDg3KQorbmlsICkKKyghcGFpciAgImxpbmVfdGFibGUiCisoIXR5cGUgYWxyZWFkeV9zZWVuIDEzMzUpCisKKyghc3JjZmlsZWxvYyAgImlucHV0LmgiIDI2KQorbmlsICkpCisKKyghZW5kZmlsZSkKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9hZGEvZ2NjLWludGVyZmFjZS9hZGEtdHJlZS5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYWRhL2djYy1pbnRlcmZhY2UvYWRhLXRyZWUuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTY3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYWRhL2djYy1pbnRlcmZhY2UvYWRhLXRyZWUuZGVmCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgR05BVCBDT01QSUxFUiBDT01QT05FTlRTICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgR05BVC1TUEVDSUZJQyBHQ0MgVFJFRSBDT0RFUyAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTItMjAwOSwgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBHTkFUIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuICByZWRpc3RyaWJ1dGUgaXQgIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgKgorICogdGVybXMgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgIGJ5IHRoZSBGcmVlIFNvZnQtICoKKyAqIHdhcmUgIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAzLCAgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyLSAqCisgKiBzaW9uLiAgR05BVCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSC0gKgorICogT1VUIEFOWSBXQVJSQU5UWTsgIHdpdGhvdXQgZXZlbiB0aGUgIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICoKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAqCisgKiBmb3IgIG1vcmUgZGV0YWlscy4gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsICAgKgorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUgICAgICAgICoKKyAqIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogR05BVCB3YXMgb3JpZ2luYWxseSBkZXZlbG9wZWQgIGJ5IHRoZSBHTkFUIHRlYW0gYXQgIE5ldyBZb3JrIFVuaXZlcnNpdHkuICoKKyAqIEV4dGVuc2l2ZSBjb250cmlidXRpb25zIHdlcmUgcHJvdmlkZWQgYnkgQWRhIENvcmUgVGVjaG5vbG9naWVzIEluYy4gICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEEgdHlwZSB0aGF0IGlzIGFuIHVuY29uc3RyYWluZWQgYXJyYXkuICBUaGlzIG5vZGUgaXMgbmV2ZXIgcGFzc2VkIHRvIEdDQy4KKyAgIFRSRUVfVFlQRSBpcyB0aGUgdHlwZSBvZiB0aGUgZmF0IHBvaW50ZXIgYW5kIFRZUEVfT0JKRUNUX1JFQ09SRF9UWVBFIGlzCisgICB0aGUgdHlwZSBvZiBhIHJlY29yZCBjb250YWluaW5nIHRoZSB0ZW1wbGF0ZSBhbmQgZGF0YS4gICovCitERUZUUkVFQ09ERSAoVU5DT05TVFJBSU5FRF9BUlJBWV9UWVBFLCAidW5jb25zdHJhaW5lZF9hcnJheV90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIEEgcmVmZXJlbmNlIHRvIGFuIHVuY29uc3RyYWluZWQgYXJyYXkuICBUaGlzIG5vZGUgb25seSBleGlzdHMgYXMgYW4KKyAgIGludGVybWVkaWF0ZSBub2RlIGR1cmluZyB0aGUgdHJhbnNsYXRpb24gb2YgYSBHTkFUIHRyZWUgdG8gYSBHQ0MgdHJlZTsKKyAgIGl0IGlzIG5ldmVyIHBhc3NlZCB0byBHQ0MuICBUaGUgb25seSBmaWVsZCB1c2VkIGlzIG9wZXJhbmQgMCwgd2hpY2gKKyAgIGlzIHRoZSBmYXQgcG9pbnRlciBvYmplY3QuICAqLworREVGVFJFRUNPREUgKFVOQ09OU1RSQUlORURfQVJSQVlfUkVGLCAidW5jb25zdHJhaW5lZF9hcnJheV9yZWYiLAorCSAgICAgdGNjX3JlZmVyZW5jZSwgMSkKKworLyogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgYW4gUlRMIHN1aXRhYmxlIGZvciBpdHMgdHlwZS4gIE9wZXJhbmQgMAorICAgaXMgYW4gZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgZm9yIHNpZGUgZWZmZWN0cyBvbmx5LiAgKi8KK0RFRlRSRUVDT0RFIChOVUxMX0VYUFIsICJudWxsX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogU2FtZSBhcyBQTFVTX0VYUFIsIGV4Y2VwdCB0aGF0IG5vIG1vZHVsbyByZWR1Y3Rpb24gaXMgYXBwbGllZC4KKyAgIFRoaXMgaXMgdXNlZCBmb3IgbG9vcHMgYW5kIG5ldmVyIHNob3dzIHVwIGluIHRoZSB0cmVlLiAgKi8KK0RFRlRSRUVDT0RFIChQTFVTX05PTU9EX0VYUFIsICJwbHVzX25vbW9kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBTYW1lIGFzIE1JTlVTX0VYUFIsIGV4Y2VwdCB0aGF0IG5vIG1vZHVsbyByZWR1Y3Rpb24gaXMgYXBwbGllZC4KKyAgIFRoaXMgaXMgdXNlZCBmb3IgbG9vcHMgYW5kIG5ldmVyIHNob3dzIHVwIGluIHRoZSB0cmVlLiAgKi8KK0RFRlRSRUVDT0RFIChNSU5VU19OT01PRF9FWFBSLCAibWludXNfbm9tb2RfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIFNhbWUgYXMgQUREUl9FWFBSLCBleGNlcHQgdGhhdCBpZiB0aGUgb3BlcmFuZCByZXByZXNlbnRzIGEgYml0IGZpZWxkLAorICAgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBieXRlIGNvbnRhaW5pbmcgdGhlIGJpdC4gIFRoaXMgaXMgdXNlZAorICAgZm9yIHRoZSBBZGRyZXNzIGF0dHJpYnV0ZSBhbmQgbmV2ZXIgc2hvd3MgdXAgaW4gdGhlIHRyZWUuICAqLworREVGVFJFRUNPREUgKEFUVFJfQUREUl9FWFBSLCAiYXR0cl9hZGRyX2V4cHIiLCB0Y2NfcmVmZXJlbmNlLCAxKQorCisvKiBIZXJlIGFyZSB0aGUgdHJlZSBjb2RlcyBmb3IgdGhlIHN0YXRlbWVudCB0eXBlcyBrbm93biB0byBBZGEuICBUaGVzZQorICAgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSB0byBhbGxvdyBJU19BREFfU1RNVCB0byB3b3JrLiAgKi8KKworLyogVGhpcyBpcyBob3cgcmVjb3JkX2NvZGVfcG9zaXRpb24gYW5kIGluc2VydF9jb2RlX2ZvciB3b3JrLiAgVGhlIGZvcm1lcgorICAgbWFrZXMgdGhpcyB0cmVlIG5vZGUsIHdob3NlIG9wZXJhbmQgaXMgYSBzdGF0ZW1lbnQuICBUaGUgbGF0dGVyIGluc2VydHMKKyAgIHRoZSBhY3R1YWwgc3RhdGVtZW50cyBpbnRvIHRoaXMgbm9kZS4gIEdpbXBsaWZpY2F0aW9uIGNvbnNpc3RzIG9mCisgICBqdXN0IHJldHVybmluZyB0aGUgaW5uZXIgc3RhdGVtZW50LiAgKi8KK0RFRlRSRUVDT0RFIChTVE1UX1NUTVQsICJzdG10X3N0bXQiLCB0Y2Nfc3RhdGVtZW50LCAxKQorCisvKiBBIGxvb3AuICBMT09QX1NUTVRfQ09ORCBpcyB0aGUgdGVzdCB0byBleGl0IHRoZSBsb29wLiAgTE9PUF9TVE1UX1VQREFURQorICAgaXMgdGhlIHN0YXRlbWVudCB0byB1cGRhdGUgdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGF0IHRoZSBjb250aW51ZQorICAgcG9pbnQuICBMT09QX1NUTVRfQk9EWSBhcmUgdGhlIHN0YXRlbWVudHMgaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AuICBBbmQKKyAgIExPT1BfU1RNVF9MQUJFTCBwb2ludHMgdG8gdGhlIExBQkVMX0RFQ0wgb2YgdGhlIGVuZCBsYWJlbCBvZiB0aGUgbG9vcC4gICovCitERUZUUkVFQ09ERSAoTE9PUF9TVE1ULCAibG9vcF9zdG10IiwgdGNjX3N0YXRlbWVudCwgNCkKKworLyogQ29uZGl0aW9uYWxseSBleGl0IGEgbG9vcC4gIEVYSVRfU1RNVF9DT05EIGlzIHRoZSBjb25kaXRpb24sIHdoaWNoLCBpZgorICAgdHJ1ZSwgd2lsbCBjYXVzZSB0aGUgbG9vcCB0byBiZSBleGl0ZWQuICBJZiBubyBjb25kaXRpb24gaXMgc3BlY2lmaWVkLAorICAgdGhlIGxvb3AgaXMgdW5jb25kaXRpb25hbGx5IGV4aXRlZC4gIEVYSVRfU1RNVF9MQUJFTCBpcyB0aGUgZW5kIGxhYmVsCisgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb29wIHRvIGV4aXQuICAqLworREVGVFJFRUNPREUgKEVYSVRfU1RNVCwgImV4aXRfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDIpCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYWxpYXMuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9hbGlhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzM5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYWxpYXMuaApAQCAtMCwwICsxLDUxIEBACisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgZnJvbSBhbGlhcy5jCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0FMSUFTX0gKKyNkZWZpbmUgR0NDX0FMSUFTX0gKKworLyogVGhlIHR5cGUgb2YgYW4gYWxpYXMgc2V0LiAgQ29kZSBjdXJyZW50bHkgYXNzdW1lcyB0aGF0IHZhcmlhYmxlcyBvZgorICAgdGhpcyB0eXBlIGNhbiB0YWtlIHRoZSB2YWx1ZXMgMCAodGhlIGFsaWFzIHNldCB3aGljaCBhbGlhc2VzCisgICBldmVyeXRoaW5nKSBhbmQgLTEgKHNvbWV0aW1lcyBpbmRpY2F0aW5nIHRoYXQgdGhlIGFsaWFzIHNldCBpcworICAgdW5rbm93biwgc29tZXRpbWVzIGluZGljYXRpbmcgYSBtZW1vcnkgYmFycmllcikgYW5kIC0yIChpbmRpY2F0aW5nCisgICB0aGF0IHRoZSBhbGlhcyBzZXQgc2hvdWxkIGJlIHNldCB0byBhIHVuaXF1ZSB2YWx1ZSBidXQgaGFzIG5vdCBiZWVuCisgICBzZXQgeWV0KS4gICovCit0eXBlZGVmIGludCBhbGlhc19zZXRfdHlwZTsKKworZXh0ZXJuIGFsaWFzX3NldF90eXBlIG5ld19hbGlhc19zZXQgKHZvaWQpOworZXh0ZXJuIGFsaWFzX3NldF90eXBlIGdldF9hbGlhc19zZXQgKHRyZWUpOworZXh0ZXJuIGFsaWFzX3NldF90eXBlIGdldF9kZXJlZl9hbGlhc19zZXQgKHRyZWUpOworZXh0ZXJuIGFsaWFzX3NldF90eXBlIGdldF92YXJhcmdzX2FsaWFzX3NldCAodm9pZCk7CitleHRlcm4gYWxpYXNfc2V0X3R5cGUgZ2V0X2ZyYW1lX2FsaWFzX3NldCAodm9pZCk7CitleHRlcm4gYm9vbCBjb21wb25lbnRfdXNlc19wYXJlbnRfYWxpYXNfc2V0IChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGFsaWFzX3NldF9zdWJzZXRfb2YgKGFsaWFzX3NldF90eXBlLCBhbGlhc19zZXRfdHlwZSk7CitleHRlcm4gdm9pZCByZWNvcmRfYWxpYXNfc3Vic2V0IChhbGlhc19zZXRfdHlwZSwgYWxpYXNfc2V0X3R5cGUpOworZXh0ZXJuIHZvaWQgcmVjb3JkX2NvbXBvbmVudF9hbGlhc2VzICh0cmVlKTsKK2V4dGVybiBpbnQgYWxpYXNfc2V0c19jb25mbGljdF9wIChhbGlhc19zZXRfdHlwZSwgYWxpYXNfc2V0X3R5cGUpOworZXh0ZXJuIGludCBhbGlhc19zZXRzX211c3RfY29uZmxpY3RfcCAoYWxpYXNfc2V0X3R5cGUsIGFsaWFzX3NldF90eXBlKTsKK2V4dGVybiBpbnQgb2JqZWN0c19tdXN0X2NvbmZsaWN0X3AgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBub25vdmVybGFwcGluZ19tZW1yZWZzX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4LCBib29sKTsKKworLyogVGhpcyBhbGlhcyBzZXQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgYSBtZW1vcnkgdG8gY29uZmxpY3Qgd2l0aCBhbGwKKyAgIG90aGVyIG1lbW9yaWVzLCBjcmVhdGluZyBhIGJhcnJpZXIgYWNyb3NzIHdoaWNoIG5vIG1lbW9yeSByZWZlcmVuY2UKKyAgIGNhbiBtb3ZlLiAgTm90ZSB0aGF0IHRoZXJlIGFyZSBvdGhlciBsZWdhY3kgd2F5cyB0byBjcmVhdGUgc3VjaAorICAgbWVtb3J5IGJhcnJpZXJzLCBpbmNsdWRpbmcgYW4gYWRkcmVzcyBvZiBTQ1JBVENILiAgKi8KKyNkZWZpbmUgQUxJQVNfU0VUX01FTU9SWV9CQVJSSUVSCSgoYWxpYXNfc2V0X3R5cGUpIC0xKQorCisjZW5kaWYgLyogR0NDX0FMSUFTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9hbGwtdHJlZS5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYWxsLXRyZWUuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMmRhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYWxsLXRyZWUuZGVmCkBAIC0wLDAgKzEsNyBAQAorI2luY2x1ZGUgInRyZWUuZGVmIgorRU5EX09GX0JBU0VfVFJFRV9DT0RFUworI2luY2x1ZGUgImMtZmFtaWx5L2MtY29tbW9uLmRlZiIKKyNpbmNsdWRlICJhZGEvZ2NjLWludGVyZmFjZS9hZGEtdHJlZS5kZWYiCisjaW5jbHVkZSAiY3AvY3AtdHJlZS5kZWYiCisjaW5jbHVkZSAiamF2YS9qYXZhLXRyZWUuZGVmIgorI2luY2x1ZGUgIm9iamMvb2JqYy10cmVlLmRlZiIKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9hbGxvYy1wb29sLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYWxsb2MtcG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDYxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYWxsb2MtcG9vbC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qIEZ1bmN0aW9ucyB0byBzdXBwb3J0IGEgcG9vbCBvZiBhbGxvY2F0YWJsZSBvYmplY3RzCisgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IERhbmllbCBCZXJsaW4gPGRhbkBjZ3NvZnR3YXJlLmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisjaWZuZGVmIEFMTE9DX1BPT0xfSAorI2RlZmluZSBBTExPQ19QT09MX0gKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIEFMTE9DX1BPT0xfSURfVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgYWxsb2NfcG9vbF9saXN0X2RlZgoreworICBzdHJ1Y3QgYWxsb2NfcG9vbF9saXN0X2RlZiAqbmV4dDsKK30KKyAqYWxsb2NfcG9vbF9saXN0OworCit0eXBlZGVmIHN0cnVjdCBhbGxvY19wb29sX2RlZgoreworICBjb25zdCBjaGFyICpuYW1lOworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworICBBTExPQ19QT09MX0lEX1RZUEUgaWQ7CisjZW5kaWYKKyAgc2l6ZV90IGVsdHNfcGVyX2Jsb2NrOworCisgIC8qIFRoZXNlIGFyZSB0aGUgZWxlbWVudHMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIGF0IGxlYXN0IG9uY2UgYW5kIGZyZWVkLiAgKi8KKyAgYWxsb2NfcG9vbF9saXN0IHJldHVybmVkX2ZyZWVfbGlzdDsKKworICAvKiBUaGVzZSBhcmUgdGhlIGVsZW1lbnRzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gYWxsb2NhdGVkIG91dCBvZgorICAgICB0aGUgbGFzdCBibG9jayBvYnRhaW5lZCBmcm9tIFhORVdWRUMuICAqLworICBjaGFyKiB2aXJnaW5fZnJlZV9saXN0OworCisgIC8qIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHZpcmdpbl9mcmVlX2xpc3QgdGhhdCBjYW4gYmUKKyAgICAgYWxsb2NhdGVkIGJlZm9yZSBuZWVkaW5nIGFub3RoZXIgYmxvY2suICAqLworICBzaXplX3QgdmlyZ2luX2VsdHNfcmVtYWluaW5nOworCisgIHNpemVfdCBlbHRzX2FsbG9jYXRlZDsKKyAgc2l6ZV90IGVsdHNfZnJlZTsKKyAgc2l6ZV90IGJsb2Nrc19hbGxvY2F0ZWQ7CisgIGFsbG9jX3Bvb2xfbGlzdCBibG9ja19saXN0OworICBzaXplX3QgYmxvY2tfc2l6ZTsKKyAgc2l6ZV90IGVsdF9zaXplOworfQorICphbGxvY19wb29sOworCitleHRlcm4gYWxsb2NfcG9vbCBjcmVhdGVfYWxsb2NfcG9vbCAoY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCk7CitleHRlcm4gdm9pZCBmcmVlX2FsbG9jX3Bvb2wgKGFsbG9jX3Bvb2wpOworZXh0ZXJuIHZvaWQgZW1wdHlfYWxsb2NfcG9vbCAoYWxsb2NfcG9vbCk7CitleHRlcm4gdm9pZCBmcmVlX2FsbG9jX3Bvb2xfaWZfZW1wdHkgKGFsbG9jX3Bvb2wgKik7CitleHRlcm4gdm9pZCAqcG9vbF9hbGxvYyAoYWxsb2NfcG9vbCkgQVRUUklCVVRFX01BTExPQzsKK2V4dGVybiB2b2lkIHBvb2xfZnJlZSAoYWxsb2NfcG9vbCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGR1bXBfYWxsb2NfcG9vbF9zdGF0aXN0aWNzICh2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2Fuc2lkZWNsLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYW5zaWRlY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGY0YTVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2Fuc2lkZWNsLmgKQEAgLTAsMCArMSw0NDEgQEAKKy8qIEFOU0kgYW5kIHRyYWRpdGlvbmFsIEMgY29tcGF0YWJpbGl0eSBtYWNyb3MKKyAgIENvcHlyaWdodCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorICAgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSwgMjAxMAorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBBTlNJIGFuZCB0cmFkaXRpb25hbCBDIGNvbXBhdGliaWxpdHkgbWFjcm9zCisKKyAgIEFOU0kgQyBpcyBhc3N1bWVkIGlmIF9fU1REQ19fIGlzICNkZWZpbmVkLgorCisgICBNYWNybwkJQU5TSSBDIGRlZmluaXRpb24JVHJhZGl0aW9uYWwgQyBkZWZpbml0aW9uCisgICAtLS0tLQkJLS0tLSAtIC0tLS0tLS0tLS0JLS0tLS0tLS0tLS0gLSAtLS0tLS0tLS0tCisgICBBTlNJX1BST1RPVFlQRVMJMQkJCW5vdCBkZWZpbmVkCisgICBQVFIJCQlgdm9pZCAqJwkJYGNoYXIgKicKKyAgIFBUUkNPTlNUCQlgdm9pZCAqY29uc3QnCQlgY2hhciAqJworICAgTE9OR19ET1VCTEUJCWBsb25nIGRvdWJsZScJCWBkb3VibGUnCisgICBjb25zdAkJbm90IGRlZmluZWQJCWAnCisgICB2b2xhdGlsZQkJbm90IGRlZmluZWQJCWAnCisgICBzaWduZWQJCW5vdCBkZWZpbmVkCQlgJworICAgVkFfU1RBUlQoYXAsIHZhcikJdmFfc3RhcnQoYXAsIHZhcikJdmFfc3RhcnQoYXApCisKKyAgIE5vdGUgdGhhdCBpdCBpcyBzYWZlIHRvIHdyaXRlICJ2b2lkIGZvbygpOyIgaW5kaWNhdGluZyBhIGZ1bmN0aW9uCisgICB3aXRoIG5vIHJldHVybiB2YWx1ZSwgaW4gYWxsIEsrUiBjb21waWxlcnMgd2UgaGF2ZSBiZWVuIGFibGUgdG8gdGVzdC4KKworICAgRm9yIGRlY2xhcmluZyBmdW5jdGlvbnMgd2l0aCBwcm90b3R5cGVzLCB3ZSBhbHNvIHByb3ZpZGUgdGhlc2U6CisKKyAgIFBBUkFNUyAoKHByb3RvdHlwZSkpCisgICAtLSBmb3IgZnVuY3Rpb25zIHdoaWNoIHRha2UgYSBmaXhlZCBudW1iZXIgb2YgYXJndW1lbnRzLiAgVXNlIHRoaXMKKyAgIHdoZW4gZGVjbGFyaW5nIHRoZSBmdW5jdGlvbi4gIFdoZW4gZGVmaW5pbmcgdGhlIGZ1bmN0aW9uLCB3cml0ZSBhCisgICBLK1Igc3R5bGUgYXJndW1lbnQgbGlzdC4gIEZvciBleGFtcGxlOgorCisJY2hhciAqc3RyY3B5IFBBUkFNUyAoKGNoYXIgKmRlc3QsIGNoYXIgKnNvdXJjZSkpOworCS4uLgorCWNoYXIgKgorCXN0cmNweSAoZGVzdCwgc291cmNlKQorCSAgICAgY2hhciAqZGVzdDsKKwkgICAgIGNoYXIgKnNvdXJjZTsKKwl7IC4uLiB9CisKKworICAgVlBBUkFNUyAoKHByb3RvdHlwZSwgLi4uKSkKKyAgIC0tIGZvciBmdW5jdGlvbnMgd2hpY2ggdGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuICBVc2UKKyAgIFBBUkFNUyB0byBkZWNsYXJlIHRoZSBmdW5jdGlvbiwgVlBBUkFNUyB0byBkZWZpbmUgaXQuICBGb3IgZXhhbXBsZToKKworCWludCBwcmludGYgUEFSQU1TICgoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKwkuLi4KKwlpbnQKKwlwcmludGYgVlBBUkFNUyAoKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSkKKwl7CisJICAgLi4uCisJfQorCisgICBGb3Igd3JpdGluZyBmdW5jdGlvbnMgd2hpY2ggdGFrZSB2YXJpYWJsZSBudW1iZXJzIG9mIGFyZ3VtZW50cywgd2UKKyAgIGFsc28gcHJvdmlkZSB0aGUgVkFfT1BFTiwgVkFfQ0xPU0UsIGFuZCBWQV9GSVhFREFSRyBtYWNyb3MuICBUaGVzZQorICAgaGlkZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBLK1IgPHZhcmFyZ3MuaD4gYW5kIEM4OSA8c3RkYXJnLmg+IG1vcmUKKyAgIHRob3JvdWdobHkgdGhhbiB0aGUgc2ltcGxlIFZBX1NUQVJUKCkgbWFjcm8gbWVudGlvbmVkIGFib3ZlLgorCisgICBWQV9PUEVOIGFuZCBWQV9DTE9TRSBhcmUgdXNlZCAqaW5zdGVhZCBvZiogdmFfc3RhcnQgYW5kIHZhX2VuZC4KKyAgIEltbWVkaWF0ZWx5IGFmdGVyIFZBX09QRU4sIHB1dCBhIHNlcXVlbmNlIG9mIFZBX0ZJWEVEQVJHIGNhbGxzCisgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBsaXN0IG9mIGZpeGVkIGFyZ3VtZW50cy4gIFRoZW4gdXNlIHZhX2FyZworICAgbm9ybWFsbHkgdG8gZ2V0IHRoZSB2YXJpYWJsZSBhcmd1bWVudHMsIG9yIHBhc3MgeW91ciB2YV9saXN0IG9iamVjdAorICAgYXJvdW5kLiAgWW91IGRvIG5vdCBkZWNsYXJlIHRoZSB2YV9saXN0IHlvdXJzZWxmOyBWQV9PUEVOIGRvZXMgaXQKKyAgIGZvciB5b3UuCisKKyAgIEhlcmUgaXMgYSBjb21wbGV0ZSBleGFtcGxlOgorCisJaW50CisJcHJpbnRmIFZQQVJBTVMgKChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpCisJeworCSAgIGludCByZXN1bHQ7CisKKwkgICBWQV9PUEVOIChhcCwgZm9ybWF0KTsKKwkgICBWQV9GSVhFREFSRyAoYXAsIGNvbnN0IGNoYXIgKiwgZm9ybWF0KTsKKworCSAgIHJlc3VsdCA9IHZmcHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXApOworCSAgIFZBX0NMT1NFIChhcCk7CisKKwkgICByZXR1cm4gcmVzdWx0OworCX0KKworCisgICBZb3UgY2FuIGRlY2xhcmUgdmFyaWFibGVzIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIFZBX09QRU4sCisgICBWQV9GSVhFREFSRyBzZXF1ZW5jZS4gIEFsc28sIFZBX09QRU4gYW5kIFZBX0NMT1NFIGFyZSB0aGUgYmVnaW5uaW5nCisgICBhbmQgZW5kIG9mIGEgYmxvY2suICBUaGV5IG11c3QgYXBwZWFyIGF0IHRoZSBzYW1lIG5lc3RpbmcgbGV2ZWwsCisgICBhbmQgYW55IHZhcmlhYmxlcyBkZWNsYXJlZCBhZnRlciBWQV9PUEVOIGdvIG91dCBvZiBzY29wZSBhdAorICAgVkFfQ0xPU0UuICBVbmZvcnR1bmF0ZWx5LCB3aXRoIGEgSytSIGNvbXBpbGVyLCB0aGF0IGluY2x1ZGVzIHRoZQorICAgYXJndW1lbnQgbGlzdC4gIFlvdSBjYW4gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgVkFfT1BFTi9WQV9DTE9TRQorICAgcGFpcnMgaW4gYSBzaW5nbGUgZnVuY3Rpb24gaW4gY2FzZSB5b3UgbmVlZCB0byB0cmF2ZXJzZSB0aGUKKyAgIGFyZ3VtZW50IGxpc3QgbW9yZSB0aGFuIG9uY2UuCisKKyAgIEZvciBlYXNlIG9mIHdyaXRpbmcgY29kZSB3aGljaCB1c2VzIEdDQyBleHRlbnNpb25zIGJ1dCBuZWVkcyB0byBiZQorICAgcG9ydGFibGUgdG8gb3RoZXIgY29tcGlsZXJzLCB3ZSBwcm92aWRlIHRoZSBHQ0NfVkVSU0lPTiBtYWNybyB0aGF0CisgICBzaW1wbGlmaWVzIHRlc3RpbmcgX19HTlVDX18gYW5kIF9fR05VQ19NSU5PUl9fIHRvZ2V0aGVyLCBhbmQgdmFyaW91cworICAgd3JhcHBlcnMgYXJvdW5kIF9fYXR0cmlidXRlX18uICBBbHNvLCBfX2V4dGVuc2lvbl9fIHdpbGwgYmUgI2RlZmluZWQKKyAgIHRvIG5vdGhpbmcgaWYgaXQgZG9lc24ndCB3b3JrLiAgU2VlIGJlbG93LgorCisgICBUaGlzIGhlYWRlciBhbHNvIGRlZmluZXMgYSBsb3Qgb2Ygb2Jzb2xldGUgbWFjcm9zOgorICAgQ09OU1QsIFZPTEFUSUxFLCBTSUdORUQsIFBST1RPLCBFWEZVTiwgREVGVU4sIERFRlVOX1ZPSUQsCisgICBBTkQsIERPVFMsIE5PQVJHUy4gIERvbid0IHVzZSB0aGVtLiAgKi8KKworI2lmbmRlZglfQU5TSURFQ0xfSAorI2RlZmluZSBfQU5TSURFQ0xfSAkxCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogRXZlcnkgc291cmNlIGZpbGUgaW5jbHVkZXMgdGhpcyBmaWxlLAorICAgc28gdGhleSB3aWxsIGFsbCBnZXQgdGhlIHN3aXRjaCBmb3IgbGludC4gICovCisvKiBMSU5UTElCUkFSWSAqLworCisvKiBVc2luZyBNQUNSTyh4LHkpIGluIGNwcCAjaWYgY29uZGl0aW9uYWxzIGRvZXMgbm90IHdvcmsgd2l0aCBzb21lCisgICBvbGRlciBwcmVwcm9jZXNzb3JzLiAgVGh1cyB3ZSBjYW4ndCBkZWZpbmUgc29tZXRoaW5nIGxpa2UgdGhpczoKKworI2RlZmluZSBIQVZFX0dDQ19WRVJTSU9OKE1BSk9SLCBNSU5PUikgXAorICAoX19HTlVDX18gPiAoTUFKT1IpIHx8IChfX0dOVUNfXyA9PSAoTUFKT1IpICYmIF9fR05VQ19NSU5PUl9fID49IChNSU5PUikpKQorCithbmQgdGhlbiB0ZXN0ICIjaWYgSEFWRV9HQ0NfVkVSU0lPTigyLDcpIi4KKworU28gaW5zdGVhZCB3ZSB1c2UgdGhlIG1hY3JvIGJlbG93IGFuZCB0ZXN0IGl0IGFnYWluc3Qgc3BlY2lmaWMgdmFsdWVzLiAgKi8KKworLyogVGhpcyBtYWNybyBzaW1wbGlmaWVzIHRlc3Rpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgZ2NjLCBhbmQgaWYgaXQKKyAgIGlzIG9mIGEgcGFydGljdWxhciBtaW5pbXVtIHZlcnNpb24uIChCb3RoIG1ham9yICYgbWlub3IgbnVtYmVycyBhcmUKKyAgIHNpZ25pZmljYW50LikgIFRoaXMgbWFjcm8gd2lsbCBldmFsdWF0ZSB0byAwIGlmIHdlIGFyZSBub3QgdXNpbmcKKyAgIGdjYyBhdCBhbGwuICAqLworI2lmbmRlZiBHQ0NfVkVSU0lPTgorI2RlZmluZSBHQ0NfVkVSU0lPTiAoX19HTlVDX18gKiAxMDAwICsgX19HTlVDX01JTk9SX18pCisjZW5kaWYgLyogR0NDX1ZFUlNJT04gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkIChfQUlYKSB8fCAoZGVmaW5lZCAoX19taXBzKSAmJiBkZWZpbmVkIChfU1lTVFlQRV9TVlI0KSkgfHwgZGVmaW5lZChfV0lOMzIpCisvKiBBbGwga25vd24gQUlYIGNvbXBpbGVycyBpbXBsZW1lbnQgdGhlc2UgdGhpbmdzIChidXQgZG9uJ3QgYWx3YXlzCisgICBkZWZpbmUgX19TVERDX18pLiAgVGhlIFJJU0MvT1MgTUlQUyBjb21waWxlciBkZWZpbmVzIHRoZXNlIHRoaW5ncworICAgaW4gU1ZSNCBtb2RlLCBidXQgZG9lcyBub3QgZGVmaW5lIF9fU1REQ19fLiAgKi8KKy8qIGVyYXh4b25AYWx1bW5pLnJpY2UuZWR1OiBUaGUgQ29tcGFxIEMrKyBjb21waWxlciwgdW5saWtlIG1hbnkgb3RoZXIKKyAgIEMrKyBjb21waWxlcnMsIGRvZXMgbm90IGRlZmluZSBfX1NURENfXywgdGhvdWdoIGl0IGFjdHMgYXMgaWYgdGhpcworICAgd2FzIHNvLiAoVmVyaWZpZWQgdmVyc2lvbnM6IDUuNywgNi4yLCA2LjMsIDYuNSkgKi8KKworI2RlZmluZSBBTlNJX1BST1RPVFlQRVMJMQorI2RlZmluZSBQVFIJCXZvaWQgKgorI2RlZmluZSBQVFJDT05TVAl2b2lkICpjb25zdAorI2RlZmluZSBMT05HX0RPVUJMRQlsb25nIGRvdWJsZQorCisvKiBQQVJBTVMgaXMgb2Z0ZW4gZGVmaW5lZCBlbHNld2hlcmUgKGUuZy4gYnkgbGliaW50bC5oKSwgc28gd3JhcCBpdCBpbgorICAgYSAjaWZuZGVmLiAgKi8KKyNpZm5kZWYgUEFSQU1TCisjZGVmaW5lIFBBUkFNUyhBUkdTKQkJQVJHUworI2VuZGlmCisKKyNkZWZpbmUgVlBBUkFNUyhBUkdTKQkJQVJHUworI2RlZmluZSBWQV9TVEFSVChWQV9MSVNULCBWQVIpCXZhX3N0YXJ0KFZBX0xJU1QsIFZBUikKKworLyogdmFyaWFkaWMgZnVuY3Rpb24gaGVscGVyIG1hY3JvcyAqLworLyogInN0cnVjdCBRZG15IiBzd2FsbG93cyB0aGUgc2VtaWNvbG9uIGFmdGVyIFZBX09QRU4vVkFfRklYRURBUkcncworICAgdXNlIHdpdGhvdXQgaW5oaWJpdGluZyBmdXJ0aGVyIGRlY2xzIGFuZCB3aXRob3V0IGRlY2xhcmluZyBhbgorICAgYWN0dWFsIHZhcmlhYmxlLiAgKi8KKyNkZWZpbmUgVkFfT1BFTihBUCwgVkFSKQl7IHZhX2xpc3QgQVA7IHZhX3N0YXJ0KEFQLCBWQVIpOyB7IHN0cnVjdCBRZG15CisjZGVmaW5lIFZBX0NMT1NFKEFQKQkJfSB2YV9lbmQoQVApOyB9CisjZGVmaW5lIFZBX0ZJWEVEQVJHKEFQLCBULCBOKQlzdHJ1Y3QgUWRteQorIAorI3VuZGVmIGNvbnN0CisjdW5kZWYgdm9sYXRpbGUKKyN1bmRlZiBzaWduZWQKKworLyogaW5saW5lIHJlcXVpcmVzIHNwZWNpYWwgdHJlYXRtZW50OyBpdCdzIGluIEM5OSwgYW5kIEdDQyA+PTIuNyBzdXBwb3J0cworICAgaXQgdG9vLCBidXQgaXQncyBub3QgaW4gQzg5LiAgKi8KKyN1bmRlZiBpbmxpbmUKKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgKGRlZmluZWQoX19TVU5QUk9fQykgJiYgZGVmaW5lZChfX0M5OUZFQVRVUkVTX18pKQorLyogaXQncyBhIGtleXdvcmQgKi8KKyNlbHNlCisjIGlmIEdDQ19WRVJTSU9OID49IDIwMDcKKyMgIGRlZmluZSBpbmxpbmUgX19pbmxpbmVfXyAgIC8qIF9faW5saW5lX18gcHJldmVudHMgLXBlZGFudGljIHdhcm5pbmdzICovCisjIGVsc2UKKyMgIGRlZmluZSBpbmxpbmUgIC8qIG5vdGhpbmcgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGVzZSBhcmUgb2Jzb2xldGUuICBEbyBub3QgdXNlLiAgKi8KKyNpZm5kZWYgSU5fR0NDCisjZGVmaW5lIENPTlNUCQljb25zdAorI2RlZmluZSBWT0xBVElMRQl2b2xhdGlsZQorI2RlZmluZSBTSUdORUQJCXNpZ25lZAorCisjZGVmaW5lIFBST1RPKHR5cGUsIG5hbWUsIGFyZ2xpc3QpCXR5cGUgbmFtZSBhcmdsaXN0CisjZGVmaW5lIEVYRlVOKG5hbWUsIHByb3RvKQkJbmFtZSBwcm90bworI2RlZmluZSBERUZVTihuYW1lLCBhcmdsaXN0LCBhcmdzKQluYW1lKGFyZ3MpCisjZGVmaW5lIERFRlVOX1ZPSUQobmFtZSkJCW5hbWUodm9pZCkKKyNkZWZpbmUgQU5ECQksCisjZGVmaW5lIERPVFMJCSwgLi4uCisjZGVmaW5lIE5PQVJHUwkJdm9pZAorI2VuZGlmIC8qICEgSU5fR0NDICovCisKKyNlbHNlCS8qIE5vdCBBTlNJIEMuICAqLworCisjdW5kZWYgIEFOU0lfUFJPVE9UWVBFUworI2RlZmluZSBQVFIJCWNoYXIgKgorI2RlZmluZSBQVFJDT05TVAlQVFIKKyNkZWZpbmUgTE9OR19ET1VCTEUJZG91YmxlCisKKyNkZWZpbmUgUEFSQU1TKGFyZ3MpCQkoKQorI2RlZmluZSBWUEFSQU1TKGFyZ3MpCQkodmFfYWxpc3QpIHZhX2RjbAorI2RlZmluZSBWQV9TVEFSVCh2YV9saXN0LCB2YXIpCXZhX3N0YXJ0KHZhX2xpc3QpCisKKyNkZWZpbmUgVkFfT1BFTihBUCwgVkFSKQkJeyB2YV9saXN0IEFQOyB2YV9zdGFydChBUCk7IHsgc3RydWN0IFFkbXkKKyNkZWZpbmUgVkFfQ0xPU0UoQVApCQkJfSB2YV9lbmQoQVApOyB9CisjZGVmaW5lIFZBX0ZJWEVEQVJHKEFQLCBUWVBFLCBOQU1FKQlUWVBFIE5BTUUgPSB2YV9hcmcoQVAsIFRZUEUpCisKKy8qIHNvbWUgc3lzdGVtcyBkZWZpbmUgdGhlc2UgaW4gaGVhZGVyIGZpbGVzIGZvciBub24tYW5zaSBtb2RlICovCisjdW5kZWYgY29uc3QKKyN1bmRlZiB2b2xhdGlsZQorI3VuZGVmIHNpZ25lZAorI3VuZGVmIGlubGluZQorI2RlZmluZSBjb25zdAorI2RlZmluZSB2b2xhdGlsZQorI2RlZmluZSBzaWduZWQKKyNkZWZpbmUgaW5saW5lCisKKyNpZm5kZWYgSU5fR0NDCisjZGVmaW5lIENPTlNUCisjZGVmaW5lIFZPTEFUSUxFCisjZGVmaW5lIFNJR05FRAorCisjZGVmaW5lIFBST1RPKHR5cGUsIG5hbWUsIGFyZ2xpc3QpCXR5cGUgbmFtZSAoKQorI2RlZmluZSBFWEZVTihuYW1lLCBwcm90bykJCW5hbWUoKQorI2RlZmluZSBERUZVTihuYW1lLCBhcmdsaXN0LCBhcmdzKQluYW1lIGFyZ2xpc3QgYXJnczsKKyNkZWZpbmUgREVGVU5fVk9JRChuYW1lKQkJbmFtZSgpCisjZGVmaW5lIEFORAkJOworI2RlZmluZSBET1RTCisjZGVmaW5lIE5PQVJHUworI2VuZGlmIC8qICEgSU5fR0NDICovCisKKyNlbmRpZgkvKiBBTlNJIEMuICAqLworCisvKiBEZWZpbmUgbWFjcm9zIGZvciBzb21lIGdjYyBhdHRyaWJ1dGVzLiAgVGhpcyBwZXJtaXRzIHVzIHRvIHVzZSB0aGUKKyAgIG1hY3JvcyBmcmVlbHksIGFuZCBrbm93IHRoYXQgdGhleSB3aWxsIGNvbWUgaW50byBwbGF5IGZvciB0aGUKKyAgIHZlcnNpb24gb2YgZ2NjIGluIHdoaWNoIHRoZXkgYXJlIHN1cHBvcnRlZC4gICovCisKKyNpZiAoR0NDX1ZFUlNJT04gPCAyMDA3KQorIyBkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQorI2VuZGlmCisKKy8qIEF0dHJpYnV0ZSBfX21hbGxvY19fIG9uIGZ1bmN0aW9ucyB3YXMgdmFsaWQgYXMgb2YgZ2NjIDIuOTYuICovCisjaWZuZGVmIEFUVFJJQlVURV9NQUxMT0MKKyMgaWYgKEdDQ19WRVJTSU9OID49IDIwOTYpCisjICBkZWZpbmUgQVRUUklCVVRFX01BTExPQyBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpCisjIGVsc2UKKyMgIGRlZmluZSBBVFRSSUJVVEVfTUFMTE9DCisjIGVuZGlmIC8qIEdOVUMgPj0gMi45NiAqLworI2VuZGlmIC8qIEFUVFJJQlVURV9NQUxMT0MgKi8KKworLyogQXR0cmlidXRlcyBvbiBsYWJlbHMgd2VyZSB2YWxpZCBhcyBvZiBnY2MgMi45MyBhbmQgZysrIDQuNS4gIEZvcgorICAgZysrIGFuIGF0dHJpYnV0ZSBvbiBhIGxhYmVsIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzZW1pY29sb24uICAqLworI2lmbmRlZiBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMCisjIGlmbmRlZiBfX2NwbHVzcGx1cworIyAgaWYgR0NDX1ZFUlNJT04gPj0gMjA5MworIyAgIGRlZmluZSBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMIEFUVFJJQlVURV9VTlVTRUQKKyMgIGVsc2UKKyMgICBkZWZpbmUgQVRUUklCVVRFX1VOVVNFRF9MQUJFTAorIyAgZW5kaWYKKyMgZWxzZQorIyAgaWYgR0NDX1ZFUlNJT04gPj0gNDAwNQorIyAgIGRlZmluZSBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMIEFUVFJJQlVURV9VTlVTRUQgOworIyAgZWxzZQorIyAgIGRlZmluZSBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFNpbWlsYXJseSB0byBBUkdfVU5VU0VEIGJlbG93LiAgUHJpb3IgdG8gR0NDIDMuNCwgdGhlIEMrKyBmcm9udGVuZAorICAgY291bGRuJ3QgcGFyc2UgYXR0cmlidXRlcyBwbGFjZWQgYWZ0ZXIgdGhlIGlkZW50aWZpZXIgbmFtZSwgYW5kIG5vdworICAgdGhlIGVudGlyZSBjb21waWxlciBpcyBidWlsdCB3aXRoIEMrKy4gICovCisjaWZuZGVmIEFUVFJJQlVURV9VTlVTRUQKKyNpZiBHQ0NfVkVSU0lPTiA+PSAzMDA0CisjICBkZWZpbmUgQVRUUklCVVRFX1VOVVNFRCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisjZWxzZQorI2RlZmluZSBBVFRSSUJVVEVfVU5VU0VECisjZW5kaWYKKyNlbmRpZiAvKiBBVFRSSUJVVEVfVU5VU0VEICovCisKKy8qIEJlZm9yZSBHQ0MgMy40LCB0aGUgQysrIGZyb250ZW5kIGNvdWxkbid0IHBhcnNlIGF0dHJpYnV0ZXMgcGxhY2VkIGFmdGVyIHRoZQorICAgaWRlbnRpZmllciBuYW1lLiAgKi8KKyNpZiAhIGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IChHQ0NfVkVSU0lPTiA+PSAzMDA0KQorIyBkZWZpbmUgQVJHX1VOVVNFRChOQU1FKSBOQU1FIEFUVFJJQlVURV9VTlVTRUQKKyNlbHNlIC8qICFfX2NwbHVzcGx1cyB8fCBHTlVDID49IDMuNCAqLworIyBkZWZpbmUgQVJHX1VOVVNFRChOQU1FKSBOQU1FCisjZW5kaWYgLyogIV9fY3BsdXNwbHVzIHx8IEdOVUMgPj0gMy40ICovCisKKyNpZm5kZWYgQVRUUklCVVRFX05PUkVUVVJOCisjZGVmaW5lIEFUVFJJQlVURV9OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKyNlbmRpZiAvKiBBVFRSSUJVVEVfTk9SRVRVUk4gKi8KKworLyogQXR0cmlidXRlIGBub25udWxsJyB3YXMgdmFsaWQgYXMgb2YgZ2NjIDMuMy4gICovCisjaWZuZGVmIEFUVFJJQlVURV9OT05OVUxMCisjIGlmIChHQ0NfVkVSU0lPTiA+PSAzMDAzKQorIyAgZGVmaW5lIEFUVFJJQlVURV9OT05OVUxMKG0pIF9fYXR0cmlidXRlX18gKChfX25vbm51bGxfXyAobSkpKQorIyBlbHNlCisjICBkZWZpbmUgQVRUUklCVVRFX05PTk5VTEwobSkKKyMgZW5kaWYgLyogR05VQyA+PSAzLjMgKi8KKyNlbmRpZiAvKiBBVFRSSUJVVEVfTk9OTlVMTCAqLworCisvKiBBdHRyaWJ1dGUgYHB1cmUnIHdhcyB2YWxpZCBhcyBvZiBnY2MgMy4wLiAgKi8KKyNpZm5kZWYgQVRUUklCVVRFX1BVUkUKKyMgaWYgKEdDQ19WRVJTSU9OID49IDMwMDApCisjICBkZWZpbmUgQVRUUklCVVRFX1BVUkUgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyMgZWxzZQorIyAgZGVmaW5lIEFUVFJJQlVURV9QVVJFCisjIGVuZGlmIC8qIEdOVUMgPj0gMy4wICovCisjZW5kaWYgLyogQVRUUklCVVRFX1BVUkUgKi8KKworLyogVXNlIEFUVFJJQlVURV9QUklOVEYgd2hlbiB0aGUgZm9ybWF0IHNwZWNpZmllciBtdXN0IG5vdCBiZSBOVUxMLgorICAgVGhpcyB3YXMgdGhlIGNhc2UgZm9yIHRoZSBgcHJpbnRmJyBmb3JtYXQgYXR0cmlidXRlIGJ5IGl0c2VsZgorICAgYmVmb3JlIEdDQyAzLjMsIGJ1dCBhcyBvZiAzLjMgd2UgbmVlZCB0byBhZGQgdGhlIGBub25udWxsJworICAgYXR0cmlidXRlIHRvIHJldGFpbiB0aGlzIGJlaGF2aW9yLiAgKi8KKyNpZm5kZWYgQVRUUklCVVRFX1BSSU5URgorI2RlZmluZSBBVFRSSUJVVEVfUFJJTlRGKG0sIG4pIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBtLCBuKSkpIEFUVFJJQlVURV9OT05OVUxMKG0pCisjZGVmaW5lIEFUVFJJQlVURV9QUklOVEZfMSBBVFRSSUJVVEVfUFJJTlRGKDEsIDIpCisjZGVmaW5lIEFUVFJJQlVURV9QUklOVEZfMiBBVFRSSUJVVEVfUFJJTlRGKDIsIDMpCisjZGVmaW5lIEFUVFJJQlVURV9QUklOVEZfMyBBVFRSSUJVVEVfUFJJTlRGKDMsIDQpCisjZGVmaW5lIEFUVFJJQlVURV9QUklOVEZfNCBBVFRSSUJVVEVfUFJJTlRGKDQsIDUpCisjZGVmaW5lIEFUVFJJQlVURV9QUklOVEZfNSBBVFRSSUJVVEVfUFJJTlRGKDUsIDYpCisjZW5kaWYgLyogQVRUUklCVVRFX1BSSU5URiAqLworCisvKiBVc2UgQVRUUklCVVRFX0ZQVFJfUFJJTlRGIHdoZW4gdGhlIGZvcm1hdCBhdHRyaWJ1dGUgaXMgdG8gYmUgc2V0IG9uCisgICBhIGZ1bmN0aW9uIHBvaW50ZXIuICBGb3JtYXQgYXR0cmlidXRlcyB3ZXJlIGFsbG93ZWQgb24gZnVuY3Rpb24KKyAgIHBvaW50ZXJzIGFzIG9mIGdjYyAzLjEuICAqLworI2lmbmRlZiBBVFRSSUJVVEVfRlBUUl9QUklOVEYKKyMgaWYgKEdDQ19WRVJTSU9OID49IDMwMDEpCisjICBkZWZpbmUgQVRUUklCVVRFX0ZQVFJfUFJJTlRGKG0sIG4pIEFUVFJJQlVURV9QUklOVEYobSwgbikKKyMgZWxzZQorIyAgZGVmaW5lIEFUVFJJQlVURV9GUFRSX1BSSU5URihtLCBuKQorIyBlbmRpZiAvKiBHTlVDID49IDMuMSAqLworIyBkZWZpbmUgQVRUUklCVVRFX0ZQVFJfUFJJTlRGXzEgQVRUUklCVVRFX0ZQVFJfUFJJTlRGKDEsIDIpCisjIGRlZmluZSBBVFRSSUJVVEVfRlBUUl9QUklOVEZfMiBBVFRSSUJVVEVfRlBUUl9QUklOVEYoMiwgMykKKyMgZGVmaW5lIEFUVFJJQlVURV9GUFRSX1BSSU5URl8zIEFUVFJJQlVURV9GUFRSX1BSSU5URigzLCA0KQorIyBkZWZpbmUgQVRUUklCVVRFX0ZQVFJfUFJJTlRGXzQgQVRUUklCVVRFX0ZQVFJfUFJJTlRGKDQsIDUpCisjIGRlZmluZSBBVFRSSUJVVEVfRlBUUl9QUklOVEZfNSBBVFRSSUJVVEVfRlBUUl9QUklOVEYoNSwgNikKKyNlbmRpZiAvKiBBVFRSSUJVVEVfRlBUUl9QUklOVEYgKi8KKworLyogVXNlIEFUVFJJQlVURV9OVUxMX1BSSU5URiB3aGVuIHRoZSBmb3JtYXQgc3BlY2lmaWVyIG1heSBiZSBOVUxMLiAgQQorICAgTlVMTCBmb3JtYXQgc3BlY2lmaWVyIHdhcyBhbGxvd2VkIGFzIG9mIGdjYyAzLjMuICAqLworI2lmbmRlZiBBVFRSSUJVVEVfTlVMTF9QUklOVEYKKyMgaWYgKEdDQ19WRVJTSU9OID49IDMwMDMpCisjICBkZWZpbmUgQVRUUklCVVRFX05VTExfUFJJTlRGKG0sIG4pIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBtLCBuKSkpCisjIGVsc2UKKyMgIGRlZmluZSBBVFRSSUJVVEVfTlVMTF9QUklOVEYobSwgbikKKyMgZW5kaWYgLyogR05VQyA+PSAzLjMgKi8KKyMgZGVmaW5lIEFUVFJJQlVURV9OVUxMX1BSSU5URl8xIEFUVFJJQlVURV9OVUxMX1BSSU5URigxLCAyKQorIyBkZWZpbmUgQVRUUklCVVRFX05VTExfUFJJTlRGXzIgQVRUUklCVVRFX05VTExfUFJJTlRGKDIsIDMpCisjIGRlZmluZSBBVFRSSUJVVEVfTlVMTF9QUklOVEZfMyBBVFRSSUJVVEVfTlVMTF9QUklOVEYoMywgNCkKKyMgZGVmaW5lIEFUVFJJQlVURV9OVUxMX1BSSU5URl80IEFUVFJJQlVURV9OVUxMX1BSSU5URig0LCA1KQorIyBkZWZpbmUgQVRUUklCVVRFX05VTExfUFJJTlRGXzUgQVRUUklCVVRFX05VTExfUFJJTlRGKDUsIDYpCisjZW5kaWYgLyogQVRUUklCVVRFX05VTExfUFJJTlRGICovCisKKy8qIEF0dHJpYnV0ZSBgc2VudGluZWwnIHdhcyB2YWxpZCBhcyBvZiBnY2MgMy41LiAgKi8KKyNpZm5kZWYgQVRUUklCVVRFX1NFTlRJTkVMCisjIGlmIChHQ0NfVkVSU0lPTiA+PSAzMDA1KQorIyAgZGVmaW5lIEFUVFJJQlVURV9TRU5USU5FTCBfX2F0dHJpYnV0ZV9fICgoX19zZW50aW5lbF9fKSkKKyMgZWxzZQorIyAgZGVmaW5lIEFUVFJJQlVURV9TRU5USU5FTAorIyBlbmRpZiAvKiBHTlVDID49IDMuNSAqLworI2VuZGlmIC8qIEFUVFJJQlVURV9TRU5USU5FTCAqLworCisKKyNpZm5kZWYgQVRUUklCVVRFX0FMSUdORURfQUxJR05PRgorIyBpZiAoR0NDX1ZFUlNJT04gPj0gMzAwMCkKKyMgIGRlZmluZSBBVFRSSUJVVEVfQUxJR05FRF9BTElHTk9GKG0pIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXyAoX19hbGlnbm9mX18gKG0pKSkpCisjIGVsc2UKKyMgIGRlZmluZSBBVFRSSUJVVEVfQUxJR05FRF9BTElHTk9GKG0pCisjIGVuZGlmIC8qIEdOVUMgPj0gMy4wICovCisjZW5kaWYgLyogQVRUUklCVVRFX0FMSUdORURfQUxJR05PRiAqLworCisvKiBVc2VmdWwgZm9yIHN0cnVjdHVyZXMgd2hvc2UgbGF5b3V0IG11c3QgbXVjaCBzb21lIGJpbmFyeSBzcGVjaWZpY2F0aW9uCisgICByZWdhcmRsZXNzIG9mIHRoZSBhbGlnbm1lbnQgYW5kIHBhZGRpbmcgcXVhbGl0aWVzIG9mIHRoZSBjb21waWxlci4gICovCisjaWZuZGVmIEFUVFJJQlVURV9QQUNLRUQKKyMgZGVmaW5lIEFUVFJJQlVURV9QQUNLRUQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisjZW5kaWYKKworLyogQXR0cmlidXRlIGBob3QnIGFuZCBgY29sZCcgd2FzIHZhbGlkIGFzIG9mIGdjYyA0LjMuICAqLworI2lmbmRlZiBBVFRSSUJVVEVfQ09MRAorIyBpZiAoR0NDX1ZFUlNJT04gPj0gNDAwMykKKyMgIGRlZmluZSBBVFRSSUJVVEVfQ09MRCBfX2F0dHJpYnV0ZV9fICgoX19jb2xkX18pKQorIyBlbHNlCisjICBkZWZpbmUgQVRUUklCVVRFX0NPTEQKKyMgZW5kaWYgLyogR05VQyA+PSA0LjMgKi8KKyNlbmRpZiAvKiBBVFRSSUJVVEVfQ09MRCAqLworI2lmbmRlZiBBVFRSSUJVVEVfSE9UCisjIGlmIChHQ0NfVkVSU0lPTiA+PSA0MDAzKQorIyAgZGVmaW5lIEFUVFJJQlVURV9IT1QgX19hdHRyaWJ1dGVfXyAoKF9faG90X18pKQorIyBlbHNlCisjICBkZWZpbmUgQVRUUklCVVRFX0hPVAorIyBlbmRpZiAvKiBHTlVDID49IDQuMyAqLworI2VuZGlmIC8qIEFUVFJJQlVURV9IT1QgKi8KKworLyogV2UgdXNlIF9fZXh0ZW5zaW9uX18gaW4gc29tZSBwbGFjZXMgdG8gc3VwcHJlc3MgLXBlZGFudGljIHdhcm5pbmdzCisgICBhYm91dCBHQ0MgZXh0ZW5zaW9ucy4gIFRoaXMgZmVhdHVyZSBkaWRuJ3Qgd29yayBwcm9wZXJseSBiZWZvcmUKKyAgIGdjYyAyLjguICAqLworI2lmIEdDQ19WRVJTSU9OIDwgMjAwOAorI2RlZmluZSBfX2V4dGVuc2lvbl9fCisjZW5kaWYKKworLyogVGhpcyBpcyB1c2VkIHRvIGRlY2xhcmUgYSBjb25zdCB2YXJpYWJsZSB3aGljaCBzaG91bGQgYmUgdmlzaWJsZQorICAgb3V0c2lkZSBvZiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiAgVXNlIGl0IGFzCisgICAgIEVYUE9SVEVEX0NPTlNUIGludCBpID0gMTsKKyAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgc2VtYW50aWNzIG9mIGNvbnN0IGFyZSBkaWZmZXJlbnQgaW4gQyBhbmQgQysrLgorICAgImV4dGVybiBjb25zdCIgaXMgcGVybWl0dGVkIGluIEMgYnV0IGl0IGxvb2tzIHN0cmFuZ2UsIGFuZCBnY2MKKyAgIHdhcm5zIGFib3V0IGl0IHdoZW4gLVdjKystY29tcGF0IGlzIG5vdCB1c2VkLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBFWFBPUlRFRF9DT05TVCBleHRlcm4gY29uc3QKKyNlbHNlCisjZGVmaW5lIEVYUE9SVEVEX0NPTlNUIGNvbnN0CisjZW5kaWYKKworLyogQmUgY29uc2VydmF0aXZlIGFuZCBvbmx5IHVzZSBlbnVtIGJpdGZpZWxkcyB3aXRoIEMrKyBvciBHQ0MuCisgICBGSVhNRTogcHJvdmlkZSBhIGNvbXBsZXRlIGF1dG9jb25mIHRlc3QgZm9yIGJ1Z2d5IGVudW0gYml0ZmllbGRzLiAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEVOVU1fQklURklFTEQoVFlQRSkgZW51bSBUWVBFCisjZWxpZiAoR0NDX1ZFUlNJT04gPiAyMDAwKQorI2RlZmluZSBFTlVNX0JJVEZJRUxEKFRZUEUpIF9fZXh0ZW5zaW9uX18gZW51bSBUWVBFCisjZWxzZQorI2RlZmluZSBFTlVNX0JJVEZJRUxEKFRZUEUpIHVuc2lnbmVkIGludAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgkvKiBhbnNpZGVjbC5oCSovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYXV0by1ob3N0LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYXV0by1ob3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViY2NiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9hdXRvLWhvc3QuaApAQCAtMCwwICsxLDIwNDQgQEAKKy8qIGF1dG8taG9zdC5oLiAgR2VuZXJhdGVkIGZyb20gY29uZmlnLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBjb25maWcuaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgYXMgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgYnl0ZSwgaWYgYGxpbWl0cy5oJyBkb2Vzbid0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBDSEFSX0JJVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIDAvMSB0byBmb3JjZSB0aGUgY2hvaWNlIGZvciBleGNlcHRpb24gaGFuZGxpbmcgbW9kZWwuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIENPTkZJR19TSkxKX0VYQ0VQVElPTlMgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBlbmFibGUgdGhlIHVzZSBvZiBhIGRlZmF1bHQgYXNzZW1ibGVyLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBERUZBVUxUX0FTU0VNQkxFUiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIGVuYWJsZSB0aGUgdXNlIG9mIGEgZGVmYXVsdCBsaW5rZXIuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIERFRkFVTFRfTElOS0VSICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gdXNlIF9fY3hhX2F0ZXhpdCwgcmF0aGVyIHRoYW4gYXRleGl0LCB0byByZWdpc3RlciBDKysKKyAgIGRlc3RydWN0b3JzIGZvciBsb2NhbCBzdGF0aWNzIGFuZCBnbG9iYWwgb2JqZWN0cy4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yCisgICBmdWxseSBzdGFuZGFyZHMtY29tcGxpYW50IGhhbmRsaW5nIG9mIGRlc3RydWN0b3JzLCBidXQgcmVxdWlyZXMKKyAgIF9fY3hhX2F0ZXhpdCBpbiBsaWJjLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBERUZBVUxUX1VTRV9DWEFfQVRFWElUICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgYXNzZXJ0aW9ucyBlbmFibGVkLiBUaGlzIGlzIGEgY2hlYXAgY2hlY2suICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBFTkFCTEVfQVNTRVJUX0NIRUNLSU5HIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBtb3JlIHJ1bi10aW1lIHNhbml0eSBjaGVja3MuIFRoaXMgb25lIGdldHMgYSBncmFiIGJhZyBvZgorICAgbWlzY2VsbGFuZW91cyBidXQgcmVsYXRpdmVseSBjaGVhcCBjaGVja3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEVOQUJMRV9DSEVDS0lORyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgdG8gc3BlY2lmeSB0aGF0IHdlIGFyZSB1c2luZyB0aGUgQklEIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQKKyAgIGZvcm1hdCBpbnN0ZWFkIG9mIERQRCAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgRU5BQkxFX0RFQ0lNQUxfQklEX0ZPUk1BVCAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSB0byBlbmFibGUgZGVjaW1hbCBmbG9hdCBleHRlbnNpb24gdG8gQy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVOQUJMRV9ERUNJTUFMX0ZMT0FUIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBtb3JlIHJ1bi10aW1lIHNhbml0eSBjaGVja3MgZm9yIGRhdGFmbG93LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfREZfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIHRvIGVuYWJsZSBmaXhlZC1wb2ludCBhcml0aG1ldGljIGV4dGVuc2lvbiB0byBDLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgRU5BQkxFX0ZJWEVEX1BPSU5UIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBmb2xkIGNoZWNrZWQgdGhhdCBpdCBuZXZlciBkZXN0cnVjdHMgaXRzIGFyZ3VtZW50LiBUaGlzCisgICBpcyBxdWl0ZSBleHBlbnNpdmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEVOQUJMRV9GT0xEX0NIRUNLSU5HICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHRvIG9wZXJhdGUgaW4gbWF4aW1hbGx5IHBhcmFub2lkCisgICBtb2RlLCB2YWxpZGF0aW5nIHRoZSBlbnRpcmUgaGVhcCBhbmQgY29sbGVjdGluZyBnYXJiYWdlIGF0IGV2ZXJ5CisgICBvcHBvcnR1bml0eS4gVGhpcyBpcyBleHRyZW1lbHkgZXhwZW5zaXZlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfR0NfQUxXQVlTX0NPTExFQ1QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gZG8gb2JqZWN0IHBvaXNvbmluZyBhbmQgb3RoZXIKKyAgIG1lbW9yeSBhbGxvY2F0aW9uIGNoZWNrcy4gVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEVOQUJMRV9HQ19DSEVDS0lORyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IG9wZXJhdGlvbnMgb24gR0lNUExFICh0aGUgYmFzaWMgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlCisgICBoaWdoLWxldmVsIG9wdGltaXplcnMpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgIFRoaXMgaXMgbW9kZXJhdGVseSBleHBlbnNpdmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEVOQUJMRV9HSU1QTEVfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiBnY2Mgc2hvdWxkIGFsd2F5cyBwYXNzIC0tYnVpbGQtaWQgdG8gbGlua2VyLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgRU5BQkxFX0xEX0JVSUxESUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgdG8gZW5hYmxlIGxpYnF1YWRtYXRoIHN1cHBvcnQgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVOQUJMRV9MSUJRVUFETUFUSF9TVVBQT1JUIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBlbmFibGUgTFRPIHN1cHBvcnQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBFTkFCTEVfTFRPIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUKKyAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVOQUJMRV9OTFMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIGVuYWJsZSBwbHVnaW4gc3VwcG9ydC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVOQUJMRV9QTFVHSU4gMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgb3B0aW1pemVyIGFuZCBiYWNrIGVuZCkgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLgorICAgVGhpcyBpcyBxdWl0ZSBleHBlbnNpdmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEVOQUJMRV9SVExfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBSVEwgZmxhZyBhY2Nlc3NlcyB0byBiZSBjaGVja2VkIGFnYWluc3QgdGhlIFJUTCBjb2RlcworICAgdGhhdCBhcmUgc3VwcG9ydGVkIGZvciBlYWNoIGFjY2VzcyBtYWNyby4gVGhpcyBpcyByZWxhdGl2ZWx5IGNoZWFwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfUlRMX0ZMQUdfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBydW50aW1lIGFzc2VydGlvbnMgZW5hYmxlZC4gVGhpcyBpcyBhIGNoZWFwIGNoZWNrLiAqLworI2RlZmluZSBFTkFCTEVfUlVOVElNRV9DSEVDS0lORyAxCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCBhbGwgb3BlcmF0aW9ucyBvbiB0cmVlcyAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgZnJvbnQgZW5kcykgdG8gYmUgY2hlY2tlZCBmb3IgZHluYW1pYyB0eXBlIHNhZmV0eSBhdCBydW50aW1lLiBUaGlzIGlzCisgICBtb2RlcmF0ZWx5IGV4cGVuc2l2ZS4gVGhlIHRyZWUgYnJvd3NlciBkZWJ1Z2dpbmcgcm91dGluZXMgd2lsbCBhbHNvIGJlCisgICBlbmFibGVkIGJ5IHRoaXMgb3B0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfVFJFRV9DSEVDS0lORyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBnaW1wbGUgdHlwZXMgdG8gYmUgdmVyaWZpZWQgYWZ0ZXIgZ2ltcGxpZmlhdGlvbi4KKyAgIFRoaXMgaXMgY2hlYXAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEVOQUJMRV9UWVBFU19DSEVDS0lORyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJ1biBzdWJwcm9ncmFtcyBhbmQgZ2VuZXJhdGVkIHByb2dyYW1zIHRocm91Z2gKKyAgIHZhbGdyaW5kIChhIG1lbW9yeSBjaGVja2VyKS4gVGhpcyBpcyBleHRyZW1lbHkgZXhwZW5zaXZlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBFTkFCTEVfVkFMR1JJTkRfQ0hFQ0tJTkcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIGluc3RhbGxhdGlvbiBwYXRocyBzaG91bGQgYmUgbG9va2VkIHVwIGluIHRoZSBXaW5kb3dzCisgICBSZWdpc3RyeS4gSWdub3JlZCBvbiBub24tV2luZG93cyBob3N0cy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgRU5BQkxFX1dJTjMyX1JFR0lTVFJZICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGV4dHJhIG1hY2hpbmUgbW9kZXMgZm9yCisgICB0aGlzIGFyY2hpdGVjdHVyZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEVYVFJBX01PREVTX0ZJTEUgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmIgorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIGVuYWJsZSBkZXRhaWxlZCBtZW1vcnkgYWxsb2NhdGlvbiBzdGF0cyBnYXRoZXJpbmcuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBHQVRIRVJfU1RBVElTVElDUyAwCisjZW5kaWYKKworCisvKiBtY29udGV4dF90IGZpZWxkcyBzdGFydCB3aXRoIF9fICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBU19NQ09OVEVYVF9UX1VOREVSU0NPUkVTICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgY21wYi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19DTVBCICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgdGhlIERDSS9JQ0kgaW5zdHJ1Y3Rpb25zLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0RDSSAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSAtLWRlYnVnLXByZWZpeC1tYXAgb3B0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9BU19ERUJVR19QUkVGSVhfTUFQIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBERlAgaW5zdHJ1Y3Rpb25zLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0RGUCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIERTUFIxIG11bHQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfRFNQUjFfTVVMVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5kdHByZWx3b3JkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0RUUFJFTFdPUkQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBkd2FyZjIgLmZpbGUvLmxvYyBkaXJlY3RpdmVzLCBhbmQKKyAgIHByZXNlcnZlcyBmaWxlIHRhYmxlIGluZGljZXMgZXhhY3RseSBhcyBnaXZlbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQVNfRFdBUkYyX0RFQlVHX0xJTkUgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIGV4cGxpY2l0IHJlbG9jYXRpb25zLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0VYUExJQ0lUX1JFTE9DUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIEZNQUYsIEhQQywgYW5kIFZJUyAzLjAgaW5zdHJ1Y3Rpb25zLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0ZNQUZfSFBDX1ZJUzMgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBmcHJuZC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19GUFJORCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSAtLWdkd2FyZjIgb3B0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9BU19HRFdBUkYyX0RFQlVHX0ZMQUcgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5nbnVfYXR0cmlidXRlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0dOVV9BVFRSSUJVVEUgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0cnVlIGlmIHRoZSBhc3NlbWJsZXIgc3VwcG9ydHMgJy5sb25nIGZvb0BHT1RPRkYnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0dPVE9GRl9JTl9EQVRBICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgdGhlIC0tZ3N0YWJzIG9wdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQVNfR1NUQUJTX0RFQlVHX0ZMQUcgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSBTdW4gc3ludGF4IGZvciBjbW92LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0lYODZfQ01PVl9TVU5fU1lOVEFYICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgdGhlIHN1YnRyYWN0aW9uIG9mIHN5bWJvbHMgaW4gZGlmZmVyZW50CisgICBzZWN0aW9ucy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19JWDg2X0RJRkZfU0VDVF9ERUxUQSAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSBmZnJlZXAgbW5lbW9uaWMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfSVg4Nl9GRlJFRVAgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciB1c2VzIGZpbGRxIGFuZCBmaXN0cSBtbmVtb25pY3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfSVg4Nl9GSUxEUSAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHVzZXMgZmlsZHMgYW5kIGZpc3RzIG1uZW1vbmljcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19JWDg2X0ZJTERTICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgSExFIHByZWZpeGVzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0lYODZfSExFICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgdGhlIC5xdWFkIGRpcmVjdGl2ZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19JWDg2X1FVQUQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB0aGUgYXNzZW1ibGVyIHN1cHBvcnRzICdyZXAgPGluc24+LCBsb2NrIDxpbnNuPicuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfSVg4Nl9SRVBfTE9DS19QUkVGSVggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB0aGUgc2FoZiBtbmVtb25pYyBpbiA2NGJpdCBtb2RlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0lYODZfU0FIRiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSBzd2FwIHN1ZmZpeC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19JWDg2X1NXQVAgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgQHRsc2dkcGx0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0lYODZfVExTR0RQTFQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgQHRsc2xkbXBsdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19JWDg2X1RMU0xETVBMVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSBsaXR1c2VfanNyZGlyZWN0IHJlbG9jYXRpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfSlNSRElSRUNUX1JFTE9DUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5zbGViMTI4IGFuZCAudWxlYjEyOC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQVNfTEVCMTI4IDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB0aGUgYXNzZW1ibGVyIHdvbid0IGNvbXBsYWluIGFib3V0IGEgbGluZSBzdWNoIGFzICMgMCAiIiAyLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9BU19MSU5FX1pFUk8gMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIGx0b2ZmeCBhbmQgbGR4bW92IHJlbG9jYXRpb25zLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX0xUT0ZGWF9MRFhNT1ZfUkVMT0NTICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgTFdTWU5DIGluc3RydWN0aW9ucy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19MV1NZTkMgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBtZmNyIGZpZWxkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX01GQ1JGICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgbWZmZ3ByIGFuZCBtZnRncHIuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfTUZQR1BSICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgdGhlIC1uby1tdWwtYnVnLWFib3J0IG9wdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19OT19NVUxfQlVHX0FCT1JUX09QVElPTiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHRoZSBhc3NlbWJsZXIgdW5kZXJzdGFuZHMgLW1uby1zaGFyZWQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfTk9fU0hBUkVEICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgb2Zmc2V0YWJsZSAlbG8oKS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19PRkZTRVRBQkxFX0xPMTAgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBwb3BjbnRiIGZpZWxkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX1BPUENOVEIgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBQT1BDTlREIGluc3RydWN0aW9ucy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19QT1BDTlREICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgUE9XRVI4IGluc3RydWN0aW9ucy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19QT1dFUjggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAucmVmICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfUkVGICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgLnJlZ2lzdGVyLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX1JFR0lTVEVSX1BTRVVET19PUCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFJfUFBDX1JFTDE2IHJlbG9jcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19SRUwxNiAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC1yZWxheCBvcHRpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfUkVMQVhfT1BUSU9OICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgU1BBUkM0IGluc3RydWN0aW9ucy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19TUEFSQzQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgR09UREFUQV9PUCByZWxvY3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfU1BBUkNfR09UREFUQV9PUCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgI25vYml0cywgMCBvdGhlcndpc2UuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfU1BBUkNfTk9CSVRTICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgYW5kIGxpbmtlciBzdXBwb3J0IHVuYWxpZ25lZCBQQyByZWxhdGl2ZSByZWxvY3MuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0FTX1NQQVJDX1VBX1BDUkVMICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgYW5kIGxpbmtlciBzdXBwb3J0IHVuYWxpZ25lZCBQQyByZWxhdGl2ZSByZWxvY3MKKyAgIGFnYWluc3QgaGlkZGVuIHN5bWJvbHMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfU1BBUkNfVUFfUENSRUxfSElEREVOICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgYW5kIGxpbmtlciBzdXBwb3J0IHRocmVhZC1sb2NhbCBzdG9yYWdlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9BU19UTFMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIGFyZyBpbmZvIGZvciBfX3Rsc19nZXRfYWRkci4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BU19UTFNfTUFSS0VSUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFZTWCBpbnN0cnVjdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfQVNfVlNYICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0b2xsJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQVRPTEwgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdG9xJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9BVE9RICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsZWFyZXJyX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9DTEVBUkVSUl9VTkxPQ0tFRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9jaycgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0NMT0NLIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiA8dGltZS5oPiBkZWZpbmVzIGNsb2NrX3QuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0NMT0NLX1QgMQorI2VuZGlmCisKKworLyogRGVmaW5lIDAvMSBpZiB5b3VyIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgQ09NREFUIGdyb3Vwcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfQ09NREFUX0dST1VQIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdhYm9ydCcsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfQUJPUlQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2FzcHJpbnRmJywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9BU1BSSU5URiAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnYXRvZicsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9BVE9GIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdhdG9sJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0FUT0wgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2Jhc2VuYW1lJywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9CQVNFTkFNRSAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnY2FsbG9jJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9DQUxMT0MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2NsZWFyZXJyX3VubG9ja2VkJywgb3RoZXJ3aXNlCisgICBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRCAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnY2xvY2snLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0NMT0NLIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdlcnJubycsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRVJSTk8gMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2Zlb2ZfdW5sb2NrZWQnLCBvdGhlcndpc2UgZGVmaW5lCisgICB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgMAorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2ZlcnJvcl91bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRkVSUk9SX1VOTE9DS0VEIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmZmx1c2hfdW5sb2NrZWQnLCBvdGhlcndpc2UKKyAgIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZGTFVTSF9VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZmZzJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZGUyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZmdldGNfdW5sb2NrZWQnLCBvdGhlcndpc2UKKyAgIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZHRVRDX1VOTE9DS0VEIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmZ2V0c191bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRkdFVFNfVU5MT0NLRUQgMAorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2ZpbGVub191bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRklMRU5PX1VOTE9DS0VEIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmcHJpbnRmX3VubG9ja2VkJywgb3RoZXJ3aXNlCisgICBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9GUFJJTlRGX1VOTE9DS0VEIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmcHV0Y191bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRlBVVENfVU5MT0NLRUQgMAorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2ZwdXRzX3VubG9ja2VkJywgb3RoZXJ3aXNlCisgICBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRCAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZnJlYWRfdW5sb2NrZWQnLCBvdGhlcndpc2UKKyAgIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VEIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdmcmVlJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0ZSRUUgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2Z3cml0ZV91bmxvY2tlZCcsIG90aGVyd2lzZQorICAgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VEIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdnZXRjaGFyX3VubG9ja2VkJywgb3RoZXJ3aXNlCisgICBkZWZpbmUgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9HRVRDSEFSX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdnZXRjd2QnLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVENXRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZ2V0Y191bmxvY2tlZCcsIG90aGVyd2lzZSBkZWZpbmUKKyAgIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfR0VUQ19VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZ2V0ZW52Jywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9HRVRFTlYgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2dldG9wdCcsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfR0VUT1BUIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdnZXRwYWdlc2l6ZScsIG90aGVyd2lzZSBkZWZpbmUKKyAgIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfR0VUUEFHRVNJWkUgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ2dldHJsaW1pdCcsIG90aGVyd2lzZSBkZWZpbmUgdG8KKyAgIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfR0VUUkxJTUlUIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdnZXRydXNhZ2UnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVFJVU0FHRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnZ2V0d2QnLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0dFVFdEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdsZGdldG5hbWUnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX0xER0VUTkFNRSAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnbWFkdmlzZScsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfTUFEVklTRSAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnbWFsbG9jJywgb3RoZXJ3aXNlIGRlZmluZSB0byAwLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9NQUxMT0MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3B1dGNoYXJfdW5sb2NrZWQnLCBvdGhlcndpc2UKKyAgIGRlZmluZSB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1BVVENIQVJfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3B1dGNfdW5sb2NrZWQnLCBvdGhlcndpc2UgZGVmaW5lCisgICB0byAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1BVVENfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3JlYWxsb2MnLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1JFQUxMT0MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3NicmsnLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfU0JSSyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnc2V0cmxpbWl0Jywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9TRVRSTElNSVQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3NpZ2FsdHN0YWNrJywgb3RoZXJ3aXNlIGRlZmluZQorICAgdG8gMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9TSUdBTFRTVEFDSyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnc25wcmludGYnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1NOUFJJTlRGIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdzdHBjcHknLCBvdGhlcndpc2UgZGVmaW5lIHRvIDAuCisgICAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1NUUENQWSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB3ZSBmb3VuZCBhIGRlY2xhcmF0aW9uIGZvciAnc3Ryc2lnbmFsJywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9TVFJTSUdOQUwgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3N0cnN0cicsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfU1RSU1RSIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICdzdHJ2ZXJzY21wJywgb3RoZXJ3aXNlIGRlZmluZSB0bworICAgMC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfREVDTF9TVFJWRVJTQ01QIDAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICd0aW1lcycsIG90aGVyd2lzZSBkZWZpbmUgdG8gMC4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfVElNRVMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgd2UgZm91bmQgYSBkZWNsYXJhdGlvbiBmb3IgJ3Zhc3ByaW50ZicsIG90aGVyd2lzZSBkZWZpbmUgdG8KKyAgIDAuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0RFQ0xfVkFTUFJJTlRGIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHdlIGZvdW5kIGEgZGVjbGFyYXRpb24gZm9yICd2c25wcmludGYnLCBvdGhlcndpc2UgZGVmaW5lIHRvCisgICAwLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9ERUNMX1ZTTlBSSU5URiAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9ESVJFQ1RfSCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGV4dC9oYXNoX21hcD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0VYVF9IQVNIX01BUCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmVvZl91bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfRkVPRl9VTkxPQ0tFRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmZXJyb3JfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0ZFUlJPUl9VTkxPQ0tFRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmZmx1c2hfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9GRkxVU0hfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmZ2V0Y191bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfRkdFVENfVU5MT0NLRUQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmdldHNfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0ZHRVRTX1VOTE9DS0VEICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZpbGVub191bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfRklMRU5PX1VOTE9DS0VEICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9GT1JLIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnByaW50Zl91bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfRlBSSU5URl9VTkxPQ0tFRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmcHV0Y191bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfRlBVVENfVU5MT0NLRUQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnB1dHNfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0ZQVVRTX1VOTE9DS0VEICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZyZWFkX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9GUkVBRF9VTkxPQ0tFRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmd3JpdGVfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0ZXUklURV9VTkxPQ0tFRCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHNwZWNpZnlpbmcgdGhlIGFsaWdubWVudCBvZiBvYmplY3RzCisgICBhbGxvY2F0ZWQgdXNpbmcgdGhlIEdBUyAuY29tbSBjb21tYW5kLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0dBU19BTElHTkVEX0NPTU0gKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAuYmFsaWduIGFuZCAucDJhbGlnbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0FTX0JBTElHTl9BTkRfUDJBTElHTiAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgMC8xIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIENGSSBkaXJlY3RpdmVzLiAqLworI2RlZmluZSBIQVZFX0dBU19DRklfRElSRUNUSVZFIDEKKworLyogRGVmaW5lIDAvMSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAuY2ZpX3BlcnNvbmFsaXR5LiAqLworI2RlZmluZSBIQVZFX0dBU19DRklfUEVSU09OQUxJVFlfRElSRUNUSVZFIDEKKworLyogRGVmaW5lIDAvMSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAuY2ZpX3NlY3Rpb25zLiAqLworI2RlZmluZSBIQVZFX0dBU19DRklfU0VDVElPTlNfRElSRUNUSVZFIDEKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSAubG9jIGRpc2NyaW1pbmF0b3Igc3ViLWRpcmVjdGl2ZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0FTX0RJU0NSSU1JTkFUT1IgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIEBnbnVfdW5pcXVlX29iamVjdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9HQVNfR05VX1VOSVFVRV9PQkpFQ1QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgLmhpZGRlbi4gKi8KKyNkZWZpbmUgSEFWRV9HQVNfSElEREVOIDEKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5sY29tbSB3aXRoIGFuIGFsaWdubWVudCBmaWVsZC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9HQVNfTENPTU1fV0lUSF9BTElHTk1FTlQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAubGl0ZXJhbDE2LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0dBU19MSVRFUkFMMTYgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBzcGVjaWZ5aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0bworICAgc2tpcCB3aGVuIHVzaW5nIHRoZSBHQVMgLnAyYWxpZ24gY29tbWFuZC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0FTX01BWF9TS0lQX1AyQUxJR04gMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5uc3Vic3BhIGNvbWRhdCBvcHRpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfR0FTX05TVUJTUEFfQ09NREFUICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgYW5kIGxpbmtlciBzdXBwb3J0IDMyLWJpdCBzZWN0aW9uIHJlbGF0aXZlIHJlbG9jcworICAgdmlhICcuc2VjcmVsMzIgbGFiZWwnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0dBU19QRV9TRUNSRUwzMl9SRUxPQyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIHNwZWNpZnlpbmcgdGhlIHNlY3Rpb24gZmxhZyBlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0dBU19TRUNUSU9OX0VYQ0xVREUgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSAwLzEgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgbWFya2luZyBzZWN0aW9ucyB3aXRoIFNIRl9NRVJHRSBmbGFnLgorICAgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0FTX1NIRl9NRVJHRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgLnN1YnNlY3Rpb24gYW5kIC5zdWJzZWN0aW9uIC0xIHN0YXJ0cworICAgZW1pdHRpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB5b3VyIHNlY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dBU19TVUJTRUNUSU9OX09SREVSSU5HIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyAud2Vhay4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfR0FTX1dFQUsgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC53ZWFrcmVmLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HQVNfV0VBS1JFRiAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGNoYXJfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HRVRDSEFSX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y191bmxvY2tlZCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dFVENfVU5MT0NLRUQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRybGltaXQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HRVRSTElNSVQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRydXNhZ2UnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HRVRSVVNBR0UgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdXNpbmcgR05VIGFzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9HTlVfQVMgMAorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIGdudSBpbmRpcmVjdCBmdW5jdGlvbnMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfR05VX0lORElSRUNUX0ZVTkNUSU9OICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyBHTlUgbGQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0dOVV9MRCAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0lDT05WIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aWNvbnYuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0lDT05WX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIC5pbml0X2FycmF5Ly5maW5pX2FycmF5IHNlY3Rpb25zIGFyZSBhdmFpbGFibGUgYW5kIHdvcmtpbmcuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfSU5JVEZJTklfQVJSQVlfU1VQUE9SVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludG1heF90Jy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfSU5UTUFYX1QgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludHB0cl90Jy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfSU5UUFRSX1QgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIGEgd29ya2luZyA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBraWxsJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfS0lMTCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgPGxhbmdpbmZvLmg+IGFuZCBubF9sYW5naW5mbyhDT0RFU0VUKS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTEFOR0lORk9fQ09ERVNFVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxhbmdpbmZvLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MQU5HSU5GT19IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MQ19NRVNTQUdFUyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxkZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0xERkNOX0ggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGxpbmtlciBzdXBwb3J0cyAtLWFzLW5lZWRlZCBhbmQgLS1uby1hcy1uZWVkZWQgb3B0aW9ucy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTERfQVNfTkVFREVEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGxpbmtlciBzdXBwb3J0cyAtLWJ1aWxkLWlkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MRF9CVUlMRElEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3VyIGxpbmtlciBzdXBwb3J0cyAtLWRlbWFuZ2xlIG9wdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9MRF9ERU1BTkdMRSAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIHN1cHBvcnRzIC5laF9mcmFtZV9oZHIuICovCisjZGVmaW5lIEhBVkVfTERfRUhfRlJBTUVfSERSIDEKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIHN1cHBvcnRzIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBzZWN0aW9ucyBpbiBwcmVzZW5jZQorICAgb2YgRUggZnJhbWVzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MRF9FSF9HQ19TRUNUSU9OUyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgaGFzIGJ1Z2d5IGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBzZWN0aW9ucyBzdXBwb3J0IHdoZW4KKyAgIC50ZXh0LnN0YXJ0dXAuZm9vIGxpa2Ugc2VjdGlvbnMgYXJlIHVzZWQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIEhBVkVfTERfRUhfR0NfU0VDVElPTlNfQlVHICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBQb3dlclBDNjQgbGlua2VyIHN1cHBvcnRzIGEgbGFyZ2UgVE9DLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0xEX0xBUkdFX1RPQyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgUG93ZXJQQzY0IGxpbmtlciBvbmx5IG5lZWRzIGZ1bmN0aW9uIGRlc2NyaXB0b3Igc3ltcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9MRF9OT19ET1RfU1lNUyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIGNhbiByZWxheCBhYnNvbHV0ZSAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcG9pbnRlcnMKKyAgIGludG8gUEMtcmVsYXRpdmUgZm9ybS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9MRF9QRVJTT05BTElUWV9SRUxBWEFUSU9OICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgc3VwcG9ydHMgLXBpZSBvcHRpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0xEX1BJRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgbGlua3MgYSBtaXggb2YgcmVhZC1vbmx5IGFuZCByZWFkLXdyaXRlIHNlY3Rpb25zIGludG8KKyAgIGEgcmVhZC13cml0ZSBzZWN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MRF9ST19SV19TRUNUSU9OX01JWElORyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgc3VwcG9ydHMgdGhlICpfc29sMiBlbXVsYXRpb25zLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX0xEX1NPTDJfRU1VTEFUSU9OICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciBsaW5rZXIgc3VwcG9ydHMgLUJzdGF0aWMvLUJkeW5hbWljIG9yIGVxdWl2YWxlbnQgb3B0aW9ucy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTERfU1RBVElDX0RZTkFNSUMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgbGlua2VyIHN1cHBvcnRzIC0tc3lzcm9vdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTERfU1lTUk9PVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBsb25nIGxvbmcnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MT05HX0xPTkcgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGxvbmcgbG9uZyBpbnQnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9MT05HX0xPTkdfSU5UIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgbGV2ZWwgb2YgeW91ciBsaW5rZXIncyBwbHVnaW4gc3VwcG9ydC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTFRPX1BMVUdJTiAwCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1hZHZpc2UnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX01BRFZJU0UgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1ic3Rvd2NzJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTUJTVE9XQ1MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHZhbGdyaW5kJ3MgbWVtY2hlY2suaCBoZWFkZXIgaXMgaW5zdGFsbGVkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX01FTUNIRUNLX0ggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1tYXAnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiBtbWFwIHdpdGggTUFQX0FOT04oWU1PVVMpIHdvcmtzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9NTUFQX0FOT04gMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIG1tYXAgb2YgL2Rldi96ZXJvIHdvcmtzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9NTUFQX0RFVl9aRVJPIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiByZWFkLW9ubHkgbW1hcCBvZiBhIHBsYWluIGZpbGUgd29ya3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX01NQVBfRklMRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5sX2xhbmdpbmZvJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfTkxfTEFOR0lORk8gMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdXRjaGFyX3VubG9ja2VkJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfUFVUQ0hBUl9VTkxPQ0tFRCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB1dGNfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9QVVRDX1VOTE9DS0VEIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmxpbWl0JyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU0VUUkxJTUlUIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkZGVmLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TVERERUZfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnNpZ25hbCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NUUlNJR05BTCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgPHN5cy90aW1lcy5oPiBkZWZpbmVzIHN0cnVjdCB0bXMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NUUlVDVF9UTVMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeXNjb25mJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1lTQ09ORiAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxlLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TWVNfRklMRV9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL21tYW4uaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19NTUFOX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcGFyYW0uaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9TWVNfUkVTT1VSQ0VfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaCAqLworLyogI3VuZGVmIEhBVkVfU1lTX1NEVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19USU1FU19IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIDxzeXMvd2FpdC5oPiB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRpbWVzJyBmdW5jdGlvbi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfVElNRVMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9USU1FX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0cjEvdW5vcmRlcmVkX21hcD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1RSMV9VTk9SREVSRURfTUFQIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50bWF4X3QnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9VSU5UTUFYX1QgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnRwdHJfdCcuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bm9yZGVyZWRfbWFwPiBoZWFkZXIgZmlsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgSEFWRV9VTk9SREVSRURfTUFQICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdW5zaWduZWQgbG9uZyBsb25nIGludCcuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHZhbGdyaW5kJ3MgdmFsZ3JpbmQvbWVtY2hlY2suaCBoZWFkZXIgaXMgaW5zdGFsbGVkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX1ZBTEdSSU5EX01FTUNIRUNLX0ggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdmZvcmsnIGZ1bmN0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9WRk9SSyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHZmb3JrLmg+IGhlYWRlciBmaWxlLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX1ZGT1JLX0ggKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2NoYXIuaD4gaGVhZGVyIGZpbGUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1dDSEFSX0ggMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3N3aWR0aCcgZnVuY3Rpb24uICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1dDU1dJRFRIIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIGBmb3JrJyB3b3Jrcy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIEhBVkVfV09SS0lOR19GT1JLIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0aGlzIG1hY3JvIGlmIG1ic3Rvd2NzIGRvZXMgbm90IGNyYXNoIHdoZW4gaXRzIGZpcnN0IGFyZ3VtZW50IGlzCisgICBOVUxMLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgSEFWRV9XT1JLSU5HX01CU1RPV0NTIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIGB2Zm9yaycgd29ya3MuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX1dPUktJTkdfVkZPUksgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYF9faW50NjQnLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBIQVZFX19fSU5UNjQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiBjbG9vZyBpcyBpbiB1c2UuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIQVZFX2Nsb29nIDEKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiBGX1NFVExLVyBzdXBwb3J0ZWQgYnkgZmNudGwuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBIT1NUX0hBU19GX1NFVExLVyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgYXMgY29uc3QgaWYgdGhlIGRlY2xhcmF0aW9uIG9mIGljb252KCkgbmVlZHMgY29uc3QuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBJQ09OVl9DT05TVCAKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgbGlua2VyIG9wdGlvbiB0byBlbmFibGUgdXNlIG9mIHNoYXJlZCBvYmplY3RzLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgTERfRFlOQU1JQ19PUFRJT04gIi1CZHluYW1pYyIKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgbGlua2VyIG9wdGlvbiB0byBkaXNhYmxlIHVzZSBvZiBzaGFyZWQgb2JqZWN0cy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIExEX1NUQVRJQ19PUFRJT04gIi1Cc3RhdGljIgorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSBsaWJyYXJ5IGNvbnRhaW5pbmcgX190bHNfZ2V0X2FkZHIvX19fdGxzX2dldF9hZGRyLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBMSUJfVExTX1NQRUMgKi8KKyNlbmRpZgorCisKKy8qIFRoZSBsaW5rZXIgaGFzaCBzdHlsZSAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBMSU5LRVJfSEFTSF9TVFlMRSAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSBuYW1lIG9mIHRoZSBMVE8gcGx1Z2luIERTTyB0aGF0IG11c3QgYmUgcGFzc2VkIHRvIHRoZQorICAgbGlua2VyJ3MgLXBsdWdpbj1MSUIgb3B0aW9uLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgTFRPUExVR0lOU09OQU1FICJsaWJsdG9fcGx1Z2luLnNvIgorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4KKyAgICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBMVF9PQkpESVIgIi5saWJzLyIKKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiBob3N0IG1rZGlyIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBNS0RJUl9UQUtFU19PTkVfQVJHICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiBIT1NUX1dJREVfSU5UIG11c3QgYmUgNjQgYml0cyB3aWRlIChzZWUgaHdpbnQuaCkuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBORUVEXzY0QklUX0hPU1RfV0lERV9JTlQgMQorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBDIGNvbXBpbGVyIGRvZXNuJ3QgYWNjZXB0IC1jIGFuZCAtbyB0b2dldGhlci4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgTk9fTUlOVVNfQ19NSU5VU19PICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIiCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBQQUNLQUdFX05BTUUgIiIKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIiCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiIKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBQQUNLQUdFX1VSTCAiIgorI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiIgorI2VuZGlmCisKKworLyogU3BlY2lmeSBwbHVnaW4gbGlua2VyICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBQTFVHSU5fTERfU1VGRklYICJsZCIKKyNlbmRpZgorCisKKy8qIERlZmluZSB0byBQUkVGSVgvaW5jbHVkZSBpZiBjcHAgc2hvdWxkIGFsc28gc2VhcmNoIHRoYXQgZGlyZWN0b3J5LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBQUkVGSVhfSU5DTFVERV9ESVIgKi8KKyNlbmRpZgorCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBTSVpFT0ZfSU5UIDQKKyNlbmRpZgorCisKKy8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgU0laRU9GX0xPTkcgNAorI2VuZGlmCisKKworLyogVGhlIHNpemUgb2YgYGxvbmcgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorI2VuZGlmCisKKworLyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKyNkZWZpbmUgU0laRU9GX1NIT1JUIDIKKyNlbmRpZgorCisKKy8qIFRoZSBzaXplIG9mIGB2b2lkIConLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBTSVpFT0ZfVk9JRF9QIDQKKyNlbmRpZgorCisKKy8qIFRoZSBzaXplIG9mIGBfX2ludDY0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBTSVpFT0ZfX19JTlQ2NCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorI2RlZmluZSBTVERDX0hFQURFUlMgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3RyaW5nLmg+IGFuZCA8c3RyaW5ncy5oPi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFNUUklOR19XSVRIX1NUUklOR1MgMQorI2VuZGlmCisKKworLyogRGVmaW5lIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdGhlIGRlZmF1bHQgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgVEFSR0VUX0RFRkFVTFRfTE9OR19ET1VCTEVfMTI4ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHRoZSBgZGxfaXRlcmF0ZV9waGRyJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBUQVJHRVRfRExfSVRFUkFURV9QSERSICovCisKKy8qIERlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3RhY2sgcHJvdGVjdG9yIHN1cHBvcnQgKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgVEFSR0VUX0xJQkNfUFJPVklERVNfU1NQICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIGZsYWcgdXNlZCB0byBtYXJrIFRMUyBzZWN0aW9ucyBpZiB0aGUgZGVmYXVsdCAoYFQnKSBkb2Vzbid0CisgICB3b3JrLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBUTFNfU0VDVElPTl9BU01fRkxBRyAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIG1pcy1vcHRpbWl6ZXMgLmVoX2ZyYW1lIGRhdGEuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIFVTRV9BU19UUkFESVRJT05BTF9GT1JNQVQgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBjb2RlIGJ5IGRlZmF1bHQgdGhhdCBhc3N1bWVzIHRoYXQgdGhlIEN5Z3dpbgorICAgRExMIGV4cG9ydHMgd3JhcHBlcnMgdG8gc3VwcG9ydCBsaWJzdGRjKysgZnVuY3Rpb24gcmVwbGFjZW1lbnQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIFVTRV9DWUdXSU5fTElCU1REQ1hYX1dSQVBQRVJTICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgJ2xvbmcgbG9uZycgKG9yICdfX2ludDY0JykgaXMgd2lkZXIgdGhhbiAnbG9uZycgYnV0CisgICBzdGlsbCBlZmZpY2llbnRseSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgaGFyZHdhcmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIFVTRV9MT05HX0xPTkdfRk9SX1dJREVTVF9GQVNUX0lOVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGlmIHdlIHNob3VsZCB1c2UgbGVhZGluZyB1bmRlcnNjb3JlIG9uIDY0IGJpdCBtaW5ndyB0YXJnZXRzICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIFVTRV9NSU5HVzY0X0xFQURJTkdfVU5ERVJTQ09SRVMgKi8KKyNlbmRpZgorCisKKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAgKi8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgZGVmaW5lIF9BTExfU09VUkNFIDEKKyNlbmRpZgorLyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLworI2lmbmRlZiBfR05VX1NPVVJDRQorIyBkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2VuZGlmCisvKiBFbmFibGUgdGhyZWFkaW5nIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworIyBkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEKKyNlbmRpZgorLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gSFAgTm9uU3RvcC4gICovCisjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisjIGRlZmluZSBfVEFOREVNX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVuYWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9fRVhURU5TSU9OU19fCisjIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gYmUgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGtleSB1bmRlciB3aGljaCB0bworICAgbG9vayBmb3IgaW5zdGFsbGF0aW9uIHBhdGhzLiBUaGUgZnVsbCBrZXkgdXNlZCB3aWxsIGJlCisgICBIS0VZX0xPQ0FMX01BQ0hJTkUvU09GVFdBUkUvRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uL3tXSU4zMl9SRUdJU1RSWV9LRVl9LgorICAgVGhlIGRlZmF1bHQgaXMgdGhlIEdDQyB2ZXJzaW9uIG51bWJlci4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgV0lOMzJfUkVHSVNUUllfS0VZICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLworI2lmIGRlZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisjIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgorLyogIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOICovCisjIGVuZGlmCisjZW5kaWYKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgX0xBUkdFX0ZJTEVTICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgX01JTklYICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRvIGluIG9yZGVyIGZvciBgc3RhdCcgYW5kIG90aGVyIHRoaW5ncyB0byB3b3JrLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBfUE9TSVhfU09VUkNFICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgZm9yIFNvbGFyaXMgMi41LjEgc28gdGhlIHVpbnQzMl90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBfVUlOVDMyX1QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBmb3IgU29sYXJpcyAyLjUuMSBzbyB0aGUgdWludDY0X3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCisgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKKyAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIF9VSU5UNjRfVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIGZvciBTb2xhcmlzIDIuNS4xIHNvIHRoZSB1aW50OF90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBfVUlOVDhfVCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIGBjaGFyIConIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBjYWRkcl90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gYF9faW5saW5lX18nIG9yIGBfX2lubGluZScgaWYgdGhhdCdzIHdoYXQgdGhlIEMgY29tcGlsZXIKKyAgIGNhbGxzIGl0LCBvciB0byBub3RoaW5nIGlmICdpbmxpbmUnIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IG5hbWUuICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAxNiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBpbnQxNl90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMzIgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgaW50MzJfdCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIGludDY0X3QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSA4IGJpdHMgaWYgc3VjaAorICAgYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIGludDhfdCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSB3aWRlc3Qgc2lnbmVkIGludGVnZXIgdHlwZSBpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4gZG8KKyAgIG5vdCBkZWZpbmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIGludG1heF90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyLAorICAgaWYgc3VjaCBhIHR5cGUgZXhpc3RzLCBhbmQgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgaXQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIGludHB0cl90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIHBpZF90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvcmVzb3VyY2UuaD4gZG9lc24ndCBkZWZpbmUuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIHJsaW1fdCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiBzc2l6ZV90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMTYgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgdWludDE2X3QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAzMiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiB1aW50MzJfdCAqLworI2VuZGlmCisKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorLyogI3VuZGVmIHVpbnQ2NF90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgOCBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiB1aW50OF90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgdG8gdGhlIHdpZGVzdCB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgaWYgPHN0ZGludC5oPiBhbmQgPGludHR5cGVzLmg+CisgICBkbyBub3QgZGVmaW5lLiAqLworI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQKKy8qICN1bmRlZiB1aW50bWF4X3QgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2lkZSBlbm91Z2ggdG8gaG9sZCBhCisgICBwb2ludGVyLCBpZiBzdWNoIGEgdHlwZSBleGlzdHMsIGFuZCBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IGRlZmluZSBpdC4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgdWludHB0cl90ICovCisjZW5kaWYKKworCisvKiBEZWZpbmUgYXMgYGZvcmsnIGlmIGB2Zm9yaycgZG9lcyBub3Qgd29yay4gKi8KKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisvKiAjdW5kZWYgdmZvcmsgKi8KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYi1oZWFkZXItdmFycyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9iLWhlYWRlci12YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOWVmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYi1oZWFkZXItdmFycwpAQCAtMCwwICsxLDEyMSBAQAorVVNFUl9IPXRnbWF0aC5oCitIQVNIVEFCX0g9aGFzaHRhYi5oCitPQlNUQUNLX0g9b2JzdGFjay5oCitTUExBWV9UUkVFX0g9c3BsYXktdHJlZS5oCitGSUJIRUFQX0g9ZmliaGVhcC5oCitQQVJUSVRJT05fSD1wYXJ0aXRpb24uaAorRFdBUkYyX0g9ZHdhcmYyLmRlZgorWFJFR0VYX0g9eHJlZ2V4LmgKK0ZOTUFUQ0hfSD1mbm1hdGNoLmgKK0xJTktFUl9QTFVHSU5fQVBJX0g9cGx1Z2luLWFwaS5oCitMVE9fU1lNVEFCX0g9bHRvLXN5bXRhYi5oCitCQ09ORklHX0g9YmNvbmZpZy5oIGF1dG8taG9zdC5oIGFuc2lkZWNsLmgKK0NPTkZJR19IPWNvbmZpZy5oIGF1dG8taG9zdC5oIGFuc2lkZWNsLmgKK1RDT05GSUdfSD10Y29uZmlnLmggYXV0by1ob3N0LmggYW5zaWRlY2wuaAorVE1fUF9IPXRtX3AuaCBjb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oIHRtLXByZWRzLmgKK0dUTV9IPXRtLmggb3B0aW9ucy5oIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQuaCBkZWZhdWx0cy5oIGluc24tY29uc3RhbnRzLmgKK1RNX0g9dG0uaCBvcHRpb25zLmggY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oIGFhcmNoNjQtY29yZXMuZGVmCitWRUNfSD12ZWMuaCBzdGF0aXN0aWNzLmggZ2djLmggZ3R5cGUtZGVzYy5oIHN0YXRpc3RpY3MuaAorSEFTSF9UQUJMRV9IPWhhc2h0YWIuaCBoYXNoLXRhYmxlLmgKK0VYQ0VQVF9IPWV4Y2VwdC5oIGhhc2h0YWIuaAorVEFSR0VUX0g9dG0uaCBvcHRpb25zLmggY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oIGFhcmNoNjQtY29yZXMuZGVmIHRhcmdldC5oIHRhcmdldC5kZWYgdGFyZ2V0LWhvb2tzLW1hY3Jvcy5oIGluc24tbW9kZXMuaAorQ19UQVJHRVRfSD1jLWZhbWlseS9jLXRhcmdldC5oIGMtZmFtaWx5L2MtdGFyZ2V0LmRlZiB0YXJnZXQtaG9va3MtbWFjcm9zLmgKK0NPTU1PTl9UQVJHRVRfSD1jb21tb24vY29tbW9uLXRhcmdldC5oIGNvbW1vbi10YXJnZXQuZGVmIHRhcmdldC1ob29rcy1tYWNyb3MuaAorTUFDSE1PREVfSD1tYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oCitIT09LU19IPWhvb2tzLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaAorSE9TVEhPT0tTX0RFRl9IPWhvc3Rob29rcy1kZWYuaCBob29rcy5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmgKK0xBTkdIT09LU19ERUZfSD1sYW5naG9va3MtZGVmLmggaG9va3MuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oCitUQVJHRVRfREVGX0g9dGFyZ2V0LWRlZi5oIHRhcmdldC1ob29rcy1kZWYuaCBob29rcy5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggdGFyZ2hvb2tzLmgKK0NfVEFSR0VUX0RFRl9IPWMtZmFtaWx5L2MtdGFyZ2V0LWRlZi5oIGMtZmFtaWx5L2MtdGFyZ2V0LWhvb2tzLWRlZi5oIGNvcmV0eXBlcy5oIHRyZWUuaCBhbGwtdHJlZS5kZWYgdHJlZS5kZWYgYy1mYW1pbHkvYy1jb21tb24uZGVmIGNvbW1vbi10YXJnaG9va3MuaAorQ09NTU9OX1RBUkdFVF9ERUZfSD1jb21tb24vY29tbW9uLXRhcmdldC1kZWYuaCBjb21tb24vY29tbW9uLXRhcmdldC1ob29rcy1kZWYuaCBob29rcy5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmgKK1JUTF9CQVNFX0g9Y29yZXR5cGVzLmggcnRsLmggcnRsLmRlZiBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIHJlZy1ub3Rlcy5kZWYgaW5zbi1ub3Rlcy5kZWYgaGFzaHRhYi5oCitGSVhFRF9WQUxVRV9IPWZpeGVkLXZhbHVlLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBkb3VibGUtaW50LmgKK1JUTF9IPWNvcmV0eXBlcy5oIHJ0bC5oIHJ0bC5kZWYgbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCByZWctbm90ZXMuZGVmIGluc24tbm90ZXMuZGVmIGFhcmNoNjQtY29yZXMuZGVmIGdlbnJ0bC5oCitSVExfRVJST1JfSD1ydGwtZXJyb3IuaCBjb3JldHlwZXMuaCBydGwuaCBydGwuZGVmIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggcmVnLW5vdGVzLmRlZiBpbnNuLW5vdGVzLmRlZiBsaW5lLW1hcC5oIGlucHV0LmggYnZlcnNpb24uaCBkaWFnbm9zdGljLmRlZgorUkVBRF9NRF9IPWhhc2h0YWIuaCByZWFkLW1kLmgKK1BBUkFNU19IPXBhcmFtcy5oIHBhcmFtcy5kZWYKK0lOVEVSTkFMX0ZOX0g9aW50ZXJuYWwtZm4uaCBpbnRlcm5hbC1mbi5kZWYKK1RSRUVfSD1jb3JldHlwZXMuaCB0cmVlLmggYWxsLXRyZWUuZGVmIHRyZWUuZGVmIGMtZmFtaWx5L2MtY29tbW9uLmRlZiBhYXJjaDY0LWNvcmVzLmRlZiByZWFsLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBmaXhlZC12YWx1ZS5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZG91YmxlLWludC5oCitSRUdTRVRfSD1yZWdzZXQuaCBiaXRtYXAuaCBoYXNodGFiLmggc3RhdGlzdGljcy5oIGhhcmQtcmVnLXNldC5oCitCQVNJQ19CTE9DS19IPWJhc2ljLWJsb2NrLmggcHJlZGljdC5oIHByZWRpY3QuZGVmIHZlYy5oIHN0YXRpc3RpY3MuaCBnZ2MuaCBndHlwZS1kZXNjLmggc3RhdGlzdGljcy5oIGZ1bmN0aW9uLmggbGluZS1tYXAuaCBpbnB1dC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggY2ZnLWZsYWdzLmRlZiBjZmdob29rcy5oCitHSU1QTEVfSD1naW1wbGUuaCBnaW1wbGUuZGVmIGdzc3RydWN0LmRlZiBwb2ludGVyLXNldC5oIHZlYy5oIHN0YXRpc3RpY3MuaCBnZ2MuaCBndHlwZS1kZXNjLmggc3RhdGlzdGljcy5oIGdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmggYmFzaWMtYmxvY2suaCBwcmVkaWN0LmggcHJlZGljdC5kZWYgdmVjLmggc3RhdGlzdGljcy5oIGdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmggZnVuY3Rpb24uaCBhYXJjaDY0LWNvcmVzLmRlZiByZWFsLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBmaXhlZC12YWx1ZS5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZG91YmxlLWludC5oIHRyZWUtc3NhLW9wZXJhbmRzLmggdHJlZS1zc2EtYWxpYXMuaCBpbnRlcm5hbC1mbi5oIGludGVybmFsLWZuLmRlZgorVFJBTlNfTUVNX0g9dHJhbnMtbWVtLmgKK0dDT1ZfSU9fSD1nY292LWlvLmggZ2Nvdi1pb3YuaCBhdXRvLWhvc3QuaAorQ09WRVJBR0VfSD1jb3ZlcmFnZS5oIGdjb3YtaW8uaCBnY292LWlvdi5oIGF1dG8taG9zdC5oCitERU1BTkdMRV9IPWRlbWFuZ2xlLmgKK1JFQ09HX0g9cmVjb2cuaAorQUxJQVNfSD1hbGlhcy5oCitFTUlUX1JUTF9IPWVtaXQtcnRsLmgKK0ZMQUdTX0g9ZmxhZ3MuaCBmbGFnLXR5cGVzLmggb3B0aW9ucy5oIGZsYWctdHlwZXMuaCBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW9wdHMuaCBhYXJjaDY0LWNvcmVzLmRlZgorT1BUSU9OU19IPW9wdGlvbnMuaCBmbGFnLXR5cGVzLmggY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1vcHRzLmggYWFyY2g2NC1jb3Jlcy5kZWYKK0ZVTkNUSU9OX0g9ZnVuY3Rpb24uaCBsaW5lLW1hcC5oIGlucHV0LmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaAorRVhQUl9IPWV4cHIuaCBpbnNuLWNvbmZpZy5oIGZ1bmN0aW9uLmggYWFyY2g2NC1jb3Jlcy5kZWYgcmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGVtaXQtcnRsLmgKK09QVEFCU19IPW9wdGFicy5oIGluc24tY29kZXMuaCBpbnNuLW9waW5pdC5oCitSRUdTX0g9cmVncy5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggaGFyZC1yZWctc2V0LmgKK1NDSEVEX0lOVF9IPXNjaGVkLWludC5oIGluc24tYXR0ci5oIGluc24tYXR0ci1jb21tb24uaCBoYXNodGFiLmggc3RhdGlzdGljcy5oIGhhcmQtcmVnLXNldC5oCitTRUxfU0NIRURfSVJfSD1zZWwtc2NoZWQtaXIuaCBpbnNuLWF0dHIuaCBpbnNuLWF0dHItY29tbW9uLmggaGFzaHRhYi5oIHN0YXRpc3RpY3MuaCBoYXJkLXJlZy1zZXQuaAorU0VMX1NDSEVEX0RVTVBfSD1zZWwtc2NoZWQtZHVtcC5oIHNlbC1zY2hlZC1pci5oIGluc24tYXR0ci5oIGluc24tYXR0ci1jb21tb24uaCBoYXNodGFiLmggc3RhdGlzdGljcy5oIGhhcmQtcmVnLXNldC5oCitDRkdMT09QX0g9Y2ZnbG9vcC5oIGJhc2ljLWJsb2NrLmggcHJlZGljdC5oIHByZWRpY3QuZGVmIHZlYy5oIHN0YXRpc3RpY3MuaCBnZ2MuaCBndHlwZS1kZXNjLmggc3RhdGlzdGljcy5oIGZ1bmN0aW9uLmggaGFzaHRhYi5oIHN0YXRpc3RpY3MuaCBzYml0bWFwLmgKK0lQQV9VVElMU19IPWlwYS11dGlscy5oIGNvcmV0eXBlcy5oIHRyZWUuaCBhbGwtdHJlZS5kZWYgdHJlZS5kZWYgYy1mYW1pbHkvYy1jb21tb24uZGVmIHBsdWdpbi1hcGkuaCBpcy1hLmgKK0lQQV9SRUZFUkVOQ0VfSD1pcGEtcmVmZXJlbmNlLmggYml0bWFwLmggYWFyY2g2NC1jb3Jlcy5kZWYgcmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaAorQ0dSQVBIX0g9Y2dyYXBoLmggdmVjLmggc3RhdGlzdGljcy5oIGdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmggY29yZXR5cGVzLmggdHJlZS5oIGFsbC10cmVlLmRlZiB0cmVlLmRlZiBjLWZhbWlseS9jLWNvbW1vbi5kZWYgcGx1Z2luLWFwaS5oIGlzLWEuaAorREZfSD1kZi5oIGJpdG1hcC5oIGxpbmUtbWFwLmggaW5wdXQuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGNmZy1mbGFncy5kZWYgY2ZnaG9va3MuaCBhbGxvYy1wb29sLmggdGltZXZhci5oIHRpbWV2YXIuZGVmCitWQUxUUkFDS19IPXZhbHRyYWNrLmggYml0bWFwLmggaGFzaHRhYi5oIGhhc2gtdGFibGUuaAorUkVTT1VSQ0VfSD1yZXNvdXJjZS5oIGhhcmQtcmVnLXNldC5oIGRmLmggYml0bWFwLmggbGluZS1tYXAuaCBpbnB1dC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggY2ZnLWZsYWdzLmRlZiBjZmdob29rcy5oIGFsbG9jLXBvb2wuaCB0aW1ldmFyLmggdGltZXZhci5kZWYKK0RER19IPWRkZy5oIHNiaXRtYXAuaCBkZi5oIGJpdG1hcC5oIGxpbmUtbWFwLmggaW5wdXQuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGNmZy1mbGFncy5kZWYgY2ZnaG9va3MuaCBhbGxvYy1wb29sLmggdGltZXZhci5oIHRpbWV2YXIuZGVmCitHQ0NfSD1nY2MuaCB2ZXJzaW9uLmggZGlhZ25vc3RpYy1jb3JlLmggbGluZS1tYXAuaCBpbnB1dC5oIGJ2ZXJzaW9uLmggZGlhZ25vc3RpYy5kZWYKK0dHQ19IPWdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmgKK0dHQ19JTlRFUk5BTF9IPWdnYy1pbnRlcm5hbC5oIGdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmgKK1RJTUVWQVJfSD10aW1ldmFyLmggdGltZXZhci5kZWYKK0lOU05fQVRUUl9IPWluc24tYXR0ci5oIGluc24tYXR0ci1jb21tb24uaCBpbnNuLWFkZHIuaAorSU5TTl9BRERSX0g9aW5zbi1hZGRyLmgKK0NfQ09NTU9OX0g9Yy1mYW1pbHkvYy1jb21tb24uaCBjLWZhbWlseS9jLWNvbW1vbi5kZWYgY29yZXR5cGVzLmggdHJlZS5oIGFsbC10cmVlLmRlZiB0cmVlLmRlZiBjLWZhbWlseS9jLWNvbW1vbi5kZWYgbGluZS1tYXAuaCBpbnB1dC5oIGJ2ZXJzaW9uLmggZGlhZ25vc3RpYy5kZWYKK0NfUFJBR01BX0g9Yy1mYW1pbHkvYy1wcmFnbWEuaCBjcHBsaWIuaAorQ19UUkVFX0g9Yy9jLXRyZWUuaCBjLWZhbWlseS9jLWNvbW1vbi5oIGMtZmFtaWx5L2MtY29tbW9uLmRlZiBjb3JldHlwZXMuaCB0cmVlLmggYWxsLXRyZWUuZGVmIHRyZWUuZGVmIGMtZmFtaWx5L2MtY29tbW9uLmRlZiBvYnN0YWNrLmgKK1NZU1RFTV9IPXN5c3RlbS5oIGh3aW50LmggZmlsZW5hbWVzLmgKK1BSRURJQ1RfSD1wcmVkaWN0LmggcHJlZGljdC5kZWYKK0NQUExJQl9IPWNwcGxpYi5oCitJTlBVVF9IPWxpbmUtbWFwLmggaW5wdXQuaAorT1BUU19IPW9ic3RhY2suaAorREVDTlVNX0g9ZGVjaW1hbDEyOExvY2FsLmgKK0JBQ0tUUkFDRV9IPWJhY2t0cmFjZS5oCitNS0RFUFNfSD1ta2RlcHMuaAorU1lNVEFCX0g9b2JzdGFjay5oCitDUFBfSURfREFUQV9IPWNwcC1pZC1kYXRhLmgKK0NQUF9JTlRFUk5BTF9IPWNwcC1pZC1kYXRhLmgKK1RSRUVfRFVNUF9IPXRyZWUtZHVtcC5oIHNwbGF5LXRyZWUuaCBkdW1wZmlsZS5oCitUUkVFX1BBU1NfSD10cmVlLXBhc3MuaCB0aW1ldmFyLmggdGltZXZhci5kZWYgZHVtcGZpbGUuaAorVFJFRV9GTE9XX0g9dHJlZS1mbG93LmggdHJlZS1mbG93LWlubGluZS5oIHRyZWUtc3NhLW9wZXJhbmRzLmggYml0bWFwLmggYWFyY2g2NC1jb3Jlcy5kZWYgcmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaCB0cmVlLXNzYS1hbGlhcy5oCitUUkVFX1NTQV9MSVZFX0g9dHJlZS1zc2EtbGl2ZS5oIHBhcnRpdGlvbi5oCitTU0FFWFBBTkRfSD1zc2FleHBhbmQuaCB0cmVlLXNzYS1saXZlLmggcGFydGl0aW9uLmgKK1BSRVRUWV9QUklOVF9IPXByZXR0eS1wcmludC5oIG9ic3RhY2suaAorVFJFRV9QUkVUVFlfUFJJTlRfSD10cmVlLXByZXR0eS1wcmludC5oIHByZXR0eS1wcmludC5oIG9ic3RhY2suaAorR0lNUExFX1BSRVRUWV9QUklOVF9IPWdpbXBsZS1wcmV0dHktcHJpbnQuaCB0cmVlLXByZXR0eS1wcmludC5oIHByZXR0eS1wcmludC5oIG9ic3RhY2suaAorRElBR05PU1RJQ19DT1JFX0g9ZGlhZ25vc3RpYy1jb3JlLmggbGluZS1tYXAuaCBpbnB1dC5oIGJ2ZXJzaW9uLmggZGlhZ25vc3RpYy5kZWYKK0RJQUdOT1NUSUNfSD1kaWFnbm9zdGljLmggZGlhZ25vc3RpYy1jb3JlLmggb2JzdGFjay5oCitEV0FSRjJPVVRfSD1kd2FyZjJvdXQuaCBkd2FyZjIuZGVmCitDX1BSRVRUWV9QUklOVF9IPWMtZmFtaWx5L2MtcHJldHR5LXByaW50LmggcHJldHR5LXByaW50LmggYWFyY2g2NC1jb3Jlcy5kZWYgcmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaAorU0NFVl9IPXRyZWUtc2NhbGFyLWV2b2x1dGlvbi5oIGdnYy5oIGd0eXBlLWRlc2MuaCBzdGF0aXN0aWNzLmggdHJlZS1jaHJlYy5oIHBhcmFtcy5oIHBhcmFtcy5kZWYKK09NRUdBX0g9b21lZ2EuaCBwYXJhbXMuaCBwYXJhbXMuZGVmCitUUkVFX0RBVEFfUkVGX0g9dHJlZS1kYXRhLXJlZi5oIG9tZWdhLmggcGFyYW1zLmggcGFyYW1zLmRlZiBncmFwaGRzLmggdHJlZS1zY2FsYXItZXZvbHV0aW9uLmggZ2djLmggZ3R5cGUtZGVzYy5oIHN0YXRpc3RpY3MuaCB0cmVlLWNocmVjLmggcGFyYW1zLmggcGFyYW1zLmRlZgorVFJFRV9JTkxJTkVfSD10cmVlLWlubGluZS5oCitSRUFMX0g9cmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmgKK0lSQV9JTlRfSD1pcmEuaCBpcmEtaW50LmggY2ZnbG9vcC5oIGJhc2ljLWJsb2NrLmggcHJlZGljdC5oIHByZWRpY3QuZGVmIHZlYy5oIHN0YXRpc3RpY3MuaCBnZ2MuaCBndHlwZS1kZXNjLmggc3RhdGlzdGljcy5oIGZ1bmN0aW9uLmggaGFzaHRhYi5oIHN0YXRpc3RpY3MuaCBzYml0bWFwLmggYWxsb2MtcG9vbC5oCitMUkFfSU5UX0g9bHJhLmggYml0bWFwLmggaW5zbi1hZGRyLmggaW5zbi1jb2Rlcy5oIGxyYS1pbnQuaAorREJHQ05UX0g9ZGJnY250LmggZGJnY250LmRlZgorTFRPX1NUUkVBTUVSX0g9bHRvLXN0cmVhbWVyLmggb2JzdGFjay5oIGFsbG9jLXBvb2wuaAorREFUQV9TVFJFQU1FUl9IPWRhdGEtc3RyZWFtZXIuaCB2ZWMuaCBzdGF0aXN0aWNzLmggZ2djLmggZ3R5cGUtZGVzYy5oIHN0YXRpc3RpY3MuaCBsdG8tc3RyZWFtZXIuaCBvYnN0YWNrLmggYWxsb2MtcG9vbC5oCitHSU1QTEVfU1RSRUFNRVJfSD1naW1wbGUtc3RyZWFtZXIuaCBsdG8tc3RyZWFtZXIuaCBsaW5lLW1hcC5oIGlucHV0LmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaAorVFJFRV9TVFJFQU1FUl9IPXRyZWUtc3RyZWFtZXIuaCBjb3JldHlwZXMuaCB0cmVlLmggYWxsLXRyZWUuZGVmIHRyZWUuZGVmIGMtZmFtaWx5L2MtY29tbW9uLmRlZiBhYXJjaDY0LWNvcmVzLmRlZiByZWFsLmggbWFjaG1vZGUuaCBtb2RlLWNsYXNzZXMuZGVmIGluc24tbW9kZXMuaCBmaXhlZC12YWx1ZS5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZG91YmxlLWludC5oCitTVFJFQU1FUl9IT09LU19IPXN0cmVhbWVyLWhvb2tzLmggY29yZXR5cGVzLmggdHJlZS5oIGFsbC10cmVlLmRlZiB0cmVlLmRlZiBjLWZhbWlseS9jLWNvbW1vbi5kZWYgYWFyY2g2NC1jb3Jlcy5kZWYgcmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaAorVFJFRV9WRUNUT1JJWkVSX0g9dHJlZS12ZWN0b3JpemVyLmggdHJlZS1kYXRhLXJlZi5oIG9tZWdhLmggcGFyYW1zLmggcGFyYW1zLmRlZiBncmFwaGRzLmggdHJlZS1zY2FsYXItZXZvbHV0aW9uLmggZ2djLmggZ3R5cGUtZGVzYy5oIHN0YXRpc3RpY3MuaCB0cmVlLWNocmVjLmggcGFyYW1zLmggcGFyYW1zLmRlZiB0bS5oIG9wdGlvbnMuaCBjb25maWcvYWFyY2g2NC9hYXJjaDY0LmggYWFyY2g2NC1jb3Jlcy5kZWYgdGFyZ2V0LmggdGFyZ2V0LmRlZiB0YXJnZXQtaG9va3MtbWFjcm9zLmggaW5zbi1tb2Rlcy5oCitJUEFfUFJPUF9IPWlwYS1wcm9wLmggY29yZXR5cGVzLmggdHJlZS5oIGFsbC10cmVlLmRlZiB0cmVlLmRlZiBjLWZhbWlseS9jLWNvbW1vbi5kZWYgYWFyY2g2NC1jb3Jlcy5kZWYgcmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaCB0cmVlLXNzYS1vcGVyYW5kcy5oIHRyZWUtc3NhLWFsaWFzLmggaW50ZXJuYWwtZm4uaCBpbnRlcm5hbC1mbi5kZWYgYWxsb2MtcG9vbC5oCitJUEFfSU5MSU5FX0g9aXBhLWlubGluZS5oIGlwYS1wcm9wLmggY29yZXR5cGVzLmggdHJlZS5oIGFsbC10cmVlLmRlZiB0cmVlLmRlZiBjLWZhbWlseS9jLWNvbW1vbi5kZWYgYWFyY2g2NC1jb3Jlcy5kZWYgcmVhbC5oIG1hY2htb2RlLmggbW9kZS1jbGFzc2VzLmRlZiBpbnNuLW1vZGVzLmggZml4ZWQtdmFsdWUuaCBtYWNobW9kZS5oIG1vZGUtY2xhc3Nlcy5kZWYgaW5zbi1tb2Rlcy5oIGRvdWJsZS1pbnQuaCB0cmVlLXNzYS1vcGVyYW5kcy5oIHRyZWUtc3NhLWFsaWFzLmggaW50ZXJuYWwtZm4uaCBpbnRlcm5hbC1mbi5kZWYgYWxsb2MtcG9vbC5oCitHU1RBQl9IPWdzdGFiLmggc3RhYi5kZWYKK0JJVE1BUF9IPWJpdG1hcC5oIGhhc2h0YWIuaCBzdGF0aXN0aWNzLmgKK0dDQ19QTFVHSU5fSD1nY2MtcGx1Z2luLmggaGlnaGxldi1wbHVnaW4tY29tbW9uLmggcGx1Z2luLmRlZiBjb25maWcuaCBhdXRvLWhvc3QuaCBoYXNodGFiLmgKK1BMVUdJTl9IPXBsdWdpbi5oIGdjYy1wbHVnaW4uaCBoaWdobGV2LXBsdWdpbi1jb21tb24uaCBwbHVnaW4uZGVmIGNvbmZpZy5oIGF1dG8taG9zdC5oIGhhc2h0YWIuaAorUExVR0lOX1ZFUlNJT05fSD1wbHVnaW4tdmVyc2lvbi5oIGNvbmZpZ2FyZ3MuaAorTElCRlVOQ1NfSD1saWJmdW5jcy5oIGhhc2h0YWIuaAorR1RGSUxFU19IPWd0LWNvdmVyYWdlLmggZ3QtY2FsbGVyLXNhdmUuaCBndC1zeW10YWIuaCBndC1hbGlhcy5oIGd0LWJpdG1hcC5oIGd0LWNzZWxpYi5oIGd0LWNncmFwaC5oIGd0LWlwYS1wcm9wLmggZ3QtaXBhLWNwLmggZ3QtZGJ4b3V0LmggZ3QtZHdhcmYyYXNtLmggZ3QtZHdhcmYyY2ZpLmggZ3QtZHdhcmYyb3V0LmggZ3QtdHJlZS12ZWN0LWdlbmVyaWMuaCBndC1kb2p1bXAuaCBndC1lbWl0LXJ0bC5oIGd0LWV4cGxvdy5oIGd0LWV4cHIuaCBndC1mdW5jdGlvbi5oIGd0LWV4Y2VwdC5oIGd0LWdjc2UuaCBndC1nb2R1bXAuaCBndC1saXN0cy5oIGd0LW9wdGFicy5oIGd0LXByb2ZpbGUuaCBndC1tY2YuaCBndC1yZWctc3RhY2suaCBndC1jZmdydGwuaCBndC1zZGJvdXQuaCBndC1zdG9yLWxheW91dC5oIGd0LXN0cmluZ3Bvb2wuaCBndC10cmVlLmggZ3QtdmFyYXNtLmggZ3QtZ2ltcGxlLmggZ3QtdHJlZS1tdWRmbGFwLmggZ3QtdHJlZS1zc2FuYW1lcy5oIGd0LXRyZWUtZWguaCBndC10cmVlLXNzYS1hZGRyZXNzLmggZ3QtdHJlZS1jZmcuaCBndC10cmVlLWRmYS5oIGd0LXRyZWUtaXRlcmF0b3IuaCBndC1naW1wbGlmeS5oIGd0LXRyZWUtc2NhbGFyLWV2b2x1dGlvbi5oIGd0LXRyZWUtcHJvZmlsZS5oIGd0LXRyZWUtbmVzdGVkLmggZ3QtdHJlZS1wYXJsb29wcy5oIGd0LW9tcC1sb3cuaCBndC10YXJnaG9va3MuaCBndC1hYXJjaDY0LmggZ3QtcGFzc2VzLmggZ3QtY2dyYXBodW5pdC5oIGd0LWNncmFwaGNsb25lcy5oIGd0LXRyZWUtc3NhLXByb3BhZ2F0ZS5oIGd0LXRyZWUtcGhpbm9kZXMuaCBndC1sdG8tc3ltdGFiLmggZ3QtdHJhbnMtbWVtLmggZ3QtYXNhbi5oIGd0LXRzYW4uaCBndC1hZGEtZGVjbC5oIGd0LWFkYS10cmFucy5oIGd0LWFkYS11dGlscy5oIGd0LWFkYS1taXNjLmggZ3QtYy1jLWxhbmcuaCBndC1jLWMtZGVjbC5oIGd0LWMtZmFtaWx5LWMtY29tbW9uLmggZ3QtYy1mYW1pbHktYy1jcHBidWlsdGluLmggZ3QtYy1mYW1pbHktYy1wcmFnbWEuaCBndC1jLWMtb2JqYy1jb21tb24uaCBndC1jLWMtcGFyc2VyLmggZ3QtY3AtcnR0aS5oIGd0LWNwLW1hbmdsZS5oIGd0LWNwLW5hbWUtbG9va3VwLmggZ3QtY3AtY2FsbC5oIGd0LWNwLWRlY2wuaCBndC1jcC1kZWNsMi5oIGd0LWNwLXB0LmggZ3QtY3AtcmVwby5oIGd0LWNwLXNlbWFudGljcy5oIGd0LWNwLXRyZWUuaCBndC1jcC1wYXJzZXIuaCBndC1jcC1tZXRob2QuaCBndC1jcC10eXBlY2syLmggZ3QtYy1mYW1pbHktYy1jb21tb24uaCBndC1jLWZhbWlseS1jLWxleC5oIGd0LWMtZmFtaWx5LWMtcHJhZ21hLmggZ3QtY3AtY2xhc3MuaCBndC1jcC1jcC1vYmpjcC1jb21tb24uaCBndC1jcC1jcC1sYW5nLmggZ3QtY3AtZXhjZXB0LmggZ3QtZm9ydHJhbi1mOTUtbGFuZy5oIGd0LWZvcnRyYW4tdHJhbnMtZGVjbC5oIGd0LWZvcnRyYW4tdHJhbnMtaW50cmluc2ljLmggZ3QtZm9ydHJhbi10cmFucy1pby5oIGd0LWZvcnRyYW4tdHJhbnMtc3RtdC5oIGd0LWZvcnRyYW4tdHJhbnMtdHlwZXMuaCBndC1nby1nby1sYW5nLmggZ3QtamF2YS1idWlsdGlucy5oIGd0LWphdmEtY2xhc3MuaCBndC1qYXZhLWNvbnN0YW50cy5oIGd0LWphdmEtZGVjbC5oIGd0LWphdmEtZXhwci5oIGd0LWphdmEtamNmLXBhcnNlLmggZ3QtamF2YS1sYW5nLmggZ3QtamF2YS1tYW5nbGUuaCBndC1qYXZhLXJlc291cmNlLmggZ3QtbHRvLWx0by1sYW5nLmggZ3QtbHRvLWx0by5oIGd0LW9iamMtb2JqYy1hY3QuaCBndC1vYmpjLW9iamMtcnVudGltZS1zaGFyZWQtc3VwcG9ydC5oIGd0LW9iamMtb2JqYy1nbnUtcnVudGltZS1hYmktMDEuaCBndC1vYmpjLW9iamMtbmV4dC1ydW50aW1lLWFiaS0wMS5oIGd0LW9iamMtb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAyLmggZ3QtYy1jLXBhcnNlci5oIGd0LWMtYy1kZWNsLmggZ3QtYy1jLW9iamMtY29tbW9uLmggZ3QtYy1mYW1pbHktYy1jb21tb24uaCBndC1jLWZhbWlseS1jLWNwcGJ1aWx0aW4uaCBndC1jLWZhbWlseS1jLXByYWdtYS5oIGd0LWNwLXJ0dGkuaCBndC1jcC1tYW5nbGUuaCBndC1jcC1uYW1lLWxvb2t1cC5oIGd0LWNwLWNhbGwuaCBndC1jcC1kZWNsLmggZ3QtY3AtZGVjbDIuaCBndC1jcC1wdC5oIGd0LWNwLXJlcG8uaCBndC1jcC1zZW1hbnRpY3MuaCBndC1jcC10cmVlLmggZ3QtY3AtcGFyc2VyLmggZ3QtY3AtbWV0aG9kLmggZ3QtY3AtdHlwZWNrMi5oIGd0LWMtZmFtaWx5LWMtY29tbW9uLmggZ3QtYy1mYW1pbHktYy1sZXguaCBndC1jLWZhbWlseS1jLXByYWdtYS5oIGd0LWNwLWNsYXNzLmggZ3QtY3AtY3Atb2JqY3AtY29tbW9uLmggZ3Qtb2JqYy1vYmpjLWFjdC5oIGd0LW9iamMtb2JqYy1ydW50aW1lLXNoYXJlZC1zdXBwb3J0LmggZ3Qtb2JqYy1vYmpjLWdudS1ydW50aW1lLWFiaS0wMS5oIGd0LW9iamMtb2JqYy1uZXh0LXJ1bnRpbWUtYWJpLTAxLmggZ3Qtb2JqYy1vYmpjLW5leHQtcnVudGltZS1hYmktMDIuaCBndC1jLWZhbWlseS1jLWNwcGJ1aWx0aW4uaAorR1RGSUxFU19MQU5HX0g9Z3R5cGUtYWRhLmggZ3R5cGUtYy5oIGd0eXBlLWNwLmggZ3R5cGUtZm9ydHJhbi5oIGd0eXBlLWdvLmggZ3R5cGUtamF2YS5oIGd0eXBlLWx0by5oIGd0eXBlLW9iamMuaCBndHlwZS1vYmpjcC5oCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYmFzaWMtYmxvY2suaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9iYXNpYy1ibG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZWI1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYmFzaWMtYmxvY2suaApAQCAtMCwwICsxLDk3NCBAQAorLyogRGVmaW5lIGNvbnRyb2wgZmxvdyBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBDRkcuCisgICBDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0JBU0lDX0JMT0NLX0gKKyNkZWZpbmUgR0NDX0JBU0lDX0JMT0NLX0gKKworI2luY2x1ZGUgInByZWRpY3QuaCIKKyNpbmNsdWRlICJ2ZWMuaCIKKyNpbmNsdWRlICJmdW5jdGlvbi5oIgorCisvKiBUeXBlIHdlIHVzZSB0byBob2xkIGJhc2ljIGJsb2NrIGNvdW50ZXJzLiAgU2hvdWxkIGJlIGF0IGxlYXN0CisgICA2NGJpdC4gIEFsdGhvdWdoIGEgY291bnRlciBjYW5ub3QgYmUgbmVnYXRpdmUsIHdlIHVzZSBhIHNpZ25lZAorICAgdHlwZSwgYmVjYXVzZSBlcnJvbmVvdXMgbmVnYXRpdmUgY291bnRzIGNhbiBiZSBnZW5lcmF0ZWQgd2hlbiB0aGUKKyAgIGZsb3cgZ3JhcGggaXMgbWFuaXB1bGF0ZWQgYnkgdmFyaW91cyBvcHRpbWl6YXRpb25zLiAgQSBzaWduZWQgdHlwZQorICAgbWFrZXMgdGhvc2UgZWFzeSB0byBkZXRlY3QuICAqLwordHlwZWRlZiBIT1NUX1dJREVTVF9JTlQgZ2Nvdl90eXBlOwordHlwZWRlZiB1bnNpZ25lZCBIT1NUX1dJREVTVF9JTlQgZ2Nvdl90eXBlX3Vuc2lnbmVkOworCisvKiBDb250cm9sIGZsb3cgZWRnZSBpbmZvcm1hdGlvbi4gICovCitzdHJ1Y3QgR1RZKCh1c2VyKSkgZWRnZV9kZWYgeworICAvKiBUaGUgdHdvIGJsb2NrcyBhdCB0aGUgZW5kcyBvZiB0aGUgZWRnZS4gICovCisgIGJhc2ljX2Jsb2NrIHNyYzsKKyAgYmFzaWNfYmxvY2sgZGVzdDsKKworICAvKiBJbnN0cnVjdGlvbnMgcXVldWVkIG9uIHRoZSBlZGdlLiAgKi8KKyAgdW5pb24gZWRnZV9kZWZfaW5zbnMgeworICAgIGdpbXBsZV9zZXEgZzsKKyAgICBydHggcjsKKyAgfSBpbnNuczsKKworICAvKiBBdXhpbGlhcnkgaW5mbyBzcGVjaWZpYyB0byBhIHBhc3MuICAqLworICBQVFIgYXV4OworCisgIC8qIExvY2F0aW9uIG9mIGFueSBnb3RvIGltcGxpY2l0IGluIHRoZSBlZGdlLiAgKi8KKyAgbG9jYXRpb25fdCBnb3RvX2xvY3VzOworCisgIC8qIFRoZSBpbmRleCBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGlzIGVkZ2UgaW4gdGhlIGVkZ2UgdmVjdG9yCisgICAgIGRlc3QtPnByZWRzLiAgKi8KKyAgdW5zaWduZWQgaW50IGRlc3RfaWR4OworCisgIGludCBmbGFnczsJCQkvKiBzZWUgY2ZnLWZsYWdzLmRlZiAqLworICBpbnQgcHJvYmFiaWxpdHk7CQkvKiBiaWFzZWQgYnkgUkVHX0JSX1BST0JfQkFTRSAqLworICBnY292X3R5cGUgY291bnQ7CQkvKiBFeHBlY3RlZCBudW1iZXIgb2YgZXhlY3V0aW9ucyBjYWxjdWxhdGVkCisJCQkJICAgaW4gcHJvZmlsZS5jICAqLworfTsKKworCisvKiBHYXJiYWdlIGNvbGxlY3Rpb24gYW5kIFBDSCBzdXBwb3J0IGZvciBlZGdlX2RlZi4gICovCitleHRlcm4gdm9pZCBndF9nZ2NfbXggKGVkZ2VfZGVmICplKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9ueCAoZWRnZV9kZWYgKmUpOworZXh0ZXJuIHZvaWQgZ3RfcGNoX254IChlZGdlX2RlZiAqZSwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKKworLyogTWFza3MgZm9yIGVkZ2UuZmxhZ3MuICAqLworI2RlZmluZSBERUZfRURHRV9GTEFHKE5BTUUsSURYKSBFREdFXyMjTkFNRSA9IDEgPDwgSURYICwKK2VudW0gY2ZnX2VkZ2VfZmxhZ3MgeworI2luY2x1ZGUgImNmZy1mbGFncy5kZWYiCisgIExBU1RfQ0ZHX0VER0VfRkxBRwkJLyogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIEVER0VfQUxMX0ZMQUdTICovCit9OworI3VuZGVmIERFRl9FREdFX0ZMQUcKKworLyogQml0IG1hc2sgZm9yIGFsbCBlZGdlIGZsYWdzLiAgKi8KKyNkZWZpbmUgRURHRV9BTExfRkxBR1MJCSgoTEFTVF9DRkdfRURHRV9GTEFHIC0gMSkgKiAyIC0gMSkKKworLyogVGhlIGZvbGxvd2luZyBmb3VyIGZsYWdzIGFsbCBpbmRpY2F0ZSBzb21ldGhpbmcgc3BlY2lhbCBhYm91dCBhbiBlZGdlLgorICAgVGVzdCB0aGUgZWRnZSBmbGFncyBvbiBFREdFX0NPTVBMRVggdG8gZGV0ZWN0IGFsbCBmb3JtcyBvZiAic3RyYW5nZSIKKyAgIGNvbnRyb2wgZmxvdyB0cmFuc2ZlcnMuICAqLworI2RlZmluZSBFREdFX0NPTVBMRVggXAorICAoRURHRV9BQk5PUk1BTCB8IEVER0VfQUJOT1JNQUxfQ0FMTCB8IEVER0VfRUggfCBFREdFX1BSRVNFUlZFKQorCisvKiBDb3VudGVyIHN1bW1hcnkgZnJvbSB0aGUgbGFzdCBzZXQgb2YgY292ZXJhZ2UgY291bnRzIHJlYWQgYnkKKyAgIHByb2ZpbGUuYy4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IGdjb3ZfY3RyX3N1bW1hcnkgKnByb2ZpbGVfaW5mbzsKKworLyogV29ya2luZyBzZXQgc2l6ZSBzdGF0aXN0aWNzIGZvciBhIGdpdmVuIHBlcmNlbnRhZ2Ugb2YgdGhlIGVudGlyZQorICAgcHJvZmlsZSAoc3VtX2FsbCBmcm9tIHRoZSBjb3VudGVyIHN1bW1hcnkpLiAgKi8KK3R5cGVkZWYgc3RydWN0IGdjb3Zfd29ya2luZ19zZXRfaW5mbworeworICAvKiBOdW1iZXIgb2YgaG90IGNvdW50ZXJzIGluY2x1ZGVkIGluIHRoaXMgd29ya2luZyBzZXQuICAqLworICB1bnNpZ25lZCBudW1fY291bnRlcnM7CisgIC8qIFNtYWxsZXN0IGNvdW50ZXIgaW5jbHVkZWQgaW4gdGhpcyB3b3JraW5nIHNldC4gICovCisgIGdjb3ZfdHlwZSBtaW5fY291bnRlcjsKK30gZ2Nvdl93b3JraW5nX3NldF90OworCisvKiBTdHJ1Y3R1cmUgdG8gZ2F0aGVyIHN0YXRpc3RpYyBhYm91dCBwcm9maWxlIGNvbnNpc3RlbmN5LCBwZXIgcGFzcy4KKyAgIEFuIGFycmF5IG9mIHRoaXMgc3RydWN0dXJlLCBpbmRleGVkIGJ5IHBhc3Mgc3RhdGljIG51bWJlciwgaXMgYWxsb2NhdGVkCisgICBpbiBwYXNzZXMuYy4gIFRoZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBoZXJlIHNvIHRoYXQgZGlmZmVyZW50IENGRyBtb2RlcworICAgY2FuIGRvIHRoZWlyIGJvb2sta2VlcGluZyB2aWEgQ0ZHIGhvb2tzLgorCisgICBGb3IgZXZlcnkgZmllbGRbMl0sIGZpZWxkWzBdIGlzIHRoZSBjb3VudCBiZWZvcmUgdGhlIHBhc3MgcnVucywgYW5kCisgICBmaWVsZFsxXSBpcyB0aGUgcG9zdC1wYXNzIGNvdW50LiAgVGhpcyBhbGxvd3MgdXMgdG8gbW9uaXRvciB0aGUgZWZmZWN0CisgICBvZiBlYWNoIGluZGl2aWR1YWwgcGFzcyBvbiB0aGUgcHJvZmlsZSBjb25zaXN0ZW5jeS4KKyAgIAorICAgVGhpcyBzdHJ1Y3R1cmUgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgYnkgYW55dGhpbmcgb3RoZXIgdGhhbiBwYXNzZXMuYworICAgYW5kIG9uZSBDRkcgaG9vayBwZXIgQ0ZHIG1vZGUuICAqLworc3RydWN0IHByb2ZpbGVfcmVjb3JkCit7CisgIC8qIFRoZSBudW1iZXIgb2YgYmFzaWMgYmxvY2tzIHdoZXJlIHN1bShmcmVxKSBvZiB0aGUgYmxvY2sncyBwcmVkZWNlc3NvcnMKKyAgICAgZG9lc24ndCBtYXRjaCByZWFzb25hYmx5IHdlbGwgd2l0aCB0aGUgaW5jb21pbmcgZnJlcXVlbmN5LiAgKi8KKyAgaW50IG51bV9taXNtYXRjaGVkX2ZyZXFfaW5bMl07CisgIC8qIExpa2V3aXNlIGZvciBhIGJhc2ljIGJsb2NrJ3Mgc3VjY2Vzc29ycy4gICovCisgIGludCBudW1fbWlzbWF0Y2hlZF9mcmVxX291dFsyXTsKKyAgLyogVGhlIG51bWJlciBvZiBiYXNpYyBibG9ja3Mgd2hlcmUgc3VtKGNvdW50KSBvZiB0aGUgYmxvY2sncyBwcmVkZWNlc3NvcnMKKyAgICAgZG9lc24ndCBtYXRjaCByZWFzb25hYmx5IHdlbGwgd2l0aCB0aGUgaW5jb21pbmcgZnJlcXVlbmN5LiAgKi8KKyAgaW50IG51bV9taXNtYXRjaGVkX2NvdW50X2luWzJdOworICAvKiBMaWtld2lzZSBmb3IgYSBiYXNpYyBibG9jaydzIHN1Y2Nlc3NvcnMuICAqLworICBpbnQgbnVtX21pc21hdGNoZWRfY291bnRfb3V0WzJdOworICAvKiBBIHdlaWdodGVkIGNvc3Qgb2YgdGhlIHJ1bi10aW1lIG9mIHRoZSBmdW5jdGlvbiBib2R5LiAgKi8KKyAgZ2Nvdl90eXBlIHRpbWVbMl07CisgIC8qIEEgd2VpZ2h0ZWQgY29zdCBvZiB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gYm9keS4gICovCisgIGludCBzaXplWzJdOworICAvKiBUcnVlIGlmZiB0aGlzIHBhc3MgYWN0dWFsbHkgd2FzIHJ1bi4gICovCisgIGJvb2wgcnVuOworfTsKKworLyogRGVjbGFyZWQgaW4gY2ZnbG9vcC5oLiAgKi8KK3N0cnVjdCBsb29wOworCitzdHJ1Y3QgR1RZKCgpKSBydGxfYmJfaW5mbyB7CisgIC8qIFRoZSBmaXJzdCBpbnNuIG9mIHRoZSBibG9jayBpcyBlbWJlZGRlZCBpbnRvIGJiLT5pbC54LiAgKi8KKyAgLyogVGhlIGxhc3QgaW5zbiBvZiB0aGUgYmxvY2suICAqLworICBydHggZW5kXzsKKworICAvKiBJbiBDRkdsYXlvdXQgbW9kZSBwb2ludHMgdG8gaW5zbiBub3Rlcy9qdW1wdGFibGVzIHRvIGJlIHBsYWNlZCBqdXN0IGJlZm9yZQorICAgICBhbmQgYWZ0ZXIgdGhlIGJsb2NrLiAgICovCisgIHJ0eCBoZWFkZXJfOworICBydHggZm9vdGVyXzsKK307CisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9iYl9pbmZvIHsKKyAgLyogU2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyBpbiB0aGlzIGJsb2NrLiAgKi8KKyAgZ2ltcGxlX3NlcSBzZXE7CisKKyAgLyogUEhJIG5vZGVzIGZvciB0aGlzIGJsb2NrLiAgKi8KKyAgZ2ltcGxlX3NlcSBwaGlfbm9kZXM7Cit9OworCisvKiBBIGJhc2ljIGJsb2NrIGlzIGEgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zIHdpdGggb25seSBvbmUgZW50cnkgYW5kCisgICBvbmx5IG9uZSBleGl0LiAgSWYgYW55IG9uZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBleGVjdXRlZCwgdGhleQorICAgd2lsbCBhbGwgYmUgZXhlY3V0ZWQsIGFuZCBpbiBzZXF1ZW5jZSBmcm9tIGZpcnN0IHRvIGxhc3QuCisKKyAgIFRoZXJlIG1heSBiZSBDT05EX0VYRUMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBiYXNpYyBibG9jay4gIFRoZQorICAgQ09ORF9FWEVDICppbnN0cnVjdGlvbnMqIHdpbGwgYmUgZXhlY3V0ZWQgLS0gYnV0IGlmIHRoZSBjb25kaXRpb24KKyAgIGlzIGZhbHNlIHRoZSBjb25kaXRpb25hbGx5IGV4ZWN1dGVkICpleHByZXNzaW9ucyogd2lsbCBvZiBjb3Vyc2UKKyAgIG5vdCBiZSBleGVjdXRlZC4gIFdlIGRvbid0IGNvbnNpZGVyIHRoZSBjb25kaXRpb25hbGx5IGV4ZWN1dGVkCisgICBleHByZXNzaW9uICh3aGljaCBtaWdodCBoYXZlIHNpZGUtZWZmZWN0cykgdG8gYmUgaW4gYSBzZXBhcmF0ZQorICAgYmFzaWMgYmxvY2sgYmVjYXVzZSB0aGUgcHJvZ3JhbSBjb3VudGVyIHdpbGwgYWx3YXlzIGJlIGF0IHRoZSBzYW1lCisgICBsb2NhdGlvbiBhZnRlciB0aGUgQ09ORF9FWEVDIGluc3RydWN0aW9uLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlCisgICBjb25kaXRpb24gaXMgdHJ1ZSBvciBub3QuCisKKyAgIEJhc2ljIGJsb2NrcyBuZWVkIG5vdCBzdGFydCB3aXRoIGEgbGFiZWwgbm9yIGVuZCB3aXRoIGEganVtcCBpbnNuLgorICAgRm9yIGV4YW1wbGUsIGEgcHJldmlvdXMgYmFzaWMgYmxvY2sgbWF5IGp1c3QgImNvbmRpdGlvbmFsbHkgZmFsbCIKKyAgIGludG8gdGhlIHN1Y2NlZWRpbmcgYmFzaWMgYmxvY2ssIGFuZCB0aGUgbGFzdCBiYXNpYyBibG9jayBuZWVkIG5vdAorICAgZW5kIHdpdGggYSBqdW1wIGluc24uICBCbG9jayAwIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgZW50cnkgYmxvY2suCisKKyAgIEEgYmFzaWMgYmxvY2sgYmVnaW5uaW5nIHdpdGggdHdvIGxhYmVscyBjYW5ub3QgaGF2ZSBub3RlcyBiZXR3ZWVuCisgICB0aGUgbGFiZWxzLgorCisgICBEYXRhIGZvciBqdW1wIHRhYmxlcyBhcmUgc3RvcmVkIGluIGp1bXBfaW5zbnMgdGhhdCBvY2N1ciBpbiBubworICAgYmFzaWMgYmxvY2sgZXZlbiB0aG91Z2ggdGhlc2UgaW5zbnMgY2FuIGZvbGxvdyBvciBwcmVjZWRlIGluc25zIGluCisgICBiYXNpYyBibG9ja3MuICAqLworCisvKiBCYXNpYyBibG9jayBpbmZvcm1hdGlvbiBpbmRleGVkIGJ5IGJsb2NrIG51bWJlci4gICovCitzdHJ1Y3QgR1RZKChjaGFpbl9uZXh0ICgiJWgubmV4dF9iYiIpLCBjaGFpbl9wcmV2ICgiJWgucHJldl9iYiIpKSkgYmFzaWNfYmxvY2tfZGVmIHsKKyAgLyogVGhlIGVkZ2VzIGludG8gYW5kIG91dCBvZiB0aGUgYmxvY2suICAqLworICB2ZWM8ZWRnZSwgdmFfZ2M+ICpwcmVkczsKKyAgdmVjPGVkZ2UsIHZhX2djPiAqc3VjY3M7CisKKyAgLyogQXV4aWxpYXJ5IGluZm8gc3BlY2lmaWMgdG8gYSBwYXNzLiAgKi8KKyAgUFRSIEdUWSAoKHNraXAgKCIiKSkpIGF1eDsKKworICAvKiBJbm5lcm1vc3QgbG9vcCBjb250YWluaW5nIHRoZSBibG9jay4gICovCisgIHN0cnVjdCBsb29wICpsb29wX2ZhdGhlcjsKKworICAvKiBUaGUgZG9taW5hbmNlIGFuZCBwb3N0ZG9taW5hbmNlIGluZm9ybWF0aW9uIG5vZGUuICAqLworICBzdHJ1Y3QgZXRfbm9kZSAqIEdUWSAoKHNraXAgKCIiKSkpIGRvbVsyXTsKKworICAvKiBQcmV2aW91cyBhbmQgbmV4dCBibG9ja3MgaW4gdGhlIGNoYWluLiAgKi8KKyAgYmFzaWNfYmxvY2sgcHJldl9iYjsKKyAgYmFzaWNfYmxvY2sgbmV4dF9iYjsKKworICB1bmlvbiBiYXNpY19ibG9ja19pbF9kZXBlbmRlbnQgeworICAgICAgc3RydWN0IGdpbXBsZV9iYl9pbmZvIEdUWSAoKHRhZyAoIjAiKSkpIGdpbXBsZTsKKyAgICAgIHN0cnVjdCB7CisgICAgICAgIHJ0eCBoZWFkXzsKKyAgICAgICAgc3RydWN0IHJ0bF9iYl9pbmZvICogcnRsOworICAgICAgfSBHVFkgKCh0YWcgKCIxIikpKSB4OworICAgIH0gR1RZICgoZGVzYyAoIigoJTEuZmxhZ3MgJiBCQl9SVEwpICE9IDApIikpKSBpbDsKKworICAvKiBWYXJpb3VzIGZsYWdzLiAgU2VlIGNmZy1mbGFncy5kZWYuICAqLworICBpbnQgZmxhZ3M7CisKKyAgLyogVGhlIGluZGV4IG9mIHRoaXMgYmxvY2suICAqLworICBpbnQgaW5kZXg7CisKKyAgLyogRXhwZWN0ZWQgbnVtYmVyIG9mIGV4ZWN1dGlvbnM6IGNhbGN1bGF0ZWQgaW4gcHJvZmlsZS5jLiAgKi8KKyAgZ2Nvdl90eXBlIGNvdW50OworCisgIC8qIEV4cGVjdGVkIGZyZXF1ZW5jeS4gIE5vcm1hbGl6ZWQgdG8gYmUgaW4gcmFuZ2UgMCB0byBCQl9GUkVRX01BWC4gICovCisgIGludCBmcmVxdWVuY3k7CisKKyAgLyogVGhlIGRpc2NyaW1pbmF0b3IgZm9yIHRoaXMgYmxvY2suICBUaGUgZGlzY3JpbWluYXRvciBkaXN0aW5ndWlzaGVzCisgICAgIGFtb25nIHNldmVyYWwgYmFzaWMgYmxvY2tzIHRoYXQgc2hhcmUgYSBjb21tb24gbG9jdXMsIGFsbG93aW5nIGZvcgorICAgICBtb3JlIGFjY3VyYXRlIHNhbXBsZS1iYXNlZCBwcm9maWxpbmcuICAqLworICBpbnQgZGlzY3JpbWluYXRvcjsKK307CisKKy8qIFRoaXMgZW5zdXJlcyB0aGF0IHN0cnVjdCBnaW1wbGVfYmJfaW5mbyBpcyBzbWFsbGVyIHRoYW4KKyAgIHN0cnVjdCBydGxfYmJfaW5mbywgc28gdGhhdCBpbmxpbmluZyB0aGUgZm9ybWVyIGludG8gYmFzaWNfYmxvY2tfZGVmCisgICBpcyB0aGUgYmV0dGVyIGNob2ljZS4gICovCit0eXBlZGVmIGludCBfX2Fzc2VydF9naW1wbGVfYmJfc21hbGxlcl9ydGxfYmIKKyAgICAgICAgICAgICAgWyhpbnQpc2l6ZW9mKHN0cnVjdCBydGxfYmJfaW5mbykKKyAgICAgICAgICAgICAgIC0gKGludClzaXplb2YgKHN0cnVjdCBnaW1wbGVfYmJfaW5mbyldOworCisKKyNkZWZpbmUgQkJfRlJFUV9NQVggMTAwMDAKKworLyogTWFza3MgZm9yIGJhc2ljX2Jsb2NrLmZsYWdzLiAgKi8KKyNkZWZpbmUgREVGX0JBU0lDX0JMT0NLX0ZMQUcoTkFNRSxJRFgpIEJCXyMjTkFNRSA9IDEgPDwgSURYICwKK2VudW0gY2ZnX2JiX2ZsYWdzCit7CisjaW5jbHVkZSAiY2ZnLWZsYWdzLmRlZiIKKyAgTEFTVF9DRkdfQkJfRkxBRwkJLyogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIEJCX0FMTF9GTEFHUyAqLworfTsKKyN1bmRlZiBERUZfQkFTSUNfQkxPQ0tfRkxBRworCisvKiBCaXQgbWFzayBmb3IgYWxsIGJhc2ljIGJsb2NrIGZsYWdzLiAgKi8KKyNkZWZpbmUgQkJfQUxMX0ZMQUdTCQkoKExBU1RfQ0ZHX0JCX0ZMQUcgLSAxKSAqIDIgLSAxKQorCisvKiBCaXQgbWFzayBmb3IgYWxsIGJhc2ljIGJsb2NrIGZsYWdzIHRoYXQgbXVzdCBiZSBwcmVzZXJ2ZWQuICBUaGVzZSBhcmUKKyAgIHRoZSBiaXQgbWFza3MgdGhhdCBhcmUgKm5vdCogY2xlYXJlZCBieSBjbGVhcl9iYl9mbGFncy4gICovCisjZGVmaW5lIEJCX0ZMQUdTX1RPX1BSRVNFUlZFCQkJCQlcCisgIChCQl9ESVNBQkxFX1NDSEVEVUxFIHwgQkJfUlRMIHwgQkJfTk9OX0xPQ0FMX0dPVE9fVEFSR0VUCVwKKyAgIHwgQkJfSE9UX1BBUlRJVElPTiB8IEJCX0NPTERfUEFSVElUSU9OKQorCisvKiBEdW1teSBiaXRtYXNrIGZvciBjb252ZW5pZW5jZSBpbiB0aGUgaG90L2NvbGQgcGFydGl0aW9uaW5nIGNvZGUuICAqLworI2RlZmluZSBCQl9VTlBBUlRJVElPTkVECTAKKworLyogUGFydGl0aW9ucywgdG8gYmUgdXNlZCB3aGVuIHBhcnRpdGlvbmluZyBob3QgYW5kIGNvbGQgYmFzaWMgYmxvY2tzIGludG8KKyAgIHNlcGFyYXRlIHNlY3Rpb25zLiAgKi8KKyNkZWZpbmUgQkJfUEFSVElUSU9OKGJiKSAoKGJiKS0+ZmxhZ3MgJiAoQkJfSE9UX1BBUlRJVElPTnxCQl9DT0xEX1BBUlRJVElPTikpCisjZGVmaW5lIEJCX1NFVF9QQVJUSVRJT04oYmIsIHBhcnQpIGRvIHsJCQkJCVwKKyAgYmFzaWNfYmxvY2sgYmJfID0gKGJiKTsJCQkJCQlcCisgIGJiXy0+ZmxhZ3MgPSAoKGJiXy0+ZmxhZ3MgJiB+KEJCX0hPVF9QQVJUSVRJT058QkJfQ09MRF9QQVJUSVRJT04pKQlcCisJCXwgKHBhcnQpKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEJCX0NPUFlfUEFSVElUSU9OKGRzdGJiLCBzcmNiYikgXAorICBCQl9TRVRfUEFSVElUSU9OIChkc3RiYiwgQkJfUEFSVElUSU9OIChzcmNiYikpCisKKy8qIFN0YXRlIG9mIGRvbWluYW5jZSBpbmZvcm1hdGlvbi4gICovCisKK2VudW0gZG9tX3N0YXRlCit7CisgIERPTV9OT05FLAkJLyogTm90IGNvbXB1dGVkIGF0IGFsbC4gICovCisgIERPTV9OT19GQVNUX1FVRVJZLAkvKiBUaGUgZGF0YSBpcyBPSywgYnV0IHRoZSBmYXN0IHF1ZXJ5IGRhdGEgYXJlIG5vdCB1c2FibGUuICAqLworICBET01fT0sJCS8qIEV2ZXJ5dGhpbmcgaXMgb2suICAqLworfTsKKworLyogV2hhdCBzb3J0IG9mIHByb2ZpbGluZyBpbmZvcm1hdGlvbiB3ZSBoYXZlLiAgKi8KK2VudW0gcHJvZmlsZV9zdGF0dXNfZAoreworICBQUk9GSUxFX0FCU0VOVCwKKyAgUFJPRklMRV9HVUVTU0VELAorICBQUk9GSUxFX1JFQUQsCisgIFBST0ZJTEVfTEFTVAkvKiBMYXN0IHZhbHVlLCB1c2VkIGJ5IHByb2ZpbGUgc3RyZWFtaW5nLiAgKi8KK307CisKKy8qIEEgc3RydWN0dXJlIHRvIGdyb3VwIGFsbCB0aGUgcGVyLWZ1bmN0aW9uIGNvbnRyb2wgZmxvdyBncmFwaCBkYXRhLgorICAgVGhlIHhfKiBwcmVmaXhpbmcgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb3RoZXJ3aXNlIHJlZmVyZW5jZXMgdG8gdGhlCisgICBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3QgYXJlIGludGVycHJldGVkIGFzIHRoZSBkZWZpbmVzIGZvciBiYWNrd2FyZAorICAgc291cmNlIGNvbXBhdGliaWxpdHkgZm9sbG93aW5nIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgc3RydWN0LiAgKi8KK3N0cnVjdCBHVFkoKCkpIGNvbnRyb2xfZmxvd19ncmFwaCB7CisgIC8qIEJsb2NrIHBvaW50ZXJzIGZvciB0aGUgZXhpdCBhbmQgZW50cnkgb2YgYSBmdW5jdGlvbi4KKyAgICAgVGhlc2UgYXJlIGFsd2F5cyB0aGUgaGVhZCBhbmQgdGFpbCBvZiB0aGUgYmFzaWMgYmxvY2sgbGlzdC4gICovCisgIGJhc2ljX2Jsb2NrIHhfZW50cnlfYmxvY2tfcHRyOworICBiYXNpY19ibG9jayB4X2V4aXRfYmxvY2tfcHRyOworCisgIC8qIEluZGV4IGJ5IGJhc2ljIGJsb2NrIG51bWJlciwgZ2V0IGJhc2ljIGJsb2NrIHN0cnVjdCBpbmZvLiAgKi8KKyAgdmVjPGJhc2ljX2Jsb2NrLCB2YV9nYz4gKnhfYmFzaWNfYmxvY2tfaW5mbzsKKworICAvKiBOdW1iZXIgb2YgYmFzaWMgYmxvY2tzIGluIHRoaXMgZmxvdyBncmFwaC4gICovCisgIGludCB4X25fYmFzaWNfYmxvY2tzOworCisgIC8qIE51bWJlciBvZiBlZGdlcyBpbiB0aGlzIGZsb3cgZ3JhcGguICAqLworICBpbnQgeF9uX2VkZ2VzOworCisgIC8qIFRoZSBmaXJzdCBmcmVlIGJhc2ljIGJsb2NrIG51bWJlci4gICovCisgIGludCB4X2xhc3RfYmFzaWNfYmxvY2s7CisKKyAgLyogVUlEcyBmb3IgTEFCRUxfREVDTHMuICAqLworICBpbnQgbGFzdF9sYWJlbF91aWQ7CisKKyAgLyogTWFwcGluZyBvZiBsYWJlbHMgdG8gdGhlaXIgYXNzb2NpYXRlZCBibG9ja3MuICBBdCBwcmVzZW50CisgICAgIG9ubHkgdXNlZCBmb3IgdGhlIGdpbXBsZSBDRkcuICAqLworICB2ZWM8YmFzaWNfYmxvY2ssIHZhX2djPiAqeF9sYWJlbF90b19ibG9ja19tYXA7CisKKyAgZW51bSBwcm9maWxlX3N0YXR1c19kIHhfcHJvZmlsZV9zdGF0dXM7CisKKyAgLyogV2hldGhlciB0aGUgZG9taW5hdG9ycyBhbmQgdGhlIHBvc3Rkb21pbmF0b3JzIGFyZSBhdmFpbGFibGUuICAqLworICBlbnVtIGRvbV9zdGF0ZSB4X2RvbV9jb21wdXRlZFsyXTsKKworICAvKiBOdW1iZXIgb2YgYmFzaWMgYmxvY2tzIGluIHRoZSBkb21pbmFuY2UgdHJlZS4gICovCisgIHVuc2lnbmVkIHhfbl9iYnNfaW5fZG9tX3RyZWVbMl07CisKKyAgLyogTWF4aW1hbCBudW1iZXIgb2YgZW50aXRpZXMgaW4gdGhlIHNpbmdsZSBqdW1wdGFibGUuICBVc2VkIHRvIGVzdGltYXRlCisgICAgIGZpbmFsIGZsb3dncmFwaCBzaXplLiAgKi8KKyAgaW50IG1heF9qdW1wdGFibGVfZW50czsKK307CisKKy8qIERlZmluZXMgZm9yIGFjY2Vzc2luZyB0aGUgZmllbGRzIG9mIHRoZSBDRkcgc3RydWN0dXJlIGZvciBmdW5jdGlvbiBGTi4gICovCisjZGVmaW5lIEVOVFJZX0JMT0NLX1BUUl9GT1JfRlVOQ1RJT04oRk4pICAgICAoKEZOKS0+Y2ZnLT54X2VudHJ5X2Jsb2NrX3B0cikKKyNkZWZpbmUgRVhJVF9CTE9DS19QVFJfRk9SX0ZVTkNUSU9OKEZOKQkgICAgICgoRk4pLT5jZmctPnhfZXhpdF9ibG9ja19wdHIpCisjZGVmaW5lIGJhc2ljX2Jsb2NrX2luZm9fZm9yX2Z1bmN0aW9uKEZOKSAgICAoKEZOKS0+Y2ZnLT54X2Jhc2ljX2Jsb2NrX2luZm8pCisjZGVmaW5lIG5fYmFzaWNfYmxvY2tzX2Zvcl9mdW5jdGlvbihGTikJICAgICAoKEZOKS0+Y2ZnLT54X25fYmFzaWNfYmxvY2tzKQorI2RlZmluZSBuX2VkZ2VzX2Zvcl9mdW5jdGlvbihGTikJICAgICAoKEZOKS0+Y2ZnLT54X25fZWRnZXMpCisjZGVmaW5lIGxhc3RfYmFzaWNfYmxvY2tfZm9yX2Z1bmN0aW9uKEZOKSAgICAoKEZOKS0+Y2ZnLT54X2xhc3RfYmFzaWNfYmxvY2spCisjZGVmaW5lIGxhYmVsX3RvX2Jsb2NrX21hcF9mb3JfZnVuY3Rpb24oRk4pICAoKEZOKS0+Y2ZnLT54X2xhYmVsX3RvX2Jsb2NrX21hcCkKKyNkZWZpbmUgcHJvZmlsZV9zdGF0dXNfZm9yX2Z1bmN0aW9uKEZOKQkgICAgICgoRk4pLT5jZmctPnhfcHJvZmlsZV9zdGF0dXMpCisKKyNkZWZpbmUgQkFTSUNfQkxPQ0tfRk9SX0ZVTkNUSU9OKEZOLE4pIFwKKyAgKCgqYmFzaWNfYmxvY2tfaW5mb19mb3JfZnVuY3Rpb24oRk4pKVsoTildKQorI2RlZmluZSBTRVRfQkFTSUNfQkxPQ0tfRk9SX0ZVTkNUSU9OKEZOLE4sQkIpIFwKKyAgKCgqYmFzaWNfYmxvY2tfaW5mb19mb3JfZnVuY3Rpb24oRk4pKVsoTildID0gKEJCKSkKKworLyogRGVmaW5lcyBmb3IgdGV4dHVhbCBiYWNrd2FyZCBzb3VyY2UgY29tcGF0aWJpbGl0eS4gICovCisjZGVmaW5lIEVOVFJZX0JMT0NLX1BUUgkJKGNmdW4tPmNmZy0+eF9lbnRyeV9ibG9ja19wdHIpCisjZGVmaW5lIEVYSVRfQkxPQ0tfUFRSCQkoY2Z1bi0+Y2ZnLT54X2V4aXRfYmxvY2tfcHRyKQorI2RlZmluZSBiYXNpY19ibG9ja19pbmZvCShjZnVuLT5jZmctPnhfYmFzaWNfYmxvY2tfaW5mbykKKyNkZWZpbmUgbl9iYXNpY19ibG9ja3MJCShjZnVuLT5jZmctPnhfbl9iYXNpY19ibG9ja3MpCisjZGVmaW5lIG5fZWRnZXMJCQkoY2Z1bi0+Y2ZnLT54X25fZWRnZXMpCisjZGVmaW5lIGxhc3RfYmFzaWNfYmxvY2sJKGNmdW4tPmNmZy0+eF9sYXN0X2Jhc2ljX2Jsb2NrKQorI2RlZmluZSBsYWJlbF90b19ibG9ja19tYXAJKGNmdW4tPmNmZy0+eF9sYWJlbF90b19ibG9ja19tYXApCisjZGVmaW5lIHByb2ZpbGVfc3RhdHVzCQkoY2Z1bi0+Y2ZnLT54X3Byb2ZpbGVfc3RhdHVzKQorCisjZGVmaW5lIEJBU0lDX0JMT0NLKE4pCQkoKCpiYXNpY19ibG9ja19pbmZvKVsoTildKQorI2RlZmluZSBTRVRfQkFTSUNfQkxPQ0soTixCQikJKCgqYmFzaWNfYmxvY2tfaW5mbylbKE4pXSA9IChCQikpCisKKy8qIEZvciBpdGVyYXRpbmcgb3ZlciBiYXNpYyBibG9ja3MuICAqLworI2RlZmluZSBGT1JfQkJfQkVUV0VFTihCQiwgRlJPTSwgVE8sIERJUikgXAorICBmb3IgKEJCID0gRlJPTTsgQkIgIT0gVE87IEJCID0gQkItPkRJUikKKworI2RlZmluZSBGT1JfRUFDSF9CQl9GTihCQiwgRk4pIFwKKyAgRk9SX0JCX0JFVFdFRU4gKEJCLCAoRk4pLT5jZmctPnhfZW50cnlfYmxvY2tfcHRyLT5uZXh0X2JiLCAoRk4pLT5jZmctPnhfZXhpdF9ibG9ja19wdHIsIG5leHRfYmIpCisKKyNkZWZpbmUgRk9SX0VBQ0hfQkIoQkIpIEZPUl9FQUNIX0JCX0ZOIChCQiwgY2Z1bikKKworI2RlZmluZSBGT1JfRUFDSF9CQl9SRVZFUlNFX0ZOKEJCLCBGTikgXAorICBGT1JfQkJfQkVUV0VFTiAoQkIsIChGTiktPmNmZy0+eF9leGl0X2Jsb2NrX3B0ci0+cHJldl9iYiwgKEZOKS0+Y2ZnLT54X2VudHJ5X2Jsb2NrX3B0ciwgcHJldl9iYikKKworI2RlZmluZSBGT1JfRUFDSF9CQl9SRVZFUlNFKEJCKSBGT1JfRUFDSF9CQl9SRVZFUlNFX0ZOKEJCLCBjZnVuKQorCisvKiBGb3IgaXRlcmF0aW5nIG92ZXIgaW5zbnMgaW4gYmFzaWMgYmxvY2suICAqLworI2RlZmluZSBGT1JfQkJfSU5TTlMoQkIsIElOU04pCQkJXAorICBmb3IgKChJTlNOKSA9IEJCX0hFQUQgKEJCKTsJCQlcCisgICAgICAgKElOU04pICYmIChJTlNOKSAhPSBORVhUX0lOU04gKEJCX0VORCAoQkIpKTsJXAorICAgICAgIChJTlNOKSA9IE5FWFRfSU5TTiAoSU5TTikpCisKKy8qIEZvciBpdGVyYXRpbmcgb3ZlciBpbnNucyBpbiBiYXNpYyBibG9jayB3aGVuIHdlIG1pZ2h0IHJlbW92ZSB0aGUKKyAgIGN1cnJlbnQgaW5zbi4gICovCisjZGVmaW5lIEZPUl9CQl9JTlNOU19TQUZFKEJCLCBJTlNOLCBDVVJSKQkJCVwKKyAgZm9yICgoSU5TTikgPSBCQl9IRUFEIChCQiksIChDVVJSKSA9IChJTlNOKSA/IE5FWFRfSU5TTiAoKElOU04pKTogTlVMTDsJXAorICAgICAgIChJTlNOKSAmJiAoSU5TTikgIT0gTkVYVF9JTlNOIChCQl9FTkQgKEJCKSk7CVwKKyAgICAgICAoSU5TTikgPSAoQ1VSUiksIChDVVJSKSA9IChJTlNOKSA/IE5FWFRfSU5TTiAoKElOU04pKSA6IE5VTEwpCisKKyNkZWZpbmUgRk9SX0JCX0lOU05TX1JFVkVSU0UoQkIsIElOU04pCQlcCisgIGZvciAoKElOU04pID0gQkJfRU5EIChCQik7CQkJXAorICAgICAgIChJTlNOKSAmJiAoSU5TTikgIT0gUFJFVl9JTlNOIChCQl9IRUFEIChCQikpOwlcCisgICAgICAgKElOU04pID0gUFJFVl9JTlNOIChJTlNOKSkKKworI2RlZmluZSBGT1JfQkJfSU5TTlNfUkVWRVJTRV9TQUZFKEJCLCBJTlNOLCBDVVJSKQlcCisgIGZvciAoKElOU04pID0gQkJfRU5EIChCQiksKENVUlIpID0gKElOU04pID8gUFJFVl9JTlNOICgoSU5TTikpIDogTlVMTDsJXAorICAgICAgIChJTlNOKSAmJiAoSU5TTikgIT0gUFJFVl9JTlNOIChCQl9IRUFEIChCQikpOwlcCisgICAgICAgKElOU04pID0gKENVUlIpLCAoQ1VSUikgPSAoSU5TTikgPyBQUkVWX0lOU04gKChJTlNOKSkgOiBOVUxMKQorCisvKiBDeWNsZXMgdGhyb3VnaCBfYWxsXyBiYXNpYyBibG9ja3MsIGV2ZW4gdGhlIGZha2Ugb25lcyAoZW50cnkgYW5kCisgICBleGl0IGJsb2NrKS4gICovCisKKyNkZWZpbmUgRk9SX0FMTF9CQihCQikgXAorICBmb3IgKEJCID0gRU5UUllfQkxPQ0tfUFRSOyBCQjsgQkIgPSBCQi0+bmV4dF9iYikKKworI2RlZmluZSBGT1JfQUxMX0JCX0ZOKEJCLCBGTikgXAorICBmb3IgKEJCID0gRU5UUllfQkxPQ0tfUFRSX0ZPUl9GVU5DVElPTiAoRk4pOyBCQjsgQkIgPSBCQi0+bmV4dF9iYikKKworDAorLyogU3R1ZmYgZm9yIHJlY29yZGluZyBiYXNpYyBibG9jayBpbmZvLiAgKi8KKworI2RlZmluZSBCQl9IRUFEKEIpICAgICAgKEIpLT5pbC54LmhlYWRfCisjZGVmaW5lIEJCX0VORChCKSAgICAgICAoQiktPmlsLngucnRsLT5lbmRfCisjZGVmaW5lIEJCX0hFQURFUihCKSAgICAoQiktPmlsLngucnRsLT5oZWFkZXJfCisjZGVmaW5lIEJCX0ZPT1RFUihCKSAgICAoQiktPmlsLngucnRsLT5mb290ZXJfCisKKy8qIFNwZWNpYWwgYmxvY2sgbnVtYmVycyBbbWFya2Vyc10gZm9yIGVudHJ5IGFuZCBleGl0LgorICAgTmVpdGhlciBvZiB0aGVtIGlzIHN1cHBvc2VkIHRvIGhvbGQgYWN0dWFsIHN0YXRlbWVudHMuICAqLworI2RlZmluZSBFTlRSWV9CTE9DSyAoMCkKKyNkZWZpbmUgRVhJVF9CTE9DSyAoMSkKKworLyogVGhlIHR3byBibG9ja3MgdGhhdCBhcmUgYWx3YXlzIGluIHRoZSBjZmcuICAqLworI2RlZmluZSBOVU1fRklYRURfQkxPQ0tTICgyKQorCisjZGVmaW5lIHNldF9ibG9ja19mb3JfaW5zbihJTlNOLCBCQikgIChCTE9DS19GT1JfSU5TTiAoSU5TTikgPSBCQikKKworZXh0ZXJuIHZvaWQgY29tcHV0ZV9iYl9mb3JfaW5zbiAodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGZyZWVfYmJfZm9yX2luc24gKHZvaWQpOworZXh0ZXJuIHZvaWQgdXBkYXRlX2JiX2Zvcl9pbnNuIChiYXNpY19ibG9jayk7CisKK2V4dGVybiB2b2lkIGluc2VydF9pbnNuX29uX2VkZ2UgKHJ0eCwgZWRnZSk7CitiYXNpY19ibG9jayBzcGxpdF9lZGdlX2FuZF9pbnNlcnQgKGVkZ2UsIHJ0eCk7CisKK2V4dGVybiB2b2lkIGNvbW1pdF9vbmVfZWRnZV9pbnNlcnRpb24gKGVkZ2UgZSk7CitleHRlcm4gdm9pZCBjb21taXRfZWRnZV9pbnNlcnRpb25zICh2b2lkKTsKKworZXh0ZXJuIGVkZ2UgdW5jaGVja2VkX21ha2VfZWRnZSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLCBpbnQpOworZXh0ZXJuIGVkZ2UgY2FjaGVkX21ha2VfZWRnZSAoc2JpdG1hcCwgYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLCBpbnQpOworZXh0ZXJuIGVkZ2UgbWFrZV9lZGdlIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssIGludCk7CitleHRlcm4gZWRnZSBtYWtlX3NpbmdsZV9zdWNjX2VkZ2UgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywgaW50KTsKK2V4dGVybiB2b2lkIHJlbW92ZV9lZGdlX3JhdyAoZWRnZSk7CitleHRlcm4gdm9pZCByZWRpcmVjdF9lZGdlX3N1Y2MgKGVkZ2UsIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBlZGdlIHJlZGlyZWN0X2VkZ2Vfc3VjY19ub2R1cCAoZWRnZSwgYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgcmVkaXJlY3RfZWRnZV9wcmVkIChlZGdlLCBiYXNpY19ibG9jayk7CitleHRlcm4gYmFzaWNfYmxvY2sgY3JlYXRlX2Jhc2ljX2Jsb2NrX3N0cnVjdHVyZSAocnR4LCBydHgsIHJ0eCwgYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgY2xlYXJfYmJfZmxhZ3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgZHVtcF9iYl9pbmZvIChGSUxFICosIGJhc2ljX2Jsb2NrLCBpbnQsIGludCwgYm9vbCwgYm9vbCk7CitleHRlcm4gdm9pZCBkdW1wX2VkZ2VfaW5mbyAoRklMRSAqLCBlZGdlLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBicmllZl9kdW1wX2NmZyAoRklMRSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgY2xlYXJfZWRnZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2NhbGVfYmJzX2ZyZXF1ZW5jaWVzX2ludCAoYmFzaWNfYmxvY2sgKiwgaW50LCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBzY2FsZV9iYnNfZnJlcXVlbmNpZXNfZ2Nvdl90eXBlIChiYXNpY19ibG9jayAqLCBpbnQsIGdjb3ZfdHlwZSwKKwkJCQkJICAgICBnY292X3R5cGUpOworCisvKiBTdHJ1Y3R1cmUgdG8gZ3JvdXAgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB0byBwcm9jZXNzIElGLVRIRU4gYW5kCisgICBJRi1USEVOLUVMU0UgYmxvY2tzIGZvciB0aGUgY29uZGl0aW9uYWwgZXhlY3V0aW9uIHN1cHBvcnQuICBUaGlzCisgICBuZWVkcyB0byBiZSBpbiBhIHB1YmxpYyBmaWxlIGluIGNhc2UgdGhlIElGQ1ZUIG1hY3JvcyBjYWxsCisgICBmdW5jdGlvbnMgcGFzc2luZyB0aGUgY2VfaWZfYmxvY2sgZGF0YSBzdHJ1Y3R1cmUuICAqLworCit0eXBlZGVmIHN0cnVjdCBjZV9pZl9ibG9jaworeworICBiYXNpY19ibG9jayB0ZXN0X2JiOwkJCS8qIEZpcnN0IHRlc3QgYmxvY2suICAqLworICBiYXNpY19ibG9jayB0aGVuX2JiOwkJCS8qIFRIRU4gYmxvY2suICAqLworICBiYXNpY19ibG9jayBlbHNlX2JiOwkJCS8qIEVMU0UgYmxvY2sgb3IgTlVMTC4gICovCisgIGJhc2ljX2Jsb2NrIGpvaW5fYmI7CQkJLyogSm9pbiBUSEVOL0VMU0UgYmxvY2tzLiAgKi8KKyAgYmFzaWNfYmxvY2sgbGFzdF90ZXN0X2JiOwkJLyogTGFzdCBiYiB0byBob2xkICYmIG9yIHx8IHRlc3RzLiAgKi8KKyAgaW50IG51bV9tdWx0aXBsZV90ZXN0X2Jsb2NrczsJCS8qICMgb2YgJiYgYW5kIHx8IGJhc2ljIGJsb2Nrcy4gICovCisgIGludCBudW1fYW5kX2FuZF9ibG9ja3M7CQkvKiAjIG9mICYmIGJsb2Nrcy4gICovCisgIGludCBudW1fb3Jfb3JfYmxvY2tzOwkJCS8qICMgb2YgfHwgYmxvY2tzLiAgKi8KKyAgaW50IG51bV9tdWx0aXBsZV90ZXN0X2luc25zOwkJLyogIyBvZiBpbnNucyBpbiAmJiBhbmQgfHwgYmxvY2tzLiAgKi8KKyAgaW50IGFuZF9hbmRfcDsJCQkvKiBDb21wbGV4IHRlc3QgaXMgJiYuICAqLworICBpbnQgbnVtX3RoZW5faW5zbnM7CQkJLyogIyBvZiBpbnNucyBpbiBUSEVOIGJsb2NrLiAgKi8KKyAgaW50IG51bV9lbHNlX2luc25zOwkJCS8qICMgb2YgaW5zbnMgaW4gRUxTRSBibG9jay4gICovCisgIGludCBwYXNzOwkJCQkvKiBQYXNzIG51bWJlci4gICovCit9IGNlX2lmX2Jsb2NrX3Q7CisKKy8qIFRoaXMgc3RydWN0dXJlIG1haW50YWlucyBhbiBlZGdlIGxpc3QgdmVjdG9yLiAgKi8KKy8qIEZJWE1FOiBNYWtlIHRoaXMgYSB2ZWM8ZWRnZT4uICAqLworc3RydWN0IGVkZ2VfbGlzdAoreworICBpbnQgbnVtX2VkZ2VzOworICBlZGdlICppbmRleF90b19lZGdlOworfTsKKworLyogVGhlIGJhc2UgdmFsdWUgZm9yIGJyYW5jaCBwcm9iYWJpbGl0eSBub3RlcyBhbmQgZWRnZSBwcm9iYWJpbGl0aWVzLiAgKi8KKyNkZWZpbmUgUkVHX0JSX1BST0JfQkFTRSAgMTAwMDAKKworLyogVGhpcyBpcyB0aGUgdmFsdWUgd2hpY2ggaW5kaWNhdGVzIG5vIGVkZ2UgaXMgcHJlc2VudC4gICovCisjZGVmaW5lIEVER0VfSU5ERVhfTk9fRURHRQktMQorCisvKiBFREdFX0lOREVYIHJldHVybnMgYW4gaW50ZWdlciBpbmRleCBmb3IgYW4gZWRnZSwgb3IgRURHRV9JTkRFWF9OT19FREdFCisgICBpZiB0aGVyZSBpcyBubyBlZGdlIGJldHdlZW4gdGhlIDIgYmFzaWMgYmxvY2tzLiAgKi8KKyNkZWZpbmUgRURHRV9JTkRFWChlbCwgcHJlZCwgc3VjYykgKGZpbmRfZWRnZV9pbmRleCAoKGVsKSwgKHByZWQpLCAoc3VjYykpKQorCisvKiBJTkRFWF9FREdFX1BSRURfQkIgYW5kIElOREVYX0VER0VfU1VDQ19CQiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiYXNpYworICAgYmxvY2sgd2hpY2ggaXMgZWl0aGVyIHRoZSBwcmVkIG9yIHN1Y2MgZW5kIG9mIHRoZSBpbmRleGVkIGVkZ2UuICAqLworI2RlZmluZSBJTkRFWF9FREdFX1BSRURfQkIoZWwsIGluZGV4KQkoKGVsKS0+aW5kZXhfdG9fZWRnZVsoaW5kZXgpXS0+c3JjKQorI2RlZmluZSBJTkRFWF9FREdFX1NVQ0NfQkIoZWwsIGluZGV4KQkoKGVsKS0+aW5kZXhfdG9fZWRnZVsoaW5kZXgpXS0+ZGVzdCkKKworLyogSU5ERVhfRURHRSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWRnZS4gICovCisjZGVmaW5lIElOREVYX0VER0UoZWwsIGluZGV4KSAgICAgICAgICAgKChlbCktPmluZGV4X3RvX2VkZ2VbKGluZGV4KV0pCisKKy8qIE51bWJlciBvZiBlZGdlcyBpbiB0aGUgY29tcHJlc3NlZCBlZGdlIGxpc3QuICAqLworI2RlZmluZSBOVU1fRURHRVMoZWwpCQkJKChlbCktPm51bV9lZGdlcykKKworLyogQkIgaXMgYXNzdW1lZCB0byBjb250YWluIGNvbmRpdGlvbmFsIGp1bXAuICBSZXR1cm4gdGhlIGZhbGx0aHJ1IGVkZ2UuICAqLworI2RlZmluZSBGQUxMVEhSVV9FREdFKGJiKQkJKEVER0VfU1VDQyAoKGJiKSwgMCktPmZsYWdzICYgRURHRV9GQUxMVEhSVSBcCisJCQkJCSA/IEVER0VfU1VDQyAoKGJiKSwgMCkgOiBFREdFX1NVQ0MgKChiYiksIDEpKQorCisvKiBCQiBpcyBhc3N1bWVkIHRvIGNvbnRhaW4gY29uZGl0aW9uYWwganVtcC4gIFJldHVybiB0aGUgYnJhbmNoIGVkZ2UuICAqLworI2RlZmluZSBCUkFOQ0hfRURHRShiYikJCQkoRURHRV9TVUNDICgoYmIpLCAwKS0+ZmxhZ3MgJiBFREdFX0ZBTExUSFJVIFwKKwkJCQkJID8gRURHRV9TVUNDICgoYmIpLCAxKSA6IEVER0VfU1VDQyAoKGJiKSwgMCkpCisKKyNkZWZpbmUgUkRJVihYLFkpICgoKFgpICsgKFkpIC8gMikgLyAoWSkpCisvKiBSZXR1cm4gZXhwZWN0ZWQgZXhlY3V0aW9uIGZyZXF1ZW5jeSBvZiB0aGUgZWRnZSBFLiAgKi8KKyNkZWZpbmUgRURHRV9GUkVRVUVOQ1koZSkJCVJESVYgKChlKS0+c3JjLT5mcmVxdWVuY3kgKiAoZSktPnByb2JhYmlsaXR5LCBcCisJCQkJCSAgICAgIFJFR19CUl9QUk9CX0JBU0UpCisKKy8qIFJldHVybiBub256ZXJvIGlmIGVkZ2UgaXMgY3JpdGljYWwuICAqLworI2RlZmluZSBFREdFX0NSSVRJQ0FMX1AoZSkJCShFREdFX0NPVU5UICgoZSktPnNyYy0+c3VjY3MpID49IDIgXAorCQkJCQkgJiYgRURHRV9DT1VOVCAoKGUpLT5kZXN0LT5wcmVkcykgPj0gMikKKworI2RlZmluZSBFREdFX0NPVU5UKGV2KQkJCXZlY19zYWZlX2xlbmd0aCAoZXYpCisjZGVmaW5lIEVER0VfSShldixpKQkJCSgqZXYpWyhpKV0KKyNkZWZpbmUgRURHRV9QUkVEKGJiLGkpCQkJKCooYmIpLT5wcmVkcylbKGkpXQorI2RlZmluZSBFREdFX1NVQ0MoYmIsaSkJCQkoKihiYiktPnN1Y2NzKVsoaSldCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBCQiBoYXMgcHJlY2lzZWx5IG9uZSBzdWNjZXNzb3IuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK3NpbmdsZV9zdWNjX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiKQoreworICByZXR1cm4gRURHRV9DT1VOVCAoYmItPnN1Y2NzKSA9PSAxOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgQkIgaGFzIHByZWNpc2VseSBvbmUgcHJlZGVjZXNzb3IuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK3NpbmdsZV9wcmVkX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiKQoreworICByZXR1cm4gRURHRV9DT1VOVCAoYmItPnByZWRzKSA9PSAxOworfQorCisvKiBSZXR1cm5zIHRoZSBzaW5nbGUgc3VjY2Vzc29yIGVkZ2Ugb2YgYmFzaWMgYmxvY2sgQkIuICBBYm9ydHMgaWYKKyAgIEJCIGRvZXMgbm90IGhhdmUgZXhhY3RseSBvbmUgc3VjY2Vzc29yLiAgKi8KKworc3RhdGljIGlubGluZSBlZGdlCitzaW5nbGVfc3VjY19lZGdlIChjb25zdF9iYXNpY19ibG9jayBiYikKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoc2luZ2xlX3N1Y2NfcCAoYmIpKTsKKyAgcmV0dXJuIEVER0VfU1VDQyAoYmIsIDApOworfQorCisvKiBSZXR1cm5zIHRoZSBzaW5nbGUgcHJlZGVjZXNzb3IgZWRnZSBvZiBiYXNpYyBibG9jayBCQi4gIEFib3J0cworICAgaWYgQkIgZG9lcyBub3QgaGF2ZSBleGFjdGx5IG9uZSBwcmVkZWNlc3Nvci4gICovCisKK3N0YXRpYyBpbmxpbmUgZWRnZQorc2luZ2xlX3ByZWRfZWRnZSAoY29uc3RfYmFzaWNfYmxvY2sgYmIpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGJiKSk7CisgIHJldHVybiBFREdFX1BSRUQgKGJiLCAwKTsKK30KKworLyogUmV0dXJucyB0aGUgc2luZ2xlIHN1Y2Nlc3NvciBibG9jayBvZiBiYXNpYyBibG9jayBCQi4gIEFib3J0cworICAgaWYgQkIgZG9lcyBub3QgaGF2ZSBleGFjdGx5IG9uZSBzdWNjZXNzb3IuICAqLworCitzdGF0aWMgaW5saW5lIGJhc2ljX2Jsb2NrCitzaW5nbGVfc3VjYyAoY29uc3RfYmFzaWNfYmxvY2sgYmIpCit7CisgIHJldHVybiBzaW5nbGVfc3VjY19lZGdlIChiYiktPmRlc3Q7Cit9CisKKy8qIFJldHVybnMgdGhlIHNpbmdsZSBwcmVkZWNlc3NvciBibG9jayBvZiBiYXNpYyBibG9jayBCQi4gIEFib3J0cworICAgaWYgQkIgZG9lcyBub3QgaGF2ZSBleGFjdGx5IG9uZSBwcmVkZWNlc3Nvci4qLworCitzdGF0aWMgaW5saW5lIGJhc2ljX2Jsb2NrCitzaW5nbGVfcHJlZCAoY29uc3RfYmFzaWNfYmxvY2sgYmIpCit7CisgIHJldHVybiBzaW5nbGVfcHJlZF9lZGdlIChiYiktPnNyYzsKK30KKworLyogSXRlcmF0b3Igb2JqZWN0IGZvciBlZGdlcy4gICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW5kZXg7CisgIHZlYzxlZGdlLCB2YV9nYz4gKipjb250YWluZXI7Cit9IGVkZ2VfaXRlcmF0b3I7CisKK3N0YXRpYyBpbmxpbmUgdmVjPGVkZ2UsIHZhX2djPiAqCitlaV9jb250YWluZXIgKGVkZ2VfaXRlcmF0b3IgaSkKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaS5jb250YWluZXIpOworICByZXR1cm4gKmkuY29udGFpbmVyOworfQorCisjZGVmaW5lIGVpX3N0YXJ0KGl0ZXIpIGVpX3N0YXJ0XzEgKCYoaXRlcikpCisjZGVmaW5lIGVpX2xhc3QoaXRlcikgZWlfbGFzdF8xICgmKGl0ZXIpKQorCisvKiBSZXR1cm4gYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIGFuIGVkZ2UgdmVjdG9yLiAgKi8KK3N0YXRpYyBpbmxpbmUgZWRnZV9pdGVyYXRvcgorZWlfc3RhcnRfMSAodmVjPGVkZ2UsIHZhX2djPiAqKmV2KQoreworICBlZGdlX2l0ZXJhdG9yIGk7CisKKyAgaS5pbmRleCA9IDA7CisgIGkuY29udGFpbmVyID0gZXY7CisKKyAgcmV0dXJuIGk7Cit9CisKKy8qIFJldHVybiBhbiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGVkZ2UKKyAgIHZlY3Rvci4gICovCitzdGF0aWMgaW5saW5lIGVkZ2VfaXRlcmF0b3IKK2VpX2xhc3RfMSAodmVjPGVkZ2UsIHZhX2djPiAqKmV2KQoreworICBlZGdlX2l0ZXJhdG9yIGk7CisKKyAgaS5pbmRleCA9IEVER0VfQ09VTlQgKCpldikgLSAxOworICBpLmNvbnRhaW5lciA9IGV2OworCisgIHJldHVybiBpOworfQorCisvKiBJcyB0aGUgaXRlcmF0b3IgYGknIGF0IHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlPyAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorZWlfZW5kX3AgKGVkZ2VfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIChpLmluZGV4ID09IEVER0VfQ09VTlQgKGVpX2NvbnRhaW5lciAoaSkpKTsKK30KKworLyogSXMgdGhlIGl0ZXJhdG9yIGBpJyBhdCBvbmUgcG9zaXRpb24gYmVmb3JlIHRoZSBlbmQgb2YgdGhlCisgICBzZXF1ZW5jZT8gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2VpX29uZV9iZWZvcmVfZW5kX3AgKGVkZ2VfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIChpLmluZGV4ICsgMSA9PSBFREdFX0NPVU5UIChlaV9jb250YWluZXIgKGkpKSk7Cit9CisKKy8qIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGVsZW1lbnQuICAqLworc3RhdGljIGlubGluZSB2b2lkCitlaV9uZXh0IChlZGdlX2l0ZXJhdG9yICppKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChpLT5pbmRleCA8IEVER0VfQ09VTlQgKGVpX2NvbnRhaW5lciAoKmkpKSk7CisgIGktPmluZGV4Kys7Cit9CisKKy8qIE1vdmUgdGhlIGl0ZXJhdG9yIHRvIHRoZSBwcmV2aW91cyBlbGVtZW50LiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZWlfcHJldiAoZWRnZV9pdGVyYXRvciAqaSkKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaS0+aW5kZXggPiAwKTsKKyAgaS0+aW5kZXgtLTsKK30KKworLyogUmV0dXJuIHRoZSBlZGdlIHBvaW50ZWQgdG8gYnkgdGhlIGl0ZXJhdG9yIGBpJy4gICovCitzdGF0aWMgaW5saW5lIGVkZ2UKK2VpX2VkZ2UgKGVkZ2VfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIEVER0VfSSAoZWlfY29udGFpbmVyIChpKSwgaS5pbmRleCk7Cit9CisKKy8qIFJldHVybiBhbiBlZGdlIHBvaW50ZWQgdG8gYnkgdGhlIGl0ZXJhdG9yLiAgRG8gaXQgc2FmZWx5IHNvIHRoYXQKKyAgIE5VTEwgaXMgcmV0dXJuZWQgd2hlbiB0aGUgaXRlcmF0b3IgaXMgcG9pbnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUKKyAgIHNlcXVlbmNlLiAgKi8KK3N0YXRpYyBpbmxpbmUgZWRnZQorZWlfc2FmZV9lZGdlIChlZGdlX2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiAhZWlfZW5kX3AgKGkpID8gZWlfZWRnZSAoaSkgOiBOVUxMOworfQorCisvKiBSZXR1cm4gMSBpZiB3ZSBzaG91bGQgY29udGludWUgdG8gaXRlcmF0ZS4gIFJldHVybiAwIG90aGVyd2lzZS4KKyAgICpFZGdlIFAgaXMgc2V0IHRvIHRoZSBuZXh0IGVkZ2UgaWYgd2UgYXJlIHRvIGNvbnRpbnVlIHRvIGl0ZXJhdGUKKyAgIGFuZCBOVUxMIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZWlfY29uZCAoZWRnZV9pdGVyYXRvciBlaSwgZWRnZSAqcCkKK3sKKyAgaWYgKCFlaV9lbmRfcCAoZWkpKQorICAgIHsKKyAgICAgICpwID0gZWlfZWRnZSAoZWkpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgKnAgPSBOVUxMOworICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvKiBUaGlzIG1hY3JvIHNlcnZlcyBhcyBhIGNvbnZlbmllbnQgd2F5IHRvIGl0ZXJhdGUgZWFjaCBlZGdlIGluIGEKKyAgIHZlY3RvciBvZiBwcmVkZWNlc3NvciBvciBzdWNjZXNzb3IgZWRnZXMuICBJdCBtdXN0IG5vdCBiZSB1c2VkIHdoZW4KKyAgIGFuIGVsZW1lbnQgbWlnaHQgYmUgcmVtb3ZlZCBkdXJpbmcgdGhlIHRyYXZlcnNhbCwgb3RoZXJ3aXNlCisgICBlbGVtZW50cyB3aWxsIGJlIG1pc3NlZC4gIEluc3RlYWQsIHVzZSBhIGZvci1sb29wIGxpa2UgdGhhdCBzaG93bgorICAgaW4gdGhlIGZvbGxvd2luZyBwc2V1ZG8tY29kZToKKworICAgRk9SIChlaSA9IGVpX3N0YXJ0IChiYi0+c3VjY3MpOyAoZSA9IGVpX3NhZmVfZWRnZSAoZWkpKTsgKQorICAgICB7CisJSUYgKGUgIT0gdGFrZW5fZWRnZSkKKwkgIHJlbW92ZV9lZGdlIChlKTsKKwlFTFNFCisJICBlaV9uZXh0ICgmZWkpOworICAgICB9CisqLworCisjZGVmaW5lIEZPUl9FQUNIX0VER0UoRURHRSxJVEVSLEVER0VfVkVDKQlcCisgIGZvciAoKElURVIpID0gZWlfc3RhcnQgKChFREdFX1ZFQykpOwkJXAorICAgICAgIGVpX2NvbmQgKChJVEVSKSwgJihFREdFKSk7CQlcCisgICAgICAgZWlfbmV4dCAoJihJVEVSKSkpCisKKyNkZWZpbmUgQ0xFQU5VUF9FWFBFTlNJVkUJMQkvKiBEbyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSBvcHRpbWl6YXRpb25zCisJCQkJCSAgIGV4Y2VwdCBmb3IgZWRnZSBmb3J3YXJkaW5nICovCisjZGVmaW5lIENMRUFOVVBfQ1JPU1NKVU1QCTIJLyogRG8gY3Jvc3NqdW1waW5nLiAgKi8KKyNkZWZpbmUgQ0xFQU5VUF9QT1NUX1JFR1NUQUNLCTQJLyogV2UgcnVuIGFmdGVyIHJlZy1zdGFjayBhbmQgbmVlZAorCQkJCQkgICB0byBjYXJlIFJFR19ERUFEIG5vdGVzLiAgKi8KKyNkZWZpbmUgQ0xFQU5VUF9USFJFQURJTkcJOAkvKiBEbyBqdW1wIHRocmVhZGluZy4gICovCisjZGVmaW5lIENMRUFOVVBfTk9fSU5TTl9ERUwJMTYJLyogRG8gbm90IHRyeSB0byBkZWxldGUgdHJpdmlhbGx5IGRlYWQKKwkJCQkJICAgaW5zbnMuICAqLworI2RlZmluZSBDTEVBTlVQX0NGR0xBWU9VVAkzMgkvKiBEbyBjbGVhbnVwIGluIGNmZ2xheW91dCBtb2RlLiAgKi8KKyNkZWZpbmUgQ0xFQU5VUF9DRkdfQ0hBTkdFRAk2NCAgICAgIC8qIFRoZSBjYWxsZXIgY2hhbmdlZCB0aGUgQ0ZHLiAgKi8KKworLyogSW4gY2ZnYW5hbC5jICovCitleHRlcm4gdm9pZCBiaXRtYXBfaW50ZXJzZWN0aW9uX29mX3N1Y2NzIChzYml0bWFwLCBzYml0bWFwICosIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIGJpdG1hcF9pbnRlcnNlY3Rpb25fb2ZfcHJlZHMgKHNiaXRtYXAsIHNiaXRtYXAgKiwgYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgYml0bWFwX3VuaW9uX29mX3N1Y2NzIChzYml0bWFwLCBzYml0bWFwICosIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIGJpdG1hcF91bmlvbl9vZl9wcmVkcyAoc2JpdG1hcCwgc2JpdG1hcCAqLCBiYXNpY19ibG9jayk7CisKKy8qIEluIGxjbS5jICovCitleHRlcm4gc3RydWN0IGVkZ2VfbGlzdCAqcHJlX2VkZ2VfbGNtIChpbnQsIHNiaXRtYXAgKiwgc2JpdG1hcCAqLAorCQkJCSAgICAgICBzYml0bWFwICosIHNiaXRtYXAgKiwgc2JpdG1hcCAqKiwKKwkJCQkgICAgICAgc2JpdG1hcCAqKik7CitleHRlcm4gc3RydWN0IGVkZ2VfbGlzdCAqcHJlX2VkZ2VfcmV2X2xjbSAoaW50LCBzYml0bWFwICosCisJCQkJCSAgIHNiaXRtYXAgKiwgc2JpdG1hcCAqLAorCQkJCQkgICBzYml0bWFwICosIHNiaXRtYXAgKiosCisJCQkJCSAgIHNiaXRtYXAgKiopOworZXh0ZXJuIHZvaWQgY29tcHV0ZV9hdmFpbGFibGUgKHNiaXRtYXAgKiwgc2JpdG1hcCAqLCBzYml0bWFwICosIHNiaXRtYXAgKik7CisKKy8qIEluIHByZWRpY3QuYyAqLworZXh0ZXJuIGJvb2wgbWF5YmVfaG90X2JiX3AgKHN0cnVjdCBmdW5jdGlvbiAqLCBjb25zdF9iYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBtYXliZV9ob3RfZWRnZV9wIChlZGdlKTsKK2V4dGVybiBib29sIHByb2JhYmx5X25ldmVyX2V4ZWN1dGVkX2JiX3AgKHN0cnVjdCBmdW5jdGlvbiAqLCBjb25zdF9iYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBvcHRpbWl6ZV9iYl9mb3Jfc2l6ZV9wIChjb25zdF9iYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBvcHRpbWl6ZV9iYl9mb3Jfc3BlZWRfcCAoY29uc3RfYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfZWRnZV9mb3Jfc2l6ZV9wIChlZGdlKTsKK2V4dGVybiBib29sIG9wdGltaXplX2VkZ2VfZm9yX3NwZWVkX3AgKGVkZ2UpOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfbG9vcF9mb3Jfc2l6ZV9wIChzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBib29sIG9wdGltaXplX2xvb3BfZm9yX3NwZWVkX3AgKHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfbG9vcF9uZXN0X2Zvcl9zaXplX3AgKHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfbG9vcF9uZXN0X2Zvcl9zcGVlZF9wIChzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBib29sIGdpbXBsZV9wcmVkaWN0ZWRfYnlfcCAoY29uc3RfYmFzaWNfYmxvY2ssIGVudW0gYnJfcHJlZGljdG9yKTsKK2V4dGVybiBib29sIHJ0bF9wcmVkaWN0ZWRfYnlfcCAoY29uc3RfYmFzaWNfYmxvY2ssIGVudW0gYnJfcHJlZGljdG9yKTsKK2V4dGVybiB2b2lkIGdpbXBsZV9wcmVkaWN0X2VkZ2UgKGVkZ2UsIGVudW0gYnJfcHJlZGljdG9yLCBpbnQpOworZXh0ZXJuIHZvaWQgcnRsX3ByZWRpY3RfZWRnZSAoZWRnZSwgZW51bSBicl9wcmVkaWN0b3IsIGludCk7CitleHRlcm4gdm9pZCBwcmVkaWN0X2VkZ2VfZGVmIChlZGdlLCBlbnVtIGJyX3ByZWRpY3RvciwgZW51bSBwcmVkaWN0aW9uKTsKK2V4dGVybiB2b2lkIGd1ZXNzX291dGdvaW5nX2VkZ2VfcHJvYmFiaWxpdGllcyAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgcmVtb3ZlX3ByZWRpY3Rpb25zX2Fzc29jaWF0ZWRfd2l0aF9lZGdlIChlZGdlKTsKK2V4dGVybiBib29sIGVkZ2VfcHJvYmFiaWxpdHlfcmVsaWFibGVfcCAoY29uc3RfZWRnZSk7CitleHRlcm4gYm9vbCBicl9wcm9iX25vdGVfcmVsaWFibGVfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIHByZWRpY3RhYmxlX2VkZ2VfcCAoZWRnZSk7CisKKy8qIEluIGNmZy5jICAqLworZXh0ZXJuIHZvaWQgaW5pdF9mbG93IChzdHJ1Y3QgZnVuY3Rpb24gKik7CitleHRlcm4gdm9pZCBkZWJ1Z19iYiAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGRlYnVnX2JiX24gKGludCk7CitleHRlcm4gdm9pZCBkdW1wX2Zsb3dfaW5mbyAoRklMRSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgZXhwdW5nZV9ibG9jayAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgbGlua19ibG9jayAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHVubGlua19ibG9jayAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgY29tcGFjdF9ibG9ja3MgKHZvaWQpOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGFsbG9jX2Jsb2NrICh2b2lkKTsKK2V4dGVybiB2b2lkIGFsbG9jX2F1eF9mb3JfYmxvY2tzIChpbnQpOworZXh0ZXJuIHZvaWQgY2xlYXJfYXV4X2Zvcl9ibG9ja3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9hdXhfZm9yX2Jsb2NrcyAodm9pZCk7CitleHRlcm4gdm9pZCBhbGxvY19hdXhfZm9yX2VkZ2UgKGVkZ2UsIGludCk7CitleHRlcm4gdm9pZCBhbGxvY19hdXhfZm9yX2VkZ2VzIChpbnQpOworZXh0ZXJuIHZvaWQgY2xlYXJfYXV4X2Zvcl9lZGdlcyAodm9pZCk7CitleHRlcm4gdm9pZCBmcmVlX2F1eF9mb3JfZWRnZXMgKHZvaWQpOworCisvKiBJbiBjZmdhbmFsLmMgICovCitleHRlcm4gdm9pZCBmaW5kX3VucmVhY2hhYmxlX2Jsb2NrcyAodm9pZCk7CitleHRlcm4gYm9vbCBtYXJrX2Rmc19iYWNrX2VkZ2VzICh2b2lkKTsKK3N0cnVjdCBlZGdlX2xpc3QgKiBjcmVhdGVfZWRnZV9saXN0ICh2b2lkKTsKK3ZvaWQgZnJlZV9lZGdlX2xpc3QgKHN0cnVjdCBlZGdlX2xpc3QgKik7Cit2b2lkIHByaW50X2VkZ2VfbGlzdCAoRklMRSAqLCBzdHJ1Y3QgZWRnZV9saXN0ICopOwordm9pZCB2ZXJpZnlfZWRnZV9saXN0IChGSUxFICosIHN0cnVjdCBlZGdlX2xpc3QgKik7CitpbnQgZmluZF9lZGdlX2luZGV4IChzdHJ1Y3QgZWRnZV9saXN0ICosIGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jayk7CitlZGdlIGZpbmRfZWRnZSAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9mYWtlX2VkZ2VzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9mYWtlX2V4aXRfZWRnZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgYWRkX25vcmV0dXJuX2Zha2VfZXhpdF9lZGdlcyAodm9pZCk7CitleHRlcm4gdm9pZCBjb25uZWN0X2luZmluaXRlX2xvb3BzX3RvX2V4aXQgKHZvaWQpOworZXh0ZXJuIGludCBwb3N0X29yZGVyX2NvbXB1dGUgKGludCAqLCBib29sLCBib29sKTsKK2V4dGVybiBiYXNpY19ibG9jayBkZnNfZmluZF9kZWFkZW5kIChiYXNpY19ibG9jayk7CitleHRlcm4gaW50IGludmVydGVkX3Bvc3Rfb3JkZXJfY29tcHV0ZSAoaW50ICopOworZXh0ZXJuIGludCBwcmVfYW5kX3Jldl9wb3N0X29yZGVyX2NvbXB1dGUgKGludCAqLCBpbnQgKiwgYm9vbCk7CitleHRlcm4gaW50IGRmc19lbnVtZXJhdGVfZnJvbSAoYmFzaWNfYmxvY2ssIGludCwKKwkJCSAgICAgICBib29sICgqKShjb25zdF9iYXNpY19ibG9jaywgY29uc3Qgdm9pZCAqKSwKKwkJCSAgICAgICBiYXNpY19ibG9jayAqLCBpbnQsIGNvbnN0IHZvaWQgKik7CitleHRlcm4gdm9pZCBjb21wdXRlX2RvbWluYW5jZV9mcm9udGllcnMgKHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKik7CitleHRlcm4gYml0bWFwIGNvbXB1dGVfaWRmIChiaXRtYXAsIHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKik7CisKKy8qIEluIGNmZ3J0bC5jICAqLworZXh0ZXJuIHJ0eCBibG9ja19sYWJlbCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHJ0eCBiYl9ub3RlIChiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBwdXJnZV9hbGxfZGVhZF9lZGdlcyAodm9pZCk7CitleHRlcm4gYm9vbCBwdXJnZV9kZWFkX2VkZ2VzIChiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBmaXh1cF9hYm5vcm1hbF9lZGdlcyAodm9pZCk7CitleHRlcm4gYmFzaWNfYmxvY2sgZm9yY2Vfbm9uZmFsbHRocnVfYW5kX3JlZGlyZWN0IChlZGdlLCBiYXNpY19ibG9jaywgcnR4KTsKK2V4dGVybiBib29sIGNvbnRhaW5zX25vX2FjdGl2ZV9pbnNuX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrKTsKK2V4dGVybiBib29sIGZvcndhcmRlcl9ibG9ja19wIChjb25zdF9iYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBjYW5fZmFsbHRocnUgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jayk7CisKKy8qIEluIGNmZ2J1aWxkLmMuICAqLworZXh0ZXJuIHZvaWQgZmluZF9tYW55X3N1Yl9iYXNpY19ibG9ja3MgKHNiaXRtYXApOworZXh0ZXJuIHZvaWQgcnRsX21ha2VfZWhfZWRnZSAoc2JpdG1hcCwgYmFzaWNfYmxvY2ssIHJ0eCk7CisKK2VudW0gcmVwbGFjZV9kaXJlY3Rpb24geyBkaXJfbm9uZSwgZGlyX2ZvcndhcmQsIGRpcl9iYWNrd2FyZCwgZGlyX2JvdGggfTsKKworLyogSW4gY2ZnY2xlYW51cC5jLiAgKi8KK2V4dGVybiBib29sIGNsZWFudXBfY2ZnIChpbnQpOworZXh0ZXJuIGludCBmbG93X2ZpbmRfY3Jvc3NfanVtcCAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLCBydHggKiwgcnR4ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHJlcGxhY2VfZGlyZWN0aW9uKik7CitleHRlcm4gaW50IGZsb3dfZmluZF9oZWFkX21hdGNoaW5nX3NlcXVlbmNlIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssCisJCQkJCSAgICAgcnR4ICosIHJ0eCAqLCBpbnQpOworCitleHRlcm4gYm9vbCBkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgdXBkYXRlX2JyX3Byb2Jfbm90ZSAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgaW5zaWRlX2Jhc2ljX2Jsb2NrX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gYm9vbCBjb250cm9sX2Zsb3dfaW5zbl9wIChjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBnZXRfbGFzdF9iYl9pbnNuIChiYXNpY19ibG9jayk7CisKKy8qIEluIGRvbWluYW5jZS5jICovCisKK2VudW0gY2RpX2RpcmVjdGlvbgoreworICBDRElfRE9NSU5BVE9SUyA9IDEsCisgIENESV9QT1NUX0RPTUlOQVRPUlMgPSAyCit9OworCitleHRlcm4gZW51bSBkb21fc3RhdGUgZG9tX2luZm9fc3RhdGUgKGVudW0gY2RpX2RpcmVjdGlvbik7CitleHRlcm4gdm9pZCBzZXRfZG9tX2luZm9fYXZhaWxhYmlsaXR5IChlbnVtIGNkaV9kaXJlY3Rpb24sIGVudW0gZG9tX3N0YXRlKTsKK2V4dGVybiBib29sIGRvbV9pbmZvX2F2YWlsYWJsZV9wIChlbnVtIGNkaV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgY2FsY3VsYXRlX2RvbWluYW5jZV9pbmZvIChlbnVtIGNkaV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZnJlZV9kb21pbmFuY2VfaW5mbyAoZW51bSBjZGlfZGlyZWN0aW9uKTsKK2V4dGVybiBiYXNpY19ibG9jayBuZWFyZXN0X2NvbW1vbl9kb21pbmF0b3IgKGVudW0gY2RpX2RpcmVjdGlvbiwKKwkJCQkJICAgICBiYXNpY19ibG9jaywgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIG5lYXJlc3RfY29tbW9uX2RvbWluYXRvcl9mb3Jfc2V0IChlbnVtIGNkaV9kaXJlY3Rpb24sCisJCQkJCQkgICAgIGJpdG1hcCk7CitleHRlcm4gdm9pZCBzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jaywKKwkJCQkgICAgIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBnZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBkb21pbmF0ZWRfYnlfcCAoZW51bSBjZGlfZGlyZWN0aW9uLCBjb25zdF9iYXNpY19ibG9jaywgY29uc3RfYmFzaWNfYmxvY2spOworZXh0ZXJuIHZlYzxiYXNpY19ibG9jaz4gZ2V0X2RvbWluYXRlZF9ieSAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7CitleHRlcm4gdmVjPGJhc2ljX2Jsb2NrPiBnZXRfZG9taW5hdGVkX2J5X3JlZ2lvbiAoZW51bSBjZGlfZGlyZWN0aW9uLAorCQkJCQkJCSBiYXNpY19ibG9jayAqLAorCQkJCQkJCSB1bnNpZ25lZCk7CitleHRlcm4gdmVjPGJhc2ljX2Jsb2NrPiBnZXRfZG9taW5hdGVkX3RvX2RlcHRoIChlbnVtIGNkaV9kaXJlY3Rpb24sCisJCQkJCQkJYmFzaWNfYmxvY2ssIGludCk7CitleHRlcm4gdmVjPGJhc2ljX2Jsb2NrPiBnZXRfYWxsX2RvbWluYXRlZF9ibG9ja3MgKGVudW0gY2RpX2RpcmVjdGlvbiwKKwkJCQkJCQkgIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIGFkZF90b19kb21pbmFuY2VfaW5mbyAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBkZWxldGVfZnJvbV9kb21pbmFuY2VfaW5mbyAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7CitiYXNpY19ibG9jayByZWNvbXB1dGVfZG9taW5hdG9yIChlbnVtIGNkaV9kaXJlY3Rpb24sIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHJlZGlyZWN0X2ltbWVkaWF0ZV9kb21pbmF0b3JzIChlbnVtIGNkaV9kaXJlY3Rpb24sIGJhc2ljX2Jsb2NrLAorCQkJCQkgICBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBpdGVyYXRlX2ZpeF9kb21pbmF0b3JzIChlbnVtIGNkaV9kaXJlY3Rpb24sCisJCQkJICAgIHZlYzxiYXNpY19ibG9jaz4gLCBib29sKTsKK2V4dGVybiB2b2lkIHZlcmlmeV9kb21pbmF0b3JzIChlbnVtIGNkaV9kaXJlY3Rpb24pOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGZpcnN0X2RvbV9zb24gKGVudW0gY2RpX2RpcmVjdGlvbiwgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIG5leHRfZG9tX3NvbiAoZW51bSBjZGlfZGlyZWN0aW9uLCBiYXNpY19ibG9jayk7Cit1bnNpZ25lZCBiYl9kb21fZGZzX2luIChlbnVtIGNkaV9kaXJlY3Rpb24sIGJhc2ljX2Jsb2NrKTsKK3Vuc2lnbmVkIGJiX2RvbV9kZnNfb3V0IChlbnVtIGNkaV9kaXJlY3Rpb24sIGJhc2ljX2Jsb2NrKTsKKworZXh0ZXJuIGVkZ2UgdHJ5X3JlZGlyZWN0X2J5X3JlcGxhY2luZ19qdW1wIChlZGdlLCBiYXNpY19ibG9jaywgYm9vbCk7CitleHRlcm4gdm9pZCBicmVha19zdXBlcmJsb2NrcyAodm9pZCk7CitleHRlcm4gdm9pZCByZWxpbmtfYmxvY2tfY2hhaW4gKGJvb2wpOworZXh0ZXJuIHZvaWQgdXBkYXRlX2JiX3Byb2ZpbGVfZm9yX3RocmVhZGluZyAoYmFzaWNfYmxvY2ssIGludCwgZ2Nvdl90eXBlLCBlZGdlKTsKK2V4dGVybiB2b2lkIGluaXRfcnRsX2JiX2luZm8gKGJhc2ljX2Jsb2NrKTsKKworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9vcmlnaW5hbF9jb3B5X3RhYmxlcyAodm9pZCk7CitleHRlcm4gdm9pZCBmcmVlX29yaWdpbmFsX2NvcHlfdGFibGVzICh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9iYl9vcmlnaW5hbCAoYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBnZXRfYmJfb3JpZ2luYWwgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHNldF9iYl9jb3B5IChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGdldF9iYl9jb3B5IChiYXNpY19ibG9jayk7Cit2b2lkIHNldF9sb29wX2NvcHkgKHN0cnVjdCBsb29wICosIHN0cnVjdCBsb29wICopOworc3RydWN0IGxvb3AgKmdldF9sb29wX2NvcHkgKHN0cnVjdCBsb29wICopOworCisjaW5jbHVkZSAiY2ZnaG9va3MuaCIKKworLyogUmV0dXJuIHRydWUgd2hlbiBvbmUgb2YgdGhlIHByZWRlY2Vzc29yIGVkZ2VzIG9mIEJCIGlzIG1hcmtlZCB3aXRoIEVER0VfRUguICAqLworc3RhdGljIGlubGluZSBib29sCitiYl9oYXNfZWhfcHJlZCAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGVkZ2UgZTsKKyAgZWRnZV9pdGVyYXRvciBlaTsKKworICBGT1JfRUFDSF9FREdFIChlLCBlaSwgYmItPnByZWRzKQorICAgIHsKKyAgICAgIGlmIChlLT5mbGFncyAmIEVER0VfRUgpCisJcmV0dXJuIHRydWU7CisgICAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJldHVybiB0cnVlIHdoZW4gb25lIG9mIHRoZSBwcmVkZWNlc3NvciBlZGdlcyBvZiBCQiBpcyBtYXJrZWQgd2l0aCBFREdFX0FCTk9STUFMLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorYmJfaGFzX2Fibm9ybWFsX3ByZWQgKGJhc2ljX2Jsb2NrIGJiKQoreworICBlZGdlIGU7CisgIGVkZ2VfaXRlcmF0b3IgZWk7CisKKyAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIGJiLT5wcmVkcykKKyAgICB7CisgICAgICBpZiAoZS0+ZmxhZ3MgJiBFREdFX0FCTk9STUFMKQorCXJldHVybiB0cnVlOworICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm4gdGhlIGZhbGx0aHJ1IGVkZ2UgaW4gRURHRVMgaWYgaXQgZXhpc3RzLCBOVUxMIG90aGVyd2lzZS4gICovCitzdGF0aWMgaW5saW5lIGVkZ2UKK2ZpbmRfZmFsbHRocnVfZWRnZSAodmVjPGVkZ2UsIHZhX2djPiAqZWRnZXMpCit7CisgIGVkZ2UgZTsKKyAgZWRnZV9pdGVyYXRvciBlaTsKKworICBGT1JfRUFDSF9FREdFIChlLCBlaSwgZWRnZXMpCisgICAgaWYgKGUtPmZsYWdzICYgRURHRV9GQUxMVEhSVSkKKyAgICAgIGJyZWFrOworCisgIHJldHVybiBlOworfQorCisvKiBJbiBjZmdsb29wbWFuaXAuYy4gICovCitleHRlcm4gZWRnZSBtZmJfa2pfZWRnZTsKK2V4dGVybiBib29sIG1mYl9rZWVwX2p1c3QgKGVkZ2UpOworCisvKiBJbiBjZmdleHBhbmQuYy4gICovCitleHRlcm4gdm9pZCBydGxfcHJvZmlsZV9mb3JfYmIgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHJ0bF9wcm9maWxlX2Zvcl9lZGdlIChlZGdlKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfcnRsX3Byb2ZpbGUgKHZvaWQpOworCisvKiBJbiBwcm9maWxlLmMuICAqLworZXh0ZXJuIGdjb3Zfd29ya2luZ19zZXRfdCAqZmluZF93b3JraW5nX3NldCh1bnNpZ25lZCBwY3RfdGltZXNfMTApOworCisvKiBDaGVjayB0aGEgcHJvYmFiaWxpdHkgaXMgc2FuZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2hlY2tfcHJvYmFiaWxpdHkgKGludCBwcm9iKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChwcm9iID49IDAgJiYgcHJvYiA8PSBSRUdfQlJfUFJPQl9CQVNFKTsKK30KKworLyogR2l2ZW4gUFJPQjEgYW5kIFBST0IyLCByZXR1cm4gUFJPQjEqUFJPQjIvUkVHX0JSX1BST0JfQkFTRS4gCisgICBVc2VkIHRvIGNvbWJpbmUgQkIgcHJvYmFiaWxpdGllcy4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50Citjb21iaW5lX3Byb2JhYmlsaXRpZXMgKGludCBwcm9iMSwgaW50IHByb2IyKQoreworICBjaGVja19wcm9iYWJpbGl0eSAocHJvYjEpOworICBjaGVja19wcm9iYWJpbGl0eSAocHJvYjIpOworICByZXR1cm4gUkRJViAocHJvYjEgKiBwcm9iMiwgUkVHX0JSX1BST0JfQkFTRSk7Cit9CisKKy8qIEFwcGx5IHByb2JhYmlsaXR5IFBST0Igb24gZnJlcXVlbmN5IG9yIGNvdW50IEZSRVEuICAqLworCitzdGF0aWMgaW5saW5lIGdjb3ZfdHlwZQorYXBwbHlfcHJvYmFiaWxpdHkgKGdjb3ZfdHlwZSBmcmVxLCBpbnQgcHJvYikKK3sKKyAgY2hlY2tfcHJvYmFiaWxpdHkgKHByb2IpOworICByZXR1cm4gUkRJViAoZnJlcSAqIHByb2IsIFJFR19CUl9QUk9CX0JBU0UpOworfQorCisvKiBSZXR1cm4gaW52ZXJzZSBwcm9iYWJpbGl0eSBmb3IgUFJPQi4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitpbnZlcnNlX3Byb2JhYmlsaXR5IChpbnQgcHJvYjEpCit7CisgIGNoZWNrX3Byb2JhYmlsaXR5IChwcm9iMSk7CisgIHJldHVybiBSRUdfQlJfUFJPQl9CQVNFIC0gcHJvYjE7Cit9CisjZW5kaWYgLyogR0NDX0JBU0lDX0JMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9iaXRtYXAuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9iaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDk3MzhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2JpdG1hcC5oCkBAIC0wLDAgKzEsNzEzIEBACisvKiBGdW5jdGlvbnMgdG8gc3VwcG9ydCBnZW5lcmFsIGVuZGVkIGJpdG1hcHMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0JJVE1BUF9ICisjZGVmaW5lIEdDQ19CSVRNQVBfSAorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBzcGFyc2UgaW50ZWdlciBzZXRzIGFzIGEgbGlua2VkIGxpc3QuCisKKyAgIFRoaXMgc3BhcnNlIHNldCByZXByZXNlbnRhdGlvbiBpcyBzdWl0YWJsZSBmb3Igc3BhcnNlIHNldHMgd2l0aCBhbgorICAgdW5rbm93biAoYSBwcmlvcmkpIHVuaXZlcnNlLiAgVGhlIHNldCBpcyByZXByZXNlbnRlZCBhcyBhIGRvdWJsZS1saW5rZWQKKyAgIGxpc3Qgb2YgY29udGFpbmVyIG5vZGVzIChzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmKS4gIEVhY2ggbm9kZSBjb25zaXN0cworICAgb2YgYW4gaW5kZXggZm9yIHRoZSBmaXJzdCBtZW1iZXIgdGhhdCBjb3VsZCBiZSBoZWxkIGluIHRoZSBjb250YWluZXIsCisgICBhIHNtYWxsIGFycmF5IG9mIGludGVnZXJzIHRoYXQgcmVwcmVzZW50IHRoZSBtZW1iZXJzIGluIHRoZSBjb250YWluZXIsCisgICBhbmQgcG9pbnRlcnMgdG8gdGhlIG5leHQgYW5kIHByZXZpb3VzIGVsZW1lbnQgaW4gdGhlIGxpbmtlZCBsaXN0LiAgVGhlCisgICBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciwgaS5lLiB0aGUgaGVhZCBvZgorICAgdGhlIGxpc3QgaG9sZHMgdGhlIGVsZW1lbnQgd2l0aCB0aGUgc21hbGxlc3QgbWVtYmVyIG9mIHRoZSBzZXQuCisKKyAgIEZvciBhIGdpdmVuIG1lbWJlciBJIGluIHRoZSBzZXQ6CisgICAgIC0gdGhlIGVsZW1lbnQgZm9yIEkgd2lsbCBoYXZlIGluZGV4IGlzIEkgLyAoYml0cyBwZXIgZWxlbWVudCkKKyAgICAgLSB0aGUgcG9zaXRpb24gZm9yIEkgd2l0aGluIGVsZW1lbnQgaXMgSSAlIChiaXRzIHBlciBlbGVtZW50KQorCisgICBUaGlzIHJlcHJlc2VudGF0aW9uIGlzIHZlcnkgc3BhY2UtZWZmaWNpZW50IGZvciBsYXJnZSBzcGFyc2Ugc2V0cywgYW5kCisgICB0aGUgc2l6ZSBvZiB0aGUgc2V0IGNhbiBiZSBjaGFuZ2VkIGR5bmFtaWNhbGx5IHdpdGhvdXQgbXVjaCBvdmVyaGVhZC4KKyAgIEFuIGltcG9ydGFudCBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBvZiBiaXRzIHBlciBlbGVtZW50LiAgSW4gdGhpcworICAgaW1wbGVtZW50YXRpb24sIHRoZXJlIGFyZSAxMjggYml0cyBwZXIgZWxlbWVudC4gIFRoaXMgcmVzdWx0cyBpbiBhCisgICBoaWdoIHN0b3JhZ2Ugb3ZlcmhlYWQgKnBlciBlbGVtZW50KiwgYnV0IGEgc21hbGwgb3ZlcmFsbCBvdmVyaGVhZCBpZgorICAgdGhlIHNldCBpcyB2ZXJ5IHNwYXJzZS4KKworICAgVGhlIGRvd25zaWRlIGlzIHRoYXQgbWFueSBvcGVyYXRpb25zIGFyZSByZWxhdGl2ZWx5IHNsb3cgYmVjYXVzZSB0aGUKKyAgIGxpbmtlZCBsaXN0IGhhcyB0byBiZSB0cmF2ZXJzZWQgdG8gdGVzdCBtZW1iZXJzaGlwIChpLmUuIG1lbWJlcl9wLworICAgYWRkX21lbWJlci9yZW1vdmVfbWVtYmVyKS4gIFRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMgc2V0CisgICByZXByZXNlbnRhdGlvbiwgdGhlIGxhc3QgYWNjZXNzZWQgZWxlbWVudCBhbmQgaXRzIGluZGV4IGFyZSBjYWNoZWQuCisgICBGb3IgbWVtYmVyc2hpcCB0ZXN0cyBvbiBtZW1iZXJzIGNsb3NlIHRvIHJlY2VudGx5IGFjY2Vzc2VkIG1lbWJlcnMsCisgICB0aGUgY2FjaGVkIGxhc3QgZWxlbWVudCBpbXByb3ZlcyBtZW1iZXJzaGlwIHRlc3QgdG8gYSBjb25zdGFudC10aW1lCisgICBvcGVyYXRpb24uCisKKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBjYW4gYWx3YXlzIGJlIHBlcmZvcm1lZCBpbiBPKDEpIHRpbWU6CisKKyAgICAgKiBjbGVhcgkJCTogYml0bWFwX2NsZWFyCisgICAgICogY2hvb3NlX29uZQkJOiAobm90IGltcGxlbWVudGVkLCBidXQgY291bGQgYmUKKwkJCQkgICBpbXBsZW1lbnRlZCBpbiBjb25zdGFudCB0aW1lKQorCisgICBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBpbiBPKEUpIHRpbWUgd29yc3QtY2FzZSAod2l0aAorICAgRSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaW5rZWQgbGlzdCksIGJ1dCBpbiBPKDEpIHRpbWUgd2l0aCBhCisgICBzdWl0YWJsZSBhY2Nlc3MgcGF0dGVybnM6CisKKyAgICAgKiBtZW1iZXJfcAkJCTogYml0bWFwX2JpdF9wCisgICAgICogYWRkX21lbWJlcgkJOiBiaXRtYXBfc2V0X2JpdAorICAgICAqIHJlbW92ZV9tZW1iZXIJCTogYml0bWFwX2NsZWFyX2JpdAorCisgICBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBpbiBPKEUpIHRpbWU6CisKKyAgICAgKiBjYXJkaW5hbGl0eQkJOiBiaXRtYXBfY291bnRfYml0cworICAgICAqIHNldF9zaXplCQkJOiBiaXRtYXBfbGFzdF9zZXRfYml0IChidXQgdGhpcyBjb3VsZAorCQkJCSAgaW4gY29uc3RhbnQgdGltZSB3aXRoIGEgcG9pbnRlciB0bworCQkJCSAgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgY2hhaW4pCisKKyAgIEFkZGl0aW9uYWxseSwgdGhlIGxpbmtlZC1saXN0IHNwYXJzZSBzZXQgcmVwcmVzZW50YXRpb24gc3VwcG9ydHMKKyAgIGVudW1lcmF0aW9uIG9mIHRoZSBtZW1iZXJzIGluIE8oRSkgdGltZToKKworICAgICAqIGZvcmFsbAkJCTogRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQCisgICAgICogc2V0X2NvcHkJCQk6IGJpdG1hcF9jb3B5CisgICAgICogc2V0X2ludGVyc2VjdGlvbgkJOiBiaXRtYXBfaW50ZXJzZWN0X3AgLworCQkJCSAgYml0bWFwX2FuZCAvIGJpdG1hcF9hbmRfaW50byAvCisJCQkJICBFWEVDVVRFX0lGX0FORF9JTl9CSVRNQVAKKyAgICAgKiBzZXRfdW5pb24JCTogYml0bWFwX2lvciAvIGJpdG1hcF9pb3JfaW50bworICAgICAqIHNldF9kaWZmZXJlbmNlCQk6IGJpdG1hcF9pbnRlcnNlY3RfY29tcGxfcCAvCisJCQkJICBiaXRtYXBfYW5kX2NvbXAgLyBiaXRtYXBfYW5kX2NvbXBfaW50byAvCisJCQkJICBFWEVDVVRFX0lGX0FORF9DT01QTF9JTl9CSVRNQVAKKyAgICAgKiBzZXRfZGlzanVjdGlvbgkJOiBiaXRtYXBfeG9yX2NvbXAgLyBiaXRtYXBfeG9yX2NvbXBfaW50bworICAgICAqIHNldF9jb21wYXJlCQk6IGJpdG1hcF9lcXVhbF9wCisKKyAgIFNvbWUgb3BlcmF0aW9ucyBvbiAzIHNldHMgdGhhdCBvY2N1ciBmcmVxdWVudGx5IGluIGluIGRhdGEgZmxvdyBwcm9ibGVtcworICAgYXJlIGFsc28gaW1wbGVtZW50ZWQ6CisKKyAgICAgKiBBIHwgKEIgJiBDKQkJOiBiaXRtYXBfaW9yX2FuZF9pbnRvCisgICAgICogQSB8IChCICYgfkMpCQk6IGJpdG1hcF9pb3JfYW5kX2NvbXBsIC8KKwkJCQkgIGJpdG1hcF9pb3JfYW5kX2NvbXBsX2ludG8KKworICAgVGhlIHN0b3JhZ2UgcmVxdWlyZW1lbnRzIGZvciBsaW5rZWQtbGlzdCBzcGFyc2Ugc2V0cyBhcmUgTyhFKSwgd2l0aCBFLT5OCisgICBpbiB0aGUgd29yc3QgY2FzZSAoYSBzcGFyc2Ugc2V0IHdpdGggbGFyZ2UgZGlzdGFuY2VzIGJldHdlZW4gdGhlIHZhbHVlcworICAgb2YgdGhlIHNldCBtZW1iZXJzKS4KKworICAgVGhlIGxpbmtlZC1saXN0IHNldCByZXByZXNlbnRhdGlvbiB3b3JrcyB3ZWxsIGZvciBwcm9ibGVtcyBpbnZvbHZpbmcgdmVyeQorICAgc3BhcnNlIHNldHMuICBUaGUgY2Fub25pY2FsIGV4YW1wbGUgaW4gR0NDIGlzLCBvZiBjb3Vyc2UsIHRoZSAic2V0IG9mCisgICBzZXRzIiBmb3Igc29tZSBDRkctYmFzZWQgZGF0YSBmbG93IHByb2JsZW1zIChsaXZlbmVzcyBhbmFseXNpcywgZG9taW5hbmNlCisgICBmcm9udGllcnMsIGV0Yy4pLgorICAgCisgICBUaGlzIHJlcHJlc2VudGF0aW9uIGFsc28gd29ya3Mgd2VsbCBmb3IgZGF0YSBmbG93IHByb2JsZW1zIHdoZXJlIHRoZSBzaXplCisgICBvZiB0aGUgc2V0IG1heSBncm93IGR5bmFtaWNhbGx5LCBidXQgY2FyZSBtdXN0IGJlIHRha2VuIHRoYXQgdGhlIG1lbWJlcl9wLAorICAgYWRkX21lbWJlciwgYW5kIHJlbW92ZV9tZW1iZXIgb3BlcmF0aW9ucyBvY2N1ciB3aXRoIGEgc3VpdGFibGUgYWNjZXNzCisgICBwYXR0ZXJuLgorICAgCisgICBGb3IgcmFuZG9tLWFjY2VzcyBzZXRzIHdpdGggYSBrbm93biwgcmVsYXRpdmVseSBzbWFsbCB1bml2ZXJzZSBzaXplLCB0aGUKKyAgIFNwYXJzZVNldCBvciBzaW1wbGUgYml0bWFwIHJlcHJlc2VudGF0aW9ucyBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdGhhbiBhCisgICBsaW5rZWQtbGlzdCBzZXQuICBGb3IgcmFuZG9tLWFjY2VzcyBzZXRzIG9mIHVua25vd24gdW5pdmVyc2UsIGEgaGFzaCB0YWJsZQorICAgb3IgYSBiYWxhbmNlZCBiaW5hcnkgdHJlZSByZXByZXNlbnRhdGlvbiBpcyBsaWtlbHkgdG8gYmUgYSBtb3JlIHN1aXRhYmxlCisgICBjaG9pY2UuCisKKyAgIFRyYXZlcnNpbmcgbGlua2VkIGxpc3RzIGlzIHVzdWFsbHkgY2FjaGUtdW5mcmllbmRseSwgZXZlbiB3aXRoIHRoZSBsYXN0CisgICBhY2Nlc3NlZCBlbGVtZW50IGNhY2hlZC4KKyAgIAorICAgQ2FjaGUgcGVyZm9ybWFuY2UgY2FuIGJlIGltcHJvdmVkIGJ5IGtlZXBpbmcgdGhlIGVsZW1lbnRzIGluIHRoZSBzZXQKKyAgIGdyb3VwZWQgdG9nZXRoZXIgaW4gbWVtb3J5LCB1c2luZyBhIGRlZGljYXRlZCBvYnN0YWNrIGZvciBhIHNldCAob3IgZ3JvdXAKKyAgIG9mIHJlbGF0ZWQgc2V0cykuICBFbGVtZW50cyBhbGxvY2F0ZWQgb24gb2JzdGFja3MgYXJlIHJlbGVhc2VkIHRvIGEKKyAgIGZyZWUtbGlzdCBhbmQgdGFrZW4gb2ZmIHRoZSBmcmVlIGxpc3QuICBJZiBtdWx0aXBsZSBzZXRzIGFyZSBhbGxvY2F0ZWQgb24KKyAgIHRoZSBzYW1lIG9ic3RhY2ssIGVsZW1lbnRzIGZyZWVkIGZyb20gb25lIHNldCBtYXkgYmUgcmUtdXNlZCBmb3Igb25lIG9mCisgICB0aGUgb3RoZXIgc2V0cy4gIFRoaXMgdXN1YWxseSBoZWxwcyBhdm9pZCBjYWNoZSBtaXNzZXMuCisKKyAgIEEgc2luZ2xlIGZyZWUtbGlzdCBpcyB1c2VkIGZvciBhbGwgc2V0cyBhbGxvY2F0ZWQgaW4gR0dDIHNwYWNlLiAgVGhpcyBpcworICAgYmFkIGZvciBwZXJzaXN0ZW50IHNldHMsIHNvIHBlcnNpc3RlbnQgc2V0cyBzaG91bGQgYmUgYWxsb2NhdGVkIG9uIGFuCisgICBvYnN0YWNrIHdoZW5ldmVyIHBvc3NpYmxlLiAgKi8KKworI2luY2x1ZGUgImhhc2h0YWIuaCIKKyNpbmNsdWRlICJzdGF0aXN0aWNzLmgiCisjaW5jbHVkZSAib2JzdGFjay5oIgorCisvKiBGdW5kYW1lbnRhbCBzdG9yYWdlIHR5cGUgZm9yIGJpdG1hcC4gICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBCSVRNQVBfV09SRDsKKy8qIEJJVE1BUF9XT1JEX0JJVFMgbmVlZHMgdG8gYmUgdW5zaWduZWQsIGJ1dCBjYW5ub3QgY29udGFpbiBjYXN0cyBhcworICAgaXQgaXMgdXNlZCBpbiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAtLSBoZW5jZSB0aGUgMXUuICAqLworI2RlZmluZSBCSVRNQVBfV09SRF9CSVRTIChDSEFSX0JJVCAqIFNJWkVPRl9MT05HICogMXUpCisKKy8qIE51bWJlciBvZiB3b3JkcyB0byB1c2UgZm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbGlua2VkIGxpc3QuICAqLworCisjaWZuZGVmIEJJVE1BUF9FTEVNRU5UX1dPUkRTCisjZGVmaW5lIEJJVE1BUF9FTEVNRU5UX1dPUkRTICgoMTI4ICsgQklUTUFQX1dPUkRfQklUUyAtIDEpIC8gQklUTUFQX1dPUkRfQklUUykKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBlYWNoIGFjdHVhbCBlbGVtZW50IG9mIGEgYml0bWFwLiAgKi8KKworI2RlZmluZSBCSVRNQVBfRUxFTUVOVF9BTExfQklUUyAoQklUTUFQX0VMRU1FTlRfV09SRFMgKiBCSVRNQVBfV09SRF9CSVRTKQorCisvKiBPYnN0YWNrIGZvciBhbGxvY2F0aW5nIGJpdG1hcHMgYW5kIGVsZW1lbnRzIGZyb20uICAqLwordHlwZWRlZiBzdHJ1Y3QgR1RZICgoKSkgYml0bWFwX29ic3RhY2sgeworICBzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmICplbGVtZW50czsKKyAgc3RydWN0IGJpdG1hcF9oZWFkX2RlZiAqaGVhZHM7CisgIHN0cnVjdCBvYnN0YWNrIEdUWSAoKHNraXApKSBvYnN0YWNrOworfSBiaXRtYXBfb2JzdGFjazsKKworLyogQml0bWFwIHNldCBlbGVtZW50LiAgV2UgdXNlIGEgbGlua2VkIGxpc3QgdG8gaG9sZCBvbmx5IHRoZSBiaXRzIHRoYXQKKyAgIGFyZSBzZXQuICBUaGlzIGFsbG93cyBmb3IgdXNlIHRvIGdyb3cgdGhlIGJpdHNldCBkeW5hbWljYWxseSB3aXRob3V0CisgICBoYXZpbmcgdG8gcmVhbGxvYyBhbmQgY29weSBhIGdpYW50IGJpdCBhcnJheS4KKworICAgVGhlIGZyZWUgbGlzdCBpcyBpbXBsZW1lbnRlZCBhcyBhIGxpc3Qgb2YgbGlzdHMuICBUaGVyZSBpcyBvbmUKKyAgIG91dGVyIGxpc3QgY29ubmVjdGVkIHRvZ2V0aGVyIGJ5IHByZXYgZmllbGRzLiAgRWFjaCBlbGVtZW50IG9mIHRoYXQKKyAgIG91dGVyIGlzIGFuIGlubmVyIGxpc3QgKHRoYXQgbWF5IGNvbnNpc3Qgb25seSBvZiB0aGUgb3V0ZXIgbGlzdAorICAgZWxlbWVudCkgdGhhdCBhcmUgY29ubmVjdGVkIGJ5IHRoZSBuZXh0IGZpZWxkcy4gIFRoZSBwcmV2IHBvaW50ZXIKKyAgIGlzIHVuZGVmaW5lZCBmb3IgaW50ZXJpb3IgZWxlbWVudHMuICBUaGlzIGFsbG93cworICAgYml0bWFwX2VsdF9jbGVhcl9mcm9tIHRvIGJlIGltcGxlbWVudGVkIGluIHVuaXQgdGltZSByYXRoZXIgdGhhbgorICAgbGluZWFyIGluIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgZnJlZWQuICAqLworCit0eXBlZGVmIHN0cnVjdCBHVFkoKGNoYWluX25leHQgKCIlaC5uZXh0IiksIGNoYWluX3ByZXYgKCIlaC5wcmV2IikpKSBiaXRtYXBfZWxlbWVudF9kZWYgeworICBzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmICpuZXh0OwkvKiBOZXh0IGVsZW1lbnQuICAqLworICBzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmICpwcmV2OwkvKiBQcmV2aW91cyBlbGVtZW50LiAgKi8KKyAgdW5zaWduZWQgaW50IGluZHg7CQkJLyogcmVnbm8vQklUTUFQX0VMRU1FTlRfQUxMX0JJVFMuICAqLworICBCSVRNQVBfV09SRCBiaXRzW0JJVE1BUF9FTEVNRU5UX1dPUkRTXTsgLyogQml0cyB0aGF0IGFyZSBzZXQuICAqLworfSBiaXRtYXBfZWxlbWVudDsKKworLyogSGVhZCBvZiBiaXRtYXAgbGlua2VkIGxpc3QuICBUaGUgJ2N1cnJlbnQnIG1lbWJlciBwb2ludHMgdG8gc29tZXRoaW5nCisgICBhbHJlYWR5IHBvaW50ZWQgdG8gYnkgdGhlIGNoYWluIHN0YXJ0ZWQgYnkgZmlyc3QsIHNvIEdUWSgoc2tpcCkpIGl0LiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBiaXRtYXBfaGVhZF9kZWYgeworICB1bnNpZ25lZCBpbnQgaW5keDsJCQkvKiBJbmRleCBvZiBsYXN0IGVsZW1lbnQgbG9va2VkIGF0LiAgKi8KKyAgdW5zaWduZWQgaW50IGRlc2NyaXB0b3JfaWQ7CQkvKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFsbG9jYXRpb24KKwkJCQkJICAgc2l0ZSBvZiB0aGlzIGJpdG1hcCwgZm9yIGRldGFpbGVkCisJCQkJCSAgIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLiAgKi8KKyAgYml0bWFwX2VsZW1lbnQgKmZpcnN0OwkJLyogRmlyc3QgZWxlbWVudCBpbiBsaW5rZWQgbGlzdC4gICovCisgIGJpdG1hcF9lbGVtZW50ICogR1RZKChza2lwKCIiKSkpIGN1cnJlbnQ7IC8qIExhc3QgZWxlbWVudCBsb29rZWQgYXQuICAqLworICBiaXRtYXBfb2JzdGFjayAqb2JzdGFjazsJCS8qIE9ic3RhY2sgdG8gYWxsb2NhdGUgZWxlbWVudHMgZnJvbS4KKwkJCQkJICAgSWYgTlVMTCwgdGhlbiB1c2UgR0dDIGFsbG9jYXRpb24uICAqLworfSBiaXRtYXBfaGVhZDsKKworLyogR2xvYmFsIGRhdGEgKi8KK2V4dGVybiBiaXRtYXBfZWxlbWVudCBiaXRtYXBfemVyb19iaXRzOwkvKiBaZXJvIGJpdG1hcCBlbGVtZW50ICovCitleHRlcm4gYml0bWFwX29ic3RhY2sgYml0bWFwX2RlZmF1bHRfb2JzdGFjazsgICAvKiBEZWZhdWx0IGJpdG1hcCBvYnN0YWNrICovCisKKy8qIENsZWFyIGEgYml0bWFwIGJ5IGZyZWVpbmcgdXAgdGhlIGxpbmtlZCBsaXN0LiAgKi8KK2V4dGVybiB2b2lkIGJpdG1hcF9jbGVhciAoYml0bWFwKTsKKworLyogQ29weSBhIGJpdG1hcCB0byBhbm90aGVyIGJpdG1hcC4gICovCitleHRlcm4gdm9pZCBiaXRtYXBfY29weSAoYml0bWFwLCBjb25zdF9iaXRtYXApOworCisvKiBUcnVlIGlmIHR3byBiaXRtYXBzIGFyZSBpZGVudGljYWwuICAqLworZXh0ZXJuIGJvb2wgYml0bWFwX2VxdWFsX3AgKGNvbnN0X2JpdG1hcCwgY29uc3RfYml0bWFwKTsKKworLyogVHJ1ZSBpZiB0aGUgYml0bWFwcyBpbnRlcnNlY3QgKHRoZWlyIEFORCBpcyBub24tZW1wdHkpLiAgKi8KK2V4dGVybiBib29sIGJpdG1hcF9pbnRlcnNlY3RfcCAoY29uc3RfYml0bWFwLCBjb25zdF9iaXRtYXApOworCisvKiBUcnVlIGlmIHRoZSBjb21wbGVtZW50IG9mIHRoZSBzZWNvbmQgaW50ZXJzZWN0cyB0aGUgZmlyc3QgKHRoZWlyCisgICBBTkRfQ09NUEwgaXMgbm9uLWVtcHR5KS4gICovCitleHRlcm4gYm9vbCBiaXRtYXBfaW50ZXJzZWN0X2NvbXBsX3AgKGNvbnN0X2JpdG1hcCwgY29uc3RfYml0bWFwKTsKKworLyogVHJ1ZSBpZiBNQVAgaXMgYW4gZW1wdHkgYml0bWFwLiAgKi8KK2lubGluZSBib29sIGJpdG1hcF9lbXB0eV9wIChjb25zdF9iaXRtYXAgbWFwKQoreworICByZXR1cm4gIW1hcC0+Zmlyc3Q7Cit9CisKKy8qIFRydWUgaWYgdGhlIGJpdG1hcCBoYXMgb25seSBhIHNpbmdsZSBiaXQgc2V0LiAgKi8KK2V4dGVybiBib29sIGJpdG1hcF9zaW5nbGVfYml0X3NldF9wIChjb25zdF9iaXRtYXApOworCisvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluIHRoZSBiaXRtYXAuICAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYml0bWFwX2NvdW50X2JpdHMgKGNvbnN0X2JpdG1hcCk7CisKKy8qIEJvb2xlYW4gb3BlcmF0aW9ucyBvbiBiaXRtYXBzLiAgVGhlIF9pbnRvIHZhcmlhbnRzIGFyZSB0d28gb3BlcmFuZAorICAgdmVyc2lvbnMgdGhhdCBtb2RpZnkgdGhlIGZpcnN0IHNvdXJjZSBvcGVyYW5kLiAgVGhlIG90aGVyIHZhcmlhbnRzCisgICBhcmUgdGhyZWUgb3BlcmFuZCB2ZXJzaW9ucyB0aGF0IHRvIG5vdCBkZXN0cm95IHRoZSBzb3VyY2UgYml0bWFwcy4KKyAgIFRoZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBhcmUgJiwgJiB+LCB8LCBeLiAgKi8KK2V4dGVybiB2b2lkIGJpdG1hcF9hbmQgKGJpdG1hcCwgY29uc3RfYml0bWFwLCBjb25zdF9iaXRtYXApOworZXh0ZXJuIGJvb2wgYml0bWFwX2FuZF9pbnRvIChiaXRtYXAsIGNvbnN0X2JpdG1hcCk7CitleHRlcm4gYm9vbCBiaXRtYXBfYW5kX2NvbXBsIChiaXRtYXAsIGNvbnN0X2JpdG1hcCwgY29uc3RfYml0bWFwKTsKK2V4dGVybiBib29sIGJpdG1hcF9hbmRfY29tcGxfaW50byAoYml0bWFwLCBjb25zdF9iaXRtYXApOworI2RlZmluZSBiaXRtYXBfY29tcGxfYW5kKERTVCwgQSwgQikgYml0bWFwX2FuZF9jb21wbCAoRFNULCBCLCBBKQorZXh0ZXJuIHZvaWQgYml0bWFwX2NvbXBsX2FuZF9pbnRvIChiaXRtYXAsIGNvbnN0X2JpdG1hcCk7CitleHRlcm4gdm9pZCBiaXRtYXBfY2xlYXJfcmFuZ2UgKGJpdG1hcCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYml0bWFwX3NldF9yYW5nZSAoYml0bWFwLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gYm9vbCBiaXRtYXBfaW9yIChiaXRtYXAsIGNvbnN0X2JpdG1hcCwgY29uc3RfYml0bWFwKTsKK2V4dGVybiBib29sIGJpdG1hcF9pb3JfaW50byAoYml0bWFwLCBjb25zdF9iaXRtYXApOworZXh0ZXJuIHZvaWQgYml0bWFwX3hvciAoYml0bWFwLCBjb25zdF9iaXRtYXAsIGNvbnN0X2JpdG1hcCk7CitleHRlcm4gdm9pZCBiaXRtYXBfeG9yX2ludG8gKGJpdG1hcCwgY29uc3RfYml0bWFwKTsKKworLyogRFNUID0gQSB8IChCICYgQykuICBSZXR1cm4gdHJ1ZSBpZiBEU1QgY2hhbmdlcy4gICovCitleHRlcm4gYm9vbCBiaXRtYXBfaW9yX2FuZF9pbnRvIChiaXRtYXAgRFNULCBjb25zdF9iaXRtYXAgQiwgY29uc3RfYml0bWFwIEMpOworLyogRFNUID0gQSB8IChCICYgfkMpLiAgUmV0dXJuIHRydWUgaWYgRFNUIGNoYW5nZXMuICAqLworZXh0ZXJuIGJvb2wgYml0bWFwX2lvcl9hbmRfY29tcGwgKGJpdG1hcCBEU1QsIGNvbnN0X2JpdG1hcCBBLAorCQkJCSAgY29uc3RfYml0bWFwIEIsIGNvbnN0X2JpdG1hcCBDKTsKKy8qIEEgfD0gKEIgJiB+QykuICBSZXR1cm4gdHJ1ZSBpZiBBIGNoYW5nZXMuICAqLworZXh0ZXJuIGJvb2wgYml0bWFwX2lvcl9hbmRfY29tcGxfaW50byAoYml0bWFwIEEsCisJCQkJICAgICAgIGNvbnN0X2JpdG1hcCBCLCBjb25zdF9iaXRtYXAgQyk7CisKKy8qIENsZWFyIGEgc2luZ2xlIGJpdCBpbiBhIGJpdG1hcC4gIFJldHVybiB0cnVlIGlmIHRoZSBiaXQgY2hhbmdlZC4gICovCitleHRlcm4gYm9vbCBiaXRtYXBfY2xlYXJfYml0IChiaXRtYXAsIGludCk7CisKKy8qIFNldCBhIHNpbmdsZSBiaXQgaW4gYSBiaXRtYXAuICBSZXR1cm4gdHJ1ZSBpZiB0aGUgYml0IGNoYW5nZWQuICAqLworZXh0ZXJuIGJvb2wgYml0bWFwX3NldF9iaXQgKGJpdG1hcCwgaW50KTsKKworLyogUmV0dXJuIHRydWUgaWYgYSByZWdpc3RlciBpcyBzZXQgaW4gYSByZWdpc3RlciBzZXQuICAqLworZXh0ZXJuIGludCBiaXRtYXBfYml0X3AgKGJpdG1hcCwgaW50KTsKKworLyogRGVidWcgZnVuY3Rpb25zIHRvIHByaW50IGEgYml0bWFwIGxpbmtlZCBsaXN0LiAgKi8KK2V4dGVybiB2b2lkIGRlYnVnX2JpdG1hcCAoY29uc3RfYml0bWFwKTsKK2V4dGVybiB2b2lkIGRlYnVnX2JpdG1hcF9maWxlIChGSUxFICosIGNvbnN0X2JpdG1hcCk7CisKKy8qIFByaW50IGEgYml0bWFwLiAgKi8KK2V4dGVybiB2b2lkIGJpdG1hcF9wcmludCAoRklMRSAqLCBjb25zdF9iaXRtYXAsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyogSW5pdGlhbGl6ZSBhbmQgcmVsZWFzZSBhIGJpdG1hcCBvYnN0YWNrLiAgKi8KK2V4dGVybiB2b2lkIGJpdG1hcF9vYnN0YWNrX2luaXRpYWxpemUgKGJpdG1hcF9vYnN0YWNrICopOworZXh0ZXJuIHZvaWQgYml0bWFwX29ic3RhY2tfcmVsZWFzZSAoYml0bWFwX29ic3RhY2sgKik7CitleHRlcm4gdm9pZCBiaXRtYXBfcmVnaXN0ZXIgKGJpdG1hcCBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB2b2lkIGR1bXBfYml0bWFwX3N0YXRpc3RpY3MgKHZvaWQpOworCisvKiBJbml0aWFsaXplIGEgYml0bWFwIGhlYWRlci4gIE9CU1RBQ0sgaW5kaWNhdGVzIHRoZSBiaXRtYXAgb2JzdGFjaworICAgdG8gYWxsb2NhdGUgZnJvbSwgTlVMTCBmb3IgR0MnZCBiaXRtYXAuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdG1hcF9pbml0aWFsaXplX3N0YXQgKGJpdG1hcCBoZWFkLCBiaXRtYXBfb2JzdGFjayAqb2JzdGFjayBNRU1fU1RBVF9ERUNMKQoreworICBoZWFkLT5maXJzdCA9IGhlYWQtPmN1cnJlbnQgPSBOVUxMOworICBoZWFkLT5vYnN0YWNrID0gb2JzdGFjazsKKyAgaWYgKEdBVEhFUl9TVEFUSVNUSUNTKQorICAgIGJpdG1hcF9yZWdpc3RlciAoaGVhZCBQQVNTX01FTV9TVEFUKTsKK30KKyNkZWZpbmUgYml0bWFwX2luaXRpYWxpemUoaCxvKSBiaXRtYXBfaW5pdGlhbGl6ZV9zdGF0IChoLG8gTUVNX1NUQVRfSU5GTykKKworLyogQWxsb2NhdGUgYW5kIGZyZWUgYml0bWFwcyBmcm9tIG9ic3RhY2ssIG1hbGxvYyBhbmQgZ2MnZCBtZW1vcnkuICAqLworZXh0ZXJuIGJpdG1hcCBiaXRtYXBfb2JzdGFja19hbGxvY19zdGF0IChiaXRtYXBfb2JzdGFjayAqb2JzdGFjayBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgYml0bWFwX29ic3RhY2tfYWxsb2ModCkgYml0bWFwX29ic3RhY2tfYWxsb2Nfc3RhdCAodCBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIGJpdG1hcCBiaXRtYXBfZ2NfYWxsb2Nfc3RhdCAoQUxPTkVfTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJpdG1hcF9nY19hbGxvYygpIGJpdG1hcF9nY19hbGxvY19zdGF0IChBTE9ORV9NRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHZvaWQgYml0bWFwX29ic3RhY2tfZnJlZSAoYml0bWFwKTsKKworLyogQSBmZXcgY29tcGF0aWJpbGl0eS9mdW5jdGlvbnMgbWFjcm9zIGZvciBjb21wYXRpYmlsaXR5IHdpdGggc2JpdG1hcHMgKi8KK2lubGluZSB2b2lkIGR1bXBfYml0bWFwIChGSUxFICpmaWxlLCBjb25zdF9iaXRtYXAgbWFwKQoreworICBiaXRtYXBfcHJpbnQgKGZpbGUsIG1hcCwgIiIsICJcbiIpOworfQorCitleHRlcm4gdW5zaWduZWQgYml0bWFwX2ZpcnN0X3NldF9iaXQgKGNvbnN0X2JpdG1hcCk7CitleHRlcm4gdW5zaWduZWQgYml0bWFwX2xhc3Rfc2V0X2JpdCAoY29uc3RfYml0bWFwKTsKKworLyogQ29tcHV0ZSBiaXRtYXAgaGFzaCAoZm9yIHB1cnBvc2VzIG9mIGhhc2hpbmcgZXRjLikgICovCitleHRlcm4gaGFzaHZhbF90IGJpdG1hcF9oYXNoKGNvbnN0X2JpdG1hcCk7CisKKy8qIEFsbG9jYXRlIGEgYml0bWFwIGZyb20gYSBiaXQgb2JzdGFjay4gICovCisjZGVmaW5lIEJJVE1BUF9BTExPQyhPQlNUQUNLKSBiaXRtYXBfb2JzdGFja19hbGxvYyAoT0JTVEFDSykKKworLyogQWxsb2NhdGUgYSBnYydkIGJpdG1hcC4gICovCisjZGVmaW5lIEJJVE1BUF9HR0NfQUxMT0MoKSBiaXRtYXBfZ2NfYWxsb2MgKCkKKworLyogRG8gYW55IGNsZWFudXAgbmVlZGVkIG9uIGEgYml0bWFwIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIHVzZWQuICAqLworI2RlZmluZSBCSVRNQVBfRlJFRShCSVRNQVApIFwKKyAgICAgICAoKHZvaWQpIChiaXRtYXBfb2JzdGFja19mcmVlICgoYml0bWFwKSBCSVRNQVApLCAoQklUTUFQKSA9IChiaXRtYXApIE5VTEwpKQorCisvKiBJdGVyYXRvciBmb3IgYml0bWFwcy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgYml0bWFwIGVsZW1lbnQuICAqLworICBiaXRtYXBfZWxlbWVudCAqZWx0MTsKKworICAvKiBQb2ludGVyIHRvIDJuZCBiaXRtYXAgZWxlbWVudCB3aGVuIHR3byBhcmUgaW52b2x2ZWQuICAqLworICBiaXRtYXBfZWxlbWVudCAqZWx0MjsKKworICAvKiBXb3JkIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50LiAgKi8KKyAgdW5zaWduZWQgd29yZF9ubzsKKworICAvKiBDb250ZW50cyBvZiB0aGUgYWN0dWFsbHkgcHJvY2Vzc2VkIHdvcmQuICBXaGVuIGZpbmRpbmcgbmV4dCBiaXQKKyAgICAgaXQgaXMgc2hpZnRlZCByaWdodCwgc28gdGhhdCB0aGUgYWN0dWFsIGJpdCBpcyBhbHdheXMgdGhlIGxlYXN0CisgICAgIHNpZ25pZmljYW50IGJpdCBvZiBBQ1RVQUwuICAqLworICBCSVRNQVBfV09SRCBiaXRzOworfSBiaXRtYXBfaXRlcmF0b3I7CisKKy8qIEluaXRpYWxpemUgYSBzaW5nbGUgYml0bWFwIGl0ZXJhdG9yLiAgU1RBUlRfQklUIGlzIHRoZSBmaXJzdCBiaXQgdG8KKyAgIGl0ZXJhdGUgZnJvbS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYm1wX2l0ZXJfc2V0X2luaXQgKGJpdG1hcF9pdGVyYXRvciAqYmksIGNvbnN0X2JpdG1hcCBtYXAsCisJCSAgIHVuc2lnbmVkIHN0YXJ0X2JpdCwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgYmktPmVsdDEgPSBtYXAtPmZpcnN0OworICBiaS0+ZWx0MiA9IE5VTEw7CisKKyAgLyogQWR2YW5jZSBlbHQxIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUgdGhlIGJsb2NrIGNvbnRhaW5pbmcgc3RhcnRfYml0LiAgKi8KKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgaWYgKCFiaS0+ZWx0MSkKKwl7CisJICBiaS0+ZWx0MSA9ICZiaXRtYXBfemVyb19iaXRzOworCSAgYnJlYWs7CisJfQorCisgICAgICBpZiAoYmktPmVsdDEtPmluZHggPj0gc3RhcnRfYml0IC8gQklUTUFQX0VMRU1FTlRfQUxMX0JJVFMpCisJYnJlYWs7CisgICAgICBiaS0+ZWx0MSA9IGJpLT5lbHQxLT5uZXh0OworICAgIH0KKworICAvKiBXZSBtaWdodCBoYXZlIGdvbmUgcGFzdCB0aGUgc3RhcnQgYml0LCBzbyByZWluaXRpYWxpemUgaXQuICAqLworICBpZiAoYmktPmVsdDEtPmluZHggIT0gc3RhcnRfYml0IC8gQklUTUFQX0VMRU1FTlRfQUxMX0JJVFMpCisgICAgc3RhcnRfYml0ID0gYmktPmVsdDEtPmluZHggKiBCSVRNQVBfRUxFTUVOVF9BTExfQklUUzsKKworICAvKiBJbml0aWFsaXplIGZvciB3aGF0IGlzIG5vdyBzdGFydF9iaXQuICAqLworICBiaS0+d29yZF9ubyA9IHN0YXJ0X2JpdCAvIEJJVE1BUF9XT1JEX0JJVFMgJSBCSVRNQVBfRUxFTUVOVF9XT1JEUzsKKyAgYmktPmJpdHMgPSBiaS0+ZWx0MS0+Yml0c1tiaS0+d29yZF9ub107CisgIGJpLT5iaXRzID4+PSBzdGFydF9iaXQgJSBCSVRNQVBfV09SRF9CSVRTOworCisgIC8qIElmIHRoaXMgd29yZCBpcyB6ZXJvLCB3ZSBtdXN0IG1ha2Ugc3VyZSB3ZSdyZSBub3QgcG9pbnRpbmcgYXQgdGhlCisgICAgIGZpcnN0IGJpdCwgb3RoZXJ3aXNlIG91ciBpbmNyZW1lbnRpbmcgdG8gdGhlIG5leHQgd29yZCBib3VuZGFyeQorICAgICB3aWxsIGZhaWwuICBJdCB3b24ndCBtYXR0ZXIgaWYgdGhpcyBpbmNyZW1lbnQgbW92ZXMgdXMgaW50byB0aGUKKyAgICAgbmV4dCB3b3JkLiAgKi8KKyAgc3RhcnRfYml0ICs9ICFiaS0+Yml0czsKKworICAqYml0X25vID0gc3RhcnRfYml0OworfQorCisvKiBJbml0aWFsaXplIGFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3bworICAgYml0bWFwcy4gIFNUQVJUX0JJVCBpcyB0aGUgYml0IHRvIGNvbW1lbmNlIGZyb20uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JtcF9pdGVyX2FuZF9pbml0IChiaXRtYXBfaXRlcmF0b3IgKmJpLCBjb25zdF9iaXRtYXAgbWFwMSwgY29uc3RfYml0bWFwIG1hcDIsCisJCSAgIHVuc2lnbmVkIHN0YXJ0X2JpdCwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgYmktPmVsdDEgPSBtYXAxLT5maXJzdDsKKyAgYmktPmVsdDIgPSBtYXAyLT5maXJzdDsKKworICAvKiBBZHZhbmNlIGVsdDEgdW50aWwgaXQgaXMgbm90IGJlZm9yZSB0aGUgYmxvY2sgY29udGFpbmluZworICAgICBzdGFydF9iaXQuICAqLworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAoIWJpLT5lbHQxKQorCXsKKwkgIGJpLT5lbHQyID0gTlVMTDsKKwkgIGJyZWFrOworCX0KKworICAgICAgaWYgKGJpLT5lbHQxLT5pbmR4ID49IHN0YXJ0X2JpdCAvIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTKQorCWJyZWFrOworICAgICAgYmktPmVsdDEgPSBiaS0+ZWx0MS0+bmV4dDsKKyAgICB9CisKKyAgLyogQWR2YW5jZSBlbHQyIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUgZWx0MS4gICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICghYmktPmVsdDIpCisJeworCSAgYmktPmVsdDEgPSBiaS0+ZWx0MiA9ICZiaXRtYXBfemVyb19iaXRzOworCSAgYnJlYWs7CisJfQorCisgICAgICBpZiAoYmktPmVsdDItPmluZHggPj0gYmktPmVsdDEtPmluZHgpCisJYnJlYWs7CisgICAgICBiaS0+ZWx0MiA9IGJpLT5lbHQyLT5uZXh0OworICAgIH0KKworICAvKiBJZiB3ZSdyZSBhdCB0aGUgc2FtZSBpbmRleCwgdGhlbiB3ZSBoYXZlIHNvbWUgaW50ZXJzZWN0aW5nIGJpdHMuICAqLworICBpZiAoYmktPmVsdDEtPmluZHggPT0gYmktPmVsdDItPmluZHgpCisgICAgeworICAgICAgLyogV2UgbWlnaHQgaGF2ZSBhZHZhbmNlZCBiZXlvbmQgdGhlIHN0YXJ0X2JpdCwgc28gcmVpbml0aWFsaXplCisJIGZvciB0aGF0LiAgKi8KKyAgICAgIGlmIChiaS0+ZWx0MS0+aW5keCAhPSBzdGFydF9iaXQgLyBCSVRNQVBfRUxFTUVOVF9BTExfQklUUykKKwlzdGFydF9iaXQgPSBiaS0+ZWx0MS0+aW5keCAqIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTOworCisgICAgICBiaS0+d29yZF9ubyA9IHN0YXJ0X2JpdCAvIEJJVE1BUF9XT1JEX0JJVFMgJSBCSVRNQVBfRUxFTUVOVF9XT1JEUzsKKyAgICAgIGJpLT5iaXRzID0gYmktPmVsdDEtPmJpdHNbYmktPndvcmRfbm9dICYgYmktPmVsdDItPmJpdHNbYmktPndvcmRfbm9dOworICAgICAgYmktPmJpdHMgPj49IHN0YXJ0X2JpdCAlIEJJVE1BUF9XT1JEX0JJVFM7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogT3RoZXJ3aXNlIHdlIG11c3QgaW1tZWRpYXRlbHkgYWR2YW5jZSBlbHQxLCBzbyBpbml0aWFsaXplIGZvcgorCSB0aGF0LiAgKi8KKyAgICAgIGJpLT53b3JkX25vID0gQklUTUFQX0VMRU1FTlRfV09SRFMgLSAxOworICAgICAgYmktPmJpdHMgPSAwOworICAgIH0KKworICAvKiBJZiB0aGlzIHdvcmQgaXMgemVybywgd2UgbXVzdCBtYWtlIHN1cmUgd2UncmUgbm90IHBvaW50aW5nIGF0IHRoZQorICAgICBmaXJzdCBiaXQsIG90aGVyd2lzZSBvdXIgaW5jcmVtZW50aW5nIHRvIHRoZSBuZXh0IHdvcmQgYm91bmRhcnkKKyAgICAgd2lsbCBmYWlsLiAgSXQgd29uJ3QgbWF0dGVyIGlmIHRoaXMgaW5jcmVtZW50IG1vdmVzIHVzIGludG8gdGhlCisgICAgIG5leHQgd29yZC4gICovCisgIHN0YXJ0X2JpdCArPSAhYmktPmJpdHM7CisKKyAgKmJpdF9ubyA9IHN0YXJ0X2JpdDsKK30KKworLyogSW5pdGlhbGl6ZSBhbiBpdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgdGhlIGJpdHMgaW4gTUFQMSAmIH5NQVAyLgorICAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitibXBfaXRlcl9hbmRfY29tcGxfaW5pdCAoYml0bWFwX2l0ZXJhdG9yICpiaSwKKwkJCSBjb25zdF9iaXRtYXAgbWFwMSwgY29uc3RfYml0bWFwIG1hcDIsCisJCQkgdW5zaWduZWQgc3RhcnRfYml0LCB1bnNpZ25lZCAqYml0X25vKQoreworICBiaS0+ZWx0MSA9IG1hcDEtPmZpcnN0OworICBiaS0+ZWx0MiA9IG1hcDItPmZpcnN0OworCisgIC8qIEFkdmFuY2UgZWx0MSB1bnRpbCBpdCBpcyBub3QgYmVmb3JlIHRoZSBibG9jayBjb250YWluaW5nIHN0YXJ0X2JpdC4gICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICghYmktPmVsdDEpCisJeworCSAgYmktPmVsdDEgPSAmYml0bWFwX3plcm9fYml0czsKKwkgIGJyZWFrOworCX0KKworICAgICAgaWYgKGJpLT5lbHQxLT5pbmR4ID49IHN0YXJ0X2JpdCAvIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTKQorCWJyZWFrOworICAgICAgYmktPmVsdDEgPSBiaS0+ZWx0MS0+bmV4dDsKKyAgICB9CisKKyAgLyogQWR2YW5jZSBlbHQyIHVudGlsIGl0IGlzIG5vdCBiZWZvcmUgZWx0MS4gICovCisgIHdoaWxlIChiaS0+ZWx0MiAmJiBiaS0+ZWx0Mi0+aW5keCA8IGJpLT5lbHQxLT5pbmR4KQorICAgIGJpLT5lbHQyID0gYmktPmVsdDItPm5leHQ7CisKKyAgLyogV2UgbWlnaHQgaGF2ZSBhZHZhbmNlZCBiZXlvbmQgdGhlIHN0YXJ0X2JpdCwgc28gcmVpbml0aWFsaXplIGZvcgorICAgICB0aGF0LiAgKi8KKyAgaWYgKGJpLT5lbHQxLT5pbmR4ICE9IHN0YXJ0X2JpdCAvIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTKQorICAgIHN0YXJ0X2JpdCA9IGJpLT5lbHQxLT5pbmR4ICogQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7CisKKyAgYmktPndvcmRfbm8gPSBzdGFydF9iaXQgLyBCSVRNQVBfV09SRF9CSVRTICUgQklUTUFQX0VMRU1FTlRfV09SRFM7CisgIGJpLT5iaXRzID0gYmktPmVsdDEtPmJpdHNbYmktPndvcmRfbm9dOworICBpZiAoYmktPmVsdDIgJiYgYmktPmVsdDEtPmluZHggPT0gYmktPmVsdDItPmluZHgpCisgICAgYmktPmJpdHMgJj0gfmJpLT5lbHQyLT5iaXRzW2JpLT53b3JkX25vXTsKKyAgYmktPmJpdHMgPj49IHN0YXJ0X2JpdCAlIEJJVE1BUF9XT1JEX0JJVFM7CisKKyAgLyogSWYgdGhpcyB3b3JkIGlzIHplcm8sIHdlIG11c3QgbWFrZSBzdXJlIHdlJ3JlIG5vdCBwb2ludGluZyBhdCB0aGUKKyAgICAgZmlyc3QgYml0LCBvdGhlcndpc2Ugb3VyIGluY3JlbWVudGluZyB0byB0aGUgbmV4dCB3b3JkIGJvdW5kYXJ5CisgICAgIHdpbGwgZmFpbC4gIEl0IHdvbid0IG1hdHRlciBpZiB0aGlzIGluY3JlbWVudCBtb3ZlcyB1cyBpbnRvIHRoZQorICAgICBuZXh0IHdvcmQuICAqLworICBzdGFydF9iaXQgKz0gIWJpLT5iaXRzOworCisgICpiaXRfbm8gPSBzdGFydF9iaXQ7Cit9CisKKy8qIEFkdmFuY2UgdG8gdGhlIG5leHQgYml0IGluIEJJLiAgV2UgZG9uJ3QgYWR2YW5jZSB0byB0aGUgbmV4dAorICAgbm9uemVybyBiaXQgeWV0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitibXBfaXRlcl9uZXh0IChiaXRtYXBfaXRlcmF0b3IgKmJpLCB1bnNpZ25lZCAqYml0X25vKQoreworICBiaS0+Yml0cyA+Pj0gMTsKKyAgKmJpdF9ubyArPSAxOworfQorCisvKiBBZHZhbmNlIHRvIGZpcnN0IHNldCBiaXQgaW4gQkkuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JtcF9pdGVyX25leHRfYml0IChiaXRtYXBfaXRlcmF0b3IgKiBiaSwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyNpZiAoR0NDX1ZFUlNJT04gPj0gMzAwNCkKKyAgeworICAgIHVuc2lnbmVkIGludCBuID0gX19idWlsdGluX2N0emwgKGJpLT5iaXRzKTsKKyAgICBnY2NfYXNzZXJ0IChzaXplb2YgKHVuc2lnbmVkIGxvbmcpID09IHNpemVvZiAoQklUTUFQX1dPUkQpKTsKKyAgICBiaS0+Yml0cyA+Pj0gbjsKKyAgICAqYml0X25vICs9IG47CisgIH0KKyNlbHNlCisgIHdoaWxlICghKGJpLT5iaXRzICYgMSkpCisgICAgeworICAgICAgYmktPmJpdHMgPj49IDE7CisgICAgICAqYml0X25vICs9IDE7CisgICAgfQorI2VuZGlmCit9CisKKy8qIEFkdmFuY2UgdG8gdGhlIG5leHQgbm9uemVybyBiaXQgb2YgYSBzaW5nbGUgYml0bWFwLCB3ZSB3aWxsIGhhdmUKKyAgIGFscmVhZHkgYWR2YW5jZWQgcGFzdCB0aGUganVzdCBpdGVyYXRlZCBiaXQuICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZQorICAgaXMgYSBiaXQgdG8gaXRlcmF0ZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorYm1wX2l0ZXJfc2V0IChiaXRtYXBfaXRlcmF0b3IgKmJpLCB1bnNpZ25lZCAqYml0X25vKQoreworICAvKiBJZiBvdXIgY3VycmVudCB3b3JkIGlzIG5vbnplcm8sIGl0IGNvbnRhaW5zIHRoZSBiaXQgd2Ugd2FudC4gICovCisgIGlmIChiaS0+Yml0cykKKyAgICB7CisgICAgbmV4dF9iaXQ6CisgICAgICBibXBfaXRlcl9uZXh0X2JpdCAoYmksIGJpdF9ubyk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyogUm91bmQgdXAgdG8gdGhlIHdvcmQgYm91bmRhcnkuICBXZSBtaWdodCBoYXZlIGp1c3QgaXRlcmF0ZWQgcGFzdAorICAgICB0aGUgZW5kIG9mIHRoZSBsYXN0IHdvcmQsIGhlbmNlIHRoZSAtMS4gIEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IKKyAgICAgYml0X25vIHRvIHBvaW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5vdyBsYXN0IHdvcmQuICAqLworICAqYml0X25vID0gKCgqYml0X25vICsgQklUTUFQX1dPUkRfQklUUyAtIDEpCisJICAgICAvIEJJVE1BUF9XT1JEX0JJVFMgKiBCSVRNQVBfV09SRF9CSVRTKTsKKyAgYmktPndvcmRfbm8rKzsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBGaW5kIHRoZSBuZXh0IG5vbnplcm8gd29yZCBpbiB0aGlzIGVsdC4gICovCisgICAgICB3aGlsZSAoYmktPndvcmRfbm8gIT0gQklUTUFQX0VMRU1FTlRfV09SRFMpCisJeworCSAgYmktPmJpdHMgPSBiaS0+ZWx0MS0+Yml0c1tiaS0+d29yZF9ub107CisJICBpZiAoYmktPmJpdHMpCisJICAgIGdvdG8gbmV4dF9iaXQ7CisJICAqYml0X25vICs9IEJJVE1BUF9XT1JEX0JJVFM7CisJICBiaS0+d29yZF9ubysrOworCX0KKworICAgICAgLyogQWR2YW5jZSB0byB0aGUgbmV4dCBlbGVtZW50LiAgKi8KKyAgICAgIGJpLT5lbHQxID0gYmktPmVsdDEtPm5leHQ7CisgICAgICBpZiAoIWJpLT5lbHQxKQorCXJldHVybiBmYWxzZTsKKyAgICAgICpiaXRfbm8gPSBiaS0+ZWx0MS0+aW5keCAqIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTOworICAgICAgYmktPndvcmRfbm8gPSAwOworICAgIH0KK30KKworLyogQWR2YW5jZSB0byB0aGUgbmV4dCBub256ZXJvIGJpdCBvZiBhbiBpbnRlcnNlY3RpbmcgcGFpciBvZgorICAgYml0bWFwcy4gIFdlIHdpbGwgaGF2ZSBhbHJlYWR5IGFkdmFuY2VkIHBhc3QgdGhlIGp1c3QgaXRlcmF0ZWQgYml0LgorICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBiaXQgdG8gaXRlcmF0ZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorYm1wX2l0ZXJfYW5kIChiaXRtYXBfaXRlcmF0b3IgKmJpLCB1bnNpZ25lZCAqYml0X25vKQoreworICAvKiBJZiBvdXIgY3VycmVudCB3b3JkIGlzIG5vbnplcm8sIGl0IGNvbnRhaW5zIHRoZSBiaXQgd2Ugd2FudC4gICovCisgIGlmIChiaS0+Yml0cykKKyAgICB7CisgICAgbmV4dF9iaXQ6CisgICAgICBibXBfaXRlcl9uZXh0X2JpdCAoYmksIGJpdF9ubyk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgLyogUm91bmQgdXAgdG8gdGhlIHdvcmQgYm91bmRhcnkuICBXZSBtaWdodCBoYXZlIGp1c3QgaXRlcmF0ZWQgcGFzdAorICAgICB0aGUgZW5kIG9mIHRoZSBsYXN0IHdvcmQsIGhlbmNlIHRoZSAtMS4gIEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IKKyAgICAgYml0X25vIHRvIHBvaW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5vdyBsYXN0IHdvcmQuICAqLworICAqYml0X25vID0gKCgqYml0X25vICsgQklUTUFQX1dPUkRfQklUUyAtIDEpCisJICAgICAvIEJJVE1BUF9XT1JEX0JJVFMgKiBCSVRNQVBfV09SRF9CSVRTKTsKKyAgYmktPndvcmRfbm8rKzsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBGaW5kIHRoZSBuZXh0IG5vbnplcm8gd29yZCBpbiB0aGlzIGVsdC4gICovCisgICAgICB3aGlsZSAoYmktPndvcmRfbm8gIT0gQklUTUFQX0VMRU1FTlRfV09SRFMpCisJeworCSAgYmktPmJpdHMgPSBiaS0+ZWx0MS0+Yml0c1tiaS0+d29yZF9ub10gJiBiaS0+ZWx0Mi0+Yml0c1tiaS0+d29yZF9ub107CisJICBpZiAoYmktPmJpdHMpCisJICAgIGdvdG8gbmV4dF9iaXQ7CisJICAqYml0X25vICs9IEJJVE1BUF9XT1JEX0JJVFM7CisJICBiaS0+d29yZF9ubysrOworCX0KKworICAgICAgLyogQWR2YW5jZSB0byB0aGUgbmV4dCBpZGVudGljYWwgZWxlbWVudC4gICovCisgICAgICBkbworCXsKKwkgIC8qIEFkdmFuY2UgZWx0MSB3aGlsZSBpdCBpcyBsZXNzIHRoYW4gZWx0Mi4gIFdlIGFsd2F5cyB3YW50CisJICAgICB0byBhZHZhbmNlIG9uZSBlbHQuICAqLworCSAgZG8KKwkgICAgeworCSAgICAgIGJpLT5lbHQxID0gYmktPmVsdDEtPm5leHQ7CisJICAgICAgaWYgKCFiaS0+ZWx0MSkKKwkJcmV0dXJuIGZhbHNlOworCSAgICB9CisJICB3aGlsZSAoYmktPmVsdDEtPmluZHggPCBiaS0+ZWx0Mi0+aW5keCk7CisKKwkgIC8qIEFkdmFuY2UgZWx0MiB0byBiZSBubyBsZXNzIHRoYW4gZWx0MS4gIFRoaXMgbWlnaHQgbm90CisJICAgICBhZHZhbmNlLiAgKi8KKwkgIHdoaWxlIChiaS0+ZWx0Mi0+aW5keCA8IGJpLT5lbHQxLT5pbmR4KQorCSAgICB7CisJICAgICAgYmktPmVsdDIgPSBiaS0+ZWx0Mi0+bmV4dDsKKwkgICAgICBpZiAoIWJpLT5lbHQyKQorCQlyZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgICB3aGlsZSAoYmktPmVsdDEtPmluZHggIT0gYmktPmVsdDItPmluZHgpOworCisgICAgICAqYml0X25vID0gYmktPmVsdDEtPmluZHggKiBCSVRNQVBfRUxFTUVOVF9BTExfQklUUzsKKyAgICAgIGJpLT53b3JkX25vID0gMDsKKyAgICB9Cit9CisKKy8qIEFkdmFuY2UgdG8gdGhlIG5leHQgbm9uemVybyBiaXQgaW4gdGhlIGludGVyc2VjdGlvbiBvZgorICAgY29tcGxlbWVudGVkIGJpdG1hcHMuICBXZSB3aWxsIGhhdmUgYWxyZWFkeSBhZHZhbmNlZCBwYXN0IHRoZSBqdXN0CisgICBpdGVyYXRlZCBiaXQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2JtcF9pdGVyX2FuZF9jb21wbCAoYml0bWFwX2l0ZXJhdG9yICpiaSwgdW5zaWduZWQgKmJpdF9ubykKK3sKKyAgLyogSWYgb3VyIGN1cnJlbnQgd29yZCBpcyBub256ZXJvLCBpdCBjb250YWlucyB0aGUgYml0IHdlIHdhbnQuICAqLworICBpZiAoYmktPmJpdHMpCisgICAgeworICAgIG5leHRfYml0OgorICAgICAgYm1wX2l0ZXJfbmV4dF9iaXQgKGJpLCBiaXRfbm8pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgIC8qIFJvdW5kIHVwIHRvIHRoZSB3b3JkIGJvdW5kYXJ5LiAgV2UgbWlnaHQgaGF2ZSBqdXN0IGl0ZXJhdGVkIHBhc3QKKyAgICAgdGhlIGVuZCBvZiB0aGUgbGFzdCB3b3JkLCBoZW5jZSB0aGUgLTEuICBJdCBpcyBub3QgcG9zc2libGUgZm9yCisgICAgIGJpdF9ubyB0byBwb2ludCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBub3cgbGFzdCB3b3JkLiAgKi8KKyAgKmJpdF9ubyA9ICgoKmJpdF9ubyArIEJJVE1BUF9XT1JEX0JJVFMgLSAxKQorCSAgICAgLyBCSVRNQVBfV09SRF9CSVRTICogQklUTUFQX1dPUkRfQklUUyk7CisgIGJpLT53b3JkX25vKys7CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgLyogRmluZCB0aGUgbmV4dCBub256ZXJvIHdvcmQgaW4gdGhpcyBlbHQuICAqLworICAgICAgd2hpbGUgKGJpLT53b3JkX25vICE9IEJJVE1BUF9FTEVNRU5UX1dPUkRTKQorCXsKKwkgIGJpLT5iaXRzID0gYmktPmVsdDEtPmJpdHNbYmktPndvcmRfbm9dOworCSAgaWYgKGJpLT5lbHQyICYmIGJpLT5lbHQyLT5pbmR4ID09IGJpLT5lbHQxLT5pbmR4KQorCSAgICBiaS0+Yml0cyAmPSB+YmktPmVsdDItPmJpdHNbYmktPndvcmRfbm9dOworCSAgaWYgKGJpLT5iaXRzKQorCSAgICBnb3RvIG5leHRfYml0OworCSAgKmJpdF9ubyArPSBCSVRNQVBfV09SRF9CSVRTOworCSAgYmktPndvcmRfbm8rKzsKKwl9CisKKyAgICAgIC8qIEFkdmFuY2UgdG8gdGhlIG5leHQgZWxlbWVudCBvZiBlbHQxLiAgKi8KKyAgICAgIGJpLT5lbHQxID0gYmktPmVsdDEtPm5leHQ7CisgICAgICBpZiAoIWJpLT5lbHQxKQorCXJldHVybiBmYWxzZTsKKworICAgICAgLyogQWR2YW5jZSBlbHQyIHVudGlsIGl0IGlzIG5vIGxlc3MgdGhhbiBlbHQxLiAgKi8KKyAgICAgIHdoaWxlIChiaS0+ZWx0MiAmJiBiaS0+ZWx0Mi0+aW5keCA8IGJpLT5lbHQxLT5pbmR4KQorCWJpLT5lbHQyID0gYmktPmVsdDItPm5leHQ7CisKKyAgICAgICpiaXRfbm8gPSBiaS0+ZWx0MS0+aW5keCAqIEJJVE1BUF9FTEVNRU5UX0FMTF9CSVRTOworICAgICAgYmktPndvcmRfbm8gPSAwOworICAgIH0KK30KKworLyogTG9vcCBvdmVyIGFsbCBiaXRzIHNldCBpbiBCSVRNQVAsIHN0YXJ0aW5nIHdpdGggTUlOIGFuZCBzZXR0aW5nCisgICBCSVROVU0gdG8gdGhlIGJpdCBudW1iZXIuICBJVEVSIGlzIGEgYml0bWFwIGl0ZXJhdG9yLiAgQklUTlVNCisgICBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHJlYWQtb25seSB2YXJpYWJsZSBhcyBpdCBjb250YWlucyBsb29wCisgICBzdGF0ZS4gICovCisKKyNpZm5kZWYgRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQCisvKiBTZWUgc2JpdG1hcC5oIGZvciB0aGUgb3RoZXIgZGVmaW5pdGlvbiBvZiBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAuICAqLworI2RlZmluZSBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAoQklUTUFQLCBNSU4sIEJJVE5VTSwgSVRFUikJCVwKKyAgZm9yIChibXBfaXRlcl9zZXRfaW5pdCAoJihJVEVSKSwgKEJJVE1BUCksIChNSU4pLCAmKEJJVE5VTSkpOwkJXAorICAgICAgIGJtcF9pdGVyX3NldCAoJihJVEVSKSwgJihCSVROVU0pKTsJCQkJXAorICAgICAgIGJtcF9pdGVyX25leHQgKCYoSVRFUiksICYoQklUTlVNKSkpCisjZW5kaWYKKworLyogTG9vcCBvdmVyIGFsbCB0aGUgYml0cyBzZXQgaW4gQklUTUFQMSAmIEJJVE1BUDIsIHN0YXJ0aW5nIHdpdGggTUlOCisgICBhbmQgc2V0dGluZyBCSVROVU0gdG8gdGhlIGJpdCBudW1iZXIuICBJVEVSIGlzIGEgYml0bWFwIGl0ZXJhdG9yLgorICAgQklUTlVNIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgcmVhZC1vbmx5IHZhcmlhYmxlIGFzIGl0IGNvbnRhaW5zCisgICBsb29wIHN0YXRlLiAgKi8KKworI2RlZmluZSBFWEVDVVRFX0lGX0FORF9JTl9CSVRNQVAoQklUTUFQMSwgQklUTUFQMiwgTUlOLCBCSVROVU0sIElURVIpCVwKKyAgZm9yIChibXBfaXRlcl9hbmRfaW5pdCAoJihJVEVSKSwgKEJJVE1BUDEpLCAoQklUTUFQMiksIChNSU4pLAkJXAorCQkJICAmKEJJVE5VTSkpOwkJCQkJXAorICAgICAgIGJtcF9pdGVyX2FuZCAoJihJVEVSKSwgJihCSVROVU0pKTsJCQkJXAorICAgICAgIGJtcF9pdGVyX25leHQgKCYoSVRFUiksICYoQklUTlVNKSkpCisKKy8qIExvb3Agb3ZlciBhbGwgdGhlIGJpdHMgc2V0IGluIEJJVE1BUDEgJiB+QklUTUFQMiwgc3RhcnRpbmcgd2l0aCBNSU4KKyAgIGFuZCBzZXR0aW5nIEJJVE5VTSB0byB0aGUgYml0IG51bWJlci4gIElURVIgaXMgYSBiaXRtYXAgaXRlcmF0b3IuCisgICBCSVROVU0gc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSByZWFkLW9ubHkgdmFyaWFibGUgYXMgaXQgY29udGFpbnMKKyAgIGxvb3Agc3RhdGUuICAqLworCisjZGVmaW5lIEVYRUNVVEVfSUZfQU5EX0NPTVBMX0lOX0JJVE1BUChCSVRNQVAxLCBCSVRNQVAyLCBNSU4sIEJJVE5VTSwgSVRFUikgXAorICBmb3IgKGJtcF9pdGVyX2FuZF9jb21wbF9pbml0ICgmKElURVIpLCAoQklUTUFQMSksIChCSVRNQVAyKSwgKE1JTiksCVwKKwkJCQkmKEJJVE5VTSkpOwkJCQlcCisgICAgICAgYm1wX2l0ZXJfYW5kX2NvbXBsICgmKElURVIpLCAmKEJJVE5VTSkpOwkJCQlcCisgICAgICAgYm1wX2l0ZXJfbmV4dCAoJihJVEVSKSwgJihCSVROVU0pKSkKKworI2VuZGlmIC8qIEdDQ19CSVRNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2J1aWx0aW5zLmRlZiBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9idWlsdGlucy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzNzhmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9idWlsdGlucy5kZWYKQEAgLTAsMCArMSw4MzkgQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgYW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZQorICAgYnVpbHRpbnMgdXNlZCBpbiB0aGUgR05VIGNvbXBpbGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBCZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSwgeW91IHNob3VsZCBkZWZpbmUgYSBtYWNybzoKKworICAgICBERUZfQlVJTFRJTiAoRU5VTSwgTkFNRSwgQ0xBU1MsIFRZUEUsIExJQlRZUEUsIEJPVEhfUCwKKyAgICAgICAgICAgICAgICAgIEZBTExCQUNLX1AsIE5PTkFOU0lfUCwgQVRUUlMsIElNUExJQ0lULCBDT05EKQorCisgICBUaGlzIG1hY3JvIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggYnVpbHRpbiBmdW5jdGlvbi4gIFRoZQorICAgRU5VTSB3aWxsIGJlIG9mIHR5cGUgYGVudW0gYnVpbHRfaW5fZnVuY3Rpb24nLCBhbmQgd2lsbCBpbmRpY2F0ZQorICAgd2hpY2ggYnVpbHRpbiBmdW5jdGlvbiBpcyBiZWluZyBwcm9jZXNzZWQuICBUaGUgTkFNRSBvZiB0aGUgYnVpbHRpbgorICAgZnVuY3Rpb24gKHdoaWNoIHdpbGwgYWx3YXlzIHN0YXJ0IHdpdGggYF9fYnVpbHRpbl8nKSBpcyBhIHN0cmluZworICAgbGl0ZXJhbC4gIFRoZSBDTEFTUyBpcyBvZiB0eXBlIGBlbnVtIGJ1aWx0X2luX2NsYXNzJyBhbmQgaW5kaWNhdGVzCisgICB3aGF0IGtpbmQgb2YgYnVpbHRpbiBpcyBiZWluZyBwcm9jZXNzZWQuCisKKyAgIFNvbWUgYnVpbHRpbnMgYXJlIGFjdHVhbGx5IHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMuICBGb3IgZXhhbXBsZSwKKyAgIGZvciBgc3RyY21wJyB0aGVyZSBhcmUgdHdvIGJ1aWx0aW4gZnVuY3Rpb25zOyBgX19idWlsdGluX3N0cmNtcCcKKyAgIGFuZCBgc3RyY21wJyBpdHNlbGYuICBCb3RoIGJlaGF2ZSBpZGVudGljYWxseS4gIE90aGVyIGJ1aWx0aW5zCisgICBkZWZpbmUgb25seSB0aGUgYF9fYnVpbHRpbicgdmFyaWFudC4gIElmIEJPVEhfUCBpcyBUUlVFLCB0aGVuIHRoaXMKKyAgIGJ1aWx0aW4gaGFzIGJvdGggdmFyaWFudHM7IG90aGVyd2lzZSwgaXQgaXMgaGFzIG9ubHkgdGhlIGZpcnN0CisgICB2YXJpYW50LgorCisgICBUWVBFIGluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24uICBUaGUgc3ltYm9scyBjb3JyZXNwb25kIHRvCisgICBlbnVtZXJhbHMgZnJvbSBidWlsdGluLXR5cGVzLmRlZi4gIElmIEJPVEhfUCBpcyB0cnVlLCB0aGVuIExJQlRZUEUKKyAgIGlzIHRoZSB0eXBlIG9mIHRoZSBub24tYF9fYnVpbHRpbl8nIHZhcmlhbnQuICBPdGhlcndpc2UsIExJQlRZUEUKKyAgIHNob3VsZCBiZSBpZ25vcmVkLgorCisgICBJZiBGQUxMQkFDS19QIGlzIHRydWUgdGhlbiwgaWYgZm9yIHNvbWUgcmVhc29uLCB0aGUgY29tcGlsZXIgY2Fubm90CisgICBleHBhbmQgdGhlIGJ1aWx0aW4gZnVuY3Rpb24gZGlyZWN0bHksIGl0IHdpbGwgY2FsbCB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgbGlicmFyeSBmdW5jdGlvbiAod2hpY2ggZG9lcyBub3QgaGF2ZSB0aGUKKyAgIGBfX2J1aWx0aW5fJyBwcmVmaXguCisKKyAgIElmIE5PTkFOU0lfUCBpcyB0cnVlLCB0aGVuIHRoZSBub24tYF9fYnVpbHRpbl8nIHZhcmlhbnQgaXMgbm90IGFuCisgICBBTlNJL0lTTyBsaWJyYXJ5IGZ1bmN0aW9uLCBhbmQgc28gd2Ugc2hvdWxkIHByZXRlbmQgaXQgZG9lcyBub3QKKyAgIGV4aXN0IHdoZW4gY29tcGlsaW5nIGluIEFOU0kgY29uZm9ybWFudCBtb2RlLgorCisgICBBVFRScyBpcyBhbiBhdHRyaWJ1dGUgbGlzdCBhcyBkZWZpbmVkIGluIGJ1aWx0aW4tYXR0cnMuZGVmIHRoYXQKKyAgIGRlc2NyaWJlcyB0aGUgYXR0cmlidXRlcyBvZiB0aGlzIGJ1aWx0aW4gZnVuY3Rpb24uCisKKyAgIElNUExJQ0lUIHNwZWNpZmllcyBjb25kaXRpb24gd2hlbiB0aGUgYnVpbHRpbiBjYW4gYmUgcHJvZHVjZWQgYnkKKyAgIGNvbXBpbGVyLiAgRm9yIGluc3RhbmNlIEM5MCByZXNlcnZlcyBmbG9vcmYgZnVuY3Rpb24sIGJ1dCBkb2VzIG5vdAorICAgZGVmaW5lIGl0J3MgbWVhbmluZy4gIFdoZW4gdXNlciB1c2VzIGZsb29yZiB3ZSBtYXkgYXNzdW1lIHRoYXQgdGhlCisgICBmbG9vcmYgaGFzIHRoZSBtZWFuaW5nIHdlIGV4cGVjdCwgYnV0IHdlIGNhbid0IHByb2R1Y2UgZmxvb3JmIGJ5CisgICBzaW1wbGlmeWluZyBmbG9vcigoZG91YmxlKWZsb2F0KSBzaW5jZSB0aGUgcnVudGltZSBuZWVkIG5vdCBpbXBsZW1lbnQKKyAgIGl0LgorCisgICBUaGUgYnVpbHRpbnMgaXMgcmVnaXN0ZXJlZCBvbmx5IGlmIENPTkQgaXMgdHJ1ZS4gICovCisKKy8qIEEgR0NDIGJ1aWx0aW4gKGxpa2UgX19idWlsdGluX3NhdmVyZWdzKSBpcyBwcm92aWRlZCBieSB0aGUKKyAgIGNvbXBpbGVyLCBidXQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGZ1bmN0aW9uIGluIHRoZSBzdGFuZGFyZAorICAgbGlicmFyeS4gICovCisjdW5kZWYgREVGX0dDQ19CVUlMVElOCisjZGVmaW5lIERFRl9HQ0NfQlVJTFRJTihFTlVNLCBOQU1FLCBUWVBFLCBBVFRSUykJCVwKKyAgREVGX0JVSUxUSU4gKEVOVU0sICJfX2J1aWx0aW5fIiBOQU1FLCBCVUlMVF9JTl9OT1JNQUwsIFRZUEUsIEJUX0xBU1QsCVwKKwkgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgQVRUUlMsIHRydWUsIHRydWUpCisKKy8qIExpa2UgREVGX0dDQ19CVUlMVElOLCBleGNlcHQgd2UgZG9uJ3QgcHJlcGVuZCAiX19idWlsdGluXyIuICAqLworI3VuZGVmIERFRl9TWU5DX0JVSUxUSU4KKyNkZWZpbmUgREVGX1NZTkNfQlVJTFRJTihFTlVNLCBOQU1FLCBUWVBFLCBBVFRSUykJCVwKKyAgREVGX0JVSUxUSU4gKEVOVU0sIE5BTUUsIEJVSUxUX0lOX05PUk1BTCwgVFlQRSwgQlRfTEFTVCwJXAorCSAgICAgICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBBVFRSUywgdHJ1ZSwgdHJ1ZSkKKworLyogQSBsaWJyYXJ5IGJ1aWx0aW4gKGxpa2UgX19idWlsdGluX3N0cmNocikgaXMgYSBidWlsdGluIGVxdWl2YWxlbnQKKyAgIG9mIGFuIEFOU0kvSVNPIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb24uICBJbiBhZGRpdGlvbiB0byB0aGUKKyAgIGBfX2J1aWx0aW4nIHZlcnNpb24sIHdlIHdpbGwgY3JlYXRlIGFuIG9yZGluYXJ5IHZlcnNpb24gKGUuZywKKyAgIGBzdHJjaHInKSBhcyB3ZWxsLiAgSWYgd2UgY2Fubm90IGNvbXB1dGUgdGhlIGFuc3dlciB1c2luZyB0aGUKKyAgIGJ1aWx0aW4gZnVuY3Rpb24sIHdlIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CisgICB2ZXJzaW9uLiAgKi8KKyN1bmRlZiBERUZfTElCX0JVSUxUSU4KKyNkZWZpbmUgREVGX0xJQl9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKQlcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLAlcCisJICAgICAgIHRydWUsIHRydWUsIGZhbHNlLCBBVFRSUywgdHJ1ZSwgdHJ1ZSkKKworLyogTGlrZSBERUZfTElCX0JVSUxUSU4sIGV4Y2VwdCB0aGF0IHRoZSBmdW5jdGlvbiBpcyBub3Qgb25lIHRoYXQgaXMKKyAgIHNwZWNpZmllZCBieSBBTlNJL0lTTyBDLiAgU28sIHdoZW4gd2UncmUgYmVpbmcgZnVsbHkgY29uZm9ybWFudCB3ZQorICAgaWdub3JlIHRoZSB2ZXJzaW9uIG9mIHRoZXNlIGJ1aWx0aW5zIHRoYXQgZG9lcyBub3QgYmVnaW4gd2l0aAorICAgX19idWlsdGluLiAgKi8KKyN1bmRlZiBERUZfRVhUX0xJQl9CVUlMVElOCisjZGVmaW5lIERFRl9FWFRfTElCX0JVSUxUSU4oRU5VTSwgTkFNRSwgVFlQRSwgQVRUUlMpCVwKKyAgREVGX0JVSUxUSU4gKEVOVU0sICJfX2J1aWx0aW5fIiBOQU1FLCBCVUlMVF9JTl9OT1JNQUwsIFRZUEUsIFRZUEUsCVwKKwkgICAgICAgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgQVRUUlMsIGZhbHNlLCB0cnVlKQorCisvKiBMaWtlIERFRl9MSUJfQlVJTFRJTiwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgYSBwYXJ0IG9mCisgICB0aGUgc3RhbmRhcmQgaW4gQzk0IG9yIGFib3ZlLiAgKi8KKyN1bmRlZiBERUZfQzk0X0JVSUxUSU4KKyNkZWZpbmUgREVGX0M5NF9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKQlcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLAlcCisJICAgICAgIHRydWUsIHRydWUsICFmbGFnX2lzb2M5NCwgQVRUUlMsIFRBUkdFVF9DOTlfRlVOQ1RJT05TLCB0cnVlKQorCisvKiBMaWtlIERFRl9MSUJfQlVJTFRJTiwgZXhjZXB0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIG9ubHkgYSBwYXJ0IG9mCisgICB0aGUgc3RhbmRhcmQgaW4gQzk5IG9yIGFib3ZlLiAgKi8KKyN1bmRlZiBERUZfQzk5X0JVSUxUSU4KKyNkZWZpbmUgREVGX0M5OV9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKQlcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLAlcCisJICAgICAgIHRydWUsIHRydWUsICFmbGFnX2lzb2M5OSwgQVRUUlMsIFRBUkdFVF9DOTlfRlVOQ1RJT05TLCB0cnVlKQorCisvKiBCdWlsdGluIHRoYXQgaXMgc3BlY2lmaWVkIGJ5IEM5OSBhbmQgQzkwIHJlc2VydmUgdGhlIG5hbWUgZm9yIGZ1dHVyZSB1c2UuCisgICBXZSBjYW4gc3RpbGwgcmVjb2duaXplIHRoZSBidWlsdGluIGluIEM5MCBtb2RlIGJ1dCB3ZSBjYW4ndCBwcm9kdWNlIGl0CisgICBpbXBsaWNpdGx5LiAgKi8KKyN1bmRlZiBERUZfQzk5X0M5MFJFU19CVUlMVElOCisjZGVmaW5lIERFRl9DOTlfQzkwUkVTX0JVSUxUSU4oRU5VTSwgTkFNRSwgVFlQRSwgQVRUUlMpCVwKKyAgREVGX0JVSUxUSU4gKEVOVU0sICJfX2J1aWx0aW5fIiBOQU1FLCBCVUlMVF9JTl9OT1JNQUwsIFRZUEUsIFRZUEUsCVwKKwkgICAgICAgdHJ1ZSwgdHJ1ZSwgIWZsYWdfaXNvYzk5LCBBVFRSUywgVEFSR0VUX0M5OV9GVU5DVElPTlMsIHRydWUpCisKKy8qIEJ1aWx0aW4gdGhhdCBDOTkgcmVzZXJ2ZSB0aGUgbmFtZSBmb3IgZnV0dXJlIHVzZS4gV2UgY2FuIHN0aWxsIHJlY29nbml6ZQorICAgdGhlIGJ1aWx0aW4gaW4gQzk5IG1vZGUgYnV0IHdlIGNhbid0IHByb2R1Y2UgaXQgaW1wbGljaXRseS4gICovCisjdW5kZWYgREVGX0VYVF9DOTlSRVNfQlVJTFRJTgorI2RlZmluZSBERUZfRVhUX0M5OVJFU19CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKSAgICAgICAgXAorICBERUZfQlVJTFRJTiAoRU5VTSwgIl9fYnVpbHRpbl8iIE5BTUUsIEJVSUxUX0lOX05PUk1BTCwgVFlQRSwgVFlQRSwgICBcCisJICAgICAgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgQVRUUlMsIGZhbHNlLCB0cnVlKQorCisvKiBBbGxvY2F0ZSB0aGUgZW51bSBhbmQgdGhlIG5hbWUgZm9yIGEgYnVpbHRpbiwgYnV0IGRvIG5vdCBhY3R1YWxseQorICAgZGVmaW5lIGl0IGhlcmUgYXQgYWxsLiAgKi8KKyN1bmRlZiBERUZfQlVJTFRJTl9TVFVCCisjZGVmaW5lIERFRl9CVUlMVElOX1NUVUIoRU5VTSwgTkFNRSkgXAorICBERUZfQlVJTFRJTiAoRU5VTSwgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBCVF9MQVNULCBCVF9MQVNULCBmYWxzZSwgZmFsc2UsIFwKKwkgICAgICAgZmFsc2UsIEFUVFJfTEFTVCwgZmFsc2UsIGZhbHNlKQorCisvKiBCdWlsdGluIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIG9mIEdOVSBPcGVuTVAuICBOb25lIG9mIHRoZXNlIGFyZQorICAgYWN0dWFsbHkgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbXBpbGVyOyB0aGV5J3JlIGFsbCBpbiBsaWJnb21wLiAgKi8KKyN1bmRlZiBERUZfR09NUF9CVUlMVElOCisjZGVmaW5lIERFRl9HT01QX0JVSUxUSU4oRU5VTSwgTkFNRSwgVFlQRSwgQVRUUlMpIFwKKyAgREVGX0JVSUxUSU4gKEVOVU0sICJfX2J1aWx0aW5fIiBOQU1FLCBCVUlMVF9JTl9OT1JNQUwsIFRZUEUsIFRZUEUsICAgIFwKKyAgICAgICAgICAgICAgIGZhbHNlLCB0cnVlLCB0cnVlLCBBVFRSUywgZmFsc2UsIFwKKwkgICAgICAgKGZsYWdfb3Blbm1wIHx8IGZsYWdfdHJlZV9wYXJhbGxlbGl6ZV9sb29wcykpCisKKy8qIEJ1aWx0aW4gdXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gb2YgR05VIFRNLiAgVGhlc2UKKyAgIGZ1bmN0aW9ucyBhcmUgbWFwcGVkIHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNUTSBsaWJyYXJ5LiAqLworI3VuZGVmIERFRl9UTV9CVUlMVElOCisjZGVmaW5lIERFRl9UTV9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKSBcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLCAgICBcCisJICAgICAgIHRydWUsIHRydWUsIHRydWUsIEFUVFJTLCBmYWxzZSwgZmxhZ190bSkKKworLyogQnVpbHRpbiB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBsaWJzYW5pdGl6ZXIuIFRoZXNlCisgICBmdW5jdGlvbnMgYXJlIG1hcHBlZCB0byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSAKKyAgIGxpYnRzYW4gbGlicmFyeS4gKi8KKyN1bmRlZiBERUZfU0FOSVRJWkVSX0JVSUxUSU4KKyNkZWZpbmUgREVGX1NBTklUSVpFUl9CVUlMVElOKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKSBcCisgIERFRl9CVUlMVElOIChFTlVNLCAiX19idWlsdGluXyIgTkFNRSwgQlVJTFRfSU5fTk9STUFMLCBUWVBFLCBUWVBFLCAgICBcCisJICAgICAgIHRydWUsIHRydWUsIHRydWUsIEFUVFJTLCB0cnVlLCBcCisJICAgICAgIChmbGFnX2FzYW4gfHwgZmxhZ190c2FuKSkKKworLyogRGVmaW5lIGFuIGF0dHJpYnV0ZSBsaXN0IGZvciBtYXRoIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3JtYWxseQorICAgImltcHVyZSIgYmVjYXVzZSBzb21lIG9mIHRoZW0gbWF5IHdyaXRlIGludG8gZ2xvYmFsIG1lbW9yeSBmb3IKKyAgIGBlcnJubycuICBJZiAhZmxhZ19lcnJub19tYXRoIHRoZXkgYXJlIGluc3RlYWQgImNvbnN0Ii4gICovCisjdW5kZWYgQVRUUl9NQVRIRk5fRVJSTk8KKyNkZWZpbmUgQVRUUl9NQVRIRk5fRVJSTk8gKGZsYWdfZXJybm9fbWF0aCA/IFwKKwlBVFRSX05PVEhST1dfTEVBRl9MSVNUIDogQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKKworLyogRGVmaW5lIGFuIGF0dHJpYnV0ZSBsaXN0IGZvciBtYXRoIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3JtYWxseQorICAgImNvbnN0IiBidXQgaWYgZmxhZ19yb3VuZGluZ19tYXRoIGlzIHNldCB0aGV5IGFyZSBpbnN0ZWFkICJwdXJlIi4KKyAgIFRoaXMgZGlzdGluY3Rpb24gYWNjb3VudHMgZm9yIHRoZSBmYWN0IHRoYXQgc29tZSBtYXRoIGZ1bmN0aW9ucworICAgY2hlY2sgdGhlIHJvdW5kaW5nIG1vZGUgd2hpY2ggaXMgYWtpbiB0byBleGFtaW5pbmcgZ2xvYmFsCisgICBtZW1vcnkuICAqLworI3VuZGVmIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcKKyNkZWZpbmUgQVRUUl9NQVRIRk5fRlBST1VORElORyAoZmxhZ19yb3VuZGluZ19tYXRoID8gXAorCUFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCA6IEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCisKKy8qIERlZmluZSBhbiBhdHRyaWJ1dGUgbGlzdCBmb3IgbWF0aCBmdW5jdGlvbnMgdGhhdCBhcmUgbm9ybWFsbHkKKyAgICJpbXB1cmUiIGJlY2F1c2Ugc29tZSBvZiB0aGVtIG1heSB3cml0ZSBpbnRvIGdsb2JhbCBtZW1vcnkgZm9yCisgICBgZXJybm8nLiAgSWYgIWZsYWdfZXJybm9fbWF0aCwgd2UgY2FuIHBvc3NpYmx5IHVzZSAicHVyZSIgb3IKKyAgICJjb25zdCIgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgY2FyZSBhYm91dCBGUCByb3VuZGluZy4gICovCisjdW5kZWYgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTworI2RlZmluZSBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PIChmbGFnX2Vycm5vX21hdGggPyBcCisJQVRUUl9OT1RIUk9XX0xFQUZfTElTVCA6IEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCisKKy8qIERlZmluZSBhbiBhdHRyaWJ1dGUgbGlzdCBmb3IgbWF0aCBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIG1pbmQgRlAKKyAgIHJvdW5kaW5nLCBidXQgYmVjYXVzZSB0aGV5IHN0b3JlIGludG8gbWVtb3J5IHRoZXkgYXJlIG5ldmVyICJjb25zdCIKKyAgIG9yICJwdXJlIi4gIFVzZSBvZiB0aGlzIG1hY3JvIGlzIG1haW5seSBmb3IgZG9jdW1lbnRhdGlvbiBhbmQKKyAgIG1haW50ZW5hbmNlIHB1cnBvc2VzLiAgKi8KKyN1bmRlZiBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFCisjZGVmaW5lIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUgQVRUUl9OT1RIUk9XX0xFQUZfTElTVAorCisvKiBNYWtlIHN1cmUgMCBpcyBub3QgYSBsZWdpdGltYXRlIGJ1aWx0aW4uICAqLworREVGX0JVSUxUSU5fU1RVQihCVUlMVF9JTl9OT05FLCAoY29uc3QgY2hhciAqKTApCisKKy8qIENhdGVnb3J5OiBtYXRoIGJ1aWx0aW5zLiAgKi8KK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FDT1MsICJhY29zIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0FDT1NGLCAiYWNvc2YiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FDT1NILCAiYWNvc2giLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQUNPU0hGLCAiYWNvc2hmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BQ09TSEwsICJhY29zaGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9BQ09TTCwgImFjb3NsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQVNJTiwgImFzaW4iLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQVNJTkYsICJhc2luZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQVNJTkgsICJhc2luaCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BU0lOSEYsICJhc2luaGYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FTSU5ITCwgImFzaW5obCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0FTSU5MLCAiYXNpbmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BVEFOLCAiYXRhbiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BVEFOMiwgImF0YW4yIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9BVEFOMkYsICJhdGFuMmYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0FUQU4yTCwgImF0YW4ybCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQVRBTkYsICJhdGFuZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQVRBTkgsICJhdGFuaCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BVEFOSEYsICJhdGFuaGYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FUQU5ITCwgImF0YW5obCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0FUQU5MLCAiYXRhbmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQlJULCAiY2JydCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQlJURiwgImNicnRmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQlJUTCwgImNicnRsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0VJTCwgImNlaWwiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQ0VJTEYsICJjZWlsZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQ0VJTEwsICJjZWlsbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NPUFlTSUdOLCAiY29weXNpZ24iLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NPUFlTSUdORiwgImNvcHlzaWduZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ09QWVNJR05MLCAiY29weXNpZ25sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DT1MsICJjb3MiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQ09TRiwgImNvc2YiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NPU0gsICJjb3NoIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0NPU0hGLCAiY29zaGYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0NPU0hMLCAiY29zaGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9DT1NMLCAiY29zbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0RSRU0sICJkcmVtIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9EUkVNRiwgImRyZW1mIiwgQlRfRk5fRkxPQVRfRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9EUkVNTCwgImRyZW1sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FUkYsICJlcmYiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVJGQywgImVyZmMiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVJGQ0YsICJlcmZjZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVJGQ0wsICJlcmZjbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VSRkYsICJlcmZmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FUkZMLCAiZXJmbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYUCwgImV4cCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9FWFAxMCwgImV4cDEwIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0VYUDEwRiwgImV4cDEwZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRVhQMTBMLCAiZXhwMTBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhQMiwgImV4cDIiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhQMkYsICJleHAyZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhQMkwsICJleHAybCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0VYUEYsICJleHBmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9FWFBMLCAiZXhwbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYUE0xLCAiZXhwbTEiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhQTTFGLCAiZXhwbTFmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FWFBNMUwsICJleHBtMWwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GQUJTLCAiZmFicyIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9GQUJTRiwgImZhYnNmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9GQUJTTCwgImZhYnNsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRkRJTSwgImZkaW0iLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZESU1GLCAiZmRpbWYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZESU1MLCAiZmRpbWwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZMT09SLCAiZmxvb3IiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fRkxPT1JGLCAiZmxvb3JmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9GTE9PUkwsICJmbG9vcmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GTUEsICJmbWEiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GTUFGLCAiZm1hZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRk1BTCwgImZtYWwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRk1BWCwgImZtYXgiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZNQVhGLCAiZm1heGYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZNQVhMLCAiZm1heGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZNSU4sICJmbWluIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GTUlORiwgImZtaW5mIiwgQlRfRk5fRkxPQVRfRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GTUlOTCwgImZtaW5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GTU9ELCAiZm1vZCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fRk1PREYsICJmbW9kZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fRk1PREwsICJmbW9kbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRlJFWFAsICJmcmV4cCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fRlJFWFBGLCAiZnJleHBmIiwgQlRfRk5fRkxPQVRfRkxPQVRfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fRlJFWFBMLCAiZnJleHBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0dBTU1BLCAiZ2FtbWEiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fR0FNTUFGLCAiZ2FtbWFmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9HQU1NQUwsICJnYW1tYWwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9HQU1NQV9SLCAiZ2FtbWFfciIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fR0FNTUFGX1IsICJnYW1tYWZfciIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0dBTU1BTF9SLCAiZ2FtbWFsX3IiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSFVHRV9WQUwsICJodWdlX3ZhbCIsIEJUX0ZOX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0hVR0VfVkFMRiwgImh1Z2VfdmFsZiIsIEJUX0ZOX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSFVHRV9WQUxMLCAiaHVnZV92YWxsIiwgQlRfRk5fTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0hZUE9ULCAiaHlwb3QiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0hZUE9URiwgImh5cG90ZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSFlQT1RMLCAiaHlwb3RsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JQ0VJTCwgImljZWlsIiwgQlRfRk5fSU5UX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lDRUlMRiwgImljZWlsZiIsIEJUX0ZOX0lOVF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lDRUlMTCwgImljZWlsbCIsIEJUX0ZOX0lOVF9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSUZMT09SLCAiaWZsb29yIiwgQlRfRk5fSU5UX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lGTE9PUkYsICJpZmxvb3JmIiwgQlRfRk5fSU5UX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSUZMT09STCwgImlmbG9vcmwiLCBCVF9GTl9JTlRfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lMT0dCLCAiaWxvZ2IiLCBCVF9GTl9JTlRfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSUxPR0JGLCAiaWxvZ2JmIiwgQlRfRk5fSU5UX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSUxPR0JMLCAiaWxvZ2JsIiwgQlRfRk5fSU5UX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTkYsICJpbmYiLCBCVF9GTl9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTkZGLCAiaW5mZiIsIEJUX0ZOX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSU5GTCwgImluZmwiLCBCVF9GTl9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOCSAgICAgICAoQlVJTFRfSU5fSU5GRDMyLCAiaW5mZDMyIiwgQlRfRk5fREZMT0FUMzIsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JTkZENjQsICJpbmZkNjQiLCBCVF9GTl9ERkxPQVQ2NCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lORkQxMjgsICJpbmZkMTI4IiwgQlRfRk5fREZMT0FUMTI4LCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVJJTlQsICJpcmludCIsIEJUX0ZOX0lOVF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JUklOVEYsICJpcmludGYiLCBCVF9GTl9JTlRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JUklOVEwsICJpcmludGwiLCBCVF9GTl9JTlRfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lST1VORCwgImlyb3VuZCIsIEJUX0ZOX0lOVF9ET1VCTEUsIEFUVFJfTUFUSEZOX0VSUk5PKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVJPVU5ERiwgImlyb3VuZGYiLCBCVF9GTl9JTlRfRkxPQVQsIEFUVFJfTUFUSEZOX0VSUk5PKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVJPVU5ETCwgImlyb3VuZGwiLCBCVF9GTl9JTlRfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9KMCwgImowIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0owRiwgImowZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSjBMLCAiajBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSjEsICJqMSIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9KMUYsICJqMWYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0oxTCwgImoxbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0pOLCAiam4iLCBCVF9GTl9ET1VCTEVfSU5UX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0pORiwgImpuZiIsIEJUX0ZOX0ZMT0FUX0lOVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0pOTCwgImpubCIsIEJUX0ZOX0xPTkdET1VCTEVfSU5UX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MQ0VJTCwgImxjZWlsIiwgQlRfRk5fTE9OR19ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MQ0VJTEYsICJsY2VpbGYiLCBCVF9GTl9MT05HX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTENFSUxMLCAibGNlaWxsIiwgQlRfRk5fTE9OR19MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTERFWFAsICJsZGV4cCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfSU5ULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fTERFWFBGLCAibGRleHBmIiwgQlRfRk5fRkxPQVRfRkxPQVRfSU5ULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fTERFWFBMLCAibGRleHBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0lOVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xGTE9PUiwgImxmbG9vciIsIEJUX0ZOX0xPTkdfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTEZMT09SRiwgImxmbG9vcmYiLCBCVF9GTl9MT05HX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTEZMT09STCwgImxmbG9vcmwiLCBCVF9GTl9MT05HX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MR0FNTUEsICJsZ2FtbWEiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTEdBTU1BRiwgImxnYW1tYWYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xHQU1NQUwsICJsZ2FtbWFsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTEdBTU1BX1IsICJsZ2FtbWFfciIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTEdBTU1BRl9SLCAibGdhbW1hZl9yIiwgQlRfRk5fRkxPQVRfRkxPQVRfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTEdBTU1BTF9SLCAibGdhbW1hbF9yIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMQ0VJTCwgImxsY2VpbCIsIEJUX0ZOX0xPTkdMT05HX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMQ0VJTEYsICJsbGNlaWxmIiwgQlRfRk5fTE9OR0xPTkdfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MTENFSUxMLCAibGxjZWlsbCIsIEJUX0ZOX0xPTkdMT05HX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MTEZMT09SLCAibGxmbG9vciIsIEJUX0ZOX0xPTkdMT05HX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMRkxPT1JGLCAibGxmbG9vcmYiLCBCVF9GTl9MT05HTE9OR19GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMRkxPT1JMLCAibGxmbG9vcmwiLCBCVF9GTl9MT05HTE9OR19MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTExSSU5ULCAibGxyaW50IiwgQlRfRk5fTE9OR0xPTkdfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTExSSU5URiwgImxscmludGYiLCBCVF9GTl9MT05HTE9OR19GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMUklOVEwsICJsbHJpbnRsIiwgQlRfRk5fTE9OR0xPTkdfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMUk9VTkQsICJsbHJvdW5kIiwgQlRfRk5fTE9OR0xPTkdfRE9VQkxFLCBBVFRSX01BVEhGTl9FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMUk9VTkRGLCAibGxyb3VuZGYiLCBCVF9GTl9MT05HTE9OR19GTE9BVCwgQVRUUl9NQVRIRk5fRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MTFJPVU5ETCwgImxscm91bmRsIiwgQlRfRk5fTE9OR0xPTkdfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRVJSTk8pCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0csICJsb2ciLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HMTAsICJsb2cxMCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9MT0cxMEYsICJsb2cxMGYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0xPRzEwTCwgImxvZzEwbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xPRzFQLCAibG9nMXAiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HMVBGLCAibG9nMXBmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0cxUEwsICJsb2cxcGwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0cyLCAibG9nMiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0cyRiwgImxvZzJmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MT0cyTCwgImxvZzJsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HQiwgImxvZ2IiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HQkYsICJsb2diZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTE9HQkwsICJsb2dibCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0xPR0YsICJsb2dmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9MT0dMLCAibG9nbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xSSU5ULCAibHJpbnQiLCBCVF9GTl9MT05HX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xSSU5URiwgImxyaW50ZiIsIEJUX0ZOX0xPTkdfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MUklOVEwsICJscmludGwiLCBCVF9GTl9MT05HX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MUk9VTkQsICJscm91bmQiLCBCVF9GTl9MT05HX0RPVUJMRSwgQVRUUl9NQVRIRk5fRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MUk9VTkRGLCAibHJvdW5kZiIsIEJUX0ZOX0xPTkdfRkxPQVQsIEFUVFJfTUFUSEZOX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTFJPVU5ETCwgImxyb3VuZGwiLCBCVF9GTl9MT05HX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTU9ERiwgIm1vZGYiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRVBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX01PREZGLCAibW9kZmYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX01PREZMLCAibW9kZmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRVBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05BTiwgIm5hbiIsIEJUX0ZOX0RPVUJMRV9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkFORiwgIm5hbmYiLCBCVF9GTl9GTE9BVF9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkFOTCwgIm5hbmwiLCBCVF9GTl9MT05HRE9VQkxFX0NPTlNUX1NUUklORywgQVRUUl9DT05TVF9OT1RIUk9XX05PTk5VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9OQU5EMzIsICJuYW5kMzIiLCBCVF9GTl9ERkxPQVQzMl9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkFORDY0LCAibmFuZDY0IiwgQlRfRk5fREZMT0FUNjRfQ09OU1RfU1RSSU5HLCBBVFRSX0NPTlNUX05PVEhST1dfTk9OTlVMTCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05BTkQxMjgsICJuYW5kMTI4IiwgQlRfRk5fREZMT0FUMTI4X0NPTlNUX1NUUklORywgQVRUUl9DT05TVF9OT1RIUk9XX05PTk5VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9OQU5TLCAibmFucyIsIEJUX0ZOX0RPVUJMRV9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkFOU0YsICJuYW5zZiIsIEJUX0ZOX0ZMT0FUX0NPTlNUX1NUUklORywgQVRUUl9DT05TVF9OT1RIUk9XX05PTk5VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9OQU5TTCwgIm5hbnNsIiwgQlRfRk5fTE9OR0RPVUJMRV9DT05TVF9TVFJJTkcsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkVBUkJZSU5ULCAibmVhcmJ5aW50IiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05FQVJCWUlOVEYsICJuZWFyYnlpbnRmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9ORUFSQllJTlRMLCAibmVhcmJ5aW50bCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05FWFRBRlRFUiwgIm5leHRhZnRlciIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkVYVEFGVEVSRiwgIm5leHRhZnRlcmYiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05FWFRBRlRFUkwsICJuZXh0YWZ0ZXJsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9ORVhUVE9XQVJELCAibmV4dHRvd2FyZCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX05FWFRUT1dBUkRGLCAibmV4dHRvd2FyZGYiLCBCVF9GTl9GTE9BVF9GTE9BVF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkVYVFRPV0FSREwsICJuZXh0dG93YXJkbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUE9XLCAicG93IiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9QT1cxMCwgInBvdzEwIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1BPVzEwRiwgInBvdzEwZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fUE9XMTBMLCAicG93MTBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fUE9XRiwgInBvd2YiLCBCVF9GTl9GTE9BVF9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1BPV0ksICJwb3dpIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9JTlQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QT1dJRiwgInBvd2lmIiwgQlRfRk5fRkxPQVRfRkxPQVRfSU5ULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUE9XSUwsICJwb3dpbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9JTlQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9QT1dMLCAicG93bCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVNQUlOREVSLCAicmVtYWluZGVyIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SRU1BSU5ERVJGLCAicmVtYWluZGVyZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVNQUlOREVSTCwgInJlbWFpbmRlcmwiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1JFTVFVTywgInJlbXF1byIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfRE9VQkxFX0lOVFBUUiwgQVRUUl9NQVRIRk5fRlBST1VORElOR19TVE9SRSkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1JFTVFVT0YsICJyZW1xdW9mIiwgQlRfRk5fRkxPQVRfRkxPQVRfRkxPQVRfSU5UUFRSLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX1NUT1JFKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVNUVVPTCwgInJlbXF1b2wiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9JTlRQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SSU5ULCAicmludCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SSU5URiwgInJpbnRmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SSU5UTCwgInJpbnRsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUk9VTkQsICJyb3VuZCIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9ST1VOREYsICJyb3VuZGYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1JPVU5ETCwgInJvdW5kbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NDQUxCLCAic2NhbGIiLCBCVF9GTl9ET1VCTEVfRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NDQUxCRiwgInNjYWxiZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU0NBTEJMLCAic2NhbGJsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TQ0FMQkxOLCAic2NhbGJsbiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEVfTE9ORywgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NDQUxCTE5GLCAic2NhbGJsbmYiLCBCVF9GTl9GTE9BVF9GTE9BVF9MT05HLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0NBTEJMTkwsICJzY2FsYmxubCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRV9MT05HLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0NBTEJOLCAic2NhbGJuIiwgQlRfRk5fRE9VQkxFX0RPVUJMRV9JTlQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TQ0FMQk5GLCAic2NhbGJuZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FUX0lOVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NDQUxCTkwsICJzY2FsYm5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFX0lOVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJR05CSVQsICJzaWduYml0IiwgQlRfRk5fSU5UX0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJR05CSVRGLCAic2lnbmJpdGYiLCBCVF9GTl9JTlRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSUdOQklUTCwgInNpZ25iaXRsIiwgQlRfRk5fSU5UX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSUdOQklURDMyLCAic2lnbmJpdGQzMiIsIEJUX0ZOX0lOVF9ERkxPQVQzMiwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJR05CSVRENjQsICJzaWduYml0ZDY0IiwgQlRfRk5fSU5UX0RGTE9BVDY0LCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU0lHTkJJVEQxMjgsICJzaWduYml0ZDEyOCIsIEJUX0ZOX0lOVF9ERkxPQVQxMjgsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSUdOSUZJQ0FORCwgInNpZ25pZmljYW5kIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJR05JRklDQU5ERiwgInNpZ25pZmljYW5kZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU0lHTklGSUNBTkRMLCAic2lnbmlmaWNhbmRsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0lOLCAic2luIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NJTkNPUywgInNpbmNvcyIsIEJUX0ZOX1ZPSURfRE9VQkxFX0RPVUJMRVBUUl9ET1VCTEVQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSU5DT1NGLCAic2luY29zZiIsIEJUX0ZOX1ZPSURfRkxPQVRfRkxPQVRQVFJfRkxPQVRQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TSU5DT1NMLCAic2luY29zbCIsIEJUX0ZOX1ZPSURfTE9OR0RPVUJMRV9MT05HRE9VQkxFUFRSX0xPTkdET1VCTEVQVFIsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfU1RPUkUpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9TSU5GLCAic2luZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0lOSCwgInNpbmgiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fU0lOSEYsICJzaW5oZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fU0lOSEwsICJzaW5obCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX1NJTkwsICJzaW5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1FSVCwgInNxcnQiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fU1FSVEYsICJzcXJ0ZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fU1FSVEwsICJzcXJ0bCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RBTiwgInRhbiIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0M5MFJFU19CVUlMVElOIChCVUlMVF9JTl9UQU5GLCAidGFuZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVEFOSCwgInRhbmgiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fVEFOSEYsICJ0YW5oZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9DOTBSRVNfQlVJTFRJTiAoQlVJTFRfSU5fVEFOSEwsICJ0YW5obCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX1RBTkwsICJ0YW5sIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVEdBTU1BLCAidGdhbW1hIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RHQU1NQUYsICJ0Z2FtbWFmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UR0FNTUFMLCAidGdhbW1hbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RSVU5DLCAidHJ1bmMiLCBCVF9GTl9ET1VCTEVfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVFJVTkNGLCAidHJ1bmNmIiwgQlRfRk5fRkxPQVRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UUlVOQ0wsICJ0cnVuY2wiLCBCVF9GTl9MT05HRE9VQkxFX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9ZMCwgInkwIiwgQlRfRk5fRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1kwRiwgInkwZiIsIEJUX0ZOX0ZMT0FUX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fWTBMLCAieTBsIiwgQlRfRk5fTE9OR0RPVUJMRV9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HX0VSUk5PKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fWTEsICJ5MSIsIEJUX0ZOX0RPVUJMRV9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9ZMUYsICJ5MWYiLCBCVF9GTl9GTE9BVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1kxTCwgInkxbCIsIEJUX0ZOX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1lOLCAieW4iLCBCVF9GTl9ET1VCTEVfSU5UX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1lORiwgInluZiIsIEJUX0ZOX0ZMT0FUX0lOVF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElOR19FUlJOTykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1lOTCwgInlubCIsIEJUX0ZOX0xPTkdET1VCTEVfSU5UX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkdfRVJSTk8pCisKKy8qIENhdGVnb3J5OiBfQ29tcGxleCBtYXRoIGJ1aWx0aW5zLiAgKi8KK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBQlMsICJjYWJzIiwgQlRfRk5fRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FCU0YsICJjYWJzZiIsIEJUX0ZOX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQUJTTCwgImNhYnNsIiwgQlRfRk5fTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQUNPUywgImNhY29zIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQUNPU0YsICJjYWNvc2YiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQUNPU0gsICJjYWNvc2giLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBQ09TSEYsICJjYWNvc2hmIiwgQlRfRk5fQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FDT1NITCwgImNhY29zaGwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FDT1NMLCAiY2Fjb3NsIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBUkcsICJjYXJnIiwgQlRfRk5fRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FSR0YsICJjYXJnZiIsIEJUX0ZOX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVJHTCwgImNhcmdsIiwgQlRfRk5fTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVNJTiwgImNhc2luIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVNJTkYsICJjYXNpbmYiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVNJTkgsICJjYXNpbmgiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBU0lOSEYsICJjYXNpbmhmIiwgQlRfRk5fQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FTSU5ITCwgImNhc2luaGwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FTSU5MLCAiY2FzaW5sIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBVEFOLCAiY2F0YW4iLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBVEFORiwgImNhdGFuZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBVEFOSCwgImNhdGFuaCIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0FUQU5IRiwgImNhdGFuaGYiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVRBTkhMLCAiY2F0YW5obCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQVRBTkwsICJjYXRhbmwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0NPUywgImNjb3MiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NDT1NGLCAiY2Nvc2YiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQ09TSCwgImNjb3NoIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQ09TSEYsICJjY29zaGYiLCBCVF9GTl9DT01QTEVYX0ZMT0FUX0NPTVBMRVhfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DQ09TSEwsICJjY29zaGwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0NPU0wsICJjY29zbCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DRVhQLCAiY2V4cCIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0VYUEYsICJjZXhwZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NFWFBMLCAiY2V4cGwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0VYUEksICJjZXhwaSIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NFWFBJRiwgImNleHBpZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfRkxPQVQsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DRVhQSUwsICJjZXhwaWwiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NJTUFHLCAiY2ltYWciLCBCVF9GTl9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DSU1BR0YsICJjaW1hZ2YiLCBCVF9GTl9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0lNQUdMLCAiY2ltYWdsIiwgQlRfRk5fTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DTE9HLCAiY2xvZyIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xPR0YsICJjbG9nZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NMT0dMLCAiY2xvZ2wiLCBCVF9GTl9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0VYVF9DOTlSRVNfQlVJTFRJTiAoQlVJTFRfSU5fQ0xPRzEwLCAiY2xvZzEwIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfRVhUX0M5OVJFU19CVUlMVElOIChCVUlMVF9JTl9DTE9HMTBGLCAiY2xvZzEwZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9FWFRfQzk5UkVTX0JVSUxUSU4gKEJVSUxUX0lOX0NMT0cxMEwsICJjbG9nMTBsIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NPTkosICJjb25qIiwgQlRfRk5fQ09NUExFWF9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DT05KRiwgImNvbmpmIiwgQlRfRk5fQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ09OSkwsICJjb25qbCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DUE9XLCAiY3BvdyIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BPV0YsICJjcG93ZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BPV0wsICJjcG93bCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEVfQ09NUExFWF9MT05HRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BST0osICJjcHJvaiIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BST0pGLCAiY3Byb2pmIiwgQlRfRk5fQ09NUExFWF9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1BST0pMLCAiY3Byb2psIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NSRUFMLCAiY3JlYWwiLCBCVF9GTl9ET1VCTEVfQ09NUExFWF9ET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DUkVBTEYsICJjcmVhbGYiLCBCVF9GTl9GTE9BVF9DT01QTEVYX0ZMT0FULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1JFQUxMLCAiY3JlYWxsIiwgQlRfRk5fTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DU0lOLCAiY3NpbiIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1NJTkYsICJjc2luZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTSU5ILCAiY3NpbmgiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTSU5IRiwgImNzaW5oZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTSU5ITCwgImNzaW5obCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DU0lOTCwgImNzaW5sIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTUVJULCAiY3NxcnQiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTUVJURiwgImNzcXJ0ZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NTUVJUTCwgImNzcXJ0bCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DVEFOLCAiY3RhbiIsIEJUX0ZOX0NPTVBMRVhfRE9VQkxFX0NPTVBMRVhfRE9VQkxFLCBBVFRSX01BVEhGTl9GUFJPVU5ESU5HKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ1RBTkYsICJjdGFuZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NUQU5ILCAiY3RhbmgiLCBCVF9GTl9DT01QTEVYX0RPVUJMRV9DT01QTEVYX0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NUQU5IRiwgImN0YW5oZiIsIEJUX0ZOX0NPTVBMRVhfRkxPQVRfQ09NUExFWF9GTE9BVCwgQVRUUl9NQVRIRk5fRlBST1VORElORykKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NUQU5ITCwgImN0YW5obCIsIEJUX0ZOX0NPTVBMRVhfTE9OR0RPVUJMRV9DT01QTEVYX0xPTkdET1VCTEUsIEFUVFJfTUFUSEZOX0ZQUk9VTkRJTkcpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DVEFOTCwgImN0YW5sIiwgQlRfRk5fQ09NUExFWF9MT05HRE9VQkxFX0NPTVBMRVhfTE9OR0RPVUJMRSwgQVRUUl9NQVRIRk5fRlBST1VORElORykKKworLyogQ2F0ZWdvcnk6IHN0cmluZy9tZW1vcnkgYnVpbHRpbnMuICAqLworLyogYmNtcCwgYmNvcHkgYW5kIGJ6ZXJvIGhhdmUgdHJhZGl0aW9uYWxseSBhY2NlcHRlZCBOVUxMIHBvaW50ZXJzCisgICB3aGVuIHRoZSBsZW5ndGggcGFyYW1ldGVyIGlzIHplcm8sIHNvIGRvbid0IGFwcGx5IGF0dHJpYnV0ZSAibm9ubnVsbCIuICAqLworREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fQkNNUCwgImJjbXAiLCBCVF9GTl9JTlRfQ09OU1RfUFRSX0NPTlNUX1BUUl9TSVpFLCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9CQ09QWSwgImJjb3B5IiwgQlRfRk5fVk9JRF9DT05TVF9QVFJfUFRSX1NJWkUsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9CWkVSTywgImJ6ZXJvIiwgQlRfRk5fVk9JRF9QVFJfU0laRSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lOREVYLCAiaW5kZXgiLCBCVF9GTl9TVFJJTkdfQ09OU1RfU1RSSU5HX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTUVNQ0hSLCAibWVtY2hyIiwgQlRfRk5fUFRSX0NPTlNUX1BUUl9JTlRfU0laRSwgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTUVNQ01QLCAibWVtY21wIiwgQlRfRk5fSU5UX0NPTlNUX1BUUl9DT05TVF9QVFJfU0laRSwgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTUVNQ1BZLCAibWVtY3B5IiwgQlRfRk5fUFRSX1BUUl9DT05TVF9QVFJfU0laRSwgQVRUUl9SRVQxX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTUVNTU9WRSwgIm1lbW1vdmUiLCBCVF9GTl9QVFJfUFRSX0NPTlNUX1BUUl9TSVpFLCBBVFRSX1JFVDFfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9NRU1QQ1BZLCAibWVtcGNweSIsIEJUX0ZOX1BUUl9QVFJfQ09OU1RfUFRSX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9NRU1TRVQsICJtZW1zZXQiLCBCVF9GTl9QVFJfUFRSX0lOVF9TSVpFLCBBVFRSX1JFVDFfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9SSU5ERVgsICJyaW5kZXgiLCBCVF9GTl9TVFJJTkdfQ09OU1RfU1RSSU5HX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1RQQ1BZLCAic3RwY3B5IiwgQlRfRk5fU1RSSU5HX1NUUklOR19DT05TVF9TVFJJTkcsIEFUVFJfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFBOQ1BZLCAic3RwbmNweSIsIEJUX0ZOX1NUUklOR19TVFJJTkdfQ09OU1RfU1RSSU5HX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFJDQVNFQ01QLCAic3RyY2FzZWNtcCIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJDQVQsICJzdHJjYXQiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklORywgQVRUUl9OT1RIUk9XX05PTk5VTExfTEVBRikKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUkNIUiwgInN0cmNociIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfSU5ULCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJDTVAsICJzdHJjbXAiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklORywgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSQ1BZLCAic3RyY3B5IiwgQlRfRk5fU1RSSU5HX1NUUklOR19DT05TVF9TVFJJTkcsIEFUVFJfUkVUMV9OT1RIUk9XX05PTk5VTExfTEVBRikKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUkNTUE4sICJzdHJjc3BuIiwgQlRfRk5fU0laRV9DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFJEVVAsICJzdHJkdXAiLCBCVF9GTl9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX01BTExPQ19OT1RIUk9XX05PTk5VTExfTEVBRikKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUk5EVVAsICJzdHJuZHVwIiwgQlRfRk5fU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX01BTExPQ19OT1RIUk9XX05PTk5VTExfTEVBRikKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUkxFTiwgInN0cmxlbiIsIEJUX0ZOX1NJWkVfQ09OU1RfU1RSSU5HLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFJOQ0FTRUNNUCwgInN0cm5jYXNlY21wIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkdfU0laRSwgQVRUUl9QVVJFX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSTkNBVCwgInN0cm5jYXQiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSTkNNUCwgInN0cm5jbXAiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJOQ1BZLCAic3RybmNweSIsIEJUX0ZOX1NUUklOR19TVFJJTkdfQ09OU1RfU1RSSU5HX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJQQlJLLCAic3RycGJyayIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJSQ0hSLCAic3RycmNociIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfSU5ULCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TVFJTUE4sICJzdHJzcG4iLCBCVF9GTl9TSVpFX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkcsIEFUVFJfUFVSRV9OT1RIUk9XX05PTk5VTExfTEVBRikKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NUUlNUUiwgInN0cnN0ciIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX1BVUkVfTk9USFJPV19OT05OVUxMX0xFQUYpCisKKy8qIENhdGVnb3J5OiBzdGRpbyBidWlsdGlucy4gICovCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GUFJJTlRGLCAiZnByaW50ZiIsIEJUX0ZOX0lOVF9GSUxFUFRSX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5URl8yXzMpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GUFJJTlRGX1VOTE9DS0VELCAiZnByaW50Zl91bmxvY2tlZCIsIEJUX0ZOX0lOVF9GSUxFUFRSX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5URl8yXzMpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QVVRDLCAicHV0YyIsIEJUX0ZOX0lOVF9JTlRfRklMRVBUUiwgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9QVVRDX1VOTE9DS0VELCAicHV0Y191bmxvY2tlZCIsIEJUX0ZOX0lOVF9JTlRfRklMRVBUUiwgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GUFVUQywgImZwdXRjIiwgQlRfRk5fSU5UX0lOVF9GSUxFUFRSLCBBVFRSX05PTk5VTExfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0ZQVVRDX1VOTE9DS0VELCAiZnB1dGNfdW5sb2NrZWQiLCBCVF9GTl9JTlRfSU5UX0ZJTEVQVFIsIEFUVFJfTk9OTlVMTF9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRlBVVFMsICJmcHV0cyIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfRklMRVBUUiwgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GUFVUU19VTkxPQ0tFRCwgImZwdXRzX3VubG9ja2VkIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19GSUxFUFRSLCBBVFRSX05PTk5VTExfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZTQ0FORiwgImZzY2FuZiIsIEJUX0ZOX0lOVF9GSUxFUFRSX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1NDQU5GXzJfMykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZXUklURSwgImZ3cml0ZSIsIEJUX0ZOX1NJWkVfQ09OU1RfUFRSX1NJWkVfU0laRV9GSUxFUFRSLCBBVFRSX05PTk5VTExfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0ZXUklURV9VTkxPQ0tFRCwgImZ3cml0ZV91bmxvY2tlZCIsIEJUX0ZOX1NJWkVfQ09OU1RfUFRSX1NJWkVfU0laRV9GSUxFUFRSLCBBVFRSX05PTk5VTExfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1BSSU5URiwgInByaW50ZiIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfMV8yKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fUFJJTlRGX1VOTE9DS0VELCAicHJpbnRmX3VubG9ja2VkIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5URl8xXzIpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QVVRDSEFSLCAicHV0Y2hhciIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfTlVMTCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1BVVENIQVJfVU5MT0NLRUQsICJwdXRjaGFyX3VubG9ja2VkIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9OVUxMKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUFVUUywgInB1dHMiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HLCBBVFRSX05PTk5VTExfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1BVVFNfVU5MT0NLRUQsICJwdXRzX3VubG9ja2VkIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklORywgQVRUUl9OT05OVUxMX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TQ0FORiwgInNjYW5mIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1NDQU5GXzFfMikKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NOUFJJTlRGLCAic25wcmludGYiLCBCVF9GTl9JTlRfU1RSSU5HX1NJWkVfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfM180KQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1BSSU5URiwgInNwcmludGYiLCBCVF9GTl9JTlRfU1RSSU5HX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5URl9OT1RIUk9XXzJfMykKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NTQ0FORiwgInNzY2FuZiIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9GT1JNQVRfU0NBTkZfTk9USFJPV18yXzMpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WRlBSSU5URiwgInZmcHJpbnRmIiwgQlRfRk5fSU5UX0ZJTEVQVFJfQ09OU1RfU1RSSU5HX1ZBTElTVF9BUkcsIEFUVFJfRk9STUFUX1BSSU5URl8yXzApCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WRlNDQU5GLCAidmZzY2FuZiIsIEJUX0ZOX0lOVF9GSUxFUFRSX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9TQ0FORl8yXzApCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WUFJJTlRGLCAidnByaW50ZiIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGXzFfMCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZTQ0FORiwgInZzY2FuZiIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfU0NBTkZfMV8wKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVlNOUFJJTlRGLCAidnNucHJpbnRmIiwgQlRfRk5fSU5UX1NUUklOR19TSVpFX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJPV18zXzApCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WU1BSSU5URiwgInZzcHJpbnRmIiwgQlRfRk5fSU5UX1NUUklOR19DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfMl8wKQorREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVlNTQ0FORiwgInZzc2NhbmYiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9TQ0FORl9OT1RIUk9XXzJfMCkKKworLyogQ2F0ZWdvcnk6IGN0eXBlIGJ1aWx0aW5zLiAgKi8KK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTQUxOVU0sICJpc2FsbnVtIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNBTFBIQSwgImlzYWxwaGEiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU0FTQ0lJLCAiaXNhc2NpaSIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0JMQU5LLCAiaXNibGFuayIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTQ05UUkwsICJpc2NudHJsIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNESUdJVCwgImlzZGlnaXQiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNHUkFQSCwgImlzZ3JhcGgiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0xPV0VSLCAiaXNsb3dlciIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTUFJJTlQsICJpc3ByaW50IiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNQVU5DVCwgImlzcHVuY3QiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU1NQQUNFLCAiaXNzcGFjZSIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTVVBQRVIsICJpc3VwcGVyIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNYRElHSVQsICJpc3hkaWdpdCIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9UT0FTQ0lJLCAidG9hc2NpaSIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UT0xPV0VSLCAidG9sb3dlciIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1RPVVBQRVIsICJ0b3VwcGVyIiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorCisvKiBDYXRlZ29yeTogd2N0eXBlIGJ1aWx0aW5zLiAgKi8KK0RFRl9DOTRfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTV0FMTlVNLCAiaXN3YWxudW0iLCBCVF9GTl9JTlRfV0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXQUxQSEEsICJpc3dhbHBoYSIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk5X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU1dCTEFOSywgImlzd2JsYW5rIiwgQlRfRk5fSU5UX1dJTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTRfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTV0NOVFJMLCAiaXN3Y250cmwiLCBCVF9GTl9JTlRfV0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXRElHSVQsICJpc3dkaWdpdCIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk0X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU1dHUkFQSCwgImlzd2dyYXBoIiwgQlRfRk5fSU5UX1dJTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTRfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTV0xPV0VSLCAiaXN3bG93ZXIiLCBCVF9GTl9JTlRfV0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXUFJJTlQsICJpc3dwcmludCIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk0X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU1dQVU5DVCwgImlzd3B1bmN0IiwgQlRfRk5fSU5UX1dJTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTRfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTV1NQQUNFLCAiaXN3c3BhY2UiLCBCVF9GTl9JTlRfV0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNXVVBQRVIsICJpc3d1cHBlciIsIEJUX0ZOX0lOVF9XSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfQzk0X0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU1dYRElHSVQsICJpc3d4ZGlnaXQiLCBCVF9GTl9JTlRfV0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVE9XTE9XRVIsICJ0b3dsb3dlciIsIEJUX0ZOX1dJTlRfV0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0M5NF9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVE9XVVBQRVIsICJ0b3d1cHBlciIsIEJUX0ZOX1dJTlRfV0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorCisvKiBDYXRlZ29yeTogbWlzY2VsbGFuZW91cyBidWlsdGlucy4gICovCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BQk9SVCwgImFib3J0IiwgQlRfRk5fVk9JRCwgQVRUUl9OT1JFVFVSTl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0FCUywgImFicyIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BR0dSRUdBVEVfSU5DT01JTkdfQUREUkVTUywgImFnZ3JlZ2F0ZV9pbmNvbWluZ19hZGRyZXNzIiwgQlRfRk5fUFRSX1ZBUiwgQVRUUl9MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9BTExPQ0EsICJhbGxvY2EiLCBCVF9GTl9QVFJfU0laRSwgQVRUUl9NQUxMT0NfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BUFBMWSwgImFwcGx5IiwgQlRfRk5fUFRSX1BUUl9GTl9WT0lEX1ZBUl9QVFJfU0laRSwgQVRUUl9OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQVBQTFlfQVJHUywgImFwcGx5X2FyZ3MiLCBCVF9GTl9QVFJfVkFSLCBBVFRSX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0JTV0FQMTYsICJic3dhcDE2IiwgQlRfRk5fVUlOVDE2X1VJTlQxNiwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0JTV0FQMzIsICJic3dhcDMyIiwgQlRfRk5fVUlOVDMyX1VJTlQzMiwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0JTV0FQNjQsICJic3dhcDY0IiwgQlRfRk5fVUlOVDY0X1VJTlQ2NCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0NMRUFSX0NBQ0hFLCAiX19jbGVhcl9jYWNoZSIsIEJUX0ZOX1ZPSURfUFRSX1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKy8qIFt0cmFucy1tZW1dOiBBZGp1c3QgQlVJTFRfSU5fVE1fQ0FMTE9DIGlmIEJVSUxUX0lOX0NBTExPQyBpcyBjaGFuZ2VkLiAgKi8KK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NBTExPQywgImNhbGxvYyIsIEJUX0ZOX1BUUl9TSVpFX1NJWkUsIEFUVFJfTUFMTE9DX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xBU1NJRllfVFlQRSwgImNsYXNzaWZ5X3R5cGUiLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NMWiwgImNseiIsIEJUX0ZOX0lOVF9VSU5ULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xaSU1BWCwgImNsemltYXgiLCBCVF9GTl9JTlRfVUlOVE1BWCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NMWkwsICJjbHpsIiwgQlRfRk5fSU5UX1VMT05HLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xaTEwsICJjbHpsbCIsIEJUX0ZOX0lOVF9VTE9OR0xPTkcsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DT05TVEFOVF9QLCAiY29uc3RhbnRfcCIsIEJUX0ZOX0lOVF9WQVIsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DVFosICJjdHoiLCBCVF9GTl9JTlRfVUlOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NUWklNQVgsICJjdHppbWF4IiwgQlRfRk5fSU5UX1VJTlRNQVgsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DVFpMLCAiY3R6bCIsIEJUX0ZOX0lOVF9VTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0NUWkxMLCAiY3R6bGwiLCBCVF9GTl9JTlRfVUxPTkdMT05HLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xSU0IsICJjbHJzYiIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DTFJTQklNQVgsICJjbHJzYmltYXgiLCBCVF9GTl9JTlRfSU5UTUFYLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fQ0xSU0JMLCAiY2xyc2JsIiwgQlRfRk5fSU5UX0xPTkcsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9DTFJTQkxMLCAiY2xyc2JsbCIsIEJUX0ZOX0lOVF9MT05HTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0RDR0VUVEVYVCwgImRjZ2V0dGV4dCIsIEJUX0ZOX1NUUklOR19DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HX0lOVCwgQVRUUl9GT1JNQVRfQVJHXzIpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9ER0VUVEVYVCwgImRnZXR0ZXh0IiwgQlRfRk5fU1RSSU5HX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkcsIEFUVFJfRk9STUFUX0FSR18yKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRFdBUkZfQ0ZBLCAiZHdhcmZfY2ZhIiwgQlRfRk5fUFRSLCBBVFRSX05VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9EV0FSRl9TUF9DT0xVTU4sICJkd2FyZl9zcF9jb2x1bW4iLCBCVF9GTl9VSU5ULCBBVFRSX05VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FSF9SRVRVUk4sICJlaF9yZXR1cm4iLCBCVF9GTl9WT0lEX1BUUk1PREVfUFRSLCBBVFRSX05PUkVUVVJOX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRUhfUkVUVVJOX0RBVEFfUkVHTk8sICJlaF9yZXR1cm5fZGF0YV9yZWdubyIsIEJUX0ZOX0lOVF9JTlQsIEFUVFJfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYRUNMLCAiZXhlY2wiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfU0VOVElORUxfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYRUNMUCwgImV4ZWNscCIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9TRU5USU5FTF9OT1RIUk9XX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhFQ0xFLCAiZXhlY2xlIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkdfVkFSLCBBVFRSX05PVEhST1dfU0VOVElORUxfMSkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FWEVDViwgImV4ZWN2IiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19QVFJfQ09OU1RfU1RSSU5HLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9FWEVDVlAsICJleGVjdnAiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX1BUUl9DT05TVF9TVFJJTkcsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYRUNWRSwgImV4ZWN2ZSIsIEJUX0ZOX0lOVF9DT05TVF9TVFJJTkdfUFRSX0NPTlNUX1NUUklOR19QVFJfQ09OU1RfU1RSSU5HLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYSVQsICJleGl0IiwgQlRfRk5fVk9JRF9JTlQsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRVhQRUNULCAiZXhwZWN0IiwgQlRfRk5fTE9OR19MT05HX0xPTkcsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9BU1NVTUVfQUxJR05FRCwgImFzc3VtZV9hbGlnbmVkIiwgQlRfRk5fUFRSX0NPTlNUX1BUUl9TSVpFX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYVEVORF9QT0lOVEVSLCAiZXh0ZW5kX3BvaW50ZXIiLCBCVF9GTl9VTldJTkRXT1JEX1BUUiwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0VYVFJBQ1RfUkVUVVJOX0FERFIsICJleHRyYWN0X3JldHVybl9hZGRyIiwgQlRfRk5fUFRSX1BUUiwgQVRUUl9MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GRlMsICJmZnMiLCBCVF9GTl9JTlRfSU5ULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRkZTSU1BWCwgImZmc2ltYXgiLCBCVF9GTl9JTlRfSU5UTUFYLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRkZTTCwgImZmc2wiLCBCVF9GTl9JTlRfTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0ZGU0xMLCAiZmZzbGwiLCBCVF9GTl9JTlRfTE9OR0xPTkcsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRk9SSywgImZvcmsiLCBCVF9GTl9QSUQsIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRlJBTUVfQUREUkVTUywgImZyYW1lX2FkZHJlc3MiLCBCVF9GTl9QVFJfVUlOVCwgQVRUUl9OVUxMKQorLyogW3RyYW5zLW1lbV06IEFkanVzdCBCVUlMVF9JTl9UTV9GUkVFIGlmIEJVSUxUX0lOX0ZSRUUgaXMgY2hhbmdlZC4gICovCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9GUkVFLCAiZnJlZSIsIEJUX0ZOX1ZPSURfUFRSLCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0ZST0JfUkVUVVJOX0FERFIsICJmcm9iX3JldHVybl9hZGRyIiwgQlRfRk5fUFRSX1BUUiwgQVRUUl9OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fR0VUVEVYVCwgImdldHRleHQiLCBCVF9GTl9TVFJJTkdfQ09OU1RfU1RSSU5HLCBBVFRSX0ZPUk1BVF9BUkdfMSkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lNQVhBQlMsICJpbWF4YWJzIiwgQlRfRk5fSU5UTUFYX0lOVE1BWCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lOSVRfRFdBUkZfUkVHX1NJWkVTLCAiaW5pdF9kd2FyZl9yZWdfc2l6ZV90YWJsZSIsIEJUX0ZOX1ZPSURfUFRSLCBBVFRSX05VTEwpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GSU5JVEUsICJmaW5pdGUiLCBCVF9GTl9JTlRfRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRklOSVRFRiwgImZpbml0ZWYiLCBCVF9GTl9JTlRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9GSU5JVEVMLCAiZmluaXRlbCIsIEJUX0ZOX0lOVF9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRklOSVRFRDMyLCAiZmluaXRlZDMyIiwgQlRfRk5fSU5UX0RGTE9BVDMyLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRklOSVRFRDY0LCAiZmluaXRlZDY0IiwgQlRfRk5fSU5UX0RGTE9BVDY0LCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fRklOSVRFRDEyOCwgImZpbml0ZWQxMjgiLCBCVF9GTl9JTlRfREZMT0FUMTI4LCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fRlBDTEFTU0lGWSwgImZwY2xhc3NpZnkiLCBCVF9GTl9JTlRfSU5UX0lOVF9JTlRfSU5UX0lOVF9WQVIsIEFUVFJfQ09OU1RfTk9USFJPV19UWVBFR0VORVJJQ19MRUFGKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNGSU5JVEUsICJpc2Zpbml0ZSIsIEJUX0ZOX0lOVF9WQVIsIEFUVFJfQ09OU1RfTk9USFJPV19UWVBFR0VORVJJQ19MRUFGKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNJTkZfU0lHTiwgImlzaW5mX3NpZ24iLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUNfTEVBRikKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0lTSU5GLCAiaXNpbmYiLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUMpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU0lORkYsICJpc2luZmYiLCBCVF9GTl9JTlRfRkxPQVQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU0lORkwsICJpc2luZmwiLCBCVF9GTl9JTlRfTE9OR0RPVUJMRSwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lTSU5GRDMyLCAiaXNpbmZkMzIiLCBCVF9GTl9JTlRfREZMT0FUMzIsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU0lORkQ2NCwgImlzaW5mZDY0IiwgQlRfRk5fSU5UX0RGTE9BVDY0LCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSVNJTkZEMTI4LCAiaXNpbmZkMTI4IiwgQlRfRk5fSU5UX0RGTE9BVDEyOCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQzkwUkVTX0JVSUxUSU4gKEJVSUxUX0lOX0lTTkFOLCAiaXNuYW4iLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUNfTEVBRikKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lTTkFORiwgImlzbmFuZiIsIEJUX0ZOX0lOVF9GTE9BVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lTTkFOTCwgImlzbmFubCIsIEJUX0ZOX0lOVF9MT05HRE9VQkxFLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fSVNOQU5EMzIsICJpc25hbmQzMiIsIEJUX0ZOX0lOVF9ERkxPQVQzMiwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0lTTkFORDY0LCAiaXNuYW5kNjQiLCBCVF9GTl9JTlRfREZMT0FUNjQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9JU05BTkQxMjgsICJpc25hbmQxMjgiLCBCVF9GTl9JTlRfREZMT0FUMTI4LCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNOT1JNQUwsICJpc25vcm1hbCIsIEJUX0ZOX0lOVF9WQVIsIEFUVFJfQ09OU1RfTk9USFJPV19UWVBFR0VORVJJQ19MRUFGKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fSVNHUkVBVEVSLCAiaXNncmVhdGVyIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX1RZUEVHRU5FUklDX0xFQUYpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0dSRUFURVJFUVVBTCwgImlzZ3JlYXRlcmVxdWFsIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX1RZUEVHRU5FUklDX0xFQUYpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU0xFU1MsICJpc2xlc3MiLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUNfTEVBRikKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTTEVTU0VRVUFMLCAiaXNsZXNzZXF1YWwiLCBCVF9GTl9JTlRfVkFSLCBBVFRSX0NPTlNUX05PVEhST1dfVFlQRUdFTkVSSUNfTEVBRikKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTTEVTU0dSRUFURVIsICJpc2xlc3NncmVhdGVyIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX1RZUEVHRU5FUklDX0xFQUYpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9JU1VOT1JERVJFRCwgImlzdW5vcmRlcmVkIiwgQlRfRk5fSU5UX1ZBUiwgQVRUUl9DT05TVF9OT1RIUk9XX1RZUEVHRU5FUklDX0xFQUYpCitERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9MQUJTLCAibGFicyIsIEJUX0ZOX0xPTkdfTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xMQUJTLCAibGxhYnMiLCBCVF9GTl9MT05HTE9OR19MT05HTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0xPTkdKTVAsICJsb25nam1wIiwgQlRfRk5fVk9JRF9QVFJfSU5ULCBBVFRSX05PUkVUVVJOX05PVEhST1dfTEVBRl9MSVNUKQorLyogW3RyYW5zLW1lbV06IEFkanVzdCBCVUlMVF9JTl9UTV9NQUxMT0MgaWYgQlVJTFRfSU5fTUFMTE9DIGlzIGNoYW5nZWQuICAqLworREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTUFMTE9DLCAibWFsbG9jIiwgQlRfRk5fUFRSX1NJWkUsIEFUVFJfTUFMTE9DX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fTkVYVF9BUkcsICJuZXh0X2FyZyIsIEJUX0ZOX1BUUl9WQVIsIEFUVFJfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUEFSSVRZLCAicGFyaXR5IiwgQlRfRk5fSU5UX1VJTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QQVJJVFlJTUFYLCAicGFyaXR5aW1heCIsIEJUX0ZOX0lOVF9VSU5UTUFYLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUEFSSVRZTCwgInBhcml0eWwiLCBCVF9GTl9JTlRfVUxPTkcsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9QQVJJVFlMTCwgInBhcml0eWxsIiwgQlRfRk5fSU5UX1VMT05HTE9ORywgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1BPUENPVU5ULCAicG9wY291bnQiLCBCVF9GTl9JTlRfVUlOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1BPUENPVU5USU1BWCwgInBvcGNvdW50aW1heCIsIEJUX0ZOX0lOVF9VSU5UTUFYLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUE9QQ09VTlRMLCAicG9wY291bnRsIiwgQlRfRk5fSU5UX1VMT05HLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUE9QQ09VTlRMTCwgInBvcGNvdW50bGwiLCBCVF9GTl9JTlRfVUxPTkdMT05HLCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUFJFRkVUQ0gsICJwcmVmZXRjaCIsIEJUX0ZOX1ZPSURfQ09OU1RfUFRSX1ZBUiwgQVRUUl9OT1ZPUFNfTEVBRl9MSVNUKQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVBTExPQywgInJlYWxsb2MiLCBCVF9GTl9QVFJfUFRSX1NJWkUsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9SRVRVUk4sICJyZXR1cm4iLCBCVF9GTl9WT0lEX1BUUiwgQVRUUl9OT1JFVFVSTl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1JFVFVSTl9BRERSRVNTLCAicmV0dXJuX2FkZHJlc3MiLCBCVF9GTl9QVFJfVUlOVCwgQVRUUl9MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TQVZFUkVHUywgInNhdmVyZWdzIiwgQlRfRk5fUFRSX1ZBUiwgQVRUUl9OVUxMKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0VUSk1QLCAic2V0am1wIiwgQlRfRk5fSU5UX1BUUiwgQVRUUl9OVUxMKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1RSRk1PTiwgInN0cmZtb24iLCBCVF9GTl9TU0laRV9TVFJJTkdfU0laRV9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9TVFJGTU9OX05PVEhST1dfM180KQorREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSRlRJTUUsICJzdHJmdGltZSIsIEJUX0ZOX1NJWkVfU1RSSU5HX1NJWkVfQ09OU1RfU1RSSU5HX0NPTlNUX1BUUiwgQVRUUl9GT1JNQVRfU1RSRlRJTUVfTk9USFJPV18zXzApCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9UUkFQLCAidHJhcCIsIEJUX0ZOX1ZPSUQsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9VTlJFQUNIQUJMRSwgInVucmVhY2hhYmxlIiwgQlRfRk5fVk9JRCwgQVRUUl9DT05TVF9OT1JFVFVSTl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1VOV0lORF9JTklULCAidW53aW5kX2luaXQiLCBCVF9GTl9WT0lELCBBVFRSX05VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9VUERBVEVfU0VUSk1QX0JVRiwgInVwZGF0ZV9zZXRqbXBfYnVmIiwgQlRfRk5fVk9JRF9QVFJfSU5ULCBBVFRSX05VTEwpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WQV9DT1BZLCAidmFfY29weSIsIEJUX0ZOX1ZPSURfVkFMSVNUX1JFRl9WQUxJU1RfQVJHLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVkFfRU5ELCAidmFfZW5kIiwgQlRfRk5fVk9JRF9WQUxJU1RfUkVGLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVkFfU1RBUlQsICJ2YV9zdGFydCIsIEJUX0ZOX1ZPSURfVkFMSVNUX1JFRl9WQVIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WQV9BUkdfUEFDSywgInZhX2FyZ19wYWNrIiwgQlRfRk5fSU5ULCBBVFRSX1BVUkVfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WQV9BUkdfUEFDS19MRU4sICJ2YV9hcmdfcGFja19sZW4iLCBCVF9GTl9JTlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX19FWElULCAiX2V4aXQiLCBCVF9GTl9WT0lEX0lOVCwgQVRUUl9OT1JFVFVSTl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX19FWElUMiwgIl9FeGl0IiwgQlRfRk5fVk9JRF9JTlQsIEFUVFJfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCisKKy8qIEltcGxlbWVudGluZyBuZXN0ZWQgZnVuY3Rpb25zLiAgKi8KK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX0lOSVRfVFJBTVBPTElORSwgIl9fYnVpbHRpbl9pbml0X3RyYW1wb2xpbmUiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fSU5JVF9IRUFQX1RSQU1QT0xJTkUsICJfX2J1aWx0aW5faW5pdF9oZWFwX3RyYW1wb2xpbmUiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fQURKVVNUX1RSQU1QT0xJTkUsICJfX2J1aWx0aW5fYWRqdXN0X3RyYW1wb2xpbmUiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fTk9OTE9DQUxfR09UTywgIl9fYnVpbHRpbl9ub25sb2NhbF9nb3RvIikKKworLyogSW1wbGVtZW50aW5nIF9fYnVpbHRpbl9zZXRqbXAuICAqLworREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fU0VUSk1QX1NFVFVQLCAiX19idWlsdGluX3NldGptcF9zZXR1cCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9TRVRKTVBfRElTUEFUQ0hFUiwgIl9fYnVpbHRpbl9zZXRqbXBfZGlzcGF0Y2hlciIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9TRVRKTVBfUkVDRUlWRVIsICJfX2J1aWx0aW5fc2V0am1wX3JlY2VpdmVyIikKKworLyogSW1wbGVtZW50aW5nIHZhcmlhYmxlIHNpemVkIGxvY2FsIHZhcmlhYmxlcy4gICovCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9TVEFDS19TQVZFLCAiX19idWlsdGluX3N0YWNrX3NhdmUiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fU1RBQ0tfUkVTVE9SRSwgIl9fYnVpbHRpbl9zdGFja19yZXN0b3JlIikKK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX0FMTE9DQV9XSVRIX0FMSUdOLCAiX19idWlsdGluX2FsbG9jYV93aXRoX2FsaWduIikKKworLyogT2JqZWN0IHNpemUgY2hlY2tpbmcgYnVpbHRpbnMuICAqLworREVGX0dDQ19CVUlMVElOCSAgICAgICAoQlVJTFRfSU5fT0JKRUNUX1NJWkUsICJvYmplY3Rfc2l6ZSIsIEJUX0ZOX1NJWkVfQ09OU1RfUFRSX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTUVNQ1BZX0NISywgIl9fbWVtY3B5X2NoayIsIEJUX0ZOX1BUUl9QVFJfQ09OU1RfUFRSX1NJWkVfU0laRSwgQVRUUl9SRVQxX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fTUVNTU9WRV9DSEssICJfX21lbW1vdmVfY2hrIiwgQlRfRk5fUFRSX1BUUl9DT05TVF9QVFJfU0laRV9TSVpFLCBBVFRSX1JFVDFfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9NRU1QQ1BZX0NISywgIl9fbWVtcGNweV9jaGsiLCBCVF9GTl9QVFJfUFRSX0NPTlNUX1BUUl9TSVpFX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9NRU1TRVRfQ0hLLCAiX19tZW1zZXRfY2hrIiwgQlRfRk5fUFRSX1BUUl9JTlRfU0laRV9TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1RQQ1BZX0NISywgIl9fc3RwY3B5X2NoayIsIEJUX0ZOX1NUUklOR19TVFJJTkdfQ09OU1RfU1RSSU5HX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFBOQ1BZX0NISywgIl9fc3RwbmNweV9jaGsiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMX0xFQUYpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFJDQVRfQ0hLLCAiX19zdHJjYXRfY2hrIiwgQlRfRk5fU1RSSU5HX1NUUklOR19DT05TVF9TVFJJTkdfU0laRSwgQVRUUl9OT1RIUk9XX05PTk5VTExfTEVBRikKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUkNQWV9DSEssICJfX3N0cmNweV9jaGsiLCBCVF9GTl9TVFJJTkdfU1RSSU5HX0NPTlNUX1NUUklOR19TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1RSTkNBVF9DSEssICJfX3N0cm5jYXRfY2hrIiwgQlRfRk5fU1RSSU5HX1NUUklOR19DT05TVF9TVFJJTkdfU0laRV9TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1RSTkNQWV9DSEssICJfX3N0cm5jcHlfY2hrIiwgQlRfRk5fU1RSSU5HX1NUUklOR19DT05TVF9TVFJJTkdfU0laRV9TSVpFLCBBVFRSX05PVEhST1dfTk9OTlVMTF9MRUFGKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU05QUklOVEZfQ0hLLCAiX19zbnByaW50Zl9jaGsiLCBCVF9GTl9JTlRfU1RSSU5HX1NJWkVfSU5UX1NJWkVfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfNV82KQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1BSSU5URl9DSEssICJfX3NwcmludGZfY2hrIiwgQlRfRk5fSU5UX1NUUklOR19JTlRfU0laRV9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJPV180XzUpCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9WU05QUklOVEZfQ0hLLCAiX192c25wcmludGZfY2hrIiwgQlRfRk5fSU5UX1NUUklOR19TSVpFX0lOVF9TSVpFX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJPV181XzApCitERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9WU1BSSU5URl9DSEssICJfX3ZzcHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9TVFJJTkdfSU5UX1NJWkVfQ09OU1RfU1RSSU5HX1ZBTElTVF9BUkcsIEFUVFJfRk9STUFUX1BSSU5URl9OT1RIUk9XXzRfMCkKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX0ZQUklOVEZfQ0hLLCAiX19mcHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9GSUxFUFRSX0lOVF9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfM180KQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fUFJJTlRGX0NISywgIl9fcHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9JTlRfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9GT1JNQVRfUFJJTlRGXzJfMykKK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1ZGUFJJTlRGX0NISywgIl9fdmZwcmludGZfY2hrIiwgQlRfRk5fSU5UX0ZJTEVQVFJfSU5UX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfM18wKQorREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fVlBSSU5URl9DSEssICJfX3ZwcmludGZfY2hrIiwgQlRfRk5fSU5UX0lOVF9DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGXzJfMCkKKworLyogUHJvZmlsaW5nIGhvb2tzLiAgKi8KK0RFRl9CVUlMVElOIChCVUlMVF9JTl9QUk9GSUxFX0ZVTkNfRU5URVIsICJfX2N5Z19wcm9maWxlX2Z1bmNfZW50ZXIiLCBCVUlMVF9JTl9OT1JNQUwsIEJUX0ZOX1ZPSURfUFRSX1BUUiwgQlRfTEFTVCwKKwkgICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIEFUVFJfTlVMTCwgdHJ1ZSwgdHJ1ZSkKK0RFRl9CVUlMVElOIChCVUlMVF9JTl9QUk9GSUxFX0ZVTkNfRVhJVCwgIl9fY3lnX3Byb2ZpbGVfZnVuY19leGl0IiwgQlVJTFRfSU5fTk9STUFMLCBCVF9GTl9WT0lEX1BUUl9QVFIsIEJUX0xBU1QsCisJICAgICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBBVFRSX05VTEwsIHRydWUsIHRydWUpCisKKy8qIFRMUyB0aHJlYWQgcG9pbnRlciByZWxhdGVkIGJ1aWx0aW5zLiAgKi8KK0RFRl9CVUlMVElOIChCVUlMVF9JTl9USFJFQURfUE9JTlRFUiwgIl9fYnVpbHRpbl90aHJlYWRfcG9pbnRlciIsCisJICAgICBCVUlMVF9JTl9OT1JNQUwsIEJUX0ZOX1BUUiwgQlRfTEFTVCwKKwkgICAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgQVRUUl9DT05TVF9OT1RIUk9XX0xJU1QsIHRydWUsCisJICAgICB0YXJnZXRtLmhhdmVfdGxzKQorCitERUZfQlVJTFRJTiAoQlVJTFRfSU5fU0VUX1RIUkVBRF9QT0lOVEVSLCAiX19idWlsdGluX3NldF90aHJlYWRfcG9pbnRlciIsCisJICAgICBCVUlMVF9JTl9OT1JNQUwsIEJUX0ZOX1ZPSURfUFRSLCBCVF9MQVNULAorCSAgICAgZmFsc2UsIGZhbHNlLCB0cnVlLCBBVFRSX05PVEhST1dfTElTVCwgdHJ1ZSwKKwkgICAgIHRhcmdldG0uaGF2ZV90bHMpCisKKy8qIFRMUyBlbXVsYXRpb24uICAqLworREVGX0JVSUxUSU4gKEJVSUxUX0lOX0VNVVRMU19HRVRfQUREUkVTUywgdGFyZ2V0bS5lbXV0bHMuZ2V0X2FkZHJlc3MsCisJICAgICBCVUlMVF9JTl9OT1JNQUwsCisJICAgICBCVF9GTl9QVFJfUFRSLCAgQlRfRk5fUFRSX1BUUiwKKwkgICAgIHRydWUsIHRydWUsIHRydWUsIEFUVFJfQ09OU1RfTk9USFJPV19OT05OVUxMX0xFQUYsIGZhbHNlLAorCSAgICAgIXRhcmdldG0uaGF2ZV90bHMpCitERUZfQlVJTFRJTiAoQlVJTFRfSU5fRU1VVExTX1JFR0lTVEVSX0NPTU1PTiwKKwkgICAgIHRhcmdldG0uZW11dGxzLnJlZ2lzdGVyX2NvbW1vbiwgQlVJTFRfSU5fTk9STUFMLAorCSAgICAgQlRfRk5fVk9JRF9QVFJfV09SRF9XT1JEX1BUUiwgQlRfRk5fVk9JRF9QVFJfV09SRF9XT1JEX1BUUiwKKwkgICAgIHRydWUsIHRydWUsIHRydWUsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QsIGZhbHNlLAorCSAgICAgIXRhcmdldG0uaGF2ZV90bHMpCisKKy8qIEV4Y2VwdGlvbiBzdXBwb3J0LiAgKi8KK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1VOV0lORF9SRVNVTUUsICJfX2J1aWx0aW5fdW53aW5kX3Jlc3VtZSIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9DWEFfRU5EX0NMRUFOVVAsICJfX2J1aWx0aW5fY3hhX2VuZF9jbGVhbnVwIikKK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX0VIX1BPSU5URVIsICJfX2J1aWx0aW5fZWhfcG9pbnRlciIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9FSF9GSUxURVIsICJfX2J1aWx0aW5fZWhfZmlsdGVyIikKK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX0VIX0NPUFlfVkFMVUVTLCAiX19idWlsdGluX2VoX2NvcHlfdmFsdWVzIikKKworLyogX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18gYXMgYnVpbHRpbnMuICAqLworREVGX0dDQ19CVUlMVElOIChCVUlMVF9JTl9GSUxFLCAiRklMRSIsIEJUX0ZOX0NPTlNUX1NUUklORywgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAoQlVJTFRfSU5fRlVOQ1RJT04sICJGVU5DVElPTiIsIEJUX0ZOX0NPTlNUX1NUUklORywgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HQ0NfQlVJTFRJTiAoQlVJTFRfSU5fTElORSwgIkxJTkUiLCBCVF9GTl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKKy8qIFN5bmNocm9uaXphdGlvbiBQcmltaXRpdmVzLiAgKi8KKyNpbmNsdWRlICJzeW5jLWJ1aWx0aW5zLmRlZiIKKworLyogT3Blbk1QIGJ1aWx0aW5zLiAgKi8KKyNpbmNsdWRlICJvbXAtYnVpbHRpbnMuZGVmIgorCisvKiBHVE0gYnVpbHRpbnMuICovCisjaW5jbHVkZSAiZ3RtLWJ1aWx0aW5zLmRlZiIKKworLyogU2FuaXRpemVyIGJ1aWx0aW5zLiAqLworI2luY2x1ZGUgInNhbml0aXplci5kZWYiCisKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9idmVyc2lvbi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2J2ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMwYmI5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9idmVyc2lvbi5oCkBAIC0wLDAgKzEsNCBAQAorI2RlZmluZSBCVUlMRElOR19HQ0NfTUFKT1IgNAorI2RlZmluZSBCVUlMRElOR19HQ0NfTUlOT1IgOAorI2RlZmluZSBCVUlMRElOR19HQ0NfUEFUQ0hMRVZFTCAzCisjZGVmaW5lIEJVSUxESU5HX0dDQ19WRVJTSU9OIChCVUlMRElOR19HQ0NfTUFKT1IgKiAxMDAwICsgQlVJTERJTkdfR0NDX01JTk9SKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2MtZmFtaWx5L2MtY29tbW9uLmRlZiBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jLWZhbWlseS9jLWNvbW1vbi5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxMTNhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jLWZhbWlseS9jLWNvbW1vbi5kZWYKQEAgLTAsMCArMSw2MiBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICBhZGRpdGlvbmFsIHRyZWUgY29kZXMgdXNlZCBpbiB0aGUgR05VIEMgY29tcGlsZXIgKHNlZSB0cmVlLmRlZgorICAgZm9yIHRoZSBzdGFuZGFyZCBjb2RlcykuCisgICBDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQmVuamFtaW4gQ2hlbGYgPGNoZWxmQGNvZGVzb3VyY2VyeS5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUcmVlIG5vZGVzIHVzZWQgaW4gdGhlIEMgZnJvbnRlbmQuICBUaGVzZSBhcmUgYWxzbyBzaGFyZWQgd2l0aCB0aGUKKyAgIEMrKyBhbmQgT2JqZWN0aXZlIEMgZnJvbnRlbmRzLiAgKi8KKworLyogQSBDX01BWUJFX0NPTlNUX0VYUFIsIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIEMgYW5kIE9iamVjdGl2ZSBDLAorICAgdHJhY2tzIGluZm9ybWF0aW9uIGFib3V0IGNvbnN0YW5jeSBvZiBhbiBleHByZXNzaW9uIGFuZCBWTEEgdHlwZQorICAgc2l6ZXMgb3IgVk0gZXhwcmVzc2lvbnMgZnJvbSB0eXBlb2YgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZAorICAgYmVmb3JlIHRoZSBtYWluIGV4cHJlc3Npb24uICBJdCBpcyB1c2VkIGR1cmluZyBwYXJzaW5nIGFuZCByZW1vdmVkCisgICBpbiBjX2Z1bGx5X2ZvbGQuICBDX01BWUJFX0NPTlNUX0VYUFJfUFJFIGlzIHRoZSBleHByZXNzaW9uIHRvCisgICBldmFsdWF0ZSBmaXJzdCwgaWYgbm90IE5VTEw7IENfTUFZQkVfQ09OU1RfRVhQUl9FWFBSIGlzIHRoZSBtYWluCisgICBleHByZXNzaW9uLiAgSWYgQ19NQVlCRV9DT05TVF9FWFBSX0lOVF9PUEVSQU5EUyBpcyBzZXQgdGhlbiB0aGUKKyAgIGV4cHJlc3Npb24gbWF5IGJlIHVzZWQgaW4gYW4gdW5ldmFsdWF0ZWQgcGFydCBvZiBhbiBpbnRlZ2VyCisgICBjb25zdGFudCBleHByZXNzaW9uLCBidXQgbm90IGluIGFuIGV2YWx1YXRlZCBwYXJ0LiAgSWYKKyAgIENfTUFZQkVfQ09OU1RfRVhQUl9OT05fQ09OU1QgaXMgc2V0IHRoZW4gdGhlIGV4cHJlc3Npb24gY29udGFpbnMKKyAgIHNvbWV0aGluZyB0aGF0IGNhbm5vdCBvY2N1ciBpbiBhbiBldmFsdWF0ZWQgcGFydCBvZiBhIGNvbnN0YW50CisgICBleHByZXNzaW9uIChvciBvdXRzaWRlIG9mIHNpemVvZiBpbiBDOTAgbW9kZSk7IG90aGVyd2lzZSBpdCBkb2VzCisgICBub3QuICAqLworREVGVFJFRUNPREUgKENfTUFZQkVfQ09OU1RfRVhQUiwgImNfbWF5YmVfY29uc3RfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorCisvKiBBbiBFWENFU1NfUFJFQ0lTSU9OX0VYUFIsIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIEMgYW5kIE9iamVjdGl2ZQorICAgQywgcmVwcmVzZW50cyBhbiBleHByZXNzaW9uIGV2YWx1YXRlZCBpbiBncmVhdGVyIHJhbmdlIG9yIHByZWNpc2lvbgorICAgdGhhbiBpdHMgdHlwZS4gIFRoZSB0eXBlIG9mIHRoZSBFWENFU1NfUFJFQ0lTSU9OX0VYUFIgaXMgdGhlCisgICBzZW1hbnRpYyB0eXBlIHdoaWxlIHRoZSBvcGVyYW5kIHJlcHJlc2VudHMgd2hhdCBpcyBhY3R1YWxseSBiZWluZworICAgZXZhbHVhdGVkLiAgKi8KK0RFRlRSRUVDT0RFIChFWENFU1NfUFJFQ0lTSU9OX0VYUFIsICJleGNlc3NfcHJlY2lzaW9uX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogVXNlZCB0byByZXByZXNlbnQgYSB1c2VyLWRlZmluZWQgbGl0ZXJhbC4KKyAgIFRoZSBvcGVyYW5kcyBhcmUgYW4gSURFTlRJRklFUiBmb3IgdGhlIHN1ZmZpeCwgdGhlIFZBTFVFIG9mIHRoZSBsaXRlcmFsLAorICAgYW5kIGZvciBudW1lcmljIGxpdGVyYWxzIHRoZSBvcmlnaW5hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlCisgICBudW1iZXIuICAqLworREVGVFJFRUNPREUgKFVTRVJERUZfTElURVJBTCwgInVzZXJkZWZfbGl0ZXJhbCIsIHRjY19leGNlcHRpb25hbCwgMykKKworLyogUmVwcmVzZW50cyBhICdzaXplb2YnIGV4cHJlc3Npb24gZHVyaW5nIEMrKyB0ZW1wbGF0ZSBleHBhbnNpb24sCisgICBvciBmb3IgdGhlIHB1cnBvc2Ugb2YgLVdzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3Mgd2FybmluZy4gICovCitERUZUUkVFQ09ERSAoU0laRU9GX0VYUFIsICJzaXplb2ZfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKgorTG9jYWwgdmFyaWFibGVzOgorbW9kZTpjCitFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2MtZmFtaWx5L2MtY29tbW9uLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYy1mYW1pbHkvYy1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDE0NjUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2MtZmFtaWx5L2MtY29tbW9uLmgKQEAgLTAsMCArMSwxMTM2IEBACisvKiBEZWZpbml0aW9ucyBmb3IgYy1jb21tb24uYy4KKyAgIENvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfQ19DT01NT05fSAorI2RlZmluZSBHQ0NfQ19DT01NT05fSAorCisjaW5jbHVkZSAic3BsYXktdHJlZS5oIgorI2luY2x1ZGUgImNwcGxpYi5oIgorI2luY2x1ZGUgImdnYy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKworLyogSW4gb3JkZXIgZm9yIHRoZSBmb3JtYXQgY2hlY2tpbmcgdG8gYWNjZXB0IHRoZSBDIGZyb250ZW5kCisgICBkaWFnbm9zdGljIGZyYW1ld29yayBleHRlbnNpb25zLCB5b3UgbXVzdCBpbmNsdWRlIHRoaXMgZmlsZSBiZWZvcmUKKyAgIGRpYWdub3N0aWMtY29yZS5oLCBub3QgYWZ0ZXIuICBUaGUgQyBmcm9udCBlbmQgZm9ybWF0cyBhcmUgYSBzdWJzZXQgb2YgdGhvc2UKKyAgIGZvciBDKyssIHNvIHRoZXkgYXJlIHRoZSBhcHByb3ByaWF0ZSBzZXQgdG8gdXNlIGluIGNvbW1vbiBjb2RlOworICAgY3AtdHJlZS5oIG92ZXJyaWRlcyB0aGlzIGZvciBDKysuICAqLworI2lmIGRlZmluZWQoR0NDX0RJQUdOT1NUSUNfQ09SRV9IKQorI2Vycm9yIFwKK0luIG9yZGVyIGZvciB0aGUgZm9ybWF0IGNoZWNraW5nIHRvIGFjY2VwdCB0aGUgQyBmcm9udCBlbmQgZGlhZ25vc3RpYyBcCitmcmFtZXdvcmsgZXh0ZW5zaW9ucywgeW91IG11c3QgaW5jbHVkZSB0aGlzIGZpbGUgYmVmb3JlIGRpYWdub3N0aWMtY29yZS5oIFwKK25ldmVyIGFmdGVyLgorI2VuZGlmCisjaWZuZGVmIEdDQ19ESUFHX1NUWUxFCisjZGVmaW5lIEdDQ19ESUFHX1NUWUxFIF9fZ2NjX2NkaWFnX18KKyNlbmRpZgorI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorCisvKiBVc2FnZSBvZiBUUkVFX0xBTkdfRkxBR18/OgorICAgMDogSURFTlRJRklFUl9NQVJLRUQgKHVzZWQgYnkgc2VhcmNoIHJvdXRpbmVzKS4KKyAgICAgIENfTUFZQkVfQ09OU1RfRVhQUl9JTlRfT1BFUkFORFMgKGluIENfTUFZQkVfQ09OU1RfRVhQUiwgZm9yIEMpCisgICAxOiBDX0RFQ0xBUkVEX0xBQkVMX0ZMQUcgKGluIExBQkVMX0RFQ0wpCisgICAgICBTVEFURU1FTlRfTElTVF9TVE1UX0VYUFIgKGluIFNUQVRFTUVOVF9MSVNUKQorICAgICAgQ19NQVlCRV9DT05TVF9FWFBSX05PTl9DT05TVCAoaW4gQ19NQVlCRV9DT05TVF9FWFBSLCBmb3IgQykKKyAgIDI6IHVudXNlZAorICAgMzogU1RBVEVNRU5UX0xJU1RfSEFTX0xBQkVMIChpbiBTVEFURU1FTlRfTElTVCkKKyAgIDQ6IHVudXNlZAorKi8KKworLyogUmVzZXJ2ZWQgaWRlbnRpZmllcnMuICBUaGlzIGlzIHRoZSB1bmlvbiBvZiBhbGwgdGhlIGtleXdvcmRzIGZvciBDLAorICAgQysrLCBhbmQgT2JqZWN0aXZlLUMuICBBbGwgdGhlIHR5cGUgbW9kaWZpZXJzIGhhdmUgdG8gYmUgaW4gb25lCisgICBibG9jayBhdCB0aGUgYmVnaW5uaW5nLCBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYXMgbWFzayBiaXRzLiAgVGhlcmUKKyAgIGFyZSAyOCB0eXBlIG1vZGlmaWVyczsgaWYgd2UgYWRkIG1hbnkgbW9yZSB3ZSB3aWxsIGhhdmUgdG8gcmVkZXNpZ24KKyAgIHRoZSBtYXNrIG1lY2hhbmlzbS4gICovCisKK2VudW0gcmlkCit7CisgIC8qIE1vZGlmaWVyczogKi8KKyAgLyogQywgaW4gZW1waXJpY2FsIG9yZGVyIG9mIGZyZXF1ZW5jeS4gICovCisgIFJJRF9TVEFUSUMgPSAwLAorICBSSURfVU5TSUdORUQsIFJJRF9MT05HLCAgICBSSURfQ09OU1QsIFJJRF9FWFRFUk4sCisgIFJJRF9SRUdJU1RFUiwgUklEX1RZUEVERUYsIFJJRF9TSE9SVCwgUklEX0lOTElORSwKKyAgUklEX1ZPTEFUSUxFLCBSSURfU0lHTkVELCAgUklEX0FVVE8sICBSSURfUkVTVFJJQ1QsCisgIFJJRF9OT1JFVFVSTiwKKworICAvKiBDIGV4dGVuc2lvbnMgKi8KKyAgUklEX0NPTVBMRVgsIFJJRF9USFJFQUQsIFJJRF9TQVQsCisKKyAgLyogQysrICovCisgIFJJRF9GUklFTkQsIFJJRF9WSVJUVUFMLCBSSURfRVhQTElDSVQsIFJJRF9FWFBPUlQsIFJJRF9NVVRBQkxFLAorCisgIC8qIE9iakMgKCJQUSIgcmVzZXJ2ZWQgd29yZHMgLSB0aGV5IGRvIG5vdCBhcHBlYXIgYWZ0ZXIgYSAnQCcgYW5kCisgICAgIGFyZSBrZXl3b3JkcyBvbmx5IGluIHNwZWNpZmljIGNvbnRleHRzKSAgKi8KKyAgUklEX0lOLCBSSURfT1VULCBSSURfSU5PVVQsIFJJRF9CWUNPUFksIFJJRF9CWVJFRiwgUklEX09ORVdBWSwKKworICAvKiBPYmpDICgiUEFUVFIiIHJlc2VydmVkIHdvcmRzIC0gdGhleSBkbyBub3QgYXBwZWFyIGFmdGVyIGEgJ0AnIAorICAgICBhbmQgYXJlIGtleXdvcmRzIG9ubHkgYXMgcHJvcGVydHkgYXR0cmlidXRlcykgICovCisgIFJJRF9HRVRURVIsIFJJRF9TRVRURVIsCisgIFJJRF9SRUFET05MWSwgUklEX1JFQURXUklURSwKKyAgUklEX0FTU0lHTiwgUklEX1JFVEFJTiwgUklEX0NPUFksCisgIFJJRF9OT05BVE9NSUMsCisKKyAgLyogQyAocmVzZXJ2ZWQgYW5kIGltYWdpbmFyeSB0eXBlcyBub3QgaW1wbGVtZW50ZWQsIHNvIGFueSB1c2UgaXMgYQorICAgICBzeW50YXggZXJyb3IpICovCisgIFJJRF9JTUFHSU5BUlksCisKKyAgLyogQyAqLworICBSSURfSU5ULCAgICAgUklEX0NIQVIsICAgUklEX0ZMT0FULCAgICBSSURfRE9VQkxFLCBSSURfVk9JRCwKKyAgUklEX0lOVDEyOCwKKyAgUklEX0VOVU0sICAgIFJJRF9TVFJVQ1QsIFJJRF9VTklPTiwgICAgUklEX0lGLCAgICAgUklEX0VMU0UsCisgIFJJRF9XSElMRSwgICBSSURfRE8sICAgICBSSURfRk9SLCAgICAgIFJJRF9TV0lUQ0gsIFJJRF9DQVNFLAorICBSSURfREVGQVVMVCwgUklEX0JSRUFLLCAgUklEX0NPTlRJTlVFLCBSSURfUkVUVVJOLCBSSURfR09UTywKKyAgUklEX1NJWkVPRiwKKworICAvKiBDIGV4dGVuc2lvbnMgKi8KKyAgUklEX0FTTSwgICAgICAgUklEX1RZUEVPRiwgICBSSURfQUxJR05PRiwgIFJJRF9BVFRSSUJVVEUsICBSSURfVkFfQVJHLAorICBSSURfRVhURU5TSU9OLCBSSURfSU1BR1BBUlQsIFJJRF9SRUFMUEFSVCwgUklEX0xBQkVMLCAgICAgIFJJRF9DSE9PU0VfRVhQUiwKKyAgUklEX1RZUEVTX0NPTVBBVElCTEVfUCwgICAgICBSSURfQlVJTFRJTl9DT01QTEVYLAkgICAgIFJJRF9CVUlMVElOX1NIVUZGTEUsCisgIFJJRF9ERkxPQVQzMiwgUklEX0RGTE9BVDY0LCBSSURfREZMT0FUMTI4LAorICBSSURfRlJBQ1QsIFJJRF9BQ0NVTSwKKworICAvKiBDMTEgKi8KKyAgUklEX0FMSUdOQVMsCisKKyAgLyogVGhpcyBtZWFucyB0byB3YXJuIHRoYXQgdGhpcyBpcyBhIEMrKyBrZXl3b3JkLCBhbmQgdGhlbiB0cmVhdCBpdAorICAgICBhcyBhIG5vcm1hbCBpZGVudGlmaWVyLiAgKi8KKyAgUklEX0NYWF9DT01QQVRfV0FSTiwKKworICAvKiBHTlUgdHJhbnNhY3Rpb25hbCBtZW1vcnkgZXh0ZW5zaW9uICovCisgIFJJRF9UUkFOU0FDVElPTl9BVE9NSUMsIFJJRF9UUkFOU0FDVElPTl9SRUxBWEVELCBSSURfVFJBTlNBQ1RJT05fQ0FOQ0VMLAorCisgIC8qIFRvbyBtYW55IHdheXMgb2YgZ2V0dGluZyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIGFzIGEgc3RyaW5nICovCisgIFJJRF9GVU5DVElPTl9OQU1FLCBSSURfUFJFVFRZX0ZVTkNUSU9OX05BTUUsIFJJRF9DOTlfRlVOQ1RJT05fTkFNRSwKKworICAvKiBDKysgKHNvbWUgb2YgdGhlc2UgYXJlIGtleXdvcmRzIGluIE9iamVjdGl2ZS1DIGFzIHdlbGwsIGJ1dCBvbmx5CisgICAgIGlmIHRoZXkgYXBwZWFyIGFmdGVyIGEgJ0AnKSAqLworICBSSURfQk9PTCwgICAgIFJJRF9XQ0hBUiwgICAgUklEX0NMQVNTLAorICBSSURfUFVCTElDLCAgIFJJRF9QUklWQVRFLCAgUklEX1BST1RFQ1RFRCwKKyAgUklEX1RFTVBMQVRFLCBSSURfTlVMTCwgICAgIFJJRF9DQVRDSCwKKyAgUklEX0RFTEVURSwgICBSSURfRkFMU0UsICAgIFJJRF9OQU1FU1BBQ0UsCisgIFJJRF9ORVcsICAgICAgUklEX09GRlNFVE9GLCBSSURfT1BFUkFUT1IsCisgIFJJRF9USElTLCAgICAgUklEX1RIUk9XLCAgICBSSURfVFJVRSwKKyAgUklEX1RSWSwgICAgICBSSURfVFlQRU5BTUUsIFJJRF9UWVBFSUQsCisgIFJJRF9VU0lORywgICAgUklEX0NIQVIxNiwgICBSSURfQ0hBUjMyLAorCisgIC8qIGNhc3RzICovCisgIFJJRF9DT05TVENBU1QsIFJJRF9EWU5DQVNULCBSSURfUkVJTlRDQVNULCBSSURfU1RBVENBU1QsCisKKyAgLyogQysrIGV4dGVuc2lvbnMgKi8KKyAgUklEX0JBU0VTLCAgICAgICAgICAgICAgICAgICBSSURfRElSRUNUX0JBU0VTLAorICBSSURfSEFTX05PVEhST1dfQVNTSUdOLCAgICAgIFJJRF9IQVNfTk9USFJPV19DT05TVFJVQ1RPUiwKKyAgUklEX0hBU19OT1RIUk9XX0NPUFksICAgICAgICBSSURfSEFTX1RSSVZJQUxfQVNTSUdOLAorICBSSURfSEFTX1RSSVZJQUxfQ09OU1RSVUNUT1IsIFJJRF9IQVNfVFJJVklBTF9DT1BZLAorICBSSURfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUiwgIFJJRF9IQVNfVklSVFVBTF9ERVNUUlVDVE9SLAorICBSSURfSVNfQUJTVFJBQ1QsICAgICAgICAgICAgIFJJRF9JU19CQVNFX09GLAorICBSSURfSVNfQ0xBU1MsICAgICAgICAgICAgICAgIFJJRF9JU19DT05WRVJUSUJMRV9UTywKKyAgUklEX0lTX0VNUFRZLCAgICAgICAgICAgICAgICBSSURfSVNfRU5VTSwKKyAgUklEX0lTX0ZJTkFMLCAgICAgICAgICAgICAgICBSSURfSVNfTElURVJBTF9UWVBFLAorICBSSURfSVNfUE9ELCAgICAgICAgICAgICAgICAgIFJJRF9JU19QT0xZTU9SUEhJQywKKyAgUklEX0lTX1NURF9MQVlPVVQsICAgICAgICAgICBSSURfSVNfVFJJVklBTCwKKyAgUklEX0lTX1VOSU9OLCAgICAgICAgICAgICAgICBSSURfVU5ERVJMWUlOR19UWVBFLAorCisgIC8qIEMrKzExICovCisgIFJJRF9DT05TVEVYUFIsIFJJRF9ERUNMVFlQRSwgUklEX05PRVhDRVBULCBSSURfTlVMTFBUUiwgUklEX1NUQVRJQ19BU1NFUlQsCisKKyAgLyogT2JqZWN0aXZlLUMgKCJBVCIgcmVzZXJ2ZWQgd29yZHMgLSB0aGV5IGFyZSBvbmx5IGtleXdvcmRzIHdoZW4KKyAgICAgdGhleSBmb2xsb3cgJ0AnKSAgKi8KKyAgUklEX0FUX0VOQ09ERSwgICBSSURfQVRfRU5ELAorICBSSURfQVRfQ0xBU1MsICAgIFJJRF9BVF9BTElBUywgICAgIFJJRF9BVF9ERUZTLAorICBSSURfQVRfUFJJVkFURSwgIFJJRF9BVF9QUk9URUNURUQsIFJJRF9BVF9QVUJMSUMsICBSSURfQVRfUEFDS0FHRSwKKyAgUklEX0FUX1BST1RPQ09MLCBSSURfQVRfU0VMRUNUT1IsCisgIFJJRF9BVF9USFJPVywJICAgUklEX0FUX1RSWSwgICAgICAgUklEX0FUX0NBVENILAorICBSSURfQVRfRklOQUxMWSwgIFJJRF9BVF9TWU5DSFJPTklaRUQsIAorICBSSURfQVRfT1BUSU9OQUwsIFJJRF9BVF9SRVFVSVJFRCwgUklEX0FUX1BST1BFUlRZLAorICBSSURfQVRfU1lOVEhFU0laRSwgUklEX0FUX0RZTkFNSUMsCisgIFJJRF9BVF9JTlRFUkZBQ0UsCisgIFJJRF9BVF9JTVBMRU1FTlRBVElPTiwKKworICAvKiBOYW1lZCBhZGRyZXNzIHN1cHBvcnQsIG1hcHBpbmcgdGhlIGtleXdvcmQgdG8gYSBwYXJ0aWN1bGFyIG5hbWVkIGFkZHJlc3MKKyAgICAgbnVtYmVyLiAgTmFtZWQgYWRkcmVzcyBzcGFjZSAwIGlzIHJlc2VydmVkIGZvciB0aGUgZ2VuZXJpYyBhZGRyZXNzLiAgSWYKKyAgICAgdGhlcmUgYXJlIG1vcmUgdGhhbiAyNTQgbmFtZWQgYWRkcmVzc2VzLCB0aGUgYWRkcl9zcGFjZV90IHR5cGUgd2lsbCBuZWVkCisgICAgIHRvIGJlIGdyb3duIGZyb20gYW4gdW5zaWduZWQgY2hhciB0byB1bnNpZ25lZCBzaG9ydC4gICovCisgIFJJRF9BRERSX1NQQUNFXzAsCQkvKiBnZW5lcmljIGFkZHJlc3MgKi8KKyAgUklEX0FERFJfU1BBQ0VfMSwKKyAgUklEX0FERFJfU1BBQ0VfMiwKKyAgUklEX0FERFJfU1BBQ0VfMywKKyAgUklEX0FERFJfU1BBQ0VfNCwKKyAgUklEX0FERFJfU1BBQ0VfNSwKKyAgUklEX0FERFJfU1BBQ0VfNiwKKyAgUklEX0FERFJfU1BBQ0VfNywKKyAgUklEX0FERFJfU1BBQ0VfOCwKKyAgUklEX0FERFJfU1BBQ0VfOSwKKyAgUklEX0FERFJfU1BBQ0VfMTAsCisgIFJJRF9BRERSX1NQQUNFXzExLAorICBSSURfQUREUl9TUEFDRV8xMiwKKyAgUklEX0FERFJfU1BBQ0VfMTMsCisgIFJJRF9BRERSX1NQQUNFXzE0LAorICBSSURfQUREUl9TUEFDRV8xNSwKKworICBSSURfRklSU1RfQUREUl9TUEFDRSA9IFJJRF9BRERSX1NQQUNFXzAsCisgIFJJRF9MQVNUX0FERFJfU1BBQ0UgPSBSSURfQUREUl9TUEFDRV8xNSwKKworICBSSURfTUFYLAorCisgIFJJRF9GSVJTVF9NT0RJRklFUiA9IFJJRF9TVEFUSUMsCisgIFJJRF9MQVNUX01PRElGSUVSID0gUklEX09ORVdBWSwKKworICBSSURfRklSU1RfQ1hYMFggPSBSSURfQ09OU1RFWFBSLAorICBSSURfTEFTVF9DWFgwWCA9IFJJRF9TVEFUSUNfQVNTRVJULAorICBSSURfRklSU1RfQVQgPSBSSURfQVRfRU5DT0RFLAorICBSSURfTEFTVF9BVCA9IFJJRF9BVF9JTVBMRU1FTlRBVElPTiwKKyAgUklEX0ZJUlNUX1BRID0gUklEX0lOLAorICBSSURfTEFTVF9QUSA9IFJJRF9PTkVXQVksCisgIFJJRF9GSVJTVF9QQVRUUiA9IFJJRF9HRVRURVIsCisgIFJJRF9MQVNUX1BBVFRSID0gUklEX05PTkFUT01JQworfTsKKworI2RlZmluZSBPQkpDX0lTX0FUX0tFWVdPUkQocmlkKSBcCisgICgodW5zaWduZWQgaW50KSAocmlkKSA+PSAodW5zaWduZWQgaW50KSBSSURfRklSU1RfQVQgJiYgXAorICAgKHVuc2lnbmVkIGludCkgKHJpZCkgPD0gKHVuc2lnbmVkIGludCkgUklEX0xBU1RfQVQpCisKKyNkZWZpbmUgT0JKQ19JU19QUV9LRVlXT1JEKHJpZCkgXAorICAoKHVuc2lnbmVkIGludCkgKHJpZCkgPj0gKHVuc2lnbmVkIGludCkgUklEX0ZJUlNUX1BRICYmIFwKKyAgICh1bnNpZ25lZCBpbnQpIChyaWQpIDw9ICh1bnNpZ25lZCBpbnQpIFJJRF9MQVNUX1BRKQorCisjZGVmaW5lIE9CSkNfSVNfUEFUVFJfS0VZV09SRChyaWQpIFwKKyAgKCh1bnNpZ25lZCBpbnQpIChyaWQpID49ICh1bnNpZ25lZCBpbnQpIFJJRF9GSVJTVF9QQVRUUiAmJiBcCisgICAodW5zaWduZWQgaW50KSAocmlkKSA8PSAodW5zaWduZWQgaW50KSBSSURfTEFTVF9QQVRUUikKKworLyogT0JKQ19JU19DWFhfS0VZV09SRCByZWNvZ25pemVzIHRoZSAnQ1hYX09CSkMnIGtleXdvcmRzIChzdWNoIGFzCisgICAnY2xhc3MnKSB3aGljaCBhcmUgc2hhcmVkIGluIGEgc3VidGxlIHdheSBiZXR3ZWVuIE9iamVjdGl2ZS1DIGFuZAorICAgQysrLiAgV2hlbiB0aGUgbGV4ZXIgaXMgbGV4aW5nIGluIE9iamVjdGl2ZS1DL09iamVjdGl2ZS1DKyssIGlmIGl0CisgICBmaW5kcyAnQCcgZm9sbG93ZWQgYnkgb25lIG9mIHRoZXNlIGlkZW50aWZpZXJzIChlZywgJ0BjbGFzcycpLCBpdAorICAgcmVjb2duaXplcyB0aGUgd2hvbGUgYXMgYW4gT2JqZWN0aXZlLUMga2V5d29yZC4gIElmIHRoZSBpZGVudGlmaWVyCisgICBpcyBmb3VuZCBlbHNld2hlcmUsIGl0IGZvbGxvd3MgdGhlIHJ1bGVzIG9mIHRoZSBDL0MrKyBsYW5ndWFnZS4KKyAqLworI2RlZmluZSBPQkpDX0lTX0NYWF9LRVlXT1JEKHJpZCkgXAorICAocmlkID09IFJJRF9DTEFTUwkJCQkJCQlcCisgICB8fCByaWQgPT0gUklEX1BVQkxJQyB8fCByaWQgPT0gUklEX1BST1RFQ1RFRCB8fCByaWQgPT0gUklEX1BSSVZBVEUJXAorICAgfHwgcmlkID09IFJJRF9UUlkgfHwgcmlkID09IFJJRF9USFJPVyB8fCByaWQgPT0gUklEX0NBVENIKQorCisvKiBUaGUgZWxlbWVudHMgb2YgYHJpZHBvaW50ZXJzJyBhcmUgaWRlbnRpZmllciBub2RlcyBmb3IgdGhlIHJlc2VydmVkCisgICB0eXBlIG5hbWVzIGFuZCBzdG9yYWdlIGNsYXNzZXMuICBJdCBpcyBpbmRleGVkIGJ5IGEgUklEXy4uLiB2YWx1ZS4gICovCitleHRlcm4gR1RZICgobGVuZ3RoICgiKGludCkgUklEX01BWCIpKSkgdHJlZSAqcmlkcG9pbnRlcnM7CisKKy8qIFN0YW5kYXJkIG5hbWVkIG9yIG5hbWVsZXNzIGRhdGEgdHlwZXMgb2YgdGhlIEMgY29tcGlsZXIuICAqLworCitlbnVtIGNfdHJlZV9pbmRleAoreworICAgIENUSV9DSEFSMTZfVFlQRSwKKyAgICBDVElfQ0hBUjMyX1RZUEUsCisgICAgQ1RJX1dDSEFSX1RZUEUsCisgICAgQ1RJX1VOREVSTFlJTkdfV0NIQVJfVFlQRSwKKyAgICBDVElfV0lOVF9UWVBFLAorICAgIENUSV9TSUdORURfU0laRV9UWVBFLCAvKiBGb3IgZm9ybWF0IGNoZWNraW5nIG9ubHkuICAqLworICAgIENUSV9VTlNJR05FRF9QVFJESUZGX1RZUEUsIC8qIEZvciBmb3JtYXQgY2hlY2tpbmcgb25seS4gICovCisgICAgQ1RJX0lOVE1BWF9UWVBFLAorICAgIENUSV9VSU5UTUFYX1RZUEUsCisgICAgQ1RJX1dJREVTVF9JTlRfTElUX1RZUEUsCisgICAgQ1RJX1dJREVTVF9VSU5UX0xJVF9UWVBFLAorCisgICAgLyogVHlwZXMgZm9yIDxzdGRpbnQuaD4sIHRoYXQgbWF5IG5vdCBiZSBkZWZpbmVkIG9uIGFsbAorICAgICAgIHRhcmdldHMuICAqLworICAgIENUSV9TSUdfQVRPTUlDX1RZUEUsCisgICAgQ1RJX0lOVDhfVFlQRSwKKyAgICBDVElfSU5UMTZfVFlQRSwKKyAgICBDVElfSU5UMzJfVFlQRSwKKyAgICBDVElfSU5UNjRfVFlQRSwKKyAgICBDVElfVUlOVDhfVFlQRSwKKyAgICBDVElfVUlOVDE2X1RZUEUsCisgICAgQ1RJX1VJTlQzMl9UWVBFLAorICAgIENUSV9VSU5UNjRfVFlQRSwKKyAgICBDVElfSU5UX0xFQVNUOF9UWVBFLAorICAgIENUSV9JTlRfTEVBU1QxNl9UWVBFLAorICAgIENUSV9JTlRfTEVBU1QzMl9UWVBFLAorICAgIENUSV9JTlRfTEVBU1Q2NF9UWVBFLAorICAgIENUSV9VSU5UX0xFQVNUOF9UWVBFLAorICAgIENUSV9VSU5UX0xFQVNUMTZfVFlQRSwKKyAgICBDVElfVUlOVF9MRUFTVDMyX1RZUEUsCisgICAgQ1RJX1VJTlRfTEVBU1Q2NF9UWVBFLAorICAgIENUSV9JTlRfRkFTVDhfVFlQRSwKKyAgICBDVElfSU5UX0ZBU1QxNl9UWVBFLAorICAgIENUSV9JTlRfRkFTVDMyX1RZUEUsCisgICAgQ1RJX0lOVF9GQVNUNjRfVFlQRSwKKyAgICBDVElfVUlOVF9GQVNUOF9UWVBFLAorICAgIENUSV9VSU5UX0ZBU1QxNl9UWVBFLAorICAgIENUSV9VSU5UX0ZBU1QzMl9UWVBFLAorICAgIENUSV9VSU5UX0ZBU1Q2NF9UWVBFLAorICAgIENUSV9JTlRQVFJfVFlQRSwKKyAgICBDVElfVUlOVFBUUl9UWVBFLAorCisgICAgQ1RJX0NIQVJfQVJSQVlfVFlQRSwKKyAgICBDVElfQ0hBUjE2X0FSUkFZX1RZUEUsCisgICAgQ1RJX0NIQVIzMl9BUlJBWV9UWVBFLAorICAgIENUSV9XQ0hBUl9BUlJBWV9UWVBFLAorICAgIENUSV9JTlRfQVJSQVlfVFlQRSwKKyAgICBDVElfU1RSSU5HX1RZUEUsCisgICAgQ1RJX0NPTlNUX1NUUklOR19UWVBFLAorCisgICAgLyogVHlwZSBmb3IgYm9vbGVhbiBleHByZXNzaW9ucyAoYm9vbCBpbiBDKyssIGludCBpbiBDKS4gICovCisgICAgQ1RJX1RSVVRIVkFMVUVfVFlQRSwKKyAgICBDVElfVFJVVEhWQUxVRV9UUlVFLAorICAgIENUSV9UUlVUSFZBTFVFX0ZBTFNFLAorCisgICAgQ1RJX0RFRkFVTFRfRlVOQ1RJT05fVFlQRSwKKworICAgIC8qIFRoZXNlIGFyZSBub3QgdHlwZXMsIGJ1dCB3ZSBoYXZlIHRvIGxvb2sgdGhlbSB1cCBhbGwgdGhlIHRpbWUuICAqLworICAgIENUSV9GVU5DVElPTl9OQU1FX0RFQ0wsCisgICAgQ1RJX1BSRVRUWV9GVU5DVElPTl9OQU1FX0RFQ0wsCisgICAgQ1RJX0M5OV9GVU5DVElPTl9OQU1FX0RFQ0wsCisgICAgQ1RJX1NBVkVEX0ZVTkNUSU9OX05BTUVfREVDTFMsCisKKyAgICBDVElfVk9JRF9aRVJPLAorCisgICAgQ1RJX05VTEwsCisKKyAgICBDVElfTUFYCit9OworCisjZGVmaW5lIENfQ1BQX0hBU0hOT0RFKGlkKSBcCisgICgmKCgoc3RydWN0IGNfY29tbW9uX2lkZW50aWZpZXIgKikgKGlkKSktPm5vZGUpKQorI2RlZmluZSBDX1JJRF9DT0RFKGlkKSBcCisgICgoZW51bSByaWQpICgoKHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyICopIChpZCkpLT5ub2RlLnJpZF9jb2RlKSkKKyNkZWZpbmUgQ19TRVRfUklEX0NPREUoaWQsIGNvZGUpIFwKKyAgKCgoc3RydWN0IGNfY29tbW9uX2lkZW50aWZpZXIgKikgKGlkKSktPm5vZGUucmlkX2NvZGUgPSAodW5zaWduZWQgY2hhcikgY29kZSkKKworLyogSWRlbnRpZmllciBwYXJ0IGNvbW1vbiB0byB0aGUgQyBmcm9udCBlbmRzLiAgSW5oZXJpdHMgZnJvbQorICAgdHJlZV9pZGVudGlmaWVyLCBkZXNwaXRlIGFwcGVhcmFuY2VzLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGNfY29tbW9uX2lkZW50aWZpZXIgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBzdHJ1Y3QgY3BwX2hhc2hub2RlIG5vZGU7Cit9OworCisvKiBBbiBlbnRyeSBpbiB0aGUgcmVzZXJ2ZWQga2V5d29yZCB0YWJsZS4gICovCisKK3N0cnVjdCBjX2NvbW1vbl9yZXN3b3JkCit7CisgIGNvbnN0IGNoYXIgKmNvbnN0IHdvcmQ7CisgIEVOVU1fQklURklFTEQocmlkKSBjb25zdCByaWQgOiAxNjsKKyAgY29uc3QgdW5zaWduZWQgaW50IGRpc2FibGUgICA6IDE2OworfTsKKworLyogRXh0cmEgY3BwX3R0eXBlIHZhbHVlcyBmb3IgQysrLiAgKi8KKworLyogQSB0b2tlbiB0eXBlIGZvciBrZXl3b3JkcywgYXMgb3Bwb3NlZCB0byBvcmRpbmFyeSBpZGVudGlmaWVycy4gICovCisjZGVmaW5lIENQUF9LRVlXT1JEICgoZW51bSBjcHBfdHR5cGUpIChOX1RUWVBFUyArIDEpKQorCisvKiBBIHRva2VuIHR5cGUgZm9yIHRlbXBsYXRlLWlkcy4gIElmIGEgdGVtcGxhdGUtaWQgaXMgcHJvY2Vzc2VkIHdoaWxlCisgICBwYXJzaW5nIHRlbnRhdGl2ZWx5LCBpdCBpcyByZXBsYWNlZCB3aXRoIGEgQ1BQX1RFTVBMQVRFX0lEIHRva2VuOworICAgdGhlIHZhbHVlIG9mIHRoZSBDUFBfVEVNUExBVEVfSUQgaXMgd2hhdGV2ZXIgd2FzIHJldHVybmVkIGJ5CisgICBjcF9wYXJzZXJfdGVtcGxhdGVfaWQuICAqLworI2RlZmluZSBDUFBfVEVNUExBVEVfSUQgKChlbnVtIGNwcF90dHlwZSkgKENQUF9LRVlXT1JEICsgMSkpCisKKy8qIEEgdG9rZW4gdHlwZSBmb3IgbmVzdGVkLW5hbWUtc3BlY2lmaWVycy4gIElmIGEKKyAgIG5lc3RlZC1uYW1lLXNwZWNpZmllciBpcyBwcm9jZXNzZWQgd2hpbGUgcGFyc2luZyB0ZW50YXRpdmVseSwgaXQgaXMKKyAgIHJlcGxhY2VkIHdpdGggYSBDUFBfTkVTVEVEX05BTUVfU1BFQ0lGSUVSIHRva2VuOyB0aGUgdmFsdWUgb2YgdGhlCisgICBDUFBfTkVTVEVEX05BTUVfU1BFQ0lGSUVSIGlzIHdoYXRldmVyIHdhcyByZXR1cm5lZCBieQorICAgY3BfcGFyc2VyX25lc3RlZF9uYW1lX3NwZWNpZmllcl9vcHQuICAqLworI2RlZmluZSBDUFBfTkVTVEVEX05BTUVfU1BFQ0lGSUVSICgoZW51bSBjcHBfdHR5cGUpIChDUFBfVEVNUExBVEVfSUQgKyAxKSkKKworLyogQSB0b2tlbiB0eXBlIGZvciBwcmUtcGFyc2VkIEMrKzB4IGRlY2x0eXBlLiAgKi8KKyNkZWZpbmUgQ1BQX0RFQ0xUWVBFICgoZW51bSBjcHBfdHR5cGUpIChDUFBfTkVTVEVEX05BTUVfU1BFQ0lGSUVSICsgMSkpCisKKy8qIFRoZSBudW1iZXIgb2YgdG9rZW4gdHlwZXMsIGluY2x1ZGluZyBDKystc3BlY2lmaWMgb25lcy4gICovCisjZGVmaW5lIE5fQ1BfVFRZUEVTICgoaW50KSAoQ1BQX0RFQ0xUWVBFICsgMSkpCisKKy8qIERpc2FibGUgbWFzay4gIEtleXdvcmRzIGFyZSBkaXNhYmxlZCBpZiAocmVzd29yZHNbaV0uZGlzYWJsZSAmCisgICBtYXNrKSBpcyBfdHJ1ZV8uICBUaHVzIGZvciBrZXl3b3JkcyB3aGljaCBhcmUgcHJlc2VudCBpbiBhbGwKKyAgIGxhbmd1YWdlcyB0aGUgZGlzYWJsZSBmaWVsZCBpcyB6ZXJvLiAgKi8KKworI2RlZmluZSBEX0NPTkxZCQkweDAwMQkvKiBDIG9ubHkgKG5vdCBpbiBDKyspLiAgKi8KKyNkZWZpbmUgRF9DWFhPTkxZCTB4MDAyCS8qIEMrKyBvbmx5IChub3QgaW4gQykuICAqLworI2RlZmluZSBEX0M5OQkJMHgwMDQJLyogSW4gQywgQzk5IG9ubHkuICAqLworI2RlZmluZSBEX0NYWDBYICAgICAgICAgMHgwMDgJLyogSW4gQysrLCBDKyswWCBvbmx5LiAgKi8KKyNkZWZpbmUgRF9FWFQJCTB4MDEwCS8qIEdDQyBleHRlbnNpb24uICAqLworI2RlZmluZSBEX0VYVDg5CQkweDAyMAkvKiBHQ0MgZXh0ZW5zaW9uIGluY29ycG9yYXRlZCBpbiBDOTkuICAqLworI2RlZmluZSBEX0FTTQkJMHgwNDAJLyogRGlzYWJsZWQgYnkgLWZuby1hc20uICAqLworI2RlZmluZSBEX09CSkMJCTB4MDgwCS8qIEluIE9iamVjdGl2ZSBDIGFuZCBuZWl0aGVyIEMgbm9yIEMrKy4gICovCisjZGVmaW5lIERfQ1hYX09CSkMJMHgxMDAJLyogSW4gT2JqZWN0aXZlIEMsIGFuZCBDKyssIGJ1dCBub3QgQy4gICovCisjZGVmaW5lIERfQ1hYV0FSTgkweDIwMAkvKiBJbiBDIHdhcm4gd2l0aCAtV2N4eC1jb21wYXQuICAqLworCisvKiBUaGUgcmVzZXJ2ZWQga2V5d29yZCB0YWJsZS4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IGNfY29tbW9uX3Jlc3dvcmQgY19jb21tb25fcmVzd29yZHNbXTsKKworLyogVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgcmVzZXJ2ZWQga2V5d29yZCB0YWJsZS4gICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IG51bV9jX2NvbW1vbl9yZXN3b3JkczsKKworI2RlZmluZSBjaGFyMTZfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfQ0hBUjE2X1RZUEVdCisjZGVmaW5lIGNoYXIzMl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9DSEFSMzJfVFlQRV0KKyNkZWZpbmUgd2NoYXJfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX1dDSEFSX1RZUEVdCisjZGVmaW5lIHVuZGVybHlpbmdfd2NoYXJfdHlwZV9ub2RlCWNfZ2xvYmFsX3RyZWVzW0NUSV9VTkRFUkxZSU5HX1dDSEFSX1RZUEVdCisjZGVmaW5lIHdpbnRfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX1dJTlRfVFlQRV0KKyNkZWZpbmUgc2lnbmVkX3NpemVfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfU0lHTkVEX1NJWkVfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfcHRyZGlmZl90eXBlX25vZGUJY19nbG9iYWxfdHJlZXNbQ1RJX1VOU0lHTkVEX1BUUkRJRkZfVFlQRV0KKyNkZWZpbmUgaW50bWF4X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVE1BWF9UWVBFXQorI2RlZmluZSB1aW50bWF4X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlRNQVhfVFlQRV0KKyNkZWZpbmUgd2lkZXN0X2ludGVnZXJfbGl0ZXJhbF90eXBlX25vZGUgY19nbG9iYWxfdHJlZXNbQ1RJX1dJREVTVF9JTlRfTElUX1RZUEVdCisjZGVmaW5lIHdpZGVzdF91bnNpZ25lZF9saXRlcmFsX3R5cGVfbm9kZSBjX2dsb2JhbF90cmVlc1tDVElfV0lERVNUX1VJTlRfTElUX1RZUEVdCisKKyNkZWZpbmUgc2lnX2F0b21pY190eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9TSUdfQVRPTUlDX1RZUEVdCisjZGVmaW5lIGludDhfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVDhfVFlQRV0KKyNkZWZpbmUgaW50MTZfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVDE2X1RZUEVdCisjZGVmaW5lIGludDMyX3R5cGVfbm9kZQkJCWNfZ2xvYmFsX3RyZWVzW0NUSV9JTlQzMl9UWVBFXQorI2RlZmluZSBpbnQ2NF90eXBlX25vZGUJCQljX2dsb2JhbF90cmVlc1tDVElfSU5UNjRfVFlQRV0KKyNkZWZpbmUgdWludDhfdHlwZV9ub2RlCQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlQ4X1RZUEVdCisjZGVmaW5lIGNfdWludDE2X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlQxNl9UWVBFXQorI2RlZmluZSBjX3VpbnQzMl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9VSU5UMzJfVFlQRV0KKyNkZWZpbmUgY191aW50NjRfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVDY0X1RZUEVdCisjZGVmaW5lIGludF9sZWFzdDhfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UX0xFQVNUOF9UWVBFXQorI2RlZmluZSBpbnRfbGVhc3QxNl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9JTlRfTEVBU1QxNl9UWVBFXQorI2RlZmluZSBpbnRfbGVhc3QzMl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9JTlRfTEVBU1QzMl9UWVBFXQorI2RlZmluZSBpbnRfbGVhc3Q2NF90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9JTlRfTEVBU1Q2NF9UWVBFXQorI2RlZmluZSB1aW50X2xlYXN0OF90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9VSU5UX0xFQVNUOF9UWVBFXQorI2RlZmluZSB1aW50X2xlYXN0MTZfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVF9MRUFTVDE2X1RZUEVdCisjZGVmaW5lIHVpbnRfbGVhc3QzMl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9VSU5UX0xFQVNUMzJfVFlQRV0KKyNkZWZpbmUgdWludF9sZWFzdDY0X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1VJTlRfTEVBU1Q2NF9UWVBFXQorI2RlZmluZSBpbnRfZmFzdDhfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UX0ZBU1Q4X1RZUEVdCisjZGVmaW5lIGludF9mYXN0MTZfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UX0ZBU1QxNl9UWVBFXQorI2RlZmluZSBpbnRfZmFzdDMyX3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0lOVF9GQVNUMzJfVFlQRV0KKyNkZWZpbmUgaW50X2Zhc3Q2NF90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9JTlRfRkFTVDY0X1RZUEVdCisjZGVmaW5lIHVpbnRfZmFzdDhfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVF9GQVNUOF9UWVBFXQorI2RlZmluZSB1aW50X2Zhc3QxNl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9VSU5UX0ZBU1QxNl9UWVBFXQorI2RlZmluZSB1aW50X2Zhc3QzMl90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9VSU5UX0ZBU1QzMl9UWVBFXQorI2RlZmluZSB1aW50X2Zhc3Q2NF90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9VSU5UX0ZBU1Q2NF9UWVBFXQorI2RlZmluZSBpbnRwdHJfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfSU5UUFRSX1RZUEVdCisjZGVmaW5lIHVpbnRwdHJfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVUlOVFBUUl9UWVBFXQorCisjZGVmaW5lIHRydXRodmFsdWVfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVFJVVEhWQUxVRV9UWVBFXQorI2RlZmluZSB0cnV0aHZhbHVlX3RydWVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1RSVVRIVkFMVUVfVFJVRV0KKyNkZWZpbmUgdHJ1dGh2YWx1ZV9mYWxzZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfVFJVVEhWQUxVRV9GQUxTRV0KKworI2RlZmluZSBjaGFyX2FycmF5X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0NIQVJfQVJSQVlfVFlQRV0KKyNkZWZpbmUgY2hhcjE2X2FycmF5X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0NIQVIxNl9BUlJBWV9UWVBFXQorI2RlZmluZSBjaGFyMzJfYXJyYXlfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfQ0hBUjMyX0FSUkFZX1RZUEVdCisjZGVmaW5lIHdjaGFyX2FycmF5X3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1dDSEFSX0FSUkFZX1RZUEVdCisjZGVmaW5lIGludF9hcnJheV90eXBlX25vZGUJCWNfZ2xvYmFsX3RyZWVzW0NUSV9JTlRfQVJSQVlfVFlQRV0KKyNkZWZpbmUgc3RyaW5nX3R5cGVfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX1NUUklOR19UWVBFXQorI2RlZmluZSBjb25zdF9zdHJpbmdfdHlwZV9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfQ09OU1RfU1RSSU5HX1RZUEVdCisKKyNkZWZpbmUgZGVmYXVsdF9mdW5jdGlvbl90eXBlCQljX2dsb2JhbF90cmVlc1tDVElfREVGQVVMVF9GVU5DVElPTl9UWVBFXQorCisjZGVmaW5lIGZ1bmN0aW9uX25hbWVfZGVjbF9ub2RlCQljX2dsb2JhbF90cmVlc1tDVElfRlVOQ1RJT05fTkFNRV9ERUNMXQorI2RlZmluZSBwcmV0dHlfZnVuY3Rpb25fbmFtZV9kZWNsX25vZGUJY19nbG9iYWxfdHJlZXNbQ1RJX1BSRVRUWV9GVU5DVElPTl9OQU1FX0RFQ0xdCisjZGVmaW5lIGM5OV9mdW5jdGlvbl9uYW1lX2RlY2xfbm9kZQkJY19nbG9iYWxfdHJlZXNbQ1RJX0M5OV9GVU5DVElPTl9OQU1FX0RFQ0xdCisjZGVmaW5lIHNhdmVkX2Z1bmN0aW9uX25hbWVfZGVjbHMJY19nbG9iYWxfdHJlZXNbQ1RJX1NBVkVEX0ZVTkNUSU9OX05BTUVfREVDTFNdCisKKy8qIEEgbm9kZSBmb3IgYCgodm9pZCkgMCknLiAgKi8KKyNkZWZpbmUgdm9pZF96ZXJvX25vZGUgICAgICAgICAgICAgICAgICBjX2dsb2JhbF90cmVlc1tDVElfVk9JRF9aRVJPXQorCisvKiBUaGUgbm9kZSBmb3IgQysrIGBfX251bGwnLiAgKi8KKyNkZWZpbmUgbnVsbF9ub2RlICAgICAgICAgICAgICAgICAgICAgICBjX2dsb2JhbF90cmVlc1tDVElfTlVMTF0KKworZXh0ZXJuIEdUWSgoKSkgdHJlZSBjX2dsb2JhbF90cmVlc1tDVElfTUFYXTsKKworLyogSW4gYSBSRUNPUkRfVFlQRSwgYSBzb3J0ZWQgYXJyYXkgb2YgdGhlIGZpZWxkcyBvZiB0aGUgdHlwZSwgbm90IGEKKyAgIHRyZWUgZm9yIHNpemUgcmVhc29ucy4gICovCitzdHJ1Y3QgR1RZKCh2YXJpYWJsZV9zaXplKSkgc29ydGVkX2ZpZWxkc190eXBlIHsKKyAgaW50IGxlbjsKKyAgdHJlZSBHVFkoKGxlbmd0aCAoIiVoLmxlbiIpKSkgZWx0c1sxXTsKK307CisKKy8qIE1hcmsgd2hpY2ggbGFiZWxzIGFyZSBleHBsaWNpdGx5IGRlY2xhcmVkLgorICAgVGhlc2UgbWF5IGJlIHNoYWRvd2VkLCBhbmQgbWF5IGJlIHJlZmVyZW5jZWQgZnJvbSBuZXN0ZWQgZnVuY3Rpb25zLiAgKi8KKyNkZWZpbmUgQ19ERUNMQVJFRF9MQUJFTF9GTEFHKGxhYmVsKSBUUkVFX0xBTkdfRkxBR18xIChsYWJlbCkKKwordHlwZWRlZiBlbnVtIGNfbGFuZ3VhZ2Vfa2luZAoreworICBjbGtfYwkJPSAwLAkJLyogQzkwLCBDOTQgb3IgQzk5ICovCisgIGNsa19vYmpjCT0gMSwJCS8qIGNsa19jIHdpdGggT2JqQyBmZWF0dXJlcy4gICovCisgIGNsa19jeHgJPSAyLAkJLyogQU5TSS9JU08gQysrICovCisgIGNsa19vYmpjeHgJPSAzCQkvKiBjbGtfY3h4IHdpdGggT2JqQyBmZWF0dXJlcy4gICovCit9CitjX2xhbmd1YWdlX2tpbmQ7CisKKy8qIFRvIHRlc3QgZm9yIGEgc3BlY2lmaWMgbGFuZ3VhZ2UgdXNlIGNfbGFuZ3VhZ2UsIGRlZmluZWQgYnkgZWFjaAorICAgZnJvbnQgZW5kLiAgRm9yICJPYmpDIGZlYXR1cmVzIiBvciAibm90IEMrKyIgdXNlIHRoZSBtYWNyb3MuICAqLworZXh0ZXJuIGNfbGFuZ3VhZ2Vfa2luZCBjX2xhbmd1YWdlOworCisjZGVmaW5lIGNfZGlhbGVjdF9jeHgoKQkJKChjX2xhbmd1YWdlICYgY2xrX2N4eCkgIT0gMCkKKyNkZWZpbmUgY19kaWFsZWN0X29iamMoKQkoKGNfbGFuZ3VhZ2UgJiBjbGtfb2JqYykgIT0gMCkKKworLyogVGhlIHZhcmlvdXMgbmFtZSBvZiBvcGVyYXRvciB0aGF0IGFwcGVhcnMgaW4gZXJyb3IgbWVzc2FnZXMuICovCit0eXBlZGVmIGVudW0gcmVmX29wZXJhdG9yIHsKKyAgLyogTlVMTCAqLworICBST19OVUxMLAorICAvKiBhcnJheSBpbmRleGluZyAqLworICBST19BUlJBWV9JTkRFWElORywKKyAgLyogdW5hcnkgKiAqLworICBST19VTkFSWV9TVEFSLAorICAvKiAtPiAqLworICBST19BUlJPVywKKyAgLyogaW1wbGljaXQgY29udmVyc2lvbiAqLworICBST19JTVBMSUNJVF9DT05WRVJTSU9OLAorICAvKiAtPiogKi8KKyAgUk9fQVJST1dfU1RBUgorfSByZWZfb3BlcmF0b3I7CisKKy8qIEluZm9ybWF0aW9uIGFib3V0IGEgc3RhdGVtZW50IHRyZWUuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBzdG10X3RyZWVfcyB7CisgIC8qIEEgc3RhY2sgb2Ygc3RhdGVtZW50IGxpc3RzIGJlaW5nIGNvbGxlY3RlZC4gICovCisgIHZlYzx0cmVlLCB2YV9nYz4gKnhfY3VyX3N0bXRfbGlzdDsKKworICAvKiBJbiBDKyssIE5vbnplcm8gaWYgd2Ugc2hvdWxkIHRyZWF0IHN0YXRlbWVudHMgYXMgZnVsbAorICAgICBleHByZXNzaW9ucy4gIEluIHBhcnRpY3VsYXIsIHRoaXMgdmFyaWFibGUgaXMgbm9uLXplcm8gaWYgYXQgdGhlCisgICAgIGVuZCBvZiBhIHN0YXRlbWVudCB3ZSBzaG91bGQgZGVzdHJveSBhbnkgdGVtcG9yYXJpZXMgY3JlYXRlZAorICAgICBkdXJpbmcgdGhhdCBzdGF0ZW1lbnQuICBTaW1pbGFybHksIGlmLCBhdCB0aGUgZW5kIG9mIGEgYmxvY2ssIHdlCisgICAgIHNob3VsZCBkZXN0cm95IGFueSBsb2NhbCB2YXJpYWJsZXMgaW4gdGhpcyBibG9jay4gIE5vcm1hbGx5LCB0aGlzCisgICAgIHZhcmlhYmxlIGlzIG5vbnplcm8sIHNpbmNlIHRob3NlIGFyZSB0aGUgbm9ybWFsIHNlbWFudGljcyBvZgorICAgICBDKysuCisKKyAgICAgVGhpcyBmbGFnIGhhcyBubyBlZmZlY3QgaW4gQy4gICovCisgIGludCBzdG10c19hcmVfZnVsbF9leHByc19wOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc3RtdF90cmVlX3MgKnN0bXRfdHJlZTsKKworLyogR2xvYmFsIHN0YXRlIHBlcnRpbmVudCB0byB0aGUgY3VycmVudCBmdW5jdGlvbi4gIFNvbWUgQyBkaWFsZWN0cworICAgZXh0ZW5kIHRoaXMgc3RydWN0dXJlIHdpdGggYWRkaXRpb25hbCBmaWVsZHMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBjX2xhbmd1YWdlX2Z1bmN0aW9uIHsKKyAgLyogV2hpbGUgd2UgYXJlIHBhcnNpbmcgdGhlIGZ1bmN0aW9uLCB0aGlzIGNvbnRhaW5zIGluZm9ybWF0aW9uCisgICAgIGFib3V0IHRoZSBzdGF0ZW1lbnQtdHJlZSB0aGF0IHdlIGFyZSBidWlsZGluZy4gICovCisgIHN0cnVjdCBzdG10X3RyZWVfcyB4X3N0bXRfdHJlZTsKKworICAvKiBWZWN0b3Igb2YgbG9jYWxseSBkZWZpbmVkIHR5cGVkZWZzLCBmb3IKKyAgICAgLVd1bnVzZWQtbG9jYWwtdHlwZWRlZnMuICAqLworICB2ZWM8dHJlZSwgdmFfZ2M+ICpsb2NhbF90eXBlZGVmczsKK307CisKKyNkZWZpbmUgc3RtdF9saXN0X3N0YWNrIChjdXJyZW50X3N0bXRfdHJlZSAoKS0+eF9jdXJfc3RtdF9saXN0KQorCisvKiBXaGVuIGJ1aWxkaW5nIGEgc3RhdGVtZW50LXRyZWUsIHRoaXMgaXMgdGhlIGN1cnJlbnQgc3RhdGVtZW50IGxpc3QKKyAgIGJlaW5nIGNvbGxlY3RlZC4gICovCisjZGVmaW5lIGN1cl9zdG10X2xpc3QJKHN0bXRfbGlzdF9zdGFjay0+bGFzdCAoKSkKKworI2RlZmluZSBidWlsZGluZ19zdG10X2xpc3RfcCgpIChzdG10X2xpc3Rfc3RhY2sgJiYgIXN0bXRfbGlzdF9zdGFjay0+aXNfZW1wdHkoKSkKKworLyogTGFuZ3VhZ2Utc3BlY2lmaWMgaG9va3MuICAqLworCisvKiBJZiBub24tTlVMTCwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBwcmVjb21waWxlIGhlYWRlciBmaWxlCisgICBpcyBsb2FkZWQuICAqLworZXh0ZXJuIHZvaWQgKCpsYW5nX3Bvc3RfcGNoX2xvYWQpICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcHVzaF9maWxlX3Njb3BlICh2b2lkKTsKK2V4dGVybiB2b2lkIHBvcF9maWxlX3Njb3BlICh2b2lkKTsKK2V4dGVybiBzdG10X3RyZWUgY3VycmVudF9zdG10X3RyZWUgKHZvaWQpOworZXh0ZXJuIHRyZWUgcHVzaF9zdG10X2xpc3QgKHZvaWQpOworZXh0ZXJuIHRyZWUgcG9wX3N0bXRfbGlzdCAodHJlZSk7CitleHRlcm4gdHJlZSBhZGRfc3RtdCAodHJlZSk7CitleHRlcm4gdm9pZCBwdXNoX2NsZWFudXAgKHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgcHVzaGRlY2xfdG9wX2xldmVsICh0cmVlKTsKK2V4dGVybiB0cmVlIHB1c2hkZWNsICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX21vZGlmeV9leHByIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCBlbnVtIHRyZWVfY29kZSwKKwkJCSAgICAgICBsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2luZGlyZWN0X3JlZiAobG9jYXRpb25fdCwgdHJlZSwgcmVmX29wZXJhdG9yKTsKKworZXh0ZXJuIGludCBmaWVsZF9kZWNsX2NtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworZXh0ZXJuIHZvaWQgcmVzb3J0X3NvcnRlZF9maWVsZHMgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLAorCQkJCSAgdm9pZCAqKTsKK2V4dGVybiBib29sIGhhc19jX2xpbmthZ2UgKGNvbnN0X3RyZWUgZGVjbCk7CisMCisvKiBTd2l0Y2hlcyBjb21tb24gdG8gdGhlIEMgZnJvbnQgZW5kcy4gICovCisKKy8qIE5vbnplcm8gbWVhbnMgZG9uJ3Qgb3V0cHV0IGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uLiAgKi8KKworZXh0ZXJuIGNoYXIgZmxhZ19ub19saW5lX2NvbW1hbmRzOworCisvKiBOb256ZXJvIGNhdXNlcyAtRSBvdXRwdXQgbm90IHRvIGJlIGRvbmUsIGJ1dCBkaXJlY3RpdmVzIHN1Y2ggYXMKKyAgICNkZWZpbmUgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cyBhcmUgc3RpbGwgb2JleWVkLiAgKi8KKworZXh0ZXJuIGNoYXIgZmxhZ19ub19vdXRwdXQ7CisKKy8qIE5vbnplcm8gbWVhbnMgZHVtcCBtYWNyb3MgaW4gc29tZSBmYXNoaW9uOyBjb250YWlucyB0aGUgJ0QnLCAnTScsCisgICAnTicgb3IgJ1UnIG9mIHRoZSBjb21tYW5kIGxpbmUgc3dpdGNoLiAgKi8KKworZXh0ZXJuIGNoYXIgZmxhZ19kdW1wX21hY3JvczsKKworLyogTm9uemVybyBtZWFucyBwYXNzICNpbmNsdWRlIGxpbmVzIHRocm91Z2ggdG8gdGhlIG91dHB1dC4gICovCisKK2V4dGVybiBjaGFyIGZsYWdfZHVtcF9pbmNsdWRlczsKKworLyogTm9uemVybyBtZWFucyBwcm9jZXNzIFBDSCBmaWxlcyB3aGlsZSBwcmVwcm9jZXNzaW5nLiAgKi8KKworZXh0ZXJuIGJvb2wgZmxhZ19wY2hfcHJlcHJvY2VzczsKKworLyogVGhlIGZpbGUgbmFtZSB0byB3aGljaCB3ZSBzaG91bGQgd3JpdGUgYSBwcmVjb21waWxlZCBoZWFkZXIsIG9yCisgICBOVUxMIGlmIG5vIGhlYWRlciB3aWxsIGJlIHdyaXR0ZW4gaW4gdGhpcyBjb21waWxlLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnBjaF9maWxlOworCisvKiBOb256ZXJvIGlmIGFuIElTTyBzdGFuZGFyZCB3YXMgc2VsZWN0ZWQuICBJdCByZWplY3RzIG1hY3JvcyBpbiB0aGUKKyAgIHVzZXIncyBuYW1lc3BhY2UuICAqLworCitleHRlcm4gaW50IGZsYWdfaXNvOworCisvKiBDL09iakMgbGFuZ3VhZ2Ugb3B0aW9uIHZhcmlhYmxlcy4gICovCisKKworLyogTm9uemVybyBtZWFucyBhbGxvdyB0eXBlIG1pc21hdGNoZXMgaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbnM7CisgICBqdXN0IG1ha2UgdGhlaXIgdmFsdWVzIGB2b2lkJy4gICovCisKK2V4dGVybiBpbnQgZmxhZ19jb25kX21pc21hdGNoOworCisvKiBOb256ZXJvIG1lYW5zIGVuYWJsZSBDODkgQW1lbmRtZW50IDEgZmVhdHVyZXMuICAqLworCitleHRlcm4gaW50IGZsYWdfaXNvYzk0OworCisvKiBOb256ZXJvIG1lYW5zIHVzZSB0aGUgSVNPIEM5OSAob3IgQzExKSBkaWFsZWN0IG9mIEMuICAqLworCitleHRlcm4gaW50IGZsYWdfaXNvYzk5OworCisvKiBOb256ZXJvIG1lYW5zIHVzZSB0aGUgSVNPIEMxMSBkaWFsZWN0IG9mIEMuICAqLworCitleHRlcm4gaW50IGZsYWdfaXNvYzExOworCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgd2UgaGF2ZSBidWlsdGluIGZ1bmN0aW9ucywgYW5kIG1haW4gaXMgYW4gaW50LiAgKi8KKworZXh0ZXJuIGludCBmbGFnX2hvc3RlZDsKKworLyogT2JqQyBsYW5ndWFnZSBvcHRpb24gdmFyaWFibGVzLiAgKi8KKworCisvKiBUZWxscyB0aGUgY29tcGlsZXIgdGhhdCB0aGlzIGlzIGEgc3BlY2lhbCBydW4uICBEbyBub3QgcGVyZm9ybSBhbnkKKyAgIGNvbXBpbGluZywgaW5zdGVhZCB3ZSBhcmUgdG8gdGVzdCBzb21lIHBsYXRmb3JtIGRlcGVuZGVudCBmZWF0dXJlcworICAgYW5kIG91dHB1dCBhIEMgaGVhZGVyIGZpbGUgd2l0aCBhcHByb3ByaWF0ZSBkZWZpbml0aW9ucy4gICovCisKK2V4dGVybiBpbnQgcHJpbnRfc3RydWN0X3ZhbHVlczsKKworLyogVGVsbHMgdGhlIGNvbXBpbGVyIHdoYXQgaXMgdGhlIGNvbnN0YW50IHN0cmluZyBjbGFzcyBmb3IgT2JqQy4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdGFudF9zdHJpbmdfY2xhc3NfbmFtZTsKKworCisvKiBDKysgbGFuZ3VhZ2Ugb3B0aW9uIHZhcmlhYmxlcy4gICovCisKKworLyogTm9uemVybyBtZWFucyBnZW5lcmF0ZSBzZXBhcmF0ZSBpbnN0YW50aWF0aW9uIGNvbnRyb2wgZmlsZXMgYW5kCisgICBqdWdnbGUgdGhlbSBhdCBsaW5rIHRpbWUuICAqLworCitleHRlcm4gaW50IGZsYWdfdXNlX3JlcG9zaXRvcnk7CisKKy8qIFRoZSBzdXBwb3J0ZWQgQysrIGRpYWxlY3RzLiAgKi8KKworZW51bSBjeHhfZGlhbGVjdCB7CisgIC8qIEMrKzk4IHdpdGggVEMxICAqLworICBjeHg5OCwKKyAgY3h4MDMgPSBjeHg5OCwKKyAgLyogQysrMTEgICovCisgIGN4eDB4LAorICBjeHgxMSA9IGN4eDB4LAorICAvKiBDKysxeSAoQysrMTc/KSAqLworICBjeHgxeQorfTsKKworLyogVGhlIEMrKyBkaWFsZWN0IGJlaW5nIHVzZWQuIEMrKzk4IGlzIHRoZSBkZWZhdWx0LiAgKi8KK2V4dGVybiBlbnVtIGN4eF9kaWFsZWN0IGN4eF9kaWFsZWN0OworCisvKiBNYXhpbXVtIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gZGVwdGguICBUaGlzIGxpbWl0IGlzIHJhdGhlcgorICAgYXJiaXRyYXJ5LCBidXQgaXQgZXhpc3RzIHRvIGxpbWl0IHRoZSB0aW1lIGl0IHRha2VzIHRvIG5vdGljZQorICAgZXhjZXNzaXZlbHkgcmVjdXJzaXZlIHRlbXBsYXRlIGluc3RhbnRpYXRpb25zLiAgKi8KKworZXh0ZXJuIGludCBtYXhfdGluc3RfZGVwdGg7CisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGlzc3VlIHdhcm5pbmdzIGFib3V0IHByb2JsZW1zIHRoYXQKKyAgIG9jY3VyIHdoZW4gdGhlIGNvZGUgaXMgZXhlY3V0ZWQsIGJlY2F1c2UgdGhlIGNvZGUgYmVpbmcgcHJvY2Vzc2VkCisgICBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgZXhlY3V0ZWQuICBUaGlzIGlzIHNldCBkdXJpbmcgcGFyc2luZy4gIFRoaXMKKyAgIGlzIHVzZWQgZm9yIGNhc2VzIGxpa2Ugc2l6ZW9mKCkgYW5kICIwID8gYSA6IGIiLiAgVGhpcyBpcyBhIGNvdW50LAorICAgbm90IGEgYm9vbCwgYmVjYXVzZSB1bmV4ZWN1dGVkIGV4cHJlc3Npb25zIGNhbiBuZXN0LiAgKi8KKworZXh0ZXJuIGludCBjX2luaGliaXRfZXZhbHVhdGlvbl93YXJuaW5nczsKKworLyogV2hldGhlciBsZXhpbmcgaGFzIGJlZW4gY29tcGxldGVkLCBzbyBzdWJzZXF1ZW50IHByZXByb2Nlc3NvcgorICAgZXJyb3JzIHNob3VsZCB1c2UgdGhlIGNvbXBpbGVyJ3MgaW5wdXRfbG9jYXRpb24uICAqLworCitleHRlcm4gYm9vbCBkb25lX2xleGluZzsKKworLyogQyB0eXBlcyBhcmUgcGFydGl0aW9uZWQgaW50byB0aHJlZSBzdWJzZXRzOiBvYmplY3QsIGZ1bmN0aW9uLCBhbmQKKyAgIGluY29tcGxldGUgdHlwZXMuICAqLworI2RlZmluZSBDX1RZUEVfT0JKRUNUX1AodHlwZSkgXAorICAoVFJFRV9DT0RFICh0eXBlKSAhPSBGVU5DVElPTl9UWVBFICYmIFRZUEVfU0laRSAodHlwZSkpCisKKyNkZWZpbmUgQ19UWVBFX0lOQ09NUExFVEVfUCh0eXBlKSBcCisgIChUUkVFX0NPREUgKHR5cGUpICE9IEZVTkNUSU9OX1RZUEUgJiYgVFlQRV9TSVpFICh0eXBlKSA9PSAwKQorCisjZGVmaW5lIENfVFlQRV9GVU5DVElPTl9QKHR5cGUpIFwKKyAgKFRSRUVfQ09ERSAodHlwZSkgPT0gRlVOQ1RJT05fVFlQRSkKKworLyogRm9yIGNvbnZlbmllbmNlIHdlIGRlZmluZSBhIHNpbmdsZSBtYWNybyB0byBpZGVudGlmeSB0aGUgY2xhc3Mgb2YKKyAgIG9iamVjdCBvciBpbmNvbXBsZXRlIHR5cGVzLiAgKi8KKyNkZWZpbmUgQ19UWVBFX09CSkVDVF9PUl9JTkNPTVBMRVRFX1AodHlwZSkgXAorICAoIUNfVFlQRV9GVU5DVElPTl9QICh0eXBlKSkKKworc3RydWN0IHZpc2liaWxpdHlfZmxhZ3MKK3sKKyAgdW5zaWduZWQgaW5wcmFnbWEgOiAxOwkvKiBUcnVlIHdoZW4gaW4gI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eS4gICovCisgIHVuc2lnbmVkIGlubGluZXNfaGlkZGVuIDogMTsJLyogVHJ1ZSB3aGVuIC1maW5saW5lc2hpZGRlbiBpbiBlZmZlY3QuICAqLworfTsKKworLyogR2xvYmFsIHZpc2liaWxpdHkgb3B0aW9ucy4gICovCitleHRlcm4gc3RydWN0IHZpc2liaWxpdHlfZmxhZ3MgdmlzaWJpbGl0eV9vcHRpb25zOworCisvKiBBdHRyaWJ1dGUgdGFibGUgY29tbW9uIHRvIHRoZSBDIGZyb250IGVuZHMuICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBjX2NvbW1vbl9hdHRyaWJ1dGVfdGFibGVbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgY19jb21tb25fZm9ybWF0X2F0dHJpYnV0ZV90YWJsZVtdOworCisvKiBQb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGxhemlseSBnZW5lcmF0ZSB0aGUgVkFSX0RFQ0wgZm9yIF9fRlVOQ1RJT05fXyBldGMuCisgICBJRCBpcyB0aGUgaWRlbnRpZmllciB0byB1c2UsIE5BTUUgaXMgdGhlIHN0cmluZy4KKyAgIFRZUEVfREVQIGluZGljYXRlcyB3aGV0aGVyIGl0IGRlcGVuZHMgb24gdHlwZSBvZiB0aGUgZnVuY3Rpb24gb3Igbm90CisgICAoaS5lLiBfX1BSRVRUWV9GVU5DVElPTl9fKS4gICovCisKK2V4dGVybiB0cmVlICgqbWFrZV9mbmFtZV9kZWNsKSAobG9jYXRpb25fdCwgdHJlZSwgaW50KTsKKworLyogSW4gYy1kZWNsLmMgYW5kIGNwL3RyZWUuYy4gIEZJWE1FLiAgKi8KK2V4dGVybiB2b2lkIGNfcmVnaXN0ZXJfYWRkcl9zcGFjZSAoY29uc3QgY2hhciAqc3RyLCBhZGRyX3NwYWNlX3QgYXMpOworCisvKiBJbiBjLWNvbW1vbi5jLiAgKi8KK2V4dGVybiBib29sIGluX2xhdGVfYmluYXJ5X29wOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNfYWRkcl9zcGFjZV9uYW1lIChhZGRyX3NwYWNlX3QgYXMpOworZXh0ZXJuIHRyZWUgaWRlbnRpZmllcl9nbG9iYWxfdmFsdWUgKHRyZWUpOworZXh0ZXJuIHRyZWUgY19saW5rYWdlX2JpbmRpbmdzICh0cmVlKTsKK2V4dGVybiB2b2lkIHJlY29yZF9idWlsdGluX3R5cGUgKGVudW0gcmlkLCBjb25zdCBjaGFyICosIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfdm9pZF9saXN0X25vZGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhcnRfZm5hbWVfZGVjbHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZmluaXNoX2ZuYW1lX2RlY2xzICh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpmbmFtZV9hc19zdHJpbmcgKGludCk7CitleHRlcm4gdHJlZSBmbmFtZV9kZWNsIChsb2NhdGlvbl90LCB1bnNpZ25lZCwgdHJlZSk7CisKK2V4dGVybiBpbnQgY2hlY2tfdXNlcl9hbGlnbm1lbnQgKGNvbnN0X3RyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgY2hlY2tfZnVuY3Rpb25fYXJndW1lbnRzIChjb25zdF90cmVlLCBpbnQsIHRyZWUgKik7CitleHRlcm4gdm9pZCBjaGVja19mdW5jdGlvbl9hcmd1bWVudHNfcmVjdXJzZSAodm9pZCAoKikKKwkJCQkJICAgICAgKHZvaWQgKiwgdHJlZSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpLAorCQkJCQkgICAgICB2b2lkICosIHRyZWUsCisJCQkJCSAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIGJvb2wgY2hlY2tfYnVpbHRpbl9mdW5jdGlvbl9hcmd1bWVudHMgKHRyZWUsIGludCwgdHJlZSAqKTsKK2V4dGVybiB2b2lkIGNoZWNrX2Z1bmN0aW9uX2Zvcm1hdCAodHJlZSwgaW50LCB0cmVlICopOworZXh0ZXJuIHRyZWUgaGFuZGxlX2Zvcm1hdF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworZXh0ZXJuIHRyZWUgaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK2V4dGVybiBib29sIGF0dHJpYnV0ZV90YWtlc19pZGVudGlmaWVyX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgY19jb21tb25faGFuZGxlX29wdGlvbiAoc2l6ZV90LCBjb25zdCBjaGFyICosIGludCwgaW50LCBsb2NhdGlvbl90LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJzICopOworZXh0ZXJuIGJvb2wgZGVmYXVsdF9oYW5kbGVfY19vcHRpb24gKHNpemVfdCwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHRyZWUgY19jb21tb25fdHlwZV9mb3JfbW9kZSAoZW51bSBtYWNoaW5lX21vZGUsIGludCk7CitleHRlcm4gdHJlZSBjX2NvbW1vbl90eXBlX2Zvcl9zaXplICh1bnNpZ25lZCBpbnQsIGludCk7CitleHRlcm4gdHJlZSBjX2NvbW1vbl9maXhlZF9wb2ludF90eXBlX2Zvcl9zaXplICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKKwkJCQkJCWludCwgaW50KTsKK2V4dGVybiB0cmVlIGNfY29tbW9uX3Vuc2lnbmVkX3R5cGUgKHRyZWUpOworZXh0ZXJuIHRyZWUgY19jb21tb25fc2lnbmVkX3R5cGUgKHRyZWUpOworZXh0ZXJuIHRyZWUgY19jb21tb25fc2lnbmVkX29yX3Vuc2lnbmVkX3R5cGUgKGludCwgdHJlZSk7CitleHRlcm4gdm9pZCBjX2NvbW1vbl9pbml0X3RzICh2b2lkKTsKK2V4dGVybiB0cmVlIGNfYnVpbGRfYml0ZmllbGRfaW50ZWdlcl90eXBlICh1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBpbnQpOworZXh0ZXJuIGJvb2wgdW5zYWZlX2NvbnZlcnNpb25fcCAodHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gYm9vbCBkZWNsX3dpdGhfbm9ubnVsbF9hZGRyX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgY19mdWxseV9mb2xkICh0cmVlLCBib29sLCBib29sICopOworZXh0ZXJuIHRyZWUgZGVjbF9jb25zdGFudF92YWx1ZV9mb3Jfb3B0aW1pemF0aW9uICh0cmVlKTsKK2V4dGVybiB0cmVlIGNfd3JhcF9tYXliZV9jb25zdCAodHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBjX3NhdmVfZXhwciAodHJlZSk7CitleHRlcm4gdHJlZSBjX2NvbW1vbl90cnV0aHZhbHVlX2NvbnZlcnNpb24gKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHZvaWQgY19hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wgKGludCwgdHJlZSk7CitleHRlcm4gdHJlZSBjX3NpemVvZl9vcl9hbGlnbm9mX3R5cGUgKGxvY2F0aW9uX3QsIHRyZWUsIGJvb2wsIGludCk7CitleHRlcm4gdHJlZSBjX2FsaWdub2ZfZXhwciAobG9jYXRpb25fdCwgdHJlZSk7CisvKiBQcmludCBhbiBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIG9wZXJhbmRzIHRvIGFyaXRoIG9wZXJhdGlvbiBDT0RFLgorICAgTk9QX0VYUFIgaXMgdXNlZCBhcyBhIHNwZWNpYWwgY2FzZSAoc2VlIHRydXRodmFsdWVfY29udmVyc2lvbikuICAqLworZXh0ZXJuIHZvaWQgYmluYXJ5X29wX2Vycm9yIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaXhfc3RyaW5nX3R5cGUgKHRyZWUpOworZXh0ZXJuIHZvaWQgY29uc3RhbnRfZXhwcmVzc2lvbl93YXJuaW5nICh0cmVlKTsKK2V4dGVybiB2b2lkIGNvbnN0YW50X2V4cHJlc3Npb25fZXJyb3IgKHRyZWUpOworZXh0ZXJuIGJvb2wgc3RyaWN0X2FsaWFzaW5nX3dhcm5pbmcgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgc2l6ZW9mX3BvaW50ZXJfbWVtYWNjZXNzX3dhcm5pbmcgKGxvY2F0aW9uX3QgKiwgdHJlZSwKKwkJCQkJICAgICAgdmVjPHRyZWUsIHZhX2djPiAqLCB0cmVlICosCisJCQkJCSAgICAgIGJvb2wgKCopICh0cmVlLCB0cmVlKSk7CitleHRlcm4gdm9pZCB3YXJuaW5nc19mb3JfY29udmVydF9hbmRfY2hlY2sgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29udmVydF9hbmRfY2hlY2sgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgb3ZlcmZsb3dfd2FybmluZyAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gYm9vbCB3YXJuX2lmX3VudXNlZF92YWx1ZSAoY29uc3RfdHJlZSwgbG9jYXRpb25fdCk7CitleHRlcm4gdm9pZCB3YXJuX2xvZ2ljYWxfb3BlcmF0b3IgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorCQkJCSAgIGVudW0gdHJlZV9jb2RlLCB0cmVlLCBlbnVtIHRyZWVfY29kZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19tYWluX3BhcmFtZXRlcl90eXBlcyAodHJlZSBkZWNsKTsKK2V4dGVybiBib29sIGNfZGV0ZXJtaW5lX3Zpc2liaWxpdHkgKHRyZWUpOworZXh0ZXJuIGJvb2wgc2FtZV9zY2FsYXJfdHlwZV9pZ25vcmluZ19zaWduZWRuZXNzICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG1hcmtfdmFsaWRfbG9jYXRpb25fZm9yX3N0ZGNfcHJhZ21hIChib29sKTsKK2V4dGVybiBib29sIHZhbGlkX2xvY2F0aW9uX2Zvcl9zdGRjX3ByYWdtYV9wICh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9mbG9hdF9jb25zdF9kZWNpbWFsNjQgKHZvaWQpOworZXh0ZXJuIHZvaWQgY2xlYXJfZmxvYXRfY29uc3RfZGVjaW1hbDY0ICh2b2lkKTsKK2V4dGVybiBib29sIGZsb2F0X2NvbnN0X2RlY2ltYWw2NF9wICh2b2lkKTsKKworZXh0ZXJuIGJvb2wga2V5d29yZF9iZWdpbnNfdHlwZV9zcGVjaWZpZXIgKGVudW0gcmlkKTsKK2V4dGVybiBib29sIGtleXdvcmRfaXNfc3RvcmFnZV9jbGFzc19zcGVjaWZpZXIgKGVudW0gcmlkKTsKK2V4dGVybiBib29sIGtleXdvcmRfaXNfdHlwZV9xdWFsaWZpZXIgKGVudW0gcmlkKTsKK2V4dGVybiBib29sIGtleXdvcmRfaXNfZGVjbF9zcGVjaWZpZXIgKGVudW0gcmlkKTsKK2V4dGVybiBib29sIGN4eF9mdW5kYW1lbnRhbF9hbGlnbm1lbnRfcCAodW5zaWduZWQpOworCisjZGVmaW5lIGNfc2l6ZW9mKExPQywgVCkgIGNfc2l6ZW9mX29yX2FsaWdub2ZfdHlwZSAoTE9DLCBULCB0cnVlLCAxKQorI2RlZmluZSBjX2FsaWdub2YoTE9DLCBUKSBjX3NpemVvZl9vcl9hbGlnbm9mX3R5cGUgKExPQywgVCwgZmFsc2UsIDEpCisKKy8qIFN1YnJvdXRpbmUgb2YgYnVpbGRfYmluYXJ5X29wLCB1c2VkIGZvciBjZXJ0YWluIG9wZXJhdGlvbnMuICAqLworZXh0ZXJuIHRyZWUgc2hvcnRlbl9iaW5hcnlfb3AgKHRyZWUgcmVzdWx0X3R5cGUsIHRyZWUgb3AwLCB0cmVlIG9wMSwgYm9vbCBiaXR3aXNlKTsKKworLyogU3Vicm91dGluZSBvZiBidWlsZF9iaW5hcnlfb3AsIHVzZWQgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucy4KKyAgIFNlZSBpZiB0aGUgb3BlcmFuZHMgaGF2ZSBib3RoIGJlZW4gY29udmVydGVkIGZyb20gc3Vid29yZCBpbnRlZ2VyIHR5cGVzCisgICBhbmQsIGlmIHNvLCBwZXJoYXBzIGNoYW5nZSB0aGVtIGJvdGggYmFjayB0byB0aGVpciBvcmlnaW5hbCB0eXBlLiAgKi8KK2V4dGVybiB0cmVlIHNob3J0ZW5fY29tcGFyZSAodHJlZSAqLCB0cmVlICosIHRyZWUgKiwgZW51bSB0cmVlX2NvZGUgKik7CisKK2V4dGVybiB0cmVlIHBvaW50ZXJfaW50X3N1bSAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpOworCisvKiBBZGQgcXVhbGlmaWVycyB0byBhIHR5cGUsIGluIHRoZSBmYXNoaW9uIGZvciBDLiAgKi8KK2V4dGVybiB0cmVlIGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUgKHRyZWUsIGludCk7CisKKy8qIEJ1aWxkIHRyZWUgbm9kZXMgYW5kIGJ1aWx0aW4gZnVuY3Rpb25zIGNvbW1vbiB0byBib3RoIEMgYW5kIEMrKyBsYW5ndWFnZQorICAgZnJvbnRlbmRzLiAgKi8KK2V4dGVybiB2b2lkIGNfY29tbW9uX25vZGVzX2FuZF9idWlsdGlucyAodm9pZCk7CisKK2V4dGVybiB2b2lkIGRpc2FibGVfYnVpbHRpbl9mdW5jdGlvbiAoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIHZvaWQgc2V0X2NvbXBvdW5kX2xpdGVyYWxfbmFtZSAodHJlZSBkZWNsKTsKKworZXh0ZXJuIHRyZWUgYnVpbGRfdmFfYXJnIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBjX2ZhbWlseV9sYW5nX21hc2s7CitleHRlcm4gdW5zaWduZWQgaW50IGNfY29tbW9uX29wdGlvbl9sYW5nX21hc2sgKHZvaWQpOworZXh0ZXJuIHZvaWQgY19jb21tb25faW5pdGlhbGl6ZV9kaWFnbm9zdGljcyAoZGlhZ25vc3RpY19jb250ZXh0ICopOworZXh0ZXJuIGJvb2wgY19jb21tb25fY29tcGxhaW5fd3JvbmdfbGFuZ19wIChjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uICopOworZXh0ZXJuIHZvaWQgY19jb21tb25faW5pdF9vcHRpb25zX3N0cnVjdCAoc3RydWN0IGdjY19vcHRpb25zICopOworZXh0ZXJuIHZvaWQgY19jb21tb25faW5pdF9vcHRpb25zICh1bnNpZ25lZCBpbnQsIHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqKTsKK2V4dGVybiBib29sIGNfY29tbW9uX3Bvc3Rfb3B0aW9ucyAoY29uc3QgY2hhciAqKik7CitleHRlcm4gYm9vbCBjX2NvbW1vbl9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIGNfY29tbW9uX2ZpbmlzaCAodm9pZCk7CitleHRlcm4gdm9pZCBjX2NvbW1vbl9wYXJzZV9maWxlICh2b2lkKTsKK2V4dGVybiBhbGlhc19zZXRfdHlwZSBjX2NvbW1vbl9nZXRfYWxpYXNfc2V0ICh0cmVlKTsKK2V4dGVybiB2b2lkIGNfcmVnaXN0ZXJfYnVpbHRpbl90eXBlICh0cmVlLCBjb25zdCBjaGFyKik7CitleHRlcm4gYm9vbCBjX3Byb21vdGluZ19pbnRlZ2VyX3R5cGVfcCAoY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHNlbGZfcHJvbW90aW5nX2FyZ3NfcCAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBzdHJpcF9wb2ludGVyX29wZXJhdG9yICh0cmVlKTsKK2V4dGVybiB0cmVlIHN0cmlwX3BvaW50ZXJfb3JfYXJyYXlfdHlwZXMgKHRyZWUpOworZXh0ZXJuIEhPU1RfV0lERV9JTlQgY19jb21tb25fdG9fdGFyZ2V0X2NoYXJzZXQgKEhPU1RfV0lERV9JTlQpOworCisvKiBUaGlzIGlzIHRoZSBiYXNpYyBwYXJzaW5nIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiB2b2lkIGNfcGFyc2VfZmlsZSAodm9pZCk7CisKK2V4dGVybiB2b2lkIHdhcm5fZm9yX29taXR0ZWRfY29uZG9wIChsb2NhdGlvbl90LCB0cmVlKTsKKworLyogVGhlc2UgbWFjcm9zIHByb3ZpZGUgY29udmVuaWVudCBhY2Nlc3MgdG8gdGhlIHZhcmlvdXMgX1NUTVQgbm9kZXMuICAqLworCisvKiBOb256ZXJvIGlmIGEgZ2l2ZW4gU1RBVEVNRU5UX0xJU1QgcmVwcmVzZW50cyB0aGUgb3V0ZXJtb3N0IGJpbmRpbmcKKyAgIGlmIGEgc3RhdGVtZW50IGV4cHJlc3Npb24uICAqLworI2RlZmluZSBTVEFURU1FTlRfTElTVF9TVE1UX0VYUFIoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18xIChTVEFURU1FTlRfTElTVF9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgYSBsYWJlbCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc3RhdGVtZW50IGxpc3QuICAqLworI2RlZmluZSBTVEFURU1FTlRfTElTVF9IQVNfTEFCRUwoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18zIChTVEFURU1FTlRfTElTVF9DSEVDSyAoTk9ERSkpCisKKy8qIENfTUFZQkVfQ09OU1RfRVhQUiBhY2Nlc3NvcnMuICAqLworI2RlZmluZSBDX01BWUJFX0NPTlNUX0VYUFJfUFJFKE5PREUpCQkJXAorICBUUkVFX09QRVJBTkQgKENfTUFZQkVfQ09OU1RfRVhQUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIENfTUFZQkVfQ09OU1RfRVhQUl9FWFBSKE5PREUpCQkJXAorICBUUkVFX09QRVJBTkQgKENfTUFZQkVfQ09OU1RfRVhQUl9DSEVDSyAoTk9ERSksIDEpCisjZGVmaW5lIENfTUFZQkVfQ09OU1RfRVhQUl9JTlRfT1BFUkFORFMoTk9ERSkJCVwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoQ19NQVlCRV9DT05TVF9FWFBSX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgQ19NQVlCRV9DT05TVF9FWFBSX05PTl9DT05TVChOT0RFKQkJXAorICBUUkVFX0xBTkdfRkxBR18xIChDX01BWUJFX0NPTlNUX0VYUFJfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBFWFBSX0lOVF9DT05TVF9PUEVSQU5EUyhFWFBSKQkJCVwKKyAgKElOVEVHUkFMX1RZUEVfUCAoVFJFRV9UWVBFIChFWFBSKSkJCQlcCisgICAmJiAoVFJFRV9DT0RFIChFWFBSKSA9PSBJTlRFR0VSX0NTVAkJCVwKKyAgICAgICB8fCAoVFJFRV9DT0RFIChFWFBSKSA9PSBDX01BWUJFX0NPTlNUX0VYUFIJXAorCSAgICYmIENfTUFZQkVfQ09OU1RfRVhQUl9JTlRfT1BFUkFORFMgKEVYUFIpKSkpCisKKy8qIEluIGEgRklFTERfREVDTCwgbm9uemVybyBpZiB0aGUgZGVjbCB3YXMgb3JpZ2luYWxseSBhIGJpdGZpZWxkLiAgKi8KKyNkZWZpbmUgREVDTF9DX0JJVF9GSUVMRChOT0RFKSBcCisgIChERUNMX0xBTkdfRkxBR180IChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKSkgPT0gMSkKKyNkZWZpbmUgU0VUX0RFQ0xfQ19CSVRfRklFTEQoTk9ERSkgXAorICAoREVDTF9MQU5HX0ZMQUdfNCAoRklFTERfREVDTF9DSEVDSyAoTk9ERSkpID0gMSkKKyNkZWZpbmUgQ0xFQVJfREVDTF9DX0JJVF9GSUVMRChOT0RFKSBcCisgIChERUNMX0xBTkdfRkxBR180IChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKSkgPSAwKQorCitleHRlcm4gdHJlZSBkb19jYXNlIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3N0bXQgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCAuLi4pOworZXh0ZXJuIHRyZWUgYnVpbGRfcmVhbF9pbWFnX2V4cHIgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlKTsKKworLyogVGhlc2UgZnVuY3Rpb25zIG11c3QgYmUgZGVmaW5lZCBieSBlYWNoIGZyb250LWVuZCB3aGljaCBpbXBsZW1lbnRzCisgICBhIHZhcmlhbnQgb2YgdGhlIEMgbGFuZ3VhZ2UuICBUaGV5IGFyZSB1c2VkIGluIGMtY29tbW9uLmMuICAqLworCitleHRlcm4gdHJlZSBidWlsZF91bmFyeV9vcCAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBidWlsZF9iaW5hcnlfb3AgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgcGVyZm9ybV9pbnRlZ3JhbF9wcm9tb3Rpb25zICh0cmVlKTsKKworLyogVGhlc2UgZnVuY3Rpb25zIG11c3QgYmUgZGVmaW5lZCBieSBlYWNoIGZyb250LWVuZCB3aGljaCBpbXBsZW1lbnRzCisgICBhIHZhcmlhbnQgb2YgdGhlIEMgbGFuZ3VhZ2UuICBUaGV5IGFyZSB1c2VkIGJ5IHBvcnQgZmlsZXMuICAqLworCitleHRlcm4gdHJlZSBkZWZhdWx0X2NvbnZlcnNpb24gKHRyZWUpOworCisvKiBHaXZlbiB0d28gaW50ZWdlciBvciByZWFsIHR5cGVzLCByZXR1cm4gdGhlIHR5cGUgZm9yIHRoZWlyIHN1bS4KKyAgIEdpdmVuIHR3byBjb21wYXRpYmxlIEFOU0kgQyB0eXBlcywgcmV0dXJucyB0aGUgbWVyZ2VkIHR5cGUuICAqLworCitleHRlcm4gdHJlZSBjb21tb25fdHlwZSAodHJlZSwgdHJlZSk7CisKK2V4dGVybiB0cmVlIGRlY2xfY29uc3RhbnRfdmFsdWUgKHRyZWUpOworCisvKiBIYW5kbGUgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb2YgYm9vbGVhbiB0eXBlcy4gICovCitleHRlcm4gdHJlZSBib29sZWFuX2luY3JlbWVudCAoZW51bSB0cmVlX2NvZGUsIHRyZWUpOworCitleHRlcm4gaW50IGNhc2VfY29tcGFyZSAoc3BsYXlfdHJlZV9rZXksIHNwbGF5X3RyZWVfa2V5KTsKKworZXh0ZXJuIHRyZWUgY19hZGRfY2FzZV9sYWJlbCAobG9jYXRpb25fdCwgc3BsYXlfdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CisKK2V4dGVybiB2b2lkIGNfZG9fc3dpdGNoX3dhcm5pbmdzIChzcGxheV90cmVlLCBsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKKworZXh0ZXJuIHRyZWUgYnVpbGRfZnVuY3Rpb25fY2FsbCAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CisKK2V4dGVybiB0cmVlIGJ1aWxkX2Z1bmN0aW9uX2NhbGxfdmVjIChsb2NhdGlvbl90LCB0cmVlLCB2ZWM8dHJlZSwgdmFfZ2M+ICosCisJCQkJICAgICB2ZWM8dHJlZSwgdmFfZ2M+ICopOworCitleHRlcm4gdHJlZSByZXNvbHZlX292ZXJsb2FkZWRfYnVpbHRpbiAobG9jYXRpb25fdCwgdHJlZSwgdmVjPHRyZWUsIHZhX2djPiAqKTsKKworZXh0ZXJuIHRyZWUgZmluaXNoX2xhYmVsX2FkZHJlc3NfZXhwciAodHJlZSwgbG9jYXRpb25fdCk7CisKKy8qIFNhbWUgZnVuY3Rpb24gcHJvdG90eXBlLCBidXQgdGhlIEMgYW5kIEMrKyBmcm9udCBlbmRzIGhhdmUKKyAgIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuICBVc2VkIGluIGMtY29tbW9uLmMuICAqLworZXh0ZXJuIHRyZWUgbG9va3VwX2xhYmVsICh0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9uYW1lICh0cmVlKTsKK2V4dGVybiBib29sIGx2YWx1ZV9wIChjb25zdF90cmVlKTsKKworZXh0ZXJuIGJvb2wgdmVjdG9yX3RhcmdldHNfY29udmVydGlibGVfcCAoY29uc3RfdHJlZSB0MSwgY29uc3RfdHJlZSB0Mik7CitleHRlcm4gYm9vbCB2ZWN0b3JfdHlwZXNfY29udmVydGlibGVfcCAoY29uc3RfdHJlZSB0MSwgY29uc3RfdHJlZSB0MiwgYm9vbCBlbWl0X2xheF9ub3RlKTsKK2V4dGVybiB0cmVlIGNfYnVpbGRfdmVjX3Blcm1fZXhwciAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSk7CisKK2V4dGVybiBydHggY19leHBhbmRfZXhwciAodHJlZSwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50LCBydHggKik7CisKK2V4dGVybiB2b2lkIGluaXRfY19sZXggKHZvaWQpOworCitleHRlcm4gdm9pZCBjX2NwcF9idWlsdGlucyAoY3BwX3JlYWRlciAqKTsKK2V4dGVybiB2b2lkIGNfY3BwX2J1aWx0aW5zX29wdGltaXplX3ByYWdtYSAoY3BwX3JlYWRlciAqLCB0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIGNfY3BwX2Vycm9yIChjcHBfcmVhZGVyICosIGludCwgaW50LCBsb2NhdGlvbl90LCB1bnNpZ25lZCBpbnQsCisJCQkgY29uc3QgY2hhciAqLCB2YV9saXN0ICopCisgICAgIEFUVFJJQlVURV9HQ0NfRElBRyg2LDApOworCitleHRlcm4gYm9vbCBwYXJzZV9vcHRpbWl6ZV9vcHRpb25zICh0cmVlLCBib29sKTsKKworLyogUG9zaXRpdmUgaWYgYW4gaW1wbGljaXQgYGV4dGVybiAiQyInIHNjb3BlIGhhcyBqdXN0IGJlZW4gZW50ZXJlZDsKKyAgIG5lZ2F0aXZlIGlmIHN1Y2ggYSBzY29wZSBoYXMganVzdCBiZWVuIGV4aXRlZC4gICovCitleHRlcm4gR1RZKCgpKSBpbnQgcGVuZGluZ19sYW5nX2NoYW5nZTsKKworLyogSW5mb3JtYXRpb24gcmVjb3JkZWQgYWJvdXQgZWFjaCBmaWxlIGV4YW1pbmVkIGR1cmluZyBjb21waWxhdGlvbi4gICovCisKK3N0cnVjdCBjX2ZpbGVpbmZvCit7CisgIGludCB0aW1lOwkvKiBUaW1lIHNwZW50IGluIHRoZSBmaWxlLiAgKi8KKworICAvKiBGbGFncyB1c2VkIG9ubHkgYnkgQysrLgorICAgICBJTlRFUkZBQ0VfT05MWSBub256ZXJvIG1lYW5zIHRoYXQgd2UgYXJlIGluIGFuICJpbnRlcmZhY2UiIHNlY3Rpb24KKyAgICAgb2YgdGhlIGNvbXBpbGVyLiAgSU5URVJGQUNFX1VOS05PV04gbm9uemVybyBtZWFucyB3ZSBjYW5ub3QgdHJ1c3QKKyAgICAgdGhlIHZhbHVlIG9mIElOVEVSRkFDRV9PTkxZLiAgSWYgSU5URVJGQUNFX1VOS05PV04gaXMgemVybyBhbmQKKyAgICAgSU5URVJGQUNFX09OTFkgaXMgemVybywgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgcmVzcG9uc2libGUgZm9yCisgICAgIGV4cG9ydGluZyBkZWZpbml0aW9ucyB0aGF0IG90aGVycyBtaWdodCBuZWVkLiAgKi8KKyAgc2hvcnQgaW50ZXJmYWNlX29ubHk7CisgIHNob3J0IGludGVyZmFjZV91bmtub3duOworfTsKKworc3RydWN0IGNfZmlsZWluZm8gKmdldF9maWxlaW5mbyAoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGR1bXBfdGltZV9zdGF0aXN0aWNzICh2b2lkKTsKKworZXh0ZXJuIGJvb2wgY19kdW1wX3RyZWUgKHZvaWQgKiwgdHJlZSk7CisKK2V4dGVybiB2b2lkIHZlcmlmeV9zZXF1ZW5jZV9wb2ludHMgKHRyZWUpOworCitleHRlcm4gdHJlZSBmb2xkX29mZnNldG9mXzEgKHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9vZmZzZXRvZiAodHJlZSk7CisKKy8qIFBsYWNlcyB3aGVyZSBhbiBsdmFsdWUsIG9yIG1vZGlmaWFibGUgbHZhbHVlLCBtYXkgYmUgcmVxdWlyZWQuCisgICBVc2VkIHRvIHNlbGVjdCBkaWFnbm9zdGljIG1lc3NhZ2VzIGluIGx2YWx1ZV9lcnJvciBhbmQKKyAgIHJlYWRvbmx5X2Vycm9yLiAgKi8KK2VudW0gbHZhbHVlX3VzZSB7CisgIGx2X2Fzc2lnbiwKKyAgbHZfaW5jcmVtZW50LAorICBsdl9kZWNyZW1lbnQsCisgIGx2X2FkZHJlc3NvZiwKKyAgbHZfYXNtCit9OworCitleHRlcm4gdm9pZCByZWFkb25seV9lcnJvciAodHJlZSwgZW51bSBsdmFsdWVfdXNlKTsKK2V4dGVybiB2b2lkIGx2YWx1ZV9lcnJvciAobG9jYXRpb25fdCwgZW51bSBsdmFsdWVfdXNlKTsKK2V4dGVybiB2b2lkIGludmFsaWRfaW5kaXJlY3Rpb25fZXJyb3IgKGxvY2F0aW9uX3QsIHRyZWUsIHJlZl9vcGVyYXRvcik7CisKK2V4dGVybiBpbnQgY29tcGxldGVfYXJyYXlfdHlwZSAodHJlZSAqLCB0cmVlLCBib29sKTsKKworZXh0ZXJuIHRyZWUgYnVpbHRpbl90eXBlX2Zvcl9zaXplIChpbnQsIGJvb2wpOworCitleHRlcm4gdm9pZCBjX2NvbW1vbl9tYXJrX2FkZHJlc3NhYmxlX3ZlYyAodHJlZSk7CisKK2V4dGVybiB2b2lkIHdhcm5fYXJyYXlfc3Vic2NyaXB0X3dpdGhfdHlwZV9jaGFyICh0cmVlKTsKK2V4dGVybiB2b2lkIHdhcm5fYWJvdXRfcGFyZW50aGVzZXMgKGxvY2F0aW9uX3QsCisJCQkJICAgIGVudW0gdHJlZV9jb2RlLAorCQkJCSAgICBlbnVtIHRyZWVfY29kZSwgdHJlZSwKKwkJCQkgICAgZW51bSB0cmVlX2NvZGUsIHRyZWUpOworZXh0ZXJuIHZvaWQgd2Fybl9mb3JfdW51c2VkX2xhYmVsICh0cmVlIGxhYmVsKTsKK2V4dGVybiB2b2lkIHdhcm5fZm9yX2Rpdl9ieV96ZXJvIChsb2NhdGlvbl90LCB0cmVlIGRpdmlzb3IpOworZXh0ZXJuIHZvaWQgd2Fybl9mb3Jfc2lnbl9jb21wYXJlIChsb2NhdGlvbl90LAorCQkJCSAgIHRyZWUgb3JpZ19vcDAsIHRyZWUgb3JpZ19vcDEsCisJCQkJICAgdHJlZSBvcDAsIHRyZWUgb3AxLAorCQkJCSAgIHRyZWUgcmVzdWx0X3R5cGUsCisJCQkJICAgZW51bSB0cmVlX2NvZGUgcmVzdWx0Y29kZSk7CitleHRlcm4gdm9pZCBkb193YXJuX2RvdWJsZV9wcm9tb3Rpb24gKHRyZWUsIHRyZWUsIHRyZWUsIGNvbnN0IGNoYXIgKiwgCisJCQkJICAgICAgbG9jYXRpb25fdCk7CitleHRlcm4gdm9pZCBzZXRfdW5kZXJseWluZ190eXBlICh0cmVlKTsKK2V4dGVybiB2b2lkIHJlY29yZF9sb2NhbGx5X2RlZmluZWRfdHlwZWRlZiAodHJlZSk7CitleHRlcm4gdm9pZCBtYXliZV9yZWNvcmRfdHlwZWRlZl91c2UgKHRyZWUpOworZXh0ZXJuIHZvaWQgbWF5YmVfd2Fybl91bnVzZWRfbG9jYWxfdHlwZWRlZnMgKHZvaWQpOworZXh0ZXJuIHZlYzx0cmVlLCB2YV9nYz4gKm1ha2VfdHJlZV92ZWN0b3IgKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVsZWFzZV90cmVlX3ZlY3RvciAodmVjPHRyZWUsIHZhX2djPiAqKTsKK2V4dGVybiB2ZWM8dHJlZSwgdmFfZ2M+ICptYWtlX3RyZWVfdmVjdG9yX3NpbmdsZSAodHJlZSk7CitleHRlcm4gdmVjPHRyZWUsIHZhX2djPiAqbWFrZV90cmVlX3ZlY3Rvcl9mcm9tX2xpc3QgKHRyZWUpOworZXh0ZXJuIHZlYzx0cmVlLCB2YV9nYz4gKm1ha2VfdHJlZV92ZWN0b3JfY29weSAoY29uc3QgdmVjPHRyZWUsIHZhX2djPiAqKTsKKworLyogSW4gYy1naW1wbGlmeS5jICAqLworZXh0ZXJuIHZvaWQgY19nZW5lcmljaXplICh0cmVlKTsKK2V4dGVybiBpbnQgY19naW1wbGlmeV9leHByICh0cmVlICosIGdpbXBsZV9zZXEgKiwgZ2ltcGxlX3NlcSAqKTsKK2V4dGVybiB0cmVlIGNfYnVpbGRfYmluZF9leHByIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKKworLyogSW4gYy1wY2guYyAgKi8KK2V4dGVybiB2b2lkIHBjaF9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHBjaF9jcHBfc2F2ZV9zdGF0ZSAodm9pZCk7CitleHRlcm4gaW50IGNfY29tbW9uX3ZhbGlkX3BjaCAoY3BwX3JlYWRlciAqcGZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBmZCk7CitleHRlcm4gdm9pZCBjX2NvbW1vbl9yZWFkX3BjaCAoY3BwX3JlYWRlciAqcGZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBmZCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpvcmlnKTsKK2V4dGVybiB2b2lkIGNfY29tbW9uX3dyaXRlX3BjaCAodm9pZCk7CitleHRlcm4gdm9pZCBjX2NvbW1vbl9ub19tb3JlX3BjaCAodm9pZCk7CitleHRlcm4gdm9pZCBjX2NvbW1vbl9wY2hfcHJhZ21hIChjcHBfcmVhZGVyICpwZmlsZSwgY29uc3QgY2hhciAqKTsKKworLyogSW4gKi1jaGVja3N1bS5jICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBleGVjdXRhYmxlX2NoZWNrc3VtWzE2XTsKKworLyogSW4gYy1jcHBidWlsdGluLmMgICovCitleHRlcm4gdm9pZCBidWlsdGluX2RlZmluZV9zdGQgKGNvbnN0IGNoYXIgKm1hY3JvKTsKK2V4dGVybiB2b2lkIGJ1aWx0aW5fZGVmaW5lX3dpdGhfdmFsdWUgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgY19zdGRkZWZfY3BwX2J1aWx0aW5zICh2b2lkKTsKK2V4dGVybiB2b2lkIGZlX2ZpbGVfY2hhbmdlIChjb25zdCBzdHJ1Y3QgbGluZV9tYXAgKik7CitleHRlcm4gdm9pZCBjX3BhcnNlX2Vycm9yIChjb25zdCBjaGFyICosIGVudW0gY3BwX3R0eXBlLCB0cmVlLCB1bnNpZ25lZCBjaGFyKTsKKworLyogSW4gYy1wcG91dHB1dC5jICAqLworZXh0ZXJuIHZvaWQgaW5pdF9wcF9vdXRwdXQgKEZJTEUgKik7CitleHRlcm4gdm9pZCBwcmVwcm9jZXNzX2ZpbGUgKGNwcF9yZWFkZXIgKik7CitleHRlcm4gdm9pZCBwcF9maWxlX2NoYW5nZSAoY29uc3Qgc3RydWN0IGxpbmVfbWFwICopOworZXh0ZXJuIHZvaWQgcHBfZGlyX2NoYW5nZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGJvb2wgY2hlY2tfbWlzc2luZ19mb3JtYXRfYXR0cmlidXRlICh0cmVlLCB0cmVlKTsKKworLyogSW4gYy1vbXAuYyAgKi8KK2V4dGVybiB0cmVlIGNfZmluaXNoX29tcF9tYXN0ZXIgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgY19maW5pc2hfb21wX2NyaXRpY2FsIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNfZmluaXNoX29tcF9vcmRlcmVkIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB2b2lkIGNfZmluaXNoX29tcF9iYXJyaWVyIChsb2NhdGlvbl90KTsKK2V4dGVybiB0cmVlIGNfZmluaXNoX29tcF9hdG9taWMgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCBlbnVtIHRyZWVfY29kZSwKKwkJCQkgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjX2ZpbmlzaF9vbXBfZmx1c2ggKGxvY2F0aW9uX3QpOworZXh0ZXJuIHZvaWQgY19maW5pc2hfb21wX3Rhc2t3YWl0IChsb2NhdGlvbl90KTsKK2V4dGVybiB2b2lkIGNfZmluaXNoX29tcF90YXNreWllbGQgKGxvY2F0aW9uX3QpOworZXh0ZXJuIHRyZWUgY19maW5pc2hfb21wX2ZvciAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjX3NwbGl0X3BhcmFsbGVsX2NsYXVzZXMgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUgKiwgdHJlZSAqKTsKK2V4dGVybiBlbnVtIG9tcF9jbGF1c2VfZGVmYXVsdF9raW5kIGNfb21wX3ByZWRldGVybWluZWRfc2hhcmluZyAodHJlZSk7CisKKy8qIE5vdCBpbiBjLW9tcC5jOyBwcm92aWRlZCBieSB0aGUgZnJvbnQgZW5kLiAgKi8KK2V4dGVybiBib29sIGNfb21wX3NoYXJpbmdfcHJlZGV0ZXJtaW5lZCAodHJlZSk7CitleHRlcm4gdHJlZSBjX29tcF9yZW1hcF9kZWNsICh0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIHJlY29yZF90eXBlc191c2VkX2J5X2N1cnJlbnRfdmFyX2RlY2wgKHRyZWUpOworCisvKiBSZXR1cm4gbmV4dCB0cmVlIGluIHRoZSBjaGFpbiBmb3IgY2hhaW5fbmV4dCB3YWxraW5nIG9mIHRyZWUgbm9kZXMuICAqLworc3RhdGljIGlubGluZSB0cmVlCitjX3RyZWVfY2hhaW5fbmV4dCAodHJlZSB0KQoreworICAvKiBUUkVFX0NIQUlOIG9mIGEgdHlwZSBpcyBUWVBFX1NUVUJfREVDTCwgd2hpY2ggaXMgZGlmZmVyZW50CisgICAgIGtpbmQgb2Ygb2JqZWN0LCBuZXZlciBhIGxvbmcgY2hhaW4gb2Ygbm9kZXMuICBQcmVmZXIKKyAgICAgVFlQRV9ORVhUX1ZBUklBTlQgZm9yIHR5cGVzLiAgKi8KKyAgaWYgKENPREVfQ09OVEFJTlNfU1RSVUNUIChUUkVFX0NPREUgKHQpLCBUU19UWVBFX0NPTU1PTikpCisgICAgcmV0dXJuIFRZUEVfTkVYVF9WQVJJQU5UICh0KTsKKyAgLyogT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBUUkVFX0NIQUlOLCByZXR1cm4gaXQuICAqLworICBpZiAoQ09ERV9DT05UQUlOU19TVFJVQ1QgKFRSRUVfQ09ERSAodCksIFRTX0NPTU1PTikpCisgICAgcmV0dXJuIFRSRUVfQ0hBSU4gKHQpOworICByZXR1cm4gTlVMTDsKK30KKworLyogTWFzayB1c2VkIGJ5IHRtX3N0bXRfYXR0ci4gICovCisjZGVmaW5lIFRNX1NUTVRfQVRUUl9PVVRFUgkyCisjZGVmaW5lIFRNX1NUTVRfQVRUUl9BVE9NSUMJNAorI2RlZmluZSBUTV9TVE1UX0FUVFJfUkVMQVhFRAk4CisKK2V4dGVybiBpbnQgcGFyc2VfdG1fc3RtdF9hdHRyICh0cmVlLCBpbnQpOworCisvKiBNYXNrIHVzZWQgYnkgdG1fYXR0cl90b19tYXNrIGFuZCB0bV9tYXNrX3RvX2F0dHIuICBOb3RlIHRoYXQgdGhlc2UKKyAgIGFyZSBvcmRlcmVkIHNwZWNpZmljYWxseSBzdWNoIHRoYXQgbW9yZSByZXN0cmljdGl2ZSBhdHRyaWJ1dGVzIGFyZQorICAgYXQgbG93ZXIgYml0IHBvc2l0aW9ucy4gIFRoaXMgZmFjdCBpcyBrbm93biBieSB0aGUgQysrIHRtIGF0dHJpYnV0ZQorICAgaW5oZXJpdGFuY2UgY29kZSBzdWNoIHRoYXQgbGVhc3QgYml0IGV4dHJhY3Rpb24gKG1hc2sgJiAtbWFzaykgcmVzdWx0cworICAgaW4gdGhlIG1vc3QgcmVzdHJpY3RpdmUgYXR0cmlidXRlLiAgKi8KKyNkZWZpbmUgVE1fQVRUUl9TQUZFCQkJMQorI2RlZmluZSBUTV9BVFRSX0NBTExBQkxFCQkyCisjZGVmaW5lIFRNX0FUVFJfUFVSRQkJCTQKKyNkZWZpbmUgVE1fQVRUUl9JUlJFVk9DQUJMRQkJOAorI2RlZmluZSBUTV9BVFRSX01BWV9DQU5DRUxfT1VURVIJMTYKKworZXh0ZXJuIGludCB0bV9hdHRyX3RvX21hc2sgKHRyZWUpOworZXh0ZXJuIHRyZWUgdG1fbWFza190b19hdHRyIChpbnQpOworZXh0ZXJuIHRyZWUgZmluZF90bV9hdHRyaWJ1dGUgKHRyZWUpOworCisvKiBBIHN1ZmZpeC1pZGVudGlmaWVyIHZhbHVlIGRvdWJsZXQgdGhhdCByZXByZXNlbnRzIHVzZXItZGVmaW5lZCBsaXRlcmFscworICAgZm9yIEMrKy0weC4gICovCitlbnVtIG92ZXJmbG93X3R5cGUgeworICBPVF9VTkRFUkZMT1cgPSAtMSwKKyAgT1RfTk9ORSwKKyAgT1RfT1ZFUkZMT1cKK307CisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdXNlcmRlZl9saXRlcmFsIHsKKyAgc3RydWN0IHRyZWVfYmFzZSBiYXNlOworICB0cmVlIHN1ZmZpeF9pZDsKKyAgdHJlZSB2YWx1ZTsKKyAgdHJlZSBudW1fc3RyaW5nOworICBlbnVtIG92ZXJmbG93X3R5cGUgb3ZlcmZsb3c7Cit9OworCisjZGVmaW5lIFVTRVJERUZfTElURVJBTF9TVUZGSVhfSUQoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV91c2VyZGVmX2xpdGVyYWwgKilVU0VSREVGX0xJVEVSQUxfQ0hFQ0sgKE5PREUpKS0+c3VmZml4X2lkKQorCisjZGVmaW5lIFVTRVJERUZfTElURVJBTF9WQUxVRShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX3VzZXJkZWZfbGl0ZXJhbCAqKVVTRVJERUZfTElURVJBTF9DSEVDSyAoTk9ERSkpLT52YWx1ZSkKKworI2RlZmluZSBVU0VSREVGX0xJVEVSQUxfT1ZFUkZMT1coTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV91c2VyZGVmX2xpdGVyYWwgKilVU0VSREVGX0xJVEVSQUxfQ0hFQ0sgKE5PREUpKS0+b3ZlcmZsb3cpCisKKyNkZWZpbmUgVVNFUkRFRl9MSVRFUkFMX05VTV9TVFJJTkcoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV91c2VyZGVmX2xpdGVyYWwgKilVU0VSREVGX0xJVEVSQUxfQ0hFQ0sgKE5PREUpKS0+bnVtX3N0cmluZykKKworI2RlZmluZSBVU0VSREVGX0xJVEVSQUxfVFlQRShOT0RFKSBcCisgIChUUkVFX1RZUEUgKFVTRVJERUZfTElURVJBTF9WQUxVRSAoTk9ERSkpKQorCitleHRlcm4gdHJlZSBidWlsZF91c2VyZGVmX2xpdGVyYWwgKHRyZWUgc3VmZml4X2lkLCB0cmVlIHZhbHVlLAorCQkJCSAgIGVudW0gb3ZlcmZsb3dfdHlwZSBvdmVyZmxvdywKKwkJCQkgICB0cmVlIG51bV9zdHJpbmcpOworCitleHRlcm4gdm9pZCBjb252ZXJ0X3ZlY3Rvcl90b19wb2ludGVyX2Zvcl9zdWJzY3JpcHQgKGxvY2F0aW9uX3QsIHRyZWUqLCB0cmVlKTsKKworLyogUG9zc2liZSBjYXNlcyBvZiBzY2FsYXJfdG9fdmVjdG9yIGNvbnZlcnNpb24uICAqLworZW51bSBzdHZfY29udiB7CisgIHN0dl9lcnJvciwgICAgICAgIC8qIEVycm9yIG9jY3VyZWQuICAqLworICBzdHZfbm90aGluZywgICAgICAvKiBOb3RoaW5nIGhhcHBlbmVkLiAgKi8KKyAgc3R2X2ZpcnN0YXJnLCAgICAgLyogRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBleHBhbmRlZC4gICovCisgIHN0dl9zZWNvbmRhcmcgICAgIC8qIFNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGV4cGFuZGVkLiAgKi8KK307CisKK2V4dGVybiBlbnVtIHN0dl9jb252IHNjYWxhcl90b192ZWN0b3IgKGxvY2F0aW9uX3QgbG9jLCBlbnVtIHRyZWVfY29kZSBjb2RlLAorCQkJCSAgICAgICB0cmVlIG9wMCwgdHJlZSBvcDEsIGJvb2wpOworCisjZW5kaWYgLyogISBHQ0NfQ19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2MtZmFtaWx5L2Mtb2JqYy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2MtZmFtaWx5L2Mtb2JqYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNGUzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvYy1mYW1pbHkvYy1vYmpjLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qIERlZmluaXRpb25zIG9mIE9iamVjdGl2ZS1DIGZyb250LWVuZCBlbnRyeSBwb2ludHMgdXNlZCBmb3IgQyBhbmQgQysrLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DX0NPTU1PTl9PQkpDX0gKKyNkZWZpbmUgR0NDX0NfQ09NTU9OX09CSkNfSAorCisvKiBPYmpDIGl2YXIgdmlzaWJpbGl0eSB0eXBlcy4gICovCit0eXBlZGVmIGVudW0gb2JqY19pdmFyX3Zpc2liaWxpdHlfa2luZCB7CisgIE9CSkNfSVZBUl9WSVNfUFJPVEVDVEVEID0gMCwKKyAgT0JKQ19JVkFSX1ZJU19QVUJMSUMgICAgPSAxLAorICBPQkpDX0lWQVJfVklTX1BSSVZBVEUgICA9IDIsCisgIE9CSkNfSVZBUl9WSVNfUEFDS0FHRSAgID0gMworfSBvYmpjX2l2YXJfdmlzaWJpbGl0eV9raW5kOworCisvKiBPYmplY3RpdmUtQyAvIE9iamVjdGl2ZS1DKysgZW50cnkgcG9pbnRzLiAgKi8KKworLyogVGhlIGZvbGxvd2luZyBPYmpDL09iakMrKyBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgQyBhbmQvb3IgQysrCisgICBmcm9udC1lbmRzOyB0aGV5IGFsbCBtdXN0IGhhdmUgY29ycmVzcG9uZGluZyBzdHVicyBpbiBzdHViLW9iamMuYy4gICovCitleHRlcm4gdm9pZCBvYmpjX3dyaXRlX2dsb2JhbF9kZWNsYXJhdGlvbnMgKHZvaWQpOworZXh0ZXJuIHRyZWUgb2JqY19pc19jbGFzc19uYW1lICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfaXNfb2JqZWN0X3B0ciAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2NoZWNrX2RlY2wgKHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19jaGVja19nbG9iYWxfZGVjbCAodHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2NvbW1vbl90eXBlICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIG9iamNfY29tcGFyZV90eXBlcyAodHJlZSwgdHJlZSwgaW50LCB0cmVlKTsKK2V4dGVybiBib29sIG9iamNfaGF2ZV9jb21tb25fdHlwZSAodHJlZSwgdHJlZSwgaW50LCB0cmVlKTsKK2V4dGVybiBib29sIG9iamNfZGlhZ25vc2VfcHJpdmF0ZV9pdmFyICh0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfdm9sYXRpbGl6ZV9kZWNsICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfcmV3cml0ZV9mdW5jdGlvbl9jYWxsICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfbWVzc2FnZV9zZWxlY3RvciAodm9pZCk7CitleHRlcm4gdHJlZSBvYmpjX2xvb2t1cF9pdmFyICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfY2xlYXJfc3VwZXJfcmVjZWl2ZXIgKHZvaWQpOworZXh0ZXJuIGludCBvYmpjX2lzX3B1YmxpYyAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2lzX2lkICh0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfZGVjbGFyZV9hbGlhcyAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2RlY2xhcmVfY2xhc3MgKHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19kZWNsYXJlX3Byb3RvY29sICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfYnVpbGRfbWVzc2FnZV9leHByICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfZmluaXNoX21lc3NhZ2VfZXhwciAodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSopOworZXh0ZXJuIHRyZWUgb2JqY19idWlsZF9zZWxlY3Rvcl9leHByIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfYnVpbGRfcHJvdG9jb2xfZXhwciAodHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2J1aWxkX2VuY29kZV9leHByICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfYnVpbGRfc3RyaW5nX29iamVjdCAodHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2dldF9wcm90b2NvbF9xdWFsaWZpZWRfdHlwZSAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2dldF9jbGFzc19yZWZlcmVuY2UgKHRyZWUpOworZXh0ZXJuIHRyZWUgb2JqY19nZXRfY2xhc3NfaXZhcnMgKHRyZWUpOworZXh0ZXJuIGJvb2wgb2JqY19kZXRlY3RfZmllbGRfZHVwbGljYXRlcyAoYm9vbCk7CitleHRlcm4gdm9pZCBvYmpjX3N0YXJ0X2NsYXNzX2ludGVyZmFjZSAodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX3N0YXJ0X2NhdGVnb3J5X2ludGVyZmFjZSAodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX3N0YXJ0X3Byb3RvY29sICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfY29udGludWVfaW50ZXJmYWNlICh2b2lkKTsKK2V4dGVybiB2b2lkIG9iamNfZmluaXNoX2ludGVyZmFjZSAodm9pZCk7CitleHRlcm4gdm9pZCBvYmpjX3N0YXJ0X2NsYXNzX2ltcGxlbWVudGF0aW9uICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfc3RhcnRfY2F0ZWdvcnlfaW1wbGVtZW50YXRpb24gKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19jb250aW51ZV9pbXBsZW1lbnRhdGlvbiAodm9pZCk7CitleHRlcm4gdm9pZCBvYmpjX2ZpbmlzaF9pbXBsZW1lbnRhdGlvbiAodm9pZCk7CitleHRlcm4gdm9pZCBvYmpjX3NldF92aXNpYmlsaXR5IChvYmpjX2l2YXJfdmlzaWJpbGl0eV9raW5kKTsKK2V4dGVybiB0cmVlIG9iamNfYnVpbGRfbWV0aG9kX3NpZ25hdHVyZSAoYm9vbCwgdHJlZSwgdHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBvYmpjX2FkZF9tZXRob2RfZGVjbGFyYXRpb24gKGJvb2wsIHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgb2JqY19zdGFydF9tZXRob2RfZGVmaW5pdGlvbiAoYm9vbCwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2ZpbmlzaF9tZXRob2RfZGVmaW5pdGlvbiAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2FkZF9pbnN0YW5jZV92YXJpYWJsZSAodHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2J1aWxkX2tleXdvcmRfZGVjbCAodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2J1aWxkX3Rocm93X3N0bXQgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19iZWdpbl90cnlfc3RtdCAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2ZpbmlzaF90cnlfc3RtdCAodm9pZCk7CitleHRlcm4gdm9pZCBvYmpjX2JlZ2luX2NhdGNoX2NsYXVzZSAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2ZpbmlzaF9jYXRjaF9jbGF1c2UgKHZvaWQpOworZXh0ZXJuIHZvaWQgb2JqY19idWlsZF9maW5hbGx5X2NsYXVzZSAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX2J1aWxkX3N5bmNocm9uaXplZCAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gaW50IG9iamNfc3RhdGljX2luaXRfbmVlZGVkX3AgKHZvaWQpOworZXh0ZXJuIHRyZWUgb2JqY19nZW5lcmF0ZV9zdGF0aWNfaW5pdF9jYWxsICh0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfZ2VuZXJhdGVfd3JpdGVfYmFycmllciAodHJlZSwgZW51bSB0cmVlX2NvZGUsIHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19zZXRfbWV0aG9kX29wdCAoYm9vbCk7CitleHRlcm4gdm9pZCBvYmpjX2ZpbmlzaF9mb3JlYWNoX2xvb3AgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgIG9iamNfbWV0aG9kX2RlY2wgKGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiB2b2lkIG9iamNfYWRkX3Byb3BlcnR5X2RlY2xhcmF0aW9uIChsb2NhdGlvbl90LCB0cmVlLCBib29sLCBib29sLCBib29sLCAKKwkJCQkJICAgYm9vbCwgYm9vbCwgYm9vbCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBvYmpjX21heWJlX2J1aWxkX2NvbXBvbmVudF9yZWYgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgb2JqY19idWlsZF9jbGFzc19jb21wb25lbnRfcmVmICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG9iamNfbWF5YmVfYnVpbGRfbW9kaWZ5X2V4cHIgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgb2JqY19idWlsZF9pbmNyX2V4cHJfZm9yX3Byb3BlcnR5X3JlZiAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIAorCQkJCQkJICAgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2FkZF9zeW50aGVzaXplX2RlY2xhcmF0aW9uIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB2b2lkIG9iamNfYWRkX2R5bmFtaWNfZGVjbGFyYXRpb24gKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBvYmpjX21heWJlX3ByaW50YWJsZV9uYW1lICh0cmVlLCBpbnQpOworZXh0ZXJuIGJvb2wgb2JqY19pc19wcm9wZXJ0eV9yZWYgKHRyZWUpOworZXh0ZXJuIGJvb2wgb2JqY19zdHJpbmdfcmVmX3R5cGVfcCAodHJlZSk7CitleHRlcm4gdm9pZCBvYmpjX2NoZWNrX2Zvcm1hdF9hcmcgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgb2JqY19maW5pc2hfZnVuY3Rpb24gKHZvaWQpOworZXh0ZXJuIHZvaWQgb2JqY19tYXliZV93YXJuX2V4Y2VwdGlvbnMgKGxvY2F0aW9uX3QpOworCisvKiBUaGUgZm9sbG93aW5nIGFyZSBwcm92aWRlZCBieSB0aGUgQyBhbmQgQysrIGZyb250LWVuZHMsIGFuZCBjYWxsZWQgYnkKKyAgIE9iakMvT2JqQysrLiAgKi8KK2V4dGVybiB2b2lkICpvYmpjX2dldF9jdXJyZW50X3Njb3BlICh2b2lkKTsKK2V4dGVybiB2b2lkIG9iamNfbWFya19sb2NhbHNfdm9sYXRpbGUgKHZvaWQgKik7CisKKyNlbmRpZiAvKiAhIEdDQ19DX0NPTU1PTl9PQkpDX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jLWZhbWlseS9jLXByYWdtYS5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2MtZmFtaWx5L2MtcHJhZ21hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyMTVkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jLWZhbWlseS9jLXByYWdtYS5oCkBAIC0wLDAgKzEsMTUwIEBACisvKiBQcmFnbWEgcmVsYXRlZCBpbnRlcmZhY2VzLgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DX1BSQUdNQV9ICisjZGVmaW5lIEdDQ19DX1BSQUdNQV9ICisKKyNpbmNsdWRlICJjcHBsaWIuaCIgLyogRm9yIGVudW0gY3BwX3R0eXBlLiAgKi8KKworLyogUHJhZ21hIGlkZW50aWZpZXJzIGJ1aWx0IGluIHRvIHRoZSBmcm9udCBlbmQgcGFyc2Vycy4gIElkZW50aWZpZXJzCisgICBmb3IgYW5jaWxsYXJ5IGhhbmRsZXJzIHdpbGwgZm9sbG93IHRoZXNlLiAgKi8KK3R5cGVkZWYgZW51bSBwcmFnbWFfa2luZCB7CisgIFBSQUdNQV9OT05FID0gMCwKKworICBQUkFHTUFfT01QX0FUT01JQywKKyAgUFJBR01BX09NUF9CQVJSSUVSLAorICBQUkFHTUFfT01QX0NSSVRJQ0FMLAorICBQUkFHTUFfT01QX0ZMVVNILAorICBQUkFHTUFfT01QX0ZPUiwKKyAgUFJBR01BX09NUF9NQVNURVIsCisgIFBSQUdNQV9PTVBfT1JERVJFRCwKKyAgUFJBR01BX09NUF9QQVJBTExFTCwKKyAgUFJBR01BX09NUF9QQVJBTExFTF9GT1IsCisgIFBSQUdNQV9PTVBfUEFSQUxMRUxfU0VDVElPTlMsCisgIFBSQUdNQV9PTVBfU0VDVElPTiwKKyAgUFJBR01BX09NUF9TRUNUSU9OUywKKyAgUFJBR01BX09NUF9TSU5HTEUsCisgIFBSQUdNQV9PTVBfVEFTSywKKyAgUFJBR01BX09NUF9UQVNLV0FJVCwKKyAgUFJBR01BX09NUF9UQVNLWUlFTEQsCisgIFBSQUdNQV9PTVBfVEhSRUFEUFJJVkFURSwKKworICBQUkFHTUFfR0NDX1BDSF9QUkVQUk9DRVNTLAorCisgIFBSQUdNQV9GSVJTVF9FWFRFUk5BTAorfSBwcmFnbWFfa2luZDsKKworCisvKiBBbGwgY2xhdXNlcyBkZWZpbmVkIGJ5IE9wZW5NUCAyLjUgYW5kIDMuMC4KKyAgIFVzZWQgaW50ZXJuYWxseSBieSBib3RoIEMgYW5kIEMrKyBwYXJzZXJzLiAgKi8KK3R5cGVkZWYgZW51bSBwcmFnbWFfb21wX2NsYXVzZSB7CisgIFBSQUdNQV9PTVBfQ0xBVVNFX05PTkUgPSAwLAorCisgIFBSQUdNQV9PTVBfQ0xBVVNFX0NPTExBUFNFLAorICBQUkFHTUFfT01QX0NMQVVTRV9DT1BZSU4sCisgIFBSQUdNQV9PTVBfQ0xBVVNFX0NPUFlQUklWQVRFLAorICBQUkFHTUFfT01QX0NMQVVTRV9ERUZBVUxULAorICBQUkFHTUFfT01QX0NMQVVTRV9GSVJTVFBSSVZBVEUsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX0lGLAorICBQUkFHTUFfT01QX0NMQVVTRV9MQVNUUFJJVkFURSwKKyAgUFJBR01BX09NUF9DTEFVU0VfTk9XQUlULAorICBQUkFHTUFfT01QX0NMQVVTRV9OVU1fVEhSRUFEUywKKyAgUFJBR01BX09NUF9DTEFVU0VfT1JERVJFRCwKKyAgUFJBR01BX09NUF9DTEFVU0VfUFJJVkFURSwKKyAgUFJBR01BX09NUF9DTEFVU0VfUkVEVUNUSU9OLAorICBQUkFHTUFfT01QX0NMQVVTRV9TQ0hFRFVMRSwKKyAgUFJBR01BX09NUF9DTEFVU0VfU0hBUkVELAorICBQUkFHTUFfT01QX0NMQVVTRV9VTlRJRUQsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX0ZJTkFMLAorICBQUkFHTUFfT01QX0NMQVVTRV9NRVJHRUFCTEUKK30gcHJhZ21hX29tcF9jbGF1c2U7CisKK2V4dGVybiBzdHJ1Y3QgY3BwX3JlYWRlciogcGFyc2VfaW47CisKKy8qIEl0J3Mgc2FmZSB0byBhbHdheXMgbGVhdmUgdmlzaWJpbGl0eSBwcmFnbWEgZW5hYmxlZCBhcyBpZgorICAgdmlzaWJpbGl0eSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBob3N0IE9TIHBsYXRmb3JtIHRoZQorICAgc3RhdGVtZW50cyBhcmUgaWdub3JlZC4gICovCitleHRlcm4gdm9pZCBwdXNoX3Zpc2liaWxpdHkgKGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBib29sIHBvcF92aXNpYmlsaXR5IChpbnQpOworCitleHRlcm4gdm9pZCBpbml0X3ByYWdtYSAodm9pZCk7CisKKy8qIEZyb250LWVuZCB3cmFwcGVycyBmb3IgcHJhZ21hIHJlZ2lzdHJhdGlvbi4gICovCit0eXBlZGVmIHZvaWQgKCpwcmFnbWFfaGFuZGxlcl8xYXJnKShzdHJ1Y3QgY3BwX3JlYWRlciAqKTsKKy8qIEEgc2Vjb25kIHByYWdtYSBoYW5kbGVyLCB3aGljaCBhZGRzIGEgdm9pZCAqIGFyZ3VtZW50IGFsbG93aW5nIHRvIHBhc3MgZXh0cmEKKyAgIGRhdGEgdG8gdGhlIGhhbmRsZXIuICAqLwordHlwZWRlZiB2b2lkICgqcHJhZ21hX2hhbmRsZXJfMmFyZykoc3RydWN0IGNwcF9yZWFkZXIgKiwgdm9pZCAqKTsKKworLyogVGhpcyB1bmlvbiBhbGxvd3MgdG8gYWJzdHJhY3QgdGhlIGRpZmZlcmVudCBoYW5kbGVycy4gICovCit1bmlvbiBnZW5fcHJhZ21hX2hhbmRsZXIgeworICBwcmFnbWFfaGFuZGxlcl8xYXJnIGhhbmRsZXJfMWFyZzsKKyAgcHJhZ21hX2hhbmRsZXJfMmFyZyBoYW5kbGVyXzJhcmc7Cit9OworLyogSW50ZXJuYWxseSB1c2VkIHRvIGtlZXAgdGhlIGRhdGEgb2YgdGhlIGhhbmRsZXIuICAqLworc3RydWN0IGludGVybmFsX3ByYWdtYV9oYW5kbGVyX2QgeworICB1bmlvbiBnZW5fcHJhZ21hX2hhbmRsZXIgaGFuZGxlcjsKKyAgLyogUGVybWl0cyB0byBrbm93IGlmIGhhbmRsZXIgaXMgYSBwcmFnbWFfaGFuZGxlcl8xYXJnIChleHRyYV9kYXRhIGlzIGZhbHNlKQorICAgICBvciBhIHByYWdtYV9oYW5kbGVyXzJhcmcgKGV4dHJhX2RhdGEgaXMgdHJ1ZSkuICAqLworICBib29sIGV4dHJhX2RhdGE7CisgIC8qIEEgZGF0YSBmaWVsZCB3aGljaCBjYW4gYmUgdXNlZCB3aGVuIGV4dHJhX2RhdGEgaXMgdHJ1ZS4gICovCisgIHZvaWQgKiBkYXRhOworfTsKK3R5cGVkZWYgc3RydWN0IGludGVybmFsX3ByYWdtYV9oYW5kbGVyX2QgaW50ZXJuYWxfcHJhZ21hX2hhbmRsZXI7CisKK2V4dGVybiB2b2lkIGNfcmVnaXN0ZXJfcHJhZ21hIChjb25zdCBjaGFyICpzcGFjZSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmFnbWFfaGFuZGxlcl8xYXJnIGhhbmRsZXIpOworZXh0ZXJuIHZvaWQgY19yZWdpc3Rlcl9wcmFnbWFfd2l0aF9kYXRhIChjb25zdCBjaGFyICpzcGFjZSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJhZ21hX2hhbmRsZXJfMmFyZyBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKKworZXh0ZXJuIHZvaWQgY19yZWdpc3Rlcl9wcmFnbWFfd2l0aF9leHBhbnNpb24gKGNvbnN0IGNoYXIgKnNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJhZ21hX2hhbmRsZXJfMWFyZyBoYW5kbGVyKTsKK2V4dGVybiB2b2lkIGNfcmVnaXN0ZXJfcHJhZ21hX3dpdGhfZXhwYW5zaW9uX2FuZF9kYXRhIChjb25zdCBjaGFyICpzcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJhZ21hX2hhbmRsZXJfMmFyZyBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgY19pbnZva2VfcHJhZ21hX2hhbmRsZXIgKHVuc2lnbmVkIGludCk7CisKK2V4dGVybiB2b2lkIG1heWJlX2FwcGx5X3ByYWdtYV93ZWFrICh0cmVlKTsKK2V4dGVybiB2b2lkIG1heWJlX2FwcGx5X3BlbmRpbmdfcHJhZ21hX3dlYWtzICh2b2lkKTsKK2V4dGVybiB0cmVlIG1heWJlX2FwcGx5X3JlbmFtaW5nX3ByYWdtYSAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBhZGRfdG9fcmVuYW1pbmdfcHJhZ21hX2xpc3QgKHRyZWUsIHRyZWUpOworCitleHRlcm4gZW51bSBjcHBfdHR5cGUgcHJhZ21hX2xleCAodHJlZSAqKTsKKworLyogRmxhZ3MgZm9yIHVzZSB3aXRoIGNfbGV4X3dpdGhfZmxhZ3MuICBUaGUgdmFsdWVzIGhlcmUgd2VyZSBwaWNrZWQKKyAgIHNvIHRoYXQgMCBtZWFucyB0byB0cmFuc2xhdGUgYW5kIGpvaW4gc3RyaW5ncy4gICovCisjZGVmaW5lIENfTEVYX1NUUklOR19OT19UUkFOU0xBVEUgMSAvKiBEbyBub3QgbGV4IHN0cmluZ3MgaW50bworCQkJCSAgICAgICBleGVjdXRpb24gY2hhcmFjdGVyIHNldC4gICovCisjZGVmaW5lIENfTEVYX1NUUklOR19OT19KT0lOCSAgMiAvKiBEbyBub3QgY29uY2F0ZW5hdGUgc3RyaW5ncworCQkJCSAgICAgICBub3IgdHJhbnNsYXRlIHRoZW0gaW50byBleGVjdXRpb24KKwkJCQkgICAgICAgY2hhcmFjdGVyIHNldC4gICovCisKKy8qIFRoaXMgaXMgbm90IGFjdHVhbGx5IGF2YWlsYWJsZSB0byBwcmFnbWEgcGFyc2Vycy4gIEl0J3MgbWVyZWx5IGEKKyAgIGNvbnZlbmllbnQgbG9jYXRpb24gdG8gZGVjbGFyZSB0aGlzIGZ1bmN0aW9uIGZvciBjLWxleCwgYWZ0ZXIKKyAgIGhhdmluZyBlbnVtIGNwcF90dHlwZSBkZWNsYXJlZC4gICovCitleHRlcm4gZW51bSBjcHBfdHR5cGUgY19sZXhfd2l0aF9mbGFncyAodHJlZSAqLCBsb2NhdGlvbl90ICosIHVuc2lnbmVkIGNoYXIgKiwKKwkJCQkJaW50KTsKKworZXh0ZXJuIHZvaWQgY19wcF9sb29rdXBfcHJhZ21hICh1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiopOworCitleHRlcm4gR1RZKCgpKSB0cmVlIHByYWdtYV9leHRlcm5fcHJlZml4OworCisjZW5kaWYgLyogR0NDX0NfUFJBR01BX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jLWZhbWlseS9jLXByZXR0eS1wcmludC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2MtZmFtaWx5L2MtcHJldHR5LXByaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiNzJjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jLWZhbWlseS9jLXByZXR0eS1wcmludC5oCkBAIC0wLDAgKzEsMjE1IEBACisvKiBWYXJpb3VzIGRlY2xhcmF0aW9ucyBmb3IgdGhlIEMgYW5kIEMrKyBwcmV0dHktcHJpbnRlcnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPGdkckBpbnRlZ3JhYmxlLXNvbHV0aW9ucy5uZXQ+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DX1BSRVRUWV9QUklOVEVSCisjZGVmaW5lIEdDQ19DX1BSRVRUWV9QUklOVEVSCisKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYy1mYW1pbHkvYy1jb21tb24uaCIKKyNpbmNsdWRlICJwcmV0dHktcHJpbnQuaCIKKworCit0eXBlZGVmIGVudW0KKyAgeworICAgICBwcF9jX2ZsYWdfYWJzdHJhY3QgPSAxIDw8IDEsCisgICAgIHBwX2NfZmxhZ19nbnVfdjMgPSAxIDw8IDIsCisgICAgIHBwX2NfZmxhZ19sYXN0X2JpdCA9IDMKKyAgfSBwcF9jX3ByZXR0eV9wcmludF9mbGFnczsKKworCisvKiBUaGUgZGF0YSB0eXBlIHVzZWQgdG8gYnVuZGxlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgcHJldHR5LXByaW50aW5nCisgICBhIEMgb3IgQysrIGVudGl0eS4gICovCit0eXBlZGVmIHN0cnVjdCBjX3ByZXR0eV9wcmludF9pbmZvIGNfcHJldHR5X3ByaW50ZXI7CisKKy8qIFRoZSB0eXBlIG9mIGEgQyBwcmV0dHktcHJpbnRlciAnbWVtYmVyJyBmdW5jdGlvbi4gICovCit0eXBlZGVmIHZvaWQgKCpjX3ByZXR0eV9wcmludF9mbikgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7CisKKy8qIFRoZSBkYXRhdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgcHJldHR5LXByaW50aW5nCisgICBhIHRyZWUgdGhhdCByZXByZXNlbnRzIGEgQyBjb25zdHJ1Y3QuICBBbnkgcHJldHR5LXByaW50ZXIgZm9yIGEKKyAgIGxhbmd1YWdlIHVzaW5nIEMvYysrIHN5bnRheCBjYW4gZGVyaXZlIGZyb20gdGhpcyBkYXRhdHlwZSBhbmQgcmV1c2UKKyAgIGZhY2lsaXRpZXMgcHJvdmlkZWQgaGVyZS4gIEl0IGNhbiBkbyBzbyBieSBoYXZpbmcgYSBzdWJvYmplY3Qgb2YgdHlwZQorICAgY19wcmV0dHlfcHJpbnRlciBhbmQgb3ZlcnJpZGUgdGhlIG1hY3JvIHBwX2NfYmFzZSB0byByZXR1cm4gYSBwb2ludGVyCisgICB0byB0aGF0IHN1Ym9iamVjdC4gIFN1Y2ggYSBwcmV0dHktcHJpbnRlciBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IHRvCisgICBpbml0aWFsaXplIHRoZSBwcF9iYXNlKCkgcGFydCwgdGhlbiBjYWxsIHBwX2NfcHJldHR5X3ByaW50ZXJfaW5pdAorICAgdG8gc2V0IHVwIHRoZSBjb21wb25lbnRzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBDIHByZXR0eS1wcmludGVyLgorICAgQSBkZXJpdmVkIHByZXR0eS1wcmludGVyIGNhbiBvdmVycmlkZSBhbnkgZnVuY3Rpb24gbGlzdGVkIGluIHRoZQorICAgdnRhYmxlIGJlbG93LiAgU2VlIGNwL2N4eC1wcmV0dHktcHJpbnQuaCBhbmQgY3AvY3h4LXByZXR0eS1wcmludC5jCisgICBmb3IgYW4gZXhhbXBsZSBvZiBkZXJpdmF0aW9uLiAgKi8KK3N0cnVjdCBjX3ByZXR0eV9wcmludF9pbmZvCit7CisgIHByZXR0eV9wcmludGVyIGJhc2U7CisgIC8qIFBvaW50cyB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheSBvZiBvZmZzZXQtbGlzdC4KKyAgICAgTm90IHVzZWQgeWV0LiAgKi8KKyAgaW50ICpvZmZzZXRfbGlzdDsKKworICBwcF9mbGFncyBmbGFnczsKKworICAvKiBUaGVzZSBtdXN0IGJlIG92ZXJyaWRkZW4gYnkgZWFjaCBvZiB0aGUgQyBhbmQgQysrIGZyb250LWVuZCB0bworICAgICByZWZsZWN0IHRoZWlyIHVuZGVyc3RhbmRpbmcgb2Ygc3ludGFjdGljIHByb2R1Y3Rpb25zIHdoZW4gdGhleSBkaWZmZXIuICAqLworICBjX3ByZXR0eV9wcmludF9mbiBkZWNsYXJhdGlvbjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gZGVjbGFyYXRpb25fc3BlY2lmaWVyczsKKyAgY19wcmV0dHlfcHJpbnRfZm4gZGVjbGFyYXRvcjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gYWJzdHJhY3RfZGVjbGFyYXRvcjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gZGlyZWN0X2Fic3RyYWN0X2RlY2xhcmF0b3I7CisgIGNfcHJldHR5X3ByaW50X2ZuIHR5cGVfc3BlY2lmaWVyX3NlcTsKKyAgY19wcmV0dHlfcHJpbnRfZm4gZGlyZWN0X2RlY2xhcmF0b3I7CisgIGNfcHJldHR5X3ByaW50X2ZuIHB0cl9vcGVyYXRvcjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gcGFyYW1ldGVyX2xpc3Q7CisgIGNfcHJldHR5X3ByaW50X2ZuIHR5cGVfaWQ7CisgIGNfcHJldHR5X3ByaW50X2ZuIHNpbXBsZV90eXBlX3NwZWNpZmllcjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gZnVuY3Rpb25fc3BlY2lmaWVyOworICBjX3ByZXR0eV9wcmludF9mbiBzdG9yYWdlX2NsYXNzX3NwZWNpZmllcjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gaW5pdGlhbGl6ZXI7CisKKyAgY19wcmV0dHlfcHJpbnRfZm4gc3RhdGVtZW50OworCisgIGNfcHJldHR5X3ByaW50X2ZuIGNvbnN0YW50OworICBjX3ByZXR0eV9wcmludF9mbiBpZF9leHByZXNzaW9uOworICBjX3ByZXR0eV9wcmludF9mbiBwcmltYXJ5X2V4cHJlc3Npb247CisgIGNfcHJldHR5X3ByaW50X2ZuIHBvc3RmaXhfZXhwcmVzc2lvbjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gdW5hcnlfZXhwcmVzc2lvbjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gY29uZGl0aW9uYWxfZXhwcmVzc2lvbjsKKyAgY19wcmV0dHlfcHJpbnRfZm4gYXNzaWdubWVudF9leHByZXNzaW9uOworICBjX3ByZXR0eV9wcmludF9mbiBleHByZXNzaW9uOworfTsKKworLyogT3ZlcnJpZGUgdGhlIHBwX2Jhc2UgbWFjcm8uICBEZXJpdmVkIHByZXR0eS1wcmludGVycyBzaG91bGQgbm90CisgICB0b3VjaCB0aGlzIG1hY3JvLiAgSW5zdGVhZCB0aGV5IHNob3VsZCBvdmVycmlkZSBwcF9jX2Jhc2UgaW5zdGVhZC4gICovCisjdW5kZWYgcHBfYmFzZQorI2RlZmluZSBwcF9iYXNlKFBQKSAgKCZwcF9jX2Jhc2UgKFBQKS0+YmFzZSkKKworCisjZGVmaW5lIHBwX2NfdHJlZV9pZGVudGlmaWVyKFBQSSwgSUQpICAgICAgICAgICAgICBcCisgICBwcF9jX2lkZW50aWZpZXIgKFBQSSwgSURFTlRJRklFUl9QT0lOVEVSIChJRCkpCisKKyNkZWZpbmUgcHBfZGVjbGFyYXRpb24oUFBJLCBUKSAgICAgICAgICAgICAgICAgICAgXAorICAgcHBfY19iYXNlIChQUEkpLT5kZWNsYXJhdGlvbiAocHBfY19iYXNlIChQUEkpLCBUKQorI2RlZmluZSBwcF9kZWNsYXJhdGlvbl9zcGVjaWZpZXJzKFBQSSwgRCkgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQSSktPmRlY2xhcmF0aW9uX3NwZWNpZmllcnMgKHBwX2NfYmFzZSAoUFBJKSwgRCkKKyNkZWZpbmUgcHBfYWJzdHJhY3RfZGVjbGFyYXRvcihQUCwgRCkgICAgICAgICAgICAgXAorICAgcHBfY19iYXNlIChQUCktPmFic3RyYWN0X2RlY2xhcmF0b3IgKHBwX2NfYmFzZSAoUFApLCBEKQorI2RlZmluZSBwcF90eXBlX3NwZWNpZmllcl9zZXEoUFBJLCBEKSAgICAgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQSSktPnR5cGVfc3BlY2lmaWVyX3NlcSAocHBfY19iYXNlIChQUEkpLCBEKQorI2RlZmluZSBwcF9kZWNsYXJhdG9yKFBQSSwgRCkgICAgICAgICAgICAgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQSSktPmRlY2xhcmF0b3IgKHBwX2NfYmFzZSAoUFBJKSwgRCkKKyNkZWZpbmUgcHBfZGlyZWN0X2RlY2xhcmF0b3IoUFBJLCBEKSAgICAgICAgICAgICAgXAorICAgcHBfY19iYXNlIChQUEkpLT5kaXJlY3RfZGVjbGFyYXRvciAocHBfY19iYXNlIChQUEkpLCBEKQorI2RlZmluZSBwcF9kaXJlY3RfYWJzdHJhY3RfZGVjbGFyYXRvcihQUCwgRCkgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQKS0+ZGlyZWN0X2Fic3RyYWN0X2RlY2xhcmF0b3IgKHBwX2NfYmFzZSAoUFApLCBEKQorI2RlZmluZSBwcF9wdHJfb3BlcmF0b3IoUFAsIEQpICAgICAgICAgICAgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQKS0+cHRyX29wZXJhdG9yIChwcF9jX2Jhc2UgKFBQKSwgRCkKKyNkZWZpbmUgcHBfcGFyYW1ldGVyX2xpc3QoUFBJLCBUKSAgICAgICAgICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQSSktPnBhcmFtZXRlcl9saXN0IChwcF9jX2Jhc2UgKFBQSSksIFQpCisjZGVmaW5lIHBwX3R5cGVfaWQoUFBJLCBEKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHBfY19iYXNlIChQUEkpLT50eXBlX2lkIChwcF9jX2Jhc2UgKFBQSSksIEQpCisjZGVmaW5lIHBwX3NpbXBsZV90eXBlX3NwZWNpZmllcihQUCwgVCkgICAgICAgICAgIFwKKyAgcHBfY19iYXNlIChQUCktPnNpbXBsZV90eXBlX3NwZWNpZmllciAocHBfY19iYXNlIChQUCksIFQpCisjZGVmaW5lIHBwX2Z1bmN0aW9uX3NwZWNpZmllcihQUCwgRCkgICAgICAgICAgICAgIFwKKyAgcHBfY19iYXNlIChQUCktPmZ1bmN0aW9uX3NwZWNpZmllciAocHBfY19iYXNlIChQUCksIEQpCisjZGVmaW5lIHBwX3N0b3JhZ2VfY2xhc3Nfc3BlY2lmaWVyKFBQLCBEKSAgICAgICAgIFwKKyAgcHBfY19iYXNlIChQUCktPnN0b3JhZ2VfY2xhc3Nfc3BlY2lmaWVyIChwcF9jX2Jhc2UgKFBQKSwgRCk7CisKKyNkZWZpbmUgcHBfc3RhdGVtZW50KFBQSSwgUykgICAgICAgICAgICAgICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQSSktPnN0YXRlbWVudCAocHBfY19iYXNlIChQUEkpLCBTKQorCisjZGVmaW5lIHBwX2NvbnN0YW50KFBQLCBFKSBcCisgIHBwX2NfYmFzZSAoUFApLT5jb25zdGFudCAocHBfY19iYXNlIChQUCksIEUpCisjZGVmaW5lIHBwX2lkX2V4cHJlc3Npb24oUFAsIEUpICBcCisgIHBwX2NfYmFzZSAoUFApLT5pZF9leHByZXNzaW9uIChwcF9jX2Jhc2UgKFBQKSwgRSkKKyNkZWZpbmUgcHBfcHJpbWFyeV9leHByZXNzaW9uKFBQSSwgRSkgICAgICAgICAgICAgXAorICBwcF9jX2Jhc2UgKFBQSSktPnByaW1hcnlfZXhwcmVzc2lvbiAocHBfY19iYXNlIChQUEkpLCBFKQorI2RlZmluZSBwcF9wb3N0Zml4X2V4cHJlc3Npb24oUFBJLCBFKSAgICAgICAgICAgICBcCisgIHBwX2NfYmFzZSAoUFBJKS0+cG9zdGZpeF9leHByZXNzaW9uIChwcF9jX2Jhc2UgKFBQSSksIEUpCisjZGVmaW5lIHBwX3VuYXJ5X2V4cHJlc3Npb24oUFBJLCBFKSAgICAgICAgICAgICAgIFwKKyAgcHBfY19iYXNlIChQUEkpLT51bmFyeV9leHByZXNzaW9uIChwcF9jX2Jhc2UgKFBQSSksIEUpCisjZGVmaW5lIHBwX2luaXRpYWxpemVyKFBQSSwgRSkgICAgICAgICAgICAgICAgICAgIFwKKyAgcHBfY19iYXNlIChQUEkpLT5pbml0aWFsaXplciAocHBfY19iYXNlIChQUEkpLCBFKQorI2RlZmluZSBwcF9tdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uKFBQSSwgRSkgICAgICBcCisgIHBwX2NfYmFzZSAoUFBJKS0+bXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiAocHBfY19iYXNlIChQUEkpLCBFKQorI2RlZmluZSBwcF9jb25kaXRpb25hbF9leHByZXNzaW9uKFBQSSwgRSkgICAgICAgICBcCisgIHBwX2NfYmFzZSAoUFBJKS0+Y29uZGl0aW9uYWxfZXhwcmVzc2lvbiAocHBfY19iYXNlIChQUEkpLCBFKQorI2RlZmluZSBwcF9hc3NpZ25tZW50X2V4cHJlc3Npb24oUFBJLCBFKSAgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQSSktPmFzc2lnbm1lbnRfZXhwcmVzc2lvbiAocHBfY19iYXNlIChQUEkpLCBFKQorI2RlZmluZSBwcF9leHByZXNzaW9uKFBQLCBFKSAgICAgICAgICAgICAgICAgICAgICBcCisgICBwcF9jX2Jhc2UgKFBQKS0+ZXhwcmVzc2lvbiAocHBfY19iYXNlIChQUCksIEUpCisKKworLyogUmV0dXJucyB0aGUgY19wcmV0dHlfcHJpbnRlciBiYXNlIG9iamVjdCBvZiBQUkVUVFktUFJJTlRFUi4gIFRoaXMKKyAgIG1hY3JvIG11c3QgYmUgb3ZlcnJpZGRlbiBieSBhbnkgc3ViY2xhc3Mgb2YgY19wcmV0dHlfcHJpbnRfaW5mby4gICovCisjZGVmaW5lIHBwX2NfYmFzZShQUCkgIChQUCkKKworZXh0ZXJuIHZvaWQgcHBfY19wcmV0dHlfcHJpbnRlcl9pbml0IChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX3doaXRlc3BhY2UgKGNfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2NfbGVmdF9wYXJlbiAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19yaWdodF9wYXJlbiAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19sZWZ0X2JyYWNlIChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX3JpZ2h0X2JyYWNlIChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX2xlZnRfYnJhY2tldCAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19yaWdodF9icmFja2V0IChjX3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jX2RvdCAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19hbXBlcnNhbmQgKGNfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2Nfc3RhciAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19hcnJvdyAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19zZW1pY29sb24gKGNfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2NfY29tcGxlbWVudCAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19leGNsYW1hdGlvbiAoY19wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY19zcGFjZV9mb3JfcG9pbnRlcl9vcGVyYXRvciAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKKworLyogRGVjbGFyYXRpb25zLiAgKi8KK3ZvaWQgcHBfY190cmVlX2RlY2xfaWRlbnRpZmllciAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19mdW5jdGlvbl9kZWZpbml0aW9uIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2F0dHJpYnV0ZXMgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfYXR0cmlidXRlc19kaXNwbGF5IChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2N2X3F1YWxpZmllcnMgKGNfcHJldHR5X3ByaW50ZXIgKnBwLCBpbnQgcXVhbGlmaWVycywgYm9vbCBmdW5jX3R5cGUpOwordm9pZCBwcF9jX3R5cGVfcXVhbGlmaWVyX2xpc3QgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfcGFyYW1ldGVyX3R5cGVfbGlzdCAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19kZWNsYXJhdGlvbiAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19kZWNsYXJhdGlvbl9zcGVjaWZpZXJzIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2RlY2xhcmF0b3IgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfZGlyZWN0X2RlY2xhcmF0b3IgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2Nfc3BlY2lmaWVyX3F1YWxpZmllcl9saXN0IChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2Z1bmN0aW9uX3NwZWNpZmllciAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY190eXBlX2lkIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2RpcmVjdF9hYnN0cmFjdF9kZWNsYXJhdG9yIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX3R5cGVfc3BlY2lmaWVyIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX3N0b3JhZ2VfY2xhc3Nfc3BlY2lmaWVyIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOworLyogU3RhdGVtZW50cy4gICovCit2b2lkIHBwX2Nfc3RhdGVtZW50IChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOworLyogRXhwcmVzc2lvbnMuICAqLwordm9pZCBwcF9jX2V4cHJlc3Npb24gKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfbG9naWNhbF9vcl9leHByZXNzaW9uIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX2V4cHJlc3Npb25fbGlzdCAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19jb25zdHJ1Y3Rvcl9lbHRzIChjX3ByZXR0eV9wcmludGVyICosIHZlYzxjb25zdHJ1Y3Rvcl9lbHQsIHZhX2djPiAqKTsKK3ZvaWQgcHBfY19jYWxsX2FyZ3VtZW50X2xpc3QgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfdW5hcnlfZXhwcmVzc2lvbiAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19jYXN0X2V4cHJlc3Npb24gKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfcG9zdGZpeF9leHByZXNzaW9uIChjX3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jX3ByaW1hcnlfZXhwcmVzc2lvbiAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY19pbml0X2RlY2xhcmF0b3IgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfY29uc3RhbnQgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2NfaWRfZXhwcmVzc2lvbiAoY19wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY193c19zdHJpbmcgKGNfcHJldHR5X3ByaW50ZXIgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQgcHBfY19pZGVudGlmaWVyIChjX3ByZXR0eV9wcmludGVyICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIHBwX2Nfc3RyaW5nX2xpdGVyYWwgKGNfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7CisKK3ZvaWQgcHJpbnRfY190cmVlIChGSUxFICpmaWxlLCB0cmVlIHQpOworCisjZW5kaWYgLyogR0NDX0NfUFJFVFRZX1BSSU5URVIgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jLXRyZWUuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jLXRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWE4NzFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2MtdHJlZS5oCkBAIC0wLDAgKzEsNjcxIEBACisvKiBEZWZpbml0aW9ucyBmb3IgQyBwYXJzaW5nIGFuZCB0eXBlIGNoZWNraW5nLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DX1RSRUVfSAorI2RlZmluZSBHQ0NfQ19UUkVFX0gKKworI2luY2x1ZGUgImMtZmFtaWx5L2MtY29tbW9uLmgiCisjaW5jbHVkZSAiZGlhZ25vc3RpYy5oIgorCisvKiBzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyIGlzIHByaXZhdGUgdG8gYy1kZWNsLmMsIGJ1dCBsYW5naG9va3MuYyBuZWVkcyB0bworICAga25vdyBob3cgYmlnIGl0IGlzLiAgVGhpcyBpcyBzYW5pdHktY2hlY2tlZCBpbiBjLWRlY2wuYy4gICovCisjZGVmaW5lIENfU0laRU9GX1NUUlVDVF9MQU5HX0lERU5USUZJRVIgXAorICAoc2l6ZW9mIChzdHJ1Y3QgY19jb21tb25faWRlbnRpZmllcikgKyAzICogc2l6ZW9mICh2b2lkICopKQorCisvKiBJbiBhIFJFQ09SRF9UWVBFIG9yIFVOSU9OX1RZUEUsIG5vbnplcm8gaWYgYW55IGNvbXBvbmVudCBpcyByZWFkLW9ubHkuICAqLworI2RlZmluZSBDX1RZUEVfRklFTERTX1JFQURPTkxZKFRZUEUpIFRSRUVfTEFOR19GTEFHXzEgKFRZUEUpCisKKy8qIEluIGEgUkVDT1JEX1RZUEUgb3IgVU5JT05fVFlQRSwgbm9uemVybyBpZiBhbnkgY29tcG9uZW50IGlzIHZvbGF0aWxlLiAgKi8KKyNkZWZpbmUgQ19UWVBFX0ZJRUxEU19WT0xBVElMRShUWVBFKSBUUkVFX0xBTkdfRkxBR18yIChUWVBFKQorCisvKiBJbiBhIFJFQ09SRF9UWVBFIG9yIFVOSU9OX1RZUEUgb3IgRU5VTUVSQUxfVFlQRQorICAgbm9uemVybyBpZiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgdHlwZSBoYXMgYWxyZWFkeSBzdGFydGVkLiAgKi8KKyNkZWZpbmUgQ19UWVBFX0JFSU5HX0RFRklORUQoVFlQRSkgVFlQRV9MQU5HX0ZMQUdfMCAoVFlQRSkKKworLyogSW4gYW4gaW5jb21wbGV0ZSBSRUNPUkRfVFlQRSBvciBVTklPTl9UWVBFLCBhIGxpc3Qgb2YgdmFyaWFibGUKKyAgIGRlY2xhcmF0aW9ucyB3aG9zZSB0eXBlIHdvdWxkIGJlIGNvbXBsZXRlZCBieSBjb21wbGV0aW5nIHRoYXQgdHlwZS4gICovCisjZGVmaW5lIENfVFlQRV9JTkNPTVBMRVRFX1ZBUlMoVFlQRSkgVFlQRV9WRklFTEQgKFRZUEUpCisKKy8qIEluIGFuIElERU5USUZJRVJfTk9ERSwgbm9uemVybyBpZiB0aGlzIGlkZW50aWZpZXIgaXMgYWN0dWFsbHkgYQorICAga2V5d29yZC4gIENfUklEX0NPREUgKG5vZGUpIGlzIHRoZW4gdGhlIFJJRF8qIHZhbHVlIG9mIHRoZSBrZXl3b3JkLAorICAgYW5kIENfUklEX1lZQ09ERSBpcyB0aGUgdG9rZW4gbnVtYmVyIHdhbnRlZCBieSBZYWNjLiAgKi8KKyNkZWZpbmUgQ19JU19SRVNFUlZFRF9XT1JEKElEKSBUUkVFX0xBTkdfRkxBR18wIChJRCkKKworLyogUmVjb3JkIHdoZXRoZXIgYSB0eXBlIG9yIGRlY2wgd2FzIHdyaXR0ZW4gd2l0aCBub25jb25zdGFudCBzaXplLgorICAgTm90ZSB0aGF0IFRZUEVfU0laRSBtYXkgaGF2ZSBzaW1wbGlmaWVkIHRvIGEgY29uc3RhbnQuICAqLworI2RlZmluZSBDX1RZUEVfVkFSSUFCTEVfU0laRShUWVBFKSBUWVBFX0xBTkdfRkxBR18xIChUWVBFKQorI2RlZmluZSBDX0RFQ0xfVkFSSUFCTEVfU0laRShUWVBFKSBERUNMX0xBTkdfRkxBR18wIChUWVBFKQorCisvKiBSZWNvcmQgd2hldGhlciBhIHR5cGUgaXMgZGVmaW5lZCBpbnNpZGUgYSBzdHJ1Y3Qgb3IgdW5pb24gdHlwZS4KKyAgIFRoaXMgaXMgdXNlZCBmb3IgLVdjKystY29tcGF0LiAqLworI2RlZmluZSBDX1RZUEVfREVGSU5FRF9JTl9TVFJVQ1QoVFlQRSkgVFlQRV9MQU5HX0ZMQUdfMiAoVFlQRSkKKworLyogUmVjb3JkIHdoZXRoZXIgYSB0eXBlZGVmIGZvciB0eXBlIGBpbnQnIHdhcyBhY3R1YWxseSBgc2lnbmVkIGludCcuICAqLworI2RlZmluZSBDX1RZUEVERUZfRVhQTElDSVRMWV9TSUdORUQoRVhQKSBERUNMX0xBTkdfRkxBR18xIChFWFApCisKKy8qIEZvciBhIEZVTkNUSU9OX0RFQ0wsIG5vbnplcm8gaWYgaXQgd2FzIGRlZmluZWQgd2l0aG91dCBhbiBleHBsaWNpdAorICAgcmV0dXJuIHR5cGUuICAqLworI2RlZmluZSBDX0ZVTkNUSU9OX0lNUExJQ0lUX0lOVChFWFApIERFQ0xfTEFOR19GTEFHXzEgKEVYUCkKKworLyogRm9yIGEgRlVOQ1RJT05fREVDTCwgbm9uemVybyBpZiBpdCB3YXMgYW4gaW1wbGljaXQgZGVjbGFyYXRpb24uICAqLworI2RlZmluZSBDX0RFQ0xfSU1QTElDSVQoRVhQKSBERUNMX0xBTkdfRkxBR18yIChFWFApCisKKy8qIEZvciBGVU5DVElPTl9ERUNMcywgZXZhbHVhdGVzIHRydWUgaWYgdGhlIGRlY2wgaXMgYnVpbHQtaW4gYnV0IGhhcworICAgYmVlbiBkZWNsYXJlZC4gICovCisjZGVmaW5lIENfREVDTF9ERUNMQVJFRF9CVUlMVElOKEVYUCkJCVwKKyAgREVDTF9MQU5HX0ZMQUdfMyAoRlVOQ1RJT05fREVDTF9DSEVDSyAoRVhQKSkKKworLyogRm9yIEZVTkNUSU9OX0RFQ0xzLCBldmFsdWF0ZXMgdHJ1ZSBpZiB0aGUgZGVjbCBpcyBidWlsdC1pbiwgaGFzIGEKKyAgIGJ1aWx0LWluIHByb3RvdHlwZSBhbmQgZG9lcyBub3QgaGF2ZSBhIG5vbi1idWlsdC1pbiBwcm90b3R5cGUuICAqLworI2RlZmluZSBDX0RFQ0xfQlVJTFRJTl9QUk9UT1RZUEUoRVhQKQkJXAorICBERUNMX0xBTkdfRkxBR182IChGVU5DVElPTl9ERUNMX0NIRUNLIChFWFApKQorCisvKiBSZWNvcmQgd2hldGhlciBhIGRlY2wgd2FzIGRlY2xhcmVkIHJlZ2lzdGVyLiAgVGhpcyBpcyBzdHJpY3RseSBhCisgICBmcm9udC1lbmQgZmxhZywgd2hlcmVhcyBERUNMX1JFR0lTVEVSIGlzIHVzZWQgZm9yIGNvZGUgZ2VuZXJhdGlvbjsKKyAgIHRoZXkgbWF5IGRpZmZlciBmb3Igc3RydWN0dXJlcyB3aXRoIHZvbGF0aWxlIGZpZWxkcy4gICovCisjZGVmaW5lIENfREVDTF9SRUdJU1RFUihFWFApIERFQ0xfTEFOR19GTEFHXzQgKEVYUCkKKworLyogUmVjb3JkIHdoZXRoZXIgYSBkZWNsIHdhcyB1c2VkIGluIGFuIGV4cHJlc3Npb24gYW55d2hlcmUgZXhjZXB0IGFuCisgICB1bmV2YWx1YXRlZCBvcGVyYW5kIG9mIHNpemVvZiAvIHR5cGVvZiAvIGFsaWdub2YuICBUaGlzIGlzIG9ubHkKKyAgIHVzZWQgZm9yIGZ1bmN0aW9ucyBkZWNsYXJlZCBzdGF0aWMgYnV0IG5vdCBkZWZpbmVkLCB0aG91Z2ggb3V0c2lkZQorICAgc2l6ZW9mIGFuZCB0eXBlb2YgaXQgaXMgc2V0IGZvciBvdGhlciBmdW5jdGlvbiBkZWNscyBhcyB3ZWxsLiAgKi8KKyNkZWZpbmUgQ19ERUNMX1VTRUQoRVhQKSBERUNMX0xBTkdfRkxBR181IChGVU5DVElPTl9ERUNMX0NIRUNLIChFWFApKQorCisvKiBSZWNvcmQgd2hldGhlciBhIHZhcmlhYmxlIGhhcyBiZWVuIGRlY2xhcmVkIHRocmVhZHByaXZhdGUgYnkKKyAgICNwcmFnbWEgb21wIHRocmVhZHByaXZhdGUuICAqLworI2RlZmluZSBDX0RFQ0xfVEhSRUFEUFJJVkFURV9QKERFQ0wpIERFQ0xfTEFOR19GTEFHXzMgKFZBUl9ERUNMX0NIRUNLIChERUNMKSkKKworLyogTm9uemVybyBmb3IgYSBkZWNsIHdoaWNoIGVpdGhlciBkb2Vzbid0IGV4aXN0IG9yIGlzbid0IGEgcHJvdG90eXBlLgorICAgTi5CLiBDb3VsZCBiZSBzaW1wbGlmaWVkIGlmIGFsbCBidWlsdC1pbiBkZWNscyBoYWQgY29tcGxldGUgcHJvdG90eXBlcworICAgKGJ1dCB0aGlzIGlzIHByZXNlbnRseSBkaWZmaWN1bHQgYmVjYXVzZSBzb21lIG9mIHRoZW0gbmVlZCBGSUxFKikuICAqLworI2RlZmluZSBDX0RFQ0xfSVNOVF9QUk9UT1RZUEUoRVhQKQkJCVwKKyAgICAgICAoRVhQID09IDAJCQkJCVwKKwl8fCAoIXByb3RvdHlwZV9wIChUUkVFX1RZUEUgKEVYUCkpCVwKKwkgICAgJiYgIURFQ0xfQlVJTFRfSU4gKEVYUCkpKQorCisvKiBGb3IgRlVOQ1RJT05fVFlQRSwgYSBoaWRkZW4gbGlzdCBvZiB0eXBlcyBvZiBhcmd1bWVudHMuICBUaGUgc2FtZSBhcworICAgVFlQRV9BUkdfVFlQRVMgZm9yIGZ1bmN0aW9ucyB3aXRoIHByb3RvdHlwZXMsIGJ1dCBjcmVhdGVkIGZvciBmdW5jdGlvbnMKKyAgIHdpdGhvdXQgcHJvdG90eXBlcy4gICovCisjZGVmaW5lIFRZUEVfQUNUVUFMX0FSR19UWVBFUyhOT0RFKSBUWVBFX0xBTkdfU0xPVF8xIChOT0RFKQorCisvKiBGb3IgYSBDT05TVFJVQ1RPUiwgd2hldGhlciBzb21lIGluaXRpYWxpemVyIGNvbnRhaW5zIGEKKyAgIHN1YmV4cHJlc3Npb24gbWVhbmluZyBpdCBpcyBub3QgYSBjb25zdGFudCBleHByZXNzaW9uLiAgKi8KKyNkZWZpbmUgQ09OU1RSVUNUT1JfTk9OX0NPTlNUKEVYUFIpIFRSRUVfTEFOR19GTEFHXzEgKENPTlNUUlVDVE9SX0NIRUNLIChFWFBSKSkKKworLyogUmVjb3JkIHBhcnNlciBpbmZvcm1hdGlvbiBhYm91dCBhbiBleHByZXNzaW9uIHRoYXQgaXMgaXJyZWxldmFudAorICAgZm9yIGNvZGUgZ2VuZXJhdGlvbiBhbG9uZ3NpZGUgYSB0cmVlIHJlcHJlc2VudGluZyBpdHMgdmFsdWUuICAqLworc3RydWN0IGNfZXhwcgoreworICAvKiBUaGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uICAqLworICB0cmVlIHZhbHVlOworICAvKiBSZWNvcmQgdGhlIG9yaWdpbmFsIHVuYXJ5L2JpbmFyeSBvcGVyYXRvciBvZiBhbiBleHByZXNzaW9uLCB3aGljaCBtYXkKKyAgICAgaGF2ZSBiZWVuIGNoYW5nZWQgYnkgZm9sZCwgU1RSSU5HX0NTVCBmb3IgdW5wYXJlbnRoZXNpemVkIHN0cmluZworICAgICBjb25zdGFudHMsIENfTUFZQkVfQ09OU1RfRVhQUiBmb3IgX19idWlsdGluX2NvbnN0YW50X3AgY2FsbHMKKyAgICAgKGV2ZW4gaWYgcGFyZW50aGVzaXplZCksIGZvciBzdWJleHByZXNzaW9ucywgYW5kIGZvciBub24tY29uc3RhbnQKKyAgICAgaW5pdGlhbGl6ZXJzLCBvciBFUlJPUl9NQVJLIGZvciBvdGhlciBleHByZXNzaW9ucyAoaW5jbHVkaW5nCisgICAgIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbnMpLiAgKi8KKyAgZW51bSB0cmVlX2NvZGUgb3JpZ2luYWxfY29kZTsKKyAgLyogSWYgbm90IE5VTEwsIHRoZSBvcmlnaW5hbCB0eXBlIG9mIGFuIGV4cHJlc3Npb24uICBUaGlzIHdpbGwKKyAgICAgZGlmZmVyIGZyb20gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGZpZWxkIGZvciBhbiBlbnVtIGNvbnN0YW50LgorICAgICBUaGUgdHlwZSBvZiBhbiBlbnVtIGNvbnN0YW50IGlzIGEgcGxhaW4gaW50ZWdlciB0eXBlLCBidXQgdGhpcworICAgICBmaWVsZCB3aWxsIGJlIHRoZSBlbnVtIHR5cGUuICAqLworICB0cmVlIG9yaWdpbmFsX3R5cGU7Cit9OworCisvKiBUeXBlIGFsaWFzIGZvciBzdHJ1Y3QgY19leHByLiBUaGlzIGFsbG93cyB0byB1c2UgdGhlIHN0cnVjdHVyZQorICAgaW5zaWRlIHRoZSBWRUMgdHlwZXMuICAqLwordHlwZWRlZiBzdHJ1Y3QgY19leHByIGNfZXhwcl90OworCisvKiBBIHZhcnJheSBvZiBjX2V4cHJfdC4gICovCisKKy8qIEFwcGVuZCBhIG5ldyBjX2V4cHJfdCBlbGVtZW50IHRvIFYuICAqLworI2RlZmluZSBDX0VYUFJfQVBQRU5EKFYsIEVMRU0pIFwKKyAgZG8geyBcCisgICAgY19leHByX3QgX19lbGVtID0gKEVMRU0pOyBcCisgICAgdmVjX3NhZmVfcHVzaCAoViwgX19lbGVtKTsgXAorICB9IHdoaWxlICgwKQorCisvKiBBIGtpbmQgb2YgdHlwZSBzcGVjaWZpZXIuICBOb3RlIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBpcyBjdXJyZW50bHkKKyAgIG9ubHkgdXNlZCB0byBkaXN0aW5ndWlzaCB0YWcgZGVmaW5pdGlvbnMsIHRhZyByZWZlcmVuY2VzIGFuZCB0eXBlb2YKKyAgIHVzZXMuICAqLworZW51bSBjX3R5cGVzcGVjX2tpbmQgeworICAvKiBObyB0eXBlc3BlYy4gIFRoaXMgYXBwZWFycyBvbmx5IGluIHN0cnVjdCBjX2RlY2xzcGVjLiAgKi8KKyAgY3Rza19ub25lLAorICAvKiBBIHJlc2VydmVkIGtleXdvcmQgdHlwZSBzcGVjaWZpZXIuICAqLworICBjdHNrX3Jlc3dvcmQsCisgIC8qIEEgcmVmZXJlbmNlIHRvIGEgdGFnLCBwcmV2aW91c2x5IGRlY2xhcmVkLCBzdWNoIGFzICJzdHJ1Y3QgZm9vIi4KKyAgICAgVGhpcyBpbmNsdWRlcyB3aGVyZSB0aGUgcHJldmlvdXMgZGVjbGFyYXRpb24gd2FzIGFzIGEgZGlmZmVyZW50CisgICAgIGtpbmQgb2YgdGFnLCBpbiB3aGljaCBjYXNlIHRoaXMgaXMgb25seSB2YWxpZCBpZiBzaGFkb3dpbmcgdGhhdAorICAgICB0YWcgaW4gYW4gaW5uZXIgc2NvcGUuICAqLworICBjdHNrX3RhZ3JlZiwKKyAgLyogQSByZWZlcmVuY2UgdG8gYSB0YWcsIG5vdCBwcmV2aW91c2x5IGRlY2xhcmVkIGluIGEgdmlzaWJsZQorICAgICBzY29wZS4gICovCisgIGN0c2tfdGFnZmlyc3RyZWYsCisgIC8qIEEgZGVmaW5pdGlvbiBvZiBhIHRhZyBzdWNoIGFzICJzdHJ1Y3QgZm9vIHsgaW50IGE7IH0iLiAgKi8KKyAgY3Rza190YWdkZWYsCisgIC8qIEEgdHlwZWRlZiBuYW1lLiAgKi8KKyAgY3Rza190eXBlZGVmLAorICAvKiBBbiBPYmpDLXNwZWNpZmljIGtpbmQgb2YgdHlwZSBzcGVjaWZpZXIuICAqLworICBjdHNrX29iamMsCisgIC8qIEEgdHlwZW9mIHNwZWNpZmllci4gICovCisgIGN0c2tfdHlwZW9mCit9OworCisvKiBBIHR5cGUgc3BlY2lmaWVyOiB0aGlzIHN0cnVjdHVyZSBpcyBjcmVhdGVkIGluIHRoZSBwYXJzZXIgYW5kCisgICBwYXNzZWQgdG8gZGVjbHNwZWNzX2FkZF90eXBlIG9ubHkuICAqLworc3RydWN0IGNfdHlwZXNwZWMgeworICAvKiBXaGF0IGtpbmQgb2YgdHlwZSBzcGVjaWZpZXIgdGhpcyBpcy4gICovCisgIGVudW0gY190eXBlc3BlY19raW5kIGtpbmQ7CisgIC8qIFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gaGFzIG9wZXJhbmRzIHN1aXRhYmxlIGZvciB1c2UgaW4gY29uc3RhbnQKKyAgICAgZXhwcmVzc2lvbnMuICAqLworICBib29sIGV4cHJfY29uc3Rfb3BlcmFuZHM7CisgIC8qIFRoZSBzcGVjaWZpZXIgaXRzZWxmLiAgKi8KKyAgdHJlZSBzcGVjOworICAvKiBBbiBleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBiZWZvcmUgdGhlIHR5cGUgc3BlY2lmaWVyLCBpbiB0aGUKKyAgICAgY2FzZSBvZiB0eXBlb2Ygc3BlY2lmaWVycywgb3IgTlVMTCBvdGhlcndpc2Ugb3IgaWYgbm8gc3VjaAorICAgICBleHByZXNzaW9uIGlzIHJlcXVpcmVkIGZvciBhIHBhcnRpY3VsYXIgdHlwZW9mIHNwZWNpZmllci4gIEluCisgICAgIHBhcnRpY3VsYXIsIHdoZW4gdHlwZW9mIGlzIGFwcGxpZWQgdG8gYW4gZXhwcmVzc2lvbiBvZiB2YXJpYWJseQorICAgICBtb2RpZmllZCB0eXBlLCB0aGF0IGV4cHJlc3Npb24gbXVzdCBiZSBldmFsdWF0ZWQgaW4gb3JkZXIgdG8KKyAgICAgZGV0ZXJtaW5lIGFycmF5IHNpemVzIHRoYXQgZm9ybSBwYXJ0IG9mIHRoZSB0eXBlLCBidXQgdGhlCisgICAgIGV4cHJlc3Npb24gaXRzZWxmIChhcyBvcHBvc2VkIHRvIHRoZSBhcnJheSBzaXplcykgZm9ybXMgbm8gcGFydAorICAgICBvZiB0aGUgdHlwZSBhbmQgc28gbmVlZHMgdG8gYmUgcmVjb3JkZWQgc2VwYXJhdGVseS4gICovCisgIHRyZWUgZXhwcjsKK307CisKKy8qIEEgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIuICAqLworZW51bSBjX3N0b3JhZ2VfY2xhc3MgeworICBjc2Nfbm9uZSwKKyAgY3NjX2F1dG8sCisgIGNzY19leHRlcm4sCisgIGNzY19yZWdpc3RlciwKKyAgY3NjX3N0YXRpYywKKyAgY3NjX3R5cGVkZWYKK307CisKKy8qIEEgdHlwZSBzcGVjaWZpZXIga2V5d29yZCAidm9pZCIsICJfQm9vbCIsICJjaGFyIiwgImludCIsICJmbG9hdCIsCisgICAiZG91YmxlIiwgIl9EZWNpbWFsMzIiLCAiX0RlY2ltYWw2NCIsICJfRGVjaW1hbDEyOCIsICJfRnJhY3QiLCAiX0FjY3VtIiwKKyAgIG9yIG5vbmUgb2YgdGhlc2UuICAqLworZW51bSBjX3R5cGVzcGVjX2tleXdvcmQgeworICBjdHNfbm9uZSwKKyAgY3RzX3ZvaWQsCisgIGN0c19ib29sLAorICBjdHNfY2hhciwKKyAgY3RzX2ludCwKKyAgY3RzX2Zsb2F0LAorICBjdHNfaW50MTI4LAorICBjdHNfZG91YmxlLAorICBjdHNfZGZsb2F0MzIsCisgIGN0c19kZmxvYXQ2NCwKKyAgY3RzX2RmbG9hdDEyOCwKKyAgY3RzX2ZyYWN0LAorICBjdHNfYWNjdW0KK307CisKKy8qIFRoaXMgZW51bSBsaXN0cyBhbGwgdGhlIHBvc3NpYmxlIGRlY2xhcmF0b3Igc3BlY2lmaWVycywgc3RvcmFnZQorICAgY2xhc3Mgb3IgYXR0cmlidXRlIHRoYXQgYSB1c2VyIGNhbiB3cml0ZS4gIFRoZXJlIGlzIGF0IGxlYXN0IG9uZQorICAgZW51bWVyYXRvciBwZXIgcG9zc2libGUgZGVjbGFyYXRvciBzcGVjaWZpZXIgaW4gdGhlIHN0cnVjdAorICAgY19kZWNsc3BlY3MgYmVsb3cuCisKKyAgIEl0IGlzIHVzZWQgdG8gaW5kZXggdGhlIGFycmF5IG9mIGRlY2xzcGVjIGxvY2F0aW9ucyBpbiBzdHJ1Y3QKKyAgIGNfZGVjbHNwZWNzLiAgKi8KK2VudW0gY19kZWNsc3BlY193b3JkIHsKKyAgY2R3X3R5cGVzcGVjIC8qIEEgY2F0Y2gtYWxsIGZvciBhIHR5cGVzcGVjLiAgKi8sCisgIGNkd19zdG9yYWdlX2NsYXNzICAvKiBBIGNhdGNoLWFsbCBmb3IgYSBzdG9yYWdlIGNsYXNzICovLAorICBjZHdfYXR0cmlidXRlcywKKyAgY2R3X3R5cGVkZWYsCisgIGNkd19leHBsaWNpdF9zaWduZWQsCisgIGNkd19kZXByZWNhdGVkLAorICBjZHdfZGVmYXVsdF9pbnQsCisgIGNkd19sb25nLAorICBjZHdfbG9uZ19sb25nLAorICBjZHdfc2hvcnQsCisgIGNkd19zaWduZWQsCisgIGNkd191bnNpZ25lZCwKKyAgY2R3X2NvbXBsZXgsCisgIGNkd19pbmxpbmUsCisgIGNkd19ub3JldHVybiwKKyAgY2R3X3RocmVhZCwKKyAgY2R3X2NvbnN0LAorICBjZHdfdm9sYXRpbGUsCisgIGNkd19yZXN0cmljdCwKKyAgY2R3X3NhdHVyYXRpbmcsCisgIGNkd19hbGlnbmFzLAorICBjZHdfYWRkcmVzc19zcGFjZSwKKyAgY2R3X251bWJlcl9vZl9lbGVtZW50cyAvKiBUaGlzIG9uZSBtdXN0IGFsd2F5cyBiZSB0aGUgbGFzdAorCQkJICAgIGVudW1lcmF0b3IuICAqLworfTsKKworLyogQSBzZXF1ZW5jZSBvZiBkZWNsYXJhdGlvbiBzcGVjaWZpZXJzIGluIEMuICBXaGVuIGEgbmV3IGRlY2xhcmF0aW9uCisgICBzcGVjaWZpZXIgaXMgYWRkZWQsIHBsZWFzZSB1cGRhdGUgdGhlIGVudW0gY19kZWNsc3BlY193b3JkIGFib3ZlCisgICBhY2NvcmRpbmdseS4gICovCitzdHJ1Y3QgY19kZWNsc3BlY3MgeworICBzb3VyY2VfbG9jYXRpb24gbG9jYXRpb25zW2Nkd19udW1iZXJfb2ZfZWxlbWVudHNdOworICAvKiBUaGUgdHlwZSBzcGVjaWZpZWQsIGlmIGEgc2luZ2xlIHR5cGUgc3BlY2lmaWVyIHN1Y2ggYXMgYSBzdHJ1Y3QsCisgICAgIHVuaW9uIG9yIGVudW0gc3BlY2lmaWVyLCB0eXBlZGVmIG5hbWUgb3IgdHlwZW9mIHNwZWNpZmllcyB0aGUKKyAgICAgd2hvbGUgdHlwZSwgb3IgTlVMTF9UUkVFIGlmIG5vbmUgb3IgYSBrZXl3b3JkIHN1Y2ggYXMgInZvaWQiIG9yCisgICAgICJjaGFyIiBpcyB1c2VkLiAgRG9lcyBub3QgaW5jbHVkZSBxdWFsaWZpZXJzLiAgKi8KKyAgdHJlZSB0eXBlOworICAvKiBBbnkgZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgYmVmb3JlIHRoZSB0eXBlLCBmcm9tIGEgdHlwZW9mCisgICAgIHNwZWNpZmllci4gICovCisgIHRyZWUgZXhwcjsKKyAgLyogVGhlIGF0dHJpYnV0ZXMgZnJvbSBhIHR5cGVkZWYgZGVjbC4gICovCisgIHRyZWUgZGVjbF9hdHRyOworICAvKiBXaGVuIHBhcnNpbmcsIHRoZSBhdHRyaWJ1dGVzLiAgT3V0c2lkZSB0aGUgcGFyc2VyLCB0aGlzIHdpbGwgYmUKKyAgICAgTlVMTDsgYXR0cmlidXRlcyAocG9zc2libHkgZnJvbSBtdWx0aXBsZSBsaXN0cykgd2lsbCBiZSBwYXNzZWQKKyAgICAgc2VwYXJhdGVseS4gICovCisgIHRyZWUgYXR0cnM7CisgIC8qIFRoZSBiYXNlLTIgbG9nIG9mIHRoZSBncmVhdGVzdCBhbGlnbm1lbnQgcmVxdWlyZWQgYnkgYW4gX0FsaWduYXMKKyAgICAgc3BlY2lmaWVyLCBpbiBieXRlcywgb3IgLTEgaWYgbm8gc3VjaCBzcGVjaWZpZXJzIHdpdGggbm9uemVybworICAgICBhbGlnbm1lbnQuICAqLworICBpbnQgYWxpZ25fbG9nOworICAvKiBUaGUgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIsIG9yIGNzY19ub25lIGlmIG5vbmUuICAqLworICBlbnVtIGNfc3RvcmFnZV9jbGFzcyBzdG9yYWdlX2NsYXNzOworICAvKiBBbnkgdHlwZSBzcGVjaWZpZXIga2V5d29yZCB1c2VkIHN1Y2ggYXMgImludCIsIG5vdCByZWZsZWN0aW5nCisgICAgIG1vZGlmaWVycyBzdWNoIGFzICJzaG9ydCIsIG9yIGN0c19ub25lIGlmIG5vbmUuICAqLworICBFTlVNX0JJVEZJRUxEIChjX3R5cGVzcGVjX2tleXdvcmQpIHR5cGVzcGVjX3dvcmQgOiA4OworICAvKiBUaGUga2luZCBvZiB0eXBlIHNwZWNpZmllciBpZiBvbmUgaGFzIGJlZW4gc2VlbiwgY3Rza19ub25lCisgICAgIG90aGVyd2lzZS4gICovCisgIEVOVU1fQklURklFTEQgKGNfdHlwZXNwZWNfa2luZCkgdHlwZXNwZWNfa2luZCA6IDM7CisgIC8qIFdoZXRoZXIgYW55IGV4cHJlc3Npb25zIGluIHR5cGVvZiBzcGVjaWZpZXJzIG1heSBhcHBlYXIgaW4KKyAgICAgY29uc3RhbnQgZXhwcmVzc2lvbnMuICAqLworICBCT09MX0JJVEZJRUxEIGV4cHJfY29uc3Rfb3BlcmFuZHMgOiAxOworICAvKiBXaGV0aGVyIGFueSBkZWNsYXJhdGlvbiBzcGVjaWZpZXJzIGhhdmUgYmVlbiBzZWVuIGF0IGFsbC4gICovCisgIEJPT0xfQklURklFTEQgZGVjbHNwZWNzX3NlZW5fcCA6IDE7CisgIC8qIFdoZXRoZXIgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBzdG9yYWdlIGNsYXNzIHNwZWNpZmllciBvcgorICAgICBhdHRyaWJ1dGUgaGFzIGJlZW4gc2Vlbi4gIFRoaXMgaXMgdXNlZCB0byB3YXJuIGZvciB0aGUKKyAgICAgb2Jzb2xlc2NlbnQgdXNhZ2Ugb2Ygc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXJzIG90aGVyIHRoYW4gYXQgdGhlCisgICAgIHN0YXJ0IG9mIHRoZSBsaXN0LiAgKERvaW5nIHRoaXMgcHJvcGVybHkgd291bGQgcmVxdWlyZSBmdW5jdGlvbgorICAgICBzcGVjaWZpZXJzIHRvIGJlIGhhbmRsZWQgc2VwYXJhdGVseSBmcm9tIHN0b3JhZ2UgY2xhc3MKKyAgICAgc3BlY2lmaWVycy4pICAqLworICBCT09MX0JJVEZJRUxEIG5vbl9zY19zZWVuX3AgOiAxOworICAvKiBXaGV0aGVyIHRoZSB0eXBlIGlzIHNwZWNpZmllZCBieSBhIHR5cGVkZWYgb3IgdHlwZW9mIG5hbWUuICAqLworICBCT09MX0JJVEZJRUxEIHR5cGVkZWZfcCA6IDE7CisgIC8qIFdoZXRoZXIgdGhlIHR5cGUgaXMgZXhwbGljaXRseSAic2lnbmVkIiBvciBzcGVjaWZpZWQgYnkgYSB0eXBlZGVmCisgICAgIHdob3NlIHR5cGUgaXMgZXhwbGljaXRseSAic2lnbmVkIi4gICovCisgIEJPT0xfQklURklFTEQgZXhwbGljaXRfc2lnbmVkX3AgOiAxOworICAvKiBXaGV0aGVyIHRoZSBzcGVjaWZpZXJzIGluY2x1ZGUgYSBkZXByZWNhdGVkIHR5cGVkZWYuICAqLworICBCT09MX0JJVEZJRUxEIGRlcHJlY2F0ZWRfcCA6IDE7CisgIC8qIFdoZXRoZXIgdGhlIHR5cGUgZGVmYXVsdGVkIHRvICJpbnQiIGJlY2F1c2UgdGhlcmUgd2VyZSBubyB0eXBlCisgICAgIHNwZWNpZmllcnMuICAqLworICBCT09MX0JJVEZJRUxEIGRlZmF1bHRfaW50X3AgOiAxOworICAvKiBXaGV0aGVyICJsb25nIiB3YXMgc3BlY2lmaWVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBsb25nX3AgOiAxOworICAvKiBXaGV0aGVyICJsb25nIiB3YXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBsb25nX2xvbmdfcCA6IDE7CisgIC8qIFdoZXRoZXIgInNob3J0IiB3YXMgc3BlY2lmaWVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBzaG9ydF9wIDogMTsKKyAgLyogV2hldGhlciAic2lnbmVkIiB3YXMgc3BlY2lmaWVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBzaWduZWRfcCA6IDE7CisgIC8qIFdoZXRoZXIgInVuc2lnbmVkIiB3YXMgc3BlY2lmaWVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCB1bnNpZ25lZF9wIDogMTsKKyAgLyogV2hldGhlciAiY29tcGxleCIgd2FzIHNwZWNpZmllZC4gICovCisgIEJPT0xfQklURklFTEQgY29tcGxleF9wIDogMTsKKyAgLyogV2hldGhlciAiaW5saW5lIiB3YXMgc3BlY2lmaWVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBpbmxpbmVfcCA6IDE7CisgIC8qIFdoZXRoZXIgIl9Ob3JldHVybiIgd2FzIHNwZWNpaWVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBub3JldHVybl9wIDogMTsKKyAgLyogV2hldGhlciAiX190aHJlYWQiIHdhcyBzcGVjaWZpZWQuICAqLworICBCT09MX0JJVEZJRUxEIHRocmVhZF9wIDogMTsKKyAgLyogV2hldGhlciAiY29uc3QiIHdhcyBzcGVjaWZpZWQuICAqLworICBCT09MX0JJVEZJRUxEIGNvbnN0X3AgOiAxOworICAvKiBXaGV0aGVyICJ2b2xhdGlsZSIgd2FzIHNwZWNpZmllZC4gICovCisgIEJPT0xfQklURklFTEQgdm9sYXRpbGVfcCA6IDE7CisgIC8qIFdoZXRoZXIgInJlc3RyaWN0IiB3YXMgc3BlY2lmaWVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCByZXN0cmljdF9wIDogMTsKKyAgLyogV2hldGhlciAiX1NhdCIgd2FzIHNwZWNpZmllZC4gICovCisgIEJPT0xfQklURklFTEQgc2F0dXJhdGluZ19wIDogMTsKKyAgLyogV2hldGhlciBhbnkgYWxpZ25tZW50IHNwZWNpZmllciAoZXZlbiB3aXRoIHplcm8gYWxpZ25tZW50KSB3YXMKKyAgICAgc3BlY2lmaWVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBhbGlnbmFzX3AgOiAxOworICAvKiBUaGUgYWRkcmVzcyBzcGFjZSB0aGF0IHRoZSBkZWNsYXJhdGlvbiBiZWxvbmdzIHRvLiAgKi8KKyAgYWRkcl9zcGFjZV90IGFkZHJlc3Nfc3BhY2U7Cit9OworCisvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBkZWNsYXJhdG9ycyBpbiBDLiAgKi8KK2VudW0gY19kZWNsYXJhdG9yX2tpbmQgeworICAvKiBBbiBpZGVudGlmaWVyLiAgKi8KKyAgY2RrX2lkLAorICAvKiBBIGZ1bmN0aW9uLiAgKi8KKyAgY2RrX2Z1bmN0aW9uLAorICAvKiBBbiBhcnJheS4gICovCisgIGNka19hcnJheSwKKyAgLyogQSBwb2ludGVyLiAgKi8KKyAgY2RrX3BvaW50ZXIsCisgIC8qIFBhcmVudGhlc2l6ZWQgZGVjbGFyYXRvciB3aXRoIG5lc3RlZCBhdHRyaWJ1dGVzLiAgKi8KKyAgY2RrX2F0dHJzCit9OworCit0eXBlZGVmIHN0cnVjdCBjX2FyZ190YWdfZCB7CisgIC8qIFRoZSBhcmd1bWVudCBuYW1lLiAgKi8KKyAgdHJlZSBpZDsKKyAgLyogVGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LiAgKi8KKyAgdHJlZSB0eXBlOworfSBjX2FyZ190YWc7CisKKworLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlcnMgaW4gYSBmdW5jdGlvbiBkZWNsYXJhdG9yLiAgKi8KK3N0cnVjdCBjX2FyZ19pbmZvIHsKKyAgLyogQSBsaXN0IG9mIHBhcmFtZXRlciBkZWNscy4gICovCisgIHRyZWUgcGFybXM7CisgIC8qIEEgbGlzdCBvZiBzdHJ1Y3R1cmUsIHVuaW9uIGFuZCBlbnVtIHRhZ3MgZGVmaW5lZC4gICovCisgIHZlYzxjX2FyZ190YWcsIHZhX2djPiAqdGFnczsKKyAgLyogQSBsaXN0IG9mIGFyZ3VtZW50IHR5cGVzIHRvIGdvIGluIHRoZSBGVU5DVElPTl9UWVBFLiAgKi8KKyAgdHJlZSB0eXBlczsKKyAgLyogQSBsaXN0IG9mIG5vbi1wYXJhbWV0ZXIgZGVjbHMgKG5vdGFibHkgZW51bWVyYXRpb24gY29uc3RhbnRzKQorICAgICBkZWZpbmVkIHdpdGggdGhlIHBhcmFtZXRlcnMuICAqLworICB0cmVlIG90aGVyczsKKyAgLyogQSBjb21wb3VuZCBleHByZXNzaW9uIG9mIFZMQSBzaXplcyBmcm9tIHRoZSBwYXJhbWV0ZXJzLCBvciBOVUxMLgorICAgICBJbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIHRoZXNlIGFyZSB1c2VkIHRvIGVuc3VyZSB0aGF0CisgICAgIHNpZGUtZWZmZWN0cyBpbiBzaXplcyBvZiBhcnJheXMgY29udmVydGVkIHRvIHBvaW50ZXJzIChzdWNoIGFzIGEKKyAgICAgcGFyYW1ldGVyIGludCBpW24rK10pIHRha2UgcGxhY2U7IG90aGVyd2lzZSwgdGhleSBhcmUKKyAgICAgaWdub3JlZC4gICovCisgIHRyZWUgcGVuZGluZ19zaXplczsKKyAgLyogVHJ1ZSB3aGVuIHRoZXNlIGFyZ3VtZW50cyBoYWQgWypdLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBoYWRfdmxhX3Vuc3BlYyA6IDE7Cit9OworCisvKiBBIGRlY2xhcmF0b3IuICAqLworc3RydWN0IGNfZGVjbGFyYXRvciB7CisgIC8qIFRoZSBraW5kIG9mIGRlY2xhcmF0b3IuICAqLworICBlbnVtIGNfZGVjbGFyYXRvcl9raW5kIGtpbmQ7CisgIGxvY2F0aW9uX3QgaWRfbG9jOyAvKiBDdXJyZW50bHkgb25seSBzZXQgZm9yIGNka19pZCwgY2RrX2FycmF5LiAqLworICAvKiBFeGNlcHQgZm9yIGNka19pZCwgdGhlIGNvbnRhaW5lZCBkZWNsYXJhdG9yLiAgRm9yIGNka19pZCwgTlVMTC4gICovCisgIHN0cnVjdCBjX2RlY2xhcmF0b3IgKmRlY2xhcmF0b3I7CisgIHVuaW9uIHsKKyAgICAvKiBGb3IgaWRlbnRpZmllcnMsIGFuIElERU5USUZJRVJfTk9ERSBvciBOVUxMX1RSRUUgaWYgYW4gYWJzdHJhY3QKKyAgICAgICBkZWNsYXJhdG9yLiAgKi8KKyAgICB0cmVlIGlkOworICAgIC8qIEZvciBmdW5jdGlvbnMuICAqLworICAgIHN0cnVjdCBjX2FyZ19pbmZvICphcmdfaW5mbzsKKyAgICAvKiBGb3IgYXJyYXlzLiAgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgLyogVGhlIGFycmF5IGRpbWVuc2lvbiwgb3IgTlVMTCBmb3IgW10gYW5kIFsqXS4gICovCisgICAgICB0cmVlIGRpbWVuOworICAgICAgLyogVGhlIHF1YWxpZmllcnMgaW5zaWRlIFtdLiAgKi8KKyAgICAgIGludCBxdWFsczsKKyAgICAgIC8qIFRoZSBhdHRyaWJ1dGVzIChjdXJyZW50bHkgaWdub3JlZCkgaW5zaWRlIFtdLiAgKi8KKyAgICAgIHRyZWUgYXR0cnM7CisgICAgICAvKiBXaGV0aGVyIFtzdGF0aWNdIHdhcyB1c2VkLiAgKi8KKyAgICAgIEJPT0xfQklURklFTEQgc3RhdGljX3AgOiAxOworICAgICAgLyogV2hldGhlciBbKl0gd2FzIHVzZWQuICAqLworICAgICAgQk9PTF9CSVRGSUVMRCB2bGFfdW5zcGVjX3AgOiAxOworICAgIH0gYXJyYXk7CisgICAgLyogRm9yIHBvaW50ZXJzLCB0aGUgcXVhbGlmaWVycyBvbiB0aGUgcG9pbnRlciB0eXBlLiAgKi8KKyAgICBpbnQgcG9pbnRlcl9xdWFsczsKKyAgICAvKiBGb3IgYXR0cmlidXRlcy4gICovCisgICAgdHJlZSBhdHRyczsKKyAgfSB1OworfTsKKworLyogQSB0eXBlIG5hbWUuICAqLworc3RydWN0IGNfdHlwZV9uYW1lIHsKKyAgLyogVGhlIGRlY2xhcmF0aW9uIHNwZWNpZmllcnMuICAqLworICBzdHJ1Y3QgY19kZWNsc3BlY3MgKnNwZWNzOworICAvKiBUaGUgZGVjbGFyYXRvci4gICovCisgIHN0cnVjdCBjX2RlY2xhcmF0b3IgKmRlY2xhcmF0b3I7Cit9OworCisvKiBBIHBhcmFtZXRlci4gICovCitzdHJ1Y3QgY19wYXJtIHsKKyAgLyogVGhlIGRlY2xhcmF0aW9uIHNwZWNpZmllcnMsIG1pbnVzIGFueSBwcmVmaXggYXR0cmlidXRlcy4gICovCisgIHN0cnVjdCBjX2RlY2xzcGVjcyAqc3BlY3M7CisgIC8qIFRoZSBhdHRyaWJ1dGVzLiAgKi8KKyAgdHJlZSBhdHRyczsKKyAgLyogVGhlIGRlY2xhcmF0b3IuICAqLworICBzdHJ1Y3QgY19kZWNsYXJhdG9yICpkZWNsYXJhdG9yOworfTsKKworLyogVXNlZCB3aGVuIHBhcnNpbmcgYW4gZW51bS4gIEluaXRpYWxpemVkIGJ5IHN0YXJ0X2VudW0uICAqLworc3RydWN0IGNfZW51bV9jb250ZW50cworeworICAvKiBXaGlsZSBkZWZpbmluZyBhbiBlbnVtIHR5cGUsIHRoaXMgaXMgMSBwbHVzIHRoZSBsYXN0IGVudW1lcmF0b3IKKyAgICAgY29uc3RhbnQgdmFsdWUuICAqLworICB0cmVlIGVudW1fbmV4dF92YWx1ZTsKKworICAvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG92ZXJmbG93IGNvbXB1dGluZyBlbnVtX25leHRfdmFsdWUuICAqLworICBpbnQgZW51bV9vdmVyZmxvdzsKK307CisKKy8qIEEgdHlwZSBvZiByZWZlcmVuY2UgdG8gYSBzdGF0aWMgaWRlbnRpZmllciBpbiBhbiBpbmxpbmUKKyAgIGZ1bmN0aW9uLiAgKi8KK2VudW0gY19pbmxpbmVfc3RhdGljX3R5cGUgeworICAvKiBJZGVudGlmaWVyIHdpdGggaW50ZXJuYWwgbGlua2FnZSB1c2VkIGluIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIGFuCisgICAgIGlubGluZSBkZWZpbml0aW9uIChpLmUuLCBmaWxlLXNjb3BlIHN0YXRpYykuICAqLworICBjc2lfaW50ZXJuYWwsCisgIC8qIE1vZGlmaWFibGUgb2JqZWN0IHdpdGggc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24gZGVmaW5lZCBpbgorICAgICBmdW5jdGlvbiB0aGF0IG1heSBiZSBhbiBpbmxpbmUgZGVmaW5pdGlvbiAoaS5lLiwgbG9jYWwKKyAgICAgc3RhdGljKS4gICovCisgIGNzaV9tb2RpZmlhYmxlCit9OworCisMCisvKiBpbiBjLXBhcnNlci5jICovCitleHRlcm4gdm9pZCBjX3BhcnNlX2luaXQgKHZvaWQpOworCisvKiBpbiBjLWF1eC1pbmZvLmMgKi8KK2V4dGVybiB2b2lkIGdlbl9hdXhfaW5mb19yZWNvcmQgKHRyZWUsIGludCwgaW50LCBpbnQpOworCisvKiBpbiBjLWRlY2wuYyAqLworc3RydWN0IGNfc3BvdF9iaW5kaW5nczsKK3N0cnVjdCBjX3N0cnVjdF9wYXJzZV9pbmZvOworZXh0ZXJuIHN0cnVjdCBvYnN0YWNrIHBhcnNlcl9vYnN0YWNrOworZXh0ZXJuIHRyZWUgY19icmVha19sYWJlbDsKK2V4dGVybiB0cmVlIGNfY29udF9sYWJlbDsKKworZXh0ZXJuIGJvb2wgZ2xvYmFsX2JpbmRpbmdzX3AgKHZvaWQpOworZXh0ZXJuIHZvaWQgcHVzaF9zY29wZSAodm9pZCk7CitleHRlcm4gdHJlZSBwb3Bfc2NvcGUgKHZvaWQpOworZXh0ZXJuIHZvaWQgY19iaW5kaW5nc19zdGFydF9zdG10X2V4cHIgKHN0cnVjdCBjX3Nwb3RfYmluZGluZ3MgKik7CitleHRlcm4gdm9pZCBjX2JpbmRpbmdzX2VuZF9zdG10X2V4cHIgKHN0cnVjdCBjX3Nwb3RfYmluZGluZ3MgKik7CisKK2V4dGVybiB2b2lkIHJlY29yZF9pbmxpbmVfc3RhdGljIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLAorCQkJCSAgZW51bSBjX2lubGluZV9zdGF0aWNfdHlwZSk7CitleHRlcm4gdm9pZCBjX2luaXRfZGVjbF9wcm9jZXNzaW5nICh2b2lkKTsKK2V4dGVybiB2b2lkIGNfcHJpbnRfaWRlbnRpZmllciAoRklMRSAqLCB0cmVlLCBpbnQpOworZXh0ZXJuIGludCBxdWFsc19mcm9tX2RlY2xzcGVjcyAoY29uc3Qgc3RydWN0IGNfZGVjbHNwZWNzICopOworZXh0ZXJuIHN0cnVjdCBjX2RlY2xhcmF0b3IgKmJ1aWxkX2FycmF5X2RlY2xhcmF0b3IgKGxvY2F0aW9uX3QsIHRyZWUsCisgICAgCQkJCQkJICAgIHN0cnVjdCBjX2RlY2xzcGVjcyAqLAorCQkJCQkJICAgIGJvb2wsIGJvb2wpOworZXh0ZXJuIHRyZWUgYnVpbGRfZW51bWVyYXRvciAobG9jYXRpb25fdCwgbG9jYXRpb25fdCwgc3RydWN0IGNfZW51bV9jb250ZW50cyAqLAorCQkJICAgICAgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjaGVja19mb3JfbG9vcF9kZWNscyAobG9jYXRpb25fdCwgYm9vbCk7CitleHRlcm4gdm9pZCBtYXJrX2ZvcndhcmRfcGFybV9kZWNscyAodm9pZCk7CitleHRlcm4gdm9pZCBkZWNsYXJlX3Bhcm1fbGV2ZWwgKHZvaWQpOworZXh0ZXJuIHZvaWQgdW5kZWNsYXJlZF92YXJpYWJsZSAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBsb29rdXBfbGFiZWxfZm9yX2dvdG8gKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgZGVjbGFyZV9sYWJlbCAodHJlZSk7CitleHRlcm4gdHJlZSBkZWZpbmVfbGFiZWwgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHN0cnVjdCBjX3Nwb3RfYmluZGluZ3MgKmNfZ2V0X3N3aXRjaF9iaW5kaW5ncyAodm9pZCk7CitleHRlcm4gdm9pZCBjX3JlbGVhc2Vfc3dpdGNoX2JpbmRpbmdzIChzdHJ1Y3QgY19zcG90X2JpbmRpbmdzICopOworZXh0ZXJuIGJvb2wgY19jaGVja19zd2l0Y2hfanVtcF93YXJuaW5ncyAoc3RydWN0IGNfc3BvdF9iaW5kaW5ncyAqLAorCQkJCQkgIGxvY2F0aW9uX3QsIGxvY2F0aW9uX3QpOworZXh0ZXJuIHZvaWQgZmluaXNoX2RlY2wgKHRyZWUsIGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX2VudW0gKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2Z1bmN0aW9uICh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9zdHJ1Y3QgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUsCisJCQkgICBzdHJ1Y3QgY19zdHJ1Y3RfcGFyc2VfaW5mbyAqKTsKK2V4dGVybiBzdHJ1Y3QgY19hcmdfaW5mbyAqYnVpbGRfYXJnX2luZm8gKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBjX2FyZ19pbmZvICpnZXRfcGFybV9pbmZvIChib29sLCB0cmVlKTsKK2V4dGVybiB0cmVlIGdyb2tmaWVsZCAobG9jYXRpb25fdCwgc3RydWN0IGNfZGVjbGFyYXRvciAqLAorCQkgICAgICAgc3RydWN0IGNfZGVjbHNwZWNzICosIHRyZWUsIHRyZWUgKik7CitleHRlcm4gdHJlZSBncm9rdHlwZW5hbWUgKHN0cnVjdCBjX3R5cGVfbmFtZSAqLCB0cmVlICosIGJvb2wgKik7CitleHRlcm4gdHJlZSBncm9rcGFybSAoY29uc3Qgc3RydWN0IGNfcGFybSAqLCB0cmVlICopOworZXh0ZXJuIHRyZWUgaW1wbGljaXRseV9kZWNsYXJlIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB2b2lkIGtlZXBfbmV4dF9sZXZlbCAodm9pZCk7CitleHRlcm4gdm9pZCBwZW5kaW5nX3hyZWZfZXJyb3IgKHZvaWQpOworZXh0ZXJuIHZvaWQgY19wdXNoX2Z1bmN0aW9uX2NvbnRleHQgKHZvaWQpOworZXh0ZXJuIHZvaWQgY19wb3BfZnVuY3Rpb25fY29udGV4dCAodm9pZCk7CitleHRlcm4gdm9pZCBwdXNoX3Bhcm1fZGVjbCAoY29uc3Qgc3RydWN0IGNfcGFybSAqLCB0cmVlICopOworZXh0ZXJuIHN0cnVjdCBjX2RlY2xhcmF0b3IgKnNldF9hcnJheV9kZWNsYXJhdG9yX2lubmVyIChzdHJ1Y3QgY19kZWNsYXJhdG9yICosCisJCQkJCQkJc3RydWN0IGNfZGVjbGFyYXRvciAqKTsKK2V4dGVybiB0cmVlIGNfYnVpbHRpbl9mdW5jdGlvbiAodHJlZSk7CitleHRlcm4gdHJlZSBjX2J1aWx0aW5fZnVuY3Rpb25fZXh0X3Njb3BlICh0cmVlKTsKK2V4dGVybiB2b2lkIHNoYWRvd190YWcgKGNvbnN0IHN0cnVjdCBjX2RlY2xzcGVjcyAqKTsKK2V4dGVybiB2b2lkIHNoYWRvd190YWdfd2FybmVkIChjb25zdCBzdHJ1Y3QgY19kZWNsc3BlY3MgKiwgaW50KTsKK2V4dGVybiB0cmVlIHN0YXJ0X2VudW0gKGxvY2F0aW9uX3QsIHN0cnVjdCBjX2VudW1fY29udGVudHMgKiwgdHJlZSk7CitleHRlcm4gaW50ICBzdGFydF9mdW5jdGlvbiAoc3RydWN0IGNfZGVjbHNwZWNzICosIHN0cnVjdCBjX2RlY2xhcmF0b3IgKiwgdHJlZSk7CitleHRlcm4gdHJlZSBzdGFydF9kZWNsIChzdHJ1Y3QgY19kZWNsYXJhdG9yICosIHN0cnVjdCBjX2RlY2xzcGVjcyAqLCBib29sLAorCQkJdHJlZSk7CitleHRlcm4gdHJlZSBzdGFydF9zdHJ1Y3QgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorCQkJICBzdHJ1Y3QgY19zdHJ1Y3RfcGFyc2VfaW5mbyAqKik7CitleHRlcm4gdm9pZCBzdG9yZV9wYXJtX2RlY2xzICh2b2lkKTsKK2V4dGVybiB2b2lkIHN0b3JlX3Bhcm1fZGVjbHNfZnJvbSAoc3RydWN0IGNfYXJnX2luZm8gKik7CitleHRlcm4gdHJlZSB4cmVmX3RhZyAoZW51bSB0cmVlX2NvZGUsIHRyZWUpOworZXh0ZXJuIHN0cnVjdCBjX3R5cGVzcGVjIHBhcnNlcl94cmVmX3RhZyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUpOworZXh0ZXJuIHN0cnVjdCBjX3Bhcm0gKmJ1aWxkX2NfcGFybSAoc3RydWN0IGNfZGVjbHNwZWNzICosIHRyZWUsCisJCQkJICAgIHN0cnVjdCBjX2RlY2xhcmF0b3IgKik7CitleHRlcm4gc3RydWN0IGNfZGVjbGFyYXRvciAqYnVpbGRfYXR0cnNfZGVjbGFyYXRvciAodHJlZSwKKwkJCQkJCSAgICBzdHJ1Y3QgY19kZWNsYXJhdG9yICopOworZXh0ZXJuIHN0cnVjdCBjX2RlY2xhcmF0b3IgKmJ1aWxkX2Z1bmN0aW9uX2RlY2xhcmF0b3IgKHN0cnVjdCBjX2FyZ19pbmZvICosCisJCQkJCQkgICAgICAgc3RydWN0IGNfZGVjbGFyYXRvciAqKTsKK2V4dGVybiBzdHJ1Y3QgY19kZWNsYXJhdG9yICpidWlsZF9pZF9kZWNsYXJhdG9yICh0cmVlKTsKK2V4dGVybiBzdHJ1Y3QgY19kZWNsYXJhdG9yICptYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAoc3RydWN0IGNfZGVjbHNwZWNzICosCisJCQkJCQkgICAgIHN0cnVjdCBjX2RlY2xhcmF0b3IgKik7CitleHRlcm4gc3RydWN0IGNfZGVjbHNwZWNzICpidWlsZF9udWxsX2RlY2xzcGVjcyAodm9pZCk7CitleHRlcm4gc3RydWN0IGNfZGVjbHNwZWNzICpkZWNsc3BlY3NfYWRkX3F1YWwgKHNvdXJjZV9sb2NhdGlvbiwKKwkJCQkJICAgICAgIHN0cnVjdCBjX2RlY2xzcGVjcyAqLCB0cmVlKTsKK2V4dGVybiBzdHJ1Y3QgY19kZWNsc3BlY3MgKmRlY2xzcGVjc19hZGRfdHlwZSAobG9jYXRpb25fdCwKKwkJCQkJICAgICAgIHN0cnVjdCBjX2RlY2xzcGVjcyAqLAorCQkJCQkgICAgICAgc3RydWN0IGNfdHlwZXNwZWMpOworZXh0ZXJuIHN0cnVjdCBjX2RlY2xzcGVjcyAqZGVjbHNwZWNzX2FkZF9zY3NwZWMgKHNvdXJjZV9sb2NhdGlvbiwKKwkJCQkJCSBzdHJ1Y3QgY19kZWNsc3BlY3MgKiwgdHJlZSk7CitleHRlcm4gc3RydWN0IGNfZGVjbHNwZWNzICpkZWNsc3BlY3NfYWRkX2F0dHJzIChzb3VyY2VfbG9jYXRpb24sCisJCQkJCQlzdHJ1Y3QgY19kZWNsc3BlY3MgKiwgdHJlZSk7CitleHRlcm4gc3RydWN0IGNfZGVjbHNwZWNzICpkZWNsc3BlY3NfYWRkX2FkZHJzcGFjZSAoc291cmNlX2xvY2F0aW9uLAorCQkJCQkJICAgIHN0cnVjdCBjX2RlY2xzcGVjcyAqLAorCQkJCQkJICAgIGFkZHJfc3BhY2VfdCk7CitleHRlcm4gc3RydWN0IGNfZGVjbHNwZWNzICpkZWNsc3BlY3NfYWRkX2FsaWduYXMgKHNvdXJjZV9sb2NhdGlvbiwKKwkJCQkJCSAgc3RydWN0IGNfZGVjbHNwZWNzICosIHRyZWUpOworZXh0ZXJuIHN0cnVjdCBjX2RlY2xzcGVjcyAqZmluaXNoX2RlY2xzcGVjcyAoc3RydWN0IGNfZGVjbHNwZWNzICopOworCisvKiBpbiBjLW9iamMtY29tbW9uLmMgKi8KK2V4dGVybiBib29sIGNfb2JqY19jb21tb25faW5pdCAodm9pZCk7CitleHRlcm4gYm9vbCBjX21pc3Npbmdfbm9yZXR1cm5fb2tfcCAodHJlZSk7CitleHRlcm4gYm9vbCBjX3dhcm5fdW51c2VkX2dsb2JhbF9kZWNsIChjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGNfaW5pdGlhbGl6ZV9kaWFnbm9zdGljcyAoZGlhZ25vc3RpY19jb250ZXh0ICopOworZXh0ZXJuIGJvb2wgY192bGFfdW5zcGVjX3AgKHRyZWUgeCwgdHJlZSBmbik7CisKKy8qIGluIGMtdHlwZWNrLmMgKi8KK2V4dGVybiBpbnQgaW5fYWxpZ25vZjsKK2V4dGVybiBpbnQgaW5fc2l6ZW9mOworZXh0ZXJuIGludCBpbl90eXBlb2Y7CisKK2V4dGVybiB0cmVlIGNfbGFzdF9zaXplb2ZfYXJnOworCitleHRlcm4gc3RydWN0IGNfc3dpdGNoICpjX3N3aXRjaF9zdGFjazsKKworZXh0ZXJuIHRyZWUgY19vYmpjX2NvbW1vbl90cnV0aHZhbHVlX2NvbnZlcnNpb24gKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgcmVxdWlyZV9jb21wbGV0ZV90eXBlICh0cmVlKTsKK2V4dGVybiBpbnQgc2FtZV90cmFuc2xhdGlvbl91bml0X3AgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCBjb21wdHlwZXMgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBjb21wdHlwZXNfY2hlY2tfZGlmZmVyZW50X3R5cGVzICh0cmVlLCB0cmVlLCBib29sICopOworZXh0ZXJuIGJvb2wgY192bGFfdHlwZV9wIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGNfbWFya19hZGRyZXNzYWJsZSAodHJlZSk7CitleHRlcm4gdm9pZCBjX2luY29tcGxldGVfdHlwZV9lcnJvciAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBjX3R5cGVfcHJvbW90ZXNfdG8gKHRyZWUpOworZXh0ZXJuIHN0cnVjdCBjX2V4cHIgZGVmYXVsdF9mdW5jdGlvbl9hcnJheV9jb252ZXJzaW9uIChsb2NhdGlvbl90LAorCQkJCQkJCXN0cnVjdCBjX2V4cHIpOworZXh0ZXJuIHN0cnVjdCBjX2V4cHIgZGVmYXVsdF9mdW5jdGlvbl9hcnJheV9yZWFkX2NvbnZlcnNpb24gKGxvY2F0aW9uX3QsCisJCQkJCQkJICAgICBzdHJ1Y3QgY19leHByKTsKK2V4dGVybiB2b2lkIG1hcmtfZXhwX3JlYWQgKHRyZWUpOworZXh0ZXJuIHRyZWUgY29tcG9zaXRlX3R5cGUgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfY29tcG9uZW50X3JlZiAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9hcnJheV9yZWYgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfZXh0ZXJuYWxfcmVmIChsb2NhdGlvbl90LCB0cmVlLCBpbnQsIHRyZWUgKik7CitleHRlcm4gdm9pZCBwb3BfbWF5YmVfdXNlZCAoYm9vbCk7CitleHRlcm4gc3RydWN0IGNfZXhwciBjX2V4cHJfc2l6ZW9mX2V4cHIgKGxvY2F0aW9uX3QsIHN0cnVjdCBjX2V4cHIpOworZXh0ZXJuIHN0cnVjdCBjX2V4cHIgY19leHByX3NpemVvZl90eXBlIChsb2NhdGlvbl90LCBzdHJ1Y3QgY190eXBlX25hbWUgKik7CitleHRlcm4gc3RydWN0IGNfZXhwciBwYXJzZXJfYnVpbGRfdW5hcnlfb3AgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLAorICAgIAkJCQkJICAgIHN0cnVjdCBjX2V4cHIpOworZXh0ZXJuIHN0cnVjdCBjX2V4cHIgcGFyc2VyX2J1aWxkX2JpbmFyeV9vcCAobG9jYXRpb25fdCwKKyAgICAJCQkJCSAgICAgZW51bSB0cmVlX2NvZGUsIHN0cnVjdCBjX2V4cHIsCisJCQkJCSAgICAgc3RydWN0IGNfZXhwcik7CitleHRlcm4gdHJlZSBidWlsZF9jb25kaXRpb25hbF9leHByIChsb2NhdGlvbl90LCB0cmVlLCBib29sLCB0cmVlLCB0cmVlLAorCQkJCSAgICB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NvbXBvdW5kX2V4cHIgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY19jYXN0X2V4cHIgKGxvY2F0aW9uX3QsIHN0cnVjdCBjX3R5cGVfbmFtZSAqLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NfY2FzdCAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBzdG9yZV9pbml0X3ZhbHVlIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGVycm9yX2luaXQgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBwZWR3YXJuX2luaXQgKGxvY2F0aW9uX3QsIGludCBvcHQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBtYXliZV93YXJuX3N0cmluZ19pbml0ICh0cmVlLCBzdHJ1Y3QgY19leHByKTsKK2V4dGVybiB2b2lkIHN0YXJ0X2luaXQgKHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBmaW5pc2hfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCByZWFsbHlfc3RhcnRfaW5jcmVtZW50YWxfaW5pdCAodHJlZSk7CitleHRlcm4gdm9pZCBwdXNoX2luaXRfbGV2ZWwgKGludCwgc3RydWN0IG9ic3RhY2sgKik7CitleHRlcm4gc3RydWN0IGNfZXhwciBwb3BfaW5pdF9sZXZlbCAoaW50LCBzdHJ1Y3Qgb2JzdGFjayAqKTsKK2V4dGVybiB2b2lkIHNldF9pbml0X2luZGV4ICh0cmVlLCB0cmVlLCBzdHJ1Y3Qgb2JzdGFjayAqKTsKK2V4dGVybiB2b2lkIHNldF9pbml0X2xhYmVsICh0cmVlLCBzdHJ1Y3Qgb2JzdGFjayAqKTsKK2V4dGVybiB2b2lkIHByb2Nlc3NfaW5pdF9lbGVtZW50IChzdHJ1Y3QgY19leHByLCBib29sLCBzdHJ1Y3Qgb2JzdGFjayAqKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NvbXBvdW5kX2xpdGVyYWwgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgY2hlY2tfY29tcG91bmRfbGl0ZXJhbF90eXBlIChsb2NhdGlvbl90LCBzdHJ1Y3QgY190eXBlX25hbWUgKik7CitleHRlcm4gdHJlZSBjX3N0YXJ0X2Nhc2UgKGxvY2F0aW9uX3QsIGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHZvaWQgY19maW5pc2hfY2FzZSAodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9hc21fZXhwciAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBidWlsZF9hc21fc3RtdCAodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IGNfdHlwZXNfY29tcGF0aWJsZV9wICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNfYmVnaW5fY29tcG91bmRfc3RtdCAoYm9vbCk7CitleHRlcm4gdHJlZSBjX2VuZF9jb21wb3VuZF9zdG10IChsb2NhdGlvbl90LCB0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIGNfZmluaXNoX2lmX3N0bXQgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgY19maW5pc2hfbG9vcCAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBjX2JlZ2luX3N0bXRfZXhwciAodm9pZCk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF9zdG10X2V4cHIgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgY19wcm9jZXNzX2V4cHJfc3RtdCAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF9leHByX3N0bXQgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgY19maW5pc2hfcmV0dXJuIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNfZmluaXNoX2JjX3N0bXQgKGxvY2F0aW9uX3QsIHRyZWUgKiwgYm9vbCk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF9nb3RvX2xhYmVsIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB0cmVlIGNfZmluaXNoX2dvdG9fcHRyIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB0cmVlIGNfZXhwcl90b19kZWNsICh0cmVlLCBib29sICosIGJvb2wgKik7CitleHRlcm4gdHJlZSBjX2JlZ2luX29tcF9wYXJhbGxlbCAodm9pZCk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF9vbXBfcGFyYWxsZWwgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY19iZWdpbl9vbXBfdGFzayAodm9pZCk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF9vbXBfdGFzayAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF9vbXBfY2xhdXNlcyAodHJlZSk7CitleHRlcm4gdHJlZSBjX2J1aWxkX3ZhX2FyZyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjX2ZpbmlzaF90cmFuc2FjdGlvbiAobG9jYXRpb25fdCwgdHJlZSwgaW50KTsKKworLyogU2V0IHRvIDAgYXQgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgc2V0IHRvIDEgaWYKKyAgIGEgcmV0dXJuIHN0YXRlbWVudCB0aGF0IHNwZWNpZmllcyBhIHJldHVybiB2YWx1ZSBpcyBzZWVuLiAgKi8KKworZXh0ZXJuIGludCBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfdmFsdWU7CisKKy8qIFNldCB0byAwIGF0IGJlZ2lubmluZyBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIHNldCB0byAxIGlmCisgICBhIHJldHVybiBzdGF0ZW1lbnQgd2l0aCBubyBhcmd1bWVudCBpcyBzZWVuLiAgKi8KKworZXh0ZXJuIGludCBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfbnVsbDsKKworLyogU2V0IHRvIDAgYXQgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgc2V0IHRvIDEgaWYKKyAgIGEgY2FsbCB0byBhIG5vcmV0dXJuIGZ1bmN0aW9uIGlzIHNlZW4uICAqLworCitleHRlcm4gaW50IGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19hYm5vcm1hbGx5OworCisvKiBNb2RlIHVzZWQgdG8gYnVpbGQgcG9pbnRlcnMgKFZPSURtb2RlIG1lYW5zIHB0cl9tb2RlKS4gICovCisKK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBjX2RlZmF1bHRfcG9pbnRlcl9tb2RlOworCisvKiBJbiBjLWRlY2wuYyAqLworZXh0ZXJuIHZvaWQgY19maW5pc2hfaW5jb21wbGV0ZV9kZWNsICh0cmVlKTsKK2V4dGVybiB2b2lkIGNfd3JpdGVfZ2xvYmFsX2RlY2xhcmF0aW9ucyAodm9pZCk7CisKKy8qIEluIGMtZXJyb3JzLmMgKi8KK2V4dGVybiB2b2lkIHBlZHdhcm5fYzkwIChsb2NhdGlvbl90LCBpbnQgb3B0LCBjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDMsNCk7CitleHRlcm4gdm9pZCBwZWR3YXJuX2M5OSAobG9jYXRpb25fdCwgaW50IG9wdCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygzLDQpOworCisjZW5kaWYgLyogISBHQ0NfQ19UUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jZmctZmxhZ3MuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NmZy1mbGFncy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxMjdkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jZmctZmxhZ3MuZGVmCkBAIC0wLDAgKzEsMTg2IEBACisvKiBGbGFncyBvbiBiYXNpYyBibG9ja3MgYW5kIGVkZ2VzLgorICAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIGZpbGUgZGVmaW5lcyBmbGFncyB0aGF0IG1heSBhcHBlYXIgb24gYmFzaWMgYmxvY2tzIG9yIG9uCisgICBlZGdlcy4gIFNvdXJjZSBmaWxlcyBkZWZpbmUgREVGX0JBU0lDX0JMT0NLX0ZMQUcgb3IgREVGX0VER0VfRkxBRworICAgYXBwcm9wcmlhdGVseSBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZS4gICovCisKKyNpZiAhZGVmaW5lZChERUZfQkFTSUNfQkxPQ0tfRkxBRykgJiYgIWRlZmluZWQoREVGX0VER0VfRkxBRykKKyNlcnJvciAiWW91IG11c3QgZGVmaW5lIERFRl9CQVNJQ19CTE9DS19GTEFHIG9yIERFRl9FREdFX0ZMQUciCisjZW5kaWYKKworI2lmZGVmIERFRl9CQVNJQ19CTE9DS19GTEFHCisKKy8qIE1hc2tzIGZvciBiYXNpY19ibG9jay5mbGFncy4KKworICAgVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXM6IERFRl9CQVNJQ19CTE9DS19GTEFHKE5BTUUsIElEWCkuCisgICBOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBiYXNpYyBibG9jayBmbGFnLiAgQSBmbGFnIEJCXyNOQU1FIHdpbGwgYmUKKyAgIGNyZWF0ZWQgYW5kIHRoZSBuYW1lIGlzIHVzZWQgaW4gZHVtcF9lZGdlX2luZm8uCisgICBJRFggaXMgYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgdmFsdWUKKyAgIG9mIHRoZSBmbGFnLCB3aGljaCBpcyAxIDw8IElEWCkuCisKKyAgIEJCX0hPVF9QQVJUSVRJT04gYW5kIEJCX0NPTERfUEFSVElUSU9OIHNob3VsZCBiZSBwcmVzZXJ2ZWQgdGhyb3VnaG91dAorICAgdGhlIGNvbXBpbGF0aW9uLCBzbyB0aGV5IGFyZSBuZXZlciBjbGVhcmVkLgorCisgICBBbGwgb3RoZXIgZmxhZ3MgbWF5IGJlIGNsZWFyZWQgYnkgY2xlYXJfYmJfZmxhZ3MoKS4gIEl0IGlzIGdlbmVyYWxseQorICAgYSBiYWQgaWRlYSB0byByZWx5IG9uIGFueSBmbGFncyBiZWluZyB1cC10by1kYXRlLiAgKi8KKworLyogT25seSBzZXQgb24gYmxvY2tzIHRoYXQgaGF2ZSBqdXN0IGJlZW4gY3JlYXRlZCBieSBjcmVhdGVfYmIuICAqLworREVGX0JBU0lDX0JMT0NLX0ZMQUcoTkVXLCAwKQorCisvKiBTZXQgYnkgZmluZF91bnJlYWNoYWJsZV9ibG9ja3MuICBEbyBub3QgcmVseSBvbiB0aGlzIGJlaW5nIHNldCBpbiBhbnkKKyAgIHBhc3MuICAqLworREVGX0JBU0lDX0JMT0NLX0ZMQUcoUkVBQ0hBQkxFLCAxKQorCisvKiBTZXQgZm9yIGJsb2NrcyBpbiBhbiBpcnJlZHVjaWJsZSBsb29wIGJ5IGxvb3AgYW5hbHlzaXMuICAqLworREVGX0JBU0lDX0JMT0NLX0ZMQUcoSVJSRURVQ0lCTEVfTE9PUCwgMikKKworLyogU2V0IG9uIGJsb2NrcyB0aGF0IG1heSBhY3R1YWxseSBub3QgYmUgc2luZ2xlLWVudHJ5IHNpbmdsZS1leGl0IGJsb2NrLiAgKi8KK0RFRl9CQVNJQ19CTE9DS19GTEFHKFNVUEVSQkxPQ0ssIDMpCisKKy8qIFNldCBvbiBiYXNpYyBibG9ja3MgdGhhdCB0aGUgc2NoZWR1bGVyIHNob3VsZCBub3QgdG91Y2guICBUaGlzIGlzIHVzZWQKKyAgIGJ5IFNNUyB0byBwcmV2ZW50IG90aGVyIHNjaGVkdWxlcnMgZnJvbSBtZXNzaW5nIHdpdGggdGhlIGxvb3Agc2NoZWR1bGUuICAqLworREVGX0JBU0lDX0JMT0NLX0ZMQUcoRElTQUJMRV9TQ0hFRFVMRSwgNCkKKworLyogU2V0IG9uIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBwdXQgaW4gYSBob3Qgc2VjdGlvbi4gICovCitERUZfQkFTSUNfQkxPQ0tfRkxBRyhIT1RfUEFSVElUSU9OLCA1KQorCisvKiBTZXQgb24gYmxvY2tzIHRoYXQgc2hvdWxkIGJlIHB1dCBpbiBhIGNvbGQgc2VjdGlvbi4gICovCitERUZfQkFTSUNfQkxPQ0tfRkxBRyhDT0xEX1BBUlRJVElPTiwgNikKKworLyogU2V0IG9uIGJsb2NrIHRoYXQgd2FzIGR1cGxpY2F0ZWQuICAqLworREVGX0JBU0lDX0JMT0NLX0ZMQUcoRFVQTElDQVRFRCwgNykKKworLyogU2V0IGlmIHRoZSBsYWJlbCBhdCB0aGUgdG9wIG9mIHRoaXMgYmxvY2sgaXMgdGhlIHRhcmdldCBvZiBhIG5vbi1sb2NhbCBnb3RvLiAgKi8KK0RFRl9CQVNJQ19CTE9DS19GTEFHKE5PTl9MT0NBTF9HT1RPX1RBUkdFVCwgOCkKKworLyogU2V0IG9uIGJsb2NrcyB0aGF0IGFyZSBpbiBSVEwgZm9ybWF0LiAgKi8KK0RFRl9CQVNJQ19CTE9DS19GTEFHKFJUTCwgOSkgCisKKy8qIFNldCBvbiBibG9ja3MgdGhhdCBhcmUgZm9yd2FyZGVyIGJsb2Nrcy4KKyAgIE9ubHkgdXNlZCBpbiBjZmdjbGVhbnVwLmMuICAqLworREVGX0JBU0lDX0JMT0NLX0ZMQUcoRk9SV0FSREVSX0JMT0NLLCAxMCkKKworLyogU2V0IG9uIGJsb2NrcyB0aGF0IGNhbm5vdCBiZSB0aHJlYWRlZCB0aHJvdWdoLgorICAgT25seSB1c2VkIGluIGNmZ2NsZWFudXAuYy4gICovCitERUZfQkFTSUNfQkxPQ0tfRkxBRyhOT05USFJFQURBQkxFX0JMT0NLLCAxMSkKKworLyogU2V0IG9uIGJsb2NrcyB0aGF0IHdlcmUgbW9kaWZpZWQgaW4gc29tZSB3YXkuICBUaGlzIGJpdCBpcyBzZXQgaW4KKyAgIGRmX3NldF9iYl9kaXJ0eSwgYnV0IG5vdCBjbGVhcmVkIGJ5IGRmX2FuYWx5emUsIHNvIGl0IGNhbiBiZSB1c2VkCisgICB0byB0ZXN0IHdoZXRoZXIgYSBibG9jayBoYXMgYmVlbiBtb2RpZmllZCBwcmlvciB0byBhIGRmX2FuYWx5emUgY2FsbC4gICovCitERUZfQkFTSUNfQkxPQ0tfRkxBRyhNT0RJRklFRCwgMTIpCisKKy8qIEEgZ2VuZXJhbCB2aXNpdGVkIGZsYWcgZm9yIHBhc3NlcyB0byB1c2UuICAqLworREVGX0JBU0lDX0JMT0NLX0ZMQUcoVklTSVRFRCwgMTMpCisKKy8qIFNldCBvbiBibG9ja3MgdGhhdCBhcmUgaW4gYSB0cmFuc2FjdGlvbi4gIFRoaXMgaXMgY2FsY3VsYXRlZCBvbgorICAgZGVtYW5kLCBhbmQgaXMgYXZhaWxhYmxlIGFmdGVyIGNhbGxpbmcgY29tcHV0ZV90cmFuc2FjdGlvbl9iaXRzKCkuICAqLworREVGX0JBU0lDX0JMT0NLX0ZMQUcoSU5fVFJBTlNBQ1RJT04sIDE0KQorCisjZW5kaWYKKworI2lmZGVmIERFRl9FREdFX0ZMQUcKKworLyogTWFza3MgZm9yIGVkZ2UuZmxhZ3MuCisKKyAgIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzOiBERUZfRURHRV9GTEFHKE5BTUUsIElEWCwgU1RSSU5HKS4KKyAgIE5BTUUgaXMgdGhlIG5hbWUgb2YgdGhlIGVkZ2UgZmxhZy4gIEEgZmxhZyBFREdFXyNOQU1FIHdpbGwgYmUKKyAgIGNyZWF0ZWQgYW5kIHRoZSBuYW1lIGlzIHVzZWQgaW4gZHVtcF9lZGdlX2luZm8uCisgICBJRFggaXMgYSBzZXF1ZW5jZSBudW1iZXIgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgdmFsdWUKKyAgIG9mIHRoZSBmbGFnLCB3aGljaCBpcyAxIDw8IElEWCkuICAqLworCisvKiAnU3RyYWlnaHQgbGluZScgZmxvdy4gIEluIEdJTVBMRSBhbmQgaW4gY2ZnbGF5b3V0IG1vZGUsIGFsbCBub3JtYWwKKyAgIGVkZ2VzIGFyZSBmYWxsdGhydSBlZGdlcy4gIEluIGNmZ3J0bCBtb2RlLCB0aGlzIGZsYWcgcmVhbGx5IG1lYW5zCisgICB0aGF0IGNvbnRyb2wgZmxvdyBmYWxscyB0aHJvdWdoIHRvIHRoZSBuZXh0IGJhc2ljIGJsb2NrIGluIHRoZSBsaW5lLiAgKi8KK0RFRl9FREdFX0ZMQUcoRkFMTFRIUlUsIDApCisKKy8qIFN0cmFuZ2UgZmxvdywgbGlrZSBhIGNvbXB1dGVkIGp1bXAgb3IgZXhjZXB0aW9uIGhhbmRsaW5nLiAgVXN1YWxseQorICAgdGhpcyBtZWFucyB0aGF0IHRoZSBlZGdlIGNhbm5vdCBiZSBzcGxpdC4gICovCitERUZfRURHRV9GTEFHKEFCTk9STUFMLCAxKQorCisvKiBFZGdlIG91dCBvZiBhIGJhc2ljIGJsb2NrIHRoYXQgZW5kcyB3aXRoIGEgQ0FMTF9JTlNOIHdpdGggYWJub3JtYWwKKyAgIGV4aXQsIGxpa2UgYW4gZXhjZXB0aW9uIG9yIGEgbm9uLWxvY2FsIGdvdG8uCisgICBBQk5PUk1BTF9DQUxMIGVkZ2VzIGFsc28gaGF2ZSBBQk5PUk1BTCBzZXQuCisgICBUaGlzIGZsYWcgaXMgb25seSB1c2VkIGZvciB0aGUgUlRMIENGRy4gICovCitERUZfRURHRV9GTEFHKEFCTk9STUFMX0NBTEwsIDIpCisKKy8qIEV4Y2VwdGlvbiBlZGdlLiAgRXhjZXB0aW9uIGhhbmRsaW5nIGVkZ2VzIHJlcHJlc2VudCBwb3NzaWJsZSBjb250cm9sCisgICB0cmFuc2ZlcnMgZnJvbSBhIHRyYXBwaW5nIGluc3RydWN0aW9uIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLgorICAgRUggZWRnZXMgYWxzbyBoYXZlIEFCTk9STUFMIHNldCBmb3IgdGhlIFJUTCBDRkcuICAqLworREVGX0VER0VfRkxBRyhFSCwgMykKKworLyogTmV2ZXIgbWVyZ2UgYmxvY2tzIHZpYSB0aGlzIGVkZ2UuICBUaGlzIGlzIHVzZWQgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZywKKyAgIHRvIHByZXZlbnQgbWVyZ2luZyBhd2F5IGVkZ2VzIHRvIHRoZSBwb3N0LWxhbmRpbmctcGFkIGJhc2ljIGJsb2NrLgorICAgVGhpcyBmbGFnIGlzIG9ubHkgdXNlZCBmb3IgdGhlIFJUTCBDRkcuICAqLworREVGX0VER0VfRkxBRyhQUkVTRVJWRSwgNCkKKworLyogTm90IGEgcmVhbCBlZGdlLiAgVGhpcyBpcyB1c2VkIHRvIGNvbm5lY3QgcGFydHMgb2YgdGhlIENGRyB0aGF0IGRvCisgICBub3QgaGFsdCwgc3VjaCBhcyBpbmZpbml0ZSBsb29wcyBhbmQgbm9yZXR1cm4gZnVuY3Rpb25zLCB0byB0aGUKKyAgIEVYSVRfQkxPQ0ssIHNvIHRoYXQgdHJhdmVyc2luZyBvZiB0aGUgcmV2ZXJzZSBDRkcgaXMgcG9zc2libGUuICAqLworREVGX0VER0VfRkxBRyhGQUtFLCA1KQorCisvKiBBIGJhY2sgZWRnZSwgbWFya2VkIGluIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIG9mIHRoZSBDRkcuICBCYWNrIGVkZ2VzCisgICBhcmUgaGludHMgdGhhdCB0aGlzIGVkZ2UgbWF5IGJlIHBhcnQgb2YgYSBsb29wIGluIHRoZSBDRkcuICAqLworREVGX0VER0VfRkxBRyhERlNfQkFDSywgNikKKworLyogRWRnZSBpbiBhIHBhcnQgb2YgdGhlIENGRyB0aGF0IGlzIGFuIGlycmVkdWNpYmxlIGxvb3AuICAqLworREVGX0VER0VfRkxBRyhJUlJFRFVDSUJMRV9MT09QLCA3KQorCisvKiBFZGdlIHRha2VuIHdoZW4gY29udHJvbGxpbmcgcHJlZGljYXRlIGlzIG5vbnplcm8uCisgICBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgdGhlIEdJTVBMRSBDRkcuICAqLworREVGX0VER0VfRkxBRyhUUlVFX1ZBTFVFLCA4KQorCisvKiBFZGdlIHRha2VuIHdoZW4gY29udHJvbGxpbmcgcHJlZGljYXRlIGlzIHplcm8uCisgICBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgdGhlIEdJTVBMRSBDRkcuICAqLworREVGX0VER0VfRkxBRyhGQUxTRV9WQUxVRSwgOSkKKworLyogRWRnZSBpcyBleGVjdXRhYmxlLiAgVGhpcyBpcyBvbmx5IHVzZWQgaW4gR0lNUExFIFNTQS1DQ1AgYW5kIFZSUC4KKyAgIFRoaXMgaXMgb25seSB1c2VkIGZvciB0aGUgR0lNUExFIENGRy4gICovCitERUZfRURHRV9GTEFHKEVYRUNVVEFCTEUsIDEwKQorCisvKiBFZGdlIGNyb3NzZXMgYmV0d2VlbiBob3QgYW5kIGNvbGQgc2VjdGlvbnMsIHdoZW4gd2UgZG8gcGFydGl0aW9uaW5nLgorICAgVGhpcyBmbGFnIGlzIG9ubHkgdXNlZCBmb3IgdGhlIFJUTCBDRkcuICAqLworREVGX0VER0VfRkxBRyhDUk9TU0lORywgMTEpCisKKy8qIEVkZ2UgZnJvbSBhIHNpYmNhbGwgQ0FMTF9JTlNOIHRvIGV4aXQuCisgICBTSUJDQUxMIGVkZ2VzIGFsc28gaGF2ZSBBQk5PUk1BTCBzZXQuCisgICBUaGlzIGZsYWcgaXMgb25seSB1c2VkIGZvciB0aGUgUlRMIENGRy4gICovCitERUZfRURHRV9GTEFHKFNJQkNBTEwsIDEyKQorCisvKiBDYW5kaWRhdGUgZm9yIHN0cmFpZ2h0IGxpbmUgZmxvdy4gIE9ubHkgdXNlZCBpbiBiYi1yZW9yZGVyLmMuCisgICBUaGlzIGZsYWcgaXMgb25seSB1c2VkIGZvciB0aGUgUlRMIENGRy4gICovCitERUZfRURHRV9GTEFHKENBTl9GQUxMVEhSVSwgMTMpCisKKy8qIEV4aXQgb2YgYSBsb29wLiAgVGhpcyBpcyBvbmx5IHVzZWQgaW4gaWZjdnQuYy4KKyAgIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWQgZm9yIHRoZSBSVEwgQ0ZHLiAgKi8KK0RFRl9FREdFX0ZMQUcoTE9PUF9FWElULCAxNCkKKworLyogVW5pbnN0cnVtZW50ZWQgZWRnZSBvdXQgb2YgYSBHSU1QTEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50LiAgKi8KK0RFRl9FREdFX0ZMQUcoVE1fVU5JTlNUUlVNRU5URUQsIDE1KQorCisvKiBBYm9ydCAob3ZlcikgZWRnZSBvdXQgb2YgYSBHSU1QTEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50LiAgKi8KK0RFRl9FREdFX0ZMQUcoVE1fQUJPUlQsIDE2KQorCisjZW5kaWYKKworLyoKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6YworRW5kOgorKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jZmdob29rcy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NmZ2hvb2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmMGEwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jZmdob29rcy5oCkBAIC0wLDAgKzEsMjIzIEBACisvKiBIb29rcyBmb3IgY2ZnIHJlcHJlc2VudGF0aW9uIHNwZWNpZmljIGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgU2ViYXN0aWFuIFBvcCA8cy5wb3BAbGFwb3N0ZS5uZXQ+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBPbmx5IGJhc2ljLWJsb2NrLmggaW5jbHVkZXMgdGhpcy4gICovCisKK3N0cnVjdCBjZmdfaG9va3MKK3sKKyAgLyogTmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpci4gICovCisgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgLyogRGVidWdnaW5nLiAgKi8KKyAgaW50ICgqdmVyaWZ5X2Zsb3dfaW5mbykgKHZvaWQpOworICB2b2lkICgqZHVtcF9iYikgKEZJTEUgKiwgYmFzaWNfYmxvY2ssIGludCwgaW50KTsKKyAgdm9pZCAoKmR1bXBfYmJfZm9yX2dyYXBoKSAocHJldHR5X3ByaW50ZXIgKiwgYmFzaWNfYmxvY2spOworCisgIC8qIEJhc2ljIENGRyBtYW5pcHVsYXRpb24uICAqLworCisgIC8qIFJldHVybiBuZXcgYmFzaWMgYmxvY2suICAqLworICBiYXNpY19ibG9jayAoKmNyZWF0ZV9iYXNpY19ibG9jaykgKHZvaWQgKmhlYWQsIHZvaWQgKmVuZCwgYmFzaWNfYmxvY2sgYWZ0ZXIpOworCisgIC8qIFJlZGlyZWN0IGVkZ2UgRSB0byB0aGUgZ2l2ZW4gYmFzaWMgYmxvY2sgQiBhbmQgdXBkYXRlIHVuZGVybHlpbmcgcHJvZ3JhbQorICAgICByZXByZXNlbnRhdGlvbi4gIFJldHVybnMgZWRnZSByZXByZXNlbnRpbmcgcmVkaXJlY3RlZCBicmFuY2ggKHRoYXQgbWF5IG5vdAorICAgICBiZSBlcXVpdmFsZW50IHRvIEUgaW4gdGhlIGNhc2Ugb2YgZHVwbGljYXRlIGVkZ2VzIGJlaW5nIHJlbW92ZWQpIG9yIE5VTEwKKyAgICAgaWYgZWRnZSBpcyBub3QgZWFzaWx5IHJlZGlyZWN0YWJsZSBmb3Igd2hhdGV2ZXIgcmVhc29uLiAgKi8KKyAgZWRnZSAoKnJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaCkgKGVkZ2UgZSwgYmFzaWNfYmxvY2sgYik7CisKKyAgLyogU2FtZSBhcyB0aGUgYWJvdmUgYnV0IGFsbG93cyByZWRpcmVjdGluZyBvZiBmYWxsdGhydSBlZGdlcy4gIEluIHRoYXQgY2FzZQorICAgICBuZXdseSBjcmVhdGVkIGZvcndhcmRlciBiYXNpYyBibG9jayBpcyByZXR1cm5lZC4gIFRoZSBlZGdlIG11c3QKKyAgICAgbm90IGJlIGFibm9ybWFsLiAgKi8KKyAgYmFzaWNfYmxvY2sgKCpyZWRpcmVjdF9lZGdlX2FuZF9icmFuY2hfZm9yY2UpIChlZGdlLCBiYXNpY19ibG9jayk7CisKKyAgLyogUmV0dXJucyB0cnVlIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHJlbW92ZSB0aGUgZWRnZSBieSByZWRpcmVjdGluZyBpdAorICAgICB0byB0aGUgZGVzdGluYXRpb24gb2YgdGhlIG90aGVyIGVkZ2UgZ29pbmcgZnJvbSBpdHMgc291cmNlLiAgKi8KKyAgYm9vbCAoKmNhbl9yZW1vdmVfYnJhbmNoX3ApIChjb25zdF9lZGdlKTsKKworICAvKiBSZW1vdmUgc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gYmFzaWMgYmxvY2suICAqLworICB2b2lkICgqZGVsZXRlX2Jhc2ljX2Jsb2NrKSAoYmFzaWNfYmxvY2spOworCisgIC8qIENyZWF0ZXMgYSBuZXcgYmFzaWMgYmxvY2sganVzdCBhZnRlciBiYXNpYyBibG9jayBCIGJ5IHNwbGl0dGluZworICAgICBldmVyeXRoaW5nIGFmdGVyIHNwZWNpZmllZCBpbnN0cnVjdGlvbiBJLiAgKi8KKyAgYmFzaWNfYmxvY2sgKCpzcGxpdF9ibG9jaykgKGJhc2ljX2Jsb2NrIGIsIHZvaWQgKiBpKTsKKworICAvKiBNb3ZlIGJsb2NrIEIgaW1tZWRpYXRlbHkgYWZ0ZXIgYmxvY2sgQS4gICovCisgIGJvb2wgKCptb3ZlX2Jsb2NrX2FmdGVyKSAoYmFzaWNfYmxvY2sgYiwgYmFzaWNfYmxvY2sgYSk7CisKKyAgLyogUmV0dXJuIHRydWUgd2hlbiBibG9ja3MgQSBhbmQgQiBjYW4gYmUgbWVyZ2VkIGludG8gc2luZ2xlIGJhc2ljIGJsb2NrLiAgKi8KKyAgYm9vbCAoKmNhbl9tZXJnZV9ibG9ja3NfcCkgKGJhc2ljX2Jsb2NrIGEsIGJhc2ljX2Jsb2NrIGIpOworCisgIC8qIE1lcmdlIGJsb2NrcyBBIGFuZCBCLiAgKi8KKyAgdm9pZCAoKm1lcmdlX2Jsb2NrcykgKGJhc2ljX2Jsb2NrIGEsIGJhc2ljX2Jsb2NrIGIpOworCisgIC8qIFByZWRpY3QgZWRnZSBFIHVzaW5nIFBSRURJQ1RPUiB0byBnaXZlbiBQUk9CQUJJTElUWS4gICovCisgIHZvaWQgKCpwcmVkaWN0X2VkZ2UpIChlZGdlIGUsIGVudW0gYnJfcHJlZGljdG9yIHByZWRpY3RvciwgaW50IHByb2JhYmlsaXR5KTsKKworICAvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgb25lIG9mIG91dGdvaW5nIGVkZ2VzIGlzIGFscmVhZHkgcHJlZGljdGVkIGJ5CisgICAgIFBSRURJQ1RPUi4gICovCisgIGJvb2wgKCpwcmVkaWN0ZWRfYnlfcCkgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiLCBlbnVtIGJyX3ByZWRpY3RvciBwcmVkaWN0b3IpOworCisgIC8qIFJldHVybiB0cnVlIHdoZW4gYmxvY2sgQSBjYW4gYmUgZHVwbGljYXRlZC4gICovCisgIGJvb2wgKCpjYW5fZHVwbGljYXRlX2Jsb2NrX3ApIChjb25zdF9iYXNpY19ibG9jayBhKTsKKworICAvKiBEdXBsaWNhdGUgYmxvY2sgQS4gICovCisgIGJhc2ljX2Jsb2NrICgqZHVwbGljYXRlX2Jsb2NrKSAoYmFzaWNfYmxvY2sgYSk7CisKKyAgLyogSGlnaGVyIGxldmVsIGZ1bmN0aW9ucyByZXByZXNlbnRhYmxlIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb25zIGFib3ZlIGlmCisgICAgIHdlIGRpZG4ndCBoYXZlIHNvbWUgb2RkaXRpZXMgaW4gUlRMIGFuZCBUcmVlIHJlcHJlc2VudGF0aW9ucy4gICovCisgIGJhc2ljX2Jsb2NrICgqc3BsaXRfZWRnZSkgKGVkZ2UpOworICB2b2lkICgqbWFrZV9mb3J3YXJkZXJfYmxvY2spIChlZGdlKTsKKworICAvKiBUcnkgdG8gbWFrZSB0aGUgZWRnZSBmYWxsdGhydS4gICovCisgIHZvaWQgKCp0aWR5X2ZhbGx0aHJ1X2VkZ2UpIChlZGdlKTsKKworICAvKiBNYWtlIHRoZSBlZGdlIG5vbi1mYWxsdGhydS4gICovCisgIGJhc2ljX2Jsb2NrICgqZm9yY2Vfbm9uZmFsbHRocnUpIChlZGdlKTsKKworICAvKiBTYXkgd2hldGhlciBhIGJsb2NrIGVuZHMgd2l0aCBhIGNhbGwsIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IHNvbWUKKyAgICAgb3RoZXIgY29kZSB0aGF0IG11c3Qgc3RheSB3aXRoIHRoZSBjYWxsLiAgKi8KKyAgYm9vbCAoKmJsb2NrX2VuZHNfd2l0aF9jYWxsX3ApIChiYXNpY19ibG9jayk7CisKKyAgLyogU2F5IHdoZXRoZXIgYSBibG9jayBlbmRzIHdpdGggYSBjb25kaXRpb25hbCBicmFuY2guICBTd2l0Y2hlcworICAgICBhbmQgdW5jb25kaXRpb25hbCBicmFuY2hlcyBkbyBub3QgcXVhbGlmeS4gICovCisgIGJvb2wgKCpibG9ja19lbmRzX3dpdGhfY29uZGp1bXBfcCkgKGNvbnN0X2Jhc2ljX2Jsb2NrKTsKKworICAvKiBBZGQgZmFrZSBlZGdlcyB0byB0aGUgZnVuY3Rpb24gZXhpdCBmb3IgYW55IG5vbiBjb25zdGFudCBhbmQgbm9uIG5vcmV0dXJuCisgICAgIGNhbGxzLCB2b2xhdGlsZSBpbmxpbmUgYXNzZW1ibHkgaW4gdGhlIGJpdG1hcCBvZiBibG9ja3Mgc3BlY2lmaWVkIGJ5CisgICAgIEJMT0NLUyBvciB0byB0aGUgd2hvbGUgQ0ZHIGlmIEJMT0NLUyBpcyB6ZXJvLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYmxvY2tzCisgICAgIHRoYXQgd2VyZSBzcGxpdC4KKworICAgICBUaGUgZ29hbCBpcyB0byBleHBvc2UgY2FzZXMgaW4gd2hpY2ggZW50ZXJpbmcgYSBiYXNpYyBibG9jayBkb2VzIG5vdCBpbXBseQorICAgICB0aGF0IGFsbCBzdWJzZXF1ZW50IGluc3RydWN0aW9ucyBtdXN0IGJlIGV4ZWN1dGVkLiAgKi8KKyAgaW50ICgqZmxvd19jYWxsX2VkZ2VzX2FkZCkgKHNiaXRtYXApOworCisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGVkZ2UgRSBpcyBhZGRlZCB0byB0aGUKKyAgICAgZWRnZSB2ZWN0b3IgRS0+ZGVzdC0+cHJlZHMuICAqLworICB2b2lkICgqZXhlY3V0ZV9vbl9ncm93aW5nX3ByZWQpIChlZGdlKTsKKworICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgZWRnZSBFIGlzIHJlbW92ZWQgZnJvbQorICAgICB0aGUgZWRnZSB2ZWN0b3IgRS0+ZGVzdC0+cHJlZHMuICAqLworICB2b2lkICgqZXhlY3V0ZV9vbl9zaHJpbmtpbmdfcHJlZCkgKGVkZ2UpOworCisgIC8qIEEgaG9vayBmb3IgZHVwbGljYXRpbmcgbG9vcCBpbiBDRkcsIGN1cnJlbnRseSB0aGlzIGlzIHVzZWQKKyAgICAgaW4gbG9vcCB2ZXJzaW9uaW5nLiAgKi8KKyAgYm9vbCAoKmNmZ19ob29rX2R1cGxpY2F0ZV9sb29wX3RvX2hlYWRlcl9lZGdlKSAoc3RydWN0IGxvb3AgKiwgZWRnZSwKKwkJCQkJCSAgdW5zaWduZWQsIHNiaXRtYXAsCisJCQkJCQkgIGVkZ2UsIHZlYzxlZGdlPiAqLAorCQkJCQkJICBpbnQpOworCisgIC8qIEFkZCBjb25kaXRpb24gdG8gbmV3IGJhc2ljIGJsb2NrIGFuZCB1cGRhdGUgQ0ZHIHVzZWQgaW4gbG9vcAorICAgICB2ZXJzaW9uaW5nLiAgKi8KKyAgdm9pZCAoKmx2X2FkZF9jb25kaXRpb25fdG9fYmIpIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLAorCQkJCSAgdm9pZCAqKTsKKyAgLyogVXBkYXRlIHRoZSBQSEkgbm9kZXMgaW4gY2FzZSBvZiBsb29wIHZlcnNpb25pbmcuICAqLworICB2b2lkICgqbHZfYWRqdXN0X2xvb3BfaGVhZGVyX3BoaSkgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywKKwkJCQkgICAgIGJhc2ljX2Jsb2NrLCBlZGdlKTsKKworICAvKiBHaXZlbiBhIGNvbmRpdGlvbiBCQiBleHRyYWN0IHRoZSB0cnVlL2ZhbHNlIHRha2VuL25vdCB0YWtlbiBlZGdlcworICAgICAoZGVwZW5kaW5nIGlmIHdlIGFyZSBvbiB0cmVlJ3Mgb3IgUlRMKS4gKi8KKyAgdm9pZCAoKmV4dHJhY3RfY29uZF9iYl9lZGdlcykgKGJhc2ljX2Jsb2NrLCBlZGdlICosIGVkZ2UgKik7CisKKworICAvKiBBZGQgUEhJIGFyZ3VtZW50cyBxdWV1ZWQgaW4gUEVORElOVF9TVE1UIGxpc3Qgb24gZWRnZSBFIHRvIGVkZ2UKKyAgICAgRS0+ZGVzdCAob25seSBpbiB0cmVlLXNzYSBsb29wIHZlcnNpb25pbmcuICAqLworICB2b2lkICgqZmx1c2hfcGVuZGluZ19zdG10cykgKGVkZ2UpOworICAKKyAgLyogVHJ1ZSBpZiBhIGJsb2NrIGNvbnRhaW5zIG5vIGV4ZWN1dGFibGUgaW5zdHJ1Y3Rpb25zLiAgKi8KKyAgYm9vbCAoKmVtcHR5X2Jsb2NrX3ApIChiYXNpY19ibG9jayk7CisKKyAgLyogU3BsaXQgYSBiYXNpYyBibG9jayBpZiBpdCBlbmRzIHdpdGggYSBjb25kaXRpb25hbCBicmFuY2ggYW5kIGlmCisgICAgIHRoZSBvdGhlciBwYXJ0IG9mIHRoZSBibG9jayBpcyBub3QgZW1wdHkuICAqLworICBiYXNpY19ibG9jayAoKnNwbGl0X2Jsb2NrX2JlZm9yZV9jb25kX2p1bXApIChiYXNpY19ibG9jayk7CisKKyAgLyogRG8gYm9vay1rZWVwaW5nIG9mIGEgYmFzaWMgYmxvY2sgZm9yIHRoZSBwcm9maWxlIGNvbnNpc3RlbmN5IGNoZWNrZXIuICAqLworICB2b2lkICgqYWNjb3VudF9wcm9maWxlX3JlY29yZCkgKGJhc2ljX2Jsb2NrLCBpbnQsIHN0cnVjdCBwcm9maWxlX3JlY29yZCAqKTsKK307CisKK2V4dGVybiB2b2lkIHZlcmlmeV9mbG93X2luZm8gKHZvaWQpOworZXh0ZXJuIHZvaWQgZHVtcF9iYiAoRklMRSAqLCBiYXNpY19ibG9jaywgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgZHVtcF9iYl9mb3JfZ3JhcGggKHByZXR0eV9wcmludGVyICosIGJhc2ljX2Jsb2NrKTsKKworZXh0ZXJuIGVkZ2UgcmVkaXJlY3RfZWRnZV9hbmRfYnJhbmNoIChlZGdlLCBiYXNpY19ibG9jayk7CitleHRlcm4gYmFzaWNfYmxvY2sgcmVkaXJlY3RfZWRnZV9hbmRfYnJhbmNoX2ZvcmNlIChlZGdlLCBiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBjYW5fcmVtb3ZlX2JyYW5jaF9wIChjb25zdF9lZGdlKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9icmFuY2ggKGVkZ2UpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2VkZ2UgKGVkZ2UpOworZXh0ZXJuIGVkZ2Ugc3BsaXRfYmxvY2sgKGJhc2ljX2Jsb2NrLCB2b2lkICopOworZXh0ZXJuIGVkZ2Ugc3BsaXRfYmxvY2tfYWZ0ZXJfbGFiZWxzIChiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBtb3ZlX2Jsb2NrX2FmdGVyIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgZGVsZXRlX2Jhc2ljX2Jsb2NrIChiYXNpY19ibG9jayk7CitleHRlcm4gYmFzaWNfYmxvY2sgc3BsaXRfZWRnZSAoZWRnZSk7CitleHRlcm4gYmFzaWNfYmxvY2sgY3JlYXRlX2Jhc2ljX2Jsb2NrICh2b2lkICosIHZvaWQgKiwgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGNyZWF0ZV9lbXB0eV9iYiAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgY2FuX21lcmdlX2Jsb2Nrc19wIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgbWVyZ2VfYmxvY2tzIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2spOworZXh0ZXJuIGVkZ2UgbWFrZV9mb3J3YXJkZXJfYmxvY2sgKGJhc2ljX2Jsb2NrLCBib29sICgqKShlZGdlKSwKKwkJCQkgIHZvaWQgKCopIChiYXNpY19ibG9jaykpOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGZvcmNlX25vbmZhbGx0aHJ1IChlZGdlKTsKK2V4dGVybiB2b2lkIHRpZHlfZmFsbHRocnVfZWRnZSAoZWRnZSk7CitleHRlcm4gdm9pZCB0aWR5X2ZhbGx0aHJ1X2VkZ2VzICh2b2lkKTsKK2V4dGVybiB2b2lkIHByZWRpY3RfZWRnZSAoZWRnZSBlLCBlbnVtIGJyX3ByZWRpY3RvciBwcmVkaWN0b3IsIGludCBwcm9iYWJpbGl0eSk7CitleHRlcm4gYm9vbCBwcmVkaWN0ZWRfYnlfcCAoY29uc3RfYmFzaWNfYmxvY2sgYmIsIGVudW0gYnJfcHJlZGljdG9yIHByZWRpY3Rvcik7CitleHRlcm4gYm9vbCBjYW5fZHVwbGljYXRlX2Jsb2NrX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrKTsKK2V4dGVybiBiYXNpY19ibG9jayBkdXBsaWNhdGVfYmxvY2sgKGJhc2ljX2Jsb2NrLCBlZGdlLCBiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBibG9ja19lbmRzX3dpdGhfY2FsbF9wIChiYXNpY19ibG9jayBiYik7CitleHRlcm4gYm9vbCBlbXB0eV9ibG9ja19wIChiYXNpY19ibG9jayk7CitleHRlcm4gYmFzaWNfYmxvY2sgc3BsaXRfYmxvY2tfYmVmb3JlX2NvbmRfanVtcCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgYmxvY2tfZW5kc193aXRoX2NvbmRqdW1wX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiKTsKK2V4dGVybiBpbnQgZmxvd19jYWxsX2VkZ2VzX2FkZCAoc2JpdG1hcCk7CitleHRlcm4gdm9pZCBleGVjdXRlX29uX2dyb3dpbmdfcHJlZCAoZWRnZSk7CitleHRlcm4gdm9pZCBleGVjdXRlX29uX3Nocmlua2luZ19wcmVkIChlZGdlKTsKK2V4dGVybiBib29sIGNmZ19ob29rX2R1cGxpY2F0ZV9sb29wX3RvX2hlYWRlcl9lZGdlIChzdHJ1Y3QgbG9vcCAqbG9vcCwgZWRnZSwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgbmR1cGwsCisJCQkJCQkgICAgc2JpdG1hcCB3b250X2V4aXQsCisJCQkJCQkgICAgZWRnZSBvcmlnLAorCQkJCQkJICAgIHZlYzxlZGdlPiAqdG9fcmVtb3ZlLAorCQkJCQkJICAgIGludCBmbGFncyk7CisKK2V4dGVybiB2b2lkIGx2X2ZsdXNoX3BlbmRpbmdfc3RtdHMgKGVkZ2UpOworZXh0ZXJuIHZvaWQgZXh0cmFjdF9jb25kX2JiX2VkZ2VzIChiYXNpY19ibG9jaywgZWRnZSAqLCBlZGdlKik7CitleHRlcm4gdm9pZCBsdl9hZGp1c3RfbG9vcF9oZWFkZXJfcGhpIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssIGJhc2ljX2Jsb2NrLAorCQkJCSAgICAgICBlZGdlKTsKK2V4dGVybiB2b2lkIGx2X2FkZF9jb25kaXRpb25fdG9fYmIgKGJhc2ljX2Jsb2NrLCBiYXNpY19ibG9jaywgYmFzaWNfYmxvY2ssCisJCQkJICAgIHZvaWQgKik7CisKK2V4dGVybiBib29sIGNhbl9jb3B5X2Jic19wIChiYXNpY19ibG9jayAqLCB1bnNpZ25lZCk7CitleHRlcm4gdm9pZCBjb3B5X2JicyAoYmFzaWNfYmxvY2sgKiwgdW5zaWduZWQsIGJhc2ljX2Jsb2NrICosCisJCSAgICAgIGVkZ2UgKiwgdW5zaWduZWQsIGVkZ2UgKiwgc3RydWN0IGxvb3AgKiwKKwkJICAgICAgYmFzaWNfYmxvY2spOworCit2b2lkIGFjY291bnRfcHJvZmlsZV9yZWNvcmQgKHN0cnVjdCBwcm9maWxlX3JlY29yZCAqLCBpbnQpOworCitleHRlcm4gdm9pZCBjZmdfbGF5b3V0X2luaXRpYWxpemUgKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBjZmdfbGF5b3V0X2ZpbmFsaXplICh2b2lkKTsKKworLyogSG9va3MgY29udGFpbmVycy4gICovCitleHRlcm4gc3RydWN0IGNmZ19ob29rcyBnaW1wbGVfY2ZnX2hvb2tzOworZXh0ZXJuIHN0cnVjdCBjZmdfaG9va3MgcnRsX2NmZ19ob29rczsKK2V4dGVybiBzdHJ1Y3QgY2ZnX2hvb2tzIGNmZ19sYXlvdXRfcnRsX2NmZ19ob29rczsKKworLyogRGVjbGFyYXRpb25zLiAgKi8KK2V4dGVybiBlbnVtIGlyX3R5cGUgY3VycmVudF9pcl90eXBlICh2b2lkKTsKK2V4dGVybiB2b2lkIHJ0bF9yZWdpc3Rlcl9jZmdfaG9va3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgY2ZnX2xheW91dF9ydGxfcmVnaXN0ZXJfY2ZnX2hvb2tzICh2b2lkKTsKK2V4dGVybiB2b2lkIGdpbXBsZV9yZWdpc3Rlcl9jZmdfaG9va3MgKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBjZmdfaG9va3MgZ2V0X2NmZ19ob29rcyAodm9pZCk7CitleHRlcm4gdm9pZCBzZXRfY2ZnX2hvb2tzIChzdHJ1Y3QgY2ZnX2hvb2tzKTsKKwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NmZ2xvb3AuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jZmdsb29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjZWY1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jZmdsb29wLmgKQEAgLTAsMCArMSw3MzMgQEAKKy8qIE5hdHVyYWwgbG9vcCBmdW5jdGlvbnMKKyAgIENvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfQ0ZHTE9PUF9ICisjZGVmaW5lIEdDQ19DRkdMT09QX0gKKworI2luY2x1ZGUgImJhc2ljLWJsb2NrLmgiCisjaW5jbHVkZSAiZG91YmxlLWludC5oIgorCisjaW5jbHVkZSAiYml0bWFwLmgiCisjaW5jbHVkZSAic2JpdG1hcC5oIgorCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBkZWNpc2lvbiBhYm91dCB1bnJvbGxpbmcvcGVlbGluZy4gICovCitlbnVtIGxwdF9kZWMKK3sKKyAgTFBUX05PTkUsCisgIExQVF9QRUVMX0NPTVBMRVRFTFksCisgIExQVF9QRUVMX1NJTVBMRSwKKyAgTFBUX1VOUk9MTF9DT05TVEFOVCwKKyAgTFBUX1VOUk9MTF9SVU5USU1FLAorICBMUFRfVU5ST0xMX1NUVVBJRAorfTsKKworc3RydWN0IEdUWSAoKCkpIGxwdF9kZWNpc2lvbiB7CisgIGVudW0gbHB0X2RlYyBkZWNpc2lvbjsKKyAgdW5zaWduZWQgdGltZXM7Cit9OworCisvKiBUaGUgdHlwZSBvZiBleHRlbmQgYXBwbGllZCB0byBhbiBJVi4gICovCitlbnVtIGl2X2V4dGVuZF9jb2RlCit7CisgIElWX1NJR05fRVhURU5ELAorICBJVl9aRVJPX0VYVEVORCwKKyAgSVZfVU5LTk9XTl9FWFRFTkQKK307CisKKy8qIFRoZSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIGJvdW5kIG9uIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcC4gICovCisKK3N0cnVjdCBHVFkgKChjaGFpbl9uZXh0ICgiJWgubmV4dCIpKSkgbmJfaXRlcl9ib3VuZCB7CisgIC8qIFRoZSBzdGF0ZW1lbnQgU1RNVCBpcyBleGVjdXRlZCBhdCBtb3N0IC4uLiAgKi8KKyAgZ2ltcGxlIHN0bXQ7CisKKyAgLyogLi4uIEJPVU5EICsgMSB0aW1lcyAoQk9VTkQgbXVzdCBiZSBhbiB1bnNpZ25lZCBjb25zdGFudCkuCisgICAgIFRoZSArIDEgaXMgYWRkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczoKKworICAgICBhKSAwIHdvdWxkIG90aGVyd2lzZSBiZSB1bnVzZWQsIHdoaWxlIHdlIHdvdWxkIG5lZWQgdG8gY2FyZSBtb3JlIGFib3V0CisgICAgICAgIG92ZXJmbG93cyAoYXMgTUFYICsgMSBpcyBzb21ldGltZXMgcHJvZHVjZWQgYXMgdGhlIGVzdGltYXRlIG9uIG51bWJlcgorCW9mIGV4ZWN1dGlvbnMgb2YgU1RNVCkuCisgICAgIGIpIGl0IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdWx0IG9mIG51bWJlcl9vZl9pdGVyYXRpb25zX2V4aXQuICAqLworICBkb3VibGVfaW50IGJvdW5kOworCisgIC8qIFRydWUgaWYgdGhlIHN0YXRlbWVudCB3aWxsIGNhdXNlIHRoZSBsb29wIHRvIGJlIGxlYXZlZCB0aGUgKGF0IG1vc3QpCisgICAgIEJPVU5EICsgMS1zdCB0aW1lIGl0IGlzIGV4ZWN1dGVkLCB0aGF0IGlzLCBhbGwgdGhlIHN0YXRlbWVudHMgYWZ0ZXIgaXQKKyAgICAgYXJlIGV4ZWN1dGVkIGF0IG1vc3QgQk9VTkQgdGltZXMuICAqLworICBib29sIGlzX2V4aXQ7CisKKyAgLyogVGhlIG5leHQgYm91bmQgaW4gdGhlIGxpc3QuICAqLworICBzdHJ1Y3QgbmJfaXRlcl9ib3VuZCAqbmV4dDsKK307CisKKy8qIERlc2NyaXB0aW9uIG9mIHRoZSBsb29wIGV4aXQuICAqLworCitzdHJ1Y3QgR1RZICgoKSkgbG9vcF9leGl0IHsKKyAgLyogVGhlIGV4aXQgZWRnZS4gICovCisgIGVkZ2UgZTsKKworICAvKiBQcmV2aW91cyBhbmQgbmV4dCBleGl0IGluIHRoZSBsaXN0IG9mIHRoZSBleGl0cyBvZiB0aGUgbG9vcC4gICovCisgIHN0cnVjdCBsb29wX2V4aXQgKnByZXY7CisgIHN0cnVjdCBsb29wX2V4aXQgKm5leHQ7CisKKyAgLyogTmV4dCBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGxvb3BzIGZyb20gdGhhdCBFIGV4aXRzLiAgKi8KKyAgc3RydWN0IGxvb3BfZXhpdCAqbmV4dF9lOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbG9vcCAqbG9vcF9wOworCisvKiBBbiBpbnRlZ2VyIGVzdGltYXRpb24gb2YgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLiAgRXN0aW1hdGVfc3RhdGUKKyAgIGRlc2NyaWJlcyB3aGF0IGlzIHRoZSBzdGF0ZSBvZiB0aGUgZXN0aW1hdGlvbi4gICovCitlbnVtIGxvb3BfZXN0aW1hdGlvbgoreworICAvKiBFc3RpbWF0ZSB3YXMgbm90IGNvbXB1dGVkIHlldC4gICovCisgIEVTVF9OT1RfQ09NUFVURUQsCisgIC8qIEVzdGltYXRlIGlzIHJlYWR5LiAgKi8KKyAgRVNUX0FWQUlMQUJMRQorfTsKKworLyogU3RydWN0dXJlIHRvIGhvbGQgaW5mb3JtYXRpb24gZm9yIGVhY2ggbmF0dXJhbCBsb29wLiAgKi8KK3N0cnVjdCBHVFkgKChjaGFpbl9uZXh0ICgiJWgubmV4dCIpKSkgbG9vcCB7CisgIC8qIEluZGV4IGludG8gbG9vcHMgYXJyYXkuICAqLworICBpbnQgbnVtOworCisgIC8qIE51bWJlciBvZiBsb29wIGluc25zLiAgKi8KKyAgdW5zaWduZWQgbmluc25zOworCisgIC8qIEJhc2ljIGJsb2NrIG9mIGxvb3AgaGVhZGVyLiAgKi8KKyAgYmFzaWNfYmxvY2sgaGVhZGVyOworCisgIC8qIEJhc2ljIGJsb2NrIG9mIGxvb3AgbGF0Y2guICAqLworICBiYXNpY19ibG9jayBsYXRjaDsKKworICAvKiBGb3IgbG9vcCB1bnJvbGxpbmcvcGVlbGluZyBkZWNpc2lvbi4gICovCisgIHN0cnVjdCBscHRfZGVjaXNpb24gbHB0X2RlY2lzaW9uOworCisgIC8qIEF2ZXJhZ2UgbnVtYmVyIG9mIGV4ZWN1dGVkIGluc25zIHBlciBpdGVyYXRpb24uICAqLworICB1bnNpZ25lZCBhdl9uaW5zbnM7CisKKyAgLyogTnVtYmVyIG9mIGJsb2NrcyBjb250YWluZWQgd2l0aGluIHRoZSBsb29wLiAgKi8KKyAgdW5zaWduZWQgbnVtX25vZGVzOworCisgIC8qIFN1cGVybG9vcHMgb2YgdGhlIGxvb3AsIHN0YXJ0aW5nIHdpdGggdGhlIG91dGVybW9zdCBsb29wLiAgKi8KKyAgdmVjPGxvb3BfcCwgdmFfZ2M+ICpzdXBlcmxvb3BzOworCisgIC8qIFRoZSBmaXJzdCBpbm5lciAoY2hpbGQpIGxvb3Agb3IgTlVMTCBpZiBpbm5lcm1vc3QgbG9vcC4gICovCisgIHN0cnVjdCBsb29wICppbm5lcjsKKworICAvKiBMaW5rIHRvIHRoZSBuZXh0IChzaWJsaW5nKSBsb29wLiAgKi8KKyAgc3RydWN0IGxvb3AgKm5leHQ7CisKKyAgLyogQXV4aWxpYXJ5IGluZm8gc3BlY2lmaWMgdG8gYSBwYXNzLiAgKi8KKyAgUFRSIEdUWSAoKHNraXAgKCIiKSkpIGF1eDsKKworICAvKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBsYXRjaCBvZiB0aGUgbG9vcCBpcyBleGVjdXRlZC4gIFRoaXMgY2FuIGJlIGFuCisgICAgIElOVEVHRVJfQ1NULCBvciBhIHN5bWJvbGljIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YKKyAgICAgaXRlcmF0aW9ucyBsaWtlICJOIC0gMSIsIG9yIGEgQ09ORF9FWFBSIGNvbnRhaW5pbmcgdGhlIHJ1bnRpbWUKKyAgICAgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgbm9uIHplcm8uCisKKyAgICAgRG9uJ3QgYWNjZXNzIHRoaXMgZmllbGQgZGlyZWN0bHk6IG51bWJlcl9vZl9sYXRjaF9leGVjdXRpb25zCisgICAgIGNvbXB1dGVzIGFuZCBjYWNoZXMgdGhlIGNvbXB1dGVkIGluZm9ybWF0aW9uIGluIHRoaXMgZmllbGQuICAqLworICB0cmVlIG5iX2l0ZXJhdGlvbnM7CisKKyAgLyogQW4gaW50ZWdlciBndWFyYW50ZWVkIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gbmJfaXRlcmF0aW9ucy4gIE9ubHkKKyAgICAgdmFsaWQgaWYgYW55X3VwcGVyX2JvdW5kIGlzIHRydWUuICAqLworICBkb3VibGVfaW50IG5iX2l0ZXJhdGlvbnNfdXBwZXJfYm91bmQ7CisKKyAgLyogQW4gaW50ZWdlciBnaXZpbmcgYW4gZXN0aW1hdGUgb24gbmJfaXRlcmF0aW9ucy4gIFVubGlrZQorICAgICBuYl9pdGVyYXRpb25zX3VwcGVyX2JvdW5kLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpdCBpcyBhdCBsZWFzdAorICAgICBuYl9pdGVyYXRpb25zLiAgKi8KKyAgZG91YmxlX2ludCBuYl9pdGVyYXRpb25zX2VzdGltYXRlOworCisgIGJvb2wgYW55X3VwcGVyX2JvdW5kOworICBib29sIGFueV9lc3RpbWF0ZTsKKworICAvKiBUcnVlIGlmIHRoZSBsb29wIGNhbiBiZSBwYXJhbGxlbC4gICovCisgIGJvb2wgY2FuX2JlX3BhcmFsbGVsOworCisgIC8qIFRydWUgaWYgLVdhZ2dyZXNzaXZlLWxvb3Atb3B0aW1pemF0aW9ucyB3YXJuZWQgYWJvdXQgdGhpcyBsb29wCisgICAgIGFscmVhZHkuICAqLworICBib29sIHdhcm5lZF9hZ2dyZXNzaXZlX2xvb3Bfb3B0aW1pemF0aW9uczsKKworICAvKiBBbiBpbnRlZ2VyIGVzdGltYXRpb24gb2YgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLiAgRXN0aW1hdGVfc3RhdGUKKyAgICAgZGVzY3JpYmVzIHdoYXQgaXMgdGhlIHN0YXRlIG9mIHRoZSBlc3RpbWF0aW9uLiAgKi8KKyAgZW51bSBsb29wX2VzdGltYXRpb24gZXN0aW1hdGVfc3RhdGU7CisKKyAgLyogVXBwZXIgYm91bmQgb24gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgYSBsb29wLiAgKi8KKyAgc3RydWN0IG5iX2l0ZXJfYm91bmQgKmJvdW5kczsKKworICAvKiBIZWFkIG9mIHRoZSBjeWNsaWMgbGlzdCBvZiB0aGUgZXhpdHMgb2YgdGhlIGxvb3AuICAqLworICBzdHJ1Y3QgbG9vcF9leGl0ICpleGl0czsKK307CisKKy8qIEZsYWdzIGZvciBzdGF0ZSBvZiBsb29wIHN0cnVjdHVyZS4gICovCitlbnVtCit7CisgIExPT1BTX0hBVkVfUFJFSEVBREVSUyA9IDEsCisgIExPT1BTX0hBVkVfU0lNUExFX0xBVENIRVMgPSAyLAorICBMT09QU19IQVZFX01BUktFRF9JUlJFRFVDSUJMRV9SRUdJT05TID0gNCwKKyAgTE9PUFNfSEFWRV9SRUNPUkRFRF9FWElUUyA9IDgsCisgIExPT1BTX01BWV9IQVZFX01VTFRJUExFX0xBVENIRVMgPSAxNiwKKyAgTE9PUF9DTE9TRURfU1NBID0gMzIsCisgIExPT1BTX05FRURfRklYVVAgPSA2NCwKKyAgTE9PUFNfSEFWRV9GQUxMVEhSVV9QUkVIRUFERVJTID0gMTI4Cit9OworCisjZGVmaW5lIExPT1BTX05PUk1BTCAoTE9PUFNfSEFWRV9QUkVIRUFERVJTIHwgTE9PUFNfSEFWRV9TSU1QTEVfTEFUQ0hFUyBcCisJCSAgICAgIHwgTE9PUFNfSEFWRV9NQVJLRURfSVJSRURVQ0lCTEVfUkVHSU9OUykKKyNkZWZpbmUgQVZPSURfQ0ZHX01PRElGSUNBVElPTlMgKExPT1BTX01BWV9IQVZFX01VTFRJUExFX0xBVENIRVMpCisKKy8qIFN0cnVjdHVyZSB0byBob2xkIENGRyBpbmZvcm1hdGlvbiBhYm91dCBuYXR1cmFsIGxvb3BzIHdpdGhpbiBhIGZ1bmN0aW9uLiAgKi8KK3N0cnVjdCBHVFkgKCgpKSBsb29wcyB7CisgIC8qIFN0YXRlIG9mIGxvb3BzLiAgKi8KKyAgaW50IHN0YXRlOworCisgIC8qIEFycmF5IG9mIHRoZSBsb29wcy4gICovCisgIHZlYzxsb29wX3AsIHZhX2djPiAqbGFycmF5OworCisgIC8qIE1hcHMgZWRnZXMgdG8gdGhlIGxpc3Qgb2YgdGhlaXIgZGVzY3JpcHRpb25zIGFzIGxvb3AgZXhpdHMuICBFZGdlcworICAgICB3aG9zZSBzb3VyY2VzIG9yIGRlc3RpbmF0aW9ucyBoYXZlIGxvb3BfZmF0aGVyID09IE5VTEwgKHdoaWNoIG1heQorICAgICBoYXBwZW4gZHVyaW5nIHRoZSBjZmcgbWFuaXB1bGF0aW9ucykgc2hvdWxkIG5vdCBhcHBlYXIgaW4gRVhJVFMuICAqLworICBodGFiX3QgR1RZKChwYXJhbV9pcyAoc3RydWN0IGxvb3BfZXhpdCkpKSBleGl0czsKKworICAvKiBQb2ludGVyIHRvIHJvb3Qgb2YgbG9vcCBoaWVyYXJjaHkgdHJlZS4gICovCisgIHN0cnVjdCBsb29wICp0cmVlX3Jvb3Q7Cit9OworCisvKiBMb29wIHJlY29nbml0aW9uLiAgKi8KK2Jvb2wgYmJfbG9vcF9oZWFkZXJfcCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHN0cnVjdCBsb29wcyAqZmxvd19sb29wc19maW5kIChzdHJ1Y3QgbG9vcHMgKik7CitleHRlcm4gdm9pZCBkaXNhbWJpZ3VhdGVfbG9vcHNfd2l0aF9tdWx0aXBsZV9sYXRjaGVzICh2b2lkKTsKK2V4dGVybiB2b2lkIGZsb3dfbG9vcHNfZnJlZSAoc3RydWN0IGxvb3BzICopOworZXh0ZXJuIHZvaWQgZmxvd19sb29wc19kdW1wIChGSUxFICosCisJCQkgICAgIHZvaWQgKCopKGNvbnN0IHN0cnVjdCBsb29wICosIEZJTEUgKiwgaW50KSwgaW50KTsKK2V4dGVybiB2b2lkIGZsb3dfbG9vcF9kdW1wIChjb25zdCBzdHJ1Y3QgbG9vcCAqLCBGSUxFICosCisJCQkgICAgdm9pZCAoKikoY29uc3Qgc3RydWN0IGxvb3AgKiwgRklMRSAqLCBpbnQpLCBpbnQpOworc3RydWN0IGxvb3AgKmFsbG9jX2xvb3AgKHZvaWQpOworZXh0ZXJuIHZvaWQgZmxvd19sb29wX2ZyZWUgKHN0cnVjdCBsb29wICopOworaW50IGZsb3dfbG9vcF9ub2Rlc19maW5kIChiYXNpY19ibG9jaywgc3RydWN0IGxvb3AgKik7Cit1bnNpZ25lZCBmaXhfbG9vcF9zdHJ1Y3R1cmUgKGJpdG1hcCBjaGFuZ2VkX2Jicyk7Citib29sIG1hcmtfaXJyZWR1Y2libGVfbG9vcHMgKHZvaWQpOwordm9pZCByZWxlYXNlX3JlY29yZGVkX2V4aXRzICh2b2lkKTsKK3ZvaWQgcmVjb3JkX2xvb3BfZXhpdHMgKHZvaWQpOwordm9pZCByZXNjYW5fbG9vcF9leGl0IChlZGdlLCBib29sLCBib29sKTsKKworLyogTG9vcCBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24vcXVlcnlpbmcuICAqLworZXh0ZXJuIHZvaWQgZmxvd19sb29wX3RyZWVfbm9kZV9hZGQgKHN0cnVjdCBsb29wICosIHN0cnVjdCBsb29wICopOworZXh0ZXJuIHZvaWQgZmxvd19sb29wX3RyZWVfbm9kZV9yZW1vdmUgKHN0cnVjdCBsb29wICopOworZXh0ZXJuIHZvaWQgYWRkX2xvb3AgKHN0cnVjdCBsb29wICosIHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgZmxvd19sb29wX25lc3RlZF9wCShjb25zdCBzdHJ1Y3QgbG9vcCAqLCBjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBib29sIGZsb3dfYmJfaW5zaWRlX2xvb3BfcCAoY29uc3Qgc3RydWN0IGxvb3AgKiwgY29uc3RfYmFzaWNfYmxvY2spOworZXh0ZXJuIHN0cnVjdCBsb29wICogZmluZF9jb21tb25fbG9vcCAoc3RydWN0IGxvb3AgKiwgc3RydWN0IGxvb3AgKik7CitzdHJ1Y3QgbG9vcCAqc3VwZXJsb29wX2F0X2RlcHRoIChzdHJ1Y3QgbG9vcCAqLCB1bnNpZ25lZCk7CitzdHJ1Y3QgZW5pX3dlaWdodHNfZDsKK2V4dGVybiB1bnNpZ25lZCB0cmVlX251bV9sb29wX2luc25zIChzdHJ1Y3QgbG9vcCAqLCBzdHJ1Y3QgZW5pX3dlaWdodHNfZCAqKTsKK2V4dGVybiBpbnQgbnVtX2xvb3BfaW5zbnMgKGNvbnN0IHN0cnVjdCBsb29wICopOworZXh0ZXJuIGludCBhdmVyYWdlX251bV9sb29wX2luc25zIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiB1bnNpZ25lZCBnZXRfbG9vcF9sZXZlbCAoY29uc3Qgc3RydWN0IGxvb3AgKik7CitleHRlcm4gYm9vbCBsb29wX2V4aXRfZWRnZV9wIChjb25zdCBzdHJ1Y3QgbG9vcCAqLCBjb25zdF9lZGdlKTsKK2V4dGVybiBib29sIGxvb3BfZXhpdHNfdG9fYmJfcCAoc3RydWN0IGxvb3AgKiwgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgbG9vcF9leGl0c19mcm9tX2JiX3AgKHN0cnVjdCBsb29wICosIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIG1hcmtfbG9vcF9leGl0X2VkZ2VzICh2b2lkKTsKK2V4dGVybiBsb2NhdGlvbl90IGdldF9sb29wX2xvY2F0aW9uIChzdHJ1Y3QgbG9vcCAqbG9vcCk7CisKKy8qIExvb3BzICYgY2ZnIG1hbmlwdWxhdGlvbi4gICovCitleHRlcm4gYmFzaWNfYmxvY2sgKmdldF9sb29wX2JvZHkgKGNvbnN0IHN0cnVjdCBsb29wICopOworZXh0ZXJuIHVuc2lnbmVkIGdldF9sb29wX2JvZHlfd2l0aF9zaXplIChjb25zdCBzdHJ1Y3QgbG9vcCAqLCBiYXNpY19ibG9jayAqLAorCQkJCQkgdW5zaWduZWQpOworZXh0ZXJuIGJhc2ljX2Jsb2NrICpnZXRfbG9vcF9ib2R5X2luX2RvbV9vcmRlciAoY29uc3Qgc3RydWN0IGxvb3AgKik7CitleHRlcm4gYmFzaWNfYmxvY2sgKmdldF9sb29wX2JvZHlfaW5fYmZzX29yZGVyIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBiYXNpY19ibG9jayAqZ2V0X2xvb3BfYm9keV9pbl9jdXN0b21fb3JkZXIgKGNvbnN0IHN0cnVjdCBsb29wICosCisJCQkgICAgICAgaW50ICgqKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKworZXh0ZXJuIHZlYzxlZGdlPiBnZXRfbG9vcF9leGl0X2VkZ2VzIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBlZGdlIHNpbmdsZV9leGl0IChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBlZGdlIHNpbmdsZV9saWtlbHlfZXhpdCAoc3RydWN0IGxvb3AgKmxvb3ApOworZXh0ZXJuIHVuc2lnbmVkIG51bV9sb29wX2JyYW5jaGVzIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKKworZXh0ZXJuIGVkZ2UgbG9vcF9wcmVoZWFkZXJfZWRnZSAoY29uc3Qgc3RydWN0IGxvb3AgKik7CitleHRlcm4gZWRnZSBsb29wX2xhdGNoX2VkZ2UgKGNvbnN0IHN0cnVjdCBsb29wICopOworCitleHRlcm4gdm9pZCBhZGRfYmJfdG9fbG9vcCAoYmFzaWNfYmxvY2ssIHN0cnVjdCBsb29wICopOworZXh0ZXJuIHZvaWQgcmVtb3ZlX2JiX2Zyb21fbG9vcHMgKGJhc2ljX2Jsb2NrKTsKKworZXh0ZXJuIHZvaWQgY2FuY2VsX2xvb3BfdHJlZSAoc3RydWN0IGxvb3AgKik7CitleHRlcm4gdm9pZCBkZWxldGVfbG9vcCAoc3RydWN0IGxvb3AgKik7CisKK2VudW0KK3sKKyAgQ1BfU0lNUExFX1BSRUhFQURFUlMgPSAxLAorICBDUF9GQUxMVEhSVV9QUkVIRUFERVJTID0gMgorfTsKKworYmFzaWNfYmxvY2sgY3JlYXRlX3ByZWhlYWRlciAoc3RydWN0IGxvb3AgKiwgaW50KTsKK2V4dGVybiB2b2lkIGNyZWF0ZV9wcmVoZWFkZXJzIChpbnQpOworZXh0ZXJuIHZvaWQgZm9yY2Vfc2luZ2xlX3N1Y2NfbGF0Y2hlcyAodm9pZCk7CisKK2V4dGVybiB2b2lkIHZlcmlmeV9sb29wX3N0cnVjdHVyZSAodm9pZCk7CisKKy8qIExvb3AgYW5hbHlzaXMuICAqLworZXh0ZXJuIGJvb2wganVzdF9vbmNlX2VhY2hfaXRlcmF0aW9uX3AgKGNvbnN0IHN0cnVjdCBsb29wICosIGNvbnN0X2Jhc2ljX2Jsb2NrKTsKK2djb3ZfdHlwZSBleHBlY3RlZF9sb29wX2l0ZXJhdGlvbnNfdW5ib3VuZGVkIChjb25zdCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiB1bnNpZ25lZCBleHBlY3RlZF9sb29wX2l0ZXJhdGlvbnMgKGNvbnN0IHN0cnVjdCBsb29wICopOworZXh0ZXJuIHJ0eCBkb2xvb3BfY29uZGl0aW9uX2dldCAocnR4KTsKKwordm9pZCBlc3RpbWF0ZV9udW1iZXJzX29mX2l0ZXJhdGlvbnNfbG9vcCAoc3RydWN0IGxvb3AgKik7Cit2b2lkIHJlY29yZF9uaXRlcl9ib3VuZCAoc3RydWN0IGxvb3AgKiwgZG91YmxlX2ludCwgYm9vbCwgYm9vbCk7Citib29sIGVzdGltYXRlZF9sb29wX2l0ZXJhdGlvbnMgKHN0cnVjdCBsb29wICosIGRvdWJsZV9pbnQgKik7Citib29sIG1heF9sb29wX2l0ZXJhdGlvbnMgKHN0cnVjdCBsb29wICosIGRvdWJsZV9pbnQgKik7CitIT1NUX1dJREVfSU5UIGVzdGltYXRlZF9sb29wX2l0ZXJhdGlvbnNfaW50IChzdHJ1Y3QgbG9vcCAqKTsKK0hPU1RfV0lERV9JTlQgbWF4X2xvb3BfaXRlcmF0aW9uc19pbnQgKHN0cnVjdCBsb29wICopOworYm9vbCBtYXhfc3RtdF9leGVjdXRpb25zIChzdHJ1Y3QgbG9vcCAqLCBkb3VibGVfaW50ICopOworYm9vbCBlc3RpbWF0ZWRfc3RtdF9leGVjdXRpb25zIChzdHJ1Y3QgbG9vcCAqLCBkb3VibGVfaW50ICopOworSE9TVF9XSURFX0lOVCBtYXhfc3RtdF9leGVjdXRpb25zX2ludCAoc3RydWN0IGxvb3AgKik7CitIT1NUX1dJREVfSU5UIGVzdGltYXRlZF9zdG10X2V4ZWN1dGlvbnNfaW50IChzdHJ1Y3QgbG9vcCAqKTsKKworLyogTG9vcCBtYW5pcHVsYXRpb24uICAqLworZXh0ZXJuIGJvb2wgY2FuX2R1cGxpY2F0ZV9sb29wX3AgKGNvbnN0IHN0cnVjdCBsb29wICpsb29wKTsKKworI2RlZmluZSBETFRIRV9GTEFHX1VQREFURV9GUkVRCTEJLyogVXBkYXRlIGZyZXF1ZW5jaWVzIGluCisJCQkJCSAgIGR1cGxpY2F0ZV9sb29wX3RvX2hlYWRlcl9lZGdlLiAgKi8KKyNkZWZpbmUgRExUSEVfUkVDT1JEX0NPUFlfTlVNQkVSIDIJLyogUmVjb3JkIGNvcHkgbnVtYmVyIGluIHRoZSBhdXgKKwkJCQkJICAgZmllbGQgb2YgbmV3bHkgY3JlYXRlIEJCLiAgKi8KKyNkZWZpbmUgRExUSEVfRkxBR19DT01QTEVUVEVfUEVFTCA0CS8qIFVwZGF0ZSBmcmVxdWVuY2llcyBleHBlY3RpbmcKKwkJCQkJICAgYSBjb21wbGV0ZSBwZWVsaW5nLiAgKi8KKworZXh0ZXJuIGVkZ2UgY3JlYXRlX2VtcHR5X2lmX3JlZ2lvbl9vbl9lZGdlIChlZGdlLCB0cmVlKTsKK2V4dGVybiBzdHJ1Y3QgbG9vcCAqY3JlYXRlX2VtcHR5X2xvb3Bfb25fZWRnZSAoZWRnZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwKKwkJCQkJICAgICAgIHRyZWUgKiwgdHJlZSAqLCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiBzdHJ1Y3QgbG9vcCAqIGR1cGxpY2F0ZV9sb29wIChzdHJ1Y3QgbG9vcCAqLCBzdHJ1Y3QgbG9vcCAqKTsKK2V4dGVybiB2b2lkIGNvcHlfbG9vcF9pbmZvIChzdHJ1Y3QgbG9vcCAqbG9vcCwgc3RydWN0IGxvb3AgKnRhcmdldCk7CitleHRlcm4gdm9pZCBkdXBsaWNhdGVfc3VibG9vcHMgKHN0cnVjdCBsb29wICosIHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgZHVwbGljYXRlX2xvb3BfdG9faGVhZGVyX2VkZ2UgKHN0cnVjdCBsb29wICosIGVkZ2UsCisJCQkJCSAgIHVuc2lnbmVkLCBzYml0bWFwLCBlZGdlLAorIAkJCQkJICAgdmVjPGVkZ2U+ICosIGludCk7CitleHRlcm4gc3RydWN0IGxvb3AgKmxvb3BpZnkgKGVkZ2UsIGVkZ2UsCisJCQkgICAgIGJhc2ljX2Jsb2NrLCBlZGdlLCBlZGdlLCBib29sLAorCQkJICAgICB1bnNpZ25lZCwgdW5zaWduZWQpOworc3RydWN0IGxvb3AgKiBsb29wX3ZlcnNpb24gKHN0cnVjdCBsb29wICosIHZvaWQgKiwKKwkJCSAgICBiYXNpY19ibG9jayAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCBib29sKTsKK2V4dGVybiBib29sIHJlbW92ZV9wYXRoIChlZGdlKTsKK2V4dGVybiB2b2lkIHVubG9vcCAoc3RydWN0IGxvb3AgKiwgYm9vbCAqLCBiaXRtYXApOworZXh0ZXJuIHZvaWQgc2NhbGVfbG9vcF9mcmVxdWVuY2llcyAoc3RydWN0IGxvb3AgKiwgaW50LCBpbnQpOworCisvKiBJbmR1Y3Rpb24gdmFyaWFibGUgYW5hbHlzaXMuICAqLworCisvKiBUaGUgZGVzY3JpcHRpb24gb2YgaW5kdWN0aW9uIHZhcmlhYmxlLiAgVGhlIHRoaW5ncyBhcmUgYSBiaXQgY29tcGxpY2F0ZWQKKyAgIGR1ZSB0byBuZWVkIHRvIGhhbmRsZSBzdWJyZWdzIGFuZCBleHRlbmRzLiAgVGhlIHZhbHVlIG9mIHRoZSBvYmplY3QgZGVzY3JpYmVkCisgICBieSBpdCBjYW4gYmUgb2J0YWluZWQgYXMgZm9sbG93cyAoYWxsIGNvbXB1dGF0aW9ucyBhcmUgZG9uZSBpbiBleHRlbmRfbW9kZSk6CisKKyAgIFZhbHVlIGluIGktdGggaXRlcmF0aW9uIGlzCisgICAgIGRlbHRhICsgbXVsdCAqIGV4dGVuZF97ZXh0ZW5kX21vZGV9IChzdWJyZWdfe21vZGV9IChiYXNlICsgaSAqIHN0ZXApKS4KKworICAgSWYgZmlyc3Rfc3BlY2lhbCBpcyB0cnVlLCB0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiBpcworICAgICBkZWx0YSArIG11bHQgKiBiYXNlCisKKyAgIElmIGV4dGVuZCA9IFVOS05PV04sIGZpcnN0X3NwZWNpYWwgbXVzdCBiZSBmYWxzZSwgZGVsdGEgMCwgbXVsdCAxIGFuZCB2YWx1ZSBpcworICAgICBzdWJyZWdfe21vZGV9IChiYXNlICsgaSAqIHN0ZXApCisKKyAgIFRoZSBnZXRfaXZfdmFsdWUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRoZXNlIGV4cHJlc3Npb25zLgorCisgICA/Pz8gQWRkIGEgdGhpcmQgbW9kZSBmaWVsZCB0aGF0IHdvdWxkIHNwZWNpZnkgdGhlIG1vZGUgaW4gdGhhdCBpbm5lcgorICAgY29tcHV0YXRpb24gaXMgZG9uZSwgd2hpY2ggd291bGQgZW5hYmxlIGl0IHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZQorICAgb3V0ZXIgb25lPyAgKi8KKworc3RydWN0IHJ0eF9pdgoreworICAvKiBJdHMgYmFzZSBhbmQgc3RlcCAobW9kZSBvZiBiYXNlIGFuZCBzdGVwIGlzIHN1cHBvc2VkIHRvIGJlIGV4dGVuZF9tb2RlLAorICAgICBzZWUgdGhlIGRlc2NyaXB0aW9uIGFib3ZlKS4gICovCisgIHJ0eCBiYXNlLCBzdGVwOworCisgIC8qIFRoZSB0eXBlIG9mIGV4dGVuZCBhcHBsaWVkIHRvIGl0IChJVl9TSUdOX0VYVEVORCwgSVZfWkVST19FWFRFTkQsCisgICAgIG9yIElWX1VOS05PV05fRVhURU5EKS4gICovCisgIGVudW0gaXZfZXh0ZW5kX2NvZGUgZXh0ZW5kOworCisgIC8qIE9wZXJhdGlvbnMgYXBwbGllZCBpbiB0aGUgZXh0ZW5kZWQgbW9kZS4gICovCisgIHJ0eCBkZWx0YSwgbXVsdDsKKworICAvKiBUaGUgbW9kZSBpdCBpcyBleHRlbmRlZCB0by4gICovCisgIGVudW0gbWFjaGluZV9tb2RlIGV4dGVuZF9tb2RlOworCisgIC8qIFRoZSBtb2RlIHRoZSB2YXJpYWJsZSBpdGVyYXRlcyBpbi4gICovCisgIGVudW0gbWFjaGluZV9tb2RlIG1vZGU7CisKKyAgLyogV2hldGhlciB0aGUgZmlyc3QgaXRlcmF0aW9uIG5lZWRzIHRvIGJlIGhhbmRsZWQgc3BlY2lhbGx5LiAgKi8KKyAgdW5zaWduZWQgZmlyc3Rfc3BlY2lhbCA6IDE7Cit9OworCisvKiBUaGUgZGVzY3JpcHRpb24gb2YgYW4gZXhpdCBmcm9tIHRoZSBsb29wIGFuZCBvZiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKKyAgIHRpbGwgd2UgdGFrZSB0aGUgZXhpdC4gICovCisKK3N0cnVjdCBuaXRlcl9kZXNjCit7CisgIC8qIFRoZSBlZGdlIG91dCBvZiB0aGUgbG9vcC4gICovCisgIGVkZ2Ugb3V0X2VkZ2U7CisKKyAgLyogVGhlIG90aGVyIGVkZ2UgbGVhZGluZyBmcm9tIHRoZSBjb25kaXRpb24uICAqLworICBlZGdlIGluX2VkZ2U7CisKKyAgLyogVHJ1ZSBpZiB3ZSBhcmUgYWJsZSB0byBzYXkgYW55dGhpbmcgYWJvdXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgdGhlCisgICAgIGxvb3AuICAqLworICBib29sIHNpbXBsZV9wOworCisgIC8qIFRydWUgaWYgdGhlIGxvb3AgaXRlcmF0ZXMgdGhlIGNvbnN0YW50IG51bWJlciBvZiB0aW1lcy4gICovCisgIGJvb2wgY29uc3RfaXRlcjsKKworICAvKiBOdW1iZXIgb2YgaXRlcmF0aW9ucyBpZiBjb25zdGFudC4gICovCisgIHVuc2lnbmVkIEhPU1RfV0lERVNUX0lOVCBuaXRlcjsKKworICAvKiBBc3N1bXB0aW9ucyB1bmRlciB0aGF0IHRoZSByZXN0IG9mIHRoZSBpbmZvcm1hdGlvbiBpcyB2YWxpZC4gICovCisgIHJ0eCBhc3N1bXB0aW9uczsKKworICAvKiBBc3N1bXB0aW9ucyB1bmRlciB0aGF0IHRoZSBsb29wIGVuZHMgYmVmb3JlIHJlYWNoaW5nIHRoZSBsYXRjaCwKKyAgICAgZXZlbiBpZiB2YWx1ZSBvZiBuaXRlcl9leHByIHNheXMgb3RoZXJ3aXNlLiAgKi8KKyAgcnR4IG5vbG9vcF9hc3N1bXB0aW9uczsKKworICAvKiBDb25kaXRpb24gdW5kZXIgdGhhdCB0aGUgbG9vcCBpcyBpbmZpbml0ZS4gICovCisgIHJ0eCBpbmZpbml0ZTsKKworICAvKiBXaGV0aGVyIHRoZSBjb21wYXJpc29uIGlzIHNpZ25lZC4gICovCisgIGJvb2wgc2lnbmVkX3A7CisKKyAgLyogVGhlIG1vZGUgaW4gdGhhdCBuaXRlcl9leHByIHNob3VsZCBiZSBjb21wdXRlZC4gICovCisgIGVudW0gbWFjaGluZV9tb2RlIG1vZGU7CisKKyAgLyogVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wLiAgKi8KKyAgcnR4IG5pdGVyX2V4cHI7Cit9OworCitleHRlcm4gdm9pZCBpdl9hbmFseXNpc19sb29wX2luaXQgKHN0cnVjdCBsb29wICopOworZXh0ZXJuIGJvb2wgaXZfYW5hbHl6ZSAocnR4LCBydHgsIHN0cnVjdCBydHhfaXYgKik7CitleHRlcm4gYm9vbCBpdl9hbmFseXplX3Jlc3VsdCAocnR4LCBydHgsIHN0cnVjdCBydHhfaXYgKik7CitleHRlcm4gYm9vbCBpdl9hbmFseXplX2V4cHIgKHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgc3RydWN0IHJ0eF9pdiAqKTsKK2V4dGVybiBydHggZ2V0X2l2X3ZhbHVlIChzdHJ1Y3QgcnR4X2l2ICosIHJ0eCk7CitleHRlcm4gYm9vbCBiaXZfcCAocnR4LCBydHgpOworZXh0ZXJuIHZvaWQgZmluZF9zaW1wbGVfZXhpdCAoc3RydWN0IGxvb3AgKiwgc3RydWN0IG5pdGVyX2Rlc2MgKik7CitleHRlcm4gdm9pZCBpdl9hbmFseXNpc19kb25lICh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBuaXRlcl9kZXNjICpnZXRfc2ltcGxlX2xvb3BfZGVzYyAoc3RydWN0IGxvb3AgKmxvb3ApOworZXh0ZXJuIHZvaWQgZnJlZV9zaW1wbGVfbG9vcF9kZXNjIChzdHJ1Y3QgbG9vcCAqbG9vcCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5pdGVyX2Rlc2MgKgorc2ltcGxlX2xvb3BfZGVzYyAoc3RydWN0IGxvb3AgKmxvb3ApCit7CisgIHJldHVybiAoc3RydWN0IG5pdGVyX2Rlc2MgKikgbG9vcC0+YXV4OworfQorCisvKiBBY2Nlc3NvcnMgZm9yIHRoZSBsb29wIHN0cnVjdHVyZXMuICAqLworCisvKiBSZXR1cm5zIHRoZSBsb29wIHdpdGggaW5kZXggTlVNIGZyb20gY3VycmVudF9sb29wcy4gICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvb3AgKgorZ2V0X2xvb3AgKHVuc2lnbmVkIG51bSkKK3sKKyAgcmV0dXJuICgqY3VycmVudF9sb29wcy0+bGFycmF5KVtudW1dOworfQorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3VwZXJsb29wcyBvZiBMT09QLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorbG9vcF9kZXB0aCAoY29uc3Qgc3RydWN0IGxvb3AgKmxvb3ApCit7CisgIHJldHVybiB2ZWNfc2FmZV9sZW5ndGggKGxvb3AtPnN1cGVybG9vcHMpOworfQorCisvKiBSZXR1cm5zIHRoZSBsb29wIGRlcHRoIG9mIHRoZSBsb29wIEJCIGJlbG9uZ3MgdG8uICAqLworCitzdGF0aWMgaW5saW5lIGludAorYmJfbG9vcF9kZXB0aCAoY29uc3RfYmFzaWNfYmxvY2sgYmIpCit7CisgIHJldHVybiBiYi0+bG9vcF9mYXRoZXIgPyBsb29wX2RlcHRoIChiYi0+bG9vcF9mYXRoZXIpIDogMDsKK30KKworLyogUmV0dXJucyB0aGUgaW1tZWRpYXRlIHN1cGVybG9vcCBvZiBMT09QLCBvciBOVUxMIGlmIExPT1AgaXMgdGhlIG91dGVybW9zdAorICAgbG9vcC4gICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvb3AgKgorbG9vcF9vdXRlciAoY29uc3Qgc3RydWN0IGxvb3AgKmxvb3ApCit7CisgIHVuc2lnbmVkIG4gPSB2ZWNfc2FmZV9sZW5ndGggKGxvb3AtPnN1cGVybG9vcHMpOworCisgIGlmIChuID09IDApCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuICgqbG9vcC0+c3VwZXJsb29wcylbbiAtIDFdOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgTE9PUCBoYXMgYXQgbGVhc3Qgb25lIGV4aXQgZWRnZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorbG9vcF9oYXNfZXhpdF9lZGdlcyAoY29uc3Qgc3RydWN0IGxvb3AgKmxvb3ApCit7CisgIHJldHVybiBsb29wLT5leGl0cy0+bmV4dC0+ZSAhPSBOVUxMOworfQorCisvKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGxvb3BzIGluIGN1cnJlbnRfbG9vcHMuICAqLworCitzdGF0aWMgaW5saW5lIHZlYzxsb29wX3AsIHZhX2djPiAqCitnZXRfbG9vcHMgKHZvaWQpCit7CisgIGlmICghY3VycmVudF9sb29wcykKKyAgICByZXR1cm4gTlVMTDsKKworICByZXR1cm4gY3VycmVudF9sb29wcy0+bGFycmF5OworfQorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbG9vcHMgaW4gY3VycmVudF9sb29wcyAoaW5jbHVkaW5nIHRoZSByZW1vdmVkCisgICBvbmVzIGFuZCB0aGUgZmFrZSBsb29wIHRoYXQgZm9ybXMgdGhlIHJvb3Qgb2YgdGhlIGxvb3AgdHJlZSkuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitudW1iZXJfb2ZfbG9vcHMgKHZvaWQpCit7CisgIGlmICghY3VycmVudF9sb29wcykKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gdmVjX3NhZmVfbGVuZ3RoIChjdXJyZW50X2xvb3BzLT5sYXJyYXkpOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgc3RhdGUgb2YgdGhlIGxvb3BzIHNhdGlzZmllcyBhbGwgcHJvcGVydGllcworICAgZGVzY3JpYmVkIGJ5IEZMQUdTLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitsb29wc19zdGF0ZV9zYXRpc2ZpZXNfcCAodW5zaWduZWQgZmxhZ3MpCit7CisgIHJldHVybiAoY3VycmVudF9sb29wcy0+c3RhdGUgJiBmbGFncykgPT0gZmxhZ3M7Cit9CisKKy8qIFNldHMgRkxBR1MgdG8gdGhlIGxvb3BzIHN0YXRlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitsb29wc19zdGF0ZV9zZXQgKHVuc2lnbmVkIGZsYWdzKQoreworICBjdXJyZW50X2xvb3BzLT5zdGF0ZSB8PSBmbGFnczsKK30KKworLyogQ2xlYXJzIEZMQUdTIGZyb20gdGhlIGxvb3BzIHN0YXRlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitsb29wc19zdGF0ZV9jbGVhciAodW5zaWduZWQgZmxhZ3MpCit7CisgIGlmICghY3VycmVudF9sb29wcykKKyAgICByZXR1cm47CisgIGN1cnJlbnRfbG9vcHMtPnN0YXRlICY9IH5mbGFnczsKK30KKworLyogTG9vcCBpdGVyYXRvcnMuICAqLworCisvKiBGbGFncyBmb3IgbG9vcCBpdGVyYXRpb24uICAqLworCitlbnVtIGxpX2ZsYWdzCit7CisgIExJX0lOQ0xVREVfUk9PVCA9IDEsCQkvKiBJbmNsdWRlIHRoZSBmYWtlIHJvb3Qgb2YgdGhlIGxvb3AgdHJlZS4gICovCisgIExJX0ZST01fSU5ORVJNT1NUID0gMiwJLyogSXRlcmF0ZSBvdmVyIHRoZSBsb29wcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciwKKwkJCQkgICBzdGFydGluZyBmcm9tIGlubmVybW9zdCBvbmVzLiAgKi8KKyAgTElfT05MWV9JTk5FUk1PU1QgPSA0CQkvKiBJdGVyYXRlIG9ubHkgb3ZlciBpbm5lcm1vc3QgbG9vcHMuICAqLworfTsKKworLyogVGhlIGl0ZXJhdG9yIGZvciBsb29wcy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFRoZSBsaXN0IG9mIGxvb3BzIHRvIHZpc2l0LiAgKi8KKyAgdmVjPGludD4gdG9fdmlzaXQ7CisKKyAgLyogVGhlIGluZGV4IG9mIHRoZSBhY3R1YWwgbG9vcC4gICovCisgIHVuc2lnbmVkIGlkeDsKK30gbG9vcF9pdGVyYXRvcjsKKworc3RhdGljIGlubGluZSB2b2lkCitmZWxfbmV4dCAobG9vcF9pdGVyYXRvciAqbGksIGxvb3BfcCAqbG9vcCkKK3sKKyAgaW50IGFudW07CisKKyAgd2hpbGUgKGxpLT50b192aXNpdC5pdGVyYXRlIChsaS0+aWR4LCAmYW51bSkpCisgICAgeworICAgICAgbGktPmlkeCsrOworICAgICAgKmxvb3AgPSBnZXRfbG9vcCAoYW51bSk7CisgICAgICBpZiAoKmxvb3ApCisJcmV0dXJuOworICAgIH0KKworICBsaS0+dG9fdmlzaXQucmVsZWFzZSAoKTsKKyAgKmxvb3AgPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ZlbF9pbml0IChsb29wX2l0ZXJhdG9yICpsaSwgbG9vcF9wICpsb29wLCB1bnNpZ25lZCBmbGFncykKK3sKKyAgc3RydWN0IGxvb3AgKmFsb29wOworICB1bnNpZ25lZCBpOworICBpbnQgbW47CisKKyAgbGktPmlkeCA9IDA7CisgIGlmICghY3VycmVudF9sb29wcykKKyAgICB7CisgICAgICBsaS0+dG9fdmlzaXQuY3JlYXRlICgwKTsKKyAgICAgICpsb29wID0gTlVMTDsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgbGktPnRvX3Zpc2l0LmNyZWF0ZSAobnVtYmVyX29mX2xvb3BzICgpKTsKKyAgbW4gPSAoZmxhZ3MgJiBMSV9JTkNMVURFX1JPT1QpID8gMCA6IDE7CisKKyAgaWYgKGZsYWdzICYgTElfT05MWV9JTk5FUk1PU1QpCisgICAgeworICAgICAgZm9yIChpID0gMDsgdmVjX3NhZmVfaXRlcmF0ZSAoY3VycmVudF9sb29wcy0+bGFycmF5LCBpLCAmYWxvb3ApOyBpKyspCisJaWYgKGFsb29wICE9IE5VTEwKKwkgICAgJiYgYWxvb3AtPmlubmVyID09IE5VTEwKKwkgICAgJiYgYWxvb3AtPm51bSA+PSBtbikKKwkgIGxpLT50b192aXNpdC5xdWlja19wdXNoIChhbG9vcC0+bnVtKTsKKyAgICB9CisgIGVsc2UgaWYgKGZsYWdzICYgTElfRlJPTV9JTk5FUk1PU1QpCisgICAgeworICAgICAgLyogUHVzaCB0aGUgbG9vcHMgdG8gTEktPlRPX1ZJU0lUIGluIHBvc3RvcmRlci4gICovCisgICAgICBmb3IgKGFsb29wID0gY3VycmVudF9sb29wcy0+dHJlZV9yb290OworCSAgIGFsb29wLT5pbm5lciAhPSBOVUxMOworCSAgIGFsb29wID0gYWxvb3AtPmlubmVyKQorCWNvbnRpbnVlOworCisgICAgICB3aGlsZSAoMSkKKwl7CisJICBpZiAoYWxvb3AtPm51bSA+PSBtbikKKwkgICAgbGktPnRvX3Zpc2l0LnF1aWNrX3B1c2ggKGFsb29wLT5udW0pOworCisJICBpZiAoYWxvb3AtPm5leHQpCisJICAgIHsKKwkgICAgICBmb3IgKGFsb29wID0gYWxvb3AtPm5leHQ7CisJCSAgIGFsb29wLT5pbm5lciAhPSBOVUxMOworCQkgICBhbG9vcCA9IGFsb29wLT5pbm5lcikKKwkJY29udGludWU7CisJICAgIH0KKwkgIGVsc2UgaWYgKCFsb29wX291dGVyIChhbG9vcCkpCisJICAgIGJyZWFrOworCSAgZWxzZQorCSAgICBhbG9vcCA9IGxvb3Bfb3V0ZXIgKGFsb29wKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogUHVzaCB0aGUgbG9vcHMgdG8gTEktPlRPX1ZJU0lUIGluIHByZW9yZGVyLiAgKi8KKyAgICAgIGFsb29wID0gY3VycmVudF9sb29wcy0+dHJlZV9yb290OworICAgICAgd2hpbGUgKDEpCisJeworCSAgaWYgKGFsb29wLT5udW0gPj0gbW4pCisJICAgIGxpLT50b192aXNpdC5xdWlja19wdXNoIChhbG9vcC0+bnVtKTsKKworCSAgaWYgKGFsb29wLT5pbm5lciAhPSBOVUxMKQorCSAgICBhbG9vcCA9IGFsb29wLT5pbm5lcjsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIHdoaWxlIChhbG9vcCAhPSBOVUxMICYmIGFsb29wLT5uZXh0ID09IE5VTEwpCisJCWFsb29wID0gbG9vcF9vdXRlciAoYWxvb3ApOworCSAgICAgIGlmIChhbG9vcCA9PSBOVUxMKQorCQlicmVhazsKKwkgICAgICBhbG9vcCA9IGFsb29wLT5uZXh0OworCSAgICB9CisJfQorICAgIH0KKworICBmZWxfbmV4dCAobGksIGxvb3ApOworfQorCisjZGVmaW5lIEZPUl9FQUNIX0xPT1AoTEksIExPT1AsIEZMQUdTKSBcCisgIGZvciAoZmVsX2luaXQgKCYoTEkpLCAmKExPT1ApLCBGTEFHUyk7IFwKKyAgICAgICAoTE9PUCk7IFwKKyAgICAgICBmZWxfbmV4dCAoJihMSSksICYoTE9PUCkpKQorCisjZGVmaW5lIEZPUl9FQUNIX0xPT1BfQlJFQUsoTEkpIFwKKyAgeyBcCisgICAgKExJKS50b192aXNpdC5yZWxlYXNlICgpOyBcCisgICAgYnJlYWs7IFwKKyAgfQorCisvKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0LiAgKi8KK3N0cnVjdCB0YXJnZXRfY2ZnbG9vcCB7CisgIC8qIE51bWJlciBvZiBhdmFpbGFibGUgcmVnaXN0ZXJzLiAgKi8KKyAgdW5zaWduZWQgeF90YXJnZXRfYXZhaWxfcmVnczsKKworICAvKiBOdW1iZXIgb2YgYXZhaWxhYmxlIHJlZ2lzdGVycyB0aGF0IGFyZSBjYWxsLWNsb2JiZXJlZC4gICovCisgIHVuc2lnbmVkIHhfdGFyZ2V0X2Nsb2JiZXJlZF9yZWdzOworCisgIC8qIE51bWJlciBvZiByZWdpc3RlcnMgcmVzZXJ2ZWQgZm9yIHRlbXBvcmFyeSBleHByZXNzaW9ucy4gICovCisgIHVuc2lnbmVkIHhfdGFyZ2V0X3Jlc19yZWdzOworCisgIC8qIFRoZSBjb3N0IGZvciByZWdpc3RlciB3aGVuIHRoZXJlIHN0aWxsIGlzIHNvbWUgcmVzZXJ2ZSwgYnV0IHdlIGFyZQorICAgICBhcHByb2FjaGluZyB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSByZWdpc3RlcnMuICAqLworICB1bnNpZ25lZCB4X3RhcmdldF9yZWdfY29zdFsyXTsKKworICAvKiBUaGUgY29zdCBmb3IgcmVnaXN0ZXIgd2hlbiB3ZSBuZWVkIHRvIHNwaWxsLiAgKi8KKyAgdW5zaWduZWQgeF90YXJnZXRfc3BpbGxfY29zdFsyXTsKK307CisKK2V4dGVybiBzdHJ1Y3QgdGFyZ2V0X2NmZ2xvb3AgZGVmYXVsdF90YXJnZXRfY2ZnbG9vcDsKKyNpZiBTV0lUQ0hBQkxFX1RBUkdFVAorZXh0ZXJuIHN0cnVjdCB0YXJnZXRfY2ZnbG9vcCAqdGhpc190YXJnZXRfY2ZnbG9vcDsKKyNlbHNlCisjZGVmaW5lIHRoaXNfdGFyZ2V0X2NmZ2xvb3AgKCZkZWZhdWx0X3RhcmdldF9jZmdsb29wKQorI2VuZGlmCisKKyNkZWZpbmUgdGFyZ2V0X2F2YWlsX3JlZ3MgXAorICAodGhpc190YXJnZXRfY2ZnbG9vcC0+eF90YXJnZXRfYXZhaWxfcmVncykKKyNkZWZpbmUgdGFyZ2V0X2Nsb2JiZXJlZF9yZWdzIFwKKyAgKHRoaXNfdGFyZ2V0X2NmZ2xvb3AtPnhfdGFyZ2V0X2Nsb2JiZXJlZF9yZWdzKQorI2RlZmluZSB0YXJnZXRfcmVzX3JlZ3MgXAorICAodGhpc190YXJnZXRfY2ZnbG9vcC0+eF90YXJnZXRfcmVzX3JlZ3MpCisjZGVmaW5lIHRhcmdldF9yZWdfY29zdCBcCisgICh0aGlzX3RhcmdldF9jZmdsb29wLT54X3RhcmdldF9yZWdfY29zdCkKKyNkZWZpbmUgdGFyZ2V0X3NwaWxsX2Nvc3QgXAorICAodGhpc190YXJnZXRfY2ZnbG9vcC0+eF90YXJnZXRfc3BpbGxfY29zdCkKKworLyogUmVnaXN0ZXIgcHJlc3N1cmUgZXN0aW1hdGlvbiBmb3IgaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMgJiBsb29wCisgICBpbnZhcmlhbnQgbW90aW9uLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBlc3RpbWF0ZV9yZWdfcHJlc3N1cmVfY29zdCAodW5zaWduZWQsIHVuc2lnbmVkLCBib29sLCBib29sKTsKK2V4dGVybiB2b2lkIGluaXRfc2V0X2Nvc3RzICh2b2lkKTsKKworLyogTG9vcCBvcHRpbWl6ZXIgaW5pdGlhbGl6YXRpb24uICAqLworZXh0ZXJuIHZvaWQgbG9vcF9vcHRpbWl6ZXJfaW5pdCAodW5zaWduZWQpOworZXh0ZXJuIHZvaWQgbG9vcF9vcHRpbWl6ZXJfZmluYWxpemUgKHZvaWQpOworCisvKiBPcHRpbWl6YXRpb24gcGFzc2VzLiAgKi8KK2V4dGVybiB2b2lkIHVuc3dpdGNoX2xvb3BzICh2b2lkKTsKKworZW51bQoreworICBVQVBfUEVFTCA9IDEsCQkvKiBFbmFibGVzIGxvb3AgcGVlbGluZy4gICovCisgIFVBUF9VTlJPTEwgPSAyLAkvKiBFbmFibGVzIHVucm9sbGluZyBvZiBsb29wcyBpZiBpdCBzZWVtcyBwcm9maXRhYmxlLiAgKi8KKyAgVUFQX1VOUk9MTF9BTEwgPSA0CS8qIEVuYWJsZXMgdW5yb2xsaW5nIG9mIGFsbCBsb29wcy4gICovCit9OworCitleHRlcm4gdm9pZCB1bnJvbGxfYW5kX3BlZWxfbG9vcHMgKGludCk7CitleHRlcm4gdm9pZCBkb2xvb3Bfb3B0aW1pemVfbG9vcHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgbW92ZV9sb29wX2ludmFyaWFudHMgKHZvaWQpOworZXh0ZXJuIGJvb2wgZmluaXRlX2xvb3BfcCAoc3RydWN0IGxvb3AgKik7CitleHRlcm4gdm9pZCBzY2FsZV9sb29wX3Byb2ZpbGUgKHN0cnVjdCBsb29wICpsb29wLCBpbnQgc2NhbGUsIGdjb3ZfdHlwZSBpdGVyYXRpb25fYm91bmQpOworZXh0ZXJuIHZlYzxiYXNpY19ibG9jaz4gZ2V0X2xvb3BfaG90X3BhdGggKGNvbnN0IHN0cnVjdCBsb29wICpsb29wKTsKKworLyogUmV0dXJucyB0aGUgb3V0ZXJtb3N0IGxvb3Agb2YgdGhlIGxvb3AgbmVzdCB0aGF0IGNvbnRhaW5zIExPT1AuKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvb3AgKgorbG9vcF9vdXRlcm1vc3QgKHN0cnVjdCBsb29wICpsb29wKQoreworICB1bnNpZ25lZCBuID0gdmVjX3NhZmVfbGVuZ3RoIChsb29wLT5zdXBlcmxvb3BzKTsKKworICBpZiAobiA8PSAxKQorICAgIHJldHVybiBsb29wOworCisgIHJldHVybiAoKmxvb3AtPnN1cGVybG9vcHMpWzFdOworfQorCisKKyNlbmRpZiAvKiBHQ0NfQ0ZHTE9PUF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY2dyYXBoLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY2dyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiN2FlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jZ3JhcGguaApAQCAtMCwwICsxLDEzNzEgQEAKKy8qIENhbGxncmFwaCBoYW5kbGluZyBjb2RlLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBKYW4gSHViaWNrYQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfQ0dSQVBIX0gKKyNkZWZpbmUgR0NDX0NHUkFQSF9ICisKKyNpbmNsdWRlICJpcy1hLmgiCisjaW5jbHVkZSAicGx1Z2luLWFwaS5oIgorI2luY2x1ZGUgInZlYy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJiYXNpYy1ibG9jay5oIgorI2luY2x1ZGUgImZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiaXBhLXJlZi5oIgorCisvKiBTeW1ib2wgdGFibGUgY29uc2lzdHMgb2YgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuCisgICBUT0RPOiBhZGQgbGFiZWxzLCBjb25zdGFudCBwb29sIGFuZCBhbGlhc2VzLiAgKi8KK2VudW0gc3ltdGFiX3R5cGUKK3sKKyAgU1lNVEFCX1NZTUJPTCwKKyAgU1lNVEFCX0ZVTkNUSU9OLAorICBTWU1UQUJfVkFSSUFCTEUKK307CisKKy8qIEJhc2Ugb2YgYWxsIGVudHJpZXMgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgIFRoZSBzeW10YWJfbm9kZSBpcyBpbmhlcml0ZWQgYnkgY2dyYXBoIGFuZCB2YXJwb2wgbm9kZXMuICAqLworc3RydWN0IEdUWSgoKSkgc3ltdGFiX25vZGVfYmFzZQoreworICAvKiBUeXBlIG9mIHRoZSBzeW1ib2wuICAqLworICBFTlVNX0JJVEZJRUxEIChzeW10YWJfdHlwZSkgdHlwZSA6IDg7CisKKyAgLyogVGhlIHN5bWJvbHMgcmVzb2x1dGlvbi4gICovCisgIEVOVU1fQklURklFTEQgKGxkX3BsdWdpbl9zeW1ib2xfcmVzb2x1dGlvbikgcmVzb2x1dGlvbiA6IDg7CisKKyAgLyogU2V0IHdoZW4gZnVuY3Rpb24gaGFzIGFkZHJlc3MgdGFrZW4uCisgICAgIEluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXQgaW1wbHkgbmVlZGVkIGZsYWcuICovCisgIHVuc2lnbmVkIGFkZHJlc3NfdGFrZW4gOiAxOworICAvKiBTZXQgd2hlbiB2YXJpYWJsZSBpcyB1c2VkIGZyb20gb3RoZXIgTFRSQU5TIHBhcnRpdGlvbi4gICovCisgIHVuc2lnbmVkIHVzZWRfZnJvbV9vdGhlcl9wYXJ0aXRpb24gOiAxOworICAvKiBTZXQgd2hlbiBmdW5jdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG90aGVyIExUUkFOUyBwYXJ0aXRpb24uICAKKyAgICAgRHVyaW5nIFdQQSBvdXRwdXQgaXQgaXMgdXNlZCB0byBtYXJrIG5vZGVzIHRoYXQgYXJlIHByZXNlbnQgaW4KKyAgICAgbXVsdGlwbGUgcGFydGl0aW9ucy4gICovCisgIHVuc2lnbmVkIGluX290aGVyX3BhcnRpdGlvbiA6IDE7CisgIC8qIFNldCB3aGVuIGZ1bmN0aW9uIGlzIHZpc2libGUgYnkgb3RoZXIgdW5pdHMuICAqLworICB1bnNpZ25lZCBleHRlcm5hbGx5X3Zpc2libGUgOiAxOworICAvKiBOZWVkZWQgdmFyaWFibGVzIG1pZ2h0IGJlY29tZSBkZWFkIGJ5IG9wdGltaXphdGlvbi4gIFRoaXMgZmxhZworICAgICBmb3JjZXMgdGhlIHZhcmlhYmxlIHRvIGJlIG91dHB1dCBldmVuIGlmIGl0IGFwcGVhcnMgZGVhZCBvdGhlcndpc2UuICAqLworICB1bnNpZ25lZCBmb3JjZV9vdXRwdXQgOiAxOworCisgIC8qIE9yZGVyaW5nIG9mIGFsbCBzeW10YWIgZW50cmllcy4gICovCisgIGludCBvcmRlcjsKKworICB0cmVlIGRlY2w7CisKKyAgLyogVmVjdG9ycyBvZiByZWZlcnJpbmcgYW5kIHJlZmVyZW5jZWQgZW50aXRpZXMuICAqLworICBzdHJ1Y3QgaXBhX3JlZl9saXN0IHJlZl9saXN0OworCisgIC8qIENpcmN1bGFyIGxpc3Qgb2Ygbm9kZXMgaW4gdGhlIHNhbWUgY29tZGF0IGdyb3VwIGlmIG5vbi1OVUxMLiAgKi8KKyAgc3ltdGFiX25vZGUgc2FtZV9jb21kYXRfZ3JvdXA7CisKKyAgLyogRmlsZSBzdHJlYW0gd2hlcmUgdGhpcyBub2RlIGlzIGJlaW5nIHdyaXR0ZW4gdG8uICAqLworICBzdHJ1Y3QgbHRvX2ZpbGVfZGVjbF9kYXRhICogbHRvX2ZpbGVfZGF0YTsKKworICAvKiBMaW5rZWQgbGlzdCBvZiBzeW1ib2wgdGFibGUgZW50cmllcyBzdGFydGluZyB3aXRoIHN5bXRhYl9ub2Rlcy4gICovCisgIHN5bXRhYl9ub2RlIG5leHQ7CisgIHN5bXRhYl9ub2RlIHByZXZpb3VzOworICAvKiBMaW5rZWQgbGlzdCBvZiBzeW1ib2xzIHdpdGggdGhlIHNhbWUgYXNtIG5hbWUuICBUaGVyZSBtYXkgYmUgbXVsdGlwbGUKKyAgICAgZW50cmllcyBmb3Igc2luZ2xlIHN5bWJvbCBuYW1lIGluIHRoZSBjYXNlIG9mIExUTyByZXNvbHV0aW9ucywKKyAgICAgZXhpc3RlbmNlIG9mIGlubGluZSBjbG9uZXMsIG9yIGR1cGxpY2F0ZWQgZGVjbGFyYXRpb24uIFRoZSBsYXN0IGNhc2UKKyAgICAgaXMgYSBsb25nIHN0YW5kaW5nIGJ1ZyBmcm9udGVuZHMgYW5kIGJ1aWx0aW4gaGFuZGxpbmcuICovCisgIHN5bXRhYl9ub2RlIG5leHRfc2hhcmluZ19hc21fbmFtZTsKKyAgc3ltdGFiX25vZGUgcHJldmlvdXNfc2hhcmluZ19hc21fbmFtZTsKKworICBQVFIgR1RZICgoc2tpcCkpIGF1eDsKK307CisKK2VudW0gYXZhaWxhYmlsaXR5Cit7CisgIC8qIE5vdCB5ZXQgc2V0IGJ5IGNncmFwaF9mdW5jdGlvbl9ib2R5X2F2YWlsYWJpbGl0eS4gICovCisgIEFWQUlMX1VOU0VULAorICAvKiBGdW5jdGlvbiBib2R5L3ZhcmlhYmxlIGluaXRpYWxpemVyIGlzIHVua25vd24uICAqLworICBBVkFJTF9OT1RfQVZBSUxBQkxFLAorICAvKiBGdW5jdGlvbiBib2R5L3ZhcmlhYmxlIGluaXRpYWxpemVyIGlzIGtub3duIGJ1dCBtaWdodCBiZSByZXBsYWNlZAorICAgICBieSBhIGRpZmZlcmVudCBvbmUgZnJvbSBvdGhlciBjb21waWxhdGlvbiB1bml0IGFuZCB0aHVzIG5lZWRzIHRvCisgICAgIGJlIGRlYWx0IHdpdGggYSBjYXJlLiAgTGlrZSBBVkFJTF9OT1RfQVZBSUxBQkxFIGl0IGNhbiBoYXZlCisgICAgIGFyYml0cmFyeSBzaWRlIGVmZmVjdHMgb24gZXNjYXBpbmcgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMsIHdoaWxlCisgICAgIGxpa2UgQVZBSUxBQkxFIGl0IG1pZ2h0IGFjY2VzcyBzdGF0aWMgdmFyaWFibGVzLiAgKi8KKyAgQVZBSUxfT1ZFUldSSVRBQkxFLAorICAvKiBGdW5jdGlvbiBib2R5L3ZhcmlhYmxlIGluaXRpYWxpemVyIGlzIGtub3duIGFuZCB3aWxsIGJlIHVzZWQgaW4gZmluYWwKKyAgICAgcHJvZ3JhbS4gICovCisgIEFWQUlMX0FWQUlMQUJMRSwKKyAgLyogRnVuY3Rpb24gYm9keS92YXJpYWJsZSBpbml0aWFsaXplciBpcyBrbm93biBhbmQgYWxsIGl0J3MgdXNlcyBhcmUgZXhwbGljaXRseQorICAgICB2aXNpYmxlIHdpdGhpbiBjdXJyZW50IHVuaXQgKGllIGl0J3MgYWRkcmVzcyBpcyBuZXZlciB0YWtlbiBhbmQgaXQgaXMgbm90CisgICAgIGV4cG9ydGVkIHRvIG90aGVyIHVuaXRzKS4KKyAgICAgQ3VycmVudGx5IHVzZWQgb25seSBmb3IgZnVuY3Rpb25zLiAgKi8KKyAgQVZBSUxfTE9DQUwKK307CisKKy8qIFRoaXMgaXMgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgcHV0IGludG8gdGhlIGNncmFwaCBsb2NhbCBzdHJ1Y3R1cmUKKyAgIHRvIHJlY292ZXIgYSBmdW5jdGlvbi4gICovCitzdHJ1Y3QgbHRvX2ZpbGVfZGVjbF9kYXRhOworCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNncmFwaF9hdmFpbGFiaWxpdHlfbmFtZXNbXTsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbGRfcGx1Z2luX3N5bWJvbF9yZXNvbHV0aW9uX25hbWVzW107CisKKy8qIEluZm9ybWF0aW9uIGFib3V0IHRodW5rLCB1c2VkIG9ubHkgZm9yIHNhbWUgYm9keSBhbGlhc2VzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgY2dyYXBoX3RodW5rX2luZm8geworICAvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgdGh1bmsuICAqLworICBIT1NUX1dJREVfSU5UIGZpeGVkX29mZnNldDsKKyAgSE9TVF9XSURFX0lOVCB2aXJ0dWFsX3ZhbHVlOworICB0cmVlIGFsaWFzOworICBib29sIHRoaXNfYWRqdXN0aW5nOworICBib29sIHZpcnR1YWxfb2Zmc2V0X3A7CisgIC8qIFNldCB0byB0cnVlIHdoZW4gYWxpYXMgbm9kZSBpcyB0aHVuay4gICovCisgIGJvb2wgdGh1bmtfcDsKK307CisKKy8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBmdW5jdGlvbiBjb2xsZWN0ZWQgbG9jYWxseS4KKyAgIEF2YWlsYWJsZSBhZnRlciBmdW5jdGlvbiBpcyBhbmFseXplZC4gICovCisKK3N0cnVjdCBHVFkoKCkpIGNncmFwaF9sb2NhbF9pbmZvIHsKKyAgLyogU2V0IHdoZW4gZnVuY3Rpb24gZnVuY3Rpb24gaXMgdmlzaWJsZSBpbiBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgb25seQorICAgICBhbmQgaXRzIGFkZHJlc3MgaXMgbmV2ZXIgdGFrZW4uICAqLworICB1bnNpZ25lZCBsb2NhbCA6IDE7CisKKyAgLyogU2V0IG9uY2UgaXQgaGFzIGJlZW4gZmluYWxpemVkIHNvIHdlIGNvbnNpZGVyIGl0IHRvIGJlIG91dHB1dC4gICovCisgIHVuc2lnbmVkIGZpbmFsaXplZCA6IDE7CisKKyAgLyogRmFsc2Ugd2hlbiB0aGVyZSBpcyBzb21ldGhpbmcgbWFrZXMgdmVyc2lvbmluZyBpbXBvc3NpYmxlLiAgKi8KKyAgdW5zaWduZWQgdmVyc2lvbmFibGUgOiAxOworCisgIC8qIEZhbHNlIHdoZW4gZnVuY3Rpb24gY2FsbGluZyBjb252ZW50aW9uIGFuZCBzaWduYXR1cmUgY2FuIG5vdCBiZSBjaGFuZ2VkLgorICAgICBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gX19idWlsdGluX2FwcGx5X2FyZ3MgaXMgdXNlZC4gICovCisgIHVuc2lnbmVkIGNhbl9jaGFuZ2Vfc2lnbmF0dXJlIDogMTsKKworICAvKiBUcnVlIHdoZW4gdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIG9yaWdpbmFsbHkgZXh0ZXJuIGlubGluZSwgYnV0IGl0IGlzCisgICAgIHJlZGVmaW5lZCBub3cuICAqLworICB1bnNpZ25lZCByZWRlZmluZWRfZXh0ZXJuX2lubGluZSA6IDE7CisKKyAgLyogVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gbWF5IGVudGVyIHNlcmlhbCBpcnJldm9jYWJsZSBtb2RlLiAgKi8KKyAgdW5zaWduZWQgdG1fbWF5X2VudGVyX2lyciA6IDE7Cit9OworCisvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZnVuY3Rpb24gdGhhdCBuZWVkcyB0byBiZSBjb21wdXRlZCBnbG9iYWxseQorICAgb25jZSBjb21waWxhdGlvbiBpcyBmaW5pc2hlZC4gIEF2YWlsYWJsZSBvbmx5IHdpdGggLWZ1bml0LWF0LWEtdGltZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIGNncmFwaF9nbG9iYWxfaW5mbyB7CisgIC8qIEZvciBpbmxpbmUgY2xvbmVzIHRoaXMgcG9pbnRzIHRvIHRoZSBmdW5jdGlvbiB0aGV5IHdpbGwgYmUKKyAgICAgaW5saW5lZCBpbnRvLiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICppbmxpbmVkX3RvOworfTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgcHJvcGFnYXRlZCBieSB0aGUgUlRMIGJhY2tlbmQuCisgICBBdmFpbGFibGUgb25seSBmb3IgZnVuY3Rpb25zIHRoYXQgaGFzIGJlZW4gYWxyZWFkeSBhc3NlbWJsZWQuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBjZ3JhcGhfcnRsX2luZm8geworICAgdW5zaWduZWQgaW50IHByZWZlcnJlZF9pbmNvbWluZ19zdGFja19ib3VuZGFyeTsKK307CisKKy8qIFJlcHJlc2VudCB3aGljaCBERUNMIHRyZWUgKG9yIHJlZmVyZW5jZSB0byBzdWNoIHRyZWUpCisgICB3aWxsIGJlIHJlcGxhY2VkIGJ5IGFub3RoZXIgdHJlZSB3aGlsZSB2ZXJzaW9uaW5nLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGlwYV9yZXBsYWNlX21hcAoreworICAvKiBUaGUgdHJlZSB0aGF0IHdpbGwgYmUgcmVwbGFjZWQuICAqLworICB0cmVlIG9sZF90cmVlOworICAvKiBUaGUgbmV3IChyZXBsYWNpbmcpIHRyZWUuICAqLworICB0cmVlIG5ld190cmVlOworICAvKiBQYXJhbWV0ZXIgbnVtYmVyIHRvIHJlcGxhY2UsIHdoZW4gb2xkX3RyZWUgaXMgTlVMTC4gICovCisgIGludCBwYXJtX251bTsKKyAgLyogVHJ1ZSB3aGVuIGEgc3Vic3RpdHV0aW9uIHNob3VsZCBiZSBkb25lLCBmYWxzZSBvdGhlcndpc2UuICAqLworICBib29sIHJlcGxhY2VfcDsKKyAgLyogVHJ1ZSB3aGVuIHdlIHJlcGxhY2UgYSByZWZlcmVuY2UgdG8gb2xkX3RyZWUuICAqLworICBib29sIHJlZl9wOworfTsKK3R5cGVkZWYgc3RydWN0IGlwYV9yZXBsYWNlX21hcCAqaXBhX3JlcGxhY2VfbWFwX3A7CisKK3N0cnVjdCBHVFkoKCkpIGNncmFwaF9jbG9uZV9pbmZvCit7CisgIHZlYzxpcGFfcmVwbGFjZV9tYXBfcCwgdmFfZ2M+ICp0cmVlX21hcDsKKyAgYml0bWFwIGFyZ3NfdG9fc2tpcDsKKyAgYml0bWFwIGNvbWJpbmVkX2FyZ3NfdG9fc2tpcDsKK307CisKKworLyogVGhlIGNncmFwaCBkYXRhIHN0cnVjdHVyZS4KKyAgIEVhY2ggZnVuY3Rpb24gZGVjbCBoYXMgYXNzaWduZWQgY2dyYXBoX25vZGUgbGlzdGluZyBjYWxsZWVzIGFuZCBjYWxsZXJzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgY2dyYXBoX25vZGUgeworICBzdHJ1Y3Qgc3ltdGFiX25vZGVfYmFzZSBzeW1ib2w7CisgIHN0cnVjdCBjZ3JhcGhfZWRnZSAqY2FsbGVlczsKKyAgc3RydWN0IGNncmFwaF9lZGdlICpjYWxsZXJzOworICAvKiBMaXN0IG9mIGVkZ2VzIHJlcHJlc2VudGluZyBpbmRpcmVjdCBjYWxscyB3aXRoIGEgeWV0IHVuZGV0ZXJtaW5lZAorICAgICBjYWxsZWUuICAqLworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmluZGlyZWN0X2NhbGxzOworICAvKiBGb3IgbmVzdGVkIGZ1bmN0aW9ucyBwb2ludHMgdG8gZnVuY3Rpb24gdGhlIG5vZGUgaXMgbmVzdGVkIGluLiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICoKKyAgICBHVFkgKChuZXN0ZWRfcHRyICh1bmlvbiBzeW10YWJfbm9kZV9kZWYsICIoc3RydWN0IGNncmFwaF9ub2RlICopKCVoKSIsICIoc3ltdGFiX25vZGUpJWgiKSkpCisgICAgb3JpZ2luOworICAvKiBQb2ludHMgdG8gZmlyc3QgbmVzdGVkIGZ1bmN0aW9uLCBpZiBhbnkuICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKgorICAgIEdUWSAoKG5lc3RlZF9wdHIgKHVuaW9uIHN5bXRhYl9ub2RlX2RlZiwgIihzdHJ1Y3QgY2dyYXBoX25vZGUgKikoJWgpIiwgIihzeW10YWJfbm9kZSklaCIpKSkKKyAgICBuZXN0ZWQ7CisgIC8qIFBvaW50ZXIgdG8gdGhlIG5leHQgZnVuY3Rpb24gd2l0aCBzYW1lIG9yaWdpbiwgaWYgYW55LiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICoKKyAgICBHVFkgKChuZXN0ZWRfcHRyICh1bmlvbiBzeW10YWJfbm9kZV9kZWYsICIoc3RydWN0IGNncmFwaF9ub2RlICopKCVoKSIsICIoc3ltdGFiX25vZGUpJWgiKSkpCisgICAgbmV4dF9uZXN0ZWQ7CisgIC8qIFBvaW50ZXIgdG8gdGhlIG5leHQgY2xvbmUuICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5leHRfc2libGluZ19jbG9uZTsKKyAgc3RydWN0IGNncmFwaF9ub2RlICpwcmV2X3NpYmxpbmdfY2xvbmU7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2xvbmVzOworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmNsb25lX29mOworICAvKiBGb3IgZnVuY3Rpb25zIHdpdGggbWFueSBjYWxscyBzaXRlcyBpdCBob2xkcyBtYXAgZnJvbSBjYWxsIGV4cHJlc3Npb24KKyAgICAgdG8gdGhlIGVkZ2UgdG8gc3BlZWQgdXAgY2dyYXBoX2VkZ2UgZnVuY3Rpb24uICAqLworICBodGFiX3QgR1RZKChwYXJhbV9pcyAoc3RydWN0IGNncmFwaF9lZGdlKSkpIGNhbGxfc2l0ZV9oYXNoOworICAvKiBEZWNsYXJhdGlvbiBub2RlIHVzZWQgdG8gYmUgY2xvbmUgb2YuICovCisgIHRyZWUgZm9ybWVyX2Nsb25lX29mOworCisgIC8qIEludGVycHJvY2VkdXJhbCBwYXNzZXMgc2NoZWR1bGVkIHRvIGhhdmUgdGhlaXIgdHJhbnNmb3JtIGZ1bmN0aW9ucworICAgICBhcHBsaWVkIG5leHQgdGltZSB3ZSBleGVjdXRlIGxvY2FsIHBhc3Mgb24gdGhlbS4gIFdlIG1haW50YWluIGl0CisgICAgIHBlci1mdW5jdGlvbiBpbiBvcmRlciB0byBhbGxvdyBJUEEgcGFzc2VzIHRvIGludHJvZHVjZSBuZXcgZnVuY3Rpb25zLiAgKi8KKyAgdmVjPGlwYV9vcHRfcGFzcz4gR1RZKChza2lwKSkgaXBhX3RyYW5zZm9ybXNfdG9fYXBwbHk7CisKKyAgc3RydWN0IGNncmFwaF9sb2NhbF9pbmZvIGxvY2FsOworICBzdHJ1Y3QgY2dyYXBoX2dsb2JhbF9pbmZvIGdsb2JhbDsKKyAgc3RydWN0IGNncmFwaF9ydGxfaW5mbyBydGw7CisgIHN0cnVjdCBjZ3JhcGhfY2xvbmVfaW5mbyBjbG9uZTsKKyAgc3RydWN0IGNncmFwaF90aHVua19pbmZvIHRodW5rOworCisgIC8qIEV4cGVjdGVkIG51bWJlciBvZiBleGVjdXRpb25zOiBjYWxjdWxhdGVkIGluIHByb2ZpbGUuYy4gICovCisgIGdjb3ZfdHlwZSBjb3VudDsKKyAgLyogSG93IHRvIHNjYWxlIGNvdW50cyBhdCBtYXRlcmlhbGl6YXRpb24gdGltZTsgdXNlZCB0byBtZXJnZQorICAgICBMVE8gdW5pdHMgd2l0aCBkaWZmZXJlbnQgbnVtYmVyIG9mIHByb2ZpbGUgcnVucy4gICovCisgIGludCBjb3VudF9tYXRlcmlhbGl6YXRpb25fc2NhbGU7CisgIC8qIFVuaXF1ZSBpZCBvZiB0aGUgbm9kZS4gICovCisgIGludCB1aWQ7CisKKyAgLyogU2V0IHdoZW4gZGVjbCBpcyBhbiBhYnN0cmFjdCBmdW5jdGlvbiBwb2ludGVkIHRvIGJ5IHRoZQorICAgICBBQlNUUkFDVF9ERUNMX09SSUdJTiBvZiBhIHJlYWNoYWJsZSBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGFic3RyYWN0X2FuZF9uZWVkZWQgOiAxOworICAvKiBTZXQgb25jZSB0aGUgZnVuY3Rpb24gaXMgbG93ZXJlZCAoaS5lLiBpdHMgQ0ZHIGlzIGJ1aWx0KS4gICovCisgIHVuc2lnbmVkIGxvd2VyZWQgOiAxOworICAvKiBTZXQgb25jZSB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gaW5zdGFudGlhdGVkIGFuZCBpdHMgY2FsbGVlCisgICAgIGxpc3RzIGNyZWF0ZWQuICAqLworICB1bnNpZ25lZCBhbmFseXplZCA6IDE7CisgIC8qIFNldCB3aGVuIGZ1bmN0aW9uIGlzIHNjaGVkdWxlZCB0byBiZSBwcm9jZXNzZWQgYnkgbG9jYWwgcGFzc2VzLiAgKi8KKyAgdW5zaWduZWQgcHJvY2VzcyA6IDE7CisgIC8qIFNldCBmb3IgYWxpYXNlcyBvbmNlIHRoZXkgZ290IHRocm91Z2ggYXNzZW1ibGVfYWxpYXMuICAqLworICB1bnNpZ25lZCBhbGlhcyA6IDE7CisgIC8qIFNldCBmb3IgYWxpYXNlcyBjcmVhdGVkIGFzIEMrKyBzYW1lIGJvZHkgYWxpYXNlcy4gICovCisgIHVuc2lnbmVkIHNhbWVfYm9keV9hbGlhcyA6IDE7CisgIC8qIEhvdyBjb21tb25seSBleGVjdXRlZCB0aGUgbm9kZSBpcy4gIEluaXRpYWxpemVkIGR1cmluZyBicmFuY2gKKyAgICAgcHJvYmFiaWxpdGllcyBwYXNzLiAgKi8KKyAgRU5VTV9CSVRGSUVMRCAobm9kZV9mcmVxdWVuY3kpIGZyZXF1ZW5jeSA6IDI7CisgIC8qIFRydWUgd2hlbiBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQgYXQgc3RhcnR1cCAoZnJvbSBzdGF0aWMgY3RvcikuICAqLworICB1bnNpZ25lZCBvbmx5X2NhbGxlZF9hdF9zdGFydHVwIDogMTsKKyAgLyogVHJ1ZSB3aGVuIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCBhdCBzdGFydHVwIChmcm9tIHN0YXRpYyBkdG9yKS4gICovCisgIHVuc2lnbmVkIG9ubHlfY2FsbGVkX2F0X2V4aXQgOiAxOworICAvKiBUcnVlIHdoZW4gZnVuY3Rpb24gaXMgdGhlIHRyYW5zYWN0aW9uYWwgY2xvbmUgb2YgYSBmdW5jdGlvbiB3aGljaAorICAgICBpcyBjYWxsZWQgb25seSBmcm9tIGluc2lkZSB0cmFuc2FjdGlvbnMuICAqLworICAvKiA/PyBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcy4gIFdlIGhhdmUgZW5vdWdoIGJpdHMgaW4KKyAgICAgY2dyYXBoIHRvIGNhbGN1bGF0ZSBpdC4gICovCisgIHVuc2lnbmVkIHRtX2Nsb25lIDogMTsKKyAgLyogVHJ1ZSBpZiB0aGlzIGRlY2wgaXMgYSBkaXNwYXRjaGVyIGZvciBmdW5jdGlvbiB2ZXJzaW9ucy4gICovCisgIHVuc2lnbmVkIGRpc3BhdGNoZXJfZnVuY3Rpb24gOiAxOworfTsKKworCit0eXBlZGVmIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2dyYXBoX25vZGVfcHRyOworCisKKy8qIEZ1bmN0aW9uIE11bHRpdmVyc2lvbmluZyBpbmZvLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8geworICAvKiBUaGUgY2dyYXBoX25vZGUgZm9yIHdoaWNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluZm8gaXMgc3RvcmVkLiAgKi8KKyAgc3RydWN0IGNncmFwaF9ub2RlICp0aGlzX25vZGU7CisgIC8qIENoYWlucyBhbGwgdGhlIHNlbWFudGljYWxseSBpZGVudGljYWwgZnVuY3Rpb24gdmVyc2lvbnMuICBUaGUKKyAgICAgZmlyc3QgZnVuY3Rpb24gaW4gdGhpcyBjaGFpbiBpcyB0aGUgdmVyc2lvbl9pbmZvIG5vZGUgb2YgdGhlCisgICAgIGRlZmF1bHQgZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqcHJldjsKKyAgLyogSWYgdGhpcyB2ZXJzaW9uIG5vZGUgY29ycmVzcG9uZHMgdG8gYSBkaXNwYXRjaGVyIGZvciBmdW5jdGlvbgorICAgICB2ZXJzaW9ucywgdGhpcyBwb2ludHMgdG8gdGhlIHZlcnNpb24gaW5mbyBub2RlIG9mIHRoZSBkZWZhdWx0CisgICAgIGZ1bmN0aW9uLCB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgY2hhaW4uICAqLworICBzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqbmV4dDsKKyAgLyogSWYgdGhpcyBub2RlIGNvcnJlc3BvbmRzIHRvIGEgZnVuY3Rpb24gdmVyc2lvbiwgdGhpcyBwb2ludHMKKyAgICAgdG8gdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gZGVjbCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgbXVzdAorICAgICBiZSBjYWxsZWQgdG8gZXhlY3V0ZSB0aGUgcmlnaHQgZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4tdGltZS4KKworICAgICBJZiB0aGlzIGNncmFwaCBub2RlIGlzIGEgZGlzcGF0Y2hlciAoaWYgZGlzcGF0Y2hlcl9mdW5jdGlvbiBpcworICAgICB0cnVlLCBpbiB0aGUgY2dyYXBoX25vZGUgc3RydWN0KSBmb3IgZnVuY3Rpb24gdmVyc2lvbnMsIHRoaXMKKyAgICAgcG9pbnRzIHRvIHJlc29sdmVyIGZ1bmN0aW9uLCB3aGljaCBob2xkcyB0aGUgZnVuY3Rpb24gYm9keSBvZiB0aGUKKyAgICAgZGlzcGF0Y2hlci4gVGhlIGRpc3BhdGNoZXIgZGVjbCBpcyBhbiBhbGlhcyB0byB0aGUgcmVzb2x2ZXIKKyAgICAgZnVuY3Rpb24gZGVjbC4gICovCisgIHRyZWUgZGlzcGF0Y2hlcl9yZXNvbHZlcjsKK307CisKKy8qIEdldCB0aGUgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyBub2RlIGNvcnJlc3BvbmRpbmcgdG8gbm9kZS4gICovCitzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqCisgIGdldF9jZ3JhcGhfbm9kZV92ZXJzaW9uIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOworCisvKiBJbnNlcnQgYSBuZXcgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyBub2RlIGludG8gY2dyYXBoX2ZudmVyX2h0YWIKKyAgIGNvcnJlc3BvbmRpbmcgdG8gY2dyYXBoX25vZGUgTk9ERS4gICovCitzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqCisgIGluc2VydF9uZXdfY2dyYXBoX25vZGVfdmVyc2lvbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKTsKKworLyogUmVjb3JkIHRoYXQgREVDTDEgYW5kIERFQ0wyIGFyZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIGZ1bmN0aW9uCisgICB2ZXJzaW9ucy4gICovCit2b2lkIHJlY29yZF9mdW5jdGlvbl92ZXJzaW9ucyAodHJlZSBkZWNsMSwgdHJlZSBkZWNsMik7CisKKy8qIFJlbW92ZSB0aGUgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyBhbmQgY2dyYXBoX25vZGUgZm9yIERFQ0wuICBUaGlzCisgICBERUNMIGlzIGEgZHVwbGljYXRlIGRlY2xhcmF0aW9uLiAgKi8KK3ZvaWQgZGVsZXRlX2Z1bmN0aW9uX3ZlcnNpb24gKHRyZWUgZGVjbCk7CisKKy8qIEEgY2dyYXBoIG5vZGUgc2V0IGlzIGEgY29sbGVjdGlvbiBvZiBjZ3JhcGggbm9kZXMuICBBIGNncmFwaCBub2RlCisgICBjYW4gYXBwZWFyIGluIG11bHRpcGxlIHNldHMuICAqLworc3RydWN0IGNncmFwaF9ub2RlX3NldF9kZWYKK3sKKyAgc3RydWN0IHBvaW50ZXJfbWFwX3QgKm1hcDsKKyAgdmVjPGNncmFwaF9ub2RlX3B0cj4gbm9kZXM7Cit9OworCit0eXBlZGVmIHN0cnVjdCB2YXJwb29sX25vZGUgKnZhcnBvb2xfbm9kZV9wdHI7CisKKworLyogQSB2YXJwb29sIG5vZGUgc2V0IGlzIGEgY29sbGVjdGlvbiBvZiB2YXJwb29sIG5vZGVzLiAgQSB2YXJwb29sIG5vZGUKKyAgIGNhbiBhcHBlYXIgaW4gbXVsdGlwbGUgc2V0cy4gICovCitzdHJ1Y3QgdmFycG9vbF9ub2RlX3NldF9kZWYKK3sKKyAgc3RydWN0IHBvaW50ZXJfbWFwX3QgKiBtYXA7CisgIHZlYzx2YXJwb29sX25vZGVfcHRyPiBub2RlczsKK307CisKK3R5cGVkZWYgc3RydWN0IGNncmFwaF9ub2RlX3NldF9kZWYgKmNncmFwaF9ub2RlX3NldDsKKworCit0eXBlZGVmIHN0cnVjdCB2YXJwb29sX25vZGVfc2V0X2RlZiAqdmFycG9vbF9ub2RlX3NldDsKKworCisvKiBJdGVyYXRvciBzdHJ1Y3R1cmUgZm9yIGNncmFwaCBub2RlIHNldHMuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgY2dyYXBoX25vZGVfc2V0IHNldDsKKyAgdW5zaWduZWQgaW5kZXg7Cit9IGNncmFwaF9ub2RlX3NldF9pdGVyYXRvcjsKKworLyogSXRlcmF0b3Igc3RydWN0dXJlIGZvciB2YXJwb29sIG5vZGUgc2V0cy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICB2YXJwb29sX25vZGVfc2V0IHNldDsKKyAgdW5zaWduZWQgaW5kZXg7Cit9IHZhcnBvb2xfbm9kZV9zZXRfaXRlcmF0b3I7CisKKyNkZWZpbmUgREVGQ0lGQ09ERShjb2RlLCBzdHJpbmcpCUNJRl8gIyMgY29kZSwKKy8qIFJlYXNvbnMgZm9yIGlubGluaW5nIGZhaWx1cmVzLiAgKi8KK3R5cGVkZWYgZW51bSBjZ3JhcGhfaW5saW5lX2ZhaWxlZF9lbnVtIHsKKyNpbmNsdWRlICJjaWYtY29kZS5kZWYiCisgIENJRl9OX1JFQVNPTlMKK30gY2dyYXBoX2lubGluZV9mYWlsZWRfdDsKKworLyogU3RydWN0dXJlIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhbiBpbmRpcmVjdCBjYWxsLiAgKi8KKworc3RydWN0IEdUWSgoKSkgY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbworeworICAvKiBXaGVuIHBvbHltb3JwaGljIGlzIHNldCwgdGhpcyBmaWVsZCBjb250YWlucyBvZmZzZXQgd2hlcmUgdGhlIG9iamVjdCB3aGljaAorICAgICB3YXMgYWN0dWFsbHkgdXNlZCBpbiB0aGUgcG9seW1vcnBoaWMgcmVzaWRlcyB3aXRoaW4gYSBsYXJnZXIgc3RydWN0dXJlLgorICAgICBJZiBhZ2dfY29udGVudHMgaXMgc2V0LCB0aGUgZmllbGQgY29udGFpbnMgdGhlIG9mZnNldCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZQorICAgICBmcm9tIHdoaWNoIHRoZSBhZGRyZXNzIHRvIGNhbGwgd2FzIGxvYWRlZC4gICovCisgIEhPU1RfV0lERV9JTlQgb2Zmc2V0OworICAvKiBPQkpfVFlQRV9SRUZfVE9LRU4gb2YgYSBwb2x5bW9ycGhpYyBjYWxsIChpZiBwb2x5bW9ycGhpYyBpcyBzZXQpLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBvdHJfdG9rZW47CisgIC8qIFR5cGUgb2YgdGhlIG9iamVjdCBmcm9tIE9CSl9UWVBFX1JFRl9PQkpFQ1QuICovCisgIHRyZWUgb3RyX3R5cGU7CisgIC8qIEluZGV4IG9mIHRoZSBwYXJhbWV0ZXIgdGhhdCBpcyBjYWxsZWQuICAqLworICBpbnQgcGFyYW1faW5kZXg7CisgIC8qIEVDRiBmbGFncyBkZXRlcm1pbmVkIGZyb20gdGhlIGNhbGxlci4gICovCisgIGludCBlY2ZfZmxhZ3M7CisKKyAgLyogU2V0IHdoZW4gdGhlIGNhbGwgaXMgYSB2aXJ0dWFsIGNhbGwgd2l0aCB0aGUgcGFyYW1ldGVyIGJlaW5nIHRoZQorICAgICBhc3NvY2lhdGVkIG9iamVjdCBwb2ludGVyIHJhdGhlciB0aGFuIGEgc2ltcGxlIGRpcmVjdCBjYWxsLiAgKi8KKyAgdW5zaWduZWQgcG9seW1vcnBoaWMgOiAxOworICAvKiBTZXQgd2hlbiB0aGUgY2FsbCBpcyBhIGNhbGwgb2YgYSBwb2ludGVyIGxvYWRlZCBmcm9tIGNvbnRlbnRzIG9mIGFuCisgICAgIGFnZ3JlZ2F0ZSBhdCBvZmZzZXQuICAqLworICB1bnNpZ25lZCBhZ2dfY29udGVudHMgOiAxOworICAvKiBXaGVuIHRoZSBwcmV2aW91cyBiaXQgaXMgc2V0LCB0aGlzIG9uZSBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRlc3RpbmF0aW9uCisgICAgIGlzIGxvYWRlZCBmcm9tIGEgcGFyYW1ldGVyIHBhc3NlZCBieSByZWZlcmVuY2UuICovCisgIHVuc2lnbmVkIGJ5X3JlZiA6IDE7Cit9OworCitzdHJ1Y3QgR1RZKChjaGFpbl9uZXh0ICgiJWgubmV4dF9jYWxsZXIiKSwgY2hhaW5fcHJldiAoIiVoLnByZXZfY2FsbGVyIikpKSBjZ3JhcGhfZWRnZSB7CisgIC8qIEV4cGVjdGVkIG51bWJlciBvZiBleGVjdXRpb25zOiBjYWxjdWxhdGVkIGluIHByb2ZpbGUuYy4gICovCisgIGdjb3ZfdHlwZSBjb3VudDsKKyAgc3RydWN0IGNncmFwaF9ub2RlICpjYWxsZXI7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2FsbGVlOworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKnByZXZfY2FsbGVyOworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKm5leHRfY2FsbGVyOworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKnByZXZfY2FsbGVlOworICBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKm5leHRfY2FsbGVlOworICBnaW1wbGUgY2FsbF9zdG10OworICAvKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGFuIGluZGlyZWN0IGNhbGwuICBOb3QgY2xlYXJlZCB3aGVuIGFuIGVkZ2UKKyAgICAgYmVjb21lcyBkaXJlY3QuICAqLworICBzdHJ1Y3QgY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbyAqaW5kaXJlY3RfaW5mbzsKKyAgUFRSIEdUWSAoKHNraXAgKCIiKSkpIGF1eDsKKyAgLyogV2hlbiBlcXVhbCB0byBDSUZfT0ssIGlubGluZSB0aGlzIGNhbGwuICBPdGhlcndpc2UsIHBvaW50cyB0byB0aGUKKyAgICAgZXhwbGFuYXRpb24gd2h5IGZ1bmN0aW9uIHdhcyBub3QgaW5saW5lZC4gICovCisgIGNncmFwaF9pbmxpbmVfZmFpbGVkX3QgaW5saW5lX2ZhaWxlZDsKKyAgLyogVGhlIHN0bXRfdWlkIG9mIGNhbGxfc3RtdC4gIFRoaXMgaXMgdXNlZCBieSBMVE8gdG8gcmVjb3ZlciB0aGUgY2FsbF9zdG10CisgICAgIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHNlcmlhbGl6ZWQgaW4uICAqLworICB1bnNpZ25lZCBpbnQgbHRvX3N0bXRfdWlkOworICAvKiBFeHBlY3RlZCBmcmVxdWVuY3kgb2YgZXhlY3V0aW9ucyB3aXRoaW4gdGhlIGZ1bmN0aW9uLgorICAgICBXaGVuIHNldCB0byBDR1JBUEhfRlJFUV9CQVNFLCB0aGUgZWRnZSBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgb25jZQorICAgICBwZXIgZnVuY3Rpb24gY2FsbC4gIFRoZSByYW5nZSBpcyAwIHRvIENHUkFQSF9GUkVRX01BWC4gICovCisgIGludCBmcmVxdWVuY3k7CisgIC8qIFVuaXF1ZSBpZCBvZiB0aGUgZWRnZS4gICovCisgIGludCB1aWQ7CisgIC8qIFdoZXRoZXIgdGhpcyBlZGdlIHdhcyBtYWRlIGRpcmVjdCBieSBpbmRpcmVjdCBpbmxpbmluZy4gICovCisgIHVuc2lnbmVkIGludCBpbmRpcmVjdF9pbmxpbmluZ19lZGdlIDogMTsKKyAgLyogV2hldGhlciB0aGlzIGVkZ2UgZGVzY3JpYmVzIGFuIGluZGlyZWN0IGNhbGwgd2l0aCBhbiB1bmRldGVybWluZWQKKyAgICAgY2FsbGVlLiAgKi8KKyAgdW5zaWduZWQgaW50IGluZGlyZWN0X3Vua25vd25fY2FsbGVlIDogMTsKKyAgLyogV2hldGhlciB0aGlzIGVkZ2UgaXMgc3RpbGwgYSBkYW5nbGluZyAgKi8KKyAgLyogVHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBDQUxMIHN0bXQgY2Fubm90IGJlIGlubGluZWQuICAqLworICB1bnNpZ25lZCBpbnQgY2FsbF9zdG10X2Nhbm5vdF9pbmxpbmVfcCA6IDE7CisgIC8qIENhbiB0aGlzIGNhbGwgdGhyb3cgZXh0ZXJuYWxseT8gICovCisgIHVuc2lnbmVkIGludCBjYW5fdGhyb3dfZXh0ZXJuYWwgOiAxOworfTsKKworI2RlZmluZSBDR1JBUEhfRlJFUV9CQVNFIDEwMDAKKyNkZWZpbmUgQ0dSQVBIX0ZSRVFfTUFYIDEwMDAwMAorCit0eXBlZGVmIHN0cnVjdCBjZ3JhcGhfZWRnZSAqY2dyYXBoX2VkZ2VfcDsKKworCisvKiBUaGUgdmFycG9vbCBkYXRhIHN0cnVjdHVyZS4KKyAgIEVhY2ggc3RhdGljIHZhcmlhYmxlIGRlY2wgaGFzIGFzc2lnbmVkIHZhcnBvb2xfbm9kZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIHZhcnBvb2xfbm9kZSB7CisgIHN0cnVjdCBzeW10YWJfbm9kZV9iYXNlIHN5bWJvbDsKKyAgLyogRm9yIGFsaWFzZXMgcG9pbnRzIHRvIGRlY2xhcmF0aW9uIERFQ0wgaXMgYWxpYXMgb2YuICAqLworICB0cmVlIGFsaWFzX29mOworCisgIC8qIFNldCBvbmNlIHRoZSB2YXJpYWJsZSBoYXMgYmVlbiBpbnN0YW50aWF0ZWQgYW5kIGl0cyBjYWxsZWUKKyAgICAgbGlzdHMgY3JlYXRlZC4gICovCisgIHVuc2lnbmVkIGFuYWx5emVkIDogMTsKKyAgLyogU2V0IG9uY2UgaXQgaGFzIGJlZW4gZmluYWxpemVkIHNvIHdlIGNvbnNpZGVyIGl0IHRvIGJlIG91dHB1dC4gICovCisgIHVuc2lnbmVkIGZpbmFsaXplZCA6IDE7CisgIC8qIFNldCB3aGVuIHZhcmlhYmxlIGlzIHNjaGVkdWxlZCB0byBiZSBhc3NlbWJsZWQuICAqLworICB1bnNpZ25lZCBvdXRwdXQgOiAxOworICAvKiBTZXQgZm9yIGFsaWFzZXMgb25jZSB0aGV5IGdvdCB0aHJvdWdoIGFzc2VtYmxlX2FsaWFzLiAgQWxzbyBzZXQgZm9yCisgICAgIGV4dHJhIG5hbWUgYWxpYXNlcyBpbiB2YXJwb29sX2V4dHJhX25hbWVfYWxpYXMuICAqLworICB1bnNpZ25lZCBhbGlhcyA6IDE7CisgIHVuc2lnbmVkIGV4dHJhX25hbWVfYWxpYXMgOiAxOworfTsKKworLyogRXZlcnkgdG9wIGxldmVsIGFzbSBzdGF0ZW1lbnQgaXMgcHV0IGludG8gYSBhc21fbm9kZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIGFzbV9ub2RlIHsKKyAgLyogTmV4dCBhc20gbm9kZS4gICovCisgIHN0cnVjdCBhc21fbm9kZSAqbmV4dDsKKyAgLyogU3RyaW5nIGZvciB0aGlzIGFzbSBub2RlLiAgKi8KKyAgdHJlZSBhc21fc3RyOworICAvKiBPcmRlcmluZyBvZiBhbGwgY2dyYXBoIG5vZGVzLiAgKi8KKyAgaW50IG9yZGVyOworfTsKKworLyogU3ltYm9sIHRhYmxlIGVudHJ5LiAgKi8KK3VuaW9uIEdUWSgoZGVzYyAoIiVoLnN5bWJvbC50eXBlIiksIGNoYWluX25leHQgKCIlaC5zeW1ib2wubmV4dCIpLAorCSAgIGNoYWluX3ByZXYgKCIlaC5zeW1ib2wucHJldmlvdXMiKSkpIHN5bXRhYl9ub2RlX2RlZiB7CisgIHN0cnVjdCBzeW10YWJfbm9kZV9iYXNlIEdUWSAoKHRhZyAoIlNZTVRBQl9TWU1CT0wiKSkpIHN5bWJvbDsKKyAgLyogVG8gYWNjZXNzIHRoZSBmb2xsb3dpbmcgZmllbGRzLAorICAgICB1c2UgdGhlIHVzZSBkeW5fY2FzdCBvciBhc19hIHRvIG9idGFpbiB0aGUgY29uY3JldGUgdHlwZS4gICovCisgIHN0cnVjdCBjZ3JhcGhfbm9kZSBHVFkgKCh0YWcgKCJTWU1UQUJfRlVOQ1RJT04iKSkpIHhfZnVuY3Rpb247CisgIHN0cnVjdCB2YXJwb29sX25vZGUgR1RZICgodGFnICgiU1lNVEFCX1ZBUklBQkxFIikpKSB4X3ZhcmlhYmxlOworfTsKKworLyogUmVwb3J0IHdoZXRoZXIgb3Igbm90IFRISVMgc3ltdGFiIG5vZGUgaXMgYSBmdW5jdGlvbiwgYWthIGNncmFwaF9ub2RlLiAgKi8KKwordGVtcGxhdGUgPD4KK3RlbXBsYXRlIDw+CitpbmxpbmUgYm9vbAoraXNfYV9oZWxwZXIgPGNncmFwaF9ub2RlPjo6dGVzdCAoc3ltdGFiX25vZGVfZGVmICpwKQoreworICByZXR1cm4gcC0+c3ltYm9sLnR5cGUgPT0gU1lNVEFCX0ZVTkNUSU9OOworfQorCisvKiBSZXBvcnQgd2hldGhlciBvciBub3QgVEhJUyBzeW10YWIgbm9kZSBpcyBhIHZyaWFibGUsIGFrYSB2YXJwb29sX25vZGUuICAqLworCit0ZW1wbGF0ZSA8PgordGVtcGxhdGUgPD4KK2lubGluZSBib29sCitpc19hX2hlbHBlciA8dmFycG9vbF9ub2RlPjo6dGVzdCAoc3ltdGFiX25vZGVfZGVmICpwKQoreworICByZXR1cm4gcC0+c3ltYm9sLnR5cGUgPT0gU1lNVEFCX1ZBUklBQkxFOworfQorCitleHRlcm4gR1RZKCgpKSBzeW10YWJfbm9kZSBzeW10YWJfbm9kZXM7CitleHRlcm4gR1RZKCgpKSBpbnQgY2dyYXBoX25fbm9kZXM7CitleHRlcm4gR1RZKCgpKSBpbnQgY2dyYXBoX21heF91aWQ7CitleHRlcm4gR1RZKCgpKSBpbnQgY2dyYXBoX2VkZ2VfbWF4X3VpZDsKK2V4dGVybiBib29sIGNncmFwaF9nbG9iYWxfaW5mb19yZWFkeTsKK2VudW0gY2dyYXBoX3N0YXRlCit7CisgIC8qIEZyb250ZW5kIGlzIHBhcnNpbmcgYW5kIGZpbmFsaXppbmcgZnVuY3Rpb25zLiAgKi8KKyAgQ0dSQVBIX1NUQVRFX1BBUlNJTkcsCisgIC8qIENhbGxncmFwaCBpcyBiZWluZyBjb25zdHJ1Y3RlZC4gIEl0IGlzIHNhZmUgdG8gYWRkIG5ldyBmdW5jdGlvbnMuICAqLworICBDR1JBUEhfU1RBVEVfQ09OU1RSVUNUSU9OLAorICAvKiBDYWxsZ3JhcGggaXMgYnVpbHQgYW5kIElQQSBwYXNzZXMgYXJlIGJlaW5nIHJ1bi4gICovCisgIENHUkFQSF9TVEFURV9JUEEsCisgIC8qIENhbGxncmFwaCBpcyBidWlsdCBhbmQgYWxsIGZ1bmN0aW9ucyBhcmUgdHJhbnNmb3JtZWQgdG8gU1NBIGZvcm0uICAqLworICBDR1JBUEhfU1RBVEVfSVBBX1NTQSwKKyAgLyogRnVuY3Rpb25zIGFyZSBub3cgb3JkZXJlZCBhbmQgYmVpbmcgcGFzc2VkIHRvIFJUTCBleHBhbmRlcnMuICAqLworICBDR1JBUEhfU1RBVEVfRVhQQU5TSU9OLAorICAvKiBBbGwgY2dyYXBoIGV4cGFuc2lvbiBpcyBkb25lLiAgKi8KKyAgQ0dSQVBIX1NUQVRFX0ZJTklTSEVECit9OworZXh0ZXJuIGVudW0gY2dyYXBoX3N0YXRlIGNncmFwaF9zdGF0ZTsKK2V4dGVybiBib29sIGNncmFwaF9mdW5jdGlvbl9mbGFnc19yZWFkeTsKK2V4dGVybiBjZ3JhcGhfbm9kZV9zZXQgY2dyYXBoX25ld19ub2RlczsKKworZXh0ZXJuIEdUWSgoKSkgc3RydWN0IGFzbV9ub2RlICphc21fbm9kZXM7CitleHRlcm4gR1RZKCgpKSBpbnQgc3ltdGFiX29yZGVyOworZXh0ZXJuIGJvb2wgc2FtZV9ib2R5X2FsaWFzZXNfZG9uZTsKKworLyogSW4gc3ltdGFiLmMgICovCit2b2lkIHN5bXRhYl9yZWdpc3Rlcl9ub2RlIChzeW10YWJfbm9kZSk7Cit2b2lkIHN5bXRhYl91bnJlZ2lzdGVyX25vZGUgKHN5bXRhYl9ub2RlKTsKK3ZvaWQgc3ltdGFiX3JlbW92ZV9ub2RlIChzeW10YWJfbm9kZSk7CitzeW10YWJfbm9kZSBzeW10YWJfZ2V0X25vZGUgKGNvbnN0X3RyZWUpOworc3ltdGFiX25vZGUgc3ltdGFiX25vZGVfZm9yX2FzbSAoY29uc3RfdHJlZSBhc21uYW1lKTsKK2NvbnN0IGNoYXIgKiBzeW10YWJfbm9kZV9hc21fbmFtZSAoc3ltdGFiX25vZGUpOworY29uc3QgY2hhciAqIHN5bXRhYl9ub2RlX25hbWUgKHN5bXRhYl9ub2RlKTsKK3ZvaWQgc3ltdGFiX2luc2VydF9ub2RlX3RvX2hhc2h0YWJsZSAoc3ltdGFiX25vZGUpOwordm9pZCBzeW10YWJfYWRkX3RvX3NhbWVfY29tZGF0X2dyb3VwIChzeW10YWJfbm9kZSwgc3ltdGFiX25vZGUpOwordm9pZCBzeW10YWJfZGlzc29sdmVfc2FtZV9jb21kYXRfZ3JvdXBfbGlzdCAoc3ltdGFiX25vZGUgbm9kZSk7Cit2b2lkIGR1bXBfc3ltdGFiIChGSUxFICopOwordm9pZCBkZWJ1Z19zeW10YWIgKHZvaWQpOwordm9pZCBkdW1wX3N5bXRhYl9ub2RlIChGSUxFICosIHN5bXRhYl9ub2RlKTsKK3ZvaWQgZGVidWdfc3ltdGFiX25vZGUgKHN5bXRhYl9ub2RlKTsKK3ZvaWQgZHVtcF9zeW10YWJfYmFzZSAoRklMRSAqLCBzeW10YWJfbm9kZSk7Cit2b2lkIHZlcmlmeV9zeW10YWIgKHZvaWQpOwordm9pZCB2ZXJpZnlfc3ltdGFiX25vZGUgKHN5bXRhYl9ub2RlKTsKK2Jvb2wgdmVyaWZ5X3N5bXRhYl9iYXNlIChzeW10YWJfbm9kZSk7Citib29sIHN5bXRhYl91c2VkX2Zyb21fb2JqZWN0X2ZpbGVfcCAoc3ltdGFiX25vZGUpOwordm9pZCBzeW10YWJfbWFrZV9kZWNsX2xvY2FsICh0cmVlKTsKKworLyogSW4gY2dyYXBoLmMgICovCit2b2lkIGR1bXBfY2dyYXBoIChGSUxFICopOwordm9pZCBkZWJ1Z19jZ3JhcGggKHZvaWQpOwordm9pZCBkdW1wX2NncmFwaF9ub2RlIChGSUxFICosIHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgZGVidWdfY2dyYXBoX25vZGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgY2dyYXBoX3JlbW92ZV9lZGdlIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKik7Cit2b2lkIGNncmFwaF9yZW1vdmVfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICopOwordm9pZCBjZ3JhcGhfcmVsZWFzZV9mdW5jdGlvbl9ib2R5IChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIGNncmFwaF9ub2RlX3JlbW92ZV9jYWxsZWVzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOworc3RydWN0IGNncmFwaF9lZGdlICpjZ3JhcGhfY3JlYXRlX2VkZ2UgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLAorCQkJCQlzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJCQkJZ2ltcGxlLCBnY292X3R5cGUsIGludCk7CitzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmNncmFwaF9jcmVhdGVfaW5kaXJlY3RfZWRnZSAoc3RydWN0IGNncmFwaF9ub2RlICosIGdpbXBsZSwKKwkJCQkJCSBpbnQsIGdjb3ZfdHlwZSwgaW50KTsKK3N0cnVjdCBjZ3JhcGhfaW5kaXJlY3RfY2FsbF9pbmZvICpjZ3JhcGhfYWxsb2NhdGVfaW5pdF9pbmRpcmVjdF9pbmZvICh2b2lkKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqIGNncmFwaF9jcmVhdGVfbm9kZSAodHJlZSk7CitzdHJ1Y3QgY2dyYXBoX25vZGUgKiBjZ3JhcGhfY3JlYXRlX2VtcHR5X25vZGUgKHZvaWQpOworc3RydWN0IGNncmFwaF9ub2RlICogY2dyYXBoX2dldF9jcmVhdGVfbm9kZSAodHJlZSk7CitzdHJ1Y3QgY2dyYXBoX25vZGUgKiBjZ3JhcGhfZ2V0X2NyZWF0ZV9yZWFsX3N5bWJvbF9ub2RlICh0cmVlKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqIGNncmFwaF9zYW1lX2JvZHlfYWxpYXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCB0cmVlLCB0cmVlKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqIGNncmFwaF9hZGRfdGh1bmsgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCB0cmVlLCB0cmVlLCBib29sLCBIT1NUX1dJREVfSU5ULAorCQkJCSAgICAgICBIT1NUX1dJREVfSU5ULCB0cmVlLCB0cmVlKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqY2dyYXBoX25vZGVfZm9yX2FzbSAodHJlZSk7CitzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmNncmFwaF9lZGdlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgZ2ltcGxlKTsKK3ZvaWQgY2dyYXBoX3NldF9jYWxsX3N0bXQgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqLCBnaW1wbGUpOwordm9pZCBjZ3JhcGhfdXBkYXRlX2VkZ2VzX2Zvcl9jYWxsX3N0bXQgKGdpbXBsZSwgdHJlZSwgZ2ltcGxlKTsKK3N0cnVjdCBjZ3JhcGhfbG9jYWxfaW5mbyAqY2dyYXBoX2xvY2FsX2luZm8gKHRyZWUpOworc3RydWN0IGNncmFwaF9nbG9iYWxfaW5mbyAqY2dyYXBoX2dsb2JhbF9pbmZvICh0cmVlKTsKK3N0cnVjdCBjZ3JhcGhfcnRsX2luZm8gKmNncmFwaF9ydGxfaW5mbyAodHJlZSk7CitzdHJ1Y3QgY2dyYXBoX25vZGUgKmNncmFwaF9jcmVhdGVfZnVuY3Rpb25fYWxpYXMgKHRyZWUsIHRyZWUpOwordm9pZCBjZ3JhcGhfY2FsbF9ub2RlX2R1cGxpY2F0aW9uX2hvb2tzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJCQkJIHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgY2dyYXBoX2NhbGxfZWRnZV9kdXBsaWNhdGlvbl9ob29rcyAoc3RydWN0IGNncmFwaF9lZGdlICosCisJCQkJICAgICAgICAgc3RydWN0IGNncmFwaF9lZGdlICopOworCit2b2lkIGNncmFwaF9yZWRpcmVjdF9lZGdlX2NhbGxlZSAoc3RydWN0IGNncmFwaF9lZGdlICosIHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgY2dyYXBoX21ha2VfZWRnZV9kaXJlY3QgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqLCBzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Citib29sIGNncmFwaF9vbmx5X2NhbGxlZF9kaXJlY3RseV9wIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7CisKK2Jvb2wgY2dyYXBoX2Z1bmN0aW9uX3Bvc3NpYmx5X2lubGluZWRfcCAodHJlZSk7Cit2b2lkIGNncmFwaF91bm5lc3Rfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICopOworCitlbnVtIGF2YWlsYWJpbGl0eSBjZ3JhcGhfZnVuY3Rpb25fYm9keV9hdmFpbGFiaWxpdHkgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgY2dyYXBoX2FkZF9uZXdfZnVuY3Rpb24gKHRyZWUsIGJvb2wpOworY29uc3QgY2hhciogY2dyYXBoX2lubGluZV9mYWlsZWRfc3RyaW5nIChjZ3JhcGhfaW5saW5lX2ZhaWxlZF90KTsKKwordm9pZCBjZ3JhcGhfc2V0X25vdGhyb3dfZmxhZyAoc3RydWN0IGNncmFwaF9ub2RlICosIGJvb2wpOwordm9pZCBjZ3JhcGhfc2V0X2NvbnN0X2ZsYWcgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBib29sLCBib29sKTsKK3ZvaWQgY2dyYXBoX3NldF9wdXJlX2ZsYWcgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBib29sLCBib29sKTsKK2Jvb2wgY2dyYXBoX25vZGVfY2Fubm90X3JldHVybiAoc3RydWN0IGNncmFwaF9ub2RlICopOworYm9vbCBjZ3JhcGhfZWRnZV9jYW5ub3RfbGVhZF90b19yZXR1cm4gKHN0cnVjdCBjZ3JhcGhfZWRnZSAqKTsKK2Jvb2wgY2dyYXBoX3dpbGxfYmVfcmVtb3ZlZF9mcm9tX3Byb2dyYW1faWZfbm9fZGlyZWN0X2NhbGxzCisgIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOworYm9vbCBjZ3JhcGhfY2FuX3JlbW92ZV9pZl9ub19kaXJlY3RfY2FsbHNfYW5kX3JlZnNfcAorICAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKTsKK2Jvb2wgY2dyYXBoX2Nhbl9yZW1vdmVfaWZfbm9fZGlyZWN0X2NhbGxzX3AgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSk7Citib29sIHJlc29sdXRpb25fdXNlZF9mcm9tX290aGVyX2ZpbGVfcCAoZW51bSBsZF9wbHVnaW5fc3ltYm9sX3Jlc29sdXRpb24pOworYm9vbCBjZ3JhcGhfZm9yX25vZGVfdGh1bmtzX2FuZF9hbGlhc2VzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJCSAgICAgICAgICAgICAgICAgYm9vbCAoKikgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCB2b2lkICopLAorCQkJICAgICAgICAgICAgICAgICB2b2lkICosCisJCQkJCSBib29sKTsKK2Jvb2wgY2dyYXBoX2Zvcl9ub2RlX2FuZF9hbGlhc2VzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJICAgICAgICAgICAgICAgICAgYm9vbCAoKikgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCB2b2lkICopLAorCQkJICAgICAgICAgIHZvaWQgKiwgYm9vbCk7Cit2ZWM8Y2dyYXBoX2VkZ2VfcD4gIGNvbGxlY3RfY2FsbGVyc19vZl9ub2RlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOwordm9pZCB2ZXJpZnlfY2dyYXBoICh2b2lkKTsKK3ZvaWQgdmVyaWZ5X2NncmFwaF9ub2RlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIGNncmFwaF9tYXJrX2FkZHJlc3NfdGFrZW5fbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICopOworCit0eXBlZGVmIHZvaWQgKCpjZ3JhcGhfZWRnZV9ob29rKShzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiwgdm9pZCAqKTsKK3R5cGVkZWYgdm9pZCAoKmNncmFwaF9ub2RlX2hvb2spKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCB2b2lkICopOwordHlwZWRlZiB2b2lkICgqY2dyYXBoXzJlZGdlX2hvb2spKHN0cnVjdCBjZ3JhcGhfZWRnZSAqLCBzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiwKKwkJCQkgIHZvaWQgKik7Cit0eXBlZGVmIHZvaWQgKCpjZ3JhcGhfMm5vZGVfaG9vaykoc3RydWN0IGNncmFwaF9ub2RlICosIHN0cnVjdCBjZ3JhcGhfbm9kZSAqLAorCQkJCSAgdm9pZCAqKTsKK3N0cnVjdCBjZ3JhcGhfZWRnZV9ob29rX2xpc3Q7CitzdHJ1Y3QgY2dyYXBoX25vZGVfaG9va19saXN0Oworc3RydWN0IGNncmFwaF8yZWRnZV9ob29rX2xpc3Q7CitzdHJ1Y3QgY2dyYXBoXzJub2RlX2hvb2tfbGlzdDsKK3N0cnVjdCBjZ3JhcGhfZWRnZV9ob29rX2xpc3QgKmNncmFwaF9hZGRfZWRnZV9yZW1vdmFsX2hvb2sgKGNncmFwaF9lZGdlX2hvb2ssIHZvaWQgKik7Cit2b2lkIGNncmFwaF9yZW1vdmVfZWRnZV9yZW1vdmFsX2hvb2sgKHN0cnVjdCBjZ3JhcGhfZWRnZV9ob29rX2xpc3QgKik7CitzdHJ1Y3QgY2dyYXBoX25vZGVfaG9va19saXN0ICpjZ3JhcGhfYWRkX25vZGVfcmVtb3ZhbF9ob29rIChjZ3JhcGhfbm9kZV9ob29rLAorCQkJCQkJCSAgICB2b2lkICopOwordm9pZCBjZ3JhcGhfcmVtb3ZlX25vZGVfcmVtb3ZhbF9ob29rIChzdHJ1Y3QgY2dyYXBoX25vZGVfaG9va19saXN0ICopOworc3RydWN0IGNncmFwaF9ub2RlX2hvb2tfbGlzdCAqY2dyYXBoX2FkZF9mdW5jdGlvbl9pbnNlcnRpb25faG9vayAoY2dyYXBoX25vZGVfaG9vaywKKwkJCQkJCQkgICAgICAgICAgdm9pZCAqKTsKK3ZvaWQgY2dyYXBoX3JlbW92ZV9mdW5jdGlvbl9pbnNlcnRpb25faG9vayAoc3RydWN0IGNncmFwaF9ub2RlX2hvb2tfbGlzdCAqKTsKK3ZvaWQgY2dyYXBoX2NhbGxfZnVuY3Rpb25faW5zZXJ0aW9uX2hvb2tzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOworc3RydWN0IGNncmFwaF8yZWRnZV9ob29rX2xpc3QgKmNncmFwaF9hZGRfZWRnZV9kdXBsaWNhdGlvbl9ob29rIChjZ3JhcGhfMmVkZ2VfaG9vaywgdm9pZCAqKTsKK3ZvaWQgY2dyYXBoX3JlbW92ZV9lZGdlX2R1cGxpY2F0aW9uX2hvb2sgKHN0cnVjdCBjZ3JhcGhfMmVkZ2VfaG9va19saXN0ICopOworc3RydWN0IGNncmFwaF8ybm9kZV9ob29rX2xpc3QgKmNncmFwaF9hZGRfbm9kZV9kdXBsaWNhdGlvbl9ob29rIChjZ3JhcGhfMm5vZGVfaG9vaywgdm9pZCAqKTsKK3ZvaWQgY2dyYXBoX3JlbW92ZV9ub2RlX2R1cGxpY2F0aW9uX2hvb2sgKHN0cnVjdCBjZ3JhcGhfMm5vZGVfaG9va19saXN0ICopOworZ2ltcGxlIGNncmFwaF9yZWRpcmVjdF9lZGdlX2NhbGxfc3RtdF90b19jYWxsZWUgKHN0cnVjdCBjZ3JhcGhfZWRnZSAqKTsKK2Jvb2wgY2dyYXBoX3Byb3BhZ2F0ZV9mcmVxdWVuY3kgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSk7CisKKy8qIEluIGNncmFwaHVuaXQuYyAgKi8KK3N0cnVjdCBhc21fbm9kZSAqYWRkX2FzbV9ub2RlICh0cmVlKTsKK2V4dGVybiBGSUxFICpjZ3JhcGhfZHVtcF9maWxlOwordm9pZCBjZ3JhcGhfZmluYWxpemVfZnVuY3Rpb24gKHRyZWUsIGJvb2wpOwordm9pZCBmaW5hbGl6ZV9jb21waWxhdGlvbl91bml0ICh2b2lkKTsKK3ZvaWQgY29tcGlsZSAodm9pZCk7Cit2b2lkIGluaXRfY2dyYXBoICh2b2lkKTsKK2Jvb2wgY2dyYXBoX3Byb2Nlc3NfbmV3X2Z1bmN0aW9ucyAodm9pZCk7Cit2b2lkIGNncmFwaF9wcm9jZXNzX3NhbWVfYm9keV9hbGlhc2VzICh2b2lkKTsKK3ZvaWQgZml4dXBfc2FtZV9jcHBfYWxpYXNfdmlzaWJpbGl0eSAoc3ltdGFiX25vZGUgbm9kZSwgc3ltdGFiX25vZGUgdGFyZ2V0LCB0cmVlIGFsaWFzKTsKKy8qICBJbml0aWFsaXplIGRhdGFzdHJ1Y3R1cmVzIHNvIERFQ0wgaXMgYSBmdW5jdGlvbiBpbiBsb3dlcmVkIGdpbXBsZSBmb3JtLgorICAgIElOX1NTQSBpcyB0cnVlIGlmIHRoZSBnaW1wbGUgaXMgaW4gU1NBLiAgKi8KK2Jhc2ljX2Jsb2NrIGluaXRfbG93ZXJlZF9lbXB0eV9mdW5jdGlvbiAodHJlZSBkZWNsLCBib29sIGluX3NzYSk7CisKKy8qIEluIGNncmFwaGNsb25lcy5jICAqLworCitzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiBjZ3JhcGhfY2xvbmVfZWRnZSAoc3RydWN0IGNncmFwaF9lZGdlICosCisJCQkJCXN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBnaW1wbGUsCisJCQkJCXVuc2lnbmVkLCBnY292X3R5cGUsIGludCwgYm9vbCk7CitzdHJ1Y3QgY2dyYXBoX25vZGUgKiBjZ3JhcGhfY2xvbmVfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICosIHRyZWUsIGdjb3ZfdHlwZSwKKwkJCQkJaW50LCBib29sLCB2ZWM8Y2dyYXBoX2VkZ2VfcD4sCisJCQkJCWJvb2wpOwordHJlZSBjbG9uZV9mdW5jdGlvbl9uYW1lICh0cmVlIGRlY2wsIGNvbnN0IGNoYXIgKik7CitzdHJ1Y3QgY2dyYXBoX25vZGUgKiBjZ3JhcGhfY3JlYXRlX3ZpcnR1YWxfY2xvbmUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqb2xkX25vZGUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzxjZ3JhcGhfZWRnZV9wPiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjPGlwYV9yZXBsYWNlX21hcF9wLCB2YV9nYz4gKnRyZWVfbWFwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgYXJnc190b19za2lwLAorCQkJCQkJICBjb25zdCBjaGFyICpjbG9uZV9uYW1lKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqY2dyYXBoX2ZpbmRfcmVwbGFjZW1lbnRfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICopOworYm9vbCBjZ3JhcGhfcmVtb3ZlX25vZGVfYW5kX2lubGluZV9jbG9uZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIGNncmFwaF9zZXRfY2FsbF9zdG10X2luY2x1ZGluZ19jbG9uZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBnaW1wbGUsIGdpbXBsZSk7Cit2b2lkIGNncmFwaF9jcmVhdGVfZWRnZV9pbmNsdWRpbmdfY2xvbmVzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJCQkJICBzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJCQkJICBnaW1wbGUsIGdpbXBsZSwgZ2Nvdl90eXBlLCBpbnQsCisJCQkJCSAgY2dyYXBoX2lubGluZV9mYWlsZWRfdCk7Cit2b2lkIGNncmFwaF9tYXRlcmlhbGl6ZV9hbGxfY2xvbmVzICh2b2lkKTsKK3N0cnVjdCBjZ3JhcGhfbm9kZSAqIGNncmFwaF9jb3B5X25vZGVfZm9yX3ZlcnNpb25pbmcgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLAorCQl0cmVlLCB2ZWM8Y2dyYXBoX2VkZ2VfcD4sIGJpdG1hcCk7CitzdHJ1Y3QgY2dyYXBoX25vZGUgKmNncmFwaF9mdW5jdGlvbl92ZXJzaW9uaW5nIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwKKwkJCQkJCXZlYzxjZ3JhcGhfZWRnZV9wPiwKKwkJCQkJCXZlYzxpcGFfcmVwbGFjZV9tYXBfcCwgdmFfZ2M+ICosCisJCQkJCQliaXRtYXAsIGJvb2wsIGJpdG1hcCwKKwkJCQkJCWJhc2ljX2Jsb2NrLCBjb25zdCBjaGFyICopOwordm9pZCB0cmVlX2Z1bmN0aW9uX3ZlcnNpb25pbmcgKHRyZWUsIHRyZWUsIHZlYzxpcGFfcmVwbGFjZV9tYXBfcCwgdmFfZ2M+ICosCisJCQkgICAgICAgYm9vbCwgYml0bWFwLCBib29sLCBiaXRtYXAsIGJhc2ljX2Jsb2NrKTsKKworLyogSW4gY2dyYXBoYnVpbGQuYyAgKi8KK3Vuc2lnbmVkIGludCByZWJ1aWxkX2NncmFwaF9lZGdlcyAodm9pZCk7Cit2b2lkIGNncmFwaF9yZWJ1aWxkX3JlZmVyZW5jZXMgKHZvaWQpOworaW50IGNvbXB1dGVfY2FsbF9zdG10X2JiX2ZyZXF1ZW5jeSAodHJlZSwgYmFzaWNfYmxvY2sgYmIpOwordm9pZCByZWNvcmRfcmVmZXJlbmNlc19pbl9pbml0aWFsaXplciAodHJlZSwgYm9vbCk7CisKKy8qIEluIGlwYS5jICAqLworYm9vbCBzeW10YWJfcmVtb3ZlX3VucmVhY2hhYmxlX25vZGVzIChib29sLCBGSUxFICopOworY2dyYXBoX25vZGVfc2V0IGNncmFwaF9ub2RlX3NldF9uZXcgKHZvaWQpOworY2dyYXBoX25vZGVfc2V0X2l0ZXJhdG9yIGNncmFwaF9ub2RlX3NldF9maW5kIChjZ3JhcGhfbm9kZV9zZXQsCisJCQkJCSAgICAgICBzdHJ1Y3QgY2dyYXBoX25vZGUgKik7Cit2b2lkIGNncmFwaF9ub2RlX3NldF9hZGQgKGNncmFwaF9ub2RlX3NldCwgc3RydWN0IGNncmFwaF9ub2RlICopOwordm9pZCBjZ3JhcGhfbm9kZV9zZXRfcmVtb3ZlIChjZ3JhcGhfbm9kZV9zZXQsIHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK3ZvaWQgZHVtcF9jZ3JhcGhfbm9kZV9zZXQgKEZJTEUgKiwgY2dyYXBoX25vZGVfc2V0KTsKK3ZvaWQgZGVidWdfY2dyYXBoX25vZGVfc2V0IChjZ3JhcGhfbm9kZV9zZXQpOwordm9pZCBmcmVlX2NncmFwaF9ub2RlX3NldCAoY2dyYXBoX25vZGVfc2V0KTsKK3ZvaWQgY2dyYXBoX2J1aWxkX3N0YXRpY19jZHRvciAoY2hhciB3aGljaCwgdHJlZSBib2R5LCBpbnQgcHJpb3JpdHkpOworCit2YXJwb29sX25vZGVfc2V0IHZhcnBvb2xfbm9kZV9zZXRfbmV3ICh2b2lkKTsKK3ZhcnBvb2xfbm9kZV9zZXRfaXRlcmF0b3IgdmFycG9vbF9ub2RlX3NldF9maW5kICh2YXJwb29sX25vZGVfc2V0LAorCQkJCQkgICAgICAgc3RydWN0IHZhcnBvb2xfbm9kZSAqKTsKK3ZvaWQgdmFycG9vbF9ub2RlX3NldF9hZGQgKHZhcnBvb2xfbm9kZV9zZXQsIHN0cnVjdCB2YXJwb29sX25vZGUgKik7Cit2b2lkIHZhcnBvb2xfbm9kZV9zZXRfcmVtb3ZlICh2YXJwb29sX25vZGVfc2V0LCBzdHJ1Y3QgdmFycG9vbF9ub2RlICopOwordm9pZCBkdW1wX3ZhcnBvb2xfbm9kZV9zZXQgKEZJTEUgKiwgdmFycG9vbF9ub2RlX3NldCk7Cit2b2lkIGRlYnVnX3ZhcnBvb2xfbm9kZV9zZXQgKHZhcnBvb2xfbm9kZV9zZXQpOwordm9pZCBmcmVlX3ZhcnBvb2xfbm9kZV9zZXQgKHZhcnBvb2xfbm9kZV9zZXQpOwordm9pZCBpcGFfZGlzY292ZXJfcmVhZG9ubHlfbm9uYWRkcmVzc2FibGVfdmFycyAodm9pZCk7Citib29sIGNncmFwaF9jb21kYXRfY2FuX2JlX3Vuc2hhcmVkX3AgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK2Jvb2wgdmFycG9vbF9leHRlcm5hbGx5X3Zpc2libGVfcCAoc3RydWN0IHZhcnBvb2xfbm9kZSAqLCBib29sKTsKKworLyogSW4gcHJlZGljdC5jICAqLworYm9vbCBjZ3JhcGhfbWF5YmVfaG90X2VkZ2VfcCAoc3RydWN0IGNncmFwaF9lZGdlICplKTsKK2Jvb2wgY2dyYXBoX29wdGltaXplX2Zvcl9zaXplX3AgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKKworLyogSW4gdmFycG9vbC5jICAqLworc3RydWN0IHZhcnBvb2xfbm9kZSAqdmFycG9vbF9ub2RlX2Zvcl9kZWNsICh0cmVlKTsKK3N0cnVjdCB2YXJwb29sX25vZGUgKnZhcnBvb2xfbm9kZV9mb3JfYXNtICh0cmVlIGFzbW5hbWUpOwordm9pZCB2YXJwb29sX21hcmtfbmVlZGVkX25vZGUgKHN0cnVjdCB2YXJwb29sX25vZGUgKik7Cit2b2lkIGRlYnVnX3ZhcnBvb2wgKHZvaWQpOwordm9pZCBkdW1wX3ZhcnBvb2wgKEZJTEUgKik7Cit2b2lkIGR1bXBfdmFycG9vbF9ub2RlIChGSUxFICosIHN0cnVjdCB2YXJwb29sX25vZGUgKik7CisKK3ZvaWQgdmFycG9vbF9maW5hbGl6ZV9kZWNsICh0cmVlKTsKK2Jvb2wgZGVjaWRlX2lzX3ZhcmlhYmxlX25lZWRlZCAoc3RydWN0IHZhcnBvb2xfbm9kZSAqLCB0cmVlKTsKK2VudW0gYXZhaWxhYmlsaXR5IGNncmFwaF92YXJpYWJsZV9pbml0aWFsaXplcl9hdmFpbGFiaWxpdHkgKHN0cnVjdCB2YXJwb29sX25vZGUgKik7Cit2b2lkIGNncmFwaF9tYWtlX25vZGVfbG9jYWwgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKK2Jvb2wgY2dyYXBoX25vZGVfY2FuX2JlX2xvY2FsX3AgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKTsKKworCit2b2lkIHZhcnBvb2xfcmVtb3ZlX25vZGUgKHN0cnVjdCB2YXJwb29sX25vZGUgKm5vZGUpOwordm9pZCB2YXJwb29sX2ZpbmFsaXplX25hbWVkX3NlY3Rpb25fZmxhZ3MgKHN0cnVjdCB2YXJwb29sX25vZGUgKm5vZGUpOworYm9vbCB2YXJwb29sX291dHB1dF92YXJpYWJsZXMgKHZvaWQpOworYm9vbCB2YXJwb29sX2Fzc2VtYmxlX2RlY2wgKHN0cnVjdCB2YXJwb29sX25vZGUgKm5vZGUpOwordm9pZCB2YXJwb29sX2FuYWx5emVfbm9kZSAoc3RydWN0IHZhcnBvb2xfbm9kZSAqKTsKK3N0cnVjdCB2YXJwb29sX25vZGUgKiB2YXJwb29sX2V4dHJhX25hbWVfYWxpYXMgKHRyZWUsIHRyZWUpOworc3RydWN0IHZhcnBvb2xfbm9kZSAqIHZhcnBvb2xfY3JlYXRlX3ZhcmlhYmxlX2FsaWFzICh0cmVlLCB0cmVlKTsKK3ZvaWQgdmFycG9vbF9yZXNldF9xdWV1ZSAodm9pZCk7Citib29sIGNvbnN0X3ZhbHVlX2tub3duX3AgKHRyZWUpOworYm9vbCB2YXJwb29sX2Zvcl9ub2RlX2FuZF9hbGlhc2VzIChzdHJ1Y3QgdmFycG9vbF9ub2RlICosCisJCSAgICAgICAgICAgICAgICAgICBib29sICgqKSAoc3RydWN0IHZhcnBvb2xfbm9kZSAqLCB2b2lkICopLAorCQkJICAgICAgICAgICB2b2lkICosIGJvb2wpOwordm9pZCB2YXJwb29sX2FkZF9uZXdfdmFyaWFibGUgKHRyZWUpOwordm9pZCBzeW10YWJfaW5pdGlhbGl6ZV9hc21fbmFtZV9oYXNoICh2b2lkKTsKK3ZvaWQgc3ltdGFiX3ByZXZhaWxfaW5fYXNtX25hbWVfaGFzaCAoc3ltdGFiX25vZGUgbm9kZSk7CisKKworLyogUmV0dXJuIGNhbGxncmFwaCBub2RlIGZvciBnaXZlbiBzeW1ib2wgYW5kIGNoZWNrIGl0IGlzIGEgZnVuY3Rpb24uICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JhcGhfbm9kZSAqCitjZ3JhcGggKHN5bXRhYl9ub2RlIG5vZGUpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFub2RlIHx8IG5vZGUtPnN5bWJvbC50eXBlID09IFNZTVRBQl9GVU5DVElPTik7CisgIHJldHVybiAoc3RydWN0IGNncmFwaF9ub2RlICopbm9kZTsKK30KKworLyogUmV0dXJuIHZhcnBvb2wgbm9kZSBmb3IgZ2l2ZW4gc3ltYm9sIGFuZCBjaGVjayBpdCBpcyBhIHZhcmlhYmxlLiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZhcnBvb2xfbm9kZSAqCit2YXJwb29sIChzeW10YWJfbm9kZSBub2RlKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghbm9kZSB8fCBub2RlLT5zeW1ib2wudHlwZSA9PSBTWU1UQUJfVkFSSUFCTEUpOworICByZXR1cm4gKHN0cnVjdCB2YXJwb29sX25vZGUgKilub2RlOworfQorCisvKiBSZXR1cm4gY2FsbGdyYXBoIG5vZGUgZm9yIGdpdmVuIHN5bWJvbCBhbmQgY2hlY2sgaXQgaXMgYSBmdW5jdGlvbi4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNncmFwaF9ub2RlICoKK2NncmFwaF9nZXRfbm9kZSAoY29uc3RfdHJlZSBkZWNsKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChUUkVFX0NPREUgKGRlY2wpID09IEZVTkNUSU9OX0RFQ0wpOworICByZXR1cm4gY2dyYXBoIChzeW10YWJfZ2V0X25vZGUgKGRlY2wpKTsKK30KKworLyogUmV0dXJuIHZhcnBvb2wgbm9kZSBmb3IgZ2l2ZW4gc3ltYm9sIGFuZCBjaGVjayBpdCBpcyBhIGZ1bmN0aW9uLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmFycG9vbF9ub2RlICoKK3ZhcnBvb2xfZ2V0X25vZGUgKGNvbnN0X3RyZWUgZGVjbCkKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoVFJFRV9DT0RFIChkZWNsKSA9PSBWQVJfREVDTCk7CisgIHJldHVybiB2YXJwb29sIChzeW10YWJfZ2V0X25vZGUgKGRlY2wpKTsKK30KKworLyogUmV0dXJuIGFzbSBuYW1lIG9mIGNncmFwaCBub2RlLiAgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitjZ3JhcGhfbm9kZV9hc21fbmFtZShzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCit7CisgIHJldHVybiBzeW10YWJfbm9kZV9hc21fbmFtZSAoKHN5bXRhYl9ub2RlKW5vZGUpOworfQorCisvKiBSZXR1cm4gYXNtIG5hbWUgb2YgdmFycG9vbCBub2RlLiAgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCit2YXJwb29sX25vZGVfYXNtX25hbWUoc3RydWN0IHZhcnBvb2xfbm9kZSAqbm9kZSkKK3sKKyAgcmV0dXJuIHN5bXRhYl9ub2RlX2FzbV9uYW1lICgoc3ltdGFiX25vZGUpbm9kZSk7Cit9CisKKy8qIFJldHVybiBuYW1lIG9mIGNncmFwaCBub2RlLiAgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitjZ3JhcGhfbm9kZV9uYW1lKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKK3sKKyAgcmV0dXJuIHN5bXRhYl9ub2RlX25hbWUgKChzeW10YWJfbm9kZSlub2RlKTsKK30KKworLyogUmV0dXJuIG5hbWUgb2YgdmFycG9vbCBub2RlLiAgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCit2YXJwb29sX25vZGVfbmFtZShzdHJ1Y3QgdmFycG9vbF9ub2RlICpub2RlKQoreworICByZXR1cm4gc3ltdGFiX25vZGVfbmFtZSAoKHN5bXRhYl9ub2RlKW5vZGUpOworfQorCisvKiBXYWxrIGFsbCBzeW1ib2xzLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfU1lNQk9MKG5vZGUpIFwKKyAgIGZvciAoKG5vZGUpID0gc3ltdGFiX25vZGVzOyAobm9kZSk7IChub2RlKSA9IChub2RlKS0+c3ltYm9sLm5leHQpCisKKworLyogUmV0dXJuIGZpcnN0IHZhcmlhYmxlLiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZhcnBvb2xfbm9kZSAqCit2YXJwb29sX2ZpcnN0X3ZhcmlhYmxlICh2b2lkKQoreworICBzeW10YWJfbm9kZSBub2RlOworICBmb3IgKG5vZGUgPSBzeW10YWJfbm9kZXM7IG5vZGU7IG5vZGUgPSBub2RlLT5zeW1ib2wubmV4dCkKKyAgICBpZiAodmFycG9vbF9ub2RlICp2bm9kZSA9IGR5bl9jYXN0IDx2YXJwb29sX25vZGU+IChub2RlKSkKKyAgICAgIHJldHVybiB2bm9kZTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybiBuZXh0IHZhcmlhYmxlIGFmdGVyIE5PREUuICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmFycG9vbF9ub2RlICoKK3ZhcnBvb2xfbmV4dF92YXJpYWJsZSAoc3RydWN0IHZhcnBvb2xfbm9kZSAqbm9kZSkKK3sKKyAgc3ltdGFiX25vZGUgbm9kZTEgPSAoc3ltdGFiX25vZGUpIG5vZGUtPnN5bWJvbC5uZXh0OworICBmb3IgKDsgbm9kZTE7IG5vZGUxID0gbm9kZTEtPnN5bWJvbC5uZXh0KQorICAgIGlmICh2YXJwb29sX25vZGUgKnZub2RlMSA9IGR5bl9jYXN0IDx2YXJwb29sX25vZGU+IChub2RlMSkpCisgICAgICByZXR1cm4gdm5vZGUxOworICByZXR1cm4gTlVMTDsKK30KKy8qIFdhbGsgYWxsIHZhcmlhYmxlcy4gICovCisjZGVmaW5lIEZPUl9FQUNIX1ZBUklBQkxFKG5vZGUpIFwKKyAgIGZvciAoKG5vZGUpID0gdmFycG9vbF9maXJzdF92YXJpYWJsZSAoKTsgXAorICAgICAgICAobm9kZSk7IFwKKwkobm9kZSkgPSB2YXJwb29sX25leHRfdmFyaWFibGUgKChub2RlKSkpCisKKy8qIFJldHVybiBmaXJzdCByZWFjaGFibGUgc3RhdGljIHZhcmlhYmxlIHdpdGggaW5pdGlhbGl6ZXIuICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmFycG9vbF9ub2RlICoKK3ZhcnBvb2xfZmlyc3Rfc3RhdGljX2luaXRpYWxpemVyICh2b2lkKQoreworICBzeW10YWJfbm9kZSBub2RlOworICBmb3IgKG5vZGUgPSBzeW10YWJfbm9kZXM7IG5vZGU7IG5vZGUgPSBub2RlLT5zeW1ib2wubmV4dCkKKyAgICB7CisgICAgICB2YXJwb29sX25vZGUgKnZub2RlID0gZHluX2Nhc3QgPHZhcnBvb2xfbm9kZT4gKG5vZGUpOworICAgICAgaWYgKHZub2RlICYmIERFQ0xfSU5JVElBTCAobm9kZS0+c3ltYm9sLmRlY2wpKQorCXJldHVybiB2bm9kZTsKKyAgICB9CisgIHJldHVybiBOVUxMOworfQorCisvKiBSZXR1cm4gbmV4dCByZWFjaGFibGUgc3RhdGljIHZhcmlhYmxlIHdpdGggaW5pdGlhbGl6ZXIgYWZ0ZXIgTk9ERS4gICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YXJwb29sX25vZGUgKgordmFycG9vbF9uZXh0X3N0YXRpY19pbml0aWFsaXplciAoc3RydWN0IHZhcnBvb2xfbm9kZSAqbm9kZSkKK3sKKyAgc3ltdGFiX25vZGUgbm9kZTEgPSAoc3ltdGFiX25vZGUpIG5vZGUtPnN5bWJvbC5uZXh0OworICBmb3IgKDsgbm9kZTE7IG5vZGUxID0gbm9kZTEtPnN5bWJvbC5uZXh0KQorICAgIHsKKyAgICAgIHZhcnBvb2xfbm9kZSAqdm5vZGUxID0gZHluX2Nhc3QgPHZhcnBvb2xfbm9kZT4gKG5vZGUxKTsKKyAgICAgIGlmICh2bm9kZTEgJiYgREVDTF9JTklUSUFMIChub2RlMS0+c3ltYm9sLmRlY2wpKQorCXJldHVybiB2bm9kZTE7CisgICAgfQorICByZXR1cm4gTlVMTDsKK30KKworLyogV2FsayBhbGwgc3RhdGljIHZhcmlhYmxlcyB3aXRoIGluaXRpYWxpemVyIHNldC4gICovCisjZGVmaW5lIEZPUl9FQUNIX1NUQVRJQ19JTklUSUFMSVpFUihub2RlKSBcCisgICBmb3IgKChub2RlKSA9IHZhcnBvb2xfZmlyc3Rfc3RhdGljX2luaXRpYWxpemVyICgpOyAobm9kZSk7IFwKKyAgICAgICAgKG5vZGUpID0gdmFycG9vbF9uZXh0X3N0YXRpY19pbml0aWFsaXplciAobm9kZSkpCisKKy8qIFJldHVybiBmaXJzdCByZWFjaGFibGUgc3RhdGljIHZhcmlhYmxlIHdpdGggaW5pdGlhbGl6ZXIuICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmFycG9vbF9ub2RlICoKK3ZhcnBvb2xfZmlyc3RfZGVmaW5lZF92YXJpYWJsZSAodm9pZCkKK3sKKyAgc3ltdGFiX25vZGUgbm9kZTsKKyAgZm9yIChub2RlID0gc3ltdGFiX25vZGVzOyBub2RlOyBub2RlID0gbm9kZS0+c3ltYm9sLm5leHQpCisgICAgeworICAgICAgdmFycG9vbF9ub2RlICp2bm9kZSA9IGR5bl9jYXN0IDx2YXJwb29sX25vZGU+IChub2RlKTsKKyAgICAgIGlmICh2bm9kZSAmJiB2bm9kZS0+YW5hbHl6ZWQpCisJcmV0dXJuIHZub2RlOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybiBuZXh0IHJlYWNoYWJsZSBzdGF0aWMgdmFyaWFibGUgd2l0aCBpbml0aWFsaXplciBhZnRlciBOT0RFLiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZhcnBvb2xfbm9kZSAqCit2YXJwb29sX25leHRfZGVmaW5lZF92YXJpYWJsZSAoc3RydWN0IHZhcnBvb2xfbm9kZSAqbm9kZSkKK3sKKyAgc3ltdGFiX25vZGUgbm9kZTEgPSAoc3ltdGFiX25vZGUpIG5vZGUtPnN5bWJvbC5uZXh0OworICBmb3IgKDsgbm9kZTE7IG5vZGUxID0gbm9kZTEtPnN5bWJvbC5uZXh0KQorICAgIHsKKyAgICAgIHZhcnBvb2xfbm9kZSAqdm5vZGUxID0gZHluX2Nhc3QgPHZhcnBvb2xfbm9kZT4gKG5vZGUxKTsKKyAgICAgIGlmICh2bm9kZTEgJiYgdm5vZGUxLT5hbmFseXplZCkKKwlyZXR1cm4gdm5vZGUxOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisvKiBXYWxrIGFsbCB2YXJpYWJsZXMgd2l0aCBkZWZpbml0aW9ucyBpbiBjdXJyZW50IHVuaXQuICAqLworI2RlZmluZSBGT1JfRUFDSF9ERUZJTkVEX1ZBUklBQkxFKG5vZGUpIFwKKyAgIGZvciAoKG5vZGUpID0gdmFycG9vbF9maXJzdF9kZWZpbmVkX3ZhcmlhYmxlICgpOyAobm9kZSk7IFwKKyAgICAgICAgKG5vZGUpID0gdmFycG9vbF9uZXh0X2RlZmluZWRfdmFyaWFibGUgKG5vZGUpKQorCisvKiBSZXR1cm4gZmlyc3QgZnVuY3Rpb24gd2l0aCBib2R5IGRlZmluZWQuICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyYXBoX25vZGUgKgorY2dyYXBoX2ZpcnN0X2RlZmluZWRfZnVuY3Rpb24gKHZvaWQpCit7CisgIHN5bXRhYl9ub2RlIG5vZGU7CisgIGZvciAobm9kZSA9IHN5bXRhYl9ub2Rlczsgbm9kZTsgbm9kZSA9IG5vZGUtPnN5bWJvbC5uZXh0KQorICAgIHsKKyAgICAgIGNncmFwaF9ub2RlICpjbiA9IGR5bl9jYXN0IDxjZ3JhcGhfbm9kZT4gKG5vZGUpOworICAgICAgaWYgKGNuICYmIGNuLT5hbmFseXplZCkKKwlyZXR1cm4gY247CisgICAgfQorICByZXR1cm4gTlVMTDsKK30KKworLyogUmV0dXJuIG5leHQgZnVuY3Rpb24gd2l0aCBib2R5IGRlZmluZWQgYWZ0ZXIgTk9ERS4gICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JhcGhfbm9kZSAqCitjZ3JhcGhfbmV4dF9kZWZpbmVkX2Z1bmN0aW9uIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCit7CisgIHN5bXRhYl9ub2RlIG5vZGUxID0gKHN5bXRhYl9ub2RlKSBub2RlLT5zeW1ib2wubmV4dDsKKyAgZm9yICg7IG5vZGUxOyBub2RlMSA9IG5vZGUxLT5zeW1ib2wubmV4dCkKKyAgICB7CisgICAgICBjZ3JhcGhfbm9kZSAqY24xID0gZHluX2Nhc3QgPGNncmFwaF9ub2RlPiAobm9kZTEpOworICAgICAgaWYgKGNuMSAmJiBjbjEtPmFuYWx5emVkKQorCXJldHVybiBjbjE7CisgICAgfQorICByZXR1cm4gTlVMTDsKK30KKworLyogV2FsayBhbGwgZnVuY3Rpb25zIHdpdGggYm9keSBkZWZpbmVkLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfREVGSU5FRF9GVU5DVElPTihub2RlKSBcCisgICBmb3IgKChub2RlKSA9IGNncmFwaF9maXJzdF9kZWZpbmVkX2Z1bmN0aW9uICgpOyAobm9kZSk7IFwKKyAgICAgICAgKG5vZGUpID0gY2dyYXBoX25leHRfZGVmaW5lZF9mdW5jdGlvbiAoKG5vZGUpKSkKKworLyogUmV0dXJuIGZpcnN0IGZ1bmN0aW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNncmFwaF9ub2RlICoKK2NncmFwaF9maXJzdF9mdW5jdGlvbiAodm9pZCkKK3sKKyAgc3ltdGFiX25vZGUgbm9kZTsKKyAgZm9yIChub2RlID0gc3ltdGFiX25vZGVzOyBub2RlOyBub2RlID0gbm9kZS0+c3ltYm9sLm5leHQpCisgICAgaWYgKGNncmFwaF9ub2RlICpjbiA9IGR5bl9jYXN0IDxjZ3JhcGhfbm9kZT4gKG5vZGUpKQorICAgICAgcmV0dXJuIGNuOworICByZXR1cm4gTlVMTDsKK30KKworLyogUmV0dXJuIG5leHQgZnVuY3Rpb24uICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyYXBoX25vZGUgKgorY2dyYXBoX25leHRfZnVuY3Rpb24gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKK3sKKyAgc3ltdGFiX25vZGUgbm9kZTEgPSAoc3ltdGFiX25vZGUpIG5vZGUtPnN5bWJvbC5uZXh0OworICBmb3IgKDsgbm9kZTE7IG5vZGUxID0gbm9kZTEtPnN5bWJvbC5uZXh0KQorICAgIGlmIChjZ3JhcGhfbm9kZSAqY24xID0gZHluX2Nhc3QgPGNncmFwaF9ub2RlPiAobm9kZTEpKQorICAgICAgcmV0dXJuIGNuMTsKKyAgcmV0dXJuIE5VTEw7Cit9CisvKiBXYWxrIGFsbCBmdW5jdGlvbnMuICAqLworI2RlZmluZSBGT1JfRUFDSF9GVU5DVElPTihub2RlKSBcCisgICBmb3IgKChub2RlKSA9IGNncmFwaF9maXJzdF9mdW5jdGlvbiAoKTsgKG5vZGUpOyBcCisgICAgICAgIChub2RlKSA9IGNncmFwaF9uZXh0X2Z1bmN0aW9uICgobm9kZSkpKQorCisvKiBSZXR1cm4gdHJ1ZSB3aGVuIE5PREUgaXMgYSBmdW5jdGlvbiB3aXRoIEdpbXBsZSBib2R5IGRlZmluZWQKKyAgIGluIGN1cnJlbnQgdW5pdC4gIEZ1bmN0aW9ucyBjYW4gYWxzbyBiZSBkZWZpbmUgZXh0ZXJuYWxseSBvciB0aGV5CisgICBjYW4gYmUgdGh1bmtzIHdpdGggbm8gR2ltcGxlIHJlcHJlc2VudGF0aW9uLgorCisgICBOb3RlIHRoYXQgYXQgV1BBIHN0YWdlLCB0aGUgZnVuY3Rpb24gYm9keSBtYXkgbm90IGJlIHByZXNlbnQgaW4gbWVtb3J5LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitjZ3JhcGhfZnVuY3Rpb25fd2l0aF9naW1wbGVfYm9keV9wIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCit7CisgIHJldHVybiBub2RlLT5hbmFseXplZCAmJiAhbm9kZS0+dGh1bmsudGh1bmtfcCAmJiAhbm9kZS0+YWxpYXM7Cit9CisKKy8qIFJldHVybiBmaXJzdCBmdW5jdGlvbiB3aXRoIGJvZHkgZGVmaW5lZC4gICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JhcGhfbm9kZSAqCitjZ3JhcGhfZmlyc3RfZnVuY3Rpb25fd2l0aF9naW1wbGVfYm9keSAodm9pZCkKK3sKKyAgc3ltdGFiX25vZGUgbm9kZTsKKyAgZm9yIChub2RlID0gc3ltdGFiX25vZGVzOyBub2RlOyBub2RlID0gbm9kZS0+c3ltYm9sLm5leHQpCisgICAgeworICAgICAgY2dyYXBoX25vZGUgKmNuID0gZHluX2Nhc3QgPGNncmFwaF9ub2RlPiAobm9kZSk7CisgICAgICBpZiAoY24gJiYgY2dyYXBoX2Z1bmN0aW9uX3dpdGhfZ2ltcGxlX2JvZHlfcCAoY24pKQorCXJldHVybiBjbjsKKyAgICB9CisgIHJldHVybiBOVUxMOworfQorCisvKiBSZXR1cm4gbmV4dCByZWFjaGFibGUgc3RhdGljIHZhcmlhYmxlIHdpdGggaW5pdGlhbGl6ZXIgYWZ0ZXIgTk9ERS4gICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JhcGhfbm9kZSAqCitjZ3JhcGhfbmV4dF9mdW5jdGlvbl93aXRoX2dpbXBsZV9ib2R5IChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCit7CisgIHN5bXRhYl9ub2RlIG5vZGUxID0gbm9kZS0+c3ltYm9sLm5leHQ7CisgIGZvciAoOyBub2RlMTsgbm9kZTEgPSBub2RlMS0+c3ltYm9sLm5leHQpCisgICAgeworICAgICAgY2dyYXBoX25vZGUgKmNuMSA9IGR5bl9jYXN0IDxjZ3JhcGhfbm9kZT4gKG5vZGUxKTsKKyAgICAgIGlmIChjbjEgJiYgY2dyYXBoX2Z1bmN0aW9uX3dpdGhfZ2ltcGxlX2JvZHlfcCAoY24xKSkKKwlyZXR1cm4gY24xOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFdhbGsgYWxsIGZ1bmN0aW9ucyB3aXRoIGJvZHkgZGVmaW5lZC4gICovCisjZGVmaW5lIEZPUl9FQUNIX0ZVTkNUSU9OX1dJVEhfR0lNUExFX0JPRFkobm9kZSkgXAorICAgZm9yICgobm9kZSkgPSBjZ3JhcGhfZmlyc3RfZnVuY3Rpb25fd2l0aF9naW1wbGVfYm9keSAoKTsgKG5vZGUpOyBcCisgICAgICAgIChub2RlKSA9IGNncmFwaF9uZXh0X2Z1bmN0aW9uX3dpdGhfZ2ltcGxlX2JvZHkgKG5vZGUpKQorCisvKiBDcmVhdGUgYSBuZXcgc3RhdGljIHZhcmlhYmxlIG9mIHR5cGUgVFlQRS4gICovCit0cmVlIGFkZF9uZXdfc3RhdGljX3ZhciAodHJlZSB0eXBlKTsKKworLyogUmV0dXJuIHRydWUgaWYgaXRlcmF0b3IgQ1NJIHBvaW50cyB0byBub3RoaW5nLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorY3NpX2VuZF9wIChjZ3JhcGhfbm9kZV9zZXRfaXRlcmF0b3IgY3NpKQoreworICByZXR1cm4gY3NpLmluZGV4ID49IGNzaS5zZXQtPm5vZGVzLmxlbmd0aCAoKTsKK30KKworLyogQWR2YW5jZSBpdGVyYXRvciBDU0kuICAqLworc3RhdGljIGlubGluZSB2b2lkCitjc2lfbmV4dCAoY2dyYXBoX25vZGVfc2V0X2l0ZXJhdG9yICpjc2kpCit7CisgIGNzaS0+aW5kZXgrKzsKK30KKworLyogUmV0dXJuIHRoZSBub2RlIHBvaW50ZWQgdG8gYnkgQ1NJLiAgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNncmFwaF9ub2RlICoKK2NzaV9ub2RlIChjZ3JhcGhfbm9kZV9zZXRfaXRlcmF0b3IgY3NpKQoreworICByZXR1cm4gY3NpLnNldC0+bm9kZXNbY3NpLmluZGV4XTsKK30KKworLyogUmV0dXJuIGFuIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBub2RlIGluIFNFVC4gICovCitzdGF0aWMgaW5saW5lIGNncmFwaF9ub2RlX3NldF9pdGVyYXRvcgorY3NpX3N0YXJ0IChjZ3JhcGhfbm9kZV9zZXQgc2V0KQoreworICBjZ3JhcGhfbm9kZV9zZXRfaXRlcmF0b3IgY3NpOworCisgIGNzaS5zZXQgPSBzZXQ7CisgIGNzaS5pbmRleCA9IDA7CisgIHJldHVybiBjc2k7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFNFVCBjb250YWlucyBOT0RFLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorY2dyYXBoX25vZGVfaW5fc2V0X3AgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwgY2dyYXBoX25vZGVfc2V0IHNldCkKK3sKKyAgY2dyYXBoX25vZGVfc2V0X2l0ZXJhdG9yIGNzaTsKKyAgY3NpID0gY2dyYXBoX25vZGVfc2V0X2ZpbmQgKHNldCwgbm9kZSk7CisgIHJldHVybiAhY3NpX2VuZF9wIChjc2kpOworfQorCisvKiBSZXR1cm4gbnVtYmVyIG9mIG5vZGVzIGluIFNFVC4gICovCitzdGF0aWMgaW5saW5lIHNpemVfdAorY2dyYXBoX25vZGVfc2V0X3NpemUgKGNncmFwaF9ub2RlX3NldCBzZXQpCit7CisgIHJldHVybiBzZXQtPm5vZGVzLmxlbmd0aCAoKTsKK30KKworLyogUmV0dXJuIHRydWUgaWYgaXRlcmF0b3IgVlNJIHBvaW50cyB0byBub3RoaW5nLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAordnNpX2VuZF9wICh2YXJwb29sX25vZGVfc2V0X2l0ZXJhdG9yIHZzaSkKK3sKKyAgcmV0dXJuIHZzaS5pbmRleCA+PSB2c2kuc2V0LT5ub2Rlcy5sZW5ndGggKCk7Cit9CisKKy8qIEFkdmFuY2UgaXRlcmF0b3IgVlNJLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordnNpX25leHQgKHZhcnBvb2xfbm9kZV9zZXRfaXRlcmF0b3IgKnZzaSkKK3sKKyAgdnNpLT5pbmRleCsrOworfQorCisvKiBSZXR1cm4gdGhlIG5vZGUgcG9pbnRlZCB0byBieSBWU0kuICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmFycG9vbF9ub2RlICoKK3ZzaV9ub2RlICh2YXJwb29sX25vZGVfc2V0X2l0ZXJhdG9yIHZzaSkKK3sKKyAgcmV0dXJuIHZzaS5zZXQtPm5vZGVzW3ZzaS5pbmRleF07Cit9CisKKy8qIFJldHVybiBhbiBpdGVyYXRvciB0byB0aGUgZmlyc3Qgbm9kZSBpbiBTRVQuICAqLworc3RhdGljIGlubGluZSB2YXJwb29sX25vZGVfc2V0X2l0ZXJhdG9yCit2c2lfc3RhcnQgKHZhcnBvb2xfbm9kZV9zZXQgc2V0KQoreworICB2YXJwb29sX25vZGVfc2V0X2l0ZXJhdG9yIHZzaTsKKworICB2c2kuc2V0ID0gc2V0OworICB2c2kuaW5kZXggPSAwOworICByZXR1cm4gdnNpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBTRVQgY29udGFpbnMgTk9ERS4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3ZhcnBvb2xfbm9kZV9pbl9zZXRfcCAoc3RydWN0IHZhcnBvb2xfbm9kZSAqbm9kZSwgdmFycG9vbF9ub2RlX3NldCBzZXQpCit7CisgIHZhcnBvb2xfbm9kZV9zZXRfaXRlcmF0b3IgdnNpOworICB2c2kgPSB2YXJwb29sX25vZGVfc2V0X2ZpbmQgKHNldCwgbm9kZSk7CisgIHJldHVybiAhdnNpX2VuZF9wICh2c2kpOworfQorCisvKiBSZXR1cm4gbnVtYmVyIG9mIG5vZGVzIGluIFNFVC4gICovCitzdGF0aWMgaW5saW5lIHNpemVfdAordmFycG9vbF9ub2RlX3NldF9zaXplICh2YXJwb29sX25vZGVfc2V0IHNldCkKK3sKKyAgcmV0dXJuIHNldC0+bm9kZXMubGVuZ3RoICgpOworfQorCisvKiBVbmlxdWl6ZSBhbGwgY29uc3RhbnRzIHRoYXQgYXBwZWFyIGluIG1lbW9yeS4KKyAgIEVhY2ggY29uc3RhbnQgaW4gbWVtb3J5IHRodXMgZmFyIG91dHB1dCBpcyByZWNvcmRlZAorICAgaW4gYGNvbnN0X2Rlc2NfdGFibGUnLiAgKi8KKworc3RydWN0IEdUWSgoKSkgY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlIHsKKyAgLyogQSBNRU0gZm9yIHRoZSBjb25zdGFudC4gICovCisgIHJ0eCBydGw7CisKKyAgLyogVGhlIHZhbHVlIG9mIHRoZSBjb25zdGFudC4gICovCisgIHRyZWUgdmFsdWU7CisKKyAgLyogSGFzaCBvZiB2YWx1ZS4gIENvbXB1dGluZyB0aGUgaGFzaCBmcm9tIHZhbHVlIGVhY2ggdGltZQorICAgICBoYXNoZm4gaXMgY2FsbGVkIGNhbid0IHdvcmsgcHJvcGVybHksIGFzIHRoYXQgbWVhbnMgcmVjdXJzaXZlCisgICAgIHVzZSBvZiB0aGUgaGFzaCB0YWJsZSBkdXJpbmcgaGFzaCB0YWJsZSBleHBhbnNpb24uICAqLworICBoYXNodmFsX3QgaGFzaDsKK307CisKKy8qIFJldHVybiB0cnVlIGlmIHNldCBpcyBub25lbXB0eS4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2NncmFwaF9ub2RlX3NldF9ub25lbXB0eV9wIChjZ3JhcGhfbm9kZV9zZXQgc2V0KQoreworICByZXR1cm4gIXNldC0+bm9kZXMuaXNfZW1wdHkgKCk7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHNldCBpcyBub25lbXB0eS4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3ZhcnBvb2xfbm9kZV9zZXRfbm9uZW1wdHlfcCAodmFycG9vbF9ub2RlX3NldCBzZXQpCit7CisgIHJldHVybiAhc2V0LT5ub2Rlcy5pc19lbXB0eSAoKTsKK30KKworLyogUmV0dXJuIHRydWUgd2hlbiBmdW5jdGlvbiBOT0RFIGlzIG9ubHkgY2FsbGVkIGRpcmVjdGx5IG9yIGl0IGhhcyBhbGlhcy4KKyAgIGkuZS4gaXQgaXMgbm90IGV4dGVybmFsbHkgdmlzaWJsZSwgYWRkcmVzcyB3YXMgbm90IHRha2VuIGFuZAorICAgaXQgaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIG5vbi1zdGFuZGFyZCB3YXkuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2NncmFwaF9vbmx5X2NhbGxlZF9kaXJlY3RseV9vcl9hbGlhc2VkX3AgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKK3sKKyAgZ2NjX2Fzc2VydCAoIW5vZGUtPmdsb2JhbC5pbmxpbmVkX3RvKTsKKyAgcmV0dXJuICghbm9kZS0+c3ltYm9sLmZvcmNlX291dHB1dCAmJiAhbm9kZS0+c3ltYm9sLmFkZHJlc3NfdGFrZW4KKwkgICYmICFub2RlLT5zeW1ib2wudXNlZF9mcm9tX290aGVyX3BhcnRpdGlvbgorCSAgJiYgIURFQ0xfVklSVFVBTF9QIChub2RlLT5zeW1ib2wuZGVjbCkKKwkgICYmICFERUNMX1NUQVRJQ19DT05TVFJVQ1RPUiAobm9kZS0+c3ltYm9sLmRlY2wpCisJICAmJiAhREVDTF9TVEFUSUNfREVTVFJVQ1RPUiAobm9kZS0+c3ltYm9sLmRlY2wpCisJICAmJiAhbm9kZS0+c3ltYm9sLmV4dGVybmFsbHlfdmlzaWJsZSk7Cit9CisKKy8qIFJldHVybiB0cnVlIHdoZW4gZnVuY3Rpb24gTk9ERSBjYW4gYmUgcmVtb3ZlZCBmcm9tIGNhbGxncmFwaAorICAgaWYgYWxsIGRpcmVjdCBjYWxscyBhcmUgZWxpbWluYXRlZC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAordmFycG9vbF9jYW5fcmVtb3ZlX2lmX25vX3JlZnMgKHN0cnVjdCB2YXJwb29sX25vZGUgKm5vZGUpCit7CisgIGlmIChERUNMX0VYVEVSTkFMIChub2RlLT5zeW1ib2wuZGVjbCkpCisgICAgcmV0dXJuIHRydWU7CisgIHJldHVybiAoIW5vZGUtPnN5bWJvbC5mb3JjZV9vdXRwdXQgJiYgIW5vZGUtPnN5bWJvbC51c2VkX2Zyb21fb3RoZXJfcGFydGl0aW9uCisgIAkgICYmICgoREVDTF9DT01EQVQgKG5vZGUtPnN5bWJvbC5kZWNsKQorCSAgICAgICAmJiAhc3ltdGFiX3VzZWRfZnJvbV9vYmplY3RfZmlsZV9wICgoc3ltdGFiX25vZGUpIG5vZGUpKQorCSAgICAgIHx8ICFub2RlLT5zeW1ib2wuZXh0ZXJuYWxseV92aXNpYmxlCisJICAgICAgfHwgREVDTF9IQVNfVkFMVUVfRVhQUl9QIChub2RlLT5zeW1ib2wuZGVjbCkpKTsKK30KKworLyogUmV0dXJuIHRydWUgd2hlbiBhbGwgcmVmZXJlbmNlcyB0byBWTk9ERSBtdXN0IGJlIHZpc2libGUgaW4gaXBhX3JlZl9saXN0LgorICAgaS5lLiBpZiB0aGUgdmFyaWFibGUgaXMgbm90IGV4dGVybmFsbHkgdmlzaWJsZSBvciBub3QgdXNlZCBpbiBzb21lIG1hZ2ljCisgICB3YXkgKGFzbSBzdGF0ZW1lbnQgb3Igc3VjaCkuCisgICBUaGUgbWFnaWMgdXNlcyBhcmUgYWxsIHN1bW1hcml6ZWQgaW4gZm9yY2Vfb3V0cHV0IGZsYWcuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK3ZhcnBvb2xfYWxsX3JlZnNfZXhwbGljaXRfcCAoc3RydWN0IHZhcnBvb2xfbm9kZSAqdm5vZGUpCit7CisgIHJldHVybiAodm5vZGUtPmFuYWx5emVkCisJICAmJiAhdm5vZGUtPnN5bWJvbC5leHRlcm5hbGx5X3Zpc2libGUKKwkgICYmICF2bm9kZS0+c3ltYm9sLnVzZWRfZnJvbV9vdGhlcl9wYXJ0aXRpb24KKwkgICYmICF2bm9kZS0+c3ltYm9sLmZvcmNlX291dHB1dCk7Cit9CisKKy8qIENvbnN0YW50IHBvb2wgYWNjZXNzb3IgZnVuY3Rpb24uICAqLworaHRhYl90IGNvbnN0YW50X3Bvb2xfaHRhYiAodm9pZCk7CisKKy8qIEZJWE1FOiBpbmFwcHJvcHJpYXRlIGRlcGVuZGVuY3kgb2YgY2dyYXBoIG9uIElQQS4gICovCisjaW5jbHVkZSAiaXBhLXJlZi1pbmxpbmUuaCIKKworLyogUmV0dXJuIG5vZGUgdGhhdCBhbGlhcyBOIGlzIGFsaWFzaW5nLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyYXBoX25vZGUgKgorY2dyYXBoX2FsaWFzX2FsaWFzZWRfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICpuKQoreworICBzdHJ1Y3QgaXBhX3JlZiAqcmVmOworCisgIGlwYV9yZWZfbGlzdF9yZWZlcmVuY2VfaXRlcmF0ZSAoJm4tPnN5bWJvbC5yZWZfbGlzdCwgMCwgcmVmKTsKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAocmVmLT51c2UgPT0gSVBBX1JFRl9BTElBUyk7CisgIGlmIChpc19hIDxjZ3JhcGhfbm9kZT4gKHJlZi0+cmVmZXJyZWQpKQorICAgIHJldHVybiBpcGFfcmVmX25vZGUgKHJlZik7CisgIHJldHVybiBOVUxMOworfQorCisvKiBSZXR1cm4gbm9kZSB0aGF0IGFsaWFzIE4gaXMgYWxpYXNpbmcuICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YXJwb29sX25vZGUgKgordmFycG9vbF9hbGlhc19hbGlhc2VkX25vZGUgKHN0cnVjdCB2YXJwb29sX25vZGUgKm4pCit7CisgIHN0cnVjdCBpcGFfcmVmICpyZWY7CisKKyAgaXBhX3JlZl9saXN0X3JlZmVyZW5jZV9pdGVyYXRlICgmbi0+c3ltYm9sLnJlZl9saXN0LCAwLCByZWYpOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChyZWYtPnVzZSA9PSBJUEFfUkVGX0FMSUFTKTsKKyAgaWYgKGlzX2EgPHZhcnBvb2xfbm9kZT4gKHJlZi0+cmVmZXJyZWQpKQorICAgIHJldHVybiBpcGFfcmVmX3ZhcnBvb2xfbm9kZSAocmVmKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEdpdmVuIE5PREUsIHdhbGsgdGhlIGFsaWFzIGNoYWluIHRvIHJldHVybiB0aGUgZnVuY3Rpb24gTk9ERSBpcyBhbGlhcyBvZi4KKyAgIFdhbGsgdGhyb3VnaCB0aHVuaywgdG9vLgorICAgV2hlbiBBVkFJTEFCSUxJVFkgaXMgbm9uLU5VTEwsIGdldCBtaW5pbWFsIGF2YWlsYWJpbGl0eSBpbiB0aGUgY2hhaW4uICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JhcGhfbm9kZSAqCitjZ3JhcGhfZnVuY3Rpb25fbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLCBlbnVtIGF2YWlsYWJpbGl0eSAqYXZhaWxhYmlsaXR5KQoreworICBpZiAoYXZhaWxhYmlsaXR5KQorICAgICphdmFpbGFiaWxpdHkgPSBjZ3JhcGhfZnVuY3Rpb25fYm9keV9hdmFpbGFiaWxpdHkgKG5vZGUpOworICB3aGlsZSAobm9kZSkKKyAgICB7CisgICAgICBpZiAobm9kZS0+YWxpYXMgJiYgbm9kZS0+YW5hbHl6ZWQpCisJbm9kZSA9IGNncmFwaF9hbGlhc19hbGlhc2VkX25vZGUgKG5vZGUpOworICAgICAgZWxzZSBpZiAobm9kZS0+dGh1bmsudGh1bmtfcCkKKwlub2RlID0gbm9kZS0+Y2FsbGVlcy0+Y2FsbGVlOworICAgICAgZWxzZQorCXJldHVybiBub2RlOworICAgICAgaWYgKG5vZGUgJiYgYXZhaWxhYmlsaXR5KQorCXsKKwkgIGVudW0gYXZhaWxhYmlsaXR5IGE7CisJICBhID0gY2dyYXBoX2Z1bmN0aW9uX2JvZHlfYXZhaWxhYmlsaXR5IChub2RlKTsKKwkgIGlmIChhIDwgKmF2YWlsYWJpbGl0eSkKKwkgICAgKmF2YWlsYWJpbGl0eSA9IGE7CisJfQorICAgIH0KKyAgaWYgKGF2YWlsYWJpbGl0eSkKKyAgICAqYXZhaWxhYmlsaXR5ID0gQVZBSUxfTk9UX0FWQUlMQUJMRTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEdpdmVuIE5PREUsIHdhbGsgdGhlIGFsaWFzIGNoYWluIHRvIHJldHVybiB0aGUgZnVuY3Rpb24gTk9ERSBpcyBhbGlhcyBvZi4KKyAgIERvIG5vdCB3YWxrIHRocm91Z2ggdGh1bmtzLgorICAgV2hlbiBBVkFJTEFCSUxJVFkgaXMgbm9uLU5VTEwsIGdldCBtaW5pbWFsIGF2YWlsYWJpbGl0eSBpbiB0aGUgY2hhaW4uICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JhcGhfbm9kZSAqCitjZ3JhcGhfZnVuY3Rpb25fb3JfdGh1bmtfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLCBlbnVtIGF2YWlsYWJpbGl0eSAqYXZhaWxhYmlsaXR5KQoreworICBpZiAoYXZhaWxhYmlsaXR5KQorICAgICphdmFpbGFiaWxpdHkgPSBjZ3JhcGhfZnVuY3Rpb25fYm9keV9hdmFpbGFiaWxpdHkgKG5vZGUpOworICB3aGlsZSAobm9kZSkKKyAgICB7CisgICAgICBpZiAobm9kZS0+YWxpYXMgJiYgbm9kZS0+YW5hbHl6ZWQpCisJbm9kZSA9IGNncmFwaF9hbGlhc19hbGlhc2VkX25vZGUgKG5vZGUpOworICAgICAgZWxzZQorCXJldHVybiBub2RlOworICAgICAgaWYgKG5vZGUgJiYgYXZhaWxhYmlsaXR5KQorCXsKKwkgIGVudW0gYXZhaWxhYmlsaXR5IGE7CisJICBhID0gY2dyYXBoX2Z1bmN0aW9uX2JvZHlfYXZhaWxhYmlsaXR5IChub2RlKTsKKwkgIGlmIChhIDwgKmF2YWlsYWJpbGl0eSkKKwkgICAgKmF2YWlsYWJpbGl0eSA9IGE7CisJfQorICAgIH0KKyAgaWYgKGF2YWlsYWJpbGl0eSkKKyAgICAqYXZhaWxhYmlsaXR5ID0gQVZBSUxfTk9UX0FWQUlMQUJMRTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEdpdmVuIE5PREUsIHdhbGsgdGhlIGFsaWFzIGNoYWluIHRvIHJldHVybiB0aGUgZnVuY3Rpb24gTk9ERSBpcyBhbGlhcyBvZi4KKyAgIERvIG5vdCB3YWxrIHRocm91Z2ggdGh1bmtzLgorICAgV2hlbiBBVkFJTEFCSUxJVFkgaXMgbm9uLU5VTEwsIGdldCBtaW5pbWFsIGF2YWlsYWJpbGl0eSBpbiB0aGUgY2hhaW4uICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2YXJwb29sX25vZGUgKgordmFycG9vbF92YXJpYWJsZV9ub2RlIChzdHJ1Y3QgdmFycG9vbF9ub2RlICpub2RlLCBlbnVtIGF2YWlsYWJpbGl0eSAqYXZhaWxhYmlsaXR5KQoreworICBpZiAoYXZhaWxhYmlsaXR5KQorICAgICphdmFpbGFiaWxpdHkgPSBjZ3JhcGhfdmFyaWFibGVfaW5pdGlhbGl6ZXJfYXZhaWxhYmlsaXR5IChub2RlKTsKKyAgd2hpbGUgKG5vZGUpCisgICAgeworICAgICAgaWYgKG5vZGUtPmFsaWFzICYmIG5vZGUtPmFuYWx5emVkKQorCW5vZGUgPSB2YXJwb29sX2FsaWFzX2FsaWFzZWRfbm9kZSAobm9kZSk7CisgICAgICBlbHNlCisJcmV0dXJuIG5vZGU7CisgICAgICBpZiAobm9kZSAmJiBhdmFpbGFiaWxpdHkpCisJeworCSAgZW51bSBhdmFpbGFiaWxpdHkgYTsKKwkgIGEgPSBjZ3JhcGhfdmFyaWFibGVfaW5pdGlhbGl6ZXJfYXZhaWxhYmlsaXR5IChub2RlKTsKKwkgIGlmIChhIDwgKmF2YWlsYWJpbGl0eSkKKwkgICAgKmF2YWlsYWJpbGl0eSA9IGE7CisJfQorICAgIH0KKyAgaWYgKGF2YWlsYWJpbGl0eSkKKyAgICAqYXZhaWxhYmlsaXR5ID0gQVZBSUxfTk9UX0FWQUlMQUJMRTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybiB0cnVlIHdoZW4gdGhlIGVkZ2UgRSByZXByZXNlbnRzIGEgZGlyZWN0IHJlY3Vyc2lvbi4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2NncmFwaF9lZGdlX3JlY3Vyc2l2ZV9wIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmUpCit7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY2FsbGVlID0gY2dyYXBoX2Z1bmN0aW9uX29yX3RodW5rX25vZGUgKGUtPmNhbGxlZSwgTlVMTCk7CisgIGlmIChlLT5jYWxsZXItPmdsb2JhbC5pbmxpbmVkX3RvKQorICAgIHJldHVybiBlLT5jYWxsZXItPmdsb2JhbC5pbmxpbmVkX3RvLT5zeW1ib2wuZGVjbCA9PSBjYWxsZWUtPnN5bWJvbC5kZWNsOworICBlbHNlCisgICAgcmV0dXJuIGUtPmNhbGxlci0+c3ltYm9sLmRlY2wgPT0gY2FsbGVlLT5zeW1ib2wuZGVjbDsKK30KKworLyogUmV0dXJuIHRydWUgaWYgdGhlIFRNX0NMT05FIGJpdCBpcyBzZXQgZm9yIGEgZ2l2ZW4gRk5ERUNMLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorZGVjbF9pc190bV9jbG9uZSAoY29uc3RfdHJlZSBmbmRlY2wpCit7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqbiA9IGNncmFwaF9nZXRfbm9kZSAoZm5kZWNsKTsKKyAgaWYgKG4pCisgICAgcmV0dXJuIG4tPnRtX2Nsb25lOworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIExpa2V3aXNlIGluZGljYXRlIHRoYXQgYSBub2RlIGlzIG5lZWRlZCwgaS5lLiByZWFjaGFibGUgdmlhIHNvbWUKKyAgIGV4dGVybmFsIG1lYW5zLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitjZ3JhcGhfbWFya19mb3JjZV9vdXRwdXRfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQoreworICBub2RlLT5zeW1ib2wuZm9yY2Vfb3V0cHV0ID0gMTsKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIW5vZGUtPmdsb2JhbC5pbmxpbmVkX3RvKTsKK30KKworLyogUmV0dXJuIHRydWUgd2hlbiB0aGUgc3ltYm9sIGlzIHJlYWwgc3ltYm9sLCBpLmUuIGl0IGlzIG5vdCBpbmxpbmUgY2xvbmUKKyAgIG9yIGV4dGVybiBmdW5jdGlvbiBrZXB0IGFyb3VuZCBqdXN0IGZvciBpbmxpbmluZy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorc3ltdGFiX3JlYWxfc3ltYm9sX3AgKHN5bXRhYl9ub2RlIG5vZGUpCit7CisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY25vZGU7CisKKyAgaWYgKCFpc19hIDxjZ3JhcGhfbm9kZT4gKG5vZGUpKQorICAgIHJldHVybiB0cnVlOworICBjbm9kZSA9IGNncmFwaCAobm9kZSk7CisgIGlmIChjbm9kZS0+Z2xvYmFsLmlubGluZWRfdG8pCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAoY25vZGUtPmFic3RyYWN0X2FuZF9uZWVkZWQpCisgICAgcmV0dXJuIGZhbHNlOworICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZiAgLyogR0NDX0NHUkFQSF9IICAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NpZi1jb2RlLmRlZiBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jaWYtY29kZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlMGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jaWYtY29kZS5kZWYKQEAgLTAsMCArMSwxMDUgQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGNncmFwaF9pbmxpbmVfZmFpbGVkX3QKKyAgIGVudW1zIHVzZWQgaW4gR0NDLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IERvdWcgS3dhbiA8ZG91Z2t3YW5AZ29vZ2xlLmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZSB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFkgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0Mgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXMKKyAgIERFRkNJRkNPREUoY29kZSwgc3RyaW5nKS4KKworICAgV2hlcmUgc3ltYm9sIGlzIHRoZSBlbnVtZXJhdGlvbiBuYW1lIHdpdGhvdXQgdGhlIGBgJycuCisgICBUaGUgYXJndW1lbnQgU1RSSU5HIGlzIGEgZXhwbGFpbiB0aGUgZmFpbHVyZS4gIEV4Y2VwdCBmb3IgT0ssCisgICB3aGljaCBpcyBhIE5VTEwgcG9pbnRlci4gICovCisKKy8qIElubGluaW5nIHN1Y2Nlc3NmdWwuICBUaGlzIG11c3QgYmUgdGhlIGZpcnN0IGNvZGUuICAqLworREVGQ0lGQ09ERShPSyAsIE5VTEwpCisKKy8qIElubGluaW5nIGZhaWxlZCBmb3IgYW4gdW5zcGVjaWZpZWQgcmVhc29uLiAgKi8KK0RFRkNJRkNPREUoVU5TUEVDSUZJRUQgLCAiIikKKworLyogRnVuY3Rpb24gaGFzIG5vdCBiZSBjb25zaWRlcmVkIGZvciBpbmxpbmluZy4gIFRoaXMgaXMgdGhlIGNvZGUgZm9yCisgICBmdW5jdGlvbnMgdGhhdCBoYXZlIG5vdCBiZWVuIHJlamVjdGVkIGZvciBpbmxpbmluZyB5ZXQuICAqLworREVGQ0lGQ09ERShGVU5DVElPTl9OT1RfQ09OU0lERVJFRCwgTl8oImZ1bmN0aW9uIG5vdCBjb25zaWRlcmVkIGZvciBpbmxpbmluZyIpKQorCisvKiBJbmxpbmluZyBmYWlsZWQgb3dpbmcgdG8gdW5hdmFpbGFibGUgZnVuY3Rpb24gYm9keS4gICovCitERUZDSUZDT0RFKEJPRFlfTk9UX0FWQUlMQUJMRSwgTl8oImZ1bmN0aW9uIGJvZHkgbm90IGF2YWlsYWJsZSIpKQorCisvKiBFeHRlcm4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgaGFzIGJlZW4gcmVkZWZpbmVkLiAgKi8KK0RFRkNJRkNPREUoUkVERUZJTkVEX0VYVEVSTl9JTkxJTkUsCisJICAgTl8oInJlZGVmaW5lZCBleHRlcm4gaW5saW5lIGZ1bmN0aW9ucyBhcmUgbm90IGNvbnNpZGVyZWQgZm9yICIKKwkgICAgICAiaW5saW5pbmciKSkKKworLyogRnVuY3Rpb24gaXMgbm90IGlubGluYWJsZS4gICovCitERUZDSUZDT0RFKEZVTkNUSU9OX05PVF9JTkxJTkFCTEUsIE5fKCJmdW5jdGlvbiBub3QgaW5saW5hYmxlIikpCisKKy8qIEZ1bmN0aW9uIGlzIG5vdCBvdmVyd3JpdGFibGUuICAqLworREVGQ0lGQ09ERShPVkVSV1JJVEFCTEUsIE5fKCJmdW5jdGlvbiBib2R5IGNhbiBiZSBvdmVyd3JpdHRlbiBhdCBsaW5rIHRpbWUiKSkKKworLyogRnVuY3Rpb24gaXMgbm90IGFuIGlubGluaW5nIGNhbmRpZGF0ZS4gICovCitERUZDSUZDT0RFKEZVTkNUSU9OX05PVF9JTkxJTkVfQ0FORElEQVRFLCBOXygiZnVuY3Rpb24gbm90IGlubGluZSBjYW5kaWRhdGUiKSkKKworLyogSW5saW5pbmcgZmFpbGVkIGJlY2F1c2Ugb2YgdmFyaW91cyBsaW1pdCBwYXJhbWV0ZXJzLiAgKi8KK0RFRkNJRkNPREUoTEFSR0VfRlVOQ1RJT05fR1JPV1RIX0xJTUlULAorCSAgIE5fKCItLXBhcmFtIGxhcmdlLWZ1bmN0aW9uLWdyb3d0aCBsaW1pdCByZWFjaGVkIikpCitERUZDSUZDT0RFKExBUkdFX1NUQUNLX0ZSQU1FX0dST1dUSF9MSU1JVCwKKwkgICBOXygiLS1wYXJhbSBsYXJnZS1zdGFjay1mcmFtZS1ncm93dGggbGltaXQgcmVhY2hlZCIpKQorREVGQ0lGQ09ERShNQVhfSU5MSU5FX0lOU05TX1NJTkdMRV9MSU1JVCwKKwkgICBOXygiLS1wYXJhbSBtYXgtaW5saW5lLWluc25zLXNpbmdsZSBsaW1pdCByZWFjaGVkIikpCitERUZDSUZDT0RFKE1BWF9JTkxJTkVfSU5TTlNfQVVUT19MSU1JVCwKKwkgICBOXygiLS1wYXJhbSBtYXgtaW5saW5lLWluc25zLWF1dG8gbGltaXQgcmVhY2hlZCIpKQorREVGQ0lGQ09ERShJTkxJTkVfVU5JVF9HUk9XVEhfTElNSVQsCisJICAgTl8oIi0tcGFyYW0gaW5saW5lLXVuaXQtZ3Jvd3RoIGxpbWl0IHJlYWNoZWQiKSkKKworLyogUmVjdXJzaXZlIGlubGluaW5nLiAgKi8KK0RFRkNJRkNPREUoUkVDVVJTSVZFX0lOTElOSU5HLCBOXygicmVjdXJzaXZlIGlubGluaW5nIikpCisKKy8qIENhbGwgaXMgdW5saWtlbHkuICAqLworREVGQ0lGQ09ERShVTkxJS0VMWV9DQUxMLCBOXygiY2FsbCBpcyB1bmxpa2VseSBhbmQgY29kZSBzaXplIHdvdWxkIGdyb3ciKSkKKworLyogRnVuY3Rpb24gaXMgbm90IGRlY2xhcmVkIGFzIGlubGluZS4gICovCitERUZDSUZDT0RFKE5PVF9ERUNMQVJFRF9JTkxJTkVELAorCSAgIE5fKCJmdW5jdGlvbiBub3QgZGVjbGFyZWQgaW5saW5lIGFuZCBjb2RlIHNpemUgd291bGQgZ3JvdyIpKQorCisvKiBJbmxpbmluZyBzdXBwcmVzc2VkIGR1ZSB0byBzaXplIG9wdGltaXphdGlvbi4gICovCitERUZDSUZDT0RFKE9QVElNSVpJTkdfRk9SX1NJWkUsCisJICAgTl8oIm9wdGltaXppbmcgZm9yIHNpemUgYW5kIGNvZGUgc2l6ZSB3b3VsZCBncm93IikpCisKKy8qIENhbGxlciBhbmQgY2FsbGVlIGRpc2FncmVlIG9uIHRoZSBhcmd1bWVudHMuICAqLworREVGQ0lGQ09ERShNSVNNQVRDSEVEX0FSR1VNRU5UUywgTl8oIm1pc21hdGNoZWQgYXJndW1lbnRzIikpCisKKy8qIENhbGwgd2FzIG9yaWdpbmFsbHkgaW5kaXJlY3QuICAqLworREVGQ0lGQ09ERShPUklHSU5BTExZX0lORElSRUNUX0NBTEwsCisJICAgTl8oIm9yaWdpbmFsbHkgaW5kaXJlY3QgZnVuY3Rpb24gY2FsbCBub3QgY29uc2lkZXJlZCBmb3IgaW5saW5pbmciKSkKKworLyogVGhzIGVkZ2UgcmVwcmVzZW50cyBhbiBpbmRpcmVjdCBlZGdlIHdpdGggYSB5ZXQtdW5kZXRlcm1pbmVkIGNhbGxlZSAuICAqLworREVGQ0lGQ09ERShJTkRJUkVDVF9VTktOT1dOX0NBTEwsCisJICAgTl8oImluZGlyZWN0IGZ1bmN0aW9uIGNhbGwgd2l0aCBhIHlldCB1bmRldGVybWluZWQgY2FsbGVlIikpCisKKy8qIFdlIGNhbid0IGlubGluZSBkaWZmZXJlbnQgRUggcGVyc29uYWxpdGllcyB0b2dldGhlci4gICovCitERUZDSUZDT0RFKEVIX1BFUlNPTkFMSVRZLCBOXygiZXhjZXB0aW9uIGhhbmRsaW5nIHBlcnNvbmFsaXR5IG1pc21hdGNoIikpCisKKy8qIFdlIGNhbid0IGlubGluZSBpZiB0aGUgY2FsbGVlIGNhbiB0aHJvdyBub24tY2FsbCBleGNlcHRpb25zIGJ1dCB0aGUKKyAgIGNhbGxlciBjYW5ub3QuICAqLworREVGQ0lGQ09ERShOT05fQ0FMTF9FWENFUFRJT05TLCBOXygibm9uLWNhbGwgZXhjZXB0aW9uIGhhbmRsaW5nIG1pc21hdGNoIikpCisKKy8qIFdlIGNhbid0IGlubGluZSBiZWNhdXNlIG9mIG1pc21hdGNoZWQgdGFyZ2V0IHNwZWNpZmljIG9wdGlvbnMuICAqLworREVGQ0lGQ09ERShUQVJHRVRfT1BUSU9OX01JU01BVENILCBOXygidGFyZ2V0IHNwZWNpZmljIG9wdGlvbiBtaXNtYXRjaCIpKQorCisvKiBXZSBjYW4ndCBpbmxpbmUgYmVjYXVzZSBvZiBtaXNtYXRjaGVkIG9wdGltaXphdGlvbiBsZXZlbHMuICAqLworREVGQ0lGQ09ERShPUFRJTUlaQVRJT05fTUlTTUFUQ0gsIE5fKCJvcHRpbWl6YXRpb24gbGV2ZWwgYXR0cmlidXRlIG1pc21hdGNoIikpCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2ZGQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIEdDQ19DT05GSUdfSAorI2RlZmluZSBHQ0NfQ09ORklHX0gKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorI2Vycm9yIGNvbmZpZy5oIGlzIGZvciB0aGUgaG9zdCwgbm90IGJ1aWxkLCBtYWNoaW5lLgorI2VuZGlmCisjaW5jbHVkZSAiYXV0by1ob3N0LmgiCisjaWZkZWYgSU5fR0NDCisjIGluY2x1ZGUgImFuc2lkZWNsLmgiCisjZW5kaWYKKyNlbmRpZiAvKiBHQ0NfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWNvcmVzLmRlZiBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWNvcmVzLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODQwYWEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtY29yZXMuZGVmCkBAIC0wLDAgKzEsNDAgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQVJNIEx0ZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgaXMgYSBsaXN0IG9mIGNvcmVzIHRoYXQgaW1wbGVtZW50IEFBcmNoNjQuCisKKyAgIEJlZm9yZSB1c2luZyAjaW5jbHVkZSB0byByZWFkIHRoaXMgZmlsZSwgZGVmaW5lIGEgbWFjcm86CisKKyAgICAgIEFBUkNINjRfQ09SRShDT1JFX05BTUUsIENPUkVfSURFTlQsIEFSQ0gsIEZMQUdTLCBDT1NUUykKKworICAgVGhlIENPUkVfTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgY29yZSwgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcgY29uc3RhbnQuCisgICBUaGUgQ09SRV9JREVOVCBpcyB0aGUgbmFtZSBvZiB0aGUgY29yZSwgcmVwcmVzZW50ZWQgYXMgYW4gaWRlbnRpZmllci4KKyAgIEFSQ0ggaXMgdGhlIGFyY2hpdGVjdHVyZSByZXZpc2lvbiBpbXBsZW1lbnRlZCBieSB0aGUgY2hpcC4KKyAgIEZMQUdTIGFyZSB0aGUgYml0d2lzZS1vciBvZiB0aGUgdHJhaXRzIHRoYXQgYXBwbHkgdG8gdGhhdCBjb3JlLgorICAgVGhpcyBuZWVkIG5vdCBpbmNsdWRlIGZsYWdzIGltcGxpZWQgYnkgdGhlIGFyY2hpdGVjdHVyZS4KKyAgIENPU1RTIGlzIHRoZSBuYW1lIG9mIHRoZSBydHhfY29zdHMgcm91dGluZSB0byB1c2UuICAqLworCisvKiBWOCBBcmNoaXRlY3R1cmUgUHJvY2Vzc29ycy4KKyAgIFRoaXMgbGlzdCBjdXJyZW50bHkgY29udGFpbnMgZXhhbXBsZSBDUFVzIHRoYXQgaW1wbGVtZW50IEFBcmNoNjQsIGFuZAorICAgdGhlcmVmb3JlIHNlcnZlcyBhcyBhIHRlbXBsYXRlIGZvciBhZGRpbmcgbW9yZSBDUFVzIGluIHRoZSBmdXR1cmUuICAqLworCitBQVJDSDY0X0NPUkUoImNvcnRleC1hNTMiLAkgIGNvcnRleGE1MywJICAgICA4LCAgQUFSQ0g2NF9GTF9GUFNJTUQsICAgIGdlbmVyaWMpCitBQVJDSDY0X0NPUkUoImNvcnRleC1hNTciLAkgIGNvcnRleGE1NywJICAgICA4LCAgQUFSQ0g2NF9GTF9GUFNJTUQsICAgIGdlbmVyaWMpCitBQVJDSDY0X0NPUkUoImV4YW1wbGUtMSIsCSAgICAgIGxhcmdlLAkgICAgIDgsICBBQVJDSDY0X0ZMX0ZQU0lNRCwgICAgZ2VuZXJpYykKK0FBUkNINjRfQ09SRSgiZXhhbXBsZS0yIiwJICAgICAgc21hbGwsCSAgICAgOCwgIEFBUkNINjRfRkxfRlBTSU1ELCAgICBnZW5lcmljKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtZWxmLXJhdy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtZWxmLXJhdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZDAxNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1lbGYtcmF3LmgKQEAgLTAsMCArMSwzMiBAQAorLyogTWFjaGluZSBkZXNjcmlwdGlvbiBmb3IgQUFyY2g2NCBhcmNoaXRlY3R1cmUuCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFSTSBMdGQuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBTdXBwb3J0IGZvciBiYXJlLW1ldGFsIGJ1aWxkcy4gICovCisjaWZuZGVmIEdDQ19BQVJDSDY0X0VMRl9SQVdfSAorI2RlZmluZSBHQ0NfQUFSQ0g2NF9FTEZfUkFXX0gKKworI2RlZmluZSBTVEFSVEZJTEVfU1BFQyAiIGNydGklTyVzIGNydGJlZ2luJU8lcyBjcnQwJU8lcyIKKyNkZWZpbmUgRU5ERklMRV9TUEVDICIgY3J0ZW5kJU8lcyBjcnRuJU8lcyIKKworI2lmbmRlZiBMSU5LX1NQRUMKKyNkZWZpbmUgTElOS19TUEVDICIle21iaWctZW5kaWFuOi1FQn0gJXttbGl0dGxlLWVuZGlhbjotRUx9IC1YIgorI2VuZGlmCisKKyNlbmRpZiAvKiBHQ0NfQUFSQ0g2NF9FTEZfUkFXX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWVsZi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzYWU1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWVsZi5oCkBAIC0wLDAgKzEsMTMxIEBACisvKiBNYWNoaW5lIGRlc2NyaXB0aW9uIGZvciBBQXJjaDY0IGFyY2hpdGVjdHVyZS4KKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQVJNIEx0ZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0FBUkNINjRfRUxGX0gKKyNkZWZpbmUgR0NDX0FBUkNINjRfRUxGX0gKKworCisjZGVmaW5lIEFTTV9PVVRQVVRfTEFCRUxSRUYoRklMRSwgTkFNRSkgXAorICBhYXJjaDY0X2FzbV9vdXRwdXRfbGFiZWxyZWYgKEZJTEUsIE5BTUUpCisKKyNkZWZpbmUgQVNNX09VVFBVVF9ERUYoRklMRSwgTkFNRTEsIE5BTUUyKQlcCisgIGRvCQkJCQkJXAorICAgIHsJCQkJCQlcCisgICAgICBhc3NlbWJsZV9uYW1lIChGSUxFLCBOQU1FMSk7CQlcCisgICAgICBmcHV0cyAoIiA9ICIsIEZJTEUpOwkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKEZJTEUsIE5BTUUyKTsJCVwKKyAgICAgIGZwdXRjICgnXG4nLCBGSUxFKTsJCQlcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBURVhUX1NFQ1RJT05fQVNNX09QCSJcdC50ZXh0IgorI2RlZmluZSBEQVRBX1NFQ1RJT05fQVNNX09QCSJcdC5kYXRhIgorI2RlZmluZSBCU1NfU0VDVElPTl9BU01fT1AJIlx0LmJzcyIKKworI2RlZmluZSBDVE9SU19TRUNUSU9OX0FTTV9PUCAiXHQuc2VjdGlvblx0LmluaXRfYXJyYXksXCJhd1wiLCVpbml0X2FycmF5IgorI2RlZmluZSBEVE9SU19TRUNUSU9OX0FTTV9PUCAiXHQuc2VjdGlvblx0LmZpbmlfYXJyYXksXCJhd1wiLCVmaW5pX2FycmF5IgorCisjdW5kZWYgSU5JVF9TRUNUSU9OX0FTTV9PUAorI3VuZGVmIEZJTklfU0VDVElPTl9BU01fT1AKKyNkZWZpbmUgSU5JVF9BUlJBWV9TRUNUSU9OX0FTTV9PUCBDVE9SU19TRUNUSU9OX0FTTV9PUAorI2RlZmluZSBGSU5JX0FSUkFZX1NFQ1RJT05fQVNNX09QIERUT1JTX1NFQ1RJT05fQVNNX09QCisKKy8qIFNpbmNlIHdlIHVzZSAuaW5pdF9hcnJheS8uZmluaV9hcnJheSB3ZSBkb24ndCBuZWVkIHRoZSBtYXJrZXJzIGF0CisgICB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgY3RvcnMvZHRvcnMgYXJyYXlzLiAgKi8KKyNkZWZpbmUgQ1RPUl9MSVNUX0JFR0lOIGFzbSAoQ1RPUlNfU0VDVElPTl9BU01fT1ApCisjZGVmaW5lIENUT1JfTElTVF9FTkQJCS8qIGVtcHR5ICovCisjZGVmaW5lIERUT1JfTElTVF9CRUdJTiBhc20gKERUT1JTX1NFQ1RJT05fQVNNX09QKQorI2RlZmluZSBEVE9SX0xJU1RfRU5ECQkvKiBlbXB0eSAqLworCisjdW5kZWYgVEFSR0VUX0FTTV9DT05TVFJVQ1RPUgorI2RlZmluZSBUQVJHRVRfQVNNX0NPTlNUUlVDVE9SIGFhcmNoNjRfZWxmX2FzbV9jb25zdHJ1Y3RvcgorCisjdW5kZWYgVEFSR0VUX0FTTV9ERVNUUlVDVE9SCisjZGVmaW5lIFRBUkdFVF9BU01fREVTVFJVQ1RPUiBhYXJjaDY0X2VsZl9hc21fZGVzdHJ1Y3RvcgorCisjaWZkZWYgSEFWRV9HQVNfTUFYX1NLSVBfUDJBTElHTgorLyogU3VwcG9ydCBmb3IgLWZhbGlnbi0qIHN3aXRjaGVzLiAgVXNlIC5wMmFsaWduIHRvIGVuc3VyZSB0aGF0IGNvZGUKKyAgIHNlY3Rpb25zIGFyZSBwYWRkZWQgd2l0aCBOT1AgaW5zdHJ1Y3Rpb25zLCByYXRoZXIgdGhhbiB6ZXJvcy4gICovCisjZGVmaW5lIEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04oRklMRSwgTE9HLCBNQVhfU0tJUCkJCVwKKyAgZG8JCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICBpZiAoKExPRykgIT0gMCkJCQkJCQlcCisJewkJCQkJCQlcCisJICBpZiAoKE1BWF9TS0lQKSA9PSAwKQkJCQkJXAorCSAgICBmcHJpbnRmICgoRklMRSksICJcdC5wMmFsaWduICVkXG4iLCAoaW50KSAoTE9HKSk7CVwKKwkgIGVsc2UJCQkJCQkJXAorCSAgICBmcHJpbnRmICgoRklMRSksICJcdC5wMmFsaWduICVkLCwlZFxuIiwJCVwKKwkJICAgICAoaW50KSAoTE9HKSwgKGludCkgKE1BWF9TS0lQKSk7CQlcCisJfQkJCQkJCQlcCisgICAgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIEhBVkVfR0FTX01BWF9TS0lQX1AyQUxJR04gKi8KKworI2RlZmluZSBKVU1QX1RBQkxFU19JTl9URVhUX1NFQ1RJT04gMAorCisjZGVmaW5lIEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVChTVFJFQU0sIEJPRFksIFZBTFVFLCBSRUwpCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgc3dpdGNoIChHRVRfTU9ERSAoQk9EWSkpCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKyAgICAgIGNhc2UgUUltb2RlOgkJCQkJCQlcCisJYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0LmJ5dGVcdCglTEwlZCAtICVMTHJ0eCVkKSAvIDRcbiIsCVwKKwkJICAgICBWQUxVRSwgUkVMKTsJCQkJCVwKKwlicmVhazsJCQkJCQkJCVwKKyAgICAgIGNhc2UgSEltb2RlOgkJCQkJCQlcCisJYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0LjJieXRlXHQoJUxMJWQgLSAlTExydHglZCkgLyA0XG4iLAlcCisJCSAgICAgVkFMVUUsIFJFTCk7CQkJCQlcCisJYnJlYWs7CQkJCQkJCQlcCisgICAgICBjYXNlIFNJbW9kZToJCQkJCQkJXAorICAgICAgY2FzZSBESW1vZGU6IC8qIFNlZSBjb21tZW50IGluIGFhcmNoNjRfb3V0cHV0X2Nhc2VzaS4gICovCQlcCisJYXNtX2ZwcmludGYgKFNUUkVBTSwgIlx0LndvcmRcdCglTEwlZCAtICVMTHJ0eCVkKSAvIDRcbiIsCVwKKwkJICAgICBWQUxVRSwgUkVMKTsJCQkJCVwKKwlicmVhazsJCQkJCQkJCVwKKyAgICAgIGRlZmF1bHQ6CQkJCQkJCQlcCisJZ2NjX3VucmVhY2hhYmxlICgpOwkJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQVNNX09VVFBVVF9BTElHTihTVFJFQU0sIFBPV0VSKQkJXAorICBmcHJpbnRmKFNUUkVBTSwgIlx0LmFsaWduXHQlZFxuIiwgKGludClQT1dFUikKKworI2RlZmluZSBBU01fQ09NTUVOVF9TVEFSVCAiLy8iCisKKyNkZWZpbmUgTE9DQUxfTEFCRUxfUFJFRklYCSIuIgorI2RlZmluZSBVU0VSX0xBQkVMX1BSRUZJWAkiIgorCisjZGVmaW5lIEdMT0JBTF9BU01fT1AgIlx0Lmdsb2JhbFx0IgorCisjaWZuZGVmIEFTTV9TUEVDCisjZGVmaW5lIEFTTV9TUEVDICJcCisle21iaWctZW5kaWFuOi1FQn0gXAorJXttbGl0dGxlLWVuZGlhbjotRUx9IFwKKyV7bWNwdT0qOi1tY3B1PSUqfSBcCisle21hcmNoPSo6LW1hcmNoPSUqfSIKKyNlbmRpZgorCisjdW5kZWYgVFlQRV9PUEVSQU5EX0ZNVAorI2RlZmluZSBUWVBFX09QRVJBTkRfRk1UCSIlJSVzIgorCisjdW5kZWYgVEFSR0VUX0FTTV9OQU1FRF9TRUNUSU9OCisjZGVmaW5lIFRBUkdFVF9BU01fTkFNRURfU0VDVElPTiAgYWFyY2g2NF9lbGZfYXNtX25hbWVkX3NlY3Rpb24KKworLyogU3RhYnMgZGVidWcgbm90IHJlcXVpcmVkLiAgKi8KKyN1bmRlZiBEQlhfREVCVUdHSU5HX0lORk8KKworI2VuZGlmIC8qIEdDQ19BQVJDSDY0X0VMRl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1vcHRzLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1vcHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlMTA1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYWFyY2g2NC9hYXJjaDY0LW9wdHMuaApAQCAtMCwwICsxLDY0IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFSTSBMdGQuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91cgorICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBEZWZpbml0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nIGZvciBBQXJjaDY0LiAgKi8KKworI2lmbmRlZiBHQ0NfQUFSQ0g2NF9PUFRTX0gKKyNkZWZpbmUgR0NDX0FBUkNINjRfT1BUU19ICisKKy8qIFRoZSB2YXJpb3VzIGNvcmVzIHRoYXQgaW1wbGVtZW50IEFBcmNoNjQuICAqLworZW51bSBhYXJjaDY0X3Byb2Nlc3NvcgoreworI2RlZmluZSBBQVJDSDY0X0NPUkUoTkFNRSwgSURFTlQsIEFSQ0gsIEZMQUdTLCBDT1NUUykgXAorICBJREVOVCwKKyNpbmNsdWRlICJhYXJjaDY0LWNvcmVzLmRlZiIKKyN1bmRlZiBBQVJDSDY0X0NPUkUKKyAgLyogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IG5vIHByb2Nlc3NvciBoYXMgYmVlbiBzcGVjaWZpZWQuICAqLworICBnZW5lcmljLAorICAvKiBVc2VkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgcHJvY2Vzc29yIHRhYmxlLiAgKi8KKyAgYWFyY2g2NF9ub25lCit9OworCisvKiBUTFMgdHlwZXMuICAqLworZW51bSBhYXJjaDY0X3Rsc190eXBlIHsKKyAgVExTX1RSQURJVElPTkFMLAorICBUTFNfREVTQ1JJUFRPUlMKK307CisKKy8qIFRoZSBjb2RlIG1vZGVsIGRlZmluZXMgdGhlIGFkZHJlc3MgZ2VuZXJhdGlvbiBzdHJhdGVneS4KKyAgIE1vc3QgaGF2ZSBhIFBJQyBhbmQgbm9uLVBJQyB2YXJpYW50LiAgKi8KK2VudW0gYWFyY2g2NF9jb2RlX21vZGVsIHsKKyAgLyogU3RhdGljIGNvZGUgYW5kIGRhdGEgZml0IHdpdGhpbiBhIDFNQiByZWdpb24uCisgICAgIE5vdCBmdWxseSBpbXBsZW1lbnRlZCwgbW9zdGx5IHRyZWF0ZWQgYXMgU01BTEwuICAqLworICBBQVJDSDY0X0NNT0RFTF9USU5ZLAorICAvKiBTdGF0aWMgY29kZSwgZGF0YSBhbmQgR09UL1BMVCBmaXQgd2l0aGluIGEgMU1CIHJlZ2lvbi4KKyAgICAgTm90IGZ1bGx5IGltcGxlbWVudGVkLCBtb3N0bHkgdHJlYXRlZCBhcyBTTUFMTF9QSUMuICAqLworICBBQVJDSDY0X0NNT0RFTF9USU5ZX1BJQywKKyAgLyogU3RhdGljIGNvZGUgYW5kIGRhdGEgZml0IHdpdGhpbiBhIDRHQiByZWdpb24uCisgICAgIFRoZSBkZWZhdWx0IG5vbi1QSUMgY29kZSBtb2RlbC4gICovCisgIEFBUkNINjRfQ01PREVMX1NNQUxMLAorICAvKiBTdGF0aWMgY29kZSwgZGF0YSBhbmQgR09UL1BMVCBmaXQgd2l0aGluIGEgNEdCIHJlZ2lvbi4KKyAgICAgVGhlIGRlZmF1bHQgUElDIGNvZGUgbW9kZWwuICAqLworICBBQVJDSDY0X0NNT0RFTF9TTUFMTF9QSUMsCisgIC8qIE5vIGFzc3VtcHRpb25zIGFib3V0IGFkZHJlc3NlcyBvZiBjb2RlIGFuZCBkYXRhLgorICAgICBUaGUgUElDIHZhcmlhbnQgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4gICovCisgIEFBUkNINjRfQ01PREVMX0xBUkdFCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5MDQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oCkBAIC0wLDAgKzEsMzA1IEBACisvKiBNYWNoaW5lIGRlc2NyaXB0aW9uIGZvciBBQXJjaDY0IGFyY2hpdGVjdHVyZS4KKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQVJNIEx0ZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2lmbmRlZiBHQ0NfQUFSQ0g2NF9QUk9UT1NfSAorI2RlZmluZSBHQ0NfQUFSQ0g2NF9QUk9UT1NfSAorCisvKgorICBTWU1CT0xfQ09OVEVYVF9BRFIKKyAgVGhlIHN5bWJvbCBpcyB1c2VkIGluIGEgbG9hZC1hZGRyZXNzIG9wZXJhdGlvbi4KKyAgU1lNQk9MX0NPTlRFWFRfTUVNCisgIFRoZSBzeW1ib2wgaXMgdXNlZCBhcyB0aGUgYWRkcmVzcyBpbiBhIE1FTS4KKyAqLworZW51bSBhYXJjaDY0X3N5bWJvbF9jb250ZXh0Cit7CisgIFNZTUJPTF9DT05URVhUX01FTSwKKyAgU1lNQk9MX0NPTlRFWFRfQURSCit9OworCisvKiBTWU1CT0xfU01BTExfQUJTT0xVVEU6IEdlbmVyYXRlIHN5bWJvbCBhY2Nlc3NlcyB0aHJvdWdoCisgICBoaWdoIGFuZCBsbyByZWxvY3MgdGhhdCBjYWxjdWxhdGUgdGhlIGJhc2UgYWRkcmVzcyB1c2luZyBhIFBDCisgICByZWxhdGl2ZSByZWxvYy4KKyAgIFNvIHRvIGdldCB0aGUgYWRkcmVzcyBvZiBmb28sIHdlIGdlbmVyYXRlCisgICBhZHJwIHgwLCBmb28KKyAgIGFkZCAgeDAsIHgwLCA6bG8xMjpmb28KKworICAgVG8gbG9hZCBvciBzdG9yZSBzb21ldGhpbmcgdG8gZm9vLCB3ZSBjb3VsZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcKKyAgIGxvYWQgc3RvcmUgdmFyaWFudHMgdGhhdCBnZW5lcmF0ZSBhbgorICAgbGRyIHgwLCBbeDAsOmxvMTI6Zm9vXQorICAgb3IKKyAgIHN0ciB4MSwgW3gwLCA6bG8xMjpmb29dCisKKyAgIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIHNtYWxsIGNvZGUgbW9kZWwgb2YgdGhlIGNvbXBpbGVyLgorCisgICBTWU1CT0xfU01BTExfR09UOiBTaW1pbGFyIHRvIHRoZSBvbmUgYWJvdmUgYnV0IHRoaXMKKyAgIGdpdmVzIHVzIHRoZSBHT1QgZW50cnkgb2YgdGhlIHN5bWJvbCBiZWluZyByZWZlcnJlZCB0byA6CisgICBUaHVzIGNhbGN1bGF0aW5nIHRoZSBHT1QgZW50cnkgZm9yIGZvbyBpcyBkb25lIHVzaW5nIHRoZQorICAgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucy4gIFRoZSBBRFJQIGluc3RydWN0aW9uCisgICBnZXRzIHVzIHRvIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIEdPVCBlbnRyeSBvZiB0aGUgc3ltYm9sCisgICBhbmQgdGhlIGdvdF9sbzEyIGdldHMgdXMgdGhlIGFjdHVhbCBvZmZzZXQgaW4gaXQuCisKKyAgIGFkcnAgIHgwLCA6Z290OmZvbworICAgbGRyICAgeDAsIFt4MCwgOmdvdG9mZl9sbzEyOmZvb10KKworICAgVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgc21hbGwgUElDIG1vZGVsIG9mIHRoZSBjb21waWxlci4KKworICAgU1lNQk9MX1NNQUxMX1RMU0dECisgICBTWU1CT0xfU01BTExfVExTREVTQworICAgU1lNQk9MX1NNQUxMX0dPVFRQUkVMCisgICBTWU1CT0xfU01BTExfVFBSRUwKKyAgIEVhY2ggb2Ygb2YgdGhlc2UgcmVwcmVzZW50cyBhIHRocmVhZC1sb2NhbCBzeW1ib2wsIGFuZCBjb3JyZXNwb25kcyB0byB0aGUKKyAgIHRocmVhZCBsb2NhbCBzdG9yYWdlIHJlbG9jYXRpb24gb3BlcmF0b3IgZm9yIHRoZSBzeW1ib2wgYmVpbmcgcmVmZXJyZWQgdG8uCisKKyAgIFNZTUJPTF9USU5ZX0FCU09MVVRFCisKKyAgIEdlbmVyYXRlIHN5bWJvbCBhY2Nlc3NlcyBhcyBhIFBDIHJlbGF0aXZlIGFkZHJlc3MgdXNpbmcgYSBzaW5nbGUKKyAgIGluc3RydWN0aW9uLiAgVG8gY29tcHV0ZSB0aGUgYWRkcmVzcyBvZiBzeW1ib2wgZm9vLCB3ZSBnZW5lcmF0ZToKKworICAgQURSIHgwLCBmb28KKworICAgU1lNQk9MX1RJTllfR09UCisKKyAgIEdlbmVyYXRlIHN5bWJvbCBhY2Nlc3NlcyB2aWEgdGhlIEdPVCB1c2luZyBhIHNpbmdsZSBQQyByZWxhdGl2ZQorICAgaW5zdHJ1Y3Rpb24uICBUbyBjb21wdXRlIHRoZSBhZGRyZXNzIG9mIHN5bWJvbCBmb28sIHdlIGdlbmVyYXRlOgorCisgICBsZHIgdDAsIDpnb3Q6Zm9vCisKKyAgIFRoZSB2YWx1ZSBvZiBmb28gY2FuIHN1YnNlcXVlbnRseSByZWFkIHVzaW5nOgorCisgICBsZHJiICAgIHQwLCBbdDBdCisKKyAgIFNZTUJPTF9GT1JDRV9UT19NRU0gOiBHbG9iYWwgdmFyaWFibGVzIGFyZSBhZGRyZXNzZWQgdXNpbmcKKyAgIGNvbnN0YW50IHBvb2wuICBBbGwgdmFyaWFibGUgYWRkcmVzc2VzIGFyZSBzcGlsbGVkIGludG8gY29uc3RhbnQKKyAgIHBvb2xzLiAgVGhlIGNvbnN0YW50IHBvb2xzIHRoZW1zZWx2ZXMgYXJlIGFkZHJlc3NlZCB1c2luZyBQQworICAgcmVsYXRpdmUgYWNjZXNzZXMuICBUaGlzIG9ubHkgd29ya3MgZm9yIHRoZSBsYXJnZSBjb2RlIG1vZGVsLgorICovCitlbnVtIGFhcmNoNjRfc3ltYm9sX3R5cGUKK3sKKyAgU1lNQk9MX1NNQUxMX0FCU09MVVRFLAorICBTWU1CT0xfU01BTExfR09ULAorICBTWU1CT0xfU01BTExfVExTR0QsCisgIFNZTUJPTF9TTUFMTF9UTFNERVNDLAorICBTWU1CT0xfU01BTExfR09UVFBSRUwsCisgIFNZTUJPTF9TTUFMTF9UUFJFTCwKKyAgU1lNQk9MX1RJTllfQUJTT0xVVEUsCisgIFNZTUJPTF9USU5ZX0dPVCwKKyAgU1lNQk9MX0ZPUkNFX1RPX01FTQorfTsKKworLyogQSBzZXQgb2YgdHVuaW5nIHBhcmFtZXRlcnMgY29udGFpbnMgcmVmZXJlbmNlcyB0byBzaXplIGFuZCB0aW1lCisgICBjb3N0IG1vZGVscyBhbmQgdmVjdG9ycyBmb3IgYWRkcmVzcyBjb3N0IGNhbGN1bGF0aW9ucywgcmVnaXN0ZXIKKyAgIG1vdmUgY29zdHMgYW5kIG1lbW9yeSBtb3ZlIGNvc3RzLiAgKi8KKworLyogRXh0cmEgY29zdHMgZm9yIHNwZWNpZmljIGluc25zLiAgT25seSByZWNvcmRzIHRoZSBjb3N0IGFib3ZlIGEKKyAgIHNpbmdsZSBpbnNuLiAgKi8KKworc3RydWN0IGNwdV9ydHhfY29zdF90YWJsZQoreworICBjb25zdCBpbnQgbWVtb3J5X2xvYWQ7CisgIGNvbnN0IGludCBtZW1vcnlfc3RvcmU7CisgIGNvbnN0IGludCByZWdpc3Rlcl9zaGlmdDsKKyAgY29uc3QgaW50IGludF9kaXZpZGU7CisgIGNvbnN0IGludCBmbG9hdF9kaXZpZGU7CisgIGNvbnN0IGludCBkb3VibGVfZGl2aWRlOworICBjb25zdCBpbnQgaW50X211bHRpcGx5OworICBjb25zdCBpbnQgaW50X211bHRpcGx5X2V4dGVuZDsKKyAgY29uc3QgaW50IGludF9tdWx0aXBseV9hZGQ7CisgIGNvbnN0IGludCBpbnRfbXVsdGlwbHlfZXh0ZW5kX2FkZDsKKyAgY29uc3QgaW50IGZsb2F0X211bHRpcGx5OworICBjb25zdCBpbnQgZG91YmxlX211bHRpcGx5OworfTsKKworLyogQWRkaXRpb25hbCBjb3N0IGZvciBhZGRyZXNzZXMuICAqLworc3RydWN0IGNwdV9hZGRyY29zdF90YWJsZQoreworICBjb25zdCBpbnQgcHJlX21vZGlmeTsKKyAgY29uc3QgaW50IHBvc3RfbW9kaWZ5OworICBjb25zdCBpbnQgcmVnaXN0ZXJfb2Zmc2V0OworICBjb25zdCBpbnQgcmVnaXN0ZXJfZXh0ZW5kOworICBjb25zdCBpbnQgaW1tX29mZnNldDsKK307CisKKy8qIEFkZGl0aW9uYWwgY29zdHMgZm9yIHJlZ2lzdGVyIGNvcGllcy4gIENvc3QgaXMgZm9yIG9uZSByZWdpc3Rlci4gICovCitzdHJ1Y3QgY3B1X3JlZ21vdmVfY29zdAoreworICBjb25zdCBpbnQgR1AyR1A7CisgIGNvbnN0IGludCBHUDJGUDsKKyAgY29uc3QgaW50IEZQMkdQOworICBjb25zdCBpbnQgRlAyRlA7Cit9OworCisvKiBDb3N0IGZvciB2ZWN0b3IgaW5zbiBjbGFzc2VzLiAgKi8KK3N0cnVjdCBjcHVfdmVjdG9yX2Nvc3QKK3sKKyAgY29uc3QgaW50IHNjYWxhcl9zdG10X2Nvc3Q7CQkgLyogQ29zdCBvZiBhbnkgc2NhbGFyIG9wZXJhdGlvbiwKKwkJCQkJICAgIGV4Y2x1ZGluZyBsb2FkIGFuZCBzdG9yZS4gICovCisgIGNvbnN0IGludCBzY2FsYXJfbG9hZF9jb3N0OwkJIC8qIENvc3Qgb2Ygc2NhbGFyIGxvYWQuICAqLworICBjb25zdCBpbnQgc2NhbGFyX3N0b3JlX2Nvc3Q7CQkgLyogQ29zdCBvZiBzY2FsYXIgc3RvcmUuICAqLworICBjb25zdCBpbnQgdmVjX3N0bXRfY29zdDsJCSAvKiBDb3N0IG9mIGFueSB2ZWN0b3Igb3BlcmF0aW9uLAorCQkJCQkgICAgZXhjbHVkaW5nIGxvYWQsIHN0b3JlLAorCQkJCQkgICAgdmVjdG9yLXRvLXNjYWxhciBhbmQKKwkJCQkJICAgIHNjYWxhci10by12ZWN0b3Igb3BlcmF0aW9uLiAgKi8KKyAgY29uc3QgaW50IHZlY190b19zY2FsYXJfY29zdDsJCSAvKiBDb3N0IG9mIHZlYy10by1zY2FsYXIgb3BlcmF0aW9uLiAgKi8KKyAgY29uc3QgaW50IHNjYWxhcl90b192ZWNfY29zdDsJCSAvKiBDb3N0IG9mIHNjYWxhci10by12ZWN0b3IKKwkJCQkJICAgIG9wZXJhdGlvbi4gICovCisgIGNvbnN0IGludCB2ZWNfYWxpZ25fbG9hZF9jb3N0OwkgLyogQ29zdCBvZiBhbGlnbmVkIHZlY3RvciBsb2FkLiAgKi8KKyAgY29uc3QgaW50IHZlY191bmFsaWduX2xvYWRfY29zdDsJIC8qIENvc3Qgb2YgdW5hbGlnbmVkIHZlY3RvciBsb2FkLiAgKi8KKyAgY29uc3QgaW50IHZlY191bmFsaWduX3N0b3JlX2Nvc3Q7CSAvKiBDb3N0IG9mIHVuYWxpZ25lZCB2ZWN0b3Igc3RvcmUuICAqLworICBjb25zdCBpbnQgdmVjX3N0b3JlX2Nvc3Q7CQkgLyogQ29zdCBvZiB2ZWN0b3Igc3RvcmUuICAqLworICBjb25zdCBpbnQgY29uZF90YWtlbl9icmFuY2hfY29zdDsJIC8qIENvc3Qgb2YgdGFrZW4gYnJhbmNoLiAgKi8KKyAgY29uc3QgaW50IGNvbmRfbm90X3Rha2VuX2JyYW5jaF9jb3N0OyAgLyogQ29zdCBvZiBub3QgdGFrZW4gYnJhbmNoLiAgKi8KK307CisKK3N0cnVjdCB0dW5lX3BhcmFtcworeworICBjb25zdCBzdHJ1Y3QgY3B1X3J0eF9jb3N0X3RhYmxlICpjb25zdCBpbnNuX2V4dHJhX2Nvc3Q7CisgIGNvbnN0IHN0cnVjdCBjcHVfYWRkcmNvc3RfdGFibGUgKmNvbnN0IGFkZHJfY29zdDsKKyAgY29uc3Qgc3RydWN0IGNwdV9yZWdtb3ZlX2Nvc3QgKmNvbnN0IHJlZ21vdmVfY29zdDsKKyAgY29uc3Qgc3RydWN0IGNwdV92ZWN0b3JfY29zdCAqY29uc3QgdmVjX2Nvc3RzOworICBjb25zdCBpbnQgbWVtbW92X2Nvc3Q7Cit9OworCitIT1NUX1dJREVfSU5UIGFhcmNoNjRfaW5pdGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKHVuc2lnbmVkLCB1bnNpZ25lZCk7Citib29sIGFhcmNoNjRfYml0bWFza19pbW0gKEhPU1RfV0lERV9JTlQgdmFsLCBlbnVtIG1hY2hpbmVfbW9kZSk7CitlbnVtIGFhcmNoNjRfc3ltYm9sX3R5cGUKK2FhcmNoNjRfY2xhc3NpZnlfc3ltYm9saWNfZXhwcmVzc2lvbiAocnR4LCBlbnVtIGFhcmNoNjRfc3ltYm9sX2NvbnRleHQpOworYm9vbCBhYXJjaDY0X2NvbnN0YW50X2FkZHJlc3NfcCAocnR4KTsKK2Jvb2wgYWFyY2g2NF9mbG9hdF9jb25zdF96ZXJvX3J0eF9wIChydHgpOworYm9vbCBhYXJjaDY0X2Z1bmN0aW9uX2FyZ19yZWdub19wICh1bnNpZ25lZCk7Citib29sIGFhcmNoNjRfZ2VuX21vdm1lbXFpIChydHggKik7Citib29sIGFhcmNoNjRfZ2ltcGxlX2ZvbGRfYnVpbHRpbiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKik7Citib29sIGFhcmNoNjRfaXNfZXh0ZW5kX2Zyb21fZXh0cmFjdCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4KTsKK2Jvb2wgYWFyY2g2NF9pc19sb25nX2NhbGxfcCAocnR4KTsKK2Jvb2wgYWFyY2g2NF9sYWJlbF9tZW50aW9uZWRfcCAocnR4KTsKK2Jvb2wgYWFyY2g2NF9sZWdpdGltYXRlX3BpY19vcGVyYW5kX3AgKHJ0eCk7Citib29sIGFhcmNoNjRfbW92ZV9pbW0gKEhPU1RfV0lERV9JTlQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2Jvb2wgYWFyY2g2NF9tb3Zfb3BlcmFuZF9wIChydHgsIGVudW0gYWFyY2g2NF9zeW1ib2xfY29udGV4dCwKKwkJCSAgICBlbnVtIG1hY2hpbmVfbW9kZSk7CitjaGFyICphYXJjaDY0X291dHB1dF9zY2FsYXJfc2ltZF9tb3ZfaW1tZWRpYXRlIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2NoYXIgKmFhcmNoNjRfb3V0cHV0X3NpbWRfbW92X2ltbWVkaWF0ZSAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgdW5zaWduZWQpOworYm9vbCBhYXJjaDY0X3BhZF9hcmdfdXB3YXJkIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfdHJlZSk7Citib29sIGFhcmNoNjRfcGFkX3JlZ191cHdhcmQgKGVudW0gbWFjaGluZV9tb2RlLCBjb25zdF90cmVlLCBib29sKTsKK2Jvb2wgYWFyY2g2NF9yZWdub19va19mb3JfYmFzZV9wIChpbnQsIGJvb2wpOworYm9vbCBhYXJjaDY0X3JlZ25vX29rX2Zvcl9pbmRleF9wIChpbnQsIGJvb2wpOworYm9vbCBhYXJjaDY0X3NpbWRfaW1tX3NjYWxhcl9wIChydHggeCwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSk7Citib29sIGFhcmNoNjRfc2ltZF9pbW1femVyb19wIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2Jvb2wgYWFyY2g2NF9zaW1kX3NjYWxhcl9pbW1lZGlhdGVfdmFsaWRfZm9yX21vdmUgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworYm9vbCBhYXJjaDY0X3NpbWRfc2hpZnRfaW1tX3AgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGJvb2wpOworYm9vbCBhYXJjaDY0X3NpbWRfdmFsaWRfaW1tZWRpYXRlIChydHgsIGVudW0gbWFjaGluZV9tb2RlLCBib29sLAorCQkJCSAgIHN0cnVjdCBzaW1kX2ltbWVkaWF0ZV9pbmZvICopOworYm9vbCBhYXJjaDY0X3N5bWJvbGljX2FkZHJlc3NfcCAocnR4KTsKK2Jvb2wgYWFyY2g2NF91aW1tMTJfc2hpZnQgKEhPU1RfV0lERV9JTlQpOworY29uc3QgY2hhciAqYWFyY2g2NF9vdXRwdXRfY2FzZXNpIChydHggKik7CitlbnVtIGFhcmNoNjRfc3ltYm9sX3R5cGUgYWFyY2g2NF9jbGFzc2lmeV9zeW1ib2wgKHJ0eCwKKwkJCQkJCSAgZW51bSBhYXJjaDY0X3N5bWJvbF9jb250ZXh0KTsKK2VudW0gYWFyY2g2NF9zeW1ib2xfdHlwZSBhYXJjaDY0X2NsYXNzaWZ5X3Rsc19zeW1ib2wgKHJ0eCk7CitlbnVtIHJlZ19jbGFzcyBhYXJjaDY0X3JlZ25vX3JlZ2NsYXNzICh1bnNpZ25lZCk7CitpbnQgYWFyY2g2NF9hc21fcHJlZmVycmVkX2VoX2RhdGFfZm9ybWF0IChpbnQsIGludCk7CitpbnQgYWFyY2g2NF9oYXJkX3JlZ25vX21vZGVfb2sgKHVuc2lnbmVkLCBlbnVtIG1hY2hpbmVfbW9kZSk7CitpbnQgYWFyY2g2NF9oYXJkX3JlZ25vX25yZWdzICh1bnNpZ25lZCwgZW51bSBtYWNoaW5lX21vZGUpOworaW50IGFhcmNoNjRfc2ltZF9hdHRyX2xlbmd0aF9tb3ZlIChydHgpOworaW50IGFhcmNoNjRfdXh0X3NpemUgKGludCwgSE9TVF9XSURFX0lOVCk7CitydHggYWFyY2g2NF9maW5hbF9laF9yZXR1cm5fYWRkciAodm9pZCk7CitydHggYWFyY2g2NF9sZWdpdGltaXplX3JlbG9hZF9hZGRyZXNzIChydHggKiwgZW51bSBtYWNoaW5lX21vZGUsIGludCwgaW50LCBpbnQpOworY29uc3QgY2hhciAqYWFyY2g2NF9vdXRwdXRfbW92ZV9zdHJ1Y3QgKHJ0eCAqb3BlcmFuZHMpOworcnR4IGFhcmNoNjRfcmV0dXJuX2FkZHIgKGludCwgcnR4KTsKK3J0eCBhYXJjaDY0X3NpbWRfZ2VuX2NvbnN0X3ZlY3Rvcl9kdXAgKGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOworYm9vbCBhYXJjaDY0X3NpbWRfbWVtX29wZXJhbmRfcCAocnR4KTsKK3J0eCBhYXJjaDY0X3NpbWRfdmVjdF9wYXJfY25zdF9oYWxmIChlbnVtIG1hY2hpbmVfbW9kZSwgYm9vbCk7CitydHggYWFyY2g2NF90bHNfZ2V0X2FkZHIgKHZvaWQpOwordHJlZSBhYXJjaDY0X2ZvbGRfYnVpbHRpbiAodHJlZSwgaW50LCB0cmVlICosIGJvb2wpOwordW5zaWduZWQgYWFyY2g2NF9kYnhfcmVnaXN0ZXJfbnVtYmVyICh1bnNpZ25lZCk7Cit1bnNpZ25lZCBhYXJjaDY0X3RyYW1wb2xpbmVfc2l6ZSAodm9pZCk7Cit2b2lkIGFhcmNoNjRfYXNtX291dHB1dF9sYWJlbHJlZiAoRklMRSAqLCBjb25zdCBjaGFyICopOwordm9pZCBhYXJjaDY0X2VsZl9hc21fbmFtZWRfc2VjdGlvbiAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgdHJlZSk7Cit2b2lkIGFhcmNoNjRfZXhwYW5kX2VwaWxvZ3VlIChib29sKTsKK3ZvaWQgYWFyY2g2NF9leHBhbmRfbW92X2ltbWVkaWF0ZSAocnR4LCBydHgpOwordm9pZCBhYXJjaDY0X2V4cGFuZF9wcm9sb2d1ZSAodm9pZCk7Cit2b2lkIGFhcmNoNjRfZXhwYW5kX3ZlY3Rvcl9pbml0IChydHgsIHJ0eCk7Cit2b2lkIGFhcmNoNjRfZnVuY3Rpb25fcHJvZmlsZXIgKEZJTEUgKiwgaW50KTsKK3ZvaWQgYWFyY2g2NF9pbml0X2N1bXVsYXRpdmVfYXJncyAoQ1VNVUxBVElWRV9BUkdTICosIGNvbnN0X3RyZWUsIHJ0eCwKKwkJCQkgICBjb25zdF90cmVlLCB1bnNpZ25lZCk7Cit2b2lkIGFhcmNoNjRfaW5pdF9leHBhbmRlcnMgKHZvaWQpOwordm9pZCBhYXJjaDY0X3ByaW50X29wZXJhbmQgKEZJTEUgKiwgcnR4LCBjaGFyKTsKK3ZvaWQgYWFyY2g2NF9wcmludF9vcGVyYW5kX2FkZHJlc3MgKEZJTEUgKiwgcnR4KTsKKworLyogSW5pdGlhbGl6ZSBidWlsdGlucyBmb3IgU0lNRCBpbnRyaW5zaWNzLiAgKi8KK3ZvaWQgaW5pdF9hYXJjaDY0X3NpbWRfYnVpbHRpbnMgKHZvaWQpOworCit2b2lkIGFhcmNoNjRfc2ltZF9jb25zdF9ib3VuZHMgKHJ0eCwgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCk7Cit2b2lkIGFhcmNoNjRfc2ltZF9kaXNhbWJpZ3VhdGVfY29weSAocnR4ICosIHJ0eCAqLCBydHggKiwgdW5zaWduZWQgaW50KTsKKworLyogRW1pdCBjb2RlIHRvIHBsYWNlIGEgQWR2U0lNRCBwYWlyIHJlc3VsdCBpbiBtZW1vcnkgbG9jYXRpb25zICh3aXRoIGVxdWFsCisgICByZWdpc3RlcnMpLiAgKi8KK3ZvaWQgYWFyY2g2NF9zaW1kX2VtaXRfcGFpcl9yZXN1bHRfaW5zbiAoZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSBydHggKCppbnRmbikgKHJ0eCwgcnR4LCBydHgpLCBydHgsCisJCQkJCSBydHgpOworCisvKiBFeHBhbmQgYnVpbHRpbnMgZm9yIFNJTUQgaW50cmluc2ljcy4gICovCitydHggYWFyY2g2NF9zaW1kX2V4cGFuZF9idWlsdGluIChpbnQsIHRyZWUsIHJ0eCk7CisKK3ZvaWQgYWFyY2g2NF9zaW1kX2xhbmVfYm91bmRzIChydHgsIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQpOworCisvKiBFbWl0IGNvZGUgZm9yIHJlaW50ZXJwcmV0cy4gICovCit2b2lkIGFhcmNoNjRfc2ltZF9yZWludGVycHJldCAocnR4LCBydHgpOworCit2b2lkIGFhcmNoNjRfc3BsaXRfMTI4Yml0X21vdmUgKHJ0eCwgcnR4KTsKKworYm9vbCBhYXJjaDY0X3NwbGl0XzEyOGJpdF9tb3ZlX3AgKHJ0eCwgcnR4KTsKKwordm9pZCBhYXJjaDY0X3NwbGl0X3NpbWRfY29tYmluZSAocnR4LCBydHgsIHJ0eCk7CisKK3ZvaWQgYWFyY2g2NF9zcGxpdF9zaW1kX21vdmUgKHJ0eCwgcnR4KTsKKworLyogQ2hlY2sgZm9yIGEgbGVnaXRpbWF0ZSBmbG9hdGluZyBwb2ludCBjb25zdGFudCBmb3IgRk1PVi4gICovCitib29sIGFhcmNoNjRfZmxvYXRfY29uc3RfcmVwcmVzZW50YWJsZV9wIChydHgpOworCisjaWYgZGVmaW5lZCAoUlRYX0NPREUpCisKK2Jvb2wgYWFyY2g2NF9sZWdpdGltYXRlX2FkZHJlc3NfcCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgUlRYX0NPREUsIGJvb2wpOworZW51bSBtYWNoaW5lX21vZGUgYWFyY2g2NF9zZWxlY3RfY2NfbW9kZSAoUlRYX0NPREUsIHJ0eCwgcnR4KTsKK3J0eCBhYXJjaDY0X2dlbl9jb21wYXJlX3JlZyAoUlRYX0NPREUsIHJ0eCwgcnR4KTsKK3J0eCBhYXJjaDY0X2xvYWRfdHAgKHJ0eCk7CisKK3ZvaWQgYWFyY2g2NF9leHBhbmRfY29tcGFyZV9hbmRfc3dhcCAocnR4IG9wW10pOwordm9pZCBhYXJjaDY0X3NwbGl0X2NvbXBhcmVfYW5kX3N3YXAgKHJ0eCBvcFtdKTsKK3ZvaWQgYWFyY2g2NF9zcGxpdF9hdG9taWNfb3AgKGVudW0gcnR4X2NvZGUsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworCisjZW5kaWYgLyogUlRYX0NPREUgKi8KKwordm9pZCBhYXJjaDY0X2luaXRfYnVpbHRpbnMgKHZvaWQpOworcnR4IGFhcmNoNjRfZXhwYW5kX2J1aWx0aW4gKHRyZWUgZXhwLAorCQkJICAgIHJ0eCB0YXJnZXQsCisJCQkgICAgcnR4IHN1YnRhcmdldCBBVFRSSUJVVEVfVU5VU0VELAorCQkJICAgIGVudW0gbWFjaGluZV9tb2RlIG1vZGUgQVRUUklCVVRFX1VOVVNFRCwKKwkJCSAgICBpbnQgaWdub3JlIEFUVFJJQlVURV9VTlVTRUQpOwordHJlZSBhYXJjaDY0X2J1aWx0aW5fZGVjbCAodW5zaWduZWQsIGJvb2wgQVRUUklCVVRFX1VOVVNFRCk7CisKK3RyZWUKK2FhcmNoNjRfYnVpbHRpbl92ZWN0b3JpemVkX2Z1bmN0aW9uICh0cmVlIGZuZGVjbCwKKwkJCQkgICAgIHRyZWUgdHlwZV9vdXQsCisJCQkJICAgICB0cmVlIHR5cGVfaW4pOworCitleHRlcm4gdm9pZCBhYXJjaDY0X3NwbGl0X2NvbWJpbmV2MTZxaSAocnR4IG9wZXJhbmRzWzNdKTsKK2V4dGVybiB2b2lkIGFhcmNoNjRfZXhwYW5kX3ZlY19wZXJtIChydHggdGFyZ2V0LCBydHggb3AwLCBydHggb3AxLCBydHggc2VsKTsKK2V4dGVybiBib29sCithYXJjaDY0X2V4cGFuZF92ZWNfcGVybV9jb25zdCAocnR4IHRhcmdldCwgcnR4IG9wMCwgcnR4IG9wMSwgcnR4IHNlbCk7CisjZW5kaWYgLyogR0NDX0FBUkNINjRfUFJPVE9TX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOGEwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oCkBAIC0wLDAgKzEsODI2IEBACisvKiBNYWNoaW5lIGRlc2NyaXB0aW9uIGZvciBBQXJjaDY0IGFyY2hpdGVjdHVyZS4KKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQVJNIEx0ZC4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2lmbmRlZiBHQ0NfQUFSQ0g2NF9ICisjZGVmaW5lIEdDQ19BQVJDSDY0X0gKKworLyogVGFyZ2V0IENQVSBidWlsdGlucy4gICovCisjZGVmaW5lIFRBUkdFVF9DUFVfQ1BQX0JVSUxUSU5TKCkJCQlcCisgIGRvCQkJCQkJCVwKKyAgICB7CQkJCQkJCVwKKyAgICAgIGJ1aWx0aW5fZGVmaW5lICgiX19hYXJjaDY0X18iKTsJCQlcCisgICAgICBpZiAoVEFSR0VUX0JJR19FTkQpCQkJCVwKKwlidWlsdGluX2RlZmluZSAoIl9fQUFSQ0g2NEVCX18iKTsJCVwKKyAgICAgIGVsc2UJCQkJCQlcCisJYnVpbHRpbl9kZWZpbmUgKCJfX0FBUkNINjRFTF9fIik7CQlcCisJCQkJCQkJXAorICAgICAgc3dpdGNoIChhYXJjaDY0X2Ntb2RlbCkJCQkJXAorCXsJCQkJCQlcCisJICBjYXNlIEFBUkNINjRfQ01PREVMX1RJTlk6CQkJXAorCSAgY2FzZSBBQVJDSDY0X0NNT0RFTF9USU5ZX1BJQzoJCQlcCisJICAgIGJ1aWx0aW5fZGVmaW5lICgiX19BQVJDSDY0X0NNT0RFTF9USU5ZX18iKTsJXAorCSAgICBicmVhazsJCQkJCVwKKwkgIGNhc2UgQUFSQ0g2NF9DTU9ERUxfU01BTEw6CQkJXAorCSAgY2FzZSBBQVJDSDY0X0NNT0RFTF9TTUFMTF9QSUM6CQlcCisJICAgIGJ1aWx0aW5fZGVmaW5lICgiX19BQVJDSDY0X0NNT0RFTF9TTUFMTF9fIik7XAorCSAgICBicmVhazsJCQkJCVwKKwkgIGNhc2UgQUFSQ0g2NF9DTU9ERUxfTEFSR0U6CQkJXAorCSAgICBidWlsdGluX2RlZmluZSAoIl9fQUFSQ0g2NF9DTU9ERUxfTEFSR0VfXyIpOwlcCisJICAgIGJyZWFrOwkJCQkJXAorCSAgZGVmYXVsdDoJCQkJCVwKKwkgICAgYnJlYWs7CQkJCQlcCisJfQkJCQkJCVwKKwkJCQkJCQlcCisgICAgfSB3aGlsZSAoMCkKKworDAorCisvKiBUYXJnZXQgbWFjaGluZSBzdG9yYWdlIGxheW91dC4gICovCisKKyNkZWZpbmUgUFJPTU9URV9NT0RFKE1PREUsIFVOU0lHTkVEUCwgVFlQRSkJXAorICBpZiAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfSU5UCQlcCisgICAgICAmJiBHRVRfTU9ERV9TSVpFIChNT0RFKSA8IDQpCQlcCisgICAgewkJCQkJCVwKKyAgICAgIGlmIChNT0RFID09IFFJbW9kZSB8fCBNT0RFID09IEhJbW9kZSkJXAorCXsJCQkJCVwKKwkgIE1PREUgPSBTSW1vZGU7CQkJXAorCX0JCQkJCVwKKyAgICB9CisKKy8qIEJpdHMgYXJlIGFsd2F5cyBudW1iZXJlZCBmcm9tIHRoZSBMU0JpdC4gICovCisjZGVmaW5lIEJJVFNfQklHX0VORElBTiAwCisKKy8qIEJpZy9saXR0bGUtZW5kaWFuIGZsYXZvdXIuICAqLworI2RlZmluZSBCWVRFU19CSUdfRU5ESUFOIChUQVJHRVRfQklHX0VORCAhPSAwKQorI2RlZmluZSBXT1JEU19CSUdfRU5ESUFOIChCWVRFU19CSUdfRU5ESUFOKQorCisvKiBBZHZTSU1EIGlzIHN1cHBvcnRlZCBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCB1bmxlc3MgZGlzYWJsZWQgYnkKKyAgIC1tZ2VuZXJhbC1yZWdzLW9ubHkuICAqLworI2RlZmluZSBUQVJHRVRfU0lNRCAhVEFSR0VUX0dFTkVSQUxfUkVHU19PTkxZCisjZGVmaW5lIFRBUkdFVF9GTE9BVCAhVEFSR0VUX0dFTkVSQUxfUkVHU19PTkxZCisKKyNkZWZpbmUgVU5JVFNfUEVSX1dPUkQJCTgKKworI2RlZmluZSBVTklUU19QRVJfVlJFRwkJMTYKKworI2RlZmluZSBQQVJNX0JPVU5EQVJZCQk2NAorCisjZGVmaW5lIFNUQUNLX0JPVU5EQVJZCQkxMjgKKworI2RlZmluZSBGVU5DVElPTl9CT1VOREFSWQkzMgorCisjZGVmaW5lIEVNUFRZX0ZJRUxEX0JPVU5EQVJZCTMyCisKKyNkZWZpbmUgQklHR0VTVF9BTElHTk1FTlQJMTI4CisKKyNkZWZpbmUgU0hPUlRfVFlQRV9TSVpFCQkxNgorCisjZGVmaW5lIElOVF9UWVBFX1NJWkUJCTMyCisKKyNkZWZpbmUgTE9OR19UWVBFX1NJWkUJCTY0CS8qIFhYWCBUaGlzIHNob3VsZCBiZSBhbiBvcHRpb24gKi8KKworI2RlZmluZSBMT05HX0xPTkdfVFlQRV9TSVpFCTY0CisKKyNkZWZpbmUgRkxPQVRfVFlQRV9TSVpFCQkzMgorCisjZGVmaW5lIERPVUJMRV9UWVBFX1NJWkUJNjQKKworI2RlZmluZSBMT05HX0RPVUJMRV9UWVBFX1NJWkUJMTI4CisKKy8qIFRoZSBhcmNoaXRlY3R1cmUgcmVzZXJ2ZXMgYWxsIGJpdHMgb2YgdGhlIGFkZHJlc3MgZm9yIGhhcmR3YXJlIHVzZSwKKyAgIHNvIHRoZSB2Yml0IG11c3QgZ28gaW50byB0aGUgZGVsdGEgZmllbGQgb2YgcG9pbnRlcnMgdG8gbWVtYmVyCisgICBmdW5jdGlvbnMuICBUaGlzIGlzIHRoZSBzYW1lIGNvbmZpZyBhcyB0aGF0IGluIHRoZSBBQXJjaDMyCisgICBwb3J0LiAgKi8KKyNkZWZpbmUgVEFSR0VUX1BUUk1FTUZVTkNfVkJJVF9MT0NBVElPTiBwdHJtZW1mdW5jX3ZiaXRfaW5fZGVsdGEKKworLyogTWFrZSBzdHJpbmdzIHdvcmQtYWxpZ25lZCBzbyB0aGF0IHN0cmNweSBmcm9tIGNvbnN0YW50cyB3aWxsIGJlCisgICBmYXN0ZXIuICAqLworI2RlZmluZSBDT05TVEFOVF9BTElHTk1FTlQoRVhQLCBBTElHTikJCVwKKyAgKChUUkVFX0NPREUgKEVYUCkgPT0gU1RSSU5HX0NTVAkJXAorICAgICYmICFvcHRpbWl6ZV9zaXplCQkJCVwKKyAgICAmJiAoQUxJR04pIDwgQklUU19QRVJfV09SRCkJCQlcCisgICA/IEJJVFNfUEVSX1dPUkQgOiBBTElHTikKKworI2RlZmluZSBEQVRBX0FMSUdOTUVOVChFWFAsIEFMSUdOKQkJXAorICAoKCgoQUxJR04pIDwgQklUU19QRVJfV09SRCkJCQlcCisgICAgJiYgKFRSRUVfQ09ERSAoRVhQKSA9PSBBUlJBWV9UWVBFCQlcCisJfHwgVFJFRV9DT0RFIChFWFApID09IFVOSU9OX1RZUEUJXAorCXx8IFRSRUVfQ09ERSAoRVhQKSA9PSBSRUNPUkRfVFlQRSkpCVwKKyAgID8gQklUU19QRVJfV09SRCA6IChBTElHTikpCisKKyNkZWZpbmUgTE9DQUxfQUxJR05NRU5UKEVYUCwgQUxJR04pIERBVEFfQUxJR05NRU5UKEVYUCwgQUxJR04pCisKKyNkZWZpbmUgU1RSVUNUVVJFX1NJWkVfQk9VTkRBUlkJCTgKKworLyogRGVmaW5lZCBieSB0aGUgQUJJICovCisjZGVmaW5lIFdDSEFSX1RZUEUgInVuc2lnbmVkIGludCIKKyNkZWZpbmUgV0NIQVJfVFlQRV9TSVpFCQkJMzIKKworLyogVXNpbmcgbG9uZyBsb25nIGJyZWFrcyAtYW5zaSBhbmQgLXN0ZD1jOTAsIHNvIHRoZXNlIHdpbGwgbmVlZCB0byBiZQorICAgbWFkZSBjb25kaXRpb25hbCBmb3IgYW4gTExQNjQgQUJJLiAgKi8KKworI2RlZmluZSBTSVpFX1RZUEUJImxvbmcgdW5zaWduZWQgaW50IgorCisjZGVmaW5lIFBUUkRJRkZfVFlQRQkibG9uZyBpbnQiCisKKyNkZWZpbmUgUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUwkxCisKKworLyogSW5zdHJ1Y3Rpb24gdHVuaW5nL3NlbGVjdGlvbiBmbGFncy4gICovCisKKy8qIEJpdCB2YWx1ZXMgdXNlZCB0byBpZGVudGlmeSBwcm9jZXNzb3IgY2FwYWJpbGl0aWVzLiAgKi8KKyNkZWZpbmUgQUFSQ0g2NF9GTF9TSU1EICAgICAgICgxIDw8IDApCS8qIEhhcyBTSU1EIGluc3RydWN0aW9ucy4gICovCisjZGVmaW5lIEFBUkNINjRfRkxfRlAgICAgICAgICAoMSA8PCAxKQkvKiBIYXMgRlAuICAqLworI2RlZmluZSBBQVJDSDY0X0ZMX0NSWVBUTyAgICAgKDEgPDwgMikJLyogSGFzIGNyeXB0by4gICovCisjZGVmaW5lIEFBUkNINjRfRkxfU0xPV01VTCAgICAoMSA8PCAzKQkvKiBBIHNsb3cgbXVsdGlwbHkgY29yZS4gICovCisjZGVmaW5lIEFBUkNINjRfRkxfQ1JDICAgICAgICAoMSA8PCA0KQkvKiBIYXMgQ1JDLiAgKi8KKworLyogSGFzIEZQIGFuZCBTSU1ELiAgKi8KKyNkZWZpbmUgQUFSQ0g2NF9GTF9GUFNJTUQgICAgIChBQVJDSDY0X0ZMX0ZQIHwgQUFSQ0g2NF9GTF9TSU1EKQorCisvKiBIYXMgRlAgd2l0aG91dCBTSU1ELiAgKi8KKyNkZWZpbmUgQUFSQ0g2NF9GTF9GUFExNiAgICAgIChBQVJDSDY0X0ZMX0ZQICYgfkFBUkNINjRfRkxfU0lNRCkKKworLyogQXJjaGl0ZWN0dXJlIGZsYWdzIHRoYXQgZWZmZWN0IGluc3RydWN0aW9uIHNlbGVjdGlvbi4gICovCisjZGVmaW5lIEFBUkNINjRfRkxfRk9SX0FSQ0g4ICAgICAgIChBQVJDSDY0X0ZMX0ZQU0lNRCkKKworLyogTWFjcm9zIHRvIHRlc3QgSVNBIGZsYWdzLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGFhcmNoNjRfaXNhX2ZsYWdzOworI2RlZmluZSBBQVJDSDY0X0lTQV9DUkMgICAgICAgICAgICAoYWFyY2g2NF9pc2FfZmxhZ3MgJiBBQVJDSDY0X0ZMX0NSQykKKyNkZWZpbmUgQUFSQ0g2NF9JU0FfQ1JZUFRPICAgICAgICAgKGFhcmNoNjRfaXNhX2ZsYWdzICYgQUFSQ0g2NF9GTF9DUllQVE8pCisjZGVmaW5lIEFBUkNINjRfSVNBX0ZQICAgICAgICAgICAgIChhYXJjaDY0X2lzYV9mbGFncyAmIEFBUkNINjRfRkxfRlApCisjZGVmaW5lIEFBUkNINjRfSVNBX1NJTUQgICAgICAgICAgIChhYXJjaDY0X2lzYV9mbGFncyAmIEFBUkNINjRfRkxfU0lNRCkKKworLyogTWFjcm9zIHRvIHRlc3QgdHVuaW5nIGZsYWdzLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGFhcmNoNjRfdHVuZV9mbGFnczsKKyNkZWZpbmUgQUFSQ0g2NF9UVU5FX1NMT1dNVUwgICAgICAgKGFhcmNoNjRfdHVuZV9mbGFncyAmIEFBUkNINjRfRkxfU0xPV01VTCkKKworCisvKiBTdGFuZGFyZCByZWdpc3RlciB1c2FnZS4gICovCisKKy8qIDMxIDY0LWJpdCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIFIwLVIzMDoKKyAgIFIzMAkJTFIgKGxpbmsgcmVnaXN0ZXIpCisgICBSMjkJCUZQIChmcmFtZSBwb2ludGVyKQorICAgUjE5LVIyOAlDYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzCisgICBSMTgJCVRoZSBwbGF0Zm9ybSByZWdpc3RlcjsgdXNlIGFzIHRlbXBvcmFyeSByZWdpc3Rlci4KKyAgIFIxNwkJSVAxIFRoZSBzZWNvbmQgaW50cmEtcHJvY2VkdXJlLWNhbGwgdGVtcG9yYXJ5IHJlZ2lzdGVyCisJCShjYW4gYmUgdXNlZCBieSBjYWxsIHZlbmVlcnMgYW5kIFBMVCBjb2RlKTsgb3RoZXJ3aXNlIHVzZQorCQlhcyBhIHRlbXBvcmFyeSByZWdpc3RlcgorICAgUjE2CQlJUDAgVGhlIGZpcnN0IGludHJhLXByb2NlZHVyZS1jYWxsIHRlbXBvcmFyeSByZWdpc3RlciAoY2FuCisJCWJlIHVzZWQgYnkgY2FsbCB2ZW5lZXJzIGFuZCBQTFQgY29kZSk7IG90aGVyd2lzZSB1c2UgYXMgYQorCQl0ZW1wb3JhcnkgcmVnaXN0ZXIKKyAgIFI5LVIxNQlUZW1wb3JhcnkgcmVnaXN0ZXJzCisgICBSOAkJU3RydWN0dXJlIHZhbHVlIHBhcmFtZXRlciAvIHRlbXBvcmFyeSByZWdpc3RlcgorICAgUjAtUjcJUGFyYW1ldGVyL3Jlc3VsdCByZWdpc3RlcnMKKworICAgU1AJCXN0YWNrIHBvaW50ZXIsIGVuY29kZWQgYXMgWC9SMzEgd2hlcmUgcGVybWl0dGVkLgorICAgWlIJCXplcm8gcmVnaXN0ZXIsIGVuY29kZWQgYXMgWC9SMzEgZWxzZXdoZXJlCisKKyAgIDMyIHggMTI4LWJpdCBmbG9hdGluZy1wb2ludC92ZWN0b3IgcmVnaXN0ZXJzCisgICBWMTYtVjMxCUNhbGxlci1zYXZlZCAodGVtcG9yYXJ5KSByZWdpc3RlcnMKKyAgIFY4LVYxNQlDYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzCisgICBWMC1WNwlQYXJhbWV0ZXIvcmVzdWx0IHJlZ2lzdGVycworCisgICBUaGUgdmVjdG9yIHJlZ2lzdGVyIFYwIGhvbGRzIHNjYWxhciBCMCwgSDAsIFMwIGFuZCBEMCBpbiBpdHMgbGVhc3QKKyAgIHNpZ25pZmljYW50IGJpdHMuICBVbmxpa2UgQUFyY2gzMiBTMSBpcyBub3QgcGFja2VkIGludG8gRDAsCisgICBldGMuICAqLworCisvKiBOb3RlIHRoYXQgd2UgZG9uJ3QgbWFyayBYMzAgYXMgYSBjYWxsLWNsb2JiZXJlZCByZWdpc3Rlci4gIFRoZSBpZGVhIGlzCisgICB0aGF0IGl0J3MgcmVhbGx5IHRoZSBjYWxsIGluc3RydWN0aW9ucyB0aGVtc2VsdmVzIHdoaWNoIGNsb2JiZXIgWDMwLgorICAgV2UgZG9uJ3QgY2FyZSB3aGF0IHRoZSBjYWxsZWQgZnVuY3Rpb24gZG9lcyB3aXRoIGl0IGFmdGVyd2FyZHMuCisKKyAgIFRoaXMgYXBwcm9hY2ggbWFrZXMgaXQgZWFzaWVyIHRvIGltcGxlbWVudCBzaWJjYWxscy4gIFVubGlrZSBub3JtYWwKKyAgIGNhbGxzLCBzaWJjYWxscyBkb24ndCBjbG9iYmVyIFgzMCwgc28gdGhlIHJlZ2lzdGVyIHJlYWNoZXMgdGhlCisgICBjYWxsZWQgZnVuY3Rpb24gaW50YWN0LiAgRVBJTE9HVUVfVVNFUyBzYXlzIHRoYXQgWDMwIGlzIHVzZWZ1bAorICAgdG8gdGhlIGNhbGxlZCBmdW5jdGlvbi4gICovCisKKyNkZWZpbmUgRklYRURfUkVHSVNURVJTCQkJCQlcCisgIHsJCQkJCQkJXAorICAgIDAsIDAsIDAsIDAsICAgMCwgMCwgMCwgMCwJLyogUjAgLSBSNyAqLwkJXAorICAgIDAsIDAsIDAsIDAsICAgMCwgMCwgMCwgMCwJLyogUjggLSBSMTUgKi8JCVwKKyAgICAwLCAwLCAwLCAwLCAgIDAsIDAsIDAsIDAsCS8qIFIxNiAtIFIyMyAqLwkJXAorICAgIDAsIDAsIDAsIDAsICAgMCwgMSwgMCwgMSwJLyogUjI0IC0gUjMwLCBTUCAqLwlcCisgICAgMCwgMCwgMCwgMCwgICAwLCAwLCAwLCAwLCAgIC8qIFYwIC0gVjcgKi8gICAgICAgICAgIFwKKyAgICAwLCAwLCAwLCAwLCAgIDAsIDAsIDAsIDAsICAgLyogVjggLSBWMTUgKi8JCVwKKyAgICAwLCAwLCAwLCAwLCAgIDAsIDAsIDAsIDAsICAgLyogVjE2IC0gVjIzICovICAgICAgICAgXAorICAgIDAsIDAsIDAsIDAsICAgMCwgMCwgMCwgMCwgICAvKiBWMjQgLSBWMzEgKi8gICAgICAgICBcCisgICAgMSwgMSwgMSwJCQkvKiBTRlAsIEFQLCBDQyAqLwlcCisgIH0KKworI2RlZmluZSBDQUxMX1VTRURfUkVHSVNURVJTCQkJCVwKKyAgewkJCQkJCQlcCisgICAgMSwgMSwgMSwgMSwgICAxLCAxLCAxLCAxLAkvKiBSMCAtIFI3ICovCQlcCisgICAgMSwgMSwgMSwgMSwgICAxLCAxLCAxLCAxLAkvKiBSOCAtIFIxNSAqLwkJXAorICAgIDEsIDEsIDEsIDAsICAgMCwgMCwgMCwgMCwJLyogUjE2IC0gUjIzICovCQlcCisgICAgMCwgMCwgMCwgMCwgICAwLCAxLCAwLCAxLAkvKiBSMjQgLSBSMzAsIFNQICovCVwKKyAgICAxLCAxLCAxLCAxLCAgIDEsIDEsIDEsIDEsCS8qIFYwIC0gVjcgKi8JCVwKKyAgICAwLCAwLCAwLCAwLCAgIDAsIDAsIDAsIDAsCS8qIFY4IC0gVjE1ICovCQlcCisgICAgMSwgMSwgMSwgMSwgICAxLCAxLCAxLCAxLCAgIC8qIFYxNiAtIFYyMyAqLyAgICAgICAgIFwKKyAgICAxLCAxLCAxLCAxLCAgIDEsIDEsIDEsIDEsICAgLyogVjI0IC0gVjMxICovICAgICAgICAgXAorICAgIDEsIDEsIDEsCQkJLyogU0ZQLCBBUCwgQ0MgKi8JXAorICB9CisKKyNkZWZpbmUgUkVHSVNURVJfTkFNRVMJCQkJCQlcCisgIHsJCQkJCQkJCVwKKyAgICAieDAiLCAgIngxIiwgICJ4MiIsICAieDMiLCAgIng0IiwgICJ4NSIsICAieDYiLCAgIng3IiwJXAorICAgICJ4OCIsICAieDkiLCAgIngxMCIsICJ4MTEiLCAieDEyIiwgIngxMyIsICJ4MTQiLCAieDE1IiwJXAorICAgICJ4MTYiLCAieDE3IiwgIngxOCIsICJ4MTkiLCAieDIwIiwgIngyMSIsICJ4MjIiLCAieDIzIiwJXAorICAgICJ4MjQiLCAieDI1IiwgIngyNiIsICJ4MjciLCAieDI4IiwgIngyOSIsICJ4MzAiLCAic3AiLAlcCisgICAgInYwIiwgICJ2MSIsICAidjIiLCAgInYzIiwgICJ2NCIsICAidjUiLCAgInY2IiwgICJ2NyIsCVwKKyAgICAidjgiLCAgInY5IiwgICJ2MTAiLCAidjExIiwgInYxMiIsICJ2MTMiLCAidjE0IiwgInYxNSIsCVwKKyAgICAidjE2IiwgInYxNyIsICJ2MTgiLCAidjE5IiwgInYyMCIsICJ2MjEiLCAidjIyIiwgInYyMyIsCVwKKyAgICAidjI0IiwgInYyNSIsICJ2MjYiLCAidjI3IiwgInYyOCIsICJ2MjkiLCAidjMwIiwgInYzMSIsCVwKKyAgICAic2ZwIiwgImFwIiwgICJjYyIsCQkJCQkJXAorICB9CisKKy8qIEdlbmVyYXRlIHRoZSByZWdpc3RlciBhbGlhc2VzIGZvciBjb3JlIHJlZ2lzdGVyIE4gKi8KKyNkZWZpbmUgUl9BTElBU0VTKE4pIHsiciIgIyBOLCBSMF9SRUdOVU0gKyAoTil9LCBcCisgICAgICAgICAgICAgICAgICAgICB7InciICMgTiwgUjBfUkVHTlVNICsgKE4pfQorCisjZGVmaW5lIFZfQUxJQVNFUyhOKSB7InEiICMgTiwgVjBfUkVHTlVNICsgKE4pfSwgXAorICAgICAgICAgICAgICAgICAgICAgeyJkIiAjIE4sIFYwX1JFR05VTSArIChOKX0sIFwKKyAgICAgICAgICAgICAgICAgICAgIHsicyIgIyBOLCBWMF9SRUdOVU0gKyAoTil9LCBcCisgICAgICAgICAgICAgICAgICAgICB7ImgiICMgTiwgVjBfUkVHTlVNICsgKE4pfSwgXAorICAgICAgICAgICAgICAgICAgICAgeyJiIiAjIE4sIFYwX1JFR05VTSArIChOKX0KKworLyogUHJvdmlkZSBhbGlhc2VzIGZvciBhbGwgb2YgdGhlIElTQSBkZWZpbmVkIHJlZ2lzdGVyIG5hbWUgZm9ybXMuCisgICBUaGVzZSBhbGlhc2VzIGFyZSBjb252ZW5pZW50IGZvciB1c2UgaW4gdGhlIGNsb2JiZXIgbGlzdHMgb2YgaW5saW5lCisgICBhc20gc3RhdGVtZW50cy4gICovCisKKyNkZWZpbmUgQURESVRJT05BTF9SRUdJU1RFUl9OQU1FUyBcCisgIHsgUl9BTElBU0VTKDApLCAgUl9BTElBU0VTKDEpLCAgUl9BTElBU0VTKDIpLCAgUl9BTElBU0VTKDMpLCAgXAorICAgIFJfQUxJQVNFUyg0KSwgIFJfQUxJQVNFUyg1KSwgIFJfQUxJQVNFUyg2KSwgIFJfQUxJQVNFUyg3KSwgIFwKKyAgICBSX0FMSUFTRVMoOCksICBSX0FMSUFTRVMoOSksICBSX0FMSUFTRVMoMTApLCBSX0FMSUFTRVMoMTEpLCBcCisgICAgUl9BTElBU0VTKDEyKSwgUl9BTElBU0VTKDEzKSwgUl9BTElBU0VTKDE0KSwgUl9BTElBU0VTKDE1KSwgXAorICAgIFJfQUxJQVNFUygxNiksIFJfQUxJQVNFUygxNyksIFJfQUxJQVNFUygxOCksIFJfQUxJQVNFUygxOSksIFwKKyAgICBSX0FMSUFTRVMoMjApLCBSX0FMSUFTRVMoMjEpLCBSX0FMSUFTRVMoMjIpLCBSX0FMSUFTRVMoMjMpLCBcCisgICAgUl9BTElBU0VTKDI0KSwgUl9BTElBU0VTKDI1KSwgUl9BTElBU0VTKDI2KSwgUl9BTElBU0VTKDI3KSwgXAorICAgIFJfQUxJQVNFUygyOCksIFJfQUxJQVNFUygyOSksIFJfQUxJQVNFUygzMCksIC8qIDMxIG9taXR0ZWQgICovIFwKKyAgICBWX0FMSUFTRVMoMCksICBWX0FMSUFTRVMoMSksICBWX0FMSUFTRVMoMiksICBWX0FMSUFTRVMoMyksICBcCisgICAgVl9BTElBU0VTKDQpLCAgVl9BTElBU0VTKDUpLCAgVl9BTElBU0VTKDYpLCAgVl9BTElBU0VTKDcpLCAgXAorICAgIFZfQUxJQVNFUyg4KSwgIFZfQUxJQVNFUyg5KSwgIFZfQUxJQVNFUygxMCksIFZfQUxJQVNFUygxMSksIFwKKyAgICBWX0FMSUFTRVMoMTIpLCBWX0FMSUFTRVMoMTMpLCBWX0FMSUFTRVMoMTQpLCBWX0FMSUFTRVMoMTUpLCBcCisgICAgVl9BTElBU0VTKDE2KSwgVl9BTElBU0VTKDE3KSwgVl9BTElBU0VTKDE4KSwgVl9BTElBU0VTKDE5KSwgXAorICAgIFZfQUxJQVNFUygyMCksIFZfQUxJQVNFUygyMSksIFZfQUxJQVNFUygyMiksIFZfQUxJQVNFUygyMyksIFwKKyAgICBWX0FMSUFTRVMoMjQpLCBWX0FMSUFTRVMoMjUpLCBWX0FMSUFTRVMoMjYpLCBWX0FMSUFTRVMoMjcpLCBcCisgICAgVl9BTElBU0VTKDI4KSwgVl9BTElBU0VTKDI5KSwgVl9BTElBU0VTKDMwKSwgVl9BTElBU0VTKDMxKSAgXAorICB9CisKKy8qIFNheSB0aGF0IHRoZSBlcGlsb2d1ZSB1c2VzIHRoZSByZXR1cm4gYWRkcmVzcyByZWdpc3Rlci4gIE5vdGUgdGhhdAorICAgaW4gdGhlIGNhc2Ugb2Ygc2liY2FsbHMsIHRoZSB2YWx1ZXMgInVzZWQgYnkgdGhlIGVwaWxvZ3VlIiBhcmUKKyAgIGNvbnNpZGVyZWQgbGl2ZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGNhbGxlZCBmdW5jdGlvbi4gICovCisKKyNkZWZpbmUgRVBJTE9HVUVfVVNFUyhSRUdOTykgXAorICAoKFJFR05PKSA9PSBMUl9SRUdOVU0pCisKKy8qIEVYSVRfSUdOT1JFX1NUQUNLIHNob3VsZCBiZSBub256ZXJvIGlmLCB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb24sCisgICB0aGUgc3RhY2sgcG9pbnRlciBkb2VzIG5vdCBtYXR0ZXIuICBUaGUgdmFsdWUgaXMgdGVzdGVkIG9ubHkgaW4KKyAgIGZ1bmN0aW9ucyB0aGF0IGhhdmUgZnJhbWUgcG9pbnRlcnMuICAqLworI2RlZmluZSBFWElUX0lHTk9SRV9TVEFDSwkxCisKKyNkZWZpbmUgU1RBVElDX0NIQUlOX1JFR05VTQkJUjE4X1JFR05VTQorI2RlZmluZSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNCVIyOV9SRUdOVU0KKyNkZWZpbmUgRlJBTUVfUE9JTlRFUl9SRUdOVU0JCVNGUF9SRUdOVU0KKyNkZWZpbmUgU1RBQ0tfUE9JTlRFUl9SRUdOVU0JCVNQX1JFR05VTQorI2RlZmluZSBBUkdfUE9JTlRFUl9SRUdOVU0JCUFQX1JFR05VTQorI2RlZmluZSBGSVJTVF9QU0VVRE9fUkVHSVNURVIJCTY3CisKKy8qIFRoZSBudW1iZXIgb2YgKGludGVnZXIpIGFyZ3VtZW50IHJlZ2lzdGVyIGF2YWlsYWJsZS4gICovCisjZGVmaW5lIE5VTV9BUkdfUkVHUwkJCTgKKyNkZWZpbmUgTlVNX0ZQX0FSR19SRUdTCQkJOAorCisvKiBBIEhvbW9nZW5lb3VzIEZsb2F0aW5nLVBvaW50IG9yIFNob3J0LVZlY3RvciBBZ2dyZWdhdGUgbWF5IGhhdmUgYXQgbW9zdAorICAgZm91ciBtZW1iZXJzLiAgKi8KKyNkZWZpbmUgSEFfTUFYX05VTV9GTERTCQk0CisKKy8qIEV4dGVybmFsIGR3YXJmIHJlZ2lzdGVyIG51bWJlciBzY2hlbWUuICBUaGVzZSBudW1iZXIgYXJlIHVzZWQgdG8KKyAgIGlkZW50aWZ5IHJlZ2lzdGVycyBpbiBkd2FyZiBkZWJ1ZyBpbmZvcm1hdGlvbiwgdGhlIHZhbHVlcyBhcmUKKyAgIGRlZmluZWQgYnkgdGhlIEFBcmNoNjQgQUJJLiAgVGhlIG51bWJlcmluZyBzY2hlbWUgaXMgaW5kZXBlbmRlbnQgb2YKKyAgIEdDQydzIGludGVybmFsIHJlZ2lzdGVyIG51bWJlcmluZyBzY2hlbWUuICAqLworCisjZGVmaW5lIEFBUkNINjRfRFdBUkZfUjAgICAgICAgIDAKKworLyogVGhlIG51bWJlciBvZiBSIHJlZ2lzdGVycywgbm90ZSAzMSEgbm90IDMyLiAgKi8KKyNkZWZpbmUgQUFSQ0g2NF9EV0FSRl9OVU1CRVJfUiAzMQorCisjZGVmaW5lIEFBUkNINjRfRFdBUkZfU1AgICAgICAgMzEKKyNkZWZpbmUgQUFSQ0g2NF9EV0FSRl9WMCAgICAgICA2NAorCisvKiBUaGUgbnVtYmVyIG9mIFYgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgQUFSQ0g2NF9EV0FSRl9OVU1CRVJfViAzMgorCisvKiBGb3Igc2lnbmFsIGZyYW1lcyB3ZSBuZWVkIHRvIHVzZSBhbiBhbHRlcm5hdGl2ZSByZXR1cm4gY29sdW1uLiAgVGhpcworICAgdmFsdWUgbXVzdCBub3QgY29ycmVzcG9uZCB0byBhIGhhcmQgcmVnaXN0ZXIgYW5kIG11c3QgYmUgb3V0IG9mIHRoZQorICAgcmFuZ2Ugb2YgRFdBUkZfRlJBTUVfUkVHTlVNKCkuICAqLworI2RlZmluZSBEV0FSRl9BTFRfRlJBTUVfUkVUVVJOX0NPTFVNTiAgIFwKKyAgKEFBUkNINjRfRFdBUkZfVjAgKyBBQVJDSDY0X0RXQVJGX05VTUJFUl9WKQorCisvKiBXZSBhZGQgMSBleHRyYSBmcmFtZSByZWdpc3RlciBmb3IgdXNlIGFzIHRoZQorICAgRFdBUkZfQUxUX0ZSQU1FX1JFVFVSTl9DT0xVTU4uICAqLworI2RlZmluZSBEV0FSRl9GUkFNRV9SRUdJU1RFUlMgICAgICAgICAgIChEV0FSRl9BTFRfRlJBTUVfUkVUVVJOX0NPTFVNTiArIDEpCisKKworI2RlZmluZSBEQlhfUkVHSVNURVJfTlVNQkVSKFJFR05PKQlhYXJjaDY0X2RieF9yZWdpc3Rlcl9udW1iZXIgKFJFR05PKQorLyogUHJvdmlkZSBhIGRlZmluaXRpb24gb2YgRFdBUkZfRlJBTUVfUkVHTlVNIGhlcmUgc28gdGhhdCBmYWxsYmFjayB1bndpbmRlcnMKKyAgIGNhbiB1c2UgRFdBUkZfQUxUX0ZSQU1FX1JFVFVSTl9DT0xVTU4gZGVmaW5lZCBiZWxvdy4gIFRoaXMgaXMganVzdCB0aGUgc2FtZQorICAgYXMgdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBpbiBkd2FyZjJvdXQuYy4gICovCisjdW5kZWYgRFdBUkZfRlJBTUVfUkVHTlVNCisjZGVmaW5lIERXQVJGX0ZSQU1FX1JFR05VTShSRUdOTykJREJYX1JFR0lTVEVSX05VTUJFUiAoUkVHTk8pCisKKyNkZWZpbmUgRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTglEV0FSRl9GUkFNRV9SRUdOVU0gKExSX1JFR05VTSkKKworI2RlZmluZSBIQVJEX1JFR05PX05SRUdTKFJFR05PLCBNT0RFKQlhYXJjaDY0X2hhcmRfcmVnbm9fbnJlZ3MgKFJFR05PLCBNT0RFKQorCisjZGVmaW5lIEhBUkRfUkVHTk9fTU9ERV9PSyhSRUdOTywgTU9ERSkJYWFyY2g2NF9oYXJkX3JlZ25vX21vZGVfb2sgKFJFR05PLCBNT0RFKQorCisjZGVmaW5lIE1PREVTX1RJRUFCTEVfUChNT0RFMSwgTU9ERTIpCQkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUxKSA9PSBHRVRfTU9ERV9DTEFTUyAoTU9ERTIpKQorCisjZGVmaW5lIERXQVJGMl9VTldJTkRfSU5GTyAxCisKKy8qIFVzZSBSMCB0aHJvdWdoIFIzIHRvIHBhc3MgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uLiAgKi8KKyNkZWZpbmUgRUhfUkVUVVJOX0RBVEFfUkVHTk8oTikgXAorICAoKE4pIDwgNCA/ICgodW5zaWduZWQgaW50KSBSMF9SRUdOVU0gKyAoTikpIDogSU5WQUxJRF9SRUdOVU0pCisKKy8qIFNlbGVjdCBhIGZvcm1hdCB0byBlbmNvZGUgcG9pbnRlcnMgaW4gZXhjZXB0aW9uIGhhbmRsaW5nIGRhdGEuICAqLworI2RlZmluZSBBU01fUFJFRkVSUkVEX0VIX0RBVEFfRk9STUFUKENPREUsIEdMT0JBTCkgXAorICBhYXJjaDY0X2FzbV9wcmVmZXJyZWRfZWhfZGF0YV9mb3JtYXQgKChDT0RFKSwgKEdMT0JBTCkpCisKKy8qIFRoZSByZWdpc3RlciB0aGF0IGhvbGRzIHRoZSByZXR1cm4gYWRkcmVzcyBpbiBleGNlcHRpb24gaGFuZGxlcnMuICAqLworI2RlZmluZSBBQVJDSDY0X0VIX1NUQUNLQURKX1JFR05VTQkoUjBfUkVHTlVNICsgNCkKKyNkZWZpbmUgRUhfUkVUVVJOX1NUQUNLQURKX1JUWAlnZW5fcnR4X1JFRyAoUG1vZGUsIEFBUkNINjRfRUhfU1RBQ0tBREpfUkVHTlVNKQorCisvKiBEb24ndCB1c2UgX19idWlsdGluX3NldGptcCB1bnRpbCB3ZSd2ZSBkZWZpbmVkIGl0LiAgKi8KKyN1bmRlZiBET05UX1VTRV9CVUlMVElOX1NFVEpNUAorI2RlZmluZSBET05UX1VTRV9CVUlMVElOX1NFVEpNUCAxCisKKy8qIFJlZ2lzdGVyIGluIHdoaWNoIHRoZSBzdHJ1Y3R1cmUgdmFsdWUgaXMgdG8gYmUgcmV0dXJuZWQuICAqLworI2RlZmluZSBBQVJDSDY0X1NUUlVDVF9WQUxVRV9SRUdOVU0gUjhfUkVHTlVNCisKKy8qIE5vbi16ZXJvIGlmIFJFR05PIGlzIHBhcnQgb2YgdGhlIENvcmUgcmVnaXN0ZXIgc2V0LgorCisgICBUaGUgcmF0aGVyIHVudXN1YWwgd2F5IG9mIGV4cHJlc3NpbmcgdGhpcyBjaGVjayBpcyB0byBhdm9pZAorICAgd2FybmluZ3Mgd2hlbiBidWlsZGluZyB0aGUgY29tcGlsZXIgd2hlbiBSMF9SRUdOVU0gaXMgMCBhbmQgUkVHTk8KKyAgIGlzIHVuc2lnbmVkLiAgKi8KKyNkZWZpbmUgR1BfUkVHTlVNX1AoUkVHTk8pCQkJCQkJXAorICAoKCh1bnNpZ25lZCkgKFJFR05PIC0gUjBfUkVHTlVNKSkgPD0gKFIzMF9SRUdOVU0gLSBSMF9SRUdOVU0pKQorCisjZGVmaW5lIEZQX1JFR05VTV9QKFJFR05PKQkJCVwKKyAgKCgodW5zaWduZWQpIChSRUdOTyAtIFYwX1JFR05VTSkpIDw9IChWMzFfUkVHTlVNIC0gVjBfUkVHTlVNKSkKKworI2RlZmluZSBGUF9MT19SRUdOVU1fUChSRUdOTykgICAgICAgICAgICBcCisgICgoKHVuc2lnbmVkKSAoUkVHTk8gLSBWMF9SRUdOVU0pKSA8PSAoVjE1X1JFR05VTSAtIFYwX1JFR05VTSkpCisKKwwKKy8qIFJlZ2lzdGVyIGFuZCBjb25zdGFudCBjbGFzc2VzLiAgKi8KKworZW51bSByZWdfY2xhc3MKK3sKKyAgTk9fUkVHUywKKyAgQ09SRV9SRUdTLAorICBHRU5FUkFMX1JFR1MsCisgIFNUQUNLX1JFRywKKyAgUE9JTlRFUl9SRUdTLAorICBGUF9MT19SRUdTLAorICBGUF9SRUdTLAorICBBTExfUkVHUywKKyAgTElNX1JFR19DTEFTU0VTCQkvKiBMYXN0ICovCit9OworCisjZGVmaW5lIE5fUkVHX0NMQVNTRVMJKChpbnQpIExJTV9SRUdfQ0xBU1NFUykKKworI2RlZmluZSBSRUdfQ0xBU1NfTkFNRVMJCQkJXAorewkJCQkJCVwKKyAgIk5PX1JFR1MiLAkJCQkJXAorICAiQ09SRV9SRUdTIiwJCQkJCVwKKyAgIkdFTkVSQUxfUkVHUyIsCQkJCVwKKyAgIlNUQUNLX1JFRyIsCQkJCQlcCisgICJQT0lOVEVSX1JFR1MiLAkJCQlcCisgICJGUF9MT19SRUdTIiwJCQkJCVwKKyAgIkZQX1JFR1MiLAkJCQkJXAorICAiQUxMX1JFR1MiCQkJCQlcCit9CisKKyNkZWZpbmUgUkVHX0NMQVNTX0NPTlRFTlRTCQkJCQkJXAorewkJCQkJCQkJCVwKKyAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCS8qIE5PX1JFR1MgKi8JCVwKKyAgeyAweDdmZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDAwMDAzIH0sCS8qIENPUkVfUkVHUyAqLwkJXAorICB7IDB4N2ZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSwJLyogR0VORVJBTF9SRUdTICovCVwKKyAgeyAweDgwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCS8qIFNUQUNLX1JFRyAqLwkJXAorICB7IDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSwJLyogUE9JTlRFUl9SRUdTICovCVwKKyAgeyAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwIH0sICAgICAgIC8qIEZQX0xPX1JFR1MgICovCVwKKyAgeyAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sICAgICAgIC8qIEZQX1JFR1MgICovCQlcCisgIHsgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwNyB9CS8qIEFMTF9SRUdTICovCQlcCit9CisKKyNkZWZpbmUgUkVHTk9fUkVHX0NMQVNTKFJFR05PKQlhYXJjaDY0X3JlZ25vX3JlZ2NsYXNzIChSRUdOTykKKworI2RlZmluZSBJTkRFWF9SRUdfQ0xBU1MJQ09SRV9SRUdTCisjZGVmaW5lIEJBU0VfUkVHX0NMQVNTICBQT0lOVEVSX1JFR1MKKworLyogUmVnaXN0ZXIgcGFpcnMgdXNlZCB0byBlbGltaW5hdGUgdW5uZWVkZWQgcmVnaXN0ZXJzIHRoYXQgcG9pbnQgaW50b2kKKyAgIHRoZSBzdGFjayBmcmFtZS4gICovCisjZGVmaW5lIEVMSU1JTkFCTEVfUkVHUwkJCQkJCQlcCit7CQkJCQkJCQkJXAorICB7IEFSR19QT0lOVEVSX1JFR05VTSwJCVNUQUNLX1BPSU5URVJfUkVHTlVNCQl9LAlcCisgIHsgQVJHX1BPSU5URVJfUkVHTlVNLAkJSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTQl9LAlcCisgIHsgRlJBTUVfUE9JTlRFUl9SRUdOVU0sCVNUQUNLX1BPSU5URVJfUkVHTlVNCQl9LAlcCisgIHsgRlJBTUVfUE9JTlRFUl9SRUdOVU0sCUhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0JfSwJXAorfQorCisjZGVmaW5lIElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKEZST00sIFRPLCBPRkZTRVQpIFwKKyAgKE9GRlNFVCkgPSBhYXJjaDY0X2luaXRpYWxfZWxpbWluYXRpb25fb2Zmc2V0IChGUk9NLCBUTykKKworLyogQ1BVL0FSQ0ggb3B0aW9uIGhhbmRsaW5nLiAgKi8KKyNpbmNsdWRlICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LW9wdHMuaCIKKworZW51bSB0YXJnZXRfY3B1cworeworI2RlZmluZSBBQVJDSDY0X0NPUkUoTkFNRSwgSURFTlQsIEFSQ0gsIEZMQUdTLCBDT1NUUykgXAorICBUQVJHRVRfQ1BVXyMjSURFTlQsCisjaW5jbHVkZSAiYWFyY2g2NC1jb3Jlcy5kZWYiCisjdW5kZWYgQUFSQ0g2NF9DT1JFCisgIFRBUkdFVF9DUFVfZ2VuZXJpYworfTsKKworLyogSWYgdGhlcmUgaXMgbm8gQ1BVIGRlZmluZWQgYXQgY29uZmlndXJlLCB1c2UgImdlbmVyaWMiIGFzIGRlZmF1bHQuICAqLworI2lmbmRlZiBUQVJHRVRfQ1BVX0RFRkFVTFQKKyNkZWZpbmUgVEFSR0VUX0NQVV9ERUZBVUxUIFwKKyAgKFRBUkdFVF9DUFVfZ2VuZXJpYyB8IChBQVJDSDY0X0NQVV9ERUZBVUxUX0ZMQUdTIDw8IDYpKQorI2VuZGlmCisKKy8qIFRoZSBwcm9jZXNzb3IgZm9yIHdoaWNoIGluc3RydWN0aW9ucyBzaG91bGQgYmUgc2NoZWR1bGVkLiAgKi8KK2V4dGVybiBlbnVtIGFhcmNoNjRfcHJvY2Vzc29yIGFhcmNoNjRfdHVuZTsKKworLyogUlRMIGdlbmVyYXRpb24gc3VwcG9ydC4gICovCisjZGVmaW5lIElOSVRfRVhQQU5ERVJTIGFhcmNoNjRfaW5pdF9leHBhbmRlcnMgKCkKKwwKKworLyogU3RhY2sgbGF5b3V0OyBmdW5jdGlvbiBlbnRyeSwgZXhpdCBhbmQgY2FsbGluZy4gICovCisjZGVmaW5lIFNUQUNLX0dST1dTX0RPV05XQVJECTEKKworI2RlZmluZSBGUkFNRV9HUk9XU19ET1dOV0FSRAkwCisKKyNkZWZpbmUgU1RBUlRJTkdfRlJBTUVfT0ZGU0VUCTAKKworI2RlZmluZSBBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MJMQorCisjZGVmaW5lIEZJUlNUX1BBUk1fT0ZGU0VUKEZOREVDTCkgMAorCisvKiBGaXggZm9yIFZGUCAqLworI2RlZmluZSBMSUJDQUxMX1ZBTFVFKE1PREUpICBcCisgIGdlbl9ydHhfUkVHIChNT0RFLCBGTE9BVF9NT0RFX1AgKE1PREUpID8gVjBfUkVHTlVNIDogUjBfUkVHTlVNKQorCisjZGVmaW5lIERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4gMAorCisjZGVmaW5lIEFBUkNINjRfUk9VTkRfVVAoWCwgQUxJR05NRU5UKSBcCisgICgoKFgpICsgKChBTElHTk1FTlQpIC0gMSkpICYgfigoQUxJR05NRU5UKSAtIDEpKQorCisjZGVmaW5lIEFBUkNINjRfUk9VTkRfRE9XTihYLCBBTElHTk1FTlQpIFwKKyAgKChYKSAmIH4oKEFMSUdOTUVOVCkgLSAxKSkKKworI2lmZGVmIEhPU1RfV0lERV9JTlQKK3N0cnVjdCBHVFkgKCgpKSBhYXJjaDY0X2ZyYW1lCit7CisgIEhPU1RfV0lERV9JTlQgcmVnX29mZnNldFtGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworICBIT1NUX1dJREVfSU5UIHNhdmVkX3JlZ3Nfc2l6ZTsKKyAgLyogUGFkZGluZyBpZiBuZWVkZWQgYWZ0ZXIgdGhlIGFsbCB0aGUgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzIGhhdmUKKyAgICAgYmVlbiBzYXZlZC4gICovCisgIEhPU1RfV0lERV9JTlQgcGFkZGluZzA7CisgIEhPU1RfV0lERV9JTlQgaGFyZGZwX29mZnNldDsJLyogSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSAqLworICBIT1NUX1dJREVfSU5UIGZwX2xyX29mZnNldDsJLyogU3BhY2UgbmVlZGVkIGZvciBzYXZpbmcgZnAgYW5kL29yIGxyICovCisKKyAgYm9vbCBsYWlkX291dDsKK307CisKK3R5cGVkZWYgc3RydWN0IEdUWSAoKCkpIG1hY2hpbmVfZnVuY3Rpb24KK3sKKyAgc3RydWN0IGFhcmNoNjRfZnJhbWUgZnJhbWU7CisKKyAgLyogVGhlIG51bWJlciBvZiBleHRyYSBzdGFjayBieXRlcyB0YWtlbiB1cCBieSByZWdpc3RlciB2YXJhcmdzLgorICAgICBUaGlzIGFyZWEgaXMgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZWUgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBmcmFtZS4gICovCisgIEhPU1RfV0lERV9JTlQgc2F2ZWRfdmFyYXJnc19zaXplOworCit9IG1hY2hpbmVfZnVuY3Rpb247CisjZW5kaWYKKworCitlbnVtIGFybV9wY3MKK3sKKyAgQVJNX1BDU19BQVBDUzY0LAkJLyogQmFzZSBzdGFuZGFyZCBBQVBDUyBmb3IgNjQgYml0LiAgKi8KKyAgQVJNX1BDU19VTktOT1dOCit9OworCisKK2V4dGVybiBlbnVtIGFybV9wY3MgYXJtX3Bjc192YXJpYW50OworCisjaWZuZGVmIEFSTV9ERUZBVUxUX1BDUworI2RlZmluZSBBUk1fREVGQVVMVF9QQ1MgQVJNX1BDU19BQVBDUzY0CisjZW5kaWYKKworLyogV2UgY2FuJ3QgdXNlIGVudW0gbWFjaGluZV9tb2RlIGluc2lkZSBhIGdlbmVyYXRvciBmaWxlIGJlY2F1c2UgaXQKKyAgIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0OyB3ZSBzaG91bGRuJ3QgYmUgdXNpbmcgYW55IGNvZGUgdGhhdAorICAgbmVlZHMgdGhlIHJlYWwgZGVmaW5pdGlvbiB0aG91Z2gsIHNvIHRoaXMgb3VnaHQgdG8gYmUgc2FmZS4gICovCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKKyNkZWZpbmUgTUFDSE1PREUgaW50CisjZWxzZQorI2luY2x1ZGUgImluc24tbW9kZXMuaCIKKyNkZWZpbmUgTUFDSE1PREUgZW51bSBtYWNoaW5lX21vZGUKKyNlbmRpZgorCisKKy8qIEFBUENTIHJlbGF0ZWQgc3RhdGUgdHJhY2tpbmcuICAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgZW51bSBhcm1fcGNzIHBjc192YXJpYW50OworICBpbnQgYWFwY3NfYXJnX3Byb2Nlc3NlZDsJLyogTm8gbmVlZCB0byBsYXkgb3V0IHRoaXMgYXJndW1lbnQgYWdhaW4uICAqLworICBpbnQgYWFwY3NfbmNybjsJCS8qIE5leHQgQ29yZSByZWdpc3RlciBudW1iZXIuICAqLworICBpbnQgYWFwY3NfbmV4dG5jcm47CQkvKiBOZXh0IG5leHQgY29yZSByZWdpc3RlciBudW1iZXIuICAqLworICBpbnQgYWFwY3NfbnZybjsJCS8qIE5leHQgVmVjdG9yIHJlZ2lzdGVyIG51bWJlci4gICovCisgIGludCBhYXBjc19uZXh0bnZybjsJCS8qIE5leHQgTmV4dCBWZWN0b3IgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKyAgcnR4IGFhcGNzX3JlZzsJCS8qIFJlZ2lzdGVyIGFzc2lnbmVkIHRvIHRoaXMgYXJndW1lbnQuICBUaGlzCisJCQkJICAgaXMgTlVMTF9SVFggaWYgdGhpcyBwYXJhbWV0ZXIgZ29lcyBvbgorCQkJCSAgIHRoZSBzdGFjay4gICovCisgIE1BQ0hNT0RFIGFhcGNzX3ZmcF9ybW9kZTsKKyAgaW50IGFhcGNzX3N0YWNrX3dvcmRzOwkvKiBJZiB0aGUgYXJndW1lbnQgaXMgcGFzc2VkIG9uIHRoZSBzdGFjaywgdGhpcworCQkJCSAgIGlzIHRoZSBudW1iZXIgb2Ygd29yZHMgbmVlZGVkLCBhZnRlciByb3VuZGluZworCQkJCSAgIHVwLiAgT25seSBtZWFuaW5nZnVsIHdoZW4KKwkJCQkgICBhYXBjc19yZWcgPT0gTlVMTF9SVFguICAqLworICBpbnQgYWFwY3Nfc3RhY2tfc2l6ZTsJCS8qIFRoZSB0b3RhbCBzaXplIChpbiB3b3JkcywgcGVyIDggYnl0ZSkgb2YgdGhlCisJCQkJICAgc3RhY2sgYXJnIGFyZWEgc28gZmFyLiAgKi8KK30gQ1VNVUxBVElWRV9BUkdTOworCisjZGVmaW5lIEZVTkNUSU9OX0FSR19QQURESU5HKE1PREUsIFRZUEUpIFwKKyAgKGFhcmNoNjRfcGFkX2FyZ191cHdhcmQgKE1PREUsIFRZUEUpID8gdXB3YXJkIDogZG93bndhcmQpCisKKyNkZWZpbmUgQkxPQ0tfUkVHX1BBRERJTkcoTU9ERSwgVFlQRSwgRklSU1QpIFwKKyAgKGFhcmNoNjRfcGFkX3JlZ191cHdhcmQgKE1PREUsIFRZUEUsIEZJUlNUKSA/IHVwd2FyZCA6IGRvd253YXJkKQorCisjZGVmaW5lIFBBRF9WQVJBUkdTX0RPV04JMAorCisjZGVmaW5lIElOSVRfQ1VNVUxBVElWRV9BUkdTKENVTSwgRk5UWVBFLCBMSUJOQU1FLCBGTkRFQ0wsIE5fTkFNRURfQVJHUykgXAorICBhYXJjaDY0X2luaXRfY3VtdWxhdGl2ZV9hcmdzICgmKENVTSksIEZOVFlQRSwgTElCTkFNRSwgRk5ERUNMLCBOX05BTUVEX0FSR1MpCisKKyNkZWZpbmUgRlVOQ1RJT05fQVJHX1JFR05PX1AoUkVHTk8pIFwKKyAgYWFyY2g2NF9mdW5jdGlvbl9hcmdfcmVnbm9fcChSRUdOTykKKwwKKworLyogSVNBIEZlYXR1cmVzLiAgKi8KKworLyogQWRkcmVzc2luZyBtb2RlcywgZXRjLiAgKi8KKyNkZWZpbmUgSEFWRV9QT1NUX0lOQ1JFTUVOVAkxCisjZGVmaW5lIEhBVkVfUFJFX0lOQ1JFTUVOVAkxCisjZGVmaW5lIEhBVkVfUE9TVF9ERUNSRU1FTlQJMQorI2RlZmluZSBIQVZFX1BSRV9ERUNSRU1FTlQJMQorI2RlZmluZSBIQVZFX1BPU1RfTU9ESUZZX0RJU1AJMQorI2RlZmluZSBIQVZFX1BSRV9NT0RJRllfRElTUAkxCisKKyNkZWZpbmUgTUFYX1JFR1NfUEVSX0FERFJFU1MJMgorCisjZGVmaW5lIENPTlNUQU5UX0FERFJFU1NfUChYKQkJYWFyY2g2NF9jb25zdGFudF9hZGRyZXNzX3AoWCkKKworLyogVHJ5IGEgbWFjaGluZS1kZXBlbmRlbnQgd2F5IG9mIHJlbG9hZGluZyBhbiBpbGxlZ2l0aW1hdGUgYWRkcmVzcworICAgb3BlcmFuZC4gIElmIHdlIGZpbmQgb25lLCBwdXNoIHRoZSByZWxvYWQgYW5kIGp1bXAgdG8gV0lOLiAgVGhpcworICAgbWFjcm8gaXMgdXNlZCBpbiBvbmx5IG9uZSBwbGFjZTogYGZpbmRfcmVsb2Fkc19hZGRyZXNzJyBpbiByZWxvYWQuYy4gICovCisKKyNkZWZpbmUgTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyhYLCBNT0RFLCBPUE5VTSwgVFlQRSwgSU5EX0wsIFdJTikJICAgICBcCitkbyB7CQkJCQkJCQkJICAgICBcCisgIHJ0eCBuZXdfeCA9IGFhcmNoNjRfbGVnaXRpbWl6ZV9yZWxvYWRfYWRkcmVzcyAoJihYKSwgTU9ERSwgT1BOVU0sIFRZUEUsICAgIFwKKwkJCQkJCSBJTkRfTCk7CQkgICAgIFwKKyAgaWYgKG5ld194KQkJCQkJCQkJICAgICBcCisgICAgewkJCQkJCQkJCSAgICAgXAorICAgICAgWCA9IG5ld194OwkJCQkJCQkgICAgIFwKKyAgICAgIGdvdG8gV0lOOwkJCQkJCQkJICAgICBcCisgICAgfQkJCQkJCQkJCSAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBSRUdOT19PS19GT1JfQkFTRV9QKFJFR05PKQlcCisgIGFhcmNoNjRfcmVnbm9fb2tfZm9yX2Jhc2VfcCAoUkVHTk8sIHRydWUpCisKKyNkZWZpbmUgUkVHTk9fT0tfRk9SX0lOREVYX1AoUkVHTk8pIFwKKyAgYWFyY2g2NF9yZWdub19va19mb3JfaW5kZXhfcCAoUkVHTk8sIHRydWUpCisKKyNkZWZpbmUgTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKFgpIFwKKyAgYWFyY2g2NF9sZWdpdGltYXRlX3BpY19vcGVyYW5kX3AgKFgpCisKKyNkZWZpbmUgQ0FTRV9WRUNUT1JfTU9ERSBQbW9kZQorCisjZGVmaW5lIERFRkFVTFRfU0lHTkVEX0NIQVIgMAorCisvKiBBbiBpbnRlZ2VyIGV4cHJlc3Npb24gZm9yIHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIGxhcmdlc3QgaW50ZWdlciBtYWNoaW5lCisgICBtb2RlIHRoYXQgc2hvdWxkIGFjdHVhbGx5IGJlIHVzZWQuICBXZSBhbGxvdyBwYWlycyBvZiByZWdpc3RlcnMuICAqLworI2RlZmluZSBNQVhfRklYRURfTU9ERV9TSVpFIEdFVF9NT0RFX0JJVFNJWkUgKFRJbW9kZSkKKworLyogTWF4aW11bSBieXRlcyBtb3ZlZCBieSBhIHNpbmdsZSBpbnN0cnVjdGlvbiAobG9hZC9zdG9yZSBwYWlyKS4gICovCisjZGVmaW5lIE1PVkVfTUFYIChVTklUU19QRVJfV09SRCAqIDIpCisKKy8qIFRoZSBiYXNlIGNvc3Qgb3ZlcmhlYWQgb2YgYSBtZW1jcHkgY2FsbCwgZm9yIE1PVkVfUkFUSU8gYW5kIGZyaWVuZHMuICAqLworI2RlZmluZSBBQVJDSDY0X0NBTExfUkFUSU8gOAorCisvKiBXaGVuIG9wdGltaXppbmcgZm9yIHNpemUsIGdpdmUgYSBiZXR0ZXIgZXN0aW1hdGUgb2YgdGhlIGxlbmd0aCBvZiBhIG1lbWNweQorICAgY2FsbCwgYnV0IHVzZSB0aGUgZGVmYXVsdCBvdGhlcndpc2UuICBCdXQgbW92ZV9ieV9waWVjZXNfbmluc25zKCkgY291bnRzCisgICBtZW1vcnktdG8tbWVtb3J5IG1vdmVzLCBhbmQgd2UnbGwgaGF2ZSB0byBnZW5lcmF0ZSBhIGxvYWQgJiBzdG9yZSBmb3IgZWFjaCwKKyAgIHNvIGhhbHZlIHRoZSB2YWx1ZSB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50LiAgKi8KKyNkZWZpbmUgTU9WRV9SQVRJTyhzcGVlZCkgXAorICAoKChzcGVlZCkgPyAxNSA6IEFBUkNINjRfQ0FMTF9SQVRJTykgLyAyKQorCisvKiBGb3IgQ0xFQVJfUkFUSU8sIHdoZW4gb3B0aW1pemluZyBmb3Igc2l6ZSwgZ2l2ZSBhIGJldHRlciBlc3RpbWF0ZQorICAgb2YgdGhlIGxlbmd0aCBvZiBhIG1lbXNldCBjYWxsLCBidXQgdXNlIHRoZSBkZWZhdWx0IG90aGVyd2lzZS4gICovCisjZGVmaW5lIENMRUFSX1JBVElPKHNwZWVkKSBcCisgICgoc3BlZWQpID8gMTUgOiBBQVJDSDY0X0NBTExfUkFUSU8pCisKKy8qIFNFVF9SQVRJTyBpcyBzaW1pbGFyIHRvIENMRUFSX1JBVElPLCBidXQgZm9yIGEgbm9uLXplcm8gY29uc3RhbnQsIHNvIHdoZW4KKyAgIG9wdGltaXppbmcgZm9yIHNpemUgYWRqdXN0IHRoZSByYXRpbyB0byBhY2NvdW50IGZvciB0aGUgb3ZlcmhlYWQgb2YgbG9hZGluZworICAgdGhlIGNvbnN0YW50LiAgKi8KKyNkZWZpbmUgU0VUX1JBVElPKHNwZWVkKSBcCisgICgoc3BlZWQpID8gMTUgOiBBQVJDSDY0X0NBTExfUkFUSU8gLSAyKQorCisvKiBTVE9SRV9CWV9QSUVDRVNfUCBjYW4gYmUgdXNlZCB3aGVuIGNvcHlpbmcgYSBjb25zdGFudCBzdHJpbmcsIGJ1dAorICAgaW4gdGhhdCBjYXNlIGVhY2ggNjQtYml0IGNodW5rIHRha2VzIDUgaW5zbnMgaW5zdGVhZCBvZiAyIChMRFIvU1RSKS4KKyAgIEZvciBub3cgd2UgYWx3YXlzIGZhaWwgdGhpcyBhbmQgbGV0IHRoZSBtb3ZlX2J5X3BpZWNlcyBjb2RlIGNvcHkKKyAgIHRoZSBzdHJpbmcgZnJvbSByZWFkLW9ubHkgbWVtb3J5LiAgKi8KKyNkZWZpbmUgU1RPUkVfQllfUElFQ0VTX1AoU0laRSwgQUxJR04pIDAKKworLyogRGlzYWJsZSBhdXRvLWluY3JlbWVudCBpbiBtb3ZlX2J5X3BpZWNlcyBldCBhbC4gIFVzZSBvZiBhdXRvLWluY3JlbWVudCBpcworICAgcmFyZWx5IGEgZ29vZCBpZGVhIGluIHN0cmFpZ2h0LWxpbmUgY29kZSBzaW5jZSBpdCBhZGRzIGFuIGV4dHJhIGFkZHJlc3MKKyAgIGRlcGVuZGVuY3kgYmV0d2VlbiBlYWNoIGluc3RydWN0aW9uLiAgQmV0dGVyIHRvIHVzZSBpbmNyZW1lbnRpbmcgb2Zmc2V0cy4gICovCisjZGVmaW5lIFVTRV9MT0FEX1BPU1RfSU5DUkVNRU5UKE1PREUpICAgMAorI2RlZmluZSBVU0VfTE9BRF9QT1NUX0RFQ1JFTUVOVChNT0RFKSAgIDAKKyNkZWZpbmUgVVNFX0xPQURfUFJFX0lOQ1JFTUVOVChNT0RFKSAgICAwCisjZGVmaW5lIFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQoTU9ERSkgICAgMAorI2RlZmluZSBVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQoTU9ERSkgIDAKKyNkZWZpbmUgVVNFX1NUT1JFX1BPU1RfREVDUkVNRU5UKE1PREUpICAwCisjZGVmaW5lIFVTRV9TVE9SRV9QUkVfSU5DUkVNRU5UKE1PREUpICAgMAorI2RlZmluZSBVU0VfU1RPUkVfUFJFX0RFQ1JFTUVOVChNT0RFKSAgIDAKKworLyogPz8gI2RlZmluZSBXT1JEX1JFR0lTVEVSX09QRVJBVElPTlMgICovCisKKy8qIERlZmluZSBpZiBsb2FkaW5nIGZyb20gbWVtb3J5IGluIE1PREUsIGFuIGludGVncmFsIG1vZGUgbmFycm93ZXIgdGhhbgorICAgQklUU19QRVJfV09SRCB3aWxsIGVpdGhlciB6ZXJvLWV4dGVuZCBvciBzaWduLWV4dGVuZC4gIFRoZSB2YWx1ZSBvZiB0aGlzCisgICBtYWNybyBzaG91bGQgYmUgdGhlIGNvZGUgdGhhdCBzYXlzIHdoaWNoIG9uZSBvZiB0aGUgdHdvIG9wZXJhdGlvbnMgaXMKKyAgIGltcGxpY2l0bHkgZG9uZSwgb3IgVU5LTk9XTiBpZiBub25lLiAgKi8KKyNkZWZpbmUgTE9BRF9FWFRFTkRfT1AoTU9ERSkgWkVST19FWFRFTkQKKworLyogRGVmaW5lIHRoaXMgbWFjcm8gdG8gYmUgbm9uLXplcm8gaWYgaW5zdHJ1Y3Rpb25zIHdpbGwgZmFpbCB0byB3b3JrCisgICBpZiBnaXZlbiBkYXRhIG5vdCBvbiB0aGUgbm9taW5hbCBhbGlnbm1lbnQuICAqLworI2RlZmluZSBTVFJJQ1RfQUxJR05NRU5UCQlUQVJHRVRfU1RSSUNUX0FMSUdOCisKKy8qIERlZmluZSB0aGlzIG1hY3JvIHRvIGJlIG5vbi16ZXJvIGlmIGFjY2Vzc2luZyBsZXNzIHRoYW4gYSB3b3JkIG9mCisgICBtZW1vcnkgaXMgbm8gZmFzdGVyIHRoYW4gYWNjZXNzaW5nIGEgd29yZCBvZiBtZW1vcnksIGkuZS4sIGlmIHN1Y2gKKyAgIGFjY2Vzc2VzIHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBpbnN0cnVjdGlvbiBvciBpZiB0aGVyZSBpcyBubworICAgZGlmZmVyZW5jZSBpbiBjb3N0LgorICAgQWx0aG91Z2ggdGhlcmUncyBubyBkaWZmZXJlbmNlIGluIGluc3RydWN0aW9uIGNvdW50IG9yIGN5Y2xlcywKKyAgIGluIEFBcmNoNjQgd2UgZG9uJ3Qgd2FudCB0byBleHBhbmQgdG8gYSBzdWItd29yZCB0byBhIDY0LWJpdCBhY2Nlc3MKKyAgIGlmIHdlIGRvbid0IGhhdmUgdG8sIGZvciBwb3dlci1zYXZpbmcgcmVhc29ucy4gICovCisjZGVmaW5lIFNMT1dfQllURV9BQ0NFU1MJCTAKKworI2RlZmluZSBUUlVMWV9OT09QX1RSVU5DQVRJT04oT1VUUFJFQywgSU5QUkVDKSAxCisKKyNkZWZpbmUgTk9fRlVOQ1RJT05fQ1NFCTEKKworI2RlZmluZSBQbW9kZQkJREltb2RlCisjZGVmaW5lIEZVTkNUSU9OX01PREUJUG1vZGUKKworI2RlZmluZSBTRUxFQ1RfQ0NfTU9ERShPUCwgWCwgWSkJYWFyY2g2NF9zZWxlY3RfY2NfbW9kZSAoT1AsIFgsIFkpCisKKyNkZWZpbmUgUkVWRVJTSUJMRV9DQ19NT0RFKE1PREUpIDEKKworI2RlZmluZSBSRVZFUlNFX0NPTkRJVElPTihDT0RFLCBNT0RFKQkJXAorICAoKChNT0RFKSA9PSBDQ0ZQbW9kZSB8fCAoTU9ERSkgPT0gQ0NGUEVtb2RlKQlcCisgICA/IHJldmVyc2VfY29uZGl0aW9uX21heWJlX3Vub3JkZXJlZCAoQ09ERSkJXAorICAgOiByZXZlcnNlX2NvbmRpdGlvbiAoQ09ERSkpCisKKyNkZWZpbmUgQ0xaX0RFRklORURfVkFMVUVfQVRfWkVSTyhNT0RFLCBWQUxVRSkgXAorICAoKFZBTFVFKSA9ICgoTU9ERSkgPT0gU0ltb2RlID8gMzIgOiA2NCksIDIpCisjZGVmaW5lIENUWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk8oTU9ERSwgVkFMVUUpIFwKKyAgKChWQUxVRSkgPSAoKE1PREUpID09IFNJbW9kZSA/IDMyIDogNjQpLCAyKQorCisjZGVmaW5lIElOQ09NSU5HX1JFVFVSTl9BRERSX1JUWCBnZW5fcnR4X1JFRyAoUG1vZGUsIExSX1JFR05VTSkKKworI2RlZmluZSBSRVRVUk5fQUREUl9SVFggYWFyY2g2NF9yZXR1cm5fYWRkcgorCisjZGVmaW5lIFRSQU1QT0xJTkVfU0laRQlhYXJjaDY0X3RyYW1wb2xpbmVfc2l6ZSAoKQorCisvKiBUcmFtcG9saW5lcyBjb250YWluIGR3b3Jkcywgc28gbXVzdCBiZSBkd29yZCBhbGlnbmVkLiAgKi8KKyNkZWZpbmUgVFJBTVBPTElORV9BTElHTk1FTlQgNjQKKworLyogUHV0IHRyYW1wb2xpbmVzIGluIHRoZSB0ZXh0IHNlY3Rpb24gc28gdGhhdCBtYXBwaW5nIHN5bWJvbHMgd29yaworICAgY29ycmVjdGx5LiAgKi8KKyNkZWZpbmUgVFJBTVBPTElORV9TRUNUSU9OIHRleHRfc2VjdGlvbgorDAorLyogQ29zdHMsIGV0Yy4gICovCisjZGVmaW5lIE1FTU9SWV9NT1ZFX0NPU1QoTSwgQ0xBU1MsIElOKSBcCisgIChHRVRfTU9ERV9TSVpFIChNKSA8IDggPyA4IDogR0VUX01PREVfU0laRSAoTSkpCisKKy8qIFRvIHN0YXJ0IHdpdGguICAqLworI2RlZmluZSBCUkFOQ0hfQ09TVChTUEVFRF9QLCBQUkVESUNUQUJMRV9QKSAyCisMCisKKy8qIEFzc2VtYmx5IG91dHB1dC4gICovCisKKy8qIEZvciBub3cgd2UnbGwgbWFrZSBhbGwganVtcCB0YWJsZXMgcGMtcmVsYXRpdmUuICAqLworI2RlZmluZSBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRQkxCisKKyNkZWZpbmUgQ0FTRV9WRUNUT1JfU0hPUlRFTl9NT0RFKG1pbiwgbWF4LCBib2R5KQlcCisgICgobWluIDwgLTB4MWZmZjAgfHwgbWF4ID4gMHgxZmZmMCkgPyBTSW1vZGUJCVwKKyAgIDogKG1pbiA8IC0weDFmMCB8fCBtYXggPiAweDFmMCkgPyBISW1vZGUJCVwKKyAgIDogUUltb2RlKQorCisvKiBKdW1wIHRhYmxlIGFsaWdubWVudCBpcyBleHBsaWNpdCBpbiBBU01fT1VUUFVUX0NBU0VfTEFCRUwuICAqLworI2RlZmluZSBBRERSX1ZFQ19BTElHTihKVU1QVEFCTEUpIDAKKworI2RlZmluZSBQUklOVF9PUEVSQU5EKFNUUkVBTSwgWCwgQ09ERSkgYWFyY2g2NF9wcmludF9vcGVyYW5kIChTVFJFQU0sIFgsIENPREUpCisKKyNkZWZpbmUgUFJJTlRfT1BFUkFORF9BRERSRVNTKFNUUkVBTSwgWCkgXAorICBhYXJjaDY0X3ByaW50X29wZXJhbmRfYWRkcmVzcyAoU1RSRUFNLCBYKQorCisjZGVmaW5lIE1DT1VOVF9OQU1FICJfbWNvdW50IgorCisjZGVmaW5lIE5PX1BST0ZJTEVfQ09VTlRFUlMgMQorCisvKiBFbWl0IHJ0bCBmb3IgcHJvZmlsaW5nLiAgT3V0cHV0IGFzc2VtYmxlciBjb2RlIHRvIEZJTEUKKyAgIHRvIGNhbGwgIl9tY291bnQiIGZvciBwcm9maWxpbmcgYSBmdW5jdGlvbiBlbnRyeS4gICovCisjZGVmaW5lIFBST0ZJTEVfSE9PSyhMQUJFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJ0eCBmdW4sbHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxyID0gZ2V0X2hhcmRfcmVnX2luaXRpYWxfdmFsIChQbW9kZSwgTFJfUkVHTlVNKTsgICAgICAgICAgICBcCisgIGZ1biA9IGdlbl9ydHhfU1lNQk9MX1JFRiAoUG1vZGUsIE1DT1VOVF9OQU1FKTsgICAgICAgICAgICAgICBcCisgIGVtaXRfbGlicmFyeV9jYWxsIChmdW4sIExDVF9OT1JNQUwsIFZPSURtb2RlLCAxLCBsciwgUG1vZGUpOyBcCit9CisKKy8qIEFsbCB0aGUgd29yayBkb25lIGluIFBST0ZJTEVfSE9PSywgYnV0IHN0aWxsIHJlcXVpcmVkLiAgKi8KKyNkZWZpbmUgRlVOQ1RJT05fUFJPRklMRVIoU1RSRUFNLCBMQUJFTE5PKSBkbyB7IH0gd2hpbGUgKDApCisKKy8qIEZvciBzb21lIHJlYXNvbiwgdGhlIExpbnV4IGhlYWRlcnMgdGhpbmsgdGhleSBrbm93IGhvdyB0byBkZWZpbmUKKyAgIHRoZXNlIG1hY3Jvcy4gIFRoZXkgZG9uJ3QhISEgICovCisjdW5kZWYgQVNNX0FQUF9PTgorI3VuZGVmIEFTTV9BUFBfT0ZGCisjZGVmaW5lIEFTTV9BUFBfT04JIlx0IiBBU01fQ09NTUVOVF9TVEFSVCAiIFN0YXJ0IG9mIHVzZXIgYXNzZW1ibHlcbiIKKyNkZWZpbmUgQVNNX0FQUF9PRkYJIlx0IiBBU01fQ09NTUVOVF9TVEFSVCAiIEVuZCBvZiB1c2VyIGFzc2VtYmx5XG4iCisKKyNkZWZpbmUgQ09OU1RBTlRfUE9PTF9CRUZPUkVfRlVOQ1RJT04gMAorCisvKiBUaGlzIGRlZmluaXRpb24gc2hvdWxkIGJlIHJlbG9jYXRlZCB0byBhYXJjaDY0LWVsZi1yYXcuaC4gIFRoaXMgbWFjcm8KKyAgIHNob3VsZCBiZSB1bmRlZmluZWQgaW4gYWFyY2g2NC1saW51eC5oIGFuZCBhIGNsZWFyX2NhY2hlIHBhdHRlcm4KKyAgIGltcGxtZW50ZWQgdG8gZW1pdCBlaXRoZXIgdGhlIGNhbGwgdG8gX19hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UoKQorICAgZGlyZWN0bHkgb3IgcHJlZmVyYWJseSB0aGUgYXBwcm9wcmlhdGUgc3ljYWxsIG9yIGNhY2hlIGNsZWFyCisgICBpbnN0cnVjdGlvbnMgaW5saW5lLiAgKi8KKyNkZWZpbmUgQ0xFQVJfSU5TTl9DQUNIRShiZWcsIGVuZCkJCQkJXAorICBleHRlcm4gdm9pZCAgX19hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UgKHZvaWQgKiwgdm9pZCAqKTsJXAorICBfX2FhcmNoNjRfc3luY19jYWNoZV9yYW5nZSAoYmVnLCBlbmQpCisKKy8qICBWRlAgcmVnaXN0ZXJzIG1heSBvbmx5IGJlIGFjY2Vzc2VkIGluIHRoZSBtb2RlIHRoZXkKKyAgIHdlcmUgc2V0LiAgKi8KKyNkZWZpbmUgQ0FOTk9UX0NIQU5HRV9NT0RFX0NMQVNTKEZST00sIFRPLCBDTEFTUykJXAorICAoR0VUX01PREVfU0laRSAoRlJPTSkgIT0gR0VUX01PREVfU0laRSAoVE8pCQlcCisgICA/IHJlZ19jbGFzc2VzX2ludGVyc2VjdF9wIChGUF9SRUdTLCAoQ0xBU1MpKQkJXAorICAgOiAwKQorCisKKyNkZWZpbmUgU0hJRlRfQ09VTlRfVFJVTkNBVEVEICFUQVJHRVRfU0lNRAorCisvKiBDYWxsZWUgb25seSBzYXZlcyBsb3dlciA2NC1iaXRzIG9mIGEgMTI4LWJpdCByZWdpc3Rlci4gIFRlbGwgdGhlCisgICBjb21waWxlciB0aGUgY2FsbGVlIGNsb2JiZXJzIHRoZSB0b3AgNjQtYml0cyB3aGVuIHJlc3RvcmluZyB0aGUKKyAgIGJvdHRvbSA2NC1iaXRzLiAgKi8KKyNkZWZpbmUgSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEKFJFR05PLCBNT0RFKSBcCisJCShGUF9SRUdOVU1fUCAoUkVHTk8pICYmIEdFVF9NT0RFX1NJWkUgKE1PREUpID4gOCkKKworLyogQ2hlY2sgVExTIERlc2NyaXB0b3JzIG1lY2hhbmlzbSBpcyBzZWxlY3RlZC4gICovCisjZGVmaW5lIFRBUkdFVF9UTFNfREVTQyAoYWFyY2g2NF90bHNfZGlhbGVjdCA9PSBUTFNfREVTQ1JJUFRPUlMpCisKK2V4dGVybiBlbnVtIGFhcmNoNjRfY29kZV9tb2RlbCBhYXJjaDY0X2Ntb2RlbDsKKworLyogV2hlbiB1c2luZyB0aGUgdGlueSBhZGRyZXNzaW5nIG1vZGVsIGNvbmRpdGlvbmFsIGFuZCB1bmNvbmRpdGlvbmFsIGJyYW5jaGVzCisgICBjYW4gc3BhbiB0aGUgd2hvbGUgb2YgdGhlIGF2YWlsYWJsZSBhZGRyZXNzIHNwYWNlICgxTUIpLiAgKi8KKyNkZWZpbmUgSEFTX0xPTkdfQ09ORF9CUkFOQ0gJCQkJXAorICAoYWFyY2g2NF9jbW9kZWwgPT0gQUFSQ0g2NF9DTU9ERUxfVElOWQkJXAorICAgfHwgYWFyY2g2NF9jbW9kZWwgPT0gQUFSQ0g2NF9DTU9ERUxfVElOWV9QSUMpCisKKyNkZWZpbmUgSEFTX0xPTkdfVU5DT05EX0JSQU5DSAkJCQlcCisgIChhYXJjaDY0X2Ntb2RlbCA9PSBBQVJDSDY0X0NNT0RFTF9USU5ZCQlcCisgICB8fCBhYXJjaDY0X2Ntb2RlbCA9PSBBQVJDSDY0X0NNT0RFTF9USU5ZX1BJQykKKworLyogTW9kZXMgdmFsaWQgZm9yIEFkdlNJTUQgUSByZWdpc3RlcnMuICAqLworI2RlZmluZSBBQVJDSDY0X1ZBTElEX1NJTURfUVJFR19NT0RFKE1PREUpIFwKKyAgKChNT0RFKSA9PSBWNFNJbW9kZSB8fCAoTU9ERSkgPT0gVjhISW1vZGUgfHwgKE1PREUpID09IFYxNlFJbW9kZSBcCisgICB8fCAoTU9ERSkgPT0gVjRTRm1vZGUgfHwgKE1PREUpID09IFYyREltb2RlIHx8IG1vZGUgPT0gVjJERm1vZGUpCisKKyNlbmRpZiAvKiBHQ0NfQUFSQ0g2NF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2RieGVsZi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9kYnhlbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDVlZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9kYnhlbGYuaApAQCAtMCwwICsxLDY4IEBACisvKiBEZWZpbml0aW9ucyBuZWVkZWQgd2hlbiB1c2luZyBzdGFicyBlbWJlZGRlZCBpbiBFTEYgc2VjdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBmaWxlIG1heSBiZSBpbmNsdWRlZCBieSBhbnkgRUxGIHRhcmdldCB3aGljaCB3aXNoZXMgdG8KKyAgIHN1cHBvcnQgLWdzdGFicyBnZW5lcmF0aW5nIHN0YWJzIGluIHNlY3Rpb25zLCBhcyBwcm9kdWNlZCBieSBnYXMKKyAgIGFuZCB1bmRlcnN0b29kIGJ5IGdkYi4gICovCisKKyNpZm5kZWYgR0NDX0RCWF9FTEZfSAorI2RlZmluZSBHQ0NfREJYX0VMRl9ICisKKy8qIE91dHB1dCBEQlggKHN0YWJzKSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaWYgZG9pbmcgLWdzdGFicy4gICovCisKKyNkZWZpbmUgREJYX0RFQlVHR0lOR19JTkZPIDEKKworLyogTWFrZSBMQlJBQyBhbmQgUkJSQUMgYWRkcmVzc2VzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUKKyAgIGZ1bmN0aW9uLiAgVGhlIG5hdGl2ZSBTb2xhcmlzIHN0YWJzIGRlYnVnZ2luZyBmb3JtYXQgd29ya3MgdGhpcworICAgd2F5LCBnZGIgZXhwZWN0cyBpdCwgYW5kIGl0IHJlZHVjZXMgdGhlIG51bWJlciBvZiByZWxvY2F0aW9uCisgICBlbnRyaWVzLi4uICAqLworCisjZGVmaW5lIERCWF9CTE9DS1NfRlVOQ1RJT05fUkVMQVRJVkUgMQorCisvKiAuLi4gYnV0LCB0byBtYWtlIHRoaXMgd29yaywgZnVuY3Rpb25zIG11c3QgYXBwZWFyIHByaW9yIHRvIGxpbmUgaW5mby4gICovCisKKyNkZWZpbmUgREJYX0ZVTkNUSU9OX0ZJUlNUCisKKy8qIFdoZW4gZ2VuZXJhdGluZyBzdGFicyBkZWJ1Z2dpbmcsIHVzZSBOX0JJTkNMIGVudHJpZXMuICAqLworCisjZGVmaW5lIERCWF9VU0VfQklOQ0wKKworLyogVGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBzdGFicyBzdHJpbmdzLiAgKi8KKworI2lmbmRlZiBEQlhfQ09OVElOX0xFTkdUSAorI2RlZmluZSBEQlhfQ09OVElOX0xFTkdUSCAwCisjZW5kaWYKKworLyogTGlrZSBibG9jayBhZGRyZXNzZXMsIHN0YWJzIGxpbmUgbnVtYmVycyBhcmUgcmVsYXRpdmUgdG8gdGhlCisgICBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKworI2RlZmluZSBEQlhfTElORVNfRlVOQ1RJT05fUkVMQVRJVkUgMQorCisvKiBHZW5lcmF0ZSBhIGJsYW5rIHRyYWlsaW5nIE5fU08gdG8gbWFyayB0aGUgZW5kIG9mIHRoZSAubyBmaWxlLCBzaW5jZQorICAgd2UgY2FuJ3QgZGVwZW5kIHVwb24gdGhlIGxpbmtlciB0byBtYXJrIC5vIGZpbGUgYm91bmRhcmllcyB3aXRoCisgICBlbWJlZGRlZCBzdGFicy4gICovCisKKyNkZWZpbmUgREJYX09VVFBVVF9OVUxMX05fU09fQVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQKKworI2VuZGlmIC8qICEgR0NDX0RCWF9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9lbGZvcy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZy9lbGZvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzODMwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2VsZm9zLmgKQEAgLTAsMCArMSw0MzUgQEAKKy8qIGVsZm9zLmggIC0tICBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIGRlZmluZXMgdG8gYmUgdXNlZCB3aGVuCisgICB0YXJnZXRpbmcgR0NDIGZvciBzb21lIGdlbmVyaWMgRUxGIHN5c3RlbQorICAgQ29weXJpZ2h0IChDKSAxOTkxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBCYXNlZCBvbiBzdnI0LmggY29udHJpYnV0ZWQgYnkgUm9uIEd1aWxtZXR0ZSAocmZnQG5ldGNvbS5jb20pLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjZGVmaW5lIFRBUkdFVF9PQkpGTVRfQ1BQX0JVSUxUSU5TKCkJCVwKKyAgZG8JCQkJCQlcCisgICAgewkJCQkJCVwKKwlidWlsdGluX2RlZmluZSAoIl9fRUxGX18iKTsJCVwKKyAgICB9CQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogRGVmaW5lIGEgc3ltYm9sIGluZGljYXRpbmcgdGhhdCB3ZSBhcmUgdXNpbmcgZWxmb3MuaC4KKyAgIFNvbWUgQ1BVIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMgdXNlIHRoaXMuICAqLworI2RlZmluZSBVU0lOR19FTEZPU19ICisKKy8qIFRoZSBwcmVmaXggdG8gYWRkIHRvIHVzZXItdmlzaWJsZSBhc3NlbWJsZXIgc3ltYm9scy4KKworICAgRm9yIEVMRiBzeXN0ZW1zIHRoZSBjb252ZW50aW9uIGlzICpub3QqIHRvIHByZXBlbmQgYSBsZWFkaW5nCisgICB1bmRlcnNjb3JlIG9udG8gdXNlci1sZXZlbCBzeW1ib2wgbmFtZXMuICAqLworCisjdW5kZWYgIFVTRVJfTEFCRUxfUFJFRklYCisjZGVmaW5lIFVTRVJfTEFCRUxfUFJFRklYICIiCisKKy8qIFRoZSBiaWdnZXN0IGFsaWdubWVudCBzdXBwb3J0ZWQgYnkgRUxGIGluIGJpdHMuIDMyLWJpdCBFTEYgCisgICBzdXBwb3J0cyBzZWN0aW9uIGFsaWdubWVudCB1cCB0byAoMHg4MDAwMDAwMCAqIDgpLCB3aGlsZSAKKyAgIDY0LWJpdCBFTEYgc3VwcG9ydHMgKDB4ODAwMDAwMDAwMDAwMDAwMCAqIDgpLiBJZiB0aGlzIG1hY3JvIAorICAgaXMgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGlzIHRoZSBsYXJnZXN0IGFsaWdubWVudCBzdXBwb3J0ZWQgCisgICBieSAzMi1iaXQgRUxGIGFuZCByZXByZXNlbnRhYmxlIG9uIGEgMzItYml0IGhvc3QuIFVzZSB0aGlzCisgICBtYWNybyB0byBsaW1pdCB0aGUgYWxpZ25tZW50IHdoaWNoIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcKKyAgIHRoZSBgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKE4pKSknIGNvbnN0cnVjdC4gICovCisjaWZuZGVmIE1BWF9PRklMRV9BTElHTk1FTlQKKyNkZWZpbmUgTUFYX09GSUxFX0FMSUdOTUVOVCAoKCh1bnNpZ25lZCBpbnQpIDEgPDwgMjgpICogOCkKKyNlbmRpZgorCisvKiBVc2UgcGVyaW9kcyByYXRoZXIgdGhhbiBkb2xsYXIgc2lnbnMgaW4gc3BlY2lhbCBnKysgYXNzZW1ibGVyIG5hbWVzLiAgKi8KKworI2RlZmluZSBOT19ET0xMQVJfSU5fTEFCRUwKKworLyogV3JpdGluZyBgaW50JyBmb3IgYSBiaXQtZmllbGQgZm9yY2VzIGludCBhbGlnbm1lbnQgZm9yIHRoZSBzdHJ1Y3R1cmUuICAqLworCisjaWZuZGVmIFBDQ19CSVRGSUVMRF9UWVBFX01BVFRFUlMKKyNkZWZpbmUgUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyAxCisjZW5kaWYKKworLyogQWxsIEVMRiB0YXJnZXRzIGNhbiBzdXBwb3J0IERXQVJGLTIuICAqLworCisjZGVmaW5lIERXQVJGMl9ERUJVR0dJTkdfSU5GTyAxCisKKy8qIFRoZSBHTlUgdG9vbHMgb3BlcmF0ZSBiZXR0ZXIgd2l0aCBkd2FyZjIsIGFuZCBpdCBpcyByZXF1aXJlZCBieSBzb21lCisgICBwc0FCSSdzLiAgU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgbmF0aXZlIHRvb2xzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCwKKyAgIGRlZmF1bHQgdG8gZHdhcmYyLiAgKi8KKworI2lmbmRlZiBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUKKyNkZWZpbmUgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIERXQVJGMl9ERUJVRworI2VuZGlmCisKKy8qIEFsbCBTVlI0IHRhcmdldHMgdXNlIHRoZSBFTEYgb2JqZWN0IGZpbGUgZm9ybWF0LiAgKi8KKyNkZWZpbmUgT0JKRUNUX0ZPUk1BVF9FTEYKKworCisvKiBPdXRwdXQgI2lkZW50IGFzIGEgLmlkZW50LiAgKi8KKworI3VuZGVmIFRBUkdFVF9BU01fT1VUUFVUX0lERU5UCisjZGVmaW5lIFRBUkdFVF9BU01fT1VUUFVUX0lERU5UIGRlZmF1bHRfYXNtX291dHB1dF9pZGVudF9kaXJlY3RpdmUKKworI3VuZGVmICBTRVRfQVNNX09QCisjZGVmaW5lIFNFVF9BU01fT1AJIlx0LnNldFx0IgorCisvKiBNb3N0IHN2cjQgYXNzZW1ibGVycyB3YW50IGEgLmZpbGUgZGlyZWN0aXZlIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZWlyIGlucHV0IGZpbGUuICAqLworI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfU1RBUlRfRklMRV9ESVJFQ1RJVkUgdHJ1ZQorCisvKiBUaGlzIGlzIGhvdyB0byBhbGxvY2F0ZSBlbXB0eSBzcGFjZSBpbiBzb21lIHNlY3Rpb24uICBUaGUgLnplcm8KKyAgIHBzZXVkby1vcCBpcyB1c2VkIGZvciB0aGlzIG9uIG1vc3Qgc3ZyNCBhc3NlbWJsZXJzLiAgKi8KKworI2RlZmluZSBTS0lQX0FTTV9PUAkiXHQuemVyb1x0IgorCisjdW5kZWYgIEFTTV9PVVRQVVRfU0tJUAorI2RlZmluZSBBU01fT1VUUFVUX1NLSVAoRklMRSwgU0laRSkgXAorICAgZnByaW50ZiAoKEZJTEUpLCAiJXMiSE9TVF9XSURFX0lOVF9QUklOVF9VTlNJR05FRCJcbiIsXAorCSAgICBTS0lQX0FTTV9PUCwgKFNJWkUpKQorCisvKiBUaGlzIGlzIGhvdyB0byBzdG9yZSBpbnRvIHRoZSBzdHJpbmcgTEFCRUwKKyAgIHRoZSBzeW1ib2xfcmVmIG5hbWUgb2YgYW4gaW50ZXJuYWwgbnVtYmVyZWQgbGFiZWwgd2hlcmUKKyAgIFBSRUZJWCBpcyB0aGUgY2xhc3Mgb2YgbGFiZWwgYW5kIE5VTSBpcyB0aGUgbnVtYmVyIHdpdGhpbiB0aGUgY2xhc3MuCisgICBUaGlzIGlzIHN1aXRhYmxlIGZvciBvdXRwdXQgd2l0aCBgYXNzZW1ibGVfbmFtZScuCisKKyAgIEZvciBtb3N0IHN2cjQgc3lzdGVtcywgdGhlIGNvbnZlbnRpb24gaXMgdGhhdCBhbnkgc3ltYm9sIHdoaWNoIGJlZ2lucworICAgd2l0aCBhIHBlcmlvZCBpcyBub3QgcHV0IGludG8gdGhlIGxpbmtlciBzeW1ib2wgdGFibGUgYnkgdGhlIGFzc2VtYmxlci4gICovCisKKyN1bmRlZiAgQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMCisjZGVmaW5lIEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTChMQUJFTCwgUFJFRklYLCBOVU0pCQlcCisgIGRvCQkJCQkJCQlcCisgICAgewkJCQkJCQkJXAorICAgICAgY2hhciAqX19wOwkJCQkJCVwKKyAgICAgIChMQUJFTClbMF0gPSAnKic7CQkJCQkJXAorICAgICAgKExBQkVMKVsxXSA9ICcuJzsJCQkJCQlcCisgICAgICBfX3AgPSBzdHBjcHkgKCYoTEFCRUwpWzJdLCBQUkVGSVgpOwkJCVwKKyAgICAgIHNwcmludF91bCAoX19wLCAodW5zaWduZWQgbG9uZykgKE5VTSkpOwkJCVwKKyAgICB9CQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBPdXRwdXQgdGhlIGxhYmVsIHdoaWNoIHByZWNlZGVzIGEganVtcHRhYmxlLiAgTm90ZSB0aGF0IGZvciBhbGwgc3ZyNAorICAgc3lzdGVtcyB3aGVyZSB3ZSBhY3R1YWxseSBnZW5lcmF0ZSBqdW1wdGFibGVzICh3aGljaCBpcyB0byBzYXkgZXZlcnkKKyAgIHN2cjQgdGFyZ2V0IGV4Y2VwdCBpMzg2LCB3aGVyZSB3ZSB1c2UgY2FzZXNpIGluc3RlYWQpIHdlIHB1dCB0aGUganVtcC0KKyAgIHRhYmxlcyBpbnRvIHRoZSAucm9kYXRhIHNlY3Rpb24gYW5kIHNpbmNlIG90aGVyIHN0dWZmIGNvdWxkIGhhdmUgYmVlbgorICAgcHV0IGludG8gdGhlIC5yb2RhdGEgc2VjdGlvbiBwcmlvciB0byBhbnkgZ2l2ZW4ganVtcHRhYmxlLCB3ZSBoYXZlIHRvCisgICBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYXRpb24gY291bnRlciBmb3IgdGhlIC5yb2RhdGEgc2VjdGlvbiBnZXRzIHByby0KKyAgIHBlcmx5IHJlLWFsaWduZWQgcHJpb3IgdG8gdGhlIGFjdHVhbCBiZWdpbm5pbmcgb2YgdGhlIGp1bXAgdGFibGUuICAqLworCisjdW5kZWYgQUxJR05fQVNNX09QCisjZGVmaW5lIEFMSUdOX0FTTV9PUCAiXHQuYWxpZ25cdCIKKworI2lmbmRlZiBBU01fT1VUUFVUX0JFRk9SRV9DQVNFX0xBQkVMCisjZGVmaW5lIEFTTV9PVVRQVVRfQkVGT1JFX0NBU0VfTEFCRUwoRklMRSwgUFJFRklYLCBOVU0sIFRBQkxFKSBcCisgIEFTTV9PVVRQVVRfQUxJR04gKChGSUxFKSwgMik7CisjZW5kaWYKKworI3VuZGVmICBBU01fT1VUUFVUX0NBU0VfTEFCRUwKKyNkZWZpbmUgQVNNX09VVFBVVF9DQVNFX0xBQkVMKEZJTEUsIFBSRUZJWCwgTlVNLCBKVU1QVEFCTEUpCQlcCisgIGRvCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBBU01fT1VUUFVUX0JFRk9SRV9DQVNFX0xBQkVMIChGSUxFLCBQUkVGSVgsIE5VTSwgSlVNUFRBQkxFKQlcCisJKCp0YXJnZXRtLmFzbV9vdXQuaW50ZXJuYWxfbGFiZWwpIChGSUxFLCBQUkVGSVgsIE5VTSk7CQkJXAorICAgIH0JCQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBUaGUgc3RhbmRhcmQgU1ZSNCBhc3NlbWJsZXIgc2VlbXMgdG8gcmVxdWlyZSB0aGF0IGNlcnRhaW4gYnVpbHRpbgorICAgbGlicmFyeSByb3V0aW5lcyAoZS5nLiAudWRpdikgYmUgZXhwbGljaXRseSBkZWNsYXJlZCBhcyAuZ2xvYmwKKyAgIGluIGVhY2ggYXNzZW1ibHkgZmlsZSB3aGVyZSB0aGV5IGFyZSByZWZlcmVuY2VkLiAgKi8KKworI2RlZmluZSBBU01fT1VUUFVUX0VYVEVSTkFMX0xJQkNBTEwoRklMRSwgRlVOKQlcCisgICgqdGFyZ2V0bS5hc21fb3V0Lmdsb2JhbGl6ZV9sYWJlbCkgKEZJTEUsIFhTVFIgKEZVTiwgMCkpCisKKy8qIFRoaXMgc2F5cyBob3cgdG8gb3V0cHV0IGFzc2VtYmxlciBjb2RlIHRvIGRlY2xhcmUgYW4KKyAgIHVuaW5pdGlhbGl6ZWQgZXh0ZXJuYWwgbGlua2FnZSBkYXRhIG9iamVjdC4gIFVuZGVyIFNWUjQsCisgICB0aGUgbGlua2VyIHNlZW1zIHRvIHdhbnQgdGhlIGFsaWdubWVudCBvZiBkYXRhIG9iamVjdHMKKyAgIHRvIGRlcGVuZCBvbiB0aGVpciB0eXBlcy4gIFdlIGRvIGV4YWN0bHkgdGhhdCBoZXJlLiAgKi8KKworI2RlZmluZSBDT01NT05fQVNNX09QCSJcdC5jb21tXHQiCisKKyN1bmRlZiAgQVNNX09VVFBVVF9BTElHTkVEX0NPTU1PTgorI2RlZmluZSBBU01fT1VUUFVUX0FMSUdORURfQ09NTU9OKEZJTEUsIE5BTUUsIFNJWkUsIEFMSUdOKQkJXAorICBkbwkJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJXAorICAgICAgZnByaW50ZiAoKEZJTEUpLCAiJXMiLCBDT01NT05fQVNNX09QKTsJCQkJXAorICAgICAgYXNzZW1ibGVfbmFtZSAoKEZJTEUpLCAoTkFNRSkpOwkJCQkJXAorICAgICAgZnByaW50ZiAoKEZJTEUpLCAiLCJIT1NUX1dJREVfSU5UX1BSSU5UX1VOU0lHTkVEIiwldVxuIiwJCVwKKwkgICAgICAgKFNJWkUpLCAoQUxJR04pIC8gQklUU19QRVJfVU5JVCk7CQkJXAorICAgIH0JCQkJCQkJCQlcCisgIHdoaWxlICgwKQorCisvKiBUaGlzIHNheXMgaG93IHRvIG91dHB1dCBhc3NlbWJsZXIgY29kZSB0byBkZWNsYXJlIGFuCisgICB1bmluaXRpYWxpemVkIGludGVybmFsIGxpbmthZ2UgZGF0YSBvYmplY3QuICBVbmRlciBTVlI0LAorICAgdGhlIGxpbmtlciBzZWVtcyB0byB3YW50IHRoZSBhbGlnbm1lbnQgb2YgZGF0YSBvYmplY3RzCisgICB0byBkZXBlbmQgb24gdGhlaXIgdHlwZXMuICBXZSBkbyBleGFjdGx5IHRoYXQgaGVyZS4gICovCisKKyNkZWZpbmUgTE9DQUxfQVNNX09QCSJcdC5sb2NhbFx0IgorCisjdW5kZWYgIEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTAorI2RlZmluZSBBU01fT1VUUFVUX0FMSUdORURfTE9DQUwoRklMRSwgTkFNRSwgU0laRSwgQUxJR04pCVwKKyAgZG8JCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICBmcHJpbnRmICgoRklMRSksICIlcyIsIExPQ0FMX0FTTV9PUCk7CQkJXAorICAgICAgYXNzZW1ibGVfbmFtZSAoKEZJTEUpLCAoTkFNRSkpOwkJCQlcCisgICAgICBmcHJpbnRmICgoRklMRSksICJcbiIpOwkJCQkJXAorICAgICAgQVNNX09VVFBVVF9BTElHTkVEX0NPTU1PTiAoRklMRSwgTkFNRSwgU0laRSwgQUxJR04pOwlcCisgICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogVGhpcyBpcyB0aGUgcHNldWRvLW9wIHVzZWQgdG8gZ2VuZXJhdGUgYSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJ5dGUKKyAgIHZhbHVlcyBmcm9tIGEgZG91YmxlLXF1b3RlZCBzdHJpbmcgV0lUSE9VVCBIQVZJTkcgQSBURVJNSU5BVElORyBOVUwKKyAgIEFVVE9NQVRJQ0FMTFkgQVBQRU5ERUQuICBUaGlzIGlzIHRoZSBzYW1lIGZvciBtb3N0IHN2cjQgYXNzZW1ibGVycy4gICovCisKKyN1bmRlZiAgQVNDSUlfREFUQV9BU01fT1AKKyNkZWZpbmUgQVNDSUlfREFUQV9BU01fT1AJIlx0LmFzY2lpXHQiCisKKy8qIFN1cHBvcnQgYSByZWFkLW9ubHkgZGF0YSBzZWN0aW9uLiAgKi8KKyNkZWZpbmUgUkVBRE9OTFlfREFUQV9TRUNUSU9OX0FTTV9PUAkiXHQuc2VjdGlvblx0LnJvZGF0YSIKKworLyogT24gc3ZyNCwgd2UgKmRvKiBoYXZlIHN1cHBvcnQgZm9yIHRoZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMsIGFuZCB3ZQorICAgY2FuIHB1dCBzdHVmZiBpbiB0aGVyZSB0byBiZSBleGVjdXRlZCBiZWZvcmUgYW5kIGFmdGVyIGBtYWluJy4gIFdlIGxldAorICAgY3J0c3R1ZmYuYyBhbmQgb3RoZXIgZmlsZXMga25vdyB0aGlzIGJ5IGRlZmluaW5nIHRoZSBmb2xsb3dpbmcgc3ltYm9scy4KKyAgIFRoZSBkZWZpbml0aW9ucyBzYXkgaG93IHRvIGNoYW5nZSBzZWN0aW9ucyB0byB0aGUgLmluaXQgYW5kIC5maW5pCisgICBzZWN0aW9ucy4gIFRoaXMgaXMgdGhlIHNhbWUgZm9yIGFsbCBrbm93biBzdnI0IGFzc2VtYmxlcnMuICAqLworCisjZGVmaW5lIElOSVRfU0VDVElPTl9BU01fT1AJIlx0LnNlY3Rpb25cdC5pbml0IgorI2RlZmluZSBGSU5JX1NFQ1RJT05fQVNNX09QCSJcdC5zZWN0aW9uXHQuZmluaSIKKworLyogT3V0cHV0IGFzc2VtYmx5IGRpcmVjdGl2ZSB0byBtb3ZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgY3VycmVudCBzZWN0aW9uLiAgKi8KKyNpZmRlZiBIQVZFX0dBU19TVUJTRUNUSU9OX09SREVSSU5HCisjIGRlZmluZSBBU01fU0VDVElPTl9TVEFSVF9PUAkiXHQuc3Vic2VjdGlvblx0LTEiCisjIGRlZmluZSBBU01fT1VUUFVUX1NFQ1RJT05fU1RBUlQoRklMRSkJXAorICBmcHJpbnRmICgoRklMRSksICIlc1xuIiwgQVNNX1NFQ1RJT05fU1RBUlRfT1ApCisjZW5kaWYKKworI2RlZmluZSBNQUtFX0RFQ0xfT05FX09OTFkoREVDTCkgKERFQ0xfV0VBSyAoREVDTCkgPSAxKQorCisvKiBTd2l0Y2ggaW50byBhIGdlbmVyaWMgc2VjdGlvbi4gICovCisjZGVmaW5lIFRBUkdFVF9BU01fTkFNRURfU0VDVElPTiAgZGVmYXVsdF9lbGZfYXNtX25hbWVkX3NlY3Rpb24KKworI3VuZGVmICBUQVJHRVRfQVNNX1NFTEVDVF9SVFhfU0VDVElPTgorI2RlZmluZSBUQVJHRVRfQVNNX1NFTEVDVF9SVFhfU0VDVElPTiBkZWZhdWx0X2VsZl9zZWxlY3RfcnR4X3NlY3Rpb24KKyN1bmRlZglUQVJHRVRfQVNNX1NFTEVDVF9TRUNUSU9OCisjZGVmaW5lIFRBUkdFVF9BU01fU0VMRUNUX1NFQ1RJT04gZGVmYXVsdF9lbGZfc2VsZWN0X3NlY3Rpb24KKyN1bmRlZiAgVEFSR0VUX0hBVkVfU1dJVENIQUJMRV9CU1NfU0VDVElPTlMKKyNkZWZpbmUgVEFSR0VUX0hBVkVfU1dJVENIQUJMRV9CU1NfU0VDVElPTlMgdHJ1ZQorCisvKiBEZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCBmb3IgdGhlIHNwZWNpYWwgc3ZyNCAudHlwZSBhbmQgLnNpemUgZGlyZWN0aXZlcy4KKyAgIFRoZXNlIHN0cmluZ3MgZ2VuZXJhbGx5IGRvIG5vdCB2YXJ5IGZyb20gb25lIHN5c3RlbSBydW5uaW5nIHN2cjQgdG8KKyAgIGFub3RoZXIsIGJ1dCBpZiBhIGdpdmVuIHN5c3RlbSAoZS5nLiBtODhrIHJ1bm5pbmcgc3ZyKSBuZWVkcyB0byB1c2UKKyAgIGRpZmZlcmVudCBwc2V1ZG8tb3AgbmFtZXMgZm9yIHRoZXNlLCB0aGV5IG1heSBiZSBvdmVycmlkZGVuIGluIHRoZQorICAgZmlsZSB3aGljaCBpbmNsdWRlcyB0aGlzIG9uZS4gICovCisKKyNkZWZpbmUgVFlQRV9BU01fT1AJIlx0LnR5cGVcdCIKKyNkZWZpbmUgU0laRV9BU01fT1AJIlx0LnNpemVcdCIKKworLyogVGhpcyBpcyBob3cgd2UgdGVsbCB0aGUgYXNzZW1ibGVyIHRoYXQgYSBzeW1ib2wgaXMgd2Vhay4gICovCisKKyNkZWZpbmUgQVNNX1dFQUtFTl9MQUJFTChGSUxFLCBOQU1FKQlcCisgIGRvCQkJCQlcCisgICAgewkJCQkJXAorICAgICAgZnB1dHMgKCJcdC53ZWFrXHQiLCAoRklMRSkpOwlcCisgICAgICBhc3NlbWJsZV9uYW1lICgoRklMRSksIChOQU1FKSk7CVwKKyAgICAgIGZwdXRjICgnXG4nLCAoRklMRSkpOwkJXAorICAgIH0JCQkJCVwKKyAgd2hpbGUgKDApCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFjcm8gZGVmaW5lcyB0aGUgZm9ybWF0IHVzZWQgdG8gb3V0cHV0IHRoZSBzZWNvbmQKKyAgIG9wZXJhbmQgb2YgdGhlIC50eXBlIGFzc2VtYmxlciBkaXJlY3RpdmUuICBEaWZmZXJlbnQgc3ZyNCBhc3NlbWJsZXJzCisgICBleHBlY3QgdmFyaW91cyBkaWZmZXJlbnQgZm9ybXMgZm9yIHRoaXMgb3BlcmFuZC4gIFRoZSBvbmUgZ2l2ZW4gaGVyZQorICAgaXMganVzdCBhIGRlZmF1bHQuICBZb3UgbWF5IG5lZWQgdG8gb3ZlcnJpZGUgaXQgaW4geW91ciBtYWNoaW5lLQorICAgc3BlY2lmaWMgdG0uaCBmaWxlIChkZXBlbmRpbmcgdXBvbiB0aGUgcGFydGljdWxhcnMgb2YgeW91ciBhc3NlbWJsZXIpLiAgKi8KKworI2RlZmluZSBUWVBFX09QRVJBTkRfRk1UCSJAJXMiCisKKy8qIFdyaXRlIHRoZSBleHRyYSBhc3NlbWJsZXIgY29kZSBuZWVkZWQgdG8gZGVjbGFyZSBhIGZ1bmN0aW9uJ3MgcmVzdWx0LgorICAgTW9zdCBzdnI0IGFzc2VtYmxlcnMgZG9uJ3QgcmVxdWlyZSBhbnkgc3BlY2lhbCBkZWNsYXJhdGlvbiBvZiB0aGUKKyAgIHJlc3VsdCB2YWx1ZSwgYnV0IHRoZXJlIGFyZSBleGNlcHRpb25zLiAgKi8KKworI2lmbmRlZiBBU01fREVDTEFSRV9SRVNVTFQKKyNkZWZpbmUgQVNNX0RFQ0xBUkVfUkVTVUxUKEZJTEUsIFJFU1VMVCkKKyNlbmRpZgorCisvKiBUaGVzZSBtYWNyb3MgZ2VuZXJhdGUgdGhlIHNwZWNpYWwgLnR5cGUgYW5kIC5zaXplIGRpcmVjdGl2ZXMgd2hpY2gKKyAgIGFyZSB1c2VkIHRvIHNldCB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgb2YgdGhlIGxpbmtlciBzeW1ib2wgdGFibGUKKyAgIGVudHJpZXMgaW4gYW4gRUxGIG9iamVjdCBmaWxlIHVuZGVyIFNWUjQuICBUaGVzZSBtYWNyb3MgYWxzbyBvdXRwdXQKKyAgIHRoZSBzdGFydGluZyBsYWJlbHMgZm9yIHRoZSByZWxldmFudCBmdW5jdGlvbnMvb2JqZWN0cy4gICovCisKKy8qIFdyaXRlIHRoZSBleHRyYSBhc3NlbWJsZXIgY29kZSBuZWVkZWQgdG8gZGVjbGFyZSBhIGZ1bmN0aW9uIHByb3Blcmx5LgorICAgU29tZSBzdnI0IGFzc2VtYmxlcnMgbmVlZCB0byBhbHNvIGhhdmUgc29tZXRoaW5nIGV4dHJhIHNhaWQgYWJvdXQgdGhlCisgICBmdW5jdGlvbidzIHJldHVybiB2YWx1ZS4gIFdlIGFsbG93IGZvciB0aGF0IGhlcmUuICAqLworCisjaWZuZGVmIEFTTV9ERUNMQVJFX0ZVTkNUSU9OX05BTUUKKyNkZWZpbmUgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRShGSUxFLCBOQU1FLCBERUNMKQkJXAorICBkbwkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIEFTTV9PVVRQVVRfVFlQRV9ESVJFQ1RJVkUgKEZJTEUsIE5BTUUsICJmdW5jdGlvbiIpOwlcCisgICAgICBBU01fREVDTEFSRV9SRVNVTFQgKEZJTEUsIERFQ0xfUkVTVUxUIChERUNMKSk7CQlcCisgICAgICBBU01fT1VUUFVUX0ZVTkNUSU9OX0xBQkVMIChGSUxFLCBOQU1FLCBERUNMKTsJCVwKKyAgICB9CQkJCQkJCQlcCisgIHdoaWxlICgwKQorI2VuZGlmCisKKy8qIFdyaXRlIHRoZSBleHRyYSBhc3NlbWJsZXIgY29kZSBuZWVkZWQgdG8gZGVjbGFyZSBhbiBvYmplY3QgcHJvcGVybHkuICAqLworCisjaWZkZWYgSEFWRV9HQVNfR05VX1VOSVFVRV9PQkpFQ1QKKyNkZWZpbmUgVVNFX0dOVV9VTklRVUVfT0JKRUNUIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9HTlVfVU5JUVVFX09CSkVDVCAwCisjZW5kaWYKKworI2RlZmluZSBBU01fREVDTEFSRV9PQkpFQ1RfTkFNRShGSUxFLCBOQU1FLCBERUNMKQkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIEhPU1RfV0lERV9JTlQgc2l6ZTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgICAvKiBGb3IgdGVtcGxhdGUgc3RhdGljIGRhdGEgbWVtYmVyIGluc3RhbnRpYXRpb25zIG9yCQlcCisJIGlubGluZSBmbiBsb2NhbCBzdGF0aWNzIGFuZCB0aGVpciBndWFyZCB2YXJpYWJsZXMsIHVzZQkJXAorCSBnbnVfdW5pcXVlX29iamVjdCBzbyB0aGF0IHRoZXkgd2lsbCBiZSBjb21iaW5lZCBldmVuIHVuZGVyCVwKKwkgUlRMRF9MT0NBTC4gIERvbid0IHVzZSBnbnVfdW5pcXVlX29iamVjdCBmb3IgdHlwZWluZm8sCQlcCisJIHZ0YWJsZXMgYW5kIG90aGVyIHJlYWQtb25seSBhcnRpZmljaWFsIGRlY2xzLiAgKi8JCVwKKyAgICAgIGlmIChVU0VfR05VX1VOSVFVRV9PQkpFQ1QgJiYgREVDTF9PTkVfT05MWSAoREVDTCkJCQlcCisJICAmJiAoIURFQ0xfQVJUSUZJQ0lBTCAoREVDTCkgfHwgIVRSRUVfUkVBRE9OTFkgKERFQ0wpKSkJXAorCUFTTV9PVVRQVVRfVFlQRV9ESVJFQ1RJVkUgKEZJTEUsIE5BTUUsICJnbnVfdW5pcXVlX29iamVjdCIpOwlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRSAoRklMRSwgTkFNRSwgIm9iamVjdCIpOwkJXAorCQkJCQkJCQkJXAorICAgICAgc2l6ZV9kaXJlY3RpdmVfb3V0cHV0ID0gMDsJCQkJCVwKKyAgICAgIGlmICghZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlCQkJCQlcCisJICAmJiAoREVDTCkgJiYgREVDTF9TSVpFIChERUNMKSkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIHNpemVfZGlyZWN0aXZlX291dHB1dCA9IDE7CQkJCQlcCisJICBzaXplID0gaW50X3NpemVfaW5fYnl0ZXMgKFRSRUVfVFlQRSAoREVDTCkpOwkJCVwKKwkgIEFTTV9PVVRQVVRfU0laRV9ESVJFQ1RJVkUgKEZJTEUsIE5BTUUsIHNpemUpOwkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgICBBU01fT1VUUFVUX0xBQkVMIChGSUxFLCBOQU1FKTsJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogT3V0cHV0IHRoZSBzaXplIGRpcmVjdGl2ZSBmb3IgYSBkZWNsIGluIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbgorICAgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgZGlkIG5vdCBkbyBzbyBiZWZvcmUgdGhlIGluaXRpYWxpemVyLgorICAgT25jZSB3ZSBmaW5kIHRoZSBlcnJvcl9tYXJrX25vZGUsIHdlIGtub3cgdGhhdCB0aGUgdmFsdWUgb2YKKyAgIHNpemVfZGlyZWN0aXZlX291dHB1dCB3YXMgc2V0CisgICBieSBBU01fREVDTEFSRV9PQkpFQ1RfTkFNRSB3aGVuIGl0IHdhcyBydW4gZm9yIHRoZSBzYW1lIGRlY2wuICAqLworCisjdW5kZWYgQVNNX0ZJTklTSF9ERUNMQVJFX09CSkVDVAorI2RlZmluZSBBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNUKEZJTEUsIERFQ0wsIFRPUF9MRVZFTCwgQVRfRU5EKVwKKyAgZG8JCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisgICAgICBjb25zdCBjaGFyICpuYW1lID0gWFNUUiAoWEVYUCAoREVDTF9SVEwgKERFQ0wpLCAwKSwgMCk7CVwKKyAgICAgIEhPU1RfV0lERV9JTlQgc2l6ZTsJCQkJCVwKKwkJCQkJCQkJXAorICAgICAgaWYgKCFmbGFnX2luaGliaXRfc2l6ZV9kaXJlY3RpdmUJCQkJXAorCSAgJiYgREVDTF9TSVpFIChERUNMKQkJCQkJXAorCSAgJiYgISBBVF9FTkQgJiYgVE9QX0xFVkVMCQkJCVwKKwkgICYmIERFQ0xfSU5JVElBTCAoREVDTCkgPT0gZXJyb3JfbWFya19ub2RlCQlcCisJICAmJiAhc2l6ZV9kaXJlY3RpdmVfb3V0cHV0KQkJCQlcCisJewkJCQkJCQlcCisJICBzaXplX2RpcmVjdGl2ZV9vdXRwdXQgPSAxOwkJCQlcCisJICBzaXplID0gaW50X3NpemVfaW5fYnl0ZXMgKFRSRUVfVFlQRSAoREVDTCkpOwkJXAorCSAgQVNNX09VVFBVVF9TSVpFX0RJUkVDVElWRSAoRklMRSwgbmFtZSwgc2l6ZSk7CQlcCisJfQkJCQkJCQlcCisgICAgfQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKworLyogVGhpcyBpcyBob3cgdG8gZGVjbGFyZSB0aGUgc2l6ZSBvZiBhIGZ1bmN0aW9uLiAgKi8KKyNpZm5kZWYgQVNNX0RFQ0xBUkVfRlVOQ1RJT05fU0laRQorI2RlZmluZSBBU01fREVDTEFSRV9GVU5DVElPTl9TSVpFKEZJTEUsIEZOQU1FLCBERUNMKQkJXAorICBkbwkJCQkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIGlmICghZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlKQkJCQlcCisJQVNNX09VVFBVVF9NRUFTVVJFRF9TSVpFIChGSUxFLCBGTkFNRSk7CQkJXAorICAgIH0JCQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKworLyogQSB0YWJsZSBvZiBieXRlcyBjb2RlcyB1c2VkIGJ5IHRoZSBBU01fT1VUUFVUX0FTQ0lJIGFuZAorICAgQVNNX09VVFBVVF9MSU1JVEVEX1NUUklORyBtYWNyb3MuICBFYWNoIGJ5dGUgaW4gdGhlIHRhYmxlCisgICBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgYnl0ZSB2YWx1ZSBbMC4uMjU1XS4gIEZvciBhbnkKKyAgIGdpdmVuIGJ5dGUgdmFsdWUsIGlmIHRoZSB2YWx1ZSBpbiB0aGUgY29ycmVzcG9uZGluZyB0YWJsZQorICAgcG9zaXRpb24gaXMgemVybywgdGhlIGdpdmVuIGNoYXJhY3RlciBjYW4gYmUgb3V0cHV0IGRpcmVjdGx5LgorICAgSWYgdGhlIHRhYmxlIHZhbHVlIGlzIDEsIHRoZSBieXRlIG11c3QgYmUgb3V0cHV0IGFzIGEgXG9vbworICAgb2N0YWwgZXNjYXBlLiAgSWYgdGhlIHRhYmxlcyB2YWx1ZSBpcyBhbnl0aGluZyBlbHNlLCB0aGVuIHRoZQorICAgYnl0ZSB2YWx1ZSBzaG91bGQgYmUgb3V0cHV0IGFzIGEgXCBmb2xsb3dlZCBieSB0aGUgdmFsdWUKKyAgIGluIHRoZSB0YWJsZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHN0YW5kYXJkIFVOKlggZXNjYXBlCisgICBzZXF1ZW5jZXMgZm9yIG1hbnkgY29udHJvbCBjaGFyYWN0ZXJzLCBidXQgd2UgZG9uJ3QgdXNlCisgICBcYSB0byByZXByZXNlbnQgQkVMIGJlY2F1c2Ugc29tZSBzdnI0IGFzc2VtYmxlcnMgKGUuZy4gb24KKyAgIHRoZSBpMzg2KSBkb24ndCBrbm93IGFib3V0IHRoYXQuICBBbHNvLCB3ZSBkb24ndCB1c2UgXHYKKyAgIHNpbmNlIHNvbWUgdmVyc2lvbnMgb2YgZ2FzLCBzdWNoIGFzIDIuMiBkaWQgbm90IGFjY2VwdCBpdC4gICovCisKKyNkZWZpbmUgRUxGX0FTQ0lJX0VTQ0FQRVMgXAorIlwxXDFcMVwxXDFcMVwxXDFidG5cMWZyXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXAorXDBcMFwiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwKK1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXFxcMFwwXDBcCitcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwxXAorXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwKK1wxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcCitcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXAorXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMVwxXDFcMSIKKworLyogU29tZSBzdnI0IGFzc2VtYmxlcnMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaAorICAgY2FuIGFwcGVhciBpbiB0aGUgb3BlcmFuZCBvZiBhIC5zdHJpbmcgZGlyZWN0aXZlLiAgSWYgeW91ciBhc3NlbWJsZXIKKyAgIGhhcyBzdWNoIGEgbGltaXRhdGlvbiwgeW91IHNob3VsZCBkZWZpbmUgU1RSSU5HX0xJTUlUIHRvIHJlZmxlY3QgdGhhdAorICAgbGltaXQuICBOb3RlIHRoYXQgYXQgbGVhc3Qgc29tZSBzdnI0IGFzc2VtYmxlcnMgaGF2ZSBhIGxpbWl0IG9uIHRoZQorICAgYWN0dWFsIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZG91YmxlLXF1b3RlZCBzdHJpbmcsIGFuZCB0aGF0IHRoZXkKKyAgIGNvdW50IGVhY2ggY2hhcmFjdGVyIGluIGFuIGVzY2FwZSBzZXF1ZW5jZSBhcyBvbmUgYnl0ZS4gIFRodXMsIGFuCisgICBlc2NhcGUgc2VxdWVuY2UgbGlrZSBcMzc3IHdvdWxkIGNvdW50IGFzIGZvdXIgYnl0ZXMuCisKKyAgIElmIHlvdXIgdGFyZ2V0IGFzc2VtYmxlciBkb2Vzbid0IHN1cHBvcnQgdGhlIC5zdHJpbmcgZGlyZWN0aXZlLCB5b3UKKyAgIHNob3VsZCBkZWZpbmUgdGhpcyB0byB6ZXJvLgorKi8KKworI2RlZmluZSBFTEZfU1RSSU5HX0xJTUlUCSgodW5zaWduZWQpIDI1NikKKworI2RlZmluZSBTVFJJTkdfQVNNX09QCSJcdC5zdHJpbmdcdCIKKworLyogVGhlIHJvdXRpbmUgdXNlZCB0byBvdXRwdXQgTlVMIHRlcm1pbmF0ZWQgc3RyaW5ncy4gIFdlIHVzZSBhIHNwZWNpYWwKKyAgIHZlcnNpb24gb2YgdGhpcyBmb3IgbW9zdCBzdnI0IHRhcmdldHMgYmVjYXVzZSBkb2luZyBzbyBtYWtlcyB0aGUKKyAgIGdlbmVyYXRlZCBhc3NlbWJseSBjb2RlIG1vcmUgY29tcGFjdCAoYW5kIHRodXMgZmFzdGVyIHRvIGFzc2VtYmxlKQorICAgYXMgd2VsbCBhcyBtb3JlIHJlYWRhYmxlLCBlc3BlY2lhbGx5IGZvciB0YXJnZXRzIGxpa2UgdGhlIGkzODYKKyAgICh3aGVyZSB0aGUgb25seSBhbHRlcm5hdGl2ZSBpcyB0byBvdXRwdXQgY2hhcmFjdGVyIHNlcXVlbmNlcyBhcworICAgY29tbWEgc2VwYXJhdGVkIGxpc3RzIG9mIG51bWJlcnMpLiAgKi8KKworI2RlZmluZSBBU01fT1VUUFVUX0xJTUlURURfU1RSSU5HKEZJTEUsIFNUUikJCVwKKyAgZGVmYXVsdF9lbGZfYXNtX291dHB1dF9saW1pdGVkX3N0cmluZyAoKEZJTEUpLCAoU1RSKSkKKworLyogVGhlIHJvdXRpbmUgdXNlZCB0byBvdXRwdXQgc2VxdWVuY2VzIG9mIGJ5dGUgdmFsdWVzLiAgV2UgdXNlIGEgc3BlY2lhbAorICAgdmVyc2lvbiBvZiB0aGlzIGZvciBtb3N0IHN2cjQgdGFyZ2V0cyBiZWNhdXNlIGRvaW5nIHNvIG1ha2VzIHRoZQorICAgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgbW9yZSBjb21wYWN0IChhbmQgdGh1cyBmYXN0ZXIgdG8gYXNzZW1ibGUpCisgICBhcyB3ZWxsIGFzIG1vcmUgcmVhZGFibGUuICBOb3RlIHRoYXQgaWYgd2UgZmluZCBzdWJwYXJ0cyBvZiB0aGUKKyAgIGNoYXJhY3RlciBzZXF1ZW5jZSB3aGljaCBlbmQgd2l0aCBOVUwgKGFuZCB3aGljaCBhcmUgc2hvcnRlciB0aGFuCisgICBTVFJJTkdfTElNSVQpIHdlIG91dHB1dCB0aG9zZSB1c2luZyBBU01fT1VUUFVUX0xJTUlURURfU1RSSU5HLiAgKi8KKworI3VuZGVmICBBU01fT1VUUFVUX0FTQ0lJCisjZGVmaW5lIEFTTV9PVVRQVVRfQVNDSUkoRklMRSwgU1RSLCBMRU5HVEgpCQkJXAorICBkZWZhdWx0X2VsZl9hc21fb3V0cHV0X2FzY2lpICgoRklMRSksIChTVFIpLCAoTEVOR1RIKSk7CisKKy8qIEFsbG93IHRoZSB1c2Ugb2YgdGhlIC1mcmVjb3JkLWdjYy1zd2l0Y2hlcyBzd2l0Y2ggdmlhIHRoZQorICAgZWxmX3JlY29yZF9nY2Nfc3dpdGNoZXMgZnVuY3Rpb24gZGVmaW5lZCBpbiB2YXJhc20uYy4gICovCisjdW5kZWYgIFRBUkdFVF9BU01fUkVDT1JEX0dDQ19TV0lUQ0hFUworI2RlZmluZSBUQVJHRVRfQVNNX1JFQ09SRF9HQ0NfU1dJVENIRVMgZWxmX3JlY29yZF9nY2Nfc3dpdGNoZXMKKworLyogQSBDIHN0YXRlbWVudCAoc2FucyBzZW1pY29sb24pIHRvIG91dHB1dCB0byB0aGUgc3RkaW8gc3RyZWFtIFNUUkVBTQorICAgYW55IHRleHQgbmVjZXNzYXJ5IGZvciBkZWNsYXJpbmcgdGhlIG5hbWUgb2YgYW4gZXh0ZXJuYWwgc3ltYm9sCisgICBuYW1lZCBOQU1FIHdoaWNoIGlzIHJlZmVyZW5jZWQgaW4gdGhpcyBjb21waWxhdGlvbiBidXQgbm90IGRlZmluZWQuCisgICBJdCBpcyBuZWVkZWQgdG8gcHJvcGVybHkgc3VwcG9ydCBub24tZGVmYXVsdCB2aXNpYmlsaXR5LiAgKi8KKworI2lmbmRlZiBBU01fT1VUUFVUX0VYVEVSTkFMCisjZGVmaW5lIEFTTV9PVVRQVVRfRVhURVJOQUwoRklMRSwgREVDTCwgTkFNRSkgXAorICBkZWZhdWx0X2VsZl9hc21fb3V0cHV0X2V4dGVybmFsIChGSUxFLCBERUNMLCBOQU1FKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2luaXRmaW5pLWFycmF5LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL2luaXRmaW5pLWFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0ODcwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvaW5pdGZpbmktYXJyYXkuaApAQCAtMCwwICsxLDQwIEBACisvKiBEZWZpbml0aW9ucyBmb3IgRUxGIHN5c3RlbXMgd2l0aCAuaW5pdF9hcnJheS8uZmluaV9hcnJheSBzZWN0aW9uCisgICBzdXBwb3J0LgorICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91cgorICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAgIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZkZWYgSEFWRV9JTklURklOSV9BUlJBWV9TVVBQT1JUCisKKyNkZWZpbmUgVVNFX0lOSVRGSU5JX0FSUkFZCisKKyN1bmRlZiBJTklUX1NFQ1RJT05fQVNNX09QCisjdW5kZWYgRklOSV9TRUNUSU9OX0FTTV9PUAorCisjdW5kZWYgSU5JVF9BUlJBWV9TRUNUSU9OX0FTTV9PUAorI2RlZmluZSBJTklUX0FSUkFZX1NFQ1RJT05fQVNNX09QCisKKyN1bmRlZiBGSU5JX0FSUkFZX1NFQ1RJT05fQVNNX09QCisjZGVmaW5lIEZJTklfQVJSQVlfU0VDVElPTl9BU01fT1AKKworLyogVXNlIC5pbml0X2FycmF5Ly5maW5pX2FycmF5IHNlY3Rpb24gZm9yIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuICovCisjdW5kZWYgVEFSR0VUX0FTTV9DT05TVFJVQ1RPUgorI2RlZmluZSBUQVJHRVRfQVNNX0NPTlNUUlVDVE9SIGRlZmF1bHRfZWxmX2luaXRfYXJyYXlfYXNtX291dF9jb25zdHJ1Y3RvcgorI3VuZGVmIFRBUkdFVF9BU01fREVTVFJVQ1RPUgorI2RlZmluZSBUQVJHRVRfQVNNX0RFU1RSVUNUT1IgZGVmYXVsdF9lbGZfZmluaV9hcnJheV9hc21fb3V0X2Rlc3RydWN0b3IKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL25ld2xpYi1zdGRpbnQuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWcvbmV3bGliLXN0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjgzYTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29uZmlnL25ld2xpYi1zdGRpbnQuaApAQCAtMCwwICsxLDY0IEBACisvKiBEZWZpbml0aW9ucyBmb3IgPHN0ZGludC5oPiB0eXBlcyBvbiBzeXN0ZW1zIHVzaW5nIG5ld2xpYi4KKyAgIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogbmV3bGliIHVzZXMgMzItYml0IGxvbmcgaW4gY2VydGFpbiBjYXNlcyBmb3IgYWxsIG5vbi1TUFUKKyAgIHRhcmdldHMuICAqLworI2lmbmRlZiBTVERJTlRfTE9ORzMyCisjZGVmaW5lIFNURElOVF9MT05HMzIgKExPTkdfVFlQRV9TSVpFID09IDMyKQorI2VuZGlmCisKKyNkZWZpbmUgU0lHX0FUT01JQ19UWVBFICJpbnQiCisKKy8qIFRoZSBuZXdsaWIgbG9naWMgYWN0dWFsbHkgY2hlY2tzIGZvciBzaXplcyBncmVhdGVyIHRoYW4gMzIgcmF0aGVyCisgICB0aGFuIGVxdWFsIHRvIDY0IGZvciB2YXJpb3VzIDY0LWJpdCB0eXBlcy4gICovCisKKyNkZWZpbmUgSU5UOF9UWVBFIChDSEFSX1RZUEVfU0laRSA9PSA4ID8gInNpZ25lZCBjaGFyIiA6IDApCisjZGVmaW5lIElOVDE2X1RZUEUgKFNIT1JUX1RZUEVfU0laRSA9PSAxNiA/ICJzaG9ydCBpbnQiIDogSU5UX1RZUEVfU0laRSA9PSAxNiA/ICJpbnQiIDogQ0hBUl9UWVBFX1NJWkUgPT0gMTYgPyAic2lnbmVkIGNoYXIiIDogMCkKKyNkZWZpbmUgSU5UMzJfVFlQRSAoU1RESU5UX0xPTkczMiA/ICJsb25nIGludCIgOiBJTlRfVFlQRV9TSVpFID09IDMyID8gImludCIgOiBTSE9SVF9UWVBFX1NJWkUgPT0gMzIgPyAic2hvcnQgaW50IiA6IENIQVJfVFlQRV9TSVpFID09IDMyID8gInNpZ25lZCBjaGFyIiA6IDApCisjZGVmaW5lIElOVDY0X1RZUEUgKExPTkdfVFlQRV9TSVpFID09IDY0ID8gImxvbmcgaW50IiA6IExPTkdfTE9OR19UWVBFX1NJWkUgPT0gNjQgPyAibG9uZyBsb25nIGludCIgOiBJTlRfVFlQRV9TSVpFID09IDY0ID8gImludCIgOiAwKQorI2RlZmluZSBVSU5UOF9UWVBFIChDSEFSX1RZUEVfU0laRSA9PSA4ID8gInVuc2lnbmVkIGNoYXIiIDogMCkKKyNkZWZpbmUgVUlOVDE2X1RZUEUgKFNIT1JUX1RZUEVfU0laRSA9PSAxNiA/ICJzaG9ydCB1bnNpZ25lZCBpbnQiIDogSU5UX1RZUEVfU0laRSA9PSAxNiA/ICJ1bnNpZ25lZCBpbnQiIDogQ0hBUl9UWVBFX1NJWkUgPT0gMTYgPyAidW5zaWduZWQgY2hhciIgOiAwKQorI2RlZmluZSBVSU5UMzJfVFlQRSAoU1RESU5UX0xPTkczMiA/ICJsb25nIHVuc2lnbmVkIGludCIgOiBJTlRfVFlQRV9TSVpFID09IDMyID8gInVuc2lnbmVkIGludCIgOiBTSE9SVF9UWVBFX1NJWkUgPT0gMzIgPyAic2hvcnQgdW5zaWduZWQgaW50IiA6IENIQVJfVFlQRV9TSVpFID09IDMyID8gInVuc2lnbmVkIGNoYXIiIDogMCkKKyNkZWZpbmUgVUlOVDY0X1RZUEUgKExPTkdfVFlQRV9TSVpFID09IDY0ID8gImxvbmcgdW5zaWduZWQgaW50IiA6IExPTkdfTE9OR19UWVBFX1NJWkUgPT0gNjQgPyAibG9uZyBsb25nIHVuc2lnbmVkIGludCIgOiBJTlRfVFlQRV9TSVpFID09IDY0ID8gInVuc2lnbmVkIGludCIgOiAwKQorCisjZGVmaW5lIElOVF9MRUFTVDhfVFlQRSAoSU5UOF9UWVBFID8gSU5UOF9UWVBFIDogSU5UMTZfVFlQRSA/IElOVDE2X1RZUEUgOiBJTlQzMl9UWVBFID8gSU5UMzJfVFlQRSA6IElOVDY0X1RZUEUgPyBJTlQ2NF9UWVBFIDogMCkKKyNkZWZpbmUgSU5UX0xFQVNUMTZfVFlQRSAoSU5UMTZfVFlQRSA/IElOVDE2X1RZUEUgOiBJTlQzMl9UWVBFID8gSU5UMzJfVFlQRSA6IElOVDY0X1RZUEUgPyBJTlQ2NF9UWVBFIDogMCkKKyNkZWZpbmUgSU5UX0xFQVNUMzJfVFlQRSAoSU5UMzJfVFlQRSA/IElOVDMyX1RZUEUgOiBJTlQ2NF9UWVBFID8gSU5UNjRfVFlQRSA6IDApCisjZGVmaW5lIElOVF9MRUFTVDY0X1RZUEUgSU5UNjRfVFlQRQorI2RlZmluZSBVSU5UX0xFQVNUOF9UWVBFIChVSU5UOF9UWVBFID8gVUlOVDhfVFlQRSA6IFVJTlQxNl9UWVBFID8gVUlOVDE2X1RZUEUgOiBVSU5UMzJfVFlQRSA/IFVJTlQzMl9UWVBFIDogVUlOVDY0X1RZUEUgPyBVSU5UNjRfVFlQRSA6IDApCisjZGVmaW5lIFVJTlRfTEVBU1QxNl9UWVBFIChVSU5UMTZfVFlQRSA/IFVJTlQxNl9UWVBFIDogVUlOVDMyX1RZUEUgPyBVSU5UMzJfVFlQRSA6IFVJTlQ2NF9UWVBFID8gVUlOVDY0X1RZUEUgOiAwKQorI2RlZmluZSBVSU5UX0xFQVNUMzJfVFlQRSAoVUlOVDMyX1RZUEUgPyBVSU5UMzJfVFlQRSA6IFVJTlQ2NF9UWVBFID8gVUlOVDY0X1RZUEUgOiAwKQorI2RlZmluZSBVSU5UX0xFQVNUNjRfVFlQRSBVSU5UNjRfVFlQRQorCisjZGVmaW5lIElOVF9GQVNUOF9UWVBFIChJTlRfVFlQRV9TSVpFID49IDggPyAiaW50IiA6IElOVF9MRUFTVDhfVFlQRSkKKyNkZWZpbmUgSU5UX0ZBU1QxNl9UWVBFIChJTlRfVFlQRV9TSVpFID49IDE2ID8gImludCIgOiBJTlRfTEVBU1QxNl9UWVBFKQorI2RlZmluZSBJTlRfRkFTVDMyX1RZUEUgKElOVF9UWVBFX1NJWkUgPj0gMzIgPyAiaW50IiA6IElOVF9MRUFTVDMyX1RZUEUpCisjZGVmaW5lIElOVF9GQVNUNjRfVFlQRSAoSU5UX1RZUEVfU0laRSA+PSA2NCA/ICJpbnQiIDogSU5UX0xFQVNUNjRfVFlQRSkKKyNkZWZpbmUgVUlOVF9GQVNUOF9UWVBFIChJTlRfVFlQRV9TSVpFID49IDggPyAidW5zaWduZWQgaW50IiA6IFVJTlRfTEVBU1Q4X1RZUEUpCisjZGVmaW5lIFVJTlRfRkFTVDE2X1RZUEUgKElOVF9UWVBFX1NJWkUgPj0gMTYgPyAidW5zaWduZWQgaW50IiA6IFVJTlRfTEVBU1QxNl9UWVBFKQorI2RlZmluZSBVSU5UX0ZBU1QzMl9UWVBFIChJTlRfVFlQRV9TSVpFID49IDMyID8gInVuc2lnbmVkIGludCIgOiBVSU5UX0xFQVNUMzJfVFlQRSkKKyNkZWZpbmUgVUlOVF9GQVNUNjRfVFlQRSAoSU5UX1RZUEVfU0laRSA+PSA2NCA/ICJ1bnNpZ25lZCBpbnQiIDogVUlOVF9MRUFTVDY0X1RZUEUpCisKKy8qIE5ld2xpYiB1c2VzIHRoZSB1bnNpZ25lZCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gcHRyZGlmZl90IGZvcgorICAgdWludHB0cl90OyB0aGlzIGlzIHRoZSBzYW1lIGFzIHNpemVfdCBmb3IgbW9zdCBuZXdsaWItdXNpbmcKKyAgIHRhcmdldHMuICAqLworI2RlZmluZSBJTlRQVFJfVFlQRSBQVFJESUZGX1RZUEUKKyNpZm5kZWYgVUlOVFBUUl9UWVBFCisjZGVmaW5lIFVJTlRQVFJfVFlQRSBTSVpFX1RZUEUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NvbmZpZ2FyZ3MuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWdhcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkMDEzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb25maWdhcmdzLmgKQEAgLTAsMCArMSw3IEBACisvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyIGNvbmZpZ3VyYXRpb25fYXJndW1lbnRzW10gPSAiL2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9zcmMvZ2NjLWxpbmFyby00LjgtMjAxMy4xMS9jb25maWd1cmUgLS1idWlsZD1pNjg2LWJ1aWxkX3BjLWxpbnV4LWdudSAtLWhvc3Q9aTY4Ni1idWlsZF9wYy1saW51eC1nbnUgLS10YXJnZXQ9YWFyY2g2NC1ub25lLWVsZiAtLXByZWZpeD0vY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvaW5zdGFsbCAtLXdpdGgtbG9jYWwtcHJlZml4PS9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC9pbnN0YWxsL2FhcmNoNjQtbm9uZS1lbGYgLS13aXRob3V0LWhlYWRlcnMgLS13aXRoLW5ld2xpYiAtLWVuYWJsZS10aHJlYWRzPW5vIC0tZGlzYWJsZS1zaGFyZWQgLS13aXRoLXBrZ3ZlcnNpb249J2Nyb3NzdG9vbC1ORyBsaW5hcm8tMS4xMy4xLTQuOC0yMDEzLjExIC0gTGluYXJvIEdDQyAyMDEzLjEwJyAtLXdpdGgtYnVndXJsPWh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L2djYy1saW5hcm8gLS13aXRoLWFyY2g9YXJtdjgtYSAtLWRpc2FibGUtX19jeGFfYXRleGl0IC0td2l0aC1nbXA9L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9hYXJjaDY0LW5vbmUtZWxmL2J1aWxkL3N0YXRpYyAtLXdpdGgtbXBmcj0vY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL2FhcmNoNjQtbm9uZS1lbGYvYnVpbGQvc3RhdGljIC0td2l0aC1tcGM9L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4Ly5idWlsZC9hYXJjaDY0LW5vbmUtZWxmL2J1aWxkL3N0YXRpYyAtLXdpdGgtaXNsPS9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvYWFyY2g2NC1ub25lLWVsZi9idWlsZC9zdGF0aWMgLS13aXRoLWNsb29nPS9jYnVpbGQvc2xhdmVzL29vcnRzL2Nyb3NzdG9vbC1uZy9idWlsZHMvYWFyY2g2NC1ub25lLWVsZi1saW51eC8uYnVpbGQvYWFyY2g2NC1ub25lLWVsZi9idWlsZC9zdGF0aWMgLS13aXRoLWxpYmVsZj0vY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL2FhcmNoNjQtbm9uZS1lbGYvYnVpbGQvc3RhdGljIC0tZW5hYmxlLWx0byAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgLS1kaXNhYmxlLWxpYm11ZGZsYXAgLS1kaXNhYmxlLWxpYmdvbXAgLS1kaXNhYmxlLWxpYnNzcCAtLWRpc2FibGUtbGlic3RkY3h4LXBjaCAtLWVuYWJsZS1tdWx0aWFyY2ggLS1kaXNhYmxlLW11bHRpbGliIC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKyxmb3J0cmFuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHRocmVhZF9tb2RlbFtdID0gInNpbmdsZSI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lLCAqdmFsdWU7Cit9IGNvbmZpZ3VyZV9kZWZhdWx0X29wdGlvbnNbXSA9IHsgeyAiYXJjaCIsICJhcm12OC1hIiB9IH07CmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29yZXR5cGVzLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY29yZXR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkMDMxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jb3JldHlwZXMuaApAQCAtMCwwICsxLDIxMCBAQAorLyogR0NDIGNvcmUgdHlwZSBkZWNsYXJhdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKK3Blcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKzMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKK3NlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogUHJvdmlkZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBjb3JlIHR5cGVzIHdoaWNoIGFyZSByZWZlcnJlZCB0byBieQorICAgbW9zdCBvZiB0aGUgY29tcGlsZXIuICBUaGlzIGFsbG93cyBoZWFkZXIgZmlsZXMgdG8gdXNlIHRoZXNlIHR5cGVzCisgICAoZS5nLiBpbiBmdW5jdGlvbiBwcm90b3R5cGVzKSB3aXRob3V0IGNvbmNlcm4gZm9yIHdoZXRoZXIgdGhlIGZ1bGwKKyAgIGRlZmluaXRpb25zIGFyZSB2aXNpYmxlLiAgU29tZSBvdGhlciBkZWNsYXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlCisgICB1bml2ZXJzYWxseSB2aXNpYmxlIGFyZSBoZXJlLCB0b28uCisKKyAgIEluIHRoZSBjb250ZXh0IG9mIHRjb25maWcuaCwgbW9zdCBvZiB0aGVzZSBoYXZlIHNwZWNpYWwgZGVmaW5pdGlvbnMKKyAgIHdoaWNoIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIHVzZWQgZXhjZXB0IGluIGZ1cnRoZXIgdHlwZQorICAgZGVjbGFyYXRpb25zLiAgVGhpcyBpcyBhIGtsdWRnZTsgdGhlIHJpZ2h0IHRoaW5nIGlzIHRvIGF2b2lkCisgICBpbmNsdWRpbmcgdGhlICJ0bS5oIiBoZWFkZXIgc2V0IGluIHRoZSBjb250ZXh0IG9mIHRjb25maWcuaCwgYnV0CisgICB3ZSdyZSBub3QgdGhlcmUgeWV0LiAgKi8KKworI2lmbmRlZiBHQ0NfQ09SRVRZUEVTX0gKKyNkZWZpbmUgR0NDX0NPUkVUWVBFU19ICisKKyNpZm5kZWYgR1RZCisjZGVmaW5lIEdUWSh4KSAgLyogbm90aGluZyAtIG1hcmtlciBmb3IgZ2VuZ3R5cGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVAorCitzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmOwordHlwZWRlZiBzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmICpiaXRtYXA7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKmNvbnN0X2JpdG1hcDsKK3N0cnVjdCBzaW1wbGVfYml0bWFwX2RlZjsKK3R5cGVkZWYgc3RydWN0IHNpbXBsZV9iaXRtYXBfZGVmICpzYml0bWFwOwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgc2ltcGxlX2JpdG1hcF9kZWYgKmNvbnN0X3NiaXRtYXA7CitzdHJ1Y3QgcnR4X2RlZjsKK3R5cGVkZWYgc3RydWN0IHJ0eF9kZWYgKnJ0eDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHJ0eF9kZWYgKmNvbnN0X3J0eDsKK3N0cnVjdCBydHZlY19kZWY7Cit0eXBlZGVmIHN0cnVjdCBydHZlY19kZWYgKnJ0dmVjOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgcnR2ZWNfZGVmICpjb25zdF9ydHZlYzsKK3VuaW9uIHRyZWVfbm9kZTsKK3R5cGVkZWYgdW5pb24gdHJlZV9ub2RlICp0cmVlOwordHlwZWRlZiBjb25zdCB1bmlvbiB0cmVlX25vZGUgKmNvbnN0X3RyZWU7Cit1bmlvbiBnaW1wbGVfc3RhdGVtZW50X2Q7Cit0eXBlZGVmIHVuaW9uIGdpbXBsZV9zdGF0ZW1lbnRfZCAqZ2ltcGxlOwordHlwZWRlZiBjb25zdCB1bmlvbiBnaW1wbGVfc3RhdGVtZW50X2QgKmNvbnN0X2dpbXBsZTsKK3R5cGVkZWYgZ2ltcGxlIGdpbXBsZV9zZXE7CitzdHJ1Y3QgZ2ltcGxlX3N0bXRfaXRlcmF0b3JfZDsKK3R5cGVkZWYgc3RydWN0IGdpbXBsZV9zdG10X2l0ZXJhdG9yX2QgZ2ltcGxlX3N0bXRfaXRlcmF0b3I7Cit1bmlvbiBzZWN0aW9uOwordHlwZWRlZiB1bmlvbiBzZWN0aW9uIHNlY3Rpb247CitzdHJ1Y3QgZ2NjX29wdGlvbnM7CitzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbjsKK3N0cnVjdCBjbF9vcHRpbWl6YXRpb247CitzdHJ1Y3QgY2xfb3B0aW9uOworc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uOworc3RydWN0IGNsX29wdGlvbl9oYW5kbGVyczsKK3N0cnVjdCBkaWFnbm9zdGljX2NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBkaWFnbm9zdGljX2NvbnRleHQgZGlhZ25vc3RpY19jb250ZXh0Oworc3RydWN0IHByZXR0eV9wcmludF9pbmZvOwordHlwZWRlZiBzdHJ1Y3QgcHJldHR5X3ByaW50X2luZm8gcHJldHR5X3ByaW50ZXI7CisKKy8qIEFkZHJlc3Mgc3BhY2UgbnVtYmVyIGZvciBuYW1lZCBhZGRyZXNzIHNwYWNlIHN1cHBvcnQuICAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGFkZHJfc3BhY2VfdDsKKworLyogVGhlIHZhbHVlIG9mIGFkZHJfc3BhY2VfdCB0aGF0IHJlcHJlc2VudHMgdGhlIGdlbmVyaWMgYWRkcmVzcyBzcGFjZS4gICovCisjZGVmaW5lIEFERFJfU1BBQ0VfR0VORVJJQyAwCisjZGVmaW5lIEFERFJfU1BBQ0VfR0VORVJJQ19QKEFTKSAoKEFTKSA9PSBBRERSX1NQQUNFX0dFTkVSSUMpCisKKy8qIFRoZSBtYWpvciBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb25zIG9mIEdDQy4gICovCitlbnVtIGlyX3R5cGUgeworICBJUl9HSU1QTEUsCisgIElSX1JUTF9DRkdSVEwsCisgIElSX1JUTF9DRkdMQVlPVVQKK307CisKKy8qIFByb3ZpZGUgZm9yd2FyZCBzdHJ1Y3QgZGVjbGFyYXRpb24gc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGluY2x1ZGUKKyAgIGFsbCBvZiBjcHBsaWIuaCB3aGVuZXZlciBhIHJhbmRvbSBwcm90b3R5cGUgaW5jbHVkZXMgYSBwb2ludGVyLgorICAgTm90ZSB0aGF0IHRoZSBjcHBfcmVhZGVyIGFuZCBjcHBfdG9rZW4gdHlwZWRlZnMgcmVtYWluIHBhcnQgb2YKKyAgIGNwcGxpYi5oLiAgKi8KKworc3RydWN0IGNwcF9yZWFkZXI7CitzdHJ1Y3QgY3BwX3Rva2VuOworCisvKiBUaGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgbW9kZWwgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gVkFSX0RFQ0wKKyAgIG9yIFNZTUJPTF9SRUYuICBUaGlzIGlzbid0IHVzZWQgbXVjaCwgYnV0IGJvdGggdHJlZXMgYW5kIFJUTCByZWZlcgorICAgdG8gaXQsIHNvIGl0J3MgaGVyZS4gICovCitlbnVtIHRsc19tb2RlbCB7CisgIFRMU19NT0RFTF9OT05FLAorICBUTFNfTU9ERUxfRU1VTEFURUQsCisgIFRMU19NT0RFTF9SRUFMLAorICBUTFNfTU9ERUxfR0xPQkFMX0RZTkFNSUMgPSBUTFNfTU9ERUxfUkVBTCwKKyAgVExTX01PREVMX0xPQ0FMX0RZTkFNSUMsCisgIFRMU19NT0RFTF9JTklUSUFMX0VYRUMsCisgIFRMU19NT0RFTF9MT0NBTF9FWEVDCit9OworCisvKiBUeXBlcyBvZiB1bndpbmQvZXhjZXB0aW9uIGhhbmRsaW5nIGluZm8gdGhhdCBjYW4gYmUgZ2VuZXJhdGVkLiAgKi8KKworZW51bSB1bndpbmRfaW5mb190eXBlCit7CisgIFVJX05PTkUsCisgIFVJX1NKTEosCisgIFVJX0RXQVJGMiwKKyAgVUlfVEFSR0VULAorICBVSV9TRUgKK307CisKKy8qIENhbGxncmFwaCBub2RlIHByb2ZpbGUgcmVwcmVzZW50YXRpb24uICAqLworZW51bSBub2RlX2ZyZXF1ZW5jeSB7CisgIC8qIFRoaXMgZnVuY3Rpb24gbW9zdCBsaWtlbHkgd29uJ3QgYmUgZXhlY3V0ZWQgYXQgYWxsLgorICAgICAoc2V0IG9ubHkgd2hlbiBwcm9maWxlIGZlZWRiYWNrIGlzIGF2YWlsYWJsZSBvciB2aWEgZnVuY3Rpb24gYXR0cmlidXRlKS4gKi8KKyAgTk9ERV9GUkVRVUVOQ1lfVU5MSUtFTFlfRVhFQ1VURUQsCisgIC8qIEZvciBmdW5jdGlvbnMgdGhhdCBhcmUga25vd24gdG8gYmUgZXhlY3V0ZWQgb25jZSAoaS5lLiBjb25zdHJ1Y3RvcnMsIGRlc3RydWN0b3JzCisgICAgIGFuZCBtYWluIGZ1bmN0aW9uLiAgKi8KKyAgTk9ERV9GUkVRVUVOQ1lfRVhFQ1VURURfT05DRSwKKyAgLyogVGhlIGRlZmF1bHQgdmFsdWUuICAqLworICBOT0RFX0ZSRVFVRU5DWV9OT1JNQUwsCisgIC8qIE9wdGltaXplIHRoaXMgZnVuY3Rpb24gaGFyZAorICAgICAoc2V0IG9ubHkgd2hlbiBwcm9maWxlIGZlZWRiYWNrIGlzIGF2YWlsYWJsZSBvciB2aWEgZnVuY3Rpb24gYXR0cmlidXRlKS4gKi8KKyAgTk9ERV9GUkVRVUVOQ1lfSE9UCit9OworCisvKiBQb3NzaWJsZSBpbml0aWFsaXphdGlvbiBzdGF0dXMgb2YgYSB2YXJpYWJsZS4gICBXaGVuIHJlcXVlc3RlZAorICAgYnkgdGhlIHVzZXIsIHRoaXMgaW5mb3JtYXRpb24gaXMgdHJhY2tlZCBhbmQgcmVjb3JkZWQgaW4gdGhlIERXQVJGCisgICBkZWJ1ZyBpbmZvcm1hdGlvbiwgYWxvbmcgd2l0aCB0aGUgdmFyaWFibGUncyBsb2NhdGlvbi4gICovCitlbnVtIHZhcl9pbml0X3N0YXR1cworeworICBWQVJfSU5JVF9TVEFUVVNfVU5LTk9XTiwKKyAgVkFSX0lOSVRfU1RBVFVTX1VOSU5JVElBTElaRUQsCisgIFZBUl9JTklUX1NUQVRVU19JTklUSUFMSVpFRAorfTsKKworCitzdHJ1Y3QgZWRnZV9kZWY7Cit0eXBlZGVmIHN0cnVjdCBlZGdlX2RlZiAqZWRnZTsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGVkZ2VfZGVmICpjb25zdF9lZGdlOworc3RydWN0IGJhc2ljX2Jsb2NrX2RlZjsKK3R5cGVkZWYgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqYmFzaWNfYmxvY2s7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBiYXNpY19ibG9ja19kZWYgKmNvbnN0X2Jhc2ljX2Jsb2NrOworCisjZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MJKCh2b2lkICooKikgKGxvbmcpKSB4bWFsbG9jKQorI2RlZmluZSBvYnN0YWNrX2NodW5rX2ZyZWUJKCh2b2lkICgqKSAodm9pZCAqKSkgZnJlZSkKKyNkZWZpbmUgT0JTVEFDS19DSFVOS19TSVpFCTAKKyNkZWZpbmUgZ2NjX29ic3RhY2tfaW5pdChPQlNUQUNLKQkJCVwKKyAgX29ic3RhY2tfYmVnaW4gKChPQlNUQUNLKSwgT0JTVEFDS19DSFVOS19TSVpFLCAwLAlcCisJCSAgb2JzdGFja19jaHVua19hbGxvYywJCQlcCisJCSAgb2JzdGFja19jaHVua19mcmVlKQorCisvKiBlbnVtIHJlZ19jbGFzcyBpcyB0YXJnZXQgc3BlY2lmaWMsIHNvIGl0IHNob3VsZCBub3QgYXBwZWFyIGluCisgICB0YXJnZXQtaW5kZXBlbmRlbnQgY29kZSBvciBpbnRlcmZhY2VzLCBsaWtlIHRoZSB0YXJnZXQgaG9vayBkZWNsYXJhdGlvbnMKKyAgIGluIHRhcmdldC5oLiAgKi8KK3R5cGVkZWYgaW50IHJlZ19jbGFzc190OworCisjZWxzZQorCitzdHJ1Y3QgX2RvbnRfdXNlX3J0eF9oZXJlXzsKK3N0cnVjdCBfZG9udF91c2VfcnR2ZWNfaGVyZV87Cit1bmlvbiBfZG9udF91c2VfdHJlZV9oZXJlXzsKKyNkZWZpbmUgcnR4IHN0cnVjdCBfZG9udF91c2VfcnR4X2hlcmVfICoKKyNkZWZpbmUgY29uc3RfcnR4IHN0cnVjdCBfZG9udF91c2VfcnR4X2hlcmVfICoKKyNkZWZpbmUgcnR2ZWMgc3RydWN0IF9kb250X3VzZV9ydHZlY19oZXJlICoKKyNkZWZpbmUgY29uc3RfcnR2ZWMgc3RydWN0IF9kb250X3VzZV9ydHZlY19oZXJlICoKKyNkZWZpbmUgdHJlZSB1bmlvbiBfZG9udF91c2VfdHJlZV9oZXJlXyAqCisjZGVmaW5lIGNvbnN0X3RyZWUgdW5pb24gX2RvbnRfdXNlX3RyZWVfaGVyZV8gKgorCisjZW5kaWYKKworLyogTWVtb3J5IG1vZGVsIHR5cGVzIGZvciB0aGUgX19hdG9taWMqIGJ1aWx0aW5zLiAKKyAgIFRoaXMgbXVzdCBtYXRjaCB0aGUgb3JkZXIgaW4gbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9hdG9taWNfYmFzZS5oLiAgKi8KK2VudW0gbWVtbW9kZWwKK3sKKyAgTUVNTU9ERUxfUkVMQVhFRCA9IDAsCisgIE1FTU1PREVMX0NPTlNVTUUgPSAxLAorICBNRU1NT0RFTF9BQ1FVSVJFID0gMiwKKyAgTUVNTU9ERUxfUkVMRUFTRSA9IDMsCisgIE1FTU1PREVMX0FDUV9SRUwgPSA0LAorICBNRU1NT0RFTF9TRVFfQ1NUID0gNSwKKyAgTUVNTU9ERUxfTEFTVCA9IDYKK307CisKKy8qIFN1cHBvc2UgdGhhdCBoaWdoZXIgYml0cyBhcmUgdGFyZ2V0IGRlcGVuZGFudC4gKi8KKyNkZWZpbmUgTUVNTU9ERUxfTUFTSyAoKDE8PDE2KS0xKQorCisvKiBTdXBwb3J0IGZvciB1c2VyLXByb3ZpZGVkIEdHQyBhbmQgUENIIG1hcmtlcnMuICBUaGUgZmlyc3QgcGFyYW1ldGVyCisgICBpcyBhIHBvaW50ZXIgdG8gYSBwb2ludGVyLCB0aGUgc2Vjb25kIGEgY29va2llLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmd0X3BvaW50ZXJfb3BlcmF0b3IpICh2b2lkICosIHZvaWQgKik7CisKKyNpZiAhZGVmaW5lZCAoSEFWRV9VQ0hBUikKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcjsKKyNlbmRpZgorCisjZW5kaWYgLyogY29yZXR5cGVzLmggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jcC9jcC10cmVlLmRlZiBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jcC9jcC10cmVlLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDliZmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NwL2NwLXRyZWUuZGVmCkBAIC0wLDAgKzEsNDc5IEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgIGFkZGl0aW9uYWwgdHJlZSBjb2RlcyB1c2VkIGluIHRoZSBHTlUgQysrIGNvbXBpbGVyIChzZWUgdHJlZS5kZWYKKyAgIGZvciB0aGUgc3RhbmRhcmQgY29kZXMpLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBIYWNrZWQgYnkgTWljaGFlbCBUaWVtYW5uICh0aWVtYW5uQGN5Z251cy5jb20pCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKy8qIEFuIE9GRlNFVF9SRUYgaXMgdXNlZCBpbiB0d28gc2l0dWF0aW9uczoKKworICAgMS4gQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgQTo6bScgd2hlcmUgYEEnIGlzIGEgY2xhc3MgYW5kIGBtJyBpcworICAgICAgYSBub24tc3RhdGljIG1lbWJlci4gIEluIHRoaXMgY2FzZSwgb3BlcmFuZCAwIHdpbGwgYmUgYSBUWVBFCisgICAgICAoY29ycmVzcG9uZGluZyB0byBgQScpIGFuZCBvcGVyYW5kIDEgd2lsbCBiZSBhIEZJRUxEX0RFQ0wsCisgICAgICBCQVNFTElOSywgb3IgVEVNUExBVEVfSURfRVhQUiAoY29ycmVzcG9uZGluZyB0byBgbScpLgorCisgICAgICBUaGUgZXhwcmVzc2lvbiBpcyBhIHBvaW50ZXItdG8tbWVtYmVyIGlmIGl0cyBhZGRyZXNzIGlzIHRha2VuLAorICAgICAgYnV0IHNpbXBseSBkZW5vdGVzIGEgbWVtYmVyIG9mIHRoZSBvYmplY3QgaWYgaXRzIGFkZHJlc3MgaXMgbm90CisgICAgICB0YWtlbi4KKworICAgICAgVGhpcyBmb3JtIGlzIG9ubHkgdXNlZCBkdXJpbmcgdGhlIHBhcnNpbmcgcGhhc2U7IG9uY2Ugc2VtYW50aWMKKyAgICAgIGFuYWx5c2lzIGhhcyB0YWtlbiBwbGFjZSB0aGV5IGFyZSBlbGltaW5hdGVkLgorCisgICAyLiBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGB4LipwJy4gIEluIHRoaXMgY2FzZSwgb3BlcmFuZCAwIHdpbGwKKyAgICAgIGJlIGFuIGV4cHJlc3Npb24gY29ycmVzcG9uZGluZyB0byBgeCcgYW5kIG9wZXJhbmQgMSB3aWxsIGJlIGFuCisgICAgICBleHByZXNzaW9uIHdpdGggcG9pbnRlci10by1tZW1iZXIgdHlwZS4gICovCitERUZUUkVFQ09ERSAoT0ZGU0VUX1JFRiwgIm9mZnNldF9yZWYiLCB0Y2NfcmVmZXJlbmNlLCAyKQorCisvKiBBIHBvaW50ZXItdG8tbWVtYmVyIGNvbnN0YW50LiAgRm9yIGEgcG9pbnRlci10by1tZW1iZXIgY29uc3RhbnQKKyAgIGBYOjpZJyBUaGUgUFRSTUVNX0NTVF9DTEFTUyBpcyB0aGUgUkVDT1JEX1RZUEUgZm9yIGBYJyBhbmQgdGhlCisgICBQVFJNRU1fQ1NUX01FTUJFUiBpcyB0aGUgX0RFQ0wgZm9yIGBZJy4gICovCitERUZUUkVFQ09ERSAoUFRSTUVNX0NTVCwgInB0cm1lbV9jc3QiLCB0Y2NfY29uc3RhbnQsIDApCisKKy8qIEZvciBORVdfRVhQUiwgb3BlcmFuZCAwIGlzIHRoZSBwbGFjZW1lbnQgbGlzdC4KKyAgIE9wZXJhbmQgMSBpcyB0aGUgbmV3LWRlY2xhcmF0b3IuCisgICBPcGVyYW5kIDIgaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkuCisgICBPcGVyYW5kIDMgaXMgdGhlIGluaXRpYWxpemVyLiAgKi8KK0RFRlRSRUVDT0RFIChORVdfRVhQUiwgIm53X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgNCkKK0RFRlRSRUVDT0RFIChWRUNfTkVXX0VYUFIsICJ2ZWNfbndfZXhwciIsIHRjY19leHByZXNzaW9uLCAzKQorCisvKiBGb3IgREVMRVRFX0VYUFIsIG9wZXJhbmQgMCBpcyB0aGUgc3RvcmUgdG8gYmUgZGVzdHJveWVkLgorICAgT3BlcmFuZCAxIGlzIHRoZSB2YWx1ZSB0byBwYXNzIHRvIHRoZSBkZXN0cm95aW5nIGZ1bmN0aW9uCisgICBzYXlpbmcgd2hldGhlciB0aGUgc3RvcmUgc2hvdWxkIGJlIGRlYWxsb2NhdGVkIGFzIHdlbGwuICAqLworREVGVFJFRUNPREUgKERFTEVURV9FWFBSLCAiZGxfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorREVGVFJFRUNPREUgKFZFQ19ERUxFVEVfRVhQUiwgInZlY19kbF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIFZhbHVlIGlzIHJlZmVyZW5jZSB0byBwYXJ0aWN1bGFyIG92ZXJsb2FkZWQgY2xhc3MgbWV0aG9kLgorICAgT3BlcmFuZCAwIGlzIHRoZSBjbGFzcywgb3BlcmFuZCAxIGlzIHRoZSBmaWVsZAorICAgVGhlIENPTVBMRVhJVFkgZmllbGQgaG9sZHMgdGhlIGNsYXNzIGxldmVsICh1c3VhbGx5IDApLiAgKi8KK0RFRlRSRUVDT0RFIChTQ09QRV9SRUYsICJzY29wZV9yZWYiLCB0Y2NfcmVmZXJlbmNlLCAyKQorCisvKiBXaGVuIGNvbXBvc2luZyBhbiBvYmplY3Qgd2l0aCBhIG1lbWJlciwgdGhpcyBpcyB0aGUgcmVzdWx0LgorICAgT3BlcmFuZCAwIGlzIHRoZSBvYmplY3QuICBPcGVyYW5kIDEgaXMgdGhlIG1lbWJlciAodXN1YWxseQorICAgYSBkZXJlZmVyZW5jZWQgcG9pbnRlciB0byBtZW1iZXIpLiAgKi8KK0RFRlRSRUVDT0RFIChNRU1CRVJfUkVGLCAibWVtYmVyX3JlZiIsIHRjY19yZWZlcmVuY2UsIDIpCisKKy8qIFR5cGUgY29udmVyc2lvbiBvcGVyYXRvciBpbiBDKysuICBUUkVFX1RZUEUgaXMgdHlwZSB0aGF0IHRoaXMKKyAgIG9wZXJhdG9yIGNvbnZlcnRzIHRvLiAgT3BlcmFuZCBpcyBleHByZXNzaW9uIHRvIGJlIGNvbnZlcnRlZC4gICovCitERUZUUkVFQ09ERSAoVFlQRV9FWFBSLCAidHlwZV9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIEFHR1JfSU5JVF9FWFBScyBoYXZlIGEgdmFyaWFibHktc2l6ZWQgcmVwcmVzZW50YXRpb24gc2ltaWxhciB0bworICAgdGhhdCBvZiBDQUxMX0VYUFJzLiAgT3BlcmFuZCAwIGlzIGFuIElOVEVHRVJfQ1NUIG5vZGUgY29udGFpbmluZyB0aGUKKyAgIG9wZXJhbmQgY291bnQsIG9wZXJhbmQgMSBpcyB0aGUgZnVuY3Rpb24gd2hpY2ggcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24sCisgICBvcGVyYW5kIDIgaXMgdGhlIHNsb3Qgd2hpY2ggd2FzIGFsbG9jYXRlZCBmb3IgdGhpcyBleHByZXNzaW9uLCBhbmQKKyAgIHRoZSByZW1haW5pbmcgb3BlcmFuZHMgYXJlIHRoZSBhcmd1bWVudHMgdG8gdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAgKi8KK0RFRlRSRUVDT0RFIChBR0dSX0lOSVRfRVhQUiwgImFnZ3JfaW5pdF9leHByIiwgdGNjX3ZsX2V4cCwgMykKKworLyogSW5pdGlhbGl6YXRpb24gb2YgYW4gYXJyYXkgZnJvbSBhbm90aGVyIGFycmF5LCBleHByZXNzZWQgYXQgYSBoaWdoIGxldmVsCisgICBzbyB0aGF0IGl0IHdvcmtzIHdpdGggVEFSR0VUX0VYUFIuICBPcGVyYW5kIDAgaXMgdGhlIHRhcmdldCwgb3BlcmFuZCAxCisgICBpcyB0aGUgaW5pdGlhbGl6ZXIuICAqLworREVGVFJFRUNPREUgKFZFQ19JTklUX0VYUFIsICJ2ZWNfaW5pdF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIEEgdGhyb3cgZXhwcmVzc2lvbi4gIG9wZXJhbmQgMCBpcyB0aGUgZXhwcmVzc2lvbiwgaWYgdGhlcmUgd2FzIG9uZSwKKyAgIGVsc2UgaXQgaXMgTlVMTF9UUkVFLiAgKi8KK0RFRlRSRUVDT0RFIChUSFJPV19FWFBSLCAidGhyb3dfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBBbiBlbXB0eSBjbGFzcyBvYmplY3QuICBUaGUgVFJFRV9UWVBFIGdpdmVzIHRoZSBjbGFzcyB0eXBlLiAgV2UgdXNlCisgICB0aGVzZSB0byBhdm9pZCBhY3R1YWxseSBjcmVhdGluZyBpbnN0YW5jZXMgb2YgdGhlIGVtcHR5IGNsYXNzZXMuICAqLworREVGVFJFRUNPREUgKEVNUFRZX0NMQVNTX0VYUFIsICJlbXB0eV9jbGFzc19leHByIiwgdGNjX2V4cHJlc3Npb24sIDApCisKKy8qIEEgcmVmZXJlbmNlIHRvIGEgbWVtYmVyIGZ1bmN0aW9uIG9yIG1lbWJlciBmdW5jdGlvbnMgZnJvbSBhIGJhc2UKKyAgIGNsYXNzLiAgQkFTRUxJTktfRlVOQ1RJT05TIGdpdmVzIHRoZSBGVU5DVElPTl9ERUNMLAorICAgVEVNUExBVEVfREVDTCwgT1ZFUkxPQUQsIG9yIFRFTVBMQVRFX0lEX0VYUFIgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgIGZ1bmN0aW9ucy4gIEJBU0VMSU5LX0JJTkZPIGdpdmVzIHRoZSBiYXNlIGZyb20gd2hpY2ggdGhlIGZ1bmN0aW9ucworICAgY29tZSwgaS5lLiwgdGhlIGJhc2UgdG8gd2hpY2ggdGhlIGB0aGlzJyBwb2ludGVyIG11c3QgYmUgY29udmVydGVkCisgICBiZWZvcmUgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiAgQkFTRUxJTktfQUNDRVNTX0JJTkZPIGdpdmVzIHRoZQorICAgYmFzZSB1c2VkIHRvIG5hbWUgdGhlIGZ1bmN0aW9ucy4KKworICAgQSBCQVNFTElOSyBpcyBhbiBleHByZXNzaW9uOyB0aGUgVFJFRV9UWVBFIG9mIHRoZSBCQVNFTElOSyBnaXZlcworICAgdGhlIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uICBUaGlzIHR5cGUgaXMgZWl0aGVyIGEgRlVOQ1RJT05fVFlQRSwKKyAgIE1FVEhPRF9UWVBFLCBvciBgdW5rbm93bl90eXBlX25vZGUnIGluZGljYXRpbmcgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKyAgIG92ZXJsb2FkZWQuICAqLworREVGVFJFRUNPREUgKEJBU0VMSU5LLCAiYmFzZWxpbmsiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIFRlbXBsYXRlIGRlZmluaXRpb24uICBUaGUgZm9sbG93aW5nIGZpZWxkcyBoYXZlIHRoZSBzcGVjaWZpZWQgdXNlcywKKyAgIGFsdGhvdWdoIHRoZXJlIGFyZSBvdGhlciBtYWNyb3MgaW4gY3AtdHJlZS5oIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yCisgICBhY2Nlc3NpbmcgdGhpcyBkYXRhLgorCURFQ0xfQVJHVU1FTlRTCQl0ZW1wbGF0ZSBwYXJtIHZlY3RvcgorCURFQ0xfVEVNUExBVEVfSU5GTyAgICAgIHRlbXBsYXRlIHRleHQgJmMKKwlERUNMX1ZJTkRFWAkJbGlzdCBvZiBpbnN0YW50aWF0aW9ucyBhbHJlYWR5IHByb2R1Y2VkOworCQkJCW9ubHkgZG9uZSBmb3IgZnVuY3Rpb25zIHNvIGZhcgorICAgRm9yIGNsYXNzIHRlbXBsYXRlOgorCURFQ0xfSU5JVElBTAkJYXNzb2NpYXRlZCB0ZW1wbGF0ZXMgKG1ldGhvZHMgJmMpCisJREVDTF9URU1QTEFURV9SRVNVTFQgICAgbnVsbAorICAgRm9yIG5vbi1jbGFzcyB0ZW1wbGF0ZXM6CisJVFJFRV9UWVBFCQl0eXBlIG9mIG9iamVjdCB0byBiZSBjb25zdHJ1Y3RlZAorCURFQ0xfVEVNUExBVEVfUkVTVUxUICAgIGRlY2wgZm9yIG9iamVjdCB0byBiZSBjcmVhdGVkCisJCQkJKGUuZy4sIEZVTkNUSU9OX0RFQ0wgd2l0aCB0bXBsIHBhcm1zIHVzZWQpCisgKi8KK0RFRlRSRUVDT0RFIChURU1QTEFURV9ERUNMLCAidGVtcGxhdGVfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKKworLyogSW5kZXggaW50byBhIHRlbXBsYXRlIHBhcmFtZXRlciBsaXN0LiAgVGhlIFRFTVBMQVRFX1BBUk1fSURYIGdpdmVzCisgICB0aGUgaW5kZXggKGZyb20gMCkgb2YgdGhlIHBhcmFtZXRlciwgd2hpbGUgdGhlIFRFTVBMQVRFX1BBUk1fTEVWRUwKKyAgIGdpdmVzIHRoZSBsZXZlbCAoZnJvbSAxKSBvZiB0aGUgcGFyYW1ldGVyLgorCisgICBIZXJlJ3MgYW4gZXhhbXBsZToKKworICAgdGVtcGxhdGUgPGNsYXNzIFQ+IC8vIEluZGV4IDAsIExldmVsIDEuCisgICBzdHJ1Y3QgUworICAgeworICAgICAgdGVtcGxhdGUgPGNsYXNzIFUsIC8vIEluZGV4IDAsIExldmVsIDIuCisJCWNsYXNzIFY+IC8vIEluZGV4IDEsIExldmVsIDIuCisgICAgICB2b2lkIGYoKTsKKyAgIH07CisKKyAgIFRoZSBERVNDRU5EQU5UUyB3aWxsIGJlIGEgY2hhaW4gb2YgVEVNUExBVEVfUEFSTV9JTkRFWHMgZGVzY2VuZGVkCisgICBmcm9tIHRoaXMgb25lLiAgVGhlIGZpcnN0IGRlc2NlbmRhbnQgd2lsbCBoYXZlIHRoZSBzYW1lIElEWCwgYnV0CisgICBpdHMgTEVWRUwgd2lsbCBiZSBvbmUgbGVzcy4gIFRoZSBUUkVFX0NIQUlOIGZpZWxkIGlzIHVzZWQgdG8gY2hhaW4KKyAgIHRvZ2V0aGVyIHRoZSBkZXNjZW5kYW50cy4gIFRoZSBURU1QTEFURV9QQVJNX0RFQ0wgaXMgdGhlCisgICBkZWNsYXJhdGlvbiBvZiB0aGlzIHBhcmFtZXRlciwgZWl0aGVyIGEgVFlQRV9ERUNMIG9yIENPTlNUX0RFQ0wuCisgICBUaGUgVEVNUExBVEVfUEFSTV9PUklHX0xFVkVMIGlzIHRoZSBMRVZFTCBvZiB0aGUgbW9zdCBkaXN0YW50CisgICBwYXJlbnQsIGkuZS4sIHRoZSBMRVZFTCB0aGF0IHRoZSBwYXJhbWV0ZXIgb3JpZ2luYWxseSBoYWQgd2hlbiBpdAorICAgd2FzIGRlY2xhcmVkLiAgRm9yIGV4YW1wbGUsIGlmIHdlIGluc3RhbnRpYXRlIFM8aW50Piwgd2Ugd2lsbCBoYXZlOgorCisgICBzdHJ1Y3QgUzxpbnQ+CisgICB7CisgICAgIHRlbXBsYXRlIDxjbGFzcyBVLCAvLyBJbmRleCAwLCBMZXZlbCAxLCBPcmlnIExldmVsIDIKKwkgICAgICAgY2xhc3MgVj4gLy8gSW5kZXggMSwgTGV2ZWwgMSwgT3JpZyBMZXZlbCAyCisgICAgIHZvaWQgZigpOworICAgfTsKKworICAgVGhlIExFVkVMIGlzIHRoZSBsZXZlbCBvZiB0aGUgcGFyYW1ldGVyIHdoZW4gd2UgYXJlIHdvcnJ5aW5nIGFib3V0CisgICB0aGUgdHlwZXMgb2YgdGhpbmdzOyB0aGUgT1JJR19MRVZFTCBpcyB0aGUgbGV2ZWwgd2hlbiB3ZSBhcmUKKyAgIHdvcnJ5aW5nIGFib3V0IGluc3RhbnRpYXRpbmcgdGhpbmdzLiAgKi8KK0RFRlRSRUVDT0RFIChURU1QTEFURV9QQVJNX0lOREVYLCAidGVtcGxhdGVfcGFybV9pbmRleCIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogSW5kZXggaW50byBhIHRlbXBsYXRlIHBhcmFtZXRlciBsaXN0IGZvciB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHR5cGUuICBUaGUgVFlQRV9GSUVMRFMgdmFsdWUgd2lsbCBiZSBhCisgICBURU1QTEFURV9QQVJNX0lOREVYLgorCisgICBJdCBpcyB1c2VkIHdpdGhvdXQgdGVtcGxhdGUgYXJndW1lbnRzIGxpa2UgVFQgaW4gQzxUVD4sCisgICBURU1QTEFURV9URU1QTEFURV9QQVJNX1RFTVBMQVRFX0lORk8gaXMgTlVMTF9UUkVFCisgICBhbmQgVFlQRV9OQU1FIGlzIGEgVEVNUExBVEVfREVDTC4gICovCitERUZUUkVFQ09ERSAoVEVNUExBVEVfVEVNUExBVEVfUEFSTSwgInRlbXBsYXRlX3RlbXBsYXRlX3Bhcm0iLCB0Y2NfdHlwZSwgMCkKKworLyogVGhlIG9yZGVyaW5nIG9mIHRoZSBmb2xsb3dpbmcgY29kZXMgaXMgb3B0aW1pemVkIGZvciB0aGUgY2hlY2tpbmcKKyAgIG1hY3JvcyBpbiB0cmVlLmguICBDaGFuZ2luZyB0aGUgb3JkZXIgd2lsbCBkZWdyYWRlIHRoZSBzcGVlZCBvZiB0aGUKKyAgIGNvbXBpbGVyLiAgVEVNUExBVEVfVFlQRV9QQVJNLCBUWVBFTkFNRV9UWVBFLCBUWVBFT0ZfVFlQRSwKKyAgIEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0uICAqLworCisvKiBJbmRleCBpbnRvIGEgdGVtcGxhdGUgcGFyYW1ldGVyIGxpc3QuICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdHlwZS4KKyAgIFRoZSB0eXBlLnZhbHVlcyBmaWVsZCB3aWxsIGJlIGEgVEVNUExBVEVfUEFSTV9JTkRFWC4gICovCitERUZUUkVFQ09ERSAoVEVNUExBVEVfVFlQRV9QQVJNLCAidGVtcGxhdGVfdHlwZV9wYXJtIiwgdGNjX3R5cGUsIDApCisKKy8qIEEgdHlwZSBkZXNpZ25hdGVkIGJ5IGB0eXBlbmFtZSBUOjp0Jy4gIFRZUEVfQ09OVEVYVCBpcyBgVCcsCisgICBUWVBFX05BTUUgaXMgYW4gSURFTlRJRklFUl9OT0RFIGZvciBgdCcuICBJZiB0aGUgdHlwZSB3YXMgbmFtZWQgdmlhCisgICB0ZW1wbGF0ZS1pZCwgVFlQRU5BTUVfVFlQRV9GVUxMTkFNRSB3aWxsIGhvbGQgdGhlIFRFTVBMQVRFX0lEX0VYUFIuCisgICBUUkVFX1RZUEUgaXMgYWx3YXlzIE5VTEwuICAqLworREVGVFJFRUNPREUgKFRZUEVOQU1FX1RZUEUsICJ0eXBlbmFtZV90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIEEgdHlwZSBkZXNpZ25hdGVkIGJ5IGBfX3R5cGVvZiAoZXhwciknLiAgVFlQRU9GX1RZUEVfRVhQUiBpcyB0aGUKKyAgIGV4cHJlc3Npb24gaW4gcXVlc3Rpb24uICAqLworREVGVFJFRUNPREUgKFRZUEVPRl9UWVBFLCAidHlwZW9mX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogTGlrZSBURU1QTEFURV9URU1QTEFURV9QQVJNIGl0IGlzIHVzZWQgd2l0aCBib3VuZCB0ZW1wbGF0ZSBhcmd1bWVudHMKKyAgIGxpa2UgVFQ8aW50Pi4KKyAgIEluIHRoaXMgY2FzZSwgVEVNUExBVEVfVEVNUExBVEVfUEFSTV9URU1QTEFURV9JTkZPIGNvbnRhaW5zIHRoZQorICAgdGVtcGxhdGUgbmFtZSBhbmQgaXRzIGJvdW5kIGFyZ3VtZW50cy4gIFRZUEVfTkFNRSBpcyBhIFRZUEVfREVDTC4gICovCitERUZUUkVFQ09ERSAoQk9VTkRfVEVNUExBVEVfVEVNUExBVEVfUEFSTSwgImJvdW5kX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm0iLAorCSAgICAgdGNjX3R5cGUsIDApCisKKy8qIEZvciB0ZW1wbGF0ZSB0ZW1wbGF0ZSBhcmd1bWVudCBvZiB0aGUgZm9ybSBgVDo6dGVtcGxhdGUgQycuCisgICBUWVBFX0NPTlRFWFQgaXMgYFQnLCB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyIGRlcGVuZGVudCBvYmplY3QuCisgICBUWVBFX05BTUUgaXMgYW4gSURFTlRJRklFUl9OT0RFIGZvciBgQycsIHRoZSBtZW1iZXIgY2xhc3MgdGVtcGxhdGUuICAqLworREVGVFJFRUNPREUgKFVOQk9VTkRfQ0xBU1NfVEVNUExBVEUsICJ1bmJvdW5kX2NsYXNzX3RlbXBsYXRlIiwgdGNjX3R5cGUsIDApCisKKy8qIEEgdXNpbmcgZGVjbGFyYXRpb24uICBVU0lOR19ERUNMX1NDT1BFIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQKKyAgIHNjb3BlLiAgSW4gYSBtZW1iZXIgdXNpbmcgZGVjbCwgdW5sZXNzIERFQ0xfREVQRU5ERU5UX1AgaXMgdHJ1ZSwKKyAgIFVTSU5HX0RFQ0xfREVDTFMgY29udGFpbnMgdGhlIF9ERUNMIG9yIE9WRVJMT0FEIHNvIG5hbWVkLiAgVGhpcyBpcworICAgbm90IGFuIGFsaWFzLCBidXQgaXMgbGF0ZXIgZXhwYW5kZWQgaW50byBtdWx0aXBsZSBhbGlhc2VzLiAgKi8KK0RFRlRSRUVDT0RFIChVU0lOR19ERUNMLCAidXNpbmdfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKKworLyogQSB1c2luZyBkaXJlY3RpdmUuIFRoZSBvcGVyYW5kIGlzIFVTSU5HX1NUTVRfTkFNRVNQQUNFLiAgKi8KK0RFRlRSRUVDT0RFIChVU0lOR19TVE1ULCAidXNpbmdfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIEFuIHVuLXBhcnNlZCBkZWZhdWx0IGFyZ3VtZW50LiAgSG9sZHMgYSB2ZWN0b3Igb2YgaW5wdXQgdG9rZW5zIGFuZAorICAgYSB2ZWN0b3Igb2YgcGxhY2VzIHdoZXJlIHRoZSBhcmd1bWVudCB3YXMgaW5zdGFudGlhdGVkIGJlZm9yZQorICAgcGFyc2luZyBoYWQgb2NjdXJyZWQuICAqLworREVGVFJFRUNPREUgKERFRkFVTFRfQVJHLCAiZGVmYXVsdF9hcmciLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIEFuIHVuaW5zdGFudGlhdGVkIG5vZXhjZXB0LXNwZWNpZmljYXRpb24uICBERUZFUlJFRF9OT0VYQ0VQVF9QQVRURVJOIGlzCisgICB0aGUgcGF0dGVybiBmcm9tIHRoZSB0ZW1wbGF0ZSwgYW5kIERFRkVSUkVEX05PRVhDRVBUX0FSR1MgYXJlIHRoZQorICAgdGVtcGxhdGUgYXJndW1lbnRzIHRvIHN1YnN0aXR1dGUgaW50byB0aGUgcGF0dGVybiB3aGVuIG5lZWRlZC4gICovCitERUZUUkVFQ09ERSAoREVGRVJSRURfTk9FWENFUFQsICJkZWZlcnJlZF9ub2V4Y2VwdCIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogQSB0ZW1wbGF0ZS1pZCwgbGlrZSBmb288aW50Pi4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHRoZSB0ZW1wbGF0ZS4KKyAgIFRoZSBzZWNvbmQgaXMgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZXhwbGljaXQgYXJndW1lbnRzLCBvciBhCisgICBUUkVFX1ZFQyBvZiBhcmd1bWVudHMuICBUaGUgdGVtcGxhdGUgd2lsbCBiZSBhIEZVTkNUSU9OX0RFQ0wsCisgICBURU1QTEFURV9ERUNMLCBvciBhbiBPVkVSTE9BRC4gIElmIHRoZSB0ZW1wbGF0ZS1pZCByZWZlcnMgdG8gYQorICAgbWVtYmVyIHRlbXBsYXRlLCB0aGUgdGVtcGxhdGUgbWF5IGJlIGFuIElERU5USUZJRVJfTk9ERS4gICovCitERUZUUkVFQ09ERSAoVEVNUExBVEVfSURfRVhQUiwgInRlbXBsYXRlX2lkX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKKworLyogQSBsaXN0LWxpa2Ugbm9kZSBmb3IgY2hhaW5pbmcgb3ZlcmxvYWRpbmcgY2FuZGlkYXRlcy4gVFJFRV9UWVBFIGlzCisgICB0aGUgb3JpZ2luYWwgbmFtZSwgYW5kIHRoZSBwYXJhbWV0ZXIgaXMgdGhlIEZVTkNUSU9OX0RFQ0wuICAqLworREVGVFJFRUNPREUgKE9WRVJMT0FELCAib3ZlcmxvYWQiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIEEgcHNldWRvLWRlc3RydWN0b3IsIG9mIHRoZSBmb3JtICJPQkpFQ1QufkRFU1RSVUNUT1IiIG9yCisgICAiT0JKRUNULlNDT1BFOjp+REVTVFJVQ1RPUi4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzIHRoZSBPQkpFQ1QuICBUaGUKKyAgIHNlY29uZCBvcGVyYW5kIChpZiBub24tTlVMTCkgaXMgdGhlIFNDT1BFLiAgVGhlIHRoaXJkIG9wZXJhbmQgaXMKKyAgIHRoZSBUWVBFIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGUgREVTVFJVQ1RPUi4gIFRoZSB0eXBlIG9mIHRoZQorICAgZmlyc3Qgb3BlcmFuZCB3aWxsIGFsd2F5cyBiZSBhIHNjYWxhciB0eXBlLgorCisgICBUaGUgdHlwZSBvZiBhIFBTRVVET19EVE9SX0VYUFIgaXMgYWx3YXlzICJ2b2lkIiwgZXZlbiB0aG91Z2ggaXQgY2FuCisgICBiZSB1c2VkIGFzIGlmIGl0IHdlcmUgYSB6ZXJvLWFyZ3VtZW50IGZ1bmN0aW9uLiAgV2UgaGFuZGxlIHRoZQorICAgZnVuY3Rpb24tY2FsbCBjYXNlIHNwZWNpYWxseSwgYW5kIGdpdmluZyBpdCAidm9pZCIgdHlwZSBwcmV2ZW50cyBpdAorICAgYmVpbmcgdXNlZCBpbiBleHByZXNzaW9ucyBpbiB3YXlzIHRoYXQgYXJlIG5vdCBwZXJtaXR0ZWQuICAqLworREVGVFJFRUNPREUgKFBTRVVET19EVE9SX0VYUFIsICJwc2V1ZG9fZHRvcl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDMpCisKKy8qIEEgd2hvbGUgYnVuY2ggb2YgdHJlZSBjb2RlcyBmb3IgdGhlIGluaXRpYWwsIHN1cGVyZmljaWFsIHBhcnNpbmcgb2YKKyAgIHRlbXBsYXRlcy4gICovCitERUZUUkVFQ09ERSAoTU9ET1BfRVhQUiwgIm1vZG9wX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKK0RFRlRSRUVDT0RFIChDQVNUX0VYUFIsICJjYXN0X2V4cHIiLCB0Y2NfdW5hcnksIDEpCitERUZUUkVFQ09ERSAoUkVJTlRFUlBSRVRfQ0FTVF9FWFBSLCAicmVpbnRlcnByZXRfY2FzdF9leHByIiwgdGNjX3VuYXJ5LCAxKQorREVGVFJFRUNPREUgKENPTlNUX0NBU1RfRVhQUiwgImNvbnN0X2Nhc3RfZXhwciIsIHRjY191bmFyeSwgMSkKK0RFRlRSRUVDT0RFIChTVEFUSUNfQ0FTVF9FWFBSLCAic3RhdGljX2Nhc3RfZXhwciIsIHRjY191bmFyeSwgMSkKK0RFRlRSRUVDT0RFIChEWU5BTUlDX0NBU1RfRVhQUiwgImR5bmFtaWNfY2FzdF9leHByIiwgdGNjX3VuYXJ5LCAxKQorREVGVFJFRUNPREUgKElNUExJQ0lUX0NPTlZfRVhQUiwgImltcGxpY2l0X2NvbnZfZXhwciIsIHRjY191bmFyeSwgMSkKK0RFRlRSRUVDT0RFIChET1RTVEFSX0VYUFIsICJkb3RzdGFyX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKK0RFRlRSRUVDT0RFIChUWVBFSURfRVhQUiwgInR5cGVpZF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCitERUZUUkVFQ09ERSAoTk9FWENFUFRfRVhQUiwgIm5vZXhjZXB0X2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIEEgcGxhY2Vob2xkZXIgZm9yIGFuIGV4cHJlc3Npb24gdGhhdCBpcyBub3QgdHlwZS1kZXBlbmRlbnQsIGJ1dAorICAgZG9lcyBvY2N1ciBpbiBhIHRlbXBsYXRlLiAgV2hlbiBhbiBleHByZXNzaW9uIHRoYXQgaXMgbm90CisgICB0eXBlLWRlcGVuZGVudCBhcHBlYXJzIGluIGEgbGFyZ2VyIGV4cHJlc3Npb24sIHdlIG11c3QgY29tcHV0ZSB0aGUKKyAgIHR5cGUgb2YgdGhhdCBsYXJnZXIgZXhwcmVzc2lvbi4gIFRoYXQgY29tcHV0YXRpb24gd291bGQgbm9ybWFsbHkKKyAgIG1vZGlmeSB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbiwgd2hpY2ggd291bGQgY2hhbmdlIHRoZSBtYW5nbGluZyBvZgorICAgdGhhdCBleHByZXNzaW9uIGlmIGl0IGFwcGVhcmVkIGluIGEgdGVtcGxhdGUgYXJndW1lbnQgbGlzdC4gIEluCisgICB0aGF0IHNpdHVhdGlvbiwgd2UgY3JlYXRlIGEgTk9OX0RFUEVOREVOVF9FWFBSIHRvIHRha2UgdGhlIHBsYWNlIG9mCisgICB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4gIFRoZSBleHByZXNzaW9uIGlzIHRoZSBvbmx5IG9wZXJhbmQgLS0gaXQKKyAgIGlzIG9ubHkgbmVlZGVkIGZvciBkaWFnbm9zdGljcy4gICovCitERUZUUkVFQ09ERSAoTk9OX0RFUEVOREVOVF9FWFBSLCAibm9uX2RlcGVuZGVudF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIENUT1JfSU5JVElBTElaRVIgaXMgYSBwbGFjZWhvbGRlciBpbiB0ZW1wbGF0ZSBjb2RlIGZvciBhIGNhbGwgdG8KKyAgIHNldHVwX3Z0YmxfcG9pbnRlciAoYW5kIGFwcGVhcnMgaW4gYWxsIGZ1bmN0aW9ucywgbm90IGp1c3QgY3RvcnMpLiAgKi8KK0RFRlRSRUVDT0RFIChDVE9SX0lOSVRJQUxJWkVSLCAiY3Rvcl9pbml0aWFsaXplciIsIHRjY19leHByZXNzaW9uLCAxKQorCitERUZUUkVFQ09ERSAoVFJZX0JMT0NLLCAidHJ5X2Jsb2NrIiwgdGNjX3N0YXRlbWVudCwgMikKKworREVGVFJFRUNPREUgKEVIX1NQRUNfQkxPQ0ssICJlaF9zcGVjX2Jsb2NrIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogQSBIQU5ETEVSIHdyYXBzIGEgY2F0Y2ggaGFuZGxlciBmb3IgdGhlIEhBTkRMRVJfVFlQRS4gIElmIHRoaXMgaXMKKyAgIENBVENIX0FMTF9UWVBFLCB0aGVuIHRoZSBoYW5kbGVyIGNhdGNoZXMgYWxsIHR5cGVzLiAgVGhlIGRlY2xhcmF0aW9uIG9mCisgICB0aGUgY2F0Y2ggdmFyaWFibGUgaXMgaW4gSEFORExFUl9QQVJNUywgYW5kIHRoZSBib2R5IGJsb2NrIGluCisgICBIQU5ETEVSX0JPRFkuICAqLworREVGVFJFRUNPREUgKEhBTkRMRVIsICJoYW5kbGVyIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogQSBNVVNUX05PVF9USFJPV19FWFBSIHdyYXBzIGFuIGV4cHJlc3Npb24gdGhhdCBtYXkgbm90CisgICB0aHJvdywgYW5kIG11c3QgY2FsbCB0ZXJtaW5hdGUgaWYgaXQgZG9lcy4gIFRoZSBzZWNvbmQgYXJndW1lbnQKKyAgIGlzIGEgY29uZGl0aW9uLCB1c2VkIGluIHRlbXBsYXRlcyB0byBleHByZXNzIG5vZXhjZXB0IChjb25kaXRpb24pLiAgKi8KK0RFRlRSRUVDT0RFIChNVVNUX05PVF9USFJPV19FWFBSLCAibXVzdF9ub3RfdGhyb3dfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorCisvKiBBIENMRUFOVVBfU1RNVCBtYXJrcyB0aGUgcG9pbnQgYXQgd2hpY2ggYSBkZWNsYXJhdGlvbiBpcyBmdWxseQorICAgY29uc3RydWN0ZWQuICBUaGUgQ0xFQU5VUF9FWFBSIGlzIHJ1biBvbiBiZWhhbGYgb2YgQ0xFQU5VUF9ERUNMCisgICB3aGVuIENMRUFOVVBfQk9EWSBjb21wbGV0ZXMuICAqLworREVGVFJFRUNPREUgKENMRUFOVVBfU1RNVCwgImNsZWFudXBfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDMpCisKKy8qIFJlcHJlc2VudHMgYW4gJ2lmJyBzdGF0ZW1lbnQuIFRoZSBvcGVyYW5kcyBhcmUgSUZfQ09ORCwKKyAgIFRIRU5fQ0xBVVNFLCBhbmQgRUxTRV9DTEFVU0UsIGFuZCB0aGUgY3VycmVudCBzY29wZSwgcmVzcGVjdGl2ZWx5LiAgKi8KKy8qID8/PyBJdCBpcyBjdXJyZW50bHkgc3RpbGwgbmVjZXNzYXJ5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gSUZfU1RNVAorICAgYW5kIENPTkRfRVhQUiBmb3IgdGhlIGJlbmVmaXQgb2YgdGVtcGxhdGVzLiAgKi8KK0RFRlRSRUVDT0RFIChJRl9TVE1ULCAiaWZfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDQpCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgYGZvcicgc3RhdGVtZW50LiBUaGUgb3BlcmFuZHMgYXJlCisgICBGT1JfSU5JVF9TVE1ULCBGT1JfQ09ORCwgRk9SX0VYUFIsIGFuZCBGT1JfQk9EWSwgcmVzcGVjdGl2ZWx5LiAgKi8KK0RFRlRSRUVDT0RFIChGT1JfU1RNVCwgImZvcl9zdG10IiwgdGNjX3N0YXRlbWVudCwgNSkKKworLyogVXNlZCB0byByZXByZXNlbnQgYSByYW5nZS1iYXNlZCBgZm9yJyBzdGF0ZW1lbnQuIFRoZSBvcGVyYW5kcyBhcmUKKyAgIFJBTkdFX0ZPUl9ERUNMLCBSQU5HRV9GT1JfRVhQUiwgUkFOR0VfRk9SX0JPRFksIGFuZCBSQU5HRV9GT1JfU0NPUEUsCisgICByZXNwZWN0aXZlbHkuICBPbmx5IHVzZWQgaW4gdGVtcGxhdGVzLiAgKi8KK0RFRlRSRUVDT0RFIChSQU5HRV9GT1JfU1RNVCwgInJhbmdlX2Zvcl9zdG10IiwgdGNjX3N0YXRlbWVudCwgNCkKKworLyogVXNlZCB0byByZXByZXNlbnQgYSAnd2hpbGUnIHN0YXRlbWVudC4gVGhlIG9wZXJhbmRzIGFyZSBXSElMRV9DT05ECisgICBhbmQgV0hJTEVfQk9EWSwgcmVzcGVjdGl2ZWx5LiAgKi8KK0RFRlRSRUVDT0RFIChXSElMRV9TVE1ULCAid2hpbGVfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDIpCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgJ2RvJyBzdGF0ZW1lbnQuIFRoZSBvcGVyYW5kcyBhcmUgRE9fQk9EWSBhbmQKKyAgIERPX0NPTkQsIHJlc3BlY3RpdmVseS4gICovCitERUZUUkVFQ09ERSAoRE9fU1RNVCwgImRvX3N0bXQiLCB0Y2Nfc3RhdGVtZW50LCAyKQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhICdicmVhaycgc3RhdGVtZW50LiAgKi8KK0RFRlRSRUVDT0RFIChCUkVBS19TVE1ULCAiYnJlYWtfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDApCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgJ2NvbnRpbnVlJyBzdGF0ZW1lbnQuICAqLworREVGVFJFRUNPREUgKENPTlRJTlVFX1NUTVQsICJjb250aW51ZV9zdG10IiwgdGNjX3N0YXRlbWVudCwgMCkKKworLyogVXNlZCB0byByZXByZXNlbnQgYSAnc3dpdGNoJyBzdGF0ZW1lbnQuIFRoZSBvcGVyYW5kcyBhcmUKKyAgIFNXSVRDSF9TVE1UX0NPTkQsIFNXSVRDSF9TVE1UX0JPRFksIFNXSVRDSF9TVE1UX1RZUEUsIGFuZAorICAgU1dJVENIX1NUTVRfU0NPUEUsIHJlc3BlY3RpdmVseS4gICovCitERUZUUkVFQ09ERSAoU1dJVENIX1NUTVQsICJzd2l0Y2hfc3RtdCIsIHRjY19zdGF0ZW1lbnQsIDQpCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGFuIGV4cHJlc3Npb24gc3RhdGVtZW50LiAgVXNlIGBFWFBSX1NUTVRfRVhQUicgdG8KKyAgIG9idGFpbiB0aGUgZXhwcmVzc2lvbi4gICovCitERUZUUkVFQ09ERSAoRVhQUl9TVE1ULCAiZXhwcl9zdG10IiwgdGNjX2V4cHJlc3Npb24sIDEpCisKK0RFRlRSRUVDT0RFIChUQUdfREVGTiwgInRhZ19kZWZuIiwgdGNjX2V4cHJlc3Npb24sIDApCisKKy8qIFJlcHJlc2VudHMgYW4gJ29mZnNldG9mJyBleHByZXNzaW9uIGR1cmluZyB0ZW1wbGF0ZSBleHBhbnNpb24uICAqLworREVGVFJFRUNPREUgKE9GRlNFVE9GX0VYUFIsICJvZmZzZXRvZl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIFJlcHJlc2VudHMgdGhlIC0+IG9wZXJhdG9yIGR1cmluZyB0ZW1wbGF0ZSBleHBhbnNpb24uICAqLworREVGVFJFRUNPREUgKEFSUk9XX0VYUFIsICJhcnJvd19leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIFJlcHJlc2VudHMgYW4gJ19fYWxpZ25vZl9fJyBleHByZXNzaW9uIGR1cmluZyB0ZW1wbGF0ZQorICAgZXhwYW5zaW9uLiAgKi8KK0RFRlRSRUVDT0RFIChBTElHTk9GX0VYUFIsICJhbGlnbm9mX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogUmVwcmVzZW50cyBhbiBPYmplY3RpdmUtQysrICdAZW5jb2RlJyBleHByZXNzaW9uIGR1cmluZyB0ZW1wbGF0ZQorICAgZXhwYW5zaW9uLiAgKi8KK0RFRlRSRUVDT0RFIChBVF9FTkNPREVfRVhQUiwgImF0X2VuY29kZV9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIEEgU1RNVF9FWFBSIHJlcHJlc2VudHMgYSBzdGF0ZW1lbnQtZXhwcmVzc2lvbiBkdXJpbmcgdGVtcGxhdGUKKyAgIGV4cGFuc2lvbi4gIFRoaXMgaXMgdGhlIEdDQyBleHRlbnNpb24geyAoIC4uLiApIH0uICBUaGUKKyAgIFNUTVRfRVhQUl9TVE1UIGlzIHRoZSBzdGF0ZW1lbnQgZ2l2ZW4gYnkgdGhlIGV4cHJlc3Npb24uICAqLworREVGVFJFRUNPREUgKFNUTVRfRVhQUiwgInN0bXRfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBVbmFyeSBwbHVzLiBPcGVyYW5kIDAgaXMgdGhlIGV4cHJlc3Npb24gdG8gd2hpY2ggdGhlIHVuYXJ5IHBsdXMKKyAgIGlzIGFwcGxpZWQuICAqLworREVGVFJFRUNPREUgKFVOQVJZX1BMVVNfRVhQUiwgInVuYXJ5X3BsdXNfZXhwciIsIHRjY191bmFyeSwgMSkKKworLyoqIEMrKzB4IGV4dGVuc2lvbnMuICovCisKKy8qIEEgc3RhdGljIGFzc2VydGlvbi4gIFRoaXMgaXMgYSBDKysweCBleHRlbnNpb24uCisgICBTVEFUSUNfQVNTRVJUX0NPTkRJVElPTiBjb250YWlucyB0aGUgY29uZGl0aW9uIHRoYXQgaXMgYmVpbmcKKyAgIGNoZWNrZWQuICBTVEFUSUNfQVNTRVJUX01FU1NBR0UgY29udGFpbnMgdGhlIG1lc3NhZ2UgKGEgc3RyaW5nCisgICBsaXRlcmFsKSB0byBiZSBkaXNwbGF5ZWQgaWYgdGhlIGNvbmRpdGlvbiBmYWlscyB0byBob2xkLiAgKi8KK0RFRlRSRUVDT0RFIChTVEFUSUNfQVNTRVJULCAic3RhdGljX2Fzc2VydCIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogUmVwcmVzZW50cyBhbiBhcmd1bWVudCBwYWNrIG9mIHR5cGVzIChvciB0ZW1wbGF0ZXMpLiBBbiBhcmd1bWVudAorICAgcGFjayBzdG9yZXMgemVybyBvciBtb3JlIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgdXNlZCB0byBpbnN0YW50aWF0ZQorICAgYSBwYXJhbWV0ZXIgcGFjay4gCisKKyAgIEFSR1VNRU5UX1BBQ0tfQVJHUyByZXRyaWV2ZXMgdGhlIGFyZ3VtZW50cyBzdG9yZWQgaW4gdGhlIGFyZ3VtZW50CisgICBwYWNrLgorCisgICBFeGFtcGxlOgorICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBWYWx1ZXM+CisgICAgIGNsYXNzIHR1cGxlIHsgLi4uIH07CisKKyAgICAgdHVwbGU8aW50LCBmbG9hdCwgZG91YmxlPiB0OworCisgICBWYWx1ZXMgaXMgYSAodGVtcGxhdGUpIHBhcmFtZXRlciBwYWNrLiBXaGVuIHR1cGxlPGludCwgZmxvYXQsCisgICBkb3VibGU+IGlzIGluc3RhbnRpYXRlZCwgdGhlIFZhbHVlcyBwYXJhbWV0ZXIgcGFjayBpcyBpbnN0YW50aWF0ZWQKKyAgIHdpdGggdGhlIGFyZ3VtZW50IHBhY2sgPGludCwgZmxvYXQsIGRvdWJsZT4uIEFSR1VNRU5UX1BBQ0tfQVJHUyB3aWxsCisgICBiZSBhIFRSRUVfVkVDIGNvbnRhaW5pbmcgaW50LCBmbG9hdCwgYW5kIGRvdWJsZS4gICovCitERUZUUkVFQ09ERSAoVFlQRV9BUkdVTUVOVF9QQUNLLCAidHlwZV9hcmd1bWVudF9wYWNrIiwgdGNjX3R5cGUsIDApCisKKy8qIFJlcHJlc2VudHMgYW4gYXJndW1lbnQgcGFjayBvZiB2YWx1ZXMsIHdoaWNoIGNhbiBiZSB1c2VkIGVpdGhlciBmb3IKKyAgIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50cyBvciBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cy4gCisKKyAgIE5PTlRZUEVfQVJHVU1FTlRfUEFDSyBwbGF5cyBwcmVjaXNlbHkgdGhlIHNhbWUgcm9sZSBhcworICAgVFlQRV9BUkdVTUVOVF9QQUNLLCBidXQgd2lsbCBiZSB1c2VkIGZvciBwYWNraW5nIG5vbi10eXBlIHRlbXBsYXRlCisgICBhcmd1bWVudHMgKGUuZy4sICJpbnQuLi4gRGltZW5zaW9ucyIpIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyAoImNvbnN0CisgICBBcmdzJi4uLiBhcmdzIikuICovCitERUZUUkVFQ09ERSAoTk9OVFlQRV9BUkdVTUVOVF9QQUNLLCAibm9udHlwZV9hcmd1bWVudF9wYWNrIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIFJlcHJlc2VudHMgYSB0eXBlIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV4cGFuZGVkIGludG8gYSBsaXN0IG9mCisgICB0eXBlcyB3aGVuIGluc3RhbnRpYXRlZCB3aXRoIG9uZSBvciBtb3JlIGFyZ3VtZW50IHBhY2tzLgorCisgICBQQUNLX0VYUEFOU0lPTl9QQVRURVJOIHJldHJpZXZlcyB0aGUgZXhwYW5zaW9uIHBhdHRlcm4uIFRoaXMgaXMKKyAgIHRoZSB0eXBlIG9yIGV4cHJlc3Npb24gdGhhdCB3ZSB3aWxsIHN1YnN0aXR1dGUgaW50byB3aXRoIGVhY2gKKyAgIGFyZ3VtZW50IGluIGFuIGFyZ3VtZW50IHBhY2suCisKKyAgIFNFVF9QQUNLX0VYUEFOU0lPTl9QQVRURVJOIHNldHMgdGhlIGV4cGFuc2lvbiBwYXR0ZXJuLgorCisgICBQQUNLX0VYUEFOU0lPTl9QQVJBTUVURVJfUEFDS1MgY29udGFpbnMgYSBUUkVFX0xJU1Qgb2YgdGhlIHBhcmFtZXRlcgorICAgcGFja3MgdGhhdCBhcmUgdXNlZCBpbiB0aGlzIHBhY2sgZXhwYW5zaW9uLgorCisgICBFeGFtcGxlOgorICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBWYWx1ZXM+CisgICAgIHN0cnVjdCB0aWVkIDogdHVwbGU8VmFsdWVzJi4uLj4geyAKKyAgICAgICAvLyAuLi4KKyAgICAgfTsKKworICAgVGhlIGRlcml2YXRpb24gZnJvbSB0dXBsZSBjb250YWlucyBhIFRZUEVfUEFDS19FWFBBTlNJT04gZm9yIHRoZQorICAgdGVtcGxhdGUgYXJndW1lbnRzLiBJdHMgUEFDS19FWFBBTlNJT05fUEFUVEVSTiBpcyAiVmFsdWVzJiIgYW5kIGl0cworICAgUEFDS19FWFBBTlNJT05fUEFSQU1FVEVSX1BBQ0tTIHdpbGwgY29udGFpbiAiVmFsdWVzIi4gICovCitERUZUUkVFQ09ERSAoVFlQRV9QQUNLX0VYUEFOU0lPTiwgInR5cGVfcGFja19leHBhbnNpb24iLCB0Y2NfdHlwZSwgMCkKKworLyogUmVwcmVzZW50cyBhbiBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBleHBhbmRlZCBpbnRvIGEgbGlzdCBvZgorICAgZXhwcmVzc2lvbnMgd2hlbiBpbnN0YW50aWF0ZWQgd2l0aCBvbmUgb3IgbW9yZSBhcmd1bWVudCBwYWNrcy4KKworICAgRVhQUl9QQUNLX0VYUEFOU0lPTiBwbGF5cyBwcmVjaXNlbHkgdGhlIHNhbWUgcm9sZSBhcyBUWVBFX1BBQ0tfRVhQQU5TSU9OLAorICAgYnV0IHdpbGwgYmUgdXNlZCBmb3IgZXhwcmVzc2lvbnMuICAqLworREVGVFJFRUNPREUgKEVYUFJfUEFDS19FWFBBTlNJT04sICJleHByX3BhY2tfZXhwYW5zaW9uIiwgdGNjX2V4cHJlc3Npb24sIDMpCisKKy8qIFNlbGVjdHMgdGhlIEl0aCBwYXJhbWV0ZXIgb3V0IG9mIGFuIGFyZ3VtZW50IHBhY2suIFRoaXMgbm9kZSB3aWxsCisgICBiZSB1c2VkIHdoZW4gaW5zdGFudGlhdGluZyBwYWNrIGV4cGFuc2lvbnM7IHNlZQorICAgdHN1YnN0X3BhY2tfZXhwYW5zaW9uLiAKKworICAgQVJHVU1FTlRfUEFDS19TRUxFQ1RfRlJPTV9QQUNLIGNvbnRhaW5zIHRoZSAqX0FSR1VNRU5UX1BBQ0sgbm9kZQorICAgZnJvbSB3aGljaCB0aGUgYXJndW1lbnQgd2lsbCBiZSBzZWxlY3RlZC4KKworICAgQVJHVU1FTlRfUEFDS19TRUxFQ1RfSU5ERVggY29udGFpbnMgdGhlIGluZGV4IGludG8gdGhlIGFyZ3VtZW50CisgICBwYWNrIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSB0aGlzIEFSR1VNRU5UX1BBQ0tfU0VMRUNUIG5vZGUuIFRoZQorICAgaW5kZXggaXMgYSBtYWNoaW5lIGludGVnZXIuICAqLworREVGVFJFRUNPREUgKEFSR1VNRU5UX1BBQ0tfU0VMRUNULCAiYXJndW1lbnRfcGFja19zZWxlY3QiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qKiBDKysgZXh0ZW5zaW9ucy4gKi8KKworLyogUmVwcmVzZW50cyBhIHRyYWl0IGV4cHJlc3Npb24gZHVyaW5nIHRlbXBsYXRlIGV4cGFuc2lvbi4gICovCitERUZUUkVFQ09ERSAoVFJBSVRfRVhQUiwgInRyYWl0X2V4cHIiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIEEgbGFtYmRhIGV4cHJlc3Npb24uICBUaGlzIGlzIGEgQysrMHggZXh0ZW5zaW9uLgorICAgTEFNQkRBX0VYUFJfREVGQVVMVF9DQVBUVVJFX01PREUgaXMgYW4gZW51bSBmb3IgdGhlIGRlZmF1bHQsIHdoaWNoIG1heSBiZQorICAgbm9uZS4KKyAgIExBTUJEQV9FWFBSX0NBUFRVUkVfTElTVCBob2xkcyB0aGUgY2FwdHVyZS1saXN0LCBpbmNsdWRpbmcgYHRoaXMnLgorICAgTEFNQkRBX0VYUFJfVEhJU19DQVBUVVJFIGdvZXMgc3RyYWlnaHQgdG8gdGhlIGNhcHR1cmUgb2YgYHRoaXMnLCBpZiBpdCBleGlzdHMuCisgICBMQU1CREFfRVhQUl9QRU5ESU5HX1BST1hJRVMgaXMgYSB2ZWN0b3Igb2YgY2FwdHVyZSBwcm94aWVzIHdoaWNoIG5lZWQgdG8KKyAgIGJlIHB1c2hlZCBvbmNlIHNjb3BlIHJldHVybnMgdG8gdGhlIGxhbWJkYS4KKyAgIExBTUJEQV9FWFBSX01VVEFCTEVfUCBzaWduYWxzIHdoZXRoZXIgdGhpcyBsYW1iZGEgd2FzIGRlY2xhcmVkIG11dGFibGUuCisgICBMQU1CREFfRVhQUl9SRVRVUk5fVFlQRSBob2xkcyB0aGUgcmV0dXJuIHR5cGUsIGlmIGl0IHdhcyBzcGVjaWZpZWQuICAqLworREVGVFJFRUNPREUgKExBTUJEQV9FWFBSLCAibGFtYmRhX2V4cHIiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIFRoZSBkZWNsYXJlZCB0eXBlIG9mIGFuIGV4cHJlc3Npb24uICBUaGlzIGlzIGEgQysrMHggZXh0ZW5zaW9uLgorICAgREVDTFRZUEVfVFlQRV9FWFBSIGlzIHRoZSBleHByZXNzaW9uIHdob3NlIHR5cGUgd2UgYXJlIGNvbXB1dGluZy4KKyAgIERFQ0xUWVBFX1RZUEVfSURfRVhQUl9PUl9NRU1CRVJfQUNDRVNTX1Agc3RhdGVzIHdoZXRoZXIgdGhlCisgICBleHByZXNzaW9uIHdhcyBwYXJzZWQgYXMgYW4gaWQtZXhwcmVzc2lvbiBvciBhIG1lbWJlciBhY2Nlc3MKKyAgIGV4cHJlc3Npb24uIFdoZW4gZmFsc2UsIGl0IHdhcyBwYXJzZWQgYXMgYSBmdWxsIGV4cHJlc3Npb24uCisgICBERUNMVFlQRV9GT1JfTEFNQkRBX0NBUFRVUkUgaXMgc2V0IGlmIHdlIHdhbnQgbGFtYmRhIGNhcHR1cmUgc2VtYW50aWNzLgorICAgREVDTFRZUEVfRk9SX0xBTUJEQV9SRVRVUk4gaXMgc2V0IGlmIHdlIHdhbnQgbGFtYmRhIHJldHVybiBkZWR1Y3Rpb24uICAqLworREVGVFJFRUNPREUgKERFQ0xUWVBFX1RZUEUsICJkZWNsdHlwZV90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIEEgdHlwZSBkZXNpZ25hdGVkIGJ5IGBfX3VuZGVybHlpbmdfdHlwZSAodHlwZSknLgorICAgVU5ERVJMWUlOR19UWVBFX1RZUEUgaXMgdGhlIHR5cGUgaW4gcXVlc3Rpb24uICAqLworREVGVFJFRUNPREUgKFVOREVSTFlJTkdfVFlQRSwgInVuZGVybHlpbmdfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBBIHR5cGUgZGVzaWduYXRlZCBieSBvbmUgb2YgdGhlIGJhc2VzIHR5cGUgdHJhaXRzLgorICAgQkFTRVNfVFlQRSBpcyB0aGUgdHlwZSBpbiBxdWVzdGlvbi4gICovCitERUZUUkVFQ09ERSAoQkFTRVMsICJiYXNlcyIsIHRjY190eXBlLCAwKQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCB0aGUgdGVtcGxhdGUgaW5mb3JtYXRpb24gc3RvcmVkIGJ5IHRlbXBsYXRlCisgICBzcGVjaWFsaXphdGlvbnMuCisgICBUaGUgYWNjZXNzb3JzIGFyZToKKyAgIFRJX1RFTVBMQVRFIHRoZSB0ZW1wbGF0ZSBkZWNsYXJhdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSBzcGVjaWFsaXphdGlvbgorICAgVElfQVJHUyB0aGUgYXJndW1lbnRzIG9mIHRoZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgorICAgVElfVFlQRURFRlNfTkVFRElOR19BQ0NFU1NfQ0hFQ0tJTkcgdGhlIHZlY3RvciBvZiB0eXBlZGVmcyB1c2VkIGluCisgICB0aGUgcGF0dGVybiBvZiB0aGUgdGVtcGxhdGUgZm9yIHdoaWNoIGFjY2VzcyBjaGVjayBpcyBuZWVkZWQgYXQgdGVtcGxhdGUKKyAgIGluc3RhbnRpYXRpb24gdGltZS4gICovCitERUZUUkVFQ09ERSAoVEVNUExBVEVfSU5GTywgInRlbXBsYXRlX2luZm8iLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOmMKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY3AvY3AtdHJlZS5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NwL2NwLXRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWI1YmY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NwL2NwLXRyZWUuaApAQCAtMCwwICsxLDYwOTQgQEAKKy8qIERlZmluaXRpb25zIGZvciBDKysgcGFyc2luZyBhbmQgdHlwZSBjaGVja2luZy4KKyAgIENvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBUaWVtYW5uICh0aWVtYW5uQGN5Z251cy5jb20pCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DUF9UUkVFX0gKKyNkZWZpbmUgR0NDX0NQX1RSRUVfSAorCisjaW5jbHVkZSAiZ2djLmgiCisjaW5jbHVkZSAiZnVuY3Rpb24uaCIKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAidmVjLmgiCisKKy8qIEluIG9yZGVyIGZvciB0aGUgZm9ybWF0IGNoZWNraW5nIHRvIGFjY2VwdCB0aGUgQysrIGZyb250IGVuZAorICAgZGlhZ25vc3RpYyBmcmFtZXdvcmsgZXh0ZW5zaW9ucywgeW91IG11c3QgaW5jbHVkZSB0aGlzIGZpbGUgYmVmb3JlCisgICBkaWFnbm9zdGljLWNvcmUuaCwgbm90IGFmdGVyLiAgV2Ugb3ZlcnJpZGUgdGhlIGRlZmluaXRpb24gb2YgR0NDX0RJQUdfU1RZTEUKKyAgIGluIGMtY29tbW9uLmguICAqLworI3VuZGVmIEdDQ19ESUFHX1NUWUxFCisjZGVmaW5lIEdDQ19ESUFHX1NUWUxFIF9fZ2NjX2N4eGRpYWdfXworI2lmIGRlZmluZWQoR0NDX0RJQUdOT1NUSUNfQ09SRV9IKSB8fCBkZWZpbmVkIChHQ0NfQ19DT01NT05fSCkKKyNlcnJvciBcCitJbiBvcmRlciBmb3IgdGhlIGZvcm1hdCBjaGVja2luZyB0byBhY2NlcHQgdGhlIEMrKyBmcm9udCBlbmQgZGlhZ25vc3RpYyBcCitmcmFtZXdvcmsgZXh0ZW5zaW9ucywgeW91IG11c3QgaW5jbHVkZSB0aGlzIGZpbGUgYmVmb3JlIGRpYWdub3N0aWMtY29yZS5oIGFuZCBcCitjLWNvbW1vbi5oLCBub3QgYWZ0ZXIuCisjZW5kaWYKKyNpbmNsdWRlICJjLWZhbWlseS9jLWNvbW1vbi5oIgorI2luY2x1ZGUgImRpYWdub3N0aWMuaCIKKworI2luY2x1ZGUgIm5hbWUtbG9va3VwLmgiCisKKy8qIFVzYWdlIG9mIFRSRUVfTEFOR19GTEFHXz86CisgICAwOiBJREVOVElGSUVSX01BUktFRCAoSURFTlRJRklFUl9OT0RFcykKKyAgICAgIE5FV19FWFBSX1VTRV9HTE9CQUwgKGluIE5FV19FWFBSKS4KKyAgICAgIERFTEVURV9FWFBSX1VTRV9HTE9CQUwgKGluIERFTEVURV9FWFBSKS4KKyAgICAgIENPTVBPVU5EX0VYUFJfT1ZFUkxPQURFRCAoaW4gQ09NUE9VTkRfRVhQUikuCisgICAgICBUUkVFX0lORElSRUNUX1VTSU5HIChpbiBOQU1FU1BBQ0VfREVDTCkuCisgICAgICBDTEVBTlVQX1AgKGluIFRSWV9CTE9DSykKKyAgICAgIEFHR1JfSU5JVF9WSUFfQ1RPUl9QIChpbiBBR0dSX0lOSVRfRVhQUikKKyAgICAgIFBUUk1FTV9PS19QIChpbiBBRERSX0VYUFIsIE9GRlNFVF9SRUYsIFNDT1BFX1JFRikKKyAgICAgIFBBUkVOX1NUUklOR19MSVRFUkFMIChpbiBTVFJJTkdfQ1NUKQorICAgICAgREVDTF9HTlVfVExTX1AgKGluIFZBUl9ERUNMKQorICAgICAgS09FTklHX0xPT0tVUF9QIChpbiBDQUxMX0VYUFIpCisgICAgICBTVEFURU1FTlRfTElTVF9OT19TQ09QRSAoaW4gU1RBVEVNRU5UX0xJU1QpLgorICAgICAgRVhQUl9TVE1UX1NUTVRfRVhQUl9SRVNVTFQgKGluIEVYUFJfU1RNVCkKKyAgICAgIFNUTVRfRVhQUl9OT19TQ09QRSAoaW4gU1RNVF9FWFBSKQorICAgICAgQklORF9FWFBSX1RSWV9CTE9DSyAoaW4gQklORF9FWFBSKQorICAgICAgVFlQRU5BTUVfSVNfRU5VTV9QIChpbiBUWVBFTkFNRV9UWVBFKQorICAgICAgT01QX0ZPUl9HSU1QTElGWUlOR19QIChpbiBPTVBfRk9SKQorICAgICAgQkFTRUxJTktfUVVBTElGSUVEX1AgKGluIEJBU0VMSU5LKQorICAgICAgVEFSR0VUX0VYUFJfSU1QTElDSVRfUCAoaW4gVEFSR0VUX0VYUFIpCisgICAgICBURU1QTEFURV9QQVJNX1BBUkFNRVRFUl9QQUNLIChpbiBURU1QTEFURV9QQVJNX0lOREVYKQorICAgICAgQVRUUl9JU19ERVBFTkRFTlQgKGluIHRoZSBUUkVFX0xJU1QgZm9yIGFuIGF0dHJpYnV0ZSkKKyAgICAgIENPTlNUUlVDVE9SX0lTX0RJUkVDVF9JTklUIChpbiBDT05TVFJVQ1RPUikKKyAgICAgIExBTUJEQV9FWFBSX0NBUFRVUkVTX1RISVNfUCAoaW4gTEFNQkRBX0VYUFIpCisgICAgICBERUNMVFlQRV9GT1JfTEFNQkRBX0NBUFRVUkUgKGluIERFQ0xUWVBFX1RZUEUpCisgICAgICBWRUNfSU5JVF9FWFBSX0lTX0NPTlNURVhQUiAoaW4gVkVDX0lOSVRfRVhQUikKKyAgICAgIERFQ0xfT1ZFUlJJREVfUCAoaW4gRlVOQ1RJT05fREVDTCkKKyAgICAgIElNUExJQ0lUX0NPTlZfRVhQUl9ESVJFQ1RfSU5JVCAoaW4gSU1QTElDSVRfQ09OVl9FWFBSKQorICAgICAgVFJBTlNBQ1RJT05fRVhQUl9JU19TVE1UIChpbiBUUkFOU0FDVElPTl9FWFBSKQorICAgICAgQ09OVkVSVF9FWFBSX1ZCQVNFX1BBVEggKGluIENPTlZFUlRfRVhQUikKKyAgICAgIE9WTF9BUkdfREVQRU5ERU5UIChpbiBPVkVSTE9BRCkKKyAgICAgIFBBQ0tfRVhQQU5TSU9OX0xPQ0FMX1AgKGluICpfUEFDS19FWFBBTlNJT04pCisgICAgICBUSU5GT19SRUNIRUNLX0FDQ0VTU19QIChpbiBURU1QTEFURV9JTkZPKQorICAgICAgU0laRU9GX0VYUFJfVFlQRV9QIChpbiBTSVpFT0ZfRVhQUikKKyAgIDE6IElERU5USUZJRVJfVklSVFVBTF9QIChpbiBJREVOVElGSUVSX05PREUpCisgICAgICBUSV9QRU5ESU5HX1RFTVBMQVRFX0ZMQUcuCisgICAgICBURU1QTEFURV9QQVJNU19GT1JfSU5MSU5FLgorICAgICAgREVMRVRFX0VYUFJfVVNFX1ZFQyAoaW4gREVMRVRFX0VYUFIpLgorICAgICAgKFRSRUVfQ0FMTFNfTkVXKSAoaW4gX0VYUFIgb3IgX1JFRikgKGNvbW1lbnRlZC1vdXQpLgorICAgICAgSUNTX0VMTElQU0lTX0ZMQUcgKGluIF9DT05WKQorICAgICAgREVDTF9JTklUSUFMSVpFRF9QIChpbiBWQVJfREVDTCkKKyAgICAgIFRZUEVOQU1FX0lTX0NMQVNTX1AgKGluIFRZUEVOQU1FX1RZUEUpCisgICAgICBTVE1UX0lTX0ZVTExfRVhQUl9QIChpbiBfU1RNVCkKKyAgICAgIFRBUkdFVF9FWFBSX0xJU1RfSU5JVF9QIChpbiBUQVJHRVRfRVhQUikKKyAgICAgIExBTUJEQV9FWFBSX01VVEFCTEVfUCAoaW4gTEFNQkRBX0VYUFIpCisgICAgICBERUNMX0ZJTkFMX1AgKGluIEZVTkNUSU9OX0RFQ0wpCisgICAgICBRVUFMSUZJRURfTkFNRV9JU19URU1QTEFURSAoaW4gU0NPUEVfUkVGKQorICAgMjogSURFTlRJRklFUl9PUE5BTUVfUCAoaW4gSURFTlRJRklFUl9OT0RFKQorICAgICAgSUNTX1RISVNfRkxBRyAoaW4gX0NPTlYpCisgICAgICBERUNMX0lOSVRJQUxJWkVEX0JZX0NPTlNUQU5UX0VYUFJFU1NJT05fUCAoaW4gVkFSX0RFQ0wpCisgICAgICBTVEFURU1FTlRfTElTVF9UUllfQkxPQ0sgKGluIFNUQVRFTUVOVF9MSVNUKQorICAgICAgVFlQRU5BTUVfSVNfUkVTT0xWSU5HX1AgKGluIFRZUEVfTkFNRV9UWVBFKQorICAgICAgVEFSR0VUX0VYUFJfRElSRUNUX0lOSVRfUCAoaW4gVEFSR0VUX0VYUFIpCisgICAgICBGTkRFQ0xfVVNFRF9BVVRPIChpbiBGVU5DVElPTl9ERUNMKQorICAgMzogKFRSRUVfUkVGRVJFTkNFX0VYUFIpIChpbiBOT05fTFZBTFVFX0VYUFIpIChjb21tZW50ZWQtb3V0KS4KKyAgICAgIElDU19CQURfRkxBRyAoaW4gX0NPTlYpCisgICAgICBGTl9UUllfQkxPQ0tfUCAoaW4gVFJZX0JMT0NLKQorICAgICAgSURFTlRJRklFUl9DVE9SX09SX0RUT1JfUCAoaW4gSURFTlRJRklFUl9OT0RFKQorICAgICAgQklORF9FWFBSX0JPRFlfQkxPQ0sgKGluIEJJTkRfRVhQUikKKyAgICAgIERFQ0xfTk9OX1RSSVZJQUxMWV9JTklUSUFMSVpFRF9QIChpbiBWQVJfREVDTCkKKyAgIDQ6IFRSRUVfSEFTX0NPTlNUUlVDVE9SIChpbiBJTkRJUkVDVF9SRUYsIFNBVkVfRVhQUiwgQ09OU1RSVUNUT1IsCisJICBvciBGSUVMRF9ERUNMKS4KKyAgICAgIElERU5USUZJRVJfVFlQRU5BTUVfUCAoaW4gSURFTlRJRklFUl9OT0RFKQorICAgICAgREVDTF9USU5GT19QIChpbiBWQVJfREVDTCkKKyAgICAgIEZVTkNUSU9OX1JFRl9RVUFMSUZJRUQgKGluIEZVTkNUSU9OX1RZUEUsIE1FVEhPRF9UWVBFKQorICAgNTogQ19JU19SRVNFUlZFRF9XT1JEIChpbiBJREVOVElGSUVSX05PREUpCisgICAgICBERUNMX1ZUQUJMRV9PUl9WVFRfUCAoaW4gVkFSX0RFQ0wpCisgICAgICBGVU5DVElPTl9SVkFMVUVfUVVBTElGSUVEIChpbiBGVU5DVElPTl9UWVBFLCBNRVRIT0RfVFlQRSkKKyAgIDY6IElERU5USUZJRVJfUkVQT19DSE9TRU4gKGluIElERU5USUZJRVJfTk9ERSkKKyAgICAgIERFQ0xfQ09OU1RSVUNUSU9OX1ZUQUJMRV9QIChpbiBWQVJfREVDTCkKKyAgICAgIFRZUEVfTUFSS0VEX1AgKGluIF9UWVBFKQorCisgICBVc2FnZSBvZiBUWVBFX0xBTkdfRkxBR18/OgorICAgMDogVFlQRV9ERVBFTkRFTlRfUAorICAgMTogVFlQRV9IQVNfVVNFUl9DT05TVFJVQ1RPUi4KKyAgIDI6IHVudXNlZAorICAgMzogVFlQRV9GT1JfSkFWQS4KKyAgIDQ6IFRZUEVfSEFTX05PTlRSSVZJQUxfREVTVFJVQ1RPUgorICAgNTogQ0xBU1NfVFlQRV9QIChpbiBSRUNPUkRfVFlQRSBhbmQgVU5JT05fVFlQRSkKKyAgICAgIEVOVU1fRklYRURfVU5ERVJMWUlOR19UWVBFX1AgKGluIEVOVU1FUkFMX1RZUEUpCisgICA2OiBUWVBFX0RFUEVOREVOVF9QX1ZBTElECisKKyAgIFVzYWdlIG9mIERFQ0xfTEFOR19GTEFHXz86CisgICAwOiBERUNMX0VSUk9SX1JFUE9SVEVEIChpbiBWQVJfREVDTCkuCisgICAgICBERUNMX1RFTVBMQVRFX1BBUk1fUCAoaW4gUEFSTV9ERUNMLCBDT05TVF9ERUNMLCBUWVBFX0RFQ0wsIG9yIFRFTVBMQVRFX0RFQ0wpCisgICAgICBERUNMX0xPQ0FMX0ZVTkNUSU9OX1AgKGluIEZVTkNUSU9OX0RFQ0wpCisgICAgICBERUNMX01VVEFCTEVfUCAoaW4gRklFTERfREVDTCkKKyAgICAgIERFQ0xfREVQRU5ERU5UX1AgKGluIFVTSU5HX0RFQ0wpCisgICAxOiBDX1RZUEVERUZfRVhQTElDSVRMWV9TSUdORUQgKGluIFRZUEVfREVDTCkuCisgICAgICBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRFRCAoaW4gYSBWQVJfREVDTCBvciBhIEZVTkNUSU9OX0RFQ0wpCisgICAgICBERUNMX01FTUJFUl9URU1QTEFURV9QIChpbiBURU1QTEFURV9ERUNMKQorICAgICAgRlVOQ1RJT05fUEFSQU1FVEVSX1BBQ0tfUCAoaW4gUEFSTV9ERUNMKQorICAgICAgVVNJTkdfREVDTF9UWVBFTkFNRV9QIChpbiBVU0lOR19ERUNMKQorICAgMjogREVDTF9USElTX0VYVEVSTiAoaW4gVkFSX0RFQ0wgb3IgRlVOQ1RJT05fREVDTCkuCisgICAgICBERUNMX0lNUExJQ0lUX1RZUEVERUZfUCAoaW4gYSBUWVBFX0RFQ0wpCisgICAzOiBERUNMX0lOX0FHR1JfUC4KKyAgIDQ6IERFQ0xfQ19CSVRfRklFTEQgKGluIGEgRklFTERfREVDTCkKKyAgICAgIERFQ0xfQU5PTl9VTklPTl9WQVJfUCAoaW4gYSBWQVJfREVDTCkKKyAgICAgIERFQ0xfU0VMRl9SRUZFUkVOQ0VfUCAoaW4gYSBUWVBFX0RFQ0wpCisgICAgICBERUNMX0lOVkFMSURfT1ZFUlJJREVSX1AgKGluIGEgRlVOQ1RJT05fREVDTCkKKyAgIDU6IERFQ0xfSU5URVJGQUNFX0tOT1dOLgorICAgNjogREVDTF9USElTX1NUQVRJQyAoaW4gVkFSX0RFQ0wgb3IgRlVOQ1RJT05fREVDTCkuCisgICAgICBERUNMX0ZJRUxEX0lTX0JBU0UgKGluIEZJRUxEX0RFQ0wpCisgICAgICBUWVBFX0RFQ0xfQUxJQVNfUCAoaW4gVFlQRV9ERUNMKQorICAgNzogREVDTF9ERUFEX0ZPUl9MT0NBTCAoaW4gVkFSX0RFQ0wpLgorICAgICAgREVDTF9USFVOS19QIChpbiBhIG1lbWJlciBGVU5DVElPTl9ERUNMKQorICAgICAgREVDTF9OT1JNQUxfQ0FQVFVSRV9QIChpbiBGSUVMRF9ERUNMKQorICAgODogREVDTF9ERUNMQVJFRF9DT05TVEVYUFJfUCAoaW4gVkFSX0RFQ0wsIEZVTkNUSU9OX0RFQ0wpCisKKyAgIFVzYWdlIG9mIGxhbmd1YWdlLWluZGVwZW5kZW50IGZpZWxkcyBpbiBhIGxhbmd1YWdlLWRlcGVuZGVudCBtYW5uZXI6CisKKyAgIFRZUEVfQUxJQVNfU0VUCisgICAgIFRoaXMgZmllbGQgaXMgdXNlZCBieSBUWVBFTkFNRV9UWVBFcywgVEVNUExBVEVfVFlQRV9QQVJNcywgYW5kIHNvCisgICAgIGZvcnRoIGFzIGEgc3Vic3RpdHV0ZSBmb3IgdGhlIG1hcmsgYml0cyBwcm92aWRlZCBpbiBgbGFuZ190eXBlJy4KKyAgICAgQXQgcHJlc2VudCwgb25seSB0aGUgc2l4IGxvdy1vcmRlciBiaXRzIGFyZSB1c2VkLgorCisgICBUWVBFX0xBTkdfU0xPVF8xCisgICAgIEZvciBhbiBFTlVNRVJBTF9UWVBFLCB0aGlzIGlzIEVOVU1fVEVNUExBVEVfSU5GTy4KKyAgICAgRm9yIGEgRlVOQ1RJT05fVFlQRSBvciBNRVRIT0RfVFlQRSwgdGhpcyBpcyBUWVBFX1JBSVNFU19FWENFUFRJT05TCisKKyAgQklORk9fVklSVFVBTFMKKyAgICAgRm9yIGEgYmluZm8sIHRoaXMgaXMgYSBUUkVFX0xJU1QuICBUaGVyZSBpcyBhbiBlbnRyeSBmb3IgZWFjaAorICAgICB2aXJ0dWFsIGZ1bmN0aW9uIGRlY2xhcmVkIGVpdGhlciBpbiBCSU5GTyBvciBpdHMgZGlyZWN0IGFuZAorICAgICBpbmRpcmVjdCBwcmltYXJ5IGJhc2VzLgorCisgICAgIFRoZSBCVl9ERUxUQSBvZiBlYWNoIG5vZGUgZ2l2ZXMgdGhlIGFtb3VudCBieSB3aGljaCB0byBhZGp1c3QgdGhlCisgICAgIGB0aGlzJyBwb2ludGVyIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb24uICBJZiB0aGUgbWV0aG9kIGlzIGFuCisgICAgIG92ZXJyaWRkZW4gdmVyc2lvbiBvZiBhIGJhc2UgY2xhc3MgbWV0aG9kLCB0aGVuIGl0IGlzIGFzc3VtZWQKKyAgICAgdGhhdCwgcHJpb3IgdG8gYWRqdXN0bWVudCwgdGhlIHRoaXMgcG9pbnRlciBwb2ludHMgdG8gYW4gb2JqZWN0CisgICAgIG9mIHRoZSBiYXNlIGNsYXNzLgorCisgICAgIFRoZSBCVl9WQ0FMTF9JTkRFWCBvZiBlYWNoIG5vZGUsIGlmIG5vbi1OVUxMLCBnaXZlcyB0aGUgdnRhYmxlCisgICAgIGluZGV4IG9mIHRoZSB2Y2FsbCBvZmZzZXQgZm9yIHRoaXMgZW50cnkuCisKKyAgICAgVGhlIEJWX0ZOIGlzIHRoZSBkZWNsYXJhdGlvbiBmb3IgdGhlIHZpcnR1YWwgZnVuY3Rpb24gaXRzZWxmLgorCisgICAgIElmIEJWX0xPU1RfUFJJTUFSWSBpcyBzZXQsIGl0IG1lYW5zIHRoYXQgdGhpcyBlbnRyeSBpcyBmb3IgYSBsb3N0CisgICAgIHByaW1hcnkgdmlydHVhbCBiYXNlIGFuZCBjYW4gYmUgbGVmdCBudWxsIGluIHRoZSB2dGFibGUuCisKKyAgIEJJTkZPX1ZUQUJMRQorICAgICBUaGlzIGlzIGFuIGV4cHJlc3Npb24gd2l0aCBQT0lOVEVSX1RZUEUgdGhhdCBnaXZlcyB0aGUgdmFsdWUKKyAgICAgdG8gd2hpY2ggdGhlIHZwdHIgc2hvdWxkIGJlIGluaXRpYWxpemVkLiAgVXNlIGdldF92dGJsX2RlY2xfZm9yX2JpbmZvCisgICAgIHRvIGV4dHJhY3QgdGhlIFZBUl9ERUNMIGZvciB0aGUgY29tcGxldGUgdnRhYmxlLgorCisgICBERUNMX1ZJTkRFWAorICAgICBUaGlzIGZpZWxkIGlzIE5VTEwgZm9yIGEgbm9uLXZpcnR1YWwgZnVuY3Rpb24uICBGb3IgYSB2aXJ0dWFsCisgICAgIGZ1bmN0aW9uLCBpdCBpcyBldmVudHVhbGx5IHNldCB0byBhbiBJTlRFR0VSX0NTVCBpbmRpY2F0aW5nIHRoZQorICAgICBpbmRleCBpbiB0aGUgdnRhYmxlIGF0IHdoaWNoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGZvdW5kLiAgV2hlbgorICAgICBhIHZpcnR1YWwgZnVuY3Rpb24gaXMgZGVjbGFyZWQsIGJ1dCBiZWZvcmUgaXQgaXMga25vd24gd2hhdAorICAgICBmdW5jdGlvbiBpcyBvdmVycmlkZGVuLCB0aGlzIGZpZWxkIGlzIHRoZSBlcnJvcl9tYXJrX25vZGUuCisKKyAgICAgVGVtcG9yYXJpbHksIGl0IG1heSBiZSBzZXQgdG8gYSBUUkVFX0xJU1Qgd2hvc2UgVFJFRV9WQUxVRSBpcworICAgICB0aGUgdmlydHVhbCBmdW5jdGlvbiB0aGlzIG9uZSBvdmVycmlkZXMsIGFuZCB3aG9zZSBUUkVFX0NIQUlOIGlzCisgICAgIHRoZSBvbGQgREVDTF9WSU5ERVguICAqLworCisvKiBMYW5ndWFnZS1zcGVjaWZpYyB0cmVlIGNoZWNrZXJzLiAgKi8KKworI2RlZmluZSBWQVJfT1JfRlVOQ1RJT05fREVDTF9DSEVDSyhOT0RFKSBcCisgIFRSRUVfQ0hFQ0syKE5PREUsVkFSX0RFQ0wsRlVOQ1RJT05fREVDTCkKKworI2RlZmluZSBUWVBFX0ZVTkNUSU9OX09SX1RFTVBMQVRFX0RFQ0xfQ0hFQ0soTk9ERSkgXAorICBUUkVFX0NIRUNLMyhOT0RFLFRZUEVfREVDTCxURU1QTEFURV9ERUNMLEZVTkNUSU9OX0RFQ0wpCisKKyNkZWZpbmUgVFlQRV9GVU5DVElPTl9PUl9URU1QTEFURV9ERUNMX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBUWVBFX0RFQ0wgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBURU1QTEFURV9ERUNMIFwKKyAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gRlVOQ1RJT05fREVDTCkKKworI2RlZmluZSBWQVJfRlVOQ1RJT05fT1JfUEFSTV9ERUNMX0NIRUNLKE5PREUpIFwKKyAgVFJFRV9DSEVDSzMoTk9ERSxWQVJfREVDTCxGVU5DVElPTl9ERUNMLFBBUk1fREVDTCkKKworI2RlZmluZSBWQVJfVEVNUExfVFlQRV9PUl9GVU5DVElPTl9ERUNMX0NIRUNLKE5PREUpIFwKKyAgVFJFRV9DSEVDSzQoTk9ERSxWQVJfREVDTCxGVU5DVElPTl9ERUNMLFRZUEVfREVDTCxURU1QTEFURV9ERUNMKQorCisjZGVmaW5lIFZBUl9URU1QTF9UWVBFX0ZJRUxEX09SX0ZVTkNUSU9OX0RFQ0xfQ0hFQ0soTk9ERSkgXAorICBUUkVFX0NIRUNLNShOT0RFLFZBUl9ERUNMLEZJRUxEX0RFQ0wsRlVOQ1RJT05fREVDTCxUWVBFX0RFQ0wsVEVNUExBVEVfREVDTCkKKworI2RlZmluZSBCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNX1RZUEVfQ0hFQ0soTk9ERSkgXAorICBUUkVFX0NIRUNLKE5PREUsQk9VTkRfVEVNUExBVEVfVEVNUExBVEVfUEFSTSkKKworI2lmIGRlZmluZWQgRU5BQkxFX1RSRUVfQ0hFQ0tJTkcgJiYgKEdDQ19WRVJTSU9OID49IDIwMDcpCisjZGVmaW5lIFRIVU5LX0ZVTkNUSU9OX0NIRUNLKE5PREUpIF9fZXh0ZW5zaW9uX18JCQlcCisoeyAgX190eXBlb2YgKE5PREUpIGNvbnN0IF9fdCA9IChOT0RFKTsJCQkJCVwKKyAgICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IEZVTkNUSU9OX0RFQ0wgfHwgIV9fdC0+ZGVjbF9jb21tb24ubGFuZ19zcGVjaWZpYyBcCisJfHwgIV9fdC0+ZGVjbF9jb21tb24ubGFuZ19zcGVjaWZpYy0+dS5mbi50aHVua19wKQkJXAorICAgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sIDApOwlcCisgICAgIF9fdDsgfSkKKyNlbHNlCisjZGVmaW5lIFRIVU5LX0ZVTkNUSU9OX0NIRUNLKE5PREUpIChOT0RFKQorI2VuZGlmCisMCisvKiBMYW5ndWFnZS1kZXBlbmRlbnQgY29udGVudHMgb2YgYW4gaWRlbnRpZmllci4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmdfaWRlbnRpZmllciB7CisgIHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyIGNfY29tbW9uOworICBjeHhfYmluZGluZyAqbmFtZXNwYWNlX2JpbmRpbmdzOworICBjeHhfYmluZGluZyAqYmluZGluZ3M7CisgIHRyZWUgY2xhc3NfdGVtcGxhdGVfaW5mbzsKKyAgdHJlZSBsYWJlbF92YWx1ZTsKK307CisKKy8qIEluIGFuIElERU5USUZJRVJfTk9ERSwgbm9uemVybyBpZiB0aGlzIGlkZW50aWZpZXIgaXMgYWN0dWFsbHkgYQorICAga2V5d29yZC4gIENfUklEX0NPREUgKG5vZGUpIGlzIHRoZW4gdGhlIFJJRF8qIHZhbHVlIG9mIHRoZSBrZXl3b3JkLAorICAgYW5kIENfUklEX1lZQ09ERSBpcyB0aGUgdG9rZW4gbnVtYmVyIHdhbnRlZCBieSBZYWNjLiAgKi8KKworI2RlZmluZSBDX0lTX1JFU0VSVkVEX1dPUkQoSUQpIFRSRUVfTEFOR19GTEFHXzUgKElEKQorCisjZGVmaW5lIExBTkdfSURFTlRJRklFUl9DQVNUKE5PREUpIFwKKwkoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIqKUlERU5USUZJRVJfTk9ERV9DSEVDSyAoTk9ERSkpCisKK3N0cnVjdCBHVFkoKCkpIHRlbXBsYXRlX3Bhcm1faW5kZXhfcyB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIGludCBpbmRleDsKKyAgaW50IGxldmVsOworICBpbnQgb3JpZ19sZXZlbDsKKyAgdHJlZSBkZWNsOworfTsKK3R5cGVkZWYgc3RydWN0IHRlbXBsYXRlX3Bhcm1faW5kZXhfcyB0ZW1wbGF0ZV9wYXJtX2luZGV4OworCitzdHJ1Y3QgR1RZKCgpKSBwdHJtZW1fY3N0IHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgdHJlZSBtZW1iZXI7Cit9OwordHlwZWRlZiBzdHJ1Y3QgcHRybWVtX2NzdCAqIHB0cm1lbV9jc3RfdDsKKworI2RlZmluZSBJREVOVElGSUVSX0dMT0JBTF9WQUxVRShOT0RFKSBcCisgIG5hbWVzcGFjZV9iaW5kaW5nICgoTk9ERSksIGdsb2JhbF9uYW1lc3BhY2UpCisjZGVmaW5lIFNFVF9JREVOVElGSUVSX0dMT0JBTF9WQUxVRShOT0RFLCBWQUwpIFwKKyAgc2V0X25hbWVzcGFjZV9iaW5kaW5nICgoTk9ERSksIGdsb2JhbF9uYW1lc3BhY2UsIChWQUwpKQorI2RlZmluZSBJREVOVElGSUVSX05BTUVTUEFDRV9WQUxVRShOT0RFKSBcCisgIG5hbWVzcGFjZV9iaW5kaW5nICgoTk9ERSksIGN1cnJlbnRfbmFtZXNwYWNlKQorI2RlZmluZSBTRVRfSURFTlRJRklFUl9OQU1FU1BBQ0VfVkFMVUUoTk9ERSwgVkFMKSBcCisgIHNldF9uYW1lc3BhY2VfYmluZGluZyAoKE5PREUpLCBjdXJyZW50X25hbWVzcGFjZSwgKFZBTCkpCisKKyNkZWZpbmUgQ0xFQU5VUF9QKE5PREUpCQlUUkVFX0xBTkdfRkxBR18wIChUUllfQkxPQ0tfQ0hFQ0sgKE5PREUpKQorCisjZGVmaW5lIEJJTkRfRVhQUl9UUllfQkxPQ0soTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18wIChCSU5EX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBVc2VkIHRvIG1hcmsgdGhlIGJsb2NrIGFyb3VuZCB0aGUgbWVtYmVyIGluaXRpYWxpemVycyBhbmQgY2xlYW51cHMuICAqLworI2RlZmluZSBCSU5EX0VYUFJfQk9EWV9CTE9DSyhOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzMgKEJJTkRfRVhQUl9DSEVDSyAoTk9ERSkpCisjZGVmaW5lIEZVTkNUSU9OX05FRURTX0JPRFlfQkxPQ0soTk9ERSkgXAorICAoREVDTF9DT05TVFJVQ1RPUl9QIChOT0RFKSB8fCBERUNMX0RFU1RSVUNUT1JfUCAoTk9ERSkgXAorICAgfHwgTEFNQkRBX0ZVTkNUSU9OX1AgKE5PREUpKQorCisjZGVmaW5lIFNUQVRFTUVOVF9MSVNUX05PX1NDT1BFKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoU1RBVEVNRU5UX0xJU1RfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBTVEFURU1FTlRfTElTVF9UUllfQkxPQ0soTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18yIChTVEFURU1FTlRfTElTVF9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBzdGF0ZW1lbnQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBmdWxsLWV4cHJlc3Npb24sCisgICBpLmUuLCBpZiB0ZW1wb3JhcmllcyBjcmVhdGVkIGR1cmluZyB0aGlzIHN0YXRlbWVudCBzaG91bGQgaGF2ZQorICAgdGhlaXIgZGVzdHJ1Y3RvcnMgcnVuIGF0IHRoZSBlbmQgb2YgdGhpcyBzdGF0ZW1lbnQuICAqLworI2RlZmluZSBTVE1UX0lTX0ZVTExfRVhQUl9QKE5PREUpIFRSRUVfTEFOR19GTEFHXzEgKChOT0RFKSkKKworLyogTWFya3MgdGhlIHJlc3VsdCBvZiBhIHN0YXRlbWVudCBleHByZXNzaW9uLiAgKi8KKyNkZWZpbmUgRVhQUl9TVE1UX1NUTVRfRVhQUl9SRVNVTFQoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18wIChFWFBSX1NUTVRfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGlmIHRoaXMgc3RhdGVtZW50LWV4cHJlc3Npb24gZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHNjb3BlLiAgKi8KKyNkZWZpbmUgU1RNVF9FWFBSX05PX1NDT1BFKE5PREUpIFwKKyAgIFRSRUVfTEFOR19GTEFHXzAgKFNUTVRfRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIFJldHVybnMgbm9uemVybyBpZmYgVFlQRTEgYW5kIFRZUEUyIGFyZSB0aGUgc2FtZSB0eXBlLCBpbiB0aGUgdXN1YWwKKyAgIHNlbnNlIG9mIGBzYW1lJy4gICovCisjZGVmaW5lIHNhbWVfdHlwZV9wKFRZUEUxLCBUWVBFMikgXAorICBjb21wdHlwZXMgKChUWVBFMSksIChUWVBFMiksIENPTVBBUkVfU1RSSUNUKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWZmIE5PREUgaXMgYSBkZWNsYXJhdGlvbiBmb3IgdGhlIGdsb2JhbCBmdW5jdGlvbgorICAgYG1haW4nLiAgKi8KKyNkZWZpbmUgREVDTF9NQUlOX1AoTk9ERSkJCQkJXAorICAgKERFQ0xfRVhURVJOX0NfRlVOQ1RJT05fUCAoTk9ERSkJCQlcCisgICAgJiYgREVDTF9OQU1FIChOT0RFKSAhPSBOVUxMX1RSRUUJCQlcCisgICAgJiYgTUFJTl9OQU1FX1AgKERFQ0xfTkFNRSAoTk9ERSkpCQkJXAorICAgICYmIGZsYWdfaG9zdGVkKQorCisvKiBUaGUgb3ZlcmxvYWRlZCBGVU5DVElPTl9ERUNMLiAgKi8KKyNkZWZpbmUgT1ZMX0ZVTkNUSU9OKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfb3ZlcmxvYWQqKU9WRVJMT0FEX0NIRUNLIChOT0RFKSktPmZ1bmN0aW9uKQorI2RlZmluZSBPVkxfQ0hBSU4oTk9ERSkgICAgICBUUkVFX0NIQUlOIChOT0RFKQorLyogUG9seW1vcnBoaWMgYWNjZXNzIHRvIEZVTkNUSU9OIGFuZCBDSEFJTi4gICovCisjZGVmaW5lIE9WTF9DVVJSRU5UKE5PREUpCVwKKyAgKChUUkVFX0NPREUgKE5PREUpID09IE9WRVJMT0FEKSA/IE9WTF9GVU5DVElPTiAoTk9ERSkgOiAoTk9ERSkpCisjZGVmaW5lIE9WTF9ORVhUKE5PREUpCQlcCisgICgoVFJFRV9DT0RFIChOT0RFKSA9PSBPVkVSTE9BRCkgPyBUUkVFX0NIQUlOIChOT0RFKSA6IE5VTExfVFJFRSkKKy8qIElmIHNldCwgdGhpcyB3YXMgaW1wb3J0ZWQgaW4gYSB1c2luZyBkZWNsYXJhdGlvbi4KKyAgIFRoaXMgaXMgbm90IHRvIGNvbmZ1c2Ugd2l0aCBiZWluZyB1c2VkIHNvbWV3aGVyZSwgd2hpY2gKKyAgIGlzIG5vdCBpbXBvcnRhbnQgZm9yIHRoaXMgbm9kZS4gICovCisjZGVmaW5lIE9WTF9VU0VEKE5PREUpCQlUUkVFX1VTRUQgKE5PREUpCisvKiBJZiBzZXQsIHRoaXMgT1ZFUkxPQUQgd2FzIGNyZWF0ZWQgZm9yIGFyZ3VtZW50LWRlcGVuZGVudCBsb29rdXAKKyAgIGFuZCBjYW4gYmUgZnJlZWQgYWZ0ZXJ3YXJkLiAgKi8KKyNkZWZpbmUgT1ZMX0FSR19ERVBFTkRFTlQoTk9ERSkgVFJFRV9MQU5HX0ZMQUdfMCAoT1ZFUkxPQURfQ0hFQ0sgKE5PREUpKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX292ZXJsb2FkIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgdHJlZSBmdW5jdGlvbjsKK307CisKKy8qIFJldHVybnMgdHJ1ZSBpZmYgTk9ERSBpcyBhIEJBU0VMSU5LLiAgKi8KKyNkZWZpbmUgQkFTRUxJTktfUChOT0RFKSBcCisgIChUUkVFX0NPREUgKE5PREUpID09IEJBU0VMSU5LKQorLyogVGhlIEJJTkZPIGluZGljYXRpbmcgdGhlIGJhc2UgZnJvbSB3aGljaCB0aGUgQkFTRUxJTktfRlVOQ1RJT05TIGNhbWUuICAqLworI2RlZmluZSBCQVNFTElOS19CSU5GTyhOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2Jhc2VsaW5rKikgQkFTRUxJTktfQ0hFQ0sgKE5PREUpKS0+YmluZm8pCisvKiBUaGUgZnVuY3Rpb25zIHJlZmVycmVkIHRvIGJ5IHRoZSBCQVNFTElOSzsgZWl0aGVyIGEgRlVOQ1RJT05fREVDTCwKKyAgIGEgVEVNUExBVEVfREVDTCwgYW4gT1ZFUkxPQUQsIG9yIGEgVEVNUExBVEVfSURfRVhQUi4gICovCisjZGVmaW5lIEJBU0VMSU5LX0ZVTkNUSU9OUyhOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2Jhc2VsaW5rKikgQkFTRUxJTktfQ0hFQ0sgKE5PREUpKS0+ZnVuY3Rpb25zKQorLyogVGhlIEJJTkZPIGluIHdoaWNoIHRoZSBzZWFyY2ggZm9yIHRoZSBmdW5jdGlvbnMgaW5kaWNhdGVkIGJ5IHRoaXMgYmFzZWxpbmsKKyAgIGJlZ2FuLiAgVGhpcyBiYXNlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBhY2Nlc3NpYmlsaXR5IG9mIGZ1bmN0aW9ucworICAgc2VsZWN0ZWQgYnkgb3ZlcmxvYWQgcmVzb2x1dGlvbi4gICovCisjZGVmaW5lIEJBU0VMSU5LX0FDQ0VTU19CSU5GTyhOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2Jhc2VsaW5rKikgQkFTRUxJTktfQ0hFQ0sgKE5PREUpKS0+YWNjZXNzX2JpbmZvKQorLyogRm9yIGEgdHlwZS1jb252ZXJzaW9uIG9wZXJhdG9yLCB0aGUgQkFTRUxJTktfT1BUWVBFIGluZGljYXRlcyB0aGUgdHlwZQorICAgdG8gd2hpY2ggdGhlIGNvbnZlcnNpb24gc2hvdWxkIG9jY3VyLiAgVGhpcyB2YWx1ZSBpcyBpbXBvcnRhbnQgaWYKKyAgIHRoZSBCQVNFTElOS19GVU5DVElPTlMgaW5jbHVkZSBhIHRlbXBsYXRlIGNvbnZlcnNpb24gb3BlcmF0b3IgLS0KKyAgIHRoZSBCQVNFTElOS19PUFRZUEUgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSB0aGUgdXNlcgorICAgcmVxdWVzdGVkLiAgKi8KKyNkZWZpbmUgQkFTRUxJTktfT1BUWVBFKE5PREUpIFwKKyAgKFRSRUVfQ0hBSU4gKEJBU0VMSU5LX0NIRUNLIChOT0RFKSkpCisvKiBOb256ZXJvIGlmIHRoaXMgYmFzZWxpbmsgd2FzIGZyb20gYSBxdWFsaWZpZWQgbG9va3VwLiAgKi8KKyNkZWZpbmUgQkFTRUxJTktfUVVBTElGSUVEX1AoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18wIChCQVNFTElOS19DSEVDSyAoTk9ERSkpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfYmFzZWxpbmsgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICB0cmVlIGJpbmZvOworICB0cmVlIGZ1bmN0aW9uczsKKyAgdHJlZSBhY2Nlc3NfYmluZm87Cit9OworCisvKiBUaGUgZGlmZmVyZW50IGtpbmRzIG9mIGlkcyB0aGF0IHdlIGVuY291bnRlci4gICovCisKK3R5cGVkZWYgZW51bSBjcF9pZF9raW5kCit7CisgIC8qIE5vdCBhbiBpZCBhdCBhbGwuICAqLworICBDUF9JRF9LSU5EX05PTkUsCisgIC8qIEFuIHVucXVhbGlmaWVkLWlkIHRoYXQgaXMgbm90IGEgdGVtcGxhdGUtaWQuICAqLworICBDUF9JRF9LSU5EX1VOUVVBTElGSUVELAorICAvKiBBbiB1bnF1YWxpZmllZC1pZCB0aGF0IGlzIGEgZGVwZW5kZW50IG5hbWUuICAqLworICBDUF9JRF9LSU5EX1VOUVVBTElGSUVEX0RFUEVOREVOVCwKKyAgLyogQW4gdW5xdWFsaWZpZWQgdGVtcGxhdGUtaWQuICAqLworICBDUF9JRF9LSU5EX1RFTVBMQVRFX0lELAorICAvKiBBIHF1YWxpZmllZC1pZC4gICovCisgIENQX0lEX0tJTkRfUVVBTElGSUVECit9IGNwX2lkX2tpbmQ7CisKKworLyogVGhlIHZhcmlvdXMga2luZHMgb2YgQysrMHggd2FybmluZ3Mgd2UgZW5jb3VudGVyLiAqLworCit0eXBlZGVmIGVudW0gY3BwMHhfd2Fybl9zdHIKK3sKKyAgLyogZXh0ZW5kZWQgaW5pdGlhbGl6ZXIgbGlzdHMgKi8KKyAgQ1BQMFhfSU5JVElBTElaRVJfTElTVFMsCisgIC8qIGV4cGxpY2l0IGNvbnZlcnNpb24gb3BlcmF0b3JzICovCisgIENQUDBYX0VYUExJQ0lUX0NPTlZFUlNJT04sCisgIC8qIHZhcmlhZGljIHRlbXBsYXRlcyAqLworICBDUFAwWF9WQVJJQURJQ19URU1QTEFURVMsCisgIC8qIGxhbWJkYSBleHByZXNzaW9ucyAqLworICBDUFAwWF9MQU1CREFfRVhQUiwKKyAgLyogQysrMHggYXV0byAqLworICBDUFAwWF9BVVRPLAorICAvKiBzY29wZWQgZW51bXMgKi8KKyAgQ1BQMFhfU0NPUEVEX0VOVU1TLAorICAvKiBkZWZhdWx0ZWQgYW5kIGRlbGV0ZWQgZnVuY3Rpb25zICovCisgIENQUDBYX0RFRkFVTFRFRF9ERUxFVEVELAorICAvKiBpbmxpbmUgbmFtZXNwYWNlcyAqLworICBDUFAwWF9JTkxJTkVfTkFNRVNQQUNFUywKKyAgLyogb3ZlcnJpZGUgY29udHJvbHMsIG92ZXJyaWRlL2ZpbmFsICovCisgIENQUDBYX09WRVJSSURFX0NPTlRST0xTLAorICAvKiBub24tc3RhdGljIGRhdGEgbWVtYmVyIGluaXRpYWxpemVycyAqLworICBDUFAwWF9OU0RNSSwKKyAgLyogdXNlciBkZWZpbmVkIGxpdGVyYWxzICovCisgIENQUDBYX1VTRVJfREVGSU5FRF9MSVRFUkFMUywKKyAgLyogZGVsZWdhdGluZyBjb25zdHJ1Y3RvcnMgKi8KKyAgQ1BQMFhfREVMRUdBVElOR19DVE9SUywKKyAgLyogaW5oZXJpdGluZyBjb25zdHJ1Y3RvcnMgKi8KKyAgQ1BQMFhfSU5IRVJJVElOR19DVE9SUywKKyAgLyogQysrMTEgYXR0cmlidXRlcyAqLworICBDUFAwWF9BVFRSSUJVVEVTLAorICAvKiByZWYtcXVhbGlmaWVkIG1lbWJlciBmdW5jdGlvbnMgKi8KKyAgQ1BQMFhfUkVGX1FVQUxJRklFUgorfSBjcHAweF93YXJuX3N0cjsKKworLyogVGhlIHZhcmlvdXMga2luZHMgb2Ygb3BlcmF0aW9uIHVzZWQgYnkgY29tcG9zaXRlX3BvaW50ZXJfdHlwZS4gKi8KKwordHlwZWRlZiBlbnVtIGNvbXBvc2l0ZV9wb2ludGVyX29wZXJhdGlvbgoreworICAvKiBjb21wYXJpc29uICovCisgIENQT19DT01QQVJJU09OLAorICAvKiBjb252ZXJzaW9uICovCisgIENQT19DT05WRVJTSU9OLAorICAvKiBjb25kaXRpb25hbCBleHByZXNzaW9uICovCisgIENQT19DT05ESVRJT05BTF9FWFBSCit9IGNvbXBvc2l0ZV9wb2ludGVyX29wZXJhdGlvbjsKKworLyogUG9zc2libGUgY2FzZXMgb2YgZXhwcmVzc2lvbiBsaXN0IHVzZWQgYnkgYnVpbGRfeF9jb21wb3VuZF9leHByX2Zyb21fbGlzdC4gKi8KK3R5cGVkZWYgZW51bSBleHByX2xpc3Rfa2luZCB7CisgIEVMS19JTklULAkJLyogaW5pdGlhbGl6ZXIgKi8KKyAgRUxLX01FTV9JTklULAkJLyogbWVtYmVyIGluaXRpYWxpemVyICovCisgIEVMS19GVU5DX0NBU1QJCS8qIGZ1bmN0aW9uYWwgY2FzdCAqLworfSBleHByX2xpc3Rfa2luZDsgCisKKy8qIFBvc3NpYmxlIGNhc2VzIG9mIGltcGxpY2l0IGJhZCByaHMgY29udmVyc2lvbnMuICovCit0eXBlZGVmIGVudW0gaW1wbF9jb252X3JocyB7CisgIElDUl9ERUZBVUxUX0FSR1VNRU5ULCAvKiBkZWZhdWx0IGFyZ3VtZW50ICovCisgIElDUl9DT05WRVJUSU5HLCAgICAgICAvKiBjb252ZXJ0aW5nICovCisgIElDUl9JTklULCAgICAgICAgICAgICAvKiBpbml0aWFsaXphdGlvbiAqLworICBJQ1JfQVJHUEFTUywgICAgICAgICAgLyogYXJndW1lbnQgcGFzc2luZyAqLworICBJQ1JfUkVUVVJOLCAgICAgICAgICAgLyogcmV0dXJuICovCisgIElDUl9BU1NJR04gICAgICAgICAgICAvKiBhc3NpZ25tZW50ICovCit9IGltcGxfY29udl9yaHM7CisKKy8qIFBvc3NpYmxlIGNhc2VzIG9mIGltcGxpY2l0IG9yIGV4cGxpY2l0IGJhZCBjb252ZXJzaW9ucyB0byB2b2lkLiAqLwordHlwZWRlZiBlbnVtIGltcGxfY29udl92b2lkIHsKKyAgSUNWX0NBU1QsICAgICAgICAgICAgLyogKGV4cGxpY2l0KSBjb252ZXJzaW9uIHRvIHZvaWQgKi8KKyAgSUNWX1NFQ09ORF9PRl9DT05ELCAgLyogc2Vjb25kIG9wZXJhbmQgb2YgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiAqLworICBJQ1ZfVEhJUkRfT0ZfQ09ORCwgICAvKiB0aGlyZCBvcGVyYW5kIG9mIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gKi8KKyAgSUNWX1JJR0hUX09GX0NPTU1BLCAgLyogcmlnaHQgb3BlcmFuZCBvZiBjb21tYSBvcGVyYXRvciAqLworICBJQ1ZfTEVGVF9PRl9DT01NQSwgICAvKiBsZWZ0IG9wZXJhbmQgb2YgY29tbWEgb3BlcmF0b3IgKi8KKyAgSUNWX1NUQVRFTUVOVCwgICAgICAgLyogc3RhdGVtZW50ICovCisgIElDVl9USElSRF9JTl9GT1IgICAgIC8qIGZvciBpbmNyZW1lbnQgZXhwcmVzc2lvbiAqLworfSBpbXBsX2NvbnZfdm9pZDsKKworLyogTWFjcm9zIGZvciBhY2Nlc3MgdG8gbGFuZ3VhZ2Utc3BlY2lmaWMgc2xvdHMgaW4gYW4gaWRlbnRpZmllci4gICovCisKKyNkZWZpbmUgSURFTlRJRklFUl9OQU1FU1BBQ0VfQklORElOR1MoTk9ERSkJXAorICAoTEFOR19JREVOVElGSUVSX0NBU1QgKE5PREUpLT5uYW1lc3BhY2VfYmluZGluZ3MpCisjZGVmaW5lIElERU5USUZJRVJfVEVNUExBVEUoTk9ERSkJXAorICAoTEFOR19JREVOVElGSUVSX0NBU1QgKE5PREUpLT5jbGFzc190ZW1wbGF0ZV9pbmZvKQorCisvKiBUaGUgSURFTlRJRklFUl9CSU5ESU5HIGlzIHRoZSBpbm5lcm1vc3QgY3h4X2JpbmRpbmcgZm9yIHRoZQorICAgIGlkZW50aWZpZXIuICBJdCdzIFBSRVZJT1VTIGlzIHRoZSBuZXh0IG91dGVybW9zdCBiaW5kaW5nLiAgRWFjaAorICAgIFZBTFVFIGZpZWxkIGlzIGEgREVDTCBmb3IgdGhlIGFzc29jaWF0ZWQgZGVjbGFyYXRpb24uICBUaHVzLAorICAgIG5hbWUgbG9va3VwIGNvbnNpc3RzIHNpbXBseSBvZiBwdWxsaW5nIG9mZiB0aGUgbm9kZSBhdCB0aGUgZnJvbnQKKyAgICBvZiB0aGUgbGlzdCAobW9kdWxvIG9kZGl0aWVzIGZvciBsb29raW5nIHVwIHRoZSBuYW1lcyBvZiB0eXBlcywKKyAgICBhbmQgc3VjaC4pICBZb3UgY2FuIHVzZSBTQ09QRSBmaWVsZCB0byBkZXRlcm1pbmUgdGhlIHNjb3BlCisgICAgdGhhdCBib3VuZCB0aGUgbmFtZS4gICovCisjZGVmaW5lIElERU5USUZJRVJfQklORElORyhOT0RFKSBcCisgIChMQU5HX0lERU5USUZJRVJfQ0FTVCAoTk9ERSktPmJpbmRpbmdzKQorCisvKiBUUkVFX1RZUEUgb25seSBpbmRpY2F0ZXMgb24gbG9jYWwgYW5kIGNsYXNzIHNjb3BlIHRoZSBjdXJyZW50CisgICB0eXBlLiBGb3IgbmFtZXNwYWNlIHNjb3BlLCB0aGUgcHJlc2VuY2Ugb2YgYSB0eXBlIGluIGFueSBuYW1lc3BhY2UKKyAgIGlzIGluZGljYXRlZCB3aXRoIGdsb2JhbF90eXBlX25vZGUsIGFuZCB0aGUgcmVhbCB0eXBlIGJlaGluZCBtdXN0CisgICBiZSBmb3VuZCB0aHJvdWdoIGxvb2t1cC4gICovCisjZGVmaW5lIElERU5USUZJRVJfVFlQRV9WQUxVRShOT0RFKSBpZGVudGlmaWVyX3R5cGVfdmFsdWUgKE5PREUpCisjZGVmaW5lIFJFQUxfSURFTlRJRklFUl9UWVBFX1ZBTFVFKE5PREUpIFRSRUVfVFlQRSAoTk9ERSkKKyNkZWZpbmUgU0VUX0lERU5USUZJRVJfVFlQRV9WQUxVRShOT0RFLFRZUEUpIChUUkVFX1RZUEUgKE5PREUpID0gKFRZUEUpKQorI2RlZmluZSBJREVOVElGSUVSX0hBU19UWVBFX1ZBTFVFKE5PREUpIChJREVOVElGSUVSX1RZUEVfVkFMVUUgKE5PREUpID8gMSA6IDApCisKKyNkZWZpbmUgSURFTlRJRklFUl9MQUJFTF9WQUxVRShOT0RFKSBcCisgIChMQU5HX0lERU5USUZJRVJfQ0FTVCAoTk9ERSktPmxhYmVsX3ZhbHVlKQorI2RlZmluZSBTRVRfSURFTlRJRklFUl9MQUJFTF9WQUxVRShOT0RFLCBWQUxVRSkgICBcCisgIElERU5USUZJRVJfTEFCRUxfVkFMVUUgKE5PREUpID0gKFZBTFVFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgaWRlbnRpZmllciBpcyB1c2VkIGFzIGEgdmlydHVhbCBmdW5jdGlvbiBuYW1lIHNvbWV3aGVyZQorICAgKG9wdGltaXplcyBzZWFyY2hlcykuICAqLworI2RlZmluZSBJREVOVElGSUVSX1ZJUlRVQUxfUChOT0RFKSBUUkVFX0xBTkdfRkxBR18xIChOT0RFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgaWRlbnRpZmllciBpcyB0aGUgcHJlZml4IGZvciBhIG1hbmdsZWQgQysrIG9wZXJhdG9yCisgICBuYW1lLiAgKi8KKyNkZWZpbmUgSURFTlRJRklFUl9PUE5BTUVfUChOT0RFKSBUUkVFX0xBTkdfRkxBR18yIChOT0RFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhIHR5cGUtY29udmVyc2lvbgorICAgb3BlcmF0b3IuICAqLworI2RlZmluZSBJREVOVElGSUVSX1RZUEVOQU1FX1AoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR180IChOT0RFKQorCisvKiBOb256ZXJvIGlmIHRoaXMgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhIGNvbnN0cnVjdG9yIG9yCisgICBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgSURFTlRJRklFUl9DVE9SX09SX0RUT1JfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzMgKE5PREUpCisKKy8qIFRydWUgaWZmIE5BTUUgaXMgdGhlIERFQ0xfQVNTRU1CTEVSX05BTUUgZm9yIGFuIGVudGl0eSB3aXRoIHZhZ3VlCisgICBsaW5rYWdlIHdoaWNoIHRoZSBwcmVsaW5rZXIgaGFzIGFzc2lnbmVkIHRvIHRoaXMgdHJhbnNsYXRpb24KKyAgIHVuaXQuICAqLworI2RlZmluZSBJREVOVElGSUVSX1JFUE9fQ0hPU0VOKE5BTUUpIFwKKyAgKFRSRUVfTEFOR19GTEFHXzYgKE5BTUUpKQorCisvKiBJbiBhIFJFQ09SRF9UWVBFIG9yIFVOSU9OX1RZUEUsIG5vbnplcm8gaWYgYW55IGNvbXBvbmVudCBpcyByZWFkLW9ubHkuICAqLworI2RlZmluZSBDX1RZUEVfRklFTERTX1JFQURPTkxZKFRZUEUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoVFlQRSktPmZpZWxkc19yZWFkb25seSkKKworLyogVGhlIHRva2VucyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgYXJndW1lbnQuICAqLworCisjZGVmaW5lIERFRkFSR19UT0tFTlMoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9kZWZhdWx0X2FyZyAqKURFRkFVTFRfQVJHX0NIRUNLIChOT0RFKSktPnRva2VucykKKyNkZWZpbmUgREVGQVJHX0lOU1RBTlRJQVRJT05TKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfZGVmYXVsdF9hcmcgKilERUZBVUxUX0FSR19DSEVDSyAoTk9ERSkpLT5pbnN0YW50aWF0aW9ucykKKworc3RydWN0IEdUWSAoKCkpIHRyZWVfZGVmYXVsdF9hcmcgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBzdHJ1Y3QgY3BfdG9rZW5fY2FjaGUgKnRva2VuczsKKyAgdmVjPHRyZWUsIHZhX2djPiAqaW5zdGFudGlhdGlvbnM7Cit9OworCisKKyNkZWZpbmUgREVGRVJSRURfTk9FWENFUFRfUEFUVEVSTihOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2RlZmVycmVkX25vZXhjZXB0ICopREVGRVJSRURfTk9FWENFUFRfQ0hFQ0sgKE5PREUpKS0+cGF0dGVybikKKyNkZWZpbmUgREVGRVJSRURfTk9FWENFUFRfQVJHUyhOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2RlZmVycmVkX25vZXhjZXB0ICopREVGRVJSRURfTk9FWENFUFRfQ0hFQ0sgKE5PREUpKS0+YXJncykKKyNkZWZpbmUgREVGRVJSRURfTk9FWENFUFRfU1BFQ19QKE5PREUpCQkJCVwKKyAgKChOT0RFKSAmJiAoVFJFRV9QVVJQT1NFIChOT0RFKSkJCQkJXAorICAmJiAoVFJFRV9DT0RFIChUUkVFX1BVUlBPU0UgKE5PREUpKSA9PSBERUZFUlJFRF9OT0VYQ0VQVAlcCisgICAgICB8fCBpc19vdmVybG9hZGVkX2ZuIChUUkVFX1BVUlBPU0UgKE5PREUpKSkpCisKK3N0cnVjdCBHVFkgKCgpKSB0cmVlX2RlZmVycmVkX25vZXhjZXB0IHsKKyAgc3RydWN0IHRyZWVfYmFzZSBiYXNlOworICB0cmVlIHBhdHRlcm47CisgIHRyZWUgYXJnczsKK307CisKKworLyogVGhlIGNvbmRpdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXRpYyBhc3NlcnRpb24uICBUaGlzIG11c3QgYmUKKyAgIGFuIGludGVncmFsIGNvbnN0YW50IGV4cHJlc3Npb24uICAqLworI2RlZmluZSBTVEFUSUNfQVNTRVJUX0NPTkRJVElPTihOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX3N0YXRpY19hc3NlcnQgKilTVEFUSUNfQVNTRVJUX0NIRUNLIChOT0RFKSktPmNvbmRpdGlvbikKKworLyogVGhlIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0aWMgYXNzZXJ0aW9uLiAgVGhpcyBtdXN0IGJlIGEKKyAgIHN0cmluZyBjb25zdGFudCwgd2hpY2ggd2lsbCBiZSBlbWl0dGVkIGFzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUKKyAgIHN0YXRpYyBhc3NlcnQgY29uZGl0aW9uIGlzIGZhbHNlLiAgKi8KKyNkZWZpbmUgU1RBVElDX0FTU0VSVF9NRVNTQUdFKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfc3RhdGljX2Fzc2VydCAqKVNUQVRJQ19BU1NFUlRfQ0hFQ0sgKE5PREUpKS0+bWVzc2FnZSkKKworLyogU291cmNlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciBhIHN0YXRpYyBhc3NlcnRpb24uICAqLworI2RlZmluZSBTVEFUSUNfQVNTRVJUX1NPVVJDRV9MT0NBVElPTihOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX3N0YXRpY19hc3NlcnQgKilTVEFUSUNfQVNTRVJUX0NIRUNLIChOT0RFKSktPmxvY2F0aW9uKQorCitzdHJ1Y3QgR1RZICgoKSkgdHJlZV9zdGF0aWNfYXNzZXJ0IHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgdHJlZSBjb25kaXRpb247CisgIHRyZWUgbWVzc2FnZTsKKyAgbG9jYXRpb25fdCBsb2NhdGlvbjsKK307CisKK3N0cnVjdCBHVFkgKCgpKSB0cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0IHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgdHJlZSBhcmd1bWVudF9wYWNrOworICBpbnQgaW5kZXg7Cit9OworCisvKiBUaGUgZGlmZmVyZW50IGtpbmRzIG9mIHRyYWl0cyB0aGF0IHdlIGVuY291bnRlci4gICovCisKK3R5cGVkZWYgZW51bSBjcF90cmFpdF9raW5kCit7CisgIENQVEtfQkFTRVMsCisgIENQVEtfRElSRUNUX0JBU0VTLAorICBDUFRLX0hBU19OT1RIUk9XX0FTU0lHTiwKKyAgQ1BUS19IQVNfTk9USFJPV19DT05TVFJVQ1RPUiwKKyAgQ1BUS19IQVNfTk9USFJPV19DT1BZLAorICBDUFRLX0hBU19UUklWSUFMX0FTU0lHTiwKKyAgQ1BUS19IQVNfVFJJVklBTF9DT05TVFJVQ1RPUiwKKyAgQ1BUS19IQVNfVFJJVklBTF9DT1BZLAorICBDUFRLX0hBU19UUklWSUFMX0RFU1RSVUNUT1IsCisgIENQVEtfSEFTX1ZJUlRVQUxfREVTVFJVQ1RPUiwKKyAgQ1BUS19JU19BQlNUUkFDVCwKKyAgQ1BUS19JU19CQVNFX09GLAorICBDUFRLX0lTX0NMQVNTLAorICBDUFRLX0lTX0NPTlZFUlRJQkxFX1RPLAorICBDUFRLX0lTX0VNUFRZLAorICBDUFRLX0lTX0VOVU0sCisgIENQVEtfSVNfRklOQUwsCisgIENQVEtfSVNfTElURVJBTF9UWVBFLAorICBDUFRLX0lTX1BPRCwKKyAgQ1BUS19JU19QT0xZTU9SUEhJQywKKyAgQ1BUS19JU19TVERfTEFZT1VULAorICBDUFRLX0lTX1RSSVZJQUwsCisgIENQVEtfSVNfVU5JT04sCisgIENQVEtfVU5ERVJMWUlOR19UWVBFCit9IGNwX3RyYWl0X2tpbmQ7CisKKy8qIFRoZSB0eXBlcyB0aGF0IHdlIGFyZSBwcm9jZXNzaW5nLiAgKi8KKyNkZWZpbmUgVFJBSVRfRVhQUl9UWVBFMShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX3RyYWl0X2V4cHIgKilUUkFJVF9FWFBSX0NIRUNLIChOT0RFKSktPnR5cGUxKQorCisjZGVmaW5lIFRSQUlUX0VYUFJfVFlQRTIoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV90cmFpdF9leHByICopVFJBSVRfRVhQUl9DSEVDSyAoTk9ERSkpLT50eXBlMikKKworLyogVGhlIHNwZWNpZmljIHRyYWl0IHRoYXQgd2UgYXJlIHByb2Nlc3NpbmcuICAqLworI2RlZmluZSBUUkFJVF9FWFBSX0tJTkQoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV90cmFpdF9leHByICopVFJBSVRfRVhQUl9DSEVDSyAoTk9ERSkpLT5raW5kKQorCitzdHJ1Y3QgR1RZICgoKSkgdHJlZV90cmFpdF9leHByIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgdHJlZSB0eXBlMTsKKyAgdHJlZSB0eXBlMjsgIAorICBlbnVtIGNwX3RyYWl0X2tpbmQga2luZDsKK307CisKKy8qIEJhc2VkIG9mZiBvZiBUWVBFX0FOT05ZTU9VU19QLiAgKi8KKyNkZWZpbmUgTEFNQkRBX1RZUEVfUChOT0RFKSBcCisgIChDTEFTU19UWVBFX1AgKE5PREUpICYmIENMQVNTVFlQRV9MQU1CREFfRVhQUiAoTk9ERSkpCisKKy8qIFRlc3QgaWYgRlVOQ1RJT05fREVDTCBpcyBhIGxhbWJkYSBmdW5jdGlvbi4gICovCisjZGVmaW5lIExBTUJEQV9GVU5DVElPTl9QKEZOREVDTCkgXAorICAoREVDTF9PVkVSTE9BREVEX09QRVJBVE9SX1AgKEZOREVDTCkgPT0gQ0FMTF9FWFBSIFwKKyAgICYmIExBTUJEQV9UWVBFX1AgKENQX0RFQ0xfQ09OVEVYVCAoRk5ERUNMKSkpCisKK2VudW0gY3BfbGFtYmRhX2RlZmF1bHRfY2FwdHVyZV9tb2RlX3R5cGUgeworICBDUExEX05PTkUsCisgIENQTERfQ09QWSwKKyAgQ1BMRF9SRUZFUkVOQ0UKK307CisKKy8qIFRoZSBtZXRob2Qgb2YgZGVmYXVsdCBjYXB0dXJlLCBpZiBhbnkuICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9ERUZBVUxUX0NBUFRVUkVfTU9ERShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopTEFNQkRBX0VYUFJfQ0hFQ0sgKE5PREUpKS0+ZGVmYXVsdF9jYXB0dXJlX21vZGUpCisKKy8qIFRoZSBjYXB0dXJlLWxpc3QsIGluY2x1ZGluZyBgdGhpcycuICBFYWNoIGNhcHR1cmUgaXMgc3RvcmVkIGFzIGEgRklFTERfREVDTAorICogc28gdGhhdCB0aGUgbmFtZSwgdHlwZSwgYW5kIGZpZWxkIGFyZSBhbGwgdG9nZXRoZXIsIHdoZXRoZXIgb3Igbm90IGl0IGhhcworICogYmVlbiBhZGRlZCB0byB0aGUgbGFtYmRhJ3MgY2xhc3MgdHlwZS4KKyAgIFRSRUVfTElTVDoKKyAgICAgVFJFRV9QVVJQT1NFOiBUaGUgRklFTERfREVDTCBmb3IgdGhpcyBjYXB0dXJlLgorICAgICBUUkVFX1ZBTFVFOiBUaGUgaW5pdGlhbGl6ZXIuIFRoaXMgaXMgcGFydCBvZiBhIEdOVSBleHRlbnNpb24uICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9DQVBUVVJFX0xJU1QoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9sYW1iZGFfZXhwciAqKUxBTUJEQV9FWFBSX0NIRUNLIChOT0RFKSktPmNhcHR1cmVfbGlzdCkKKworLyogRHVyaW5nIHBhcnNpbmcgb2YgdGhlIGxhbWJkYS1pbnRyb2R1Y2VyLCB0aGUgbm9kZSBpbiB0aGUgY2FwdHVyZS1saXN0CisgICB0aGF0IGhvbGRzIHRoZSAndGhpcycgY2FwdHVyZS4gIER1cmluZyBwYXJzaW5nIG9mIHRoZSBib2R5LCB0aGUKKyAgIGNhcHR1cmUgcHJveHkgZm9yIHRoYXQgbm9kZS4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX1RISVNfQ0FQVFVSRShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopTEFNQkRBX0VYUFJfQ0hFQ0sgKE5PREUpKS0+dGhpc19jYXB0dXJlKQorCisvKiBQcmVkaWNhdGUgdHJhY2tpbmcgd2hldGhlciBgdGhpcycgaXMgaW4gdGhlIGVmZmVjdGl2ZSBjYXB0dXJlIHNldC4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX0NBUFRVUkVTX1RISVNfUChOT0RFKSBcCisgIExBTUJEQV9FWFBSX1RISVNfQ0FQVFVSRShOT0RFKQorCisvKiBQcmVkaWNhdGUgdHJhY2tpbmcgd2hldGhlciB0aGUgbGFtYmRhIHdhcyBkZWNsYXJlZCAnbXV0YWJsZScuICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9NVVRBQkxFX1AoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18xIChMQU1CREFfRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIFRoZSByZXR1cm4gdHlwZSBpbiB0aGUgZXhwcmVzc2lvbi4KKyAqIE5VTExfVFJFRSBpbmRpY2F0ZXMgdGhhdCBub25lIHdhcyBzcGVjaWZpZWQuICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9SRVRVUk5fVFlQRShOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopTEFNQkRBX0VYUFJfQ0hFQ0sgKE5PREUpKS0+cmV0dXJuX3R5cGUpCisKKy8qIFRoZSBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIGxhbWJkYS4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX0xPQ0FUSU9OKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfbGFtYmRhX2V4cHIgKilMQU1CREFfRVhQUl9DSEVDSyAoTk9ERSkpLT5sb2N1cykKKworLyogVGhlIG1hbmdsaW5nIHNjb3BlIGZvciB0aGUgbGFtYmRhOiBGVU5DVElPTl9ERUNMLCBQQVJNX0RFQ0wsIFZBUl9ERUNMLAorICAgRklFTERfREVDTCBvciBOVUxMX1RSRUUuICBJZiB0aGlzIGlzIE5VTExfVFJFRSwgd2UgaGF2ZSBubyBsaW5rYWdlLiAgKi8KKyNkZWZpbmUgTEFNQkRBX0VYUFJfRVhUUkFfU0NPUEUoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9sYW1iZGFfZXhwciAqKUxBTUJEQV9FWFBSX0NIRUNLIChOT0RFKSktPmV4dHJhX3Njb3BlKQorCisvKiBJZiBFWFRSQV9TQ09QRSwgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRoZSBsYW1iZGEgd2l0aGluIHRoYXQgc2NvcGUuICAqLworI2RlZmluZSBMQU1CREFfRVhQUl9ESVNDUklNSU5BVE9SKE5PREUpIFwKKyAgKCgoc3RydWN0IHRyZWVfbGFtYmRhX2V4cHIgKilMQU1CREFfRVhQUl9DSEVDSyAoTk9ERSkpLT5kaXNjcmltaW5hdG9yKQorCisvKiBEdXJpbmcgcGFyc2luZyBvZiB0aGUgbGFtYmRhLCBhIHZlY3RvciBvZiBjYXB0dXJlIHByb3hpZXMgd2hpY2ggbmVlZAorICAgdG8gYmUgcHVzaGVkIG9uY2Ugd2UncmUgZG9uZSBwcm9jZXNzaW5nIGEgbmVzdGVkIGxhbWJkYS4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX1BFTkRJTkdfUFJPWElFUyhOT0RFKSBcCisgICgoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopTEFNQkRBX0VYUFJfQ0hFQ0sgKE5PREUpKS0+cGVuZGluZ19wcm94aWVzKQorCisvKiBUaGUgY2xvc3VyZSB0eXBlIG9mIHRoZSBsYW1iZGEuICBOb3RlIHRoYXQgdGhlIFRSRUVfVFlQRSBvZiBhCisgICBMQU1CREFfRVhQUiBpcyBhbHdheXMgTlVMTF9UUkVFLCBiZWNhdXNlIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhlCisgICBMQU1CREFfRVhQUiBpbiBvcmRlciB0byBpbnN0YW50aWF0ZSB0aGUgdHlwZS4gICovCisjZGVmaW5lIExBTUJEQV9FWFBSX0NMT1NVUkUoTk9ERSkgXAorICAoKChzdHJ1Y3QgdHJlZV9sYW1iZGFfZXhwciAqKUxBTUJEQV9FWFBSX0NIRUNLIChOT0RFKSktPmNsb3N1cmUpCisKK3N0cnVjdCBHVFkgKCgpKSB0cmVlX2xhbWJkYV9leHByCit7CisgIHN0cnVjdCB0cmVlX3R5cGVkIHR5cGVkOworICB0cmVlIGNhcHR1cmVfbGlzdDsKKyAgdHJlZSB0aGlzX2NhcHR1cmU7CisgIHRyZWUgcmV0dXJuX3R5cGU7CisgIHRyZWUgZXh0cmFfc2NvcGU7CisgIHRyZWUgY2xvc3VyZTsKKyAgdmVjPHRyZWUsIHZhX2djPiAqcGVuZGluZ19wcm94aWVzOworICBsb2NhdGlvbl90IGxvY3VzOworICBlbnVtIGNwX2xhbWJkYV9kZWZhdWx0X2NhcHR1cmVfbW9kZV90eXBlIGRlZmF1bHRfY2FwdHVyZV9tb2RlOworICBpbnQgZGlzY3JpbWluYXRvcjsKK307CisKKy8qIEEgKHR5cGVkZWYsY29udGV4dCx1c2FnZSBsb2NhdGlvbikgdHJpcGxldC4KKyAgIEl0IHJlcHJlc2VudHMgYSB0eXBlZGVmIHVzZWQgdGhyb3VnaCBhCisgICBjb250ZXh0IGF0IGEgZ2l2ZW4gc291cmNlIGxvY2F0aW9uLgorICAgZS5nLgorICAgc3RydWN0IGZvbyB7CisgICAgIHR5cGVkZWYgaW50IG15aW50OworICAgfTsKKworICAgc3RydWN0IGJhciB7CisgICAgZm9vOjpteWludCB2OyAvLyAjMTwtLSB0aGlzIGxvY2F0aW9uLgorICAgfTsKKworICAgSW4gYmFyLCB0aGUgdHJpcGxldCB3aWxsIGJlIChteWludCwgZm9vLCAjMSkuCisgICAqLworc3RydWN0IEdUWSgoKSkgcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfcyB7CisgIHRyZWUgdHlwZWRlZl9kZWNsOworICB0cmVlIGNvbnRleHQ7CisgIGxvY2F0aW9uX3QgbG9jdXM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfcyBxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90OworCisvKiBOb24temVybyBpZiB0aGlzIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIGhhcyBhY2Nlc3MgdmlvbGF0aW9ucyB0aGF0CisgICBzaG91bGQgYmUgcmVjaGVja2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGluc3RhbnRpYXRlZCBvdXRzaWRlIGFyZ3VtZW50CisgICBkZWR1Y3Rpb24uICAqLworI2RlZmluZSBUSU5GT19IQVNfQUNDRVNTX0VSUk9SUyhOT0RFKSBcCisgIChUUkVFX0xBTkdfRkxBR18wIChURU1QTEFURV9JTkZPX0NIRUNLIChOT0RFKSkpCisjZGVmaW5lIEZOREVDTF9IQVNfQUNDRVNTX0VSUk9SUyhOT0RFKSBcCisgIChUSU5GT19IQVNfQUNDRVNTX0VSUk9SUyAoREVDTF9URU1QTEFURV9JTkZPIChOT0RFKSkpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdGVtcGxhdGVfaW5mbyB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHZlYzxxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90LCB2YV9nYz4gKnR5cGVkZWZzX25lZWRpbmdfYWNjZXNzX2NoZWNraW5nOworfTsKKworZW51bSBjcF90cmVlX25vZGVfc3RydWN0dXJlX2VudW0geworICBUU19DUF9HRU5FUklDLAorICBUU19DUF9JREVOVElGSUVSLAorICBUU19DUF9UUEksCisgIFRTX0NQX1BUUk1FTSwKKyAgVFNfQ1BfQklORElORywKKyAgVFNfQ1BfT1ZFUkxPQUQsCisgIFRTX0NQX0JBU0VMSU5LLAorICBUU19DUF9XUkFQUEVSLAorICBUU19DUF9ERUZBVUxUX0FSRywKKyAgVFNfQ1BfREVGRVJSRURfTk9FWENFUFQsCisgIFRTX0NQX1NUQVRJQ19BU1NFUlQsCisgIFRTX0NQX0FSR1VNRU5UX1BBQ0tfU0VMRUNULAorICBUU19DUF9UUkFJVF9FWFBSLAorICBUU19DUF9MQU1CREFfRVhQUiwKKyAgVFNfQ1BfVEVNUExBVEVfSU5GTywKKyAgVFNfQ1BfVVNFUkRFRl9MSVRFUkFMLAorICBMQVNUX1RTX0NQX0VOVU0KK307CisKKy8qIFRoZSByZXN1bHRpbmcgdHJlZSB0eXBlLiAgKi8KK3VuaW9uIEdUWSgoZGVzYyAoImNwX3RyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKSwKKyAgICAgICBjaGFpbl9uZXh0ICgiKHVuaW9uIGxhbmdfdHJlZV9ub2RlICopIGNfdHJlZV9jaGFpbl9uZXh0ICgmJWguZ2VuZXJpYykiKSkpIGxhbmdfdHJlZV9ub2RlIHsKKyAgdW5pb24gdHJlZV9ub2RlIEdUWSAoKHRhZyAoIlRTX0NQX0dFTkVSSUMiKSwKKwkJCWRlc2MgKCJ0cmVlX25vZGVfc3RydWN0dXJlICgmJWgpIikpKSBnZW5lcmljOworICBzdHJ1Y3QgdGVtcGxhdGVfcGFybV9pbmRleF9zIEdUWSAoKHRhZyAoIlRTX0NQX1RQSSIpKSkgdHBpOworICBzdHJ1Y3QgcHRybWVtX2NzdCBHVFkgKCh0YWcgKCJUU19DUF9QVFJNRU0iKSkpIHB0cm1lbTsKKyAgc3RydWN0IHRyZWVfb3ZlcmxvYWQgR1RZICgodGFnICgiVFNfQ1BfT1ZFUkxPQUQiKSkpIG92ZXJsb2FkOworICBzdHJ1Y3QgdHJlZV9iYXNlbGluayBHVFkgKCh0YWcgKCJUU19DUF9CQVNFTElOSyIpKSkgYmFzZWxpbms7CisgIHN0cnVjdCB0cmVlX2RlZmF1bHRfYXJnIEdUWSAoKHRhZyAoIlRTX0NQX0RFRkFVTFRfQVJHIikpKSBkZWZhdWx0X2FyZzsKKyAgc3RydWN0IHRyZWVfZGVmZXJyZWRfbm9leGNlcHQgR1RZICgodGFnICgiVFNfQ1BfREVGRVJSRURfTk9FWENFUFQiKSkpIGRlZmVycmVkX25vZXhjZXB0OworICBzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyIEdUWSAoKHRhZyAoIlRTX0NQX0lERU5USUZJRVIiKSkpIGlkZW50aWZpZXI7CisgIHN0cnVjdCB0cmVlX3N0YXRpY19hc3NlcnQgR1RZICgodGFnICgiVFNfQ1BfU1RBVElDX0FTU0VSVCIpKSkgCisgICAgc3RhdGljX2Fzc2VydGlvbjsKKyAgc3RydWN0IHRyZWVfYXJndW1lbnRfcGFja19zZWxlY3QgR1RZICgodGFnICgiVFNfQ1BfQVJHVU1FTlRfUEFDS19TRUxFQ1QiKSkpCisgICAgYXJndW1lbnRfcGFja19zZWxlY3Q7CisgIHN0cnVjdCB0cmVlX3RyYWl0X2V4cHIgR1RZICgodGFnICgiVFNfQ1BfVFJBSVRfRVhQUiIpKSkKKyAgICB0cmFpdF9leHByZXNzaW9uOworICBzdHJ1Y3QgdHJlZV9sYW1iZGFfZXhwciBHVFkgKCh0YWcgKCJUU19DUF9MQU1CREFfRVhQUiIpKSkKKyAgICBsYW1iZGFfZXhwcmVzc2lvbjsKKyAgc3RydWN0IHRyZWVfdGVtcGxhdGVfaW5mbyBHVFkgKCh0YWcgKCJUU19DUF9URU1QTEFURV9JTkZPIikpKQorICAgIHRlbXBsYXRlX2luZm87CisgIHN0cnVjdCB0cmVlX3VzZXJkZWZfbGl0ZXJhbCBHVFkgKCh0YWcgKCJUU19DUF9VU0VSREVGX0xJVEVSQUwiKSkpCisgICAgdXNlcmRlZl9saXRlcmFsOworfTsKKworDAorZW51bSBjcF90cmVlX2luZGV4Cit7CisgICAgQ1BUSV9KQVZBX0JZVEVfVFlQRSwKKyAgICBDUFRJX0pBVkFfU0hPUlRfVFlQRSwKKyAgICBDUFRJX0pBVkFfSU5UX1RZUEUsCisgICAgQ1BUSV9KQVZBX0xPTkdfVFlQRSwKKyAgICBDUFRJX0pBVkFfRkxPQVRfVFlQRSwKKyAgICBDUFRJX0pBVkFfRE9VQkxFX1RZUEUsCisgICAgQ1BUSV9KQVZBX0NIQVJfVFlQRSwKKyAgICBDUFRJX0pBVkFfQk9PTEVBTl9UWVBFLAorCisgICAgQ1BUSV9XQ0hBUl9ERUNMLAorICAgIENQVElfVlRBQkxFX0VOVFJZX1RZUEUsCisgICAgQ1BUSV9ERUxUQV9UWVBFLAorICAgIENQVElfVlRBQkxFX0lOREVYX1RZUEUsCisgICAgQ1BUSV9DTEVBTlVQX1RZUEUsCisgICAgQ1BUSV9WVFRfUEFSTV9UWVBFLAorCisgICAgQ1BUSV9DTEFTU19UWVBFLAorICAgIENQVElfVU5LTk9XTl9UWVBFLAorICAgIENQVElfSU5JVF9MSVNUX1RZUEUsCisgICAgQ1BUSV9WVEJMX1RZUEUsCisgICAgQ1BUSV9WVEJMX1BUUl9UWVBFLAorICAgIENQVElfU1RELAorICAgIENQVElfQUJJLAorICAgIENQVElfQ09OU1RfVFlQRV9JTkZPX1RZUEUsCisgICAgQ1BUSV9UWVBFX0lORk9fUFRSX1RZUEUsCisgICAgQ1BUSV9BQk9SVF9GTkRFQ0wsCisgICAgQ1BUSV9HTE9CQUxfREVMRVRFX0ZOREVDTCwKKyAgICBDUFRJX0FHR1JfVEFHLAorCisgICAgQ1BUSV9DVE9SX0lERU5USUZJRVIsCisgICAgQ1BUSV9DT01QTEVURV9DVE9SX0lERU5USUZJRVIsCisgICAgQ1BUSV9CQVNFX0NUT1JfSURFTlRJRklFUiwKKyAgICBDUFRJX0RUT1JfSURFTlRJRklFUiwKKyAgICBDUFRJX0NPTVBMRVRFX0RUT1JfSURFTlRJRklFUiwKKyAgICBDUFRJX0JBU0VfRFRPUl9JREVOVElGSUVSLAorICAgIENQVElfREVMRVRJTkdfRFRPUl9JREVOVElGSUVSLAorICAgIENQVElfREVMVEFfSURFTlRJRklFUiwKKyAgICBDUFRJX0lOX0NIQVJHRV9JREVOVElGSUVSLAorICAgIENQVElfVlRUX1BBUk1fSURFTlRJRklFUiwKKyAgICBDUFRJX05FTFRTX0lERU5USUZJRVIsCisgICAgQ1BUSV9USElTX0lERU5USUZJRVIsCisgICAgQ1BUSV9QRk5fSURFTlRJRklFUiwKKyAgICBDUFRJX1ZQVFJfSURFTlRJRklFUiwKKyAgICBDUFRJX1NURF9JREVOVElGSUVSLAorCisgICAgQ1BUSV9MQU5HX05BTUVfQywKKyAgICBDUFRJX0xBTkdfTkFNRV9DUExVU1BMVVMsCisgICAgQ1BUSV9MQU5HX05BTUVfSkFWQSwKKworICAgIENQVElfRU1QVFlfRVhDRVBUX1NQRUMsCisgICAgQ1BUSV9OT0VYQ0VQVF9UUlVFX1NQRUMsCisgICAgQ1BUSV9OT0VYQ0VQVF9GQUxTRV9TUEVDLAorICAgIENQVElfSkNMQVNTLAorICAgIENQVElfVEVSTUlOQVRFLAorICAgIENQVElfQ0FMTF9VTkVYUEVDVEVELAorICAgIENQVElfQVRFWElUX0ZOX1BUUl9UWVBFLAorICAgIENQVElfQVRFWElULAorICAgIENQVElfRFNPX0hBTkRMRSwKKyAgICBDUFRJX0RDQVNULAorCisgICAgQ1BUSV9LRVlFRF9DTEFTU0VTLAorCisgICAgQ1BUSV9OVUxMUFRSLAorICAgIENQVElfTlVMTFBUUl9UWVBFLAorCisgICAgQ1BUSV9NQVgKK307CisKK2V4dGVybiBHVFkoKCkpIHRyZWUgY3BfZ2xvYmFsX3RyZWVzW0NQVElfTUFYXTsKKworI2RlZmluZSBqYXZhX2J5dGVfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0JZVEVfVFlQRV0KKyNkZWZpbmUgamF2YV9zaG9ydF90eXBlX25vZGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0pBVkFfU0hPUlRfVFlQRV0KKyNkZWZpbmUgamF2YV9pbnRfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0lOVF9UWVBFXQorI2RlZmluZSBqYXZhX2xvbmdfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0xPTkdfVFlQRV0KKyNkZWZpbmUgamF2YV9mbG9hdF90eXBlX25vZGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0pBVkFfRkxPQVRfVFlQRV0KKyNkZWZpbmUgamF2YV9kb3VibGVfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0RPVUJMRV9UWVBFXQorI2RlZmluZSBqYXZhX2NoYXJfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQVZBX0NIQVJfVFlQRV0KKyNkZWZpbmUgamF2YV9ib29sZWFuX3R5cGVfbm9kZQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfSkFWQV9CT09MRUFOX1RZUEVdCisKKyNkZWZpbmUgd2NoYXJfZGVjbF9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfV0NIQVJfREVDTF0KKyNkZWZpbmUgdnRhYmxlX2VudHJ5X3R5cGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX1ZUQUJMRV9FTlRSWV9UWVBFXQorLyogVGhlIHR5cGUgdXNlZCB0byByZXByZXNlbnQgYW4gb2Zmc2V0IGJ5IHdoaWNoIHRvIGFkanVzdCB0aGUgYHRoaXMnCisgICBwb2ludGVyIGluIHBvaW50ZXItdG8tbWVtYmVyIHR5cGVzLiAgKi8KKyNkZWZpbmUgZGVsdGFfdHlwZV9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfREVMVEFfVFlQRV0KKy8qIFRoZSB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IGFuIGluZGV4IGludG8gdGhlIHZ0YWJsZS4gICovCisjZGVmaW5lIHZ0YWJsZV9pbmRleF90eXBlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9WVEFCTEVfSU5ERVhfVFlQRV0KKworI2RlZmluZSBjbGFzc190eXBlX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9DTEFTU19UWVBFXQorI2RlZmluZSB1bmtub3duX3R5cGVfbm9kZQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVU5LTk9XTl9UWVBFXQorI2RlZmluZSBpbml0X2xpc3RfdHlwZV9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9JTklUX0xJU1RfVFlQRV0KKyNkZWZpbmUgdnRibF90eXBlX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9WVEJMX1RZUEVdCisjZGVmaW5lIHZ0YmxfcHRyX3R5cGVfbm9kZQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVlRCTF9QVFJfVFlQRV0KKyNkZWZpbmUgc3RkX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9TVERdCisjZGVmaW5lIGFiaV9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQUJJXQorI2RlZmluZSBjb25zdF90eXBlX2luZm9fdHlwZV9ub2RlCWNwX2dsb2JhbF90cmVlc1tDUFRJX0NPTlNUX1RZUEVfSU5GT19UWVBFXQorI2RlZmluZSB0eXBlX2luZm9fcHRyX3R5cGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX1RZUEVfSU5GT19QVFJfVFlQRV0KKyNkZWZpbmUgYWJvcnRfZm5kZWNsCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQUJPUlRfRk5ERUNMXQorI2RlZmluZSBnbG9iYWxfZGVsZXRlX2ZuZGVjbAkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfR0xPQkFMX0RFTEVURV9GTkRFQ0xdCisjZGVmaW5lIGN1cnJlbnRfYWdncgkJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0FHR1JfVEFHXQorI2RlZmluZSBudWxscHRyX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9OVUxMUFRSXQorI2RlZmluZSBudWxscHRyX3R5cGVfbm9kZQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfTlVMTFBUUl9UWVBFXQorCisvKiBXZSBjYWNoZSB0aGVzZSB0cmVlIG5vZGVzIHNvIGFzIHRvIGNhbGwgZ2V0X2lkZW50aWZpZXIgbGVzcworICAgZnJlcXVlbnRseS4gICovCisKKy8qIFRoZSBuYW1lIG9mIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhbiBpbi1jaGFyZ2UgcGFyYW1ldGVyIHRvCisgICBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gY29uc3RydWN0IHZpcnR1YWwgYmFzZSBjbGFzc2VzLiAgKi8KKyNkZWZpbmUgY3Rvcl9pZGVudGlmaWVyCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQ1RPUl9JREVOVElGSUVSXQorLyogVGhlIG5hbWUgb2YgYSBjb25zdHJ1Y3RvciB0aGF0IGNvbnN0cnVjdHMgdmlydHVhbCBiYXNlIGNsYXNzZXMuICAqLworI2RlZmluZSBjb21wbGV0ZV9jdG9yX2lkZW50aWZpZXIJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQ09NUExFVEVfQ1RPUl9JREVOVElGSUVSXQorLyogVGhlIG5hbWUgb2YgYSBjb25zdHJ1Y3RvciB0aGF0IGRvZXMgbm90IGNvbnN0cnVjdCB2aXJ0dWFsIGJhc2UgY2xhc3Nlcy4gICovCisjZGVmaW5lIGJhc2VfY3Rvcl9pZGVudGlmaWVyCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9CQVNFX0NUT1JfSURFTlRJRklFUl0KKy8qIFRoZSBuYW1lIG9mIGEgZGVzdHJ1Y3RvciB0aGF0IHRha2VzIGFuIGluLWNoYXJnZSBwYXJhbWV0ZXIgdG8KKyAgIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBkZXN0cm95IHZpcnR1YWwgYmFzZSBjbGFzc2VzIGFuZCB3aGV0aGVyCisgICBvciBub3QgdG8gZGVsZXRlIHRoZSBvYmplY3QuICAqLworI2RlZmluZSBkdG9yX2lkZW50aWZpZXIJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9EVE9SX0lERU5USUZJRVJdCisvKiBUaGUgbmFtZSBvZiBhIGRlc3RydWN0b3IgdGhhdCBkZXN0cm95cyB2aXJ0dWFsIGJhc2UgY2xhc3Nlcy4gICovCisjZGVmaW5lIGNvbXBsZXRlX2R0b3JfaWRlbnRpZmllcgljcF9nbG9iYWxfdHJlZXNbQ1BUSV9DT01QTEVURV9EVE9SX0lERU5USUZJRVJdCisvKiBUaGUgbmFtZSBvZiBhIGRlc3RydWN0b3IgdGhhdCBkb2VzIG5vdCBkZXN0cm95IHZpcnR1YWwgYmFzZQorICAgY2xhc3Nlcy4gICovCisjZGVmaW5lIGJhc2VfZHRvcl9pZGVudGlmaWVyCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9CQVNFX0RUT1JfSURFTlRJRklFUl0KKy8qIFRoZSBuYW1lIG9mIGEgZGVzdHJ1Y3RvciB0aGF0IGRlc3Ryb3lzIHZpcnR1YWwgYmFzZSBjbGFzc2VzLCBhbmQKKyAgIHRoZW4gZGVsZXRlcyB0aGUgZW50aXJlIG9iamVjdC4gICovCisjZGVmaW5lIGRlbGV0aW5nX2R0b3JfaWRlbnRpZmllcgljcF9nbG9iYWxfdHJlZXNbQ1BUSV9ERUxFVElOR19EVE9SX0lERU5USUZJRVJdCisjZGVmaW5lIGRlbHRhX2lkZW50aWZpZXIJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0RFTFRBX0lERU5USUZJRVJdCisjZGVmaW5lIGluX2NoYXJnZV9pZGVudGlmaWVyCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9JTl9DSEFSR0VfSURFTlRJRklFUl0KKy8qIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgdGhhdCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIFZUVCB0byB1c2UKKyAgIGZvciB0aGlzIHN1Ym9iamVjdCBjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgdnR0X3Bhcm1faWRlbnRpZmllcgkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVlRUX1BBUk1fSURFTlRJRklFUl0KKyNkZWZpbmUgbmVsdHNfaWRlbnRpZmllcgkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfTkVMVFNfSURFTlRJRklFUl0KKyNkZWZpbmUgdGhpc19pZGVudGlmaWVyCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVEhJU19JREVOVElGSUVSXQorI2RlZmluZSBwZm5faWRlbnRpZmllcgkJCWNwX2dsb2JhbF90cmVlc1tDUFRJX1BGTl9JREVOVElGSUVSXQorI2RlZmluZSB2cHRyX2lkZW50aWZpZXIJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9WUFRSX0lERU5USUZJRVJdCisvKiBUaGUgbmFtZSBvZiB0aGUgc3RkIG5hbWVzcGFjZS4gICovCisjZGVmaW5lIHN0ZF9pZGVudGlmaWVyCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfU1REX0lERU5USUZJRVJdCisjZGVmaW5lIGxhbmdfbmFtZV9jCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfTEFOR19OQU1FX0NdCisjZGVmaW5lIGxhbmdfbmFtZV9jcGx1c3BsdXMJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0xBTkdfTkFNRV9DUExVU1BMVVNdCisjZGVmaW5lIGxhbmdfbmFtZV9qYXZhCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfTEFOR19OQU1FX0pBVkFdCisKKy8qIEV4Y2VwdGlvbiBzcGVjaWZpZXIgdXNlZCBmb3IgdGhyb3coKS4gICovCisjZGVmaW5lIGVtcHR5X2V4Y2VwdF9zcGVjCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9FTVBUWV9FWENFUFRfU1BFQ10KKyNkZWZpbmUgbm9leGNlcHRfdHJ1ZV9zcGVjCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9OT0VYQ0VQVF9UUlVFX1NQRUNdCisjZGVmaW5lIG5vZXhjZXB0X2ZhbHNlX3NwZWMJCWNwX2dsb2JhbF90cmVlc1tDUFRJX05PRVhDRVBUX0ZBTFNFX1NQRUNdCisKKy8qIElmIG5vbi1OVUxMLCBhIFBPSU5URVJfVFlQRSBlcXVpdmFsZW50IHRvIChqYXZhOjpsYW5nOjpDbGFzcyopLiAgKi8KKyNkZWZpbmUgamNsYXNzX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9KQ0xBU1NdCisKKy8qIFRoZSBkZWNsYXJhdGlvbiBmb3IgYHN0ZDo6dGVybWluYXRlJy4gICovCisjZGVmaW5lIHRlcm1pbmF0ZV9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfVEVSTUlOQVRFXQorCisvKiBUaGUgZGVjbGFyYXRpb24gZm9yICJfX2N4YV9jYWxsX3VuZXhwZWN0ZWQiLiAgKi8KKyNkZWZpbmUgY2FsbF91bmV4cGVjdGVkX25vZGUJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0NBTExfVU5FWFBFQ1RFRF0KKworLyogVGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLXBvaW50ZXIgYXJndW1lbnQgdG8gIl9fY3hhX2F0ZXhpdCIgKG9yCisgICAic3RkOjphdGV4aXQiLCBpZiAiX19jeGFfYXRleGl0IiBpcyBub3QgYmVpbmcgdXNlZCkuICAqLworI2RlZmluZSBhdGV4aXRfZm5fcHRyX3R5cGVfbm9kZSAgICAgICAgIGNwX2dsb2JhbF90cmVlc1tDUFRJX0FURVhJVF9GTl9QVFJfVFlQRV0KKworLyogQSBwb2ludGVyIHRvIGBzdGQ6OmF0ZXhpdCcuICAqLworI2RlZmluZSBhdGV4aXRfbm9kZQkJCWNwX2dsb2JhbF90cmVlc1tDUFRJX0FURVhJVF0KKworLyogQSBwb2ludGVyIHRvIGBfX2Rzb19oYW5kbGUnLiAgKi8KKyNkZWZpbmUgZHNvX2hhbmRsZV9ub2RlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfRFNPX0hBTkRMRV0KKworLyogVGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBkeW5hbWljX2Nhc3QgcnVudGltZS4gICovCisjZGVmaW5lIGR5bmFtaWNfY2FzdF9ub2RlCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9EQ0FTVF0KKworLyogVGhlIHR5cGUgb2YgYSBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgY2xlYW51cF90eXBlCQkJY3BfZ2xvYmFsX3RyZWVzW0NQVElfQ0xFQU5VUF9UWVBFXQorCisvKiBUaGUgdHlwZSBvZiB0aGUgdnR0IHBhcmFtZXRlciBwYXNzZWQgdG8gc3Vib2JqZWN0IGNvbnN0cnVjdG9ycyBhbmQKKyAgIGRlc3RydWN0b3JzLiAgKi8KKyNkZWZpbmUgdnR0X3Bhcm1fdHlwZQkJCWNwX2dsb2JhbF90cmVlc1tDUFRJX1ZUVF9QQVJNX1RZUEVdCisKKy8qIEEgVFJFRV9MSVNUIG9mIHRoZSBkeW5hbWljIGNsYXNzZXMgd2hvc2UgdnRhYmxlcyBtYXkgaGF2ZSB0byBiZQorICAgZW1pdHRlZCBpbiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQuICAqLworCisjZGVmaW5lIGtleWVkX2NsYXNzZXMJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9LRVlFRF9DTEFTU0VTXQorCisvKiBOb2RlIHRvIGluZGljYXRlIGRlZmF1bHQgYWNjZXNzLiBUaGlzIG11c3QgYmUgZGlzdGluY3QgZnJvbSB0aGUKKyAgIGFjY2VzcyBub2RlcyBpbiB0cmVlLmguICAqLworCisjZGVmaW5lIGFjY2Vzc19kZWZhdWx0X25vZGUJCW51bGxfbm9kZQorCisvKiBHbG9iYWwgc3RhdGUuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBzYXZlZF9zY29wZSB7CisgIHZlYzxjeHhfc2F2ZWRfYmluZGluZywgdmFfZ2M+ICpvbGRfYmluZGluZ3M7CisgIHRyZWUgb2xkX25hbWVzcGFjZTsKKyAgdmVjPHRyZWUsIHZhX2djPiAqZGVjbF9uc19saXN0OworICB0cmVlIGNsYXNzX25hbWU7CisgIHRyZWUgY2xhc3NfdHlwZTsKKyAgdHJlZSBhY2Nlc3Nfc3BlY2lmaWVyOworICB0cmVlIGZ1bmN0aW9uX2RlY2w7CisgIHZlYzx0cmVlLCB2YV9nYz4gKmxhbmdfYmFzZTsKKyAgdHJlZSBsYW5nX25hbWU7CisgIHRyZWUgdGVtcGxhdGVfcGFybXM7CisgIGNwX2JpbmRpbmdfbGV2ZWwgKnhfcHJldmlvdXNfY2xhc3NfbGV2ZWw7CisgIHRyZWUgeF9zYXZlZF90cmVlOworCisgIC8qIE9ubHkgdXNlZCBmb3IgdXNlcyBvZiB0aGlzIGluIHRyYWlsaW5nIHJldHVybiB0eXBlLiAgKi8KKyAgdHJlZSB4X2N1cnJlbnRfY2xhc3NfcHRyOworICB0cmVlIHhfY3VycmVudF9jbGFzc19yZWY7CisKKyAgaW50IHhfcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsOworICBpbnQgeF9wcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uOworICBCT09MX0JJVEZJRUxEIHhfcHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uIDogMTsKKyAgQk9PTF9CSVRGSUVMRCBuZWVkX3BvcF9mdW5jdGlvbl9jb250ZXh0IDogMTsKKworICBpbnQgdW5ldmFsdWF0ZWRfb3BlcmFuZDsKKyAgaW50IGluaGliaXRfZXZhbHVhdGlvbl93YXJuaW5nczsKKworICBzdHJ1Y3Qgc3RtdF90cmVlX3MgeF9zdG10X3RyZWU7CisKKyAgY3BfYmluZGluZ19sZXZlbCAqY2xhc3NfYmluZGluZ3M7CisgIGNwX2JpbmRpbmdfbGV2ZWwgKmJpbmRpbmdzOworCisgIHN0cnVjdCBzYXZlZF9zY29wZSAqcHJldjsKK307CisKKy8qIFRoZSBjdXJyZW50IG9wZW4gbmFtZXNwYWNlLiAgKi8KKworI2RlZmluZSBjdXJyZW50X25hbWVzcGFjZSBzY29wZV9jaGFpbi0+b2xkX25hbWVzcGFjZQorCisvKiBUaGUgc3RhY2sgZm9yIG5hbWVzcGFjZXMgb2YgY3VycmVudCBkZWNsYXJhdGlvbnMuICAqLworCisjZGVmaW5lIGRlY2xfbmFtZXNwYWNlX2xpc3Qgc2NvcGVfY2hhaW4tPmRlY2xfbnNfbGlzdAorCisvKiBJREVOVElGSUVSX05PREU6IG5hbWUgb2YgY3VycmVudCBjbGFzcyAqLworCisjZGVmaW5lIGN1cnJlbnRfY2xhc3NfbmFtZSBzY29wZV9jaGFpbi0+Y2xhc3NfbmFtZQorCisvKiBfVFlQRTogdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgY2xhc3MgKi8KKworI2RlZmluZSBjdXJyZW50X2NsYXNzX3R5cGUgc2NvcGVfY2hhaW4tPmNsYXNzX3R5cGUKKworLyogV2hlbiBwYXJzaW5nIGEgY2xhc3MgZGVmaW5pdGlvbiwgdGhlIGFjY2VzcyBzcGVjaWZpZXIgbW9zdCByZWNlbnRseQorICAgZ2l2ZW4gYnkgdGhlIHVzZXIsIG9yLCBpZiBubyBhY2Nlc3Mgc3BlY2lmaWVyIHdhcyBnaXZlbiwgdGhlCisgICBkZWZhdWx0IHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGUga2luZCBvZiBjbGFzcyAoaS5lLiwgc3RydWN0LAorICAgY2xhc3MsIG9yIHVuaW9uKS4gICovCisKKyNkZWZpbmUgY3VycmVudF9hY2Nlc3Nfc3BlY2lmaWVyIHNjb3BlX2NoYWluLT5hY2Nlc3Nfc3BlY2lmaWVyCisKKy8qIFBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbGFuZ3VhZ2UgbmFtZSBzdGFjay4gICovCisKKyNkZWZpbmUgY3VycmVudF9sYW5nX2Jhc2Ugc2NvcGVfY2hhaW4tPmxhbmdfYmFzZQorI2RlZmluZSBjdXJyZW50X2xhbmdfbmFtZSBzY29wZV9jaGFpbi0+bGFuZ19uYW1lCisKKy8qIFdoZW4gcGFyc2luZyBhIHRlbXBsYXRlIGRlY2xhcmF0aW9uLCBhIFRSRUVfTElTVCByZXByZXNlbnRzIHRoZQorICAgYWN0aXZlIHRlbXBsYXRlIHBhcmFtZXRlcnMuICBFYWNoIG5vZGUgaW4gdGhlIGxpc3QgcmVwcmVzZW50cyBvbmUKKyAgIGxldmVsIG9mIHRlbXBsYXRlIHBhcmFtZXRlcnMuICBUaGUgaW5uZXJtb3N0IGxldmVsIGlzIGZpcnN0IGluIHRoZQorICAgbGlzdC4gIFRoZSBkZXB0aCBvZiBlYWNoIGxldmVsIGlzIHN0b3JlZCBhcyBhbiBJTlRFR0VSX0NTVCBpbiB0aGUKKyAgIFRSRUVfUFVSUE9TRSBvZiBlYWNoIG5vZGUuICBUaGUgcGFyYW1ldGVycyBmb3IgdGhhdCBsZXZlbCBhcmUKKyAgIHN0b3JlZCBpbiB0aGUgVFJFRV9WQUxVRS4gICovCisKKyNkZWZpbmUgY3VycmVudF90ZW1wbGF0ZV9wYXJtcyBzY29wZV9jaGFpbi0+dGVtcGxhdGVfcGFybXMKKworI2RlZmluZSBwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wgc2NvcGVfY2hhaW4tPnhfcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsCisjZGVmaW5lIHByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb24gc2NvcGVfY2hhaW4tPnhfcHJvY2Vzc2luZ19zcGVjaWFsaXphdGlvbgorI2RlZmluZSBwcm9jZXNzaW5nX2V4cGxpY2l0X2luc3RhbnRpYXRpb24gc2NvcGVfY2hhaW4tPnhfcHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uCisKKy8qIFRoZSBjYWNoZWQgY2xhc3MgYmluZGluZyBsZXZlbCwgZnJvbSB0aGUgbW9zdCByZWNlbnRseSBleGl0ZWQKKyAgIGNsYXNzLCBvciBOVUxMIGlmIG5vbmUuICAqLworCisjZGVmaW5lIHByZXZpb3VzX2NsYXNzX2xldmVsIHNjb3BlX2NoYWluLT54X3ByZXZpb3VzX2NsYXNzX2xldmVsCisKKy8qIEEgbGlzdCBvZiBwcml2YXRlIHR5cGVzIG1lbnRpb25lZCwgZm9yIGRlZmVycmVkIGFjY2VzcyBjaGVja2luZy4gICovCisKK2V4dGVybiBHVFkoKCkpIHN0cnVjdCBzYXZlZF9zY29wZSAqc2NvcGVfY2hhaW47CisKK3N0cnVjdCBHVFkoKCkpIGN4eF9pbnRfdHJlZV9tYXAgeworICB1bnNpZ25lZCBpbnQgdWlkOworICB0cmVlIHRvOworfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBjeHhfaW50X3RyZWVfbWFwX2hhc2ggKGNvbnN0IHZvaWQgKik7CitleHRlcm4gaW50IGN4eF9pbnRfdHJlZV9tYXBfZXEgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKworLyogR2xvYmFsIHN0YXRlIHBlcnRpbmVudCB0byB0aGUgY3VycmVudCBmdW5jdGlvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxhbmd1YWdlX2Z1bmN0aW9uIHsKKyAgc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24gYmFzZTsKKworICB0cmVlIHhfY2R0b3JfbGFiZWw7CisgIHRyZWUgeF9jdXJyZW50X2NsYXNzX3B0cjsKKyAgdHJlZSB4X2N1cnJlbnRfY2xhc3NfcmVmOworICB0cmVlIHhfZWhfc3BlY19ibG9jazsKKyAgdHJlZSB4X2luX2NoYXJnZV9wYXJtOworICB0cmVlIHhfdnR0X3Bhcm07CisgIHRyZWUgeF9yZXR1cm5fdmFsdWU7CisgIHRyZWUgeF9hdXRvX3JldHVybl9wYXR0ZXJuOworCisgIEJPT0xfQklURklFTEQgcmV0dXJuc192YWx1ZSA6IDE7CisgIEJPT0xfQklURklFTEQgcmV0dXJuc19udWxsIDogMTsKKyAgQk9PTF9CSVRGSUVMRCByZXR1cm5zX2Fibm9ybWFsbHkgOiAxOworICBCT09MX0JJVEZJRUxEIHhfaW5fZnVuY3Rpb25fdHJ5X2hhbmRsZXIgOiAxOworICBCT09MX0JJVEZJRUxEIHhfaW5fYmFzZV9pbml0aWFsaXplciA6IDE7CisKKyAgLyogVHJ1ZSBpZiB0aGlzIGZ1bmN0aW9uIGNhbiB0aHJvdyBhbiBleGNlcHRpb24uICAqLworICBCT09MX0JJVEZJRUxEIGNhbl90aHJvdyA6IDE7CisKKyAgaHRhYl90IEdUWSgocGFyYW1faXMoc3RydWN0IG5hbWVkX2xhYmVsX2VudHJ5KSkpIHhfbmFtZWRfbGFiZWxzOworICBjcF9iaW5kaW5nX2xldmVsICpiaW5kaW5nczsKKyAgdmVjPHRyZWUsIHZhX2djPiAqeF9sb2NhbF9uYW1lczsKKyAgaHRhYl90IEdUWSgocGFyYW1faXMgKHN0cnVjdCBjeHhfaW50X3RyZWVfbWFwKSkpIGV4dGVybl9kZWNsX21hcDsKK307CisKKy8qIFRoZSBjdXJyZW50IEMrKy1zcGVjaWZpYyBwZXItZnVuY3Rpb24gZ2xvYmFsIHZhcmlhYmxlcy4gICovCisKKyNkZWZpbmUgY3BfZnVuY3Rpb25fY2hhaW4gKGNmdW4tPmxhbmd1YWdlKQorCisvKiBJbiBhIGNvbnN0cnVjdG9yIGRlc3RydWN0b3IsIHRoZSBwb2ludCBhdCB3aGljaCBhbGwgZGVyaXZlZCBjbGFzcworICAgZGVzdHJveWluZy9jb25zdHJ1Y3Rpb24gaGFzIGJlZW4gZG9uZS4gIEkuZS4sIGp1c3QgYmVmb3JlIGEKKyAgIGNvbnN0cnVjdG9yIHJldHVybnMsIG9yIGJlZm9yZSBhbnkgYmFzZSBjbGFzcyBkZXN0cm95aW5nIHdpbGwgYmUgZG9uZQorICAgaW4gYSBkZXN0cnVjdG9yLiAgKi8KKworI2RlZmluZSBjZHRvcl9sYWJlbCBjcF9mdW5jdGlvbl9jaGFpbi0+eF9jZHRvcl9sYWJlbAorCisvKiBXaGVuIHdlJ3JlIHByb2Nlc3NpbmcgYSBtZW1iZXIgZnVuY3Rpb24sIGN1cnJlbnRfY2xhc3NfcHRyIGlzIHRoZQorICAgUEFSTV9ERUNMIGZvciB0aGUgYHRoaXMnIHBvaW50ZXIuICBUaGUgY3VycmVudF9jbGFzc19yZWYgaXMgYW4KKyAgIGV4cHJlc3Npb24gZm9yIGAqdGhpcycuICAqLworCisjZGVmaW5lIGN1cnJlbnRfY2xhc3NfcHRyCQkJXAorICAoKihjZnVuICYmIGNwX2Z1bmN0aW9uX2NoYWluCQkJXAorICAgICA/ICZjcF9mdW5jdGlvbl9jaGFpbi0+eF9jdXJyZW50X2NsYXNzX3B0cglcCisgICAgIDogJnNjb3BlX2NoYWluLT54X2N1cnJlbnRfY2xhc3NfcHRyKSkKKyNkZWZpbmUgY3VycmVudF9jbGFzc19yZWYJCQlcCisgICgqKGNmdW4gJiYgY3BfZnVuY3Rpb25fY2hhaW4JCQlcCisgICAgID8gJmNwX2Z1bmN0aW9uX2NoYWluLT54X2N1cnJlbnRfY2xhc3NfcmVmCVwKKyAgICAgOiAmc2NvcGVfY2hhaW4tPnhfY3VycmVudF9jbGFzc19yZWYpKQorCisvKiBUaGUgRUhfU1BFQ19CTE9DSyBmb3IgdGhlIGV4Y2VwdGlvbi1zcGVjaWZpZXJzIGZvciB0aGUgY3VycmVudAorICAgZnVuY3Rpb24sIGlmIGFueS4gICovCisKKyNkZWZpbmUgY3VycmVudF9laF9zcGVjX2Jsb2NrIGNwX2Z1bmN0aW9uX2NoYWluLT54X2VoX3NwZWNfYmxvY2sKKworLyogVGhlIGBfX2luX2NocmcnIHBhcmFtZXRlciBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBPbmx5IHVzZWQgZm9yCisgICBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzLiAgKi8KKworI2RlZmluZSBjdXJyZW50X2luX2NoYXJnZV9wYXJtIGNwX2Z1bmN0aW9uX2NoYWluLT54X2luX2NoYXJnZV9wYXJtCisKKy8qIFRoZSBgX192dHRfcGFybScgcGFyYW1ldGVyIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbi4gIE9ubHkgdXNlZCBmb3IKKyAgIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuICAqLworCisjZGVmaW5lIGN1cnJlbnRfdnR0X3Bhcm0gY3BfZnVuY3Rpb25fY2hhaW4tPnhfdnR0X3Bhcm0KKworLyogU2V0IHRvIDAgYXQgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgc2V0IHRvIDEgaWYKKyAgIGEgcmV0dXJuIHN0YXRlbWVudCB0aGF0IHNwZWNpZmllcyBhIHJldHVybiB2YWx1ZSBpcyBzZWVuLiAgKi8KKworI2RlZmluZSBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfdmFsdWUgY3BfZnVuY3Rpb25fY2hhaW4tPnJldHVybnNfdmFsdWUKKworLyogU2V0IHRvIDAgYXQgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgc2V0IHRvIDEgaWYKKyAgIGEgcmV0dXJuIHN0YXRlbWVudCB3aXRoIG5vIGFyZ3VtZW50IGlzIHNlZW4uICAqLworCisjZGVmaW5lIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19udWxsIGNwX2Z1bmN0aW9uX2NoYWluLT5yZXR1cm5zX251bGwKKworLyogU2V0IHRvIDAgYXQgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgc2V0IHRvIDEgaWYKKyAgIGEgY2FsbCB0byBhIG5vcmV0dXJuIGZ1bmN0aW9uIGlzIHNlZW4uICAqLworCisjZGVmaW5lIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19hYm5vcm1hbGx5IFwKKyAgY3BfZnVuY3Rpb25fY2hhaW4tPnJldHVybnNfYWJub3JtYWxseQorCisvKiBOb256ZXJvIGlmIHdlIGFyZSBwcm9jZXNzaW5nIGEgYmFzZSBpbml0aWFsaXplci4gIFplcm8gZWxzZXdoZXJlLiAgKi8KKyNkZWZpbmUgaW5fYmFzZV9pbml0aWFsaXplciBjcF9mdW5jdGlvbl9jaGFpbi0+eF9pbl9iYXNlX2luaXRpYWxpemVyCisKKyNkZWZpbmUgaW5fZnVuY3Rpb25fdHJ5X2hhbmRsZXIgY3BfZnVuY3Rpb25fY2hhaW4tPnhfaW5fZnVuY3Rpb25fdHJ5X2hhbmRsZXIKKworLyogRXhwcmVzc2lvbiBhbHdheXMgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbiwgb3IgZXJyb3JfbWFya19ub2RlCisgICBvdGhlcndpc2UsIGZvciB1c2UgYnkgdGhlIGF1dG9tYXRpYyBuYW1lZCByZXR1cm4gdmFsdWUgb3B0aW1pemF0aW9uLiAgKi8KKworI2RlZmluZSBjdXJyZW50X2Z1bmN0aW9uX3JldHVybl92YWx1ZSBcCisgIChjcF9mdW5jdGlvbl9jaGFpbi0+eF9yZXR1cm5fdmFsdWUpCisKKy8qIEEgdHlwZSBpbnZvbHZpbmcgJ2F1dG8nIHRvIGJlIHVzZWQgZm9yIHJldHVybiB0eXBlIGRlZHVjdGlvbi4gICovCisKKyNkZWZpbmUgY3VycmVudF9mdW5jdGlvbl9hdXRvX3JldHVybl9wYXR0ZXJuIFwKKyAgKGNwX2Z1bmN0aW9uX2NoYWluLT54X2F1dG9fcmV0dXJuX3BhdHRlcm4pCisKKy8qIFRydWUgaWYgTkFNRSBpcyB0aGUgSURFTlRJRklFUl9OT0RFIGZvciBhbiBvdmVybG9hZGVkICJvcGVyYXRvcgorICAgbmV3IiBvciAib3BlcmF0b3IgZGVsZXRlIi4gICovCisjZGVmaW5lIE5FV19ERUxFVEVfT1BOQU1FX1AoTkFNRSkJCVwKKyAgKChOQU1FKSA9PSBhbnNpX29wbmFtZSAoTkVXX0VYUFIpCQlcCisgICB8fCAoTkFNRSkgPT0gYW5zaV9vcG5hbWUgKFZFQ19ORVdfRVhQUikJXAorICAgfHwgKE5BTUUpID09IGFuc2lfb3BuYW1lIChERUxFVEVfRVhQUikJXAorICAgfHwgKE5BTUUpID09IGFuc2lfb3BuYW1lIChWRUNfREVMRVRFX0VYUFIpKQorCisjZGVmaW5lIGFuc2lfb3BuYW1lKENPREUpIFwKKyAgKG9wZXJhdG9yX25hbWVfaW5mb1soaW50KSAoQ09ERSldLmlkZW50aWZpZXIpCisjZGVmaW5lIGFuc2lfYXNzb3BuYW1lKENPREUpIFwKKyAgKGFzc2lnbm1lbnRfb3BlcmF0b3JfbmFtZV9pbmZvWyhpbnQpIChDT0RFKV0uaWRlbnRpZmllcikKKworLyogVFJVRSBpZiBhIHRyZWUgY29kZSByZXByZXNlbnRzIGEgc3RhdGVtZW50LiAgKi8KK2V4dGVybiBib29sIHN0YXRlbWVudF9jb2RlX3BbTUFYX1RSRUVfQ09ERVNdOworCisjZGVmaW5lIFNUQVRFTUVOVF9DT0RFX1AoQ09ERSkgc3RhdGVtZW50X2NvZGVfcFsoaW50KSAoQ09ERSldCisKK2VudW0gbGFuZ3VhZ2VzIHsgbGFuZ19jLCBsYW5nX2NwbHVzcGx1cywgbGFuZ19qYXZhIH07CisKKy8qIE1hY3JvcyB0byBtYWtlIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbnMnIGxpdmVzIGVhc2llci4gICovCisjZGVmaW5lIFRZUEVfSURFTlRJRklFUihOT0RFKSAoREVDTF9OQU1FIChUWVBFX05BTUUgKE5PREUpKSkKKyNkZWZpbmUgVFlQRV9MSU5LQUdFX0lERU5USUZJRVIoTk9ERSkgXAorICAoVFlQRV9JREVOVElGSUVSIChUWVBFX01BSU5fVkFSSUFOVCAoTk9ERSkpKQorI2RlZmluZSBUWVBFX05BTUVfU1RSSU5HKE5PREUpIChJREVOVElGSUVSX1BPSU5URVIgKFRZUEVfSURFTlRJRklFUiAoTk9ERSkpKQorI2RlZmluZSBUWVBFX05BTUVfTEVOR1RIKE5PREUpIChJREVOVElGSUVSX0xFTkdUSCAoVFlQRV9JREVOVElGSUVSIChOT0RFKSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBoYXMgbm8gbmFtZSBmb3IgbGlua2FnZSBwdXJwb3Nlcy4gICovCisjZGVmaW5lIFRZUEVfQU5PTllNT1VTX1AoTk9ERSkgXAorICAoVEFHR0VEX1RZUEVfUCAoTk9ERSkgJiYgQU5PTl9BR0dSTkFNRV9QIChUWVBFX0xJTktBR0VfSURFTlRJRklFUiAoTk9ERSkpKQorCisvKiBUaGUgX0RFQ0wgZm9yIHRoaXMgX1RZUEUuICAqLworI2RlZmluZSBUWVBFX01BSU5fREVDTChOT0RFKSAoVFlQRV9TVFVCX0RFQ0wgKFRZUEVfTUFJTl9WQVJJQU5UIChOT0RFKSkpCisKKy8qIE5vbnplcm8gaWYgVCBpcyBhIHR5cGUgdGhhdCBjb3VsZCByZXNvbHZlIHRvIGFueSBraW5kIG9mIGNvbmNyZXRlIHR5cGUKKyAgIGF0IGluc3RhbnRpYXRpb24gdGltZS4gICovCisjZGVmaW5lIFdJTERDQVJEX1RZUEVfUChUKQkJCQlcCisgIChUUkVFX0NPREUgKFQpID09IFRFTVBMQVRFX1RZUEVfUEFSTQkJCVwKKyAgIHx8IFRSRUVfQ09ERSAoVCkgPT0gVFlQRU5BTUVfVFlQRQkJCVwKKyAgIHx8IFRSRUVfQ09ERSAoVCkgPT0gVFlQRU9GX1RZUEUJCQlcCisgICB8fCBUUkVFX0NPREUgKFQpID09IEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0JXAorICAgfHwgVFJFRV9DT0RFIChUKSA9PSBERUNMVFlQRV9UWVBFKQorCisvKiBOb256ZXJvIGlmIFQgaXMgYSBjbGFzcyAob3Igc3RydWN0IG9yIHVuaW9uKSB0eXBlLiAgQWxzbyBub256ZXJvCisgICBmb3IgdGVtcGxhdGUgdHlwZSBwYXJhbWV0ZXJzLCB0eXBlbmFtZSB0eXBlcywgYW5kIGluc3RhbnRpYXRlZAorICAgdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4gIEtlZXAgdGhlc2UgY2hlY2tzIGluIGFzY2VuZGluZyBjb2RlCisgICBvcmRlci4gICovCisjZGVmaW5lIE1BWUJFX0NMQVNTX1RZUEVfUChUKSAoV0lMRENBUkRfVFlQRV9QIChUKSB8fCBDTEFTU19UWVBFX1AgKFQpKQorCisvKiBTZXQgQ0xBU1NfVFlQRV9QIGZvciBUIHRvIFZBTC4gIFQgbXVzdCBiZSBhIGNsYXNzLCBzdHJ1Y3QsIG9yCisgICB1bmlvbiB0eXBlLiAgKi8KKyNkZWZpbmUgU0VUX0NMQVNTX1RZUEVfUChULCBWQUwpIFwKKyAgKFRZUEVfTEFOR19GTEFHXzUgKFQpID0gKFZBTCkpCisKKy8qIE5vbnplcm8gaWYgVCBpcyBhIGNsYXNzIHR5cGUuICBaZXJvIGZvciB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlcnMsCisgICB0eXBlbmFtZSB0eXBlcywgYW5kIHNvIGZvcnRoLiAgKi8KKyNkZWZpbmUgQ0xBU1NfVFlQRV9QKFQpIFwKKyAgKFJFQ09SRF9PUl9VTklPTl9DT0RFX1AgKFRSRUVfQ09ERSAoVCkpICYmIFRZUEVfTEFOR19GTEFHXzUgKFQpKQorCisvKiBOb256ZXJvIGlmIFQgaXMgYSBjbGFzcyB0eXBlIGJ1dCBub3QgYW4gdW5pb24uICAqLworI2RlZmluZSBOT05fVU5JT05fQ0xBU1NfVFlQRV9QKFQpIFwKKyAgKENMQVNTX1RZUEVfUCAoVCkgJiYgVFJFRV9DT0RFIChUKSAhPSBVTklPTl9UWVBFKQorCisvKiBLZWVwIHRoZXNlIGNoZWNrcyBpbiBhc2NlbmRpbmcgY29kZSBvcmRlci4gICovCisjZGVmaW5lIFJFQ09SRF9PUl9VTklPTl9DT0RFX1AoVCkJXAorICAoKFQpID09IFJFQ09SRF9UWVBFIHx8IChUKSA9PSBVTklPTl9UWVBFKQorI2RlZmluZSBUQUdHRURfVFlQRV9QKFQpIFwKKyAgKENMQVNTX1RZUEVfUCAoVCkgfHwgVFJFRV9DT0RFIChUKSA9PSBFTlVNRVJBTF9UWVBFKQorI2RlZmluZSBJU19PVkVSTE9BRF9UWVBFKFQpIFRBR0dFRF9UWVBFX1AgKFQpCisKKy8qIFRydWUgaWYgdGhpcyBhICJKYXZhIiB0eXBlLCBkZWZpbmVkIGluICdleHRlcm4gIkphdmEiJy4gICovCisjZGVmaW5lIFRZUEVfRk9SX0pBVkEoTk9ERSkgVFlQRV9MQU5HX0ZMQUdfMyAoTk9ERSkKKworLyogVHJ1ZSBpZiB0aGlzIHR5cGUgaXMgZGVwZW5kZW50LiAgVGhpcyBwcmVkaWNhdGUgaXMgb25seSB2YWxpZCBpZgorICAgVFlQRV9ERVBFTkRFTlRfUF9WQUxJRCBpcyB0cnVlLiAgKi8KKyNkZWZpbmUgVFlQRV9ERVBFTkRFTlRfUChOT0RFKSBUWVBFX0xBTkdfRkxBR18wIChOT0RFKQorCisvKiBUcnVlIGlmIGRlcGVuZGVudF90eXBlX3AgaGFzIGJlZW4gY2FsbGVkIGZvciB0aGlzIHR5cGUsIHdpdGggdGhlCisgICByZXN1bHQgdGhhdCBUWVBFX0RFUEVOREVOVF9QIGlzIHZhbGlkLiAgKi8KKyNkZWZpbmUgVFlQRV9ERVBFTkRFTlRfUF9WQUxJRChOT0RFKSBUWVBFX0xBTkdfRkxBR182KE5PREUpCisKKy8qIE5vbnplcm8gaWYgdGhpcyB0eXBlIGlzIGNvbnN0LXF1YWxpZmllZC4gICovCisjZGVmaW5lIENQX1RZUEVfQ09OU1RfUChOT0RFKQkJCQlcCisgICgoY3BfdHlwZV9xdWFscyAoTk9ERSkgJiBUWVBFX1FVQUxfQ09OU1QpICE9IDApCisKKy8qIE5vbnplcm8gaWYgdGhpcyB0eXBlIGlzIHZvbGF0aWxlLXF1YWxpZmllZC4gICovCisjZGVmaW5lIENQX1RZUEVfVk9MQVRJTEVfUChOT0RFKQkJCVwKKyAgKChjcF90eXBlX3F1YWxzIChOT0RFKSAmIFRZUEVfUVVBTF9WT0xBVElMRSkgIT0gMCkKKworLyogTm9uemVybyBpZiB0aGlzIHR5cGUgaXMgcmVzdHJpY3QtcXVhbGlmaWVkLiAgKi8KKyNkZWZpbmUgQ1BfVFlQRV9SRVNUUklDVF9QKE5PREUpCQkJXAorICAoKGNwX3R5cGVfcXVhbHMgKE5PREUpICYgVFlQRV9RVUFMX1JFU1RSSUNUKSAhPSAwKQorCisvKiBOb256ZXJvIGlmIHRoaXMgdHlwZSBpcyBjb25zdC1xdWFsaWZpZWQsIGJ1dCBub3QKKyAgIHZvbGF0aWxlLXF1YWxpZmllZC4gIE90aGVyIHF1YWxpZmllcnMgYXJlIGlnbm9yZWQuICBUaGlzIG1hY3JvIGlzCisgICB1c2VkIHRvIHRlc3Qgd2hldGhlciBvciBub3QgaXQgaXMgT0sgdG8gYmluZCBhbiBydmFsdWUgdG8gYQorICAgcmVmZXJlbmNlLiAgKi8KKyNkZWZpbmUgQ1BfVFlQRV9DT05TVF9OT05fVk9MQVRJTEVfUChOT0RFKQkJCQlcCisgICgoY3BfdHlwZV9xdWFscyAoTk9ERSkgJiAoVFlQRV9RVUFMX0NPTlNUIHwgVFlQRV9RVUFMX1ZPTEFUSUxFKSkJXAorICAgPT0gVFlQRV9RVUFMX0NPTlNUKQorCisjZGVmaW5lIEZVTkNUSU9OX0FSR19DSEFJTihOT0RFKSBcCisgIFRSRUVfQ0hBSU4gKFRZUEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKE5PREUpKSkKKworLyogR2l2ZW4gYSBGVU5DVElPTl9ERUNMLCByZXR1cm5zIHRoZSBmaXJzdCBUUkVFX0xJU1Qgb3V0IG9mIFRZUEVfQVJHX1RZUEVTCisgICB3aGljaCByZWZlcnMgdG8gYSB1c2VyLXdyaXR0ZW4gcGFyYW1ldGVyLiAgKi8KKyNkZWZpbmUgRlVOQ1RJT05fRklSU1RfVVNFUl9QQVJNVFlQRShOT0RFKSBcCisgIHNraXBfYXJ0aWZpY2lhbF9wYXJtc19mb3IgKChOT0RFKSwgVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAoTk9ERSkpKQorCisvKiBTaW1pbGFybHksIGJ1dCBmb3IgREVDTF9BUkdVTUVOVFMuICAqLworI2RlZmluZSBGVU5DVElPTl9GSVJTVF9VU0VSX1BBUk0oTk9ERSkgXAorICBza2lwX2FydGlmaWNpYWxfcGFybXNfZm9yICgoTk9ERSksIERFQ0xfQVJHVU1FTlRTIChOT0RFKSkKKworLyogTm9uemVybyBpZmYgVFlQRSBpcyBkZXJpdmVkIGZyb20gUEFSRU5ULiBJZ25vcmVzIGFjY2Vzc2liaWxpdHkgYW5kCisgICBhbWJpZ3VpdHkgaXNzdWVzLiAgKi8KKyNkZWZpbmUgREVSSVZFRF9GUk9NX1AoUEFSRU5ULCBUWVBFKSBcCisgIChsb29rdXBfYmFzZSAoKFRZUEUpLCAoUEFSRU5UKSwgYmFfYW55LCBOVUxMLCB0Zl93YXJuaW5nX29yX2Vycm9yKVwKKyAgICE9IE5VTExfVFJFRSkKKworLyogR2l2ZXMgdGhlIHZpc2liaWxpdHkgc3BlY2lmaWNhdGlvbiBmb3IgYSBjbGFzcyB0eXBlLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1ZJU0lCSUxJVFkoVFlQRSkJCVwKKwlERUNMX1ZJU0lCSUxJVFkgKFRZUEVfTUFJTl9ERUNMIChUWVBFKSkKKyNkZWZpbmUgQ0xBU1NUWVBFX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEKFRZUEUpCVwKKwlERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChUWVBFX01BSU5fREVDTCAoVFlQRSkpCisKK3R5cGVkZWYgc3RydWN0IEdUWSAoKCkpIHRyZWVfcGFpcl9zIHsKKyAgdHJlZSBwdXJwb3NlOworICB0cmVlIHZhbHVlOworfSB0cmVlX3BhaXJfczsKK3R5cGVkZWYgdHJlZV9wYWlyX3MgKnRyZWVfcGFpcl9wOworCisvKiBUaGlzIGlzIGEgZmV3IGhlYWRlciBmbGFncyBmb3IgJ3N0cnVjdCBsYW5nX3R5cGUnLiAgQWN0dWFsbHksCisgICBhbGwgYnV0IHRoZSBmaXJzdCBhcmUgdXNlZCBvbmx5IGZvciBsYW5nX3R5cGVfY2xhc3M7IHRoZXkKKyAgIGFyZSBwdXQgaW4gdGhpcyBzdHJ1Y3R1cmUgdG8gc2F2ZSBzcGFjZS4gICovCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX3R5cGVfaGVhZGVyIHsKKyAgQk9PTF9CSVRGSUVMRCBpc19sYW5nX3R5cGVfY2xhc3MgOiAxOworCisgIEJPT0xfQklURklFTEQgaGFzX3R5cGVfY29udmVyc2lvbiA6IDE7CisgIEJPT0xfQklURklFTEQgaGFzX2NvcHlfY3RvciA6IDE7CisgIEJPT0xfQklURklFTEQgaGFzX2RlZmF1bHRfY3RvciA6IDE7CisgIEJPT0xfQklURklFTEQgY29uc3RfbmVlZHNfaW5pdCA6IDE7CisgIEJPT0xfQklURklFTEQgcmVmX25lZWRzX2luaXQgOiAxOworICBCT09MX0JJVEZJRUxEIGhhc19jb25zdF9jb3B5X2Fzc2lnbiA6IDE7CisKKyAgQk9PTF9CSVRGSUVMRCBzcGFyZSA6IDE7Cit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3ZlIGFuZCBiZXlvbmQKKyAgIHdoYXQgaXMgcHJvdmlkZSBpbiB0aGUgb3JkaW5hcnkgdHJlZV90eXBlLiAgSW4gdGhlIHBhc3QsIHdlIHVzZWQgaXQKKyAgIGZvciB0aGUgdHlwZXMgb2YgY2xhc3MgdHlwZXMsIHRlbXBsYXRlIHBhcmFtZXRlcnMgdHlwZXMsIHR5cGVuYW1lCisgICB0eXBlcywgYW5kIHNvIGZvcnRoLiAgSG93ZXZlciwgdGhlcmUgY2FuIGJlIG1hbnkgKHRlbnMgdG8gaHVuZHJlZHMKKyAgIG9mIHRob3VzYW5kcykgb2YgdGVtcGxhdGUgcGFyYW1ldGVyIHR5cGVzIGluIGEgY29tcGlsYXRpb24sIGFuZAorICAgdGhlcmUncyBubyBuZWVkIGZvciB0aGlzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhhdCBjYXNlLgorICAgVGhlcmVmb3JlLCB3ZSBub3cgdXNlIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgb25seSBmb3IgY2xhc3MgdHlwZXMuCisKKyAgIEluIHRoZSBwYXN0LCBpdCB3YXMgdGhvdWdodCB0aGF0IHRoZXJlIHdvdWxkIGJlIHJlbGF0aXZlbHkgZmV3CisgICBjbGFzcyB0eXBlcy4gIEhvd2V2ZXIsIGluIHRoZSBwcmVzZW5jZSBvZiBoZWF2eSB1c2Ugb2YgdGVtcGxhdGVzLAorICAgbWFueSAoaS5lLiwgdGhvdXNhbmRzKSBvZiBjbGFzc2VzIGNhbiBlYXNpbHkgYmUgZ2VuZXJhdGVkLgorICAgVGhlcmVmb3JlLCB3ZSBzaG91bGQgZW5kZWF2b3IgdG8ga2VlcCB0aGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSB0bworICAgYSBtaW5pbXVtLiAgKi8KK3N0cnVjdCBHVFkoKCkpIGxhbmdfdHlwZV9jbGFzcyB7CisgIHN0cnVjdCBsYW5nX3R5cGVfaGVhZGVyIGg7CisKKyAgdW5zaWduZWQgY2hhciBhbGlnbjsKKworICB1bnNpZ25lZCBoYXNfbXV0YWJsZSA6IDE7CisgIHVuc2lnbmVkIGNvbV9pbnRlcmZhY2UgOiAxOworICB1bnNpZ25lZCBub25fcG9kX2NsYXNzIDogMTsKKyAgdW5zaWduZWQgbmVhcmx5X2VtcHR5X3AgOiAxOworICB1bnNpZ25lZCB1c2VyX2FsaWduIDogMTsKKyAgdW5zaWduZWQgaGFzX2NvcHlfYXNzaWduIDogMTsKKyAgdW5zaWduZWQgaGFzX25ldyA6IDE7CisgIHVuc2lnbmVkIGhhc19hcnJheV9uZXcgOiAxOworCisgIHVuc2lnbmVkIGdldHNfZGVsZXRlIDogMjsKKyAgdW5zaWduZWQgaW50ZXJmYWNlX29ubHkgOiAxOworICB1bnNpZ25lZCBpbnRlcmZhY2VfdW5rbm93biA6IDE7CisgIHVuc2lnbmVkIGNvbnRhaW5zX2VtcHR5X2NsYXNzX3AgOiAxOworICB1bnNpZ25lZCBhbm9uX2FnZ3IgOiAxOworICB1bnNpZ25lZCBub25femVyb19pbml0IDogMTsKKyAgdW5zaWduZWQgZW1wdHlfcCA6IDE7CisKKyAgdW5zaWduZWQgdmVjX25ld191c2VzX2Nvb2tpZSA6IDE7CisgIHVuc2lnbmVkIGRlY2xhcmVkX2NsYXNzIDogMTsKKyAgdW5zaWduZWQgZGlhbW9uZF9zaGFwZWQgOiAxOworICB1bnNpZ25lZCByZXBlYXRlZF9iYXNlIDogMTsKKyAgdW5zaWduZWQgYmVpbmdfZGVmaW5lZCA6IDE7CisgIHVuc2lnbmVkIGphdmFfaW50ZXJmYWNlIDogMTsKKyAgdW5zaWduZWQgZGVidWdfcmVxdWVzdGVkIDogMTsKKyAgdW5zaWduZWQgZmllbGRzX3JlYWRvbmx5IDogMTsKKworICB1bnNpZ25lZCB1c2VfdGVtcGxhdGUgOiAyOworICB1bnNpZ25lZCBwdHJtZW1mdW5jX2ZsYWcgOiAxOworICB1bnNpZ25lZCB3YXNfYW5vbnltb3VzIDogMTsKKyAgdW5zaWduZWQgbGF6eV9kZWZhdWx0X2N0b3IgOiAxOworICB1bnNpZ25lZCBsYXp5X2NvcHlfY3RvciA6IDE7CisgIHVuc2lnbmVkIGxhenlfY29weV9hc3NpZ24gOiAxOworICB1bnNpZ25lZCBsYXp5X2Rlc3RydWN0b3IgOiAxOworCisgIHVuc2lnbmVkIGhhc19jb25zdF9jb3B5X2N0b3IgOiAxOworICB1bnNpZ25lZCBoYXNfY29tcGxleF9jb3B5X2N0b3IgOiAxOworICB1bnNpZ25lZCBoYXNfY29tcGxleF9jb3B5X2Fzc2lnbiA6IDE7CisgIHVuc2lnbmVkIG5vbl9hZ2dyZWdhdGUgOiAxOworICB1bnNpZ25lZCBoYXNfY29tcGxleF9kZmx0IDogMTsKKyAgdW5zaWduZWQgaGFzX2xpc3RfY3RvciA6IDE7CisgIHVuc2lnbmVkIG5vbl9zdGRfbGF5b3V0IDogMTsKKyAgdW5zaWduZWQgaXNfbGl0ZXJhbCA6IDE7CisKKyAgdW5zaWduZWQgbGF6eV9tb3ZlX2N0b3IgOiAxOworICB1bnNpZ25lZCBsYXp5X21vdmVfYXNzaWduIDogMTsKKyAgdW5zaWduZWQgaGFzX2NvbXBsZXhfbW92ZV9jdG9yIDogMTsKKyAgdW5zaWduZWQgaGFzX2NvbXBsZXhfbW92ZV9hc3NpZ24gOiAxOworICB1bnNpZ25lZCBoYXNfY29uc3RleHByX2N0b3IgOiAxOworICB1bnNpZ25lZCBpc19maW5hbCA6IDE7CisKKyAgLyogV2hlbiBhZGRpbmcgYSBmbGFnIGhlcmUsIGNvbnNpZGVyIHdoZXRoZXIgb3Igbm90IGl0IG91Z2h0IHRvCisgICAgIGFwcGx5IHRvIGEgdGVtcGxhdGUgaW5zdGFuY2UgaWYgaXQgYXBwbGllcyB0byB0aGUgdGVtcGxhdGUuICBJZgorICAgICBzbywgbWFrZSBzdXJlIHRvIGNvcHkgaXQgaW4gaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUhICAqLworCisgIC8qIFRoZXJlIGFyZSBzb21lIGJpdHMgbGVmdCB0byBmaWxsIG91dCBhIDMyLWJpdCB3b3JkLiAgS2VlcCB0cmFjaworICAgICBvZiB0aGlzIGJ5IHVwZGF0aW5nIHRoZSBzaXplIG9mIHRoaXMgYml0ZmllbGQgd2hlbmV2ZXIgeW91IGFkZCBvcgorICAgICByZW1vdmUgYSBmbGFnLiAgKi8KKyAgdW5zaWduZWQgZHVtbXkgOiAyOworCisgIHRyZWUgcHJpbWFyeV9iYXNlOworICB2ZWM8dHJlZV9wYWlyX3MsIHZhX2djPiAqdmNhbGxfaW5kaWNlczsKKyAgdHJlZSB2dGFibGVzOworICB0cmVlIHR5cGVpbmZvX3ZhcjsKKyAgdmVjPHRyZWUsIHZhX2djPiAqdmJhc2VzOworICBiaW5kaW5nX3RhYmxlIG5lc3RlZF91ZHRzOworICB0cmVlIGFzX2Jhc2U7CisgIHZlYzx0cmVlLCB2YV9nYz4gKnB1cmVfdmlydHVhbHM7CisgIHRyZWUgZnJpZW5kX2NsYXNzZXM7CisgIHZlYzx0cmVlLCB2YV9nYz4gKiBHVFkoKHJlb3JkZXIgKCJyZXNvcnRfdHlwZV9tZXRob2RfdmVjIikpKSBtZXRob2RzOworICB0cmVlIGtleV9tZXRob2Q7CisgIHRyZWUgZGVjbF9saXN0OworICB0cmVlIHRlbXBsYXRlX2luZm87CisgIHRyZWUgYmVmcmllbmRpbmdfY2xhc3NlczsKKyAgLyogSW4gYSBSRUNPUkRfVFlQRSwgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gT2JqZWN0aXZlLUMrKywgc3VjaAorICAgICBhcyBhIGxpc3Qgb2YgYWRvcHRlZCBwcm90b2NvbHMgb3IgYSBwb2ludGVyIHRvIGEgY29ycmVzcG9uZGluZworICAgICBAaW50ZXJmYWNlLiAgU2VlIG9iamMvb2JqYy1hY3QuaCBmb3IgZGV0YWlscy4gICovCisgIHRyZWUgb2JqY19pbmZvOworICAvKiBzb3J0ZWRfZmllbGRzIGlzIHNvcnRlZCBiYXNlZCBvbiBhIHBvaW50ZXIsIHNvIHdlIG5lZWQgdG8gYmUgYWJsZQorICAgICB0byByZXNvcnQgaXQgaWYgcG9pbnRlcnMgZ2V0IHJlYXJyYW5nZWQuICAqLworICBzdHJ1Y3Qgc29ydGVkX2ZpZWxkc190eXBlICogR1RZICgocmVvcmRlciAoInJlc29ydF9zb3J0ZWRfZmllbGRzIikpKQorICAgIHNvcnRlZF9maWVsZHM7CisgIC8qIEZJWE1FIHJldXNlIGFub3RoZXIgZmllbGQ/ICAqLworICB0cmVlIGxhbWJkYV9leHByOworfTsKKworc3RydWN0IEdUWSgoKSkgbGFuZ190eXBlX3B0cm1lbSB7CisgIHN0cnVjdCBsYW5nX3R5cGVfaGVhZGVyIGg7CisgIHRyZWUgcmVjb3JkOworfTsKKworc3RydWN0IEdUWSgodmFyaWFibGVfc2l6ZSkpIGxhbmdfdHlwZSB7CisgIHVuaW9uIGxhbmdfdHlwZV91CisgIHsKKyAgICBzdHJ1Y3QgbGFuZ190eXBlX2hlYWRlciBHVFkoKHNraXAgKCIiKSkpIGg7CisgICAgc3RydWN0IGxhbmdfdHlwZV9jbGFzcyAgR1RZKCh0YWcgKCIxIikpKSBjOworICAgIHN0cnVjdCBsYW5nX3R5cGVfcHRybWVtIEdUWSgodGFnICgiMCIpKSkgcHRybWVtOworICB9IEdUWSgoZGVzYyAoIiVoLmguaXNfbGFuZ190eXBlX2NsYXNzIikpKSB1OworfTsKKworI2lmIGRlZmluZWQgRU5BQkxFX1RSRUVfQ0hFQ0tJTkcgJiYgKEdDQ19WRVJTSU9OID49IDIwMDcpCisKKyNkZWZpbmUgTEFOR19UWVBFX0NMQVNTX0NIRUNLKE5PREUpIF9fZXh0ZW5zaW9uX18JCVwKKyh7ICBzdHJ1Y3QgbGFuZ190eXBlICpsdCA9IFRZUEVfTEFOR19TUEVDSUZJQyAoTk9ERSk7CQlcCisgICAgaWYgKCEgbHQtPnUuaC5pc19sYW5nX3R5cGVfY2xhc3MpCQkJCVwKKyAgICAgIGxhbmdfY2hlY2tfZmFpbGVkIChfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CVwKKyAgICAmbHQtPnUuYzsgfSkKKworI2RlZmluZSBMQU5HX1RZUEVfUFRSTUVNX0NIRUNLKE5PREUpIF9fZXh0ZW5zaW9uX18JCVwKKyh7ICBzdHJ1Y3QgbGFuZ190eXBlICpsdCA9IFRZUEVfTEFOR19TUEVDSUZJQyAoTk9ERSk7CQlcCisgICAgaWYgKGx0LT51LmguaXNfbGFuZ190eXBlX2NsYXNzKQkJCQlcCisgICAgICBsYW5nX2NoZWNrX2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICAgJmx0LT51LnB0cm1lbTsgfSkKKworI2Vsc2UKKworI2RlZmluZSBMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0soTk9ERSkgKCZUWVBFX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51LmMpCisjZGVmaW5lIExBTkdfVFlQRV9QVFJNRU1fQ0hFQ0soTk9ERSkgKCZUWVBFX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51LnB0cm1lbSkKKworI2VuZGlmIC8qIEVOQUJMRV9UUkVFX0NIRUNLSU5HICovCisKKy8qIE5vbnplcm8gZm9yIF9DTEFTU1RZUEUgbWVhbnMgdGhhdCBvcGVyYXRvciBkZWxldGUgaXMgZGVmaW5lZC4gICovCisjZGVmaW5lIFRZUEVfR0VUU19ERUxFVEUoTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmdldHNfZGVsZXRlKQorI2RlZmluZSBUWVBFX0dFVFNfUkVHX0RFTEVURShOT0RFKSAoVFlQRV9HRVRTX0RFTEVURSAoTk9ERSkgJiAxKQorCisvKiBOb256ZXJvIGlmIGBuZXcgTk9ERVt4XScgc2hvdWxkIGNhdXNlIHRoZSBhbGxvY2F0aW9uIG9mIGV4dHJhCisgICBzdG9yYWdlIHRvIGluZGljYXRlIGhvdyBtYW55IGFycmF5IGVsZW1lbnRzIGFyZSBpbiB1c2UuICAqLworI2RlZmluZSBUWVBFX1ZFQ19ORVdfVVNFU19DT09LSUUoTk9ERSkJCQlcCisgIChDTEFTU19UWVBFX1AgKE5PREUpCQkJCQlcCisgICAmJiBMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT52ZWNfbmV3X3VzZXNfY29va2llKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhpcyBfQ0xBU1NUWVBFIG5vZGUgZGVmaW5lcyB3YXlzIG9mIGNvbnZlcnRpbmcKKyAgIGl0c2VsZiB0byBvdGhlciB0eXBlcy4gICovCisjZGVmaW5lIFRZUEVfSEFTX0NPTlZFUlNJT04oTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aC5oYXNfdHlwZV9jb252ZXJzaW9uKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgTk9ERSAoYSBjbGFzcyB0eXBlKSBoYXMgYSBkZWZhdWx0IGNvbnN0cnVjdG9yIC0tCisgICBidXQgdGhhdCBpdCBoYXMgbm90IHlldCBiZWVuIGRlY2xhcmVkLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0xBWllfREVGQVVMVF9DVE9SKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmxhenlfZGVmYXVsdF9jdG9yKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgTk9ERSAoYSBjbGFzcyB0eXBlKSBoYXMgYSBjb3B5IGNvbnN0cnVjdG9yIC0tCisgICBidXQgdGhhdCBpdCBoYXMgbm90IHlldCBiZWVuIGRlY2xhcmVkLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0xBWllfQ09QWV9DVE9SKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmxhenlfY29weV9jdG9yKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgTk9ERSAoYSBjbGFzcyB0eXBlKSBoYXMgYSBtb3ZlIGNvbnN0cnVjdG9yIC0tCisgICBidXQgdGhhdCBpdCBoYXMgbm90IHlldCBiZWVuIGRlY2xhcmVkLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0xBWllfTU9WRV9DVE9SKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmxhenlfbW92ZV9jdG9yKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgTk9ERSAoYSBjbGFzcyB0eXBlKSBoYXMgYW4gYXNzaWdubWVudCBvcGVyYXRvcgorICAgLS0gYnV0IHRoYXQgaXQgaGFzIG5vdCB5ZXQgYmVlbiBkZWNsYXJlZC4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MQVpZX0NPUFlfQVNTSUdOKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmxhenlfY29weV9hc3NpZ24pCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCBOT0RFIChhIGNsYXNzIHR5cGUpIGhhcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yCisgICAtLSBidXQgdGhhdCBpdCBoYXMgbm90IHlldCBiZWVuIGRlY2xhcmVkLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0xBWllfTU9WRV9BU1NJR04oTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bGF6eV9tb3ZlX2Fzc2lnbikKKworLyogTm9uemVybyBtZWFucyB0aGF0IE5PREUgKGEgY2xhc3MgdHlwZSkgaGFzIGEgZGVzdHJ1Y3RvciAtLSBidXQgdGhhdAorICAgaXQgaGFzIG5vdCB5ZXQgYmVlbiBkZWNsYXJlZC4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MQVpZX0RFU1RSVUNUT1IoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bGF6eV9kZXN0cnVjdG9yKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgTk9ERSAoYSBjbGFzcyB0eXBlKSBpcyBmaW5hbCAqLworI2RlZmluZSBDTEFTU1RZUEVfRklOQUwoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aXNfZmluYWwpCisKKworLyogTm9uemVybyBtZWFucyB0aGF0IHRoaXMgX0NMQVNTVFlQRSBub2RlIG92ZXJsb2FkcyBvcGVyYXRvcj0oWCYpLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfQ09QWV9BU1NJR04oTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmhhc19jb3B5X2Fzc2lnbikKKworLyogVHJ1ZSBpZmYgdGhlIGNsYXNzIHR5cGUgTk9ERSBoYXMgYW4gIm9wZXJhdG9yID0iIHdob3NlIHBhcmFtZXRlcgorICAgaGFzIGEgcGFyYW1ldGVyIG9mIHR5cGUgImNvbnN0IFgmIi4gICovCisjZGVmaW5lIFRZUEVfSEFTX0NPTlNUX0NPUFlfQVNTSUdOKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmguaGFzX2NvbnN0X2NvcHlfYXNzaWduKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhpcyBfQ0xBU1NUWVBFIG5vZGUgaGFzIGFuIFgoWCYpIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfQ09QWV9DVE9SKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oLmhhc19jb3B5X2N0b3IpCisjZGVmaW5lIFRZUEVfSEFTX0NPTlNUX0NPUFlfQ1RPUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oYXNfY29uc3RfY29weV9jdG9yKQorCisvKiBOb256ZXJvIGlmIHRoaXMgY2xhc3MgaGFzIGFuIFgoaW5pdGlhbGl6ZXJfbGlzdDxUPikgY29uc3RydWN0b3IuICAqLworI2RlZmluZSBUWVBFX0hBU19MSVNUX0NUT1IoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aGFzX2xpc3RfY3RvcikKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGhhcyBhIGNvbnN0ZXhwciBjb25zdHJ1Y3RvciBvdGhlciB0aGFuIGEgY29weS9tb3ZlCisgICBjb25zdHJ1Y3Rvci4gIE5vdGUgdGhhdCBhIGNsYXNzIGNhbiBoYXZlIGNvbnN0ZXhwciBjb25zdHJ1Y3RvcnMgZm9yCisgICBzdGF0aWMgaW5pdGlhbGl6YXRpb24gZXZlbiBpZiBpdCBpc24ndCBhIGxpdGVyYWwgY2xhc3MuICAqLworI2RlZmluZSBUWVBFX0hBU19DT05TVEVYUFJfQ1RPUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oYXNfY29uc3RleHByX2N0b3IpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBjbGFzcyBkZWZpbmVzIGFuIG92ZXJsb2FkZWQgb3BlcmF0b3IgbmV3LiAgKEFuCisgICBvcGVyYXRvciBuZXcgW10gZG9lc24ndCBjb3VudC4pICAqLworI2RlZmluZSBUWVBFX0hBU19ORVdfT1BFUkFUT1IoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aGFzX25ldykKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGRlZmluZXMgYW4gb3ZlcmxvYWRlZCBvcGVyYXRvciBuZXdbXS4gICovCisjZGVmaW5lIFRZUEVfSEFTX0FSUkFZX05FV19PUEVSQVRPUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oYXNfYXJyYXlfbmV3KQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhpcyB0eXBlIGlzIGJlaW5nIGRlZmluZWQuICBJLmUuLCB0aGUgbGVmdCBicmFjZQorICAgc3RhcnRpbmcgdGhlIGRlZmluaXRpb24gb2YgdGhpcyB0eXBlIGhhcyBiZWVuIHNlZW4uICAqLworI2RlZmluZSBUWVBFX0JFSU5HX0RFRklORUQoTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmJlaW5nX2RlZmluZWQpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIHR5cGUgaXMgZWl0aGVyIGNvbXBsZXRlIG9yIGJlaW5nIGRlZmluZWQsIHNvIHdlCisgICBjYW4gZG8gbG9va3VwIGluIGl0LiAgKi8KKyNkZWZpbmUgQ09NUExFVEVfT1JfT1BFTl9UWVBFX1AoTk9ERSkgXAorICAoQ09NUExFVEVfVFlQRV9QIChOT0RFKSB8fCAoQ0xBU1NfVFlQRV9QIChOT0RFKSAmJiBUWVBFX0JFSU5HX0RFRklORUQgKE5PREUpKSkKKworLyogTWFyayBiaXRzIGZvciByZXBlYXRlZCBiYXNlIGNoZWNrcy4gICovCisjZGVmaW5lIFRZUEVfTUFSS0VEX1AoTk9ERSkgVFJFRV9MQU5HX0ZMQUdfNiAoVFlQRV9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgdGhlIGNsYXNzIE5PREUgaGFzIG11bHRpcGxlIHBhdGhzIHRvIHRoZSBzYW1lICh2aXJ0dWFsKQorICAgYmFzZSBvYmplY3QuICAqLworI2RlZmluZSBDTEFTU1RZUEVfRElBTU9ORF9TSEFQRURfUChOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0soTk9ERSktPmRpYW1vbmRfc2hhcGVkKQorCisvKiBOb256ZXJvIGlmIHRoZSBjbGFzcyBOT0RFIGhhcyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgYmFzZQorICAgdHlwZS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9SRVBFQVRFRF9CQVNFX1AoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLKE5PREUpLT5yZXBlYXRlZF9iYXNlKQorCisvKiBUaGUgbWVtYmVyIGZ1bmN0aW9uIHdpdGggd2hpY2ggdGhlIHZ0YWJsZSB3aWxsIGJlIGVtaXR0ZWQ6CisgICB0aGUgZmlyc3Qgbm9uaW5saW5lIG5vbi1wdXJlLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9uLiAgTlVMTF9UUkVFCisgICBpZiB0aGVyZSBpcyBubyBrZXkgZnVuY3Rpb24gb3IgaWYgdGhpcyBpcyBhIGNsYXNzIHRlbXBsYXRlICovCisjZGVmaW5lIENMQVNTVFlQRV9LRVlfTUVUSE9EKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5rZXlfbWV0aG9kKQorCisvKiBWZWN0b3IgbWVtYmVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgY2xhc3MuICBFYWNoIGVsZW1lbnQgaXMKKyAgIGVpdGhlciBhIEZVTkNUSU9OX0RFQ0wsIGEgVEVNUExBVEVfREVDTCwgb3IgYW4gT1ZFUkxPQUQuICBBbGwKKyAgIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgZW5kIHVwIGluIHRoZSBzYW1lIHNsb3QuICBUaGUgZmlyc3QKKyAgIHR3byBlbGVtZW50cyBhcmUgZm9yIGNvbnN0cnVjdG9ycywgYW5kIGRlc3RydWN0b3JzLCByZXNwZWN0aXZlbHkuCisgICBBbGwgdGVtcGxhdGUgY29udmVyc2lvbiBvcGVyYXRvcnMgdG8gaW5uZXJtb3N0IHRlbXBsYXRlIGRlcGVuZGVudAorICAgdHlwZXMgYXJlIG92ZXJsb2FkZWQgb24gdGhlIG5leHQgc2xvdCwgaWYgdGhleSBleGlzdC4gIE5vdGUsIHRoZQorICAgbmFtZXMgZm9yIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIG5vdCBhbGwgYmUgdGhlIHNhbWUuICBUaGUKKyAgIG5vbi10ZW1wbGF0ZSBjb252ZXJzaW9uIG9wZXJhdG9ycyAmIHRlbXBsYXRlZCBjb252ZXJzaW9ucyB0bworICAgbm9uLWlubmVybW9zdCB0ZW1wbGF0ZSB0eXBlcyBhcmUgbmV4dCwgZm9sbG93ZWQgYnkgb3JkaW5hcnkgbWVtYmVyCisgICBmdW5jdGlvbnMuICBUaGVyZSBtYXkgYmUgZW1wdHkgZW50cmllcyBhdCB0aGUgZW5kIG9mIHRoZSB2ZWN0b3IuCisgICBUaGUgY29udmVyc2lvbiBvcGVyYXRvcnMgYXJlIHVuc29ydGVkLiBUaGUgb3JkaW5hcnkgbWVtYmVyCisgICBmdW5jdGlvbnMgYXJlIHNvcnRlZCwgb25jZSB0aGUgY2xhc3MgaXMgY29tcGxldGUuICAqLworI2RlZmluZSBDTEFTU1RZUEVfTUVUSE9EX1ZFQyhOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bWV0aG9kcykKKworLyogRm9yIGNsYXNzIHRlbXBsYXRlcywgdGhpcyBpcyBhIFRSRUVfTElTVCBvZiBhbGwgbWVtYmVyIGRhdGEsCisgICBmdW5jdGlvbnMsIHR5cGVzLCBhbmQgZnJpZW5kcyBpbiB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24uCisgICBUaGUgVFJFRV9QVVJQT1NFIG9mIGVhY2ggVFJFRV9MSVNUIGlzIE5VTExfVFJFRSBmb3IgYSBmcmllbmQsCisgICBhbmQgdGhlIFJFQ09SRF9UWVBFIGZvciB0aGUgY2xhc3MgdGVtcGxhdGUgb3RoZXJ3aXNlLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0RFQ0xfTElTVChOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+ZGVjbF9saXN0KQorCisvKiBUaGUgc2xvdCBpbiB0aGUgQ0xBU1NUWVBFX01FVEhPRF9WRUMgd2hlcmUgY29uc3RydWN0b3JzIGdvLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0NPTlNUUlVDVE9SX1NMT1QgMAorCisvKiBUaGUgc2xvdCBpbiB0aGUgQ0xBU1NUWVBFX01FVEhPRF9WRUMgd2hlcmUgZGVzdHJ1Y3RvcnMgZ28uICAqLworI2RlZmluZSBDTEFTU1RZUEVfREVTVFJVQ1RPUl9TTE9UIDEKKworLyogVGhlIGZpcnN0IHNsb3QgaW4gdGhlIENMQVNTVFlQRV9NRVRIT0RfVkVDIHdoZXJlIGNvbnZlcnNpb24KKyAgIG9wZXJhdG9ycyBjYW4gYXBwZWFyLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0ZJUlNUX0NPTlZFUlNJT05fU0xPVCAyCisKKy8qIEEgRlVOQ1RJT05fREVDTCBvciBPVkVSTE9BRCBmb3IgdGhlIGNvbnN0cnVjdG9ycyBmb3IgTk9ERS4gIFRoZXNlCisgICBhcmUgdGhlIGNvbnN0cnVjdG9ycyB0aGF0IHRha2UgYW4gaW4tY2hhcmdlIHBhcmFtZXRlci4gICovCisjZGVmaW5lIENMQVNTVFlQRV9DT05TVFJVQ1RPUlMoTk9ERSkgXAorICAoKCpDTEFTU1RZUEVfTUVUSE9EX1ZFQyAoTk9ERSkpW0NMQVNTVFlQRV9DT05TVFJVQ1RPUl9TTE9UXSkKKworLyogQSBGVU5DVElPTl9ERUNMIGZvciB0aGUgZGVzdHJ1Y3RvciBmb3IgTk9ERS4gIFRoZXNlIGFyZSB0aGUKKyAgIGRlc3RydWN0b3JzIHRoYXQgdGFrZSBhbiBpbi1jaGFyZ2UgcGFyYW1ldGVyLiAgSWYKKyAgIENMQVNTVFlQRV9MQVpZX0RFU1RSVUNUT1IgaXMgdHJ1ZSwgdGhlbiB0aGlzIGVudHJ5IHdpbGwgYmUgTlVMTAorICAgdW50aWwgdGhlIGRlc3RydWN0b3IgaXMgY3JlYXRlZCB3aXRoIGxhemlseV9kZWNsYXJlX2ZuLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0RFU1RSVUNUT1JTKE5PREUpIFwKKyAgKENMQVNTVFlQRV9NRVRIT0RfVkVDIChOT0RFKQkJCQkJCSAgICAgIFwKKyAgID8gKCpDTEFTU1RZUEVfTUVUSE9EX1ZFQyAoTk9ERSkpW0NMQVNTVFlQRV9ERVNUUlVDVE9SX1NMT1RdCQkgICAgICBcCisgICA6IE5VTExfVFJFRSkKKworLyogQSBkaWN0aW9uYXJ5IG9mIHRoZSBuZXN0ZWQgdXNlci1kZWZpbmVkLXR5cGVzIChjbGFzcy10eXBlcywgb3IgZW51bXMpCisgICBmb3VuZCB3aXRoaW4gdGhpcyBjbGFzcy4gIFRoaXMgdGFibGUgaW5jbHVkZXMgbmVzdGVkIG1lbWJlciBjbGFzcworICAgdGVtcGxhdGVzLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX05FU1RFRF9VVERTKE5PREUpIFwKKyAgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5uZXN0ZWRfdWR0cykKKworLyogTm9uemVybyBpZiBOT0RFIGhhcyBhIHByaW1hcnkgYmFzZSBjbGFzcywgaS5lLiwgYSBiYXNlIGNsYXNzIHdpdGgKKyAgIHdoaWNoIGl0IHNoYXJlcyB0aGUgdmlydHVhbCBmdW5jdGlvbiB0YWJsZSBwb2ludGVyLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0hBU19QUklNQVJZX0JBU0VfUChOT0RFKSBcCisgIChDTEFTU1RZUEVfUFJJTUFSWV9CSU5GTyAoTk9ERSkgIT0gTlVMTF9UUkVFKQorCisvKiBJZiBub24tTlVMTCwgdGhpcyBpcyB0aGUgYmluZm8gZm9yIHRoZSBwcmltYXJ5IGJhc2UgY2xhc3MsIGkuZS4sCisgICB0aGUgYmFzZSBjbGFzcyB3aGljaCBjb250YWlucyB0aGUgdmlydHVhbCBmdW5jdGlvbiB0YWJsZSBwb2ludGVyCisgICBmb3IgdGhpcyBjbGFzcy4gICovCisjZGVmaW5lIENMQVNTVFlQRV9QUklNQVJZX0JJTkZPKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPnByaW1hcnlfYmFzZSkKKworLyogQSB2ZWN0b3Igb2YgQklORk9zIGZvciB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCB2aXJ0dWFsIGJhc2UgY2xhc3NlcworICAgdGhhdCB0aGlzIHR5cGUgdXNlcyBpbiBhIHBvc3Qtb3JkZXIgZGVwdGgtZmlyc3QgbGVmdC10by1yaWdodAorICAgb3JkZXIuICAoSW4gb3RoZXIgd29yZHMsIHRoZXNlIGJhc2VzIGFwcGVhciBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5CisgICBzaG91bGQgYmUgaW5pdGlhbGl6ZWQuKSAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1ZCQVNFQ0xBU1NFUyhOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+dmJhc2VzKQorCisvKiBUaGUgdHlwZSBjb3JyZXNwb25kaW5nIHRvIE5PREUgd2hlbiBOT0RFIGlzIHVzZWQgYXMgYSBiYXNlIGNsYXNzLAorICAgaS5lLiwgTk9ERSB3aXRob3V0IHZpcnR1YWwgYmFzZSBjbGFzc2VzLiAgKi8KKworI2RlZmluZSBDTEFTU1RZUEVfQVNfQkFTRShOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+YXNfYmFzZSkKKworLyogVHJ1ZSBpZmYgTk9ERSBpcyB0aGUgQ0xBU1NUWVBFX0FTX0JBU0UgdmVyc2lvbiBvZiBzb21lIHR5cGUuICAqLworCisjZGVmaW5lIElTX0ZBS0VfQkFTRV9UWVBFKE5PREUpCQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IFJFQ09SRF9UWVBFCQkJCVwKKyAgICYmIFRZUEVfQ09OVEVYVCAoTk9ERSkgJiYgQ0xBU1NfVFlQRV9QIChUWVBFX0NPTlRFWFQgKE5PREUpKQlcCisgICAmJiBDTEFTU1RZUEVfQVNfQkFTRSAoVFlQRV9DT05URVhUIChOT0RFKSkgPT0gKE5PREUpKQorCisvKiBUaGVzZSBhcmUgdGhlIHNpemUgYW5kIGFsaWdubWVudCBvZiB0aGUgdHlwZSB3aXRob3V0IGl0cyB2aXJ0dWFsCisgICBiYXNlIGNsYXNzZXMsIGZvciB3aGVuIHdlIHVzZSB0aGlzIHR5cGUgYXMgYSBiYXNlIGl0c2VsZi4gICovCisjZGVmaW5lIENMQVNTVFlQRV9TSVpFKE5PREUpIFRZUEVfU0laRSAoQ0xBU1NUWVBFX0FTX0JBU0UgKE5PREUpKQorI2RlZmluZSBDTEFTU1RZUEVfU0laRV9VTklUKE5PREUpIFRZUEVfU0laRV9VTklUIChDTEFTU1RZUEVfQVNfQkFTRSAoTk9ERSkpCisjZGVmaW5lIENMQVNTVFlQRV9BTElHTihOT0RFKSBUWVBFX0FMSUdOIChDTEFTU1RZUEVfQVNfQkFTRSAoTk9ERSkpCisjZGVmaW5lIENMQVNTVFlQRV9VU0VSX0FMSUdOKE5PREUpIFRZUEVfVVNFUl9BTElHTiAoQ0xBU1NUWVBFX0FTX0JBU0UgKE5PREUpKQorCisvKiBUaGUgYWxpZ25tZW50IG9mIE5PREUsIHdpdGhvdXQgaXRzIHZpcnR1YWwgYmFzZXMsIGluIGJ5dGVzLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0FMSUdOX1VOSVQoTk9ERSkgXAorICAoQ0xBU1NUWVBFX0FMSUdOIChOT0RFKSAvIEJJVFNfUEVSX1VOSVQpCisKKy8qIFRydWUgaWYgdGhpcyBhIEphdmEgaW50ZXJmYWNlIHR5cGUsIGRlY2xhcmVkIHdpdGgKKyAgICdfX2F0dHJpYnV0ZV9fICgoamF2YV9pbnRlcmZhY2UpKScuICAqLworI2RlZmluZSBUWVBFX0pBVkFfSU5URVJGQUNFKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmphdmFfaW50ZXJmYWNlKQorCisvKiBBIHZlYzx0cmVlPiBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyB3aGljaCBjYW5ub3QgYmUgaW5oZXJpdGVkIGJ5CisgICBkZXJpdmVkIGNsYXNzZXMuICBXaGVuIGRlcml2aW5nIGZyb20gdGhpcyB0eXBlLCB0aGUgZGVyaXZlZAorICAgY2xhc3MgbXVzdCBwcm92aWRlIGl0cyBvd24gZGVmaW5pdGlvbiBmb3IgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMuICAqLworI2RlZmluZSBDTEFTU1RZUEVfUFVSRV9WSVJUVUFMUyhOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5wdXJlX3ZpcnR1YWxzKQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhpcyB0eXBlIGlzIGFuIGFic3RyYWN0IGNsYXNzIHR5cGUuICAqLworI2RlZmluZSBBQlNUUkFDVF9DTEFTU19UWVBFX1AoTk9ERSkgXAorICAoQ0xBU1NfVFlQRV9QIChOT0RFKSAmJiBDTEFTU1RZUEVfUFVSRV9WSVJUVUFMUyhOT0RFKSkKKworLyogTm9uemVybyBtZWFucyB0aGF0IHRoaXMgdHlwZSBoYXMgYW4gWCgpIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfREVGQVVMVF9DT05TVFJVQ1RPUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oLmhhc19kZWZhdWx0X2N0b3IpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIHR5cGUgY29udGFpbnMgYSBtdXRhYmxlIG1lbWJlci4gICovCisjZGVmaW5lIENMQVNTVFlQRV9IQVNfTVVUQUJMRShOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aGFzX211dGFibGUpCisjZGVmaW5lIFRZUEVfSEFTX01VVEFCTEVfUChOT0RFKSAoY3BfaGFzX211dGFibGVfcCAoTk9ERSkpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIGNsYXNzIHR5cGUgaXMgbm90IFBPRCBmb3IgdGhlIHB1cnBvc2Ugb2YgbGF5b3V0CisgICAoYXMgZGVmaW5lZCBpbiB0aGUgQUJJKS4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhbmd1YWdlJ3MgUE9ELiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX05PTl9MQVlPVVRfUE9EX1AoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bm9uX3BvZF9jbGFzcykKKworLyogTm9uemVybyBtZWFucyB0aGF0IHRoaXMgY2xhc3MgdHlwZSBpcyBhIG5vbi1zdGFuZGFyZC1sYXlvdXQgY2xhc3MuICAqLworI2RlZmluZSBDTEFTU1RZUEVfTk9OX1NURF9MQVlPVVQoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+bm9uX3N0ZF9sYXlvdXQpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIGNsYXNzIGNvbnRhaW5zIHBvZCB0eXBlcyB3aG9zZSBkZWZhdWx0CisgICBpbml0aWFsaXphdGlvbiBpcyBub3QgYSB6ZXJvIGluaXRpYWxpemF0aW9uIChuYW1lbHksIHBvaW50ZXJzIHRvCisgICBkYXRhIG1lbWJlcnMpLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX05PTl9aRVJPX0lOSVRfUChOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5ub25femVyb19pbml0KQorCisvKiBOb256ZXJvIGlmIHRoaXMgY2xhc3MgaXMgImVtcHR5IiBpbiB0aGUgc2Vuc2Ugb2YgdGhlIEMrKyBBQkkuICAqLworI2RlZmluZSBDTEFTU1RZUEVfRU1QVFlfUChOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5lbXB0eV9wKQorCisvKiBOb256ZXJvIGlmIHRoaXMgY2xhc3MgaXMgIm5lYXJseSBlbXB0eSIsIGkuZS4sIGNvbnRhaW5zIG9ubHkgYQorICAgdmlydHVhbCBmdW5jdGlvbiB0YWJsZSBwb2ludGVyLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX05FQVJMWV9FTVBUWV9QKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPm5lYXJseV9lbXB0eV9wKQorCisvKiBOb256ZXJvIGlmIHRoaXMgY2xhc3MgY29udGFpbnMgYW4gZW1wdHkgc3Vib2JqZWN0LiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0NPTlRBSU5TX0VNUFRZX0NMQVNTX1AoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+Y29udGFpbnNfZW1wdHlfY2xhc3NfcCkKKworLyogQSBsaXN0IG9mIGNsYXNzIHR5cGVzIG9mIHdoaWNoIHRoaXMgdHlwZSBpcyBhIGZyaWVuZC4gIFRoZQorICAgVFJFRV9WQUxVRSBpcyBub3JtYWxseSBhIFRZUEUsIGJ1dCB3aWxsIGJlIGEgVEVNUExBVEVfREVDTCBpbiB0aGUKKyAgIGNhc2Ugb2YgYSB0ZW1wbGF0ZSBmcmllbmQuICAqLworI2RlZmluZSBDTEFTU1RZUEVfRlJJRU5EX0NMQVNTRVMoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+ZnJpZW5kX2NsYXNzZXMpCisKKy8qIEEgbGlzdCBvZiB0aGUgY2xhc3NlcyB3aGljaCBncmFudCBmcmllbmRzaGlwIHRvIHRoaXMgY2xhc3MuICAqLworI2RlZmluZSBDTEFTU1RZUEVfQkVGUklFTkRJTkdfQ0xBU1NFUyhOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5iZWZyaWVuZGluZ19jbGFzc2VzKQorCisvKiBUaGUgYXNzb2NpYXRlZCBMQU1CREFfRVhQUiB0aGF0IG1hZGUgdGhpcyBjbGFzcy4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MQU1CREFfRVhQUihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5sYW1iZGFfZXhwcikKKy8qIFRoZSBleHRyYSBtYW5nbGluZyBzY29wZSBmb3IgdGhpcyBjbG9zdXJlIHR5cGUuICAqLworI2RlZmluZSBMQU1CREFfVFlQRV9FWFRSQV9TQ09QRShOT0RFKSBcCisgIChMQU1CREFfRVhQUl9FWFRSQV9TQ09QRSAoQ0xBU1NUWVBFX0xBTUJEQV9FWFBSIChOT0RFKSkpCisKKy8qIFNheSB3aGV0aGVyIHRoaXMgbm9kZSB3YXMgZGVjbGFyZWQgYXMgYSAiY2xhc3MiIG9yIGEgInN0cnVjdCIuICAqLworI2RlZmluZSBDTEFTU1RZUEVfREVDTEFSRURfQ0xBU1MoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+ZGVjbGFyZWRfY2xhc3MpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBjbGFzcyBoYXMgY29uc3QgbWVtYmVycworICAgd2hpY2ggaGF2ZSBubyBzcGVjaWZpZWQgaW5pdGlhbGl6YXRpb24uICAqLworI2RlZmluZSBDTEFTU1RZUEVfUkVBRE9OTFlfRklFTERTX05FRURfSU5JVChOT0RFKQlcCisgIChUWVBFX0xBTkdfU1BFQ0lGSUMgKE5PREUpCQkJCVwKKyAgID8gTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aC5jb25zdF9uZWVkc19pbml0IDogMCkKKyNkZWZpbmUgU0VUX0NMQVNTVFlQRV9SRUFET05MWV9GSUVMRFNfTkVFRF9JTklUKE5PREUsIFZBTFVFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oLmNvbnN0X25lZWRzX2luaXQgPSAoVkFMVUUpKQorCisvKiBOb256ZXJvIGlmIHRoaXMgY2xhc3MgaGFzIHJlZiBtZW1iZXJzCisgICB3aGljaCBoYXZlIG5vIHNwZWNpZmllZCBpbml0aWFsaXphdGlvbi4gICovCisjZGVmaW5lIENMQVNTVFlQRV9SRUZfRklFTERTX05FRURfSU5JVChOT0RFKQkJXAorICAoVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKQkJCQlcCisgICA/IExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmgucmVmX25lZWRzX2luaXQgOiAwKQorI2RlZmluZSBTRVRfQ0xBU1NUWVBFX1JFRl9GSUVMRFNfTkVFRF9JTklUKE5PREUsIFZBTFVFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oLnJlZl9uZWVkc19pbml0ID0gKFZBTFVFKSkKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGlzIGluY2x1ZGVkIGZyb20gYSBoZWFkZXIgZmlsZSB3aGljaCBlbXBsb3lzCisgICBgI3ByYWdtYSBpbnRlcmZhY2UnLCBhbmQgaXQgaXMgbm90IGluY2x1ZGVkIGluIGl0cyBpbXBsZW1lbnRhdGlvbiBmaWxlLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX0lOVEVSRkFDRV9PTkxZKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmludGVyZmFjZV9vbmx5KQorCisvKiBUcnVlIGlmIHdlIGhhdmUgYWxyZWFkeSBkZXRlcm1pbmVkIHdoZXRoZXIgb3Igbm90IHZ0YWJsZXMsIFZUVHMsCisgICB0eXBlaW5mbywgYW5kIG90aGVyIHNpbWlsYXIgcGVyLWNsYXNzIGRhdGEgc2hvdWxkIGJlIGVtaXR0ZWQgaW4KKyAgIHRoaXMgdHJhbnNsYXRpb24gdW5pdC4gIFRoaXMgZmxhZyBkb2VzIG5vdCBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdAorICAgdGhlc2UgaXRlbXMgc2hvdWxkIGJlIGVtaXR0ZWQ7IGl0IG9ubHkgaW5kaWNhdGVzIHRoYXQgd2Uga25vdyBvbmUKKyAgIHdheSBvciB0aGUgb3RoZXIuICAqLworI2RlZmluZSBDTEFTU1RZUEVfSU5URVJGQUNFX0tOT1dOKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmludGVyZmFjZV91bmtub3duID09IDApCisvKiBUaGUgb3Bwb3NpdGUgb2YgQ0xBU1NUWVBFX0lOVEVSRkFDRV9LTk9XTi4gICovCisjZGVmaW5lIENMQVNTVFlQRV9JTlRFUkZBQ0VfVU5LTk9XTihOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5pbnRlcmZhY2VfdW5rbm93bikKKworI2RlZmluZSBTRVRfQ0xBU1NUWVBFX0lOVEVSRkFDRV9VTktOT1dOX1goTk9ERSxYKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5pbnRlcmZhY2VfdW5rbm93biA9ICEhKFgpKQorI2RlZmluZSBTRVRfQ0xBU1NUWVBFX0lOVEVSRkFDRV9VTktOT1dOKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmludGVyZmFjZV91bmtub3duID0gMSkKKyNkZWZpbmUgU0VUX0NMQVNTVFlQRV9JTlRFUkZBQ0VfS05PV04oTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aW50ZXJmYWNlX3Vua25vd24gPSAwKQorCisvKiBOb256ZXJvIGlmIGEgX0RFQ0wgbm9kZSByZXF1aXJlcyB1cyB0byBvdXRwdXQgZGVidWcgaW5mbyBmb3IgdGhpcyBjbGFzcy4gICovCisjZGVmaW5lIENMQVNTVFlQRV9ERUJVR19SRVFVRVNURUQoTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+ZGVidWdfcmVxdWVzdGVkKQorDAorLyogQWRkaXRpb25hbCBtYWNyb3MgZm9yIGluaGVyaXRhbmNlIGluZm9ybWF0aW9uLiAgKi8KKworLyogTm9uemVybyBtZWFucyB0aGF0IHRoaXMgY2xhc3MgaXMgb24gYSBwYXRoIGxlYWRpbmcgdG8gYSBuZXcgdnRhYmxlLiAgKi8KKyNkZWZpbmUgQklORk9fVlRBQkxFX1BBVEhfTUFSS0VEKE5PREUpIEJJTkZPX0ZMQUdfMSAoTk9ERSkKKworLyogTm9uemVybyBtZWFucyBCIChhIEJJTkZPKSBoYXMgaXRzIG93biB2dGFibGUuICBBbnkgY29waWVzIHdpbGwgbm90CisgICBoYXZlIHRoaXMgZmxhZyBzZXQuICAqLworI2RlZmluZSBCSU5GT19ORVdfVlRBQkxFX01BUktFRChCKSAoQklORk9fRkxBR18yIChCKSkKKworLyogQ29tcGFyZSBhIEJJTkZPX1RZUEUgd2l0aCBhbm90aGVyIHR5cGUgZm9yIGVxdWFsaXR5LiAgRm9yIGEgYmluZm8sCisgICB0aGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHVzaW5nIHNhbWVfdHlwZV9wLCBidXQKKyAgIG1lYXN1cmFibHkgZmFzdGVyLiAgQXQgbGVhc3Qgb25lIG9mIHRoZSBhcmd1bWVudHMgbXVzdCBiZSBhCisgICBCSU5GT19UWVBFLiAgVGhlIG90aGVyIGNhbiBiZSBhIEJJTkZPX1RZUEUgb3IgYSByZWd1bGFyIHR5cGUuICBJZgorICAgQklORk9fVFlQRShUKSBldmVyIHN0b3BzIGJlaW5nIHRoZSBtYWluIHZhcmlhbnQgb2YgdGhlIGNsYXNzIHRoZQorICAgYmluZm8gaXMgZm9yLCB0aGlzIG1hY3JvIG11c3QgY2hhbmdlLiAgKi8KKyNkZWZpbmUgU0FNRV9CSU5GT19UWVBFX1AoQSwgQikgKChBKSA9PSAoQikpCisKKy8qIEFueSBzdWJvYmplY3QgdGhhdCBuZWVkcyBhIG5ldyB2dGFibGUgbXVzdCBoYXZlIGEgdnB0ciBhbmQgbXVzdCBub3QKKyAgIGJlIGEgbm9uLXZpcnR1YWwgcHJpbWFyeSBiYXNlIChzaW5jZSBpdCB3b3VsZCB0aGVuIHVzZSB0aGUgdnRhYmxlIGZyb20gYQorICAgZGVyaXZlZCBjbGFzcyBhbmQgbmV2ZXIgYmVjb21lIG5vbi1wcmltYXJ5LikgICovCisjZGVmaW5lIFNFVF9CSU5GT19ORVdfVlRBQkxFX01BUktFRChCKQkJCQkJIFwKKyAgKEJJTkZPX05FV19WVEFCTEVfTUFSS0VEIChCKSA9IDEsCQkJCQkgXAorICAgZ2NjX2Fzc2VydCAoIUJJTkZPX1BSSU1BUllfUCAoQikgfHwgQklORk9fVklSVFVBTF9QIChCKSksCQkgXAorICAgZ2NjX2Fzc2VydCAoVFlQRV9WRklFTEQgKEJJTkZPX1RZUEUgKEIpKSkpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBiaW5mbyBpcyBmb3IgYSBkZXBlbmRlbnQgYmFzZSAtIG9uZSB0aGF0IHNob3VsZCBub3QKKyAgIGJlIHNlYXJjaGVkLiAgKi8KKyNkZWZpbmUgQklORk9fREVQRU5ERU5UX0JBU0VfUChOT0RFKSBCSU5GT19GTEFHXzMgKE5PREUpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBiaW5mbyBoYXMgbG9zdCBpdHMgcHJpbWFyeSBiYXNlIGJpbmZvIChiZWNhdXNlIHRoYXQKKyAgIGlzIGEgbmVhcmx5LWVtcHR5IHZpcnR1YWwgYmFzZSB0aGF0IGhhcyBiZWVuIHRha2VuIGJ5IHNvbWUgb3RoZXIKKyAgIGJhc2UgaW4gdGhlIGNvbXBsZXRlIGhpZXJhcmNoeS4gICovCisjZGVmaW5lIEJJTkZPX0xPU1RfUFJJTUFSWV9QKE5PREUpIEJJTkZPX0ZMQUdfNCAoTk9ERSkKKworLyogTm9uemVybyBpZiB0aGlzIEJJTkZPIGlzIGEgcHJpbWFyeSBiYXNlIGNsYXNzLiAgKi8KKyNkZWZpbmUgQklORk9fUFJJTUFSWV9QKE5PREUpIEJJTkZPX0ZMQUdfNShOT0RFKQorCisvKiBVc2VkIGJ5IHZhcmlvdXMgc2VhcmNoIHJvdXRpbmVzLiAgKi8KKyNkZWZpbmUgSURFTlRJRklFUl9NQVJLRUQoTk9ERSkgVFJFRV9MQU5HX0ZMQUdfMCAoTk9ERSkKKwwKKy8qIEEgdmVjPHRyZWVfcGFpcl9zPiBvZiB0aGUgdmNhbGwgaW5kaWNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsYXNzCisgICBOT0RFLiAgVGhlIFBVUlBPU0Ugb2YgZWFjaCBlbGVtZW50IGlzIGEgRlVOQ1RJT05fREVDTCBmb3IgYSB2aXJ0dWFsCisgICBmdW5jdGlvbi4gIFRoZSBWQUxVRSBpcyB0aGUgaW5kZXggaW50byB0aGUgdmlydHVhbCB0YWJsZSB3aGVyZSB0aGUKKyAgIHZjYWxsIG9mZnNldCBmb3IgdGhhdCBmdW5jdGlvbiBpcyBzdG9yZWQsIHdoZW4gTk9ERSBpcyBhIHZpcnR1YWwKKyAgIGJhc2UuICAqLworI2RlZmluZSBDTEFTU1RZUEVfVkNBTExfSU5ESUNFUyhOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT52Y2FsbF9pbmRpY2VzKQorCisvKiBUaGUgdmFyaW91cyB2dGFibGVzIGZvciB0aGUgY2xhc3MgTk9ERS4gIFRoZSBwcmltYXJ5IHZ0YWJsZSB3aWxsIGJlCisgICBmaXJzdCwgZm9sbG93ZWQgYnkgdGhlIGNvbnN0cnVjdGlvbiB2dGFibGVzIGFuZCBWVFQsIGlmIGFueS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9WVEFCTEVTKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPnZ0YWJsZXMpCisKKy8qIFRoZSBzdGQ6OnR5cGVfaW5mbyB2YXJpYWJsZSByZXByZXNlbnRpbmcgdGhpcyBjbGFzcywgb3IgTlVMTCBpZiBubworICAgc3VjaCB2YXJpYWJsZSBoYXMgYmVlbiBjcmVhdGVkLiAgVGhpcyBmaWVsZCBpcyBvbmx5IHNldCBmb3IgdGhlCisgICBUWVBFX01BSU5fVkFSSUFOVCBvZiB0aGUgY2xhc3MuICAqLworI2RlZmluZSBDTEFTU1RZUEVfVFlQRUlORk9fVkFSKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPnR5cGVpbmZvX3ZhcikKKworLyogQWNjZXNzb3IgbWFjcm9zIGZvciB0aGUgQklORk9fVklSVFVBTFMgbGlzdC4gICovCisKKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgYnkgd2hpY2ggdG8gYWRqdXN0IHRoZSBgdGhpcycgcG9pbnRlciB3aGVuCisgICBjYWxsaW5nIHRoaXMgdmlydHVhbCBmdW5jdGlvbi4gIFN1YnRyYWN0IHRoaXMgdmFsdWUgZnJvbSB0aGUgdGhpcworICAgcG9pbnRlci4gQWx3YXlzIG5vbi1OVUxMLCBtaWdodCBiZSBjb25zdGFudCB6ZXJvIHRob3VnaC4gICovCisjZGVmaW5lIEJWX0RFTFRBKE5PREUpIChUUkVFX1BVUlBPU0UgKE5PREUpKQorCisvKiBJZiBub24tTlVMTCwgdGhlIHZ0YWJsZSBpbmRleCBhdCB3aGljaCB0byBmaW5kIHRoZSB2Y2FsbCBvZmZzZXQKKyAgIHdoZW4gY2FsbGluZyB0aGlzIHZpcnR1YWwgZnVuY3Rpb24uICBBZGQgdGhlIHZhbHVlIGF0IHRoYXQgdnRhYmxlCisgICBpbmRleCB0byB0aGUgdGhpcyBwb2ludGVyLiAgKi8KKyNkZWZpbmUgQlZfVkNBTExfSU5ERVgoTk9ERSkgKFRSRUVfVFlQRSAoTk9ERSkpCisKKy8qIFRoZSBmdW5jdGlvbiB0byBjYWxsLiAgKi8KKyNkZWZpbmUgQlZfRk4oTk9ERSkgKFRSRUVfVkFMVUUgKE5PREUpKQorCisvKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGVudHJ5IGlzIGZvciBhIGxvc3QgcHJpbWFyeSB2aXJ0dWFsIGJhc2UuICAqLworI2RlZmluZSBCVl9MT1NUX1BSSU1BUlkoTk9ERSkgKFRSRUVfTEFOR19GTEFHXzAgKE5PREUpKQorDAorLyogRm9yIEZVTkNUSU9OX1RZUEUgb3IgTUVUSE9EX1RZUEUsIGEgbGlzdCBvZiB0aGUgZXhjZXB0aW9ucyB0aGF0CisgICB0aGlzIHR5cGUgY2FuIHJhaXNlLiAgRWFjaCBUUkVFX1ZBTFVFIGlzIGEgX1RZUEUuICBUaGUgVFJFRV9WQUxVRQorICAgd2lsbCBiZSBOVUxMX1RSRUUgdG8gaW5kaWNhdGUgYSB0aHJvdyBzcGVjaWZpY2F0aW9uIG9mIGAoKScsIG9yCisgICBubyBleGNlcHRpb25zIGFsbG93ZWQuICBGb3IgYSBub2V4Y2VwdCBzcGVjaWZpY2F0aW9uLCBUUkVFX1ZBTFVFCisgICBpcyBOVUxMX1RSRUUgYW5kIFRSRUVfUFVSUE9TRSBpcyB0aGUgY29uc3RhbnQtZXhwcmVzc2lvbi4gIEZvcgorICAgYSBkZWZlcnJlZCBub2V4Y2VwdC1zcGVjaWZpY2F0aW9uLCBUUkVFX1BVUlBPU0UgaXMgYSBERUZFUlJFRF9OT0VYQ0VQVAorICAgKGZvciB0ZW1wbGF0ZXMpIG9yIGFuIE9WRVJMT0FEIGxpc3Qgb2YgZnVuY3Rpb25zIChmb3IgaW1wbGljaXRseQorICAgZGVjbGFyZWQgZnVuY3Rpb25zKS4gICovCisjZGVmaW5lIFRZUEVfUkFJU0VTX0VYQ0VQVElPTlMoTk9ERSkgVFlQRV9MQU5HX1NMT1RfMSAoTk9ERSkKKworLyogRm9yIEZVTkNUSU9OX1RZUEUgb3IgTUVUSE9EX1RZUEUsIHJldHVybiAxIGlmZiBpdCBpcyBkZWNsYXJlZCBgdGhyb3coKScKKyAgIG9yIG5vZXhjZXB0KHRydWUpLiAgKi8KKyNkZWZpbmUgVFlQRV9OT1RIUk9XX1AoTk9ERSkgbm90aHJvd19zcGVjX3AgKFRZUEVfUkFJU0VTX0VYQ0VQVElPTlMgKE5PREUpKQorCisvKiBGb3IgRlVOQ1RJT05fVFlQRSBvciBNRVRIT0RfVFlQRSwgdHJ1ZSBpZiBOT0RFIGlzIG5vZXhjZXB0LiAgVGhpcyBpcyB0aGUKKyAgIGNhc2UgZm9yIHRoaW5ncyBkZWNsYXJlZCBub2V4Y2VwdCh0cnVlKSBhbmQsIHdpdGggLWZub3Rocm93LW9wdCwgZm9yCisgICB0aHJvdygpIGZ1bmN0aW9ucy4gICovCisjZGVmaW5lIFRZUEVfTk9FWENFUFRfUChOT0RFKSB0eXBlX25vZXhjZXB0X3AgKE5PREUpCisKKy8qIFRoZSBiaW5kaW5nIGxldmVsIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFtZXNwYWNlLiAgKi8KKyNkZWZpbmUgTkFNRVNQQUNFX0xFVkVMKE5PREUpIFwKKyAgKExBTkdfREVDTF9OU19DSEVDSyAoTk9ERSktPmxldmVsKQorDAorLyogRmxhZ3Mgc2hhcmVkIGJ5IGFsbCBmb3JtcyBvZiBERUNMX0xBTkdfU1BFQ0lGSUMuCisKKyAgIFNvbWUgb2YgdGhlIGZsYWdzIGxpdmUgaGVyZSBvbmx5IHRvIG1ha2UgbGFuZ19kZWNsX21pbi9mbiBzbWFsbGVyLiAgRG8KKyAgIG5vdCBtYWtlIHRoaXMgc3RydWN0IGxhcmdlciB0aGFuIDMyIGJpdHM7IGluc3RlYWQsIG1ha2Ugc2VsIHNtYWxsZXIuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX2RlY2xfYmFzZSB7CisgIHVuc2lnbmVkIHNlbGVjdG9yIDogMTY7ICAgLyogTGFyZ2VyIHRoYW4gbmVjZXNzYXJ5IGZvciBmYXN0ZXIgYWNjZXNzLiAgKi8KKyAgRU5VTV9CSVRGSUVMRChsYW5ndWFnZXMpIGxhbmd1YWdlIDogNDsKKyAgdW5zaWduZWQgdXNlX3RlbXBsYXRlIDogMjsKKyAgdW5zaWduZWQgbm90X3JlYWxseV9leHRlcm4gOiAxOwkgICAvKiB2YXIgb3IgZm4gKi8KKyAgdW5zaWduZWQgaW5pdGlhbGl6ZWRfaW5fY2xhc3MgOiAxOwkgICAvKiB2YXIgb3IgZm4gKi8KKyAgdW5zaWduZWQgcmVwb19hdmFpbGFibGVfcCA6IDE7CSAgIC8qIHZhciBvciBmbiAqLworICB1bnNpZ25lZCB0aHJlYWRwcml2YXRlX29yX2RlbGV0ZWRfcCA6IDE7IC8qIHZhciBvciBmbiAqLworICB1bnNpZ25lZCBhbnRpY2lwYXRlZF9wIDogMTsJCSAgIC8qIGZuLCB0eXBlIG9yIHRlbXBsYXRlICovCisgIHVuc2lnbmVkIGZyaWVuZF9hdHRyIDogMTsJCSAgIC8qIGZuLCB0eXBlIG9yIHRlbXBsYXRlICovCisgIHVuc2lnbmVkIHRlbXBsYXRlX2NvbnZfcCA6IDE7CQkgICAvKiB2YXIgb3IgdGVtcGxhdGUgKi8KKyAgdW5zaWduZWQgb2RyX3VzZWQgOiAxOwkJICAgLyogdmFyIG9yIGZuICovCisgIHVuc2lnbmVkIHUyc2VsIDogMTsKKyAgLyogMSBzcGFyZSBiaXQgKi8KK307CisKKy8qIFRydWUgZm9yIERFQ0wgY29kZXMgd2hpY2ggaGF2ZSB0ZW1wbGF0ZSBpbmZvIGFuZCBhY2Nlc3MuICAqLworI2RlZmluZSBMQU5HX0RFQ0xfSEFTX01JTihOT0RFKQkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gRlVOQ1RJT05fREVDTAkJXAorICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBGSUVMRF9ERUNMCQlcCisgICB8fCBUUkVFX0NPREUgKE5PREUpID09IFZBUl9ERUNMCQlcCisgICB8fCBUUkVFX0NPREUgKE5PREUpID09IENPTlNUX0RFQ0wJCVwKKyAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gVFlQRV9ERUNMCQlcCisgICB8fCBUUkVFX0NPREUgKE5PREUpID09IFRFTVBMQVRFX0RFQ0wJCVwKKyAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gVVNJTkdfREVDTCkKKworLyogREVDTF9MQU5HX1NQRUNJRklDIGZvciB0aGUgYWJvdmUgY29kZXMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX2RlY2xfbWluIHsKKyAgc3RydWN0IGxhbmdfZGVjbF9iYXNlIGJhc2U7CisKKyAgLyogSW4gYSBGVU5DVElPTl9ERUNMIGZvciB3aGljaCBERUNMX1RIVU5LX1AgaG9sZHMsIHRoaXMgaXMKKyAgICAgVEhVTktfQUxJQVMuCisgICAgIEluIGEgRlVOQ1RJT05fREVDTCBmb3Igd2hpY2ggREVDTF9USFVOS19QIGRvZXMgbm90IGhvbGQsCisgICAgIFZBUl9ERUNMLCBUWVBFX0RFQ0wsIG9yIFRFTVBMQVRFX0RFQ0wsIHRoaXMgaXMKKyAgICAgREVDTF9URU1QTEFURV9JTkZPLiAgKi8KKyAgdHJlZSB0ZW1wbGF0ZV9pbmZvOworCisgIHVuaW9uIGxhbmdfZGVjbF91MiB7CisgICAgLyogSW4gYSBGVU5DVElPTl9ERUNMIGZvciB3aGljaCBERUNMX1RIVU5LX1AgaG9sZHMsIHRoaXMgaXMKKyAgICAgICBUSFVOS19WSVJUVUFMX09GRlNFVC4KKyAgICAgICBPdGhlcndpc2UgdGhpcyBpcyBERUNMX0FDQ0VTUy4gICovCisgICAgdHJlZSBHVFkgKCh0YWcgKCIwIikpKSBhY2Nlc3M7CisKKyAgICAvKiBGb3IgVkFSX0RFQ0wgaW4gZnVuY3Rpb24sIHRoaXMgaXMgREVDTF9ESVNDUklNSU5BVE9SLiAgKi8KKyAgICBpbnQgR1RZICgodGFnICgiMSIpKSkgZGlzY3JpbWluYXRvcjsKKyAgfSBHVFkgKChkZXNjICgiJTAudS5iYXNlLnUyc2VsIikpKSB1MjsKK307CisKKy8qIEFkZGl0aW9uYWwgREVDTF9MQU5HX1NQRUNJRklDIGluZm9ybWF0aW9uIGZvciBmdW5jdGlvbnMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX2RlY2xfZm4geworICBzdHJ1Y3QgbGFuZ19kZWNsX21pbiBtaW47CisKKyAgLyogSW4gYW4gb3ZlcmxvYWRlZCBvcGVyYXRvciwgdGhpcyBpcyB0aGUgdmFsdWUgb2YKKyAgICAgREVDTF9PVkVSTE9BREVEX09QRVJBVE9SX1AuICAqLworICBFTlVNX0JJVEZJRUxEICh0cmVlX2NvZGUpIG9wZXJhdG9yX2NvZGUgOiAxNjsKKworICB1bnNpZ25lZCBnbG9iYWxfY3Rvcl9wIDogMTsKKyAgdW5zaWduZWQgZ2xvYmFsX2R0b3JfcCA6IDE7CisgIHVuc2lnbmVkIGNvbnN0cnVjdG9yX2F0dHIgOiAxOworICB1bnNpZ25lZCBkZXN0cnVjdG9yX2F0dHIgOiAxOworICB1bnNpZ25lZCBhc3NpZ25tZW50X29wZXJhdG9yX3AgOiAxOworICB1bnNpZ25lZCBzdGF0aWNfZnVuY3Rpb24gOiAxOworICB1bnNpZ25lZCBwdXJlX3ZpcnR1YWwgOiAxOworICB1bnNpZ25lZCBkZWZhdWx0ZWRfcCA6IDE7CisKKyAgdW5zaWduZWQgaGFzX2luX2NoYXJnZV9wYXJtX3AgOiAxOworICB1bnNpZ25lZCBoYXNfdnR0X3Bhcm1fcCA6IDE7CisgIHVuc2lnbmVkIHBlbmRpbmdfaW5saW5lX3AgOiAxOworICB1bnNpZ25lZCBub25jb252ZXJ0aW5nIDogMTsKKyAgdW5zaWduZWQgdGh1bmtfcCA6IDE7CisgIHVuc2lnbmVkIHRoaXNfdGh1bmtfcCA6IDE7CisgIHVuc2lnbmVkIGhpZGRlbl9mcmllbmRfcCA6IDE7CisgIC8qIDEgc3BhcmUgYml0LiAgKi8KKworICAvKiBGb3IgYSBub24tdGh1bmsgZnVuY3Rpb24gZGVjbCwgdGhpcyBpcyBhIHRyZWUgbGlzdCBvZgorICAgICBmcmllbmRseSBjbGFzc2VzLiBGb3IgYSB0aHVuayBmdW5jdGlvbiBkZWNsLCBpdCBpcyB0aGUKKyAgICAgdGh1bmtlZCB0byBmdW5jdGlvbiBkZWNsLiAgKi8KKyAgdHJlZSBiZWZyaWVuZGluZ19jbGFzc2VzOworCisgIC8qIEZvciBhIG5vbi12aXJ0dWFsIEZVTkNUSU9OX0RFQ0wsIHRoaXMgaXMKKyAgICAgREVDTF9GUklFTkRfQ09OVEVYVC4gIEZvciBhIHZpcnR1YWwgRlVOQ1RJT05fREVDTCBmb3Igd2hpY2gKKyAgICAgREVDTF9USElTX1RIVU5LX1AgZG9lcyBub3QgaG9sZCwgdGhpcyBpcyBERUNMX1RIVU5LUy4gQm90aAorICAgICB0aGlzIHBvaW50ZXIgYW5kIHJlc3VsdCBwb2ludGVyIGFkanVzdGluZyB0aHVua3MgYXJlCisgICAgIGNoYWluZWQgaGVyZS4gIFRoaXMgcG9pbnRlciB0aHVua3MgdG8gcmV0dXJuIHBvaW50ZXIgdGh1bmtzCisgICAgIHdpbGwgYmUgY2hhaW5lZCBvbiB0aGUgcmV0dXJuIHBvaW50ZXIgdGh1bmsuICAqLworICB0cmVlIGNvbnRleHQ7CisKKyAgdW5pb24gbGFuZ19kZWNsX3U1CisgIHsKKyAgICAvKiBJbiBhIG5vbi10aHVuayBGVU5DVElPTl9ERUNMIG9yIFRFTVBMQVRFX0RFQ0wsIHRoaXMgaXMKKyAgICAgICBERUNMX0NMT05FRF9GVU5DVElPTi4gICovCisgICAgdHJlZSBHVFkgKCh0YWcgKCIwIikpKSBjbG9uZWRfZnVuY3Rpb247CisKKyAgICAvKiBJbiBhIEZVTkNUSU9OX0RFQ0wgZm9yIHdoaWNoIFRIVU5LX1AgaG9sZHMgdGhpcyBpcyB0aGUKKyAgICAgICBUSFVOS19GSVhFRF9PRkZTRVQuICAqLworICAgIEhPU1RfV0lERV9JTlQgR1RZICgodGFnICgiMSIpKSkgZml4ZWRfb2Zmc2V0OworICB9IEdUWSAoKGRlc2MgKCIlMS50aHVua19wIikpKSB1NTsKKworICB1bmlvbiBsYW5nX2RlY2xfdTMKKyAgeworICAgIHN0cnVjdCBjcF90b2tlbl9jYWNoZSAqIEdUWSAoKHRhZyAoIjEiKSkpIHBlbmRpbmdfaW5saW5lX2luZm87CisgICAgc3RydWN0IGxhbmd1YWdlX2Z1bmN0aW9uICogR1RZICgodGFnICgiMCIpKSkKKyAgICAgIHNhdmVkX2xhbmd1YWdlX2Z1bmN0aW9uOworICB9IEdUWSAoKGRlc2MgKCIlMS5wZW5kaW5nX2lubGluZV9wIikpKSB1OworCit9OworCisvKiBERUNMX0xBTkdfU1BFQ0lGSUMgZm9yIG5hbWVzcGFjZXMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX2RlY2xfbnMgeworICBzdHJ1Y3QgbGFuZ19kZWNsX2Jhc2UgYmFzZTsKKyAgY3BfYmluZGluZ19sZXZlbCAqbGV2ZWw7Cit9OworCisvKiBERUNMX0xBTkdfU1BFQ0lGSUMgZm9yIHBhcmFtZXRlcnMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBsYW5nX2RlY2xfcGFybSB7CisgIHN0cnVjdCBsYW5nX2RlY2xfYmFzZSBiYXNlOworICBpbnQgbGV2ZWw7CisgIGludCBpbmRleDsKK307CisKKy8qIERFQ0xfTEFOR19TUEVDSUZJQyBmb3IgYWxsIHR5cGVzLiAgSXQgd291bGQgYmUgbmljZSB0byBqdXN0IG1ha2UgdGhpcyBhCisgICB1bmlvbiByYXRoZXIgdGhhbiBhIHN0cnVjdCBjb250YWluaW5nIGEgdW5pb24gYXMgaXRzIG9ubHkgZmllbGQsIGJ1dAorICAgdHJlZS5oIGRlY2xhcmVzIGl0IGFzIGEgc3RydWN0LiAgKi8KKworc3RydWN0IEdUWSgodmFyaWFibGVfc2l6ZSkpIGxhbmdfZGVjbCB7CisgIHVuaW9uIEdUWSgoZGVzYyAoIiVoLmJhc2Uuc2VsZWN0b3IiKSkpIGxhbmdfZGVjbF91IHsKKyAgICBzdHJ1Y3QgbGFuZ19kZWNsX2Jhc2UgR1RZICgoZGVmYXVsdCkpIGJhc2U7CisgICAgc3RydWN0IGxhbmdfZGVjbF9taW4gR1RZKCh0YWcgKCIwIikpKSBtaW47CisgICAgc3RydWN0IGxhbmdfZGVjbF9mbiBHVFkgKCh0YWcgKCIxIikpKSBmbjsKKyAgICBzdHJ1Y3QgbGFuZ19kZWNsX25zIEdUWSgodGFnICgiMiIpKSkgbnM7CisgICAgc3RydWN0IGxhbmdfZGVjbF9wYXJtIEdUWSgodGFnICgiMyIpKSkgcGFybTsKKyAgfSB1OworfTsKKworLyogTG9va3MgdGhyb3VnaCBhIHRlbXBsYXRlIChpZiBwcmVzZW50KSB0byBmaW5kIHdoYXQgaXQgZGVjbGFyZXMuICAqLworI2RlZmluZSBTVFJJUF9URU1QTEFURShOT0RFKSBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRFTVBMQVRFX0RFQ0wgPyBERUNMX1RFTVBMQVRFX1JFU1VMVCAoTk9ERSkgOiBOT0RFKQorCisjaWYgZGVmaW5lZCBFTkFCTEVfVFJFRV9DSEVDS0lORyAmJiAoR0NDX1ZFUlNJT04gPj0gMjAwNykKKworI2RlZmluZSBMQU5HX0RFQ0xfTUlOX0NIRUNLKE5PREUpIF9fZXh0ZW5zaW9uX18JCQlcCisoeyBzdHJ1Y3QgbGFuZ19kZWNsICpsdCA9IERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSk7CQlcCisgICBpZiAoIUxBTkdfREVDTF9IQVNfTUlOIChOT0RFKSkJCQkJXAorICAgICBsYW5nX2NoZWNrX2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICAmbHQtPnUubWluOyB9KQorCisvKiBXZSB3YW50IHRvIGJlIGFibGUgdG8gY2hlY2sgREVDTF9DT05TVFJVQ1RPUl9QIGFuZCBzdWNoIG9uIGEgZnVuY3Rpb24KKyAgIHRlbXBsYXRlLCBub3QganVzdCBvbiBhIEZVTkNUSU9OX0RFQ0wuICBTbyB3aGVuIGxvb2tpbmcgZm9yIHRoaW5ncyBpbgorICAgbGFuZ19kZWNsX2ZuLCBsb29rIGRvd24gdGhyb3VnaCBhIFRFTVBMQVRFX0RFQ0wgaW50byBpdHMgcmVzdWx0LiAgKi8KKyNkZWZpbmUgTEFOR19ERUNMX0ZOX0NIRUNLKE5PREUpIF9fZXh0ZW5zaW9uX18JCQkJXAorKHsgc3RydWN0IGxhbmdfZGVjbCAqbHQgPSBERUNMX0xBTkdfU1BFQ0lGSUMgKFNUUklQX1RFTVBMQVRFIChOT0RFKSk7CVwKKyAgIGlmICghREVDTF9ERUNMQVJFU19GVU5DVElPTl9QIChOT0RFKSB8fCBsdC0+dS5iYXNlLnNlbGVjdG9yICE9IDEpCVwKKyAgICAgbGFuZ19jaGVja19mYWlsZWQgKF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJCVwKKyAgICZsdC0+dS5mbjsgfSkKKworI2RlZmluZSBMQU5HX0RFQ0xfTlNfQ0hFQ0soTk9ERSkgX19leHRlbnNpb25fXwkJCQlcCisoeyBzdHJ1Y3QgbGFuZ19kZWNsICpsdCA9IERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSk7CQkJXAorICAgaWYgKFRSRUVfQ09ERSAoTk9ERSkgIT0gTkFNRVNQQUNFX0RFQ0wgfHwgbHQtPnUuYmFzZS5zZWxlY3RvciAhPSAyKQlcCisgICAgIGxhbmdfY2hlY2tfZmFpbGVkIChfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQlcCisgICAmbHQtPnUubnM7IH0pCisKKyNkZWZpbmUgTEFOR19ERUNMX1BBUk1fQ0hFQ0soTk9ERSkgX19leHRlbnNpb25fXwkJXAorKHsgc3RydWN0IGxhbmdfZGVjbCAqbHQgPSBERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpOwkJXAorICBpZiAoVFJFRV9DT0RFIChOT0RFKSAhPSBQQVJNX0RFQ0wpCQkJCVwKKyAgICBsYW5nX2NoZWNrX2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICZsdC0+dS5wYXJtOyB9KQorCisjZGVmaW5lIExBTkdfREVDTF9VMl9DSEVDSyhOT0RFLCBURikgX19leHRlbnNpb25fXwkJXAorKHsgIHN0cnVjdCBsYW5nX2RlY2wgKmx0ID0gREVDTF9MQU5HX1NQRUNJRklDIChOT0RFKTsJCVwKKyAgICBpZiAoIUxBTkdfREVDTF9IQVNfTUlOIChOT0RFKSB8fCBsdC0+dS5iYXNlLnUyc2VsICE9IFRGKQlcCisgICAgICBsYW5nX2NoZWNrX2ZhaWxlZCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwlcCisgICAgJmx0LT51Lm1pbi51MjsgfSkKKworI2Vsc2UKKworI2RlZmluZSBMQU5HX0RFQ0xfTUlOX0NIRUNLKE5PREUpIFwKKyAgKCZERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51Lm1pbikKKworI2RlZmluZSBMQU5HX0RFQ0xfRk5fQ0hFQ0soTk9ERSkgXAorICAoJkRFQ0xfTEFOR19TUEVDSUZJQyAoU1RSSVBfVEVNUExBVEUgKE5PREUpKS0+dS5mbikKKworI2RlZmluZSBMQU5HX0RFQ0xfTlNfQ0hFQ0soTk9ERSkgXAorICAoJkRFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUubnMpCisKKyNkZWZpbmUgTEFOR19ERUNMX1BBUk1fQ0hFQ0soTk9ERSkgXAorICAoJkRFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUucGFybSkKKworI2RlZmluZSBMQU5HX0RFQ0xfVTJfQ0hFQ0soTk9ERSwgVEYpIFwKKyAgKCZERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51Lm1pbi51MikKKworI2VuZGlmIC8qIEVOQUJMRV9UUkVFX0NIRUNLSU5HICovCisKKy8qIEZvciBhIEZVTkNUSU9OX0RFQ0wgb3IgYSBWQVJfREVDTCwgdGhlIGxhbmd1YWdlIGxpbmthZ2UgZm9yIHRoZQorICAgZGVjbGFyYXRpb24uICBTb21lIGVudGl0aWVzIChsaWtlIGEgbWVtYmVyIGZ1bmN0aW9uIGluIGEgbG9jYWwKKyAgIGNsYXNzLCBvciBhIGxvY2FsIHZhcmlhYmxlKSBkbyBub3QgaGF2ZSBsaW5rYWdlIGF0IGFsbCwgYW5kIHRoaXMKKyAgIG1hY3JvIHNob3VsZCBub3QgYmUgdXNlZCBpbiB0aG9zZSBjYXNlcy4KKworICAgSW1wbGVtZW50YXRpb24gbm90ZTogQSBGVU5DVElPTl9ERUNMIHdpdGhvdXQgREVDTF9MQU5HX1NQRUNJRklDIHdhcworICAgY3JlYXRlZCBieSBsYW5ndWFnZS1pbmRlcGVuZGVudCBjb2RlLCBhbmQgaGFzIEMgbGlua2FnZS4gIE1vc3QKKyAgIFZBUl9ERUNMcyBoYXZlIEMrKyBsaW5rYWdlLCBhbmQgZG8gbm90IGhhdmUgREVDTF9MQU5HX1NQRUNJRklDLCBidXQKKyAgIHdlIGRvIGNyZWF0ZSBERUNMX0xBTkdfU1BFQ0lGSUMgZm9yIHZhcmlhYmxlcyB3aXRoIG5vbi1DKysgbGlua2FnZS4gICovCisjZGVmaW5lIERFQ0xfTEFOR1VBR0UoTk9ERSkJCQkJXAorICAoREVDTF9MQU5HX1NQRUNJRklDIChOT0RFKQkJCQlcCisgICA/IERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS5sYW5ndWFnZQkJXAorICAgOiAoVFJFRV9DT0RFIChOT0RFKSA9PSBGVU5DVElPTl9ERUNMCQkJXAorICAgICAgPyBsYW5nX2MgOiBsYW5nX2NwbHVzcGx1cykpCisKKy8qIFNldCB0aGUgbGFuZ3VhZ2UgbGlua2FnZSBmb3IgTk9ERSB0byBMQU5HVUFHRS4gICovCisjZGVmaW5lIFNFVF9ERUNMX0xBTkdVQUdFKE5PREUsIExBTkdVQUdFKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51LmJhc2UubGFuZ3VhZ2UgPSAoTEFOR1VBR0UpKQorCisvKiBGb3IgRlVOQ1RJT05fREVDTHM6IG5vbnplcm8gbWVhbnMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGEgY29uc3RydWN0b3IuICAqLworI2RlZmluZSBERUNMX0NPTlNUUlVDVE9SX1AoTk9ERSkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+Y29uc3RydWN0b3JfYXR0cikKKworLyogTm9uemVybyBpZiBOT0RFIChhIEZVTkNUSU9OX0RFQ0wpIGlzIGEgY29uc3RydWN0b3IgZm9yIGEgY29tcGxldGUKKyAgIG9iamVjdC4gICovCisjZGVmaW5lIERFQ0xfQ09NUExFVEVfQ09OU1RSVUNUT1JfUChOT0RFKQkJXAorICAoREVDTF9DT05TVFJVQ1RPUl9QIChOT0RFKQkJCQlcCisgICAmJiBERUNMX05BTUUgKE5PREUpID09IGNvbXBsZXRlX2N0b3JfaWRlbnRpZmllcikKKworLyogTm9uemVybyBpZiBOT0RFIChhIEZVTkNUSU9OX0RFQ0wpIGlzIGEgY29uc3RydWN0b3IgZm9yIGEgYmFzZQorICAgb2JqZWN0LiAgKi8KKyNkZWZpbmUgREVDTF9CQVNFX0NPTlNUUlVDVE9SX1AoTk9ERSkJCVwKKyAgKERFQ0xfQ09OU1RSVUNUT1JfUCAoTk9ERSkJCQlcCisgICAmJiBERUNMX05BTUUgKE5PREUpID09IGJhc2VfY3Rvcl9pZGVudGlmaWVyKQorCisvKiBOb256ZXJvIGlmIE5PREUgKGEgRlVOQ1RJT05fREVDTCkgaXMgYSBjb25zdHJ1Y3RvciwgYnV0IG5vdCBlaXRoZXIgdGhlCisgICBzcGVjaWFsaXplZCBpbi1jaGFyZ2UgY29uc3RydWN0b3Igb3IgdGhlIHNwZWNpYWxpemVkIG5vdC1pbi1jaGFyZ2UKKyAgIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgREVDTF9NQVlCRV9JTl9DSEFSR0VfQ09OU1RSVUNUT1JfUChOT0RFKQkJXAorICAoREVDTF9ERUNMQVJFU19GVU5DVElPTl9QIChOT0RFKSAmJiBERUNMX0NPTlNUUlVDVE9SX1AgKE5PREUpIFwKKyAgICYmICFERUNMX0NMT05FRF9GVU5DVElPTl9QIChOT0RFKSkKKworLyogTm9uemVybyBpZiBOT0RFIChhIEZVTkNUSU9OX0RFQ0wpIGlzIGEgY29weSBjb25zdHJ1Y3Rvci4gICovCisjZGVmaW5lIERFQ0xfQ09QWV9DT05TVFJVQ1RPUl9QKE5PREUpIFwKKyAgKERFQ0xfQ09OU1RSVUNUT1JfUCAoTk9ERSkgJiYgY29weV9mbl9wIChOT0RFKSA+IDApCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIG1vdmUgY29uc3RydWN0b3IuICAqLworI2RlZmluZSBERUNMX01PVkVfQ09OU1RSVUNUT1JfUChOT0RFKSBcCisgIChERUNMX0NPTlNUUlVDVE9SX1AgKE5PREUpICYmIG1vdmVfZm5fcCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIGRlc3RydWN0b3IuICAqLworI2RlZmluZSBERUNMX0RFU1RSVUNUT1JfUChOT0RFKQkJCQlcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5kZXN0cnVjdG9yX2F0dHIpCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIGRlc3RydWN0b3IsIGJ1dCBub3QgdGhlCisgICBzcGVjaWFsaXplZCBpbi1jaGFyZ2UgY29uc3RydWN0b3IsIGluLWNoYXJnZSBkZWxldGluZyBjb25zdHJ1Y3RvciwKKyAgIG9yIHRoZSBiYXNlIGRlc3RydWN0b3IuICAqLworI2RlZmluZSBERUNMX01BWUJFX0lOX0NIQVJHRV9ERVNUUlVDVE9SX1AoTk9ERSkJCQlcCisgIChERUNMX0RFQ0xBUkVTX0ZVTkNUSU9OX1AgKE5PREUpICYmIERFQ0xfREVTVFJVQ1RPUl9QIChOT0RFKQlcCisgICAmJiAhREVDTF9DTE9ORURfRlVOQ1RJT05fUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIGRlc3RydWN0b3IgZm9yIGEgY29tcGxldGUKKyAgIG9iamVjdC4gICovCisjZGVmaW5lIERFQ0xfQ09NUExFVEVfREVTVFJVQ1RPUl9QKE5PREUpCQlcCisgIChERUNMX0RFU1RSVUNUT1JfUCAoTk9ERSkJCQkJXAorICAgJiYgREVDTF9OQU1FIChOT0RFKSA9PSBjb21wbGV0ZV9kdG9yX2lkZW50aWZpZXIpCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIGRlc3RydWN0b3IgZm9yIGEgYmFzZQorICAgb2JqZWN0LiAgKi8KKyNkZWZpbmUgREVDTF9CQVNFX0RFU1RSVUNUT1JfUChOT0RFKQkJXAorICAoREVDTF9ERVNUUlVDVE9SX1AgKE5PREUpCQkJXAorICAgJiYgREVDTF9OQU1FIChOT0RFKSA9PSBiYXNlX2R0b3JfaWRlbnRpZmllcikKKworLyogTm9uemVybyBpZiBOT0RFIChhIEZVTkNUSU9OX0RFQ0wpIGlzIGEgZGVzdHJ1Y3RvciBmb3IgYSBjb21wbGV0ZQorICAgb2JqZWN0IHRoYXQgZGVsZXRlcyB0aGUgb2JqZWN0IGFmdGVyIGl0IGhhcyBiZWVuIGRlc3Ryb3llZC4gICovCisjZGVmaW5lIERFQ0xfREVMRVRJTkdfREVTVFJVQ1RPUl9QKE5PREUpCQlcCisgIChERUNMX0RFU1RSVUNUT1JfUCAoTk9ERSkJCQkJXAorICAgJiYgREVDTF9OQU1FIChOT0RFKSA9PSBkZWxldGluZ19kdG9yX2lkZW50aWZpZXIpCisKKy8qIE5vbnplcm8gaWYgTk9ERSAoYSBGVU5DVElPTl9ERUNMKSBpcyBhIGNsb25lZCBjb25zdHJ1Y3RvciBvcgorICAgZGVzdHJ1Y3Rvci4gICovCisjZGVmaW5lIERFQ0xfQ0xPTkVEX0ZVTkNUSU9OX1AoTk9ERSkgKCEhZGVjbF9jbG9uZWRfZnVuY3Rpb25fcCAoTk9ERSwgdHJ1ZSkpCisKKy8qIElmIERFQ0xfQ0xPTkVEX0ZVTkNUSU9OX1AgaG9sZHMsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2FzCisgICBjbG9uZWQuICAqLworI2RlZmluZSBERUNMX0NMT05FRF9GVU5DVElPTihOT0RFKSAoKmRlY2xfY2xvbmVkX2Z1bmN0aW9uX3AgKE5PREUsIGZhbHNlKSkKKworLyogUGVyZm9ybSBhbiBhY3Rpb24gZm9yIGVhY2ggY2xvbmUgb2YgRk4sIGlmIEZOIGlzIGEgZnVuY3Rpb24gd2l0aAorICAgY2xvbmVzLiAgVGhpcyBtYWNybyBzaG91bGQgYmUgdXNlZCBsaWtlOgorCisgICAgICBGT1JfRUFDSF9DTE9ORSAoY2xvbmUsIGZuKQorCXsgLi4uIH0KKworICAqLworI2RlZmluZSBGT1JfRUFDSF9DTE9ORShDTE9ORSwgRk4pCQkJXAorICBpZiAoVFJFRV9DT0RFIChGTikgPT0gRlVOQ1RJT05fREVDTAkJCVwKKyAgICAgICYmIChERUNMX01BWUJFX0lOX0NIQVJHRV9DT05TVFJVQ1RPUl9QIChGTikJXAorCSAgfHwgREVDTF9NQVlCRV9JTl9DSEFSR0VfREVTVFJVQ1RPUl9QIChGTikpKQlcCisgICAgIGZvciAoQ0xPTkUgPSBERUNMX0NIQUlOIChGTik7CQkJXAorCSAgQ0xPTkUgJiYgREVDTF9DTE9ORURfRlVOQ1RJT05fUCAoQ0xPTkUpOwlcCisJICBDTE9ORSA9IERFQ0xfQ0hBSU4gKENMT05FKSkKKworLyogTm9uemVybyBpZiBOT0RFIGhhcyBERUNMX0RJU0NSSU1JTkFUT1IgYW5kIG5vdCBERUNMX0FDQ0VTUy4gICovCisjZGVmaW5lIERFQ0xfRElTQ1JJTUlOQVRPUl9QKE5PREUpCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVkFSX0RFQ0wJCVwKKyAgICYmIERFQ0xfRlVOQ1RJT05fU0NPUEVfUCAoTk9ERSkpCisKKy8qIERpc2NyaW1pbmF0b3IgZm9yIG5hbWUgbWFuZ2xpbmcuICAqLworI2RlZmluZSBERUNMX0RJU0NSSU1JTkFUT1IoTk9ERSkgKExBTkdfREVDTF9VMl9DSEVDSyAoTk9ERSwgMSktPmRpc2NyaW1pbmF0b3IpCisKKy8qIFRydWUgaWZmIERFQ0xfRElTQ1JJTUlOQVRPUiBpcyBzZXQgZm9yIGEgREVDTF9ESVNDUklNSU5BVE9SX1AgZGVjbC4gICovCisjZGVmaW5lIERFQ0xfRElTQ1JJTUlOQVRPUl9TRVRfUChOT0RFKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpICYmIERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS51MnNlbCA9PSAxKQorCisvKiBUaGUgaW5kZXggb2YgYSB1c2VyLWRlY2xhcmVkIHBhcmFtZXRlciBpbiBpdHMgZnVuY3Rpb24sIHN0YXJ0aW5nIGF0IDEuCisgICBBbGwgYXJ0aWZpY2lhbCBwYXJhbWV0ZXJzIHdpbGwgaGF2ZSBpbmRleCAwLiAgKi8KKyNkZWZpbmUgREVDTF9QQVJNX0lOREVYKE5PREUpIFwKKyAgKExBTkdfREVDTF9QQVJNX0NIRUNLIChOT0RFKS0+aW5kZXgpCisKKy8qIFRoZSBsZXZlbCBvZiBhIHVzZXItZGVjbGFyZWQgcGFyYW1ldGVyIGluIGl0cyBmdW5jdGlvbiwgc3RhcnRpbmcgYXQgMS4KKyAgIEEgcGFyYW1ldGVyIG9mIHRoZSBmdW5jdGlvbiB3aWxsIGhhdmUgbGV2ZWwgMTsgYSBwYXJhbWV0ZXIgb2YgdGhlIGZpcnN0CisgICBuZXN0ZWQgZnVuY3Rpb24gZGVjbGFyYXRvciAoaS5lLiB0IGluIHZvaWQgZiAodm9pZCAoKnApKFQgdCkpKSB3aWxsIGhhdmUKKyAgIGxldmVsIDIuICAqLworI2RlZmluZSBERUNMX1BBUk1fTEVWRUwoTk9ERSkgXAorICAoTEFOR19ERUNMX1BBUk1fQ0hFQ0sgKE5PREUpLT5sZXZlbCkKKworLyogTm9uemVybyBpZiB0aGUgVlRUIHBhcm0gaGFzIGJlZW4gYWRkZWQgdG8gTk9ERS4gICovCisjZGVmaW5lIERFQ0xfSEFTX1ZUVF9QQVJNX1AoTk9ERSkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+aGFzX3Z0dF9wYXJtX3ApCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIEZVTkNUSU9OX0RFQ0wgZm9yIHdoaWNoIGEgVlRUIHBhcmFtZXRlciBpcworICAgcmVxdWlyZWQuICAqLworI2RlZmluZSBERUNMX05FRURTX1ZUVF9QQVJNX1AoTk9ERSkJCQlcCisgIChDTEFTU1RZUEVfVkJBU0VDTEFTU0VTIChERUNMX0NPTlRFWFQgKE5PREUpKQkJXAorICAgJiYgKERFQ0xfQkFTRV9DT05TVFJVQ1RPUl9QIChOT0RFKQkJCVwKKyAgICAgICB8fCBERUNMX0JBU0VfREVTVFJVQ1RPUl9QIChOT0RFKSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIHVzZXItZGVmaW5lZCBjb252ZXJzaW9uIG9wZXJhdG9yLiAgKi8KKyNkZWZpbmUgREVDTF9DT05WX0ZOX1AoTk9ERSkgXAorICAoREVDTF9OQU1FIChOT0RFKSAmJiBJREVOVElGSUVSX1RZUEVOQU1FX1AgKERFQ0xfTkFNRSAoTk9ERSkpKQorCisvKiBJZiBGTiBpcyBhIGNvbnZlcnNpb24gb3BlcmF0b3IsIHRoZSB0eXBlIHRvIHdoaWNoIGl0IGNvbnZlcnRzLgorICAgT3RoZXJ3aXNlLCBOVUxMX1RSRUUuICAqLworI2RlZmluZSBERUNMX0NPTlZfRk5fVFlQRShGTikgXAorICAoREVDTF9DT05WX0ZOX1AgKEZOKSA/IFRSRUVfVFlQRSAoREVDTF9OQU1FIChGTikpIDogTlVMTF9UUkVFKQorCisvKiBOb256ZXJvIGlmIE5PREUsIHdoaWNoIGlzIGEgVEVNUExBVEVfREVDTCwgaXMgYSB0ZW1wbGF0ZQorICAgY29udmVyc2lvbiBvcGVyYXRvciB0byBhIHR5cGUgZGVwZW5kZW50IG9uIHRoZSBpbm5lcm1vc3QgdGVtcGxhdGUKKyAgIGFyZ3MuICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX0NPTlZfRk5fUChOT0RFKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKFRFTVBMQVRFX0RFQ0xfQ0hFQ0sgKE5PREUpKS0+dS5iYXNlLnRlbXBsYXRlX2NvbnZfcCkKKworLyogTm9uemVybyBpZiBOT0RFLCBhIHN0YXRpYyBkYXRhIG1lbWJlciwgd2FzIGRlY2xhcmVkIGluIGl0cyBjbGFzcyBhcyBhbgorICAgYXJyYXkgb2YgdW5rbm93biBib3VuZC4gICovCisjZGVmaW5lIFZBUl9IQURfVU5LTk9XTl9CT1VORChOT0RFKQkJCVwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKQkJXAorICAgPyBERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51LmJhc2UudGVtcGxhdGVfY29udl9wCVwKKyAgIDogZmFsc2UpCisjZGVmaW5lIFNFVF9WQVJfSEFEX1VOS05PV05fQk9VTkQoTk9ERSkgXAorICAoREVDTF9MQU5HX1NQRUNJRklDIChWQVJfREVDTF9DSEVDSyAoTk9ERSkpLT51LmJhc2UudGVtcGxhdGVfY29udl9wID0gdHJ1ZSkKKworLyogU2V0IHRoZSBvdmVybG9hZGVkIG9wZXJhdG9yIGNvZGUgZm9yIE5PREUgdG8gQ09ERS4gICovCisjZGVmaW5lIFNFVF9PVkVSTE9BREVEX09QRVJBVE9SX0NPREUoTk9ERSwgQ09ERSkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+b3BlcmF0b3JfY29kZSA9IChDT0RFKSkKKworLyogSWYgTk9ERSBpcyBhbiBvdmVybG9hZGVkIG9wZXJhdG9yLCB0aGVuIHRoaXMgcmV0dXJucyB0aGUgVFJFRV9DT0RFCisgICBhc3NvY2lhdGVkIHdpdGggdGhlIG92ZXJsb2FkZWQgb3BlcmF0b3IuCisgICBERUNMX0FTU0lHTk1FTlRfT1BFUkFUT1JfUCBtdXN0IGFsc28gYmUgY2hlY2tlZCB0byBkZXRlcm1pbmUKKyAgIHdoZXRoZXIgb3Igbm90IE5PREUgaXMgYW4gYXNzaWdubWVudCBvcGVyYXRvci4gIElmIE5PREUgaXMgbm90IGFuCisgICBvdmVybG9hZGVkIG9wZXJhdG9yLCBFUlJPUl9NQVJLIGlzIHJldHVybmVkLiAgU2luY2UgdGhlIG51bWVyaWNhbAorICAgdmFsdWUgb2YgRVJST1JfTUFSSyBpcyB6ZXJvLCB0aGlzIG1hY3JvIGNhbiBiZSB1c2VkIGFzIGEgcHJlZGljYXRlCisgICB0byB0ZXN0IHdoZXRoZXIgb3Igbm90IE5PREUgaXMgYW4gb3ZlcmxvYWRlZCBvcGVyYXRvci4gICovCisjZGVmaW5lIERFQ0xfT1ZFUkxPQURFRF9PUEVSQVRPUl9QKE5PREUpCQlcCisgIChJREVOVElGSUVSX09QTkFNRV9QIChERUNMX05BTUUgKE5PREUpKQkJXAorICAgPyBMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5vcGVyYXRvcl9jb2RlIDogRVJST1JfTUFSSykKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IgKGluY2x1ZGluZyArPSBhbmQgc3VjaCkuICAqLworI2RlZmluZSBERUNMX0FTU0lHTk1FTlRfT1BFUkFUT1JfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5hc3NpZ25tZW50X29wZXJhdG9yX3ApCisKKy8qIEZvciBGVU5DVElPTl9ERUNMczogbm9uemVybyBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYQorICAgY29uc3RydWN0b3Igb3IgYSBkZXN0cnVjdG9yIHdpdGggYW4gZXh0cmEgaW4tY2hhcmdlIHBhcmFtZXRlciB0bworICAgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB2aXJ0dWFsIGJhc2VzIGFyZSBjb25zdHJ1Y3RlZC4gICovCisjZGVmaW5lIERFQ0xfSEFTX0lOX0NIQVJHRV9QQVJNX1AoTk9ERSkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+aGFzX2luX2NoYXJnZV9wYXJtX3ApCisKKy8qIE5vbnplcm8gaWYgREVDTCBpcyBhIGRlY2xhcmF0aW9uIG9mIF9fYnVpbHRpbl9jb25zdGFudF9wLiAgKi8KKyNkZWZpbmUgREVDTF9JU19CVUlMVElOX0NPTlNUQU5UX1AoTk9ERSkJCVwKKyAoVFJFRV9DT0RFIChOT0RFKSA9PSBGVU5DVElPTl9ERUNMCQkJXAorICAmJiBERUNMX0JVSUxUX0lOX0NMQVNTIChOT0RFKSA9PSBCVUlMVF9JTl9OT1JNQUwJXAorICAmJiBERUNMX0ZVTkNUSU9OX0NPREUgKE5PREUpID09IEJVSUxUX0lOX0NPTlNUQU5UX1ApCisKKy8qIE5vbnplcm8gZm9yIF9ERUNMIG1lYW5zIHRoYXQgdGhpcyBkZWNsIGFwcGVhcnMgaW4gKG9yIHdpbGwgYXBwZWFyCisgICBpbikgYXMgYSBtZW1iZXIgaW4gYSBSRUNPUkRfVFlQRSBvciBVTklPTl9UWVBFIG5vZGUuICBJdCBpcyBhbHNvIGZvcgorICAgZGV0ZWN0aW5nIGNpcmN1bGFyaXR5IGluIGNhc2UgbWVtYmVycyBhcmUgbXVsdGlwbHkgZGVmaW5lZC4gIEluIHRoZQorICAgY2FzZSBvZiBhIFZBUl9ERUNMLCBpdCBpcyBhbHNvIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBwcm9ncmFtIHN0b3JhZ2UKKyAgIHNob3VsZCBiZSBhbGxvY2F0ZWQuICAqLworI2RlZmluZSBERUNMX0lOX0FHR1JfUChOT0RFKSAoREVDTF9MQU5HX0ZMQUdfMyAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIGEgVkFSX0RFQ0wgbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUncyBpbml0aWFsaXphdGlvbiAoaWYKKyAgIGFueSkgaGFzIGJlZW4gcHJvY2Vzc2VkLiAgKEluIGdlbmVyYWwsIERFQ0xfSU5JVElBTElaRURfUCBpcworICAgIURFQ0xfRVhURVJOQUwsIGJ1dCBzdGF0aWMgZGF0YSBtZW1iZXJzIG1heSBiZSBpbml0aWFsaXplZCBldmVuIGlmCisgICBub3QgZGVmaW5lZC4pICAqLworI2RlZmluZSBERUNMX0lOSVRJQUxJWkVEX1AoTk9ERSkgXAorICAgKFRSRUVfTEFOR19GTEFHXzEgKFZBUl9ERUNMX0NIRUNLIChOT0RFKSkpCisKKy8qIE5vbnplcm8gZm9yIGEgVkFSX0RFQ0wgaWZmIGFuIGV4cGxpY2l0IGluaXRpYWxpemVyIHdhcyBwcm92aWRlZAorICAgb3IgYSBub24tdHJpdmlhbCBjb25zdHJ1Y3RvciBpcyBjYWxsZWQuICAqLworI2RlZmluZSBERUNMX05PTlRSSVZJQUxMWV9JTklUSUFMSVpFRF9QKE5PREUpCVwKKyAgIChUUkVFX0xBTkdfRkxBR18zIChWQVJfREVDTF9DSEVDSyAoTk9ERSkpKQorCisvKiBOb256ZXJvIGZvciBhIFZBUl9ERUNMIHRoYXQgd2FzIGluaXRpYWxpemVkIHdpdGggYQorICAgY29uc3RhbnQtZXhwcmVzc2lvbi4gICovCisjZGVmaW5lIERFQ0xfSU5JVElBTElaRURfQllfQ09OU1RBTlRfRVhQUkVTU0lPTl9QKE5PREUpIFwKKyAgKFRSRUVfTEFOR19GTEFHXzIgKFZBUl9ERUNMX0NIRUNLIChOT0RFKSkpCisKKy8qIE5vbnplcm8gaWYgdGhlIERFQ0wgd2FzIGluaXRpYWxpemVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGl0c2VsZiwKKyAgIHJhdGhlciB0aGFuIG91dHNpZGUgdGhlIGNsYXNzLiAgVGhpcyBpcyB1c2VkIGZvciBib3RoIHN0YXRpYyBtZW1iZXIKKyAgIFZBUl9ERUNMUywgYW5kIEZVTkNUSU9OX0RFQ0xTIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIGNsYXNzLiAgKi8KKyNkZWZpbmUgREVDTF9JTklUSUFMSVpFRF9JTl9DTEFTU19QKERFQ0wpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoVkFSX09SX0ZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKERFQ0wpKSBcCisgICAtPnUuYmFzZS5pbml0aWFsaXplZF9pbl9jbGFzcykKKworLyogTm9uemVybyBpZiB0aGUgREVDTCBpcyB1c2VkIGluIHRoZSBzZW5zZSBvZiAzLjIgW2Jhc2ljLmRlZi5vZHJdLgorICAgT25seSBhdmFpbGFibGUgZm9yIGRlY2xzIHdpdGggREVDTF9MQU5HX1NQRUNJRklDLiAgKi8KKyNkZWZpbmUgREVDTF9PRFJfVVNFRChERUNMKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKFZBUl9PUl9GVU5DVElPTl9ERUNMX0NIRUNLIChERUNMKSkgXAorICAgLT51LmJhc2Uub2RyX3VzZWQpCisKKy8qIE5vbnplcm8gZm9yIERFQ0wgbWVhbnMgdGhhdCB0aGlzIGRlY2wgaXMganVzdCBhIGZyaWVuZCBkZWNsYXJhdGlvbiwKKyAgIGFuZCBzaG91bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIHRoaXMgY2xhc3MuICAqLworI2RlZmluZSBERUNMX0ZSSUVORF9QKE5PREUpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoVFlQRV9GVU5DVElPTl9PUl9URU1QTEFURV9ERUNMX0NIRUNLIChOT0RFKSkgXAorICAgLT51LmJhc2UuZnJpZW5kX2F0dHIpCisKKy8qIEEgVFJFRV9MSVNUIG9mIHRoZSB0eXBlcyB3aGljaCBoYXZlIGJlZnJpZW5kZWQgdGhpcyBGVU5DVElPTl9ERUNMLiAgKi8KKyNkZWZpbmUgREVDTF9CRUZSSUVORElOR19DTEFTU0VTKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmJlZnJpZW5kaW5nX2NsYXNzZXMpCisKKy8qIE5vbnplcm8gZm9yIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhhdCB0aGlzIGRlY2wgaXMgYSBzdGF0aWMKKyAgIG1lbWJlciBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfU1RBVElDX0ZVTkNUSU9OX1AoTk9ERSkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+c3RhdGljX2Z1bmN0aW9uKQorCisvKiBOb256ZXJvIGZvciBGVU5DVElPTl9ERUNMIG1lYW5zIHRoYXQgdGhpcyBkZWNsIGlzIGEgbm9uLXN0YXRpYworICAgbWVtYmVyIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKE5PREUpKSA9PSBNRVRIT0RfVFlQRSkKKworLyogTm9uemVybyBmb3IgRlVOQ1RJT05fREVDTCBtZWFucyB0aGF0IHRoaXMgZGVjbCBpcyBhIG1lbWJlciBmdW5jdGlvbgorICAgKHN0YXRpYyBvciBub24tc3RhdGljKS4gICovCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fTUVNQkVSX1AoTk9ERSkgXAorICAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AgKE5PREUpIHx8IERFQ0xfU1RBVElDX0ZVTkNUSU9OX1AgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBGVU5DVElPTl9ERUNMIG1lYW5zIHRoYXQgdGhpcyBtZW1iZXIgZnVuY3Rpb24KKyAgIGhhcyBgdGhpcycgYXMgY29uc3QgWCAqY29uc3QuICAqLworI2RlZmluZSBERUNMX0NPTlNUX01FTUZVTkNfUChOT0RFKQkJCQkJIFwKKyAgKERFQ0xfTk9OU1RBVElDX01FTUJFUl9GVU5DVElPTl9QIChOT0RFKQkJCQkgXAorICAgJiYgQ1BfVFlQRV9DT05TVF9QIChUUkVFX1RZUEUgKFRSRUVfVkFMVUUJCQkJIFwKKwkJCQkgIChUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFIChOT0RFKSkpKSkpCisKKy8qIE5vbnplcm8gZm9yIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhhdCB0aGlzIG1lbWJlciBmdW5jdGlvbgorICAgaGFzIGB0aGlzJyBhcyB2b2xhdGlsZSBYICpjb25zdC4gICovCisjZGVmaW5lIERFQ0xfVk9MQVRJTEVfTUVNRlVOQ19QKE5PREUpCQkJCQkgXAorICAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AgKE5PREUpCQkJCSBcCisgICAmJiBDUF9UWVBFX1ZPTEFUSUxFX1AgKFRSRUVfVFlQRSAoVFJFRV9WQUxVRQkJCQkgXAorCQkJCSAgKFRZUEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKE5PREUpKSkpKSkKKworLyogTm9uemVybyBmb3IgYSBERUNMIG1lYW5zIHRoYXQgdGhpcyBtZW1iZXIgaXMgYSBub24tc3RhdGljIG1lbWJlci4gICovCisjZGVmaW5lIERFQ0xfTk9OU1RBVElDX01FTUJFUl9QKE5PREUpCQlcCisgIChERUNMX05PTlNUQVRJQ19NRU1CRVJfRlVOQ1RJT05fUCAoTk9ERSkJXAorICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBGSUVMRF9ERUNMKQorCisvKiBOb256ZXJvIGZvciBfREVDTCBtZWFucyB0aGF0IHRoaXMgbWVtYmVyIG9iamVjdCB0eXBlCisgICBpcyBtdXRhYmxlLiAgKi8KKyNkZWZpbmUgREVDTF9NVVRBQkxFX1AoTk9ERSkgKERFQ0xfTEFOR19GTEFHXzAgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBfREVDTCBtZWFucyB0aGF0IHRoaXMgY29uc3RydWN0b3Igb3IgY29udmVyc2lvbiBmdW5jdGlvbiBpcworICAgbm9uLWNvbnZlcnRpbmcuICAqLworI2RlZmluZSBERUNMX05PTkNPTlZFUlRJTkdfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5ub25jb252ZXJ0aW5nKQorCisvKiBOb256ZXJvIGZvciBGVU5DVElPTl9ERUNMIG1lYW5zIHRoYXQgdGhpcyBtZW1iZXIgZnVuY3Rpb24gaXMgYSBwdXJlCisgICB2aXJ0dWFsIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9QVVJFX1ZJUlRVQUxfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5wdXJlX3ZpcnR1YWwpCisKKy8qIFRydWUgKGluIGEgRlVOQ1RJT05fREVDTCkgaWYgTk9ERSBpcyBhIHZpcnR1YWwgZnVuY3Rpb24gdGhhdCBpcyBhbgorICAgaW52YWxpZCBvdmVycmlkZXIgZm9yIGEgZnVuY3Rpb24gZnJvbSBhIGJhc2UgY2xhc3MuICBPbmNlIHdlIGhhdmUKKyAgIGNvbXBsYWluZWQgYWJvdXQgYW4gaW52YWxpZCBvdmVycmlkZXIgd2UgYXZvaWQgY29tcGxhaW5pbmcgYWJvdXQgaXQKKyAgIGFnYWluLiAgKi8KKyNkZWZpbmUgREVDTF9JTlZBTElEX09WRVJSSURFUl9QKE5PREUpIFwKKyAgKERFQ0xfTEFOR19GTEFHXzQgKE5PREUpKQorCisvKiBUcnVlIChpbiBhIEZVTkNUSU9OX0RFQ0wpIGlmIE5PREUgaXMgYSBmdW5jdGlvbiBkZWNsYXJlZCB3aXRoCisgICBhbiBvdmVycmlkZSB2aXJ0LXNwZWNpZmllciAqLworI2RlZmluZSBERUNMX09WRVJSSURFX1AoTk9ERSkgKFRSRUVfTEFOR19GTEFHXzAgKE5PREUpKQorCisvKiBUcnVlIChpbiBhIEZVTkNUSU9OX0RFQ0wpIGlmIE5PREUgaXMgYSBmdW5jdGlvbiBkZWNsYXJlZCB3aXRoCisgICBhIGZpbmFsIHZpcnQtc3BlY2lmaWVyICovCisjZGVmaW5lIERFQ0xfRklOQUxfUChOT0RFKSAoVFJFRV9MQU5HX0ZMQUdfMSAoTk9ERSkpCisKKy8qIFRoZSB0aHVua3MgYXNzb2NpYXRlZCB3aXRoIE5PREUsIGEgRlVOQ1RJT05fREVDTC4gICovCisjZGVmaW5lIERFQ0xfVEhVTktTKE5PREUpIFwKKyAgKERFQ0xfVklSVFVBTF9QIChOT0RFKSA/IExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmNvbnRleHQgOiBOVUxMX1RSRUUpCisKKy8qIFNldCBERUNMX1RIVU5LUy4gICovCisjZGVmaW5lIFNFVF9ERUNMX1RIVU5LUyhOT0RFLFRIVU5LUykgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+Y29udGV4dCA9IChUSFVOS1MpKQorCisvKiBJZiBOT0RFLCBhIEZVTkNUSU9OX0RFQ0wsIGlzIGEgQysrMTEgaW5oZXJpdGluZyBjb25zdHJ1Y3RvciwgdGhlbiB0aGlzCisgICBpcyB0aGUgYmFzZSBpdCBpbmhlcml0cyBmcm9tLiAgKi8KKyNkZWZpbmUgREVDTF9JTkhFUklURURfQ1RPUl9CQVNFKE5PREUpIFwKKyAgKERFQ0xfQ09OU1RSVUNUT1JfUCAoTk9ERSkgPyBMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5jb250ZXh0IDogTlVMTF9UUkVFKQorCisvKiBTZXQgdGhlIGluaGVyaXRlZCBiYXNlLiAgKi8KKyNkZWZpbmUgU0VUX0RFQ0xfSU5IRVJJVEVEX0NUT1JfQkFTRShOT0RFLElOSCkgXAorICAoTEFOR19ERUNMX0ZOX0NIRUNLIChOT0RFKS0+Y29udGV4dCA9IChJTkgpKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYSB0aHVuaywgcmF0aGVyIHRoYW4gYW4gb3JkaW5hcnkgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX1RIVU5LX1AoTk9ERSkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IEZVTkNUSU9OX0RFQ0wJCVwKKyAgICYmIERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSkJCQlcCisgICAmJiBMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT50aHVua19wKQorCisvKiBTZXQgREVDTF9USFVOS19QIGZvciBub2RlLiAgKi8KKyNkZWZpbmUgU0VUX0RFQ0xfVEhVTktfUChOT0RFLCBUSElTX0FESlVTVElORykJCQlcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT50aHVua19wID0gMSwJCQlcCisgICBMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT50aGlzX3RodW5rX3AgPSAoVEhJU19BREpVU1RJTkcpKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYSB0aGlzIHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rLiAgKi8KKyNkZWZpbmUgREVDTF9USElTX1RIVU5LX1AoTk9ERSkJCQlcCisgIChERUNMX1RIVU5LX1AgKE5PREUpICYmIExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPnRoaXNfdGh1bmtfcCkKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGEgcmVzdWx0IHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rLiAgKi8KKyNkZWZpbmUgREVDTF9SRVNVTFRfVEhVTktfUChOT0RFKQkJCVwKKyAgKERFQ0xfVEhVTktfUCAoTk9ERSkgJiYgIUxBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPnRoaXNfdGh1bmtfcCkKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGEgRlVOQ1RJT05fREVDTCwgYnV0IG5vdCBhIHRodW5rLiAgKi8KKyNkZWZpbmUgREVDTF9OT05fVEhVTktfRlVOQ1RJT05fUChOT0RFKQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IEZVTkNUSU9OX0RFQ0wgJiYgIURFQ0xfVEhVTktfUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBgZXh0ZXJuICJDIicuICAqLworI2RlZmluZSBERUNMX0VYVEVSTl9DX1AoTk9ERSkgXAorICAoREVDTF9MQU5HVUFHRSAoTk9ERSkgPT0gbGFuZ19jKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYW4gYGV4dGVybiAiQyInIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9FWFRFUk5fQ19GVU5DVElPTl9QKE5PREUpIFwKKyAgKERFQ0xfTk9OX1RIVU5LX0ZVTkNUSU9OX1AgKE5PREUpICYmIERFQ0xfRVhURVJOX0NfUCAoTk9ERSkpCisKKy8qIFRydWUgaWZmIERFQ0wgaXMgYW4gZW50aXR5IHdpdGggdmFndWUgbGlua2FnZSB3aG9zZSBkZWZpbml0aW9uIGlzCisgICBhdmFpbGFibGUgaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgKi8KKyNkZWZpbmUgREVDTF9SRVBPX0FWQUlMQUJMRV9QKE5PREUpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS5yZXBvX2F2YWlsYWJsZV9wKQorCisvKiBUcnVlIGlmIERFQ0wgaXMgZGVjbGFyZWQgJ2NvbnN0ZXhwcicuICAqLworI2RlZmluZSBERUNMX0RFQ0xBUkVEX0NPTlNURVhQUl9QKERFQ0wpIFwKKyAgREVDTF9MQU5HX0ZMQUdfOCAoVkFSX09SX0ZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKFNUUklQX1RFTVBMQVRFIChERUNMKSkpCisKKy8qIE5vbnplcm8gaWYgdGhpcyBERUNMIGlzIHRoZSBfX1BSRVRUWV9GVU5DVElPTl9fIHZhcmlhYmxlIGluIGEKKyAgIHRlbXBsYXRlIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9QUkVUVFlfRlVOQ1RJT05fUChOT0RFKSBcCisgIChERUNMX05BTUUgKE5PREUpIFwKKyAgICYmICFzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAoREVDTF9OQU1FIChOT0RFKSksICJfX1BSRVRUWV9GVU5DVElPTl9fIikpCisKKy8qIE5vbnplcm8gaWYgdGhlIHRocmVhZC1sb2NhbCB2YXJpYWJsZSB3YXMgZGVjbGFyZWQgd2l0aCBfX3RocmVhZAorICAgYXMgb3Bwb3NlZCB0byB0aHJlYWRfbG9jYWwuICAqLworI2RlZmluZSBERUNMX0dOVV9UTFNfUChOT0RFKSBcCisgIChUUkVFX0xBTkdfRkxBR18wIChWQVJfREVDTF9DSEVDSyAoTk9ERSkpKQorCisvKiBUaGUgX1RZUEUgY29udGV4dCBpbiB3aGljaCB0aGlzIF9ERUNMIGFwcGVhcnMuICBUaGlzIGZpZWxkIGhvbGRzIHRoZQorICAgY2xhc3Mgd2hlcmUgYSB2aXJ0dWFsIGZ1bmN0aW9uIGluc3RhbmNlIGlzIGFjdHVhbGx5IGRlZmluZWQuICAqLworI2RlZmluZSBERUNMX0NMQVNTX0NPTlRFWFQoTk9ERSkgXAorICAoREVDTF9DTEFTU19TQ09QRV9QIChOT0RFKSA/IERFQ0xfQ09OVEVYVCAoTk9ERSkgOiBOVUxMX1RSRUUpCisKKy8qIEZvciBhIG5vbi1tZW1iZXIgZnJpZW5kIGZ1bmN0aW9uLCB0aGUgY2xhc3MgKGlmIGFueSkgaW4gd2hpY2ggdGhpcworICAgZnJpZW5kIHdhcyBkZWZpbmVkLiAgRm9yIGV4YW1wbGUsIGdpdmVuOgorCisgICAgIHN0cnVjdCBTIHsgZnJpZW5kIHZvaWQgZiAoKTsgfTsKKworICAgdGhlIERFQ0xfRlJJRU5EX0NPTlRFWFQgZm9yIGBmJyB3aWxsIGJlIGBTJy4gICovCisjZGVmaW5lIERFQ0xfRlJJRU5EX0NPTlRFWFQoTk9ERSkJCQkJXAorICAoKERFQ0xfREVDTEFSRVNfRlVOQ1RJT05fUCAoTk9ERSkJCQkJXAorICAgICYmIERFQ0xfRlJJRU5EX1AgKE5PREUpICYmICFERUNMX0ZVTkNUSU9OX01FTUJFUl9QIChOT0RFKSkJXAorICAgPyBMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5jb250ZXh0CQkJCVwKKyAgIDogTlVMTF9UUkVFKQorCisvKiBTZXQgdGhlIERFQ0xfRlJJRU5EX0NPTlRFWFQgZm9yIE5PREUgdG8gQ09OVEVYVC4gICovCisjZGVmaW5lIFNFVF9ERUNMX0ZSSUVORF9DT05URVhUKE5PREUsIENPTlRFWFQpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmNvbnRleHQgPSAoQ09OVEVYVCkpCisKKyNkZWZpbmUgQ1BfREVDTF9DT05URVhUKE5PREUpIFwKKyAgKCFERUNMX0ZJTEVfU0NPUEVfUCAoTk9ERSkgPyBERUNMX0NPTlRFWFQgKE5PREUpIDogZ2xvYmFsX25hbWVzcGFjZSkKKyNkZWZpbmUgQ1BfVFlQRV9DT05URVhUKE5PREUpIFwKKyAgKCFUWVBFX0ZJTEVfU0NPUEVfUCAoTk9ERSkgPyBUWVBFX0NPTlRFWFQgKE5PREUpIDogZ2xvYmFsX25hbWVzcGFjZSkKKyNkZWZpbmUgRlJPQl9DT05URVhUKE5PREUpIFwKKyAgKChOT0RFKSA9PSBnbG9iYWxfbmFtZXNwYWNlID8gREVDTF9DT05URVhUIChOT0RFKSA6IChOT0RFKSkKKworLyogMSBpZmYgTk9ERSBoYXMgbmFtZXNwYWNlIHNjb3BlLCBpbmNsdWRpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UuICAqLworI2RlZmluZSBERUNMX05BTUVTUEFDRV9TQ09QRV9QKE5PREUpCQkJCVwKKyAgKCFERUNMX1RFTVBMQVRFX1BBUk1fUCAoTk9ERSkJCQkJCVwKKyAgICYmIFRSRUVfQ09ERSAoQ1BfREVDTF9DT05URVhUIChOT0RFKSkgPT0gTkFNRVNQQUNFX0RFQ0wpCisKKyNkZWZpbmUgVFlQRV9OQU1FU1BBQ0VfU0NPUEVfUChOT0RFKSBcCisgIChUUkVFX0NPREUgKENQX1RZUEVfQ09OVEVYVCAoTk9ERSkpID09IE5BTUVTUEFDRV9ERUNMKQorCisjZGVmaW5lIE5BTUVTUEFDRV9TQ09QRV9QKE5PREUpIFwKKyAgKChERUNMX1AgKE5PREUpICYmIERFQ0xfTkFNRVNQQUNFX1NDT1BFX1AgKE5PREUpKSBcCisgICB8fCAoVFlQRV9QIChOT0RFKSAmJiBUWVBFX05BTUVTUEFDRV9TQ09QRV9QIChOT0RFKSkpCisKKy8qIDEgaWZmIE5PREUgaXMgYSBjbGFzcyBtZW1iZXIuICAqLworI2RlZmluZSBERUNMX0NMQVNTX1NDT1BFX1AoTk9ERSkgXAorICAoREVDTF9DT05URVhUIChOT0RFKSAmJiBUWVBFX1AgKERFQ0xfQ09OVEVYVCAoTk9ERSkpKQorCisjZGVmaW5lIFRZUEVfQ0xBU1NfU0NPUEVfUChOT0RFKSBcCisgIChUWVBFX0NPTlRFWFQgKE5PREUpICYmIFRZUEVfUCAoVFlQRV9DT05URVhUIChOT0RFKSkpCisKKy8qIDEgaWZmIE5PREUgaXMgZnVuY3Rpb24tbG9jYWwuICAqLworI2RlZmluZSBERUNMX0ZVTkNUSU9OX1NDT1BFX1AoTk9ERSkgXAorICAoREVDTF9DT05URVhUIChOT0RFKSBcCisgICAmJiBUUkVFX0NPREUgKERFQ0xfQ09OVEVYVCAoTk9ERSkpID09IEZVTkNUSU9OX0RFQ0wpCisKKyNkZWZpbmUgVFlQRV9GVU5DVElPTl9TQ09QRV9QKE5PREUpIFwKKyAgKFRZUEVfQ09OVEVYVCAoTk9ERSkgJiYgVFJFRV9DT0RFIChUWVBFX0NPTlRFWFQgKE5PREUpKSA9PSBGVU5DVElPTl9ERUNMKQorCisvKiAxIGlmZiBWQVJfREVDTCBub2RlIE5PREUgaXMgYSB0eXBlLWluZm8gZGVjbC4gIFRoaXMgZmxhZyBpcyBzZXQgZm9yCisgICBib3RoIHRoZSBwcmltYXJ5IHR5cGVpbmZvIG9iamVjdCBhbmQgdGhlIGFzc29jaWF0ZWQgTlRCUyBuYW1lLiAgKi8KKyNkZWZpbmUgREVDTF9USU5GT19QKE5PREUpIFRSRUVfTEFOR19GTEFHXzQgKFZBUl9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogMSBpZmYgVkFSX0RFQ0wgbm9kZSBOT0RFIGlzIHZpcnR1YWwgdGFibGUgb3IgVlRULiAgKi8KKyNkZWZpbmUgREVDTF9WVEFCTEVfT1JfVlRUX1AoTk9ERSkgVFJFRV9MQU5HX0ZMQUdfNSAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiAxIGlmZiBGVU5DVElPTl9UWVBFIG9yIE1FVEhPRF9UWVBFIGhhcyBhIHJlZi1xdWFsaWZpZXIgKGVpdGhlciAmIG9yICYmKS4gKi8KKyNkZWZpbmUgRlVOQ1RJT05fUkVGX1FVQUxJRklFRChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzQgKEZVTkNfT1JfTUVUSE9EX0NIRUNLIChOT0RFKSkKKworLyogMSBpZmYgRlVOQ1RJT05fVFlQRSBvciBNRVRIT0RfVFlQRSBoYXMgJiYtcmVmLXF1YWxpZmllci4gICovCisjZGVmaW5lIEZVTkNUSU9OX1JWQUxVRV9RVUFMSUZJRUQoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR181IChGVU5DX09SX01FVEhPRF9DSEVDSyAoTk9ERSkpCisKKy8qIFJldHVybnMgMSBpZmYgVkFSX0RFQ0wgaXMgYSBjb25zdHJ1Y3Rpb24gdmlydHVhbCB0YWJsZS4KKyAgIERFQ0xfVlRBQkxFX09SX1ZUVF9QIHdpbGwgYmUgdHJ1ZSBpbiB0aGlzIGNhc2UgYW5kIG11c3QgYmUgY2hlY2tlZAorICAgYmVmb3JlIHVzaW5nIHRoaXMgbWFjcm8uICAqLworI2RlZmluZSBERUNMX0NPTlNUUlVDVElPTl9WVEFCTEVfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzYgKFZBUl9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogMSBpZmYgTk9ERSBpcyBmdW5jdGlvbi1sb2NhbCwgYnV0IGZvciB0eXBlcy4gICovCisjZGVmaW5lIExPQ0FMX0NMQVNTX1AoTk9ERSkJCQkJXAorICAoZGVjbF9mdW5jdGlvbl9jb250ZXh0IChUWVBFX01BSU5fREVDTCAoTk9ERSkpICE9IE5VTExfVFJFRSkKKworLyogRm9yIGEgTkFNRVNQQUNFX0RFQ0w6IHRoZSBsaXN0IG9mIHVzaW5nIG5hbWVzcGFjZSBkaXJlY3RpdmVzCisgICBUaGUgUFVSUE9TRSBpcyB0aGUgdXNlZCBuYW1lc3BhY2UsIHRoZSB2YWx1ZSBpcyB0aGUgbmFtZXNwYWNlCisgICB0aGF0IGlzIHRoZSBjb21tb24gYW5jZXN0b3IuICAqLworI2RlZmluZSBERUNMX05BTUVTUEFDRV9VU0lORyhOT0RFKSBERUNMX1ZJTkRFWCAoTkFNRVNQQUNFX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiBJbiBhIE5BTUVTUEFDRV9ERUNMLCB0aGUgREVDTF9JTklUSUFMIGlzIHVzZWQgdG8gcmVjb3JkIGFsbCB1c2VycworICAgb2YgYSBuYW1lc3BhY2UsIHRvIHJlY29yZCB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlIG9mIHVzaW5nIG5hbWVzcGFjZS4gICovCisjZGVmaW5lIERFQ0xfTkFNRVNQQUNFX1VTRVJTKE5PREUpIERFQ0xfSU5JVElBTCAoTkFNRVNQQUNFX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiBJbiBhIE5BTUVTUEFDRV9ERUNMLCB0aGUgbGlzdCBvZiBuYW1lc3BhY2VzIHdoaWNoIGhhdmUgYXNzb2NpYXRlZAorICAgdGhlbXNlbHZlcyB3aXRoIHRoaXMgb25lLiAgKi8KKyNkZWZpbmUgREVDTF9OQU1FU1BBQ0VfQVNTT0NJQVRJT05TKE5PREUpIFwKKyAgKE5BTUVTUEFDRV9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF9ub25fY29tbW9uLnNhdmVkX3RyZWUpCisKKy8qIEluIGEgTkFNRVNQQUNFX0RFQ0wsIHBvaW50cyB0byB0aGUgb3JpZ2luYWwgbmFtZXNwYWNlIGlmIHRoaXMgaXMKKyAgIGEgbmFtZXNwYWNlIGFsaWFzLiAgKi8KKyNkZWZpbmUgREVDTF9OQU1FU1BBQ0VfQUxJQVMoTk9ERSkgXAorCURFQ0xfQUJTVFJBQ1RfT1JJR0lOIChOQU1FU1BBQ0VfREVDTF9DSEVDSyAoTk9ERSkpCisjZGVmaW5lIE9SSUdJTkFMX05BTUVTUEFDRShOT0RFKSAgXAorICAoREVDTF9OQU1FU1BBQ0VfQUxJQVMgKE5PREUpID8gREVDTF9OQU1FU1BBQ0VfQUxJQVMgKE5PREUpIDogKE5PREUpKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgdGhlIHN0ZCBuYW1lc3BhY2UuICAqLworI2RlZmluZSBERUNMX05BTUVTUEFDRV9TVERfUChOT0RFKQkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gTkFNRVNQQUNFX0RFQ0wJCQlcCisgICAmJiBDUF9ERUNMX0NPTlRFWFQgKE5PREUpID09IGdsb2JhbF9uYW1lc3BhY2UJXAorICAgJiYgREVDTF9OQU1FIChOT0RFKSA9PSBzdGRfaWRlbnRpZmllcikKKworLyogSW4gYSBUUkVFX0xJU1QgY29uY2F0ZW5hdGluZyB1c2luZyBkaXJlY3RpdmVzLCBpbmRpY2F0ZSBpbmRpcmVjdAorICAgZGlyZWN0aXZlcyAgKi8KKyNkZWZpbmUgVFJFRV9JTkRJUkVDVF9VU0lORyhOT0RFKSBUUkVFX0xBTkdfRkxBR18wIChUUkVFX0xJU1RfQ0hFQ0sgKE5PREUpKQorCisvKiBJbiBhIFRSRUVfTElTVCBpbiBhbiBhdHRyaWJ1dGUgbGlzdCwgaW5kaWNhdGVzIHRoYXQgdGhlIGF0dHJpYnV0ZQorICAgbXVzdCBiZSBhcHBsaWVkIGF0IGluc3RhbnRpYXRpb24gdGltZS4gICovCisjZGVmaW5lIEFUVFJfSVNfREVQRU5ERU5UKE5PREUpIFRSRUVfTEFOR19GTEFHXzAgKFRSRUVfTElTVF9DSEVDSyAoTk9ERSkpCisKK2V4dGVybiB0cmVlIGRlY2xfc2hhZG93ZWRfZm9yX3Zhcl9sb29rdXAgKHRyZWUpOworZXh0ZXJuIHZvaWQgZGVjbF9zaGFkb3dlZF9mb3JfdmFyX2luc2VydCAodHJlZSwgdHJlZSk7CisKKy8qIE5vbiB6ZXJvIGlmIHRoaXMgaXMgYSB1c2luZyBkZWNsIGZvciBhIGRlcGVuZGVudCBzY29wZS4gKi8KKyNkZWZpbmUgREVDTF9ERVBFTkRFTlRfUChOT0RFKSBERUNMX0xBTkdfRkxBR18wIChVU0lOR19ERUNMX0NIRUNLIChOT0RFKSkKKworLyogVGhlIHNjb3BlIG5hbWVkIGluIGEgdXNpbmcgZGVjbC4gICovCisjZGVmaW5lIFVTSU5HX0RFQ0xfU0NPUEUoTk9ERSkgVFJFRV9UWVBFIChVU0lOR19ERUNMX0NIRUNLIChOT0RFKSkKKworLyogVGhlIGRlY2xzIG5hbWVkIGJ5IGEgdXNpbmcgZGVjbC4gICovCisjZGVmaW5lIFVTSU5HX0RFQ0xfREVDTFMoTk9ERSkgREVDTF9JTklUSUFMIChVU0lOR19ERUNMX0NIRUNLIChOT0RFKSkKKworLyogTm9uIHplcm8gaWYgdGhlIHVzaW5nIGRlY2wgcmVmZXJzIHRvIGEgZGVwZW5kZW50IHR5cGUuICAqLworI2RlZmluZSBVU0lOR19ERUNMX1RZUEVOQU1FX1AoTk9ERSkgREVDTF9MQU5HX0ZMQUdfMSAoVVNJTkdfREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIEluIGEgVkFSX0RFQ0wsIHRydWUgaWYgd2UgaGF2ZSBhIHNoYWRvd2VkIGxvY2FsIHZhcmlhYmxlCisgICBpbiB0aGUgc2hhZG93ZWQgdmFyIHRhYmxlIGZvciB0aGlzIFZBUl9ERUNMLiAgKi8KKyNkZWZpbmUgREVDTF9IQVNfU0hBRE9XRURfRk9SX1ZBUl9QKE5PREUpIFwKKyAgKFZBUl9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5zaGFkb3dlZF9mb3JfdmFyX3ApCisKKy8qIEluIGEgVkFSX0RFQ0wgZm9yIGEgdmFyaWFibGUgZGVjbGFyZWQgaW4gYSBmb3Igc3RhdGVtZW50LAorICAgdGhpcyBpcyB0aGUgc2hhZG93ZWQgKGxvY2FsKSB2YXJpYWJsZS4gICovCisjZGVmaW5lIERFQ0xfU0hBRE9XRURfRk9SX1ZBUihOT0RFKSBcCisgIChERUNMX0hBU19TSEFET1dFRF9GT1JfVkFSX1AoTk9ERSkgPyBkZWNsX3NoYWRvd2VkX2Zvcl92YXJfbG9va3VwIChOT0RFKSA6IE5VTEwpCisKKyNkZWZpbmUgU0VUX0RFQ0xfU0hBRE9XRURfRk9SX1ZBUihOT0RFLCBWQUwpIFwKKyAgKGRlY2xfc2hhZG93ZWRfZm9yX3Zhcl9pbnNlcnQgKE5PREUsIFZBTCkpCisKKy8qIEluIGEgRlVOQ1RJT05fREVDTCwgdGhpcyBpcyBub256ZXJvIGlmIHRoaXMgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4KKyAgIHRoZSBjbGFzcyBkZWZpbml0aW9uLiAgV2UgaGF2ZSBzYXZlZCBhd2F5IHRoZSB0ZXh0IG9mIHRoZSBmdW5jdGlvbiwKKyAgIGJ1dCBoYXZlIG5vdCB5ZXQgcHJvY2Vzc2VkIGl0LiAgKi8KKyNkZWZpbmUgREVDTF9QRU5ESU5HX0lOTElORV9QKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPnBlbmRpbmdfaW5saW5lX3ApCisKKy8qIElmIERFQ0xfUEVORElOR19JTkxJTkVfUCBob2xkcywgdGhpcyBpcyB0aGUgc2F2ZWQgdGV4dCBvZiB0aGUKKyAgIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9QRU5ESU5HX0lOTElORV9JTkZPKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPnUucGVuZGluZ19pbmxpbmVfaW5mbykKKworLyogTm9uemVybyBmb3IgVFlQRV9ERUNMIG1lYW5zIHRoYXQgaXQgd2FzIHdyaXR0ZW4gJ3VzaW5nIG5hbWUgPSB0eXBlJy4gICovCisjZGVmaW5lIFRZUEVfREVDTF9BTElBU19QKE5PREUpIFwKKyAgREVDTF9MQU5HX0ZMQUdfNiAoVFlQRV9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogTm9uemVybyBmb3IgYSB0eXBlIHdoaWNoIGlzIGFuIGFsaWFzIGZvciBhbm90aGVyIHR5cGU7IGkuZSwgYSB0eXBlCisgICB3aGljaCBkZWNsYXJhdGlvbiB3YXMgd3JpdHRlbiAndXNpbmcgbmFtZS1vZi10eXBlID0KKyAgIGFub3RoZXItdHlwZScuICAqLworI2RlZmluZSBUWVBFX0FMSUFTX1AoTk9ERSkJCQlcCisgIChUWVBFX1AgKE5PREUpCQkJCVwKKyAgICYmIFRZUEVfTkFNRSAoTk9ERSkJCQkJXAorICAgJiYgVFJFRV9DT0RFIChUWVBFX05BTUUgKE5PREUpKSA9PSBUWVBFX0RFQ0wJXAorICAgJiYgVFlQRV9ERUNMX0FMSUFTX1AgKFRZUEVfTkFNRSAoTk9ERSkpKQorCisvKiBGb3IgYSBjbGFzcyB0eXBlOiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbWFueSBmaWVsZHMsIHdlJ2xsIHNvcnQgdGhlbQorICAgYW5kIHB1dCB0aGVtIGludG8gYSBUUkVFX1ZFQy4gICovCisjZGVmaW5lIENMQVNTVFlQRV9TT1JURURfRklFTERTKE5PREUpIFwKKyAgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPnNvcnRlZF9maWVsZHMpCisKKy8qIElmIG5vbi1OVUxMIGZvciBhIFZBUl9ERUNMLCBGVU5DVElPTl9ERUNMLCBUWVBFX0RFQ0wgb3IKKyAgIFRFTVBMQVRFX0RFQ0wsIHRoZSBlbnRpdHkgaXMgZWl0aGVyIGEgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gKGlmCisgICBERUNMX1VTRV9URU1QTEFURSBpcyBub256ZXJvKSBvciB0aGUgYWJzdHJhY3QgaW5zdGFuY2Ugb2YgdGhlCisgICB0ZW1wbGF0ZSBpdHNlbGYuCisKKyAgIEluIGVpdGhlciBjYXNlLCBERUNMX1RFTVBMQVRFX0lORk8gaXMgYSBUUkVFX0xJU1QsIHdob3NlCisgICBUUkVFX1BVUlBPU0UgaXMgdGhlIFRFTVBMQVRFX0RFQ0wgb2Ygd2hpY2ggdGhpcyBlbnRpdHkgaXMgYQorICAgc3BlY2lhbGl6YXRpb24gb3IgYWJzdHJhY3QgaW5zdGFuY2UuICBUaGUgVFJFRV9WQUxVRSBpcyB0aGUKKyAgIHRlbXBsYXRlIGFyZ3VtZW50cyB1c2VkIHRvIHNwZWNpYWxpemUgdGhlIHRlbXBsYXRlLgorICAgCisgICBDb25zaWRlcjoKKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBTIHsgZnJpZW5kIHZvaWQgZihUKSB7fSB9OworCisgICBJbiB0aGlzIGNhc2UsIFM8aW50Pjo6ZiBpcywgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgY29tcGlsZXIsCisgICBhbiBpbnN0YW50aWF0aW9uIG9mIGEgdGVtcGxhdGUgLS0gYnV0LCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mCisgICB0aGUgbGFuZ3VhZ2UsIGVhY2ggaW5zdGFudGlhdGlvbiBvZiBTIHJlc3VsdHMgaW4gYSB3aG9sbHkgdW5yZWxhdGVkCisgICBnbG9iYWwgZnVuY3Rpb24gZi4gIEluIHRoaXMgY2FzZSwgREVDTF9URU1QTEFURV9JTkZPIGZvciBTPGludD46OmYKKyAgIHdpbGwgYmUgbm9uLU5VTEwsIGJ1dCBERUNMX1VTRV9URU1QTEFURSB3aWxsIGJlIHplcm8uICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX0lORk8oTk9ERSkgXAorICAoREVDTF9MQU5HX1NQRUNJRklDIChWQVJfVEVNUExfVFlQRV9GSUVMRF9PUl9GVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKSkgXAorICAgLT51Lm1pbi50ZW1wbGF0ZV9pbmZvKQorCisvKiBGb3IgYSBWQVJfREVDTCwgaW5kaWNhdGVzIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGFjdHVhbGx5IGEKKyAgIG5vbi1zdGF0aWMgZGF0YSBtZW1iZXIgb2YgYW5vbnltb3VzIHVuaW9uIHRoYXQgaGFzIGJlZW4gcHJvbW90ZWQgdG8KKyAgIHZhcmlhYmxlIHN0YXR1cy4gICovCisjZGVmaW5lIERFQ0xfQU5PTl9VTklPTl9WQVJfUChOT0RFKSBcCisgIChERUNMX0xBTkdfRkxBR180IChWQVJfREVDTF9DSEVDSyAoTk9ERSkpKQorCisvKiBUZW1wbGF0ZSBpbmZvcm1hdGlvbiBmb3IgYSBSRUNPUkRfVFlQRSBvciBVTklPTl9UWVBFLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1RFTVBMQVRFX0lORk8oTk9ERSkgXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChSRUNPUkRfT1JfVU5JT05fQ0hFQ0sgKE5PREUpKS0+dGVtcGxhdGVfaW5mbykKKworLyogVGVtcGxhdGUgaW5mb3JtYXRpb24gZm9yIGFuIEVOVU1FUkFMX1RZUEUuICBBbHRob3VnaCBhbiBlbnVtZXJhdGlvbiBtYXkKKyAgIG5vdCBiZSBhIHByaW1hcnkgdGVtcGxhdGUsIGl0IG1heSBiZSBkZWNsYXJlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIGEKKyAgIHByaW1hcnkgdGVtcGxhdGUgYW5kIHRoZSBlbnVtZXJhdGlvbiBjb25zdGFudHMgbWF5IGRlcGVuZCBvbgorICAgbm9uLXR5cGUgdGVtcGxhdGUgcGFyYW1ldGVycy4gICovCisjZGVmaW5lIEVOVU1fVEVNUExBVEVfSU5GTyhOT0RFKSBcCisgIChUWVBFX0xBTkdfU0xPVF8xIChFTlVNRVJBTF9UWVBFX0NIRUNLIChOT0RFKSkpCisKKy8qIFRlbXBsYXRlIGluZm9ybWF0aW9uIGZvciBhIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFtZXRlci4gICovCisjZGVmaW5lIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk1fVEVNUExBVEVfSU5GTyhOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk1fVFlQRV9DSEVDSyAoTk9ERSkpIFwKKyAgIC0+dGVtcGxhdGVfaW5mbykKKworLyogVGVtcGxhdGUgaW5mb3JtYXRpb24gZm9yIGFuIEVOVU1FUkFMXywgUkVDT1JEXywgVU5JT05fVFlQRSwgb3IKKyAgIEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0gdHlwZS4gIE5vdGUgdGhhdCBpZiBOT0RFIGlzIGEKKyAgIHNwZWNpYWxpemF0aW9uIG9mIGFuIGFsaWFzIHRlbXBsYXRlLCB0aGlzIGFjY2Vzc29yIHJldHVybnMgdGhlCisgICB0ZW1wbGF0ZSBpbmZvIGZvciB0aGUgYWxpYXMgdGVtcGxhdGUsIG5vdCB0aGUgb25lIChpZiBhbnkpIGZvciB0aGUKKyAgIHRlbXBsYXRlIG9mIHRoZSB1bmRlcmx5aW5nIHR5cGUuICAqLworI2RlZmluZSBUWVBFX1RFTVBMQVRFX0lORk8oTk9ERSkJCQkJCVwKKyAgKChUWVBFX0FMSUFTX1AgKE5PREUpICYmIERFQ0xfTEFOR19TUEVDSUZJQyAoVFlQRV9OQU1FIChOT0RFKSkpCVwKKyAgID8gKERFQ0xfTEFOR19TUEVDSUZJQyAoVFlQRV9OQU1FIChOT0RFKSkJCQkJXAorICAgICAgPyBERUNMX1RFTVBMQVRFX0lORk8gKFRZUEVfTkFNRSAoTk9ERSkpCQkJCVwKKyAgICAgIDogTlVMTF9UUkVFKQkJCQkJCQlcCisgICA6ICgoVFJFRV9DT0RFIChOT0RFKSA9PSBFTlVNRVJBTF9UWVBFKQkJCQlcCisgICAgICA/IEVOVU1fVEVNUExBVEVfSU5GTyAoTk9ERSkJCQkJCVwKKyAgICAgIDogKChUUkVFX0NPREUgKE5PREUpID09IEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0pCQlcCisJID8gVEVNUExBVEVfVEVNUExBVEVfUEFSTV9URU1QTEFURV9JTkZPIChOT0RFKQkJCVwKKwkgOiAoQ0xBU1NfVFlQRV9QIChOT0RFKQkJCQkJCVwKKwkgICAgPyBDTEFTU1RZUEVfVEVNUExBVEVfSU5GTyAoTk9ERSkJCQkJXAorCSAgICA6IE5VTExfVFJFRSkpKSkKKworCisvKiBTZXQgdGhlIHRlbXBsYXRlIGluZm9ybWF0aW9uIGZvciBhbiBFTlVNRVJBTF8sIFJFQ09SRF8sIG9yCisgICBVTklPTl9UWVBFIHRvIFZBTC4gICovCisjZGVmaW5lIFNFVF9UWVBFX1RFTVBMQVRFX0lORk8oTk9ERSwgVkFMKQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IEVOVU1FUkFMX1RZUEUJCQkJCVwKKyAgID8gKEVOVU1fVEVNUExBVEVfSU5GTyAoTk9ERSkgPSAoVkFMKSkJCQkJXAorICAgOiAoKENMQVNTX1RZUEVfUCAoTk9ERSkgJiYgIVRZUEVfQUxJQVNfUCAoTk9ERSkpCQkJXAorICAgICAgPyAoQ0xBU1NUWVBFX1RFTVBMQVRFX0lORk8gKE5PREUpID0gKFZBTCkpCQkJXAorICAgICAgOiAoREVDTF9URU1QTEFURV9JTkZPIChUWVBFX05BTUUgKE5PREUpKSA9IChWQUwpKSkpCisKKyNkZWZpbmUgVElfVEVNUExBVEUoTk9ERSkgVFJFRV9UWVBFIChURU1QTEFURV9JTkZPX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgVElfQVJHUyhOT0RFKSBUUkVFX0NIQUlOIChURU1QTEFURV9JTkZPX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgVElfUEVORElOR19URU1QTEFURV9GTEFHKE5PREUpIFRSRUVfTEFOR19GTEFHXzEgKE5PREUpCisvKiBGb3IgYSBnaXZlbiBUUkVFX1ZFQyBjb250YWluaW5nIGEgdGVtcGxhdGUgYXJndW1lbnQgbGlzdCwKKyAgIHRoaXMgcHJvcGVydHkgY29udGFpbnMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCBhcmUgbm90CisgICBkZWZhdWx0ZWQuICAqLworI2RlZmluZSBOT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UKE5PREUpIFRSRUVfQ0hBSU4gKFRSRUVfVkVDX0NIRUNLIChOT0RFKSkKKy8qIEJlbG93IGFyZSB0aGUgc2V0dGVyIGFuZCBnZXR0ZXIgb2YgdGhlIE5PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQKKyAgIHByb3BlcnR5LiAgKi8KKyNkZWZpbmUgU0VUX05PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQoTk9ERSwgSU5UX1ZBTFVFKSBcCisgIE5PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQoTk9ERSkgPSBidWlsZF9pbnRfY3N0IChOVUxMX1RSRUUsIElOVF9WQUxVRSkKKyNpZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKKyNkZWZpbmUgR0VUX05PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQoTk9ERSkgXAorICAgIGludF9jc3RfdmFsdWUgKE5PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQgKE5PREUpKQorI2Vsc2UKKyNkZWZpbmUgR0VUX05PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQoTk9ERSkgXAorICBOT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5UIChOT0RFKSBcCisgID8gaW50X2NzdF92YWx1ZSAoTk9OX0RFRkFVTFRfVEVNUExBVEVfQVJHU19DT1VOVCAoTk9ERSkpIFwKKyAgOiBUUkVFX1ZFQ19MRU5HVEggKElOTkVSTU9TVF9URU1QTEFURV9BUkdTIChOT0RFKSkKKyNlbmRpZgorLyogVGhlIGxpc3Qgb2YgdHlwZWRlZnMgLSB1c2VkIGluIHRoZSB0ZW1wbGF0ZSAtIHRoYXQgbmVlZAorICAgYWNjZXNzIGNoZWNraW5nIGF0IHRlbXBsYXRlIGluc3RhbnRpYXRpb24gdGltZS4gICovCisjZGVmaW5lIFRJX1RZUEVERUZTX05FRURJTkdfQUNDRVNTX0NIRUNLSU5HKE5PREUpIFwKKyAgKChzdHJ1Y3QgdHJlZV90ZW1wbGF0ZV9pbmZvKilURU1QTEFURV9JTkZPX0NIRUNLIFwKKyAgICAgKE5PREUpKS0+dHlwZWRlZnNfbmVlZGluZ19hY2Nlc3NfY2hlY2tpbmcKKworLyogV2UgdXNlIFRSRUVfVkVDcyB0byBob2xkIHRlbXBsYXRlIGFyZ3VtZW50cy4gIElmIHRoZXJlIGlzIG9ubHkgb25lCisgICBsZXZlbCBvZiB0ZW1wbGF0ZSBhcmd1bWVudHMsIHRoZW4gdGhlIFRSRUVfVkVDIGNvbnRhaW5zIHRoZQorICAgYXJndW1lbnRzIGRpcmVjdGx5LiAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBsZXZlbCBvZiB0ZW1wbGF0ZQorICAgYXJndW1lbnRzLCB0aGVuIGVhY2ggZW50cnkgaW4gdGhlIFRSRUVfVkVDIGlzIGl0c2VsZiBhIFRSRUVfVkVDLAorICAgY29udGFpbmluZyB0aGUgdGVtcGxhdGUgYXJndW1lbnRzIGZvciBhIHNpbmdsZSBsZXZlbC4gIFRoZSBmaXJzdAorICAgZW50cnkgaW4gdGhlIG91dGVyIFRSRUVfVkVDIGlzIHRoZSBvdXRlcm1vc3QgbGV2ZWwgb2YgdGVtcGxhdGUKKyAgIHBhcmFtZXRlcnM7IHRoZSBsYXN0IGlzIHRoZSBpbm5lcm1vc3QuCisKKyAgIEl0IGlzIGluY29ycmVjdCB0byBldmVyIGZvcm0gYSB0ZW1wbGF0ZSBhcmd1bWVudCB2ZWN0b3IgY29udGFpbmluZworICAgb25seSBvbmUgbGV2ZWwgb2YgYXJndW1lbnRzLCBidXQgd2hpY2ggaXMgYSBUUkVFX1ZFQyBjb250YWluaW5nIGFzCisgICBpdHMgb25seSBlbnRyeSB0aGUgVFJFRV9WRUMgZm9yIHRoYXQgbGV2ZWwuCisKKyAgIEZvciBlYWNoIFRSRUVfVkVDIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBmb3IgYSBzaW5nbGUKKyAgIGxldmVsLCBpdCdzIHBvc3NpYmxlIHRvIGdldCBvciBzZXQgdGhlIG51bWJlciBvZiBub24gZGVmYXVsdGVkCisgICB0ZW1wbGF0ZSBhcmd1bWVudHMgYnkgdXNpbmcgdGhlIGFjY2Vzc29yIG1hY3JvcworICAgR0VUX05PTl9ERUZBVUxUX1RFTVBMQVRFX0FSR1NfQ09VTlQgb3IKKyAgIFNFVF9OT05fREVGQVVMVF9URU1QTEFURV9BUkdTX0NPVU5ULiAgKi8KKworLyogTm9uemVybyBpZiB0aGUgdGVtcGxhdGUgYXJndW1lbnRzIGlzIGFjdHVhbGx5IGEgdmVjdG9yIG9mIHZlY3RvcnMsCisgICByYXRoZXIgdGhhbiBqdXN0IGEgdmVjdG9yLiAgKi8KKyNkZWZpbmUgVE1QTF9BUkdTX0hBVkVfTVVMVElQTEVfTEVWRUxTKE5PREUpCQkgICAgIFwKKyAgKE5PREUgJiYgVFJFRV9WRUNfTEVOR1RIIChOT0RFKSAmJiBUUkVFX1ZFQ19FTFQgKE5PREUsIDApICBcCisgICAmJiBUUkVFX0NPREUgKFRSRUVfVkVDX0VMVCAoTk9ERSwgMCkpID09IFRSRUVfVkVDKQorCisvKiBUaGUgZGVwdGggb2YgYSB0ZW1wbGF0ZSBhcmd1bWVudCB2ZWN0b3IuICBXaGVuIGNhbGxlZCBkaXJlY3RseSBieQorICAgdGhlIHBhcnNlciwgd2UgdXNlIGEgVFJFRV9MSVNUIHJhdGhlciB0aGFuIGEgVFJFRV9WRUMgdG8gcmVwcmVzZW50CisgICB0ZW1wbGF0ZSBhcmd1bWVudHMuICBJbiBmYWN0LCB3ZSBtYXkgZXZlbiBzZWUgTlVMTF9UUkVFIGlmIHRoZXJlCisgICBhcmUgbm8gdGVtcGxhdGUgYXJndW1lbnRzLiAgSW4gYm90aCBvZiB0aG9zZSBjYXNlcywgdGhlcmUgaXMgb25seQorICAgb25lIGxldmVsIG9mIHRlbXBsYXRlIGFyZ3VtZW50cy4gICovCisjZGVmaW5lIFRNUExfQVJHU19ERVBUSChOT0RFKQkJCQkJXAorICAoVE1QTF9BUkdTX0hBVkVfTVVMVElQTEVfTEVWRUxTIChOT0RFKSA/IFRSRUVfVkVDX0xFTkdUSCAoTk9ERSkgOiAxKQorCisvKiBUaGUgTEVWRUx0aCBsZXZlbCBvZiB0aGUgdGVtcGxhdGUgQVJHUy4gIFRoZSBvdXRlcm1vc3QgbGV2ZWwgb2YKKyAgIGFyZ3MgaXMgbGV2ZWwgMSwgbm90IGxldmVsIDAuICAqLworI2RlZmluZSBUTVBMX0FSR1NfTEVWRUwoQVJHUywgTEVWRUwpCQlcCisgIChUTVBMX0FSR1NfSEFWRV9NVUxUSVBMRV9MRVZFTFMgKEFSR1MpCVwKKyAgID8gVFJFRV9WRUNfRUxUIChBUkdTLCAoTEVWRUwpIC0gMSkgOiAoQVJHUykpCisKKy8qIFNldCB0aGUgTEVWRUx0aCBsZXZlbCBvZiB0aGUgdGVtcGxhdGUgQVJHUyB0byBWQUwuICBUaGlzIG1hY3JvIGRvZXMKKyAgIG5vdCB3b3JrIHdpdGggc2luZ2xlLWxldmVsIGFyZ3VtZW50IHZlY3RvcnMuICAqLworI2RlZmluZSBTRVRfVE1QTF9BUkdTX0xFVkVMKEFSR1MsIExFVkVMLCBWQUwpCVwKKyAgKFRSRUVfVkVDX0VMVCAoQVJHUywgKExFVkVMKSAtIDEpID0gKFZBTCkpCisKKy8qIEFjY2Vzc2VzIHRoZSBJRFh0aCBwYXJhbWV0ZXIgaW4gdGhlIExFVkVMdGggbGV2ZWwgb2YgdGhlIEFSR1MuICAqLworI2RlZmluZSBUTVBMX0FSRyhBUkdTLCBMRVZFTCwgSURYKQkJCQlcCisgIChUUkVFX1ZFQ19FTFQgKFRNUExfQVJHU19MRVZFTCAoQVJHUywgTEVWRUwpLCBJRFgpKQorCisvKiBHaXZlbiBhIHNpbmdsZSBsZXZlbCBvZiB0ZW1wbGF0ZSBhcmd1bWVudHMgaW4gTk9ERSwgcmV0dXJuIHRoZQorICAgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCisjZGVmaW5lIE5VTV9UTVBMX0FSR1MoTk9ERSkJCQkJXAorICAoVFJFRV9WRUNfTEVOR1RIIChOT0RFKSkKKworLyogUmV0dXJucyB0aGUgaW5uZXJtb3N0IGxldmVsIG9mIHRlbXBsYXRlIGFyZ3VtZW50cyBpbiBBUkdTLiAgKi8KKyNkZWZpbmUgSU5ORVJNT1NUX1RFTVBMQVRFX0FSR1MoTk9ERSkgXAorICAoZ2V0X2lubmVybW9zdF90ZW1wbGF0ZV9hcmdzICgoTk9ERSksIDEpKQorCisvKiBUaGUgbnVtYmVyIG9mIGxldmVscyBvZiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGdpdmVuIGJ5IE5PREUuICAqLworI2RlZmluZSBUTVBMX1BBUk1TX0RFUFRIKE5PREUpIFwKKyAgKChIT1NUX1dJREVfSU5UKSBUUkVFX0lOVF9DU1RfTE9XIChUUkVFX1BVUlBPU0UgKE5PREUpKSkKKworLyogVGhlIFRFTVBMQVRFX0RFQ0wgaW5zdGFudGlhdGVkIG9yIHNwZWNpYWxpemVkIGJ5IE5PREUuICBUaGlzCisgICBURU1QTEFURV9ERUNMIHdpbGwgYmUgdGhlIGltbWVkaWF0ZSBwYXJlbnQsIG5vdCB0aGUgbW9zdCBnZW5lcmFsCisgICB0ZW1wbGF0ZS4gIEZvciBleGFtcGxlLCBpbjoKKworICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBTIHsgdGVtcGxhdGUgPGNsYXNzIFU+IHZvaWQgZihVKTsgfQorCisgICB0aGUgRlVOQ1RJT05fREVDTCBmb3IgUzxpbnQ+OjpmPGRvdWJsZT4gd2lsbCBoYXZlLCBhcyBpdHMKKyAgIERFQ0xfVElfVEVNUExBVEUsIGB0ZW1wbGF0ZSA8Y2xhc3MgVT4gUzxpbnQ+OjpmPFU+Jy4KKworICAgQXMgYSBzcGVjaWFsIGNhc2UsIGZvciBhIG1lbWJlciBmcmllbmQgdGVtcGxhdGUgb2YgYSB0ZW1wbGF0ZQorICAgY2xhc3MsIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgYSBURU1QTEFURV9ERUNMLCBidXQgcmF0aGVyIGFuCisgICBJREVOVElGSUVSX05PREUgb3IgT1ZFUkxPQUQgaW5kaWNhdGluZyB0aGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUgYW5kCisgICBhbnkgZXhwbGljaXQgdGVtcGxhdGUgYXJndW1lbnRzIHByb3ZpZGVkLiAgRm9yIGV4YW1wbGUsIGluOgorCisgICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgUyB7IGZyaWVuZCB2b2lkIGY8aW50PihpbnQsIGRvdWJsZSk7IH0KKworICAgdGhlIERFQ0xfVElfVEVNUExBVEUgd2lsbCBiZSBhbiBJREVOVElGSUVSX05PREUgZm9yIGBmJyBhbmQgdGhlCisgICBERUNMX1RJX0FSR1Mgd2lsbCBiZSB7aW50fS4KKworICAgRm9yIGEgRklFTERfREVDTCB3aXRoIGEgbm9uLXN0YXRpYyBkYXRhIG1lbWJlciBpbml0aWFsaXplciwgdGhpcyB2YWx1ZQorICAgaXMgdGhlIEZJRUxEX0RFQ0wgaXQgd2FzIGluc3RhbnRpYXRlZCBmcm9tLiAgKi8KKyNkZWZpbmUgREVDTF9USV9URU1QTEFURShOT0RFKSAgICAgIFRJX1RFTVBMQVRFIChERUNMX1RFTVBMQVRFX0lORk8gKE5PREUpKQorCisvKiBUaGUgdGVtcGxhdGUgYXJndW1lbnRzIHVzZWQgdG8gb2J0YWluIHRoaXMgZGVjbCBmcm9tIHRoZSBtb3N0CisgICBnZW5lcmFsIGZvcm0gb2YgREVDTF9USV9URU1QTEFURS4gIEZvciB0aGUgZXhhbXBsZSBnaXZlbiBmb3IKKyAgIERFQ0xfVElfVEVNUExBVEUsIHRoZSBERUNMX1RJX0FSR1Mgd2lsbCBiZSB7aW50LCBkb3VibGV9LiAgVGhlc2UKKyAgIGFyZSBhbHdheXMgdGhlIGZ1bGwgc2V0IG9mIGFyZ3VtZW50cyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSB0aGlzCisgICBkZWNsYXJhdGlvbiBmcm9tIHRoZSBtb3N0IGdlbmVyYWwgdGVtcGxhdGUgc3BlY2lhbGl6ZWQgaGVyZS4gICovCisjZGVmaW5lIERFQ0xfVElfQVJHUyhOT0RFKQkgICAgVElfQVJHUyAoREVDTF9URU1QTEFURV9JTkZPIChOT0RFKSkKKworLyogVGhlIFRFTVBMQVRFX0RFQ0wgYXNzb2NpYXRlZCB3aXRoIE5PREUsIGEgY2xhc3MgdHlwZS4gIEV2ZW4gaWYgTk9ERQorICAgd2lsbCBiZSBnZW5lcmF0ZWQgZnJvbSBhIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24sIHRoZSBURU1QTEFURV9ERUNMCisgICByZWZlcnJlZCB0byBoZXJlIHdpbGwgYmUgdGhlIG9yaWdpbmFsIHRlbXBsYXRlLiAgRm9yIGV4YW1wbGUsCisgICBnaXZlbjoKKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBTIHt9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBTPFQqPiB7fTsKKyAgICAgIAorICAgdGhlIENMQVNTVFBZRV9USV9URU1QTEFURSBmb3IgUzxpbnQqPiB3aWxsIGJlIFMsIG5vdCB0aGUgUzxUKj4uICAqLworI2RlZmluZSBDTEFTU1RZUEVfVElfVEVNUExBVEUoTk9ERSkgVElfVEVNUExBVEUgKENMQVNTVFlQRV9URU1QTEFURV9JTkZPIChOT0RFKSkKKyNkZWZpbmUgQ0xBU1NUWVBFX1RJX0FSR1MoTk9ERSkgICAgIFRJX0FSR1MgKENMQVNTVFlQRV9URU1QTEFURV9JTkZPIChOT0RFKSkKKworLyogRm9yIGEgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiBUWVBFLCByZXR1cm5zIHRoZSBUWVBFIGNvcnJlc3BvbmRpbmcKKyAgIHRvIHRoZSBwcmltYXJ5IHRlbXBsYXRlLiAgT3RoZXJ3aXNlIHJldHVybnMgVFlQRSBpdHNlbGYuICAqLworI2RlZmluZSBDTEFTU1RZUEVfUFJJTUFSWV9URU1QTEFURV9UWVBFKFRZUEUpCQkJCVwKKyAgKChDTEFTU1RZUEVfVVNFX1RFTVBMQVRFICgoVFlQRSkpCQkJCQlcCisgICAgJiYgIUNMQVNTVFlQRV9URU1QTEFURV9TUEVDSUFMSVpBVElPTiAoKFRZUEUpKSkJCQlcCisgICA/IFRSRUVfVFlQRSAoREVDTF9URU1QTEFURV9SRVNVTFQgKERFQ0xfUFJJTUFSWV9URU1QTEFURQkJXAorCQkJCSAgICAgIChDTEFTU1RZUEVfVElfVEVNUExBVEUgKChUWVBFKSkpKSkgXAorICAgOiAoVFlQRSkpCisKKy8qIExpa2UgQ0xBU1NfVElfVEVNUExBVEUsIGJ1dCBhbHNvIHdvcmtzIGZvciBFTlVNRVJBTF9UWVBFcy4gICovCisjZGVmaW5lIFRZUEVfVElfVEVNUExBVEUoTk9ERSkJCQlcCisgIChUSV9URU1QTEFURSAoVFlQRV9URU1QTEFURV9JTkZPIChOT0RFKSkpCisKKy8qIExpa2UgREVDTF9USV9BUkdTLCBidXQgZm9yIGFuIEVOVU1FUkFMXywgUkVDT1JEXywgb3IgVU5JT05fVFlQRS4gICovCisjZGVmaW5lIFRZUEVfVElfQVJHUyhOT0RFKQkJCVwKKyAgKFRJX0FSR1MgKFRZUEVfVEVNUExBVEVfSU5GTyAoTk9ERSkpKQorCisjZGVmaW5lIElOTkVSTU9TVF9URU1QTEFURV9QQVJNUyhOT0RFKSAgVFJFRV9WQUxVRSAoTk9ERSkKKworLyogTm9uemVybyBpZiBOT0RFIChhIFRFTVBMQVRFX0RFQ0wpIGlzIGEgbWVtYmVyIHRlbXBsYXRlLCBpbiB0aGUKKyAgIHNlbnNlIG9mIFt0ZW1wLm1lbV0uICAqLworI2RlZmluZSBERUNMX01FTUJFUl9URU1QTEFURV9QKE5PREUpIFwKKyAgKERFQ0xfTEFOR19GTEFHXzEgKFRFTVBMQVRFX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworLyogTm9uemVybyBpZiB0aGUgTk9ERSBjb3JyZXNwb25kcyB0byB0aGUgdGVtcGxhdGUgcGFyYW1ldGVycyBmb3IgYQorICAgbWVtYmVyIHRlbXBsYXRlLCB3aG9zZSBpbmxpbmUgZGVmaW5pdGlvbiBpcyBiZWluZyBwcm9jZXNzZWQgYWZ0ZXIKKyAgIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIGNvbXBsZXRlLiAgKi8KKyNkZWZpbmUgVEVNUExBVEVfUEFSTVNfRk9SX0lOTElORShOT0RFKSBUUkVFX0xBTkdfRkxBR18xIChOT0RFKQorCisvKiBEZXRlcm1pbmUgaWYgYSBwYXJhbWV0ZXIgKGkuZS4sIGEgUEFSTV9ERUNMKSBpcyBhIGZ1bmN0aW9uCisgICBwYXJhbWV0ZXIgcGFjay4gICovCisjZGVmaW5lIEZVTkNUSU9OX1BBUkFNRVRFUl9QQUNLX1AoTk9ERSkgXAorICAoREVDTF9MQU5HX0ZMQUdfMSAoUEFSTV9ERUNMX0NIRUNLIChOT0RFKSkpCisKKy8qIERldGVybWluZXMgaWYgTk9ERSBpcyBhbiBleHBhbnNpb24gb2Ygb25lIG9yIG1vcmUgcGFyYW1ldGVyIHBhY2tzLAorICAgZS5nLiwgYSBUWVBFX1BBQ0tfRVhQQU5TSU9OIG9yIEVYUFJfUEFDS19FWFBBTlNJT04uICAqLworI2RlZmluZSBQQUNLX0VYUEFOU0lPTl9QKE5PREUpICAgICAgICAgICAgICAgICBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRZUEVfUEFDS19FWFBBTlNJT04gICAgIFwKKyAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gRVhQUl9QQUNLX0VYUEFOU0lPTikKKworLyogRXh0cmFjdHMgdGhlIHR5cGUgb3IgZXhwcmVzc2lvbiBwYXR0ZXJuIGZyb20gYSBUWVBFX1BBQ0tfRVhQQU5TSU9OIG9yCisgICBFWFBSX1BBQ0tfRVhQQU5TSU9OLiAgKi8KKyNkZWZpbmUgUEFDS19FWFBBTlNJT05fUEFUVEVSTihOT0RFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRZUEVfUEFDS19FWFBBTlNJT04/IFRSRUVfVFlQRSAoTk9ERSkgICAgXAorICAgOiBUUkVFX09QRVJBTkQgKE5PREUsIDApKQorCisvKiBTZXRzIHRoZSB0eXBlIG9yIGV4cHJlc3Npb24gcGF0dGVybiBmb3IgYSBUWVBFX1BBQ0tfRVhQQU5TSU9OIG9yCisgICBFWFBSX1BBQ0tfRVhQQU5TSU9OLiAgKi8KKyNkZWZpbmUgU0VUX1BBQ0tfRVhQQU5TSU9OX1BBVFRFUk4oTk9ERSxWQUxVRSkgIFwKKyAgaWYgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVFlQRV9QQUNLX0VYUEFOU0lPTikgIFwKKyAgICBUUkVFX1RZUEUgKE5PREUpID0gVkFMVUU7ICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBUUkVFX09QRVJBTkQgKE5PREUsIDApID0gVkFMVUUKKworLyogVGhlIGxpc3Qgb2YgcGFyYW1ldGVyIHBhY2tzIHVzZWQgaW4gdGhlIFBBQ0tfRVhQQU5TSU9OXyogbm9kZS4gVGhlCisgICBUUkVFX1ZBTFVFIG9mIGVhY2ggVFJFRV9MSVNUIGNvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgcGFja3MuICAqLworI2RlZmluZSBQQUNLX0VYUEFOU0lPTl9QQVJBTUVURVJfUEFDS1MoTk9ERSkJCVwKKyAgKihUUkVFX0NPREUgKE5PREUpID09IEVYUFJfUEFDS19FWFBBTlNJT04JCVwKKyAgICA/ICZUUkVFX09QRVJBTkQgKE5PREUsIDEpCQkJCVwKKyAgICA6ICZUWVBFX01JTlZBTCAoVFlQRV9QQUNLX0VYUEFOU0lPTl9DSEVDSyAoTk9ERSkpKQorCisvKiBBbnkgYWRkaXRpb25hbCB0ZW1wbGF0ZSBhcmdzIHRvIGJlIGFwcGxpZWQgd2hlbiBzdWJzdGl0dXRpbmcgaW50bworICAgdGhlIHBhdHRlcm4sIHNldCBieSB0c3Vic3RfcGFja19leHBhbnNpb24gZm9yIHBhcnRpYWwgaW5zdGFudGlhdGlvbnMuICAqLworI2RlZmluZSBQQUNLX0VYUEFOU0lPTl9FWFRSQV9BUkdTKE5PREUpCQlcCisgICooVFJFRV9DT0RFIChOT0RFKSA9PSBUWVBFX1BBQ0tfRVhQQU5TSU9OCVwKKyAgICA/ICZUWVBFX01BWFZBTCAoTk9ERSkJCQlcCisgICAgOiAmVFJFRV9PUEVSQU5EICgoTk9ERSksIDIpKQorCisvKiBUcnVlIGlmZiB0aGlzIHBhY2sgZXhwYW5zaW9uIGlzIHdpdGhpbiBhIGZ1bmN0aW9uIGNvbnRleHQuICAqLworI2RlZmluZSBQQUNLX0VYUEFOU0lPTl9MT0NBTF9QKE5PREUpIFRSRUVfTEFOR19GTEFHXzAgKE5PREUpCisKKy8qIERldGVybWluZSBpZiB0aGlzIGlzIGFuIGFyZ3VtZW50IHBhY2suICAqLworI2RlZmluZSBBUkdVTUVOVF9QQUNLX1AoTk9ERSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVFlQRV9BUkdVTUVOVF9QQUNLICAgICAgICAgICAgICBcCisgICB8fCBUUkVFX0NPREUgKE5PREUpID09IE5PTlRZUEVfQVJHVU1FTlRfUEFDSykKKworLyogVGhlIGFyZ3VtZW50cyBzdG9yZWQgaW4gYW4gYXJndW1lbnQgcGFjay4gQXJndW1lbnRzIGFyZSBzdG9yZWQgaW4gYQorICAgVFJFRV9WRUMsIHdoaWNoIG1heSBoYXZlIGxlbmd0aCB6ZXJvLiAgKi8KKyNkZWZpbmUgQVJHVU1FTlRfUEFDS19BUkdTKE5PREUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVFlQRV9BUkdVTUVOVF9QQUNLPyBUUkVFX1RZUEUgKE5PREUpICAgIFwKKyAgIDogVFJFRV9PUEVSQU5EIChOT0RFLCAwKSkKKworLyogU2V0IHRoZSBhcmd1bWVudHMgc3RvcmVkIGluIGFuIGFyZ3VtZW50IHBhY2suIFZBTFVFIG11c3QgYmUgYQorICAgVFJFRV9WRUMuICAqLworI2RlZmluZSBTRVRfQVJHVU1FTlRfUEFDS19BUkdTKE5PREUsVkFMVUUpICAgICBcCisgIGlmIChUUkVFX0NPREUgKE5PREUpID09IFRZUEVfQVJHVU1FTlRfUEFDSykgIFwKKyAgICBUUkVFX1RZUEUgKE5PREUpID0gVkFMVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVFJFRV9PUEVSQU5EIChOT0RFLCAwKSA9IFZBTFVFCisKKy8qIFdoZXRoZXIgdGhlIGFyZ3VtZW50IHBhY2sgaXMgImluY29tcGxldGUiLCBtZWFuaW5nIHRoYXQgbW9yZQorICAgYXJndW1lbnRzIGNhbiBzdGlsbCBiZSBkZWR1Y2VkLiBJbmNvbXBsZXRlIGFyZ3VtZW50IHBhY2tzIGFyZSBvbmx5CisgICB1c2VkIHdoZW4gdGhlIHVzZXIgaGFzIHByb3ZpZGVkIGFuIGV4cGxpY2l0IHRlbXBsYXRlIGFyZ3VtZW50IGxpc3QKKyAgIGZvciBhIHZhcmlhZGljIGZ1bmN0aW9uIHRlbXBsYXRlLiBTb21lIG9mIHRoZSBleHBsaWNpdCB0ZW1wbGF0ZQorICAgYXJndW1lbnRzIHdpbGwgYmUgcGxhY2VkIGludG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJndW1lbnQgcGFjaywKKyAgIGJ1dCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBtaWdodCBzdGlsbCBiZSBkZWR1Y2VkLiAgKi8KKyNkZWZpbmUgQVJHVU1FTlRfUEFDS19JTkNPTVBMRVRFX1AoTk9ERSkgICAgICAgIFwKKyAgVFJFRV9BRERSRVNTQUJMRSAoQVJHVU1FTlRfUEFDS19BUkdTIChOT0RFKSkKKworLyogV2hlbiBBUkdVTUVOVF9QQUNLX0lOQ09NUExFVEVfUCwgc3RvcmVzIHRoZSBleHBsaWNpdCB0ZW1wbGF0ZQorICAgYXJndW1lbnRzIHVzZWQgdG8gZmlsbCB0aGlzIHBhY2suICAqLworI2RlZmluZSBBUkdVTUVOVF9QQUNLX0VYUExJQ0lUX0FSR1MoTk9ERSkgICAgICAgXAorICBUUkVFX1RZUEUgKEFSR1VNRU5UX1BBQ0tfQVJHUyAoTk9ERSkpCisKKy8qIEluIGFuIEFSR1VNRU5UX1BBQ0tfU0VMRUNULCB0aGUgYXJndW1lbnQgcGFjayBmcm9tIHdoaWNoIGFuCisgICBhcmd1bWVudCB3aWxsIGJlIHNlbGVjdGVkLiAgKi8KKyNkZWZpbmUgQVJHVU1FTlRfUEFDS19TRUxFQ1RfRlJPTV9QQUNLKE5PREUpCQkJCVwKKyAgKCgoc3RydWN0IHRyZWVfYXJndW1lbnRfcGFja19zZWxlY3QgKilBUkdVTUVOVF9QQUNLX1NFTEVDVF9DSEVDSyAoTk9ERSkpLT5hcmd1bWVudF9wYWNrKQorCisvKiBJbiBhbiBBUkdVTUVOVF9QQUNLX1NFTEVDVCwgdGhlIGluZGV4IG9mIHRoZSBhcmd1bWVudCB3ZSB3YW50IHRvCisgICBzZWxlY3QuICAqLworI2RlZmluZSBBUkdVTUVOVF9QQUNLX1NFTEVDVF9JTkRFWChOT0RFKQkJCQlcCisgICgoKHN0cnVjdCB0cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0ICopQVJHVU1FTlRfUEFDS19TRUxFQ1RfQ0hFQ0sgKE5PREUpKS0+aW5kZXgpCisgIAorLyogSW4gYW4gQVJHVU1FTlRfUEFDS19TRUxFQ1QsIHRoZSBhY3R1YWwgdW5kZXJseWluZyBhcmd1bWVudCB0aGF0IHRoZQorICAgQVJHVU1FTlRfUEFDS19TRUxFQ1QgcmVwcmVzZW50cy4gKi8KKyNkZWZpbmUgQVJHVU1FTlRfUEFDS19TRUxFQ1RfQVJHKE5PREUpCQkJCQlcCisgIFRSRUVfVkVDX0VMVCAoQVJHVU1FTlRfUEFDS19BUkdTIChBUkdVTUVOVF9QQUNLX1NFTEVDVF9GUk9NX1BBQ0sgKE5PREUpKSwgXAorCSAgICAgICAgQVJHVU1FTlRfUEFDS19TRUxFQ1RfSU5ERVggKE5PREUpKTsKKworLyogSW4gYSBGVU5DVElPTl9ERUNMLCB0aGUgc2F2ZWQgbGFuZ3VhZ2Utc3BlY2lmaWMgcGVyLWZ1bmN0aW9uIGRhdGEuICAqLworI2RlZmluZSBERUNMX1NBVkVEX0ZVTkNUSU9OX0RBVEEoTk9ERSkJCQlcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpKQlcCisgICAtPnUuc2F2ZWRfbGFuZ3VhZ2VfZnVuY3Rpb24pCisKKy8qIFRydWUgaWYgTk9ERSBpcyBhbiBpbXBsaWNpdCBJTkRJUkVDVF9FWFBSIGZyb20gY29udmVydF9mcm9tX3JlZmVyZW5jZS4gICovCisjZGVmaW5lIFJFRkVSRU5DRV9SRUZfUChOT0RFKQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IElORElSRUNUX1JFRgkJCVwKKyAgICYmIFRSRUVfVFlQRSAoVFJFRV9PUEVSQU5EIChOT0RFLCAwKSkJCVwKKyAgICYmIChUUkVFX0NPREUgKFRSRUVfVFlQRSAoVFJFRV9PUEVSQU5EICgoTk9ERSksIDApKSkJXAorICAgICAgID09IFJFRkVSRU5DRV9UWVBFKSkKKworI2RlZmluZSBORVdfRVhQUl9VU0VfR0xPQkFMKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoTkVXX0VYUFJfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBERUxFVEVfRVhQUl9VU0VfR0xPQkFMKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoREVMRVRFX0VYUFJfQ0hFQ0sgKE5PREUpKQorI2RlZmluZSBERUxFVEVfRVhQUl9VU0VfVkVDKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMSAoREVMRVRFX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIGEgbm9uLWRlcGVuZGVudCBDT01QT1VORF9FWFBSIHdoaWNoIHdpbGwKKyAgIHJlc29sdmUgdG8gYSBmdW5jdGlvbiBjYWxsLiAgKi8KKyNkZWZpbmUgQ09NUE9VTkRfRVhQUl9PVkVSTE9BREVEKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoQ09NUE9VTkRfRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIEluIGEgQ0FMTF9FWFBSIGFwcGVhcmluZyBpbiBhIHRlbXBsYXRlLCB0cnVlIGlmIEtvZW5pZyBsb29rdXAKKyAgIHNob3VsZCBiZSBwZXJmb3JtZWQgYXQgaW5zdGFudGlhdGlvbiB0aW1lLiAgKi8KKyNkZWZpbmUgS09FTklHX0xPT0tVUF9QKE5PREUpIFRSRUVfTEFOR19GTEFHXzAgKENBTExfRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIEluZGljYXRlcyB3aGV0aGVyIGEgc3RyaW5nIGxpdGVyYWwgaGFzIGJlZW4gcGFyZW50aGVzaXplZC4gU3VjaAorICAgdXNhZ2VzIGFyZSBkaXNhbGxvd2VkIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gICovCisKKyNkZWZpbmUgUEFSRU5fU1RSSU5HX0xJVEVSQUxfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKFNUUklOR19DU1RfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGlmIHRoaXMgQUdHUl9JTklUX0VYUFIgcHJvdmlkZXMgZm9yIGluaXRpYWxpemF0aW9uIHZpYSBhCisgICBjb25zdHJ1Y3RvciBjYWxsLCByYXRoZXIgdGhhbiBhbiBvcmRpbmFyeSBmdW5jdGlvbiBjYWxsLiAgKi8KKyNkZWZpbmUgQUdHUl9JTklUX1ZJQV9DVE9SX1AoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18wIChBR0dSX0lOSVRfRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgZXhwYW5kaW5nIHRoaXMgQUdHUl9JTklUX0VYUFIgc2hvdWxkIGZpcnN0IHplcm8taW5pdGlhbGl6ZQorICAgdGhlIG9iamVjdC4gICovCisjZGVmaW5lIEFHR1JfSU5JVF9aRVJPX0ZJUlNUKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMiAoQUdHUl9JTklUX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBBR0dSX0lOSVRfRVhQUiBhY2Nlc3NvcnMuICBUaGVzZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgQ0FMTF9FWFBSCisgICBhY2Nlc3NvcnMsIGV4Y2VwdCBmb3IgQUdHUl9JTklUX0VYUFJfU0xPVCAod2hpY2ggdGFrZXMgdGhlIHBsYWNlIG9mCisgICBDQUxMX0VYUFJfU1RBVElDX0NIQUlOKS4gICovCisKKyNkZWZpbmUgQUdHUl9JTklUX0VYUFJfRk4oTk9ERSkgVFJFRV9PUEVSQU5EIChBR0dSX0lOSVRfRVhQUl9DSEVDSyAoTk9ERSksIDEpCisjZGVmaW5lIEFHR1JfSU5JVF9FWFBSX1NMT1QoTk9ERSkgXAorICBUUkVFX09QRVJBTkQgKEFHR1JfSU5JVF9FWFBSX0NIRUNLIChOT0RFKSwgMikKKyNkZWZpbmUgQUdHUl9JTklUX0VYUFJfQVJHKE5PREUsIEkpIFwKKyAgVFJFRV9PUEVSQU5EIChBR0dSX0lOSVRfRVhQUl9DSEVDSyAoTk9ERSksIChJKSArIDMpCisjZGVmaW5lIGFnZ3JfaW5pdF9leHByX25hcmdzKE5PREUpIChWTF9FWFBfT1BFUkFORF9MRU5HVEgoTk9ERSkgLSAzKQorCisvKiBBR0dSX0lOSVRfRVhQUl9BUkdQIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhcmd1bWVudCB2ZWN0b3IgZm9yIE5PREUuCisgICBXZSBjYW4ndCB1c2UgJkFHR1JfSU5JVF9FWFBSX0FSRyAoTk9ERSwgMCkgYmVjYXVzZSB0aGF0IHdpbGwgY29tcGxhaW4gaWYKKyAgIHRoZSBhcmd1bWVudCBjb3VudCBpcyB6ZXJvIHdoZW4gY2hlY2tpbmcgaXMgZW5hYmxlZC4gIEluc3RlYWQsIGRvCisgICB0aGUgcG9pbnRlciBhcml0aG1ldGljIHRvIGFkdmFuY2UgcGFzdCB0aGUgMyBmaXhlZCBvcGVyYW5kcyBpbiBhCisgICBBR0dSX0lOSVRfRVhQUi4gIFRoYXQgcHJvZHVjZXMgYSB2YWxpZCBwb2ludGVyIHRvIGp1c3QgcGFzdCB0aGUgZW5kIG9mCisgICB0aGUgb3BlcmFuZCBhcnJheSwgZXZlbiBpZiBpdCdzIG5vdCB2YWxpZCB0byBkZXJlZmVyZW5jZSBpdC4gICovCisjZGVmaW5lIEFHR1JfSU5JVF9FWFBSX0FSR1AoTk9ERSkgXAorICAoJihUUkVFX09QRVJBTkQgKEFHR1JfSU5JVF9FWFBSX0NIRUNLIChOT0RFKSwgMCkpICsgMykKKworLyogQWJzdHJhY3QgaXRlcmF0b3JzIGZvciBBR0dSX0lOSVRfRVhQUnMuICAqLworCisvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBpdGVyYXRvciBzdGF0ZS4gICovCit0eXBlZGVmIHN0cnVjdCBhZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3JfZCB7CisgIHRyZWUgdDsJLyogdGhlIGFnZ3JfaW5pdF9leHByICovCisgIGludCBuOwkvKiBhcmd1bWVudCBjb3VudCAqLworICBpbnQgaTsJLyogbmV4dCBhcmd1bWVudCBpbmRleCAqLworfSBhZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3I7CisKKy8qIEluaXRpYWxpemUgdGhlIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3Igb2JqZWN0IElURVIgd2l0aCB0aGUKKyAgIGFyZ3VtZW50cyBmcm9tIEFHR1JfSU5JVF9FWFBSIG5vZGUgRVhQLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5pdF9hZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3IgKHRyZWUgZXhwLAorCQkJCSAgICAgICBhZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3IgKml0ZXIpCit7CisgIGl0ZXItPnQgPSBleHA7CisgIGl0ZXItPm4gPSBhZ2dyX2luaXRfZXhwcl9uYXJncyAoZXhwKTsKKyAgaXRlci0+aSA9IDA7Cit9CisKKy8qIFJldHVybiB0aGUgbmV4dCBhcmd1bWVudCBmcm9tIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3Igb2JqZWN0IElURVIsCisgICBhbmQgYWR2YW5jZSBpdHMgc3RhdGUuICBSZXR1cm4gTlVMTF9UUkVFIGlmIHRoZXJlIGFyZSBubyBtb3JlIGFyZ3VtZW50cy4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK25leHRfYWdncl9pbml0X2V4cHJfYXJnIChhZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3IgKml0ZXIpCit7CisgIHRyZWUgcmVzdWx0OworICBpZiAoaXRlci0+aSA+PSBpdGVyLT5uKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIHJlc3VsdCA9IEFHR1JfSU5JVF9FWFBSX0FSRyAoaXRlci0+dCwgaXRlci0+aSk7CisgIGl0ZXItPmkrKzsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgYXJndW1lbnQgbGlzdCBpdGVyYXRvciBvYmplY3QgSVRFUiwgdGhlbiBhZHZhbmNlCisgICBwYXN0IGFuZCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50LiAgVXNlZnVsIGluIGZvciBleHByZXNzaW9ucywgZS5nLgorICAgICBmb3IgKGFyZyA9IGZpcnN0X2FnZ3JfaW5pdF9leHByX2FyZyAoZXhwLCAmaXRlcik7IGFyZzsKKyAgICAgICAgICBhcmcgPSBuZXh0X2FnZ3JfaW5pdF9leHByX2FyZyAoJml0ZXIpKSAgICovCitzdGF0aWMgaW5saW5lIHRyZWUKK2ZpcnN0X2FnZ3JfaW5pdF9leHByX2FyZyAodHJlZSBleHAsIGFnZ3JfaW5pdF9leHByX2FyZ19pdGVyYXRvciAqaXRlcikKK3sKKyAgaW5pdF9hZ2dyX2luaXRfZXhwcl9hcmdfaXRlcmF0b3IgKGV4cCwgaXRlcik7CisgIHJldHVybiBuZXh0X2FnZ3JfaW5pdF9leHByX2FyZyAoaXRlcik7Cit9CisKKy8qIFRlc3Qgd2hldGhlciB0aGVyZSBhcmUgbW9yZSBhcmd1bWVudHMgaW4gYWJzdHJhY3QgYXJndW1lbnQgbGlzdCBpdGVyYXRvcgorICAgSVRFUiwgd2l0aG91dCBjaGFuZ2luZyBpdHMgc3RhdGUuICAqLworc3RhdGljIGlubGluZSBib29sCittb3JlX2FnZ3JfaW5pdF9leHByX2FyZ3NfcCAoY29uc3QgYWdncl9pbml0X2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICByZXR1cm4gKGl0ZXItPmkgPCBpdGVyLT5uKTsKK30KKworLyogSXRlcmF0ZSB0aHJvdWdoIGVhY2ggYXJndW1lbnQgQVJHIG9mIEFHR1JfSU5JVF9FWFBSIENBTEwsIHVzaW5nIHZhcmlhYmxlCisgICBJVEVSIChvZiB0eXBlIGFnZ3JfaW5pdF9leHByX2FyZ19pdGVyYXRvcikgdG8gaG9sZCB0aGUgaXRlcmF0aW9uIHN0YXRlLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfQUdHUl9JTklUX0VYUFJfQVJHKGFyZywgaXRlciwgY2FsbCkJCQlcCisgIGZvciAoKGFyZykgPSBmaXJzdF9hZ2dyX2luaXRfZXhwcl9hcmcgKChjYWxsKSwgJihpdGVyKSk7IChhcmcpOwlcCisgICAgICAgKGFyZykgPSBuZXh0X2FnZ3JfaW5pdF9leHByX2FyZyAoJihpdGVyKSkpCisKKy8qIFZFQ19JTklUX0VYUFIgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgVkVDX0lOSVRfRVhQUl9TTE9UKE5PREUpIFRSRUVfT1BFUkFORCAoVkVDX0lOSVRfRVhQUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIFZFQ19JTklUX0VYUFJfSU5JVChOT0RFKSBUUkVFX09QRVJBTkQgKFZFQ19JTklUX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBJbmRpY2F0ZXMgdGhhdCBhIFZFQ19JTklUX0VYUFIgaXMgYSBwb3RlbnRpYWwgY29uc3RhbnQgZXhwcmVzc2lvbi4KKyAgIE9ubHkgc2V0IHdoZW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXMgY29uc3RleHByLiAgKi8KKyNkZWZpbmUgVkVDX0lOSVRfRVhQUl9JU19DT05TVEVYUFIoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18wIChWRUNfSU5JVF9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogSW5kaWNhdGVzIHRoYXQgYSBWRUNfSU5JVF9FWFBSIGlzIGV4cHJlc3NpbmcgdmFsdWUtaW5pdGlhbGl6YXRpb24uICAqLworI2RlZmluZSBWRUNfSU5JVF9FWFBSX1ZBTFVFX0lOSVQoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18xIChWRUNfSU5JVF9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogVGhlIGNvbmRpdGlvbiB1bmRlciB3aGljaCB0aGlzIE1VU1RfTk9UX1RIUk9XX0VYUFIgYWN0dWFsbHkgYmxvY2tzCisgICBleGNlcHRpb25zLiAgTlVMTF9UUkVFIG1lYW5zICd0cnVlJy4gICovCisjZGVmaW5lIE1VU1RfTk9UX1RIUk9XX0NPTkQoTk9ERSkgXAorICBUUkVFX09QRVJBTkQgKE1VU1RfTk9UX1RIUk9XX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBUaGUgVFlQRV9NQUlOX0RFQ0wgZm9yIGEgY2xhc3MgdGVtcGxhdGUgdHlwZSBpcyBhIFRZUEVfREVDTCwgbm90IGEKKyAgIFRFTVBMQVRFX0RFQ0wuICBUaGlzIG1hY3JvIGRldGVybWluZXMgd2hldGhlciBvciBub3QgYSBnaXZlbiBjbGFzcworICAgdHlwZSBpcyByZWFsbHkgYSB0ZW1wbGF0ZSB0eXBlLCBhcyBvcHBvc2VkIHRvIGFuIGluc3RhbnRpYXRpb24gb3IKKyAgIHNwZWNpYWxpemF0aW9uIG9mIG9uZS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9JU19URU1QTEFURShOT0RFKSAgXAorICAoQ0xBU1NUWVBFX1RFTVBMQVRFX0lORk8gKE5PREUpICAgIFwKKyAgICYmICFDTEFTU1RZUEVfVVNFX1RFTVBMQVRFIChOT0RFKSBcCisgICAmJiBQUklNQVJZX1RFTVBMQVRFX1AgKENMQVNTVFlQRV9USV9URU1QTEFURSAoTk9ERSkpKQorCisvKiBUaGUgbmFtZSB1c2VkIGJ5IHRoZSB1c2VyIHRvIG5hbWUgdGhlIHR5cGVuYW1lIHR5cGUuICBUeXBpY2FsbHksCisgICB0aGlzIGlzIGFuIElERU5USUZJRVJfTk9ERSwgYW5kIHRoZSBzYW1lIGFzIHRoZSBERUNMX05BTUUgb24gdGhlCisgICBjb3JyZXNwb25kaW5nIFRZUEVfREVDTC4gIEhvd2V2ZXIsIHRoaXMgbWF5IGFsc28gYmUgYQorICAgVEVNUExBVEVfSURfRVhQUiBpZiB3ZSBoYWQgc29tZXRoaW5nIGxpa2UgYHR5cGVuYW1lIFg6Olk8VD4nLiAgKi8KKyNkZWZpbmUgVFlQRU5BTUVfVFlQRV9GVUxMTkFNRShOT0RFKSBcCisgIChUWVBFX1ZBTFVFU19SQVcgKFRZUEVOQU1FX1RZUEVfQ0hFQ0sgKE5PREUpKSkKKworLyogVHJ1ZSBpZiBhIFRZUEVOQU1FX1RZUEUgd2FzIGRlY2xhcmVkIGFzIGFuICJlbnVtIi4gICovCisjZGVmaW5lIFRZUEVOQU1FX0lTX0VOVU1fUChOT0RFKSBcCisgIChUUkVFX0xBTkdfRkxBR18wIChUWVBFTkFNRV9UWVBFX0NIRUNLIChOT0RFKSkpCisKKy8qIFRydWUgaWYgYSBUWVBFTkFNRV9UWVBFIHdhcyBkZWNsYXJlZCBhcyBhICJjbGFzcyIsICJzdHJ1Y3QiLCBvcgorICAgInVuaW9uIi4gICovCisjZGVmaW5lIFRZUEVOQU1FX0lTX0NMQVNTX1AoTk9ERSkgXAorICAoVFJFRV9MQU5HX0ZMQUdfMSAoVFlQRU5BTUVfVFlQRV9DSEVDSyAoTk9ERSkpKQorCisvKiBUcnVlIGlmIGEgVFlQRU5BTUVfVFlQRSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyByZXNvbHZlZC4gICovCisjZGVmaW5lIFRZUEVOQU1FX0lTX1JFU09MVklOR19QKE5PREUpIFwKKyAgKFRSRUVfTEFOR19GTEFHXzIgKFRZUEVOQU1FX1RZUEVfQ0hFQ0sgKE5PREUpKSkKKworLyogW2NsYXNzLnZpcnR1YWxdCisKKyAgIEEgY2xhc3MgdGhhdCBkZWNsYXJlcyBvciBpbmhlcml0cyBhIHZpcnR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIGEKKyAgIHBvbHltb3JwaGljIGNsYXNzLiAgKi8KKyNkZWZpbmUgVFlQRV9QT0xZTU9SUEhJQ19QKE5PREUpIChUUkVFX0xBTkdfRkxBR18yIChOT0RFKSkKKworLyogTm9uemVybyBpZiB0aGlzIGNsYXNzIGhhcyBhIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgcG9pbnRlci4gICovCisjZGVmaW5lIFRZUEVfQ09OVEFJTlNfVlBUUl9QKE5PREUpCQlcCisgIChUWVBFX1BPTFlNT1JQSElDX1AgKE5PREUpIHx8IENMQVNTVFlQRV9WQkFTRUNMQVNTRVMgKE5PREUpKQorCisvKiBUaGlzIGZsYWcgaXMgdHJ1ZSBvZiBhIGxvY2FsIFZBUl9ERUNMIGlmIGl0IHdhcyBkZWNsYXJlZCBpbiBhIGZvcgorICAgc3RhdGVtZW50LCBidXQgd2UgYXJlIG5vIGxvbmdlciBpbiB0aGUgc2NvcGUgb2YgdGhlIGZvci4gICovCisjZGVmaW5lIERFQ0xfREVBRF9GT1JfTE9DQUwoTk9ERSkgREVDTF9MQU5HX0ZMQUdfNyAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiBUaGlzIGZsYWcgaXMgc2V0IG9uIGEgVkFSX0RFQ0wgdGhhdCBpcyBhIERFQ0xfREVBRF9GT1JfTE9DQUwKKyAgIGlmIHdlIGFscmVhZHkgZW1pdHRlZCBhIHdhcm5pbmcgYWJvdXQgdXNpbmcgaXQuICAqLworI2RlZmluZSBERUNMX0VSUk9SX1JFUE9SVEVEKE5PREUpIERFQ0xfTEFOR19GTEFHXzAgKFZBUl9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGEgRlVOQ1RJT05fREVDTCAoZm9yIGEgZnVuY3Rpb24gd2l0aCBnbG9iYWwKKyAgIHNjb3BlKSBkZWNsYXJlZCBpbiBhIGxvY2FsIHNjb3BlLiAgKi8KKyNkZWZpbmUgREVDTF9MT0NBTF9GVU5DVElPTl9QKE5PREUpIFwKKyAgREVDTF9MQU5HX0ZMQUdfMCAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIFRydWUgaWYgTk9ERSB3YXMgZGVjbGFyZWQgd2l0aCBhdXRvIGluIGl0cyByZXR1cm4gdHlwZSwgYnV0IGl0IGhhcworICAgc3RhcnRlZCBjb21waWxhdGlvbiBhbmQgc28gdGhlIHJldHVybiB0eXBlIG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkIGJ5CisgICByZXR1cm4gdHlwZSBkZWR1Y3Rpb247IGl0cyBkZWNsYXJlZCByZXR1cm4gdHlwZSBzaG91bGQgYmUgZm91bmQgaW4KKyAgIERFQ0xfU1RSVUNUX0ZVTkNUSU9OKE5PREUpLT5sYW5ndWFnZS0+eF9hdXRvX3JldHVybl9wYXR0ZXJuLiAgKi8KKyNkZWZpbmUgRk5ERUNMX1VTRURfQVVUTyhOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzIgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgYSBERUNMIHdoaWNoIHdlIGtub3cgYWJvdXQgYnV0IHdoaWNoIGhhcyBub3QKKyAgIGJlZW4gZXhwbGljaXRseSBkZWNsYXJlZCwgc3VjaCBhcyBhIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIGEgZnJpZW5kCisgICBkZWNsYXJlZCBpbnNpZGUgYSBjbGFzcy4gIEluIHRoZSBsYXR0ZXIgY2FzZSBERUNMX0hJRERFTl9GUklFTkRfUAorICAgd2lsbCBiZSBzZXQuICAqLworI2RlZmluZSBERUNMX0FOVElDSVBBVEVEKE5PREUpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoVFlQRV9GVU5DVElPTl9PUl9URU1QTEFURV9ERUNMX0NIRUNLIChOT0RFKSkgXAorICAgLT51LmJhc2UuYW50aWNpcGF0ZWRfcCkKKworLyogTm9uemVybyBpZiBOT0RFIGlzIGEgRlVOQ1RJT05fREVDTCB3aGljaCB3YXMgZGVjbGFyZWQgYXMgYSBmcmllbmQKKyAgIHdpdGhpbiBhIGNsYXNzIGJ1dCBoYXMgbm90IGJlZW4gZGVjbGFyZWQgaW4gdGhlIHN1cnJvdW5kaW5nIHNjb3BlLgorICAgVGhlIGZ1bmN0aW9uIGlzIGludmlzaWJsZSBleGNlcHQgdmlhIGFyZ3VtZW50IGRlcGVuZGVudCBsb29rdXAuICAqLworI2RlZmluZSBERUNMX0hJRERFTl9GUklFTkRfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKSktPmhpZGRlbl9mcmllbmRfcCkKKworLyogTm9uemVybyBpZiBERUNMIGhhcyBiZWVuIGRlY2xhcmVkIHRocmVhZHByaXZhdGUgYnkKKyAgICNwcmFnbWEgb21wIHRocmVhZHByaXZhdGUuICAqLworI2RlZmluZSBDUF9ERUNMX1RIUkVBRFBSSVZBVEVfUChERUNMKSBcCisgIChERUNMX0xBTkdfU1BFQ0lGSUMgKFZBUl9ERUNMX0NIRUNLIChERUNMKSktPnUuYmFzZS50aHJlYWRwcml2YXRlX29yX2RlbGV0ZWRfcCkKKworLyogTm9uemVybyBpZiBERUNMIHdhcyBkZWNsYXJlZCB3aXRoICc9IGRlbGV0ZScuICAqLworI2RlZmluZSBERUNMX0RFTEVURURfRk4oREVDTCkgXAorICAoREVDTF9MQU5HX1NQRUNJRklDIChGVU5DVElPTl9ERUNMX0NIRUNLIChERUNMKSktPnUuYmFzZS50aHJlYWRwcml2YXRlX29yX2RlbGV0ZWRfcCkKKworLyogTm9uemVybyBpZiBERUNMIHdhcyBkZWNsYXJlZCB3aXRoICc9IGRlZmF1bHQnIChtYXliZSBpbXBsaWNpdGx5KS4gICovCisjZGVmaW5lIERFQ0xfREVGQVVMVEVEX0ZOKERFQ0wpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoREVDTCktPmRlZmF1bHRlZF9wKQorCisvKiBOb256ZXJvIGlmIERFQ0wgaXMgZXhwbGljaXRseSBkZWZhdWx0ZWQgaW4gdGhlIGNsYXNzIGJvZHkuICAqLworI2RlZmluZSBERUNMX0RFRkFVTFRFRF9JTl9DTEFTU19QKERFQ0wpCQkJCQlcCisgIChERUNMX0RFRkFVTFRFRF9GTiAoREVDTCkgJiYgREVDTF9JTklUSUFMSVpFRF9JTl9DTEFTU19QIChERUNMKSkKKy8qIE5vbnplcm8gaWYgREVDTCB3YXMgZGVmYXVsdGVkIG91dHNpZGUgdGhlIGNsYXNzIGJvZHkuICAqLworI2RlZmluZSBERUNMX0RFRkFVTFRFRF9PVVRTSURFX0NMQVNTX1AoREVDTCkJCQkJXAorICAoREVDTF9ERUZBVUxURURfRk4gKERFQ0wpCQkJCQkJXAorICAgJiYgIShERUNMX0FSVElGSUNJQUwgKERFQ0wpIHx8IERFQ0xfSU5JVElBTElaRURfSU5fQ0xBU1NfUCAoREVDTCkpKQorCisvKiBSZWNvcmQgd2hldGhlciBhIHR5cGVkZWYgZm9yIHR5cGUgYGludCcgd2FzIGFjdHVhbGx5IGBzaWduZWQgaW50Jy4gICovCisjZGVmaW5lIENfVFlQRURFRl9FWFBMSUNJVExZX1NJR05FRChFWFApIERFQ0xfTEFOR19GTEFHXzEgKEVYUCkKKworLyogUmV0dXJucyBub256ZXJvIGlmIERFQ0wgaGFzIGV4dGVybmFsIGxpbmthZ2UsIGFzIHNwZWNpZmllZCBieSB0aGUKKyAgIGxhbmd1YWdlIHN0YW5kYXJkLiAgKFRoaXMgcHJlZGljYXRlIG1heSBob2xkIGV2ZW4gd2hlbiB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgZW50aXR5IGlzIG5vdCBhY3R1YWxseSBnaXZlbiBleHRlcm5hbCBsaW5rYWdlIGluIHRoZQorICAgb2JqZWN0IGZpbGU7IHNlZSBkZWNsX2xpbmthZ2UgZm9yIGRldGFpbHMuKSAgKi8KKyNkZWZpbmUgREVDTF9FWFRFUk5BTF9MSU5LQUdFX1AoREVDTCkgXAorICAoZGVjbF9saW5rYWdlIChERUNMKSA9PSBsa19leHRlcm5hbCkKKworLyogS2VlcCB0aGVzZSBjb2RlcyBpbiBhc2NlbmRpbmcgY29kZSBvcmRlci4gICovCisKKyNkZWZpbmUgSU5URUdSQUxfQ09ERV9QKENPREUpCVwKKyAgKChDT0RFKSA9PSBFTlVNRVJBTF9UWVBFCVwKKyAgIHx8IChDT0RFKSA9PSBCT09MRUFOX1RZUEUJXAorICAgfHwgKENPREUpID09IElOVEVHRVJfVFlQRSkKKworLyogW2Jhc2ljLmZ1bmRhbWVudGFsXQorCisgICBUeXBlcyAgYm9vbCwgY2hhciwgd2NoYXJfdCwgYW5kIHRoZSBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXIgdHlwZXMKKyAgIGFyZSBjb2xsZWN0aXZlbHkgY2FsbGVkIGludGVncmFsIHR5cGVzLgorCisgICBOb3RlIHRoYXQgSU5URUdSQUxfVFlQRV9QLCBhcyBkZWZpbmVkIGluIHRyZWUuaCwgYWxsb3dzIGVudW1lcmF0aW9uCisgICB0eXBlcyBhcyB3ZWxsLCB3aGljaCBpcyBpbmNvcnJlY3QgaW4gQysrLiAgS2VlcCB0aGVzZSBjaGVja3MgaW4KKyAgIGFzY2VuZGluZyBjb2RlIG9yZGVyLiAgKi8KKyNkZWZpbmUgQ1BfSU5URUdSQUxfVFlQRV9QKFRZUEUpCQlcCisgIChUUkVFX0NPREUgKFRZUEUpID09IEJPT0xFQU5fVFlQRQkJXAorICAgfHwgVFJFRV9DT0RFIChUWVBFKSA9PSBJTlRFR0VSX1RZUEUpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBUWVBFIGlzIGFuIGludGVncmFsIG9yIGVudW1lcmF0aW9uIG5hbWUuICBLZWVwCisgICB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIGNvZGUgb3JkZXIuICAqLworI2RlZmluZSBJTlRFR1JBTF9PUl9FTlVNRVJBVElPTl9UWVBFX1AoVFlQRSkgXAorICAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gRU5VTUVSQUxfVFlQRSB8fCBDUF9JTlRFR1JBTF9UWVBFX1AgKFRZUEUpKQorCisvKiBSZXR1cm5zIHRydWUgaWYgVFlQRSBpcyBhbiBpbnRlZ3JhbCBvciB1bnNjb3BlZCBlbnVtZXJhdGlvbiB0eXBlLiAgKi8KKyNkZWZpbmUgSU5URUdSQUxfT1JfVU5TQ09QRURfRU5VTUVSQVRJT05fVFlQRV9QKFRZUEUpIFwKKyAgIChVTlNDT1BFRF9FTlVNX1AgKFRZUEUpIHx8IENQX0lOVEVHUkFMX1RZUEVfUCAoVFlQRSkpCisKKy8qIFRydWUgaWYgdGhlIGNsYXNzIHR5cGUgVFlQRSBpcyBhIGxpdGVyYWwgdHlwZS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9MSVRFUkFMX1AoVFlQRSkgICAgICAgICAgICAgIFwKKyAgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKFRZUEUpLT5pc19saXRlcmFsKQorCisvKiBbYmFzaWMuZnVuZGFtZW50YWxdCisKKyAgIEludGVncmFsIGFuZCBmbG9hdGluZyB0eXBlcyBhcmUgY29sbGVjdGl2ZWx5IGNhbGxlZCBhcml0aG1ldGljCisgICB0eXBlcy4gIAorCisgICBBcyBhIEdOVSBleHRlbnNpb24sIHdlIGFsc28gYWNjZXB0IGNvbXBsZXggdHlwZXMuCisKKyAgIEtlZXAgdGhlc2UgY2hlY2tzIGluIGFzY2VuZGluZyBjb2RlIG9yZGVyLiAgKi8KKyNkZWZpbmUgQVJJVEhNRVRJQ19UWVBFX1AoVFlQRSkgXAorICAoQ1BfSU5URUdSQUxfVFlQRV9QIChUWVBFKSBcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IFJFQUxfVFlQRSBcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IENPTVBMRVhfVFlQRSkKKworLyogVHJ1ZSBpZmYgVFlQRSBpcyBjdiBkZWNsdHlwZShudWxscHRyKS4gICovCisjZGVmaW5lIE5VTExQVFJfVFlQRV9QKFRZUEUpIChUUkVFX0NPREUgKFRZUEUpID09IE5VTExQVFJfVFlQRSkKKworLyogW2Jhc2ljLnR5cGVzXQorCisgICBBcml0aG1ldGljIHR5cGVzLCBlbnVtZXJhdGlvbiB0eXBlcywgcG9pbnRlciB0eXBlcywKKyAgIHBvaW50ZXItdG8tbWVtYmVyIHR5cGVzLCBhbmQgc3RkOjpudWxscHRyX3QgYXJlIGNvbGxlY3RpdmVseSBjYWxsZWQKKyAgIHNjYWxhciB0eXBlcy4KKyAgIAorICAgS2VlcCB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIGNvZGUgb3JkZXIuICAqLworI2RlZmluZSBTQ0FMQVJfVFlQRV9QKFRZUEUpCQkJXAorICAoVFlQRV9QVFJEQVRBTUVNX1AgKFRZUEUpCQkJXAorICAgfHwgVFJFRV9DT0RFIChUWVBFKSA9PSBFTlVNRVJBTF9UWVBFCQlcCisgICB8fCBBUklUSE1FVElDX1RZUEVfUCAoVFlQRSkJCQlcCisgICB8fCBUWVBFX1BUUl9QIChUWVBFKQkJCQlcCisgICB8fCBUWVBFX1BUUk1FTUZVTkNfUCAoVFlQRSkgICAgICAgICAgICAgICAgICBcCisgICB8fCBOVUxMUFRSX1RZUEVfUCAoVFlQRSkpCisKKy8qIERldGVybWluZXMgd2hldGhlciB0aGlzIHR5cGUgaXMgYSBDKysweCBzY29wZWQgZW51bWVyYXRpb24KKyAgIHR5cGUuIFNjb3BlZCBlbnVtZXJhdGlvbnMgdHlwZXMgYXJlIGludHJvZHVjZWQgdmlhICJlbnVtIGNsYXNzIiBvcgorICAgImVudW0gc3RydWN0IiwgZS5nLiwKKworICAgICBlbnVtIGNsYXNzIENvbG9yIHsKKyAgICAgICBSZWQsIEdyZWVuLCBCbHVlCisgICAgIH07CisKKyAgIFNjb3BlZCBlbnVtZXJhdGlvbiB0eXBlcyBhcmUgZGlmZmVyZW50IGZyb20gbm9ybWFsICh1bnNjb3BlZCkKKyAgIGVudW1lcmF0aW9uIHR5cGVzIGluIHNldmVyYWwgd2F5czoKKyAgIAorICAgICAtIFRoZSBlbnVtZXJhdG9ycyBvZiBhIHNjb3BlZCBlbnVtZXJhdGlvbiB0eXBlIGFyZSBvbmx5IGF2YWlsYWJsZQorICAgICAgIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGVudW1lcmF0aW9uIHR5cGUgYW5kIG5vdCBpbiB0aGUKKyAgICAgICBlbmNsb3Npbmcgc2NvcGUuIEZvciBleGFtcGxlLCB0aGUgUmVkIGNvbG9yIGNhbiBiZSByZWZlcnJlZCB0bworICAgICAgIHdpdGggIkNvbG9yOjpSZWQiIGJ1dCBub3QgIlJlZCIuCisKKyAgICAgLSBTY29wZWQgZW51bWVyYXRvcnMgYW5kIGVudW1lcmF0aW9ucyBkbyBub3QgaW1wbGljaXRseSBjb252ZXJ0CisgICAgICAgdG8gaW50ZWdlcnMgb3IgJ2Jvb2wnLgorCisgICAgIC0gVGhlIHVuZGVybHlpbmcgdHlwZSBvZiB0aGUgZW51bSBpcyB3ZWxsLWRlZmluZWQuICAqLworI2RlZmluZSBTQ09QRURfRU5VTV9QKFRZUEUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoVFJFRV9DT0RFIChUWVBFKSA9PSBFTlVNRVJBTF9UWVBFICYmIEVOVU1fSVNfU0NPUEVEIChUWVBFKSkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiB1bnNjb3BlZCBlbnVtZXJhdGlvbiB0eXBlLiAgKi8KKyNkZWZpbmUgVU5TQ09QRURfRU5VTV9QKFRZUEUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gRU5VTUVSQUxfVFlQRSAmJiAhRU5VTV9JU19TQ09QRUQgKFRZUEUpKQorCisvKiBTZXQgdGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGFuIEVOVU1FUkFMX1RZUEUgaXMgYSBDKysweCBzY29wZWQKKyAgIGVudW1lcmF0aW9uIHR5cGUgKDEpIG9yIGEgbm9ybWFsICh1bnNjb3BlZCkgZW51bWVyYXRpb24gdHlwZQorICAgKDApLiAgKi8KKyNkZWZpbmUgU0VUX1NDT1BFRF9FTlVNX1AoVFlQRSwgVkFMKSAgICAgICAgICAgICAgICAgICAgXAorICAoRU5VTV9JU19TQ09QRUQgKFRZUEUpID0gKFZBTCkpCisKKyNkZWZpbmUgU0VUX09QQVFVRV9FTlVNX1AoVFlQRSwgVkFMKSAgICAgICAgICAgICAgICAgICAgXAorICAoRU5VTV9JU19PUEFRVUUgKFRZUEUpID0gKFZBTCkpCisKKyNkZWZpbmUgT1BBUVVFX0VOVU1fUChUWVBFKQkJCQlcCisgIChUUkVFX0NPREUgKFRZUEUpID09IEVOVU1FUkFMX1RZUEUgJiYgRU5VTV9JU19PUEFRVUUgKFRZUEUpKQorCisvKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gRU5VTUVSQUxfVFlQRSBoYXMgYW4gZXhwbGljaXQKKyAgIHVuZGVybHlpbmcgdHlwZS4gICovCisjZGVmaW5lIEVOVU1fRklYRURfVU5ERVJMWUlOR19UWVBFX1AoTk9ERSkgKFRZUEVfTEFOR19GTEFHXzUgKE5PREUpKQorCisvKiBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHR5cGUgb2YgdGhlIGdpdmVuIGVudW1lcmF0aW9uIHR5cGUuIFRoZQorICAgdW5kZXJseWluZyB0eXBlIGlzIGRldGVybWluZWQgaW4gZGlmZmVyZW50IHdheXMsIGRlcGVuZGluZyBvbiB0aGUKKyAgIHByb3BlcnRpZXMgb2YgdGhlIGVudW06CisKKyAgICAgLSBJbiBDKysweCwgdGhlIHVuZGVybHlpbmcgdHlwZSBjYW4gYmUgZXhwbGljaXRseSBzcGVjaWZpZWQsIGUuZy4sCisKKyAgICAgICAgIGVudW0gRTEgOiBjaGFyIHsgLi4uIH0gLy8gdW5kZXJseWluZyB0eXBlIGlzIGNoYXIKKworICAgICAtIEluIGEgQysrMHggc2NvcGVkIGVudW1lcmF0aW9uLCB0aGUgdW5kZXJseWluZyB0eXBlIGlzIGludAorICAgICAgIHVubGVzcyBvdGhlcndpc2VzIHNwZWNpZmllZDoKKworICAgICAgICAgZW51bSBjbGFzcyBFMiB7IC4uLiB9IC8vIHVuZGVybHlpbmcgdHlwZSBpcyBpbnQKKworICAgICAtIE90aGVyd2lzZSwgdGhlIHVuZGVybHlpbmcgdHlwZSBpcyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZQorICAgICAgIHZhbHVlcyBvZiB0aGUgZW51bWVyYXRvcnMuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgICAgRU5VTV9VTkRFUkxZSU5HX1RZUEUgd2lsbCBub3QgYmUgc2V0IHVudGlsIGFmdGVyIHRoZSBkZWZpbml0aW9uCisgICAgICAgb2YgdGhlIGVudW1lcmF0aW9uIGlzIGNvbXBsZXRlZCBieSBmaW5pc2hfZW51bS4gICovCisjZGVmaW5lIEVOVU1fVU5ERVJMWUlOR19UWVBFKFRZUEUpIFwKKyAgVFJFRV9UWVBFIChFTlVNRVJBTF9UWVBFX0NIRUNLIChUWVBFKSkKKworLyogW2RjbC5pbml0LmFnZ3JdCisKKyAgIEFuIGFnZ3JlZ2F0ZSBpcyBhbiBhcnJheSBvciBhIGNsYXNzIHdpdGggbm8gdXNlci1wcm92aWRlZAorICAgY29uc3RydWN0b3JzLCBubyBicmFjZS1vci1lcXVhbC1pbml0aWFsaXplcnMgZm9yIG5vbi1zdGF0aWMgZGF0YQorICAgbWVtYmVycywgbm8gcHJpdmF0ZSBvciBwcm90ZWN0ZWQgbm9uLXN0YXRpYyBkYXRhIG1lbWJlcnMsIG5vCisgICBiYXNlIGNsYXNzZXMsIGFuZCBubyB2aXJ0dWFsIGZ1bmN0aW9ucy4KKworICAgQXMgYW4gZXh0ZW5zaW9uLCB3ZSBhbHNvIHRyZWF0IHZlY3RvcnMgYXMgYWdncmVnYXRlcy4gIEtlZXAgdGhlc2UKKyAgIGNoZWNrcyBpbiBhc2NlbmRpbmcgY29kZSBvcmRlci4gICovCisjZGVmaW5lIENQX0FHR1JFR0FURV9UWVBFX1AoVFlQRSkJCQkJXAorICAoVFJFRV9DT0RFIChUWVBFKSA9PSBWRUNUT1JfVFlQRQkJCQlcCisgICB8fFRSRUVfQ09ERSAoVFlQRSkgPT0gQVJSQVlfVFlQRQkJCQlcCisgICB8fCAoQ0xBU1NfVFlQRV9QIChUWVBFKSAmJiAhQ0xBU1NUWVBFX05PTl9BR0dSRUdBVEUgKFRZUEUpKSkKKworLyogTm9uemVybyBmb3IgYSBjbGFzcyB0eXBlIG1lYW5zIHRoYXQgdGhlIGNsYXNzIHR5cGUgaGFzIGEKKyAgIHVzZXItZGVjbGFyZWQgY29uc3RydWN0b3IuICAqLworI2RlZmluZSBUWVBFX0hBU19VU0VSX0NPTlNUUlVDVE9SKE5PREUpIChUWVBFX0xBTkdfRkxBR18xIChOT0RFKSkKKworLyogV2hlbiBhcHBlYXJpbmcgaW4gYW4gSU5ESVJFQ1RfUkVGLCBpdCBtZWFucyB0aGF0IHRoZSB0cmVlIHN0cnVjdHVyZQorICAgdW5kZXJuZWF0aCBpcyBhY3R1YWxseSBhIGNhbGwgdG8gYSBjb25zdHJ1Y3Rvci4gIFRoaXMgaXMgbmVlZGVkCisgICB3aGVuIHRoZSBjb25zdHJ1Y3RvciBtdXN0IGluaXRpYWxpemUgbG9jYWwgc3RvcmFnZSAod2hpY2ggY2FuCisgICBiZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3llZCksIHJhdGhlciB0aGFuIGFsbG93aW5nIGl0IHRvIGFsbG9jYXRlCisgICBzcGFjZSBmcm9tIHRoZSBoZWFwLgorCisgICBXaGVuIGFwcGVhcmluZyBpbiBhIFNBVkVfRVhQUiwgaXQgbWVhbnMgdGhhdCB1bmRlcm5lYXRoCisgICBpcyBhIGNhbGwgdG8gYSBjb25zdHJ1Y3Rvci4KKworICAgV2hlbiBhcHBlYXJpbmcgaW4gYSBDT05TVFJVQ1RPUiwgdGhlIGV4cHJlc3Npb24gaXMgYQorICAgY29tcG91bmQgbGl0ZXJhbC4KKworICAgV2hlbiBhcHBlYXJpbmcgaW4gYSBGSUVMRF9ERUNMLCBpdCBtZWFucyB0aGF0IHRoaXMgZmllbGQKKyAgIGhhcyBiZWVuIGR1bHkgaW5pdGlhbGl6ZWQgaW4gaXRzIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgVFJFRV9IQVNfQ09OU1RSVUNUT1IoTk9ERSkgKFRSRUVfTEFOR19GTEFHXzQgKE5PREUpKQorCisvKiBUcnVlIGlmIE5PREUgaXMgYSBicmFjZS1lbmNsb3NlZCBpbml0aWFsaXplci4gICovCisjZGVmaW5lIEJSQUNFX0VOQ0xPU0VEX0lOSVRJQUxJWkVSX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBDT05TVFJVQ1RPUiAmJiBUUkVFX1RZUEUgKE5PREUpID09IGluaXRfbGlzdF90eXBlX25vZGUpCisKKy8qIFRydWUgaWYgTk9ERSBpcyBhIGNvbXBvdW5kLWxpdGVyYWwsIGkuZS4sIGEgYnJhY2UtZW5jbG9zZWQKKyAgIGluaXRpYWxpemVyIGNhc3QgdG8gYSBwYXJ0aWN1bGFyIHR5cGUuICAqLworI2RlZmluZSBDT01QT1VORF9MSVRFUkFMX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBDT05TVFJVQ1RPUiAmJiBUUkVFX0hBU19DT05TVFJVQ1RPUiAoTk9ERSkpCisKKyNkZWZpbmUgRU1QVFlfQ09OU1RSVUNUT1JfUChOT0RFKSAoVFJFRV9DT0RFIChOT0RFKSA9PSBDT05TVFJVQ1RPUiBcCisJCQkJICAgJiYgdmVjX3NhZmVfaXNfZW1wdHkoQ09OU1RSVUNUT1JfRUxUUyhOT0RFKSlcCisJCQkJICAgJiYgIVRSRUVfSEFTX0NPTlNUUlVDVE9SIChOT0RFKSkKKworLyogVHJ1ZSBpZiBOT0RFIGlzIGEgaW5pdC1saXN0IHVzZWQgYXMgYSBkaXJlY3QtaW5pdGlhbGl6ZXIsIGkuZS4KKyAgIEIgYnsxLDJ9LCBub3QgQiBiKHsxLDJ9KSBvciBCIGIgPSB7MSwyfS4gICovCisjZGVmaW5lIENPTlNUUlVDVE9SX0lTX0RJUkVDVF9JTklUKE5PREUpIChUUkVFX0xBTkdfRkxBR18wIChDT05TVFJVQ1RPUl9DSEVDSyAoTk9ERSkpKQorCisvKiBUcnVlIGlmIE5PREUgcmVwcmVzZW50cyBhIGNvbnZlcnNpb24gZm9yIGRpcmVjdC1pbml0aWFsaXphdGlvbiBpbiBhCisgICB0ZW1wbGF0ZS4gIFNldCBieSBwZXJmb3JtX2ltcGxpY2l0X2NvbnZlcnNpb25fZmxhZ3MuICAqLworI2RlZmluZSBJTVBMSUNJVF9DT05WX0VYUFJfRElSRUNUX0lOSVQoTk9ERSkgXAorICAoVFJFRV9MQU5HX0ZMQUdfMCAoSU1QTElDSVRfQ09OVl9FWFBSX0NIRUNLIChOT0RFKSkpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCBhbiBvYmplY3Qgb2YgdGhpcyB0eXBlIGNhbiBub3QgYmUgaW5pdGlhbGl6ZWQgdXNpbmcKKyAgIGFuIGluaXRpYWxpemVyIGxpc3QuICAqLworI2RlZmluZSBDTEFTU1RZUEVfTk9OX0FHR1JFR0FURShOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5ub25fYWdncmVnYXRlKQorI2RlZmluZSBUWVBFX05PTl9BR0dSRUdBVEVfQ0xBU1MoTk9ERSkgXAorICAoQ0xBU1NfVFlQRV9QIChOT0RFKSAmJiBDTEFTU1RZUEVfTk9OX0FHR1JFR0FURSAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgdGhlcmUgaXMgYSBub24tdHJpdmlhbCBYOjpvcD0oY3YgWCYpIGZvciB0aGlzIGNsYXNzLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfQ09NUExFWF9DT1BZX0FTU0lHTihOT0RFKSAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+aGFzX2NvbXBsZXhfY29weV9hc3NpZ24pCisKKy8qIE5vbnplcm8gaWYgdGhlcmUgaXMgYSBub24tdHJpdmlhbCBYOjpYKGN2IFgmKSBmb3IgdGhpcyBjbGFzcy4gICovCisjZGVmaW5lIFRZUEVfSEFTX0NPTVBMRVhfQ09QWV9DVE9SKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5oYXNfY29tcGxleF9jb3B5X2N0b3IpCisKKy8qIE5vbnplcm8gaWYgdGhlcmUgaXMgYSBub24tdHJpdmlhbCBYOjpvcD0oWCYmKSBmb3IgdGhpcyBjbGFzcy4gICovCisjZGVmaW5lIFRZUEVfSEFTX0NPTVBMRVhfTU9WRV9BU1NJR04oTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmhhc19jb21wbGV4X21vdmVfYXNzaWduKQorCisvKiBOb256ZXJvIGlmIHRoZXJlIGlzIGEgbm9uLXRyaXZpYWwgWDo6WChYJiYpIGZvciB0aGlzIGNsYXNzLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfQ09NUExFWF9NT1ZFX0NUT1IoTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmhhc19jb21wbGV4X21vdmVfY3RvcikKKworLyogTm9uemVybyBpZiB0aGVyZSBpcyBhIG5vbi10cml2aWFsIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIHRoaXMgY2xhc3MuICAqLworI2RlZmluZSBUWVBFX0hBU19DT01QTEVYX0RGTFQoTk9ERSkgKExBTkdfVFlQRV9DTEFTU19DSEVDSyAoTk9ERSktPmhhc19jb21wbGV4X2RmbHQpCisKKy8qIE5vbnplcm8gaWYgVFlQRSBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuICBGcm9tIFtjbGFzcy5kdG9yXToKKworICAgICBBIGRlc3RydWN0b3IgaXMgdHJpdmlhbCBpZiBpdCBpcyBhbiBpbXBsaWNpdGx5IGRlY2xhcmVkCisgICAgIGRlc3RydWN0b3IgYW5kIGlmOgorCisgICAgICAgLSBhbGwgb2YgdGhlIGRpcmVjdCBiYXNlIGNsYXNzZXMgb2YgaXRzIGNsYXNzIGhhdmUgdHJpdmlhbAorCSBkZXN0cnVjdG9ycywKKworICAgICAgIC0gZm9yIGFsbCBvZiB0aGUgbm9uLXN0YXRpYyBkYXRhIG1lbWJlcnMgb2YgaXRzIGNsYXNzIHRoYXQgYXJlCisJIG9mIGNsYXNzIHR5cGUgKG9yIGFycmF5IHRoZXJlb2YpLCBlYWNoIHN1Y2ggY2xhc3MgaGFzIGEKKwkgdHJpdmlhbCBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKE5PREUpIFwKKyAgKCFUWVBFX0hBU19OT05UUklWSUFMX0RFU1RSVUNUT1IgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBfVFlQRSBub2RlIG1lYW5zIHRoYXQgdGhpcyB0eXBlIGRvZXMgbm90IGhhdmUgYSB0cml2aWFsCisgICBkZXN0cnVjdG9yLiAgVGhlcmVmb3JlLCBkZXN0cm95aW5nIGFuIG9iamVjdCBvZiB0aGlzIHR5cGUgd2lsbAorICAgaW52b2x2ZSBhIGNhbGwgdG8gYSBkZXN0cnVjdG9yLiAgVGhpcyBjYW4gYXBwbHkgdG8gb2JqZWN0cyBvZgorICAgQVJSQVlfVFlQRSBpcyB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudHMgbmVlZHMgYSBkZXN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNfTk9OVFJJVklBTF9ERVNUUlVDVE9SKE5PREUpIFwKKyAgKFRZUEVfTEFOR19GTEFHXzQgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBjbGFzcyB0eXBlIG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgaXMgdHJpdmlhbC4gICovCisjZGVmaW5lIFRZUEVfSEFTX1RSSVZJQUxfREZMVChOT0RFKSBcCisgIChUWVBFX0hBU19ERUZBVUxUX0NPTlNUUlVDVE9SIChOT0RFKSAmJiAhIFRZUEVfSEFTX0NPTVBMRVhfREZMVCAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIGNsYXNzIHR5cGUgbWVhbnMgdGhhdCBjb3B5IGluaXRpYWxpemF0aW9uIG9mIHRoaXMgdHlwZSBjYW4gdXNlCisgICBhIGJpdHdpc2UgY29weS4gICovCisjZGVmaW5lIFRZUEVfSEFTX1RSSVZJQUxfQ09QWV9DVE9SKE5PREUpIFwKKyAgKFRZUEVfSEFTX0NPUFlfQ1RPUiAoTk9ERSkgJiYgISBUWVBFX0hBU19DT01QTEVYX0NPUFlfQ1RPUiAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIGNsYXNzIHR5cGUgbWVhbnMgdGhhdCBhc3NpZ25tZW50IG9mIHRoaXMgdHlwZSBjYW4gdXNlCisgICBhIGJpdHdpc2UgY29weS4gICovCisjZGVmaW5lIFRZUEVfSEFTX1RSSVZJQUxfQ09QWV9BU1NJR04oTk9ERSkgXAorICAoVFlQRV9IQVNfQ09QWV9BU1NJR04gKE5PREUpICYmICEgVFlQRV9IQVNfQ09NUExFWF9DT1BZX0FTU0lHTiAoTk9ERSkpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBOT0RFIGlzIGEgcG9pbnRlci10by1kYXRhLW1lbWJlci4gICovCisjZGVmaW5lIFRZUEVfUFRSREFUQU1FTV9QKE5PREUpCQkJXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBPRkZTRVRfVFlQRSkKKy8qIFJldHVybnMgdHJ1ZSBpZiBOT0RFIGlzIGEgcG9pbnRlci4gICovCisjZGVmaW5lIFRZUEVfUFRSX1AoTk9ERSkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IFBPSU5URVJfVFlQRSkKKworLyogUmV0dXJucyB0cnVlIGlmIE5PREUgaXMgYW4gb2JqZWN0IHR5cGU6CisKKyAgICAgW2Jhc2ljLnR5cGVzXQorCisgICAgIEFuIG9iamVjdCB0eXBlIGlzIGEgKHBvc3NpYmx5IGN2LXF1YWxpZmllZCkgdHlwZSB0aGF0IGlzIG5vdCBhCisgICAgIGZ1bmN0aW9uIHR5cGUsIG5vdCBhIHJlZmVyZW5jZSB0eXBlLCBhbmQgbm90IGEgdm9pZCB0eXBlLgorCisgICBLZWVwIHRoZXNlIGNoZWNrcyBpbiBhc2NlbmRpbmcgb3JkZXIsIGZvciBzcGVlZC4gICovCisjZGVmaW5lIFRZUEVfT0JKX1AoTk9ERSkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpICE9IFJFRkVSRU5DRV9UWVBFCQlcCisgICAmJiBUUkVFX0NPREUgKE5PREUpICE9IFZPSURfVFlQRQkJXAorICAgJiYgVFJFRV9DT0RFIChOT0RFKSAhPSBGVU5DVElPTl9UWVBFCQlcCisgICAmJiBUUkVFX0NPREUgKE5PREUpICE9IE1FVEhPRF9UWVBFKQorCisvKiBSZXR1cm5zIHRydWUgaWYgTk9ERSBpcyBhIHBvaW50ZXIgdG8gYW4gb2JqZWN0LiAgS2VlcCB0aGVzZSBjaGVja3MKKyAgIGluIGFzY2VuZGluZyB0cmVlIGNvZGUgb3JkZXIuICAqLworI2RlZmluZSBUWVBFX1BUUk9CX1AoTk9ERSkJCQkJCVwKKyAgKFRZUEVfUFRSX1AgKE5PREUpICYmIFRZUEVfT0JKX1AgKFRSRUVfVFlQRSAoTk9ERSkpKQorCisvKiBSZXR1cm5zIHRydWUgaWYgTk9ERSBpcyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QuICBLZWVwIHRoZXNlIGNoZWNrcworICAgaW4gYXNjZW5kaW5nIHRyZWUgY29kZSBvcmRlci4gICovCisjZGVmaW5lIFRZUEVfUkVGX09CSl9QKE5PREUpCQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IFJFRkVSRU5DRV9UWVBFICYmIFRZUEVfT0JKX1AgKFRSRUVfVFlQRSAoTk9ERSkpKQorCisvKiBSZXR1cm5zIHRydWUgaWYgTk9ERSBpcyBhIHBvaW50ZXIgdG8gYW4gb2JqZWN0LCBvciBhIHBvaW50ZXIgdG8KKyAgIHZvaWQuICBLZWVwIHRoZXNlIGNoZWNrcyBpbiBhc2NlbmRpbmcgdHJlZSBjb2RlIG9yZGVyLiAgKi8KKyNkZWZpbmUgVFlQRV9QVFJPQlZfUChOT0RFKQkJCQkJXAorICAoVFlQRV9QVFJfUCAoTk9ERSkJCQkJCQlcCisgICAmJiAhKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChOT0RFKSkgPT0gRlVOQ1RJT05fVFlQRQkJXAorCXx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFIChOT0RFKSkgPT0gTUVUSE9EX1RZUEUpKQorCisvKiBSZXR1cm5zIHRydWUgaWYgTk9ERSBpcyBhIHBvaW50ZXIgdG8gZnVuY3Rpb24uICAqLworI2RlZmluZSBUWVBFX1BUUkZOX1AoTk9ERSkJCQkJXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBQT0lOVEVSX1RZUEUJCQlcCisgICAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAoTk9ERSkpID09IEZVTkNUSU9OX1RZUEUpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBOT0RFIGlzIGEgcmVmZXJlbmNlIHRvIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgVFlQRV9SRUZGTl9QKE5PREUpCQkJCVwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gUkVGRVJFTkNFX1RZUEUJCQlcCisgICAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAoTk9ERSkpID09IEZVTkNUSU9OX1RZUEUpCisKKy8qIE5vbnplcm8gZm9yIF9UWVBFIG5vZGUgbWVhbnMgdGhhdCB0aGlzIHR5cGUgaXMgYSBwb2ludGVyIHRvIG1lbWJlcgorICAgZnVuY3Rpb24gdHlwZS4gICovCisjZGVmaW5lIFRZUEVfUFRSTUVNRlVOQ19QKE5PREUpCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IFJFQ09SRF9UWVBFCVwKKyAgICYmIFRZUEVfTEFOR19TUEVDSUZJQyAoTk9ERSkJCVwKKyAgICYmIFRZUEVfUFRSTUVNRlVOQ19GTEFHIChOT0RFKSkKKworI2RlZmluZSBUWVBFX1BUUk1FTUZVTkNfRkxBRyhOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5wdHJtZW1mdW5jX2ZsYWcpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBOT0RFIGlzIGEgcG9pbnRlci10by1tZW1iZXIuICAqLworI2RlZmluZSBUWVBFX1BUUk1FTV9QKE5PREUpIFwKKyAgKFRZUEVfUFRSREFUQU1FTV9QIChOT0RFKSB8fCBUWVBFX1BUUk1FTUZVTkNfUCAoTk9ERSkpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBOT0RFIGlzIGEgcG9pbnRlciBvciBhIHBvaW50ZXItdG8tbWVtYmVyLiAgKi8KKyNkZWZpbmUgVFlQRV9QVFJfT1JfUFRSTUVNX1AoTk9ERSkgXAorICAoVFlQRV9QVFJfUCAoTk9ERSkgfHwgVFlQRV9QVFJNRU1fUCAoTk9ERSkpCisKKy8qIEluZGljYXRlcyB3aGVuIG92ZXJsb2FkIHJlc29sdXRpb24gbWF5IHJlc29sdmUgdG8gYSBwb2ludGVyIHRvCisgICBtZW1iZXIgZnVuY3Rpb24uIFtleHByLnVuYXJ5Lm9wXS8zICovCisjZGVmaW5lIFBUUk1FTV9PS19QKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoVFJFRV9DSEVDSzMgKChOT0RFKSwgQUREUl9FWFBSLCBPRkZTRVRfUkVGLCBTQ09QRV9SRUYpKQorCisvKiBHZXQgdGhlIFBPSU5URVJfVFlQRSB0byB0aGUgTUVUSE9EX1RZUEUgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uLiAgVFlQRV9QVFJNRU1GVU5DX1AgX211c3RfIGJlIHRydWUsCisgICBiZWZvcmUgdXNpbmcgdGhpcyBtYWNyby4gICovCisjZGVmaW5lIFRZUEVfUFRSTUVNRlVOQ19GTl9UWVBFKE5PREUpIFwKKyAgKFRSRUVfVFlQRSAoVFlQRV9GSUVMRFMgKE5PREUpKSkKKworLyogUmV0dXJucyBgQScgZm9yIGEgdHlwZSBsaWtlIGBpbnQgKEE6OiopKGRvdWJsZSknICovCisjZGVmaW5lIFRZUEVfUFRSTUVNRlVOQ19PQkpFQ1RfVFlQRShOT0RFKSBcCisgIFRZUEVfTUVUSE9EX0JBU0VUWVBFIChUUkVFX1RZUEUgKFRZUEVfUFRSTUVNRlVOQ19GTl9UWVBFIChOT0RFKSkpCisKKy8qIFRoZXNlIGFyZSB1c2UgdG8gbWFuaXB1bGF0ZSB0aGUgY2Fub25pY2FsIFJFQ09SRF9UWVBFIGZyb20gdGhlCisgICBoYXNoZWQgUE9JTlRFUl9UWVBFLCBhbmQgY2FuIG9ubHkgYmUgdXNlZCBvbiB0aGUgUE9JTlRFUl9UWVBFLiAgKi8KKyNkZWZpbmUgVFlQRV9HRVRfUFRSTUVNRlVOQ19UWVBFKE5PREUpIFwKKyAgKFRZUEVfTEFOR19TUEVDSUZJQyAoTk9ERSkgPyBMQU5HX1RZUEVfUFRSTUVNX0NIRUNLIChOT0RFKS0+cmVjb3JkIDogTlVMTCkKKyNkZWZpbmUgVFlQRV9TRVRfUFRSTUVNRlVOQ19UWVBFKE5PREUsIFZBTFVFKQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgaWYgKFRZUEVfTEFOR19TUEVDSUZJQyAoTk9ERSkgPT0gTlVMTCkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlUWVBFX0xBTkdfU1BFQ0lGSUMgKE5PREUpID0gZ2djX2FsbG9jX2NsZWFyZWRfbGFuZ190eXBlCQlcCisJIChzaXplb2YgKHN0cnVjdCBsYW5nX3R5cGVfcHRybWVtKSk7CQkJCVwKKwlUWVBFX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51LnB0cm1lbS5oLmlzX2xhbmdfdHlwZV9jbGFzcyA9IDA7CVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgVFlQRV9MQU5HX1NQRUNJRklDIChOT0RFKS0+dS5wdHJtZW0ucmVjb3JkID0gKFZBTFVFKTsJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogRm9yIGEgcG9pbnRlci10by1tZW1iZXIgdHlwZSBvZiB0aGUgZm9ybSBgVCBYOjoqJywgdGhpcyBpcyBgWCcuCisgICBGb3IgYSB0eXBlIGxpa2UgYHZvaWQgKFg6OiopKCkgY29uc3QnLCB0aGlzIHR5cGUgaXMgYFgnLCBub3QgYGNvbnN0CisgICBYJy4gIFRvIGdldCBhdCB0aGUgYGNvbnN0IFgnIHlvdSBoYXZlIHRvIGxvb2sgYXQgdGhlCisgICBUWVBFX1BUUk1FTV9QT0lOVEVEX1RPX1RZUEU7IHRoZXJlLCB0aGUgZmlyc3QgcGFyYW1ldGVyIHdpbGwgaGF2ZQorICAgdHlwZSBgY29uc3QgWConLiAgKi8KKyNkZWZpbmUgVFlQRV9QVFJNRU1fQ0xBU1NfVFlQRShOT0RFKQkJCVwKKyAgKFRZUEVfUFRSREFUQU1FTV9QIChOT0RFKQkJCQkJXAorICAgPyBUWVBFX09GRlNFVF9CQVNFVFlQRSAoTk9ERSkJCVwKKyAgIDogVFlQRV9QVFJNRU1GVU5DX09CSkVDVF9UWVBFIChOT0RFKSkKKworLyogRm9yIGEgcG9pbnRlci10by1tZW1iZXIgdHlwZSBvZiB0aGUgZm9ybSBgVCBYOjoqJywgdGhpcyBpcyBgVCcuICAqLworI2RlZmluZSBUWVBFX1BUUk1FTV9QT0lOVEVEX1RPX1RZUEUoTk9ERSkJCVwKKyAgIChUWVBFX1BUUkRBVEFNRU1fUCAoTk9ERSkJCQkJXAorICAgID8gVFJFRV9UWVBFIChOT0RFKQkJCQkJXAorICAgIDogVFJFRV9UWVBFIChUWVBFX1BUUk1FTUZVTkNfRk5fVFlQRSAoTk9ERSkpKQorCisvKiBGb3IgYSBwb2ludGVyLXRvLW1lbWJlciBjb25zdGFudCBgWDo6WScgdGhpcyBpcyB0aGUgUkVDT1JEX1RZUEUgZm9yCisgICBgWCcuICAqLworI2RlZmluZSBQVFJNRU1fQ1NUX0NMQVNTKE5PREUpIFwKKyAgVFlQRV9QVFJNRU1fQ0xBU1NfVFlQRSAoVFJFRV9UWVBFIChQVFJNRU1fQ1NUX0NIRUNLIChOT0RFKSkpCisKKy8qIEZvciBhIHBvaW50ZXItdG8tbWVtYmVyIGNvbnN0YW50IGBYOjpZJyB0aGlzIGlzIHRoZSBfREVDTCBmb3IKKyAgIGBZJy4gICovCisjZGVmaW5lIFBUUk1FTV9DU1RfTUVNQkVSKE5PREUpICgoKHB0cm1lbV9jc3RfdClQVFJNRU1fQ1NUX0NIRUNLIChOT0RFKSktPm1lbWJlcikKKworLyogVGhlIGV4cHJlc3Npb24gaW4gcXVlc3Rpb24gZm9yIGEgVFlQRU9GX1RZUEUuICAqLworI2RlZmluZSBUWVBFT0ZfVFlQRV9FWFBSKE5PREUpIChUWVBFX1ZBTFVFU19SQVcgKFRZUEVPRl9UWVBFX0NIRUNLIChOT0RFKSkpCisKKy8qIFRoZSB0eXBlIGluIHF1ZXN0aW9uIGZvciBhbiBVTkRFUkxZSU5HX1RZUEUuICAqLworI2RlZmluZSBVTkRFUkxZSU5HX1RZUEVfVFlQRShOT0RFKSBcCisgIChUWVBFX1ZBTFVFU19SQVcgKFVOREVSTFlJTkdfVFlQRV9DSEVDSyAoTk9ERSkpKQorCisvKiBUaGUgdHlwZSBpbiBxdWVzdGlvbiBmb3IgQkFTRVMuICAqLworI2RlZmluZSBCQVNFU19UWVBFKE5PREUpIFwKKyAgKFRZUEVfVkFMVUVTX1JBVyAoQkFTRVNfQ0hFQ0sgKE5PREUpKSkKKworI2RlZmluZSBCQVNFU19ESVJFQ1QoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18wIChCQVNFU19DSEVDSyAoTk9ERSkpCisKKy8qIFRoZSBleHByZXNzaW9uIGluIHF1ZXN0aW9uIGZvciBhIERFQ0xUWVBFX1RZUEUuICAqLworI2RlZmluZSBERUNMVFlQRV9UWVBFX0VYUFIoTk9ERSkgKFRZUEVfVkFMVUVTX1JBVyAoREVDTFRZUEVfVFlQRV9DSEVDSyAoTk9ERSkpKQorCisvKiBXaGV0aGVyIHRoZSBERUNMVFlQRV9UWVBFX0VYUFIgb2YgTk9ERSB3YXMgb3JpZ2luYWxseSBwYXJzZWQgYXMgYW4KKyAgIGlkLWV4cHJlc3Npb24gb3IgYSBtZW1iZXItYWNjZXNzIGV4cHJlc3Npb24uIFdoZW4gZmFsc2UsIGl0IHdhcworICAgcGFyc2VkIGFzIGEgZnVsbCBleHByZXNzaW9uLiAgKi8KKyNkZWZpbmUgREVDTFRZUEVfVFlQRV9JRF9FWFBSX09SX01FTUJFUl9BQ0NFU1NfUChOT0RFKSBcCisgIChERUNMVFlQRV9UWVBFX0NIRUNLIChOT0RFKSktPnR5cGVfY29tbW9uLnN0cmluZ19mbGFnCisKKy8qIFRoZXNlIGZsYWdzIGluZGljYXRlIHRoYXQgd2Ugd2FudCBkaWZmZXJlbnQgc2VtYW50aWNzIGZyb20gbm9ybWFsCisgICBkZWNsdHlwZTogbGFtYmRhIGNhcHR1cmUganVzdCBkcm9wcyByZWZlcmVuY2VzLCBsYW1iZGEgcHJveGllcyBsb29rCisgICB0aHJvdWdoIGltcGxpY2l0IGRlcmVmZXJlbmNlLiAgKi8KKyNkZWZpbmUgREVDTFRZUEVfRk9SX0xBTUJEQV9DQVBUVVJFKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoREVDTFRZUEVfVFlQRV9DSEVDSyAoTk9ERSkpCisjZGVmaW5lIERFQ0xUWVBFX0ZPUl9MQU1CREFfUFJPWFkoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18yIChERUNMVFlQRV9UWVBFX0NIRUNLIChOT0RFKSkKKworLyogTm9uemVybyBmb3IgVkFSX0RFQ0wgYW5kIEZVTkNUSU9OX0RFQ0wgbm9kZSBtZWFucyB0aGF0IGBleHRlcm4nIHdhcworICAgc3BlY2lmaWVkIGluIGl0cyBkZWNsYXJhdGlvbi4gIFRoaXMgY2FuIGFsc28gYmUgc2V0IGZvciBhbgorICAgZXJyb25lb3VzbHkgZGVjbGFyZWQgUEFSTV9ERUNMLiAgKi8KKyNkZWZpbmUgREVDTF9USElTX0VYVEVSTihOT0RFKSBcCisgIERFQ0xfTEFOR19GTEFHXzIgKFZBUl9GVU5DVElPTl9PUl9QQVJNX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBWQVJfREVDTCBhbmQgRlVOQ1RJT05fREVDTCBub2RlIG1lYW5zIHRoYXQgYHN0YXRpYycgd2FzCisgICBzcGVjaWZpZWQgaW4gaXRzIGRlY2xhcmF0aW9uLiAgVGhpcyBjYW4gYWxzbyBiZSBzZXQgZm9yIGFuCisgICBlcnJvbmVvdXNseSBkZWNsYXJlZCBQQVJNX0RFQ0wuICAqLworI2RlZmluZSBERUNMX1RISVNfU1RBVElDKE5PREUpIFwKKyAgREVDTF9MQU5HX0ZMQUdfNiAoVkFSX0ZVTkNUSU9OX09SX1BBUk1fREVDTF9DSEVDSyAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIEZJRUxEX0RFQ0wgbm9kZSBtZWFucyB0aGF0IHRoaXMgZmllbGQgaXMgYSBiYXNlIGNsYXNzCisgICBvZiB0aGUgcGFyZW50IG9iamVjdCwgYXMgb3Bwb3NlZCB0byBhIG1lbWJlciBmaWVsZC4gICovCisjZGVmaW5lIERFQ0xfRklFTERfSVNfQkFTRShOT0RFKSBcCisgIERFQ0xfTEFOR19GTEFHXzYgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGZvciBGSUVMRF9ERUNMIG5vZGUgbWVhbnMgdGhhdCB0aGlzIGZpZWxkIGlzIGEgc2ltcGxlIChubworICAgZXhwbGljaXQgaW5pdGlhbGl6ZXIpIGxhbWJkYSBjYXB0dXJlIGZpZWxkLCBtYWtpbmcgaXQgaW52aXNpYmxlIHRvCisgICBuYW1lIGxvb2t1cCBpbiB1bmV2YWx1YXRlZCBjb250ZXh0cy4gICovCisjZGVmaW5lIERFQ0xfTk9STUFMX0NBUFRVUkVfUChOT0RFKSBcCisgIERFQ0xfTEFOR19GTEFHXzcgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpKQorCisvKiBOb256ZXJvIGlmIFRZUEUgaXMgYW4gYW5vbnltb3VzIHVuaW9uIG9yIHN0cnVjdCB0eXBlLiAgV2UgaGF2ZSB0byB1c2UgYQorICAgZmxhZyBmb3IgdGhpcyBiZWNhdXNlICJBIHVuaW9uIGZvciB3aGljaCBvYmplY3RzIG9yIHBvaW50ZXJzIGFyZQorICAgZGVjbGFyZWQgaXMgbm90IGFuIGFub255bW91cyB1bmlvbiIgW2NsYXNzLnVuaW9uXS4gICovCisjZGVmaW5lIEFOT05fQUdHUl9UWVBFX1AoTk9ERSkJCQkJXAorICAoQ0xBU1NfVFlQRV9QIChOT0RFKSAmJiBMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT5hbm9uX2FnZ3IpCisjZGVmaW5lIFNFVF9BTk9OX0FHR1JfVFlQRV9QKE5PREUpCQkJXAorICAoTEFOR19UWVBFX0NMQVNTX0NIRUNLIChOT0RFKS0+YW5vbl9hZ2dyID0gMSkKKworLyogTm9uemVybyBpZiBUWVBFIGlzIGFuIGFub255bW91cyB1bmlvbiB0eXBlLiAgKi8KKyNkZWZpbmUgQU5PTl9VTklPTl9UWVBFX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBVTklPTl9UWVBFICYmIEFOT05fQUdHUl9UWVBFX1AgKE5PREUpKQorCisvKiBEZWZpbmUgZmllbGRzIGFuZCBhY2Nlc3NvcnMgZm9yIG5vZGVzIHJlcHJlc2VudGluZyBkZWNsYXJlZCBuYW1lcy4gICovCisKKyNkZWZpbmUgVFlQRV9XQVNfQU5PTllNT1VTKE5PREUpIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT53YXNfYW5vbnltb3VzKQorCisvKiBDKys6IGFsbCBvZiB0aGVzZSBhcmUgb3ZlcmxvYWRlZCEgIFRoZXNlIGFwcGx5IG9ubHkgdG8gVFlQRV9ERUNMcy4gICovCisKKy8qIFRoZSBmb3JtYXQgb2YgZWFjaCBub2RlIGluIHRoZSBERUNMX0ZSSUVORExJU1QgaXMgYXMgZm9sbG93czoKKworICAgVGhlIFRSRUVfUFVSUE9TRSB3aWxsIGJlIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24sIGkuZS4sIGFuCisgICBJREVOVElGSUVSX05PREUuICBUaGUgVFJFRV9WQUxVRSB3aWxsIGJlIGl0c2VsZiBhIFRSRUVfTElTVCwgd2hvc2UKKyAgIFRSRUVfVkFMVUVzIGFyZSBmcmllbmRzIHdpdGggdGhlIGdpdmVuIG5hbWUuICAqLworI2RlZmluZSBERUNMX0ZSSUVORExJU1QoTk9ERSkJCShERUNMX0lOSVRJQUwgKE5PREUpKQorI2RlZmluZSBGUklFTkRfTkFNRShMSVNUKSAoVFJFRV9QVVJQT1NFIChMSVNUKSkKKyNkZWZpbmUgRlJJRU5EX0RFQ0xTKExJU1QpIChUUkVFX1ZBTFVFIChMSVNUKSkKKworLyogVGhlIERFQ0xfQUNDRVNTLCBpZiBub24tTlVMTCwgaXMgYSBUUkVFX0xJU1QuICBUaGUgVFJFRV9QVVJQT1NFIG9mCisgICBlYWNoIG5vZGUgaXMgYSB0eXBlOyB0aGUgVFJFRV9WQUxVRSBpcyB0aGUgYWNjZXNzIGdyYW50ZWQgZm9yIHRoaXMKKyAgIERFQ0wgaW4gdGhhdCB0eXBlLiAgVGhlIERFQ0xfQUNDRVNTIGlzIHNldCBieSBhY2Nlc3MgZGVjbGFyYXRpb25zLgorICAgRm9yIGV4YW1wbGUsIGlmIGEgbWVtYmVyIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgcHVibGljIGluIGEKKyAgIGRlcml2ZWQgY2xhc3MgaXMgbWFkZSBwcm90ZWN0ZWQsIHRoZW4gdGhlIGRlcml2ZWQgY2xhc3MgYW5kIHRoZQorICAgcHJvdGVjdGVkX2FjY2Vzc19ub2RlIHdpbGwgYXBwZWFyIGluIHRoZSBERUNMX0FDQ0VTUyBmb3IgdGhlIG5vZGUuICAqLworI2RlZmluZSBERUNMX0FDQ0VTUyhOT0RFKSAoTEFOR19ERUNMX1UyX0NIRUNLIChOT0RFLCAwKS0+YWNjZXNzKQorCisvKiBOb256ZXJvIGlmIHRoZSBGVU5DVElPTl9ERUNMIGlzIGEgZ2xvYmFsIGNvbnN0cnVjdG9yLiAgKi8KKyNkZWZpbmUgREVDTF9HTE9CQUxfQ1RPUl9QKE5PREUpIFwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmdsb2JhbF9jdG9yX3ApCisKKy8qIE5vbnplcm8gaWYgdGhlIEZVTkNUSU9OX0RFQ0wgaXMgYSBnbG9iYWwgZGVzdHJ1Y3Rvci4gICovCisjZGVmaW5lIERFQ0xfR0xPQkFMX0RUT1JfUChOT0RFKSBcCisgIChMQU5HX0RFQ0xfRk5fQ0hFQ0sgKE5PREUpLT5nbG9iYWxfZHRvcl9wKQorCisvKiBBY2Nlc3NvciBtYWNyb3MgZm9yIEMrKyB0ZW1wbGF0ZSBkZWNsIG5vZGVzLiAgKi8KKworLyogVGhlIERFQ0xfVEVNUExBVEVfUEFSTVMgYXJlIGEgbGlzdC4gIFRoZSBUUkVFX1BVUlBPU0Ugb2YgZWFjaCBub2RlCisgICBpcyBhIElOVF9DU1Qgd2hvc2UgVFJFRV9JTlRfQ1NUX0xPVyBpbmRpY2F0ZXMgdGhlIGxldmVsIG9mIHRoZQorICAgdGVtcGxhdGUgcGFyYW1ldGVycywgd2l0aCAxIGJlaW5nIHRoZSBvdXRlcm1vc3Qgc2V0IG9mIHRlbXBsYXRlCisgICBwYXJhbWV0ZXJzLiAgVGhlIFRSRUVfVkFMVUUgaXMgYSB2ZWN0b3IsIHdob3NlIGVsZW1lbnRzIGFyZSB0aGUKKyAgIHRlbXBsYXRlIHBhcmFtZXRlcnMgYXQgZWFjaCBsZXZlbC4gIEVhY2ggZWxlbWVudCBpbiB0aGUgdmVjdG9yIGlzIGEKKyAgIFRSRUVfTElTVCwgd2hvc2UgVFJFRV9WQUxVRSBpcyBhIFBBUk1fREVDTCAoaWYgdGhlIHBhcmFtZXRlciBpcyBhCisgICBub24tdHlwZSBwYXJhbWV0ZXIpLCBvciBhIFRZUEVfREVDTCAoaWYgdGhlIHBhcmFtZXRlciBpcyBhIHR5cGUKKyAgIHBhcmFtZXRlcikuICBUaGUgVFJFRV9QVVJQT1NFIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiBhbnkuICBUaGUKKyAgIFRFTVBMQVRFX1BBUk1fSU5ERVggZm9yIHRoZSBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIGFzIHRoZQorICAgREVDTF9JTklUSUFMIChmb3IgYSBQQVJNX0RFQ0wpIG9yIGFzIHRoZSBUUkVFX1RZUEUgKGZvciBhCisgICBUWVBFX0RFQ0wpLiAgKi8KKyNkZWZpbmUgREVDTF9URU1QTEFURV9QQVJNUyhOT0RFKSAgICAgICBERUNMX05PTl9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24uYXJndW1lbnRzCisjZGVmaW5lIERFQ0xfSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TKE5PREUpIFwKKyAgIElOTkVSTU9TVF9URU1QTEFURV9QQVJNUyAoREVDTF9URU1QTEFURV9QQVJNUyAoTk9ERSkpCisjZGVmaW5lIERFQ0xfTlRQQVJNUyhOT0RFKSBcCisgICBUUkVFX1ZFQ19MRU5HVEggKERFQ0xfSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TIChOT0RFKSkKKy8qIEZvciBmdW5jdGlvbiwgbWV0aG9kLCBjbGFzcy1kYXRhIHRlbXBsYXRlcy4gICovCisjZGVmaW5lIERFQ0xfVEVNUExBVEVfUkVTVUxUKE5PREUpICAgICAgREVDTF9SRVNVTFRfRkxEIChOT0RFKQorLyogRm9yIGEgZnVuY3Rpb24gdGVtcGxhdGUgYXQgbmFtZXNwYWNlIHNjb3BlLCBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT05TCisgICBsaXN0cyBhbGwgaW5zdGFudGlhdGlvbnMgYW5kIHNwZWNpYWxpemF0aW9ucyBvZiB0aGUgZnVuY3Rpb24gc28gdGhhdAorICAgdHN1YnN0X2ZyaWVuZF9mdW5jdGlvbiBjYW4gcmVhc3NpZ24gdGhlbSB0byBhbm90aGVyIHRlbXBsYXRlIGlmIHdlIGZpbmQKKyAgIHRoYXQgdGhlIG5hbWVzcGFjZS1zY29wZSB0ZW1wbGF0ZSBpcyByZWFsbHkgYSBwYXJ0aWFsIGluc3RhbnRpYXRpb24gb2YgYQorICAgZnJpZW5kIHRlbXBsYXRlLgorCisgICBGb3IgYSBjbGFzcyB0ZW1wbGF0ZSB0aGUgREVDTF9URU1QTEFURV9JTlNUQU5USUFUSU9OUyBsaXN0cyBob2xkcworICAgYWxsIGluc3RhbnRpYXRpb25zIGFuZCBzcGVjaWFsaXphdGlvbnMgb2YgdGhlIGNsYXNzIHR5cGUsIGluY2x1ZGluZworICAgcGFydGlhbCBpbnN0YW50aWF0aW9ucyBhbmQgcGFydGlhbCBzcGVjaWFsaXphdGlvbnMsIHNvIHRoYXQgaWYgd2UKKyAgIGV4cGxpY2l0bHkgc3BlY2lhbGl6ZSBhIHBhcnRpYWwgaW5zdGFudGlhdGlvbiB3ZSBjYW4gd2FsayB0aGUgbGlzdAorICAgaW4gbWF5YmVfcHJvY2Vzc19wYXJ0aWFsX3NwZWNpYWxpemF0aW9uIGFuZCByZWFzc2lnbiB0aGVtIG9yIGNvbXBsYWluCisgICBhcyBhcHByb3ByaWF0ZS4KKworICAgSW4gYm90aCBjYXNlcywgdGhlIFRSRUVfUFVSUE9TRSBvZiBlYWNoIG5vZGUgY29udGFpbnMgdGhlIGFyZ3VtZW50cworICAgdXNlZDsgdGhlIFRSRUVfVkFMVUUgY29udGFpbnMgdGhlIGdlbmVyYXRlZCB2YXJpYWJsZS4gIFRoZSB0ZW1wbGF0ZQorICAgYXJndW1lbnRzIGFyZSBhbHdheXMgY29tcGxldGUuICBGb3IgZXhhbXBsZSwgZ2l2ZW46CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgUzEgeworCXRlbXBsYXRlIDxjbGFzcyBVPiBzdHJ1Y3QgUzIge307CisJdGVtcGxhdGUgPGNsYXNzIFU+IHN0cnVjdCBTMjxVKj4ge307CisgICAgICB9OworCisgICB0aGUgcmVjb3JkIGZvciB0aGUgcGFydGlhbCBzcGVjaWFsaXphdGlvbiB3aWxsIGNvbnRhaW4sIGFzIGl0cworICAgYXJndW1lbnQgbGlzdCwgeyB7VH0sIHtVKn0gfSwgYW5kIHdpbGwgYmUgb24gdGhlCisgICBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT05TIGxpc3QgZm9yIGB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdGVtcGxhdGUKKyAgIDxjbGFzcyBVPiBzdHJ1Y3QgUzE8VD46OlMyJy4KKworICAgVGhpcyBsaXN0IGlzIG5vdCB1c2VkIGZvciBvdGhlciB0ZW1wbGF0ZXMuICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT05TKE5PREUpIERFQ0xfVklOREVYIChOT0RFKQorLyogRm9yIGEgY2xhc3MgdGVtcGxhdGUsIHRoaXMgbGlzdCBjb250YWlucyB0aGUgcGFydGlhbAorICAgc3BlY2lhbGl6YXRpb25zIG9mIHRoaXMgdGVtcGxhdGUuICAoRnVsbCBzcGVjaWFsaXphdGlvbnMgYXJlIG5vdAorICAgcmVjb3JkZWQgb24gdGhpcyBsaXN0LikgIFRoZSBUUkVFX1BVUlBPU0UgaG9sZHMgdGhlIGFyZ3VtZW50cyB1c2VkCisgICBpbiB0aGUgcGFydGlhbCBzcGVjaWFsaXphdGlvbiAoZS5nLiwgZm9yIGB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0CisgICBTPFQqLCBpbnQ+JyB0aGlzIHdpbGwgYmUgYFQqJy4pICBUaGUgYXJndW1lbnRzIHdpbGwgYWxzbyBpbmNsdWRlCisgICBhbnkgb3V0ZXIgdGVtcGxhdGUgYXJndW1lbnRzLiAgVGhlIFRSRUVfVkFMVUUgaG9sZHMgdGhlIGlubmVybW9zdAorICAgdGVtcGxhdGUgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWNpYWxpemF0aW9uIChlLmcuLCBgVCcgaW4gdGhlCisgICBleGFtcGxlIGFib3ZlLikgIFRoZSBUUkVFX1RZUEUgaXMgdGhlIF9UWVBFIG5vZGUgZm9yIHRoZSBwYXJ0aWFsCisgICBzcGVjaWFsaXphdGlvbi4KKworICAgVGhpcyBsaXN0IGlzIG5vdCB1c2VkIGZvciBvdGhlciB0ZW1wbGF0ZXMuICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OUyhOT0RFKSAgICAgREVDTF9TSVpFIChOT0RFKQorCisvKiBOb256ZXJvIGZvciBhIERFQ0wgd2hpY2ggaXMgYWN0dWFsbHkgYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICBLZWVwCisgICB0aGVzZSBjaGVja3MgaW4gYXNjZW5kaW5nIHRyZWUgY29kZSBvcmRlci4gICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX1BBUk1fUChOT0RFKQkJXAorICAoREVDTF9MQU5HX0ZMQUdfMCAoTk9ERSkJCQlcCisgICAmJiAoVFJFRV9DT0RFIChOT0RFKSA9PSBDT05TVF9ERUNMCQlcCisgICAgICAgfHwgVFJFRV9DT0RFIChOT0RFKSA9PSBQQVJNX0RFQ0wJCVwKKyAgICAgICB8fCBUUkVFX0NPREUgKE5PREUpID09IFRZUEVfREVDTAkJXAorICAgICAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gVEVNUExBVEVfREVDTCkpCisKKy8qIE1hcmsgTk9ERSBhcyBhIHRlbXBsYXRlIHBhcmFtZXRlci4gICovCisjZGVmaW5lIFNFVF9ERUNMX1RFTVBMQVRFX1BBUk1fUChOT0RFKSBcCisgIChERUNMX0xBTkdfRkxBR18wIChOT0RFKSA9IDEpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFtZXRlci4gICovCisjZGVmaW5lIERFQ0xfVEVNUExBVEVfVEVNUExBVEVfUEFSTV9QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVEVNUExBVEVfREVDTCAmJiBERUNMX1RFTVBMQVRFX1BBUk1fUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBpcyBhIFRFTVBMQVRFX0RFQ0wgcmVwcmVzZW50aW5nIGFuCisgICBVTkJPVU5EX0NMQVNTX1RFTVBMQVRFIHRyZWUgbm9kZS4gICovCisjZGVmaW5lIERFQ0xfVU5CT1VORF9DTEFTU19URU1QTEFURV9QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVEVNUExBVEVfREVDTCAmJiAhREVDTF9URU1QTEFURV9SRVNVTFQgKE5PREUpKQorCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fVEVNUExBVEVfUChOT0RFKSAgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBURU1QTEFURV9ERUNMIFwKKyAgICYmICFERUNMX1VOQk9VTkRfQ0xBU1NfVEVNUExBVEVfUCAoTk9ERSkgXAorICAgJiYgVFJFRV9DT0RFIChERUNMX1RFTVBMQVRFX1JFU1VMVCAoTk9ERSkpID09IEZVTkNUSU9OX0RFQ0wpCisKKy8qIE5vbnplcm8gZm9yIGEgREVDTCB0aGF0IHJlcHJlc2VudHMgYSBjbGFzcyB0ZW1wbGF0ZSBvciBhbGlhcworICAgdGVtcGxhdGUuICAqLworI2RlZmluZSBERUNMX1RZUEVfVEVNUExBVEVfUChOT0RFKQkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRFTVBMQVRFX0RFQ0wJCQkJXAorICAgJiYgREVDTF9URU1QTEFURV9SRVNVTFQgKE5PREUpICE9IE5VTExfVFJFRQkJCVwKKyAgICYmIFRSRUVfQ09ERSAoREVDTF9URU1QTEFURV9SRVNVTFQgKE5PREUpKSA9PSBUWVBFX0RFQ0wpCisKKy8qIE5vbnplcm8gZm9yIGEgREVDTCB0aGF0IHJlcHJlc2VudHMgYSBjbGFzcyB0ZW1wbGF0ZS4gICovCisjZGVmaW5lIERFQ0xfQ0xBU1NfVEVNUExBVEVfUChOT0RFKQkJCQlcCisgIChERUNMX1RZUEVfVEVNUExBVEVfUCAoTk9ERSkJCQkJCVwKKyAgICYmIERFQ0xfSU1QTElDSVRfVFlQRURFRl9QIChERUNMX1RFTVBMQVRFX1JFU1VMVCAoTk9ERSkpKQorCisvKiBOb256ZXJvIGZvciBhIFRFTVBMQVRFX0RFQ0wgdGhhdCByZXByZXNlbnRzIGFuIGFsaWFzIHRlbXBsYXRlLiAgKi8KKyNkZWZpbmUgREVDTF9BTElBU19URU1QTEFURV9QKE5PREUpCQkJXAorICAoREVDTF9UWVBFX1RFTVBMQVRFX1AgKE5PREUpCQkJCVwKKyAgICYmICFERUNMX0FSVElGSUNJQUwgKERFQ0xfVEVNUExBVEVfUkVTVUxUIChOT0RFKSkpCisKKy8qIE5vbnplcm8gZm9yIGEgTk9ERSB3aGljaCBkZWNsYXJlcyBhIHR5cGUuICAqLworI2RlZmluZSBERUNMX0RFQ0xBUkVTX1RZUEVfUChOT0RFKSBcCisgIChUUkVFX0NPREUgKE5PREUpID09IFRZUEVfREVDTCB8fCBERUNMX1RZUEVfVEVNUExBVEVfUCAoTk9ERSkpCisKKy8qIE5vbnplcm8gaWYgTk9ERSBkZWNsYXJlcyBhIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9ERUNMQVJFU19GVU5DVElPTl9QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gRlVOQ1RJT05fREVDTCB8fCBERUNMX0ZVTkNUSU9OX1RFTVBMQVRFX1AgKE5PREUpKQorCisvKiBOb256ZXJvIGlmIE5PREUgaXMgdGhlIHR5cGVkZWYgaW1wbGljaXRseSBnZW5lcmF0ZWQgZm9yIGEgdHlwZSB3aGVuCisgICB0aGUgdHlwZSBpcyBkZWNsYXJlZC4gIEluIEMrKywgYHN0cnVjdCBTIHt9OycgaXMgcm91Z2hseQorICAgZXF1aXZhbGVudCB0byBgc3RydWN0IFMge307IHR5cGVkZWYgc3RydWN0IFMgUzsnIGluIEMuCisgICBERUNMX0lNUExJQ0lUX1RZUEVERUZfUCB3aWxsIGhvbGQgZm9yIHRoZSB0eXBlZGVmIGluZGljYXRlZCBpbiB0aGlzCisgICBleGFtcGxlLiAgSW4gQysrLCB0aGVyZSBpcyBhIHNlY29uZCBpbXBsaWNpdCB0eXBlZGVmIGZvciBlYWNoCisgICBjbGFzcywgaW4gdGhlIHNjb3BlIG9mIGBTJyBpdHNlbGYsIHNvIHRoYXQgeW91IGNhbiBzYXkgYFM6OlMnLgorICAgREVDTF9TRUxGX1JFRkVSRU5DRV9QIHdpbGwgaG9sZCBmb3IgdGhhdCBzZWNvbmQgdHlwZWRlZi4gICovCisjZGVmaW5lIERFQ0xfSU1QTElDSVRfVFlQRURFRl9QKE5PREUpIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gVFlQRV9ERUNMICYmIERFQ0xfTEFOR19GTEFHXzIgKE5PREUpKQorI2RlZmluZSBTRVRfREVDTF9JTVBMSUNJVF9UWVBFREVGX1AoTk9ERSkgXAorICAoREVDTF9MQU5HX0ZMQUdfMiAoTk9ERSkgPSAxKQorI2RlZmluZSBERUNMX1NFTEZfUkVGRVJFTkNFX1AoTk9ERSkgXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBUWVBFX0RFQ0wgJiYgREVDTF9MQU5HX0ZMQUdfNCAoTk9ERSkpCisjZGVmaW5lIFNFVF9ERUNMX1NFTEZfUkVGRVJFTkNFX1AoTk9ERSkgXAorICAoREVDTF9MQU5HX0ZMQUdfNCAoTk9ERSkgPSAxKQorCisvKiBBIGBwcmltYXJ5JyB0ZW1wbGF0ZSBpcyBvbmUgdGhhdCBoYXMgaXRzIG93biB0ZW1wbGF0ZSBoZWFkZXIuICBBCisgICBtZW1iZXIgZnVuY3Rpb24gb2YgYSBjbGFzcyB0ZW1wbGF0ZSBpcyBhIHRlbXBsYXRlLCBidXQgbm90IHByaW1hcnkuCisgICBBIG1lbWJlciB0ZW1wbGF0ZSBpcyBwcmltYXJ5LiAgRnJpZW5kIHRlbXBsYXRlcyBhcmUgcHJpbWFyeSwgdG9vLiAgKi8KKworLyogUmV0dXJucyB0aGUgcHJpbWFyeSB0ZW1wbGF0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZXNlIHBhcmFtZXRlcnMuICAqLworI2RlZmluZSBERUNMX1BSSU1BUllfVEVNUExBVEUoTk9ERSkgXAorICAoVFJFRV9UWVBFIChERUNMX0lOTkVSTU9TVF9URU1QTEFURV9QQVJNUyAoTk9ERSkpKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWYgTk9ERSBpcyBhIHByaW1hcnkgdGVtcGxhdGUuICAqLworI2RlZmluZSBQUklNQVJZX1RFTVBMQVRFX1AoTk9ERSkgKERFQ0xfUFJJTUFSWV9URU1QTEFURSAoTk9ERSkgPT0gKE5PREUpKQorCisvKiBOb256ZXJvIGlmZiBOT0RFIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgYSB0ZW1wbGF0ZS4gIFRoZSB2YWx1ZQorICAgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHNwZWNpYWxpemF0aW9uczoKKworICAgICAxPWltcGxpY2l0IGluc3RhbnRpYXRpb24KKworICAgICAyPXBhcnRpYWwgb3IgZXhwbGljaXQgc3BlY2lhbGl6YXRpb24sIGUuZy46CisKKyAgICAgICAgdGVtcGxhdGUgPD4gaW50IG1pbjxpbnQ+IChpbnQsIGludCksCisKKyAgICAgMz1leHBsaWNpdCBpbnN0YW50aWF0aW9uLCBlLmcuOgorICAKKyAgICAgICAgdGVtcGxhdGUgaW50IG1pbjxpbnQ+IChpbnQsIGludCk7CisKKyAgIE5vdGUgdGhhdCBOT0RFIHdpbGwgYmUgbWFya2VkIGFzIGEgc3BlY2lhbGl6YXRpb24gZXZlbiBpZiB0aGUKKyAgIHRlbXBsYXRlIGl0IGlzIGluc3RhbnRpYXRpbmcgaXMgbm90IGEgcHJpbWFyeSB0ZW1wbGF0ZS4gIEZvcgorICAgZXhhbXBsZSwgZ2l2ZW46CisKKyAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBPIHsgCisgICAgICAgdm9pZCBmKCk7CisgICAgICAgc3RydWN0IEkge307IAorICAgICB9OworICAgIAorICAgYm90aCBPPGludD46OmYgYW5kIE88aW50Pjo6SSB3aWxsIGJlIG1hcmtlZCBhcyBpbnN0YW50aWF0aW9ucy4KKworICAgSWYgREVDTF9VU0VfVEVNUExBVEUgaXMgbm9uemVybywgdGhlbiBERUNMX1RFTVBMQVRFX0lORk8gd2lsbCBhbHNvCisgICBiZSBub24tTlVMTC4gICovCisjZGVmaW5lIERFQ0xfVVNFX1RFTVBMQVRFKE5PREUpIChERUNMX0xBTkdfU1BFQ0lGSUMgKE5PREUpLT51LmJhc2UudXNlX3RlbXBsYXRlKQorCisvKiBMaWtlIERFQ0xfVVNFX1RFTVBMQVRFLCBidXQgZm9yIGNsYXNzIHR5cGVzLiAgKi8KKyNkZWZpbmUgQ0xBU1NUWVBFX1VTRV9URU1QTEFURShOT0RFKSBcCisgIChMQU5HX1RZUEVfQ0xBU1NfQ0hFQ0sgKE5PREUpLT51c2VfdGVtcGxhdGUpCisKKy8qIFRydWUgaWYgTk9ERSBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIGEgcHJpbWFyeSB0ZW1wbGF0ZS4gICovCisjZGVmaW5lIENMQVNTVFlQRV9TUEVDSUFMSVpBVElPTl9PRl9QUklNQVJZX1RFTVBMQVRFX1AoTk9ERSkJXAorICAoQ0xBU1NfVFlQRV9QIChOT0RFKQkJCQkJCVwKKyAgICYmIENMQVNTVFlQRV9VU0VfVEVNUExBVEUgKE5PREUpCQkJCVwKKyAgICYmIFBSSU1BUllfVEVNUExBVEVfUCAoQ0xBU1NUWVBFX1RJX1RFTVBMQVRFIChOT0RFKSkpCisKKyNkZWZpbmUgREVDTF9URU1QTEFURV9JTlNUQU5USUFUSU9OKE5PREUpIChERUNMX1VTRV9URU1QTEFURSAoTk9ERSkgJiAxKQorI2RlZmluZSBDTEFTU1RZUEVfVEVNUExBVEVfSU5TVEFOVElBVElPTihOT0RFKSBcCisgIChDTEFTU1RZUEVfVVNFX1RFTVBMQVRFIChOT0RFKSAmIDEpCisKKyNkZWZpbmUgREVDTF9URU1QTEFURV9TUEVDSUFMSVpBVElPTihOT0RFKSAoREVDTF9VU0VfVEVNUExBVEUgKE5PREUpID09IDIpCisjZGVmaW5lIFNFVF9ERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OKE5PREUpIChERUNMX1VTRV9URU1QTEFURSAoTk9ERSkgPSAyKQorCisvKiBSZXR1cm5zIHRydWUgZm9yIGFuIGV4cGxpY2l0IG9yIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgYSBjbGFzcworICAgdGVtcGxhdGUuICAqLworI2RlZmluZSBDTEFTU1RZUEVfVEVNUExBVEVfU1BFQ0lBTElaQVRJT04oTk9ERSkgXAorICAoQ0xBU1NUWVBFX1VTRV9URU1QTEFURSAoTk9ERSkgPT0gMikKKyNkZWZpbmUgU0VUX0NMQVNTVFlQRV9URU1QTEFURV9TUEVDSUFMSVpBVElPTihOT0RFKSBcCisgIChDTEFTU1RZUEVfVVNFX1RFTVBMQVRFIChOT0RFKSA9IDIpCisKKyNkZWZpbmUgREVDTF9JTVBMSUNJVF9JTlNUQU5USUFUSU9OKE5PREUpIChERUNMX1VTRV9URU1QTEFURSAoTk9ERSkgPT0gMSkKKyNkZWZpbmUgU0VUX0RFQ0xfSU1QTElDSVRfSU5TVEFOVElBVElPTihOT0RFKSAoREVDTF9VU0VfVEVNUExBVEUgKE5PREUpID0gMSkKKyNkZWZpbmUgQ0xBU1NUWVBFX0lNUExJQ0lUX0lOU1RBTlRJQVRJT04oTk9ERSkgXAorICAoQ0xBU1NUWVBFX1VTRV9URU1QTEFURSAoTk9ERSkgPT0gMSkKKyNkZWZpbmUgU0VUX0NMQVNTVFlQRV9JTVBMSUNJVF9JTlNUQU5USUFUSU9OKE5PREUpIFwKKyAgKENMQVNTVFlQRV9VU0VfVEVNUExBVEUgKE5PREUpID0gMSkKKworI2RlZmluZSBERUNMX0VYUExJQ0lUX0lOU1RBTlRJQVRJT04oTk9ERSkgKERFQ0xfVVNFX1RFTVBMQVRFIChOT0RFKSA9PSAzKQorI2RlZmluZSBTRVRfREVDTF9FWFBMSUNJVF9JTlNUQU5USUFUSU9OKE5PREUpIChERUNMX1VTRV9URU1QTEFURSAoTk9ERSkgPSAzKQorI2RlZmluZSBDTEFTU1RZUEVfRVhQTElDSVRfSU5TVEFOVElBVElPTihOT0RFKSBcCisgIChDTEFTU1RZUEVfVVNFX1RFTVBMQVRFIChOT0RFKSA9PSAzKQorI2RlZmluZSBTRVRfQ0xBU1NUWVBFX0VYUExJQ0lUX0lOU1RBTlRJQVRJT04oTk9ERSkgXAorICAoQ0xBU1NUWVBFX1VTRV9URU1QTEFURSAoTk9ERSkgPSAzKQorCisvKiBOb256ZXJvIGlmIERFQ0wgaXMgYSBmcmllbmQgZnVuY3Rpb24gd2hpY2ggaXMgYW4gaW5zdGFudGlhdGlvbgorICAgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgY29tcGlsZXIsIGJ1dCBub3QgZnJvbSB0aGUgcG9pbnQgb2YKKyAgIHZpZXcgb2YgdGhlIGxhbmd1YWdlLiAgRm9yIGV4YW1wbGUgZ2l2ZW46CisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFMgeyBmcmllbmQgdm9pZCBmKFQpIHt9OyB9OworICAgdGhlIGRlY2xhcmF0aW9uIG9mIGB2b2lkIGYoaW50KScgZ2VuZXJhdGVkIHdoZW4gUzxpbnQ+IGlzCisgICBpbnN0YW50aWF0ZWQgd2lsbCBub3QgYmUgYSBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT04sIGJ1dCB3aWxsIGJlCisgICBhIERFQ0xfRlJJRU5EX1BTRVVET19URU1QTEFURV9JTlNUQU5USUFUSU9OLiAgKi8KKyNkZWZpbmUgREVDTF9GUklFTkRfUFNFVURPX1RFTVBMQVRFX0lOU1RBTlRJQVRJT04oREVDTCkgXAorICAoREVDTF9URU1QTEFURV9JTkZPIChERUNMKSAmJiAhREVDTF9VU0VfVEVNUExBVEUgKERFQ0wpKQorCisvKiBOb256ZXJvIGlmIERFQ0wgaXMgYSBmdW5jdGlvbiBnZW5lcmF0ZWQgZnJvbSBhIGZ1bmN0aW9uICd0ZW1wbG9pZCcsCisgICBpLmUuIHRlbXBsYXRlLCBtZW1iZXIgb2YgY2xhc3MgdGVtcGxhdGUsIG9yIGRlcGVuZGVudCBmcmllbmQuICAqLworI2RlZmluZSBERUNMX1RFTVBMT0lEX0lOU1RBTlRJQVRJT04oREVDTCkJCVwKKyAgKERFQ0xfVEVNUExBVEVfSU5TVEFOVElBVElPTiAoREVDTCkJCQlcCisgICB8fCBERUNMX0ZSSUVORF9QU0VVRE9fVEVNUExBVEVfSU5TVEFOVElBVElPTiAoREVDTCkpCisKKy8qIE5vbnplcm8gaWYgREVDTCBpcyBlaXRoZXIgZGVmaW5lZCBpbXBsaWNpdGx5IGJ5IHRoZSBjb21waWxlciBvcgorICAgZ2VuZXJhdGVkIGZyb20gYSB0ZW1wbG9pZC4gICovCisjZGVmaW5lIERFQ0xfR0VORVJBVEVEX1AoREVDTCkgXAorICAoREVDTF9URU1QTE9JRF9JTlNUQU5USUFUSU9OIChERUNMKSB8fCBERUNMX0RFRkFVTFRFRF9GTiAoREVDTCkpCisKKy8qIE5vbnplcm8gaWZmIHdlIGFyZSBjdXJyZW50bHkgcHJvY2Vzc2luZyBhIGRlY2xhcmF0aW9uIGZvciBhbgorICAgZW50aXR5IHdpdGggaXRzIG93biB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbGlzdCwgYW5kIHdoaWNoIGlzIG5vdCBhCisgICBmdWxsIHNwZWNpYWxpemF0aW9uLiAgKi8KKyNkZWZpbmUgUFJPQ0VTU0lOR19SRUFMX1RFTVBMQVRFX0RFQ0xfUCgpIFwKKyAgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCA+IHRlbXBsYXRlX2NsYXNzX2RlcHRoIChjdXJyZW50X3Njb3BlICgpKSkKKworLyogTm9uemVybyBpZiB0aGlzIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wgaGFzIGFscmVhZHkgYmVlbgorICAgaW5zdGFudGlhdGVkLCBpLmUuIGl0cyBkZWZpbml0aW9uIGhhcyBiZWVuIGdlbmVyYXRlZCBmcm9tIHRoZQorICAgcGF0dGVybiBnaXZlbiBpbiB0aGUgdGVtcGxhdGUuICAqLworI2RlZmluZSBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRFRChOT0RFKSBcCisgIERFQ0xfTEFOR19GTEFHXzEgKFZBUl9PUl9GVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKSkKKworLyogV2Uga25vdyB3aGF0IHdlJ3JlIGRvaW5nIHdpdGggdGhpcyBkZWNsIG5vdy4gICovCisjZGVmaW5lIERFQ0xfSU5URVJGQUNFX0tOT1dOKE5PREUpIERFQ0xfTEFOR19GTEFHXzUgKE5PREUpCisKKy8qIERFQ0xfRVhURVJOQUwgbXVzdCBiZSBzZXQgb24gYSBkZWNsIHVudGlsIHRoZSBkZWNsIGlzIGFjdHVhbGx5IGVtaXR0ZWQsCisgICBzbyB0aGF0IGFzc2VtYmxlX2V4dGVybmFsIHdpbGwgd29yayBwcm9wZXJseS4gIFNvIHdlIGhhdmUgdGhpcyBmbGFnIHRvCisgICB0ZWxsIHVzIHdoZXRoZXIgdGhlIGRlY2wgaXMgcmVhbGx5IG5vdCBleHRlcm5hbC4KKworICAgVGhpcyBmbGFnIGRvZXMgbm90IGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBkZWNsIGlzIGRlZmluZWQgaW4gdGhlCisgICBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQ7IGl0IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZW1pdCB0aGUKKyAgIGRlY2wgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbiBpZiBpdCBpcyBkZWZpbmVkIGFuZCBuZWVkZWQuICAqLworI2RlZmluZSBERUNMX05PVF9SRUFMTFlfRVhURVJOKE5PREUpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoTk9ERSktPnUuYmFzZS5ub3RfcmVhbGx5X2V4dGVybikKKworI2RlZmluZSBERUNMX1JFQUxMWV9FWFRFUk4oTk9ERSkgXAorICAoREVDTF9FWFRFUk5BTCAoTk9ERSkgJiYgISBERUNMX05PVF9SRUFMTFlfRVhURVJOIChOT0RFKSkKKworLyogQSB0aHVuayBpcyBhIHN0dWIgZnVuY3Rpb24uCisKKyAgIEEgdGh1bmsgaXMgYW4gYWx0ZXJuYXRlIGVudHJ5IHBvaW50IGZvciBhbiBvcmRpbmFyeSBGVU5DVElPTl9ERUNMLgorICAgVGhlIGFkZHJlc3Mgb2YgdGhlIG9yZGluYXJ5IEZVTkNUSU9OX0RFQ0wgaXMgZ2l2ZW4gYnkgdGhlCisgICBERUNMX0lOSVRJQUwsIHdoaWNoIGlzIGFsd2F5cyBhbiBBRERSX0VYUFIgd2hvc2Ugb3BlcmFuZCBpcyBhCisgICBGVU5DVElPTl9ERUNMLiAgVGhlIGpvYiBvZiB0aGUgdGh1bmsgaXMgdG8gZWl0aGVyIGFkanVzdCB0aGUgdGhpcworICAgcG9pbnRlciBiZWZvcmUgdHJhbnNmZXJyaW5nIGNvbnRyb2wgdG8gdGhlIEZVTkNUSU9OX0RFQ0wsIG9yIGNhbGwKKyAgIEZVTkNUSU9OX0RFQ0wgYW5kIHRoZW4gYWRqdXN0IHRoZSByZXN1bHQgdmFsdWUuIE5vdGUsIHRoZSByZXN1bHQKKyAgIHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rIG11c3QgcGVyZm9ybSBhIGNhbGwgdG8gdGhlIHRodW5rZWQKKyAgIGZ1bmN0aW9uLCAob3IgYmUgaW1wbGVtZW50ZWQgdmlhIHBhc3Npbmcgc29tZSBpbnZpc2libGUgcGFyYW1ldGVyCisgICB0byB0aGUgdGh1bmtlZCBmdW5jdGlvbiwgd2hpY2ggaXMgbW9kaWZpZWQgdG8gcGVyZm9ybSB0aGUKKyAgIGFkanVzdG1lbnQganVzdCBiZWZvcmUgcmV0dXJuaW5nKS4KKworICAgQSB0aHVuayBtYXkgcGVyZm9ybSBlaXRoZXIsIG9yIGJvdGgsIG9mIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKworICAgbyBBZGp1c3QgdGhlIHRoaXMgb3IgcmVzdWx0IHBvaW50ZXIgYnkgYSBjb25zdGFudCBvZmZzZXQuCisgICBvIEFkanVzdCB0aGUgdGhpcyBvciByZXN1bHQgcG9pbnRlciBieSBsb29raW5nIHVwIGEgdmNhbGwgb3IgdmJhc2Ugb2Zmc2V0CisgICAgIGluIHRoZSB2dGFibGUuCisKKyAgIEEgdGhpcyBwb2ludGVyIGFkanVzdGluZyB0aHVuayBjb252ZXJ0cyBmcm9tIGEgYmFzZSB0byBhIGRlcml2ZWQKKyAgIGNsYXNzLCBhbmQgaGVuY2UgYWRkcyB0aGUgb2Zmc2V0cy4gQSByZXN1bHQgcG9pbnRlciBhZGp1c3RpbmcgdGh1bmsKKyAgIGNvbnZlcnRzIGZyb20gYSBkZXJpdmVkIGNsYXNzIHRvIGEgYmFzZSwgYW5kIGhlbmNlIHN1YnRyYWN0cyB0aGUKKyAgIG9mZnNldHMuICBJZiBib3RoIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwgdGhlbiB0aGUgY29uc3RhbnQKKyAgIGFkanVzdG1lbnQgaXMgcGVyZm9ybWVkIGZpcnN0IGZvciB0aGlzIHBvaW50ZXIgYWRqdXN0bWVudCBhbmQgbGFzdAorICAgZm9yIHRoZSByZXN1bHQgcG9pbnRlciBhZGp1c3RtZW50LgorCisgICBUaGUgY29uc3RhbnQgYWRqdXN0bWVudCBpcyBnaXZlbiBieSBUSFVOS19GSVhFRF9PRkZTRVQuICBJZiB0aGUKKyAgIHZjYWxsIG9yIHZiYXNlIG9mZnNldCBpcyByZXF1aXJlZCwgVEhVTktfVklSVFVBTF9PRkZTRVQgaXMKKyAgIHVzZWQuIEZvciB0aGlzIHBvaW50ZXIgYWRqdXN0aW5nIHRodW5rcywgaXQgaXMgdGhlIHZjYWxsIG9mZnNldAorICAgaW50byB0aGUgdnRhYmxlLiAgRm9yIHJlc3VsdCBwb2ludGVyIGFkanVzdGluZyB0aHVua3MgaXQgaXMgdGhlCisgICBiaW5mbyBvZiB0aGUgdmlydHVhbCBiYXNlIHRvIGNvbnZlcnQgdG8uICBVc2UgdGhhdCBiaW5mbydzIHZiYXNlCisgICBvZmZzZXQuCisKKyAgIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgZXF1aXZhbGVudCBjb3ZhcmlhbnQgdGh1bmtzLiAgVGhlc2UgYXJlCisgICBkaXN0aW5jdCB2aXJ0dWFsIGNvdmFyaWFudCB0aHVua3Mgd2hvc2UgdmJhc2Ugb2Zmc2V0cyBoYXBwZW4gdG8KKyAgIGhhdmUgdGhlIHNhbWUgdmFsdWUuICBUSFVOS19BTElBUyBpcyB1c2VkIHRvIHBpY2sgb25lIGFzIHRoZQorICAgY2Fub25pY2FsIHRodW5rLCB3aGljaCB3aWxsIGdldCBhbGwgdGhlIHRoaXMgcG9pbnRlciBhZGp1c3RpbmcKKyAgIHRodW5rcyBhdHRhY2hlZCB0byBpdC4gICovCisKKy8qIEFuIGludGVnZXIgaW5kaWNhdGluZyBob3cgbWFueSBieXRlcyBzaG91bGQgYmUgc3VidHJhY3RlZCBmcm9tIHRoZQorICAgdGhpcyBvciByZXN1bHQgcG9pbnRlciB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAgKi8KKyNkZWZpbmUgVEhVTktfRklYRURfT0ZGU0VUKERFQ0wpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoVEhVTktfRlVOQ1RJT05fQ0hFQ0sgKERFQ0wpKS0+dS5mbi51NS5maXhlZF9vZmZzZXQpCisKKy8qIEEgdHJlZSBpbmRpY2F0aW5nIGhvdyB0byBwZXJmb3JtIHRoZSB2aXJ0dWFsIGFkanVzdG1lbnQuIEZvciBhIHRoaXMKKyAgIGFkanVzdGluZyB0aHVuayBpdCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGFkZGVkIHRvIHRoZSB2dGFibGUKKyAgIHRvIGZpbmQgdGhlIHZjYWxsIG9mZnNldC4gRm9yIGEgcmVzdWx0IGFkanVzdGluZyB0aHVuaywgaXQgaXMgdGhlCisgICBiaW5mbyBvZiB0aGUgcmVsZXZhbnQgdmlydHVhbCBiYXNlLiAgSWYgTlVMTCwgdGhlbiB0aGVyZSBpcyBubworICAgdmlydHVhbCBhZGp1c3QuICAoVGhlIHZwdHIgaXMgYWx3YXlzIGxvY2F0ZWQgYXQgb2Zmc2V0IHplcm8gZnJvbQorICAgdGhlIHRoaXMgb3IgcmVzdWx0IHBvaW50ZXIuKSAgKElmIHRoZSBjb3ZhcmlhbnQgdHlwZSBpcyB3aXRoaW4gdGhlCisgICBjbGFzcyBoaWVyYXJjaHkgYmVpbmcgbGFpZCBvdXQsIHRoZSB2YmFzZSBpbmRleCBpcyBub3QgeWV0IGtub3duCisgICBhdCB0aGUgcG9pbnQgd2UgbmVlZCB0byBjcmVhdGUgdGhlIHRodW5rcywgaGVuY2UgdGhlIG5lZWQgdG8gdXNlCisgICBiaW5mb3MuKSAgKi8KKworI2RlZmluZSBUSFVOS19WSVJUVUFMX09GRlNFVChERUNMKSBcCisgIChMQU5HX0RFQ0xfVTJfQ0hFQ0sgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKERFQ0wpLCAwKS0+YWNjZXNzKQorCisvKiBBIHRodW5rIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gYW5vdGhlciB0aHVuay4gICovCisjZGVmaW5lIFRIVU5LX0FMSUFTKERFQ0wpIFwKKyAgKERFQ0xfTEFOR19TUEVDSUZJQyAoRlVOQ1RJT05fREVDTF9DSEVDSyAoREVDTCkpLT51Lm1pbi50ZW1wbGF0ZV9pbmZvKQorCisvKiBGb3IgdGh1bmsgTk9ERSwgdGhpcyBpcyB0aGUgRlVOQ1RJT05fREVDTCB0aHVua2VkIHRvLiAgSXQgaXMKKyAgIHBvc3NpYmxlIGZvciB0aGUgdGFyZ2V0IHRvIGJlIGEgdGh1bmsgdG9vLiAgKi8KKyNkZWZpbmUgVEhVTktfVEFSR0VUKE5PREUpCQkJCVwKKyAgKExBTkdfREVDTF9GTl9DSEVDSyAoTk9ERSktPmJlZnJpZW5kaW5nX2NsYXNzZXMpCisKKy8qIFRydWUgZm9yIGEgU0NPUEVfUkVGIGlmZiB0aGUgInRlbXBsYXRlIiBrZXl3b3JkIHdhcyB1c2VkIHRvCisgICBpbmRpY2F0ZSB0aGF0IHRoZSBxdWFsaWZpZWQgbmFtZSBkZW5vdGVzIGEgdGVtcGxhdGUuICAqLworI2RlZmluZSBRVUFMSUZJRURfTkFNRV9JU19URU1QTEFURShOT0RFKSBcCisgIChUUkVFX0xBTkdfRkxBR18xIChTQ09QRV9SRUZfQ0hFQ0sgKE5PREUpKSkKKworLyogVHJ1ZSBmb3IgYW4gT01QX0FUT01JQyB0aGF0IGhhcyBkZXBlbmRlbnQgcGFyYW1ldGVycy4gIFRoZXNlIGFyZSBzdG9yZWQKKyAgIGFzIGFuIGV4cHIgaW4gb3BlcmFuZCAxLCBhbmQgaW50ZWdlcl96ZXJvX25vZGUgaW4gb3BlcmFuZCAwLiAgKi8KKyNkZWZpbmUgT01QX0FUT01JQ19ERVBFTkRFTlRfUChOT0RFKSBcCisgIChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAoT01QX0FUT01JQ19DSEVDSyAoTk9ERSksIDApKSA9PSBJTlRFR0VSX0NTVCkKKworLyogVXNlZCB3aGlsZSBnaW1wbGlmeWluZyBjb250aW51ZSBzdGF0ZW1lbnRzIGJvdW5kIHRvIE9NUF9GT1Igbm9kZXMuICAqLworI2RlZmluZSBPTVBfRk9SX0dJTVBMSUZZSU5HX1AoTk9ERSkgXAorICAoVFJFRV9MQU5HX0ZMQUdfMCAoT01QX0ZPUl9DSEVDSyAoTk9ERSkpKQorCisvKiBBIGxhbmd1YWdlLXNwZWNpZmljIHRva2VuIGF0dGFjaGVkIHRvIHRoZSBPcGVuTVAgZGF0YSBjbGF1c2VzIHRvCisgICBob2xkIGNvZGUgKG9yIGNvZGUgZnJhZ21lbnRzKSByZWxhdGVkIHRvIGN0b3JzLCBkdG9ycywgYW5kIG9wPS4KKyAgIFNlZSBzZW1hbnRpY3MuYyBmb3IgZGV0YWlscy4gICovCisjZGVmaW5lIENQX09NUF9DTEFVU0VfSU5GTyhOT0RFKSBcCisgIFRSRUVfVFlQRSAoT01QX0NMQVVTRV9SQU5HRV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9QUklWQVRFLCBcCisJCQkJICAgICBPTVBfQ0xBVVNFX0NPUFlQUklWQVRFKSkKKworLyogTm9uemVybyBpZiB0aGlzIHRyYW5zYWN0aW9uIGV4cHJlc3Npb24ncyBib2R5IGNvbnRhaW5zIHN0YXRlbWVudHMuICAqLworI2RlZmluZSBUUkFOU0FDVElPTl9FWFBSX0lTX1NUTVQoTk9ERSkgXAorICAgVFJFRV9MQU5HX0ZMQUdfMCAoVFJBTlNBQ1RJT05fRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIFRoZXNlIG1hY3JvcyBwcm92aWRlIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSB2YXJpb3VzIF9TVE1UIG5vZGVzCisgICBjcmVhdGVkIHdoZW4gcGFyc2luZyB0ZW1wbGF0ZSBkZWNsYXJhdGlvbnMuICAqLworI2RlZmluZSBUUllfU1RNVFMoTk9ERSkJCVRSRUVfT1BFUkFORCAoVFJZX0JMT0NLX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgVFJZX0hBTkRMRVJTKE5PREUpCVRSRUVfT1BFUkFORCAoVFJZX0JMT0NLX0NIRUNLIChOT0RFKSwgMSkKKworI2RlZmluZSBFSF9TUEVDX1NUTVRTKE5PREUpCVRSRUVfT1BFUkFORCAoRUhfU1BFQ19CTE9DS19DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIEVIX1NQRUNfUkFJU0VTKE5PREUpCVRSRUVfT1BFUkFORCAoRUhfU1BFQ19CTE9DS19DSEVDSyAoTk9ERSksIDEpCisKKyNkZWZpbmUgVVNJTkdfU1RNVF9OQU1FU1BBQ0UoTk9ERSkgVFJFRV9PUEVSQU5EIChVU0lOR19TVE1UX0NIRUNLIChOT0RFKSwgMCkKKworLyogTm9uemVybyBpZiB0aGlzIHRyeSBibG9jayBpcyBhIGZ1bmN0aW9uIHRyeSBibG9jay4gICovCisjZGVmaW5lIEZOX1RSWV9CTE9DS19QKE5PREUpCVRSRUVfTEFOR19GTEFHXzMgKFRSWV9CTE9DS19DSEVDSyAoTk9ERSkpCisjZGVmaW5lIEhBTkRMRVJfUEFSTVMoTk9ERSkJVFJFRV9PUEVSQU5EIChIQU5ETEVSX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgSEFORExFUl9CT0RZKE5PREUpCVRSRUVfT1BFUkFORCAoSEFORExFUl9DSEVDSyAoTk9ERSksIDEpCisjZGVmaW5lIEhBTkRMRVJfVFlQRShOT0RFKQlUUkVFX1RZUEUgKEhBTkRMRVJfQ0hFQ0sgKE5PREUpKQorCisvKiBDTEVBTlVQX1NUTVQgYWNjZXNzb3JzLiAgVGhlIHN0YXRlbWVudChzKSBjb3ZlcmVkLCB0aGUgY2xlYW51cCB0byBydW4KKyAgIGFuZCB0aGUgVkFSX0RFQ0wgZm9yIHdoaWNoIHRoaXMgY2xlYW51cCBleGlzdHMuICAqLworI2RlZmluZSBDTEVBTlVQX0JPRFkoTk9ERSkJVFJFRV9PUEVSQU5EIChDTEVBTlVQX1NUTVRfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBDTEVBTlVQX0VYUFIoTk9ERSkJVFJFRV9PUEVSQU5EIChDTEVBTlVQX1NUTVRfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBDTEVBTlVQX0RFQ0woTk9ERSkJVFJFRV9PUEVSQU5EIChDTEVBTlVQX1NUTVRfQ0hFQ0sgKE5PREUpLCAyKQorCisvKiBJRl9TVE1UIGFjY2Vzc29ycy4gVGhlc2UgZ2l2ZSBhY2Nlc3MgdG8gdGhlIGNvbmRpdGlvbiBvZiB0aGUgaWYKKyAgIHN0YXRlbWVudCwgdGhlIHRoZW4gYmxvY2sgb2YgdGhlIGlmIHN0YXRlbWVudCwgYW5kIHRoZSBlbHNlIGJsb2NrCisgICBvZiB0aGUgaWYgc3RhdGVtZW50IGlmIGl0IGV4aXN0cy4gICovCisjZGVmaW5lIElGX0NPTkQoTk9ERSkJCVRSRUVfT1BFUkFORCAoSUZfU1RNVF9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIFRIRU5fQ0xBVVNFKE5PREUpCVRSRUVfT1BFUkFORCAoSUZfU1RNVF9DSEVDSyAoTk9ERSksIDEpCisjZGVmaW5lIEVMU0VfQ0xBVVNFKE5PREUpCVRSRUVfT1BFUkFORCAoSUZfU1RNVF9DSEVDSyAoTk9ERSksIDIpCisjZGVmaW5lIElGX1NDT1BFKE5PREUpCQlUUkVFX09QRVJBTkQgKElGX1NUTVRfQ0hFQ0sgKE5PREUpLCAzKQorCisvKiBXSElMRV9TVE1UIGFjY2Vzc29ycy4gVGhlc2UgZ2l2ZSBhY2Nlc3MgdG8gdGhlIGNvbmRpdGlvbiBvZiB0aGUKKyAgIHdoaWxlIHN0YXRlbWVudCBhbmQgdGhlIGJvZHkgb2YgdGhlIHdoaWxlIHN0YXRlbWVudCwgcmVzcGVjdGl2ZWx5LiAgKi8KKyNkZWZpbmUgV0hJTEVfQ09ORChOT0RFKQlUUkVFX09QRVJBTkQgKFdISUxFX1NUTVRfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBXSElMRV9CT0RZKE5PREUpCVRSRUVfT1BFUkFORCAoV0hJTEVfU1RNVF9DSEVDSyAoTk9ERSksIDEpCisKKy8qIERPX1NUTVQgYWNjZXNzb3JzLiBUaGVzZSBnaXZlIGFjY2VzcyB0byB0aGUgY29uZGl0aW9uIG9mIHRoZSBkbworICAgc3RhdGVtZW50IGFuZCB0aGUgYm9keSBvZiB0aGUgZG8gc3RhdGVtZW50LCByZXNwZWN0aXZlbHkuICAqLworI2RlZmluZSBET19DT05EKE5PREUpCQlUUkVFX09QRVJBTkQgKERPX1NUTVRfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBET19CT0RZKE5PREUpCQlUUkVFX09QRVJBTkQgKERPX1NUTVRfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBGT1JfU1RNVCBhY2Nlc3NvcnMuIFRoZXNlIGdpdmUgYWNjZXNzIHRvIHRoZSBpbml0IHN0YXRlbWVudCwKKyAgIGNvbmRpdGlvbiwgdXBkYXRlIGV4cHJlc3Npb24sIGFuZCBib2R5IG9mIHRoZSBmb3Igc3RhdGVtZW50LAorICAgcmVzcGVjdGl2ZWx5LiAgKi8KKyNkZWZpbmUgRk9SX0lOSVRfU1RNVChOT0RFKQlUUkVFX09QRVJBTkQgKEZPUl9TVE1UX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgRk9SX0NPTkQoTk9ERSkJCVRSRUVfT1BFUkFORCAoRk9SX1NUTVRfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBGT1JfRVhQUihOT0RFKQkJVFJFRV9PUEVSQU5EIChGT1JfU1RNVF9DSEVDSyAoTk9ERSksIDIpCisjZGVmaW5lIEZPUl9CT0RZKE5PREUpCQlUUkVFX09QRVJBTkQgKEZPUl9TVE1UX0NIRUNLIChOT0RFKSwgMykKKyNkZWZpbmUgRk9SX1NDT1BFKE5PREUpCQlUUkVFX09QRVJBTkQgKEZPUl9TVE1UX0NIRUNLIChOT0RFKSwgNCkKKworLyogUkFOR0VfRk9SX1NUTVQgYWNjZXNzb3JzLiBUaGVzZSBnaXZlIGFjY2VzcyB0byB0aGUgZGVjbGFyYXRvciwKKyAgIGV4cHJlc3Npb24sIGJvZHksIGFuZCBzY29wZSBvZiB0aGUgc3RhdGVtZW50LCByZXNwZWN0aXZlbHkuICAqLworI2RlZmluZSBSQU5HRV9GT1JfREVDTChOT0RFKQlUUkVFX09QRVJBTkQgKFJBTkdFX0ZPUl9TVE1UX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgUkFOR0VfRk9SX0VYUFIoTk9ERSkJVFJFRV9PUEVSQU5EIChSQU5HRV9GT1JfU1RNVF9DSEVDSyAoTk9ERSksIDEpCisjZGVmaW5lIFJBTkdFX0ZPUl9CT0RZKE5PREUpCVRSRUVfT1BFUkFORCAoUkFOR0VfRk9SX1NUTVRfQ0hFQ0sgKE5PREUpLCAyKQorI2RlZmluZSBSQU5HRV9GT1JfU0NPUEUoTk9ERSkJVFJFRV9PUEVSQU5EIChSQU5HRV9GT1JfU1RNVF9DSEVDSyAoTk9ERSksIDMpCisKKyNkZWZpbmUgU1dJVENIX1NUTVRfQ09ORChOT0RFKQlUUkVFX09QRVJBTkQgKFNXSVRDSF9TVE1UX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgU1dJVENIX1NUTVRfQk9EWShOT0RFKQlUUkVFX09QRVJBTkQgKFNXSVRDSF9TVE1UX0NIRUNLIChOT0RFKSwgMSkKKyNkZWZpbmUgU1dJVENIX1NUTVRfVFlQRShOT0RFKQlUUkVFX09QRVJBTkQgKFNXSVRDSF9TVE1UX0NIRUNLIChOT0RFKSwgMikKKyNkZWZpbmUgU1dJVENIX1NUTVRfU0NPUEUoTk9ERSkJVFJFRV9PUEVSQU5EIChTV0lUQ0hfU1RNVF9DSEVDSyAoTk9ERSksIDMpCisKKy8qIFNUTVRfRVhQUiBhY2Nlc3Nvci4gICovCisjZGVmaW5lIFNUTVRfRVhQUl9TVE1UKE5PREUpCVRSRUVfT1BFUkFORCAoU1RNVF9FWFBSX0NIRUNLIChOT0RFKSwgMCkKKworLyogRVhQUl9TVE1UIGFjY2Vzc29yLiBUaGlzIGdpdmVzIHRoZSBleHByZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCBhbgorICAgZXhwcmVzc2lvbiBzdGF0ZW1lbnQuICAqLworI2RlZmluZSBFWFBSX1NUTVRfRVhQUihOT0RFKQlUUkVFX09QRVJBTkQgKEVYUFJfU1RNVF9DSEVDSyAoTk9ERSksIDApCisKKy8qIFRydWUgaWYgdGhpcyBUQVJHRVRfRVhQUiB3YXMgY3JlYXRlZCBieSBidWlsZF9jcGx1c19uZXcsIGFuZCBzbyB3ZSBjYW4KKyAgIGRpc2NhcmQgaXQgaWYgaXQgaXNuJ3QgdXNlZnVsLiAgKi8KKyNkZWZpbmUgVEFSR0VUX0VYUFJfSU1QTElDSVRfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKFRBUkdFVF9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogVHJ1ZSBpZiB0aGlzIFRBUkdFVF9FWFBSIGlzIHRoZSByZXN1bHQgb2YgbGlzdC1pbml0aWFsaXphdGlvbiBvZiBhCisgICB0ZW1wb3JhcnkuICAqLworI2RlZmluZSBUQVJHRVRfRVhQUl9MSVNUX0lOSVRfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzEgKFRBUkdFVF9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogVHJ1ZSBpZiB0aGlzIFRBUkdFVF9FWFBSIGV4cHJlc3NlcyBkaXJlY3QtaW5pdGlhbGl6YXRpb24gb2YgYW4gb2JqZWN0CisgICB0byBiZSBuYW1lZCBsYXRlci4gICovCisjZGVmaW5lIFRBUkdFVF9FWFBSX0RJUkVDVF9JTklUX1AoTk9ERSkgXAorICBUUkVFX0xBTkdfRkxBR18yIChUQVJHRVRfRVhQUl9DSEVDSyAoTk9ERSkpCisKKy8qIFRydWUgaWYgRVhQUiBleHByZXNzZXMgZGlyZWN0LWluaXRpYWxpemF0aW9uIG9mIGEgVFlQRS4gICovCisjZGVmaW5lIERJUkVDVF9JTklUX0VYUFJfUChUWVBFLEVYUFIpCQkJCQlcCisgIChUUkVFX0NPREUgKEVYUFIpID09IFRBUkdFVF9FWFBSICYmIFRSRUVfTEFOR19GTEFHXzIgKEVYUFIpCQlcCisgICAmJiBzYW1lX3R5cGVfaWdub3JpbmdfdG9wX2xldmVsX3F1YWxpZmllcnNfcCAoVFlQRSwgVFJFRV9UWVBFIChFWFBSKSkpCisKKy8qIFRydWUgaWYgdGhpcyBDT05WRVJUX0VYUFIgaXMgZm9yIGEgY29udmVyc2lvbiB0byB2aXJ0dWFsIGJhc2UgaW4KKyAgIGFuIE5TRE1JLCBhbmQgc2hvdWxkIGJlIHJlLWV2YWx1YXRlZCB3aGVuIHVzZWQgaW4gYSBjb25zdHJ1Y3Rvci4gICovCisjZGVmaW5lIENPTlZFUlRfRVhQUl9WQkFTRV9QQVRIKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoQ09OVkVSVF9FWFBSX0NIRUNLIChOT0RFKSkKKworLyogVHJ1ZSBpZiBTSVpFT0ZfRVhQUiBhcmd1bWVudCBpcyB0eXBlLiAgKi8KKyNkZWZpbmUgU0laRU9GX0VYUFJfVFlQRV9QKE5PREUpIFwKKyAgVFJFRV9MQU5HX0ZMQUdfMCAoU0laRU9GX0VYUFJfQ0hFQ0sgKE5PREUpKQorCisvKiBBbiBlbnVtZXJhdGlvbiBvZiB0aGUga2luZCBvZiB0YWdzIHRoYXQgQysrIGFjY2VwdHMuICAqLworZW51bSB0YWdfdHlwZXMgeworICBub25lX3R5cGUgPSAwLCAvKiBOb3QgYSB0YWcgdHlwZS4gICovCisgIHJlY29yZF90eXBlLCAgIC8qICJzdHJ1Y3QiIHR5cGVzLiAgKi8KKyAgY2xhc3NfdHlwZSwgICAgLyogImNsYXNzIiB0eXBlcy4gICovCisgIHVuaW9uX3R5cGUsICAgIC8qICJ1bmlvbiIgdHlwZXMuICAqLworICBlbnVtX3R5cGUsICAgICAvKiAiZW51bSIgdHlwZXMuICAqLworICB0eXBlbmFtZV90eXBlICAvKiAidHlwZW5hbWUiIHR5cGVzLiAgKi8KK307CisKKy8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIGx2YWx1ZXMgd2UgZGlzdGluZ3Vpc2guICAqLworZW51bSBjcF9sdmFsdWVfa2luZF9mbGFncyB7CisgIGNsa19ub25lID0gMCwgICAgIC8qIFRoaW5ncyB0aGF0IGFyZSBub3QgYW4gbHZhbHVlLiAgKi8KKyAgY2xrX29yZGluYXJ5ID0gMSwgLyogQW4gb3JkaW5hcnkgbHZhbHVlLiAgKi8KKyAgY2xrX3J2YWx1ZXJlZiA9IDIsLyogQW4geHZhbHVlIChydmFsdWUgZm9ybWVkIHVzaW5nIGFuIHJ2YWx1ZSByZWZlcmVuY2UpICovCisgIGNsa19jbGFzcyA9IDQsICAgIC8qIEEgcHJ2YWx1ZSBvZiBjbGFzcy10eXBlLiAgKi8KKyAgY2xrX2JpdGZpZWxkID0gOCwgLyogQW4gbHZhbHVlIGZvciBhIGJpdC1maWVsZC4gICovCisgIGNsa19wYWNrZWQgPSAxNiAgIC8qIEFuIGx2YWx1ZSBmb3IgYSBwYWNrZWQgZmllbGQuICAqLworfTsKKworLyogVGhpcyB0eXBlIGlzIHVzZWQgZm9yIHBhcmFtZXRlcnMgYW5kIHZhcmlhYmxlcyB3aGljaCBob2xkCisgICBjb21iaW5hdGlvbnMgb2YgdGhlIGZsYWdzIGluIGVudW0gY3BfbHZhbHVlX2tpbmRfZmxhZ3MuICAqLwordHlwZWRlZiBpbnQgY3BfbHZhbHVlX2tpbmQ7CisKKy8qIFZhcmlvdXMga2luZHMgb2YgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24sIGluc3RhbnRpYXRpb24sIGV0Yy4gICovCit0eXBlZGVmIGVudW0gdG1wbF9zcGVjX2tpbmQgeworICB0c2tfbm9uZSwJCSAgIC8qIE5vdCBhIHRlbXBsYXRlIGF0IGFsbC4gICovCisgIHRza19pbnZhbGlkX21lbWJlcl9zcGVjLCAvKiBBbiBleHBsaWNpdCBtZW1iZXIgdGVtcGxhdGUKKwkJCSAgICAgIHNwZWNpYWxpemF0aW9uLCBidXQgdGhlIGVuY2xvc2luZworCQkJICAgICAgY2xhc3NlcyBoYXZlIG5vdCBhbGwgYmVlbiBleHBsaWNpdGx5CisJCQkgICAgICBzcGVjaWFsaXplZC4gICovCisgIHRza19pbnZhbGlkX2V4cGxfaW5zdCwgICAvKiBBbiBleHBsaWNpdCBpbnN0YW50aWF0aW9uIGNvbnRhaW5pbmcKKwkJCSAgICAgIHRlbXBsYXRlIHBhcmFtZXRlciBsaXN0cy4gICovCisgIHRza19leGNlc3NpdmVfcGFybXMsCSAgIC8qIEEgdGVtcGxhdGUgZGVjbGFyYXRpb24gd2l0aCB0b28gbWFueQorCQkJICAgICAgdGVtcGxhdGUgcGFyYW1ldGVyIGxpc3RzLiAgKi8KKyAgdHNrX2luc3VmZmljaWVudF9wYXJtcywgIC8qIEEgdGVtcGxhdGUgZGVjbGFyYXRpb24gd2l0aCB0b28gZmV3CisJCQkgICAgICBwYXJhbWV0ZXIgbGlzdHMuICAqLworICB0c2tfdGVtcGxhdGUsCQkgICAvKiBBIHRlbXBsYXRlIGRlY2xhcmF0aW9uLiAgKi8KKyAgdHNrX2V4cGxfc3BlYywJICAgLyogQW4gZXhwbGljaXQgc3BlY2lhbGl6YXRpb24uICAqLworICB0c2tfZXhwbF9pbnN0CQkgICAvKiBBbiBleHBsaWNpdCBpbnN0YW50aWF0aW9uLiAgKi8KK30gdG1wbF9zcGVjX2tpbmQ7CisKKy8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIGFjY2Vzcy4gIEJJTkZPX0FDQ0VTUyBkZXBlbmRzIG9uIHRoZXNlIGJlaW5nCisgICB0d28gYml0IHF1YW50aXRpZXMuICBUaGUgbnVtZXJpY2FsIHZhbHVlcyBhcmUgaW1wb3J0YW50OyB0aGV5IGFyZQorICAgdXNlZCB0byBpbml0aWFsaXplIFJUVEkgZGF0YSBzdHJ1Y3R1cmVzLCBzbyBjaGFuZ2luZyB0aGVtIGNoYW5nZXMKKyAgIHRoZSBBQkkuICAqLwordHlwZWRlZiBlbnVtIGFjY2Vzc19raW5kIHsKKyAgYWtfbm9uZSA9IDAsCQkgICAvKiBJbmFjY2Vzc2libGUuICAqLworICBha19wdWJsaWMgPSAxLAkgICAvKiBBY2Nlc3NpYmxlLCBhcyBhIGBwdWJsaWMnIHRoaW5nLiAgKi8KKyAgYWtfcHJvdGVjdGVkID0gMiwJICAgLyogQWNjZXNzaWJsZSwgYXMgYSBgcHJvdGVjdGVkJyB0aGluZy4gICovCisgIGFrX3ByaXZhdGUgPSAzCSAgIC8qIEFjY2Vzc2libGUsIGFzIGEgYHByaXZhdGUnIHRoaW5nLiAgKi8KK30gYWNjZXNzX2tpbmQ7CisKKy8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIHNwZWNpYWwgZnVuY3Rpb25zLiAgSWYgeW91IGFkZCB0byB0aGlzIGxpc3QsCisgICB5b3Ugc2hvdWxkIHVwZGF0ZSBzcGVjaWFsX2Z1bmN0aW9uX3AgYXMgd2VsbC4gICovCit0eXBlZGVmIGVudW0gc3BlY2lhbF9mdW5jdGlvbl9raW5kIHsKKyAgc2ZrX25vbmUgPSAwLAkJICAgLyogTm90IGEgc3BlY2lhbCBmdW5jdGlvbi4gIFRoaXMgZW51bWVyYWwKKwkJCSAgICAgIG11c3QgaGF2ZSB2YWx1ZSB6ZXJvOyBzZWUKKwkJCSAgICAgIHNwZWNpYWxfZnVuY3Rpb25fcC4gICovCisgIHNma19jb25zdHJ1Y3RvciwJICAgLyogQSBjb25zdHJ1Y3Rvci4gICovCisgIHNma19jb3B5X2NvbnN0cnVjdG9yLCAgICAvKiBBIGNvcHkgY29uc3RydWN0b3IuICAqLworICBzZmtfbW92ZV9jb25zdHJ1Y3RvciwgICAgLyogQSBtb3ZlIGNvbnN0cnVjdG9yLiAgKi8KKyAgc2ZrX2NvcHlfYXNzaWdubWVudCwgICAgIC8qIEEgY29weSBhc3NpZ25tZW50IG9wZXJhdG9yLiAgKi8KKyAgc2ZrX21vdmVfYXNzaWdubWVudCwgICAgIC8qIEEgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLiAgKi8KKyAgc2ZrX2Rlc3RydWN0b3IsCSAgIC8qIEEgZGVzdHJ1Y3Rvci4gICovCisgIHNma19jb21wbGV0ZV9kZXN0cnVjdG9yLCAvKiBBIGRlc3RydWN0b3IgZm9yIGNvbXBsZXRlIG9iamVjdHMuICAqLworICBzZmtfYmFzZV9kZXN0cnVjdG9yLCAgICAgLyogQSBkZXN0cnVjdG9yIGZvciBiYXNlIHN1Ym9iamVjdHMuICAqLworICBzZmtfZGVsZXRpbmdfZGVzdHJ1Y3RvciwgLyogQSBkZXN0cnVjdG9yIGZvciBjb21wbGV0ZSBvYmplY3RzIHRoYXQKKwkJCSAgICAgIGRlbGV0ZXMgdGhlIG9iamVjdCBhZnRlciBpdCBoYXMgYmVlbgorCQkJICAgICAgZGVzdHJveWVkLiAgKi8KKyAgc2ZrX2NvbnZlcnNpb24sCSAgIC8qIEEgY29udmVyc2lvbiBvcGVyYXRvci4gICovCisgIHNma19pbmhlcml0aW5nX2NvbnN0cnVjdG9yIC8qIEFuIGluaGVyaXRpbmcgY29uc3RydWN0b3IgKi8KK30gc3BlY2lhbF9mdW5jdGlvbl9raW5kOworCisvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBsaW5rYWdlLiAgRnJvbSBbYmFzaWMubGlua10sCisKKyAgICAgIEEgbmFtZSBpcyBzYWlkIHRvIGhhdmUgbGlua2FnZSB3aGVuIGl0IG1pZ2h0IGRlbm90ZSB0aGUgc2FtZQorICAgICAgb2JqZWN0LCByZWZlcmVuY2UsIGZ1bmN0aW9uLCB0eXBlLCB0ZW1wbGF0ZSwgbmFtZXNwYWNlIG9yIHZhbHVlCisgICAgICBhcyBhIG5hbWUgaW50cm9kdWNlZCBpbiBhbm90aGVyIHNjb3BlOgorCisgICAgICAtLSBXaGVuIGEgbmFtZSBoYXMgZXh0ZXJuYWwgbGlua2FnZSwgdGhlIGVudGl0eSBpdCBkZW5vdGVzIGNhbgorCSBiZSByZWZlcnJlZCB0byBmcm9tIHNjb3BlcyBvZiBvdGhlciB0cmFuc2xhdGlvbiB1bml0cyBvciBmcm9tCisJIG90aGVyIHNjb3BlcyBvZiB0aGUgc2FtZSB0cmFuc2xhdGlvbiB1bml0LgorCisgICAgICAtLSBXaGVuIGEgbmFtZSBoYXMgaW50ZXJuYWwgbGlua2FnZSwgdGhlIGVudGl0eSBpdCBkZW5vdGVzIGNhbgorCSBiZSByZWZlcnJlZCB0byBieSBuYW1lcyBmcm9tIG90aGVyIHNjb3BlcyBpbiB0aGUgc2FtZQorCSB0cmFuc2xhdGlvbiB1bml0LgorCisgICAgICAtLSBXaGVuIGEgbmFtZSBoYXMgbm8gbGlua2FnZSwgdGhlIGVudGl0eSBpdCBkZW5vdGVzIGNhbm5vdCBiZQorCSByZWZlcnJlZCB0byBieSBuYW1lcyBmcm9tIG90aGVyIHNjb3Blcy4gICovCisKK3R5cGVkZWYgZW51bSBsaW5rYWdlX2tpbmQgeworICBsa19ub25lLAkJCS8qIE5vIGxpbmthZ2UuICAqLworICBsa19pbnRlcm5hbCwJCQkvKiBJbnRlcm5hbCBsaW5rYWdlLiAgKi8KKyAgbGtfZXh0ZXJuYWwJCQkvKiBFeHRlcm5hbCBsaW5rYWdlLiAgKi8KK30gbGlua2FnZV9raW5kOworCit0eXBlZGVmIGVudW0gZHVyYXRpb25fa2luZCB7CisgIGRrX3N0YXRpYywKKyAgZGtfdGhyZWFkLAorICBka19hdXRvLAorICBka19keW5hbWljCit9IGR1cmF0aW9uX2tpbmQ7CisKKy8qIEJpdG1hc2sgZmxhZ3MgdG8gY29udHJvbCB0eXBlIHN1YnN0aXR1dGlvbi4gICovCitlbnVtIHRzdWJzdF9mbGFncyB7CisgIHRmX25vbmUgPSAwLAkJCSAvKiBub3RoaW5nIHNwZWNpYWwgKi8KKyAgdGZfZXJyb3IgPSAxIDw8IDAsCQkgLyogZ2l2ZSBlcnJvciBtZXNzYWdlcyAgKi8KKyAgdGZfd2FybmluZyA9IDEgPDwgMSwJIAkgLyogZ2l2ZSB3YXJuaW5ncyB0b28gICovCisgIHRmX2lnbm9yZV9iYWRfcXVhbHMgPSAxIDw8IDIsCSAvKiBpZ25vcmUgYmFkIGN2ciBxdWFsaWZpZXJzICovCisgIHRmX2tlZXBfdHlwZV9kZWNsID0gMSA8PCAzLAkgLyogcmV0YWluIHR5cGVkZWYgdHlwZSBkZWNscworCQkJCSAgICAobWFrZV90eXBlbmFtZV90eXBlIHVzZSkgKi8KKyAgdGZfcHRybWVtX29rID0gMSA8PCA0LAkgLyogcG9pbnRlcnMgdG8gbWVtYmVyIG9rIChpbnRlcm5hbAorCQkJCSAgICBpbnN0YW50aWF0ZV90eXBlIHVzZSkgKi8KKyAgdGZfdXNlciA9IDEgPDwgNSwJCSAvKiBmb3VuZCB0ZW1wbGF0ZSBtdXN0IGJlIGEgdXNlciB0ZW1wbGF0ZQorCQkJCSAgICAobG9va3VwX3RlbXBsYXRlX2NsYXNzIHVzZSkgKi8KKyAgdGZfY29udiA9IDEgPDwgNiwJCSAvKiBXZSBhcmUgZGV0ZXJtaW5pbmcgd2hhdCBraW5kIG9mCisJCQkJICAgIGNvbnZlcnNpb24gbWlnaHQgYmUgcGVybWlzc2libGUsCisJCQkJICAgIG5vdCBhY3R1YWxseSBwZXJmb3JtaW5nIHRoZQorCQkJCSAgICBjb252ZXJzaW9uLiAgKi8KKyAgdGZfZGVjbHR5cGUgPSAxIDw8IDcsICAgICAgICAgIC8qIFdlIGFyZSB0aGUgb3BlcmFuZCBvZiBkZWNsdHlwZS4KKwkJCQkgICAgVXNlZCB0byBpbXBsZW1lbnQgdGhlIHNwZWNpYWwgcnVsZXMKKwkJCQkgICAgZm9yIGNhbGxzIGluIGRlY2x0eXBlICg1LjIuMi8xMSkuICAqLworICB0Zl9wYXJ0aWFsID0gMSA8PCA4LAkJIC8qIERvaW5nIGluaXRpYWwgZXhwbGljaXQgYXJndW1lbnQKKwkJCQkgICAgc3Vic3RpdHV0aW9uIGluIGZuX3R5cGVfdW5pZmljYXRpb24uICAqLworICAvKiBDb252ZW5pZW50IHN1YnN0aXR1dGlvbiBmbGFncyBjb21iaW5hdGlvbnMuICAqLworICB0Zl93YXJuaW5nX29yX2Vycm9yID0gdGZfd2FybmluZyB8IHRmX2Vycm9yCit9OworCisvKiBUaGlzIHR5cGUgaXMgdXNlZCBmb3IgcGFyYW1ldGVycyBhbmQgdmFyaWFibGVzIHdoaWNoIGhvbGQKKyAgIGNvbWJpbmF0aW9ucyBvZiB0aGUgZmxhZ3MgaW4gZW51bSB0c3Vic3RfZmxhZ3MuICAqLwordHlwZWRlZiBpbnQgdHN1YnN0X2ZsYWdzX3Q7CisKKy8qIFRoZSBraW5kIG9mIGNoZWNraW5nIHdlIGNhbiBkbyBsb29raW5nIGluIGEgY2xhc3MgaGllcmFyY2h5LiAgKi8KK2VudW0gYmFzZV9hY2Nlc3NfZmxhZ3MgeworICBiYV9hbnkgPSAwLCAgLyogRG8gbm90IGNoZWNrIGFjY2VzcywgYWxsb3cgYW4gYW1iaWd1b3VzIGJhc2UsCisJCSAgICAgIHByZWZlciBhIG5vbi12aXJ0dWFsIGJhc2UgKi8KKyAgYmFfdW5pcXVlID0gMSA8PCAwLCAgLyogTXVzdCBiZSBhIHVuaXF1ZSBiYXNlLiAgKi8KKyAgYmFfY2hlY2tfYml0ID0gMSA8PCAxLCAgIC8qIENoZWNrIGFjY2Vzcy4gICovCisgIGJhX2NoZWNrID0gYmFfdW5pcXVlIHwgYmFfY2hlY2tfYml0LAorICBiYV9pZ25vcmVfc2NvcGUgPSAxIDw8IDIgLyogSWdub3JlIGFjY2VzcyBhbGxvd2VkIGJ5IGxvY2FsIHNjb3BlLiAgKi8KK307CisKKy8qIFRoaXMgdHlwZSBpcyB1c2VkIGZvciBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMgd2hpY2ggaG9sZAorICAgY29tYmluYXRpb25zIG9mIHRoZSBmbGFncyBpbiBlbnVtIGJhc2VfYWNjZXNzX2ZsYWdzLiAgKi8KK3R5cGVkZWYgaW50IGJhc2VfYWNjZXNzOworCisvKiBUaGUgdmFyaW91cyBraW5kcyBvZiBhY2Nlc3MgY2hlY2sgZHVyaW5nIHBhcnNpbmcuICAqLwordHlwZWRlZiBlbnVtIGRlZmVycmluZ19raW5kIHsKKyAgZGtfbm9fZGVmZXJyZWQgPSAwLCAvKiBDaGVjayBhY2Nlc3MgaW1tZWRpYXRlbHkgKi8KKyAgZGtfZGVmZXJyZWQgPSAxLCAgICAvKiBEZWZlcnJlZCBjaGVjayAqLworICBka19ub19jaGVjayA9IDIgICAgIC8qIE5vIGFjY2VzcyBjaGVjayAqLworfSBkZWZlcnJpbmdfa2luZDsKKworLyogVGhlIGtpbmQgb2YgYmFzZSB3ZSBjYW4gZmluZCwgbG9va2luZyBpbiBhIGNsYXNzIGhpZXJhcmNoeS4KKyAgIFZhbHVlcyA8MCBpbmRpY2F0ZSB3ZSBmYWlsZWQuICAqLwordHlwZWRlZiBlbnVtIGJhc2Vfa2luZCB7CisgIGJrX2luYWNjZXNzaWJsZSA9IC0zLCAgIC8qIFRoZSBiYXNlIGlzIGluYWNjZXNzaWJsZSAqLworICBia19hbWJpZyA9IC0yLAkgIC8qIFRoZSBiYXNlIGlzIGFtYmlndW91cyAqLworICBia19ub3RfYmFzZSA9IC0xLAkgIC8qIEl0IGlzIG5vdCBhIGJhc2UgKi8KKyAgYmtfc2FtZV90eXBlID0gMCwJICAvKiBJdCBpcyB0aGUgc2FtZSB0eXBlICovCisgIGJrX3Byb3Blcl9iYXNlID0gMSwJICAvKiBJdCBpcyBhIHByb3BlciBiYXNlICovCisgIGJrX3ZpYV92aXJ0dWFsID0gMgkgIC8qIEl0IGlzIGEgcHJvcGVyIGJhc2UsIGJ1dCB2aWEgYSB2aXJ0dWFsCisJCQkgICAgIHBhdGguIFRoaXMgbWlnaHQgbm90IGJlIHRoZSBjYW5vbmljYWwKKwkJCSAgICAgYmluZm8uICAqLworfSBiYXNlX2tpbmQ7CisKKy8qIE5vZGUgZm9yICJwb2ludGVyIHRvICh2aXJ0dWFsKSBmdW5jdGlvbiIuCisgICBUaGlzIG1heSBiZSBkaXN0aW5jdCBmcm9tIHB0cl90eXBlX25vZGUgc28gZ2RiIGNhbiBkaXN0aW5ndWlzaCB0aGVtLiAgKi8KKyNkZWZpbmUgdmZ1bmNfcHRyX3R5cGVfbm9kZSAgdnRhYmxlX2VudHJ5X3R5cGUKKworCisvKiBGb3IgYnVpbGRpbmcgY2FsbHMgdG8gYGRlbGV0ZScuICAqLworZXh0ZXJuIEdUWSgoKSkgdHJlZSBpbnRlZ2VyX3R3b19ub2RlOworCisvKiBUaGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGJvZGllcyB3aGljaCB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmcuCisgICAoWmVybyBpZiB3ZSBhcmUgYXQgbmFtZXNwYWNlIHNjb3BlLCBvbmUgaW5zaWRlIHRoZSBib2R5IG9mIGEKKyAgIGZ1bmN0aW9uLCB0d28gaW5zaWRlIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gaW4gYSBsb2NhbCBjbGFzcywgZXRjLikgICovCitleHRlcm4gaW50IGZ1bmN0aW9uX2RlcHRoOworCisvKiBOb256ZXJvIGlmIHdlIGFyZSBpbnNpZGUgZXFfc3BlY2lhbGl6YXRpb25zLCB3aGljaCBhZmZlY3RzIGNvbXBhcmlzb24gb2YKKyAgIFBBUk1fREVDTHMgaW4gY3BfdHJlZV9lcXVhbC4gICovCitleHRlcm4gaW50IGNvbXBhcmluZ19zcGVjaWFsaXphdGlvbnM7CisKKy8qIEluIHBhcnNlci5jLiAgKi8KKworLyogTm9uemVybyBpZiB3ZSBhcmUgcGFyc2luZyBhbiB1bmV2YWx1YXRlZCBvcGVyYW5kOiBhbiBvcGVyYW5kIHRvCisgICBzaXplb2YsIHR5cGVvZiwgb3IgYWxpZ25vZi4gIFRoaXMgaXMgYSBjb3VudCBzaW5jZSBvcGVyYW5kcyB0bworICAgc2l6ZW9mIGNhbiBiZSBuZXN0ZWQuICAqLworCitleHRlcm4gaW50IGNwX3VuZXZhbHVhdGVkX29wZXJhbmQ7CitleHRlcm4gdHJlZSBjcF9jb252ZXJ0X3JhbmdlX2ZvciAodHJlZSwgdHJlZSwgdHJlZSk7CisKKy8qIGluIHB0LmMgICovCisKKy8qIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBmb3IgdGhlIGBTVFJJQ1QnIHBhcmFtZXRlciB0byB0eXBlX3VuaWZpY2F0aW9uIGFuZAorICAgZm5fdHlwZV91bmlmaWNhdGlvbi4gIFRoZWlyIG1lYW5pbmdzIGFyZSBkZXNjcmliZWQgd2l0aCB0aGUKKyAgIGRvY3VtZW50YXRpb24gZm9yIGZuX3R5cGVfdW5pZmljYXRpb24uICAqLworCit0eXBlZGVmIGVudW0gdW5pZmljYXRpb25fa2luZF90IHsKKyAgREVEVUNFX0NBTEwsCisgIERFRFVDRV9DT05WLAorICBERURVQ0VfRVhBQ1QKK30gdW5pZmljYXRpb25fa2luZF90OworCisvKiBpbiBjbGFzcy5jICovCisKK2V4dGVybiBpbnQgY3VycmVudF9jbGFzc19kZXB0aDsKKworLyogQW4gYXJyYXkgb2YgYWxsIGxvY2FsIGNsYXNzZXMgcHJlc2VudCBpbiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQsIGluCisgICBkZWNsYXJhdGlvbiBvcmRlci4gICovCitleHRlcm4gR1RZKCgpKSB2ZWM8dHJlZSwgdmFfZ2M+ICpsb2NhbF9jbGFzc2VzOworDAorLyogSGVyZSdzIHdoZXJlIHdlIGNvbnRyb2wgaG93IG5hbWUgbWFuZ2xpbmcgdGFrZXMgcGxhY2UuICAqLworCisvKiBDYW5ub3QgdXNlICckJyB1cCBmcm9udCwgYmVjYXVzZSB0aGlzIGNvbmZ1c2VzIGdkYgorICAgKG5hbWVzIGJlZ2lubmluZyB3aXRoICckJyBhcmUgZ2RiLWxvY2FsIGlkZW50aWZpZXJzKS4KKworICAgTm90ZSB0aGF0IGFsbCBmb3JtcyBpbiB3aGljaCB0aGUgJyQnIGlzIHNpZ25pZmljYW50IGFyZSBsb25nIGVub3VnaAorICAgZm9yIGRpcmVjdCBpbmRleGluZyAobWVhbmluZyB0aGF0IGlmIHdlIGtub3cgdGhlcmUgaXMgYSAnJCcKKyAgIGF0IGEgcGFydGljdWxhciBsb2NhdGlvbiwgd2UgY2FuIGluZGV4IGludG8gdGhlIHN0cmluZyBhdAorICAgYW55IG90aGVyIGxvY2F0aW9uIHRoYXQgcHJvdmlkZXMgZGlzdGluZ3Vpc2hpbmcgY2hhcmFjdGVycykuICAqLworCisvKiBEZWZpbmUgTk9fRE9UX0lOX0xBQkVMIGluIHlvdXIgZmF2b3JpdGUgdG0gZmlsZSBpZiB5b3VyIGFzc2VtYmxlcgorICAgZG9lc24ndCBhbGxvdyAnLicgaW4gc3ltYm9sIG5hbWVzLiAgKi8KKyNpZm5kZWYgTk9fRE9UX0lOX0xBQkVMCisKKyNkZWZpbmUgSk9JTkVSICcuJworCisjZGVmaW5lIEFVVE9fVEVNUF9OQU1FICJfLnRtcF8iCisjZGVmaW5lIFZGSUVMRF9CQVNFICIudmYiCisjZGVmaW5lIFZGSUVMRF9OQU1FICJfdnB0ci4iCisjZGVmaW5lIFZGSUVMRF9OQU1FX0ZPUk1BVCAiX3ZwdHIuJXMiCisKKyNkZWZpbmUgQU5PTl9BR0dSTkFNRV9GT1JNQVQgIi5fJWQiCisKKyNlbHNlIC8qIE5PX0RPVF9JTl9MQUJFTCAqLworCisjaWZuZGVmIE5PX0RPTExBUl9JTl9MQUJFTAorCisjZGVmaW5lIEpPSU5FUiAnJCcKKworI2RlZmluZSBBVVRPX1RFTVBfTkFNRSAiXyR0bXBfIgorI2RlZmluZSBWRklFTERfQkFTRSAiJHZmIgorI2RlZmluZSBWRklFTERfTkFNRSAiX3ZwdHIkIgorI2RlZmluZSBWRklFTERfTkFNRV9GT1JNQVQgIl92cHRyJCVzIgorI2RlZmluZSBBTk9OX0FHR1JOQU1FX0ZPUk1BVCAiJF8lZCIKKworI2Vsc2UgLyogTk9fRE9MTEFSX0lOX0xBQkVMICovCisKKyNkZWZpbmUgQVVUT19URU1QX05BTUUgIl9fdG1wXyIKKyNkZWZpbmUgVEVNUF9OQU1FX1AoSURfTk9ERSkgXAorICAoIXN0cm5jbXAgKElERU5USUZJRVJfUE9JTlRFUiAoSURfTk9ERSksIEFVVE9fVEVNUF9OQU1FLCBcCisJICAgICBzaXplb2YgKEFVVE9fVEVNUF9OQU1FKSAtIDEpKQorI2RlZmluZSBWVEFCTEVfTkFNRSAiX192dF8iCisjZGVmaW5lIFZUQUJMRV9OQU1FX1AoSURfTk9ERSkgXAorICAoIXN0cm5jbXAgKElERU5USUZJRVJfUE9JTlRFUiAoSURfTk9ERSksIFZUQUJMRV9OQU1FLCBcCisJICAgICBzaXplb2YgKFZUQUJMRV9OQU1FKSAtIDEpKQorI2RlZmluZSBWRklFTERfQkFTRSAiX192ZmIiCisjZGVmaW5lIFZGSUVMRF9OQU1FICJfX3ZwdHJfIgorI2RlZmluZSBWRklFTERfTkFNRV9QKElEX05PREUpIFwKKyAgKCFzdHJuY21wIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpLCBWRklFTERfTkFNRSwgXAorCSAgICBzaXplb2YgKFZGSUVMRF9OQU1FKSAtIDEpKQorI2RlZmluZSBWRklFTERfTkFNRV9GT1JNQVQgIl9fdnB0cl8lcyIKKworI2RlZmluZSBBTk9OX0FHR1JOQU1FX1BSRUZJWCAiX19hbm9uXyIKKyNkZWZpbmUgQU5PTl9BR0dSTkFNRV9QKElEX05PREUpIFwKKyAgKCFzdHJuY21wIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpLCBBTk9OX0FHR1JOQU1FX1BSRUZJWCwgXAorCSAgICAgc2l6ZW9mIChBTk9OX0FHR1JOQU1FX1BSRUZJWCkgLSAxKSkKKyNkZWZpbmUgQU5PTl9BR0dSTkFNRV9GT1JNQVQgIl9fYW5vbl8lZCIKKworI2VuZGlmCS8qIE5PX0RPTExBUl9JTl9MQUJFTCAqLworI2VuZGlmCS8qIE5PX0RPVF9JTl9MQUJFTCAqLworCisjZGVmaW5lIFRISVNfTkFNRSAidGhpcyIKKworI2RlZmluZSBJTl9DSEFSR0VfTkFNRSAiX19pbl9jaHJnIgorCisjZGVmaW5lIFZUQkxfUFRSX1RZUEUJCSJfX3Z0YmxfcHRyX3R5cGUiCisjZGVmaW5lIFZUQUJMRV9ERUxUQV9OQU1FCSJfX2RlbHRhIgorI2RlZmluZSBWVEFCTEVfUEZOX05BTUUJCSJfX3BmbiIKKworI2RlZmluZSBMQU1CREFOQU1FX1BSRUZJWCAiX19sYW1iZGEiCisjZGVmaW5lIExBTUJEQU5BTUVfRk9STUFUIExBTUJEQU5BTUVfUFJFRklYICIlZCIKKworI2RlZmluZSBVRExJVF9PUF9BTlNJX1BSRUZJWCAib3BlcmF0b3JcIlwiICIKKyNkZWZpbmUgVURMSVRfT1BfQU5TSV9GT1JNQVQgVURMSVRfT1BfQU5TSV9QUkVGSVggIiVzIgorI2RlZmluZSBVRExJVF9PUF9NQU5HTEVEX1BSRUZJWCAibGkiCisjZGVmaW5lIFVETElUX09QX01BTkdMRURfRk9STUFUIFVETElUX09QX01BTkdMRURfUFJFRklYICIlcyIKKyNkZWZpbmUgVURMSVRfT1BFUl9QKElEX05PREUpIFwKKyAgKCFzdHJuY21wIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpLCBcCisgICAgICAgICAgICAgVURMSVRfT1BfQU5TSV9QUkVGSVgsIFwKKwkgICAgIHNpemVvZiAoVURMSVRfT1BfQU5TSV9QUkVGSVgpIC0gMSkpCisjZGVmaW5lIFVETElUX09QX1NVRkZJWChJRF9OT0RFKSBcCisgIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpICsgc2l6ZW9mIChVRExJVF9PUF9BTlNJX1BSRUZJWCkgLSAxKQorCisjaWYgIWRlZmluZWQoTk9fRE9MTEFSX0lOX0xBQkVMKSB8fCAhZGVmaW5lZChOT19ET1RfSU5fTEFCRUwpCisKKyNkZWZpbmUgVlRBQkxFX05BTUVfUChJRF9OT0RFKSAoSURFTlRJRklFUl9QT0lOVEVSIChJRF9OT0RFKVsxXSA9PSAndicgXAorICAmJiBJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpWzJdID09ICd0JyBcCisgICYmIElERU5USUZJRVJfUE9JTlRFUiAoSURfTk9ERSlbM10gPT0gSk9JTkVSKQorCisjZGVmaW5lIFRFTVBfTkFNRV9QKElEX05PREUpIFwKKyAgKCFzdHJuY21wIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpLCBBVVRPX1RFTVBfTkFNRSwgc2l6ZW9mIChBVVRPX1RFTVBfTkFNRSktMSkpCisjZGVmaW5lIFZGSUVMRF9OQU1FX1AoSURfTk9ERSkgXAorICAoIXN0cm5jbXAgKElERU5USUZJRVJfUE9JTlRFUiAoSURfTk9ERSksIFZGSUVMRF9OQU1FLCBzaXplb2YoVkZJRUxEX05BTUUpLTEpKQorCisvKiBGb3IgYW5vbnltb3VzIGFnZ3JlZ2F0ZSB0eXBlcywgd2UgbmVlZCBzb21lIHNvcnQgb2YgbmFtZSB0bworICAgaG9sZCBvbiB0by4gIEluIHByYWN0aWNlLCB0aGlzIHNob3VsZCBub3QgYXBwZWFyLCBidXQgaXQgc2hvdWxkCisgICBub3QgYmUgaGFybWZ1bCBpZiBpdCBkb2VzLiAgKi8KKyNkZWZpbmUgQU5PTl9BR0dSTkFNRV9QKElEX05PREUpIChJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpWzBdID09IEpPSU5FUiBcCisJCQkJICAmJiBJREVOVElGSUVSX1BPSU5URVIgKElEX05PREUpWzFdID09ICdfJykKKyNlbmRpZiAvKiAhZGVmaW5lZChOT19ET0xMQVJfSU5fTEFCRUwpIHx8ICFkZWZpbmVkKE5PX0RPVF9JTl9MQUJFTCkgKi8KKworDAorLyogTm9uemVybyBpZiB3ZSdyZSBkb25lIHBhcnNpbmcgYW5kIGludG8gZW5kLW9mLWZpbGUgYWN0aXZpdGllcy4gICovCisKK2V4dGVybiBpbnQgYXRfZW9mOworCisvKiBBIGxpc3Qgb2YgbmFtZXNwYWNlLXNjb3BlIG9iamVjdHMgd2hpY2ggaGF2ZSBjb25zdHJ1Y3RvcnMgb3IKKyAgIGRlc3RydWN0b3JzIHdoaWNoIHJlc2lkZSBpbiB0aGUgZ2xvYmFsIHNjb3BlLiAgVGhlIGRlY2wgaXMgc3RvcmVkCisgICBpbiB0aGUgVFJFRV9WQUxVRSBzbG90IGFuZCB0aGUgaW5pdGlhbGl6ZXIgaXMgc3RvcmVkIGluIHRoZQorICAgVFJFRV9QVVJQT1NFIHNsb3QuICAqLworZXh0ZXJuIEdUWSgoKSkgdHJlZSBzdGF0aWNfYWdncmVnYXRlczsKKy8qIExpa2V3aXNlLCBmb3IgdGhyZWFkIGxvY2FsIHN0b3JhZ2UuICAqLworZXh0ZXJuIEdUWSgoKSkgdHJlZSB0bHNfYWdncmVnYXRlczsKKworZW51bSBvdmVybG9hZF9mbGFncyB7IE5PX1NQRUNJQUwgPSAwLCBEVE9SX0ZMQUcsIFRZUEVOQU1FX0ZMQUcgfTsKKworLyogVGhlc2UgYXJlIHVzZXMgYXMgYml0cyBpbiBmbGFncyBwYXNzZWQgdG8gdmFyaW91cyBmdW5jdGlvbnMgdG8KKyAgIGNvbnRyb2wgdGhlaXIgYmVoYXZpb3IuICBEZXNwaXRlIHRoZSBMT09LVVBfIHByZWZpeCwgbWFueSBvZiB0aGVzZQorICAgZG8gbm90IGNvbnRyb2wgbmFtZSBsb29rdXAuICA/Pz8gRnVuY3Rpb25zIHVzaW5nIHRoZXNlIGZsYWdzIHNob3VsZAorICAgcHJvYmFibHkgYmUgbW9kaWZpZWQgdG8gYWNjZXB0IGV4cGxpY2l0IGJvb2xlYW4gZmxhZ3MgZm9yIHRoZQorICAgYmVoYXZpb3JzIHJlbGV2YW50IHRvIHRoZW0uICAqLworLyogQ2hlY2sgZm9yIGFjY2VzcyB2aW9sYXRpb25zLiAgKi8KKyNkZWZpbmUgTE9PS1VQX1BST1RFQ1QgKDEgPDwgMCkKKyNkZWZpbmUgTE9PS1VQX05PUk1BTCAoTE9PS1VQX1BST1RFQ1QpCisvKiBFdmVuIGlmIHRoZSBmdW5jdGlvbiBmb3VuZCBieSBsb29rdXAgaXMgYSB2aXJ0dWFsIGZ1bmN0aW9uLCBpdAorICAgc2hvdWxkIGJlIGNhbGxlZCBkaXJlY3RseS4gICovCisjZGVmaW5lIExPT0tVUF9OT05WSVJUVUFMICgxIDw8IDEpCisvKiBOb24tY29udmVydGluZyAoaS5lLiwgImV4cGxpY2l0IikgY29uc3RydWN0b3JzIGFyZSBub3QgdHJpZWQuICBUaGlzIGZsYWcKKyAgIGluZGljYXRlcyB0aGF0IHdlIGFyZSBub3QgcGVyZm9ybWluZyBkaXJlY3QtaW5pdGlhbGl6YXRpb24uICAqLworI2RlZmluZSBMT09LVVBfT05MWUNPTlZFUlRJTkcgKDEgPDwgMikKKyNkZWZpbmUgTE9PS1VQX0lNUExJQ0lUIChMT09LVVBfTk9STUFMIHwgTE9PS1VQX09OTFlDT05WRVJUSU5HKQorLyogSWYgYSB0ZW1wb3JhcnkgaXMgY3JlYXRlZCwgaXQgc2hvdWxkIGJlIGNyZWF0ZWQgc28gdGhhdCBpdCBsaXZlcworICAgYXMgbG9uZyBhcyB0aGUgY3VycmVudCB2YXJpYWJsZSBiaW5kaW5nczsgb3RoZXJ3aXNlIGl0IG9ubHkgbGl2ZXMKKyAgIHVudGlsIHRoZSBlbmQgb2YgdGhlIGNvbXBsZXRlLWV4cHJlc3Npb24uICBJdCBhbHNvIGZvcmNlcworICAgZGlyZWN0LWluaXRpYWxpemF0aW9uIGluIGNhc2VzIHdoZXJlIG90aGVyIHBhcnRzIG9mIHRoZSBjb21waWxlcgorICAgaGF2ZSBhbHJlYWR5IGdlbmVyYXRlZCBhIHRlbXBvcmFyeSwgc3VjaCBhcyByZWZlcmVuY2UKKyAgIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgY2F0Y2ggcGFyYW1ldGVyLiAgKi8KKyNkZWZpbmUgRElSRUNUX0JJTkQgKDEgPDwgMykKKy8qIFdlJ3JlIHBlcmZvcm1pbmcgYSB1c2VyLWRlZmluZWQgY29udmVyc2lvbiwgc28gbW9yZSB1c2VyLWRlZmluZWQKKyAgIGNvbnZlcnNpb25zIGFyZSBub3QgcGVybWl0dGVkIChvbmx5IGJ1aWx0LWluIGNvbnZlcnNpb25zKS4gICovCisjZGVmaW5lIExPT0tVUF9OT19DT05WRVJTSU9OICgxIDw8IDQpCisvKiBUaGUgdXNlciBoYXMgZXhwbGljaXRseSBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgKFRoZXJlZm9yZSwgd2UgZG8KKyAgIG5vdCBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIG9iamVjdCBpcyBub24tTlVMTCBiZWZvcmUgY2FsbGluZyB0aGUKKyAgIGRlc3RydWN0b3IuKSAgKi8KKyNkZWZpbmUgTE9PS1VQX0RFU1RSVUNUT1IgKDEgPDwgNSkKKy8qIERvIG5vdCBwZXJtaXQgcmVmZXJlbmNlcyB0byBiaW5kIHRvIHRlbXBvcmFyaWVzLiAgKi8KKyNkZWZpbmUgTE9PS1VQX05PX1RFTVBfQklORCAoMSA8PCA2KQorLyogRG8gbm90IGFjY2VwdCBvYmplY3RzLCBhbmQgcG9zc2libHkgbmFtZXNwYWNlcy4gICovCisjZGVmaW5lIExPT0tVUF9QUkVGRVJfVFlQRVMgKDEgPDwgNykKKy8qIERvIG5vdCBhY2NlcHQgb2JqZWN0cywgYW5kIHBvc3NpYmx5IHR5cGVzLiAgICovCisjZGVmaW5lIExPT0tVUF9QUkVGRVJfTkFNRVNQQUNFUyAoMSA8PCA4KQorLyogQWNjZXB0IHR5cGVzIG9yIG5hbWVzcGFjZXMuICAqLworI2RlZmluZSBMT09LVVBfUFJFRkVSX0JPVEggKExPT0tVUF9QUkVGRVJfVFlQRVMgfCBMT09LVVBfUFJFRkVSX05BTUVTUEFDRVMpCisvKiBSZXR1cm4gZnJpZW5kIGRlY2xhcmF0aW9ucyBhbmQgdW4tZGVjbGFyZWQgYnVpbHRpbiBmdW5jdGlvbnMuCisgICAoTm9ybWFsbHksIHRoZXNlIGVudGl0aWVzIGFyZSByZWdpc3RlcmVkIGluIHRoZSBzeW1ib2wgdGFibGUsIGJ1dAorICAgbm90IGZvdW5kIGJ5IGxvb2t1cC4pICAqLworI2RlZmluZSBMT09LVVBfSElEREVOIChMT09LVVBfUFJFRkVSX05BTUVTUEFDRVMgPDwgMSkKKy8qIFByZWZlciB0aGF0IHRoZSBsdmFsdWUgYmUgdHJlYXRlZCBhcyBhbiBydmFsdWUuICAqLworI2RlZmluZSBMT09LVVBfUFJFRkVSX1JWQUxVRSAoTE9PS1VQX0hJRERFTiA8PCAxKQorLyogV2UncmUgaW5zaWRlIGFuIGluaXQtbGlzdCwgc28gbmFycm93aW5nIGNvbnZlcnNpb25zIGFyZSBpbGwtZm9ybWVkLiAgKi8KKyNkZWZpbmUgTE9PS1VQX05PX05BUlJPV0lORyAoTE9PS1VQX1BSRUZFUl9SVkFMVUUgPDwgMSkKKy8qIFdlJ3JlIGxvb2tpbmcgdXAgYSBjb25zdHJ1Y3RvciBmb3IgbGlzdC1pbml0aWFsaXphdGlvbi4gICovCisjZGVmaW5lIExPT0tVUF9MSVNUX0lOSVRfQ1RPUiAoTE9PS1VQX05PX05BUlJPV0lORyA8PCAxKQorLyogVGhpcyBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIGEgY29weSBjb25zdHJ1Y3Rvci4gICovCisjZGVmaW5lIExPT0tVUF9DT1BZX1BBUk0gKExPT0tVUF9MSVNUX0lOSVRfQ1RPUiA8PCAxKQorLyogV2Ugb25seSB3YW50IHRvIGNvbnNpZGVyIGxpc3QgY29uc3RydWN0b3JzLiAgKi8KKyNkZWZpbmUgTE9PS1VQX0xJU1RfT05MWSAoTE9PS1VQX0NPUFlfUEFSTSA8PCAxKQorLyogUmV0dXJuIGFmdGVyIGRldGVybWluaW5nIHdoaWNoIGZ1bmN0aW9uIHRvIGNhbGwgYW5kIGNoZWNraW5nIGFjY2Vzcy4KKyAgIFVzZWQgYnkgc3l0aGVzaXplZF9tZXRob2Rfd2FsayB0byBkZXRlcm1pbmUgd2hpY2ggZnVuY3Rpb25zIHdpbGwKKyAgIGJlIGNhbGxlZCB0byBpbml0aWFsaXplIHN1Ym9iamVjdHMsIGluIG9yZGVyIHRvIGRldGVybWluZSBleGNlcHRpb24KKyAgIHNwZWNpZmljYXRpb24gYW5kIHBvc3NpYmxlIGltcGxpY2l0IGRlbGV0ZS4KKyAgIFRoaXMgaXMga2luZCBvZiBhIGhhY2ssIGJ1dCBleGl0aW5nIGVhcmx5IGF2b2lkcyBwcm9ibGVtcyB3aXRoIHRyeWluZworICAgdG8gcGVyZm9ybSBhcmd1bWVudCBjb252ZXJzaW9ucyB3aGVuIHRoZSBjbGFzcyBpc24ndCBjb21wbGV0ZSB5ZXQuICAqLworI2RlZmluZSBMT09LVVBfU1BFQ1VMQVRJVkUgKExPT0tVUF9MSVNUX09OTFkgPDwgMSkKKy8qIFVzZWQgYnkgY2FsbHMgZnJvbSBkZWZhdWx0ZWQgZnVuY3Rpb25zIHRvIGxpbWl0IHRoZSBvdmVybG9hZCBzZXQgdG8gYXZvaWQKKyAgIGN5Y2xlcyB0cnlpbmcgdG8gZGVjbGFyZSB0aGVtIChjb3JlIGlzc3VlIDEwOTIpLiAgKi8KKyNkZWZpbmUgTE9PS1VQX0RFRkFVTFRFRCAoTE9PS1VQX1NQRUNVTEFUSVZFIDw8IDEpCisvKiBVc2VkIGluIGNhbGxzIHRvIHN0b3JlX2luaXRfdmFsdWUgdG8gc3VwcHJlc3MgaXRzIHVzdWFsIGNhbGwgdG8KKyAgIGRpZ2VzdF9pbml0LiAgKi8KKyNkZWZpbmUgTE9PS1VQX0FMUkVBRFlfRElHRVNURUQgKExPT0tVUF9ERUZBVUxURUQgPDwgMSkKKy8qIEFuIGluc3RhbnRpYXRpb24gd2l0aCBleHBsaWNpdCB0ZW1wbGF0ZSBhcmd1bWVudHMuICAqLworI2RlZmluZSBMT09LVVBfRVhQTElDSVRfVE1QTF9BUkdTIChMT09LVVBfQUxSRUFEWV9ESUdFU1RFRCA8PCAxKQorLyogTGlrZSBMT09LVVBfTk9fVEVNUF9CSU5ELCBidXQgYWxzbyBwcmV2ZW50IGJpbmRpbmcgdG8geHZhbHVlcy4gICovCisjZGVmaW5lIExPT0tVUF9OT19SVkFMX0JJTkQgKExPT0tVUF9FWFBMSUNJVF9UTVBMX0FSR1MgPDwgMSkKKworI2RlZmluZSBMT09LVVBfTkFNRVNQQUNFU19PTkxZKEYpICBcCisgICgoKEYpICYgTE9PS1VQX1BSRUZFUl9OQU1FU1BBQ0VTKSAmJiAhKChGKSAmIExPT0tVUF9QUkVGRVJfVFlQRVMpKQorI2RlZmluZSBMT09LVVBfVFlQRVNfT05MWShGKSAgXAorICAoISgoRikgJiBMT09LVVBfUFJFRkVSX05BTUVTUEFDRVMpICYmICgoRikgJiBMT09LVVBfUFJFRkVSX1RZUEVTKSkKKyNkZWZpbmUgTE9PS1VQX1FVQUxJRklFUlNfT05MWShGKSAgICAgKChGKSAmIExPT0tVUF9QUkVGRVJfQk9USCkKKworCisvKiBUaGVzZSBmbGFncyBhcmUgdXNlZCBieSB0aGUgY29udmVyc2lvbiBjb2RlLgorICAgQ09OVl9JTVBMSUNJVCAgIDogIFBlcmZvcm0gaW1wbGljaXQgY29udmVyc2lvbnMgKHN0YW5kYXJkIGFuZCB1c2VyLWRlZmluZWQpLgorICAgQ09OVl9TVEFUSUMgICAgIDogIFBlcmZvcm0gdGhlIGV4cGxpY2l0IGNvbnZlcnNpb25zIGZvciBzdGF0aWNfY2FzdC4KKyAgIENPTlZfQ09OU1QgICAgICA6ICBQZXJmb3JtIHRoZSBleHBsaWNpdCBjb252ZXJzaW9ucyBmb3IgY29uc3RfY2FzdC4KKyAgIENPTlZfUkVJTlRFUlBSRVQ6ICBQZXJmb3JtIHRoZSBleHBsaWNpdCBjb252ZXJzaW9ucyBmb3IgcmVpbnRlcnByZXRfY2FzdC4KKyAgIENPTlZfUFJJVkFURSAgICA6ICBQZXJmb3JtIHVwY2FzdHMgdG8gcHJpdmF0ZSBiYXNlcy4KKyAgIENPTlZfRk9SQ0VfVEVNUCA6ICBSZXF1aXJlIGEgbmV3IHRlbXBvcmFyeSB3aGVuIGNvbnZlcnRpbmcgdG8gdGhlIHNhbWUKKwkJICAgICAgYWdncmVnYXRlIHR5cGUuICAqLworCisjZGVmaW5lIENPTlZfSU1QTElDSVQgICAgMQorI2RlZmluZSBDT05WX1NUQVRJQyAgICAgIDIKKyNkZWZpbmUgQ09OVl9DT05TVCAgICAgICA0CisjZGVmaW5lIENPTlZfUkVJTlRFUlBSRVQgOAorI2RlZmluZSBDT05WX1BSSVZBVEUJIDE2CisvKiAjZGVmaW5lIENPTlZfTk9OQ09OVkVSVElORyAzMiAqLworI2RlZmluZSBDT05WX0ZPUkNFX1RFTVAgIDY0CisjZGVmaW5lIENPTlZfT0xEX0NPTlZFUlQgKENPTlZfSU1QTElDSVQgfCBDT05WX1NUQVRJQyB8IENPTlZfQ09OU1QgXAorCQkJICB8IENPTlZfUkVJTlRFUlBSRVQpCisjZGVmaW5lIENPTlZfQ19DQVNUICAgICAgKENPTlZfSU1QTElDSVQgfCBDT05WX1NUQVRJQyB8IENPTlZfQ09OU1QgXAorCQkJICB8IENPTlZfUkVJTlRFUlBSRVQgfCBDT05WX1BSSVZBVEUgfCBDT05WX0ZPUkNFX1RFTVApCisKKy8qIFVzZWQgYnkgYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24gdG8gaW5kaWNhdGUgd2hpY2ggdHlwZXMgYXJlCisgICBhY2NlcHRhYmxlIGFzIGFyZ3VtZW50cyB0byB0aGUgZXhwcmVzc2lvbiB1bmRlciBjb25zaWRlcmF0aW9uLiAgKi8KKworI2RlZmluZSBXQU5UX0lOVAkxIC8qIGludGVnZXIgdHlwZXMsIGluY2x1ZGluZyBib29sICovCisjZGVmaW5lIFdBTlRfRkxPQVQJMiAvKiBmbG9hdGluZyBwb2ludCB0eXBlcyAqLworI2RlZmluZSBXQU5UX0VOVU0JNCAvKiBlbnVtZXJhdGVkIHR5cGVzICovCisjZGVmaW5lIFdBTlRfUE9JTlRFUgk4IC8qIHBvaW50ZXIgdHlwZXMgKi8KKyNkZWZpbmUgV0FOVF9OVUxMICAgICAgMTYgLyogbnVsbCBwb2ludGVyIGNvbnN0YW50ICovCisjZGVmaW5lIFdBTlRfVkVDVE9SX09SX0NPTVBMRVggMzIgLyogdmVjdG9yIG9yIGNvbXBsZXggdHlwZXMgKi8KKyNkZWZpbmUgV0FOVF9BUklUSAkoV0FOVF9JTlQgfCBXQU5UX0ZMT0FUIHwgV0FOVF9WRUNUT1JfT1JfQ09NUExFWCkKKworLyogVXNlZCB3aXRoIGNvbXB0eXBlcywgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLCB0byBndWlkZSB0eXBlCisgICBjb21wYXJpc29uLiAgKi8KKworI2RlZmluZSBDT01QQVJFX1NUUklDVAkgICAgICAwIC8qIEp1c3QgY2hlY2sgaWYgdGhlIHR5cGVzIGFyZSB0aGUKKwkJCQkgICBzYW1lLiAgKi8KKyNkZWZpbmUgQ09NUEFSRV9CQVNFCSAgICAgIDEgLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBzZWNvbmQgdHlwZSBpcworCQkJCSAgIGRlcml2ZWQgZnJvbSB0aGUgZmlyc3QuICAqLworI2RlZmluZSBDT01QQVJFX0RFUklWRUQJICAgICAgMiAvKiBMaWtlIENPTVBBUkVfQkFTRSwgYnV0IGluCisJCQkJICAgcmV2ZXJzZS4gICovCisjZGVmaW5lIENPTVBBUkVfUkVERUNMQVJBVElPTiA0IC8qIFRoZSBjb21wYXJpc29uIGlzIGJlaW5nIGRvbmUgd2hlbgorCQkJCSAgIGFub3RoZXIgZGVjbGFyYXRpb24gb2YgYW4gZXhpc3RpbmcKKwkJCQkgICBlbnRpdHkgaXMgc2Vlbi4gICovCisjZGVmaW5lIENPTVBBUkVfU1RSVUNUVVJBTCAgICA4IC8qIFRoZSBjb21wYXJpc29uIGlzIGludGVuZGVkIHRvIGJlCisJCQkJICAgc3RydWN0dXJhbC4gVGhlIGFjdHVhbCBjb21wYXJpc29uCisJCQkJICAgd2lsbCBiZSBpZGVudGljYWwgdG8KKwkJCQkgICBDT01QQVJFX1NUUklDVC4gICovCisKKy8qIFVzZWQgd2l0aCBwdXNoX292ZXJsb2FkZWRfZGVjbC4gICovCisjZGVmaW5lIFBVU0hfR0xPQkFMCSAgICAgMCAgLyogUHVzaCB0aGUgREVDTCBpbnRvIG5hbWVzcGFjZSBzY29wZSwKKwkJCQkgICByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHNjb3BlLiAgKi8KKyNkZWZpbmUgUFVTSF9MT0NBTAkgICAgIDEgIC8qIFB1c2ggdGhlIERFQ0wgaW50byB0aGUgY3VycmVudAorCQkJCSAgIHNjb3BlLiAgKi8KKyNkZWZpbmUgUFVTSF9VU0lORwkgICAgIDIgIC8qIFdlIGFyZSBwdXNoaW5nIHRoaXMgREVDTCBhcyB0aGUKKwkJCQkgICByZXN1bHQgb2YgYSB1c2luZyBkZWNsYXJhdGlvbi4gICovCisKKy8qIFVzZWQgd2l0aCBzdGFydCBmdW5jdGlvbi4gICovCisjZGVmaW5lIFNGX0RFRkFVTFQJICAgICAwICAvKiBObyBmbGFncy4gICovCisjZGVmaW5lIFNGX1BSRV9QQVJTRUQJICAgICAxICAvKiBUaGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gaGFzCisJCQkJICAgYWxyZWFkeSBiZWVuIHBhcnNlZC4gICovCisjZGVmaW5lIFNGX0lOQ0xBU1NfSU5MSU5FICAgIDIgIC8qIFRoZSBmdW5jdGlvbiBpcyBhbiBpbmxpbmUsIGRlZmluZWQKKwkJCQkgICBpbiB0aGUgY2xhc3MgYm9keS4gICovCisKKy8qIFVzZWQgd2l0aCBzdGFydF9kZWNsJ3MgaW5pdGlhbGl6ZWQgcGFyYW1ldGVyLiAgKi8KKyNkZWZpbmUgU0RfVU5JTklUSUFMSVpFRCAgICAgMAorI2RlZmluZSBTRF9JTklUSUFMSVpFRCAgICAgICAxCisjZGVmaW5lIFNEX0RFRkFVTFRFRCAgICAgICAgIDIKKyNkZWZpbmUgU0RfREVMRVRFRCAgICAgICAgICAgMworCisvKiBSZXR1cm5zIG5vbnplcm8gaWZmIFRZUEUxIGFuZCBUWVBFMiBhcmUgdGhlIHNhbWUgdHlwZSwgb3IgaWYgVFlQRTIKKyAgIGlzIGRlcml2ZWQgZnJvbSBUWVBFMSwgb3IgaWYgVFlQRTIgaXMgYSBwb2ludGVyIChyZWZlcmVuY2UpIHRvIGEKKyAgIGNsYXNzIGRlcml2ZWQgZnJvbSB0aGUgdHlwZSBwb2ludGVkIHRvIChyZWZlcnJlZCB0bykgYnkgVFlQRTEuICAqLworI2RlZmluZSBzYW1lX29yX2Jhc2VfdHlwZV9wKFRZUEUxLCBUWVBFMikgXAorICBjb21wdHlwZXMgKChUWVBFMSksIChUWVBFMiksIENPTVBBUkVfQkFTRSkKKworLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIHRvIGFjY2VzcyBhIFRFTVBMQVRFX1BBUk1fSU5ERVguICAqLworI2RlZmluZSBURU1QTEFURV9QQVJNX0lOREVYX0NBU1QoTk9ERSkgXAorCSgodGVtcGxhdGVfcGFybV9pbmRleCopVEVNUExBVEVfUEFSTV9JTkRFWF9DSEVDSyAoTk9ERSkpCisjZGVmaW5lIFRFTVBMQVRFX1BBUk1fSURYKE5PREUpIChURU1QTEFURV9QQVJNX0lOREVYX0NBU1QgKE5PREUpLT5pbmRleCkKKyNkZWZpbmUgVEVNUExBVEVfUEFSTV9MRVZFTChOT0RFKSAoVEVNUExBVEVfUEFSTV9JTkRFWF9DQVNUIChOT0RFKS0+bGV2ZWwpCisjZGVmaW5lIFRFTVBMQVRFX1BBUk1fREVTQ0VOREFOVFMoTk9ERSkgKFRSRUVfQ0hBSU4gKE5PREUpKQorI2RlZmluZSBURU1QTEFURV9QQVJNX09SSUdfTEVWRUwoTk9ERSkgKFRFTVBMQVRFX1BBUk1fSU5ERVhfQ0FTVCAoTk9ERSktPm9yaWdfbGV2ZWwpCisjZGVmaW5lIFRFTVBMQVRFX1BBUk1fREVDTChOT0RFKSAoVEVNUExBVEVfUEFSTV9JTkRFWF9DQVNUIChOT0RFKS0+ZGVjbCkKKyNkZWZpbmUgVEVNUExBVEVfUEFSTV9QQVJBTUVURVJfUEFDSyhOT0RFKSBcCisgIChUUkVFX0xBTkdfRkxBR18wIChURU1QTEFURV9QQVJNX0lOREVYX0NIRUNLIChOT0RFKSkpCisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgZm9yIGFjY2Vzc2luZyB0aGUgZmllbGRzIG9mIFRFTVBMQVRFX1RZUEVfUEFSTSwKKyAgIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0gYW5kIEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0gbm9kZXMuICAqLworI2RlZmluZSBURU1QTEFURV9UWVBFX1BBUk1fSU5ERVgoTk9ERSkJCQkJCVwKKyAgKFRZUEVfVkFMVUVTX1JBVyAoVFJFRV9DSEVDSzMgKChOT0RFKSwgVEVNUExBVEVfVFlQRV9QQVJNLAkJXAorCQkJCSBURU1QTEFURV9URU1QTEFURV9QQVJNLAkJXAorCQkJCSBCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNKSkpCisjZGVmaW5lIFRFTVBMQVRFX1RZUEVfSURYKE5PREUpIFwKKyAgKFRFTVBMQVRFX1BBUk1fSURYIChURU1QTEFURV9UWVBFX1BBUk1fSU5ERVggKE5PREUpKSkKKyNkZWZpbmUgVEVNUExBVEVfVFlQRV9MRVZFTChOT0RFKSBcCisgIChURU1QTEFURV9QQVJNX0xFVkVMIChURU1QTEFURV9UWVBFX1BBUk1fSU5ERVggKE5PREUpKSkKKyNkZWZpbmUgVEVNUExBVEVfVFlQRV9PUklHX0xFVkVMKE5PREUpIFwKKyAgKFRFTVBMQVRFX1BBUk1fT1JJR19MRVZFTCAoVEVNUExBVEVfVFlQRV9QQVJNX0lOREVYIChOT0RFKSkpCisjZGVmaW5lIFRFTVBMQVRFX1RZUEVfREVDTChOT0RFKSBcCisgIChURU1QTEFURV9QQVJNX0RFQ0wgKFRFTVBMQVRFX1RZUEVfUEFSTV9JTkRFWCAoTk9ERSkpKQorI2RlZmluZSBURU1QTEFURV9UWVBFX1BBUkFNRVRFUl9QQUNLKE5PREUpIFwKKyAgKFRFTVBMQVRFX1BBUk1fUEFSQU1FVEVSX1BBQ0sgKFRFTVBMQVRFX1RZUEVfUEFSTV9JTkRFWCAoTk9ERSkpKQorCisvKiBUaGVzZSBjb25zdGFudHMgY2FuIHVzZWQgYXMgYml0IGZsYWdzIGluIHRoZSBwcm9jZXNzIG9mIHRyZWUgZm9ybWF0dGluZy4KKworICAgVEZGX1BMQUlOX0lERU5USUZJRVI6IHVucXVhbGlmaWVkIHBhcnQgb2YgYSBuYW1lLgorICAgVEZGX1NDT1BFOiBpbmNsdWRlIHRoZSBjbGFzcyBhbmQgbmFtZXNwYWNlIHNjb3BlIG9mIHRoZSBuYW1lLgorICAgVEZGX0NIQVNFX1RZUEVERUY6IHByaW50IHRoZSBvcmlnaW5hbCB0eXBlLWlkIGluc3RlYWQgb2YgdGhlIHR5cGVkZWYtbmFtZS4KKyAgIFRGRl9ERUNMX1NQRUNJRklFUlM6IHByaW50IGRlY2wtc3BlY2lmaWVycy4KKyAgIFRGRl9DTEFTU19LRVlfT1JfRU5VTTogcHJlY2VkZSBhIGNsYXNzLXR5cGUgbmFtZSAocmVzcC4gZW51bSBuYW1lKSB3aXRoCisgICAgICAgYSBjbGFzcy1rZXkgKHJlc3AuIGBlbnVtJykuCisgICBURkZfUkVUVVJOX1RZUEU6IGluY2x1ZGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUuCisgICBURkZfRlVOQ1RJT05fREVGQVVMVF9BUkdVTUVOVFM6IGluY2x1ZGUgZnVuY3Rpb24gZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLgorICAgVEZGX0VYQ0VQVElPTl9TUEVDSUZJQ0FUSU9OOiBzaG93IGZ1bmN0aW9uIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uLgorICAgVEZGX1RFTVBMQVRFX0hFQURFUjogc2hvdyB0aGUgdGVtcGxhdGU8Li4uPiBoZWFkZXIgaW4gYQorICAgICAgIHRlbXBsYXRlLWRlY2xhcmF0aW9uLgorICAgVEZGX1RFTVBMQVRFX05BTUU6IHNob3cgb25seSB0ZW1wbGF0ZS1uYW1lLgorICAgVEZGX0VYUFJfSU5fUEFSRU5TOiBwYXJlbnRoZXNpemUgZXhwcmVzc2lvbnMuCisgICBURkZfTk9fRlVOQ1RJT05fQVJHVU1FTlRTOiBkb24ndCBzaG93IGZ1bmN0aW9uIGFyZ3VtZW50cy4KKyAgIFRGRl9VTlFVQUxJRklFRF9OQU1FOiBkbyBub3QgcHJpbnQgdGhlIHF1YWxpZnlpbmcgc2NvcGUgb2YgdGhlCisgICAgICAgdG9wLWxldmVsIGVudGl0eS4KKyAgIFRGRl9OT19PTUlUX0RFRkFVTFRfVEVNUExBVEVfQVJHVU1FTlRTOiBkbyBub3Qgb21pdCB0ZW1wbGF0ZSBhcmd1bWVudHMKKyAgICAgICBpZGVudGljYWwgdG8gdGhlaXIgZGVmYXVsdHMuICAqLworCisjZGVmaW5lIFRGRl9QTEFJTl9JREVOVElGSUVSCQkJKDApCisjZGVmaW5lIFRGRl9TQ09QRQkJCQkoMSkKKyNkZWZpbmUgVEZGX0NIQVNFX1RZUEVERUYJCQkoMSA8PCAxKQorI2RlZmluZSBURkZfREVDTF9TUEVDSUZJRVJTCQkJKDEgPDwgMikKKyNkZWZpbmUgVEZGX0NMQVNTX0tFWV9PUl9FTlVNCQkJKDEgPDwgMykKKyNkZWZpbmUgVEZGX1JFVFVSTl9UWVBFCQkJCSgxIDw8IDQpCisjZGVmaW5lIFRGRl9GVU5DVElPTl9ERUZBVUxUX0FSR1VNRU5UUwkJKDEgPDwgNSkKKyNkZWZpbmUgVEZGX0VYQ0VQVElPTl9TUEVDSUZJQ0FUSU9OCQkoMSA8PCA2KQorI2RlZmluZSBURkZfVEVNUExBVEVfSEVBREVSCQkJKDEgPDwgNykKKyNkZWZpbmUgVEZGX1RFTVBMQVRFX05BTUUJCQkoMSA8PCA4KQorI2RlZmluZSBURkZfRVhQUl9JTl9QQVJFTlMJCQkoMSA8PCA5KQorI2RlZmluZSBURkZfTk9fRlVOQ1RJT05fQVJHVU1FTlRTCQkoMSA8PCAxMCkKKyNkZWZpbmUgVEZGX1VOUVVBTElGSUVEX05BTUUJCQkoMSA8PCAxMSkKKyNkZWZpbmUgVEZGX05PX09NSVRfREVGQVVMVF9URU1QTEFURV9BUkdVTUVOVFMJKDEgPDwgMTIpCisKKy8qIFJldHVybnMgdGhlIFRFTVBMQVRFX0RFQ0wgYXNzb2NpYXRlZCB0byBhIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0KKyAgIG5vZGUuICAqLworI2RlZmluZSBURU1QTEFURV9URU1QTEFURV9QQVJNX1RFTVBMQVRFX0RFQ0woTk9ERSkJXAorICAoKFRSRUVfQ09ERSAoTk9ERSkgPT0gQk9VTkRfVEVNUExBVEVfVEVNUExBVEVfUEFSTSkJXAorICAgPyBUWVBFX1RJX1RFTVBMQVRFIChOT0RFKQkJCQlcCisgICA6IFRZUEVfTkFNRSAoTk9ERSkpCisKKy8qIGluIGxleC5jICAqLworCitleHRlcm4gdm9pZCBpbml0X3Jlc3dvcmRzICh2b2lkKTsKKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBvcGVyYXRvcl9uYW1lX2luZm9fdCB7CisgIC8qIFRoZSBJREVOVElGSUVSX05PREUgZm9yIHRoZSBvcGVyYXRvci4gICovCisgIHRyZWUgaWRlbnRpZmllcjsKKyAgLyogVGhlIG5hbWUgb2YgdGhlIG9wZXJhdG9yLiAgKi8KKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgLyogVGhlIG1hbmdsZWQgbmFtZSBvZiB0aGUgb3BlcmF0b3IuICAqLworICBjb25zdCBjaGFyICptYW5nbGVkX25hbWU7CisgIC8qIFRoZSBhcml0eSBvZiB0aGUgb3BlcmF0b3IuICAqLworICBpbnQgYXJpdHk7Cit9IG9wZXJhdG9yX25hbWVfaW5mb190OworCisvKiBBIG1hcHBpbmcgZnJvbSB0cmVlIGNvZGVzIHRvIG9wZXJhdG9yIG5hbWUgaW5mb3JtYXRpb24uICAqLworZXh0ZXJuIEdUWSgoKSkgb3BlcmF0b3JfbmFtZV9pbmZvX3Qgb3BlcmF0b3JfbmFtZV9pbmZvCisgIFsoaW50KSBNQVhfVFJFRV9DT0RFU107CisvKiBTaW1pbGFyLCBidXQgZm9yIGFzc2lnbm1lbnQgb3BlcmF0b3JzLiAgKi8KK2V4dGVybiBHVFkoKCkpIG9wZXJhdG9yX25hbWVfaW5mb190IGFzc2lnbm1lbnRfb3BlcmF0b3JfbmFtZV9pbmZvCisgIFsoaW50KSBNQVhfVFJFRV9DT0RFU107CisKKy8qIEEgdHlwZS1xdWFsaWZpZXIsIG9yIGJpdG1hc2sgdGhlcmVmb3JlLCB1c2luZyB0aGUgVFlQRV9RVUFMCisgICBjb25zdGFudHMuICAqLworCit0eXBlZGVmIGludCBjcF9jdl9xdWFsczsKKworLyogTm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIGhhdmUgYW4gb3B0aW9uYWwgdmlydC1zcGVjaWZpZXItc2VxLgorICAgVGhlcmUgaXMgYSBWSVJUX1NQRUMgdmFsdWUgZm9yIGVhY2ggdmlydC1zcGVjaWZpZXIuCisgICBUaGV5IGNhbiBiZSBjb21iaW5lZCBieSBiaXR3aXNlLW9yIHRvIGZvcm0gdGhlIGNvbXBsZXRlIHNldCBvZgorICAgdmlydC1zcGVjaWZpZXJzIGZvciBhIG1lbWJlciBmdW5jdGlvbi4gICovCitlbnVtIHZpcnRfc3BlY2lmaWVyCisgIHsKKyAgICBWSVJUX1NQRUNfVU5TUEVDSUZJRUQgPSAweDAsCisgICAgVklSVF9TUEVDX0ZJTkFMICAgICAgID0gMHgxLAorICAgIFZJUlRfU1BFQ19PVkVSUklERSAgICA9IDB4MgorICB9OworCisvKiBBIHR5cGUtcXVhbGlmaWVyLCBvciBiaXRtYXNrIHRoZXJlZm9yZSwgdXNpbmcgdGhlIFZJUlRfU1BFQworICAgY29uc3RhbnRzLiAgKi8KKwordHlwZWRlZiBpbnQgY3BfdmlydF9zcGVjaWZpZXJzOworCisvKiBXaGVyZXZlciB0aGVyZSBpcyBhIGZ1bmN0aW9uLWN2LXF1YWwsIHRoZXJlIGNvdWxkIGFsc28gYmUgYSByZWYtcXVhbGlmaWVyOgorCisgICBbZGNsLmZjdF0KKyAgIFRoZSByZXR1cm4gdHlwZSwgdGhlIHBhcmFtZXRlci10eXBlLWxpc3QsIHRoZSByZWYtcXVhbGlmaWVyLCBhbmQKKyAgIHRoZSBjdi1xdWFsaWZpZXItc2VxLCBidXQgbm90IHRoZSBkZWZhdWx0IGFyZ3VtZW50cyBvciB0aGUgZXhjZXB0aW9uCisgICBzcGVjaWZpY2F0aW9uLCBhcmUgcGFydCBvZiB0aGUgZnVuY3Rpb24gdHlwZS4KKworICAgUkVGX1FVQUxfTk9ORSAgICBPcmRpbmFyeSBtZW1iZXIgZnVuY3Rpb24gd2l0aCBubyByZWYtcXVhbGlmaWVyCisgICBSRUZfUVVBTF9MVkFMVUUgIE1lbWJlciBmdW5jdGlvbiB3aXRoIHRoZSAmLXJlZi1xdWFsaWZpZXIKKyAgIFJFRl9RVUFMX1JWQUxVRSAgTWVtYmVyIGZ1bmN0aW9uIHdpdGggdGhlICYmLXJlZi1xdWFsaWZpZXIgKi8KKworZW51bSBjcF9yZWZfcXVhbGlmaWVyIHsKKyAgUkVGX1FVQUxfTk9ORSA9IDAsCisgIFJFRl9RVUFMX0xWQUxVRSA9IDEsCisgIFJFRl9RVUFMX1JWQUxVRSA9IDIKK307CisKKy8qIEEgc3RvcmFnZSBjbGFzcy4gICovCisKK3R5cGVkZWYgZW51bSBjcF9zdG9yYWdlX2NsYXNzIHsKKyAgLyogc2Nfbm9uZSBtdXN0IGJlIHplcm8gc28gdGhhdCB6ZXJvaW5nIGEgY3BfZGVjbF9zcGVjaWZpZXJfc2VxCisgICAgIHNldHMgdGhlIHN0b3JhZ2VfY2xhc3MgZmllbGQgdG8gc2Nfbm9uZS4gICovCisgIHNjX25vbmUgPSAwLAorICBzY19hdXRvLAorICBzY19yZWdpc3RlciwKKyAgc2Nfc3RhdGljLAorICBzY19leHRlcm4sCisgIHNjX211dGFibGUKK30gY3Bfc3RvcmFnZV9jbGFzczsKKworLyogQW4gaW5kaXZpZHVhbCBkZWNsLXNwZWNpZmllci4gIFRoaXMgaXMgdXNlZCB0byBpbmRleCB0aGUgYXJyYXkgb2YKKyAgIGxvY2F0aW9ucyBmb3IgdGhlIGRlY2xzcGVjcyBpbiBzdHJ1Y3QgY3BfZGVjbF9zcGVjaWZpZXJfc2VxCisgICBiZWxvdy4gICovCisKK3R5cGVkZWYgZW51bSBjcF9kZWNsX3NwZWMgeworICBkc19maXJzdCwKKyAgZHNfc2lnbmVkID0gZHNfZmlyc3QsCisgIGRzX3Vuc2lnbmVkLAorICBkc19zaG9ydCwKKyAgZHNfbG9uZywKKyAgZHNfY29uc3QsCisgIGRzX3ZvbGF0aWxlLAorICBkc19yZXN0cmljdCwKKyAgZHNfaW5saW5lLAorICBkc192aXJ0dWFsLAorICBkc19leHBsaWNpdCwKKyAgZHNfZnJpZW5kLAorICBkc190eXBlZGVmLAorICBkc19hbGlhcywKKyAgZHNfY29uc3RleHByLAorICBkc19jb21wbGV4LAorICBkc190aHJlYWQsCisgIGRzX3R5cGVfc3BlYywKKyAgZHNfcmVkZWZpbmVkX2J1aWx0aW5fdHlwZV9zcGVjLAorICBkc19hdHRyaWJ1dGUsCisgIGRzX3N0ZF9hdHRyaWJ1dGUsCisgIGRzX3N0b3JhZ2VfY2xhc3MsCisgIGRzX2xvbmdfbG9uZywKKyAgZHNfbGFzdCAvKiBUaGlzIGVudW1lcmF0b3IgbXVzdCBhbHdheXMgYmUgdGhlIGxhc3Qgb25lLiAgKi8KK30gY3BfZGVjbF9zcGVjOworCisvKiBBIGRlY2wtc3BlY2lmaWVyLXNlcS4gICovCisKK3R5cGVkZWYgc3RydWN0IGNwX2RlY2xfc3BlY2lmaWVyX3NlcSB7CisgIC8qIEFuIGFycmF5IG9mIGxvY2F0aW9ucyBmb3IgdGhlIGRlY2xhcmF0aW9uIHNlcGVjaWZpZXJzLCBpbmRleGVkIGJ5CisgICAgIGVudW0gY3BfZGVjbF9zcGVjX3dvcmQuICAqLworICBzb3VyY2VfbG9jYXRpb24gbG9jYXRpb25zW2RzX2xhc3RdOworICAvKiBUaGUgcHJpbWFyeSB0eXBlLCBpZiBhbnksIGdpdmVuIGJ5IHRoZSBkZWNsLXNwZWNpZmllci1zZXEuCisgICAgIE1vZGlmaWVycywgbGlrZSAic2hvcnQiLCAiY29uc3QiLCBhbmQgInVuc2lnbmVkIiBhcmUgbm90CisgICAgIHJlZmxlY3RlZCBoZXJlLiAgVGhpcyBmaWVsZCB3aWxsIGJlIGEgVFlQRSwgdW5sZXNzIGEgdHlwZWRlZi1uYW1lCisgICAgIHdhcyB1c2VkLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgYSBUWVBFX0RFQ0wuICAqLworICB0cmVlIHR5cGU7CisgIC8qIFRoZSBhdHRyaWJ1dGVzLCBpZiBhbnksIHByb3ZpZGVkIHdpdGggdGhlIHNwZWNpZmllciBzZXF1ZW5jZS4gICovCisgIHRyZWUgYXR0cmlidXRlczsKKyAgLyogVGhlIGMrKzExIGF0dHJpYnV0ZXMgdGhhdCBmb2xsb3dzIHRoZSB0eXBlIHNwZWNpZmllci4gICovCisgIHRyZWUgc3RkX2F0dHJpYnV0ZXM7CisgIC8qIElmIG5vbi1OVUxMLCBhIGJ1aWx0LWluIHR5cGUgdGhhdCB0aGUgdXNlciBhdHRlbXB0ZWQgdG8gcmVkZWZpbmUKKyAgICAgdG8gc29tZSBvdGhlciB0eXBlLiAgKi8KKyAgdHJlZSByZWRlZmluZWRfYnVpbHRpbl90eXBlOworICAvKiBUaGUgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZWQgLS0gb3Igc2Nfbm9uZSBpZiBubyBzdG9yYWdlIGNsYXNzIHdhcworICAgICBleHBsaWNpdGx5IHNwZWNpZmllZC4gICovCisgIGNwX3N0b3JhZ2VfY2xhc3Mgc3RvcmFnZV9jbGFzczsKKyAgLyogVHJ1ZSBpZmYgVFlQRV9TUEVDIGRlZmluZXMgYSBjbGFzcyBvciBlbnVtLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCB0eXBlX2RlZmluaXRpb25fcCA6IDE7CisgIC8qIFRydWUgaWZmIG11bHRpcGxlIHR5cGVzIHdlcmUgKGVycm9uZW91c2x5KSBzcGVjaWZpZWQgZm9yIHRoaXMKKyAgICAgZGVjbC1zcGVjaWZpZXItc2VxLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBtdWx0aXBsZV90eXBlc19wIDogMTsKKyAgLyogVHJ1ZSBpZmYgbXVsdGlwbGUgc3RvcmFnZSBjbGFzc2VzIHdlcmUgKGVycm9uZW91c2x5KSBzcGVjaWZpZWQKKyAgICAgZm9yIHRoaXMgZGVjbC1zcGVjaWZpZXItc2VxIG9yIGEgY29tYmluYXRpb24gb2YgYSBzdG9yYWdlIGNsYXNzCisgICAgIHdpdGggYSB0eXBlZGVmIHNwZWNpZmllci4gICovCisgIEJPT0xfQklURklFTEQgY29uZmxpY3Rpbmdfc3BlY2lmaWVyc19wIDogMTsKKyAgLyogVHJ1ZSBpZmYgYXQgbGVhc3Qgb25lIGRlY2wtc3BlY2lmaWVyIHdhcyBmb3VuZC4gICovCisgIEJPT0xfQklURklFTEQgYW55X3NwZWNpZmllcnNfcCA6IDE7CisgIC8qIFRydWUgaWZmIGF0IGxlYXN0IG9uZSB0eXBlLXNwZWNpZmllciB3YXMgZm91bmQuICAqLworICBCT09MX0JJVEZJRUxEIGFueV90eXBlX3NwZWNpZmllcnNfcCA6IDE7CisgIC8qIFRydWUgaWZmICJpbnQiIHdhcyBleHBsaWNpdGx5IHByb3ZpZGVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBleHBsaWNpdF9pbnRfcCA6IDE7CisgIC8qIFRydWUgaWZmICJfX2ludDEyOCIgd2FzIGV4cGxpY2l0bHkgcHJvdmlkZWQuICAqLworICBCT09MX0JJVEZJRUxEIGV4cGxpY2l0X2ludDEyOF9wIDogMTsKKyAgLyogVHJ1ZSBpZmYgImNoYXIiIHdhcyBleHBsaWNpdGx5IHByb3ZpZGVkLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBleHBsaWNpdF9jaGFyX3AgOiAxOworICAvKiBUcnVlIGlmZiBkc190aHJlYWQgaXMgc2V0IGZvciBfX3RocmVhZCwgbm90IHRocmVhZF9sb2NhbC4gICovCisgIEJPT0xfQklURklFTEQgZ251X3RocmVhZF9rZXl3b3JkX3AgOiAxOworfSBjcF9kZWNsX3NwZWNpZmllcl9zZXE7CisKKy8qIFRoZSB2YXJpb3VzIGtpbmRzIG9mIGRlY2xhcmF0b3JzLiAgKi8KKwordHlwZWRlZiBlbnVtIGNwX2RlY2xhcmF0b3Jfa2luZCB7CisgIGNka19pZCwKKyAgY2RrX2Z1bmN0aW9uLAorICBjZGtfYXJyYXksCisgIGNka19wb2ludGVyLAorICBjZGtfcmVmZXJlbmNlLAorICBjZGtfcHRybWVtLAorICBjZGtfZXJyb3IKK30gY3BfZGVjbGFyYXRvcl9raW5kOworCisvKiBBIGRlY2xhcmF0b3IuICAqLworCit0eXBlZGVmIHN0cnVjdCBjcF9kZWNsYXJhdG9yIGNwX2RlY2xhcmF0b3I7CisKK3R5cGVkZWYgc3RydWN0IGNwX3BhcmFtZXRlcl9kZWNsYXJhdG9yIGNwX3BhcmFtZXRlcl9kZWNsYXJhdG9yOworCisvKiBBIHBhcmFtZXRlciwgYmVmb3JlIGl0IGhhcyBiZWVuIHNlbWFudGljYWxseSBhbmFseXplZC4gICovCitzdHJ1Y3QgY3BfcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAvKiBUaGUgbmV4dCBwYXJhbWV0ZXIsIG9yIE5VTExfVFJFRSBpZiBub25lLiAgKi8KKyAgY3BfcGFyYW1ldGVyX2RlY2xhcmF0b3IgKm5leHQ7CisgIC8qIFRoZSBkZWNsLXNwZWNpZmllcnMtc2VxIGZvciB0aGUgcGFyYW1ldGVyLiAgKi8KKyAgY3BfZGVjbF9zcGVjaWZpZXJfc2VxIGRlY2xfc3BlY2lmaWVyczsKKyAgLyogVGhlIGRlY2xhcmF0b3IgZm9yIHRoZSBwYXJhbWV0ZXIuICAqLworICBjcF9kZWNsYXJhdG9yICpkZWNsYXJhdG9yOworICAvKiBUaGUgZGVmYXVsdC1hcmd1bWVudCBleHByZXNzaW9uLCBvciBOVUxMX1RSRUUsIGlmIG5vbmUuICAqLworICB0cmVlIGRlZmF1bHRfYXJndW1lbnQ7CisgIC8qIFRydWUgaWZmIHRoaXMgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBpbiB0aGUgbGlzdCBhbmQgdGhlCisgICAgIHBhcmFtZXRlciBzZXF1ZW5jZSBlbmRzIHdpdGggYW4gZWxsaXBzaXMuICAqLworICBib29sIGVsbGlwc2lzX3A7Cit9OworCisvKiBBIGRlY2xhcmF0b3IuICAqLworc3RydWN0IGNwX2RlY2xhcmF0b3IgeworICAvKiBUaGUga2luZCBvZiBkZWNsYXJhdG9yLiAgKi8KKyAgRU5VTV9CSVRGSUVMRCAoY3BfZGVjbGFyYXRvcl9raW5kKSBraW5kIDogNDsKKyAgLyogV2hldGhlciB3ZSBwYXJzZWQgYW4gZWxsaXBzaXMgKGAuLi4nKSBqdXN0IGJlZm9yZSB0aGUgZGVjbGFyYXRvciwKKyAgICAgdG8gaW5kaWNhdGUgdGhpcyBpcyBhIHBhcmFtZXRlciBwYWNrLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBwYXJhbWV0ZXJfcGFja19wIDogMTsKKyAgbG9jYXRpb25fdCBpZF9sb2M7IC8qIEN1cnJlbnRseSBvbmx5IHNldCBmb3IgY2RrX2lkIGFuZCBjZGtfZnVuY3Rpb24uICovCisgIC8qIEdOVSBBdHRyaWJ1dGVzIHRoYXQgYXBwbHkgdG8gdGhpcyBkZWNsYXJhdG9yLiAgSWYgdGhlIGRlY2xhcmF0b3IKKyAgICAgaXMgYSBwb2ludGVyIG9yIGEgcmVmZXJlbmNlLCB0aGVzZSBhdHRyaWJ1dGUgYXBwbHkgdG8gdGhlIHR5cGUKKyAgICAgcG9pbnRlZCB0by4gICovCisgIHRyZWUgYXR0cmlidXRlczsKKyAgLyogU3RhbmRhcmQgQysrMTEgYXR0cmlidXRlcyB0aGF0IGFwcGx5IHRvIHRoaXMgZGVjbGFyYXRvci4gIElmIHRoZQorICAgICBkZWNsYXJhdG9yIGlzIGEgcG9pbnRlciBvciBhIHJlZmVyZW5jZSwgdGhlc2UgYXR0cmlidXRlcyBhcHBseQorICAgICB0byB0aGUgcG9pbnRlciwgcmF0aGVyIHRoYW4gdG8gdGhlIHR5cGUgcG9pbnRlZCB0by4gICovCisgIHRyZWUgc3RkX2F0dHJpYnV0ZXM7CisgIC8qIEZvciBhbGwgYnV0IGNka19pZCBhbmQgY2RrX2Vycm9yLCB0aGUgY29udGFpbmVkIGRlY2xhcmF0b3IuICBGb3IKKyAgICAgY2RrX2lkIGFuZCBjZGtfZXJyb3IsIGd1YXJhbnRlZWQgdG8gYmUgTlVMTC4gICovCisgIGNwX2RlY2xhcmF0b3IgKmRlY2xhcmF0b3I7CisgIHVuaW9uIHsKKyAgICAvKiBGb3IgaWRlbnRpZmllcnMuICAqLworICAgIHN0cnVjdCB7CisgICAgICAvKiBJZiBub24tTlVMTCwgdGhlIHF1YWxpZnlpbmcgc2NvcGUgKGEgTkFNRVNQQUNFX0RFQ0wgb3IKKwkgKl9UWVBFKSBmb3IgdGhpcyBpZGVudGlmaWVyLiAgKi8KKyAgICAgIHRyZWUgcXVhbGlmeWluZ19zY29wZTsKKyAgICAgIC8qIFRoZSB1bnF1YWxpZmllZCBuYW1lIG9mIHRoZSBlbnRpdHkgLS0gYW4gSURFTlRJRklFUl9OT0RFLAorCSBCSVRfTk9UX0VYUFIsIG9yIFRFTVBMQVRFX0lEX0VYUFIuICAqLworICAgICAgdHJlZSB1bnF1YWxpZmllZF9uYW1lOworICAgICAgLyogSWYgdGhpcyBpcyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uLCB3aGF0IGtpbmQgb2Ygc3BlY2lhbAorCSBmdW5jdGlvbiAoaWYgYW55KS4gICovCisgICAgICBzcGVjaWFsX2Z1bmN0aW9uX2tpbmQgc2ZrOworICAgIH0gaWQ7CisgICAgLyogRm9yIGZ1bmN0aW9ucy4gICovCisgICAgc3RydWN0IHsKKyAgICAgIC8qIFRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBmdW5jdGlvbiBhcyBhIFRSRUVfTElTVCBvZiBkZWNsL2RlZmF1bHQuICAqLworICAgICAgdHJlZSBwYXJhbWV0ZXJzOworICAgICAgLyogVGhlIGN2LXF1YWxpZmllcnMgZm9yIHRoZSBmdW5jdGlvbi4gICovCisgICAgICBjcF9jdl9xdWFscyBxdWFsaWZpZXJzOworICAgICAgLyogVGhlIHZpcnQtc3BlY2lmaWVycyBmb3IgdGhlIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGNwX3ZpcnRfc3BlY2lmaWVycyB2aXJ0X3NwZWNpZmllcnM7CisgICAgICAvKiBUaGUgcmVmLXF1YWxpZmllciBmb3IgdGhlIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGNwX3JlZl9xdWFsaWZpZXIgcmVmX3F1YWxpZmllcjsKKyAgICAgIC8qIFRoZSBleGNlcHRpb24tc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uLiAgKi8KKyAgICAgIHRyZWUgZXhjZXB0aW9uX3NwZWNpZmljYXRpb247CisgICAgICAvKiBUaGUgbGF0ZS1zcGVjaWZpZWQgcmV0dXJuIHR5cGUsIGlmIGFueS4gICovCisgICAgICB0cmVlIGxhdGVfcmV0dXJuX3R5cGU7CisgICAgfSBmdW5jdGlvbjsKKyAgICAvKiBGb3IgYXJyYXlzLiAgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgLyogVGhlIGJvdW5kcyB0byB0aGUgYXJyYXkuICAqLworICAgICAgdHJlZSBib3VuZHM7CisgICAgfSBhcnJheTsKKyAgICAvKiBGb3IgY2RrX3BvaW50ZXIgYW5kIGNka19wdHJtZW0uICAqLworICAgIHN0cnVjdCB7CisgICAgICAvKiBUaGUgY3YtcXVhbGlmaWVycyBmb3IgdGhlIHBvaW50ZXIuICAqLworICAgICAgY3BfY3ZfcXVhbHMgcXVhbGlmaWVyczsKKyAgICAgIC8qIEZvciBjZGtfcHRybWVtLCB0aGUgY2xhc3MgdHlwZSBjb250YWluaW5nIHRoZSBtZW1iZXIuICAqLworICAgICAgdHJlZSBjbGFzc190eXBlOworICAgIH0gcG9pbnRlcjsKKyAgICAvKiBGb3IgY2RrX3JlZmVyZW5jZSAqLworICAgIHN0cnVjdCB7CisgICAgICAvKiBUaGUgY3YtcXVhbGlmaWVycyBmb3IgdGhlIHJlZmVyZW5jZS4gIFRoZXNlIHF1YWxpZmllcnMgYXJlCisgICAgICAgICBvbmx5IHVzZWQgdG8gZGlhZ25vc2UgaWxsLWZvcm1lZCBjb2RlLiAgKi8KKyAgICAgIGNwX2N2X3F1YWxzIHF1YWxpZmllcnM7CisgICAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gcnZhbHVlIHJlZmVyZW5jZSAqLworICAgICAgYm9vbCBydmFsdWVfcmVmOworICAgIH0gcmVmZXJlbmNlOworICB9IHU7Cit9OworCisvKiBBIGxldmVsIG9mIHRlbXBsYXRlIGluc3RhbnRpYXRpb24uICAqLworc3RydWN0IEdUWSgoY2hhaW5fbmV4dCAoIiVoLm5leHQiKSkpIHRpbnN0X2xldmVsIHsKKyAgLyogVGhlIGltbWVkaWF0ZWx5IGRlZXBlciBsZXZlbCBpbiB0aGUgY2hhaW4uICAqLworICBzdHJ1Y3QgdGluc3RfbGV2ZWwgKm5leHQ7CisKKyAgLyogVGhlIG9yaWdpbmFsIG5vZGUuICBDYW4gYmUgZWl0aGVyIGEgREVDTCAoZm9yIGEgZnVuY3Rpb24gb3Igc3RhdGljCisgICAgIGRhdGEgbWVtYmVyKSBvciBhIFRZUEUgKGZvciBhIGNsYXNzKSwgZGVwZW5kaW5nIG9uIHdoYXQgd2Ugd2VyZQorICAgICBhc2tlZCB0byBpbnN0YW50aWF0ZS4gICovCisgIHRyZWUgZGVjbDsKKworICAvKiBUaGUgbG9jYXRpb24gd2hlcmUgdGhlIHRlbXBsYXRlIGlzIGluc3RhbnRpYXRlZC4gICovCisgIGxvY2F0aW9uX3QgbG9jdXM7CisKKyAgLyogZXJyb3Jjb3VudCtzb3JyeWNvdW50IHdoZW4gd2UgcHVzaGVkIHRoaXMgbGV2ZWwuICAqLworICBpbnQgZXJyb3JzOworCisgIC8qIFRydWUgaWYgdGhlIGxvY2F0aW9uIGlzIGluIGEgc3lzdGVtIGhlYWRlci4gICovCisgIGJvb2wgaW5fc3lzdGVtX2hlYWRlcl9wOworfTsKKworYm9vbCBkZWNsX3NwZWNfc2VxX2hhc19zcGVjX3AgKGNvbnN0IGNwX2RlY2xfc3BlY2lmaWVyX3NlcSAqLCBjcF9kZWNsX3NwZWMpOworCisvKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGB0aGlzJyBwYXJhbWV0ZXIgb2YgRk5UWVBFLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCit0eXBlX29mX3RoaXNfcGFybSAoY29uc3RfdHJlZSBmbnR5cGUpCit7CisgIGZ1bmN0aW9uX2FyZ3NfaXRlcmF0b3IgaXRlcjsKKyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChmbnR5cGUpID09IE1FVEhPRF9UWVBFKTsKKyAgZnVuY3Rpb25fYXJnc19pdGVyX2luaXQgKCZpdGVyLCBmbnR5cGUpOworICByZXR1cm4gZnVuY3Rpb25fYXJnc19pdGVyX2NvbmQgKCZpdGVyKTsKK30KKworLyogUmV0dXJuIHRoZSBjbGFzcyBvZiB0aGUgYHRoaXMnIHBhcmFtZXRlciBvZiBGTlRZUEUuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2NsYXNzX29mX3RoaXNfcGFybSAoY29uc3RfdHJlZSBmbnR5cGUpCit7CisgIHJldHVybiBUUkVFX1RZUEUgKHR5cGVfb2ZfdGhpc19wYXJtIChmbnR5cGUpKTsKK30KKworLyogQSBwYXJhbWV0ZXIgbGlzdCBpbmRpY2F0aW5nIGZvciBhIGZ1bmN0aW9uIHdpdGggbm8gcGFyYW1ldGVycywKKyAgIGUuZyAgImludCBmKHZvaWQpIi4gICovCitleHRlcm4gY3BfcGFyYW1ldGVyX2RlY2xhcmF0b3IgKm5vX3BhcmFtZXRlcnM7CisKKy8qIFRydWUgaWYgd2Ugc2F3ICIjcHJhZ21hIEdDQyBqYXZhX2V4Y2VwdGlvbnMiLiAgKi8KK2V4dGVybiBib29sIHByYWdtYV9qYXZhX2V4Y2VwdGlvbnM7CisKKy8qIGluIGNhbGwuYyAqLworZXh0ZXJuIGJvb2wgY2hlY2tfZHRvcl9uYW1lCQkJKHRyZWUsIHRyZWUpOworCitleHRlcm4gdHJlZSBidWlsZF9jb25kaXRpb25hbF9leHByCQkodHJlZSwgdHJlZSwgdHJlZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfYWRkcl9mdW5jCQkJKHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB2b2lkIHNldF9mbGFnc19mcm9tX2NhbGxlZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF9hCQkJKHRyZWUsIGludCwgdHJlZSopOworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF9uCQkJKHRyZWUsIGludCwgLi4uKTsKK2V4dGVybiBib29sIG51bGxfcHRyX2NzdF9wCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgbnVsbF9tZW1iZXJfcG9pbnRlcl92YWx1ZV9wCQkodHJlZSk7CitleHRlcm4gYm9vbCBzdWZmaWNpZW50X3Bhcm1zX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSB0eXBlX2RlY2F5c190bwkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uCQkodHJlZSwgdHJlZSwgaW50LAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsCQkodHJlZSwgdmVjPHRyZWUsIHZhX2djPiAqKiwgYm9vbCwgCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfb3BlcmF0b3JfbmV3X2NhbGwJCSh0cmVlLCB2ZWM8dHJlZSwgdmFfZ2M+ICoqLCB0cmVlICosCisJCQkJCQkgdHJlZSAqLCB0cmVlLCB0cmVlICosCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfbmV3X21ldGhvZF9jYWxsCQkodHJlZSwgdHJlZSwgdmVjPHRyZWUsIHZhX2djPiAqKiwKKwkJCQkJCSB0cmVlLCBpbnQsIHRyZWUgKiwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9zcGVjaWFsX21lbWJlcl9jYWxsCQkodHJlZSwgdHJlZSwgdmVjPHRyZWUsIHZhX2djPiAqKiwKKwkJCQkJCSB0cmVlLCBpbnQsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX25ld19vcAkJCShsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwKKwkJCQkJCSBpbnQsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUgKiwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9vcF9jYWxsCQkJKHRyZWUsIHZlYzx0cmVlLCB2YV9nYz4gKiosCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfb3BfZGVsZXRlX2NhbGwJCShlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwKKwkJCQkJCSBib29sLCB0cmVlLCB0cmVlLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBib29sIGNhbl9jb252ZXJ0CQkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gYm9vbCBjYW5fY29udmVydF9hcmcJCQkodHJlZSwgdHJlZSwgdHJlZSwgaW50LAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBib29sIGNhbl9jb252ZXJ0X2FyZ19iYWQJCQkodHJlZSwgdHJlZSwgdHJlZSwgaW50LAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBib29sIGVuZm9yY2VfYWNjZXNzCQkJKHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHZvaWQgcHVzaF9kZWZhcmdfY29udGV4dAkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHBvcF9kZWZhcmdfY29udGV4dAkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfZGVmYXVsdF9hcmcJCQkodHJlZSwgdHJlZSwgdHJlZSwgaW50LAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfYXJnX3RvX2VsbGlwc2lzCQkodHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfeF92YV9hcmcJCQkoc291cmNlX2xvY2F0aW9uLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGN4eF90eXBlX3Byb21vdGVzX3RvCQkodHJlZSk7CitleHRlcm4gdHJlZSB0eXBlX3Bhc3NlZF9hcwkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfZm9yX2FyZ19wYXNzaW5nCQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIGJvb2wgaXNfcHJvcGVybHlfZGVyaXZlZF9mcm9tCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBpbml0aWFsaXplX3JlZmVyZW5jZQkJKHRyZWUsIHRyZWUsIGludCwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBleHRlbmRfcmVmX2luaXRfdGVtcHMJCSh0cmVlLCB0cmVlLCB2ZWM8dHJlZSwgdmFfZ2M+KiopOworZXh0ZXJuIHRyZWUgbWFrZV90ZW1wb3JhcnlfdmFyX2Zvcl9yZWZfdG9fdGVtcAkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCB0eXBlX2hhc19leHRlbmRlZF90ZW1wcwkJKHRyZWUpOworZXh0ZXJuIHRyZWUgc3RyaXBfdG9wX3F1YWxzCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgcmVmZXJlbmNlX3JlbGF0ZWRfcAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIHBlcmZvcm1faW1wbGljaXRfY29udmVyc2lvbgkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIHBlcmZvcm1faW1wbGljaXRfY29udmVyc2lvbl9mbGFncwkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QsIGludCk7CitleHRlcm4gdHJlZSBidWlsZF9pbnRlZ3JhbF9ub250eXBlX2FyZ19jb252CSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBwZXJmb3JtX2RpcmVjdF9pbml0aWFsaXphdGlvbl9pZl9wb3NzaWJsZSAodHJlZSwgdHJlZSwgYm9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBpbl9jaGFyZ2VfYXJnX2Zvcl9uYW1lCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9jeHhfY2FsbAkJCSh0cmVlLCBpbnQsIHRyZWUgKiwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gYm9vbCBpc19zdGRfaW5pdF9saXN0CQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfbGlzdF9jdG9yCQkJKHRyZWUpOworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworZXh0ZXJuIHZvaWQgdmFsaWRhdGVfY29udmVyc2lvbl9vYnN0YWNrCQkodm9pZCk7CisjZW5kaWYgLyogRU5BQkxFX0NIRUNLSU5HICovCitleHRlcm4gdm9pZCBtYXJrX3ZlcnNpb25zX3VzZWQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBnZXRfZnVuY3Rpb25fdmVyc2lvbl9kaXNwYXRjaGVyCSh0cmVlKTsKKworLyogaW4gY2xhc3MuYyAqLworZXh0ZXJuIHRyZWUgYnVpbGRfdmZpZWxkX3JlZgkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2Jhc2VfcGF0aAkJCShlbnVtIHRyZWVfY29kZSwgdHJlZSwKKwkJCQkJCSB0cmVlLCBpbnQsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfdG9fYmFzZQkJCSh0cmVlLCB0cmVlLCBib29sLCBib29sLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfdG9fYmFzZV9zdGF0aWNhbGx5CQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF92dGJsX3JlZgkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3Zmbl9yZWYJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnZXRfdnRhYmxlX2RlY2wJCQkodHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIHJlc29ydF90eXBlX21ldGhvZF92ZWMJCSh2b2lkICosIHZvaWQgKiwKKwkJCQkJCSBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIGJvb2wgYWRkX21ldGhvZAkJCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBjdXJyZW50bHlfb3Blbl9jbGFzcwkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY3VycmVudGx5X29wZW5fZGVyaXZlZF9jbGFzcwkodHJlZSk7CitleHRlcm4gdHJlZSBjdXJyZW50X25vbmxhbWJkYV9jbGFzc190eXBlCSh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9zdHJ1Y3QJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfc3RydWN0XzEJCQkodHJlZSk7CitleHRlcm4gaW50IHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcAkJKHRyZWUsIGludCAqKTsKK2V4dGVybiB2b2lkIGluaXRfY2xhc3NfcHJvY2Vzc2luZwkJKHZvaWQpOworZXh0ZXJuIGludCBpc19lbXB0eV9jbGFzcwkJCSh0cmVlKTsKK2V4dGVybiBib29sIGlzX3JlYWxseV9lbXB0eV9jbGFzcwkJKHRyZWUpOworZXh0ZXJuIHZvaWQgcHVzaGNsYXNzCQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHBvcGNsYXNzCQkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIHB1c2hfbmVzdGVkX2NsYXNzCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgcG9wX25lc3RlZF9jbGFzcwkJCSh2b2lkKTsKK2V4dGVybiBpbnQgY3VycmVudF9sYW5nX2RlcHRoCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgcHVzaF9sYW5nX2NvbnRleHQJCQkodHJlZSk7CitleHRlcm4gdm9pZCBwb3BfbGFuZ19jb250ZXh0CQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgaW5zdGFudGlhdGVfdHlwZQkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdm9pZCBwcmludF9jbGFzc19zdGF0aXN0aWNzCQkodm9pZCk7CitleHRlcm4gdm9pZCBidWlsZF9zZWxmX3JlZmVyZW5jZQkJKHZvaWQpOworZXh0ZXJuIGludCBzYW1lX3NpZ25hdHVyZV9wCQkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworZXh0ZXJuIHZvaWQgbWF5YmVfYWRkX2NsYXNzX3RlbXBsYXRlX2RlY2xfbGlzdAkodHJlZSwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIHVucmV2ZXJzZV9tZW1iZXJfZGVjbGFyYXRpb25zCSh0cmVlKTsKK2V4dGVybiB2b2lkIGludmFsaWRhdGVfY2xhc3NfbG9va3VwX2NhY2hlCSh2b2lkKTsKK2V4dGVybiB2b2lkIG1heWJlX25vdGVfbmFtZV91c2VkX2luX2NsYXNzCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG5vdGVfbmFtZV9kZWNsYXJlZF9pbl9jbGFzcwkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3Z0YmxfZGVjbF9mb3JfYmluZm8JCSh0cmVlKTsKK2V4dGVybiB2b2lkIGRlYnVnX2NsYXNzCQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGRlYnVnX3RodW5rcwkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHNldF9saW5rYWdlX2FjY29yZGluZ190b190eXBlCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGRldGVybWluZV9rZXlfbWV0aG9kCQkodHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19mb3Jfb3ZlcnJpZGUJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBwdXNoX2NsYXNzX3N0YWNrCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9wX2NsYXNzX3N0YWNrCQkJKHZvaWQpOworZXh0ZXJuIGJvb2wgdHlwZV9oYXNfdXNlcl9ub25kZWZhdWx0X2NvbnN0cnVjdG9yICh0cmVlKTsKK2V4dGVybiB0cmVlIGluX2NsYXNzX2RlZmF1bHRlZF9kZWZhdWx0X2NvbnN0cnVjdG9yICh0cmVlKTsKK2V4dGVybiBib29sIHVzZXJfcHJvdmlkZWRfcAkJCSh0cmVlKTsKK2V4dGVybiBib29sIHR5cGVfaGFzX3VzZXJfcHJvdmlkZWRfY29uc3RydWN0b3IgICh0cmVlKTsKK2V4dGVybiBib29sIHR5cGVfaGFzX3VzZXJfcHJvdmlkZWRfZGVmYXVsdF9jb25zdHJ1Y3RvciAodHJlZSk7CitleHRlcm4gYm9vbCB2YmFzZV9oYXNfdXNlcl9wcm92aWRlZF9tb3ZlX2Fzc2lnbiAodHJlZSk7CitleHRlcm4gdHJlZSBkZWZhdWx0X2luaXRfdW5pbml0aWFsaXplZF9wYXJ0ICh0cmVlKTsKK2V4dGVybiBib29sIHRyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rvcl9pc19jb25zdGV4cHIgKHRyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9oYXNfY29uc3RleHByX2RlZmF1bHRfY29uc3RydWN0b3IgKHRyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9oYXNfdmlydHVhbF9kZXN0cnVjdG9yCQkodHJlZSk7CitleHRlcm4gYm9vbCB0eXBlX2hhc19tb3ZlX2NvbnN0cnVjdG9yCQkodHJlZSk7CitleHRlcm4gYm9vbCB0eXBlX2hhc19tb3ZlX2Fzc2lnbgkJKHRyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9oYXNfdXNlcl9kZWNsYXJlZF9tb3ZlX2NvbnN0cnVjdG9yICh0cmVlKTsKK2V4dGVybiBib29sIHR5cGVfaGFzX3VzZXJfZGVjbGFyZWRfbW92ZV9hc3NpZ24odHJlZSk7CitleHRlcm4gYm9vbCB0eXBlX2J1aWxkX2N0b3JfY2FsbAkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZXhwbGFpbl9ub25fbGl0ZXJhbF9jbGFzcwkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZGVmYXVsdGVkX2xhdGVfY2hlY2sJCSh0cmVlKTsKK2V4dGVybiBib29sIGRlZmF1bHRhYmxlX2ZuX2NoZWNrCQkodHJlZSk7CitleHRlcm4gdm9pZCBmaXh1cF90eXBlX3ZhcmlhbnRzCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZml4dXBfYXR0cmlidXRlX3ZhcmlhbnRzCQkodHJlZSk7CitleHRlcm4gdHJlZSogZGVjbF9jbG9uZWRfZnVuY3Rpb25fcAkJKGNvbnN0X3RyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgY2xvbmVfZnVuY3Rpb25fZGVjbAkJCSh0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgYWRqdXN0X2Nsb25lX2FyZ3MJCQkodHJlZSk7CitleHRlcm4gdm9pZCBkZWR1Y2Vfbm9leGNlcHRfb25fZGVzdHJ1Y3RvciAgICAgICAodHJlZSk7CitleHRlcm4gdm9pZCBpbnNlcnRfbGF0ZV9lbnVtX2RlZl9pbnRvX2NsYXNzdHlwZV9zb3J0ZWRfZmllbGRzICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIHVuaXF1ZWx5X2Rlcml2ZWRfZnJvbV9wICAgICAgICAgICAgICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIHB1YmxpY2x5X3VuaXF1ZWx5X2Rlcml2ZWRfcCAgICAgICAgICh0cmVlLCB0cmVlKTsKKworLyogaW4gY3Z0LmMgKi8KK2V4dGVybiB0cmVlIGNvbnZlcnRfdG9fcmVmZXJlbmNlCQkodHJlZSwgdHJlZSwgaW50LCBpbnQsIHRyZWUsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY29udmVydF9mcm9tX3JlZmVyZW5jZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZm9yY2VfcnZhbHVlCQkJKHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIG9jcF9jb252ZXJ0CQkJCSh0cmVlLCB0cmVlLCBpbnQsIGludCwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBjcF9jb252ZXJ0CQkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBjcF9jb252ZXJ0X2FuZF9jaGVjayAgICAgICAgICAgICAgICAodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY3BfZm9sZF9jb252ZXJ0CQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29udmVydF90b192b2lkCQkJKHRyZWUsIGltcGxfY29udl92b2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY29udmVydF9mb3JjZQkJCSh0cmVlLCB0cmVlLCBpbnQsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24JCShpbnQsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgdHlwZV9wcm9tb3Rlc190bwkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIHBlcmZvcm1fcXVhbGlmaWNhdGlvbl9jb252ZXJzaW9ucwkodHJlZSwgdHJlZSk7CisKKy8qIGluIG5hbWUtbG9va3VwLmMgKi8KK2V4dGVybiB0cmVlIHB1c2hkZWNsCQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIHB1c2hkZWNsX21heWJlX2ZyaWVuZAkJKHRyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgbWF5YmVfcHVzaF9jbGVhbnVwX2xldmVsCQkodHJlZSk7CitleHRlcm4gdHJlZSBwdXNodGFnCQkJCSh0cmVlLCB0cmVlLCB0YWdfc2NvcGUpOworZXh0ZXJuIHRyZWUgbWFrZV9hbm9uX25hbWUJCQkodm9pZCk7CitleHRlcm4gdHJlZSBwdXNoZGVjbF90b3BfbGV2ZWxfbWF5YmVfZnJpZW5kCSh0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIHB1c2hkZWNsX3RvcF9sZXZlbF9hbmRfZmluaXNoCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNoZWNrX2Zvcl9vdXRfb2Zfc2NvcGVfdmFyaWFibGUJKHRyZWUpOworZXh0ZXJuIHZvaWQgcHJpbnRfb3RoZXJfYmluZGluZ19zdGFjawkJKGNwX2JpbmRpbmdfbGV2ZWwgKik7CitleHRlcm4gdHJlZSBtYXliZV9wdXNoX2RlY2wJCQkodHJlZSk7CitleHRlcm4gdHJlZSBjdXJyZW50X2RlY2xfbmFtZXNwYWNlCQkodm9pZCk7CisKKy8qIGRlY2wuYyAqLworZXh0ZXJuIHRyZWUgcG9wbGV2ZWwJCQkJKGludCwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgY3h4X2luaXRfZGVjbF9wcm9jZXNzaW5nCQkodm9pZCk7CitlbnVtIGNwX3RyZWVfbm9kZV9zdHJ1Y3R1cmVfZW51bSBjcF90cmVlX25vZGVfc3RydWN0dXJlCisJCQkJCQkodW5pb24gbGFuZ190cmVlX25vZGUgKik7CitleHRlcm4gdm9pZCBmaW5pc2hfc2NvcGUJCQkodm9pZCk7CitleHRlcm4gdm9pZCBwdXNoX3N3aXRjaAkJCQkodHJlZSk7CitleHRlcm4gdm9pZCBwb3Bfc3dpdGNoCQkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIG1ha2VfbGFtYmRhX25hbWUJCQkodm9pZCk7CitleHRlcm4gaW50IGRlY2xzX21hdGNoCQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGR1cGxpY2F0ZV9kZWNscwkJCSh0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIGRlY2xhcmVfbG9jYWxfbGFiZWwJCQkodHJlZSk7CitleHRlcm4gdHJlZSBkZWZpbmVfbGFiZWwJCQkobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19nb3RvCQkJCSh0cmVlKTsKK2V4dGVybiBib29sIGNoZWNrX29tcF9yZXR1cm4JCQkodm9pZCk7CitleHRlcm4gdHJlZSBtYWtlX3R5cGVuYW1lX3R5cGUJCQkodHJlZSwgdHJlZSwgZW51bSB0YWdfdHlwZXMsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIG1ha2VfdW5ib3VuZF9jbGFzc190ZW1wbGF0ZQkJKHRyZWUsIHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX2xpYnJhcnlfZm5fcHRyCQkoY29uc3QgY2hhciAqLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NwX2xpYnJhcnlfZm5fcHRyCQkoY29uc3QgY2hhciAqLCB0cmVlKTsKK2V4dGVybiB0cmVlIHB1c2hfbGlicmFyeV9mbgkJCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIHB1c2hfdm9pZF9saWJyYXJ5X2ZuCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBwdXNoX3Rocm93X2xpYnJhcnlfZm4JCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHdhcm5fbWlzcGxhY2VkX2F0dHJfZm9yX2NsYXNzX3R5cGUgIChzb3VyY2VfbG9jYXRpb24gbG9jYXRpb24sCisJCQkJCQkgdHJlZSBjbGFzc190eXBlKTsKK2V4dGVybiB0cmVlIGNoZWNrX3RhZ19kZWNsCQkJKGNwX2RlY2xfc3BlY2lmaWVyX3NlcSAqLCBib29sKTsKK2V4dGVybiB0cmVlIHNoYWRvd190YWcJCQkJKGNwX2RlY2xfc3BlY2lmaWVyX3NlcSAqKTsKK2V4dGVybiB0cmVlIGdyb2t0eXBlbmFtZQkJCShjcF9kZWNsX3NwZWNpZmllcl9zZXEgKiwgY29uc3QgY3BfZGVjbGFyYXRvciAqLCBib29sKTsKK2V4dGVybiB0cmVlIHN0YXJ0X2RlY2wJCQkJKGNvbnN0IGNwX2RlY2xhcmF0b3IgKiwgY3BfZGVjbF9zcGVjaWZpZXJfc2VxICosIGludCwgdHJlZSwgdHJlZSwgdHJlZSAqKTsKK2V4dGVybiB2b2lkIHN0YXJ0X2RlY2xfMQkJCSh0cmVlLCBib29sKTsKK2V4dGVybiBib29sIGNoZWNrX2FycmF5X2luaXRpYWxpemVyCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjcF9maW5pc2hfZGVjbAkJCSh0cmVlLCB0cmVlLCBib29sLCB0cmVlLCBpbnQpOworZXh0ZXJuIGludCBjcF9jb21wbGV0ZV9hcnJheV90eXBlCQkodHJlZSAqLCB0cmVlLCBib29sKTsKK2V4dGVybiBpbnQgY3BfY29tcGxldGVfYXJyYXlfdHlwZV9vcl9lcnJvcgkodHJlZSAqLCB0cmVlLCBib29sLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9wdHJtZW1mdW5jX3R5cGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3B0cm1lbV90eXBlCQkJKHRyZWUsIHRyZWUpOworLyogdGhlIGdyb2tkZWNsYXJhdG9yIHByb3RvdHlwZSBpcyBpbiBkZWNsLmggKi8KK2V4dGVybiB0cmVlIGJ1aWxkX3RoaXNfcGFybQkJCSh0cmVlLCBjcF9jdl9xdWFscyk7CitleHRlcm4gaW50IGNvcHlfZm5fcAkJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBtb3ZlX2ZuX3AgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBtb3ZlX3NpZ25hdHVyZV9mbl9wICAgICAgICAgICAgICAgICAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBnZXRfc2NvcGVfb2ZfZGVjbGFyYXRvcgkJKGNvbnN0IGNwX2RlY2xhcmF0b3IgKik7CitleHRlcm4gdm9pZCBncm9rX3NwZWNpYWxfbWVtYmVyX3Byb3BlcnRpZXMJKHRyZWUpOworZXh0ZXJuIGludCBncm9rX2N0b3JfcHJvcGVydGllcwkJCShjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGdyb2tfb3BfcHJvcGVydGllcwkJCSh0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIHhyZWZfdGFnCQkJCShlbnVtIHRhZ190eXBlcywgdHJlZSwgdGFnX3Njb3BlLCBib29sKTsKK2V4dGVybiB0cmVlIHhyZWZfdGFnX2Zyb21fdHlwZQkJCSh0cmVlLCB0cmVlLCB0YWdfc2NvcGUpOworZXh0ZXJuIGJvb2wgeHJlZl9iYXNldHlwZXMJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBzdGFydF9lbnVtCQkJCSh0cmVlLCB0cmVlLCB0cmVlLCBib29sLCBib29sICopOworZXh0ZXJuIHZvaWQgZmluaXNoX2VudW1fdmFsdWVfbGlzdAkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2VudW0JCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgYnVpbGRfZW51bWVyYXRvcgkJCSh0cmVlLCB0cmVlLCB0cmVlLCBsb2NhdGlvbl90KTsKK2V4dGVybiB0cmVlIGxvb2t1cF9lbnVtZXJhdG9yCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgc3RhcnRfcHJlcGFyc2VkX2Z1bmN0aW9uCQkodHJlZSwgdHJlZSwgaW50KTsKK2V4dGVybiBpbnQgc3RhcnRfZnVuY3Rpb24JCQkoY3BfZGVjbF9zcGVjaWZpZXJfc2VxICosIGNvbnN0IGNwX2RlY2xhcmF0b3IgKiwgdHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9mdW5jdGlvbl9ib2R5CQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgZmluaXNoX2Z1bmN0aW9uX2JvZHkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG91dGVyX2N1cmx5X2JyYWNlX2Jsb2NrCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfZnVuY3Rpb24JCQkoaW50KTsKK2V4dGVybiB0cmVlIGdyb2ttZXRob2QJCQkJKGNwX2RlY2xfc3BlY2lmaWVyX3NlcSAqLCBjb25zdCBjcF9kZWNsYXJhdG9yICosIHRyZWUpOworZXh0ZXJuIHZvaWQgbWF5YmVfcmVnaXN0ZXJfaW5jb21wbGV0ZV92YXIJKHRyZWUpOworZXh0ZXJuIHZvaWQgbWF5YmVfY29tbW9uaXplX3ZhcgkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGNvbXBsZXRlX3ZhcnMJCQkodHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfc3RtdAkJCQkodm9pZCk7CitleHRlcm4gdHJlZSBzdGF0aWNfZm5fdHlwZQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHJldmVydF9zdGF0aWNfbWVtYmVyX2ZuCQkodHJlZSk7CitleHRlcm4gdm9pZCBmaXh1cF9hbm9ueW1vdXNfYWdncgkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY29tcHV0ZV9hcnJheV9pbmRleF90eXBlCQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY2hlY2tfZGVmYXVsdF9hcmd1bWVudAkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK3R5cGVkZWYgaW50ICgqd2Fsa19uYW1lc3BhY2VzX2ZuKQkJKHRyZWUsIHZvaWQgKik7CitleHRlcm4gaW50IHdhbGtfbmFtZXNwYWNlcwkJCSh3YWxrX25hbWVzcGFjZXNfZm4sCisJCQkJCQkgdm9pZCAqKTsKK2V4dGVybiBpbnQgd3JhcHVwX2dsb2JhbHNfZm9yX25hbWVzcGFjZQkJKHRyZWUsIHZvaWQgKik7CitleHRlcm4gdHJlZSBjcmVhdGVfaW1wbGljaXRfdHlwZWRlZgkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBsb2NhbF92YXJpYWJsZV9wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgcmVnaXN0ZXJfZHRvcl9mbgkJCSh0cmVlKTsKK2V4dGVybiB0bXBsX3NwZWNfa2luZCBjdXJyZW50X3RtcGxfc3BlY19raW5kCShpbnQpOworZXh0ZXJuIHRyZWUgY3BfZm5hbWVfaW5pdAkJCShjb25zdCBjaGFyICosIHRyZWUgKik7CitleHRlcm4gdHJlZSBjeHhfYnVpbHRpbl9mdW5jdGlvbgkJKHRyZWUgZGVjbCk7CitleHRlcm4gdHJlZSBjeHhfYnVpbHRpbl9mdW5jdGlvbl9leHRfc2NvcGUJKHRyZWUgZGVjbCk7CitleHRlcm4gdHJlZSBjaGVja19lbGFib3JhdGVkX3R5cGVfc3BlY2lmaWVyCShlbnVtIHRhZ190eXBlcywgdHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCB3YXJuX2V4dGVybl9yZWRlY2xhcmVkX3N0YXRpYwkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjeHhfY29tZGF0X2dyb3VwCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgY3BfbWlzc2luZ19ub3JldHVybl9va19wCQkodHJlZSk7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX2FydGlmaWNpYWxfdmFyCQkodHJlZSwgdmVjPGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICopOworZXh0ZXJuIHRyZWUgY2hlY2tfdmFyX3R5cGUJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSByZXNoYXBlX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgbmV4dF9pbml0aWFsaXphYmxlX2ZpZWxkICh0cmVlKTsKKworZXh0ZXJuIGJvb2wgZGVmZXJfbWFya191c2VkX2NhbGxzOworZXh0ZXJuIEdUWSgoKSkgdmVjPHRyZWUsIHZhX2djPiAqZGVmZXJyZWRfbWFya191c2VkX2NhbGxzOworZXh0ZXJuIHRyZWUgZmluaXNoX2Nhc2VfbGFiZWwJCQkobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjeHhfbWF5YmVfYnVpbGRfY2xlYW51cAkJKHRyZWUsIHRzdWJzdF9mbGFnc190KTsKKworLyogaW4gZGVjbDIuYyAqLworZXh0ZXJuIGJvb2wgY2hlY2tfamF2YV9tZXRob2QJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9tZW1mbl90eXBlCQkJKHRyZWUsIHRyZWUsIGNwX2N2X3F1YWxzLCBjcF9yZWZfcXVhbGlmaWVyKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3BvaW50ZXJfcHRybWVtZm5fdHlwZQkodHJlZSk7CitleHRlcm4gdHJlZSBjaGFuZ2VfcmV0dXJuX3R5cGUJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBtYXliZV9yZXRyb2ZpdF9pbl9jaHJnCQkodHJlZSk7CitleHRlcm4gdm9pZCBtYXliZV9tYWtlX29uZV9vbmx5CQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgdmFndWVfbGlua2FnZV9wCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZ3Jva2NsYXNzZm4JCQkJKHRyZWUsIHRyZWUsCisJCQkJCQkgZW51bSBvdmVybG9hZF9mbGFncyk7CitleHRlcm4gdHJlZSBncm9rX2FycmF5X2RlY2wJCQkobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBkZWxldGVfc2FuaXR5CQkJKHRyZWUsIHRyZWUsIGJvb2wsIGludCwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY2hlY2tfY2xhc3NmbgkJCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGNoZWNrX21lbWJlcl90ZW1wbGF0ZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZ3Jva2ZpZWxkIChjb25zdCBjcF9kZWNsYXJhdG9yICosIGNwX2RlY2xfc3BlY2lmaWVyX3NlcSAqLAorCQkgICAgICAgdHJlZSwgYm9vbCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBncm9rYml0ZmllbGQgKGNvbnN0IGNwX2RlY2xhcmF0b3IgKiwgY3BfZGVjbF9zcGVjaWZpZXJfc2VxICosCisJCQkgIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3BfcmVjb25zdHJ1Y3RfY29tcGxleF90eXBlCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBjcGx1c19kZWNsX2F0dHJpYnV0ZXMJCSh0cmVlICosIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBmaW5pc2hfYW5vbl91bmlvbgkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGNwX3dyaXRlX2dsb2JhbF9kZWNsYXJhdGlvbnMJKHZvaWQpOworZXh0ZXJuIHRyZWUgY29lcmNlX25ld190eXBlCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY29lcmNlX2RlbGV0ZV90eXBlCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgY29tZGF0X2xpbmthZ2UJCQkodHJlZSk7CitleHRlcm4gdm9pZCBkZXRlcm1pbmVfdmlzaWJpbGl0eQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgY29uc3RyYWluX2NsYXNzX3Zpc2liaWxpdHkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGltcG9ydF9leHBvcnRfZGVjbAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NsZWFudXAJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9vZmZzZXRfcmVmX2NhbGxfZnJvbV90cmVlCSh0cmVlLCB2ZWM8dHJlZSwgdmFfZ2M+ICoqLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBib29sIGRlY2xfY29uc3RhbnRfdmFyX3AJCQkodHJlZSk7CitleHRlcm4gYm9vbCBkZWNsX21heWJlX2NvbnN0YW50X3Zhcl9wCQkodHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19kZWZhdWx0X2FyZ3MJCQkodHJlZSk7CitleHRlcm4gYm9vbCBtYXJrX3VzZWQJCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX3N0YXRpY19kYXRhX21lbWJlcl9kZWNsCSh0cmVlLCB0cmVlLCBib29sLCB0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgY3BfYnVpbGRfcGFybV9kZWNsCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X2d1YXJkCQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdldF9ndWFyZF9jb25kCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgc2V0X2d1YXJkCQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdldF90bHNfd3JhcHBlcl9mbgkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIG1hcmtfbmVlZGVkCQkJCSh0cmVlKTsKK2V4dGVybiBib29sIGRlY2xfbmVlZGVkX3AJCQkodHJlZSk7CitleHRlcm4gdm9pZCBub3RlX3ZhZ3VlX2xpbmthZ2VfZm4JCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2FydGlmaWNpYWxfcGFybQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgcG9zc2libHlfaW5saW5lZF9wCQkJKHRyZWUpOworZXh0ZXJuIGludCBwYXJtX2luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyZWUpOworCisvKiBpbiBlcnJvci5jICovCitleHRlcm4gdm9pZCBpbml0X2Vycm9yCQkJCSh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICp0eXBlX2FzX3N0cmluZwkJKHRyZWUsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqdHlwZV9hc19zdHJpbmdfdHJhbnNsYXRlCSh0cmVlLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmRlY2xfYXNfc3RyaW5nCQkodHJlZSwgaW50KTsKK2V4dGVybiBjb25zdCBjaGFyICpkZWNsX2FzX3N0cmluZ190cmFuc2xhdGUJKHRyZWUsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqZGVjbF9hc19kd2FyZl9zdHJpbmcJCSh0cmVlLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmV4cHJfYXNfc3RyaW5nCQkodHJlZSwgaW50KTsKK2V4dGVybiBjb25zdCBjaGFyICpsYW5nX2RlY2xfbmFtZQkJKHRyZWUsIGludCwgYm9vbCk7CitleHRlcm4gY29uc3QgY2hhciAqbGFuZ19kZWNsX2R3YXJmX25hbWUJCSh0cmVlLCBpbnQsIGJvb2wpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmxhbmd1YWdlX3RvX3N0cmluZwkJKGVudW0gbGFuZ3VhZ2VzKTsKK2V4dGVybiBjb25zdCBjaGFyICpjbGFzc19rZXlfb3JfZW51bV9hc19zdHJpbmcJKHRyZWUpOworZXh0ZXJuIHZvaWQgcHJpbnRfaW5zdGFudGlhdGlvbl9jb250ZXh0CQkodm9pZCk7CitleHRlcm4gdm9pZCBtYXliZV93YXJuX3ZhcmlhZGljX3RlbXBsYXRlcyAgICAgICAodm9pZCk7CitleHRlcm4gdm9pZCBtYXliZV93YXJuX2NwcDB4CQkJKGNwcDB4X3dhcm5fc3RyIHN0cik7CitleHRlcm4gYm9vbCBwZWR3YXJuX2N4eDk4ICAgICAgICAgICAgICAgICAgICAgICAobG9jYXRpb25fdCwgaW50LCBjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDMsNCk7CitleHRlcm4gbG9jYXRpb25fdCBsb2NhdGlvbl9vZiAgICAgICAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gdm9pZCBxdWFsaWZpZWRfbmFtZV9sb29rdXBfZXJyb3IJCSh0cmVlLCB0cmVlLCB0cmVlLAorCQkJCQkJIGxvY2F0aW9uX3QpOworCisvKiBpbiBleGNlcHQuYyAqLworZXh0ZXJuIHZvaWQgaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZwkJKHZvaWQpOworZXh0ZXJuIHRyZWUgZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrCQkodHJlZSk7CitleHRlcm4gdm9pZCBleHBhbmRfZW5kX2NhdGNoX2Jsb2NrCQkodm9pZCk7CitleHRlcm4gdHJlZSBidWlsZF9leGNfcHRyCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgYnVpbGRfdGhyb3cJCQkJKHRyZWUpOworZXh0ZXJuIGludCBub3Rocm93X2xpYmZuX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdm9pZCBjaGVja19oYW5kbGVycwkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9ub2V4Y2VwdF9leHByCQkodHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIGJvb2wgZXhwcl9ub2V4Y2VwdF9wCQkJKHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB2b2lkIHBlcmZvcm1fZGVmZXJyZWRfbm9leGNlcHRfY2hlY2tzCSh2b2lkKTsKK2V4dGVybiBib29sIG5vdGhyb3dfc3BlY19wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9ub2V4Y2VwdF9wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV90aHJvd19hbGxfcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX25vZXhjZXB0X3NwZWMJCQkodHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIGNob29zZV9wZXJzb25hbGl0eV9yb3V0aW5lCQkoZW51bSBsYW5ndWFnZXMpOworZXh0ZXJuIHRyZWUgYnVpbGRfbXVzdF9ub3RfdGhyb3dfZXhwcgkJKHRyZWUsdHJlZSk7CitleHRlcm4gdHJlZSBlaF90eXBlX2luZm8JCQkodHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9laF9zcGVjX2Jsb2NrCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgZmluaXNoX2VoX3NwZWNfYmxvY2sJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2VoX3R5cGVfdHlwZQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNwX3Byb3RlY3RfY2xlYW51cF9hY3Rpb25zCQkodm9pZCk7CisKKy8qIGluIGV4cHIuYyAqLworZXh0ZXJuIHRyZWUgY3BsdXNfZXhwYW5kX2NvbnN0YW50CQkodHJlZSk7CitleHRlcm4gdHJlZSBtYXJrX3J2YWx1ZV91c2UJCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYXJrX2x2YWx1ZV91c2UJCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYXJrX3R5cGVfdXNlCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgbWFya19leHBfcmVhZAkJCSh0cmVlKTsKKworLyogZnJpZW5kLmMgKi8KK2V4dGVybiBpbnQgaXNfZnJpZW5kCQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIG1ha2VfZnJpZW5kX2NsYXNzCQkJKHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgYWRkX2ZyaWVuZAkJCQkodHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBkb19mcmllbmQJCQkJKHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsIGVudW0gb3ZlcmxvYWRfZmxhZ3MsIGJvb2wpOworCisvKiBpbiBpbml0LmMgKi8KK2V4dGVybiB0cmVlIGV4cGFuZF9tZW1iZXJfaW5pdAkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGVtaXRfbWVtX2luaXRpYWxpemVycwkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfYWdncl9pbml0CQkJKHRyZWUsIHRyZWUsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gaW50IGlzX2NsYXNzX3R5cGUJCQkodHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGdldF90eXBlX3ZhbHVlCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfemVyb19pbml0CQkJKHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgYnVpbGRfdmFsdWVfaW5pdAkJCSh0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF92YWx1ZV9pbml0X25vY3RvcgkJKHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX29mZnNldF9yZWYJCQkodHJlZSwgdHJlZSwgYm9vbCwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9uZXcJCQkJKHZlYzx0cmVlLCB2YV9nYz4gKiosIHRyZWUsIHRyZWUsCisJCQkJCQkgdmVjPHRyZWUsIHZhX2djPiAqKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGdldF90ZW1wX3JlZ3ZhcgkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3ZlY19pbml0CQkJKHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9kZWxldGUJCQkodHJlZSwgdHJlZSwKKwkJCQkJCSBzcGVjaWFsX2Z1bmN0aW9uX2tpbmQsCisJCQkJCQkgaW50LCBpbnQsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB2b2lkIHB1c2hfYmFzZV9jbGVhbnVwcwkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3ZlY19kZWxldGUJCQkodHJlZSwgdHJlZSwKKwkJCQkJCSBzcGVjaWFsX2Z1bmN0aW9uX2tpbmQsIGludCwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBjcmVhdGVfdGVtcG9yYXJ5X3ZhcgkJKHRyZWUpOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV92dGJsX3B0cnMJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2phdmFfY2xhc3NfcmVmCQkodHJlZSk7CitleHRlcm4gdHJlZSBpbnRlZ3JhbF9jb25zdGFudF92YWx1ZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZGVjbF9jb25zdGFudF92YWx1ZV9zYWZlCSAgICAgICAgKHRyZWUpOworZXh0ZXJuIGludCBkaWFnbm9zZV91bmluaXRpYWxpemVkX2NzdF9vcl9yZWZfbWVtYmVyICh0cmVlLCBib29sLCBib29sKTsKKworLyogaW4gbGV4LmMgKi8KK2V4dGVybiB2b2lkIGN4eF9kdXBfbGFuZ19zcGVjaWZpY19kZWNsCQkodHJlZSk7CitleHRlcm4gdm9pZCB5eXVuZ2V0YwkJCQkoaW50LCBpbnQpOworCitleHRlcm4gdHJlZSB1bnF1YWxpZmllZF9uYW1lX2xvb2t1cF9lcnJvcgkodHJlZSk7CitleHRlcm4gdHJlZSB1bnF1YWxpZmllZF9mbl9sb29rdXBfZXJyb3IJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2xhbmdfZGVjbAkJCShlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9sYW5nX2RlY2xfbG9jCQkJKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHJldHJvZml0X2xhbmdfZGVjbAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNvcHlfZGVjbAkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBjb3B5X3R5cGUJCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY3h4X21ha2VfdHlwZQkJCShlbnVtIHRyZWVfY29kZSk7CitleHRlcm4gdHJlZSBtYWtlX2NsYXNzX3R5cGUJCQkoZW51bSB0cmVlX2NvZGUpOworZXh0ZXJuIGJvb2wgY3h4X2luaXQJCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgY3h4X2ZpbmlzaAkJCQkodm9pZCk7CitleHRlcm4gYm9vbCBpbl9tYWluX2lucHV0X2NvbnRleHQJCSh2b2lkKTsKKworLyogaW4gbWV0aG9kLmMgKi8KK2V4dGVybiB2b2lkIGluaXRfbWV0aG9kCQkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIG1ha2VfdGh1bmsJCQkJKHRyZWUsIGJvb2wsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX3RodW5rCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgdXNlX3RodW5rCQkJCSh0cmVlLCBib29sKTsKK2V4dGVybiBib29sIHRyaXZpYWxfZm5fcAkJCSh0cmVlKTsKK2V4dGVybiBib29sIG1heWJlX2V4cGxhaW5faW1wbGljaXRfZGVsZXRlCSh0cmVlKTsKK2V4dGVybiB2b2lkIGV4cGxhaW5faW1wbGljaXRfbm9uX2NvbnN0ZXhwcgkodHJlZSk7CitleHRlcm4gdm9pZCBkZWR1Y2VfaW5oZXJpdGluZ19jdG9yCQkodHJlZSk7CitleHRlcm4gdm9pZCBzeW50aGVzaXplX21ldGhvZAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGxhemlseV9kZWNsYXJlX2ZuCQkJKHNwZWNpYWxfZnVuY3Rpb25fa2luZCwKKwkJCQkJCSB0cmVlKTsKK2V4dGVybiB0cmVlIHNraXBfYXJ0aWZpY2lhbF9wYXJtc19mb3IJCShjb25zdF90cmVlLCB0cmVlKTsKK2V4dGVybiBpbnQgbnVtX2FydGlmaWNpYWxfcGFybXNfZm9yCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBtYWtlX2FsaWFzX2ZvcgkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGdldF9jb3B5X2N0b3IJCQkodHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgZ2V0X2NvcHlfYXNzaWduCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X2RlZmF1bHRfY3RvcgkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdldF9kdG9yCQkJCSh0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBsb2NhdGVfY3RvcgkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBpbXBsaWNpdGx5X2RlY2xhcmVfZm4gICAgICAgICAgICAgICAoc3BlY2lhbF9mdW5jdGlvbl9raW5kLCB0cmVlLAorCQkJCQkJIGJvb2wsIHRyZWUsIHRyZWUpOworCisvKiBJbiBvcHRpbWl6ZS5jICovCitleHRlcm4gYm9vbCBtYXliZV9jbG9uZV9ib2R5CQkJKHRyZWUpOworCisvKiBpbiBwdC5jICovCitleHRlcm4gYm9vbCBjaGVja190ZW1wbGF0ZV9zaGFkb3cJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdldF9pbm5lcm1vc3RfdGVtcGxhdGVfYXJncwkJKHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBtYXliZV9iZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyAodHJlZSk7CitleHRlcm4gdm9pZCBtYXliZV9lbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcgKHZvaWQpOworZXh0ZXJuIHRyZWUgZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsCQkodHJlZSk7CitleHRlcm4gdm9pZCBiZWdpbl90ZW1wbGF0ZV9wYXJtX2xpc3QJCSh2b2lkKTsKK2V4dGVybiBib29sIGJlZ2luX3NwZWNpYWxpemF0aW9uCQkodm9pZCk7CitleHRlcm4gdm9pZCByZXNldF9zcGVjaWFsaXphdGlvbgkJKHZvaWQpOworZXh0ZXJuIHZvaWQgZW5kX3NwZWNpYWxpemF0aW9uCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgYmVnaW5fZXhwbGljaXRfaW5zdGFudGlhdGlvbgkodm9pZCk7CitleHRlcm4gdm9pZCBlbmRfZXhwbGljaXRfaW5zdGFudGlhdGlvbgkJKHZvaWQpOworZXh0ZXJuIHRyZWUgY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24JKHRyZWUsIHRyZWUsIGludCwgaW50KTsKK2V4dGVybiBpbnQgbnVtX3RlbXBsYXRlX2hlYWRlcnNfZm9yX2NsYXNzCSh0cmVlKTsKK2V4dGVybiB2b2lkIGNoZWNrX3RlbXBsYXRlX3ZhcmlhYmxlCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYWtlX2F1dG8JCQkJKHZvaWQpOworZXh0ZXJuIHRyZWUgZG9fYXV0b19kZWR1Y3Rpb24JCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSB0eXBlX3VzZXNfYXV0bwkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGFwcGVuZF90eXBlX3RvX3RlbXBsYXRlX2Zvcl9hY2Nlc3NfY2hlY2sgKHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCQkgICAgICBsb2NhdGlvbl90KTsKK2V4dGVybiB0cmVlIHNwbGljZV9sYXRlX3JldHVybl90eXBlCQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBpc19hdXRvCQkJCShjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIHByb2Nlc3NfdGVtcGxhdGVfcGFybQkJKHRyZWUsIGxvY2F0aW9uX3QsIHRyZWUsIAorCQkJCQkJIGJvb2wsIGJvb2wpOworZXh0ZXJuIHRyZWUgZW5kX3RlbXBsYXRlX3Bhcm1fbGlzdAkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZW5kX3RlbXBsYXRlX2RlY2wJCQkodm9pZCk7CitleHRlcm4gdHJlZSBtYXliZV91cGRhdGVfZGVjbF90eXBlCQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBjaGVja19kZWZhdWx0X3RtcGxfYXJncyAgICAgICAgICAgICAodHJlZSwgdHJlZSwgYm9vbCwgYm9vbCwgaW50KTsKK2V4dGVybiB0cmVlIHB1c2hfdGVtcGxhdGVfZGVjbAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsCQkodHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBhZGRfaW5oZXJpdGVkX3RlbXBsYXRlX3Bhcm1zCSh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIHJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX3RlbXBsYXRlX2NsYXNzCQkodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwKKwkJCQkJCSBpbnQsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGxvb2t1cF90ZW1wbGF0ZV9mdW5jdGlvbgkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCB1c2VzX3RlbXBsYXRlX3Bhcm1zCQkJKHRyZWUpOworZXh0ZXJuIGludCB1c2VzX3RlbXBsYXRlX3Bhcm1zX2xldmVsCQkodHJlZSwgaW50KTsKK2V4dGVybiBib29sIGluX3RlbXBsYXRlX2Z1bmN0aW9uCQkodm9pZCk7CitleHRlcm4gdHJlZSBpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgaW5zdGFudGlhdGVfdGVtcGxhdGUJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBmbl90eXBlX3VuaWZpY2F0aW9uCQkJKHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCQkgY29uc3QgdHJlZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkJCQkgdHJlZSwgdW5pZmljYXRpb25fa2luZF90LCBpbnQsCisJCQkJCQkgYm9vbCk7CitleHRlcm4gdm9pZCBtYXJrX2RlY2xfaW5zdGFudGlhdGVkCQkodHJlZSwgaW50KTsKK2V4dGVybiBpbnQgbW9yZV9zcGVjaWFsaXplZF9mbgkJCSh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgZG9fZGVjbF9pbnN0YW50aWF0aW9uCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBkb190eXBlX2luc3RhbnRpYXRpb24JCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gYm9vbCBhbHdheXNfaW5zdGFudGlhdGVfcAkJKHRyZWUpOworZXh0ZXJuIHZvaWQgbWF5YmVfaW5zdGFudGlhdGVfbm9leGNlcHQJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGluc3RhbnRpYXRlX2RlY2wJCQkodHJlZSwgaW50LCBib29sKTsKK2V4dGVybiBpbnQgY29tcF90ZW1wbGF0ZV9wYXJtcwkJCShjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiBib29sIHVzZXNfcGFyYW1ldGVyX3BhY2tzICAgICAgICAgICAgICAgICh0cmVlKTsKK2V4dGVybiBib29sIHRlbXBsYXRlX3BhcmFtZXRlcl9wYWNrX3AgICAgICAgICAgIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGZ1bmN0aW9uX3BhcmFtZXRlcl9wYWNrX3AJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGZ1bmN0aW9uX3BhcmFtZXRlcl9leHBhbmRlZF9mcm9tX3BhY2tfcCAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBtYWtlX3BhY2tfZXhwYW5zaW9uICAgICAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gYm9vbCBjaGVja19mb3JfYmFyZV9wYXJhbWV0ZXJfcGFja3MgICAgICAodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF90ZW1wbGF0ZV9pbmZvCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3RlbXBsYXRlX2luZm8JCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdmVjPHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QsIHZhX2djPiAqZ2V0X3R5cGVzX25lZWRpbmdfYWNjZXNzX2NoZWNrICh0cmVlKTsKK2V4dGVybiBpbnQgdGVtcGxhdGVfY2xhc3NfZGVwdGgJCQkodHJlZSk7CitleHRlcm4gaW50IGlzX3NwZWNpYWxpemF0aW9uX29mCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfc3BlY2lhbGl6YXRpb25fb2ZfZnJpZW5kCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnZXRfcGF0dGVybl9wYXJtCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBjb21wX3RlbXBsYXRlX2FyZ3MJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBtYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24gKHRyZWUpOworZXh0ZXJuIHRyZWUgbW9zdF9zcGVjaWFsaXplZF9pbnN0YW50aWF0aW9uCSh0cmVlKTsKK2V4dGVybiB2b2lkIHByaW50X2NhbmRpZGF0ZXMJCQkodHJlZSk7CitleHRlcm4gdm9pZCBpbnN0YW50aWF0ZV9wZW5kaW5nX3RlbXBsYXRlcwkoaW50KTsKK2V4dGVybiB0cmVlIHRzdWJzdF9kZWZhdWx0X2FyZ3VtZW50CQkodHJlZSwgdHJlZSwgdHJlZSwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSB0c3Vic3QgKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190LCB0cmVlKTsKK2V4dGVybiB0cmVlIHRzdWJzdF9jb3B5X2FuZF9idWlsZAkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190LAorCQkJCQkJIHRyZWUsIGJvb2wsIGJvb2wpOworZXh0ZXJuIHRyZWUgbW9zdF9nZW5lcmFsX3RlbXBsYXRlCQkodHJlZSk7CitleHRlcm4gdHJlZSBnZXRfbW9zdGx5X2luc3RhbnRpYXRlZF9mdW5jdGlvbl90eXBlICh0cmVlKTsKK2V4dGVybiBpbnQgcHJvYmxlbWF0aWNfaW5zdGFudGlhdGlvbl9jaGFuZ2VkCSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlY29yZF9sYXN0X3Byb2JsZW1hdGljX2luc3RhbnRpYXRpb24gKHZvaWQpOworZXh0ZXJuIHN0cnVjdCB0aW5zdF9sZXZlbCAqY3VycmVudF9pbnN0YW50aWF0aW9uKHZvaWQpOworZXh0ZXJuIHRyZWUgbWF5YmVfZ2V0X3RlbXBsYXRlX2RlY2xfZnJvbV90eXBlX2RlY2wgKHRyZWUpOworZXh0ZXJuIGludCBwcm9jZXNzaW5nX3RlbXBsYXRlX3Bhcm1saXN0OworZXh0ZXJuIGJvb2wgZGVwZW5kZW50X3R5cGVfcAkJCSh0cmVlKTsKK2V4dGVybiBib29sIGRlcGVuZGVudF9zY29wZV9wCQkJKHRyZWUpOworZXh0ZXJuIGJvb2wgYW55X2RlcGVuZGVudF90ZW1wbGF0ZV9hcmd1bWVudHNfcCAgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgZGVwZW5kZW50X3RlbXBsYXRlX3AJCSh0cmVlKTsKK2V4dGVybiBib29sIGRlcGVuZGVudF90ZW1wbGF0ZV9pZF9wCQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCB0eXBlX2RlcGVuZGVudF9leHByZXNzaW9uX3AJCSh0cmVlKTsKK2V4dGVybiBib29sIGFueV90eXBlX2RlcGVuZGVudF9hcmd1bWVudHNfcCAgICAgIChjb25zdCB2ZWM8dHJlZSwgdmFfZ2M+ICopOworZXh0ZXJuIGJvb2wgYW55X3R5cGVfZGVwZW5kZW50X2VsZW1lbnRzX3AgICAgICAgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9kZXBlbmRlbnRfZXhwcmVzc2lvbl9wX3B1c2gJKHRyZWUpOworZXh0ZXJuIGJvb2wgdmFsdWVfZGVwZW5kZW50X2V4cHJlc3Npb25fcAkodHJlZSk7CitleHRlcm4gYm9vbCBpbnN0YW50aWF0aW9uX2RlcGVuZGVudF9leHByZXNzaW9uX3AgKHRyZWUpOworZXh0ZXJuIGJvb2wgYW55X3ZhbHVlX2RlcGVuZGVudF9lbGVtZW50c19wICAgICAgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgZGVwZW5kZW50X29tcF9mb3JfcAkJCSh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIHJlc29sdmVfdHlwZW5hbWVfdHlwZQkJKHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgdGVtcGxhdGVfZm9yX3N1YnN0aXR1dGlvbgkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfbm9uX2RlcGVuZGVudF9leHByCQkodHJlZSk7CitleHRlcm4gdm9pZCBtYWtlX2FyZ3Nfbm9uX2RlcGVuZGVudAkJKHZlYzx0cmVlLCB2YV9nYz4gKik7CitleHRlcm4gYm9vbCByZXJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX25vbl9kZXBlbmRlbnRfZXhwcgkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9ub25fZGVwZW5kZW50X2V4cHJfc2ZpbmFlCSh0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gYm9vbCBhbGlhc190eXBlX29yX3RlbXBsYXRlX3AgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gYm9vbCBhbGlhc190ZW1wbGF0ZV9zcGVjaWFsaXphdGlvbl9wICAgICAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBleHBsaWNpdF9jbGFzc19zcGVjaWFsaXphdGlvbl9wICAgICAodHJlZSk7CitleHRlcm4gaW50IHB1c2hfdGluc3RfbGV2ZWwgICAgICAgICAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gdm9pZCBwb3BfdGluc3RfbGV2ZWwgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CitleHRlcm4gc3RydWN0IHRpbnN0X2xldmVsICpvdXRlcm1vc3RfdGluc3RfbGV2ZWwodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X3RlbXBsYXRlX3Byb2Nlc3NpbmcJCSh2b2lkKTsKK2V4dGVybiB2b2lkIHByaW50X3RlbXBsYXRlX3N0YXRpc3RpY3MJCSh2b2lkKTsKK2Jvb2wgdGVtcGxhdGVfdGVtcGxhdGVfcGFyYW1ldGVyX3AJCShjb25zdF90cmVlKTsKK2Jvb2wgdGVtcGxhdGVfdHlwZV9wYXJhbWV0ZXJfcCAgICAgICAgICAgICAgICAgIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIHByaW1hcnlfdGVtcGxhdGVfaW5zdGFudGlhdGlvbl9wICAgIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGdldF9wcmltYXJ5X3RlbXBsYXRlX2lubmVybW9zdF9wYXJhbWV0ZXJzCShjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGdldF90ZW1wbGF0ZV9wYXJtc19hdF9sZXZlbCAodHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIGdldF90ZW1wbGF0ZV9pbm5lcm1vc3RfYXJndW1lbnRzCShjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGdldF90ZW1wbGF0ZV9hcmd1bWVudF9wYWNrX2VsZW1zCShjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGdldF9mdW5jdGlvbl90ZW1wbGF0ZV9kZWNsCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSByZXNvbHZlX25vbmRlZHVjZWRfY29udGV4dAkJKHRyZWUpOworZXh0ZXJuIGhhc2h2YWxfdCBpdGVyYXRpdmVfaGFzaF90ZW1wbGF0ZV9hcmcgKHRyZWUgYXJnLCBoYXNodmFsX3QgdmFsKTsKKworLyogaW4gcmVwby5jICovCitleHRlcm4gdm9pZCBpbml0X3JlcG8JCQkJKHZvaWQpOworZXh0ZXJuIGludCByZXBvX2VtaXRfcAkJCQkodHJlZSk7CitleHRlcm4gYm9vbCByZXBvX2V4cG9ydF9jbGFzc19wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX3JlcG8JCQkJKHZvaWQpOworCisvKiBpbiBydHRpLmMgKi8KKy8qIEEgdmVjdG9yIG9mIGFsbCB0aW5mbyBkZWNscyB0aGF0IGhhdmVuJ3QgYmVlbiBlbWl0dGVkIHlldC4gICovCitleHRlcm4gR1RZKCgpKSB2ZWM8dHJlZSwgdmFfZ2M+ICp1bmVtaXR0ZWRfdGluZm9fZGVjbHM7CisKK2V4dGVybiB2b2lkIGluaXRfcnR0aV9wcm9jZXNzaW5nCQkodm9pZCk7CitleHRlcm4gdHJlZSBidWlsZF90eXBlaWQJCQkodHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgZ2V0X3RpbmZvX2RlY2wJCQkodHJlZSk7CitleHRlcm4gdHJlZSBnZXRfdHlwZWlkCQkJCSh0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9oZWFkb2YJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9keW5hbWljX2Nhc3QJCQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHZvaWQgZW1pdF9zdXBwb3J0X3RpbmZvcwkJCSh2b2lkKTsKK2V4dGVybiBib29sIGVtaXRfdGluZm9fZGVjbAkJCSh0cmVlKTsKKworLyogaW4gc2VhcmNoLmMgKi8KK2V4dGVybiBib29sIGFjY2Vzc2libGVfYmFzZV9wCQkJKHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgbG9va3VwX2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICAgKHRyZWUsIHRyZWUsIGJhc2VfYWNjZXNzLAorCQkJCQkJIGJhc2Vfa2luZCAqLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBkY2FzdF9iYXNlX2hpbnQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IGFjY2Vzc2libGVfcAkJCQkodHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gaW50IGFjY2Vzc2libGVfaW5fdGVtcGxhdGVfcAkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX2ZpZWxkXzEJCQkodHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBsb29rdXBfZmllbGQJCQkodHJlZSwgdHJlZSwgaW50LCBib29sKTsKK2V4dGVybiBpbnQgbG9va3VwX2ZuZmllbGRzXzEJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBsb29rdXBfZm5maWVsZHNfc2xvdAkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va3VwX2ZuZmllbGRzX3Nsb3Rfbm9sYXp5CQkodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IGNsYXNzX21ldGhvZF9pbmRleF9mb3JfZm4JCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9mbmZpZWxkcwkJCSh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgbG9va3VwX21lbWJlcgkJCSh0cmVlLCB0cmVlLCBpbnQsIGJvb2wsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIGludCBsb29rX2Zvcl9vdmVycmlkZXMJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBnZXRfcHVyZV92aXJ0dWFscwkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIG1heWJlX3N1cHByZXNzX2RlYnVnX2luZm8JCSh0cmVlKTsKK2V4dGVybiB2b2lkIG5vdGVfZGVidWdfaW5mb19uZWVkZWQJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHByaW50X3NlYXJjaF9zdGF0aXN0aWNzCQkodm9pZCk7CitleHRlcm4gdm9pZCByZWluaXRfc2VhcmNoX3N0YXRpc3RpY3MJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGN1cnJlbnRfc2NvcGUJCQkodm9pZCk7CitleHRlcm4gaW50IGF0X2Z1bmN0aW9uX3Njb3BlX3AJCQkodm9pZCk7CitleHRlcm4gYm9vbCBhdF9jbGFzc19zY29wZV9wCQkJKHZvaWQpOworZXh0ZXJuIGJvb2wgYXRfbmFtZXNwYWNlX3Njb3BlX3AJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGNvbnRleHRfZm9yX25hbWVfbG9va3VwCQkodHJlZSk7CitleHRlcm4gdHJlZSBsb29rdXBfY29udmVyc2lvbnMJCQkodHJlZSk7CitleHRlcm4gdHJlZSBiaW5mb19mcm9tX3ZiYXNlCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmluZm9fZm9yX3ZiYXNlCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG9va19mb3Jfb3ZlcnJpZGVzX2hlcmUJCSh0cmVlLCB0cmVlKTsKKyNkZWZpbmUgZGZzX3NraXBfYmFzZXMgKCh0cmVlKTEpCitleHRlcm4gdHJlZSBkZnNfd2Fsa19hbGwgKHRyZWUsIHRyZWUgKCopICh0cmVlLCB2b2lkICopLAorCQkJICB0cmVlICgqKSAodHJlZSwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiB0cmVlIGRmc193YWxrX29uY2UgKHRyZWUsIHRyZWUgKCopICh0cmVlLCB2b2lkICopLAorCQkJICAgdHJlZSAoKikgKHRyZWUsIHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gdHJlZSBiaW5mb192aWFfdmlydHVhbAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2Jhc2VsaW5rCQkJKHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYWRqdXN0X3Jlc3VsdF9vZl9xdWFsaWZpZWRfbmFtZV9sb29rdXAKKwkJCQkJCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNvcGllZF9iaW5mbwkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG9yaWdpbmFsX2JpbmZvCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBzaGFyZWRfbWVtYmVyX3AJCQkodHJlZSk7CisKKworLyogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgZGVmZXJyZWQgYWNjZXNzIGNoZWNrLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBkZWZlcnJlZF9hY2Nlc3NfY2hlY2sgeworICAvKiBUaGUgYmFzZSBjbGFzcyBpbiB3aGljaCB0aGUgZGVjbGFyYXRpb24gaXMgcmVmZXJlbmNlZC4gKi8KKyAgdHJlZSBiaW5mbzsKKyAgLyogVGhlIGRlY2xhcmF0aW9uIHdob3NlIGFjY2VzcyBtdXN0IGJlIGNoZWNrZWQuICAqLworICB0cmVlIGRlY2w7CisgIC8qIFRoZSBkZWNsYXJhdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkIGluIHRoZSBlcnJvciBtZXNzYWdlLiAgKi8KKyAgdHJlZSBkaWFnX2RlY2w7CisgIC8qIFRoZSBsb2NhdGlvbiBvZiB0aGlzIGFjY2Vzcy4gICovCisgIGxvY2F0aW9uX3QgbG9jOworfSBkZWZlcnJlZF9hY2Nlc3NfY2hlY2s7CisKKy8qIGluIHNlbWFudGljcy5jICovCitleHRlcm4gdm9pZCBwdXNoX2RlZmVycmluZ19hY2Nlc3NfY2hlY2tzCShkZWZlcnJpbmdfa2luZCk7CitleHRlcm4gdm9pZCByZXN1bWVfZGVmZXJyaW5nX2FjY2Vzc19jaGVja3MJKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RvcF9kZWZlcnJpbmdfYWNjZXNzX2NoZWNrcwkodm9pZCk7CitleHRlcm4gdm9pZCBwb3BfZGVmZXJyaW5nX2FjY2Vzc19jaGVja3MJCSh2b2lkKTsKK2V4dGVybiB2ZWM8ZGVmZXJyZWRfYWNjZXNzX2NoZWNrLCB2YV9nYz4gKmdldF9kZWZlcnJlZF9hY2Nlc3NfY2hlY2tzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlb3Blbl9kZWZlcnJpbmdfYWNjZXNzX2NoZWNrcyAodmVjPGRlZmVycmVkX2FjY2Vzc19jaGVjaywgdmFfZ2M+ICopOworZXh0ZXJuIHZvaWQgcG9wX3RvX3BhcmVudF9kZWZlcnJpbmdfYWNjZXNzX2NoZWNrcyAodm9pZCk7CitleHRlcm4gYm9vbCBwZXJmb3JtX2FjY2Vzc19jaGVja3MgKHZlYzxkZWZlcnJlZF9hY2Nlc3NfY2hlY2ssIHZhX2djPiAqLAorCQkJCSAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBib29sIHBlcmZvcm1fZGVmZXJyZWRfYWNjZXNzX2NoZWNrcwkodHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIGJvb2wgcGVyZm9ybV9vcl9kZWZlcl9hY2Nlc3NfY2hlY2sJKHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIGludCBzdG10c19hcmVfZnVsbF9leHByc19wCQkodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2NwX3NlbWFudGljcwkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGRvX3BvcGxldmVsCQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGFkZF9kZWNsX2V4cHIJCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYXliZV9jbGVhbnVwX3BvaW50X2V4cHJfdm9pZAkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfZXhwcl9zdG10CQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5faWZfc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9pZl9zdG10X2NvbmQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfdGhlbl9jbGF1c2UJCQkodHJlZSk7CitleHRlcm4gdm9pZCBiZWdpbl9lbHNlX2NsYXVzZQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9lbHNlX2NsYXVzZQkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9pZl9zdG10CQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5fd2hpbGVfc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF93aGlsZV9zdG10X2NvbmQJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF93aGlsZV9zdG10CQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5fZG9fc3RtdAkJCSh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9kb19ib2R5CQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2RvX3N0bXQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfcmV0dXJuX3N0bXQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9mb3Jfc2NvcGUJCQkodHJlZSAqKTsKK2V4dGVybiB0cmVlIGJlZ2luX2Zvcl9zdG10CQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2Zvcl9pbml0X3N0bXQJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9mb3JfY29uZAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9mb3JfZXhwcgkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9mb3Jfc3RtdAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX3JhbmdlX2Zvcl9zdG10CQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfcmFuZ2VfZm9yX2RlY2wJCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9yYW5nZV9mb3Jfc3RtdAkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX2JyZWFrX3N0bXQJCQkodm9pZCk7CitleHRlcm4gdHJlZSBmaW5pc2hfY29udGludWVfc3RtdAkJKHZvaWQpOworZXh0ZXJuIHRyZWUgYmVnaW5fc3dpdGNoX3N0bXQJCQkodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfc3dpdGNoX2NvbmQJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfc3dpdGNoX3N0bXQJCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfZ290b19zdG10CQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYmVnaW5fdHJ5X2Jsb2NrCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgZmluaXNoX3RyeV9ibG9jawkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9oYW5kbGVyX3NlcXVlbmNlCQkodHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9mdW5jdGlvbl90cnlfYmxvY2sJCSh0cmVlICopOworZXh0ZXJuIHZvaWQgZmluaXNoX2Z1bmN0aW9uX3RyeV9ibG9jawkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2Z1bmN0aW9uX2hhbmRsZXJfc2VxdWVuY2UgICAgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2NsZWFudXBfdHJ5X2Jsb2NrCQkodHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9oYW5kbGVyCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgZmluaXNoX2hhbmRsZXJfcGFybXMJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9oYW5kbGVyCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2NsZWFudXAJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBsaXRlcmFsX3R5cGVfcCAodHJlZSk7CitleHRlcm4gdHJlZSByZWdpc3Rlcl9jb25zdGV4cHJfZnVuZGVmICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIGNoZWNrX2NvbnN0ZXhwcl9jdG9yX2JvZHkgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZW5zdXJlX2xpdGVyYWxfdHlwZV9mb3JfY29uc3RleHByX29iamVjdCAodHJlZSk7CitleHRlcm4gYm9vbCBwb3RlbnRpYWxfY29uc3RhbnRfZXhwcmVzc2lvbiAodHJlZSk7CitleHRlcm4gYm9vbCBwb3RlbnRpYWxfcnZhbHVlX2NvbnN0YW50X2V4cHJlc3Npb24gKHRyZWUpOworZXh0ZXJuIGJvb2wgcmVxdWlyZV9wb3RlbnRpYWxfY29uc3RhbnRfZXhwcmVzc2lvbiAodHJlZSk7CitleHRlcm4gYm9vbCByZXF1aXJlX3BvdGVudGlhbF9ydmFsdWVfY29uc3RhbnRfZXhwcmVzc2lvbiAodHJlZSk7CitleHRlcm4gdHJlZSBjeHhfY29uc3RhbnRfdmFsdWUgKHRyZWUpOworZXh0ZXJuIHRyZWUgbWF5YmVfY29uc3RhbnRfdmFsdWUgKHRyZWUpOworZXh0ZXJuIHRyZWUgbWF5YmVfY29uc3RhbnRfaW5pdCAodHJlZSk7CitleHRlcm4gYm9vbCBpc19zdWJfY29uc3RhbnRfZXhwciAodHJlZSk7CitleHRlcm4gYm9vbCByZWR1Y2VkX2NvbnN0YW50X2V4cHJlc3Npb25fcCAodHJlZSk7CitleHRlcm4gdm9pZCBleHBsYWluX2ludmFsaWRfY29uc3RleHByX2ZuICh0cmVlKTsKK2V4dGVybiB2ZWM8dHJlZT4gY3hfZXJyb3JfY29udGV4dCAodm9pZCk7CisKK2VudW0geworICBCQ1NfTk9fU0NPUEUgPSAxLAorICBCQ1NfVFJZX0JMT0NLID0gMiwKKyAgQkNTX0ZOX0JPRFkgPSA0Cit9OworZXh0ZXJuIHRyZWUgYmVnaW5fY29tcG91bmRfc3RtdAkJCSh1bnNpZ25lZCBpbnQpOworCitleHRlcm4gdm9pZCBmaW5pc2hfY29tcG91bmRfc3RtdAkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX2FzbV9zdG10CQkJKGludCwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwKKwkJCQkJCSB0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9sYWJlbF9zdG10CQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2xhYmVsX2RlY2wJCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfcGFyZW50aGVzaXplZF9leHByCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfbm9uX3N0YXRpY19kYXRhX21lbWJlciAgICAgICAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9zdG10X2V4cHIJCQkodm9pZCk7CitleHRlcm4gdHJlZSBmaW5pc2hfc3RtdF9leHByX2V4cHIJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9zdG10X2V4cHIJCQkodHJlZSwgYm9vbCk7CitleHRlcm4gdHJlZSBzdG10X2V4cHJfdmFsdWVfZXhwcgkJKHRyZWUpOworYm9vbCBlbXB0eV9leHByX3N0bXRfcAkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBwZXJmb3JtX2tvZW5pZ19sb29rdXAJCSh0cmVlLCB2ZWM8dHJlZSwgdmFfZ2M+ICosIGJvb2wsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgZmluaXNoX2NhbGxfZXhwcgkJCSh0cmVlLCB2ZWM8dHJlZSwgdmFfZ2M+ICoqLCBib29sLAorCQkJCQkJIGJvb2wsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGZpbmlzaF9pbmNyZW1lbnRfZXhwcgkJKHRyZWUsIGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF90aGlzX2V4cHIJCQkodm9pZCk7CitleHRlcm4gdHJlZSBmaW5pc2hfcHNldWRvX2Rlc3RydWN0b3JfZXhwciAgICAgICAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfdW5hcnlfb3BfZXhwcgkJKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGZpbmlzaF9jb21wb3VuZF9saXRlcmFsCQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgZmluaXNoX2ZuYW1lCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX3RyYW5zbGF0aW9uX3VuaXQJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF90ZW1wbGF0ZV90eXBlX3Bhcm0JCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF90ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtICAgICAgICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX2NsYXNzX2RlZmluaXRpb24JCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF90ZW1wbGF0ZV9kZWNsCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfdGVtcGxhdGVfdHlwZQkJKHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBmaW5pc2hfYmFzZV9zcGVjaWZpZXIJCSh0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9tZW1iZXJfZGVjbGFyYXRpb24JCSh0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9pZF9leHByZXNzaW9uCQkodHJlZSwgdHJlZSwgdHJlZSwKKwkJCQkJCSBjcF9pZF9raW5kICosCisJCQkJCQkgYm9vbCwgYm9vbCwgYm9vbCAqLAorCQkJCQkJIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wsCisJCQkJCQkgY29uc3QgY2hhciAqKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl90KTsKK2V4dGVybiB0cmVlIGZpbmlzaF90eXBlb2YJCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfdW5kZXJseWluZ190eXBlCSAgICAgICAgKHRyZWUpOworZXh0ZXJuIHRyZWUgY2FsY3VsYXRlX2Jhc2VzICAgICAgICAgICAgICAgICAgICAgKHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX2Jhc2VzICAgICAgICAgICAgICAgICAgICAgICAgKHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgY2FsY3VsYXRlX2RpcmVjdF9iYXNlcyAgICAgICAgICAgICAgKHRyZWUpOworZXh0ZXJuIHRyZWUgZmluaXNoX29mZnNldG9mCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX2RlY2xfY2xlYW51cAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9laF9jbGVhbnVwCQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZW1pdF9hc3NvY2lhdGVkX3RodW5rcwkJKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX21lbV9pbml0aWFsaXplcnMJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNoZWNrX3RlbXBsYXRlX3RlbXBsYXRlX2RlZmF1bHRfYXJnICh0cmVlKTsKK2V4dGVybiBib29sIGV4cGFuZF9vcl9kZWZlcl9mbl8xCQkodHJlZSk7CitleHRlcm4gdm9pZCBleHBhbmRfb3JfZGVmZXJfZm4JCQkodHJlZSk7CitleHRlcm4gdm9pZCBhZGRfdHlwZWRlZl90b19jdXJyZW50X3RlbXBsYXRlX2Zvcl9hY2Nlc3NfY2hlY2sgKHRyZWUsIHRyZWUsCisJCQkJCQkJICAgICAgbG9jYXRpb25fdCk7CitleHRlcm4gdm9pZCBjaGVja19hY2Nlc3NpYmlsaXR5X29mX3F1YWxpZmllZF9pZCAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfcXVhbGlmaWVkX2lkX2V4cHIJCSh0cmVlLCB0cmVlLCBib29sLCBib29sLAorCQkJCQkJIGJvb2wsIGJvb2wsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB2b2lkIHNpbXBsaWZ5X2FnZ3JfaW5pdF9leHByCQkodHJlZSAqKTsKK2V4dGVybiB2b2lkIGZpbmFsaXplX25ydgkJCSh0cmVlICosIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgbm90ZV9kZWNsX2Zvcl9wY2gJCQkodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfb21wX2NsYXVzZXMJCQkodHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfb21wX3RocmVhZHByaXZhdGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrCQkodm9pZCk7CitleHRlcm4gdHJlZSBmaW5pc2hfb21wX3N0cnVjdHVyZWRfYmxvY2sJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGJlZ2luX29tcF9wYXJhbGxlbAkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9vbXBfcGFyYWxsZWwJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9vbXBfdGFzawkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9vbXBfdGFzawkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9vbXBfZm9yCQkJKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfb21wX2F0b21pYwkJCShlbnVtIHRyZWVfY29kZSwgZW51bSB0cmVlX2NvZGUsCisJCQkJCQkgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmaW5pc2hfb21wX2JhcnJpZXIJCQkodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfb21wX2ZsdXNoCQkJKHZvaWQpOworZXh0ZXJuIHZvaWQgZmluaXNoX29tcF90YXNrd2FpdAkJCSh2b2lkKTsKK2V4dGVybiB0cmVlIGJlZ2luX3RyYW5zYWN0aW9uX3N0bXQJCShsb2NhdGlvbl90LCB0cmVlICosIGludCk7CitleHRlcm4gdm9pZCBmaW5pc2hfdHJhbnNhY3Rpb25fc3RtdAkJKHRyZWUsIHRyZWUsIGludCwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF90cmFuc2FjdGlvbl9leHByCQkobG9jYXRpb25fdCwgdHJlZSwgaW50LCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9vbXBfdGFza3lpZWxkCQkodm9pZCk7CitleHRlcm4gYm9vbCBjeHhfb21wX2NyZWF0ZV9jbGF1c2VfaW5mbwkJKHRyZWUsIHRyZWUsIGJvb2wsIGJvb2wsIGJvb2wpOworZXh0ZXJuIHRyZWUgYmFzZWxpbmtfZm9yX2ZucyAgICAgICAgICAgICAgICAgICAgKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX3N0YXRpY19hc3NlcnQgICAgICAgICAgICAgICAgKHRyZWUsIHRyZWUsIGxvY2F0aW9uX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCk7CitleHRlcm4gdHJlZSBmaW5pc2hfZGVjbHR5cGVfdHlwZSAgICAgICAgICAgICAgICAodHJlZSwgYm9vbCwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgZmluaXNoX3RyYWl0X2V4cHIJCQkoZW51bSBjcF90cmFpdF9raW5kLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2xhbWJkYV9leHByICAgICAgICAgICAgICAgICAgICh2b2lkKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2xhbWJkYV9vYmplY3QJCQkodHJlZSk7CitleHRlcm4gdHJlZSBiZWdpbl9sYW1iZGFfdHlwZSAgICAgICAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gdHJlZSBsYW1iZGFfY2FwdHVyZV9maWVsZF90eXBlCQkodHJlZSk7CitleHRlcm4gdHJlZSBsYW1iZGFfcmV0dXJuX3R5cGUJCQkodHJlZSk7CitleHRlcm4gdHJlZSBsYW1iZGFfcHJveHlfdHlwZQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGxhbWJkYV9mdW5jdGlvbgkJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGFwcGx5X2RlZHVjZWRfcmV0dXJuX3R5cGUgICAgICAgICAgICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGFkZF9jYXB0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICh0cmVlLCB0cmVlLCB0cmVlLCBib29sLCBib29sKTsKK2V4dGVybiB0cmVlIGFkZF9kZWZhdWx0X2NhcHR1cmUgICAgICAgICAgICAgICAgICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NhcHR1cmVfcHJveHkJCQkodHJlZSk7CitleHRlcm4gdm9pZCBpbnNlcnRfY2FwdHVyZV9wcm94eQkJKHRyZWUpOworZXh0ZXJuIHZvaWQgaW5zZXJ0X3BlbmRpbmdfY2FwdHVyZV9wcm94aWVzCSh2b2lkKTsKK2V4dGVybiBib29sIGlzX2NhcHR1cmVfcHJveHkJCQkodHJlZSk7CitleHRlcm4gYm9vbCBpc19ub3JtYWxfY2FwdHVyZV9wcm94eSAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gdm9pZCByZWdpc3Rlcl9jYXB0dXJlX21lbWJlcnMJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGxhbWJkYV9leHByX3RoaXNfY2FwdHVyZSAgICAgICAgICAgICh0cmVlKTsKK2V4dGVybiB0cmVlIG1heWJlX3Jlc29sdmVfZHVtbXkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBub25sYW1iZGFfbWV0aG9kX2Jhc2V0eXBlCQkodm9pZCk7CitleHRlcm4gdm9pZCBtYXliZV9hZGRfbGFtYmRhX2NvbnZfb3AgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gYm9vbCBpc19sYW1iZGFfaWdub3JlZF9lbnRpdHkgICAgICAgICAgICAodHJlZSk7CisKKy8qIGluIHRyZWUuYyAqLworZXh0ZXJuIGludCBjcF90cmVlX29wZXJhbmRfbGVuZ3RoCQkoY29uc3RfdHJlZSk7Cit2b2lkIGNwX2ZyZWVfbGFuZ19kYXRhIAkJCQkodHJlZSB0KTsKK2V4dGVybiB0cmVlIGZvcmNlX3RhcmdldF9leHByCQkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3RhcmdldF9leHByX3dpdGhfdHlwZQkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB2b2lkIGxhbmdfY2hlY2tfZmFpbGVkCQkJKGNvbnN0IGNoYXIgKiwgaW50LAorCQkJCQkJIGNvbnN0IGNoYXIgKikgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHRyZWUgc3RhYmlsaXplX2V4cHIJCQkodHJlZSwgdHJlZSAqKTsKK2V4dGVybiB2b2lkIHN0YWJpbGl6ZV9jYWxsCQkJKHRyZWUsIHRyZWUgKik7CitleHRlcm4gYm9vbCBzdGFiaWxpemVfaW5pdAkJCSh0cmVlLCB0cmVlICopOworZXh0ZXJuIHRyZWUgYWRkX3N0bXRfdG9fY29tcG91bmQJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGluaXRfdHJlZQkJCQkodm9pZCk7CitleHRlcm4gYm9vbCBwb2RfdHlwZV9wCQkJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGxheW91dF9wb2RfdHlwZV9wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgc3RkX2xheW91dF90eXBlX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCB0cml2aWFsX3R5cGVfcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIHRyaXZpYWxseV9jb3B5YWJsZV9wCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBzY2FsYXJpc2hfdHlwZV9wCQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9oYXNfbm9udHJpdmlhbF9kZWZhdWx0X2luaXQJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgdHlwZV9oYXNfbm9udHJpdmlhbF9jb3B5X2luaXQJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgY2xhc3NfdG1wbF9pbXBsX3NwZWNfcAkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCB6ZXJvX2luaXRfcAkJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBjaGVja19hYmlfdGFnX3JlZGVjbGFyYXRpb24JCShjb25zdF90cmVlLCBjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIHN0cmlwX3R5cGVkZWZzCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgc3RyaXBfdHlwZWRlZnNfZXhwcgkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGNvcHlfYmluZm8JCQkJKHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHJlZSAqLCBpbnQpOworZXh0ZXJuIGludCBtZW1iZXJfcAkJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gY3BfbHZhbHVlX2tpbmQgcmVhbF9sdmFsdWVfcAkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGNwX2x2YWx1ZV9raW5kIGx2YWx1ZV9raW5kCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBsdmFsdWVfb3JfcnZhbHVlX3dpdGhfYWRkcmVzc19wCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIHh2YWx1ZV9wCSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGJ1aWx0aW5fdmFsaWRfaW5fY29uc3RhbnRfZXhwcl9wICAgIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX21pbgkJCQkoZW51bSB0cmVlX2NvZGUsIHRyZWUsIC4uLik7CitleHRlcm4gdHJlZSBidWlsZF9taW5fbnRfbG9jCQkJKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLAorCQkJCQkJIC4uLik7CitleHRlcm4gdHJlZSBidWlsZF9taW5fbm9uX2RlcAkJCShlbnVtIHRyZWVfY29kZSwgdHJlZSwgLi4uKTsKK2V4dGVybiB0cmVlIGJ1aWxkX21pbl9ub25fZGVwX2NhbGxfdmVjCQkodHJlZSwgdHJlZSwgdmVjPHRyZWUsIHZhX2djPiAqKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NwbHVzX25ldwkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9hZ2dyX2luaXRfZXhwcgkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3RhcmdldF9leHByCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3RhcmdldF9leHByX3NmaW5hZQkJKHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NwbHVzX2FycmF5X3R5cGUJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2FycmF5X29mX25fdHlwZQkJKHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBidWlsZF9hcnJheV9jb3B5CQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfdmVjX2luaXRfZXhwcgkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdm9pZCBkaWFnbm9zZV9ub25fY29uc3RleHByX3ZlY19pbml0CSh0cmVlKTsKK2V4dGVybiB0cmVlIGhhc2hfdHJlZV9jb25zCQkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgaGFzaF90cmVlX2NoYWluCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcXVhbGlmaWVkX25hbWUJCSh0cmVlLCB0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3JlZl9xdWFsaWZpZWRfdHlwZQkJKHRyZWUsIGNwX3JlZl9xdWFsaWZpZXIpOworZXh0ZXJuIGludCBpc19vdmVybG9hZGVkX2ZuCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZGVwZW5kZW50X25hbWUJCQkodHJlZSk7CitleHRlcm4gdHJlZSBnZXRfZm5zCQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGdldF9maXJzdF9mbgkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG92bF9jb25zCQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX292ZXJsb2FkCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgb3ZsX3Njb3BlCQkJCSh0cmVlKTsKK2V4dGVybiBib29sIG5vbl9zdGF0aWNfbWVtYmVyX2Z1bmN0aW9uX3AgICAgICAgICh0cmVlKTsKK2V4dGVybiBjb25zdCBjaGFyICpjeHhfcHJpbnRhYmxlX25hbWUJCSh0cmVlLCBpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmN4eF9wcmludGFibGVfbmFtZV90cmFuc2xhdGUJKHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBidWlsZF9leGNlcHRpb25fdmFyaWFudAkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYmluZF90ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBhcnJheV90eXBlX25lbHRzX3RvdGFsCQkodHJlZSk7CitleHRlcm4gdHJlZSBhcnJheV90eXBlX25lbHRzX3RvcAkJKHRyZWUpOworZXh0ZXJuIHRyZWUgYnJlYWtfb3V0X3RhcmdldF9leHBycwkJKHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3R5cGVfZGVjbAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGRlY2xfbmFtZXNwYWNlX2NvbnRleHQJCSh0cmVlKTsKK2V4dGVybiBib29sIGRlY2xfYW5vbl9uc19tZW1fcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGx2YWx1ZV90eXBlCQkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIGVycm9yX3R5cGUJCQkJKHRyZWUpOworZXh0ZXJuIGludCB2YXJhcmdzX2Z1bmN0aW9uX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCByZWFsbHlfb3ZlcmxvYWRlZF9mbgkJKHRyZWUpOworZXh0ZXJuIGJvb2wgY3BfdHJlZV9lcXVhbAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG5vX2xpbmthZ2VfY2hlY2sJCQkodHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBkZWJ1Z19iaW5mbwkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9kdW1teV9vYmplY3QJCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYXliZV9kdW1teV9vYmplY3QJCQkodHJlZSwgdHJlZSAqKTsKK2V4dGVybiBpbnQgaXNfZHVtbXlfb2JqZWN0CQkJKGNvbnN0X3RyZWUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBjeHhfYXR0cmlidXRlX3RhYmxlW107CitleHRlcm4gdHJlZSBtYWtlX3B0cm1lbV9jc3QJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjcF9idWlsZF90eXBlX2F0dHJpYnV0ZV92YXJpYW50ICAgICAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9yZWZlcmVuY2VfdHlwZQkJKHRyZWUsIGJvb2wpOworZXh0ZXJuIHRyZWUgbW92ZQkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9xdWFsaWZpZWRfdHlwZV9yZWFsCSh0cmVlLCBpbnQsIHRzdWJzdF9mbGFnc190KTsKKyNkZWZpbmUgY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGUoVFlQRSwgUVVBTFMpIFwKKyAgY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGVfcmVhbCAoKFRZUEUpLCAoUVVBTFMpLCB0Zl93YXJuaW5nX29yX2Vycm9yKQorZXh0ZXJuIGJvb2wgY3ZfcXVhbGlmaWVkX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBjdl91bnF1YWxpZmllZAkJCSh0cmVlKTsKK2V4dGVybiBzcGVjaWFsX2Z1bmN0aW9uX2tpbmQgc3BlY2lhbF9mdW5jdGlvbl9wIChjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgY291bnRfdHJlZXMJCQkJKHRyZWUpOworZXh0ZXJuIGludCBjaGFyX3R5cGVfcAkJCQkodHJlZSk7CitleHRlcm4gdm9pZCB2ZXJpZnlfc3RtdF90cmVlCQkJKHRyZWUpOworZXh0ZXJuIGxpbmthZ2Vfa2luZCBkZWNsX2xpbmthZ2UJCSh0cmVlKTsKK2V4dGVybiBkdXJhdGlvbl9raW5kIGRlY2xfc3RvcmFnZV9kdXJhdGlvbgkodHJlZSk7CitleHRlcm4gdHJlZSBjcF93YWxrX3N1YnRyZWVzICh0cmVlKiwgaW50Kiwgd2Fsa190cmVlX2ZuLAorCQkJICAgICAgdm9pZCosIHN0cnVjdCBwb2ludGVyX3NldF90Kik7CisjZGVmaW5lIGNwX3dhbGtfdHJlZSh0cCxmdW5jLGRhdGEscHNldCkgXAorCXdhbGtfdHJlZV8xICh0cCwgZnVuYywgZGF0YSwgcHNldCwgY3Bfd2Fsa19zdWJ0cmVlcykKKyNkZWZpbmUgY3Bfd2Fsa190cmVlX3dpdGhvdXRfZHVwbGljYXRlcyh0cCxmdW5jLGRhdGEpIFwKKwl3YWxrX3RyZWVfd2l0aG91dF9kdXBsaWNhdGVzXzEgKHRwLCBmdW5jLCBkYXRhLCBjcF93YWxrX3N1YnRyZWVzKQorZXh0ZXJuIHRyZWUgZm9sZF9pZl9ub3RfaW5fdGVtcGxhdGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIHJ2YWx1ZQkJCQkodHJlZSk7CitleHRlcm4gdHJlZSBjb252ZXJ0X2JpdGZpZWxkX3RvX2RlY2xhcmVkX3R5cGUgICAodHJlZSk7CitleHRlcm4gdHJlZSBjcF9zYXZlX2V4cHIJCQkodHJlZSk7CitleHRlcm4gYm9vbCBjYXN0X3ZhbGlkX2luX2ludGVncmFsX2NvbnN0YW50X2V4cHJlc3Npb25fcCAodHJlZSk7CitleHRlcm4gYm9vbCBjeHhfdHlwZV9oYXNoX2VxCQkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworCitleHRlcm4gdm9pZCBjeHhfcHJpbnRfc3RhdGlzdGljcwkJKHZvaWQpOworZXh0ZXJuIGJvb2wgbWF5YmVfd2Fybl96ZXJvX2FzX251bGxfcG9pbnRlcl9jb25zdGFudCAodHJlZSwgbG9jYXRpb25fdCk7CisKKy8qIGluIHB0cmVlLmMgKi8KK2V4dGVybiB2b2lkIGN4eF9wcmludF94bm9kZQkJCShGSUxFICosIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBjeHhfcHJpbnRfZGVjbAkJCShGSUxFICosIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBjeHhfcHJpbnRfdHlwZQkJCShGSUxFICosIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBjeHhfcHJpbnRfaWRlbnRpZmllcgkJKEZJTEUgKiwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIGN4eF9wcmludF9lcnJvcl9mdW5jdGlvbgkJKGRpYWdub3N0aWNfY29udGV4dCAqLAorCQkJCQkJIGNvbnN0IGNoYXIgKiwKKwkJCQkJCSBzdHJ1Y3QgZGlhZ25vc3RpY19pbmZvICopOworCisvKiBpbiB0eXBlY2suYyAqLworZXh0ZXJuIGJvb2wgY3h4X21hcmtfYWRkcmVzc2FibGUJCSh0cmVlKTsKK2V4dGVybiBpbnQgc3RyaW5nX2NvbnZfcAkJCShjb25zdF90cmVlLCBjb25zdF90cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgY3BfdHJ1dGh2YWx1ZV9jb252ZXJzaW9uCQkodHJlZSk7CitleHRlcm4gdHJlZSBjb25kaXRpb25fY29udmVyc2lvbgkJKHRyZWUpOworZXh0ZXJuIHRyZWUgcmVxdWlyZV9jb21wbGV0ZV90eXBlCQkodHJlZSk7CitleHRlcm4gdHJlZSByZXF1aXJlX2NvbXBsZXRlX3R5cGVfc2ZpbmFlCSh0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBjb21wbGV0ZV90eXBlCQkJKHRyZWUpOworZXh0ZXJuIHRyZWUgY29tcGxldGVfdHlwZV9vcl9lbHNlCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjb21wbGV0ZV90eXBlX29yX21heWJlX2NvbXBsYWluCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gaW50IHR5cGVfdW5rbm93bl9wCQkJKGNvbnN0X3RyZWUpOworZW51bSB7IGNlX2Rlcml2ZWQsIGNlX25vcm1hbCwgY2VfZXhhY3QgfTsKK2V4dGVybiBib29sIGNvbXBfZXhjZXB0X3NwZWNzCQkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIGludCk7CitleHRlcm4gYm9vbCBjb21wdHlwZXMJCQkJKHRyZWUsIHRyZWUsIGludCk7CitleHRlcm4gYm9vbCBzYW1lX3R5cGVfaWdub3JpbmdfdG9wX2xldmVsX3F1YWxpZmllcnNfcCAodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBjb21wcGFybXMJCQkJKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCBjb21wX2N2X3F1YWxpZmljYXRpb24JCShjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgY29tcF9jdl9xdWFsX3NpZ25hdHVyZQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3h4X3NpemVvZl9vcl9hbGlnbm9mX2V4cHIJCSh0cmVlLCBlbnVtIHRyZWVfY29kZSwgYm9vbCk7CitleHRlcm4gdHJlZSBjeHhfc2l6ZW9mX29yX2FsaWdub2ZfdHlwZQkJKHRyZWUsIGVudW0gdHJlZV9jb2RlLCBib29sKTsKK2V4dGVybiB0cmVlIGN4eF9hbGlnbmFzX2V4cHIgICAgICAgICAgICAgICAgICAgICh0cmVlKTsKK2V4dGVybiB0cmVlIGN4eF9zaXplb2Zfbm93YXJuICAgICAgICAgICAgICAgICAgICh0cmVlKTsKK2V4dGVybiB0cmVlIGlzX2JpdGZpZWxkX2V4cHJfd2l0aF9sb3dlcmVkX3R5cGUgIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIHVubG93ZXJlZF9leHByX3R5cGUgICAgICAgICAgICAgICAgIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGRlY2F5X2NvbnZlcnNpb24JCQkodHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfY2xhc3NfbWVtYmVyX2FjY2Vzc19leHByICAgICAgKHRyZWUsIHRyZWUsIHRyZWUsIGJvb2wsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgZmluaXNoX2NsYXNzX21lbWJlcl9hY2Nlc3NfZXhwciAgICAgKHRyZWUsIHRyZWUsIGJvb2wsIAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3hfaW5kaXJlY3RfcmVmCQkobG9jYXRpb25fdCwgdHJlZSwKKwkJCQkJCSByZWZfb3BlcmF0b3IsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX2luZGlyZWN0X3JlZgkJKHRyZWUsIHJlZl9vcGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9hcnJheV9yZWYJCQkobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9hcnJheV9yZWYJCQkobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBnZXRfbWVtYmVyX2Z1bmN0aW9uX2Zyb21fcHRyZnVuYwkodHJlZSAqLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9mdW5jdGlvbl9jYWxsICAgICAgICAgICAgICAodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY3BfYnVpbGRfZnVuY3Rpb25fY2FsbF9uYXJ5ICAgICAgICAgKHRyZWUsIHRzdWJzdF9mbGFnc190LCAuLi4pCisJCQkJCQlBVFRSSUJVVEVfU0VOVElORUw7CitleHRlcm4gdHJlZSBjcF9idWlsZF9mdW5jdGlvbl9jYWxsX3ZlYwkJKHRyZWUsIHZlYzx0cmVlLCB2YV9nYz4gKiosCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9iaW5hcnlfb3AJCQkobG9jYXRpb25fdCwKKwkJCQkJCSBlbnVtIHRyZWVfY29kZSwgdHJlZSwKKwkJCQkJCSBlbnVtIHRyZWVfY29kZSwgdHJlZSwKKwkJCQkJCSBlbnVtIHRyZWVfY29kZSwgdHJlZSAqLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX3hfYXJyYXlfcmVmCQkJKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfeF91bmFyeV9vcAkJCShsb2NhdGlvbl90LAorCQkJCQkJIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX2FkZHJfZXhwcgkJCSh0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9hZGRyX2V4cHJfc3RyaWN0CQkodHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY3BfYnVpbGRfdW5hcnlfb3AgICAgICAgICAgICAgICAgICAgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCBpbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIHVuYXJ5X2NvbXBsZXhfbHZhbHVlCQkoZW51bSB0cmVlX2NvZGUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9jb25kaXRpb25hbF9leHByCQkobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9jb21wb3VuZF9leHByX2Zyb21fbGlzdAkodHJlZSwgZXhwcl9saXN0X2tpbmQsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9jb21wb3VuZF9leHByX2Zyb21fdmVjCSh2ZWM8dHJlZSwgdmFfZ2M+ICosCisJCQkJCQkgY29uc3QgY2hhciAqLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF94X2NvbXBvdW5kX2V4cHIJCShsb2NhdGlvbl90LCB0cmVlLCB0cmVlLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NvbXBvdW5kX2V4cHIgICAgICAgICAgICAgICAgIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX2NvbXBvdW5kX2V4cHIJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9zdGF0aWNfY2FzdAkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9yZWludGVycHJldF9jYXN0CQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfY29uc3RfY2FzdAkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBidWlsZF9jX2Nhc3QJCQkobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjcF9idWlsZF9jX2Nhc3QJCQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9tb2RpZnlfZXhwcgkJCShsb2NhdGlvbl90LCB0cmVlLAorCQkJCQkJIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNwX2J1aWxkX21vZGlmeV9leHByCQkodHJlZSwgZW51bSB0cmVlX2NvZGUsIHRyZWUsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHRyZWUgY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24JCSh0cmVlLCB0cmVlLCB0cmVlLCBpbnQsCisJCQkJCQkgaW1wbF9jb252X3JocywgdHJlZSwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBpbnQgY29tcF9wdHJfdHR5cGVzCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgY29tcF9wdHJfdHR5cGVzX2NvbnN0CQkodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBlcnJvcl90eXBlX3AJCQkoY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHB0cl9yZWFzb25hYmx5X3NpbWlsYXIJCShjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3B0cm1lbWZ1bmMJCQkodHJlZSwgdHJlZSwgaW50LCBib29sLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiBpbnQgY3BfdHlwZV9xdWFscwkJCShjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgdHlwZV9tZW1mbl9xdWFscwkJCShjb25zdF90cmVlKTsKK2V4dGVybiBjcF9yZWZfcXVhbGlmaWVyIHR5cGVfbWVtZm5fcnF1YWwJKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgYXBwbHlfbWVtZm5fcXVhbHMJCQkodHJlZSwgY3BfY3ZfcXVhbHMsIGNwX3JlZl9xdWFsaWZpZXIpOworZXh0ZXJuIGJvb2wgY3BfaGFzX211dGFibGVfcAkJCShjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGF0X2xlYXN0X2FzX3F1YWxpZmllZF9wCQkoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdm9pZCBjcF9hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wJCShpbnQsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcHRybWVtZnVuYzEJCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBleHBhbmRfcHRybWVtZnVuY19jc3QJCSh0cmVlLCB0cmVlICosIHRyZWUgKik7CitleHRlcm4gdHJlZSB0eXBlX2FmdGVyX3VzdWFsX2FyaXRobWV0aWNfY29udmVyc2lvbnMgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29tbW9uX3BvaW50ZXJfdHlwZSAgICAgICAgICAgICAgICAgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29tcG9zaXRlX3BvaW50ZXJfdHlwZQkJKHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUsCisJCQkJCQkgY29tcG9zaXRlX3BvaW50ZXJfb3BlcmF0aW9uLCAKKwkJCQkJCSB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBtZXJnZV90eXBlcwkJCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBzdHJpcF9hcnJheV9kb21haW4JCQkodHJlZSk7CitleHRlcm4gdHJlZSBjaGVja19yZXR1cm5fZXhwcgkJCSh0cmVlLCBib29sICopOworZXh0ZXJuIHRyZWUgY3BfYnVpbGRfYmluYXJ5X29wICAgICAgICAgICAgICAgICAgKGxvY2F0aW9uX3QsCisJCQkJCQkgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworI2RlZmluZSBjeHhfc2l6ZW9mKFQpICBjeHhfc2l6ZW9mX29yX2FsaWdub2ZfdHlwZSAoVCwgU0laRU9GX0VYUFIsIHRydWUpCitleHRlcm4gdHJlZSBidWlsZF9wdHJtZW1mdW5jX2FjY2Vzc19leHByCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2FkZHJlc3MJCQkodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF90eXBlZF9hZGRyZXNzCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfbm9wCQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG5vbl9yZWZlcmVuY2UJCQkodHJlZSk7CitleHRlcm4gdHJlZSBsb29rdXBfYW5vbl9maWVsZAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIGludmFsaWRfbm9uc3RhdGljX21lbWZuX3AJCShjb25zdF90cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBjb252ZXJ0X21lbWJlcl9mdW5jX3RvX3B0cgkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNvbnZlcnRfcHRybWVtCQkJKHRyZWUsIHRyZWUsIGJvb2wsIGJvb2wsCisJCQkJCQkgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIGludCBsdmFsdWVfb3JfZWxzZQkJCSh0cmVlLCBlbnVtIGx2YWx1ZV91c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QpOworZXh0ZXJuIHZvaWQgY2hlY2tfdGVtcGxhdGVfa2V5d29yZAkJKHRyZWUpOworZXh0ZXJuIGJvb2wgY2hlY2tfcmF3X2xpdGVyYWxfb3BlcmF0b3IJCShjb25zdF90cmVlIGRlY2wpOworZXh0ZXJuIGJvb2wgY2hlY2tfbGl0ZXJhbF9vcGVyYXRvcl9hcmdzCQkoY29uc3RfdHJlZSwgYm9vbCAqLCBib29sICopOworZXh0ZXJuIHZvaWQgbWF5YmVfd2Fybl9hYm91dF91c2VsZXNzX2Nhc3QgICAgICAgKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGNwX3BlcmZvcm1faW50ZWdyYWxfcHJvbW90aW9ucyAgICAgICh0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CisKKy8qIGluIHR5cGVjazIuYyAqLworZXh0ZXJuIHZvaWQgcmVxdWlyZV9jb21wbGV0ZV9laF9zcGVjX3R5cGVzCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGN4eF9pbmNvbXBsZXRlX3R5cGVfZGlhZ25vc3RpYwkoY29uc3RfdHJlZSwgY29uc3RfdHJlZSwgZGlhZ25vc3RpY190KTsKKyN1bmRlZiBjeHhfaW5jb21wbGV0ZV90eXBlX2Vycm9yCitleHRlcm4gdm9pZCBjeHhfaW5jb21wbGV0ZV90eXBlX2Vycm9yCQkoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisjZGVmaW5lIGN4eF9pbmNvbXBsZXRlX3R5cGVfZXJyb3IoVixUKSBcCisgIChjeHhfaW5jb21wbGV0ZV90eXBlX2RpYWdub3N0aWMgKChWKSwgKFQpLCBES19FUlJPUikpCitleHRlcm4gdHJlZSBlcnJvcl9ub3RfYmFzZV90eXBlCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYmluZm9fb3JfZWxzZQkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGN4eF9yZWFkb25seV9lcnJvcgkJCSh0cmVlLCBlbnVtIGx2YWx1ZV91c2UpOworZXh0ZXJuIHZvaWQgY29tcGxldGVfdHlwZV9jaGVja19hYnN0cmFjdAkodHJlZSk7CitleHRlcm4gaW50IGFic3RyYWN0X3ZpcnR1YWxzX2Vycm9yCQkodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IGFic3RyYWN0X3ZpcnR1YWxzX2Vycm9yX3NmaW5hZQkodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QpOworCitleHRlcm4gdHJlZSBzdG9yZV9pbml0X3ZhbHVlCQkJKHRyZWUsIHRyZWUsIHZlYzx0cmVlLCB2YV9nYz4qKiwgaW50KTsKK2V4dGVybiB2b2lkIGNoZWNrX25hcnJvd2luZwkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGRpZ2VzdF9pbml0CQkJCSh0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCk7CitleHRlcm4gdHJlZSBkaWdlc3RfaW5pdF9mbGFncwkJCSh0cmVlLCB0cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgYnVpbGRfc2NvcGVkX3JlZgkJCSh0cmVlLCB0cmVlLCB0cmVlICopOworZXh0ZXJuIHRyZWUgYnVpbGRfeF9hcnJvdwkJCShsb2NhdGlvbl90LCB0cmVlLAorCQkJCQkJIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX21fY29tcG9uZW50X3JlZgkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdAkJKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190KTsKK2V4dGVybiB0cmVlIGFkZF9leGNlcHRpb25fc3BlY2lmaWVyCQkodHJlZSwgdHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIG1lcmdlX2V4Y2VwdGlvbl9zcGVjaWZpZXJzCQkodHJlZSwgdHJlZSwgdHJlZSk7CisKKy8qIGluIG1hbmdsZS5jICovCitleHRlcm4gdm9pZCBpbml0X21hbmdsZQkJCQkodm9pZCk7CitleHRlcm4gdm9pZCBtYW5nbGVfZGVjbAkJCQkodHJlZSk7CitleHRlcm4gY29uc3QgY2hhciAqbWFuZ2xlX3R5cGVfc3RyaW5nCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYW5nbGVfdHlwZWluZm9fZm9yX3R5cGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG1hbmdsZV90eXBlaW5mb19zdHJpbmdfZm9yX3R5cGUJKHRyZWUpOworZXh0ZXJuIHRyZWUgbWFuZ2xlX3Z0YmxfZm9yX3R5cGUJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG1hbmdsZV92dHRfZm9yX3R5cGUJCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYW5nbGVfY3Rvcl92dGJsX2Zvcl90eXBlCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBtYW5nbGVfdGh1bmsJCQkodHJlZSwgaW50LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG1hbmdsZV9jb252X29wX25hbWVfZm9yX3R5cGUJKHRyZWUpOworZXh0ZXJuIHRyZWUgbWFuZ2xlX2d1YXJkX3ZhcmlhYmxlCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYW5nbGVfdGxzX2luaXRfZm4JCQkodHJlZSk7CitleHRlcm4gdHJlZSBtYW5nbGVfdGxzX3dyYXBwZXJfZm4JCSh0cmVlKTsKK2V4dGVybiBib29sIGRlY2xfdGxzX3dyYXBwZXJfcAkJCSh0cmVlKTsKK2V4dGVybiB0cmVlIG1hbmdsZV9yZWZfaW5pdF92YXJpYWJsZQkJKHRyZWUpOworCisvKiBpbiBkdW1wLmMgKi8KK2V4dGVybiBib29sIGNwX2R1bXBfdHJlZQkJCSh2b2lkICosIHRyZWUpOworCisvKiBJbiBjcC9jcC1vYmpjcC1jb21tb24uYy4gICovCisKK2V4dGVybiBhbGlhc19zZXRfdHlwZSBjeHhfZ2V0X2FsaWFzX3NldAkJKHRyZWUpOworZXh0ZXJuIGJvb2wgY3h4X3dhcm5fdW51c2VkX2dsb2JhbF9kZWNsCQkoY29uc3RfdHJlZSk7CitleHRlcm4gc2l6ZV90IGNwX3RyZWVfc2l6ZQkJCShlbnVtIHRyZWVfY29kZSk7CitleHRlcm4gYm9vbCBjcF92YXJfbW9kX3R5cGVfcAkJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGN4eF9pbml0aWFsaXplX2RpYWdub3N0aWNzCQkoZGlhZ25vc3RpY19jb250ZXh0ICopOworZXh0ZXJuIGludCBjeHhfdHlwZXNfY29tcGF0aWJsZV9wCQkodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBpbml0X3NoYWRvd2VkX3Zhcl9mb3JfZGVjbAkJKHZvaWQpOworZXh0ZXJuIGJvb2wgY3h4X2Jsb2NrX21heV9mYWxsdGhydQkJKGNvbnN0X3RyZWUpOworCisvKiBpbiBjcC1naW1wbGlmeS5jICovCitleHRlcm4gaW50IGNwX2dpbXBsaWZ5X2V4cHIJCQkodHJlZSAqLCBnaW1wbGVfc2VxICosCisJCQkJCQkgZ2ltcGxlX3NlcSAqKTsKK2V4dGVybiB2b2lkIGNwX2dlbmVyaWNpemUJCQkodHJlZSk7CitleHRlcm4gYm9vbCBjeHhfb21wX2NvbnN0X3F1YWxfbm9fbXV0YWJsZQkodHJlZSk7CitleHRlcm4gZW51bSBvbXBfY2xhdXNlX2RlZmF1bHRfa2luZCBjeHhfb21wX3ByZWRldGVybWluZWRfc2hhcmluZyAodHJlZSk7CitleHRlcm4gdHJlZSBjeHhfb21wX2NsYXVzZV9kZWZhdWx0X2N0b3IJCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGN4eF9vbXBfY2xhdXNlX2NvcHlfY3RvcgkJKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY3h4X29tcF9jbGF1c2VfYXNzaWduX29wCQkodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBjeHhfb21wX2NsYXVzZV9kdG9yCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgY3h4X29tcF9maW5pc2hfY2xhdXNlCQkodHJlZSk7CitleHRlcm4gYm9vbCBjeHhfb21wX3ByaXZhdGl6ZV9ieV9yZWZlcmVuY2UJKGNvbnN0X3RyZWUpOworCisvKiBpbiBuYW1lLWxvb2t1cC5jICovCitleHRlcm4gdm9pZCBzdWdnZXN0X2FsdGVybmF0aXZlc19mb3IgICAgICAgICAgICAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBzdHJpcF91c2luZ19kZWNsICAgICAgICAgICAgICAgICAgICAodHJlZSk7CisKKy8qIC0tIGVuZCBvZiBDKysgKi8KKworI2VuZGlmIC8qICEgR0NDX0NQX1RSRUVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NwL2N4eC1wcmV0dHktcHJpbnQuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jcC9jeHgtcHJldHR5LXByaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFhYjBlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jcC9jeHgtcHJldHR5LXByaW50LmgKQEAgLTAsMCArMSw3OSBAQAorLyogSW50ZXJmYWNlIGZvciB0aGUgR05VIEMrKyBwcmV0dHktcHJpbnRlci4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgR2FicmllbCBEb3MgUmVpcyA8Z2RyQGludGVncmFibGUtc29sdXRpb25zLm5ldD4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0NYWF9QUkVUVFlfUFJJTlRfSAorI2RlZmluZSBHQ0NfQ1hYX1BSRVRUWV9QUklOVF9ICisKKyNpbmNsdWRlICJjLWZhbWlseS9jLXByZXR0eS1wcmludC5oIgorCisjdW5kZWYgcHBfY19iYXNlCisjZGVmaW5lIHBwX2NfYmFzZShQUCkgKCYoUFApLT5jX2Jhc2UpCisKK3R5cGVkZWYgZW51bQoreworICAvKiBBc2sgZm9yIGEgcXVhbGlmaWVkLWlkLiAgKi8KKyAgcHBfY3h4X2ZsYWdfZGVmYXVsdF9hcmd1bWVudCA9IDEgPDwgcHBfY19mbGFnX2xhc3RfYml0CisKK30gY3h4X3ByZXR0eV9wcmludGVyX2ZsYWdzOworCit0eXBlZGVmIHN0cnVjdAoreworICBjX3ByZXR0eV9wcmludGVyIGNfYmFzZTsKKyAgLyogVGhpcyBpcyB0aGUgZW5jbG9zaW5nIHNjb3BlIG9mIHRoZSBlbnRpdHkgYmVpbmcgcHJldHR5LXByaW50ZWQuICAqLworICB0cmVlIGVuY2xvc2luZ19zY29wZTsKK30gY3h4X3ByZXR0eV9wcmludGVyOworCisjZGVmaW5lIHBwX2N4eF9jdl9xdWFsaWZpZXJfc2VxKFBQLCBUKSAgIFwKKyAgIHBwX2NfdHlwZV9xdWFsaWZpZXJfbGlzdCAocHBfY19iYXNlIChQUCksIFQpCisKKyNkZWZpbmUgcHBfY3h4X3doaXRlc3BhY2UoUFApCQlwcF9jX3doaXRlc3BhY2UgKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfbGVmdF9wYXJlbihQUCkJCXBwX2NfbGVmdF9wYXJlbiAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9yaWdodF9wYXJlbihQUCkJCXBwX2NfcmlnaHRfcGFyZW4gKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfbGVmdF9icmFjZShQUCkJCXBwX2NfbGVmdF9icmFjZSAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9yaWdodF9icmFjZShQUCkJCXBwX2NfcmlnaHRfYnJhY2UgKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfbGVmdF9icmFja2V0KFBQKQkJcHBfY19sZWZ0X2JyYWNrZXQgKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfcmlnaHRfYnJhY2tldChQUCkJcHBfY19yaWdodF9icmFja2V0IChwcF9jX2Jhc2UgKFBQKSkKKyNkZWZpbmUgcHBfY3h4X2RvdChQUCkJCQlwcF9jX2RvdCAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9hbXBlcnNhbmQoUFApCQlwcF9jX2FtcGVyc2FuZCAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9zdGFyKFBQKQkJCXBwX2Nfc3RhciAocHBfY19iYXNlIChQUCkpCisjZGVmaW5lIHBwX2N4eF9hcnJvdyhQUCkJCXBwX2NfYXJyb3cgKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfc2VtaWNvbG9uKFBQKQkJcHBfY19zZW1pY29sb24gKHBwX2NfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jeHhfY29tcGxlbWVudChQUCkJCXBwX2NfY29tcGxlbWVudCAocHBfY19iYXNlIChQUCkpCisKKyNkZWZpbmUgcHBfY3h4X3dzX3N0cmluZyhQUCwgSSkJCXBwX2Nfd3Nfc3RyaW5nIChwcF9jX2Jhc2UgKFBQKSwgSSkKKyNkZWZpbmUgcHBfY3h4X2lkZW50aWZpZXIoUFAsIEkpCXBwX2NfaWRlbnRpZmllciAocHBfY19iYXNlIChQUCksIEkpCisjZGVmaW5lIHBwX2N4eF90cmVlX2lkZW50aWZpZXIoUFAsIFQpIFwKKyAgcHBfY190cmVlX2lkZW50aWZpZXIgKHBwX2NfYmFzZSAoUFApLCBUKQorCit2b2lkIHBwX2N4eF9wcmV0dHlfcHJpbnRlcl9pbml0IChjeHhfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2N4eF9iZWdpbl90ZW1wbGF0ZV9hcmd1bWVudF9saXN0IChjeHhfcHJldHR5X3ByaW50ZXIgKik7Cit2b2lkIHBwX2N4eF9lbmRfdGVtcGxhdGVfYXJndW1lbnRfbGlzdCAoY3h4X3ByZXR0eV9wcmludGVyICopOwordm9pZCBwcF9jeHhfY29sb25fY29sb24gKGN4eF9wcmV0dHlfcHJpbnRlciAqKTsKK3ZvaWQgcHBfY3h4X3NlcGFyYXRlX3dpdGggKGN4eF9wcmV0dHlfcHJpbnRlciAqLCBpbnQpOworCit2b2lkIHBwX2N4eF9kZWNsYXJhdGlvbiAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jeHhfY2Fub25pY2FsX3RlbXBsYXRlX3BhcmFtZXRlciAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jeHhfdHJhaXRfZXhwcmVzc2lvbiAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jeHhfdmFfYXJnX2V4cHJlc3Npb24gKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY3h4X29mZnNldG9mX2V4cHJlc3Npb24gKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY3h4X3VzZXJkZWZfbGl0ZXJhbCAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOworCisKKyNlbmRpZiAvKiBHQ0NfQ1hYX1BSRVRUWV9QUklOVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY3AvbmFtZS1sb29rdXAuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jcC9uYW1lLWxvb2t1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGFkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY3AvbmFtZS1sb29rdXAuaApAQCAtMCwwICsxLDM2OSBAQAorLyogRGVjbGFyYXRpb25zIGZvciBDKysgbmFtZSBsb29rdXAgcm91dGluZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPGdkckBpbnRlZ3JhYmxlLXNvbHV0aW9ucy5uZXQ+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DUF9OQU1FX0xPT0tVUF9ICisjZGVmaW5lIEdDQ19DUF9OQU1FX0xPT0tVUF9ICisKKyNpbmNsdWRlICJjLWZhbWlseS9jLWNvbW1vbi5oIgorCisvKiBUaGUgdHlwZSBvZiBkaWN0aW9uYXJ5IHVzZWQgdG8gbWFwIG5hbWVzIHRvIHR5cGVzIGRlY2xhcmVkIGF0CisgICBhIGdpdmVuIHNjb3BlLiAgKi8KK3R5cGVkZWYgc3RydWN0IGJpbmRpbmdfdGFibGVfcyAqYmluZGluZ190YWJsZTsKK3R5cGVkZWYgc3RydWN0IGJpbmRpbmdfZW50cnlfcyAqYmluZGluZ19lbnRyeTsKKworLyogVGhlIHR5cGUgb2YgYSByb3V0aW5lIHJlcGVhdGVkbHkgY2FsbGVkIGJ5IGJpbmRpbmdfdGFibGVfZm9yZWFjaC4gICovCit0eXBlZGVmIHZvaWQgKCpidF9mb3JlYWNoX3Byb2MpIChiaW5kaW5nX2VudHJ5LCB2b2lkICopOworCitzdHJ1Y3QgR1RZKCgpKSBiaW5kaW5nX2VudHJ5X3MgeworICBiaW5kaW5nX2VudHJ5IGNoYWluOworICB0cmVlIG5hbWU7CisgIHRyZWUgdHlwZTsKK307CisKKy8qIFRoZXNlIG1hY3JvcyBpbmRpY2F0ZSB0aGUgaW5pdGlhbCBjaGFpbnMgY291bnQgZm9yIGJpbmRpbmdfdGFibGUuICAqLworI2RlZmluZSBTQ09QRV9ERUZBVUxUX0hUX1NJWkUJCSgxIDw8IDMpCisjZGVmaW5lIENMQVNTX1NDT1BFX0hUX1NJWkUJCSgxIDw8IDMpCisjZGVmaW5lIE5BTUVTUEFDRV9PUkRJTkFSWV9IVF9TSVpFCSgxIDw8IDUpCisjZGVmaW5lIE5BTUVTUEFDRV9TVERfSFRfU0laRQkJKDEgPDwgOCkKKyNkZWZpbmUgR0xPQkFMX1NDT1BFX0hUX1NJWkUJCSgxIDw8IDgpCisKK2V4dGVybiB2b2lkIGJpbmRpbmdfdGFibGVfZm9yZWFjaCAoYmluZGluZ190YWJsZSwgYnRfZm9yZWFjaF9wcm9jLCB2b2lkICopOworZXh0ZXJuIGJpbmRpbmdfZW50cnkgYmluZGluZ190YWJsZV9maW5kIChiaW5kaW5nX3RhYmxlLCB0cmVlKTsKKwwKKy8qIERhdGF0eXBlIHRoYXQgcmVwcmVzZW50cyBiaW5kaW5nIGVzdGFibGlzaGVkIGJ5IGEgZGVjbGFyYXRpb24gYmV0d2VlbgorICAgYSBuYW1lIGFuZCBhIEMrKyBlbnRpdHkuICAqLwordHlwZWRlZiBzdHJ1Y3QgY3h4X2JpbmRpbmcgY3h4X2JpbmRpbmc7CisKKy8qIFRoZSBkYXRhdHlwZSB1c2VkIHRvIGltcGxlbWVudCBDKysgc2NvcGUuICAqLwordHlwZWRlZiBzdHJ1Y3QgY3BfYmluZGluZ19sZXZlbCBjcF9iaW5kaW5nX2xldmVsOworCisvKiBOb256ZXJvIGlmIHRoaXMgYmluZGluZyBpcyBmb3IgYSBsb2NhbCBzY29wZSwgYXMgb3Bwb3NlZCB0byBhIGNsYXNzCisgICBvciBuYW1lc3BhY2Ugc2NvcGUuICAqLworI2RlZmluZSBMT0NBTF9CSU5ESU5HX1AoTk9ERSkgKChOT0RFKS0+aXNfbG9jYWwpCisKKy8qIFRydWUgaWYgTk9ERS0+dmFsdWUgaXMgZnJvbSBhIGJhc2UgY2xhc3Mgb2YgdGhlIGNsYXNzIHdoaWNoIGlzCisgICBjdXJyZW50bHkgYmVpbmcgZGVmaW5lZC4gICovCisjZGVmaW5lIElOSEVSSVRFRF9WQUxVRV9CSU5ESU5HX1AoTk9ERSkgKChOT0RFKS0+dmFsdWVfaXNfaW5oZXJpdGVkKQorCitzdHJ1Y3QgR1RZKCgpKSBjeHhfYmluZGluZyB7CisgIC8qIExpbmsgdG8gY2hhaW4gdG9nZXRoZXIgdmFyaW91cyBiaW5kaW5ncyBmb3IgdGhpcyBuYW1lLiAgKi8KKyAgY3h4X2JpbmRpbmcgKnByZXZpb3VzOworICAvKiBUaGUgbm9uLXR5cGUgZW50aXR5IHRoaXMgbmFtZSBpcyBib3VuZCB0by4gICovCisgIHRyZWUgdmFsdWU7CisgIC8qIFRoZSB0eXBlIGVudGl0eSB0aGlzIG5hbWUgaXMgYm91bmQgdG8uICAqLworICB0cmVlIHR5cGU7CisgIC8qIFRoZSBzY29wZSBhdCB3aGljaCB0aGlzIGJpbmRpbmcgd2FzIG1hZGUuICAqLworICBjcF9iaW5kaW5nX2xldmVsICpzY29wZTsKKyAgdW5zaWduZWQgdmFsdWVfaXNfaW5oZXJpdGVkIDogMTsKKyAgdW5zaWduZWQgaXNfbG9jYWwgOiAxOworfTsKKworLyogRGF0YXR5cGUgdXNlZCB0byB0ZW1wb3JhcmlseSBzYXZlIEMrKyBiaW5kaW5ncyAoZm9yIGltcGxpY2l0CisgICBpbnN0YW50aWF0aW9ucyBwdXJwb3NlcyBhbmQgbGlrZSkuICBJbXBsZW1lbnRlZCBpbiBkZWNsLmMuICAqLwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBjeHhfc2F2ZWRfYmluZGluZyB7CisgIC8qIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJpbmRpbmcuICAqLworICB0cmVlIGlkZW50aWZpZXI7CisgIC8qIFRoZSBiaW5kaW5nIHdlJ3JlIHNhdmluZy4gICovCisgIGN4eF9iaW5kaW5nICpiaW5kaW5nOworICB0cmVlIHJlYWxfdHlwZV92YWx1ZTsKK30gY3h4X3NhdmVkX2JpbmRpbmc7CisKKworZXh0ZXJuIHRyZWUgaWRlbnRpZmllcl90eXBlX3ZhbHVlICh0cmVlKTsKK2V4dGVybiB2b2lkIHNldF9pZGVudGlmaWVyX3R5cGVfdmFsdWUgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgcG9wX2JpbmRpbmcgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgY29uc3RydWN0b3JfbmFtZSAodHJlZSk7CitleHRlcm4gYm9vbCBjb25zdHJ1Y3Rvcl9uYW1lX3AgKHRyZWUsIHRyZWUpOworDAorLyogVGhlIGtpbmRzIG9mIHNjb3BlcyB3ZSByZWNvZ25pemUuICAqLwordHlwZWRlZiBlbnVtIHNjb3BlX2tpbmQgeworICBza19ibG9jayA9IDAsICAgICAgLyogQW4gb3JkaW5hcnkgYmxvY2sgc2NvcGUuICBUaGlzIGVudW1lcmF0b3IgbXVzdAorCQkJaGF2ZSB0aGUgdmFsdWUgemVybyBiZWNhdXNlICJjcF9iaW5kaW5nX2xldmVsIgorCQkJaXMgaW5pdGlhbGl6ZWQgYnkgdXNpbmcgIm1lbXNldCIgdG8gc2V0IHRoZQorCQkJY29udGVudHMgdG8gemVybywgYW5kIHRoZSBkZWZhdWx0IHNjb3BlIGtpbmQKKwkJCWlzICJza19ibG9jayIuICAqLworICBza19jbGVhbnVwLAkgICAgIC8qIEEgc2NvcGUgZm9yIChwc2V1ZG8tKXNjb3BlIGZvciBjbGVhbnVwLiAgSXQgaXMKKwkJCXBzZXVkbyBpbiB0aGF0IGl0IGlzIHRyYW5zcGFyZW50IHRvIG5hbWUgbG9va3VwCisJCQlhY3Rpdml0aWVzLiAgKi8KKyAgc2tfdHJ5LAkgICAgIC8qIEEgdHJ5LWJsb2NrLiAgKi8KKyAgc2tfY2F0Y2gsCSAgICAgLyogQSBjYXRjaC1ibG9jay4gICovCisgIHNrX2ZvciwJICAgICAvKiBUaGUgc2NvcGUgb2YgdGhlIHZhcmlhYmxlIGRlY2xhcmVkIGluIGEKKwkJCWZvci1pbml0LXN0YXRlbWVudC4gICovCisgIHNrX2NvbmQsCSAgICAgLyogVGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBkZWNsYXJlZCBpbiB0aGUgY29uZGl0aW9uCisJCQlvZiBhbiBpZiBvciBzd2l0Y2ggc3RhdGVtZW50LiAgKi8KKyAgc2tfZnVuY3Rpb25fcGFybXMsIC8qIFRoZSBzY29wZSBjb250YWluaW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICAqLworICBza19jbGFzcywJICAgICAvKiBUaGUgc2NvcGUgY29udGFpbmluZyB0aGUgbWVtYmVycyBvZiBhIGNsYXNzLiAgKi8KKyAgc2tfc2NvcGVkX2VudW0sICAgIC8qIFRoZSBzY29wZSBjb250YWluaW5nIHRoZSBlbnVtZXJ0b3JzIG9mIGEgQysrMHgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZCBlbnVtZXJhdGlvbi4gICovCisgIHNrX25hbWVzcGFjZSwJICAgICAvKiBUaGUgc2NvcGUgY29udGFpbmluZyB0aGUgbWVtYmVycyBvZiBhCisJCQluYW1lc3BhY2UsIGluY2x1ZGluZyB0aGUgZ2xvYmFsIHNjb3BlLiAgKi8KKyAgc2tfdGVtcGxhdGVfcGFybXMsIC8qIEEgc2NvcGUgZm9yIHRlbXBsYXRlIHBhcmFtZXRlcnMuICAqLworICBza190ZW1wbGF0ZV9zcGVjLCAgLyogTGlrZSBza190ZW1wbGF0ZV9wYXJtcywgYnV0IGZvciBhbiBleHBsaWNpdAorCQkJc3BlY2lhbGl6YXRpb24uICBTaW5jZSwgYnkgZGVmaW5pdGlvbiwgYW4KKwkJCWV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIGlzIGludHJvZHVjZWQgYnkKKwkJCSJ0ZW1wbGF0ZSA8PiIsIHRoaXMgc2NvcGUgaXMgYWx3YXlzIGVtcHR5LiAgKi8KKyAgc2tfb21wCSAgICAgLyogQW4gT3Blbk1QIHN0cnVjdHVyZWQgYmxvY2suICAqLworfSBzY29wZV9raW5kOworCisvKiBUaGUgc2NvcGUgd2hlcmUgdGhlIGNsYXNzL3N0cnVjdC91bmlvbi9lbnVtIHRhZyBhcHBsaWVzLiAgKi8KK3R5cGVkZWYgZW51bSB0YWdfc2NvcGUgeworICB0c19jdXJyZW50ID0gMCwJLyogQ3VycmVudCBzY29wZSBvbmx5LiAgVGhpcyBpcyBmb3IgdGhlCisJCQkgICAgIGNsYXNzLWtleSBpZGVudGlmaWVyOworCQkJICAgY2FzZSBtZW50aW9uZWQgaW4gW2Jhc2ljLmxvb2t1cC5lbGFiXS8yLAorCQkJICAgb3IgdGhlIGNsYXNzL2VudW0gZGVmaW5pdGlvbgorCQkJICAgICBjbGFzcy1rZXkgaWRlbnRpZmllciB7IC4uLiB9OyAgKi8KKyAgdHNfZ2xvYmFsID0gMSwJLyogQWxsIHNjb3Blcy4gIFRoaXMgaXMgdGhlIDMuNC4xCisJCQkgICBbYmFzaWMubG9va3VwLnVucXVhbF0gbG9va3VwIG1lbnRpb25lZAorCQkJICAgaW4gW2Jhc2ljLmxvb2t1cC5lbGFiXS8yLiAgKi8KKyAgdHNfd2l0aGluX2VuY2xvc2luZ19ub25fY2xhc3MgPSAyLAkvKiBTZWFyY2ggd2l0aGluIGVuY2xvc2luZyBub24tY2xhc3MKKwkJCQkJICAgb25seSwgZm9yIGZyaWVuZCBjbGFzcyBsb29rdXAKKwkJCQkJICAgYWNjb3JkaW5nIHRvIFtuYW1lc3BhY2UubWVtZGVmXS8zCisJCQkJCSAgIGFuZCBbY2xhc3MuZnJpZW5kXS85LiAgKi8KKyAgdHNfbGFtYmRhID0gMwkJCS8qIERlY2xhcmluZyBhIGxhbWJkYSBjbG9zdXJlLiAgKi8KK30gdGFnX3Njb3BlOworCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIGNwX2NsYXNzX2JpbmRpbmcgeworICBjeHhfYmluZGluZyAqYmFzZTsKKyAgLyogVGhlIGJvdW5kIG5hbWUuICAqLworICB0cmVlIGlkZW50aWZpZXI7Cit9IGNwX2NsYXNzX2JpbmRpbmc7CisKKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBjcF9sYWJlbF9iaW5kaW5nIHsKKyAgLyogVGhlIGJvdW5kIExBQkVMX0RFQ0wuICAqLworICB0cmVlIGxhYmVsOworICAvKiBUaGUgcHJldmlvdXMgSURFTlRJRklFUl9MQUJFTF9WQUxVRS4gICovCisgIHRyZWUgcHJldl92YWx1ZTsKK30gY3BfbGFiZWxfYmluZGluZzsKKworCisvKiBGb3IgZWFjaCBiaW5kaW5nIGNvbnRvdXIgd2UgYWxsb2NhdGUgYSBiaW5kaW5nX2xldmVsIHN0cnVjdHVyZQorICAgd2hpY2ggcmVjb3JkcyB0aGUgbmFtZXMgZGVmaW5lZCBpbiB0aGF0IGNvbnRvdXIuCisgICBDb250b3VycyBpbmNsdWRlOgorICAgIDApIHRoZSBnbG9iYWwgb25lCisgICAgMSkgb25lIGZvciBlYWNoIGZ1bmN0aW9uIGRlZmluaXRpb24sCisgICAgICAgd2hlcmUgaW50ZXJuYWwgZGVjbGFyYXRpb25zIG9mIHRoZSBwYXJhbWV0ZXJzIGFwcGVhci4KKyAgICAyKSBvbmUgZm9yIGVhY2ggY29tcG91bmQgc3RhdGVtZW50LAorICAgICAgIHRvIHJlY29yZCBpdHMgZGVjbGFyYXRpb25zLgorCisgICBUaGUgY3VycmVudCBtZWFuaW5nIG9mIGEgbmFtZSBjYW4gYmUgZm91bmQgYnkgc2VhcmNoaW5nIHRoZSBsZXZlbHMKKyAgIGZyb20gdGhlIGN1cnJlbnQgb25lIG91dCB0byB0aGUgZ2xvYmFsIG9uZS4KKworICAgT2ZmIHRvIHRoZSBzaWRlLCBtYXkgYmUgdGhlIGNsYXNzX2JpbmRpbmdfbGV2ZWwuICBUaGlzIGV4aXN0cyBvbmx5CisgICB0byBjYXRjaCBjbGFzcy1sb2NhbCBkZWNsYXJhdGlvbnMuICBJdCBpcyBvdGhlcndpc2Ugbm9uZXhpc3RlbnQuCisKKyAgIEFsc28gdGhlcmUgbWF5IGJlIGJpbmRpbmcgbGV2ZWxzIHRoYXQgY2F0Y2ggY2xlYW51cHMgdGhhdCBtdXN0IGJlCisgICBydW4gd2hlbiBleGNlcHRpb25zIG9jY3VyLiAgVGh1cywgdG8gc2VlIHdoZXRoZXIgYSBuYW1lIGlzIGJvdW5kIGluCisgICB0aGUgY3VycmVudCBzY29wZSwgaXQgaXMgbm90IGVub3VnaCB0byBsb29rIGluIHRoZQorICAgQ1VSUkVOVF9CSU5ESU5HX0xFVkVMLiAgWW91IHNob3VsZCB1c2UgbG9va3VwX25hbWVfY3VycmVudF9sZXZlbAorICAgaW5zdGVhZC4gICovCisKKy8qIE5vdGUgdGhhdCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGBuYW1lcycgY29tcG9uZW50IG9mIHRoZSBnbG9iYWwgY29udG91cgorICAgaXMgZHVwbGljYXRlZCBpbiB0aGUgSURFTlRJRklFUl9HTE9CQUxfVkFMVUVzIG9mIGFsbCBpZGVudGlmaWVycy4gICovCisKK3N0cnVjdCBHVFkoKCkpIGNwX2JpbmRpbmdfbGV2ZWwgeworICAvKiBBIGNoYWluIG9mIF9ERUNMIG5vZGVzIGZvciBhbGwgdmFyaWFibGVzLCBjb25zdGFudHMsIGZ1bmN0aW9ucywKKyAgICAgIGFuZCB0eXBlZGVmIHR5cGVzLiAgVGhlc2UgYXJlIGluIHRoZSByZXZlcnNlIG9mIHRoZSBvcmRlcgorICAgICAgc3VwcGxpZWQuICBUaGVyZSBtYXkgYmUgT1ZFUkxPQURzIG9uIHRoaXMgbGlzdCwgdG9vLCBidXQgdGhleQorICAgICAgYXJlIHdyYXBwZWQgaW4gVFJFRV9MSVNUczsgdGhlIFRSRUVfVkFMVUUgaXMgdGhlIE9WRVJMT0FELiAgKi8KKyAgdHJlZSBuYW1lczsKKworICAvKiBBIGNoYWluIG9mIE5BTUVTUEFDRV9ERUNMIG5vZGVzLiAgKi8KKyAgdHJlZSBuYW1lc3BhY2VzOworCisgIC8qIEFuIGFycmF5IG9mIHN0YXRpYyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyAoZm9yIG5hbWVzcGFjZXMgb25seSkgKi8KKyAgdmVjPHRyZWUsIHZhX2djPiAqc3RhdGljX2RlY2xzOworCisgIC8qIEEgbGlzdCBvZiBVU0lOR19ERUNMIG5vZGVzLiAgKi8KKyAgdHJlZSB1c2luZ3M7CisKKyAgLyogQSBsaXN0IG9mIHVzZWQgbmFtZXNwYWNlcy4gUFVSUE9TRSBpcyB0aGUgbmFtZXNwYWNlLAorICAgICAgVkFMVUUgdGhlIGNvbW1vbiBhbmNlc3RvciB3aXRoIHRoaXMgYmluZGluZ19sZXZlbCdzIG5hbWVzcGFjZS4gICovCisgIHRyZWUgdXNpbmdfZGlyZWN0aXZlczsKKworICAvKiBGb3IgdGhlIGJpbmRpbmcgbGV2ZWwgY29ycmVzcG9uZGluZyB0byBhIGNsYXNzLCB0aGUgZW50aXRpZXMKKyAgICAgIGRlY2xhcmVkIGluIHRoZSBjbGFzcyBvciBpdHMgYmFzZSBjbGFzc2VzLiAgKi8KKyAgdmVjPGNwX2NsYXNzX2JpbmRpbmcsIHZhX2djPiAqY2xhc3Nfc2hhZG93ZWQ7CisKKyAgLyogU2ltaWxhciB0byBjbGFzc19zaGFkb3dlZCwgYnV0IGZvciBJREVOVElGSUVSX1RZUEVfVkFMVUUsIGFuZAorICAgICAgaXMgdXNlZCBmb3IgYWxsIGJpbmRpbmcgbGV2ZWxzLiBUaGUgVFJFRV9QVVJQT1NFIGlzIHRoZSBuYW1lIG9mCisgICAgICB0aGUgZW50aXR5LCB0aGUgVFJFRV9UWVBFIGlzIHRoZSBhc3NvY2lhdGVkIHR5cGUuICBJbiBhZGRpdGlvbgorICAgICAgdGhlIFRSRUVfVkFMVUUgaXMgdGhlIElERU5USUZJRVJfVFlQRV9WQUxVRSBiZWZvcmUgd2UgZW50ZXJlZAorICAgICAgdGhlIGNsYXNzLiAgKi8KKyAgdHJlZSB0eXBlX3NoYWRvd2VkOworCisgIC8qIFNpbWlsYXIgdG8gY2xhc3Nfc2hhZG93ZWQsIGJ1dCBmb3IgSURFTlRJRklFUl9MQUJFTF9WQUxVRSwgYW5kCisgICAgICB1c2VkIGZvciBhbGwgYmluZGluZyBsZXZlbHMuICAqLworICB2ZWM8Y3BfbGFiZWxfYmluZGluZywgdmFfZ2M+ICpzaGFkb3dlZF9sYWJlbHM7CisKKyAgLyogRm9yIGVhY2ggbGV2ZWwgKGV4Y2VwdCBub3QgdGhlIGdsb2JhbCBvbmUpLAorICAgICAgYSBjaGFpbiBvZiBCTE9DSyBub2RlcyBmb3IgYWxsIHRoZSBsZXZlbHMKKyAgICAgIHRoYXQgd2VyZSBlbnRlcmVkIGFuZCBleGl0ZWQgb25lIGxldmVsIGRvd24uICAqLworICB0cmVlIGJsb2NrczsKKworICAvKiBUaGUgZW50aXR5IChuYW1lc3BhY2UsIGNsYXNzLCBmdW5jdGlvbikgdGhlIHNjb3BlIG9mIHdoaWNoIHRoaXMKKyAgICAgIGJpbmRpbmcgY29udG91ciBjb3JyZXNwb25kcyB0by4gIE90aGVyd2lzZSBOVUxMLiAgKi8KKyAgdHJlZSB0aGlzX2VudGl0eTsKKworICAvKiBUaGUgYmluZGluZyBsZXZlbCB3aGljaCB0aGlzIG9uZSBpcyBjb250YWluZWQgaW4gKGluaGVyaXRzIGZyb20pLiAgKi8KKyAgY3BfYmluZGluZ19sZXZlbCAqbGV2ZWxfY2hhaW47CisKKyAgLyogTGlzdCBvZiBWQVJfREVDTFMgc2F2ZWQgZnJvbSBhIHByZXZpb3VzIGZvciBzdGF0ZW1lbnQuCisgICAgICBUaGVzZSB3b3VsZCBiZSBkZWFkIGluIElTTy1jb25mb3JtaW5nIGNvZGUsIGJ1dCBtaWdodAorICAgICAgYmUgcmVmZXJlbmNlZCBpbiBBUk0tZXJhIGNvZGUuICAqLworICB2ZWM8dHJlZSwgdmFfZ2M+ICpkZWFkX3ZhcnNfZnJvbV9mb3I7CisKKyAgLyogU1RBVEVNRU5UX0xJU1QgZm9yIHN0YXRlbWVudHMgaW4gdGhpcyBiaW5kaW5nIGNvbnRvdXIuCisgICAgICBPbmx5IHVzZWQgYXQgcHJlc2VudCBmb3IgU0tfQ0xFQU5VUCB0ZW1wb3JhcnkgYmluZGluZ3MuICAqLworICB0cmVlIHN0YXRlbWVudF9saXN0OworCisgIC8qIEJpbmRpbmcgZGVwdGggYXQgd2hpY2ggdGhpcyBsZXZlbCBiZWdhbi4gICovCisgIGludCBiaW5kaW5nX2RlcHRoOworCisgIC8qIFRoZSBraW5kIG9mIHNjb3BlIHRoYXQgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gIEhvd2V2ZXIsIGEKKyAgICAgIFNLX1RFTVBMQVRFX1NQRUMgc2NvcGUgaXMgcmVwcmVzZW50ZWQgd2l0aCBLSU5EIHNldCB0bworICAgICAgU0tfVEVNUExBVEVfUEFSTVMgYW5kIEVYUExJQ0lUX1NQRUNfUCBzZXQgdG8gdHJ1ZS4gICovCisgIEVOVU1fQklURklFTEQgKHNjb3BlX2tpbmQpIGtpbmQgOiA0OworCisgIC8qIFRydWUgaWYgdGhpcyBzY29wZSBpcyBhbiBTS19URU1QTEFURV9TUEVDIHNjb3BlLiAgVGhpcyBmaWVsZCBpcworICAgICAgb25seSB2YWxpZCBpZiBLSU5EID09IFNLX1RFTVBMQVRFX1BBUk1TLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBleHBsaWNpdF9zcGVjX3AgOiAxOworCisgIC8qIHRydWUgbWVhbnMgbWFrZSBhIEJMT0NLIGZvciB0aGlzIGxldmVsIHJlZ2FyZGxlc3Mgb2YgYWxsIGVsc2UuICAqLworICB1bnNpZ25lZCBrZWVwIDogMTsKKworICAvKiBOb256ZXJvIGlmIHRoaXMgbGV2ZWwgY2FuIHNhZmVseSBoYXZlIGFkZGl0aW9uYWwKKyAgICAgIGNsZWFudXAtbmVlZGluZyB2YXJpYWJsZXMgYWRkZWQgdG8gaXQuICAqLworICB1bnNpZ25lZCBtb3JlX2NsZWFudXBzX29rIDogMTsKKyAgdW5zaWduZWQgaGF2ZV9jbGVhbnVwcyA6IDE7CisKKyAgLyogMjQgYml0cyBsZWZ0IHRvIGZpbGwgYSAzMi1iaXQgd29yZC4gICovCit9OworCisvKiBUaGUgYmluZGluZyBsZXZlbCBjdXJyZW50bHkgaW4gZWZmZWN0LiAgKi8KKworI2RlZmluZSBjdXJyZW50X2JpbmRpbmdfbGV2ZWwJCQlcCisgICgqKGNmdW4gJiYgY3BfZnVuY3Rpb25fY2hhaW4gJiYgY3BfZnVuY3Rpb25fY2hhaW4tPmJpbmRpbmdzIFwKKyAgID8gJmNwX2Z1bmN0aW9uX2NoYWluLT5iaW5kaW5ncwkJXAorICAgOiAmc2NvcGVfY2hhaW4tPmJpbmRpbmdzKSkKKworLyogVGhlIGJpbmRpbmcgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgY2xhc3MsIGlmIGFueS4gICovCisKKyNkZWZpbmUgY2xhc3NfYmluZGluZ19sZXZlbCBzY29wZV9jaGFpbi0+Y2xhc3NfYmluZGluZ3MKKworLyogVGhlIHRyZWUgbm9kZSByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCBzY29wZS4gICovCitleHRlcm4gR1RZKCgpKSB0cmVlIGdsb2JhbF9uYW1lc3BhY2U7CitleHRlcm4gR1RZKCgpKSB0cmVlIGdsb2JhbF9zY29wZV9uYW1lOworCisvKiBJbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIHR5cGUgdmFsdWUgaW4gc29tZSBuYW1lc3BhY2UsIGFsdGhvdWdoCisgICB0aGF0IGlzIG5vdCBuZWNlc3NhcmlseSBpbiBzY29wZSBhdCB0aGUgbW9tZW50LiAgKi8KKworZXh0ZXJuIEdUWSgoKSkgdHJlZSBnbG9iYWxfdHlwZV9ub2RlOworCisvKiBUcnVlIGlmIFNDT1BFIGRlc2lnbmF0ZXMgdGhlIGdsb2JhbCBzY29wZSBiaW5kaW5nIGNvbnRvdXIuICAqLworI2RlZmluZSBnbG9iYWxfc2NvcGVfcChTQ09QRSkgXAorICAoKFNDT1BFKSA9PSBOQU1FU1BBQ0VfTEVWRUwgKGdsb2JhbF9uYW1lc3BhY2UpKQorCitleHRlcm4gY3BfYmluZGluZ19sZXZlbCAqbGVhdmVfc2NvcGUgKHZvaWQpOworZXh0ZXJuIGJvb2wga2VwdF9sZXZlbF9wICh2b2lkKTsKK2V4dGVybiBib29sIGdsb2JhbF9iaW5kaW5nc19wICh2b2lkKTsKK2V4dGVybiBib29sIHRvcGxldmVsX2JpbmRpbmdzX3AJKHZvaWQpOworZXh0ZXJuIGJvb2wgbmFtZXNwYWNlX2JpbmRpbmdzX3AgKHZvaWQpOworZXh0ZXJuIGJvb2wgbG9jYWxfYmluZGluZ3NfcCAodm9pZCk7CitleHRlcm4gYm9vbCB0ZW1wbGF0ZV9wYXJtX3Njb3BlX3AgKHZvaWQpOworZXh0ZXJuIHNjb3BlX2tpbmQgaW5uZXJtb3N0X3Njb3BlX2tpbmQgKHZvaWQpOworZXh0ZXJuIGNwX2JpbmRpbmdfbGV2ZWwgKmJlZ2luX3Njb3BlIChzY29wZV9raW5kLCB0cmVlKTsKK2V4dGVybiB2b2lkIHByaW50X2JpbmRpbmdfc3RhY2sJKHZvaWQpOworZXh0ZXJuIHZvaWQgcHVzaF90b190b3BfbGV2ZWwgKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9wX2Zyb21fdG9wX2xldmVsICh2b2lkKTsKK2V4dGVybiB2b2lkIHBvcF9ldmVyeXRoaW5nICh2b2lkKTsKK2V4dGVybiB2b2lkIGtlZXBfbmV4dF9sZXZlbCAoYm9vbCk7CitleHRlcm4gYm9vbCBpc19hbmNlc3RvciAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBwdXNoX3Njb3BlICh0cmVlKTsKK2V4dGVybiB2b2lkIHBvcF9zY29wZSAodHJlZSk7CitleHRlcm4gdHJlZSBwdXNoX2lubmVyX3Njb3BlICh0cmVlKTsKK2V4dGVybiB2b2lkIHBvcF9pbm5lcl9zY29wZSAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBwdXNoX2JpbmRpbmdfbGV2ZWwgKGNwX2JpbmRpbmdfbGV2ZWwgKik7CisMCitleHRlcm4gdm9pZCBwdXNoX25hbWVzcGFjZSAodHJlZSk7CitleHRlcm4gdm9pZCBwb3BfbmFtZXNwYWNlICh2b2lkKTsKK2V4dGVybiB2b2lkIHB1c2hfbmVzdGVkX25hbWVzcGFjZSAodHJlZSk7CitleHRlcm4gdm9pZCBwb3BfbmVzdGVkX25hbWVzcGFjZSAodHJlZSk7CitleHRlcm4gYm9vbCBoYW5kbGVfbmFtZXNwYWNlX2F0dHJzICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHB1c2hsZXZlbF9jbGFzcyAodm9pZCk7CitleHRlcm4gdm9pZCBwb3BsZXZlbF9jbGFzcyAodm9pZCk7CitleHRlcm4gdHJlZSBwdXNoZGVjbF93aXRoX3Njb3BlICh0cmVlLCBjcF9iaW5kaW5nX2xldmVsICosIGJvb2wpOworZXh0ZXJuIHRyZWUgbG9va3VwX25hbWVfcHJlZmVyX3R5cGUgKHRyZWUsIGludCk7CitleHRlcm4gdHJlZSBsb29rdXBfbmFtZV9yZWFsICh0cmVlLCBpbnQsIGludCwgYm9vbCwgaW50LCBpbnQpOworZXh0ZXJuIHRyZWUgbG9va3VwX3R5cGVfc2NvcGUgKHRyZWUsIHRhZ19zY29wZSk7CitleHRlcm4gdHJlZSBuYW1lc3BhY2VfYmluZGluZyAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBzZXRfbmFtZXNwYWNlX2JpbmRpbmcgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgaGlkZGVuX25hbWVfcCAodHJlZSk7CitleHRlcm4gdHJlZSByZW1vdmVfaGlkZGVuX25hbWVzICh0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9xdWFsaWZpZWRfbmFtZSAodHJlZSwgdHJlZSwgYm9vbCwgYm9vbCk7CitleHRlcm4gdHJlZSBsb29rdXBfbmFtZV9ub25jbGFzcyAodHJlZSk7CitleHRlcm4gdHJlZSBsb29rdXBfbmFtZV9pbm5lcm1vc3Rfbm9uY2xhc3NfbGV2ZWwgKHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfbG9jYWxfZXh0ZXJuICh0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF9mdW5jdGlvbl9ub25jbGFzcyAodHJlZSwgdmVjPHRyZWUsIHZhX2djPiAqLCBib29sKTsKK2V4dGVybiB2b2lkIHB1c2hfbG9jYWxfYmluZGluZyAodHJlZSwgdHJlZSwgaW50KTsKK2V4dGVybiBib29sIHB1c2hkZWNsX2NsYXNzX2xldmVsICh0cmVlKTsKK2V4dGVybiB0cmVlIHB1c2hkZWNsX25hbWVzcGFjZV9sZXZlbCAodHJlZSwgYm9vbCk7CitleHRlcm4gYm9vbCBwdXNoX2NsYXNzX2xldmVsX2JpbmRpbmcgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0ZGVjbHMgKHZvaWQpOworZXh0ZXJuIGludCBmdW5jdGlvbl9wYXJtX2RlcHRoICh2b2lkKTsKK2V4dGVybiB0cmVlIGNwX25hbWVzcGFjZV9kZWNscyAodHJlZSk7CitleHRlcm4gdm9pZCBzZXRfZGVjbF9uYW1lc3BhY2UgKHRyZWUsIHRyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgcHVzaF9kZWNsX25hbWVzcGFjZSAodHJlZSk7CitleHRlcm4gdm9pZCBwb3BfZGVjbF9uYW1lc3BhY2UgKHZvaWQpOworZXh0ZXJuIHZvaWQgZG9fbmFtZXNwYWNlX2FsaWFzICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGRvX3RvcGxldmVsX3VzaW5nX2RlY2wgKHRyZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZG9fbG9jYWxfdXNpbmdfZGVjbCAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBkb19jbGFzc191c2luZ19kZWNsICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGRvX3VzaW5nX2RpcmVjdGl2ZSAodHJlZSk7CitleHRlcm4gdHJlZSBsb29rdXBfYXJnX2RlcGVuZGVudCAodHJlZSwgdHJlZSwgdmVjPHRyZWUsIHZhX2djPiAqLCBib29sKTsKK2V4dGVybiBib29sIGlzX2Fzc29jaWF0ZWRfbmFtZXNwYWNlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHBhcnNlX3VzaW5nX2RpcmVjdGl2ZSAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBpbm5lcm1vc3Rfbm9uX25hbWVzcGFjZV92YWx1ZSAodHJlZSk7CitleHRlcm4gY3h4X2JpbmRpbmcgKm91dGVyX2JpbmRpbmcgKHRyZWUsIGN4eF9iaW5kaW5nICosIGJvb2wpOworZXh0ZXJuIHZvaWQgY3BfZW1pdF9kZWJ1Z19pbmZvX2Zvcl91c2luZyAodHJlZSwgdHJlZSk7CisKKy8qIFNldCAqREVDTCB0byB0aGUgKG5vbi1oaWRkZW4pIGRlY2xhcmF0aW9uIGZvciBJRCBhdCBnbG9iYWwgc2NvcGUsCisgICBpZiBwcmVzZW50IGFuZCByZXR1cm4gdHJ1ZTsgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2V0X2dsb2JhbF92YWx1ZV9pZl9wcmVzZW50ICh0cmVlIGlkLCB0cmVlICpkZWNsKQoreworICB0cmVlIGdsb2JhbF92YWx1ZSA9IG5hbWVzcGFjZV9iaW5kaW5nIChpZCwgZ2xvYmFsX25hbWVzcGFjZSk7CisgIGlmIChnbG9iYWxfdmFsdWUpCisgICAgKmRlY2wgPSBnbG9iYWxfdmFsdWU7CisgIHJldHVybiBnbG9iYWxfdmFsdWUgIT0gTlVMTDsKK30KKworLyogVHJ1ZSBpcyB0aGUgYmluZGluZyBvZiBJREVOVElGSUVSIGF0IGdsb2JhbCBzY29wZSBuYW1lcyBhIHR5cGUuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX3R5cGVuYW1lX2F0X2dsb2JhbF9zY29wZSAodHJlZSBpZCkKK3sKKyAgdHJlZSBnbG9iYWxfdmFsdWUgPSBuYW1lc3BhY2VfYmluZGluZyAoaWQsIGdsb2JhbF9uYW1lc3BhY2UpOworCisgIHJldHVybiBnbG9iYWxfdmFsdWUgJiYgVFJFRV9DT0RFIChnbG9iYWxfdmFsdWUpID09IFRZUEVfREVDTDsKK30KKworI2VuZGlmIC8qIEdDQ19DUF9OQU1FX0xPT0tVUF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvY3BwZGVmYXVsdC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NwcGRlZmF1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDUyNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NwcGRlZmF1bHQuaApAQCAtMCwwICsxLDcxIEBACisvKiBDUFAgTGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMTk4Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgUGVyIEJvdGhuZXIsIDE5OTQtOTUuCisgICBCYXNlZCBvbiBDQ0NQIHByb2dyYW0gYnkgUGF1bCBSdWJpbiwgSnVuZSAxOTg2CisgICBBZGFwdGVkIHRvIEFOU0kgQywgUmljaGFyZCBTdGFsbG1hbiwgSmFuIDE5ODcKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19DUFBERUZBVUxUX0gKKyNkZWZpbmUgR0NDX0NQUERFRkFVTFRfSAorCisvKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBpbmNsdWRlIGZpbGVzLgorICAgSXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIHZhcmlvdXMgLUkgYW5kIC1peHh4IG9wdGlvbnMuCisKKyAgICNpbmNsdWRlICJmaWxlIiBsb29rcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGN1cnJlbnQgZmlsZSwKKyAgIHRoZW4gdGhpcyBsaXN0LgorICAgI2luY2x1ZGUgPGZpbGU+IGp1c3QgbG9va3MgaW4gdGhpcyBsaXN0LgorCisgICBBbGwgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHRyZWF0ZWQgYXMgYHN5c3RlbScgaW5jbHVkZSBkaXJlY3RvcmllcworICAgKHRoZXkgYXJlIG5vdCBzdWJqZWN0IHRvIHBlZGFudGljIHdhcm5pbmdzIGluIHNvbWUgY2FzZXMpLiAgKi8KKworc3RydWN0IGRlZmF1bHRfaW5jbHVkZQoreworICBjb25zdCBjaGFyICpjb25zdCBmbmFtZTsJLyogVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeS4gICovCisgIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBvbmVudDsJLyogVGhlIGNvbXBvbmVudCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKwkJCQkgICAoc2VlIHVwZGF0ZV9wYXRoIGluIHByZWZpeC5jKSAqLworICBjb25zdCBjaGFyIGNwbHVzcGx1czsJCS8qIE9ubHkgbG9vayBoZXJlIGlmIHdlJ3JlIGNvbXBpbGluZyBDKysuICAqLworICBjb25zdCBjaGFyIGN4eF9hd2FyZTsJCS8qIEluY2x1ZGVzIGluIHRoaXMgZGlyZWN0b3J5IGRvbid0IG5lZWQgdG8KKwkJCQkgICBiZSB3cmFwcGVkIGluIGV4dGVybiAiQyIgd2hlbiBjb21waWxpbmcKKwkJCQkgICBDKysuICAqLworICBjb25zdCBjaGFyIGFkZF9zeXNyb290OwkvKiBGTkFNRSBzaG91bGQgYmUgcHJlZml4ZWQgYnkKKwkJCQkgICBjcHBfU1lTUk9PVC4gICovCisgIGNvbnN0IGNoYXIgbXVsdGlsaWI7CQkvKiBGTkFNRSBzaG91bGQgaGF2ZSBhcHBlbmRlZAorCQkJCSAgIC0gdGhlIG11bHRpbGliIHBhdGggc3BlY2lmaWVkIHdpdGggLWltdWx0aWxpYgorCQkJCSAgICAgd2hlbiBzZXQgdG8gMSwKKwkJCQkgICAtIHRoZSBtdWx0aWFyY2ggcGF0aCBzcGVjaWZpZWQgd2l0aAorCQkJCSAgICAgLWltdWx0aWFyY2gsIHdoZW4gc2V0IHRvIDIuICAqLworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXTsKK2V4dGVybiBjb25zdCBjaGFyIGNwcF9HQ0NfSU5DTFVERV9ESVJbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgY3BwX0dDQ19JTkNMVURFX0RJUl9sZW47CisKKy8qIFRoZSBjb25maWd1cmUtdGltZSBwcmVmaXgsIGkuZS4sIHRoZSB2YWx1ZSBzdXBwbGllZCBhcyB0aGUgYXJndW1lbnQKKyAgIHRvIC0tcHJlZml4PS4gICovCitleHRlcm4gY29uc3QgY2hhciBjcHBfUFJFRklYW107CisvKiBUaGUgbGVuZ3RoIG9mIHRoZSBjb25maWd1cmUtdGltZSBwcmVmaXguICAqLworZXh0ZXJuIGNvbnN0IHNpemVfdCBjcHBfUFJFRklYX2xlbjsKKy8qIFRoZSBjb25maWd1cmUtdGltZSBleGVjdXRpb24gcHJlZml4LiAgVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGxpYi9nY2MKKyAgIHN1YmRpcmVjdG9yeSBvZiBjcHBfUFJFRklYLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyIGNwcF9FWEVDX1BSRUZJWFtdOworLyogVGhlIHJ1bi10aW1lIGV4ZWN1dGlvbiBwcmVmaXguICBUaGlzIGlzIHR5cGljYWxseSB0aGUgbGliL2djYworICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBhY3R1YWwgaW5zdGFsbGF0aW9uLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpnY2NfZXhlY19wcmVmaXg7CisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSB0b29sY2hhaW4gaXMgcmVsb2NhdGVkLiAgKi8KK2Jvb2wgY3BwX3JlbG9jYXRlZCAodm9pZCk7CisKKyNlbmRpZiAvKiAhIEdDQ19DUFBERUZBVUxUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jcHBsaWIuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9jcHBsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDhhYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2NwcGxpYi5oCkBAIC0wLDAgKzEsMTA1OSBAQAorLyogRGVmaW5pdGlvbnMgZm9yIENQUCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IFBlciBCb3RobmVyLCAxOTk0LTk1LgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCisgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKKyB3aGF0IHlvdSBnaXZlIHRoZW0uICAgSGVscCBzdGFtcCBvdXQgc29mdHdhcmUtaG9hcmRpbmchICAqLworI2lmbmRlZiBMSUJDUFBfQ1BQTElCX0gKKyNkZWZpbmUgTElCQ1BQX0NQUExJQl9ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJsaW5lLW1hcC5oIgorCit0eXBlZGVmIHN0cnVjdCBjcHBfcmVhZGVyIGNwcF9yZWFkZXI7Cit0eXBlZGVmIHN0cnVjdCBjcHBfYnVmZmVyIGNwcF9idWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBjcHBfb3B0aW9ucyBjcHBfb3B0aW9uczsKK3R5cGVkZWYgc3RydWN0IGNwcF90b2tlbiBjcHBfdG9rZW47Cit0eXBlZGVmIHN0cnVjdCBjcHBfc3RyaW5nIGNwcF9zdHJpbmc7Cit0eXBlZGVmIHN0cnVjdCBjcHBfaGFzaG5vZGUgY3BwX2hhc2hub2RlOwordHlwZWRlZiBzdHJ1Y3QgY3BwX21hY3JvIGNwcF9tYWNybzsKK3R5cGVkZWYgc3RydWN0IGNwcF9jYWxsYmFja3MgY3BwX2NhbGxiYWNrczsKK3R5cGVkZWYgc3RydWN0IGNwcF9kaXIgY3BwX2RpcjsKKworc3RydWN0IGFuc3dlcjsKK3N0cnVjdCBfY3BwX2ZpbGU7CisKKy8qIFRoZSBmaXJzdCB0aHJlZSBncm91cHMsIGFwYXJ0IGZyb20gJz0nLCBjYW4gYXBwZWFyIGluIHByZXByb2Nlc3NvcgorICAgZXhwcmVzc2lvbnMgKCs9IGFuZCAtPSBhcmUgdXNlZCB0byBpbmRpY2F0ZSB1bmFyeSArIGFuZCAtIHJlc3AuKS4KKyAgIFRoaXMgYWxsb3dzIGEgbG9va3VwIHRhYmxlIHRvIGJlIGltcGxlbWVudGVkIGluIF9jcHBfcGFyc2VfZXhwci4KKworICAgVGhlIGZpcnN0IGdyb3VwLCB0byBDUFBfTEFTVF9FUSwgY2FuIGJlIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFuCisgICAnPScuICBUaGUgbGV4ZXIgbmVlZHMgb3BlcmF0b3JzIGVuZGluZyBpbiAnPScsIGxpa2UgIj4+PSIsIHRvIGJlIGluCisgICB0aGUgc2FtZSBvcmRlciBhcyB0aGVpciBjb3VudGVycGFydHMgd2l0aG91dCB0aGUgJz0nLCBsaWtlICI+PiIuCisKKyAgIFNlZSB0aGUgY3BwX29wZXJhdG9yIHRhYmxlIG9wdGFiIGluIGV4cHIuYyBpZiB5b3UgY2hhbmdlIHRoZSBvcmRlciBvcgorICAgYWRkIG9yIHJlbW92ZSBhbnl0aGluZyBpbiB0aGUgZmlyc3QgZ3JvdXAuICAqLworCisjZGVmaW5lIFRUWVBFX1RBQkxFCQkJCQkJCVwKKyAgT1AoRVEsCQkiPSIpCQkJCQkJXAorICBPUChOT1QsCQkiISIpCQkJCQkJXAorICBPUChHUkVBVEVSLAkJIj4iKQkvKiBjb21wYXJlICovCQkJCVwKKyAgT1AoTEVTUywJCSI8IikJCQkJCQlcCisgIE9QKFBMVVMsCQkiKyIpCS8qIG1hdGggKi8JCQkJXAorICBPUChNSU5VUywJCSItIikJCQkJCQlcCisgIE9QKE1VTFQsCQkiKiIpCQkJCQkJXAorICBPUChESVYsCQkiLyIpCQkJCQkJXAorICBPUChNT0QsCQkiJSIpCQkJCQkJXAorICBPUChBTkQsCQkiJiIpCS8qIGJpdCBvcHMgKi8JCQkJXAorICBPUChPUiwJCSJ8IikJCQkJCQlcCisgIE9QKFhPUiwJCSJeIikJCQkJCQlcCisgIE9QKFJTSElGVCwJCSI+PiIpCQkJCQkJXAorICBPUChMU0hJRlQsCQkiPDwiKQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgT1AoQ09NUEwsCQkifiIpCQkJCQkJXAorICBPUChBTkRfQU5ELAkJIiYmIikJLyogbG9naWNhbCAqLwkJCQlcCisgIE9QKE9SX09SLAkJInx8IikJCQkJCQlcCisgIE9QKFFVRVJZLAkJIj8iKQkJCQkJCVwKKyAgT1AoQ09MT04sCQkiOiIpCQkJCQkJXAorICBPUChDT01NQSwJCSIsIikJLyogZ3JvdXBpbmcgKi8JCQkJXAorICBPUChPUEVOX1BBUkVOLAkiKCIpCQkJCQkJXAorICBPUChDTE9TRV9QQVJFTiwJIikiKQkJCQkJCVwKKyAgVEsoRU9GLAkJTk9ORSkJCQkJCQlcCisgIE9QKEVRX0VRLAkJIj09IikJLyogY29tcGFyZSAqLwkJCQlcCisgIE9QKE5PVF9FUSwJCSIhPSIpCQkJCQkJXAorICBPUChHUkVBVEVSX0VRLAkiPj0iKQkJCQkJCVwKKyAgT1AoTEVTU19FUSwJCSI8PSIpCQkJCQkJXAorCQkJCQkJCQkJXAorICAvKiBUaGVzZSB0d28gYXJlIHVuYXJ5ICsgLyAtIGluIHByZXByb2Nlc3NvciBleHByZXNzaW9ucy4gICovCQlcCisgIE9QKFBMVVNfRVEsCQkiKz0iKQkvKiBtYXRoICovCQkJCVwKKyAgT1AoTUlOVVNfRVEsCQkiLT0iKQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgT1AoTVVMVF9FUSwJCSIqPSIpCQkJCQkJXAorICBPUChESVZfRVEsCQkiLz0iKQkJCQkJCVwKKyAgT1AoTU9EX0VRLAkJIiU9IikJCQkJCQlcCisgIE9QKEFORF9FUSwJCSImPSIpCS8qIGJpdCBvcHMgKi8JCQkJXAorICBPUChPUl9FUSwJCSJ8PSIpCQkJCQkJXAorICBPUChYT1JfRVEsCQkiXj0iKQkJCQkJCVwKKyAgT1AoUlNISUZUX0VRLAkJIj4+PSIpCQkJCQkJXAorICBPUChMU0hJRlRfRVEsCQkiPDw9IikJCQkJCQlcCisgIC8qIERpZ3JhcGhzIHRvZ2V0aGVyLCBiZWdpbm5pbmcgd2l0aCBDUFBfRklSU1RfRElHUkFQSC4gICovCQlcCisgIE9QKEhBU0gsCQkiIyIpCS8qIGRpZ3JhcGhzICovCQkJCVwKKyAgT1AoUEFTVEUsCQkiIyMiKQkJCQkJCVwKKyAgT1AoT1BFTl9TUVVBUkUsCSJbIikJCQkJCQlcCisgIE9QKENMT1NFX1NRVUFSRSwJIl0iKQkJCQkJCVwKKyAgT1AoT1BFTl9CUkFDRSwJInsiKQkJCQkJCVwKKyAgT1AoQ0xPU0VfQlJBQ0UsCSJ9IikJCQkJCQlcCisgIC8qIFRoZSByZW1haW5kZXIgb2YgdGhlIHB1bmN0dWF0aW9uLglPcmRlciBpcyBub3Qgc2lnbmlmaWNhbnQuICAqLwlcCisgIE9QKFNFTUlDT0xPTiwJCSI7IikJLyogc3RydWN0dXJlICovCQkJCVwKKyAgT1AoRUxMSVBTSVMsCQkiLi4uIikJCQkJCQlcCisgIE9QKFBMVVNfUExVUywJCSIrKyIpCS8qIGluY3JlbWVudCAqLwkJCQlcCisgIE9QKE1JTlVTX01JTlVTLAkiLS0iKQkJCQkJCVwKKyAgT1AoREVSRUYsCQkiLT4iKQkvKiBhY2Nlc3NvcnMgKi8JCQkJXAorICBPUChET1QsCQkiLiIpCQkJCQkJXAorICBPUChTQ09QRSwJCSI6OiIpCQkJCQkJXAorICBPUChERVJFRl9TVEFSLAkiLT4qIikJCQkJCQlcCisgIE9QKERPVF9TVEFSLAkJIi4qIikJCQkJCQlcCisgIE9QKEFUU0lHTiwJCSJAIikgIC8qIHVzZWQgaW4gT2JqZWN0aXZlLUMgKi8JCQlcCisJCQkJCQkJCQlcCisgIFRLKE5BTUUsCQlJREVOVCkJIC8qIHdvcmQgKi8JCQkJXAorICBUSyhBVF9OQU1FLAkJSURFTlQpCSAvKiBAd29yZCAtIE9iamVjdGl2ZS1DICovCQlcCisgIFRLKE5VTUJFUiwJCUxJVEVSQUwpIC8qIDM0X2JlK3RhICAqLwkJCVwKKwkJCQkJCQkJCVwKKyAgVEsoQ0hBUiwJCUxJVEVSQUwpIC8qICdjaGFyJyAqLwkJCQlcCisgIFRLKFdDSEFSLAkJTElURVJBTCkgLyogTCdjaGFyJyAqLwkJCQlcCisgIFRLKENIQVIxNiwJCUxJVEVSQUwpIC8qIHUnY2hhcicgKi8JCQkJXAorICBUSyhDSEFSMzIsCQlMSVRFUkFMKSAvKiBVJ2NoYXInICovCQkJCVwKKyAgVEsoT1RIRVIsCQlMSVRFUkFMKSAvKiBzdHJheSBwdW5jdHVhdGlvbiAqLwkJXAorCQkJCQkJCQkJXAorICBUSyhTVFJJTkcsCQlMSVRFUkFMKSAvKiAic3RyaW5nIiAqLwkJCQlcCisgIFRLKFdTVFJJTkcsCQlMSVRFUkFMKSAvKiBMInN0cmluZyIgKi8JCQlcCisgIFRLKFNUUklORzE2LAkJTElURVJBTCkgLyogdSJzdHJpbmciICovCQkJXAorICBUSyhTVFJJTkczMiwJCUxJVEVSQUwpIC8qIFUic3RyaW5nIiAqLwkJCVwKKyAgVEsoVVRGOFNUUklORywJTElURVJBTCkgLyogdTgic3RyaW5nIiAqLwkJCVwKKyAgVEsoT0JKQ19TVFJJTkcsCUxJVEVSQUwpIC8qIEAic3RyaW5nIiAtIE9iamVjdGl2ZS1DICovCQlcCisgIFRLKEhFQURFUl9OQU1FLAlMSVRFUkFMKSAvKiA8c3RkaW8uaD4gaW4gI2luY2x1ZGUgKi8JCVwKKwkJCQkJCQkJCVwKKyAgVEsoQ0hBUl9VU0VSREVGLAlMSVRFUkFMKSAvKiAnY2hhcidfc3VmZml4IC0gQysrLTB4ICovCQlcCisgIFRLKFdDSEFSX1VTRVJERUYsCUxJVEVSQUwpIC8qIEwnY2hhcidfc3VmZml4IC0gQysrLTB4ICovCQlcCisgIFRLKENIQVIxNl9VU0VSREVGLAlMSVRFUkFMKSAvKiB1J2NoYXInX3N1ZmZpeCAtIEMrKy0weCAqLwkJXAorICBUSyhDSEFSMzJfVVNFUkRFRiwJTElURVJBTCkgLyogVSdjaGFyJ19zdWZmaXggLSBDKystMHggKi8JCVwKKyAgVEsoU1RSSU5HX1VTRVJERUYsCUxJVEVSQUwpIC8qICJzdHJpbmciX3N1ZmZpeCAtIEMrKy0weCAqLwkJXAorICBUSyhXU1RSSU5HX1VTRVJERUYsCUxJVEVSQUwpIC8qIEwic3RyaW5nIl9zdWZmaXggLSBDKystMHggKi8JXAorICBUSyhTVFJJTkcxNl9VU0VSREVGLAlMSVRFUkFMKSAvKiB1InN0cmluZyJfc3VmZml4IC0gQysrLTB4ICovCVwKKyAgVEsoU1RSSU5HMzJfVVNFUkRFRiwJTElURVJBTCkgLyogVSJzdHJpbmciX3N1ZmZpeCAtIEMrKy0weCAqLwlcCisgIFRLKFVURjhTVFJJTkdfVVNFUkRFRixMSVRFUkFMKSAvKiB1OCJzdHJpbmciX3N1ZmZpeCAtIEMrKy0weCAqLwlcCisJCQkJCQkJCQlcCisgIFRLKENPTU1FTlQsCQlMSVRFUkFMKSAvKiBPbmx5IGlmIG91dHB1dCBjb21tZW50cy4gICovCVwKKwkJCQkgLyogU1BFTExfTElURVJBTCBoYXBwZW5zIHRvIERUUlQuICAqLwlcCisgIFRLKE1BQ1JPX0FSRywJCU5PTkUpCSAvKiBNYWNybyBhcmd1bWVudC4gICovCQkJXAorICBUSyhQUkFHTUEsCQlOT05FKQkgLyogT25seSBmb3IgZGVmZXJyZWQgcHJhZ21hcy4gICovCVwKKyAgVEsoUFJBR01BX0VPTCwJTk9ORSkJIC8qIEVuZC1vZi1saW5lIGZvciBkZWZlcnJlZCBwcmFnbWFzLiAgKi8gXAorICBUSyhQQURESU5HLAkJTk9ORSkJIC8qIFdoaXRlc3BhY2UgZm9yIC1FLgkqLworCisjZGVmaW5lIE9QKGUsIHMpIENQUF8gIyMgZSwKKyNkZWZpbmUgVEsoZSwgcykgQ1BQXyAjIyBlLAorZW51bSBjcHBfdHR5cGUKK3sKKyAgVFRZUEVfVEFCTEUKKyAgTl9UVFlQRVMsCisKKyAgLyogUG9zaXRpb25zIGluIHRoZSB0YWJsZS4gICovCisgIENQUF9MQVNUX0VRICAgICAgICA9IENQUF9MU0hJRlQsCisgIENQUF9GSVJTVF9ESUdSQVBIICA9IENQUF9IQVNILAorICBDUFBfTEFTVF9QVU5DVFVBVE9SPSBDUFBfQVRTSUdOLAorICBDUFBfTEFTVF9DUFBfT1AgICAgPSBDUFBfTEVTU19FUQorfTsKKyN1bmRlZiBPUAorI3VuZGVmIFRLCisKKy8qIEMgbGFuZ3VhZ2Uga2luZCwgdXNlZCB3aGVuIGNhbGxpbmcgY3BwX2NyZWF0ZV9yZWFkZXIuICAqLworZW51bSBjX2xhbmcge0NMS19HTlVDODkgPSAwLCBDTEtfR05VQzk5LCBDTEtfR05VQzExLAorCSAgICAgQ0xLX1NUREM4OSwgQ0xLX1NUREM5NCwgQ0xLX1NUREM5OSwgQ0xLX1NUREMxMSwKKwkgICAgIENMS19HTlVDWFgsIENMS19DWFg5OCwgQ0xLX0dOVUNYWDExLCBDTEtfQ1hYMTEsIENMS19BU019OworCisvKiBQYXlsb2FkIG9mIGEgTlVNQkVSLCBTVFJJTkcsIENIQVIgb3IgQ09NTUVOVCB0b2tlbi4gICovCitzdHJ1Y3QgR1RZKCgpKSBjcHBfc3RyaW5nIHsKKyAgdW5zaWduZWQgaW50IGxlbjsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqdGV4dDsKK307CisKKy8qIEZsYWdzIGZvciB0aGUgY3BwX3Rva2VuIHN0cnVjdHVyZS4gICovCisjZGVmaW5lIFBSRVZfV0hJVEUJKDEgPDwgMCkgLyogSWYgd2hpdGVzcGFjZSBiZWZvcmUgdGhpcyB0b2tlbi4gICovCisjZGVmaW5lIERJR1JBUEgJCSgxIDw8IDEpIC8qIElmIGl0IHdhcyBhIGRpZ3JhcGguICAqLworI2RlZmluZSBTVFJJTkdJRllfQVJHCSgxIDw8IDIpIC8qIElmIG1hY3JvIGFyZ3VtZW50IHRvIGJlIHN0cmluZ2lmaWVkLiAgKi8KKyNkZWZpbmUgUEFTVEVfTEVGVAkoMSA8PCAzKSAvKiBJZiBvbiBMSFMgb2YgYSAjIyBvcGVyYXRvci4gICovCisjZGVmaW5lIE5BTUVEX09QCSgxIDw8IDQpIC8qIEMrKyBuYW1lZCBvcGVyYXRvcnMuICAqLworI2RlZmluZSBOT19FWFBBTkQJKDEgPDwgNSkgLyogRG8gbm90IG1hY3JvLWV4cGFuZCB0aGlzIHRva2VuLiAgKi8KKyNkZWZpbmUgQk9MCQkoMSA8PCA2KSAvKiBUb2tlbiBhdCBiZWdpbm5pbmcgb2YgbGluZS4gICovCisjZGVmaW5lIFBVUkVfWkVSTwkoMSA8PCA3KSAvKiBTaW5nbGUgMCBkaWdpdCwgdXNlZCBieSB0aGUgQysrIGZyb250ZW5kLAorCQkJCSAgICBzZXQgaW4gYy1sZXguYy4gICovCisjZGVmaW5lIFNQX0RJR1JBUEgJKDEgPDwgOCkgLyogIyBvciAjIyB0b2tlbiB3YXMgYSBkaWdyYXBoLiAgKi8KKyNkZWZpbmUgU1BfUFJFVl9XSElURQkoMSA8PCA5KSAvKiBJZiB3aGl0ZXNwYWNlIGJlZm9yZSBhICMjCisJCQkJICAgIG9wZXJhdG9yLCBvciBiZWZvcmUgdGhpcyB0b2tlbgorCQkJCSAgICBhZnRlciBhICMgb3BlcmF0b3IuICAqLworCisvKiBTcGVjaWZ5IHdoaWNoIGZpZWxkLCBpZiBhbnksIG9mIHRoZSBjcHBfdG9rZW4gdW5pb24gaXMgdXNlZC4gICovCisKK2VudW0gY3BwX3Rva2VuX2ZsZF9raW5kIHsKKyAgQ1BQX1RPS0VOX0ZMRF9OT0RFLAorICBDUFBfVE9LRU5fRkxEX1NPVVJDRSwKKyAgQ1BQX1RPS0VOX0ZMRF9TVFIsCisgIENQUF9UT0tFTl9GTERfQVJHX05PLAorICBDUFBfVE9LRU5fRkxEX1RPS0VOX05PLAorICBDUFBfVE9LRU5fRkxEX1BSQUdNQSwKKyAgQ1BQX1RPS0VOX0ZMRF9OT05FCit9OworCisvKiBBIG1hY3JvIGFyZ3VtZW50IGluIHRoZSBjcHBfdG9rZW4gdW5pb24uICAqLworc3RydWN0IEdUWSgoKSkgY3BwX21hY3JvX2FyZyB7CisgIC8qIEFyZ3VtZW50IG51bWJlci4gICovCisgIHVuc2lnbmVkIGludCBhcmdfbm87Cit9OworCisvKiBBbiBpZGVudGlmaWVyIGluIHRoZSBjcHBfdG9rZW4gdW5pb24uICAqLworc3RydWN0IEdUWSgoKSkgY3BwX2lkZW50aWZpZXIgeworICAvKiBUaGUgY2Fub25pY2FsIChVVEYtOCkgc3BlbGxpbmcgb2YgdGhlIGlkZW50aWZpZXIuICAqLworICBjcHBfaGFzaG5vZGUgKgorICAgIEdUWSAoKG5lc3RlZF9wdHIgKHVuaW9uIHRyZWVfbm9kZSwKKwkJIiVoID8gQ1BQX0hBU0hOT0RFIChHQ0NfSURFTlRfVE9fSFRfSURFTlQgKCVoKSkgOiBOVUxMIiwKKwkJCSIlaCA/IEhUX0lERU5UX1RPX0dDQ19JREVOVCAoSFRfTk9ERSAoJWgpKSA6IE5VTEwiKSkpCisgICAgICAgbm9kZTsKK307CisKKy8qIEEgcHJlcHJvY2Vzc2luZyB0b2tlbi4gIFRoaXMgaGFzIGJlZW4gY2FyZWZ1bGx5IHBhY2tlZCBhbmQgc2hvdWxkCisgICBvY2N1cHkgMTYgYnl0ZXMgb24gMzItYml0IGhvc3RzIGFuZCAyNCBieXRlcyBvbiA2NC1iaXQgaG9zdHMuICAqLworc3RydWN0IEdUWSgoKSkgY3BwX3Rva2VuIHsKKyAgc291cmNlX2xvY2F0aW9uIHNyY19sb2M7CS8qIExvY2F0aW9uIG9mIGZpcnN0IGNoYXIgb2YgdG9rZW4uICAqLworICBFTlVNX0JJVEZJRUxEKGNwcF90dHlwZSkgdHlwZSA6IENIQVJfQklUOyAgLyogdG9rZW4gdHlwZSAqLworICB1bnNpZ25lZCBzaG9ydCBmbGFnczsJCS8qIGZsYWdzIC0gc2VlIGFib3ZlICovCisKKyAgdW5pb24gY3BwX3Rva2VuX3UKKyAgeworICAgIC8qIEFuIGlkZW50aWZpZXIuICAqLworICAgIHN0cnVjdCBjcHBfaWRlbnRpZmllciBHVFkgKCh0YWcgKCJDUFBfVE9LRU5fRkxEX05PREUiKSkpIG5vZGU7CisJIAorICAgIC8qIEluaGVyaXQgcGFkZGluZyBmcm9tIHRoaXMgdG9rZW4uICAqLworICAgIGNwcF90b2tlbiAqIEdUWSAoKHRhZyAoIkNQUF9UT0tFTl9GTERfU09VUkNFIikpKSBzb3VyY2U7CisKKyAgICAvKiBBIHN0cmluZywgb3IgbnVtYmVyLiAgKi8KKyAgICBzdHJ1Y3QgY3BwX3N0cmluZyBHVFkgKCh0YWcgKCJDUFBfVE9LRU5fRkxEX1NUUiIpKSkgc3RyOworCisgICAgLyogQXJndW1lbnQgbm8uIGZvciBhIENQUF9NQUNST19BUkcuICAqLworICAgIHN0cnVjdCBjcHBfbWFjcm9fYXJnIEdUWSAoKHRhZyAoIkNQUF9UT0tFTl9GTERfQVJHX05PIikpKSBtYWNyb19hcmc7CisKKyAgICAvKiBPcmlnaW5hbCB0b2tlbiBuby4gZm9yIGEgQ1BQX1BBU1RFIChmcm9tIGEgc2VxdWVuY2Ugb2YKKyAgICAgICBjb25zZWN1dGl2ZSBwYXN0ZSB0b2tlbnMgaW4gYSBtYWNybyBleHBhbnNpb24pLiAgKi8KKyAgICB1bnNpZ25lZCBpbnQgR1RZICgodGFnICgiQ1BQX1RPS0VOX0ZMRF9UT0tFTl9OTyIpKSkgdG9rZW5fbm87CisKKyAgICAvKiBDYWxsZXItc3VwcGxpZWQgaWRlbnRpZmllciBmb3IgYSBDUFBfUFJBR01BLiAgKi8KKyAgICB1bnNpZ25lZCBpbnQgR1RZICgodGFnICgiQ1BQX1RPS0VOX0ZMRF9QUkFHTUEiKSkpIHByYWdtYTsKKyAgfSBHVFkgKChkZXNjICgiY3BwX3Rva2VuX3ZhbF9pbmRleCAoJiUxKSIpKSkgdmFsOworfTsKKworLyogU2F5IHdoaWNoIGZpZWxkIGlzIGluIHVzZS4gICovCitleHRlcm4gZW51bSBjcHBfdG9rZW5fZmxkX2tpbmQgY3BwX3Rva2VuX3ZhbF9pbmRleCAoY3BwX3Rva2VuICp0b2spOworCisvKiBBIHR5cGUgd2lkZSBlbm91Z2ggdG8gaG9sZCBhbnkgbXVsdGlieXRlIHNvdXJjZSBjaGFyYWN0ZXIuCisgICBjcHBsaWIncyBjaGFyYWN0ZXIgY29uc3RhbnQgaW50ZXJwcmV0ZXIgcmVxdWlyZXMgYW4gdW5zaWduZWQgdHlwZS4KKyAgIEFsc28sIGEgdHlwZWRlZiBmb3IgdGhlIHNpZ25lZCBlcXVpdmFsZW50LgorICAgVGhlIHdpZHRoIG9mIHRoaXMgdHlwZSBpcyBjYXBwZWQgYXQgMzIgYml0czsgdGhlcmUgZG8gZXhpc3QgdGFyZ2V0cworICAgd2hlcmUgd2NoYXJfdCBpcyA2NCBiaXRzLCBidXQgb25seSBpbiBhIG5vbi1kZWZhdWx0IG1vZGUsIGFuZCB0aGVyZQorICAgd291bGQgYmUgbm8gbWVhbmluZ2Z1bCBpbnRlcnByZXRhdGlvbiBmb3IgYSB3Y2hhcl90IHZhbHVlIGdyZWF0ZXIKKyAgIHRoYW4gMl4zMiBhbnl3YXkgLS0gdGhlIHdpZGVzdCB3aWRlLWNoYXJhY3RlciBlbmNvZGluZyBhcm91bmQgaXMKKyAgIElTTyAxMDY0Niwgd2hpY2ggc3RvcHMgYXQgMl4zMS4gICovCisjaWYgQ0hBUl9CSVQgKiBTSVpFT0ZfSU5UID49IDMyCisjIGRlZmluZSBDUFBDSEFSX1NJR05FRF9UIGludAorI2VsaWYgQ0hBUl9CSVQgKiBTSVpFT0ZfTE9ORyA+PSAzMgorIyBkZWZpbmUgQ1BQQ0hBUl9TSUdORURfVCBsb25nCisjZWxzZQorIyBlcnJvciAiQ2Fubm90IGZpbmQgYSBsZWFzdC0zMi1iaXQgc2lnbmVkIGludGVnZXIgdHlwZSIKKyNlbmRpZgordHlwZWRlZiB1bnNpZ25lZCBDUFBDSEFSX1NJR05FRF9UIGNwcGNoYXJfdDsKK3R5cGVkZWYgQ1BQQ0hBUl9TSUdORURfVCBjcHBjaGFyX3NpZ25lZF90OworCisvKiBTdHlsZSBvZiBoZWFkZXIgZGVwZW5kZW5jaWVzIHRvIGdlbmVyYXRlLiAgKi8KK2VudW0gY3BwX2RlcHNfc3R5bGUgeyBERVBTX05PTkUgPSAwLCBERVBTX1VTRVIsIERFUFNfU1lTVEVNIH07CisKKy8qIFRoZSBwb3NzaWJsZSBub3JtYWxpemF0aW9uIGxldmVscywgZnJvbSBtb3N0IHJlc3RyaWN0aXZlIHRvIGxlYXN0LiAgKi8KK2VudW0gY3BwX25vcm1hbGl6ZV9sZXZlbCB7CisgIC8qIEluIE5GS0MuICAqLworICBub3JtYWxpemVkX0tDID0gMCwKKyAgLyogSW4gTkZDLiAgKi8KKyAgbm9ybWFsaXplZF9DLAorICAvKiBJbiBORkMsIGV4Y2VwdCBmb3Igc3Vic2VxdWVuY2VzIHdoZXJlIGJlaW5nIGluIE5GQyB3b3VsZCBtYWtlCisgICAgIHRoZSBpZGVudGlmaWVyIGludmFsaWQuICAqLworICBub3JtYWxpemVkX2lkZW50aWZpZXJfQywKKyAgLyogTm90IG5vcm1hbGl6ZWQgYXQgYWxsLiAgKi8KKyAgbm9ybWFsaXplZF9ub25lCit9OworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyBuZXN0ZWQgaW5zaWRlIHN0cnVjdCBjcHBfcmVhZGVyLCBhbmQKKyAgIGNhcnJpZXMgYWxsIHRoZSBvcHRpb25zIHZpc2libGUgdG8gdGhlIGNvbW1hbmQgbGluZS4gICovCitzdHJ1Y3QgY3BwX29wdGlvbnMKK3sKKyAgLyogQ2hhcmFjdGVycyBiZXR3ZWVuIHRhYiBzdG9wcy4gICovCisgIHVuc2lnbmVkIGludCB0YWJzdG9wOworCisgIC8qIFRoZSBsYW5ndWFnZSB3ZSdyZSBwcmVwcm9jZXNzaW5nLiAgKi8KKyAgZW51bSBjX2xhbmcgbGFuZzsKKworICAvKiBOb256ZXJvIG1lYW5zIHVzZSBleHRyYSBkZWZhdWx0IGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKy4gICovCisgIHVuc2lnbmVkIGNoYXIgY3BsdXNwbHVzOworCisgIC8qIE5vbnplcm8gbWVhbnMgaGFuZGxlIGNwbHVzcGx1cyBzdHlsZSBjb21tZW50cy4gICovCisgIHVuc2lnbmVkIGNoYXIgY3BsdXNwbHVzX2NvbW1lbnRzOworCisgIC8qIE5vbnplcm8gbWVhbnMgZGVmaW5lIF9fT0JKQ19fLCB0cmVhdCBAIGFzIGEgc3BlY2lhbCB0b2tlbiwgdXNlCisgICAgIHRoZSBPQkpDW1BMVVNdX0lOQ0xVREVfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYW5kIGFsbG93CisgICAgICIjaW1wb3J0Ii4gICovCisgIHVuc2lnbmVkIGNoYXIgb2JqYzsKKworICAvKiBOb256ZXJvIG1lYW5zIGRvbid0IGNvcHkgY29tbWVudHMgaW50byB0aGUgb3V0cHV0IGZpbGUuICAqLworICB1bnNpZ25lZCBjaGFyIGRpc2NhcmRfY29tbWVudHM7CisKKyAgLyogTm9uemVybyBtZWFucyBkb24ndCBjb3B5IGNvbW1lbnRzIGludG8gdGhlIG91dHB1dCBmaWxlIGR1cmluZworICAgICBtYWNybyBleHBhbnNpb24uICAqLworICB1bnNpZ25lZCBjaGFyIGRpc2NhcmRfY29tbWVudHNfaW5fbWFjcm9fZXhwOworCisgIC8qIE5vbnplcm8gbWVhbnMgcHJvY2VzcyB0aGUgSVNPIHRyaWdyYXBoIHNlcXVlbmNlcy4gICovCisgIHVuc2lnbmVkIGNoYXIgdHJpZ3JhcGhzOworCisgIC8qIE5vbnplcm8gbWVhbnMgcHJvY2VzcyB0aGUgSVNPIGRpZ3JhcGggc2VxdWVuY2VzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBkaWdyYXBoczsKKworICAvKiBOb256ZXJvIG1lYW5zIHRvIGFsbG93IGhleGFkZWNpbWFsIGZsb2F0cyBhbmQgTEwgc3VmZml4ZXMuICAqLworICB1bnNpZ25lZCBjaGFyIGV4dGVuZGVkX251bWJlcnM7CisKKyAgLyogTm9uemVybyBtZWFucyBwcm9jZXNzIHUvVSBwcmVmaXggbGl0ZXJhbHMgKFVURi0xNi8zMikuICAqLworICB1bnNpZ25lZCBjaGFyIHVsaXRlcmFsczsKKworICAvKiBOb256ZXJvIG1lYW5zIHByb2Nlc3Mgci9SIHJhdyBzdHJpbmdzLiAgSWYgdGhpcyBpcyBzZXQsIHVsaXRlcmFscworICAgICBtdXN0IGJlIHNldCBhcyB3ZWxsLiAgKi8KKyAgdW5zaWduZWQgY2hhciBybGl0ZXJhbHM7CisKKyAgLyogTm9uemVybyBtZWFucyBwcmludCBuYW1lcyBvZiBoZWFkZXIgZmlsZXMgKC1IKS4gICovCisgIHVuc2lnbmVkIGNoYXIgcHJpbnRfaW5jbHVkZV9uYW1lczsKKworICAvKiBOb256ZXJvIG1lYW5zIGNvbXBsYWluIGFib3V0IGRlcHJlY2F0ZWQgZmVhdHVyZXMuICAqLworICB1bnNpZ25lZCBjaGFyIGNwcF93YXJuX2RlcHJlY2F0ZWQ7CisKKyAgLyogTm9uemVybyBtZWFucyB3YXJuIGlmIHNsYXNoLXN0YXIgYXBwZWFycyBpbiBhIGNvbW1lbnQuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fY29tbWVudHM7CisKKyAgLyogTm9uemVybyBtZWFucyB3YXJuIGlmIGEgdXNlci1zdXBwbGllZCBpbmNsdWRlIGRpcmVjdG9yeSBkb2VzIG5vdAorICAgICBleGlzdC4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl9taXNzaW5nX2luY2x1ZGVfZGlyczsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gaWYgdGhlcmUgYXJlIGFueSB0cmlncmFwaHMuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fdHJpZ3JhcGhzOworCisgIC8qIE5vbnplcm8gbWVhbnMgd2FybiBhYm91dCBtdWx0aWNoYXJhY3RlciBjaGFyY29uc3RzLiAgKi8KKyAgdW5zaWduZWQgY2hhciB3YXJuX211bHRpY2hhcjsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gYWJvdXQgdmFyaW91cyBpbmNvbXBhdGliaWxpdGllcyB3aXRoCisgICAgIHRyYWRpdGlvbmFsIEMuICAqLworICB1bnNpZ25lZCBjaGFyIGNwcF93YXJuX3RyYWRpdGlvbmFsOworCisgIC8qIE5vbnplcm8gbWVhbnMgd2FybiBhYm91dCBsb25nIGxvbmcgbnVtZXJpYyBjb25zdGFudHMuICAqLworICB1bnNpZ25lZCBjaGFyIGNwcF93YXJuX2xvbmdfbG9uZzsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gYWJvdXQgdGV4dCBhZnRlciBhbiAjZW5kaWYgKG9yICNlbHNlKS4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl9lbmRpZl9sYWJlbHM7CisKKyAgLyogTm9uemVybyBtZWFucyB3YXJuIGFib3V0IGltcGxpY2l0IHNpZ24gY2hhbmdlcyBvd2luZyB0byBpbnRlZ2VyCisgICAgIHByb21vdGlvbnMuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fbnVtX3NpZ25fY2hhbmdlOworCisgIC8qIFplcm8gbWVhbnMgZG9uJ3Qgd2FybiBhYm91dCBfX1ZBX0FSR1NfXyB1c2FnZSBpbiBjODkgcGVkYW50aWMgbW9kZS4KKyAgICAgUHJlc3VtYWJseSB0aGUgdXNhZ2UgaXMgcHJvdGVjdGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSAjaWZkZWYuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fdmFyaWFkaWNfbWFjcm9zOworCisgIC8qIE5vbnplcm8gbWVhbnMgd2FybiBhYm91dCBidWlsdGluIG1hY3JvcyB0aGF0IGFyZSByZWRlZmluZWQgb3IKKyAgICAgZXhwbGljaXRseSB1bmRlZmluZWQuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fYnVpbHRpbl9tYWNyb19yZWRlZmluZWQ7CisKKyAgLyogTm9uemVybyBtZWFucyB3ZSBzaG91bGQgbG9vayBmb3IgaGVhZGVyLmdjYyBmaWxlcyB0aGF0IHJlbWFwIGZpbGUKKyAgICAgbmFtZXMuICAqLworICB1bnNpZ25lZCBjaGFyIHJlbWFwOworCisgIC8qIFplcm8gbWVhbnMgZG9sbGFyIHNpZ25zIGFyZSBwdW5jdHVhdGlvbi4gICovCisgIHVuc2lnbmVkIGNoYXIgZG9sbGFyc19pbl9pZGVudDsKKworICAvKiBOb256ZXJvIG1lYW5zIFVDTnMgYXJlIGFjY2VwdGVkIGluIGlkZW50aWZpZXJzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBleHRlbmRlZF9pZGVudGlmaWVyczsKKworICAvKiBUcnVlIGlmIHdlIHNob3VsZCB3YXJuIGFib3V0IGRvbGxhcnMgaW4gaWRlbnRpZmllcnMgb3IgbnVtYmVycworICAgICBmb3IgdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgKi8KKyAgdW5zaWduZWQgY2hhciB3YXJuX2RvbGxhcnM7CisKKyAgLyogTm9uemVybyBtZWFucyB3YXJuIGlmIHVuZGVmaW5lZCBpZGVudGlmaWVycyBhcmUgZXZhbHVhdGVkIGluIGFuICNpZi4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl91bmRlZjsKKworICAvKiBOb256ZXJvIG1lYW5zIHdhcm4gb2YgdW51c2VkIG1hY3JvcyBmcm9tIHRoZSBtYWluIGZpbGUuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fdW51c2VkX21hY3JvczsKKworICAvKiBOb256ZXJvIGZvciB0aGUgMTk5OSBDIFN0YW5kYXJkLCBpbmNsdWRpbmcgY29ycmlnZW5kYSBhbmQgYW1lbmRtZW50cy4gICovCisgIHVuc2lnbmVkIGNoYXIgYzk5OworCisgIC8qIE5vbnplcm8gaWYgd2UgYXJlIGNvbmZvcm1pbmcgdG8gYSBzcGVjaWZpYyBDIG9yIEMrKyBzdGFuZGFyZC4gICovCisgIHVuc2lnbmVkIGNoYXIgc3RkOworCisgIC8qIE5vbnplcm8gbWVhbnMgZ2l2ZSBhbGwgdGhlIGVycm9yIG1lc3NhZ2VzIHRoZSBBTlNJIHN0YW5kYXJkIHJlcXVpcmVzLiAgKi8KKyAgdW5zaWduZWQgY2hhciBjcHBfcGVkYW50aWM7CisKKyAgLyogTm9uemVybyBtZWFucyB3ZSdyZSBsb29raW5nIGF0IGFscmVhZHkgcHJlcHJvY2Vzc2VkIGNvZGUsIHNvIGRvbid0CisgICAgIGJvdGhlciB0cnlpbmcgdG8gZG8gbWFjcm8gZXhwYW5zaW9uIGFuZCB3aGF0bm90LiAgKi8KKyAgdW5zaWduZWQgY2hhciBwcmVwcm9jZXNzZWQ7CisgIAorICAvKiBOb256ZXJvIG1lYW5zIHdlIGFyZSBnb2luZyB0byBlbWl0IGRlYnVnZ2luZyBsb2dzIGR1cmluZworICAgICBwcmVwcm9jZXNzaW5nLiAgKi8KKyAgdW5zaWduZWQgY2hhciBkZWJ1ZzsKKworICAvKiBOb256ZXJvIG1lYW5zIHdlIGFyZSB0cmFja2luZyBsb2NhdGlvbnMgb2YgdG9rZW5zIGludm9sdmVkIGluCisgICAgIG1hY3JvIGV4cGFuc2lvbi4gMSBNZWFucyB3ZSB0cmFjayB0aGUgbG9jYXRpb24gaW4gZGVncmFkZWQgbW9kZQorICAgICB3aGVyZSB3ZSBkbyBub3QgdHJhY2sgbG9jYXRpb25zIG9mIHRva2VucyByZXN1bHRpbmcgZnJvbSB0aGUKKyAgICAgZXhwYW5zaW9uIG9mIGFyZ3VtZW50cyBvZiBmdW5jdGlvbi1saWtlIG1hY3JvLiAgMiBNZWFucyB3ZSBkbworICAgICB0cmFjayBhbGwgbWFjcm8gZXhwYW5zaW9ucy4gVGhpcyBsYXN0IG9wdGlvbiBpcyB0aGUgb25lIHRoYXQKKyAgICAgY29uc3VtZXMgdGhlIGhpZ2hlc3QgYW1vdW50IG9mIG1lbW9yeS4gICovCisgIHVuc2lnbmVkIGNoYXIgdHJhY2tfbWFjcm9fZXhwYW5zaW9uOworCisgIC8qIE5vbnplcm8gbWVhbnMgaGFuZGxlIEMrKyBhbHRlcm5hdGUgb3BlcmF0b3IgbmFtZXMuICAqLworICB1bnNpZ25lZCBjaGFyIG9wZXJhdG9yX25hbWVzOworCisgIC8qIE5vbnplcm8gbWVhbnMgd2FybiBhYm91dCB1c2Ugb2YgQysrIGFsdGVybmF0ZSBvcGVyYXRvciBuYW1lcy4gICovCisgIHVuc2lnbmVkIGNoYXIgd2Fybl9jeHhfb3BlcmF0b3JfbmFtZXM7CisKKyAgLyogVHJ1ZSBmb3IgdHJhZGl0aW9uYWwgcHJlcHJvY2Vzc2luZy4gICovCisgIHVuc2lnbmVkIGNoYXIgdHJhZGl0aW9uYWw7CisKKyAgLyogTm9uemVybyBmb3IgQysrIDIwMTEgU3RhbmRhcmQgdXNlci1kZWZuaWVkIGxpdGVyYWxzLiAgKi8KKyAgdW5zaWduZWQgY2hhciB1c2VyX2xpdGVyYWxzOworCisgIC8qIE5vbnplcm8gbWVhbnMgd2FybiB3aGVuIGEgc3RyaW5nIG9yIGNoYXJhY3RlciBsaXRlcmFsIGlzIGZvbGxvd2VkIGJ5IGEKKyAgICAgdWQtc3VmZml4IHdoaWNoIGRvZXMgbm90IGJlZ2luZyB3aXRoIGFuIHVuZGVyc2NvcmUuICAqLworICB1bnNpZ25lZCBjaGFyIHdhcm5fbGl0ZXJhbF9zdWZmaXg7CisKKyAgLyogTm9uemVybyBtZWFucyBpbnRlcnByZXQgaW1hZ2luYXJ5LCBmaXhlZC1wb2ludCwgb3Igb3RoZXIgZ251IGV4dGVuc2lvbgorICAgICBsaXRlcmFsIG51bWJlciBzdWZmaXhlcyBhcyB1c2VyLWRlZmluZWQgbGl0ZXJhbCBudW1iZXIgc3VmZml4ZXMuICAqLworICB1bnNpZ25lZCBjaGFyIGV4dF9udW1lcmljX2xpdGVyYWxzOworCisgIC8qIEhvbGRzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgKGV4ZWN1dGlvbikgY2hhcmFjdGVyIHNldC4gICovCisgIGNvbnN0IGNoYXIgKm5hcnJvd19jaGFyc2V0OworCisgIC8qIEhvbGRzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgd2lkZSBjaGFyYWN0ZXIgc2V0LiAgKi8KKyAgY29uc3QgY2hhciAqd2lkZV9jaGFyc2V0OworCisgIC8qIEhvbGRzIHRoZSBuYW1lIG9mIHRoZSBpbnB1dCBjaGFyYWN0ZXIgc2V0LiAgKi8KKyAgY29uc3QgY2hhciAqaW5wdXRfY2hhcnNldDsKKworICAvKiBUaGUgbWluaW11bSBwZXJtaXR0ZWQgbGV2ZWwgb2Ygbm9ybWFsaXphdGlvbiBiZWZvcmUgYSB3YXJuaW5nCisgICAgIGlzIGdlbmVyYXRlZC4gICovCisgIGVudW0gY3BwX25vcm1hbGl6ZV9sZXZlbCB3YXJuX25vcm1hbGl6ZTsKKworICAvKiBUcnVlIHRvIHdhcm4gYWJvdXQgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzIHdlIGNvdWxkbid0IHVzZS4gICovCisgIGJvb2wgd2Fybl9pbnZhbGlkX3BjaDsKKworICAvKiBUcnVlIGlmIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgcmVzdG9yZWQgZnJvbSBhIHByZWNvbXBpbGVkIGhlYWRlci4gICovCisgIGJvb2wgcmVzdG9yZV9wY2hfZGVwczsKKworICAvKiBEZXBlbmRlbmN5IGdlbmVyYXRpb24uICAqLworICBzdHJ1Y3QKKyAgeworICAgIC8qIFN0eWxlIG9mIGhlYWRlciBkZXBlbmRlbmNpZXMgdG8gZ2VuZXJhdGUuICAqLworICAgIGVudW0gY3BwX2RlcHNfc3R5bGUgc3R5bGU7CisKKyAgICAvKiBBc3N1bWUgbWlzc2luZyBmaWxlcyBhcmUgZ2VuZXJhdGVkIGZpbGVzLiAgKi8KKyAgICBib29sIG1pc3NpbmdfZmlsZXM7CisKKyAgICAvKiBHZW5lcmF0ZSBwaG9ueSB0YXJnZXRzIGZvciBlYWNoIGRlcGVuZGVuY3kgYXBhcnQgZnJvbSB0aGUgZmlyc3QKKyAgICAgICBvbmUuICAqLworICAgIGJvb2wgcGhvbnlfdGFyZ2V0czsKKworICAgIC8qIElmIHRydWUsIG5vIGRlcGVuZGVuY3kgaXMgZ2VuZXJhdGVkIG9uIHRoZSBtYWluIGZpbGUuICAqLworICAgIGJvb2wgaWdub3JlX21haW5fZmlsZTsKKworICAgIC8qIElmIHRydWUsIGludGVuZCB0byB1c2UgdGhlIHByZXByb2Nlc3NvciBvdXRwdXQgKGUuZy4sIGZvciBjb21waWxhdGlvbikKKyAgICAgICBpbiBhZGRpdGlvbiB0byB0aGUgZGVwZW5kZW5jeSBpbmZvLiAgKi8KKyAgICBib29sIG5lZWRfcHJlcHJvY2Vzc29yX291dHB1dDsKKyAgfSBkZXBzOworCisgIC8qIFRhcmdldC1zcGVjaWZpYyBmZWF0dXJlcyBzZXQgYnkgdGhlIGZyb250IGVuZCBvciBjbGllbnQuICAqLworCisgIC8qIFByZWNpc2lvbiBmb3IgdGFyZ2V0IENQUCBhcml0aG1ldGljLCB0YXJnZXQgY2hhcmFjdGVycywgdGFyZ2V0CisgICAgIGludHMgYW5kIHRhcmdldCB3aWRlIGNoYXJhY3RlcnMsIHJlc3BlY3RpdmVseS4gICovCisgIHNpemVfdCBwcmVjaXNpb24sIGNoYXJfcHJlY2lzaW9uLCBpbnRfcHJlY2lzaW9uLCB3Y2hhcl9wcmVjaXNpb247CisKKyAgLyogVHJ1ZSBtZWFucyBjaGFycyAod2lkZSBjaGFycykgYXJlIHVuc2lnbmVkLiAgKi8KKyAgYm9vbCB1bnNpZ25lZF9jaGFyLCB1bnNpZ25lZF93Y2hhcjsKKworICAvKiBUcnVlIGlmIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgaW4gYSB3b3JkIGhhcyB0aGUgbG93ZXN0CisgICAgIGFkZHJlc3MgaW4gbWVtb3J5LiAgKi8KKyAgYm9vbCBieXRlc19iaWdfZW5kaWFuOworCisgIC8qIE5vbnplcm8gbWVhbnMgX19TVERDX18gc2hvdWxkIGhhdmUgdGhlIHZhbHVlIDAgaW4gc3lzdGVtIGhlYWRlcnMuICAqLworICB1bnNpZ25lZCBjaGFyIHN0ZGNfMF9pbl9zeXN0ZW1faGVhZGVyczsKKworICAvKiBUcnVlIGRpc2FibGVzIHRva2VuaXphdGlvbiBvdXRzaWRlIG9mIHByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcy4gKi8KKyAgYm9vbCBkaXJlY3RpdmVzX29ubHk7CisKKyAgLyogVHJ1ZSBlbmFibGVzIGNhbm9uaWNhbGl6YXRpb24gb2Ygc3lzdGVtIGhlYWRlciBmaWxlIHBhdGhzLiAqLworICBib29sIGNhbm9uaWNhbF9zeXN0ZW1faGVhZGVyczsKK307CisKKy8qIENhbGxiYWNrIGZvciBoZWFkZXIgbG9va3VwIGZvciBIRUFERVIsIHdoaWNoIGlzIHRoZSBuYW1lIG9mIGEKKyAgIHNvdXJjZSBmaWxlLiAgSXQgaXMgdXNlZCBhcyBhIG1ldGhvZCBvZiBsYXN0IHJlc29ydCB0byBmaW5kIGhlYWRlcnMKKyAgIHRoYXQgYXJlIG5vdCBvdGhlcndpc2UgZm91bmQgZHVyaW5nIHRoZSBub3JtYWwgaW5jbHVkZSBwcm9jZXNzaW5nLgorICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbWFsbG9jZWQgbmFtZSBvZiBhIGhlYWRlciB0byB0cnkgYW5kIG9wZW4sCisgICBpZiBhbnksIG9yIE5VTEwgb3RoZXJ3aXNlLiAgVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgb25seSBpZiB0aGUKKyAgIGhlYWRlciBpcyBvdGhlcndpc2UgdW5mb3VuZC4gICovCit0eXBlZGVmIGNvbnN0IGNoYXIgKigqbWlzc2luZ19oZWFkZXJfY2IpKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqaGVhZGVyLCBjcHBfZGlyICoqKTsKKworLyogQ2FsbCBiYWNrcyB0byBjcHBsaWIgY2xpZW50LiAgKi8KK3N0cnVjdCBjcHBfY2FsbGJhY2tzCit7CisgIC8qIENhbGxlZCB3aGVuIGEgbmV3IGxpbmUgb2YgcHJlcHJvY2Vzc2VkIG91dHB1dCBpcyBzdGFydGVkLiAgKi8KKyAgdm9pZCAoKmxpbmVfY2hhbmdlKSAoY3BwX3JlYWRlciAqLCBjb25zdCBjcHBfdG9rZW4gKiwgaW50KTsKKworICAvKiBDYWxsZWQgd2hlbiBzd2l0Y2hpbmcgdG8vZnJvbSBhIG5ldyBmaWxlLgorICAgICBUaGUgbGluZV9tYXAgaXMgZm9yIHRoZSBuZXcgZmlsZS4gIEl0IGlzIE5VTEwgaWYgdGhlcmUgaXMgbm8gbmV3IGZpbGUuCisgICAgIChJbiBDIHRoaXMgaGFwcGVucyB3aGVuIGRvbmUgd2l0aCA8YnVpbHQtaW4+Kzxjb21tYW5kIGxpbmU+IGFuZCBhbHNvCisgICAgIHdoZW4gZG9uZSB3aXRoIGEgbWFpbiBmaWxlLikgIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHJlc291cmNlIGNsZWFudXAuICAqLworICB2b2lkICgqZmlsZV9jaGFuZ2UpIChjcHBfcmVhZGVyICosIGNvbnN0IHN0cnVjdCBsaW5lX21hcCAqKTsKKworICB2b2lkICgqZGlyX2NoYW5nZSkgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqKTsKKyAgdm9pZCAoKmluY2x1ZGUpIChjcHBfcmVhZGVyICosIHNvdXJjZV9sb2NhdGlvbiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorCQkgICBjb25zdCBjaGFyICosIGludCwgY29uc3QgY3BwX3Rva2VuICoqKTsKKyAgdm9pZCAoKmRlZmluZSkgKGNwcF9yZWFkZXIgKiwgc291cmNlX2xvY2F0aW9uLCBjcHBfaGFzaG5vZGUgKik7CisgIHZvaWQgKCp1bmRlZikgKGNwcF9yZWFkZXIgKiwgc291cmNlX2xvY2F0aW9uLCBjcHBfaGFzaG5vZGUgKik7CisgIHZvaWQgKCppZGVudCkgKGNwcF9yZWFkZXIgKiwgc291cmNlX2xvY2F0aW9uLCBjb25zdCBjcHBfc3RyaW5nICopOworICB2b2lkICgqZGVmX3ByYWdtYSkgKGNwcF9yZWFkZXIgKiwgc291cmNlX2xvY2F0aW9uKTsKKyAgaW50ICgqdmFsaWRfcGNoKSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICosIGludCk7CisgIHZvaWQgKCpyZWFkX3BjaCkgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CisgIG1pc3NpbmdfaGVhZGVyX2NiIG1pc3NpbmdfaGVhZGVyOworCisgIC8qIENvbnRleHQtc2Vuc2l0aXZlIG1hY3JvIHN1cHBvcnQuICBSZXR1cm5zIG1hY3JvIChpZiBhbnkpIHRoYXQgc2hvdWxkCisgICAgIGJlIGV4cGFuZGVkLiAgKi8KKyAgY3BwX2hhc2hub2RlICogKCptYWNyb190b19leHBhbmQpIChjcHBfcmVhZGVyICosIGNvbnN0IGNwcF90b2tlbiAqKTsKKworICAvKiBDYWxsZWQgdG8gZW1pdCBhIGRpYWdub3N0aWMuICBUaGlzIGNhbGxiYWNrIHJlY2VpdmVzIHRoZQorICAgICB0cmFuc2xhdGVkIG1lc3NhZ2UuICAqLworICBib29sICgqZXJyb3IpIChjcHBfcmVhZGVyICosIGludCwgaW50LCBzb3VyY2VfbG9jYXRpb24sIHVuc2lnbmVkIGludCwKKwkJIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCAqKQorICAgICAgIEFUVFJJQlVURV9GUFRSX1BSSU5URig2LDApOworCisgIC8qIENhbGxiYWNrcyBmb3Igd2hlbiBhIG1hY3JvIGlzIGV4cGFuZGVkLCBvciB0ZXN0ZWQgKHdoZXRoZXIKKyAgICAgZGVmaW5lZCBvciBub3QgYXQgdGhlIHRpbWUpIGluICNpZmRlZiwgI2lmbmRlZiBvciAiZGVmaW5lZCIuICAqLworICB2b2lkICgqdXNlZF9kZWZpbmUpIChjcHBfcmVhZGVyICosIHNvdXJjZV9sb2NhdGlvbiwgY3BwX2hhc2hub2RlICopOworICB2b2lkICgqdXNlZF91bmRlZikgKGNwcF9yZWFkZXIgKiwgc291cmNlX2xvY2F0aW9uLCBjcHBfaGFzaG5vZGUgKik7CisgIC8qIENhbGxlZCBiZWZvcmUgI2RlZmluZSBhbmQgI3VuZGVmIG9yIG90aGVyIG1hY3JvIGRlZmluaXRpb24KKyAgICAgY2hhbmdlcyBhcmUgcHJvY2Vzc2VkLiAgKi8KKyAgdm9pZCAoKmJlZm9yZV9kZWZpbmUpIChjcHBfcmVhZGVyICopOworICAvKiBDYWxsZWQgd2hlbmV2ZXIgYSBtYWNybyBpcyBleHBhbmRlZCBvciB0ZXN0ZWQuCisgICAgIFNlY29uZCBhcmd1bWVudCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGV4cGFuc2lvbi4gICovCisgIHZvaWQgKCp1c2VkKSAoY3BwX3JlYWRlciAqLCBzb3VyY2VfbG9jYXRpb24sIGNwcF9oYXNobm9kZSAqKTsKKworICAvKiBDYWxsYmFjayB0aGF0IGNhbiBjaGFuZ2UgYSB1c2VyIGJ1aWx0aW4gaW50byBub3JtYWwgbWFjcm8uICAqLworICBib29sICgqdXNlcl9idWlsdGluX21hY3JvKSAoY3BwX3JlYWRlciAqLCBjcHBfaGFzaG5vZGUgKik7Cit9OworCisjaWZkZWYgVk1TCisjZGVmaW5lIElOT19UX0NQUCBpbm9fdCBpbm9bM10KKyNlbHNlCisjZGVmaW5lIElOT19UX0NQUCBpbm9fdCBpbm8KKyNlbmRpZgorCisvKiBDaGFpbiBvZiBkaXJlY3RvcmllcyB0byBsb29rIGZvciBpbmNsdWRlIGZpbGVzIGluLiAgKi8KK3N0cnVjdCBjcHBfZGlyCit7CisgIC8qIE5VTEwtdGVybWluYXRlZCBzaW5nbHktbGlua2VkIGxpc3QuICAqLworICBzdHJ1Y3QgY3BwX2RpciAqbmV4dDsKKworICAvKiBOQU1FIG9mIHRoZSBkaXJlY3RvcnksIE5VTC10ZXJtaW5hdGVkLiAgKi8KKyAgY2hhciAqbmFtZTsKKyAgdW5zaWduZWQgaW50IGxlbjsKKworICAvKiBPbmUgaWYgYSBzeXN0ZW0gaGVhZGVyLCB0d28gaWYgYSBzeXN0ZW0gaGVhZGVyIHRoYXQgaGFzIGV4dGVybgorICAgICAiQyIgZ3VhcmRzIGZvciBDKysuICAqLworICB1bnNpZ25lZCBjaGFyIHN5c3A7CisKKyAgLyogSXMgdGhpcyBhIHVzZXItc3VwcGxpZWQgZGlyZWN0b3J5PyAqLworICBib29sIHVzZXJfc3VwcGxpZWRfcDsKKworICAvKiBUaGUgY2Fub25pY2FsaXplZCBOQU1FIGFzIGRldGVybWluZWQgYnkgbHJlYWxwYXRoLiAgVGhpcyBmaWVsZCAKKyAgICAgaXMgb25seSB1c2VkIGJ5IGhvc3RzIHRoYXQgbGFjayByZWxpYWJsZSBpbm9kZSBudW1iZXJzLiAgKi8KKyAgY2hhciAqY2Fub25pY2FsX25hbWU7CisKKyAgLyogTWFwcGluZyBvZiBmaWxlIG5hbWVzIGZvciB0aGlzIGRpcmVjdG9yeSBmb3IgTVMtRE9TIGFuZCByZWxhdGVkCisgICAgIHBsYXRmb3Jtcy4gIEEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIChmcm9tLCB0bykgcGFpcnMuICAqLworICBjb25zdCBjaGFyICoqbmFtZV9tYXA7CisKKyAgLyogUm91dGluZSB0byBjb25zdHJ1Y3QgcGF0aG5hbWUsIGdpdmVuIHRoZSBzZWFyY2ggcGF0aCBuYW1lIGFuZCB0aGUKKyAgICAgSEVBREVSIHdlIGFyZSB0cnlpbmcgdG8gZmluZCwgcmV0dXJuIGEgY29uc3RydWN0ZWQgcGF0aG5hbWUgdG8KKyAgICAgdHJ5IGFuZCBvcGVuLiAgSWYgdGhpcyBpcyBOVUxMLCB0aGUgY29uc3RydWN0ZWQgcGF0aG5hbWUgaXMgYXMKKyAgICAgY29uc3RydWN0ZWQgYnkgYXBwZW5kX2ZpbGVfdG9fZGlyLiAgKi8KKyAgY2hhciAqKCpjb25zdHJ1Y3QpIChjb25zdCBjaGFyICpoZWFkZXIsIGNwcF9kaXIgKmRpcik7CisKKyAgLyogVGhlIEMgZnJvbnQgZW5kIHVzZXMgdGhlc2UgdG8gcmVjb2duaXplIGR1cGxpY2F0ZWQKKyAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIHNlYXJjaCBwYXRoLiAgKi8KKyAgSU5PX1RfQ1BQOworICBkZXZfdCBkZXY7Cit9OworCisvKiBUaGUgc3RydWN0dXJlIG9mIGEgbm9kZSBpbiB0aGUgaGFzaCB0YWJsZS4gIFRoZSBoYXNoIHRhYmxlIGhhcworICAgZW50cmllcyBmb3IgYWxsIGlkZW50aWZpZXJzOiBlaXRoZXIgbWFjcm9zIGRlZmluZWQgYnkgI2RlZmluZQorICAgY29tbWFuZHMgKHR5cGUgTlRfTUFDUk8pLCBhc3NlcnRpb25zIGNyZWF0ZWQgd2l0aCAjYXNzZXJ0CisgICAoTlRfQVNTRVJUSU9OKSwgb3IgbmVpdGhlciBvZiB0aGUgYWJvdmUgKE5UX1ZPSUQpLiAgQnVpbHRpbiBtYWNyb3MKKyAgIGxpa2UgX19MSU5FX18gYXJlIGZsYWdnZWQgTk9ERV9CVUlMVElOLiAgUG9pc29uZWQgaWRlbnRpZmllcnMgYXJlCisgICBmbGFnZ2VkIE5PREVfUE9JU09ORUQuICBOT0RFX09QRVJBVE9SIChDKysgb25seSkgaW5kaWNhdGVzIGFuCisgICBpZGVudGlmaWVyIHRoYXQgYmVoYXZlcyBsaWtlIGFuIG9wZXJhdG9yIHN1Y2ggYXMgInhvciIuCisgICBOT0RFX0RJQUdOT1NUSUMgaXMgZm9yIHNwZWVkIGluIGxleF90b2tlbjogaXQgaW5kaWNhdGVzIGEKKyAgIGRpYWdub3N0aWMgbWF5IGJlIHJlcXVpcmVkIGZvciB0aGlzIG5vZGUuICBDdXJyZW50bHkgdGhpcyBvbmx5CisgICBhcHBsaWVzIHRvIF9fVkFfQVJHU19fLCBwb2lzb25lZCBpZGVudGlmaWVycywgYW5kIC1XYysrLWNvbXBhdAorICAgd2FybmluZ3MgYWJvdXQgTk9ERV9PUEVSQVRPUi4gICovCisKKy8qIEhhc2ggbm9kZSBmbGFncy4gICovCisjZGVmaW5lIE5PREVfT1BFUkFUT1IJKDEgPDwgMCkJLyogQysrIG5hbWVkIG9wZXJhdG9yLiAgKi8KKyNkZWZpbmUgTk9ERV9QT0lTT05FRAkoMSA8PCAxKQkvKiBQb2lzb25lZCBpZGVudGlmaWVyLiAgKi8KKyNkZWZpbmUgTk9ERV9CVUlMVElOCSgxIDw8IDIpCS8qIEJ1aWx0aW4gbWFjcm8uICAqLworI2RlZmluZSBOT0RFX0RJQUdOT1NUSUMgKDEgPDwgMykJLyogUG9zc2libGUgZGlhZ25vc3RpYyB3aGVuIGxleGVkLiAgKi8KKyNkZWZpbmUgTk9ERV9XQVJOCSgxIDw8IDQpCS8qIFdhcm4gaWYgcmVkZWZpbmVkIG9yIHVuZGVmaW5lZC4gICovCisjZGVmaW5lIE5PREVfRElTQUJMRUQJKDEgPDwgNSkJLyogQSBkaXNhYmxlZCBtYWNyby4gICovCisjZGVmaW5lIE5PREVfTUFDUk9fQVJHCSgxIDw8IDYpCS8qIFVzZWQgZHVyaW5nICNkZWZpbmUgcHJvY2Vzc2luZy4gICovCisjZGVmaW5lIE5PREVfVVNFRAkoMSA8PCA3KQkvKiBEdW1wZWQgd2l0aCAtZFUuICAqLworI2RlZmluZSBOT0RFX0NPTkRJVElPTkFMICgxIDw8IDgpCS8qIENvbmRpdGlvbmFsIG1hY3JvICovCisjZGVmaW5lIE5PREVfV0FSTl9PUEVSQVRPUiAoMSA8PCA5KQkvKiBXYXJuIGFib3V0IEMrKyBuYW1lZCBvcGVyYXRvci4gICovCisKKy8qIERpZmZlcmVudCBmbGF2b3JzIG9mIGhhc2ggbm9kZS4gICovCitlbnVtIG5vZGVfdHlwZQoreworICBOVF9WT0lEID0gMCwJICAgLyogTm8gZGVmaW5pdGlvbiB5ZXQuICAqLworICBOVF9NQUNSTywJICAgLyogQSBtYWNybyBvZiBzb21lIGZvcm0uICAqLworICBOVF9BU1NFUlRJT04JICAgLyogUHJlZGljYXRlIGZvciAjYXNzZXJ0LiAgKi8KK307CisKKy8qIERpZmZlcmVudCBmbGF2b3JzIG9mIGJ1aWx0aW4gbWFjcm8uICBfUHJhZ21hIGlzIGFuIG9wZXJhdG9yLCBidXQgd2UKKyAgIGhhbmRsZSBpdCB3aXRoIHRoZSBidWlsdGluIGNvZGUgZm9yIGVmZmljaWVuY3kgcmVhc29ucy4gICovCitlbnVtIGNwcF9idWlsdGluX3R5cGUKK3sKKyAgQlRfU1BFQ0xJTkUgPSAwLAkJLyogYF9fTElORV9fJyAqLworICBCVF9EQVRFLAkJCS8qIGBfX0RBVEVfXycgKi8KKyAgQlRfRklMRSwJCQkvKiBgX19GSUxFX18nICovCisgIEJUX0JBU0VfRklMRSwJCQkvKiBgX19CQVNFX0ZJTEVfXycgKi8KKyAgQlRfSU5DTFVERV9MRVZFTCwJCS8qIGBfX0lOQ0xVREVfTEVWRUxfXycgKi8KKyAgQlRfVElNRSwJCQkvKiBgX19USU1FX18nICovCisgIEJUX1NUREMsCQkJLyogYF9fU1REQ19fJyAqLworICBCVF9QUkFHTUEsCQkJLyogYF9QcmFnbWEnIG9wZXJhdG9yICovCisgIEJUX1RJTUVTVEFNUCwJCQkvKiBgX19USU1FU1RBTVBfXycgKi8KKyAgQlRfQ09VTlRFUiwJCQkvKiBgX19DT1VOVEVSX18nICovCisgIEJUX0ZJUlNUX1VTRVIsCQkvKiBVc2VyIGRlZmluZWQgYnVpbHRpbiBtYWNyb3MuICAqLworICBCVF9MQVNUX1VTRVIgPSBCVF9GSVJTVF9VU0VSICsgMzEKK307CisKKyNkZWZpbmUgQ1BQX0hBU0hOT0RFKEhOT0RFKQkoKGNwcF9oYXNobm9kZSAqKSAoSE5PREUpKQorI2RlZmluZSBIVF9OT0RFKE5PREUpCQkoKGh0X2lkZW50aWZpZXIgKikgKE5PREUpKQorI2RlZmluZSBOT0RFX0xFTihOT0RFKQkJSFRfTEVOICgmKE5PREUpLT5pZGVudCkKKyNkZWZpbmUgTk9ERV9OQU1FKE5PREUpCQlIVF9TVFIgKCYoTk9ERSktPmlkZW50KQorCisvKiBTcGVjaWZ5IHdoaWNoIGZpZWxkLCBpZiBhbnksIG9mIHRoZSB1bmlvbiBpcyB1c2VkLiAgKi8KKworZW51bSB7CisgIE5UVl9NQUNSTywKKyAgTlRWX0FOU1dFUiwKKyAgTlRWX0JVSUxUSU4sCisgIE5UVl9BUkdVTUVOVCwKKyAgTlRWX05PTkUKK307CisKKyNkZWZpbmUgQ1BQX0hBU0hOT0RFX1ZBTFVFX0lEWChITk9ERSkJCQkJXAorICAoKEhOT0RFLmZsYWdzICYgTk9ERV9NQUNST19BUkcpID8gTlRWX0FSR1VNRU5UCQlcCisgICA6IEhOT0RFLnR5cGUgPT0gTlRfTUFDUk8gPyAoKEhOT0RFLmZsYWdzICYgTk9ERV9CVUlMVElOKSAJXAorCQkJICAgICAgID8gTlRWX0JVSUxUSU4gOiBOVFZfTUFDUk8pCVwKKyAgIDogSE5PREUudHlwZSA9PSBOVF9BU1NFUlRJT04gPyBOVFZfQU5TV0VSCQkJXAorICAgOiBOVFZfTk9ORSkKKworLyogVGhlIGNvbW1vbiBwYXJ0IG9mIGFuIGlkZW50aWZpZXIgbm9kZSBzaGFyZWQgYW1vbmdzdCBhbGwgMyBDIGZyb250CisgICBlbmRzLiAgQWxzbyB1c2VkIHRvIHN0b3JlIENQUCBpZGVudGlmaWVycywgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YKKyAgIGlkZW50aWZpZXJzIGluIHRoZSBncmFtbWF0aWNhbCBzZW5zZS4gICovCisKK3VuaW9uIEdUWSgoKSkgX2NwcF9oYXNobm9kZV92YWx1ZSB7CisgIC8qIElmIGEgbWFjcm8uICAqLworICBjcHBfbWFjcm8gKiBHVFkoKHRhZyAoIk5UVl9NQUNSTyIpKSkgbWFjcm87CisgIC8qIEFuc3dlcnMgdG8gYW4gYXNzZXJ0aW9uLiAgKi8KKyAgc3RydWN0IGFuc3dlciAqIEdUWSAoKHRhZyAoIk5UVl9BTlNXRVIiKSkpIGFuc3dlcnM7CisgIC8qIENvZGUgZm9yIGEgYnVpbHRpbiBtYWNyby4gICovCisgIGVudW0gY3BwX2J1aWx0aW5fdHlwZSBHVFkgKCh0YWcgKCJOVFZfQlVJTFRJTiIpKSkgYnVpbHRpbjsKKyAgLyogTWFjcm8gYXJndW1lbnQgaW5kZXguICAqLworICB1bnNpZ25lZCBzaG9ydCBHVFkgKCh0YWcgKCJOVFZfQVJHVU1FTlQiKSkpIGFyZ19pbmRleDsKK307CisKK3N0cnVjdCBHVFkoKCkpIGNwcF9oYXNobm9kZSB7CisgIHN0cnVjdCBodF9pZGVudGlmaWVyIGlkZW50OworICB1bnNpZ25lZCBpbnQgaXNfZGlyZWN0aXZlIDogMTsKKyAgdW5zaWduZWQgaW50IGRpcmVjdGl2ZV9pbmRleCA6IDc7CS8qIElmIGlzX2RpcmVjdGl2ZSwKKwkJCQkJICAgdGhlbiBpbmRleCBpbnRvIGRpcmVjdGl2ZSB0YWJsZS4KKwkJCQkJICAgT3RoZXJ3aXNlLCBhIE5PREVfT1BFUkFUT1IuICAqLworICB1bnNpZ25lZCBjaGFyIHJpZF9jb2RlOwkJLyogUmlkIGNvZGUgLSBmb3IgZnJvbnQgZW5kcy4gICovCisgIEVOVU1fQklURklFTEQobm9kZV90eXBlKSB0eXBlIDogNjsJLyogQ1BQIG5vZGUgdHlwZS4gICovCisgIHVuc2lnbmVkIGludCBmbGFncyA6IDEwOwkJLyogQ1BQIGZsYWdzLiAgKi8KKworICB1bmlvbiBfY3BwX2hhc2hub2RlX3ZhbHVlIEdUWSAoKGRlc2MgKCJDUFBfSEFTSE5PREVfVkFMVUVfSURYICglMSkiKSkpIHZhbHVlOworfTsKKworLyogQ2FsbCB0aGlzIGZpcnN0IHRvIGdldCBhIGhhbmRsZSB0byBwYXNzIHRvIG90aGVyIGZ1bmN0aW9ucy4KKworICAgSWYgeW91IHdhbnQgY3BwbGliIHRvIG1hbmFnZSBpdHMgb3duIGhhc2h0YWJsZSwgcGFzcyBpbiBhIE5VTEwKKyAgIHBvaW50ZXIuICBPdGhlcndpc2UgeW91IHNob3VsZCBwYXNzIGluIGFuIGluaXRpYWxpemVkIGhhc2ggdGFibGUKKyAgIHRoYXQgY3BwbGliIHdpbGwgc2hhcmU7IHRoaXMgdGVjaG5pcXVlIGlzIHVzZWQgYnkgdGhlIEMgZnJvbnQKKyAgIGVuZHMuICAqLworZXh0ZXJuIGNwcF9yZWFkZXIgKmNwcF9jcmVhdGVfcmVhZGVyIChlbnVtIGNfbGFuZywgc3RydWN0IGh0ICosCisJCQkJICAgICAgc3RydWN0IGxpbmVfbWFwcyAqKTsKKworLyogUmVzZXQgdGhlIGNwcF9yZWFkZXIncyBsaW5lX21hcC4gIFRoaXMgaXMgb25seSB1c2VkIGFmdGVyIHJlYWRpbmcgYQorICAgUENIIGZpbGUuICAqLworZXh0ZXJuIHZvaWQgY3BwX3NldF9saW5lX21hcCAoY3BwX3JlYWRlciAqLCBzdHJ1Y3QgbGluZV9tYXBzICopOworCisvKiBDYWxsIHRoaXMgdG8gY2hhbmdlIHRoZSBzZWxlY3RlZCBsYW5ndWFnZSBzdGFuZGFyZCAoZS5nLiBiZWNhdXNlIG9mCisgICBjb21tYW5kIGxpbmUgb3B0aW9ucykuICAqLworZXh0ZXJuIHZvaWQgY3BwX3NldF9sYW5nIChjcHBfcmVhZGVyICosIGVudW0gY19sYW5nKTsKKworLyogU2V0IHRoZSBpbmNsdWRlIHBhdGhzLiAgKi8KK2V4dGVybiB2b2lkIGNwcF9zZXRfaW5jbHVkZV9jaGFpbnMgKGNwcF9yZWFkZXIgKiwgY3BwX2RpciAqLCBjcHBfZGlyICosIGludCk7CisKKy8qIENhbGwgdGhlc2UgdG8gZ2V0IHBvaW50ZXJzIHRvIHRoZSBvcHRpb25zLCBjYWxsYmFjaywgYW5kIGRlcHMKKyAgIHN0cnVjdHVyZXMgZm9yIGEgZ2l2ZW4gcmVhZGVyLiAgVGhlc2UgcG9pbnRlcnMgYXJlIGdvb2QgdW50aWwgeW91CisgICBjYWxsIGNwcF9maW5pc2ggb24gdGhhdCByZWFkZXIuICBZb3UgY2FuIGVpdGhlciBlZGl0IHRoZSBjYWxsYmFja3MKKyAgIHRocm91Z2ggdGhlIHBvaW50ZXIgcmV0dXJuZWQgZnJvbSBjcHBfZ2V0X2NhbGxiYWNrcywgb3Igc2V0IHRoZW0KKyAgIHdpdGggY3BwX3NldF9jYWxsYmFja3MuICAqLworZXh0ZXJuIGNwcF9vcHRpb25zICpjcHBfZ2V0X29wdGlvbnMgKGNwcF9yZWFkZXIgKik7CitleHRlcm4gY3BwX2NhbGxiYWNrcyAqY3BwX2dldF9jYWxsYmFja3MgKGNwcF9yZWFkZXIgKik7CitleHRlcm4gdm9pZCBjcHBfc2V0X2NhbGxiYWNrcyAoY3BwX3JlYWRlciAqLCBjcHBfY2FsbGJhY2tzICopOworZXh0ZXJuIHN0cnVjdCBkZXBzICpjcHBfZ2V0X2RlcHMgKGNwcF9yZWFkZXIgKik7CisKKy8qIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGZpbGUsIGJ1dCBkb2VzIG5vdCBzdGFydCBwcmVwcm9jZXNzaW5nLiAgSXQKKyAgIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGU7IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCisgICBpbnB1dCBmaWxlLCBleGNlcHQgZm9yIHByZXByb2Nlc3NlZCBpbnB1dC4gIFRoaXMgd2lsbCBnZW5lcmF0ZSBhdAorICAgbGVhc3Qgb25lIGZpbGUgY2hhbmdlIGNhbGxiYWNrLCBhbmQgcG9zc2libHkgYSBsaW5lIGNoYW5nZSBjYWxsYmFjaworICAgdG9vLiAgSWYgdGhlcmUgd2FzIGFuIGVycm9yIG9wZW5pbmcgdGhlIGZpbGUsIGl0IHJldHVybnMgTlVMTC4gICovCitleHRlcm4gY29uc3QgY2hhciAqY3BwX3JlYWRfbWFpbl9maWxlIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKik7CisKKy8qIFNldCB1cCBidWlsdC1pbnMgd2l0aCBzcGVjaWFsIGJlaGF2aW9yLiAgVXNlIGNwcF9pbml0X2J1aWx0aW5zKCkKKyAgIGluc3RlYWQgdW5sZXNzIHlvdXIga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuICAqLworZXh0ZXJuIHZvaWQgY3BwX2luaXRfc3BlY2lhbF9idWlsdGlucyAoY3BwX3JlYWRlciAqKTsKKworLyogU2V0IHVwIGJ1aWx0LWlucyBsaWtlIF9fRklMRV9fLiAgKi8KK2V4dGVybiB2b2lkIGNwcF9pbml0X2J1aWx0aW5zIChjcHBfcmVhZGVyICosIGludCk7CisKKy8qIFRoaXMgaXMgY2FsbGVkIGFmdGVyIG9wdGlvbnMgaGF2ZSBiZWVuIHBhcnNlZCwgYW5kIHBhcnRpYWxseQorICAgcHJvY2Vzc2VkLiAgKi8KK2V4dGVybiB2b2lkIGNwcF9wb3N0X29wdGlvbnMgKGNwcF9yZWFkZXIgKik7CisKKy8qIFNldCB1cCB0cmFuc2xhdGlvbiB0byB0aGUgdGFyZ2V0IGNoYXJhY3RlciBzZXQuICAqLworZXh0ZXJuIHZvaWQgY3BwX2luaXRfaWNvbnYgKGNwcF9yZWFkZXIgKik7CisKKy8qIENhbGwgdGhpcyB0byBmaW5pc2ggcHJlcHJvY2Vzc2luZy4gIElmIHlvdSByZXF1ZXN0ZWQgZGVwZW5kZW5jeQorICAgZ2VuZXJhdGlvbiwgcGFzcyBhbiBvcGVuIHN0cmVhbSB0byB3cml0ZSB0aGUgaW5mb3JtYXRpb24gdG8sCisgICBvdGhlcndpc2UgTlVMTC4gIEl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gY2xvc2UgdGhlIHN0cmVhbS4gICovCitleHRlcm4gdm9pZCBjcHBfZmluaXNoIChjcHBfcmVhZGVyICosIEZJTEUgKmRlcHNfc3RyZWFtKTsKKworLyogQ2FsbCB0aGlzIHRvIHJlbGVhc2UgdGhlIGhhbmRsZSBhdCB0aGUgZW5kIG9mIHByZXByb2Nlc3NpbmcuICBBbnkKKyAgIHVzZSBvZiB0aGUgaGFuZGxlIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBpcyBpbnZhbGlkLiAgKi8KK2V4dGVybiB2b2lkIGNwcF9kZXN0cm95IChjcHBfcmVhZGVyICopOworCitleHRlcm4gdW5zaWduZWQgaW50IGNwcF90b2tlbl9sZW4gKGNvbnN0IGNwcF90b2tlbiAqKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyICpjcHBfdG9rZW5fYXNfdGV4dCAoY3BwX3JlYWRlciAqLCBjb25zdCBjcHBfdG9rZW4gKik7CitleHRlcm4gdW5zaWduZWQgY2hhciAqY3BwX3NwZWxsX3Rva2VuIChjcHBfcmVhZGVyICosIGNvbnN0IGNwcF90b2tlbiAqLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICosIGJvb2wpOworZXh0ZXJuIHZvaWQgY3BwX3JlZ2lzdGVyX3ByYWdtYSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgdm9pZCAoKikgKGNwcF9yZWFkZXIgKiksIGJvb2wpOworZXh0ZXJuIHZvaWQgY3BwX3JlZ2lzdGVyX2RlZmVycmVkX3ByYWdtYSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICosCisJCQkJCSAgY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgYm9vbCwgYm9vbCk7CitleHRlcm4gaW50IGNwcF9hdm9pZF9wYXN0ZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjcHBfdG9rZW4gKiwKKwkJCSAgICBjb25zdCBjcHBfdG9rZW4gKik7CitleHRlcm4gY29uc3QgY3BwX3Rva2VuICpjcHBfZ2V0X3Rva2VuIChjcHBfcmVhZGVyICopOworZXh0ZXJuIGNvbnN0IGNwcF90b2tlbiAqY3BwX2dldF90b2tlbl93aXRoX2xvY2F0aW9uIChjcHBfcmVhZGVyICosCisJCQkJCQkgICAgIHNvdXJjZV9sb2NhdGlvbiAqKTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICpjcHBfbWFjcm9fZGVmaW5pdGlvbiAoY3BwX3JlYWRlciAqLAorCQkJCQkJICBjcHBfaGFzaG5vZGUgKik7CitleHRlcm4gdm9pZCBfY3BwX2JhY2t1cF90b2tlbnMgKGNwcF9yZWFkZXIgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBjb25zdCBjcHBfdG9rZW4gKmNwcF9wZWVrX3Rva2VuIChjcHBfcmVhZGVyICosIGludCk7CisKKy8qIEV2YWx1YXRlIGEgQ1BQXypDSEFSKiB0b2tlbi4gICovCitleHRlcm4gY3BwY2hhcl90IGNwcF9pbnRlcnByZXRfY2hhcmNvbnN0IChjcHBfcmVhZGVyICosIGNvbnN0IGNwcF90b2tlbiAqLAorCQkJCQkgIHVuc2lnbmVkIGludCAqLCBpbnQgKik7CisvKiBFdmFsdWF0ZSBhIHZlY3RvciBvZiBDUFBfKlNUUklORyogdG9rZW5zLiAgKi8KK2V4dGVybiBib29sIGNwcF9pbnRlcnByZXRfc3RyaW5nIChjcHBfcmVhZGVyICosCisJCQkJICBjb25zdCBjcHBfc3RyaW5nICosIHNpemVfdCwKKwkJCQkgIGNwcF9zdHJpbmcgKiwgZW51bSBjcHBfdHR5cGUpOworZXh0ZXJuIGJvb2wgY3BwX2ludGVycHJldF9zdHJpbmdfbm90cmFuc2xhdGUgKGNwcF9yZWFkZXIgKiwKKwkJCQkJICAgICAgY29uc3QgY3BwX3N0cmluZyAqLCBzaXplX3QsCisJCQkJCSAgICAgIGNwcF9zdHJpbmcgKiwgZW51bSBjcHBfdHR5cGUpOworCisvKiBDb252ZXJ0IGEgaG9zdCBjaGFyYWN0ZXIgY29uc3RhbnQgdG8gdGhlIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0LiAgKi8KK2V4dGVybiBjcHBjaGFyX3QgY3BwX2hvc3RfdG9fZXhlY19jaGFyc2V0IChjcHBfcmVhZGVyICosIGNwcGNoYXJfdCk7CisKKy8qIFVzZWQgdG8gcmVnaXN0ZXIgbWFjcm9zIGFuZCBhc3NlcnRpb25zLCBwZXJoYXBzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAgIFRoZSB0ZXh0IGlzIHRoZSBzYW1lIGFzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQuICAqLworZXh0ZXJuIHZvaWQgY3BwX2RlZmluZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgY3BwX2RlZmluZV9mb3JtYXR0ZWQgKGNwcF9yZWFkZXIgKnBmaWxlLCAKKwkJCQkgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzI7CitleHRlcm4gdm9pZCBjcHBfYXNzZXJ0IChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBjcHBfdW5kZWYgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGNwcF91bmFzc2VydCAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOworCisvKiBVbmRlZmluZSBhbGwgbWFjcm9zIGFuZCBhc3NlcnRpb25zLiAgKi8KK2V4dGVybiB2b2lkIGNwcF91bmRlZl9hbGwgKGNwcF9yZWFkZXIgKik7CisKK2V4dGVybiBjcHBfYnVmZmVyICpjcHBfcHVzaF9idWZmZXIgKGNwcF9yZWFkZXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorCQkJCSAgICBzaXplX3QsIGludCk7CitleHRlcm4gaW50IGNwcF9kZWZpbmVkIChjcHBfcmVhZGVyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKKworLyogQSBwcmVwcm9jZXNzaW5nIG51bWJlci4gIENvZGUgYXNzdW1lcyB0aGF0IGFueSB1bnVzZWQgaGlnaCBiaXRzIG9mCisgICB0aGUgZG91YmxlIGludGVnZXIgYXJlIHNldCB0byB6ZXJvLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBjcHBfbnVtX3BhcnQ7Cit0eXBlZGVmIHN0cnVjdCBjcHBfbnVtIGNwcF9udW07CitzdHJ1Y3QgY3BwX251bQoreworICBjcHBfbnVtX3BhcnQgaGlnaDsKKyAgY3BwX251bV9wYXJ0IGxvdzsKKyAgYm9vbCB1bnNpZ25lZHA7ICAvKiBUcnVlIGlmIHZhbHVlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHVuc2lnbmVkLiAgKi8KKyAgYm9vbCBvdmVyZmxvdzsgICAvKiBUcnVlIGlmIHRoZSBtb3N0IHJlY2VudCBjYWxjdWxhdGlvbiBvdmVyZmxvd2VkLiAgKi8KK307CisKKy8qIGNwcGxpYiBwcm92aWRlcyB0d28gaW50ZXJmYWNlcyBmb3IgaW50ZXJwcmV0YXRpb24gb2YgcHJlcHJvY2Vzc2luZworICAgbnVtYmVycy4KKworICAgY3BwX2NsYXNzaWZ5X251bWJlciBjYXRlZ29yaXplcyBudW1lcmljIGNvbnN0YW50cyBhY2NvcmRpbmcgdG8KKyAgIHRoZWlyIGZpZWxkIChpbnRlZ2VyLCBmbG9hdGluZyBwb2ludCwgb3IgaW52YWxpZCksIHJhZGl4IChkZWNpbWFsLAorICAgb2N0YWwsIGhleGFkZWNpbWFsKSwgYW5kIHR5cGUgc3VmZml4ZXMuICAqLworCisjZGVmaW5lIENQUF9OX0NBVEVHT1JZICAweDAwMEYKKyNkZWZpbmUgQ1BQX05fSU5WQUxJRAkweDAwMDAKKyNkZWZpbmUgQ1BQX05fSU5URUdFUgkweDAwMDEKKyNkZWZpbmUgQ1BQX05fRkxPQVRJTkcJMHgwMDAyCisKKyNkZWZpbmUgQ1BQX05fV0lEVEgJMHgwMEYwCisjZGVmaW5lIENQUF9OX1NNQUxMCTB4MDAxMAkvKiBpbnQsIGZsb2F0LCBzaHJvdCBfRnJhY3QvQWNjdW0gICovCisjZGVmaW5lIENQUF9OX01FRElVTQkweDAwMjAJLyogbG9uZywgZG91YmxlLCBsb25nIF9GcmFjdC9fQWNjdW0uICAqLworI2RlZmluZSBDUFBfTl9MQVJHRQkweDAwNDAJLyogbG9uZyBsb25nLCBsb25nIGRvdWJsZSwKKwkJCQkgICBsb25nIGxvbmcgX0ZyYWN0L0FjY3VtLiAgKi8KKworI2RlZmluZSBDUFBfTl9XSURUSF9NRAkweEYwMDAwCS8qIG1hY2hpbmUgZGVmaW5lZC4gICovCisjZGVmaW5lIENQUF9OX01EX1cJMHgxMDAwMAorI2RlZmluZSBDUFBfTl9NRF9RCTB4MjAwMDAKKworI2RlZmluZSBDUFBfTl9SQURJWAkweDBGMDAKKyNkZWZpbmUgQ1BQX05fREVDSU1BTAkweDAxMDAKKyNkZWZpbmUgQ1BQX05fSEVYCTB4MDIwMAorI2RlZmluZSBDUFBfTl9PQ1RBTAkweDA0MDAKKyNkZWZpbmUgQ1BQX05fQklOQVJZCTB4MDgwMAorCisjZGVmaW5lIENQUF9OX1VOU0lHTkVECTB4MTAwMAkvKiBQcm9wZXJ0aWVzLiAgKi8KKyNkZWZpbmUgQ1BQX05fSU1BR0lOQVJZCTB4MjAwMAorI2RlZmluZSBDUFBfTl9ERkxPQVQJMHg0MDAwCisjZGVmaW5lIENQUF9OX0RFRkFVTFQJMHg4MDAwCisKKyNkZWZpbmUgQ1BQX05fRlJBQ1QJMHgxMDAwMDAgLyogRnJhY3QgdHlwZXMuICAqLworI2RlZmluZSBDUFBfTl9BQ0NVTQkweDIwMDAwMCAvKiBBY2N1bSB0eXBlcy4gICovCisKKyNkZWZpbmUgQ1BQX05fVVNFUkRFRgkweDEwMDAwMDAgLyogQysrMHggdXNlci1kZWZpbmVkIGxpdGVyYWwuICAqLworCisvKiBDbGFzc2lmeSBhIENQUF9OVU1CRVIgdG9rZW4uICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgY29tYmluYXRpb24gb2YKKyAgIHRoZSBmbGFncyBmcm9tIHRoZSBhYm92ZSBzZXRzLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBjcHBfY2xhc3NpZnlfbnVtYmVyIChjcHBfcmVhZGVyICosIGNvbnN0IGNwcF90b2tlbiAqLAorCQkJCSAgICAgY29uc3QgY2hhciAqKiwgc291cmNlX2xvY2F0aW9uKTsKKworLyogUmV0dXJuIHRoZSBjbGFzc2lmaWNhdGlvbiBmbGFncyBmb3IgYSBmbG9hdCBzdWZmaXguICAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBjcHBfaW50ZXJwcmV0X2Zsb2F0X3N1ZmZpeCAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICosCisJCQkJCQlzaXplX3QpOworCisvKiBSZXR1cm4gdGhlIGNsYXNzaWZpY2F0aW9uIGZsYWdzIGZvciBhbiBpbnQgc3VmZml4LiAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY3BwX2ludGVycHJldF9pbnRfc3VmZml4IChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJICAgICAgc2l6ZV90KTsKKworLyogRXZhbHVhdGUgYSB0b2tlbiBjbGFzc2lmaWVkIGFzIGNhdGVnb3J5IENQUF9OX0lOVEVHRVIuICAqLworZXh0ZXJuIGNwcF9udW0gY3BwX2ludGVycHJldF9pbnRlZ2VyIChjcHBfcmVhZGVyICosIGNvbnN0IGNwcF90b2tlbiAqLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCk7CisKKy8qIFNpZ24gZXh0ZW5kIGEgbnVtYmVyLCB3aXRoIFBSRUNJU0lPTiBzaWduaWZpY2FudCBiaXRzIGFuZCBhbGwKKyAgIG90aGVycyBhc3N1bWVkIGNsZWFyLCB0byBmaWxsIG91dCBhIGNwcF9udW0gc3RydWN0dXJlLiAgKi8KK2NwcF9udW0gY3BwX251bV9zaWduX2V4dGVuZCAoY3BwX251bSwgc2l6ZV90KTsKKworLyogRGlhZ25vc3RpYyBsZXZlbHMuICBUbyBnZXQgYSBkaWFnbm9zdGljIHdpdGhvdXQgYXNzb2NpYXRpbmcgYQorICAgcG9zaXRpb24gaW4gdGhlIHRyYW5zbGF0aW9uIHVuaXQgd2l0aCBpdCwgdXNlIGNwcF9lcnJvcl93aXRoX2xpbmUKKyAgIHdpdGggYSBsaW5lIG51bWJlciBvZiB6ZXJvLiAgKi8KKworZW51bSB7CisgIC8qIFdhcm5pbmcsIGFuIGVycm9yIHdpdGggLVdlcnJvci4gICovCisgIENQUF9ETF9XQVJOSU5HID0gMCwKKyAgLyogU2FtZSBhcyBDUFBfRExfV0FSTklORywgZXhjZXB0IGl0IGlzIG5vdCBzdXBwcmVzc2VkIGluIHN5c3RlbSBoZWFkZXJzLiAgKi8KKyAgQ1BQX0RMX1dBUk5JTkdfU1lTSERSLAorICAvKiBXYXJuaW5nLCBhbiBlcnJvciB3aXRoIC1wZWRhbnRpYy1lcnJvcnMgb3IgLVdlcnJvci4gICovCisgIENQUF9ETF9QRURXQVJOLAorICAvKiBBbiBlcnJvci4gICovCisgIENQUF9ETF9FUlJPUiwKKyAgLyogQW4gaW50ZXJuYWwgY29uc2lzdGVuY3kgY2hlY2sgZmFpbGVkLiAgUHJpbnRzICJpbnRlcm5hbCBlcnJvcjogIiwKKyAgICAgb3RoZXJ3aXNlIHRoZSBzYW1lIGFzIENQUF9ETF9FUlJPUi4gICovCisgIENQUF9ETF9JQ0UsCisgIC8qIEFuIGluZm9ybWF0aXZlIG5vdGUgZm9sbG93aW5nIGEgd2FybmluZy4gICovCisgIENQUF9ETF9OT1RFLAorICAvKiBBIGZhdGFsIGVycm9yLiAgKi8KKyAgQ1BQX0RMX0ZBVEFMCit9OworCisvKiBXYXJuaW5nIHJlYXNvbiBjb2Rlcy4gVXNlIGEgcmVhc29uIGNvZGUgb2YgemVybyBmb3IgdW5jbGFzc2lmaWVkIHdhcm5pbmdzCisgICBhbmQgZXJyb3JzIHRoYXQgYXJlIG5vdCB3YXJuaW5ncy4gICovCitlbnVtIHsKKyAgQ1BQX1dfTk9ORSA9IDAsCisgIENQUF9XX0RFUFJFQ0FURUQsCisgIENQUF9XX0NPTU1FTlRTLAorICBDUFBfV19NSVNTSU5HX0lOQ0xVREVfRElSUywKKyAgQ1BQX1dfVFJJR1JBUEhTLAorICBDUFBfV19NVUxUSUNIQVIsCisgIENQUF9XX1RSQURJVElPTkFMLAorICBDUFBfV19MT05HX0xPTkcsCisgIENQUF9XX0VORElGX0xBQkVMUywKKyAgQ1BQX1dfTlVNX1NJR05fQ0hBTkdFLAorICBDUFBfV19WQVJJQURJQ19NQUNST1MsCisgIENQUF9XX0JVSUxUSU5fTUFDUk9fUkVERUZJTkVELAorICBDUFBfV19ET0xMQVJTLAorICBDUFBfV19VTkRFRiwKKyAgQ1BQX1dfVU5VU0VEX01BQ1JPUywKKyAgQ1BQX1dfQ1hYX09QRVJBVE9SX05BTUVTLAorICBDUFBfV19OT1JNQUxJWkUsCisgIENQUF9XX0lOVkFMSURfUENILAorICBDUFBfV19XQVJOSU5HX0RJUkVDVElWRSwKKyAgQ1BQX1dfTElURVJBTF9TVUZGSVgKK307CisKKy8qIE91dHB1dCBhIGRpYWdub3N0aWMgb2Ygc29tZSBraW5kLiAgKi8KK2V4dGVybiBib29sIGNwcF9lcnJvciAoY3BwX3JlYWRlciAqLCBpbnQsIGNvbnN0IGNoYXIgKm1zZ2lkLCAuLi4pCisgIEFUVFJJQlVURV9QUklOVEZfMzsKK2V4dGVybiBib29sIGNwcF93YXJuaW5nIChjcHBfcmVhZGVyICosIGludCwgY29uc3QgY2hhciAqbXNnaWQsIC4uLikKKyAgQVRUUklCVVRFX1BSSU5URl8zOworZXh0ZXJuIGJvb2wgY3BwX3BlZHdhcm5pbmcgKGNwcF9yZWFkZXIgKiwgaW50LCBjb25zdCBjaGFyICptc2dpZCwgLi4uKQorICBBVFRSSUJVVEVfUFJJTlRGXzM7CitleHRlcm4gYm9vbCBjcHBfd2FybmluZ19zeXNoZHIgKGNwcF9yZWFkZXIgKiwgaW50LCBjb25zdCBjaGFyICptc2dpZCwgLi4uKQorICBBVFRSSUJVVEVfUFJJTlRGXzM7CisKKy8qIE91dHB1dCBhIGRpYWdub3N0aWMgd2l0aCAiTVNHSUQ6ICIgcHJlY2VkaW5nIHRoZQorICAgZXJyb3Igc3RyaW5nIG9mIGVycm5vLiAgTm8gbG9jYXRpb24gaXMgcHJpbnRlZC4gICovCitleHRlcm4gYm9vbCBjcHBfZXJybm8gKGNwcF9yZWFkZXIgKiwgaW50LCBjb25zdCBjaGFyICptc2dpZCk7CisKKy8qIFNhbWUgYXMgY3BwX2Vycm9yLCBleGNlcHQgYWRkaXRpb25hbGx5IHNwZWNpZmllcyBhIHBvc2l0aW9uIGFzIGEKKyAgICh0cmFuc2xhdGlvbiB1bml0KSBwaHlzaWNhbCBsaW5lIGFuZCBwaHlzaWNhbCBjb2x1bW4uICBJZiB0aGUgbGluZSBpcworICAgemVybywgdGhlbiBubyBsb2NhdGlvbiBpcyBwcmludGVkLiAgKi8KK2V4dGVybiBib29sIGNwcF9lcnJvcl93aXRoX2xpbmUgKGNwcF9yZWFkZXIgKiwgaW50LCBzb3VyY2VfbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCwgY29uc3QgY2hhciAqbXNnaWQsIC4uLikKKyAgQVRUUklCVVRFX1BSSU5URl81OworZXh0ZXJuIGJvb2wgY3BwX3dhcm5pbmdfd2l0aF9saW5lIChjcHBfcmVhZGVyICosIGludCwgc291cmNlX2xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCwgY29uc3QgY2hhciAqbXNnaWQsIC4uLikKKyAgQVRUUklCVVRFX1BSSU5URl81OworZXh0ZXJuIGJvb2wgY3BwX3BlZHdhcm5pbmdfd2l0aF9saW5lIChjcHBfcmVhZGVyICosIGludCwgc291cmNlX2xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCwgY29uc3QgY2hhciAqbXNnaWQsIC4uLikKKyAgQVRUUklCVVRFX1BSSU5URl81OworZXh0ZXJuIGJvb2wgY3BwX3dhcm5pbmdfd2l0aF9saW5lX3N5c2hkciAoY3BwX3JlYWRlciAqLCBpbnQsIHNvdXJjZV9sb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkLCBjb25zdCBjaGFyICptc2dpZCwgLi4uKQorICBBVFRSSUJVVEVfUFJJTlRGXzU7CisKKy8qIEluIGxleC5jICovCitleHRlcm4gaW50IGNwcF9pZGVxIChjb25zdCBjcHBfdG9rZW4gKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGNwcF9vdXRwdXRfbGluZSAoY3BwX3JlYWRlciAqLCBGSUxFICopOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmNwcF9vdXRwdXRfbGluZV90b19zdHJpbmcgKGNwcF9yZWFkZXIgKiwKKwkJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIHZvaWQgY3BwX291dHB1dF90b2tlbiAoY29uc3QgY3BwX3Rva2VuICosIEZJTEUgKik7CitleHRlcm4gY29uc3QgY2hhciAqY3BwX3R5cGUybmFtZSAoZW51bSBjcHBfdHR5cGUsIHVuc2lnbmVkIGNoYXIgZmxhZ3MpOworLyogUmV0dXJucyB0aGUgdmFsdWUgb2YgYW4gZXNjYXBlIHNlcXVlbmNlLCB0cnVuY2F0ZWQgdG8gdGhlIGNvcnJlY3QKKyAgIHRhcmdldCBwcmVjaXNpb24uICBQU1RSIHBvaW50cyB0byB0aGUgaW5wdXQgcG9pbnRlciwgd2hpY2ggaXMganVzdAorICAgYWZ0ZXIgdGhlIGJhY2tzbGFzaC4gIExJTUlUIGlzIGhvdyBtdWNoIHRleHQgd2UgaGF2ZS4gIFdJREUgaXMgdHJ1ZQorICAgaWYgdGhlIGVzY2FwZSBzZXF1ZW5jZSBpcyBwYXJ0IG9mIGEgd2lkZSBjaGFyYWN0ZXIgY29uc3RhbnQgb3IKKyAgIHN0cmluZyBsaXRlcmFsLiAgSGFuZGxlcyBhbGwgcmVsZXZhbnQgZGlhZ25vc3RpY3MuICAqLworZXh0ZXJuIGNwcGNoYXJfdCBjcHBfcGFyc2VfZXNjYXBlIChjcHBfcmVhZGVyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiogcHN0ciwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwgaW50IHdpZGUpOworCisvKiBTdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGEgY29tbWVudCBibG9jayBhdCBhIGdpdmVuIGxvY2F0aW9uIGluIHRoZQorICAgc291cmNlIGNvZGUuICAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAvKiBUZXh0IG9mIHRoZSBjb21tZW50IGluY2x1ZGluZyB0aGUgdGVybWluYXRvcnMuICAqLworICBjaGFyICpjb21tZW50OworCisgIC8qIHNvdXJjZSBsb2NhdGlvbiBmb3IgdGhlIGdpdmVuIGNvbW1lbnQuICAqLworICBzb3VyY2VfbG9jYXRpb24gc2xvYzsKK30gY3BwX2NvbW1lbnQ7CisKKy8qIFN0cnVjdHVyZSBob2xkaW5nIGFsbCBjb21tZW50cyBmb3IgYSBnaXZlbiBjcHBfcmVhZGVyLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogdGFibGUgb2YgY29tbWVudCBlbnRyaWVzLiAgKi8KKyAgY3BwX2NvbW1lbnQgKmVudHJpZXM7CisKKyAgLyogbnVtYmVyIG9mIGFjdHVhbCBlbnRyaWVzIGVudGVyZWQgaW4gdGhlIHRhYmxlLiAgKi8KKyAgaW50IGNvdW50OworCisgIC8qIG51bWJlciBvZiBlbnRyaWVzIGFsbG9jYXRlZCBjdXJyZW50bHkuICAqLworICBpbnQgYWxsb2NhdGVkOworfSBjcHBfY29tbWVudF90YWJsZTsKKworLyogUmV0dXJucyB0aGUgdGFibGUgb2YgY29tbWVudHMgZW5jb3VudGVyZWQgYnkgdGhlIHByZXByb2Nlc3Nvci4gVGhpcworICAgdGFibGUgaXMgb25seSBwb3B1bGF0ZWQgd2hlbiBwZmlsZS0+c3RhdGUuc2F2ZV9jb21tZW50cyBpcyB0cnVlLiAqLworZXh0ZXJuIGNwcF9jb21tZW50X3RhYmxlICpjcHBfZ2V0X2NvbW1lbnRzIChjcHBfcmVhZGVyICopOworCisvKiBJbiBoYXNoLmMgKi8KKworLyogTG9va3VwIGFuIGlkZW50aWZpZXIgaW4gdGhlIGhhc2h0YWJsZS4gIFB1dHMgdGhlIGlkZW50aWZpZXIgaW4gdGhlCisgICB0YWJsZSBpZiBpdCBpcyBub3QgYWxyZWFkeSB0aGVyZS4gICovCitleHRlcm4gY3BwX2hhc2hub2RlICpjcHBfbG9va3VwIChjcHBfcmVhZGVyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKwkJCQkgdW5zaWduZWQgaW50KTsKKwordHlwZWRlZiBpbnQgKCpjcHBfY2IpIChjcHBfcmVhZGVyICosIGNwcF9oYXNobm9kZSAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgY3BwX2ZvcmFsbF9pZGVudGlmaWVycyAoY3BwX3JlYWRlciAqLCBjcHBfY2IsIHZvaWQgKik7CisKKy8qIEluIG1hY3JvLmMgKi8KK2V4dGVybiB2b2lkIGNwcF9zY2FuX25vb3V0cHV0IChjcHBfcmVhZGVyICopOworZXh0ZXJuIGludCAgY3BwX3N5c19tYWNyb19wIChjcHBfcmVhZGVyICopOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmNwcF9xdW90ZV9zdHJpbmcgKHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorCQkJCQl1bnNpZ25lZCBpbnQpOworCisvKiBJbiBmaWxlcy5jICovCitleHRlcm4gYm9vbCBjcHBfaW5jbHVkZWQgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBib29sIGNwcF9pbmNsdWRlZF9iZWZvcmUgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqLCBzb3VyY2VfbG9jYXRpb24pOworZXh0ZXJuIHZvaWQgY3BwX21ha2Vfc3lzdGVtX2hlYWRlciAoY3BwX3JlYWRlciAqLCBpbnQsIGludCk7CitleHRlcm4gYm9vbCBjcHBfcHVzaF9pbmNsdWRlIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gYm9vbCBjcHBfcHVzaF9kZWZhdWx0X2luY2x1ZGUgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGNwcF9jaGFuZ2VfZmlsZSAoY3BwX3JlYWRlciAqLCBlbnVtIGxjX3JlYXNvbiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpjcHBfZ2V0X3BhdGggKHN0cnVjdCBfY3BwX2ZpbGUgKik7CitleHRlcm4gY3BwX2RpciAqY3BwX2dldF9kaXIgKHN0cnVjdCBfY3BwX2ZpbGUgKik7CitleHRlcm4gY3BwX2J1ZmZlciAqY3BwX2dldF9idWZmZXIgKGNwcF9yZWFkZXIgKik7CitleHRlcm4gc3RydWN0IF9jcHBfZmlsZSAqY3BwX2dldF9maWxlIChjcHBfYnVmZmVyICopOworZXh0ZXJuIGNwcF9idWZmZXIgKmNwcF9nZXRfcHJldiAoY3BwX2J1ZmZlciAqKTsKK2V4dGVybiB2b2lkIGNwcF9jbGVhcl9maWxlX2NhY2hlIChjcHBfcmVhZGVyICopOworCisvKiBJbiBwY2guYyAqLworc3RydWN0IHNhdmVfbWFjcm9fZGF0YTsKK2V4dGVybiBpbnQgY3BwX3NhdmVfc3RhdGUgKGNwcF9yZWFkZXIgKiwgRklMRSAqKTsKK2V4dGVybiBpbnQgY3BwX3dyaXRlX3BjaF9kZXBzIChjcHBfcmVhZGVyICosIEZJTEUgKik7CitleHRlcm4gaW50IGNwcF93cml0ZV9wY2hfc3RhdGUgKGNwcF9yZWFkZXIgKiwgRklMRSAqKTsKK2V4dGVybiBpbnQgY3BwX3ZhbGlkX3N0YXRlIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIGNwcF9wcmVwYXJlX3N0YXRlIChjcHBfcmVhZGVyICosIHN0cnVjdCBzYXZlX21hY3JvX2RhdGEgKiopOworZXh0ZXJuIGludCBjcHBfcmVhZF9zdGF0ZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICosIEZJTEUgKiwKKwkJCSAgIHN0cnVjdCBzYXZlX21hY3JvX2RhdGEgKik7CisKKy8qIEluIGxleC5jICovCitleHRlcm4gdm9pZCBjcHBfZm9yY2VfdG9rZW5fbG9jYXRpb25zIChjcHBfcmVhZGVyICosIHNvdXJjZV9sb2NhdGlvbiAqKTsKK2V4dGVybiB2b2lkIGNwcF9zdG9wX2ZvcmNpbmdfdG9rZW5fbG9jYXRpb25zIChjcHBfcmVhZGVyICopOworCisvKiBJbiBleHByLmMgKi8KK2V4dGVybiBlbnVtIGNwcF90dHlwZSBjcHBfdXNlcmRlZl9zdHJpbmdfcmVtb3ZlX3R5cGUKKyAgKGVudW0gY3BwX3R0eXBlIHR5cGUpOworZXh0ZXJuIGVudW0gY3BwX3R0eXBlIGNwcF91c2VyZGVmX3N0cmluZ19hZGRfdHlwZQorICAoZW51bSBjcHBfdHR5cGUgdHlwZSk7CitleHRlcm4gZW51bSBjcHBfdHR5cGUgY3BwX3VzZXJkZWZfY2hhcl9yZW1vdmVfdHlwZQorICAoZW51bSBjcHBfdHR5cGUgdHlwZSk7CitleHRlcm4gZW51bSBjcHBfdHR5cGUgY3BwX3VzZXJkZWZfY2hhcl9hZGRfdHlwZQorICAoZW51bSBjcHBfdHR5cGUgdHlwZSk7CitleHRlcm4gYm9vbCBjcHBfdXNlcmRlZl9zdHJpbmdfcAorICAoZW51bSBjcHBfdHR5cGUgdHlwZSk7CitleHRlcm4gYm9vbCBjcHBfdXNlcmRlZl9jaGFyX3AKKyAgKGVudW0gY3BwX3R0eXBlIHR5cGUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjcHBfZ2V0X3VzZXJkZWZfc3VmZml4CisgIChjb25zdCBjcHBfdG9rZW4gKik7CisKKyNlbmRpZiAvKiAhIExJQkNQUF9DUFBMSUJfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RlYnVnLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODZkZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RlYnVnLmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qIERlYnVnIGhvb2tzIGZvciBHQ0MuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19ERUJVR19ICisjZGVmaW5lIEdDQ19ERUJVR19ICisKKy8qIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGhvb2tzIGZvciB0aGUgZGVidWcgaW5mb3JtYXRpb24gb3V0cHV0CisgICBmdW5jdGlvbnMsIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGdsb2JhbCBpbnN0YW5jZSBkZWJ1Z19ob29rcyBzZXQgaW4KKyAgIHRvcGxldi5jIGFjY29yZGluZyB0byBjb21tYW5kIGxpbmUgb3B0aW9ucy4gICovCitzdHJ1Y3QgZ2NjX2RlYnVnX2hvb2tzCit7CisgIC8qIEluaXRpYWxpemUgZGVidWcgb3V0cHV0LiAgTUFJTl9GSUxFTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgbWFpbgorICAgICBpbnB1dCBmaWxlLiAgKi8KKyAgdm9pZCAoKiBpbml0KSAoY29uc3QgY2hhciAqbWFpbl9maWxlbmFtZSk7CisKKyAgLyogT3V0cHV0IGRlYnVnIHN5bWJvbHMuICAqLworICB2b2lkICgqIGZpbmlzaCkgKGNvbnN0IGNoYXIgKm1haW5fZmlsZW5hbWUpOworCisgIC8qIENhbGxlZCBmcm9tIGNncmFwaF9vcHRpbWl6ZSBiZWZvcmUgc3RhcnRpbmcgdG8gYXNzZW1ibGUKKyAgICAgZnVuY3Rpb25zL3ZhcmlhYmxlcy90b3BsZXZlbCBhc21zLiAgKi8KKyAgdm9pZCAoKiBhc3NlbWJseV9zdGFydCkgKHZvaWQpOworCisgIC8qIE1hY3JvIGRlZmluZWQgb24gbGluZSBMSU5FIHdpdGggbmFtZSBhbmQgZXhwYW5zaW9uIFRFWFQuICAqLworICB2b2lkICgqIGRlZmluZSkgKHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICp0ZXh0KTsKKworICAvKiBNQUNSTyB1bmRlZmluZWQgb24gbGluZSBMSU5FLiAgKi8KKyAgdm9pZCAoKiB1bmRlZikgKHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICptYWNybyk7CisKKyAgLyogUmVjb3JkIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgc291cmNlIGZpbGUgRklMRSBmcm9tIExJTkUgbnVtYmVyCisgICAgIGluIHRoZSBwcmV2aW91cyBvbmUuICAqLworICB2b2lkICgqIHN0YXJ0X3NvdXJjZV9maWxlKSAodW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZpbGUpOworCisgIC8qIFJlY29yZCB0aGUgcmVzdW1wdGlvbiBvZiBhIHNvdXJjZSBmaWxlLiAgTElORSBpcyB0aGUgbGluZSBudW1iZXIKKyAgICAgaW4gdGhlIHNvdXJjZSBmaWxlIHdlIGFyZSByZXR1cm5pbmcgdG8uICAqLworICB2b2lkICgqIGVuZF9zb3VyY2VfZmlsZSkgKHVuc2lnbmVkIGludCBsaW5lKTsKKworICAvKiBSZWNvcmQgdGhlIGJlZ2lubmluZyBvZiBibG9jayBOLCBjb3VudGluZyBmcm9tIDEgYW5kIG5vdAorICAgICBpbmNsdWRpbmcgdGhlIGZ1bmN0aW9uLXNjb3BlIGJsb2NrLCBhdCBMSU5FLiAgKi8KKyAgdm9pZCAoKiBiZWdpbl9ibG9jaykgKHVuc2lnbmVkIGludCBsaW5lLCB1bnNpZ25lZCBpbnQgbik7CisKKyAgLyogUmVjb3JkIHRoZSBlbmQgb2YgYSBibG9jay4gIEFyZ3VtZW50cyBhcyBmb3IgYmVnaW5fYmxvY2suICAqLworICB2b2lkICgqIGVuZF9ibG9jaykgKHVuc2lnbmVkIGludCBsaW5lLCB1bnNpZ25lZCBpbnQgbik7CisKKyAgLyogUmV0dXJucyBub256ZXJvIGlmIGl0IGlzIGFwcHJvcHJpYXRlIG5vdCB0byBlbWl0IGFueSBkZWJ1Z2dpbmcKKyAgICAgaW5mb3JtYXRpb24gZm9yIEJMT0NLLCBiZWNhdXNlIGl0IGRvZXNuJ3QgY29udGFpbiBhbnkKKyAgICAgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBtYXkgbm90IGJlIHRoZSBjYXNlIGZvciBibG9ja3MgY29udGFpbmluZworICAgICBuZXN0ZWQgZnVuY3Rpb25zLCBzaW5jZSB3ZSBtYXkgYWN0dWFsbHkgY2FsbCBzdWNoIGEgZnVuY3Rpb24gZXZlbgorICAgICB0aG91Z2ggdGhlIEJMT0NLIGluZm9ybWF0aW9uIGlzIG1lc3NlZCB1cC4gIERlZmF1bHRzIHRvIHRydWUuICAqLworICBib29sICgqIGlnbm9yZV9ibG9jaykgKGNvbnN0X3RyZWUpOworCisgIC8qIFJlY29yZCBhIHNvdXJjZSBmaWxlIGxvY2F0aW9uIGF0IChGSUxFLCBMSU5FLCBESVNDUklNSU5BVE9SKS4gICovCisgIHZvaWQgKCogc291cmNlX2xpbmUpICh1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgY2hhciAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXNjcmltaW5hdG9yLCBib29sIGlzX3N0bXQpOworCisgIC8qIENhbGxlZCBhdCBzdGFydCBvZiBwcm9sb2d1ZSBjb2RlLiAgTElORSBpcyB0aGUgZmlyc3QgbGluZSBpbiB0aGUKKyAgICAgZnVuY3Rpb24uICAqLworICB2b2lkICgqIGJlZ2luX3Byb2xvZ3VlKSAodW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZpbGUpOworCisgIC8qIENhbGxlZCBhdCBlbmQgb2YgcHJvbG9ndWUgY29kZS4gIExJTkUgaXMgdGhlIGZpcnN0IGxpbmUgaW4gdGhlCisgICAgIGZ1bmN0aW9uLiAgKi8KKyAgdm9pZCAoKiBlbmRfcHJvbG9ndWUpICh1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgY2hhciAqZmlsZSk7CisKKyAgLyogQ2FsbGVkIGF0IGJlZ2lubmluZyBvZiBlcGlsb2d1ZSBjb2RlLiAgKi8KKyAgdm9pZCAoKiBiZWdpbl9lcGlsb2d1ZSkgKHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmaWxlKTsKKworICAvKiBSZWNvcmQgZW5kIG9mIGVwaWxvZ3VlIGNvZGUuICAqLworICB2b2lkICgqIGVuZF9lcGlsb2d1ZSkgKHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmaWxlKTsKKworICAvKiBDYWxsZWQgYXQgc3RhcnQgb2YgZnVuY3Rpb24gREVDTCwgYmVmb3JlIGl0IGlzIGRlY2xhcmVkLiAgKi8KKyAgdm9pZCAoKiBiZWdpbl9mdW5jdGlvbikgKHRyZWUgZGVjbCk7CisKKyAgLyogUmVjb3JkIGVuZCBvZiBmdW5jdGlvbi4gIExJTkUgaXMgaGlnaGVzdCBsaW5lIG51bWJlciBpbiBmdW5jdGlvbi4gICovCisgIHZvaWQgKCogZW5kX2Z1bmN0aW9uKSAodW5zaWduZWQgaW50IGxpbmUpOworCisgIC8qIERlYnVnIGluZm9ybWF0aW9uIGZvciBhIGZ1bmN0aW9uIERFQ0wuICBUaGlzIG1pZ2h0IGluY2x1ZGUgdGhlCisgICAgIGZ1bmN0aW9uIG5hbWUgKGEgc3ltYm9sKSwgaXRzIHBhcmFtZXRlcnMsIGFuZCB0aGUgYmxvY2sgdGhhdAorICAgICBtYWtlcyB1cCB0aGUgZnVuY3Rpb24ncyBib2R5LCBhbmQgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUKKyAgICAgZnVuY3Rpb24uICAqLworICB2b2lkICgqIGZ1bmN0aW9uX2RlY2wpICh0cmVlIGRlY2wpOworCisgIC8qIERlYnVnIGluZm9ybWF0aW9uIGZvciBhIGdsb2JhbCBERUNMLiAgQ2FsbGVkIGZyb20gdG9wbGV2LmMgYWZ0ZXIKKyAgICAgY29tcGlsYXRpb24gcHJvcGVyIGhhcyBmaW5pc2hlZC4gICovCisgIHZvaWQgKCogZ2xvYmFsX2RlY2wpICh0cmVlIGRlY2wpOworCisgIC8qIERlYnVnIGluZm9ybWF0aW9uIGZvciBhIHR5cGUgREVDTC4gIENhbGxlZCBmcm9tIHRvcGxldi5jIGFmdGVyCisgICAgIGNvbXBpbGF0aW9uIHByb3BlciwgYWxzbyBmcm9tIHZhcmlvdXMgbGFuZ3VhZ2UgZnJvbnQgZW5kcyB0bworICAgICByZWNvcmQgYnVpbHQtaW4gdHlwZXMuICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHByb3Blcmx5IGEKKyAgICAgYm9vbGVhbiwgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSB0eXBlIGlzIGEgImxvY2FsIgorICAgICB0eXBlIGFzIGRldGVybWluZWQgYnkgdGhlIGxhbmd1YWdlLiAgKEl0J3Mgbm90IGEgYm9vbGVhbiBmb3IKKyAgICAgbGVnYWN5IHJlYXNvbnMuKSAgKi8KKyAgdm9pZCAoKiB0eXBlX2RlY2wpICh0cmVlIGRlY2wsIGludCBsb2NhbCk7CisKKyAgLyogRGVidWcgaW5mb3JtYXRpb24gZm9yIGltcG9ydGVkIG1vZHVsZXMgYW5kIGRlY2xhcmF0aW9ucy4gICovCisgIHZvaWQgKCogaW1wb3J0ZWRfbW9kdWxlX29yX2RlY2wpICh0cmVlIGRlY2wsIHRyZWUgbmFtZSwKKwkJCQkgICAgdHJlZSBjb250ZXh0LCBib29sIGNoaWxkKTsKKworICAvKiBERUNMIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgd2hvc2UgYm9keSBpcyBwcmVzZW50LCBidXQgd2hpY2ggaXMKKyAgICAgbm90IGJlaW5nIG91dHB1dCBhdCB0aGlzIHBvaW50LiAgKi8KKyAgdm9pZCAoKiBkZWZlcnJlZF9pbmxpbmVfZnVuY3Rpb24pICh0cmVlIGRlY2wpOworCisgIC8qIERFQ0wgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIHdoaWNoIGlzIGFib3V0IHRvIGJlIGVtaXR0ZWQgb3V0IG9mCisgICAgIGxpbmUuICBUaGUgaG9vayBpcyB1c2VmdWwgdG8sIGUuZy4sIGVtaXQgYWJzdHJhY3QgZGVidWcgaW5mbyBmb3IKKyAgICAgdGhlIGlubGluZSBiZWZvcmUgaXQgZ2V0cyBtYW5nbGVkIGJ5IG9wdGltaXphdGlvbi4gICovCisgIHZvaWQgKCogb3V0bGluaW5nX2lubGluZV9mdW5jdGlvbikgKHRyZWUgZGVjbCk7CisKKyAgLyogQ2FsbGVkIGZyb20gZmluYWxfc2Nhbl9pbnNuIGZvciBhbnkgQ09ERV9MQUJFTCBpbnNuIHdob3NlCisgICAgIExBQkVMX05BTUUgaXMgbm9uLW51bGwuICAqLworICB2b2lkICgqIGxhYmVsKSAocnR4KTsKKworICAvKiBDYWxsZWQgYWZ0ZXIgdGhlIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGVuZCBvZiB3cml0aW5nIGEgUENIIGZpbGUuCisgICAgIFRoZSBwYXJhbWV0ZXIgaXMgMCBpZiBhZnRlciB0aGUgc3RhcnQsIDEgaWYgYmVmb3JlIHRoZSBlbmQuICAqLworICB2b2lkICgqIGhhbmRsZV9wY2gpICh1bnNpZ25lZCBpbnQpOworCisgIC8qIENhbGxlZCBmcm9tIGZpbmFsX3NjYW5faW5zbiBmb3IgYW55IE5PVEVfSU5TTl9WQVJfTE9DQVRJT04gbm90ZS4gICovCisgIHZvaWQgKCogdmFyX2xvY2F0aW9uKSAocnR4KTsKKworICAvKiBDYWxsZWQgZnJvbSBmaW5hbF9zY2FuX2luc24gaWYgdGhlcmUgaXMgYSBzd2l0Y2ggYmV0d2VlbiBob3QgYW5kIGNvbGQKKyAgICAgdGV4dCBzZWN0aW9ucy4gICovCisgIHZvaWQgKCogc3dpdGNoX3RleHRfc2VjdGlvbikgKHZvaWQpOworCisgIC8qIENhbGxlZCBmcm9tIGdyb2tkZWNsYXJhdG9yLiAgUmVwbGFjZXMgdGhlIGFub255bW91cyBuYW1lIHdpdGggdGhlCisgICAgIHR5cGUgbmFtZS4gICovCisgIHZvaWQgKCogc2V0X25hbWUpICh0cmVlLCB0cmVlKTsKKworICAvKiBUaGlzIGlzIDEgaWYgdGhlIGRlYnVnIHdyaXRlciB3YW50cyB0byBzZWUgc3RhcnQgYW5kIGVuZCBjb21tYW5kcyBmb3IgdGhlCisgICAgIG1haW4gc291cmNlIGZpbGVzLCBhbmQgMCBvdGhlcndpc2UuICAqLworICBpbnQgc3RhcnRfZW5kX21haW5fc291cmNlX2ZpbGU7CisKKyAgLyogVGhlIHR5cGUgb2Ygc3ltdGFiIGZpZWxkIHVzZWQgYnkgdGhlc2UgZGVidWcgaG9va3MuICBUaGlzIGlzIG9uZQorICAgICBvZiB0aGUgVFlQRV9TWU1UQUJfSVNfeHh4IHZhbHVlcyBkZWZpbmVkIGluIHRyZWUuaC4gICovCisgIGludCB0cmVlX3R5cGVfc3ltdGFiX2ZpZWxkOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnY2NfZGVidWdfaG9va3MgKmRlYnVnX2hvb2tzOworCisvKiBUaGUgZG8tbm90aGluZyBob29rcy4gICovCitleHRlcm4gdm9pZCBkZWJ1Z19ub3RoaW5nX3ZvaWQgKHZvaWQpOworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ19jaGFyc3RhciAoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGRlYnVnX25vdGhpbmdfaW50X2NoYXJzdGFyICh1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBkZWJ1Z19ub3RoaW5nX2ludF9jaGFyc3Rhcl9pbnRfYm9vbCAodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBib29sKTsKK2V4dGVybiB2b2lkIGRlYnVnX25vdGhpbmdfaW50ICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ19pbnRfaW50ICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBkZWJ1Z19ub3RoaW5nX3RyZWUgKHRyZWUpOworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ190cmVlX3RyZWUgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ190cmVlX2ludCAodHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIGRlYnVnX25vdGhpbmdfdHJlZV90cmVlX3RyZWVfYm9vbCAodHJlZSwgdHJlZSwgdHJlZSwgYm9vbCk7CitleHRlcm4gYm9vbCBkZWJ1Z190cnVlX2NvbnN0X3RyZWUgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHZvaWQgZGVidWdfbm90aGluZ19ydHggKHJ0eCk7CitleHRlcm4gdm9pZCBkZWJ1Z19ub3RoaW5nX3J0eF9ydHggKHJ0eCwgcnR4KTsKKworLyogSG9va3MgZm9yIHZhcmlvdXMgZGVidWcgZm9ybWF0cy4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IGdjY19kZWJ1Z19ob29rcyBkb19ub3RoaW5nX2RlYnVnX2hvb2tzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnY2NfZGVidWdfaG9va3MgZGJ4X2RlYnVnX2hvb2tzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnY2NfZGVidWdfaG9va3Mgc2RiX2RlYnVnX2hvb2tzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnY2NfZGVidWdfaG9va3MgeGNvZmZfZGVidWdfaG9va3M7CitleHRlcm4gY29uc3Qgc3RydWN0IGdjY19kZWJ1Z19ob29rcyBkd2FyZjJfZGVidWdfaG9va3M7CitleHRlcm4gY29uc3Qgc3RydWN0IGdjY19kZWJ1Z19ob29rcyB2bXNkYmdfZGVidWdfaG9va3M7CisKKy8qIER3YXJmMiBmcmFtZSBpbmZvcm1hdGlvbi4gICovCisKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9iZWdpbl9wcm9sb2d1ZSAodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZHdhcmYyb3V0X3Ztc19lbmRfcHJvbG9ndWUgKHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGR3YXJmMm91dF92bXNfYmVnaW5fZXBpbG9ndWUgKHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9lbmRfZXBpbG9ndWUgKHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9mcmFtZV9maW5pc2ggKHZvaWQpOworLyogRGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBlbWl0IGZyYW1lIHVud2luZCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQKKyAgIHRyYW5zbGF0aW9uIHVuaXQuICAqLworZXh0ZXJuIGJvb2wgZHdhcmYyb3V0X2RvX2ZyYW1lICh2b2lkKTsKK2V4dGVybiBib29sIGR3YXJmMm91dF9kb19jZmlfYXNtICh2b2lkKTsKK2V4dGVybiB2b2lkIGR3YXJmMm91dF9zd2l0Y2hfdGV4dF9zZWN0aW9uICh2b2lkKTsKKworY29uc3QgY2hhciAqcmVtYXBfZGVidWdfZmlsZW5hbWUgKGNvbnN0IGNoYXIgKik7Cit2b2lkIGFkZF9kZWJ1Z19wcmVmaXhfbWFwIChjb25zdCBjaGFyICopOworCisvKiBGb3IgLWZkdW1wLWdvLXNwZWMuICAqLworCitleHRlcm4gY29uc3Qgc3RydWN0IGdjY19kZWJ1Z19ob29rcyAqCitkdW1wX2dvX3NwZWNfaW5pdCAoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgZ2NjX2RlYnVnX2hvb2tzICopOworCisjZW5kaWYgLyogIUdDQ19ERUJVR19IICAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RlZmF1bHRzLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZGVmYXVsdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQzZjZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RlZmF1bHRzLmgKQEAgLTAsMCArMSwxNDA5IEBACisvKiBEZWZpbml0aW9ucyBvZiB2YXJpb3VzIGRlZmF1bHRzIGZvciB0bS5oIG1hY3Jvcy4KKyAgIENvcHlyaWdodCAoQykgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgUm9uIEd1aWxtZXR0ZSAocmZnQG1vbmtleXMuY29tKQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1VuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCithIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19ERUZBVUxUU19ICisjZGVmaW5lIEdDQ19ERUZBVUxUU19ICisKKy8qIEhvdyB0byBzdGFydCBhbiBhc3NlbWJsZXIgY29tbWVudC4gICovCisjaWZuZGVmIEFTTV9DT01NRU5UX1NUQVJUCisjZGVmaW5lIEFTTV9DT01NRU5UX1NUQVJUICI7IyIKKyNlbmRpZgorCisvKiBTdG9yZSBpbiBPVVRQVVQgYSBzdHJpbmcgKG1hZGUgd2l0aCBhbGxvY2EpIGNvbnRhaW5pbmcgYW4KKyAgIGFzc2VtYmxlci1uYW1lIGZvciBhIGxvY2FsIHN0YXRpYyB2YXJpYWJsZSBvciBmdW5jdGlvbiBuYW1lZCBOQU1FLgorICAgTEFCRUxOTyBpcyBhbiBpbnRlZ2VyIHdoaWNoIGlzIGRpZmZlcmVudCBmb3IgZWFjaCBjYWxsLiAgKi8KKworI2lmbmRlZiBBU01fUE5fRk9STUFUCisjIGlmbmRlZiBOT19ET1RfSU5fTEFCRUwKKyMgIGRlZmluZSBBU01fUE5fRk9STUFUICIlcy4lbHUiCisjIGVsc2UKKyMgIGlmbmRlZiBOT19ET0xMQVJfSU5fTEFCRUwKKyMgICBkZWZpbmUgQVNNX1BOX0ZPUk1BVCAiJXMkJWx1IgorIyAgZWxzZQorIyAgIGRlZmluZSBBU01fUE5fRk9STUFUICJfXyVzXyVsdSIKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogISBBU01fUE5fRk9STUFUICovCisKKyNpZm5kZWYgQVNNX0ZPUk1BVF9QUklWQVRFX05BTUUKKyMgZGVmaW5lIEFTTV9GT1JNQVRfUFJJVkFURV9OQU1FKE9VVFBVVCwgTkFNRSwgTEFCRUxOTykgXAorICBkbyB7IGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVfID0gKE5BTUUpOyBcCisgICAgICAgY2hhciAqY29uc3Qgb3V0cHV0XyA9IChPVVRQVVQpID0gXAorCSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAobmFtZV8pICsgMzIpOyBcCisgICAgICAgc3ByaW50ZiAob3V0cHV0XywgQVNNX1BOX0ZPUk1BVCwgbmFtZV8sICh1bnNpZ25lZCBsb25nKShMQUJFTE5PKSk7IFwKKyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBDaG9vc2UgYSByZWFzb25hYmxlIGRlZmF1bHQgZm9yIEFTTV9PVVRQVVRfQVNDSUkuICAqLworCisjaWZuZGVmIEFTTV9PVVRQVVRfQVNDSUkKKyNkZWZpbmUgQVNNX09VVFBVVF9BU0NJSShNWUZJTEUsIE1ZU1RSSU5HLCBNWUxFTkdUSCkgXAorICBkbyB7CQkJCQkJCQkJICAgICAgXAorICAgIEZJTEUgKl9oaWRlX2FzbV9vdXRfZmlsZSA9IChNWUZJTEUpOwkJCQkgICAgICBcCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX2hpZGVfcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIChNWVNUUklORyk7CSAgICAgIFwKKyAgICBpbnQgX2hpZGVfdGhpc3NpemUgPSAoTVlMRU5HVEgpOwkJCQkJICAgICAgXAorICAgIHsJCQkJCQkJCQkgICAgICBcCisgICAgICBGSUxFICphc21fb3V0X2ZpbGUgPSBfaGlkZV9hc21fb3V0X2ZpbGU7CQkJCSAgICAgIFwKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBfaGlkZV9wOwkJCQkJICAgICAgXAorICAgICAgaW50IHRoaXNzaXplID0gX2hpZGVfdGhpc3NpemU7CQkJCQkgICAgICBcCisgICAgICBpbnQgaTsJCQkJCQkJCSAgICAgIFwKKyAgICAgIGZwcmludGYgKGFzbV9vdXRfZmlsZSwgIlx0LmFzY2lpIFwiIik7CQkJCSAgICAgIFwKKwkJCQkJCQkJCSAgICAgIFwKKyAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzc2l6ZTsgaSsrKQkJCQkJICAgICAgXAorCXsJCQkJCQkJCSAgICAgIFwKKwkgIGludCBjID0gcFtpXTsJCQkgICAJCQkJICAgICAgXAorCSAgaWYgKGMgPT0gJ1wiJyB8fCBjID09ICdcXCcpCQkJCQkgICAgICBcCisJICAgIHB1dGMgKCdcXCcsIGFzbV9vdXRfZmlsZSk7CQkJCQkgICAgICBcCisJICBpZiAoSVNQUklOVChjKSkJCQkJCQkgICAgICBcCisJICAgIHB1dGMgKGMsIGFzbV9vdXRfZmlsZSk7CQkJCQkgICAgICBcCisJICBlbHNlCQkJCQkJCQkgICAgICBcCisJICAgIHsJCQkJCQkJCSAgICAgIFwKKwkgICAgICBmcHJpbnRmIChhc21fb3V0X2ZpbGUsICJcXCVvIiwgYyk7CQkJICAgICAgXAorCSAgICAgIC8qIEFmdGVyIGFuIG9jdGFsLWVzY2FwZSwgaWYgYSBkaWdpdCBmb2xsb3dzLAkJICAgICAgXAorCQkgdGVybWluYXRlIG9uZSBzdHJpbmcgY29uc3RhbnQgYW5kIHN0YXJ0IGFub3RoZXIuCSAgICAgIFwKKwkJIFRoZSBWQVggYXNzZW1ibGVyIGZhaWxzIHRvIHN0b3AgcmVhZGluZyB0aGUgZXNjYXBlCSAgICAgIFwKKwkJIGFmdGVyIHRocmVlIGRpZ2l0cywgc28gdGhpcyBpcyB0aGUgb25seSB3YXkgd2UJCSAgICAgIFwKKwkJIGNhbiBnZXQgaXQgdG8gcGFyc2UgdGhlIGRhdGEgcHJvcGVybHkuICAqLwkJICAgICAgXAorCSAgICAgIGlmIChpIDwgdGhpc3NpemUgLSAxICYmIElTRElHSVQocFtpICsgMV0pKQkJICAgICAgXAorCQlmcHJpbnRmIChhc21fb3V0X2ZpbGUsICJcIlxuXHQuYXNjaWkgXCIiKTsJCSAgICAgIFwKKwkgIH0JCQkJCQkJCSAgICAgIFwKKwl9CQkJCQkJCQkgICAgICBcCisgICAgICBmcHJpbnRmIChhc21fb3V0X2ZpbGUsICJcIlxuIik7CQkJCQkgICAgICBcCisgICAgfQkJCQkJCQkJCSAgICAgIFwKKyAgfQkJCQkJCQkJCSAgICAgIFwKKyAgd2hpbGUgKDApCisjZW5kaWYKKworLyogVGhpcyBpcyBob3cgd2UgdGVsbCB0aGUgYXNzZW1ibGVyIHRvIGVxdWF0ZSB0d28gdmFsdWVzLiAgKi8KKyNpZmRlZiBTRVRfQVNNX09QCisjaWZuZGVmIEFTTV9PVVRQVVRfREVGCisjZGVmaW5lIEFTTV9PVVRQVVRfREVGKEZJTEUsTEFCRUwxLExBQkVMMikJCQkJXAorIGRvIHsJZnByaW50ZiAoKEZJTEUpLCAiJXMiLCBTRVRfQVNNX09QKTsJCQkJXAorCWFzc2VtYmxlX25hbWUgKEZJTEUsIExBQkVMMSk7CQkJCQlcCisJZnByaW50ZiAoRklMRSwgIiwiKTsJCQkJCQlcCisJYXNzZW1ibGVfbmFtZSAoRklMRSwgTEFCRUwyKTsJCQkJCVwKKwlmcHJpbnRmIChGSUxFLCAiXG4iKTsJCQkJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIElGVU5DX0FTTV9UWVBFCisjZGVmaW5lIElGVU5DX0FTTV9UWVBFICJnbnVfaW5kaXJlY3RfZnVuY3Rpb24iCisjZW5kaWYKKworI2lmbmRlZiBUTFNfQ09NTU9OX0FTTV9PUAorI2RlZmluZSBUTFNfQ09NTU9OX0FTTV9PUCAiLnRsc19jb21tb24iCisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfQVNfVExTKSAmJiAhZGVmaW5lZCAoQVNNX09VVFBVVF9UTFNfQ09NTU9OKQorI2RlZmluZSBBU01fT1VUUFVUX1RMU19DT01NT04oRklMRSwgREVDTCwgTkFNRSwgU0laRSkJCQlcCisgIGRvCQkJCQkJCQkJXAorICAgIHsJCQkJCQkJCQlcCisgICAgICBmcHJpbnRmICgoRklMRSksICJcdCVzXHQiLCBUTFNfQ09NTU9OX0FTTV9PUCk7CQkJXAorICAgICAgYXNzZW1ibGVfbmFtZSAoKEZJTEUpLCAoTkFNRSkpOwkJCQkJXAorICAgICAgZnByaW50ZiAoKEZJTEUpLCAiLCJIT1NUX1dJREVfSU5UX1BSSU5UX1VOU0lHTkVEIiwldVxuIiwJCVwKKwkgICAgICAgKFNJWkUpLCBERUNMX0FMSUdOIChERUNMKSAvIEJJVFNfUEVSX1VOSVQpOwkJXAorICAgIH0JCQkJCQkJCQlcCisgIHdoaWxlICgwKQorI2VuZGlmCisKKy8qIERlY2lkZSB3aGV0aGVyIHRvIGRlZmVyIGVtaXR0aW5nIHRoZSBhc3NlbWJsZXIgb3V0cHV0IGZvciBhbiBlcXVhdGUKKyAgIG9mIHR3byB2YWx1ZXMuICBUaGUgZGVmYXVsdCBpcyB0byBub3QgZGVmZXIgb3V0cHV0LiAgKi8KKyNpZm5kZWYgVEFSR0VUX0RFRkVSUkVEX09VVFBVVF9ERUZTCisjZGVmaW5lIFRBUkdFVF9ERUZFUlJFRF9PVVRQVVRfREVGUyhERUNMLFRBUkdFVCkgZmFsc2UKKyNlbmRpZgorCisvKiBUaGlzIGlzIGhvdyB0byBvdXRwdXQgdGhlIGRlZmluaXRpb24gb2YgYSB1c2VyLWxldmVsIGxhYmVsIG5hbWVkCisgICBOQU1FLCBzdWNoIGFzIHRoZSBsYWJlbCBvbiB2YXJpYWJsZSBOQU1FLiAgKi8KKworI2lmbmRlZiBBU01fT1VUUFVUX0xBQkVMCisjZGVmaW5lIEFTTV9PVVRQVVRfTEFCRUwoRklMRSxOQU1FKSBcCisgIGRvIHsJCQkJCQlcCisgICAgYXNzZW1ibGVfbmFtZSAoKEZJTEUpLCAoTkFNRSkpOwkJXAorICAgIGZwdXRzICgiOlxuIiwgKEZJTEUpKTsJCQlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogVGhpcyBpcyBob3cgdG8gb3V0cHV0IHRoZSBkZWZpbml0aW9uIG9mIGEgdXNlci1sZXZlbCBsYWJlbCBuYW1lZAorICAgTkFNRSwgc3VjaCBhcyB0aGUgbGFiZWwgb24gYSBmdW5jdGlvbi4gICovCisKKyNpZm5kZWYgQVNNX09VVFBVVF9GVU5DVElPTl9MQUJFTAorI2RlZmluZSBBU01fT1VUUFVUX0ZVTkNUSU9OX0xBQkVMKEZJTEUsIE5BTUUsIERFQ0wpIFwKKyAgQVNNX09VVFBVVF9MQUJFTCAoKEZJTEUpLCAoTkFNRSkpCisjZW5kaWYKKworLyogT3V0cHV0IHRoZSBkZWZpbml0aW9uIG9mIGEgY29tcGlsZXItZ2VuZXJhdGVkIGxhYmVsIG5hbWVkIE5BTUUuICAqLworI2lmbmRlZiBBU01fT1VUUFVUX0lOVEVSTkFMX0xBQkVMCisjZGVmaW5lIEFTTV9PVVRQVVRfSU5URVJOQUxfTEFCRUwoRklMRSxOQU1FKQlcCisgIGRvIHsJCQkJCQlcCisgICAgYXNzZW1ibGVfbmFtZV9yYXcgKChGSUxFKSwgKE5BTUUpKTsJCVwKKyAgICBmcHV0cyAoIjpcbiIsIChGSUxFKSk7CQkJXAorICB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIFRoaXMgaXMgaG93IHRvIG91dHB1dCBhIHJlZmVyZW5jZSB0byBhIHVzZXItbGV2ZWwgbGFiZWwgbmFtZWQgTkFNRS4gICovCisKKyNpZm5kZWYgQVNNX09VVFBVVF9MQUJFTFJFRgorI2RlZmluZSBBU01fT1VUUFVUX0xBQkVMUkVGKEZJTEUsTkFNRSkgIFwKKyAgZG8gewkJCQkJCQlcCisgICAgZnB1dHMgKHVzZXJfbGFiZWxfcHJlZml4LCAoRklMRSkpOwkJCVwKKyAgICBmcHV0cyAoKE5BTUUpLCAoRklMRSkpOwkJCQlcCisgIH0gd2hpbGUgKDApOworI2VuZGlmCisKKy8qIEFsbG93IHRhcmdldCB0byBwcmludCBkZWJ1ZyBpbmZvIGxhYmVscyBzcGVjaWFsbHkuICBUaGlzIGlzIHVzZWZ1bCBmb3IKKyAgIFZMSVcgdGFyZ2V0cywgc2luY2UgZGVidWcgaW5mbyBsYWJlbHMgc2hvdWxkIGdvIGludG8gdGhlIG1pZGRsZSBvZgorICAgaW5zdHJ1Y3Rpb24gYnVuZGxlcyBpbnN0ZWFkIG9mIGJyZWFraW5nIHRoZW0uICAqLworCisjaWZuZGVmIEFTTV9PVVRQVVRfREVCVUdfTEFCRUwKKyNkZWZpbmUgQVNNX09VVFBVVF9ERUJVR19MQUJFTChGSUxFLCBQUkVGSVgsIE5VTSkgXAorICAoKnRhcmdldG0uYXNtX291dC5pbnRlcm5hbF9sYWJlbCkgKEZJTEUsIFBSRUZJWCwgTlVNKQorI2VuZGlmCisKKy8qIFRoaXMgaXMgaG93IHdlIHRlbGwgdGhlIGFzc2VtYmxlciB0aGF0IGEgc3ltYm9sIGlzIHdlYWsuICAqLworI2lmbmRlZiBBU01fT1VUUFVUX1dFQUtfQUxJQVMKKyNpZiBkZWZpbmVkIChBU01fV0VBS0VOX0xBQkVMKSAmJiBkZWZpbmVkIChBU01fT1VUUFVUX0RFRikKKyNkZWZpbmUgQVNNX09VVFBVVF9XRUFLX0FMSUFTKFNUUkVBTSwgTkFNRSwgVkFMVUUpCVwKKyAgZG8JCQkJCQkJXAorICAgIHsJCQkJCQkJXAorICAgICAgQVNNX1dFQUtFTl9MQUJFTCAoU1RSRUFNLCBOQU1FKTsJCQlcCisgICAgICBpZiAoVkFMVUUpCQkJCQlcCisgICAgICAgIEFTTV9PVVRQVVRfREVGIChTVFJFQU0sIE5BTUUsIFZBTFVFKTsJCVwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIGlzIGhvdyB3ZSB0ZWxsIHRoZSBhc3NlbWJsZXIgdGhhdCBhIHN5bWJvbCBpcyBhIHdlYWsgYWxpYXMgdG8KKyAgIGFub3RoZXIgc3ltYm9sIHRoYXQgZG9lc24ndCByZXF1aXJlIHRoZSBvdGhlciBzeW1ib2wgdG8gYmUgZGVmaW5lZC4KKyAgIFVzZXMgb2YgdGhlIGZvcm1lciB3aWxsIHR1cm4gaW50byB3ZWFrIHVzZXMgb2YgdGhlIGxhdHRlciwgaS5lLiwKKyAgIHVzZXMgdGhhdCwgaW4gY2FzZSB0aGUgbGF0dGVyIGlzIHVuZGVmaW5lZCwgd2lsbCBub3QgY2F1c2UgZXJyb3JzLAorICAgYW5kIHdpbGwgYWRkIGl0IHRvIHRoZSBzeW1ib2wgdGFibGUgYXMgd2VhayB1bmRlZmluZWQuICBIb3dldmVyLCBpZgorICAgdGhlIGxhdHRlciBpcyByZWZlcmVuY2VkIGRpcmVjdGx5LCBhIHN0cm9uZyByZWZlcmVuY2UgcHJldmFpbHMuICAqLworI2lmbmRlZiBBU01fT1VUUFVUX1dFQUtSRUYKKyNpZiBkZWZpbmVkIEhBVkVfR0FTX1dFQUtSRUYKKyNkZWZpbmUgQVNNX09VVFBVVF9XRUFLUkVGKEZJTEUsIERFQ0wsIE5BTUUsIFZBTFVFKQkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGZwcmludGYgKChGSUxFKSwgIlx0LndlYWtyZWZcdCIpOwkJCQkJXAorICAgICAgYXNzZW1ibGVfbmFtZSAoKEZJTEUpLCAoTkFNRSkpOwkJCQkJXAorICAgICAgZnByaW50ZiAoKEZJTEUpLCAiLCIpOwkJCQkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKChGSUxFKSwgKFZBTFVFKSk7CQkJCQlcCisgICAgICBmcHJpbnRmICgoRklMRSksICJcbiIpOwkJCQkJCVwKKyAgICB9CQkJCQkJCQkJXAorICB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmCisKKy8qIEhvdyB0byBlbWl0IGEgLnR5cGUgZGlyZWN0aXZlLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9UWVBFX0RJUkVDVElWRQorI2lmIGRlZmluZWQgVFlQRV9BU01fT1AgJiYgZGVmaW5lZCBUWVBFX09QRVJBTkRfRk1UCisjZGVmaW5lIEFTTV9PVVRQVVRfVFlQRV9ESVJFQ1RJVkUoU1RSRUFNLCBOQU1FLCBUWVBFKQlcCisgIGRvCQkJCQkJCVwKKyAgICB7CQkJCQkJCVwKKyAgICAgIGZwdXRzIChUWVBFX0FTTV9PUCwgU1RSRUFNKTsJCQlcCisgICAgICBhc3NlbWJsZV9uYW1lIChTVFJFQU0sIE5BTUUpOwkJCVwKKyAgICAgIGZwdXRzICgiLCAiLCBTVFJFQU0pOwkJCQlcCisgICAgICBmcHJpbnRmIChTVFJFQU0sIFRZUEVfT1BFUkFORF9GTVQsIFRZUEUpOwkJXAorICAgICAgcHV0YyAoJ1xuJywgU1RSRUFNKTsJCQkJXAorICAgIH0JCQkJCQkJXAorICB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmCisKKy8qIEhvdyB0byBlbWl0IGEgLnNpemUgZGlyZWN0aXZlLiAgKi8KKyNpZm5kZWYgQVNNX09VVFBVVF9TSVpFX0RJUkVDVElWRQorI2lmZGVmIFNJWkVfQVNNX09QCisjZGVmaW5lIEFTTV9PVVRQVVRfU0laRV9ESVJFQ1RJVkUoU1RSRUFNLCBOQU1FLCBTSVpFKQlcCisgIGRvCQkJCQkJCVwKKyAgICB7CQkJCQkJCVwKKyAgICAgIEhPU1RfV0lERV9JTlQgc2l6ZV8gPSAoU0laRSk7CQkJXAorICAgICAgZnB1dHMgKFNJWkVfQVNNX09QLCBTVFJFQU0pOwkJCVwKKyAgICAgIGFzc2VtYmxlX25hbWUgKFNUUkVBTSwgTkFNRSk7CQkJXAorICAgICAgZnByaW50ZiAoU1RSRUFNLCAiLCAiIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDICJcbiIsIHNpemVfKTsgXAorICAgIH0JCQkJCQkJXAorICB3aGlsZSAoMCkKKworI2RlZmluZSBBU01fT1VUUFVUX01FQVNVUkVEX1NJWkUoU1RSRUFNLCBOQU1FKQkJXAorICBkbwkJCQkJCQlcCisgICAgewkJCQkJCQlcCisgICAgICBmcHV0cyAoU0laRV9BU01fT1AsIFNUUkVBTSk7CQkJXAorICAgICAgYXNzZW1ibGVfbmFtZSAoU1RSRUFNLCBOQU1FKTsJCQlcCisgICAgICBmcHV0cyAoIiwgLi0iLCBTVFJFQU0pOwkJCQlcCisgICAgICBhc3NlbWJsZV9uYW1lIChTVFJFQU0sIE5BTUUpOwkJCVwKKyAgICAgIHB1dGMgKCdcbicsIFNUUkVBTSk7CQkJCVwKKyAgICB9CQkJCQkJCVwKKyAgd2hpbGUgKDApCisKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB3ZSBzdXBwb3J0IHdlYWsgc3ltYm9scy4gIFNVUFBPUlRTX1dFQUsKKyAgIG11c3QgYmUgYSBwcmVwcm9jZXNzb3IgY29uc3RhbnQuICAqLworI2lmbmRlZiBTVVBQT1JUU19XRUFLCisjaWYgZGVmaW5lZCAoQVNNX1dFQUtFTl9MQUJFTCkgfHwgZGVmaW5lZCAoQVNNX1dFQUtFTl9ERUNMKQorI2RlZmluZSBTVVBQT1JUU19XRUFLIDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRTX1dFQUsgMAorI2VuZGlmCisjZW5kaWYKKworLyogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHdlIHN1cHBvcnQgd2VhayBzeW1ib2xzIGR1cmluZyB0YXJnZXQKKyAgIGNvZGUgZ2VuZXJhdGlvbi4gIFRBUkdFVF9TVVBQT1JUU19XRUFLIGNhbiBiZSBhbnkgdmFsaWQgQyBleHByZXNzaW9uLiAgKi8KKyNpZm5kZWYgVEFSR0VUX1NVUFBPUlRTX1dFQUsKKyNkZWZpbmUgVEFSR0VUX1NVUFBPUlRTX1dFQUsgKFNVUFBPUlRTX1dFQUspCisjZW5kaWYKKworLyogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHdlIHN1cHBvcnQgdGhlIGRpc2NyaW1pbmF0b3IKKyAgIGF0dHJpYnV0ZSBpbiB0aGUgLmxvYyBkaXJlY3RpdmUuICAqLworI2lmbmRlZiBTVVBQT1JUU19ESVNDUklNSU5BVE9SCisjaWZkZWYgSEFWRV9HQVNfRElTQ1JJTUlOQVRPUgorI2RlZmluZSBTVVBQT1JUU19ESVNDUklNSU5BVE9SIDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRTX0RJU0NSSU1JTkFUT1IgMAorI2VuZGlmCisjZW5kaWYKKworLyogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHdlIHN1cHBvcnQgbGluay1vbmNlIHNlbWFudGljcy4gICovCisjaWZuZGVmIFNVUFBPUlRTX09ORV9PTkxZCisjaWZkZWYgTUFLRV9ERUNMX09ORV9PTkxZCisjZGVmaW5lIFNVUFBPUlRTX09ORV9PTkxZIDEKKyNlbHNlCisjZGVmaW5lIFNVUFBPUlRTX09ORV9PTkxZIDAKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHdlYWsgc3ltYm9scyBtdXN0IGJlIGxlZnQgb3V0IG9mIGEgc3RhdGljCisgICBhcmNoaXZlJ3MgdGFibGUgb2YgY29udGVudHMuICBEZWZpbmluZyB0aGlzIG1hY3JvIHRvIGJlIG5vbnplcm8gaGFzCisgICB0aGUgY29uc2VxdWVuY2UgdGhhdCBjZXJ0YWluIHN5bWJvbHMgd2lsbCBub3QgYmUgbWFkZSB3ZWFrIHRoYXQKKyAgIG90aGVyd2lzZSB3b3VsZCBiZS4gIFRoZSBDKysgQUJJIHJlcXVpcmVzIHRoaXMgbWFjcm8gdG8gYmUgemVybzsKKyAgIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi4gICovCisjaWZuZGVmIFRBUkdFVF9XRUFLX05PVF9JTl9BUkNISVZFX1RPQworI2RlZmluZSBUQVJHRVRfV0VBS19OT1RfSU5fQVJDSElWRV9UT0MgMAorI2VuZGlmCisKKy8qIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB3ZSBuZWVkIGxpbmtvbmNlIHVud2luZCBpbmZvcm1hdGlvbi4gICovCisjaWZuZGVmIFRBUkdFVF9VU0VTX1dFQUtfVU5XSU5EX0lORk8KKyNkZWZpbmUgVEFSR0VUX1VTRVNfV0VBS19VTldJTkRfSU5GTyAwCisjZW5kaWYKKworLyogQnkgZGVmYXVsdCwgdGhlcmUgaXMgbm8gcHJlZml4IG9uIHVzZXItZGVmaW5lZCBzeW1ib2xzLiAgKi8KKyNpZm5kZWYgVVNFUl9MQUJFTF9QUkVGSVgKKyNkZWZpbmUgVVNFUl9MQUJFTF9QUkVGSVggIiIKKyNlbmRpZgorCisvKiBJZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIHdlYWsgc3ltYm9scywgZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVfV0VBSyB0bworICAgcHJvdmlkZSBhIHdlYWsgYXR0cmlidXRlLiAgRWxzZSBkZWZpbmUgaXQgdG8gbm90aGluZy4KKworICAgVGhpcyB3b3VsZCBub3JtYWxseSBiZWxvbmcgaW4gYW5zaWRlY2wuaCwgYnV0IFNVUFBPUlRTX1dFQUsgaXMKKyAgIG5vdCBhdmFpbGFibGUgYXQgdGhhdCB0aW1lLgorCisgICBOb3RlLCB0aGlzIGlzIG9ubHkgZm9yIHVzZSBieSB0YXJnZXQgZmlsZXMgd2hpY2ggd2Uga25vdyBhcmUgdG8gYmUKKyAgIGNvbXBpbGVkIGJ5IEdDQy4gICovCisjaWZuZGVmIFRBUkdFVF9BVFRSSUJVVEVfV0VBSworIyBpZiBTVVBQT1JUU19XRUFLCisjICBkZWZpbmUgVEFSR0VUX0FUVFJJQlVURV9XRUFLIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkKKyMgZWxzZQorIyAgZGVmaW5lIFRBUkdFVF9BVFRSSUJVVEVfV0VBSworIyBlbmRpZgorI2VuZGlmCisKKy8qIEJ5IGRlZmF1bHQgd2UgY2FuIGFzc3VtZSB0aGF0IGFsbCBnbG9iYWwgc3ltYm9scyBhcmUgaW4gb25lIG5hbWVzcGFjZSwKKyAgIGFjcm9zcyBhbGwgc2hhcmVkIGxpYnJhcmllcy4gICovCisjaWZuZGVmIE1VTFRJUExFX1NZTUJPTF9TUEFDRVMKKyMgZGVmaW5lIE1VTFRJUExFX1NZTUJPTF9TUEFDRVMgMAorI2VuZGlmCisKKy8qIElmIHRoZSB0YXJnZXQgc3VwcG9ydHMgaW5pdF9wcmlvcml0eSBDKysgYXR0cmlidXRlLCBnaXZlCisgICBTVVBQT1JUU19JTklUX1BSSU9SSVRZIGEgbm9uemVybyB2YWx1ZS4gICovCisjaWZuZGVmIFNVUFBPUlRTX0lOSVRfUFJJT1JJVFkKKyNkZWZpbmUgU1VQUE9SVFNfSU5JVF9QUklPUklUWSAxCisjZW5kaWYgLyogU1VQUE9SVFNfSU5JVF9QUklPUklUWSAqLworCisvKiBJZiB3ZSBoYXZlIGEgZGVmaW5pdGlvbiBvZiBJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgsIGFzc3VtZSB0aGF0CisgICB0aGUgcmVzdCBvZiB0aGUgRFdBUkYgMiBmcmFtZSB1bndpbmQgc3VwcG9ydCBpcyBhbHNvIHByb3ZpZGVkLiAgKi8KKyNpZiAhZGVmaW5lZCAoRFdBUkYyX1VOV0lORF9JTkZPKSAmJiBkZWZpbmVkIChJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgpCisjZGVmaW5lIERXQVJGMl9VTldJTkRfSU5GTyAxCisjZW5kaWYKKworLyogSWYgd2UgaGF2ZSBuYW1lZCBzZWN0aW9ucywgYW5kIHdlJ3JlIHVzaW5nIGNydHN0dWZmIHRvIHJ1biBjdG9ycywKKyAgIHVzZSB0aGVtIGZvciByZWdpc3RlcmluZyBlaCBmcmFtZSBpbmZvcm1hdGlvbi4gICovCisjaWYgZGVmaW5lZCAoVEFSR0VUX0FTTV9OQU1FRF9TRUNUSU9OKSAmJiBEV0FSRjJfVU5XSU5EX0lORk8gXAorICAgICYmICFkZWZpbmVkKEVIX0ZSQU1FX0lOX0RBVEFfU0VDVElPTikKKyNpZm5kZWYgRUhfRlJBTUVfU0VDVElPTl9OQU1FCisjZGVmaW5lIEVIX0ZSQU1FX1NFQ1RJT05fTkFNRSAiLmVoX2ZyYW1lIgorI2VuZGlmCisjZW5kaWYKKworLyogT24gbWFueSBzeXN0ZW1zLCBkaWZmZXJlbnQgRUggdGFibGUgZW5jb2RpbmdzIGFyZSB1c2VkIHVuZGVyCisgICBkaWZmZXJlbmNlIGNpcmN1bXN0YW5jZXMuICBTb21lIHdpbGwgcmVxdWlyZSBydW50aW1lIHJlbG9jYXRpb25zOworICAgc29tZSB3aWxsIG5vdC4gIEZvciB0aG9zZSB0aGF0IGRvIG5vdCByZXF1aXJlIHJ1bnRpbWUgcmVsb2NhdGlvbnMsCisgICB3ZSB3b3VsZCBsaWtlIHRvIG1ha2UgdGhlIHRhYmxlIHJlYWQtb25seS4gIEhvd2V2ZXIsIHNpbmNlIHRoZQorICAgcmVhZC1vbmx5IHRhYmxlcyBtYXkgbmVlZCB0byBiZSBjb21iaW5lZCB3aXRoIHJlYWQtd3JpdGUgdGFibGVzCisgICB0aGF0IGRvIHJlcXVpcmUgcnVudGltZSByZWxvY2F0aW9uLCBpdCBpcyBub3Qgc2FmZSB0byBtYWtlIHRoZQorICAgdGFibGVzIHJlYWQtb25seSB1bmxlc3MgdGhlIGxpbmtlciB3aWxsIG1lcmdlIHJlYWQtb25seSBhbmQKKyAgIHJlYWQtd3JpdGUgc2VjdGlvbnMgaW50byBhIHNpbmdsZSByZWFkLXdyaXRlIHNlY3Rpb24uICBJZiB5b3VyCisgICBsaW5rZXIgZG9lcyBub3QgaGF2ZSB0aGlzIGFiaWxpdHksIGJ1dCB5b3VyIHN5c3RlbSBpcyBzdWNoIHRoYXQgbm8KKyAgIGVuY29kaW5nIHVzZWQgd2l0aCBub24tUElDIGNvZGUgd2lsbCBldmVyIHJlcXVpcmUgYSBydW50aW1lCisgICByZWxvY2F0aW9uLCB0aGVuIHlvdSBjYW4gZGVmaW5lIEVIX1RBQkxFU19DQU5fQkVfUkVBRF9PTkxZIHRvIDEgaW4KKyAgIHlvdXIgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gZmlsZS4gICovCisjaWZuZGVmIEVIX1RBQkxFU19DQU5fQkVfUkVBRF9PTkxZCisjaWZkZWYgSEFWRV9MRF9ST19SV19TRUNUSU9OX01JWElORworI2RlZmluZSBFSF9UQUJMRVNfQ0FOX0JFX1JFQURfT05MWSAxCisjZWxzZQorI2RlZmluZSBFSF9UQUJMRVNfQ0FOX0JFX1JFQURfT05MWSAwCisjZW5kaWYKKyNlbmRpZgorCisvKiBJZiB3ZSBoYXZlIG5hbWVkIHNlY3Rpb24gYW5kIHdlIHN1cHBvcnQgd2VhayBzeW1ib2xzLCB0aGVuIHVzZSB0aGUKKyAgIC5qY3Igc2VjdGlvbiBmb3IgcmVjb3JkaW5nIGphdmEgY2xhc3NlcyB3aGljaCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQKKyAgIGF0IHByb2dyYW0gc3RhcnQtdXAgdGltZS4gICovCisjaWYgZGVmaW5lZCAoVEFSR0VUX0FTTV9OQU1FRF9TRUNUSU9OKSAmJiBTVVBQT1JUU19XRUFLCisjaWZuZGVmIEpDUl9TRUNUSU9OX05BTUUKKyNkZWZpbmUgSkNSX1NFQ1RJT05fTkFNRSAiLmpjciIKKyNlbmRpZgorI2VuZGlmCisKKy8qIFRoaXMgZGVjaXNpb24gdG8gdXNlIGEgLmpjciBzZWN0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nCisgICBVU0VfSkNSX1NFQ1RJT04gdG8gMCBpbiB0YXJnZXQgZmlsZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGlmIHRhcmdldAorICAgY2FuIGRlZmluZSBKQ1JfU0VDVElPTl9OQU1FIGJ1dCBkb2VzIG5vdCBoYXZlIGNydHN0dWZmIG9yCisgICBsaW5rZXIgc3VwcG9ydCBmb3IgLmpjciBzZWN0aW9uLiAgKi8KKyNpZm5kZWYgVEFSR0VUX1VTRV9KQ1JfU0VDVElPTgorI2lmZGVmIEpDUl9TRUNUSU9OX05BTUUKKyNkZWZpbmUgVEFSR0VUX1VTRV9KQ1JfU0VDVElPTiAxCisjZWxzZQorI2RlZmluZSBUQVJHRVRfVVNFX0pDUl9TRUNUSU9OIDAKKyNlbmRpZgorI2VuZGlmCisKKy8qIE51bWJlciBvZiBoYXJkd2FyZSByZWdpc3RlcnMgdGhhdCBnbyBpbnRvIHRoZSBEV0FSRi0yIHVud2luZCBpbmZvLgorICAgSWYgbm90IGRlZmluZWQsIGVxdWFscyBGSVJTVF9QU0VVRE9fUkVHSVNURVIgICovCisKKyNpZm5kZWYgRFdBUkZfRlJBTUVfUkVHSVNURVJTCisjZGVmaW5lIERXQVJGX0ZSQU1FX1JFR0lTVEVSUyBGSVJTVF9QU0VVRE9fUkVHSVNURVIKKyNlbmRpZgorCisvKiBPZmZzZXRzIHJlY29yZGVkIGluIG9wY29kZXMgYXJlIGEgbXVsdGlwbGUgb2YgdGhpcyBhbGlnbm1lbnQgZmFjdG9yLiAgKi8KKyNpZm5kZWYgRFdBUkZfQ0lFX0RBVEFfQUxJR05NRU5UCisjaWZkZWYgU1RBQ0tfR1JPV1NfRE9XTldBUkQKKyNkZWZpbmUgRFdBUkZfQ0lFX0RBVEFfQUxJR05NRU5UICgtKChpbnQpIFVOSVRTX1BFUl9XT1JEKSkKKyNlbHNlCisjZGVmaW5lIERXQVJGX0NJRV9EQVRBX0FMSUdOTUVOVCAoKGludCkgVU5JVFNfUEVSX1dPUkQpCisjZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgRFdBUkYgMiBDRkEgY29sdW1uIHdoaWNoIHRyYWNrcyB0aGUgcmV0dXJuIGFkZHJlc3MuICBOb3JtYWxseSB0aGlzCisgICBpcyB0aGUgY29sdW1uIGZvciBQQywgb3IgdGhlIGZpcnN0IGNvbHVtbiBhZnRlciBhbGwgb2YgdGhlIGhhcmQKKyAgIHJlZ2lzdGVycy4gICovCisjaWZuZGVmIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4KKyNpZmRlZiBQQ19SRUdOVU0KKyNkZWZpbmUgRFdBUkZfRlJBTUVfUkVUVVJOX0NPTFVNTglEV0FSRl9GUkFNRV9SRUdOVU0gKFBDX1JFR05VTSkKKyNlbHNlCisjZGVmaW5lIERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4JRFdBUkZfRlJBTUVfUkVHSVNURVJTCisjZW5kaWYKKyNlbmRpZgorCisvKiBIb3cgdG8gcmVudW1iZXIgcmVnaXN0ZXJzIGZvciBkYnggYW5kIGdkYi4gIElmIG5vdCBkZWZpbmVkLCBhc3N1bWUKKyAgIG5vIHJlbnVtYmVyaW5nIGlzIG5lY2Vzc2FyeS4gICovCisKKyNpZm5kZWYgREJYX1JFR0lTVEVSX05VTUJFUgorI2RlZmluZSBEQlhfUkVHSVNURVJfTlVNQkVSKFJFR05PKSAoUkVHTk8pCisjZW5kaWYKKworLyogVGhlIG1hcHBpbmcgZnJvbSBnY2MgcmVnaXN0ZXIgbnVtYmVyIHRvIERXQVJGIDIgQ0ZBIGNvbHVtbiBudW1iZXIuCisgICBCeSBkZWZhdWx0LCB3ZSBqdXN0IHByb3ZpZGUgY29sdW1ucyBmb3IgYWxsIHJlZ2lzdGVycy4gICovCisjaWZuZGVmIERXQVJGX0ZSQU1FX1JFR05VTQorI2RlZmluZSBEV0FSRl9GUkFNRV9SRUdOVU0oUkVHKSBEQlhfUkVHSVNURVJfTlVNQkVSIChSRUcpCisjZW5kaWYKKworLyogTWFwIHJlZ2lzdGVyIG51bWJlcnMgaGVsZCBpbiB0aGUgY2FsbCBmcmFtZSBpbmZvIHRoYXQgZ2NjIGhhcworICAgY29sbGVjdGVkIHVzaW5nIERXQVJGX0ZSQU1FX1JFR05VTSB0byB0aG9zZSB0aGF0IHNob3VsZCBiZSBvdXRwdXQgaW4KKyAgIC5kZWJ1Z19mcmFtZSBhbmQgLmVoX2ZyYW1lLiAgKi8KKyNpZm5kZWYgRFdBUkYyX0ZSQU1FX1JFR19PVVQKKyNkZWZpbmUgRFdBUkYyX0ZSQU1FX1JFR19PVVQoUkVHTk8sIEZPUl9FSCkgKFJFR05PKQorI2VuZGlmCisKKy8qIFRoZSBzaXplIG9mIGFkZHJlc3NlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgRHdhcmYgMiBkYXRhLgorICAgU29tZSBhcmNoaXRlY3R1cmVzIHVzZSB3b3JkIGFkZHJlc3NlcyB0byByZWZlciB0byBjb2RlIGxvY2F0aW9ucywKKyAgIGJ1dCBEd2FyZiAyIGluZm8gYWx3YXlzIHVzZXMgYnl0ZSBhZGRyZXNzZXMuICBPbiBzdWNoIG1hY2hpbmVzLAorICAgRHdhcmYgMiBhZGRyZXNzZXMgbmVlZCB0byBiZSBsYXJnZXIgdGhhbiB0aGUgYXJjaGl0ZWN0dXJlJ3MKKyAgIHBvaW50ZXJzLiAgKi8KKyNpZm5kZWYgRFdBUkYyX0FERFJfU0laRQorI2RlZmluZSBEV0FSRjJfQUREUl9TSVpFIChQT0lOVEVSX1NJWkUgLyBCSVRTX1BFUl9VTklUKQorI2VuZGlmCisKKy8qIFRoZSBzaXplIGluIGJ5dGVzIG9mIGEgRFdBUkYgZmllbGQgaW5kaWNhdGluZyBhbiBvZmZzZXQgb3IgbGVuZ3RoCisgICByZWxhdGl2ZSB0byBhIGRlYnVnIGluZm8gc2VjdGlvbiwgc3BlY2lmaWVkIHRvIGJlIDQgYnl0ZXMgaW4gdGhlCisgICBEV0FSRi0yIHNwZWNpZmljYXRpb24uICBUaGUgU0dJL01JUFMgQUJJIGRlZmluZXMgaXQgdG8gYmUgdGhlIHNhbWUKKyAgIGFzIFBUUl9TSVpFLiAgKi8KKyNpZm5kZWYgRFdBUkZfT0ZGU0VUX1NJWkUKKyNkZWZpbmUgRFdBUkZfT0ZGU0VUX1NJWkUgNAorI2VuZGlmCisKKy8qIFRoZSBzaXplIGluIGJ5dGVzIG9mIGEgRFdBUkYgNCB0eXBlIHNpZ25hdHVyZS4gICovCisjaWZuZGVmIERXQVJGX1RZUEVfU0lHTkFUVVJFX1NJWkUKKyNkZWZpbmUgRFdBUkZfVFlQRV9TSUdOQVRVUkVfU0laRSA4CisjZW5kaWYKKworLyogRGVmYXVsdCBzaXplcyBmb3IgYmFzZSBDIHR5cGVzLiAgSWYgdGhlIHNpemVzIGFyZSBkaWZmZXJlbnQgZm9yCisgICB5b3VyIHRhcmdldCwgeW91IHNob3VsZCBvdmVycmlkZSB0aGVzZSB2YWx1ZXMgYnkgZGVmaW5pbmcgdGhlCisgICBhcHByb3ByaWF0ZSBzeW1ib2xzIGluIHlvdXIgdG0uaCBmaWxlLiAgKi8KKworI2lmbmRlZiBCSVRTX1BFUl9VTklUCisjZGVmaW5lIEJJVFNfUEVSX1VOSVQgOAorI2VuZGlmCisKKyNpZm5kZWYgQklUU19QRVJfV09SRAorI2RlZmluZSBCSVRTX1BFUl9XT1JEIChCSVRTX1BFUl9VTklUICogVU5JVFNfUEVSX1dPUkQpCisjZW5kaWYKKworI2lmbmRlZiBDSEFSX1RZUEVfU0laRQorI2RlZmluZSBDSEFSX1RZUEVfU0laRSBCSVRTX1BFUl9VTklUCisjZW5kaWYKKworI2lmbmRlZiBCT09MX1RZUEVfU0laRQorLyogYGJvb2wnIGhhcyBzaXplIGFuZCBhbGlnbm1lbnQgYDEnLCBvbiBhbG1vc3QgYWxsIHBsYXRmb3Jtcy4gICovCisjZGVmaW5lIEJPT0xfVFlQRV9TSVpFIENIQVJfVFlQRV9TSVpFCisjZW5kaWYKKworI2lmbmRlZiBTSE9SVF9UWVBFX1NJWkUKKyNkZWZpbmUgU0hPUlRfVFlQRV9TSVpFIChCSVRTX1BFUl9VTklUICogTUlOICgoVU5JVFNfUEVSX1dPUkQgKyAxKSAvIDIsIDIpKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX1RZUEVfU0laRQorI2RlZmluZSBJTlRfVFlQRV9TSVpFIEJJVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfVFlQRV9TSVpFIEJJVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfTE9OR19UWVBFX1NJWkUKKyNkZWZpbmUgTE9OR19MT05HX1RZUEVfU0laRSAoQklUU19QRVJfV09SRCAqIDIpCisjZW5kaWYKKworI2lmbmRlZiBXQ0hBUl9UWVBFX1NJWkUKKyNkZWZpbmUgV0NIQVJfVFlQRV9TSVpFIElOVF9UWVBFX1NJWkUKKyNlbmRpZgorCisjaWZuZGVmIEZMT0FUX1RZUEVfU0laRQorI2RlZmluZSBGTE9BVF9UWVBFX1NJWkUgQklUU19QRVJfV09SRAorI2VuZGlmCisKKyNpZm5kZWYgRE9VQkxFX1RZUEVfU0laRQorI2RlZmluZSBET1VCTEVfVFlQRV9TSVpFIChCSVRTX1BFUl9XT1JEICogMikKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfRE9VQkxFX1RZUEVfU0laRQorI2RlZmluZSBMT05HX0RPVUJMRV9UWVBFX1NJWkUgKEJJVFNfUEVSX1dPUkQgKiAyKQorI2VuZGlmCisKKyNpZm5kZWYgREVDSU1BTDMyX1RZUEVfU0laRQorI2RlZmluZSBERUNJTUFMMzJfVFlQRV9TSVpFIDMyCisjZW5kaWYKKworI2lmbmRlZiBERUNJTUFMNjRfVFlQRV9TSVpFCisjZGVmaW5lIERFQ0lNQUw2NF9UWVBFX1NJWkUgNjQKKyNlbmRpZgorCisjaWZuZGVmIERFQ0lNQUwxMjhfVFlQRV9TSVpFCisjZGVmaW5lIERFQ0lNQUwxMjhfVFlQRV9TSVpFIDEyOAorI2VuZGlmCisKKyNpZm5kZWYgU0hPUlRfRlJBQ1RfVFlQRV9TSVpFCisjZGVmaW5lIFNIT1JUX0ZSQUNUX1RZUEVfU0laRSBCSVRTX1BFUl9VTklUCisjZW5kaWYKKworI2lmbmRlZiBGUkFDVF9UWVBFX1NJWkUKKyNkZWZpbmUgRlJBQ1RfVFlQRV9TSVpFIChCSVRTX1BFUl9VTklUICogMikKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfRlJBQ1RfVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfRlJBQ1RfVFlQRV9TSVpFIChCSVRTX1BFUl9VTklUICogNCkKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfTE9OR19GUkFDVF9UWVBFX1NJWkUKKyNkZWZpbmUgTE9OR19MT05HX0ZSQUNUX1RZUEVfU0laRSAoQklUU19QRVJfVU5JVCAqIDgpCisjZW5kaWYKKworI2lmbmRlZiBTSE9SVF9BQ0NVTV9UWVBFX1NJWkUKKyNkZWZpbmUgU0hPUlRfQUNDVU1fVFlQRV9TSVpFIChTSE9SVF9GUkFDVF9UWVBFX1NJWkUgKiAyKQorI2VuZGlmCisKKyNpZm5kZWYgQUNDVU1fVFlQRV9TSVpFCisjZGVmaW5lIEFDQ1VNX1RZUEVfU0laRSAoRlJBQ1RfVFlQRV9TSVpFICogMikKKyNlbmRpZgorCisjaWZuZGVmIExPTkdfQUNDVU1fVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfQUNDVU1fVFlQRV9TSVpFIChMT05HX0ZSQUNUX1RZUEVfU0laRSAqIDIpCisjZW5kaWYKKworI2lmbmRlZiBMT05HX0xPTkdfQUNDVU1fVFlQRV9TSVpFCisjZGVmaW5lIExPTkdfTE9OR19BQ0NVTV9UWVBFX1NJWkUgKExPTkdfTE9OR19GUkFDVF9UWVBFX1NJWkUgKiAyKQorI2VuZGlmCisKKy8qIFdlIGxldCB0bS5oIG92ZXJyaWRlIHRoZSB0eXBlcyB1c2VkIGhlcmUsIHRvIGhhbmRsZSB0cml2aWFsIGRpZmZlcmVuY2VzCisgICBzdWNoIGFzIHRoZSBjaG9pY2Ugb2YgdW5zaWduZWQgaW50IG9yIGxvbmcgdW5zaWduZWQgaW50IGZvciBzaXplX3QuCisgICBXaGVuIG1hY2hpbmVzIHN0YXJ0IG5lZWRpbmcgbm9udHJpdmlhbCBkaWZmZXJlbmNlcyBpbiB0aGUgc2l6ZSB0eXBlLAorICAgaXQgd291bGQgYmUgYmVzdCB0byBkbyBzb21ldGhpbmcgaGVyZSB0byBmaWd1cmUgb3V0IGF1dG9tYXRpY2FsbHkKKyAgIGZyb20gb3RoZXIgaW5mb3JtYXRpb24gd2hhdCB0eXBlIHRvIHVzZS4gICovCisKKyNpZm5kZWYgU0laRV9UWVBFCisjZGVmaW5lIFNJWkVfVFlQRSAibG9uZyB1bnNpZ25lZCBpbnQiCisjZW5kaWYKKworI2lmbmRlZiBTSVpFVFlQRQorI2RlZmluZSBTSVpFVFlQRSBTSVpFX1RZUEUKKyNlbmRpZgorCisjaWZuZGVmIFBJRF9UWVBFCisjZGVmaW5lIFBJRF9UWVBFICJpbnQiCisjZW5kaWYKKworLyogSWYgR0NDIGtub3dzIHRoZSBleGFjdCB1aW50X2xlYXN0MTZfdCBhbmQgdWludF9sZWFzdDMyX3QgdHlwZXMgZnJvbQorICAgPHN0ZGludC5oPiwgdXNlIHRoZW0gZm9yIGNoYXIxNl90IGFuZCBjaGFyMzJfdC4gIE90aGVyd2lzZSwgdXNlCisgICB0aGVzZSBndWVzc2VzOyBnZXR0aW5nIHRoZSB3cm9uZyB0eXBlIG9mIGEgZ2l2ZW4gd2lkdGggd2lsbCBub3QKKyAgIGFmZmVjdCBDKysgbmFtZSBtYW5nbGluZyBiZWNhdXNlIGluIEMrKyB0aGVzZSBhcmUgZGlzdGluY3QgdHlwZXMKKyAgIG5vdCB0eXBlZGVmcy4gICovCisKKyNpZmRlZiBVSU5UX0xFQVNUMTZfVFlQRQorI2RlZmluZSBDSEFSMTZfVFlQRSBVSU5UX0xFQVNUMTZfVFlQRQorI2Vsc2UKKyNkZWZpbmUgQ0hBUjE2X1RZUEUgInNob3J0IHVuc2lnbmVkIGludCIKKyNlbmRpZgorCisjaWZkZWYgVUlOVF9MRUFTVDMyX1RZUEUKKyNkZWZpbmUgQ0hBUjMyX1RZUEUgVUlOVF9MRUFTVDMyX1RZUEUKKyNlbHNlCisjZGVmaW5lIENIQVIzMl9UWVBFICJ1bnNpZ25lZCBpbnQiCisjZW5kaWYKKworI2lmbmRlZiBXQ0hBUl9UWVBFCisjZGVmaW5lIFdDSEFSX1RZUEUgImludCIKKyNlbmRpZgorCisvKiBXQ0hBUl9UWVBFIGdldHMgb3ZlcnJpZGRlbiBieSAtZnNob3J0LXdjaGFyLiAgKi8KKyNkZWZpbmUgTU9ESUZJRURfV0NIQVJfVFlQRSBcCisJKGZsYWdfc2hvcnRfd2NoYXIgPyAic2hvcnQgdW5zaWduZWQgaW50IiA6IFdDSEFSX1RZUEUpCisKKyNpZm5kZWYgUFRSRElGRl9UWVBFCisjZGVmaW5lIFBUUkRJRkZfVFlQRSAibG9uZyBpbnQiCisjZW5kaWYKKworI2lmbmRlZiBXSU5UX1RZUEUKKyNkZWZpbmUgV0lOVF9UWVBFICJ1bnNpZ25lZCBpbnQiCisjZW5kaWYKKworI2lmbmRlZiBJTlRNQVhfVFlQRQorI2RlZmluZSBJTlRNQVhfVFlQRSAoKElOVF9UWVBFX1NJWkUgPT0gTE9OR19MT05HX1RZUEVfU0laRSkJXAorCQkgICAgID8gImludCIJCQkJCVwKKwkJICAgICA6ICgoTE9OR19UWVBFX1NJWkUgPT0gTE9OR19MT05HX1RZUEVfU0laRSkJXAorCQkJPyAibG9uZyBpbnQiCQkJCVwKKwkJCTogImxvbmcgbG9uZyBpbnQiKSkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRNQVhfVFlQRQorI2RlZmluZSBVSU5UTUFYX1RZUEUgKChJTlRfVFlQRV9TSVpFID09IExPTkdfTE9OR19UWVBFX1NJWkUpCVwKKwkJICAgICA/ICJ1bnNpZ25lZCBpbnQiCQkJCVwKKwkJICAgICA6ICgoTE9OR19UWVBFX1NJWkUgPT0gTE9OR19MT05HX1RZUEVfU0laRSkJXAorCQkJPyAibG9uZyB1bnNpZ25lZCBpbnQiCQkJXAorCQkJOiAibG9uZyBsb25nIHVuc2lnbmVkIGludCIpKQorI2VuZGlmCisKKworLyogVGhlcmUgYXJlIG5vIGRlZmF1bHQgZGVmaW5pdGlvbnMgb2YgdGhlc2UgPHN0ZGludC5oPiB0eXBlcy4gICovCisKKyNpZm5kZWYgU0lHX0FUT01JQ19UWVBFCisjZGVmaW5lIFNJR19BVE9NSUNfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIElOVDhfVFlQRQorI2RlZmluZSBJTlQ4X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBJTlQxNl9UWVBFCisjZGVmaW5lIElOVDE2X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBJTlQzMl9UWVBFCisjZGVmaW5lIElOVDMyX1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBJTlQ2NF9UWVBFCisjZGVmaW5lIElOVDY0X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBVSU5UOF9UWVBFCisjZGVmaW5lIFVJTlQ4X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBVSU5UMTZfVFlQRQorI2RlZmluZSBVSU5UMTZfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlQzMl9UWVBFCisjZGVmaW5lIFVJTlQzMl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVDY0X1RZUEUKKyNkZWZpbmUgVUlOVDY0X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBJTlRfTEVBU1Q4X1RZUEUKKyNkZWZpbmUgSU5UX0xFQVNUOF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX0xFQVNUMTZfVFlQRQorI2RlZmluZSBJTlRfTEVBU1QxNl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX0xFQVNUMzJfVFlQRQorI2RlZmluZSBJTlRfTEVBU1QzMl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX0xFQVNUNjRfVFlQRQorI2RlZmluZSBJTlRfTEVBU1Q2NF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVF9MRUFTVDhfVFlQRQorI2RlZmluZSBVSU5UX0xFQVNUOF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVF9MRUFTVDE2X1RZUEUKKyNkZWZpbmUgVUlOVF9MRUFTVDE2X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBVSU5UX0xFQVNUMzJfVFlQRQorI2RlZmluZSBVSU5UX0xFQVNUMzJfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIFVJTlRfTEVBU1Q2NF9UWVBFCisjZGVmaW5lIFVJTlRfTEVBU1Q2NF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX0ZBU1Q4X1RZUEUKKyNkZWZpbmUgSU5UX0ZBU1Q4X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBJTlRfRkFTVDE2X1RZUEUKKyNkZWZpbmUgSU5UX0ZBU1QxNl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UX0ZBU1QzMl9UWVBFCisjZGVmaW5lIElOVF9GQVNUMzJfVFlQRSAoKGNvbnN0IGNoYXIgKikgTlVMTCkKKyNlbmRpZgorCisjaWZuZGVmIElOVF9GQVNUNjRfVFlQRQorI2RlZmluZSBJTlRfRkFTVDY0X1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBVSU5UX0ZBU1Q4X1RZUEUKKyNkZWZpbmUgVUlOVF9GQVNUOF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVF9GQVNUMTZfVFlQRQorI2RlZmluZSBVSU5UX0ZBU1QxNl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVF9GQVNUMzJfVFlQRQorI2RlZmluZSBVSU5UX0ZBU1QzMl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgVUlOVF9GQVNUNjRfVFlQRQorI2RlZmluZSBVSU5UX0ZBU1Q2NF9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgSU5UUFRSX1RZUEUKKyNkZWZpbmUgSU5UUFRSX1RZUEUgKChjb25zdCBjaGFyICopIE5VTEwpCisjZW5kaWYKKworI2lmbmRlZiBVSU5UUFRSX1RZUEUKKyNkZWZpbmUgVUlOVFBUUl9UWVBFICgoY29uc3QgY2hhciAqKSBOVUxMKQorI2VuZGlmCisKKy8qIFdpZHRoIGluIGJpdHMgb2YgYSBwb2ludGVyLiAgTWluZCB0aGUgdmFsdWUgb2YgdGhlIG1hY3JvIGBQbW9kZScuICAqLworI2lmbmRlZiBQT0lOVEVSX1NJWkUKKyNkZWZpbmUgUE9JTlRFUl9TSVpFIEJJVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNCisjZGVmaW5lIFBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIElOVkFMSURfUkVHTlVNCisjZW5kaWYKKworI2lmbmRlZiBQSUNfT0ZGU0VUX1RBQkxFX1JFR19DQUxMX0NMT0JCRVJFRAorI2RlZmluZSBQSUNfT0ZGU0VUX1RBQkxFX1JFR19DQUxMX0NMT0JCRVJFRCAwCisjZW5kaWYKKworI2lmbmRlZiBUQVJHRVRfRExMSU1QT1JUX0RFQ0xfQVRUUklCVVRFUworI2RlZmluZSBUQVJHRVRfRExMSU1QT1JUX0RFQ0xfQVRUUklCVVRFUyAwCisjZW5kaWYKKworI2lmbmRlZiBUQVJHRVRfREVDTFNQRUMKKyNpZiBUQVJHRVRfRExMSU1QT1JUX0RFQ0xfQVRUUklCVVRFUworLyogSWYgdGhlIHRhcmdldCBzdXBwb3J0cyB0aGUgImRsbGltcG9ydCIgYXR0cmlidXRlLCB1c2VycyBhcmUKKyAgIHByb2JhYmx5IHVzZWQgdG8gdGhlICJfX2RlY2xzcGVjIiBzeW50YXguICAqLworI2RlZmluZSBUQVJHRVRfREVDTFNQRUMgMQorI2Vsc2UKKyNkZWZpbmUgVEFSR0VUX0RFQ0xTUEVDIDAKKyNlbmRpZgorI2VuZGlmCisKKy8qIEJ5IGRlZmF1bHQsIHRoZSBwcmVwcm9jZXNzb3Igc2hvdWxkIGJlIGludm9rZWQgdGhlIHNhbWUgd2F5IGluIEMrKworICAgYXMgaW4gQy4gICovCisjaWZuZGVmIENQTFVTUExVU19DUFBfU1BFQworI2lmZGVmIENQUF9TUEVDCisjZGVmaW5lIENQTFVTUExVU19DUFBfU1BFQyBDUFBfU1BFQworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MKKyNkZWZpbmUgQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIDAKKyNlbmRpZgorCisvKiBCeSBkZWZhdWx0LCB1c2UgdGhlIEdOVSBydW50aW1lIGZvciBPYmplY3RpdmUgQy4gICovCisjaWZuZGVmIE5FWFRfT0JKQ19SVU5USU1FCisjZGVmaW5lIE5FWFRfT0JKQ19SVU5USU1FIDAKKyNlbmRpZgorCisvKiBTdXBwbHkgYSBkZWZhdWx0IGRlZmluaXRpb24gZm9yIFBVU0hfQVJHUy4gICovCisjaWZuZGVmIFBVU0hfQVJHUworI2lmZGVmIFBVU0hfUk9VTkRJTkcKKyNkZWZpbmUgUFVTSF9BUkdTCSFBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MKKyNlbHNlCisjZGVmaW5lIFBVU0hfQVJHUwkwCisjZW5kaWYKKyNlbmRpZgorCisvKiBEZWNpZGUgd2hldGhlciBhIGZ1bmN0aW9uJ3MgYXJndW1lbnRzIHNob3VsZCBiZSBwcm9jZXNzZWQKKyAgIGZyb20gZmlyc3QgdG8gbGFzdCBvciBmcm9tIGxhc3QgdG8gZmlyc3QuCisKKyAgIFRoZXkgc2hvdWxkIGlmIHRoZSBzdGFjayBhbmQgYXJncyBncm93IGluIG9wcG9zaXRlIGRpcmVjdGlvbnMsIGJ1dAorICAgb25seSBpZiB3ZSBoYXZlIHB1c2ggaW5zbnMuICAqLworCisjaWZkZWYgUFVTSF9ST1VORElORworCisjaWZuZGVmIFBVU0hfQVJHU19SRVZFUlNFRAorI2lmIGRlZmluZWQgKFNUQUNLX0dST1dTX0RPV05XQVJEKSAhPSBkZWZpbmVkIChBUkdTX0dST1dfRE9XTldBUkQpCisjZGVmaW5lIFBVU0hfQVJHU19SRVZFUlNFRCAgUFVTSF9BUkdTCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKKworI2lmbmRlZiBQVVNIX0FSR1NfUkVWRVJTRUQKKyNkZWZpbmUgUFVTSF9BUkdTX1JFVkVSU0VEIDAKKyNlbmRpZgorCisvKiBEZWZhdWx0IHZhbHVlIGZvciB0aGUgYWxpZ25tZW50IChpbiBiaXRzKSBhIEMgY29uZm9ybWFudCBtYWxsb2MgaGFzIHRvCisgICBwcm92aWRlLiBUaGlzIGRlZmF1bHQgaXMgaW50ZW5kZWQgdG8gYmUgc2FmZSBhbmQgYWx3YXlzIGNvcnJlY3QuICAqLworI2lmbmRlZiBNQUxMT0NfQUJJX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUJJX0FMSUdOTUVOVCBCSVRTX1BFUl9XT1JECisjZW5kaWYKKworLyogSWYgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZIGlzIG5vdCBkZWZpbmVkLCBzZXQgaXQgdG8gU1RBQ0tfQk9VTkRBUlkuCisgICBTVEFDS19CT1VOREFSWSBpcyByZXF1aXJlZC4gICovCisjaWZuZGVmIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWQorI2RlZmluZSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkgU1RBQ0tfQk9VTkRBUlkKKyNlbmRpZgorCisvKiBTZXQgSU5DT01JTkdfU1RBQ0tfQk9VTkRBUlkgdG8gUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZIGlmIGl0IGlzIG5vdAorICAgZGVmaW5lZC4gICovCisjaWZuZGVmIElOQ09NSU5HX1NUQUNLX0JPVU5EQVJZCisjZGVmaW5lIElOQ09NSU5HX1NUQUNLX0JPVU5EQVJZIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWQorI2VuZGlmCisKKyNpZm5kZWYgVEFSR0VUX0RFRkFVTFRfUEFDS19TVFJVQ1QKKyNkZWZpbmUgVEFSR0VUX0RFRkFVTFRfUEFDS19TVFJVQ1QgMAorI2VuZGlmCisKKy8qIEJ5IGRlZmF1bHQsIHRoZSB2dGFibGUgZW50cmllcyBhcmUgdm9pZCBwb2ludGVycywgdGhlIHNvIHRoZSBhbGlnbm1lbnQKKyAgIGlzIHRoZSBzYW1lIGFzIHBvaW50ZXIgYWxpZ25tZW50LiAgVGhlIHZhbHVlIG9mIHRoaXMgbWFjcm8gc3BlY2lmaWVzCisgICB0aGUgYWxpZ25tZW50IG9mIHRoZSB2dGFibGUgZW50cnkgaW4gYml0cy4gIEl0IHNob3VsZCBiZSBkZWZpbmVkIG9ubHkKKyAgIHdoZW4gc3BlY2lhbCBhbGlnbm1lbnQgaXMgbmVjZXNzYXJ5LiAgKi8KKyNpZm5kZWYgVEFSR0VUX1ZUQUJMRV9FTlRSWV9BTElHTgorI2RlZmluZSBUQVJHRVRfVlRBQkxFX0VOVFJZX0FMSUdOIFBPSU5URVJfU0laRQorI2VuZGlmCisKKy8qIFRoZXJlIGFyZSBhIGZldyBub24tZGVzY3JpcHRvciBlbnRyaWVzIGluIHRoZSB2dGFibGUgYXQgb2Zmc2V0cyBiZWxvdworICAgemVyby4gIElmIHRoZXNlIGVudHJpZXMgbXVzdCBiZSBwYWRkZWQgKHNheSwgdG8gcHJlc2VydmUgdGhlIGFsaWdubWVudAorICAgc3BlY2lmaWVkIGJ5IFRBUkdFVF9WVEFCTEVfRU5UUllfQUxJR04pLCBzZXQgdGhpcyB0byB0aGUgbnVtYmVyIG9mCisgICB3b3JkcyBpbiBlYWNoIGRhdGEgZW50cnkuICAqLworI2lmbmRlZiBUQVJHRVRfVlRBQkxFX0RBVEFfRU5UUllfRElTVEFOQ0UKKyNkZWZpbmUgVEFSR0VUX1ZUQUJMRV9EQVRBX0VOVFJZX0RJU1RBTkNFIDEKKyNlbmRpZgorCisvKiBEZWNpZGUgd2hldGhlciBpdCBpcyBzYWZlIHRvIHVzZSBhIGxvY2FsIGFsaWFzIGZvciBhIHZpcnR1YWwgZnVuY3Rpb24KKyAgIHdoZW4gY29uc3RydWN0aW5nIHRodW5rcy4gICovCisjaWZuZGVmIFRBUkdFVF9VU0VfTE9DQUxfVEhVTktfQUxJQVNfUAorI2lmZGVmIEFTTV9PVVRQVVRfREVGCisjZGVmaW5lIFRBUkdFVF9VU0VfTE9DQUxfVEhVTktfQUxJQVNfUChERUNMKSAxCisjZWxzZQorI2RlZmluZSBUQVJHRVRfVVNFX0xPQ0FMX1RIVU5LX0FMSUFTX1AoREVDTCkgMAorI2VuZGlmCisjZW5kaWYKKworLyogU2VsZWN0IGEgZm9ybWF0IHRvIGVuY29kZSBwb2ludGVycyBpbiBleGNlcHRpb24gaGFuZGxpbmcgZGF0YS4gIFdlCisgICBwcmVmZXIgdGhvc2UgdGhhdCByZXN1bHQgaW4gZmV3ZXIgZHluYW1pYyByZWxvY2F0aW9ucy4gIEFzc3VtZSBubworICAgc3BlY2lhbCBzdXBwb3J0IGhlcmUgYW5kIGVuY29kZSBkaXJlY3QgcmVmZXJlbmNlcy4gICovCisjaWZuZGVmIEFTTV9QUkVGRVJSRURfRUhfREFUQV9GT1JNQVQKKyNkZWZpbmUgQVNNX1BSRUZFUlJFRF9FSF9EQVRBX0ZPUk1BVChDT0RFLEdMT0JBTCkgIERXX0VIX1BFX2Fic3B0cgorI2VuZGlmCisKKy8qIEJ5IGRlZmF1bHQsIHRoZSBDKysgY29tcGlsZXIgd2lsbCB1c2UgdGhlIGxvd2VzdCBiaXQgb2YgdGhlIHBvaW50ZXIKKyAgIHRvIGZ1bmN0aW9uIHRvIGluZGljYXRlIGEgcG9pbnRlci10by1tZW1iZXItZnVuY3Rpb24gcG9pbnRzIHRvIGEKKyAgIHZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9uLiAgSG93ZXZlciwgaWYgRlVOQ1RJT05fQk9VTkRBUlkgaW5kaWNhdGVzCisgICBmdW5jdGlvbiBhZGRyZXNzZXMgYXJlbid0IGFsd2F5cyBldmVuLCB0aGUgbG93ZXN0IGJpdCBvZiB0aGUgZGVsdGEKKyAgIGZpZWxkIHdpbGwgYmUgdXNlZC4gICovCisjaWZuZGVmIFRBUkdFVF9QVFJNRU1GVU5DX1ZCSVRfTE9DQVRJT04KKyNkZWZpbmUgVEFSR0VUX1BUUk1FTUZVTkNfVkJJVF9MT0NBVElPTiBcCisgIChGVU5DVElPTl9CT1VOREFSWSA+PSAyICogQklUU19QRVJfVU5JVCBcCisgICA/IHB0cm1lbWZ1bmNfdmJpdF9pbl9wZm4gOiBwdHJtZW1mdW5jX3ZiaXRfaW5fZGVsdGEpCisjZW5kaWYKKworI2lmbmRlZiBERUZBVUxUX0dEQl9FWFRFTlNJT05TCisjZGVmaW5lIERFRkFVTFRfR0RCX0VYVEVOU0lPTlMgMQorI2VuZGlmCisKKy8qIElmIG1vcmUgdGhhbiBvbmUgZGVidWdnaW5nIHR5cGUgaXMgc3VwcG9ydGVkLCB5b3UgbXVzdCBkZWZpbmUKKyAgIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSB0byBjaG9vc2UgdGhlIGRlZmF1bHQuICAqLworCisjaWYgMSA8IChkZWZpbmVkIChEQlhfREVCVUdHSU5HX0lORk8pICsgZGVmaW5lZCAoU0RCX0RFQlVHR0lOR19JTkZPKSBcCisgICAgICAgICArIGRlZmluZWQgKERXQVJGMl9ERUJVR0dJTkdfSU5GTykgKyBkZWZpbmVkIChYQ09GRl9ERUJVR0dJTkdfSU5GTykgXAorICAgICAgICAgKyBkZWZpbmVkIChWTVNfREVCVUdHSU5HX0lORk8pKQorI2lmbmRlZiBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUKKyNlcnJvciBZb3UgbXVzdCBkZWZpbmUgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFCisjZW5kaWYgLyogbm8gUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFICovCisKKy8qIElmIG9ubHkgb25lIGRlYnVnZ2luZyBmb3JtYXQgaXMgc3VwcG9ydGVkLCBkZWZpbmUgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFCisgICBoZXJlIHNvIG90aGVyIGNvZGUgbmVlZG4ndCBjYXJlLiAgKi8KKyNlbGlmIGRlZmluZWQgREJYX0RFQlVHR0lOR19JTkZPCisjZGVmaW5lIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSBEQlhfREVCVUcKKworI2VsaWYgZGVmaW5lZCBTREJfREVCVUdHSU5HX0lORk8KKyNkZWZpbmUgUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFIFNEQl9ERUJVRworCisjZWxpZiBkZWZpbmVkIERXQVJGMl9ERUJVR0dJTkdfSU5GTworI2RlZmluZSBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUgRFdBUkYyX0RFQlVHCisKKyNlbGlmIGRlZmluZWQgVk1TX0RFQlVHR0lOR19JTkZPCisjZGVmaW5lIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSBWTVNfQU5EX0RXQVJGMl9ERUJVRworCisjZWxpZiBkZWZpbmVkIFhDT0ZGX0RFQlVHR0lOR19JTkZPCisjZGVmaW5lIFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSBYQ09GRl9ERUJVRworCisjZWxzZQorLyogTm8gZGVidWdnaW5nIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgdGhpcyB0YXJnZXQuICAqLworI2RlZmluZSBQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUgTk9fREVCVUcKKyNlbmRpZgorCisjaWZuZGVmIExBUkdFU1RfRVhQT05FTlRfSVNfTk9STUFMCisjZGVmaW5lIExBUkdFU1RfRVhQT05FTlRfSVNfTk9STUFMKFNJWkUpIDAKKyNlbmRpZgorCisjaWZuZGVmIFJPVU5EX1RPV0FSRFNfWkVSTworI2RlZmluZSBST1VORF9UT1dBUkRTX1pFUk8gMAorI2VuZGlmCisKKyNpZm5kZWYgRkxPQVRfTElCX0NPTVBBUkVfUkVUVVJOU19CT09MCisjZGVmaW5lIEZMT0FUX0xJQl9DT01QQVJFX1JFVFVSTlNfQk9PTChNT0RFLCBDT01QQVJJU09OKSBmYWxzZQorI2VuZGlmCisKKy8qIFRydWUgaWYgdGhlIHRhcmdldHMgaW50ZWdlci1jb21wYXJpc29uIGZ1bmN0aW9ucyByZXR1cm4geyAwLCAxLCAyCisgICB9IHRvIGluZGljYXRlIHsgPCwgPT0sID4gfS4gIEZhbHNlIGlmIHsgLTEsIDAsIDEgfSBpcyB1c2VkCisgICBpbnN0ZWFkLiAgVGhlIGxpYmdjYyByb3V0aW5lcyBhcmUgYmlhc2VkLiAgKi8KKyNpZm5kZWYgVEFSR0VUX0xJQl9JTlRfQ01QX0JJQVNFRAorI2RlZmluZSBUQVJHRVRfTElCX0lOVF9DTVBfQklBU0VEICh0cnVlKQorI2VuZGlmCisKKy8qIElmIEZMT0FUX1dPUkRTX0JJR19FTkRJQU4gaXMgbm90IGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlcywKKyAgIHRoZW4gdGhlIHdvcmQtZW5kaWFubmVzcyBpcyB0aGUgc2FtZSBhcyBmb3IgaW50ZWdlcnMuICAqLworI2lmbmRlZiBGTE9BVF9XT1JEU19CSUdfRU5ESUFOCisjZGVmaW5lIEZMT0FUX1dPUkRTX0JJR19FTkRJQU4gV09SRFNfQklHX0VORElBTgorI2VuZGlmCisKKyNpZm5kZWYgUkVHX1dPUkRTX0JJR19FTkRJQU4KKyNkZWZpbmUgUkVHX1dPUkRTX0JJR19FTkRJQU4gV09SRFNfQklHX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBUQVJHRVRfRkxUX0VWQUxfTUVUSE9ECisjZGVmaW5lIFRBUkdFVF9GTFRfRVZBTF9NRVRIT0RfTk9OX0RFRkFVTFQgMQorI2Vsc2UKKyNkZWZpbmUgVEFSR0VUX0ZMVF9FVkFMX01FVEhPRCAwCisjZGVmaW5lIFRBUkdFVF9GTFRfRVZBTF9NRVRIT0RfTk9OX0RFRkFVTFQgMAorI2VuZGlmCisKKyNpZm5kZWYgVEFSR0VUX0RFQ19FVkFMX01FVEhPRAorI2RlZmluZSBUQVJHRVRfREVDX0VWQUxfTUVUSE9EIDIKKyNlbmRpZgorCisjaWZuZGVmIEhBU19MT05HX0NPTkRfQlJBTkNICisjZGVmaW5lIEhBU19MT05HX0NPTkRfQlJBTkNIIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBU19MT05HX1VOQ09ORF9CUkFOQ0gKKyNkZWZpbmUgSEFTX0xPTkdfVU5DT05EX0JSQU5DSCAwCisjZW5kaWYKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgX19jeGFfYXRleGl0LCByYXRoZXIgdGhhbiBhdGV4aXQsIGlzIHVzZWQgdG8KKyAgIHJlZ2lzdGVyIEMrKyBkZXN0cnVjdG9ycyBmb3IgbG9jYWwgc3RhdGljcyBhbmQgZ2xvYmFsIG9iamVjdHMuICAqLworI2lmbmRlZiBERUZBVUxUX1VTRV9DWEFfQVRFWElUCisjZGVmaW5lIERFRkFVTFRfVVNFX0NYQV9BVEVYSVQgMAorI2VuZGlmCisKKy8qIElmIG5vbmUgb2YgdGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVkLCB0aGUgcG9ydCBtdXN0IHVzZSB0aGUgbmV3CisgICB0ZWNobmlxdWUgb2YgZGVmaW5pbmcgY29uc3RyYWludHMgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24uCisgICB0bV9wLmggd2lsbCBkZWZpbmUgdGhvc2UgbWFjcm9zIHRoYXQgbWFjaGluZS1pbmRlcGVuZGVudCBjb2RlCisgICBzdGlsbCB1c2VzLiAgKi8KKyNpZiAgIWRlZmluZWQgQ09OU1RSQUlOVF9MRU4JCQlcCisgICYmICFkZWZpbmVkIFJFR19DTEFTU19GUk9NX0xFVFRFUgkJXAorICAmJiAhZGVmaW5lZCBSRUdfQ0xBU1NfRlJPTV9DT05TVFJBSU5UCQlcCisgICYmICFkZWZpbmVkIENPTlNUX09LX0ZPUl9MRVRURVJfUAkJXAorICAmJiAhZGVmaW5lZCBDT05TVF9PS19GT1JfQ09OU1RSQUlOVF9QCQlcCisgICYmICFkZWZpbmVkIENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1AJXAorICAmJiAhZGVmaW5lZCBDT05TVF9ET1VCTEVfT0tfRk9SX0NPTlNUUkFJTlRfUCAgXAorICAmJiAhZGVmaW5lZCBFWFRSQV9DT05TVFJBSU5UCQkJXAorICAmJiAhZGVmaW5lZCBFWFRSQV9DT05TVFJBSU5UX1NUUgkJXAorICAmJiAhZGVmaW5lZCBFWFRSQV9NRU1PUllfQ09OU1RSQUlOVAkJXAorICAmJiAhZGVmaW5lZCBFWFRSQV9BRERSRVNTX0NPTlNUUkFJTlQKKworI2RlZmluZSBVU0VfTURfQ09OU1RSQUlOVFMKKworI2lmIEdDQ19WRVJTSU9OID49IDMwMDAgJiYgZGVmaW5lZCBJTl9HQ0MKKy8qIFRoZXNlIG9sZCBjb25zdHJhaW50IG1hY3JvcyBzaG91bGRuJ3QgYXBwZWFyIGFueXdoZXJlIGluIGEKKyAgIGNvbmZpZ3VyYXRpb24gdXNpbmcgTUQgY29uc3RyYWludCBkZWZpbml0aW9ucy4gICovCisjcHJhZ21hIEdDQyBwb2lzb24gUkVHX0NMQVNTX0ZST01fTEVUVEVSIENPTlNUX09LX0ZPUl9MRVRURVJfUCBcCisgICAgICAgICAgICAgICAgICAgQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCBFWFRSQV9DT05TVFJBSU5UCisjZW5kaWYKKworI2Vsc2UgLyogb2xkIGNvbnN0cmFpbnQgbWVjaGFuaXNtIGluIHVzZSAqLworCisvKiBEZXRlcm1pbmUgd2hldGhlciBleHRyYSBjb25zdHJhaW50IGxldHRlciBzaG91bGQgYmUgaGFuZGxlZAorICAgdmlhIGFkZHJlc3MgcmVsb2FkIChsaWtlICdvJykuICAqLworI2lmbmRlZiBFWFRSQV9NRU1PUllfQ09OU1RSQUlOVAorI2RlZmluZSBFWFRSQV9NRU1PUllfQ09OU1RSQUlOVChDLFNUUikgMAorI2VuZGlmCisKKy8qIERldGVybWluZSB3aGV0aGVyIGV4dHJhIGNvbnN0cmFpbnQgbGV0dGVyIHNob3VsZCBiZSBoYW5kbGVkCisgICBhcyBhbiBhZGRyZXNzIChsaWtlICdwJykuICAqLworI2lmbmRlZiBFWFRSQV9BRERSRVNTX0NPTlNUUkFJTlQKKyNkZWZpbmUgRVhUUkFfQUREUkVTU19DT05TVFJBSU5UKEMsU1RSKSAwCisjZW5kaWYKKworLyogV2hlbiBhIHBvcnQgZGVmaW5lcyBDT05TVFJBSU5UX0xFTiwgaXQgc2hvdWxkIHVzZSBERUZBVUxUX0NPTlNUUkFJTlRfTEVOCisgICBmb3IgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgaXQgZG9lcyBub3Qgd2FudCB0byBjaGFuZ2UsIHNvIHRoaW5ncyBsaWtlIHRoZQorICAnbGVuZ3RoJyBvZiBhIGRpZ2l0IGluIGEgbWF0Y2hpbmcgY29uc3RyYWludCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsCisgICBhbmQgbm90IHBhcnQgb2YgdGhlIGludGVyZmFjZS4gICovCisjZGVmaW5lIERFRkFVTFRfQ09OU1RSQUlOVF9MRU4oQyxTVFIpIDEKKworI2lmbmRlZiBDT05TVFJBSU5UX0xFTgorI2RlZmluZSBDT05TVFJBSU5UX0xFTihDLFNUUikgREVGQVVMVF9DT05TVFJBSU5UX0xFTiAoQywgU1RSKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05TVF9PS19GT1JfTEVUVEVSX1ApICYmICEgZGVmaW5lZCAoQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUCkKKyNkZWZpbmUgQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUChWQUwsQyxTVFIpIENPTlNUX09LX0ZPUl9MRVRURVJfUCAoVkFMLCBDKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKSAmJiAhIGRlZmluZWQgKENPTlNUX0RPVUJMRV9PS19GT1JfQ09OU1RSQUlOVF9QKQorI2RlZmluZSBDT05TVF9ET1VCTEVfT0tfRk9SX0NPTlNUUkFJTlRfUChPUCxDLFNUUikgXAorICBDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QIChPUCwgQykKKyNlbmRpZgorCisjaWZuZGVmIFJFR19DTEFTU19GUk9NX0NPTlNUUkFJTlQKKyNkZWZpbmUgUkVHX0NMQVNTX0ZST01fQ09OU1RSQUlOVChDLFNUUikgUkVHX0NMQVNTX0ZST01fTEVUVEVSIChDKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChFWFRSQV9DT05TVFJBSU5UKSAmJiAhIGRlZmluZWQgKEVYVFJBX0NPTlNUUkFJTlRfU1RSKQorI2RlZmluZSBFWFRSQV9DT05TVFJBSU5UX1NUUihPUCwgQyxTVFIpIEVYVFJBX0NPTlNUUkFJTlQgKE9QLCBDKQorI2VuZGlmCisKKyNlbmRpZiAvKiBvbGQgY29uc3RyYWludCBtZWNoYW5pc20gaW4gdXNlICovCisKKy8qIERldGVybWluZSB3aGV0aGVyIHRoZSBlbnRpcmUgYzk5IHJ1bnRpbWUKKyAgIGlzIHByZXNlbnQgaW4gdGhlIHJ1bnRpbWUgbGlicmFyeS4gICovCisjaWZuZGVmIFRBUkdFVF9DOTlfRlVOQ1RJT05TCisjZGVmaW5lIFRBUkdFVF9DOTlfRlVOQ1RJT05TIDAKKyNlbmRpZgorCisvKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgdGFyZ2V0IHJ1bnRpbWUgbGlicmFyeSBoYXMKKyAgIGEgc2luY29zIGltcGxlbWVudGF0aW9uIGZvbGxvd2luZyB0aGUgR05VIGV4dGVuc2lvbi4gICovCisjaWZuZGVmIFRBUkdFVF9IQVNfU0lOQ09TCisjZGVmaW5lIFRBUkdFVF9IQVNfU0lOQ09TIDAKKyNlbmRpZgorCisvKiBEZXRlcm1pbiB3aGV0aGVyIHRoZSB0YXJnZXQgcnVudGltZSBsaWJyYXJ5IGlzIEJpb25pYyAqLworI2lmbmRlZiBUQVJHRVRfSEFTX0JJT05JQworI2RlZmluZSBUQVJHRVRfSEFTX0JJT05JQyAwCisjZW5kaWYKKworLyogSW5kaWNhdGUgdGhhdCBDTFogYW5kIENUWiBhcmUgdW5kZWZpbmVkIGF0IHplcm8uICAqLworI2lmbmRlZiBDTFpfREVGSU5FRF9WQUxVRV9BVF9aRVJPCisjZGVmaW5lIENMWl9ERUZJTkVEX1ZBTFVFX0FUX1pFUk8oTU9ERSwgVkFMVUUpICAwCisjZW5kaWYKKyNpZm5kZWYgQ1RaX0RFRklORURfVkFMVUVfQVRfWkVSTworI2RlZmluZSBDVFpfREVGSU5FRF9WQUxVRV9BVF9aRVJPKE1PREUsIFZBTFVFKSAgMAorI2VuZGlmCisKKy8qIFByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlIGZvciBTVE9SRV9GTEFHX1ZBTFVFLiAgKi8KKyNpZm5kZWYgU1RPUkVfRkxBR19WQUxVRQorI2RlZmluZSBTVE9SRV9GTEFHX1ZBTFVFICAxCisjZW5kaWYKKworLyogVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHRoZSBsYXJnZXN0IHVuaXQgc2l6ZSB0aGF0CisgICBtb3ZlX2J5X3BpZWNlcyBjYW4gdXNlIGlzLiAgKi8KKworLyogTU9WRV9NQVhfUElFQ0VTIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXQgYSB0aW1lIHdoaWNoIHdlIGNhbgorICAgbW92ZSBlZmZpY2llbnRseSwgYXMgb3Bwb3NlZCB0byAgTU9WRV9NQVggd2hpY2ggaXMgdGhlIG1heGltdW0KKyAgIG51bWJlciBvZiBieXRlcyB3ZSBjYW4gbW92ZSB3aXRoIGEgc2luZ2xlIGluc3RydWN0aW9uLiAgKi8KKworI2lmbmRlZiBNT1ZFX01BWF9QSUVDRVMKKyNkZWZpbmUgTU9WRV9NQVhfUElFQ0VTICAgTU9WRV9NQVgKKyNlbmRpZgorCisjaWZuZGVmIE1BWF9NT1ZFX01BWAorI2RlZmluZSBNQVhfTU9WRV9NQVggTU9WRV9NQVgKKyNlbmRpZgorCisjaWZuZGVmIE1JTl9VTklUU19QRVJfV09SRAorI2RlZmluZSBNSU5fVU5JVFNfUEVSX1dPUkQgVU5JVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIE1BWF9CSVRTX1BFUl9XT1JECisjZGVmaW5lIE1BWF9CSVRTX1BFUl9XT1JEIEJJVFNfUEVSX1dPUkQKKyNlbmRpZgorCisjaWZuZGVmIFNUQUNLX1BPSU5URVJfT0ZGU0VUCisjZGVmaW5lIFNUQUNLX1BPSU5URVJfT0ZGU0VUICAgIDAKKyNlbmRpZgorCisjaWZuZGVmIExPQ0FMX1JFR05PCisjZGVmaW5lIExPQ0FMX1JFR05PKFJFR05PKSAgMAorI2VuZGlmCisKKy8qIEVYSVRfSUdOT1JFX1NUQUNLIHNob3VsZCBiZSBub256ZXJvIGlmLCB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb24sCisgICB0aGUgc3RhY2sgcG9pbnRlciBkb2VzIG5vdCBtYXR0ZXIuICBUaGUgdmFsdWUgaXMgdGVzdGVkIG9ubHkgaW4KKyAgIGZ1bmN0aW9ucyB0aGF0IGhhdmUgZnJhbWUgcG9pbnRlcnMuICAqLworI2lmbmRlZiBFWElUX0lHTk9SRV9TVEFDSworI2RlZmluZSBFWElUX0lHTk9SRV9TVEFDSyAwCisjZW5kaWYKKworLyogQXNzdW1lIHRoYXQgY2FzZSB2ZWN0b3JzIGFyZSBub3QgcGMtcmVsYXRpdmUuICAqLworI2lmbmRlZiBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRQorI2RlZmluZSBDQVNFX1ZFQ1RPUl9QQ19SRUxBVElWRSAwCisjZW5kaWYKKworLyogQXNzdW1lIHRoYXQgdHJhbXBvbGluZXMgbmVlZCBmdW5jdGlvbiBhbGlnbm1lbnQuICAqLworI2lmbmRlZiBUUkFNUE9MSU5FX0FMSUdOTUVOVAorI2RlZmluZSBUUkFNUE9MSU5FX0FMSUdOTUVOVCBGVU5DVElPTl9CT1VOREFSWQorI2VuZGlmCisKKy8qIFJlZ2lzdGVyIG1hcHBpbmdzIGZvciB0YXJnZXQgbWFjaGluZXMgd2l0aG91dCByZWdpc3RlciB3aW5kb3dzLiAgKi8KKyNpZm5kZWYgSU5DT01JTkdfUkVHTk8KKyNkZWZpbmUgSU5DT01JTkdfUkVHTk8oTikgKE4pCisjZW5kaWYKKworI2lmbmRlZiBPVVRHT0lOR19SRUdOTworI2RlZmluZSBPVVRHT0lOR19SRUdOTyhOKSAoTikKKyNlbmRpZgorCisjaWZuZGVmIFNISUZUX0NPVU5UX1RSVU5DQVRFRAorI2RlZmluZSBTSElGVF9DT1VOVF9UUlVOQ0FURUQgMAorI2VuZGlmCisKKyNpZm5kZWYgTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QCisjZGVmaW5lIExFR0lUSU1BVEVfUElDX09QRVJBTkRfUChYKSAxCisjZW5kaWYKKworI2lmbmRlZiBUQVJHRVRfTUVNX0NPTlNUUkFJTlQKKyNkZWZpbmUgVEFSR0VUX01FTV9DT05TVFJBSU5UICdtJworI2VuZGlmCisKKyNpZm5kZWYgUkVWRVJTSUJMRV9DQ19NT0RFCisjZGVmaW5lIFJFVkVSU0lCTEVfQ0NfTU9ERShNT0RFKSAwCisjZW5kaWYKKworLyogQmlnZ2VzdCBhbGlnbm1lbnQgc3VwcG9ydGVkIGJ5IHRoZSBvYmplY3QgZmlsZSBmb3JtYXQgb2YgdGhpcyBtYWNoaW5lLiAgKi8KKyNpZm5kZWYgTUFYX09GSUxFX0FMSUdOTUVOVAorI2RlZmluZSBNQVhfT0ZJTEVfQUxJR05NRU5UIEJJR0dFU1RfQUxJR05NRU5UCisjZW5kaWYKKworI2lmbmRlZiBGUkFNRV9HUk9XU19ET1dOV0FSRAorI2RlZmluZSBGUkFNRV9HUk9XU19ET1dOV0FSRCAwCisjZW5kaWYKKworLyogT24gbW9zdCBtYWNoaW5lcywgdGhlIENGQSBjb2luY2lkZXMgd2l0aCB0aGUgZmlyc3QgaW5jb21pbmcgcGFybS4gICovCisjaWZuZGVmIEFSR19QT0lOVEVSX0NGQV9PRkZTRVQKKyNkZWZpbmUgQVJHX1BPSU5URVJfQ0ZBX09GRlNFVChGTkRFQ0wpIFwKKyAgKEZJUlNUX1BBUk1fT0ZGU0VUIChGTkRFQ0wpICsgY3J0bC0+YXJncy5wcmV0ZW5kX2FyZ3Nfc2l6ZSkKKyNlbmRpZgorCisvKiBPbiBtb3N0IG1hY2hpbmVzLCB3ZSB1c2UgdGhlIENGQSBhcyBEV19BVF9mcmFtZV9iYXNlLiAgKi8KKyNpZm5kZWYgQ0ZBX0ZSQU1FX0JBU0VfT0ZGU0VUCisjZGVmaW5lIENGQV9GUkFNRV9CQVNFX09GRlNFVChGTkRFQ0wpIDAKKyNlbmRpZgorCisvKiBUaGUgb2Zmc2V0IGZyb20gdGhlIGluY29taW5nIHZhbHVlIG9mICVzcCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjayBmcmFtZQorICAgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKyNpZm5kZWYgSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VUCisjZGVmaW5lIElOQ09NSU5HX0ZSQU1FX1NQX09GRlNFVCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVJEX1JFR05PX05SRUdTX0hBU19QQURESU5HCisjZGVmaW5lIEhBUkRfUkVHTk9fTlJFR1NfSEFTX1BBRERJTkcoUkVHTk8sIE1PREUpIDAKKyNkZWZpbmUgSEFSRF9SRUdOT19OUkVHU19XSVRIX1BBRERJTkcoUkVHTk8sIE1PREUpIC0xCisjZW5kaWYKKworI2lmbmRlZiBPVVRHT0lOR19SRUdfUEFSTV9TVEFDS19TUEFDRQorI2RlZmluZSBPVVRHT0lOR19SRUdfUEFSTV9TVEFDS19TUEFDRShGTlRZUEUpIDAKKyNlbmRpZgorCisvKiBNQVhfU1RBQ0tfQUxJR05NRU5UIGlzIHRoZSBtYXhpbXVtIHN0YWNrIGFsaWdubWVudCBndWFyYW50ZWVkIGJ5CisgICB0aGUgYmFja2VuZC4gIE1BWF9TVVBQT1JURURfU1RBQ0tfQUxJR05NRU5UIGlzIHRoZSBtYXhpbXVtIGJlc3QKKyAgIGVmZm9ydCBzdGFjayBhbGlnbm1lbnQgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kLiAgSWYgdGhlIGJhY2tlbmQKKyAgIHN1cHBvcnRzIHN0YWNrIGFsaWdubWVudCwgTUFYX1NVUFBPUlRFRF9TVEFDS19BTElHTk1FTlQgYW5kCisgICBNQVhfU1RBQ0tfQUxJR05NRU5UIGFyZSB0aGUgc2FtZS4gIE90aGVyd2lzZSwgdGhlIGluY29taW5nIHN0YWNrCisgICBib3VuZGFyeSB3aWxsIGxpbWl0IHRoZSBtYXhpbXVtIGd1YXJhbnRlZWQgc3RhY2sgYWxpZ25tZW50LiAgKi8KKyNpZmRlZiBNQVhfU1RBQ0tfQUxJR05NRU5UCisjZGVmaW5lIE1BWF9TVVBQT1JURURfU1RBQ0tfQUxJR05NRU5UIE1BWF9TVEFDS19BTElHTk1FTlQKKyNlbHNlCisjZGVmaW5lIE1BWF9TVEFDS19BTElHTk1FTlQgU1RBQ0tfQk9VTkRBUlkKKyNkZWZpbmUgTUFYX1NVUFBPUlRFRF9TVEFDS19BTElHTk1FTlQgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZCisjZW5kaWYKKworI2RlZmluZSBTVVBQT1JUU19TVEFDS19BTElHTk1FTlQgKE1BWF9TVEFDS19BTElHTk1FTlQgPiBTVEFDS19CT1VOREFSWSkKKworI2lmbmRlZiBMT0NBTF9BTElHTk1FTlQKKyNkZWZpbmUgTE9DQUxfQUxJR05NRU5UKFRZUEUsIEFMSUdOTUVOVCkgQUxJR05NRU5UCisjZW5kaWYKKworI2lmbmRlZiBTVEFDS19TTE9UX0FMSUdOTUVOVAorI2RlZmluZSBTVEFDS19TTE9UX0FMSUdOTUVOVChUWVBFLE1PREUsQUxJR04pIFwKKyAgKChUWVBFKSA/IExPQ0FMX0FMSUdOTUVOVCAoKFRZUEUpLCAoQUxJR04pKSA6IChBTElHTikpCisjZW5kaWYKKworI2lmbmRlZiBMT0NBTF9ERUNMX0FMSUdOTUVOVAorI2RlZmluZSBMT0NBTF9ERUNMX0FMSUdOTUVOVChERUNMKSBcCisgIExPQ0FMX0FMSUdOTUVOVCAoVFJFRV9UWVBFIChERUNMKSwgREVDTF9BTElHTiAoREVDTCkpCisjZW5kaWYKKworI2lmbmRlZiBNSU5JTVVNX0FMSUdOTUVOVAorI2RlZmluZSBNSU5JTVVNX0FMSUdOTUVOVChFWFAsTU9ERSxBTElHTikgKEFMSUdOKQorI2VuZGlmCisKKy8qIEFsaWdubWVudCB2YWx1ZSBmb3IgYXR0cmlidXRlICgoYWxpZ25lZCkpLiAgKi8KKyNpZm5kZWYgQVRUUklCVVRFX0FMSUdORURfVkFMVUUKKyNkZWZpbmUgQVRUUklCVVRFX0FMSUdORURfVkFMVUUgQklHR0VTVF9BTElHTk1FTlQKKyNlbmRpZgorCisjaWZuZGVmIFNMT1dfVU5BTElHTkVEX0FDQ0VTUworI2RlZmluZSBTTE9XX1VOQUxJR05FRF9BQ0NFU1MoTU9ERSwgQUxJR04pIFNUUklDVF9BTElHTk1FTlQKKyNlbmRpZgorCisvKiBGb3IgbW9zdCBwb3J0cyBhbnl0aGluZyB0aGF0IGV2YWx1YXRlcyB0byBhIGNvbnN0YW50IHN5bWJvbGljCisgICBvciBpbnRlZ2VyIHZhbHVlIGlzIGFjY2VwdGFibGUgYXMgYSBjb25zdGFudCBhZGRyZXNzLiAgKi8KKyNpZm5kZWYgQ09OU1RBTlRfQUREUkVTU19QCisjZGVmaW5lIENPTlNUQU5UX0FERFJFU1NfUChYKSAgIChDT05TVEFOVF9QIChYKSAmJiBHRVRfQ09ERSAoWCkgIT0gQ09OU1RfRE9VQkxFKQorI2VuZGlmCisKKyNpZm5kZWYgTUFYX0ZJWEVEX01PREVfU0laRQorI2RlZmluZSBNQVhfRklYRURfTU9ERV9TSVpFIEdFVF9NT0RFX0JJVFNJWkUgKERJbW9kZSkKKyNlbmRpZgorCisvKiBOb256ZXJvIGlmIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBzaG91bGQgYmUgcmV0dXJuZWQgaW4gbWVtb3J5LgorCisgICBUaGlzIHNob3VsZCBvbmx5IGJlIGRlZmluZWQgaWYgY29tcGF0aWJpbGl0eSB3aXRoIGFub3RoZXIgY29tcGlsZXIgb3IKKyAgIHdpdGggYW4gQUJJIGlzIG5lZWRlZCwgYmVjYXVzZSBpdCByZXN1bHRzIGluIHNsb3dlciBjb2RlLiAgKi8KKworI2lmbmRlZiBERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOCisjZGVmaW5lIERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4gMQorI2VuZGlmCisKKyNpZmRlZiBHQ0NfSU5TTl9GTEFHU19ICisvKiBEZXBlbmRlbnQgZGVmYXVsdCB0YXJnZXQgbWFjcm8gZGVmaW5pdGlvbnMKKworICAgVGhpcyBzZWN0aW9uIG9mIGRlZmF1bHRzLmggZGVmaW5lcyB0YXJnZXQgbWFjcm9zIHRoYXQgZGVwZW5kIG9uIGdlbmVyYXRlZAorICAgaGVhZGVycy4gIFRoaXMgaXMgYSBiaXQgYXdrd2FyZDogIFdlIHdhbnQgdG8gcHV0IGFsbCBkZWZhdWx0IGRlZmluaXRpb25zCisgICBmb3IgdGFyZ2V0IG1hY3JvcyBpbiBkZWZhdWx0cy5oLCBidXQgc29tZSBvZiB0aGUgZGVmYXVsdHMgZGVwZW5kIG9uIHRoZQorICAgSEFWRV8qIGZsYWdzIGRlZmluZXMgb2YgaW5zbi1mbGFncy5oLiAgQnV0IGluc24tZmxhZ3MuaCBpcyBub3QgYWx3YXlzCisgICBpbmNsdWRlZCBieSBmaWxlcyB0aGF0IGRvIGluY2x1ZGUgZGVmYXVsdHMuaC4KKworICAgRm9ydHVuYXRlbHksIHRoZSBkZWZhdWx0IG1hY3JvIGRlZmluaXRpb25zIHRoYXQgZGVwZW5kIG9uIHRoZSBIQVZFXyoKKyAgIG1hY3JvcyBhcmUgYWxzbyB0aGUgb25lcyB0aGF0IHdpbGwgb25seSBiZSB1c2VkIGluc2lkZSBHQ0MgaXRzZWxmLCBpLmUuCisgICBub3QgaW4gdGhlIGdlbiogcHJvZ3JhbXMgb3IgaW4gdGFyZ2V0IG9iamVjdHMgbGlrZSBsaWJnY2MuCisKKyAgIE9idmlvdXNseSwgaXQgd291bGQgYmUgYmVzdCB0byBrZWVwIHRoaXMgc2VjdGlvbiBvZiBkZWZhdWx0cy5oIGFzIHNtYWxsCisgICBhcyBwb3NzaWJsZSwgYnkgY29udmVydGluZyB0aGUgbWFjcm9zIGRlZmluZWQgYmVsb3cgdG8gdGFyZ2V0IGhvb2tzIG9yCisgICBmdW5jdGlvbnMuCisqLworCisvKiBUaGUgZGVmYXVsdCBicmFuY2ggY29zdCBpcyAxLiAgKi8KKyNpZm5kZWYgQlJBTkNIX0NPU1QKKyNkZWZpbmUgQlJBTkNIX0NPU1Qoc3BlZWRfcCwgcHJlZGljdGFibGVfcCkgMQorI2VuZGlmCisKKy8qIElmIGEgbWVtb3J5LXRvLW1lbW9yeSBtb3ZlIHdvdWxkIHRha2UgTU9WRV9SQVRJTyBvciBtb3JlIHNpbXBsZQorICAgbW92ZS1pbnN0cnVjdGlvbiBzZXF1ZW5jZXMsIHdlIHdpbGwgZG8gYSBtb3ZtZW0gb3IgbGliY2FsbCBpbnN0ZWFkLiAgKi8KKworI2lmbmRlZiBNT1ZFX1JBVElPCisjaWYgZGVmaW5lZCAoSEFWRV9tb3ZtZW1xaSkgfHwgZGVmaW5lZCAoSEFWRV9tb3ZtZW1oaSkgfHwgZGVmaW5lZCAoSEFWRV9tb3ZtZW1zaSkgfHwgZGVmaW5lZCAoSEFWRV9tb3ZtZW1kaSkgfHwgZGVmaW5lZCAoSEFWRV9tb3ZtZW10aSkKKyNkZWZpbmUgTU9WRV9SQVRJTyhzcGVlZCkgMgorI2Vsc2UKKy8qIElmIHdlIGFyZSBvcHRpbWl6aW5nIGZvciBzcGFjZSAoLU9zKSwgY3V0IGRvd24gdGhlIGRlZmF1bHQgbW92ZSByYXRpby4gICovCisjZGVmaW5lIE1PVkVfUkFUSU8oc3BlZWQpICgoc3BlZWQpID8gMTUgOiAzKQorI2VuZGlmCisjZW5kaWYKKworLyogSWYgYSBjbGVhciBtZW1vcnkgb3BlcmF0aW9uIHdvdWxkIHRha2UgQ0xFQVJfUkFUSU8gb3IgbW9yZSBzaW1wbGUKKyAgIG1vdmUtaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzLCB3ZSB3aWxsIGRvIGEgc2V0bWVtIG9yIGxpYmNhbGwgaW5zdGVhZC4gICovCisKKyNpZm5kZWYgQ0xFQVJfUkFUSU8KKyNpZiBkZWZpbmVkIChIQVZFX3NldG1lbXFpKSB8fCBkZWZpbmVkIChIQVZFX3NldG1lbWhpKSB8fCBkZWZpbmVkIChIQVZFX3NldG1lbXNpKSB8fCBkZWZpbmVkIChIQVZFX3NldG1lbWRpKSB8fCBkZWZpbmVkIChIQVZFX3NldG1lbXRpKQorI2RlZmluZSBDTEVBUl9SQVRJTyhzcGVlZCkgMgorI2Vsc2UKKy8qIElmIHdlIGFyZSBvcHRpbWl6aW5nIGZvciBzcGFjZSwgY3V0IGRvd24gdGhlIGRlZmF1bHQgY2xlYXIgcmF0aW8uICAqLworI2RlZmluZSBDTEVBUl9SQVRJTyhzcGVlZCkgKChzcGVlZCkgPyAxNSA6MykKKyNlbmRpZgorI2VuZGlmCisKKy8qIElmIGEgbWVtb3J5IHNldCAodG8gdmFsdWUgb3RoZXIgdGhhbiB6ZXJvKSBvcGVyYXRpb24gd291bGQgdGFrZQorICAgU0VUX1JBVElPIG9yIG1vcmUgc2ltcGxlIG1vdmUtaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzLCB3ZSB3aWxsIGRvIGEgbW92bWVtCisgICBvciBsaWJjYWxsIGluc3RlYWQuICAqLworI2lmbmRlZiBTRVRfUkFUSU8KKyNkZWZpbmUgU0VUX1JBVElPKHNwZWVkKSBNT1ZFX1JBVElPKHNwZWVkKQorI2VuZGlmCisKKy8qIFN1cHBseSBhIGRlZmF1bHQgZGVmaW5pdGlvbiBmb3IgRlVOQ1RJT05fQVJHX1BBRERJTkc6CisgICB1c3VhbGx5IHBhZCB1cHdhcmQsIGJ1dCBwYWQgc2hvcnQgYXJncyBkb3dud2FyZCBvbgorICAgYmlnLWVuZGlhbiBtYWNoaW5lcy4gICovCisKKyNkZWZpbmUgREVGQVVMVF9GVU5DVElPTl9BUkdfUEFERElORyhNT0RFLCBUWVBFKQkJCVwKKyAgKCEgQllURVNfQklHX0VORElBTgkJCQkJCQlcCisgICA/IHVwd2FyZAkJCQkJCQkJXAorICAgOiAoKChNT0RFKSA9PSBCTEttb2RlCQkJCQkJXAorICAgICAgID8gKChUWVBFKSAmJiBUUkVFX0NPREUgKFRZUEVfU0laRSAoVFlQRSkpID09IElOVEVHRVJfQ1NUCQlcCisJICAmJiBpbnRfc2l6ZV9pbl9ieXRlcyAoVFlQRSkgPCAoUEFSTV9CT1VOREFSWSAvIEJJVFNfUEVSX1VOSVQpKSBcCisgICAgICAgOiBHRVRfTU9ERV9CSVRTSVpFIChNT0RFKSA8IFBBUk1fQk9VTkRBUlkpCQkJXAorICAgICAgPyBkb3dud2FyZCA6IHVwd2FyZCkpCisKKyNpZm5kZWYgRlVOQ1RJT05fQVJHX1BBRERJTkcKKyNkZWZpbmUgRlVOQ1RJT05fQVJHX1BBRERJTkcoTU9ERSwgVFlQRSkJXAorICBERUZBVUxUX0ZVTkNUSU9OX0FSR19QQURESU5HICgoTU9ERSksIChUWVBFKSkKKyNlbmRpZgorCisvKiBTdXBwbHkgYSBkZWZhdWx0IGRlZmluaXRpb24gb2YgU1RBQ0tfU0FWRUFSRUFfTU9ERSBmb3IgZW1pdF9zdGFja19zYXZlLgorICAgTm9ybWFsbHkgbW92ZV9pbnNuLCBzbyBQbW9kZSBzdGFjayBwb2ludGVyLiAgKi8KKworI2lmbmRlZiBTVEFDS19TQVZFQVJFQV9NT0RFCisjZGVmaW5lIFNUQUNLX1NBVkVBUkVBX01PREUoTEVWRUwpIFBtb2RlCisjZW5kaWYKKworLyogU3VwcGx5IGEgZGVmYXVsdCBkZWZpbml0aW9uIG9mIFNUQUNLX1NJWkVfTU9ERSBmb3IKKyAgIGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UuICBOb3JtYWxseSBQTFVTL01JTlVTLCBzbyB3b3JkX21vZGUuICAqLworCisjaWZuZGVmIFNUQUNLX1NJWkVfTU9ERQorI2RlZmluZSBTVEFDS19TSVpFX01PREUgd29yZF9tb2RlCisjZW5kaWYKKworLyogUHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hY3JvcyBjb250cm9sbGluZyBzdGFjayBjaGVja2luZy4gICovCisKKy8qIFRoZSBkZWZhdWx0IGlzIG5laXRoZXIgZnVsbCBidWlsdGluIHN0YWNrIGNoZWNraW5nLi4uICAqLworI2lmbmRlZiBTVEFDS19DSEVDS19CVUlMVElOCisjZGVmaW5lIFNUQUNLX0NIRUNLX0JVSUxUSU4gMAorI2VuZGlmCisKKy8qIC4uLm5vciBzdGF0aWMgYnVpbHRpbiBzdGFjayBjaGVja2luZy4gICovCisjaWZuZGVmIFNUQUNLX0NIRUNLX1NUQVRJQ19CVUlMVElOCisjZGVmaW5lIFNUQUNLX0NIRUNLX1NUQVRJQ19CVUlMVElOIDAKKyNlbmRpZgorCisvKiBUaGUgZGVmYXVsdCBpbnRlcnZhbCBpcyBvbmUgcGFnZSAoNDA5NiBieXRlcykuICAqLworI2lmbmRlZiBTVEFDS19DSEVDS19QUk9CRV9JTlRFUlZBTF9FWFAKKyNkZWZpbmUgU1RBQ0tfQ0hFQ0tfUFJPQkVfSU5URVJWQUxfRVhQIDEyCisjZW5kaWYKKworLyogVGhlIGRlZmF1bHQgaXMgbm90IHRvIG1vdmUgdGhlIHN0YWNrIHBvaW50ZXIuICAqLworI2lmbmRlZiBTVEFDS19DSEVDS19NT1ZJTkdfU1AKKyNkZWZpbmUgU1RBQ0tfQ0hFQ0tfTU9WSU5HX1NQIDAKKyNlbmRpZgorCisvKiBUaGlzIGlzIGEga2x1ZGdlIHRvIHRyeSB0byBjYXB0dXJlIHRoZSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBvbGQKKyAgIG1lY2hhbmlzbSAoZ2VuZXJpYyBzdGFjayBjaGVja2luZykgYW5kIHRoZSBuZXcgbWVjaGFuaXNtIChzdGF0aWMKKyAgIGJ1aWx0aW4gc3RhY2sgY2hlY2tpbmcpLiAgU1RBQ0tfQ0hFQ0tfUFJPVEVDVCBuZWVkcyB0byBiZSBidW1wZWQKKyAgIGZvciB0aGUgbGF0dGVyIGJlY2F1c2UgcGFydCBvZiB0aGUgcHJvdGVjdGlvbiBhcmVhIGlzIGVmZmVjdGl2ZWx5CisgICBpbmNsdWRlZCBpbiBTVEFDS19DSEVDS19NQVhfRlJBTUVfU0laRSBmb3IgdGhlIGZvcm1lci4gICovCisjaWZkZWYgU1RBQ0tfQ0hFQ0tfUFJPVEVDVAorI2RlZmluZSBTVEFDS19PTERfQ0hFQ0tfUFJPVEVDVCBTVEFDS19DSEVDS19QUk9URUNUCisjZWxzZQorI2RlZmluZSBTVEFDS19PTERfQ0hFQ0tfUFJPVEVDVAkJCQkJCVwKKyAodGFyZ2V0bV9jb21tb24uZXhjZXB0X3Vud2luZF9pbmZvICgmZ2xvYmFsX29wdGlvbnMpID09IFVJX1NKTEoJXAorICA/IDc1ICogVU5JVFNfUEVSX1dPUkQJCQkJCQkJXAorICA6IDggKiAxMDI0KQorI2VuZGlmCisKKy8qIE1pbmltdW0gYW1vdW50IG9mIHN0YWNrIHJlcXVpcmVkIHRvIHJlY292ZXIgZnJvbSBhbiBhbnRpY2lwYXRlZCBzdGFjaworICAgb3ZlcmZsb3cgZGV0ZWN0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgY29udmV5cyBhbiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50CisgICBvZiBzdGFjayByZXF1aXJlZCB0byBwcm9wYWdhdGUgYW4gZXhjZXB0aW9uLiAgKi8KKyNpZm5kZWYgU1RBQ0tfQ0hFQ0tfUFJPVEVDVAorI2RlZmluZSBTVEFDS19DSEVDS19QUk9URUNUCQkJCQkJXAorICh0YXJnZXRtX2NvbW1vbi5leGNlcHRfdW53aW5kX2luZm8gKCZnbG9iYWxfb3B0aW9ucykgPT0gVUlfU0pMSglcCisgID8gNzUgKiBVTklUU19QRVJfV09SRAkJCQkJCQlcCisgIDogMTIgKiAxMDI0KQorI2VuZGlmCisKKy8qIE1ha2UgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSBiZSB0aGUgbGFyZ2VzdCB3ZSBjYW4gYW5kIHN0aWxsIG9ubHkgbmVlZAorICAgb25lIHByb2JlIHBlciBmdW5jdGlvbi4gICovCisjaWZuZGVmIFNUQUNLX0NIRUNLX01BWF9GUkFNRV9TSVpFCisjZGVmaW5lIFNUQUNLX0NIRUNLX01BWF9GUkFNRV9TSVpFIFwKKyAgKCgxIDw8IFNUQUNLX0NIRUNLX1BST0JFX0lOVEVSVkFMX0VYUCkgLSBVTklUU19QRVJfV09SRCkKKyNlbmRpZgorCisvKiBUaGlzIGlzIGFyYml0cmFyeSwgYnV0IHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggZXZlcnl3aGVyZS4gICovCisjaWZuZGVmIFNUQUNLX0NIRUNLX0ZJWEVEX0ZSQU1FX1NJWkUKKyNkZWZpbmUgU1RBQ0tfQ0hFQ0tfRklYRURfRlJBTUVfU0laRSAoNCAqIFVOSVRTX1BFUl9XT1JEKQorI2VuZGlmCisKKy8qIFByb3ZpZGUgYSByZWFzb25hYmxlIGRlZmF1bHQgZm9yIHRoZSBtYXhpbXVtIHNpemUgb2YgYW4gb2JqZWN0IHRvCisgICBhbGxvY2F0ZSBpbiB0aGUgZml4ZWQgZnJhbWUuICBXZSBtYXkgbmVlZCB0byBiZSBhYmxlIHRvIG1ha2UgdGhpcworICAgY29udHJvbGxhYmxlIGJ5IHRoZSB1c2VyIGF0IHNvbWUgcG9pbnQuICAqLworI2lmbmRlZiBTVEFDS19DSEVDS19NQVhfVkFSX1NJWkUKKyNkZWZpbmUgU1RBQ0tfQ0hFQ0tfTUFYX1ZBUl9TSVpFIChTVEFDS19DSEVDS19NQVhfRlJBTUVfU0laRSAvIDEwMCkKKyNlbmRpZgorCisvKiBCeSBkZWZhdWx0LCB0aGUgQysrIGNvbXBpbGVyIHdpbGwgdXNlIGZ1bmN0aW9uIGFkZHJlc3NlcyBpbiB0aGUKKyAgIHZ0YWJsZSBlbnRyaWVzLiAgU2V0dGluZyB0aGlzIG5vbnplcm8gdGVsbHMgdGhlIGNvbXBpbGVyIHRvIHVzZQorICAgZnVuY3Rpb24gZGVzY3JpcHRvcnMgaW5zdGVhZC4gIFRoZSB2YWx1ZSBvZiB0aGlzIG1hY3JvIHNheXMgaG93CisgICBtYW55IHdvcmRzIHdpZGUgdGhlIGRlc2NyaXB0b3IgaXMgKG5vcm1hbGx5IDIpLiAgSXQgaXMgYXNzdW1lZAorICAgdGhhdCB0aGUgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgbWF5IGJlIHRyZWF0ZWQgYXMgYQorICAgcG9pbnRlciB0byBhIGZ1bmN0aW9uLiAgKi8KKyNpZm5kZWYgVEFSR0VUX1ZUQUJMRV9VU0VTX0RFU0NSSVBUT1JTCisjZGVmaW5lIFRBUkdFVF9WVEFCTEVfVVNFU19ERVNDUklQVE9SUyAwCisjZW5kaWYKKworI2lmbmRlZiBTV0lUQ0hBQkxFX1RBUkdFVAorI2RlZmluZSBTV0lUQ0hBQkxFX1RBUkdFVCAwCisjZW5kaWYKKworI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggICovCisKKyNlbmRpZiAgLyogISBHQ0NfREVGQVVMVFNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RpYWdub3N0aWMtY29yZS5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RpYWdub3N0aWMtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZWM4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZGlhZ25vc3RpYy1jb3JlLmgKQEAgLTAsMCArMSw4OSBAQAorLyogRGVjbGFyYXRpb25zIG9mIGNvcmUgZGlhZ25vc3RpYyBmdW5jdGlvbmFsaXR5IGZvciBjb2RlIHRoYXQgZG9lcworICAgbm90IG5lZWQgdG8gZGVhbCB3aXRoIGRpYWdub3N0aWMgY29udGV4dHMgb3IgZGlhZ25vc3RpYyBpbmZvCisgICBzdHJ1Y3R1cmVzLgorICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19ESUFHTk9TVElDX0NPUkVfSAorI2RlZmluZSBHQ0NfRElBR05PU1RJQ19DT1JFX0gKKworI2luY2x1ZGUgImlucHV0LmgiCisjaW5jbHVkZSAiYnZlcnNpb24uaCIKKworLyogQ29uc3RhbnRzIHVzZWQgdG8gZGlzY3JpbWluYXRlIGRpYWdub3N0aWNzLiAgKi8KK3R5cGVkZWYgZW51bQoreworI2RlZmluZSBERUZJTkVfRElBR05PU1RJQ19LSU5EKEssIG1zZ2lkKSBLLAorI2luY2x1ZGUgImRpYWdub3N0aWMuZGVmIgorI3VuZGVmIERFRklORV9ESUFHTk9TVElDX0tJTkQKKyAgREtfTEFTVF9ESUFHTk9TVElDX0tJTkQsCisgIC8qIFRoaXMgaXMgdXNlZCBmb3IgdGFnZ2luZyBwcmFnbWEgcG9wcyBpbiB0aGUgZGlhZ25vc3RpYworICAgICBjbGFzc2lmaWNhdGlvbiBoaXN0b3J5IGNoYWluLiAgKi8KKyAgREtfUE9QCit9IGRpYWdub3N0aWNfdDsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2duYW1lOworCitleHRlcm4gY29uc3QgY2hhciAqdHJpbV9maWxlbmFtZSAoY29uc3QgY2hhciAqKTsKKworLyogSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRlZmluZWQgYSBmcm9udC1lbmQtc3BlY2lmaWMgZGlhZ25vc3RpY3MKKyAgIHN0eWxlLCB1c2UgdGhlIGdlbmVyaWMgb25lLiAgKi8KKyNpZm5kZWYgR0NDX0RJQUdfU1RZTEUKKyNkZWZpbmUgR0NDX0RJQUdfU1RZTEUgX19nY2NfdGRpYWdfXworI2VuZGlmCisvKiBOb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3VpdGFibGUgZm9yIEFUVFJJQlVURV9QUklOVEYsIGJlY2F1c2UKKyAgIGVhY2ggbGFuZ3VhZ2UgZnJvbnQgZW5kIGNhbiBleHRlbmQgdGhlbSB3aXRoIGl0cyBvd24gc2V0IG9mIGZvcm1hdAorICAgc3BlY2lmaWVycy4gIFdlIG11c3QgdXNlIGN1c3RvbSBmb3JtYXQgY2hlY2tzLiAgKi8KKyNpZiAoRU5BQkxFX0NIRUNLSU5HICYmIEdDQ19WRVJTSU9OID49IDQwMDEpIHx8IEdDQ19WRVJTSU9OID09IEJVSUxESU5HX0dDQ19WRVJTSU9OCisjZGVmaW5lIEFUVFJJQlVURV9HQ0NfRElBRyhtLCBuKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoR0NDX0RJQUdfU1RZTEUsIG0sIG4pKSkgQVRUUklCVVRFX05PTk5VTEwobSkKKyNlbHNlCisjZGVmaW5lIEFUVFJJQlVURV9HQ0NfRElBRyhtLCBuKSBBVFRSSUJVVEVfTk9OTlVMTChtKQorI2VuZGlmCitleHRlcm4gdm9pZCBpbnRlcm5hbF9lcnJvciAoY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygxLDIpCisgICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKKy8qIFBhc3Mgb25lIG9mIHRoZSBPUFRfVyogZnJvbSBvcHRpb25zLmggYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gICovCitleHRlcm4gYm9vbCB3YXJuaW5nIChpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfR0NDX0RJQUcoMiwzKTsKK2V4dGVybiBib29sIHdhcm5pbmdfYXQgKGxvY2F0aW9uX3QsIGludCwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgQVRUUklCVVRFX0dDQ19ESUFHKDMsNCk7CitleHRlcm4gdm9pZCBlcnJvciAoY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygxLDIpOworZXh0ZXJuIHZvaWQgZXJyb3JfbiAobG9jYXRpb25fdCwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgIEFUVFJJQlVURV9HQ0NfRElBRygzLDUpIEFUVFJJQlVURV9HQ0NfRElBRyg0LDUpOworZXh0ZXJuIHZvaWQgZXJyb3JfYXQgKGxvY2F0aW9uX3QsIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfR0NDX0RJQUcoMiwzKTsKK2V4dGVybiB2b2lkIGZhdGFsX2Vycm9yIChjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDEsMikKKyAgICAgQVRUUklCVVRFX05PUkVUVVJOOworLyogUGFzcyBvbmUgb2YgdGhlIE9QVF9XKiBmcm9tIG9wdGlvbnMuaCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4gICovCitleHRlcm4gYm9vbCBwZWR3YXJuIChsb2NhdGlvbl90LCBpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgICBBVFRSSUJVVEVfR0NDX0RJQUcoMyw0KTsKK2V4dGVybiBib29sIHBlcm1lcnJvciAobG9jYXRpb25fdCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygyLDMpOworZXh0ZXJuIHZvaWQgc29ycnkgKGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfR0NDX0RJQUcoMSwyKTsKK2V4dGVybiB2b2lkIGluZm9ybSAobG9jYXRpb25fdCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9HQ0NfRElBRygyLDMpOworZXh0ZXJuIHZvaWQgaW5mb3JtX24gKGxvY2F0aW9uX3QsIGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICBBVFRSSUJVVEVfR0NDX0RJQUcoMyw1KSBBVFRSSUJVVEVfR0NDX0RJQUcoNCw1KTsKK2V4dGVybiB2b2lkIHZlcmJhdGltIChjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDEsMik7CitleHRlcm4gYm9vbCBlbWl0X2RpYWdub3N0aWMgKGRpYWdub3N0aWNfdCwgbG9jYXRpb25fdCwgaW50LAorCQkJICAgICBjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDQsNSk7CitleHRlcm4gYm9vbCBzZWVuX2Vycm9yICh2b2lkKTsKKworI2lmZGVmIEJVRlNJWgorICAvKiBOLkIuIFVubGlrZSBhbGwgdGhlIG90aGVycywgZm5vdGljZSBpcyBqdXN0IGdldHRleHQrZnByaW50ZiwgYW5kCisgICAgIHRoZXJlZm9yZSBpdCBjYW4gaGF2ZSBBVFRSSUJVVEVfUFJJTlRGLiAgKi8KK2V4dGVybiB2b2lkIGZub3RpY2UJCQkoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgQVRUUklCVVRFX1BSSU5URl8yOworI2VuZGlmCisKKyNlbmRpZiAvKiAhIEdDQ19ESUFHTk9TVElDX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RpYWdub3N0aWMuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RpYWdub3N0aWMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTc5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZGlhZ25vc3RpYy5kZWYKQEAgLTAsMCArMSw0NSBAQAorLyogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBES19VTlNQRUNJRklFRCBtdXN0IGJlIGZpcnN0IHNvIGl0IGhhcyBhIHZhbHVlIG9mIHplcm8uICBXZSBuZXZlcgorICAgYXNzaWduIHRoaXMga2luZCB0byBhbiBhY3R1YWwgZGlhZ25vc3RpYywgd2Ugb25seSB1c2UgdGhpcyBpbgorICAgdmFyaWFibGVzIHRoYXQgY2FuIGhvbGQgYSBraW5kLCB0byBtZWFuIHRoZXkgaGF2ZSB5ZXQgdG8gaGF2ZSBhCisgICBraW5kIHNwZWNpZmllZC4gIEkuZS4gdGhleSdyZSB1bmluaXRpYWxpemVkLiAgV2l0aGluIHRoZSBkaWFnbm9zdGljCisgICBtYWNoaW5lcnksIHRoaXMga2luZCBhbHNvIG1lYW5zICJkb24ndCBjaGFuZ2UgdGhlIGV4aXN0aW5nIGtpbmQiLAorICAgbWVhbmluZyAibm8gY2hhbmdlIGlzIHNwZWNpZmllZCIuICAqLworREVGSU5FX0RJQUdOT1NUSUNfS0lORCAoREtfVU5TUEVDSUZJRUQsICIiKQorCisvKiBJZiBhIGRpYWdub3N0aWMgaXMgc2V0IHRvIERLX0lHTk9SRUQsIGl0IHdvbid0IGdldCByZXBvcnRlZCBhdCBhbGwuCisgICBUaGlzIGlzIHVzZWQgYnkgdGhlIGRpYWdub3N0aWMgbWFjaGluZXJ5IHdoZW4gaXQgd2FudHMgdG8gZGlzYWJsZSBhCisgICBkaWFnbm9zdGljIHdpdGhvdXQgZGlzYWJsaW5nIHRoZSBvcHRpb24gd2hpY2ggY2F1c2VzIGl0LiAgKi8KK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX0lHTk9SRUQsICIiKQorCisvKiBUaGUgcmVtYWluZGVyIGFyZSByZWFsIGRpYWdub3N0aWMgdHlwZXMuICAqLworREVGSU5FX0RJQUdOT1NUSUNfS0lORCAoREtfRkFUQUwsICJmYXRhbCBlcnJvcjogIikKK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX0lDRSwgImludGVybmFsIGNvbXBpbGVyIGVycm9yOiAiKQorREVGSU5FX0RJQUdOT1NUSUNfS0lORCAoREtfRVJST1IsICJlcnJvcjogIikKK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX1NPUlJZLCAic29ycnksIHVuaW1wbGVtZW50ZWQ6ICIpCitERUZJTkVfRElBR05PU1RJQ19LSU5EIChES19XQVJOSU5HLCAid2FybmluZzogIikKK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX0FOQUNIUk9OSVNNLCAiYW5hY2hyb25pc206ICIpCitERUZJTkVfRElBR05PU1RJQ19LSU5EIChES19OT1RFLCAibm90ZTogIikKK0RFRklORV9ESUFHTk9TVElDX0tJTkQgKERLX0RFQlVHLCAiZGVidWc6ICIpCisvKiBUaGVzZSB0d28gd291bGQgYmUgcmUtY2xhc3NpZmllZCBhcyBES19XQVJOSU5HIG9yIERLX0VSUk9SLCBzbyB0aGUKK3ByZWZpeCBkb2VzIG5vdCBtYXR0ZXIuICAqLworREVGSU5FX0RJQUdOT1NUSUNfS0lORCAoREtfUEVEV0FSTiwgInBlZHdhcm46ICIpCitERUZJTkVfRElBR05PU1RJQ19LSU5EIChES19QRVJNRVJST1IsICJwZXJtZXJyb3I6ICIpCisKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9kaWFnbm9zdGljLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZGlhZ25vc3RpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZmFlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZGlhZ25vc3RpYy5oCkBAIC0wLDAgKzEsMjk2IEBACisvKiBWYXJpb3VzIGRlY2xhcmF0aW9ucyBmb3IgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGlhZ25vc3RpY3Mgc3Vicm91dGluZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPGdkckBjb2Rlc291cmNlcnkuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfRElBR05PU1RJQ19ICisjZGVmaW5lIEdDQ19ESUFHTk9TVElDX0gKKworI2luY2x1ZGUgInByZXR0eS1wcmludC5oIgorI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgorCisvKiBBIGRpYWdub3N0aWMgaXMgZGVzY3JpYmVkIGJ5IHRoZSBNRVNTQUdFIHRvIHNlbmQsIHRoZSBGSUxFIGFuZCBMSU5FIG9mCisgICBpdHMgY29udGV4dCBhbmQgaXRzIEtJTkQgKGljZSwgZXJyb3IsIHdhcm5pbmcsIG5vdGUsIC4uLikgIFNlZSBjb21wbGV0ZQorICAgbGlzdCBpbiBkaWFnbm9zdGljLmRlZi4gICovCit0eXBlZGVmIHN0cnVjdCBkaWFnbm9zdGljX2luZm8KK3sKKyAgdGV4dF9pbmZvIG1lc3NhZ2U7CisgIGxvY2F0aW9uX3QgbG9jYXRpb247CisgIHVuc2lnbmVkIGludCBvdmVycmlkZV9jb2x1bW47CisgIC8qIEF1eGlsaWFyeSBkYXRhIGZvciBjbGllbnQuICAqLworICB2b2lkICp4X2RhdGE7CisgIC8qIFRoZSBraW5kIG9mIGRpYWdub3N0aWMgaXQgaXMgYWJvdXQuICAqLworICBkaWFnbm9zdGljX3Qga2luZDsKKyAgLyogV2hpY2ggT1BUXyogZGlyZWN0bHkgY29udHJvbHMgdGhpcyBkaWFnbm9zdGljLiAgKi8KKyAgaW50IG9wdGlvbl9pbmRleDsKK30gZGlhZ25vc3RpY19pbmZvOworCisvKiBFYWNoIHRpbWUgYSBkaWFnbm9zdGljJ3MgY2xhc3NpZmljYXRpb24gaXMgY2hhbmdlZCB3aXRoIGEgcHJhZ21hLAorICAgd2UgcmVjb3JkIHRoZSBjaGFuZ2UgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2hhbmdlIGluIGFuIGFycmF5IG9mCisgICB0aGVzZSBzdHJ1Y3RzLiAgKi8KK3R5cGVkZWYgc3RydWN0IGRpYWdub3N0aWNfY2xhc3NpZmljYXRpb25fY2hhbmdlX3QKK3sKKyAgbG9jYXRpb25fdCBsb2NhdGlvbjsKKyAgaW50IG9wdGlvbjsKKyAgZGlhZ25vc3RpY190IGtpbmQ7Cit9IGRpYWdub3N0aWNfY2xhc3NpZmljYXRpb25fY2hhbmdlX3Q7CisKKy8qICBGb3J3YXJkIGRlY2xhcmF0aW9ucy4gICovCit0eXBlZGVmIHZvaWQgKCpkaWFnbm9zdGljX3N0YXJ0ZXJfZm4pIChkaWFnbm9zdGljX2NvbnRleHQgKiwKKwkJCQkgICAgICAgZGlhZ25vc3RpY19pbmZvICopOwordHlwZWRlZiBkaWFnbm9zdGljX3N0YXJ0ZXJfZm4gZGlhZ25vc3RpY19maW5hbGl6ZXJfZm47CisKKy8qIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgYnVuZGxlcyBhbHRvZ2V0aGVyIGFueSBpbmZvcm1hdGlvbiByZWxldmFudCB0bworICAgdGhlIGNvbnRleHQgb2YgYSBkaWFnbm9zdGljIG1lc3NhZ2UuICAqLworc3RydWN0IGRpYWdub3N0aWNfY29udGV4dAoreworICAvKiBXaGVyZSBtb3N0IG9mIHRoZSBkaWFnbm9zdGljIGZvcm1hdHRpbmcgd29yayBpcyBkb25lLiAgKi8KKyAgcHJldHR5X3ByaW50ZXIgKnByaW50ZXI7CisKKyAgLyogVGhlIG51bWJlciBvZiB0aW1lcyB3ZSBoYXZlIGlzc3VlZCBkaWFnbm9zdGljcy4gICovCisgIGludCBkaWFnbm9zdGljX2NvdW50W0RLX0xBU1RfRElBR05PU1RJQ19LSU5EXTsKKworICAvKiBUcnVlIGlmIHdlIHNob3VsZCBkaXNwbGF5IHRoZSAid2FybmluZ3MgYXJlIGJlaW5nIHRyZWFkIGFzIGVycm9yIgorICAgICBtZXNzYWdlLCB1c3VhbGx5IGRpc3BsYXllZCBvbmNlIHBlciBjb21waWxlciBydW4uICAqLworICBib29sIHNvbWVfd2FybmluZ3NfYXJlX2Vycm9yczsKKworICAvKiBUcnVlIGlmIGl0IGhhcyBiZWVuIHJlcXVlc3RlZCB0aGF0IHdhcm5pbmdzIGJlIHRyZWF0ZWQgYXMgZXJyb3JzLiAgKi8KKyAgYm9vbCB3YXJuaW5nX2FzX2Vycm9yX3JlcXVlc3RlZDsKKworICAvKiBUaGUgbnVtYmVyIG9mIG9wdGlvbiBpbmRleGVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB3YXJuaW5nKCkgZXQKKyAgICAgYWwuICAqLworICBpbnQgbl9vcHRzOworCisgIC8qIEZvciBlYWNoIG9wdGlvbiBpbmRleCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gd2FybmluZygpIGV0IGFsCisgICAgIChPUFRfKiBmcm9tIG9wdGlvbnMuaCB3aGVuIHVzaW5nIHRoaXMgY29kZSB3aXRoIHRoZSBjb3JlIEdDQworICAgICBvcHRpb25zKSwgdGhpcyBhcnJheSBtYXkgY29udGFpbiBhIG5ldyBraW5kIHRoYXQgdGhlIGRpYWdub3N0aWMKKyAgICAgc2hvdWxkIGJlIGNoYW5nZWQgdG8gYmVmb3JlIHJlcG9ydGluZywgb3IgREtfVU5TUEVDSUZJRUQgdG8gbGVhdmUKKyAgICAgaXQgYXMgdGhlIHJlcG9ydGVkIGtpbmQsIG9yIERLX0lHTk9SRUQgdG8gbm90IHJlcG9ydCBpdCBhdAorICAgICBhbGwuICAqLworICBkaWFnbm9zdGljX3QgKmNsYXNzaWZ5X2RpYWdub3N0aWM7CisKKyAgLyogSGlzdG9yeSBvZiBhbGwgY2hhbmdlcyB0byB0aGUgY2xhc3NpZmljYXRpb25zIGFib3ZlLiAgVGhpcyBsaXN0CisgICAgIGlzIHN0b3JlZCBpbiBsb2NhdGlvbi1vcmRlciwgc28gd2UgY2FuIHNlYXJjaCBpdCwgZWl0aGVyCisgICAgIGJpbmFyeS13aXNlIG9yIGVuZC10by1mcm9udCwgdG8gZmluZCB0aGUgbW9zdCByZWNlbnQKKyAgICAgY2xhc3NpZmljYXRpb24gZm9yIGEgZ2l2ZW4gZGlhZ25vc3RpYywgZ2l2ZW4gdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgICBkaWFnbm9zdGljLiAgKi8KKyAgZGlhZ25vc3RpY19jbGFzc2lmaWNhdGlvbl9jaGFuZ2VfdCAqY2xhc3NpZmljYXRpb25faGlzdG9yeTsKKworICAvKiBUaGUgc2l6ZSBvZiB0aGUgYWJvdmUgYXJyYXkuICAqLworICBpbnQgbl9jbGFzc2lmaWNhdGlvbl9oaXN0b3J5OworCisgIC8qIEZvciBwcmFnbWEgcHVzaC9wb3AuICAqLworICBpbnQgKnB1c2hfbGlzdDsKKyAgaW50IG5fcHVzaDsKKworICAvKiBUcnVlIGlmIHdlIHNob3VsZCBwcmludCB0aGUgc291cmNlIGxpbmUgd2l0aCBhIGNhcmV0IGluZGljYXRpbmcKKyAgICAgdGhlIGxvY2F0aW9uLiAgKi8KKyAgYm9vbCBzaG93X2NhcmV0OworCisgIC8qIE1heGltdW0gd2lkdGggb2YgdGhlIHNvdXJjZSBsaW5lIHByaW50ZWQuICAqLworICBpbnQgY2FyZXRfbWF4X3dpZHRoOworCisgIC8qIFRydWUgaWYgd2Ugc2hvdWxkIHByaW50IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIHdoaWNoIGNvbnRyb2xzCisgICAgIGVhY2ggZGlhZ25vc3RpYywgaWYga25vd24uICAqLworICBib29sIHNob3dfb3B0aW9uX3JlcXVlc3RlZDsKKworICAvKiBUcnVlIGlmIHdlIHNob3VsZCByYWlzZSBhIFNJR0FCUlQgb24gZXJyb3JzLiAgKi8KKyAgYm9vbCBhYm9ydF9vbl9lcnJvcjsKKworICAvKiBUcnVlIGlmIHdlIHNob3VsZCBzaG93IHRoZSBjb2x1bW4gbnVtYmVyIG9uIGRpYWdub3N0aWNzLiAgKi8KKyAgYm9vbCBzaG93X2NvbHVtbjsKKworICAvKiBUcnVlIGlmIHBlZHdhcm5zIGFyZSBlcnJvcnMuICAqLworICBib29sIHBlZGFudGljX2Vycm9yczsKKworICAvKiBUcnVlIGlmIHBlcm1lcnJvcnMgYXJlIHdhcm5pbmdzLiAgKi8KKyAgYm9vbCBwZXJtaXNzaXZlOworCisgIC8qIFRoZSBpbmRleCBvZiB0aGUgb3B0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHR1cm5pbmcgcGVybWVycm9ycyBpbnRvCisgICAgIHdhcm5pbmdzLiAgKi8KKyAgaW50IG9wdF9wZXJtaXNzaXZlOworCisgIC8qIFRydWUgaWYgZXJyb3JzIGFyZSBmYXRhbC4gICovCisgIGJvb2wgZmF0YWxfZXJyb3JzOworCisgIC8qIFRydWUgaWYgYWxsIHdhcm5pbmdzIHNob3VsZCBiZSBkaXNhYmxlZC4gICovCisgIGJvb2wgZGNfaW5oaWJpdF93YXJuaW5nczsKKworICAvKiBUcnVlIGlmIHdhcm5pbmdzIHNob3VsZCBiZSBnaXZlbiBpbiBzeXN0ZW0gaGVhZGVycy4gICovCisgIGJvb2wgZGNfd2Fybl9zeXN0ZW1faGVhZGVyczsKKworICAvKiBNYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gcmVwb3J0LiAgKi8KKyAgdW5zaWduZWQgaW50IG1heF9lcnJvcnM7CisKKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGFueSBtZXNzYWdlIGlzIHByaW50ZWQgb3V0LiAgSXQgaXMKKyAgICAgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyBtZXNzYWdlIHByZWZpeCBhbmQgc3VjaC4gIEZvciBleGFtcGxlLCBpdAorICAgICBtaWdodCBzYXk6CisgICAgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSAiL3Vzci9sb2NhbC9pbmNsdWRlL2N1cnNlcy5oOjU6CisgICAgICAgICAgICAgICAgICAgICAgZnJvbSAiL2hvbWUvZ2RyL3NyYy9uaWZ0eV9wcmludGVyLmg6NTY6CisgICAgICAgICAgICAgICAgICAgICAgLi4uCisgICovCisgIGRpYWdub3N0aWNfc3RhcnRlcl9mbiBiZWdpbl9kaWFnbm9zdGljOworCisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2UgaXMgcHJpbnRlZC4gICovCisgIGRpYWdub3N0aWNfZmluYWxpemVyX2ZuIGVuZF9kaWFnbm9zdGljOworCisgIC8qIENsaWVudCBob29rIHRvIHJlcG9ydCBhbiBpbnRlcm5hbCBlcnJvci4gICovCisgIHZvaWQgKCppbnRlcm5hbF9lcnJvcikgKGRpYWdub3N0aWNfY29udGV4dCAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QgKik7CisKKyAgLyogQ2xpZW50IGhvb2sgdG8gc2F5IHdoZXRoZXIgdGhlIG9wdGlvbiBjb250cm9sbGluZyBhIGRpYWdub3N0aWMgaXMKKyAgICAgZW5hYmxlZC4gIFJldHVybnMgbm9uemVybyBpZiBlbmFibGVkLCB6ZXJvIGlmIGRpc2FibGVkLiAgKi8KKyAgaW50ICgqb3B0aW9uX2VuYWJsZWQpIChpbnQsIHZvaWQgKik7CisKKyAgLyogQ2xpZW50IGluZm9ybWF0aW9uIHRvIHBhc3MgYXMgc2Vjb25kIGFyZ3VtZW50IHRvCisgICAgIG9wdGlvbl9lbmFibGVkLiAgKi8KKyAgdm9pZCAqb3B0aW9uX3N0YXRlOworCisgIC8qIENsaWVudCBob29rIHRvIHJldHVybiB0aGUgbmFtZSBvZiBhbiBvcHRpb24gdGhhdCBjb250cm9scyBhCisgICAgIGRpYWdub3N0aWMuICBSZXR1cm5zIG1hbGxvY2VkIG1lbW9yeS4gIFRoZSBmaXJzdCBkaWFnbm9zdGljX3QKKyAgICAgYXJndW1lbnQgaXMgdGhlIGtpbmQgb2YgZGlhZ25vc3RpYyBiZWZvcmUgYW55IHJlY2xhc3NpZmljYXRpb24KKyAgICAgKG9mIHdhcm5pbmdzIGFzIGVycm9ycywgZXRjLik7IHRoZSBzZWNvbmQgaXMgdGhlIGtpbmQgYWZ0ZXIgYW55CisgICAgIHJlY2xhc3NpZmljYXRpb24uICBNYXkgcmV0dXJuIE5VTEwgaWYgbm8gbmFtZSBpcyB0byBiZSBwcmludGVkLgorICAgICBNYXkgYmUgcGFzc2VkIDAgYXMgd2VsbCBhcyB0aGUgaW5kZXggb2YgYSBwYXJ0aWN1bGFyIG9wdGlvbi4gICovCisgIGNoYXIgKigqb3B0aW9uX25hbWUpIChkaWFnbm9zdGljX2NvbnRleHQgKiwgaW50LCBkaWFnbm9zdGljX3QsIGRpYWdub3N0aWNfdCk7CisKKyAgLyogQXV4aWxpYXJ5IGRhdGEgZm9yIGNsaWVudC4gICovCisgIHZvaWQgKnhfZGF0YTsKKworICAvKiBVc2VkIHRvIGRldGVjdCB0aGF0IHRoZSBsYXN0IGNhcmV0IHdhcyBwcmludGVkIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiAgKi8KKyAgbG9jYXRpb25fdCBsYXN0X2xvY2F0aW9uOworCisgIC8qIFVzZWQgdG8gZGV0ZWN0IHdoZW4gdGhlIGlucHV0IGZpbGUgc3RhY2sgaGFzIGNoYW5nZWQgc2luY2UgbGFzdAorICAgICBkZXNjcmliZWQuICAqLworICBjb25zdCBzdHJ1Y3QgbGluZV9tYXAgKmxhc3RfbW9kdWxlOworCisgIGludCBsb2NrOworCisgIGJvb2wgaW5oaWJpdF9ub3Rlc19wOworfTsKKworc3RhdGljIGlubGluZSB2b2lkCitkaWFnbm9zdGljX2luaGliaXRfbm90ZXMgKGRpYWdub3N0aWNfY29udGV4dCAqIGNvbnRleHQpCit7CisgIGNvbnRleHQtPmluaGliaXRfbm90ZXNfcCA9IHRydWU7Cit9CisKKworLyogQ2xpZW50IHN1cHBsaWVkIGZ1bmN0aW9uIHRvIGFubm91bmNlIGEgZGlhZ25vc3RpYy4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfc3RhcnRlcihEQykgKERDKS0+YmVnaW5fZGlhZ25vc3RpYworCisvKiBDbGllbnQgc3VwcGxpZWQgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIGEgZGlhZ25vc3RpYyBtZXNzYWdlIGlzCisgICBkaXNwbGF5ZWQuICAqLworI2RlZmluZSBkaWFnbm9zdGljX2ZpbmFsaXplcihEQykgKERDKS0+ZW5kX2RpYWdub3N0aWMKKworLyogRXh0ZW5zaW9uIGhvb2tzIGZvciBjbGllbnQuICAqLworI2RlZmluZSBkaWFnbm9zdGljX2NvbnRleHRfYXV4aWxpYXJ5X2RhdGEoREMpIChEQyktPnhfZGF0YQorI2RlZmluZSBkaWFnbm9zdGljX2luZm9fYXV4aWxpYXJ5X2RhdGEoREkpIChESSktPnhfZGF0YQorCisvKiBTYW1lIGFzIHBwX2Zvcm1hdF9kZWNvZGVyLiAgV29ya3Mgb24gJ2RpYWdub3N0aWNfY29udGV4dCAqJy4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfZm9ybWF0X2RlY29kZXIoREMpICgoREMpLT5wcmludGVyLT5mb3JtYXRfZGVjb2RlcikKKworLyogU2FtZSBhcyBvdXRwdXRfcHJlZml4aW5nX3J1bGUuICBXb3JrcyBvbiAnZGlhZ25vc3RpY19jb250ZXh0IConLiAgKi8KKyNkZWZpbmUgZGlhZ25vc3RpY19wcmVmaXhpbmdfcnVsZShEQykgKChEQyktPnByaW50ZXItPndyYXBwaW5nLnJ1bGUpCisKKy8qIE1heGltdW0gY2hhcmFjdGVycyBwZXIgbGluZSBpbiBhdXRvbWF0aWMgbGluZSB3cmFwcGluZyBtb2RlLgorICAgWmVybyBtZWFucyBkb24ndCB3cmFwIGxpbmVzLiAgKi8KKyNkZWZpbmUgZGlhZ25vc3RpY19saW5lX2N1dG9mZihEQykgKChEQyktPnByaW50ZXItPndyYXBwaW5nLmxpbmVfY3V0b2ZmKQorCisjZGVmaW5lIGRpYWdub3N0aWNfZmx1c2hfYnVmZmVyKERDKSBwcF9iYXNlX2ZsdXNoICgoREMpLT5wcmludGVyKQorCisvKiBUcnVlIGlmIHRoZSBsYXN0IG1vZHVsZSBvciBmaWxlIGluIHdoaWNoIGEgZGlhZ25vc3RpYyB3YXMgcmVwb3J0ZWQgaXMKKyAgIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IG9uZS4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfbGFzdF9tb2R1bGVfY2hhbmdlZChEQywgTUFQKQlcCisgICgoREMpLT5sYXN0X21vZHVsZSAhPSBNQVApCisKKy8qIFJlbWVtYmVyIHRoZSBjdXJyZW50IG1vZHVsZSBvciBmaWxlIGFzIGJlaW5nIHRoZSBsYXN0IG9uZSBpbiB3aGljaCB3ZQorICAgcmVwb3J0IGEgZGlhZ25vc3RpYy4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfc2V0X2xhc3RfbW9kdWxlKERDLCBNQVApCVwKKyAgKERDKS0+bGFzdF9tb2R1bGUgPSBNQVAKKworLyogUmFpc2UgU0lHQUJSVCBvbiBhbnkgZGlhZ25vc3RpYyBvZiBzZXZlcml0eSBES19FUlJPUiBvciBoaWdoZXIuICAqLworI2RlZmluZSBkaWFnbm9zdGljX2Fib3J0X29uX2Vycm9yKERDKSBcCisgIChEQyktPmFib3J0X29uX2Vycm9yID0gdHJ1ZQorCisvKiBUaGlzIGRpYWdub3N0aWNfY29udGV4dCBpcyB1c2VkIGJ5IGZyb250LWVuZHMgdGhhdCBkaXJlY3RseSBvdXRwdXQKKyAgIGRpYWdub3N0aWMgbWVzc2FnZXMgd2l0aG91dCBnb2luZyB0aHJvdWdoIGBlcnJvcicsIGB3YXJuaW5nJywKKyAgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucy4gICovCitleHRlcm4gZGlhZ25vc3RpY19jb250ZXh0ICpnbG9iYWxfZGM7CisKKy8qIFRoZSB0b3RhbCBjb3VudCBvZiBhIEtJTkQgb2YgZGlhZ25vc3RpY3MgZW1pdHRlZCBzbyBmYXIuICAqLworI2RlZmluZSBkaWFnbm9zdGljX2tpbmRfY291bnQoREMsIERLKSAoREMpLT5kaWFnbm9zdGljX2NvdW50WyhpbnQpIChESyldCisKKy8qIFRoZSBudW1iZXIgb2YgZXJyb3JzIHRoYXQgaGF2ZSBiZWVuIGlzc3VlZCBzbyBmYXIuICBJZGVhbGx5LCB0aGVzZQorICAgd291bGQgdGFrZSBhIGRpYWdub3N0aWNfY29udGV4dCBhcyBhbiBhcmd1bWVudC4gICovCisjZGVmaW5lIGVycm9yY291bnQgZGlhZ25vc3RpY19raW5kX2NvdW50IChnbG9iYWxfZGMsIERLX0VSUk9SKQorLyogU2ltaWxhcmx5LCBidXQgZm9yIHdhcm5pbmdzLiAgKi8KKyNkZWZpbmUgd2FybmluZ2NvdW50IGRpYWdub3N0aWNfa2luZF9jb3VudCAoZ2xvYmFsX2RjLCBES19XQVJOSU5HKQorLyogU2ltaWxhcmx5LCBidXQgZm9yIHNvcnJ5cy4gICovCisjZGVmaW5lIHNvcnJ5Y291bnQgZGlhZ25vc3RpY19raW5kX2NvdW50IChnbG9iYWxfZGMsIERLX1NPUlJZKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWYgd2FybmluZ3Mgc2hvdWxkIGJlIGVtaXR0ZWQuICAqLworI2RlZmluZSBkaWFnbm9zdGljX3JlcG9ydF93YXJuaW5nc19wKERDLCBMT0MpCQkJCVwKKyAgKCEoREMpLT5kY19pbmhpYml0X3dhcm5pbmdzCQkJCQkJXAorICAgJiYgIShpbl9zeXN0ZW1faGVhZGVyX2F0IChMT0MpICYmICEoREMpLT5kY193YXJuX3N5c3RlbV9oZWFkZXJzKSkKKworI2RlZmluZSByZXBvcnRfZGlhZ25vc3RpYyhEKSBkaWFnbm9zdGljX3JlcG9ydF9kaWFnbm9zdGljIChnbG9iYWxfZGMsIEQpCisKKy8qIE92ZXJyaWRlIHRoZSBjb2x1bW4gbnVtYmVyIHRvIGJlIHVzZWQgZm9yIHJlcG9ydGluZyBhCisgICBkaWFnbm9zdGljLiAgKi8KKyNkZWZpbmUgZGlhZ25vc3RpY19vdmVycmlkZV9jb2x1bW4oREksIENPTCkgKERJKS0+b3ZlcnJpZGVfY29sdW1uID0gKENPTCkKKworLyogT3ZlcnJpZGUgdGhlIG9wdGlvbiBpbmRleCB0byBiZSB1c2VkIGZvciByZXBvcnRpbmcgYQorICAgZGlhZ25vc3RpYy4gICovCisjZGVmaW5lIGRpYWdub3N0aWNfb3ZlcnJpZGVfb3B0aW9uX2luZGV4KERJLCBPUFRJRFgpIFwKKyAgICAoKERJKS0+b3B0aW9uX2luZGV4ID0gKE9QVElEWCkpCisKKy8qIERpYWdub3N0aWMgcmVsYXRlZCBmdW5jdGlvbnMuICAqLworZXh0ZXJuIHZvaWQgZGlhZ25vc3RpY19pbml0aWFsaXplIChkaWFnbm9zdGljX2NvbnRleHQgKiwgaW50KTsKK2V4dGVybiB2b2lkIGRpYWdub3N0aWNfZmluaXNoIChkaWFnbm9zdGljX2NvbnRleHQgKik7CitleHRlcm4gdm9pZCBkaWFnbm9zdGljX3JlcG9ydF9jdXJyZW50X21vZHVsZSAoZGlhZ25vc3RpY19jb250ZXh0ICosIGxvY2F0aW9uX3QpOworZXh0ZXJuIHZvaWQgZGlhZ25vc3RpY19zaG93X2xvY3VzIChkaWFnbm9zdGljX2NvbnRleHQgKiwgY29uc3QgZGlhZ25vc3RpY19pbmZvICopOworCisvKiBGb3JjZSBkaWFnbm9zdGljcyBjb250cm9sbGVkIGJ5IE9QVElEWCB0byBiZSBraW5kIEtJTkQuICAqLworZXh0ZXJuIGRpYWdub3N0aWNfdCBkaWFnbm9zdGljX2NsYXNzaWZ5X2RpYWdub3N0aWMgKGRpYWdub3N0aWNfY29udGV4dCAqLAorCQkJCQkJICAgIGludCAvKiBvcHRpZHggKi8sCisJCQkJCQkgICAgZGlhZ25vc3RpY190IC8qIGtpbmQgKi8sCisJCQkJCQkgICAgbG9jYXRpb25fdCk7CitleHRlcm4gdm9pZCBkaWFnbm9zdGljX3B1c2hfZGlhZ25vc3RpY3MgKGRpYWdub3N0aWNfY29udGV4dCAqLCBsb2NhdGlvbl90KTsKK2V4dGVybiB2b2lkIGRpYWdub3N0aWNfcG9wX2RpYWdub3N0aWNzIChkaWFnbm9zdGljX2NvbnRleHQgKiwgbG9jYXRpb25fdCk7CitleHRlcm4gYm9vbCBkaWFnbm9zdGljX3JlcG9ydF9kaWFnbm9zdGljIChkaWFnbm9zdGljX2NvbnRleHQgKiwKKwkJCQkJICBkaWFnbm9zdGljX2luZm8gKik7CisjaWZkZWYgQVRUUklCVVRFX0dDQ19ESUFHCitleHRlcm4gdm9pZCBkaWFnbm9zdGljX3NldF9pbmZvIChkaWFnbm9zdGljX2luZm8gKiwgY29uc3QgY2hhciAqLCB2YV9saXN0ICosCisJCQkJIGxvY2F0aW9uX3QsIGRpYWdub3N0aWNfdCkgQVRUUklCVVRFX0dDQ19ESUFHKDIsMCk7CitleHRlcm4gdm9pZCBkaWFnbm9zdGljX3NldF9pbmZvX3RyYW5zbGF0ZWQgKGRpYWdub3N0aWNfaW5mbyAqLCBjb25zdCBjaGFyICosCisJCQkJCSAgICB2YV9saXN0ICosIGxvY2F0aW9uX3QsCisJCQkJCSAgICBkaWFnbm9zdGljX3QpCisgICAgIEFUVFJJQlVURV9HQ0NfRElBRygyLDApOworZXh0ZXJuIHZvaWQgZGlhZ25vc3RpY19hcHBlbmRfbm90ZSAoZGlhZ25vc3RpY19jb250ZXh0ICosIGxvY2F0aW9uX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIC4uLikgQVRUUklCVVRFX0dDQ19ESUFHKDMsNCk7CisjZW5kaWYKK2V4dGVybiBjaGFyICpkaWFnbm9zdGljX2J1aWxkX3ByZWZpeCAoZGlhZ25vc3RpY19jb250ZXh0ICosIGNvbnN0IGRpYWdub3N0aWNfaW5mbyAqKTsKK3ZvaWQgZGVmYXVsdF9kaWFnbm9zdGljX3N0YXJ0ZXIgKGRpYWdub3N0aWNfY29udGV4dCAqLCBkaWFnbm9zdGljX2luZm8gKik7Cit2b2lkIGRlZmF1bHRfZGlhZ25vc3RpY19maW5hbGl6ZXIgKGRpYWdub3N0aWNfY29udGV4dCAqLCBkaWFnbm9zdGljX2luZm8gKik7Cit2b2lkIGRpYWdub3N0aWNfc2V0X2NhcmV0X21heF93aWR0aCAoZGlhZ25vc3RpY19jb250ZXh0ICpjb250ZXh0LCBpbnQgdmFsdWUpOworCisKKy8qIFB1cmUgdGV4dCBmb3JtYXR0aW5nIHN1cHBvcnQgZnVuY3Rpb25zLiAgKi8KK2V4dGVybiBjaGFyICpmaWxlX25hbWVfYXNfcHJlZml4IChjb25zdCBjaGFyICopOworCisjZW5kaWYgLyogISBHQ0NfRElBR05PU1RJQ19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZG91YmxlLWludC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RvdWJsZS1pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQyNWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2RvdWJsZS1pbnQuaApAQCAtMCwwICsxLDQ1NyBAQAorLyogT3BlcmF0aW9ucyB3aXRoIGxvbmcgaW50ZWdlcnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgRE9VQkxFX0lOVF9ICisjZGVmaW5lIERPVUJMRV9JTlRfSAorCisvKiBBIGxhcmdlIGludGVnZXIgaXMgY3VycmVudGx5IHJlcHJlc2VudGVkIGFzIGEgcGFpciBvZiBIT1NUX1dJREVfSU5Ucy4KKyAgIEl0IHRoZXJlZm9yZSByZXByZXNlbnRzIGEgbnVtYmVyIHdpdGggcHJlY2lzaW9uIG9mCisgICAyICogSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBiaXRzIChpdCBpcyBob3dldmVyIHBvc3NpYmxlIHRoYXQgdGhlCisgICBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB3aWxsIGNoYW5nZSwgaWYgbnVtYmVycyB3aXRoIGdyZWF0ZXIgcHJlY2lzaW9uCisgICBhcmUgbmVlZGVkLCBzbyB0aGUgdXNlcnMgc2hvdWxkIG5vdCByZWx5IG9uIGl0KS4gIFRoZSByZXByZXNlbnRhdGlvbiBkb2VzCisgICBub3QgY29udGFpbiBhbnkgaW5mb3JtYXRpb24gYWJvdXQgc2lnbmVkbmVzcyBvZiB0aGUgcmVwcmVzZW50ZWQgdmFsdWUsIHNvCisgICBpdCBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYm90aCBzaWduZWQgYW5kIHVuc2lnbmVkIG51bWJlcnMuICBGb3IKKyAgIG9wZXJhdGlvbnMgd2hlcmUgdGhlIHJlc3VsdHMgZGVwZW5kIG9uIHNpZ25lZG5lc3MgKGRpdmlzaW9uLCBjb21wYXJpc29ucyksCisgICBpdCBtdXN0IGJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LiAgRm9yIGVhY2ggc3VjaCBvcGVyYXRpb24sIHRoZXJlIGFyZSB0aHJlZQorICAgdmVyc2lvbnMgb2YgdGhlIGZ1bmN0aW9uIC0tIGRvdWJsZV9pbnRfb3AsIHRoYXQgdGFrZXMgYW4gZXh0cmEgVU5TIGFyZ3VtZW50CisgICBnaXZpbmcgdGhlIHNpZ25lZG5lc3Mgb2YgdGhlIHZhbHVlcywgYW5kIGRvdWJsZV9pbnRfc29wIGFuZCBkb3VibGVfaW50X3VvcAorICAgdGhhdCBzdGFuZCBmb3IgaXRzIHNwZWNpYWxpemF0aW9ucyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCB2YWx1ZXMuCisKKyAgIFlvdSBtYXkgYWxzbyByZXByZXNlbnQgd2l0aCBudW1iZXJzIGluIHNtYWxsZXIgcHJlY2lzaW9uIHVzaW5nIGRvdWJsZV9pbnQuCisgICBZb3UgaG93ZXZlciBuZWVkIHRvIHVzZSBkb3VibGVfaW50X2V4dCAodGhhdCBmaWxscyBpbiB0aGUgYml0cyBvZiB0aGUKKyAgIG51bWJlciBvdmVyIHRoZSBwcmVzY3JpYmVkIHByZWNpc2lvbiB3aXRoIHplcm9zIG9yIHdpdGggdGhlIHNpZ24gYml0KSBiZWZvcmUKKyAgIG9wZXJhdGlvbnMgdGhhdCBkbyBub3QgcGVyZm9ybSBhcml0aG1ldGljcyBtb2R1bG8gMl5wcmVjaXNpb24gKGNvbXBhcmlzb25zLAorICAgZGl2aXNpb24pLCBhbmQgcG9zc2libHkgYmVmb3JlIHN0b3JpbmcgdGhlIHJlc3VsdHMsIGlmIHlvdSB3YW50IHRvIGtlZXAKKyAgIHRoZW0gaW4gc29tZSBjYW5vbmljYWwgZm9ybSkuICBJbiBnZW5lcmFsLCB0aGUgc2lnbmVkbmVzcyBvZiBkb3VibGVfaW50X2V4dAorICAgc2hvdWxkIG1hdGNoIHRoZSBzaWduZWRuZXNzIG9mIHRoZSBvcGVyYXRpb24uCisKKyAgID8/PyBUaGUgY29tcG9uZW50cyBvZiBkb3VibGVfaW50IGRpZmZlciBpbiBzaWduZWRuZXNzIG1vc3RseSBmb3IKKyAgIGhpc3RvcmljYWwgcmVhc29ucyAodGhleSByZXBsYWNlIGFuIG9sZGVyIHN0cnVjdHVyZSB1c2VkIHRvIHJlcHJlc2VudAorICAgbnVtYmVycyB3aXRoIHByZWNpc2lvbiBoaWdoZXIgdGhhbiBIT1NUX1dJREVfSU5UKS4gIEl0IG1pZ2h0IGJlIGxlc3MKKyAgIGNvbmZ1c2luZyB0byBoYXZlIHRoZW0gYm90aCBzaWduZWQgb3IgYm90aCB1bnNpZ25lZC4gICovCisKK3N0cnVjdCBkb3VibGVfaW50Cit7CisgIC8qIE5vcm1hbGx5LCB3ZSB3b3VsZCBkZWZpbmUgY29uc3RydWN0b3JzIHRvIGNyZWF0ZSBpbnN0YW5jZXMuCisgICAgIFR3byB0aGluZ3MgcHJldmVudCB1cyBmcm9tIGRvaW5nIHNvLgorICAgICBGaXJzdCwgZGVmaW5pbmcgYSBjb25zdHJ1Y3RvciBtYWtlcyB0aGUgY2xhc3Mgbm9uLVBPRCBpbiBDKyswMywKKyAgICAgYW5kIHdlIGNlcnRhaW5seSB3YW50IGRvdWJsZV9pbnQgdG8gYmUgYSBQT0QuCisgICAgIFNlY29uZCwgdGhlIEdDQyBjb25kaW5nIGNvbnZlbnRpb25zIHByZWZlciBleHBsaWNpdCBjb252ZXJzaW9uLAorICAgICBhbmQgZXhwbGljaXQgY29udmVyc2lvbiBvcGVyYXRvcnMgYXJlIG5vdCBhdmFpbGFibGUgdW50aWwgQysrMTEuICAqLworCisgIHN0YXRpYyBkb3VibGVfaW50IGZyb21fdWh3aSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCBjc3QpOworICBzdGF0aWMgZG91YmxlX2ludCBmcm9tX3Nod2kgKEhPU1RfV0lERV9JTlQgY3N0KTsKKyAgc3RhdGljIGRvdWJsZV9pbnQgZnJvbV9wYWlyIChIT1NUX1dJREVfSU5UIGhpZ2gsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbG93KTsKKworICAvKiBDb25zdHJ1Y3QgZnJvbSBhIGZ1ZmZlciBvZiBsZW5ndGggTEVOLiAgQlVGRkVSIHdpbGwgYmUgcmVhZCBhY2NvcmRpbmcKKyAgICAgdG8gYnl0ZSBlbmRpYW5lc3MgYW5kIHdvcmQgZW5kaWFuZXNzLiAgKi8KKyAgc3RhdGljIGRvdWJsZV9pbnQgZnJvbV9idWZmZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbik7CisKKyAgLyogTm8gY29weSBhc3NpZ25tZW50IG9wZXJhdG9yIG9yIGRlc3RydWN0b3IgdG8ga2VlcCB0aGUgdHlwZSBhIFBPRC4gICovCisKKyAgLyogVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCB2YWx1ZS1jcmVhdGlvbiBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucy4gICovCisKKyAgc3RhdGljIGRvdWJsZV9pbnQgbWFzayAodW5zaWduZWQgcHJlYyk7CisgIHN0YXRpYyBkb3VibGVfaW50IG1heF92YWx1ZSAodW5zaWduZWQgaW50IHByZWMsIGJvb2wgdW5zKTsKKyAgc3RhdGljIGRvdWJsZV9pbnQgbWluX3ZhbHVlICh1bnNpZ25lZCBpbnQgcHJlYywgYm9vbCB1bnMpOworCisgIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBtdXRhdGluZyBvcGVyYXRpb25zLiAgKi8KKworICBkb3VibGVfaW50ICZvcGVyYXRvciArKyAoKTsgLy8gcHJlZml4CisgIGRvdWJsZV9pbnQgJm9wZXJhdG9yIC0tICgpOyAvLyBwcmVmaXgKKyAgZG91YmxlX2ludCAmb3BlcmF0b3IgKj0gKGRvdWJsZV9pbnQpOworICBkb3VibGVfaW50ICZvcGVyYXRvciArPSAoZG91YmxlX2ludCk7CisgIGRvdWJsZV9pbnQgJm9wZXJhdG9yIC09IChkb3VibGVfaW50KTsKKyAgZG91YmxlX2ludCAmb3BlcmF0b3IgJj0gKGRvdWJsZV9pbnQpOworICBkb3VibGVfaW50ICZvcGVyYXRvciBePSAoZG91YmxlX2ludCk7CisgIGRvdWJsZV9pbnQgJm9wZXJhdG9yIHw9IChkb3VibGVfaW50KTsKKworICAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbm9uLW11dGF0aW5nIG9wZXJhdGlvbnMuICAqLworCisgIC8qIENvbnZlcnNpb24gZnVuY3Rpb25zLiAgKi8KKworICBIT1NUX1dJREVfSU5UIHRvX3Nod2kgKCkgY29uc3Q7CisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdG9fdWh3aSAoKSBjb25zdDsKKworICAvKiBDb252ZXJzaW9uIHF1ZXJ5IGZ1bmN0aW9ucy4gICovCisKKyAgYm9vbCBmaXRzX3Vod2kgKCkgY29uc3Q7CisgIGJvb2wgZml0c19zaHdpICgpIGNvbnN0OworICBib29sIGZpdHNfaHdpIChib29sIHVucykgY29uc3Q7CisKKyAgLyogQXR0cmlidXRlIHF1ZXJ5IGZ1bmN0aW9ucy4gICovCisKKyAgaW50IHRyYWlsaW5nX3plcm9zICgpIGNvbnN0OworICBpbnQgcG9wY291bnQgKCkgY29uc3Q7CisKKyAgLyogQXJpdGhtZXRpYyBxdWVyeSBvcGVyYXRpb25zLiAgKi8KKworICBib29sIG11bHRpcGxlX29mIChkb3VibGVfaW50LCBib29sLCBkb3VibGVfaW50ICopIGNvbnN0OworCisgIC8qIEFyaXRobWV0aWMgb3BlcmF0aW9uIGZ1bmN0aW9ucy4gICovCisKKyAgLyogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIHBlcmZvcm0gYXJpdGhtZXRpY3MgbW9kdWxvIDJecHJlY2lzaW9uLCBzbyB5b3UKKyAgICAgZG8gbm90IG5lZWQgdG8gY2FsbCAuZXh0IGJldHdlZW4gdGhlbSwgZXZlbiBpZiB5b3UgYXJlIHJlcHJlc2VudGluZworICAgICBudW1iZXJzIHdpdGggcHJlY2lzaW9uIGxlc3MgdGhhbiBIT1NUX0JJVFNfUEVSX0RPVUJMRV9JTlQgYml0cy4gICovCisKKyAgZG91YmxlX2ludCBzZXRfYml0ICh1bnNpZ25lZCkgY29uc3Q7CisgIGRvdWJsZV9pbnQgbXVsX3dpdGhfc2lnbiAoZG91YmxlX2ludCwgYm9vbCB1bnNpZ25lZF9wLCBib29sICpvdmVyZmxvdykgY29uc3Q7CisgIGRvdWJsZV9pbnQgd2lkZV9tdWxfd2l0aF9zaWduIChkb3VibGVfaW50LCBib29sIHVuc2lnbmVkX3AsCisJCQkJIGRvdWJsZV9pbnQgKmhpZ2hlciwgYm9vbCAqb3ZlcmZsb3cpIGNvbnN0OworICBkb3VibGVfaW50IGFkZF93aXRoX3NpZ24gKGRvdWJsZV9pbnQsIGJvb2wgdW5zaWduZWRfcCwgYm9vbCAqb3ZlcmZsb3cpIGNvbnN0OworICBkb3VibGVfaW50IHN1Yl93aXRoX292ZXJmbG93IChkb3VibGVfaW50LCBib29sICpvdmVyZmxvdykgY29uc3Q7CisgIGRvdWJsZV9pbnQgbmVnX3dpdGhfb3ZlcmZsb3cgKGJvb2wgKm92ZXJmbG93KSBjb25zdDsKKworICBkb3VibGVfaW50IG9wZXJhdG9yICogKGRvdWJsZV9pbnQpIGNvbnN0OworICBkb3VibGVfaW50IG9wZXJhdG9yICsgKGRvdWJsZV9pbnQpIGNvbnN0OworICBkb3VibGVfaW50IG9wZXJhdG9yIC0gKGRvdWJsZV9pbnQpIGNvbnN0OworICBkb3VibGVfaW50IG9wZXJhdG9yIC0gKCkgY29uc3Q7CisgIGRvdWJsZV9pbnQgb3BlcmF0b3IgfiAoKSBjb25zdDsKKyAgZG91YmxlX2ludCBvcGVyYXRvciAmIChkb3VibGVfaW50KSBjb25zdDsKKyAgZG91YmxlX2ludCBvcGVyYXRvciB8IChkb3VibGVfaW50KSBjb25zdDsKKyAgZG91YmxlX2ludCBvcGVyYXRvciBeIChkb3VibGVfaW50KSBjb25zdDsKKyAgZG91YmxlX2ludCBhbmRfbm90IChkb3VibGVfaW50KSBjb25zdDsKKworICBkb3VibGVfaW50IGxzaGlmdCAoSE9TVF9XSURFX0lOVCBjb3VudCwgdW5zaWduZWQgaW50IHByZWMsIGJvb2wgYXJpdGgpIGNvbnN0OworICBkb3VibGVfaW50IHJzaGlmdCAoSE9TVF9XSURFX0lOVCBjb3VudCwgdW5zaWduZWQgaW50IHByZWMsIGJvb2wgYXJpdGgpIGNvbnN0OworICBkb3VibGVfaW50IGFsc2hpZnQgKEhPU1RfV0lERV9JTlQgY291bnQsIHVuc2lnbmVkIGludCBwcmVjKSBjb25zdDsKKyAgZG91YmxlX2ludCBhcnNoaWZ0IChIT1NUX1dJREVfSU5UIGNvdW50LCB1bnNpZ25lZCBpbnQgcHJlYykgY29uc3Q7CisgIGRvdWJsZV9pbnQgbGxzaGlmdCAoSE9TVF9XSURFX0lOVCBjb3VudCwgdW5zaWduZWQgaW50IHByZWMpIGNvbnN0OworICBkb3VibGVfaW50IGxyc2hpZnQgKEhPU1RfV0lERV9JTlQgY291bnQsIHVuc2lnbmVkIGludCBwcmVjKSBjb25zdDsKKyAgZG91YmxlX2ludCBscm90YXRlIChIT1NUX1dJREVfSU5UIGNvdW50LCB1bnNpZ25lZCBpbnQgcHJlYykgY29uc3Q7CisgIGRvdWJsZV9pbnQgcnJvdGF0ZSAoSE9TVF9XSURFX0lOVCBjb3VudCwgdW5zaWduZWQgaW50IHByZWMpIGNvbnN0OworCisgIC8qIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGRvdWJsZV9pbnQ6OmV4dCBpcyBjYWxsZWQgb24gdGhlIG9wZXJhbmRzCisgICAgIG9mIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucywgaWYgdGhlIHByZWNpc2lvbiBvZiB0aGUgbnVtYmVycworICAgICBpcyBsZXNzIHRoYW4gSE9TVF9CSVRTX1BFUl9ET1VCTEVfSU5UIGJpdHMuICAqLworCisgIGRvdWJsZV9pbnQgZGl2IChkb3VibGVfaW50LCBib29sLCB1bnNpZ25lZCkgY29uc3Q7CisgIGRvdWJsZV9pbnQgc2RpdiAoZG91YmxlX2ludCwgdW5zaWduZWQpIGNvbnN0OworICBkb3VibGVfaW50IHVkaXYgKGRvdWJsZV9pbnQsIHVuc2lnbmVkKSBjb25zdDsKKyAgZG91YmxlX2ludCBtb2QgKGRvdWJsZV9pbnQsIGJvb2wsIHVuc2lnbmVkKSBjb25zdDsKKyAgZG91YmxlX2ludCBzbW9kIChkb3VibGVfaW50LCB1bnNpZ25lZCkgY29uc3Q7CisgIGRvdWJsZV9pbnQgdW1vZCAoZG91YmxlX2ludCwgdW5zaWduZWQpIGNvbnN0OworICBkb3VibGVfaW50IGRpdm1vZF93aXRoX292ZXJmbG93IChkb3VibGVfaW50LCBib29sLCB1bnNpZ25lZCwKKwkJCQkgICBkb3VibGVfaW50ICosIGJvb2wgKikgY29uc3Q7CisgIGRvdWJsZV9pbnQgZGl2bW9kIChkb3VibGVfaW50LCBib29sLCB1bnNpZ25lZCwgZG91YmxlX2ludCAqKSBjb25zdDsKKyAgZG91YmxlX2ludCBzZGl2bW9kIChkb3VibGVfaW50LCB1bnNpZ25lZCwgZG91YmxlX2ludCAqKSBjb25zdDsKKyAgZG91YmxlX2ludCB1ZGl2bW9kIChkb3VibGVfaW50LCB1bnNpZ25lZCwgZG91YmxlX2ludCAqKSBjb25zdDsKKworICAvKiBQcmVjaXNpb24gY29udHJvbCBmdW5jdGlvbnMuICAqLworCisgIGRvdWJsZV9pbnQgZXh0ICh1bnNpZ25lZCBwcmVjLCBib29sIHVucykgY29uc3Q7CisgIGRvdWJsZV9pbnQgemV4dCAodW5zaWduZWQgcHJlYykgY29uc3Q7CisgIGRvdWJsZV9pbnQgc2V4dCAodW5zaWduZWQgcHJlYykgY29uc3Q7CisKKyAgLyogQ29tcGFyYXRpdmUgZnVuY3Rpb25zLiAgKi8KKworICBib29sIGlzX3plcm8gKCkgY29uc3Q7CisgIGJvb2wgaXNfb25lICgpIGNvbnN0OworICBib29sIGlzX21pbnVzX29uZSAoKSBjb25zdDsKKyAgYm9vbCBpc19uZWdhdGl2ZSAoKSBjb25zdDsKKworICBpbnQgY21wIChkb3VibGVfaW50IGIsIGJvb2wgdW5zKSBjb25zdDsKKyAgaW50IHVjbXAgKGRvdWJsZV9pbnQgYikgY29uc3Q7CisgIGludCBzY21wIChkb3VibGVfaW50IGIpIGNvbnN0OworCisgIGJvb2wgdWx0IChkb3VibGVfaW50IGIpIGNvbnN0OworICBib29sIHVsZSAoZG91YmxlX2ludCBiKSBjb25zdDsKKyAgYm9vbCB1Z3QgKGRvdWJsZV9pbnQgYikgY29uc3Q7CisgIGJvb2wgc2x0IChkb3VibGVfaW50IGIpIGNvbnN0OworICBib29sIHNsZSAoZG91YmxlX2ludCBiKSBjb25zdDsKKyAgYm9vbCBzZ3QgKGRvdWJsZV9pbnQgYikgY29uc3Q7CisKKyAgZG91YmxlX2ludCBtYXggKGRvdWJsZV9pbnQgYiwgYm9vbCB1bnMpOworICBkb3VibGVfaW50IHNtYXggKGRvdWJsZV9pbnQgYik7CisgIGRvdWJsZV9pbnQgdW1heCAoZG91YmxlX2ludCBiKTsKKworICBkb3VibGVfaW50IG1pbiAoZG91YmxlX2ludCBiLCBib29sIHVucyk7CisgIGRvdWJsZV9pbnQgc21pbiAoZG91YmxlX2ludCBiKTsKKyAgZG91YmxlX2ludCB1bWluIChkb3VibGVfaW50IGIpOworCisgIGJvb2wgb3BlcmF0b3IgPT0gKGRvdWJsZV9pbnQgY3N0MikgY29uc3Q7CisgIGJvb2wgb3BlcmF0b3IgIT0gKGRvdWJsZV9pbnQgY3N0MikgY29uc3Q7CisKKyAgLyogUGxlYXNlIG1pZ3JhdGUgYXdheSBmcm9tIHVzaW5nIHRoZXNlIG1lbWJlciB2YXJpYWJsZXMgcHVibGljYWxseS4gICovCisKKyAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBsb3c7CisgIEhPU1RfV0lERV9JTlQgaGlnaDsKKworfTsKKworI2RlZmluZSBIT1NUX0JJVFNfUEVSX0RPVUJMRV9JTlQgKDIgKiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UKQorCisvKiBDb25zdHJ1Y3RvcnMgYW5kIGNvbnZlcnNpb25zLiAgKi8KKworLyogQ29uc3RydWN0cyBkb3VibGVfaW50IGZyb20gaW50ZWdlciBDU1QuICBUaGUgYml0cyBvdmVyIHRoZSBwcmVjaXNpb24gb2YKKyAgIEhPU1RfV0lERV9JTlQgYXJlIGZpbGxlZCB3aXRoIHRoZSBzaWduIGJpdC4gICovCisKK2lubGluZSBkb3VibGVfaW50Citkb3VibGVfaW50Ojpmcm9tX3Nod2kgKEhPU1RfV0lERV9JTlQgY3N0KQoreworICBkb3VibGVfaW50IHI7CisgIHIubG93ID0gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIGNzdDsKKyAgci5oaWdoID0gY3N0IDwgMCA/IC0xIDogMDsKKyAgcmV0dXJuIHI7Cit9CisKKy8qIFNvbWUgdXNlZnVsIGNvbnN0YW50cy4gICovCisvKiBGSVhNRShjcm93bCk6IE1heWJlIHJlbW92ZSBhZnRlciBjb252ZXJ0aW5nIGNhbGxlcnM/CisgICBUaGUgcHJvYmxlbSBpcyB0aGF0IGEgbmFtZWQgY29uc3RhbnQgd291bGQgbm90IGJlIGFzIG9wdGltaXphYmxlLAorICAgd2hpbGUgdGhlIGZ1bmN0aW9uYWwgc3ludGF4IGlzIG1vcmUgdmVyYm9zZS4gICovCisKKyNkZWZpbmUgZG91YmxlX2ludF9taW51c19vbmUgKGRvdWJsZV9pbnQ6OmZyb21fc2h3aSAoLTEpKQorI2RlZmluZSBkb3VibGVfaW50X3plcm8gKGRvdWJsZV9pbnQ6OmZyb21fc2h3aSAoMCkpCisjZGVmaW5lIGRvdWJsZV9pbnRfb25lIChkb3VibGVfaW50Ojpmcm9tX3Nod2kgKDEpKQorI2RlZmluZSBkb3VibGVfaW50X3R3byAoZG91YmxlX2ludDo6ZnJvbV9zaHdpICgyKSkKKyNkZWZpbmUgZG91YmxlX2ludF90ZW4gKGRvdWJsZV9pbnQ6OmZyb21fc2h3aSAoMTApKQorCisvKiBDb25zdHJ1Y3RzIGRvdWJsZV9pbnQgZnJvbSB1bnNpZ25lZCBpbnRlZ2VyIENTVC4gIFRoZSBiaXRzIG92ZXIgdGhlCisgICBwcmVjaXNpb24gb2YgSE9TVF9XSURFX0lOVCBhcmUgZmlsbGVkIHdpdGggemVyb3MuICAqLworCitpbmxpbmUgZG91YmxlX2ludAorZG91YmxlX2ludDo6ZnJvbV91aHdpICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGNzdCkKK3sKKyAgZG91YmxlX2ludCByOworICByLmxvdyA9IGNzdDsKKyAgci5oaWdoID0gMDsKKyAgcmV0dXJuIHI7Cit9CisKK2lubGluZSBkb3VibGVfaW50Citkb3VibGVfaW50Ojpmcm9tX3BhaXIgKEhPU1RfV0lERV9JTlQgaGlnaCwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBsb3cpCit7CisgIGRvdWJsZV9pbnQgcjsKKyAgci5sb3cgPSBsb3c7CisgIHIuaGlnaCA9IGhpZ2g7CisgIHJldHVybiByOworfQorCitpbmxpbmUgZG91YmxlX2ludCAmCitkb3VibGVfaW50OjpvcGVyYXRvciArKyAoKQoreworICAqdGhpcyArPSBkb3VibGVfaW50X29uZTsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgZG91YmxlX2ludCAmCitkb3VibGVfaW50OjpvcGVyYXRvciAtLSAoKQoreworICAqdGhpcyAtPSBkb3VibGVfaW50X29uZTsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgZG91YmxlX2ludCAmCitkb3VibGVfaW50OjpvcGVyYXRvciAqPSAoZG91YmxlX2ludCBiKQoreworICAqdGhpcyA9ICp0aGlzICogYjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgZG91YmxlX2ludCAmCitkb3VibGVfaW50OjpvcGVyYXRvciArPSAoZG91YmxlX2ludCBiKQoreworICAqdGhpcyA9ICp0aGlzICsgYjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgZG91YmxlX2ludCAmCitkb3VibGVfaW50OjpvcGVyYXRvciAtPSAoZG91YmxlX2ludCBiKQoreworICAqdGhpcyA9ICp0aGlzIC0gYjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgZG91YmxlX2ludCAmCitkb3VibGVfaW50OjpvcGVyYXRvciAmPSAoZG91YmxlX2ludCBiKQoreworICAqdGhpcyA9ICp0aGlzICYgYjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgZG91YmxlX2ludCAmCitkb3VibGVfaW50OjpvcGVyYXRvciBePSAoZG91YmxlX2ludCBiKQoreworICAqdGhpcyA9ICp0aGlzIF4gYjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgZG91YmxlX2ludCAmCitkb3VibGVfaW50OjpvcGVyYXRvciB8PSAoZG91YmxlX2ludCBiKQoreworICAqdGhpcyA9ICp0aGlzIHwgYjsKKyAgcmV0dXJuICp0aGlzOworfQorCisvKiBSZXR1cm5zIHZhbHVlIG9mIENTVCBhcyBhIHNpZ25lZCBudW1iZXIuICBDU1QgbXVzdCBzYXRpc2Z5CisgICBkb3VibGVfaW50OjpmaXRzX3NpZ25lZC4gICovCisKK2lubGluZSBIT1NUX1dJREVfSU5UCitkb3VibGVfaW50Ojp0b19zaHdpICgpIGNvbnN0Cit7CisgIHJldHVybiAoSE9TVF9XSURFX0lOVCkgbG93OworfQorCisvKiBSZXR1cm5zIHZhbHVlIG9mIENTVCBhcyBhbiB1bnNpZ25lZCBudW1iZXIuICBDU1QgbXVzdCBzYXRpc2Z5CisgICBkb3VibGVfaW50OjpmaXRzX3Vuc2lnbmVkLiAgKi8KKworaW5saW5lIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQKK2RvdWJsZV9pbnQ6OnRvX3Vod2kgKCkgY29uc3QKK3sKKyAgcmV0dXJuIGxvdzsKK30KKworLyogUmV0dXJucyB0cnVlIGlmIENTVCBmaXRzIGluIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQuICAqLworCitpbmxpbmUgYm9vbAorZG91YmxlX2ludDo6Zml0c191aHdpICgpIGNvbnN0Cit7CisgIHJldHVybiBoaWdoID09IDA7Cit9CisKKy8qIExvZ2ljYWwgb3BlcmF0aW9ucy4gICovCisKKy8qIFJldHVybnMgfkEuICAqLworCitpbmxpbmUgZG91YmxlX2ludAorZG91YmxlX2ludDo6b3BlcmF0b3IgfiAoKSBjb25zdAoreworICBkb3VibGVfaW50IHJlc3VsdDsKKyAgcmVzdWx0LmxvdyA9IH5sb3c7CisgIHJlc3VsdC5oaWdoID0gfmhpZ2g7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJldHVybnMgQSB8IEIuICAqLworCitpbmxpbmUgZG91YmxlX2ludAorZG91YmxlX2ludDo6b3BlcmF0b3IgfCAoZG91YmxlX2ludCBiKSBjb25zdAoreworICBkb3VibGVfaW50IHJlc3VsdDsKKyAgcmVzdWx0LmxvdyA9IGxvdyB8IGIubG93OworICByZXN1bHQuaGlnaCA9IGhpZ2ggfCBiLmhpZ2g7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJldHVybnMgQSAmIEIuICAqLworCitpbmxpbmUgZG91YmxlX2ludAorZG91YmxlX2ludDo6b3BlcmF0b3IgJiAoZG91YmxlX2ludCBiKSBjb25zdAoreworICBkb3VibGVfaW50IHJlc3VsdDsKKyAgcmVzdWx0LmxvdyA9IGxvdyAmIGIubG93OworICByZXN1bHQuaGlnaCA9IGhpZ2ggJiBiLmhpZ2g7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJldHVybnMgQSAmIH5CLiAgKi8KKworaW5saW5lIGRvdWJsZV9pbnQKK2RvdWJsZV9pbnQ6OmFuZF9ub3QgKGRvdWJsZV9pbnQgYikgY29uc3QKK3sKKyAgZG91YmxlX2ludCByZXN1bHQ7CisgIHJlc3VsdC5sb3cgPSBsb3cgJiB+Yi5sb3c7CisgIHJlc3VsdC5oaWdoID0gaGlnaCAmIH5iLmhpZ2g7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJldHVybnMgQSBeIEIuICAqLworCitpbmxpbmUgZG91YmxlX2ludAorZG91YmxlX2ludDo6b3BlcmF0b3IgXiAoZG91YmxlX2ludCBiKSBjb25zdAoreworICBkb3VibGVfaW50IHJlc3VsdDsKKyAgcmVzdWx0LmxvdyA9IGxvdyBeIGIubG93OworICByZXN1bHQuaGlnaCA9IGhpZ2ggXiBiLmhpZ2g7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgZHVtcF9kb3VibGVfaW50IChGSUxFICosIGRvdWJsZV9pbnQsIGJvb2wpOworCisjZGVmaW5lIEFMTF9PTkVTICh+KCh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAwKSkKKworLyogVGhlIG9wZXJhbmRzIG9mIHRoZSBmb2xsb3dpbmcgY29tcGFyaXNvbiBmdW5jdGlvbnMgbXVzdCBiZSBwcm9jZXNzZWQKKyAgIHdpdGggZG91YmxlX2ludF9leHQsIGlmIHRoZWlyIHByZWNpc2lvbiBpcyBsZXNzIHRoYW4KKyAgIEhPU1RfQklUU19QRVJfRE9VQkxFX0lOVCBiaXRzLiAgKi8KKworLyogUmV0dXJucyB0cnVlIGlmIENTVCBpcyB6ZXJvLiAgKi8KKworaW5saW5lIGJvb2wKK2RvdWJsZV9pbnQ6OmlzX3plcm8gKCkgY29uc3QKK3sKKyAgcmV0dXJuIGxvdyA9PSAwICYmIGhpZ2ggPT0gMDsKK30KKworLyogUmV0dXJucyB0cnVlIGlmIENTVCBpcyBvbmUuICAqLworCitpbmxpbmUgYm9vbAorZG91YmxlX2ludDo6aXNfb25lICgpIGNvbnN0Cit7CisgIHJldHVybiBsb3cgPT0gMSAmJiBoaWdoID09IDA7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBDU1QgaXMgbWludXMgb25lLiAgKi8KKworaW5saW5lIGJvb2wKK2RvdWJsZV9pbnQ6OmlzX21pbnVzX29uZSAoKSBjb25zdAoreworICByZXR1cm4gbG93ID09IEFMTF9PTkVTICYmIGhpZ2ggPT0gLTE7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBDU1QgaXMgbmVnYXRpdmUuICAqLworCitpbmxpbmUgYm9vbAorZG91YmxlX2ludDo6aXNfbmVnYXRpdmUgKCkgY29uc3QKK3sKKyAgcmV0dXJuIGhpZ2ggPCAwOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgQ1NUMSA9PSBDU1QyLiAgKi8KKworaW5saW5lIGJvb2wKK2RvdWJsZV9pbnQ6Om9wZXJhdG9yID09IChkb3VibGVfaW50IGNzdDIpIGNvbnN0Cit7CisgIHJldHVybiBsb3cgPT0gY3N0Mi5sb3cgJiYgaGlnaCA9PSBjc3QyLmhpZ2g7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBDU1QxICE9IENTVDIuICAqLworCitpbmxpbmUgYm9vbAorZG91YmxlX2ludDo6b3BlcmF0b3IgIT0gKGRvdWJsZV9pbnQgY3N0MikgY29uc3QKK3sKKyAgcmV0dXJuIGxvdyAhPSBjc3QyLmxvdyB8fCBoaWdoICE9IGNzdDIuaGlnaDsKK30KKworLyogUmV0dXJuIG51bWJlciBvZiBzZXQgYml0cyBvZiBDU1QuICAqLworCitpbmxpbmUgaW50Citkb3VibGVfaW50Ojpwb3Bjb3VudCAoKSBjb25zdAoreworICByZXR1cm4gcG9wY291bnRfaHdpIChoaWdoKSArIHBvcGNvdW50X2h3aSAobG93KTsKK30KKworCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisvKiBDb252ZXJzaW9uIHRvIGFuZCBmcm9tIEdNUCBpbnRlZ2VyIHJlcHJlc2VudGF0aW9ucy4gICovCisKK3ZvaWQgbXB6X3NldF9kb3VibGVfaW50IChtcHpfdCwgZG91YmxlX2ludCwgYm9vbCk7Citkb3VibGVfaW50IG1wel9nZXRfZG91YmxlX2ludCAoY29uc3RfdHJlZSwgbXB6X3QsIGJvb2wpOworI2VuZGlmCisKKyNlbmRpZiAvKiBET1VCTEVfSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9kdW1wZmlsZS5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2R1bXBmaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxMmNjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9kdW1wZmlsZS5oCkBAIC0wLDAgKzEsMTY2IEBACisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIHNoYXJlZCBkdW1wZmlsZS4KKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaWZuZGVmIEdDQ19EVU1QRklMRV9ICisjZGVmaW5lIEdDQ19EVU1QRklMRV9IIDEKKworI2luY2x1ZGUgImxpbmUtbWFwLmgiCisKKy8qIERpZmZlcmVudCB0cmVlIGR1bXAgcGxhY2VzLiAgV2hlbiB5b3UgYWRkIG5ldyB0cmVlIGR1bXAgcGxhY2VzLAorICAgZXh0ZW5kIHRoZSBEVU1QX0ZJTEVTIGFycmF5IGluIGR1bXBmaWxlLmMuICAqLworZW51bSB0cmVlX2R1bXBfaW5kZXgKK3sKKyAgVERJX25vbmUsCQkJLyogTm8gZHVtcCAqLworICBURElfY2dyYXBoLCAgICAgICAgICAgICAgICAgICAvKiBkdW1wIGZ1bmN0aW9uIGNhbGwgZ3JhcGguICAqLworICBURElfdHUsCQkJLyogZHVtcCB0aGUgd2hvbGUgdHJhbnNsYXRpb24gdW5pdC4gICovCisgIFRESV9jbGFzcywJCQkvKiBkdW1wIGNsYXNzIGhpZXJhcmNoeS4gICovCisgIFRESV9vcmlnaW5hbCwJCQkvKiBkdW1wIGVhY2ggZnVuY3Rpb24gYmVmb3JlIG9wdGltaXppbmcgaXQgKi8KKyAgVERJX2dlbmVyaWMsCQkJLyogZHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIGdlbmVyaWNpemluZyBpdCAqLworICBURElfbmVzdGVkLAkJCS8qIGR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciB1bm5lc3RpbmcgaXQgKi8KKyAgVERJX3RyZWVfYWxsLCAgICAgICAgICAgICAgICAgLyogZW5hYmxlIGFsbCB0aGUgR0VORVJJQy9HSU1QTEUgZHVtcHMuICAqLworICBURElfcnRsX2FsbCwgICAgICAgICAgICAgICAgICAvKiBlbmFibGUgYWxsIHRoZSBSVEwgZHVtcHMuICAqLworICBURElfaXBhX2FsbCwgICAgICAgICAgICAgICAgICAvKiBlbmFibGUgYWxsIHRoZSBJUEEgZHVtcHMuICAqLworCisgIFRESV9lbmQKK307CisKKy8qIEJpdCBtYXNrcyB0byBjb250cm9sIGR1bXBpbmcuIE5vdCBhbGwgdmFsdWVzIGFyZSBhcHBsaWNhYmxlIHRvIGFsbAorICAgZHVtcHMuIEFkZCBuZXcgb25lcyBhdCB0aGUgZW5kLiBXaGVuIHlvdSBkZWZpbmUgbmV3IHZhbHVlcywgZXh0ZW5kCisgICB0aGUgRFVNUF9PUFRJT05TIGFycmF5IGluIGR1bXBmaWxlLmMuIFRoZSBUREZfKiBmbGFncyBjb2V4aXN0IHdpdGgKKyAgIE1TR18qIGZsYWdzIChmb3IgLWZvcHQtaW5mbykgYW5kIHRoZSBiaXQgdmFsdWVzIG11c3QgYmUgY2hvc2VuIHRvCisgICBhbGxvdyB0aGF0LiAgKi8KKyNkZWZpbmUgVERGX0FERFJFU1MJKDEgPDwgMCkJLyogZHVtcCBub2RlIGFkZHJlc3NlcyAqLworI2RlZmluZSBUREZfU0xJTQkoMSA8PCAxKQkvKiBkb24ndCBnbyB3aWxkIGZvbGxvd2luZyBsaW5rcyAqLworI2RlZmluZSBUREZfUkFXICAJKDEgPDwgMikJLyogZG9uJ3QgdW5wYXJzZSB0aGUgZnVuY3Rpb24gKi8KKyNkZWZpbmUgVERGX0RFVEFJTFMJKDEgPDwgMykJLyogc2hvdyBtb3JlIGRldGFpbGVkIGluZm8gYWJvdXQKKwkJCQkJICAgZWFjaCBwYXNzICovCisjZGVmaW5lIFRERl9TVEFUUwkoMSA8PCA0KQkvKiBkdW1wIHZhcmlvdXMgc3RhdGlzdGljcyBhYm91dAorCQkJCQkgICBlYWNoIHBhc3MgKi8KKyNkZWZpbmUgVERGX0JMT0NLUwkoMSA8PCA1KQkvKiBkaXNwbGF5IGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMgKi8KKyNkZWZpbmUgVERGX1ZPUFMJKDEgPDwgNikJLyogZGlzcGxheSB2aXJ0dWFsIG9wZXJhbmRzICovCisjZGVmaW5lIFRERl9MSU5FTk8JKDEgPDwgNykJLyogZGlzcGxheSBzdGF0ZW1lbnQgbGluZSBudW1iZXJzICovCisjZGVmaW5lIFRERl9VSUQJCSgxIDw8IDgpCS8qIGRpc3BsYXkgZGVjbCBVSURzICovCisKKyNkZWZpbmUgVERGX1RSRUUJKDEgPDwgOSkJLyogaXMgYSB0cmVlIGR1bXAgKi8KKyNkZWZpbmUgVERGX1JUTAkJKDEgPDwgMTApCS8qIGlzIGEgUlRMIGR1bXAgKi8KKyNkZWZpbmUgVERGX0lQQQkJKDEgPDwgMTEpCS8qIGlzIGFuIElQQSBkdW1wICovCisjZGVmaW5lIFRERl9TVE1UQUREUgkoMSA8PCAxMikJLyogQWRkcmVzcyBvZiBzdG10LiAgKi8KKworI2RlZmluZSBUREZfR1JBUEgJKDEgPDwgMTMpCS8qIGEgZ3JhcGggZHVtcCBpcyBiZWluZyBlbWl0dGVkICovCisjZGVmaW5lIFRERl9NRU1TWU1TCSgxIDw8IDE0KQkvKiBkaXNwbGF5IG1lbW9yeSBzeW1ib2xzIGluIGV4cHIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyBUREZfVk9QUy4gICovCisKKyNkZWZpbmUgVERGX0RJQUdOT1NUSUMJKDEgPDwgMTUpCS8qIEEgZHVtcCB0byBiZSBwdXQgaW4gYSBkaWFnbm9zdGljCisJCQkJCSAgIG1lc3NhZ2UuICAqLworI2RlZmluZSBUREZfVkVSQk9TRSAgICAgKDEgPDwgMTYpICAgICAgIC8qIEEgZHVtcCB0aGF0IHVzZXMgdGhlIGZ1bGwgdHJlZQorCQkJCQkgICBkdW1wZXIgdG8gcHJpbnQgc3RtdHMuICAqLworI2RlZmluZSBUREZfUkhTX09OTFkJKDEgPDwgMTcpCS8qIGEgZmxhZyB0byBvbmx5IHByaW50IHRoZSBSSFMgb2YKKwkJCQkJICAgYSBnaW1wbGUgc3RtdC4gICovCisjZGVmaW5lIFRERl9BU01OQU1FCSgxIDw8IDE4KQkvKiBkaXNwbGF5IGFzbSBuYW1lcyBvZiBkZWNscyAgKi8KKyNkZWZpbmUgVERGX0VICQkoMSA8PCAxOSkJLyogZGlzcGxheSBFSCByZWdpb24gbnVtYmVyCisJCQkJCSAgIGhvbGRpbmcgdGhpcyBnaW1wbGUgc3RhdGVtZW50LiAgKi8KKyNkZWZpbmUgVERGX05PVUlECSgxIDw8IDIwKQkvKiBvbWl0IFVJRHMgZnJvbSBkdW1wcy4gICovCisjZGVmaW5lIFRERl9BTElBUwkoMSA8PCAyMSkJLyogZGlzcGxheSBhbGlhcyBpbmZvcm1hdGlvbiAgKi8KKyNkZWZpbmUgVERGX0VOVU1FUkFURV9MT0NBTFMgKDEgPDwgMjIpCS8qIEVudW1lcmF0ZSBsb2NhbHMgYnkgdWlkLiAgKi8KKyNkZWZpbmUgVERGX0NTRUxJQgkoMSA8PCAyMykJLyogRHVtcCBjc2VsaWIgZGV0YWlscy4gICovCisjZGVmaW5lIFRERl9TQ0VWCSgxIDw8IDI0KQkvKiBEdW1wIFNDRVYgZGV0YWlscy4gICovCisjZGVmaW5lIFRERl9DT01NRU5UCSgxIDw8IDI1KQkvKiBEdW1wIGxpbmVzIHdpdGggcHJlZml4ICI7OyIgICovCisjZGVmaW5lIE1TR19PUFRJTUlaRURfTE9DQVRJT05TICAoMSA8PCAyNikgIC8qIC1mb3B0LWluZm8gb3B0aW1pemVkIHNvdXJjZXMgKi8KKyNkZWZpbmUgTVNHX01JU1NFRF9PUFRJTUlaQVRJT04gICgxIDw8IDI3KSAgLyogbWlzc2VkIG9wcG9ydHVuaXRpZXMgKi8KKyNkZWZpbmUgTVNHX05PVEUgICAgICAgICAgICAgICAgICgxIDw8IDI4KSAgLyogZ2VuZXJhbCBvcHRpbWl6YXRpb24gaW5mbyAqLworI2RlZmluZSBNU0dfQUxMICAgICAgICAgKE1TR19PUFRJTUlaRURfTE9DQVRJT05TIHwgTVNHX01JU1NFRF9PUFRJTUlaQVRJT04gXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgTVNHX05PVEUpCisKKworLyogRmxhZ3MgdG8gY29udHJvbCBoaWdoLWxldmVsIC1mb3B0LWluZm8gZHVtcHMuICBVc3VhbGx5IHRoZXNlIGZsYWdzCisgICBkZWZpbmUgYSBncm91cCBvZiBwYXNzZXMuICBBbiBvcHRpbWl6YXRpb24gcGFzcyBjYW4gYmUgcGFydCBvZgorICAgbXVsdGlwbGUgZ3JvdXBzLiAgKi8KKyNkZWZpbmUgT1BUR1JPVVBfTk9ORSAgICAgICAgKDApCisjZGVmaW5lIE9QVEdST1VQX0lQQSAgICAgICAgICgxIDw8IDEpICAgLyogSVBBIG9wdGltaXphdGlvbiBwYXNzZXMgKi8KKyNkZWZpbmUgT1BUR1JPVVBfTE9PUCAgICAgICAgKDEgPDwgMikgICAvKiBMb29wIG9wdGltaXphdGlvbiBwYXNzZXMgKi8KKyNkZWZpbmUgT1BUR1JPVVBfSU5MSU5FICAgICAgKDEgPDwgMykgICAvKiBJbmxpbmluZyBwYXNzZXMgKi8KKyNkZWZpbmUgT1BUR1JPVVBfVkVDICAgICAgICAgKDEgPDwgNCkgICAvKiBWZWN0b3JpemF0aW9uIHBhc3NlcyAqLworI2RlZmluZSBPUFRHUk9VUF9BTEwJICAgICAoT1BUR1JPVVBfSVBBIHwgT1BUR1JPVVBfTE9PUCB8IE9QVEdST1VQX0lOTElORSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9QVEdST1VQX1ZFQykKKworLyogRGVmaW5lIGEgdHJlZSBkdW1wIHN3aXRjaC4gICovCitzdHJ1Y3QgZHVtcF9maWxlX2luZm8KK3sKKyAgY29uc3QgY2hhciAqc3VmZml4OyAgICAgICAgICAgLyogc3VmZml4IHRvIGdpdmUgb3V0cHV0IGZpbGUuICAqLworICBjb25zdCBjaGFyICpzd3RjaDsgICAgICAgICAgICAvKiBjb21tYW5kIGxpbmUgZHVtcCBzd2l0Y2ggKi8KKyAgY29uc3QgY2hhciAqZ2xvYjsgICAgICAgICAgICAgLyogY29tbWFuZCBsaW5lIGdsb2IgICovCisgIGNvbnN0IGNoYXIgKnBmaWxlbmFtZTsgICAgICAgIC8qIGZpbGVuYW1lIGZvciB0aGUgcGFzcy1zcGVjaWZpYyBzdHJlYW0gICovCisgIGNvbnN0IGNoYXIgKmFsdF9maWxlbmFtZTsgICAgIC8qIGZpbGVuYW1lIGZvciB0aGUgLWZvcHQtaW5mbyBzdHJlYW0gICovCisgIEZJTEUgKnBzdHJlYW07ICAgICAgICAgICAgICAgIC8qIHBhc3Mtc3BlY2lmaWMgZHVtcCBzdHJlYW0gICovCisgIEZJTEUgKmFsdF9zdHJlYW07ICAgICAgICAgICAgIC8qIC1mb3B0LWluZm8gc3RyZWFtICovCisgIGludCBwZmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIGR1bXAgZmxhZ3MgKi8KKyAgaW50IG9wdGdyb3VwX2ZsYWdzOyAgICAgICAgICAgLyogb3B0Z3JvdXAgZmxhZ3MgZm9yIC1mb3B0LWluZm8gKi8KKyAgaW50IGFsdF9mbGFnczsgICAgICAgICAgICAgICAgLyogZmxhZ3MgZm9yIG9wdC1pbmZvICovCisgIGludCBwc3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qIHN0YXRlIG9mIHBhc3Mtc3BlY2lmaWMgc3RyZWFtICovCisgIGludCBhbHRfc3RhdGU7ICAgICAgICAgICAgICAgIC8qIHN0YXRlIG9mIHRoZSAtZm9wdC1pbmZvIHN0cmVhbSAqLworICBpbnQgbnVtOyAgICAgICAgICAgICAgICAgICAgICAvKiBkdW1wIGZpbGUgbnVtYmVyICovCit9OworCisvKiBJbiBkdW1wZmlsZS5jICovCitleHRlcm4gY2hhciAqZ2V0X2R1bXBfZmlsZV9uYW1lIChpbnQpOworZXh0ZXJuIGludCBkdW1wX2luaXRpYWxpemVkX3AgKGludCk7CitleHRlcm4gRklMRSAqZHVtcF9iZWdpbiAoaW50LCBpbnQgKik7CitleHRlcm4gdm9pZCBkdW1wX2VuZCAoaW50LCBGSUxFICopOworZXh0ZXJuIGludCBkdW1wX3N0YXJ0IChpbnQsIGludCAqKTsKK2V4dGVybiB2b2lkIGR1bXBfZmluaXNoIChpbnQpOworZXh0ZXJuIHZvaWQgZHVtcF9ub2RlIChjb25zdF90cmVlLCBpbnQsIEZJTEUgKik7CitleHRlcm4gaW50IGR1bXBfc3dpdGNoX3AgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IG9wdF9pbmZvX3N3aXRjaF9wIChjb25zdCBjaGFyICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKmR1bXBfZmxhZ19uYW1lIChpbnQpOworZXh0ZXJuIHZvaWQgZHVtcF9wcmludGYgKGludCwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9QUklOVEZfMjsKK2V4dGVybiB2b2lkIGR1bXBfcHJpbnRmX2xvYyAoaW50LCBzb3VyY2VfbG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzM7CitleHRlcm4gdm9pZCBkdW1wX2Jhc2ljX2Jsb2NrIChpbnQsIGJhc2ljX2Jsb2NrLCBpbnQpOworZXh0ZXJuIHZvaWQgZHVtcF9nZW5lcmljX2V4cHJfbG9jIChpbnQsIHNvdXJjZV9sb2NhdGlvbiwgaW50LCB0cmVlKTsKK2V4dGVybiB2b2lkIGR1bXBfZ2VuZXJpY19leHByIChpbnQsIGludCwgdHJlZSk7CitleHRlcm4gdm9pZCBkdW1wX2dpbXBsZV9zdG10X2xvYyAoaW50LCBzb3VyY2VfbG9jYXRpb24sIGludCwgZ2ltcGxlLCBpbnQpOworZXh0ZXJuIHZvaWQgZHVtcF9naW1wbGVfc3RtdCAoaW50LCBpbnQsIGdpbXBsZSwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X2NvbWJpbmVfdG90YWxfc3RhdHMgKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBkdW1wX3JlZ2lzdGVyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCk7CitleHRlcm4gYm9vbCBlbmFibGVfcnRsX2R1bXBfZmlsZSAodm9pZCk7CisKKy8qIEluIGNvbWJpbmUuYyAgKi8KK2V4dGVybiB2b2lkIGR1bXBfY29tYmluZV90b3RhbF9zdGF0cyAoRklMRSAqKTsKKy8qIEluIGNmZ2hvb2tzLmMgICovCitleHRlcm4gdm9pZCBkdW1wX2JiIChGSUxFICosIGJhc2ljX2Jsb2NrLCBpbnQsIGludCk7CisKKy8qIEdsb2JhbCB2YXJpYWJsZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHBhc3Nlcy4gICovCitleHRlcm4gRklMRSAqZHVtcF9maWxlOworZXh0ZXJuIEZJTEUgKmFsdF9kdW1wX2ZpbGU7CitleHRlcm4gaW50IGR1bXBfZmxhZ3M7CitleHRlcm4gY29uc3QgY2hhciAqZHVtcF9maWxlX25hbWU7CisKKy8qIFJldHVybiB0aGUgZHVtcF9maWxlX2luZm8gZm9yIHRoZSBnaXZlbiBwaGFzZS4gICovCitleHRlcm4gc3RydWN0IGR1bXBfZmlsZV9pbmZvICpnZXRfZHVtcF9maWxlX2luZm8gKGludCk7CisKKy8qIFJldHVybiB0cnVlIGlmIGFueSBvZiB0aGUgZHVtcHMgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLiAqLworc3RhdGljIGlubGluZSBib29sCitkdW1wX2VuYWJsZWRfcCAodm9pZCkKK3sKKyAgcmV0dXJuIChkdW1wX2ZpbGUgfHwgYWx0X2R1bXBfZmlsZSk7Cit9CisKKyNlbmRpZiAvKiBHQ0NfRFVNUEZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2VtaXQtcnRsLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZW1pdC1ydGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjY4MDkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2VtaXQtcnRsLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIGVtaXQtcnRsLmMKKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfRU1JVF9SVExfSAorI2RlZmluZSBHQ0NfRU1JVF9SVExfSAorCisvKiBTZXQgdGhlIGFsaWFzIHNldCBvZiBNRU0gdG8gU0VULiAgKi8KK2V4dGVybiB2b2lkIHNldF9tZW1fYWxpYXNfc2V0IChydHgsIGFsaWFzX3NldF90eXBlKTsKKworLyogU2V0IHRoZSBhbGlnbm1lbnQgb2YgTUVNIHRvIEFMSUdOIGJpdHMuICAqLworZXh0ZXJuIHZvaWQgc2V0X21lbV9hbGlnbiAocnR4LCB1bnNpZ25lZCBpbnQpOworCisvKiBTZXQgdGhlIGFkZHJlc3Mgc3BhY2Ugb2YgTUVNIHRvIEFERFJTUEFDRS4gICovCitleHRlcm4gdm9pZCBzZXRfbWVtX2FkZHJfc3BhY2UgKHJ0eCwgYWRkcl9zcGFjZV90KTsKKworLyogU2V0IHRoZSBleHByIGZvciBNRU0gdG8gRVhQUi4gICovCitleHRlcm4gdm9pZCBzZXRfbWVtX2V4cHIgKHJ0eCwgdHJlZSk7CisKKy8qIFNldCB0aGUgb2Zmc2V0IGZvciBNRU0gdG8gT0ZGU0VULiAgKi8KK2V4dGVybiB2b2lkIHNldF9tZW1fb2Zmc2V0IChydHgsIEhPU1RfV0lERV9JTlQpOworCisvKiBDbGVhciB0aGUgb2Zmc2V0IHJlY29yZGVkIGZvciBNRU0uICAqLworZXh0ZXJuIHZvaWQgY2xlYXJfbWVtX29mZnNldCAocnR4KTsKKworLyogU2V0IHRoZSBzaXplIGZvciBNRU0gdG8gU0laRS4gICovCitleHRlcm4gdm9pZCBzZXRfbWVtX3NpemUgKHJ0eCwgSE9TVF9XSURFX0lOVCk7CisKKy8qIENsZWFyIHRoZSBzaXplIHJlY29yZGVkIGZvciBNRU0uICAqLworZXh0ZXJuIHZvaWQgY2xlYXJfbWVtX3NpemUgKHJ0eCk7CisKKy8qIFNldCB0aGUgYXR0cmlidXRlcyBmb3IgTUVNIGFwcHJvcHJpYXRlIGZvciBhIHNwaWxsIHNsb3QuICAqLworZXh0ZXJuIHZvaWQgc2V0X21lbV9hdHRyc19mb3Jfc3BpbGwgKHJ0eCk7CitleHRlcm4gdHJlZSBnZXRfc3BpbGxfc2xvdF9kZWNsIChib29sKTsKKworLyogUmV0dXJuIGEgbWVtb3J5IHJlZmVyZW5jZSBsaWtlIE1FTVJFRiwgYnV0IHdpdGggaXRzIGFkZHJlc3MgY2hhbmdlZCB0bworICAgQUREUi4gIFRoZSBjYWxsZXIgaXMgYXNzZXJ0aW5nIHRoYXQgdGhlIGFjdHVhbCBwaWVjZSBvZiBtZW1vcnkgcG9pbnRlZAorICAgdG8gaXMgdGhlIHNhbWUsIGp1c3QgdGhlIGZvcm0gb2YgdGhlIGFkZHJlc3MgaXMgYmVpbmcgY2hhbmdlZCwgc3VjaCBhcworICAgYnkgcHV0dGluZyBzb21ldGhpbmcgaW50byBhIHJlZ2lzdGVyLiAgKi8KK2V4dGVybiBydHggcmVwbGFjZV9lcXVpdl9hZGRyZXNzIChydHgsIHJ0eCk7CisKKy8qIExpa2V3aXNlLCBidXQgdGhlIHJlZmVyZW5jZSBpcyBub3QgcmVxdWlyZWQgdG8gYmUgdmFsaWQuICAqLworZXh0ZXJuIHJ0eCByZXBsYWNlX2VxdWl2X2FkZHJlc3NfbnYgKHJ0eCwgcnR4KTsKKworZXh0ZXJuIHJ0eCBnZW5fYmxvY2thZ2UgKHZvaWQpOworZXh0ZXJuIHJ0dmVjIGdlbl9ydHZlYyAoaW50LCAuLi4pOworZXh0ZXJuIHJ0eCBjb3B5X2luc25fMSAocnR4KTsKK2V4dGVybiBydHggY29weV9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBjb3B5X2RlbGF5X3Nsb3RfaW5zbiAocnR4KTsKK2V4dGVybiBydHggZ2VuX2ludF9tb2RlIChIT1NUX1dJREVfSU5ULCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gcnR4IGVtaXRfY29weV9vZl9pbnNuX2FmdGVyIChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBzZXRfcmVnX2F0dHJzX2Zyb21fdmFsdWUgKHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIHNldF9yZWdfYXR0cnNfZm9yX3Bhcm0gKHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIHNldF9yZWdfYXR0cnNfZm9yX2RlY2xfcnRsICh0cmVlIHQsIHJ0eCB4KTsKK2V4dGVybiB2b2lkIGFkanVzdF9yZWdfbW9kZSAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG1lbV9leHByX2VxdWFsX3AgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworCitleHRlcm4gYm9vbCBuZWVkX2F0b21pY19iYXJyaWVyX3AgKGVudW0gbWVtbW9kZWwsIGJvb2wpOworCisvKiBSZXR1cm4gdGhlIGZpcnN0IGluc24gb2YgdGhlIGN1cnJlbnQgc2VxdWVuY2Ugb3IgY3VycmVudCBmdW5jdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZXRfaW5zbnMgKHZvaWQpCit7CisgIHJldHVybiBjcnRsLT5lbWl0LnhfZmlyc3RfaW5zbjsKK30KKworLyogU3BlY2lmeSBhIG5ldyBpbnNuIGFzIHRoZSBmaXJzdCBpbiB0aGUgY2hhaW4uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9maXJzdF9pbnNuIChydHggaW5zbikKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWluc24gfHwgIVBSRVZfSU5TTiAoaW5zbikpOworICBjcnRsLT5lbWl0LnhfZmlyc3RfaW5zbiA9IGluc247Cit9CisKKy8qIFJldHVybiB0aGUgbGFzdCBpbnNuIGVtaXR0ZWQgaW4gY3VycmVudCBzZXF1ZW5jZSBvciBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSBydHgKK2dldF9sYXN0X2luc24gKHZvaWQpCit7CisgIHJldHVybiBjcnRsLT5lbWl0LnhfbGFzdF9pbnNuOworfQorCisvKiBTcGVjaWZ5IGEgbmV3IGluc24gYXMgdGhlIGxhc3QgaW4gdGhlIGNoYWluLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfbGFzdF9pbnNuIChydHggaW5zbikKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWluc24gfHwgIU5FWFRfSU5TTiAoaW5zbikpOworICBjcnRsLT5lbWl0LnhfbGFzdF9pbnNuID0gaW5zbjsKK30KKworLyogUmV0dXJuIGEgbnVtYmVyIGxhcmdlciB0aGFuIGFueSBpbnN0cnVjdGlvbidzIHVpZCBpbiB0aGlzIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK2dldF9tYXhfdWlkICh2b2lkKQoreworICByZXR1cm4gY3J0bC0+ZW1pdC54X2N1cl9pbnNuX3VpZDsKK30KKyNlbmRpZiAvKiBHQ0NfRU1JVF9SVExfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2V4Y2VwdC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2V4Y2VwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOTY1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZXhjZXB0LmgKQEAgLTAsMCArMSwzMzUgQEAKKy8qIEV4Y2VwdGlvbiBIYW5kbGluZyBpbnRlcmZhY2Ugcm91dGluZXMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IE1pa2UgU3R1bXAgPG1yc0BjeWdudXMuY29tPi4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIE5vIGluY2x1ZGUgZ3VhcmRzIGhlcmUsIGJ1dCBkZWZpbmUgYW4gaW5jbHVkZSBmaWxlIG1hcmtlciBhbnl3YXksIHNvCisgICB0aGF0IHRoZSBjb21waWxlciBjYW4ga2VlcCB0cmFjayBvZiB3aGVyZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQuICBUaGlzCisgICBpcyBlLmcuIHVzZWQgdG8gYXZvaWQgaW5jbHVkaW5nIHRoaXMgZmlsZSBpbiBmcm9udC1lbmQgc3BlY2lmaWMgZmlsZXMuICAqLworI2lmbmRlZiBHQ0NfRVhDRVBUX0gKKyMgIGRlZmluZSBHQ0NfRVhDRVBUX0gKKyNlbmRpZgorCisjaW5jbHVkZSAiaGFzaHRhYi5oIgorCitzdHJ1Y3QgZnVuY3Rpb247CitzdHJ1Y3QgZWhfcmVnaW9uX2Q7CitzdHJ1Y3QgcG9pbnRlcl9tYXBfdDsKKworLyogVGhlIHR5cGUgb2YgYW4gZXhjZXB0aW9uIHJlZ2lvbi4gICovCitlbnVtIGVoX3JlZ2lvbl90eXBlCit7CisgIC8qIENMRUFOVVAgcmVnaW9ucyBpbXBsZW1lbnQgZS5nLiBkZXN0cnVjdG9ycyBydW4gd2hlbiBleGl0aW5nIGEgYmxvY2suCisgICAgIFRoZXkgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIGJvdGggR0lNUExFX1RSWV9GSU5BTExZIGFuZCBHSU1QTEVfVFJZX0NBVENICisgICAgIG5vZGVzLiAgSXQgaXMgZXhwZWN0ZWQgYnkgdGhlIHJ1bnRpbWUgdGhhdCBjbGVhbnVwIHJlZ2lvbnMgd2lsbCAqbm90KgorICAgICByZXN1bWUgbm9ybWFsIHByb2dyYW0gZmxvdywgYnV0IHdpbGwgY29udGludWUgcHJvcGFnYXRpb24gb2YgdGhlCisgICAgIGV4Y2VwdGlvbi4gICovCisgIEVSVF9DTEVBTlVQLAorCisgIC8qIFRSWSByZWdpb25zIGltcGxlbWVudCBjYXRjaGluZyBhbiBleGNlcHRpb24uICBUaGUgbGlzdCBvZiB0eXBlcyBhc3NvY2lhdGVkCisgICAgIHdpdGggdGhlIGF0dGFjaGVkIGNhdGNoIGhhbmRsZXJzIGlzIGV4YW1pbmVkIGluIG9yZGVyIGJ5IHRoZSBydW50aW1lIGFuZAorICAgICBjb250cm9sIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyLiAgTm90ZSB0aGF0IGEgTlVMTCB0eXBlCisgICAgIGxpc3QgaXMgYSBjYXRjaC1hbGwgaGFuZGxlciwgYW5kIHRoYXQgaXQgd2lsbCBjYXRjaCAqYWxsKiBleGNlcHRpb25zCisgICAgIGluY2x1ZGluZyB0aG9zZSBvcmlnaW5hdGluZyBmcm9tIGEgZGlmZmVyZW50IGxhbmd1YWdlLiAgKi8KKyAgRVJUX1RSWSwKKworICAvKiBBTExPV0VEX0VYQ0VQVElPTlMgcmVnaW9ucyBpbXBsZW1lbnQgZXhjZXB0aW9uIGZpbHRlcmluZywgZS5nLiB0aGUKKyAgICAgdGhyb3codHlwZS1saXN0KSBzcGVjaWZpY2F0aW9uIHRoYXQgY2FuIGJlIGFkZGVkIHRvIEMrKyBmdW5jdGlvbnMuCisgICAgIFRoZSBydW50aW1lIGV4YW1pbmVzIHRoZSB0aHJvd24gZXhjZXB0aW9uIHZzIHRoZSB0eXBlIGxpc3QsIGFuZCBpZgorICAgICB0aGUgZXhjZXB0aW9uIGRvZXMgbm90IG1hdGNoLCB0cmFuc2ZlcnMgY29udHJvbCB0byB0aGUgaGFuZGxlci4gIFRoZQorICAgICBub3JtYWwgaGFuZGxlciBmb3IgQysrIGNhbGxzIF9fY3hhX2NhbGxfdW5leHBlY3RlZC4gICovCisgIEVSVF9BTExPV0VEX0VYQ0VQVElPTlMsCisKKyAgLyogTVVTVF9OT1RfVEhST1cgcmVnaW9ucyBwcmV2ZW50IGFsbCBleGNlcHRpb25zIGZyb20gcHJvcGFnYXRpbmcuICBUaGlzCisgICAgIHJlZ2lvbiB0eXBlIGlzIHVzZWQgaW4gQysrIHRvIHN1cnJvdW5kIGRlc3RydWN0b3JzIGJlaW5nIHJ1biBpbnNpZGUgYQorICAgICBDTEVBTlVQIHJlZ2lvbi4gIFRoaXMgZGlmZmVycyBmcm9tIGFuIEFMTE9XRURfRVhDRVBUSU9OUyByZWdpb24gd2l0aAorICAgICBhbiBlbXB0eSB0eXBlIGxpc3QgaW4gdGhhdCB0aGUgcnVudGltZSBpcyBwcmVwYXJlZCB0byB0ZXJtaW5hdGUgdGhlCisgICAgIHByb2dyYW0gZGlyZWN0bHkuICBXZSBvbmx5IGdlbmVyYXRlIGNvZGUgZm9yIE1VU1RfTk9UX1RIUk9XIHJlZ2lvbnMKKyAgICAgYWxvbmcgY29udHJvbCBwYXRocyB0aGF0IGFyZSBhbHJlYWR5IGhhbmRsaW5nIGFuIGV4Y2VwdGlvbiB3aXRoaW4gdGhlCisgICAgIGN1cnJlbnQgZnVuY3Rpb24uICAqLworICBFUlRfTVVTVF9OT1RfVEhST1cKK307CisKKworLyogQSBsYW5kaW5nIHBhZCBmb3IgYSBnaXZlbiBleGNlcHRpb24gcmVnaW9uLiAgQW55IHRyYW5zZmVyIG9mIGNvbnRyb2wKKyAgIGZyb20gdGhlIEVIIHJ1bnRpbWUgdG8gdGhlIGZ1bmN0aW9uIGhhcHBlbnMgYXQgYSBsYW5kaW5nIHBhZC4gICovCisKK3N0cnVjdCBHVFkoKCkpIGVoX2xhbmRpbmdfcGFkX2QKK3sKKyAgLyogVGhlIGxpbmtlZCBsaXN0IG9mIGFsbCBsYW5kaW5nIHBhZHMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpb24uICAqLworICBzdHJ1Y3QgZWhfbGFuZGluZ19wYWRfZCAqbmV4dF9scDsKKworICAvKiBUaGUgcmVnaW9uIHdpdGggd2hpY2ggdGhpcyBsYW5kaW5nIHBhZCBpcyBhc3NvY2lhdGVkLiAgKi8KKyAgc3RydWN0IGVoX3JlZ2lvbl9kICpyZWdpb247CisKKyAgLyogQXQgdGhlIGdpbXBsZSBsZXZlbCwgdGhlIGxvY2F0aW9uIHRvIHdoaWNoIGNvbnRyb2wgd2lsbCBiZSB0cmFuc2ZlcnJlZAorICAgICBmb3IgdGhpcyBsYW5kaW5nIHBhZC4gIFRoZXJlIGNhbiBiZSBib3RoIEVIIGFuZCBub3JtYWwgZWRnZXMgaW50byB0aGUKKyAgICAgYmxvY2sgY29udGFpbmluZyB0aGUgcG9zdC1sYW5kaW5nLXBhZCBsYWJlbC4gICovCisgIHRyZWUgcG9zdF9sYW5kaW5nX3BhZDsKKworICAvKiBBdCB0aGUgcnRsIGxldmVsLCB0aGUgbG9jYXRpb24gdG8gd2hpY2ggdGhlIHJ1bnRpbWUgd2lsbCB0cmFuc2ZlcgorICAgICBjb250cm9sLiAgVGhpcyBkaWZmZXJzIGZyb20gdGhlIHBvc3QtbGFuZGluZy1wYWQgaW4gdGhhdCB0aGUgdGFyZ2V0J3MKKyAgICAgRVhDRVBUSU9OX1JFQ0VJVkVSIHBhdHRlcm4gd2lsbCBiZSBleHBhbmRlZCBoZXJlLCBhcyB3ZWxsIGFzIG90aGVyCisgICAgIGJvb2trZWVwaW5nIHNwZWNpZmljIHRvIGV4Y2VwdGlvbnMuICBUaGVyZSBtdXN0IG5vdCBiZSBub3JtYWwgZWRnZXMKKyAgICAgaW50byB0aGUgYmxvY2sgY29udGFpbmluZyB0aGUgbGFuZGluZy1wYWQgbGFiZWwuICAqLworICBydHggbGFuZGluZ19wYWQ7CisKKyAgLyogVGhlIGluZGV4IG9mIHRoaXMgbGFuZGluZyBwYWQgd2l0aGluIGZ1bi0+ZWgtPmxwX2FycmF5LiAgKi8KKyAgaW50IGluZGV4OworfTsKKworLyogQSBjYXRjaCBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCBhbiBFUlRfVFJZIHJlZ2lvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIGVoX2NhdGNoX2QKK3sKKyAgLyogVGhlIGRvdWJsZS1saW5rZWQgbGlzdCBvZiBhbGwgY2F0Y2ggaGFuZGxlcnMgZm9yIHRoZSByZWdpb24uICAqLworICBzdHJ1Y3QgZWhfY2F0Y2hfZCAqbmV4dF9jYXRjaDsKKyAgc3RydWN0IGVoX2NhdGNoX2QgKnByZXZfY2F0Y2g7CisKKyAgLyogQSBUUkVFX0xJU1Qgb2YgcnVudGltZSB0eXBlIG9iamVjdHMgdGhhdCB0aGlzIGNhdGNoIGhhbmRsZXIKKyAgICAgd2lsbCBjYXRjaCwgb3IgTlVMTCBpZiBhbGwgZXhjZXB0aW9ucyBhcmUgY2F1Z2h0LiAgKi8KKyAgdHJlZSB0eXBlX2xpc3Q7CisKKyAgLyogQSBUUkVFX0xJU1Qgb2YgSU5URUdFUl9DU1RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgdHlwZV9saXN0IGVudHJpZXMsCisgICAgIGhhdmluZyBiZWVuIG1hcHBlZCBieSBhc3NpZ25fZmlsdGVyX3ZhbHVlcy4gIFRoZXNlIGludGVnZXJzIGFyZSB0byBiZQorICAgICBjb21wYXJlZCBhZ2FpbnN0IHRoZSBfX2J1aWx0aW5fZWhfZmlsdGVyIHZhbHVlLiAgKi8KKyAgdHJlZSBmaWx0ZXJfbGlzdDsKKworICAvKiBUaGUgY29kZSB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBpZiB0aGlzIGNhdGNoIGhhbmRsZXIgbWF0Y2hlcyB0aGUKKyAgICAgdGhyb3duIGV4Y2VwdGlvbi4gIFRoaXMgbGFiZWwgaXMgb25seSBtYWludGFpbmVkIHVudGlsCisgICAgIHBhc3NfbG93ZXJfZWhfZGlzcGF0Y2gsIGF0IHdoaWNoIHBvaW50IGl0IGlzIGNsZWFyZWQuICAqLworICB0cmVlIGxhYmVsOworfTsKKworLyogRGVzY3JpYmVzIG9uZSBleGNlcHRpb24gcmVnaW9uLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZWhfcmVnaW9uX2QKK3sKKyAgLyogVGhlIGltbWVkaWF0ZWx5IHN1cnJvdW5kaW5nIHJlZ2lvbi4gICovCisgIHN0cnVjdCBlaF9yZWdpb25fZCAqb3V0ZXI7CisKKyAgLyogVGhlIGxpc3Qgb2YgaW1tZWRpYXRlbHkgY29udGFpbmVkIHJlZ2lvbnMuICAqLworICBzdHJ1Y3QgZWhfcmVnaW9uX2QgKmlubmVyOworICBzdHJ1Y3QgZWhfcmVnaW9uX2QgKm5leHRfcGVlcjsKKworICAvKiBUaGUgaW5kZXggb2YgdGhpcyByZWdpb24gd2l0aGluIGZ1bi0+ZWgtPnJlZ2lvbl9hcnJheS4gICovCisgIGludCBpbmRleDsKKworICAvKiBFYWNoIHJlZ2lvbiBkb2VzIGV4YWN0bHkgb25lIHRoaW5nLiAgKi8KKyAgZW51bSBlaF9yZWdpb25fdHlwZSB0eXBlOworCisgIC8qIEhvbGRzIHRoZSBhY3Rpb24gdG8gcGVyZm9ybSBiYXNlZCBvbiB0aGUgcHJlY2VkaW5nIHR5cGUuICAqLworICB1bmlvbiBlaF9yZWdpb25fdSB7CisgICAgc3RydWN0IGVoX3JlZ2lvbl91X3RyeSB7CisgICAgICAvKiBUaGUgZG91YmxlLWxpbmtlZCBsaXN0IG9mIGFsbCBjYXRjaCBoYW5kbGVycyBmb3IgdGhpcyByZWdpb24uICAqLworICAgICAgc3RydWN0IGVoX2NhdGNoX2QgKmZpcnN0X2NhdGNoOworICAgICAgc3RydWN0IGVoX2NhdGNoX2QgKmxhc3RfY2F0Y2g7CisgICAgfSBHVFkgKCh0YWcgKCJFUlRfVFJZIikpKSBlaF90cnk7CisKKyAgICBzdHJ1Y3QgZWhfcmVnaW9uX3VfYWxsb3dlZCB7CisgICAgICAvKiBBIFRSRUVfTElTVCBvZiBydW50aW1lIHR5cGUgb2JqZWN0cyBhbGxvd2VkIHRvIHBhc3MuICAqLworICAgICAgdHJlZSB0eXBlX2xpc3Q7CisgICAgICAvKiBUaGUgY29kZSB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBpZiB0aGUgdGhyb3duIGV4Y2VwdGlvbiBkb2VzCisJIG5vdCBtYXRjaCB0aGUgdHlwZSBsaXN0LiAgVGhpcyBsYWJlbCBpcyBvbmx5IG1haW50YWluZWQgdW50aWwKKwkgcGFzc19sb3dlcl9laF9kaXNwYXRjaCwgYXQgd2hpY2ggcG9pbnQgaXQgaXMgY2xlYXJlZC4gICovCisgICAgICB0cmVlIGxhYmVsOworICAgICAgLyogVGhlIGludGVnZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBieSB0aGUgcnVudGltZSB0byBzaWduYWwgdGhhdAorCSB3ZSBzaG91bGQgZXhlY3V0ZSB0aGUgY29kZSBhdCBMQUJFTC4gIFRoaXMgaW50ZWdlciBpcyBhc3NpZ25lZAorCSBieSBhc3NpZ25fZmlsdGVyX3ZhbHVlcyBhbmQgaXMgdG8gYmUgY29tcGFyZWQgYWdhaW5zdCB0aGUKKwkgX19idWlsdGluX2VoX2ZpbHRlciB2YWx1ZS4gICovCisgICAgICBpbnQgZmlsdGVyOworICAgIH0gR1RZICgodGFnICgiRVJUX0FMTE9XRURfRVhDRVBUSU9OUyIpKSkgYWxsb3dlZDsKKworICAgIHN0cnVjdCBlaF9yZWdpb25fdV9tdXN0X25vdF90aHJvdyB7CisgICAgICAvKiBBIGZ1bmN0aW9uIGRlY2wgdG8gYmUgaW52b2tlZCBpZiB0aGlzIHJlZ2lvbiBpcyBhY3R1YWxseSByZWFjaGFibGUKKwkgZnJvbSB3aXRoaW4gdGhlIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBpbXBsZW1lbnRhYmxlIGZyb20gdGhlIHJ1bnRpbWUuCisJIFRoZSBub3JtYWwgd2F5IGZvciB0aGlzIHRvIGhhcHBlbiBpcyBmb3IgdGhlcmUgdG8gYmUgYSBDTEVBTlVQIHJlZ2lvbgorCSBjb250YWluZWQgd2l0aGluIHRoaXMgTVVTVF9OT1RfVEhST1cgcmVnaW9uLiAgTm90ZSB0aGF0IGlmIHRoZQorCSBydW50aW1lIGhhbmRsZXMgdGhlIE1VU1RfTk9UX1RIUk9XIHJlZ2lvbiwgd2UgaGF2ZSBubyBjb250cm9sIG92ZXIKKwkgd2hhdCB0ZXJtaW5hdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQ7IGl0IHdpbGwgYmUgZGVjaWRlZCBieSB0aGUKKwkgcGVyc29uYWxpdHkgZnVuY3Rpb24gaW4gZWZmZWN0IGZvciB0aGlzIENJRS4gICovCisgICAgICB0cmVlIGZhaWx1cmVfZGVjbDsKKyAgICAgIC8qIFRoZSBsb2NhdGlvbiBhc3NpZ25lZCB0byB0aGUgY2FsbCBvZiBGQUlMVVJFX0RFQ0wsIGlmIGV4cGFuZGVkLiAgKi8KKyAgICAgIGxvY2F0aW9uX3QgZmFpbHVyZV9sb2M7CisgICAgfSBHVFkgKCh0YWcgKCJFUlRfTVVTVF9OT1RfVEhST1ciKSkpIG11c3Rfbm90X3Rocm93OworICB9IEdUWSAoKGRlc2MgKCIlMC50eXBlIikpKSB1OworCisgIC8qIFRoZSBsaXN0IG9mIGxhbmRpbmcgcGFkcyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWdpb24uICAqLworICBzdHJ1Y3QgZWhfbGFuZGluZ19wYWRfZCAqbGFuZGluZ19wYWRzOworCisgIC8qIEVYQ19QVFIgYW5kIEZJTFRFUiB2YWx1ZXMgY29waWVkIGZyb20gdGhlIHJ1bnRpbWUgZm9yIHRoaXMgcmVnaW9uLgorICAgICBFYWNoIHJlZ2lvbiBnZXRzIGl0cyBvd24gcHN1ZWRvcyBzbyB0aGF0IGlmIHRoZXJlIGFyZSBuZXN0ZWQgZXhjZXB0aW9ucworICAgICB3ZSBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZXMgb2YgdGhlIGZpcnN0IGV4Y2VwdGlvbi4gICovCisgIHJ0eCBleGNfcHRyX3JlZywgZmlsdGVyX3JlZzsKKworICAvKiBUcnVlIGlmIHRoaXMgcmVnaW9uIHNob3VsZCB1c2UgX19jeGFfZW5kX2NsZWFudXAgaW5zdGVhZAorICAgICBvZiBfVW53aW5kX1Jlc3VtZS4gICovCisgIGJvb2wgdXNlX2N4YV9lbmRfY2xlYW51cDsKK307CisKK3R5cGVkZWYgc3RydWN0IGVoX2xhbmRpbmdfcGFkX2QgKmVoX2xhbmRpbmdfcGFkOwordHlwZWRlZiBzdHJ1Y3QgZWhfY2F0Y2hfZCAqZWhfY2F0Y2g7Cit0eXBlZGVmIHN0cnVjdCBlaF9yZWdpb25fZCAqZWhfcmVnaW9uOworCisKKworCisvKiBUaGUgZXhjZXB0aW9uIHN0YXR1cyBmb3IgZWFjaCBmdW5jdGlvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIGVoX3N0YXR1cworeworICAvKiBUaGUgdHJlZSBvZiBhbGwgcmVnaW9ucyBmb3IgdGhpcyBmdW5jdGlvbi4gICovCisgIGVoX3JlZ2lvbiByZWdpb25fdHJlZTsKKworICAvKiBUaGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBhbiBpbmRleGFibGUgYXJyYXkuICAqLworICB2ZWM8ZWhfcmVnaW9uLCB2YV9nYz4gKnJlZ2lvbl9hcnJheTsKKworICAvKiBUaGUgbGFuZGluZyBwYWRzIGFzIGFuIGluZGV4YWJsZSBhcnJheS4gICovCisgIHZlYzxlaF9sYW5kaW5nX3BhZCwgdmFfZ2M+ICpscF9hcnJheTsKKworICAvKiBBdCB0aGUgZ2ltcGxlIGxldmVsLCBhIG1hcHBpbmcgZnJvbSBnaW1wbGUgc3RhdGVtZW50IHRvIGxhbmRpbmcgcGFkCisgICAgIG9yIG11c3Qtbm90LXRocm93IHJlZ2lvbi4gIFNlZSByZWNvcmRfc3RtdF9laF9yZWdpb24uICAqLworICBodGFiX3QgR1RZKChwYXJhbV9pcyAoc3RydWN0IHRocm93X3N0bXRfbm9kZSkpKSB0aHJvd19zdG10X3RhYmxlOworCisgIC8qIEFsbCBvZiB0aGUgcnVudGltZSB0eXBlIGRhdGEgdXNlZCBieSB0aGUgZnVuY3Rpb24uICBUaGVzZSBvYmplY3RzCisgICAgIGFyZSBlbWl0dGVkIHRvIHRoZSBsYW5nLXNwZWNpZmljLWRhdGEtYXJlYSBmb3IgdGhlIGZ1bmN0aW9uLiAgKi8KKyAgdmVjPHRyZWUsIHZhX2djPiAqdHR5cGVfZGF0YTsKKworICAvKiBUaGUgdGFibGUgb2YgYWxsIGFjdGlvbiBjaGFpbnMuICBUaGVzZSBlbmNvZGUgdGhlIGVoX3JlZ2lvbiB0cmVlIGluCisgICAgIGEgY29tcGFjdCBmb3JtIGZvciB1c2UgYnkgdGhlIHJ1bnRpbWUsIGFuZCBpcyBhbHNvIGVtaXR0ZWQgdG8gdGhlCisgICAgIGxhbmctc3BlY2lmaWMtZGF0YS1hcmVhLiAgTm90ZSB0aGF0IHRoZSBBUk0gRUFCSSB1c2VzIGEgZGlmZmVyZW50CisgICAgIGZvcm1hdCBmb3IgdGhlIGVuY29kaW5nIHRoYW4gYWxsIG90aGVyIHBvcnRzLiAgKi8KKyAgdW5pb24gZWhfc3RhdHVzX3UgeworICAgIHZlYzx0cmVlLCB2YV9nYz4gKkdUWSgodGFnICgiMSIpKSkgYXJtX2VhYmk7CisgICAgdmVjPHVjaGFyLCB2YV9nYz4gKkdUWSgodGFnICgiMCIpKSkgb3RoZXI7CisgIH0gR1RZICgoZGVzYyAoInRhcmdldG0uYXJtX2VhYmlfdW53aW5kZXIiKSkpIGVoc3BlY19kYXRhOworfTsKKworCisvKiBJbnZva2VzIENBTExCQUNLIGZvciBldmVyeSBleGNlcHRpb24gaGFuZGxlciBsYWJlbC4gIE9ubHkgdXNlZCBieSBvbGQKKyAgIGxvb3AgaGFja2VyeTsgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IG5ldyBjb2RlLiAgKi8KK2V4dGVybiB2b2lkIGZvcl9lYWNoX2VoX2xhYmVsICh2b2lkICgqKSAocnR4KSk7CisKK2V4dGVybiB2b2lkIGluaXRfZWhfZm9yX2Z1bmN0aW9uICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgcmVtb3ZlX2VoX2xhbmRpbmdfcGFkIChlaF9sYW5kaW5nX3BhZCk7CitleHRlcm4gdm9pZCByZW1vdmVfZWhfaGFuZGxlciAoZWhfcmVnaW9uKTsKK2V4dGVybiB2b2lkIHJlbW92ZV91bnJlYWNoYWJsZV9laF9yZWdpb25zIChzYml0bWFwKTsKKworZXh0ZXJuIGJvb2wgY3VycmVudF9mdW5jdGlvbl9oYXNfZXhjZXB0aW9uX2hhbmRsZXJzICh2b2lkKTsKK2V4dGVybiB2b2lkIG91dHB1dF9mdW5jdGlvbl9leGNlcHRpb25fdGFibGUgKGNvbnN0IGNoYXIgKik7CisKK2V4dGVybiBydHggZXhwYW5kX2J1aWx0aW5fZWhfcG9pbnRlciAodHJlZSk7CitleHRlcm4gcnR4IGV4cGFuZF9idWlsdGluX2VoX2ZpbHRlciAodHJlZSk7CitleHRlcm4gcnR4IGV4cGFuZF9idWlsdGluX2VoX2NvcHlfdmFsdWVzICh0cmVlKTsKK2V4dGVybiB2b2lkIGV4cGFuZF9idWlsdGluX3Vud2luZF9pbml0ICh2b2lkKTsKK2V4dGVybiBydHggZXhwYW5kX2J1aWx0aW5fZWhfcmV0dXJuX2RhdGFfcmVnbm8gKHRyZWUpOworZXh0ZXJuIHJ0eCBleHBhbmRfYnVpbHRpbl9leHRyYWN0X3JldHVybl9hZGRyICh0cmVlKTsKK2V4dGVybiB2b2lkIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzICh0cmVlKTsKK2V4dGVybiBydHggZXhwYW5kX2J1aWx0aW5fZnJvYl9yZXR1cm5fYWRkciAodHJlZSk7CitleHRlcm4gcnR4IGV4cGFuZF9idWlsdGluX2R3YXJmX3NwX2NvbHVtbiAodm9pZCk7CitleHRlcm4gdm9pZCBleHBhbmRfYnVpbHRpbl9laF9yZXR1cm4gKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2VoX3JldHVybiAodm9pZCk7CitleHRlcm4gcnR4IGV4cGFuZF9idWlsdGluX2V4dGVuZF9wb2ludGVyICh0cmVlKTsKK2V4dGVybiB2b2lkIGV4cGFuZF9kdzJfbGFuZGluZ19wYWRfZm9yX3JlZ2lvbiAoZWhfcmVnaW9uKTsKKwordHlwZWRlZiB0cmVlICgqZHVwbGljYXRlX2VoX3JlZ2lvbnNfbWFwKSAodHJlZSwgdm9pZCAqKTsKK2V4dGVybiBzdHJ1Y3QgcG9pbnRlcl9tYXBfdCAqZHVwbGljYXRlX2VoX3JlZ2lvbnMKKyAgKHN0cnVjdCBmdW5jdGlvbiAqLCBlaF9yZWdpb24sIGludCwgZHVwbGljYXRlX2VoX3JlZ2lvbnNfbWFwLCB2b2lkICopOworCitleHRlcm4gdm9pZCBzamxqX2VtaXRfZnVuY3Rpb25fZXhpdF9hZnRlciAocnR4KTsKKworZXh0ZXJuIGVoX3JlZ2lvbiBnZW5fZWhfcmVnaW9uX2NsZWFudXAgKGVoX3JlZ2lvbik7CitleHRlcm4gZWhfcmVnaW9uIGdlbl9laF9yZWdpb25fdHJ5IChlaF9yZWdpb24pOworZXh0ZXJuIGVoX3JlZ2lvbiBnZW5fZWhfcmVnaW9uX2FsbG93ZWQgKGVoX3JlZ2lvbiwgdHJlZSk7CitleHRlcm4gZWhfcmVnaW9uIGdlbl9laF9yZWdpb25fbXVzdF9ub3RfdGhyb3cgKGVoX3JlZ2lvbik7CisKK2V4dGVybiBlaF9jYXRjaCBnZW5fZWhfcmVnaW9uX2NhdGNoIChlaF9yZWdpb24sIHRyZWUpOworZXh0ZXJuIGVoX2xhbmRpbmdfcGFkIGdlbl9laF9sYW5kaW5nX3BhZCAoZWhfcmVnaW9uKTsKKworZXh0ZXJuIGVoX3JlZ2lvbiBnZXRfZWhfcmVnaW9uX2Zyb21fbnVtYmVyX2ZuIChzdHJ1Y3QgZnVuY3Rpb24gKiwgaW50KTsKK2V4dGVybiBlaF9yZWdpb24gZ2V0X2VoX3JlZ2lvbl9mcm9tX251bWJlciAoaW50KTsKK2V4dGVybiBlaF9sYW5kaW5nX3BhZCBnZXRfZWhfbGFuZGluZ19wYWRfZnJvbV9udW1iZXJfZm4gKHN0cnVjdCBmdW5jdGlvbiosaW50KTsKK2V4dGVybiBlaF9sYW5kaW5nX3BhZCBnZXRfZWhfbGFuZGluZ19wYWRfZnJvbV9udW1iZXIgKGludCk7CitleHRlcm4gZWhfcmVnaW9uIGdldF9laF9yZWdpb25fZnJvbV9scF9udW1iZXJfZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBpbnQpOworZXh0ZXJuIGVoX3JlZ2lvbiBnZXRfZWhfcmVnaW9uX2Zyb21fbHBfbnVtYmVyIChpbnQpOworCitleHRlcm4gZWhfcmVnaW9uIGVoX3JlZ2lvbl9vdXRlcm1vc3QgKHN0cnVjdCBmdW5jdGlvbiAqLCBlaF9yZWdpb24sIGVoX3JlZ2lvbik7CisKK2V4dGVybiB2b2lkIG1ha2VfcmVnX2VoX3JlZ2lvbl9ub3RlIChydHggaW5zbiwgaW50IGVjZl9mbGFncywgaW50IGxwX25yKTsKK2V4dGVybiB2b2lkIG1ha2VfcmVnX2VoX3JlZ2lvbl9ub3RlX25vdGhyb3dfbm9ub25sb2NhbCAocnR4KTsKKworZXh0ZXJuIHZvaWQgdmVyaWZ5X2VoX3RyZWUgKHN0cnVjdCBmdW5jdGlvbiAqKTsKK2V4dGVybiB2b2lkIGR1bXBfZWhfdHJlZSAoRklMRSAqLCBzdHJ1Y3QgZnVuY3Rpb24gKik7Cit2b2lkIGRlYnVnX2VoX3RyZWUgKHN0cnVjdCBmdW5jdGlvbiAqKTsKK2V4dGVybiB2b2lkIGFkZF90eXBlX2Zvcl9ydW50aW1lICh0cmVlKTsKK2V4dGVybiB0cmVlIGxvb2t1cF90eXBlX2Zvcl9ydW50aW1lICh0cmVlKTsKK2V4dGVybiB2b2lkIGFzc2lnbl9maWx0ZXJfdmFsdWVzICh2b2lkKTsKKworZXh0ZXJuIGVoX3JlZ2lvbiBnZXRfZWhfcmVnaW9uX2Zyb21fcnR4IChjb25zdF9ydHgpOworZXh0ZXJuIGVoX2xhbmRpbmdfcGFkIGdldF9laF9sYW5kaW5nX3BhZF9mcm9tX3J0eCAoY29uc3RfcnR4KTsKKworZXh0ZXJuIHZvaWQgZmluaXNoX2VoX2dlbmVyYXRpb24gKHZvaWQpOworCitzdHJ1Y3QgR1RZKCgpKSB0aHJvd19zdG10X25vZGUgeworICBnaW1wbGUgc3RtdDsKKyAgaW50IGxwX25yOworfTsKKworZXh0ZXJuIHN0cnVjdCBodGFiICpnZXRfZWhfdGhyb3dfc3RtdF90YWJsZSAoc3RydWN0IGZ1bmN0aW9uICopOworZXh0ZXJuIHZvaWQgc2V0X2VoX3Rocm93X3N0bXRfdGFibGUgKHN0cnVjdCBmdW5jdGlvbiAqLCBzdHJ1Y3QgaHRhYiAqKTsKKworZW51bSBlaF9wZXJzb25hbGl0eV9raW5kIHsKKyAgZWhfcGVyc29uYWxpdHlfbm9uZSwKKyAgZWhfcGVyc29uYWxpdHlfYW55LAorICBlaF9wZXJzb25hbGl0eV9sYW5nCit9OworCitleHRlcm4gZW51bSBlaF9wZXJzb25hbGl0eV9raW5kCitmdW5jdGlvbl9uZWVkc19laF9wZXJzb25hbGl0eSAoc3RydWN0IGZ1bmN0aW9uICopOworCisvKiBQcmUtb3JkZXIgaXRlcmF0aW9uIHdpdGhpbiB0aGUgZWhfcmVnaW9uIHRyZWUuICAqLworCitzdGF0aWMgaW5saW5lIGVoX3JlZ2lvbgorZWhyX25leHQgKGVoX3JlZ2lvbiByLCBlaF9yZWdpb24gc3RhcnQpCit7CisgIGlmIChyLT5pbm5lcikKKyAgICByID0gci0+aW5uZXI7CisgIGVsc2UgaWYgKHItPm5leHRfcGVlciAmJiByICE9IHN0YXJ0KQorICAgIHIgPSByLT5uZXh0X3BlZXI7CisgIGVsc2UKKyAgICB7CisgICAgICBkbworCXsKKwkgIHIgPSByLT5vdXRlcjsKKwkgIGlmIChyID09IHN0YXJ0KQorCSAgICByZXR1cm4gTlVMTDsKKwl9CisgICAgICB3aGlsZSAoci0+bmV4dF9wZWVyID09IE5VTEwpOworICAgICAgciA9IHItPm5leHRfcGVlcjsKKyAgICB9CisgIHJldHVybiByOworfQorCisjZGVmaW5lIEZPUl9BTExfRUhfUkVHSU9OX0FUKFIsIFNUQVJUKSBcCisgIGZvciAoKFIpID0gKFNUQVJUKTsgKFIpICE9IE5VTEw7IChSKSA9IGVocl9uZXh0IChSLCBTVEFSVCkpCisKKyNkZWZpbmUgRk9SX0FMTF9FSF9SRUdJT05fRk4oUiwgRk4pIFwKKyAgZm9yICgoUikgPSAoRk4pLT5laC0+cmVnaW9uX3RyZWU7IChSKSAhPSBOVUxMOyAoUikgPSBlaHJfbmV4dCAoUiwgTlVMTCkpCisKKyNkZWZpbmUgRk9SX0FMTF9FSF9SRUdJT04oUikgRk9SX0FMTF9FSF9SRUdJT05fRk4gKFIsIGNmdW4pCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZmlsZW5hbWVzLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZmlsZW5hbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc5OWE1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9maWxlbmFtZXMuaApAQCAtMCwwICsxLDk3IEBACisvKiBNYWNyb3MgZm9yIHRha2luZyBhcGFydCwgaW50ZXJwcmV0aW5nIGFuZCBwcm9jZXNzaW5nIGZpbGUgbmFtZXMuCisKKyAgIFRoZXNlIGFyZSBoZXJlIGJlY2F1c2Ugc29tZSBub24tUG9zaXggKGEuay5hLiBET1Npc2gpIHN5c3RlbXMgaGF2ZQorICAgZHJpdmUgbGV0dGVyIGJyYWluLWRhbWFnZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGFic29sdXRlIGZpbGUgbmFtZSwKKyAgIHVzZSBmb3J3YXJkLSBhbmQgYmFjay1zbGFzaCBpbiBwYXRoIG5hbWVzIGludGVyY2hhbmdlYWJseSwgYW5kCisgICBzb21lIG9mIHRoZW0gaGF2ZSBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgbmFtZXMuCisKKyAgIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDA3LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBCRkQsIHRoZSBCaW5hcnkgRmlsZSBEZXNjcmlwdG9yIGxpYnJhcnkuCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2lmbmRlZiBGSUxFTkFNRVNfSAorI2RlZmluZSBGSUxFTkFNRVNfSAorCisjaW5jbHVkZSAiaGFzaHRhYi5oIiAvKiBmb3IgaGFzaHZhbF90ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NU0RPU19fKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX09TMl9fKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKQorIyAgaWZuZGVmIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjICAgIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSAxCisjICBlbmRpZgorIyAgaWZuZGVmIEhBVkVfQ0FTRV9JTlNFTlNJVElWRV9GSUxFX1NZU1RFTQorIyAgICBkZWZpbmUgSEFWRV9DQVNFX0lOU0VOU0lUSVZFX0ZJTEVfU1lTVEVNIDEKKyMgIGVuZGlmCisjICBkZWZpbmUgSEFTX0RSSVZFX1NQRUMoZikgSEFTX0RPU19EUklWRV9TUEVDIChmKQorIyAgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoYykgSVNfRE9TX0RJUl9TRVBBUkFUT1IgKGMpCisjICBkZWZpbmUgSVNfQUJTT0xVVEVfUEFUSChmKSBJU19ET1NfQUJTT0xVVEVfUEFUSCAoZikKKyNlbHNlIC8qIG5vdCBET1Npc2ggKi8KKyMgIGlmIGRlZmluZWQoX19BUFBMRV9fKQorIyAgICBpZm5kZWYgSEFWRV9DQVNFX0lOU0VOU0lUSVZFX0ZJTEVfU1lTVEVNCisjICAgICAgZGVmaW5lIEhBVkVfQ0FTRV9JTlNFTlNJVElWRV9GSUxFX1NZU1RFTSAxCisjICAgIGVuZGlmCisjICBlbmRpZiAvKiBfX0FQUExFX18gKi8KKyMgIGRlZmluZSBIQVNfRFJJVkVfU1BFQyhmKSAoMCkKKyMgIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGMpIElTX1VOSVhfRElSX1NFUEFSQVRPUiAoYykKKyMgIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKGYpIElTX1VOSVhfQUJTT0xVVEVfUEFUSCAoZikKKyNlbmRpZgorCisjZGVmaW5lIElTX0RJUl9TRVBBUkFUT1JfMShkb3NfYmFzZWQsIGMpCQkJCVwKKyAgKCgoYykgPT0gJy8nKQkJCQkJCQkJXAorICAgfHwgKCgoYykgPT0gJ1xcJykgJiYgKGRvc19iYXNlZCkpKQorCisjZGVmaW5lIEhBU19EUklWRV9TUEVDXzEoZG9zX2Jhc2VkLCBmKQkJCVwKKyAgKChmKVswXSAmJiAoKGYpWzFdID09ICc6JykgJiYgKGRvc19iYXNlZCkpCisKKy8qIFJlbW92ZSB0aGUgZHJpdmUgc3BlYyBmcm9tIEYsIGFzc3VtaW5nIEhBU19EUklWRV9TUEVDIChmKS4KKyAgIFRoZSByZXN1bHQgaXMgYSBwb2ludGVyIHRvIHRoZSByZW1haW5kZXIgb2YgRi4gICovCisjZGVmaW5lIFNUUklQX0RSSVZFX1NQRUMoZikJKChmKSArIDIpCisKKyNkZWZpbmUgSVNfRE9TX0RJUl9TRVBBUkFUT1IoYykgSVNfRElSX1NFUEFSQVRPUl8xICgxLCBjKQorI2RlZmluZSBJU19ET1NfQUJTT0xVVEVfUEFUSChmKSBJU19BQlNPTFVURV9QQVRIXzEgKDEsIGYpCisjZGVmaW5lIEhBU19ET1NfRFJJVkVfU1BFQyhmKSBIQVNfRFJJVkVfU1BFQ18xICgxLCBmKQorCisjZGVmaW5lIElTX1VOSVhfRElSX1NFUEFSQVRPUihjKSBJU19ESVJfU0VQQVJBVE9SXzEgKDAsIGMpCisjZGVmaW5lIElTX1VOSVhfQUJTT0xVVEVfUEFUSChmKSBJU19BQlNPTFVURV9QQVRIXzEgKDAsIGYpCisKKy8qIE5vdGUgdGhhdCB3aGVuIERPU19CQVNFRCBpcyB0cnVlLCBJU19BQlNPTFVURV9QQVRIIGFjY2VwdHMgZDpmb28gYXMKKyAgIHdlbGwsIGFsdGhvdWdoIGl0IGlzIG9ubHkgc2VtaS1hYnNvbHV0ZS4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgdXNlcnMKKyAgIG9mIElTX0FCU09MVVRFX1BBVEggd2FudCB0byBrbm93IHdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgY3VycmVudAorICAgd29ya2luZyBkaXJlY3RvcnkgdG8gYSBmaWxlIG5hbWUsIHdoaWNoIHNob3VsZCBub3QgYmUgZG9uZSB3aXRoIGEKKyAgIG5hbWUgbGlrZSBkOmZvby4gICovCisjZGVmaW5lIElTX0FCU09MVVRFX1BBVEhfMShkb3NfYmFzZWQsIGYpCQkgXAorICAoSVNfRElSX1NFUEFSQVRPUl8xIChkb3NfYmFzZWQsIChmKVswXSkJCSBcCisgICB8fCBIQVNfRFJJVkVfU1BFQ18xIChkb3NfYmFzZWQsIGYpKQorCitleHRlcm4gaW50IGZpbGVuYW1lX2NtcCAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKKyNkZWZpbmUgRklMRU5BTUVfQ01QKHMxLCBzMikJZmlsZW5hbWVfY21wKHMxLCBzMikKKworZXh0ZXJuIGludCBmaWxlbmFtZV9uY21wIChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsCisJCQkgIHNpemVfdCBuKTsKKworZXh0ZXJuIGhhc2h2YWxfdCBmaWxlbmFtZV9oYXNoIChjb25zdCB2b2lkICpzKTsKKworZXh0ZXJuIGludCBmaWxlbmFtZV9lcSAoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIEZJTEVOQU1FU19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZml4ZWQtdmFsdWUuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9maXhlZC12YWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTQ2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZml4ZWQtdmFsdWUuaApAQCAtMCwwICsxLDExNiBAQAorLyogRml4ZWQtcG9pbnQgYXJpdGhtZXRpYyBzdXBwb3J0LgorICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19GSVhFRF9WQUxVRV9ICisjZGVmaW5lIEdDQ19GSVhFRF9WQUxVRV9ICisKKyNpbmNsdWRlICJtYWNobW9kZS5oIgorI2luY2x1ZGUgInJlYWwuaCIKKyNpbmNsdWRlICJkb3VibGUtaW50LmgiCisKK3N0cnVjdCBHVFkoKCkpIGZpeGVkX3ZhbHVlCit7CisgIGRvdWJsZV9pbnQgZGF0YTsJCS8qIFN0b3JlIGRhdGEgdXAgdG8gMiB3aWRlIGludGVnZXJzLiAgKi8KKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsJLyogVXNlIG1hY2hpbmUgbW9kZSB0byBrbm93IElCSVQgYW5kIEZCSVQuICAqLworfTsKKworI2RlZmluZSBGSVhFRF9WQUxVRV9UWVBFIHN0cnVjdCBmaXhlZF92YWx1ZQorCisjZGVmaW5lIE1BWF9GQ09OU1QwCTE4CS8qIEZvciBzdG9yaW5nIDE4IGZpeGVkLXBvaW50IHplcm9zIHBlcgorCQkJCSAgIGZyYWN0LCB1ZnJhY3QsIGFjY3VtLCBhbmQgdWFjY3VtIG1vZGVzIC4gICovCisjZGVmaW5lIE1BWF9GQ09OU1QxCTgJLyogRm9yIHN0b3JpbmcgOCBmaXhlZC1wb2ludCBvbmVzIHBlciBhY2N1bQorCQkJCSAgIGFuZCB1YWNjdW0gbW9kZXMuICAqLworLyogQ29uc3RhbnQgZml4ZWQtcG9pbnQgdmFsdWVzIDAgYW5kIDEuICAqLworZXh0ZXJuIEZJWEVEX1ZBTFVFX1RZUEUgZmNvbnN0MFtNQVhfRkNPTlNUMF07CitleHRlcm4gRklYRURfVkFMVUVfVFlQRSBmY29uc3QxW01BWF9GQ09OU1QxXTsKKworLyogTWFjcm9zIHRvIGFjY2VzcyBmY29uc3QwIGFuZCBmY29uc3QxIHZpYSBtYWNoaW5lIG1vZGVzLiAgKi8KKyNkZWZpbmUgRkNPTlNUMChtb2RlKQlmY29uc3QwW21vZGUgLSBRUW1vZGVdCisjZGVmaW5lIEZDT05TVDEobW9kZSkJZmNvbnN0MVttb2RlIC0gSEFtb2RlXQorCisvKiBSZXR1cm4gYSBDT05TVF9GSVhFRCB3aXRoIHZhbHVlIFIgYW5kIG1vZGUgTS4gICovCisjZGVmaW5lIENPTlNUX0ZJWEVEX0ZST01fRklYRURfVkFMVUUociwgbSkgXAorICBjb25zdF9maXhlZF9mcm9tX2ZpeGVkX3ZhbHVlIChyLCBtKQorZXh0ZXJuIHJ0eCBjb25zdF9maXhlZF9mcm9tX2ZpeGVkX3ZhbHVlIChGSVhFRF9WQUxVRV9UWVBFLCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIENvbnN0cnVjdCBhIEZJWEVEX1ZBTFVFIGZyb20gYSBiaXQgcGF5bG9hZCBhbmQgbWFjaGluZSBtb2RlIE1PREUuCisgICBUaGUgYml0cyBpbiBQQVlMT0FEIGFyZSBzaWduLWV4dGVuZGVkL3plcm8tZXh0ZW5kZWQgYWNjb3JkaW5nIHRvIE1PREUuICAqLworZXh0ZXJuIEZJWEVEX1ZBTFVFX1RZUEUgZml4ZWRfZnJvbV9kb3VibGVfaW50IChkb3VibGVfaW50LAorCQkJCQkJICAgICBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIFJldHVybiBhIENPTlNUX0ZJWEVEIGZyb20gYSBiaXQgcGF5bG9hZCBhbmQgbWFjaGluZSBtb2RlIE1PREUuCisgICBUaGUgYml0cyBpbiBQQVlMT0FEIGFyZSBzaWduLWV4dGVuZGVkL3plcm8tZXh0ZW5kZWQgYWNjb3JkaW5nIHRvIE1PREUuICAqLworc3RhdGljIGlubGluZSBydHgKK2NvbnN0X2ZpeGVkX2Zyb21fZG91YmxlX2ludCAoZG91YmxlX2ludCBwYXlsb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQoreworICByZXR1cm4KKyAgICBjb25zdF9maXhlZF9mcm9tX2ZpeGVkX3ZhbHVlIChmaXhlZF9mcm9tX2RvdWJsZV9pbnQgKHBheWxvYWQsIG1vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUpOworfQorCisvKiBJbml0aWFsaXplIGZyb20gYSBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIHN0cmluZy4gICovCitleHRlcm4gdm9pZCBmaXhlZF9mcm9tX3N0cmluZyAoRklYRURfVkFMVUVfVFlQRSAqLCBjb25zdCBjaGFyICosCisJCQkgICAgICAgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBJbiB0cmVlLmM6IHdyYXAgdXAgYSBGSVhFRF9WQUxVRV9UWVBFIGluIGEgdHJlZSBub2RlLiAgKi8KK2V4dGVybiB0cmVlIGJ1aWxkX2ZpeGVkICh0cmVlLCBGSVhFRF9WQUxVRV9UWVBFKTsKKworLyogRXh0ZW5kIG9yIHRydW5jYXRlIHRvIGEgbmV3IG1vZGUuICAqLworZXh0ZXJuIGJvb2wgZml4ZWRfY29udmVydCAoRklYRURfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgIGNvbnN0IEZJWEVEX1ZBTFVFX1RZUEUgKiwgYm9vbCk7CisKKy8qIENvbnZlcnQgdG8gYSBmaXhlZC1wb2ludCBtb2RlIGZyb20gYW4gaW50ZWdlci4gICovCitleHRlcm4gYm9vbCBmaXhlZF9jb252ZXJ0X2Zyb21faW50IChGSVhFRF9WQUxVRV9UWVBFICosIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCSAgICBkb3VibGVfaW50LCBib29sLCBib29sKTsKKworLyogQ29udmVydCB0byBhIGZpeGVkLXBvaW50IG1vZGUgZnJvbSBhIHJlYWwuICAqLworZXh0ZXJuIGJvb2wgZml4ZWRfY29udmVydF9mcm9tX3JlYWwgKEZJWEVEX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICAgICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgYm9vbCk7CisKKy8qIENvbnZlcnQgdG8gYSByZWFsIG1vZGUgZnJvbSBhIGZpeGVkLXBvaW50LiAgKi8KK2V4dGVybiB2b2lkIHJlYWxfY29udmVydF9mcm9tX2ZpeGVkIChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICAgICBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICopOworCisvKiBDb21wYXJlIHR3byBmaXhlZC1wb2ludCBvYmplY3RzIGZvciBiaXR3aXNlIGlkZW50aXR5LiAgKi8KK2V4dGVybiBib29sIGZpeGVkX2lkZW50aWNhbCAoY29uc3QgRklYRURfVkFMVUVfVFlQRSAqLCBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICopOworCisvKiBDYWxjdWxhdGUgYSBoYXNoIHZhbHVlLiAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgZml4ZWRfaGFzaCAoY29uc3QgRklYRURfVkFMVUVfVFlQRSAqKTsKKworI2RlZmluZSBGSVhFRF9WQUxVRVNfSURFTlRJQ0FMKHgsIHkpCWZpeGVkX2lkZW50aWNhbCAoJih4KSwgJih5KSkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmaXhlZC1wb2ludCB2YWx1ZSBYIGlzIG5lZ2F0aXZlLiAgKi8KKyNkZWZpbmUgRklYRURfVkFMVUVfTkVHQVRJVkUoeCkJCWZpeGVkX2lzbmVnICgmKHgpKQorCisvKiBSZW5kZXIgRiBhcyBhIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuICAqLworZXh0ZXJuIHZvaWQgZml4ZWRfdG9fZGVjaW1hbCAoY2hhciAqc3RyLCBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICosIHNpemVfdCk7CisKKy8qIEJpbmFyeSBvciB1bmFyeSBhcml0aG1ldGljIG9uIHRyZWVfY29kZS4gICovCitleHRlcm4gYm9vbCBmaXhlZF9hcml0aG1ldGljIChGSVhFRF9WQUxVRV9UWVBFICosIGludCwgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqLAorCQkJICAgICAgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqLCBib29sKTsKKworLyogQ29tcGFyZSBmaXhlZC1wb2ludCB2YWx1ZXMgYnkgdHJlZV9jb2RlLiAgKi8KK2V4dGVybiBib29sIGZpeGVkX2NvbXBhcmUgKGludCwgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqLAorCQkJICAgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqKTsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmaXhlZC1wb2ludCB2YWx1ZSBYIGlzIG5lZ2F0aXZlLiAgKi8KK2V4dGVybiBib29sIGZpeGVkX2lzbmVnIChjb25zdCBGSVhFRF9WQUxVRV9UWVBFICopOworCisjZW5kaWYgLyogR0NDX0ZJWEVEX1ZBTFVFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9mbGFnLXR5cGVzLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZmxhZy10eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYzVkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZmxhZy10eXBlcy5oCkBAIC0wLDAgKzEsMTk0IEBACisvKiBDb21waWxhdGlvbiBzd2l0Y2ggZmxhZyB0eXBlIGRlZmluaXRpb25zIGZvciBHQ0MuCisgICBDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0ZMQUdfVFlQRVNfSAorI2RlZmluZSBHQ0NfRkxBR19UWVBFU19ICisKK2VudW0gZGVidWdfaW5mb190eXBlCit7CisgIE5PX0RFQlVHLAkgICAgLyogV3JpdGUgbm8gZGVidWcgaW5mby4gICovCisgIERCWF9ERUJVRywJICAgIC8qIFdyaXRlIEJTRCAuc3RhYnMgZm9yIERCWCAodXNpbmcgZGJ4b3V0LmMpLiAgKi8KKyAgU0RCX0RFQlVHLAkgICAgLyogV3JpdGUgQ09GRiBmb3IgKG9sZCkgU0RCICh1c2luZyBzZGJvdXQuYykuICAqLworICBEV0FSRjJfREVCVUcsCSAgICAvKiBXcml0ZSBEd2FyZiB2MiBkZWJ1ZyBpbmZvICh1c2luZyBkd2FyZjJvdXQuYykuICAqLworICBYQ09GRl9ERUJVRywJICAgIC8qIFdyaXRlIElCTS9YY29mZiBkZWJ1ZyBpbmZvICh1c2luZyBkYnhvdXQuYykuICAqLworICBWTVNfREVCVUcsICAgICAgICAvKiBXcml0ZSBWTVMgZGVidWcgaW5mbyAodXNpbmcgdm1zZGJnb3V0LmMpLiAgKi8KKyAgVk1TX0FORF9EV0FSRjJfREVCVUcgLyogV3JpdGUgVk1TIGRlYnVnIGluZm8gKHVzaW5nIHZtc2RiZ291dC5jKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIERXQVJGIHYyIGRlYnVnIGluZm8gKHVzaW5nIGR3YXJmMm91dC5jKS4gICovCit9OworCitlbnVtIGRlYnVnX2luZm9fbGV2ZWxzCit7CisgIERJTkZPX0xFVkVMX05PTkUsCS8qIFdyaXRlIG5vIGRlYnVnZ2luZyBpbmZvLiAgKi8KKyAgRElORk9fTEVWRUxfVEVSU0UsCS8qIFdyaXRlIG1pbmltYWwgaW5mbyB0byBzdXBwb3J0IHRyYWNlYmFja3Mgb25seS4gICovCisgIERJTkZPX0xFVkVMX05PUk1BTCwJLyogV3JpdGUgaW5mbyBmb3IgYWxsIGRlY2xhcmF0aW9ucyAoYW5kIGxpbmUgdGFibGUpLiAgKi8KKyAgRElORk9fTEVWRUxfVkVSQk9TRQkvKiBXcml0ZSBub3JtYWwgaW5mbyBwbHVzICNkZWZpbmUvI3VuZGVmIGluZm8uICAqLworfTsKKworLyogQSBtYWpvciBjb250cmlidXRpb24gdG8gb2JqZWN0IGFuZCBleGVjdXRhYmxlIHNpemUgaXMgZGVidWcKKyAgIGluZm9ybWF0aW9uIHNpemUuICBBIG1ham9yIGNvbnRyaWJ1dGlvbiB0byBkZWJ1ZyBpbmZvcm1hdGlvbgorICAgc2l6ZSBpcyBzdHJ1Y3QgZGVzY3JpcHRpb25zIHJlcGxpY2F0ZWQgaW4gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCisgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciBvciBub3QgZGVidWcgaW5mb3JtYXRpb24KKyAgIHNob3VsZCBiZSBnZW5lcmF0ZWQgZm9yIGEgZ2l2ZW4gc3RydWN0LiAgVGhlIGluZGlyZWN0IHBhcmFtZXRlcgorICAgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cnVjdCBpcyBiZWluZyBoYW5kbGVkIGluZGlyZWN0bHksIHZpYQorICAgYSBwb2ludGVyLiAgU2VlIG9wdHMuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uLiAqLworCitlbnVtIGRlYnVnX2luZm9fdXNhZ2UKK3sKKyAgRElORk9fVVNBR0VfREZOLAkvKiBBIHN0cnVjdCBkZWZpbml0aW9uLiAqLworICBESU5GT19VU0FHRV9ESVJfVVNFLAkvKiBBIGRpcmVjdCB1c2UsIHN1Y2ggYXMgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZS4gKi8KKyAgRElORk9fVVNBR0VfSU5EX1VTRSwJLyogQW4gaW5kaXJlY3QgdXNlLCBzdWNoIGFzIHRocm91Z2ggYSBwb2ludGVyLiAqLworICBESU5GT19VU0FHRV9OVU1fRU5VTVMJLyogVGhlIG51bWJlciBvZiBlbnVtZXJhdG9ycy4gKi8KK307CisKKy8qIEEgbWFqb3IgY29udHJpYnV0aW9uIHRvIG9iamVjdCBhbmQgZXhlY3V0YWJsZSBzaXplIGlzIGRlYnVnCisgICBpbmZvcm1hdGlvbiBzaXplLiAgQSBtYWpvciBjb250cmlidXRpb24gdG8gZGVidWcgaW5mb3JtYXRpb24gc2l6ZQorICAgaXMgc3RydWN0IGRlc2NyaXB0aW9ucyByZXBsaWNhdGVkIGluIHNldmVyYWwgb2JqZWN0IGZpbGVzLiBUaGUKKyAgIGZvbGxvd2luZyBmbGFncyBhdHRlbXB0IHRvIHJlZHVjZSB0aGlzIGluZm9ybWF0aW9uLiAgVGhlIGJhc2ljCisgICBpZGVhIGlzIHRvIG5vdCBlbWl0IHN0cnVjdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIGN1cnJlbnQKKyAgIGNvbXBpbGF0aW9uIHVuaXQgd2hlbiB0aGF0IGluZm9ybWF0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5CisgICBhbm90aGVyIGNvbXBpbGF0aW9uIHVuaXQuCisKKyAgIERlYnVnIGluZm9ybWF0aW9uIGZvciBhIHN0cnVjdCBkZWZpbmVkIGluIHRoZSBjdXJyZW50IHNvdXJjZQorICAgZmlsZSBzaG91bGQgYmUgZ2VuZXJhdGVkIGluIHRoZSBvYmplY3QgZmlsZS4gIExpa2V3aXNlIHRoZQorICAgZGVidWcgaW5mb3JtYXRpb24gZm9yIGEgc3RydWN0IGRlZmluZWQgaW4gYSBoZWFkZXIgc2hvdWxkIGJlCisgICBnZW5lcmF0ZWQgaW4gdGhlIG9iamVjdCBmaWxlIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlLgorICAgQm90aCBvZiB0aGVzZSBjYXNlIGFyZSBoYW5kbGVkIHdoZW4gdGhlIGJhc2UgbmFtZSBvZiB0aGUgZmlsZSBvZgorICAgdGhlIHN0cnVjdCBkZWZpbml0aW9uIG1hdGNoZXMgdGhlIGJhc2UgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUKKyAgIG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuICBUaGlzIG1hdGNoaW5nIGVtaXRzIG1pbmltYWwKKyAgIHN0cnVjdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisKKyAgIFRoZSBiYXNlIGZpbGUgbmFtZSBtYXRjaGluZyBydWxlIGFib3ZlIHdpbGwgZmFpbCB0byBlbWl0IGRlYnVnCisgICBpbmZvcm1hdGlvbiBmb3Igc3RydWN0cyBkZWZpbmVkIGluIHN5c3RlbSBoZWFkZXJzLiAgU28gYSBzZWNvbmQKKyAgIGNhdGVnb3J5IG9mIGZpbGVzIGluY2x1ZGVzIHN5c3RlbSBoZWFkZXJzIGluIGFkZGl0aW9uIHRvIGZpbGVzCisgICB3aXRoIG1hdGNoaW5nIGJhc2VzLgorCisgICBUaGUgcmVtYWluaW5nIHR5cGVzIG9mIGZpbGVzIGFyZSBsaWJyYXJ5IGhlYWRlcnMgYW5kIGFwcGxpY2F0aW9uCisgICBoZWFkZXJzLiAgV2UgY2Fubm90IGN1cnJlbnRseSBkaXN0aW5ndWlzaCB0aGVzZSB0d28gdHlwZXMuICAqLworCitlbnVtIGRlYnVnX3N0cnVjdF9maWxlCit7CisgIERJTkZPX1NUUlVDVF9GSUxFX05PTkUsICAgLyogRGVidWcgbm8gc3RydWN0cy4gKi8KKyAgRElORk9fU1RSVUNUX0ZJTEVfQkFTRSwgICAvKiBEZWJ1ZyBzdHJ1Y3RzIGRlZmluZWQgaW4gZmlsZXMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIGJhc2UgbmFtZSBhcyB0aGUgY29tcGlsYXRpb24gdW5pdC4gKi8KKyAgRElORk9fU1RSVUNUX0ZJTEVfU1lTLCAgICAvKiBBbHNvIGRlYnVnIHN0cnVjdHMgZGVmaW5lZCBpbiBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgZmlsZXMuICAqLworICBESU5GT19TVFJVQ1RfRklMRV9BTlkgICAgIC8qIERlYnVnIHN0cnVjdHMgZGVmaW5lZCBpbiBhbGwgZmlsZXMuICovCit9OworCisvKiBFbnVtZXJhdGUgdmlzaWJpbGl0eSBzZXR0aW5ncy4gIFRoaXMgaXMgZGVsaWJlcmF0ZWx5IG9yZGVyZWQgZnJvbSBtb3N0CisgICB0byBsZWFzdCB2aXNpYmlsaXR5LiAgKi8KKyNpZm5kZWYgU1lNQk9MX1ZJU0lCSUxJVFlfREVGSU5FRAorI2RlZmluZSBTWU1CT0xfVklTSUJJTElUWV9ERUZJTkVECitlbnVtIHN5bWJvbF92aXNpYmlsaXR5Cit7CisgIFZJU0lCSUxJVFlfREVGQVVMVCwKKyAgVklTSUJJTElUWV9QUk9URUNURUQsCisgIFZJU0lCSUxJVFlfSElEREVOLAorICBWSVNJQklMSVRZX0lOVEVSTkFMCit9OworI2VuZGlmCisKKy8qIFRoZSBzdGFjayByZXVzZSBsZXZlbC4gICovCitlbnVtIHN0YWNrX3JldXNlX2xldmVsCit7CisgIFNSX05PTkUsCisgIFNSX05BTUVEX1ZBUlMsCisgIFNSX0FMTAorfTsKKworLyogVGhlIGFsZ29yaXRobSB1c2VkIGZvciB0aGUgaW50ZWdyYXRlZCByZWdpc3RlciBhbGxvY2F0b3IgKElSQSkuICAqLworZW51bSBpcmFfYWxnb3JpdGhtCit7CisgIElSQV9BTEdPUklUSE1fQ0IsCisgIElSQV9BTEdPUklUSE1fUFJJT1JJVFkKK307CisKKy8qIFRoZSByZWdpb25zIHVzZWQgZm9yIHRoZSBpbnRlZ3JhdGVkIHJlZ2lzdGVyIGFsbG9jYXRvciAoSVJBKS4gICovCitlbnVtIGlyYV9yZWdpb24KK3sKKyAgSVJBX1JFR0lPTl9PTkUsCisgIElSQV9SRUdJT05fQUxMLAorICBJUkFfUkVHSU9OX01JWEVELAorICAvKiBUaGlzIHZhbHVlIG1lYW5zIHRoYXQgdGhlcmUgd2VyZSBubyBvcHRpb25zIC1maXJhLXJlZ2lvbiBvbiB0aGUKKyAgICAgY29tbWFuZCBsaW5lIGFuZCB0aGF0IHdlIHNob3VsZCBjaG9vc2UgYSB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlCisgICAgIHVzZWQgLU8gb3B0aW9uLiAgKi8KKyAgSVJBX1JFR0lPTl9BVVRPREVURUNUCit9OworCisvKiBUaGUgb3B0aW9ucyBmb3IgZXhjZXNzIHByZWNpc2lvbi4gICovCitlbnVtIGV4Y2Vzc19wcmVjaXNpb24KK3sKKyAgRVhDRVNTX1BSRUNJU0lPTl9ERUZBVUxULAorICBFWENFU1NfUFJFQ0lTSU9OX0ZBU1QsCisgIEVYQ0VTU19QUkVDSVNJT05fU1RBTkRBUkQKK307CisKKy8qIFR5cGUgb2Ygc3RhY2sgY2hlY2suICAqLworZW51bSBzdGFja19jaGVja190eXBlCit7CisgIC8qIERvIG5vdCBjaGVjayB0aGUgc3RhY2suICAqLworICBOT19TVEFDS19DSEVDSyA9IDAsCisKKyAgLyogQ2hlY2sgdGhlIHN0YWNrIGdlbmVyaWNhbGx5LCBpLmUuIGFzc3VtZSBubyBzcGVjaWZpYyBzdXBwb3J0CisgICAgIGZyb20gdGhlIHRhcmdldCBjb25maWd1cmF0aW9uIGZpbGVzLiAgKi8KKyAgR0VORVJJQ19TVEFDS19DSEVDSywKKworICAvKiBDaGVjayB0aGUgc3RhY2sgYW5kIHJlbHkgb24gdGhlIHRhcmdldCBjb25maWd1cmF0aW9uIGZpbGVzIHRvCisgICAgIGNoZWNrIHRoZSBzdGF0aWMgZnJhbWUgb2YgZnVuY3Rpb25zLCBpLmUuIHVzZSB0aGUgZ2VuZXJpYworICAgICBtZWNoYW5pc20gb25seSBmb3IgZHluYW1pYyBzdGFjayBhbGxvY2F0aW9ucy4gICovCisgIFNUQVRJQ19CVUlMVElOX1NUQUNLX0NIRUNLLAorCisgIC8qIENoZWNrIHRoZSBzdGFjayBhbmQgZW50aXJlbHkgcmVseSBvbiB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24KKyAgICAgZmlsZXMsIGkuZS4gZG8gbm90IHVzZSB0aGUgZ2VuZXJpYyBtZWNoYW5pc20gYXQgYWxsLiAgKi8KKyAgRlVMTF9CVUlMVElOX1NUQUNLX0NIRUNLCit9OworCisvKiBOYW1lcyBmb3IgdGhlIGRpZmZlcmVudCBsZXZlbHMgb2YgLVdzdHJpY3Qtb3ZlcmZsb3c9Ti4gIFRoZSBudW1lcmljCisgICB2YWx1ZXMgaGVyZSBjb3JyZXNwb25kIHRvIE4uICAqLworCitlbnVtIHdhcm5fc3RyaWN0X292ZXJmbG93X2NvZGUKK3sKKyAgLyogT3ZlcmZsb3cgd2FybmluZyB0aGF0IHNob3VsZCBiZSBpc3N1ZWQgd2l0aCAtV2FsbDogYSBxdWVzdGlvbmFibGUKKyAgICAgY29uc3RydWN0IHRoYXQgaXMgZWFzeSB0byBhdm9pZCBldmVuIHdoZW4gdXNpbmcgbWFjcm9zLiAgRXhhbXBsZToKKyAgICAgZm9sZGluZyAoeCArIENPTlNUQU5UID4geCkgdG8gMS4gICovCisgIFdBUk5fU1RSSUNUX09WRVJGTE9XX0FMTCA9IDEsCisgIC8qIE92ZXJmbG93IHdhcm5pbmcgYWJvdXQgZm9sZGluZyBhIGNvbXBhcmlzb24gdG8gYSBjb25zdGFudCBiZWNhdXNlCisgICAgIG9mIHVuZGVmaW5lZCBzaWduZWQgb3ZlcmZsb3csIG90aGVyIHRoYW4gY2FzZXMgY292ZXJlZCBieQorICAgICBXQVJOX1NUUklDVF9PVkVSRkxPV19BTEwuICBFeGFtcGxlOiBmb2xkaW5nIChhYnMgKHgpID49IDApIHRvIDEKKyAgICAgKHRoaXMgaXMgZmFsc2Ugd2hlbiB4ID09IElOVF9NSU4pLiAgKi8KKyAgV0FSTl9TVFJJQ1RfT1ZFUkZMT1dfQ09ORElUSU9OQUwgPSAyLAorICAvKiBPdmVyZmxvdyB3YXJuaW5nIGFib3V0IGNoYW5nZXMgdG8gY29tcGFyaXNvbnMgb3RoZXIgdGhhbiBmb2xkaW5nCisgICAgIHRoZW0gdG8gYSBjb25zdGFudC4gIEV4YW1wbGU6IGZvbGRpbmcgKHggKyAxID4gMSkgdG8gKHggPiAwKS4gICovCisgIFdBUk5fU1RSSUNUX09WRVJGTE9XX0NPTVBBUklTT04gPSAzLAorICAvKiBPdmVyZmxvdyB3YXJuaW5ncyBub3QgY292ZXJlZCBieSB0aGUgYWJvdmUgY2FzZXMuICBFeGFtcGxlOgorICAgICBmb2xkaW5nICgoeCAqIDEwKSAvIDUpIHRvICh4ICogMikuICAqLworICBXQVJOX1NUUklDVF9PVkVSRkxPV19NSVNDID0gNCwKKyAgLyogT3ZlcmZsb3cgd2FybmluZ3MgYWJvdXQgcmVkdWNpbmcgbWFnbml0dWRlIG9mIGNvbnN0YW50cyBpbgorICAgICBjb21wYXJpc29uLiAgRXhhbXBsZTogZm9sZGluZyAoeCArIDIgPiB5KSB0byAoeCArIDEgPj0geSkuICAqLworICBXQVJOX1NUUklDVF9PVkVSRkxPV19NQUdOSVRVREUgPSA1Cit9OworCisvKiBGbG9hdGluZy1wb2ludCBjb250cmFjdGlvbiBtb2RlLiAgKi8KK2VudW0gZnBfY29udHJhY3RfbW9kZSB7CisgIEZQX0NPTlRSQUNUX09GRiA9IDAsCisgIEZQX0NPTlRSQUNUX09OID0gMSwKKyAgRlBfQ09OVFJBQ1RfRkFTVCA9IDIKK307CisKKyNlbmRpZiAvKiAhIEdDQ19GTEFHX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9mbGFncy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2ZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4Mjk4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9mbGFncy5oCkBAIC0wLDAgKzEsMTAxIEBACisvKiBDb21waWxhdGlvbiBzd2l0Y2ggZmxhZyBkZWZpbml0aW9ucyBmb3IgR0NDLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19GTEFHU19ICisjZGVmaW5lIEdDQ19GTEFHU19ICisKKyNpbmNsdWRlICJmbGFnLXR5cGVzLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgorCisjaWYgIWRlZmluZWQoSU5fTElCR0NDMikgJiYgIWRlZmluZWQoSU5fVEFSR0VUX0xJQlMpICYmICFkZWZpbmVkKElOX1JUUykKKworLyogTmFtZXMgb2YgZGVidWdfaW5mb190eXBlLCBmb3IgZXJyb3IgbWVzc2FnZXMuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGRlYnVnX3R5cGVfbmFtZXNbXTsKKworZXh0ZXJuIHZvaWQgc3RyaXBfb2ZmX2VuZGluZyAoY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBiYXNlX29mX3BhdGggKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKipiYXNlX291dCk7CisKKy8qIFJldHVybiB0cnVlIGlmZiBmbGFncyBhcmUgc2V0IGFzIGlmIC1mZmFzdC1tYXRoLiAgKi8KK2V4dGVybiBib29sIGZhc3RfbWF0aF9mbGFnc19zZXRfcCAoY29uc3Qgc3RydWN0IGdjY19vcHRpb25zICopOworZXh0ZXJuIGJvb2wgZmFzdF9tYXRoX2ZsYWdzX3N0cnVjdF9zZXRfcCAoc3RydWN0IGNsX29wdGltaXphdGlvbiAqKTsKKworDAorLyogTm93IHRoZSBzeW1ib2xzIHRoYXQgYXJlIHNldCB3aXRoIGAtZicgc3dpdGNoZXMuICAqLworCisvKiBUcnVlIGlmIHByaW50aW5nIGludG8gLWZkdW1wLWZpbmFsLWluc25zPSBkdW1wLiAgKi8KKworZXh0ZXJuIGJvb2wgZmluYWxfaW5zbnNfZHVtcF9wOworCisMCisvKiBPdGhlciBiYXNpYyBzdGF0dXMgaW5mbyBhYm91dCBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKworLyogVGFyZ2V0LWRlcGVuZGVudCBnbG9iYWwgc3RhdGUuICAqLworc3RydWN0IHRhcmdldF9mbGFnX3N0YXRlIHsKKyAgLyogVmFsdWVzIG9mIHRoZSAtZmFsaWduLSogZmxhZ3M6IGhvdyBtdWNoIHRvIGFsaWduIGxhYmVscyBpbiBjb2RlLgorICAgICAwIG1lYW5zIGB1c2UgZGVmYXVsdCcsIDEgbWVhbnMgYGRvbid0IGFsaWduJy4KKyAgICAgRm9yIGVhY2ggdmFyaWFibGUsIHRoZXJlIGlzIGFuIF9sb2cgdmFyaWFudCB3aGljaCBpcyB0aGUgcG93ZXIKKyAgICAgb2YgdHdvIG5vdCBsZXNzIHRoYW4gdGhlIHZhcmlhYmxlLCBmb3IgLmFsaWduIG91dHB1dC4gICovCisgIGludCB4X2FsaWduX2xvb3BzX2xvZzsKKyAgaW50IHhfYWxpZ25fbG9vcHNfbWF4X3NraXA7CisgIGludCB4X2FsaWduX2p1bXBzX2xvZzsKKyAgaW50IHhfYWxpZ25fanVtcHNfbWF4X3NraXA7CisgIGludCB4X2FsaWduX2xhYmVsc19sb2c7CisgIGludCB4X2FsaWduX2xhYmVsc19tYXhfc2tpcDsKKyAgaW50IHhfYWxpZ25fZnVuY3Rpb25zX2xvZzsKKworICAvKiBUaGUgZXhjZXNzIHByZWNpc2lvbiBjdXJyZW50bHkgaW4gZWZmZWN0LiAgKi8KKyAgZW51bSBleGNlc3NfcHJlY2lzaW9uIHhfZmxhZ19leGNlc3NfcHJlY2lzaW9uOworfTsKKworZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZmxhZ19zdGF0ZSBkZWZhdWx0X3RhcmdldF9mbGFnX3N0YXRlOworI2lmIFNXSVRDSEFCTEVfVEFSR0VUCitleHRlcm4gc3RydWN0IHRhcmdldF9mbGFnX3N0YXRlICp0aGlzX3RhcmdldF9mbGFnX3N0YXRlOworI2Vsc2UKKyNkZWZpbmUgdGhpc190YXJnZXRfZmxhZ19zdGF0ZSAoJmRlZmF1bHRfdGFyZ2V0X2ZsYWdfc3RhdGUpCisjZW5kaWYKKworI2RlZmluZSBhbGlnbl9sb29wc19sb2cgXAorICAodGhpc190YXJnZXRfZmxhZ19zdGF0ZS0+eF9hbGlnbl9sb29wc19sb2cpCisjZGVmaW5lIGFsaWduX2xvb3BzX21heF9za2lwIFwKKyAgKHRoaXNfdGFyZ2V0X2ZsYWdfc3RhdGUtPnhfYWxpZ25fbG9vcHNfbWF4X3NraXApCisjZGVmaW5lIGFsaWduX2p1bXBzX2xvZyBcCisgICh0aGlzX3RhcmdldF9mbGFnX3N0YXRlLT54X2FsaWduX2p1bXBzX2xvZykKKyNkZWZpbmUgYWxpZ25fanVtcHNfbWF4X3NraXAgXAorICAodGhpc190YXJnZXRfZmxhZ19zdGF0ZS0+eF9hbGlnbl9qdW1wc19tYXhfc2tpcCkKKyNkZWZpbmUgYWxpZ25fbGFiZWxzX2xvZyBcCisgICh0aGlzX3RhcmdldF9mbGFnX3N0YXRlLT54X2FsaWduX2xhYmVsc19sb2cpCisjZGVmaW5lIGFsaWduX2xhYmVsc19tYXhfc2tpcCBcCisgICh0aGlzX3RhcmdldF9mbGFnX3N0YXRlLT54X2FsaWduX2xhYmVsc19tYXhfc2tpcCkKKyNkZWZpbmUgYWxpZ25fZnVuY3Rpb25zX2xvZyBcCisgICh0aGlzX3RhcmdldF9mbGFnX3N0YXRlLT54X2FsaWduX2Z1bmN0aW9uc19sb2cpCisjZGVmaW5lIGZsYWdfZXhjZXNzX3ByZWNpc2lvbiBcCisgICh0aGlzX3RhcmdldF9mbGFnX3N0YXRlLT54X2ZsYWdfZXhjZXNzX3ByZWNpc2lvbikKKworLyogUmV0dXJucyBUUlVFIGlmIGdlbmVyYXRlZCBjb2RlIHNob3VsZCBtYXRjaCBBQkkgdmVyc2lvbiBOIG9yCisgICBncmVhdGVyIGlzIGluIHVzZS4gICovCisKKyNkZWZpbmUgYWJpX3ZlcnNpb25fYXRfbGVhc3QoTikgXAorICAoZmxhZ19hYmlfdmVyc2lvbiA9PSAwIHx8IGZsYWdfYWJpX3ZlcnNpb24gPj0gKE4pKQorCisvKiBXaGV0aGVyIHRvIGVtaXQgYW4gb3ZlcmZsb3cgd2FybmluZyB3aG9zZSBjb2RlIGlzIEMuICAqLworI2RlZmluZSBpc3N1ZV9zdHJpY3Rfb3ZlcmZsb3dfd2FybmluZyhjKSAod2Fybl9zdHJpY3Rfb3ZlcmZsb3cgPj0gKGludCkgKGMpKQorCisjZW5kaWYKKworI2VuZGlmIC8qICEgR0NDX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9mdW5jdGlvbi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2Z1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkNzFlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9mdW5jdGlvbi5oCkBAIC0wLDAgKzEsNzgyIEBACisvKiBTdHJ1Y3R1cmUgZm9yIHNhdmluZyBzdGF0ZSBmb3IgYSBuZXN0ZWQgZnVuY3Rpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5ODktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0ZVTkNUSU9OX0gKKyNkZWZpbmUgR0NDX0ZVTkNUSU9OX0gKKworI2luY2x1ZGUgImhhc2h0YWIuaCIKKyNpbmNsdWRlICJ2ZWMuaCIKKyNpbmNsdWRlICJtYWNobW9kZS5oIgorI2luY2x1ZGUgInRtLmgiCQkJLyogRm9yIENVTVVMQVRJVkVfQVJHUy4gICovCisjaW5jbHVkZSAiaGFyZC1yZWctc2V0LmgiCS8qIEZvciBIQVJEX1JFR19TRVQgaW4gc3RydWN0IHJ0bF9kYXRhLiAqLworI2luY2x1ZGUgImlucHV0LmgiCQkvKiBGb3IgbG9jYXRpb25fdC4gICovCisKKy8qIFN0YWNrIG9mIHBlbmRpbmcgKGluY29tcGxldGUpIHNlcXVlbmNlcyBzYXZlZCBieSBgc3RhcnRfc2VxdWVuY2UnLgorICAgRWFjaCBlbGVtZW50IGRlc2NyaWJlcyBvbmUgcGVuZGluZyBzZXF1ZW5jZS4KKyAgIFRoZSBtYWluIGluc24tY2hhaW4gaXMgc2F2ZWQgaW4gdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY2hhaW4sCisgICB1bmxlc3MgdGhlIGNoYWluIGlzIGVtcHR5LiAgKi8KKworc3RydWN0IEdUWSgoKSkgc2VxdWVuY2Vfc3RhY2sgeworICAvKiBGaXJzdCBhbmQgbGFzdCBpbnNucyBpbiB0aGUgY2hhaW4gb2YgdGhlIHNhdmVkIHNlcXVlbmNlLiAgKi8KKyAgcnR4IGZpcnN0OworICBydHggbGFzdDsKKyAgc3RydWN0IHNlcXVlbmNlX3N0YWNrICpuZXh0OworfTsKKwwKK3N0cnVjdCBHVFkoKCkpIGVtaXRfc3RhdHVzIHsKKyAgLyogVGhpcyBpcyByZXNldCB0byBMQVNUX1ZJUlRVQUxfUkVHSVNURVIgKyAxIGF0IHRoZSBzdGFydCBvZiBlYWNoIGZ1bmN0aW9uLgorICAgICBBZnRlciBydGwgZ2VuZXJhdGlvbiwgaXQgaXMgMSBwbHVzIHRoZSBsYXJnZXN0IHJlZ2lzdGVyIG51bWJlciB1c2VkLiAgKi8KKyAgaW50IHhfcmVnX3J0eF9ubzsKKworICAvKiBMb3dlc3QgbGFiZWwgbnVtYmVyIGluIGN1cnJlbnQgZnVuY3Rpb24uICAqLworICBpbnQgeF9maXJzdF9sYWJlbF9udW07CisKKyAgLyogVGhlIGVuZHMgb2YgdGhlIGRvdWJseS1saW5rZWQgY2hhaW4gb2YgcnRsIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbi4KKyAgICAgQm90aCBhcmUgcmVzZXQgdG8gbnVsbCBhdCB0aGUgc3RhcnQgb2YgcnRsIGdlbmVyYXRpb24gZm9yIHRoZSBmdW5jdGlvbi4KKworICAgICBzdGFydF9zZXF1ZW5jZSBzYXZlcyBib3RoIG9mIHRoZXNlIG9uIGBzZXF1ZW5jZV9zdGFjaycgYW5kIHRoZW4gc3RhcnRzCisgICAgIGEgbmV3LCBuZXN0ZWQgc2VxdWVuY2Ugb2YgaW5zbnMuICAqLworICBydHggeF9maXJzdF9pbnNuOworICBydHggeF9sYXN0X2luc247CisKKyAgLyogU3RhY2sgb2YgcGVuZGluZyAoaW5jb21wbGV0ZSkgc2VxdWVuY2VzIHNhdmVkIGJ5IGBzdGFydF9zZXF1ZW5jZScuCisgICAgIEVhY2ggZWxlbWVudCBkZXNjcmliZXMgb25lIHBlbmRpbmcgc2VxdWVuY2UuCisgICAgIFRoZSBtYWluIGluc24tY2hhaW4gaXMgc2F2ZWQgaW4gdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY2hhaW4sCisgICAgIHVubGVzcyB0aGUgY2hhaW4gaXMgZW1wdHkuICAqLworICBzdHJ1Y3Qgc2VxdWVuY2Vfc3RhY2sgKnNlcXVlbmNlX3N0YWNrOworCisgIC8qIElOU05fVUlEIGZvciBuZXh0IGluc24gZW1pdHRlZC4KKyAgICAgUmVzZXQgdG8gMSBmb3IgZWFjaCBmdW5jdGlvbiBjb21waWxlZC4gICovCisgIGludCB4X2N1cl9pbnNuX3VpZDsKKworICAvKiBJTlNOX1VJRCBmb3IgbmV4dCBkZWJ1ZyBpbnNuIGVtaXR0ZWQuICBPbmx5IHVzZWQgaWYKKyAgICAgLS1wYXJhbSBtaW4tbm9uZGVidWctaW5zbi11aWQ9PHZhbHVlPiBpcyBnaXZlbiB3aXRoIG5vbnplcm8gdmFsdWUuICAqLworICBpbnQgeF9jdXJfZGVidWdfaW5zbl91aWQ7CisKKyAgLyogVGhlIGxlbmd0aCBvZiB0aGUgcmVnbm9fcG9pbnRlcl9hbGlnbiwgcmVnbm9fZGVjbCwgYW5kIHhfcmVnbm9fcmVnX3J0eAorICAgICB2ZWN0b3JzLiAgU2luY2UgdGhlc2UgdmVjdG9ycyBhcmUgbmVlZGVkIGR1cmluZyB0aGUgZXhwYW5zaW9uIHBoYXNlIHdoZW4KKyAgICAgdGhlIHRvdGFsIG51bWJlciBvZiByZWdpc3RlcnMgaW4gdGhlIGZ1bmN0aW9uIGlzIG5vdCB5ZXQga25vd24sIHRoZQorICAgICB2ZWN0b3JzIGFyZSBjb3BpZWQgYW5kIG1hZGUgYmlnZ2VyIHdoZW4gbmVjZXNzYXJ5LiAgKi8KKyAgaW50IHJlZ25vX3BvaW50ZXJfYWxpZ25fbGVuZ3RoOworCisgIC8qIEluZGV4ZWQgYnkgcHNldWRvIHJlZ2lzdGVyIG51bWJlciwgaWYgbm9uemVybyBnaXZlcyB0aGUga25vd24gYWxpZ25tZW50CisgICAgIGZvciB0aGF0IHBzZXVkbyAoaWYgUkVHX1BPSU5URVIgaXMgc2V0IGluIHhfcmVnbm9fcmVnX3J0eCkuCisgICAgIEFsbG9jYXRlZCBpbiBwYXJhbGxlbCB3aXRoIHhfcmVnbm9fcmVnX3J0eC4gICovCisgIHVuc2lnbmVkIGNoYXIgKiBHVFkoKHNraXApKSByZWdub19wb2ludGVyX2FsaWduOworfTsKKworCisvKiBJbmRleGVkIGJ5IHJlZ2lzdGVyIG51bWJlciwgZ2l2ZXMgYW4gcnR4IGZvciB0aGF0IHJlZ2lzdGVyIChhbmQgb25seQorICAgdGhhdCByZWdpc3RlcikuICBGb3IgcHNldWRvIHJlZ2lzdGVycywgaXQgaXMgdGhlIHVuaXF1ZSBydHggZm9yCisgICB0aGF0IHBzZXVkby4gIEZvciBoYXJkIHJlZ2lzdGVycywgaXQgaXMgYW4gcnR4IG9mIHRoZSBtb2RlIHNwZWNpZmllZAorICAgYnkgcmVnX3Jhd19tb2RlLgorCisgICBGSVhNRTogV2UgY291bGQgcHV0IGl0IGludG8gZW1pdF9zdGF0dXMgc3RydWN0LCBidXQgZ2VuZ3R5cGUgaXMgbm90CisgICBhYmxlIHRvIGRlYWwgd2l0aCBsZW5ndGggYXR0cmlidXRlIG5lc3RlZCBpbiB0b3AgbGV2ZWwgc3RydWN0dXJlcy4gICovCisKK2V4dGVybiBHVFkgKChsZW5ndGggKCJjcnRsLT5lbWl0LnhfcmVnX3J0eF9ubyIpKSkgcnR4ICogcmVnbm9fcmVnX3J0eDsKKworLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuLi4gZXZlbnR1YWxseSB0aGVzZSBzaG91bGQgYWxsIGdvIGF3YXkuICAqLworI2RlZmluZSByZWdfcnR4X25vIChjcnRsLT5lbWl0LnhfcmVnX3J0eF9ubykKKyNkZWZpbmUgc2VxX3N0YWNrIChjcnRsLT5lbWl0LnNlcXVlbmNlX3N0YWNrKQorCisjZGVmaW5lIFJFR05PX1BPSU5URVJfQUxJR04oUkVHTk8pIChjcnRsLT5lbWl0LnJlZ25vX3BvaW50ZXJfYWxpZ25bUkVHTk9dKQorCitzdHJ1Y3QgR1RZKCgpKSBleHByX3N0YXR1cyB7CisgIC8qIE51bWJlciBvZiB1bml0cyB0aGF0IHdlIHNob3VsZCBldmVudHVhbGx5IHBvcCBvZmYgdGhlIHN0YWNrLgorICAgICBUaGVzZSBhcmUgdGhlIGFyZ3VtZW50cyB0byBmdW5jdGlvbiBjYWxscyB0aGF0IGhhdmUgYWxyZWFkeSByZXR1cm5lZC4gICovCisgIGludCB4X3BlbmRpbmdfc3RhY2tfYWRqdXN0OworCisgIC8qIFVuZGVyIHNvbWUgQUJJcywgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIHBvcCBhcmd1bWVudHMKKyAgICAgcHVzaGVkIGZvciBmdW5jdGlvbiBjYWxscy4gIEEgbmFpdmUgaW1wbGVtZW50YXRpb24gd291bGQgc2ltcGx5IHBvcAorICAgICB0aGUgYXJndW1lbnRzIGltbWVkaWF0ZWx5IGFmdGVyIGVhY2ggY2FsbC4gIEhvd2V2ZXIsIGlmIHNldmVyYWwKKyAgICAgZnVuY3Rpb24gY2FsbHMgYXJlIG1hZGUgaW4gYSByb3csIGl0IGlzIHR5cGljYWxseSBjaGVhcGVyIHRvIHBvcAorICAgICBhbGwgdGhlIGFyZ3VtZW50cyBhZnRlciBhbGwgb2YgdGhlIGNhbGxzIGFyZSBjb21wbGV0ZSBzaW5jZSBhCisgICAgIHNpbmdsZSBwb3AgaW5zdHJ1Y3Rpb24gY2FuIGJlIHVzZWQuICBUaGVyZWZvcmUsIEdDQyBhdHRlbXB0cyB0bworICAgICBkZWZlciBwb3BwaW5nIHRoZSBhcmd1bWVudHMgdW50aWwgYWJzb2x1dGVseSBuZWNlc3NhcnkuICAoRm9yCisgICAgIGV4YW1wbGUsIGF0IHRoZSBlbmQgb2YgYSBjb25kaXRpb25hbCwgdGhlIGFyZ3VtZW50cyBtdXN0IGJlIHBvcHBlZCwKKyAgICAgc2luY2UgY29kZSBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCB3b24ndCBrbm93IHdoZXRoZXIgb3Igbm90IHRoZQorICAgICBhcmd1bWVudHMgbmVlZCB0byBiZSBwb3BwZWQuKQorCisgICAgIFdoZW4gSU5ISUJJVF9ERUZFUl9QT1AgaXMgbm9uemVybywgaG93ZXZlciwgdGhlIGNvbXBpbGVyIGRvZXMgbm90CisgICAgIGF0dGVtcHQgdG8gZGVmZXIgcG9wcy4gIEluc3RlYWQsIHRoZSBzdGFjayBpcyBwb3BwZWQgaW1tZWRpYXRlbHkKKyAgICAgYWZ0ZXIgZWFjaCBjYWxsLiAgUmF0aGVyIHRoZW4gc2V0dGluZyB0aGlzIHZhcmlhYmxlIGRpcmVjdGx5LCB1c2UKKyAgICAgTk9fREVGRVJfUE9QIGFuZCBPS19ERUZFUl9QT1AuICAqLworICBpbnQgeF9pbmhpYml0X2RlZmVyX3BvcDsKKworICAvKiBJZiBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkgYW5kIFBVU0hfUk9VTkRJTkcgYXJlIGRlZmluZWQsIHRoZSBzdGFjaworICAgICBib3VuZGFyeSBjYW4gYmUgbW9tZW50YXJpbHkgdW5hbGlnbmVkIHdoaWxlIHB1c2hpbmcgdGhlIGFyZ3VtZW50cy4KKyAgICAgUmVjb3JkIHRoZSBkZWx0YSBzaW5jZSBsYXN0IGFsaWduZWQgYm91bmRhcnkgaGVyZSBpbiBvcmRlciB0byBnZXQKKyAgICAgc3RhY2sgYWxpZ25tZW50IGluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FsbHMgd29ya2luZyByaWdodC4gICovCisgIGludCB4X3N0YWNrX3BvaW50ZXJfZGVsdGE7CisKKyAgLyogTm9uemVybyBtZWFucyBfX2J1aWx0aW5fc2F2ZXJlZ3MgaGFzIGFscmVhZHkgYmVlbiBkb25lIGluIHRoaXMgZnVuY3Rpb24uCisgICAgIFRoZSB2YWx1ZSBpcyB0aGUgcHNldWRvcmVnIGNvbnRhaW5pbmcgdGhlIHZhbHVlIF9fYnVpbHRpbl9zYXZlcmVncworICAgICByZXR1cm5lZC4gICovCisgIHJ0eCB4X3NhdmVyZWdzX3ZhbHVlOworCisgIC8qIFNpbWlsYXJseSBmb3IgX19idWlsdGluX2FwcGx5X2FyZ3MuICAqLworICBydHggeF9hcHBseV9hcmdzX3ZhbHVlOworCisgIC8qIExpc3Qgb2YgbGFiZWxzIHRoYXQgbXVzdCBuZXZlciBiZSBkZWxldGVkLiAgKi8KKyAgcnR4IHhfZm9yY2VkX2xhYmVsczsKK307CisKK3R5cGVkZWYgc3RydWN0IGNhbGxfc2l0ZV9yZWNvcmRfZCAqY2FsbF9zaXRlX3JlY29yZDsKKworLyogUlRMIHJlcHJlc2VudGF0aW9uIG9mIGV4Y2VwdGlvbiBoYW5kbGluZy4gICovCitzdHJ1Y3QgR1RZKCgpKSBydGxfZWggeworICBydHggZWhyX3N0YWNrYWRqOworICBydHggZWhyX2hhbmRsZXI7CisgIHJ0eCBlaHJfbGFiZWw7CisKKyAgcnR4IHNqbGpfZmM7CisgIHJ0eCBzamxqX2V4aXRfYWZ0ZXI7CisKKyAgdmVjPHVjaGFyLCB2YV9nYz4gKmFjdGlvbl9yZWNvcmRfZGF0YTsKKworICB2ZWM8Y2FsbF9zaXRlX3JlY29yZCwgdmFfZ2M+ICpjYWxsX3NpdGVfcmVjb3JkX3ZbMl07Cit9OworCisjZGVmaW5lIHBlbmRpbmdfc3RhY2tfYWRqdXN0IChjcnRsLT5leHByLnhfcGVuZGluZ19zdGFja19hZGp1c3QpCisjZGVmaW5lIGluaGliaXRfZGVmZXJfcG9wIChjcnRsLT5leHByLnhfaW5oaWJpdF9kZWZlcl9wb3ApCisjZGVmaW5lIHNhdmVyZWdzX3ZhbHVlIChjcnRsLT5leHByLnhfc2F2ZXJlZ3NfdmFsdWUpCisjZGVmaW5lIGFwcGx5X2FyZ3NfdmFsdWUgKGNydGwtPmV4cHIueF9hcHBseV9hcmdzX3ZhbHVlKQorI2RlZmluZSBmb3JjZWRfbGFiZWxzIChjcnRsLT5leHByLnhfZm9yY2VkX2xhYmVscykKKyNkZWZpbmUgc3RhY2tfcG9pbnRlcl9kZWx0YSAoY3J0bC0+ZXhwci54X3N0YWNrX3BvaW50ZXJfZGVsdGEpCisKK3N0cnVjdCBnaW1wbGVfZGY7CitzdHJ1Y3QgdGVtcF9zbG90OwordHlwZWRlZiBzdHJ1Y3QgdGVtcF9zbG90ICp0ZW1wX3Nsb3RfcDsKK3N0cnVjdCBjYWxsX3NpdGVfcmVjb3JkX2Q7CitzdHJ1Y3QgZHdfZmRlX3N0cnVjdDsKKworc3RydWN0IGlwYV9vcHRfcGFzc19kOwordHlwZWRlZiBzdHJ1Y3QgaXBhX29wdF9wYXNzX2QgKmlwYV9vcHRfcGFzczsKKworCitzdHJ1Y3QgR1RZKCgpKSB2YXJhc21fc3RhdHVzIHsKKyAgLyogSWYgd2UncmUgdXNpbmcgYSBwZXItZnVuY3Rpb24gY29uc3RhbnQgcG9vbCwgdGhpcyBpcyBpdC4gICovCisgIHN0cnVjdCBydHhfY29uc3RhbnRfcG9vbCAqcG9vbDsKKworICAvKiBOdW1iZXIgb2YgdHJlZS1jb25zdGFudHMgZGVmZXJyZWQgZHVyaW5nIHRoZSBleHBhbnNpb24gb2YgdGhpcworICAgICBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGludCBkZWZlcnJlZF9jb25zdGFudHM7Cit9OworCisvKiBJbmZvcm1hdGlvbiBtYWlubGluZWQgYWJvdXQgUlRMIHJlcHJlc2VudGF0aW9uIG9mIGluY29taW5nIGFyZ3VtZW50cy4gICovCitzdHJ1Y3QgR1RZKCgpKSBpbmNvbWluZ19hcmdzIHsKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIG9mIGFyZ3MgcG9wcGVkIGJ5IGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIG9uIGl0cyByZXR1cm4uCisgICAgIFplcm8gaWYgbm8gYnl0ZXMgYXJlIHRvIGJlIHBvcHBlZC4KKyAgICAgTWF5IGFmZmVjdCBjb21waWxhdGlvbiBvZiByZXR1cm4gaW5zbiBvciBvZiBmdW5jdGlvbiBlcGlsb2d1ZS4gICovCisgIGludCBwb3BzX2FyZ3M7CisKKyAgLyogSWYgZnVuY3Rpb24ncyBhcmdzIGhhdmUgYSBmaXhlZCBzaXplLCB0aGlzIGlzIHRoYXQgc2l6ZSwgaW4gYnl0ZXMuCisgICAgIE90aGVyd2lzZSwgaXQgaXMgLTEuCisgICAgIE1heSBhZmZlY3QgY29tcGlsYXRpb24gb2YgcmV0dXJuIGluc24gb3Igb2YgZnVuY3Rpb24gZXBpbG9ndWUuICAqLworICBpbnQgc2l6ZTsKKworICAvKiAjIGJ5dGVzIHRoZSBwcm9sb2d1ZSBzaG91bGQgcHVzaCBhbmQgcHJldGVuZCB0aGF0IHRoZSBjYWxsZXIgcHVzaGVkIHRoZW0uCisgICAgIFRoZSBwcm9sb2d1ZSBtdXN0IGRvIHRoaXMsIGJ1dCBvbmx5IGlmIHBhcm1zIGNhbiBiZSBwYXNzZWQgaW4KKyAgICAgcmVnaXN0ZXJzLiAgKi8KKyAgaW50IHByZXRlbmRfYXJnc19zaXplOworCisgIC8qIFRoaXMgaXMgdGhlIG9mZnNldCBmcm9tIHRoZSBhcmcgcG9pbnRlciB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlIGZpcnN0CisgICAgIGFub255bW91cyBhcmcgY2FuIGJlIGZvdW5kLCBpZiB0aGVyZSBpcyBvbmUuICAqLworICBydHggYXJnX29mZnNldF9ydHg7CisKKyAgLyogUXVhbnRpdGllcyBvZiB2YXJpb3VzIGtpbmRzIG9mIHJlZ2lzdGVycworICAgICB1c2VkIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbidzIGFyZ3MuICAqLworICBDVU1VTEFUSVZFX0FSR1MgaW5mbzsKKworICAvKiBUaGUgYXJnIHBvaW50ZXIgaGFyZCByZWdpc3Rlciwgb3IgdGhlIHBzZXVkbyBpbnRvIHdoaWNoIGl0IHdhcyBjb3BpZWQuICAqLworICBydHggaW50ZXJuYWxfYXJnX3BvaW50ZXI7Cit9OworCisvKiBEYXRhIGZvciBmdW5jdGlvbiBwYXJ0aXRpb25pbmcuICAqLworc3RydWN0IEdUWSgoKSkgZnVuY3Rpb25fc3Vic2VjdGlvbnMgeworICAvKiBBc3NlbWJseSBsYWJlbHMgZm9yIHRoZSBob3QgYW5kIGNvbGQgdGV4dCBzZWN0aW9ucywgdG8KKyAgICAgYmUgdXNlZCBieSBkZWJ1Z2dlciBmdW5jdGlvbnMgZm9yIGRldGVybWluaW5nIHRoZSBzaXplIG9mIHRleHQKKyAgICAgc2VjdGlvbnMuICAqLworCisgIGNvbnN0IGNoYXIgKmhvdF9zZWN0aW9uX2xhYmVsOworICBjb25zdCBjaGFyICpjb2xkX3NlY3Rpb25fbGFiZWw7CisgIGNvbnN0IGNoYXIgKmhvdF9zZWN0aW9uX2VuZF9sYWJlbDsKKyAgY29uc3QgY2hhciAqY29sZF9zZWN0aW9uX2VuZF9sYWJlbDsKK307CisKKy8qIERlc2NyaWJlIGFuIGVtcHR5IGFyZWEgb2Ygc3BhY2UgaW4gdGhlIHN0YWNrIGZyYW1lLiAgVGhlc2UgY2FuIGJlIGNoYWluZWQKKyAgIGludG8gYSBsaXN0OyB0aGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBzcGFjZSB3YXN0ZWQgZm9yIGFsaWdubWVudAorICAgcmVhc29ucy4gICovCitzdHJ1Y3QgR1RZKCgpKSBmcmFtZV9zcGFjZQoreworICBzdHJ1Y3QgZnJhbWVfc3BhY2UgKm5leHQ7CisKKyAgSE9TVF9XSURFX0lOVCBzdGFydDsKKyAgSE9TVF9XSURFX0lOVCBsZW5ndGg7Cit9OworCisvKiBEYXRhc3RydWN0dXJlcyBtYWludGFpbmVkIGZvciBjdXJyZW50bHkgcHJvY2Vzc2VkIGZ1bmN0aW9uIGluIFJUTCBmb3JtLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHJ0bF9kYXRhIHsKKyAgc3RydWN0IGV4cHJfc3RhdHVzIGV4cHI7CisgIHN0cnVjdCBlbWl0X3N0YXR1cyBlbWl0OworICBzdHJ1Y3QgdmFyYXNtX3N0YXR1cyB2YXJhc207CisgIHN0cnVjdCBpbmNvbWluZ19hcmdzIGFyZ3M7CisgIHN0cnVjdCBmdW5jdGlvbl9zdWJzZWN0aW9ucyBzdWJzZWN0aW9uczsKKyAgc3RydWN0IHJ0bF9laCBlaDsKKworICAvKiBGb3IgZnVuY3Rpb24uYyAgKi8KKworICAvKiAjIG9mIGJ5dGVzIG9mIG91dGdvaW5nIGFyZ3VtZW50cy4gIElmIEFDQ1VNVUxBVEVfT1VUR09JTkdfQVJHUyBpcworICAgICBkZWZpbmVkLCB0aGUgbmVlZGVkIHNwYWNlIGlzIHB1c2hlZCBieSB0aGUgcHJvbG9ndWUuICAqLworICBpbnQgb3V0Z29pbmdfYXJnc19zaXplOworCisgIC8qIElmIG5vbnplcm8sIGFuIFJUTCBleHByZXNzaW9uIGZvciB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdGhlIGN1cnJlbnQKKyAgICAgZnVuY3Rpb24gcmV0dXJucyBpdHMgcmVzdWx0LiAgSWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucyBpdHMKKyAgICAgcmVzdWx0IGluIGEgcmVnaXN0ZXIsIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuX3J0eCB3aWxsIGFsd2F5cyBiZQorICAgICB0aGUgaGFyZCByZWdpc3RlciBjb250YWluaW5nIHRoZSByZXN1bHQuICAqLworICBydHggcmV0dXJuX3J0eDsKKworICAvKiBWZWN0b3Igb2YgaW5pdGlhbC12YWx1ZSBwYWlycy4gIEVhY2ggcGFpciBjb25zaXN0cyBvZiBhIHBzZXVkbworICAgICByZWdpc3RlciBvZiBhcHByb3ByaXRlIG1vZGUgdGhhdCBzdG9yZXMgdGhlIGluaXRpYWwgdmFsdWUgYSBoYXJkCisgICAgIHJlZ2lzdGVyIFJFR05PLCBhbmQgdGhhdCBoYXJkIHJlZ2lzdGVyIGl0c2VsZi4gICovCisgIC8qID8/PyBUaGlzIGNvdWxkIGJlIGEgVkVDIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5IHRvIGRlZmluZSBhbgorCSBvcGFxdWUgVkVDIHR5cGUuICAqLworICBzdHJ1Y3QgaW5pdGlhbF92YWx1ZV9zdHJ1Y3QgKmhhcmRfcmVnX2luaXRpYWxfdmFsczsKKworICAvKiBBIHZhcmlhYmxlIGxpdmluZyBhdCB0aGUgdG9wIG9mIHRoZSBmcmFtZSB0aGF0IGhvbGRzIGEga25vd24gdmFsdWUuCisgICAgIFVzZWQgZm9yIGRldGVjdGluZyBzdGFjayBjbG9iYmVycy4gICovCisgIHRyZWUgc3RhY2tfcHJvdGVjdF9ndWFyZDsKKworICAvKiBMaXN0IChjaGFpbiBvZiBFWFBSX0xJU1QpIG9mIGxhYmVscyBoZWFkaW5nIHRoZSBjdXJyZW50IGhhbmRsZXJzIGZvcgorICAgICBub25sb2NhbCBnb3Rvcy4gICovCisgIHJ0eCB4X25vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHM7CisKKyAgLyogTGFiZWwgdGhhdCB3aWxsIGdvIG9uIGZ1bmN0aW9uIGVwaWxvZ3VlLgorICAgICBKdW1waW5nIHRvIHRoaXMgbGFiZWwgc2VydmVzIGFzIGEgInJldHVybiIgaW5zdHJ1Y3Rpb24KKyAgICAgb24gbWFjaGluZXMgd2hpY2ggcmVxdWlyZSBleGVjdXRpb24gb2YgdGhlIGVwaWxvZ3VlIG9uIGFsbCByZXR1cm5zLiAgKi8KKyAgcnR4IHhfcmV0dXJuX2xhYmVsOworCisgIC8qIExhYmVsIHRoYXQgd2lsbCBnbyBvbiB0aGUgZW5kIG9mIGZ1bmN0aW9uIGVwaWxvZ3VlLgorICAgICBKdW1waW5nIHRvIHRoaXMgbGFiZWwgc2VydmVzIGFzIGEgIm5ha2VkIHJldHVybiIgaW5zdHJ1Y3Rpb24KKyAgICAgb24gbWFjaGluZXMgd2hpY2ggcmVxdWlyZSBleGVjdXRpb24gb2YgdGhlIGVwaWxvZ3VlIG9uIGFsbCByZXR1cm5zLiAgKi8KKyAgcnR4IHhfbmFrZWRfcmV0dXJuX2xhYmVsOworCisgIC8qIExpc3QgKGNoYWluIG9mIEVYUFJfTElTVHMpIG9mIGFsbCBzdGFjayBzbG90cyBpbiB0aGlzIGZ1bmN0aW9uLgorICAgICBNYWRlIGZvciB0aGUgc2FrZSBvZiB1bnNoYXJlX2FsbF9ydGwuICAqLworICBydHggeF9zdGFja19zbG90X2xpc3Q7CisKKyAgLyogTGlzdCBvZiBlbXB0eSBhcmVhcyBpbiB0aGUgc3RhY2sgZnJhbWUuICAqLworICBzdHJ1Y3QgZnJhbWVfc3BhY2UgKmZyYW1lX3NwYWNlX2xpc3Q7CisKKyAgLyogUGxhY2UgYWZ0ZXIgd2hpY2ggdG8gaW5zZXJ0IHRoZSB0YWlsX3JlY3Vyc2lvbl9sYWJlbCBpZiB3ZSBuZWVkIG9uZS4gICovCisgIHJ0eCB4X3N0YWNrX2NoZWNrX3Byb2JlX25vdGU7CisKKyAgLyogTG9jYXRpb24gYXQgd2hpY2ggdG8gc2F2ZSB0aGUgYXJndW1lbnQgcG9pbnRlciBpZiBpdCB3aWxsIG5lZWQgdG8gYmUKKyAgICAgcmVmZXJlbmNlZC4gIFRoZXJlIGFyZSB0d28gY2FzZXMgd2hlcmUgdGhpcyBpcyBkb25lOiBpZiBub25sb2NhbCBnb3RvcworICAgICBleGlzdCwgb3IgaWYgdmFycyBzdG9yZWQgYXQgYW4gb2Zmc2V0IGZyb20gdGhlIGFyZ3VtZW50IHBvaW50ZXIgd2lsbCBiZQorICAgICBuZWVkZWQgYnkgaW5uZXIgcm91dGluZXMuICAqLworICBydHggeF9hcmdfcG9pbnRlcl9zYXZlX2FyZWE7CisKKyAgLyogRHluYW1pYyBSZWFsaWduIEFyZ3VtZW50IFBvaW50ZXIgdXNlZCBmb3IgcmVhbGlnbmluZyBzdGFjay4gICovCisgIHJ0eCBkcmFwX3JlZzsKKworICAvKiBPZmZzZXQgdG8gZW5kIG9mIGFsbG9jYXRlZCBhcmVhIG9mIHN0YWNrIGZyYW1lLgorICAgICBJZiBzdGFjayBncm93cyBkb3duLCB0aGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXN0IHN0YWNrIHNsb3QgYWxsb2NhdGVkLgorICAgICBJZiBzdGFjayBncm93cyB1cCwgdGhpcyBpcyB0aGUgYWRkcmVzcyBmb3IgdGhlIG5leHQgc2xvdC4gICovCisgIEhPU1RfV0lERV9JTlQgeF9mcmFtZV9vZmZzZXQ7CisKKyAgLyogSW5zbiBhZnRlciB3aGljaCByZWdpc3RlciBwYXJtcyBhbmQgU0FWRV9FWFBScyBhcmUgYm9ybiwgaWYgbm9ub3B0LiAgKi8KKyAgcnR4IHhfcGFybV9iaXJ0aF9pbnNuOworCisgIC8qIExpc3Qgb2YgYWxsIHVzZWQgdGVtcG9yYXJpZXMgYWxsb2NhdGVkLCBieSBsZXZlbC4gICovCisgIHZlYzx0ZW1wX3Nsb3RfcCwgdmFfZ2M+ICp4X3VzZWRfdGVtcF9zbG90czsKKworICAvKiBMaXN0IG9mIGF2YWlsYWJsZSB0ZW1wIHNsb3RzLiAgKi8KKyAgc3RydWN0IHRlbXBfc2xvdCAqeF9hdmFpbF90ZW1wX3Nsb3RzOworCisgIC8qIEN1cnJlbnQgbmVzdGluZyBsZXZlbCBmb3IgdGVtcG9yYXJpZXMuICAqLworICBpbnQgeF90ZW1wX3Nsb3RfbGV2ZWw7CisKKyAgLyogVGhlIGxhcmdlc3QgYWxpZ25tZW50IG5lZWRlZCBvbiB0aGUgc3RhY2ssIGluY2x1ZGluZyByZXF1aXJlbWVudAorICAgICBmb3Igb3V0Z29pbmcgc3RhY2sgYWxpZ25tZW50LiAgKi8KKyAgdW5zaWduZWQgaW50IHN0YWNrX2FsaWdubWVudF9uZWVkZWQ7CisKKyAgLyogUHJlZmVycmVkIGFsaWdubWVudCBvZiB0aGUgZW5kIG9mIHN0YWNrIGZyYW1lLCB3aGljaCBpcyBwcmVmZXJyZWQKKyAgICAgdG8gY2FsbCBvdGhlciBmdW5jdGlvbnMuICAqLworICB1bnNpZ25lZCBpbnQgcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5OworCisgIC8qIFRoZSBtaW5pbXVtIGFsaWdubWVudCBvZiBwYXJhbWV0ZXIgc3RhY2suICAqLworICB1bnNpZ25lZCBpbnQgcGFybV9zdGFja19ib3VuZGFyeTsKKworICAvKiBUaGUgbGFyZ2VzdCBhbGlnbm1lbnQgb2Ygc2xvdCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLiAgKi8KKyAgdW5zaWduZWQgaW50IG1heF91c2VkX3N0YWNrX3Nsb3RfYWxpZ25tZW50OworCisgIC8qIFRoZSBzdGFjayBhbGlnbm1lbnQgZXN0aW1hdGVkIGJlZm9yZSByZWxvYWQsIHdpdGggY29uc2lkZXJhdGlvbiBvZgorICAgICBmb2xsb3dpbmcgZmFjdG9yczoKKyAgICAgMS4gQWxpZ25tZW50IG9mIGxvY2FsIHN0YWNrIHZhcmlhYmxlcyAobWF4X3VzZWRfc3RhY2tfc2xvdF9hbGlnbm1lbnQpCisgICAgIDIuIEFsaWdubWVudCByZXF1aXJlbWVudCB0byBjYWxsIG90aGVyIGZ1bmN0aW9ucworICAgICAgICAocHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5KQorICAgICAzLiBBbGlnbm1lbnQgb2Ygbm9uLWxvY2FsIHN0YWNrIHZhcmlhYmxlcyBidXQgbWlnaHQgYmUgc3BpbGxlZCBpbgorICAgICAgICBsb2NhbCBzdGFjay4gICovCisgIHVuc2lnbmVkIGludCBzdGFja19hbGlnbm1lbnRfZXN0aW1hdGVkOworCisgIC8qIEZvciByZW9yZy4gICovCisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBjYWxsZWQgYnVpbHRpbl9yZXR1cm5fYWRkciBvcgorICAgICBidWlsdGluX2ZyYW1lX2FkZHJlc3Mgd2l0aCBub256ZXJvIGNvdW50LiAgKi8KKyAgYm9vbCBhY2Nlc3Nlc19wcmlvcl9mcmFtZXM7CisKKyAgLyogTm9uemVybyBpZiB0aGUgZnVuY3Rpb24gY2FsbHMgX19idWlsdGluX2VoX3JldHVybi4gICovCisgIGJvb2wgY2FsbHNfZWhfcmV0dXJuOworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gc2F2ZXMgYWxsIHJlZ2lzdGVycywgZS5nLiBpZiBpdCBoYXMgYSBub25sb2NhbAorICAgICBsYWJlbCB0aGF0IGNhbiByZWFjaCB0aGUgZXhpdCBibG9jayB2aWEgbm9uLWV4Y2VwdGlvbmFsIHBhdGhzLiAqLworICBib29sIHNhdmVzX2FsbF9yZWdpc3RlcnM7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBoYXMgbm9ubG9jYWwgZ290b3MgdG8gcGFyZW50CisgICAgIGZ1bmN0aW9uLiAgKi8KKyAgYm9vbCBoYXNfbm9ubG9jYWxfZ290bzsKKworICAvKiBOb256ZXJvIGlmIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGhhcyBhbiBhc20gc3RhdGVtZW50LiAgKi8KKyAgYm9vbCBoYXNfYXNtX3N0YXRlbWVudDsKKworICAvKiBUaGlzIGJpdCBpcyB1c2VkIGJ5IHRoZSBleGNlcHRpb24gaGFuZGxpbmcgbG9naWMuICBJdCBpcyBzZXQgaWYgYWxsCisgICAgIGNhbGxzIChpZiBhbnkpIGFyZSBzaWJsaW5nIGNhbGxzLiAgU3VjaCBmdW5jdGlvbnMgZG8gbm90IGhhdmUgdG8KKyAgICAgaGF2ZSBFSCB0YWJsZXMgZ2VuZXJhdGVkLCBhcyB0aGV5IGNhbm5vdCB0aHJvdy4gIEEgY2FsbCB0byBzdWNoIGEKKyAgICAgZnVuY3Rpb24sIGhvd2V2ZXIsIHNob3VsZCBiZSB0cmVhdGVkIGFzIHRocm93aW5nIGlmIGFueSBvZiBpdHMgY2FsbGVlcworICAgICBjYW4gdGhyb3cuICAqLworICBib29sIGFsbF90aHJvd2Vyc19hcmVfc2liY2FsbHM7CisKKyAgLyogTm9uemVybyBpZiBzdGFjayBsaW1pdCBjaGVja2luZyBzaG91bGQgYmUgZW5hYmxlZCBpbiB0aGUgY3VycmVudAorICAgICBmdW5jdGlvbi4gICovCisgIGJvb2wgbGltaXRfc3RhY2s7CisKKyAgLyogTm9uemVybyBpZiBwcm9maWxpbmcgY29kZSBzaG91bGQgYmUgZ2VuZXJhdGVkLiAgKi8KKyAgYm9vbCBwcm9maWxlOworCisgIC8qIE5vbnplcm8gaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gdXNlcyB0aGUgY29uc3RhbnQgcG9vbC4gICovCisgIGJvb2wgdXNlc19jb25zdF9wb29sOworCisgIC8qIE5vbnplcm8gaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gdXNlcyBwaWNfb2Zmc2V0X3RhYmxlX3J0eC4gICovCisgIGJvb2wgdXNlc19waWNfb2Zmc2V0X3RhYmxlOworCisgIC8qIE5vbnplcm8gaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gbmVlZHMgYW4gbHNkYSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLiAgKi8KKyAgYm9vbCB1c2VzX2VoX2xzZGE7CisKKyAgLyogU2V0IHdoZW4gdGhlIHRhaWwgY2FsbCBoYXMgYmVlbiBwcm9kdWNlZC4gICovCisgIGJvb2wgdGFpbF9jYWxsX2VtaXQ7CisKKyAgLyogTm9uemVybyBpZiBjb2RlIHRvIGluaXRpYWxpemUgYXJnX3BvaW50ZXJfc2F2ZV9hcmVhIGhhcyBiZWVuIGVtaXR0ZWQuICAqLworICBib29sIGFyZ19wb2ludGVyX3NhdmVfYXJlYV9pbml0OworCisgIC8qIE5vbnplcm8gaWYgY3VycmVudCBmdW5jdGlvbiBtdXN0IGJlIGdpdmVuIGEgZnJhbWUgcG9pbnRlci4KKyAgICAgU2V0IGluIHJlbG9hZDEuYyBvciBscmEtZWxpbWluYXRpb25zLmMgaWYgYW55dGhpbmcgaXMgYWxsb2NhdGVkCisgICAgIG9uIHRoZSBzdGFjayB0aGVyZS4gICovCisgIGJvb2wgZnJhbWVfcG9pbnRlcl9uZWVkZWQ7CisKKyAgLyogV2hlbiBzZXQsIGV4cGFuZCBzaG91bGQgb3B0aW1pemUgZm9yIHNwZWVkLiAgKi8KKyAgYm9vbCBtYXliZV9ob3RfaW5zbl9wOworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gc3RhY2sgcmVhbGlnbm1lbnQgaXMgbmVlZGVkLiAgVGhpcyBmbGFnIG1heSBiZQorICAgICBzZXQgdHdpY2U6IGJlZm9yZSBhbmQgYWZ0ZXIgcmVsb2FkLiAgSXQgaXMgc2V0IGJlZm9yZSByZWxvYWQgd3J0CisgICAgIHN0YWNrIGFsaWdubWVudCBlc3RpbWF0aW9uIGJlZm9yZSByZWxvYWQuICBJdCB3aWxsIGJlIGNoYW5nZWQgYWZ0ZXIKKyAgICAgcmVsb2FkIGlmIGJ5IHRoZW4gY3JpdGVyaWEgb2Ygc3RhY2sgcmVhbGlnbm1lbnQgaXMgZGlmZmVyZW50LgorICAgICBUaGUgdmFsdWUgc2V0IGFmdGVyIHJlbG9hZCBpcyB0aGUgYWNjdXJhdGUgb25lIGFuZCBpcyBmaW5hbGl6ZWQuICAqLworICBib29sIHN0YWNrX3JlYWxpZ25fbmVlZGVkOworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gc3RhY2sgcmVhbGlnbm1lbnQgaXMgdHJpZWQuICBUaGlzIGZsYWcgaXMgc2V0CisgICAgIG9ubHkgb25jZSBiZWZvcmUgcmVsb2FkLiAgSXQgYWZmZWN0cyByZWdpc3RlciBlbGltaW5hdGlvbi4gIFRoaXMKKyAgICAgaXMgdXNlZCB0byBnZW5lcmF0ZSBEV0FSRiBkZWJ1ZyBpbmZvIGZvciBzdGFjayB2YXJpYWJsZXMuICAqLworICBib29sIHN0YWNrX3JlYWxpZ25fdHJpZWQ7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBuZWVkcyBkeW5hbWljIHJlYWxpZ25lZAorICAgICBhcmd1bWVudCBwb2ludGVyIChkcmFwKSBpZiBzdGFjayBuZWVkcyByZWFsaWduaW5nLiAgKi8KKyAgYm9vbCBuZWVkX2RyYXA7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBzdGFjayByZWFsaWdubWVudCBlc3RpbWF0aW9uIGlzIGRvbmUsIG5hbWVseQorICAgICBzdGFja19yZWFsaWduX25lZWRlZCBmbGFnIGhhcyBiZWVuIHNldCBiZWZvcmUgcmVsb2FkIHdydCBlc3RpbWF0ZWQKKyAgICAgc3RhY2sgYWxpZ25tZW50IGluZm8uICAqLworICBib29sIHN0YWNrX3JlYWxpZ25fcHJvY2Vzc2VkOworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gc3RhY2sgcmVhbGlnbm1lbnQgaGFzIGJlZW4gZmluYWxpemVkLCBuYW1lbHkKKyAgICAgc3RhY2tfcmVhbGlnbl9uZWVkZWQgZmxhZyBoYXMgYmVlbiBzZXQgYW5kIGZpbmFsaXplZCBhZnRlciByZWxvYWQuICAqLworICBib29sIHN0YWNrX3JlYWxpZ25fZmluYWxpemVkOworCisgIC8qIFRydWUgaWYgZGJyX3NjaGVkdWxlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIGZ1bmN0aW9uLiAgKi8KKyAgYm9vbCBkYnJfc2NoZWR1bGVkX3A7CisKKyAgLyogVHJ1ZSBpZiBjdXJyZW50IGZ1bmN0aW9uIGNhbiBub3QgdGhyb3cuICBVbmxpa2UKKyAgICAgVFJFRV9OT1RIUk9XIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpIGl0IGlzIHNldCBldmVuIGZvciBvdmVyd3JpdGFibGUKKyAgICAgZnVuY3Rpb24gd2hlcmUgY3VycmVudGx5IGNvbXBpbGVkIHZlcnNpb24gb2YgaXQgaXMgbm90aHJvdy4gICovCisgIGJvb2wgbm90aHJvdzsKKworICAvKiBUcnVlIGlmIHdlIHBlcmZvcm1lZCBzaHJpbmstd3JhcHBpbmcgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKyAgYm9vbCBzaHJpbmtfd3JhcHBlZDsKKworICAvKiBOb256ZXJvIGlmIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGRvZXNuJ3QgbW9kaWZ5IHRoZSBzdGFjayBwb2ludGVyCisgICAgIChpZ25vcmluZyB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlKS4gIFRoaXMgaXMgb25seSB2YWxpZCBhZnRlcgorICAgICBwYXNzX3N0YWNrX3B0cl9tb2QgaGFzIHJ1bi4gICovCisgIGJvb2wgc3BfaXNfdW5jaGFuZ2luZzsKKworICAvKiBOb256ZXJvIGlmIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGRvZXNuJ3QgY29udGFpbiBhbnkgY2FsbHMKKyAgICAgKGlnbm9yaW5nIHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUpLiAgVGhpcyBpcyBzZXQgcHJpb3IgdG8KKyAgICAgbG9jYWwgcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgaXMgdmFsaWQgZm9yIHRoZSByZW1haW5pbmcKKyAgICAgY29tcGlsZXIgcGFzc2VzLiAgKi8KKyAgYm9vbCBpc19sZWFmOworCisgIC8qIE5vbnplcm8gaWYgdGhlIGZ1bmN0aW9uIGJlaW5nIGNvbXBpbGVkIGlzIGEgbGVhZiBmdW5jdGlvbiB3aGljaCBvbmx5CisgICAgIHVzZXMgbGVhZiByZWdpc3RlcnMuICBUaGlzIGlzIHZhbGlkIGFmdGVyIHJlbG9hZCAoc3BlY2lmaWNhbGx5IGFmdGVyCisgICAgIHNjaGVkMikgYW5kIGlzIHVzZWZ1bCBvbmx5IGlmIHRoZSBwb3J0IGRlZmluZXMgTEVBRl9SRUdJU1RFUlMuICAqLworICBib29sIHVzZXNfb25seV9sZWFmX3JlZ3M7CisKKyAgLyogTGlrZSByZWdzX2V2ZXJfbGl2ZSwgYnV0IDEgaWYgYSByZWcgaXMgc2V0IG9yIGNsb2JiZXJlZCBmcm9tIGFuCisgICAgIGFzbS4gIFVubGlrZSByZWdzX2V2ZXJfbGl2ZSwgZWxlbWVudHMgb2YgdGhpcyBhcnJheSBjb3JyZXNwb25kaW5nCisgICAgIHRvIGVsaW1pbmFibGUgcmVncyAobGlrZSB0aGUgZnJhbWUgcG9pbnRlcikgYXJlIHNldCBpZiBhbiBhc20KKyAgICAgc2V0cyB0aGVtLiAgKi8KKyAgSEFSRF9SRUdfU0VUIGFzbV9jbG9iYmVyczsKK307CisKKyNkZWZpbmUgcmV0dXJuX2xhYmVsIChjcnRsLT54X3JldHVybl9sYWJlbCkKKyNkZWZpbmUgbmFrZWRfcmV0dXJuX2xhYmVsIChjcnRsLT54X25ha2VkX3JldHVybl9sYWJlbCkKKyNkZWZpbmUgc3RhY2tfc2xvdF9saXN0IChjcnRsLT54X3N0YWNrX3Nsb3RfbGlzdCkKKyNkZWZpbmUgcGFybV9iaXJ0aF9pbnNuIChjcnRsLT54X3Bhcm1fYmlydGhfaW5zbikKKyNkZWZpbmUgZnJhbWVfb2Zmc2V0IChjcnRsLT54X2ZyYW1lX29mZnNldCkKKyNkZWZpbmUgc3RhY2tfY2hlY2tfcHJvYmVfbm90ZSAoY3J0bC0+eF9zdGFja19jaGVja19wcm9iZV9ub3RlKQorI2RlZmluZSBhcmdfcG9pbnRlcl9zYXZlX2FyZWEgKGNydGwtPnhfYXJnX3BvaW50ZXJfc2F2ZV9hcmVhKQorI2RlZmluZSB1c2VkX3RlbXBfc2xvdHMgKGNydGwtPnhfdXNlZF90ZW1wX3Nsb3RzKQorI2RlZmluZSBhdmFpbF90ZW1wX3Nsb3RzIChjcnRsLT54X2F2YWlsX3RlbXBfc2xvdHMpCisjZGVmaW5lIHRlbXBfc2xvdF9sZXZlbCAoY3J0bC0+eF90ZW1wX3Nsb3RfbGV2ZWwpCisjZGVmaW5lIG5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgKGNydGwtPnhfbm9ubG9jYWxfZ290b19oYW5kbGVyX2xhYmVscykKKyNkZWZpbmUgZnJhbWVfcG9pbnRlcl9uZWVkZWQgKGNydGwtPmZyYW1lX3BvaW50ZXJfbmVlZGVkKQorI2RlZmluZSBzdGFja19yZWFsaWduX2ZwIChjcnRsLT5zdGFja19yZWFsaWduX25lZWRlZCAmJiAhY3J0bC0+bmVlZF9kcmFwKQorI2RlZmluZSBzdGFja19yZWFsaWduX2RyYXAgKGNydGwtPnN0YWNrX3JlYWxpZ25fbmVlZGVkICYmIGNydGwtPm5lZWRfZHJhcCkKKworZXh0ZXJuIEdUWSgoKSkgc3RydWN0IHJ0bF9kYXRhIHhfcnRsOworCisvKiBBY2Nlc3NvciB0byBSVEwgZGF0YXN0cnVjdHVyZXMuICBXZSBrZWVwIHRoZW0gc3RhdGljYWxseSBhbGxvY2F0ZWQgbm93IHNpbmNlCisgICB3ZSBuZXZlciBrZWVwIG11bHRpcGxlIGZ1bmN0aW9ucy4gIEZvciB0aHJlYWRlZCBjb21waWxlciB3ZSBtaWdodCBob3dldmVyCisgICB3YW50IHRvIGRvIGRpZmZlcmVudGx5LiAgKi8KKyNkZWZpbmUgY3J0bCAoJnhfcnRsKQorCitzdHJ1Y3QgR1RZKCgpKSBzdGFja191c2FnZQoreworICAvKiAjIG9mIGJ5dGVzIG9mIHN0YXRpYyBzdGFjayBzcGFjZSBhbGxvY2F0ZWQgYnkgdGhlIGZ1bmN0aW9uLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBzdGF0aWNfc3RhY2tfc2l6ZTsKKworICAvKiAjIG9mIGJ5dGVzIG9mIGR5bmFtaWMgc3RhY2sgc3BhY2UgYWxsb2NhdGVkIGJ5IHRoZSBmdW5jdGlvbi4gIFRoaXMgaXMKKyAgICAgbWVhbmluZ2Z1bCBvbmx5IGlmIGhhc191bmJvdW5kZWRfZHluYW1pY19zdGFja19zaXplIGlzIHplcm8uICAqLworICBIT1NUX1dJREVfSU5UIGR5bmFtaWNfc3RhY2tfc2l6ZTsKKworICAvKiAjIG9mIGJ5dGVzIG9mIHNwYWNlIHB1c2hlZCBvbnRvIHRoZSBzdGFjayBhZnRlciB0aGUgcHJvbG9ndWUuICBJZgorICAgICAhQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTLCBpdCBjb250YWlucyB0aGUgb3V0Z29pbmcgYXJndW1lbnRzLiAgKi8KKyAgaW50IHB1c2hlZF9zdGFja19zaXplOworCisgIC8qIE5vbnplcm8gaWYgdGhlIGFtb3VudCBvZiBzdGFjayBzcGFjZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgY2Fubm90CisgICAgIGJlIGJvdW5kZWQgYXQgY29tcGlsZS10aW1lLiAgKi8KKyAgdW5zaWduZWQgaW50IGhhc191bmJvdW5kZWRfZHluYW1pY19zdGFja19zaXplIDogMTsKK307CisKKyNkZWZpbmUgY3VycmVudF9mdW5jdGlvbl9zdGF0aWNfc3RhY2tfc2l6ZSAoY2Z1bi0+c3UtPnN0YXRpY19zdGFja19zaXplKQorI2RlZmluZSBjdXJyZW50X2Z1bmN0aW9uX2R5bmFtaWNfc3RhY2tfc2l6ZSAoY2Z1bi0+c3UtPmR5bmFtaWNfc3RhY2tfc2l6ZSkKKyNkZWZpbmUgY3VycmVudF9mdW5jdGlvbl9wdXNoZWRfc3RhY2tfc2l6ZSAoY2Z1bi0+c3UtPnB1c2hlZF9zdGFja19zaXplKQorI2RlZmluZSBjdXJyZW50X2Z1bmN0aW9uX2hhc191bmJvdW5kZWRfZHluYW1pY19zdGFja19zaXplIFwKKyAgKGNmdW4tPnN1LT5oYXNfdW5ib3VuZGVkX2R5bmFtaWNfc3RhY2tfc2l6ZSkKKyNkZWZpbmUgY3VycmVudF9mdW5jdGlvbl9hbGxvY2F0ZXNfZHluYW1pY19zdGFja19zcGFjZSAgICBcCisgIChjdXJyZW50X2Z1bmN0aW9uX2R5bmFtaWNfc3RhY2tfc2l6ZSAhPSAwICAgICAgICAgICAgICAgXAorICAgfHwgY3VycmVudF9mdW5jdGlvbl9oYXNfdW5ib3VuZGVkX2R5bmFtaWNfc3RhY2tfc2l6ZSkKKworLyogVGhpcyBzdHJ1Y3R1cmUgY2FuIHNhdmUgYWxsIHRoZSBpbXBvcnRhbnQgZ2xvYmFsIGFuZCBzdGF0aWMgdmFyaWFibGVzCisgICBkZXNjcmliaW5nIHRoZSBzdGF0dXMgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICAqLworCitzdHJ1Y3QgR1RZKCgpKSBmdW5jdGlvbiB7CisgIHN0cnVjdCBlaF9zdGF0dXMgKmVoOworCisgIC8qIFRoZSBjb250cm9sIGZsb3cgZ3JhcGggZm9yIHRoaXMgZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgY29udHJvbF9mbG93X2dyYXBoICpjZmc7CisKKyAgLyogR0lNUExFIGJvZHkgZm9yIHRoaXMgZnVuY3Rpb24uICAqLworICBnaW1wbGVfc2VxIGdpbXBsZV9ib2R5OworCisgIC8qIFNTQSBhbmQgZGF0YWZsb3cgaW5mb3JtYXRpb24uICAqLworICBzdHJ1Y3QgZ2ltcGxlX2RmICpnaW1wbGVfZGY7CisKKyAgLyogVGhlIGxvb3BzIGluIHRoaXMgZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgbG9vcHMgKnhfY3VycmVudF9sb29wczsKKworICAvKiBUaGUgc3RhY2sgdXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbi4gICovCisgIHN0cnVjdCBzdGFja191c2FnZSAqc3U7CisKKyAgLyogVmFsdWUgaGlzdG9ncmFtcyBhdHRhY2hlZCB0byBwYXJ0aWN1bGFyIHN0YXRlbWVudHMuICAqLworICBodGFiX3QgR1RZKChza2lwKSkgdmFsdWVfaGlzdG9ncmFtczsKKworICAvKiBGb3IgZnVuY3Rpb24uYy4gICovCisKKyAgLyogUG9pbnRzIHRvIHRoZSBGVU5DVElPTl9ERUNMIG9mIHRoaXMgZnVuY3Rpb24uICAqLworICB0cmVlIGRlY2w7CisKKyAgLyogQSBQQVJNX0RFQ0wgdGhhdCBzaG91bGQgY29udGFpbiB0aGUgc3RhdGljIGNoYWluIGZvciB0aGlzIGZ1bmN0aW9uLgorICAgICBJdCB3aWxsIGJlIGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKyAgdHJlZSBzdGF0aWNfY2hhaW5fZGVjbDsKKworICAvKiBBbiBleHByZXNzaW9uIHRoYXQgY29udGFpbnMgdGhlIG5vbi1sb2NhbCBnb3RvIHNhdmUgYXJlYS4gIFRoZSBmaXJzdAorICAgICB3b3JkIGlzIHRoZSBzYXZlZCBmcmFtZSBwb2ludGVyIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBzYXZlZCBzdGFjaworICAgICBwb2ludGVyLiAgKi8KKyAgdHJlZSBub25sb2NhbF9nb3RvX3NhdmVfYXJlYTsKKworICAvKiBWZWN0b3Igb2YgZnVuY3Rpb24gbG9jYWwgdmFyaWFibGVzLCBmdW5jdGlvbnMsIHR5cGVzIGFuZCBjb25zdGFudHMuICAqLworICB2ZWM8dHJlZSwgdmFfZ2M+ICpsb2NhbF9kZWNsczsKKworICAvKiBGb3IgbWQgZmlsZXMuICAqLworCisgIC8qIHRtLmggY2FuIHVzZSB0aGlzIHRvIHN0b3JlIHdoYXRldmVyIGl0IGxpa2VzLiAgKi8KKyAgc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24gKiBHVFkgKChtYXliZV91bmRlZikpIG1hY2hpbmU7CisKKyAgLyogTGFuZ3VhZ2Utc3BlY2lmaWMgY29kZSBjYW4gdXNlIHRoaXMgdG8gc3RvcmUgd2hhdGV2ZXIgaXQgbGlrZXMuICAqLworICBzdHJ1Y3QgbGFuZ3VhZ2VfZnVuY3Rpb24gKiBsYW5ndWFnZTsKKworICAvKiBVc2VkIHR5cGVzIGhhc2ggdGFibGUuICAqLworICBodGFiX3QgR1RZICgocGFyYW1faXMgKHVuaW9uIHRyZWVfbm9kZSkpKSB1c2VkX3R5cGVzX2hhc2g7CisKKyAgLyogRHdhcmYyIEZyYW1lIERlc2NyaXB0aW9uIEVudHJ5LCBjb250YWluaW5nIHRoZSBDYWxsIEZyYW1lIEluc3RydWN0aW9ucworICAgICB1c2VkIGZvciB1bndpbmRpbmcuICBPbmx5IHNldCB3aGVuIGVpdGhlciBkd2FyZjIgdW53aW5kaW5nIG9yIGR3YXJmMgorICAgICBkZWJ1Z2dpbmcgaXMgZW5hYmxlZC4gICovCisgIHN0cnVjdCBkd19mZGVfc3RydWN0ICpmZGU7CisKKyAgLyogTGFzdCBzdGF0ZW1lbnQgdWlkLiAgKi8KKyAgaW50IGxhc3Rfc3RtdF91aWQ7CisKKyAgLyogRnVuY3Rpb24gc2VxdWVuY2UgbnVtYmVyIGZvciBwcm9maWxpbmcsIGRlYnVnZ2luZywgZXRjLiAgKi8KKyAgaW50IGZ1bmNkZWZfbm87CisKKyAgLyogTGluZSBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiAgKi8KKyAgbG9jYXRpb25fdCBmdW5jdGlvbl9zdGFydF9sb2N1czsKKworICAvKiBMaW5lIG51bWJlciBvZiB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4gICovCisgIGxvY2F0aW9uX3QgZnVuY3Rpb25fZW5kX2xvY3VzOworCisgIC8qIFByb3BlcnRpZXMgdXNlZCBieSB0aGUgcGFzcyBtYW5hZ2VyLiAgKi8KKyAgdW5zaWduZWQgaW50IGN1cnJfcHJvcGVydGllczsKKyAgdW5zaWduZWQgaW50IGxhc3RfdmVyaWZpZWQ7CisKKyAgLyogTm9uLW51bGwgaWYgdGhlIGZ1bmN0aW9uIGRvZXMgc29tZXRoaW5nIHRoYXQgd291bGQgcHJldmVudCBpdCBmcm9tCisgICAgIGJlaW5nIGNvcGllZDsgdGhpcyBhcHBsaWVzIHRvIGJvdGggdmVyc2lvbmluZyBhbmQgaW5saW5pbmcuICBTZXQgdG8KKyAgICAgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVhc29uIGZvciBmYWlsdXJlLiAgKi8KKyAgY29uc3QgY2hhciAqIEdUWSgoc2tpcCkpIGNhbm5vdF9iZV9jb3BpZWRfcmVhc29uOworCisgIC8qIENvbGxlY3RlZCBiaXQgZmxhZ3MuICAqLworCisgIC8qIE51bWJlciBvZiB1bml0cyBvZiBnZW5lcmFsIHJlZ2lzdGVycyB0aGF0IG5lZWQgc2F2aW5nIGluIHN0ZGFyZworICAgICBmdW5jdGlvbi4gIFdoYXQgdW5pdCBpcyBkZXBlbmRzIG9uIHRoZSBiYWNrZW5kLCBlaXRoZXIgaXQgaXMgbnVtYmVyCisgICAgIG9mIGJ5dGVzLCBvciBpdCBjYW4gYmUgbnVtYmVyIG9mIHJlZ2lzdGVycy4gICovCisgIHVuc2lnbmVkIGludCB2YV9saXN0X2dwcl9zaXplIDogODsKKworICAvKiBOdW1iZXIgb2YgdW5pdHMgb2YgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIHRoYXQgbmVlZCBzYXZpbmcgaW4gc3RkYXJnCisgICAgIGZ1bmN0aW9uLiAgKi8KKyAgdW5zaWduZWQgaW50IHZhX2xpc3RfZnByX3NpemUgOiA4OworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgY2FuIGNhbGwgc2V0am1wLiAgKi8KKyAgdW5zaWduZWQgaW50IGNhbGxzX3NldGptcCA6IDE7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBjYW4gY2FsbCBhbGxvY2EsCisgICAgIGVpdGhlciBhcyBhIHN1YnJvdXRpbmUgb3IgYnVpbHRpbi4gICovCisgIHVuc2lnbmVkIGludCBjYWxsc19hbGxvY2EgOiAxOworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgcmVjZWl2ZXMgbm9ubG9jYWwgZ290b3MKKyAgICAgZnJvbSBuZXN0ZWQgZnVuY3Rpb25zLiAgKi8KKyAgdW5zaWduZWQgaW50IGhhc19ub25sb2NhbF9sYWJlbCA6IDE7CisKKyAgLyogTm9uemVybyBpZiB3ZSd2ZSBzZXQgY2Fubm90X2JlX2NvcGllZF9yZWFzb24uICBJLmUuIGlmCisgICAgIChjYW5ub3RfYmVfY29waWVkX3NldCAmJiAhY2Fubm90X2JlX2NvcGllZF9yZWFzb24pLCB0aGUgZnVuY3Rpb24KKyAgICAgY2FuIGluIGZhY3QgYmUgY29waWVkLiAgKi8KKyAgdW5zaWduZWQgaW50IGNhbm5vdF9iZV9jb3BpZWRfc2V0IDogMTsKKworICAvKiBOb256ZXJvIGlmIGN1cnJlbnQgZnVuY3Rpb24gdXNlcyBzdGRhcmcuaCBvciBlcXVpdmFsZW50LiAgKi8KKyAgdW5zaWduZWQgaW50IHN0ZGFyZyA6IDE7CisKKyAgdW5zaWduZWQgaW50IGFmdGVyX2lubGluaW5nIDogMTsKKyAgdW5zaWduZWQgaW50IGFsd2F5c19pbmxpbmVfZnVuY3Rpb25zX2lubGluZWQgOiAxOworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgY2FuIHRocm93IHN5bmNocm9ub3VzIG5vbi1jYWxsCisgICAgIGV4Y2VwdGlvbnMuICAqLworICB1bnNpZ25lZCBpbnQgY2FuX3Rocm93X25vbl9jYWxsX2V4Y2VwdGlvbnMgOiAxOworCisgIC8qIE5vbnplcm8gaWYgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IHRocm93IGV4Y2VwdGlvbnMgYnV0IGRvbid0IG90aGVyd2lzZQorICAgICBjb250cmlidXRlIHRvIHRoZSBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQuICAqLworICB1bnNpZ25lZCBpbnQgY2FuX2RlbGV0ZV9kZWFkX2V4Y2VwdGlvbnMgOiAxOworCisgIC8qIEZpZWxkcyBiZWxvdyB0aGlzIHBvaW50IGFyZSBub3Qgc2V0IGZvciBhYnN0cmFjdCBmdW5jdGlvbnM7IHNlZQorICAgICBhbGxvY2F0ZV9zdHJ1Y3RfZnVuY3Rpb24uICAqLworCisgIC8qIE5vbnplcm8gaWYgZnVuY3Rpb24gYmVpbmcgY29tcGlsZWQgbmVlZHMgdG8gYmUgZ2l2ZW4gYW4gYWRkcmVzcworICAgICB3aGVyZSB0aGUgdmFsdWUgc2hvdWxkIGJlIHN0b3JlZC4gICovCisgIHVuc2lnbmVkIGludCByZXR1cm5zX3N0cnVjdCA6IDE7CisKKyAgLyogTm9uemVybyBpZiBmdW5jdGlvbiBiZWluZyBjb21waWxlZCBuZWVkcyB0bworICAgICByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygd2hlcmUgaXQgaGFzIHB1dCBhIHN0cnVjdHVyZSB2YWx1ZS4gICovCisgIHVuc2lnbmVkIGludCByZXR1cm5zX3BjY19zdHJ1Y3QgOiAxOworCisgIC8qIE5vbnplcm8gaWYgdGhpcyBmdW5jdGlvbiBoYXMgbG9jYWwgREVDTF9IQVJEX1JFR0lTVEVSIHZhcmlhYmxlcy4KKyAgICAgSW4gdGhpcyBjYXNlIGNvZGUgbW90aW9uIGhhcyB0byBiZSBkb25lIG1vcmUgY2FyZWZ1bGx5LiAgKi8KKyAgdW5zaWduZWQgaW50IGhhc19sb2NhbF9leHBsaWNpdF9yZWdfdmFycyA6IDE7CisKKyAgLyogTm9uemVybyBpZiB0aGUgY3VycmVudCBmdW5jdGlvbiBpcyBhIHRodW5rLCBpLmUuLCBhIGxpZ2h0d2VpZ2h0CisgICAgIGZ1bmN0aW9uIGltcGxlbWVudGVkIGJ5IHRoZSBvdXRwdXRfbWlfdGh1bmsgaG9vaykgdGhhdCBqdXN0CisgICAgIGFkanVzdHMgb25lIG9mIGl0cyBhcmd1bWVudHMgYW5kIGZvcndhcmRzIHRvIGFub3RoZXIKKyAgICAgZnVuY3Rpb24uICAqLworICB1bnNpZ25lZCBpbnQgaXNfdGh1bmsgOiAxOworfTsKKworLyogQWRkIHRoZSBkZWNsIEQgdG8gdGhlIGxvY2FsX2RlY2xzIGxpc3Qgb2YgRlVOLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCithZGRfbG9jYWxfZGVjbCAoc3RydWN0IGZ1bmN0aW9uICpmdW4sIHRyZWUgZCkKK3sKKyAgdmVjX3NhZmVfcHVzaCAoZnVuLT5sb2NhbF9kZWNscywgZCk7Cit9CisKKyNkZWZpbmUgRk9SX0VBQ0hfTE9DQUxfREVDTChGVU4sIEksIEQpCQlcCisgIEZPUl9FQUNIX1ZFQ19TQUZFX0VMVF9SRVZFUlNFICgoRlVOKS0+bG9jYWxfZGVjbHMsIEksIEQpCisKKy8qIElmIHZhX2xpc3RfW2dmXXByX3NpemUgaXMgc2V0IHRvIHRoaXMsIGl0IG1lYW5zIHdlIGRvbid0IGtub3cgaG93CisgICBtYW55IHVuaXRzIG5lZWQgdG8gYmUgc2F2ZWQuICAqLworI2RlZmluZSBWQV9MSVNUX01BWF9HUFJfU0laRQkyNTUKKyNkZWZpbmUgVkFfTElTVF9NQVhfRlBSX1NJWkUJMjU1CisKKy8qIFRoZSBmdW5jdGlvbiBjdXJyZW50bHkgYmVpbmcgY29tcGlsZWQuICAqLworZXh0ZXJuIEdUWSgoKSkgc3RydWN0IGZ1bmN0aW9uICpjZnVuOworCisvKiBJbiBvcmRlciB0byBlbnN1cmUgdGhhdCBjZnVuIGlzIG5vdCBzZXQgZGlyZWN0bHksIHdlIHJlZGVmaW5lIGl0IHNvCisgICB0aGF0IGl0IGlzIG5vdCBhbiBsdmFsdWUuICBSYXRoZXIgdGhhbiBhc3NpZ24gdG8gY2Z1biwgdXNlCisgICBwdXNoX2NmdW4gb3Igc2V0X2NmdW4uICAqLworI2RlZmluZSBjZnVuIChjZnVuICsgMCkKKworLyogTm9uemVybyBpZiB3ZSd2ZSBhbHJlYWR5IGNvbnZlcnRlZCB2aXJ0dWFsIHJlZ3MgdG8gaGFyZCByZWdzLiAgKi8KK2V4dGVybiBpbnQgdmlydHVhbHNfaW5zdGFudGlhdGVkOworCisvKiBOb256ZXJvIGlmIGF0IGxlYXN0IG9uZSB0cmFtcG9saW5lIGhhcyBiZWVuIGNyZWF0ZWQuICAqLworZXh0ZXJuIGludCB0cmFtcG9saW5lc19jcmVhdGVkOworCitzdHJ1Y3QgR1RZKCgpKSB0eXBlc191c2VkX2J5X3ZhcnNfZW50cnkgeworICB0cmVlIHR5cGU7CisgIHRyZWUgdmFyX2RlY2w7Cit9OworCisvKiBIYXNoIHRhYmxlIG1ha2luZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBnbG9iYWwgdmFyaWFibGUKKyAgIGFuZCB0aGUgdHlwZXMgaXQgcmVmZXJlbmNlcyBpbiBpdHMgaW5pdGlhbGl6ZXIuIFRoZSBrZXkgb2YgdGhlCisgICBlbnRyeSBpcyBhIHJlZmVyZW5jZWQgdHlwZSwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgREVDTCBvZiB0aGUgZ2xvYmFsCisgICB2YXJpYWJsZS4gdHlwZXNfdXNlX2J5X3ZhcnNfZG9faGFzaCBhbmQgdHlwZXNfdXNlZF9ieV92YXJzX2VxIGJlbG93IGFyZQorICAgdGhlIGhhc2ggYW5kIGVxdWFsaXR5IGZ1bmN0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCB0YWJsZS4gICovCitleHRlcm4gR1RZKChwYXJhbV9pcyAoc3RydWN0IHR5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSkpKSBodGFiX3QKKyAgdHlwZXNfdXNlZF9ieV92YXJzX2hhc2g7CisKK2hhc2h2YWxfdCB0eXBlc191c2VkX2J5X3ZhcnNfZG9faGFzaCAoY29uc3Qgdm9pZCopOworaW50IHR5cGVzX3VzZWRfYnlfdmFyc19lcSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwordm9pZCB0eXBlc191c2VkX2J5X3Zhcl9kZWNsX2luc2VydCAodHJlZSB0eXBlLCB0cmVlIHZhcl9kZWNsKTsKKworLyogRHVyaW5nIHBhcnNpbmcgb2YgYSBnbG9iYWwgdmFyaWFibGUsIHRoaXMgdmVjdG9yIGNvbnRhaW5zIHRoZSB0eXBlcworICAgcmVmZXJlbmNlZCBieSB0aGUgZ2xvYmFsIHZhcmlhYmxlLiAgKi8KK2V4dGVybiBHVFkoKCkpIHZlYzx0cmVlLCB2YV9nYz4gKnR5cGVzX3VzZWRfYnlfY3VyX3Zhcl9kZWNsOworCisvKiBjZnVuIHNob3VsZG4ndCBiZSBzZXQgZGlyZWN0bHk7IHVzZSBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zIGluc3RlYWQuICAqLworZXh0ZXJuIHZvaWQgc2V0X2NmdW4gKHN0cnVjdCBmdW5jdGlvbiAqbmV3X2NmdW4pOworZXh0ZXJuIHZvaWQgcHVzaF9jZnVuIChzdHJ1Y3QgZnVuY3Rpb24gKm5ld19jZnVuKTsKK2V4dGVybiB2b2lkIHBvcF9jZnVuICh2b2lkKTsKK2V4dGVybiB2b2lkIGluc3RhbnRpYXRlX2RlY2xfcnRsIChydHggeCk7CisKKy8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Li4uIGV2ZW50dWFsbHkgdGhlc2Ugc2hvdWxkIGFsbCBnbyBhd2F5LiAgKi8KKyNkZWZpbmUgY3VycmVudF9mdW5jdGlvbl9mdW5jZGVmX25vIChjZnVuLT5mdW5jZGVmX25vKQorCisjZGVmaW5lIGN1cnJlbnRfbG9vcHMgKGNmdW4tPnhfY3VycmVudF9sb29wcykKKyNkZWZpbmUgZG9tX2NvbXB1dGVkIChjZnVuLT5jZmctPnhfZG9tX2NvbXB1dGVkKQorI2RlZmluZSBuX2Jic19pbl9kb21fdHJlZSAoY2Z1bi0+Y2ZnLT54X25fYmJzX2luX2RvbV90cmVlKQorI2RlZmluZSBWQUxVRV9ISVNUT0dSQU1TKGZ1bikgKGZ1biktPnZhbHVlX2hpc3RvZ3JhbXMKKworLyogSWRlbnRpZnkgQkxPQ0tzIHJlZmVyZW5jZWQgYnkgbW9yZSB0aGFuIG9uZSBOT1RFX0lOU05fQkxPQ0tfe0JFRyxFTkR9LAorICAgYW5kIGNyZWF0ZSBkdXBsaWNhdGUgYmxvY2tzLiAgKi8KK2V4dGVybiB2b2lkIHJlb3JkZXJfYmxvY2tzICh2b2lkKTsKKworLyogU2V0IEJMT0NLX05VTUJFUiBmb3IgYWxsIHRoZSBibG9ja3MgaW4gRk4uICAqLworZXh0ZXJuIHZvaWQgbnVtYmVyX2Jsb2NrcyAodHJlZSk7CisKK2V4dGVybiB2b2lkIGNsZWFyX2Jsb2NrX21hcmtzICh0cmVlKTsKK2V4dGVybiB0cmVlIGJsb2Nrc19ucmV2ZXJzZSAodHJlZSk7CitleHRlcm4gdHJlZSBibG9ja19jaGFpbm9uICh0cmVlLCB0cmVlKTsKKworLyogUmV0dXJuIHNpemUgbmVlZGVkIGZvciBzdGFjayBmcmFtZSBiYXNlZCBvbiBzbG90cyBzbyBmYXIgYWxsb2NhdGVkLgorICAgVGhpcyBzaXplIGNvdW50cyBmcm9tIHplcm8uICBJdCBpcyBub3Qgcm91bmRlZCB0byBTVEFDS19CT1VOREFSWTsKKyAgIHRoZSBjYWxsZXIgbWF5IGhhdmUgdG8gZG8gdGhhdC4gICovCitleHRlcm4gSE9TVF9XSURFX0lOVCBnZXRfZnJhbWVfc2l6ZSAodm9pZCk7CisKKy8qIElzc3VlIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBUUlVFIGlmIGZyYW1lIE9GRlNFVCBvdmVyZmxvd3MgaW4KKyAgIHRoZSBzaWduZWQgdGFyZ2V0IHBvaW50ZXIgYXJpdGhtZXRpY3MgZm9yIGZ1bmN0aW9uIEZVTkMuICBPdGhlcndpc2UKKyAgIHJldHVybiBGQUxTRS4gICovCitleHRlcm4gYm9vbCBmcmFtZV9vZmZzZXRfb3ZlcmZsb3cgKEhPU1RfV0lERV9JTlQsIHRyZWUpOworCisvKiBBIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0byBjcmVhdGUgdGFyZ2V0IHNwZWNpZmljLCBwZXItZnVuY3Rpb24KKyAgIGRhdGEgc3RydWN0dXJlcy4gICovCitleHRlcm4gc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24gKiAoKmluaXRfbWFjaGluZV9zdGF0dXMpICh2b2lkKTsKKworLyogU2F2ZSBhbmQgcmVzdG9yZSBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIGEgbmVzdGVkIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiB2b2lkIGZyZWVfYWZ0ZXJfcGFyc2luZyAoc3RydWN0IGZ1bmN0aW9uICopOworZXh0ZXJuIHZvaWQgZnJlZV9hZnRlcl9jb21waWxhdGlvbiAoc3RydWN0IGZ1bmN0aW9uICopOworCitleHRlcm4gdm9pZCBpbml0X3ZhcmFzbV9zdGF0dXMgKHZvaWQpOworCisjaWZkZWYgUlRYX0NPREUKK2V4dGVybiB2b2lkIGRpZGRsZV9yZXR1cm5fdmFsdWUgKHZvaWQgKCopKHJ0eCwgdm9pZCopLCB2b2lkKik7CitleHRlcm4gdm9pZCBjbG9iYmVyX3JldHVybl9yZWdpc3RlciAodm9pZCk7CisjZW5kaWYKKworZXh0ZXJuIHJ0eCBnZXRfYXJnX3BvaW50ZXJfc2F2ZV9hcmVhICh2b2lkKTsKKworLyogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4gICovCitleHRlcm4gY29uc3QgY2hhciAqZm5kZWNsX25hbWUgKHRyZWUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUgKHN0cnVjdCBmdW5jdGlvbiAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpjdXJyZW50X2Z1bmN0aW9uX25hbWUgKHZvaWQpOworCitleHRlcm4gdm9pZCBkb193YXJuX3VudXNlZF9wYXJhbWV0ZXIgKHRyZWUpOworCitleHRlcm4gYm9vbCBwYXNzX2J5X3JlZmVyZW5jZSAoQ1VNVUxBVElWRV9BUkdTICosIGVudW0gbWFjaGluZV9tb2RlLAorCQkJICAgICAgIHRyZWUsIGJvb2wpOworZXh0ZXJuIGJvb2wgcmVmZXJlbmNlX2NhbGxlZV9jb3BpZWQgKENVTVVMQVRJVkVfQVJHUyAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgICAgIHRyZWUsIGJvb2wpOworCitleHRlcm4gdm9pZCB1c2VkX3R5cGVzX2luc2VydCAodHJlZSk7CisKK2V4dGVybiBpbnQgZ2V0X25leHRfZnVuY2RlZl9ubyAodm9pZCk7CitleHRlcm4gaW50IGdldF9sYXN0X2Z1bmNkZWZfbm8gKHZvaWQpOworCisjaWZkZWYgSEFWRV9zaW1wbGVfcmV0dXJuCitleHRlcm4gYm9vbCByZXF1aXJlc19zdGFja19mcmFtZV9wIChydHgsIEhBUkRfUkVHX1NFVCwgSEFSRF9SRUdfU0VUKTsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgIAorCitleHRlcm4gcnR4IGdldF9oYXJkX3JlZ19pbml0aWFsX3ZhbCAoZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IGhhc19oYXJkX3JlZ19pbml0aWFsX3ZhbCAoZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IGdldF9oYXJkX3JlZ19pbml0aWFsX3JlZyAocnR4KTsKK2V4dGVybiBib29sIGluaXRpYWxfdmFsdWVfZW50cnkgKGludCBpLCBydHggKiwgcnR4ICopOworCisvKiBDYWxsZWQgZnJvbSBnaW1wbGVfZXhwYW5kX2NmZy4gICovCitleHRlcm4gdW5zaWduZWQgaW50IGVtaXRfaW5pdGlhbF92YWx1ZV9zZXRzICh2b2lkKTsKKworLyogSW4gcHJlZGljdC5jICovCitleHRlcm4gYm9vbCBvcHRpbWl6ZV9mdW5jdGlvbl9mb3Jfc2l6ZV9wIChzdHJ1Y3QgZnVuY3Rpb24gKik7CitleHRlcm4gYm9vbCBvcHRpbWl6ZV9mdW5jdGlvbl9mb3Jfc3BlZWRfcCAoc3RydWN0IGZ1bmN0aW9uICopOworCisjZW5kaWYgIC8qIEdDQ19GVU5DVElPTl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ2NjLXBsdWdpbi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2djYy1wbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTEwODkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2djYy1wbHVnaW4uaApAQCAtMCwwICsxLDE2NiBAQAorLyogUHVibGljIGhlYWRlciBmaWxlIGZvciBwbHVnaW5zIHRvIGluY2x1ZGUuCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1BMVUdJTl9ICisjZGVmaW5lIEdDQ19QTFVHSU5fSAorCisjaWZuZGVmIElOX0dDQworI2RlZmluZSBJTl9HQ0MKKyNlbmRpZgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisjaW5jbHVkZSAiaGlnaGxldi1wbHVnaW4tY29tbW9uLmgiCisjaW5jbHVkZSAiaGFzaHRhYi5oIgorCisvKiBFdmVudCBuYW1lcy4gICovCitlbnVtIHBsdWdpbl9ldmVudAoreworIyBkZWZpbmUgREVGRVZFTlQoTkFNRSkgTkFNRSwKKyMgaW5jbHVkZSAicGx1Z2luLmRlZiIKKyMgdW5kZWYgREVGRVZFTlQKKyAgUExVR0lOX0VWRU5UX0ZJUlNUX0RZTkFNSUMKK307CisKKy8qIEFsbCBnbG9iYWxzIGRlY2xhcmVkIGhlcmUgaGF2ZSBDIGxpbmthZ2UgdG8gcmVkdWNlIGxpbmsgY29tcGF0aWJpbGl0eQorICAgaXNzdWVzIHdpdGggaW1wbGVtZW50YXRpb24gbGFuZ3VhZ2UgY2hvaWNlIGFuZCBtYW5nbGluZy4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICoqcGx1Z2luX2V2ZW50X25hbWU7CisKK3N0cnVjdCBwbHVnaW5fYXJndW1lbnQKK3sKKyAgY2hhciAqa2V5OyAgICAvKiBrZXkgb2YgdGhlIGFyZ3VtZW50LiAgKi8KKyAgY2hhciAqdmFsdWU7ICAvKiB2YWx1ZSBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIE5VTEwuICAqLworfTsKKworLyogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGx1Z2luLiBVc2VkIGJ5IC0taGVscCBhbmQgLS12ZXJzaW9uLiAqLworCitzdHJ1Y3QgcGx1Z2luX2luZm8KK3sKKyAgY29uc3QgY2hhciAqdmVyc2lvbjsKKyAgY29uc3QgY2hhciAqaGVscDsKK307CisKKy8qIFJlcHJlc2VudHMgdGhlIGdjYyB2ZXJzaW9uLiBVc2VkIHRvIGF2b2lkIHVzaW5nIGFuIGluY29tcGF0aWJsZSBwbHVnaW4uICovCisKK3N0cnVjdCBwbHVnaW5fZ2NjX3ZlcnNpb24KK3sKKyAgY29uc3QgY2hhciAqYmFzZXZlcjsKKyAgY29uc3QgY2hhciAqZGF0ZXN0YW1wOworICBjb25zdCBjaGFyICpkZXZwaGFzZTsKKyAgY29uc3QgY2hhciAqcmV2aXNpb247CisgIGNvbnN0IGNoYXIgKmNvbmZpZ3VyYXRpb25fYXJndW1lbnRzOworfTsKKworLyogT2JqZWN0IHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIHBsdWdpbiBuYW1lIGFuZCBpdHMgYXJndW1lbnRzLiAqLworc3RydWN0IHBsdWdpbl9uYW1lX2FyZ3MKK3sKKyAgY2hhciAqYmFzZV9uYW1lOyAgICAgICAgICAgICAgLyogU2hvcnQgbmFtZSBvZiB0aGUgcGx1Z2luIChmaWxlbmFtZSB3aXRob3V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbyBzdWZmaXgpLiAqLworICBjb25zdCBjaGFyICpmdWxsX25hbWU7ICAgICAgICAvKiBQYXRoIHRvIHRoZSBwbHVnaW4gYXMgc3BlY2lmaWVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWZwbHVnaW49LiAqLworICBpbnQgYXJnYzsgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgYXJndW1lbnRzIHNwZWNpZmllZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1mcGx1Z2luLWFyZy0uLi4gKi8KKyAgc3RydWN0IHBsdWdpbl9hcmd1bWVudCAqYXJndjsgLyogQXJyYXkgb2YgQVJHQyBrZXktdmFsdWUgcGFpcnMuICovCisgIGNvbnN0IGNoYXIgKnZlcnNpb247ICAgICAgICAgIC8qIFZlcnNpb24gc3RyaW5nIHByb3ZpZGVkIGJ5IHBsdWdpbi4gKi8KKyAgY29uc3QgY2hhciAqaGVscDsgICAgICAgICAgICAgLyogSGVscCBzdHJpbmcgcHJvdmlkZWQgYnkgcGx1Z2luLiAqLworfTsKKworLyogVGhlIGRlZmF1bHQgdmVyc2lvbiBjaGVjay4gQ29tcGFyZXMgZXZlcnkgZmllbGQgaW4gVkVSU0lPTi4gKi8KKworZXh0ZXJuIGJvb2wgcGx1Z2luX2RlZmF1bHRfdmVyc2lvbl9jaGVjayAoc3RydWN0IHBsdWdpbl9nY2NfdmVyc2lvbiAqLAorCQkJCQkgIHN0cnVjdCBwbHVnaW5fZ2NjX3ZlcnNpb24gKik7CisKKy8qIEZ1bmN0aW9uIHR5cGUgZm9yIHRoZSBwbHVnaW4gaW5pdGlhbGl6YXRpb24gcm91dGluZS4gRWFjaCBwbHVnaW4gbW9kdWxlCisgICBzaG91bGQgZGVmaW5lIHRoaXMgYXMgYW4gZXh0ZXJuYWxseS12aXNpYmxlIGZ1bmN0aW9uIHdpdGggbmFtZQorICAgInBsdWdpbl9pbml0LiIKKworICAgUExVR0lOX0lORk8gLSBwbHVnaW4gaW52b2NhdGlvbiBpbmZvcm1hdGlvbi4KKyAgIFZFUlNJT04gICAgIC0gdGhlIHBsdWdpbl9nY2NfdmVyc2lvbiBzeW1ib2wgb2YgR0NDLgorCisgICBSZXR1cm5zIDAgaWYgaW5pdGlhbGl6YXRpb24gZmluaXNoZXMgc3VjY2Vzc2Z1bGx5LiAgKi8KKwordHlwZWRlZiBpbnQgKCpwbHVnaW5faW5pdF9mdW5jKSAoc3RydWN0IHBsdWdpbl9uYW1lX2FyZ3MgKnBsdWdpbl9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBsdWdpbl9nY2NfdmVyc2lvbiAqdmVyc2lvbik7CisKKy8qIERlY2xhcmF0aW9uIGZvciAicGx1Z2luX2luaXQiIGZ1bmN0aW9uIHNvIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvIGJlCisgICBkdXBsaWNhdGVkIGluIGV2ZXJ5IHBsdWdpbi4gICovCitleHRlcm4gaW50IHBsdWdpbl9pbml0IChzdHJ1Y3QgcGx1Z2luX25hbWVfYXJncyAqcGx1Z2luX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGx1Z2luX2djY192ZXJzaW9uICp2ZXJzaW9uKTsKKworLyogRnVuY3Rpb24gdHlwZSBmb3IgYSBwbHVnaW4gY2FsbGJhY2sgcm91dGluZS4KKworICAgR0NDX0RBVEEgIC0gZXZlbnQtc3BlY2lmaWMgZGF0YSBwcm92aWRlZCBieSBHQ0MKKyAgIFVTRVJfREFUQSAtIHBsdWdpbi1zcGVjaWZpYyBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBwbHVnaW4gICovCisKK3R5cGVkZWYgdm9pZCAoKnBsdWdpbl9jYWxsYmFja19mdW5jKSAodm9pZCAqZ2NjX2RhdGEsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qIENhbGxlZCBmcm9tIHRoZSBwbHVnaW4ncyBpbml0aWFsaXphdGlvbiBjb2RlLiBSZWdpc3RlciBhIHNpbmdsZSBjYWxsYmFjay4KKyAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KKworICAgUExVR0lOX05BTUUgLSBkaXNwbGF5IG5hbWUgZm9yIHRoaXMgcGx1Z2luCisgICBFVkVOVCAgICAgICAtIHdoaWNoIGV2ZW50IHRoZSBjYWxsYmFjayBpcyBmb3IKKyAgIENBTExCQUNLICAgIC0gdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhdCB0aGUgZXZlbnQKKyAgIFVTRVJfREFUQSAgIC0gcGx1Z2luLXByb3ZpZGVkIGRhdGEuCisqLworCisvKiBOdW1iZXIgb2YgZXZlbnQgaWRzIC8gbmFtZXMgcmVnaXN0ZXJlZCBzbyBmYXIuICAqLworCitleHRlcm4gaW50IGdldF9ldmVudF9sYXN0ICh2b2lkKTsKKworaW50IGdldF9uYW1lZF9ldmVudF9pZCAoY29uc3QgY2hhciAqbmFtZSwgZW51bSBpbnNlcnRfb3B0aW9uIGluc2VydCk7CisKKy8qIFRoaXMgaXMgYWxzbyBjYWxsZWQgd2l0aG91dCBhIGNhbGxiYWNrIHJvdXRpbmUgZm9yIHRoZQorICAgUExVR0lOX1BBU1NfTUFOQUdFUl9TRVRVUCwgUExVR0lOX0lORk8sIFBMVUdJTl9SRUdJU1RFUl9HR0NfUk9PVFMgYW5kCisgICBQTFVHSU5fUkVHSVNURVJfR0dDX0NBQ0hFUyBwc2V1ZG8tZXZlbnRzLCB3aXRoIGEgc3BlY2lmaWMgdXNlcl9kYXRhLgorICAqLworCitleHRlcm4gdm9pZCByZWdpc3Rlcl9jYWxsYmFjayAoY29uc3QgY2hhciAqcGx1Z2luX25hbWUsCisJCQkgICAgICAgaW50IGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbl9jYWxsYmFja19mdW5jIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9jYWxsYmFjayAoY29uc3QgY2hhciAqcGx1Z2luX25hbWUsIGludCBldmVudCk7CisKKworLyogUmV0cmlldmUgdGhlIHBsdWdpbiBkaXJlY3RvcnkgbmFtZSwgYXMgcmV0dXJuZWQgYnkgdGhlCisgICAtZnByaW50LWZpbGUtbmFtZT1wbHVnaW4gYXJndW1lbnQgdG8gdGhlIGdjYyBwcm9ncmFtLCB3aGljaCBpcyB0aGUKKyAgIC1pcGx1Z2luZGlyIHByb2dyYW0gYXJndW1lbnQgdG8gY2MxLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyKiBkZWZhdWx0X3BsdWdpbl9kaXJfbmFtZSAodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8qIEluIGNhc2UgdGhlIEMrKyBjb21waWxlciBkb2VzIG5hbWUgbWFuZ2xpbmcgZm9yIGdsb2JhbHMsIGRlY2xhcmUKKyAgIHBsdWdpbl9pc19HUExfY29tcGF0aWJsZSBleHRlcm4gIkMiIHNvIHRoYXQgYSBsYXRlciBkZWZpbml0aW9uCisgICBpbiBhIHBsdWdpbiBmaWxlIHdpbGwgaGF2ZSB0aGlzIGxpbmthZ2UuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorZXh0ZXJuIGludCBwbHVnaW5faXNfR1BMX2NvbXBhdGlibGU7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogR0NDX1BMVUdJTl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ2VucnRsLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ2VucnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwNzQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9nZW5ydGwuaApAQCAtMCwwICsxLDExOTcgQEAKKy8qIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGdlbmdlbnJ0bCBmcm9tIHJ0bC5kZWYuICAqLworCisjaWZuZGVmIEdDQ19HRU5SVExfSAorI2RlZmluZSBHQ0NfR0VOUlRMX0gKKworI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10XzBfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWDBFWFAgKHJ0LCAwKSA9IE5VTExfUlRYOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF8wKGMsIG0pXAorICAgICAgICBnZW5fcnR4X2ZtdF8wX3N0YXQgKGMsIG0gTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X2VlX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJcnR4IGFyZzAsCisJcnR4IGFyZzEgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhFWFAgKHJ0LCAwKSA9IGFyZzA7CisgIFhFWFAgKHJ0LCAxKSA9IGFyZzE7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X2VlKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X2VlX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfdWVfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlydHggYXJnMCwKKwlydHggYXJnMSBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWEVYUCAocnQsIDApID0gYXJnMDsKKyAgWEVYUCAocnQsIDEpID0gYXJnMTsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfdWUoYywgbSwgcDAsIHAxKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfdWVfc3RhdCAoYywgbSwgcDAsIHAxIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9FX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJcnR2ZWMgYXJnMCBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWFZFQyAocnQsIDApID0gYXJnMDsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfRShjLCBtLCBwMClcCisgICAgICAgIGdlbl9ydHhfZm10X0Vfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X2lfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlpbnQgYXJnMCBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWElOVCAocnQsIDApID0gYXJnMDsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfaShjLCBtLCBwMClcCisgICAgICAgIGdlbl9ydHhfZm10X2lfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X2l1dUJlaWllX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJaW50IGFyZzAsCisJcnR4IGFyZzEsCisJcnR4IGFyZzIsCisJYmFzaWNfYmxvY2sgYXJnMywKKwlydHggYXJnNCwKKwlpbnQgYXJnNSwKKwlpbnQgYXJnNiwKKwlydHggYXJnNyBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWElOVCAocnQsIDApID0gYXJnMDsKKyAgWEVYUCAocnQsIDEpID0gYXJnMTsKKyAgWEVYUCAocnQsIDIpID0gYXJnMjsKKyAgWEJCREVGIChydCwgMykgPSBhcmczOworICBYRVhQIChydCwgNCkgPSBhcmc0OworICBYSU5UIChydCwgNSkgPSBhcmc1OworICBYSU5UIChydCwgNikgPSBhcmc2OworICBYRVhQIChydCwgNykgPSBhcmc3OworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9pdXVCZWlpZShjLCBtLCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcpXAorICAgICAgICBnZW5fcnR4X2ZtdF9pdXVCZWlpZV9zdGF0IChjLCBtLCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X2l1dUJlaWllMF9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWludCBhcmcwLAorCXJ0eCBhcmcxLAorCXJ0eCBhcmcyLAorCWJhc2ljX2Jsb2NrIGFyZzMsCisJcnR4IGFyZzQsCisJaW50IGFyZzUsCisJaW50IGFyZzYsCisJcnR4IGFyZzcgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhJTlQgKHJ0LCAwKSA9IGFyZzA7CisgIFhFWFAgKHJ0LCAxKSA9IGFyZzE7CisgIFhFWFAgKHJ0LCAyKSA9IGFyZzI7CisgIFhCQkRFRiAocnQsIDMpID0gYXJnMzsKKyAgWEVYUCAocnQsIDQpID0gYXJnNDsKKyAgWElOVCAocnQsIDUpID0gYXJnNTsKKyAgWElOVCAocnQsIDYpID0gYXJnNjsKKyAgWEVYUCAocnQsIDcpID0gYXJnNzsKKyAgWDBFWFAgKHJ0LCA4KSA9IE5VTExfUlRYOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9pdXVCZWlpZTAoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3KVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfaXV1QmVpaWUwX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2LCBwNyBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfaXV1QmVpaWVlX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJaW50IGFyZzAsCisJcnR4IGFyZzEsCisJcnR4IGFyZzIsCisJYmFzaWNfYmxvY2sgYXJnMywKKwlydHggYXJnNCwKKwlpbnQgYXJnNSwKKwlpbnQgYXJnNiwKKwlydHggYXJnNywKKwlydHggYXJnOCBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWElOVCAocnQsIDApID0gYXJnMDsKKyAgWEVYUCAocnQsIDEpID0gYXJnMTsKKyAgWEVYUCAocnQsIDIpID0gYXJnMjsKKyAgWEJCREVGIChydCwgMykgPSBhcmczOworICBYRVhQIChydCwgNCkgPSBhcmc0OworICBYSU5UIChydCwgNSkgPSBhcmc1OworICBYSU5UIChydCwgNikgPSBhcmc2OworICBYRVhQIChydCwgNykgPSBhcmc3OworICBYRVhQIChydCwgOCkgPSBhcmc4OworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9pdXVCZWlpZWUoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3LCBwOClcCisgICAgICAgIGdlbl9ydHhfZm10X2l1dUJlaWllZV9zdGF0IChjLCBtLCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcsIHA4IE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9pdXUwMDAwMF9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWludCBhcmcwLAorCXJ0eCBhcmcxLAorCXJ0eCBhcmcyIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYSU5UIChydCwgMCkgPSBhcmcwOworICBYRVhQIChydCwgMSkgPSBhcmcxOworICBYRVhQIChydCwgMikgPSBhcmcyOworICBYMEVYUCAocnQsIDMpID0gTlVMTF9SVFg7CisgIFgwRVhQIChydCwgNCkgPSBOVUxMX1JUWDsKKyAgWDBFWFAgKHJ0LCA1KSA9IE5VTExfUlRYOworICBYMEVYUCAocnQsIDYpID0gTlVMTF9SVFg7CisgIFgwRVhQIChydCwgNykgPSBOVUxMX1JUWDsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfaXV1MDAwMDAoYywgbSwgcDAsIHAxLCBwMilcCisgICAgICAgIGdlbl9ydHhfZm10X2l1dTAwMDAwX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X2l1dUIwMGlzX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJaW50IGFyZzAsCisJcnR4IGFyZzEsCisJcnR4IGFyZzIsCisJYmFzaWNfYmxvY2sgYXJnMywKKwlpbnQgYXJnNCwKKwljb25zdCBjaGFyICphcmc1IE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYSU5UIChydCwgMCkgPSBhcmcwOworICBYRVhQIChydCwgMSkgPSBhcmcxOworICBYRVhQIChydCwgMikgPSBhcmcyOworICBYQkJERUYgKHJ0LCAzKSA9IGFyZzM7CisgIFgwRVhQIChydCwgNCkgPSBOVUxMX1JUWDsKKyAgWDBFWFAgKHJ0LCA1KSA9IE5VTExfUlRYOworICBYSU5UIChydCwgNikgPSBhcmc0OworICBYU1RSIChydCwgNykgPSBhcmc1OworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9pdXVCMDBpcyhjLCBtLCBwMCwgcDEsIHAyLCBwMywgcDQsIHA1KVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfaXV1QjAwaXNfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfc2lfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwljb25zdCBjaGFyICphcmcwLAorCWludCBhcmcxIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYU1RSIChydCwgMCkgPSBhcmcwOworICBYSU5UIChydCwgMSkgPSBhcmcxOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9zaShjLCBtLCBwMCwgcDEpXAorICAgICAgICBnZW5fcnR4X2ZtdF9zaV9zdGF0IChjLCBtLCBwMCwgcDEgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3NzaUVFRWlfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwljb25zdCBjaGFyICphcmcwLAorCWNvbnN0IGNoYXIgKmFyZzEsCisJaW50IGFyZzIsCisJcnR2ZWMgYXJnMywKKwlydHZlYyBhcmc0LAorCXJ0dmVjIGFyZzUsCisJaW50IGFyZzYgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhTVFIgKHJ0LCAwKSA9IGFyZzA7CisgIFhTVFIgKHJ0LCAxKSA9IGFyZzE7CisgIFhJTlQgKHJ0LCAyKSA9IGFyZzI7CisgIFhWRUMgKHJ0LCAzKSA9IGFyZzM7CisgIFhWRUMgKHJ0LCA0KSA9IGFyZzQ7CisgIFhWRUMgKHJ0LCA1KSA9IGFyZzU7CisgIFhJTlQgKHJ0LCA2KSA9IGFyZzY7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X3NzaUVFRWkoYywgbSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYpXAorICAgICAgICBnZW5fcnR4X2ZtdF9zc2lFRUVpX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2IE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9FaV9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCXJ0dmVjIGFyZzAsCisJaW50IGFyZzEgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhWRUMgKHJ0LCAwKSA9IGFyZzA7CisgIFhJTlQgKHJ0LCAxKSA9IGFyZzE7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X0VpKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X0VpX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfZUVlZTBfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlydHggYXJnMCwKKwlydHZlYyBhcmcxLAorCXJ0eCBhcmcyLAorCXJ0eCBhcmczIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYRVhQIChydCwgMCkgPSBhcmcwOworICBYVkVDIChydCwgMSkgPSBhcmcxOworICBYRVhQIChydCwgMikgPSBhcmcyOworICBYRVhQIChydCwgMykgPSBhcmczOworICBYMEVYUCAocnQsIDQpID0gTlVMTF9SVFg7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X2VFZWUwKGMsIG0sIHAwLCBwMSwgcDIsIHAzKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfZUVlZTBfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiwgcDMgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X2VlZV9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCXJ0eCBhcmcwLAorCXJ0eCBhcmcxLAorCXJ0eCBhcmcyIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYRVhQIChydCwgMCkgPSBhcmcwOworICBYRVhQIChydCwgMSkgPSBhcmcxOworICBYRVhQIChydCwgMikgPSBhcmcyOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9lZWUoYywgbSwgcDAsIHAxLCBwMilcCisgICAgICAgIGdlbl9ydHhfZm10X2VlZV9zdGF0IChjLCBtLCBwMCwgcDEsIHAyIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9lX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJcnR4IGFyZzAgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhFWFAgKHJ0LCAwKSA9IGFyZzA7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X2UoYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF9lX3N0YXQgKGMsIG0sIHAwIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9fc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfKGMsIG0pXAorICAgICAgICBnZW5fcnR4X2ZtdF9fc3RhdCAoYywgbSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfd19zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCUhPU1RfV0lERV9JTlQgYXJnMCBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWFdJTlQgKHJ0LCAwKSA9IGFyZzA7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X3coYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF93X3N0YXQgKGMsIG0sIHAwIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF93d3dfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlIT1NUX1dJREVfSU5UIGFyZzAsCisJSE9TVF9XSURFX0lOVCBhcmcxLAorCUhPU1RfV0lERV9JTlQgYXJnMiBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWFdJTlQgKHJ0LCAwKSA9IGFyZzA7CisgIFhXSU5UIChydCwgMSkgPSBhcmcxOworICBYV0lOVCAocnQsIDIpID0gYXJnMjsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfd3d3KGMsIG0sIHAwLCBwMSwgcDIpXAorICAgICAgICBnZW5fcnR4X2ZtdF93d3dfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfc19zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWNvbnN0IGNoYXIgKmFyZzAgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhTVFIgKHJ0LCAwKSA9IGFyZzA7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X3MoYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF9zX3N0YXQgKGMsIG0sIHAwIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9pMDBfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlpbnQgYXJnMCBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWElOVCAocnQsIDApID0gYXJnMDsKKyAgWDBFWFAgKHJ0LCAxKSA9IE5VTExfUlRYOworICBYMEVYUCAocnQsIDIpID0gTlVMTF9SVFg7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X2kwMChjLCBtLCBwMClcCisgICAgICAgIGdlbl9ydHhfZm10X2kwMF9zdGF0IChjLCBtLCBwMCBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfZWlfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlydHggYXJnMCwKKwlpbnQgYXJnMSBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWEVYUCAocnQsIDApID0gYXJnMDsKKyAgWElOVCAocnQsIDEpID0gYXJnMTsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfZWkoYywgbSwgcDAsIHAxKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfZWlfc3RhdCAoYywgbSwgcDAsIHAxIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9lMF9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCXJ0eCBhcmcwIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYRVhQIChydCwgMCkgPSBhcmcwOworICBYMEVYUCAocnQsIDEpID0gTlVMTF9SVFg7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X2UwKGMsIG0sIHAwKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfZTBfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3Vfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlydHggYXJnMCBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWEVYUCAocnQsIDApID0gYXJnMDsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfdShjLCBtLCBwMClcCisgICAgICAgIGdlbl9ydHhfZm10X3Vfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3MwMF9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWNvbnN0IGNoYXIgKmFyZzAgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhTVFIgKHJ0LCAwKSA9IGFyZzA7CisgIFgwRVhQIChydCwgMSkgPSBOVUxMX1JUWDsKKyAgWDBFWFAgKHJ0LCAyKSA9IE5VTExfUlRYOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9zMDAoYywgbSwgcDApXAorICAgICAgICBnZW5fcnR4X2ZtdF9zMDBfc3RhdCAoYywgbSwgcDAgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3RlaV9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCXRyZWUgYXJnMCwKKwlydHggYXJnMSwKKwlpbnQgYXJnMiBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWFRSRUUgKHJ0LCAwKSA9IGFyZzA7CisgIFhFWFAgKHJ0LCAxKSA9IGFyZzE7CisgIFhJTlQgKHJ0LCAyKSA9IGFyZzI7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X3RlaShjLCBtLCBwMCwgcDEsIHAyKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfdGVpX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3Rfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwl0cmVlIGFyZzAgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhUUkVFIChydCwgMCkgPSBhcmcwOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF90KGMsIG0sIHAwKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfdF9zdGF0IChjLCBtLCBwMCBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfaXNzX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJaW50IGFyZzAsCisJY29uc3QgY2hhciAqYXJnMSwKKwljb25zdCBjaGFyICphcmcyIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYSU5UIChydCwgMCkgPSBhcmcwOworICBYU1RSIChydCwgMSkgPSBhcmcxOworICBYU1RSIChydCwgMikgPSBhcmcyOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9pc3MoYywgbSwgcDAsIHAxLCBwMilcCisgICAgICAgIGdlbl9ydHhfZm10X2lzc19zdGF0IChjLCBtLCBwMCwgcDEsIHAyIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9pc19zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWludCBhcmcwLAorCWNvbnN0IGNoYXIgKmFyZzEgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhJTlQgKHJ0LCAwKSA9IGFyZzA7CisgIFhTVFIgKHJ0LCAxKSA9IGFyZzE7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X2lzKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X2lzX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfaXNFX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJaW50IGFyZzAsCisJY29uc3QgY2hhciAqYXJnMSwKKwlydHZlYyBhcmcyIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYSU5UIChydCwgMCkgPSBhcmcwOworICBYU1RSIChydCwgMSkgPSBhcmcxOworICBYVkVDIChydCwgMikgPSBhcmcyOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9pc0UoYywgbSwgcDAsIHAxLCBwMilcCisgICAgICAgIGdlbl9ydHhfZm10X2lzRV9zdGF0IChjLCBtLCBwMCwgcDEsIHAyIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fcnR4X2ZtdF9pRV9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWludCBhcmcwLAorCXJ0dmVjIGFyZzEgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhJTlQgKHJ0LCAwKSA9IGFyZzA7CisgIFhWRUMgKHJ0LCAxKSA9IGFyZzE7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X2lFKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X2lFX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfc3Nfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwljb25zdCBjaGFyICphcmcwLAorCWNvbnN0IGNoYXIgKmFyZzEgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhTVFIgKHJ0LCAwKSA9IGFyZzA7CisgIFhTVFIgKHJ0LCAxKSA9IGFyZzE7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X3NzKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X3NzX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfZUVfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlydHggYXJnMCwKKwlydHZlYyBhcmcxIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYRVhQIChydCwgMCkgPSBhcmcwOworICBYVkVDIChydCwgMSkgPSBhcmcxOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9lRShjLCBtLCBwMCwgcDEpXAorICAgICAgICBnZW5fcnR4X2ZtdF9lRV9zdGF0IChjLCBtLCBwMCwgcDEgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3Nlc19zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWNvbnN0IGNoYXIgKmFyZzAsCisJcnR4IGFyZzEsCisJY29uc3QgY2hhciAqYXJnMiBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWFNUUiAocnQsIDApID0gYXJnMDsKKyAgWEVYUCAocnQsIDEpID0gYXJnMTsKKyAgWFNUUiAocnQsIDIpID0gYXJnMjsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfc2VzKGMsIG0sIHAwLCBwMSwgcDIpXAorICAgICAgICBnZW5fcnR4X2ZtdF9zZXNfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfc3NzX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJY29uc3QgY2hhciAqYXJnMCwKKwljb25zdCBjaGFyICphcmcxLAorCWNvbnN0IGNoYXIgKmFyZzIgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhTVFIgKHJ0LCAwKSA9IGFyZzA7CisgIFhTVFIgKHJ0LCAxKSA9IGFyZzE7CisgIFhTVFIgKHJ0LCAyKSA9IGFyZzI7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X3NzcyhjLCBtLCBwMCwgcDEsIHAyKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfc3NzX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3NzZV9zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWNvbnN0IGNoYXIgKmFyZzAsCisJY29uc3QgY2hhciAqYXJnMSwKKwlydHggYXJnMiBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWFNUUiAocnQsIDApID0gYXJnMDsKKyAgWFNUUiAocnQsIDEpID0gYXJnMTsKKyAgWEVYUCAocnQsIDIpID0gYXJnMjsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfc3NlKGMsIG0sIHAwLCBwMSwgcDIpXAorICAgICAgICBnZW5fcnR4X2ZtdF9zc2Vfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfc2llc19zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWNvbnN0IGNoYXIgKmFyZzAsCisJaW50IGFyZzEsCisJcnR4IGFyZzIsCisJY29uc3QgY2hhciAqYXJnMyBNRU1fU1RBVF9ERUNMKQoreworICBydHggcnQ7CisgIHJ0ID0gcnR4X2FsbG9jX3N0YXQgKGNvZGUgUEFTU19NRU1fU1RBVCk7CisKKyAgUFVUX01PREUgKHJ0LCBtb2RlKTsKKyAgWFNUUiAocnQsIDApID0gYXJnMDsKKyAgWElOVCAocnQsIDEpID0gYXJnMTsKKyAgWEVYUCAocnQsIDIpID0gYXJnMjsKKyAgWFNUUiAocnQsIDMpID0gYXJnMzsKKworICByZXR1cm4gcnQ7Cit9CisKKyNkZWZpbmUgZ2VuX3J0eF9mbXRfc2llcyhjLCBtLCBwMCwgcDEsIHAyLCBwMylcCisgICAgICAgIGdlbl9ydHhfZm10X3NpZXNfc3RhdCAoYywgbSwgcDAsIHAxLCBwMiwgcDMgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3NFX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJY29uc3QgY2hhciAqYXJnMCwKKwlydHZlYyBhcmcxIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYU1RSIChydCwgMCkgPSBhcmcwOworICBYVkVDIChydCwgMSkgPSBhcmcxOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9zRShjLCBtLCBwMCwgcDEpXAorICAgICAgICBnZW5fcnR4X2ZtdF9zRV9zdGF0IChjLCBtLCBwMCwgcDEgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X2lpX3N0YXQgKFJUWF9DT0RFIGNvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJaW50IGFyZzAsCisJaW50IGFyZzEgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhJTlQgKHJ0LCAwKSA9IGFyZzA7CisgIFhJTlQgKHJ0LCAxKSA9IGFyZzE7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X2lpKGMsIG0sIHAwLCBwMSlcCisgICAgICAgIGdlbl9ydHhfZm10X2lpX3N0YXQgKGMsIG0sIHAwLCBwMSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfRWVfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwlydHZlYyBhcmcwLAorCXJ0eCBhcmcxIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYVkVDIChydCwgMCkgPSBhcmcwOworICBYRVhQIChydCwgMSkgPSBhcmcxOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9FZShjLCBtLCBwMCwgcDEpXAorICAgICAgICBnZW5fcnR4X2ZtdF9FZV9zdGF0IChjLCBtLCBwMCwgcDEgTUVNX1NUQVRfSU5GTykKKworc3RhdGljIGlubGluZSBydHgKK2dlbl9ydHhfZm10X3NFc0Vfc3RhdCAoUlRYX0NPREUgY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwKKwljb25zdCBjaGFyICphcmcwLAorCXJ0dmVjIGFyZzEsCisJY29uc3QgY2hhciAqYXJnMiwKKwlydHZlYyBhcmczIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJ0eCBydDsKKyAgcnQgPSBydHhfYWxsb2Nfc3RhdCAoY29kZSBQQVNTX01FTV9TVEFUKTsKKworICBQVVRfTU9ERSAocnQsIG1vZGUpOworICBYU1RSIChydCwgMCkgPSBhcmcwOworICBYVkVDIChydCwgMSkgPSBhcmcxOworICBYU1RSIChydCwgMikgPSBhcmcyOworICBYVkVDIChydCwgMykgPSBhcmczOworCisgIHJldHVybiBydDsKK30KKworI2RlZmluZSBnZW5fcnR4X2ZtdF9zRXNFKGMsIG0sIHAwLCBwMSwgcDIsIHAzKVwKKyAgICAgICAgZ2VuX3J0eF9mbXRfc0VzRV9zdGF0IChjLCBtLCBwMCwgcDEsIHAyLCBwMyBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3J0eF9mbXRfc3Nzc19zdGF0IChSVFhfQ09ERSBjb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCWNvbnN0IGNoYXIgKmFyZzAsCisJY29uc3QgY2hhciAqYXJnMSwKKwljb25zdCBjaGFyICphcmcyLAorCWNvbnN0IGNoYXIgKmFyZzMgTUVNX1NUQVRfREVDTCkKK3sKKyAgcnR4IHJ0OworICBydCA9IHJ0eF9hbGxvY19zdGF0IChjb2RlIFBBU1NfTUVNX1NUQVQpOworCisgIFBVVF9NT0RFIChydCwgbW9kZSk7CisgIFhTVFIgKHJ0LCAwKSA9IGFyZzA7CisgIFhTVFIgKHJ0LCAxKSA9IGFyZzE7CisgIFhTVFIgKHJ0LCAyKSA9IGFyZzI7CisgIFhTVFIgKHJ0LCAzKSA9IGFyZzM7CisKKyAgcmV0dXJuIHJ0OworfQorCisjZGVmaW5lIGdlbl9ydHhfZm10X3Nzc3MoYywgbSwgcDAsIHAxLCBwMiwgcDMpXAorICAgICAgICBnZW5fcnR4X2ZtdF9zc3NzX3N0YXQgKGMsIG0sIHAwLCBwMSwgcDIsIHAzIE1FTV9TVEFUX0lORk8pCisKKworI2RlZmluZSBnZW5fcnR4X1ZBTFVFKE1PREUpIFwKKyAgZ2VuX3J0eF9mbXRfMCAoVkFMVUUsIChNT0RFKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUJVR19FWFBSKE1PREUpIFwKKyAgZ2VuX3J0eF9mbXRfMCAoREVCVUdfRVhQUiwgKE1PREUpKQorI2RlZmluZSBnZW5fcnR4X0VYUFJfTElTVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChFWFBSX0xJU1QsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfSU5TTl9MSVNUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfdWUgKElOU05fTElTVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9TRVFVRU5DRShNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X0UgKFNFUVVFTkNFLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9BRERSRVNTKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfaSAoQUREUkVTUywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfREVCVUdfSU5TTihNT0RFLCBBUkcwLCBBUkcxLCBBUkcyLCBBUkczLCBBUkc0LCBBUkc1LCBBUkc2LCBBUkc3KSBcCisgIGdlbl9ydHhfZm10X2l1dUJlaWllIChERUJVR19JTlNOLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMiksIChBUkczKSwgKEFSRzQpLCAoQVJHNSksIChBUkc2KSwgKEFSRzcpKQorI2RlZmluZSBnZW5fcnR4X0lOU04oTU9ERSwgQVJHMCwgQVJHMSwgQVJHMiwgQVJHMywgQVJHNCwgQVJHNSwgQVJHNiwgQVJHNykgXAorICBnZW5fcnR4X2ZtdF9pdXVCZWlpZSAoSU5TTiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpLCAoQVJHMyksIChBUkc0KSwgKEFSRzUpLCAoQVJHNiksIChBUkc3KSkKKyNkZWZpbmUgZ2VuX3J0eF9KVU1QX0lOU04oTU9ERSwgQVJHMCwgQVJHMSwgQVJHMiwgQVJHMywgQVJHNCwgQVJHNSwgQVJHNiwgQVJHNykgXAorICBnZW5fcnR4X2ZtdF9pdXVCZWlpZTAgKEpVTVBfSU5TTiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpLCAoQVJHMyksIChBUkc0KSwgKEFSRzUpLCAoQVJHNiksIChBUkc3KSkKKyNkZWZpbmUgZ2VuX3J0eF9DQUxMX0lOU04oTU9ERSwgQVJHMCwgQVJHMSwgQVJHMiwgQVJHMywgQVJHNCwgQVJHNSwgQVJHNiwgQVJHNywgQVJHOCkgXAorICBnZW5fcnR4X2ZtdF9pdXVCZWlpZWUgKENBTExfSU5TTiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpLCAoQVJHMyksIChBUkc0KSwgKEFSRzUpLCAoQVJHNiksIChBUkc3KSwgKEFSRzgpKQorI2RlZmluZSBnZW5fcnR4X0JBUlJJRVIoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF9pdXUwMDAwMCAoQkFSUklFUiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0NPREVfTEFCRUwoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMiwgQVJHMywgQVJHNCwgQVJHNSkgXAorICBnZW5fcnR4X2ZtdF9pdXVCMDBpcyAoQ09ERV9MQUJFTCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpLCAoQVJHMyksIChBUkc0KSwgKEFSRzUpKQorI2RlZmluZSBnZW5fcnR4X0NPTkRfRVhFQyhNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChDT05EX0VYRUMsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfUEFSQUxMRUwoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9FIChQQVJBTExFTCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQVNNX0lOUFVUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfc2kgKEFTTV9JTlBVVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9BU01fT1BFUkFORFMoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMiwgQVJHMywgQVJHNCwgQVJHNSwgQVJHNikgXAorICBnZW5fcnR4X2ZtdF9zc2lFRUVpIChBU01fT1BFUkFORFMsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpLCAoQVJHNCksIChBUkc1KSwgKEFSRzYpKQorI2RlZmluZSBnZW5fcnR4X1VOU1BFQyhNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X0VpIChVTlNQRUMsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVU5TUEVDX1ZPTEFUSUxFKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfRWkgKFVOU1BFQ19WT0xBVElMRSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9BRERSX1ZFQyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X0UgKEFERFJfVkVDLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9BRERSX0RJRkZfVkVDKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMpIFwKKyAgZ2VuX3J0eF9mbXRfZUVlZTAgKEFERFJfRElGRl9WRUMsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpKQorI2RlZmluZSBnZW5fcnR4X1BSRUZFVENIKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfZWVlIChQUkVGRVRDSCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X1NFVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChTRVQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVVNFKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoVVNFLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9DTE9CQkVSKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoQ0xPQkJFUiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ0FMTChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChDQUxMLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X3Jhd19SRVRVUk4oTU9ERSkgXAorICBnZW5fcnR4X2ZtdF8gKFJFVFVSTiwgKE1PREUpKQorI2RlZmluZSBnZW5fcnR4X3Jhd19TSU1QTEVfUkVUVVJOKE1PREUpIFwKKyAgZ2VuX3J0eF9mbXRfIChTSU1QTEVfUkVUVVJOLCAoTU9ERSkpCisjZGVmaW5lIGdlbl9ydHhfRUhfUkVUVVJOKE1PREUpIFwKKyAgZ2VuX3J0eF9mbXRfIChFSF9SRVRVUk4sIChNT0RFKSkKKyNkZWZpbmUgZ2VuX3J0eF9UUkFQX0lGKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFRSQVBfSUYsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfcmF3X0NPTlNUX0lOVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3cgKENPTlNUX0lOVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfcmF3X0NPTlNUX1ZFQ1RPUihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X0UgKENPTlNUX1ZFQ1RPUiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ09OU1RfU1RSSU5HKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfcyAoQ09OU1RfU1RSSU5HLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9DT05TVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKENPTlNULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9yYXdfUEMoTU9ERSkgXAorICBnZW5fcnR4X2ZtdF8gKFBDLCAoTU9ERSkpCisjZGVmaW5lIGdlbl9ydHhfcmF3X1JFRyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2kwMCAoUkVHLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TQ1JBVENIKE1PREUpIFwKKyAgZ2VuX3J0eF9mbXRfMCAoU0NSQVRDSCwgKE1PREUpKQorI2RlZmluZSBnZW5fcnR4X3Jhd19TVUJSRUcoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9laSAoU1VCUkVHLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NUUklDVF9MT1dfUEFSVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFNUUklDVF9MT1dfUEFSVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ09OQ0FUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKENPTkNBVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9DT05DQVROKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfRSAoQ09OQ0FUTiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfcmF3X01FTShNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UwIChNRU0sIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0xBQkVMX1JFRihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3UgKExBQkVMX1JFRiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfU1lNQk9MX1JFRihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3MwMCAoU1lNQk9MX1JFRiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfcmF3X0NDMChNT0RFKSBcCisgIGdlbl9ydHhfZm10XyAoQ0MwLCAoTU9ERSkpCisjZGVmaW5lIGdlbl9ydHhfSUZfVEhFTl9FTFNFKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfZWVlIChJRl9USEVOX0VMU0UsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9DT01QQVJFKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKENPTVBBUkUsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfUExVUyhNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChQTFVTLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X01JTlVTKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKE1JTlVTLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X05FRyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKE5FRywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfTVVMVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChNVUxULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NTX01VTFQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoU1NfTVVMVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9VU19NVUxUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVTX01VTFQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfRElWKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKERJViwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9TU19ESVYoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoU1NfRElWLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VTX0RJVihNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVU19ESVYsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTU9EKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKE1PRCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9VRElWKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVESVYsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVU1PRChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVTU9ELCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0FORChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChBTkQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfSU9SKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKElPUiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9YT1IoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoWE9SLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X05PVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKE5PVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQVNISUZUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKEFTSElGVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9ST1RBVEUoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoUk9UQVRFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0FTSElGVFJUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKEFTSElGVFJULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0xTSElGVFJUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKExTSElGVFJULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1JPVEFURVJUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFJPVEFURVJULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NNSU4oTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoU01JTiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9TTUFYKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFNNQVgsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVU1JTihNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVTUlOLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VNQVgoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVU1BWCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9QUkVfREVDKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoUFJFX0RFQywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfUFJFX0lOQyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFBSRV9JTkMsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1BPU1RfREVDKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoUE9TVF9ERUMsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1BPU1RfSU5DKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoUE9TVF9JTkMsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1BSRV9NT0RJRlkoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoUFJFX01PRElGWSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9QT1NUX01PRElGWShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChQT1NUX01PRElGWSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9ORShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChORSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9FUShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChFUSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9HRShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChHRSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9HVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChHVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9MRShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChMRSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9MVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChMVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9HRVUoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoR0VVLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0dUVShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChHVFUsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTEVVKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKExFVSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9MVFUoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoTFRVLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VOT1JERVJFRChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVTk9SREVSRUQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfT1JERVJFRChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChPUkRFUkVELCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VORVEoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVU5FUSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTkdFKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVOR0UsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVU5HVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVTkdULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VOTEUoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVU5MRSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTkxUKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfZWUgKFVOTFQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTFRHVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChMVEdULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NJR05fRVhURU5EKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoU0lHTl9FWFRFTkQsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1pFUk9fRVhURU5EKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoWkVST19FWFRFTkQsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1RSVU5DQVRFKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoVFJVTkNBVEUsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0ZMT0FUX0VYVEVORChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKEZMT0FUX0VYVEVORCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfRkxPQVRfVFJVTkNBVEUoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChGTE9BVF9UUlVOQ0FURSwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfRkxPQVQoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChGTE9BVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfRklYKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoRklYLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTlNJR05FRF9GTE9BVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFVOU0lHTkVEX0ZMT0FULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTlNJR05FRF9GSVgoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChVTlNJR05FRF9GSVgsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0ZSQUNUX0NPTlZFUlQoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChGUkFDVF9DT05WRVJULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTlNJR05FRF9GUkFDVF9DT05WRVJUKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoVU5TSUdORURfRlJBQ1RfQ09OVkVSVCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfU0FUX0ZSQUNUKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoU0FUX0ZSQUNULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9VTlNJR05FRF9TQVRfRlJBQ1QoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChVTlNJR05FRF9TQVRfRlJBQ1QsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0FCUyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKEFCUywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfU1FSVChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFNRUlQsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0JTV0FQKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoQlNXQVAsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0ZGUyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKEZGUywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ0xSU0IoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChDTFJTQiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfQ0xaKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoQ0xaLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9DVFooTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChDVFosIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1BPUENPVU5UKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoUE9QQ09VTlQsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1BBUklUWShNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFBBUklUWSwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfU0lHTl9FWFRSQUNUKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfZWVlIChTSUdOX0VYVFJBQ1QsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9aRVJPX0VYVFJBQ1QoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF9lZWUgKFpFUk9fRVhUUkFDVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0hJR0goTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChISUdILCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9MT19TVU0oTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoTE9fU1VNLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1ZFQ19NRVJHRShNT0RFLCBBUkcwLCBBUkcxLCBBUkcyKSBcCisgIGdlbl9ydHhfZm10X2VlZSAoVkVDX01FUkdFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfVkVDX1NFTEVDVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChWRUNfU0VMRUNULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1ZFQ19DT05DQVQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVkVDX0NPTkNBVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9WRUNfRFVQTElDQVRFKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoVkVDX0RVUExJQ0FURSwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfU1NfUExVUyhNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChTU19QTFVTLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VTX1BMVVMoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVVNfUExVUywgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9TU19NSU5VUyhNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChTU19NSU5VUywgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9TU19ORUcoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChTU19ORUcsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1VTX05FRyhNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2UgKFVTX05FRywgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfU1NfQUJTKE1PREUsIEFSRzApIFwKKyAgZ2VuX3J0eF9mbXRfZSAoU1NfQUJTLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9TU19BU0hJRlQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoU1NfQVNISUZULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1VTX0FTSElGVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2VlIChVU19BU0hJRlQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfVVNfTUlOVVMoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lZSAoVVNfTUlOVVMsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfU1NfVFJVTkNBVEUoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChTU19UUlVOQ0FURSwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfVVNfVFJVTkNBVEUoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9lIChVU19UUlVOQ0FURSwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfRk1BKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfZWVlIChGTUEsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9WQVJfTE9DQVRJT04oTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF90ZWkgKFZBUl9MT0NBVElPTiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0RFQlVHX0lNUExJQ0lUX1BUUihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3QgKERFQlVHX0lNUExJQ0lUX1BUUiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfRU5UUllfVkFMVUUoTU9ERSkgXAorICBnZW5fcnR4X2ZtdF8wIChFTlRSWV9WQUxVRSwgKE1PREUpKQorI2RlZmluZSBnZW5fcnR4X0RFQlVHX1BBUkFNRVRFUl9SRUYoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF90IChERUJVR19QQVJBTUVURVJfUkVGLCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9NQVRDSF9PUEVSQU5EKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfaXNzIChNQVRDSF9PUEVSQU5ELCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfTUFUQ0hfU0NSQVRDSChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2lzIChNQVRDSF9TQ1JBVENILCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X01BVENIX09QRVJBVE9SKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfaXNFIChNQVRDSF9PUEVSQVRPUiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X01BVENIX1BBUkFMTEVMKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfaXNFIChNQVRDSF9QQVJBTExFTCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X01BVENIX0RVUChNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X2kgKE1BVENIX0RVUCwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfTUFUQ0hfT1BfRFVQKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfaUUgKE1BVENIX09QX0RVUCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9NQVRDSF9QQVJfRFVQKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfaUUgKE1BVENIX1BBUl9EVVAsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfTUFUQ0hfQ09ERShNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NzIChNQVRDSF9DT0RFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X01BVENIX1RFU1QoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9zIChNQVRDSF9URVNULCAoTU9ERSksIChBUkcwKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfREVMQVkoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9lRSAoREVGSU5FX0RFTEFZLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0RFRklORV9QUkVESUNBVEUoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF9zZXMgKERFRklORV9QUkVESUNBVEUsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfU1BFQ0lBTF9QUkVESUNBVEUoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMikgXAorICBnZW5fcnR4X2ZtdF9zZXMgKERFRklORV9TUEVDSUFMX1BSRURJQ0FURSwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0RFRklORV9SRUdJU1RFUl9DT05TVFJBSU5UKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfc3NzIChERUZJTkVfUkVHSVNURVJfQ09OU1RSQUlOVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0RFRklORV9DT05TVFJBSU5UKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfc3NlIChERUZJTkVfQ09OU1RSQUlOVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0RFRklORV9NRU1PUllfQ09OU1RSQUlOVChNT0RFLCBBUkcwLCBBUkcxLCBBUkcyKSBcCisgIGdlbl9ydHhfZm10X3NzZSAoREVGSU5FX01FTU9SWV9DT05TVFJBSU5ULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfREVGSU5FX0FERFJFU1NfQ09OU1RSQUlOVChNT0RFLCBBUkcwLCBBUkcxLCBBUkcyKSBcCisgIGdlbl9ydHhfZm10X3NzZSAoREVGSU5FX0FERFJFU1NfQ09OU1RSQUlOVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSwgKEFSRzIpKQorI2RlZmluZSBnZW5fcnR4X0VYQ0xVU0lPTl9TRVQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9zcyAoRVhDTFVTSU9OX1NFVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9QUkVTRU5DRV9TRVQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9zcyAoUFJFU0VOQ0VfU0VULCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0ZJTkFMX1BSRVNFTkNFX1NFVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X3NzIChGSU5BTF9QUkVTRU5DRV9TRVQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfQUJTRU5DRV9TRVQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9zcyAoQUJTRU5DRV9TRVQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfRklOQUxfQUJTRU5DRV9TRVQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9zcyAoRklOQUxfQUJTRU5DRV9TRVQsIChNT0RFKSwgKEFSRzApLCAoQVJHMSkpCisjZGVmaW5lIGdlbl9ydHhfREVGSU5FX0FVVE9NQVRPTihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3MgKERFRklORV9BVVRPTUFUT04sIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0FVVE9NQVRBX09QVElPTihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3MgKEFVVE9NQVRBX09QVElPTiwgKE1PREUpLCAoQVJHMCkpCisjZGVmaW5lIGdlbl9ydHhfREVGSU5FX1JFU0VSVkFUSU9OKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfc3MgKERFRklORV9SRVNFUlZBVElPTiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfSU5TTl9SRVNFUlZBVElPTihNT0RFLCBBUkcwLCBBUkcxLCBBUkcyLCBBUkczKSBcCisgIGdlbl9ydHhfZm10X3NpZXMgKERFRklORV9JTlNOX1JFU0VSVkFUSU9OLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMiksIChBUkczKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfQVRUUihNT0RFLCBBUkcwLCBBUkcxLCBBUkcyKSBcCisgIGdlbl9ydHhfZm10X3NzZSAoREVGSU5FX0FUVFIsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfRU5VTV9BVFRSKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIpIFwKKyAgZ2VuX3J0eF9mbXRfc3NlIChERUZJTkVfRU5VTV9BVFRSLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpLCAoQVJHMikpCisjZGVmaW5lIGdlbl9ydHhfQVRUUihNT0RFLCBBUkcwKSBcCisgIGdlbl9ydHhfZm10X3MgKEFUVFIsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X1NFVF9BVFRSKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfc3MgKFNFVF9BVFRSLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X1NFVF9BVFRSX0FMVEVSTkFUSVZFKE1PREUsIEFSRzAsIEFSRzEpIFwKKyAgZ2VuX3J0eF9mbXRfc0UgKFNFVF9BVFRSX0FMVEVSTkFUSVZFLCAoTU9ERSksIChBUkcwKSwgKEFSRzEpKQorI2RlZmluZSBnZW5fcnR4X0VRX0FUVFIoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9zcyAoRVFfQVRUUiwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9FUV9BVFRSX0FMVChNT0RFLCBBUkcwLCBBUkcxKSBcCisgIGdlbl9ydHhfZm10X2lpIChFUV9BVFRSX0FMVCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9BVFRSX0ZMQUcoTU9ERSwgQVJHMCkgXAorICBnZW5fcnR4X2ZtdF9zIChBVFRSX0ZMQUcsIChNT0RFKSwgKEFSRzApKQorI2RlZmluZSBnZW5fcnR4X0NPTkQoTU9ERSwgQVJHMCwgQVJHMSkgXAorICBnZW5fcnR4X2ZtdF9FZSAoQ09ORCwgKE1PREUpLCAoQVJHMCksIChBUkcxKSkKKyNkZWZpbmUgZ2VuX3J0eF9ERUZJTkVfU1VCU1QoTU9ERSwgQVJHMCwgQVJHMSwgQVJHMiwgQVJHMykgXAorICBnZW5fcnR4X2ZtdF9zRXNFIChERUZJTkVfU1VCU1QsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpKQorI2RlZmluZSBnZW5fcnR4X0RFRklORV9TVUJTVF9BVFRSKE1PREUsIEFSRzAsIEFSRzEsIEFSRzIsIEFSRzMpIFwKKyAgZ2VuX3J0eF9mbXRfc3NzcyAoREVGSU5FX1NVQlNUX0FUVFIsIChNT0RFKSwgKEFSRzApLCAoQVJHMSksIChBUkcyKSwgKEFSRzMpKQorCisjZW5kaWYgLyogR0NDX0dFTlJUTF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ2djLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ2djLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxYmM4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9nZ2MuaApAQCAtMCwwICsxLDI3OSBAQAorLyogR2FyYmFnZSBjb2xsZWN0aW9uIGZvciB0aGUgR05VIGNvbXBpbGVyLgorCisgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0dHQ19ICisjZGVmaW5lIEdDQ19HR0NfSAorI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKKworLyogU3ltYm9scyBhcmUgbWFya2VkIHdpdGggYGdnYycgZm9yIGBnY2MgZ2MnIHNvIGFzIG5vdCB0byBpbnRlcmZlcmUgd2l0aAorICAgYW4gZXh0ZXJuYWwgZ2MgbGlicmFyeSB0aGF0IG1pZ2h0IGJlIGxpbmtlZCBpbi4gICovCisKKy8qIENvbnN0YW50cyBmb3IgZ2VuZXJhbCB1c2UuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgZW1wdHlfc3RyaW5nW107CS8qIGVtcHR5IHN0cmluZyAqLworCisvKiBJbnRlcm5hbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBHVFkKKyAgIG1hY2hpbmVyeSwgaW5jbHVkaW5nIHRoZSBnZW5lcmF0ZWQgZ3QqLltoY10gZmlsZXMuICAqLworCisjaW5jbHVkZSAiZ3R5cGUtZGVzYy5oIgorCisvKiBPbmUgb2YgdGhlc2UgYXBwbGllcyBpdHMgdGhpcmQgcGFyYW1ldGVyICh3aXRoIGNvb2tpZSBpbiB0aGUgZm91cnRoCisgICBwYXJhbWV0ZXIpIHRvIGVhY2ggcG9pbnRlciBpbiB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgdGhlIGZpcnN0CisgICBwYXJhbWV0ZXIsIHVzaW5nIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKmd0X25vdGVfcG9pbnRlcnMpICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwKKwkJCQkgIHZvaWQgKik7CisKKy8qIE9uZSBvZiB0aGVzZSBpcyBjYWxsZWQgYmVmb3JlIG9iamVjdHMgYXJlIHJlLW9yZGVyZWQgaW4gbWVtb3J5LgorICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgb3JpZ2luYWwgb2JqZWN0LCB0aGUgc2Vjb25kIGlzIHRoZQorICAgc3Vib2JqZWN0IHRoYXQgaGFzIGhhZCBpdHMgcG9pbnRlcnMgcmVvcmRlcmVkLCB0aGUgdGhpcmQgcGFyYW1ldGVyCisgICBjYW4gY29tcHV0ZSB0aGUgbmV3IHZhbHVlcyBvZiBhIHBvaW50ZXIgd2hlbiBnaXZlbiB0aGUgY29va2llIGluCisgICB0aGUgZm91cnRoIHBhcmFtZXRlci4gICovCit0eXBlZGVmIHZvaWQgKCpndF9oYW5kbGVfcmVvcmRlcikgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLAorCQkJCSAgIHZvaWQgKik7CisKKy8qIFVzZWQgYnkgdGhlIGd0X3BjaF9uXyogcm91dGluZXMuICBSZWdpc3RlciBhbiBvYmplY3QgaW4gdGhlIGhhc2ggdGFibGUuICAqLworZXh0ZXJuIGludCBndF9wY2hfbm90ZV9vYmplY3QgKHZvaWQgKiwgdm9pZCAqLCBndF9ub3RlX3BvaW50ZXJzKTsKKworLyogVXNlZCBieSB0aGUgZ3RfcGNoX25fKiByb3V0aW5lcy4gIFJlZ2lzdGVyIHRoYXQgYW4gb2JqZWN0IGhhcyBhIHJlb3JkZXIKKyAgIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiB2b2lkIGd0X3BjaF9ub3RlX3Jlb3JkZXIgKHZvaWQgKiwgdm9pZCAqLCBndF9oYW5kbGVfcmVvcmRlcik7CisKKy8qIE1hcmsgdGhlIG9iamVjdCBpbiB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCBhbnl0aGluZyBpdCBwb2ludHMgdG8uICAqLwordHlwZWRlZiB2b2lkICgqZ3RfcG9pbnRlcl93YWxrZXIpICh2b2lkICopOworCisvKiBTdHJ1Y3R1cmVzIGZvciB0aGUgZWFzeSB3YXkgdG8gbWFyayByb290cy4KKyAgIEluIGFuIGFycmF5LCB0ZXJtaW5hdGVkIGJ5IGhhdmluZyBiYXNlID09IE5VTEwuICAqLworc3RydWN0IGdnY19yb290X3RhYiB7CisgIHZvaWQgKmJhc2U7CisgIHNpemVfdCBuZWx0OworICBzaXplX3Qgc3RyaWRlOworICBndF9wb2ludGVyX3dhbGtlciBjYjsKKyAgZ3RfcG9pbnRlcl93YWxrZXIgcGNodzsKK307CisjZGVmaW5lIExBU1RfR0dDX1JPT1RfVEFCIHsgTlVMTCwgMCwgMCwgTlVMTCwgTlVMTCB9CisvKiBQb2ludGVycyB0byBhcnJheXMgb2YgZ2djX3Jvb3RfdGFiLCB0ZXJtaW5hdGVkIGJ5IE5VTEwuICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZ2Nfcm9vdF90YWIgKiBjb25zdCBndF9nZ2NfcnRhYltdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnZ2Nfcm9vdF90YWIgKiBjb25zdCBndF9nZ2NfZGVsZXRhYmxlX3J0YWJbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2djX3Jvb3RfdGFiICogY29uc3QgZ3RfcGNoX2NhY2hlX3J0YWJbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZ2djX3Jvb3RfdGFiICogY29uc3QgZ3RfcGNoX3NjYWxhcl9ydGFiW107CisKKy8qIFN0cnVjdHVyZSBmb3IgaGFzaCB0YWJsZSBjYWNoZSBtYXJraW5nLiAgKi8KK3N0cnVjdCBodGFiOworc3RydWN0IGdnY19jYWNoZV90YWIgeworICBzdHJ1Y3QgaHRhYiAqICpiYXNlOworICBzaXplX3QgbmVsdDsKKyAgc2l6ZV90IHN0cmlkZTsKKyAgZ3RfcG9pbnRlcl93YWxrZXIgY2I7CisgIGd0X3BvaW50ZXJfd2Fsa2VyIHBjaHc7CisgIGludCAoKm1hcmtlZF9wKSAoY29uc3Qgdm9pZCAqKTsKK307CisjZGVmaW5lIExBU1RfR0dDX0NBQ0hFX1RBQiB7IE5VTEwsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwgfQorLyogUG9pbnRlcnMgdG8gYXJyYXlzIG9mIGdnY19jYWNoZV90YWIsIHRlcm1pbmF0ZWQgYnkgTlVMTC4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IGdnY19jYWNoZV90YWIgKiBjb25zdCBndF9nZ2NfY2FjaGVfcnRhYltdOworCisvKiBJZiBFWFBSIGlzIG5vdCBOVUxMIGFuZCBwcmV2aW91c2x5IHVubWFya2VkLCBtYXJrIGl0IGFuZCBldmFsdWF0ZQorICAgdG8gdHJ1ZS4gIE90aGVyd2lzZSBldmFsdWF0ZSB0byBmYWxzZS4gICovCisjZGVmaW5lIGdnY190ZXN0X2FuZF9zZXRfbWFyayhFWFBSKSBcCisgICgoRVhQUikgIT0gTlVMTCAmJiAoKHZvaWQgKikgKEVYUFIpKSAhPSAodm9pZCAqKSAxICYmICEgZ2djX3NldF9tYXJrIChFWFBSKSkKKworI2RlZmluZSBnZ2NfbWFyayhFWFBSKQkJCQlcCisgIGRvIHsJCQkJCQlcCisgICAgY29uc3Qgdm9pZCAqY29uc3QgYV9fID0gKEVYUFIpOwkJXAorICAgIGlmIChhX18gIT0gTlVMTCAmJiBhX18gIT0gKHZvaWQgKikgMSkJXAorICAgICAgZ2djX3NldF9tYXJrIChhX18pOwkJCVwKKyAgfSB3aGlsZSAoMCkKKworLyogQWN0dWFsbHkgc2V0IHRoZSBtYXJrIG9uIGEgcGFydGljdWxhciByZWdpb24gb2YgbWVtb3J5LCBidXQgZG9uJ3QKKyAgIGZvbGxvdyBwb2ludGVycy4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGdnY19tYXJrXyouICBJdAorICAgcmV0dXJucyB6ZXJvIGlmIHRoZSBvYmplY3Qgd2FzIG5vdCBwcmV2aW91c2x5IG1hcmtlZDsgbm9uemVybyBpZgorICAgdGhlIG9iamVjdCB3YXMgYWxyZWFkeSBtYXJrZWQsIG9yIGlmLCBmb3IgYW55IG90aGVyIHJlYXNvbiwKKyAgIHBvaW50ZXJzIGluIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgc2hvdWxkIG5vdCBiZSB0cmF2ZXJzZWQuICAqLworZXh0ZXJuIGludCBnZ2Nfc2V0X21hcmsJKGNvbnN0IHZvaWQgKik7CisKKy8qIFJldHVybiAxIGlmIFAgaGFzIGJlZW4gbWFya2VkLCB6ZXJvIG90aGVyd2lzZS4KKyAgIFAgbXVzdCBoYXZlIGJlZW4gYWxsb2NhdGVkIGJ5IHRoZSBHQyBhbGxvY2F0b3I7IGl0IG11c3RuJ3QgcG9pbnQgdG8KKyAgIHN0YXRpYyBvYmplY3RzLCBzdGFjayB2YXJpYWJsZXMsIG9yIG1lbW9yeSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MuICAqLworZXh0ZXJuIGludCBnZ2NfbWFya2VkX3AJKGNvbnN0IHZvaWQgKik7CisKKy8qIFBDSCBhbmQgR0dDIGhhbmRsaW5nIGZvciBzdHJpbmdzLCBtb3N0bHkgdHJpdmlhbC4gICovCitleHRlcm4gdm9pZCBndF9wY2hfbl9TIChjb25zdCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUyAoY29uc3Qgdm9pZCAqKTsKKworLyogRW5kIG9mIEdUWSBtYWNoaW5lcnkgQVBJLiAgKi8KKworLyogSW5pdGlhbGl6ZSB0aGUgc3RyaW5nIHBvb2wuICAqLworZXh0ZXJuIHZvaWQgaW5pdF9zdHJpbmdwb29sICh2b2lkKTsKKworLyogSW5pdGlhbGl6ZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuICAqLworZXh0ZXJuIHZvaWQgaW5pdF9nZ2MgKHZvaWQpOworCisvKiBXaGVuIHRydWUsIGlkZW50aWZpZXIgbm9kZXMgYXJlIGNvbnNpZGVyZWQgYXMgR0Mgcm9vdHMuICBXaGVuCisgICBmYWxzZSwgaWRlbnRpZmllciBub2RlcyBhcmUgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBHQy1hbGxvY2F0ZWQKKyAgIG9iamVjdCwgYW5kIHRoZSBpZGVudGlmaWVyIGhhc2ggdGFibGUgaXMgdHJlYXRlZCBhcyBhIHdlYWsKKyAgIGhhc2guICAqLworZXh0ZXJuIGJvb2wgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnM7CisKKy8qIFdyaXRlIG91dCBhbGwgR0NlZCBvYmplY3RzIHRvIEYuICAqLworZXh0ZXJuIHZvaWQgZ3RfcGNoX3NhdmUgKEZJTEUgKmYpOworCisMCisvKiBBbGxvY2F0aW9uLiAgKi8KKworLyogVGhlIGludGVybmFsIHByaW1pdGl2ZS4gICovCitleHRlcm4gdm9pZCAqZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVfdCBNRU1fU1RBVF9ERUNMKQorICBBVFRSSUJVVEVfTUFMTE9DOworCitleHRlcm4gc2l6ZV90IGdnY19yb3VuZF9hbGxvY19zaXplIChzaXplX3QgcmVxdWVzdGVkX3NpemUpOworCisjZGVmaW5lIGdnY19pbnRlcm5hbF9hbGxvYyhzKSBnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAocyBNRU1fU1RBVF9JTkZPKQorCisvKiBBbGxvY2F0ZXMgY2xlYXJlZCBtZW1vcnkuICAqLworZXh0ZXJuIHZvaWQgKmdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVfdCBNRU1fU1RBVF9ERUNMKQorICBBVFRSSUJVVEVfTUFMTE9DOworCisvKiBSZXNpemUgYSBibG9jay4gICovCitleHRlcm4gdm9pZCAqZ2djX3JlYWxsb2Nfc3RhdCAodm9pZCAqLCBzaXplX3QgTUVNX1NUQVRfREVDTCk7CisKKy8qIEZyZWUgYSBibG9jay4gIFRvIGJlIHVzZWQgd2hlbiBrbm93biBmb3IgY2VydGFpbiBpdCdzIG5vdCByZWFjaGFibGUuICAqLworZXh0ZXJuIHZvaWQgZ2djX2ZyZWUgKHZvaWQgKik7CisKK2V4dGVybiB2b2lkIGR1bXBfZ2djX2xvY19zdGF0aXN0aWNzIChib29sKTsKKworLyogUmVhbGxvY2F0b3JzLiAgKi8KKyNkZWZpbmUgR0dDX1JFU0laRVZFQyhULCBQLCBOKSBcCisgICAgKChUICopIGdnY19yZWFsbG9jX3N0YXQgKChQKSwgKE4pICogc2l6ZW9mIChUKSBNRU1fU1RBVF9JTkZPKSkKKworI2RlZmluZSBHR0NfUkVTSVpFVkFSKFQsIFAsIE4pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChUICopIGdnY19yZWFsbG9jX3N0YXQgKChQKSwgKE4pIE1FTV9TVEFUX0lORk8pKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplX3Qgcywgc2l6ZV90IGMgTUVNX1NUQVRfREVDTCkKK3sKKyAgICByZXR1cm4gZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKGMgKiBzIFBBU1NfTUVNX1NUQVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKgorZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVfdCBzLCBzaXplX3QgYyBNRU1fU1RBVF9ERUNMKQoreworICAgIHJldHVybiBnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChjICogcyBQQVNTX01FTV9TVEFUKTsKK30KKworI2RlZmluZSBnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2MocywgYykgXAorICAgIChnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoKHMpLCAoYykgTUVNX1NUQVRfSU5GTykpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitnZ2NfYWxsb2NfYXRvbWljX3N0YXQgKHNpemVfdCBzIE1FTV9TVEFUX0RFQ0wpCit7CisgICAgcmV0dXJuIGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzIFBBU1NfTUVNX1NUQVQpOworfQorCisjZGVmaW5lIGdnY19hbGxvY19hdG9taWMoUykgIChnZ2NfYWxsb2NfYXRvbWljX3N0YXQgKChTKSBNRU1fU1RBVF9JTkZPKSkKKworI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9hdG9taWMoUykgICAgICAgICAgICAgXAorICAgIChnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0ICgoUykgTUVNX1NUQVRfSU5GTykpCisKK2V4dGVybiB2b2lkICpnZ2NfY2xlYXJlZF9hbGxvY19odGFiX2lnbm9yZV9hcmdzIChzaXplX3QsIHNpemVfdCkKKyAgQVRUUklCVVRFX01BTExPQzsKKworZXh0ZXJuIHZvaWQgKmdnY19jbGVhcmVkX2FsbG9jX3B0cl9hcnJheV90d29fYXJncyAoc2l6ZV90LCBzaXplX3QpCisgIEFUVFJJQlVURV9NQUxMT0M7CisKKyNkZWZpbmUgaHRhYl9jcmVhdGVfZ2djKFNJWkUsIEhBU0gsIEVRLCBERUwpIFwKKyAgaHRhYl9jcmVhdGVfdHlwZWRfYWxsb2MgKFNJWkUsIEhBU0gsIEVRLCBERUwsCVwKKwkJCSAgIGdnY19jbGVhcmVkX2FsbG9jX2h0YWJfaWdub3JlX2FyZ3MsCQlcCisJCQkgICBnZ2NfY2xlYXJlZF9hbGxvY19wdHJfYXJyYXlfdHdvX2FyZ3MsCVwKKwkJCSAgIGdnY19mcmVlKQorCisjZGVmaW5lIHNwbGF5X3RyZWVfbmV3X2dnYyhDT01QQVJFLCBBTExPQ19UUkVFLCBBTExPQ19OT0RFKQkJICAgICBcCisgIHNwbGF5X3RyZWVfbmV3X3R5cGVkX2FsbG9jIChDT01QQVJFLCBOVUxMLCBOVUxMLCAmQUxMT0NfVFJFRSwgJkFMTE9DX05PREUsIFwKKwkJCSAgICAgICZnZ2Nfc3BsYXlfZG9udF9mcmVlLCBOVUxMKQorCitleHRlcm4gdm9pZCAqZ2djX3NwbGF5X2FsbG9jIChpbnQsIHZvaWQgKikKKyAgQVRUUklCVVRFX01BTExPQzsKKworZXh0ZXJuIHZvaWQgZ2djX3NwbGF5X2RvbnRfZnJlZSAodm9pZCAqLCB2b2lkICopOworCisvKiBBbGxvY2F0ZSBhIGdjLWFibGUgc3RyaW5nLCBhbmQgZmlsbCBpdCB3aXRoIExFTkdUSCBieXRlcyBmcm9tIENPTlRFTlRTLgorICAgSWYgTEVOR1RIIGlzIC0xLCB0aGVuIENPTlRFTlRTIGlzIGFzc3VtZWQgdG8gYmUgYQorICAgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBhbmQgdGhlIG1lbW9yeSBzaXplZCBhY2NvcmRpbmdseS4gICovCitleHRlcm4gY29uc3QgY2hhciAqZ2djX2FsbG9jX3N0cmluZ19zdGF0IChjb25zdCBjaGFyICpjb250ZW50cywgaW50IGxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX1NUQVRfREVDTCk7CisKKyNkZWZpbmUgZ2djX2FsbG9jX3N0cmluZyhjLCBsKSBnZ2NfYWxsb2Nfc3RyaW5nX3N0YXQgKGMsIGwgTUVNX1NUQVRfSU5GTykKKworLyogTWFrZSBhIGNvcHkgb2YgUywgaW4gR0MtYWJsZSBtZW1vcnkuICAqLworI2RlZmluZSBnZ2Nfc3RyZHVwKFMpIGdnY19hbGxvY19zdHJpbmdfc3RhdCAoKFMpLCAtMSBNRU1fU1RBVF9JTkZPKQorCisvKiBJbnZva2UgdGhlIGNvbGxlY3Rvci4gIEdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMgb25seSB3aGVuIHRoaXMKKyAgIGZ1bmN0aW9uIGlzIGNhbGxlZCwgbm90IGR1cmluZyBhbGxvY2F0aW9ucy4gICovCitleHRlcm4gdm9pZCBnZ2NfY29sbGVjdAkodm9pZCk7CisKKy8qIFJlZ2lzdGVyIGFuIGFkZGl0aW9uYWwgcm9vdCB0YWJsZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igc29tZQorICAgcGx1Z2lucy4gIERvZXMgbm90aGluZyBpZiB0aGUgcGFzc2VkIHBvaW50ZXIgaXMgTlVMTC4gKi8KK2V4dGVybiB2b2lkIGdnY19yZWdpc3Rlcl9yb290X3RhYiAoY29uc3Qgc3RydWN0IGdnY19yb290X3RhYiAqKTsKKworLyogUmVnaXN0ZXIgYW4gYWRkaXRpb25hbCBjYWNoZSB0YWJsZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igc29tZQorICAgcGx1Z2lucy4gIERvZXMgbm90aGluZyBpZiB0aGUgcGFzc2VkIHBvaW50ZXIgaXMgTlVMTC4gKi8KK2V4dGVybiB2b2lkIGdnY19yZWdpc3Rlcl9jYWNoZV90YWIgKGNvbnN0IHN0cnVjdCBnZ2NfY2FjaGVfdGFiICopOworCisvKiBSZWFkIG9iamVjdHMgcHJldmlvdXNseSBzYXZlZCB3aXRoIGd0X3BjaF9zYXZlIGZyb20gRi4gICovCitleHRlcm4gdm9pZCBndF9wY2hfcmVzdG9yZSAoRklMRSAqZik7CisMCisvKiBTdGF0aXN0aWNzLiAgKi8KKworLyogUHJpbnQgYWxsb2NhdGlvbiBzdGF0aXN0aWNzLiAgKi8KK2V4dGVybiB2b2lkIGdnY19wcmludF9zdGF0aXN0aWNzICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc3RyaW5ncG9vbF9zdGF0aXN0aWNzICh2b2lkKTsKKworLyogSGV1cmlzdGljcy4gICovCitleHRlcm4gdm9pZCBpbml0X2dnY19oZXVyaXN0aWNzICh2b2lkKTsKKworI2RlZmluZSBnZ2NfYWxsb2NfcnR2ZWNfc2l6ZWQoTkVMVCkJCQkJXAorICBnZ2NfYWxsb2NfcnR2ZWNfZGVmIChzaXplb2YgKHN0cnVjdCBydHZlY19kZWYpCQlcCisJCSAgICAgICArICgoTkVMVCkgLSAxKSAqIHNpemVvZiAocnR4KSkJCVwKKworLyogTWVtb3J5IHN0YXRpc3RpY3MgcGFzc2luZyB2ZXJzaW9ucyBvZiBzb21lIGFsbG9jYXRvcnMuICBUb28gZmV3IG9mIHRoZW0gdG8KKyAgIG1ha2UgZ2VuZ3R5cGUgcHJvZHVjZSB0aGVtLCBzbyBqdXN0IGRlZmluZSB0aGUgbmVlZGVkIG9uZXMgaGVyZS4gICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydHhfZGVmICoKK2dnY19hbGxvY19ydHhfZGVmX3N0YXQgKHNpemVfdCBzIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJldHVybiAoc3RydWN0IHJ0eF9kZWYgKikgZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHMgUEFTU19NRU1fU1RBVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5pb24gdHJlZV9ub2RlICoKK2dnY19hbGxvY190cmVlX25vZGVfc3RhdCAoc2l6ZV90IHMgTUVNX1NUQVRfREVDTCkKK3sKKyAgcmV0dXJuICh1bmlvbiB0cmVlX25vZGUgKikgZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHMgUEFTU19NRU1fU1RBVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5pb24gdHJlZV9ub2RlICoKK2dnY19hbGxvY19jbGVhcmVkX3RyZWVfbm9kZV9zdGF0IChzaXplX3QgcyBNRU1fU1RBVF9ERUNMKQoreworICByZXR1cm4gKHVuaW9uIHRyZWVfbm9kZSAqKSBnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzIFBBU1NfTUVNX1NUQVQpOworfQorCitzdGF0aWMgaW5saW5lIHVuaW9uIGdpbXBsZV9zdGF0ZW1lbnRfZCAqCitnZ2NfYWxsb2NfY2xlYXJlZF9naW1wbGVfc3RhdGVtZW50X2Rfc3RhdCAoc2l6ZV90IHMgTUVNX1NUQVRfREVDTCkKK3sKKyAgcmV0dXJuICh1bmlvbiBnaW1wbGVfc3RhdGVtZW50X2QgKikKKyAgICBnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzIFBBU1NfTUVNX1NUQVQpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9naW1wbGUtcHJldHR5LXByaW50LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ2ltcGxlLXByZXR0eS1wcmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OTJkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ2ltcGxlLXByZXR0eS1wcmludC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIFZhcmlvdXMgZGVjbGFyYXRpb25zIGZvciBwcmV0dHkgZm9ybWF0dGluZyBvZiBHSU1QTEUgc3RhdGVtZW50cyBhbmQKKyAgIGV4cHJlc3Npb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19HSU1QTEVfUFJFVFRZX1BSSU5UX0gKKyNkZWZpbmUgR0NDX0dJTVBMRV9QUkVUVFlfUFJJTlRfSAorCisjaW5jbHVkZSAicHJldHR5LXByaW50LmgiCisjaW5jbHVkZSAidHJlZS1wcmV0dHktcHJpbnQuaCIKKworLyogSW4gZ2ltcGxlLXByZXR0eS1wcmludC5jICAqLworZXh0ZXJuIHZvaWQgZGVidWdfZ2ltcGxlX3N0bXQgKGdpbXBsZSk7CitleHRlcm4gdm9pZCBkZWJ1Z19naW1wbGVfc2VxIChnaW1wbGVfc2VxKTsKK2V4dGVybiB2b2lkIHByaW50X2dpbXBsZV9zZXEgKEZJTEUgKiwgZ2ltcGxlX3NlcSwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfZ2ltcGxlX3N0bXQgKEZJTEUgKiwgZ2ltcGxlLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBwcmludF9naW1wbGVfZXhwciAoRklMRSAqLCBnaW1wbGUsIGludCwgaW50KTsKK2V4dGVybiB2b2lkIHBwX2dpbXBsZV9zdG10XzEgKHByZXR0eV9wcmludGVyICosIGdpbXBsZSwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgZ2ltcGxlX2R1bXBfYmJfZm9yX2dyYXBoIChwcmV0dHlfcHJpbnRlciAqLCBiYXNpY19ibG9jayk7CisKKyNlbmRpZiAvKiAhIEdDQ19HSU1QTEVfUFJFVFRZX1BSSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9naW1wbGUuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2dpbXBsZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhZDU3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9naW1wbGUuZGVmCkBAIC0wLDAgKzEsMzY0IEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBHSU1QTEUgSVIgdHVwbGVzIHVzZWQgaW4gR0NDLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFsZHkgSGVybmFuZGV6IDxhbGR5aEByZWRoYXQuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhlIGZvcm1hdCBvZiB0aGlzIGZpbGUgaXMKKyAgIERFRkdTQ09ERShHSU1QTEVfc3ltYm9sLCBwcmludGFibGUgbmFtZSwgR1NTX3N5bWJvbCkuICAqLworCisKKy8qIEVycm9yIG1hcmtlci4gIFRoaXMgaXMgdXNlZCBpbiBzaW1pbGFyIHdheXMgYXMgRVJST1JfTUFSSyBpbiB0cmVlLmRlZi4gICovCitERUZHU0NPREUoR0lNUExFX0VSUk9SX01BUkssICJnaW1wbGVfZXJyb3JfbWFyayIsIEdTU19CQVNFKQorCisvKiBJTVBPUlRBTlQuICBEbyBub3QgcmVhcnJhbmdlIHRoZSBjb2RlcyBiZXR3ZWVuIEdJTVBMRV9DT05EIGFuZAorICAgR0lNUExFX1JFVFVSTi4gIFRoZSBvcmRlcmluZyBpcyBleHBvc2VkIGJ5IGdpbXBsZV9oYXNfb3BzIGNhbGxzLgorICAgVGhlc2UgYXJlIGFsbCB0aGUgR0lNUExFIHN0YXRlbWVudHMgd2l0aCByZWdpc3RlciBvcGVyYW5kcy4gICovCisKKy8qIEdJTVBMRV9DT05EIDxDT05EX0NPREUsIE9QMSwgT1AyLCBUUlVFX0xBQkVMLCBGQUxTRV9MQUJFTD4KKyAgIHJlcHJlc2VudHMgdGhlIGNvbmRpdGlvbmFsIGp1bXA6CisKKyAgIGlmIChPUDEgQ09ORF9DT0RFIE9QMikgZ290byBUUlVFX0xBQkVMIGVsc2UgZ290byBGQUxTRV9MQUJFTAorCisgICBDT05EX0NPREUgaXMgdGhlIHRyZWUgY29kZSB1c2VkIGFzIHRoZSBjb21wYXJpc29uIHByZWRpY2F0ZS4gIEl0CisgICBtdXN0IGJlIG9mIGNsYXNzIHRjY19jb21wYXJpc29uLgorCisgICBPUDEgYW5kIE9QMiBhcmUgdGhlIG9wZXJhbmRzIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uICBUaGV5IG11c3QgYmUKKyAgIGFjY2VwdGVkIGJ5IGlzX2dpbXBsZV9vcGVyYW5kLgorCisgICBUUlVFX0xBQkVMIGFuZCBGQUxTRV9MQUJFTCBhcmUgdGhlIExBQkVMX0RFQ0wgbm9kZXMgdXNlZCBhcyB0aGUKKyAgIGp1bXAgdGFyZ2V0IGZvciB0aGUgY29tcGFyaXNvbi4gICovCitERUZHU0NPREUoR0lNUExFX0NPTkQsICJnaW1wbGVfY29uZCIsIEdTU19XSVRIX09QUykKKworLyogR0lNUExFX0RFQlVHIHJlcHJlc2VudHMgYSBkZWJ1ZyBzdGF0ZW1lbnQuICAqLworREVGR1NDT0RFKEdJTVBMRV9ERUJVRywgImdpbXBsZV9kZWJ1ZyIsIEdTU19XSVRIX09QUykKKworLyogR0lNUExFX0dPVE8gPFRBUkdFVD4gcmVwcmVzZW50cyB1bmNvbmRpdGlvbmFsIGp1bXBzLgorICAgVEFSR0VUIGlzIGEgTEFCRUxfREVDTCBvciBhbiBleHByZXNzaW9uIG5vZGUgZm9yIGNvbXB1dGVkIEdPVE9zLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfR09UTywgImdpbXBsZV9nb3RvIiwgR1NTX1dJVEhfT1BTKQorCisvKiBHSU1QTEVfTEFCRUwgPExBQkVMPiByZXByZXNlbnRzIGxhYmVsIHN0YXRlbWVudHMuICBMQUJFTCBpcyBhCisgICBMQUJFTF9ERUNMIHJlcHJlc2VudGluZyBhIGp1bXAgdGFyZ2V0LiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfTEFCRUwsICJnaW1wbGVfbGFiZWwiLCBHU1NfV0lUSF9PUFMpCisKKy8qIEdJTVBMRV9TV0lUQ0ggPElOREVYLCBERUZBVUxUX0xBQiwgTEFCMSwgLi4uLCBMQUJOPiByZXByZXNlbnRzIHRoZQorICAgbXVsdGl3YXkgYnJhbmNoOgorCisgICBzd2l0Y2ggKElOREVYKQorICAgeworICAgICBjYXNlIExBQjE6IC4uLjsgYnJlYWs7CisgICAgIC4uLgorICAgICBjYXNlIExBQk46IC4uLjsgYnJlYWs7CisgICAgIGRlZmF1bHQ6IC4uLgorICAgfQorCisgICBJTkRFWCBpcyB0aGUgdmFyaWFibGUgZXZhbHVhdGVkIHRvIGRlY2lkZSB3aGljaCBsYWJlbCB0byBqdW1wIHRvLgorCisgICBERUZBVUxUX0xBQiwgTEFCMSAuLi4gTEFCTiBhcmUgdGhlIHRyZWUgbm9kZXMgcmVwcmVzZW50aW5nIGNhc2UgbGFiZWxzLgorICAgVGhleSBtdXN0IGJlIENBU0VfTEFCRUxfRVhQUiBub2Rlcy4gICovCitERUZHU0NPREUoR0lNUExFX1NXSVRDSCwgImdpbXBsZV9zd2l0Y2giLCBHU1NfV0lUSF9PUFMpCisKKy8qIElNUE9SVEFOVC4KKworICAgRG8gbm90IHJlYXJyYW5nZSB0aGUgY29kZXMgYmV0d2VlbiBHSU1QTEVfQVNTSUdOIGFuZCBHSU1QTEVfUkVUVVJOLgorICAgSXQncyBleHBvc2VkIGJ5IEdJTVBMRV9SQU5HRV9DSEVDSyBjYWxscy4gVGhlc2UgYXJlIGFsbCB0aGUgR0lNUExFCisgICBzdGF0ZW1lbnRzIHdpdGggbWVtb3J5IGFuZCByZWdpc3RlciBvcGVyYW5kcy4gICovCisKKy8qIEdJTVBMRV9BU1NJR04gPFNVQkNPREUsIExIUywgUkhTMVssIFJIUzJdPiByZXByZXNlbnRzIHRoZSBhc3NpZ25tZW50CisgICBzdGF0ZW1lbnQKKworICAgTEhTID0gUkhTMSBTVUJDT0RFIFJIUzIuCisKKyAgIFNVQkNPREUgaXMgdGhlIHRyZWUgY29kZSBmb3IgdGhlIGV4cHJlc3Npb24gY29tcHV0ZWQgYnkgdGhlIFJIUyBvZiB0aGUKKyAgIGFzc2lnbm1lbnQuICBJdCBtdXN0IGJlIG9uZSBvZiB0aGUgdHJlZSBjb2RlcyBhY2NlcHRlZCBieQorICAgZ2V0X2dpbXBsZV9yaHNfY2xhc3MuICBJZiBMSFMgaXMgbm90IGEgZ2ltcGxlIHJlZ2lzdGVyIGFjY29yZGluZyB0bworICAgaXNfZ2ltcGxlX3JlZywgU1VCQ09ERSBtdXN0IGJlIG9mIGNsYXNzIEdJTVBMRV9TSU5HTEVfUkhTLgorCisgICBMSFMgaXMgdGhlIG9wZXJhbmQgb24gdGhlIExIUyBvZiB0aGUgYXNzaWdubWVudC4gIEl0IG11c3QgYmUgYSB0cmVlIG5vZGUKKyAgIGFjY2VwdGVkIGJ5IGlzX2dpbXBsZV9sdmFsdWUuCisKKyAgIFJIUzEgaXMgdGhlIGZpcnN0IG9wZXJhbmQgb24gdGhlIFJIUyBvZiB0aGUgYXNzaWdubWVudC4gIEl0IG11c3QgYWx3YXlzIGJlCisgICBwcmVzZW50LiAgSXQgbXVzdCBiZSBhIHRyZWUgbm9kZSBhY2NlcHRlZCBieSBpc19naW1wbGVfdmFsLgorCisgICBSSFMyIGlzIHRoZSBzZWNvbmQgb3BlcmFuZCBvbiB0aGUgUkhTIG9mIHRoZSBhc3NpZ25tZW50LiAgSXQgbXVzdCBiZSBhIHRyZWUKKyAgIG5vZGUgYWNjZXB0ZWQgYnkgaXNfZ2ltcGxlX3ZhbC4gIFRoaXMgYXJndW1lbnQgZXhpc3RzIG9ubHkgaWYgU1VCQ09ERSBpcworICAgb2YgY2xhc3MgR0lNUExFX0JJTkFSWV9SSFMuICAqLworREVGR1NDT0RFKEdJTVBMRV9BU1NJR04sICJnaW1wbGVfYXNzaWduIiwgR1NTX1dJVEhfTUVNX09QUykKKworLyogR0lNUExFX0FTTSA8U1RSSU5HLCBJMSwgLi4uLCBJTiwgTzEsIC4uLiBPTSwgQzEsIC4uLiwgQ1A+CisgICByZXByZXNlbnRzIGlubGluZSBhc3NlbWJseSBzdGF0ZW1lbnRzLgorCisgICBTVFJJTkcgaXMgdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBhc3NlbWJseSBzdGF0ZW1lbnRzLgorICAgSTEgLi4uIElOIGFyZSB0aGUgTiBpbnB1dCBvcGVyYW5kcy4KKyAgIE8xIC4uLiBPTSBhcmUgdGhlIE0gb3V0cHV0IG9wZXJhbmRzLgorICAgQzEgLi4uIENQIGFyZSB0aGUgUCBjbG9iYmVyIG9wZXJhbmRzLgorICAgTDEgLi4uIExRIGFyZSB0aGUgUSBsYWJlbCBvcGVyYW5kcy4gICovCitERUZHU0NPREUoR0lNUExFX0FTTSwgImdpbXBsZV9hc20iLCBHU1NfQVNNKQorCisvKiBHSU1QTEVfQ0FMTCA8Rk4sIExIUywgQVJHMSwgLi4uLCBBUkdOWywgQ0hBSU5dPiByZXByZXNlbnRzIGZ1bmN0aW9uCisgICBjYWxscy4KKworICAgRk4gaXMgdGhlIGNhbGxlZS4gIEl0IG11c3QgYmUgYWNjZXB0ZWQgYnkgaXNfZ2ltcGxlX2NhbGxfYWRkci4KKworICAgTEhTIGlzIHRoZSBvcGVyYW5kIHdoZXJlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBGTiBpcyBzdG9yZWQuICBJdCBtYXkKKyAgIGJlIE5VTEwuCisKKyAgIEFSRzEgLi4uIEFSR04gYXJlIHRoZSBhcmd1bWVudHMuICBUaGV5IG11c3QgYWxsIGJlIGFjY2VwdGVkIGJ5CisgICBpc19naW1wbGVfb3BlcmFuZC4KKworICAgIENIQUlOIGlzIHRoZSBvcHRpb25hbCBzdGF0aWMgY2hhaW4gbGluayBmb3IgbmVzdGVkIGZ1bmN0aW9ucy4gICovCitERUZHU0NPREUoR0lNUExFX0NBTEwsICJnaW1wbGVfY2FsbCIsIEdTU19DQUxMKQorCisvKiBHSU1QTEVfVFJBTlNBQ1RJT04gPEJPRFksIExBQkVMPiByZXByZXNlbnRzIF9fdHJhbnNhY3Rpb25fYXRvbWljIGFuZAorICAgX190cmFuc2FjdGlvbl9yZWxheGVkIGJsb2Nrcy4KKyAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgaW5zaWRlIHRoZSB0cmFuc2FjdGlvbi4KKyAgIExBQkVMIGlzIGEgbGFiZWwgZm9yIHRoZSBzdGF0ZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQorICAgdHJhbnNhY3Rpb24uICBUaGlzIGlzIGJlZm9yZSBSRVRVUk4gc28gdGhhdCBpdCBoYXMgTUVNX09QUywKKyAgIHNvIHRoYXQgaXQgY2FuIGNsb2JiZXIgZ2xvYmFsIG1lbW9yeS4gICovCitERUZHU0NPREUoR0lNUExFX1RSQU5TQUNUSU9OLCAiZ2ltcGxlX3RyYW5zYWN0aW9uIiwgR1NTX1RSQU5TQUNUSU9OKQorCisvKiBHSU1QTEVfUkVUVVJOIDxSRVRWQUw+IHJlcHJlc2VudHMgcmV0dXJuIHN0YXRlbWVudHMuCisKKyAgIFJFVFZBTCBpcyB0aGUgdmFsdWUgdG8gcmV0dXJuIG9yIE5VTEwuICBJZiBhIHZhbHVlIGlzIHJldHVybmVkIGl0CisgICBtdXN0IGJlIGFjY2VwdGVkIGJ5IGlzX2dpbXBsZV9vcGVyYW5kLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfUkVUVVJOLCAiZ2ltcGxlX3JldHVybiIsIEdTU19XSVRIX01FTV9PUFMpCisKKy8qIEdJTVBMRV9CSU5EIDxWQVJTLCBCTE9DSywgQk9EWT4gcmVwcmVzZW50cyBhIGxleGljYWwgc2NvcGUuCisgICBWQVJTIGlzIHRoZSBzZXQgb2YgdmFyaWFibGVzIGRlY2xhcmVkIGluIHRoYXQgc2NvcGUuCisgICBCTE9DSyBpcyB0aGUgc3ltYm9sIGJpbmRpbmcgYmxvY2sgdXNlZCBmb3IgZGVidWcgaW5mb3JtYXRpb24uCisgICBCT0RZIGlzIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIGluIHRoZSBzY29wZS4gICovCitERUZHU0NPREUoR0lNUExFX0JJTkQsICJnaW1wbGVfYmluZCIsIEdTU19CSU5EKQorCisvKiBHSU1QTEVfQ0FUQ0ggPFRZUEVTLCBIQU5ETEVSPiByZXByZXNlbnRzIGEgdHlwZWQgZXhjZXB0aW9uIGhhbmRsZXIuCisgICBUWVBFUyBpcyB0aGUgdHlwZSAob3IgbGlzdCBvZiB0eXBlcykgaGFuZGxlZC4gIEhBTkRMRVIgaXMgdGhlCisgICBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRoYXQgaGFuZGxlIHRoZXNlIHR5cGVzLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfQ0FUQ0gsICJnaW1wbGVfY2F0Y2giLCBHU1NfQ0FUQ0gpCisKKy8qIEdJTVBMRV9FSF9GSUxURVIgPFRZUEVTLCBGQUlMVVJFPiByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbgorICAgc3BlY2lmaWNhdGlvbi4gIFRZUEVTIGlzIGEgbGlzdCBvZiBhbGxvd2VkIHR5cGVzIGFuZCBGQUlMVVJFIGlzIHRoZQorICAgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byBleGVjdXRlIG9uIGZhaWx1cmUuICAqLworREVGR1NDT0RFKEdJTVBMRV9FSF9GSUxURVIsICJnaW1wbGVfZWhfZmlsdGVyIiwgR1NTX0VIX0ZJTFRFUikKKworLyogR0lNUExFX0VIX01VU1RfTk9UX1RIUk9XIDxERUNMPiByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbiBiYXJyaWVyLgorICAgREVDTCBpcyBhIG5vcmV0dXJuIGZ1bmN0aW9uIGRlY2wgdGFraW5nIG5vIGFyZ3VtZW50cyB0aGF0IHdpbGwKKyAgIGJlIGludm9rZWQgaWYgYW4gZXhjZXB0aW9uIHByb3BhZ2F0ZXMgdG8gdGhpcyBwb2ludC4gICovCitERUZHU0NPREUoR0lNUExFX0VIX01VU1RfTk9UX1RIUk9XLCAiZ2ltcGxlX2VoX211c3Rfbm90X3Rocm93IiwgR1NTX0VIX01OVCkKKworLyogR0lNUExFX0VIX0VMU0UgPE5fQk9EWSwgRV9CT0RZPiBtdXN0IGJlIHRoZSBzb2xlIGNvbnRlbnRzIG9mCisgICBhIEdJTVBMRV9UUllfRklOQUxMWSBub2RlLiAgRm9yIGFsbCBub3JtYWwgZXhpdHMgZnJvbSB0aGUgdHJ5IGJsb2NrLAorICAgTl9CT0RZIGlzIHJ1bjsgZm9yIGFsbCBleGNlcHRpb24gZXhpdHMgZnJvbSB0aGUgdHJ5IGJsb2NrLAorICAgRV9CT0RZIGlzIHJ1bi4gICovCitERUZHU0NPREUoR0lNUExFX0VIX0VMU0UsICJnaW1wbGVfZWhfZWxzZSIsIEdTU19FSF9FTFNFKQorCisvKiBHSU1QTEVfUkVTWCByZXN1bWVzIGV4ZWN1dGlvbiBhZnRlciBhbiBleGNlcHRpb24uICAqLworREVGR1NDT0RFKEdJTVBMRV9SRVNYLCAiZ2ltcGxlX3Jlc3giLCBHU1NfRUhfQ1RSTCkKKworLyogR0lNUExFX0VIX0RJU1BBVENIIGRlbXVsdGlwbGV4ZXMgYW4gZXhjZXB0aW9uIGVkZ2UgYmFzZWQgb24KKyAgIHRoZSBGSUxURVIgYXJndW1lbnQuICAqLworREVGR1NDT0RFKEdJTVBMRV9FSF9ESVNQQVRDSCwgImdpbXBsZV9laF9kaXNwYXRjaCIsIEdTU19FSF9DVFJMKQorCisvKiBHSU1QTEVfUEhJIDxSRVNVTFQsIEFSRzEsIC4uLiwgQVJHTj4gcmVwcmVzZW50cyB0aGUgUEhJIG5vZGUKKworICAgUkVTVUxUID0gUEhJIDxBUkcxLCAuLi4sIEFSR04+CisKKyAgIFJFU1VMVCBpcyB0aGUgU1NBIG5hbWUgY3JlYXRlZCBieSB0aGlzIFBISSBub2RlLgorCisgICBBUkcxIC4uLiBBUkdOIGFyZSB0aGUgYXJndW1lbnRzIHRvIHRoZSBQSEkgbm9kZS4gIE4gbXVzdCBiZQorICAgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGluY29taW5nIGVkZ2VzIHRvIHRoZSBiYXNpYyBibG9jaworICAgaG9sZGluZyB0aGUgUEhJIG5vZGUuICBFdmVyeSBhcmd1bWVudCBpcyBlaXRoZXIgYW4gU1NBIG5hbWUgb3IgYQorICAgdHJlZSBub2RlIG9mIGNsYXNzIHRjY19jb25zdGFudC4gICovCitERUZHU0NPREUoR0lNUExFX1BISSwgImdpbXBsZV9waGkiLCBHU1NfUEhJKQorCisvKiBHSU1QTEVfVFJZIDxUUllfS0lORCwgRVZBTCwgQ0xFQU5VUD4KKyAgIHJlcHJlc2VudHMgYSB0cnkvY2F0Y2ggb3IgYSB0cnkvZmluYWxseSBzdGF0ZW1lbnQuCisKKyAgIFRSWV9LSU5EIGlzIGVpdGhlciBHSU1QTEVfVFJZX0NBVENIIG9yIEdJTVBMRV9UUllfRklOQUxMWS4KKworICAgRVZBTCBpcyB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byBleGVjdXRlIG9uIGVudHJ5IHRvIEdJTVBMRV9UUlkuCisKKyAgIENMRUFOVVAgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gZXhlY3V0ZSBhY2NvcmRpbmcgdG8KKyAgIFRSWV9LSU5ELiAgSWYgVFJZX0tJTkQgaXMgR0lNUExFX1RSWV9DQVRDSCwgQ0xFQU5VUCBpcyBvbmx5IGV4ZWN0ZWQKKyAgIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZHVyaW5nIGV4ZWN1dGlvbiBvZiBFVkFMLiAgSWYgVFJZX0tJTkQgaXMKKyAgIEdJTVBMRV9UUllfRklOQUxMWSwgQ0xFQU5VUCBpcyBhbHdheXMgZXhlY3V0ZWQgYWZ0ZXIgZXhlY3V0aW5nIEVWQUwKKyAgIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgRVZBTCBmaW5pc2hlZCBub3JtYWxseSwgb3IganVtcGVkIG91dCBvciBhbgorICAgZXhjZXB0aW9uIHdhcyB0aHJvd24pLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfVFJZLCAiZ2ltcGxlX3RyeSIsIEdTU19UUlkpCisKKy8qIEdJTVBMRV9OT1AgcmVwcmVzZW50cyB0aGUgImRvIG5vdGhpbmciIHN0YXRlbWVudC4gICovCitERUZHU0NPREUoR0lNUExFX05PUCwgImdpbXBsZV9ub3AiLCBHU1NfQkFTRSkKKworCisvKiBJTVBPUlRBTlQuCisKKyAgIERvIG5vdCByZWFycmFuZ2UgYW55IG9mIHRoZSBHSU1QTEVfT01QXyogY29kZXMuICBUaGlzIG9yZGVyaW5nIGlzCisgICBleHBvc2VkIGJ5IHRoZSByYW5nZSBjaGVjayBpbiBnaW1wbGVfb21wX3N1YmNvZGUoKS4gICovCisKKworLyogVHVwbGVzIHVzZWQgZm9yIGxvd2VyaW5nIG9mIE9NUF9BVE9NSUMuICBBbHRob3VnaCB0aGUgZm9ybSBvZiB0aGUgT01QX0FUT01JQworICAgZXhwcmVzc2lvbiBpcyB2ZXJ5IHNpbXBsZSAoanVzdCBpbiBmb3JtIG1lbSBvcD0gZXhwciksIHZhcmlvdXMgaW1wbGljaXQKKyAgIGNvbnZlcnNpb25zIG1heSBjYXVzZSB0aGUgZXhwcmVzc2lvbiB0byBiZWNvbWUgbW9yZSBjb21wbGV4LCBzbyB0aGF0IGl0IGRvZXMKKyAgIG5vdCBmaXQgdGhlIGdpbXBsZSBncmFtbWFyIHZlcnkgd2VsbC4gIFRvIG92ZXJjb21lIHRoaXMgcHJvYmxlbSwgT01QX0FUT01JQworICAgaXMgcmV3cml0dGVuIGFzIGEgc2VxdWVuY2Ugb2YgdHdvIGNvZGVzIGluIGdpbXBsaWZpY2F0aW9uOgorCisgICBHSU1QTEVfT01QX0xPQUQgKHRtcCwgbWVtKQorICAgdmFsID0gc29tZSBjb21wdXRhdGlvbnMgaW52b2x2aW5nIHRtcDsKKyAgIEdJTVBMRV9PTVBfU1RPUkUgKHZhbCkuICAqLworREVGR1NDT0RFKEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQsICJnaW1wbGVfb21wX2F0b21pY19sb2FkIiwKKwkgIEdTU19PTVBfQVRPTUlDX0xPQUQpCitERUZHU0NPREUoR0lNUExFX09NUF9BVE9NSUNfU1RPUkUsICJnaW1wbGVfb21wX2F0b21pY19zdG9yZSIsCisJICBHU1NfT01QX0FUT01JQ19TVE9SRSkKKworLyogR0lNUExFX09NUF9DT05USU5VRSBtYXJrcyB0aGUgbG9jYXRpb24gb2YgdGhlIGxvb3Agb3Igc2VjdGlvbnMKKyAgIGl0ZXJhdGlvbiBpbiBwYXJ0aWFsbHkgbG93ZXJlZCBPcGVuTVAgY29kZS4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9DT05USU5VRSwgImdpbXBsZV9vbXBfY29udGludWUiLCBHU1NfT01QX0NPTlRJTlVFKQorCisvKiBHSU1QTEVfT01QX0NSSVRJQ0FMIDxOQU1FLCBCT0RZPiByZXByZXNlbnRzCisKKyAgICNwcmFnbWEgb21wIGNyaXRpY2FsIFtuYW1lXQorCisgICBOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSBjcml0aWNhbCBzZWN0aW9uLgorICAgQk9EWSBpcyB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0aGF0IGFyZSBpbnNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24uICAqLworREVGR1NDT0RFKEdJTVBMRV9PTVBfQ1JJVElDQUwsICJnaW1wbGVfb21wX2NyaXRpY2FsIiwgR1NTX09NUF9DUklUSUNBTCkKKworLyogR0lNUExFX09NUF9GT1IgPEJPRFksIENMQVVTRVMsIElOREVYLCBJTklUSUFMLCBGSU5BTCwgQ09ORCwgSU5DUiwgUFJFX0JPRFk+CisgICByZXByZXNlbnRzCisKKyAgIFBSRV9CT0RZCisgICAjcHJhZ21hIG9tcCBmb3IgW2NsYXVzZTEgLi4uIGNsYXVzZU5dCisgICBmb3IgKElOREVYID0gSU5JVElBTDsgSU5ERVggQ09ORCBGSU5BTDsgSU5ERVggeys9LC09fSBJTkNSKQorICAgQk9EWQorCisgICBCT0RZIGlzIHRoZSBsb29wIGJvZHkuCisKKyAgIENMQVVTRVMgaXMgdGhlIGxpc3Qgb2YgY2xhdXNlcy4KKworICAgSU5ERVggbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIHBvaW50ZXIgdmFyaWFibGUsIHdoaWNoIGlzIGltcGxpY2l0bHkgdGhyZWFkCisgICBwcml2YXRlLiAgSXQgbXVzdCBiZSBhY2NlcHRlZCBieSBpc19naW1wbGVfb3BlcmFuZC4KKworICAgSU5JVElBTCBpcyB0aGUgaW5pdGlhbCB2YWx1ZSBnaXZlbiB0byBJTkRFWC4gSXQgbXVzdCBiZQorICAgYWNjZXB0ZWQgYnkgaXNfZ2ltcGxlX29wZXJhbmQuCisKKyAgIEZJTkFMIGlzIHRoZSBmaW5hbCB2YWx1ZSB0aGF0IElOREVYIHNob3VsZCB0YWtlLiBJdCBtdXN0CisgICBiZSBhY2NlcHRlZCBieSBpc19naW1wbGVfb3BlcmFuZC4KKworICAgQ09ORCBpcyB0aGUgY29uZGl0aW9uIGNvZGUgZm9yIHRoZSBjb250cm9sbGluZyBwcmVkaWNhdGUuICBJdCBtdXN0CisgICBiZSBvbmUgb2YgeyA8LCA+LCA8PSwgPj0gfQorCisgICBJTkNSIGlzIHRoZSBsb29wIGluZGV4IGluY3JlbWVudC4gIEl0IG11c3QgYmUgdHJlZSBub2RlIG9mIHR5cGUKKyAgIHRjY19jb25zdGFudC4KKworICAgUFJFX0JPRFkgaXMgYSBsYW5kaW5nIHBhZCBmaWxsZWQgYnkgdGhlIGdpbXBsaWZpZXIgd2l0aCB0aGluZ3MgZnJvbQorICAgSU5JVCwgQ09ORCwgYW5kIElOQ1IgdGhhdCBhcmUgdGVjaG5pY2FsbHkgcGFydCBvZiB0aGUgT01QX0ZPUgorICAgc3RydWN0dXJlZCBibG9jaywgYnV0IGFyZSBldmFsdWF0ZWQgYmVmb3JlIHRoZSBsb29wIGJvZHkgYmVnaW5zLgorCisgICBJTklUSUFMLCBGSU5BTCBhbmQgSU5DUiBhcmUgcmVxdWlyZWQgdG8gYmUgbG9vcCBpbnZhcmlhbnQgaW50ZWdlcgorICAgZXhwcmVzc2lvbnMgdGhhdCBhcmUgZXZhbHVhdGVkIHdpdGhvdXQgYW55IHN5bmNocm9uaXphdGlvbi4KKyAgIFRoZSBldmFsdWF0aW9uIG9yZGVyLCBmcmVxdWVuY3kgb2YgZXZhbHVhdGlvbiBhbmQgc2lkZS1lZmZlY3RzIGFyZQorICAgdW5zcGVjaWZpZWQgYnkgdGhlIHN0YW5kYXJkLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX0ZPUiwgImdpbXBsZV9vbXBfZm9yIiwgR1NTX09NUF9GT1IpCisKKy8qIEdJTVBMRV9PTVBfTUFTVEVSIDxCT0RZPiByZXByZXNlbnRzICNwcmFnbWEgb21wIG1hc3Rlci4KKyAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gZXhlY3V0ZSBpbiB0aGUgbWFzdGVyIHNlY3Rpb24uICAqLworREVGR1NDT0RFKEdJTVBMRV9PTVBfTUFTVEVSLCAiZ2ltcGxlX29tcF9tYXN0ZXIiLCBHU1NfT01QKQorCisvKiBHSU1QTEVfT01QX09SREVSRUQgPEJPRFk+IHJlcHJlc2VudHMgI3ByYWdtYSBvbXAgb3JkZXJlZC4KKyAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gZXhlY3V0ZSBpbiB0aGUgb3JkZXJlZCBzZWN0aW9uLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX09SREVSRUQsICJnaW1wbGVfb21wX29yZGVyZWQiLCBHU1NfT01QKQorCisvKiBHSU1QTEVfT01QX1BBUkFMTEVMIDxCT0RZLCBDTEFVU0VTLCBDSElMRF9GTiwgREFUQV9BUkc+IHJlcHJlc2VudHMKKworICAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgW0NMQVVTRVNdCisgICBCT0RZCisKKyAgIEJPRFkgaXMgYSB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byBiZSBleGVjdXRlZCBieSBhbGwgdGhyZWFkcy4KKworICAgQ0xBVVNFUyBpcyBhIFRSRUVfTElTVCBub2RlIHdpdGggYWxsIHRoZSBjbGF1c2VzLgorCisgICBDSElMRF9GTiBpcyBzZXQgd2hlbiBvdXRsaW5pbmcgdGhlIGJvZHkgb2YgdGhlIHBhcmFsbGVsIHJlZ2lvbi4KKyAgIEFsbCB0aGUgc3RhdGVtZW50cyBpbiBCT0RZIGFyZSBtb3ZlZCBpbnRvIHRoaXMgbmV3bHkgY3JlYXRlZAorICAgZnVuY3Rpb24gd2hlbiBjb252ZXJ0aW5nIE9NUCBjb25zdHJ1Y3RzIGludG8gbG93LUdJTVBMRS4KKworICAgREFUQV9BUkcgaXMgYSBsb2NhbCB2YXJpYWJsZSBpbiB0aGUgcGFyZW50IGZ1bmN0aW9uIGNvbnRhaW5pbmcgZGF0YQorICAgdG8gYmUgc2hhcmVkIHdpdGggQ0hJTERfRk4uICBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IGFsbCB0aGUgZGF0YQorICAgc2hhcmluZyBjbGF1c2VzLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX1BBUkFMTEVMLCAiZ2ltcGxlX29tcF9wYXJhbGxlbCIsIEdTU19PTVBfUEFSQUxMRUwpCisKKy8qIEdJTVBMRV9PTVBfVEFTSyA8Qk9EWSwgQ0xBVVNFUywgQ0hJTERfRk4sIERBVEFfQVJHLCBDT1BZX0ZOLAorCQkgICAgQVJHX1NJWkUsIEFSR19BTElHTj4gcmVwcmVzZW50cworCisgICAjcHJhZ21hIG9tcCB0YXNrIFtDTEFVU0VTXQorICAgQk9EWQorCisgICBCT0RZIGlzIGEgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gYmUgZXhlY3V0ZWQgYnkgYWxsIHRocmVhZHMuCisKKyAgIENMQVVTRVMgaXMgYSBUUkVFX0xJU1Qgbm9kZSB3aXRoIGFsbCB0aGUgY2xhdXNlcy4KKworICAgQ0hJTERfRk4gaXMgc2V0IHdoZW4gb3V0bGluaW5nIHRoZSBib2R5IG9mIHRoZSBleHBsaWNpdCB0YXNrIHJlZ2lvbi4KKyAgIEFsbCB0aGUgc3RhdGVtZW50cyBpbiBCT0RZIGFyZSBtb3ZlZCBpbnRvIHRoaXMgbmV3bHkgY3JlYXRlZAorICAgZnVuY3Rpb24gd2hlbiBjb252ZXJ0aW5nIE9NUCBjb25zdHJ1Y3RzIGludG8gbG93LUdJTVBMRS4KKworICAgREFUQV9BUkcgaXMgYSBsb2NhbCB2YXJpYWJsZSBpbiB0aGUgcGFyZW50IGZ1bmN0aW9uIGNvbnRhaW5pbmcgZGF0YQorICAgdG8gYmUgc2hhcmVkIHdpdGggQ0hJTERfRk4uICBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IGFsbCB0aGUgZGF0YQorICAgc2hhcmluZyBjbGF1c2VzLgorCisgICBDT1BZX0ZOIGlzIHNldCB3aGVuIG91dGxpbmluZyB0aGUgZmlyc3Rwcml2YXRlIHZhciBpbml0aWFsaXphdGlvbi4KKyAgIEFsbCB0aGUgbmVlZGVkIHN0YXRlbWVudHMgYXJlIGVtaXR0ZWQgaW50byB0aGUgbmV3bHkgY3JlYXRlZAorICAgZnVuY3Rpb24sIG9yIHdoZW4gb25seSBtZW1jcHkgaXMgbmVlZGVkLCBpdCBpcyBOVUxMLgorCisgICBBUkdfU0laRSBhbmQgQVJHX0FMSUdOIGFyZSB0aGUgc2l6ZSBhbmQgYWxpZ25tZW50IG9mIHRoZSBpbmNvbWluZworICAgZGF0YSBhcmVhIGFsbG9jYXRlZCBieSBHT01QX3Rhc2sgYW5kIHBhc3NlZCB0byBDSElMRF9GTi4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9UQVNLLCAiZ2ltcGxlX29tcF90YXNrIiwgR1NTX09NUF9UQVNLKQorCisvKiBPTVBfUkVUVVJOIG1hcmtzIHRoZSBlbmQgb2YgYW4gT3Blbk1QIGRpcmVjdGl2ZS4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9SRVRVUk4sICJnaW1wbGVfb21wX3JldHVybiIsIEdTU19CQVNFKQorCisvKiBPTVBfU0VDVElPTiA8Qk9EWT4gcmVwcmVzZW50cyAjcHJhZ21hIG9tcCBzZWN0aW9uLgorICAgQk9EWSBpcyB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyBpbiB0aGUgc2VjdGlvbiBib2R5LiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX1NFQ1RJT04sICJnaW1wbGVfb21wX3NlY3Rpb24iLCBHU1NfT01QKQorCisvKiBPTVBfU0VDVElPTlMgPEJPRFksIENMQVVTRVMsIENPTlRST0w+IHJlcHJlc2VudHMgI3ByYWdtYSBvbXAgc2VjdGlvbnMuCisKKyAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgaW4gdGhlIHNlY3Rpb25zIGJvZHkuCisgICBDTEFVU0VTIGlzIGEgVFJFRV9MSVNUIG5vZGUgaG9sZGluZyB0aGUgbGlzdCBvZiBhc3NvY2lhdGVkIGNsYXVzZXMuCisgICBDT05UUk9MIGlzIGEgVkFSX0RFQ0wgdXNlZCBmb3IgZGVjaWRpbmcgd2hpY2ggb2YgdGhlIHNlY3Rpb25zCisgICB0byBleGVjdXRlLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX1NFQ1RJT05TLCAiZ2ltcGxlX29tcF9zZWN0aW9ucyIsIEdTU19PTVBfU0VDVElPTlMpCisKKy8qIEdJTVBMRV9PTVBfU0VDVElPTlNfU1dJVENIIGlzIGEgbWFya2VyIHBsYWNlZCBpbW1lZGlhdGVseSBhZnRlcgorICAgT01QX1NFQ1RJT05TLiAgSXQgcmVwcmVzZW50cyB0aGUgR0lNUExFX1NXSVRDSCB1c2VkIHRvIGRlY2lkZSB3aGljaAorICAgYnJhbmNoIGlzIHRha2VuLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfT01QX1NFQ1RJT05TX1NXSVRDSCwgImdpbXBsZV9vbXBfc2VjdGlvbnNfc3dpdGNoIiwgR1NTX0JBU0UpCisKKy8qIEdJTVBMRV9PTVBfU0lOR0xFIDxCT0RZLCBDTEFVU0VTPiByZXByZXNlbnRzICNwcmFnbWEgb21wIHNpbmdsZQorICAgQk9EWSBpcyB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyBpbnNpZGUgdGhlIHNpbmdsZSBzZWN0aW9uLgorICAgQ0xBVVNFUyBpcyBhIFRSRUVfTElTVCBub2RlIGhvbGRpbmcgdGhlIGFzc29jaWF0ZWQgY2xhdXNlcy4gICovCitERUZHU0NPREUoR0lNUExFX09NUF9TSU5HTEUsICJnaW1wbGVfb21wX3NpbmdsZSIsIEdTU19PTVBfU0lOR0xFKQorCisvKiBHSU1QTEVfUFJFRElDVCA8UFJFRElDVCwgT1VUQ09NRT4gc3BlY2lmaWVzIGEgaGludCBmb3IgYnJhbmNoIHByZWRpY3Rpb24uCisKKyAgIFBSRURJQ1QgaXMgb25lIG9mIHRoZSBwcmVkaWN0b3JzIGZyb20gcHJlZGljdC5kZWYuCisKKyAgIE9VVENPTUUgaXMgTk9UX1RBS0VOIG9yIFRBS0VOLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfUFJFRElDVCwgImdpbXBsZV9wcmVkaWN0IiwgR1NTX0JBU0UpCisKKy8qICBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIGNsZWFudXAgZXhwcmVzc2lvbi4gIEl0IGlzIE9OTFkgVVNFRCBJTlRFUk5BTExZCisgICAgYnkgdGhlIGdpbXBsaWZpZXIgYXMgYSBwbGFjZWhvbGRlciBmb3IgY2xlYW51cHMsIGFuZCBpdHMgdXNlcyB3aWxsIGJlCisgICAgY2xlYW5lZCB1cCBieSB0aGUgdGltZSBnaW1wbGlmaWNhdGlvbiBpcyBkb25lLgorCisgICAgVGhpcyB0dXBsZSBzaG91bGQgbm90IGV4aXN0IG91dHNpZGUgb2YgdGhlIGdpbXBsaWZpZXIgcHJvcGVyLiAgKi8KK0RFRkdTQ09ERShHSU1QTEVfV0lUSF9DTEVBTlVQX0VYUFIsICJnaW1wbGVfd2l0aF9jbGVhbnVwX2V4cHIiLCBHU1NfV0NFKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2dpbXBsZS5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2dpbXBsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjUxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ2ltcGxlLmgKQEAgLTAsMCArMSw1MzQ1IEBACisvKiBHaW1wbGUgSVIgZGVmaW5pdGlvbnMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQWxkeSBIZXJuYW5kZXogPGFsZHloQHJlZGhhdC5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19HSU1QTEVfSAorI2RlZmluZSBHQ0NfR0lNUExFX0gKKworI2luY2x1ZGUgInBvaW50ZXItc2V0LmgiCisjaW5jbHVkZSAidmVjLmgiCisjaW5jbHVkZSAiZ2djLmgiCisjaW5jbHVkZSAiYmFzaWMtYmxvY2suaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS1zc2Etb3BlcmFuZHMuaCIKKyNpbmNsdWRlICJ0cmVlLXNzYS1hbGlhcy5oIgorI2luY2x1ZGUgImludGVybmFsLWZuLmgiCisKK3R5cGVkZWYgZ2ltcGxlIGdpbXBsZV9zZXFfbm9kZTsKKworLyogRm9yIGVhY2ggYmxvY2ssIHRoZSBQSEkgbm9kZXMgdGhhdCBuZWVkIHRvIGJlIHJld3JpdHRlbiBhcmUgc3RvcmVkIGludG8KKyAgIHRoZXNlIHZlY3RvcnMuICAqLwordHlwZWRlZiB2ZWM8Z2ltcGxlPiBnaW1wbGVfdmVjOworCitlbnVtIGdpbXBsZV9jb2RlIHsKKyNkZWZpbmUgREVGR1NDT0RFKFNZTSwgU1RSSU5HLCBTVFJVQ1QpCVNZTSwKKyNpbmNsdWRlICJnaW1wbGUuZGVmIgorI3VuZGVmIERFRkdTQ09ERQorICAgIExBU1RfQU5EX1VOVVNFRF9HSU1QTEVfQ09ERQorfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGdpbXBsZV9jb2RlX25hbWVbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdpbXBsZV9yaHNfY2xhc3NfdGFibGVbXTsKKworLyogRXJyb3Igb3V0IGlmIGEgZ2ltcGxlIHR1cGxlIGlzIGFkZHJlc3NlZCBpbmNvcnJlY3RseS4gICovCisjaWYgZGVmaW5lZCBFTkFCTEVfR0lNUExFX0NIRUNLSU5HCisjZGVmaW5lIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0KEVYUFIpIGdjY19hc3NlcnQgKEVYUFIpCitleHRlcm4gdm9pZCBnaW1wbGVfY2hlY2tfZmFpbGVkIChjb25zdF9naW1wbGUsIGNvbnN0IGNoYXIgKiwgaW50LCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGVudW0gZ2ltcGxlX2NvZGUsICAgICAgICAgICBcCisJCQkJIGVudW0gdHJlZV9jb2RlKSBBVFRSSUJVVEVfTk9SRVRVUk47CisKKyNkZWZpbmUgR0lNUExFX0NIRUNLKEdTLCBDT0RFKQkJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBjb25zdF9naW1wbGUgX19ncyA9IChHUyk7CQkJCQkJXAorICAgIGlmIChnaW1wbGVfY29kZSAoX19ncykgIT0gKENPREUpKQkJCQkJXAorICAgICAgZ2ltcGxlX2NoZWNrX2ZhaWxlZCAoX19ncywgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sCVwKKwkgIAkJICAgKENPREUpLCBFUlJPUl9NQVJLKTsJCQkJXAorICB9IHdoaWxlICgwKQorI2Vsc2UgIC8qIG5vdCBFTkFCTEVfR0lNUExFX0NIRUNLSU5HICAqLworI2RlZmluZSBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydChFWFBSKSAoKHZvaWQpKDAgJiYgKEVYUFIpKSkKKyNkZWZpbmUgR0lNUExFX0NIRUNLKEdTLCBDT0RFKQkJCSh2b2lkKTAKKyNlbmRpZgorCisvKiBDbGFzcyBvZiBHSU1QTEUgZXhwcmVzc2lvbnMgc3VpdGFibGUgZm9yIHRoZSBSSFMgb2YgYXNzaWdubWVudHMuICBTZWUKKyAgIGdldF9naW1wbGVfcmhzX2NsYXNzLiAgKi8KK2VudW0gZ2ltcGxlX3Joc19jbGFzcworeworICBHSU1QTEVfSU5WQUxJRF9SSFMsCS8qIFRoZSBleHByZXNzaW9uIGNhbm5vdCBiZSB1c2VkIG9uIHRoZSBSSFMuICAqLworICBHSU1QTEVfVEVSTkFSWV9SSFMsCS8qIFRoZSBleHByZXNzaW9uIGlzIGEgdGVybmFyeSBvcGVyYXRpb24uICAqLworICBHSU1QTEVfQklOQVJZX1JIUywJLyogVGhlIGV4cHJlc3Npb24gaXMgYSBiaW5hcnkgb3BlcmF0aW9uLiAgKi8KKyAgR0lNUExFX1VOQVJZX1JIUywJLyogVGhlIGV4cHJlc3Npb24gaXMgYSB1bmFyeSBvcGVyYXRpb24uICAqLworICBHSU1QTEVfU0lOR0xFX1JIUwkvKiBUaGUgZXhwcmVzc2lvbiBpcyBhIHNpbmdsZSBvYmplY3QgKGFuIFNTQQorCQkJICAgbmFtZSwgYSBfREVDTCwgYSBfUkVGLCBldGMuICAqLworfTsKKworLyogU3BlY2lmaWMgZmxhZ3MgZm9yIGluZGl2aWR1YWwgR0lNUExFIHN0YXRlbWVudHMuICBUaGVzZSBmbGFncyBhcmUKKyAgIGFsd2F5cyBzdG9yZWQgaW4gZ2ltcGxlX3N0YXRlbWVudF9iYXNlLnN1YmNvZGUgYW5kIHRoZXkgbWF5IG9ubHkgYmUKKyAgIGRlZmluZWQgZm9yIHN0YXRlbWVudCBjb2RlcyB0aGF0IGRvIG5vdCB1c2Ugc3ViLWNvZGVzLgorCisgICBWYWx1ZXMgZm9yIHRoZSBtYXNrcyBjYW4gb3ZlcmxhcCBhcyBsb25nIGFzIHRoZSBvdmVybGFwcGluZyB2YWx1ZXMKKyAgIGFyZSBuZXZlciB1c2VkIGluIHRoZSBzYW1lIHN0YXRlbWVudCBjbGFzcy4KKworICAgVGhlIG1heGltdW0gbWFzayB2YWx1ZSB0aGF0IGNhbiBiZSBkZWZpbmVkIGlzIDEgPDwgMTUgKGkuZS4sIGVhY2gKKyAgIHN0YXRlbWVudCBjb2RlIGNhbiBob2xkIHVwIHRvIDE2IGJpdGZsYWdzKS4KKworICAgS2VlcCB0aGlzIGxpc3Qgc29ydGVkLiAgKi8KK2VudW0gZ2ZfbWFzayB7CisgICAgR0ZfQVNNX0lOUFVUCQk9IDEgPDwgMCwKKyAgICBHRl9BU01fVk9MQVRJTEUJCT0gMSA8PCAxLAorICAgIEdGX0NBTExfRlJPTV9USFVOSwkJPSAxIDw8IDAsCisgICAgR0ZfQ0FMTF9SRVRVUk5fU0xPVF9PUFQJPSAxIDw8IDEsCisgICAgR0ZfQ0FMTF9UQUlMQ0FMTAkJPSAxIDw8IDIsCisgICAgR0ZfQ0FMTF9WQV9BUkdfUEFDSwkJPSAxIDw8IDMsCisgICAgR0ZfQ0FMTF9OT1RIUk9XCQk9IDEgPDwgNCwKKyAgICBHRl9DQUxMX0FMTE9DQV9GT1JfVkFSCT0gMSA8PCA1LAorICAgIEdGX0NBTExfSU5URVJOQUwJCT0gMSA8PCA2LAorICAgIEdGX09NUF9QQVJBTExFTF9DT01CSU5FRAk9IDEgPDwgMCwKKworICAgIC8qIFRydWUgb24gYW4gR0lNUExFX09NUF9SRVRVUk4gc3RhdGVtZW50IGlmIHRoZSByZXR1cm4gZG9lcyBub3QgcmVxdWlyZQorICAgICAgIGEgdGhyZWFkIHN5bmNocm9uaXphdGlvbiB2aWEgc29tZSBzb3J0IG9mIGJhcnJpZXIuICBUaGUgZXhhY3QgYmFycmllcgorICAgICAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGVtaXR0ZWQgaXMgZGVwZW5kZW50IG9uIHRoZSBPTVAgc3RhdGVtZW50IHdpdGgKKyAgICAgICB3aGljaCB0aGlzIHJldHVybiBpcyBhc3NvY2lhdGVkLiAgKi8KKyAgICBHRl9PTVBfUkVUVVJOX05PV0FJVAk9IDEgPDwgMCwKKworICAgIEdGX09NUF9TRUNUSU9OX0xBU1QJCT0gMSA8PCAwLAorICAgIEdGX09NUF9BVE9NSUNfTkVFRF9WQUxVRQk9IDEgPDwgMCwKKyAgICBHRl9QUkVESUNUX1RBS0VOCQk9IDEgPDwgMTUKK307CisKKy8qIEN1cnJlbnRseSwgdGhlcmUgYXJlIG9ubHkgdHdvIHR5cGVzIG9mIGdpbXBsZSBkZWJ1ZyBzdG10LiAgT3RoZXJzIGFyZQorICAgZW52aXNpb25lZCwgZm9yIGV4YW1wbGUsIHRvIGVuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBpc19zdG10IG5vdGVzCisgICBpbiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiwgdG8gbWFyayBzZXF1ZW5jZSBwb2ludHMsIGV0Yy4gIFRoaXMKKyAgIHN1YmNvZGUgaXMgdG8gYmUgdXNlZCB0byB0ZWxsIHRoZW0gYXBhcnQuICAqLworZW51bSBnaW1wbGVfZGVidWdfc3ViY29kZSB7CisgIEdJTVBMRV9ERUJVR19CSU5EID0gMCwKKyAgR0lNUExFX0RFQlVHX1NPVVJDRV9CSU5EID0gMQorfTsKKworLyogTWFza3MgZm9yIHNlbGVjdGluZyBhIHBhc3MgbG9jYWwgZmxhZyAoUExGKSB0byB3b3JrIG9uLiAgVGhlc2UKKyAgIG1hc2tzIGFyZSB1c2VkIGJ5IGdpbXBsZV9zZXRfcGxmIGFuZCBnaW1wbGVfcGxmLiAgKi8KK2VudW0gcGxmX21hc2sgeworICAgIEdGX1BMRl8xCT0gMSA8PCAwLAorICAgIEdGX1BMRl8yCT0gMSA8PCAxCit9OworCisvKiBJdGVyYXRvciBvYmplY3QgZm9yIEdJTVBMRSBzdGF0ZW1lbnQgc2VxdWVuY2VzLiAgKi8KKworc3RydWN0IGdpbXBsZV9zdG10X2l0ZXJhdG9yX2QKK3sKKyAgLyogU2VxdWVuY2Ugbm9kZSBob2xkaW5nIHRoZSBjdXJyZW50IHN0YXRlbWVudC4gICovCisgIGdpbXBsZV9zZXFfbm9kZSBwdHI7CisKKyAgLyogU2VxdWVuY2UgYW5kIGJhc2ljIGJsb2NrIGhvbGRpbmcgdGhlIHN0YXRlbWVudC4gIFRoZXNlIGZpZWxkcworICAgICBhcmUgbmVjZXNzYXJ5IHRvIGhhbmRsZSBlZGdlIGNhc2VzIHN1Y2ggYXMgd2hlbiBzdGF0ZW1lbnQgaXMKKyAgICAgYWRkZWQgdG8gYW4gZW1wdHkgYmFzaWMgYmxvY2sgb3Igd2hlbiB0aGUgbGFzdCBzdGF0ZW1lbnQgb2YgYQorICAgICBibG9jay9zZXF1ZW5jZSBpcyByZW1vdmVkLiAgKi8KKyAgZ2ltcGxlX3NlcSAqc2VxOworICBiYXNpY19ibG9jayBiYjsKK307CisKKy8qIERhdGEgc3RydWN0dXJlIGRlZmluaXRpb25zIGZvciBHSU1QTEUgdHVwbGVzLiAgTk9URTogd29yZCBtYXJrZXJzCisgICBhcmUgZm9yIDY0IGJpdCBob3N0cy4gICovCisKK3N0cnVjdCBHVFkoKGNoYWluX25leHQgKCIlaC5uZXh0IikpKSBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgeworICAvKiBbIFdPUkQgMSBdCisgICAgIE1haW4gaWRlbnRpZnlpbmcgY29kZSBmb3IgYSB0dXBsZS4gICovCisgIEVOVU1fQklURklFTEQoZ2ltcGxlX2NvZGUpIGNvZGUgOiA4OworCisgIC8qIE5vbnplcm8gaWYgYSB3YXJuaW5nIHNob3VsZCBub3QgYmUgZW1pdHRlZCBvbiB0aGlzIHR1cGxlLiAgKi8KKyAgdW5zaWduZWQgaW50IG5vX3dhcm5pbmcJOiAxOworCisgIC8qIE5vbnplcm8gaWYgdGhpcyB0dXBsZSBoYXMgYmVlbiB2aXNpdGVkLiAgUGFzc2VzIGFyZSByZXNwb25zaWJsZQorICAgICBmb3IgY2xlYXJpbmcgdGhpcyBiaXQgYmVmb3JlIHVzaW5nIGl0LiAgKi8KKyAgdW5zaWduZWQgaW50IHZpc2l0ZWQJCTogMTsKKworICAvKiBOb256ZXJvIGlmIHRoaXMgdHVwbGUgcmVwcmVzZW50cyBhIG5vbi10ZW1wb3JhbCBtb3ZlLiAgKi8KKyAgdW5zaWduZWQgaW50IG5vbnRlbXBvcmFsX21vdmUJOiAxOworCisgIC8qIFBhc3MgbG9jYWwgZmxhZ3MuICBUaGVzZSBmbGFncyBhcmUgZnJlZSBmb3IgYW55IHBhc3MgdG8gdXNlIGFzCisgICAgIHRoZXkgc2VlIGZpdC4gIFBhc3NlcyBzaG91bGQgbm90IGFzc3VtZSB0aGF0IHRoZXNlIGZsYWdzIGNvbnRhaW4KKyAgICAgYW55IHVzZWZ1bCB2YWx1ZSB3aGVuIHRoZSBwYXNzIHN0YXJ0cy4gIEFueSBpbml0aWFsIHN0YXRlIHRoYXQKKyAgICAgdGhlIHBhc3MgcmVxdWlyZXMgc2hvdWxkIGJlIHNldCBvbiBlbnRyeSB0byB0aGUgcGFzcy4gIFNlZQorICAgICBnaW1wbGVfc2V0X3BsZiBhbmQgZ2ltcGxlX3BsZiBmb3IgdXNhZ2UuICAqLworICB1bnNpZ25lZCBpbnQgcGxmCQk6IDI7CisKKyAgLyogTm9uemVybyBpZiB0aGlzIHN0YXRlbWVudCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgbmVlZHMgdG8gaGF2ZSBpdHMKKyAgICAgb3BlcmFuZHMgcmVzY2FubmVkLiAgKi8KKyAgdW5zaWduZWQgbW9kaWZpZWQgCQk6IDE7CisKKyAgLyogTm9uemVybyBpZiB0aGlzIHN0YXRlbWVudCBjb250YWlucyB2b2xhdGlsZSBvcGVyYW5kcy4gICovCisgIHVuc2lnbmVkIGhhc192b2xhdGlsZV9vcHMgCTogMTsKKworICAvKiBUaGUgU1VCQ09ERSBmaWVsZCBjYW4gYmUgdXNlZCBmb3IgdHVwbGUtc3BlY2lmaWMgZmxhZ3MgZm9yIHR1cGxlcworICAgICB0aGF0IGRvIG5vdCByZXF1aXJlIHN1YmNvZGVzLiAgTm90ZSB0aGF0IFNVQkNPREUgc2hvdWxkIGJlIGF0CisgICAgIGxlYXN0IGFzIHdpZGUgYXMgdHJlZSBjb2RlcywgYXMgc2V2ZXJhbCB0dXBsZXMgc3RvcmUgdHJlZSBjb2RlcworICAgICBpbiB0aGVyZS4gICovCisgIHVuc2lnbmVkIGludCBzdWJjb2RlCQk6IDE2OworCisgIC8qIFVJRCBvZiB0aGlzIHN0YXRlbWVudC4gIFRoaXMgaXMgdXNlZCBieSBwYXNzZXMgdGhhdCB3YW50IHRvCisgICAgIGFzc2lnbiBJRHMgdG8gc3RhdGVtZW50cy4gIEl0IG11c3QgYmUgYXNzaWduZWQgYW5kIHVzZWQgYnkgZWFjaAorICAgICBwYXNzLiAgQnkgZGVmYXVsdCBpdCBzaG91bGQgYmUgYXNzdW1lZCB0byBjb250YWluIGdhcmJhZ2UuICAqLworICB1bnNpZ25lZCB1aWQ7CisKKyAgLyogWyBXT1JEIDIgXQorICAgICBMb2N1cyBpbmZvcm1hdGlvbiBmb3IgZGVidWcgaW5mby4gICovCisgIGxvY2F0aW9uX3QgbG9jYXRpb247CisKKyAgLyogTnVtYmVyIG9mIG9wZXJhbmRzIGluIHRoaXMgdHVwbGUuICAqLworICB1bnNpZ25lZCBudW1fb3BzOworCisgIC8qIFsgV09SRCAzIF0KKyAgICAgQmFzaWMgYmxvY2sgaG9sZGluZyB0aGlzIHN0YXRlbWVudC4gICovCisgIGJhc2ljX2Jsb2NrIGJiOworCisgIC8qIFsgV09SRCA0LTUgXQorICAgICBMaW5rZWQgbGlzdHMgb2YgZ2ltcGxlIHN0YXRlbWVudHMuICBUaGUgbmV4dCBwb2ludGVycyBmb3JtCisgICAgIGEgTlVMTCB0ZXJtaW5hdGVkIGxpc3QsIHRoZSBwcmV2IHBvaW50ZXJzIGFyZSBhIGN5Y2xpYyBsaXN0LgorICAgICBBIGdpbXBsZSBzdGF0ZW1lbnQgaXMgaGVuY2UgYWxzbyBhIGRvdWJsZS1lbmRlZCBsaXN0IG9mCisgICAgIHN0YXRlbWVudHMsIHdpdGggdGhlIHBvaW50ZXIgaXRzZWxmIGJlaW5nIHRoZSBmaXJzdCBlbGVtZW50LAorICAgICBhbmQgdGhlIHByZXYgcG9pbnRlciBiZWluZyB0aGUgbGFzdC4gICovCisgIGdpbXBsZSBuZXh0OworICBnaW1wbGUgR1RZKChza2lwKSkgcHJldjsKK307CisKKworLyogQmFzZSBzdHJ1Y3R1cmUgZm9yIHR1cGxlcyB3aXRoIG9wZXJhbmRzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wc19iYXNlCit7CisgIC8qIFsgV09SRCAxLTYgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDcgXQorICAgICBTU0Egb3BlcmFuZCB2ZWN0b3JzLiAgTk9URTogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvCisgICAgIGFtYWxnYW1hdGUgdGhlc2UgdmVjdG9ycyB3aXRoIHRoZSBvcGVyYW5kIHZlY3RvciBPUC4gIEhvd2V2ZXIsCisgICAgIHRoZSBTU0Egb3BlcmFuZCB2ZWN0b3JzIGFyZSBvcmdhbml6ZWQgZGlmZmVyZW50bHkgYW5kIGNvbnRhaW4KKyAgICAgbW9yZSBpbmZvcm1hdGlvbiAobGlrZSBpbW1lZGlhdGUgdXNlIGNoYWluaW5nKS4gICovCisgIHN0cnVjdCB1c2Vfb3B0eXBlX2QgR1RZKChza2lwICgiIikpKSAqdXNlX29wczsKK307CisKKworLyogU3RhdGVtZW50cyB0aGF0IHRha2UgcmVnaXN0ZXIgb3BlcmFuZHMuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X3dpdGhfb3BzCit7CisgIC8qIFsgV09SRCAxLTcgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHNfYmFzZSBvcGJhc2U7CisKKyAgLyogWyBXT1JEIDggXQorICAgICBPcGVyYW5kIHZlY3Rvci4gIE5PVEUhICBUaGlzIG11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IGZpZWxkCisgICAgIG9mIHRoaXMgc3RydWN0dXJlLiAgSW4gcGFydGljdWxhciwgdGhpcyBtZWFucyB0aGF0IHRoaXMKKyAgICAgc3RydWN0dXJlIGNhbm5vdCBiZSBlbWJlZGRlZCBpbnNpZGUgYW5vdGhlciBvbmUuICAqLworICB0cmVlIEdUWSgobGVuZ3RoICgiJWgub3BiYXNlLmdzYmFzZS5udW1fb3BzIikpKSBvcFsxXTsKK307CisKKworLyogQmFzZSBmb3Igc3RhdGVtZW50cyB0aGF0IHRha2UgYm90aCBtZW1vcnkgYW5kIHJlZ2lzdGVyIG9wZXJhbmRzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZQoreworICAvKiBbIFdPUkQgMS03IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfb3BzX2Jhc2Ugb3BiYXNlOworCisgIC8qIFsgV09SRCA4LTkgXQorICAgICBWaXJ0dWFsIG9wZXJhbmRzIGZvciB0aGlzIHN0YXRlbWVudC4gIFRoZSBHQyB3aWxsIHBpY2sgdGhlbQorICAgICB1cCB2aWEgdGhlIHNzYV9uYW1lcyBhcnJheS4gICovCisgIHRyZWUgR1RZKChza2lwICgiIikpKSB2ZGVmOworICB0cmVlIEdUWSgoc2tpcCAoIiIpKSkgdnVzZTsKK307CisKKworLyogU3RhdGVtZW50cyB0aGF0IHRha2UgYm90aCBtZW1vcnkgYW5kIHJlZ2lzdGVyIG9wZXJhbmRzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHMKK3sKKyAgLyogWyBXT1JEIDEtOSBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSBtZW1iYXNlOworCisgIC8qIFsgV09SRCAxMCBdCisgICAgIE9wZXJhbmQgdmVjdG9yLiAgTk9URSEgIFRoaXMgbXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZmllbGQKKyAgICAgb2YgdGhpcyBzdHJ1Y3R1cmUuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIG1lYW5zIHRoYXQgdGhpcworICAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGVtYmVkZGVkIGluc2lkZSBhbm90aGVyIG9uZS4gICovCisgIHRyZWUgR1RZKChsZW5ndGggKCIlaC5tZW1iYXNlLm9wYmFzZS5nc2Jhc2UubnVtX29wcyIpKSkgb3BbMV07Cit9OworCisKKy8qIENhbGwgc3RhdGVtZW50cyB0aGF0IHRha2UgYm90aCBtZW1vcnkgYW5kIHJlZ2lzdGVyIG9wZXJhbmRzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9jYWxsCit7CisgIC8qIFsgV09SRCAxLTkgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UgbWVtYmFzZTsKKworICAvKiBbIFdPUkQgMTAtMTMgXSAgKi8KKyAgc3RydWN0IHB0X3NvbHV0aW9uIGNhbGxfdXNlZDsKKyAgc3RydWN0IHB0X3NvbHV0aW9uIGNhbGxfY2xvYmJlcmVkOworCisgIC8qIFsgV09SRCAxNCBdICAqLworICB1bmlvbiBHVFkgKChkZXNjICgiJTEubWVtYmFzZS5vcGJhc2UuZ3NiYXNlLnN1YmNvZGUgJiBHRl9DQUxMX0lOVEVSTkFMIikpKSB7CisgICAgdHJlZSBHVFkgKCh0YWcgKCIwIikpKSBmbnR5cGU7CisgICAgZW51bSBpbnRlcm5hbF9mbiBHVFkgKCh0YWcgKCJHRl9DQUxMX0lOVEVSTkFMIikpKSBpbnRlcm5hbF9mbjsKKyAgfSB1OworCisgIC8qIFsgV09SRCAxNSBdCisgICAgIE9wZXJhbmQgdmVjdG9yLiAgTk9URSEgIFRoaXMgbXVzdCBhbHdheXMgYmUgdGhlIGxhc3QgZmllbGQKKyAgICAgb2YgdGhpcyBzdHJ1Y3R1cmUuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIG1lYW5zIHRoYXQgdGhpcworICAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGVtYmVkZGVkIGluc2lkZSBhbm90aGVyIG9uZS4gICovCisgIHRyZWUgR1RZKChsZW5ndGggKCIlaC5tZW1iYXNlLm9wYmFzZS5nc2Jhc2UubnVtX29wcyIpKSkgb3BbMV07Cit9OworCisKKy8qIE9wZW5NUCBzdGF0ZW1lbnRzICgjcHJhZ21hIG9tcCkuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X29tcCB7CisgIC8qIFsgV09SRCAxLTYgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDcgXSAgKi8KKyAgZ2ltcGxlX3NlcSBib2R5OworfTsKKworCisvKiBHSU1QTEVfQklORCAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X2JpbmQgeworICAvKiBbIFdPUkQgMS02IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA3IF0KKyAgICAgVmFyaWFibGVzIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuICAqLworICB0cmVlIHZhcnM7CisKKyAgLyogWyBXT1JEIDggXQorICAgICBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBCTE9DSyBmaWVsZCBpbiBnaW1wbGVfc3RhdGVtZW50X2Jhc2UsCisgICAgIHdoaWNoIGlzIGFuYWxvZ291cyB0byBUUkVFX0JMT0NLIChpLmUuLCB0aGUgbGV4aWNhbCBibG9jayBob2xkaW5nCisgICAgIHRoaXMgc3RhdGVtZW50KS4gIFRoaXMgZmllbGQgaXMgdGhlIGVxdWl2YWxlbnQgb2YgQklORF9FWFBSX0JMT0NLCisgICAgIGluIHRyZWUgbGFuZCAoaS5lLiwgdGhlIGxleGljYWwgc2NvcGUgZGVmaW5lZCBieSB0aGlzIGJpbmQpLiAgU2VlCisgICAgIGdpbXBsZS1sb3cuYy4gICovCisgIHRyZWUgYmxvY2s7CisKKyAgLyogWyBXT1JEIDkgXSAgKi8KKyAgZ2ltcGxlX3NlcSBib2R5OworfTsKKworCisvKiBHSU1QTEVfQ0FUQ0ggKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9jYXRjaCB7CisgIC8qIFsgV09SRCAxLTYgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDcgXSAgKi8KKyAgdHJlZSB0eXBlczsKKworICAvKiBbIFdPUkQgOCBdICAqLworICBnaW1wbGVfc2VxIGhhbmRsZXI7Cit9OworCisKKy8qIEdJTVBMRV9FSF9GSUxURVIgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIgeworICAvKiBbIFdPUkQgMS02IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA3IF0KKyAgICAgRmlsdGVyIHR5cGVzLiAgKi8KKyAgdHJlZSB0eXBlczsKKworICAvKiBbIFdPUkQgOCBdCisgICAgIEZhaWx1cmUgYWN0aW9ucy4gICovCisgIGdpbXBsZV9zZXEgZmFpbHVyZTsKK307CisKKy8qIEdJTVBMRV9FSF9FTFNFICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfZWhfZWxzZSB7CisgIC8qIFsgV09SRCAxLTYgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDcsOCBdICovCisgIGdpbXBsZV9zZXEgbl9ib2R5LCBlX2JvZHk7Cit9OworCisvKiBHSU1QTEVfRUhfTVVTVF9OT1RfVEhST1cgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9laF9tbnQgeworICAvKiBbIFdPUkQgMS02IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA3IF0gQWJvcnQgZnVuY3Rpb24gZGVjbC4gICovCisgIHRyZWUgZm5kZWNsOworfTsKKworLyogR0lNUExFX1BISSAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X3BoaSB7CisgIC8qIFsgV09SRCAxLTYgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDcgXSAgKi8KKyAgdW5zaWduZWQgY2FwYWNpdHk7CisgIHVuc2lnbmVkIG5hcmdzOworCisgIC8qIFsgV09SRCA4IF0gICovCisgIHRyZWUgcmVzdWx0OworCisgIC8qIFsgV09SRCA5IF0gICovCisgIHN0cnVjdCBwaGlfYXJnX2QgR1RZICgobGVuZ3RoICgiJWgubmFyZ3MiKSkpIGFyZ3NbMV07Cit9OworCisKKy8qIEdJTVBMRV9SRVNYLCBHSU1QTEVfRUhfRElTUEFUQ0ggKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9laF9jdHJsCit7CisgIC8qIFsgV09SRCAxLTYgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDcgXQorICAgICBFeGNlcHRpb24gcmVnaW9uIG51bWJlci4gICovCisgIGludCByZWdpb247Cit9OworCisKKy8qIEdJTVBMRV9UUlkgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF90cnkgeworICAvKiBbIFdPUkQgMS02IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA3IF0KKyAgICAgRXhwcmVzc2lvbiB0byBldmFsdWF0ZS4gICovCisgIGdpbXBsZV9zZXEgZXZhbDsKKworICAvKiBbIFdPUkQgOCBdCisgICAgIENsZWFudXAgZXhwcmVzc2lvbi4gICovCisgIGdpbXBsZV9zZXEgY2xlYW51cDsKK307CisKKy8qIEtpbmQgb2YgR0lNUExFX1RSWSBzdGF0ZW1lbnRzLiAgKi8KK2VudW0gZ2ltcGxlX3RyeV9mbGFncworeworICAvKiBBIHRyeS9jYXRjaC4gICovCisgIEdJTVBMRV9UUllfQ0FUQ0ggPSAxIDw8IDAsCisKKyAgLyogQSB0cnkvZmluYWxseS4gICovCisgIEdJTVBMRV9UUllfRklOQUxMWSA9IDEgPDwgMSwKKyAgR0lNUExFX1RSWV9LSU5EID0gR0lNUExFX1RSWV9DQVRDSCB8IEdJTVBMRV9UUllfRklOQUxMWSwKKworICAvKiBBbmFsb2dvdXMgdG8gVFJZX0NBVENIX0lTX0NMRUFOVVAuICAqLworICBHSU1QTEVfVFJZX0NBVENIX0lTX0NMRUFOVVAgPSAxIDw8IDIKK307CisKKy8qIEdJTVBMRV9XSVRIX0NMRUFOVVBfRVhQUiAqLworCitzdHJ1Y3QgR1RZKCgpKSBnaW1wbGVfc3RhdGVtZW50X3djZSB7CisgIC8qIFsgV09SRCAxLTYgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogU3ViY29kZTogQ0xFQU5VUF9FSF9PTkxZLiAgVHJ1ZSBpZiB0aGUgY2xlYW51cCBzaG91bGQgb25seSBiZQorCSAgICAgIGV4ZWN1dGVkIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24sIG5vdCBvbiBub3JtYWwgZXhpdCBvZiBpdHMKKwkgICAgICBzY29wZS4gIFRoaXMgZmxhZyBpcyBhbmFsb2dvdXMgdG8gdGhlIENMRUFOVVBfRUhfT05MWSBmbGFnCisJICAgICAgaW4gVEFSR0VUX0VYUFJzLiAgKi8KKworICAvKiBbIFdPUkQgNyBdCisgICAgIENsZWFudXAgZXhwcmVzc2lvbi4gICovCisgIGdpbXBsZV9zZXEgY2xlYW51cDsKK307CisKKworLyogR0lNUExFX0FTTSAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9hc20KK3sKKyAgLyogWyBXT1JEIDEtOSBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSBtZW1iYXNlOworCisgIC8qIFsgV09SRCAxMCBdCisgICAgIF9fYXNtX18gc3RhdGVtZW50LiAgKi8KKyAgY29uc3QgY2hhciAqc3RyaW5nOworCisgIC8qIFsgV09SRCAxMSBdCisgICAgICAgTnVtYmVyIG9mIGlucHV0cywgb3V0cHV0cywgY2xvYmJlcnMsIGxhYmVscy4gICovCisgIHVuc2lnbmVkIGNoYXIgbmk7CisgIHVuc2lnbmVkIGNoYXIgbm87CisgIHVuc2lnbmVkIGNoYXIgbmM7CisgIHVuc2lnbmVkIGNoYXIgbmw7CisKKyAgLyogWyBXT1JEIDEyIF0KKyAgICAgT3BlcmFuZCB2ZWN0b3IuICBOT1RFISAgVGhpcyBtdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCBmaWVsZAorICAgICBvZiB0aGlzIHN0cnVjdHVyZS4gIEluIHBhcnRpY3VsYXIsIHRoaXMgbWVhbnMgdGhhdCB0aGlzCisgICAgIHN0cnVjdHVyZSBjYW5ub3QgYmUgZW1iZWRkZWQgaW5zaWRlIGFub3RoZXIgb25lLiAgKi8KKyAgdHJlZSBHVFkoKGxlbmd0aCAoIiVoLm1lbWJhc2Uub3BiYXNlLmdzYmFzZS5udW1fb3BzIikpKSBvcFsxXTsKK307CisKKy8qIEdJTVBMRV9PTVBfQ1JJVElDQUwgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9vbXBfY3JpdGljYWwgeworICAvKiBbIFdPUkQgMS03IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcCBvbXA7CisKKyAgLyogWyBXT1JEIDggXQorICAgICBDcml0aWNhbCBzZWN0aW9uIG5hbWUuICAqLworICB0cmVlIG5hbWU7Cit9OworCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9vbXBfZm9yX2l0ZXIgeworICAvKiBDb25kaXRpb24gY29kZS4gICovCisgIGVudW0gdHJlZV9jb2RlIGNvbmQ7CisKKyAgLyogSW5kZXggdmFyaWFibGUuICAqLworICB0cmVlIGluZGV4OworCisgIC8qIEluaXRpYWwgdmFsdWUuICAqLworICB0cmVlIGluaXRpYWw7CisKKyAgLyogRmluYWwgdmFsdWUuICAqLworICB0cmVlIGZpbmFsOworCisgIC8qIEluY3JlbWVudC4gICovCisgIHRyZWUgaW5jcjsKK307CisKKy8qIEdJTVBMRV9PTVBfRk9SICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfb21wX2ZvciB7CisgIC8qIFsgV09SRCAxLTcgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wIG9tcDsKKworICAvKiBbIFdPUkQgOCBdICAqLworICB0cmVlIGNsYXVzZXM7CisKKyAgLyogWyBXT1JEIDkgXQorICAgICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gaXRlciBhcnJheS4gICovCisgIHNpemVfdCBjb2xsYXBzZTsKKworICAvKiBbIFdPUkQgMTAgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9vbXBfZm9yX2l0ZXIgKiBHVFkoKGxlbmd0aCAoIiVoLmNvbGxhcHNlIikpKSBpdGVyOworCisgIC8qIFsgV09SRCAxMSBdCisgICAgIFByZS1ib2R5IGV2YWx1YXRlZCBiZWZvcmUgdGhlIGxvb3AgYm9keSBiZWdpbnMuICAqLworICBnaW1wbGVfc2VxIHByZV9ib2R5OworfTsKKworCisvKiBHSU1QTEVfT01QX1BBUkFMTEVMICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfb21wX3BhcmFsbGVsIHsKKyAgLyogWyBXT1JEIDEtNyBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXAgb21wOworCisgIC8qIFsgV09SRCA4IF0KKyAgICAgQ2xhdXNlcy4gICovCisgIHRyZWUgY2xhdXNlczsKKworICAvKiBbIFdPUkQgOSBdCisgICAgIENoaWxkIGZ1bmN0aW9uIGhvbGRpbmcgdGhlIGJvZHkgb2YgdGhlIHBhcmFsbGVsIHJlZ2lvbi4gICovCisgIHRyZWUgY2hpbGRfZm47CisKKyAgLyogWyBXT1JEIDEwIF0KKyAgICAgU2hhcmVkIGRhdGEgYXJndW1lbnQuICAqLworICB0cmVlIGRhdGFfYXJnOworfTsKKworCisvKiBHSU1QTEVfT01QX1RBU0sgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzayB7CisgIC8qIFsgV09SRCAxLTEwIF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9wYXJhbGxlbCBwYXI7CisKKyAgLyogWyBXT1JEIDExIF0KKyAgICAgQ2hpbGQgZnVuY3Rpb24gaG9sZGluZyBmaXJzdHByaXZhdGUgaW5pdGlhbGl6YXRpb24gaWYgbmVlZGVkLiAgKi8KKyAgdHJlZSBjb3B5X2ZuOworCisgIC8qIFsgV09SRCAxMi0xMyBdCisgICAgIFNpemUgYW5kIGFsaWdubWVudCBpbiBieXRlcyBvZiB0aGUgYXJndW1lbnQgZGF0YSBibG9jay4gICovCisgIHRyZWUgYXJnX3NpemU7CisgIHRyZWUgYXJnX2FsaWduOworfTsKKworCisvKiBHSU1QTEVfT01QX1NFQ1RJT04gKi8KKy8qIFVzZXMgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wLiAgKi8KKworCisvKiBHSU1QTEVfT01QX1NFQ1RJT05TICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NlY3Rpb25zIHsKKyAgLyogWyBXT1JEIDEtNyBdICAqLworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXAgb21wOworCisgIC8qIFsgV09SRCA4IF0gICovCisgIHRyZWUgY2xhdXNlczsKKworICAvKiBbIFdPUkQgOSBdCisgICAgIFRoZSBjb250cm9sIHZhcmlhYmxlIHVzZWQgZm9yIGRlY2lkaW5nIHdoaWNoIG9mIHRoZSBzZWN0aW9ucyB0bworICAgICBleGVjdXRlLiAgKi8KKyAgdHJlZSBjb250cm9sOworfTsKKworLyogR0lNUExFX09NUF9DT05USU5VRS4KKworICAgTm90ZTogVGhpcyBkb2VzIG5vdCBpbmhlcml0IGZyb20gZ2ltcGxlX3N0YXRlbWVudF9vbXAsIGJlY2F1c2Ugd2UKKyAgICAgICAgIGRvIG5vdCBuZWVkIHRoZSBib2R5IGZpZWxkLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9vbXBfY29udGludWUgeworICAvKiBbIFdPUkQgMS02IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA3IF0gICovCisgIHRyZWUgY29udHJvbF9kZWY7CisKKyAgLyogWyBXT1JEIDggXSAgKi8KKyAgdHJlZSBjb250cm9sX3VzZTsKK307CisKKy8qIEdJTVBMRV9PTVBfU0lOR0xFICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZSB7CisgIC8qIFsgV09SRCAxLTcgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wIG9tcDsKKworICAvKiBbIFdPUkQgNyBdICAqLworICB0cmVlIGNsYXVzZXM7Cit9OworCisKKy8qIEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQuCisgICBOb3RlOiBUaGlzIGlzIGJhc2VkIG9uIGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSwgbm90IGdfc19vbXAsIGJlY2F1c2UgZ19zX29tcAorICAgY29udGFpbnMgYSBzZXF1ZW5jZSwgd2hpY2ggd2UgZG9uJ3QgbmVlZCBoZXJlLiAgKi8KKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX2xvYWQgeworICAvKiBbIFdPUkQgMS02IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgZ3NiYXNlOworCisgIC8qIFsgV09SRCA3LTggXSAgKi8KKyAgdHJlZSByaHMsIGxoczsKK307CisKKy8qIEdJTVBMRV9PTVBfQVRPTUlDX1NUT1JFLgorICAgU2VlIG5vdGUgb24gR0lNUExFX09NUF9BVE9NSUNfTE9BRC4gICovCisKK3N0cnVjdCBHVFkoKCkpIGdpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19zdG9yZSB7CisgIC8qIFsgV09SRCAxLTYgXSAgKi8KKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBnc2Jhc2U7CisKKyAgLyogWyBXT1JEIDcgXSAgKi8KKyAgdHJlZSB2YWw7Cit9OworCisvKiBHSU1QTEVfVFJBTlNBQ1RJT04uICAqLworCisvKiBCaXRzIHRvIGJlIHN0b3JlZCBpbiB0aGUgR0lNUExFX1RSQU5TQUNUSU9OIHN1YmNvZGUuICAqLworCisvKiBUaGUgX190cmFuc2FjdGlvbl9hdG9taWMgd2FzIGRlY2xhcmVkIFtbb3V0ZXJdXSBvciBpdCBpcworICAgX190cmFuc2FjdGlvbl9yZWxheGVkLiAgKi8KKyNkZWZpbmUgR1RNQV9JU19PVVRFUgkJCSgxdSA8PCAwKQorI2RlZmluZSBHVE1BX0lTX1JFTEFYRUQJCQkoMXUgPDwgMSkKKyNkZWZpbmUgR1RNQV9ERUNMQVJBVElPTl9NQVNLCQkoR1RNQV9JU19PVVRFUiB8IEdUTUFfSVNfUkVMQVhFRCkKKworLyogVGhlIHRyYW5zYWN0aW9uIGlzIHNlZW4gdG8gbm90IGhhdmUgYW4gYWJvcnQuICAqLworI2RlZmluZSBHVE1BX0hBVkVfQUJPUlQJCQkoMXUgPDwgMikKKy8qIFRoZSB0cmFuc2FjdGlvbiBpcyBzZWVuIHRvIGhhdmUgbG9hZHMgb3Igc3RvcmVzLiAgKi8KKyNkZWZpbmUgR1RNQV9IQVZFX0xPQUQJCQkoMXUgPDwgMykKKyNkZWZpbmUgR1RNQV9IQVZFX1NUT1JFCQkJKDF1IDw8IDQpCisvKiBUaGUgdHJhbnNhY3Rpb24gTUFZIGVudGVyIHNlcmlhbCBpcnJldm9jYWJsZSBtb2RlIGluIGl0cyBkeW5hbWljIHNjb3BlLiAgKi8KKyNkZWZpbmUgR1RNQV9NQVlfRU5URVJfSVJSRVZPQ0FCTEUJKDF1IDw8IDUpCisvKiBUaGUgdHJhbnNhY3Rpb24gV0lMTCBlbnRlciBzZXJpYWwgaXJyZXZvY2FibGUgbW9kZS4KKyAgIEFuIGlycmV2b2NhYmxlIGJsb2NrIHBvc3QtZG9taW5hdGVzIHRoZSBlbnRpcmUgdHJhbnNhY3Rpb24sIHN1Y2gKKyAgIHRoYXQgYWxsIGludm9jYXRpb25zIG9mIHRoZSB0cmFuc2FjdGlvbiB3aWxsIGdvIHNlcmlhbC1pcnJldm9jYWJsZS4KKyAgIEluIHN1Y2ggY2FzZSwgd2UgZG9uJ3QgYm90aGVyIGluc3RydW1lbnRpbmcgdGhlIHRyYW5zYWN0aW9uLCBhbmQKKyAgIHRlbGwgdGhlIHJ1bnRpbWUgdGhhdCBpdCBzaG91bGQgYmVnaW4gdGhlIHRyYW5zYWN0aW9uIGluCisgICBzZXJpYWwtaXJyZXZvY2FibGUgbW9kZS4gICovCisjZGVmaW5lIEdUTUFfRE9FU19HT19JUlJFVk9DQUJMRQkoMXUgPDwgNikKKy8qIFRoZSB0cmFuc2FjdGlvbiBjb250YWlucyBubyBpbnN0cnVtZW50YXRpb24gY29kZSB3aGF0c292ZXIsIG1vc3QKKyAgIGxpa2VseSBiZWNhdXNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gZ28gaXJyZXZvY2FibGUgdXBvbiBlbnRyeS4gICovCisjZGVmaW5lIEdUTUFfSEFTX05PX0lOU1RSVU1FTlRBVElPTgkoMXUgPDwgNykKKworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX3N0YXRlbWVudF90cmFuc2FjdGlvbgoreworICAvKiBbIFdPUkQgMS05IF0gICovCisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfbWVtb3J5X29wc19iYXNlIGdzYmFzZTsKKworICAvKiBbIFdPUkQgMTAgXSAqLworICBnaW1wbGVfc2VxIGJvZHk7CisKKyAgLyogWyBXT1JEIDExIF0gKi8KKyAgdHJlZSBsYWJlbDsKK307CisKKyNkZWZpbmUgREVGR1NTVFJVQ1QoU1lNLCBTVFJVQ1QsIEhBU19UUkVFX09QKQlTWU0sCitlbnVtIGdpbXBsZV9zdGF0ZW1lbnRfc3RydWN0dXJlX2VudW0geworI2luY2x1ZGUgImdzc3RydWN0LmRlZiIKKyAgICBMQVNUX0dTU19FTlVNCit9OworI3VuZGVmIERFRkdTU1RSVUNUCisKKworLyogRGVmaW5lIHRoZSBvdmVyYWxsIGNvbnRlbnRzIG9mIGEgZ2ltcGxlIHR1cGxlLiAgSXQgbWF5IGJlIGFueSBvZiB0aGUKKyAgIHN0cnVjdHVyZXMgZGVjbGFyZWQgYWJvdmUgZm9yIHZhcmlvdXMgdHlwZXMgb2YgdHVwbGVzLiAgKi8KKwordW5pb24gR1RZICgoZGVzYyAoImdpbXBsZV9zdGF0ZW1lbnRfc3RydWN0dXJlICgmJWgpIiksCisJICAgIGNoYWluX25leHQgKCIlaC5nc2Jhc2UubmV4dCIpLCB2YXJpYWJsZV9zaXplKSkgZ2ltcGxlX3N0YXRlbWVudF9kIHsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSBHVFkgKCh0YWcgKCJHU1NfQkFTRSIpKSkgZ3NiYXNlOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcyBHVFkgKCh0YWcgKCJHU1NfV0lUSF9PUFMiKSkpIGdzb3BzOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSBHVFkgKCh0YWcgKCJHU1NfV0lUSF9NRU1fT1BTX0JBU0UiKSkpIGdzbWVtYmFzZTsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzIEdUWSAoKHRhZyAoIkdTU19XSVRIX01FTV9PUFMiKSkpIGdzbWVtOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9jYWxsIEdUWSAoKHRhZyAoIkdTU19DQUxMIikpKSBnaW1wbGVfY2FsbDsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wIEdUWSAoKHRhZyAoIkdTU19PTVAiKSkpIG9tcDsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmluZCBHVFkgKCh0YWcgKCJHU1NfQklORCIpKSkgZ2ltcGxlX2JpbmQ7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2NhdGNoIEdUWSAoKHRhZyAoIkdTU19DQVRDSCIpKSkgZ2ltcGxlX2NhdGNoOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIgR1RZICgodGFnICgiR1NTX0VIX0ZJTFRFUiIpKSkgZ2ltcGxlX2VoX2ZpbHRlcjsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfbW50IEdUWSAoKHRhZyAoIkdTU19FSF9NTlQiKSkpIGdpbXBsZV9laF9tbnQ7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2Vsc2UgR1RZICgodGFnICgiR1NTX0VIX0VMU0UiKSkpIGdpbXBsZV9laF9lbHNlOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9waGkgR1RZICgodGFnICgiR1NTX1BISSIpKSkgZ2ltcGxlX3BoaTsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfY3RybCBHVFkgKCh0YWcgKCJHU1NfRUhfQ1RSTCIpKSkgZ2ltcGxlX2VoX2N0cmw7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3RyeSBHVFkgKCh0YWcgKCJHU1NfVFJZIikpKSBnaW1wbGVfdHJ5OworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93Y2UgR1RZICgodGFnICgiR1NTX1dDRSIpKSkgZ2ltcGxlX3djZTsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYXNtIEdUWSAoKHRhZyAoIkdTU19BU00iKSkpIGdpbXBsZV9hc207CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jcml0aWNhbCBHVFkgKCh0YWcgKCJHU1NfT01QX0NSSVRJQ0FMIikpKSBnaW1wbGVfb21wX2NyaXRpY2FsOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfZm9yIEdUWSAoKHRhZyAoIkdTU19PTVBfRk9SIikpKSBnaW1wbGVfb21wX2ZvcjsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3BhcmFsbGVsIEdUWSAoKHRhZyAoIkdTU19PTVBfUEFSQUxMRUwiKSkpIGdpbXBsZV9vbXBfcGFyYWxsZWw7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF90YXNrIEdUWSAoKHRhZyAoIkdTU19PTVBfVEFTSyIpKSkgZ2ltcGxlX29tcF90YXNrOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2VjdGlvbnMgR1RZICgodGFnICgiR1NTX09NUF9TRUNUSU9OUyIpKSkgZ2ltcGxlX29tcF9zZWN0aW9uczsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZSBHVFkgKCh0YWcgKCJHU1NfT01QX1NJTkdMRSIpKSkgZ2ltcGxlX29tcF9zaW5nbGU7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jb250aW51ZSBHVFkgKCh0YWcgKCJHU1NfT01QX0NPTlRJTlVFIikpKSBnaW1wbGVfb21wX2NvbnRpbnVlOworICBzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX2xvYWQgR1RZICgodGFnICgiR1NTX09NUF9BVE9NSUNfTE9BRCIpKSkgZ2ltcGxlX29tcF9hdG9taWNfbG9hZDsKKyAgc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19zdG9yZSBHVFkgKCh0YWcgKCJHU1NfT01QX0FUT01JQ19TVE9SRSIpKSkgZ2ltcGxlX29tcF9hdG9taWNfc3RvcmU7CisgIHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3RyYW5zYWN0aW9uIEdUWSgodGFnICgiR1NTX1RSQU5TQUNUSU9OIikpKSBnaW1wbGVfdHJhbnNhY3Rpb247Cit9OworCisvKiBJbiBnaW1wbGUuYy4gICovCisKKy8qIE9mZnNldCBpbiBieXRlcyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIG9wZXJhbmQgdmVjdG9yLgorICAgWmVybyBpZiB0aGVyZSBpcyBubyBvcGVyYW5kIHZlY3RvciBmb3IgdGhpcyB0dXBsZSBzdHJ1Y3R1cmUuICAqLworZXh0ZXJuIHNpemVfdCBjb25zdCBnaW1wbGVfb3BzX29mZnNldF9bXTsKKworLyogTWFwIEdJTVBMRSBjb2RlcyB0byBHU1MgY29kZXMuICAqLworZXh0ZXJuIGVudW0gZ2ltcGxlX3N0YXRlbWVudF9zdHJ1Y3R1cmVfZW51bSBjb25zdCBnc3NfZm9yX2NvZGVfW107CisKKy8qIFRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIGN1cnJlbnRseSBleHBhbmRlZCBnaW1wbGUgc3RhdGVtZW50IGZvciBwdXJwb3NlcworICAgb2YgY29tbWludWNhdGluZyB0aGUgcHJvZmlsZSBpbmZvIHRvIHRoZSBidWlsdGluIGV4cGFuZGVycy4gICovCitleHRlcm4gZ2ltcGxlIGN1cnJlbnRseV9leHBhbmRpbmdfZ2ltcGxlX3N0bXQ7CisKK2dpbXBsZSBnaW1wbGVfYnVpbGRfcmV0dXJuICh0cmVlKTsKKworZ2ltcGxlIGdpbXBsZV9idWlsZF9hc3NpZ25fc3RhdCAodHJlZSwgdHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZ2ltcGxlX2J1aWxkX2Fzc2lnbihsLHIpIGdpbXBsZV9idWlsZF9hc3NpZ25fc3RhdCAobCwgciBNRU1fU1RBVF9JTkZPKQorCit2b2lkIGV4dHJhY3Rfb3BzX2Zyb21fdHJlZV8xICh0cmVlLCBlbnVtIHRyZWVfY29kZSAqLCB0cmVlICosIHRyZWUgKiwgdHJlZSAqKTsKKworZ2ltcGxlCitnaW1wbGVfYnVpbGRfYXNzaWduX3dpdGhfb3BzIChlbnVtIHRyZWVfY29kZSwgdHJlZSwKKwkJCSAgICAgIHRyZWUsIHRyZWUgQ1hYX01FTV9TVEFUX0lORk8pOworZ2ltcGxlCitnaW1wbGVfYnVpbGRfYXNzaWduX3dpdGhfb3BzIChlbnVtIHRyZWVfY29kZSwgdHJlZSwKKwkJCSAgICAgIHRyZWUsIHRyZWUsIHRyZWUgQ1hYX01FTV9TVEFUX0lORk8pOworCitnaW1wbGUgZ2ltcGxlX2J1aWxkX2RlYnVnX2JpbmRfc3RhdCAodHJlZSwgdHJlZSwgZ2ltcGxlIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBnaW1wbGVfYnVpbGRfZGVidWdfYmluZCh2YXIsdmFsLHN0bXQpCQkJXAorICBnaW1wbGVfYnVpbGRfZGVidWdfYmluZF9zdGF0ICgodmFyKSwgKHZhbCksIChzdG10KSBNRU1fU1RBVF9JTkZPKQorZ2ltcGxlIGdpbXBsZV9idWlsZF9kZWJ1Z19zb3VyY2VfYmluZF9zdGF0ICh0cmVlLCB0cmVlLCBnaW1wbGUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGdpbXBsZV9idWlsZF9kZWJ1Z19zb3VyY2VfYmluZCh2YXIsdmFsLHN0bXQpCQkJXAorICBnaW1wbGVfYnVpbGRfZGVidWdfc291cmNlX2JpbmRfc3RhdCAoKHZhciksICh2YWwpLCAoc3RtdCkgTUVNX1NUQVRfSU5GTykKKworZ2ltcGxlIGdpbXBsZV9idWlsZF9jYWxsX3ZlYyAodHJlZSwgdmVjPHRyZWU+ICk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX2NhbGwgKHRyZWUsIHVuc2lnbmVkLCAuLi4pOworZ2ltcGxlIGdpbXBsZV9idWlsZF9jYWxsX3ZhbGlzdCAodHJlZSwgdW5zaWduZWQsIHZhX2xpc3QpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9jYWxsX2ludGVybmFsIChlbnVtIGludGVybmFsX2ZuLCB1bnNpZ25lZCwgLi4uKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfY2FsbF9pbnRlcm5hbF92ZWMgKGVudW0gaW50ZXJuYWxfZm4sIHZlYzx0cmVlPiApOworZ2ltcGxlIGdpbXBsZV9idWlsZF9jYWxsX2Zyb21fdHJlZSAodHJlZSk7CitnaW1wbGUgZ2ltcGxpZnlfYXNzaWduICh0cmVlLCB0cmVlLCBnaW1wbGVfc2VxICopOworZ2ltcGxlIGdpbXBsZV9idWlsZF9jb25kIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX2xhYmVsICh0cmVlIGxhYmVsKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfZ290byAodHJlZSBkZXN0KTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfbm9wICh2b2lkKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfYmluZCAodHJlZSwgZ2ltcGxlX3NlcSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX2FzbV92ZWMgKGNvbnN0IGNoYXIgKiwgdmVjPHRyZWUsIHZhX2djPiAqLAorCQkJICAgICB2ZWM8dHJlZSwgdmFfZ2M+ICosIHZlYzx0cmVlLCB2YV9nYz4gKiwKKwkJCSAgICAgdmVjPHRyZWUsIHZhX2djPiAqKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfY2F0Y2ggKHRyZWUsIGdpbXBsZV9zZXEpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9laF9maWx0ZXIgKHRyZWUsIGdpbXBsZV9zZXEpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9laF9tdXN0X25vdF90aHJvdyAodHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX2VoX2Vsc2UgKGdpbXBsZV9zZXEsIGdpbXBsZV9zZXEpOworZ2ltcGxlIGdpbXBsZV9idWlsZF90cnkgKGdpbXBsZV9zZXEsIGdpbXBsZV9zZXEsIGVudW0gZ2ltcGxlX3RyeV9mbGFncyk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX3djZSAoZ2ltcGxlX3NlcSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX3Jlc3ggKGludCk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX2VoX2Rpc3BhdGNoIChpbnQpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9zd2l0Y2hfbmxhYmVscyAodW5zaWduZWQsIHRyZWUsIHRyZWUpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9zd2l0Y2ggKHRyZWUsIHRyZWUsIHZlYzx0cmVlPiApOworZ2ltcGxlIGdpbXBsZV9idWlsZF9vbXBfcGFyYWxsZWwgKGdpbXBsZV9zZXEsIHRyZWUsIHRyZWUsIHRyZWUpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9vbXBfdGFzayAoZ2ltcGxlX3NlcSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9mb3IgKGdpbXBsZV9zZXEsIHRyZWUsIHNpemVfdCwgZ2ltcGxlX3NlcSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9jcml0aWNhbCAoZ2ltcGxlX3NlcSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9zZWN0aW9uIChnaW1wbGVfc2VxKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfb21wX2NvbnRpbnVlICh0cmVlLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfb21wX21hc3RlciAoZ2ltcGxlX3NlcSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9yZXR1cm4gKGJvb2wpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9vbXBfb3JkZXJlZCAoZ2ltcGxlX3NlcSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9zZWN0aW9ucyAoZ2ltcGxlX3NlcSwgdHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9zZWN0aW9uc19zd2l0Y2ggKHZvaWQpOworZ2ltcGxlIGdpbXBsZV9idWlsZF9vbXBfc2luZ2xlIChnaW1wbGVfc2VxLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfY2R0ICh0cmVlLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfb21wX2F0b21pY19sb2FkICh0cmVlLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfb21wX2F0b21pY19zdG9yZSAodHJlZSk7CitnaW1wbGUgZ2ltcGxlX2J1aWxkX3RyYW5zYWN0aW9uIChnaW1wbGVfc2VxLCB0cmVlKTsKK2dpbXBsZSBnaW1wbGVfYnVpbGRfcHJlZGljdCAoZW51bSBicl9wcmVkaWN0b3IsIGVudW0gcHJlZGljdGlvbik7CitlbnVtIGdpbXBsZV9zdGF0ZW1lbnRfc3RydWN0dXJlX2VudW0gZ3NzX2Zvcl9hc3NpZ24gKGVudW0gdHJlZV9jb2RlKTsKK3ZvaWQgc29ydF9jYXNlX2xhYmVscyAodmVjPHRyZWU+ICk7Cit2b2lkIHByZXByb2Nlc3NfY2FzZV9sYWJlbF92ZWNfZm9yX2dpbXBsZSAodmVjPHRyZWU+ICwgdHJlZSwgdHJlZSAqKTsKK3ZvaWQgZ2ltcGxlX3NldF9ib2R5ICh0cmVlLCBnaW1wbGVfc2VxKTsKK2dpbXBsZV9zZXEgZ2ltcGxlX2JvZHkgKHRyZWUpOworYm9vbCBnaW1wbGVfaGFzX2JvZHlfcCAodHJlZSk7CitnaW1wbGVfc2VxIGdpbXBsZV9zZXFfYWxsb2MgKHZvaWQpOwordm9pZCBnaW1wbGVfc2VxX2ZyZWUgKGdpbXBsZV9zZXEpOwordm9pZCBnaW1wbGVfc2VxX2FkZF9zZXEgKGdpbXBsZV9zZXEgKiwgZ2ltcGxlX3NlcSk7CitnaW1wbGVfc2VxIGdpbXBsZV9zZXFfY29weSAoZ2ltcGxlX3NlcSk7Citib29sIGdpbXBsZV9jYWxsX3NhbWVfdGFyZ2V0X3AgKGNvbnN0X2dpbXBsZSwgY29uc3RfZ2ltcGxlKTsKK2ludCBnaW1wbGVfY2FsbF9mbGFncyAoY29uc3RfZ2ltcGxlKTsKK2ludCBnaW1wbGVfY2FsbF9yZXR1cm5fZmxhZ3MgKGNvbnN0X2dpbXBsZSk7CitpbnQgZ2ltcGxlX2NhbGxfYXJnX2ZsYWdzIChjb25zdF9naW1wbGUsIHVuc2lnbmVkKTsKK3ZvaWQgZ2ltcGxlX2NhbGxfcmVzZXRfYWxpYXNfaW5mbyAoZ2ltcGxlKTsKK2Jvb2wgZ2ltcGxlX2Fzc2lnbl9jb3B5X3AgKGdpbXBsZSk7Citib29sIGdpbXBsZV9hc3NpZ25fc3NhX25hbWVfY29weV9wIChnaW1wbGUpOworYm9vbCBnaW1wbGVfYXNzaWduX3VuYXJ5X25vcF9wIChnaW1wbGUpOwordm9pZCBnaW1wbGVfc2V0X2JiIChnaW1wbGUsIGJhc2ljX2Jsb2NrKTsKK3ZvaWQgZ2ltcGxlX2Fzc2lnbl9zZXRfcmhzX2Zyb21fdHJlZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgdHJlZSk7Cit2b2lkIGdpbXBsZV9hc3NpZ25fc2V0X3Joc193aXRoX29wc18xIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBlbnVtIHRyZWVfY29kZSwKKwkJCQkgICAgICAgdHJlZSwgdHJlZSwgdHJlZSk7Cit0cmVlIGdpbXBsZV9nZXRfbGhzIChjb25zdF9naW1wbGUpOwordm9pZCBnaW1wbGVfc2V0X2xocyAoZ2ltcGxlLCB0cmVlKTsKK3ZvaWQgZ2ltcGxlX3JlcGxhY2VfbGhzIChnaW1wbGUsIHRyZWUpOworZ2ltcGxlIGdpbXBsZV9jb3B5IChnaW1wbGUpOwordm9pZCBnaW1wbGVfY29uZF9nZXRfb3BzX2Zyb21fdHJlZSAodHJlZSwgZW51bSB0cmVlX2NvZGUgKiwgdHJlZSAqLCB0cmVlICopOworZ2ltcGxlIGdpbXBsZV9idWlsZF9jb25kX2Zyb21fdHJlZSAodHJlZSwgdHJlZSwgdHJlZSk7Cit2b2lkIGdpbXBsZV9jb25kX3NldF9jb25kaXRpb25fZnJvbV90cmVlIChnaW1wbGUsIHRyZWUpOworYm9vbCBnaW1wbGVfaGFzX3NpZGVfZWZmZWN0cyAoY29uc3RfZ2ltcGxlKTsKK2Jvb2wgZ2ltcGxlX2NvdWxkX3RyYXBfcCAoZ2ltcGxlKTsKK2Jvb2wgZ2ltcGxlX2NvdWxkX3RyYXBfcF8xIChnaW1wbGUsIGJvb2wsIGJvb2wpOworYm9vbCBnaW1wbGVfYXNzaWduX3Joc19jb3VsZF90cmFwX3AgKGdpbXBsZSk7Cit2b2lkIGdpbXBsZV9yZWdpbXBsaWZ5X29wZXJhbmRzIChnaW1wbGUsIGdpbXBsZV9zdG10X2l0ZXJhdG9yICopOworYm9vbCBlbXB0eV9ib2R5X3AgKGdpbXBsZV9zZXEpOwordW5zaWduZWQgZ2V0X2dpbXBsZV9yaHNfbnVtX29wcyAoZW51bSB0cmVlX2NvZGUpOworI2RlZmluZSBnaW1wbGVfYWxsb2MoYywgbikgZ2ltcGxlX2FsbG9jX3N0YXQgKGMsIG4gTUVNX1NUQVRfSU5GTykKK2dpbXBsZSBnaW1wbGVfYWxsb2Nfc3RhdCAoZW51bSBnaW1wbGVfY29kZSwgdW5zaWduZWQgTUVNX1NUQVRfREVDTCk7Citjb25zdCBjaGFyICpnaW1wbGVfZGVjbF9wcmludGFibGVfbmFtZSAodHJlZSwgaW50KTsKK3RyZWUgZ2ltcGxlX2dldF92aXJ0X21ldGhvZF9mb3JfYmluZm8gKEhPU1RfV0lERV9JTlQsIHRyZWUpOwordHJlZSBnaW1wbGVfZXh0cmFjdF9kZXZpcnRfYmluZm9fZnJvbV9jc3QgKHRyZWUpOworCisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSBzY2FsYXIgcmVnaXN0ZXIgdmFyaWFibGUuICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX3JlZyAodHJlZSk7CisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYW55IHNvcnQgb2YgdmFyaWFibGUuICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX3ZhcmlhYmxlICh0cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhbnkgc29ydCBvZiBzeW1ib2wuICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX2lkICh0cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhIHZhcmlhYmxlIG9yIGFuIElORElSRUNUX1JFRiAob2YgYSB2YXJpYWJsZSkuICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX21pbl9sdmFsICh0cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBzb21ldGhpbmcgd2hvc2UgYWRkcmVzcyBjYW4gYmUgdGFrZW4uICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX2FkZHJlc3NhYmxlICh0cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhbnkgdmFsaWQgR0lNUExFIGx2YWx1ZS4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfbHZhbHVlICh0cmVlKTsKKworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgR0lNUExFIGFkZHJlc3MuICAqLworYm9vbCBpc19naW1wbGVfYWRkcmVzcyAoY29uc3RfdHJlZSk7CisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSBHSU1QTEUgaW52YXJpYW50IGFkZHJlc3MuICAqLworYm9vbCBpc19naW1wbGVfaW52YXJpYW50X2FkZHJlc3MgKGNvbnN0X3RyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgR0lNUExFIGludmFyaWFudCBhZGRyZXNzIGF0IGludGVycHJvY2VkdXJhbAorICAgbGV2ZWwuICAqLworYm9vbCBpc19naW1wbGVfaXBfaW52YXJpYW50X2FkZHJlc3MgKGNvbnN0X3RyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgdmFsaWQgR0lNUExFIGNvbnN0YW50LiAgKi8KK2Jvb2wgaXNfZ2ltcGxlX2NvbnN0YW50IChjb25zdF90cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhIEdJTVBMRSByZXN0cmljdGVkIGZ1bmN0aW9uIGludmFyaWFudC4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfbWluX2ludmFyaWFudCAoY29uc3RfdHJlZSk7CisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSBHSU1QTEUgcmVzdHJpY3RlZCBpbnRlcnByZWNvZHVyYWwgaW52YXJpYW50LiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV9pcF9pbnZhcmlhbnQgKGNvbnN0X3RyZWUpOworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgR0lNUExFIHJ2YWx1ZS4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfdmFsICh0cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhIEdJTVBMRSBhc20gc3RhdGVtZW50IGlucHV0LiAgKi8KK2V4dGVybiBib29sIGlzX2dpbXBsZV9hc21fdmFsICh0cmVlKTsKKy8qIFJldHVybnMgdHJ1ZSBpZmYgVCBpcyBhIHZhbGlkIGFkZHJlc3Mgb3BlcmFuZCBvZiBhIE1FTV9SRUYuICAqLworYm9vbCBpc19naW1wbGVfbWVtX3JlZl9hZGRyICh0cmVlKTsKKworLyogUmV0dXJucyB0cnVlIGlmZiBUIGlzIGEgdmFsaWQgaWYtc3RhdGVtZW50IGNvbmRpdGlvbi4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfY29uZGV4cHIgKHRyZWUpOworCisvKiBSZXR1cm5zIHRydWUgaWZmIFQgaXMgYSB2YWxpZCBjYWxsIGFkZHJlc3MgZXhwcmVzc2lvbi4gICovCitleHRlcm4gYm9vbCBpc19naW1wbGVfY2FsbF9hZGRyICh0cmVlKTsKKworLyogUmV0dXJuIFRSVUUgaWZmIHN0bXQgaXMgYSBjYWxsIHRvIGEgYnVpbHQtaW4gZnVuY3Rpb24uICAqLworZXh0ZXJuIGJvb2wgaXNfZ2ltcGxlX2J1aWx0aW5fY2FsbCAoZ2ltcGxlIHN0bXQpOworCitleHRlcm4gdm9pZCByZWNhbGN1bGF0ZV9zaWRlX2VmZmVjdHMgKHRyZWUpOworZXh0ZXJuIGJvb2wgZ2ltcGxlX2NvbXBhcmVfZmllbGRfb2Zmc2V0ICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGdpbXBsZV9yZWdpc3Rlcl9jYW5vbmljYWxfdHlwZSAodHJlZSk7CitleHRlcm4gdm9pZCBwcmludF9naW1wbGVfdHlwZXNfc3RhdHMgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBmcmVlX2dpbXBsZV90eXBlX3RhYmxlcyAodm9pZCk7CitleHRlcm4gdHJlZSBnaW1wbGVfdW5zaWduZWRfdHlwZSAodHJlZSk7CitleHRlcm4gdHJlZSBnaW1wbGVfc2lnbmVkX3R5cGUgKHRyZWUpOworZXh0ZXJuIGFsaWFzX3NldF90eXBlIGdpbXBsZV9nZXRfYWxpYXNfc2V0ICh0cmVlKTsKK2V4dGVybiB2b2lkIGNvdW50X3VzZXNfYW5kX2RlcmVmcyAodHJlZSwgZ2ltcGxlLCB1bnNpZ25lZCAqLCB1bnNpZ25lZCAqLAorCQkJCSAgIHVuc2lnbmVkICopOworZXh0ZXJuIGJvb2wgd2Fsa19zdG10X2xvYWRfc3RvcmVfYWRkcl9vcHMgKGdpbXBsZSwgdm9pZCAqLAorCQkJCQkgICBib29sICgqKShnaW1wbGUsIHRyZWUsIHZvaWQgKiksCisJCQkJCSAgIGJvb2wgKCopKGdpbXBsZSwgdHJlZSwgdm9pZCAqKSwKKwkJCQkJICAgYm9vbCAoKikoZ2ltcGxlLCB0cmVlLCB2b2lkICopKTsKK2V4dGVybiBib29sIHdhbGtfc3RtdF9sb2FkX3N0b3JlX29wcyAoZ2ltcGxlLCB2b2lkICosCisJCQkJICAgICAgYm9vbCAoKikoZ2ltcGxlLCB0cmVlLCB2b2lkICopLAorCQkJCSAgICAgIGJvb2wgKCopKGdpbXBsZSwgdHJlZSwgdm9pZCAqKSk7CitleHRlcm4gYm9vbCBnaW1wbGVfaW9yX2FkZHJlc3Nlc190YWtlbiAoYml0bWFwLCBnaW1wbGUpOworZXh0ZXJuIGJvb2wgZ2ltcGxlX2NhbGxfYnVpbHRpbl9wIChnaW1wbGUsIGVudW0gYnVpbHRfaW5fY2xhc3MpOworZXh0ZXJuIGJvb2wgZ2ltcGxlX2NhbGxfYnVpbHRpbl9wIChnaW1wbGUsIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24pOworZXh0ZXJuIGJvb2wgZ2ltcGxlX2FzbV9jbG9iYmVyc19tZW1vcnlfcCAoY29uc3RfZ2ltcGxlKTsKKworLyogSW4gZ2ltcGxpZnkuYyAgKi8KK2V4dGVybiB0cmVlIGNyZWF0ZV90bXBfdmFyX3JhdyAodHJlZSwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB0cmVlIGNyZWF0ZV90bXBfdmFyX25hbWUgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdHJlZSBjcmVhdGVfdG1wX3ZhciAodHJlZSwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB0cmVlIGNyZWF0ZV90bXBfcmVnICh0cmVlLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHRyZWUgZ2V0X2luaXRpYWxpemVkX3RtcF92YXIgKHRyZWUsIGdpbXBsZV9zZXEgKiwgZ2ltcGxlX3NlcSAqKTsKK2V4dGVybiB0cmVlIGdldF9mb3JtYWxfdG1wX3ZhciAodHJlZSwgZ2ltcGxlX3NlcSAqKTsKK2V4dGVybiB2b2lkIGRlY2xhcmVfdmFycyAodHJlZSwgZ2ltcGxlLCBib29sKTsKK2V4dGVybiB2b2lkIGFubm90YXRlX2FsbF93aXRoX2xvY2F0aW9uIChnaW1wbGVfc2VxLCBsb2NhdGlvbl90KTsKKworLyogVmFsaWRhdGlvbiBvZiBHSU1QTEUgZXhwcmVzc2lvbnMuICBOb3RlIHRoYXQgdGhlc2UgcHJlZGljYXRlcyBvbmx5IGNoZWNrCisgICB0aGUgYmFzaWMgZm9ybSBvZiB0aGUgZXhwcmVzc2lvbiwgdGhleSBkb24ndCByZWN1cnNlIHRvIG1ha2Ugc3VyZSB0aGF0CisgICB1bmRlcmx5aW5nIG5vZGVzIGFyZSBhbHNvIG9mIHRoZSByaWdodCBmb3JtLiAgKi8KK3R5cGVkZWYgYm9vbCAoKmdpbXBsZV9wcmVkaWNhdGUpKHRyZWUpOworCisKKy8qIEZJWE1FIHdlIHNob3VsZCBkZWR1Y2UgdGhpcyBmcm9tIHRoZSBwcmVkaWNhdGUuICAqLworZW51bSBmYWxsYmFjayB7CisgIGZiX25vbmUgPSAwLAkJLyogRG8gbm90IGdlbmVyYXRlIGEgdGVtcG9yYXJ5LiAgKi8KKworICBmYl9ydmFsdWUgPSAxLAkvKiBHZW5lcmF0ZSBhbiBydmFsdWUgdG8gaG9sZCB0aGUgcmVzdWx0IG9mIGEKKwkJCSAgIGdpbXBsaWZpZWQgZXhwcmVzc2lvbi4gICovCisKKyAgZmJfbHZhbHVlID0gMiwJLyogR2VuZXJhdGUgYW4gbHZhbHVlIHRvIGhvbGQgdGhlIHJlc3VsdCBvZiBhCisJCQkgICBnaW1wbGlmaWVkIGV4cHJlc3Npb24uICAqLworCisgIGZiX21heWZhaWwgPSA0LAkvKiBHaW1wbGlmaWNhdGlvbiBtYXkgZmFpbC4gIEVycm9yIGlzc3VlZAorCQkJICAgYWZ0ZXJ3YXJkcy4gICovCisgIGZiX2VpdGhlcj0gZmJfcnZhbHVlIHwgZmJfbHZhbHVlCit9OworCit0eXBlZGVmIGludCBmYWxsYmFja190OworCitlbnVtIGdpbXBsaWZ5X3N0YXR1cyB7CisgIEdTX0VSUk9SCT0gLTIsCS8qIFNvbWV0aGluZyBCYWQgU2Vlbi4gICovCisgIEdTX1VOSEFORExFRAk9IC0xLAkvKiBBIGxhbmdob29rIHJlc3VsdCBmb3IgIkkgZHVubm8iLiAgKi8KKyAgR1NfT0sJCT0gMCwJLyogV2UgZGlkIHNvbWV0aGluZywgbWF5YmUgbW9yZSB0byBkby4gICovCisgIEdTX0FMTF9ET05FCT0gMQkvKiBUaGUgZXhwcmVzc2lvbiBpcyBmdWxseSBnaW1wbGlmaWVkLiAgKi8KK307CisKK3N0cnVjdCBnaW1wbGlmeV9jdHgKK3sKKyAgc3RydWN0IGdpbXBsaWZ5X2N0eCAqcHJldl9jb250ZXh0OworCisgIHZlYzxnaW1wbGU+IGJpbmRfZXhwcl9zdGFjazsKKyAgdHJlZSB0ZW1wczsKKyAgZ2ltcGxlX3NlcSBjb25kaXRpb25hbF9jbGVhbnVwczsKKyAgdHJlZSBleGl0X2xhYmVsOworICB0cmVlIHJldHVybl90ZW1wOworCisgIHZlYzx0cmVlPiBjYXNlX2xhYmVsczsKKyAgLyogVGhlIGZvcm1hbCB0ZW1wb3JhcnkgdGFibGUuICBTaG91bGQgdGhpcyBiZSBwZXJzaXN0ZW50PyAgKi8KKyAgaHRhYl90IHRlbXBfaHRhYjsKKworICBpbnQgY29uZGl0aW9uczsKKyAgYm9vbCBzYXZlX3N0YWNrOworICBib29sIGludG9fc3NhOworICBib29sIGFsbG93X3Joc19jb25kX2V4cHI7CisgIGJvb2wgaW5fY2xlYW51cF9wb2ludF9leHByOworfTsKKworLyogUmV0dXJuIHRydWUgaWYgZ2ltcGxpZnlfb25lX3NpemVwb3MgZG9lc24ndCBuZWVkIHRvIGdpbXBsaWZ5CisgICBleHByICh3aGVuIGluIFRZUEVfU0laRXssX1VOSVR9IGFuZCBzaW1pbGFyIHR5cGUvZGVjbCBzaXplL2JpdHNpemUKKyAgIGZpZWxkcykuICAqLworc3RhdGljIGlubGluZSBib29sCitpc19naW1wbGVfc2l6ZXBvcyAodHJlZSBleHByKQoreworICAvKiBnaW1wbGlmeV9vbmVfc2l6ZXBvcyBkb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaWYgdGhlIHZhbHVlIGlzbid0IHRoZXJlLAorICAgICBpcyBjb25zdGFudCwgb3IgY29udGFpbnMgQSBQTEFDRUhPTERFUl9FWFBSLiAgV2UgYWxzbyBkb24ndCB3YW50IHRvIGRvCisgICAgIGFueXRoaW5nIGlmIGl0J3MgYWxyZWFkeSBhIFZBUl9ERUNMLiAgSWYgaXQncyBhIFZBUl9ERUNMIGZyb20gYW5vdGhlcgorICAgICBmdW5jdGlvbiwgdGhlIGdpbXBsaWZpZXIgd2lsbCB3YW50IHRvIHJlcGxhY2UgaXQgd2l0aCBhIG5ldyB2YXJpYWJsZSwKKyAgICAgYnV0IHRoYXQgd2lsbCBjYXVzZSBwcm9ibGVtcyBpZiB0aGlzIHR5cGUgaXMgZnJvbSBvdXRzaWRlIHRoZSBmdW5jdGlvbi4KKyAgICAgSXQncyBPSyB0byBoYXZlIHRoYXQgaGVyZS4gICovCisgIHJldHVybiAoZXhwciA9PSBOVUxMX1RSRUUKKwkgIHx8IFRSRUVfQ09OU1RBTlQgKGV4cHIpCisJICB8fCBUUkVFX0NPREUgKGV4cHIpID09IFZBUl9ERUNMCisJICB8fCBDT05UQUlOU19QTEFDRUhPTERFUl9QIChleHByKSk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCitleHRlcm4gZW51bSBnaW1wbGlmeV9zdGF0dXMgZ2ltcGxpZnlfZXhwciAodHJlZSAqLCBnaW1wbGVfc2VxICosIGdpbXBsZV9zZXEgKiwKKwkJCQkJICAgYm9vbCAoKikgKHRyZWUpLCBmYWxsYmFja190KTsKK2V4dGVybiB2b2lkIGdpbXBsaWZ5X3R5cGVfc2l6ZXMgKHRyZWUsIGdpbXBsZV9zZXEgKik7CitleHRlcm4gdm9pZCBnaW1wbGlmeV9vbmVfc2l6ZXBvcyAodHJlZSAqLCBnaW1wbGVfc2VxICopOworZW51bSBnaW1wbGlmeV9zdGF0dXMgZ2ltcGxpZnlfc2VsZl9tb2RfZXhwciAodHJlZSAqLCBnaW1wbGVfc2VxICosIGdpbXBsZV9zZXEgKiwKKwkJCQkJICAgICBib29sLCB0cmVlKTsKK2V4dGVybiBib29sIGdpbXBsaWZ5X3N0bXQgKHRyZWUgKiwgZ2ltcGxlX3NlcSAqKTsKK2V4dGVybiBnaW1wbGUgZ2ltcGxpZnlfYm9keSAodHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBwdXNoX2dpbXBsaWZ5X2NvbnRleHQgKHN0cnVjdCBnaW1wbGlmeV9jdHggKik7CitleHRlcm4gdm9pZCBwb3BfZ2ltcGxpZnlfY29udGV4dCAoZ2ltcGxlKTsKK2V4dGVybiB2b2lkIGdpbXBsaWZ5X2FuZF9hZGQgKHRyZWUsIGdpbXBsZV9zZXEgKik7CisKKy8qIE1pc2NlbGxhbmVvdXMgaGVscGVycy4gICovCitleHRlcm4gdm9pZCBnaW1wbGVfYWRkX3RtcF92YXIgKHRyZWUpOworZXh0ZXJuIGdpbXBsZSBnaW1wbGVfY3VycmVudF9iaW5kX2V4cHIgKHZvaWQpOworZXh0ZXJuIHZlYzxnaW1wbGU+IGdpbXBsZV9iaW5kX2V4cHJfc3RhY2sgKHZvaWQpOworZXh0ZXJuIHRyZWUgdm9pZGlmeV93cmFwcGVyX2V4cHIgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfYW5kX2p1bXAgKHRyZWUgKik7CitleHRlcm4gdHJlZSBmb3JjZV9sYWJlbHNfciAodHJlZSAqLCBpbnQgKiwgdm9pZCAqKTsKK2V4dGVybiBlbnVtIGdpbXBsaWZ5X3N0YXR1cyBnaW1wbGlmeV92YV9hcmdfZXhwciAodHJlZSAqLCBnaW1wbGVfc2VxICosCisJCQkJCQkgIGdpbXBsZV9zZXEgKik7CitzdHJ1Y3QgZ2ltcGxpZnlfb21wX2N0eDsKK2V4dGVybiB2b2lkIG9tcF9maXJzdHByaXZhdGl6ZV92YXJpYWJsZSAoc3RydWN0IGdpbXBsaWZ5X29tcF9jdHggKiwgdHJlZSk7CitleHRlcm4gdHJlZSBnaW1wbGVfYm9vbGlmeSAodHJlZSk7CitleHRlcm4gZ2ltcGxlX3ByZWRpY2F0ZSByaHNfcHJlZGljYXRlX2ZvciAodHJlZSk7CitleHRlcm4gdHJlZSBjYW5vbmljYWxpemVfY29uZF9leHByX2NvbmQgKHRyZWUpOworCisvKiBJbiBvbXAtbG93LmMuICAqLworZXh0ZXJuIHRyZWUgb21wX3JlZHVjdGlvbl9pbml0ICh0cmVlLCB0cmVlKTsKKworLyogSW4gdHJhbnMtbWVtLmMuICAqLworZXh0ZXJuIHZvaWQgZGlhZ25vc2VfdG1fc2FmZV9lcnJvcnMgKHRyZWUpOworZXh0ZXJuIHZvaWQgY29tcHV0ZV90cmFuc2FjdGlvbl9iaXRzICh2b2lkKTsKKworLyogSW4gdHJlZS1uZXN0ZWQuYy4gICovCitleHRlcm4gdm9pZCBsb3dlcl9uZXN0ZWRfZnVuY3Rpb25zICh0cmVlKTsKK2V4dGVybiB2b2lkIGluc2VydF9maWVsZF9pbnRvX3N0cnVjdCAodHJlZSwgdHJlZSk7CisKKy8qIEluIGdpbXBsaWZ5LmMuICAqLworZXh0ZXJuIHZvaWQgZ2ltcGxpZnlfZnVuY3Rpb25fdHJlZSAodHJlZSk7CisKKy8qIEluIGNmZ2V4cGFuZC5jLiAgKi8KK2V4dGVybiB0cmVlIGdpbXBsZV9hc3NpZ25fcmhzX3RvX3RyZWUgKGdpbXBsZSk7CisKKy8qIEluIGJ1aWx0aW5zLmMgICovCitleHRlcm4gYm9vbCB2YWxpZGF0ZV9naW1wbGVfYXJnbGlzdCAoY29uc3RfZ2ltcGxlLCAuLi4pOworCisvKiBJbiB0cmVlLXNzYS5jICAqLworZXh0ZXJuIGJvb2wgdHJlZV9zc2FfdXNlbGVzc190eXBlX2NvbnZlcnNpb24gKHRyZWUpOworZXh0ZXJuIHRyZWUgdHJlZV9zc2Ffc3RyaXBfdXNlbGVzc190eXBlX2NvbnZlcnNpb25zICh0cmVlKTsKK2V4dGVybiBib29sIHVzZWxlc3NfdHlwZV9jb252ZXJzaW9uX3AgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgdHlwZXNfY29tcGF0aWJsZV9wICh0cmVlLCB0cmVlKTsKKworLyogUmV0dXJuIHRoZSBmaXJzdCBub2RlIGluIEdJTVBMRSBzZXF1ZW5jZSBTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxX25vZGUKK2dpbXBsZV9zZXFfZmlyc3QgKGdpbXBsZV9zZXEgcykKK3sKKyAgcmV0dXJuIHM7Cit9CisKKworLyogUmV0dXJuIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gR0lNUExFIHNlcXVlbmNlIFMuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZQorZ2ltcGxlX3NlcV9maXJzdF9zdG10IChnaW1wbGVfc2VxIHMpCit7CisgIGdpbXBsZV9zZXFfbm9kZSBuID0gZ2ltcGxlX3NlcV9maXJzdCAocyk7CisgIHJldHVybiBuOworfQorCisKKy8qIFJldHVybiB0aGUgbGFzdCBub2RlIGluIEdJTVBMRSBzZXF1ZW5jZSBTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxX25vZGUKK2dpbXBsZV9zZXFfbGFzdCAoZ2ltcGxlX3NlcSBzKQoreworICByZXR1cm4gcyA/IHMtPmdzYmFzZS5wcmV2IDogTlVMTDsKK30KKworCisvKiBSZXR1cm4gdGhlIGxhc3Qgc3RhdGVtZW50IGluIEdJTVBMRSBzZXF1ZW5jZSBTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGUKK2dpbXBsZV9zZXFfbGFzdF9zdG10IChnaW1wbGVfc2VxIHMpCit7CisgIGdpbXBsZV9zZXFfbm9kZSBuID0gZ2ltcGxlX3NlcV9sYXN0IChzKTsKKyAgcmV0dXJuIG47Cit9CisKKworLyogU2V0IHRoZSBsYXN0IG5vZGUgaW4gR0lNUExFIHNlcXVlbmNlICpQUyB0byBMQVNULiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2VxX3NldF9sYXN0IChnaW1wbGVfc2VxICpwcywgZ2ltcGxlX3NlcV9ub2RlIGxhc3QpCit7CisgICgqcHMpLT5nc2Jhc2UucHJldiA9IGxhc3Q7Cit9CisKKworLyogU2V0IHRoZSBmaXJzdCBub2RlIGluIEdJTVBMRSBzZXF1ZW5jZSAqUFMgdG8gRklSU1QuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zZXFfc2V0X2ZpcnN0IChnaW1wbGVfc2VxICpwcywgZ2ltcGxlX3NlcV9ub2RlIGZpcnN0KQoreworICAqcHMgPSBmaXJzdDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBHSU1QTEUgc2VxdWVuY2UgUyBpcyBlbXB0eS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX3NlcV9lbXB0eV9wIChnaW1wbGVfc2VxIHMpCit7CisgIHJldHVybiBzID09IE5VTEw7Cit9CisKKwordm9pZCBnaW1wbGVfc2VxX2FkZF9zdG10IChnaW1wbGVfc2VxICosIGdpbXBsZSk7CisKKy8qIExpbmsgZ2ltcGxlIHN0YXRlbWVudCBHUyB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSAqU0VRX1AuICBJZgorICAgKlNFUV9QIGlzIE5VTEwsIGEgbmV3IHNlcXVlbmNlIGlzIGFsbG9jYXRlZC4gIFRoaXMgZnVuY3Rpb24gaXMKKyAgIHNpbWlsYXIgdG8gZ2ltcGxlX3NlcV9hZGRfc3RtdCwgYnV0IGRvZXMgbm90IHNjYW4gdGhlIG9wZXJhbmRzLgorICAgRHVyaW5nIGdpbXBsaWZpY2F0aW9uLCB3ZSBuZWVkIHRvIG1hbmlwdWxhdGUgc3RhdGVtZW50IHNlcXVlbmNlcworICAgYmVmb3JlIHRoZSBkZWYvdXNlIHZlY3RvcnMgaGF2ZSBiZWVuIGNvbnN0cnVjdGVkLiAgKi8KK3ZvaWQgZ2ltcGxlX3NlcV9hZGRfc3RtdF93aXRob3V0X3VwZGF0ZSAoZ2ltcGxlX3NlcSAqLCBnaW1wbGUpOworCisvKiBBbGxvY2F0ZSBhIG5ldyBzZXF1ZW5jZSBhbmQgaW5pdGlhbGl6ZSBpdHMgZmlyc3QgZWxlbWVudCB3aXRoIFNUTVQuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2dpbXBsZV9zZXFfYWxsb2Nfd2l0aF9zdG10IChnaW1wbGUgc3RtdCkKK3sKKyAgZ2ltcGxlX3NlcSBzZXEgPSBOVUxMOworICBnaW1wbGVfc2VxX2FkZF9zdG10ICgmc2VxLCBzdG10KTsKKyAgcmV0dXJuIHNlcTsKK30KKworCisvKiBSZXR1cm5zIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIGluIEJCLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxCitiYl9zZXEgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiKQoreworICByZXR1cm4gKCEoYmItPmZsYWdzICYgQkJfUlRMKSkgPyBiYi0+aWwuZ2ltcGxlLnNlcSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcSAqCitiYl9zZXFfYWRkciAoYmFzaWNfYmxvY2sgYmIpCit7CisgIHJldHVybiAoIShiYi0+ZmxhZ3MgJiBCQl9SVEwpKSA/ICZiYi0+aWwuZ2ltcGxlLnNlcSA6IE5VTEw7Cit9CisKKy8qIFNldHMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgaW4gQkIgdG8gU0VRLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfYmJfc2VxIChiYXNpY19ibG9jayBiYiwgZ2ltcGxlX3NlcSBzZXEpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCEoYmItPmZsYWdzICYgQkJfUlRMKSk7CisgIGJiLT5pbC5naW1wbGUuc2VxID0gc2VxOworfQorCisKKy8qIFJldHVybiB0aGUgY29kZSBmb3IgR0lNUExFIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIGdpbXBsZV9jb2RlCitnaW1wbGVfY29kZSAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHJldHVybiBnLT5nc2Jhc2UuY29kZTsKK30KKworCisvKiBSZXR1cm4gdGhlIEdTUyBjb2RlIHVzZWQgYnkgYSBHSU1QTEUgY29kZS4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBnaW1wbGVfc3RhdGVtZW50X3N0cnVjdHVyZV9lbnVtCitnc3NfZm9yX2NvZGUgKGVudW0gZ2ltcGxlX2NvZGUgY29kZSkKK3sKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKCh1bnNpZ25lZCBpbnQpY29kZSA8IExBU1RfQU5EX1VOVVNFRF9HSU1QTEVfQ09ERSk7CisgIHJldHVybiBnc3NfZm9yX2NvZGVfW2NvZGVdOworfQorCisKKy8qIFJldHVybiB3aGljaCBHU1MgY29kZSBpcyB1c2VkIGJ5IEdTLiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIGdpbXBsZV9zdGF0ZW1lbnRfc3RydWN0dXJlX2VudW0KK2dpbXBsZV9zdGF0ZW1lbnRfc3RydWN0dXJlIChnaW1wbGUgZ3MpCit7CisgIHJldHVybiBnc3NfZm9yX2NvZGUgKGdpbXBsZV9jb2RlIChncykpOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIHN0YXRlbWVudCBHIGhhcyBzdWItc3RhdGVtZW50cy4gIFRoaXMgaXMgb25seSB0cnVlIGZvcgorICAgSGlnaCBHSU1QTEUgc3RhdGVtZW50cy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2hhc19zdWJzdGF0ZW1lbnRzIChnaW1wbGUgZykKK3sKKyAgc3dpdGNoIChnaW1wbGVfY29kZSAoZykpCisgICAgeworICAgIGNhc2UgR0lNUExFX0JJTkQ6CisgICAgY2FzZSBHSU1QTEVfQ0FUQ0g6CisgICAgY2FzZSBHSU1QTEVfRUhfRklMVEVSOgorICAgIGNhc2UgR0lNUExFX0VIX0VMU0U6CisgICAgY2FzZSBHSU1QTEVfVFJZOgorICAgIGNhc2UgR0lNUExFX09NUF9GT1I6CisgICAgY2FzZSBHSU1QTEVfT01QX01BU1RFUjoKKyAgICBjYXNlIEdJTVBMRV9PTVBfT1JERVJFRDoKKyAgICBjYXNlIEdJTVBMRV9PTVBfU0VDVElPTjoKKyAgICBjYXNlIEdJTVBMRV9PTVBfUEFSQUxMRUw6CisgICAgY2FzZSBHSU1QTEVfT01QX1RBU0s6CisgICAgY2FzZSBHSU1QTEVfT01QX1NFQ1RJT05TOgorICAgIGNhc2UgR0lNUExFX09NUF9TSU5HTEU6CisgICAgY2FzZSBHSU1QTEVfT01QX0NSSVRJQ0FMOgorICAgIGNhc2UgR0lNUExFX1dJVEhfQ0xFQU5VUF9FWFBSOgorICAgIGNhc2UgR0lNUExFX1RSQU5TQUNUSU9OOgorICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworCisvKiBSZXR1cm4gdGhlIGJhc2ljIGJsb2NrIGhvbGRpbmcgc3RhdGVtZW50IEcuICAqLworCitzdGF0aWMgaW5saW5lIGJhc2ljX2Jsb2NrCitnaW1wbGVfYmIgKGNvbnN0X2dpbXBsZSBnKQoreworICByZXR1cm4gZy0+Z3NiYXNlLmJiOworfQorCisKKy8qIFJldHVybiB0aGUgbGV4aWNhbCBzY29wZSBibG9jayBob2xkaW5nIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYmxvY2sgKGNvbnN0X2dpbXBsZSBnKQoreworICByZXR1cm4gTE9DQVRJT05fQkxPQ0sgKGctPmdzYmFzZS5sb2NhdGlvbik7Cit9CisKKworLyogU2V0IEJMT0NLIHRvIGJlIHRoZSBsZXhpY2FsIHNjb3BlIGJsb2NrIGhvbGRpbmcgc3RhdGVtZW50IEcuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zZXRfYmxvY2sgKGdpbXBsZSBnLCB0cmVlIGJsb2NrKQoreworICBpZiAoYmxvY2spCisgICAgZy0+Z3NiYXNlLmxvY2F0aW9uID0KKwlDT01CSU5FX0xPQ0FUSU9OX0RBVEEgKGxpbmVfdGFibGUsIGctPmdzYmFzZS5sb2NhdGlvbiwgYmxvY2spOworICBlbHNlCisgICAgZy0+Z3NiYXNlLmxvY2F0aW9uID0gTE9DQVRJT05fTE9DVVMgKGctPmdzYmFzZS5sb2NhdGlvbik7Cit9CisKKworLyogUmV0dXJuIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciBzdGF0ZW1lbnQgRy4gICovCisKK3N0YXRpYyBpbmxpbmUgbG9jYXRpb25fdAorZ2ltcGxlX2xvY2F0aW9uIChjb25zdF9naW1wbGUgZykKK3sKKyAgcmV0dXJuIGctPmdzYmFzZS5sb2NhdGlvbjsKK30KKworLyogUmV0dXJuIHBvaW50ZXIgdG8gbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSBjb25zdCBsb2NhdGlvbl90ICoKK2dpbXBsZV9sb2NhdGlvbl9wdHIgKGNvbnN0X2dpbXBsZSBnKQoreworICByZXR1cm4gJmctPmdzYmFzZS5sb2NhdGlvbjsKK30KKworCisvKiBTZXQgbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X2xvY2F0aW9uIChnaW1wbGUgZywgbG9jYXRpb25fdCBsb2NhdGlvbikKK3sKKyAgZy0+Z3NiYXNlLmxvY2F0aW9uID0gbG9jYXRpb247Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgRyBjb250YWlucyBsb2NhdGlvbiBpbmZvcm1hdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2hhc19sb2NhdGlvbiAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHJldHVybiBMT0NBVElPTl9MT0NVUyAoZ2ltcGxlX2xvY2F0aW9uIChnKSkgIT0gVU5LTk9XTl9MT0NBVElPTjsKK30KKworCisvKiBSZXR1cm4gdGhlIGZpbGUgbmFtZSBvZiB0aGUgbG9jYXRpb24gb2YgU1RNVC4gICovCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitnaW1wbGVfZmlsZW5hbWUgKGNvbnN0X2dpbXBsZSBzdG10KQoreworICByZXR1cm4gTE9DQVRJT05fRklMRSAoZ2ltcGxlX2xvY2F0aW9uIChzdG10KSk7Cit9CisKKworLyogUmV0dXJuIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgbG9jYXRpb24gb2YgU1RNVC4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitnaW1wbGVfbGluZW5vIChjb25zdF9naW1wbGUgc3RtdCkKK3sKKyAgcmV0dXJuIExPQ0FUSU9OX0xJTkUgKGdpbXBsZV9sb2NhdGlvbiAoc3RtdCkpOworfQorCisKKy8qIERldGVybWluZSB3aGV0aGVyIFNFUSBpcyBhIHNpbmdsZXRvbi4gKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfc2VxX3NpbmdsZXRvbl9wIChnaW1wbGVfc2VxIHNlcSkKK3sKKyAgcmV0dXJuICgoZ2ltcGxlX3NlcV9maXJzdCAoc2VxKSAhPSBOVUxMKQorCSAgJiYgKGdpbXBsZV9zZXFfZmlyc3QgKHNlcSkgPT0gZ2ltcGxlX3NlcV9sYXN0IChzZXEpKSk7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIG5vIHdhcm5pbmdzIHNob3VsZCBiZSBlbWl0dGVkIGZvciBzdGF0ZW1lbnQgU1RNVC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX25vX3dhcm5pbmdfcCAoY29uc3RfZ2ltcGxlIHN0bXQpCit7CisgIHJldHVybiBzdG10LT5nc2Jhc2Uubm9fd2FybmluZzsKK30KKworLyogU2V0IHRoZSBub193YXJuaW5nIGZsYWcgb2YgU1RNVCB0byBOT19XQVJOSU5HLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X25vX3dhcm5pbmcgKGdpbXBsZSBzdG10LCBib29sIG5vX3dhcm5pbmcpCit7CisgIHN0bXQtPmdzYmFzZS5ub193YXJuaW5nID0gKHVuc2lnbmVkKSBub193YXJuaW5nOworfQorCisvKiBTZXQgdGhlIHZpc2l0ZWQgc3RhdHVzIG9uIHN0YXRlbWVudCBTVE1UIHRvIFZJU0lURURfUC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF92aXNpdGVkIChnaW1wbGUgc3RtdCwgYm9vbCB2aXNpdGVkX3ApCit7CisgIHN0bXQtPmdzYmFzZS52aXNpdGVkID0gKHVuc2lnbmVkKSB2aXNpdGVkX3A7Cit9CisKKworLyogUmV0dXJuIHRoZSB2aXNpdGVkIHN0YXR1cyBmb3Igc3RhdGVtZW50IFNUTVQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV92aXNpdGVkX3AgKGdpbXBsZSBzdG10KQoreworICByZXR1cm4gc3RtdC0+Z3NiYXNlLnZpc2l0ZWQ7Cit9CisKKworLyogU2V0IHBhc3MgbG9jYWwgZmxhZyBQTEYgb24gc3RhdGVtZW50IFNUTVQgdG8gVkFMX1AuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zZXRfcGxmIChnaW1wbGUgc3RtdCwgZW51bSBwbGZfbWFzayBwbGYsIGJvb2wgdmFsX3ApCit7CisgIGlmICh2YWxfcCkKKyAgICBzdG10LT5nc2Jhc2UucGxmIHw9ICh1bnNpZ25lZCBpbnQpIHBsZjsKKyAgZWxzZQorICAgIHN0bXQtPmdzYmFzZS5wbGYgJj0gfigodW5zaWduZWQgaW50KSBwbGYpOworfQorCisKKy8qIFJldHVybiB0aGUgdmFsdWUgb2YgcGFzcyBsb2NhbCBmbGFnIFBMRiBvbiBzdGF0ZW1lbnQgU1RNVC4gICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitnaW1wbGVfcGxmIChnaW1wbGUgc3RtdCwgZW51bSBwbGZfbWFzayBwbGYpCit7CisgIHJldHVybiBzdG10LT5nc2Jhc2UucGxmICYgKCh1bnNpZ25lZCBpbnQpIHBsZik7Cit9CisKKworLyogU2V0IHRoZSBVSUQgb2Ygc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X3VpZCAoZ2ltcGxlIGcsIHVuc2lnbmVkIHVpZCkKK3sKKyAgZy0+Z3NiYXNlLnVpZCA9IHVpZDsKK30KKworCisvKiBSZXR1cm4gdGhlIFVJRCBvZiBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitnaW1wbGVfdWlkIChjb25zdF9naW1wbGUgZykKK3sKKyAgcmV0dXJuIGctPmdzYmFzZS51aWQ7Cit9CisKKworLyogTWFrZSBzdGF0ZW1lbnQgRyBhIHNpbmdsZXRvbiBzZXF1ZW5jZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2luaXRfc2luZ2xldG9uIChnaW1wbGUgZykKK3sKKyAgZy0+Z3NiYXNlLm5leHQgPSBOVUxMOworICBnLT5nc2Jhc2UucHJldiA9IGc7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgR0lNUExFIHN0YXRlbWVudCBHIGhhcyByZWdpc3RlciBvciBtZW1vcnkgb3BlcmFuZHMuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9oYXNfb3BzIChjb25zdF9naW1wbGUgZykKK3sKKyAgcmV0dXJuIGdpbXBsZV9jb2RlIChnKSA+PSBHSU1QTEVfQ09ORCAmJiBnaW1wbGVfY29kZSAoZykgPD0gR0lNUExFX1JFVFVSTjsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBHSU1QTEUgc3RhdGVtZW50IEcgaGFzIG1lbW9yeSBvcGVyYW5kcy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2hhc19tZW1fb3BzIChjb25zdF9naW1wbGUgZykKK3sKKyAgcmV0dXJuIGdpbXBsZV9jb2RlIChnKSA+PSBHSU1QTEVfQVNTSUdOICYmIGdpbXBsZV9jb2RlIChnKSA8PSBHSU1QTEVfUkVUVVJOOworfQorCisKKy8qIFJldHVybiB0aGUgc2V0IG9mIFVTRSBvcGVyYW5kcyBmb3Igc3RhdGVtZW50IEcuICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vfb3B0eXBlX2QgKgorZ2ltcGxlX3VzZV9vcHMgKGNvbnN0X2dpbXBsZSBnKQoreworICBpZiAoIWdpbXBsZV9oYXNfb3BzIChnKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIGctPmdzb3BzLm9wYmFzZS51c2Vfb3BzOworfQorCisKKy8qIFNldCBVU0UgdG8gYmUgdGhlIHNldCBvZiBVU0Ugb3BlcmFuZHMgZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X3VzZV9vcHMgKGdpbXBsZSBnLCBzdHJ1Y3QgdXNlX29wdHlwZV9kICp1c2UpCit7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfaGFzX29wcyAoZykpOworICBnLT5nc29wcy5vcGJhc2UudXNlX29wcyA9IHVzZTsKK30KKworCisvKiBSZXR1cm4gdGhlIHNldCBvZiBWVVNFIG9wZXJhbmQgZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitnaW1wbGVfdnVzZV9vcCAoY29uc3RfZ2ltcGxlIGcpCit7CisgIHN0cnVjdCB1c2Vfb3B0eXBlX2QgKm9wczsKKyAgaWYgKCFnaW1wbGVfaGFzX21lbV9vcHMgKGcpKQorICAgIHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7CisgIG9wcyA9IGctPmdzb3BzLm9wYmFzZS51c2Vfb3BzOworICBpZiAob3BzCisgICAgICAmJiBVU0VfT1BfUFRSIChvcHMpLT51c2UgPT0gJmctPmdzbWVtYmFzZS52dXNlKQorICAgIHJldHVybiBVU0VfT1BfUFRSIChvcHMpOworICByZXR1cm4gTlVMTF9VU0VfT1BFUkFORF9QOworfQorCisvKiBSZXR1cm4gdGhlIHNldCBvZiBWREVGIG9wZXJhbmQgZm9yIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSBkZWZfb3BlcmFuZF9wCitnaW1wbGVfdmRlZl9vcCAoZ2ltcGxlIGcpCit7CisgIGlmICghZ2ltcGxlX2hhc19tZW1fb3BzIChnKSkKKyAgICByZXR1cm4gTlVMTF9ERUZfT1BFUkFORF9QOworICBpZiAoZy0+Z3NtZW1iYXNlLnZkZWYpCisgICAgcmV0dXJuICZnLT5nc21lbWJhc2UudmRlZjsKKyAgcmV0dXJuIE5VTExfREVGX09QRVJBTkRfUDsKK30KKworCisvKiBSZXR1cm4gdGhlIHNpbmdsZSBWVVNFIG9wZXJhbmQgb2YgdGhlIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfdnVzZSAoY29uc3RfZ2ltcGxlIGcpCit7CisgIGlmICghZ2ltcGxlX2hhc19tZW1fb3BzIChnKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworICByZXR1cm4gZy0+Z3NtZW1iYXNlLnZ1c2U7Cit9CisKKy8qIFJldHVybiB0aGUgc2luZ2xlIFZERUYgb3BlcmFuZCBvZiB0aGUgc3RhdGVtZW50IEcuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV92ZGVmIChjb25zdF9naW1wbGUgZykKK3sKKyAgaWYgKCFnaW1wbGVfaGFzX21lbV9vcHMgKGcpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIHJldHVybiBnLT5nc21lbWJhc2UudmRlZjsKK30KKworLyogUmV0dXJuIHRoZSBzaW5nbGUgVlVTRSBvcGVyYW5kIG9mIHRoZSBzdGF0ZW1lbnQgRy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfdnVzZV9wdHIgKGdpbXBsZSBnKQoreworICBpZiAoIWdpbXBsZV9oYXNfbWVtX29wcyAoZykpCisgICAgcmV0dXJuIE5VTEw7CisgIHJldHVybiAmZy0+Z3NtZW1iYXNlLnZ1c2U7Cit9CisKKy8qIFJldHVybiB0aGUgc2luZ2xlIFZERUYgb3BlcmFuZCBvZiB0aGUgc3RhdGVtZW50IEcuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX3ZkZWZfcHRyIChnaW1wbGUgZykKK3sKKyAgaWYgKCFnaW1wbGVfaGFzX21lbV9vcHMgKGcpKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gJmctPmdzbWVtYmFzZS52ZGVmOworfQorCisvKiBTZXQgdGhlIHNpbmdsZSBWVVNFIG9wZXJhbmQgb2YgdGhlIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X3Z1c2UgKGdpbXBsZSBnLCB0cmVlIHZ1c2UpCit7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfaGFzX21lbV9vcHMgKGcpKTsKKyAgZy0+Z3NtZW1iYXNlLnZ1c2UgPSB2dXNlOworfQorCisvKiBTZXQgdGhlIHNpbmdsZSBWREVGIG9wZXJhbmQgb2YgdGhlIHN0YXRlbWVudCBHLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X3ZkZWYgKGdpbXBsZSBnLCB0cmVlIHZkZWYpCit7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfaGFzX21lbV9vcHMgKGcpKTsKKyAgZy0+Z3NtZW1iYXNlLnZkZWYgPSB2ZGVmOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIHN0YXRlbWVudCBHIGhhcyBvcGVyYW5kcyBhbmQgdGhlIG1vZGlmaWVkIGZpZWxkIGhhcworICAgYmVlbiBzZXQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9tb2RpZmllZF9wIChjb25zdF9naW1wbGUgZykKK3sKKyAgcmV0dXJuIChnaW1wbGVfaGFzX29wcyAoZykpID8gKGJvb2wpIGctPmdzYmFzZS5tb2RpZmllZCA6IGZhbHNlOworfQorCisKKy8qIFNldCB0aGUgTU9ESUZJRUQgZmxhZyB0byBNT0RJRklFRFAsIGlmZiB0aGUgZ2ltcGxlIHN0YXRlbWVudCBHIGhhcworICAgYSBNT0RJRklFRCBmaWVsZC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3NldF9tb2RpZmllZCAoZ2ltcGxlIHMsIGJvb2wgbW9kaWZpZWRwKQoreworICBpZiAoZ2ltcGxlX2hhc19vcHMgKHMpKQorICAgIHMtPmdzYmFzZS5tb2RpZmllZCA9ICh1bnNpZ25lZCkgbW9kaWZpZWRwOworfQorCisKKy8qIFJldHVybiB0aGUgdHJlZSBjb2RlIGZvciB0aGUgZXhwcmVzc2lvbiBjb21wdXRlZCBieSBTVE1ULiAgVGhpcyBpcworICAgb25seSB2YWxpZCBmb3IgR0lNUExFX0NPTkQsIEdJTVBMRV9DQUxMIGFuZCBHSU1QTEVfQVNTSUdOLiAgRm9yCisgICBHSU1QTEVfQ0FMTCwgcmV0dXJuIENBTExfRVhQUiBhcyB0aGUgZXhwcmVzc2lvbiBjb2RlIGZvcgorICAgY29uc2lzdGVuY3kuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBjYWxsZXIgbmVlZHMgdG8gZGVhbCB3aXRoIHRoZQorICAgdGhyZWUga2luZHMgb2YgY29tcHV0YXRpb24gdGhhdCBHSU1QTEUgc3VwcG9ydHMuICAqLworCitzdGF0aWMgaW5saW5lIGVudW0gdHJlZV9jb2RlCitnaW1wbGVfZXhwcl9jb2RlIChjb25zdF9naW1wbGUgc3RtdCkKK3sKKyAgZW51bSBnaW1wbGVfY29kZSBjb2RlID0gZ2ltcGxlX2NvZGUgKHN0bXQpOworICBpZiAoY29kZSA9PSBHSU1QTEVfQVNTSUdOIHx8IGNvZGUgPT0gR0lNUExFX0NPTkQpCisgICAgcmV0dXJuIChlbnVtIHRyZWVfY29kZSkgc3RtdC0+Z3NiYXNlLnN1YmNvZGU7CisgIGVsc2UKKyAgICB7CisgICAgICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoY29kZSA9PSBHSU1QTEVfQ0FMTCk7CisgICAgICByZXR1cm4gQ0FMTF9FWFBSOworICAgIH0KK30KKworCisvKiBNYXJrIHN0YXRlbWVudCBTIGFzIG1vZGlmaWVkLCBhbmQgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCit1cGRhdGVfc3RtdCAoZ2ltcGxlIHMpCit7CisgIGlmIChnaW1wbGVfaGFzX29wcyAocykpCisgICAgeworICAgICAgZ2ltcGxlX3NldF9tb2RpZmllZCAocywgdHJ1ZSk7CisgICAgICB1cGRhdGVfc3RtdF9vcGVyYW5kcyAocyk7CisgICAgfQorfQorCisvKiBVcGRhdGUgc3RhdGVtZW50IFMgaWYgaXQgaGFzIGJlZW4gb3B0aW1pemVkLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCit1cGRhdGVfc3RtdF9pZl9tb2RpZmllZCAoZ2ltcGxlIHMpCit7CisgIGlmIChnaW1wbGVfbW9kaWZpZWRfcCAocykpCisgICAgdXBkYXRlX3N0bXRfb3BlcmFuZHMgKHMpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBzdGF0ZW1lbnQgU1RNVCBjb250YWlucyB2b2xhdGlsZSBvcGVyYW5kcy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2hhc192b2xhdGlsZV9vcHMgKGNvbnN0X2dpbXBsZSBzdG10KQoreworICBpZiAoZ2ltcGxlX2hhc19tZW1fb3BzIChzdG10KSkKKyAgICByZXR1cm4gc3RtdC0+Z3NiYXNlLmhhc192b2xhdGlsZV9vcHM7CisgIGVsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworLyogU2V0IHRoZSBIQVNfVk9MQVRJTEVfT1BTIGZsYWcgdG8gVk9MQVRJTEVQLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X2hhc192b2xhdGlsZV9vcHMgKGdpbXBsZSBzdG10LCBib29sIHZvbGF0aWxlcCkKK3sKKyAgaWYgKGdpbXBsZV9oYXNfbWVtX29wcyAoc3RtdCkpCisgICAgc3RtdC0+Z3NiYXNlLmhhc192b2xhdGlsZV9vcHMgPSAodW5zaWduZWQpIHZvbGF0aWxlcDsKK30KKworLyogUmV0dXJuIHRydWUgaWYgQkIgaXMgaW4gYSB0cmFuc2FjdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorYmxvY2tfaW5fdHJhbnNhY3Rpb24gKGJhc2ljX2Jsb2NrIGJiKQoreworICByZXR1cm4gZmxhZ190bSAmJiBiYi0+ZmxhZ3MgJiBCQl9JTl9UUkFOU0FDVElPTjsKK30KKworLyogUmV0dXJuIHRydWUgaWYgU1RNVCBpcyBpbiBhIHRyYW5zYWN0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfaW5fdHJhbnNhY3Rpb24gKGdpbXBsZSBzdG10KQoreworICByZXR1cm4gYmxvY2tfaW5fdHJhbnNhY3Rpb24gKGdpbXBsZV9iYiAoc3RtdCkpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBzdGF0ZW1lbnQgU1RNVCBtYXkgYWNjZXNzIG1lbW9yeS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX3JlZmVyZW5jZXNfbWVtb3J5X3AgKGdpbXBsZSBzdG10KQoreworICByZXR1cm4gZ2ltcGxlX2hhc19tZW1fb3BzIChzdG10KSAmJiBnaW1wbGVfdnVzZSAoc3RtdCk7Cit9CisKKworLyogUmV0dXJuIHRoZSBzdWJjb2RlIGZvciBPTVAgc3RhdGVtZW50IFMuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitnaW1wbGVfb21wX3N1YmNvZGUgKGNvbnN0X2dpbXBsZSBzKQoreworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoZ2ltcGxlX2NvZGUgKHMpID49IEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQKKwkgICAgICAmJiBnaW1wbGVfY29kZSAocykgPD0gR0lNUExFX09NUF9TSU5HTEUpOworICByZXR1cm4gcy0+Z3NiYXNlLnN1YmNvZGU7Cit9CisKKy8qIFNldCB0aGUgc3ViY29kZSBmb3IgT01QIHN0YXRlbWVudCBTIHRvIFNVQkNPREUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfc2V0X3N1YmNvZGUgKGdpbXBsZSBzLCB1bnNpZ25lZCBpbnQgc3ViY29kZSkKK3sKKyAgLyogV2Ugb25seSBoYXZlIDE2IGJpdHMgZm9yIHRoZSBzdWJjb2RlLiAgQXNzZXJ0IHRoYXQgd2UgYXJlIG5vdAorICAgICBvdmVyZmxvd2luZyBpdC4gICovCisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChzdWJjb2RlIDwgKDEgPDwgMTYpKTsKKyAgcy0+Z3NiYXNlLnN1YmNvZGUgPSBzdWJjb2RlOworfQorCisvKiBTZXQgdGhlIG5vd2FpdCBmbGFnIG9uIE9NUF9SRVRVUk4gc3RhdGVtZW50IFMuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfcmV0dXJuX3NldF9ub3dhaXQgKGdpbXBsZSBzKQoreworICBHSU1QTEVfQ0hFQ0sgKHMsIEdJTVBMRV9PTVBfUkVUVVJOKTsKKyAgcy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfT01QX1JFVFVSTl9OT1dBSVQ7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgT01QIHJldHVybiBzdGF0ZW1lbnQgRyBoYXMgdGhlIEdGX09NUF9SRVRVUk5fTk9XQUlUCisgICBmbGFnIHNldC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX29tcF9yZXR1cm5fbm93YWl0X3AgKGNvbnN0X2dpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfUkVUVVJOKTsKKyAgcmV0dXJuIChnaW1wbGVfb21wX3N1YmNvZGUgKGcpICYgR0ZfT01QX1JFVFVSTl9OT1dBSVQpICE9IDA7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgT01QIHNlY3Rpb24gc3RhdGVtZW50IEcgaGFzIHRoZSBHRl9PTVBfU0VDVElPTl9MQVNUCisgICBmbGFnIHNldC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX29tcF9zZWN0aW9uX2xhc3RfcCAoY29uc3RfZ2ltcGxlIGcpCit7CisgIEdJTVBMRV9DSEVDSyAoZywgR0lNUExFX09NUF9TRUNUSU9OKTsKKyAgcmV0dXJuIChnaW1wbGVfb21wX3N1YmNvZGUgKGcpICYgR0ZfT01QX1NFQ1RJT05fTEFTVCkgIT0gMDsKK30KKworCisvKiBTZXQgdGhlIEdGX09NUF9TRUNUSU9OX0xBU1QgZmxhZyBvbiBHLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3NlY3Rpb25fc2V0X2xhc3QgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfU0VDVElPTik7CisgIGctPmdzYmFzZS5zdWJjb2RlIHw9IEdGX09NUF9TRUNUSU9OX0xBU1Q7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgT01QIHBhcmFsbGVsIHN0YXRlbWVudCBHIGhhcyB0aGUKKyAgIEdGX09NUF9QQVJBTExFTF9DT01CSU5FRCBmbGFnIHNldC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX29tcF9wYXJhbGxlbF9jb21iaW5lZF9wIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX1BBUkFMTEVMKTsKKyAgcmV0dXJuIChnaW1wbGVfb21wX3N1YmNvZGUgKGcpICYgR0ZfT01QX1BBUkFMTEVMX0NPTUJJTkVEKSAhPSAwOworfQorCisKKy8qIFNldCB0aGUgR0ZfT01QX1BBUkFMTEVMX0NPTUJJTkVEIGZpZWxkIGluIEcgZGVwZW5kaW5nIG9uIHRoZSBib29sZWFuCisgICB2YWx1ZSBvZiBDT01CSU5FRF9QLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3BhcmFsbGVsX3NldF9jb21iaW5lZF9wIChnaW1wbGUgZywgYm9vbCBjb21iaW5lZF9wKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICBpZiAoY29tYmluZWRfcCkKKyAgICBnLT5nc2Jhc2Uuc3ViY29kZSB8PSBHRl9PTVBfUEFSQUxMRUxfQ09NQklORUQ7CisgIGVsc2UKKyAgICBnLT5nc2Jhc2Uuc3ViY29kZSAmPSB+R0ZfT01QX1BBUkFMTEVMX0NPTUJJTkVEOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIE9NUCBhdG9taWMgbG9hZC9zdG9yZSBzdGF0ZW1lbnQgRyBoYXMgdGhlCisgICBHRl9PTVBfQVRPTUlDX05FRURfVkFMVUUgZmxhZyBzZXQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9vbXBfYXRvbWljX25lZWRfdmFsdWVfcCAoY29uc3RfZ2ltcGxlIGcpCit7CisgIGlmIChnaW1wbGVfY29kZSAoZykgIT0gR0lNUExFX09NUF9BVE9NSUNfTE9BRCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQVRPTUlDX1NUT1JFKTsKKyAgcmV0dXJuIChnaW1wbGVfb21wX3N1YmNvZGUgKGcpICYgR0ZfT01QX0FUT01JQ19ORUVEX1ZBTFVFKSAhPSAwOworfQorCisKKy8qIFNldCB0aGUgR0ZfT01QX0FUT01JQ19ORUVEX1ZBTFVFIGZsYWcgb24gRy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9hdG9taWNfc2V0X25lZWRfdmFsdWUgKGdpbXBsZSBnKQoreworICBpZiAoZ2ltcGxlX2NvZGUgKGcpICE9IEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQpCisgICAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19TVE9SRSk7CisgIGctPmdzYmFzZS5zdWJjb2RlIHw9IEdGX09NUF9BVE9NSUNfTkVFRF9WQUxVRTsKK30KKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBvcGVyYW5kcyBmb3Igc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX251bV9vcHMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgcmV0dXJuIGdzLT5nc2Jhc2UubnVtX29wczsKK30KKworCisvKiBTZXQgdGhlIG51bWJlciBvZiBvcGVyYW5kcyBmb3Igc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc2V0X251bV9vcHMgKGdpbXBsZSBncywgdW5zaWduZWQgbnVtX29wcykKK3sKKyAgZ3MtPmdzYmFzZS5udW1fb3BzID0gbnVtX29wczsKK30KKworCisvKiBSZXR1cm4gdGhlIGFycmF5IG9mIG9wZXJhbmRzIGZvciBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29wcyAoZ2ltcGxlIGdzKQoreworICBzaXplX3Qgb2ZmOworCisgIC8qIEFsbCB0aGUgdHVwbGVzIGhhdmUgdGhlaXIgb3BlcmFuZCB2ZWN0b3IgYXQgdGhlIHZlcnkgYm90dG9tCisgICAgIG9mIHRoZSBzdHJ1Y3R1cmUuICBOb3RlIHRoYXQgdGhvc2Ugc3RydWN0dXJlcyB0aGF0IGRvIG5vdAorICAgICBoYXZlIGFuIG9wZXJhbmQgdmVjdG9yIGhhdmUgYSB6ZXJvIG9mZnNldC4gICovCisgIG9mZiA9IGdpbXBsZV9vcHNfb2Zmc2V0X1tnaW1wbGVfc3RhdGVtZW50X3N0cnVjdHVyZSAoZ3MpXTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKG9mZiAhPSAwKTsKKworICByZXR1cm4gKHRyZWUgKikgKChjaGFyICopIGdzICsgb2ZmKTsKK30KKworCisvKiBSZXR1cm4gb3BlcmFuZCBJIGZvciBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vcCAoY29uc3RfZ2ltcGxlIGdzLCB1bnNpZ25lZCBpKQoreworICBpZiAoZ2ltcGxlX2hhc19vcHMgKGdzKSkKKyAgICB7CisgICAgICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoaSA8IGdpbXBsZV9udW1fb3BzIChncykpOworICAgICAgcmV0dXJuIGdpbXBsZV9vcHMgKENPTlNUX0NBU1RfR0lNUExFIChncykpW2ldOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gb3BlcmFuZCBJIGZvciBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29wX3B0ciAoY29uc3RfZ2ltcGxlIGdzLCB1bnNpZ25lZCBpKQoreworICBpZiAoZ2ltcGxlX2hhc19vcHMgKGdzKSkKKyAgICB7CisgICAgICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoaSA8IGdpbXBsZV9udW1fb3BzIChncykpOworICAgICAgcmV0dXJuIGdpbXBsZV9vcHMgKENPTlNUX0NBU1RfR0lNUExFIChncykpICsgaTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogU2V0IG9wZXJhbmQgSSBvZiBzdGF0ZW1lbnQgR1MgdG8gT1AuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zZXRfb3AgKGdpbXBsZSBncywgdW5zaWduZWQgaSwgdHJlZSBvcCkKK3sKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9oYXNfb3BzIChncykgJiYgaSA8IGdpbXBsZV9udW1fb3BzIChncykpOworCisgIC8qIE5vdGUuICBJdCBtYXkgYmUgdGVtcHRpbmcgdG8gYXNzZXJ0IHRoYXQgT1AgbWF0Y2hlcworICAgICBpc19naW1wbGVfb3BlcmFuZCwgYnV0IHRoYXQgd291bGQgYmUgd3JvbmcuICBEaWZmZXJlbnQgdHVwbGVzCisgICAgIGFjY2VwdCBzbGlnaHRseSBkaWZmZXJlbnQgc2V0cyBvZiB0cmVlIG9wZXJhbmRzLiAgRWFjaCBjYWxsZXIKKyAgICAgc2hvdWxkIHBlcmZvcm0gaXRzIG93biB2YWxpZGF0aW9uLiAgKi8KKyAgZ2ltcGxlX29wcyAoZ3MpW2ldID0gb3A7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIEdTIGlzIGEgR0lNUExFX0FTU0lHTi4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfZ2ltcGxlX2Fzc2lnbiAoY29uc3RfZ2ltcGxlIGdzKQoreworICByZXR1cm4gZ2ltcGxlX2NvZGUgKGdzKSA9PSBHSU1QTEVfQVNTSUdOOworfQorCisvKiBEZXRlcm1pbmUgaWYgZXhwcmVzc2lvbiBDT0RFIGlzIG9uZSBvZiB0aGUgdmFsaWQgZXhwcmVzc2lvbnMgdGhhdCBjYW4KKyAgIGJlIHVzZWQgb24gdGhlIFJIUyBvZiBHSU1QTEUgYXNzaWdubWVudHMuICAqLworCitzdGF0aWMgaW5saW5lIGVudW0gZ2ltcGxlX3Joc19jbGFzcworZ2V0X2dpbXBsZV9yaHNfY2xhc3MgKGVudW0gdHJlZV9jb2RlIGNvZGUpCit7CisgIHJldHVybiAoZW51bSBnaW1wbGVfcmhzX2NsYXNzKSBnaW1wbGVfcmhzX2NsYXNzX3RhYmxlWyhpbnQpIGNvZGVdOworfQorCisvKiBSZXR1cm4gdGhlIExIUyBvZiBhc3NpZ25tZW50IHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2Fzc2lnbl9saHMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTU0lHTik7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAwKTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBMSFMgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2Fzc2lnbl9saHNfcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIDApOworfQorCisKKy8qIFNldCBMSFMgdG8gYmUgdGhlIExIUyBvcGVyYW5kIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfYXNzaWduX3NldF9saHMgKGdpbXBsZSBncywgdHJlZSBsaHMpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworICBnaW1wbGVfc2V0X29wIChncywgMCwgbGhzKTsKKworICBpZiAobGhzICYmIFRSRUVfQ09ERSAobGhzKSA9PSBTU0FfTkFNRSkKKyAgICBTU0FfTkFNRV9ERUZfU1RNVCAobGhzKSA9IGdzOworfQorCisKKy8qIFJldHVybiB0aGUgZmlyc3Qgb3BlcmFuZCBvbiB0aGUgUkhTIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYXNzaWduX3JoczEgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTU0lHTik7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAxKTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvcGVyYW5kIG9uIHRoZSBSSFMgb2YgYXNzaWdubWVudAorICAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9hc3NpZ25fcmhzMV9wdHIgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTU0lHTik7CisgIHJldHVybiBnaW1wbGVfb3BfcHRyIChncywgMSk7Cit9CisKKy8qIFNldCBSSFMgdG8gYmUgdGhlIGZpcnN0IG9wZXJhbmQgb24gdGhlIFJIUyBvZiBhc3NpZ25tZW50IHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2Fzc2lnbl9zZXRfcmhzMSAoZ2ltcGxlIGdzLCB0cmVlIHJocykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTU0lHTik7CisKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDEsIHJocyk7Cit9CisKKworLyogUmV0dXJuIHRoZSBzZWNvbmQgb3BlcmFuZCBvbiB0aGUgUkhTIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50IEdTLgorICAgSWYgR1MgZG9lcyBub3QgaGF2ZSB0d28gb3BlcmFuZHMsIE5VTEwgaXMgcmV0dXJuZWQgaW5zdGVhZC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2Fzc2lnbl9yaHMyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworCisgIGlmIChnaW1wbGVfbnVtX29wcyAoZ3MpID49IDMpCisgICAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDIpOworICBlbHNlCisgICAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzZWNvbmQgb3BlcmFuZCBvbiB0aGUgUkhTIG9mIGFzc2lnbm1lbnQKKyAgIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfYXNzaWduX3JoczJfcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIDIpOworfQorCisKKy8qIFNldCBSSFMgdG8gYmUgdGhlIHNlY29uZCBvcGVyYW5kIG9uIHRoZSBSSFMgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc3NpZ25fc2V0X3JoczIgKGdpbXBsZSBncywgdHJlZSByaHMpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworCisgIGdpbXBsZV9zZXRfb3AgKGdzLCAyLCByaHMpOworfQorCisvKiBSZXR1cm4gdGhlIHRoaXJkIG9wZXJhbmQgb24gdGhlIFJIUyBvZiBhc3NpZ25tZW50IHN0YXRlbWVudCBHUy4KKyAgIElmIEdTIGRvZXMgbm90IGhhdmUgdHdvIG9wZXJhbmRzLCBOVUxMIGlzIHJldHVybmVkIGluc3RlYWQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9hc3NpZ25fcmhzMyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKworICBpZiAoZ2ltcGxlX251bV9vcHMgKGdzKSA+PSA0KQorICAgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAzKTsKKyAgZWxzZQorICAgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRoaXJkIG9wZXJhbmQgb24gdGhlIFJIUyBvZiBhc3NpZ25tZW50CisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2Fzc2lnbl9yaHMzX3B0ciAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAzKTsKK30KKworCisvKiBTZXQgUkhTIHRvIGJlIHRoZSB0aGlyZCBvcGVyYW5kIG9uIHRoZSBSSFMgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc3NpZ25fc2V0X3JoczMgKGdpbXBsZSBncywgdHJlZSByaHMpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU1NJR04pOworCisgIGdpbXBsZV9zZXRfb3AgKGdzLCAzLCByaHMpOworfQorCisvKiBBIHdyYXBwZXIgYXJvdW5kIGdpbXBsZV9hc3NpZ25fc2V0X3Joc193aXRoX29wc18xLCBmb3IgY2FsbGVycyB3aGljaCBleHBlY3QKKyAgIHRvIHNlZSBvbmx5IGEgbWF4aW11bSBvZiB0d28gb3BlcmFuZHMuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc3NpZ25fc2V0X3Joc193aXRoX29wcyAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwgZW51bSB0cmVlX2NvZGUgY29kZSwKKwkJCQl0cmVlIG9wMSwgdHJlZSBvcDIpCit7CisgIGdpbXBsZV9hc3NpZ25fc2V0X3Joc193aXRoX29wc18xIChnc2ksIGNvZGUsIG9wMSwgb3AyLCBOVUxMKTsKK30KKworLyogQSB3cmFwcGVyIGFyb3VuZCBleHRyYWN0X29wc19mcm9tX3RyZWVfMSwgZm9yIGNhbGxlcnMgd2hpY2ggZXhwZWN0CisgICB0byBzZWUgb25seSBhIG1heGltdW0gb2YgdHdvIG9wZXJhbmRzLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitleHRyYWN0X29wc19mcm9tX3RyZWUgKHRyZWUgZXhwciwgZW51bSB0cmVlX2NvZGUgKmNvZGUsIHRyZWUgKm9wMCwKKwkJICAgICAgIHRyZWUgKm9wMSkKK3sKKyAgdHJlZSBvcDI7CisgIGV4dHJhY3Rfb3BzX2Zyb21fdHJlZV8xIChleHByLCBjb2RlLCBvcDAsIG9wMSwgJm9wMik7CisgIGdjY19hc3NlcnQgKG9wMiA9PSBOVUxMX1RSRUUpOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgR1MgaXMgYSBub250ZW1wb3JhbCBtb3ZlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfYXNzaWduX25vbnRlbXBvcmFsX21vdmVfcCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKyAgcmV0dXJuIGdzLT5nc2Jhc2Uubm9udGVtcG9yYWxfbW92ZTsKK30KKworLyogU2V0cyBub250ZW1wb3JhbCBtb3ZlIGZsYWcgb2YgR1MgdG8gTk9OVEVNUE9SQUwuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc3NpZ25fc2V0X25vbnRlbXBvcmFsX21vdmUgKGdpbXBsZSBncywgYm9vbCBub250ZW1wb3JhbCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTU0lHTik7CisgIGdzLT5nc2Jhc2Uubm9udGVtcG9yYWxfbW92ZSA9IG5vbnRlbXBvcmFsOworfQorCisKKy8qIFJldHVybiB0aGUgY29kZSBvZiB0aGUgZXhwcmVzc2lvbiBjb21wdXRlZCBvbiB0aGUgcmhzIG9mIGFzc2lnbm1lbnQKKyAgIHN0YXRlbWVudCBHUy4gIEluIGNhc2UgdGhhdCB0aGUgUkhTIGlzIGEgc2luZ2xlIG9iamVjdCwgcmV0dXJucyB0aGUKKyAgIHRyZWUgY29kZSBvZiB0aGUgb2JqZWN0LiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIHRyZWVfY29kZQorZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAoY29uc3RfZ2ltcGxlIGdzKQoreworICBlbnVtIHRyZWVfY29kZSBjb2RlOworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNTSUdOKTsKKworICBjb2RlID0gKGVudW0gdHJlZV9jb2RlKSBncy0+Z3NiYXNlLnN1YmNvZGU7CisgIC8qIFdoaWxlIHdlIGluaXRpYWxseSBzZXQgc3ViY29kZSB0byB0aGUgVFJFRV9DT0RFIG9mIHRoZSByaHMgZm9yCisgICAgIEdJTVBMRV9TSU5HTEVfUkhTIGFzc2lnbnMgd2UgZG8gbm90IHVwZGF0ZSB0aGF0IHN1YmNvZGUgdG8gc3RheQorICAgICBpbiBzeW5jIHdoZW4gd2UgcmV3cml0ZSBzdG10cyBpbnRvIFNTQSBmb3JtIG9yIGRvIFNTQSBwcm9wYWdhdGlvbnMuICAqLworICBpZiAoZ2V0X2dpbXBsZV9yaHNfY2xhc3MgKGNvZGUpID09IEdJTVBMRV9TSU5HTEVfUkhTKQorICAgIGNvZGUgPSBUUkVFX0NPREUgKGdpbXBsZV9hc3NpZ25fcmhzMSAoZ3MpKTsKKworICByZXR1cm4gY29kZTsKK30KKworCisvKiBTZXQgQ09ERSB0byBiZSB0aGUgY29kZSBmb3IgdGhlIGV4cHJlc3Npb24gY29tcHV0ZWQgb24gdGhlIFJIUyBvZgorICAgYXNzaWdubWVudCBTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfYXNzaWduX3NldF9yaHNfY29kZSAoZ2ltcGxlIHMsIGVudW0gdHJlZV9jb2RlIGNvZGUpCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0FTU0lHTik7CisgIHMtPmdzYmFzZS5zdWJjb2RlID0gY29kZTsKK30KKworCisvKiBSZXR1cm4gdGhlIGdpbXBsZSByaHMgY2xhc3Mgb2YgdGhlIGNvZGUgb2YgdGhlIGV4cHJlc3Npb24gY29tcHV0ZWQgb24KKyAgIHRoZSByaHMgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQgR1MuCisgICBUaGlzIHdpbGwgbmV2ZXIgcmV0dXJuIEdJTVBMRV9JTlZBTElEX1JIUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBnaW1wbGVfcmhzX2NsYXNzCitnaW1wbGVfYXNzaWduX3Joc19jbGFzcyAoY29uc3RfZ2ltcGxlIGdzKQoreworICByZXR1cm4gZ2V0X2dpbXBsZV9yaHNfY2xhc3MgKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGdzKSk7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIEdTIGlzIGFuIGFzc2lnbm1lbnQgd2l0aCBhIHNpbmdsZXRvbiBSSFMsIGkuZS4sCisgICB0aGVyZSBpcyBubyBvcGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGFzc2lnbm1lbnQgaXRzZWxmLgorICAgVW5saWtlIGdpbXBsZV9hc3NpZ25fY29weV9wLCB0aGlzIHByZWRpY2F0ZSByZXR1cm5zIHRydWUgZm9yCisgICBhbnkgUkhTIG9wZXJhbmQsIGluY2x1ZGluZyB0aG9zZSB0aGF0IHBlcmZvcm0gYW4gb3BlcmF0aW9uCisgICBhbmQgZG8gbm90IGhhdmUgdGhlIHNlbWFudGljcyBvZiBhIGNvcHksIHN1Y2ggYXMgQ09ORF9FWFBSLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfYXNzaWduX3NpbmdsZV9wIChnaW1wbGUgZ3MpCit7CisgIHJldHVybiAoaXNfZ2ltcGxlX2Fzc2lnbiAoZ3MpCisgICAgICAgICAgJiYgZ2ltcGxlX2Fzc2lnbl9yaHNfY2xhc3MgKGdzKSA9PSBHSU1QTEVfU0lOR0xFX1JIUyk7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIEdTIHBlcmZvcm1zIGEgc3RvcmUgdG8gaXRzIGxocy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX3N0b3JlX3AgKGdpbXBsZSBncykKK3sKKyAgdHJlZSBsaHMgPSBnaW1wbGVfZ2V0X2xocyAoZ3MpOworICByZXR1cm4gbGhzICYmICFpc19naW1wbGVfcmVnIChsaHMpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBHUyBpcyBhbiBhc3NpZ25tZW50IHRoYXQgbG9hZHMgZnJvbSBpdHMgcmhzMS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2Fzc2lnbl9sb2FkX3AgKGdpbXBsZSBncykKK3sKKyAgdHJlZSByaHM7CisgIGlmICghZ2ltcGxlX2Fzc2lnbl9zaW5nbGVfcCAoZ3MpKQorICAgIHJldHVybiBmYWxzZTsKKyAgcmhzID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChncyk7CisgIGlmIChUUkVFX0NPREUgKHJocykgPT0gV0lUSF9TSVpFX0VYUFIpCisgICAgcmV0dXJuIHRydWU7CisgIHJocyA9IGdldF9iYXNlX2FkZHJlc3MgKHJocyk7CisgIHJldHVybiAoREVDTF9QIChyaHMpCisJICB8fCBUUkVFX0NPREUgKHJocykgPT0gTUVNX1JFRiB8fCBUUkVFX0NPREUgKHJocykgPT0gVEFSR0VUX01FTV9SRUYpOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIFMgaXMgYSB0eXBlLWNhc3QgYXNzaWdubWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2Fzc2lnbl9jYXN0X3AgKGdpbXBsZSBzKQoreworICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAocykpCisgICAgeworICAgICAgZW51bSB0cmVlX2NvZGUgc2MgPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChzKTsKKyAgICAgIHJldHVybiBDT05WRVJUX0VYUFJfQ09ERV9QIChzYykKKwkgICAgIHx8IHNjID09IFZJRVdfQ09OVkVSVF9FWFBSCisJICAgICB8fCBzYyA9PSBGSVhfVFJVTkNfRVhQUjsKKyAgICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBTIGlzIGEgY2xvYmJlciBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jbG9iYmVyX3AgKGdpbXBsZSBzKQoreworICByZXR1cm4gZ2ltcGxlX2Fzc2lnbl9zaW5nbGVfcCAocykKKyAgICAgICAgICYmIFRSRUVfQ0xPQkJFUl9QIChnaW1wbGVfYXNzaWduX3JoczEgKHMpKTsKK30KKworLyogUmV0dXJuIHRydWUgaWYgR1MgaXMgYSBHSU1QTEVfQ0FMTC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfZ2ltcGxlX2NhbGwgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgcmV0dXJuIGdpbXBsZV9jb2RlIChncykgPT0gR0lNUExFX0NBTEw7Cit9CisKKy8qIFJldHVybiB0aGUgTEhTIG9mIGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY2FsbF9saHMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMCk7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgTEhTIG9mIGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9jYWxsX2xoc19wdHIgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIDApOworfQorCisKKy8qIFNldCBMSFMgdG8gYmUgdGhlIExIUyBvcGVyYW5kIG9mIGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9zZXRfbGhzIChnaW1wbGUgZ3MsIHRyZWUgbGhzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FMTCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCAwLCBsaHMpOworICBpZiAobGhzICYmIFRSRUVfQ09ERSAobGhzKSA9PSBTU0FfTkFNRSkKKyAgICBTU0FfTkFNRV9ERUZfU1RNVCAobGhzKSA9IGdzOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIGNhbGwgR1MgY2FsbHMgYW4gaW50ZXJuYWwtb25seSBmdW5jdGlvbiwgYXMgZW51bWVyYXRlZAorICAgYnkgaW50ZXJuYWxfZm4uICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jYWxsX2ludGVybmFsX3AgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICByZXR1cm4gKGdzLT5nc2Jhc2Uuc3ViY29kZSAmIEdGX0NBTExfSU5URVJOQUwpICE9IDA7Cit9CisKKworLyogUmV0dXJuIHRoZSB0YXJnZXQgb2YgaW50ZXJuYWwgY2FsbCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBpbnRlcm5hbF9mbgorZ2ltcGxlX2NhbGxfaW50ZXJuYWxfZm4gKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKGdzKSk7CisgIHJldHVybiBncy0+Z2ltcGxlX2NhbGwudS5pbnRlcm5hbF9mbjsKK30KKworCisvKiBSZXR1cm4gdGhlIGZ1bmN0aW9uIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2NhbGxfZm50eXBlIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgaWYgKGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKGdzKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworICByZXR1cm4gZ3MtPmdpbXBsZV9jYWxsLnUuZm50eXBlOworfQorCisvKiBTZXQgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBHUyB0byBGTlRZUEUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF9mbnR5cGUgKGdpbXBsZSBncywgdHJlZSBmbnR5cGUpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKCFnaW1wbGVfY2FsbF9pbnRlcm5hbF9wIChncykpOworICBncy0+Z2ltcGxlX2NhbGwudS5mbnR5cGUgPSBmbnR5cGU7Cit9CisKKworLyogUmV0dXJuIHRoZSB0cmVlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgY2FsbAorICAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY2FsbF9mbiAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAxKTsKK30KKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdHJlZSBub2RlIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IGNhbGwKKyAgIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfY2FsbF9mbl9wdHIgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIDEpOworfQorCisKKy8qIFNldCBGTiB0byBiZSB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9zZXRfZm4gKGdpbXBsZSBncywgdHJlZSBmbikKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoIWdpbXBsZV9jYWxsX2ludGVybmFsX3AgKGdzKSk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCAxLCBmbik7Cit9CisKKworLyogU2V0IEZOREVDTCB0byBiZSB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9zZXRfZm5kZWNsIChnaW1wbGUgZ3MsIHRyZWUgZGVjbCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoIWdpbXBsZV9jYWxsX2ludGVybmFsX3AgKGdzKSk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCAxLCBidWlsZF9mb2xkX2FkZHJfZXhwcl9sb2MgKGdpbXBsZV9sb2NhdGlvbiAoZ3MpLCBkZWNsKSk7Cit9CisKKworLyogU2V0IGludGVybmFsIGZ1bmN0aW9uIEZOIHRvIGJlIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF9pbnRlcm5hbF9mbiAoZ2ltcGxlIGdzLCBlbnVtIGludGVybmFsX2ZuIGZuKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FMTCk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfY2FsbF9pbnRlcm5hbF9wIChncykpOworICBncy0+Z2ltcGxlX2NhbGwudS5pbnRlcm5hbF9mbiA9IGZuOworfQorCisKKy8qIEdpdmVuIGEgdmFsaWQgR0lNUExFX0NBTEwgZnVuY3Rpb24gYWRkcmVzcyByZXR1cm4gdGhlIEZVTkNUSU9OX0RFQ0wKKyAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsbGVlIGlmIGtub3duLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMX1RSRUUuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jYWxsX2FkZHJfZm5kZWNsIChjb25zdF90cmVlIGZuKQoreworICBpZiAoZm4gJiYgVFJFRV9DT0RFIChmbikgPT0gQUREUl9FWFBSKQorICAgIHsKKyAgICAgIHRyZWUgZm5kZWNsID0gVFJFRV9PUEVSQU5EIChmbiwgMCk7CisgICAgICBpZiAoVFJFRV9DT0RFIChmbmRlY2wpID09IE1FTV9SRUYKKwkgICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EIChmbmRlY2wsIDApKSA9PSBBRERSX0VYUFIKKwkgICYmIGludGVnZXJfemVyb3AgKFRSRUVfT1BFUkFORCAoZm5kZWNsLCAxKSkpCisJZm5kZWNsID0gVFJFRV9PUEVSQU5EIChUUkVFX09QRVJBTkQgKGZuZGVjbCwgMCksIDApOworICAgICAgaWYgKFRSRUVfQ09ERSAoZm5kZWNsKSA9PSBGVU5DVElPTl9ERUNMKQorCXJldHVybiBmbmRlY2w7CisgICAgfQorICByZXR1cm4gTlVMTF9UUkVFOworfQorCisvKiBJZiBhIGdpdmVuIEdJTVBMRV9DQUxMJ3MgY2FsbGVlIGlzIGEgRlVOQ1RJT05fREVDTCwgcmV0dXJuIGl0LgorICAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgVGhpcyBmdW5jdGlvbiBpcyBhbmFsb2dvdXMgdG8KKyAgIGdldF9jYWxsZWVfZm5kZWNsIGluIHRyZWUgbGFuZC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2NhbGxfZm5kZWNsIChjb25zdF9naW1wbGUgZ3MpCit7CisgIHJldHVybiBnaW1wbGVfY2FsbF9hZGRyX2ZuZGVjbCAoZ2ltcGxlX2NhbGxfZm4gKGdzKSk7Cit9CisKKworLyogUmV0dXJuIHRoZSB0eXBlIHJldHVybmVkIGJ5IGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY2FsbF9yZXR1cm5fdHlwZSAoY29uc3RfZ2ltcGxlIGdzKQoreworICB0cmVlIHR5cGUgPSBnaW1wbGVfY2FsbF9mbnR5cGUgKGdzKTsKKworICBpZiAodHlwZSA9PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuIFRSRUVfVFlQRSAoZ2ltcGxlX2NhbGxfbGhzIChncykpOworCisgIC8qIFRoZSB0eXBlIHJldHVybmVkIGJ5IGEgZnVuY3Rpb24gaXMgdGhlIHR5cGUgb2YgaXRzCisgICAgIGZ1bmN0aW9uIHR5cGUuICAqLworICByZXR1cm4gVFJFRV9UWVBFICh0eXBlKTsKK30KKworCisvKiBSZXR1cm4gdGhlIHN0YXRpYyBjaGFpbiBmb3IgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jYWxsX2NoYWluIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDIpOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN0YXRpYyBjaGFpbiBmb3IgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2NhbGxfY2hhaW5fcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAyKTsKK30KKworLyogU2V0IENIQUlOIHRvIGJlIHRoZSBzdGF0aWMgY2hhaW4gZm9yIGNhbGwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9zZXRfY2hhaW4gKGdpbXBsZSBncywgdHJlZSBjaGFpbikKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworCisgIGdpbXBsZV9zZXRfb3AgKGdzLCAyLCBjaGFpbik7Cit9CisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHVzZWQgYnkgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitnaW1wbGVfY2FsbF9udW1fYXJncyAoY29uc3RfZ2ltcGxlIGdzKQoreworICB1bnNpZ25lZCBudW1fb3BzOworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FMTCk7CisgIG51bV9vcHMgPSBnaW1wbGVfbnVtX29wcyAoZ3MpOworICByZXR1cm4gbnVtX29wcyAtIDM7Cit9CisKKworLyogUmV0dXJuIHRoZSBhcmd1bWVudCBhdCBwb3NpdGlvbiBJTkRFWCBmb3IgY2FsbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jYWxsX2FyZyAoY29uc3RfZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBTEwpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgaW5kZXggKyAzKTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBhcmd1bWVudCBhdCBwb3NpdGlvbiBJTkRFWCBmb3IgY2FsbAorICAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9jYWxsX2FyZ19wdHIgKGNvbnN0X2dpbXBsZSBncywgdW5zaWduZWQgaW5kZXgpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCBpbmRleCArIDMpOworfQorCisKKy8qIFNldCBBUkcgdG8gYmUgdGhlIGFyZ3VtZW50IGF0IHBvc2l0aW9uIElOREVYIGZvciBjYWxsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NhbGxfc2V0X2FyZyAoZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCwgdHJlZSBhcmcpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQUxMKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIGluZGV4ICsgMywgYXJnKTsKK30KKworCisvKiBJZiBUQUlMX1AgaXMgdHJ1ZSwgbWFyayBjYWxsIHN0YXRlbWVudCBTIGFzIGJlaW5nIGEgdGFpbCBjYWxsCisgICAoaS5lLiwgYSBjYWxsIGp1c3QgYmVmb3JlIHRoZSBleGl0IG9mIGEgZnVuY3Rpb24pLiAgVGhlc2UgY2FsbHMgYXJlCisgICBjYW5kaWRhdGUgZm9yIHRhaWwgY2FsbCBvcHRpbWl6YXRpb24uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF90YWlsIChnaW1wbGUgcywgYm9vbCB0YWlsX3ApCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICBpZiAodGFpbF9wKQorICAgIHMtPmdzYmFzZS5zdWJjb2RlIHw9IEdGX0NBTExfVEFJTENBTEw7CisgIGVsc2UKKyAgICBzLT5nc2Jhc2Uuc3ViY29kZSAmPSB+R0ZfQ0FMTF9UQUlMQ0FMTDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBHSU1QTEVfQ0FMTCBTIGlzIG1hcmtlZCBhcyBhIHRhaWwgY2FsbC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2NhbGxfdGFpbF9wIChnaW1wbGUgcykKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiAocy0+Z3NiYXNlLnN1YmNvZGUgJiBHRl9DQUxMX1RBSUxDQUxMKSAhPSAwOworfQorCisKKy8qIElmIFJFVFVSTl9TTE9UX09QVF9QIGlzIHRydWUgbWFyayBHSU1QTEVfQ0FMTCBTIGFzIHZhbGlkIGZvciByZXR1cm4KKyAgIHNsb3Qgb3B0aW1pemF0aW9uLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbiB1c2VzIHRoZSB0YXJnZXQgb2YgdGhlIGNhbGwKKyAgIGV4cGFuc2lvbiBhcyB0aGUgcmV0dXJuIHNsb3QgZm9yIGNhbGxzIHRoYXQgcmV0dXJuIGluIG1lbW9yeS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NhbGxfc2V0X3JldHVybl9zbG90X29wdCAoZ2ltcGxlIHMsIGJvb2wgcmV0dXJuX3Nsb3Rfb3B0X3ApCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICBpZiAocmV0dXJuX3Nsb3Rfb3B0X3ApCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfQ0FMTF9SRVRVUk5fU0xPVF9PUFQ7CisgIGVsc2UKKyAgICBzLT5nc2Jhc2Uuc3ViY29kZSAmPSB+R0ZfQ0FMTF9SRVRVUk5fU0xPVF9PUFQ7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgUyBpcyBtYXJrZWQgZm9yIHJldHVybiBzbG90IG9wdGltaXphdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2NhbGxfcmV0dXJuX3Nsb3Rfb3B0X3AgKGdpbXBsZSBzKQoreworICBHSU1QTEVfQ0hFQ0sgKHMsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuIChzLT5nc2Jhc2Uuc3ViY29kZSAmIEdGX0NBTExfUkVUVVJOX1NMT1RfT1BUKSAhPSAwOworfQorCisKKy8qIElmIEZST01fVEhVTktfUCBpcyB0cnVlLCBtYXJrIEdJTVBMRV9DQUxMIFMgYXMgYmVpbmcgdGhlIGp1bXAgZnJvbSBhCisgICB0aHVuayB0byB0aGUgdGh1bmtlZC10byBmdW5jdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NhbGxfc2V0X2Zyb21fdGh1bmsgKGdpbXBsZSBzLCBib29sIGZyb21fdGh1bmtfcCkKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIGlmIChmcm9tX3RodW5rX3ApCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfQ0FMTF9GUk9NX1RIVU5LOworICBlbHNlCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX0NBTExfRlJPTV9USFVOSzsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBHSU1QTEVfQ0FMTCBTIGlzIGEganVtcCBmcm9tIGEgdGh1bmsuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jYWxsX2Zyb21fdGh1bmtfcCAoZ2ltcGxlIHMpCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICByZXR1cm4gKHMtPmdzYmFzZS5zdWJjb2RlICYgR0ZfQ0FMTF9GUk9NX1RIVU5LKSAhPSAwOworfQorCisKKy8qIElmIFBBU1NfQVJHX1BBQ0tfUCBpcyB0cnVlLCBHSU1QTEVfQ0FMTCBTIGlzIGEgc3RkYXJnIGNhbGwgdGhhdCBuZWVkcyB0aGUKKyAgIGFyZ3VtZW50IHBhY2sgaW4gaXRzIGFyZ3VtZW50IGxpc3QuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYWxsX3NldF92YV9hcmdfcGFjayAoZ2ltcGxlIHMsIGJvb2wgcGFzc19hcmdfcGFja19wKQoreworICBHSU1QTEVfQ0hFQ0sgKHMsIEdJTVBMRV9DQUxMKTsKKyAgaWYgKHBhc3NfYXJnX3BhY2tfcCkKKyAgICBzLT5nc2Jhc2Uuc3ViY29kZSB8PSBHRl9DQUxMX1ZBX0FSR19QQUNLOworICBlbHNlCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX0NBTExfVkFfQVJHX1BBQ0s7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgR0lNUExFX0NBTEwgUyBpcyBhIHN0ZGFyZyBjYWxsIHRoYXQgbmVlZHMgdGhlCisgICBhcmd1bWVudCBwYWNrIGluIGl0cyBhcmd1bWVudCBsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfY2FsbF92YV9hcmdfcGFja19wIChnaW1wbGUgcykKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiAocy0+Z3NiYXNlLnN1YmNvZGUgJiBHRl9DQUxMX1ZBX0FSR19QQUNLKSAhPSAwOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIFMgaXMgYSBub3JldHVybiBjYWxsLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfY2FsbF9ub3JldHVybl9wIChnaW1wbGUgcykKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiAoZ2ltcGxlX2NhbGxfZmxhZ3MgKHMpICYgRUNGX05PUkVUVVJOKSAhPSAwOworfQorCisKKy8qIElmIE5PVEhST1dfUCBpcyB0cnVlLCBHSU1QTEVfQ0FMTCBTIGlzIGEgY2FsbCB0aGF0IGlzIGtub3duIHRvIG5vdCB0aHJvdworICAgZXZlbiBpZiB0aGUgY2FsbGVkIGZ1bmN0aW9uIGNhbiB0aHJvdyBpbiBvdGhlciBjYXNlcy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NhbGxfc2V0X25vdGhyb3cgKGdpbXBsZSBzLCBib29sIG5vdGhyb3dfcCkKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIGlmIChub3Rocm93X3ApCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgfD0gR0ZfQ0FMTF9OT1RIUk9XOworICBlbHNlCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX0NBTExfTk9USFJPVzsKK30KKworLyogUmV0dXJuIHRydWUgaWYgUyBpcyBhIG5vdGhyb3cgY2FsbC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2NhbGxfbm90aHJvd19wIChnaW1wbGUgcykKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiAoZ2ltcGxlX2NhbGxfZmxhZ3MgKHMpICYgRUNGX05PVEhST1cpICE9IDA7Cit9CisKKy8qIElmIEZPUl9WQVIgaXMgdHJ1ZSwgR0lNUExFX0NBTEwgUyBpcyBhIGNhbGwgdG8gYnVpbHRpbl9hbGxvY2EgdGhhdAorICAgaXMga25vd24gdG8gYmUgZW1pdHRlZCBmb3IgVkxBIG9iamVjdHMuICBUaG9zZSBhcmUgd3JhcHBlZCBieQorICAgc3RhY2tfc2F2ZS9zdGFja19yZXN0b3JlIGNhbGxzIGFuZCBoZW5jZSBjYW4ndCBsZWFkIHRvIHVuYm91bmRlZAorICAgc3RhY2sgZ3Jvd3RoIGV2ZW4gd2hlbiB0aGV5IG9jY3VyIGluIGxvb3BzLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY2FsbF9zZXRfYWxsb2NhX2Zvcl92YXIgKGdpbXBsZSBzLCBib29sIGZvcl92YXIpCit7CisgIEdJTVBMRV9DSEVDSyAocywgR0lNUExFX0NBTEwpOworICBpZiAoZm9yX3ZhcikKKyAgICBzLT5nc2Jhc2Uuc3ViY29kZSB8PSBHRl9DQUxMX0FMTE9DQV9GT1JfVkFSOworICBlbHNlCisgICAgcy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX0NBTExfQUxMT0NBX0ZPUl9WQVI7Cit9CisKKy8qIFJldHVybiB0cnVlIG9mIFMgaXMgYSBjYWxsIHRvIGJ1aWx0aW5fYWxsb2NhIGVtaXR0ZWQgZm9yIFZMQSBvYmplY3RzLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfY2FsbF9hbGxvY2FfZm9yX3Zhcl9wIChnaW1wbGUgcykKK3sKKyAgR0lNUExFX0NIRUNLIChzLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiAocy0+Z3NiYXNlLnN1YmNvZGUgJiBHRl9DQUxMX0FMTE9DQV9GT1JfVkFSKSAhPSAwOworfQorCisvKiBDb3B5IGFsbCB0aGUgR0ZfQ0FMTF8qIGZsYWdzIGZyb20gT1JJR19DQUxMIHRvIERFU1RfQ0FMTC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NhbGxfY29weV9mbGFncyAoZ2ltcGxlIGRlc3RfY2FsbCwgZ2ltcGxlIG9yaWdfY2FsbCkKK3sKKyAgR0lNUExFX0NIRUNLIChkZXN0X2NhbGwsIEdJTVBMRV9DQUxMKTsKKyAgR0lNUExFX0NIRUNLIChvcmlnX2NhbGwsIEdJTVBMRV9DQUxMKTsKKyAgZGVzdF9jYWxsLT5nc2Jhc2Uuc3ViY29kZSA9IG9yaWdfY2FsbC0+Z3NiYXNlLnN1YmNvZGU7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcG9pbnRzLXRvIHNvbHV0aW9uIGZvciB0aGUgc2V0IG9mIGNhbGwtdXNlZAorICAgdmFyaWFibGVzIG9mIHRoZSBjYWxsIENBTEwuICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwdF9zb2x1dGlvbiAqCitnaW1wbGVfY2FsbF91c2Vfc2V0IChnaW1wbGUgY2FsbCkKK3sKKyAgR0lNUExFX0NIRUNLIChjYWxsLCBHSU1QTEVfQ0FMTCk7CisgIHJldHVybiAmY2FsbC0+Z2ltcGxlX2NhbGwuY2FsbF91c2VkOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHBvaW50cy10byBzb2x1dGlvbiBmb3IgdGhlIHNldCBvZiBjYWxsLXVzZWQKKyAgIHZhcmlhYmxlcyBvZiB0aGUgY2FsbCBDQUxMLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRfc29sdXRpb24gKgorZ2ltcGxlX2NhbGxfY2xvYmJlcl9zZXQgKGdpbXBsZSBjYWxsKQoreworICBHSU1QTEVfQ0hFQ0sgKGNhbGwsIEdJTVBMRV9DQUxMKTsKKyAgcmV0dXJuICZjYWxsLT5naW1wbGVfY2FsbC5jYWxsX2Nsb2JiZXJlZDsKK30KKworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIEdJTVBMRV9BU1NJR04gb3IgYSBHSU1QTEVfQ0FMTCB3aXRoIGEKKyAgIG5vbi1OVUxMIGxocy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2hhc19saHMgKGdpbXBsZSBzdG10KQoreworICByZXR1cm4gKGlzX2dpbXBsZV9hc3NpZ24gKHN0bXQpCisJICB8fCAoaXNfZ2ltcGxlX2NhbGwgKHN0bXQpCisJICAgICAgJiYgZ2ltcGxlX2NhbGxfbGhzIChzdG10KSAhPSBOVUxMX1RSRUUpKTsKK30KKworCisvKiBSZXR1cm4gdGhlIGNvZGUgb2YgdGhlIHByZWRpY2F0ZSBjb21wdXRlZCBieSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGVudW0gdHJlZV9jb2RlCitnaW1wbGVfY29uZF9jb2RlIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DT05EKTsKKyAgcmV0dXJuIChlbnVtIHRyZWVfY29kZSkgZ3MtPmdzYmFzZS5zdWJjb2RlOworfQorCisKKy8qIFNldCBDT0RFIHRvIGJlIHRoZSBwcmVkaWNhdGUgY29kZSBmb3IgdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NvbmRfc2V0X2NvZGUgKGdpbXBsZSBncywgZW51bSB0cmVlX2NvZGUgY29kZSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSBjb2RlOworfQorCisKKy8qIFJldHVybiB0aGUgTEhTIG9mIHRoZSBwcmVkaWNhdGUgY29tcHV0ZWQgYnkgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY29uZF9saHMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMCk7Cit9CisKKy8qIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgTEhTIG9mIHRoZSBwcmVkaWNhdGUgY29tcHV0ZWQgYnkgY29uZGl0aW9uYWwKKyAgIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfY29uZF9saHNfcHRyIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DT05EKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGdzLCAwKTsKK30KKworLyogU2V0IExIUyB0byBiZSB0aGUgTEhTIG9wZXJhbmQgb2YgdGhlIHByZWRpY2F0ZSBjb21wdXRlZCBieQorICAgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY29uZF9zZXRfbGhzIChnaW1wbGUgZ3MsIHRyZWUgbGhzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ09ORCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCAwLCBsaHMpOworfQorCisKKy8qIFJldHVybiB0aGUgUkhTIG9wZXJhbmQgb2YgdGhlIHByZWRpY2F0ZSBjb21wdXRlZCBieSBjb25kaXRpb25hbCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2NvbmRfcmhzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DT05EKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDEpOworfQorCisvKiBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIFJIUyBvcGVyYW5kIG9mIHRoZSBwcmVkaWNhdGUgY29tcHV0ZWQgYnkKKyAgIGNvbmRpdGlvbmFsIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9jb25kX3Joc19wdHIgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIDEpOworfQorCisKKy8qIFNldCBSSFMgdG8gYmUgdGhlIFJIUyBvcGVyYW5kIG9mIHRoZSBwcmVkaWNhdGUgY29tcHV0ZWQgYnkKKyAgIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NvbmRfc2V0X3JocyAoZ2ltcGxlIGdzLCB0cmVlIHJocykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICBnaW1wbGVfc2V0X29wIChncywgMSwgcmhzKTsKK30KKworCisvKiBSZXR1cm4gdGhlIGxhYmVsIHVzZWQgYnkgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTIHdoZW4gaXRzCisgICBwcmVkaWNhdGUgZXZhbHVhdGVzIHRvIHRydWUuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jb25kX3RydWVfbGFiZWwgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NPTkQpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMik7Cit9CisKKworLyogU2V0IExBQkVMIHRvIGJlIHRoZSBsYWJlbCB1c2VkIGJ5IGNvbmRpdGlvbmFsIHN0YXRlbWVudCBHUyB3aGVuIGl0cworICAgcHJlZGljYXRlIGV2YWx1YXRlcyB0byB0cnVlLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY29uZF9zZXRfdHJ1ZV9sYWJlbCAoZ2ltcGxlIGdzLCB0cmVlIGxhYmVsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ09ORCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCAyLCBsYWJlbCk7Cit9CisKKworLyogU2V0IExBQkVMIHRvIGJlIHRoZSBsYWJlbCB1c2VkIGJ5IGNvbmRpdGlvbmFsIHN0YXRlbWVudCBHUyB3aGVuIGl0cworICAgcHJlZGljYXRlIGV2YWx1YXRlcyB0byBmYWxzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NvbmRfc2V0X2ZhbHNlX2xhYmVsIChnaW1wbGUgZ3MsIHRyZWUgbGFiZWwpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DT05EKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDMsIGxhYmVsKTsKK30KKworCisvKiBSZXR1cm4gdGhlIGxhYmVsIHVzZWQgYnkgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTIHdoZW4gaXRzCisgICBwcmVkaWNhdGUgZXZhbHVhdGVzIHRvIGZhbHNlLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfY29uZF9mYWxzZV9sYWJlbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ09ORCk7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAzKTsKK30KKworCisvKiBTZXQgdGhlIGNvbmRpdGlvbmFsIENPTkRfU1RNVCB0byBiZSBvZiB0aGUgZm9ybSAnaWYgKDEgPT0gMCknLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfY29uZF9tYWtlX2ZhbHNlIChnaW1wbGUgZ3MpCit7CisgIGdpbXBsZV9jb25kX3NldF9saHMgKGdzLCBib29sZWFuX3RydWVfbm9kZSk7CisgIGdpbXBsZV9jb25kX3NldF9yaHMgKGdzLCBib29sZWFuX2ZhbHNlX25vZGUpOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSBFUV9FWFBSOworfQorCisKKy8qIFNldCB0aGUgY29uZGl0aW9uYWwgQ09ORF9TVE1UIHRvIGJlIG9mIHRoZSBmb3JtICdpZiAoMSA9PSAxKScuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jb25kX21ha2VfdHJ1ZSAoZ2ltcGxlIGdzKQoreworICBnaW1wbGVfY29uZF9zZXRfbGhzIChncywgYm9vbGVhbl90cnVlX25vZGUpOworICBnaW1wbGVfY29uZF9zZXRfcmhzIChncywgYm9vbGVhbl90cnVlX25vZGUpOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSBFUV9FWFBSOworfQorCisvKiBDaGVjayBpZiBjb25kaXRpb25hbCBzdGF0ZW1lbnRlIEdTIGlzIG9mIHRoZSBmb3JtICdpZiAoMSA9PSAxKScsCisgICdpZiAoMCA9PSAwKScsICdpZiAoMSAhPSAwKScgb3IgJ2lmICgwICE9IDEpJyAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jb25kX3RydWVfcCAoY29uc3RfZ2ltcGxlIGdzKQoreworICB0cmVlIGxocyA9IGdpbXBsZV9jb25kX2xocyAoZ3MpOworICB0cmVlIHJocyA9IGdpbXBsZV9jb25kX3JocyAoZ3MpOworICBlbnVtIHRyZWVfY29kZSBjb2RlID0gZ2ltcGxlX2NvbmRfY29kZSAoZ3MpOworCisgIGlmIChsaHMgIT0gYm9vbGVhbl90cnVlX25vZGUgJiYgbGhzICE9IGJvb2xlYW5fZmFsc2Vfbm9kZSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKHJocyAhPSBib29sZWFuX3RydWVfbm9kZSAmJiByaHMgIT0gYm9vbGVhbl9mYWxzZV9ub2RlKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoY29kZSA9PSBORV9FWFBSICYmIGxocyAhPSByaHMpCisgICAgcmV0dXJuIHRydWU7CisKKyAgaWYgKGNvZGUgPT0gRVFfRVhQUiAmJiBsaHMgPT0gcmhzKQorICAgICAgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBDaGVjayBpZiBjb25kaXRpb25hbCBzdGF0ZW1lbnQgR1MgaXMgb2YgdGhlIGZvcm0gJ2lmICgxICE9IDEpJywKKyAgICdpZiAoMCAhPSAwKScsICdpZiAoMSA9PSAwKScgb3IgJ2lmICgwID09IDEpJyAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9jb25kX2ZhbHNlX3AgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgdHJlZSBsaHMgPSBnaW1wbGVfY29uZF9saHMgKGdzKTsKKyAgdHJlZSByaHMgPSBnaW1wbGVfY29uZF9yaHMgKGdzKTsKKyAgZW51bSB0cmVlX2NvZGUgY29kZSA9IGdpbXBsZV9jb25kX2NvZGUgKGdzKTsKKworICBpZiAobGhzICE9IGJvb2xlYW5fdHJ1ZV9ub2RlICYmIGxocyAhPSBib29sZWFuX2ZhbHNlX25vZGUpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChyaHMgIT0gYm9vbGVhbl90cnVlX25vZGUgJiYgcmhzICE9IGJvb2xlYW5fZmFsc2Vfbm9kZSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKGNvZGUgPT0gTkVfRVhQUiAmJiBsaHMgPT0gcmhzKQorICAgIHJldHVybiB0cnVlOworCisgIGlmIChjb2RlID09IEVRX0VYUFIgJiYgbGhzICE9IHJocykKKyAgICAgIHJldHVybiB0cnVlOworCisgIHJldHVybiBmYWxzZTsKK30KKworLyogQ2hlY2sgaWYgY29uZGl0aW9uYWwgc3RhdGVtZW50IEdTIGlzIG9mIHRoZSBmb3JtICdpZiAodmFyICE9IDApJyBvcgorICAgJ2lmICh2YXIgPT0gMSknICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2NvbmRfc2luZ2xlX3Zhcl9wIChnaW1wbGUgZ3MpCit7CisgIGlmIChnaW1wbGVfY29uZF9jb2RlIChncykgPT0gTkVfRVhQUgorICAgICAgJiYgZ2ltcGxlX2NvbmRfcmhzIChncykgPT0gYm9vbGVhbl9mYWxzZV9ub2RlKQorICAgIHJldHVybiB0cnVlOworCisgIGlmIChnaW1wbGVfY29uZF9jb2RlIChncykgPT0gRVFfRVhQUgorICAgICAgJiYgZ2ltcGxlX2NvbmRfcmhzIChncykgPT0gYm9vbGVhbl90cnVlX25vZGUpCisgICAgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBTZXQgdGhlIGNvZGUsIExIUyBhbmQgUkhTIG9mIEdJTVBMRV9DT05EIFNUTVQgZnJvbSBDT0RFLCBMSFMgYW5kIFJIUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2NvbmRfc2V0X2NvbmRpdGlvbiAoZ2ltcGxlIHN0bXQsIGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgbGhzLCB0cmVlIHJocykKK3sKKyAgZ2ltcGxlX2NvbmRfc2V0X2NvZGUgKHN0bXQsIGNvZGUpOworICBnaW1wbGVfY29uZF9zZXRfbGhzIChzdG10LCBsaHMpOworICBnaW1wbGVfY29uZF9zZXRfcmhzIChzdG10LCByaHMpOworfQorCisvKiBSZXR1cm4gdGhlIExBQkVMX0RFQ0wgbm9kZSB1c2VkIGJ5IEdJTVBMRV9MQUJFTCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9sYWJlbF9sYWJlbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfTEFCRUwpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgMCk7Cit9CisKKworLyogU2V0IExBQkVMIHRvIGJlIHRoZSBMQUJFTF9ERUNMIG5vZGUgdXNlZCBieSBHSU1QTEVfTEFCRUwgc3RhdGVtZW50CisgICBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2xhYmVsX3NldF9sYWJlbCAoZ2ltcGxlIGdzLCB0cmVlIGxhYmVsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfTEFCRUwpOworICBnaW1wbGVfc2V0X29wIChncywgMCwgbGFiZWwpOworfQorCisKKy8qIFJldHVybiB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHVuY29uZGl0aW9uYWwganVtcCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2dvdG9fZGVzdCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfR09UTyk7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAwKTsKK30KKworCisvKiBTZXQgREVTVCB0byBiZSB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHVuY29uZGl0b25hbCBqdW1wIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZ290b19zZXRfZGVzdCAoZ2ltcGxlIGdzLCB0cmVlIGRlc3QpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9HT1RPKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDAsIGRlc3QpOworfQorCisKKy8qIFJldHVybiB0aGUgdmFyaWFibGVzIGRlY2xhcmVkIGluIHRoZSBHSU1QTEVfQklORCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9iaW5kX3ZhcnMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICByZXR1cm4gZ3MtPmdpbXBsZV9iaW5kLnZhcnM7Cit9CisKKworLyogU2V0IFZBUlMgdG8gYmUgdGhlIHNldCBvZiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIEdJTVBMRV9CSU5ECisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9iaW5kX3NldF92YXJzIChnaW1wbGUgZ3MsIHRyZWUgdmFycykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICBncy0+Z2ltcGxlX2JpbmQudmFycyA9IHZhcnM7Cit9CisKKworLyogQXBwZW5kIFZBUlMgdG8gdGhlIHNldCBvZiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIEdJTVBMRV9CSU5ECisgICBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9iaW5kX2FwcGVuZF92YXJzIChnaW1wbGUgZ3MsIHRyZWUgdmFycykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICBncy0+Z2ltcGxlX2JpbmQudmFycyA9IGNoYWlub24gKGdzLT5naW1wbGVfYmluZC52YXJzLCB2YXJzKTsKK30KKworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEgKgorZ2ltcGxlX2JpbmRfYm9keV9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICByZXR1cm4gJmdzLT5naW1wbGVfYmluZC5ib2R5OworfQorCisvKiBSZXR1cm4gdGhlIEdJTVBMRSBzZXF1ZW5jZSBjb250YWluZWQgaW4gdGhlIEdJTVBMRV9CSU5EIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorZ2ltcGxlX2JpbmRfYm9keSAoZ2ltcGxlIGdzKQoreworICByZXR1cm4gKmdpbXBsZV9iaW5kX2JvZHlfcHRyIChncyk7Cit9CisKKworLyogU2V0IFNFUSB0byBiZSB0aGUgR0lNUExFIHNlcXVlbmNlIGNvbnRhaW5lZCBpbiB0aGUgR0lNUExFX0JJTkQKKyAgIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2JpbmRfc2V0X2JvZHkgKGdpbXBsZSBncywgZ2ltcGxlX3NlcSBzZXEpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9CSU5EKTsKKyAgZ3MtPmdpbXBsZV9iaW5kLmJvZHkgPSBzZXE7Cit9CisKKworLyogQXBwZW5kIGEgc3RhdGVtZW50IHRvIHRoZSBlbmQgb2YgYSBHSU1QTEVfQklORCdzIGJvZHkuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9iaW5kX2FkZF9zdG10IChnaW1wbGUgZ3MsIGdpbXBsZSBzdG10KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQklORCk7CisgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZncy0+Z2ltcGxlX2JpbmQuYm9keSwgc3RtdCk7Cit9CisKKworLyogQXBwZW5kIGEgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byB0aGUgZW5kIG9mIGEgR0lNUExFX0JJTkQncyBib2R5LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfYmluZF9hZGRfc2VxIChnaW1wbGUgZ3MsIGdpbXBsZV9zZXEgc2VxKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQklORCk7CisgIGdpbXBsZV9zZXFfYWRkX3NlcSAoJmdzLT5naW1wbGVfYmluZC5ib2R5LCBzZXEpOworfQorCisKKy8qIFJldHVybiB0aGUgVFJFRV9CTE9DSyBub2RlIGFzc29jaWF0ZWQgd2l0aCBHSU1QTEVfQklORCBzdGF0ZW1lbnQKKyAgIEdTLiAgVGhpcyBpcyBhbmFsb2dvdXMgdG8gdGhlIEJJTkRfRVhQUl9CTE9DSyBmaWVsZCBpbiB0cmVlcy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2JpbmRfYmxvY2sgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICByZXR1cm4gZ3MtPmdpbXBsZV9iaW5kLmJsb2NrOworfQorCisKKy8qIFNldCBCTE9DSyB0byBiZSB0aGUgVFJFRV9CTE9DSyBub2RlIGFzc29jaWF0ZWQgd2l0aCBHSU1QTEVfQklORAorICAgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfYmluZF9zZXRfYmxvY2sgKGdpbXBsZSBncywgdHJlZSBibG9jaykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0JJTkQpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoYmxvY2sgPT0gTlVMTF9UUkVFCisJCQkgICAgICB8fCBUUkVFX0NPREUgKGJsb2NrKSA9PSBCTE9DSyk7CisgIGdzLT5naW1wbGVfYmluZC5ibG9jayA9IGJsb2NrOworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGlucHV0IG9wZXJhbmRzIGZvciBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX2FzbV9uaW5wdXRzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICByZXR1cm4gZ3MtPmdpbXBsZV9hc20ubmk7Cit9CisKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygb3V0cHV0IG9wZXJhbmRzIGZvciBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX2FzbV9ub3V0cHV0cyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfYXNtLm5vOworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGNsb2JiZXIgb3BlcmFuZHMgZm9yIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitnaW1wbGVfYXNtX25jbG9iYmVycyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfYXNtLm5jOworfQorCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsYWJlbCBvcGVyYW5kcyBmb3IgR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2dpbXBsZV9hc21fbmxhYmVscyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfYXNtLm5sOworfQorCisvKiBSZXR1cm4gaW5wdXQgb3BlcmFuZCBJTkRFWCBvZiBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYXNtX2lucHV0X29wIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGluZGV4IDwgZ3MtPmdpbXBsZV9hc20ubmkpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgaW5kZXggKyBncy0+Z2ltcGxlX2FzbS5ubyk7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gaW5wdXQgb3BlcmFuZCBJTkRFWCBvZiBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9hc21faW5wdXRfb3BfcHRyIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGluZGV4IDwgZ3MtPmdpbXBsZV9hc20ubmkpOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIGluZGV4ICsgZ3MtPmdpbXBsZV9hc20ubm8pOworfQorCisKKy8qIFNldCBJTl9PUCB0byBiZSBpbnB1dCBvcGVyYW5kIElOREVYIGluIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc21fc2V0X2lucHV0X29wIChnaW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4LCB0cmVlIGluX29wKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGluZGV4IDwgZ3MtPmdpbXBsZV9hc20ubmkKKwkJCSAgICAgICYmIFRSRUVfQ09ERSAoaW5fb3ApID09IFRSRUVfTElTVCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCBpbmRleCArIGdzLT5naW1wbGVfYXNtLm5vLCBpbl9vcCk7Cit9CisKKworLyogUmV0dXJuIG91dHB1dCBvcGVyYW5kIElOREVYIG9mIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9hc21fb3V0cHV0X29wIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGluZGV4IDwgZ3MtPmdpbXBsZV9hc20ubm8pOworICByZXR1cm4gZ2ltcGxlX29wIChncywgaW5kZXgpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIG91dHB1dCBvcGVyYW5kIElOREVYIG9mIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2FzbV9vdXRwdXRfb3BfcHRyIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGluZGV4IDwgZ3MtPmdpbXBsZV9hc20ubm8pOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZ3MsIGluZGV4KTsKK30KKworCisvKiBTZXQgT1VUX09QIHRvIGJlIG91dHB1dCBvcGVyYW5kIElOREVYIGluIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc21fc2V0X291dHB1dF9vcCAoZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCwgdHJlZSBvdXRfb3ApCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoaW5kZXggPCBncy0+Z2ltcGxlX2FzbS5ubworCQkJICAgICAgJiYgVFJFRV9DT0RFIChvdXRfb3ApID09IFRSRUVfTElTVCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCBpbmRleCwgb3V0X29wKTsKK30KKworCisvKiBSZXR1cm4gY2xvYmJlciBvcGVyYW5kIElOREVYIG9mIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9hc21fY2xvYmJlcl9vcCAoY29uc3RfZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpbmRleCA8IGdzLT5naW1wbGVfYXNtLm5jKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIGluZGV4ICsgZ3MtPmdpbXBsZV9hc20ubmkgKyBncy0+Z2ltcGxlX2FzbS5ubyk7Cit9CisKKworLyogU2V0IENMT0JCRVJfT1AgdG8gYmUgY2xvYmJlciBvcGVyYW5kIElOREVYIGluIEdJTVBMRV9BU00gR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc21fc2V0X2Nsb2JiZXJfb3AgKGdpbXBsZSBncywgdW5zaWduZWQgaW5kZXgsIHRyZWUgY2xvYmJlcl9vcCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpbmRleCA8IGdzLT5naW1wbGVfYXNtLm5jCisJCQkgICAgICAmJiBUUkVFX0NPREUgKGNsb2JiZXJfb3ApID09IFRSRUVfTElTVCk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCBpbmRleCArIGdzLT5naW1wbGVfYXNtLm5pICsgZ3MtPmdpbXBsZV9hc20ubm8sIGNsb2JiZXJfb3ApOworfQorCisvKiBSZXR1cm4gbGFiZWwgb3BlcmFuZCBJTkRFWCBvZiBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfYXNtX2xhYmVsX29wIChjb25zdF9naW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGluZGV4IDwgZ3MtPmdpbXBsZV9hc20ubmwpOworICByZXR1cm4gZ2ltcGxlX29wIChncywgaW5kZXggKyBncy0+Z2ltcGxlX2FzbS5uaSArIGdzLT5naW1wbGVfYXNtLm5jKTsKK30KKworLyogU2V0IExBQkVMX09QIHRvIGJlIGxhYmVsIG9wZXJhbmQgSU5ERVggaW4gR0lNUExFX0FTTSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2FzbV9zZXRfbGFiZWxfb3AgKGdpbXBsZSBncywgdW5zaWduZWQgaW5kZXgsIHRyZWUgbGFiZWxfb3ApCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoaW5kZXggPCBncy0+Z2ltcGxlX2FzbS5ubAorCQkJICAgICAgJiYgVFJFRV9DT0RFIChsYWJlbF9vcCkgPT0gVFJFRV9MSVNUKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIGluZGV4ICsgZ3MtPmdpbXBsZV9hc20ubmkgKyBncy0+Z2ltcGxlX2FzbS5uYywgbGFiZWxfb3ApOworfQorCisvKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFzc2VtYmx5IGluc3RydWN0aW9uIGluCisgICBHSU1QTEVfQVNNIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2dpbXBsZV9hc21fc3RyaW5nIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9BU00pOworICByZXR1cm4gZ3MtPmdpbXBsZV9hc20uc3RyaW5nOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIEdTIGlzIGFuIGFzbSBzdGF0ZW1lbnQgbWFya2VkIHZvbGF0aWxlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfYXNtX3ZvbGF0aWxlX3AgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIHJldHVybiAoZ3MtPmdzYmFzZS5zdWJjb2RlICYgR0ZfQVNNX1ZPTEFUSUxFKSAhPSAwOworfQorCisKKy8qIElmIFZPTEFUTEVfUCBpcyB0cnVlLCBtYXJrIGFzbSBzdGF0ZW1lbnQgR1MgYXMgdm9sYXRpbGUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9hc21fc2V0X3ZvbGF0aWxlIChnaW1wbGUgZ3MsIGJvb2wgdm9sYXRpbGVfcCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0FTTSk7CisgIGlmICh2b2xhdGlsZV9wKQorICAgIGdzLT5nc2Jhc2Uuc3ViY29kZSB8PSBHRl9BU01fVk9MQVRJTEU7CisgIGVsc2UKKyAgICBncy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX0FTTV9WT0xBVElMRTsKK30KKworCisvKiBJZiBJTlBVVF9QIGlzIHRydWUsIG1hcmsgYXNtIEdTIGFzIGFuIEFTTV9JTlBVVC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2FzbV9zZXRfaW5wdXQgKGdpbXBsZSBncywgYm9vbCBpbnB1dF9wKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgaWYgKGlucHV0X3ApCisgICAgZ3MtPmdzYmFzZS5zdWJjb2RlIHw9IEdGX0FTTV9JTlBVVDsKKyAgZWxzZQorICAgIGdzLT5nc2Jhc2Uuc3ViY29kZSAmPSB+R0ZfQVNNX0lOUFVUOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIGFzbSBHUyBpcyBhbiBBU01fSU5QVVQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9hc21faW5wdXRfcCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQVNNKTsKKyAgcmV0dXJuIChncy0+Z3NiYXNlLnN1YmNvZGUgJiBHRl9BU01fSU5QVVQpICE9IDA7Cit9CisKKworLyogUmV0dXJuIHRoZSB0eXBlcyBoYW5kbGVkIGJ5IEdJTVBMRV9DQVRDSCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9jYXRjaF90eXBlcyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FUQ0gpOworICByZXR1cm4gZ3MtPmdpbXBsZV9jYXRjaC50eXBlczsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0eXBlcyBoYW5kbGVkIGJ5IEdJTVBMRV9DQVRDSCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2NhdGNoX3R5cGVzX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FUQ0gpOworICByZXR1cm4gJmdzLT5naW1wbGVfY2F0Y2gudHlwZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgR0lNUExFIHNlcXVlbmNlIHJlcHJlc2VudGluZyB0aGUgYm9keSBvZgorICAgdGhlIGhhbmRsZXIgb2YgR0lNUExFX0NBVENIIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcSAqCitnaW1wbGVfY2F0Y2hfaGFuZGxlcl9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0NBVENIKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX2NhdGNoLmhhbmRsZXI7Cit9CisKKworLyogUmV0dXJuIHRoZSBHSU1QTEUgc2VxdWVuY2UgcmVwcmVzZW50aW5nIHRoZSBib2R5IG9mIHRoZSBoYW5kbGVyIG9mCisgICBHSU1QTEVfQ0FUQ0ggc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxCitnaW1wbGVfY2F0Y2hfaGFuZGxlciAoZ2ltcGxlIGdzKQoreworICByZXR1cm4gKmdpbXBsZV9jYXRjaF9oYW5kbGVyX3B0ciAoZ3MpOworfQorCisKKy8qIFNldCBUIHRvIGJlIHRoZSBzZXQgb2YgdHlwZXMgaGFuZGxlZCBieSBHSU1QTEVfQ0FUQ0ggR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYXRjaF9zZXRfdHlwZXMgKGdpbXBsZSBncywgdHJlZSB0KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfQ0FUQ0gpOworICBncy0+Z2ltcGxlX2NhdGNoLnR5cGVzID0gdDsKK30KKworCisvKiBTZXQgSEFORExFUiB0byBiZSB0aGUgYm9keSBvZiBHSU1QTEVfQ0FUQ0ggR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9jYXRjaF9zZXRfaGFuZGxlciAoZ2ltcGxlIGdzLCBnaW1wbGVfc2VxIGhhbmRsZXIpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9DQVRDSCk7CisgIGdzLT5naW1wbGVfY2F0Y2guaGFuZGxlciA9IGhhbmRsZXI7Cit9CisKKworLyogUmV0dXJuIHRoZSB0eXBlcyBoYW5kbGVkIGJ5IEdJTVBMRV9FSF9GSUxURVIgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfZWhfZmlsdGVyX3R5cGVzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9FSF9GSUxURVIpOworICByZXR1cm4gZ3MtPmdpbXBsZV9laF9maWx0ZXIudHlwZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdHlwZXMgaGFuZGxlZCBieSBHSU1QTEVfRUhfRklMVEVSIHN0YXRlbWVudAorICAgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX2VoX2ZpbHRlcl90eXBlc19wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0VIX0ZJTFRFUik7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9laF9maWx0ZXIudHlwZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50IHRvIGV4ZWN1dGUgd2hlbgorICAgR0lNUExFX0VIX0ZJTFRFUiBzdGF0ZW1lbnQgZmFpbHMuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEgKgorZ2ltcGxlX2VoX2ZpbHRlcl9mYWlsdXJlX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfRklMVEVSKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX2VoX2ZpbHRlci5mYWlsdXJlOworfQorCisKKy8qIFJldHVybiB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50IHRvIGV4ZWN1dGUgd2hlbiBHSU1QTEVfRUhfRklMVEVSCisgICBzdGF0ZW1lbnQgZmFpbHMuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2dpbXBsZV9laF9maWx0ZXJfZmFpbHVyZSAoZ2ltcGxlIGdzKQoreworICByZXR1cm4gKmdpbXBsZV9laF9maWx0ZXJfZmFpbHVyZV9wdHIgKGdzKTsKK30KKworCisvKiBTZXQgVFlQRVMgdG8gYmUgdGhlIHNldCBvZiB0eXBlcyBoYW5kbGVkIGJ5IEdJTVBMRV9FSF9GSUxURVIgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9laF9maWx0ZXJfc2V0X3R5cGVzIChnaW1wbGUgZ3MsIHRyZWUgdHlwZXMpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9FSF9GSUxURVIpOworICBncy0+Z2ltcGxlX2VoX2ZpbHRlci50eXBlcyA9IHR5cGVzOworfQorCisKKy8qIFNldCBGQUlMVVJFIHRvIGJlIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUgb24gZmFpbHVyZQorICAgZm9yIEdJTVBMRV9FSF9GSUxURVIgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9laF9maWx0ZXJfc2V0X2ZhaWx1cmUgKGdpbXBsZSBncywgZ2ltcGxlX3NlcSBmYWlsdXJlKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfRklMVEVSKTsKKyAgZ3MtPmdpbXBsZV9laF9maWx0ZXIuZmFpbHVyZSA9IGZhaWx1cmU7Cit9CisKKy8qIEdldCB0aGUgZnVuY3Rpb24gZGVjbCB0byBiZSBjYWxsZWQgYnkgdGhlIE1VU1RfTk9UX1RIUk9XIHJlZ2lvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2VoX211c3Rfbm90X3Rocm93X2ZuZGVjbCAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfTVVTVF9OT1RfVEhST1cpOworICByZXR1cm4gZ3MtPmdpbXBsZV9laF9tbnQuZm5kZWNsOworfQorCisvKiBTZXQgdGhlIGZ1bmN0aW9uIGRlY2wgdG8gYmUgY2FsbGVkIGJ5IEdTIHRvIERFQ0wuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9laF9tdXN0X25vdF90aHJvd19zZXRfZm5kZWNsIChnaW1wbGUgZ3MsIHRyZWUgZGVjbCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0VIX01VU1RfTk9UX1RIUk9XKTsKKyAgZ3MtPmdpbXBsZV9laF9tbnQuZm5kZWNsID0gZGVjbDsKK30KKworLyogR0lNUExFX0VIX0VMU0UgYWNjZXNzb3JzLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxICoKK2dpbXBsZV9laF9lbHNlX25fYm9keV9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0VIX0VMU0UpOworICByZXR1cm4gJmdzLT5naW1wbGVfZWhfZWxzZS5uX2JvZHk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorZ2ltcGxlX2VoX2Vsc2Vfbl9ib2R5IChnaW1wbGUgZ3MpCit7CisgIHJldHVybiAqZ2ltcGxlX2VoX2Vsc2Vfbl9ib2R5X3B0ciAoZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEgKgorZ2ltcGxlX2VoX2Vsc2VfZV9ib2R5X3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfRUhfRUxTRSk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9laF9lbHNlLmVfYm9keTsKK30KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxCitnaW1wbGVfZWhfZWxzZV9lX2JvZHkgKGdpbXBsZSBncykKK3sKKyAgcmV0dXJuICpnaW1wbGVfZWhfZWxzZV9lX2JvZHlfcHRyIChncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2VoX2Vsc2Vfc2V0X25fYm9keSAoZ2ltcGxlIGdzLCBnaW1wbGVfc2VxIHNlcSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0VIX0VMU0UpOworICBncy0+Z2ltcGxlX2VoX2Vsc2Uubl9ib2R5ID0gc2VxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9laF9lbHNlX3NldF9lX2JvZHkgKGdpbXBsZSBncywgZ2ltcGxlX3NlcSBzZXEpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9FSF9FTFNFKTsKKyAgZ3MtPmdpbXBsZV9laF9lbHNlLmVfYm9keSA9IHNlcTsKK30KKworLyogR0lNUExFX1RSWSBhY2Nlc3NvcnMuICovCisKKy8qIFJldHVybiB0aGUga2luZCBvZiB0cnkgYmxvY2sgcmVwcmVzZW50ZWQgYnkgR0lNUExFX1RSWSBHUy4gIFRoaXMgaXMKKyAgIGVpdGhlciBHSU1QTEVfVFJZX0NBVENIIG9yIEdJTVBMRV9UUllfRklOQUxMWS4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBnaW1wbGVfdHJ5X2ZsYWdzCitnaW1wbGVfdHJ5X2tpbmQgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1RSWSk7CisgIHJldHVybiAoZW51bSBnaW1wbGVfdHJ5X2ZsYWdzKSAoZ3MtPmdzYmFzZS5zdWJjb2RlICYgR0lNUExFX1RSWV9LSU5EKTsKK30KKworCisvKiBTZXQgdGhlIGtpbmQgb2YgdHJ5IGJsb2NrIHJlcHJlc2VudGVkIGJ5IEdJTVBMRV9UUlkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV90cnlfc2V0X2tpbmQgKGdpbXBsZSBncywgZW51bSBnaW1wbGVfdHJ5X2ZsYWdzIGtpbmQpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9UUlkpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoa2luZCA9PSBHSU1QTEVfVFJZX0NBVENICisJCQkgICAgICB8fCBraW5kID09IEdJTVBMRV9UUllfRklOQUxMWSk7CisgIGlmIChnaW1wbGVfdHJ5X2tpbmQgKGdzKSAhPSBraW5kKQorICAgIGdzLT5nc2Jhc2Uuc3ViY29kZSA9ICh1bnNpZ25lZCBpbnQpIGtpbmQ7Cit9CisKKworLyogUmV0dXJuIHRoZSBHSU1QTEVfVFJZX0NBVENIX0lTX0NMRUFOVVAgZmxhZy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX3RyeV9jYXRjaF9pc19jbGVhbnVwIChjb25zdF9naW1wbGUgZ3MpCit7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfdHJ5X2tpbmQgKGdzKSA9PSBHSU1QTEVfVFJZX0NBVENIKTsKKyAgcmV0dXJuIChncy0+Z3NiYXNlLnN1YmNvZGUgJiBHSU1QTEVfVFJZX0NBVENIX0lTX0NMRUFOVVApICE9IDA7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB1c2VkIGFzIHRoZQorICAgYm9keSBmb3IgR0lNUExFX1RSWSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcSAqCitnaW1wbGVfdHJ5X2V2YWxfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9UUlkpOworICByZXR1cm4gJmdzLT5naW1wbGVfdHJ5LmV2YWw7Cit9CisKKworLyogUmV0dXJuIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHVzZWQgYXMgdGhlIGJvZHkgZm9yIEdJTVBMRV9UUlkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2dpbXBsZV90cnlfZXZhbCAoZ2ltcGxlIGdzKQoreworICByZXR1cm4gKmdpbXBsZV90cnlfZXZhbF9wdHIgKGdzKTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHVzZWQgYXMgdGhlIGNsZWFudXAgYm9keSBmb3IKKyAgIEdJTVBMRV9UUlkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEgKgorZ2ltcGxlX3RyeV9jbGVhbnVwX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfVFJZKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX3RyeS5jbGVhbnVwOworfQorCisKKy8qIFJldHVybiB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB1c2VkIGFzIHRoZSBjbGVhbnVwIGJvZHkgZm9yCisgICBHSU1QTEVfVFJZIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxCitnaW1wbGVfdHJ5X2NsZWFudXAgKGdpbXBsZSBncykKK3sKKyAgcmV0dXJuICpnaW1wbGVfdHJ5X2NsZWFudXBfcHRyIChncyk7Cit9CisKKworLyogU2V0IHRoZSBHSU1QTEVfVFJZX0NBVENIX0lTX0NMRUFOVVAgZmxhZy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3RyeV9zZXRfY2F0Y2hfaXNfY2xlYW51cCAoZ2ltcGxlIGcsIGJvb2wgY2F0Y2hfaXNfY2xlYW51cCkKK3sKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV90cnlfa2luZCAoZykgPT0gR0lNUExFX1RSWV9DQVRDSCk7CisgIGlmIChjYXRjaF9pc19jbGVhbnVwKQorICAgIGctPmdzYmFzZS5zdWJjb2RlIHw9IEdJTVBMRV9UUllfQ0FUQ0hfSVNfQ0xFQU5VUDsKKyAgZWxzZQorICAgIGctPmdzYmFzZS5zdWJjb2RlICY9IH5HSU1QTEVfVFJZX0NBVENIX0lTX0NMRUFOVVA7Cit9CisKKworLyogU2V0IEVWQUwgdG8gYmUgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gdXNlIGFzIHRoZSBib2R5IGZvcgorICAgR0lNUExFX1RSWSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3RyeV9zZXRfZXZhbCAoZ2ltcGxlIGdzLCBnaW1wbGVfc2VxIGV2YWwpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9UUlkpOworICBncy0+Z2ltcGxlX3RyeS5ldmFsID0gZXZhbDsKK30KKworCisvKiBTZXQgQ0xFQU5VUCB0byBiZSB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byB1c2UgYXMgdGhlIGNsZWFudXAKKyAgIGJvZHkgZm9yIEdJTVBMRV9UUlkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV90cnlfc2V0X2NsZWFudXAgKGdpbXBsZSBncywgZ2ltcGxlX3NlcSBjbGVhbnVwKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfVFJZKTsKKyAgZ3MtPmdpbXBsZV90cnkuY2xlYW51cCA9IGNsZWFudXA7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2xlYW51cCBzZXF1ZW5jZSBmb3IgY2xlYW51cCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEgKgorZ2ltcGxlX3djZV9jbGVhbnVwX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfV0lUSF9DTEVBTlVQX0VYUFIpOworICByZXR1cm4gJmdzLT5naW1wbGVfd2NlLmNsZWFudXA7Cit9CisKKworLyogUmV0dXJuIHRoZSBjbGVhbnVwIHNlcXVlbmNlIGZvciBjbGVhbnVwIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorZ2ltcGxlX3djZV9jbGVhbnVwIChnaW1wbGUgZ3MpCit7CisgIHJldHVybiAqZ2ltcGxlX3djZV9jbGVhbnVwX3B0ciAoZ3MpOworfQorCisKKy8qIFNldCBDTEVBTlVQIHRvIGJlIHRoZSBjbGVhbnVwIHNlcXVlbmNlIGZvciBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3djZV9zZXRfY2xlYW51cCAoZ2ltcGxlIGdzLCBnaW1wbGVfc2VxIGNsZWFudXApCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9XSVRIX0NMRUFOVVBfRVhQUik7CisgIGdzLT5naW1wbGVfd2NlLmNsZWFudXAgPSBjbGVhbnVwOworfQorCisKKy8qIFJldHVybiB0aGUgQ0xFQU5VUF9FSF9PTkxZIGZsYWcgZm9yIGEgV0NFIHR1cGxlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfd2NlX2NsZWFudXBfZWhfb25seSAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfV0lUSF9DTEVBTlVQX0VYUFIpOworICByZXR1cm4gZ3MtPmdzYmFzZS5zdWJjb2RlICE9IDA7Cit9CisKKworLyogU2V0IHRoZSBDTEVBTlVQX0VIX09OTFkgZmxhZyBmb3IgYSBXQ0UgdHVwbGUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV93Y2Vfc2V0X2NsZWFudXBfZWhfb25seSAoZ2ltcGxlIGdzLCBib29sIGVoX29ubHlfcCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1dJVEhfQ0xFQU5VUF9FWFBSKTsKKyAgZ3MtPmdzYmFzZS5zdWJjb2RlID0gKHVuc2lnbmVkIGludCkgZWhfb25seV9wOworfQorCisKKy8qIFJldHVybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIHN1cHBvcnRlZCBieSBHSU1QTEVfUEhJIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZ2ltcGxlX3BoaV9jYXBhY2l0eSAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUEhJKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfcGhpLmNhcGFjaXR5OworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBHSU1QTEVfUEhJIEdTLiAgVGhpcyBtdXN0IGFsd2F5cworICAgYmUgZXhhY3RseSB0aGUgbnVtYmVyIG9mIGluY29taW5nIGVkZ2VzIGZvciB0aGUgYmFzaWMgYmxvY2sgaG9sZGluZworICAgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitnaW1wbGVfcGhpX251bV9hcmdzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9QSEkpOworICByZXR1cm4gZ3MtPmdpbXBsZV9waGkubmFyZ3M7Cit9CisKKworLyogUmV0dXJuIHRoZSBTU0EgbmFtZSBjcmVhdGVkIGJ5IEdJTVBMRV9QSEkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9waGlfcmVzdWx0IChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9QSEkpOworICByZXR1cm4gZ3MtPmdpbXBsZV9waGkucmVzdWx0OworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBTU0EgbmFtZSBjcmVhdGVkIGJ5IEdJTVBMRV9QSEkgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX3BoaV9yZXN1bHRfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9QSEkpOworICByZXR1cm4gJmdzLT5naW1wbGVfcGhpLnJlc3VsdDsKK30KKworLyogU2V0IFJFU1VMVCB0byBiZSB0aGUgU1NBIG5hbWUgY3JlYXRlZCBieSBHSU1QTEVfUEhJIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfcGhpX3NldF9yZXN1bHQgKGdpbXBsZSBncywgdHJlZSByZXN1bHQpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9QSEkpOworICBncy0+Z2ltcGxlX3BoaS5yZXN1bHQgPSByZXN1bHQ7CisgIGlmIChyZXN1bHQgJiYgVFJFRV9DT0RFIChyZXN1bHQpID09IFNTQV9OQU1FKQorICAgIFNTQV9OQU1FX0RFRl9TVE1UIChyZXN1bHQpID0gZ3M7Cit9CisKKworLyogUmV0dXJuIHRoZSBQSEkgYXJndW1lbnQgY29ycmVzcG9uZGluZyB0byBpbmNvbWluZyBlZGdlIElOREVYIGZvcgorICAgR0lNUExFX1BISSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoaV9hcmdfZCAqCitnaW1wbGVfcGhpX2FyZyAoZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BISSk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpbmRleCA8PSBncy0+Z2ltcGxlX3BoaS5jYXBhY2l0eSk7CisgIHJldHVybiAmKGdzLT5naW1wbGVfcGhpLmFyZ3NbaW5kZXhdKTsKK30KKworLyogU2V0IFBISUFSRyB0byBiZSB0aGUgYXJndW1lbnQgY29ycmVzcG9uZGluZyB0byBpbmNvbWluZyBlZGdlIElOREVYCisgICBmb3IgR0lNUExFX1BISSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3BoaV9zZXRfYXJnIChnaW1wbGUgZ3MsIHVuc2lnbmVkIGluZGV4LCBzdHJ1Y3QgcGhpX2FyZ19kICogcGhpYXJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUEhJKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGluZGV4IDw9IGdzLT5naW1wbGVfcGhpLm5hcmdzKTsKKyAgZ3MtPmdpbXBsZV9waGkuYXJnc1tpbmRleF0gPSAqcGhpYXJnOworfQorCisvKiBSZXR1cm4gdGhlIHJlZ2lvbiBudW1iZXIgZm9yIEdJTVBMRV9SRVNYIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK2dpbXBsZV9yZXN4X3JlZ2lvbiAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUkVTWCk7CisgIHJldHVybiBncy0+Z2ltcGxlX2VoX2N0cmwucmVnaW9uOworfQorCisvKiBTZXQgUkVHSU9OIHRvIGJlIHRoZSByZWdpb24gbnVtYmVyIGZvciBHSU1QTEVfUkVTWCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3Jlc3hfc2V0X3JlZ2lvbiAoZ2ltcGxlIGdzLCBpbnQgcmVnaW9uKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUkVTWCk7CisgIGdzLT5naW1wbGVfZWhfY3RybC5yZWdpb24gPSByZWdpb247Cit9CisKKy8qIFJldHVybiB0aGUgcmVnaW9uIG51bWJlciBmb3IgR0lNUExFX0VIX0RJU1BBVENIIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK2dpbXBsZV9laF9kaXNwYXRjaF9yZWdpb24gKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0VIX0RJU1BBVENIKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfZWhfY3RybC5yZWdpb247Cit9CisKKy8qIFNldCBSRUdJT04gdG8gYmUgdGhlIHJlZ2lvbiBudW1iZXIgZm9yIEdJTVBMRV9FSF9ESVNQQVRDSCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2VoX2Rpc3BhdGNoX3NldF9yZWdpb24gKGdpbXBsZSBncywgaW50IHJlZ2lvbikKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX0VIX0RJU1BBVENIKTsKKyAgZ3MtPmdpbXBsZV9laF9jdHJsLnJlZ2lvbiA9IHJlZ2lvbjsKK30KKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3dpdGNoIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2dpbXBsZV9zd2l0Y2hfbnVtX2xhYmVscyAoY29uc3RfZ2ltcGxlIGdzKQoreworICB1bnNpZ25lZCBudW1fb3BzOworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfU1dJVENIKTsKKyAgbnVtX29wcyA9IGdpbXBsZV9udW1fb3BzIChncyk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChudW1fb3BzID4gMSk7CisgIHJldHVybiBudW1fb3BzIC0gMTsKK30KKworCisvKiBTZXQgTkxBQkVMUyB0byBiZSB0aGUgbnVtYmVyIG9mIGxhYmVscyBmb3IgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9zd2l0Y2hfc2V0X251bV9sYWJlbHMgKGdpbXBsZSBnLCB1bnNpZ25lZCBubGFiZWxzKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9TV0lUQ0gpOworICBnaW1wbGVfc2V0X251bV9vcHMgKGcsIG5sYWJlbHMgKyAxKTsKK30KKworCisvKiBSZXR1cm4gdGhlIGluZGV4IHZhcmlhYmxlIHVzZWQgYnkgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9zd2l0Y2hfaW5kZXggKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1NXSVRDSCk7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCAwKTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbmRleCB2YXJpYWJsZSBmb3IgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX3N3aXRjaF9pbmRleF9wdHIgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1NXSVRDSCk7CisgIHJldHVybiBnaW1wbGVfb3BfcHRyIChncywgMCk7Cit9CisKKworLyogU2V0IElOREVYIHRvIGJlIHRoZSBpbmRleCB2YXJpYWJsZSBmb3Igc3dpdGNoIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3N3aXRjaF9zZXRfaW5kZXggKGdpbXBsZSBncywgdHJlZSBpbmRleCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1NXSVRDSCk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChTU0FfVkFSX1AgKGluZGV4KSB8fCBDT05TVEFOVF9DTEFTU19QIChpbmRleCkpOworICBnaW1wbGVfc2V0X29wIChncywgMCwgaW5kZXgpOworfQorCisKKy8qIFJldHVybiB0aGUgbGFiZWwgbnVtYmVyZWQgSU5ERVguICBUaGUgZGVmYXVsdCBsYWJlbCBpcyAwLCBmb2xsb3dlZCBieSBhbnkKKyAgIGxhYmVscyBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9zd2l0Y2hfbGFiZWwgKGNvbnN0X2dpbXBsZSBncywgdW5zaWduZWQgaW5kZXgpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9TV0lUQ0gpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoZ2ltcGxlX251bV9vcHMgKGdzKSA+IGluZGV4ICsgMSk7CisgIHJldHVybiBnaW1wbGVfb3AgKGdzLCBpbmRleCArIDEpOworfQorCisvKiBTZXQgdGhlIGxhYmVsIG51bWJlciBJTkRFWCB0byBMQUJFTC4gIDAgaXMgYWx3YXlzIHRoZSBkZWZhdWx0IGxhYmVsLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc3dpdGNoX3NldF9sYWJlbCAoZ2ltcGxlIGdzLCB1bnNpZ25lZCBpbmRleCwgdHJlZSBsYWJlbCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1NXSVRDSCk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfbnVtX29wcyAoZ3MpID4gaW5kZXggKyAxCisJCQkgICAgICAmJiAobGFiZWwgPT0gTlVMTF9UUkVFCisJCQkgICAgICAgICAgfHwgVFJFRV9DT0RFIChsYWJlbCkgPT0gQ0FTRV9MQUJFTF9FWFBSKSk7CisgIGdpbXBsZV9zZXRfb3AgKGdzLCBpbmRleCArIDEsIGxhYmVsKTsKK30KKworLyogUmV0dXJuIHRoZSBkZWZhdWx0IGxhYmVsIGZvciBhIHN3aXRjaCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9zd2l0Y2hfZGVmYXVsdF9sYWJlbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICB0cmVlIGxhYmVsID0gZ2ltcGxlX3N3aXRjaF9sYWJlbCAoZ3MsIDApOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghQ0FTRV9MT1cgKGxhYmVsKSAmJiAhQ0FTRV9ISUdIIChsYWJlbCkpOworICByZXR1cm4gbGFiZWw7Cit9CisKKy8qIFNldCB0aGUgZGVmYXVsdCBsYWJlbCBmb3IgYSBzd2l0Y2ggc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfc3dpdGNoX3NldF9kZWZhdWx0X2xhYmVsIChnaW1wbGUgZ3MsIHRyZWUgbGFiZWwpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFDQVNFX0xPVyAobGFiZWwpICYmICFDQVNFX0hJR0ggKGxhYmVsKSk7CisgIGdpbXBsZV9zd2l0Y2hfc2V0X2xhYmVsIChncywgMCwgbGFiZWwpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBHUyBpcyBhIEdJTVBMRV9ERUJVRyBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX2dpbXBsZV9kZWJ1ZyAoY29uc3RfZ2ltcGxlIGdzKQoreworICByZXR1cm4gZ2ltcGxlX2NvZGUgKGdzKSA9PSBHSU1QTEVfREVCVUc7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFMgaXMgYSBHSU1QTEVfREVCVUcgQklORCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2dpbXBsZV9kZWJ1Z19iaW5kX3AgKGNvbnN0X2dpbXBsZSBzKQoreworICBpZiAoaXNfZ2ltcGxlX2RlYnVnIChzKSkKKyAgICByZXR1cm4gcy0+Z3NiYXNlLnN1YmNvZGUgPT0gR0lNUExFX0RFQlVHX0JJTkQ7CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm4gdGhlIHZhcmlhYmxlIGJvdW5kIGluIGEgR0lNUExFX0RFQlVHIGJpbmQgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfZGVidWdfYmluZF9nZXRfdmFyIChnaW1wbGUgZGJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGRiZywgR0lNUExFX0RFQlVHKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19iaW5kX3AgKGRiZykpOworICByZXR1cm4gZ2ltcGxlX29wIChkYmcsIDApOworfQorCisvKiBSZXR1cm4gdGhlIHZhbHVlIGJvdW5kIHRvIHRoZSB2YXJpYWJsZSBpbiBhIEdJTVBMRV9ERUJVRyBiaW5kCisgICBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9kZWJ1Z19iaW5kX2dldF92YWx1ZSAoZ2ltcGxlIGRiZykKK3sKKyAgR0lNUExFX0NIRUNLIChkYmcsIEdJTVBMRV9ERUJVRyk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfZGVidWdfYmluZF9wIChkYmcpKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZGJnLCAxKTsKK30KKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYm91bmQgdG8gdGhlIHZhcmlhYmxlIGluIGEKKyAgIEdJTVBMRV9ERUJVRyBiaW5kIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfZGVidWdfYmluZF9nZXRfdmFsdWVfcHRyIChnaW1wbGUgZGJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGRiZywgR0lNUExFX0RFQlVHKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19iaW5kX3AgKGRiZykpOworICByZXR1cm4gZ2ltcGxlX29wX3B0ciAoZGJnLCAxKTsKK30KKworLyogU2V0IHRoZSB2YXJpYWJsZSBib3VuZCBpbiBhIEdJTVBMRV9ERUJVRyBiaW5kIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX2RlYnVnX2JpbmRfc2V0X3ZhciAoZ2ltcGxlIGRiZywgdHJlZSB2YXIpCit7CisgIEdJTVBMRV9DSEVDSyAoZGJnLCBHSU1QTEVfREVCVUcpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoZ2ltcGxlX2RlYnVnX2JpbmRfcCAoZGJnKSk7CisgIGdpbXBsZV9zZXRfb3AgKGRiZywgMCwgdmFyKTsKK30KKworLyogU2V0IHRoZSB2YWx1ZSBib3VuZCB0byB0aGUgdmFyaWFibGUgaW4gYSBHSU1QTEVfREVCVUcgYmluZAorICAgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZGVidWdfYmluZF9zZXRfdmFsdWUgKGdpbXBsZSBkYmcsIHRyZWUgdmFsdWUpCit7CisgIEdJTVBMRV9DSEVDSyAoZGJnLCBHSU1QTEVfREVCVUcpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoZ2ltcGxlX2RlYnVnX2JpbmRfcCAoZGJnKSk7CisgIGdpbXBsZV9zZXRfb3AgKGRiZywgMSwgdmFsdWUpOworfQorCisvKiBUaGUgc2Vjb25kIG9wZXJhbmQgb2YgYSBHSU1QTEVfREVCVUdfQklORCwgd2hlbiB0aGUgdmFsdWUgd2FzCisgICBvcHRpbWl6ZWQgYXdheS4gICovCisjZGVmaW5lIEdJTVBMRV9ERUJVR19CSU5EX05PVkFMVUUgTlVMTF9UUkVFIC8qIGVycm9yX21hcmtfbm9kZSAqLworCisvKiBSZW1vdmUgdGhlIHZhbHVlIGJvdW5kIHRvIHRoZSB2YXJpYWJsZSBpbiBhIEdJTVBMRV9ERUJVRyBiaW5kCisgICBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9kZWJ1Z19iaW5kX3Jlc2V0X3ZhbHVlIChnaW1wbGUgZGJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGRiZywgR0lNUExFX0RFQlVHKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19iaW5kX3AgKGRiZykpOworICBnaW1wbGVfc2V0X29wIChkYmcsIDEsIEdJTVBMRV9ERUJVR19CSU5EX05PVkFMVUUpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgR0lNUExFX0RFQlVHIGJpbmQgc3RhdGVtZW50IGlzIGJvdW5kIHRvIGEKKyAgIHZhbHVlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfZGVidWdfYmluZF9oYXNfdmFsdWVfcCAoZ2ltcGxlIGRiZykKK3sKKyAgR0lNUExFX0NIRUNLIChkYmcsIEdJTVBMRV9ERUJVRyk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfZGVidWdfYmluZF9wIChkYmcpKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZGJnLCAxKSAhPSBHSU1QTEVfREVCVUdfQklORF9OT1ZBTFVFOworfQorCisjdW5kZWYgR0lNUExFX0RFQlVHX0JJTkRfTk9WQUxVRQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBTIGlzIGEgR0lNUExFX0RFQlVHIFNPVVJDRSBCSU5EIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX2RlYnVnX3NvdXJjZV9iaW5kX3AgKGNvbnN0X2dpbXBsZSBzKQoreworICBpZiAoaXNfZ2ltcGxlX2RlYnVnIChzKSkKKyAgICByZXR1cm4gcy0+Z3NiYXNlLnN1YmNvZGUgPT0gR0lNUExFX0RFQlVHX1NPVVJDRV9CSU5EOworCisgIHJldHVybiBmYWxzZTsKK30KKworLyogUmV0dXJuIHRoZSB2YXJpYWJsZSBib3VuZCBpbiBhIEdJTVBMRV9ERUJVRyBzb3VyY2UgYmluZCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9kZWJ1Z19zb3VyY2VfYmluZF9nZXRfdmFyIChnaW1wbGUgZGJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGRiZywgR0lNUExFX0RFQlVHKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19zb3VyY2VfYmluZF9wIChkYmcpKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZGJnLCAwKTsKK30KKworLyogUmV0dXJuIHRoZSB2YWx1ZSBib3VuZCB0byB0aGUgdmFyaWFibGUgaW4gYSBHSU1QTEVfREVCVUcgc291cmNlIGJpbmQKKyAgIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX2RlYnVnX3NvdXJjZV9iaW5kX2dldF92YWx1ZSAoZ2ltcGxlIGRiZykKK3sKKyAgR0lNUExFX0NIRUNLIChkYmcsIEdJTVBMRV9ERUJVRyk7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChnaW1wbGVfZGVidWdfc291cmNlX2JpbmRfcCAoZGJnKSk7CisgIHJldHVybiBnaW1wbGVfb3AgKGRiZywgMSk7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIGJvdW5kIHRvIHRoZSB2YXJpYWJsZSBpbiBhCisgICBHSU1QTEVfREVCVUcgc291cmNlIGJpbmQgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9kZWJ1Z19zb3VyY2VfYmluZF9nZXRfdmFsdWVfcHRyIChnaW1wbGUgZGJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGRiZywgR0lNUExFX0RFQlVHKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9kZWJ1Z19zb3VyY2VfYmluZF9wIChkYmcpKTsKKyAgcmV0dXJuIGdpbXBsZV9vcF9wdHIgKGRiZywgMSk7Cit9CisKKy8qIFNldCB0aGUgdmFyaWFibGUgYm91bmQgaW4gYSBHSU1QTEVfREVCVUcgc291cmNlIGJpbmQgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfZGVidWdfc291cmNlX2JpbmRfc2V0X3ZhciAoZ2ltcGxlIGRiZywgdHJlZSB2YXIpCit7CisgIEdJTVBMRV9DSEVDSyAoZGJnLCBHSU1QTEVfREVCVUcpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoZ2ltcGxlX2RlYnVnX3NvdXJjZV9iaW5kX3AgKGRiZykpOworICBnaW1wbGVfc2V0X29wIChkYmcsIDAsIHZhcik7Cit9CisKKy8qIFNldCB0aGUgdmFsdWUgYm91bmQgdG8gdGhlIHZhcmlhYmxlIGluIGEgR0lNUExFX0RFQlVHIHNvdXJjZSBiaW5kCisgICBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9kZWJ1Z19zb3VyY2VfYmluZF9zZXRfdmFsdWUgKGdpbXBsZSBkYmcsIHRyZWUgdmFsdWUpCit7CisgIEdJTVBMRV9DSEVDSyAoZGJnLCBHSU1QTEVfREVCVUcpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoZ2ltcGxlX2RlYnVnX3NvdXJjZV9iaW5kX3AgKGRiZykpOworICBnaW1wbGVfc2V0X29wIChkYmcsIDEsIHZhbHVlKTsKK30KKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYm9keSBmb3IgdGhlIE9NUCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEgKgorZ2ltcGxlX29tcF9ib2R5X3B0ciAoZ2ltcGxlIGdzKQoreworICByZXR1cm4gJmdzLT5vbXAuYm9keTsKK30KKworLyogUmV0dXJuIHRoZSBib2R5IGZvciB0aGUgT01QIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorZ2ltcGxlX29tcF9ib2R5IChnaW1wbGUgZ3MpCit7CisgIHJldHVybiAqZ2ltcGxlX29tcF9ib2R5X3B0ciAoZ3MpOworfQorCisvKiBTZXQgQk9EWSB0byBiZSB0aGUgYm9keSBmb3IgdGhlIE9NUCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfc2V0X2JvZHkgKGdpbXBsZSBncywgZ2ltcGxlX3NlcSBib2R5KQoreworICBncy0+b21wLmJvZHkgPSBib2R5OworfQorCisKKy8qIFJldHVybiB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggT01QX0NSSVRJQ0FMIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9jcml0aWNhbF9uYW1lIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfQ1JJVElDQUwpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfY3JpdGljYWwubmFtZTsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCBPTVAgY3JpdGljYWwgc3RhdGVtZW50IEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfY3JpdGljYWxfbmFtZV9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9DUklUSUNBTCk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfY3JpdGljYWwubmFtZTsKK30KKworCisvKiBTZXQgTkFNRSB0byBiZSB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggT01QIGNyaXRpY2FsIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9jcml0aWNhbF9zZXRfbmFtZSAoZ2ltcGxlIGdzLCB0cmVlIG5hbWUpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfQ1JJVElDQUwpOworICBncy0+Z2ltcGxlX29tcF9jcml0aWNhbC5uYW1lID0gbmFtZTsKK30KKworCisvKiBSZXR1cm4gdGhlIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfZm9yX2NsYXVzZXMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfZm9yLmNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgT01QX0ZPUiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX2Zvcl9jbGF1c2VzX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfZm9yLmNsYXVzZXM7Cit9CisKKworLyogU2V0IENMQVVTRVMgdG8gYmUgdGhlIGxpc3Qgb2YgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX0ZPUiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9mb3Jfc2V0X2NsYXVzZXMgKGdpbXBsZSBncywgdHJlZSBjbGF1c2VzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdzLT5naW1wbGVfb21wX2Zvci5jbGF1c2VzID0gY2xhdXNlczsKK30KKworCisvKiBHZXQgdGhlIGNvbGxhcHNlIGNvdW50IG9mIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHNpemVfdAorZ2ltcGxlX29tcF9mb3JfY29sbGFwc2UgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlOworfQorCisKKy8qIFJldHVybiB0aGUgaW5kZXggdmFyaWFibGUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfZm9yX2luZGV4IChjb25zdF9naW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmluZGV4OworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGluZGV4IHZhcmlhYmxlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfZm9yX2luZGV4X3B0ciAoZ2ltcGxlIGdzLCBzaXplX3QgaSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoaSA8IGdzLT5naW1wbGVfb21wX2Zvci5jb2xsYXBzZSk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uaW5kZXg7Cit9CisKKworLyogU2V0IElOREVYIHRvIGJlIHRoZSBpbmRleCB2YXJpYWJsZSBmb3IgT01QX0ZPUiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9mb3Jfc2V0X2luZGV4IChnaW1wbGUgZ3MsIHNpemVfdCBpLCB0cmVlIGluZGV4KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uaW5kZXggPSBpbmRleDsKK30KKworCisvKiBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfZm9yX2luaXRpYWwgKGNvbnN0X2dpbXBsZSBncywgc2l6ZV90IGkpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uaW5pdGlhbDsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbml0aWFsIHZhbHVlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfZm9yX2luaXRpYWxfcHRyIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5pbml0aWFsOworfQorCisKKy8qIFNldCBJTklUSUFMIHRvIGJlIHRoZSBpbml0aWFsIHZhbHVlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2Zvcl9zZXRfaW5pdGlhbCAoZ2ltcGxlIGdzLCBzaXplX3QgaSwgdHJlZSBpbml0aWFsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uaW5pdGlhbCA9IGluaXRpYWw7Cit9CisKKworLyogUmV0dXJuIHRoZSBmaW5hbCB2YWx1ZSBmb3IgT01QX0ZPUiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9mb3JfZmluYWwgKGNvbnN0X2dpbXBsZSBncywgc2l6ZV90IGkpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfZm9yLml0ZXJbaV0uZmluYWw7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmluYWwgdmFsdWUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9mb3JfZmluYWxfcHRyIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5maW5hbDsKK30KKworCisvKiBTZXQgRklOQUwgdG8gYmUgdGhlIGZpbmFsIHZhbHVlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2Zvcl9zZXRfZmluYWwgKGdpbXBsZSBncywgc2l6ZV90IGksIHRyZWUgZmluYWwpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICBncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5maW5hbCA9IGZpbmFsOworfQorCisKKy8qIFJldHVybiB0aGUgaW5jcmVtZW50IHZhbHVlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX2Zvcl9pbmNyIChjb25zdF9naW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX2Zvci5pdGVyW2ldLmluY3I7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaW5jcmVtZW50IHZhbHVlIGZvciBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfZm9yX2luY3JfcHRyIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdjY19naW1wbGVfY2hlY2tpbmdfYXNzZXJ0IChpIDwgZ3MtPmdpbXBsZV9vbXBfZm9yLmNvbGxhcHNlKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5pbmNyOworfQorCisKKy8qIFNldCBJTkNSIHRvIGJlIHRoZSBpbmNyZW1lbnQgdmFsdWUgZm9yIE9NUF9GT1IgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfZm9yX3NldF9pbmNyIChnaW1wbGUgZ3MsIHNpemVfdCBpLCB0cmVlIGluY3IpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICBncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5pbmNyID0gaW5jcjsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUgYmVmb3JlIHRoZSBPTVBfRk9SCisgICBzdGF0ZW1lbnQgR1Mgc3RhcnRzLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxICoKK2dpbXBsZV9vbXBfZm9yX3ByZV9ib2R5X3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfZm9yLnByZV9ib2R5OworfQorCisKKy8qIFJldHVybiB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB0byBleGVjdXRlIGJlZm9yZSB0aGUgT01QX0ZPUgorICAgc3RhdGVtZW50IEdTIHN0YXJ0cy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcQorZ2ltcGxlX29tcF9mb3JfcHJlX2JvZHkgKGdpbXBsZSBncykKK3sKKyAgcmV0dXJuICpnaW1wbGVfb21wX2Zvcl9wcmVfYm9keV9wdHIgKGdzKTsKK30KKworCisvKiBTZXQgUFJFX0JPRFkgdG8gYmUgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8gZXhlY3V0ZSBiZWZvcmUgdGhlCisgICBPTVBfRk9SIHN0YXRlbWVudCBHUyBzdGFydHMuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfZm9yX3NldF9wcmVfYm9keSAoZ2ltcGxlIGdzLCBnaW1wbGVfc2VxIHByZV9ib2R5KQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX0ZPUik7CisgIGdzLT5naW1wbGVfb21wX2Zvci5wcmVfYm9keSA9IHByZV9ib2R5OworfQorCisKKy8qIFJldHVybiB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1BBUkFMTEVMIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3BhcmFsbGVsX2NsYXVzZXMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9QQVJBTExFTCk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jbGF1c2VzOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9QQVJBTExFTCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3BhcmFsbGVsX2NsYXVzZXNfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNsYXVzZXM7Cit9CisKKworLyogU2V0IENMQVVTRVMgdG8gYmUgdGhlIGxpc3Qgb2YgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1BBUkFMTEVMCisgICBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9wYXJhbGxlbF9zZXRfY2xhdXNlcyAoZ2ltcGxlIGdzLCB0cmVlIGNsYXVzZXMpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jbGF1c2VzID0gY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gdGhlIGNoaWxkIGZ1bmN0aW9uIHVzZWQgdG8gaG9sZCB0aGUgYm9keSBvZiBPTVBfUEFSQUxMRUwgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfcGFyYWxsZWxfY2hpbGRfZm4gKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9QQVJBTExFTCk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jaGlsZF9mbjsKK30KKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2hpbGQgZnVuY3Rpb24gdXNlZCB0byBob2xkIHRoZSBib2R5IG9mCisgICBPTVBfUEFSQUxMRUwgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9wYXJhbGxlbF9jaGlsZF9mbl9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9QQVJBTExFTCk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2hpbGRfZm47Cit9CisKKworLyogU2V0IENISUxEX0ZOIHRvIGJlIHRoZSBjaGlsZCBmdW5jdGlvbiBmb3IgT01QX1BBUkFMTEVMIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3BhcmFsbGVsX3NldF9jaGlsZF9mbiAoZ2ltcGxlIGdzLCB0cmVlIGNoaWxkX2ZuKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1BBUkFMTEVMKTsKKyAgZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2hpbGRfZm4gPSBjaGlsZF9mbjsKK30KKworCisvKiBSZXR1cm4gdGhlIGFydGlmaWNpYWwgYXJndW1lbnQgdXNlZCB0byBzZW5kIHZhcmlhYmxlcyBhbmQgdmFsdWVzCisgICBmcm9tIHRoZSBwYXJlbnQgdG8gdGhlIGNoaWxkcmVuIHRocmVhZHMgaW4gT01QX1BBUkFMTEVMIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3BhcmFsbGVsX2RhdGFfYXJnIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuZGF0YV9hcmc7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZGF0YSBhcmd1bWVudCBmb3IgT01QX1BBUkFMTEVMIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfcGFyYWxsZWxfZGF0YV9hcmdfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfUEFSQUxMRUwpOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmRhdGFfYXJnOworfQorCisKKy8qIFNldCBEQVRBX0FSRyB0byBiZSB0aGUgZGF0YSBhcmd1bWVudCBmb3IgT01QX1BBUkFMTEVMIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3BhcmFsbGVsX3NldF9kYXRhX2FyZyAoZ2ltcGxlIGdzLCB0cmVlIGRhdGFfYXJnKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1BBUkFMTEVMKTsKKyAgZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuZGF0YV9hcmcgPSBkYXRhX2FyZzsKK30KKworCisvKiBSZXR1cm4gdGhlIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3Rhc2tfY2xhdXNlcyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3Rhc2tfY2xhdXNlc19wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jbGF1c2VzOworfQorCisKKy8qIFNldCBDTEFVU0VTIHRvIGJlIHRoZSBsaXN0IG9mIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9UQVNLCisgICBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF90YXNrX3NldF9jbGF1c2VzIChnaW1wbGUgZ3MsIHRyZWUgY2xhdXNlcykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2xhdXNlcyA9IGNsYXVzZXM7Cit9CisKKworLyogUmV0dXJuIHRoZSBjaGlsZCBmdW5jdGlvbiB1c2VkIHRvIGhvbGQgdGhlIGJvZHkgb2YgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfdGFza19jaGlsZF9mbiAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2hpbGRfZm47Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNoaWxkIGZ1bmN0aW9uIHVzZWQgdG8gaG9sZCB0aGUgYm9keSBvZgorICAgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF90YXNrX2NoaWxkX2ZuX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNoaWxkX2ZuOworfQorCisKKy8qIFNldCBDSElMRF9GTiB0byBiZSB0aGUgY2hpbGQgZnVuY3Rpb24gZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3Rhc2tfc2V0X2NoaWxkX2ZuIChnaW1wbGUgZ3MsIHRyZWUgY2hpbGRfZm4pCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNoaWxkX2ZuID0gY2hpbGRfZm47Cit9CisKKworLyogUmV0dXJuIHRoZSBhcnRpZmljaWFsIGFyZ3VtZW50IHVzZWQgdG8gc2VuZCB2YXJpYWJsZXMgYW5kIHZhbHVlcworICAgZnJvbSB0aGUgcGFyZW50IHRvIHRoZSBjaGlsZHJlbiB0aHJlYWRzIGluIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3Rhc2tfZGF0YV9hcmcgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmRhdGFfYXJnOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgYXJndW1lbnQgZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfdGFza19kYXRhX2FyZ19wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5kYXRhX2FyZzsKK30KKworCisvKiBTZXQgREFUQV9BUkcgdG8gYmUgdGhlIGRhdGEgYXJndW1lbnQgZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3Rhc2tfc2V0X2RhdGFfYXJnIChnaW1wbGUgZ3MsIHRyZWUgZGF0YV9hcmcpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmRhdGFfYXJnID0gZGF0YV9hcmc7Cit9CisKKworLyogUmV0dXJuIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF90YXNrcmVnX2NsYXVzZXMgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgaWYgKGdpbXBsZV9jb2RlIChncykgIT0gR0lNUExFX09NUF9QQVJBTExFTCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3Rhc2tyZWdfY2xhdXNlc19wdHIgKGdpbXBsZSBncykKK3sKKyAgaWYgKGdpbXBsZV9jb2RlIChncykgIT0gR0lNUExFX09NUF9QQVJBTExFTCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNsYXVzZXM7Cit9CisKKworLyogU2V0IENMQVVTRVMgdG8gYmUgdGhlIGxpc3Qgb2YgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1RBU0sKKyAgIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3Rhc2tyZWdfc2V0X2NsYXVzZXMgKGdpbXBsZSBncywgdHJlZSBjbGF1c2VzKQoreworICBpZiAoZ2ltcGxlX2NvZGUgKGdzKSAhPSBHSU1QTEVfT01QX1BBUkFMTEVMKQorICAgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmNsYXVzZXMgPSBjbGF1c2VzOworfQorCisKKy8qIFJldHVybiB0aGUgY2hpbGQgZnVuY3Rpb24gdXNlZCB0byBob2xkIHRoZSBib2R5IG9mIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX3Rhc2tyZWdfY2hpbGRfZm4gKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgaWYgKGdpbXBsZV9jb2RlIChncykgIT0gR0lNUExFX09NUF9QQVJBTExFTCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2hpbGRfZm47Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNoaWxkIGZ1bmN0aW9uIHVzZWQgdG8gaG9sZCB0aGUgYm9keSBvZgorICAgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF90YXNrcmVnX2NoaWxkX2ZuX3B0ciAoZ2ltcGxlIGdzKQoreworICBpZiAoZ2ltcGxlX2NvZGUgKGdzKSAhPSBHSU1QTEVfT01QX1BBUkFMTEVMKQorICAgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfcGFyYWxsZWwuY2hpbGRfZm47Cit9CisKKworLyogU2V0IENISUxEX0ZOIHRvIGJlIHRoZSBjaGlsZCBmdW5jdGlvbiBmb3IgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfdGFza3JlZ19zZXRfY2hpbGRfZm4gKGdpbXBsZSBncywgdHJlZSBjaGlsZF9mbikKK3sKKyAgaWYgKGdpbXBsZV9jb2RlIChncykgIT0gR0lNUExFX09NUF9QQVJBTExFTCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5jaGlsZF9mbiA9IGNoaWxkX2ZuOworfQorCisKKy8qIFJldHVybiB0aGUgYXJ0aWZpY2lhbCBhcmd1bWVudCB1c2VkIHRvIHNlbmQgdmFyaWFibGVzIGFuZCB2YWx1ZXMKKyAgIGZyb20gdGhlIHBhcmVudCB0byB0aGUgY2hpbGRyZW4gdGhyZWFkcyBpbiBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF90YXNrcmVnX2RhdGFfYXJnIChjb25zdF9naW1wbGUgZ3MpCit7CisgIGlmIChnaW1wbGVfY29kZSAoZ3MpICE9IEdJTVBMRV9PTVBfUEFSQUxMRUwpCisgICAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmRhdGFfYXJnOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgYXJndW1lbnQgZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfdGFza3JlZ19kYXRhX2FyZ19wdHIgKGdpbXBsZSBncykKK3sKKyAgaWYgKGdpbXBsZV9jb2RlIChncykgIT0gR0lNUExFX09NUF9QQVJBTExFTCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3BhcmFsbGVsLmRhdGFfYXJnOworfQorCisKKy8qIFNldCBEQVRBX0FSRyB0byBiZSB0aGUgZGF0YSBhcmd1bWVudCBmb3IgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfdGFza3JlZ19zZXRfZGF0YV9hcmcgKGdpbXBsZSBncywgdHJlZSBkYXRhX2FyZykKK3sKKyAgaWYgKGdpbXBsZV9jb2RlIChncykgIT0gR0lNUExFX09NUF9QQVJBTExFTCkKKyAgICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICBncy0+Z2ltcGxlX29tcF9wYXJhbGxlbC5kYXRhX2FyZyA9IGRhdGFfYXJnOworfQorCisKKy8qIFJldHVybiB0aGUgY29weSBmdW5jdGlvbiB1c2VkIHRvIGhvbGQgdGhlIGJvZHkgb2YgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfdGFza19jb3B5X2ZuIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF90YXNrLmNvcHlfZm47Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvcHkgZnVuY3Rpb24gdXNlZCB0byBob2xkIHRoZSBib2R5IG9mCisgICBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX3Rhc2tfY29weV9mbl9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF90YXNrLmNvcHlfZm47Cit9CisKKworLyogU2V0IENISUxEX0ZOIHRvIGJlIHRoZSBjb3B5IGZ1bmN0aW9uIGZvciBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF90YXNrX3NldF9jb3B5X2ZuIChnaW1wbGUgZ3MsIHRyZWUgY29weV9mbikKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgZ3MtPmdpbXBsZV9vbXBfdGFzay5jb3B5X2ZuID0gY29weV9mbjsKK30KKworCisvKiBSZXR1cm4gc2l6ZSBvZiB0aGUgZGF0YSBibG9jayBpbiBieXRlcyBpbiBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF90YXNrX2FyZ19zaXplIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF90YXNrLmFyZ19zaXplOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgYmxvY2sgc2l6ZSBmb3IgT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF90YXNrX2FyZ19zaXplX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1RBU0spOworICByZXR1cm4gJmdzLT5naW1wbGVfb21wX3Rhc2suYXJnX3NpemU7Cit9CisKKworLyogU2V0IEFSR19TSVpFIHRvIGJlIHRoZSBkYXRhIGJsb2NrIHNpemUgZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3Rhc2tfc2V0X2FyZ19zaXplIChnaW1wbGUgZ3MsIHRyZWUgYXJnX3NpemUpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIGdzLT5naW1wbGVfb21wX3Rhc2suYXJnX3NpemUgPSBhcmdfc2l6ZTsKK30KKworCisvKiBSZXR1cm4gYWxpZ24gb2YgdGhlIGRhdGEgYmxvY2sgaW4gYnl0ZXMgaW4gT01QX1RBU0sgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfdGFza19hcmdfYWxpZ24gKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9UQVNLKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfb21wX3Rhc2suYXJnX2FsaWduOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgYmxvY2sgYWxpZ24gZm9yIE9NUF9UQVNLIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfdGFza19hcmdfYWxpZ25fcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIHJldHVybiAmZ3MtPmdpbXBsZV9vbXBfdGFzay5hcmdfYWxpZ247Cit9CisKKworLyogU2V0IEFSR19TSVpFIHRvIGJlIHRoZSBkYXRhIGJsb2NrIGFsaWduIGZvciBPTVBfVEFTSyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF90YXNrX3NldF9hcmdfYWxpZ24gKGdpbXBsZSBncywgdHJlZSBhcmdfYWxpZ24pCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfVEFTSyk7CisgIGdzLT5naW1wbGVfb21wX3Rhc2suYXJnX2FsaWduID0gYXJnX2FsaWduOworfQorCisKKy8qIFJldHVybiB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1NJTkdMRSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9zaW5nbGVfY2xhdXNlcyAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1NJTkdMRSk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF9zaW5nbGUuY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfU0lOR0xFIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2dpbXBsZV9vbXBfc2luZ2xlX2NsYXVzZXNfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfU0lOR0xFKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9zaW5nbGUuY2xhdXNlczsKK30KKworCisvKiBTZXQgQ0xBVVNFUyB0byBiZSB0aGUgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1NJTkdMRSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9zaW5nbGVfc2V0X2NsYXVzZXMgKGdpbXBsZSBncywgdHJlZSBjbGF1c2VzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1NJTkdMRSk7CisgIGdzLT5naW1wbGVfb21wX3NpbmdsZS5jbGF1c2VzID0gY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gdGhlIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUF9TRUNUSU9OUyBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9zZWN0aW9uc19jbGF1c2VzIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfU0VDVElPTlMpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfc2VjdGlvbnMuY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfU0VDVElPTlMgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9zZWN0aW9uc19jbGF1c2VzX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1NFQ1RJT05TKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9zZWN0aW9ucy5jbGF1c2VzOworfQorCisKKy8qIFNldCBDTEFVU0VTIHRvIGJlIHRoZSBzZXQgb2YgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggT01QX1NFQ1RJT05TCisgICBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9zZWN0aW9uc19zZXRfY2xhdXNlcyAoZ2ltcGxlIGdzLCB0cmVlIGNsYXVzZXMpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfU0VDVElPTlMpOworICBncy0+Z2ltcGxlX29tcF9zZWN0aW9ucy5jbGF1c2VzID0gY2xhdXNlczsKK30KKworCisvKiBSZXR1cm4gdGhlIGNvbnRyb2wgdmFyaWFibGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBHSU1QTEVfT01QX1NFQ1RJT05TCisgICBpbiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9zZWN0aW9uc19jb250cm9sIChjb25zdF9naW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfU0VDVElPTlMpOworICByZXR1cm4gZ3MtPmdpbXBsZV9vbXBfc2VjdGlvbnMuY29udHJvbDsKK30KKworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjbGF1c2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgR0lNUExFX09NUF9TRUNUSU9OUworICAgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9zZWN0aW9uc19jb250cm9sX3B0ciAoZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfT01QX1NFQ1RJT05TKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX29tcF9zZWN0aW9ucy5jb250cm9sOworfQorCisKKy8qIFNldCBDT05UUk9MIHRvIGJlIHRoZSBzZXQgb2YgY2xhdXNlcyBhc3NvY2lhdGVkIHdpdGggdGhlCisgICBHSU1QTEVfT01QX1NFQ1RJT05TIGluIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX3NlY3Rpb25zX3NldF9jb250cm9sIChnaW1wbGUgZ3MsIHRyZWUgY29udHJvbCkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9TRUNUSU9OUyk7CisgIGdzLT5naW1wbGVfb21wX3NlY3Rpb25zLmNvbnRyb2wgPSBjb250cm9sOworfQorCisKKy8qIFNldCBDT05EIHRvIGJlIHRoZSBjb25kaXRpb24gY29kZSBmb3IgT01QX0ZPUiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9mb3Jfc2V0X2NvbmQgKGdpbXBsZSBncywgc2l6ZV90IGksIGVudW0gdHJlZV9jb2RlIGNvbmQpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9PTVBfRk9SKTsKKyAgZ2NjX2dpbXBsZV9jaGVja2luZ19hc3NlcnQgKFRSRUVfQ09ERV9DTEFTUyAoY29uZCkgPT0gdGNjX2NvbXBhcmlzb24KKwkJCSAgICAgICYmIGkgPCBncy0+Z2ltcGxlX29tcF9mb3IuY29sbGFwc2UpOworICBncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5jb25kID0gY29uZDsKK30KKworCisvKiBSZXR1cm4gdGhlIGNvbmRpdGlvbiBjb2RlIGFzc29jaWF0ZWQgd2l0aCBPTVBfRk9SIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBlbnVtIHRyZWVfY29kZQorZ2ltcGxlX29tcF9mb3JfY29uZCAoY29uc3RfZ2ltcGxlIGdzLCBzaXplX3QgaSkKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX09NUF9GT1IpOworICBnY2NfZ2ltcGxlX2NoZWNraW5nX2Fzc2VydCAoaSA8IGdzLT5naW1wbGVfb21wX2Zvci5jb2xsYXBzZSk7CisgIHJldHVybiBncy0+Z2ltcGxlX29tcF9mb3IuaXRlcltpXS5jb25kOworfQorCisKKy8qIFNldCB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGluIGFuIGF0b21pYyBzdG9yZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX29tcF9hdG9taWNfc3RvcmVfc2V0X3ZhbCAoZ2ltcGxlIGcsIHRyZWUgdmFsKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQVRPTUlDX1NUT1JFKTsKKyAgZy0+Z2ltcGxlX29tcF9hdG9taWNfc3RvcmUudmFsID0gdmFsOworfQorCisKKy8qIFJldHVybiB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGluIGFuIGF0b21pYyBzdG9yZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorZ2ltcGxlX29tcF9hdG9taWNfc3RvcmVfdmFsIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19TVE9SRSk7CisgIHJldHVybiBnLT5naW1wbGVfb21wX2F0b21pY19zdG9yZS52YWw7Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGluIGFuIGF0b21pYyBzdG9yZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX2F0b21pY19zdG9yZV92YWxfcHRyIChnaW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19TVE9SRSk7CisgIHJldHVybiAmZy0+Z2ltcGxlX29tcF9hdG9taWNfc3RvcmUudmFsOworfQorCisKKy8qIFNldCB0aGUgTEhTIG9mIGFuIGF0b21pYyBsb2FkLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2F0b21pY19sb2FkX3NldF9saHMgKGdpbXBsZSBnLCB0cmVlIGxocykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19MT0FEKTsKKyAgZy0+Z2ltcGxlX29tcF9hdG9taWNfbG9hZC5saHMgPSBsaHM7Cit9CisKKworLyogR2V0IHRoZSBMSFMgb2YgYW4gYXRvbWljIGxvYWQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfYXRvbWljX2xvYWRfbGhzIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19MT0FEKTsKKyAgcmV0dXJuIGctPmdpbXBsZV9vbXBfYXRvbWljX2xvYWQubGhzOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIExIUyBvZiBhbiBhdG9taWMgbG9hZC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX2F0b21pY19sb2FkX2xoc19wdHIgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQpOworICByZXR1cm4gJmctPmdpbXBsZV9vbXBfYXRvbWljX2xvYWQubGhzOworfQorCisKKy8qIFNldCB0aGUgUkhTIG9mIGFuIGF0b21pYyBsb2FkLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2F0b21pY19sb2FkX3NldF9yaHMgKGdpbXBsZSBnLCB0cmVlIHJocykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19MT0FEKTsKKyAgZy0+Z2ltcGxlX29tcF9hdG9taWNfbG9hZC5yaHMgPSByaHM7Cit9CisKKworLyogR2V0IHRoZSBSSFMgb2YgYW4gYXRvbWljIGxvYWQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfYXRvbWljX2xvYWRfcmhzIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0FUT01JQ19MT0FEKTsKKyAgcmV0dXJuIGctPmdpbXBsZV9vbXBfYXRvbWljX2xvYWQucmhzOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIFJIUyBvZiBhbiBhdG9taWMgbG9hZC4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX2F0b21pY19sb2FkX3Joc19wdHIgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQVRPTUlDX0xPQUQpOworICByZXR1cm4gJmctPmdpbXBsZV9vbXBfYXRvbWljX2xvYWQucmhzOworfQorCisKKy8qIEdldCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29udHJvbCB2YXJpYWJsZSBpbiBhIEdJTVBMRV9PTVBfQ09OVElOVUUuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9vbXBfY29udGludWVfY29udHJvbF9kZWYgKGNvbnN0X2dpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQ09OVElOVUUpOworICByZXR1cm4gZy0+Z2ltcGxlX29tcF9jb250aW51ZS5jb250cm9sX2RlZjsKK30KKworLyogVGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCByZXR1cm4gdGhlIGFkZHJlc3MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9jb250aW51ZV9jb250cm9sX2RlZl9wdHIgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQ09OVElOVUUpOworICByZXR1cm4gJmctPmdpbXBsZV9vbXBfY29udGludWUuY29udHJvbF9kZWY7Cit9CisKKy8qIFNldCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY29udHJvbCB2YXJpYWJsZSBpbiBhIEdJTVBMRV9PTVBfQ09OVElOVUUuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV9vbXBfY29udGludWVfc2V0X2NvbnRyb2xfZGVmIChnaW1wbGUgZywgdHJlZSBkZWYpCit7CisgIEdJTVBMRV9DSEVDSyAoZywgR0lNUExFX09NUF9DT05USU5VRSk7CisgIGctPmdpbXBsZV9vbXBfY29udGludWUuY29udHJvbF9kZWYgPSBkZWY7Cit9CisKKworLyogR2V0IHRoZSB1c2Ugb2YgdGhlIGNvbnRyb2wgdmFyaWFibGUgaW4gYSBHSU1QTEVfT01QX0NPTlRJTlVFLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfb21wX2NvbnRpbnVlX2NvbnRyb2xfdXNlIChjb25zdF9naW1wbGUgZykKK3sKKyAgR0lNUExFX0NIRUNLIChnLCBHSU1QTEVfT01QX0NPTlRJTlVFKTsKKyAgcmV0dXJuIGctPmdpbXBsZV9vbXBfY29udGludWUuY29udHJvbF91c2U7Cit9CisKKworLyogVGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCByZXR1cm4gdGhlIGFkZHJlc3MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX29tcF9jb250aW51ZV9jb250cm9sX3VzZV9wdHIgKGdpbXBsZSBnKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQ09OVElOVUUpOworICByZXR1cm4gJmctPmdpbXBsZV9vbXBfY29udGludWUuY29udHJvbF91c2U7Cit9CisKKworLyogU2V0IHRoZSB1c2Ugb2YgdGhlIGNvbnRyb2wgdmFyaWFibGUgaW4gYSBHSU1QTEVfT01QX0NPTlRJTlVFLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfb21wX2NvbnRpbnVlX3NldF9jb250cm9sX3VzZSAoZ2ltcGxlIGcsIHRyZWUgdXNlKQoreworICBHSU1QTEVfQ0hFQ0sgKGcsIEdJTVBMRV9PTVBfQ09OVElOVUUpOworICBnLT5naW1wbGVfb21wX2NvbnRpbnVlLmNvbnRyb2xfdXNlID0gdXNlOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBib2R5IGZvciB0aGUgR0lNUExFX1RSQU5TQUNUSU9OIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3NlcSAqCitnaW1wbGVfdHJhbnNhY3Rpb25fYm9keV9wdHIgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1RSQU5TQUNUSU9OKTsKKyAgcmV0dXJuICZncy0+Z2ltcGxlX3RyYW5zYWN0aW9uLmJvZHk7Cit9CisKKy8qIFJldHVybiB0aGUgYm9keSBmb3IgdGhlIEdJTVBMRV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK2dpbXBsZV90cmFuc2FjdGlvbl9ib2R5IChnaW1wbGUgZ3MpCit7CisgIHJldHVybiAqZ2ltcGxlX3RyYW5zYWN0aW9uX2JvZHlfcHRyIChncyk7Cit9CisKKy8qIFJldHVybiB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIGEgR0lNUExFX1RSQU5TQUNUSU9OLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfdHJhbnNhY3Rpb25fbGFiZWwgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1RSQU5TQUNUSU9OKTsKKyAgcmV0dXJuIGdzLT5naW1wbGVfdHJhbnNhY3Rpb24ubGFiZWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfdHJhbnNhY3Rpb25fbGFiZWxfcHRyIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9UUkFOU0FDVElPTik7CisgIHJldHVybiAmZ3MtPmdpbXBsZV90cmFuc2FjdGlvbi5sYWJlbDsKK30KKworLyogUmV0dXJuIHRoZSBzdWJjb2RlIGFzc29jaWF0ZWQgd2l0aCBhIEdJTVBMRV9UUkFOU0FDVElPTi4gICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitnaW1wbGVfdHJhbnNhY3Rpb25fc3ViY29kZSAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfVFJBTlNBQ1RJT04pOworICByZXR1cm4gZ3MtPmdzYmFzZS5zdWJjb2RlOworfQorCisvKiBTZXQgQk9EWSB0byBiZSB0aGUgYm9keSBmb3IgdGhlIEdJTVBMRV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpbXBsZV90cmFuc2FjdGlvbl9zZXRfYm9keSAoZ2ltcGxlIGdzLCBnaW1wbGVfc2VxIGJvZHkpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9UUkFOU0FDVElPTik7CisgIGdzLT5naW1wbGVfdHJhbnNhY3Rpb24uYm9keSA9IGJvZHk7Cit9CisKKy8qIFNldCB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIGEgR0lNUExFX1RSQU5TQUNUSU9OLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfdHJhbnNhY3Rpb25fc2V0X2xhYmVsIChnaW1wbGUgZ3MsIHRyZWUgbGFiZWwpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9UUkFOU0FDVElPTik7CisgIGdzLT5naW1wbGVfdHJhbnNhY3Rpb24ubGFiZWwgPSBsYWJlbDsKK30KKworLyogU2V0IHRoZSBzdWJjb2RlIGFzc29jaWF0ZWQgd2l0aCBhIEdJTVBMRV9UUkFOU0FDVElPTi4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3RyYW5zYWN0aW9uX3NldF9zdWJjb2RlIChnaW1wbGUgZ3MsIHVuc2lnbmVkIGludCBzdWJjb2RlKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfVFJBTlNBQ1RJT04pOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSBzdWJjb2RlOworfQorCisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJldHVybiB2YWx1ZSBmb3IgR0lNUExFX1JFVFVSTiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfcmV0dXJuX3JldHZhbF9wdHIgKGNvbnN0X2dpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1JFVFVSTik7CisgIHJldHVybiBnaW1wbGVfb3BfcHRyIChncywgMCk7Cit9CisKKy8qIFJldHVybiB0aGUgcmV0dXJuIHZhbHVlIGZvciBHSU1QTEVfUkVUVVJOIEdTLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfcmV0dXJuX3JldHZhbCAoY29uc3RfZ2ltcGxlIGdzKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUkVUVVJOKTsKKyAgcmV0dXJuIGdpbXBsZV9vcCAoZ3MsIDApOworfQorCisKKy8qIFNldCBSRVRWQUwgdG8gYmUgdGhlIHJldHVybiB2YWx1ZSBmb3IgR0lNUExFX1JFVFVSTiBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3JldHVybl9zZXRfcmV0dmFsIChnaW1wbGUgZ3MsIHRyZWUgcmV0dmFsKQoreworICBHSU1QTEVfQ0hFQ0sgKGdzLCBHSU1QTEVfUkVUVVJOKTsKKyAgZ2ltcGxlX3NldF9vcCAoZ3MsIDAsIHJldHZhbCk7Cit9CisKKworLyogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGdpbXBsZSBzdGF0ZW1lbnQgU1RNVCBpcyBhbnkgb2YgdGhlIE9wZW5NUCB0eXBlcy4gICovCisKKyNkZWZpbmUgQ0FTRV9HSU1QTEVfT01QCQkJCVwKKyAgICBjYXNlIEdJTVBMRV9PTVBfUEFSQUxMRUw6CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9UQVNLOgkJCVwKKyAgICBjYXNlIEdJTVBMRV9PTVBfRk9SOgkJCVwKKyAgICBjYXNlIEdJTVBMRV9PTVBfU0VDVElPTlM6CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9TRUNUSU9OU19TV0lUQ0g6CQlcCisgICAgY2FzZSBHSU1QTEVfT01QX1NJTkdMRToJCQlcCisgICAgY2FzZSBHSU1QTEVfT01QX1NFQ1RJT046CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9NQVNURVI6CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9PUkRFUkVEOgkJCVwKKyAgICBjYXNlIEdJTVBMRV9PTVBfQ1JJVElDQUw6CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9SRVRVUk46CQkJXAorICAgIGNhc2UgR0lNUExFX09NUF9BVE9NSUNfTE9BRDoJCVwKKyAgICBjYXNlIEdJTVBMRV9PTVBfQVRPTUlDX1NUT1JFOgkJXAorICAgIGNhc2UgR0lNUExFX09NUF9DT05USU5VRQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX2dpbXBsZV9vbXAgKGNvbnN0X2dpbXBsZSBzdG10KQoreworICBzd2l0Y2ggKGdpbXBsZV9jb2RlIChzdG10KSkKKyAgICB7CisgICAgQ0FTRV9HSU1QTEVfT01QOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKworLyogUmV0dXJucyBUUlVFIGlmIHN0YXRlbWVudCBHIGlzIGEgR0lNUExFX05PUC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX25vcF9wIChjb25zdF9naW1wbGUgZykKK3sKKyAgcmV0dXJuIGdpbXBsZV9jb2RlIChnKSA9PSBHSU1QTEVfTk9QOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIEdTIGlzIGEgR0lNUExFX1JFU1guICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX2dpbXBsZV9yZXN4IChjb25zdF9naW1wbGUgZ3MpCit7CisgIHJldHVybiBnaW1wbGVfY29kZSAoZ3MpID09IEdJTVBMRV9SRVNYOworfQorCisvKiBSZXR1cm4gdGhlIHByZWRpY3RvciBvZiBHSU1QTEVfUFJFRElDVCBzdGF0ZW1lbnQgR1MuICAqLworCitzdGF0aWMgaW5saW5lIGVudW0gYnJfcHJlZGljdG9yCitnaW1wbGVfcHJlZGljdF9wcmVkaWN0b3IgKGdpbXBsZSBncykKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BSRURJQ1QpOworICByZXR1cm4gKGVudW0gYnJfcHJlZGljdG9yKSAoZ3MtPmdzYmFzZS5zdWJjb2RlICYgfkdGX1BSRURJQ1RfVEFLRU4pOworfQorCisKKy8qIFNldCB0aGUgcHJlZGljdG9yIG9mIEdJTVBMRV9QUkVESUNUIHN0YXRlbWVudCBHUyB0byBQUkVESUNULiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfcHJlZGljdF9zZXRfcHJlZGljdG9yIChnaW1wbGUgZ3MsIGVudW0gYnJfcHJlZGljdG9yIHByZWRpY3RvcikKK3sKKyAgR0lNUExFX0NIRUNLIChncywgR0lNUExFX1BSRURJQ1QpOworICBncy0+Z3NiYXNlLnN1YmNvZGUgPSAoZ3MtPmdzYmFzZS5zdWJjb2RlICYgR0ZfUFJFRElDVF9UQUtFTikKKwkJICAgICAgIHwgKHVuc2lnbmVkKSBwcmVkaWN0b3I7Cit9CisKKworLyogUmV0dXJuIHRoZSBvdXRjb21lIG9mIEdJTVBMRV9QUkVESUNUIHN0YXRlbWVudCBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgZW51bSBwcmVkaWN0aW9uCitnaW1wbGVfcHJlZGljdF9vdXRjb21lIChnaW1wbGUgZ3MpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9QUkVESUNUKTsKKyAgcmV0dXJuIChncy0+Z3NiYXNlLnN1YmNvZGUgJiBHRl9QUkVESUNUX1RBS0VOKSA/IFRBS0VOIDogTk9UX1RBS0VOOworfQorCisKKy8qIFNldCB0aGUgb3V0Y29tZSBvZiBHSU1QTEVfUFJFRElDVCBzdGF0ZW1lbnQgR1MgdG8gT1VUQ09NRS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2ltcGxlX3ByZWRpY3Rfc2V0X291dGNvbWUgKGdpbXBsZSBncywgZW51bSBwcmVkaWN0aW9uIG91dGNvbWUpCit7CisgIEdJTVBMRV9DSEVDSyAoZ3MsIEdJTVBMRV9QUkVESUNUKTsKKyAgaWYgKG91dGNvbWUgPT0gVEFLRU4pCisgICAgZ3MtPmdzYmFzZS5zdWJjb2RlIHw9IEdGX1BSRURJQ1RfVEFLRU47CisgIGVsc2UKKyAgICBncy0+Z3NiYXNlLnN1YmNvZGUgJj0gfkdGX1BSRURJQ1RfVEFLRU47Cit9CisKKworLyogUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBtYWluIGV4cHJlc3Npb24gY29tcHV0ZWQgYnkgU1RNVC4gIFJldHVybgorICAgdm9pZF90eXBlX25vZGUgaWYgdGhlIHN0YXRlbWVudCBjb21wdXRlcyBub3RoaW5nLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitnaW1wbGVfZXhwcl90eXBlIChjb25zdF9naW1wbGUgc3RtdCkKK3sKKyAgZW51bSBnaW1wbGVfY29kZSBjb2RlID0gZ2ltcGxlX2NvZGUgKHN0bXQpOworCisgIGlmIChjb2RlID09IEdJTVBMRV9BU1NJR04gfHwgY29kZSA9PSBHSU1QTEVfQ0FMTCkKKyAgICB7CisgICAgICB0cmVlIHR5cGU7CisgICAgICAvKiBJbiBnZW5lcmFsIHdlIHdhbnQgdG8gcGFzcyBvdXQgYSB0eXBlIHRoYXQgY2FuIGJlIHN1YnN0aXR1dGVkCisgICAgICAgICBmb3IgYm90aCB0aGUgUkhTIGFuZCB0aGUgTEhTIHR5cGVzIGlmIHRoZXJlIGlzIGEgcG9zc2libHkKKwkgdXNlbGVzcyBjb252ZXJzaW9uIGludm9sdmVkLiAgVGhhdCBtZWFucyByZXR1cm5pbmcgdGhlCisJIG9yaWdpbmFsIFJIUyB0eXBlIGFzIGZhciBhcyB3ZSBjYW4gcmVjb25zdHJ1Y3QgaXQuICAqLworICAgICAgaWYgKGNvZGUgPT0gR0lNUExFX0NBTEwpCisJdHlwZSA9IGdpbXBsZV9jYWxsX3JldHVybl90eXBlIChzdG10KTsKKyAgICAgIGVsc2UKKwlzd2l0Y2ggKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQpKQorCSAgeworCSAgY2FzZSBQT0lOVEVSX1BMVVNfRVhQUjoKKwkgICAgdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10KSk7CisJICAgIGJyZWFrOworCisJICBkZWZhdWx0OgorCSAgICAvKiBBcyBmYWxsYmFjayB1c2UgdGhlIHR5cGUgb2YgdGhlIExIUy4gICovCisJICAgIHR5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9nZXRfbGhzIChzdG10KSk7CisJICAgIGJyZWFrOworCSAgfQorICAgICAgcmV0dXJuIHR5cGU7CisgICAgfQorICBlbHNlIGlmIChjb2RlID09IEdJTVBMRV9DT05EKQorICAgIHJldHVybiBib29sZWFuX3R5cGVfbm9kZTsKKyAgZWxzZQorICAgIHJldHVybiB2b2lkX3R5cGVfbm9kZTsKK30KKworLyogUmV0dXJuIHRydWUgaWYgVFlQRSBpcyBhIHN1aXRhYmxlIHR5cGUgZm9yIGEgc2NhbGFyIHJlZ2lzdGVyIHZhcmlhYmxlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitpc19naW1wbGVfcmVnX3R5cGUgKHRyZWUgdHlwZSkKK3sKKyAgcmV0dXJuICFBR0dSRUdBVEVfVFlQRV9QICh0eXBlKTsKK30KKworLyogUmV0dXJuIGEgbmV3IGl0ZXJhdG9yIHBvaW50aW5nIHRvIEdJTVBMRV9TRVEncyBmaXJzdCBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zdG10X2l0ZXJhdG9yCitnc2lfc3RhcnRfMSAoZ2ltcGxlX3NlcSAqc2VxKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpOworCisgIGkucHRyID0gZ2ltcGxlX3NlcV9maXJzdCAoKnNlcSk7CisgIGkuc2VxID0gc2VxOworICBpLmJiID0gaS5wdHIgPyBnaW1wbGVfYmIgKGkucHRyKSA6IE5VTEw7CisKKyAgcmV0dXJuIGk7Cit9CisKKyNkZWZpbmUgZ3NpX3N0YXJ0KHgpIGdzaV9zdGFydF8xKCYoeCkpCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3N0bXRfaXRlcmF0b3IKK2dzaV9ub25lICh2b2lkKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpOworICBpLnB0ciA9IE5VTEw7CisgIGkuc2VxID0gTlVMTDsKKyAgaS5iYiA9IE5VTEw7CisgIHJldHVybiBpOworfQorCisvKiBSZXR1cm4gYSBuZXcgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IHN0YXRlbWVudCBpbiBiYXNpYyBibG9jayBCQi4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3N0bXRfaXRlcmF0b3IKK2dzaV9zdGFydF9iYiAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGk7CisgIGdpbXBsZV9zZXEgKnNlcTsKKworICBzZXEgPSBiYl9zZXFfYWRkciAoYmIpOworICBpLnB0ciA9IGdpbXBsZV9zZXFfZmlyc3QgKCpzZXEpOworICBpLnNlcSA9IHNlcTsKKyAgaS5iYiA9IGJiOworCisgIHJldHVybiBpOworfQorCisKKy8qIFJldHVybiBhIG5ldyBpdGVyYXRvciBpbml0aWFsbHkgcG9pbnRpbmcgdG8gR0lNUExFX1NFUSdzIGxhc3Qgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc3RtdF9pdGVyYXRvcgorZ3NpX2xhc3RfMSAoZ2ltcGxlX3NlcSAqc2VxKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpOworCisgIGkucHRyID0gZ2ltcGxlX3NlcV9sYXN0ICgqc2VxKTsKKyAgaS5zZXEgPSBzZXE7CisgIGkuYmIgPSBpLnB0ciA/IGdpbXBsZV9iYiAoaS5wdHIpIDogTlVMTDsKKworICByZXR1cm4gaTsKK30KKworI2RlZmluZSBnc2lfbGFzdCh4KSBnc2lfbGFzdF8xKCYoeCkpCisKKy8qIFJldHVybiBhIG5ldyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gYmFzaWMgYmxvY2sgQkIuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zdG10X2l0ZXJhdG9yCitnc2lfbGFzdF9iYiAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGk7CisgIGdpbXBsZV9zZXEgKnNlcTsKKworICBzZXEgPSBiYl9zZXFfYWRkciAoYmIpOworICBpLnB0ciA9IGdpbXBsZV9zZXFfbGFzdCAoKnNlcSk7CisgIGkuc2VxID0gc2VxOworICBpLmJiID0gYmI7CisKKyAgcmV0dXJuIGk7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgSSBpcyBhdCB0aGUgZW5kIG9mIGl0cyBzZXF1ZW5jZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ3NpX2VuZF9wIChnaW1wbGVfc3RtdF9pdGVyYXRvciBpKQoreworICByZXR1cm4gaS5wdHIgPT0gTlVMTDsKK30KKworCisvKiBSZXR1cm4gdHJ1ZSBpZiBJIGlzIG9uZSBzdGF0ZW1lbnQgYmVmb3JlIHRoZSBlbmQgb2YgaXRzIHNlcXVlbmNlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitnc2lfb25lX2JlZm9yZV9lbmRfcCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIGkucHRyICE9IE5VTEwgJiYgaS5wdHItPmdzYmFzZS5uZXh0ID09IE5VTEw7Cit9CisKKworLyogQWR2YW5jZSB0aGUgaXRlcmF0b3IgdG8gdGhlIG5leHQgZ2ltcGxlIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3NpX25leHQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICppKQoreworICBpLT5wdHIgPSBpLT5wdHItPmdzYmFzZS5uZXh0OworfQorCisvKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgcHJldmlvdXMgZ2ltcGxlIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3NpX3ByZXYgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICppKQoreworICBnaW1wbGUgcHJldiA9IGktPnB0ci0+Z3NiYXNlLnByZXY7CisgIGlmIChwcmV2LT5nc2Jhc2UubmV4dCkKKyAgICBpLT5wdHIgPSBwcmV2OworICBlbHNlCisgICAgaS0+cHRyID0gTlVMTDsKK30KKworLyogUmV0dXJuIHRoZSBjdXJyZW50IHN0bXQuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZQorZ3NpX3N0bXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiBpLnB0cjsKK30KKworLyogUmV0dXJuIGEgYmxvY2sgc3RhdGVtZW50IGl0ZXJhdG9yIHRoYXQgcG9pbnRzIHRvIHRoZSBmaXJzdCBub24tbGFiZWwKKyAgIHN0YXRlbWVudCBpbiBibG9jayBCQi4gICovCisKK3N0YXRpYyBpbmxpbmUgZ2ltcGxlX3N0bXRfaXRlcmF0b3IKK2dzaV9hZnRlcl9sYWJlbHMgKGJhc2ljX2Jsb2NrIGJiKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2kgPSBnc2lfc3RhcnRfYmIgKGJiKTsKKworICB3aGlsZSAoIWdzaV9lbmRfcCAoZ3NpKSAmJiBnaW1wbGVfY29kZSAoZ3NpX3N0bXQgKGdzaSkpID09IEdJTVBMRV9MQUJFTCkKKyAgICBnc2lfbmV4dCAoJmdzaSk7CisKKyAgcmV0dXJuIGdzaTsKK30KKworLyogQWR2YW5jZSB0aGUgaXRlcmF0b3IgdG8gdGhlIG5leHQgbm9uLWRlYnVnIGdpbXBsZSBzdGF0ZW1lbnQuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2dzaV9uZXh0X25vbmRlYnVnIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqaSkKK3sKKyAgZG8KKyAgICB7CisgICAgICBnc2lfbmV4dCAoaSk7CisgICAgfQorICB3aGlsZSAoIWdzaV9lbmRfcCAoKmkpICYmIGlzX2dpbXBsZV9kZWJ1ZyAoZ3NpX3N0bXQgKCppKSkpOworfQorCisvKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgbmV4dCBub24tZGVidWcgZ2ltcGxlIHN0YXRlbWVudC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ3NpX3ByZXZfbm9uZGVidWcgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICppKQoreworICBkbworICAgIHsKKyAgICAgIGdzaV9wcmV2IChpKTsKKyAgICB9CisgIHdoaWxlICghZ3NpX2VuZF9wICgqaSkgJiYgaXNfZ2ltcGxlX2RlYnVnIChnc2lfc3RtdCAoKmkpKSk7Cit9CisKKy8qIFJldHVybiBhIG5ldyBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3Qgbm9uLWRlYnVnIHN0YXRlbWVudCBpbgorICAgYmFzaWMgYmxvY2sgQkIuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zdG10X2l0ZXJhdG9yCitnc2lfc3RhcnRfbm9uZGVidWdfYmIgKGJhc2ljX2Jsb2NrIGJiKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpID0gZ3NpX3N0YXJ0X2JiIChiYik7CisKKyAgaWYgKCFnc2lfZW5kX3AgKGkpICYmIGlzX2dpbXBsZV9kZWJ1ZyAoZ3NpX3N0bXQgKGkpKSkKKyAgICBnc2lfbmV4dF9ub25kZWJ1ZyAoJmkpOworCisgIHJldHVybiBpOworfQorCisvKiBSZXR1cm4gYSBuZXcgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGxhc3Qgbm9uLWRlYnVnIHN0YXRlbWVudCBpbgorICAgYmFzaWMgYmxvY2sgQkIuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zdG10X2l0ZXJhdG9yCitnc2lfbGFzdF9ub25kZWJ1Z19iYiAoYmFzaWNfYmxvY2sgYmIpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGkgPSBnc2lfbGFzdF9iYiAoYmIpOworCisgIGlmICghZ3NpX2VuZF9wIChpKSAmJiBpc19naW1wbGVfZGVidWcgKGdzaV9zdG10IChpKSkpCisgICAgZ3NpX3ByZXZfbm9uZGVidWcgKCZpKTsKKworICByZXR1cm4gaTsKK30KKworCisvKiBSZXR1cm4gdGhlIGJhc2ljIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGl0ZXJhdG9yLiAgKi8KKworc3RhdGljIGlubGluZSBiYXNpY19ibG9jaworZ3NpX2JiIChnaW1wbGVfc3RtdF9pdGVyYXRvciBpKQoreworICByZXR1cm4gaS5iYjsKK30KKworCisvKiBSZXR1cm4gdGhlIHNlcXVlbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGl0ZXJhdG9yLiAgKi8KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxCitnc2lfc2VxIChnaW1wbGVfc3RtdF9pdGVyYXRvciBpKQoreworICByZXR1cm4gKmkuc2VxOworfQorCisKK2VudW0gZ3NpX2l0ZXJhdG9yX3VwZGF0ZQoreworICBHU0lfTkVXX1NUTVQsCQkvKiBPbmx5IHZhbGlkIHdoZW4gc2luZ2xlIHN0YXRlbWVudCBpcyBhZGRlZCwgbW92ZQorCQkJICAgaXRlcmF0b3IgdG8gaXQuICAqLworICBHU0lfU0FNRV9TVE1ULAkvKiBMZWF2ZSB0aGUgaXRlcmF0b3IgYXQgdGhlIHNhbWUgc3RhdGVtZW50LiAgKi8KKyAgR1NJX0NPTlRJTlVFX0xJTktJTkcJLyogTW92ZSBpdGVyYXRvciB0byB3aGF0ZXZlciBwb3NpdGlvbiBpcyBzdWl0YWJsZQorCQkJICAgZm9yIGxpbmtpbmcgb3RoZXIgc3RhdGVtZW50cyBpbiB0aGUgc2FtZQorCQkJICAgZGlyZWN0aW9uLiAgKi8KK307CisKKy8qIEluIGdpbXBsZS1pdGVyYXRvci5jICAqLworZ2ltcGxlX3N0bXRfaXRlcmF0b3IgZ3NpX3N0YXJ0X3BoaXMgKGJhc2ljX2Jsb2NrKTsKK2dpbXBsZV9zZXEgZ3NpX3NwbGl0X3NlcV9hZnRlciAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IpOwordm9pZCBnc2lfc3BsaXRfc2VxX2JlZm9yZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlX3NlcSAqKTsKK3ZvaWQgZ3NpX3NldF9zdG10IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBnaW1wbGUpOwordm9pZCBnc2lfcmVwbGFjZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlLCBib29sKTsKK3ZvaWQgZ3NpX3JlcGxhY2Vfd2l0aF9zZXEgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGdpbXBsZV9zZXEsIGJvb2wpOwordm9pZCBnc2lfaW5zZXJ0X2JlZm9yZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlLAorCQkJZW51bSBnc2lfaXRlcmF0b3JfdXBkYXRlKTsKK3ZvaWQgZ3NpX2luc2VydF9iZWZvcmVfd2l0aG91dF91cGRhdGUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGdpbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3NpX2l0ZXJhdG9yX3VwZGF0ZSk7Cit2b2lkIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlX3NlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGdzaV9pdGVyYXRvcl91cGRhdGUpOwordm9pZCBnc2lfaW5zZXJ0X3NlcV9iZWZvcmVfd2l0aG91dF91cGRhdGUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGdpbXBsZV9zZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnc2lfaXRlcmF0b3JfdXBkYXRlKTsKK3ZvaWQgZ3NpX2luc2VydF9hZnRlciAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlLAorCQkgICAgICAgZW51bSBnc2lfaXRlcmF0b3JfdXBkYXRlKTsKK3ZvaWQgZ3NpX2luc2VydF9hZnRlcl93aXRob3V0X3VwZGF0ZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGdzaV9pdGVyYXRvcl91cGRhdGUpOwordm9pZCBnc2lfaW5zZXJ0X3NlcV9hZnRlciAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZ2ltcGxlX3NlcSwKKwkJCSAgIGVudW0gZ3NpX2l0ZXJhdG9yX3VwZGF0ZSk7Cit2b2lkIGdzaV9pbnNlcnRfc2VxX2FmdGVyX3dpdGhvdXRfdXBkYXRlIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBnaW1wbGVfc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnc2lfaXRlcmF0b3JfdXBkYXRlKTsKK2Jvb2wgZ3NpX3JlbW92ZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgYm9vbCk7CitnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2lfZm9yX3N0bXQgKGdpbXBsZSk7Cit2b2lkIGdzaV9tb3ZlX2FmdGVyIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqKTsKK3ZvaWQgZ3NpX21vdmVfYmVmb3JlIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqKTsKK3ZvaWQgZ3NpX21vdmVfdG9fYmJfZW5kIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBiYXNpY19ibG9jayk7Cit2b2lkIGdzaV9pbnNlcnRfb25fZWRnZSAoZWRnZSwgZ2ltcGxlKTsKK3ZvaWQgZ3NpX2luc2VydF9zZXFfb25fZWRnZSAoZWRnZSwgZ2ltcGxlX3NlcSk7CitiYXNpY19ibG9jayBnc2lfaW5zZXJ0X29uX2VkZ2VfaW1tZWRpYXRlIChlZGdlLCBnaW1wbGUpOworYmFzaWNfYmxvY2sgZ3NpX2luc2VydF9zZXFfb25fZWRnZV9pbW1lZGlhdGUgKGVkZ2UsIGdpbXBsZV9zZXEpOwordm9pZCBnc2lfY29tbWl0X29uZV9lZGdlX2luc2VydCAoZWRnZSwgYmFzaWNfYmxvY2sgKik7Cit2b2lkIGdzaV9jb21taXRfZWRnZV9pbnNlcnRzICh2b2lkKTsKK2dpbXBsZSBnaW1wbGVfY2FsbF9jb3B5X3NraXBfYXJncyAoZ2ltcGxlLCBiaXRtYXApOworCisKKy8qIENvbnZlbmllbmNlIHJvdXRpbmVzIHRvIHdhbGsgYWxsIHN0YXRlbWVudHMgb2YgYSBnaW1wbGUgZnVuY3Rpb24uCisgICBOb3RlIHRoYXQgdGhpcyBpcyB1c2VmdWwgZXhjbHVzaXZlbHkgYmVmb3JlIHRoZSBjb2RlIGlzIGNvbnZlcnRlZAorICAgaW50byBTU0EgZm9ybS4gIE9uY2UgdGhlIHByb2dyYW0gaXMgaW4gU1NBIGZvcm0sIHRoZSBzdGFuZGFyZAorICAgb3BlcmFuZCBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgdG8gYW5hbHl6ZS9tb2RpZnkgc3RhdGVtZW50cy4gICovCitzdHJ1Y3Qgd2Fsa19zdG10X2luZm8KK3sKKyAgLyogUG9pbnRzIHRvIHRoZSBjdXJyZW50IHN0YXRlbWVudCBiZWluZyB3YWxrZWQuICAqLworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7CisKKyAgLyogQWRkaXRpb25hbCBkYXRhIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBtYXkgd2FudCB0byBjYXJyeQorICAgICB0aHJvdWdoIHRoZSByZWN1cnNpb24uICAqLworICB2b2lkICppbmZvOworCisgIC8qIFBvaW50ZXIgbWFwIHVzZWQgdG8gbWFyayB2aXNpdGVkIHRyZWUgbm9kZXMgd2hlbiBjYWxsaW5nCisgICAgIHdhbGtfdHJlZSBvbiBlYWNoIG9wZXJhbmQuICBJZiBzZXQgdG8gTlVMTCwgZHVwbGljYXRlIHRyZWUgbm9kZXMKKyAgICAgd2lsbCBiZSB2aXNpdGVkIG1vcmUgdGhhbiBvbmNlLiAgKi8KKyAgc3RydWN0IHBvaW50ZXJfc2V0X3QgKnBzZXQ7CisKKyAgLyogT3BlcmFuZCByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tzLiAgVGhpcyBpcyBzZXQgd2hlbiBjYWxsaW5nCisgICAgIHdhbGtfZ2ltcGxlX3NlcS4gIElmIHRoZSB3YWxrX3N0bXRfZm4gb3Igd2Fsa190cmVlX2ZuIGNhbGxiYWNrCisgICAgIHJldHVybnMgbm9uLU5VTEwsIHRoaXMgZmllbGQgd2lsbCBjb250YWluIHRoZSB0cmVlIHJldHVybmVkIGJ5CisgICAgIHRoZSBsYXN0IGNhbGxiYWNrLiAgKi8KKyAgdHJlZSBjYWxsYmFja19yZXN1bHQ7CisKKyAgLyogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG9wZXJhbmQgYmVpbmcgZXhhbWluZWQgbWF5IGJlIHJlcGxhY2VkCisgICAgIHdpdGggc29tZXRoaW5nIHRoYXQgbWF0Y2hlcyBpc19naW1wbGVfdmFsIChpZiB0cnVlKSBvciBzb21ldGhpbmcKKyAgICAgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCAoaWYgZmFsc2UpLiAgIlNvbWV0aGluZyIgdGVjaG5pY2FsbHkKKyAgICAgbWVhbnMgdGhlIGNvbW1vbiBzdWJzZXQgb2YgaXNfZ2ltcGxlX2x2YWx1ZSBhbmQgaXNfZ2ltcGxlX3JocywKKyAgICAgYnV0IHdlIG5ldmVyIHRyeSB0byBmb3JtIGFueXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGF0LCBzbworICAgICB3ZSBkb24ndCBib3RoZXIgY2hlY2tpbmcuCisKKyAgICAgQWxzbyBub3RlIHRoYXQgQ0FMTEJBQ0sgc2hvdWxkIHVwZGF0ZSB0aGlzIGZsYWcgd2hpbGUgd2Fsa2luZyB0aGUKKyAgICAgc3ViLWV4cHJlc3Npb25zIG9mIGEgc3RhdGVtZW50LiAgRm9yIGluc3RhbmNlLCB3aGVuIHdhbGtpbmcgdGhlCisgICAgIHN0YXRlbWVudCAnZm9vICgmdmFyKScsIHRoZSBmbGFnIFZBTF9PTkxZIHdpbGwgaW5pdGlhbGx5IGJlIHNldAorICAgICB0byB0cnVlLCBob3dldmVyLCB3aGVuIHdhbGtpbmcgJnZhciwgdGhlIG9wZXJhbmQgb2YgdGhhdAorICAgICBBRERSX0VYUFIgZG9lcyBub3QgbmVlZCB0byBiZSBhIEdJTVBMRSB2YWx1ZS4gICovCisgIEJPT0xfQklURklFTEQgdmFsX29ubHkgOiAxOworCisgIC8qIFRydWUgaWYgd2UgYXJlIGN1cnJlbnRseSB3YWxraW5nIHRoZSBMSFMgb2YgYW4gYXNzaWdubWVudC4gICovCisgIEJPT0xfQklURklFTEQgaXNfbGhzIDogMTsKKworICAvKiBPcHRpb25hbC4gIFNldCB0byB0cnVlIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgaWYgdGhleSBtYWRlIGFueQorICAgICBjaGFuZ2VzLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBjaGFuZ2VkIDogMTsKKworICAvKiBUcnVlIGlmIHdlJ3JlIGludGVyZXN0ZWQgaW4gbG9jYXRpb24gaW5mb3JtYXRpb24uICAqLworICBCT09MX0JJVEZJRUxEIHdhbnRfbG9jYXRpb25zIDogMTsKKworICAvKiBUcnVlIGlmIHdlJ3ZlIHJlbW92ZWQgdGhlIHN0YXRlbWVudCB0aGF0IHdhcyBwcm9jZXNzZWQuICAqLworICBCT09MX0JJVEZJRUxEIHJlbW92ZWRfc3RtdCA6IDE7Cit9OworCisvKiBDYWxsYmFjayBmb3Igd2Fsa19naW1wbGVfc3RtdC4gIENhbGxlZCBmb3IgZXZlcnkgc3RhdGVtZW50IGZvdW5kCisgICBkdXJpbmcgdHJhdmVyc2FsLiAgVGhlIGZpcnN0IGFyZ3VtZW50IHBvaW50cyB0byB0aGUgc3RhdGVtZW50IHRvCisgICB3YWxrLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGZsYWcgdGhhdCB0aGUgY2FsbGJhY2sgc2V0cyB0bworICAgJ3RydWUnIGlmIGl0IHRoZSBjYWxsYmFjayBoYW5kbGVkIGFsbCB0aGUgb3BlcmFuZHMgYW5kCisgICBzdWItc3RhdGVtZW50cyBvZiB0aGUgc3RhdGVtZW50ICh0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIGZsYWcgaXMKKyAgICdmYWxzZScpLiAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuIGFub255bW91cyBwb2ludGVyIHRvIGRhdGEKKyAgIHRvIGJlIHVzZWQgYnkgdGhlIGNhbGxiYWNrLiAgKi8KK3R5cGVkZWYgdHJlZSAoKndhbGtfc3RtdF9mbikgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGJvb2wgKiwKKwkJCSAgICAgIHN0cnVjdCB3YWxrX3N0bXRfaW5mbyAqKTsKKworZ2ltcGxlIHdhbGtfZ2ltcGxlX3NlcSAoZ2ltcGxlX3NlcSwgd2Fsa19zdG10X2ZuLCB3YWxrX3RyZWVfZm4sCisJCSAgICAgICAgc3RydWN0IHdhbGtfc3RtdF9pbmZvICopOworZ2ltcGxlIHdhbGtfZ2ltcGxlX3NlcV9tb2QgKGdpbXBsZV9zZXEgKiwgd2Fsa19zdG10X2ZuLCB3YWxrX3RyZWVfZm4sCisJCQkgICAgc3RydWN0IHdhbGtfc3RtdF9pbmZvICopOwordHJlZSB3YWxrX2dpbXBsZV9zdG10IChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCB3YWxrX3N0bXRfZm4sIHdhbGtfdHJlZV9mbiwKKwkJICAgICAgIHN0cnVjdCB3YWxrX3N0bXRfaW5mbyAqKTsKK3RyZWUgd2Fsa19naW1wbGVfb3AgKGdpbXBsZSwgd2Fsa190cmVlX2ZuLCBzdHJ1Y3Qgd2Fsa19zdG10X2luZm8gKik7CisKKy8qIEVudW0gYW5kIGFycmF5cyB1c2VkIGZvciBhbGxvY2F0aW9uIHN0YXRzLiAgS2VlcCBpbiBzeW5jIHdpdGgKKyAgIGdpbXBsZS5jOmdpbXBsZV9hbGxvY19raW5kX25hbWVzLiAgKi8KK2VudW0gZ2ltcGxlX2FsbG9jX2tpbmQKK3sKKyAgZ2ltcGxlX2FsbG9jX2tpbmRfYXNzaWduLAkvKiBBc3NpZ25tZW50cy4gICovCisgIGdpbXBsZV9hbGxvY19raW5kX3BoaSwJLyogUEhJIG5vZGVzLiAgKi8KKyAgZ2ltcGxlX2FsbG9jX2tpbmRfY29uZCwJLyogQ29uZGl0aW9uYWxzLiAgKi8KKyAgZ2ltcGxlX2FsbG9jX2tpbmRfcmVzdCwJLyogRXZlcnl0aGluZyBlbHNlLiAgKi8KKyAgZ2ltcGxlX2FsbG9jX2tpbmRfYWxsCit9OworCitleHRlcm4gaW50IGdpbXBsZV9hbGxvY19jb3VudHNbXTsKK2V4dGVybiBpbnQgZ2ltcGxlX2FsbG9jX3NpemVzW107CisKKy8qIFJldHVybiB0aGUgYWxsb2NhdGlvbiBraW5kIGZvciBhIGdpdmVuIHN0bXQgQ09ERS4gICovCitzdGF0aWMgaW5saW5lIGVudW0gZ2ltcGxlX2FsbG9jX2tpbmQKK2dpbXBsZV9hbGxvY19raW5kIChlbnVtIGdpbXBsZV9jb2RlIGNvZGUpCit7CisgIHN3aXRjaCAoY29kZSkKKyAgICB7CisgICAgICBjYXNlIEdJTVBMRV9BU1NJR046CisJcmV0dXJuIGdpbXBsZV9hbGxvY19raW5kX2Fzc2lnbjsKKyAgICAgIGNhc2UgR0lNUExFX1BISToKKwlyZXR1cm4gZ2ltcGxlX2FsbG9jX2tpbmRfcGhpOworICAgICAgY2FzZSBHSU1QTEVfQ09ORDoKKwlyZXR1cm4gZ2ltcGxlX2FsbG9jX2tpbmRfY29uZDsKKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJuIGdpbXBsZV9hbGxvY19raW5kX3Jlc3Q7CisgICAgfQorfQorCitleHRlcm4gdm9pZCBkdW1wX2dpbXBsZV9zdGF0aXN0aWNzICh2b2lkKTsKKworLyogSW4gZ2ltcGxlLWZvbGQuYy4gICovCit2b2lkIGdpbXBsaWZ5X2FuZF91cGRhdGVfY2FsbF9mcm9tX3RyZWUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIHRyZWUpOwordHJlZSBnaW1wbGVfZm9sZF9idWlsdGluIChnaW1wbGUpOworYm9vbCBmb2xkX3N0bXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICopOworYm9vbCBmb2xkX3N0bXRfaW5wbGFjZSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKik7Cit0cmVlIGdldF9zeW1ib2xfY29uc3RhbnRfdmFsdWUgKHRyZWUpOwordHJlZSBjYW5vbmljYWxpemVfY29uc3RydWN0b3JfdmFsICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG1heWJlX2ZvbGRfYW5kX2NvbXBhcmlzb25zIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgCisJCQkJCWVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG1heWJlX2ZvbGRfb3JfY29tcGFyaXNvbnMgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLAorCQkJCSAgICAgICBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CisKK2Jvb2wgZ2ltcGxlX3ZhbF9ub25uZWdhdGl2ZV9yZWFsX3AgKHRyZWUpOworI2VuZGlmICAvKiBHQ0NfR0lNUExFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9nc3N0cnVjdC5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ3NzdHJ1Y3QuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzM4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvZ3NzdHJ1Y3QuZGVmCkBAIC0wLDAgKzEsNTMgQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBnaW1wbGUgSVIgc3RydWN0dXJlCisgICBlbnVtZXJhdGlvbiB1c2VkIGluIEdDQy4KKworICAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzCisgICBERUZHU1NUUlVDVChHU1MgZW51bWVyYXRpb24gdmFsdWUsIHN0cnVjdHVyZSBuYW1lLCBoYXMtdHJlZS1vcGVyYW5kcykuCisgICBFYWNoIGVudW0gdmFsdWUgc2hvdWxkIGNvcnJlc3BvbmQgd2l0aCBhIHNpbmdsZSBtZW1iZXIgb2YgdGhlIHVuaW9uCisgICBnaW1wbGVfc3RhdGVtZW50X2QuICAqLworCitERUZHU1NUUlVDVChHU1NfQkFTRSwgZ2ltcGxlX3N0YXRlbWVudF9iYXNlLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19XSVRIX09QUywgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcywgdHJ1ZSkKK0RFRkdTU1RSVUNUKEdTU19XSVRIX01FTV9PUFNfQkFTRSwgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfV0lUSF9NRU1fT1BTLCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfbWVtb3J5X29wcywgdHJ1ZSkKK0RFRkdTU1RSVUNUKEdTU19DQUxMLCBnaW1wbGVfc3RhdGVtZW50X2NhbGwsIHRydWUpCitERUZHU1NUUlVDVChHU1NfQVNNLCBnaW1wbGVfc3RhdGVtZW50X2FzbSwgdHJ1ZSkKK0RFRkdTU1RSVUNUKEdTU19CSU5ELCBnaW1wbGVfc3RhdGVtZW50X2JpbmQsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX1BISSwgZ2ltcGxlX3N0YXRlbWVudF9waGksIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX1RSWSwgZ2ltcGxlX3N0YXRlbWVudF90cnksIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX0NBVENILCBnaW1wbGVfc3RhdGVtZW50X2NhdGNoLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19FSF9GSUxURVIsIGdpbXBsZV9zdGF0ZW1lbnRfZWhfZmlsdGVyLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19FSF9NTlQsIGdpbXBsZV9zdGF0ZW1lbnRfZWhfbW50LCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19FSF9DVFJMLCBnaW1wbGVfc3RhdGVtZW50X2VoX2N0cmwsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX0VIX0VMU0UsIGdpbXBsZV9zdGF0ZW1lbnRfZWhfZWxzZSwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfV0NFLCBnaW1wbGVfc3RhdGVtZW50X3djZSwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QLCBnaW1wbGVfc3RhdGVtZW50X29tcCwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX0NSSVRJQ0FMLCBnaW1wbGVfc3RhdGVtZW50X29tcF9jcml0aWNhbCwgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX0ZPUiwgZ2ltcGxlX3N0YXRlbWVudF9vbXBfZm9yLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19PTVBfUEFSQUxMRUwsIGdpbXBsZV9zdGF0ZW1lbnRfb21wX3BhcmFsbGVsLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19PTVBfVEFTSywgZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzaywgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX1NFQ1RJT05TLCBnaW1wbGVfc3RhdGVtZW50X29tcF9zZWN0aW9ucywgZmFsc2UpCitERUZHU1NUUlVDVChHU1NfT01QX1NJTkdMRSwgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2luZ2xlLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19PTVBfQ09OVElOVUUsIGdpbXBsZV9zdGF0ZW1lbnRfb21wX2NvbnRpbnVlLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19PTVBfQVRPTUlDX0xPQUQsIGdpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19sb2FkLCBmYWxzZSkKK0RFRkdTU1RSVUNUKEdTU19PTVBfQVRPTUlDX1NUT1JFLCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfc3RvcmUsIGZhbHNlKQorREVGR1NTVFJVQ1QoR1NTX1RSQU5TQUNUSU9OLCBnaW1wbGVfc3RhdGVtZW50X3RyYW5zYWN0aW9uLCBmYWxzZSkKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9ndG0tYnVpbHRpbnMuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2d0bS1idWlsdGlucy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxMDE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9ndG0tYnVpbHRpbnMuZGVmCkBAIC0wLDAgKzEsMjA4IEBACitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fU1RBUlQsICJfSVRNX2JlZ2luVHJhbnNhY3Rpb24iLAorCQlCVF9GTl9VSU5UMzJfVUlOVDMyX1ZBUiwgQVRUUl9UTV9OT1RIUk9XX1JUX0xJU1QpCisKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9DT01NSVQsICJfSVRNX2NvbW1pdFRyYW5zYWN0aW9uIiwKKwkJQlRfRk5fVk9JRCwgQVRUUl9UTV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fQ09NTUlUX0VILCAiX0lUTV9jb21taXRUcmFuc2FjdGlvbkVIIiwKKwkJQlRfRk5fVk9JRF9QVFIsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0FCT1JULCAiX0lUTV9hYm9ydFRyYW5zYWN0aW9uIiwKKwkJQlRfRk5fVk9JRF9JTlQsIEFUVFJfVE1fTk9SRVRVUk5fTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0lSUkVWT0NBQkxFLCAiX0lUTV9jaGFuZ2VUcmFuc2FjdGlvbk1vZGUiLAorCQlCVF9GTl9WT0lEX0lOVCwgQVRUUl9UTV9OT1RIUk9XX0xJU1QpCisKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9NRU1DUFksICJfSVRNX21lbWNweVJ0V3QiLAorCQlCVF9GTl9WT0lEX1BUUl9DT05TVF9QVFJfU0laRSwgQVRUUl9UTV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX01FTU1PVkUsICJfSVRNX21lbW1vdmVSdFd0IiwKKwkJQlRfRk5fVk9JRF9QVFJfQ09OU1RfUFRSX1NJWkUsIEFUVFJfVE1fVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9NRU1TRVQsICJfSVRNX21lbXNldFciLAorCSAgICAgICAJQlRfRk5fVk9JRF9QVFJfSU5UX1NJWkUsIEFUVFJfVE1fVE1QVVJFX05PVEhST1dfTElTVCkKKworREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0dFVFRNQ0xPTkVfSVJSLCAiX0lUTV9nZXRUTUNsb25lT3JJcnJldm9jYWJsZSIsCisJCUJUX0ZOX1BUUl9QVFIsIEFUVFJfVE1fQ09OU1RfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0dFVFRNQ0xPTkVfU0FGRSwgIl9JVE1fZ2V0VE1DbG9uZVNhZmUiLAorCQlCVF9GTl9QVFJfUFRSLCBBVFRSX1RNX0NPTlNUX05PVEhST1dfTElTVCkKKworLyogTWVtb3J5IGFsbG9jYXRpb24gYnVpbHRpbnMuICAqLworREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX01BTExPQywgIl9JVE1fbWFsbG9jIiwKKwkJQlRfRk5fUFRSX1NJWkUsIEFUVFJfVE1QVVJFX01BTExPQ19OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fQ0FMTE9DLCAiX0lUTV9jYWxsb2MiLAorCQlCVF9GTl9QVFJfU0laRV9TSVpFLCBBVFRSX1RNUFVSRV9NQUxMT0NfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0ZSRUUsICJfSVRNX2ZyZWUiLAorCQlCVF9GTl9WT0lEX1BUUiwgQVRUUl9UTVBVUkVfTk9USFJPV19MSVNUKQorCisvKiBMb2dnaW5nIGJ1aWx0aW5zLiAgKi8KK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0dfMSwgIl9JVE1fTFUxIiwKKwkJQlRfRk5fVk9JRF9WUFRSLCBBVFRSX1RNX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9HXzIsICJfSVRNX0xVMiIsCisJCUJUX0ZOX1ZPSURfVlBUUiwgQVRUUl9UTV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPR180LCAiX0lUTV9MVTQiLAorCQlCVF9GTl9WT0lEX1ZQVFIsIEFUVFJfVE1fVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0dfOCwgIl9JVE1fTFU4IiwKKwkJQlRfRk5fVk9JRF9WUFRSLCBBVFRSX1RNX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9HX0ZMT0FULCAiX0lUTV9MRiIsCisJCUJUX0ZOX1ZPSURfVlBUUiwgQVRUUl9UTV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPR19ET1VCTEUsICJfSVRNX0xEIiwKKwkJQlRfRk5fVk9JRF9WUFRSLCBBVFRSX1RNX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9HX0xET1VCTEUsICJfSVRNX0xFIiwKKwkJQlRfRk5fVk9JRF9WUFRSLCBBVFRSX1RNX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9HLCAiX0lUTV9MQiIsCisJCUJUX0ZOX1ZPSURfVlBUUl9TSVpFLCBBVFRSX1RNX1RNUFVSRV9OT1RIUk9XX0xJU1QpCisKKy8qIFRoZXNlIHN0dWJzIHNob3VsZCBnZXQgZGVmaW5lZCBpbiB0aGUgYmFja2VuZCBpZiBhcHBsaWNhYmxlLiAgKi8KK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1RNX0xPR19NNjQsICJfX2J1aWx0aW5fX0lUTV9MTTY0IikKK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1RNX0xPR19NMTI4LCAiX19idWlsdGluX19JVE1fTE0xMjgiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fVE1fTE9HX00yNTYsICJfX2J1aWx0aW5fX0lUTV9MTTI1NiIpCisKKy8qIFdyaXRlcy4KKworICAgTm90ZTogVGhlIHdyaXRlcyBtdXN0IGZvbGxvdyB0aGUgZm9sbG93aW5nIG9yZGVyOiBTVE9SRSwgV0FSLCBXQVcuCisgICBUaGUgVE0gb3B0aW1pemF0aW9ucyBkZXBlbmQgb24gdGhpcyBvcmRlci4KKworICAgQlVJTFRfSU5fVE1fU1RPUkVfMSBtdXN0IGJlIHRoZSBmaXJzdCBidWlsdGluLgorICAgQlVJTFRJTl9UTV9MT0FEX1NUT1JFX1AgZGVwZW5kcyBvbiB0aGlzLiAgKi8KK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9TVE9SRV8xLCAiX0lUTV9XVTEiLAorCQlCVF9GTl9WT0lEX1ZQVFJfSTEsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFX1dBUl8xLCAiX0lUTV9XYVJVMSIsCisJCUJUX0ZOX1ZPSURfVlBUUl9JMSwgQVRUUl9UTV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fU1RPUkVfV0FXXzEsICJfSVRNX1dhV1UxIiwKKwkJQlRfRk5fVk9JRF9WUFRSX0kxLCBBVFRSX1RNX05PVEhST1dfTElTVCkKKworREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFXzIsICJfSVRNX1dVMiIsCisJCUJUX0ZOX1ZPSURfVlBUUl9JMiwgQVRUUl9UTV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fU1RPUkVfV0FSXzIsICJfSVRNX1dhUlUyIiwKKwkJQlRfRk5fVk9JRF9WUFRSX0kyLCBBVFRSX1RNX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9TVE9SRV9XQVdfMiwgIl9JVE1fV2FXVTIiLAorCQlCVF9GTl9WT0lEX1ZQVFJfSTIsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fU1RPUkVfNCwgIl9JVE1fV1U0IiwKKwkJQlRfRk5fVk9JRF9WUFRSX0k0LCBBVFRSX1RNX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9TVE9SRV9XQVJfNCwgIl9JVE1fV2FSVTQiLAorCQlCVF9GTl9WT0lEX1ZQVFJfSTQsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFX1dBV180LCAiX0lUTV9XYVdVNCIsCisJCUJUX0ZOX1ZPSURfVlBUUl9JNCwgQVRUUl9UTV9OT1RIUk9XX0xJU1QpCisKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9TVE9SRV84LCAiX0lUTV9XVTgiLAorCQlCVF9GTl9WT0lEX1ZQVFJfSTgsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFX1dBUl84LCAiX0lUTV9XYVJVOCIsCisJCUJUX0ZOX1ZPSURfVlBUUl9JOCwgQVRUUl9UTV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fU1RPUkVfV0FXXzgsICJfSVRNX1dhV1U4IiwKKwkJQlRfRk5fVk9JRF9WUFRSX0k4LCBBVFRSX1RNX05PVEhST1dfTElTVCkKKworREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFX0ZMT0FULCAiX0lUTV9XRiIsCisJCUJUX0ZOX1ZPSURfVlBUUl9GTE9BVCwgQVRUUl9UTV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fU1RPUkVfV0FSX0ZMT0FULCAiX0lUTV9XYVJGIiwKKwkJQlRfRk5fVk9JRF9WUFRSX0ZMT0FULCBBVFRSX1RNX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9TVE9SRV9XQVdfRkxPQVQsICJfSVRNX1dhV0YiLAorCQlCVF9GTl9WT0lEX1ZQVFJfRkxPQVQsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fU1RPUkVfRE9VQkxFLCAiX0lUTV9XRCIsCisJCUJUX0ZOX1ZPSURfVlBUUl9ET1VCTEUsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFX1dBUl9ET1VCTEUsICJfSVRNX1dhUkQiLAorCQlCVF9GTl9WT0lEX1ZQVFJfRE9VQkxFLCBBVFRSX1RNX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9TVE9SRV9XQVdfRE9VQkxFLCAiX0lUTV9XYVdEIiwKKwkJQlRfRk5fVk9JRF9WUFRSX0RPVUJMRSwgQVRUUl9UTV9OT1RIUk9XX0xJU1QpCisKKy8qIFRoZXNlIHN0dWJzIHNob3VsZCBnZXQgZGVmaW5lZCBpbiB0aGUgYmFja2VuZCBpZiBhcHBsaWNhYmxlLiAgKi8KK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1RNX1NUT1JFX002NCwgIl9fYnVpbHRpbl9fSVRNX1dNNjQiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fVE1fU1RPUkVfV0FSX002NCwgIl9fYnVpbHRpbl9fSVRNX1dhUk02NCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9TVE9SRV9XQVdfTTY0LCAiX19idWlsdGluX19JVE1fV2FXTTY0IikKK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1RNX1NUT1JFX00xMjgsICJfX2J1aWx0aW5fX0lUTV9XTTEyOCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9TVE9SRV9XQVJfTTEyOCwgIl9fYnVpbHRpbl9fSVRNX1dhUk0xMjgiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fVE1fU1RPUkVfV0FXX00xMjgsICJfX2J1aWx0aW5fX0lUTV9XYVdNMTI4IikKK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1RNX1NUT1JFX00yNTYsICJfX2J1aWx0aW5fX0lUTV9XTTI1NiIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9TVE9SRV9XQVJfTTI1NiwgIl9fYnVpbHRpbl9fSVRNX1dhUk0yNTYiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fVE1fU1RPUkVfV0FXX00yNTYsICJfX2J1aWx0aW5fX0lUTV9XYVdNMjU2IikKKworREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFX0xET1VCTEUsICJfSVRNX1dFIiwKKwkJQlRfRk5fVk9JRF9WUFRSX0xET1VCTEUsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFX1dBUl9MRE9VQkxFLCAiX0lUTV9XYVJFIiwKKwkJQlRfRk5fVk9JRF9WUFRSX0xET1VCTEUsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX1NUT1JFX1dBV19MRE9VQkxFLCAiX0lUTV9XYVdFIiwKKwkJQlRfRk5fVk9JRF9WUFRSX0xET1VCTEUsIEFUVFJfVE1fTk9USFJPV19MSVNUKQorLyogTm90ZTogQlVJTFRfSU5fVE1fU1RPUkVfV0FXX0xET1VCTEUgbXVzdCBiZSB0aGUgbGFzdCBUTSBzdG9yZS4KKyAgIEJVSUxUSU5fVE1fU1RPUkVfUCBkZXBlbmRzIG9uIHRoaXMuICAqLworCisvKiBSZWFkcy4KKworICAgTm90ZTogVGhlIHJlYWRzIG11c3QgZm9sbG93IHRoZSBmb2xsb3dpbmcgb3JkZXI6IExPQUQsIFJBUiwgUkFXLCBSRlcuCisgICBUaGUgVE0gb3B0aW1pemF0aW9ucyBkZXBlbmQgb24gdGhpcyBvcmRlci4gICovCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9BRF8xLCAiX0lUTV9SVTEiLAorCQlCVF9GTl9JMV9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JBUl8xLCAiX0lUTV9SYVJVMSIsCisJCUJUX0ZOX0kxX1ZQVFIsIEFUVFJfVE1fUFVSRV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPQURfUkFXXzEsICJfSVRNX1JhV1UxIiwKKwkJQlRfRk5fSTFfVlBUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9BRF9SRldfMSwgIl9JVE1fUmZXVTEiLAorCQlCVF9GTl9JMV9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKKworREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPQURfMiwgIl9JVE1fUlUyIiwKKwkJQlRfRk5fSTJfVlBUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9BRF9SQVJfMiwgIl9JVE1fUmFSVTIiLAorCQlCVF9GTl9JMl9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JBV18yLCAiX0lUTV9SYVdVMiIsCisJCUJUX0ZOX0kyX1ZQVFIsIEFUVFJfVE1fUFVSRV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPQURfUkZXXzIsICJfSVRNX1JmV1UyIiwKKwkJQlRfRk5fSTJfVlBUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCisKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEXzQsICJfSVRNX1JVNCIsCisJCUJUX0ZOX0k0X1ZQVFIsIEFUVFJfVE1fUFVSRV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPQURfUkFSXzQsICJfSVRNX1JhUlU0IiwKKwkJQlRfRk5fSTRfVlBUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9BRF9SQVdfNCwgIl9JVE1fUmFXVTQiLAorCQlCVF9GTl9JNF9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JGV180LCAiX0lUTV9SZldVNCIsCisJCUJUX0ZOX0k0X1ZQVFIsIEFUVFJfVE1fUFVSRV9UTVBVUkVfTk9USFJPV19MSVNUKQorCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9BRF84LCAiX0lUTV9SVTgiLAorCQlCVF9GTl9JOF9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JBUl84LCAiX0lUTV9SYVJVOCIsCisJCUJUX0ZOX0k4X1ZQVFIsIEFUVFJfVE1fUFVSRV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPQURfUkFXXzgsICJfSVRNX1JhV1U4IiwKKwkJQlRfRk5fSThfVlBUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9BRF9SRldfOCwgIl9JVE1fUmZXVTgiLAorCQlCVF9GTl9JOF9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKKworREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPQURfRkxPQVQsICJfSVRNX1JGIiwKKwkJQlRfRk5fRkxPQVRfVlBUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9BRF9SQVJfRkxPQVQsICJfSVRNX1JhUkYiLAorCQlCVF9GTl9GTE9BVF9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JBV19GTE9BVCwgIl9JVE1fUmFXRiIsCisJCUJUX0ZOX0ZMT0FUX1ZQVFIsIEFUVFJfVE1fUFVSRV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPQURfUkZXX0ZMT0FULCAiX0lUTV9SZldGIiwKKwkJQlRfRk5fRkxPQVRfVlBUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCisKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX0RPVUJMRSwgIl9JVE1fUkQiLAorCQlCVF9GTl9ET1VCTEVfQ09OU1RfRE9VQkxFX1BUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCitERUZfVE1fQlVJTFRJTiAoQlVJTFRfSU5fVE1fTE9BRF9SQVJfRE9VQkxFLCAiX0lUTV9SYVJEIiwKKwkJQlRfRk5fRE9VQkxFX0NPTlNUX0RPVUJMRV9QVFIsIEFUVFJfVE1fUFVSRV9UTVBVUkVfTk9USFJPV19MSVNUKQorREVGX1RNX0JVSUxUSU4gKEJVSUxUX0lOX1RNX0xPQURfUkFXX0RPVUJMRSwgIl9JVE1fUmFXRCIsCisJCUJUX0ZOX0RPVUJMRV9DT05TVF9ET1VCTEVfUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JGV19ET1VCTEUsICJfSVRNX1JmV0QiLAorCQlCVF9GTl9ET1VCTEVfQ09OU1RfRE9VQkxFX1BUUiwgQVRUUl9UTV9QVVJFX1RNUFVSRV9OT1RIUk9XX0xJU1QpCisKKy8qIFRoZXNlIHN0dWJzIHNob3VsZCBnZXQgZGVmaW5lZCBpbiB0aGUgYmFja2VuZCBpZiBhcHBsaWNhYmxlLiAgKi8KK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1RNX0xPQURfTTY0LCAiX19idWlsdGluX19JVE1fUk02NCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX1JBUl9NNjQsICJfX2J1aWx0aW5fX0lUTV9SYVJNNjQiKQorREVGX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fVE1fTE9BRF9SQVdfTTY0LCAiX19idWlsdGluX19JVE1fUmFSTTY0IikKK0RFRl9CVUlMVElOX1NUVUIgKEJVSUxUX0lOX1RNX0xPQURfUkZXX002NCwgIl9fYnVpbHRpbl9fSVRNX1JmV002NCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX00xMjgsICJfX2J1aWx0aW5fX0lUTV9STTEyOCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX1JBUl9NMTI4LCAiX19idWlsdGluX19JVE1fUmFSTTEyOCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX1JBV19NMTI4LCAiX19idWlsdGluX19JVE1fUmFSTTEyOCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX1JGV19NMTI4LCAiX19idWlsdGluX19JVE1fUmZXTTEyOCIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX00yNTYsICJfX2J1aWx0aW5fX0lUTV9STTI1NiIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX1JBUl9NMjU2LCAiX19idWlsdGluX19JVE1fUmFSTTI1NiIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX1JBV19NMjU2LCAiX19idWlsdGluX19JVE1fUmFSTTI1NiIpCitERUZfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9UTV9MT0FEX1JGV19NMjU2LCAiX19idWlsdGluX19JVE1fUmZXTTI1NiIpCisKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX0xET1VCTEUsICJfSVRNX1JFIiwKKwkJQlRfRk5fTERPVUJMRV9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JBUl9MRE9VQkxFLCAiX0lUTV9SYVJFIiwKKwkJQlRfRk5fTERPVUJMRV9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JBV19MRE9VQkxFLCAiX0lUTV9SYVdFIiwKKwkJQlRfRk5fTERPVUJMRV9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKK0RFRl9UTV9CVUlMVElOIChCVUlMVF9JTl9UTV9MT0FEX1JGV19MRE9VQkxFLCAiX0lUTV9SZldFIiwKKwkJQlRfRk5fTERPVUJMRV9WUFRSLCBBVFRSX1RNX1BVUkVfVE1QVVJFX05PVEhST1dfTElTVCkKKworLyogTm90ZTogQlVJTFRfSU5fVE1fTE9BRF9SRldfTERPVUJMRSBtdXN0IGJlIHRoZSBsYXN0IFRNIGxvYWQgYXMgd2VsbAorICAgYXMgdGhlIGxhc3QgYnVpbHRpbi4gIEJVSUxUSU5fVE1fTE9BRF9TVE9SRV9QIGFuZCBCVUlMVElOX1RNX0xPQURfUAorICAgZGVwZW5kIG9uIHRoaXMuICAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2d0eXBlLWRlc2MuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9ndHlwZS1kZXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3ZGIyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9ndHlwZS1kZXNjLmgKQEAgLTAsMCArMSw1MDY1IEBACisvKiBUeXBlIGluZm9ybWF0aW9uIGZvciBHQ0MuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBpcyBtYWNoaW5lIGdlbmVyYXRlZC4gIERvIG5vdCBlZGl0LiAgKi8KKworLyogQWxsb2NhdG9ycyBmb3Iga25vd24gc3RydWN0cyBhbmQgdW5pb25zLiAgKi8KKworI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2l2YXJyZWZfZW50cnlfdmFfZ2NfKCkgKCh2ZWM8aXZhcnJlZl9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGl2YXJyZWZfZW50cnksdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pdmFycmVmX2VudHJ5X3ZhX2djXygpICgodmVjPGl2YXJyZWZfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGl2YXJyZWZfZW50cnksdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2l2YXJyZWZfZW50cnlfdmFfZ2NfKG4pICgodmVjPGl2YXJyZWZfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXZhcnJlZl9lbnRyeSx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19pdmFycmVmX2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxpdmFycmVmX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXZhcnJlZl9lbnRyeSx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2l2YXJyZWZfZW50cnkoKSAoKHN0cnVjdCBpdmFycmVmX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpdmFycmVmX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2l2YXJyZWZfZW50cnkoKSAoKHN0cnVjdCBpdmFycmVmX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGl2YXJyZWZfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pdmFycmVmX2VudHJ5KG4pICgoc3RydWN0IGl2YXJyZWZfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpdmFycmVmX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pdmFycmVmX2VudHJ5KG4pICgoc3RydWN0IGl2YXJyZWZfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGl2YXJyZWZfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19wcm90X2xpc3RfZW50cnlfdmFfZ2NfKCkgKCh2ZWM8cHJvdF9saXN0X2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cHJvdF9saXN0X2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcHJvdF9saXN0X2VudHJ5X3ZhX2djXygpICgodmVjPHByb3RfbGlzdF9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cHJvdF9saXN0X2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19wcm90X2xpc3RfZW50cnlfdmFfZ2NfKG4pICgodmVjPHByb3RfbGlzdF9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxwcm90X2xpc3RfZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfcHJvdF9saXN0X2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxwcm90X2xpc3RfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxwcm90X2xpc3RfZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19wcm90X2xpc3RfZW50cnkoKSAoKHN0cnVjdCBwcm90X2xpc3RfZW50cnkgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHByb3RfbGlzdF9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wcm90X2xpc3RfZW50cnkoKSAoKHN0cnVjdCBwcm90X2xpc3RfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcHJvdF9saXN0X2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcHJvdF9saXN0X2VudHJ5KG4pICgoc3RydWN0IHByb3RfbGlzdF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHByb3RfbGlzdF9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcHJvdF9saXN0X2VudHJ5KG4pICgoc3RydWN0IHByb3RfbGlzdF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcHJvdF9saXN0X2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbXNncmVmX2VudHJ5X3ZhX2djXygpICgodmVjPG1zZ3JlZl9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPG1zZ3JlZl9lbnRyeSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX21zZ3JlZl9lbnRyeV92YV9nY18oKSAoKHZlYzxtc2dyZWZfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPG1zZ3JlZl9lbnRyeSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfbXNncmVmX2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxtc2dyZWZfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bXNncmVmX2VudHJ5LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX21zZ3JlZl9lbnRyeV92YV9nY18obikgKCh2ZWM8bXNncmVmX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bXNncmVmX2VudHJ5LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbXNncmVmX2VudHJ5KCkgKChzdHJ1Y3QgbXNncmVmX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtc2dyZWZfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbXNncmVmX2VudHJ5KCkgKChzdHJ1Y3QgbXNncmVmX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1zZ3JlZl9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX21zZ3JlZl9lbnRyeShuKSAoKHN0cnVjdCBtc2dyZWZfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtc2dyZWZfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX21zZ3JlZl9lbnRyeShuKSAoKHN0cnVjdCBtc2dyZWZfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1zZ3JlZl9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2lkZW50X2RhdGFfdHVwbGVfdmFfZ2NfKCkgKCh2ZWM8aWRlbnRfZGF0YV90dXBsZSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGlkZW50X2RhdGFfdHVwbGUsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pZGVudF9kYXRhX3R1cGxlX3ZhX2djXygpICgodmVjPGlkZW50X2RhdGFfdHVwbGUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGlkZW50X2RhdGFfdHVwbGUsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2lkZW50X2RhdGFfdHVwbGVfdmFfZ2NfKG4pICgodmVjPGlkZW50X2RhdGFfdHVwbGUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aWRlbnRfZGF0YV90dXBsZSx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19pZGVudF9kYXRhX3R1cGxlX3ZhX2djXyhuKSAoKHZlYzxpZGVudF9kYXRhX3R1cGxlLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aWRlbnRfZGF0YV90dXBsZSx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lkZW50X2RhdGFfdHVwbGUoKSAoKHN0cnVjdCBpZGVudF9kYXRhX3R1cGxlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpZGVudF9kYXRhX3R1cGxlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lkZW50X2RhdGFfdHVwbGUoKSAoKHN0cnVjdCBpZGVudF9kYXRhX3R1cGxlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlkZW50X2RhdGFfdHVwbGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pZGVudF9kYXRhX3R1cGxlKG4pICgoc3RydWN0IGlkZW50X2RhdGFfdHVwbGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpZGVudF9kYXRhX3R1cGxlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pZGVudF9kYXRhX3R1cGxlKG4pICgoc3RydWN0IGlkZW50X2RhdGFfdHVwbGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlkZW50X2RhdGFfdHVwbGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3N0cmluZ19kZXNjcmlwdG9yKCkgKChzdHJ1Y3Qgc3RyaW5nX2Rlc2NyaXB0b3IgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0cmluZ19kZXNjcmlwdG9yKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3N0cmluZ19kZXNjcmlwdG9yKCkgKChzdHJ1Y3Qgc3RyaW5nX2Rlc2NyaXB0b3IgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3RyaW5nX2Rlc2NyaXB0b3IpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zdHJpbmdfZGVzY3JpcHRvcihuKSAoKHN0cnVjdCBzdHJpbmdfZGVzY3JpcHRvciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0cmluZ19kZXNjcmlwdG9yKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zdHJpbmdfZGVzY3JpcHRvcihuKSAoKHN0cnVjdCBzdHJpbmdfZGVzY3JpcHRvciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3RyaW5nX2Rlc2NyaXB0b3IpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2ltcF9lbnRyeSgpICgoc3RydWN0IGltcF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaW1wX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2ltcF9lbnRyeSgpICgoc3RydWN0IGltcF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbXBfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pbXBfZW50cnkobikgKChzdHJ1Y3QgaW1wX2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaW1wX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pbXBfZW50cnkobikgKChzdHJ1Y3QgaW1wX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbXBfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2hhc2hlZF9hdHRyaWJ1dGUoKSAoKHN0cnVjdCBoYXNoZWRfYXR0cmlidXRlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBoYXNoZWRfYXR0cmlidXRlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2hhc2hlZF9hdHRyaWJ1dGUoKSAoKHN0cnVjdCBoYXNoZWRfYXR0cmlidXRlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGhhc2hlZF9hdHRyaWJ1dGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19oYXNoZWRfYXR0cmlidXRlKG4pICgoc3RydWN0IGhhc2hlZF9hdHRyaWJ1dGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBoYXNoZWRfYXR0cmlidXRlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19oYXNoZWRfYXR0cmlidXRlKG4pICgoc3RydWN0IGhhc2hlZF9hdHRyaWJ1dGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGhhc2hlZF9hdHRyaWJ1dGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2hhc2hlZF9lbnRyeSgpICgoc3RydWN0IGhhc2hlZF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaGFzaGVkX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2hhc2hlZF9lbnRyeSgpICgoc3RydWN0IGhhc2hlZF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBoYXNoZWRfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19oYXNoZWRfZW50cnkobikgKChzdHJ1Y3QgaGFzaGVkX2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaGFzaGVkX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19oYXNoZWRfZW50cnkobikgKChzdHJ1Y3QgaGFzaGVkX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBoYXNoZWRfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX29iamNfbWFwX3ByaXZhdGUoKSAoKHN0cnVjdCBvYmpjX21hcF9wcml2YXRlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBvYmpjX21hcF9wcml2YXRlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX29iamNfbWFwX3ByaXZhdGUoKSAoKHN0cnVjdCBvYmpjX21hcF9wcml2YXRlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG9iamNfbWFwX3ByaXZhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19vYmpjX21hcF9wcml2YXRlKG4pICgoc3RydWN0IG9iamNfbWFwX3ByaXZhdGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBvYmpjX21hcF9wcml2YXRlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19vYmpjX21hcF9wcml2YXRlKG4pICgoc3RydWN0IG9iamNfbWFwX3ByaXZhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG9iamNfbWFwX3ByaXZhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2dpbXBsZV90eXBlX2xlYWRlcl9lbnRyeV9zKCkgKChzdHJ1Y3QgZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5X3MgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV90eXBlX2xlYWRlcl9lbnRyeV9zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2dpbXBsZV90eXBlX2xlYWRlcl9lbnRyeV9zKCkgKChzdHJ1Y3QgZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5X3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5X3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19naW1wbGVfdHlwZV9sZWFkZXJfZW50cnlfcyhuKSAoKHN0cnVjdCBnaW1wbGVfdHlwZV9sZWFkZXJfZW50cnlfcyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV90eXBlX2xlYWRlcl9lbnRyeV9zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19naW1wbGVfdHlwZV9sZWFkZXJfZW50cnlfcyhuKSAoKHN0cnVjdCBnaW1wbGVfdHlwZV9sZWFkZXJfZW50cnlfcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5X3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2J1aWx0aW5fcmVjb3JkKCkgKChzdHJ1Y3QgYnVpbHRpbl9yZWNvcmQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJ1aWx0aW5fcmVjb3JkKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2J1aWx0aW5fcmVjb3JkKCkgKChzdHJ1Y3QgYnVpbHRpbl9yZWNvcmQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYnVpbHRpbl9yZWNvcmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19idWlsdGluX3JlY29yZChuKSAoKHN0cnVjdCBidWlsdGluX3JlY29yZCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJ1aWx0aW5fcmVjb3JkKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19idWlsdGluX3JlY29yZChuKSAoKHN0cnVjdCBidWlsdGluX3JlY29yZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYnVpbHRpbl9yZWNvcmQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3N0cmluZ19vcl90cmVlKCkgKCh1bmlvbiBzdHJpbmdfb3JfdHJlZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBzdHJpbmdfb3JfdHJlZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9zdHJpbmdfb3JfdHJlZSgpICgodW5pb24gc3RyaW5nX29yX3RyZWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBzdHJpbmdfb3JfdHJlZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3N0cmluZ19vcl90cmVlKG4pICgodW5pb24gc3RyaW5nX29yX3RyZWUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHN0cmluZ19vcl90cmVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zdHJpbmdfb3JfdHJlZShuKSAoKHVuaW9uIHN0cmluZ19vcl90cmVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHN0cmluZ19vcl90cmVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19Cb290c3RyYXBNZXRob2RzKCkgKChzdHJ1Y3QgQm9vdHN0cmFwTWV0aG9kcyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgQm9vdHN0cmFwTWV0aG9kcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9Cb290c3RyYXBNZXRob2RzKCkgKChzdHJ1Y3QgQm9vdHN0cmFwTWV0aG9kcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBCb290c3RyYXBNZXRob2RzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfQm9vdHN0cmFwTWV0aG9kcyhuKSAoKHN0cnVjdCBCb290c3RyYXBNZXRob2RzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgQm9vdHN0cmFwTWV0aG9kcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfQm9vdHN0cmFwTWV0aG9kcyhuKSAoKHN0cnVjdCBCb290c3RyYXBNZXRob2RzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBCb290c3RyYXBNZXRob2RzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19ib290c3RyYXBfbWV0aG9kKCkgKChzdHJ1Y3QgYm9vdHN0cmFwX21ldGhvZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYm9vdHN0cmFwX21ldGhvZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9ib290c3RyYXBfbWV0aG9kKCkgKChzdHJ1Y3QgYm9vdHN0cmFwX21ldGhvZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBib290c3RyYXBfbWV0aG9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfYm9vdHN0cmFwX21ldGhvZChuKSAoKHN0cnVjdCBib290c3RyYXBfbWV0aG9kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYm9vdHN0cmFwX21ldGhvZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYm9vdHN0cmFwX21ldGhvZChuKSAoKHN0cnVjdCBib290c3RyYXBfbWV0aG9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBib290c3RyYXBfbWV0aG9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jcG9vbF9lbnRyeShTSVpFKSAoKHVuaW9uIGNwb29sX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChTSVpFIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3Bvb2xfZW50cnkoU0laRSkgKCh1bmlvbiBjcG9vbF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChTSVpFIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcG9vbF9lbnRyeShTSVpFLCBuKSAoKHVuaW9uIGNwb29sX2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoU0laRSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jcG9vbF9lbnRyeShTSVpFLCBuKSAoKHVuaW9uIGNwb29sX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChTSVpFLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19tZXRob2RfZW50cnlfdmFfZ2NfKCkgKCh2ZWM8bWV0aG9kX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bWV0aG9kX2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbWV0aG9kX2VudHJ5X3ZhX2djXygpICgodmVjPG1ldGhvZF9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bWV0aG9kX2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19tZXRob2RfZW50cnlfdmFfZ2NfKG4pICgodmVjPG1ldGhvZF9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxtZXRob2RfZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfbWV0aG9kX2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxtZXRob2RfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxtZXRob2RfZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19tZXRob2RfZW50cnlfZCgpICgoc3RydWN0IG1ldGhvZF9lbnRyeV9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtZXRob2RfZW50cnlfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9tZXRob2RfZW50cnlfZCgpICgoc3RydWN0IG1ldGhvZF9lbnRyeV9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1ldGhvZF9lbnRyeV9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbWV0aG9kX2VudHJ5X2QobikgKChzdHJ1Y3QgbWV0aG9kX2VudHJ5X2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtZXRob2RfZW50cnlfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbWV0aG9kX2VudHJ5X2QobikgKChzdHJ1Y3QgbWV0aG9kX2VudHJ5X2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1ldGhvZF9lbnRyeV9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sYW5nX2RlY2xfdmFyKCkgKChzdHJ1Y3QgbGFuZ19kZWNsX3ZhciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsX3ZhcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sYW5nX2RlY2xfdmFyKCkgKChzdHJ1Y3QgbGFuZ19kZWNsX3ZhciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfdmFyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGFuZ19kZWNsX3ZhcihuKSAoKHN0cnVjdCBsYW5nX2RlY2xfdmFyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsX3ZhciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGFuZ19kZWNsX3ZhcihuKSAoKHN0cnVjdCBsYW5nX2RlY2xfdmFyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfdmFyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190eXBlX2Fzc2VydGlvbigpICgoc3RydWN0IHR5cGVfYXNzZXJ0aW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0eXBlX2Fzc2VydGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90eXBlX2Fzc2VydGlvbigpICgoc3RydWN0IHR5cGVfYXNzZXJ0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHR5cGVfYXNzZXJ0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHlwZV9hc3NlcnRpb24obikgKChzdHJ1Y3QgdHlwZV9hc3NlcnRpb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0eXBlX2Fzc2VydGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHlwZV9hc3NlcnRpb24obikgKChzdHJ1Y3QgdHlwZV9hc3NlcnRpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHR5cGVfYXNzZXJ0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sYW5nX2RlY2xfZnVuYygpICgoc3RydWN0IGxhbmdfZGVjbF9mdW5jICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfZnVuYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sYW5nX2RlY2xfZnVuYygpICgoc3RydWN0IGxhbmdfZGVjbF9mdW5jICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfZGVjbF9mdW5jKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGFuZ19kZWNsX2Z1bmMobikgKChzdHJ1Y3QgbGFuZ19kZWNsX2Z1bmMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfZnVuYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGFuZ19kZWNsX2Z1bmMobikgKChzdHJ1Y3QgbGFuZ19kZWNsX2Z1bmMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfZGVjbF9mdW5jKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVldHJlZWhhc2hfZW50cnkoKSAoKHN0cnVjdCB0cmVldHJlZWhhc2hfZW50cnkgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWV0cmVlaGFzaF9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVldHJlZWhhc2hfZW50cnkoKSAoKHN0cnVjdCB0cmVldHJlZWhhc2hfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZXRyZWVoYXNoX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZXRyZWVoYXNoX2VudHJ5KG4pICgoc3RydWN0IHRyZWV0cmVlaGFzaF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWV0cmVlaGFzaF9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZXRyZWVoYXNoX2VudHJ5KG4pICgoc3RydWN0IHRyZWV0cmVlaGFzaF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZXRyZWVoYXNoX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19DUG9vbCgpICgoc3RydWN0IENQb29sICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBDUG9vbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9DUG9vbCgpICgoc3RydWN0IENQb29sICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IENQb29sKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfQ1Bvb2wobikgKChzdHJ1Y3QgQ1Bvb2wgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBDUG9vbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfQ1Bvb2wobikgKChzdHJ1Y3QgQ1Bvb2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IENQb29sKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19KQ0YoKSAoKHN0cnVjdCBKQ0YgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IEpDRikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9KQ0YoKSAoKHN0cnVjdCBKQ0YgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgSkNGKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfSkNGKG4pICgoc3RydWN0IEpDRiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IEpDRiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfSkNGKG4pICgoc3RydWN0IEpDRiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgSkNGKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19nZmNfcG93ZGVjbF9saXN0KCkgKChzdHJ1Y3QgZ2ZjX3Bvd2RlY2xfbGlzdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ZjX3Bvd2RlY2xfbGlzdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9nZmNfcG93ZGVjbF9saXN0KCkgKChzdHJ1Y3QgZ2ZjX3Bvd2RlY2xfbGlzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnZmNfcG93ZGVjbF9saXN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZ2ZjX3Bvd2RlY2xfbGlzdChuKSAoKHN0cnVjdCBnZmNfcG93ZGVjbF9saXN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ZjX3Bvd2RlY2xfbGlzdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZ2ZjX3Bvd2RlY2xfbGlzdChuKSAoKHN0cnVjdCBnZmNfcG93ZGVjbF9saXN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnZmNfcG93ZGVjbF9saXN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19nZmNfc3RfcGFyYW1ldGVyKCkgKChzdHJ1Y3QgZ2ZjX3N0X3BhcmFtZXRlciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ZjX3N0X3BhcmFtZXRlcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9nZmNfc3RfcGFyYW1ldGVyKCkgKChzdHJ1Y3QgZ2ZjX3N0X3BhcmFtZXRlciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnZmNfc3RfcGFyYW1ldGVyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZ2ZjX3N0X3BhcmFtZXRlcihuKSAoKHN0cnVjdCBnZmNfc3RfcGFyYW1ldGVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ZjX3N0X3BhcmFtZXRlciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZ2ZjX3N0X3BhcmFtZXRlcihuKSAoKHN0cnVjdCBnZmNfc3RfcGFyYW1ldGVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnZmNfc3RfcGFyYW1ldGVyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19nZmNfc3RfcGFyYW1ldGVyX2ZpZWxkKCkgKChzdHJ1Y3QgZ2ZjX3N0X3BhcmFtZXRlcl9maWVsZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ZjX3N0X3BhcmFtZXRlcl9maWVsZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9nZmNfc3RfcGFyYW1ldGVyX2ZpZWxkKCkgKChzdHJ1Y3QgZ2ZjX3N0X3BhcmFtZXRlcl9maWVsZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnZmNfc3RfcGFyYW1ldGVyX2ZpZWxkKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZ2ZjX3N0X3BhcmFtZXRlcl9maWVsZChuKSAoKHN0cnVjdCBnZmNfc3RfcGFyYW1ldGVyX2ZpZWxkICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ZjX3N0X3BhcmFtZXRlcl9maWVsZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZ2ZjX3N0X3BhcmFtZXRlcl9maWVsZChuKSAoKHN0cnVjdCBnZmNfc3RfcGFyYW1ldGVyX2ZpZWxkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnZmNfc3RfcGFyYW1ldGVyX2ZpZWxkKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19nZmNfaW50cmluc2ljX21hcF90KCkgKChzdHJ1Y3QgZ2ZjX2ludHJpbnNpY19tYXBfdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ZjX2ludHJpbnNpY19tYXBfdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9nZmNfaW50cmluc2ljX21hcF90KCkgKChzdHJ1Y3QgZ2ZjX2ludHJpbnNpY19tYXBfdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnZmNfaW50cmluc2ljX21hcF90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZ2ZjX2ludHJpbnNpY19tYXBfdChuKSAoKHN0cnVjdCBnZmNfaW50cmluc2ljX21hcF90ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ZjX2ludHJpbnNpY19tYXBfdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZ2ZjX2ludHJpbnNpY19tYXBfdChuKSAoKHN0cnVjdCBnZmNfaW50cmluc2ljX21hcF90ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnZmNfaW50cmluc2ljX21hcF90KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19tb2R1bGVfaHRhYl9lbnRyeSgpICgoc3RydWN0IG1vZHVsZV9odGFiX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtb2R1bGVfaHRhYl9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9tb2R1bGVfaHRhYl9lbnRyeSgpICgoc3RydWN0IG1vZHVsZV9odGFiX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1vZHVsZV9odGFiX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbW9kdWxlX2h0YWJfZW50cnkobikgKChzdHJ1Y3QgbW9kdWxlX2h0YWJfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtb2R1bGVfaHRhYl9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbW9kdWxlX2h0YWJfZW50cnkobikgKChzdHJ1Y3QgbW9kdWxlX2h0YWJfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1vZHVsZV9odGFiX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19iaW5kaW5nX2xldmVsKCkgKChzdHJ1Y3QgYmluZGluZ19sZXZlbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYmluZGluZ19sZXZlbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9iaW5kaW5nX2xldmVsKCkgKChzdHJ1Y3QgYmluZGluZ19sZXZlbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaW5kaW5nX2xldmVsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfYmluZGluZ19sZXZlbChuKSAoKHN0cnVjdCBiaW5kaW5nX2xldmVsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYmluZGluZ19sZXZlbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYmluZGluZ19sZXZlbChuKSAoKHN0cnVjdCBiaW5kaW5nX2xldmVsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaW5kaW5nX2xldmVsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcGVuZGluZ19ub2V4Y2VwdF92YV9nY18oKSAoKHZlYzxwZW5kaW5nX25vZXhjZXB0LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cGVuZGluZ19ub2V4Y2VwdCx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3BlbmRpbmdfbm9leGNlcHRfdmFfZ2NfKCkgKCh2ZWM8cGVuZGluZ19ub2V4Y2VwdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cGVuZGluZ19ub2V4Y2VwdCx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfcGVuZGluZ19ub2V4Y2VwdF92YV9nY18obikgKCh2ZWM8cGVuZGluZ19ub2V4Y2VwdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxwZW5kaW5nX25vZXhjZXB0LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX3BlbmRpbmdfbm9leGNlcHRfdmFfZ2NfKG4pICgodmVjPHBlbmRpbmdfbm9leGNlcHQsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxwZW5kaW5nX25vZXhjZXB0LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcGVuZGluZ19ub2V4Y2VwdCgpICgoc3RydWN0IHBlbmRpbmdfbm9leGNlcHQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBlbmRpbmdfbm9leGNlcHQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcGVuZGluZ19ub2V4Y2VwdCgpICgoc3RydWN0IHBlbmRpbmdfbm9leGNlcHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGVuZGluZ19ub2V4Y2VwdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3BlbmRpbmdfbm9leGNlcHQobikgKChzdHJ1Y3QgcGVuZGluZ19ub2V4Y2VwdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBlbmRpbmdfbm9leGNlcHQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3BlbmRpbmdfbm9leGNlcHQobikgKChzdHJ1Y3QgcGVuZGluZ19ub2V4Y2VwdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGVuZGluZ19ub2V4Y2VwdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcGVuZGluZ19hYnN0cmFjdF90eXBlKCkgKChzdHJ1Y3QgcGVuZGluZ19hYnN0cmFjdF90eXBlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwZW5kaW5nX2Fic3RyYWN0X3R5cGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcGVuZGluZ19hYnN0cmFjdF90eXBlKCkgKChzdHJ1Y3QgcGVuZGluZ19hYnN0cmFjdF90eXBlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBlbmRpbmdfYWJzdHJhY3RfdHlwZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3BlbmRpbmdfYWJzdHJhY3RfdHlwZShuKSAoKHN0cnVjdCBwZW5kaW5nX2Fic3RyYWN0X3R5cGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwZW5kaW5nX2Fic3RyYWN0X3R5cGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3BlbmRpbmdfYWJzdHJhY3RfdHlwZShuKSAoKHN0cnVjdCBwZW5kaW5nX2Fic3RyYWN0X3R5cGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBlbmRpbmdfYWJzdHJhY3RfdHlwZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RyZWVfaW50X3ZhX2djXygpICgodmVjPHRyZWVfaW50LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dHJlZV9pbnQsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2ludF92YV9nY18oKSAoKHZlYzx0cmVlX2ludCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dHJlZV9pbnQsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3RyZWVfaW50X3ZhX2djXyhuKSAoKHZlYzx0cmVlX2ludCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzx0cmVlX2ludCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY190cmVlX2ludF92YV9nY18obikgKCh2ZWM8dHJlZV9pbnQsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzx0cmVlX2ludCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfaW50KCkgKChzdHJ1Y3QgdHJlZV9pbnQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfaW50KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfaW50KCkgKChzdHJ1Y3QgdHJlZV9pbnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9pbnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2ludChuKSAoKHN0cnVjdCB0cmVlX2ludCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfaW50KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2ludChuKSAoKHN0cnVjdCB0cmVlX2ludCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9pbnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NwX3BhcnNlcigpICgoc3RydWN0IGNwX3BhcnNlciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfcGFyc2VyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NwX3BhcnNlcigpICgoc3RydWN0IGNwX3BhcnNlciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcF9wYXJzZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcF9wYXJzZXIobikgKChzdHJ1Y3QgY3BfcGFyc2VyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfcGFyc2VyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jcF9wYXJzZXIobikgKChzdHJ1Y3QgY3BfcGFyc2VyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcF9wYXJzZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnlfdmFfZ2NfKCkgKCh2ZWM8Y3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5X3ZhX2djXygpICgodmVjPGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19jcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnlfdmFfZ2NfKG4pICgodmVjPGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jcF9wYXJzZXJfY29udGV4dCgpICgoc3RydWN0IGNwX3BhcnNlcl9jb250ZXh0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcF9wYXJzZXJfY29udGV4dCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jcF9wYXJzZXJfY29udGV4dCgpICgoc3RydWN0IGNwX3BhcnNlcl9jb250ZXh0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX3BhcnNlcl9jb250ZXh0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY3BfcGFyc2VyX2NvbnRleHQobikgKChzdHJ1Y3QgY3BfcGFyc2VyX2NvbnRleHQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcF9wYXJzZXJfY29udGV4dCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY3BfcGFyc2VyX2NvbnRleHQobikgKChzdHJ1Y3QgY3BfcGFyc2VyX2NvbnRleHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX3BhcnNlcl9jb250ZXh0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnlfZCgpICgoc3RydWN0IGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeV9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnlfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnlfZCgpICgoc3RydWN0IGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeV9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeV9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5X2QobikgKChzdHJ1Y3QgY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5X2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnlfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5X2QobikgKChzdHJ1Y3QgY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5X2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeV9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY3BfZGVmYXVsdF9hcmdfZW50cnlfdmFfZ2NfKCkgKCh2ZWM8Y3BfZGVmYXVsdF9hcmdfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF9kZWZhdWx0X2FyZ19lbnRyeSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwX2RlZmF1bHRfYXJnX2VudHJ5X3ZhX2djXygpICgodmVjPGNwX2RlZmF1bHRfYXJnX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF9kZWZhdWx0X2FyZ19lbnRyeSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfY3BfZGVmYXVsdF9hcmdfZW50cnlfdmFfZ2NfKG4pICgodmVjPGNwX2RlZmF1bHRfYXJnX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGNwX2RlZmF1bHRfYXJnX2VudHJ5LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2NwX2RlZmF1bHRfYXJnX2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxjcF9kZWZhdWx0X2FyZ19lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGNwX2RlZmF1bHRfYXJnX2VudHJ5LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BfZGVmYXVsdF9hcmdfZW50cnlfZCgpICgoc3RydWN0IGNwX2RlZmF1bHRfYXJnX2VudHJ5X2QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX2RlZmF1bHRfYXJnX2VudHJ5X2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BfZGVmYXVsdF9hcmdfZW50cnlfZCgpICgoc3RydWN0IGNwX2RlZmF1bHRfYXJnX2VudHJ5X2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfZGVmYXVsdF9hcmdfZW50cnlfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwX2RlZmF1bHRfYXJnX2VudHJ5X2QobikgKChzdHJ1Y3QgY3BfZGVmYXVsdF9hcmdfZW50cnlfZCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX2RlZmF1bHRfYXJnX2VudHJ5X2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwX2RlZmF1bHRfYXJnX2VudHJ5X2QobikgKChzdHJ1Y3QgY3BfZGVmYXVsdF9hcmdfZW50cnlfZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfZGVmYXVsdF9hcmdfZW50cnlfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BfbGV4ZXIoKSAoKHN0cnVjdCBjcF9sZXhlciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfbGV4ZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BfbGV4ZXIoKSAoKHN0cnVjdCBjcF9sZXhlciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcF9sZXhlcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwX2xleGVyKG4pICgoc3RydWN0IGNwX2xleGVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfbGV4ZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwX2xleGVyKG4pICgoc3RydWN0IGNwX2xleGVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcF9sZXhlciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwX3Rva2VuX3ZhX2djXygpICgodmVjPGNwX3Rva2VuLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y3BfdG9rZW4sdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jcF90b2tlbl92YV9nY18oKSAoKHZlYzxjcF90b2tlbix2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y3BfdG9rZW4sdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2NwX3Rva2VuX3ZhX2djXyhuKSAoKHZlYzxjcF90b2tlbix2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF90b2tlbix2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19jcF90b2tlbl92YV9nY18obikgKCh2ZWM8Y3BfdG9rZW4sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF90b2tlbix2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NwX3Rva2VuKCkgKChzdHJ1Y3QgY3BfdG9rZW4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX3Rva2VuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NwX3Rva2VuKCkgKChzdHJ1Y3QgY3BfdG9rZW4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfdG9rZW4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcF90b2tlbihuKSAoKHN0cnVjdCBjcF90b2tlbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX3Rva2VuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jcF90b2tlbihuKSAoKHN0cnVjdCBjcF90b2tlbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfdG9rZW4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NwX3Rva2VuX3ZhbHVlKCkgKCh1bmlvbiBjcF90b2tlbl92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBjcF90b2tlbl92YWx1ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jcF90b2tlbl92YWx1ZSgpICgodW5pb24gY3BfdG9rZW5fdmFsdWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBjcF90b2tlbl92YWx1ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwX3Rva2VuX3ZhbHVlKG4pICgodW5pb24gY3BfdG9rZW5fdmFsdWUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGNwX3Rva2VuX3ZhbHVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jcF90b2tlbl92YWx1ZShuKSAoKHVuaW9uIGNwX3Rva2VuX3ZhbHVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGNwX3Rva2VuX3ZhbHVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2NoZWNrKCkgKChzdHJ1Y3QgdHJlZV9jaGVjayAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jaGVjaykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2NoZWNrKCkgKChzdHJ1Y3QgdHJlZV9jaGVjayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2NoZWNrKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9jaGVjayhuKSAoKHN0cnVjdCB0cmVlX2NoZWNrICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jaGVjayksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9jaGVjayhuKSAoKHN0cnVjdCB0cmVlX2NoZWNrICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2NoZWNrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jb25zdGV4cHJfY2FsbCgpICgoc3RydWN0IGNvbnN0ZXhwcl9jYWxsICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb25zdGV4cHJfY2FsbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb25zdGV4cHJfY2FsbCgpICgoc3RydWN0IGNvbnN0ZXhwcl9jYWxsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbnN0ZXhwcl9jYWxsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29uc3RleHByX2NhbGwobikgKChzdHJ1Y3QgY29uc3RleHByX2NhbGwgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb25zdGV4cHJfY2FsbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29uc3RleHByX2NhbGwobikgKChzdHJ1Y3QgY29uc3RleHByX2NhbGwgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbnN0ZXhwcl9jYWxsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jb25zdGV4cHJfZnVuZGVmKCkgKChzdHJ1Y3QgY29uc3RleHByX2Z1bmRlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29uc3RleHByX2Z1bmRlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb25zdGV4cHJfZnVuZGVmKCkgKChzdHJ1Y3QgY29uc3RleHByX2Z1bmRlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb25zdGV4cHJfZnVuZGVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29uc3RleHByX2Z1bmRlZihuKSAoKHN0cnVjdCBjb25zdGV4cHJfZnVuZGVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29uc3RleHByX2Z1bmRlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29uc3RleHByX2Z1bmRlZihuKSAoKHN0cnVjdCBjb25zdGV4cHJfZnVuZGVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb25zdGV4cHJfZnVuZGVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZGVmZXJyZWRfYWNjZXNzX3ZhX2djXygpICgodmVjPGRlZmVycmVkX2FjY2Vzcyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGRlZmVycmVkX2FjY2Vzcyx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2RlZmVycmVkX2FjY2Vzc192YV9nY18oKSAoKHZlYzxkZWZlcnJlZF9hY2Nlc3MsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGRlZmVycmVkX2FjY2Vzcyx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfZGVmZXJyZWRfYWNjZXNzX3ZhX2djXyhuKSAoKHZlYzxkZWZlcnJlZF9hY2Nlc3MsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZGVmZXJyZWRfYWNjZXNzLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2RlZmVycmVkX2FjY2Vzc192YV9nY18obikgKCh2ZWM8ZGVmZXJyZWRfYWNjZXNzLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZGVmZXJyZWRfYWNjZXNzLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZGVmZXJyZWRfYWNjZXNzKCkgKChzdHJ1Y3QgZGVmZXJyZWRfYWNjZXNzICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkZWZlcnJlZF9hY2Nlc3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZGVmZXJyZWRfYWNjZXNzKCkgKChzdHJ1Y3QgZGVmZXJyZWRfYWNjZXNzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRlZmVycmVkX2FjY2VzcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2RlZmVycmVkX2FjY2VzcyhuKSAoKHN0cnVjdCBkZWZlcnJlZF9hY2Nlc3MgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkZWZlcnJlZF9hY2Nlc3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2RlZmVycmVkX2FjY2VzcyhuKSAoKHN0cnVjdCBkZWZlcnJlZF9hY2Nlc3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRlZmVycmVkX2FjY2VzcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2RlZmVycmVkX2FjY2Vzc19jaGVja192YV9nY18oKSAoKHZlYzxkZWZlcnJlZF9hY2Nlc3NfY2hlY2ssdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkZWZlcnJlZF9hY2Nlc3NfY2hlY2ssdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kZWZlcnJlZF9hY2Nlc3NfY2hlY2tfdmFfZ2NfKCkgKCh2ZWM8ZGVmZXJyZWRfYWNjZXNzX2NoZWNrLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkZWZlcnJlZF9hY2Nlc3NfY2hlY2ssdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2RlZmVycmVkX2FjY2Vzc19jaGVja192YV9nY18obikgKCh2ZWM8ZGVmZXJyZWRfYWNjZXNzX2NoZWNrLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGRlZmVycmVkX2FjY2Vzc19jaGVjayx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19kZWZlcnJlZF9hY2Nlc3NfY2hlY2tfdmFfZ2NfKG4pICgodmVjPGRlZmVycmVkX2FjY2Vzc19jaGVjayx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGRlZmVycmVkX2FjY2Vzc19jaGVjayx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NwZWNfZW50cnkoKSAoKHN0cnVjdCBzcGVjX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzcGVjX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NwZWNfZW50cnkoKSAoKHN0cnVjdCBzcGVjX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNwZWNfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zcGVjX2VudHJ5KG4pICgoc3RydWN0IHNwZWNfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzcGVjX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zcGVjX2VudHJ5KG4pICgoc3RydWN0IHNwZWNfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNwZWNfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3BlbmRpbmdfdGVtcGxhdGUoKSAoKHN0cnVjdCBwZW5kaW5nX3RlbXBsYXRlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwZW5kaW5nX3RlbXBsYXRlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3BlbmRpbmdfdGVtcGxhdGUoKSAoKHN0cnVjdCBwZW5kaW5nX3RlbXBsYXRlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBlbmRpbmdfdGVtcGxhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19wZW5kaW5nX3RlbXBsYXRlKG4pICgoc3RydWN0IHBlbmRpbmdfdGVtcGxhdGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwZW5kaW5nX3RlbXBsYXRlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19wZW5kaW5nX3RlbXBsYXRlKG4pICgoc3RydWN0IHBlbmRpbmdfdGVtcGxhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBlbmRpbmdfdGVtcGxhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pbmNvbXBsZXRlX3Zhcl92YV9nY18oKSAoKHZlYzxpbmNvbXBsZXRlX3Zhcix2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGluY29tcGxldGVfdmFyLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaW5jb21wbGV0ZV92YXJfdmFfZ2NfKCkgKCh2ZWM8aW5jb21wbGV0ZV92YXIsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGluY29tcGxldGVfdmFyLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19pbmNvbXBsZXRlX3Zhcl92YV9nY18obikgKCh2ZWM8aW5jb21wbGV0ZV92YXIsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aW5jb21wbGV0ZV92YXIsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfaW5jb21wbGV0ZV92YXJfdmFfZ2NfKG4pICgodmVjPGluY29tcGxldGVfdmFyLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aW5jb21wbGV0ZV92YXIsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pbmNvbXBsZXRlX3Zhcl9kKCkgKChzdHJ1Y3QgaW5jb21wbGV0ZV92YXJfZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21wbGV0ZV92YXJfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pbmNvbXBsZXRlX3Zhcl9kKCkgKChzdHJ1Y3QgaW5jb21wbGV0ZV92YXJfZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbmNvbXBsZXRlX3Zhcl9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaW5jb21wbGV0ZV92YXJfZChuKSAoKHN0cnVjdCBpbmNvbXBsZXRlX3Zhcl9kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21wbGV0ZV92YXJfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaW5jb21wbGV0ZV92YXJfZChuKSAoKHN0cnVjdCBpbmNvbXBsZXRlX3Zhcl9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbmNvbXBsZXRlX3Zhcl9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19uYW1lZF9sYWJlbF91c2VfZW50cnkoKSAoKHN0cnVjdCBuYW1lZF9sYWJlbF91c2VfZW50cnkgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5hbWVkX2xhYmVsX3VzZV9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9uYW1lZF9sYWJlbF91c2VfZW50cnkoKSAoKHN0cnVjdCBuYW1lZF9sYWJlbF91c2VfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbmFtZWRfbGFiZWxfdXNlX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbmFtZWRfbGFiZWxfdXNlX2VudHJ5KG4pICgoc3RydWN0IG5hbWVkX2xhYmVsX3VzZV9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5hbWVkX2xhYmVsX3VzZV9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbmFtZWRfbGFiZWxfdXNlX2VudHJ5KG4pICgoc3RydWN0IG5hbWVkX2xhYmVsX3VzZV9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbmFtZWRfbGFiZWxfdXNlX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kZWZlcnJlZF9hY2Nlc3NfY2hlY2soKSAoKHN0cnVjdCBkZWZlcnJlZF9hY2Nlc3NfY2hlY2sgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRlZmVycmVkX2FjY2Vzc19jaGVjaykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kZWZlcnJlZF9hY2Nlc3NfY2hlY2soKSAoKHN0cnVjdCBkZWZlcnJlZF9hY2Nlc3NfY2hlY2sgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZGVmZXJyZWRfYWNjZXNzX2NoZWNrKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZGVmZXJyZWRfYWNjZXNzX2NoZWNrKG4pICgoc3RydWN0IGRlZmVycmVkX2FjY2Vzc19jaGVjayAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRlZmVycmVkX2FjY2Vzc19jaGVjayksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZGVmZXJyZWRfYWNjZXNzX2NoZWNrKG4pICgoc3RydWN0IGRlZmVycmVkX2FjY2Vzc19jaGVjayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZGVmZXJyZWRfYWNjZXNzX2NoZWNrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19vcGVyYXRvcl9uYW1lX2luZm9fdCgpICgoc3RydWN0IG9wZXJhdG9yX25hbWVfaW5mb190ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBvcGVyYXRvcl9uYW1lX2luZm9fdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9vcGVyYXRvcl9uYW1lX2luZm9fdCgpICgoc3RydWN0IG9wZXJhdG9yX25hbWVfaW5mb190ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG9wZXJhdG9yX25hbWVfaW5mb190KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfb3BlcmF0b3JfbmFtZV9pbmZvX3QobikgKChzdHJ1Y3Qgb3BlcmF0b3JfbmFtZV9pbmZvX3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBvcGVyYXRvcl9uYW1lX2luZm9fdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfb3BlcmF0b3JfbmFtZV9pbmZvX3QobikgKChzdHJ1Y3Qgb3BlcmF0b3JfbmFtZV9pbmZvX3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG9wZXJhdG9yX25hbWVfaW5mb190KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sYW5nX2RlY2xfdSgpICgodW5pb24gbGFuZ19kZWNsX3UgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbGFuZ19kZWNsX3UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGFuZ19kZWNsX3UoKSAoKHVuaW9uIGxhbmdfZGVjbF91ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbGFuZ19kZWNsX3UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sYW5nX2RlY2xfdShuKSAoKHVuaW9uIGxhbmdfZGVjbF91ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBsYW5nX2RlY2xfdSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGFuZ19kZWNsX3UobikgKCh1bmlvbiBsYW5nX2RlY2xfdSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBsYW5nX2RlY2xfdSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGFuZ19kZWNsX3Bhcm0oKSAoKHN0cnVjdCBsYW5nX2RlY2xfcGFybSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsX3Bhcm0pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGFuZ19kZWNsX3Bhcm0oKSAoKHN0cnVjdCBsYW5nX2RlY2xfcGFybSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfcGFybSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xhbmdfZGVjbF9wYXJtKG4pICgoc3RydWN0IGxhbmdfZGVjbF9wYXJtICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsX3Bhcm0pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xhbmdfZGVjbF9wYXJtKG4pICgoc3RydWN0IGxhbmdfZGVjbF9wYXJtICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfcGFybSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGFuZ19kZWNsX25zKCkgKChzdHJ1Y3QgbGFuZ19kZWNsX25zICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfbnMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGFuZ19kZWNsX25zKCkgKChzdHJ1Y3QgbGFuZ19kZWNsX25zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfZGVjbF9ucykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xhbmdfZGVjbF9ucyhuKSAoKHN0cnVjdCBsYW5nX2RlY2xfbnMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfbnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xhbmdfZGVjbF9ucyhuKSAoKHN0cnVjdCBsYW5nX2RlY2xfbnMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfZGVjbF9ucyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGFuZ19kZWNsX2ZuKCkgKChzdHJ1Y3QgbGFuZ19kZWNsX2ZuICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfZm4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGFuZ19kZWNsX2ZuKCkgKChzdHJ1Y3QgbGFuZ19kZWNsX2ZuICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfZGVjbF9mbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xhbmdfZGVjbF9mbihuKSAoKHN0cnVjdCBsYW5nX2RlY2xfZm4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfZm4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xhbmdfZGVjbF9mbihuKSAoKHN0cnVjdCBsYW5nX2RlY2xfZm4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfZGVjbF9mbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGFuZ19kZWNsX3UzKCkgKCh1bmlvbiBsYW5nX2RlY2xfdTMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbGFuZ19kZWNsX3UzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xhbmdfZGVjbF91MygpICgodW5pb24gbGFuZ19kZWNsX3UzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbGFuZ19kZWNsX3UzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGFuZ19kZWNsX3UzKG4pICgodW5pb24gbGFuZ19kZWNsX3UzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBsYW5nX2RlY2xfdTMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xhbmdfZGVjbF91MyhuKSAoKHVuaW9uIGxhbmdfZGVjbF91MyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBsYW5nX2RlY2xfdTMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xhbmdfZGVjbF91NSgpICgodW5pb24gbGFuZ19kZWNsX3U1ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGxhbmdfZGVjbF91NSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sYW5nX2RlY2xfdTUoKSAoKHVuaW9uIGxhbmdfZGVjbF91NSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGxhbmdfZGVjbF91NSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xhbmdfZGVjbF91NShuKSAoKHVuaW9uIGxhbmdfZGVjbF91NSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbGFuZ19kZWNsX3U1KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sYW5nX2RlY2xfdTUobikgKCh1bmlvbiBsYW5nX2RlY2xfdTUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbGFuZ19kZWNsX3U1KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sYW5nX2RlY2xfbWluKCkgKChzdHJ1Y3QgbGFuZ19kZWNsX21pbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsX21pbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sYW5nX2RlY2xfbWluKCkgKChzdHJ1Y3QgbGFuZ19kZWNsX21pbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfbWluKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGFuZ19kZWNsX21pbihuKSAoKHN0cnVjdCBsYW5nX2RlY2xfbWluICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsX21pbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGFuZ19kZWNsX21pbihuKSAoKHN0cnVjdCBsYW5nX2RlY2xfbWluICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfbWluKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sYW5nX2RlY2xfdTIoKSAoKHVuaW9uIGxhbmdfZGVjbF91MiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBsYW5nX2RlY2xfdTIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGFuZ19kZWNsX3UyKCkgKCh1bmlvbiBsYW5nX2RlY2xfdTIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBsYW5nX2RlY2xfdTIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sYW5nX2RlY2xfdTIobikgKCh1bmlvbiBsYW5nX2RlY2xfdTIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGxhbmdfZGVjbF91MiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGFuZ19kZWNsX3UyKG4pICgodW5pb24gbGFuZ19kZWNsX3UyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGxhbmdfZGVjbF91MiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGFuZ19kZWNsX2Jhc2UoKSAoKHN0cnVjdCBsYW5nX2RlY2xfYmFzZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsX2Jhc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGFuZ19kZWNsX2Jhc2UoKSAoKHN0cnVjdCBsYW5nX2RlY2xfYmFzZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfYmFzZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xhbmdfZGVjbF9iYXNlKG4pICgoc3RydWN0IGxhbmdfZGVjbF9iYXNlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsX2Jhc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xhbmdfZGVjbF9iYXNlKG4pICgoc3RydWN0IGxhbmdfZGVjbF9iYXNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX2RlY2xfYmFzZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGFuZ190eXBlX3UoKSAoKHVuaW9uIGxhbmdfdHlwZV91ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGxhbmdfdHlwZV91KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xhbmdfdHlwZV91KCkgKCh1bmlvbiBsYW5nX3R5cGVfdSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGxhbmdfdHlwZV91KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGFuZ190eXBlX3UobikgKCh1bmlvbiBsYW5nX3R5cGVfdSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbGFuZ190eXBlX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xhbmdfdHlwZV91KG4pICgodW5pb24gbGFuZ190eXBlX3UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbGFuZ190eXBlX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xhbmdfdHlwZV9wdHJtZW0oKSAoKHN0cnVjdCBsYW5nX3R5cGVfcHRybWVtICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX3R5cGVfcHRybWVtKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xhbmdfdHlwZV9wdHJtZW0oKSAoKHN0cnVjdCBsYW5nX3R5cGVfcHRybWVtICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfdHlwZV9wdHJtZW0pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sYW5nX3R5cGVfcHRybWVtKG4pICgoc3RydWN0IGxhbmdfdHlwZV9wdHJtZW0gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX3R5cGVfcHRybWVtKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sYW5nX3R5cGVfcHRybWVtKG4pICgoc3RydWN0IGxhbmdfdHlwZV9wdHJtZW0gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfdHlwZV9wdHJtZW0pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xhbmdfdHlwZV9jbGFzcygpICgoc3RydWN0IGxhbmdfdHlwZV9jbGFzcyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ190eXBlX2NsYXNzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xhbmdfdHlwZV9jbGFzcygpICgoc3RydWN0IGxhbmdfdHlwZV9jbGFzcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX3R5cGVfY2xhc3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sYW5nX3R5cGVfY2xhc3MobikgKChzdHJ1Y3QgbGFuZ190eXBlX2NsYXNzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ190eXBlX2NsYXNzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sYW5nX3R5cGVfY2xhc3MobikgKChzdHJ1Y3QgbGFuZ190eXBlX2NsYXNzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX3R5cGVfY2xhc3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3BhaXJfc192YV9nY18oKSAoKHZlYzx0cmVlX3BhaXJfcyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHRyZWVfcGFpcl9zLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9wYWlyX3NfdmFfZ2NfKCkgKCh2ZWM8dHJlZV9wYWlyX3MsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHRyZWVfcGFpcl9zLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY190cmVlX3BhaXJfc192YV9nY18obikgKCh2ZWM8dHJlZV9wYWlyX3MsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dHJlZV9wYWlyX3MsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfdHJlZV9wYWlyX3NfdmFfZ2NfKG4pICgodmVjPHRyZWVfcGFpcl9zLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dHJlZV9wYWlyX3MsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sYW5nX3R5cGVfaGVhZGVyKCkgKChzdHJ1Y3QgbGFuZ190eXBlX2hlYWRlciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ190eXBlX2hlYWRlcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sYW5nX3R5cGVfaGVhZGVyKCkgKChzdHJ1Y3QgbGFuZ190eXBlX2hlYWRlciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX3R5cGVfaGVhZGVyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGFuZ190eXBlX2hlYWRlcihuKSAoKHN0cnVjdCBsYW5nX3R5cGVfaGVhZGVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ190eXBlX2hlYWRlciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGFuZ190eXBlX2hlYWRlcihuKSAoKHN0cnVjdCBsYW5nX3R5cGVfaGVhZGVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYW5nX3R5cGVfaGVhZGVyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3BhaXJfcygpICgoc3RydWN0IHRyZWVfcGFpcl9zICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3BhaXJfcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3BhaXJfcygpICgoc3RydWN0IHRyZWVfcGFpcl9zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfcGFpcl9zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9wYWlyX3MobikgKChzdHJ1Y3QgdHJlZV9wYWlyX3MgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3BhaXJfcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9wYWlyX3MobikgKChzdHJ1Y3QgdHJlZV9wYWlyX3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfcGFpcl9zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19uYW1lZF9sYWJlbF9lbnRyeSgpICgoc3RydWN0IG5hbWVkX2xhYmVsX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBuYW1lZF9sYWJlbF9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9uYW1lZF9sYWJlbF9lbnRyeSgpICgoc3RydWN0IG5hbWVkX2xhYmVsX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5hbWVkX2xhYmVsX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbmFtZWRfbGFiZWxfZW50cnkobikgKChzdHJ1Y3QgbmFtZWRfbGFiZWxfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBuYW1lZF9sYWJlbF9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbmFtZWRfbGFiZWxfZW50cnkobikgKChzdHJ1Y3QgbmFtZWRfbGFiZWxfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5hbWVkX2xhYmVsX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY3h4X3NhdmVkX2JpbmRpbmdfdmFfZ2NfKCkgKCh2ZWM8Y3h4X3NhdmVkX2JpbmRpbmcsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjeHhfc2F2ZWRfYmluZGluZyx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2N4eF9zYXZlZF9iaW5kaW5nX3ZhX2djXygpICgodmVjPGN4eF9zYXZlZF9iaW5kaW5nLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjeHhfc2F2ZWRfYmluZGluZyx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfY3h4X3NhdmVkX2JpbmRpbmdfdmFfZ2NfKG4pICgodmVjPGN4eF9zYXZlZF9iaW5kaW5nLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGN4eF9zYXZlZF9iaW5kaW5nLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2N4eF9zYXZlZF9iaW5kaW5nX3ZhX2djXyhuKSAoKHZlYzxjeHhfc2F2ZWRfYmluZGluZyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGN4eF9zYXZlZF9iaW5kaW5nLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdHJlZV90ZW1wbGF0ZV9pbmZvKCkgKChzdHJ1Y3QgdHJlZV90ZW1wbGF0ZV9pbmZvICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3RlbXBsYXRlX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdHJlZV90ZW1wbGF0ZV9pbmZvKCkgKChzdHJ1Y3QgdHJlZV90ZW1wbGF0ZV9pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdGVtcGxhdGVfaW5mbykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RyZWVfdGVtcGxhdGVfaW5mbyhuKSAoKHN0cnVjdCB0cmVlX3RlbXBsYXRlX2luZm8gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3RlbXBsYXRlX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RyZWVfdGVtcGxhdGVfaW5mbyhuKSAoKHN0cnVjdCB0cmVlX3RlbXBsYXRlX2luZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdGVtcGxhdGVfaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3RfdmFfZ2NfKCkgKCh2ZWM8cXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90X3ZhX2djXygpICgodmVjPHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3RfdmFfZ2NfKG4pICgodmVjPHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90X3ZhX2djXyhuKSAoKHZlYzxxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3MoKSAoKHN0cnVjdCBxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV9zICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV9zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3MoKSAoKHN0cnVjdCBxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV9zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV9zKG4pICgoc3RydWN0IHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3MgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV9zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV9zKG4pICgoc3RydWN0IHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfbGFtYmRhX2V4cHIoKSAoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfbGFtYmRhX2V4cHIoKSAoKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfbGFtYmRhX2V4cHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2xhbWJkYV9leHByKG4pICgoc3RydWN0IHRyZWVfbGFtYmRhX2V4cHIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2xhbWJkYV9leHByKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2xhbWJkYV9leHByKG4pICgoc3RydWN0IHRyZWVfbGFtYmRhX2V4cHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfbGFtYmRhX2V4cHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfdHJhaXRfZXhwcigpICgoc3RydWN0IHRyZWVfdHJhaXRfZXhwciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV90cmFpdF9leHByKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfdHJhaXRfZXhwcigpICgoc3RydWN0IHRyZWVfdHJhaXRfZXhwciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3RyYWl0X2V4cHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3RyYWl0X2V4cHIobikgKChzdHJ1Y3QgdHJlZV90cmFpdF9leHByICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV90cmFpdF9leHByKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3RyYWl0X2V4cHIobikgKChzdHJ1Y3QgdHJlZV90cmFpdF9leHByICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3RyYWl0X2V4cHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfYXJndW1lbnRfcGFja19zZWxlY3QoKSAoKHN0cnVjdCB0cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfYXJndW1lbnRfcGFja19zZWxlY3QoKSAoKHN0cnVjdCB0cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfYXJndW1lbnRfcGFja19zZWxlY3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0KG4pICgoc3RydWN0IHRyZWVfYXJndW1lbnRfcGFja19zZWxlY3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2FyZ3VtZW50X3BhY2tfc2VsZWN0KG4pICgoc3RydWN0IHRyZWVfYXJndW1lbnRfcGFja19zZWxlY3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfYXJndW1lbnRfcGFja19zZWxlY3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfc3RhdGljX2Fzc2VydCgpICgoc3RydWN0IHRyZWVfc3RhdGljX2Fzc2VydCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zdGF0aWNfYXNzZXJ0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfc3RhdGljX2Fzc2VydCgpICgoc3RydWN0IHRyZWVfc3RhdGljX2Fzc2VydCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3N0YXRpY19hc3NlcnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3N0YXRpY19hc3NlcnQobikgKChzdHJ1Y3QgdHJlZV9zdGF0aWNfYXNzZXJ0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zdGF0aWNfYXNzZXJ0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3N0YXRpY19hc3NlcnQobikgKChzdHJ1Y3QgdHJlZV9zdGF0aWNfYXNzZXJ0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3N0YXRpY19hc3NlcnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfZGVmZXJyZWRfbm9leGNlcHQoKSAoKHN0cnVjdCB0cmVlX2RlZmVycmVkX25vZXhjZXB0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlZmVycmVkX25vZXhjZXB0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfZGVmZXJyZWRfbm9leGNlcHQoKSAoKHN0cnVjdCB0cmVlX2RlZmVycmVkX25vZXhjZXB0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVmZXJyZWRfbm9leGNlcHQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2RlZmVycmVkX25vZXhjZXB0KG4pICgoc3RydWN0IHRyZWVfZGVmZXJyZWRfbm9leGNlcHQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlZmVycmVkX25vZXhjZXB0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2RlZmVycmVkX25vZXhjZXB0KG4pICgoc3RydWN0IHRyZWVfZGVmZXJyZWRfbm9leGNlcHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVmZXJyZWRfbm9leGNlcHQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfZGVmYXVsdF9hcmcoKSAoKHN0cnVjdCB0cmVlX2RlZmF1bHRfYXJnICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlZmF1bHRfYXJnKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfZGVmYXVsdF9hcmcoKSAoKHN0cnVjdCB0cmVlX2RlZmF1bHRfYXJnICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVmYXVsdF9hcmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2RlZmF1bHRfYXJnKG4pICgoc3RydWN0IHRyZWVfZGVmYXVsdF9hcmcgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlZmF1bHRfYXJnKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2RlZmF1bHRfYXJnKG4pICgoc3RydWN0IHRyZWVfZGVmYXVsdF9hcmcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVmYXVsdF9hcmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NwX3Rva2VuX2NhY2hlKCkgKChzdHJ1Y3QgY3BfdG9rZW5fY2FjaGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX3Rva2VuX2NhY2hlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NwX3Rva2VuX2NhY2hlKCkgKChzdHJ1Y3QgY3BfdG9rZW5fY2FjaGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfdG9rZW5fY2FjaGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcF90b2tlbl9jYWNoZShuKSAoKHN0cnVjdCBjcF90b2tlbl9jYWNoZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX3Rva2VuX2NhY2hlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jcF90b2tlbl9jYWNoZShuKSAoKHN0cnVjdCBjcF90b2tlbl9jYWNoZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfdG9rZW5fY2FjaGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfYmFzZWxpbmsoKSAoKHN0cnVjdCB0cmVlX2Jhc2VsaW5rICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2Jhc2VsaW5rKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfYmFzZWxpbmsoKSAoKHN0cnVjdCB0cmVlX2Jhc2VsaW5rICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfYmFzZWxpbmspIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2Jhc2VsaW5rKG4pICgoc3RydWN0IHRyZWVfYmFzZWxpbmsgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2Jhc2VsaW5rKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2Jhc2VsaW5rKG4pICgoc3RydWN0IHRyZWVfYmFzZWxpbmsgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfYmFzZWxpbmspLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfb3ZlcmxvYWQoKSAoKHN0cnVjdCB0cmVlX292ZXJsb2FkICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX292ZXJsb2FkKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfb3ZlcmxvYWQoKSAoKHN0cnVjdCB0cmVlX292ZXJsb2FkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfb3ZlcmxvYWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX292ZXJsb2FkKG4pICgoc3RydWN0IHRyZWVfb3ZlcmxvYWQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX292ZXJsb2FkKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX292ZXJsb2FkKG4pICgoc3RydWN0IHRyZWVfb3ZlcmxvYWQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfb3ZlcmxvYWQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3B0cm1lbV9jc3QoKSAoKHN0cnVjdCBwdHJtZW1fY3N0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwdHJtZW1fY3N0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3B0cm1lbV9jc3QoKSAoKHN0cnVjdCBwdHJtZW1fY3N0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHB0cm1lbV9jc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19wdHJtZW1fY3N0KG4pICgoc3RydWN0IHB0cm1lbV9jc3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwdHJtZW1fY3N0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19wdHJtZW1fY3N0KG4pICgoc3RydWN0IHB0cm1lbV9jc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHB0cm1lbV9jc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RlbXBsYXRlX3Bhcm1faW5kZXhfcygpICgoc3RydWN0IHRlbXBsYXRlX3Bhcm1faW5kZXhfcyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGVtcGxhdGVfcGFybV9pbmRleF9zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RlbXBsYXRlX3Bhcm1faW5kZXhfcygpICgoc3RydWN0IHRlbXBsYXRlX3Bhcm1faW5kZXhfcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0ZW1wbGF0ZV9wYXJtX2luZGV4X3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190ZW1wbGF0ZV9wYXJtX2luZGV4X3MobikgKChzdHJ1Y3QgdGVtcGxhdGVfcGFybV9pbmRleF9zICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGVtcGxhdGVfcGFybV9pbmRleF9zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190ZW1wbGF0ZV9wYXJtX2luZGV4X3MobikgKChzdHJ1Y3QgdGVtcGxhdGVfcGFybV9pbmRleF9zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0ZW1wbGF0ZV9wYXJtX2luZGV4X3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NhdmVkX3Njb3BlKCkgKChzdHJ1Y3Qgc2F2ZWRfc2NvcGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNhdmVkX3Njb3BlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NhdmVkX3Njb3BlKCkgKChzdHJ1Y3Qgc2F2ZWRfc2NvcGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc2F2ZWRfc2NvcGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zYXZlZF9zY29wZShuKSAoKHN0cnVjdCBzYXZlZF9zY29wZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNhdmVkX3Njb3BlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zYXZlZF9zY29wZShuKSAoKHN0cnVjdCBzYXZlZF9zY29wZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc2F2ZWRfc2NvcGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2N4eF9pbnRfdHJlZV9tYXAoKSAoKHN0cnVjdCBjeHhfaW50X3RyZWVfbWFwICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjeHhfaW50X3RyZWVfbWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2N4eF9pbnRfdHJlZV9tYXAoKSAoKHN0cnVjdCBjeHhfaW50X3RyZWVfbWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGN4eF9pbnRfdHJlZV9tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jeHhfaW50X3RyZWVfbWFwKG4pICgoc3RydWN0IGN4eF9pbnRfdHJlZV9tYXAgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjeHhfaW50X3RyZWVfbWFwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jeHhfaW50X3RyZWVfbWFwKG4pICgoc3RydWN0IGN4eF9pbnRfdHJlZV9tYXAgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGN4eF9pbnRfdHJlZV9tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcF9sYWJlbF9iaW5kaW5nX3ZhX2djXygpICgodmVjPGNwX2xhYmVsX2JpbmRpbmcsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF9sYWJlbF9iaW5kaW5nLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY3BfbGFiZWxfYmluZGluZ192YV9nY18oKSAoKHZlYzxjcF9sYWJlbF9iaW5kaW5nLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF9sYWJlbF9iaW5kaW5nLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19jcF9sYWJlbF9iaW5kaW5nX3ZhX2djXyhuKSAoKHZlYzxjcF9sYWJlbF9iaW5kaW5nLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGNwX2xhYmVsX2JpbmRpbmcsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfY3BfbGFiZWxfYmluZGluZ192YV9nY18obikgKCh2ZWM8Y3BfbGFiZWxfYmluZGluZyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGNwX2xhYmVsX2JpbmRpbmcsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY3BfY2xhc3NfYmluZGluZ192YV9nY18oKSAoKHZlYzxjcF9jbGFzc19iaW5kaW5nLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y3BfY2xhc3NfYmluZGluZyx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwX2NsYXNzX2JpbmRpbmdfdmFfZ2NfKCkgKCh2ZWM8Y3BfY2xhc3NfYmluZGluZyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y3BfY2xhc3NfYmluZGluZyx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfY3BfY2xhc3NfYmluZGluZ192YV9nY18obikgKCh2ZWM8Y3BfY2xhc3NfYmluZGluZyx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF9jbGFzc19iaW5kaW5nLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2NwX2NsYXNzX2JpbmRpbmdfdmFfZ2NfKG4pICgodmVjPGNwX2NsYXNzX2JpbmRpbmcsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjcF9jbGFzc19iaW5kaW5nLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BfbGFiZWxfYmluZGluZygpICgoc3RydWN0IGNwX2xhYmVsX2JpbmRpbmcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX2xhYmVsX2JpbmRpbmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BfbGFiZWxfYmluZGluZygpICgoc3RydWN0IGNwX2xhYmVsX2JpbmRpbmcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfbGFiZWxfYmluZGluZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwX2xhYmVsX2JpbmRpbmcobikgKChzdHJ1Y3QgY3BfbGFiZWxfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX2xhYmVsX2JpbmRpbmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwX2xhYmVsX2JpbmRpbmcobikgKChzdHJ1Y3QgY3BfbGFiZWxfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfbGFiZWxfYmluZGluZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BfY2xhc3NfYmluZGluZygpICgoc3RydWN0IGNwX2NsYXNzX2JpbmRpbmcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX2NsYXNzX2JpbmRpbmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BfY2xhc3NfYmluZGluZygpICgoc3RydWN0IGNwX2NsYXNzX2JpbmRpbmcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfY2xhc3NfYmluZGluZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwX2NsYXNzX2JpbmRpbmcobikgKChzdHJ1Y3QgY3BfY2xhc3NfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX2NsYXNzX2JpbmRpbmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwX2NsYXNzX2JpbmRpbmcobikgKChzdHJ1Y3QgY3BfY2xhc3NfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfY2xhc3NfYmluZGluZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3h4X3NhdmVkX2JpbmRpbmcoKSAoKHN0cnVjdCBjeHhfc2F2ZWRfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3h4X3NhdmVkX2JpbmRpbmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3h4X3NhdmVkX2JpbmRpbmcoKSAoKHN0cnVjdCBjeHhfc2F2ZWRfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjeHhfc2F2ZWRfYmluZGluZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2N4eF9zYXZlZF9iaW5kaW5nKG4pICgoc3RydWN0IGN4eF9zYXZlZF9iaW5kaW5nICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3h4X3NhdmVkX2JpbmRpbmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2N4eF9zYXZlZF9iaW5kaW5nKG4pICgoc3RydWN0IGN4eF9zYXZlZF9iaW5kaW5nICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjeHhfc2F2ZWRfYmluZGluZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BfYmluZGluZ19sZXZlbCgpICgoc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BfYmluZGluZ19sZXZlbCgpICgoc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfYmluZGluZ19sZXZlbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwX2JpbmRpbmdfbGV2ZWwobikgKChzdHJ1Y3QgY3BfYmluZGluZ19sZXZlbCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwX2JpbmRpbmdfbGV2ZWwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwX2JpbmRpbmdfbGV2ZWwobikgKChzdHJ1Y3QgY3BfYmluZGluZ19sZXZlbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BfYmluZGluZ19sZXZlbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3h4X2JpbmRpbmcoKSAoKHN0cnVjdCBjeHhfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3h4X2JpbmRpbmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3h4X2JpbmRpbmcoKSAoKHN0cnVjdCBjeHhfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjeHhfYmluZGluZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2N4eF9iaW5kaW5nKG4pICgoc3RydWN0IGN4eF9iaW5kaW5nICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3h4X2JpbmRpbmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2N4eF9iaW5kaW5nKG4pICgoc3RydWN0IGN4eF9iaW5kaW5nICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjeHhfYmluZGluZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYmluZGluZ19lbnRyeV9zKCkgKChzdHJ1Y3QgYmluZGluZ19lbnRyeV9zICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaW5kaW5nX2VudHJ5X3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYmluZGluZ19lbnRyeV9zKCkgKChzdHJ1Y3QgYmluZGluZ19lbnRyeV9zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJpbmRpbmdfZW50cnlfcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2JpbmRpbmdfZW50cnlfcyhuKSAoKHN0cnVjdCBiaW5kaW5nX2VudHJ5X3MgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaW5kaW5nX2VudHJ5X3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2JpbmRpbmdfZW50cnlfcyhuKSAoKHN0cnVjdCBiaW5kaW5nX2VudHJ5X3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJpbmRpbmdfZW50cnlfcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYmluZGluZ190YWJsZV9zKCkgKChzdHJ1Y3QgYmluZGluZ190YWJsZV9zICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaW5kaW5nX3RhYmxlX3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYmluZGluZ190YWJsZV9zKCkgKChzdHJ1Y3QgYmluZGluZ190YWJsZV9zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJpbmRpbmdfdGFibGVfcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2JpbmRpbmdfdGFibGVfcyhuKSAoKHN0cnVjdCBiaW5kaW5nX3RhYmxlX3MgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaW5kaW5nX3RhYmxlX3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2JpbmRpbmdfdGFibGVfcyhuKSAoKHN0cnVjdCBiaW5kaW5nX3RhYmxlX3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJpbmRpbmdfdGFibGVfcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdGluc3RfbGV2ZWwoKSAoKHN0cnVjdCB0aW5zdF9sZXZlbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGluc3RfbGV2ZWwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdGluc3RfbGV2ZWwoKSAoKHN0cnVjdCB0aW5zdF9sZXZlbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0aW5zdF9sZXZlbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RpbnN0X2xldmVsKG4pICgoc3RydWN0IHRpbnN0X2xldmVsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGluc3RfbGV2ZWwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RpbnN0X2xldmVsKG4pICgoc3RydWN0IHRpbnN0X2xldmVsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0aW5zdF9sZXZlbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2xvYmFscygpICgoc3RydWN0IGdsb2JhbHMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdsb2JhbHMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2xvYmFscygpICgoc3RydWN0IGdsb2JhbHMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2xvYmFscykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dsb2JhbHMobikgKChzdHJ1Y3QgZ2xvYmFscyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdsb2JhbHMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dsb2JhbHMobikgKChzdHJ1Y3QgZ2xvYmFscyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2xvYmFscyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RpbmZvX3NfdmFfZ2NfKCkgKCh2ZWM8dGluZm9fcyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHRpbmZvX3MsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190aW5mb19zX3ZhX2djXygpICgodmVjPHRpbmZvX3MsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHRpbmZvX3MsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3RpbmZvX3NfdmFfZ2NfKG4pICgodmVjPHRpbmZvX3MsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dGluZm9fcyx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY190aW5mb19zX3ZhX2djXyhuKSAoKHZlYzx0aW5mb19zLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dGluZm9fcyx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RpbmZvX3MoKSAoKHN0cnVjdCB0aW5mb19zICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0aW5mb19zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RpbmZvX3MoKSAoKHN0cnVjdCB0aW5mb19zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRpbmZvX3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190aW5mb19zKG4pICgoc3RydWN0IHRpbmZvX3MgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0aW5mb19zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190aW5mb19zKG4pICgoc3RydWN0IHRpbmZvX3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRpbmZvX3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NfcGFyc2VyKCkgKChzdHJ1Y3QgY19wYXJzZXIgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfcGFyc2VyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NfcGFyc2VyKCkgKChzdHJ1Y3QgY19wYXJzZXIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19wYXJzZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jX3BhcnNlcihuKSAoKHN0cnVjdCBjX3BhcnNlciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfcGFyc2VyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jX3BhcnNlcihuKSAoKHN0cnVjdCBjX3BhcnNlciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19wYXJzZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NfdG9rZW4oKSAoKHN0cnVjdCBjX3Rva2VuICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX3Rva2VuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NfdG9rZW4oKSAoKHN0cnVjdCBjX3Rva2VuICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfdG9rZW4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jX3Rva2VuKG4pICgoc3RydWN0IGNfdG9rZW4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX3Rva2VuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jX3Rva2VuKG4pICgoc3RydWN0IGNfdG9rZW4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfdG9rZW4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX29wdF9zdGFjaygpICgoc3RydWN0IG9wdF9zdGFjayAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgb3B0X3N0YWNrKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX29wdF9zdGFjaygpICgoc3RydWN0IG9wdF9zdGFjayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBvcHRfc3RhY2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19vcHRfc3RhY2sobikgKChzdHJ1Y3Qgb3B0X3N0YWNrICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgb3B0X3N0YWNrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19vcHRfc3RhY2sobikgKChzdHJ1Y3Qgb3B0X3N0YWNrICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBvcHRfc3RhY2spLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19wZW5kaW5nX3JlZGVmaW5pdGlvbl92YV9nY18oKSAoKHZlYzxwZW5kaW5nX3JlZGVmaW5pdGlvbix2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHBlbmRpbmdfcmVkZWZpbml0aW9uLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcGVuZGluZ19yZWRlZmluaXRpb25fdmFfZ2NfKCkgKCh2ZWM8cGVuZGluZ19yZWRlZmluaXRpb24sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHBlbmRpbmdfcmVkZWZpbml0aW9uLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19wZW5kaW5nX3JlZGVmaW5pdGlvbl92YV9nY18obikgKCh2ZWM8cGVuZGluZ19yZWRlZmluaXRpb24sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cGVuZGluZ19yZWRlZmluaXRpb24sdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfcGVuZGluZ19yZWRlZmluaXRpb25fdmFfZ2NfKG4pICgodmVjPHBlbmRpbmdfcmVkZWZpbml0aW9uLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cGVuZGluZ19yZWRlZmluaXRpb24sdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19wZW5kaW5nX3JlZGVmaW5pdGlvbl9kKCkgKChzdHJ1Y3QgcGVuZGluZ19yZWRlZmluaXRpb25fZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGVuZGluZ19yZWRlZmluaXRpb25fZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wZW5kaW5nX3JlZGVmaW5pdGlvbl9kKCkgKChzdHJ1Y3QgcGVuZGluZ19yZWRlZmluaXRpb25fZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwZW5kaW5nX3JlZGVmaW5pdGlvbl9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcGVuZGluZ19yZWRlZmluaXRpb25fZChuKSAoKHN0cnVjdCBwZW5kaW5nX3JlZGVmaW5pdGlvbl9kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGVuZGluZ19yZWRlZmluaXRpb25fZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcGVuZGluZ19yZWRlZmluaXRpb25fZChuKSAoKHN0cnVjdCBwZW5kaW5nX3JlZGVmaW5pdGlvbl9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwZW5kaW5nX3JlZGVmaW5pdGlvbl9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcGVuZGluZ193ZWFrX3ZhX2djXygpICgodmVjPHBlbmRpbmdfd2Vhayx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHBlbmRpbmdfd2Vhayx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3BlbmRpbmdfd2Vha192YV9nY18oKSAoKHZlYzxwZW5kaW5nX3dlYWssdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHBlbmRpbmdfd2Vhayx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfcGVuZGluZ193ZWFrX3ZhX2djXyhuKSAoKHZlYzxwZW5kaW5nX3dlYWssdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cGVuZGluZ193ZWFrLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX3BlbmRpbmdfd2Vha192YV9nY18obikgKCh2ZWM8cGVuZGluZ193ZWFrLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cGVuZGluZ193ZWFrLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcGVuZGluZ193ZWFrX2QoKSAoKHN0cnVjdCBwZW5kaW5nX3dlYWtfZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGVuZGluZ193ZWFrX2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcGVuZGluZ193ZWFrX2QoKSAoKHN0cnVjdCBwZW5kaW5nX3dlYWtfZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwZW5kaW5nX3dlYWtfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3BlbmRpbmdfd2Vha19kKG4pICgoc3RydWN0IHBlbmRpbmdfd2Vha19kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGVuZGluZ193ZWFrX2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3BlbmRpbmdfd2Vha19kKG4pICgoc3RydWN0IHBlbmRpbmdfd2Vha19kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwZW5kaW5nX3dlYWtfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYWxpZ25fc3RhY2soKSAoKHN0cnVjdCBhbGlnbl9zdGFjayAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYWxpZ25fc3RhY2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYWxpZ25fc3RhY2soKSAoKHN0cnVjdCBhbGlnbl9zdGFjayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhbGlnbl9zdGFjaykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2FsaWduX3N0YWNrKG4pICgoc3RydWN0IGFsaWduX3N0YWNrICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYWxpZ25fc3RhY2spLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2FsaWduX3N0YWNrKG4pICgoc3RydWN0IGFsaWduX3N0YWNrICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhbGlnbl9zdGFjayksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGF6eV9oZXhfZnBfdmFsdWVfc3RydWN0KCkgKChzdHJ1Y3QgbGF6eV9oZXhfZnBfdmFsdWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYXp5X2hleF9mcF92YWx1ZV9zdHJ1Y3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGF6eV9oZXhfZnBfdmFsdWVfc3RydWN0KCkgKChzdHJ1Y3QgbGF6eV9oZXhfZnBfdmFsdWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhenlfaGV4X2ZwX3ZhbHVlX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xhenlfaGV4X2ZwX3ZhbHVlX3N0cnVjdChuKSAoKHN0cnVjdCBsYXp5X2hleF9mcF92YWx1ZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsYXp5X2hleF9mcF92YWx1ZV9zdHJ1Y3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xhenlfaGV4X2ZwX3ZhbHVlX3N0cnVjdChuKSAoKHN0cnVjdCBsYXp5X2hleF9mcF92YWx1ZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhenlfaGV4X2ZwX3ZhbHVlX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdHJlZV91c2VyZGVmX2xpdGVyYWwoKSAoKHN0cnVjdCB0cmVlX3VzZXJkZWZfbGl0ZXJhbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV91c2VyZGVmX2xpdGVyYWwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdHJlZV91c2VyZGVmX2xpdGVyYWwoKSAoKHN0cnVjdCB0cmVlX3VzZXJkZWZfbGl0ZXJhbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3VzZXJkZWZfbGl0ZXJhbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RyZWVfdXNlcmRlZl9saXRlcmFsKG4pICgoc3RydWN0IHRyZWVfdXNlcmRlZl9saXRlcmFsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV91c2VyZGVmX2xpdGVyYWwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RyZWVfdXNlcmRlZl9saXRlcmFsKG4pICgoc3RydWN0IHRyZWVfdXNlcmRlZl9saXRlcmFsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3VzZXJkZWZfbGl0ZXJhbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RyZWVfZ2NfdmVjX3ZhX2djXygpICgodmVjPHRyZWVfZ2NfdmVjLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dHJlZV9nY192ZWMsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2djX3ZlY192YV9nY18oKSAoKHZlYzx0cmVlX2djX3ZlYyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dHJlZV9nY192ZWMsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3RyZWVfZ2NfdmVjX3ZhX2djXyhuKSAoKHZlYzx0cmVlX2djX3ZlYyx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzx0cmVlX2djX3ZlYyx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY190cmVlX2djX3ZlY192YV9nY18obikgKCh2ZWM8dHJlZV9nY192ZWMsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzx0cmVlX2djX3ZlYyx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NfbGFuZ3VhZ2VfZnVuY3Rpb24oKSAoKHN0cnVjdCBjX2xhbmd1YWdlX2Z1bmN0aW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX2xhbmd1YWdlX2Z1bmN0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NfbGFuZ3VhZ2VfZnVuY3Rpb24oKSAoKHN0cnVjdCBjX2xhbmd1YWdlX2Z1bmN0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jX2xhbmd1YWdlX2Z1bmN0aW9uKG4pICgoc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX2xhbmd1YWdlX2Z1bmN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jX2xhbmd1YWdlX2Z1bmN0aW9uKG4pICgoc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb25zdF9jaGFyX3BfdmFfZ2NfKCkgKCh2ZWM8Y29uc3RfY2hhcl9wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y29uc3RfY2hhcl9wLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29uc3RfY2hhcl9wX3ZhX2djXygpICgodmVjPGNvbnN0X2NoYXJfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y29uc3RfY2hhcl9wLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19jb25zdF9jaGFyX3BfdmFfZ2NfKG4pICgodmVjPGNvbnN0X2NoYXJfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjb25zdF9jaGFyX3AsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfY29uc3RfY2hhcl9wX3ZhX2djXyhuKSAoKHZlYzxjb25zdF9jaGFyX3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjb25zdF9jaGFyX3AsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19zb3J0ZWRfZmllbGRzX3R5cGUoU0laRSkgKChzdHJ1Y3Qgc29ydGVkX2ZpZWxkc190eXBlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChTSVpFIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfc29ydGVkX2ZpZWxkc190eXBlKFNJWkUpICgoc3RydWN0IHNvcnRlZF9maWVsZHNfdHlwZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChTSVpFIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zb3J0ZWRfZmllbGRzX3R5cGUoU0laRSwgbikgKChzdHJ1Y3Qgc29ydGVkX2ZpZWxkc190eXBlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoU0laRSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zb3J0ZWRfZmllbGRzX3R5cGUoU0laRSwgbikgKChzdHJ1Y3Qgc29ydGVkX2ZpZWxkc190eXBlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChTSVpFLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NfaW5saW5lX3N0YXRpYygpICgoc3RydWN0IGNfaW5saW5lX3N0YXRpYyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19pbmxpbmVfc3RhdGljKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NfaW5saW5lX3N0YXRpYygpICgoc3RydWN0IGNfaW5saW5lX3N0YXRpYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX2lubGluZV9zdGF0aWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jX2lubGluZV9zdGF0aWMobikgKChzdHJ1Y3QgY19pbmxpbmVfc3RhdGljICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19pbmxpbmVfc3RhdGljKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jX2lubGluZV9zdGF0aWMobikgKChzdHJ1Y3QgY19pbmxpbmVfc3RhdGljICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX2lubGluZV9zdGF0aWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jX2dvdG9fYmluZGluZ3NfcF92YV9nY18oKSAoKHZlYzxjX2dvdG9fYmluZGluZ3NfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGNfZ290b19iaW5kaW5nc19wLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY19nb3RvX2JpbmRpbmdzX3BfdmFfZ2NfKCkgKCh2ZWM8Y19nb3RvX2JpbmRpbmdzX3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGNfZ290b19iaW5kaW5nc19wLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19jX2dvdG9fYmluZGluZ3NfcF92YV9nY18obikgKCh2ZWM8Y19nb3RvX2JpbmRpbmdzX3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y19nb3RvX2JpbmRpbmdzX3AsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfY19nb3RvX2JpbmRpbmdzX3BfdmFfZ2NfKG4pICgodmVjPGNfZ290b19iaW5kaW5nc19wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y19nb3RvX2JpbmRpbmdzX3AsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jX2dvdG9fYmluZGluZ3MoKSAoKHN0cnVjdCBjX2dvdG9fYmluZGluZ3MgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfZ290b19iaW5kaW5ncykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jX2dvdG9fYmluZGluZ3MoKSAoKHN0cnVjdCBjX2dvdG9fYmluZGluZ3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19nb3RvX2JpbmRpbmdzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY19nb3RvX2JpbmRpbmdzKG4pICgoc3RydWN0IGNfZ290b19iaW5kaW5ncyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfZ290b19iaW5kaW5ncyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY19nb3RvX2JpbmRpbmdzKG4pICgoc3RydWN0IGNfZ290b19iaW5kaW5ncyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19nb3RvX2JpbmRpbmdzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jX3Njb3BlKCkgKChzdHJ1Y3QgY19zY29wZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19zY29wZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jX3Njb3BlKCkgKChzdHJ1Y3QgY19zY29wZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX3Njb3BlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY19zY29wZShuKSAoKHN0cnVjdCBjX3Njb3BlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19zY29wZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY19zY29wZShuKSAoKHN0cnVjdCBjX3Njb3BlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX3Njb3BlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sYW5nX2lkZW50aWZpZXIoKSAoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfaWRlbnRpZmllcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sYW5nX2lkZW50aWZpZXIoKSAoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGFuZ19pZGVudGlmaWVyKG4pICgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmdfaWRlbnRpZmllciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGFuZ19pZGVudGlmaWVyKG4pICgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jX2NvbW1vbl9pZGVudGlmaWVyKCkgKChzdHJ1Y3QgY19jb21tb25faWRlbnRpZmllciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19jb21tb25faWRlbnRpZmllcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jX2NvbW1vbl9pZGVudGlmaWVyKCkgKChzdHJ1Y3QgY19jb21tb25faWRlbnRpZmllciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY19jb21tb25faWRlbnRpZmllcihuKSAoKHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19jb21tb25faWRlbnRpZmllciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY19jb21tb25faWRlbnRpZmllcihuKSAoKHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjX2NvbW1vbl9pZGVudGlmaWVyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jX2JpbmRpbmcoKSAoKHN0cnVjdCBjX2JpbmRpbmcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfYmluZGluZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jX2JpbmRpbmcoKSAoKHN0cnVjdCBjX2JpbmRpbmcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19iaW5kaW5nKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY19iaW5kaW5nKG4pICgoc3RydWN0IGNfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfYmluZGluZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY19iaW5kaW5nKG4pICgoc3RydWN0IGNfYmluZGluZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19iaW5kaW5nKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jX2xhYmVsX3ZhcnMoKSAoKHN0cnVjdCBjX2xhYmVsX3ZhcnMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfbGFiZWxfdmFycykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jX2xhYmVsX3ZhcnMoKSAoKHN0cnVjdCBjX2xhYmVsX3ZhcnMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19sYWJlbF92YXJzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY19sYWJlbF92YXJzKG4pICgoc3RydWN0IGNfbGFiZWxfdmFycyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfbGFiZWxfdmFycyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY19sYWJlbF92YXJzKG4pICgoc3RydWN0IGNfbGFiZWxfdmFycyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19sYWJlbF92YXJzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19zdG10X3RyZWVfcygpICgoc3RydWN0IHN0bXRfdHJlZV9zICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzdG10X3RyZWVfcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9zdG10X3RyZWVfcygpICgoc3RydWN0IHN0bXRfdHJlZV9zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0bXRfdHJlZV9zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfc3RtdF90cmVlX3MobikgKChzdHJ1Y3Qgc3RtdF90cmVlX3MgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzdG10X3RyZWVfcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfc3RtdF90cmVlX3MobikgKChzdHJ1Y3Qgc3RtdF90cmVlX3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0bXRfdHJlZV9zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jX3Nwb3RfYmluZGluZ3MoKSAoKHN0cnVjdCBjX3Nwb3RfYmluZGluZ3MgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfc3BvdF9iaW5kaW5ncykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jX3Nwb3RfYmluZGluZ3MoKSAoKHN0cnVjdCBjX3Nwb3RfYmluZGluZ3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19zcG90X2JpbmRpbmdzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY19zcG90X2JpbmRpbmdzKG4pICgoc3RydWN0IGNfc3BvdF9iaW5kaW5ncyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNfc3BvdF9iaW5kaW5ncyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY19zcG90X2JpbmRpbmdzKG4pICgoc3RydWN0IGNfc3BvdF9iaW5kaW5ncyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY19zcG90X2JpbmRpbmdzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19wYWRfdHlwZV9oYXNoKCkgKChzdHJ1Y3QgcGFkX3R5cGVfaGFzaCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGFkX3R5cGVfaGFzaCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wYWRfdHlwZV9oYXNoKCkgKChzdHJ1Y3QgcGFkX3R5cGVfaGFzaCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwYWRfdHlwZV9oYXNoKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcGFkX3R5cGVfaGFzaChuKSAoKHN0cnVjdCBwYWRfdHlwZV9oYXNoICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGFkX3R5cGVfaGFzaCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcGFkX3R5cGVfaGFzaChuKSAoKHN0cnVjdCBwYWRfdHlwZV9oYXNoICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwYWRfdHlwZV9oYXNoKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19nbmF0X2JpbmRpbmdfbGV2ZWwoKSAoKHN0cnVjdCBnbmF0X2JpbmRpbmdfbGV2ZWwgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGduYXRfYmluZGluZ19sZXZlbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9nbmF0X2JpbmRpbmdfbGV2ZWwoKSAoKHN0cnVjdCBnbmF0X2JpbmRpbmdfbGV2ZWwgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ25hdF9iaW5kaW5nX2xldmVsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZ25hdF9iaW5kaW5nX2xldmVsKG4pICgoc3RydWN0IGduYXRfYmluZGluZ19sZXZlbCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGduYXRfYmluZGluZ19sZXZlbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZ25hdF9iaW5kaW5nX2xldmVsKG4pICgoc3RydWN0IGduYXRfYmluZGluZ19sZXZlbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ25hdF9iaW5kaW5nX2xldmVsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbG9vcF9pbmZvX3ZhX2djXygpICgodmVjPGxvb3BfaW5mbyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGxvb3BfaW5mbyx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xvb3BfaW5mb192YV9nY18oKSAoKHZlYzxsb29wX2luZm8sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGxvb3BfaW5mbyx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfbG9vcF9pbmZvX3ZhX2djXyhuKSAoKHZlYzxsb29wX2luZm8sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bG9vcF9pbmZvLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2xvb3BfaW5mb192YV9nY18obikgKCh2ZWM8bG9vcF9pbmZvLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bG9vcF9pbmZvLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbG9vcF9pbmZvX2QoKSAoKHN0cnVjdCBsb29wX2luZm9fZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9vcF9pbmZvX2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbG9vcF9pbmZvX2QoKSAoKHN0cnVjdCBsb29wX2luZm9fZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsb29wX2luZm9fZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xvb3BfaW5mb19kKG4pICgoc3RydWN0IGxvb3BfaW5mb19kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9vcF9pbmZvX2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xvb3BfaW5mb19kKG4pICgoc3RydWN0IGxvb3BfaW5mb19kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsb29wX2luZm9fZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3JhbmdlX2NoZWNrX2luZm9fdmFfZ2NfKCkgKCh2ZWM8cmFuZ2VfY2hlY2tfaW5mbyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHJhbmdlX2NoZWNrX2luZm8sdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19yYW5nZV9jaGVja19pbmZvX3ZhX2djXygpICgodmVjPHJhbmdlX2NoZWNrX2luZm8sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHJhbmdlX2NoZWNrX2luZm8sdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3JhbmdlX2NoZWNrX2luZm9fdmFfZ2NfKG4pICgodmVjPHJhbmdlX2NoZWNrX2luZm8sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cmFuZ2VfY2hlY2tfaW5mbyx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19yYW5nZV9jaGVja19pbmZvX3ZhX2djXyhuKSAoKHZlYzxyYW5nZV9jaGVja19pbmZvLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cmFuZ2VfY2hlY2tfaW5mbyx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3JhbmdlX2NoZWNrX2luZm9fZCgpICgoc3RydWN0IHJhbmdlX2NoZWNrX2luZm9fZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcmFuZ2VfY2hlY2tfaW5mb19kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3JhbmdlX2NoZWNrX2luZm9fZCgpICgoc3RydWN0IHJhbmdlX2NoZWNrX2luZm9fZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCByYW5nZV9jaGVja19pbmZvX2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19yYW5nZV9jaGVja19pbmZvX2QobikgKChzdHJ1Y3QgcmFuZ2VfY2hlY2tfaW5mb19kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcmFuZ2VfY2hlY2tfaW5mb19kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19yYW5nZV9jaGVja19pbmZvX2QobikgKChzdHJ1Y3QgcmFuZ2VfY2hlY2tfaW5mb19kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCByYW5nZV9jaGVja19pbmZvX2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VsYWJfaW5mbygpICgoc3RydWN0IGVsYWJfaW5mbyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWxhYl9pbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VsYWJfaW5mbygpICgoc3RydWN0IGVsYWJfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlbGFiX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19lbGFiX2luZm8obikgKChzdHJ1Y3QgZWxhYl9pbmZvICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWxhYl9pbmZvKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19lbGFiX2luZm8obikgKChzdHJ1Y3QgZWxhYl9pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlbGFiX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3N0bXRfZ3JvdXAoKSAoKHN0cnVjdCBzdG10X2dyb3VwICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzdG10X2dyb3VwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3N0bXRfZ3JvdXAoKSAoKHN0cnVjdCBzdG10X2dyb3VwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0bXRfZ3JvdXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zdG10X2dyb3VwKG4pICgoc3RydWN0IHN0bXRfZ3JvdXAgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzdG10X2dyb3VwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zdG10X2dyb3VwKG4pICgoc3RydWN0IHN0bXRfZ3JvdXAgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0bXRfZ3JvdXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19wYXJtX2F0dHJfdmFfZ2NfKCkgKCh2ZWM8cGFybV9hdHRyLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cGFybV9hdHRyLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcGFybV9hdHRyX3ZhX2djXygpICgodmVjPHBhcm1fYXR0cix2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cGFybV9hdHRyLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19wYXJtX2F0dHJfdmFfZ2NfKG4pICgodmVjPHBhcm1fYXR0cix2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxwYXJtX2F0dHIsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfcGFybV9hdHRyX3ZhX2djXyhuKSAoKHZlYzxwYXJtX2F0dHIsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxwYXJtX2F0dHIsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19wYXJtX2F0dHJfZCgpICgoc3RydWN0IHBhcm1fYXR0cl9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwYXJtX2F0dHJfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wYXJtX2F0dHJfZCgpICgoc3RydWN0IHBhcm1fYXR0cl9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBhcm1fYXR0cl9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcGFybV9hdHRyX2QobikgKChzdHJ1Y3QgcGFybV9hdHRyX2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwYXJtX2F0dHJfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcGFybV9hdHRyX2QobikgKChzdHJ1Y3QgcGFybV9hdHRyX2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBhcm1fYXR0cl9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaW5saW5lX3N1bW1hcnlfdF92YV9nY18oKSAoKHZlYzxpbmxpbmVfc3VtbWFyeV90LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aW5saW5lX3N1bW1hcnlfdCx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2lubGluZV9zdW1tYXJ5X3RfdmFfZ2NfKCkgKCh2ZWM8aW5saW5lX3N1bW1hcnlfdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aW5saW5lX3N1bW1hcnlfdCx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfaW5saW5lX3N1bW1hcnlfdF92YV9nY18obikgKCh2ZWM8aW5saW5lX3N1bW1hcnlfdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpbmxpbmVfc3VtbWFyeV90LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2lubGluZV9zdW1tYXJ5X3RfdmFfZ2NfKG4pICgodmVjPGlubGluZV9zdW1tYXJ5X3QsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpbmxpbmVfc3VtbWFyeV90LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3NpemVfdGltZV9lbnRyeV92YV9nY18oKSAoKHZlYzxzaXplX3RpbWVfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxzaXplX3RpbWVfZW50cnksdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zaXplX3RpbWVfZW50cnlfdmFfZ2NfKCkgKCh2ZWM8c2l6ZV90aW1lX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxzaXplX3RpbWVfZW50cnksdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3NpemVfdGltZV9lbnRyeV92YV9nY18obikgKCh2ZWM8c2l6ZV90aW1lX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHNpemVfdGltZV9lbnRyeSx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19zaXplX3RpbWVfZW50cnlfdmFfZ2NfKG4pICgodmVjPHNpemVfdGltZV9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHNpemVfdGltZV9lbnRyeSx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NpemVfdGltZV9lbnRyeSgpICgoc3RydWN0IHNpemVfdGltZV9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc2l6ZV90aW1lX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NpemVfdGltZV9lbnRyeSgpICgoc3RydWN0IHNpemVfdGltZV9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzaXplX3RpbWVfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zaXplX3RpbWVfZW50cnkobikgKChzdHJ1Y3Qgc2l6ZV90aW1lX2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc2l6ZV90aW1lX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zaXplX3RpbWVfZW50cnkobikgKChzdHJ1Y3Qgc2l6ZV90aW1lX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzaXplX3RpbWVfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ByZWRpY2F0ZSgpICgoc3RydWN0IHByZWRpY2F0ZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcHJlZGljYXRlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ByZWRpY2F0ZSgpICgoc3RydWN0IHByZWRpY2F0ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwcmVkaWNhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19wcmVkaWNhdGUobikgKChzdHJ1Y3QgcHJlZGljYXRlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcHJlZGljYXRlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19wcmVkaWNhdGUobikgKChzdHJ1Y3QgcHJlZGljYXRlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwcmVkaWNhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb25kaXRpb25fdmFfZ2NfKCkgKCh2ZWM8Y29uZGl0aW9uLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y29uZGl0aW9uLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29uZGl0aW9uX3ZhX2djXygpICgodmVjPGNvbmRpdGlvbix2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y29uZGl0aW9uLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19jb25kaXRpb25fdmFfZ2NfKG4pICgodmVjPGNvbmRpdGlvbix2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjb25kaXRpb24sdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfY29uZGl0aW9uX3ZhX2djXyhuKSAoKHZlYzxjb25kaXRpb24sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjb25kaXRpb24sdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jb25kaXRpb24oKSAoKHN0cnVjdCBjb25kaXRpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbmRpdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb25kaXRpb24oKSAoKHN0cnVjdCBjb25kaXRpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29uZGl0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29uZGl0aW9uKG4pICgoc3RydWN0IGNvbmRpdGlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbmRpdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29uZGl0aW9uKG4pICgoc3RydWN0IGNvbmRpdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29uZGl0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sdG9fdHJlZV9yZWZfdGFibGUoKSAoKHN0cnVjdCBsdG9fdHJlZV9yZWZfdGFibGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGx0b190cmVlX3JlZl90YWJsZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sdG9fdHJlZV9yZWZfdGFibGUoKSAoKHN0cnVjdCBsdG9fdHJlZV9yZWZfdGFibGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbHRvX3RyZWVfcmVmX3RhYmxlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbHRvX3RyZWVfcmVmX3RhYmxlKG4pICgoc3RydWN0IGx0b190cmVlX3JlZl90YWJsZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGx0b190cmVlX3JlZl90YWJsZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbHRvX3RyZWVfcmVmX3RhYmxlKG4pICgoc3RydWN0IGx0b190cmVlX3JlZl90YWJsZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbHRvX3RyZWVfcmVmX3RhYmxlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sdG9faW5fZGVjbF9zdGF0ZSgpICgoc3RydWN0IGx0b19pbl9kZWNsX3N0YXRlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsdG9faW5fZGVjbF9zdGF0ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sdG9faW5fZGVjbF9zdGF0ZSgpICgoc3RydWN0IGx0b19pbl9kZWNsX3N0YXRlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGx0b19pbl9kZWNsX3N0YXRlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbHRvX2luX2RlY2xfc3RhdGUobikgKChzdHJ1Y3QgbHRvX2luX2RlY2xfc3RhdGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsdG9faW5fZGVjbF9zdGF0ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbHRvX2luX2RlY2xfc3RhdGUobikgKChzdHJ1Y3QgbHRvX2luX2RlY2xfc3RhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGx0b19pbl9kZWNsX3N0YXRlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX2VkZ2VfYXJnc190X3ZhX2djXygpICgodmVjPGlwYV9lZGdlX2FyZ3NfdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGlwYV9lZGdlX2FyZ3NfdCx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2lwYV9lZGdlX2FyZ3NfdF92YV9nY18oKSAoKHZlYzxpcGFfZWRnZV9hcmdzX3QsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGlwYV9lZGdlX2FyZ3NfdCx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfaXBhX2VkZ2VfYXJnc190X3ZhX2djXyhuKSAoKHZlYzxpcGFfZWRnZV9hcmdzX3QsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX2VkZ2VfYXJnc190LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2lwYV9lZGdlX2FyZ3NfdF92YV9nY18obikgKCh2ZWM8aXBhX2VkZ2VfYXJnc190LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX2VkZ2VfYXJnc190LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2lwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcF92YV9nY18oKSAoKHZlYzxpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3AsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3BfdmFfZ2NfKCkgKCh2ZWM8aXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3AsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2lwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcF92YV9nY18obikgKCh2ZWM8aXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3BfdmFfZ2NfKG4pICgodmVjPGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfanVtcF9mdW5jX3RfdmFfZ2NfKCkgKCh2ZWM8aXBhX2p1bXBfZnVuY190LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX2p1bXBfZnVuY190LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX2p1bXBfZnVuY190X3ZhX2djXygpICgodmVjPGlwYV9qdW1wX2Z1bmNfdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX2p1bXBfZnVuY190LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19pcGFfanVtcF9mdW5jX3RfdmFfZ2NfKG4pICgodmVjPGlwYV9qdW1wX2Z1bmNfdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfanVtcF9mdW5jX3QsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfaXBhX2p1bXBfZnVuY190X3ZhX2djXyhuKSAoKHZlYzxpcGFfanVtcF9mdW5jX3QsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfanVtcF9mdW5jX3QsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19qdW1wX2Z1bmNfdmFsdWUoKSAoKHVuaW9uIGp1bXBfZnVuY192YWx1ZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBqdW1wX2Z1bmNfdmFsdWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfanVtcF9mdW5jX3ZhbHVlKCkgKCh1bmlvbiBqdW1wX2Z1bmNfdmFsdWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBqdW1wX2Z1bmNfdmFsdWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19qdW1wX2Z1bmNfdmFsdWUobikgKCh1bmlvbiBqdW1wX2Z1bmNfdmFsdWUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGp1bXBfZnVuY192YWx1ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfanVtcF9mdW5jX3ZhbHVlKG4pICgodW5pb24ganVtcF9mdW5jX3ZhbHVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGp1bXBfZnVuY192YWx1ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2lwYV9hZ2dfamZfaXRlbV90X3ZhX2djXygpICgodmVjPGlwYV9hZ2dfamZfaXRlbV90LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX2FnZ19qZl9pdGVtX3QsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfYWdnX2pmX2l0ZW1fdF92YV9nY18oKSAoKHZlYzxpcGFfYWdnX2pmX2l0ZW1fdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX2FnZ19qZl9pdGVtX3QsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2lwYV9hZ2dfamZfaXRlbV90X3ZhX2djXyhuKSAoKHZlYzxpcGFfYWdnX2pmX2l0ZW1fdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfYWdnX2pmX2l0ZW1fdCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19pcGFfYWdnX2pmX2l0ZW1fdF92YV9nY18obikgKCh2ZWM8aXBhX2FnZ19qZl9pdGVtX3QsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfYWdnX2pmX2l0ZW1fdCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lwYV9hbmNlc3Rvcl9qZl9kYXRhKCkgKChzdHJ1Y3QgaXBhX2FuY2VzdG9yX2pmX2RhdGEgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlwYV9hbmNlc3Rvcl9qZl9kYXRhKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lwYV9hbmNlc3Rvcl9qZl9kYXRhKCkgKChzdHJ1Y3QgaXBhX2FuY2VzdG9yX2pmX2RhdGEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2FuY2VzdG9yX2pmX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfYW5jZXN0b3JfamZfZGF0YShuKSAoKHN0cnVjdCBpcGFfYW5jZXN0b3JfamZfZGF0YSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlwYV9hbmNlc3Rvcl9qZl9kYXRhKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfYW5jZXN0b3JfamZfZGF0YShuKSAoKHN0cnVjdCBpcGFfYW5jZXN0b3JfamZfZGF0YSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2FuY2VzdG9yX2pmX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lwYV9wYXNzX3Rocm91Z2hfZGF0YSgpICgoc3RydWN0IGlwYV9wYXNzX3Rocm91Z2hfZGF0YSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX3Bhc3NfdGhyb3VnaF9kYXRhKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lwYV9wYXNzX3Rocm91Z2hfZGF0YSgpICgoc3RydWN0IGlwYV9wYXNzX3Rocm91Z2hfZGF0YSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfcGFzc190aHJvdWdoX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfcGFzc190aHJvdWdoX2RhdGEobikgKChzdHJ1Y3QgaXBhX3Bhc3NfdGhyb3VnaF9kYXRhICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX3Bhc3NfdGhyb3VnaF9kYXRhKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfcGFzc190aHJvdWdoX2RhdGEobikgKChzdHJ1Y3QgaXBhX3Bhc3NfdGhyb3VnaF9kYXRhICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfcGFzc190aHJvdWdoX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lwYV9rbm93bl90eXBlX2RhdGEoKSAoKHN0cnVjdCBpcGFfa25vd25fdHlwZV9kYXRhICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfa25vd25fdHlwZV9kYXRhKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lwYV9rbm93bl90eXBlX2RhdGEoKSAoKHN0cnVjdCBpcGFfa25vd25fdHlwZV9kYXRhICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlwYV9rbm93bl90eXBlX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfa25vd25fdHlwZV9kYXRhKG4pICgoc3RydWN0IGlwYV9rbm93bl90eXBlX2RhdGEgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfa25vd25fdHlwZV9kYXRhKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfa25vd25fdHlwZV9kYXRhKG4pICgoc3RydWN0IGlwYV9rbm93bl90eXBlX2RhdGEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlwYV9rbm93bl90eXBlX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NzYV9vcGVyYW5kX21lbW9yeV9kKFNJWkUpICgoc3RydWN0IHNzYV9vcGVyYW5kX21lbW9yeV9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChTSVpFIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfc3NhX29wZXJhbmRfbWVtb3J5X2QoU0laRSkgKChzdHJ1Y3Qgc3NhX29wZXJhbmRfbWVtb3J5X2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoU0laRSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfc3NhX29wZXJhbmRfbWVtb3J5X2QoU0laRSwgbikgKChzdHJ1Y3Qgc3NhX29wZXJhbmRfbWVtb3J5X2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChTSVpFLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3NzYV9vcGVyYW5kX21lbW9yeV9kKFNJWkUsIG4pICgoc3RydWN0IHNzYV9vcGVyYW5kX21lbW9yeV9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChTSVpFLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NjZXZfaW5mb19zdHIoKSAoKHN0cnVjdCBzY2V2X2luZm9fc3RyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzY2V2X2luZm9fc3RyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NjZXZfaW5mb19zdHIoKSAoKHN0cnVjdCBzY2V2X2luZm9fc3RyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNjZXZfaW5mb19zdHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zY2V2X2luZm9fc3RyKG4pICgoc3RydWN0IHNjZXZfaW5mb19zdHIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzY2V2X2luZm9fc3RyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zY2V2X2luZm9fc3RyKG4pICgoc3RydWN0IHNjZXZfaW5mb19zdHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNjZXZfaW5mb19zdHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19tZW1fYWRkcl90ZW1wbGF0ZV92YV9nY18oKSAoKHZlYzxtZW1fYWRkcl90ZW1wbGF0ZSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPG1lbV9hZGRyX3RlbXBsYXRlLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbWVtX2FkZHJfdGVtcGxhdGVfdmFfZ2NfKCkgKCh2ZWM8bWVtX2FkZHJfdGVtcGxhdGUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPG1lbV9hZGRyX3RlbXBsYXRlLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19tZW1fYWRkcl90ZW1wbGF0ZV92YV9nY18obikgKCh2ZWM8bWVtX2FkZHJfdGVtcGxhdGUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bWVtX2FkZHJfdGVtcGxhdGUsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfbWVtX2FkZHJfdGVtcGxhdGVfdmFfZ2NfKG4pICgodmVjPG1lbV9hZGRyX3RlbXBsYXRlLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bWVtX2FkZHJfdGVtcGxhdGUsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19tZW1fYWRkcl90ZW1wbGF0ZSgpICgoc3RydWN0IG1lbV9hZGRyX3RlbXBsYXRlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtZW1fYWRkcl90ZW1wbGF0ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9tZW1fYWRkcl90ZW1wbGF0ZSgpICgoc3RydWN0IG1lbV9hZGRyX3RlbXBsYXRlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1lbV9hZGRyX3RlbXBsYXRlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbWVtX2FkZHJfdGVtcGxhdGUobikgKChzdHJ1Y3QgbWVtX2FkZHJfdGVtcGxhdGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtZW1fYWRkcl90ZW1wbGF0ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbWVtX2FkZHJfdGVtcGxhdGUobikgKChzdHJ1Y3QgbWVtX2FkZHJfdGVtcGxhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1lbV9hZGRyX3RlbXBsYXRlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19zc2Ffb3BlcmFuZHMoKSAoKHN0cnVjdCBzc2Ffb3BlcmFuZHMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNzYV9vcGVyYW5kcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9zc2Ffb3BlcmFuZHMoKSAoKHN0cnVjdCBzc2Ffb3BlcmFuZHMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3NhX29wZXJhbmRzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfc3NhX29wZXJhbmRzKG4pICgoc3RydWN0IHNzYV9vcGVyYW5kcyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNzYV9vcGVyYW5kcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfc3NhX29wZXJhbmRzKG4pICgoc3RydWN0IHNzYV9vcGVyYW5kcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3NhX29wZXJhbmRzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZ2ltcGxlX3ZhX2djXygpICgodmVjPGdpbXBsZSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGdpbXBsZSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV92YV9nY18oKSAoKHZlYzxnaW1wbGUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGdpbXBsZSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfZ2ltcGxlX3ZhX2djXyhuKSAoKHZlYzxnaW1wbGUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Z2ltcGxlLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2dpbXBsZV92YV9nY18obikgKCh2ZWM8Z2ltcGxlLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Z2ltcGxlLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdG1fcmVzdGFydF9ub2RlKCkgKChzdHJ1Y3QgdG1fcmVzdGFydF9ub2RlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0bV9yZXN0YXJ0X25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdG1fcmVzdGFydF9ub2RlKCkgKChzdHJ1Y3QgdG1fcmVzdGFydF9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRtX3Jlc3RhcnRfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RtX3Jlc3RhcnRfbm9kZShuKSAoKHN0cnVjdCB0bV9yZXN0YXJ0X25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0bV9yZXN0YXJ0X25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RtX3Jlc3RhcnRfbm9kZShuKSAoKHN0cnVjdCB0bV9yZXN0YXJ0X25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRtX3Jlc3RhcnRfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF90cmFuc2FjdGlvbigpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfdHJhbnNhY3Rpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfdHJhbnNhY3Rpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF90cmFuc2FjdGlvbigpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfdHJhbnNhY3Rpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF90cmFuc2FjdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfdHJhbnNhY3Rpb24obikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF90cmFuc2FjdGlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfdHJhbnNhY3Rpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfdHJhbnNhY3Rpb24obikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF90cmFuc2FjdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF90cmFuc2FjdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX3N0b3JlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX3N0b3JlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfc3RvcmUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX3N0b3JlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX3N0b3JlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19zdG9yZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19zdG9yZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfc3RvcmUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfc3RvcmUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19zdG9yZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfc3RvcmUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19zdG9yZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX2xvYWQoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfbG9hZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX2xvYWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX2xvYWQoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfbG9hZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfbG9hZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19sb2FkKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19sb2FkICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfYXRvbWljX2xvYWQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19sb2FkKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2F0b21pY19sb2FkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9hdG9taWNfbG9hZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2luZ2xlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2luZ2xlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zaW5nbGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2luZ2xlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2luZ2xlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zaW5nbGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zaW5nbGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zaW5nbGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NpbmdsZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfY29udGludWUoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jb250aW51ZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfY29udGludWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfY29udGludWUoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jb250aW51ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jb250aW51ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2NvbnRpbnVlKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2NvbnRpbnVlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfY29udGludWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2NvbnRpbnVlKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2NvbnRpbnVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jb250aW51ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2VjdGlvbnMoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zZWN0aW9ucyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2VjdGlvbnMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2VjdGlvbnMoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zZWN0aW9ucyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zZWN0aW9ucykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX3NlY3Rpb25zKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NlY3Rpb25zICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2VjdGlvbnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX3NlY3Rpb25zKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3NlY3Rpb25zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9zZWN0aW9ucyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzaygpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2sgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzaygpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2sgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzaykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2sobikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzayAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2spLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX3Rhc2sobikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfdGFzayksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfcGFyYWxsZWwoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9wYXJhbGxlbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfcGFyYWxsZWwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfcGFyYWxsZWwoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9wYXJhbGxlbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9wYXJhbGxlbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX3BhcmFsbGVsKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3BhcmFsbGVsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfcGFyYWxsZWwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX3BhcmFsbGVsKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX3BhcmFsbGVsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9wYXJhbGxlbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfZm9yKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfZm9yICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9mb3IpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfZm9yKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfZm9yICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2ZvcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2ZvcihuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9mb3IgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9mb3IpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2ZvcihuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9mb3IgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2ZvciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX29tcF9mb3JfaXRlcigpICgoc3RydWN0IGdpbXBsZV9vbXBfZm9yX2l0ZXIgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9vbXBfZm9yX2l0ZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX29tcF9mb3JfaXRlcigpICgoc3RydWN0IGdpbXBsZV9vbXBfZm9yX2l0ZXIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX29tcF9mb3JfaXRlcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9vbXBfZm9yX2l0ZXIobikgKChzdHJ1Y3QgZ2ltcGxlX29tcF9mb3JfaXRlciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9vbXBfZm9yX2l0ZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9vbXBfZm9yX2l0ZXIobikgKChzdHJ1Y3QgZ2ltcGxlX29tcF9mb3JfaXRlciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX29tcF9mb3JfaXRlciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXBfY3JpdGljYWwoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jcml0aWNhbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfY3JpdGljYWwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXBfY3JpdGljYWwoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jcml0aWNhbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jcml0aWNhbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2NyaXRpY2FsKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2NyaXRpY2FsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXBfY3JpdGljYWwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wX2NyaXRpY2FsKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wX2NyaXRpY2FsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcF9jcml0aWNhbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9hc20oKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2FzbSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9hc20pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9hc20oKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2FzbSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2FzbSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfYXNtKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYXNtICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9hc20pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfYXNtKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYXNtICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2FzbSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF93Y2UoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3djZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93Y2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF93Y2UoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3djZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3djZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2NlKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2NlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93Y2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2NlKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2NlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3djZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF90cnkoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3RyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF90cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF90cnkoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3RyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3RyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfdHJ5KG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfdHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF90cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfdHJ5KG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfdHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3RyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9laF9jdHJsKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9jdHJsICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2N0cmwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9laF9jdHJsKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9jdHJsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfY3RybCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfZWhfY3RybChuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2N0cmwgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2N0cmwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfZWhfY3RybChuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2N0cmwgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfY3RybCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9waGkoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3BoaSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9waGkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9waGkoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3BoaSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3BoaSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfcGhpKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfcGhpICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9waGkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfcGhpKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfcGhpICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3BoaSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9laF9tbnQoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX21udCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9tbnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9laF9tbnQoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX21udCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX21udCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfZWhfbW50KG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfbW50ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9tbnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfZWhfbW50KG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfbW50ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX21udCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9laF9lbHNlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9lbHNlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2Vsc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9laF9lbHNlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9lbHNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfZWxzZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfZWhfZWxzZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2Vsc2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2Vsc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfZWhfZWxzZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2Vsc2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfZWxzZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2ZpbHRlciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2ZpbHRlciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2ZpbHRlcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfZWhfZmlsdGVyKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfZmlsdGVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9laF9maWx0ZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfZWhfZmlsdGVyKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfZWhfZmlsdGVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2VoX2ZpbHRlciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9jYXRjaCgpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfY2F0Y2ggKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfY2F0Y2gpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9jYXRjaCgpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfY2F0Y2ggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9jYXRjaCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfY2F0Y2gobikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9jYXRjaCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfY2F0Y2gpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfY2F0Y2gobikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9jYXRjaCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9jYXRjaCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9iaW5kKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9iaW5kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2JpbmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9iaW5kKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9iaW5kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmluZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfYmluZChuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2JpbmQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2JpbmQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfYmluZChuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2JpbmQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmluZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9vbXAoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9vbXAoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9vbXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfb21wKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfb21wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X29tcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9jYWxsKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9jYWxsICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2NhbGwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9jYWxsKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9jYWxsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfY2FsbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfY2FsbChuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2NhbGwgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2NhbGwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfY2FsbChuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2NhbGwgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfY2FsbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcHRfc29sdXRpb24oKSAoKHN0cnVjdCBwdF9zb2x1dGlvbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcHRfc29sdXRpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcHRfc29sdXRpb24oKSAoKHN0cnVjdCBwdF9zb2x1dGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwdF9zb2x1dGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3B0X3NvbHV0aW9uKG4pICgoc3RydWN0IHB0X3NvbHV0aW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcHRfc29sdXRpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3B0X3NvbHV0aW9uKG4pICgoc3RydWN0IHB0X3NvbHV0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwdF9zb2x1dGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHMoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfbWVtb3J5X29wcyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHMoKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfbWVtb3J5X29wcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfbWVtb3J5X29wcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzKG4pICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfbWVtb3J5X29wcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSgpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSgpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UobikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2l0aF9tZW1vcnlfb3BzX2Jhc2UobikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX21lbW9yeV9vcHNfYmFzZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcygpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcygpICgoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMobikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHMobikgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wc19iYXNlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wc19iYXNlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfb3BzX2Jhc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wc19iYXNlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF93aXRoX29wc19iYXNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHNfYmFzZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHNfYmFzZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfb3BzX2Jhc2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfb3BzX2Jhc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHNfYmFzZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X3dpdGhfb3BzX2Jhc2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfd2l0aF9vcHNfYmFzZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX3N0YXRlbWVudF9iYXNlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9iYXNlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3N0YXRlbWVudF9iYXNlKCkgKChzdHJ1Y3QgZ2ltcGxlX3N0YXRlbWVudF9iYXNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfYmFzZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9zdGF0ZW1lbnRfYmFzZShuKSAoKHN0cnVjdCBnaW1wbGVfc3RhdGVtZW50X2Jhc2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9zdGF0ZW1lbnRfYmFzZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdHlwZV9oYXNoKCkgKChzdHJ1Y3QgdHlwZV9oYXNoICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0eXBlX2hhc2gpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdHlwZV9oYXNoKCkgKChzdHJ1Y3QgdHlwZV9oYXNoICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHR5cGVfaGFzaCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3R5cGVfaGFzaChuKSAoKHN0cnVjdCB0eXBlX2hhc2ggKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0eXBlX2hhc2gpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3R5cGVfaGFzaChuKSAoKHN0cnVjdCB0eXBlX2hhc2ggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHR5cGVfaGFzaCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2Nfc3RyaW5nX3Bvb2xfZGF0YSgpICgoc3RydWN0IHN0cmluZ19wb29sX2RhdGEgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0cmluZ19wb29sX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfc3RyaW5nX3Bvb2xfZGF0YSgpICgoc3RydWN0IHN0cmluZ19wb29sX2RhdGEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3RyaW5nX3Bvb2xfZGF0YSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3N0cmluZ19wb29sX2RhdGEobikgKChzdHJ1Y3Qgc3RyaW5nX3Bvb2xfZGF0YSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0cmluZ19wb29sX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3N0cmluZ19wb29sX2RhdGEobikgKChzdHJ1Y3Qgc3RyaW5nX3Bvb2xfZGF0YSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3RyaW5nX3Bvb2xfZGF0YSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaW5pdGlhbF92YWx1ZV9wYWlyKCkgKChzdHJ1Y3QgaW5pdGlhbF92YWx1ZV9wYWlyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbml0aWFsX3ZhbHVlX3BhaXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfaW5pdGlhbF92YWx1ZV9wYWlyKCkgKChzdHJ1Y3QgaW5pdGlhbF92YWx1ZV9wYWlyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGluaXRpYWxfdmFsdWVfcGFpcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2luaXRpYWxfdmFsdWVfcGFpcihuKSAoKHN0cnVjdCBpbml0aWFsX3ZhbHVlX3BhaXIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbml0aWFsX3ZhbHVlX3BhaXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2luaXRpYWxfdmFsdWVfcGFpcihuKSAoKHN0cnVjdCBpbml0aWFsX3ZhbHVlX3BhaXIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGluaXRpYWxfdmFsdWVfcGFpciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdGVtcF9zbG90X2FkZHJlc3NfZW50cnkoKSAoKHN0cnVjdCB0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGVtcF9zbG90X2FkZHJlc3NfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdGVtcF9zbG90X2FkZHJlc3NfZW50cnkoKSAoKHN0cnVjdCB0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RlbXBfc2xvdF9hZGRyZXNzX2VudHJ5KG4pICgoc3RydWN0IHRlbXBfc2xvdF9hZGRyZXNzX2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGVtcF9zbG90X2FkZHJlc3NfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RlbXBfc2xvdF9hZGRyZXNzX2VudHJ5KG4pICgoc3RydWN0IHRlbXBfc2xvdF9hZGRyZXNzX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZWhfc3RhdHVzX3UoKSAoKHVuaW9uIGVoX3N0YXR1c191ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGVoX3N0YXR1c191KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX3N0YXR1c191KCkgKCh1bmlvbiBlaF9zdGF0dXNfdSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGVoX3N0YXR1c191KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZWhfc3RhdHVzX3UobikgKCh1bmlvbiBlaF9zdGF0dXNfdSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZWhfc3RhdHVzX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2VoX3N0YXR1c191KG4pICgodW5pb24gZWhfc3RhdHVzX3UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZWhfc3RhdHVzX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3Rocm93X3N0bXRfbm9kZSgpICgoc3RydWN0IHRocm93X3N0bXRfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGhyb3dfc3RtdF9ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3Rocm93X3N0bXRfbm9kZSgpICgoc3RydWN0IHRocm93X3N0bXRfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0aHJvd19zdG10X25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190aHJvd19zdG10X25vZGUobikgKChzdHJ1Y3QgdGhyb3dfc3RtdF9ub2RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGhyb3dfc3RtdF9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190aHJvd19zdG10X25vZGUobikgKChzdHJ1Y3QgdGhyb3dfc3RtdF9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0aHJvd19zdG10X25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9sYW5kaW5nX3BhZF92YV9nY18oKSAoKHZlYzxlaF9sYW5kaW5nX3BhZCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGVoX2xhbmRpbmdfcGFkLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZWhfbGFuZGluZ19wYWRfdmFfZ2NfKCkgKCh2ZWM8ZWhfbGFuZGluZ19wYWQsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGVoX2xhbmRpbmdfcGFkLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19laF9sYW5kaW5nX3BhZF92YV9nY18obikgKCh2ZWM8ZWhfbGFuZGluZ19wYWQsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZWhfbGFuZGluZ19wYWQsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfZWhfbGFuZGluZ19wYWRfdmFfZ2NfKG4pICgodmVjPGVoX2xhbmRpbmdfcGFkLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZWhfbGFuZGluZ19wYWQsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZWhfcmVnaW9uX3ZhX2djXygpICgodmVjPGVoX3JlZ2lvbix2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGVoX3JlZ2lvbix2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2VoX3JlZ2lvbl92YV9nY18oKSAoKHZlYzxlaF9yZWdpb24sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGVoX3JlZ2lvbix2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfZWhfcmVnaW9uX3ZhX2djXyhuKSAoKHZlYzxlaF9yZWdpb24sdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZWhfcmVnaW9uLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2VoX3JlZ2lvbl92YV9nY18obikgKCh2ZWM8ZWhfcmVnaW9uLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZWhfcmVnaW9uLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZWhfcmVnaW9uX3UoKSAoKHVuaW9uIGVoX3JlZ2lvbl91ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGVoX3JlZ2lvbl91KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX3JlZ2lvbl91KCkgKCh1bmlvbiBlaF9yZWdpb25fdSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGVoX3JlZ2lvbl91KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZWhfcmVnaW9uX3UobikgKCh1bmlvbiBlaF9yZWdpb25fdSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZWhfcmVnaW9uX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2VoX3JlZ2lvbl91KG4pICgodW5pb24gZWhfcmVnaW9uX3UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZWhfcmVnaW9uX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VoX3JlZ2lvbl91X211c3Rfbm90X3Rocm93KCkgKChzdHJ1Y3QgZWhfcmVnaW9uX3VfbXVzdF9ub3RfdGhyb3cgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX3JlZ2lvbl91X211c3Rfbm90X3Rocm93KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX3JlZ2lvbl91X211c3Rfbm90X3Rocm93KCkgKChzdHJ1Y3QgZWhfcmVnaW9uX3VfbXVzdF9ub3RfdGhyb3cgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWhfcmVnaW9uX3VfbXVzdF9ub3RfdGhyb3cpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9yZWdpb25fdV9tdXN0X25vdF90aHJvdyhuKSAoKHN0cnVjdCBlaF9yZWdpb25fdV9tdXN0X25vdF90aHJvdyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX3JlZ2lvbl91X211c3Rfbm90X3Rocm93KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19laF9yZWdpb25fdV9tdXN0X25vdF90aHJvdyhuKSAoKHN0cnVjdCBlaF9yZWdpb25fdV9tdXN0X25vdF90aHJvdyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWhfcmVnaW9uX3VfbXVzdF9ub3RfdGhyb3cpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VoX3JlZ2lvbl91X2FsbG93ZWQoKSAoKHN0cnVjdCBlaF9yZWdpb25fdV9hbGxvd2VkICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9yZWdpb25fdV9hbGxvd2VkKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX3JlZ2lvbl91X2FsbG93ZWQoKSAoKHN0cnVjdCBlaF9yZWdpb25fdV9hbGxvd2VkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX3JlZ2lvbl91X2FsbG93ZWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9yZWdpb25fdV9hbGxvd2VkKG4pICgoc3RydWN0IGVoX3JlZ2lvbl91X2FsbG93ZWQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9yZWdpb25fdV9hbGxvd2VkKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19laF9yZWdpb25fdV9hbGxvd2VkKG4pICgoc3RydWN0IGVoX3JlZ2lvbl91X2FsbG93ZWQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX3JlZ2lvbl91X2FsbG93ZWQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VoX3JlZ2lvbl91X3RyeSgpICgoc3RydWN0IGVoX3JlZ2lvbl91X3RyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWhfcmVnaW9uX3VfdHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX3JlZ2lvbl91X3RyeSgpICgoc3RydWN0IGVoX3JlZ2lvbl91X3RyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9yZWdpb25fdV90cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9yZWdpb25fdV90cnkobikgKChzdHJ1Y3QgZWhfcmVnaW9uX3VfdHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWhfcmVnaW9uX3VfdHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19laF9yZWdpb25fdV90cnkobikgKChzdHJ1Y3QgZWhfcmVnaW9uX3VfdHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9yZWdpb25fdV90cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VoX2NhdGNoX2QoKSAoKHN0cnVjdCBlaF9jYXRjaF9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9jYXRjaF9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX2NhdGNoX2QoKSAoKHN0cnVjdCBlaF9jYXRjaF9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX2NhdGNoX2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9jYXRjaF9kKG4pICgoc3RydWN0IGVoX2NhdGNoX2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9jYXRjaF9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19laF9jYXRjaF9kKG4pICgoc3RydWN0IGVoX2NhdGNoX2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX2NhdGNoX2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VoX2xhbmRpbmdfcGFkX2QoKSAoKHN0cnVjdCBlaF9sYW5kaW5nX3BhZF9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9sYW5kaW5nX3BhZF9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX2xhbmRpbmdfcGFkX2QoKSAoKHN0cnVjdCBlaF9sYW5kaW5nX3BhZF9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX2xhbmRpbmdfcGFkX2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9sYW5kaW5nX3BhZF9kKG4pICgoc3RydWN0IGVoX2xhbmRpbmdfcGFkX2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9sYW5kaW5nX3BhZF9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19laF9sYW5kaW5nX3BhZF9kKG4pICgoc3RydWN0IGVoX2xhbmRpbmdfcGFkX2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX2xhbmRpbmdfcGFkX2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VoX3JlZ2lvbl9kKCkgKChzdHJ1Y3QgZWhfcmVnaW9uX2QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX3JlZ2lvbl9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX3JlZ2lvbl9kKCkgKChzdHJ1Y3QgZWhfcmVnaW9uX2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWhfcmVnaW9uX2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9yZWdpb25fZChuKSAoKHN0cnVjdCBlaF9yZWdpb25fZCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVoX3JlZ2lvbl9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19laF9yZWdpb25fZChuKSAoKHN0cnVjdCBlaF9yZWdpb25fZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWhfcmVnaW9uX2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kaWVfYXJnX2VudHJ5X3ZhX2djXygpICgodmVjPGRpZV9hcmdfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkaWVfYXJnX2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZGllX2FyZ19lbnRyeV92YV9nY18oKSAoKHZlYzxkaWVfYXJnX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkaWVfYXJnX2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19kaWVfYXJnX2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxkaWVfYXJnX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGRpZV9hcmdfZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfZGllX2FyZ19lbnRyeV92YV9nY18obikgKCh2ZWM8ZGllX2FyZ19lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGRpZV9hcmdfZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbWFjaW5mb19lbnRyeV92YV9nY18oKSAoKHZlYzxtYWNpbmZvX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bWFjaW5mb19lbnRyeSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX21hY2luZm9fZW50cnlfdmFfZ2NfKCkgKCh2ZWM8bWFjaW5mb19lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8bWFjaW5mb19lbnRyeSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfbWFjaW5mb19lbnRyeV92YV9nY18obikgKCh2ZWM8bWFjaW5mb19lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxtYWNpbmZvX2VudHJ5LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX21hY2luZm9fZW50cnlfdmFfZ2NfKG4pICgodmVjPG1hY2luZm9fZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxtYWNpbmZvX2VudHJ5LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3B1Ym5hbWVfZW50cnlfdmFfZ2NfKCkgKCh2ZWM8cHVibmFtZV9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHB1Ym5hbWVfZW50cnksdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19wdWJuYW1lX2VudHJ5X3ZhX2djXygpICgodmVjPHB1Ym5hbWVfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHB1Ym5hbWVfZW50cnksdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3B1Ym5hbWVfZW50cnlfdmFfZ2NfKG4pICgodmVjPHB1Ym5hbWVfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cHVibmFtZV9lbnRyeSx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19wdWJuYW1lX2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxwdWJuYW1lX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8cHVibmFtZV9lbnRyeSx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19saW5lX2luZm9fdGFibGVfcF92YV9nY18oKSAoKHZlYzxkd19saW5lX2luZm9fdGFibGVfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGR3X2xpbmVfaW5mb190YWJsZV9wLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfbGluZV9pbmZvX3RhYmxlX3BfdmFfZ2NfKCkgKCh2ZWM8ZHdfbGluZV9pbmZvX3RhYmxlX3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGR3X2xpbmVfaW5mb190YWJsZV9wLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19kd19saW5lX2luZm9fdGFibGVfcF92YV9nY18obikgKCh2ZWM8ZHdfbGluZV9pbmZvX3RhYmxlX3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZHdfbGluZV9pbmZvX3RhYmxlX3AsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfZHdfbGluZV9pbmZvX3RhYmxlX3BfdmFfZ2NfKG4pICgodmVjPGR3X2xpbmVfaW5mb190YWJsZV9wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZHdfbGluZV9pbmZvX3RhYmxlX3AsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jYWNoZWRfZHdfbG9jX2xpc3RfZGVmKCkgKChzdHJ1Y3QgY2FjaGVkX2R3X2xvY19saXN0X2RlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2FjaGVkX2R3X2xvY19saXN0X2RlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jYWNoZWRfZHdfbG9jX2xpc3RfZGVmKCkgKChzdHJ1Y3QgY2FjaGVkX2R3X2xvY19saXN0X2RlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjYWNoZWRfZHdfbG9jX2xpc3RfZGVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY2FjaGVkX2R3X2xvY19saXN0X2RlZihuKSAoKHN0cnVjdCBjYWNoZWRfZHdfbG9jX2xpc3RfZGVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2FjaGVkX2R3X2xvY19saXN0X2RlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY2FjaGVkX2R3X2xvY19saXN0X2RlZihuKSAoKHN0cnVjdCBjYWNoZWRfZHdfbG9jX2xpc3RfZGVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjYWNoZWRfZHdfbG9jX2xpc3RfZGVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jYWxsX2FyZ19sb2Nfbm9kZSgpICgoc3RydWN0IGNhbGxfYXJnX2xvY19ub2RlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjYWxsX2FyZ19sb2Nfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jYWxsX2FyZ19sb2Nfbm9kZSgpICgoc3RydWN0IGNhbGxfYXJnX2xvY19ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNhbGxfYXJnX2xvY19ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY2FsbF9hcmdfbG9jX25vZGUobikgKChzdHJ1Y3QgY2FsbF9hcmdfbG9jX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjYWxsX2FyZ19sb2Nfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY2FsbF9hcmdfbG9jX25vZGUobikgKChzdHJ1Y3QgY2FsbF9hcmdfbG9jX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNhbGxfYXJnX2xvY19ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192YXJfbG9jX2xpc3RfZGVmKCkgKChzdHJ1Y3QgdmFyX2xvY19saXN0X2RlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdmFyX2xvY19saXN0X2RlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92YXJfbG9jX2xpc3RfZGVmKCkgKChzdHJ1Y3QgdmFyX2xvY19saXN0X2RlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB2YXJfbG9jX2xpc3RfZGVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmFyX2xvY19saXN0X2RlZihuKSAoKHN0cnVjdCB2YXJfbG9jX2xpc3RfZGVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdmFyX2xvY19saXN0X2RlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmFyX2xvY19saXN0X2RlZihuKSAoKHN0cnVjdCB2YXJfbG9jX2xpc3RfZGVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB2YXJfbG9jX2xpc3RfZGVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192YXJfbG9jX25vZGUoKSAoKHN0cnVjdCB2YXJfbG9jX25vZGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHZhcl9sb2Nfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92YXJfbG9jX25vZGUoKSAoKHN0cnVjdCB2YXJfbG9jX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdmFyX2xvY19ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmFyX2xvY19ub2RlKG4pICgoc3RydWN0IHZhcl9sb2Nfbm9kZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHZhcl9sb2Nfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmFyX2xvY19ub2RlKG4pICgoc3RydWN0IHZhcl9sb2Nfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdmFyX2xvY19ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kaWVfYXJnX2VudHJ5X3N0cnVjdCgpICgoc3RydWN0IGRpZV9hcmdfZW50cnlfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkaWVfYXJnX2VudHJ5X3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kaWVfYXJnX2VudHJ5X3N0cnVjdCgpICgoc3RydWN0IGRpZV9hcmdfZW50cnlfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRpZV9hcmdfZW50cnlfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZGllX2FyZ19lbnRyeV9zdHJ1Y3QobikgKChzdHJ1Y3QgZGllX2FyZ19lbnRyeV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkaWVfYXJnX2VudHJ5X3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZGllX2FyZ19lbnRyeV9zdHJ1Y3QobikgKChzdHJ1Y3QgZGllX2FyZ19lbnRyeV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRpZV9hcmdfZW50cnlfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19saW1ib19kaWVfc3RydWN0KCkgKChzdHJ1Y3QgbGltYm9fZGllX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGltYm9fZGllX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9saW1ib19kaWVfc3RydWN0KCkgKChzdHJ1Y3QgbGltYm9fZGllX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaW1ib19kaWVfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGltYm9fZGllX3N0cnVjdChuKSAoKHN0cnVjdCBsaW1ib19kaWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGltYm9fZGllX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGltYm9fZGllX3N0cnVjdChuKSAoKHN0cnVjdCBsaW1ib19kaWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaW1ib19kaWVfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19tYWNpbmZvX3N0cnVjdCgpICgoc3RydWN0IG1hY2luZm9fc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtYWNpbmZvX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9tYWNpbmZvX3N0cnVjdCgpICgoc3RydWN0IG1hY2luZm9fc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1hY2luZm9fc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbWFjaW5mb19zdHJ1Y3QobikgKChzdHJ1Y3QgbWFjaW5mb19zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtYWNpbmZvX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbWFjaW5mb19zdHJ1Y3QobikgKChzdHJ1Y3QgbWFjaW5mb19zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1hY2luZm9fc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfYXR0cl9ub2RlX3ZhX2djXygpICgodmVjPGR3X2F0dHJfbm9kZSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGR3X2F0dHJfbm9kZSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X2F0dHJfbm9kZV92YV9nY18oKSAoKHZlYzxkd19hdHRyX25vZGUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGR3X2F0dHJfbm9kZSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfZHdfYXR0cl9ub2RlX3ZhX2djXyhuKSAoKHZlYzxkd19hdHRyX25vZGUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZHdfYXR0cl9ub2RlLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2R3X2F0dHJfbm9kZV92YV9nY18obikgKCh2ZWM8ZHdfYXR0cl9ub2RlLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZHdfYXR0cl9ub2RlLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZGllX3N5bWJvbF9vcl90eXBlX25vZGUoKSAoKHVuaW9uIGRpZV9zeW1ib2xfb3JfdHlwZV9ub2RlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGRpZV9zeW1ib2xfb3JfdHlwZV9ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2RpZV9zeW1ib2xfb3JfdHlwZV9ub2RlKCkgKCh1bmlvbiBkaWVfc3ltYm9sX29yX3R5cGVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGRpZV9zeW1ib2xfb3JfdHlwZV9ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZGllX3N5bWJvbF9vcl90eXBlX25vZGUobikgKCh1bmlvbiBkaWVfc3ltYm9sX29yX3R5cGVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZGllX3N5bWJvbF9vcl90eXBlX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2RpZV9zeW1ib2xfb3JfdHlwZV9ub2RlKG4pICgodW5pb24gZGllX3N5bWJvbF9vcl90eXBlX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZGllX3N5bWJvbF9vcl90eXBlX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2R3X2xpbmVfaW5mb190YWJsZV9zdHJ1Y3QoKSAoKHN0cnVjdCBkd19saW5lX2luZm9fdGFibGVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19saW5lX2luZm9fdGFibGVfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X2xpbmVfaW5mb190YWJsZV9zdHJ1Y3QoKSAoKHN0cnVjdCBkd19saW5lX2luZm9fdGFibGVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X2xpbmVfaW5mb190YWJsZV9zdHJ1Y3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19saW5lX2luZm9fdGFibGVfc3RydWN0KG4pICgoc3RydWN0IGR3X2xpbmVfaW5mb190YWJsZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19saW5lX2luZm9fdGFibGVfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd19saW5lX2luZm9fdGFibGVfc3RydWN0KG4pICgoc3RydWN0IGR3X2xpbmVfaW5mb190YWJsZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X2xpbmVfaW5mb190YWJsZV9zdHJ1Y3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19saW5lX2luZm9fZW50cnlfdmFfZ2NfKCkgKCh2ZWM8ZHdfbGluZV9pbmZvX2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZHdfbGluZV9pbmZvX2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfbGluZV9pbmZvX2VudHJ5X3ZhX2djXygpICgodmVjPGR3X2xpbmVfaW5mb19lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZHdfbGluZV9pbmZvX2VudHJ5LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19kd19saW5lX2luZm9fZW50cnlfdmFfZ2NfKG4pICgodmVjPGR3X2xpbmVfaW5mb19lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkd19saW5lX2luZm9fZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfZHdfbGluZV9pbmZvX2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxkd19saW5lX2luZm9fZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkd19saW5lX2luZm9fZW50cnksdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jb21kYXRfdHlwZV9zdHJ1Y3QoKSAoKHN0cnVjdCBjb21kYXRfdHlwZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbWRhdF90eXBlX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb21kYXRfdHlwZV9zdHJ1Y3QoKSAoKHN0cnVjdCBjb21kYXRfdHlwZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29tZGF0X3R5cGVfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29tZGF0X3R5cGVfc3RydWN0KG4pICgoc3RydWN0IGNvbWRhdF90eXBlX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbWRhdF90eXBlX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29tZGF0X3R5cGVfc3RydWN0KG4pICgoc3RydWN0IGNvbWRhdF90eXBlX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29tZGF0X3R5cGVfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0KCkgKChzdHJ1Y3QgZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0KCkgKChzdHJ1Y3QgZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdChuKSAoKHN0cnVjdCBkd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdChuKSAoKHN0cnVjdCBkd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19yYW5nZXNfc3RydWN0KCkgKChzdHJ1Y3QgZHdfcmFuZ2VzX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfcmFuZ2VzX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19yYW5nZXNfc3RydWN0KCkgKChzdHJ1Y3QgZHdfcmFuZ2VzX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19yYW5nZXNfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfcmFuZ2VzX3N0cnVjdChuKSAoKHN0cnVjdCBkd19yYW5nZXNfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfcmFuZ2VzX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfcmFuZ2VzX3N0cnVjdChuKSAoKHN0cnVjdCBkd19yYW5nZXNfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19yYW5nZXNfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19wdWJuYW1lX3N0cnVjdCgpICgoc3RydWN0IHB1Ym5hbWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwdWJuYW1lX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wdWJuYW1lX3N0cnVjdCgpICgoc3RydWN0IHB1Ym5hbWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHB1Ym5hbWVfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcHVibmFtZV9zdHJ1Y3QobikgKChzdHJ1Y3QgcHVibmFtZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBwdWJuYW1lX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcHVibmFtZV9zdHJ1Y3QobikgKChzdHJ1Y3QgcHVibmFtZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHB1Ym5hbWVfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19saW5lX2luZm9fc3RydWN0KCkgKChzdHJ1Y3QgZHdfbGluZV9pbmZvX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfbGluZV9pbmZvX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19saW5lX2luZm9fc3RydWN0KCkgKChzdHJ1Y3QgZHdfbGluZV9pbmZvX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19saW5lX2luZm9fc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfbGluZV9pbmZvX3N0cnVjdChuKSAoKHN0cnVjdCBkd19saW5lX2luZm9fc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfbGluZV9pbmZvX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfbGluZV9pbmZvX3N0cnVjdChuKSAoKHN0cnVjdCBkd19saW5lX2luZm9fc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19saW5lX2luZm9fc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19hdHRyX3N0cnVjdCgpICgoc3RydWN0IGR3X2F0dHJfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19hdHRyX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19hdHRyX3N0cnVjdCgpICgoc3RydWN0IGR3X2F0dHJfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X2F0dHJfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfYXR0cl9zdHJ1Y3QobikgKChzdHJ1Y3QgZHdfYXR0cl9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19hdHRyX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfYXR0cl9zdHJ1Y3QobikgKChzdHJ1Y3QgZHdfYXR0cl9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X2F0dHJfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19hZGRyX3RhYmxlX2VudHJ5X3N0cnVjdF91bmlvbigpICgodW5pb24gYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3RfdW5pb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3RfdW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3RfdW5pb24oKSAoKHVuaW9uIGFkZHJfdGFibGVfZW50cnlfc3RydWN0X3VuaW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3RfdW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19hZGRyX3RhYmxlX2VudHJ5X3N0cnVjdF91bmlvbihuKSAoKHVuaW9uIGFkZHJfdGFibGVfZW50cnlfc3RydWN0X3VuaW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBhZGRyX3RhYmxlX2VudHJ5X3N0cnVjdF91bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3RfdW5pb24obikgKCh1bmlvbiBhZGRyX3RhYmxlX2VudHJ5X3N0cnVjdF91bmlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBhZGRyX3RhYmxlX2VudHJ5X3N0cnVjdF91bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2RlZmVycmVkX2xvY2F0aW9uc192YV9nY18oKSAoKHZlYzxkZWZlcnJlZF9sb2NhdGlvbnMsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkZWZlcnJlZF9sb2NhdGlvbnMsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kZWZlcnJlZF9sb2NhdGlvbnNfdmFfZ2NfKCkgKCh2ZWM8ZGVmZXJyZWRfbG9jYXRpb25zLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkZWZlcnJlZF9sb2NhdGlvbnMsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2RlZmVycmVkX2xvY2F0aW9uc192YV9nY18obikgKCh2ZWM8ZGVmZXJyZWRfbG9jYXRpb25zLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGRlZmVycmVkX2xvY2F0aW9ucyx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19kZWZlcnJlZF9sb2NhdGlvbnNfdmFfZ2NfKG4pICgodmVjPGRlZmVycmVkX2xvY2F0aW9ucyx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGRlZmVycmVkX2xvY2F0aW9ucyx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2RlZmVycmVkX2xvY2F0aW9uc19zdHJ1Y3QoKSAoKHN0cnVjdCBkZWZlcnJlZF9sb2NhdGlvbnNfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkZWZlcnJlZF9sb2NhdGlvbnNfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2RlZmVycmVkX2xvY2F0aW9uc19zdHJ1Y3QoKSAoKHN0cnVjdCBkZWZlcnJlZF9sb2NhdGlvbnNfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRlZmVycmVkX2xvY2F0aW9uc19zdHJ1Y3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kZWZlcnJlZF9sb2NhdGlvbnNfc3RydWN0KG4pICgoc3RydWN0IGRlZmVycmVkX2xvY2F0aW9uc19zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkZWZlcnJlZF9sb2NhdGlvbnNfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kZWZlcnJlZF9sb2NhdGlvbnNfc3RydWN0KG4pICgoc3RydWN0IGRlZmVycmVkX2xvY2F0aW9uc19zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRlZmVycmVkX2xvY2F0aW9uc19zdHJ1Y3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19mZGVfcmVmX3ZhX2djXygpICgodmVjPGR3X2ZkZV9yZWYsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkd19mZGVfcmVmLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfZmRlX3JlZl92YV9nY18oKSAoKHZlYzxkd19mZGVfcmVmLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxkd19mZGVfcmVmLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19kd19mZGVfcmVmX3ZhX2djXyhuKSAoKHZlYzxkd19mZGVfcmVmLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGR3X2ZkZV9yZWYsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfZHdfZmRlX3JlZl92YV9nY18obikgKCh2ZWM8ZHdfZmRlX3JlZix2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGR3X2ZkZV9yZWYsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19yZWdfc2F2ZWRfaW5fZGF0YV9zdHJ1Y3QoKSAoKHN0cnVjdCByZWdfc2F2ZWRfaW5fZGF0YV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJlZ19zYXZlZF9pbl9kYXRhX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9yZWdfc2F2ZWRfaW5fZGF0YV9zdHJ1Y3QoKSAoKHN0cnVjdCByZWdfc2F2ZWRfaW5fZGF0YV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcmVnX3NhdmVkX2luX2RhdGFfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcmVnX3NhdmVkX2luX2RhdGFfc3RydWN0KG4pICgoc3RydWN0IHJlZ19zYXZlZF9pbl9kYXRhX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJlZ19zYXZlZF9pbl9kYXRhX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcmVnX3NhdmVkX2luX2RhdGFfc3RydWN0KG4pICgoc3RydWN0IHJlZ19zYXZlZF9pbl9kYXRhX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcmVnX3NhdmVkX2luX2RhdGFfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19jZmlfcm93X3N0cnVjdCgpICgoc3RydWN0IGR3X2NmaV9yb3dfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19jZmlfcm93X3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19jZmlfcm93X3N0cnVjdCgpICgoc3RydWN0IGR3X2NmaV9yb3dfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X2NmaV9yb3dfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfY2ZpX3Jvd19zdHJ1Y3QobikgKChzdHJ1Y3QgZHdfY2ZpX3Jvd19zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19jZmlfcm93X3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfY2ZpX3Jvd19zdHJ1Y3QobikgKChzdHJ1Y3QgZHdfY2ZpX3Jvd19zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X2NmaV9yb3dfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd192YWxfc3RydWN0X3VuaW9uKCkgKCh1bmlvbiBkd192YWxfc3RydWN0X3VuaW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGR3X3ZhbF9zdHJ1Y3RfdW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfdmFsX3N0cnVjdF91bmlvbigpICgodW5pb24gZHdfdmFsX3N0cnVjdF91bmlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGR3X3ZhbF9zdHJ1Y3RfdW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd192YWxfc3RydWN0X3VuaW9uKG4pICgodW5pb24gZHdfdmFsX3N0cnVjdF91bmlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZHdfdmFsX3N0cnVjdF91bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfdmFsX3N0cnVjdF91bmlvbihuKSAoKHVuaW9uIGR3X3ZhbF9zdHJ1Y3RfdW5pb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZHdfdmFsX3N0cnVjdF91bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfdmFsX3Ztc19kZWx0YV91bmlvbigpICgoc3RydWN0IGR3X3ZhbF92bXNfZGVsdGFfdW5pb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X3ZhbF92bXNfZGVsdGFfdW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfdmFsX3Ztc19kZWx0YV91bmlvbigpICgoc3RydWN0IGR3X3ZhbF92bXNfZGVsdGFfdW5pb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfdmFsX3Ztc19kZWx0YV91bmlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X3ZhbF92bXNfZGVsdGFfdW5pb24obikgKChzdHJ1Y3QgZHdfdmFsX3Ztc19kZWx0YV91bmlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X3ZhbF92bXNfZGVsdGFfdW5pb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X3ZhbF92bXNfZGVsdGFfdW5pb24obikgKChzdHJ1Y3QgZHdfdmFsX3Ztc19kZWx0YV91bmlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfdmFsX3Ztc19kZWx0YV91bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdhcmZfZmlsZV9kYXRhKCkgKChzdHJ1Y3QgZHdhcmZfZmlsZV9kYXRhICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd2FyZl9maWxlX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdhcmZfZmlsZV9kYXRhKCkgKChzdHJ1Y3QgZHdhcmZfZmlsZV9kYXRhICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3YXJmX2ZpbGVfZGF0YSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3YXJmX2ZpbGVfZGF0YShuKSAoKHN0cnVjdCBkd2FyZl9maWxlX2RhdGEgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd2FyZl9maWxlX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3YXJmX2ZpbGVfZGF0YShuKSAoKHN0cnVjdCBkd2FyZl9maWxlX2RhdGEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3YXJmX2ZpbGVfZGF0YSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaW5kaXJlY3Rfc3RyaW5nX25vZGUoKSAoKHN0cnVjdCBpbmRpcmVjdF9zdHJpbmdfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaW5kaXJlY3Rfc3RyaW5nX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfaW5kaXJlY3Rfc3RyaW5nX25vZGUoKSAoKHN0cnVjdCBpbmRpcmVjdF9zdHJpbmdfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbmRpcmVjdF9zdHJpbmdfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2luZGlyZWN0X3N0cmluZ19ub2RlKG4pICgoc3RydWN0IGluZGlyZWN0X3N0cmluZ19ub2RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaW5kaXJlY3Rfc3RyaW5nX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2luZGlyZWN0X3N0cmluZ19ub2RlKG4pICgoc3RydWN0IGluZGlyZWN0X3N0cmluZ19ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbmRpcmVjdF9zdHJpbmdfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfdmFsX2RpZV91bmlvbigpICgoc3RydWN0IGR3X3ZhbF9kaWVfdW5pb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X3ZhbF9kaWVfdW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfdmFsX2RpZV91bmlvbigpICgoc3RydWN0IGR3X3ZhbF9kaWVfdW5pb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfdmFsX2RpZV91bmlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X3ZhbF9kaWVfdW5pb24obikgKChzdHJ1Y3QgZHdfdmFsX2RpZV91bmlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X3ZhbF9kaWVfdW5pb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X3ZhbF9kaWVfdW5pb24obikgKChzdHJ1Y3QgZHdfdmFsX2RpZV91bmlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfdmFsX2RpZV91bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3QoKSAoKHN0cnVjdCBhZGRyX3RhYmxlX2VudHJ5X3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3QoKSAoKHN0cnVjdCBhZGRyX3RhYmxlX2VudHJ5X3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhZGRyX3RhYmxlX2VudHJ5X3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2FkZHJfdGFibGVfZW50cnlfc3RydWN0KG4pICgoc3RydWN0IGFkZHJfdGFibGVfZW50cnlfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2FkZHJfdGFibGVfZW50cnlfc3RydWN0KG4pICgoc3RydWN0IGFkZHJfdGFibGVfZW50cnlfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhZGRyX3RhYmxlX2VudHJ5X3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfdmVjX3N0cnVjdCgpICgoc3RydWN0IGR3X3ZlY19zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X3ZlY19zdHJ1Y3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfdmVjX3N0cnVjdCgpICgoc3RydWN0IGR3X3ZlY19zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfdmVjX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X3ZlY19zdHJ1Y3QobikgKChzdHJ1Y3QgZHdfdmVjX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X3ZlY19zdHJ1Y3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X3ZlY19zdHJ1Y3QobikgKChzdHJ1Y3QgZHdfdmVjX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfdmVjX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2ZhX2xvYygpICgoc3RydWN0IGNmYV9sb2MgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNmYV9sb2MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY2ZhX2xvYygpICgoc3RydWN0IGNmYV9sb2MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2ZhX2xvYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NmYV9sb2MobikgKChzdHJ1Y3QgY2ZhX2xvYyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNmYV9sb2MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NmYV9sb2MobikgKChzdHJ1Y3QgY2ZhX2xvYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2ZhX2xvYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X2NmaV9yZWZfdmFfZ2NfKCkgKCh2ZWM8ZHdfY2ZpX3JlZix2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGR3X2NmaV9yZWYsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd19jZmlfcmVmX3ZhX2djXygpICgodmVjPGR3X2NmaV9yZWYsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGR3X2NmaV9yZWYsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2R3X2NmaV9yZWZfdmFfZ2NfKG4pICgodmVjPGR3X2NmaV9yZWYsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZHdfY2ZpX3JlZix2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19kd19jZmlfcmVmX3ZhX2djXyhuKSAoKHZlYzxkd19jZmlfcmVmLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZHdfY2ZpX3JlZix2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2R3X2NmaV9vcHJuZF9zdHJ1Y3QoKSAoKHVuaW9uIGR3X2NmaV9vcHJuZF9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZHdfY2ZpX29wcm5kX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19jZmlfb3BybmRfc3RydWN0KCkgKCh1bmlvbiBkd19jZmlfb3BybmRfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZHdfY2ZpX29wcm5kX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X2NmaV9vcHJuZF9zdHJ1Y3QobikgKCh1bmlvbiBkd19jZmlfb3BybmRfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBkd19jZmlfb3BybmRfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd19jZmlfb3BybmRfc3RydWN0KG4pICgodW5pb24gZHdfY2ZpX29wcm5kX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBkd19jZmlfb3BybmRfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19sb2NfbGlzdF9zdHJ1Y3QoKSAoKHN0cnVjdCBkd19sb2NfbGlzdF9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X2xvY19saXN0X3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19sb2NfbGlzdF9zdHJ1Y3QoKSAoKHN0cnVjdCBkd19sb2NfbGlzdF9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfbG9jX2xpc3Rfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfbG9jX2xpc3Rfc3RydWN0KG4pICgoc3RydWN0IGR3X2xvY19saXN0X3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGR3X2xvY19saXN0X3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfbG9jX2xpc3Rfc3RydWN0KG4pICgoc3RydWN0IGR3X2xvY19saXN0X3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfbG9jX2xpc3Rfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19sb2NfZGVzY3Jfc3RydWN0KCkgKChzdHJ1Y3QgZHdfbG9jX2Rlc2NyX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfbG9jX2Rlc2NyX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19sb2NfZGVzY3Jfc3RydWN0KCkgKChzdHJ1Y3QgZHdfbG9jX2Rlc2NyX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19sb2NfZGVzY3Jfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfbG9jX2Rlc2NyX3N0cnVjdChuKSAoKHN0cnVjdCBkd19sb2NfZGVzY3Jfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfbG9jX2Rlc2NyX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfbG9jX2Rlc2NyX3N0cnVjdChuKSAoKHN0cnVjdCBkd19sb2NfZGVzY3Jfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19sb2NfZGVzY3Jfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19jZmlfc3RydWN0KCkgKChzdHJ1Y3QgZHdfY2ZpX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfY2ZpX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19jZmlfc3RydWN0KCkgKChzdHJ1Y3QgZHdfY2ZpX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19jZmlfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfY2ZpX3N0cnVjdChuKSAoKHN0cnVjdCBkd19jZmlfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfY2ZpX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfY2ZpX3N0cnVjdChuKSAoKHN0cnVjdCBkd19jZmlfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19jZmlfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd192YWxfc3RydWN0KCkgKChzdHJ1Y3QgZHdfdmFsX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfdmFsX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd192YWxfc3RydWN0KCkgKChzdHJ1Y3QgZHdfdmFsX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd192YWxfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfdmFsX3N0cnVjdChuKSAoKHN0cnVjdCBkd192YWxfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfdmFsX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfdmFsX3N0cnVjdChuKSAoKHN0cnVjdCBkd192YWxfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd192YWxfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190eXBlaW5mbygpICgoc3RydWN0IHR5cGVpbmZvICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0eXBlaW5mbykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90eXBlaW5mbygpICgoc3RydWN0IHR5cGVpbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHR5cGVpbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHlwZWluZm8obikgKChzdHJ1Y3QgdHlwZWluZm8gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0eXBlaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHlwZWluZm8obikgKChzdHJ1Y3QgdHlwZWluZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHR5cGVpbmZvKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pbmxpbmVfc3VtbWFyeSgpICgoc3RydWN0IGlubGluZV9zdW1tYXJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbmxpbmVfc3VtbWFyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pbmxpbmVfc3VtbWFyeSgpICgoc3RydWN0IGlubGluZV9zdW1tYXJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlubGluZV9zdW1tYXJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaW5saW5lX3N1bW1hcnkobikgKChzdHJ1Y3QgaW5saW5lX3N1bW1hcnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbmxpbmVfc3VtbWFyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaW5saW5lX3N1bW1hcnkobikgKChzdHJ1Y3QgaW5saW5lX3N1bW1hcnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlubGluZV9zdW1tYXJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfYWdnX2p1bXBfZnVuY3Rpb24oKSAoKHN0cnVjdCBpcGFfYWdnX2p1bXBfZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlwYV9hZ2dfanVtcF9mdW5jdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfYWdnX2p1bXBfZnVuY3Rpb24oKSAoKHN0cnVjdCBpcGFfYWdnX2p1bXBfZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2FnZ19qdW1wX2Z1bmN0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX2FnZ19qdW1wX2Z1bmN0aW9uKG4pICgoc3RydWN0IGlwYV9hZ2dfanVtcF9mdW5jdGlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlwYV9hZ2dfanVtcF9mdW5jdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX2FnZ19qdW1wX2Z1bmN0aW9uKG4pICgoc3RydWN0IGlwYV9hZ2dfanVtcF9mdW5jdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2FnZ19qdW1wX2Z1bmN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlKCkgKChzdHJ1Y3QgaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlKCkgKChzdHJ1Y3QgaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZShuKSAoKHN0cnVjdCBpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZShuKSAoKHN0cnVjdCBpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfZWRnZV9hcmdzKCkgKChzdHJ1Y3QgaXBhX2VkZ2VfYXJncyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2VkZ2VfYXJncykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfZWRnZV9hcmdzKCkgKChzdHJ1Y3QgaXBhX2VkZ2VfYXJncyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfZWRnZV9hcmdzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX2VkZ2VfYXJncyhuKSAoKHN0cnVjdCBpcGFfZWRnZV9hcmdzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2VkZ2VfYXJncyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX2VkZ2VfYXJncyhuKSAoKHN0cnVjdCBpcGFfZWRnZV9hcmdzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfZWRnZV9hcmdzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfYWdnX2pmX2l0ZW0oKSAoKHN0cnVjdCBpcGFfYWdnX2pmX2l0ZW0gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlwYV9hZ2dfamZfaXRlbSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfYWdnX2pmX2l0ZW0oKSAoKHN0cnVjdCBpcGFfYWdnX2pmX2l0ZW0gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2FnZ19qZl9pdGVtKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX2FnZ19qZl9pdGVtKG4pICgoc3RydWN0IGlwYV9hZ2dfamZfaXRlbSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGlwYV9hZ2dfamZfaXRlbSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX2FnZ19qZl9pdGVtKG4pICgoc3RydWN0IGlwYV9hZ2dfamZfaXRlbSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2FnZ19qZl9pdGVtKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfanVtcF9mdW5jKCkgKChzdHJ1Y3QgaXBhX2p1bXBfZnVuYyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2p1bXBfZnVuYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfanVtcF9mdW5jKCkgKChzdHJ1Y3QgaXBhX2p1bXBfZnVuYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfanVtcF9mdW5jKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX2p1bXBfZnVuYyhuKSAoKHN0cnVjdCBpcGFfanVtcF9mdW5jICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX2p1bXBfZnVuYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX2p1bXBfZnVuYyhuKSAoKHN0cnVjdCBpcGFfanVtcF9mdW5jICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfanVtcF9mdW5jKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfYWxpYXNfc2V0X2VudHJ5X3ZhX2djXygpICgodmVjPGFsaWFzX3NldF9lbnRyeSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGFsaWFzX3NldF9lbnRyeSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2FsaWFzX3NldF9lbnRyeV92YV9nY18oKSAoKHZlYzxhbGlhc19zZXRfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGFsaWFzX3NldF9lbnRyeSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfYWxpYXNfc2V0X2VudHJ5X3ZhX2djXyhuKSAoKHZlYzxhbGlhc19zZXRfZW50cnksdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8YWxpYXNfc2V0X2VudHJ5LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2FsaWFzX3NldF9lbnRyeV92YV9nY18obikgKCh2ZWM8YWxpYXNfc2V0X2VudHJ5LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8YWxpYXNfc2V0X2VudHJ5LHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYWxpYXNfc2V0X2VudHJ5X2QoKSAoKHN0cnVjdCBhbGlhc19zZXRfZW50cnlfZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfc2V0X2VudHJ5X2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYWxpYXNfc2V0X2VudHJ5X2QoKSAoKHN0cnVjdCBhbGlhc19zZXRfZW50cnlfZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhbGlhc19zZXRfZW50cnlfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2FsaWFzX3NldF9lbnRyeV9kKG4pICgoc3RydWN0IGFsaWFzX3NldF9lbnRyeV9kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfc2V0X2VudHJ5X2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2FsaWFzX3NldF9lbnRyeV9kKG4pICgoc3RydWN0IGFsaWFzX3NldF9lbnRyeV9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhbGlhc19zZXRfZW50cnlfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlKCkgKChzdHJ1Y3QgY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3RyZWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlKCkgKChzdHJ1Y3QgY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbnN0YW50X2Rlc2NyaXB0b3JfdHJlZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbnN0YW50X2Rlc2NyaXB0b3JfdHJlZShuKSAoKHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3RyZWUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3RyZWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NvbnN0YW50X2Rlc2NyaXB0b3JfdHJlZShuKSAoKHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3RyZWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbnN0YW50X2Rlc2NyaXB0b3JfdHJlZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYXNtX25vZGUoKSAoKHN0cnVjdCBhc21fbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYXNtX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYXNtX25vZGUoKSAoKHN0cnVjdCBhc21fbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhc21fbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2FzbV9ub2RlKG4pICgoc3RydWN0IGFzbV9ub2RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYXNtX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2FzbV9ub2RlKG4pICgoc3RydWN0IGFzbV9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhc21fbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbygpICgoc3RydWN0IGNncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbygpICgoc3RydWN0IGNncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8obikgKChzdHJ1Y3QgY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8obikgKChzdHJ1Y3QgY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbygpICgoc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbygpICgoc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8obikgKChzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8obikgKChzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2dyYXBoX2VkZ2UoKSAoKHN0cnVjdCBjZ3JhcGhfZWRnZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2VkZ2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY2dyYXBoX2VkZ2UoKSAoKHN0cnVjdCBjZ3JhcGhfZWRnZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfZWRnZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NncmFwaF9lZGdlKG4pICgoc3RydWN0IGNncmFwaF9lZGdlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2VkZ2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NncmFwaF9lZGdlKG4pICgoc3RydWN0IGNncmFwaF9lZGdlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfZWRnZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2dyYXBoX2Nsb25lX2luZm8oKSAoKHN0cnVjdCBjZ3JhcGhfY2xvbmVfaW5mbyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2Nsb25lX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY2dyYXBoX2Nsb25lX2luZm8oKSAoKHN0cnVjdCBjZ3JhcGhfY2xvbmVfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfY2xvbmVfaW5mbykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NncmFwaF9jbG9uZV9pbmZvKG4pICgoc3RydWN0IGNncmFwaF9jbG9uZV9pbmZvICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2Nsb25lX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NncmFwaF9jbG9uZV9pbmZvKG4pICgoc3RydWN0IGNncmFwaF9jbG9uZV9pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfY2xvbmVfaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2lwYV9yZXBsYWNlX21hcF9wX3ZhX2djXygpICgodmVjPGlwYV9yZXBsYWNlX21hcF9wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX3JlcGxhY2VfbWFwX3AsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfcmVwbGFjZV9tYXBfcF92YV9nY18oKSAoKHZlYzxpcGFfcmVwbGFjZV9tYXBfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX3JlcGxhY2VfbWFwX3AsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2lwYV9yZXBsYWNlX21hcF9wX3ZhX2djXyhuKSAoKHZlYzxpcGFfcmVwbGFjZV9tYXBfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfcmVwbGFjZV9tYXBfcCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19pcGFfcmVwbGFjZV9tYXBfcF92YV9nY18obikgKCh2ZWM8aXBhX3JlcGxhY2VfbWFwX3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfcmVwbGFjZV9tYXBfcCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lwYV9yZXBsYWNlX21hcCgpICgoc3RydWN0IGlwYV9yZXBsYWNlX21hcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX3JlcGxhY2VfbWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lwYV9yZXBsYWNlX21hcCgpICgoc3RydWN0IGlwYV9yZXBsYWNlX21hcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfcmVwbGFjZV9tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfcmVwbGFjZV9tYXAobikgKChzdHJ1Y3QgaXBhX3JlcGxhY2VfbWFwICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX3JlcGxhY2VfbWFwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfcmVwbGFjZV9tYXAobikgKChzdHJ1Y3QgaXBhX3JlcGxhY2VfbWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfcmVwbGFjZV9tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NncmFwaF9ydGxfaW5mbygpICgoc3RydWN0IGNncmFwaF9ydGxfaW5mbyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX3J0bF9pbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NncmFwaF9ydGxfaW5mbygpICgoc3RydWN0IGNncmFwaF9ydGxfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfcnRsX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jZ3JhcGhfcnRsX2luZm8obikgKChzdHJ1Y3QgY2dyYXBoX3J0bF9pbmZvICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX3J0bF9pbmZvKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jZ3JhcGhfcnRsX2luZm8obikgKChzdHJ1Y3QgY2dyYXBoX3J0bF9pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfcnRsX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NncmFwaF9nbG9iYWxfaW5mbygpICgoc3RydWN0IGNncmFwaF9nbG9iYWxfaW5mbyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2dsb2JhbF9pbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NncmFwaF9nbG9iYWxfaW5mbygpICgoc3RydWN0IGNncmFwaF9nbG9iYWxfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfZ2xvYmFsX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jZ3JhcGhfZ2xvYmFsX2luZm8obikgKChzdHJ1Y3QgY2dyYXBoX2dsb2JhbF9pbmZvICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2dsb2JhbF9pbmZvKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jZ3JhcGhfZ2xvYmFsX2luZm8obikgKChzdHJ1Y3QgY2dyYXBoX2dsb2JhbF9pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfZ2xvYmFsX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NncmFwaF9sb2NhbF9pbmZvKCkgKChzdHJ1Y3QgY2dyYXBoX2xvY2FsX2luZm8gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNncmFwaF9sb2NhbF9pbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NncmFwaF9sb2NhbF9pbmZvKCkgKChzdHJ1Y3QgY2dyYXBoX2xvY2FsX2luZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2xvY2FsX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jZ3JhcGhfbG9jYWxfaW5mbyhuKSAoKHN0cnVjdCBjZ3JhcGhfbG9jYWxfaW5mbyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNncmFwaF9sb2NhbF9pbmZvKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jZ3JhcGhfbG9jYWxfaW5mbyhuKSAoKHN0cnVjdCBjZ3JhcGhfbG9jYWxfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX2xvY2FsX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NncmFwaF90aHVua19pbmZvKCkgKChzdHJ1Y3QgY2dyYXBoX3RodW5rX2luZm8gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNncmFwaF90aHVua19pbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NncmFwaF90aHVua19pbmZvKCkgKChzdHJ1Y3QgY2dyYXBoX3RodW5rX2luZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX3RodW5rX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jZ3JhcGhfdGh1bmtfaW5mbyhuKSAoKHN0cnVjdCBjZ3JhcGhfdGh1bmtfaW5mbyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNncmFwaF90aHVua19pbmZvKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jZ3JhcGhfdGh1bmtfaW5mbyhuKSAoKHN0cnVjdCBjZ3JhcGhfdGh1bmtfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX3RodW5rX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3N5bXRhYl9ub2RlX2Jhc2UoKSAoKHN0cnVjdCBzeW10YWJfbm9kZV9iYXNlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzeW10YWJfbm9kZV9iYXNlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3N5bXRhYl9ub2RlX2Jhc2UoKSAoKHN0cnVjdCBzeW10YWJfbm9kZV9iYXNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN5bXRhYl9ub2RlX2Jhc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zeW10YWJfbm9kZV9iYXNlKG4pICgoc3RydWN0IHN5bXRhYl9ub2RlX2Jhc2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzeW10YWJfbm9kZV9iYXNlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zeW10YWJfbm9kZV9iYXNlKG4pICgoc3RydWN0IHN5bXRhYl9ub2RlX2Jhc2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN5bXRhYl9ub2RlX2Jhc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2x0b19maWxlX2RlY2xfZGF0YSgpICgoc3RydWN0IGx0b19maWxlX2RlY2xfZGF0YSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbHRvX2ZpbGVfZGVjbF9kYXRhKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2x0b19maWxlX2RlY2xfZGF0YSgpICgoc3RydWN0IGx0b19maWxlX2RlY2xfZGF0YSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsdG9fZmlsZV9kZWNsX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sdG9fZmlsZV9kZWNsX2RhdGEobikgKChzdHJ1Y3QgbHRvX2ZpbGVfZGVjbF9kYXRhICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbHRvX2ZpbGVfZGVjbF9kYXRhKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sdG9fZmlsZV9kZWNsX2RhdGEobikgKChzdHJ1Y3QgbHRvX2ZpbGVfZGVjbF9kYXRhICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsdG9fZmlsZV9kZWNsX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lwYV9yZWZfbGlzdCgpICgoc3RydWN0IGlwYV9yZWZfbGlzdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX3JlZl9saXN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lwYV9yZWZfbGlzdCgpICgoc3RydWN0IGlwYV9yZWZfbGlzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfcmVmX2xpc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfcmVmX2xpc3QobikgKChzdHJ1Y3QgaXBhX3JlZl9saXN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX3JlZl9saXN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfcmVmX2xpc3QobikgKChzdHJ1Y3QgaXBhX3JlZl9saXN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfcmVmX2xpc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfcmVmX3RfdmFfZ2NfKCkgKCh2ZWM8aXBhX3JlZl90LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX3JlZl90LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX3JlZl90X3ZhX2djXygpICgodmVjPGlwYV9yZWZfdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8aXBhX3JlZl90LHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19pcGFfcmVmX3RfdmFfZ2NfKG4pICgodmVjPGlwYV9yZWZfdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfcmVmX3QsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfaXBhX3JlZl90X3ZhX2djXyhuKSAoKHZlYzxpcGFfcmVmX3QsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxpcGFfcmVmX3QsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfcmVmKCkgKChzdHJ1Y3QgaXBhX3JlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfcmVmKCkgKChzdHJ1Y3QgaXBhX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX3JlZihuKSAoKHN0cnVjdCBpcGFfcmVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaXBhX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX3JlZihuKSAoKHN0cnVjdCBpcGFfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpcGFfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19zeW10YWJfbm9kZV9kZWYoKSAoKHVuaW9uIHN5bXRhYl9ub2RlX2RlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBzeW10YWJfbm9kZV9kZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfc3ltdGFiX25vZGVfZGVmKCkgKCh1bmlvbiBzeW10YWJfbm9kZV9kZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBzeW10YWJfbm9kZV9kZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zeW10YWJfbm9kZV9kZWYobikgKCh1bmlvbiBzeW10YWJfbm9kZV9kZWYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHN5bXRhYl9ub2RlX2RlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfc3ltdGFiX25vZGVfZGVmKG4pICgodW5pb24gc3ltdGFiX25vZGVfZGVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHN5bXRhYl9ub2RlX2RlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmFycG9vbF9ub2RlKCkgKChzdHJ1Y3QgdmFycG9vbF9ub2RlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB2YXJwb29sX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmFycG9vbF9ub2RlKCkgKChzdHJ1Y3QgdmFycG9vbF9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHZhcnBvb2xfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZhcnBvb2xfbm9kZShuKSAoKHN0cnVjdCB2YXJwb29sX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB2YXJwb29sX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZhcnBvb2xfbm9kZShuKSAoKHN0cnVjdCB2YXJwb29sX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHZhcnBvb2xfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2dyYXBoX25vZGUoKSAoKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY2dyYXBoX25vZGUoKSAoKHN0cnVjdCBjZ3JhcGhfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NncmFwaF9ub2RlKG4pICgoc3RydWN0IGNncmFwaF9ub2RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2dyYXBoX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NncmFwaF9ub2RlKG4pICgoc3RydWN0IGNncmFwaF9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjZ3JhcGhfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2Jhc2ljX2Jsb2NrX3ZhX2djXygpICgodmVjPGJhc2ljX2Jsb2NrLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8YmFzaWNfYmxvY2ssdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19iYXNpY19ibG9ja192YV9nY18oKSAoKHZlYzxiYXNpY19ibG9jayx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8YmFzaWNfYmxvY2ssdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2Jhc2ljX2Jsb2NrX3ZhX2djXyhuKSAoKHZlYzxiYXNpY19ibG9jayx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxiYXNpY19ibG9jayx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19iYXNpY19ibG9ja192YV9nY18obikgKCh2ZWM8YmFzaWNfYmxvY2ssdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxiYXNpY19ibG9jayx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2Jhc2ljX2Jsb2NrX2lsX2RlcGVuZGVudCgpICgodW5pb24gYmFzaWNfYmxvY2tfaWxfZGVwZW5kZW50ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGJhc2ljX2Jsb2NrX2lsX2RlcGVuZGVudCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9iYXNpY19ibG9ja19pbF9kZXBlbmRlbnQoKSAoKHVuaW9uIGJhc2ljX2Jsb2NrX2lsX2RlcGVuZGVudCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGJhc2ljX2Jsb2NrX2lsX2RlcGVuZGVudCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2Jhc2ljX2Jsb2NrX2lsX2RlcGVuZGVudChuKSAoKHVuaW9uIGJhc2ljX2Jsb2NrX2lsX2RlcGVuZGVudCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gYmFzaWNfYmxvY2tfaWxfZGVwZW5kZW50KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19iYXNpY19ibG9ja19pbF9kZXBlbmRlbnQobikgKCh1bmlvbiBiYXNpY19ibG9ja19pbF9kZXBlbmRlbnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gYmFzaWNfYmxvY2tfaWxfZGVwZW5kZW50KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZWRnZV92YV9nY18oKSAoKHZlYzxlZGdlLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZWRnZSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2VkZ2VfdmFfZ2NfKCkgKCh2ZWM8ZWRnZSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8ZWRnZSx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfZWRnZV92YV9nY18obikgKCh2ZWM8ZWRnZSx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxlZGdlLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2VkZ2VfdmFfZ2NfKG4pICgodmVjPGVkZ2UsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxlZGdlLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZ2ltcGxlX2JiX2luZm8oKSAoKHN0cnVjdCBnaW1wbGVfYmJfaW5mbyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX2JiX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX2JiX2luZm8oKSAoKHN0cnVjdCBnaW1wbGVfYmJfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfYmJfaW5mbykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9iYl9pbmZvKG4pICgoc3RydWN0IGdpbXBsZV9iYl9pbmZvICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX2JiX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2dpbXBsZV9iYl9pbmZvKG4pICgoc3RydWN0IGdpbXBsZV9iYl9pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBnaW1wbGVfYmJfaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnRsX2JiX2luZm8oKSAoKHN0cnVjdCBydGxfYmJfaW5mbyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnRsX2JiX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnRsX2JiX2luZm8oKSAoKHN0cnVjdCBydGxfYmJfaW5mbyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydGxfYmJfaW5mbykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0bF9iYl9pbmZvKG4pICgoc3RydWN0IHJ0bF9iYl9pbmZvICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnRsX2JiX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0bF9iYl9pbmZvKG4pICgoc3RydWN0IHJ0bF9iYl9pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydGxfYmJfaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xvb3BfcF92YV9nY18oKSAoKHZlYzxsb29wX3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxsb29wX3AsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sb29wX3BfdmFfZ2NfKCkgKCh2ZWM8bG9vcF9wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxsb29wX3AsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2xvb3BfcF92YV9nY18obikgKCh2ZWM8bG9vcF9wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGxvb3BfcCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19sb29wX3BfdmFfZ2NfKG4pICgodmVjPGxvb3BfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGxvb3BfcCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xvb3AoKSAoKHN0cnVjdCBsb29wICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsb29wKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xvb3AoKSAoKHN0cnVjdCBsb29wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxvb3ApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sb29wKG4pICgoc3RydWN0IGxvb3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsb29wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sb29wKG4pICgoc3RydWN0IGxvb3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxvb3ApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xvb3BfZXhpdCgpICgoc3RydWN0IGxvb3BfZXhpdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9vcF9leGl0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xvb3BfZXhpdCgpICgoc3RydWN0IGxvb3BfZXhpdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsb29wX2V4aXQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sb29wX2V4aXQobikgKChzdHJ1Y3QgbG9vcF9leGl0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9vcF9leGl0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sb29wX2V4aXQobikgKChzdHJ1Y3QgbG9vcF9leGl0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsb29wX2V4aXQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX25iX2l0ZXJfYm91bmQoKSAoKHN0cnVjdCBuYl9pdGVyX2JvdW5kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBuYl9pdGVyX2JvdW5kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX25iX2l0ZXJfYm91bmQoKSAoKHN0cnVjdCBuYl9pdGVyX2JvdW5kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5iX2l0ZXJfYm91bmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19uYl9pdGVyX2JvdW5kKG4pICgoc3RydWN0IG5iX2l0ZXJfYm91bmQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBuYl9pdGVyX2JvdW5kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19uYl9pdGVyX2JvdW5kKG4pICgoc3RydWN0IG5iX2l0ZXJfYm91bmQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5iX2l0ZXJfYm91bmQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xwdF9kZWNpc2lvbigpICgoc3RydWN0IGxwdF9kZWNpc2lvbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbHB0X2RlY2lzaW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xwdF9kZWNpc2lvbigpICgoc3RydWN0IGxwdF9kZWNpc2lvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBscHRfZGVjaXNpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19scHRfZGVjaXNpb24obikgKChzdHJ1Y3QgbHB0X2RlY2lzaW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbHB0X2RlY2lzaW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19scHRfZGVjaXNpb24obikgKChzdHJ1Y3QgbHB0X2RlY2lzaW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBscHRfZGVjaXNpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX25vc3dpdGNoX3NlY3Rpb24oKSAoKHN0cnVjdCBub3N3aXRjaF9zZWN0aW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBub3N3aXRjaF9zZWN0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX25vc3dpdGNoX3NlY3Rpb24oKSAoKHN0cnVjdCBub3N3aXRjaF9zZWN0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5vc3dpdGNoX3NlY3Rpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ub3N3aXRjaF9zZWN0aW9uKG4pICgoc3RydWN0IG5vc3dpdGNoX3NlY3Rpb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBub3N3aXRjaF9zZWN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ub3N3aXRjaF9zZWN0aW9uKG4pICgoc3RydWN0IG5vc3dpdGNoX3NlY3Rpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5vc3dpdGNoX3NlY3Rpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3VubmFtZWRfc2VjdGlvbigpICgoc3RydWN0IHVubmFtZWRfc2VjdGlvbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdW5uYW1lZF9zZWN0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3VubmFtZWRfc2VjdGlvbigpICgoc3RydWN0IHVubmFtZWRfc2VjdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB1bm5hbWVkX3NlY3Rpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY191bm5hbWVkX3NlY3Rpb24obikgKChzdHJ1Y3QgdW5uYW1lZF9zZWN0aW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdW5uYW1lZF9zZWN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY191bm5hbWVkX3NlY3Rpb24obikgKChzdHJ1Y3QgdW5uYW1lZF9zZWN0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB1bm5hbWVkX3NlY3Rpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX25hbWVkX3NlY3Rpb24oKSAoKHN0cnVjdCBuYW1lZF9zZWN0aW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBuYW1lZF9zZWN0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX25hbWVkX3NlY3Rpb24oKSAoKHN0cnVjdCBuYW1lZF9zZWN0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5hbWVkX3NlY3Rpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19uYW1lZF9zZWN0aW9uKG4pICgoc3RydWN0IG5hbWVkX3NlY3Rpb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBuYW1lZF9zZWN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19uYW1lZF9zZWN0aW9uKG4pICgoc3RydWN0IG5hbWVkX3NlY3Rpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG5hbWVkX3NlY3Rpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NlY3Rpb25fY29tbW9uKCkgKChzdHJ1Y3Qgc2VjdGlvbl9jb21tb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNlY3Rpb25fY29tbW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NlY3Rpb25fY29tbW9uKCkgKChzdHJ1Y3Qgc2VjdGlvbl9jb21tb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc2VjdGlvbl9jb21tb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zZWN0aW9uX2NvbW1vbihuKSAoKHN0cnVjdCBzZWN0aW9uX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNlY3Rpb25fY29tbW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zZWN0aW9uX2NvbW1vbihuKSAoKHN0cnVjdCBzZWN0aW9uX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc2VjdGlvbl9jb21tb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3R5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSgpICgoc3RydWN0IHR5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3R5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSgpICgoc3RydWN0IHR5cGVzX3VzZWRfYnlfdmFyc19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0eXBlc191c2VkX2J5X3ZhcnNfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190eXBlc191c2VkX2J5X3ZhcnNfZW50cnkobikgKChzdHJ1Y3QgdHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190eXBlc191c2VkX2J5X3ZhcnNfZW50cnkobikgKChzdHJ1Y3QgdHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0eXBlc191c2VkX2J5X3ZhcnNfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xhbmd1YWdlX2Z1bmN0aW9uKCkgKChzdHJ1Y3QgbGFuZ3VhZ2VfZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmd1YWdlX2Z1bmN0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xhbmd1YWdlX2Z1bmN0aW9uKCkgKChzdHJ1Y3QgbGFuZ3VhZ2VfZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ3VhZ2VfZnVuY3Rpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sYW5ndWFnZV9mdW5jdGlvbihuKSAoKHN0cnVjdCBsYW5ndWFnZV9mdW5jdGlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxhbmd1YWdlX2Z1bmN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sYW5ndWFnZV9mdW5jdGlvbihuKSAoKHN0cnVjdCBsYW5ndWFnZV9mdW5jdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ3VhZ2VfZnVuY3Rpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xvb3BzKCkgKChzdHJ1Y3QgbG9vcHMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxvb3BzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xvb3BzKCkgKChzdHJ1Y3QgbG9vcHMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9vcHMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sb29wcyhuKSAoKHN0cnVjdCBsb29wcyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxvb3BzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sb29wcyhuKSAoKHN0cnVjdCBsb29wcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9vcHMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvbnRyb2xfZmxvd19ncmFwaCgpICgoc3RydWN0IGNvbnRyb2xfZmxvd19ncmFwaCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29udHJvbF9mbG93X2dyYXBoKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NvbnRyb2xfZmxvd19ncmFwaCgpICgoc3RydWN0IGNvbnRyb2xfZmxvd19ncmFwaCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb250cm9sX2Zsb3dfZ3JhcGgpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb250cm9sX2Zsb3dfZ3JhcGgobikgKChzdHJ1Y3QgY29udHJvbF9mbG93X2dyYXBoICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29udHJvbF9mbG93X2dyYXBoKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb250cm9sX2Zsb3dfZ3JhcGgobikgKChzdHJ1Y3QgY29udHJvbF9mbG93X2dyYXBoICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb250cm9sX2Zsb3dfZ3JhcGgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VoX3N0YXR1cygpICgoc3RydWN0IGVoX3N0YXR1cyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWhfc3RhdHVzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX3N0YXR1cygpICgoc3RydWN0IGVoX3N0YXR1cyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9zdGF0dXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9zdGF0dXMobikgKChzdHJ1Y3QgZWhfc3RhdHVzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWhfc3RhdHVzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19laF9zdGF0dXMobikgKChzdHJ1Y3QgZWhfc3RhdHVzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBlaF9zdGF0dXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3N0YWNrX3VzYWdlKCkgKChzdHJ1Y3Qgc3RhY2tfdXNhZ2UgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0YWNrX3VzYWdlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3N0YWNrX3VzYWdlKCkgKChzdHJ1Y3Qgc3RhY2tfdXNhZ2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3RhY2tfdXNhZ2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zdGFja191c2FnZShuKSAoKHN0cnVjdCBzdGFja191c2FnZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHN0YWNrX3VzYWdlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zdGFja191c2FnZShuKSAoKHN0cnVjdCBzdGFja191c2FnZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3RhY2tfdXNhZ2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0bF9kYXRhKCkgKChzdHJ1Y3QgcnRsX2RhdGEgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0bF9kYXRhKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0bF9kYXRhKCkgKChzdHJ1Y3QgcnRsX2RhdGEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnRsX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydGxfZGF0YShuKSAoKHN0cnVjdCBydGxfZGF0YSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0bF9kYXRhKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydGxfZGF0YShuKSAoKHN0cnVjdCBydGxfZGF0YSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnRsX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190ZW1wX3Nsb3RfcF92YV9nY18oKSAoKHZlYzx0ZW1wX3Nsb3RfcCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHRlbXBfc2xvdF9wLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdGVtcF9zbG90X3BfdmFfZ2NfKCkgKCh2ZWM8dGVtcF9zbG90X3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHRlbXBfc2xvdF9wLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY190ZW1wX3Nsb3RfcF92YV9nY18obikgKCh2ZWM8dGVtcF9zbG90X3AsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dGVtcF9zbG90X3AsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfdGVtcF9zbG90X3BfdmFfZ2NfKG4pICgodmVjPHRlbXBfc2xvdF9wLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dGVtcF9zbG90X3AsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pbml0aWFsX3ZhbHVlX3N0cnVjdCgpICgoc3RydWN0IGluaXRpYWxfdmFsdWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbml0aWFsX3ZhbHVlX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pbml0aWFsX3ZhbHVlX3N0cnVjdCgpICgoc3RydWN0IGluaXRpYWxfdmFsdWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGluaXRpYWxfdmFsdWVfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaW5pdGlhbF92YWx1ZV9zdHJ1Y3QobikgKChzdHJ1Y3QgaW5pdGlhbF92YWx1ZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbml0aWFsX3ZhbHVlX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaW5pdGlhbF92YWx1ZV9zdHJ1Y3QobikgKChzdHJ1Y3QgaW5pdGlhbF92YWx1ZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGluaXRpYWxfdmFsdWVfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19mcmFtZV9zcGFjZSgpICgoc3RydWN0IGZyYW1lX3NwYWNlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBmcmFtZV9zcGFjZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9mcmFtZV9zcGFjZSgpICgoc3RydWN0IGZyYW1lX3NwYWNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGZyYW1lX3NwYWNlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZnJhbWVfc3BhY2UobikgKChzdHJ1Y3QgZnJhbWVfc3BhY2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBmcmFtZV9zcGFjZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZnJhbWVfc3BhY2UobikgKChzdHJ1Y3QgZnJhbWVfc3BhY2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGZyYW1lX3NwYWNlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19mdW5jdGlvbl9zdWJzZWN0aW9ucygpICgoc3RydWN0IGZ1bmN0aW9uX3N1YnNlY3Rpb25zICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBmdW5jdGlvbl9zdWJzZWN0aW9ucykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9mdW5jdGlvbl9zdWJzZWN0aW9ucygpICgoc3RydWN0IGZ1bmN0aW9uX3N1YnNlY3Rpb25zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGZ1bmN0aW9uX3N1YnNlY3Rpb25zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZnVuY3Rpb25fc3Vic2VjdGlvbnMobikgKChzdHJ1Y3QgZnVuY3Rpb25fc3Vic2VjdGlvbnMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBmdW5jdGlvbl9zdWJzZWN0aW9ucyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZnVuY3Rpb25fc3Vic2VjdGlvbnMobikgKChzdHJ1Y3QgZnVuY3Rpb25fc3Vic2VjdGlvbnMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGZ1bmN0aW9uX3N1YnNlY3Rpb25zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pbmNvbWluZ19hcmdzKCkgKChzdHJ1Y3QgaW5jb21pbmdfYXJncyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21pbmdfYXJncykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pbmNvbWluZ19hcmdzKCkgKChzdHJ1Y3QgaW5jb21pbmdfYXJncyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbmNvbWluZ19hcmdzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaW5jb21pbmdfYXJncyhuKSAoKHN0cnVjdCBpbmNvbWluZ19hcmdzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21pbmdfYXJncyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaW5jb21pbmdfYXJncyhuKSAoKHN0cnVjdCBpbmNvbWluZ19hcmdzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBpbmNvbWluZ19hcmdzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192YXJhc21fc3RhdHVzKCkgKChzdHJ1Y3QgdmFyYXNtX3N0YXR1cyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdmFyYXNtX3N0YXR1cykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92YXJhc21fc3RhdHVzKCkgKChzdHJ1Y3QgdmFyYXNtX3N0YXR1cyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB2YXJhc21fc3RhdHVzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmFyYXNtX3N0YXR1cyhuKSAoKHN0cnVjdCB2YXJhc21fc3RhdHVzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdmFyYXNtX3N0YXR1cyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmFyYXNtX3N0YXR1cyhuKSAoKHN0cnVjdCB2YXJhc21fc3RhdHVzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB2YXJhc21fc3RhdHVzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19ydHhfY29uc3RhbnRfcG9vbCgpICgoc3RydWN0IHJ0eF9jb25zdGFudF9wb29sICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfY29uc3RhbnRfcG9vbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9ydHhfY29uc3RhbnRfcG9vbCgpICgoc3RydWN0IHJ0eF9jb25zdGFudF9wb29sICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9jb25zdGFudF9wb29sKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcnR4X2NvbnN0YW50X3Bvb2wobikgKChzdHJ1Y3QgcnR4X2NvbnN0YW50X3Bvb2wgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfY29uc3RhbnRfcG9vbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcnR4X2NvbnN0YW50X3Bvb2wobikgKChzdHJ1Y3QgcnR4X2NvbnN0YW50X3Bvb2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9jb25zdGFudF9wb29sKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19mZGVfc3RydWN0KCkgKChzdHJ1Y3QgZHdfZmRlX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfZmRlX3N0cnVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19mZGVfc3RydWN0KCkgKChzdHJ1Y3QgZHdfZmRlX3N0cnVjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19mZGVfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfZmRlX3N0cnVjdChuKSAoKHN0cnVjdCBkd19mZGVfc3RydWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZHdfZmRlX3N0cnVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfZmRlX3N0cnVjdChuKSAoKHN0cnVjdCBkd19mZGVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkd19mZGVfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190ZW1wX3Nsb3QoKSAoKHN0cnVjdCB0ZW1wX3Nsb3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRlbXBfc2xvdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90ZW1wX3Nsb3QoKSAoKHN0cnVjdCB0ZW1wX3Nsb3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGVtcF9zbG90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdGVtcF9zbG90KG4pICgoc3RydWN0IHRlbXBfc2xvdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRlbXBfc2xvdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdGVtcF9zbG90KG4pICgoc3RydWN0IHRlbXBfc2xvdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGVtcF9zbG90KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19naW1wbGVfZGYoKSAoKHN0cnVjdCBnaW1wbGVfZGYgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9kZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9naW1wbGVfZGYoKSAoKHN0cnVjdCBnaW1wbGVfZGYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX2RmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZ2ltcGxlX2RmKG4pICgoc3RydWN0IGdpbXBsZV9kZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGdpbXBsZV9kZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZ2ltcGxlX2RmKG4pICgoc3RydWN0IGdpbXBsZV9kZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZ2ltcGxlX2RmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19ydGxfZWgoKSAoKHN0cnVjdCBydGxfZWggKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0bF9laCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9ydGxfZWgoKSAoKHN0cnVjdCBydGxfZWggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnRsX2VoKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcnRsX2VoKG4pICgoc3RydWN0IHJ0bF9laCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0bF9laCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcnRsX2VoKG4pICgoc3RydWN0IHJ0bF9laCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnRsX2VoKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY2FsbF9zaXRlX3JlY29yZF92YV9nY18oKSAoKHZlYzxjYWxsX3NpdGVfcmVjb3JkLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y2FsbF9zaXRlX3JlY29yZCx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NhbGxfc2l0ZV9yZWNvcmRfdmFfZ2NfKCkgKCh2ZWM8Y2FsbF9zaXRlX3JlY29yZCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8Y2FsbF9zaXRlX3JlY29yZCx2YV9nYz4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192ZWNfY2FsbF9zaXRlX3JlY29yZF92YV9nY18obikgKCh2ZWM8Y2FsbF9zaXRlX3JlY29yZCx2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjYWxsX3NpdGVfcmVjb3JkLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmVjX2NhbGxfc2l0ZV9yZWNvcmRfdmFfZ2NfKG4pICgodmVjPGNhbGxfc2l0ZV9yZWNvcmQsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjYWxsX3NpdGVfcmVjb3JkLHZhX2djPiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3VjaGFyX3ZhX2djXygpICgodmVjPHVjaGFyLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dWNoYXIsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY191Y2hhcl92YV9nY18oKSAoKHZlYzx1Y2hhcix2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2ZWM8dWNoYXIsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3VjaGFyX3ZhX2djXyhuKSAoKHZlYzx1Y2hhcix2YV9nYz4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzx1Y2hhcix2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY191Y2hhcl92YV9nY18obikgKCh2ZWM8dWNoYXIsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZlYzx1Y2hhcix2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NhbGxfc2l0ZV9yZWNvcmRfZCgpICgoc3RydWN0IGNhbGxfc2l0ZV9yZWNvcmRfZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2FsbF9zaXRlX3JlY29yZF9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NhbGxfc2l0ZV9yZWNvcmRfZCgpICgoc3RydWN0IGNhbGxfc2l0ZV9yZWNvcmRfZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjYWxsX3NpdGVfcmVjb3JkX2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jYWxsX3NpdGVfcmVjb3JkX2QobikgKChzdHJ1Y3QgY2FsbF9zaXRlX3JlY29yZF9kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2FsbF9zaXRlX3JlY29yZF9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jYWxsX3NpdGVfcmVjb3JkX2QobikgKChzdHJ1Y3QgY2FsbF9zaXRlX3JlY29yZF9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjYWxsX3NpdGVfcmVjb3JkX2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2V4cHJfc3RhdHVzKCkgKChzdHJ1Y3QgZXhwcl9zdGF0dXMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGV4cHJfc3RhdHVzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2V4cHJfc3RhdHVzKCkgKChzdHJ1Y3QgZXhwcl9zdGF0dXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZXhwcl9zdGF0dXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19leHByX3N0YXR1cyhuKSAoKHN0cnVjdCBleHByX3N0YXR1cyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGV4cHJfc3RhdHVzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19leHByX3N0YXR1cyhuKSAoKHN0cnVjdCBleHByX3N0YXR1cyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZXhwcl9zdGF0dXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VtaXRfc3RhdHVzKCkgKChzdHJ1Y3QgZW1pdF9zdGF0dXMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVtaXRfc3RhdHVzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VtaXRfc3RhdHVzKCkgKChzdHJ1Y3QgZW1pdF9zdGF0dXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZW1pdF9zdGF0dXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19lbWl0X3N0YXR1cyhuKSAoKHN0cnVjdCBlbWl0X3N0YXR1cyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVtaXRfc3RhdHVzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19lbWl0X3N0YXR1cyhuKSAoKHN0cnVjdCBlbWl0X3N0YXR1cyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZW1pdF9zdGF0dXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NlcXVlbmNlX3N0YWNrKCkgKChzdHJ1Y3Qgc2VxdWVuY2Vfc3RhY2sgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNlcXVlbmNlX3N0YWNrKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NlcXVlbmNlX3N0YWNrKCkgKChzdHJ1Y3Qgc2VxdWVuY2Vfc3RhY2sgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc2VxdWVuY2Vfc3RhY2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zZXF1ZW5jZV9zdGFjayhuKSAoKHN0cnVjdCBzZXF1ZW5jZV9zdGFjayAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNlcXVlbmNlX3N0YWNrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zZXF1ZW5jZV9zdGFjayhuKSAoKHN0cnVjdCBzZXF1ZW5jZV9zdGFjayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc2VxdWVuY2Vfc3RhY2spLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RhcmdldF9saWJmdW5jcygpICgoc3RydWN0IHRhcmdldF9saWJmdW5jcyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGFyZ2V0X2xpYmZ1bmNzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RhcmdldF9saWJmdW5jcygpICgoc3RydWN0IHRhcmdldF9saWJmdW5jcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0YXJnZXRfbGliZnVuY3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190YXJnZXRfbGliZnVuY3MobikgKChzdHJ1Y3QgdGFyZ2V0X2xpYmZ1bmNzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGFyZ2V0X2xpYmZ1bmNzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190YXJnZXRfbGliZnVuY3MobikgKChzdHJ1Y3QgdGFyZ2V0X2xpYmZ1bmNzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0YXJnZXRfbGliZnVuY3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xpYmZ1bmNfZW50cnkoKSAoKHN0cnVjdCBsaWJmdW5jX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaWJmdW5jX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xpYmZ1bmNfZW50cnkoKSAoKHN0cnVjdCBsaWJmdW5jX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxpYmZ1bmNfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19saWJmdW5jX2VudHJ5KG4pICgoc3RydWN0IGxpYmZ1bmNfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaWJmdW5jX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19saWJmdW5jX2VudHJ5KG4pICgoc3RydWN0IGxpYmZ1bmNfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxpYmZ1bmNfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2J1aWx0aW5faW5mb190eXBlX2QoKSAoKHN0cnVjdCBidWlsdGluX2luZm9fdHlwZV9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBidWlsdGluX2luZm9fdHlwZV9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2J1aWx0aW5faW5mb190eXBlX2QoKSAoKHN0cnVjdCBidWlsdGluX2luZm9fdHlwZV9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJ1aWx0aW5faW5mb190eXBlX2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19idWlsdGluX2luZm9fdHlwZV9kKG4pICgoc3RydWN0IGJ1aWx0aW5faW5mb190eXBlX2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBidWlsdGluX2luZm9fdHlwZV9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19idWlsdGluX2luZm9fdHlwZV9kKG4pICgoc3RydWN0IGJ1aWx0aW5faW5mb190eXBlX2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJ1aWx0aW5faW5mb190eXBlX2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfdmVjX21hcCgpICgoc3RydWN0IHRyZWVfdmVjX21hcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV92ZWNfbWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfdmVjX21hcCgpICgoc3RydWN0IHRyZWVfdmVjX21hcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3ZlY19tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3ZlY19tYXAobikgKChzdHJ1Y3QgdHJlZV92ZWNfbWFwICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV92ZWNfbWFwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3ZlY19tYXAobikgKChzdHJ1Y3QgdHJlZV92ZWNfbWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3ZlY19tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfcHJpb3JpdHlfbWFwKCkgKChzdHJ1Y3QgdHJlZV9wcmlvcml0eV9tYXAgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfcHJpb3JpdHlfbWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfcHJpb3JpdHlfbWFwKCkgKChzdHJ1Y3QgdHJlZV9wcmlvcml0eV9tYXAgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9wcmlvcml0eV9tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3ByaW9yaXR5X21hcChuKSAoKHN0cnVjdCB0cmVlX3ByaW9yaXR5X21hcCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfcHJpb3JpdHlfbWFwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3ByaW9yaXR5X21hcChuKSAoKHN0cnVjdCB0cmVlX3ByaW9yaXR5X21hcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9wcmlvcml0eV9tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfaW50X21hcCgpICgoc3RydWN0IHRyZWVfaW50X21hcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9pbnRfbWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfaW50X21hcCgpICgoc3RydWN0IHRyZWVfaW50X21hcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2ludF9tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2ludF9tYXAobikgKChzdHJ1Y3QgdHJlZV9pbnRfbWFwICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9pbnRfbWFwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2ludF9tYXAobikgKChzdHJ1Y3QgdHJlZV9pbnRfbWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2ludF9tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfZGVjbF9tYXAoKSAoKHN0cnVjdCB0cmVlX2RlY2xfbWFwICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlY2xfbWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfZGVjbF9tYXAoKSAoKHN0cnVjdCB0cmVlX2RlY2xfbWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF9tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2RlY2xfbWFwKG4pICgoc3RydWN0IHRyZWVfZGVjbF9tYXAgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlY2xfbWFwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2RlY2xfbWFwKG4pICgoc3RydWN0IHRyZWVfZGVjbF9tYXAgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF9tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfbWFwKCkgKChzdHJ1Y3QgdHJlZV9tYXAgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfbWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfbWFwKCkgKChzdHJ1Y3QgdHJlZV9tYXAgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX21hcChuKSAoKHN0cnVjdCB0cmVlX21hcCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfbWFwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX21hcChuKSAoKHN0cnVjdCB0cmVlX21hcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfbWFwX2Jhc2UoKSAoKHN0cnVjdCB0cmVlX21hcF9iYXNlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX21hcF9iYXNlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfbWFwX2Jhc2UoKSAoKHN0cnVjdCB0cmVlX21hcF9iYXNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfbWFwX2Jhc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX21hcF9iYXNlKG4pICgoc3RydWN0IHRyZWVfbWFwX2Jhc2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX21hcF9iYXNlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX21hcF9iYXNlKG4pICgoc3RydWN0IHRyZWVfbWFwX2Jhc2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfbWFwX2Jhc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xhbmdfdHJlZV9ub2RlKCkgKCh1bmlvbiBsYW5nX3RyZWVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBsYW5nX3RyZWVfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sYW5nX3RyZWVfbm9kZSgpICgodW5pb24gbGFuZ190cmVlX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBsYW5nX3RyZWVfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xhbmdfdHJlZV9ub2RlKG4pICgodW5pb24gbGFuZ190cmVlX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGxhbmdfdHJlZV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sYW5nX3RyZWVfbm9kZShuKSAoKHVuaW9uIGxhbmdfdHJlZV9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGxhbmdfdHJlZV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3RhcmdldF9vcHRpb24oKSAoKHN0cnVjdCB0cmVlX3RhcmdldF9vcHRpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdGFyZ2V0X29wdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3RhcmdldF9vcHRpb24oKSAoKHN0cnVjdCB0cmVlX3RhcmdldF9vcHRpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV90YXJnZXRfb3B0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV90YXJnZXRfb3B0aW9uKG4pICgoc3RydWN0IHRyZWVfdGFyZ2V0X29wdGlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdGFyZ2V0X29wdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV90YXJnZXRfb3B0aW9uKG4pICgoc3RydWN0IHRyZWVfdGFyZ2V0X29wdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV90YXJnZXRfb3B0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX29wdGltaXphdGlvbl9vcHRpb24oKSAoKHN0cnVjdCB0cmVlX29wdGltaXphdGlvbl9vcHRpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfb3B0aW1pemF0aW9uX29wdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX29wdGltaXphdGlvbl9vcHRpb24oKSAoKHN0cnVjdCB0cmVlX29wdGltaXphdGlvbl9vcHRpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9vcHRpbWl6YXRpb25fb3B0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9vcHRpbWl6YXRpb25fb3B0aW9uKG4pICgoc3RydWN0IHRyZWVfb3B0aW1pemF0aW9uX29wdGlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfb3B0aW1pemF0aW9uX29wdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9vcHRpbWl6YXRpb25fb3B0aW9uKG4pICgoc3RydWN0IHRyZWVfb3B0aW1pemF0aW9uX29wdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9vcHRpbWl6YXRpb25fb3B0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3N0YXRlbWVudF9saXN0KCkgKChzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3N0YXRlbWVudF9saXN0KCkgKChzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3N0YXRlbWVudF9saXN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9zdGF0ZW1lbnRfbGlzdChuKSAoKHN0cnVjdCB0cmVlX3N0YXRlbWVudF9saXN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9zdGF0ZW1lbnRfbGlzdChuKSAoKHN0cnVjdCB0cmVlX3N0YXRlbWVudF9saXN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3N0YXRlbWVudF9saXN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3N0YXRlbWVudF9saXN0X25vZGUoKSAoKHN0cnVjdCB0cmVlX3N0YXRlbWVudF9saXN0X25vZGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3N0YXRlbWVudF9saXN0X25vZGUoKSAoKHN0cnVjdCB0cmVlX3N0YXRlbWVudF9saXN0X25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlKG4pICgoc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlKG4pICgoc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3R5cGVfZGVjbCgpICgoc3RydWN0IHRyZWVfdHlwZV9kZWNsICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3R5cGVfZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3R5cGVfZGVjbCgpICgoc3RydWN0IHRyZWVfdHlwZV9kZWNsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZV9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV90eXBlX2RlY2wobikgKChzdHJ1Y3QgdHJlZV90eXBlX2RlY2wgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3R5cGVfZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV90eXBlX2RlY2wobikgKChzdHJ1Y3QgdHJlZV90eXBlX2RlY2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZV9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3RyYW5zbGF0aW9uX3VuaXRfZGVjbCgpICgoc3RydWN0IHRyZWVfdHJhbnNsYXRpb25fdW5pdF9kZWNsICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3RyYW5zbGF0aW9uX3VuaXRfZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3RyYW5zbGF0aW9uX3VuaXRfZGVjbCgpICgoc3RydWN0IHRyZWVfdHJhbnNsYXRpb25fdW5pdF9kZWNsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHJhbnNsYXRpb25fdW5pdF9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV90cmFuc2xhdGlvbl91bml0X2RlY2wobikgKChzdHJ1Y3QgdHJlZV90cmFuc2xhdGlvbl91bml0X2RlY2wgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3RyYW5zbGF0aW9uX3VuaXRfZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV90cmFuc2xhdGlvbl91bml0X2RlY2wobikgKChzdHJ1Y3QgdHJlZV90cmFuc2xhdGlvbl91bml0X2RlY2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHJhbnNsYXRpb25fdW5pdF9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2Z1bmN0aW9uX2RlY2woKSAoKHN0cnVjdCB0cmVlX2Z1bmN0aW9uX2RlY2wgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZnVuY3Rpb25fZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2Z1bmN0aW9uX2RlY2woKSAoKHN0cnVjdCB0cmVlX2Z1bmN0aW9uX2RlY2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9mdW5jdGlvbl9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9mdW5jdGlvbl9kZWNsKG4pICgoc3RydWN0IHRyZWVfZnVuY3Rpb25fZGVjbCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZnVuY3Rpb25fZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9mdW5jdGlvbl9kZWNsKG4pICgoc3RydWN0IHRyZWVfZnVuY3Rpb25fZGVjbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9mdW5jdGlvbl9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2RlY2xfbm9uX2NvbW1vbigpICgoc3RydWN0IHRyZWVfZGVjbF9ub25fY29tbW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlY2xfbm9uX2NvbW1vbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2RlY2xfbm9uX2NvbW1vbigpICgoc3RydWN0IHRyZWVfZGVjbF9ub25fY29tbW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF9ub25fY29tbW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9kZWNsX25vbl9jb21tb24obikgKChzdHJ1Y3QgdHJlZV9kZWNsX25vbl9jb21tb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlY2xfbm9uX2NvbW1vbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9kZWNsX25vbl9jb21tb24obikgKChzdHJ1Y3QgdHJlZV9kZWNsX25vbl9jb21tb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF9ub25fY29tbW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3Zhcl9kZWNsKCkgKChzdHJ1Y3QgdHJlZV92YXJfZGVjbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV92YXJfZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3Zhcl9kZWNsKCkgKChzdHJ1Y3QgdHJlZV92YXJfZGVjbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3Zhcl9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV92YXJfZGVjbChuKSAoKHN0cnVjdCB0cmVlX3Zhcl9kZWNsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV92YXJfZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV92YXJfZGVjbChuKSAoKHN0cnVjdCB0cmVlX3Zhcl9kZWNsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3Zhcl9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2RlY2xfd2l0aF92aXMoKSAoKHN0cnVjdCB0cmVlX2RlY2xfd2l0aF92aXMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2RlY2xfd2l0aF92aXMoKSAoKHN0cnVjdCB0cmVlX2RlY2xfd2l0aF92aXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfdmlzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9kZWNsX3dpdGhfdmlzKG4pICgoc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9kZWNsX3dpdGhfdmlzKG4pICgoc3RydWN0IHRyZWVfZGVjbF93aXRoX3ZpcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfdmlzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3Bhcm1fZGVjbCgpICgoc3RydWN0IHRyZWVfcGFybV9kZWNsICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3Bhcm1fZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3Bhcm1fZGVjbCgpICgoc3RydWN0IHRyZWVfcGFybV9kZWNsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfcGFybV9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9wYXJtX2RlY2wobikgKChzdHJ1Y3QgdHJlZV9wYXJtX2RlY2wgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3Bhcm1fZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9wYXJtX2RlY2wobikgKChzdHJ1Y3QgdHJlZV9wYXJtX2RlY2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfcGFybV9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2NvbnN0X2RlY2woKSAoKHN0cnVjdCB0cmVlX2NvbnN0X2RlY2wgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfY29uc3RfZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2NvbnN0X2RlY2woKSAoKHN0cnVjdCB0cmVlX2NvbnN0X2RlY2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb25zdF9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9jb25zdF9kZWNsKG4pICgoc3RydWN0IHRyZWVfY29uc3RfZGVjbCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfY29uc3RfZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9jb25zdF9kZWNsKG4pICgoc3RydWN0IHRyZWVfY29uc3RfZGVjbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb25zdF9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3Jlc3VsdF9kZWNsKCkgKChzdHJ1Y3QgdHJlZV9yZXN1bHRfZGVjbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9yZXN1bHRfZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3Jlc3VsdF9kZWNsKCkgKChzdHJ1Y3QgdHJlZV9yZXN1bHRfZGVjbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3Jlc3VsdF9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9yZXN1bHRfZGVjbChuKSAoKHN0cnVjdCB0cmVlX3Jlc3VsdF9kZWNsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9yZXN1bHRfZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9yZXN1bHRfZGVjbChuKSAoKHN0cnVjdCB0cmVlX3Jlc3VsdF9kZWNsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3Jlc3VsdF9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2xhYmVsX2RlY2woKSAoKHN0cnVjdCB0cmVlX2xhYmVsX2RlY2wgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfbGFiZWxfZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2xhYmVsX2RlY2woKSAoKHN0cnVjdCB0cmVlX2xhYmVsX2RlY2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9sYWJlbF9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9sYWJlbF9kZWNsKG4pICgoc3RydWN0IHRyZWVfbGFiZWxfZGVjbCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfbGFiZWxfZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9sYWJlbF9kZWNsKG4pICgoc3RydWN0IHRyZWVfbGFiZWxfZGVjbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9sYWJlbF9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2ZpZWxkX2RlY2woKSAoKHN0cnVjdCB0cmVlX2ZpZWxkX2RlY2wgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZmllbGRfZGVjbCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2ZpZWxkX2RlY2woKSAoKHN0cnVjdCB0cmVlX2ZpZWxkX2RlY2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9maWVsZF9kZWNsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9maWVsZF9kZWNsKG4pICgoc3RydWN0IHRyZWVfZmllbGRfZGVjbCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZmllbGRfZGVjbCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9maWVsZF9kZWNsKG4pICgoc3RydWN0IHRyZWVfZmllbGRfZGVjbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9maWVsZF9kZWNsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2RlY2xfd2l0aF9ydGwoKSAoKHN0cnVjdCB0cmVlX2RlY2xfd2l0aF9ydGwgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2RlY2xfd2l0aF9ydGwoKSAoKHN0cnVjdCB0cmVlX2RlY2xfd2l0aF9ydGwgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfcnRsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9kZWNsX3dpdGhfcnRsKG4pICgoc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9kZWNsX3dpdGhfcnRsKG4pICgoc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfcnRsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2RlY2xfY29tbW9uKCkgKChzdHJ1Y3QgdHJlZV9kZWNsX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9kZWNsX2NvbW1vbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2RlY2xfY29tbW9uKCkgKChzdHJ1Y3QgdHJlZV9kZWNsX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlY2xfY29tbW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9kZWNsX2NvbW1vbihuKSAoKHN0cnVjdCB0cmVlX2RlY2xfY29tbW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9kZWNsX2NvbW1vbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9kZWNsX2NvbW1vbihuKSAoKHN0cnVjdCB0cmVlX2RlY2xfY29tbW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2RlY2xfY29tbW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sYW5nX2RlY2woU0laRSkgKChzdHJ1Y3QgbGFuZ19kZWNsICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChTSVpFIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGFuZ19kZWNsKFNJWkUpICgoc3RydWN0IGxhbmdfZGVjbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChTSVpFIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sYW5nX2RlY2woU0laRSwgbikgKChzdHJ1Y3QgbGFuZ19kZWNsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoU0laRSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sYW5nX2RlY2woU0laRSwgbikgKChzdHJ1Y3QgbGFuZ19kZWNsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChTSVpFLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfZGVjbF9taW5pbWFsKCkgKChzdHJ1Y3QgdHJlZV9kZWNsX21pbmltYWwgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF9taW5pbWFsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfZGVjbF9taW5pbWFsKCkgKChzdHJ1Y3QgdHJlZV9kZWNsX21pbmltYWwgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9kZWNsX21pbmltYWwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2RlY2xfbWluaW1hbChuKSAoKHN0cnVjdCB0cmVlX2RlY2xfbWluaW1hbCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZGVjbF9taW5pbWFsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2RlY2xfbWluaW1hbChuKSAoKHN0cnVjdCB0cmVlX2RlY2xfbWluaW1hbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9kZWNsX21pbmltYWwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfYmluZm8oKSAoKHN0cnVjdCB0cmVlX2JpbmZvICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2JpbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfYmluZm8oKSAoKHN0cnVjdCB0cmVlX2JpbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfYmluZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2JpbmZvKG4pICgoc3RydWN0IHRyZWVfYmluZm8gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2JpbmZvKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2JpbmZvKG4pICgoc3RydWN0IHRyZWVfYmluZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfYmluZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfdHlwZV9ub25fY29tbW9uKCkgKChzdHJ1Y3QgdHJlZV90eXBlX25vbl9jb21tb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZV9ub25fY29tbW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfdHlwZV9ub25fY29tbW9uKCkgKChzdHJ1Y3QgdHJlZV90eXBlX25vbl9jb21tb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV90eXBlX25vbl9jb21tb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3R5cGVfbm9uX2NvbW1vbihuKSAoKHN0cnVjdCB0cmVlX3R5cGVfbm9uX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZV9ub25fY29tbW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3R5cGVfbm9uX2NvbW1vbihuKSAoKHN0cnVjdCB0cmVlX3R5cGVfbm9uX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV90eXBlX25vbl9jb21tb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfdHlwZV93aXRoX2xhbmdfc3BlY2lmaWMoKSAoKHN0cnVjdCB0cmVlX3R5cGVfd2l0aF9sYW5nX3NwZWNpZmljICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3R5cGVfd2l0aF9sYW5nX3NwZWNpZmljKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfdHlwZV93aXRoX2xhbmdfc3BlY2lmaWMoKSAoKHN0cnVjdCB0cmVlX3R5cGVfd2l0aF9sYW5nX3NwZWNpZmljICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZV93aXRoX2xhbmdfc3BlY2lmaWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3R5cGVfd2l0aF9sYW5nX3NwZWNpZmljKG4pICgoc3RydWN0IHRyZWVfdHlwZV93aXRoX2xhbmdfc3BlY2lmaWMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3R5cGVfd2l0aF9sYW5nX3NwZWNpZmljKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3R5cGVfd2l0aF9sYW5nX3NwZWNpZmljKG4pICgoc3RydWN0IHRyZWVfdHlwZV93aXRoX2xhbmdfc3BlY2lmaWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZV93aXRoX2xhbmdfc3BlY2lmaWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xhbmdfdHlwZShTSVpFKSAoKHN0cnVjdCBsYW5nX3R5cGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKFNJWkUgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sYW5nX3R5cGUoU0laRSkgKChzdHJ1Y3QgbGFuZ190eXBlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKFNJWkUgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xhbmdfdHlwZShTSVpFLCBuKSAoKHN0cnVjdCBsYW5nX3R5cGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChTSVpFLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xhbmdfdHlwZShTSVpFLCBuKSAoKHN0cnVjdCBsYW5nX3R5cGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKFNJWkUsIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdHJlZV90eXBlX2NvbW1vbigpICgoc3RydWN0IHRyZWVfdHlwZV9jb21tb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZV9jb21tb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdHJlZV90eXBlX2NvbW1vbigpICgoc3RydWN0IHRyZWVfdHlwZV9jb21tb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV90eXBlX2NvbW1vbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RyZWVfdHlwZV9jb21tb24obikgKChzdHJ1Y3QgdHJlZV90eXBlX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZV9jb21tb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RyZWVfdHlwZV9jb21tb24obikgKChzdHJ1Y3QgdHJlZV90eXBlX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV90eXBlX2NvbW1vbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdHJlZV90eXBlX3N5bXRhYigpICgodW5pb24gdHJlZV90eXBlX3N5bXRhYiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiB0cmVlX3R5cGVfc3ltdGFiKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfdHlwZV9zeW10YWIoKSAoKHVuaW9uIHRyZWVfdHlwZV9zeW10YWIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiB0cmVlX3R5cGVfc3ltdGFiKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV90eXBlX3N5bXRhYihuKSAoKHVuaW9uIHRyZWVfdHlwZV9zeW10YWIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHRyZWVfdHlwZV9zeW10YWIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RyZWVfdHlwZV9zeW10YWIobikgKCh1bmlvbiB0cmVlX3R5cGVfc3ltdGFiICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHRyZWVfdHlwZV9zeW10YWIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2RpZV9zdHJ1Y3QoKSAoKHN0cnVjdCBkaWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkaWVfc3RydWN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2RpZV9zdHJ1Y3QoKSAoKHN0cnVjdCBkaWVfc3RydWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRpZV9zdHJ1Y3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kaWVfc3RydWN0KG4pICgoc3RydWN0IGRpZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBkaWVfc3RydWN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kaWVfc3RydWN0KG4pICgoc3RydWN0IGRpZV9zdHJ1Y3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGRpZV9zdHJ1Y3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfYmxvY2soKSAoKHN0cnVjdCB0cmVlX2Jsb2NrICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2Jsb2NrKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfYmxvY2soKSAoKHN0cnVjdCB0cmVlX2Jsb2NrICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfYmxvY2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2Jsb2NrKG4pICgoc3RydWN0IHRyZWVfYmxvY2sgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2Jsb2NrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2Jsb2NrKG4pICgoc3RydWN0IHRyZWVfYmxvY2sgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfYmxvY2spLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3ZhX2djXygpICgodmVjPHRyZWUsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzx0cmVlLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV92YV9nY18oKSAoKHZlYzx0cmVlLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzx0cmVlLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY190cmVlX3ZhX2djXyhuKSAoKHZlYzx0cmVlLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHRyZWUsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfdHJlZV92YV9nY18obikgKCh2ZWM8dHJlZSx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHRyZWUsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX29tcF9jbGF1c2UoKSAoKHN0cnVjdCB0cmVlX29tcF9jbGF1c2UgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfb21wX2NsYXVzZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX29tcF9jbGF1c2UoKSAoKHN0cnVjdCB0cmVlX29tcF9jbGF1c2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9vbXBfY2xhdXNlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9vbXBfY2xhdXNlKG4pICgoc3RydWN0IHRyZWVfb21wX2NsYXVzZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfb21wX2NsYXVzZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9vbXBfY2xhdXNlKG4pICgoc3RydWN0IHRyZWVfb21wX2NsYXVzZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9vbXBfY2xhdXNlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19waGlfYXJnX2QoKSAoKHN0cnVjdCBwaGlfYXJnX2QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBoaV9hcmdfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9waGlfYXJnX2QoKSAoKHN0cnVjdCBwaGlfYXJnX2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGhpX2FyZ19kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcGhpX2FyZ19kKG4pICgoc3RydWN0IHBoaV9hcmdfZCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHBoaV9hcmdfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcGhpX2FyZ19kKG4pICgoc3RydWN0IHBoaV9hcmdfZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcGhpX2FyZ19kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX3NzYV9uYW1lKCkgKChzdHJ1Y3QgdHJlZV9zc2FfbmFtZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zc2FfbmFtZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3NzYV9uYW1lKCkgKChzdHJ1Y3QgdHJlZV9zc2FfbmFtZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3NzYV9uYW1lKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9zc2FfbmFtZShuKSAoKHN0cnVjdCB0cmVlX3NzYV9uYW1lICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zc2FfbmFtZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9zc2FfbmFtZShuKSAoKHN0cnVjdCB0cmVlX3NzYV9uYW1lICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3NzYV9uYW1lKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19zc2FfdXNlX29wZXJhbmRfZCgpICgoc3RydWN0IHNzYV91c2Vfb3BlcmFuZF9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzc2FfdXNlX29wZXJhbmRfZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9zc2FfdXNlX29wZXJhbmRfZCgpICgoc3RydWN0IHNzYV91c2Vfb3BlcmFuZF9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNzYV91c2Vfb3BlcmFuZF9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfc3NhX3VzZV9vcGVyYW5kX2QobikgKChzdHJ1Y3Qgc3NhX3VzZV9vcGVyYW5kX2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzc2FfdXNlX29wZXJhbmRfZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfc3NhX3VzZV9vcGVyYW5kX2QobikgKChzdHJ1Y3Qgc3NhX3VzZV9vcGVyYW5kX2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNzYV91c2Vfb3BlcmFuZF9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19wdHJfaW5mb19kZWYoKSAoKHN0cnVjdCBwdHJfaW5mb19kZWYgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHB0cl9pbmZvX2RlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wdHJfaW5mb19kZWYoKSAoKHN0cnVjdCBwdHJfaW5mb19kZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcHRyX2luZm9fZGVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcHRyX2luZm9fZGVmKG4pICgoc3RydWN0IHB0cl9pbmZvX2RlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHB0cl9pbmZvX2RlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcHRyX2luZm9fZGVmKG4pICgoc3RydWN0IHB0cl9pbmZvX2RlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcHRyX2luZm9fZGVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2V4cCgpICgoc3RydWN0IHRyZWVfZXhwICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2V4cCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2V4cCgpICgoc3RydWN0IHRyZWVfZXhwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZXhwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZV9leHAobikgKChzdHJ1Y3QgdHJlZV9leHAgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2V4cCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9leHAobikgKChzdHJ1Y3QgdHJlZV9leHAgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZXhwKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190cmVlX2V4cF9zdWJ1bmlvbigpICgodW5pb24gdHJlZV9leHBfc3VidW5pb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gdHJlZV9leHBfc3VidW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdHJlZV9leHBfc3VidW5pb24oKSAoKHVuaW9uIHRyZWVfZXhwX3N1YnVuaW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gdHJlZV9leHBfc3VidW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2V4cF9zdWJ1bmlvbihuKSAoKHVuaW9uIHRyZWVfZXhwX3N1YnVuaW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiB0cmVlX2V4cF9zdWJ1bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdHJlZV9leHBfc3VidW5pb24obikgKCh1bmlvbiB0cmVlX2V4cF9zdWJ1bmlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiB0cmVlX2V4cF9zdWJ1bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdHJlZV9jb25zdHJ1Y3RvcigpICgoc3RydWN0IHRyZWVfY29uc3RydWN0b3IgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfY29uc3RydWN0b3IpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdHJlZV9jb25zdHJ1Y3RvcigpICgoc3RydWN0IHRyZWVfY29uc3RydWN0b3IgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb25zdHJ1Y3RvcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RyZWVfY29uc3RydWN0b3IobikgKChzdHJ1Y3QgdHJlZV9jb25zdHJ1Y3RvciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfY29uc3RydWN0b3IpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RyZWVfY29uc3RydWN0b3IobikgKChzdHJ1Y3QgdHJlZV9jb25zdHJ1Y3RvciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb25zdHJ1Y3RvciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbnN0cnVjdG9yX2VsdF92YV9nY18oKSAoKHZlYzxjb25zdHJ1Y3Rvcl9lbHQsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjb25zdHJ1Y3Rvcl9lbHQsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb25zdHJ1Y3Rvcl9lbHRfdmFfZ2NfKCkgKCh2ZWM8Y29uc3RydWN0b3JfZWx0LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxjb25zdHJ1Y3Rvcl9lbHQsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX2NvbnN0cnVjdG9yX2VsdF92YV9nY18obikgKCh2ZWM8Y29uc3RydWN0b3JfZWx0LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGNvbnN0cnVjdG9yX2VsdCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19jb25zdHJ1Y3Rvcl9lbHRfdmFfZ2NfKG4pICgodmVjPGNvbnN0cnVjdG9yX2VsdCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGNvbnN0cnVjdG9yX2VsdCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvbnN0cnVjdG9yX2VsdF9kKCkgKChzdHJ1Y3QgY29uc3RydWN0b3JfZWx0X2QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbnN0cnVjdG9yX2VsdF9kKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NvbnN0cnVjdG9yX2VsdF9kKCkgKChzdHJ1Y3QgY29uc3RydWN0b3JfZWx0X2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29uc3RydWN0b3JfZWx0X2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb25zdHJ1Y3Rvcl9lbHRfZChuKSAoKHN0cnVjdCBjb25zdHJ1Y3Rvcl9lbHRfZCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvbnN0cnVjdG9yX2VsdF9kKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb25zdHJ1Y3Rvcl9lbHRfZChuKSAoKHN0cnVjdCBjb25zdHJ1Y3Rvcl9lbHRfZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29uc3RydWN0b3JfZWx0X2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfdmVjKCkgKChzdHJ1Y3QgdHJlZV92ZWMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdmVjKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfdmVjKCkgKChzdHJ1Y3QgdHJlZV92ZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV92ZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3ZlYyhuKSAoKHN0cnVjdCB0cmVlX3ZlYyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdmVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3ZlYyhuKSAoKHN0cnVjdCB0cmVlX3ZlYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV92ZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfbGlzdCgpICgoc3RydWN0IHRyZWVfbGlzdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9saXN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfbGlzdCgpICgoc3RydWN0IHRyZWVfbGlzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2xpc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2xpc3QobikgKChzdHJ1Y3QgdHJlZV9saXN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9saXN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2xpc3QobikgKChzdHJ1Y3QgdHJlZV9saXN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2xpc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfaWRlbnRpZmllcigpICgoc3RydWN0IHRyZWVfaWRlbnRpZmllciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9pZGVudGlmaWVyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfaWRlbnRpZmllcigpICgoc3RydWN0IHRyZWVfaWRlbnRpZmllciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2lkZW50aWZpZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2lkZW50aWZpZXIobikgKChzdHJ1Y3QgdHJlZV9pZGVudGlmaWVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9pZGVudGlmaWVyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2lkZW50aWZpZXIobikgKChzdHJ1Y3QgdHJlZV9pZGVudGlmaWVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2lkZW50aWZpZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfdmVjdG9yKCkgKChzdHJ1Y3QgdHJlZV92ZWN0b3IgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdmVjdG9yKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfdmVjdG9yKCkgKChzdHJ1Y3QgdHJlZV92ZWN0b3IgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV92ZWN0b3IpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3ZlY3RvcihuKSAoKHN0cnVjdCB0cmVlX3ZlY3RvciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdmVjdG9yKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3ZlY3RvcihuKSAoKHN0cnVjdCB0cmVlX3ZlY3RvciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV92ZWN0b3IpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfY29tcGxleCgpICgoc3RydWN0IHRyZWVfY29tcGxleCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21wbGV4KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfY29tcGxleCgpICgoc3RydWN0IHRyZWVfY29tcGxleCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2NvbXBsZXgpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2NvbXBsZXgobikgKChzdHJ1Y3QgdHJlZV9jb21wbGV4ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21wbGV4KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2NvbXBsZXgobikgKChzdHJ1Y3QgdHJlZV9jb21wbGV4ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2NvbXBsZXgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfc3RyaW5nKCkgKChzdHJ1Y3QgdHJlZV9zdHJpbmcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfc3RyaW5nKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfc3RyaW5nKCkgKChzdHJ1Y3QgdHJlZV9zdHJpbmcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zdHJpbmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3N0cmluZyhuKSAoKHN0cnVjdCB0cmVlX3N0cmluZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfc3RyaW5nKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3N0cmluZyhuKSAoKHN0cnVjdCB0cmVlX3N0cmluZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9zdHJpbmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfZml4ZWRfY3N0KCkgKChzdHJ1Y3QgdHJlZV9maXhlZF9jc3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZml4ZWRfY3N0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfZml4ZWRfY3N0KCkgKChzdHJ1Y3QgdHJlZV9maXhlZF9jc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9maXhlZF9jc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2ZpeGVkX2NzdChuKSAoKHN0cnVjdCB0cmVlX2ZpeGVkX2NzdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfZml4ZWRfY3N0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2ZpeGVkX2NzdChuKSAoKHN0cnVjdCB0cmVlX2ZpeGVkX2NzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9maXhlZF9jc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfcmVhbF9jc3QoKSAoKHN0cnVjdCB0cmVlX3JlYWxfY3N0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3JlYWxfY3N0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfcmVhbF9jc3QoKSAoKHN0cnVjdCB0cmVlX3JlYWxfY3N0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfcmVhbF9jc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3JlYWxfY3N0KG4pICgoc3RydWN0IHRyZWVfcmVhbF9jc3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3JlYWxfY3N0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3JlYWxfY3N0KG4pICgoc3RydWN0IHRyZWVfcmVhbF9jc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfcmVhbF9jc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfaW50X2NzdCgpICgoc3RydWN0IHRyZWVfaW50X2NzdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9pbnRfY3N0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfaW50X2NzdCgpICgoc3RydWN0IHRyZWVfaW50X2NzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2ludF9jc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2ludF9jc3QobikgKChzdHJ1Y3QgdHJlZV9pbnRfY3N0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9pbnRfY3N0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2ludF9jc3QobikgKChzdHJ1Y3QgdHJlZV9pbnRfY3N0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2ludF9jc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfY29tbW9uKCkgKChzdHJ1Y3QgdHJlZV9jb21tb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfY29tbW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfY29tbW9uKCkgKChzdHJ1Y3QgdHJlZV9jb21tb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21tb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2NvbW1vbihuKSAoKHN0cnVjdCB0cmVlX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfY29tbW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2NvbW1vbihuKSAoKHN0cnVjdCB0cmVlX2NvbW1vbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21tb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfdHlwZWQoKSAoKHN0cnVjdCB0cmVlX3R5cGVkICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3R5cGVkKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfdHlwZWQoKSAoKHN0cnVjdCB0cmVlX3R5cGVkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX3R5cGVkKG4pICgoc3RydWN0IHRyZWVfdHlwZWQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX3R5cGVkKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3R5cGVkKG4pICgoc3RydWN0IHRyZWVfdHlwZWQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHRyZWVfdHlwZWQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfYmFzZSgpICgoc3RydWN0IHRyZWVfYmFzZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9iYXNlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfYmFzZSgpICgoc3RydWN0IHRyZWVfYmFzZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2Jhc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX2Jhc2UobikgKChzdHJ1Y3QgdHJlZV9iYXNlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdHJlZV9iYXNlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2Jhc2UobikgKChzdHJ1Y3QgdHJlZV9iYXNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0cmVlX2Jhc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19hbGlhc19wYWlyX3ZhX2djXygpICgodmVjPGFsaWFzX3BhaXIsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxhbGlhc19wYWlyLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYWxpYXNfcGFpcl92YV9nY18oKSAoKHZlYzxhbGlhc19wYWlyLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxhbGlhc19wYWlyLHZhX2djPikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3ZlY19hbGlhc19wYWlyX3ZhX2djXyhuKSAoKHZlYzxhbGlhc19wYWlyLHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGFsaWFzX3BhaXIsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY192ZWNfYWxpYXNfcGFpcl92YV9nY18obikgKCh2ZWM8YWxpYXNfcGFpcix2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPGFsaWFzX3BhaXIsdmFfZ2M+KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19hbGlhc19wYWlyKCkgKChzdHJ1Y3QgYWxpYXNfcGFpciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfcGFpcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9hbGlhc19wYWlyKCkgKChzdHJ1Y3QgYWxpYXNfcGFpciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhbGlhc19wYWlyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfYWxpYXNfcGFpcihuKSAoKHN0cnVjdCBhbGlhc19wYWlyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfcGFpciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYWxpYXNfcGFpcihuKSAoKHN0cnVjdCBhbGlhc19wYWlyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhbGlhc19wYWlyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY190YXJnZXRfcnRsKCkgKChzdHJ1Y3QgdGFyZ2V0X3J0bCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGFyZ2V0X3J0bCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90YXJnZXRfcnRsKCkgKChzdHJ1Y3QgdGFyZ2V0X3J0bCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0YXJnZXRfcnRsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdGFyZ2V0X3J0bChuKSAoKHN0cnVjdCB0YXJnZXRfcnRsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgdGFyZ2V0X3J0bCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdGFyZ2V0X3J0bChuKSAoKHN0cnVjdCB0YXJnZXRfcnRsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCB0YXJnZXRfcnRsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19mdW5jdGlvbigpICgoc3RydWN0IGZ1bmN0aW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBmdW5jdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9mdW5jdGlvbigpICgoc3RydWN0IGZ1bmN0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGZ1bmN0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZnVuY3Rpb24obikgKChzdHJ1Y3QgZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBmdW5jdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZnVuY3Rpb24obikgKChzdHJ1Y3QgZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGZ1bmN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19ydHhfZGVmX3N1YnVuaW9uKCkgKCh1bmlvbiBydHhfZGVmX3N1YnVuaW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHJ0eF9kZWZfc3VidW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zdWJ1bmlvbigpICgodW5pb24gcnR4X2RlZl9zdWJ1bmlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHJ0eF9kZWZfc3VidW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3N1YnVuaW9uKG4pICgodW5pb24gcnR4X2RlZl9zdWJ1bmlvbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gcnR4X2RlZl9zdWJ1bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcnR4X2RlZl9zdWJ1bmlvbihuKSAoKHVuaW9uIHJ0eF9kZWZfc3VidW5pb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gcnR4X2RlZl9zdWJ1bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9kZWJ1Z19wYXJhbWV0ZXJfcmVmKCkgKChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19wYXJhbWV0ZXJfcmVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RlYnVnX3BhcmFtZXRlcl9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9kZWJ1Z19wYXJhbWV0ZXJfcmVmKCkgKChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19wYXJhbWV0ZXJfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZGVidWdfcGFyYW1ldGVyX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZGVidWdfcGFyYW1ldGVyX3JlZihuKSAoKHN0cnVjdCBydHhfZGVmX2RlYnVnX3BhcmFtZXRlcl9yZWYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RlYnVnX3BhcmFtZXRlcl9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZGVidWdfcGFyYW1ldGVyX3JlZihuKSAoKHN0cnVjdCBydHhfZGVmX2RlYnVnX3BhcmFtZXRlcl9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZGVidWdfcGFyYW1ldGVyX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9lbnRyeV92YWx1ZSgpICgoc3RydWN0IHJ0eF9kZWZfZW50cnlfdmFsdWUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZW50cnlfdmFsdWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9lbnRyeV92YWx1ZSgpICgoc3RydWN0IHJ0eF9kZWZfZW50cnlfdmFsdWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9lbnRyeV92YWx1ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZW50cnlfdmFsdWUobikgKChzdHJ1Y3QgcnR4X2RlZl9lbnRyeV92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZW50cnlfdmFsdWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZW50cnlfdmFsdWUobikgKChzdHJ1Y3QgcnR4X2RlZl9lbnRyeV92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9lbnRyeV92YWx1ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9kZWJ1Z19pbXBsaWNpdF9wdHIoKSAoKHN0cnVjdCBydHhfZGVmX2RlYnVnX2ltcGxpY2l0X3B0ciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19pbXBsaWNpdF9wdHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9kZWJ1Z19pbXBsaWNpdF9wdHIoKSAoKHN0cnVjdCBydHhfZGVmX2RlYnVnX2ltcGxpY2l0X3B0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RlYnVnX2ltcGxpY2l0X3B0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZGVidWdfaW1wbGljaXRfcHRyKG4pICgoc3RydWN0IHJ0eF9kZWZfZGVidWdfaW1wbGljaXRfcHRyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19pbXBsaWNpdF9wdHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZGVidWdfaW1wbGljaXRfcHRyKG4pICgoc3RydWN0IHJ0eF9kZWZfZGVidWdfaW1wbGljaXRfcHRyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RlYnVnX2ltcGxpY2l0X3B0ciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl92YXJfbG9jYXRpb24oKSAoKHN0cnVjdCBydHhfZGVmX3Zhcl9sb2NhdGlvbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl92YXJfbG9jYXRpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl92YXJfbG9jYXRpb24oKSAoKHN0cnVjdCBydHhfZGVmX3Zhcl9sb2NhdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Zhcl9sb2NhdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdmFyX2xvY2F0aW9uKG4pICgoc3RydWN0IHJ0eF9kZWZfdmFyX2xvY2F0aW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl92YXJfbG9jYXRpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdmFyX2xvY2F0aW9uKG4pICgoc3RydWN0IHJ0eF9kZWZfdmFyX2xvY2F0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Zhcl9sb2NhdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9mbWEoKSAoKHN0cnVjdCBydHhfZGVmX2ZtYSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mbWEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9mbWEoKSAoKHN0cnVjdCBydHhfZGVmX2ZtYSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2ZtYSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZm1hKG4pICgoc3RydWN0IHJ0eF9kZWZfZm1hICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mbWEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZm1hKG4pICgoc3RydWN0IHJ0eF9kZWZfZm1hICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2ZtYSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91c190cnVuY2F0ZSgpICgoc3RydWN0IHJ0eF9kZWZfdXNfdHJ1bmNhdGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNfdHJ1bmNhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91c190cnVuY2F0ZSgpICgoc3RydWN0IHJ0eF9kZWZfdXNfdHJ1bmNhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c190cnVuY2F0ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdXNfdHJ1bmNhdGUobikgKChzdHJ1Y3QgcnR4X2RlZl91c190cnVuY2F0ZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNfdHJ1bmNhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdXNfdHJ1bmNhdGUobikgKChzdHJ1Y3QgcnR4X2RlZl91c190cnVuY2F0ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c190cnVuY2F0ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zc190cnVuY2F0ZSgpICgoc3RydWN0IHJ0eF9kZWZfc3NfdHJ1bmNhdGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3NfdHJ1bmNhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zc190cnVuY2F0ZSgpICgoc3RydWN0IHJ0eF9kZWZfc3NfdHJ1bmNhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc190cnVuY2F0ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3NfdHJ1bmNhdGUobikgKChzdHJ1Y3QgcnR4X2RlZl9zc190cnVuY2F0ZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3NfdHJ1bmNhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3NfdHJ1bmNhdGUobikgKChzdHJ1Y3QgcnR4X2RlZl9zc190cnVuY2F0ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc190cnVuY2F0ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91c19taW51cygpICgoc3RydWN0IHJ0eF9kZWZfdXNfbWludXMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNfbWludXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91c19taW51cygpICgoc3RydWN0IHJ0eF9kZWZfdXNfbWludXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c19taW51cykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdXNfbWludXMobikgKChzdHJ1Y3QgcnR4X2RlZl91c19taW51cyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNfbWludXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdXNfbWludXMobikgKChzdHJ1Y3QgcnR4X2RlZl91c19taW51cyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c19taW51cyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91c19hc2hpZnQoKSAoKHN0cnVjdCBydHhfZGVmX3VzX2FzaGlmdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c19hc2hpZnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91c19hc2hpZnQoKSAoKHN0cnVjdCBydHhfZGVmX3VzX2FzaGlmdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX2FzaGlmdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdXNfYXNoaWZ0KG4pICgoc3RydWN0IHJ0eF9kZWZfdXNfYXNoaWZ0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c19hc2hpZnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdXNfYXNoaWZ0KG4pICgoc3RydWN0IHJ0eF9kZWZfdXNfYXNoaWZ0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX2FzaGlmdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zc19hc2hpZnQoKSAoKHN0cnVjdCBydHhfZGVmX3NzX2FzaGlmdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19hc2hpZnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zc19hc2hpZnQoKSAoKHN0cnVjdCBydHhfZGVmX3NzX2FzaGlmdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX2FzaGlmdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3NfYXNoaWZ0KG4pICgoc3RydWN0IHJ0eF9kZWZfc3NfYXNoaWZ0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19hc2hpZnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3NfYXNoaWZ0KG4pICgoc3RydWN0IHJ0eF9kZWZfc3NfYXNoaWZ0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX2FzaGlmdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zc19hYnMoKSAoKHN0cnVjdCBydHhfZGVmX3NzX2FicyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19hYnMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zc19hYnMoKSAoKHN0cnVjdCBydHhfZGVmX3NzX2FicyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX2FicykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3NfYWJzKG4pICgoc3RydWN0IHJ0eF9kZWZfc3NfYWJzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19hYnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3NfYWJzKG4pICgoc3RydWN0IHJ0eF9kZWZfc3NfYWJzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX2FicyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91c19uZWcoKSAoKHN0cnVjdCBydHhfZGVmX3VzX25lZyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c19uZWcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91c19uZWcoKSAoKHN0cnVjdCBydHhfZGVmX3VzX25lZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX25lZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdXNfbmVnKG4pICgoc3RydWN0IHJ0eF9kZWZfdXNfbmVnICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c19uZWcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdXNfbmVnKG4pICgoc3RydWN0IHJ0eF9kZWZfdXNfbmVnICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX25lZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zc19uZWcoKSAoKHN0cnVjdCBydHhfZGVmX3NzX25lZyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19uZWcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zc19uZWcoKSAoKHN0cnVjdCBydHhfZGVmX3NzX25lZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX25lZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3NfbmVnKG4pICgoc3RydWN0IHJ0eF9kZWZfc3NfbmVnICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19uZWcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3NfbmVnKG4pICgoc3RydWN0IHJ0eF9kZWZfc3NfbmVnICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX25lZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zc19taW51cygpICgoc3RydWN0IHJ0eF9kZWZfc3NfbWludXMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3NfbWludXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zc19taW51cygpICgoc3RydWN0IHJ0eF9kZWZfc3NfbWludXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19taW51cykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3NfbWludXMobikgKChzdHJ1Y3QgcnR4X2RlZl9zc19taW51cyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3NfbWludXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3NfbWludXMobikgKChzdHJ1Y3QgcnR4X2RlZl9zc19taW51cyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19taW51cyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91c19wbHVzKCkgKChzdHJ1Y3QgcnR4X2RlZl91c19wbHVzICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX3BsdXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91c19wbHVzKCkgKChzdHJ1Y3QgcnR4X2RlZl91c19wbHVzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNfcGx1cykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdXNfcGx1cyhuKSAoKHN0cnVjdCBydHhfZGVmX3VzX3BsdXMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX3BsdXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdXNfcGx1cyhuKSAoKHN0cnVjdCBydHhfZGVmX3VzX3BsdXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNfcGx1cyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zc19wbHVzKCkgKChzdHJ1Y3QgcnR4X2RlZl9zc19wbHVzICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX3BsdXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zc19wbHVzKCkgKChzdHJ1Y3QgcnR4X2RlZl9zc19wbHVzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3NfcGx1cykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3NfcGx1cyhuKSAoKHN0cnVjdCBydHhfZGVmX3NzX3BsdXMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX3BsdXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3NfcGx1cyhuKSAoKHN0cnVjdCBydHhfZGVmX3NzX3BsdXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3NfcGx1cyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl92ZWNfZHVwbGljYXRlKCkgKChzdHJ1Y3QgcnR4X2RlZl92ZWNfZHVwbGljYXRlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZlY19kdXBsaWNhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl92ZWNfZHVwbGljYXRlKCkgKChzdHJ1Y3QgcnR4X2RlZl92ZWNfZHVwbGljYXRlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdmVjX2R1cGxpY2F0ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdmVjX2R1cGxpY2F0ZShuKSAoKHN0cnVjdCBydHhfZGVmX3ZlY19kdXBsaWNhdGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZlY19kdXBsaWNhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdmVjX2R1cGxpY2F0ZShuKSAoKHN0cnVjdCBydHhfZGVmX3ZlY19kdXBsaWNhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdmVjX2R1cGxpY2F0ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl92ZWNfY29uY2F0KCkgKChzdHJ1Y3QgcnR4X2RlZl92ZWNfY29uY2F0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZlY19jb25jYXQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl92ZWNfY29uY2F0KCkgKChzdHJ1Y3QgcnR4X2RlZl92ZWNfY29uY2F0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdmVjX2NvbmNhdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdmVjX2NvbmNhdChuKSAoKHN0cnVjdCBydHhfZGVmX3ZlY19jb25jYXQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZlY19jb25jYXQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdmVjX2NvbmNhdChuKSAoKHN0cnVjdCBydHhfZGVmX3ZlY19jb25jYXQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdmVjX2NvbmNhdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl92ZWNfc2VsZWN0KCkgKChzdHJ1Y3QgcnR4X2RlZl92ZWNfc2VsZWN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZlY19zZWxlY3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl92ZWNfc2VsZWN0KCkgKChzdHJ1Y3QgcnR4X2RlZl92ZWNfc2VsZWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdmVjX3NlbGVjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdmVjX3NlbGVjdChuKSAoKHN0cnVjdCBydHhfZGVmX3ZlY19zZWxlY3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZlY19zZWxlY3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdmVjX3NlbGVjdChuKSAoKHN0cnVjdCBydHhfZGVmX3ZlY19zZWxlY3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdmVjX3NlbGVjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl92ZWNfbWVyZ2UoKSAoKHN0cnVjdCBydHhfZGVmX3ZlY19tZXJnZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl92ZWNfbWVyZ2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl92ZWNfbWVyZ2UoKSAoKHN0cnVjdCBydHhfZGVmX3ZlY19tZXJnZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZlY19tZXJnZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdmVjX21lcmdlKG4pICgoc3RydWN0IHJ0eF9kZWZfdmVjX21lcmdlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl92ZWNfbWVyZ2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdmVjX21lcmdlKG4pICgoc3RydWN0IHJ0eF9kZWZfdmVjX21lcmdlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZlY19tZXJnZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9sb19zdW0oKSAoKHN0cnVjdCBydHhfZGVmX2xvX3N1bSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sb19zdW0pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9sb19zdW0oKSAoKHN0cnVjdCBydHhfZGVmX2xvX3N1bSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2xvX3N1bSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbG9fc3VtKG4pICgoc3RydWN0IHJ0eF9kZWZfbG9fc3VtICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sb19zdW0pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbG9fc3VtKG4pICgoc3RydWN0IHJ0eF9kZWZfbG9fc3VtICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2xvX3N1bSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9oaWdoKCkgKChzdHJ1Y3QgcnR4X2RlZl9oaWdoICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2hpZ2gpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9oaWdoKCkgKChzdHJ1Y3QgcnR4X2RlZl9oaWdoICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfaGlnaCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfaGlnaChuKSAoKHN0cnVjdCBydHhfZGVmX2hpZ2ggKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2hpZ2gpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfaGlnaChuKSAoKHN0cnVjdCBydHhfZGVmX2hpZ2ggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfaGlnaCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl96ZXJvX2V4dHJhY3QoKSAoKHN0cnVjdCBydHhfZGVmX3plcm9fZXh0cmFjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl96ZXJvX2V4dHJhY3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl96ZXJvX2V4dHJhY3QoKSAoKHN0cnVjdCBydHhfZGVmX3plcm9fZXh0cmFjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3plcm9fZXh0cmFjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfemVyb19leHRyYWN0KG4pICgoc3RydWN0IHJ0eF9kZWZfemVyb19leHRyYWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl96ZXJvX2V4dHJhY3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfemVyb19leHRyYWN0KG4pICgoc3RydWN0IHJ0eF9kZWZfemVyb19leHRyYWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3plcm9fZXh0cmFjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zaWduX2V4dHJhY3QoKSAoKHN0cnVjdCBydHhfZGVmX3NpZ25fZXh0cmFjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zaWduX2V4dHJhY3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zaWduX2V4dHJhY3QoKSAoKHN0cnVjdCBydHhfZGVmX3NpZ25fZXh0cmFjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NpZ25fZXh0cmFjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc2lnbl9leHRyYWN0KG4pICgoc3RydWN0IHJ0eF9kZWZfc2lnbl9leHRyYWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zaWduX2V4dHJhY3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc2lnbl9leHRyYWN0KG4pICgoc3RydWN0IHJ0eF9kZWZfc2lnbl9leHRyYWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NpZ25fZXh0cmFjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wYXJpdHkoKSAoKHN0cnVjdCBydHhfZGVmX3Bhcml0eSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wYXJpdHkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wYXJpdHkoKSAoKHN0cnVjdCBydHhfZGVmX3Bhcml0eSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Bhcml0eSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcGFyaXR5KG4pICgoc3RydWN0IHJ0eF9kZWZfcGFyaXR5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wYXJpdHkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcGFyaXR5KG4pICgoc3RydWN0IHJ0eF9kZWZfcGFyaXR5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Bhcml0eSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wb3Bjb3VudCgpICgoc3RydWN0IHJ0eF9kZWZfcG9wY291bnQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcG9wY291bnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wb3Bjb3VudCgpICgoc3RydWN0IHJ0eF9kZWZfcG9wY291bnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wb3Bjb3VudCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcG9wY291bnQobikgKChzdHJ1Y3QgcnR4X2RlZl9wb3Bjb3VudCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcG9wY291bnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcG9wY291bnQobikgKChzdHJ1Y3QgcnR4X2RlZl9wb3Bjb3VudCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wb3Bjb3VudCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9jdHooKSAoKHN0cnVjdCBydHhfZGVmX2N0eiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jdHopIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9jdHooKSAoKHN0cnVjdCBydHhfZGVmX2N0eiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2N0eikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfY3R6KG4pICgoc3RydWN0IHJ0eF9kZWZfY3R6ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jdHopLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfY3R6KG4pICgoc3RydWN0IHJ0eF9kZWZfY3R6ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2N0eiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9jbHooKSAoKHN0cnVjdCBydHhfZGVmX2NseiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jbHopIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9jbHooKSAoKHN0cnVjdCBydHhfZGVmX2NseiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NseikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfY2x6KG4pICgoc3RydWN0IHJ0eF9kZWZfY2x6ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jbHopLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfY2x6KG4pICgoc3RydWN0IHJ0eF9kZWZfY2x6ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NseiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9jbHJzYigpICgoc3RydWN0IHJ0eF9kZWZfY2xyc2IgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY2xyc2IpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9jbHJzYigpICgoc3RydWN0IHJ0eF9kZWZfY2xyc2IgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jbHJzYikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfY2xyc2IobikgKChzdHJ1Y3QgcnR4X2RlZl9jbHJzYiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY2xyc2IpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfY2xyc2IobikgKChzdHJ1Y3QgcnR4X2RlZl9jbHJzYiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jbHJzYiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9mZnMoKSAoKHN0cnVjdCBydHhfZGVmX2ZmcyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mZnMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9mZnMoKSAoKHN0cnVjdCBydHhfZGVmX2ZmcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2ZmcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZmZzKG4pICgoc3RydWN0IHJ0eF9kZWZfZmZzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mZnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZmZzKG4pICgoc3RydWN0IHJ0eF9kZWZfZmZzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2ZmcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9ic3dhcCgpICgoc3RydWN0IHJ0eF9kZWZfYnN3YXAgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYnN3YXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9ic3dhcCgpICgoc3RydWN0IHJ0eF9kZWZfYnN3YXAgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ic3dhcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfYnN3YXAobikgKChzdHJ1Y3QgcnR4X2RlZl9ic3dhcCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYnN3YXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfYnN3YXAobikgKChzdHJ1Y3QgcnR4X2RlZl9ic3dhcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ic3dhcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zcXJ0KCkgKChzdHJ1Y3QgcnR4X2RlZl9zcXJ0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NxcnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zcXJ0KCkgKChzdHJ1Y3QgcnR4X2RlZl9zcXJ0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3FydCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3FydChuKSAoKHN0cnVjdCBydHhfZGVmX3NxcnQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NxcnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3FydChuKSAoKHN0cnVjdCBydHhfZGVmX3NxcnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3FydCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9hYnMoKSAoKHN0cnVjdCBydHhfZGVmX2FicyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hYnMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9hYnMoKSAoKHN0cnVjdCBydHhfZGVmX2FicyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FicykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfYWJzKG4pICgoc3RydWN0IHJ0eF9kZWZfYWJzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hYnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfYWJzKG4pICgoc3RydWN0IHJ0eF9kZWZfYWJzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FicyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bnNpZ25lZF9zYXRfZnJhY3QoKSAoKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX3NhdF9mcmFjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9zYXRfZnJhY3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bnNpZ25lZF9zYXRfZnJhY3QoKSAoKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX3NhdF9mcmFjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX3NhdF9mcmFjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5zaWduZWRfc2F0X2ZyYWN0KG4pICgoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfc2F0X2ZyYWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9zYXRfZnJhY3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5zaWduZWRfc2F0X2ZyYWN0KG4pICgoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfc2F0X2ZyYWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX3NhdF9mcmFjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zYXRfZnJhY3QoKSAoKHN0cnVjdCBydHhfZGVmX3NhdF9mcmFjdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zYXRfZnJhY3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zYXRfZnJhY3QoKSAoKHN0cnVjdCBydHhfZGVmX3NhdF9mcmFjdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NhdF9mcmFjdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc2F0X2ZyYWN0KG4pICgoc3RydWN0IHJ0eF9kZWZfc2F0X2ZyYWN0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zYXRfZnJhY3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc2F0X2ZyYWN0KG4pICgoc3RydWN0IHJ0eF9kZWZfc2F0X2ZyYWN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NhdF9mcmFjdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bnNpZ25lZF9mcmFjdF9jb252ZXJ0KCkgKChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9mcmFjdF9jb252ZXJ0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX2ZyYWN0X2NvbnZlcnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bnNpZ25lZF9mcmFjdF9jb252ZXJ0KCkgKChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9mcmFjdF9jb252ZXJ0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfZnJhY3RfY29udmVydCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5zaWduZWRfZnJhY3RfY29udmVydChuKSAoKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX2ZyYWN0X2NvbnZlcnQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX2ZyYWN0X2NvbnZlcnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5zaWduZWRfZnJhY3RfY29udmVydChuKSAoKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX2ZyYWN0X2NvbnZlcnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfZnJhY3RfY29udmVydCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9mcmFjdF9jb252ZXJ0KCkgKChzdHJ1Y3QgcnR4X2RlZl9mcmFjdF9jb252ZXJ0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2ZyYWN0X2NvbnZlcnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9mcmFjdF9jb252ZXJ0KCkgKChzdHJ1Y3QgcnR4X2RlZl9mcmFjdF9jb252ZXJ0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZnJhY3RfY29udmVydCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZnJhY3RfY29udmVydChuKSAoKHN0cnVjdCBydHhfZGVmX2ZyYWN0X2NvbnZlcnQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2ZyYWN0X2NvbnZlcnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZnJhY3RfY29udmVydChuKSAoKHN0cnVjdCBydHhfZGVmX2ZyYWN0X2NvbnZlcnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZnJhY3RfY29udmVydCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bnNpZ25lZF9maXgoKSAoKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX2ZpeCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9maXgpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bnNpZ25lZF9maXgoKSAoKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX2ZpeCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX2ZpeCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5zaWduZWRfZml4KG4pICgoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfZml4ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9maXgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5zaWduZWRfZml4KG4pICgoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfZml4ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vuc2lnbmVkX2ZpeCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bnNpZ25lZF9mbG9hdCgpICgoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfZmxvYXQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfZmxvYXQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bnNpZ25lZF9mbG9hdCgpICgoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfZmxvYXQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9mbG9hdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5zaWduZWRfZmxvYXQobikgKChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9mbG9hdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5zaWduZWRfZmxvYXQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5zaWduZWRfZmxvYXQobikgKChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9mbG9hdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNpZ25lZF9mbG9hdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9maXgoKSAoKHN0cnVjdCBydHhfZGVmX2ZpeCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9maXgpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9maXgoKSAoKHN0cnVjdCBydHhfZGVmX2ZpeCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2ZpeCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZml4KG4pICgoc3RydWN0IHJ0eF9kZWZfZml4ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9maXgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZml4KG4pICgoc3RydWN0IHJ0eF9kZWZfZml4ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2ZpeCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9mbG9hdCgpICgoc3RydWN0IHJ0eF9kZWZfZmxvYXQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZmxvYXQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9mbG9hdCgpICgoc3RydWN0IHJ0eF9kZWZfZmxvYXQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mbG9hdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZmxvYXQobikgKChzdHJ1Y3QgcnR4X2RlZl9mbG9hdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZmxvYXQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZmxvYXQobikgKChzdHJ1Y3QgcnR4X2RlZl9mbG9hdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mbG9hdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9mbG9hdF90cnVuY2F0ZSgpICgoc3RydWN0IHJ0eF9kZWZfZmxvYXRfdHJ1bmNhdGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZmxvYXRfdHJ1bmNhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9mbG9hdF90cnVuY2F0ZSgpICgoc3RydWN0IHJ0eF9kZWZfZmxvYXRfdHJ1bmNhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mbG9hdF90cnVuY2F0ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZmxvYXRfdHJ1bmNhdGUobikgKChzdHJ1Y3QgcnR4X2RlZl9mbG9hdF90cnVuY2F0ZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZmxvYXRfdHJ1bmNhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZmxvYXRfdHJ1bmNhdGUobikgKChzdHJ1Y3QgcnR4X2RlZl9mbG9hdF90cnVuY2F0ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mbG9hdF90cnVuY2F0ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9mbG9hdF9leHRlbmQoKSAoKHN0cnVjdCBydHhfZGVmX2Zsb2F0X2V4dGVuZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mbG9hdF9leHRlbmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9mbG9hdF9leHRlbmQoKSAoKHN0cnVjdCBydHhfZGVmX2Zsb2F0X2V4dGVuZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2Zsb2F0X2V4dGVuZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZmxvYXRfZXh0ZW5kKG4pICgoc3RydWN0IHJ0eF9kZWZfZmxvYXRfZXh0ZW5kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9mbG9hdF9leHRlbmQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZmxvYXRfZXh0ZW5kKG4pICgoc3RydWN0IHJ0eF9kZWZfZmxvYXRfZXh0ZW5kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2Zsb2F0X2V4dGVuZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl90cnVuY2F0ZSgpICgoc3RydWN0IHJ0eF9kZWZfdHJ1bmNhdGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdHJ1bmNhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl90cnVuY2F0ZSgpICgoc3RydWN0IHJ0eF9kZWZfdHJ1bmNhdGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl90cnVuY2F0ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdHJ1bmNhdGUobikgKChzdHJ1Y3QgcnR4X2RlZl90cnVuY2F0ZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdHJ1bmNhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdHJ1bmNhdGUobikgKChzdHJ1Y3QgcnR4X2RlZl90cnVuY2F0ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl90cnVuY2F0ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl96ZXJvX2V4dGVuZCgpICgoc3RydWN0IHJ0eF9kZWZfemVyb19leHRlbmQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfemVyb19leHRlbmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl96ZXJvX2V4dGVuZCgpICgoc3RydWN0IHJ0eF9kZWZfemVyb19leHRlbmQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl96ZXJvX2V4dGVuZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfemVyb19leHRlbmQobikgKChzdHJ1Y3QgcnR4X2RlZl96ZXJvX2V4dGVuZCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfemVyb19leHRlbmQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfemVyb19leHRlbmQobikgKChzdHJ1Y3QgcnR4X2RlZl96ZXJvX2V4dGVuZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl96ZXJvX2V4dGVuZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zaWduX2V4dGVuZCgpICgoc3RydWN0IHJ0eF9kZWZfc2lnbl9leHRlbmQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc2lnbl9leHRlbmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zaWduX2V4dGVuZCgpICgoc3RydWN0IHJ0eF9kZWZfc2lnbl9leHRlbmQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zaWduX2V4dGVuZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc2lnbl9leHRlbmQobikgKChzdHJ1Y3QgcnR4X2RlZl9zaWduX2V4dGVuZCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc2lnbl9leHRlbmQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc2lnbl9leHRlbmQobikgKChzdHJ1Y3QgcnR4X2RlZl9zaWduX2V4dGVuZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zaWduX2V4dGVuZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9sdGd0KCkgKChzdHJ1Y3QgcnR4X2RlZl9sdGd0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2x0Z3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9sdGd0KCkgKChzdHJ1Y3QgcnR4X2RlZl9sdGd0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbHRndCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbHRndChuKSAoKHN0cnVjdCBydHhfZGVmX2x0Z3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2x0Z3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbHRndChuKSAoKHN0cnVjdCBydHhfZGVmX2x0Z3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbHRndCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bmx0KCkgKChzdHJ1Y3QgcnR4X2RlZl91bmx0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VubHQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bmx0KCkgKChzdHJ1Y3QgcnR4X2RlZl91bmx0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5sdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5sdChuKSAoKHN0cnVjdCBydHhfZGVmX3VubHQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VubHQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5sdChuKSAoKHN0cnVjdCBydHhfZGVmX3VubHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5sdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bmxlKCkgKChzdHJ1Y3QgcnR4X2RlZl91bmxlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VubGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bmxlKCkgKChzdHJ1Y3QgcnR4X2RlZl91bmxlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5sZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5sZShuKSAoKHN0cnVjdCBydHhfZGVmX3VubGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VubGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5sZShuKSAoKHN0cnVjdCBydHhfZGVmX3VubGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5sZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bmd0KCkgKChzdHJ1Y3QgcnR4X2RlZl91bmd0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VuZ3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bmd0KCkgKChzdHJ1Y3QgcnR4X2RlZl91bmd0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5ndCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5ndChuKSAoKHN0cnVjdCBydHhfZGVmX3VuZ3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VuZ3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5ndChuKSAoKHN0cnVjdCBydHhfZGVmX3VuZ3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5ndCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bmdlKCkgKChzdHJ1Y3QgcnR4X2RlZl91bmdlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VuZ2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bmdlKCkgKChzdHJ1Y3QgcnR4X2RlZl91bmdlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5nZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5nZShuKSAoKHN0cnVjdCBydHhfZGVmX3VuZ2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VuZ2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5nZShuKSAoKHN0cnVjdCBydHhfZGVmX3VuZ2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5nZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bmVxKCkgKChzdHJ1Y3QgcnR4X2RlZl91bmVxICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VuZXEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bmVxKCkgKChzdHJ1Y3QgcnR4X2RlZl91bmVxICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5lcSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5lcShuKSAoKHN0cnVjdCBydHhfZGVmX3VuZXEgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VuZXEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5lcShuKSAoKHN0cnVjdCBydHhfZGVmX3VuZXEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5lcSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9vcmRlcmVkKCkgKChzdHJ1Y3QgcnR4X2RlZl9vcmRlcmVkICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX29yZGVyZWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9vcmRlcmVkKCkgKChzdHJ1Y3QgcnR4X2RlZl9vcmRlcmVkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfb3JkZXJlZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfb3JkZXJlZChuKSAoKHN0cnVjdCBydHhfZGVmX29yZGVyZWQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX29yZGVyZWQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfb3JkZXJlZChuKSAoKHN0cnVjdCBydHhfZGVmX29yZGVyZWQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfb3JkZXJlZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bm9yZGVyZWQoKSAoKHN0cnVjdCBydHhfZGVmX3Vub3JkZXJlZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bm9yZGVyZWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bm9yZGVyZWQoKSAoKHN0cnVjdCBydHhfZGVmX3Vub3JkZXJlZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vub3JkZXJlZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW5vcmRlcmVkKG4pICgoc3RydWN0IHJ0eF9kZWZfdW5vcmRlcmVkICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bm9yZGVyZWQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW5vcmRlcmVkKG4pICgoc3RydWN0IHJ0eF9kZWZfdW5vcmRlcmVkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vub3JkZXJlZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9sdHUoKSAoKHN0cnVjdCBydHhfZGVmX2x0dSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sdHUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9sdHUoKSAoKHN0cnVjdCBydHhfZGVmX2x0dSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2x0dSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbHR1KG4pICgoc3RydWN0IHJ0eF9kZWZfbHR1ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sdHUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbHR1KG4pICgoc3RydWN0IHJ0eF9kZWZfbHR1ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2x0dSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9sZXUoKSAoKHN0cnVjdCBydHhfZGVmX2xldSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sZXUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9sZXUoKSAoKHN0cnVjdCBydHhfZGVmX2xldSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2xldSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbGV1KG4pICgoc3RydWN0IHJ0eF9kZWZfbGV1ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sZXUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbGV1KG4pICgoc3RydWN0IHJ0eF9kZWZfbGV1ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2xldSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9ndHUoKSAoKHN0cnVjdCBydHhfZGVmX2d0dSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ndHUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9ndHUoKSAoKHN0cnVjdCBydHhfZGVmX2d0dSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2d0dSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZ3R1KG4pICgoc3RydWN0IHJ0eF9kZWZfZ3R1ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ndHUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZ3R1KG4pICgoc3RydWN0IHJ0eF9kZWZfZ3R1ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2d0dSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9nZXUoKSAoKHN0cnVjdCBydHhfZGVmX2dldSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9nZXUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9nZXUoKSAoKHN0cnVjdCBydHhfZGVmX2dldSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2dldSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZ2V1KG4pICgoc3RydWN0IHJ0eF9kZWZfZ2V1ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9nZXUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZ2V1KG4pICgoc3RydWN0IHJ0eF9kZWZfZ2V1ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2dldSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9sdCgpICgoc3RydWN0IHJ0eF9kZWZfbHQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbHQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9sdCgpICgoc3RydWN0IHJ0eF9kZWZfbHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbHQobikgKChzdHJ1Y3QgcnR4X2RlZl9sdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbHQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbHQobikgKChzdHJ1Y3QgcnR4X2RlZl9sdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9sZSgpICgoc3RydWN0IHJ0eF9kZWZfbGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9sZSgpICgoc3RydWN0IHJ0eF9kZWZfbGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbGUobikgKChzdHJ1Y3QgcnR4X2RlZl9sZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbGUobikgKChzdHJ1Y3QgcnR4X2RlZl9sZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9ndCgpICgoc3RydWN0IHJ0eF9kZWZfZ3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZ3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9ndCgpICgoc3RydWN0IHJ0eF9kZWZfZ3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ndCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZ3QobikgKChzdHJ1Y3QgcnR4X2RlZl9ndCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZ3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZ3QobikgKChzdHJ1Y3QgcnR4X2RlZl9ndCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ndCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9nZSgpICgoc3RydWN0IHJ0eF9kZWZfZ2UgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZ2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9nZSgpICgoc3RydWN0IHJ0eF9kZWZfZ2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9nZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZ2UobikgKChzdHJ1Y3QgcnR4X2RlZl9nZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZ2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZ2UobikgKChzdHJ1Y3QgcnR4X2RlZl9nZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9nZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9lcSgpICgoc3RydWN0IHJ0eF9kZWZfZXEgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZXEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9lcSgpICgoc3RydWN0IHJ0eF9kZWZfZXEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9lcSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZXEobikgKChzdHJ1Y3QgcnR4X2RlZl9lcSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZXEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZXEobikgKChzdHJ1Y3QgcnR4X2RlZl9lcSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9lcSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9uZSgpICgoc3RydWN0IHJ0eF9kZWZfbmUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbmUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9uZSgpICgoc3RydWN0IHJ0eF9kZWZfbmUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9uZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbmUobikgKChzdHJ1Y3QgcnR4X2RlZl9uZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbmUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbmUobikgKChzdHJ1Y3QgcnR4X2RlZl9uZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9uZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wb3N0X21vZGlmeSgpICgoc3RydWN0IHJ0eF9kZWZfcG9zdF9tb2RpZnkgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcG9zdF9tb2RpZnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wb3N0X21vZGlmeSgpICgoc3RydWN0IHJ0eF9kZWZfcG9zdF9tb2RpZnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wb3N0X21vZGlmeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcG9zdF9tb2RpZnkobikgKChzdHJ1Y3QgcnR4X2RlZl9wb3N0X21vZGlmeSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcG9zdF9tb2RpZnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcG9zdF9tb2RpZnkobikgKChzdHJ1Y3QgcnR4X2RlZl9wb3N0X21vZGlmeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wb3N0X21vZGlmeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wcmVfbW9kaWZ5KCkgKChzdHJ1Y3QgcnR4X2RlZl9wcmVfbW9kaWZ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ByZV9tb2RpZnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wcmVfbW9kaWZ5KCkgKChzdHJ1Y3QgcnR4X2RlZl9wcmVfbW9kaWZ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcHJlX21vZGlmeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcHJlX21vZGlmeShuKSAoKHN0cnVjdCBydHhfZGVmX3ByZV9tb2RpZnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ByZV9tb2RpZnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcHJlX21vZGlmeShuKSAoKHN0cnVjdCBydHhfZGVmX3ByZV9tb2RpZnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcHJlX21vZGlmeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wb3N0X2luYygpICgoc3RydWN0IHJ0eF9kZWZfcG9zdF9pbmMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcG9zdF9pbmMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wb3N0X2luYygpICgoc3RydWN0IHJ0eF9kZWZfcG9zdF9pbmMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wb3N0X2luYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcG9zdF9pbmMobikgKChzdHJ1Y3QgcnR4X2RlZl9wb3N0X2luYyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcG9zdF9pbmMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcG9zdF9pbmMobikgKChzdHJ1Y3QgcnR4X2RlZl9wb3N0X2luYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wb3N0X2luYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wb3N0X2RlYygpICgoc3RydWN0IHJ0eF9kZWZfcG9zdF9kZWMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcG9zdF9kZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wb3N0X2RlYygpICgoc3RydWN0IHJ0eF9kZWZfcG9zdF9kZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wb3N0X2RlYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcG9zdF9kZWMobikgKChzdHJ1Y3QgcnR4X2RlZl9wb3N0X2RlYyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcG9zdF9kZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcG9zdF9kZWMobikgKChzdHJ1Y3QgcnR4X2RlZl9wb3N0X2RlYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9wb3N0X2RlYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wcmVfaW5jKCkgKChzdHJ1Y3QgcnR4X2RlZl9wcmVfaW5jICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ByZV9pbmMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wcmVfaW5jKCkgKChzdHJ1Y3QgcnR4X2RlZl9wcmVfaW5jICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcHJlX2luYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcHJlX2luYyhuKSAoKHN0cnVjdCBydHhfZGVmX3ByZV9pbmMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ByZV9pbmMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcHJlX2luYyhuKSAoKHN0cnVjdCBydHhfZGVmX3ByZV9pbmMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcHJlX2luYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wcmVfZGVjKCkgKChzdHJ1Y3QgcnR4X2RlZl9wcmVfZGVjICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ByZV9kZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wcmVfZGVjKCkgKChzdHJ1Y3QgcnR4X2RlZl9wcmVfZGVjICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcHJlX2RlYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcHJlX2RlYyhuKSAoKHN0cnVjdCBydHhfZGVmX3ByZV9kZWMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ByZV9kZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcHJlX2RlYyhuKSAoKHN0cnVjdCBydHhfZGVmX3ByZV9kZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcHJlX2RlYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bWF4KCkgKChzdHJ1Y3QgcnR4X2RlZl91bWF4ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VtYXgpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bWF4KCkgKChzdHJ1Y3QgcnR4X2RlZl91bWF4ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW1heCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW1heChuKSAoKHN0cnVjdCBydHhfZGVmX3VtYXggKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VtYXgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW1heChuKSAoKHN0cnVjdCBydHhfZGVmX3VtYXggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW1heCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bWluKCkgKChzdHJ1Y3QgcnR4X2RlZl91bWluICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VtaW4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bWluKCkgKChzdHJ1Y3QgcnR4X2RlZl91bWluICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW1pbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW1pbihuKSAoKHN0cnVjdCBydHhfZGVmX3VtaW4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VtaW4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW1pbihuKSAoKHN0cnVjdCBydHhfZGVmX3VtaW4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW1pbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zbWF4KCkgKChzdHJ1Y3QgcnR4X2RlZl9zbWF4ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NtYXgpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zbWF4KCkgKChzdHJ1Y3QgcnR4X2RlZl9zbWF4ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc21heCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc21heChuKSAoKHN0cnVjdCBydHhfZGVmX3NtYXggKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NtYXgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc21heChuKSAoKHN0cnVjdCBydHhfZGVmX3NtYXggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc21heCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zbWluKCkgKChzdHJ1Y3QgcnR4X2RlZl9zbWluICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NtaW4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zbWluKCkgKChzdHJ1Y3QgcnR4X2RlZl9zbWluICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc21pbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc21pbihuKSAoKHN0cnVjdCBydHhfZGVmX3NtaW4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NtaW4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc21pbihuKSAoKHN0cnVjdCBydHhfZGVmX3NtaW4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc21pbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9yb3RhdGVydCgpICgoc3RydWN0IHJ0eF9kZWZfcm90YXRlcnQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcm90YXRlcnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9yb3RhdGVydCgpICgoc3RydWN0IHJ0eF9kZWZfcm90YXRlcnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9yb3RhdGVydCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcm90YXRlcnQobikgKChzdHJ1Y3QgcnR4X2RlZl9yb3RhdGVydCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcm90YXRlcnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcm90YXRlcnQobikgKChzdHJ1Y3QgcnR4X2RlZl9yb3RhdGVydCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9yb3RhdGVydCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9sc2hpZnRydCgpICgoc3RydWN0IHJ0eF9kZWZfbHNoaWZ0cnQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbHNoaWZ0cnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9sc2hpZnRydCgpICgoc3RydWN0IHJ0eF9kZWZfbHNoaWZ0cnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sc2hpZnRydCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbHNoaWZ0cnQobikgKChzdHJ1Y3QgcnR4X2RlZl9sc2hpZnRydCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbHNoaWZ0cnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbHNoaWZ0cnQobikgKChzdHJ1Y3QgcnR4X2RlZl9sc2hpZnRydCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sc2hpZnRydCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9hc2hpZnRydCgpICgoc3RydWN0IHJ0eF9kZWZfYXNoaWZ0cnQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYXNoaWZ0cnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9hc2hpZnRydCgpICgoc3RydWN0IHJ0eF9kZWZfYXNoaWZ0cnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hc2hpZnRydCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfYXNoaWZ0cnQobikgKChzdHJ1Y3QgcnR4X2RlZl9hc2hpZnRydCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYXNoaWZ0cnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfYXNoaWZ0cnQobikgKChzdHJ1Y3QgcnR4X2RlZl9hc2hpZnRydCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hc2hpZnRydCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9yb3RhdGUoKSAoKHN0cnVjdCBydHhfZGVmX3JvdGF0ZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9yb3RhdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9yb3RhdGUoKSAoKHN0cnVjdCBydHhfZGVmX3JvdGF0ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3JvdGF0ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcm90YXRlKG4pICgoc3RydWN0IHJ0eF9kZWZfcm90YXRlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9yb3RhdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcm90YXRlKG4pICgoc3RydWN0IHJ0eF9kZWZfcm90YXRlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3JvdGF0ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9hc2hpZnQoKSAoKHN0cnVjdCBydHhfZGVmX2FzaGlmdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hc2hpZnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9hc2hpZnQoKSAoKHN0cnVjdCBydHhfZGVmX2FzaGlmdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FzaGlmdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfYXNoaWZ0KG4pICgoc3RydWN0IHJ0eF9kZWZfYXNoaWZ0ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hc2hpZnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfYXNoaWZ0KG4pICgoc3RydWN0IHJ0eF9kZWZfYXNoaWZ0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FzaGlmdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9ub3QoKSAoKHN0cnVjdCBydHhfZGVmX25vdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ub3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9ub3QoKSAoKHN0cnVjdCBydHhfZGVmX25vdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX25vdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbm90KG4pICgoc3RydWN0IHJ0eF9kZWZfbm90ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ub3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbm90KG4pICgoc3RydWN0IHJ0eF9kZWZfbm90ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX25vdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl94b3IoKSAoKHN0cnVjdCBydHhfZGVmX3hvciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl94b3IpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl94b3IoKSAoKHN0cnVjdCBydHhfZGVmX3hvciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3hvcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfeG9yKG4pICgoc3RydWN0IHJ0eF9kZWZfeG9yICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl94b3IpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfeG9yKG4pICgoc3RydWN0IHJ0eF9kZWZfeG9yICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3hvciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9pb3IoKSAoKHN0cnVjdCBydHhfZGVmX2lvciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9pb3IpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9pb3IoKSAoKHN0cnVjdCBydHhfZGVmX2lvciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2lvcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfaW9yKG4pICgoc3RydWN0IHJ0eF9kZWZfaW9yICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9pb3IpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfaW9yKG4pICgoc3RydWN0IHJ0eF9kZWZfaW9yICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2lvciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9hbmQoKSAoKHN0cnVjdCBydHhfZGVmX2FuZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hbmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9hbmQoKSAoKHN0cnVjdCBydHhfZGVmX2FuZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FuZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfYW5kKG4pICgoc3RydWN0IHJ0eF9kZWZfYW5kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hbmQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfYW5kKG4pICgoc3RydWN0IHJ0eF9kZWZfYW5kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FuZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91bW9kKCkgKChzdHJ1Y3QgcnR4X2RlZl91bW9kICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vtb2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91bW9kKCkgKChzdHJ1Y3QgcnR4X2RlZl91bW9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW1vZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdW1vZChuKSAoKHN0cnVjdCBydHhfZGVmX3Vtb2QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3Vtb2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdW1vZChuKSAoKHN0cnVjdCBydHhfZGVmX3Vtb2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW1vZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91ZGl2KCkgKChzdHJ1Y3QgcnR4X2RlZl91ZGl2ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VkaXYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91ZGl2KCkgKChzdHJ1Y3QgcnR4X2RlZl91ZGl2ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdWRpdikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdWRpdihuKSAoKHN0cnVjdCBydHhfZGVmX3VkaXYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VkaXYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdWRpdihuKSAoKHN0cnVjdCBydHhfZGVmX3VkaXYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdWRpdiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9tb2QoKSAoKHN0cnVjdCBydHhfZGVmX21vZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9tb2QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9tb2QoKSAoKHN0cnVjdCBydHhfZGVmX21vZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX21vZCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbW9kKG4pICgoc3RydWN0IHJ0eF9kZWZfbW9kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9tb2QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbW9kKG4pICgoc3RydWN0IHJ0eF9kZWZfbW9kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX21vZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91c19kaXYoKSAoKHN0cnVjdCBydHhfZGVmX3VzX2RpdiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c19kaXYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91c19kaXYoKSAoKHN0cnVjdCBydHhfZGVmX3VzX2RpdiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX2RpdikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdXNfZGl2KG4pICgoc3RydWN0IHJ0eF9kZWZfdXNfZGl2ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c19kaXYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdXNfZGl2KG4pICgoc3RydWN0IHJ0eF9kZWZfdXNfZGl2ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX2RpdiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zc19kaXYoKSAoKHN0cnVjdCBydHhfZGVmX3NzX2RpdiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19kaXYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zc19kaXYoKSAoKHN0cnVjdCBydHhfZGVmX3NzX2RpdiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX2RpdikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3NfZGl2KG4pICgoc3RydWN0IHJ0eF9kZWZfc3NfZGl2ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zc19kaXYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3NfZGl2KG4pICgoc3RydWN0IHJ0eF9kZWZfc3NfZGl2ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX2RpdiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9kaXYoKSAoKHN0cnVjdCBydHhfZGVmX2RpdiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9kaXYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9kaXYoKSAoKHN0cnVjdCBydHhfZGVmX2RpdiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RpdikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfZGl2KG4pICgoc3RydWN0IHJ0eF9kZWZfZGl2ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9kaXYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfZGl2KG4pICgoc3RydWN0IHJ0eF9kZWZfZGl2ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RpdiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl91c19tdWx0KCkgKChzdHJ1Y3QgcnR4X2RlZl91c19tdWx0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX211bHQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl91c19tdWx0KCkgKChzdHJ1Y3QgcnR4X2RlZl91c19tdWx0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNfbXVsdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfdXNfbXVsdChuKSAoKHN0cnVjdCBydHhfZGVmX3VzX211bHQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3VzX211bHQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfdXNfbXVsdChuKSAoKHN0cnVjdCBydHhfZGVmX3VzX211bHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNfbXVsdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zc19tdWx0KCkgKChzdHJ1Y3QgcnR4X2RlZl9zc19tdWx0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX211bHQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zc19tdWx0KCkgKChzdHJ1Y3QgcnR4X2RlZl9zc19tdWx0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3NfbXVsdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3NfbXVsdChuKSAoKHN0cnVjdCBydHhfZGVmX3NzX211bHQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NzX211bHQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3NfbXVsdChuKSAoKHN0cnVjdCBydHhfZGVmX3NzX211bHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3NfbXVsdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9tdWx0KCkgKChzdHJ1Y3QgcnR4X2RlZl9tdWx0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX211bHQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9tdWx0KCkgKChzdHJ1Y3QgcnR4X2RlZl9tdWx0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbXVsdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbXVsdChuKSAoKHN0cnVjdCBydHhfZGVmX211bHQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX211bHQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbXVsdChuKSAoKHN0cnVjdCBydHhfZGVmX211bHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbXVsdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9uZWcoKSAoKHN0cnVjdCBydHhfZGVmX25lZyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9uZWcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9uZWcoKSAoKHN0cnVjdCBydHhfZGVmX25lZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX25lZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbmVnKG4pICgoc3RydWN0IHJ0eF9kZWZfbmVnICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9uZWcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbmVnKG4pICgoc3RydWN0IHJ0eF9kZWZfbmVnICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX25lZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9taW51cygpICgoc3RydWN0IHJ0eF9kZWZfbWludXMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbWludXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9taW51cygpICgoc3RydWN0IHJ0eF9kZWZfbWludXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9taW51cykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfbWludXMobikgKChzdHJ1Y3QgcnR4X2RlZl9taW51cyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbWludXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfbWludXMobikgKChzdHJ1Y3QgcnR4X2RlZl9taW51cyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9taW51cyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9wbHVzKCkgKChzdHJ1Y3QgcnR4X2RlZl9wbHVzICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3BsdXMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9wbHVzKCkgKChzdHJ1Y3QgcnR4X2RlZl9wbHVzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcGx1cykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfcGx1cyhuKSAoKHN0cnVjdCBydHhfZGVmX3BsdXMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3BsdXMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfcGx1cyhuKSAoKHN0cnVjdCBydHhfZGVmX3BsdXMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcGx1cyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9jb21wYXJlKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb21wYXJlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvbXBhcmUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9jb21wYXJlKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb21wYXJlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29tcGFyZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfY29tcGFyZShuKSAoKHN0cnVjdCBydHhfZGVmX2NvbXBhcmUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvbXBhcmUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfY29tcGFyZShuKSAoKHN0cnVjdCBydHhfZGVmX2NvbXBhcmUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29tcGFyZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9pZl90aGVuX2Vsc2UoKSAoKHN0cnVjdCBydHhfZGVmX2lmX3RoZW5fZWxzZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9pZl90aGVuX2Vsc2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9pZl90aGVuX2Vsc2UoKSAoKHN0cnVjdCBydHhfZGVmX2lmX3RoZW5fZWxzZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2lmX3RoZW5fZWxzZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfaWZfdGhlbl9lbHNlKG4pICgoc3RydWN0IHJ0eF9kZWZfaWZfdGhlbl9lbHNlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9pZl90aGVuX2Vsc2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfaWZfdGhlbl9lbHNlKG4pICgoc3RydWN0IHJ0eF9kZWZfaWZfdGhlbl9lbHNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2lmX3RoZW5fZWxzZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9jYzAoKSAoKHN0cnVjdCBydHhfZGVmX2NjMCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jYzApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9jYzAoKSAoKHN0cnVjdCBydHhfZGVmX2NjMCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NjMCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfY2MwKG4pICgoc3RydWN0IHJ0eF9kZWZfY2MwICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jYzApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfY2MwKG4pICgoc3RydWN0IHJ0eF9kZWZfY2MwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NjMCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR4X2RlZl9zeW1ib2xfcmVmKCkgKChzdHJ1Y3QgcnR4X2RlZl9zeW1ib2xfcmVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3N5bWJvbF9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9zeW1ib2xfcmVmKCkgKChzdHJ1Y3QgcnR4X2RlZl9zeW1ib2xfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3ltYm9sX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3ltYm9sX3JlZihuKSAoKHN0cnVjdCBydHhfZGVmX3N5bWJvbF9yZWYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3N5bWJvbF9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3J0eF9kZWZfc3ltYm9sX3JlZihuKSAoKHN0cnVjdCBydHhfZGVmX3N5bWJvbF9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3ltYm9sX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZmFrZV91bmlvbl8xKCkgKCh1bmlvbiBmYWtlX3VuaW9uXzEgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZmFrZV91bmlvbl8xKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2Zha2VfdW5pb25fMSgpICgodW5pb24gZmFrZV91bmlvbl8xICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gZmFrZV91bmlvbl8xKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZmFrZV91bmlvbl8xKG4pICgodW5pb24gZmFrZV91bmlvbl8xICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBmYWtlX3VuaW9uXzEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2Zha2VfdW5pb25fMShuKSAoKHVuaW9uIGZha2VfdW5pb25fMSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBmYWtlX3VuaW9uXzEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfbGFiZWxfcmVmKCkgKChzdHJ1Y3QgcnR4X2RlZl9sYWJlbF9yZWYgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbGFiZWxfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfbGFiZWxfcmVmKCkgKChzdHJ1Y3QgcnR4X2RlZl9sYWJlbF9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sYWJlbF9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2xhYmVsX3JlZihuKSAoKHN0cnVjdCBydHhfZGVmX2xhYmVsX3JlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbGFiZWxfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2xhYmVsX3JlZihuKSAoKHN0cnVjdCBydHhfZGVmX2xhYmVsX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9sYWJlbF9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfbWVtKCkgKChzdHJ1Y3QgcnR4X2RlZl9tZW0gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbWVtKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfbWVtKCkgKChzdHJ1Y3QgcnR4X2RlZl9tZW0gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9tZW0pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX21lbShuKSAoKHN0cnVjdCBydHhfZGVmX21lbSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfbWVtKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX21lbShuKSAoKHN0cnVjdCBydHhfZGVmX21lbSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9tZW0pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uY2F0bigpICgoc3RydWN0IHJ0eF9kZWZfY29uY2F0biAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25jYXRuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uY2F0bigpICgoc3RydWN0IHJ0eF9kZWZfY29uY2F0biAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvbmNhdG4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbmNhdG4obikgKChzdHJ1Y3QgcnR4X2RlZl9jb25jYXRuICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25jYXRuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbmNhdG4obikgKChzdHJ1Y3QgcnR4X2RlZl9jb25jYXRuICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvbmNhdG4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uY2F0KCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25jYXQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uY2F0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uY2F0KCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25jYXQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25jYXQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbmNhdChuKSAoKHN0cnVjdCBydHhfZGVmX2NvbmNhdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uY2F0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbmNhdChuKSAoKHN0cnVjdCBydHhfZGVmX2NvbmNhdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25jYXQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfc3RyaWN0X2xvd19wYXJ0KCkgKChzdHJ1Y3QgcnR4X2RlZl9zdHJpY3RfbG93X3BhcnQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3RyaWN0X2xvd19wYXJ0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfc3RyaWN0X2xvd19wYXJ0KCkgKChzdHJ1Y3QgcnR4X2RlZl9zdHJpY3RfbG93X3BhcnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zdHJpY3RfbG93X3BhcnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3N0cmljdF9sb3dfcGFydChuKSAoKHN0cnVjdCBydHhfZGVmX3N0cmljdF9sb3dfcGFydCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3RyaWN0X2xvd19wYXJ0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3N0cmljdF9sb3dfcGFydChuKSAoKHN0cnVjdCBydHhfZGVmX3N0cmljdF9sb3dfcGFydCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zdHJpY3RfbG93X3BhcnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfc3VicmVnKCkgKChzdHJ1Y3QgcnR4X2RlZl9zdWJyZWcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3VicmVnKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfc3VicmVnKCkgKChzdHJ1Y3QgcnR4X2RlZl9zdWJyZWcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zdWJyZWcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3N1YnJlZyhuKSAoKHN0cnVjdCBydHhfZGVmX3N1YnJlZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc3VicmVnKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3N1YnJlZyhuKSAoKHN0cnVjdCBydHhfZGVmX3N1YnJlZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zdWJyZWcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfc2NyYXRjaCgpICgoc3RydWN0IHJ0eF9kZWZfc2NyYXRjaCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zY3JhdGNoKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfc2NyYXRjaCgpICgoc3RydWN0IHJ0eF9kZWZfc2NyYXRjaCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NjcmF0Y2gpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3NjcmF0Y2gobikgKChzdHJ1Y3QgcnR4X2RlZl9zY3JhdGNoICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zY3JhdGNoKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3NjcmF0Y2gobikgKChzdHJ1Y3QgcnR4X2RlZl9zY3JhdGNoICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NjcmF0Y2gpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfcmVnKCkgKChzdHJ1Y3QgcnR4X2RlZl9yZWcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcmVnKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfcmVnKCkgKChzdHJ1Y3QgcnR4X2RlZl9yZWcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9yZWcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3JlZyhuKSAoKHN0cnVjdCBydHhfZGVmX3JlZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcmVnKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3JlZyhuKSAoKHN0cnVjdCBydHhfZGVmX3JlZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9yZWcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfcGMoKSAoKHN0cnVjdCBydHhfZGVmX3BjICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3BjKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfcGMoKSAoKHN0cnVjdCBydHhfZGVmX3BjICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcGMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3BjKG4pICgoc3RydWN0IHJ0eF9kZWZfcGMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3BjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3BjKG4pICgoc3RydWN0IHJ0eF9kZWZfcGMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcGMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uc3QoKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvbnN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uc3QoKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbnN0KG4pICgoc3RydWN0IHJ0eF9kZWZfY29uc3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvbnN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbnN0KG4pICgoc3RydWN0IHJ0eF9kZWZfY29uc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uc3Rfc3RyaW5nKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9zdHJpbmcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3Rfc3RyaW5nKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uc3Rfc3RyaW5nKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9zdHJpbmcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9zdHJpbmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbnN0X3N0cmluZyhuKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X3N0cmluZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3Rfc3RyaW5nKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbnN0X3N0cmluZyhuKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X3N0cmluZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9zdHJpbmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uc3RfdmVjdG9yKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25zdF92ZWN0b3IgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3RfdmVjdG9yKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uc3RfdmVjdG9yKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25zdF92ZWN0b3IgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25zdF92ZWN0b3IpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbnN0X3ZlY3RvcihuKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X3ZlY3RvciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3RfdmVjdG9yKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbnN0X3ZlY3RvcihuKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X3ZlY3RvciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25zdF92ZWN0b3IpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uc3RfZG91YmxlKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9kb3VibGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3RfZG91YmxlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uc3RfZG91YmxlKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9kb3VibGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9kb3VibGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbnN0X2RvdWJsZShuKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X2RvdWJsZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3RfZG91YmxlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbnN0X2RvdWJsZShuKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X2RvdWJsZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9kb3VibGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uc3RfZml4ZWQoKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X2ZpeGVkICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvbnN0X2ZpeGVkKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uc3RfZml4ZWQoKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X2ZpeGVkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3RfZml4ZWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbnN0X2ZpeGVkKG4pICgoc3RydWN0IHJ0eF9kZWZfY29uc3RfZml4ZWQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvbnN0X2ZpeGVkKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbnN0X2ZpeGVkKG4pICgoc3RydWN0IHJ0eF9kZWZfY29uc3RfZml4ZWQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3RfZml4ZWQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uc3RfaW50KCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9pbnQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3RfaW50KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uc3RfaW50KCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9pbnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9pbnQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbnN0X2ludChuKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X2ludCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uc3RfaW50KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbnN0X2ludChuKSAoKHN0cnVjdCBydHhfZGVmX2NvbnN0X2ludCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25zdF9pbnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfdHJhcF9pZigpICgoc3RydWN0IHJ0eF9kZWZfdHJhcF9pZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl90cmFwX2lmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfdHJhcF9pZigpICgoc3RydWN0IHJ0eF9kZWZfdHJhcF9pZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3RyYXBfaWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3RyYXBfaWYobikgKChzdHJ1Y3QgcnR4X2RlZl90cmFwX2lmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl90cmFwX2lmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3RyYXBfaWYobikgKChzdHJ1Y3QgcnR4X2RlZl90cmFwX2lmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3RyYXBfaWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfZWhfcmV0dXJuKCkgKChzdHJ1Y3QgcnR4X2RlZl9laF9yZXR1cm4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZWhfcmV0dXJuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfZWhfcmV0dXJuKCkgKChzdHJ1Y3QgcnR4X2RlZl9laF9yZXR1cm4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9laF9yZXR1cm4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2VoX3JldHVybihuKSAoKHN0cnVjdCBydHhfZGVmX2VoX3JldHVybiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZWhfcmV0dXJuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2VoX3JldHVybihuKSAoKHN0cnVjdCBydHhfZGVmX2VoX3JldHVybiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9laF9yZXR1cm4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfc2ltcGxlX3JldHVybigpICgoc3RydWN0IHJ0eF9kZWZfc2ltcGxlX3JldHVybiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zaW1wbGVfcmV0dXJuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfc2ltcGxlX3JldHVybigpICgoc3RydWN0IHJ0eF9kZWZfc2ltcGxlX3JldHVybiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NpbXBsZV9yZXR1cm4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3NpbXBsZV9yZXR1cm4obikgKChzdHJ1Y3QgcnR4X2RlZl9zaW1wbGVfcmV0dXJuICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zaW1wbGVfcmV0dXJuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3NpbXBsZV9yZXR1cm4obikgKChzdHJ1Y3QgcnR4X2RlZl9zaW1wbGVfcmV0dXJuICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NpbXBsZV9yZXR1cm4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfcmV0dXJuKCkgKChzdHJ1Y3QgcnR4X2RlZl9yZXR1cm4gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcmV0dXJuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfcmV0dXJuKCkgKChzdHJ1Y3QgcnR4X2RlZl9yZXR1cm4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9yZXR1cm4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3JldHVybihuKSAoKHN0cnVjdCBydHhfZGVmX3JldHVybiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcmV0dXJuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3JldHVybihuKSAoKHN0cnVjdCBydHhfZGVmX3JldHVybiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9yZXR1cm4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY2FsbCgpICgoc3RydWN0IHJ0eF9kZWZfY2FsbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jYWxsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY2FsbCgpICgoc3RydWN0IHJ0eF9kZWZfY2FsbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NhbGwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NhbGwobikgKChzdHJ1Y3QgcnR4X2RlZl9jYWxsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jYWxsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NhbGwobikgKChzdHJ1Y3QgcnR4X2RlZl9jYWxsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NhbGwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY2xvYmJlcigpICgoc3RydWN0IHJ0eF9kZWZfY2xvYmJlciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jbG9iYmVyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY2xvYmJlcigpICgoc3RydWN0IHJ0eF9kZWZfY2xvYmJlciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2Nsb2JiZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2Nsb2JiZXIobikgKChzdHJ1Y3QgcnR4X2RlZl9jbG9iYmVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jbG9iYmVyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2Nsb2JiZXIobikgKChzdHJ1Y3QgcnR4X2RlZl9jbG9iYmVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2Nsb2JiZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfdXNlKCkgKChzdHJ1Y3QgcnR4X2RlZl91c2UgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfdXNlKCkgKChzdHJ1Y3QgcnR4X2RlZl91c2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3VzZShuKSAoKHN0cnVjdCBydHhfZGVmX3VzZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdXNlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3VzZShuKSAoKHN0cnVjdCBydHhfZGVmX3VzZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91c2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfc2V0KCkgKChzdHJ1Y3QgcnR4X2RlZl9zZXQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc2V0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfc2V0KCkgKChzdHJ1Y3QgcnR4X2RlZl9zZXQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zZXQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3NldChuKSAoKHN0cnVjdCBydHhfZGVmX3NldCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc2V0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3NldChuKSAoKHN0cnVjdCBydHhfZGVmX3NldCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9zZXQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfcHJlZmV0Y2goKSAoKHN0cnVjdCBydHhfZGVmX3ByZWZldGNoICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ByZWZldGNoKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfcHJlZmV0Y2goKSAoKHN0cnVjdCBydHhfZGVmX3ByZWZldGNoICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcHJlZmV0Y2gpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3ByZWZldGNoKG4pICgoc3RydWN0IHJ0eF9kZWZfcHJlZmV0Y2ggKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ByZWZldGNoKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3ByZWZldGNoKG4pICgoc3RydWN0IHJ0eF9kZWZfcHJlZmV0Y2ggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcHJlZmV0Y2gpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfYWRkcl9kaWZmX3ZlYygpICgoc3RydWN0IHJ0eF9kZWZfYWRkcl9kaWZmX3ZlYyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hZGRyX2RpZmZfdmVjKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfYWRkcl9kaWZmX3ZlYygpICgoc3RydWN0IHJ0eF9kZWZfYWRkcl9kaWZmX3ZlYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FkZHJfZGlmZl92ZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2FkZHJfZGlmZl92ZWMobikgKChzdHJ1Y3QgcnR4X2RlZl9hZGRyX2RpZmZfdmVjICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hZGRyX2RpZmZfdmVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2FkZHJfZGlmZl92ZWMobikgKChzdHJ1Y3QgcnR4X2RlZl9hZGRyX2RpZmZfdmVjICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FkZHJfZGlmZl92ZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfYWRkcl92ZWMoKSAoKHN0cnVjdCBydHhfZGVmX2FkZHJfdmVjICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FkZHJfdmVjKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfYWRkcl92ZWMoKSAoKHN0cnVjdCBydHhfZGVmX2FkZHJfdmVjICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYWRkcl92ZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2FkZHJfdmVjKG4pICgoc3RydWN0IHJ0eF9kZWZfYWRkcl92ZWMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FkZHJfdmVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2FkZHJfdmVjKG4pICgoc3RydWN0IHJ0eF9kZWZfYWRkcl92ZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYWRkcl92ZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfdW5zcGVjX3ZvbGF0aWxlKCkgKChzdHJ1Y3QgcnR4X2RlZl91bnNwZWNfdm9sYXRpbGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5zcGVjX3ZvbGF0aWxlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfdW5zcGVjX3ZvbGF0aWxlKCkgKChzdHJ1Y3QgcnR4X2RlZl91bnNwZWNfdm9sYXRpbGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNwZWNfdm9sYXRpbGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3Vuc3BlY192b2xhdGlsZShuKSAoKHN0cnVjdCBydHhfZGVmX3Vuc3BlY192b2xhdGlsZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5zcGVjX3ZvbGF0aWxlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3Vuc3BlY192b2xhdGlsZShuKSAoKHN0cnVjdCBydHhfZGVmX3Vuc3BlY192b2xhdGlsZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNwZWNfdm9sYXRpbGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfdW5zcGVjKCkgKChzdHJ1Y3QgcnR4X2RlZl91bnNwZWMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5zcGVjKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfdW5zcGVjKCkgKChzdHJ1Y3QgcnR4X2RlZl91bnNwZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNwZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3Vuc3BlYyhuKSAoKHN0cnVjdCBydHhfZGVmX3Vuc3BlYyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdW5zcGVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3Vuc3BlYyhuKSAoKHN0cnVjdCBydHhfZGVmX3Vuc3BlYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl91bnNwZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfYXNtX29wZXJhbmRzKCkgKChzdHJ1Y3QgcnR4X2RlZl9hc21fb3BlcmFuZHMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYXNtX29wZXJhbmRzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfYXNtX29wZXJhbmRzKCkgKChzdHJ1Y3QgcnR4X2RlZl9hc21fb3BlcmFuZHMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hc21fb3BlcmFuZHMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2FzbV9vcGVyYW5kcyhuKSAoKHN0cnVjdCBydHhfZGVmX2FzbV9vcGVyYW5kcyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYXNtX29wZXJhbmRzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2FzbV9vcGVyYW5kcyhuKSAoKHN0cnVjdCBydHhfZGVmX2FzbV9vcGVyYW5kcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hc21fb3BlcmFuZHMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfYXNtX2lucHV0KCkgKChzdHJ1Y3QgcnR4X2RlZl9hc21faW5wdXQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYXNtX2lucHV0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfYXNtX2lucHV0KCkgKChzdHJ1Y3QgcnR4X2RlZl9hc21faW5wdXQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hc21faW5wdXQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2FzbV9pbnB1dChuKSAoKHN0cnVjdCBydHhfZGVmX2FzbV9pbnB1dCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfYXNtX2lucHV0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2FzbV9pbnB1dChuKSAoKHN0cnVjdCBydHhfZGVmX2FzbV9pbnB1dCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hc21faW5wdXQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfcGFyYWxsZWwoKSAoKHN0cnVjdCBydHhfZGVmX3BhcmFsbGVsICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3BhcmFsbGVsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfcGFyYWxsZWwoKSAoKHN0cnVjdCBydHhfZGVmX3BhcmFsbGVsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcGFyYWxsZWwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3BhcmFsbGVsKG4pICgoc3RydWN0IHJ0eF9kZWZfcGFyYWxsZWwgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3BhcmFsbGVsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3BhcmFsbGVsKG4pICgoc3RydWN0IHJ0eF9kZWZfcGFyYWxsZWwgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfcGFyYWxsZWwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29uZF9leGVjKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25kX2V4ZWMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uZF9leGVjKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29uZF9leGVjKCkgKChzdHJ1Y3QgcnR4X2RlZl9jb25kX2V4ZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25kX2V4ZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvbmRfZXhlYyhuKSAoKHN0cnVjdCBydHhfZGVmX2NvbmRfZXhlYyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY29uZF9leGVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvbmRfZXhlYyhuKSAoKHN0cnVjdCBydHhfZGVmX2NvbmRfZXhlYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb25kX2V4ZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfbm90ZSgpICgoc3RydWN0IHJ0eF9kZWZfbm90ZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ub3RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfbm90ZSgpICgoc3RydWN0IHJ0eF9kZWZfbm90ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX25vdGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX25vdGUobikgKChzdHJ1Y3QgcnR4X2RlZl9ub3RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9ub3RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX25vdGUobikgKChzdHJ1Y3QgcnR4X2RlZl9ub3RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX25vdGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY29kZV9sYWJlbCgpICgoc3RydWN0IHJ0eF9kZWZfY29kZV9sYWJlbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb2RlX2xhYmVsKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY29kZV9sYWJlbCgpICgoc3RydWN0IHJ0eF9kZWZfY29kZV9sYWJlbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvZGVfbGFiZWwpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NvZGVfbGFiZWwobikgKChzdHJ1Y3QgcnR4X2RlZl9jb2RlX2xhYmVsICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jb2RlX2xhYmVsKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NvZGVfbGFiZWwobikgKChzdHJ1Y3QgcnR4X2RlZl9jb2RlX2xhYmVsICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2NvZGVfbGFiZWwpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfYmFycmllcigpICgoc3RydWN0IHJ0eF9kZWZfYmFycmllciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9iYXJyaWVyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfYmFycmllcigpICgoc3RydWN0IHJ0eF9kZWZfYmFycmllciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2JhcnJpZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2JhcnJpZXIobikgKChzdHJ1Y3QgcnR4X2RlZl9iYXJyaWVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9iYXJyaWVyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2JhcnJpZXIobikgKChzdHJ1Y3QgcnR4X2RlZl9iYXJyaWVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2JhcnJpZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfY2FsbF9pbnNuKCkgKChzdHJ1Y3QgcnR4X2RlZl9jYWxsX2luc24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY2FsbF9pbnNuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfY2FsbF9pbnNuKCkgKChzdHJ1Y3QgcnR4X2RlZl9jYWxsX2luc24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jYWxsX2luc24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2NhbGxfaW5zbihuKSAoKHN0cnVjdCBydHhfZGVmX2NhbGxfaW5zbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfY2FsbF9pbnNuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2NhbGxfaW5zbihuKSAoKHN0cnVjdCBydHhfZGVmX2NhbGxfaW5zbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9jYWxsX2luc24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfanVtcF9pbnNuKCkgKChzdHJ1Y3QgcnR4X2RlZl9qdW1wX2luc24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfanVtcF9pbnNuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfanVtcF9pbnNuKCkgKChzdHJ1Y3QgcnR4X2RlZl9qdW1wX2luc24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9qdW1wX2luc24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2p1bXBfaW5zbihuKSAoKHN0cnVjdCBydHhfZGVmX2p1bXBfaW5zbiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfanVtcF9pbnNuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2p1bXBfaW5zbihuKSAoKHN0cnVjdCBydHhfZGVmX2p1bXBfaW5zbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9qdW1wX2luc24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfaW5zbigpICgoc3RydWN0IHJ0eF9kZWZfaW5zbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9pbnNuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfaW5zbigpICgoc3RydWN0IHJ0eF9kZWZfaW5zbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2luc24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2luc24obikgKChzdHJ1Y3QgcnR4X2RlZl9pbnNuICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9pbnNuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2luc24obikgKChzdHJ1Y3QgcnR4X2RlZl9pbnNuICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2luc24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfZGVidWdfaW5zbigpICgoc3RydWN0IHJ0eF9kZWZfZGVidWdfaW5zbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19pbnNuKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfZGVidWdfaW5zbigpICgoc3RydWN0IHJ0eF9kZWZfZGVidWdfaW5zbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RlYnVnX2luc24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2RlYnVnX2luc24obikgKChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19pbnNuICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19pbnNuKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2RlYnVnX2luc24obikgKChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19pbnNuICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RlYnVnX2luc24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfYWRkcmVzcygpICgoc3RydWN0IHJ0eF9kZWZfYWRkcmVzcyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hZGRyZXNzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfYWRkcmVzcygpICgoc3RydWN0IHJ0eF9kZWZfYWRkcmVzcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FkZHJlc3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2FkZHJlc3MobikgKChzdHJ1Y3QgcnR4X2RlZl9hZGRyZXNzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9hZGRyZXNzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2FkZHJlc3MobikgKChzdHJ1Y3QgcnR4X2RlZl9hZGRyZXNzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2FkZHJlc3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfc2VxdWVuY2UoKSAoKHN0cnVjdCBydHhfZGVmX3NlcXVlbmNlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NlcXVlbmNlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfc2VxdWVuY2UoKSAoKHN0cnVjdCBydHhfZGVmX3NlcXVlbmNlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc2VxdWVuY2UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3NlcXVlbmNlKG4pICgoc3RydWN0IHJ0eF9kZWZfc2VxdWVuY2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3NlcXVlbmNlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3NlcXVlbmNlKG4pICgoc3RydWN0IHJ0eF9kZWZfc2VxdWVuY2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfc2VxdWVuY2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfaW5zbl9saXN0KCkgKChzdHJ1Y3QgcnR4X2RlZl9pbnNuX2xpc3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfaW5zbl9saXN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfaW5zbl9saXN0KCkgKChzdHJ1Y3QgcnR4X2RlZl9pbnNuX2xpc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9pbnNuX2xpc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2luc25fbGlzdChuKSAoKHN0cnVjdCBydHhfZGVmX2luc25fbGlzdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfaW5zbl9saXN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2luc25fbGlzdChuKSAoKHN0cnVjdCBydHhfZGVmX2luc25fbGlzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9pbnNuX2xpc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfZXhwcl9saXN0KCkgKChzdHJ1Y3QgcnR4X2RlZl9leHByX2xpc3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZXhwcl9saXN0KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfZXhwcl9saXN0KCkgKChzdHJ1Y3QgcnR4X2RlZl9leHByX2xpc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9leHByX2xpc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2V4cHJfbGlzdChuKSAoKHN0cnVjdCBydHhfZGVmX2V4cHJfbGlzdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfZXhwcl9saXN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2V4cHJfbGlzdChuKSAoKHN0cnVjdCBydHhfZGVmX2V4cHJfbGlzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9leHByX2xpc3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfZGVidWdfZXhwcigpICgoc3RydWN0IHJ0eF9kZWZfZGVidWdfZXhwciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19leHByKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfZGVidWdfZXhwcigpICgoc3RydWN0IHJ0eF9kZWZfZGVidWdfZXhwciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RlYnVnX2V4cHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX2RlYnVnX2V4cHIobikgKChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19leHByICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19leHByKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX2RlYnVnX2V4cHIobikgKChzdHJ1Y3QgcnR4X2RlZl9kZWJ1Z19leHByICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX2RlYnVnX2V4cHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfdmFsdWUoKSAoKHN0cnVjdCBydHhfZGVmX3ZhbHVlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZhbHVlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfdmFsdWUoKSAoKHN0cnVjdCBydHhfZGVmX3ZhbHVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdmFsdWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX3ZhbHVlKG4pICgoc3RydWN0IHJ0eF9kZWZfdmFsdWUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX3ZhbHVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3ZhbHVlKG4pICgoc3RydWN0IHJ0eF9kZWZfdmFsdWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJ0eF9kZWZfdmFsdWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfVW5Lbm93bigpICgoc3RydWN0IHJ0eF9kZWZfVW5Lbm93biAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9Vbktub3duKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0eF9kZWZfVW5Lbm93bigpICgoc3RydWN0IHJ0eF9kZWZfVW5Lbm93biAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX1VuS25vd24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX1VuS25vd24obikgKChzdHJ1Y3QgcnR4X2RlZl9Vbktub3duICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcnR4X2RlZl9Vbktub3duKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX1VuS25vd24obikgKChzdHJ1Y3QgcnR4X2RlZl9Vbktub3duICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBydHhfZGVmX1VuS25vd24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eF9kZWZfc3ltYm9sX3N1YnVuaW9uKCkgKCh1bmlvbiBydHhfZGVmX3N5bWJvbF9zdWJ1bmlvbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBydHhfZGVmX3N5bWJvbF9zdWJ1bmlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9ydHhfZGVmX3N5bWJvbF9zdWJ1bmlvbigpICgodW5pb24gcnR4X2RlZl9zeW1ib2xfc3VidW5pb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBydHhfZGVmX3N5bWJvbF9zdWJ1bmlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF9kZWZfc3ltYm9sX3N1YnVuaW9uKG4pICgodW5pb24gcnR4X2RlZl9zeW1ib2xfc3VidW5pb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHJ0eF9kZWZfc3ltYm9sX3N1YnVuaW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmX3N5bWJvbF9zdWJ1bmlvbihuKSAoKHVuaW9uIHJ0eF9kZWZfc3ltYm9sX3N1YnVuaW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHJ0eF9kZWZfc3ltYm9sX3N1YnVuaW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19ydHhfZGVmX25vdGVfc3VidW5pb24oKSAoKHVuaW9uIHJ0eF9kZWZfbm90ZV9zdWJ1bmlvbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBydHhfZGVmX25vdGVfc3VidW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR4X2RlZl9ub3RlX3N1YnVuaW9uKCkgKCh1bmlvbiBydHhfZGVmX25vdGVfc3VidW5pb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBydHhfZGVmX25vdGVfc3VidW5pb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHhfZGVmX25vdGVfc3VidW5pb24obikgKCh1bmlvbiBydHhfZGVmX25vdGVfc3VidW5pb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHJ0eF9kZWZfbm90ZV9zdWJ1bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcnR4X2RlZl9ub3RlX3N1YnVuaW9uKG4pICgodW5pb24gcnR4X2RlZl9ub3RlX3N1YnVuaW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIHJ0eF9kZWZfbm90ZV9zdWJ1bmlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgoKSAoKHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3J0eCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgoKSAoKHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3J0eCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3J0eCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbnN0YW50X2Rlc2NyaXB0b3JfcnR4KG4pICgoc3RydWN0IGNvbnN0YW50X2Rlc2NyaXB0b3JfcnR4ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NvbnN0YW50X2Rlc2NyaXB0b3JfcnR4KG4pICgoc3RydWN0IGNvbnN0YW50X2Rlc2NyaXB0b3JfcnR4ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3J0eCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZml4ZWRfdmFsdWUoKSAoKHN0cnVjdCBmaXhlZF92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZml4ZWRfdmFsdWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZml4ZWRfdmFsdWUoKSAoKHN0cnVjdCBmaXhlZF92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBmaXhlZF92YWx1ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2ZpeGVkX3ZhbHVlKG4pICgoc3RydWN0IGZpeGVkX3ZhbHVlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZml4ZWRfdmFsdWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2ZpeGVkX3ZhbHVlKG4pICgoc3RydWN0IGZpeGVkX3ZhbHVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBmaXhlZF92YWx1ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcmVhbF92YWx1ZSgpICgoc3RydWN0IHJlYWxfdmFsdWUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJlYWxfdmFsdWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcmVhbF92YWx1ZSgpICgoc3RydWN0IHJlYWxfdmFsdWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcmVhbF92YWx1ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3JlYWxfdmFsdWUobikgKChzdHJ1Y3QgcmVhbF92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHJlYWxfdmFsdWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3JlYWxfdmFsdWUobikgKChzdHJ1Y3QgcmVhbF92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcmVhbF92YWx1ZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eF92YV9nY18oKSAoKHZlYzxydHgsdmFfZ2M+ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxydHgsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfdmFfZ2NfKCkgKCh2ZWM8cnR4LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZlYzxydHgsdmFfZ2M+KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdmVjX3J0eF92YV9nY18obikgKCh2ZWM8cnR4LHZhX2djPiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHJ0eCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3ZlY19ydHhfdmFfZ2NfKG4pICgodmVjPHJ0eCx2YV9nYz4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmVjPHJ0eCx2YV9nYz4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2Jsb2NrX3N5bWJvbCgpICgoc3RydWN0IGJsb2NrX3N5bWJvbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYmxvY2tfc3ltYm9sKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2Jsb2NrX3N5bWJvbCgpICgoc3RydWN0IGJsb2NrX3N5bWJvbCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBibG9ja19zeW1ib2wpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ibG9ja19zeW1ib2wobikgKChzdHJ1Y3QgYmxvY2tfc3ltYm9sICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYmxvY2tfc3ltYm9sKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ibG9ja19zeW1ib2wobikgKChzdHJ1Y3QgYmxvY2tfc3ltYm9sICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBibG9ja19zeW1ib2wpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX29iamVjdF9ibG9jaygpICgoc3RydWN0IG9iamVjdF9ibG9jayAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgb2JqZWN0X2Jsb2NrKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX29iamVjdF9ibG9jaygpICgoc3RydWN0IG9iamVjdF9ibG9jayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBvYmplY3RfYmxvY2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19vYmplY3RfYmxvY2sobikgKChzdHJ1Y3Qgb2JqZWN0X2Jsb2NrICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgb2JqZWN0X2Jsb2NrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19vYmplY3RfYmxvY2sobikgKChzdHJ1Y3Qgb2JqZWN0X2Jsb2NrICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBvYmplY3RfYmxvY2spLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3JlZ19hdHRycygpICgoc3RydWN0IHJlZ19hdHRycyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcmVnX2F0dHJzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3JlZ19hdHRycygpICgoc3RydWN0IHJlZ19hdHRycyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCByZWdfYXR0cnMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19yZWdfYXR0cnMobikgKChzdHJ1Y3QgcmVnX2F0dHJzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgcmVnX2F0dHJzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19yZWdfYXR0cnMobikgKChzdHJ1Y3QgcmVnX2F0dHJzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCByZWdfYXR0cnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX21lbV9hdHRycygpICgoc3RydWN0IG1lbV9hdHRycyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbWVtX2F0dHJzKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX21lbV9hdHRycygpICgoc3RydWN0IG1lbV9hdHRycyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtZW1fYXR0cnMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19tZW1fYXR0cnMobikgKChzdHJ1Y3QgbWVtX2F0dHJzICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbWVtX2F0dHJzKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19tZW1fYXR0cnMobikgKChzdHJ1Y3QgbWVtX2F0dHJzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtZW1fYXR0cnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvdmVyYWdlX2RhdGEoKSAoKHN0cnVjdCBjb3ZlcmFnZV9kYXRhICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb3ZlcmFnZV9kYXRhKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NvdmVyYWdlX2RhdGEoKSAoKHN0cnVjdCBjb3ZlcmFnZV9kYXRhICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvdmVyYWdlX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb3ZlcmFnZV9kYXRhKG4pICgoc3RydWN0IGNvdmVyYWdlX2RhdGEgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjb3ZlcmFnZV9kYXRhKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb3ZlcmFnZV9kYXRhKG4pICgoc3RydWN0IGNvdmVyYWdlX2RhdGEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNvdmVyYWdlX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2JpdG1hcF9vYnN0YWNrKCkgKChzdHJ1Y3QgYml0bWFwX29ic3RhY2sgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJpdG1hcF9vYnN0YWNrKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2JpdG1hcF9vYnN0YWNrKCkgKChzdHJ1Y3QgYml0bWFwX29ic3RhY2sgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYml0bWFwX29ic3RhY2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19iaXRtYXBfb2JzdGFjayhuKSAoKHN0cnVjdCBiaXRtYXBfb2JzdGFjayAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJpdG1hcF9vYnN0YWNrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19iaXRtYXBfb2JzdGFjayhuKSAoKHN0cnVjdCBiaXRtYXBfb2JzdGFjayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYml0bWFwX29ic3RhY2spLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2JpdG1hcF9lbGVtZW50X2RlZigpICgoc3RydWN0IGJpdG1hcF9lbGVtZW50X2RlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2JpdG1hcF9lbGVtZW50X2RlZigpICgoc3RydWN0IGJpdG1hcF9lbGVtZW50X2RlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19iaXRtYXBfZWxlbWVudF9kZWYobikgKChzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19iaXRtYXBfZWxlbWVudF9kZWYobikgKChzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaXRtYXBfZWxlbWVudF9kZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NwbGF5X3RyZWVfcygpICgoc3RydWN0IHNwbGF5X3RyZWVfcyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3BsYXlfdHJlZV9zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NwbGF5X3RyZWVfcygpICgoc3RydWN0IHNwbGF5X3RyZWVfcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzcGxheV90cmVlX3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zcGxheV90cmVlX3MobikgKChzdHJ1Y3Qgc3BsYXlfdHJlZV9zICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3BsYXlfdHJlZV9zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zcGxheV90cmVlX3MobikgKChzdHJ1Y3Qgc3BsYXlfdHJlZV9zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBzcGxheV90cmVlX3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NwbGF5X3RyZWVfbm9kZV9zKCkgKChzdHJ1Y3Qgc3BsYXlfdHJlZV9ub2RlX3MgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNwbGF5X3RyZWVfbm9kZV9zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NwbGF5X3RyZWVfbm9kZV9zKCkgKChzdHJ1Y3Qgc3BsYXlfdHJlZV9ub2RlX3MgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3BsYXlfdHJlZV9ub2RlX3MpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zcGxheV90cmVlX25vZGVfcyhuKSAoKHN0cnVjdCBzcGxheV90cmVlX25vZGVfcyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IHNwbGF5X3RyZWVfbm9kZV9zKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zcGxheV90cmVlX25vZGVfcyhuKSAoKHN0cnVjdCBzcGxheV90cmVlX25vZGVfcyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3Qgc3BsYXlfdHJlZV9ub2RlX3MpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX21hY2hpbmVfZnVuY3Rpb24oKSAoKHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX21hY2hpbmVfZnVuY3Rpb24oKSAoKHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19tYWNoaW5lX2Z1bmN0aW9uKG4pICgoc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtYWNoaW5lX2Z1bmN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19tYWNoaW5lX2Z1bmN0aW9uKG4pICgoc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1hY2hpbmVfZnVuY3Rpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2FhcmNoNjRfZnJhbWUoKSAoKHN0cnVjdCBhYXJjaDY0X2ZyYW1lICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhYXJjaDY0X2ZyYW1lKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2FhcmNoNjRfZnJhbWUoKSAoKHN0cnVjdCBhYXJjaDY0X2ZyYW1lICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGFhcmNoNjRfZnJhbWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19hYXJjaDY0X2ZyYW1lKG4pICgoc3RydWN0IGFhcmNoNjRfZnJhbWUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhYXJjaDY0X2ZyYW1lKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19hYXJjaDY0X2ZyYW1lKG4pICgoc3RydWN0IGFhcmNoNjRfZnJhbWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGFhcmNoNjRfZnJhbWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2Jhc2ljX2Jsb2NrX2RlZigpICgoc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2Jhc2ljX2Jsb2NrX2RlZigpICgoc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiYXNpY19ibG9ja19kZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19iYXNpY19ibG9ja19kZWYobikgKChzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19iYXNpY19ibG9ja19kZWYobikgKChzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiYXNpY19ibG9ja19kZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VkZ2VfZGVmKCkgKChzdHJ1Y3QgZWRnZV9kZWYgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVkZ2VfZGVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VkZ2VfZGVmKCkgKChzdHJ1Y3QgZWRnZV9kZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWRnZV9kZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19lZGdlX2RlZihuKSAoKHN0cnVjdCBlZGdlX2RlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGVkZ2VfZGVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19lZGdlX2RlZihuKSAoKHN0cnVjdCBlZGdlX2RlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgZWRnZV9kZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsX29wdGltaXphdGlvbigpICgoc3RydWN0IGNsX29wdGltaXphdGlvbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2xfb3B0aW1pemF0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NsX29wdGltaXphdGlvbigpICgoc3RydWN0IGNsX29wdGltaXphdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjbF9vcHRpbWl6YXRpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jbF9vcHRpbWl6YXRpb24obikgKChzdHJ1Y3QgY2xfb3B0aW1pemF0aW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY2xfb3B0aW1pemF0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jbF9vcHRpbWl6YXRpb24obikgKChzdHJ1Y3QgY2xfb3B0aW1pemF0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjbF9vcHRpbWl6YXRpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsX3RhcmdldF9vcHRpb24oKSAoKHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NsX3RhcmdldF9vcHRpb24oKSAoKHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNsX3RhcmdldF9vcHRpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jbF90YXJnZXRfb3B0aW9uKG4pICgoc3RydWN0IGNsX3RhcmdldF9vcHRpb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jbF90YXJnZXRfb3B0aW9uKG4pICgoc3RydWN0IGNsX3RhcmdldF9vcHRpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNsX3RhcmdldF9vcHRpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NlY3Rpb24oKSAoKHVuaW9uIHNlY3Rpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gc2VjdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9zZWN0aW9uKCkgKCh1bmlvbiBzZWN0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gc2VjdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3NlY3Rpb24obikgKCh1bmlvbiBzZWN0aW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBzZWN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zZWN0aW9uKG4pICgodW5pb24gc2VjdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBzZWN0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19naW1wbGVfc3RhdGVtZW50X2QoU0laRSkgKCh1bmlvbiBnaW1wbGVfc3RhdGVtZW50X2QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKFNJWkUgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9naW1wbGVfc3RhdGVtZW50X2QoU0laRSkgKCh1bmlvbiBnaW1wbGVfc3RhdGVtZW50X2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoU0laRSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZ2ltcGxlX3N0YXRlbWVudF9kKFNJWkUsIG4pICgodW5pb24gZ2ltcGxlX3N0YXRlbWVudF9kICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoU0laRSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19naW1wbGVfc3RhdGVtZW50X2QoU0laRSwgbikgKCh1bmlvbiBnaW1wbGVfc3RhdGVtZW50X2QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKFNJWkUsIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcnR2ZWNfZGVmKFNJWkUpICgoc3RydWN0IHJ0dmVjX2RlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoU0laRSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3J0dmVjX2RlZihTSVpFKSAoKHN0cnVjdCBydHZlY19kZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoU0laRSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcnR2ZWNfZGVmKFNJWkUsIG4pICgoc3RydWN0IHJ0dmVjX2RlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKFNJWkUsIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcnR2ZWNfZGVmKFNJWkUsIG4pICgoc3RydWN0IHJ0dmVjX2RlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoU0laRSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19ydHhfZGVmKFNJWkUpICgoc3RydWN0IHJ0eF9kZWYgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKFNJWkUgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9ydHhfZGVmKFNJWkUpICgoc3RydWN0IHJ0eF9kZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoU0laRSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcnR4X2RlZihTSVpFLCBuKSAoKHN0cnVjdCBydHhfZGVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoU0laRSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHhfZGVmKFNJWkUsIG4pICgoc3RydWN0IHJ0eF9kZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKFNJWkUsIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYml0bWFwX2hlYWRfZGVmKCkgKChzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYml0bWFwX2hlYWRfZGVmKCkgKChzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJpdG1hcF9oZWFkX2RlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2JpdG1hcF9oZWFkX2RlZihuKSAoKHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2JpdG1hcF9oZWFkX2RlZihuKSAoKHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGJpdG1hcF9oZWFkX2RlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BwX21hY3JvX3UoKSAoKHVuaW9uIGNwcF9tYWNyb191ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGNwcF9tYWNyb191KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NwcF9tYWNyb191KCkgKCh1bmlvbiBjcHBfbWFjcm9fdSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIGNwcF9tYWNyb191KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY3BwX21hY3JvX3UobikgKCh1bmlvbiBjcHBfbWFjcm9fdSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gY3BwX21hY3JvX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwcF9tYWNyb191KG4pICgodW5pb24gY3BwX21hY3JvX3UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gY3BwX21hY3JvX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2h0X2lkZW50aWZpZXIoKSAoKHN0cnVjdCBodF9pZGVudGlmaWVyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBodF9pZGVudGlmaWVyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2h0X2lkZW50aWZpZXIoKSAoKHN0cnVjdCBodF9pZGVudGlmaWVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGh0X2lkZW50aWZpZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19odF9pZGVudGlmaWVyKG4pICgoc3RydWN0IGh0X2lkZW50aWZpZXIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBodF9pZGVudGlmaWVyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19odF9pZGVudGlmaWVyKG4pICgoc3RydWN0IGh0X2lkZW50aWZpZXIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGh0X2lkZW50aWZpZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX19jcHBfaGFzaG5vZGVfdmFsdWUoKSAoKHVuaW9uIF9jcHBfaGFzaG5vZGVfdmFsdWUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gX2NwcF9oYXNobm9kZV92YWx1ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9fY3BwX2hhc2hub2RlX3ZhbHVlKCkgKCh1bmlvbiBfY3BwX2hhc2hub2RlX3ZhbHVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gX2NwcF9oYXNobm9kZV92YWx1ZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX19jcHBfaGFzaG5vZGVfdmFsdWUobikgKCh1bmlvbiBfY3BwX2hhc2hub2RlX3ZhbHVlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBfY3BwX2hhc2hub2RlX3ZhbHVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19fY3BwX2hhc2hub2RlX3ZhbHVlKG4pICgodW5pb24gX2NwcF9oYXNobm9kZV92YWx1ZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBfY3BwX2hhc2hub2RlX3ZhbHVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jcHBfdG9rZW5fdSgpICgodW5pb24gY3BwX3Rva2VuX3UgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gY3BwX3Rva2VuX3UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BwX3Rva2VuX3UoKSAoKHVuaW9uIGNwcF90b2tlbl91ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gY3BwX3Rva2VuX3UpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcHBfdG9rZW5fdShuKSAoKHVuaW9uIGNwcF90b2tlbl91ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBjcHBfdG9rZW5fdSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY3BwX3Rva2VuX3UobikgKCh1bmlvbiBjcHBfdG9rZW5fdSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1bmlvbiBjcHBfdG9rZW5fdSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BwX2lkZW50aWZpZXIoKSAoKHN0cnVjdCBjcHBfaWRlbnRpZmllciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BwX2lkZW50aWZpZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BwX2lkZW50aWZpZXIoKSAoKHN0cnVjdCBjcHBfaWRlbnRpZmllciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcHBfaWRlbnRpZmllcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwcF9pZGVudGlmaWVyKG4pICgoc3RydWN0IGNwcF9pZGVudGlmaWVyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BwX2lkZW50aWZpZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwcF9pZGVudGlmaWVyKG4pICgoc3RydWN0IGNwcF9pZGVudGlmaWVyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcHBfaWRlbnRpZmllciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BwX21hY3JvX2FyZygpICgoc3RydWN0IGNwcF9tYWNyb19hcmcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF9tYWNyb19hcmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BwX21hY3JvX2FyZygpICgoc3RydWN0IGNwcF9tYWNyb19hcmcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BwX21hY3JvX2FyZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwcF9tYWNyb19hcmcobikgKChzdHJ1Y3QgY3BwX21hY3JvX2FyZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF9tYWNyb19hcmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwcF9tYWNyb19hcmcobikgKChzdHJ1Y3QgY3BwX21hY3JvX2FyZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BwX21hY3JvX2FyZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYW5zd2VyKCkgKChzdHJ1Y3QgYW5zd2VyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhbnN3ZXIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYW5zd2VyKCkgKChzdHJ1Y3QgYW5zd2VyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGFuc3dlcikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2Fuc3dlcihuKSAoKHN0cnVjdCBhbnN3ZXIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBhbnN3ZXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2Fuc3dlcihuKSAoKHN0cnVjdCBhbnN3ZXIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGFuc3dlciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BwX21hY3JvKCkgKChzdHJ1Y3QgY3BwX21hY3JvICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcHBfbWFjcm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BwX21hY3JvKCkgKChzdHJ1Y3QgY3BwX21hY3JvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF9tYWNybykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwcF9tYWNybyhuKSAoKHN0cnVjdCBjcHBfbWFjcm8gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcHBfbWFjcm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwcF9tYWNybyhuKSAoKHN0cnVjdCBjcHBfbWFjcm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF9tYWNybyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BwX3N0cmluZygpICgoc3RydWN0IGNwcF9zdHJpbmcgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF9zdHJpbmcpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BwX3N0cmluZygpICgoc3RydWN0IGNwcF9zdHJpbmcgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BwX3N0cmluZykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwcF9zdHJpbmcobikgKChzdHJ1Y3QgY3BwX3N0cmluZyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF9zdHJpbmcpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwcF9zdHJpbmcobikgKChzdHJ1Y3QgY3BwX3N0cmluZyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BwX3N0cmluZyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BwX3Rva2VuKCkgKChzdHJ1Y3QgY3BwX3Rva2VuICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcHBfdG9rZW4pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BwX3Rva2VuKCkgKChzdHJ1Y3QgY3BwX3Rva2VuICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF90b2tlbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwcF90b2tlbihuKSAoKHN0cnVjdCBjcHBfdG9rZW4gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBjcHBfdG9rZW4pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwcF90b2tlbihuKSAoKHN0cnVjdCBjcHBfdG9rZW4gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF90b2tlbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGluZV9tYXBzKCkgKChzdHJ1Y3QgbGluZV9tYXBzICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaW5lX21hcHMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGluZV9tYXBzKCkgKChzdHJ1Y3QgbGluZV9tYXBzICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxpbmVfbWFwcykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xpbmVfbWFwcyhuKSAoKHN0cnVjdCBsaW5lX21hcHMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaW5lX21hcHMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xpbmVfbWFwcyhuKSAoKHN0cnVjdCBsaW5lX21hcHMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxpbmVfbWFwcyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbG9jYXRpb25fYWRob2NfZGF0YV9tYXAoKSAoKHN0cnVjdCBsb2NhdGlvbl9hZGhvY19kYXRhX21hcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9jYXRpb25fYWRob2NfZGF0YV9tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbG9jYXRpb25fYWRob2NfZGF0YV9tYXAoKSAoKHN0cnVjdCBsb2NhdGlvbl9hZGhvY19kYXRhX21hcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsb2NhdGlvbl9hZGhvY19kYXRhX21hcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xvY2F0aW9uX2FkaG9jX2RhdGFfbWFwKG4pICgoc3RydWN0IGxvY2F0aW9uX2FkaG9jX2RhdGFfbWFwICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9jYXRpb25fYWRob2NfZGF0YV9tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xvY2F0aW9uX2FkaG9jX2RhdGFfbWFwKG4pICgoc3RydWN0IGxvY2F0aW9uX2FkaG9jX2RhdGFfbWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsb2NhdGlvbl9hZGhvY19kYXRhX21hcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaHRhYigpICgoc3RydWN0IGh0YWIgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGh0YWIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfaHRhYigpICgoc3RydWN0IGh0YWIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaHRhYikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2h0YWIobikgKChzdHJ1Y3QgaHRhYiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGh0YWIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2h0YWIobikgKChzdHJ1Y3QgaHRhYiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgaHRhYiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbG9jYXRpb25fYWRob2NfZGF0YSgpICgoc3RydWN0IGxvY2F0aW9uX2FkaG9jX2RhdGEgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxvY2F0aW9uX2FkaG9jX2RhdGEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbG9jYXRpb25fYWRob2NfZGF0YSgpICgoc3RydWN0IGxvY2F0aW9uX2FkaG9jX2RhdGEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9jYXRpb25fYWRob2NfZGF0YSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xvY2F0aW9uX2FkaG9jX2RhdGEobikgKChzdHJ1Y3QgbG9jYXRpb25fYWRob2NfZGF0YSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxvY2F0aW9uX2FkaG9jX2RhdGEpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xvY2F0aW9uX2FkaG9jX2RhdGEobikgKChzdHJ1Y3QgbG9jYXRpb25fYWRob2NfZGF0YSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbG9jYXRpb25fYWRob2NfZGF0YSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbWFwc19pbmZvKCkgKChzdHJ1Y3QgbWFwc19pbmZvICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtYXBzX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbWFwc19pbmZvKCkgKChzdHJ1Y3QgbWFwc19pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1hcHNfaW5mbykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX21hcHNfaW5mbyhuKSAoKHN0cnVjdCBtYXBzX2luZm8gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBtYXBzX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX21hcHNfaW5mbyhuKSAoKHN0cnVjdCBtYXBzX2luZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IG1hcHNfaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbGluZV9tYXAoKSAoKHN0cnVjdCBsaW5lX21hcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGluZV9tYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbGluZV9tYXAoKSAoKHN0cnVjdCBsaW5lX21hcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaW5lX21hcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xpbmVfbWFwKG4pICgoc3RydWN0IGxpbmVfbWFwICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGluZV9tYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xpbmVfbWFwKG4pICgoc3RydWN0IGxpbmVfbWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaW5lX21hcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbWFwX3UoKSAoKHVuaW9uIG1hcF91ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIG1hcF91KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX21hcF91KCkgKCh1bmlvbiBtYXBfdSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHVuaW9uIG1hcF91KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbWFwX3UobikgKCh1bmlvbiBtYXBfdSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbWFwX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX21hcF91KG4pICgodW5pb24gbWFwX3UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodW5pb24gbWFwX3UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xpbmVfbWFwX21hY3JvKCkgKChzdHJ1Y3QgbGluZV9tYXBfbWFjcm8gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxpbmVfbWFwX21hY3JvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xpbmVfbWFwX21hY3JvKCkgKChzdHJ1Y3QgbGluZV9tYXBfbWFjcm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGluZV9tYXBfbWFjcm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19saW5lX21hcF9tYWNybyhuKSAoKHN0cnVjdCBsaW5lX21hcF9tYWNybyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxpbmVfbWFwX21hY3JvKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19saW5lX21hcF9tYWNybyhuKSAoKHN0cnVjdCBsaW5lX21hcF9tYWNybyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgbGluZV9tYXBfbWFjcm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfbm9kZShTSVpFKSAoKHVuaW9uIHRyZWVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoU0laRSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWVfbm9kZShTSVpFKSAoKHVuaW9uIHRyZWVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChTSVpFIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY190cmVlX25vZGUoU0laRSwgbikgKCh1bmlvbiB0cmVlX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChTSVpFLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RyZWVfbm9kZShTSVpFLCBuKSAoKHVuaW9uIHRyZWVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoU0laRSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jcHBfaGFzaG5vZGUoKSAoKHN0cnVjdCBjcHBfaGFzaG5vZGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF9oYXNobm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jcHBfaGFzaG5vZGUoKSAoKHN0cnVjdCBjcHBfaGFzaG5vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BwX2hhc2hub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY3BwX2hhc2hub2RlKG4pICgoc3RydWN0IGNwcF9oYXNobm9kZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGNwcF9oYXNobm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY3BwX2hhc2hub2RlKG4pICgoc3RydWN0IGNwcF9oYXNobm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdHJ1Y3QgY3BwX2hhc2hub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19saW5lX21hcF9vcmRpbmFyeSgpICgoc3RydWN0IGxpbmVfbWFwX29yZGluYXJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaW5lX21hcF9vcmRpbmFyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9saW5lX21hcF9vcmRpbmFyeSgpICgoc3RydWN0IGxpbmVfbWFwX29yZGluYXJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxpbmVfbWFwX29yZGluYXJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbGluZV9tYXBfb3JkaW5hcnkobikgKChzdHJ1Y3QgbGluZV9tYXBfb3JkaW5hcnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHN0cnVjdCBsaW5lX21hcF9vcmRpbmFyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbGluZV9tYXBfb3JkaW5hcnkobikgKChzdHJ1Y3QgbGluZV9tYXBfb3JkaW5hcnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RydWN0IGxpbmVfbWFwX29yZGluYXJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisKKy8qIEFsbG9jYXRvcnMgZm9yIGtub3duIHR5cGVkZWZzLiAgKi8KKyNkZWZpbmUgZ2djX2FsbG9jX2F0dHIoKSAoKGF0dHIgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoYXR0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9hdHRyKCkgKChhdHRyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoYXR0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2F0dHIobikgKChhdHRyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChhdHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19hdHRyKG4pICgoYXR0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChhdHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19oYXNoKCkgKChoYXNoICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGhhc2gpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfaGFzaCgpICgoaGFzaCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGhhc2gpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19oYXNoKG4pICgoaGFzaCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaGFzaCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaGFzaChuKSAoKGhhc2ggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaGFzaCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2Nfb2JqY19tYXBfdCgpICgob2JqY19tYXBfdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChvYmpjX21hcF90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX29iamNfbWFwX3QoKSAoKG9iamNfbWFwX3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChvYmpjX21hcF90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfb2JqY19tYXBfdChuKSAoKG9iamNfbWFwX3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKG9iamNfbWFwX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX29iamNfbWFwX3QobikgKChvYmpjX21hcF90ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKG9iamNfbWFwX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2dpbXBsZV90eXBlX2xlYWRlcl9lbnRyeSgpICgoZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGdpbXBsZV90eXBlX2xlYWRlcl9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9naW1wbGVfdHlwZV9sZWFkZXJfZW50cnkoKSAoKGdpbXBsZV90eXBlX2xlYWRlcl9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGdpbXBsZV90eXBlX2xlYWRlcl9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV90eXBlX2xlYWRlcl9lbnRyeShuKSAoKGdpbXBsZV90eXBlX2xlYWRlcl9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19naW1wbGVfdHlwZV9sZWFkZXJfZW50cnkobikgKChnaW1wbGVfdHlwZV9sZWFkZXJfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19tZXRob2RfZW50cnkoKSAoKG1ldGhvZF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChtZXRob2RfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbWV0aG9kX2VudHJ5KCkgKChtZXRob2RfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChtZXRob2RfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19tZXRob2RfZW50cnkobikgKChtZXRob2RfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKG1ldGhvZF9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbWV0aG9kX2VudHJ5KG4pICgobWV0aG9kX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKG1ldGhvZF9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY29uc3RhbnRfcG9vbCgpICgoY29uc3RhbnRfcG9vbCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdGFudF9wb29sKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NvbnN0YW50X3Bvb2woKSAoKGNvbnN0YW50X3Bvb2wgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdGFudF9wb29sKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29uc3RhbnRfcG9vbChuKSAoKGNvbnN0YW50X3Bvb2wgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0YW50X3Bvb2wpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NvbnN0YW50X3Bvb2wobikgKChjb25zdGFudF9wb29sICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0YW50X3Bvb2wpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2dvX2NoYXJfcCgpICgoZ29fY2hhcl9wICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGdvX2NoYXJfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9nb19jaGFyX3AoKSAoKGdvX2NoYXJfcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGdvX2NoYXJfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dvX2NoYXJfcChuKSAoKGdvX2NoYXJfcCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ29fY2hhcl9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19nb19jaGFyX3AobikgKChnb19jaGFyX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ29fY2hhcl9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnkoKSAoKGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5KCkgKChjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnkobikgKChjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5KG4pICgoY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY3BfZGVmYXVsdF9hcmdfZW50cnkoKSAoKGNwX2RlZmF1bHRfYXJnX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGNwX2RlZmF1bHRfYXJnX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NwX2RlZmF1bHRfYXJnX2VudHJ5KCkgKChjcF9kZWZhdWx0X2FyZ19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGNwX2RlZmF1bHRfYXJnX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY3BfZGVmYXVsdF9hcmdfZW50cnkobikgKChjcF9kZWZhdWx0X2FyZ19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY3BfZGVmYXVsdF9hcmdfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NwX2RlZmF1bHRfYXJnX2VudHJ5KG4pICgoY3BfZGVmYXVsdF9hcmdfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY3BfZGVmYXVsdF9hcmdfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NwX3Rva2VuX2NhY2hlX3B0cigpICgoY3BfdG9rZW5fY2FjaGVfcHRyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGNwX3Rva2VuX2NhY2hlX3B0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jcF90b2tlbl9jYWNoZV9wdHIoKSAoKGNwX3Rva2VuX2NhY2hlX3B0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGNwX3Rva2VuX2NhY2hlX3B0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NwX3Rva2VuX2NhY2hlX3B0cihuKSAoKGNwX3Rva2VuX2NhY2hlX3B0ciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY3BfdG9rZW5fY2FjaGVfcHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jcF90b2tlbl9jYWNoZV9wdHIobikgKChjcF90b2tlbl9jYWNoZV9wdHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY3BfdG9rZW5fY2FjaGVfcHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jcF90b2tlbl9wb3NpdGlvbigpICgoY3BfdG9rZW5fcG9zaXRpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoY3BfdG9rZW5fcG9zaXRpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY3BfdG9rZW5fcG9zaXRpb24oKSAoKGNwX3Rva2VuX3Bvc2l0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoY3BfdG9rZW5fcG9zaXRpb24pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jcF90b2tlbl9wb3NpdGlvbihuKSAoKGNwX3Rva2VuX3Bvc2l0aW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjcF90b2tlbl9wb3NpdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY3BfdG9rZW5fcG9zaXRpb24obikgKChjcF90b2tlbl9wb3NpdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjcF90b2tlbl9wb3NpdGlvbiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaW5jb21wbGV0ZV92YXIoKSAoKGluY29tcGxldGVfdmFyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGluY29tcGxldGVfdmFyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2luY29tcGxldGVfdmFyKCkgKChpbmNvbXBsZXRlX3ZhciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGluY29tcGxldGVfdmFyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaW5jb21wbGV0ZV92YXIobikgKChpbmNvbXBsZXRlX3ZhciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaW5jb21wbGV0ZV92YXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2luY29tcGxldGVfdmFyKG4pICgoaW5jb21wbGV0ZV92YXIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaW5jb21wbGV0ZV92YXIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfcGFpcl9wKCkgKCh0cmVlX3BhaXJfcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0cmVlX3BhaXJfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX3BhaXJfcCgpICgodHJlZV9wYWlyX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0cmVlX3BhaXJfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RyZWVfcGFpcl9wKG4pICgodHJlZV9wYWlyX3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHRyZWVfcGFpcl9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX3BhaXJfcChuKSAoKHRyZWVfcGFpcl9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHRyZWVfcGFpcl9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90KCkgKChxdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCgpICgocXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19xdWFsaWZpZWRfdHlwZWRlZl91c2FnZV90KG4pICgocXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAocXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdChuKSAoKHF1YWxpZmllZF90eXBlZGVmX3VzYWdlX3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAocXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcHRybWVtX2NzdF90KCkgKChwdHJtZW1fY3N0X3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAocHRybWVtX2NzdF90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3B0cm1lbV9jc3RfdCgpICgocHRybWVtX2NzdF90ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAocHRybWVtX2NzdF90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcHRybWVtX2NzdF90KG4pICgocHRybWVtX2NzdF90ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwdHJtZW1fY3N0X3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3B0cm1lbV9jc3RfdChuKSAoKHB0cm1lbV9jc3RfdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwdHJtZW1fY3N0X3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RlbXBsYXRlX3Bhcm1faW5kZXgoKSAoKHRlbXBsYXRlX3Bhcm1faW5kZXggKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodGVtcGxhdGVfcGFybV9pbmRleCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90ZW1wbGF0ZV9wYXJtX2luZGV4KCkgKCh0ZW1wbGF0ZV9wYXJtX2luZGV4ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodGVtcGxhdGVfcGFybV9pbmRleCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RlbXBsYXRlX3Bhcm1faW5kZXgobikgKCh0ZW1wbGF0ZV9wYXJtX2luZGV4ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0ZW1wbGF0ZV9wYXJtX2luZGV4KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190ZW1wbGF0ZV9wYXJtX2luZGV4KG4pICgodGVtcGxhdGVfcGFybV9pbmRleCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0ZW1wbGF0ZV9wYXJtX2luZGV4KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19iaW5kaW5nX2VudHJ5KCkgKChiaW5kaW5nX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGJpbmRpbmdfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYmluZGluZ19lbnRyeSgpICgoYmluZGluZ19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGJpbmRpbmdfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19iaW5kaW5nX2VudHJ5KG4pICgoYmluZGluZ19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoYmluZGluZ19lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYmluZGluZ19lbnRyeShuKSAoKGJpbmRpbmdfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoYmluZGluZ19lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYmluZGluZ190YWJsZSgpICgoYmluZGluZ190YWJsZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChiaW5kaW5nX3RhYmxlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2JpbmRpbmdfdGFibGUoKSAoKGJpbmRpbmdfdGFibGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChiaW5kaW5nX3RhYmxlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfYmluZGluZ190YWJsZShuKSAoKGJpbmRpbmdfdGFibGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGJpbmRpbmdfdGFibGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2JpbmRpbmdfdGFibGUobikgKChiaW5kaW5nX3RhYmxlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGJpbmRpbmdfdGFibGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3BlbmRpbmdfcmVkZWZpbml0aW9uKCkgKChwZW5kaW5nX3JlZGVmaW5pdGlvbiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwZW5kaW5nX3JlZGVmaW5pdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wZW5kaW5nX3JlZGVmaW5pdGlvbigpICgocGVuZGluZ19yZWRlZmluaXRpb24gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwZW5kaW5nX3JlZGVmaW5pdGlvbikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3BlbmRpbmdfcmVkZWZpbml0aW9uKG4pICgocGVuZGluZ19yZWRlZmluaXRpb24gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHBlbmRpbmdfcmVkZWZpbml0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19wZW5kaW5nX3JlZGVmaW5pdGlvbihuKSAoKHBlbmRpbmdfcmVkZWZpbml0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHBlbmRpbmdfcmVkZWZpbml0aW9uKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19wZW5kaW5nX3dlYWsoKSAoKHBlbmRpbmdfd2VhayAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwZW5kaW5nX3dlYWspIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcGVuZGluZ193ZWFrKCkgKChwZW5kaW5nX3dlYWsgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwZW5kaW5nX3dlYWspIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19wZW5kaW5nX3dlYWsobikgKChwZW5kaW5nX3dlYWsgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHBlbmRpbmdfd2VhayksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcGVuZGluZ193ZWFrKG4pICgocGVuZGluZ193ZWFrICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHBlbmRpbmdfd2VhayksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2Nfc3RtdF90cmVlKCkgKChzdG10X3RyZWUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RtdF90cmVlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3N0bXRfdHJlZSgpICgoc3RtdF90cmVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3RtdF90cmVlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfc3RtdF90cmVlKG4pICgoc3RtdF90cmVlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdG10X3RyZWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3N0bXRfdHJlZShuKSAoKHN0bXRfdHJlZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzdG10X3RyZWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RyZWVfZ2NfdmVjKCkgKCh0cmVlX2djX3ZlYyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0cmVlX2djX3ZlYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90cmVlX2djX3ZlYygpICgodHJlZV9nY192ZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0cmVlX2djX3ZlYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RyZWVfZ2NfdmVjKG4pICgodHJlZV9nY192ZWMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHRyZWVfZ2NfdmVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190cmVlX2djX3ZlYyhuKSAoKHRyZWVfZ2NfdmVjICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHRyZWVfZ2NfdmVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jb25zdF9jaGFyX3AoKSAoKGNvbnN0X2NoYXJfcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9jaGFyX3ApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY29uc3RfY2hhcl9wKCkgKChjb25zdF9jaGFyX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9jaGFyX3ApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb25zdF9jaGFyX3AobikgKChjb25zdF9jaGFyX3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X2NoYXJfcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29uc3RfY2hhcl9wKG4pICgoY29uc3RfY2hhcl9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X2NoYXJfcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY19iaW5kaW5nX3B0cigpICgoY19iaW5kaW5nX3B0ciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjX2JpbmRpbmdfcHRyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NfYmluZGluZ19wdHIoKSAoKGNfYmluZGluZ19wdHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjX2JpbmRpbmdfcHRyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY19iaW5kaW5nX3B0cihuKSAoKGNfYmluZGluZ19wdHIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNfYmluZGluZ19wdHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NfYmluZGluZ19wdHIobikgKChjX2JpbmRpbmdfcHRyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNfYmluZGluZ19wdHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NfZ290b19iaW5kaW5nc19wKCkgKChjX2dvdG9fYmluZGluZ3NfcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjX2dvdG9fYmluZGluZ3NfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jX2dvdG9fYmluZGluZ3NfcCgpICgoY19nb3RvX2JpbmRpbmdzX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjX2dvdG9fYmluZGluZ3NfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NfZ290b19iaW5kaW5nc19wKG4pICgoY19nb3RvX2JpbmRpbmdzX3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNfZ290b19iaW5kaW5nc19wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jX2dvdG9fYmluZGluZ3NfcChuKSAoKGNfZ290b19iaW5kaW5nc19wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNfZ290b19iaW5kaW5nc19wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sb29wX2luZm8oKSAoKGxvb3BfaW5mbyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsb29wX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbG9vcF9pbmZvKCkgKChsb29wX2luZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsb29wX2luZm8pIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sb29wX2luZm8obikgKChsb29wX2luZm8gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGxvb3BfaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbG9vcF9pbmZvKG4pICgobG9vcF9pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGxvb3BfaW5mbyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfcmFuZ2VfY2hlY2tfaW5mbygpICgocmFuZ2VfY2hlY2tfaW5mbyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChyYW5nZV9jaGVja19pbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3JhbmdlX2NoZWNrX2luZm8oKSAoKHJhbmdlX2NoZWNrX2luZm8gKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChyYW5nZV9jaGVja19pbmZvKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfcmFuZ2VfY2hlY2tfaW5mbyhuKSAoKHJhbmdlX2NoZWNrX2luZm8gKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHJhbmdlX2NoZWNrX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3JhbmdlX2NoZWNrX2luZm8obikgKChyYW5nZV9jaGVja19pbmZvICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHJhbmdlX2NoZWNrX2luZm8pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3Bhcm1fYXR0cigpICgocGFybV9hdHRyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHBhcm1fYXR0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wYXJtX2F0dHIoKSAoKHBhcm1fYXR0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHBhcm1fYXR0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3Bhcm1fYXR0cihuKSAoKHBhcm1fYXR0ciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAocGFybV9hdHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19wYXJtX2F0dHIobikgKChwYXJtX2F0dHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAocGFybV9hdHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pbmxpbmVfc3VtbWFyeV90KCkgKChpbmxpbmVfc3VtbWFyeV90ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGlubGluZV9zdW1tYXJ5X3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfaW5saW5lX3N1bW1hcnlfdCgpICgoaW5saW5lX3N1bW1hcnlfdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGlubGluZV9zdW1tYXJ5X3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pbmxpbmVfc3VtbWFyeV90KG4pICgoaW5saW5lX3N1bW1hcnlfdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaW5saW5lX3N1bW1hcnlfdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaW5saW5lX3N1bW1hcnlfdChuKSAoKGlubGluZV9zdW1tYXJ5X3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaW5saW5lX3N1bW1hcnlfdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY29uZGl0aW9ucygpICgoY29uZGl0aW9ucyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25kaXRpb25zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NvbmRpdGlvbnMoKSAoKGNvbmRpdGlvbnMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25kaXRpb25zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29uZGl0aW9ucyhuKSAoKGNvbmRpdGlvbnMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbmRpdGlvbnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NvbmRpdGlvbnMobikgKChjb25kaXRpb25zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbmRpdGlvbnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2x0b19maWxlX2RlY2xfZGF0YV9wdHIoKSAoKGx0b19maWxlX2RlY2xfZGF0YV9wdHIgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAobHRvX2ZpbGVfZGVjbF9kYXRhX3B0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9sdG9fZmlsZV9kZWNsX2RhdGFfcHRyKCkgKChsdG9fZmlsZV9kZWNsX2RhdGFfcHRyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAobHRvX2ZpbGVfZGVjbF9kYXRhX3B0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2x0b19maWxlX2RlY2xfZGF0YV9wdHIobikgKChsdG9fZmlsZV9kZWNsX2RhdGFfcHRyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsdG9fZmlsZV9kZWNsX2RhdGFfcHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19sdG9fZmlsZV9kZWNsX2RhdGFfcHRyKG4pICgobHRvX2ZpbGVfZGVjbF9kYXRhX3B0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsdG9fZmlsZV9kZWNsX2RhdGFfcHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19sdG9faW5fZGVjbF9zdGF0ZV9wdHIoKSAoKGx0b19pbl9kZWNsX3N0YXRlX3B0ciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsdG9faW5fZGVjbF9zdGF0ZV9wdHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfbHRvX2luX2RlY2xfc3RhdGVfcHRyKCkgKChsdG9faW5fZGVjbF9zdGF0ZV9wdHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsdG9faW5fZGVjbF9zdGF0ZV9wdHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19sdG9faW5fZGVjbF9zdGF0ZV9wdHIobikgKChsdG9faW5fZGVjbF9zdGF0ZV9wdHIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGx0b19pbl9kZWNsX3N0YXRlX3B0ciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfbHRvX2luX2RlY2xfc3RhdGVfcHRyKG4pICgobHRvX2luX2RlY2xfc3RhdGVfcHRyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGx0b19pbl9kZWNsX3N0YXRlX3B0ciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaXBhX2VkZ2VfYXJnc190KCkgKChpcGFfZWRnZV9hcmdzX3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX2VkZ2VfYXJnc190KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lwYV9lZGdlX2FyZ3NfdCgpICgoaXBhX2VkZ2VfYXJnc190ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX2VkZ2VfYXJnc190KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX2VkZ2VfYXJnc190KG4pICgoaXBhX2VkZ2VfYXJnc190ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfZWRnZV9hcmdzX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2lwYV9lZGdlX2FyZ3NfdChuKSAoKGlwYV9lZGdlX2FyZ3NfdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfZWRnZV9hcmdzX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCgpICgoaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3AoKSAoKGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2lwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcChuKSAoKGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3AobikgKChpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfanVtcF9mdW5jX3QoKSAoKGlwYV9qdW1wX2Z1bmNfdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfanVtcF9mdW5jX3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfaXBhX2p1bXBfZnVuY190KCkgKChpcGFfanVtcF9mdW5jX3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfanVtcF9mdW5jX3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfanVtcF9mdW5jX3QobikgKChpcGFfanVtcF9mdW5jX3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGlwYV9qdW1wX2Z1bmNfdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX2p1bXBfZnVuY190KG4pICgoaXBhX2p1bXBfZnVuY190ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGlwYV9qdW1wX2Z1bmNfdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3QoKSAoKGlwYV9hZ2dfanVtcF9mdW5jdGlvbl90ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGlwYV9hZ2dfanVtcF9mdW5jdGlvbl90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lwYV9hZ2dfanVtcF9mdW5jdGlvbl90KCkgKChpcGFfYWdnX2p1bXBfZnVuY3Rpb25fdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGlwYV9hZ2dfanVtcF9mdW5jdGlvbl90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3QobikgKChpcGFfYWdnX2p1bXBfZnVuY3Rpb25fdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2lwYV9hZ2dfanVtcF9mdW5jdGlvbl90KG4pICgoaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lwYV9hZ2dfanVtcF9mdW5jdGlvbl9wKCkgKChpcGFfYWdnX2p1bXBfZnVuY3Rpb25fcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfYWdnX2p1bXBfZnVuY3Rpb25fcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfYWdnX2p1bXBfZnVuY3Rpb25fcCgpICgoaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfYWdnX2p1bXBfZnVuY3Rpb25fcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2lwYV9hZ2dfanVtcF9mdW5jdGlvbl9wKG4pICgoaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGlwYV9hZ2dfanVtcF9mdW5jdGlvbl9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfYWdnX2p1bXBfZnVuY3Rpb25fcChuKSAoKGlwYV9hZ2dfanVtcF9mdW5jdGlvbl9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGlwYV9hZ2dfanVtcF9mdW5jdGlvbl9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfYWdnX2pmX2l0ZW1fdCgpICgoaXBhX2FnZ19qZl9pdGVtX3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX2FnZ19qZl9pdGVtX3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfaXBhX2FnZ19qZl9pdGVtX3QoKSAoKGlwYV9hZ2dfamZfaXRlbV90ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX2FnZ19qZl9pdGVtX3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfYWdnX2pmX2l0ZW1fdChuKSAoKGlwYV9hZ2dfamZfaXRlbV90ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfYWdnX2pmX2l0ZW1fdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX2FnZ19qZl9pdGVtX3QobikgKChpcGFfYWdnX2pmX2l0ZW1fdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfYWdnX2pmX2l0ZW1fdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2hhcl9wdHIoKSAoKGNoYXJfcHRyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGNoYXJfcHRyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NoYXJfcHRyKCkgKChjaGFyX3B0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGNoYXJfcHRyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY2hhcl9wdHIobikgKChjaGFyX3B0ciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY2hhcl9wdHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NoYXJfcHRyKG4pICgoY2hhcl9wdHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY2hhcl9wdHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3VzZV9vcGVyYW5kX3AoKSAoKHVzZV9vcGVyYW5kX3AgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAodXNlX29wZXJhbmRfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF91c2Vfb3BlcmFuZF9wKCkgKCh1c2Vfb3BlcmFuZF9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAodXNlX29wZXJhbmRfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3VzZV9vcGVyYW5kX3AobikgKCh1c2Vfb3BlcmFuZF9wICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1c2Vfb3BlcmFuZF9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY191c2Vfb3BlcmFuZF9wKG4pICgodXNlX29wZXJhbmRfcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mICh1c2Vfb3BlcmFuZF9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kZWZfb3BlcmFuZF9wKCkgKChkZWZfb3BlcmFuZF9wICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGRlZl9vcGVyYW5kX3ApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZGVmX29wZXJhbmRfcCgpICgoZGVmX29wZXJhbmRfcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGRlZl9vcGVyYW5kX3ApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kZWZfb3BlcmFuZF9wKG4pICgoZGVmX29wZXJhbmRfcCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZGVmX29wZXJhbmRfcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZGVmX29wZXJhbmRfcChuKSAoKGRlZl9vcGVyYW5kX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZGVmX29wZXJhbmRfcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2hhcl9wKCkgKChjaGFyX3AgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoY2hhcl9wKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NoYXJfcCgpICgoY2hhcl9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoY2hhcl9wKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY2hhcl9wKG4pICgoY2hhcl9wICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjaGFyX3ApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NoYXJfcChuKSAoKGNoYXJfcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjaGFyX3ApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2dpbXBsZV9zZXFfbm9kZSgpICgoZ2ltcGxlX3NlcV9ub2RlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGdpbXBsZV9zZXFfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9naW1wbGVfc2VxX25vZGUoKSAoKGdpbXBsZV9zZXFfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGdpbXBsZV9zZXFfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZV9zZXFfbm9kZShuKSAoKGdpbXBsZV9zZXFfbm9kZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ2ltcGxlX3NlcV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19naW1wbGVfc2VxX25vZGUobikgKChnaW1wbGVfc2VxX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ2ltcGxlX3NlcV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19mdW5jdGlvbl9wKCkgKChmdW5jdGlvbl9wICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGZ1bmN0aW9uX3ApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZnVuY3Rpb25fcCgpICgoZnVuY3Rpb25fcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGZ1bmN0aW9uX3ApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19mdW5jdGlvbl9wKG4pICgoZnVuY3Rpb25fcCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZnVuY3Rpb25fcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZnVuY3Rpb25fcChuKSAoKGZ1bmN0aW9uX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZnVuY3Rpb25fcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZWhfcmVnaW9uKCkgKChlaF9yZWdpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZWhfcmVnaW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2VoX3JlZ2lvbigpICgoZWhfcmVnaW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZWhfcmVnaW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZWhfcmVnaW9uKG4pICgoZWhfcmVnaW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChlaF9yZWdpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2VoX3JlZ2lvbihuKSAoKGVoX3JlZ2lvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChlaF9yZWdpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VoX2NhdGNoKCkgKChlaF9jYXRjaCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChlaF9jYXRjaCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9laF9jYXRjaCgpICgoZWhfY2F0Y2ggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChlaF9jYXRjaCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2VoX2NhdGNoKG4pICgoZWhfY2F0Y2ggKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGVoX2NhdGNoKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19laF9jYXRjaChuKSAoKGVoX2NhdGNoICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGVoX2NhdGNoKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19laF9sYW5kaW5nX3BhZCgpICgoZWhfbGFuZGluZ19wYWQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZWhfbGFuZGluZ19wYWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZWhfbGFuZGluZ19wYWQoKSAoKGVoX2xhbmRpbmdfcGFkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZWhfbGFuZGluZ19wYWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19laF9sYW5kaW5nX3BhZChuKSAoKGVoX2xhbmRpbmdfcGFkICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChlaF9sYW5kaW5nX3BhZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZWhfbGFuZGluZ19wYWQobikgKChlaF9sYW5kaW5nX3BhZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChlaF9sYW5kaW5nX3BhZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZGNoYXJfcCgpICgoZGNoYXJfcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkY2hhcl9wKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2RjaGFyX3AoKSAoKGRjaGFyX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkY2hhcl9wKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZGNoYXJfcChuKSAoKGRjaGFyX3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGRjaGFyX3ApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2RjaGFyX3AobikgKChkY2hhcl9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGRjaGFyX3ApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NhY2hlZF9kd19sb2NfbGlzdCgpICgoY2FjaGVkX2R3X2xvY19saXN0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGNhY2hlZF9kd19sb2NfbGlzdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jYWNoZWRfZHdfbG9jX2xpc3QoKSAoKGNhY2hlZF9kd19sb2NfbGlzdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGNhY2hlZF9kd19sb2NfbGlzdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NhY2hlZF9kd19sb2NfbGlzdChuKSAoKGNhY2hlZF9kd19sb2NfbGlzdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY2FjaGVkX2R3X2xvY19saXN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jYWNoZWRfZHdfbG9jX2xpc3QobikgKChjYWNoZWRfZHdfbG9jX2xpc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY2FjaGVkX2R3X2xvY19saXN0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192YXJfbG9jX2xpc3QoKSAoKHZhcl9sb2NfbGlzdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2YXJfbG9jX2xpc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmFyX2xvY19saXN0KCkgKCh2YXJfbG9jX2xpc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh2YXJfbG9jX2xpc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192YXJfbG9jX2xpc3QobikgKCh2YXJfbG9jX2xpc3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZhcl9sb2NfbGlzdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmFyX2xvY19saXN0KG4pICgodmFyX2xvY19saXN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHZhcl9sb2NfbGlzdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZGllX2FyZ19lbnRyeSgpICgoZGllX2FyZ19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkaWVfYXJnX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2RpZV9hcmdfZW50cnkoKSAoKGRpZV9hcmdfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkaWVfYXJnX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZGllX2FyZ19lbnRyeShuKSAoKGRpZV9hcmdfZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGRpZV9hcmdfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2RpZV9hcmdfZW50cnkobikgKChkaWVfYXJnX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGRpZV9hcmdfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2xpbWJvX2RpZV9ub2RlKCkgKChsaW1ib19kaWVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsaW1ib19kaWVfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9saW1ib19kaWVfbm9kZSgpICgobGltYm9fZGllX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsaW1ib19kaWVfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2xpbWJvX2RpZV9ub2RlKG4pICgobGltYm9fZGllX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGxpbWJvX2RpZV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19saW1ib19kaWVfbm9kZShuKSAoKGxpbWJvX2RpZV9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGxpbWJvX2RpZV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jb21kYXRfdHlwZV9ub2RlKCkgKChjb21kYXRfdHlwZV9ub2RlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGNvbWRhdF90eXBlX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY29tZGF0X3R5cGVfbm9kZSgpICgoY29tZGF0X3R5cGVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGNvbWRhdF90eXBlX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb21kYXRfdHlwZV9ub2RlKG4pICgoY29tZGF0X3R5cGVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY29tZGF0X3R5cGVfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29tZGF0X3R5cGVfbm9kZShuKSAoKGNvbWRhdF90eXBlX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY29tZGF0X3R5cGVfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbWFjaW5mb19lbnRyeSgpICgobWFjaW5mb19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChtYWNpbmZvX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX21hY2luZm9fZW50cnkoKSAoKG1hY2luZm9fZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChtYWNpbmZvX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbWFjaW5mb19lbnRyeShuKSAoKG1hY2luZm9fZW50cnkgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKG1hY2luZm9fZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX21hY2luZm9fZW50cnkobikgKChtYWNpbmZvX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKG1hY2luZm9fZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3B1Ym5hbWVfZW50cnkoKSAoKHB1Ym5hbWVfZW50cnkgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAocHVibmFtZV9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wdWJuYW1lX2VudHJ5KCkgKChwdWJuYW1lX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAocHVibmFtZV9lbnRyeSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3B1Ym5hbWVfZW50cnkobikgKChwdWJuYW1lX2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwdWJuYW1lX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19wdWJuYW1lX2VudHJ5KG4pICgocHVibmFtZV9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwdWJuYW1lX2VudHJ5KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kaWVfbm9kZSgpICgoZGllX25vZGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZGllX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZGllX25vZGUoKSAoKGRpZV9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZGllX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kaWVfbm9kZShuKSAoKGRpZV9ub2RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkaWVfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZGllX25vZGUobikgKChkaWVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkaWVfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfYXR0cl9ub2RlKCkgKChkd19hdHRyX25vZGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfYXR0cl9ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X2F0dHJfbm9kZSgpICgoZHdfYXR0cl9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfYXR0cl9ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfYXR0cl9ub2RlKG4pICgoZHdfYXR0cl9ub2RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19hdHRyX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X2F0dHJfbm9kZShuKSAoKGR3X2F0dHJfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19hdHRyX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2R3X2xpbmVfaW5mb190YWJsZV9wKCkgKChkd19saW5lX2luZm9fdGFibGVfcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19saW5lX2luZm9fdGFibGVfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19saW5lX2luZm9fdGFibGVfcCgpICgoZHdfbGluZV9pbmZvX3RhYmxlX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19saW5lX2luZm9fdGFibGVfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X2xpbmVfaW5mb190YWJsZV9wKG4pICgoZHdfbGluZV9pbmZvX3RhYmxlX3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2xpbmVfaW5mb190YWJsZV9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd19saW5lX2luZm9fdGFibGVfcChuKSAoKGR3X2xpbmVfaW5mb190YWJsZV9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2xpbmVfaW5mb190YWJsZV9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19saW5lX2luZm9fdGFibGUoKSAoKGR3X2xpbmVfaW5mb190YWJsZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19saW5lX2luZm9fdGFibGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfbGluZV9pbmZvX3RhYmxlKCkgKChkd19saW5lX2luZm9fdGFibGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19saW5lX2luZm9fdGFibGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19saW5lX2luZm9fdGFibGUobikgKChkd19saW5lX2luZm9fdGFibGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2xpbmVfaW5mb190YWJsZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfbGluZV9pbmZvX3RhYmxlKG4pICgoZHdfbGluZV9pbmZvX3RhYmxlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2xpbmVfaW5mb190YWJsZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfbGluZV9pbmZvX2VudHJ5KCkgKChkd19saW5lX2luZm9fZW50cnkgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbGluZV9pbmZvX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X2xpbmVfaW5mb19lbnRyeSgpICgoZHdfbGluZV9pbmZvX2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbGluZV9pbmZvX2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfbGluZV9pbmZvX2VudHJ5KG4pICgoZHdfbGluZV9pbmZvX2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19saW5lX2luZm9fZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X2xpbmVfaW5mb19lbnRyeShuKSAoKGR3X2xpbmVfaW5mb19lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19saW5lX2luZm9fZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvbWRhdF90eXBlX25vZGVfcmVmKCkgKChjb21kYXRfdHlwZV9ub2RlX3JlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb21kYXRfdHlwZV9ub2RlX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb21kYXRfdHlwZV9ub2RlX3JlZigpICgoY29tZGF0X3R5cGVfbm9kZV9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb21kYXRfdHlwZV9ub2RlX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbWRhdF90eXBlX25vZGVfcmVmKG4pICgoY29tZGF0X3R5cGVfbm9kZV9yZWYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbWRhdF90eXBlX25vZGVfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb21kYXRfdHlwZV9ub2RlX3JlZihuKSAoKGNvbWRhdF90eXBlX25vZGVfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbWRhdF90eXBlX25vZGVfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19yYW5nZXNfYnlfbGFiZWxfcmVmKCkgKChkd19yYW5nZXNfYnlfbGFiZWxfcmVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGR3X3Jhbmdlc19ieV9sYWJlbF9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfcmFuZ2VzX2J5X2xhYmVsX3JlZigpICgoZHdfcmFuZ2VzX2J5X2xhYmVsX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGR3X3Jhbmdlc19ieV9sYWJlbF9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19yYW5nZXNfYnlfbGFiZWxfcmVmKG4pICgoZHdfcmFuZ2VzX2J5X2xhYmVsX3JlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfcmFuZ2VzX2J5X2xhYmVsX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfcmFuZ2VzX2J5X2xhYmVsX3JlZihuKSAoKGR3X3Jhbmdlc19ieV9sYWJlbF9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfcmFuZ2VzX2J5X2xhYmVsX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfcmFuZ2VzX3JlZigpICgoZHdfcmFuZ2VzX3JlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19yYW5nZXNfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X3Jhbmdlc19yZWYoKSAoKGR3X3Jhbmdlc19yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19yYW5nZXNfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfcmFuZ2VzX3JlZihuKSAoKGR3X3Jhbmdlc19yZWYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X3Jhbmdlc19yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X3Jhbmdlc19yZWYobikgKChkd19yYW5nZXNfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X3Jhbmdlc19yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3B1Ym5hbWVfcmVmKCkgKChwdWJuYW1lX3JlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwdWJuYW1lX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9wdWJuYW1lX3JlZigpICgocHVibmFtZV9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChwdWJuYW1lX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3B1Ym5hbWVfcmVmKG4pICgocHVibmFtZV9yZWYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHB1Ym5hbWVfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19wdWJuYW1lX3JlZihuKSAoKHB1Ym5hbWVfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHB1Ym5hbWVfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19saW5lX2luZm9fcmVmKCkgKChkd19saW5lX2luZm9fcmVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2xpbmVfaW5mb19yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfbGluZV9pbmZvX3JlZigpICgoZHdfbGluZV9pbmZvX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2xpbmVfaW5mb19yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19saW5lX2luZm9fcmVmKG4pICgoZHdfbGluZV9pbmZvX3JlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbGluZV9pbmZvX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfbGluZV9pbmZvX3JlZihuKSAoKGR3X2xpbmVfaW5mb19yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbGluZV9pbmZvX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfYXR0cl9yZWYoKSAoKGR3X2F0dHJfcmVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2F0dHJfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X2F0dHJfcmVmKCkgKChkd19hdHRyX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2F0dHJfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfYXR0cl9yZWYobikgKChkd19hdHRyX3JlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfYXR0cl9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X2F0dHJfcmVmKG4pICgoZHdfYXR0cl9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfYXR0cl9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2R3X2xvY19saXN0X25vZGUoKSAoKGR3X2xvY19saXN0X25vZGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbG9jX2xpc3Rfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19sb2NfbGlzdF9ub2RlKCkgKChkd19sb2NfbGlzdF9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbG9jX2xpc3Rfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X2xvY19saXN0X25vZGUobikgKChkd19sb2NfbGlzdF9ub2RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19sb2NfbGlzdF9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd19sb2NfbGlzdF9ub2RlKG4pICgoZHdfbG9jX2xpc3Rfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19sb2NfbGlzdF9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19hZGRyX3RhYmxlX2VudHJ5KCkgKChhZGRyX3RhYmxlX2VudHJ5ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGFkZHJfdGFibGVfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYWRkcl90YWJsZV9lbnRyeSgpICgoYWRkcl90YWJsZV9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGFkZHJfdGFibGVfZW50cnkpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19hZGRyX3RhYmxlX2VudHJ5KG4pICgoYWRkcl90YWJsZV9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoYWRkcl90YWJsZV9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYWRkcl90YWJsZV9lbnRyeShuKSAoKGFkZHJfdGFibGVfZW50cnkgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoYWRkcl90YWJsZV9lbnRyeSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZGVmZXJyZWRfbG9jYXRpb25zKCkgKChkZWZlcnJlZF9sb2NhdGlvbnMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZGVmZXJyZWRfbG9jYXRpb25zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2RlZmVycmVkX2xvY2F0aW9ucygpICgoZGVmZXJyZWRfbG9jYXRpb25zICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZGVmZXJyZWRfbG9jYXRpb25zKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZGVmZXJyZWRfbG9jYXRpb25zKG4pICgoZGVmZXJyZWRfbG9jYXRpb25zICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkZWZlcnJlZF9sb2NhdGlvbnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2RlZmVycmVkX2xvY2F0aW9ucyhuKSAoKGRlZmVycmVkX2xvY2F0aW9ucyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkZWZlcnJlZF9sb2NhdGlvbnMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3JlZ19zYXZlZF9pbl9kYXRhKCkgKChyZWdfc2F2ZWRfaW5fZGF0YSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChyZWdfc2F2ZWRfaW5fZGF0YSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9yZWdfc2F2ZWRfaW5fZGF0YSgpICgocmVnX3NhdmVkX2luX2RhdGEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChyZWdfc2F2ZWRfaW5fZGF0YSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3JlZ19zYXZlZF9pbl9kYXRhKG4pICgocmVnX3NhdmVkX2luX2RhdGEgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHJlZ19zYXZlZF9pbl9kYXRhKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19yZWdfc2F2ZWRfaW5fZGF0YShuKSAoKHJlZ19zYXZlZF9pbl9kYXRhICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHJlZ19zYXZlZF9pbl9kYXRhKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19jZmlfcm93KCkgKChkd19jZmlfcm93ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2NmaV9yb3cpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfY2ZpX3JvdygpICgoZHdfY2ZpX3JvdyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2NmaV9yb3cpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19jZmlfcm93KG4pICgoZHdfY2ZpX3JvdyAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfY2ZpX3JvdyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfY2ZpX3JvdyhuKSAoKGR3X2NmaV9yb3cgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfY2ZpX3JvdyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfbG9jX2Rlc2NyX25vZGUoKSAoKGR3X2xvY19kZXNjcl9ub2RlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2xvY19kZXNjcl9ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X2xvY19kZXNjcl9ub2RlKCkgKChkd19sb2NfZGVzY3Jfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2xvY19kZXNjcl9ub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfbG9jX2Rlc2NyX25vZGUobikgKChkd19sb2NfZGVzY3Jfbm9kZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbG9jX2Rlc2NyX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X2xvY19kZXNjcl9ub2RlKG4pICgoZHdfbG9jX2Rlc2NyX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbG9jX2Rlc2NyX25vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2R3X3ZhbF9ub2RlKCkgKChkd192YWxfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd192YWxfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd192YWxfbm9kZSgpICgoZHdfdmFsX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd192YWxfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X3ZhbF9ub2RlKG4pICgoZHdfdmFsX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X3ZhbF9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd192YWxfbm9kZShuKSAoKGR3X3ZhbF9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X3ZhbF9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd192ZWNfY29uc3QoKSAoKGR3X3ZlY19jb25zdCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd192ZWNfY29uc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfdmVjX2NvbnN0KCkgKChkd192ZWNfY29uc3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd192ZWNfY29uc3QpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd192ZWNfY29uc3QobikgKChkd192ZWNfY29uc3QgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X3ZlY19jb25zdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfdmVjX2NvbnN0KG4pICgoZHdfdmVjX2NvbnN0ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X3ZlY19jb25zdCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfY2ZhX2xvY2F0aW9uKCkgKChkd19jZmFfbG9jYXRpb24gKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfY2ZhX2xvY2F0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X2NmYV9sb2NhdGlvbigpICgoZHdfY2ZhX2xvY2F0aW9uICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfY2ZhX2xvY2F0aW9uKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfY2ZhX2xvY2F0aW9uKG4pICgoZHdfY2ZhX2xvY2F0aW9uICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19jZmFfbG9jYXRpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X2NmYV9sb2NhdGlvbihuKSAoKGR3X2NmYV9sb2NhdGlvbiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19jZmFfbG9jYXRpb24pLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2R3X2ZkZV9ub2RlKCkgKChkd19mZGVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19mZGVfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19mZGVfbm9kZSgpICgoZHdfZmRlX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19mZGVfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X2ZkZV9ub2RlKG4pICgoZHdfZmRlX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2ZkZV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd19mZGVfbm9kZShuKSAoKGR3X2ZkZV9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2ZkZV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19mZGVfcmVmKCkgKChkd19mZGVfcmVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2ZkZV9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfZmRlX3JlZigpICgoZHdfZmRlX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2ZkZV9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19mZGVfcmVmKG4pICgoZHdfZmRlX3JlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfZmRlX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfZmRlX3JlZihuKSAoKGR3X2ZkZV9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfZmRlX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2ZpX3ZlYygpICgoY2ZpX3ZlYyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjZmlfdmVjKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NmaV92ZWMoKSAoKGNmaV92ZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjZmlfdmVjKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY2ZpX3ZlYyhuKSAoKGNmaV92ZWMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNmaV92ZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NmaV92ZWMobikgKChjZmlfdmVjICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNmaV92ZWMpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2R3X2NmaV9ub2RlKCkgKChkd19jZmlfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19jZmlfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19jZmlfbm9kZSgpICgoZHdfY2ZpX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19jZmlfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X2NmaV9ub2RlKG4pICgoZHdfY2ZpX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2NmaV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd19jZmlfbm9kZShuKSAoKGR3X2NmaV9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2NmaV9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19jZmlfb3BybmQoKSAoKGR3X2NmaV9vcHJuZCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19jZmlfb3BybmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfY2ZpX29wcm5kKCkgKChkd19jZmlfb3BybmQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19jZmlfb3BybmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19jZmlfb3BybmQobikgKChkd19jZmlfb3BybmQgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2NmaV9vcHJuZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfY2ZpX29wcm5kKG4pICgoZHdfY2ZpX29wcm5kICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X2NmaV9vcHJuZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfbG9jX2xpc3RfcmVmKCkgKChkd19sb2NfbGlzdF9yZWYgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbG9jX2xpc3RfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X2xvY19saXN0X3JlZigpICgoZHdfbG9jX2xpc3RfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbG9jX2xpc3RfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfbG9jX2xpc3RfcmVmKG4pICgoZHdfbG9jX2xpc3RfcmVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19sb2NfbGlzdF9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X2xvY19saXN0X3JlZihuKSAoKGR3X2xvY19saXN0X3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19sb2NfbGlzdF9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2R3X2xvY19kZXNjcl9yZWYoKSAoKGR3X2xvY19kZXNjcl9yZWYgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbG9jX2Rlc2NyX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9kd19sb2NfZGVzY3JfcmVmKCkgKChkd19sb2NfZGVzY3JfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfbG9jX2Rlc2NyX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2R3X2xvY19kZXNjcl9yZWYobikgKChkd19sb2NfZGVzY3JfcmVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19sb2NfZGVzY3JfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19kd19sb2NfZGVzY3JfcmVmKG4pICgoZHdfbG9jX2Rlc2NyX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd19sb2NfZGVzY3JfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19jZmlfcmVmKCkgKChkd19jZmlfcmVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2NmaV9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfY2ZpX3JlZigpICgoZHdfY2ZpX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2NmaV9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19jZmlfcmVmKG4pICgoZHdfY2ZpX3JlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfY2ZpX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfY2ZpX3JlZihuKSAoKGR3X2NmaV9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfY2ZpX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfZHdfdmFsX3JlZigpICgoZHdfdmFsX3JlZiAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd192YWxfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2R3X3ZhbF9yZWYoKSAoKGR3X3ZhbF9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChkd192YWxfcmVmKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfZHdfdmFsX3JlZihuKSAoKGR3X3ZhbF9yZWYgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X3ZhbF9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2R3X3ZhbF9yZWYobikgKChkd192YWxfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGR3X3ZhbF9yZWYpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvbnN0X2R3X2RpZV9yZWYoKSAoKGNvbnN0X2R3X2RpZV9yZWYgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RfZHdfZGllX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb25zdF9kd19kaWVfcmVmKCkgKChjb25zdF9kd19kaWVfcmVmICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RfZHdfZGllX3JlZikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbnN0X2R3X2RpZV9yZWYobikgKChjb25zdF9kd19kaWVfcmVmICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9kd19kaWVfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb25zdF9kd19kaWVfcmVmKG4pICgoY29uc3RfZHdfZGllX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9kd19kaWVfcmVmKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19kd19kaWVfcmVmKCkgKChkd19kaWVfcmVmICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2RpZV9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZHdfZGllX3JlZigpICgoZHdfZGllX3JlZiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGR3X2RpZV9yZWYpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19kd19kaWVfcmVmKG4pICgoZHdfZGllX3JlZiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfZGllX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZHdfZGllX3JlZihuKSAoKGR3X2RpZV9yZWYgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZHdfZGllX3JlZiksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYWxpYXNfc2V0X2VudHJ5KCkgKChhbGlhc19zZXRfZW50cnkgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoYWxpYXNfc2V0X2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2FsaWFzX3NldF9lbnRyeSgpICgoYWxpYXNfc2V0X2VudHJ5ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoYWxpYXNfc2V0X2VudHJ5KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfYWxpYXNfc2V0X2VudHJ5KG4pICgoYWxpYXNfc2V0X2VudHJ5ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChhbGlhc19zZXRfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2FsaWFzX3NldF9lbnRyeShuKSAoKGFsaWFzX3NldF9lbnRyeSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChhbGlhc19zZXRfZW50cnkpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NncmFwaF9lZGdlX3AoKSAoKGNncmFwaF9lZGdlX3AgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoY2dyYXBoX2VkZ2VfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jZ3JhcGhfZWRnZV9wKCkgKChjZ3JhcGhfZWRnZV9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoY2dyYXBoX2VkZ2VfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NncmFwaF9lZGdlX3AobikgKChjZ3JhcGhfZWRnZV9wICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjZ3JhcGhfZWRnZV9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jZ3JhcGhfZWRnZV9wKG4pICgoY2dyYXBoX2VkZ2VfcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjZ3JhcGhfZWRnZV9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192YXJwb29sX25vZGVfcHRyKCkgKCh2YXJwb29sX25vZGVfcHRyICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHZhcnBvb2xfbm9kZV9wdHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmFycG9vbF9ub2RlX3B0cigpICgodmFycG9vbF9ub2RlX3B0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHZhcnBvb2xfbm9kZV9wdHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY192YXJwb29sX25vZGVfcHRyKG4pICgodmFycG9vbF9ub2RlX3B0ciAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmFycG9vbF9ub2RlX3B0ciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfdmFycG9vbF9ub2RlX3B0cihuKSAoKHZhcnBvb2xfbm9kZV9wdHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAodmFycG9vbF9ub2RlX3B0ciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2dyYXBoX25vZGVfcHRyKCkgKChjZ3JhcGhfbm9kZV9wdHIgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoY2dyYXBoX25vZGVfcHRyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NncmFwaF9ub2RlX3B0cigpICgoY2dyYXBoX25vZGVfcHRyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoY2dyYXBoX25vZGVfcHRyKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY2dyYXBoX25vZGVfcHRyKG4pICgoY2dyYXBoX25vZGVfcHRyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjZ3JhcGhfbm9kZV9wdHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NncmFwaF9ub2RlX3B0cihuKSAoKGNncmFwaF9ub2RlX3B0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjZ3JhcGhfbm9kZV9wdHIpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2lwYV9yZXBsYWNlX21hcF9wKCkgKChpcGFfcmVwbGFjZV9tYXBfcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfcmVwbGFjZV9tYXBfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9pcGFfcmVwbGFjZV9tYXBfcCgpICgoaXBhX3JlcGxhY2VfbWFwX3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfcmVwbGFjZV9tYXBfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2lwYV9yZXBsYWNlX21hcF9wKG4pICgoaXBhX3JlcGxhY2VfbWFwX3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGlwYV9yZXBsYWNlX21hcF9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19pcGFfcmVwbGFjZV9tYXBfcChuKSAoKGlwYV9yZXBsYWNlX21hcF9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGlwYV9yZXBsYWNlX21hcF9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19pcGFfcmVmX3B0cigpICgoaXBhX3JlZl9wdHIgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX3JlZl9wdHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfaXBhX3JlZl9wdHIoKSAoKGlwYV9yZWZfcHRyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX3JlZl9wdHIpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19pcGFfcmVmX3B0cihuKSAoKGlwYV9yZWZfcHRyICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfcmVmX3B0ciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfaXBhX3JlZl9wdHIobikgKChpcGFfcmVmX3B0ciAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfcmVmX3B0ciksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaXBhX3JlZl90KCkgKChpcGFfcmVmX3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX3JlZl90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2lwYV9yZWZfdCgpICgoaXBhX3JlZl90ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoaXBhX3JlZl90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaXBhX3JlZl90KG4pICgoaXBhX3JlZl90ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfcmVmX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2lwYV9yZWZfdChuKSAoKGlwYV9yZWZfdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChpcGFfcmVmX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvbnN0X3N5bXRhYl9ub2RlKCkgKChjb25zdF9zeW10YWJfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9zeW10YWJfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb25zdF9zeW10YWJfbm9kZSgpICgoY29uc3Rfc3ltdGFiX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9zeW10YWJfbm9kZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbnN0X3N5bXRhYl9ub2RlKG4pICgoY29uc3Rfc3ltdGFiX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X3N5bXRhYl9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb25zdF9zeW10YWJfbm9kZShuKSAoKGNvbnN0X3N5bXRhYl9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X3N5bXRhYl9ub2RlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19zeW10YWJfbm9kZSgpICgoc3ltdGFiX25vZGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3ltdGFiX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfc3ltdGFiX25vZGUoKSAoKHN5bXRhYl9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3ltdGFiX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zeW10YWJfbm9kZShuKSAoKHN5bXRhYl9ub2RlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzeW10YWJfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfc3ltdGFiX25vZGUobikgKChzeW10YWJfbm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzeW10YWJfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfbG9vcF9wKCkgKChsb29wX3AgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAobG9vcF9wKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2xvb3BfcCgpICgobG9vcF9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAobG9vcF9wKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfbG9vcF9wKG4pICgobG9vcF9wICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsb29wX3ApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2xvb3BfcChuKSAoKGxvb3BfcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChsb29wX3ApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3RlbXBfc2xvdF9wKCkgKCh0ZW1wX3Nsb3RfcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0ZW1wX3Nsb3RfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF90ZW1wX3Nsb3RfcCgpICgodGVtcF9zbG90X3AgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0ZW1wX3Nsb3RfcCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3RlbXBfc2xvdF9wKG4pICgodGVtcF9zbG90X3AgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHRlbXBfc2xvdF9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY190ZW1wX3Nsb3RfcChuKSAoKHRlbXBfc2xvdF9wICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHRlbXBfc2xvdF9wKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jYWxsX3NpdGVfcmVjb3JkKCkgKChjYWxsX3NpdGVfcmVjb3JkICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGNhbGxfc2l0ZV9yZWNvcmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY2FsbF9zaXRlX3JlY29yZCgpICgoY2FsbF9zaXRlX3JlY29yZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGNhbGxfc2l0ZV9yZWNvcmQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jYWxsX3NpdGVfcmVjb3JkKG4pICgoY2FsbF9zaXRlX3JlY29yZCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY2FsbF9zaXRlX3JlY29yZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY2FsbF9zaXRlX3JlY29yZChuKSAoKGNhbGxfc2l0ZV9yZWNvcmQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY2FsbF9zaXRlX3JlY29yZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaGFzaG5vZGUoKSAoKGhhc2hub2RlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGhhc2hub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2hhc2hub2RlKCkgKChoYXNobm9kZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGhhc2hub2RlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaGFzaG5vZGUobikgKChoYXNobm9kZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaGFzaG5vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2hhc2hub2RlKG4pICgoaGFzaG5vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoaGFzaG5vZGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2h0X2lkZW50aWZpZXJfcHRyKCkgKChodF9pZGVudGlmaWVyX3B0ciAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChodF9pZGVudGlmaWVyX3B0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9odF9pZGVudGlmaWVyX3B0cigpICgoaHRfaWRlbnRpZmllcl9wdHIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChodF9pZGVudGlmaWVyX3B0cikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2h0X2lkZW50aWZpZXJfcHRyKG4pICgoaHRfaWRlbnRpZmllcl9wdHIgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGh0X2lkZW50aWZpZXJfcHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19odF9pZGVudGlmaWVyX3B0cihuKSAoKGh0X2lkZW50aWZpZXJfcHRyICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGh0X2lkZW50aWZpZXJfcHRyKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19idWlsdGluX2luZm9fdHlwZSgpICgoYnVpbHRpbl9pbmZvX3R5cGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoYnVpbHRpbl9pbmZvX3R5cGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYnVpbHRpbl9pbmZvX3R5cGUoKSAoKGJ1aWx0aW5faW5mb190eXBlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoYnVpbHRpbl9pbmZvX3R5cGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19idWlsdGluX2luZm9fdHlwZShuKSAoKGJ1aWx0aW5faW5mb190eXBlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChidWlsdGluX2luZm9fdHlwZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYnVpbHRpbl9pbmZvX3R5cGUobikgKChidWlsdGluX2luZm9fdHlwZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChidWlsdGluX2luZm9fdHlwZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2Nfc3NhX3VzZV9vcGVyYW5kX3QoKSAoKHNzYV91c2Vfb3BlcmFuZF90ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHNzYV91c2Vfb3BlcmFuZF90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3NzYV91c2Vfb3BlcmFuZF90KCkgKChzc2FfdXNlX29wZXJhbmRfdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHNzYV91c2Vfb3BlcmFuZF90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfc3NhX3VzZV9vcGVyYW5kX3QobikgKChzc2FfdXNlX29wZXJhbmRfdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3NhX3VzZV9vcGVyYW5kX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3NzYV91c2Vfb3BlcmFuZF90KG4pICgoc3NhX3VzZV9vcGVyYW5kX3QgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoc3NhX3VzZV9vcGVyYW5kX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvbnN0cnVjdG9yX2VsdCgpICgoY29uc3RydWN0b3JfZWx0ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0cnVjdG9yX2VsdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb25zdHJ1Y3Rvcl9lbHQoKSAoKGNvbnN0cnVjdG9yX2VsdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0cnVjdG9yX2VsdCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbnN0cnVjdG9yX2VsdChuKSAoKGNvbnN0cnVjdG9yX2VsdCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RydWN0b3JfZWx0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb25zdHJ1Y3Rvcl9lbHQobikgKChjb25zdHJ1Y3Rvcl9lbHQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RydWN0b3JfZWx0KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19iaXRtYXBfaGVhZCgpICgoYml0bWFwX2hlYWQgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoYml0bWFwX2hlYWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYml0bWFwX2hlYWQoKSAoKGJpdG1hcF9oZWFkICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoYml0bWFwX2hlYWQpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19iaXRtYXBfaGVhZChuKSAoKGJpdG1hcF9oZWFkICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChiaXRtYXBfaGVhZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYml0bWFwX2hlYWQobikgKChiaXRtYXBfaGVhZCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChiaXRtYXBfaGVhZCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYml0bWFwX2VsZW1lbnQoKSAoKGJpdG1hcF9lbGVtZW50ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGJpdG1hcF9lbGVtZW50KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2JpdG1hcF9lbGVtZW50KCkgKChiaXRtYXBfZWxlbWVudCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGJpdG1hcF9lbGVtZW50KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfYml0bWFwX2VsZW1lbnQobikgKChiaXRtYXBfZWxlbWVudCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoYml0bWFwX2VsZW1lbnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2JpdG1hcF9lbGVtZW50KG4pICgoYml0bWFwX2VsZW1lbnQgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoYml0bWFwX2VsZW1lbnQpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3NwbGF5X3RyZWUoKSAoKHNwbGF5X3RyZWUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoc3BsYXlfdHJlZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9zcGxheV90cmVlKCkgKChzcGxheV90cmVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoc3BsYXlfdHJlZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3NwbGF5X3RyZWUobikgKChzcGxheV90cmVlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzcGxheV90cmVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19zcGxheV90cmVlKG4pICgoc3BsYXlfdHJlZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzcGxheV90cmVlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19zcGxheV90cmVlX25vZGUoKSAoKHNwbGF5X3RyZWVfbm9kZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzcGxheV90cmVlX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfc3BsYXlfdHJlZV9ub2RlKCkgKChzcGxheV90cmVlX25vZGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChzcGxheV90cmVlX25vZGUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19zcGxheV90cmVlX25vZGUobikgKChzcGxheV90cmVlX25vZGUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHNwbGF5X3RyZWVfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfc3BsYXlfdHJlZV9ub2RlKG4pICgoc3BsYXlfdHJlZV9ub2RlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHNwbGF5X3RyZWVfbm9kZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfaHRhYl90KCkgKChodGFiX3QgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoaHRhYl90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2h0YWJfdCgpICgoaHRhYl90ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoaHRhYl90KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfaHRhYl90KG4pICgoaHRhYl90ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChodGFiX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2h0YWJfdChuKSAoKGh0YWJfdCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChodGFiX3QpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvbnN0X2Jhc2ljX2Jsb2NrKCkgKChjb25zdF9iYXNpY19ibG9jayAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9iYXNpY19ibG9jaykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb25zdF9iYXNpY19ibG9jaygpICgoY29uc3RfYmFzaWNfYmxvY2sgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9iYXNpY19ibG9jaykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbnN0X2Jhc2ljX2Jsb2NrKG4pICgoY29uc3RfYmFzaWNfYmxvY2sgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X2Jhc2ljX2Jsb2NrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb25zdF9iYXNpY19ibG9jayhuKSAoKGNvbnN0X2Jhc2ljX2Jsb2NrICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X2Jhc2ljX2Jsb2NrKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19iYXNpY19ibG9jaygpICgoYmFzaWNfYmxvY2sgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoYmFzaWNfYmxvY2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfYmFzaWNfYmxvY2soKSAoKGJhc2ljX2Jsb2NrICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoYmFzaWNfYmxvY2spIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19iYXNpY19ibG9jayhuKSAoKGJhc2ljX2Jsb2NrICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChiYXNpY19ibG9jayksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfYmFzaWNfYmxvY2sobikgKChiYXNpY19ibG9jayAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChiYXNpY19ibG9jayksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY29uc3RfZWRnZSgpICgoY29uc3RfZWRnZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9lZGdlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NvbnN0X2VkZ2UoKSAoKGNvbnN0X2VkZ2UgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9lZGdlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29uc3RfZWRnZShuKSAoKGNvbnN0X2VkZ2UgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X2VkZ2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NvbnN0X2VkZ2UobikgKChjb25zdF9lZGdlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X2VkZ2UpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2VkZ2UoKSAoKGVkZ2UgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoZWRnZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9lZGdlKCkgKChlZGdlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoZWRnZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2VkZ2UobikgKChlZGdlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChlZGdlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19lZGdlKG4pICgoZWRnZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChlZGdlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19naW1wbGVfc2VxKCkgKChnaW1wbGVfc2VxICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGdpbXBsZV9zZXEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfZ2ltcGxlX3NlcSgpICgoZ2ltcGxlX3NlcSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGdpbXBsZV9zZXEpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19naW1wbGVfc2VxKG4pICgoZ2ltcGxlX3NlcSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ2ltcGxlX3NlcSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfZ2ltcGxlX3NlcShuKSAoKGdpbXBsZV9zZXEgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ2ltcGxlX3NlcSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY29uc3RfZ2ltcGxlKCkgKChjb25zdF9naW1wbGUgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RfZ2ltcGxlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NvbnN0X2dpbXBsZSgpICgoY29uc3RfZ2ltcGxlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RfZ2ltcGxlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29uc3RfZ2ltcGxlKG4pICgoY29uc3RfZ2ltcGxlICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9naW1wbGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NvbnN0X2dpbXBsZShuKSAoKGNvbnN0X2dpbXBsZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9naW1wbGUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2dpbXBsZSgpICgoZ2ltcGxlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGdpbXBsZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9naW1wbGUoKSAoKGdpbXBsZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGdpbXBsZSkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2dpbXBsZShuKSAoKGdpbXBsZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ2ltcGxlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19naW1wbGUobikgKChnaW1wbGUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoZ2ltcGxlKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jb25zdF90cmVlKCkgKChjb25zdF90cmVlICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X3RyZWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY29uc3RfdHJlZSgpICgoY29uc3RfdHJlZSAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X3RyZWUpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb25zdF90cmVlKG4pICgoY29uc3RfdHJlZSAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RfdHJlZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29uc3RfdHJlZShuKSAoKGNvbnN0X3RyZWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RfdHJlZSksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdHJlZSgpICgodHJlZSAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0cmVlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3RyZWUoKSAoKHRyZWUgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mICh0cmVlKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfdHJlZShuKSAoKHRyZWUgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHRyZWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX3RyZWUobikgKCh0cmVlICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKHRyZWUpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NvbnN0X3J0dmVjKCkgKChjb25zdF9ydHZlYyAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9ydHZlYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9jb25zdF9ydHZlYygpICgoY29uc3RfcnR2ZWMgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9ydHZlYykgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX2NvbnN0X3J0dmVjKG4pICgoY29uc3RfcnR2ZWMgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X3J0dmVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19jb25zdF9ydHZlYyhuKSAoKGNvbnN0X3J0dmVjICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X3J0dmVjKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19ydHZlYygpICgocnR2ZWMgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAocnR2ZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfcnR2ZWMoKSAoKHJ0dmVjICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAocnR2ZWMpIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19ydHZlYyhuKSAoKHJ0dmVjICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChydHZlYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfcnR2ZWMobikgKChydHZlYyAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChydHZlYyksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY29uc3RfcnR4KCkgKChjb25zdF9ydHggKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RfcnR4KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2NvbnN0X3J0eCgpICgoY29uc3RfcnR4ICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoY29uc3RfcnR4KSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfY29uc3RfcnR4KG4pICgoY29uc3RfcnR4ICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9ydHgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2NvbnN0X3J0eChuKSAoKGNvbnN0X3J0eCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9ydHgpLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3J0eCgpICgocnR4ICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKHJ0eCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9ydHgoKSAoKHJ0eCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKHJ0eCkgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX3J0eChuKSAoKHJ0eCAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAocnR4KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19ydHgobikgKChydHggKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAocnR4KSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jb25zdF9iaXRtYXAoKSAoKGNvbnN0X2JpdG1hcCAqKShnZ2NfaW50ZXJuYWxfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9iaXRtYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfY29uc3RfYml0bWFwKCkgKChjb25zdF9iaXRtYXAgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfYWxsb2Nfc3RhdCAoc2l6ZW9mIChjb25zdF9iaXRtYXApIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX3ZlY19jb25zdF9iaXRtYXAobikgKChjb25zdF9iaXRtYXAgKikoZ2djX2ludGVybmFsX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X2JpdG1hcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF92ZWNfY29uc3RfYml0bWFwKG4pICgoY29uc3RfYml0bWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX3ZlY19hbGxvY19zdGF0IChzaXplb2YgKGNvbnN0X2JpdG1hcCksIG4gTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfYml0bWFwKCkgKChiaXRtYXAgKikoZ2djX2ludGVybmFsX2FsbG9jX3N0YXQgKHNpemVvZiAoYml0bWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX2JpdG1hcCgpICgoYml0bWFwICopKGdnY19pbnRlcm5hbF9jbGVhcmVkX2FsbG9jX3N0YXQgKHNpemVvZiAoYml0bWFwKSBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY192ZWNfYml0bWFwKG4pICgoYml0bWFwICopKGdnY19pbnRlcm5hbF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChiaXRtYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX2NsZWFyZWRfdmVjX2JpdG1hcChuKSAoKGJpdG1hcCAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF92ZWNfYWxsb2Nfc3RhdCAoc2l6ZW9mIChiaXRtYXApLCBuIE1FTV9TVEFUX0lORk8pKSkKKyNkZWZpbmUgZ2djX2FsbG9jX1BUUigpICgoUFRSICopKGdnY19pbnRlcm5hbF9hbGxvY19zdGF0IChzaXplb2YgKFBUUikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfY2xlYXJlZF9QVFIoKSAoKFBUUiAqKShnZ2NfaW50ZXJuYWxfY2xlYXJlZF9hbGxvY19zdGF0IChzaXplb2YgKFBUUikgTUVNX1NUQVRfSU5GTykpKQorI2RlZmluZSBnZ2NfYWxsb2NfdmVjX1BUUihuKSAoKFBUUiAqKShnZ2NfaW50ZXJuYWxfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoUFRSKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisjZGVmaW5lIGdnY19hbGxvY19jbGVhcmVkX3ZlY19QVFIobikgKChQVFIgKikoZ2djX2ludGVybmFsX2NsZWFyZWRfdmVjX2FsbG9jX3N0YXQgKHNpemVvZiAoUFRSKSwgbiBNRU1fU1RBVF9JTkZPKSkpCisKKy8qIEdDIG1hcmtlciBwcm9jZWR1cmVzLiAgKi8KKy8qIE1hY3JvcyBhbmQgZGVjbGFyYXRpb25zLiAgKi8KKyNkZWZpbmUgZ3RfZ2djX21fMjR2ZWNfaXZhcnJlZl9lbnRyeV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfaXZhcnJlZl9lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfaXZhcnJlZl9lbnRyeV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI2dmVjX3Byb3RfbGlzdF9lbnRyeV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfcHJvdF9saXN0X2VudHJ5X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19wcm90X2xpc3RfZW50cnlfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yM3ZlY19tc2dyZWZfZW50cnlfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX21zZ3JlZl9lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfbXNncmVmX2VudHJ5X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjd2ZWNfaWRlbnRfZGF0YV90dXBsZV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfaWRlbnRfZGF0YV90dXBsZV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfaWRlbnRfZGF0YV90dXBsZV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3c3RyaW5nX2Rlc2NyaXB0b3IoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9zdHJpbmdfZGVzY3JpcHRvciAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3N0cmluZ19kZXNjcmlwdG9yICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85aW1wX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfaW1wX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfaW1wX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNmhhc2hlZF9hdHRyaWJ1dGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9oYXNoZWRfYXR0cmlidXRlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfaGFzaGVkX2F0dHJpYnV0ZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTJoYXNoZWRfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9oYXNoZWRfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9oYXNoZWRfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE2b2JqY19tYXBfcHJpdmF0ZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X29iamNfbWFwX3ByaXZhdGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9vYmpjX21hcF9wcml2YXRlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNmdpbXBsZV90eXBlX2xlYWRlcl9lbnRyeV9zKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5X3MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9naW1wbGVfdHlwZV9sZWFkZXJfZW50cnlfcyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjN2ZWNfbWV0aG9kX2VudHJ5X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19tZXRob2RfZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX21ldGhvZF9lbnRyeV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0dHlwZV9hc3NlcnRpb24oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90eXBlX2Fzc2VydGlvbiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3R5cGVfYXNzZXJ0aW9uICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOHRyZWV0cmVlaGFzaF9lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3RyZWV0cmVlaGFzaF9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3RyZWV0cmVlaGFzaF9lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fNUNQb29sKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfQ1Bvb2wgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9DUG9vbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fM0pDRihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X0pDRiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X0pDRiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTdtb2R1bGVfaHRhYl9lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X21vZHVsZV9odGFiX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbW9kdWxlX2h0YWJfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEzYmluZGluZ19sZXZlbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2JpbmRpbmdfbGV2ZWwgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9iaW5kaW5nX2xldmVsICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yN3ZlY19wZW5kaW5nX25vZXhjZXB0X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19wZW5kaW5nX25vZXhjZXB0X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19wZW5kaW5nX25vZXhjZXB0X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjFwZW5kaW5nX2Fic3RyYWN0X3R5cGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9wZW5kaW5nX2Fic3RyYWN0X3R5cGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9wZW5kaW5nX2Fic3RyYWN0X3R5cGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE5dmVjX3RyZWVfaW50X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY190cmVlX2ludF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfdHJlZV9pbnRfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85Y3BfcGFyc2VyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY3BfcGFyc2VyIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY3BfcGFyc2VyICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8zOHZlY19jcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnlfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX2NwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTdjcF9wYXJzZXJfY29udGV4dChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NwX3BhcnNlcl9jb250ZXh0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY3BfcGFyc2VyX2NvbnRleHQgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzMxdmVjX2NwX2RlZmF1bHRfYXJnX2VudHJ5X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19jcF9kZWZhdWx0X2FyZ19lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfY3BfZGVmYXVsdF9hcmdfZW50cnlfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV84Y3BfbGV4ZXIoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jcF9sZXhlciAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NwX2xleGVyICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOXZlY19jcF90b2tlbl92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfY3BfdG9rZW5fdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2NwX3Rva2VuX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTB0cmVlX2NoZWNrKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHJlZV9jaGVjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3RyZWVfY2hlY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0Y29uc3RleHByX2NhbGwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jb25zdGV4cHJfY2FsbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NvbnN0ZXhwcl9jYWxsICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNmNvbnN0ZXhwcl9mdW5kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jb25zdGV4cHJfZnVuZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY29uc3RleHByX2Z1bmRlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjZ2ZWNfZGVmZXJyZWRfYWNjZXNzX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19kZWZlcnJlZF9hY2Nlc3NfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2RlZmVycmVkX2FjY2Vzc192YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzMydmVjX2RlZmVycmVkX2FjY2Vzc19jaGVja192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfZGVmZXJyZWRfYWNjZXNzX2NoZWNrX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19kZWZlcnJlZF9hY2Nlc3NfY2hlY2tfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMHNwZWNfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9zcGVjX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfc3BlY19lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZwZW5kaW5nX3RlbXBsYXRlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfcGVuZGluZ190ZW1wbGF0ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3BlbmRpbmdfdGVtcGxhdGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI1dmVjX2luY29tcGxldGVfdmFyX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19pbmNvbXBsZXRlX3Zhcl92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfaW5jb21wbGV0ZV92YXJfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMW5hbWVkX2xhYmVsX3VzZV9lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X25hbWVkX2xhYmVsX3VzZV9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X25hbWVkX2xhYmVsX3VzZV9lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjJ2ZWNfdHJlZV9wYWlyX3NfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX3RyZWVfcGFpcl9zX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY190cmVlX3BhaXJfc192YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3bmFtZWRfbGFiZWxfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9uYW1lZF9sYWJlbF9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X25hbWVkX2xhYmVsX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yOHZlY19jeHhfc2F2ZWRfYmluZGluZ192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfY3h4X3NhdmVkX2JpbmRpbmdfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2N4eF9zYXZlZF9iaW5kaW5nX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMzZ2ZWNfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdF92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0Y3BfdG9rZW5fY2FjaGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jcF90b2tlbl9jYWNoZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NwX3Rva2VuX2NhY2hlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMXNhdmVkX3Njb3BlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfc2F2ZWRfc2NvcGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zYXZlZF9zY29wZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZjeHhfaW50X3RyZWVfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY3h4X2ludF90cmVlX21hcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2N4eF9pbnRfdHJlZV9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI3dmVjX2NwX2xhYmVsX2JpbmRpbmdfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX2NwX2xhYmVsX2JpbmRpbmdfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2NwX2xhYmVsX2JpbmRpbmdfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yN3ZlY19jcF9jbGFzc19iaW5kaW5nX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19jcF9jbGFzc19iaW5kaW5nX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19jcF9jbGFzc19iaW5kaW5nX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZjcF9iaW5kaW5nX2xldmVsKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY3BfYmluZGluZ19sZXZlbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NwX2JpbmRpbmdfbGV2ZWwgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzExY3h4X2JpbmRpbmcoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jeHhfYmluZGluZyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2N4eF9iaW5kaW5nICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNWJpbmRpbmdfZW50cnlfcyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2JpbmRpbmdfZW50cnlfcyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2JpbmRpbmdfZW50cnlfcyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTViaW5kaW5nX3RhYmxlX3MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9iaW5kaW5nX3RhYmxlX3MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9iaW5kaW5nX3RhYmxlX3MgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzExdGluc3RfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90aW5zdF9sZXZlbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3RpbnN0X2xldmVsICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOHZlY190aW5mb19zX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY190aW5mb19zX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY190aW5mb19zX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOGNfcGFyc2VyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY19wYXJzZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jX3BhcnNlciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOW9wdF9zdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X29wdF9zdGFjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X29wdF9zdGFjayAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMzF2ZWNfcGVuZGluZ19yZWRlZmluaXRpb25fdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX3BlbmRpbmdfcmVkZWZpbml0aW9uX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19wZW5kaW5nX3JlZGVmaW5pdGlvbl92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIzdmVjX3BlbmRpbmdfd2Vha192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfcGVuZGluZ193ZWFrX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19wZW5kaW5nX3dlYWtfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMWFsaWduX3N0YWNrKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfYWxpZ25fc3RhY2sgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9hbGlnbl9zdGFjayAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjJ2ZWNfdHJlZV9nY192ZWNfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX3RyZWVfZ2NfdmVjX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY190cmVlX2djX3ZlY192YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIzdmVjX2NvbnN0X2NoYXJfcF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfY29uc3RfY2hhcl9wX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19jb25zdF9jaGFyX3BfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOHNvcnRlZF9maWVsZHNfdHlwZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3NvcnRlZF9maWVsZHNfdHlwZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3NvcnRlZF9maWVsZHNfdHlwZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTVjX2lubGluZV9zdGF0aWMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jX2lubGluZV9zdGF0aWMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jX2lubGluZV9zdGF0aWMgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI4dmVjX2NfZ290b19iaW5kaW5nc19wX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19jX2dvdG9fYmluZGluZ3NfcF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfY19nb3RvX2JpbmRpbmdzX3BfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNWNfZ290b19iaW5kaW5ncyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NfZ290b19iaW5kaW5ncyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NfZ290b19iaW5kaW5ncyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fN2Nfc2NvcGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jX3Njb3BlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY19zY29wZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOWNfYmluZGluZyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NfYmluZGluZyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NfYmluZGluZyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTJjX2xhYmVsX3ZhcnMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jX2xhYmVsX3ZhcnMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jX2xhYmVsX3ZhcnMgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEzcGFkX3R5cGVfaGFzaChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3BhZF90eXBlX2hhc2ggKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9wYWRfdHlwZV9oYXNoICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOGduYXRfYmluZGluZ19sZXZlbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2duYXRfYmluZGluZ19sZXZlbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2duYXRfYmluZGluZ19sZXZlbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjB2ZWNfbG9vcF9pbmZvX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19sb29wX2luZm9fdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2xvb3BfaW5mb192YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzExbG9vcF9pbmZvX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9sb29wX2luZm9fZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2xvb3BfaW5mb19kICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yN3ZlY19yYW5nZV9jaGVja19pbmZvX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19yYW5nZV9jaGVja19pbmZvX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19yYW5nZV9jaGVja19pbmZvX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThyYW5nZV9jaGVja19pbmZvX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9yYW5nZV9jaGVja19pbmZvX2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9yYW5nZV9jaGVja19pbmZvX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzllbGFiX2luZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9lbGFiX2luZm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9lbGFiX2luZm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEwc3RtdF9ncm91cChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3N0bXRfZ3JvdXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zdG10X2dyb3VwICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMHZlY19wYXJtX2F0dHJfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX3Bhcm1fYXR0cl92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfcGFybV9hdHRyX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFwYXJtX2F0dHJfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3Bhcm1fYXR0cl9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfcGFybV9hdHRyX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI3dmVjX2lubGluZV9zdW1tYXJ5X3RfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX2lubGluZV9zdW1tYXJ5X3RfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2lubGluZV9zdW1tYXJ5X3RfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNnZlY19zaXplX3RpbWVfZW50cnlfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX3NpemVfdGltZV9lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfc2l6ZV90aW1lX2VudHJ5X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjB2ZWNfY29uZGl0aW9uX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19jb25kaXRpb25fdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2NvbmRpdGlvbl92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3bHRvX2luX2RlY2xfc3RhdGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9sdG9faW5fZGVjbF9zdGF0ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2x0b19pbl9kZWNsX3N0YXRlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNnZlY19pcGFfZWRnZV9hcmdzX3RfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX2lwYV9lZGdlX2FyZ3NfdF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfaXBhX2VkZ2VfYXJnc190X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMzh2ZWNfaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3BfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2lwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcF92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI2dmVjX2lwYV9qdW1wX2Z1bmNfdF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfaXBhX2p1bXBfZnVuY190X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19pcGFfanVtcF9mdW5jX3RfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yOHZlY19pcGFfYWdnX2pmX2l0ZW1fdF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfaXBhX2FnZ19qZl9pdGVtX3RfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2lwYV9hZ2dfamZfaXRlbV90X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjBzc2Ffb3BlcmFuZF9tZW1vcnlfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3NzYV9vcGVyYW5kX21lbW9yeV9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfc3NhX29wZXJhbmRfbWVtb3J5X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEzc2Nldl9pbmZvX3N0cihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3NjZXZfaW5mb19zdHIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zY2V2X2luZm9fc3RyICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yOHZlY19tZW1fYWRkcl90ZW1wbGF0ZV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfbWVtX2FkZHJfdGVtcGxhdGVfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX21lbV9hZGRyX3RlbXBsYXRlX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTd2ZWNfZ2ltcGxlX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19naW1wbGVfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2dpbXBsZV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1dG1fcmVzdGFydF9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdG1fcmVzdGFydF9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdG1fcmVzdGFydF9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85dHlwZV9oYXNoKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHlwZV9oYXNoIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdHlwZV9oYXNoICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNnN0cmluZ19wb29sX2RhdGEoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9zdHJpbmdfcG9vbF9kYXRhIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfc3RyaW5nX3Bvb2xfZGF0YSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3RlbXBfc2xvdF9hZGRyZXNzX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdGVtcF9zbG90X2FkZHJlc3NfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1dGhyb3dfc3RtdF9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdGhyb3dfc3RtdF9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdGhyb3dfc3RtdF9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNXZlY19laF9sYW5kaW5nX3BhZF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfZWhfbGFuZGluZ19wYWRfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2VoX2xhbmRpbmdfcGFkX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjB2ZWNfZWhfcmVnaW9uX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19laF9yZWdpb25fdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2VoX3JlZ2lvbl92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEwZWhfY2F0Y2hfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2VoX2NhdGNoX2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9laF9jYXRjaF9kICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNmVoX2xhbmRpbmdfcGFkX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9laF9sYW5kaW5nX3BhZF9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZWhfbGFuZGluZ19wYWRfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFlaF9yZWdpb25fZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2VoX3JlZ2lvbl9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZWhfcmVnaW9uX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI0dmVjX2RpZV9hcmdfZW50cnlfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX2RpZV9hcmdfZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2RpZV9hcmdfZW50cnlfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNHZlY19tYWNpbmZvX2VudHJ5X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19tYWNpbmZvX2VudHJ5X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19tYWNpbmZvX2VudHJ5X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjR2ZWNfcHVibmFtZV9lbnRyeV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfcHVibmFtZV9lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfcHVibmFtZV9lbnRyeV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzMxdmVjX2R3X2xpbmVfaW5mb190YWJsZV9wX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19kd19saW5lX2luZm9fdGFibGVfcF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfZHdfbGluZV9pbmZvX3RhYmxlX3BfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMmNhY2hlZF9kd19sb2NfbGlzdF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jYWNoZWRfZHdfbG9jX2xpc3RfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY2FjaGVkX2R3X2xvY19saXN0X2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTdjYWxsX2FyZ19sb2Nfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NhbGxfYXJnX2xvY19ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY2FsbF9hcmdfbG9jX25vZGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE2dmFyX2xvY19saXN0X2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3Zhcl9sb2NfbGlzdF9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92YXJfbG9jX2xpc3RfZGVmICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMnZhcl9sb2Nfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3Zhcl9sb2Nfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3Zhcl9sb2Nfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZsaW1ib19kaWVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbGltYm9fZGllX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2xpbWJvX2RpZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIzdmVjX2R3X2F0dHJfbm9kZV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfZHdfYXR0cl9ub2RlX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19kd19hdHRyX25vZGVfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNWR3X2xpbmVfaW5mb190YWJsZV9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19saW5lX2luZm9fdGFibGVfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZHdfbGluZV9pbmZvX3RhYmxlX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjl2ZWNfZHdfbGluZV9pbmZvX2VudHJ5X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19kd19saW5lX2luZm9fZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdmVjX2R3X2xpbmVfaW5mb19lbnRyeV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE4Y29tZGF0X3R5cGVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY29tZGF0X3R5cGVfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY29tZGF0X3R5cGVfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNWR3X3Jhbmdlc19ieV9sYWJlbF9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZkd19yYW5nZXNfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZHdfcmFuZ2VzX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2R3X3Jhbmdlc19zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI5dmVjX2RlZmVycmVkX2xvY2F0aW9uc192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfZGVmZXJyZWRfbG9jYXRpb25zX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19kZWZlcnJlZF9sb2NhdGlvbnNfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMXZlY19kd19mZGVfcmVmX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19kd19mZGVfcmVmX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19kd19mZGVfcmVmX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjRyZWdfc2F2ZWRfaW5fZGF0YV9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9yZWdfc2F2ZWRfaW5fZGF0YV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9yZWdfc2F2ZWRfaW5fZGF0YV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3ZHdfY2ZpX3Jvd19zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19jZmlfcm93X3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2R3X2NmaV9yb3dfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNWR3YXJmX2ZpbGVfZGF0YShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2R3YXJmX2ZpbGVfZGF0YSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2R3YXJmX2ZpbGVfZGF0YSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjBpbmRpcmVjdF9zdHJpbmdfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2luZGlyZWN0X3N0cmluZ19ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfaW5kaXJlY3Rfc3RyaW5nX25vZGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIzYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9hZGRyX3RhYmxlX2VudHJ5X3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2FkZHJfdGFibGVfZW50cnlfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMXZlY19kd19jZmlfcmVmX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19kd19jZmlfcmVmX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19kd19jZmlfcmVmX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThkd19sb2NfbGlzdF9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19sb2NfbGlzdF9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9kd19sb2NfbGlzdF9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE5ZHdfbG9jX2Rlc2NyX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2R3X2xvY19kZXNjcl9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9kd19sb2NfZGVzY3Jfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xM2R3X2NmaV9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19jZmlfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZHdfY2ZpX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOHR5cGVpbmZvKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHlwZWluZm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF90eXBlaW5mbyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjVpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2lwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI2dmVjX2FsaWFzX3NldF9lbnRyeV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfYWxpYXNfc2V0X2VudHJ5X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19hbGlhc19zZXRfZW50cnlfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xN2FsaWFzX3NldF9lbnRyeV9kKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfYWxpYXNfc2V0X2VudHJ5X2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9hbGlhc19zZXRfZW50cnlfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjRjb25zdGFudF9kZXNjcmlwdG9yX3RyZWUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jb25zdGFudF9kZXNjcmlwdG9yX3RyZWUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jb25zdGFudF9kZXNjcmlwdG9yX3RyZWUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzhhc21fbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2FzbV9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfYXNtX25vZGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI1Y2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jZ3JhcGhfaW5kaXJlY3RfY2FsbF9pbmZvICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yOGNncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFjZ3JhcGhfZWRnZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NncmFwaF9lZGdlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY2dyYXBoX2VkZ2UgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI4dmVjX2lwYV9yZXBsYWNlX21hcF9wX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19pcGFfcmVwbGFjZV9tYXBfcF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfaXBhX3JlcGxhY2VfbWFwX3BfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNWlwYV9yZXBsYWNlX21hcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2lwYV9yZXBsYWNlX21hcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2lwYV9yZXBsYWNlX21hcCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMThsdG9fZmlsZV9kZWNsX2RhdGEoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9sdG9fZmlsZV9kZWNsX2RhdGEgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9sdG9fZmlsZV9kZWNsX2RhdGEgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIwdmVjX2lwYV9yZWZfdF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfaXBhX3JlZl90X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19pcGFfcmVmX3RfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNXN5bXRhYl9ub2RlX2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3N5bXRhYl9ub2RlX2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3N5bXRhYl9ub2RlX2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFjZ3JhcGhfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NncmFwaF9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfY2dyYXBoX25vZGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIydmVjX2Jhc2ljX2Jsb2NrX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19iYXNpY19ibG9ja192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfYmFzaWNfYmxvY2tfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xNXZlY19lZGdlX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY19lZGdlX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19lZGdlX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFydGxfYmJfaW5mbyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3J0bF9iYl9pbmZvIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfcnRsX2JiX2luZm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3dmVjX2xvb3BfcF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfbG9vcF9wX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19sb29wX3BfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV80bG9vcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2xvb3AgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9sb29wICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85bG9vcF9leGl0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbG9vcF9leGl0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbG9vcF9leGl0ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xM25iX2l0ZXJfYm91bmQoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9uYl9pdGVyX2JvdW5kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbmJfaXRlcl9ib3VuZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjR0eXBlc191c2VkX2J5X3ZhcnNfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90eXBlc191c2VkX2J5X3ZhcnNfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF90eXBlc191c2VkX2J5X3ZhcnNfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3bGFuZ3VhZ2VfZnVuY3Rpb24oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9sYW5ndWFnZV9mdW5jdGlvbiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2xhbmd1YWdlX2Z1bmN0aW9uICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV81bG9vcHMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9sb29wcyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2xvb3BzICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOGNvbnRyb2xfZmxvd19ncmFwaChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NvbnRyb2xfZmxvd19ncmFwaCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NvbnRyb2xfZmxvd19ncmFwaCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOWVoX3N0YXR1cyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2VoX3N0YXR1cyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2VoX3N0YXR1cyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFzdGFja191c2FnZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3N0YWNrX3VzYWdlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfc3RhY2tfdXNhZ2UgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIydmVjX3RlbXBfc2xvdF9wX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY190ZW1wX3Nsb3RfcF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfdGVtcF9zbG90X3BfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yMGluaXRpYWxfdmFsdWVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfaW5pdGlhbF92YWx1ZV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9pbml0aWFsX3ZhbHVlX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTFmcmFtZV9zcGFjZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2ZyYW1lX3NwYWNlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZnJhbWVfc3BhY2UgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE3cnR4X2NvbnN0YW50X3Bvb2woWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9ydHhfY29uc3RhbnRfcG9vbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3J0eF9jb25zdGFudF9wb29sICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xM2R3X2ZkZV9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kd19mZGVfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZHdfZmRlX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOXRlbXBfc2xvdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3RlbXBfc2xvdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3RlbXBfc2xvdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOWdpbXBsZV9kZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2dpbXBsZV9kZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2dpbXBsZV9kZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjd2ZWNfY2FsbF9zaXRlX3JlY29yZF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfY2FsbF9zaXRlX3JlY29yZF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfY2FsbF9zaXRlX3JlY29yZF92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE2dmVjX3VjaGFyX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3ZlY191Y2hhcl92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfdWNoYXJfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOGNhbGxfc2l0ZV9yZWNvcmRfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2NhbGxfc2l0ZV9yZWNvcmRfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NhbGxfc2l0ZV9yZWNvcmRfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTRzZXF1ZW5jZV9zdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3NlcXVlbmNlX3N0YWNrIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfc2VxdWVuY2Vfc3RhY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEzbGliZnVuY19lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2xpYmZ1bmNfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9saWJmdW5jX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMnRyZWVfdmVjX21hcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3RyZWVfdmVjX21hcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3RyZWVfdmVjX21hcCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTd0cmVlX3ByaW9yaXR5X21hcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3RyZWVfcHJpb3JpdHlfbWFwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdHJlZV9wcmlvcml0eV9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEydHJlZV9pbnRfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHJlZV9pbnRfbWFwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdHJlZV9pbnRfbWFwICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xM3RyZWVfZGVjbF9tYXAoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90cmVlX2RlY2xfbWFwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdHJlZV9kZWNsX21hcCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOHRyZWVfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHJlZV9tYXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF90cmVlX21hcCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTRsYW5nX3RyZWVfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2xhbmdfdHJlZV9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbGFuZ190cmVlX25vZGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzI0dHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85bGFuZ19kZWNsKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbGFuZ19kZWNsIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbGFuZ19kZWNsICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV85bGFuZ190eXBlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbGFuZ190eXBlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfbGFuZ190eXBlICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMGRpZV9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9kaWVfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZGllX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTV2ZWNfdHJlZV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfdHJlZV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfdHJlZV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzEycHRyX2luZm9fZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfcHRyX2luZm9fZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfcHRyX2luZm9fZGVmICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8yNnZlY19jb25zdHJ1Y3Rvcl9lbHRfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfdmVjX2NvbnN0cnVjdG9yX2VsdF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfY29uc3RydWN0b3JfZWx0X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMjF2ZWNfYWxpYXNfcGFpcl92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfYWxpYXNfcGFpcl92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF92ZWNfYWxpYXNfcGFpcl92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzhmdW5jdGlvbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2Z1bmN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfZnVuY3Rpb24gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzIzY29uc3RhbnRfZGVzY3JpcHRvcl9ydHgoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jb25zdGFudF9kZXNjcmlwdG9yX3J0eCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NvbnN0YW50X2Rlc2NyaXB0b3JfcnR4ICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMWZpeGVkX3ZhbHVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfZml4ZWRfdmFsdWUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9maXhlZF92YWx1ZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTByZWFsX3ZhbHVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfcmVhbF92YWx1ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3JlYWxfdmFsdWUgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0dmVjX3J0eF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF92ZWNfcnR4X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3ZlY19ydHhfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xMm9iamVjdF9ibG9jayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X29iamVjdF9ibG9jayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X29iamVjdF9ibG9jayAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOXJlZ19hdHRycyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3JlZ19hdHRycyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3JlZ19hdHRycyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOW1lbV9hdHRycyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X21lbV9hdHRycyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X21lbV9hdHRycyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTNjb3ZlcmFnZV9kYXRhKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfY292ZXJhZ2VfZGF0YSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2NvdmVyYWdlX2RhdGEgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE0Yml0bWFwX29ic3RhY2soWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9iaXRtYXBfb2JzdGFjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2JpdG1hcF9vYnN0YWNrICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOGJpdG1hcF9lbGVtZW50X2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2JpdG1hcF9lbGVtZW50X2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2JpdG1hcF9lbGVtZW50X2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTZtYWNoaW5lX2Z1bmN0aW9uKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfbWFjaGluZV9mdW5jdGlvbiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X21hY2hpbmVfZnVuY3Rpb24gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzE1YmFzaWNfYmxvY2tfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9nZ2NfbXhfYmFzaWNfYmxvY2tfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfYmFzaWNfYmxvY2tfZGVmICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV84ZWRnZV9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9lZGdlX2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2VkZ2VfZGVmICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV83c2VjdGlvbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3NlY3Rpb24gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9zZWN0aW9uICh2b2lkICopOworI2RlZmluZSBndF9nZ2NfbV8xOGdpbXBsZV9zdGF0ZW1lbnRfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X2dpbXBsZV9zdGF0ZW1lbnRfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X2dpbXBsZV9zdGF0ZW1lbnRfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fOXJ0dmVjX2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfZ2djX214X3J0dmVjX2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfZ2djX214X3J0dmVjX2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fN3J0eF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9ydHhfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9nZ2NfbXhfcnR4X2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfZ2djX21fMTViaXRtYXBfaGVhZF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9iaXRtYXBfaGVhZF9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9iaXRtYXBfaGVhZF9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzZhbnN3ZXIoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9hbnN3ZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9hbnN3ZXIgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzljcHBfbWFjcm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jcHBfbWFjcm8gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jcHBfbWFjcm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzljcHBfdG9rZW4oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9jcHBfdG9rZW4gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9jcHBfdG9rZW4gKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzlsaW5lX21hcHMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF9saW5lX21hcHMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X2dnY19teF9saW5lX21hcHMgKHZvaWQgKik7CisjZGVmaW5lIGd0X2dnY19tXzl0cmVlX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X2dnY19teF90cmVlX25vZGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZ3RfZ2djX214X3RyZWVfbm9kZSBndF9nZ2NfbXhfbGFuZ190cmVlX25vZGUKK2V4dGVybiB2b2lkIGd0X2dnY19tX0lJMTdzcGxheV90cmVlX25vZGVfcyAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1NQOXRyZWVfbm9kZTE3c3BsYXlfdHJlZV9ub2RlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QOXRyZWVfbm9kZVA5dHJlZV9ub2RlMTdzcGxheV90cmVlX25vZGVfcyAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxN3N0cmluZ19kZXNjcmlwdG9yNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTR0eXBlX2Fzc2VydGlvbjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE4dHJlZXRyZWVoYXNoX2VudHJ5NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTdtb2R1bGVfaHRhYl9lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDIxcGVuZGluZ19hYnN0cmFjdF90eXBlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTRjb25zdGV4cHJfY2FsbDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE2Y29uc3RleHByX2Z1bmRlZjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDEwc3BlY19lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE2Y3h4X2ludF90cmVlX21hcDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE3bmFtZWRfbGFiZWxfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxM3BhZF90eXBlX2hhc2g0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxN2x0b19pbl9kZWNsX3N0YXRlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QOXRyZWVfbm9kZVA5dHJlZV9ub2RlMTJzcGxheV90cmVlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTNzY2V2X2luZm9fc3RyNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTV0bV9yZXN0YXJ0X25vZGU0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxMnRyZWVfaW50X21hcDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDh0cmVlX21hcDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDIzY29uc3RhbnRfZGVzY3JpcHRvcl9ydHg0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AyNGNvbnN0YW50X2Rlc2NyaXB0b3JfdHJlZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDEyb2JqZWN0X2Jsb2NrNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QN3NlY3Rpb240aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxN3RyZWVfcHJpb3JpdHlfbWFwNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTJ0cmVlX3ZlY19tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxM3RyZWVfZGVjbF9tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A5dHlwZV9oYXNoNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMjN0ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDE1dGhyb3dfc3RtdF9ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QOXJlZ19hdHRyczRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDltZW1fYXR0cnM0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A3cnR4X2RlZjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDIzYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3Q0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AyMmNhY2hlZF9kd19sb2NfbGlzdF9kZWY0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxNnZhcl9sb2NfbGlzdF9kZWY0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxMGRpZV9zdHJ1Y3Q0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxNWR3YXJmX2ZpbGVfZGF0YTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDIwaW5kaXJlY3Rfc3RyaW5nX25vZGU0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1NQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fSUkxMnNwbGF5X3RyZWVfcyAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1AxNXN5bXRhYl9ub2RlX2RlZjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfZ2djX21fUDExY2dyYXBoX2VkZ2U0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A5bG9vcF9leGl0NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMjR0eXBlc191c2VkX2J5X3ZhcnNfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X2dnY19tX1A5dHJlZV9ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9nZ2NfbV9QMTNsaWJmdW5jX2VudHJ5NGh0YWIgKHZvaWQgKik7CisKKy8qIGZ1bmN0aW9ucyBjb2RlICovCisKKy8qIFBDSCB0eXBlLXdhbGtpbmcgcHJvY2VkdXJlcy4gICovCisvKiBNYWNyb3MgYW5kIGRlY2xhcmF0aW9ucy4gICovCisjZGVmaW5lIGd0X3BjaF9uXzI0dmVjX2l2YXJyZWZfZW50cnlfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2l2YXJyZWZfZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2l2YXJyZWZfZW50cnlfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNnZlY19wcm90X2xpc3RfZW50cnlfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX3Byb3RfbGlzdF9lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfcHJvdF9saXN0X2VudHJ5X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjN2ZWNfbXNncmVmX2VudHJ5X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19tc2dyZWZfZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX21zZ3JlZl9lbnRyeV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI3dmVjX2lkZW50X2RhdGFfdHVwbGVfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2lkZW50X2RhdGFfdHVwbGVfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2lkZW50X2RhdGFfdHVwbGVfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN3N0cmluZ19kZXNjcmlwdG9yKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfc3RyaW5nX2Rlc2NyaXB0b3IgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9zdHJpbmdfZGVzY3JpcHRvciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOWltcF9lbnRyeShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2ltcF9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2ltcF9lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZoYXNoZWRfYXR0cmlidXRlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfaGFzaGVkX2F0dHJpYnV0ZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2hhc2hlZF9hdHRyaWJ1dGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEyaGFzaGVkX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfaGFzaGVkX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfaGFzaGVkX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNm9iamNfbWFwX3ByaXZhdGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9vYmpjX21hcF9wcml2YXRlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfb2JqY19tYXBfcHJpdmF0ZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjZnaW1wbGVfdHlwZV9sZWFkZXJfZW50cnlfcyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2dpbXBsZV90eXBlX2xlYWRlcl9lbnRyeV9zIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZ2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5X3MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIzdmVjX21ldGhvZF9lbnRyeV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfbWV0aG9kX2VudHJ5X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19tZXRob2RfZW50cnlfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNHR5cGVfYXNzZXJ0aW9uKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdHlwZV9hc3NlcnRpb24gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90eXBlX2Fzc2VydGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTh0cmVldHJlZWhhc2hfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90cmVldHJlZWhhc2hfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90cmVldHJlZWhhc2hfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzVDUG9vbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X0NQb29sIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfQ1Bvb2wgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzNKQ0YoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9KQ0YgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9KQ0YgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3bW9kdWxlX2h0YWJfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9tb2R1bGVfaHRhYl9lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X21vZHVsZV9odGFiX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xM2JpbmRpbmdfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9iaW5kaW5nX2xldmVsIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYmluZGluZ19sZXZlbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjd2ZWNfcGVuZGluZ19ub2V4Y2VwdF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfcGVuZGluZ19ub2V4Y2VwdF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfcGVuZGluZ19ub2V4Y2VwdF92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIxcGVuZGluZ19hYnN0cmFjdF90eXBlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcGVuZGluZ19hYnN0cmFjdF90eXBlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfcGVuZGluZ19hYnN0cmFjdF90eXBlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xOXZlY190cmVlX2ludF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfdHJlZV9pbnRfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX3RyZWVfaW50X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOWNwX3BhcnNlcihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2NwX3BhcnNlciAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NwX3BhcnNlciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMzh2ZWNfY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19jcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2NwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3Y3BfcGFyc2VyX2NvbnRleHQoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jcF9wYXJzZXJfY29udGV4dCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NwX3BhcnNlcl9jb250ZXh0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8zMXZlY19jcF9kZWZhdWx0X2FyZ19lbnRyeV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfY3BfZGVmYXVsdF9hcmdfZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2NwX2RlZmF1bHRfYXJnX2VudHJ5X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOGNwX2xleGVyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3BfbGV4ZXIgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jcF9sZXhlciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTl2ZWNfY3BfdG9rZW5fdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2NwX3Rva2VuX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19jcF90b2tlbl92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEwdHJlZV9jaGVjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3RyZWVfY2hlY2sgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90cmVlX2NoZWNrICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNGNvbnN0ZXhwcl9jYWxsKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY29uc3RleHByX2NhbGwgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jb25zdGV4cHJfY2FsbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZjb25zdGV4cHJfZnVuZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY29uc3RleHByX2Z1bmRlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NvbnN0ZXhwcl9mdW5kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI2dmVjX2RlZmVycmVkX2FjY2Vzc192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfZGVmZXJyZWRfYWNjZXNzX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19kZWZlcnJlZF9hY2Nlc3NfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8zMnZlY19kZWZlcnJlZF9hY2Nlc3NfY2hlY2tfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2RlZmVycmVkX2FjY2Vzc19jaGVja192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfZGVmZXJyZWRfYWNjZXNzX2NoZWNrX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTBzcGVjX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfc3BlY19lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3NwZWNfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2cGVuZGluZ190ZW1wbGF0ZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3BlbmRpbmdfdGVtcGxhdGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9wZW5kaW5nX3RlbXBsYXRlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNXZlY19pbmNvbXBsZXRlX3Zhcl92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfaW5jb21wbGV0ZV92YXJfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2luY29tcGxldGVfdmFyX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjFuYW1lZF9sYWJlbF91c2VfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9uYW1lZF9sYWJlbF91c2VfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9uYW1lZF9sYWJlbF91c2VfZW50cnkgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIydmVjX3RyZWVfcGFpcl9zX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY190cmVlX3BhaXJfc192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfdHJlZV9wYWlyX3NfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN25hbWVkX2xhYmVsX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbmFtZWRfbGFiZWxfZW50cnkgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9uYW1lZF9sYWJlbF9lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjh2ZWNfY3h4X3NhdmVkX2JpbmRpbmdfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2N4eF9zYXZlZF9iaW5kaW5nX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19jeHhfc2F2ZWRfYmluZGluZ192YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzM2dmVjX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3RfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3RfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX3F1YWxpZmllZF90eXBlZGVmX3VzYWdlX3RfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNGNwX3Rva2VuX2NhY2hlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3BfdG9rZW5fY2FjaGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jcF90b2tlbl9jYWNoZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTFzYXZlZF9zY29wZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3NhdmVkX3Njb3BlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfc2F2ZWRfc2NvcGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2Y3h4X2ludF90cmVlX21hcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2N4eF9pbnRfdHJlZV9tYXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jeHhfaW50X3RyZWVfbWFwICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yN3ZlY19jcF9sYWJlbF9iaW5kaW5nX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19jcF9sYWJlbF9iaW5kaW5nX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19jcF9sYWJlbF9iaW5kaW5nX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjd2ZWNfY3BfY2xhc3NfYmluZGluZ192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfY3BfY2xhc3NfYmluZGluZ192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfY3BfY2xhc3NfYmluZGluZ192YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2Y3BfYmluZGluZ19sZXZlbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2NwX2JpbmRpbmdfbGV2ZWwgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jcF9iaW5kaW5nX2xldmVsICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMWN4eF9iaW5kaW5nKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3h4X2JpbmRpbmcgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jeHhfYmluZGluZyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTViaW5kaW5nX2VudHJ5X3MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9iaW5kaW5nX2VudHJ5X3MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9iaW5kaW5nX2VudHJ5X3MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1YmluZGluZ190YWJsZV9zKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfYmluZGluZ190YWJsZV9zIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYmluZGluZ190YWJsZV9zICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMXRpbnN0X2xldmVsKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdGluc3RfbGV2ZWwgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90aW5zdF9sZXZlbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTh2ZWNfdGluZm9fc192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfdGluZm9fc192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfdGluZm9fc192YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzhjX3BhcnNlcihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2NfcGFyc2VyIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY19wYXJzZXIgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzlvcHRfc3RhY2soWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9vcHRfc3RhY2sgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9vcHRfc3RhY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzMxdmVjX3BlbmRpbmdfcmVkZWZpbml0aW9uX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19wZW5kaW5nX3JlZGVmaW5pdGlvbl92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfcGVuZGluZ19yZWRlZmluaXRpb25fdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yM3ZlY19wZW5kaW5nX3dlYWtfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX3BlbmRpbmdfd2Vha192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfcGVuZGluZ193ZWFrX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTFhbGlnbl9zdGFjayhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2FsaWduX3N0YWNrIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYWxpZ25fc3RhY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIydmVjX3RyZWVfZ2NfdmVjX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY190cmVlX2djX3ZlY192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfdHJlZV9nY192ZWNfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yM3ZlY19jb25zdF9jaGFyX3BfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2NvbnN0X2NoYXJfcF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfY29uc3RfY2hhcl9wX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThzb3J0ZWRfZmllbGRzX3R5cGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zb3J0ZWRfZmllbGRzX3R5cGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9zb3J0ZWRfZmllbGRzX3R5cGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1Y19pbmxpbmVfc3RhdGljKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY19pbmxpbmVfc3RhdGljIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY19pbmxpbmVfc3RhdGljICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yOHZlY19jX2dvdG9fYmluZGluZ3NfcF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfY19nb3RvX2JpbmRpbmdzX3BfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2NfZ290b19iaW5kaW5nc19wX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTVjX2dvdG9fYmluZGluZ3MoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jX2dvdG9fYmluZGluZ3MgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jX2dvdG9fYmluZGluZ3MgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzdjX3Njb3BlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY19zY29wZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2Nfc2NvcGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzljX2JpbmRpbmcoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jX2JpbmRpbmcgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jX2JpbmRpbmcgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEyY19sYWJlbF92YXJzKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY19sYWJlbF92YXJzIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY19sYWJlbF92YXJzICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xM3BhZF90eXBlX2hhc2goWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9wYWRfdHlwZV9oYXNoIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfcGFkX3R5cGVfaGFzaCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThnbmF0X2JpbmRpbmdfbGV2ZWwoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9nbmF0X2JpbmRpbmdfbGV2ZWwgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9nbmF0X2JpbmRpbmdfbGV2ZWwgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIwdmVjX2xvb3BfaW5mb192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfbG9vcF9pbmZvX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19sb29wX2luZm9fdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMWxvb3BfaW5mb19kKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbG9vcF9pbmZvX2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9sb29wX2luZm9fZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjd2ZWNfcmFuZ2VfY2hlY2tfaW5mb192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfcmFuZ2VfY2hlY2tfaW5mb192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfcmFuZ2VfY2hlY2tfaW5mb192YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4cmFuZ2VfY2hlY2tfaW5mb19kKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcmFuZ2VfY2hlY2tfaW5mb19kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfcmFuZ2VfY2hlY2tfaW5mb19kICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85ZWxhYl9pbmZvKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZWxhYl9pbmZvIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZWxhYl9pbmZvICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMHN0bXRfZ3JvdXAoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zdG10X2dyb3VwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfc3RtdF9ncm91cCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjB2ZWNfcGFybV9hdHRyX3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19wYXJtX2F0dHJfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX3Bhcm1fYXR0cl92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExcGFybV9hdHRyX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9wYXJtX2F0dHJfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3Bhcm1fYXR0cl9kICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yN3ZlY19pbmxpbmVfc3VtbWFyeV90X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19pbmxpbmVfc3VtbWFyeV90X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19pbmxpbmVfc3VtbWFyeV90X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjZ2ZWNfc2l6ZV90aW1lX2VudHJ5X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19zaXplX3RpbWVfZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX3NpemVfdGltZV9lbnRyeV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIwdmVjX2NvbmRpdGlvbl92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfY29uZGl0aW9uX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19jb25kaXRpb25fdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN2x0b19pbl9kZWNsX3N0YXRlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbHRvX2luX2RlY2xfc3RhdGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9sdG9faW5fZGVjbF9zdGF0ZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjZ2ZWNfaXBhX2VkZ2VfYXJnc190X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19pcGFfZWRnZV9hcmdzX3RfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2lwYV9lZGdlX2FyZ3NfdF92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzM4dmVjX2lwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3BfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNnZlY19pcGFfanVtcF9mdW5jX3RfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2lwYV9qdW1wX2Z1bmNfdF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfaXBhX2p1bXBfZnVuY190X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjh2ZWNfaXBhX2FnZ19qZl9pdGVtX3RfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2lwYV9hZ2dfamZfaXRlbV90X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19pcGFfYWdnX2pmX2l0ZW1fdF92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIwc3NhX29wZXJhbmRfbWVtb3J5X2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zc2Ffb3BlcmFuZF9tZW1vcnlfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3NzYV9vcGVyYW5kX21lbW9yeV9kICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xM3NjZXZfaW5mb19zdHIoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zY2V2X2luZm9fc3RyIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfc2Nldl9pbmZvX3N0ciAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjh2ZWNfbWVtX2FkZHJfdGVtcGxhdGVfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX21lbV9hZGRyX3RlbXBsYXRlX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19tZW1fYWRkcl90ZW1wbGF0ZV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3dmVjX2dpbXBsZV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfZ2ltcGxlX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19naW1wbGVfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNXRtX3Jlc3RhcnRfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3RtX3Jlc3RhcnRfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RtX3Jlc3RhcnRfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOXR5cGVfaGFzaChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3R5cGVfaGFzaCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3R5cGVfaGFzaCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZzdHJpbmdfcG9vbF9kYXRhKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfc3RyaW5nX3Bvb2xfZGF0YSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3N0cmluZ19wb29sX2RhdGEgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIzdGVtcF9zbG90X2FkZHJlc3NfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90ZW1wX3Nsb3RfYWRkcmVzc19lbnRyeSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RlbXBfc2xvdF9hZGRyZXNzX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNXRocm93X3N0bXRfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3Rocm93X3N0bXRfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3Rocm93X3N0bXRfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjV2ZWNfZWhfbGFuZGluZ19wYWRfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2VoX2xhbmRpbmdfcGFkX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19laF9sYW5kaW5nX3BhZF92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIwdmVjX2VoX3JlZ2lvbl92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfZWhfcmVnaW9uX3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19laF9yZWdpb25fdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMGVoX2NhdGNoX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9laF9jYXRjaF9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZWhfY2F0Y2hfZCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTZlaF9sYW5kaW5nX3BhZF9kKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZWhfbGFuZGluZ19wYWRfZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2VoX2xhbmRpbmdfcGFkX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExZWhfcmVnaW9uX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9laF9yZWdpb25fZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2VoX3JlZ2lvbl9kICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNHZlY19kaWVfYXJnX2VudHJ5X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19kaWVfYXJnX2VudHJ5X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19kaWVfYXJnX2VudHJ5X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjR2ZWNfbWFjaW5mb19lbnRyeV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfbWFjaW5mb19lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfbWFjaW5mb19lbnRyeV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI0dmVjX3B1Ym5hbWVfZW50cnlfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX3B1Ym5hbWVfZW50cnlfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX3B1Ym5hbWVfZW50cnlfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8zMXZlY19kd19saW5lX2luZm9fdGFibGVfcF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfZHdfbGluZV9pbmZvX3RhYmxlX3BfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2R3X2xpbmVfaW5mb190YWJsZV9wX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjJjYWNoZWRfZHdfbG9jX2xpc3RfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY2FjaGVkX2R3X2xvY19saXN0X2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NhY2hlZF9kd19sb2NfbGlzdF9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3Y2FsbF9hcmdfbG9jX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jYWxsX2FyZ19sb2Nfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NhbGxfYXJnX2xvY19ub2RlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNnZhcl9sb2NfbGlzdF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92YXJfbG9jX2xpc3RfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmFyX2xvY19saXN0X2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTJ2YXJfbG9jX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92YXJfbG9jX25vZGUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92YXJfbG9jX25vZGUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2bGltYm9fZGllX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xpbWJvX2RpZV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9saW1ib19kaWVfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yM3ZlY19kd19hdHRyX25vZGVfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2R3X2F0dHJfbm9kZV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfZHdfYXR0cl9ub2RlX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjVkd19saW5lX2luZm9fdGFibGVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfbGluZV9pbmZvX3RhYmxlX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2R3X2xpbmVfaW5mb190YWJsZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI5dmVjX2R3X2xpbmVfaW5mb19lbnRyeV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfZHdfbGluZV9pbmZvX2VudHJ5X3ZhX2djXyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3ZlY19kd19saW5lX2luZm9fZW50cnlfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xOGNvbWRhdF90eXBlX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2NvbWRhdF90eXBlX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NvbWRhdF90eXBlX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjVkd19yYW5nZXNfYnlfbGFiZWxfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2R3X3Jhbmdlc19ieV9sYWJlbF9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2ZHdfcmFuZ2VzX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2R3X3Jhbmdlc19zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9kd19yYW5nZXNfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yOXZlY19kZWZlcnJlZF9sb2NhdGlvbnNfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2RlZmVycmVkX2xvY2F0aW9uc192YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfZGVmZXJyZWRfbG9jYXRpb25zX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjF2ZWNfZHdfZmRlX3JlZl92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfZHdfZmRlX3JlZl92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfZHdfZmRlX3JlZl92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI0cmVnX3NhdmVkX2luX2RhdGFfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcmVnX3NhdmVkX2luX2RhdGFfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfcmVnX3NhdmVkX2luX2RhdGFfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN2R3X2NmaV9yb3dfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfY2ZpX3Jvd19zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9kd19jZmlfcm93X3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTVkd2FyZl9maWxlX2RhdGEoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9kd2FyZl9maWxlX2RhdGEgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9kd2FyZl9maWxlX2RhdGEgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIwaW5kaXJlY3Rfc3RyaW5nX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9pbmRpcmVjdF9zdHJpbmdfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2luZGlyZWN0X3N0cmluZ19ub2RlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yM2FkZHJfdGFibGVfZW50cnlfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9hZGRyX3RhYmxlX2VudHJ5X3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjF2ZWNfZHdfY2ZpX3JlZl92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfZHdfY2ZpX3JlZl92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfZHdfY2ZpX3JlZl92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4ZHdfbG9jX2xpc3Rfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfbG9jX2xpc3Rfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZHdfbG9jX2xpc3Rfc3RydWN0ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xOWR3X2xvY19kZXNjcl9zdHJ1Y3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9kd19sb2NfZGVzY3Jfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZHdfbG9jX2Rlc2NyX3N0cnVjdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTNkd19jZmlfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfY2ZpX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2R3X2NmaV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzh0eXBlaW5mbyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3R5cGVpbmZvIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdHlwZWluZm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI1aXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2lwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9pcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNnZlY19hbGlhc19zZXRfZW50cnlfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2FsaWFzX3NldF9lbnRyeV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfYWxpYXNfc2V0X2VudHJ5X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTdhbGlhc19zZXRfZW50cnlfZChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2FsaWFzX3NldF9lbnRyeV9kIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYWxpYXNfc2V0X2VudHJ5X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI0Y29uc3RhbnRfZGVzY3JpcHRvcl90cmVlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY29uc3RhbnRfZGVzY3JpcHRvcl90cmVlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl84YXNtX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9hc21fbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2FzbV9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNWNncmFwaF9pbmRpcmVjdF9jYWxsX2luZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jZ3JhcGhfaW5kaXJlY3RfY2FsbF9pbmZvIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjhjZ3JhcGhfZnVuY3Rpb25fdmVyc2lvbl9pbmZvKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NncmFwaF9mdW5jdGlvbl92ZXJzaW9uX2luZm8gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExY2dyYXBoX2VkZ2UoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jZ3JhcGhfZWRnZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NncmFwaF9lZGdlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yOHZlY19pcGFfcmVwbGFjZV9tYXBfcF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfaXBhX3JlcGxhY2VfbWFwX3BfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2lwYV9yZXBsYWNlX21hcF9wX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTVpcGFfcmVwbGFjZV9tYXAoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9pcGFfcmVwbGFjZV9tYXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9pcGFfcmVwbGFjZV9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE4bHRvX2ZpbGVfZGVjbF9kYXRhKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbHRvX2ZpbGVfZGVjbF9kYXRhIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbHRvX2ZpbGVfZGVjbF9kYXRhICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yMHZlY19pcGFfcmVmX3RfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2lwYV9yZWZfdF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfaXBhX3JlZl90X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTVzeW10YWJfbm9kZV9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zeW10YWJfbm9kZV9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9zeW10YWJfbm9kZV9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExY2dyYXBoX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jZ3JhcGhfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2NncmFwaF9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yMnZlY19iYXNpY19ibG9ja192YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfYmFzaWNfYmxvY2tfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2Jhc2ljX2Jsb2NrX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTV2ZWNfZWRnZV92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfZWRnZV92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfZWRnZV92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExcnRsX2JiX2luZm8oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9ydGxfYmJfaW5mbyAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3J0bF9iYl9pbmZvICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN3ZlY19sb29wX3BfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2xvb3BfcF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfbG9vcF9wX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fNGxvb3AoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9sb29wIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbG9vcCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOWxvb3BfZXhpdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xvb3BfZXhpdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2xvb3BfZXhpdCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTNuYl9pdGVyX2JvdW5kKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbmJfaXRlcl9ib3VuZCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X25iX2l0ZXJfYm91bmQgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI0dHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5ICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN2xhbmd1YWdlX2Z1bmN0aW9uKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbGFuZ3VhZ2VfZnVuY3Rpb24gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9sYW5ndWFnZV9mdW5jdGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fNWxvb3BzKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbG9vcHMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9sb29wcyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThjb250cm9sX2Zsb3dfZ3JhcGgoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jb250cm9sX2Zsb3dfZ3JhcGggKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jb250cm9sX2Zsb3dfZ3JhcGggKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzllaF9zdGF0dXMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9laF9zdGF0dXMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9laF9zdGF0dXMgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExc3RhY2tfdXNhZ2UoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zdGFja191c2FnZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3N0YWNrX3VzYWdlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yMnZlY190ZW1wX3Nsb3RfcF92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfdGVtcF9zbG90X3BfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX3RlbXBfc2xvdF9wX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjBpbml0aWFsX3ZhbHVlX3N0cnVjdChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2luaXRpYWxfdmFsdWVfc3RydWN0IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfaW5pdGlhbF92YWx1ZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzExZnJhbWVfc3BhY2UoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9mcmFtZV9zcGFjZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2ZyYW1lX3NwYWNlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xN3J0eF9jb25zdGFudF9wb29sKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcnR4X2NvbnN0YW50X3Bvb2wgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9ydHhfY29uc3RhbnRfcG9vbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTNkd19mZGVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZHdfZmRlX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2R3X2ZkZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzl0ZW1wX3Nsb3QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90ZW1wX3Nsb3QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90ZW1wX3Nsb3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzlnaW1wbGVfZGYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9naW1wbGVfZGYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9naW1wbGVfZGYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzI3dmVjX2NhbGxfc2l0ZV9yZWNvcmRfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2NhbGxfc2l0ZV9yZWNvcmRfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2NhbGxfc2l0ZV9yZWNvcmRfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNnZlY191Y2hhcl92YV9nY18oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF92ZWNfdWNoYXJfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX3VjaGFyX3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThjYWxsX3NpdGVfcmVjb3JkX2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9jYWxsX3NpdGVfcmVjb3JkX2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jYWxsX3NpdGVfcmVjb3JkX2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE0c2VxdWVuY2Vfc3RhY2soWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zZXF1ZW5jZV9zdGFjayAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3NlcXVlbmNlX3N0YWNrICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xM2xpYmZ1bmNfZW50cnkoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9saWJmdW5jX2VudHJ5IChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbGliZnVuY19lbnRyeSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTJ0cmVlX3ZlY19tYXAoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90cmVlX3ZlY19tYXAgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF90cmVlX3ZlY19tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE3dHJlZV9wcmlvcml0eV9tYXAoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF90cmVlX3ByaW9yaXR5X21hcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RyZWVfcHJpb3JpdHlfbWFwICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMnRyZWVfaW50X21hcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3RyZWVfaW50X21hcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RyZWVfaW50X21hcCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTN0cmVlX2RlY2xfbWFwKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdHJlZV9kZWNsX21hcCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RyZWVfZGVjbF9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzh0cmVlX21hcChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3RyZWVfbWFwIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdHJlZV9tYXAgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE0bGFuZ190cmVlX25vZGUoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9sYW5nX3RyZWVfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2xhbmdfdHJlZV9ub2RlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yNHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3RyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3RyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOWxhbmdfZGVjbChYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xhbmdfZGVjbCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2xhbmdfZGVjbCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOWxhbmdfdHlwZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2xhbmdfdHlwZSAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2xhbmdfdHlwZSAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTBkaWVfc3RydWN0KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZGllX3N0cnVjdCAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2RpZV9zdHJ1Y3QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1dmVjX3RyZWVfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX3RyZWVfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX3RyZWVfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xMnB0cl9pbmZvX2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3B0cl9pbmZvX2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3B0cl9pbmZvX2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMjZ2ZWNfY29uc3RydWN0b3JfZWx0X3ZhX2djXyhYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3ZlY19jb25zdHJ1Y3Rvcl9lbHRfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2NvbnN0cnVjdG9yX2VsdF92YV9nY18gKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzIxdmVjX2FsaWFzX3BhaXJfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX2FsaWFzX3BhaXJfdmFfZ2NfIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfdmVjX2FsaWFzX3BhaXJfdmFfZ2NfICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl84ZnVuY3Rpb24oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9mdW5jdGlvbiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2Z1bmN0aW9uICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8yM2NvbnN0YW50X2Rlc2NyaXB0b3JfcnR4KFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY29uc3RhbnRfZGVzY3JpcHRvcl9ydHggKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jb25zdGFudF9kZXNjcmlwdG9yX3J0eCAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTFmaXhlZF92YWx1ZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2ZpeGVkX3ZhbHVlIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfZml4ZWRfdmFsdWUgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEwcmVhbF92YWx1ZShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X3JlYWxfdmFsdWUgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9yZWFsX3ZhbHVlICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNHZlY19ydHhfdmFfZ2NfKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdmVjX3J0eF92YV9nY18gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF92ZWNfcnR4X3ZhX2djXyAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMTJvYmplY3RfYmxvY2soWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9vYmplY3RfYmxvY2sgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9vYmplY3RfYmxvY2sgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzlyZWdfYXR0cnMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9yZWdfYXR0cnMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9yZWdfYXR0cnMgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzltZW1fYXR0cnMoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9tZW1fYXR0cnMgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9tZW1fYXR0cnMgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzEzY292ZXJhZ2VfZGF0YShYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2NvdmVyYWdlX2RhdGEgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9jb3ZlcmFnZV9kYXRhICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNGJpdG1hcF9vYnN0YWNrKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfYml0bWFwX29ic3RhY2sgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9iaXRtYXBfb2JzdGFjayAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThiaXRtYXBfZWxlbWVudF9kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9iaXRtYXBfZWxlbWVudF9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9iaXRtYXBfZWxlbWVudF9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE2bWFjaGluZV9mdW5jdGlvbihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X21hY2hpbmVfZnVuY3Rpb24gKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9tYWNoaW5lX2Z1bmN0aW9uICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl8xNWJhc2ljX2Jsb2NrX2RlZihYKSBkbyB7IFwKKyAgaWYgKFggIT0gTlVMTCkgZ3RfcGNoX254X2Jhc2ljX2Jsb2NrX2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X2Jhc2ljX2Jsb2NrX2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fOGVkZ2VfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfZWRnZV9kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9lZGdlX2RlZiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fN3NlY3Rpb24oWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9zZWN0aW9uIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfc2VjdGlvbiAodm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX25fMThnaW1wbGVfc3RhdGVtZW50X2QoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9naW1wbGVfc3RhdGVtZW50X2QgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9naW1wbGVfc3RhdGVtZW50X2QgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzlydHZlY19kZWYoWCkgZG8geyBcCisgIGlmIChYICE9IE5VTEwpIGd0X3BjaF9ueF9ydHZlY19kZWYgKFgpO1wKKyAgfSB3aGlsZSAoMCkKK2V4dGVybiB2b2lkIGd0X3BjaF9ueF9ydHZlY19kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzdydHhfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfcnR4X2RlZiAoWCk7XAorICB9IHdoaWxlICgwKQorZXh0ZXJuIHZvaWQgZ3RfcGNoX254X3J0eF9kZWYgKHZvaWQgKik7CisjZGVmaW5lIGd0X3BjaF9uXzE1Yml0bWFwX2hlYWRfZGVmKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfYml0bWFwX2hlYWRfZGVmIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYml0bWFwX2hlYWRfZGVmICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl82YW5zd2VyKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfYW5zd2VyIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfYW5zd2VyICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85Y3BwX21hY3JvKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3BwX21hY3JvIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY3BwX21hY3JvICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85Y3BwX3Rva2VuKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfY3BwX3Rva2VuIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfY3BwX3Rva2VuICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85bGluZV9tYXBzKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfbGluZV9tYXBzIChYKTtcCisgIH0gd2hpbGUgKDApCitleHRlcm4gdm9pZCBndF9wY2hfbnhfbGluZV9tYXBzICh2b2lkICopOworI2RlZmluZSBndF9wY2hfbl85dHJlZV9ub2RlKFgpIGRvIHsgXAorICBpZiAoWCAhPSBOVUxMKSBndF9wY2hfbnhfdHJlZV9ub2RlIChYKTtcCisgIH0gd2hpbGUgKDApCisjZGVmaW5lIGd0X3BjaF9ueF90cmVlX25vZGUgZ3RfcGNoX254X2xhbmdfdHJlZV9ub2RlCitleHRlcm4gdm9pZCBndF9wY2hfbl9JSTE3c3BsYXlfdHJlZV9ub2RlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9TUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDl0cmVlX25vZGVQOXRyZWVfbm9kZTE3c3BsYXlfdHJlZV9ub2RlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTdzdHJpbmdfZGVzY3JpcHRvcjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE0dHlwZV9hc3NlcnRpb240aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxOHRyZWV0cmVlaGFzaF9lbnRyeTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE3bW9kdWxlX2h0YWJfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AyMXBlbmRpbmdfYWJzdHJhY3RfdHlwZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE0Y29uc3RleHByX2NhbGw0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxNmNvbnN0ZXhwcl9mdW5kZWY0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxMHNwZWNfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxNmN4eF9pbnRfdHJlZV9tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxN25hbWVkX2xhYmVsX2VudHJ5NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTNwYWRfdHlwZV9oYXNoNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTdsdG9faW5fZGVjbF9zdGF0ZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDl0cmVlX25vZGVQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDEzc2Nldl9pbmZvX3N0cjRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDE1dG1fcmVzdGFydF9ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTJ0cmVlX2ludF9tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1A4dHJlZV9tYXA0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AyM2NvbnN0YW50X2Rlc2NyaXB0b3JfcnR4NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMjRjb25zdGFudF9kZXNjcmlwdG9yX3RyZWU0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxMm9iamVjdF9ibG9jazRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDdzZWN0aW9uNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTd0cmVlX3ByaW9yaXR5X21hcDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDEydHJlZV92ZWNfbWFwNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTN0cmVlX2RlY2xfbWFwNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QOXR5cGVfaGFzaDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDIzdGVtcF9zbG90X2FkZHJlc3NfZW50cnk0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxNXRocm93X3N0bXRfbm9kZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDlyZWdfYXR0cnM0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1A5bWVtX2F0dHJzNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QN3J0eF9kZWY0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AyM2FkZHJfdGFibGVfZW50cnlfc3RydWN0NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMjJjYWNoZWRfZHdfbG9jX2xpc3RfZGVmNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTZ2YXJfbG9jX2xpc3RfZGVmNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTBkaWVfc3RydWN0NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTVkd2FyZl9maWxlX2RhdGE0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AyMGluZGlyZWN0X3N0cmluZ19ub2RlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9TUDl0cmVlX25vZGUxMnNwbGF5X3RyZWVfcyAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX0lJMTJzcGxheV90cmVlX3MgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QMTVzeW10YWJfbm9kZV9kZWY0aHRhYiAodm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9uX1AxMWNncmFwaF9lZGdlNGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QOWxvb3BfZXhpdDRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDI0dHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5NGh0YWIgKHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfbl9QOXRyZWVfbm9kZTRodGFiICh2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX25fUDEzbGliZnVuY19lbnRyeTRodGFiICh2b2lkICopOworCisvKiBmdW5jdGlvbnMgY29kZSAqLworCisvKiBMb2NhbCBwb2ludGVyLXdhbGtpbmcgcm91dGluZXMuICAqLworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjR2ZWNfaXZhcnJlZl9lbnRyeV92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yNnZlY19wcm90X2xpc3RfZW50cnlfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjN2ZWNfbXNncmVmX2VudHJ5X3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI3dmVjX2lkZW50X2RhdGFfdHVwbGVfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTdzdHJpbmdfZGVzY3JpcHRvcgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlpbXBfZW50cnkKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNmhhc2hlZF9hdHRyaWJ1dGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMmhhc2hlZF9lbnRyeQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2b2JqY19tYXBfcHJpdmF0ZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI2Z2ltcGxlX3R5cGVfbGVhZGVyX2VudHJ5X3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yM3ZlY19tZXRob2RfZW50cnlfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTR0eXBlX2Fzc2VydGlvbgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE4dHJlZXRyZWVoYXNoX2VudHJ5CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfNUNQb29sCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfM0pDRgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE3bW9kdWxlX2h0YWJfZW50cnkKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xM2JpbmRpbmdfbGV2ZWwKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yN3ZlY19wZW5kaW5nX25vZXhjZXB0X3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIxcGVuZGluZ19hYnN0cmFjdF90eXBlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTl2ZWNfdHJlZV9pbnRfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWNwX3BhcnNlcgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzM4dmVjX2NwX3VucGFyc2VkX2Z1bmN0aW9uc19lbnRyeV92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xN2NwX3BhcnNlcl9jb250ZXh0CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMzF2ZWNfY3BfZGVmYXVsdF9hcmdfZW50cnlfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOGNwX2xleGVyCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTl2ZWNfY3BfdG9rZW5fdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTB0cmVlX2NoZWNrCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTRjb25zdGV4cHJfY2FsbAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2Y29uc3RleHByX2Z1bmRlZgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI2dmVjX2RlZmVycmVkX2FjY2Vzc192YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8zMnZlY19kZWZlcnJlZF9hY2Nlc3NfY2hlY2tfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTBzcGVjX2VudHJ5CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTZwZW5kaW5nX3RlbXBsYXRlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjV2ZWNfaW5jb21wbGV0ZV92YXJfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjFuYW1lZF9sYWJlbF91c2VfZW50cnkKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yMnZlY190cmVlX3BhaXJfc192YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xN25hbWVkX2xhYmVsX2VudHJ5CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjh2ZWNfY3h4X3NhdmVkX2JpbmRpbmdfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMzZ2ZWNfcXVhbGlmaWVkX3R5cGVkZWZfdXNhZ2VfdF92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNGNwX3Rva2VuX2NhY2hlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTFzYXZlZF9zY29wZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2Y3h4X2ludF90cmVlX21hcAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI3dmVjX2NwX2xhYmVsX2JpbmRpbmdfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjd2ZWNfY3BfY2xhc3NfYmluZGluZ192YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNmNwX2JpbmRpbmdfbGV2ZWwKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMWN4eF9iaW5kaW5nCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTViaW5kaW5nX2VudHJ5X3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNWJpbmRpbmdfdGFibGVfcworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExdGluc3RfbGV2ZWwKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOHZlY190aW5mb19zX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzhjX3BhcnNlcgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlvcHRfc3RhY2sKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8zMXZlY19wZW5kaW5nX3JlZGVmaW5pdGlvbl92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yM3ZlY19wZW5kaW5nX3dlYWtfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTFhbGlnbl9zdGFjaworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIydmVjX3RyZWVfZ2NfdmVjX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIzdmVjX2NvbnN0X2NoYXJfcF92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOHNvcnRlZF9maWVsZHNfdHlwZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1Y19pbmxpbmVfc3RhdGljCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjh2ZWNfY19nb3RvX2JpbmRpbmdzX3BfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTVjX2dvdG9fYmluZGluZ3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF83Y19zY29wZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzljX2JpbmRpbmcKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMmNfbGFiZWxfdmFycworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEzcGFkX3R5cGVfaGFzaAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE4Z25hdF9iaW5kaW5nX2xldmVsCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjB2ZWNfbG9vcF9pbmZvX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExbG9vcF9pbmZvX2QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yN3ZlY19yYW5nZV9jaGVja19pbmZvX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE4cmFuZ2VfY2hlY2tfaW5mb19kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWVsYWJfaW5mbworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEwc3RtdF9ncm91cAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIwdmVjX3Bhcm1fYXR0cl92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMXBhcm1fYXR0cl9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjd2ZWNfaW5saW5lX3N1bW1hcnlfdF92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yNnZlY19zaXplX3RpbWVfZW50cnlfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjB2ZWNfY29uZGl0aW9uX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE3bHRvX2luX2RlY2xfc3RhdGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yNnZlY19pcGFfZWRnZV9hcmdzX3RfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMzh2ZWNfaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZV9wX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI2dmVjX2lwYV9qdW1wX2Z1bmNfdF92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yOHZlY19pcGFfYWdnX2pmX2l0ZW1fdF92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yMHNzYV9vcGVyYW5kX21lbW9yeV9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTNzY2V2X2luZm9fc3RyCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjh2ZWNfbWVtX2FkZHJfdGVtcGxhdGVfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTd2ZWNfZ2ltcGxlX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1dG1fcmVzdGFydF9ub2RlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOXR5cGVfaGFzaAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2c3RyaW5nX3Bvb2xfZGF0YQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIzdGVtcF9zbG90X2FkZHJlc3NfZW50cnkKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNXRocm93X3N0bXRfbm9kZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI1dmVjX2VoX2xhbmRpbmdfcGFkX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIwdmVjX2VoX3JlZ2lvbl92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMGVoX2NhdGNoX2QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNmVoX2xhbmRpbmdfcGFkX2QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMWVoX3JlZ2lvbl9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjR2ZWNfZGllX2FyZ19lbnRyeV92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yNHZlY19tYWNpbmZvX2VudHJ5X3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI0dmVjX3B1Ym5hbWVfZW50cnlfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMzF2ZWNfZHdfbGluZV9pbmZvX3RhYmxlX3BfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjJjYWNoZWRfZHdfbG9jX2xpc3RfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTdjYWxsX2FyZ19sb2Nfbm9kZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2dmFyX2xvY19saXN0X2RlZgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEydmFyX2xvY19ub2RlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTZsaW1ib19kaWVfc3RydWN0CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjN2ZWNfZHdfYXR0cl9ub2RlX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI1ZHdfbGluZV9pbmZvX3RhYmxlX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI5dmVjX2R3X2xpbmVfaW5mb19lbnRyeV92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOGNvbWRhdF90eXBlX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI1ZHdfcmFuZ2VzX2J5X2xhYmVsX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2ZHdfcmFuZ2VzX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI5dmVjX2RlZmVycmVkX2xvY2F0aW9uc192YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yMXZlY19kd19mZGVfcmVmX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI0cmVnX3NhdmVkX2luX2RhdGFfc3RydWN0CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTdkd19jZmlfcm93X3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1ZHdhcmZfZmlsZV9kYXRhCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjBpbmRpcmVjdF9zdHJpbmdfbm9kZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIzYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yMXZlY19kd19jZmlfcmVmX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE4ZHdfbG9jX2xpc3Rfc3RydWN0CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTlkd19sb2NfZGVzY3Jfc3RydWN0CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTNkd19jZmlfc3RydWN0CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOHR5cGVpbmZvCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjVpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjZ2ZWNfYWxpYXNfc2V0X2VudHJ5X3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE3YWxpYXNfc2V0X2VudHJ5X2QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yNGNvbnN0YW50X2Rlc2NyaXB0b3JfdHJlZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzhhc21fbm9kZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI1Y2dyYXBoX2luZGlyZWN0X2NhbGxfaW5mbworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI4Y2dyYXBoX2Z1bmN0aW9uX3ZlcnNpb25faW5mbworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExY2dyYXBoX2VkZ2UKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yOHZlY19pcGFfcmVwbGFjZV9tYXBfcF92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNWlwYV9yZXBsYWNlX21hcAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE4bHRvX2ZpbGVfZGVjbF9kYXRhCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjB2ZWNfaXBhX3JlZl90X3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1c3ltdGFiX25vZGVfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTFjZ3JhcGhfbm9kZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIydmVjX2Jhc2ljX2Jsb2NrX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1dmVjX2VkZ2VfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTFydGxfYmJfaW5mbworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE3dmVjX2xvb3BfcF92YV9nY18KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF80bG9vcAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlsb29wX2V4aXQKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xM25iX2l0ZXJfYm91bmQKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yNHR5cGVzX3VzZWRfYnlfdmFyc19lbnRyeQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE3bGFuZ3VhZ2VfZnVuY3Rpb24KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF81bG9vcHMKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOGNvbnRyb2xfZmxvd19ncmFwaAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzllaF9zdGF0dXMKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMXN0YWNrX3VzYWdlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjJ2ZWNfdGVtcF9zbG90X3BfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjBpbml0aWFsX3ZhbHVlX3N0cnVjdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExZnJhbWVfc3BhY2UKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xN3J0eF9jb25zdGFudF9wb29sCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTNkd19mZGVfc3RydWN0CisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOXRlbXBfc2xvdAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlnaW1wbGVfZGYKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8yN3ZlY19jYWxsX3NpdGVfcmVjb3JkX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2dmVjX3VjaGFyX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE4Y2FsbF9zaXRlX3JlY29yZF9kCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTRzZXF1ZW5jZV9zdGFjaworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEzbGliZnVuY19lbnRyeQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEydHJlZV92ZWNfbWFwCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTd0cmVlX3ByaW9yaXR5X21hcAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEydHJlZV9pbnRfbWFwCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTN0cmVlX2RlY2xfbWFwCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOHRyZWVfbWFwCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTRsYW5nX3RyZWVfbm9kZQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzI0dHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWxhbmdfZGVjbAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlsYW5nX3R5cGUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMGRpZV9zdHJ1Y3QKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNXZlY190cmVlX3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEycHRyX2luZm9fZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjZ2ZWNfY29uc3RydWN0b3JfZWx0X3ZhX2djXworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzIxdmVjX2FsaWFzX3BhaXJfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOGZ1bmN0aW9uCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMjNjb25zdGFudF9kZXNjcmlwdG9yX3J0eAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzExZml4ZWRfdmFsdWUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xMHJlYWxfdmFsdWUKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xNHZlY19ydHhfdmFfZ2NfCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfMTJvYmplY3RfYmxvY2sKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85cmVnX2F0dHJzCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOW1lbV9hdHRycworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzEzY292ZXJhZ2VfZGF0YQorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE0Yml0bWFwX29ic3RhY2sKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOGJpdG1hcF9lbGVtZW50X2RlZgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE2bWFjaGluZV9mdW5jdGlvbgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1YmFzaWNfYmxvY2tfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOGVkZ2VfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfN3NlY3Rpb24KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF8xOGdpbXBsZV9zdGF0ZW1lbnRfZAorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzlydHZlY19kZWYKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF83cnR4X2RlZgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzE1Yml0bWFwX2hlYWRfZGVmCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfNmFuc3dlcgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wXzljcHBfbWFjcm8KKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF85Y3BwX3Rva2VuCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfOWxpbmVfbWFwcworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKKyNkZWZpbmUgZ3RfcGNoX3BfOXRyZWVfbm9kZSBndF9wY2hfcF8xNGxhbmdfdHJlZV9ub2RlCitleHRlcm4gdm9pZCBndF9wY2hfcF9JSTE3c3BsYXlfdHJlZV9ub2RlX3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9TUDl0cmVlX25vZGUxN3NwbGF5X3RyZWVfbm9kZV9zCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDl0cmVlX25vZGVQOXRyZWVfbm9kZTE3c3BsYXlfdHJlZV9ub2RlX3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTdzdHJpbmdfZGVzY3JpcHRvcjRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE0dHlwZV9hc3NlcnRpb240aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxOHRyZWV0cmVlaGFzaF9lbnRyeTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE3bW9kdWxlX2h0YWJfZW50cnk0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AyMXBlbmRpbmdfYWJzdHJhY3RfdHlwZTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE0Y29uc3RleHByX2NhbGw0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxNmNvbnN0ZXhwcl9mdW5kZWY0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxMHNwZWNfZW50cnk0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxNmN4eF9pbnRfdHJlZV9tYXA0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxN25hbWVkX2xhYmVsX2VudHJ5NGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTNwYWRfdHlwZV9oYXNoNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTdsdG9faW5fZGVjbF9zdGF0ZTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDl0cmVlX25vZGVQOXRyZWVfbm9kZTEyc3BsYXlfdHJlZV9zCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDEzc2Nldl9pbmZvX3N0cjRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDE1dG1fcmVzdGFydF9ub2RlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTJ0cmVlX2ludF9tYXA0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1A4dHJlZV9tYXA0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AyM2NvbnN0YW50X2Rlc2NyaXB0b3JfcnR4NGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMjRjb25zdGFudF9kZXNjcmlwdG9yX3RyZWU0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxMm9iamVjdF9ibG9jazRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDdzZWN0aW9uNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTd0cmVlX3ByaW9yaXR5X21hcDRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDEydHJlZV92ZWNfbWFwNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTN0cmVlX2RlY2xfbWFwNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QOXR5cGVfaGFzaDRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDIzdGVtcF9zbG90X2FkZHJlc3NfZW50cnk0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxNXRocm93X3N0bXRfbm9kZTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDlyZWdfYXR0cnM0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1A5bWVtX2F0dHJzNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QN3J0eF9kZWY0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AyM2FkZHJfdGFibGVfZW50cnlfc3RydWN0NGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMjJjYWNoZWRfZHdfbG9jX2xpc3RfZGVmNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTZ2YXJfbG9jX2xpc3RfZGVmNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTBkaWVfc3RydWN0NGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTVkd2FyZl9maWxlX2RhdGE0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AyMGluZGlyZWN0X3N0cmluZ19ub2RlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9TUDl0cmVlX25vZGUxMnNwbGF5X3RyZWVfcworICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX0lJMTJzcGxheV90cmVlX3MKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QMTVzeW10YWJfbm9kZV9kZWY0aHRhYgorICAgICh2b2lkICosIHZvaWQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGd0X3BjaF9wX1AxMWNncmFwaF9lZGdlNGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QOWxvb3BfZXhpdDRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDI0dHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5NGh0YWIKKyAgICAodm9pZCAqLCB2b2lkICosIGd0X3BvaW50ZXJfb3BlcmF0b3IsIHZvaWQgKik7CitleHRlcm4gdm9pZCBndF9wY2hfcF9QOXRyZWVfbm9kZTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZ3RfcGNoX3BfUDEzbGliZnVuY19lbnRyeTRodGFiCisgICAgKHZvaWQgKiwgdm9pZCAqLCBndF9wb2ludGVyX29wZXJhdG9yLCB2b2lkICopOworCisvKiBTcGxheSB0cmVlIGNhbGxiYWNrIGFsbG9jYXRvcnMuICAqLworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9zY2FsYXJfc2NhbGFyX3NwbGF5X3RyZWVfbm9kZV9zIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX3N0cl90cmVlX25vZGVfc3BsYXlfdHJlZV9ub2RlX3MgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdHJlZV9ub2RlX3RyZWVfbm9kZV9zcGxheV90cmVlX25vZGVfcyAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9zdHJpbmdfZGVzY3JpcHRvcl9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX3R5cGVfYXNzZXJ0aW9uX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdHJlZXRyZWVoYXNoX2VudHJ5X2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfbW9kdWxlX2h0YWJfZW50cnlfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9wZW5kaW5nX2Fic3RyYWN0X3R5cGVfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9jb25zdGV4cHJfY2FsbF9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX2NvbnN0ZXhwcl9mdW5kZWZfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9zcGVjX2VudHJ5X2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfY3h4X2ludF90cmVlX21hcF9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX25hbWVkX2xhYmVsX2VudHJ5X2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfcGFkX3R5cGVfaGFzaF9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX2x0b19pbl9kZWNsX3N0YXRlX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdHJlZV9ub2RlX3RyZWVfbm9kZV9zcGxheV90cmVlX3MgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfc2Nldl9pbmZvX3N0cl9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX3RtX3Jlc3RhcnRfbm9kZV9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX3RyZWVfaW50X21hcF9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX3RyZWVfbWFwX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfY29uc3RhbnRfZGVzY3JpcHRvcl9ydHhfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9jb25zdGFudF9kZXNjcmlwdG9yX3RyZWVfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9vYmplY3RfYmxvY2tfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9zZWN0aW9uX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdHJlZV9wcmlvcml0eV9tYXBfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV90cmVlX3ZlY19tYXBfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV90cmVlX2RlY2xfbWFwX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdHlwZV9oYXNoX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdGVtcF9zbG90X2FkZHJlc3NfZW50cnlfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV90aHJvd19zdG10X25vZGVfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9yZWdfYXR0cnNfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9tZW1fYXR0cnNfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9ydHhfZGVmX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfYWRkcl90YWJsZV9lbnRyeV9zdHJ1Y3RfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9jYWNoZWRfZHdfbG9jX2xpc3RfZGVmX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdmFyX2xvY19saXN0X2RlZl9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX2RpZV9zdHJ1Y3RfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9kd2FyZl9maWxlX2RhdGFfaHRhYiAoaW50LCB2b2lkICopOworZXh0ZXJuIHZvaWQgKiBnZ2NfYWxsb2Nfc3BsYXlfdHJlZV9pbmRpcmVjdF9zdHJpbmdfbm9kZV9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX3N0cl90cmVlX25vZGVfc3BsYXlfdHJlZV9zIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX3NjYWxhcl9zY2FsYXJfc3BsYXlfdHJlZV9zIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX3N5bXRhYl9ub2RlX2RlZl9odGFiIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCAqIGdnY19hbGxvY19zcGxheV90cmVlX2NncmFwaF9lZGdlX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfbG9vcF9leGl0X2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdHlwZXNfdXNlZF9ieV92YXJzX2VudHJ5X2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfdHJlZV9ub2RlX2h0YWIgKGludCwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICogZ2djX2FsbG9jX3NwbGF5X3RyZWVfbGliZnVuY19lbnRyeV9odGFiIChpbnQsIHZvaWQgKik7CmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaGFyZC1yZWctc2V0LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaGFyZC1yZWctc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhMDljNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9oYXJkLXJlZy1zZXQuaApAQCAtMCwwICsxLDcyNCBAQAorLyogU2V0cyAoYml0IHZlY3RvcnMpIG9mIGhhcmQgcmVnaXN0ZXJzLCBhbmQgb3BlcmF0aW9ucyBvbiB0aGVtLgorICAgQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQworCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0hBUkRfUkVHX1NFVF9ICisjZGVmaW5lIEdDQ19IQVJEX1JFR19TRVRfSAorCisvKiBEZWZpbmUgdGhlIHR5cGUgb2YgYSBzZXQgb2YgaGFyZCByZWdpc3RlcnMuICAqLworCisvKiBIQVJEX1JFR19FTFRfVFlQRSBpcyBhIHR5cGVkZWYgb2YgdGhlIHVuc2lnbmVkIGludGVncmFsIHR5cGUgd2hpY2gKKyAgIHdpbGwgYmUgdXNlZCBmb3IgaGFyZCByZWcgc2V0cywgZWl0aGVyIGFsb25lIG9yIGluIGFuIGFycmF5LgorCisgICBJZiBIQVJEX1JFR19TRVQgaXMgYSBtYWNybywgaXRzIGRlZmluaXRpb24gaXMgSEFSRF9SRUdfRUxUX1RZUEUsCisgICBhbmQgaXQgaGFzIGVub3VnaCBiaXRzIHRvIHJlcHJlc2VudCBhbGwgdGhlIHRhcmdldCBtYWNoaW5lJ3MgaGFyZAorICAgcmVnaXN0ZXJzLiAgT3RoZXJ3aXNlLCBpdCBpcyBhIHR5cGVkZWYgZm9yIGEgc3VpdGFibHkgc2l6ZWQgYXJyYXkKKyAgIG9mIEhBUkRfUkVHX0VMVF9UWVBFcy4gIEhBUkRfUkVHX1NFVF9MT05HUyBpcyBkZWZpbmVkIGFzIGhvdyBtYW55LgorCisgICBOb3RlIHRoYXQgbG90cyBvZiBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgZmlyc3QgcGFydCBvZiBhIHJlZ3NldCBpcworICAgdGhlIHNhbWUgZm9ybWF0IGFzIGEgSEFSRF9SRUdfU0VULiAgVG8gaGVscCBtYWtlIHN1cmUgdGhpcyBpcyB0cnVlLAorICAgd2Ugb25seSB0cnkgdGhlIHdpZGVzdCBmYXN0IGludGVnZXIgbW9kZSAoSE9TVF9XSURFU1RfRkFTVF9JTlQpCisgICBpbnN0ZWFkIG9mIGFsbCB0aGUgc21hbGxlciB0eXBlcy4gIFRoaXMgYXBwcm9hY2ggbG9zZXMgb25seSBpZgorICAgdGhlcmUgYXJlIHZlcnkgZmV3IHJlZ2lzdGVycyBhbmQgdGhlbiBvbmx5IGluIHRoZSBmZXcgY2FzZXMgd2hlcmUKKyAgIHdlIGhhdmUgYW4gYXJyYXkgb2YgSEFSRF9SRUdfU0VUcywgc28gaXQgbmVlZG4ndCBiZSBhcyBjb21wbGV4IGFzCisgICBpdCB1c2VkIHRvIGJlLiAgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBIT1NUX1dJREVTVF9GQVNUX0lOVCBIQVJEX1JFR19FTFRfVFlQRTsKKworI2lmIEZJUlNUX1BTRVVET19SRUdJU1RFUiA8PSBIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVAorCisjZGVmaW5lIEhBUkRfUkVHX1NFVCBIQVJEX1JFR19FTFRfVFlQRQorCisjZWxzZQorCisjZGVmaW5lIEhBUkRfUkVHX1NFVF9MT05HUyBcCisgKChGSVJTVF9QU0VVRE9fUkVHSVNURVIgKyBIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCAtIDEpCVwKKyAgLyBIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCkKK3R5cGVkZWYgSEFSRF9SRUdfRUxUX1RZUEUgSEFSRF9SRUdfU0VUW0hBUkRfUkVHX1NFVF9MT05HU107CisKKyNlbmRpZgorCisvKiBIQVJEX1JFR19TRVQgd3JhcHBlZCBpbnRvIGEgc3RydWN0dXJlLCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvCisgICB1c2UgSEFSRF9SRUdfU0VUIGV2ZW4gaW4gQVBJcyB0aGF0IHNob3VsZCBub3QgaW5jbHVkZQorICAgaGFyZC1yZWctc2V0LmguICAqLworc3RydWN0IGhhcmRfcmVnX3NldF9jb250YWluZXIKK3sKKyAgSEFSRF9SRUdfU0VUIHNldDsKK307CisKKy8qIEhBUkRfQ09OU1QgaXMgdXNlZCB0byBjYXN0IGEgY29uc3RhbnQgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUKKyAgIGZvciB1c2Ugd2l0aCBhIEhBUkRfUkVHX1NFVC4gICovCisKKyNkZWZpbmUgSEFSRF9DT05TVChYKSAoKEhBUkRfUkVHX0VMVF9UWVBFKSAoWCkpCisKKy8qIERlZmluZSBtYWNyb3MgU0VUX0hBUkRfUkVHX0JJVCwgQ0xFQVJfSEFSRF9SRUdfQklUIGFuZCBURVNUX0hBUkRfUkVHX0JJVAorICAgdG8gc2V0LCBjbGVhciBvciB0ZXN0IG9uZSBiaXQgaW4gYSBoYXJkIHJlZyBzZXQgb2YgdHlwZSBIQVJEX1JFR19TRVQuCisgICBBbGwgdGhyZWUgdGFrZSB0d28gYXJndW1lbnRzOiB0aGUgc2V0IGFuZCB0aGUgcmVnaXN0ZXIgbnVtYmVyLgorCisgICBJbiB0aGUgY2FzZSB3aGVyZSBzZXRzIGFyZSBhcnJheXMgb2YgbG9uZ3MsIHRoZSBmaXJzdCBhcmd1bWVudAorICAgaXMgYWN0dWFsbHkgYSBwb2ludGVyIHRvIGEgbG9uZy4KKworICAgRGVmaW5lIHR3byBtYWNyb3MgZm9yIGluaXRpYWxpemluZyBhIHNldDoKKyAgIENMRUFSX0hBUkRfUkVHX1NFVCBhbmQgU0VUX0hBUkRfUkVHX1NFVC4KKyAgIFRoZXNlIHRha2UganVzdCBvbmUgYXJndW1lbnQuCisKKyAgIEFsc28gZGVmaW5lIG1hY3JvcyBmb3IgY29weWluZyBoYXJkIHJlZyBzZXRzOgorICAgQ09QWV9IQVJEX1JFR19TRVQgYW5kIENPTVBMX0hBUkRfUkVHX1NFVC4KKyAgIFRoZXNlIHRha2UgdHdvIGFyZ3VtZW50cyBUTyBhbmQgRlJPTTsgdGhleSByZWFkIGZyb20gRlJPTQorICAgYW5kIHN0b3JlIGludG8gVE8uICBDT01QTF9IQVJEX1JFR19TRVQgY29tcGxlbWVudHMgZWFjaCBiaXQuCisKKyAgIEFsc28gZGVmaW5lIG1hY3JvcyBmb3IgY29tYmluaW5nIGhhcmQgcmVnIHNldHM6CisgICBJT1JfSEFSRF9SRUdfU0VUIGFuZCBBTkRfSEFSRF9SRUdfU0VULgorICAgVGhlc2UgdGFrZSB0d28gYXJndW1lbnRzIFRPIGFuZCBGUk9NOyB0aGV5IHJlYWQgZnJvbSBGUk9NCisgICBhbmQgY29tYmluZSBiaXR3aXNlIGludG8gVE8uICBEZWZpbmUgYWxzbyB0d28gdmFyaWFudHMKKyAgIElPUl9DT01QTF9IQVJEX1JFR19TRVQgYW5kIEFORF9DT01QTF9IQVJEX1JFR19TRVQKKyAgIHdoaWNoIHVzZSB0aGUgY29tcGxlbWVudCBvZiB0aGUgc2V0IEZST00uCisKKyAgIEFsc28gZGVmaW5lOgorCisgICBoYXJkX3JlZ19zZXRfc3Vic2V0X3AgKFgsIFkpLCB3aGljaCByZXR1cm5zIHRydWUgaWYgWCBpcyBhIHN1YnNldCBvZiBZLgorICAgaGFyZF9yZWdfc2V0X2VxdWFsX3AgKFgsIFkpLCB3aGljaCByZXR1cm5zIHRydWUgaWYgWCBhbmQgWSBhcmUgZXF1YWwuCisgICBoYXJkX3JlZ19zZXRfaW50ZXJzZWN0X3AgKFgsIFkpLCB3aGljaCByZXR1cm5zIHRydWUgaWYgWCBhbmQgWSBpbnRlcnNlY3QuCisgICBoYXJkX3JlZ19zZXRfZW1wdHlfcCAoWCksIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiBYIGlzIGVtcHR5LiAgKi8KKworI2RlZmluZSBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVCAoKHVuc2lnbmVkKSBIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCkKKworI2lmZGVmIEhBUkRfUkVHX1NFVAorCisjZGVmaW5lIFNFVF9IQVJEX1JFR19CSVQoU0VULCBCSVQpICBcCisgKChTRVQpIHw9IEhBUkRfQ09OU1QgKDEpIDw8IChCSVQpKQorI2RlZmluZSBDTEVBUl9IQVJEX1JFR19CSVQoU0VULCBCSVQpICBcCisgKChTRVQpICY9IH4oSEFSRF9DT05TVCAoMSkgPDwgKEJJVCkpKQorI2RlZmluZSBURVNUX0hBUkRfUkVHX0JJVChTRVQsIEJJVCkgIFwKKyAoISEoKFNFVCkgJiAoSEFSRF9DT05TVCAoMSkgPDwgKEJJVCkpKSkKKworI2RlZmluZSBDTEVBUl9IQVJEX1JFR19TRVQoVE8pICgoVE8pID0gSEFSRF9DT05TVCAoMCkpCisjZGVmaW5lIFNFVF9IQVJEX1JFR19TRVQoVE8pICgoVE8pID0gfiBIQVJEX0NPTlNUICgwKSkKKworI2RlZmluZSBDT1BZX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgKChUTykgPSAoRlJPTSkpCisjZGVmaW5lIENPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgKChUTykgPSB+KEZST00pKQorCisjZGVmaW5lIElPUl9IQVJEX1JFR19TRVQoVE8sIEZST00pICgoVE8pIHw9IChGUk9NKSkKKyNkZWZpbmUgSU9SX0NPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgKChUTykgfD0gfiAoRlJPTSkpCisjZGVmaW5lIEFORF9IQVJEX1JFR19TRVQoVE8sIEZST00pICgoVE8pICY9IChGUk9NKSkKKyNkZWZpbmUgQU5EX0NPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgKChUTykgJj0gfiAoRlJPTSkpCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X3N1YnNldF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiAoeCAmIH55KSA9PSBIQVJEX0NPTlNUICgwKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfZXF1YWxfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgsIGNvbnN0IEhBUkRfUkVHX1NFVCB5KQoreworICByZXR1cm4geCA9PSB5OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9pbnRlcnNlY3RfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgsIGNvbnN0IEhBUkRfUkVHX1NFVCB5KQoreworICByZXR1cm4gKHggJiB5KSAhPSBIQVJEX0NPTlNUICgwKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfZW1wdHlfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgpCit7CisgIHJldHVybiB4ID09IEhBUkRfQ09OU1QgKDApOworfQorCisjZWxzZQorCisjZGVmaW5lIFNFVF9IQVJEX1JFR19CSVQoU0VULCBCSVQpCQlcCisgICgoU0VUKVsoQklUKSAvIFVIT1NUX0JJVFNfUEVSX1dJREVfSU5UXQlcCisgICB8PSBIQVJEX0NPTlNUICgxKSA8PCAoKEJJVCkgJSBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVCkpCisKKyNkZWZpbmUgQ0xFQVJfSEFSRF9SRUdfQklUKFNFVCwgQklUKQkJXAorICAoKFNFVClbKEJJVCkgLyBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVF0JXAorICAgJj0gfihIQVJEX0NPTlNUICgxKSA8PCAoKEJJVCkgJSBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVCkpKQorCisjZGVmaW5lIFRFU1RfSEFSRF9SRUdfQklUKFNFVCwgQklUKQkJXAorICAoISEoKFNFVClbKEJJVCkgLyBVSE9TVF9CSVRTX1BFUl9XSURFX0lOVF0JXAorICAgICAgJiAoSEFSRF9DT05TVCAoMSkgPDwgKChCSVQpICUgVUhPU1RfQklUU19QRVJfV0lERV9JTlQpKSkpCisKKyNpZiBGSVJTVF9QU0VVRE9fUkVHSVNURVIgPD0gMipIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVAorI2RlZmluZSBDTEVBUl9IQVJEX1JFR19TRVQoVE8pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyk7CQkJXAorICAgICBzY2FuX3RwX1swXSA9IDA7CQkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IDA7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0VUX0hBUkRfUkVHX1NFVChUTykgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKTsJCQlcCisgICAgIHNjYW5fdHBfWzBdID0gLTE7CQkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IC0xOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENPUFlfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7CVwKKyAgICAgc2Nhbl90cF9bMF0gPSBzY2FuX2ZwX1swXTsJCQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSBzY2FuX2ZwX1sxXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBDT01QTF9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgc2Nhbl90cF9bMF0gPSB+IHNjYW5fZnBfWzBdOwkJCQlcCisgICAgIHNjYW5fdHBfWzFdID0gfiBzY2FuX2ZwX1sxXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTkRfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdICY9IHNjYW5fZnBfWzBdOwkJCQlcCisgICAgIHNjYW5fdHBfWzFdICY9IHNjYW5fZnBfWzFdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFORF9DT01QTF9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgc2Nhbl90cF9bMF0gJj0gfiBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSAmPSB+IHNjYW5fZnBfWzFdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIElPUl9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgc2Nhbl90cF9bMF0gfD0gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gfD0gc2Nhbl9mcF9bMV07IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU9SX0NPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSB8PSB+IHNjYW5fZnBfWzBdOwkJCQlcCisgICAgIHNjYW5fdHBfWzFdIHw9IH4gc2Nhbl9mcF9bMV07IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X3N1YnNldF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiAoeFswXSAmIH55WzBdKSA9PSAwICYmICh4WzFdICYgfnlbMV0pID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X2VxdWFsX3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgcmV0dXJuIHhbMF0gPT0geVswXSAmJiB4WzFdID09IHlbMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X2ludGVyc2VjdF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiAoeFswXSAmIHlbMF0pICE9IDAgfHwgKHhbMV0gJiB5WzFdKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lbXB0eV9wIChjb25zdCBIQVJEX1JFR19TRVQgeCkKK3sKKyAgcmV0dXJuIHhbMF0gPT0gMCAmJiB4WzFdID09IDA7Cit9CisKKyNlbHNlCisjaWYgRklSU1RfUFNFVURPX1JFR0lTVEVSIDw9IDMqSE9TVF9CSVRTX1BFUl9XSURFU1RfRkFTVF9JTlQKKyNkZWZpbmUgQ0xFQVJfSEFSRF9SRUdfU0VUKFRPKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pOwkJCVwKKyAgICAgc2Nhbl90cF9bMF0gPSAwOwkJCQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSAwOwkJCQkJCVwKKyAgICAgc2Nhbl90cF9bMl0gPSAwOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFVF9IQVJEX1JFR19TRVQoVE8pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyk7CQkJXAorICAgICBzY2FuX3RwX1swXSA9IC0xOwkJCQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSAtMTsJCQkJCQlcCisgICAgIHNjYW5fdHBfWzJdID0gLTE7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsJXAorICAgICBzY2FuX3RwX1swXSA9IHNjYW5fZnBfWzBdOwkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IHNjYW5fZnBfWzFdOwkJCQkJXAorICAgICBzY2FuX3RwX1syXSA9IHNjYW5fZnBfWzJdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSA9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSB+IHNjYW5fZnBfWzFdOwkJCQlcCisgICAgIHNjYW5fdHBfWzJdID0gfiBzY2FuX2ZwX1syXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTkRfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdICY9IHNjYW5fZnBfWzBdOwkJCQlcCisgICAgIHNjYW5fdHBfWzFdICY9IHNjYW5fZnBfWzFdOwkJCQlcCisgICAgIHNjYW5fdHBfWzJdICY9IHNjYW5fZnBfWzJdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFORF9DT01QTF9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgc2Nhbl90cF9bMF0gJj0gfiBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSAmPSB+IHNjYW5fZnBfWzFdOwkJCQlcCisgICAgIHNjYW5fdHBfWzJdICY9IH4gc2Nhbl9mcF9bMl07IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU9SX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSB8PSBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSB8PSBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSB8PSBzY2FuX2ZwX1syXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJT1JfQ09NUExfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdIHw9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gfD0gfiBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSB8PSB+IHNjYW5fZnBfWzJdOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9zdWJzZXRfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgsIGNvbnN0IEhBUkRfUkVHX1NFVCB5KQoreworICByZXR1cm4gKCh4WzBdICYgfnlbMF0pID09IDAKKwkgICYmICh4WzFdICYgfnlbMV0pID09IDAKKwkgICYmICh4WzJdICYgfnlbMl0pID09IDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lcXVhbF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiB4WzBdID09IHlbMF0gJiYgeFsxXSA9PSB5WzFdICYmIHhbMl0gPT0geVsyXTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfaW50ZXJzZWN0X3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgcmV0dXJuICgoeFswXSAmIHlbMF0pICE9IDAKKwkgIHx8ICh4WzFdICYgeVsxXSkgIT0gMAorCSAgfHwgKHhbMl0gJiB5WzJdKSAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfZW1wdHlfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgpCit7CisgIHJldHVybiB4WzBdID09IDAgJiYgeFsxXSA9PSAwICYmIHhbMl0gPT0gMDsKK30KKworI2Vsc2UKKyNpZiBGSVJTVF9QU0VVRE9fUkVHSVNURVIgPD0gNCpIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVAorI2RlZmluZSBDTEVBUl9IQVJEX1JFR19TRVQoVE8pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyk7CQkJXAorICAgICBzY2FuX3RwX1swXSA9IDA7CQkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IDA7CQkJCQkJXAorICAgICBzY2FuX3RwX1syXSA9IDA7CQkJCQkJXAorICAgICBzY2FuX3RwX1szXSA9IDA7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0VUX0hBUkRfUkVHX1NFVChUTykgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKTsJCQlcCisgICAgIHNjYW5fdHBfWzBdID0gLTE7CQkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IC0xOwkJCQkJCVwKKyAgICAgc2Nhbl90cF9bMl0gPSAtMTsJCQkJCQlcCisgICAgIHNjYW5fdHBfWzNdID0gLTE7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsJXAorICAgICBzY2FuX3RwX1swXSA9IHNjYW5fZnBfWzBdOwkJCQkJXAorICAgICBzY2FuX3RwX1sxXSA9IHNjYW5fZnBfWzFdOwkJCQkJXAorICAgICBzY2FuX3RwX1syXSA9IHNjYW5fZnBfWzJdOwkJCQkJXAorICAgICBzY2FuX3RwX1szXSA9IHNjYW5fZnBfWzNdOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSA9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gPSB+IHNjYW5fZnBfWzFdOwkJCQlcCisgICAgIHNjYW5fdHBfWzJdID0gfiBzY2FuX2ZwX1syXTsJCQkJXAorICAgICBzY2FuX3RwX1szXSA9IH4gc2Nhbl9mcF9bM107IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQU5EX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSAmPSBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSAmPSBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSAmPSBzY2FuX2ZwX1syXTsJCQkJXAorICAgICBzY2FuX3RwX1szXSAmPSBzY2FuX2ZwX1szXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTkRfQ09NUExfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdICY9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gJj0gfiBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSAmPSB+IHNjYW5fZnBfWzJdOwkJCQlcCisgICAgIHNjYW5fdHBfWzNdICY9IH4gc2Nhbl9mcF9bM107IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU9SX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBzY2FuX3RwX1swXSB8PSBzY2FuX2ZwX1swXTsJCQkJXAorICAgICBzY2FuX3RwX1sxXSB8PSBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSB8PSBzY2FuX2ZwX1syXTsJCQkJXAorICAgICBzY2FuX3RwX1szXSB8PSBzY2FuX2ZwX1szXTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJT1JfQ09NUExfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIHNjYW5fdHBfWzBdIHw9IH4gc2Nhbl9mcF9bMF07CQkJCVwKKyAgICAgc2Nhbl90cF9bMV0gfD0gfiBzY2FuX2ZwX1sxXTsJCQkJXAorICAgICBzY2FuX3RwX1syXSB8PSB+IHNjYW5fZnBfWzJdOwkJCQlcCisgICAgIHNjYW5fdHBfWzNdIHw9IH4gc2Nhbl9mcF9bM107IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X3N1YnNldF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIHJldHVybiAoKHhbMF0gJiB+eVswXSkgPT0gMAorCSAgJiYgKHhbMV0gJiB+eVsxXSkgPT0gMAorCSAgJiYgKHhbMl0gJiB+eVsyXSkgPT0gMAorCSAgJiYgKHhbM10gJiB+eVszXSkgPT0gMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X2VxdWFsX3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgcmV0dXJuIHhbMF0gPT0geVswXSAmJiB4WzFdID09IHlbMV0gJiYgeFsyXSA9PSB5WzJdICYmIHhbM10gPT0geVszXTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfaW50ZXJzZWN0X3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgcmV0dXJuICgoeFswXSAmIHlbMF0pICE9IDAKKwkgIHx8ICh4WzFdICYgeVsxXSkgIT0gMAorCSAgfHwgKHhbMl0gJiB5WzJdKSAhPSAwCisJICB8fCAoeFszXSAmIHlbM10pICE9IDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lbXB0eV9wIChjb25zdCBIQVJEX1JFR19TRVQgeCkKK3sKKyAgcmV0dXJuIHhbMF0gPT0gMCAmJiB4WzFdID09IDAgJiYgeFsyXSA9PSAwICYmIHhbM10gPT0gMDsKK30KKworI2Vsc2UgLyogRklSU1RfUFNFVURPX1JFR0lTVEVSID4gNCpIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCAqLworCisjZGVmaW5lIENMRUFSX0hBUkRfUkVHX1NFVChUTykgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKTsJCQlcCisgICAgIGludCBpOwkJCQkJCQlcCisgICAgIGZvciAoaSA9IDA7IGkgPCBIQVJEX1JFR19TRVRfTE9OR1M7IGkrKykJCQlcCisgICAgICAgKnNjYW5fdHBfKysgPSAwOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFVF9IQVJEX1JFR19TRVQoVE8pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyk7CQkJXAorICAgICBpbnQgaTsJCQkJCQkJXAorICAgICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCQkJXAorICAgICAgICpzY2FuX3RwXysrID0gLTE7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQ09QWV9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgaW50IGk7CQkJCQkJCVwKKyAgICAgZm9yIChpID0gMDsgaSA8IEhBUkRfUkVHX1NFVF9MT05HUzsgaSsrKQkJCVwKKyAgICAgICAqc2Nhbl90cF8rKyA9ICpzY2FuX2ZwXysrOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBpbnQgaTsJCQkJCQkJXAorICAgICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCQkJXAorICAgICAgICpzY2FuX3RwXysrID0gfiAqc2Nhbl9mcF8rKzsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBTkRfSEFSRF9SRUdfU0VUKFRPLCBGUk9NKSAgXAorZG8geyBIQVJEX1JFR19FTFRfVFlQRSAqc2Nhbl90cF8gPSAoVE8pLCAqc2Nhbl9mcF8gPSAoRlJPTSk7IAlcCisgICAgIGludCBpOwkJCQkJCQlcCisgICAgIGZvciAoaSA9IDA7IGkgPCBIQVJEX1JFR19TRVRfTE9OR1M7IGkrKykJCQlcCisgICAgICAgKnNjYW5fdHBfKysgJj0gKnNjYW5fZnBfKys7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQU5EX0NPTVBMX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBpbnQgaTsJCQkJCQkJXAorICAgICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCQkJXAorICAgICAgICpzY2FuX3RwXysrICY9IH4gKnNjYW5fZnBfKys7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU9SX0hBUkRfUkVHX1NFVChUTywgRlJPTSkgIFwKK2RvIHsgSEFSRF9SRUdfRUxUX1RZUEUgKnNjYW5fdHBfID0gKFRPKSwgKnNjYW5fZnBfID0gKEZST00pOyAJXAorICAgICBpbnQgaTsJCQkJCQkJXAorICAgICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCQkJXAorICAgICAgICpzY2FuX3RwXysrIHw9ICpzY2FuX2ZwXysrOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIElPUl9DT01QTF9IQVJEX1JFR19TRVQoVE8sIEZST00pICBcCitkbyB7IEhBUkRfUkVHX0VMVF9UWVBFICpzY2FuX3RwXyA9IChUTyksICpzY2FuX2ZwXyA9IChGUk9NKTsgCVwKKyAgICAgaW50IGk7CQkJCQkJCVwKKyAgICAgZm9yIChpID0gMDsgaSA8IEhBUkRfUkVHX1NFVF9MT05HUzsgaSsrKQkJCVwKKyAgICAgICAqc2Nhbl90cF8rKyB8PSB+ICpzY2FuX2ZwXysrOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9zdWJzZXRfcCAoY29uc3QgSEFSRF9SRUdfU0VUIHgsIGNvbnN0IEhBUkRfUkVHX1NFVCB5KQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgSEFSRF9SRUdfU0VUX0xPTkdTOyBpKyspCisgICAgaWYgKCh4W2ldICYgfnlbaV0pICE9IDApCisgICAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lcXVhbF9wIChjb25zdCBIQVJEX1JFR19TRVQgeCwgY29uc3QgSEFSRF9SRUdfU0VUIHkpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBIQVJEX1JFR19TRVRfTE9OR1M7IGkrKykKKyAgICBpZiAoeFtpXSAhPSB5W2ldKQorICAgICAgcmV0dXJuIGZhbHNlOworICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sCitoYXJkX3JlZ19zZXRfaW50ZXJzZWN0X3AgKGNvbnN0IEhBUkRfUkVHX1NFVCB4LCBjb25zdCBIQVJEX1JFR19TRVQgeSkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEhBUkRfUkVHX1NFVF9MT05HUzsgaSsrKQorICAgIGlmICgoeFtpXSAmIHlbaV0pICE9IDApCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhcmRfcmVnX3NldF9lbXB0eV9wIChjb25zdCBIQVJEX1JFR19TRVQgeCkKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IEhBUkRfUkVHX1NFVF9MT05HUzsgaSsrKQorICAgIGlmICh4W2ldICE9IDApCisgICAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogSXRlcmF0b3IgZm9yIGhhcmQgcmVnaXN0ZXIgc2V0cy4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4gICovCisgIEhBUkRfUkVHX0VMVF9UWVBFICpwZWx0OworCisgIC8qIFRoZSBsZW5ndGggb2YgdGhlIHNldC4gICovCisgIHVuc2lnbmVkIHNob3J0IGxlbmd0aDsKKworICAvKiBXb3JkIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50LiAgKi8KKyAgdW5zaWduZWQgc2hvcnQgd29yZF9ubzsKKworICAvKiBDb250ZW50cyBvZiB0aGUgYWN0dWFsbHkgcHJvY2Vzc2VkIHdvcmQuICBXaGVuIGZpbmRpbmcgbmV4dCBiaXQKKyAgICAgaXQgaXMgc2hpZnRlZCByaWdodCwgc28gdGhhdCB0aGUgYWN0dWFsIGJpdCBpcyBhbHdheXMgdGhlIGxlYXN0CisgICAgIHNpZ25pZmljYW50IGJpdCBvZiBBQ1RVQUwuICAqLworICBIQVJEX1JFR19FTFRfVFlQRSBiaXRzOworfSBoYXJkX3JlZ19zZXRfaXRlcmF0b3I7CisKKyNkZWZpbmUgSEFSRF9SRUdfRUxUX0JJVFMgVUhPU1RfQklUU19QRVJfV0lERV9JTlQKKworLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpdGVyYXRvciBmdW5jdGlvbnMgaXMgZnVsbHkgYW5hbG9nb3VzIHRvCisgICB0aGUgYml0bWFwIGl0ZXJhdG9ycy4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhcmRfcmVnX3NldF9pdGVyX2luaXQgKGhhcmRfcmVnX3NldF9pdGVyYXRvciAqaXRlciwgSEFSRF9SRUdfU0VUIHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbiwgdW5zaWduZWQgKnJlZ25vKQoreworI2lmZGVmIEhBUkRfUkVHX1NFVF9MT05HUworICBpdGVyLT5wZWx0ID0gc2V0OworICBpdGVyLT5sZW5ndGggPSBIQVJEX1JFR19TRVRfTE9OR1M7CisjZWxzZQorICBpdGVyLT5wZWx0ID0gJnNldDsKKyAgaXRlci0+bGVuZ3RoID0gMTsKKyNlbmRpZgorICBpdGVyLT53b3JkX25vID0gbWluIC8gSEFSRF9SRUdfRUxUX0JJVFM7CisgIGlmIChpdGVyLT53b3JkX25vIDwgaXRlci0+bGVuZ3RoKQorICAgIHsKKyAgICAgIGl0ZXItPmJpdHMgPSBpdGVyLT5wZWx0W2l0ZXItPndvcmRfbm9dOworICAgICAgaXRlci0+Yml0cyA+Pj0gbWluICUgSEFSRF9SRUdfRUxUX0JJVFM7CisKKyAgICAgIC8qIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgc2VhcmNoIG9mIHRoZSBuZXh0IGJpdC4gICovCisgICAgICBtaW4gKz0gIWl0ZXItPmJpdHM7CisgICAgfQorICAqcmVnbm8gPSBtaW47Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFyZF9yZWdfc2V0X2l0ZXJfc2V0IChoYXJkX3JlZ19zZXRfaXRlcmF0b3IgKml0ZXIsIHVuc2lnbmVkICpyZWdubykKK3sKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgLyogUmV0dXJuIGZhbHNlIHdoZW4gd2UncmUgYWR2YW5jZWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBzZXQuICAqLworICAgICAgaWYgKGl0ZXItPndvcmRfbm8gPj0gaXRlci0+bGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIGlmIChpdGVyLT5iaXRzKQorICAgICAgICB7CisgICAgICAgICAgLyogRmluZCB0aGUgY29ycmVjdCBiaXQgYW5kIHJldHVybiBpdC4gICovCisgICAgICAgICAgd2hpbGUgKCEoaXRlci0+Yml0cyAmIDEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpdGVyLT5iaXRzID4+PSAxOworICAgICAgICAgICAgICAqcmVnbm8gKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gKCpyZWdubyA8IEZJUlNUX1BTRVVET19SRUdJU1RFUik7CisgICAgICAgIH0KKworICAgICAgLyogUm91bmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCB3b3JkLiAgKi8KKyAgICAgICpyZWdubyA9ICgqcmVnbm8gKyBIQVJEX1JFR19FTFRfQklUUyAtIDEpOworICAgICAgKnJlZ25vIC09ICpyZWdubyAlIEhBUkRfUkVHX0VMVF9CSVRTOworCisgICAgICAvKiBGaW5kIHRoZSBuZXh0IG5vbi16ZXJvIHdvcmQuICAqLworICAgICAgd2hpbGUgKCsraXRlci0+d29yZF9ubyA8IGl0ZXItPmxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgIGl0ZXItPmJpdHMgPSBpdGVyLT5wZWx0W2l0ZXItPndvcmRfbm9dOworICAgICAgICAgIGlmIChpdGVyLT5iaXRzKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgKnJlZ25vICs9IEhBUkRfUkVHX0VMVF9CSVRTOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhcmRfcmVnX3NldF9pdGVyX25leHQgKGhhcmRfcmVnX3NldF9pdGVyYXRvciAqaXRlciwgdW5zaWduZWQgKnJlZ25vKQoreworICBpdGVyLT5iaXRzID4+PSAxOworICAqcmVnbm8gKz0gMTsKK30KKworI2RlZmluZSBFWEVDVVRFX0lGX1NFVF9JTl9IQVJEX1JFR19TRVQoU0VULCBNSU4sIFJFR05VTSwgSVRFUikgICAgICAgICAgXAorICBmb3IgKGhhcmRfcmVnX3NldF9pdGVyX2luaXQgKCYoSVRFUiksIChTRVQpLCAoTUlOKSwgJihSRUdOVU0pKTsgICAgICAgXAorICAgICAgIGhhcmRfcmVnX3NldF9pdGVyX3NldCAoJihJVEVSKSwgJihSRUdOVU0pKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGhhcmRfcmVnX3NldF9pdGVyX25leHQgKCYoSVRFUiksICYoUkVHTlVNKSkpCisKKworLyogRGVmaW5lIHNvbWUgc3RhbmRhcmQgc2V0cyBvZiByZWdpc3RlcnMuICAqLworCisvKiBJbmRleGVkIGJ5IGhhcmQgcmVnaXN0ZXIgbnVtYmVyLCBjb250YWlucyAxIGZvciByZWdpc3RlcnMKKyAgIHRoYXQgYXJlIGJlaW5nIHVzZWQgZm9yIGdsb2JhbCByZWdpc3RlciBkZWNscy4KKyAgIFRoZXNlIG11c3QgYmUgZXhlbXB0IGZyb20gb3JkaW5hcnkgZmxvdyBhbmFseXNpcworICAgYW5kIGFyZSBhbHNvIGNvbnNpZGVyZWQgZml4ZWQuICAqLworCitleHRlcm4gY2hhciBnbG9iYWxfcmVnc1tGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworCitzdHJ1Y3QgdGFyZ2V0X2hhcmRfcmVncyB7CisgIC8qIFRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgYWN0dWFsbHkgZXhpc3Qgb24gdGhlIGN1cnJlbnQgdGFyZ2V0LiAgKi8KKyAgSEFSRF9SRUdfU0VUIHhfYWNjZXNzaWJsZV9yZWdfc2V0OworCisgIC8qIFRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgcmVnaXN0ZXIKKyAgICAgb3BlcmFuZHMuICBJdCBpcyBhIHN1YnNldCBvZiB4X2FjY2Vzc2libGVfcmVnX3NldC4gICovCisgIEhBUkRfUkVHX1NFVCB4X29wZXJhbmRfcmVnX3NldDsKKworICAvKiBJbmRleGVkIGJ5IGhhcmQgcmVnaXN0ZXIgbnVtYmVyLCBjb250YWlucyAxIGZvciByZWdpc3RlcnMKKyAgICAgdGhhdCBhcmUgZml4ZWQgdXNlIChzdGFjayBwb2ludGVyLCBwYywgZnJhbWUgcG9pbnRlciwgZXRjLjsuCisgICAgIFRoZXNlIGFyZSB0aGUgcmVnaXN0ZXJzIHRoYXQgY2Fubm90IGJlIHVzZWQgdG8gYWxsb2NhdGUKKyAgICAgYSBwc2V1ZG8gcmVnIHdob3NlIGxpZmUgZG9lcyBub3QgY3Jvc3MgY2FsbHMuICAqLworICBjaGFyIHhfZml4ZWRfcmVnc1tGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworCisgIC8qIFRoZSBzYW1lIGluZm8gYXMgYSBIQVJEX1JFR19TRVQuICAqLworICBIQVJEX1JFR19TRVQgeF9maXhlZF9yZWdfc2V0OworCisgIC8qIEluZGV4ZWQgYnkgaGFyZCByZWdpc3RlciBudW1iZXIsIGNvbnRhaW5zIDEgZm9yIHJlZ2lzdGVycworICAgICB0aGF0IGFyZSBmaXhlZCB1c2Ugb3IgYXJlIGNsb2JiZXJlZCBieSBmdW5jdGlvbiBjYWxscy4KKyAgICAgVGhlc2UgYXJlIHRoZSByZWdpc3RlcnMgdGhhdCBjYW5ub3QgYmUgdXNlZCB0byBhbGxvY2F0ZQorICAgICBhIHBzZXVkbyByZWcgd2hvc2UgbGlmZSBjcm9zc2VzIGNhbGxzLiAgKi8KKyAgY2hhciB4X2NhbGxfdXNlZF9yZWdzW0ZJUlNUX1BTRVVET19SRUdJU1RFUl07CisKKyAgY2hhciB4X2NhbGxfcmVhbGx5X3VzZWRfcmVnc1tGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworCisgIC8qIFRoZSBzYW1lIGluZm8gYXMgYSBIQVJEX1JFR19TRVQuICAqLworICBIQVJEX1JFR19TRVQgeF9jYWxsX3VzZWRfcmVnX3NldDsKKworICAvKiBDb250YWlucyByZWdpc3RlcnMgdGhhdCBhcmUgZml4ZWQgdXNlIC0tIGkuZS4gaW4gZml4ZWRfcmVnX3NldCAtLSBvcgorICAgICBhIGZ1bmN0aW9uIHZhbHVlIHJldHVybiByZWdpc3RlciBvciBUQVJHRVRfU1RSVUNUX1ZBTFVFX1JUWCBvcgorICAgICBTVEFUSUNfQ0hBSU5fUkVHTlVNLiAgVGhlc2UgYXJlIHRoZSByZWdpc3RlcnMgdGhhdCBjYW5ub3QgaG9sZCBxdWFudGl0aWVzCisgICAgIGFjcm9zcyBjYWxscyBldmVuIGlmIHdlIGFyZSB3aWxsaW5nIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlbS4gICovCisgIEhBUkRfUkVHX1NFVCB4X2NhbGxfZml4ZWRfcmVnX3NldDsKKworICAvKiBDb250YWlucyAxIGZvciByZWdpc3RlcnMgdGhhdCBhcmUgc2V0IG9yIGNsb2JiZXJlZCBieSBjYWxscy4gICovCisgIC8qID8/PyBJZGVhbGx5LCB0aGlzIHdvdWxkIGJlIGp1c3QgY2FsbF91c2VkX3JlZ3MgcGx1cyBnbG9iYWxfcmVncywgYnV0CisgICAgIGZvciBzb21lb25lJ3MgYnJpZ2h0IGlkZWEgdG8gaGF2ZSBjYWxsX3VzZWRfcmVncyBzdHJpY3RseSBpbmNsdWRlCisgICAgIGZpeGVkX3JlZ3MuICBXaGljaCBsZWF2ZXMgdXMgZ3Vlc3NpbmcgYXMgdG8gdGhlIHNldCBvZiBmaXhlZF9yZWdzCisgICAgIHRoYXQgYXJlIGFjdHVhbGx5IHByZXNlcnZlZC4gIFdlIGtub3cgZm9yIHN1cmUgdGhhdCB0aG9zZSBhc3NvY2lhdGVkCisgICAgIHdpdGggdGhlIGxvY2FsIHN0YWNrIGZyYW1lIGFyZSBzYWZlLCBidXQgc2NhbnQgb3RoZXJzLiAgKi8KKyAgSEFSRF9SRUdfU0VUIHhfcmVnc19pbnZhbGlkYXRlZF9ieV9jYWxsOworCisgIC8qIENhbGwgdXNlZCBoYXJkIHJlZ2lzdGVycyB3aGljaCBjYW4gbm90IGJlIHNhdmVkIGJlY2F1c2UgdGhlcmUgaXMgbm8KKyAgICAgaW5zbiBmb3IgdGhpcy4gICovCisgIEhBUkRfUkVHX1NFVCB4X25vX2NhbGxlcl9zYXZlX3JlZ19zZXQ7CisKKyAgLyogVGFibGUgb2YgcmVnaXN0ZXIgbnVtYmVycyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdG8gdHJ5IHRvIHVzZSB0aGVtLiAgKi8KKyAgaW50IHhfcmVnX2FsbG9jX29yZGVyW0ZJUlNUX1BTRVVET19SRUdJU1RFUl07CisKKyAgLyogVGhlIGludmVyc2Ugb2YgcmVnX2FsbG9jX29yZGVyLiAgKi8KKyAgaW50IHhfaW52X3JlZ19hbGxvY19vcmRlcltGSVJTVF9QU0VVRE9fUkVHSVNURVJdOworCisgIC8qIEZvciBlYWNoIHJlZyBjbGFzcywgYSBIQVJEX1JFR19TRVQgc2F5aW5nIHdoaWNoIHJlZ2lzdGVycyBhcmUgaW4gaXQuICAqLworICBIQVJEX1JFR19TRVQgeF9yZWdfY2xhc3NfY29udGVudHNbTl9SRUdfQ0xBU1NFU107CisKKyAgLyogRm9yIGVhY2ggcmVnIGNsYXNzLCBhIGJvb2xlYW4gc2F5aW5nIHdoZXRoZXIgdGhlIGNsYXNzIGNvbnRhaW5zIG9ubHkKKyAgICAgZml4ZWQgcmVnaXN0ZXJzLiAgKi8KKyAgYm9vbCB4X2NsYXNzX29ubHlfZml4ZWRfcmVnc1tOX1JFR19DTEFTU0VTXTsKKworICAvKiBGb3IgZWFjaCByZWcgY2xhc3MsIG51bWJlciBvZiByZWdzIGl0IGNvbnRhaW5zLiAgKi8KKyAgdW5zaWduZWQgaW50IHhfcmVnX2NsYXNzX3NpemVbTl9SRUdfQ0xBU1NFU107CisKKyAgLyogRm9yIGVhY2ggcmVnIGNsYXNzLCB0YWJsZSBsaXN0aW5nIGFsbCB0aGUgY2xhc3NlcyBjb250YWluZWQgaW4gaXQuICAqLworICBlbnVtIHJlZ19jbGFzcyB4X3JlZ19jbGFzc19zdWJjbGFzc2VzW05fUkVHX0NMQVNTRVNdW05fUkVHX0NMQVNTRVNdOworCisgIC8qIEZvciBlYWNoIHBhaXIgb2YgcmVnIGNsYXNzZXMsCisgICAgIGEgbGFyZ2VzdCByZWcgY2xhc3MgY29udGFpbmVkIGluIHRoZWlyIHVuaW9uLiAgKi8KKyAgZW51bSByZWdfY2xhc3MgeF9yZWdfY2xhc3Nfc3VidW5pb25bTl9SRUdfQ0xBU1NFU11bTl9SRUdfQ0xBU1NFU107CisKKyAgLyogRm9yIGVhY2ggcGFpciBvZiByZWcgY2xhc3NlcywKKyAgICAgdGhlIHNtYWxsZXN0IHJlZyBjbGFzcyB0aGF0IGNvbnRhaW5zIHRoZWlyIHVuaW9uLiAgKi8KKyAgZW51bSByZWdfY2xhc3MgeF9yZWdfY2xhc3Nfc3VwZXJ1bmlvbltOX1JFR19DTEFTU0VTXVtOX1JFR19DTEFTU0VTXTsKKworICAvKiBWZWN0b3IgaW5kZXhlZCBieSBoYXJkd2FyZSByZWcgZ2l2aW5nIGl0cyBuYW1lLiAgKi8KKyAgY29uc3QgY2hhciAqeF9yZWdfbmFtZXNbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKK307CisKK2V4dGVybiBzdHJ1Y3QgdGFyZ2V0X2hhcmRfcmVncyBkZWZhdWx0X3RhcmdldF9oYXJkX3JlZ3M7CisjaWYgU1dJVENIQUJMRV9UQVJHRVQKK2V4dGVybiBzdHJ1Y3QgdGFyZ2V0X2hhcmRfcmVncyAqdGhpc190YXJnZXRfaGFyZF9yZWdzOworI2Vsc2UKKyNkZWZpbmUgdGhpc190YXJnZXRfaGFyZF9yZWdzICgmZGVmYXVsdF90YXJnZXRfaGFyZF9yZWdzKQorI2VuZGlmCisKKyNkZWZpbmUgYWNjZXNzaWJsZV9yZWdfc2V0IFwKKyAgKHRoaXNfdGFyZ2V0X2hhcmRfcmVncy0+eF9hY2Nlc3NpYmxlX3JlZ19zZXQpCisjZGVmaW5lIG9wZXJhbmRfcmVnX3NldCBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfb3BlcmFuZF9yZWdfc2V0KQorI2RlZmluZSBmaXhlZF9yZWdzIFwKKyAgKHRoaXNfdGFyZ2V0X2hhcmRfcmVncy0+eF9maXhlZF9yZWdzKQorI2RlZmluZSBmaXhlZF9yZWdfc2V0IFwKKyAgKHRoaXNfdGFyZ2V0X2hhcmRfcmVncy0+eF9maXhlZF9yZWdfc2V0KQorI2RlZmluZSBjYWxsX3VzZWRfcmVncyBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfY2FsbF91c2VkX3JlZ3MpCisjZGVmaW5lIGNhbGxfcmVhbGx5X3VzZWRfcmVncyBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfY2FsbF9yZWFsbHlfdXNlZF9yZWdzKQorI2RlZmluZSBjYWxsX3VzZWRfcmVnX3NldCBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfY2FsbF91c2VkX3JlZ19zZXQpCisjZGVmaW5lIGNhbGxfZml4ZWRfcmVnX3NldCBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfY2FsbF9maXhlZF9yZWdfc2V0KQorI2RlZmluZSByZWdzX2ludmFsaWRhdGVkX2J5X2NhbGwgXAorICAodGhpc190YXJnZXRfaGFyZF9yZWdzLT54X3JlZ3NfaW52YWxpZGF0ZWRfYnlfY2FsbCkKKyNkZWZpbmUgbm9fY2FsbGVyX3NhdmVfcmVnX3NldCBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfbm9fY2FsbGVyX3NhdmVfcmVnX3NldCkKKyNkZWZpbmUgcmVnX2FsbG9jX29yZGVyIFwKKyAgKHRoaXNfdGFyZ2V0X2hhcmRfcmVncy0+eF9yZWdfYWxsb2Nfb3JkZXIpCisjZGVmaW5lIGludl9yZWdfYWxsb2Nfb3JkZXIgXAorICAodGhpc190YXJnZXRfaGFyZF9yZWdzLT54X2ludl9yZWdfYWxsb2Nfb3JkZXIpCisjZGVmaW5lIHJlZ19jbGFzc19jb250ZW50cyBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfcmVnX2NsYXNzX2NvbnRlbnRzKQorI2RlZmluZSBjbGFzc19vbmx5X2ZpeGVkX3JlZ3MgXAorICAodGhpc190YXJnZXRfaGFyZF9yZWdzLT54X2NsYXNzX29ubHlfZml4ZWRfcmVncykKKyNkZWZpbmUgcmVnX2NsYXNzX3NpemUgXAorICAodGhpc190YXJnZXRfaGFyZF9yZWdzLT54X3JlZ19jbGFzc19zaXplKQorI2RlZmluZSByZWdfY2xhc3Nfc3ViY2xhc3NlcyBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfcmVnX2NsYXNzX3N1YmNsYXNzZXMpCisjZGVmaW5lIHJlZ19jbGFzc19zdWJ1bmlvbiBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfcmVnX2NsYXNzX3N1YnVuaW9uKQorI2RlZmluZSByZWdfY2xhc3Nfc3VwZXJ1bmlvbiBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfcmVnX2NsYXNzX3N1cGVydW5pb24pCisjZGVmaW5lIHJlZ19uYW1lcyBcCisgICh0aGlzX3RhcmdldF9oYXJkX3JlZ3MtPnhfcmVnX25hbWVzKQorCisvKiBWZWN0b3IgaW5kZXhlZCBieSByZWcgY2xhc3MgZ2l2aW5nIGl0cyBuYW1lLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKiByZWdfY2xhc3NfbmFtZXNbXTsKKworLyogR2l2ZW4gYSBoYXJkIFJFR04gYSBGUk9NIG1vZGUgYW5kIGEgVE8gbW9kZSwgcmV0dXJuIG5vbnplcm8gaWYKKyAgIFJFR04gY2Fubm90IGNoYW5nZSBtb2RlcyBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgbW9kZXMuICAqLworI2RlZmluZSBSRUdfQ0FOTk9UX0NIQU5HRV9NT0RFX1AoUkVHTiwgRlJPTSwgVE8pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICBDQU5OT1RfQ0hBTkdFX01PREVfQ0xBU1MgKEZST00sIFRPLCBSRUdOT19SRUdfQ0xBU1MgKFJFR04pKQorCisjZW5kaWYgLyogISBHQ0NfSEFSRF9SRUdfU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9oYXNodGFiLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaGFzaHRhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYjY1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaGFzaHRhYi5oCkBAIC0wLDAgKzEsMjA5IEBACisvKiBBbiBleHBhbmRhYmxlIGhhc2ggdGFibGVzIGRhdGF0eXBlLiAgCisgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDksIDIwMTAKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgVmxhZGltaXIgTWFrYXJvdiAodm1ha2Fyb3ZAY3lnbnVzLmNvbSkuCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogVGhpcyBwYWNrYWdlIGltcGxlbWVudHMgYmFzaWMgaGFzaCB0YWJsZSBmdW5jdGlvbmFsaXR5LiAgSXQgaXMgcG9zc2libGUKKyAgIHRvIHNlYXJjaCBmb3IgYW4gZW50cnksIGNyZWF0ZSBhbiBlbnRyeSBhbmQgZGVzdHJveSBhbiBlbnRyeS4KKworICAgRWxlbWVudHMgaW4gdGhlIHRhYmxlIGFyZSBnZW5lcmljIHBvaW50ZXJzLgorCisgICBUaGUgc2l6ZSBvZiB0aGUgdGFibGUgaXMgbm90IGZpeGVkOyBpZiB0aGUgb2NjdXBhbmN5IG9mIHRoZSB0YWJsZQorICAgZ3Jvd3MgdG9vIGhpZ2ggdGhlIGhhc2ggdGFibGUgd2lsbCBiZSBleHBhbmRlZC4KKworICAgVGhlIGFic3RyYWN0IGRhdGEgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gZ2VuZXJhbGl6ZWQgQWxnb3JpdGhtIEQKKyAgIGZyb20gS251dGgncyBib29rICJUaGUgYXJ0IG9mIGNvbXB1dGVyIHByb2dyYW1taW5nIi4gIEhhc2ggdGFibGUgaXMKKyAgIGV4cGFuZGVkIGJ5IGNyZWF0aW9uIG9mIG5ldyBoYXNoIHRhYmxlIGFuZCB0cmFuc2ZlcnJpbmcgZWxlbWVudHMgZnJvbQorICAgdGhlIG9sZCB0YWJsZSB0byB0aGUgbmV3IHRhYmxlLiAgKi8KKworI2lmbmRlZiBfX0hBU0hUQUJfSF9fCisjZGVmaW5lIF9fSEFTSFRBQl9IX18KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjaW5jbHVkZSAiYW5zaWRlY2wuaCIKKworI2lmbmRlZiBHVFkKKyNkZWZpbmUgR1RZKFgpCisjZW5kaWYKKworLyogVGhlIHR5cGUgZm9yIGEgaGFzaCBjb2RlLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGhhc2h2YWxfdDsKKworLyogQ2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciB0eXBlcy4gICovCisKKy8qIENhbGN1bGF0ZSBoYXNoIG9mIGEgdGFibGUgZW50cnkuICAqLwordHlwZWRlZiBoYXNodmFsX3QgKCpodGFiX2hhc2gpIChjb25zdCB2b2lkICopOworCisvKiBDb21wYXJlIGEgdGFibGUgZW50cnkgd2l0aCBhIHBvc3NpYmxlIGVudHJ5LiAgVGhlIGVudHJ5IGFscmVhZHkgaW4KKyAgIHRoZSB0YWJsZSBhbHdheXMgY29tZXMgZmlyc3QsIHNvIHRoZSBzZWNvbmQgZWxlbWVudCBjYW4gYmUgb2YgYQorICAgZGlmZmVyZW50IHR5cGUgKGJ1dCBpbiB0aGlzIGNhc2UgaHRhYl9maW5kIGFuZCBodGFiX2ZpbmRfc2xvdAorICAgY2Fubm90IGJlIHVzZWQ7IGluc3RlYWQgdGhlIHZhcmlhbnRzIHRoYXQgYWNjZXB0IGEgaGFzaCB2YWx1ZQorICAgbXVzdCBiZSB1c2VkKS4gICovCit0eXBlZGVmIGludCAoKmh0YWJfZXEpIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisKKy8qIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIHdoZW5ldmVyIGEgbGl2ZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbQorICAgdGhlIGhhc2ggdGFibGUuICAqLwordHlwZWRlZiB2b2lkICgqaHRhYl9kZWwpICh2b2lkICopOworICAKKy8qIEZ1bmN0aW9uIGNhbGxlZCBieSBodGFiX3RyYXZlcnNlIGZvciBlYWNoIGxpdmUgZWxlbWVudC4gIFRoZSBmaXJzdAorICAgYXJnIGlzIHRoZSBzbG90IG9mIHRoZSBlbGVtZW50ICh3aGljaCBjYW4gYmUgcGFzc2VkIHRvIGh0YWJfY2xlYXJfc2xvdAorICAgaWYgZGVzaXJlZCksIHRoZSBzZWNvbmQgYXJnIGlzIHRoZSBhdXhpbGlhcnkgcG9pbnRlciBoYW5kZWQgdG8KKyAgIGh0YWJfdHJhdmVyc2UuICBSZXR1cm4gMSB0byBjb250aW51ZSBzY2FuLCAwIHRvIHN0b3AuICAqLwordHlwZWRlZiBpbnQgKCpodGFiX3RyYXYpICh2b2lkICoqLCB2b2lkICopOworCisvKiBNZW1vcnktYWxsb2NhdGlvbiBmdW5jdGlvbiwgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIGNhbGxvYygpLgorICAgSWZmIGl0IHJldHVybnMgTlVMTCwgdGhlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gd2lsbCBwYXNzIGFuIGVycm9yCisgICBjb2RlIGJhY2sgdG8gdGhlIHVzZXIsIHNvIGlmIHlvdXIgY29kZSBkb2Vzbid0IGhhbmRsZSBlcnJvcnMsCisgICBiZXN0IGlmIHlvdSB1c2UgeGNhbGxvYyBpbnN0ZWFkLiAgKi8KK3R5cGVkZWYgdm9pZCAqKCpodGFiX2FsbG9jKSAoc2l6ZV90LCBzaXplX3QpOworCisvKiBXZSBhbHNvIG5lZWQgYSBmcmVlKCkgcm91dGluZS4gICovCit0eXBlZGVmIHZvaWQgKCpodGFiX2ZyZWUpICh2b2lkICopOworCisvKiBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uOyB2YXJpYW50cyB3aGljaCB0YWtlIGFuIGV4dHJhCisgICBhcmd1bWVudC4gICovCit0eXBlZGVmIHZvaWQgKigqaHRhYl9hbGxvY193aXRoX2FyZykgKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiB2b2lkICgqaHRhYl9mcmVlX3dpdGhfYXJnKSAodm9pZCAqLCB2b2lkICopOworCisvKiBUaGlzIG1hY3JvIGRlZmluZXMgcmVzZXJ2ZWQgdmFsdWUgZm9yIGVtcHR5IHRhYmxlIGVudHJ5LiAgKi8KKworI2RlZmluZSBIVEFCX0VNUFRZX0VOVFJZICAgICgoUFRSKSAwKQorCisvKiBUaGlzIG1hY3JvIGRlZmluZXMgcmVzZXJ2ZWQgdmFsdWUgZm9yIHRhYmxlIGVudHJ5IHdoaWNoIGNvbnRhaW5lZAorICAgYSBkZWxldGVkIGVsZW1lbnQuICovCisKKyNkZWZpbmUgSFRBQl9ERUxFVEVEX0VOVFJZICAoKFBUUikgMSkKKworLyogSGFzaCB0YWJsZXMgYXJlIG9mIHRoZSBmb2xsb3dpbmcgdHlwZS4gIFRoZSBzdHJ1Y3R1cmUKKyAgIChpbXBsZW1lbnRhdGlvbikgb2YgdGhpcyB0eXBlIGlzIG5vdCBuZWVkZWQgZm9yIHVzaW5nIHRoZSBoYXNoCisgICB0YWJsZXMuICBBbGwgd29yayB3aXRoIGhhc2ggdGFibGUgc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgdGhyb3VnaAorICAgZnVuY3Rpb25zIG1lbnRpb25lZCBiZWxvdy4gIFRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIGlzIHN1YmplY3QgdG8KKyAgIGNoYW5nZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIGh0YWIgeworICAvKiBQb2ludGVyIHRvIGhhc2ggZnVuY3Rpb24uICAqLworICBodGFiX2hhc2ggaGFzaF9mOworCisgIC8qIFBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvbi4gICovCisgIGh0YWJfZXEgZXFfZjsKKworICAvKiBQb2ludGVyIHRvIGNsZWFudXAgZnVuY3Rpb24uICAqLworICBodGFiX2RlbCBkZWxfZjsKKworICAvKiBUYWJsZSBpdHNlbGYuICAqLworICB2b2lkICoqIEdUWSAoKHVzZV9wYXJhbSwgbGVuZ3RoICgiJWguc2l6ZSIpKSkgZW50cmllczsKKworICAvKiBDdXJyZW50IHNpemUgKGluIGVudHJpZXMpIG9mIHRoZSBoYXNoIHRhYmxlLiAgKi8KKyAgc2l6ZV90IHNpemU7CisKKyAgLyogQ3VycmVudCBudW1iZXIgb2YgZWxlbWVudHMgaW5jbHVkaW5nIGFsc28gZGVsZXRlZCBlbGVtZW50cy4gICovCisgIHNpemVfdCBuX2VsZW1lbnRzOworCisgIC8qIEN1cnJlbnQgbnVtYmVyIG9mIGRlbGV0ZWQgZWxlbWVudHMgaW4gdGhlIHRhYmxlLiAgKi8KKyAgc2l6ZV90IG5fZGVsZXRlZDsKKworICAvKiBUaGUgZm9sbG93aW5nIG1lbWJlciBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcuIEl0cyB2YWx1ZSBpcyBudW1iZXIKKyAgICAgb2YgYWxsIGNhbGxzIG9mIGBodGFiX2ZpbmRfc2xvdCcgZm9yIHRoZSBoYXNoIHRhYmxlLiAqLworICB1bnNpZ25lZCBpbnQgc2VhcmNoZXM7CisKKyAgLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgaXMgdXNlZCBmb3IgZGVidWdnaW5nLiAgSXRzIHZhbHVlIGlzIG51bWJlcgorICAgICBvZiBjb2xsaXNpb25zIGZpeGVkIGZvciB0aW1lIG9mIHdvcmsgd2l0aCB0aGUgaGFzaCB0YWJsZS4gKi8KKyAgdW5zaWduZWQgaW50IGNvbGxpc2lvbnM7CisKKyAgLyogUG9pbnRlcnMgdG8gYWxsb2NhdGUvZnJlZSBmdW5jdGlvbnMuICAqLworICBodGFiX2FsbG9jIGFsbG9jX2Y7CisgIGh0YWJfZnJlZSBmcmVlX2Y7CisKKyAgLyogQWx0ZXJuYXRlIGFsbG9jYXRlL2ZyZWUgZnVuY3Rpb25zLCB3aGljaCB0YWtlIGFuIGV4dHJhIGFyZ3VtZW50LiAgKi8KKyAgdm9pZCAqIEdUWSgoc2tpcCkpIGFsbG9jX2FyZzsKKyAgaHRhYl9hbGxvY193aXRoX2FyZyBhbGxvY193aXRoX2FyZ19mOworICBodGFiX2ZyZWVfd2l0aF9hcmcgZnJlZV93aXRoX2FyZ19mOworCisgIC8qIEN1cnJlbnQgc2l6ZSAoaW4gZW50cmllcykgb2YgdGhlIGhhc2ggdGFibGUsIGFzIGFuIGluZGV4IGludG8gdGhlCisgICAgIHRhYmxlIG9mIHByaW1lcy4gICovCisgIHVuc2lnbmVkIGludCBzaXplX3ByaW1lX2luZGV4OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaHRhYiAqaHRhYl90OworCisvKiBBbiBlbnVtIHNheWluZyB3aGV0aGVyIHdlIGluc2VydCBpbnRvIHRoZSBoYXNoIHRhYmxlIG9yIG5vdC4gICovCitlbnVtIGluc2VydF9vcHRpb24ge05PX0lOU0VSVCwgSU5TRVJUfTsKKworLyogVGhlIHByb3RvdHlwZXMgb2YgdGhlIHBhY2thZ2UgZnVuY3Rpb25zLiAqLworCitleHRlcm4gaHRhYl90CWh0YWJfY3JlYXRlX2FsbG9jICAoc2l6ZV90LCBodGFiX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGFiX2VxLCBodGFiX2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0YWJfYWxsb2MsIGh0YWJfZnJlZSk7CisKK2V4dGVybiBodGFiX3QJaHRhYl9jcmVhdGVfYWxsb2NfZXggKHNpemVfdCwgaHRhYl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGFiX2VxLCBodGFiX2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCBodGFiX2FsbG9jX3dpdGhfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGFiX2ZyZWVfd2l0aF9hcmcpOworCitleHRlcm4gaHRhYl90ICBodGFiX2NyZWF0ZV90eXBlZF9hbGxvYyAoc2l6ZV90LCBodGFiX2hhc2gsIGh0YWJfZXEsIGh0YWJfZGVsLAorCQkJCQlodGFiX2FsbG9jLCBodGFiX2FsbG9jLCBodGFiX2ZyZWUpOworCisvKiBCYWNrd2FyZC1jb21wYXRpYmlsaXR5IGZ1bmN0aW9ucy4gICovCitleHRlcm4gaHRhYl90IGh0YWJfY3JlYXRlIChzaXplX3QsIGh0YWJfaGFzaCwgaHRhYl9lcSwgaHRhYl9kZWwpOworZXh0ZXJuIGh0YWJfdCBodGFiX3RyeV9jcmVhdGUgKHNpemVfdCwgaHRhYl9oYXNoLCBodGFiX2VxLCBodGFiX2RlbCk7CisKK2V4dGVybiB2b2lkCWh0YWJfc2V0X2Z1bmN0aW9uc19leCAoaHRhYl90LCBodGFiX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGFiX2VxLCBodGFiX2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgaHRhYl9hbGxvY193aXRoX2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0YWJfZnJlZV93aXRoX2FyZyk7CisKK2V4dGVybiB2b2lkCWh0YWJfZGVsZXRlIChodGFiX3QpOworZXh0ZXJuIHZvaWQJaHRhYl9lbXB0eSAoaHRhYl90KTsKKworZXh0ZXJuIHZvaWQgKglodGFiX2ZpbmQgKGh0YWJfdCwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkICoqCWh0YWJfZmluZF9zbG90IChodGFiX3QsIGNvbnN0IHZvaWQgKiwgZW51bSBpbnNlcnRfb3B0aW9uKTsKK2V4dGVybiB2b2lkICoJaHRhYl9maW5kX3dpdGhfaGFzaCAoaHRhYl90LCBjb25zdCB2b2lkICosIGhhc2h2YWxfdCk7CitleHRlcm4gdm9pZCAqKglodGFiX2ZpbmRfc2xvdF93aXRoX2hhc2ggKGh0YWJfdCwgY29uc3Qgdm9pZCAqLAorCQkJCQkgIGhhc2h2YWxfdCwgZW51bSBpbnNlcnRfb3B0aW9uKTsKK2V4dGVybiB2b2lkCWh0YWJfY2xlYXJfc2xvdAkoaHRhYl90LCB2b2lkICoqKTsKK2V4dGVybiB2b2lkCWh0YWJfcmVtb3ZlX2VsdAkoaHRhYl90LCB2b2lkICopOworZXh0ZXJuIHZvaWQJaHRhYl9yZW1vdmVfZWx0X3dpdGhfaGFzaCAoaHRhYl90LCB2b2lkICosIGhhc2h2YWxfdCk7CisKK2V4dGVybiB2b2lkCWh0YWJfdHJhdmVyc2UgKGh0YWJfdCwgaHRhYl90cmF2LCB2b2lkICopOworZXh0ZXJuIHZvaWQJaHRhYl90cmF2ZXJzZV9ub3Jlc2l6ZSAoaHRhYl90LCBodGFiX3RyYXYsIHZvaWQgKik7CisKK2V4dGVybiBzaXplX3QJaHRhYl9zaXplIChodGFiX3QpOworZXh0ZXJuIHNpemVfdAlodGFiX2VsZW1lbnRzIChodGFiX3QpOworZXh0ZXJuIGRvdWJsZQlodGFiX2NvbGxpc2lvbnMJKGh0YWJfdCk7CisKKy8qIEEgaGFzaCBmdW5jdGlvbiBmb3IgcG9pbnRlcnMuICAqLworZXh0ZXJuIGh0YWJfaGFzaCBodGFiX2hhc2hfcG9pbnRlcjsKKworLyogQW4gZXF1YWxpdHkgZnVuY3Rpb24gZm9yIHBvaW50ZXJzLiAgKi8KK2V4dGVybiBodGFiX2VxIGh0YWJfZXFfcG9pbnRlcjsKKworLyogQSBoYXNoIGZ1bmN0aW9uIGZvciBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4gICovCitleHRlcm4gaGFzaHZhbF90IGh0YWJfaGFzaF9zdHJpbmcgKGNvbnN0IHZvaWQgKik7CisKKy8qIEFuIGl0ZXJhdGl2ZSBoYXNoIGZ1bmN0aW9uIGZvciBhcmJpdHJhcnkgZGF0YS4gICovCitleHRlcm4gaGFzaHZhbF90IGl0ZXJhdGl2ZV9oYXNoIChjb25zdCB2b2lkICosIHNpemVfdCwgaGFzaHZhbF90KTsKKy8qIFNob3J0aGFuZCBmb3IgaGFzaGluZyBzb21ldGhpbmcgd2l0aCBhbiBpbnRyaW5zaWMgc2l6ZS4gICovCisjZGVmaW5lIGl0ZXJhdGl2ZV9oYXNoX29iamVjdChPQixJTklUKSBpdGVyYXRpdmVfaGFzaCAoJk9CLCBzaXplb2YgKE9CKSwgSU5JVCkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIF9fSEFTSFRBQl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaGlnaGxldi1wbHVnaW4tY29tbW9uLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaGlnaGxldi1wbHVnaW4tY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzMWU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9oaWdobGV2LXBsdWdpbi1jb21tb24uaApAQCAtMCwwICsxLDMzIEBACisvKiBJbnRlcmZhY2UgZm9yIGhpZ2gtbGV2ZWwgcGx1Z2lucyBpbiBHQ0MgLSBQYXJ0cyBjb21tb24gYmV0d2VlbiBHQ0MsCisgICBJQ0kgYW5kIGhpZ2gtbGV2ZWwgcGx1Z2lucy4KKworICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIENvbnRyaWJ1dGVkIGJ5IElOUklBLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBISUdITEVWX1BMVUdJTl9DT01NT05fSAorI2RlZmluZSBISUdITEVWX1BMVUdJTl9DT01NT05fSAorCisvKiBSZXR1cm4gY29kZXMgZm9yIGludm9rZV9wbHVnaW5fY2FsbGJhY2tzIC8gY2FsbF9wbHVnaW5fZXZlbnQgLiAgKi8KKyNkZWZpbmUgUExVR0VWVF9TVUNDRVNTICAgICAgICAgMAorI2RlZmluZSBQTFVHRVZUX05PX0VWRU5UUyAgICAgICAxCisjZGVmaW5lIFBMVUdFVlRfTk9fU1VDSF9FVkVOVCAgIDIKKyNkZWZpbmUgUExVR0VWVF9OT19DQUxMQkFDSyAgICAgMworCisjZW5kaWYgLyogSElHSExFVl9QTFVHSU5fQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9od2ludC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2h3aW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2MmZhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9od2ludC5oCkBAIC0wLDAgKzEsMjc5IEBACisvKiBIT1NUX1dJREVfSU5UIGRlZmluaXRpb25zIGZvciB0aGUgR05VIGNvbXBpbGVyLgorICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgUHJvdmlkZSBkZWZpbml0aW9ucyBmb3IgbWFjcm9zIHdoaWNoIGRlcGVuZCBvbiBIT1NUX0JJVFNfUEVSX0lOVAorICAgYW5kIEhPU1RfQklUU19QRVJfTE9ORy4gICovCisKKyNpZm5kZWYgR0NDX0hXSU5UX0gKKyNkZWZpbmUgR0NDX0hXSU5UX0gKKworLyogVGhpcyBkZXNjcmliZXMgdGhlIG1hY2hpbmUgdGhlIGNvbXBpbGVyIGlzIGhvc3RlZCBvbi4gICovCisjZGVmaW5lIEhPU1RfQklUU19QRVJfQ0hBUiAgQ0hBUl9CSVQKKyNkZWZpbmUgSE9TVF9CSVRTX1BFUl9TSE9SVCAoQ0hBUl9CSVQgKiBTSVpFT0ZfU0hPUlQpCisjZGVmaW5lIEhPU1RfQklUU19QRVJfSU5UICAgKENIQVJfQklUICogU0laRU9GX0lOVCkKKyNkZWZpbmUgSE9TVF9CSVRTX1BFUl9MT05HICAoQ0hBUl9CSVQgKiBTSVpFT0ZfTE9ORykKKworLyogVGhlIHN0cmluZyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGEgcHJpbnRmIHN0eWxlIGZvcm1hdCB0bworICAgaW5kaWNhdGUgYSAibG9uZyIgb3BlcmFuZC4gICovCisjaWZuZGVmIEhPU1RfTE9OR19GT1JNQVQKKyNkZWZpbmUgSE9TVF9MT05HX0ZPUk1BVCAibCIKKyNlbmRpZgorCisvKiBUaGUgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIGluc2VydGVkIGludG8gYSBwcmludGYgc3R5bGUgZm9ybWF0IHRvCisgICBpbmRpY2F0ZSBhICJsb25nIGxvbmciIG9wZXJhbmQuICAqLworI2lmbmRlZiBIT1NUX0xPTkdfTE9OR19GT1JNQVQKKyNkZWZpbmUgSE9TVF9MT05HX0xPTkdfRk9STUFUICJsbCIKKyNlbmRpZgorCisvKiBJZiBIQVZFX0xPTkdfTE9ORyBhbmQgU0laRU9GX0xPTkdfTE9ORyBhcmVuJ3QgZGVmaW5lZCwgYnV0CisgICBHQ0NfVkVSU0lPTiA+PSAzMDAwLCBhc3N1bWUgdGhpcyBpcyB0aGUgc2Vjb25kIG9yIGxhdGVyIHN0YWdlIG9mIGEKKyAgIGJvb3RzdHJhcCwgd2UgZG8gaGF2ZSBsb25nIGxvbmcsIGFuZCBpdCdzIDY0IGJpdHMuICAoVGhpcyBpcworICAgcmVxdWlyZWQgYnkgQzk5OyB3ZSBkbyBoYXZlIHNvbWUgcG9ydHMgdGhhdCB2aW9sYXRlIHRoYXQgYXNzdW1wdGlvbgorICAgYnV0IHRoZXkncmUgYWxsIGNyb3NzLWNvbXBpbGUtb25seS4pICBKdXN0IGluIGNhc2UsIGZvcmNlIGEKKyAgIGNvbnN0cmFpbnQgdmlvbGF0aW9uIGlmIHRoYXQgYXNzdW1wdGlvbiBpcyBpbmNvcnJlY3QuICAqLworI2lmICFkZWZpbmVkIEhBVkVfTE9OR19MT05HCisjIGlmIEdDQ19WRVJTSU9OID49IDMwMDAKKyMgIGRlZmluZSBIQVZFX0xPTkdfTE9ORyAxCisjICBkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4CitleHRlcm4gY2hhciBzaXplb2ZfbG9uZ19sb25nX211c3RfYmVfOFtzaXplb2YobG9uZyBsb25nKSA9PSA4ID8gMSA6IC0xXTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyMgZGVmaW5lIEhPU1RfQklUU19QRVJfTE9OR0xPTkcgKENIQVJfQklUICogU0laRU9GX0xPTkdfTE9ORykKKyNlbmRpZgorI2lmZGVmIEhBVkVfX19JTlQ2NAorIyBkZWZpbmUgSE9TVF9CSVRTX1BFUl9fX0lOVDY0IChDSEFSX0JJVCAqIFNJWkVPRl9fX0lOVDY0KQorI2VuZGlmCisKKy8qIFNldCBIT1NUX1dJREVfSU5ULiAgVGhpcyBzaG91bGQgYmUgdGhlIHdpZGVzdCBlZmZpY2llbnQgaG9zdAorICAgaW50ZWdlciB0eXBlLiAgSXQgY2FuIGJlIDMyIG9yIDY0IGJpdHMsIGV4Y2VwdCB0aGF0IGlmIHdlIGFyZQorICAgdGFyZ2V0aW5nIGEgbWFjaGluZSB3aXRoIDY0LWJpdCBzaXplX3QgdGhlbiBpdCBoYXMgdG8gYmUgNjQgYml0cy4KKworICAgV2l0aCBhIHNhbmUgQUJJLCAnbG9uZycgaXMgdGhlIGxhcmdlc3QgZWZmaWNpZW50IGhvc3QgaW50ZWdlciB0eXBlLgorICAgVGh1cywgd2UgdXNlIHRoYXQgdW5sZXNzIHdlIGhhdmUgdG8gdXNlICdsb25nIGxvbmcnIG9yICdfX2ludDY0JworICAgYmVjYXVzZSB3ZSdyZSB0YXJnZXRpbmcgYSA2NC1iaXQgbWFjaGluZSBmcm9tIGEgMzItYml0IGhvc3QuICAqLworCisjaWYgSE9TVF9CSVRTX1BFUl9MT05HID49IDY0IHx8ICFkZWZpbmVkIE5FRURfNjRCSVRfSE9TVF9XSURFX0lOVAorIyAgIGRlZmluZSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIEhPU1RfQklUU19QRVJfTE9ORworIyAgIGRlZmluZSBIT1NUX1dJREVfSU5UIGxvbmcKKyMgICBkZWZpbmUgSE9TVF9XSURFX0lOVF9DKFgpIFggIyMgTAorI2Vsc2UKKyMgaWYgSE9TVF9CSVRTX1BFUl9MT05HTE9ORyA+PSA2NAorIyAgIGRlZmluZSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIEhPU1RfQklUU19QRVJfTE9OR0xPTkcKKyMgICBkZWZpbmUgSE9TVF9XSURFX0lOVCBsb25nIGxvbmcKKyMgICBkZWZpbmUgSE9TVF9XSURFX0lOVF9DKFgpIFggIyMgTEwKKyMgZWxzZQorIyAgaWYgSE9TVF9CSVRTX1BFUl9fX0lOVDY0ID49IDY0CisjICAgZGVmaW5lIEhPU1RfQklUU19QRVJfV0lERV9JTlQgSE9TVF9CSVRTX1BFUl9fX0lOVDY0CisjICAgZGVmaW5lIEhPU1RfV0lERV9JTlQgX19pbnQ2NAorIyAgIGRlZmluZSBIT1NUX1dJREVfSU5UX0MoWCkgWCAjIyBpNjQKKyMgIGVsc2UKKyAgICAjZXJyb3IgIlVuYWJsZSB0byBmaW5kIGEgc3VpdGFibGUgdHlwZSBmb3IgSE9TVF9XSURFX0lOVCIKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBIT1NUX1dJREVfSU5UXzEgSE9TVF9XSURFX0lOVF9DKDEpCisKKy8qIFRoaXMgaXMgYSBtYWdpYyBpZGVudGlmaWVyIHdoaWNoIGFsbG93cyBHQ0MgdG8gZmlndXJlIG91dCB0aGUgdHlwZQorICAgb2YgSE9TVF9XSURFX0lOVCBmb3IgJXdkIHNwZWNpZmllciBjaGVja3MuICBZb3UgbXVzdCBpc3N1ZSB0aGlzCisgICB0eXBlZGVmIGJlZm9yZSB1c2luZyB0aGUgX19hc21fZnByaW50Zl9fIGZvcm1hdCBhdHRyaWJ1dGUuICAqLwordHlwZWRlZiBIT1NUX1dJREVfSU5UIF9fZ2NjX2hvc3Rfd2lkZV9pbnRfXzsKKworLyogVmFyaW91cyBwcmludGYgZm9ybWF0IHN0cmluZ3MgZm9yIEhPU1RfV0lERV9JTlQuICAqLworCisjaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSBIT1NUX0JJVFNfUEVSX0xPTkcKKyMgZGVmaW5lIEhPU1RfV0lERV9JTlRfUFJJTlQgSE9TVF9MT05HX0ZPUk1BVAorIyBkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9DICJMIgorICAvKiAnbG9uZycgbWlnaHQgYmUgMzIgb3IgNjQgYml0cywgYW5kIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvZXMKKyAgICAgbXVzdCBiZSB0d2Vha2VkIGFjY29yZGluZ2x5LiAgKi8KKyMgaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSA2NAorIyAgZGVmaW5lIEhPU1RfV0lERV9JTlRfUFJJTlRfRE9VQkxFX0hFWCBcCisgICAgICIweCUiIEhPU1RfTE9OR19GT1JNQVQgInglMDE2IiBIT1NUX0xPTkdfRk9STUFUICJ4IgorIyBlbHNlCisjICBkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9ET1VCTEVfSEVYIFwKKyAgICAgIjB4JSIgSE9TVF9MT05HX0ZPUk1BVCAieCUwOCIgSE9TVF9MT05HX0ZPUk1BVCAieCIKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBIT1NUX1dJREVfSU5UX1BSSU5UIEhPU1RfTE9OR19MT05HX0ZPUk1BVAorIyBkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9DICJMTCIKKyAgLyogV2UgY2FuIGFzc3VtZSB0aGF0ICdsb25nIGxvbmcnIGlzIGF0IGxlYXN0IDY0IGJpdHMuICAqLworIyBkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9ET1VCTEVfSEVYIFwKKyAgICAiMHglIiBIT1NUX0xPTkdfTE9OR19GT1JNQVQgInglMDE2IiBIT1NUX0xPTkdfTE9OR19GT1JNQVQgIngiCisjZW5kaWYgLyogSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSBIT1NUX0JJVFNfUEVSX0xPTkcgKi8KKworI2RlZmluZSBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQyAiJSIgSE9TVF9XSURFX0lOVF9QUklOVCAiZCIKKyNkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9ERUNfQyBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQyBIT1NUX1dJREVfSU5UX1BSSU5UX0MKKyNkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9VTlNJR05FRCAiJSIgSE9TVF9XSURFX0lOVF9QUklOVCAidSIKKyNkZWZpbmUgSE9TVF9XSURFX0lOVF9QUklOVF9IRVggIiUjIiBIT1NUX1dJREVfSU5UX1BSSU5UICJ4IgorI2RlZmluZSBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWF9QVVJFICIlIiBIT1NUX1dJREVfSU5UX1BSSU5UICJ4IgorCisvKiBTZXQgSE9TVF9XSURFU1RfSU5ULiAgVGhpcyBpcyBhIDY0LWJpdCB0eXBlIHVubGVzcyB0aGUgY29tcGlsZXIKKyAgIGluIHVzZSBoYXMgbm8gNjQtYml0IHR5cGUgYXQgYWxsOyBpbiB0aGF0IGNhc2UgaXQncyAzMiBiaXRzLiAgKi8KKworI2lmIEhPU1RfQklUU19QRVJfV0lERV9JTlQgPj0gNjQgXAorICAgIHx8IChIT1NUX0JJVFNfUEVSX0xPTkdMT05HIDwgNjQgJiYgSE9TVF9CSVRTX1BFUl9fX0lOVDY0IDwgNjQpCisjIGRlZmluZSBIT1NUX1dJREVTVF9JTlQJCSAgICAgIEhPU1RfV0lERV9JTlQKKyMgZGVmaW5lIEhPU1RfQklUU19QRVJfV0lERVNUX0lOVAkgICAgICBIT1NUX0JJVFNfUEVSX1dJREVfSU5UCisjIGRlZmluZSBIT1NUX1dJREVTVF9JTlRfUFJJTlQgICAgICAgICAgICAgICAgSE9TVF9XSURFX0lOVF9QUklOVAorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RFQwkgICAgICBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQworIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RFQ19DCSAgICAgIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDX0MKKyMgZGVmaW5lIEhPU1RfV0lERVNUX0lOVF9QUklOVF9VTlNJR05FRAkgICAgICBIT1NUX1dJREVfSU5UX1BSSU5UX1VOU0lHTkVECisjIGRlZmluZSBIT1NUX1dJREVTVF9JTlRfUFJJTlRfSEVYCSAgICAgIEhPU1RfV0lERV9JTlRfUFJJTlRfSEVYCisjIGRlZmluZSBIT1NUX1dJREVTVF9JTlRfUFJJTlRfRE9VQkxFX0hFWCAgICAgSE9TVF9XSURFX0lOVF9QUklOVF9ET1VCTEVfSEVYCisjIGRlZmluZSBIT1NUX1dJREVTVF9JTlRfQyhYKQkJICAgICAgSE9TVF9XSURFX0lOVChYKQorI2Vsc2UKKyMgaWYgSE9TVF9CSVRTX1BFUl9MT05HTE9ORyA+PSA2NAorIyAgZGVmaW5lIEhPU1RfQklUU19QRVJfV0lERVNUX0lOVAkgICAgICBIT1NUX0JJVFNfUEVSX0xPTkdMT05HCisjICBkZWZpbmUgSE9TVF9XSURFU1RfSU5UCQkgICAgICBsb25nIGxvbmcKKyMgIGRlZmluZSBIT1NUX1dJREVTVF9JTlRfQyhYKQkJICAgICAgWCAjIyBMTAorIyBlbHNlCisjICBpZiBIT1NUX0JJVFNfUEVSX19fSU5UNjQgPj0gNjQKKyMgICBkZWZpbmUgSE9TVF9CSVRTX1BFUl9XSURFU1RfSU5UCSAgICAgIEhPU1RfQklUU19QRVJfX19JTlQ2NAorIyAgIGRlZmluZSBIT1NUX1dJREVTVF9JTlQJCSAgICAgIF9faW50NjQKKyMgICBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX0MoWCkJCSAgICAgIFggIyMgaTY0CisjICBlbHNlCisgICAgI2Vycm9yICJUaGlzIGxpbmUgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gcmVhY2giCisjICBlbmRpZgorIyBlbmRpZgorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UICAgICAgICAgICAgICAgIEhPU1RfTE9OR19MT05HX0ZPUk1BVAorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RFQwkgICAgICAiJSIgSE9TVF9MT05HX0xPTkdfRk9STUFUICJkIgorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RFQ19DCSAgICAgICIlIiBIT1NUX0xPTkdfTE9OR19GT1JNQVQgImRMTCIKKyMgZGVmaW5lIEhPU1RfV0lERVNUX0lOVF9QUklOVF9VTlNJR05FRAkgICAgICAiJSIgSE9TVF9MT05HX0xPTkdfRk9STUFUICJ1IgorIyBkZWZpbmUgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0hFWAkgICAgICAiJSMiIEhPU1RfTE9OR19MT05HX0ZPUk1BVCAieCIKKyMgZGVmaW5lIEhPU1RfV0lERVNUX0lOVF9QUklOVF9ET1VCTEVfSEVYICAgICBcCisgICAgIjB4JSIgSE9TVF9MT05HX0xPTkdfRk9STUFUICJ4JTAxNiIgSE9TVF9MT05HX0xPTkdfRk9STUFUICJ4IgorI2VuZGlmCisKKy8qIERlZmluZSBIT1NUX1dJREVTVF9GQVNUX0lOVCB0byB0aGUgd2lkZXN0IGludGVnZXIgdHlwZSBzdXBwb3J0ZWQKKyAgIGVmZmljaWVudGx5IGluIGhhcmR3YXJlLiAgKFRoYXQgaXMsIHRoZSB3aWRlc3QgaW50ZWdlciB0eXBlIHRoYXQgZml0cworICAgaW4gYSBoYXJkd2FyZSByZWdpc3Rlci4pICBOb3JtYWxseSB0aGlzIGlzICJsb25nIiBidXQgb24gc29tZSBob3N0cyBpdAorICAgc2hvdWxkIGJlICJsb25nIGxvbmciIG9yICJfX2ludDY0Ii4gIFRoaXMgaXMgbm8gY29udmVuaWVudCB3YXkgdG8KKyAgIGF1dG9kZXRlY3QgdGhpcywgc28gc3VjaCBzeXN0ZW1zIG11c3Qgc2V0IGEgZmxhZyBpbiBjb25maWcuaG9zdDsgc2VlIHRoZXJlCisgICBmb3IgZGV0YWlscy4gICovCisKKyNpZmRlZiBVU0VfTE9OR19MT05HX0ZPUl9XSURFU1RfRkFTVF9JTlQKKyMgIGlmZGVmIEhBVkVfTE9OR19MT05HCisjICAgIGRlZmluZSBIT1NUX1dJREVTVF9GQVNUX0lOVCBsb25nIGxvbmcKKyMgICAgZGVmaW5lIEhPU1RfQklUU19QRVJfV0lERVNUX0ZBU1RfSU5UIEhPU1RfQklUU19QRVJfTE9OR0xPTkcKKyMgIGVsaWYgZGVmaW5lZCAoSEFWRV9fX0lOVDY0KQorIyAgICBkZWZpbmUgSE9TVF9XSURFU1RfRkFTVF9JTlQgX19pbnQ2NAorIyAgICBkZWZpbmUgSE9TVF9CSVRTX1BFUl9XSURFU1RfRkFTVF9JTlQgSE9TVF9CSVRTX1BFUl9fX0lOVDY0CisjICBlbHNlCisjICAgIGVycm9yICJZb3VyIGhvc3Qgc2FpZCBpdCB3YW50ZWQgdG8gdXNlIGxvbmcgbG9uZyBvciBfX2ludDY0IGJ1dCBuZWl0aGVyIgorIyAgICBlcnJvciAiZXhpc3QiCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBIT1NUX1dJREVTVF9GQVNUX0lOVCBsb25nCisjICBkZWZpbmUgSE9TVF9CSVRTX1BFUl9XSURFU1RfRkFTVF9JTlQgSE9TVF9CSVRTX1BFUl9MT05HCisjZW5kaWYKKworLyogSW5saW5lIGZ1bmN0aW9ucyBvcGVyYXRpbmcgb24gSE9TVF9XSURFX0lOVC4gICovCisjaWYgR0NDX1ZFUlNJT04gPCAzMDA0CisKK2V4dGVybiBpbnQgY2x6X2h3aSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB4KTsKK2V4dGVybiBpbnQgY3R6X2h3aSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB4KTsKK2V4dGVybiBpbnQgZmZzX2h3aSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB4KTsKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2V0IGJpdHMgaW4gWC4gICovCitleHRlcm4gaW50IHBvcGNvdW50X2h3aSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB4KTsKKworLyogUmV0dXJuIGxvZzIsIG9yIC0xIGlmIG5vdCBleGFjdC4gICovCitleHRlcm4gaW50IGV4YWN0X2xvZzIgICAgICAgICAgICAgICAgICAodW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CisKKy8qIFJldHVybiBmbG9vciBvZiBsb2cyLCB3aXRoIC0xIGZvciB6ZXJvLiAgKi8KK2V4dGVybiBpbnQgZmxvb3JfbG9nMiAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKKworLyogUmV0dXJuIHRoZSBzbWFsbGVzdCBuIHN1Y2ggdGhhdCAyKipuID49IFguICAqLworZXh0ZXJuIGludCBjZWlsX2xvZzIJCQkodW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CisKKyNlbHNlIC8qIEdDQ19WRVJTSU9OID49IDMwMDQgKi8KKworLyogRm9yIGNvbnZlbmllbmNlLCBkZWZpbmUgMCAtPiB3b3JkX3NpemUuICAqLworc3RhdGljIGlubGluZSBpbnQKK2Nsel9od2kgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgeCkKK3sKKyAgaWYgKHggPT0gMCkKKyAgICByZXR1cm4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVDsKKyMgaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSBIT1NUX0JJVFNfUEVSX0xPTkcKKyAgcmV0dXJuIF9fYnVpbHRpbl9jbHpsICh4KTsKKyMgZWxpZiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UID09IEhPU1RfQklUU19QRVJfTE9OR0xPTkcKKyAgcmV0dXJuIF9fYnVpbHRpbl9jbHpsbCAoeCk7CisjIGVsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9jbHogKHgpOworIyBlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGludAorY3R6X2h3aSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB4KQoreworICBpZiAoeCA9PSAwKQorICAgIHJldHVybiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UOworIyBpZiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UID09IEhPU1RfQklUU19QRVJfTE9ORworICByZXR1cm4gX19idWlsdGluX2N0emwgKHgpOworIyBlbGlmIEhPU1RfQklUU19QRVJfV0lERV9JTlQgPT0gSE9TVF9CSVRTX1BFUl9MT05HTE9ORworICByZXR1cm4gX19idWlsdGluX2N0emxsICh4KTsKKyMgZWxzZQorICByZXR1cm4gX19idWlsdGluX2N0eiAoeCk7CisjIGVuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitmZnNfaHdpICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHgpCit7CisjIGlmIEhPU1RfQklUU19QRVJfV0lERV9JTlQgPT0gSE9TVF9CSVRTX1BFUl9MT05HCisgIHJldHVybiBfX2J1aWx0aW5fZmZzbCAoeCk7CisjIGVsaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSBIT1NUX0JJVFNfUEVSX0xPTkdMT05HCisgIHJldHVybiBfX2J1aWx0aW5fZmZzbGwgKHgpOworIyBlbHNlCisgIHJldHVybiBfX2J1aWx0aW5fZmZzICh4KTsKKyMgZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQKK3BvcGNvdW50X2h3aSAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB4KQoreworIyBpZiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UID09IEhPU1RfQklUU19QRVJfTE9ORworICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50bCAoeCk7CisjIGVsaWYgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA9PSBIT1NUX0JJVFNfUEVSX0xPTkdMT05HCisgIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbCAoeCk7CisjIGVsc2UKKyAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCAoeCk7CisjIGVuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitmbG9vcl9sb2cyICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHgpCit7CisgIHJldHVybiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIC0gMSAtIGNsel9od2kgKHgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorY2VpbF9sb2cyICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHgpCit7CisgIHJldHVybiBmbG9vcl9sb2cyICh4IC0gMSkgKyAxOworfQorCitzdGF0aWMgaW5saW5lIGludAorZXhhY3RfbG9nMiAodW5zaWduZWQgSE9TVF9XSURFX0lOVCB4KQoreworICByZXR1cm4geCA9PSAoeCAmIC14KSAmJiB4ID8gY3R6X2h3aSAoeCkgOiAtMTsKK30KKworI2VuZGlmIC8qIEdDQ19WRVJTSU9OID49IDMwMDQgKi8KKworI2RlZmluZSBIT1NUX1dJREVfSU5UX01JTiAoSE9TVF9XSURFX0lOVCkgXAorICAoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIDEgPDwgKEhPU1RfQklUU19QRVJfV0lERV9JTlQgLSAxKSkKKyNkZWZpbmUgSE9TVF9XSURFX0lOVF9NQVggKH4oSE9TVF9XSURFX0lOVF9NSU4pKQorCitleHRlcm4gSE9TVF9XSURFX0lOVCBhYnNfaHdpIChIT1NUX1dJREVfSU5UKTsKK2V4dGVybiB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGFic3VfaHdpIChIT1NUX1dJREVfSU5UKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGdjZCAoSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBwb3NfbXVsX2h3aSAoSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBtdWxfaHdpIChIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGxlYXN0X2NvbW1vbl9tdWx0aXBsZSAoSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCk7CisKKyNlbmRpZiAvKiAhIEdDQ19IV0lOVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5jcGF0aC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2luY3BhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWMwZDdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2luY3BhdGguaApAQCAtMCwwICsxLDM0IEBACisvKiBTZXQgdXAgY29tYmluZWQgaW5jbHVkZSBwYXRoIGZvciB0aGUgcHJlcHJvY2Vzc29yLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgIGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworZXh0ZXJuIHZvaWQgc3BsaXRfcXVvdGVfY2hhaW4gKHZvaWQpOworZXh0ZXJuIHZvaWQgYWRkX3BhdGggKGNoYXIgKiwgaW50LCBpbnQsIGJvb2wpOworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaW5jbHVkZV9jaGFpbnMgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqLAorCQkJCSAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJICAgICBpbnQsIGludCwgaW50KTsKK2V4dGVybiB2b2lkIGFkZF9jcHBfZGlyX3BhdGggKHN0cnVjdCBjcHBfZGlyICosIGludCk7CitleHRlcm4gc3RydWN0IGNwcF9kaXIgKmdldF9hZGRlZF9jcHBfZGlycyAoaW50KTsKKworc3RydWN0IHRhcmdldF9jX2luY3BhdGhfcyB7CisgIC8qIERvIGV4dHJhIGluY2x1ZGVzIHByb2Nlc3NpbmcuICBTVERJTkMgaXMgZmFsc2UgaWZmIC1ub3N0ZGluYyB3YXMgZ2l2ZW4uICAqLworICB2b2lkICgqZXh0cmFfcHJlX2luY2x1ZGVzKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisgIHZvaWQgKCpleHRyYV9pbmNsdWRlcykgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworfTsKKworZXh0ZXJuIHN0cnVjdCB0YXJnZXRfY19pbmNwYXRoX3MgdGFyZ2V0X2NfaW5jcGF0aDsKKworZW51bSB7IFFVT1RFID0gMCwgQlJBQ0tFVCwgU1lTVEVNLCBBRlRFUiB9OwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lucHV0LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5wdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmY2ZGUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lucHV0LmgKQEAgLTAsMCArMSw2NyBAQAorLyogRGVjbGFyYXRpb25zIGZvciB2YXJpYWJsZXMgcmVsYXRpbmcgdG8gcmVhZGluZyB0aGUgc291cmNlIGZpbGUuCisgICBVc2VkIGJ5IHBhcnNlcnMsIGxleGljYWwgYW5hbHl6ZXJzLCBhbmQgZXJyb3IgbWVzc2FnZSByb3V0aW5lcy4KKyAgIENvcHlyaWdodCAoQykgMTk5My0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfSU5QVVRfSAorI2RlZmluZSBHQ0NfSU5QVVRfSAorCisjaW5jbHVkZSAibGluZS1tYXAuaCIKKworZXh0ZXJuIEdUWSgoKSkgc3RydWN0IGxpbmVfbWFwcyAqbGluZV90YWJsZTsKKworLyogQSB2YWx1ZSB3aGljaCB3aWxsIG5ldmVyIGJlIHVzZWQgdG8gcmVwcmVzZW50IGEgcmVhbCBsb2NhdGlvbi4gICovCisjZGVmaW5lIFVOS05PV05fTE9DQVRJT04gKChzb3VyY2VfbG9jYXRpb24pIDApCisKKy8qIFRoZSBsb2NhdGlvbiBmb3IgZGVjbGFyYXRpb25zIGluICI8YnVpbHQtaW4+IiAqLworI2RlZmluZSBCVUlMVElOU19MT0NBVElPTiAoKHNvdXJjZV9sb2NhdGlvbikgMSkKKworLyogbGluZS1tYXAuYyByZXNlcnZlcyBSRVNFUlZFRF9MT0NBVElPTl9DT1VOVCB0byB0aGUgdXNlci4gIEVuc3VyZQorICAgYm90aCBVTktOT1dOX0xPQ0FUSU9OIGFuZCBCVUlMVElOU19MT0NBVElPTiBmaXQgaW50byB0aGF0LiAgKi8KK2V4dGVybiBjaGFyIGJ1aWx0aW5zX2xvY2F0aW9uX2NoZWNrWyhCVUlMVElOU19MT0NBVElPTgorCQkJCSAgICAgPCBSRVNFUlZFRF9MT0NBVElPTl9DT1VOVCkgPyAxIDogLTFdOworCitleHRlcm4gZXhwYW5kZWRfbG9jYXRpb24gZXhwYW5kX2xvY2F0aW9uIChzb3VyY2VfbG9jYXRpb24pOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBsb2NhdGlvbl9nZXRfc291cmNlX2xpbmUoZXhwYW5kZWRfbG9jYXRpb24geGxvYyk7CitleHRlcm4gZXhwYW5kZWRfbG9jYXRpb24gZXhwYW5kX2xvY2F0aW9uX3RvX3NwZWxsaW5nX3BvaW50IChzb3VyY2VfbG9jYXRpb24pOworZXh0ZXJuIHNvdXJjZV9sb2NhdGlvbiBleHBhbnNpb25fcG9pbnRfbG9jYXRpb25faWZfaW5fc3lzdGVtX2hlYWRlciAoc291cmNlX2xvY2F0aW9uKTsKKworLyogSGlzdG9yaWNhbGx5IEdDQyB1c2VkIGxvY2F0aW9uX3QsIHdoaWxlIGNwcCB1c2VkIHNvdXJjZV9sb2NhdGlvbi4KKyAgIFRoaXMgY291bGQgYmUgcmVtb3ZlZCBidXQgaXQgaGFyZGx5IHNlZW1zIHdvcnRoIHRoZSBlZmZvcnQuICAqLwordHlwZWRlZiBzb3VyY2VfbG9jYXRpb24gbG9jYXRpb25fdDsKKworZXh0ZXJuIGxvY2F0aW9uX3QgaW5wdXRfbG9jYXRpb247CisKKyNkZWZpbmUgTE9DQVRJT05fRklMRShMT0MpICgoZXhwYW5kX2xvY2F0aW9uIChMT0MpKS5maWxlKQorI2RlZmluZSBMT0NBVElPTl9MSU5FKExPQykgKChleHBhbmRfbG9jYXRpb24gKExPQykpLmxpbmUpCisjZGVmaW5lIExPQ0FUSU9OX0NPTFVNTihMT0MpKChleHBhbmRfbG9jYXRpb24gKExPQykpLmNvbHVtbikKKyNkZWZpbmUgTE9DQVRJT05fTE9DVVMoTE9DKSBcCisgICgoSVNfQURIT0NfTE9DKExPQykpID8gZ2V0X2xvY2F0aW9uX2Zyb21fYWRob2NfbG9jIChsaW5lX3RhYmxlLCBMT0MpIDogKExPQykpCisjZGVmaW5lIExPQ0FUSU9OX0JMT0NLKExPQykgXAorICAoKHRyZWUpICgoSVNfQURIT0NfTE9DIChMT0MpKSA/IGdldF9kYXRhX2Zyb21fYWRob2NfbG9jIChsaW5lX3RhYmxlLCAoTE9DKSkgXAorICA6IE5VTEwpKQorCisjZGVmaW5lIGlucHV0X2xpbmUgTE9DQVRJT05fTElORSAoaW5wdXRfbG9jYXRpb24pCisjZGVmaW5lIGlucHV0X2ZpbGVuYW1lIExPQ0FUSU9OX0ZJTEUgKGlucHV0X2xvY2F0aW9uKQorI2RlZmluZSBpbl9zeXN0ZW1faGVhZGVyX2F0KExPQykgXAorICAoKGxpbmVtYXBfbG9jYXRpb25faW5fc3lzdGVtX2hlYWRlcl9wIChsaW5lX3RhYmxlLCBMT0MpKSkKKyNkZWZpbmUgaW5fc3lzdGVtX2hlYWRlciAoaW5fc3lzdGVtX2hlYWRlcl9hdCAoaW5wdXRfbG9jYXRpb24pKQorCit2b2lkIGR1bXBfbGluZV90YWJsZV9zdGF0aXN0aWNzICh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1jb25zdGFudHMuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pbnNuLWNvbnN0YW50cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMmYxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1jb25zdGFudHMuaApAQCAtMCwwICsxLDE3MCBAQAorLyogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHByb2dyYW0gYGdlbmNvbnN0YW50cycKKyAgIGZyb20gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gZmlsZSBgbWQnLiAgKi8KKworI2lmbmRlZiBHQ0NfSU5TTl9DT05TVEFOVFNfSAorI2RlZmluZSBHQ0NfSU5TTl9DT05TVEFOVFNfSAorCisjZGVmaW5lIFIxM19SRUdOVU0gMTMKKyNkZWZpbmUgUjdfUkVHTlVNIDcKKyNkZWZpbmUgUjE2X1JFR05VTSAxNgorI2RlZmluZSBSMjNfUkVHTlVNIDIzCisjZGVmaW5lIFIxOV9SRUdOVU0gMTkKKyNkZWZpbmUgUjI2X1JFR05VTSAyNgorI2RlZmluZSBSMjlfUkVHTlVNIDI5CisjZGVmaW5lIFIwX1JFR05VTSAwCisjZGVmaW5lIElQMF9SRUdOVU0gMTYKKyNkZWZpbmUgUjNfUkVHTlVNIDMKKyNkZWZpbmUgU1BfUkVHTlVNIDMxCisjZGVmaW5lIFI2X1JFR05VTSA2CisjZGVmaW5lIFI5X1JFR05VTSA5CisjZGVmaW5lIFYwX1JFR05VTSAzMgorI2RlZmluZSBSOF9SRUdOVU0gOAorI2RlZmluZSBWMTVfUkVHTlVNIDQ3CisjZGVmaW5lIFIxMV9SRUdOVU0gMTEKKyNkZWZpbmUgUjE0X1JFR05VTSAxNAorI2RlZmluZSBSMTdfUkVHTlVNIDE3CisjZGVmaW5lIFIyNF9SRUdOVU0gMjQKKyNkZWZpbmUgUjI3X1JFR05VTSAyNworI2RlZmluZSBSMV9SRUdOVU0gMQorI2RlZmluZSBSNF9SRUdOVU0gNAorI2RlZmluZSBWMzFfUkVHTlVNIDYzCisjZGVmaW5lIEFQX1JFR05VTSA2NQorI2RlZmluZSBSMjBfUkVHTlVNIDIwCisjZGVmaW5lIFIzMF9SRUdOVU0gMzAKKyNkZWZpbmUgTFJfUkVHTlVNIDMwCisjZGVmaW5lIFNGUF9SRUdOVU0gNjQKKyNkZWZpbmUgUjEyX1JFR05VTSAxMgorI2RlZmluZSBSMTVfUkVHTlVNIDE1CisjZGVmaW5lIFIyMl9SRUdOVU0gMjIKKyNkZWZpbmUgQ0NfUkVHTlVNIDY2CisjZGVmaW5lIFIxOF9SRUdOVU0gMTgKKyNkZWZpbmUgUjI1X1JFR05VTSAyNQorI2RlZmluZSBSMjhfUkVHTlVNIDI4CisjZGVmaW5lIFIyX1JFR05VTSAyCisjZGVmaW5lIElQMV9SRUdOVU0gMTcKKyNkZWZpbmUgUjEwX1JFR05VTSAxMAorI2RlZmluZSBSNV9SRUdOVU0gNQorI2RlZmluZSBSMjFfUkVHTlVNIDIxCisKK2VudW0gdW5zcGVjIHsKKyAgVU5TUEVDX0NBU0VTSSA9IDAsCisgIFVOU1BFQ19DTFMgPSAxLAorICBVTlNQRUNfRlJFQ1BFID0gMiwKKyAgVU5TUEVDX0ZSRUNQUyA9IDMsCisgIFVOU1BFQ19GUkVDUFggPSA0LAorICBVTlNQRUNfRlJJTlRBID0gNSwKKyAgVU5TUEVDX0ZSSU5USSA9IDYsCisgIFVOU1BFQ19GUklOVE0gPSA3LAorICBVTlNQRUNfRlJJTlROID0gOCwKKyAgVU5TUEVDX0ZSSU5UUCA9IDksCisgIFVOU1BFQ19GUklOVFggPSAxMCwKKyAgVU5TUEVDX0ZSSU5UWiA9IDExLAorICBVTlNQRUNfR09UU01BTExQSUMgPSAxMiwKKyAgVU5TUEVDX0dPVFNNQUxMVExTID0gMTMsCisgIFVOU1BFQ19HT1RUSU5ZUElDID0gMTQsCisgIFVOU1BFQ19MRDIgPSAxNSwKKyAgVU5TUEVDX0xEMyA9IDE2LAorICBVTlNQRUNfTEQ0ID0gMTcsCisgIFVOU1BFQ19NQiA9IDE4LAorICBVTlNQRUNfTk9QID0gMTksCisgIFVOU1BFQ19QUkxHX1NUSyA9IDIwLAorICBVTlNQRUNfUkJJVCA9IDIxLAorICBVTlNQRUNfU1QyID0gMjIsCisgIFVOU1BFQ19TVDMgPSAyMywKKyAgVU5TUEVDX1NUNCA9IDI0LAorICBVTlNQRUNfVExTID0gMjUsCisgIFVOU1BFQ19UTFNERVNDID0gMjYsCisgIFVOU1BFQ19WU1RSVUNURFVNTVkgPSAyNywKKyAgVU5TUEVDX0FTSElGVF9TSUdORUQgPSAyOCwKKyAgVU5TUEVDX0FTSElGVF9VTlNJR05FRCA9IDI5LAorICBVTlNQRUNfRk1BWCA9IDMwLAorICBVTlNQRUNfRk1BWE5NViA9IDMxLAorICBVTlNQRUNfRk1BWFYgPSAzMiwKKyAgVU5TUEVDX0ZNSU4gPSAzMywKKyAgVU5TUEVDX0ZNSU5OTVYgPSAzNCwKKyAgVU5TUEVDX0ZNSU5WID0gMzUsCisgIFVOU1BFQ19GQUREViA9IDM2LAorICBVTlNQRUNfU0FERFYgPSAzNywKKyAgVU5TUEVDX1VBRERWID0gMzgsCisgIFVOU1BFQ19TTUFYViA9IDM5LAorICBVTlNQRUNfU01JTlYgPSA0MCwKKyAgVU5TUEVDX1VNQVhWID0gNDEsCisgIFVOU1BFQ19VTUlOViA9IDQyLAorICBVTlNQRUNfU0hBREQgPSA0MywKKyAgVU5TUEVDX1VIQUREID0gNDQsCisgIFVOU1BFQ19TUkhBREQgPSA0NSwKKyAgVU5TUEVDX1VSSEFERCA9IDQ2LAorICBVTlNQRUNfU0hTVUIgPSA0NywKKyAgVU5TUEVDX1VIU1VCID0gNDgsCisgIFVOU1BFQ19TUkhTVUIgPSA0OSwKKyAgVU5TUEVDX1VSSFNVQiA9IDUwLAorICBVTlNQRUNfQURESE4gPSA1MSwKKyAgVU5TUEVDX1JBRERITiA9IDUyLAorICBVTlNQRUNfU1VCSE4gPSA1MywKKyAgVU5TUEVDX1JTVUJITiA9IDU0LAorICBVTlNQRUNfQURESE4yID0gNTUsCisgIFVOU1BFQ19SQURESE4yID0gNTYsCisgIFVOU1BFQ19TVUJITjIgPSA1NywKKyAgVU5TUEVDX1JTVUJITjIgPSA1OCwKKyAgVU5TUEVDX1NRRE1VTEggPSA1OSwKKyAgVU5TUEVDX1NRUkRNVUxIID0gNjAsCisgIFVOU1BFQ19QTVVMID0gNjEsCisgIFVOU1BFQ19VU1FBREQgPSA2MiwKKyAgVU5TUEVDX1NVUUFERCA9IDYzLAorICBVTlNQRUNfU1FYVFVOID0gNjQsCisgIFVOU1BFQ19TUVhUTiA9IDY1LAorICBVTlNQRUNfVVFYVE4gPSA2NiwKKyAgVU5TUEVDX1NTUkEgPSA2NywKKyAgVU5TUEVDX1VTUkEgPSA2OCwKKyAgVU5TUEVDX1NSU1JBID0gNjksCisgIFVOU1BFQ19VUlNSQSA9IDcwLAorICBVTlNQRUNfU1JTSFIgPSA3MSwKKyAgVU5TUEVDX1VSU0hSID0gNzIsCisgIFVOU1BFQ19TUVNITFUgPSA3MywKKyAgVU5TUEVDX1NRU0hMID0gNzQsCisgIFVOU1BFQ19VUVNITCA9IDc1LAorICBVTlNQRUNfU1FTSFJVTiA9IDc2LAorICBVTlNQRUNfU1FSU0hSVU4gPSA3NywKKyAgVU5TUEVDX1NRU0hSTiA9IDc4LAorICBVTlNQRUNfVVFTSFJOID0gNzksCisgIFVOU1BFQ19TUVJTSFJOID0gODAsCisgIFVOU1BFQ19VUVJTSFJOID0gODEsCisgIFVOU1BFQ19TU0hMID0gODIsCisgIFVOU1BFQ19VU0hMID0gODMsCisgIFVOU1BFQ19TUlNITCA9IDg0LAorICBVTlNQRUNfVVJTSEwgPSA4NSwKKyAgVU5TUEVDX1NRUlNITCA9IDg2LAorICBVTlNQRUNfVVFSU0hMID0gODcsCisgIFVOU1BFQ19TU0xJID0gODgsCisgIFVOU1BFQ19VU0xJID0gODksCisgIFVOU1BFQ19TU1JJID0gOTAsCisgIFVOU1BFQ19VU1JJID0gOTEsCisgIFVOU1BFQ19TU0hMTCA9IDkyLAorICBVTlNQRUNfVVNITEwgPSA5MywKKyAgVU5TUEVDX0FERFAgPSA5NCwKKyAgVU5TUEVDX1RCTCA9IDk1LAorICBVTlNQRUNfQ09OQ0FUID0gOTYsCisgIFVOU1BFQ19aSVAxID0gOTcsCisgIFVOU1BFQ19aSVAyID0gOTgsCisgIFVOU1BFQ19VWlAxID0gOTksCisgIFVOU1BFQ19VWlAyID0gMTAwLAorICBVTlNQRUNfVFJOMSA9IDEwMSwKKyAgVU5TUEVDX1RSTjIgPSAxMDIKK307CisjZGVmaW5lIE5VTV9VTlNQRUNfVkFMVUVTIDEwMworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHVuc3BlY19zdHJpbmdzW107CisKK2VudW0gdW5zcGVjdiB7CisgIFVOU1BFQ1ZfRUhfUkVUVVJOID0gMCwKKyAgVU5TUEVDVl9MWCA9IDEsCisgIFVOU1BFQ1ZfU1ggPSAyLAorICBVTlNQRUNWX0xEQSA9IDMsCisgIFVOU1BFQ1ZfU1RMID0gNCwKKyAgVU5TUEVDVl9BVE9NSUNfQ01QU1cgPSA1LAorICBVTlNQRUNWX0FUT01JQ19FWENIRyA9IDYsCisgIFVOU1BFQ1ZfQVRPTUlDX09QID0gNworfTsKKyNkZWZpbmUgTlVNX1VOU1BFQ1ZfVkFMVUVTIDgKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCB1bnNwZWN2X3N0cmluZ3NbXTsKKworI2VuZGlmIC8qIEdDQ19JTlNOX0NPTlNUQU5UU19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1mbGFncy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2luc24tZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWEzNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2luc24tZmxhZ3MuaApAQCAtMCwwICsxLDQyNjAgQEAKKy8qIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBwcm9ncmFtIGBnZW5mbGFncycKKyAgIGZyb20gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gZmlsZSBgbWQnLiAgKi8KKworI2lmbmRlZiBHQ0NfSU5TTl9GTEFHU19ICisjZGVmaW5lIEdDQ19JTlNOX0ZMQUdTX0gKKworI2RlZmluZSBIQVZFX2luZGlyZWN0X2p1bXAgMQorI2RlZmluZSBIQVZFX2p1bXAgMQorI2RlZmluZSBIQVZFX2Nhc2VzaV9kaXNwYXRjaCAxCisjZGVmaW5lIEhBVkVfbm9wIDEKKyNkZWZpbmUgSEFWRV9laF9yZXR1cm4gMQorI2RlZmluZSBIQVZFX2luc3ZfaW1tc2kgKFVJTlRWQUwgKG9wZXJhbmRzWzFdKSA8IEdFVF9NT0RFX0JJVFNJWkUgKFNJbW9kZSkgXAorICAgJiYgVUlOVFZBTCAob3BlcmFuZHNbMV0pICUgMTYgPT0gMCkKKyNkZWZpbmUgSEFWRV9pbnN2X2ltbWRpIChVSU5UVkFMIChvcGVyYW5kc1sxXSkgPCBHRVRfTU9ERV9CSVRTSVpFIChESW1vZGUpIFwKKyAgICYmIFVJTlRWQUwgKG9wZXJhbmRzWzFdKSAlIDE2ID09IDApCisjZGVmaW5lIEhBVkVfbG9hZF9wYWlyc2kgKHJ0eF9lcXVhbF9wIChYRVhQIChvcGVyYW5kc1szXSwgMCksIFwKKwkJcGx1c19jb25zdGFudCAoUG1vZGUsIFwKKwkJCSAgICAgICBYRVhQIChvcGVyYW5kc1sxXSwgMCksIFwKKwkJCSAgICAgICBHRVRfTU9ERV9TSVpFIChTSW1vZGUpKSkpCisjZGVmaW5lIEhBVkVfbG9hZF9wYWlyZGkgKHJ0eF9lcXVhbF9wIChYRVhQIChvcGVyYW5kc1szXSwgMCksIFwKKwkJcGx1c19jb25zdGFudCAoUG1vZGUsIFwKKwkJCSAgICAgICBYRVhQIChvcGVyYW5kc1sxXSwgMCksIFwKKwkJCSAgICAgICBHRVRfTU9ERV9TSVpFIChESW1vZGUpKSkpCisjZGVmaW5lIEhBVkVfc3RvcmVfcGFpcnNpIChydHhfZXF1YWxfcCAoWEVYUCAob3BlcmFuZHNbMl0sIDApLCBcCisJCXBsdXNfY29uc3RhbnQgKFBtb2RlLCBcCisJCQkgICAgICAgWEVYUCAob3BlcmFuZHNbMF0sIDApLCBcCisJCQkgICAgICAgR0VUX01PREVfU0laRSAoU0ltb2RlKSkpKQorI2RlZmluZSBIQVZFX3N0b3JlX3BhaXJkaSAocnR4X2VxdWFsX3AgKFhFWFAgKG9wZXJhbmRzWzJdLCAwKSwgXAorCQlwbHVzX2NvbnN0YW50IChQbW9kZSwgXAorCQkJICAgICAgIFhFWFAgKG9wZXJhbmRzWzBdLCAwKSwgXAorCQkJICAgICAgIEdFVF9NT0RFX1NJWkUgKERJbW9kZSkpKSkKKyNkZWZpbmUgSEFWRV9sb2FkX3BhaXJzZiAocnR4X2VxdWFsX3AgKFhFWFAgKG9wZXJhbmRzWzNdLCAwKSwgXAorCQlwbHVzX2NvbnN0YW50IChQbW9kZSwgXAorCQkJICAgICAgIFhFWFAgKG9wZXJhbmRzWzFdLCAwKSwgXAorCQkJICAgICAgIEdFVF9NT0RFX1NJWkUgKFNGbW9kZSkpKSkKKyNkZWZpbmUgSEFWRV9sb2FkX3BhaXJkZiAocnR4X2VxdWFsX3AgKFhFWFAgKG9wZXJhbmRzWzNdLCAwKSwgXAorCQlwbHVzX2NvbnN0YW50IChQbW9kZSwgXAorCQkJICAgICAgIFhFWFAgKG9wZXJhbmRzWzFdLCAwKSwgXAorCQkJICAgICAgIEdFVF9NT0RFX1NJWkUgKERGbW9kZSkpKSkKKyNkZWZpbmUgSEFWRV9zdG9yZV9wYWlyc2YgKHJ0eF9lcXVhbF9wIChYRVhQIChvcGVyYW5kc1syXSwgMCksIFwKKwkJcGx1c19jb25zdGFudCAoUG1vZGUsIFwKKwkJCSAgICAgICBYRVhQIChvcGVyYW5kc1swXSwgMCksIFwKKwkJCSAgICAgICBHRVRfTU9ERV9TSVpFIChTRm1vZGUpKSkpCisjZGVmaW5lIEhBVkVfc3RvcmVfcGFpcmRmIChydHhfZXF1YWxfcCAoWEVYUCAob3BlcmFuZHNbMl0sIDApLCBcCisJCXBsdXNfY29uc3RhbnQgKFBtb2RlLCBcCisJCQkgICAgICAgWEVYUCAob3BlcmFuZHNbMF0sIDApLCBcCisJCQkgICAgICAgR0VUX01PREVfU0laRSAoREZtb2RlKSkpKQorI2RlZmluZSBIQVZFX2xvYWR3Yl9wYWlyc2lfZGkgKChJTlRWQUwgKG9wZXJhbmRzWzVdKSA9PSBJTlRWQUwgKG9wZXJhbmRzWzRdKSArIEdFVF9NT0RFX1NJWkUgKFNJbW9kZSkpICYmIChQbW9kZSA9PSBESW1vZGUpKQorI2RlZmluZSBIQVZFX2xvYWR3Yl9wYWlyZGlfZGkgKChJTlRWQUwgKG9wZXJhbmRzWzVdKSA9PSBJTlRWQUwgKG9wZXJhbmRzWzRdKSArIEdFVF9NT0RFX1NJWkUgKERJbW9kZSkpICYmIChQbW9kZSA9PSBESW1vZGUpKQorI2RlZmluZSBIQVZFX3N0b3Jld2JfcGFpcnNpX2RpICgoSU5UVkFMIChvcGVyYW5kc1s1XSkgPT0gSU5UVkFMIChvcGVyYW5kc1s0XSkgKyBHRVRfTU9ERV9TSVpFIChTSW1vZGUpKSAmJiAoUG1vZGUgPT0gREltb2RlKSkKKyNkZWZpbmUgSEFWRV9zdG9yZXdiX3BhaXJkaV9kaSAoKElOVFZBTCAob3BlcmFuZHNbNV0pID09IElOVFZBTCAob3BlcmFuZHNbNF0pICsgR0VUX01PREVfU0laRSAoREltb2RlKSkgJiYgKFBtb2RlID09IERJbW9kZSkpCisjZGVmaW5lIEhBVkVfc3Vic2kzIDEKKyNkZWZpbmUgSEFWRV9zdWJkaTMgMQorI2RlZmluZSBIQVZFX2Fic2RpMiAxCisjZGVmaW5lIEhBVkVfbmVnc2kyIDEKKyNkZWZpbmUgSEFWRV9uZWdkaTIgMQorI2RlZmluZSBIQVZFX211bHNpMyAxCisjZGVmaW5lIEhBVkVfbXVsZGkzIDEKKyNkZWZpbmUgSEFWRV9tdWxzaWRpMyAxCisjZGVmaW5lIEhBVkVfdW11bHNpZGkzIDEKKyNkZWZpbmUgSEFWRV9tYWRkc2lkaTQgMQorI2RlZmluZSBIQVZFX3VtYWRkc2lkaTQgMQorI2RlZmluZSBIQVZFX21zdWJzaWRpNCAxCisjZGVmaW5lIEhBVkVfdW1zdWJzaWRpNCAxCisjZGVmaW5lIEhBVkVfc211bGRpM19oaWdocGFydCAxCisjZGVmaW5lIEhBVkVfdW11bGRpM19oaWdocGFydCAxCisjZGVmaW5lIEhBVkVfZGl2c2kzIDEKKyNkZWZpbmUgSEFWRV91ZGl2c2kzIDEKKyNkZWZpbmUgSEFWRV9kaXZkaTMgMQorI2RlZmluZSBIQVZFX3VkaXZkaTMgMQorI2RlZmluZSBIQVZFX2NzdG9yZXFpX25lZyAxCisjZGVmaW5lIEhBVkVfY3N0b3JlaGlfbmVnIDEKKyNkZWZpbmUgSEFWRV9jc3RvcmVzaV9uZWcgMQorI2RlZmluZSBIQVZFX2NzdG9yZWRpX25lZyAxCisjZGVmaW5lIEhBVkVfY3NpbmMzc2lfaW5zbiAxCisjZGVmaW5lIEhBVkVfY3NpbmMzZGlfaW5zbiAxCisjZGVmaW5lIEhBVkVfYW5kc2kzIDEKKyNkZWZpbmUgSEFWRV9pb3JzaTMgMQorI2RlZmluZSBIQVZFX3hvcnNpMyAxCisjZGVmaW5lIEhBVkVfYW5kZGkzIDEKKyNkZWZpbmUgSEFWRV9pb3JkaTMgMQorI2RlZmluZSBIQVZFX3hvcmRpMyAxCisjZGVmaW5lIEhBVkVfb25lX2NtcGxzaTIgMQorI2RlZmluZSBIQVZFX29uZV9jbXBsZGkyIDEKKyNkZWZpbmUgSEFWRV9jbHpzaTIgMQorI2RlZmluZSBIQVZFX2NsemRpMiAxCisjZGVmaW5lIEhBVkVfY2xyc2JzaTIgMQorI2RlZmluZSBIQVZFX2NscnNiZGkyIDEKKyNkZWZpbmUgSEFWRV9yYml0c2kyIDEKKyNkZWZpbmUgSEFWRV9yYml0ZGkyIDEKKyNkZWZpbmUgSEFWRV9ic3dhcHNpMiAxCisjZGVmaW5lIEhBVkVfYnN3YXBkaTIgMQorI2RlZmluZSBIQVZFX2Jzd2FwaGkyIDEKKyNkZWZpbmUgSEFWRV9idHJ1bmNzZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9jZWlsc2YyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZmxvb3JzZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mcmludG5zZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9uZWFyYnlpbnRzZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9yaW50c2YyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfcm91bmRzZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9idHJ1bmNkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9jZWlsZGYyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZmxvb3JkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mcmludG5kZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9uZWFyYnlpbnRkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9yaW50ZGYyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfcm91bmRkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sYnRydW5jc2ZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sY2VpbHNmc2kyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbGZsb29yc2ZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9scm91bmRzZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmcmludG5zZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xidHJ1bmN1c2ZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sY2VpbHVzZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmbG9vcnVzZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xyb3VuZHVzZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmcmludG51c2ZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sYnRydW5jc2ZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sY2VpbHNmZGkyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbGZsb29yc2ZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9scm91bmRzZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmcmludG5zZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xidHJ1bmN1c2ZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sY2VpbHVzZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmbG9vcnVzZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xyb3VuZHVzZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmcmludG51c2ZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sYnRydW5jZGZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sY2VpbGRmc2kyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbGZsb29yZGZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9scm91bmRkZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmcmludG5kZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xidHJ1bmN1ZGZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sY2VpbHVkZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmbG9vcnVkZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xyb3VuZHVkZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmcmludG51ZGZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sYnRydW5jZGZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sY2VpbGRmZGkyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbGZsb29yZGZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9scm91bmRkZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmcmludG5kZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xidHJ1bmN1ZGZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9sY2VpbHVkZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmbG9vcnVkZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xyb3VuZHVkZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2xmcmludG51ZGZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mbWFzZjQgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mbWFkZjQgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mbm1hc2Y0IChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZm5tYWRmNCAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2Ztc3NmNCAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2Ztc2RmNCAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2ZubXNzZjQgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mbm1zZGY0IChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZXh0ZW5kc2ZkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV90cnVuY2Rmc2YyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZml4X3RydW5jc2ZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9maXhfdHJ1bmNzZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2ZpeF90cnVuY2Rmc2kyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZml4X3RydW5jZGZkaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9maXh1bnNfdHJ1bmNzZnNpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2ZpeHVuc190cnVuY3NmZGkyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZml4dW5zX3RydW5jZGZzaTIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9maXh1bnNfdHJ1bmNkZmRpMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2Zsb2F0c2lzZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mbG9hdGRpc2YyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZmxvYXRzaWRmMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2Zsb2F0ZGlkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mbG9hdHVuc3Npc2YyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZmxvYXR1bnNkaXNmMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2Zsb2F0dW5zc2lkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9mbG9hdHVuc2RpZGYyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfYWRkc2YzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfYWRkZGYzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfc3Vic2YzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfc3ViZGYzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbXVsc2YzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbXVsZGYzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZGl2c2YzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfZGl2ZGYzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbmVnc2YyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfbmVnZGYyIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfc3FydHNmMiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX3NxcnRkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9hYnNzZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9hYnNkZjIgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9zbWF4c2YzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfc21heGRmMyAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX3NtaW5zZjMgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9zbWluZGYzIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9mcmVjcGVzZiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZnJlY3B4c2YgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2ZyZWNwZWRmIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9mcmVjcHhkZiAoVEFSR0VUX0ZMT0FUKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZnJlY3Bzc2YgKFRBUkdFVF9GTE9BVCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2ZyZWNwc2RmIChUQVJHRVRfRkxPQVQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9tb3ZkaV90aWxvdyAocmVsb2FkX2NvbXBsZXRlZCB8fCByZWxvYWRfaW5fcHJvZ3Jlc3MpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9tb3ZkaV90ZmxvdyAocmVsb2FkX2NvbXBsZXRlZCB8fCByZWxvYWRfaW5fcHJvZ3Jlc3MpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9tb3ZkaV90aWhpZ2ggKHJlbG9hZF9jb21wbGV0ZWQgfHwgcmVsb2FkX2luX3Byb2dyZXNzKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbW92ZGlfdGZoaWdoIChyZWxvYWRfY29tcGxldGVkIHx8IHJlbG9hZF9pbl9wcm9ncmVzcykKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X21vdnRpaGlnaF9kaSAocmVsb2FkX2NvbXBsZXRlZCB8fCByZWxvYWRfaW5fcHJvZ3Jlc3MpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9tb3Z0ZmhpZ2hfZGkgKHJlbG9hZF9jb21wbGV0ZWQgfHwgcmVsb2FkX2luX3Byb2dyZXNzKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbW92dGlsb3dfZGkgKHJlbG9hZF9jb21wbGV0ZWQgfHwgcmVsb2FkX2luX3Byb2dyZXNzKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbW92dGZsb3dfZGkgKHJlbG9hZF9jb21wbGV0ZWQgfHwgcmVsb2FkX2luX3Byb2dyZXNzKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbW92dGlsb3dfdGlsb3cgKHJlbG9hZF9jb21wbGV0ZWQgfHwgcmVsb2FkX2luX3Byb2dyZXNzKQorI2RlZmluZSBIQVZFX2FkZF9sb3N5bSAxCisjZGVmaW5lIEhBVkVfbGRyX2dvdF9zbWFsbCAxCisjZGVmaW5lIEhBVkVfbGRyX2dvdF90aW55IDEKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xvYWRfdHBfaGFyZCAxCisjZGVmaW5lIEhBVkVfdGxzaWVfc21hbGwgMQorI2RlZmluZSBIQVZFX3Rsc2xlX3NtYWxsIDEKKyNkZWZpbmUgSEFWRV90bHNkZXNjX3NtYWxsIChUQVJHRVRfVExTX0RFU0MpCisjZGVmaW5lIEhBVkVfc3RhY2tfdGllIDEKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfZHVwdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2R1cHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfZHVwdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2R1cHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9kdXB2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfZHVwdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2R1cHYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZHVwX2xhbmV2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2R1cF9sYW5ldjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZHVwX2xhbmV2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2R1cF9sYW5ldjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9kdXBfbGFuZXYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZHVwX2xhbmV2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2R1cF9sYW5ldjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2R1cHYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9kdXB2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfZHVwdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX21vdl9mcm9tX3YxNnFpbG93IChUQVJHRVRfU0lNRCAmJiByZWxvYWRfY29tcGxldGVkKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZfZnJvbV92OGhpbG93IChUQVJHRVRfU0lNRCAmJiByZWxvYWRfY29tcGxldGVkKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZfZnJvbV92NHNpbG93IChUQVJHRVRfU0lNRCAmJiByZWxvYWRfY29tcGxldGVkKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZfZnJvbV92MmRpbG93IChUQVJHRVRfU0lNRCAmJiByZWxvYWRfY29tcGxldGVkKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZfZnJvbV92NHNmbG93IChUQVJHRVRfU0lNRCAmJiByZWxvYWRfY29tcGxldGVkKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZfZnJvbV92MmRmbG93IChUQVJHRVRfU0lNRCAmJiByZWxvYWRfY29tcGxldGVkKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZfZnJvbV92MTZxaWhpZ2ggKFRBUkdFVF9TSU1EICYmIHJlbG9hZF9jb21wbGV0ZWQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX21vdl9mcm9tX3Y4aGloaWdoIChUQVJHRVRfU0lNRCAmJiByZWxvYWRfY29tcGxldGVkKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZfZnJvbV92NHNpaGlnaCAoVEFSR0VUX1NJTUQgJiYgcmVsb2FkX2NvbXBsZXRlZCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjJkaWhpZ2ggKFRBUkdFVF9TSU1EICYmIHJlbG9hZF9jb21wbGV0ZWQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX21vdl9mcm9tX3Y0c2ZoaWdoIChUQVJHRVRfU0lNRCAmJiByZWxvYWRfY29tcGxldGVkKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZfZnJvbV92MmRmaGlnaCAoVEFSR0VUX1NJTUQgJiYgcmVsb2FkX2NvbXBsZXRlZCkKKyNkZWZpbmUgSEFWRV9vcm52OHFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfb3JudjE2cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9vcm52NGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfb3JudjhoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX29ybnYyc2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9vcm52NHNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfb3JudjJkaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2JpY3Y4cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9iaWN2MTZxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2JpY3Y0aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9iaWN2OGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYmljdjJzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2JpY3Y0c2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9iaWN2MmRpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWRkdjhxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FkZHYxNnFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWRkdjRoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FkZHY4aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hZGR2MnNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWRkdjRzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FkZHYyZGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zdWJ2OHFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc3VidjE2cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zdWJ2NGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc3VidjhoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3N1YnYyc2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zdWJ2NHNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc3VidjJkaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX211bHY4cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tdWx2MTZxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX211bHY0aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tdWx2OGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbXVsdjJzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX211bHY0c2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9uZWd2OHFpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbmVndjE2cWkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9uZWd2NGhpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbmVndjhoaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX25lZ3Yyc2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9uZWd2NHNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbmVndjJkaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2Fic3Y4cWkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYnN2MTZxaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2Fic3Y0aGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYnN2OGhpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWJzdjJzaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2Fic3Y0c2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYnN2MmRpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWJkdjhxaV8zIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYmR2MTZxaV8zIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYmR2NGhpXzMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FiZHY4aGlfMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWJkdjJzaV8zIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYmR2NHNpXzMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FiYXY4cWlfMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWJhdjE2cWlfMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWJhdjRoaV8zIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYmF2OGhpXzMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FiYXYyc2lfMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWJhdjRzaV8zIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mYWJkdjJzZl8zIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mYWJkdjRzZl8zIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mYWJkdjJkZl8zIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hbmR2OHFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYW5kdjE2cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hbmR2NGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYW5kdjhoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FuZHYyc2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hbmR2NHNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYW5kdjJkaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2lvcnY4cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9pb3J2MTZxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2lvcnY0aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9pb3J2OGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfaW9ydjJzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2lvcnY0c2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9pb3J2MmRpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfeG9ydjhxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3hvcnYxNnFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfeG9ydjRoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3hvcnY4aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV94b3J2MnNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfeG9ydjRzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3hvcnYyZGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9vbmVfY21wbHY4cWkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9vbmVfY21wbHYxNnFpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2NGhpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2OGhpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2MnNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2NHNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfb25lX2NtcGx2MmRpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY19zZXR2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3NldHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3NldHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfc2V0djhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY19zZXR2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3NldHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9sc2hydjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2xzaHJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2xzaHJ2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfbHNocnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9sc2hydjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2xzaHJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfbHNocnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9hc2hydjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2FzaHJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2FzaHJ2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfYXNocnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9hc2hydjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2FzaHJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfYXNocnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9pbW1fc2hsdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2ltbV9zaGx2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2ltbV9zaGx2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfaW1tX3NobHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9pbW1fc2hsdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2ltbV9zaGx2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfaW1tX3NobHYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9yZWdfc3NobHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9yZWdfc3NobHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NobHY4cWlfdW5zaWduZWQgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9yZWdfc2hsdjE2cWlfdW5zaWduZWQgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9yZWdfc2hsdjRoaV91bnNpZ25lZCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3JlZ19zaGx2OGhpX3Vuc2lnbmVkIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NobHYyc2lfdW5zaWduZWQgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9yZWdfc2hsdjRzaV91bnNpZ25lZCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3JlZ19zaGx2MmRpX3Vuc2lnbmVkIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NobHY4cWlfc2lnbmVkIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfcmVnX3NobHYxNnFpX3NpZ25lZCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3JlZ19zaGx2NGhpX3NpZ25lZCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3JlZ19zaGx2OGhpX3NpZ25lZCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3JlZ19zaGx2MnNpX3NpZ25lZCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3JlZ19zaGx2NHNpX3NpZ25lZCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3JlZ19zaGx2MmRpX3NpZ25lZCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY19zZXR2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3NldHYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfc2V0djRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY19zZXR2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X21sYXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbWxhdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbWxhdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9tbGF2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X21sYXYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbWxhdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9tbHN2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X21sc3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X21sc3Y0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbWxzdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9tbHN2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X21sc3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtYXh2OHFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc21pbnY4cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV91bWF4djhxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3VtaW52OHFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc21heHYxNnFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc21pbnYxNnFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdW1heHYxNnFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdW1pbnYxNnFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc21heHY0aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zbWludjRoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3VtYXh2NGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdW1pbnY0aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zbWF4djhoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtaW52OGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdW1heHY4aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV91bWludjhoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtYXh2MnNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc21pbnYyc2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV91bWF4djJzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3VtaW52MnNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc21heHY0c2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zbWludjRzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3VtYXh2NHNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdW1pbnY0c2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tb3ZlX2xvX3F1YWRfdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdmVfbG9fcXVhZF92OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tb3ZlX2xvX3F1YWRfdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92ZV9sb19xdWFkX3YyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdmVfbG9fcXVhZF92NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tb3ZlX2xvX3F1YWRfdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX21vdmVfaGlfcXVhZF92MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX21vdmVfaGlfcXVhZF92OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfbW92ZV9oaV9xdWFkX3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9tb3ZlX2hpX3F1YWRfdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX21vdmVfaGlfcXVhZF92NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfbW92ZV9oaV9xdWFkX3YyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfcGFja190cnVuY192OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3BhY2tfdHJ1bmNfdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY19wYWNrX3RydW5jX3YyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19wYWNrX3RydW5jX3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19wYWNrX3RydW5jX3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19wYWNrX3RydW5jX3YyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19sb192MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY191bnBhY2t1X2xvX3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3VucGFja3NfbG9fdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY191bnBhY2t1X2xvX3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19sb192NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3VucGFja3VfbG9fdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY191bnBhY2tzX2hpX3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3VucGFja3VfaGlfdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19oaV92OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3VucGFja3VfaGlfdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY191bnBhY2tzX2hpX3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrdV9oaV92NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3NtdWx0X2xvX3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3VtdWx0X2xvX3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3NtdWx0X2xvX3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfdW11bHRfbG9fdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY19zbXVsdF9sb192NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3VtdWx0X2xvX3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfc211bHRfaGlfdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfdW11bHRfaGlfdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfc211bHRfaGlfdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX3ZlY191bXVsdF9oaV92OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfdmVjX3NtdWx0X2hpX3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF92ZWNfdW11bHRfaGlfdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWRkdjJzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FkZHY0c2YzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hZGR2MmRmMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc3VidjJzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3N1YnY0c2YzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zdWJ2MmRmMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbXVsdjJzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX211bHY0c2YzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tdWx2MmRmMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZGl2djJzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2RpdnY0c2YzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9kaXZ2MmRmMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbmVndjJzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX25lZ3Y0c2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9uZWd2MmRmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWJzdjJzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2Fic3Y0c2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYnN2MmRmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZm1hdjJzZjQgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2ZtYXY0c2Y0IChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mbWF2MmRmNCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYnRydW5jdjJzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2NlaWx2MnNmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZmxvb3J2MnNmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZnJpbnRudjJzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX25lYXJieWludHYyc2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yaW50djJzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JvdW5kdjJzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2J0cnVuY3Y0c2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9jZWlsdjRzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2Zsb29ydjRzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2ZyaW50bnY0c2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9uZWFyYnlpbnR2NHNmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmludHY0c2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yb3VuZHY0c2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9idHJ1bmN2MmRmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfY2VpbHYyZGYyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mbG9vcnYyZGYyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mcmludG52MmRmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbmVhcmJ5aW50djJkZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JpbnR2MmRmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcm91bmR2MmRmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGJ0cnVuY3Yyc2Z2MnNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGNlaWx2MnNmdjJzaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2xmbG9vcnYyc2Z2MnNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbHJvdW5kdjJzZnYyc2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZnJpbnRudjJzZnYyc2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sYnRydW5jdXYyc2Z2MnNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGNlaWx1djJzZnYyc2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZmxvb3J1djJzZnYyc2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9scm91bmR1djJzZnYyc2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZnJpbnRudXYyc2Z2MnNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGJ0cnVuY3Y0c2Z2NHNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGNlaWx2NHNmdjRzaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2xmbG9vcnY0c2Z2NHNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbHJvdW5kdjRzZnY0c2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZnJpbnRudjRzZnY0c2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sYnRydW5jdXY0c2Z2NHNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGNlaWx1djRzZnY0c2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZmxvb3J1djRzZnY0c2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9scm91bmR1djRzZnY0c2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZnJpbnRudXY0c2Z2NHNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGJ0cnVuY3YyZGZ2MmRpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGNlaWx2MmRmdjJkaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2xmbG9vcnYyZGZ2MmRpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbHJvdW5kdjJkZnYyZGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZnJpbnRudjJkZnYyZGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sYnRydW5jdXYyZGZ2MmRpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbGNlaWx1djJkZnYyZGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZmxvb3J1djJkZnYyZGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9scm91bmR1djJkZnYyZGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sZnJpbnRudXYyZGZ2MmRpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZmxvYXR2MnNpdjJzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2Zsb2F0dW5zdjJzaXYyc2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mbG9hdHY0c2l2NHNmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZmxvYXR1bnN2NHNpdjRzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2Zsb2F0djJkaXYyZGYyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mbG9hdHVuc3YyZGl2MmRmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3VucGFja3NfbG9fdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9mbG9hdF9leHRlbmRfbG9fdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3VucGFja3NfaGlfdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9mbG9hdF90cnVuY2F0ZV9sb192MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2Zsb2F0X3RydW5jYXRlX2hpX3Y0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdm1sc3Yyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdm1sc3Y0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdm1sc3YyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtYXh2MnNmMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc21pbnYyc2YzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zbWF4djRzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtaW52NHNmMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc21heHYyZGYzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zbWludjJkZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtYXhfbmFudjJzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtaW5fbmFudjJzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtYXhfbmFudjRzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtaW5fbmFudjRzZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtYXhfbmFudjJkZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NtaW5fbmFudjJkZjMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NwbHVzX3Y4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3VwbHVzX3Y4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NwbHVzX3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y191cGx1c192MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdXBsdXNfdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdXBsdXNfdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdXBsdXNfdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdXBsdXNfdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdXBsdXNfdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdXBsdXNfdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdXBsdXNfdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9hZGRwdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfY2x6djhxaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2NsenYxNnFpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfY2x6djRoaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2NsenY4aGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9jbHp2MnNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfY2x6djRzaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3VtYXhfdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1pbl92OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWF4X3Y4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtaW5fdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1heF92MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1pbl92MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21heF92MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21pbl92MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1heF92NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y191bWluX3Y0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtYXhfdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21pbl92NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y191bWF4X3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3VtaW5fdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21heF92OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWluX3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3VtYXhfdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1pbl92NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWF4X3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtaW5fdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdW1heF92MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y191bWluX3YyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtYXhfdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21pbl92MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y191bWF4X3Yyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3VtaW5fdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21heF92MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWluX3Yyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtYXhfbmFuX3Yyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtaW5fbmFuX3Yyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtYXhfdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21pbl92MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWF4X25hbl92MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWluX25hbl92MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWF4X3YyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3JlZHVjX3NtaW5fdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21heF9uYW5fdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21pbl9uYW5fdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc21heF92NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9yZWR1Y19zbWluX3Y0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9ic2x2OHFpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfYnNsdjE2cWlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9ic2x2NGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfYnNsdjhoaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2JzbHYyc2lfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9ic2x2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfYnNsdjJkaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2JzbHYyc2ZfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9ic2x2NHNmX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfYnNsdjJkZl9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfbGFuZXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZ2V0X2xhbmV2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfbGFuZXY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZ2V0X2xhbmV2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2dldF9sYW5ldjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfbGFuZXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZ2V0X2xhbmV2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2dldF9sYW5ldjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfbGFuZXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZ2V0X2xhbmV2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NvbWJpbmV2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NvbWJpbmV2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NvbWJpbmV2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NvbWJpbmV2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NvbWJpbmVkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jb21iaW5lZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2FkZGwydjE2cWlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3N1YmwydjE2cWlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWFkZGwydjE2cWlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXN1YmwydjE2cWlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2FkZGwydjhoaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3VibDJ2OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VhZGRsMnY4aGlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXN1YmwydjhoaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zYWRkbDJ2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzdWJsMnY0c2lfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWFkZGwydjRzaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3VibDJ2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NhZGRsdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3VibHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWFkZGx2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzdWJsdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zYWRkbHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3N1Ymx2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VhZGRsdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3VibHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2FkZGx2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzdWJsdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91YWRkbHYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXN1Ymx2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NhZGR3djhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3Vid3Y4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWFkZHd2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzdWJ3djhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zYWRkd3Y0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3N1Ynd2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VhZGR3djRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3Vid3Y0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2FkZHd2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzdWJ3djJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91YWRkd3Yyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXN1Ynd2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NhZGR3MnYxNnFpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzdWJ3MnYxNnFpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VhZGR3MnYxNnFpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzdWJ3MnYxNnFpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NhZGR3MnY4aGlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3N1YncydjhoaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91YWRkdzJ2OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzdWJ3MnY4aGlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2FkZHcydjRzaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3VidzJ2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VhZGR3MnY0c2lfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXN1YncydjRzaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaGFkZHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWhhZGR2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NyaGFkZHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXJoYWRkdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaHN1YnY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWhzdWJ2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NyaHN1YnY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXJoc3VidjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaGFkZHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VoYWRkdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JoYWRkdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXJoYWRkdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2hzdWJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aHN1YnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NyaHN1YnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VyaHN1YnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NoYWRkdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aGFkZHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JoYWRkdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cmhhZGR2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Noc3VidjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aHN1YnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Joc3VidjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cmhzdWJ2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NoYWRkdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aGFkZHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JoYWRkdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cmhhZGR2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Noc3VidjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aHN1YnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Joc3VidjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cmhzdWJ2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NoYWRkdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aGFkZHYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JoYWRkdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cmhhZGR2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Noc3VidjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aHN1YnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Joc3VidjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cmhzdWJ2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NoYWRkdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aGFkZHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JoYWRkdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cmhhZGR2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Noc3VidjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91aHN1YnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Joc3VidjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cmhzdWJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2FkZGhudjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yYWRkaG52OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N1YmhudjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yc3ViaG52OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2FkZGhudjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yYWRkaG52NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N1YmhudjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yc3ViaG52NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2FkZGhudjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yYWRkaG52MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N1YmhudjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yc3ViaG52MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2FkZGhuMnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmFkZGhuMnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3ViaG4ydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yc3ViaG4ydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9hZGRobjJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JhZGRobjJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N1YmhuMnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcnN1YmhuMnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfYWRkaG4ydjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yYWRkaG4ydjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdWJobjJ2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JzdWJobjJ2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3BtdWx2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3BtdWx2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWFkZHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFhZGR2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc3VidjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXN1YnY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FhZGR2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cWFkZHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc3VidjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzdWJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWFkZHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFhZGR2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc3VidjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXN1YnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FhZGR2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VxYWRkdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXN1YnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzdWJ2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxYWRkdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cWFkZHYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzdWJ2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc3VidjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWFkZHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFhZGR2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc3VidjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXN1YnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FhZGR2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VxYWRkdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXN1YnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzdWJ2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxYWRkcWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFhZGRxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXN1YnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc3VicWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FhZGRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cWFkZGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc3ViaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzdWJoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWFkZHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VxYWRkc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzdWJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXN1YnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxYWRkZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFhZGRkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXN1YmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc3ViZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3VxYWRkdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3FhZGR2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N1cWFkZHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzcWFkZHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N1cWFkZHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNxYWRkdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdXFhZGR2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzcWFkZHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3VxYWRkdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3FhZGR2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N1cWFkZHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNxYWRkdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdXFhZGR2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzcWFkZHYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3VxYWRkcWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNxYWRkcWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3VxYWRkaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNxYWRkaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3VxYWRkc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNxYWRkc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3VxYWRkZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNxYWRkZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Ftb3Z1bnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Ftb3Z1bnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Ftb3Z1bnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Ftb3Z1bmhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxbW92dW5zaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcW1vdnVuZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Ftb3ZudjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cW1vdm52OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxbW92bnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFtb3ZudjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcW1vdm52MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VxbW92bnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Ftb3ZuaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFtb3ZuaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Ftb3Zuc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFtb3Zuc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Ftb3ZuZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFtb3ZuZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FuZWd2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxYWJzdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcW5lZ3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxYWJzdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FuZWd2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxYWJzdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcW5lZ3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FhYnN2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxbmVndjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWFic3Yyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FuZWd2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxYWJzdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcW5lZ3YyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FhYnN2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxbmVncWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FhYnNxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcW5lZ2hpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxYWJzaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FuZWdzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWFic3NpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGh2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcmRtdWxodjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxodjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJkbXVsaHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsaHYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FyZG11bGh2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGh2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcmRtdWxodjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxoaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FyZG11bGhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxoc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FyZG11bGhzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxoX2xhbmV2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcmRtdWxoX2xhbmV2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGhfbGFuZXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FyZG11bGhfbGFuZXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsaF9sYW5ldjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJkbXVsaF9sYW5ldjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxoX2xhbmV2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcmRtdWxoX2xhbmV2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGhfbGFuZXF2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcmRtdWxoX2xhbmVxdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxoX2xhbmVxdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJkbXVsaF9sYW5lcXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsaF9sYW5lcXYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FyZG11bGhfbGFuZXF2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGhfbGFuZXF2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcmRtdWxoX2xhbmVxdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxoX2xhbmVoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJkbXVsaF9sYW5laGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsaF9sYW5lc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FyZG11bGhfbGFuZXNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWx2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2x2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWx2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2x2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWxoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbHNsaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxhbHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2xzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsX2xhbmV2NGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2xfbGFuZXY0aGlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxhbF9sYW5ldjJzaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbHNsX2xhbmV2MnNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWxfbGFuZWhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2xfbGFuZWhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWxfbGFuZXNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2xfbGFuZXNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWxfbnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxzbF9udjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsX252MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2xfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxhbDJ2OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wydjhoaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsMnY0c2lfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxzbDJ2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWwyX2xhbmV2OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wyX2xhbmV2OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWwyX2xhbmV2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wyX2xhbmV2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWwyX252OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wyX252OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWwyX252NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wyX252NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGx2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGx2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGxoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxsc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsbF9sYW5ldjRoaV9pbnRlcm5hbCAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxsX2xhbmV2MnNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGxfbGFuZWhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGxfbGFuZXNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGxfbnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsbF9udjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxsMnY4aGlfaW50ZXJuYWwgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsbDJ2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGwyX2xhbmV2OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGwyX2xhbmV2NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGwyX252OGhpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGwyX252NHNpX2ludGVybmFsIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzaGx2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzaGx2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc2hsdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cnNobHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NobHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzaGx2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcnNobHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc2hsdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NobHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNobHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JzaGx2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc2hsdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc2hsdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c2hsdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcnNobHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXJzaGx2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzaGx2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzaGx2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc2hsdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cnNobHYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NobHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNobHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JzaGx2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc2hsdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc2hsdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c2hsdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcnNobHYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXJzaGx2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzaGxkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c2hsZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JzaGxkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cnNobGRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNobHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Fyc2hsdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXJzaGx2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGx2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJzaGx2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXJzaGx2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGx2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNobHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hsdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGx2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNobHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hsdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGx2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNobHYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hsdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGx2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNobHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hsdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGx2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNobHYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hsdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc2hscWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Fyc2hscWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hscWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaGxoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNobGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNobGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VxcnNobGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGxzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJzaGxzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXJzaGxzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobGRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc2hsZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Fyc2hsZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hsZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NobGxfbnY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNobGxfbnY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NobGxfbnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNobGxfbnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NobGxfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNobGxfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NobGwyX252MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c2hsbDJfbnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzaGxsMl9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c2hsbDJfbnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NobGwyX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzaGxsMl9udjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcnNocl9udjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cnNocl9udjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcnNocl9udjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXJzaHJfbnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc2hyX252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc2hyX252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc2hyX252OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc2hyX252OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc2hyX252MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc2hyX252MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc2hyX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc2hyX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc2hyX252MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc2hyX252MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc2hyX25kaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cnNocl9uZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NyYV9udjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3JhX252OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc3JhX252OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc3JhX252OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzcmFfbnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzcmFfbnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc3JhX252MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cnNyYV9udjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NyYV9udjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3JhX252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc3JhX252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc3JhX252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzcmFfbnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNyYV9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcnNyYV9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cnNyYV9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3JhX252MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzcmFfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3JzcmFfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXJzcmFfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NyYV9udjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3JhX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nyc3JhX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vyc3JhX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzcmFfbnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNyYV9udjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcnNyYV9udjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cnNyYV9udjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3JhX25kaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3JhX25kaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcnNyYV9uZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXJzcmFfbmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzbGlfbnY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNsaV9udjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3JpX252OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzcmlfbnY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NsaV9udjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNsaV9udjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NyaV9udjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNyaV9udjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NsaV9udjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c2xpX252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzcmlfbnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNyaV9udjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc2xpX252OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzbGlfbnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NyaV9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3JpX252OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzbGlfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNsaV9udjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3JpX252MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzcmlfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NsaV9udjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c2xpX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzcmlfbnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXNyaV9udjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc2xpX252MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzbGlfbnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3NyaV9udjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3JpX252MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzbGlfbmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzbGlfbmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzcmlfbmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzcmlfbmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsdV9udjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobF9udjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNobF9udjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHVfbnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsX252MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNobF9udjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaGx1X252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsX252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc2hsX252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsdV9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobF9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNobF9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHVfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaGxfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGxfbnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaGx1X252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc2hsX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsdV9udjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobF9udjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNobF9udjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHVfbnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsX25xaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNobF9ucWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaGx1X25oaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobF9uaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaGxfbmhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsdV9uc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaGxfbnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc2hsX25zaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNobHVfbmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hsX25kaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNobF9uZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaHJ1bl9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJzaHJ1bl9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNocm5fbnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaHJuX252OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNocm5fbnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hybl9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNocnVuX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNocnVuX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hybl9udjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNocm5fbnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Fyc2hybl9udjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXJzaHJuX252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hydW5fbnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Fyc2hydW5fbnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaHJuX252MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc2hybl9udjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJzaHJuX252MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VxcnNocm5fbnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaHJ1bl9uaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Fyc2hydW5fbmhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hybl9uaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFzaHJuX25oaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJzaHJuX25oaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXJzaHJuX25oaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNocnVuX25zaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXJzaHJ1bl9uc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FzaHJuX25zaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91cXNocm5fbnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNocm5fbnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VxcnNocm5fbnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Nxc2hydW5fbmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxcnNocnVuX25kaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcXNocm5fbmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Vxc2hybl9uZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Fyc2hybl9uZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXFyc2hybl9uZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sdHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sZXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21lcXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21ndHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sdHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtbGV2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWVxdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZ3R2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0djRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWVxdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWdldjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWd0djRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0djhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWVxdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWdldjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWd0djhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0djJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWVxdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWdldjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWd0djJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0djRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWVxdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWdldjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWd0djRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0djJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWVxdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWdldjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWd0djJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0ZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sZWRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZXFkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWdlZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21ndGRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtbHR1djhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXV2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZ3R1djhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0dXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtbGV1djE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXV2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWd0dXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtbHR1djRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldXY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXV2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZ3R1djRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0dXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sZXV2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZ2V1djhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWd0dXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sdHV2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtbGV1djJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWdldXYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21ndHV2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtbHR1djRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXV2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZ3R1djRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0dXYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sZXV2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZ2V1djJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWd0dXYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sdHVkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWxldWRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZ2V1ZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21ndHVkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbXRzdHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY210c3R2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbXRzdHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY210c3R2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtdHN0djJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbXRzdHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY210c3R2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtdHN0ZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sdHYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sZXYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21lcXYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21ndHYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sdHY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sZXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21lcXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21ndHY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sdHYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sZXYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21lcXYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21ndHYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sdHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtbGVzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWVxc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21nZXNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZ3RzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWx0ZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21sZWRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NtZXFkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jbWdlZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY21ndGRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2FkZHB2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2FkZHB2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2FkZHB2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2FkZHBkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfc3FydHYyc2YyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9zcXJ0djRzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3NxcnR2MmRmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2xvYWRfbGFuZXNvaXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfbG9hZF9sYW5lc29pdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2xvYWRfbGFuZXNvaXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19sb2FkX2xhbmVzb2l2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfbG9hZF9sYW5lc29pdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2xvYWRfbGFuZXNvaXYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19zdG9yZV9sYW5lc29pdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19zdG9yZV9sYW5lc29pdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3N0b3JlX2xhbmVzb2l2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc3RvcmVfbGFuZXNvaXYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19zdG9yZV9sYW5lc29pdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3N0b3JlX2xhbmVzb2l2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfbG9hZF9sYW5lc2NpdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19sb2FkX2xhbmVzY2l2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfbG9hZF9sYW5lc2NpdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2xvYWRfbGFuZXNjaXYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19sb2FkX2xhbmVzY2l2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfbG9hZF9sYW5lc2NpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3N0b3JlX2xhbmVzY2l2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3N0b3JlX2xhbmVzY2l2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc3RvcmVfbGFuZXNjaXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19zdG9yZV9sYW5lc2NpdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3N0b3JlX2xhbmVzY2l2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc3RvcmVfbGFuZXNjaXYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19sb2FkX2xhbmVzeGl2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2xvYWRfbGFuZXN4aXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19sb2FkX2xhbmVzeGl2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfbG9hZF9sYW5lc3hpdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2xvYWRfbGFuZXN4aXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19sb2FkX2xhbmVzeGl2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc3RvcmVfbGFuZXN4aXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc3RvcmVfbGFuZXN4aXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19zdG9yZV9sYW5lc3hpdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3N0b3JlX2xhbmVzeGl2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc3RvcmVfbGFuZXN4aXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19zdG9yZV9sYW5lc3hpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2OHFpX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQydjRoaV9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkMnYyc2lfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2MnNmX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQyZGlfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJkZl9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Y4cWlfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDN2NGhpX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQzdjJzaV9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Yyc2ZfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDNkaV9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM2RmX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djhxaV9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkNHY0aGlfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDR2MnNpX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djJzZl9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkNGRpX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0ZGZfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90YmwxdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90YmwxdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdGJsMnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NvbWJpbmV2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfemlwMnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3RybjF2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXpwMXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3V6cDJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAxdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF96aXAydjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4xdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF90cm4ydjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAxdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91enAydjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDJ2OHFpX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QydjRoaV9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnYyc2lfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDJ2MnNmX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QyZGlfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDJkZl9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0M3Y4cWlfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDN2NGhpX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjJzaV9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0M3Yyc2ZfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDNkaV9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0M2RmX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Q0djhxaV9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0NHY0aGlfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2MnNpX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Q0djJzZl9kcmVnIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0NGRpX2RyZWcgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3Q0ZGZfZHJlZyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9mcmVjcGV2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2ZyZWNwZXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZnJlY3BldjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9mcmVjcHN2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2ZyZWNwc3Y0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZnJlY3BzdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYXRvbWljX2NvbXBhcmVfYW5kX3N3YXBxaV8xIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfY29tcGFyZV9hbmRfc3dhcGhpXzEgMQorI2RlZmluZSBIQVZFX2F0b21pY19jb21wYXJlX2FuZF9zd2Fwc2lfMSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2NvbXBhcmVfYW5kX3N3YXBkaV8xIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZXhjaGFuZ2VxaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2V4Y2hhbmdlaGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19leGNoYW5nZXNpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZXhjaGFuZ2VkaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2FkZHFpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3VicWkgMQorI2RlZmluZSBIQVZFX2F0b21pY19vcnFpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfeG9ycWkgMQorI2RlZmluZSBIQVZFX2F0b21pY19hbmRxaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2FkZGhpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3ViaGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19vcmhpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfeG9yaGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19hbmRoaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2FkZHNpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3Vic2kgMQorI2RlZmluZSBIQVZFX2F0b21pY19vcnNpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfeG9yc2kgMQorI2RlZmluZSBIQVZFX2F0b21pY19hbmRzaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2FkZGRpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3ViZGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19vcmRpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfeG9yZGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19hbmRkaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX25hbmRxaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX25hbmRoaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX25hbmRzaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX25hbmRkaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2ZldGNoX2FkZHFpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZmV0Y2hfc3VicWkgMQorI2RlZmluZSBIQVZFX2F0b21pY19mZXRjaF9vcnFpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZmV0Y2hfeG9ycWkgMQorI2RlZmluZSBIQVZFX2F0b21pY19mZXRjaF9hbmRxaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2ZldGNoX2FkZGhpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZmV0Y2hfc3ViaGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19mZXRjaF9vcmhpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZmV0Y2hfeG9yaGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19mZXRjaF9hbmRoaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2ZldGNoX2FkZHNpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZmV0Y2hfc3Vic2kgMQorI2RlZmluZSBIQVZFX2F0b21pY19mZXRjaF9vcnNpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZmV0Y2hfeG9yc2kgMQorI2RlZmluZSBIQVZFX2F0b21pY19mZXRjaF9hbmRzaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2ZldGNoX2FkZGRpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZmV0Y2hfc3ViZGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19mZXRjaF9vcmRpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfZmV0Y2hfeG9yZGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19mZXRjaF9hbmRkaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2ZldGNoX25hbmRxaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2ZldGNoX25hbmRoaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2ZldGNoX25hbmRzaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2ZldGNoX25hbmRkaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2FkZF9mZXRjaHFpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3ViX2ZldGNocWkgMQorI2RlZmluZSBIQVZFX2F0b21pY19vcl9mZXRjaHFpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfeG9yX2ZldGNocWkgMQorI2RlZmluZSBIQVZFX2F0b21pY19hbmRfZmV0Y2hxaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2FkZF9mZXRjaGhpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3ViX2ZldGNoaGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19vcl9mZXRjaGhpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfeG9yX2ZldGNoaGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19hbmRfZmV0Y2hoaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2FkZF9mZXRjaHNpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3ViX2ZldGNoc2kgMQorI2RlZmluZSBIQVZFX2F0b21pY19vcl9mZXRjaHNpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfeG9yX2ZldGNoc2kgMQorI2RlZmluZSBIQVZFX2F0b21pY19hbmRfZmV0Y2hzaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2FkZF9mZXRjaGRpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3ViX2ZldGNoZGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19vcl9mZXRjaGRpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfeG9yX2ZldGNoZGkgMQorI2RlZmluZSBIQVZFX2F0b21pY19hbmRfZmV0Y2hkaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX25hbmRfZmV0Y2hxaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX25hbmRfZmV0Y2hoaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX25hbmRfZmV0Y2hzaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX25hbmRfZmV0Y2hkaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2xvYWRxaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2xvYWRoaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2xvYWRzaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX2xvYWRkaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX3N0b3JlcWkgMQorI2RlZmluZSBIQVZFX2F0b21pY19zdG9yZWhpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfc3RvcmVzaSAxCisjZGVmaW5lIEhBVkVfYXRvbWljX3N0b3JlZGkgMQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbG9hZF9leGNsdXNpdmVxaSAxCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sb2FkX2V4Y2x1c2l2ZWhpIDEKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xvYWRfZXhjbHVzaXZlc2kgMQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbG9hZF9leGNsdXNpdmVkaSAxCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdG9yZV9leGNsdXNpdmVxaSAxCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdG9yZV9leGNsdXNpdmVoaSAxCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdG9yZV9leGNsdXNpdmVzaSAxCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdG9yZV9leGNsdXNpdmVkaSAxCisjZGVmaW5lIEhBVkVfY2JyYW5jaHNpNCAxCisjZGVmaW5lIEhBVkVfY2JyYW5jaGRpNCAxCisjZGVmaW5lIEhBVkVfY2JyYW5jaHNmNCAxCisjZGVmaW5lIEhBVkVfY2JyYW5jaGRmNCAxCisjZGVmaW5lIEhBVkVfY2FzZXNpIDEKKyNkZWZpbmUgSEFWRV9wcm9sb2d1ZSAxCisjZGVmaW5lIEhBVkVfZXBpbG9ndWUgMQorI2RlZmluZSBIQVZFX3NpYmNhbGxfZXBpbG9ndWUgMQorI2RlZmluZSBIQVZFX2NhbGwgMQorI2RlZmluZSBIQVZFX2NhbGxfdmFsdWUgMQorI2RlZmluZSBIQVZFX3NpYmNhbGwgMQorI2RlZmluZSBIQVZFX3NpYmNhbGxfdmFsdWUgMQorI2RlZmluZSBIQVZFX3VudHlwZWRfY2FsbCAxCisjZGVmaW5lIEhBVkVfbW92cWkgMQorI2RlZmluZSBIQVZFX21vdmhpIDEKKyNkZWZpbmUgSEFWRV9tb3ZzaSAxCisjZGVmaW5lIEhBVkVfbW92ZGkgMQorI2RlZmluZSBIQVZFX21vdnRpIDEKKyNkZWZpbmUgSEFWRV9tb3ZzZiAxCisjZGVmaW5lIEhBVkVfbW92ZGYgMQorI2RlZmluZSBIQVZFX21vdnRmIDEKKyNkZWZpbmUgSEFWRV9leHRlbmRzaWRpMiAxCisjZGVmaW5lIEhBVkVfemVyb19leHRlbmRzaWRpMiAxCisjZGVmaW5lIEhBVkVfZXh0ZW5kcWlzaTIgMQorI2RlZmluZSBIQVZFX3plcm9fZXh0ZW5kcWlzaTIgMQorI2RlZmluZSBIQVZFX2V4dGVuZGhpc2kyIDEKKyNkZWZpbmUgSEFWRV96ZXJvX2V4dGVuZGhpc2kyIDEKKyNkZWZpbmUgSEFWRV9leHRlbmRxaWRpMiAxCisjZGVmaW5lIEhBVkVfemVyb19leHRlbmRxaWRpMiAxCisjZGVmaW5lIEhBVkVfZXh0ZW5kaGlkaTIgMQorI2RlZmluZSBIQVZFX3plcm9fZXh0ZW5kaGlkaTIgMQorI2RlZmluZSBIQVZFX2V4dGVuZHFpaGkyIDEKKyNkZWZpbmUgSEFWRV96ZXJvX2V4dGVuZHFpaGkyIDEKKyNkZWZpbmUgSEFWRV9hZGRzaTMgMQorI2RlZmluZSBIQVZFX2FkZGRpMyAxCisjZGVmaW5lIEhBVkVfY3N0b3Jlc2k0IDEKKyNkZWZpbmUgSEFWRV9jc3RvcmVkaTQgMQorI2RlZmluZSBIQVZFX2NzdG9yZXNmNCAxCisjZGVmaW5lIEhBVkVfY3N0b3JlZGY0IDEKKyNkZWZpbmUgSEFWRV9jbW92c2k2IDEKKyNkZWZpbmUgSEFWRV9jbW92ZGk2IDEKKyNkZWZpbmUgSEFWRV9jbW92c2Y2IDEKKyNkZWZpbmUgSEFWRV9jbW92ZGY2IDEKKyNkZWZpbmUgSEFWRV9tb3ZxaWNjIDEKKyNkZWZpbmUgSEFWRV9tb3ZoaWNjIDEKKyNkZWZpbmUgSEFWRV9tb3ZzaWNjIDEKKyNkZWZpbmUgSEFWRV9tb3ZkaWNjIDEKKyNkZWZpbmUgSEFWRV9tb3ZzZnNpY2MgMQorI2RlZmluZSBIQVZFX21vdnNmZGljYyAxCisjZGVmaW5lIEhBVkVfbW92ZGZzaWNjIDEKKyNkZWZpbmUgSEFWRV9tb3ZkZmRpY2MgMQorI2RlZmluZSBIQVZFX2Zmc3NpMiAxCisjZGVmaW5lIEhBVkVfZmZzZGkyIDEKKyNkZWZpbmUgSEFWRV9jdHpzaTIgMQorI2RlZmluZSBIQVZFX2N0emRpMiAxCisjZGVmaW5lIEhBVkVfYXNobHNpMyAxCisjZGVmaW5lIEhBVkVfYXNocnNpMyAxCisjZGVmaW5lIEhBVkVfbHNocnNpMyAxCisjZGVmaW5lIEhBVkVfYXNobGRpMyAxCisjZGVmaW5lIEhBVkVfYXNocmRpMyAxCisjZGVmaW5lIEhBVkVfbHNocmRpMyAxCisjZGVmaW5lIEhBVkVfYXNobHFpMyAxCisjZGVmaW5lIEhBVkVfYXNobGhpMyAxCisjZGVmaW5lIEhBVkVfcm90cnNpMyAxCisjZGVmaW5lIEhBVkVfcm90cmRpMyAxCisjZGVmaW5lIEhBVkVfcm90bHNpMyAxCisjZGVmaW5lIEhBVkVfcm90bGRpMyAxCisjZGVmaW5lIEhBVkVfZXh0diAxCisjZGVmaW5lIEhBVkVfZXh0enYgMQorI2RlZmluZSBIQVZFX2luc3ZzaSAxCisjZGVmaW5lIEhBVkVfaW5zdmRpIDEKKyNkZWZpbmUgSEFWRV9yZWxvYWRfc3BfaW1tZWRpYXRlIDEKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlbG9hZF9tb3Z0aSAxCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWxvYWRfbW92dGYgMQorI2RlZmluZSBIQVZFX3Rsc2dkX3NtYWxsIDEKKyNkZWZpbmUgSEFWRV9nZXRfdGhyZWFkX3BvaW50ZXJkaSAxCisjZGVmaW5lIEhBVkVfbW92djhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92djE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdnYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdnY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdnYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdm1pc2FsaWdudjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92bWlzYWxpZ252MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92bWlzYWxpZ252NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tb3ZtaXNhbGlnbnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdm1pc2FsaWdudjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92bWlzYWxpZ252NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tb3ZtaXNhbGlnbnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdm1pc2FsaWdudjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92bWlzYWxpZ252NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tb3ZtaXNhbGlnbnYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3BsaXRfc2ltZF9tb3Z2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcGxpdF9zaW1kX21vdnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3BsaXRfc2ltZF9tb3Z2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NwbGl0X3NpbWRfbW92djJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcGxpdF9zaW1kX21vdnY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3BsaXRfc2ltZF9tb3Z2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hc2hsdjhxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FzaGx2MTZxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FzaGx2NGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYXNobHY4aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hc2hsdjJzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FzaGx2NHNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYXNobHYyZGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sc2hydjhxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2xzaHJ2MTZxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2xzaHJ2NGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbHNocnY4aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9sc2hydjJzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2xzaHJ2NHNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbHNocnYyZGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hc2hydjhxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FzaHJ2MTZxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FzaHJ2NGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYXNocnY4aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hc2hydjJzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FzaHJ2NHNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYXNocnYyZGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92YXNobHY4cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92YXNobHYxNnFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmFzaGx2NGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmFzaGx2OGhpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmFzaGx2MnNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmFzaGx2NHNpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmFzaGx2MmRpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmFzaHJ2OHFpMyAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmFzaHJ2MTZxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3Zhc2hydjRoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3Zhc2hydjhoaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3Zhc2hydjJzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3Zhc2hydjRzaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3Zsc2hydjhxaTMgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3Zsc2hydjE2cWkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92bHNocnY0aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92bHNocnY4aGkzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92bHNocnYyc2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92bHNocnY0c2kzIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3NldHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3NldHY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19zZXR2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3NldHYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19zZXR2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfc2V0djRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3NldHYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdmVfaGlfcXVhZF92MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92ZV9oaV9xdWFkX3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdmVfaGlfcXVhZF92NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tb3ZlX2hpX3F1YWRfdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92ZV9oaV9xdWFkX3Y0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdmVfaGlfcXVhZF92MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGFja190cnVuY192NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGFja190cnVuY192MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGFja190cnVuY19kaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3VucGFja3NfaGlfdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY191bnBhY2t1X2hpX3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfdW5wYWNrc19oaV92OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfdW5wYWNrdV9oaV92OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfdW5wYWNrc19oaV92NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfdW5wYWNrdV9oaV92NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfdW5wYWNrc19sb192MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3VucGFja3VfbG9fdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY191bnBhY2tzX2xvX3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY191bnBhY2t1X2xvX3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY191bnBhY2tzX2xvX3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY191bnBhY2t1X2xvX3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY193aWRlbl9zbXVsdF9sb192MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3dpZGVuX3VtdWx0X2xvX3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfd2lkZW5fc211bHRfbG9fdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3dpZGVuX3VtdWx0X2xvX3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY193aWRlbl9zbXVsdF9sb192NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfd2lkZW5fdW11bHRfbG9fdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3dpZGVuX3NtdWx0X2hpX3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfd2lkZW5fdW11bHRfaGlfdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY193aWRlbl9zbXVsdF9oaV92OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfd2lkZW5fdW11bHRfaGlfdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3dpZGVuX3NtdWx0X2hpX3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY193aWRlbl91bXVsdF9oaV92NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9maXh2MnNmdjJzaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2ZpeHVuc3Yyc2Z2MnNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZml4djRzZnY0c2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9maXh1bnN2NHNmdjRzaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2ZpeHYyZGZ2MmRpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZml4dW5zdjJkZnYyZGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9maXhfdHJ1bmN2MnNmdjJzaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2ZpeHVuc190cnVuY3Yyc2Z2MnNpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZml4X3RydW5jdjRzZnY0c2kyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9maXh1bnNfdHJ1bmN2NHNmdjRzaTIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2ZpeF90cnVuY3YyZGZ2MmRpMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZml4dW5zX3RydW5jdjJkZnYyZGkyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9mdHJ1bmN2MnNmMiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfZnRydW5jdjRzZjIgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2Z0cnVuY3YyZGYyIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGFja190cnVuY192MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGFja190cnVuY19kZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfc3BsdXNfdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfcmVkdWNfdXBsdXNfdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2JzbHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9ic2x2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2JzbHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9ic2x2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfYnNsdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2JzbHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9ic2x2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfYnNsdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2JzbHY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9ic2x2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjhxaXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2MTZxaXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjRoaXY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2OGhpdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2l2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjRzaXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2MmRpdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2Z2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjJzZnY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2MnNmdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2l2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjJzaXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2MnNpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2Z2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjRzZnY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2NHNmdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2l2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjRzaXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2NHNpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGZ2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjJkZnY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2MmRmdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGl2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3Zjb25kX2ludGVybmFsdjJkaXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdmNvbmRfaW50ZXJuYWx2MmRpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmNvbmR2OHFpdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmNvbmR2MTZxaXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHY0aGl2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHY4aGl2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHYyc2l2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHY0c2l2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHYyZGl2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHYyc2Z2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHY0c2Z2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHYyZGZ2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHYyc2l2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHY0c2l2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHYyZGl2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHV2OHFpdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmNvbmR1djE2cWl2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmNvbmR1djRoaXY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3Zjb25kdXY4aGl2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92Y29uZHV2MnNpdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmNvbmR1djRzaXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3Zjb25kdXYyZGl2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NyZWF0ZXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfY3JlYXRldjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9jcmVhdGV2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NyZWF0ZWRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NyZWF0ZWRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2NyZWF0ZXYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZ2V0X2xhbmVkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY4cWl2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2OHFpdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY4cWl2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaWRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaWRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY0aGl2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaXYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNpdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyc2l2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNpdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyc2lkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyc2lkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyc2Z2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJzZnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNmdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyc2Z2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJzZmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJzZmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0ZGlkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldGRpZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXRkaXYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY4aGl2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY0c2l2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY0c2l2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djRzaXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY0c2l2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djRzaXYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNmdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNmdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY0c2Z2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djRzZnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNmdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHY0c2Z2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRpdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyZGl2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyZGZ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyZGZ2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJkZnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRmdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9yZWludGVycHJldHYyZGZ2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3JlaW50ZXJwcmV0djJkZnYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9jb21iaW5ldjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2NvbWJpbmV2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NpbWRfY29tYmluZXYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2ltZF9jb21iaW5ldjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2NvbWJpbmVkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zaW1kX2NvbWJpbmVkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zYWRkbDJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zYWRkbDJ2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NhZGRsMnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWFkZGwydjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWFkZGwydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91YWRkbDJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzdWJsMnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzdWJsMnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3N1YmwydjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3VibDJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3VibDJ2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VzdWJsMnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2FkZHcydjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2FkZHcydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zYWRkdzJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VhZGR3MnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3VhZGR3MnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdWFkZHcydjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3VidzJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zc3VidzJ2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NzdWJ3MnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXN1YncydjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfdXN1YncydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF91c3VidzJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWxfbGFuZXY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxhbF9sYW5ldjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsX2xhbmVoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsX2xhbmVzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsX2xhbmVxdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsX2xhbmVxdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsX2xhbmVxaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxhbF9sYW5lcXNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2xfbGFuZXY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxzbF9sYW5ldjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbHNsX2xhbmVoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbHNsX2xhbmVzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbHNsX2xhbmVxdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbHNsX2xhbmVxdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbHNsX2xhbmVxaGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxzbF9sYW5lcXNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sYWwydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsMnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxzbDJ2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wydjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsMl9sYW5ldjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsMl9sYW5ldjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbGFsMl9sYW5lcXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxhbDJfbGFuZXF2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wyX2xhbmV2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wyX2xhbmV2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG1sc2wyX2xhbmVxdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtbHNsMl9sYW5lcXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxhbDJfbnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxhbDJfbnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxzbDJfbnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbWxzbDJfbnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsbF9sYW5ldjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxsX2xhbmV2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGxfbGFuZWhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGxfbGFuZXNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGxfbGFuZXF2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGxfbGFuZXF2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGwydjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxsMnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsbDJfbGFuZXY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsbDJfbGFuZXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3FkbXVsbDJfbGFuZXF2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NxZG11bGwyX2xhbmVxdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxsMl9udjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zcWRtdWxsMl9udjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfbW92b2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX21vdmNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9tb3Z4aSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Y4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Y0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Yyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Yyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDNkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDRkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDNkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDRkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDF2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkMXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkMXY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQxdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDF2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkMXY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQxdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDF2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkMXY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQxdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDN2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDR2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Y4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Y0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3YyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3Y0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9sZDJ2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2xkM3YyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfbGQ0djJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ29pdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ2NpdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ3hpdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ29pdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ2NpdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ3hpdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ29pdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ2NpdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ3hpdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ29pdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ2NpdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ3hpdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ29pZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZ2V0X2RyZWdjaWRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2dldF9kcmVneGlkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfZHJlZ29pZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZ2V0X2RyZWdjaWRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2dldF9kcmVneGlkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ29pdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfZ2V0X3FyZWdjaXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X2dldF9xcmVneGl2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ29pdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ2NpdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ3hpdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ29pdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ2NpdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ3hpdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ29pdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ2NpdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ3hpdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ29pdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ2NpdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ3hpdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ29pdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ2NpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9nZXRfcXJlZ3hpdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3Blcm1fY29uc3R2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGVybV9jb25zdHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGVybV9jb25zdHY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19wZXJtX2NvbnN0djhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3Blcm1fY29uc3R2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGVybV9jb25zdHY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19wZXJtX2NvbnN0djJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3Blcm1fY29uc3R2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGVybV9jb25zdHY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19wZXJtX2NvbnN0djJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX3Blcm12OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfcGVybXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjhxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2OHFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnY0aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2NGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjJzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2MnNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjJzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2MnNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0M2RpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0NGRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0M2RmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0NGRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0M3YxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0NHYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnY4aGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjhoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnY0c2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnYyZGkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjJkaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnY0c2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MnYyZGYgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QzdjJkZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDR2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MXY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QxdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QxdjRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDF2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MXYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QxdjRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDF2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3N0MXYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc3QxdjRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zdDF2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfYWFyY2g2NF9zZXRfcXJlZ2NpdjE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX2FhcmNoNjRfc2V0X3FyZWd4aXYxNnFpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnb2l2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnY2l2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVneGl2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnb2l2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnY2l2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVneGl2NHNpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnb2l2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnY2l2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVneGl2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnb2l2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnY2l2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVneGl2NHNmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnb2l2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVnY2l2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hYXJjaDY0X3NldF9xcmVneGl2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfaW5pdHY4cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19pbml0djE2cWkgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19pbml0djRoaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2luaXR2OGhpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfaW5pdHYyc2kgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19pbml0djRzaSAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2luaXR2MmRpIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV92ZWNfaW5pdHYyc2YgKFRBUkdFVF9TSU1EKQorI2RlZmluZSBIQVZFX3ZlY19pbml0djRzZiAoVEFSR0VUX1NJTUQpCisjZGVmaW5lIEhBVkVfdmVjX2luaXR2MmRmIChUQVJHRVRfU0lNRCkKKyNkZWZpbmUgSEFWRV9hdG9taWNfY29tcGFyZV9hbmRfc3dhcHFpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfY29tcGFyZV9hbmRfc3dhcGhpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfY29tcGFyZV9hbmRfc3dhcHNpIDEKKyNkZWZpbmUgSEFWRV9hdG9taWNfY29tcGFyZV9hbmRfc3dhcGRpIDEKKyNkZWZpbmUgSEFWRV9tZW1fdGhyZWFkX2ZlbmNlIDEKKyNkZWZpbmUgSEFWRV9kbWIgMQorZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2luZGlyZWN0X2p1bXAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fanVtcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jYXNlc2lfZGlzcGF0Y2ggICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9ub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKK2V4dGVybiBydHggICAgICAgIGdlbl9laF9yZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgIChydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2luc3ZfaW1tc2kgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2luc3ZfaW1tZGkgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xvYWRfcGFpcnNpICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbG9hZF9wYWlyZGkgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdG9yZV9wYWlyc2kgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N0b3JlX3BhaXJkaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbG9hZF9wYWlyc2YgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sb2FkX3BhaXJkZiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N0b3JlX3BhaXJzZiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3RvcmVfcGFpcmRmICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK3N0YXRpYyBpbmxpbmUgcnR4IGdlbl9sb2Fkd2JfcGFpcnNpX3NpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fbG9hZHdiX3BhaXJzaV9zaShydHggQVJHX1VOVVNFRCAoYSksIHJ0eCBBUkdfVU5VU0VEIChiKSwgcnR4IEFSR19VTlVTRUQgKGMpLCBydHggQVJHX1VOVVNFRCAoZCksIHJ0eCBBUkdfVU5VU0VEIChlKSwgcnR4IEFSR19VTlVTRUQgKGYpKQoreworICByZXR1cm4gMDsKK30KK2V4dGVybiBydHggICAgICAgIGdlbl9sb2Fkd2JfcGFpcnNpX2RpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK3N0YXRpYyBpbmxpbmUgcnR4IGdlbl9sb2Fkd2JfcGFpcmRpX3NpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fbG9hZHdiX3BhaXJkaV9zaShydHggQVJHX1VOVVNFRCAoYSksIHJ0eCBBUkdfVU5VU0VEIChiKSwgcnR4IEFSR19VTlVTRUQgKGMpLCBydHggQVJHX1VOVVNFRCAoZCksIHJ0eCBBUkdfVU5VU0VEIChlKSwgcnR4IEFSR19VTlVTRUQgKGYpKQoreworICByZXR1cm4gMDsKK30KK2V4dGVybiBydHggICAgICAgIGdlbl9sb2Fkd2JfcGFpcmRpX2RpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK3N0YXRpYyBpbmxpbmUgcnR4IGdlbl9zdG9yZXdiX3BhaXJzaV9zaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK3N0YXRpYyBpbmxpbmUgcnR4CitnZW5fc3RvcmV3Yl9wYWlyc2lfc2kocnR4IEFSR19VTlVTRUQgKGEpLCBydHggQVJHX1VOVVNFRCAoYiksIHJ0eCBBUkdfVU5VU0VEIChjKSwgcnR4IEFSR19VTlVTRUQgKGQpLCBydHggQVJHX1VOVVNFRCAoZSksIHJ0eCBBUkdfVU5VU0VEIChmKSkKK3sKKyAgcmV0dXJuIDA7Cit9CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3RvcmV3Yl9wYWlyc2lfZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitzdGF0aWMgaW5saW5lIHJ0eCBnZW5fc3RvcmV3Yl9wYWlyZGlfc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitzdGF0aWMgaW5saW5lIHJ0eAorZ2VuX3N0b3Jld2JfcGFpcmRpX3NpKHJ0eCBBUkdfVU5VU0VEIChhKSwgcnR4IEFSR19VTlVTRUQgKGIpLCBydHggQVJHX1VOVVNFRCAoYyksIHJ0eCBBUkdfVU5VU0VEIChkKSwgcnR4IEFSR19VTlVTRUQgKGUpLCBydHggQVJHX1VOVVNFRCAoZikpCit7CisgIHJldHVybiAwOworfQorZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N0b3Jld2JfcGFpcmRpX2RpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YmRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic2RpMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZWdzaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVnZGkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bGRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bHNpZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtdWxzaWRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21hZGRzaWRpNCAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW1hZGRzaWRpNCAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tc3Vic2lkaTQgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Vtc3Vic2lkaTQgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc211bGRpM19oaWdocGFydCAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdW11bGRpM19oaWdocGFydCAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZGl2c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdWRpdnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZGl2ZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdWRpdmRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3JlcWlfbmVnICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3JlaGlfbmVnICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3Jlc2lfbmVnICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3JlZGlfbmVnICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3NpbmMzc2lfaW5zbiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NzaW5jM2RpX2luc24gICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hbmRzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pb3JzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl94b3JzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hbmRkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pb3JkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl94b3JkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vbmVfY21wbHNpMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fb25lX2NtcGxkaTIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NsenNpMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jbHpkaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2xyc2JzaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NscnNiZGkyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yYml0c2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmJpdGRpMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Jzd2Fwc2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9ic3dhcGRpMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYnN3YXBoaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2J0cnVuY3NmMiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jZWlsc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvb3JzZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZyaW50bnNmMiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZWFyYnlpbnRzZjIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmludHNmMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvdW5kc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9idHJ1bmNkZjIgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2VpbGRmMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Zsb29yZGYyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mcmludG5kZjIgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVhcmJ5aW50ZGYyICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JpbnRkZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yb3VuZGRmMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGJ0cnVuY3Nmc2kyICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xjZWlsc2ZzaTIgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZmxvb3JzZnNpMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbHJvdW5kc2ZzaTIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmcmludG5zZnNpMiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sYnRydW5jdXNmc2kyICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGNlaWx1c2ZzaTIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmbG9vcnVzZnNpMiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9scm91bmR1c2ZzaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZyaW50bnVzZnNpMiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xidHJ1bmNzZmRpMiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sY2VpbHNmZGkyICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZsb29yc2ZkaTIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xyb3VuZHNmZGkyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZnJpbnRuc2ZkaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGJ0cnVuY3VzZmRpMiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xjZWlsdXNmZGkyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZmxvb3J1c2ZkaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbHJvdW5kdXNmZGkyICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmcmludG51c2ZkaTIgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sYnRydW5jZGZzaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGNlaWxkZnNpMiAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmbG9vcmRmc2kyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9scm91bmRkZnNpMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZyaW50bmRmc2kyICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xidHJ1bmN1ZGZzaTIgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sY2VpbHVkZnNpMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZsb29ydWRmc2kyICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xyb3VuZHVkZnNpMiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZnJpbnRudWRmc2kyICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGJ0cnVuY2RmZGkyICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xjZWlsZGZkaTIgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZmxvb3JkZmRpMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbHJvdW5kZGZkaTIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmcmludG5kZmRpMiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sYnRydW5jdWRmZGkyICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGNlaWx1ZGZkaTIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmbG9vcnVkZmRpMiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9scm91bmR1ZGZkaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZyaW50bnVkZmRpMiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZtYXNmNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZm1hZGY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbm1hc2Y0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZubWFkZjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZm1zc2Y0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbXNkZjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZubXNzZjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZm5tc2RmNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9leHRlbmRzZmRmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdHJ1bmNkZnNmMiAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZpeF90cnVuY3Nmc2kyICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXhfdHJ1bmNzZmRpMiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4X3RydW5jZGZzaTIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZpeF90cnVuY2RmZGkyICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXh1bnNfdHJ1bmNzZnNpMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4dW5zX3RydW5jc2ZkaTIgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZpeHVuc190cnVuY2Rmc2kyICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXh1bnNfdHJ1bmNkZmRpMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXRzaXNmMiAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Zsb2F0ZGlzZjIgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9hdHNpZGYyICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXRkaWRmMiAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Zsb2F0dW5zc2lzZjIgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9hdHVuc2Rpc2YyICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXR1bnNzaWRmMiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Zsb2F0dW5zZGlkZjIgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGRzZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGRkZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJzZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJkZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWxzZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWxkZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9kaXZzZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9kaXZkZjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZWdzZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVnZGYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NxcnRzZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zcXJ0ZGYyICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJzc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic2RmMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4ZGYzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWluc2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWluZGYzICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2ZyZWNwZXNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9mcmVjcHhzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZnJlY3BlZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2ZyZWNweGRmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9mcmVjcHNzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9mcmVjcHNkZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9tb3ZkaV90aWxvdyAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbW92ZGlfdGZsb3cgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X21vdmRpX3RpaGlnaCAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9tb3ZkaV90ZmhpZ2ggICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbW92dGloaWdoX2RpICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X21vdnRmaGlnaF9kaSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9tb3Z0aWxvd19kaSAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbW92dGZsb3dfZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X21vdnRpbG93X3RpbG93ICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWRkX2xvc3ltICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGRyX2dvdF9zbWFsbCAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGRyX2dvdF90aW55ICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbG9hZF90cF9oYXJkICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdGxzaWVfc21hbGwgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Rsc2xlX3NtYWxsICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Rsc2Rlc2Nfc21hbGwgICAgICAgICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3RhY2tfdGllICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9kdXB2OHFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfZHVwdjE2cWkgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2R1cHY0aGkgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9kdXB2OGhpICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfZHVwdjJzaSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2R1cHY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9kdXB2MmRpICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2R1cF9sYW5ldjhxaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2R1cF9sYW5ldjE2cWkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2R1cF9sYW5ldjRoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2R1cF9sYW5ldjhoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2R1cF9sYW5ldjJzaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2R1cF9sYW5ldjRzaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2R1cF9sYW5ldjJkaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfZHVwdjJzZiAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2R1cHY0c2YgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9kdXB2MmRmICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjE2cWlsb3cgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjhoaWxvdyAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjRzaWxvdyAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjJkaWxvdyAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjRzZmxvdyAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjJkZmxvdyAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjE2cWloaWdoICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjhoaWhpZ2ggICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjRzaWhpZ2ggICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjJkaWhpZ2ggICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjRzZmhpZ2ggICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbW92X2Zyb21fdjJkZmhpZ2ggICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vcm52MmRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9iaWN2MmRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hZGR2MmRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zdWJ2MmRpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tdWx2NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZWd2OHFpMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVndjE2cWkyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Y0aGkyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZWd2OGhpMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVndjJzaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Y0c2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZWd2MmRpMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJzdjhxaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3YxNnFpMiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYnN2NGhpMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJzdjhoaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Yyc2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYnN2NHNpMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJzdjJkaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FiZHY4cWlfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FiZHYxNnFpXzMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FiZHY0aGlfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FiZHY4aGlfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FiZHYyc2lfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FiZHY0c2lfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FiYXY4cWlfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJhdjE2cWlfMyAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYmF2NGhpXzMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FiYXY4aGlfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJhdjJzaV8zICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYmF2NHNpXzMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZhYmR2MnNmXzMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZhYmR2NHNmXzMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZhYmR2MmRmXzMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHY4aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FuZHYyZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnY4aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2lvcnYyZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnY4aGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3hvcnYyZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjhxaTIgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vbmVfY21wbHYxNnFpMiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fb25lX2NtcGx2NGhpMiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjhoaTIgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9vbmVfY21wbHYyc2kyICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fb25lX2NtcGx2NHNpMiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX29uZV9jbXBsdjJkaTIgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3NldHY4cWkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfc2V0djE2cWkgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX3ZlY19zZXR2NGhpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3NldHY4aGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfc2V0djJzaSAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX3ZlY19zZXR2NHNpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbHNocnY4cWkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbHNocnYxNnFpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbHNocnY0aGkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbHNocnY4aGkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbHNocnYyc2kgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbHNocnY0c2kgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfbHNocnYyZGkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYXNocnY4cWkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYXNocnYxNnFpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYXNocnY0aGkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYXNocnY4aGkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYXNocnYyc2kgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYXNocnY0c2kgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYXNocnYyZGkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfaW1tX3NobHY4cWkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfaW1tX3NobHYxNnFpICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfaW1tX3NobHY0aGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfaW1tX3NobHY4aGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfaW1tX3NobHYyc2kgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfaW1tX3NobHY0c2kgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfaW1tX3NobHYyZGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2OHFpICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2MTZxaSAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2NGhpICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2OGhpICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2MnNpICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2NHNpICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NzaGx2MmRpICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHY4cWlfdW5zaWduZWQgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHYxNnFpX3Vuc2lnbmVkIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHY0aGlfdW5zaWduZWQgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHY4aGlfdW5zaWduZWQgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHYyc2lfdW5zaWduZWQgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHY0c2lfdW5zaWduZWQgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHYyZGlfdW5zaWduZWQgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHY4cWlfc2lnbmVkICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHYxNnFpX3NpZ25lZCAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHY0aGlfc2lnbmVkICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHY4aGlfc2lnbmVkICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHYyc2lfc2lnbmVkICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHY0c2lfc2lnbmVkICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfcmVnX3NobHYyZGlfc2lnbmVkICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3NldHYyZGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfc2V0djJzZiAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX3ZlY19zZXR2NHNmICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3NldHYyZGYgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbWxhdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9tbGF2MTZxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X21sYXY0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbWxhdjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9tbGF2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X21sYXY0c2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbWxzdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9tbHN2MTZxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X21sc3Y0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbWxzdjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9tbHN2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X21sc3Y0c2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtYXh2OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtaW52OHFpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtYXh2MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtaW52MTZxaTMgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtYXh2NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtaW52NGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtYXh2OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtaW52OGhpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtYXh2MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtaW52MnNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtYXh2NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NtaW52NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtYXh2NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VtaW52NHNpMyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmVfbG9fcXVhZF92MTZxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZlX2xvX3F1YWRfdjhoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92ZV9sb19xdWFkX3Y0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmVfbG9fcXVhZF92MmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZlX2xvX3F1YWRfdjRzZiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92ZV9sb19xdWFkX3YyZGYgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9tb3ZlX2hpX3F1YWRfdjE2cWkgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9tb3ZlX2hpX3F1YWRfdjhoaSAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9tb3ZlX2hpX3F1YWRfdjRzaSAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9tb3ZlX2hpX3F1YWRfdjJkaSAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9tb3ZlX2hpX3F1YWRfdjRzZiAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9tb3ZlX2hpX3F1YWRfdjJkZiAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfcGFja190cnVuY192OGhpICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3BhY2tfdHJ1bmNfdjRzaSAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX3ZlY19wYWNrX3RydW5jX3YyZGkgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19wYWNrX3RydW5jX3Y4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19wYWNrX3RydW5jX3Y0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19wYWNrX3RydW5jX3YyZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19sb192MTZxaSAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrdV9sb192MTZxaSAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19sb192OGhpICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrdV9sb192OGhpICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19sb192NHNpICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrdV9sb192NHNpICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19oaV92MTZxaSAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrdV9oaV92MTZxaSAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19oaV92OGhpICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrdV9oaV92OGhpICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrc19oaV92NHNpICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW5wYWNrdV9oaV92NHNpICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfc211bHRfbG9fdjE2cWkgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX3ZlY191bXVsdF9sb192MTZxaSAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3NtdWx0X2xvX3Y4aGkgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW11bHRfbG9fdjhoaSAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX3ZlY19zbXVsdF9sb192NHNpICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3VtdWx0X2xvX3Y0c2kgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfc211bHRfaGlfdjE2cWkgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX3ZlY191bXVsdF9oaV92MTZxaSAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3NtdWx0X2hpX3Y4aGkgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF92ZWNfdW11bHRfaGlfdjhoaSAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX3ZlY19zbXVsdF9oaV92NHNpICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfdmVjX3VtdWx0X2hpX3Y0c2kgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FkZHYyc2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FkZHY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FkZHYyZGYzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YnYyc2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YnY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3N1YnYyZGYzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bHYyc2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bHY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX211bHYyZGYzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2RpdnYyc2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2RpdnY0c2YzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2RpdnYyZGYzICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lZ3Yyc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZWd2NHNmMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVndjJkZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Fic3Yyc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYnN2NHNmMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWJzdjJkZjIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZtYXYyc2Y0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZm1hdjRzZjQgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbWF2MmRmNCAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2J0cnVuY3Yyc2YyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jZWlsdjJzZjIgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvb3J2MnNmMiAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZyaW50bnYyc2YyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9uZWFyYnlpbnR2MnNmMiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmludHYyc2YyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvdW5kdjJzZjIgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9idHJ1bmN2NHNmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2VpbHY0c2YyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Zsb29ydjRzZjIgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mcmludG52NHNmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbmVhcmJ5aW50djRzZjIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JpbnR2NHNmMiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yb3VuZHY0c2YyICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYnRydW5jdjJkZjIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NlaWx2MmRmMiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9vcnYyZGYyICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZnJpbnRudjJkZjIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX25lYXJieWludHYyZGYyICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yaW50djJkZjIgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcm91bmR2MmRmMiAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xidHJ1bmN2MnNmdjJzaTIgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sY2VpbHYyc2Z2MnNpMiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZsb29ydjJzZnYyc2kyICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xyb3VuZHYyc2Z2MnNpMiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZnJpbnRudjJzZnYyc2kyICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGJ0cnVuY3V2MnNmdjJzaTIgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xjZWlsdXYyc2Z2MnNpMiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZmxvb3J1djJzZnYyc2kyICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbHJvdW5kdXYyc2Z2MnNpMiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmcmludG51djJzZnYyc2kyICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sYnRydW5jdjRzZnY0c2kyICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGNlaWx2NHNmdjRzaTIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmbG9vcnY0c2Z2NHNpMiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9scm91bmR2NHNmdjRzaTIgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZyaW50bnY0c2Z2NHNpMiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xidHJ1bmN1djRzZnY0c2kyICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sY2VpbHV2NHNmdjRzaTIgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZsb29ydXY0c2Z2NHNpMiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xyb3VuZHV2NHNmdjRzaTIgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZnJpbnRudXY0c2Z2NHNpMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGJ0cnVuY3YyZGZ2MmRpMiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xjZWlsdjJkZnYyZGkyICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sZmxvb3J2MmRmdjJkaTIgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbHJvdW5kdjJkZnYyZGkyICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmcmludG52MmRmdjJkaTIgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sYnRydW5jdXYyZGZ2MmRpMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGNlaWx1djJkZnYyZGkyICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xmbG9vcnV2MmRmdjJkaTIgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9scm91bmR1djJkZnYyZGkyICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbGZyaW50bnV2MmRmdjJkaTIgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Zsb2F0djJzaXYyc2YyICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9hdHVuc3Yyc2l2MnNmMiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXR2NHNpdjRzZjIgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Zsb2F0dW5zdjRzaXY0c2YyICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mbG9hdHYyZGl2MmRmMiAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmxvYXR1bnN2MmRpdjJkZjIgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY191bnBhY2tzX2xvX3Y0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2Zsb2F0X2V4dGVuZF9sb192MmRmICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3VucGFja3NfaGlfdjRzZiAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZmxvYXRfdHJ1bmNhdGVfbG9fdjJzZiAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2Zsb2F0X3RydW5jYXRlX2hpX3Y0c2YgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3ZtbHN2MnNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdm1sc3Y0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92bWxzdjJkZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4djJzZjMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWludjJzZjMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4djRzZjMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWludjRzZjMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4djJkZjMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWludjJkZjMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4X25hbnYyc2YzICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWluX25hbnYyc2YzICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4X25hbnY0c2YzICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWluX25hbnY0c2YzICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWF4X25hbnYyZGYzICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zbWluX25hbnYyZGYzICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zcGx1c192OHFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NwbHVzX3YxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y191cGx1c192MTZxaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3VwbHVzX3Y0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zcGx1c192OGhpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NwbHVzX3Y0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y191cGx1c192NHNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3VwbHVzX3YyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zcGx1c192MnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NwbHVzX3Yyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y191cGx1c192MnNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc3BsdXNfdjJkZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3VwbHVzX3YyZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2FkZHB2NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2x6djhxaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NsenYxNnFpMiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jbHp2NGhpMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2x6djhoaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NsenYyc2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jbHp2NHNpMiAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3VtaW5fdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWF4X3Y4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3VtYXhfdjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y191bWluX3YxNnFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92MTZxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NtaW5fdjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y191bWF4X3Y0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1pbl92NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NtYXhfdjRoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWluX3Y0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92OGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3VtaW5fdjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWF4X3Y4aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92OGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3VtYXhfdjRzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y191bWluX3Y0c2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NtaW5fdjRzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y191bWF4X3YyZGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1pbl92MmRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NtYXhfdjJkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWluX3YyZGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdW1heF92MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3VtaW5fdjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWF4X3Yyc2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NtYXhfbmFuX3Yyc2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWluX25hbl92MnNmICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF92MnNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NtaW5fdjJzZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWF4X25hbl92MmRmICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl9uYW5fdjJkZiAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NtYXhfdjJkZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWluX3YyZGYgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21heF9uYW5fdjRzZiAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JlZHVjX3NtaW5fbmFuX3Y0c2YgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zbWF4X3Y0c2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfc21pbl92NHNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9ic2x2OHFpX2ludGVybmFsICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2JzbHYxNnFpX2ludGVybmFsICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYnNsdjRoaV9pbnRlcm5hbCAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9ic2x2OGhpX2ludGVybmFsICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2JzbHYyc2lfaW50ZXJuYWwgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYnNsdjRzaV9pbnRlcm5hbCAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9ic2x2MmRpX2ludGVybmFsICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2JzbHYyc2ZfaW50ZXJuYWwgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYnNsdjRzZl9pbnRlcm5hbCAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9ic2x2MmRmX2ludGVybmFsICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXY4cWkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXYxNnFpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXY0aGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXY4aGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXYyc2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXYyZGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXYyc2YgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXY0c2YgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZXYyZGYgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jb21iaW5ldjhxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jb21iaW5ldjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jb21iaW5ldjJzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jb21iaW5ldjJzZiAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jb21iaW5lZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jb21iaW5lZGYgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkbDJ2MTZxaV9pbnRlcm5hbCAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzdWJsMnYxNnFpX2ludGVybmFsICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdWFkZGwydjE2cWlfaW50ZXJuYWwgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VibDJ2MTZxaV9pbnRlcm5hbCAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NhZGRsMnY4aGlfaW50ZXJuYWwgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3N1YmwydjhoaV9pbnRlcm5hbCAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkbDJ2OGhpX2ludGVybmFsICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzdWJsMnY4aGlfaW50ZXJuYWwgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2FkZGwydjRzaV9pbnRlcm5hbCAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VibDJ2NHNpX2ludGVybmFsICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VhZGRsMnY0c2lfaW50ZXJuYWwgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXN1YmwydjRzaV9pbnRlcm5hbCAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkbHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VibHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkbHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VibHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkbHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VibHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkbHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VibHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkbHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VibHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkbHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VibHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkd3Y4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3Vid3Y4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkd3Y4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3Vid3Y4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkd3Y0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3Vid3Y0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkd3Y0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3Vid3Y0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkd3Yyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3Vid3Yyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkd3Yyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3Vid3Yyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkdzJ2MTZxaV9pbnRlcm5hbCAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzdWJ3MnYxNnFpX2ludGVybmFsICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdWFkZHcydjE2cWlfaW50ZXJuYWwgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VidzJ2MTZxaV9pbnRlcm5hbCAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NhZGR3MnY4aGlfaW50ZXJuYWwgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3N1YncydjhoaV9pbnRlcm5hbCAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkdzJ2OGhpX2ludGVybmFsICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzdWJ3MnY4aGlfaW50ZXJuYWwgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2FkZHcydjRzaV9pbnRlcm5hbCAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VidzJ2NHNpX2ludGVybmFsICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VhZGR3MnY0c2lfaW50ZXJuYWwgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXN1YncydjRzaV9pbnRlcm5hbCAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaGFkZHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aGFkZHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhhZGR2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhhZGR2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaHN1YnY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aHN1YnY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhzdWJ2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhzdWJ2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaGFkZHYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aGFkZHYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhhZGR2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhhZGR2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaHN1YnYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aHN1YnYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhzdWJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhzdWJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaGFkZHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aGFkZHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhhZGR2NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhhZGR2NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaHN1YnY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aHN1YnY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhzdWJ2NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhzdWJ2NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaGFkZHY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aGFkZHY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhhZGR2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhhZGR2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaHN1YnY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aHN1YnY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhzdWJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhzdWJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaGFkZHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aGFkZHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhhZGR2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhhZGR2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaHN1YnYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aHN1YnYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhzdWJ2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhzdWJ2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaGFkZHY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aGFkZHY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhhZGR2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhhZGR2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaHN1YnY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91aHN1YnY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcmhzdWJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cmhzdWJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9hZGRobnY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yYWRkaG52OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdWJobnY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yc3ViaG52OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9hZGRobnY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yYWRkaG52NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdWJobnY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yc3ViaG52NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9hZGRobnYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yYWRkaG52MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdWJobnYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yc3ViaG52MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9hZGRobjJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JhZGRobjJ2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3ViaG4ydjhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yc3ViaG4ydjhoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2FkZGhuMnY0c2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmFkZGhuMnY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdWJobjJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JzdWJobjJ2NHNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfYWRkaG4ydjJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yYWRkaG4ydjJkaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N1YmhuMnYyZGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcnN1YmhuMnYyZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9wbXVsdjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9wbXVsdjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YmhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YmhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFkZGRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cWFkZGRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXN1YmRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXN1YmRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGR2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGR2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGR2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGR2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGR2NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGR2NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGR2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGR2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGR2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGR2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGR2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGR2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGR2MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGR2MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGRxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGRxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdXFhZGRkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3FhZGRkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcW1vdnVudjhoaSAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Ftb3Z1bnY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxbW92dW52MmRpICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcW1vdnVuaGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Ftb3Z1bnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxbW92dW5kaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcW1vdm52OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFtb3ZudjhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxbW92bnY0c2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cW1vdm52NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Ftb3ZudjJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VxbW92bnYyZGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcW1vdm5oaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFtb3ZuaGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxbW92bnNpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cW1vdm5zaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Ftb3ZuZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VxbW92bmRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcW5lZ3Y4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FhYnN2OHFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxbmVndjE2cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFic3YxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FuZWd2NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxYWJzdjRoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcW5lZ3Y4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FhYnN2OGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxbmVndjJzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFic3Yyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FuZWd2NHNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxYWJzdjRzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcW5lZ3YyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FhYnN2MmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxbmVncWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWFic3FpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FuZWdoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxYWJzaGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcW5lZ3NpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FhYnNzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGh2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxodjRoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGh2OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxodjhoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGh2MnNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxodjJzaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGh2NHNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxodjRzaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGhoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxoaGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGhzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxoc2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGhfbGFuZXY0aGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FyZG11bGhfbGFuZXY0aGkgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxoX2xhbmV2OGhpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxoX2xhbmV2OGhpICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsaF9sYW5ldjJzaSAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJkbXVsaF9sYW5ldjJzaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGhfbGFuZXY0c2kgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FyZG11bGhfbGFuZXY0c2kgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxoX2xhbmVxdjRoaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxoX2xhbmVxdjRoaSAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsaF9sYW5lcXY4aGkgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJkbXVsaF9sYW5lcXY4aGkgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGhfbGFuZXF2MnNpICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FyZG11bGhfbGFuZXF2MnNpICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxoX2xhbmVxdjRzaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxcmRtdWxoX2xhbmVxdjRzaSAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsaF9sYW5laGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJkbXVsaF9sYW5laGkgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGhfbGFuZXNpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FyZG11bGhfbGFuZXNpICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsdjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2x2NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbHYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsdjJzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sYWxoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxzbGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2xzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbF9sYW5ldjRoaV9pbnRlcm5hbCAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2xfbGFuZXY0aGlfaW50ZXJuYWwgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsX2xhbmV2MnNpX2ludGVybmFsICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxzbF9sYW5ldjJzaV9pbnRlcm5hbCAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sYWxfbGFuZWhpX2ludGVybmFsICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsX2xhbmVoaV9pbnRlcm5hbCAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbF9sYW5lc2lfaW50ZXJuYWwgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2xfbGFuZXNpX2ludGVybmFsICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsX252NGhpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2xfbnY0aGkgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbF9udjJzaSAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsX252MnNpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sYWwydjhoaV9pbnRlcm5hbCAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsMnY4aGlfaW50ZXJuYWwgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbDJ2NHNpX2ludGVybmFsICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2wydjRzaV9pbnRlcm5hbCAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsMl9sYW5ldjhoaV9pbnRlcm5hbCAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsMl9sYW5ldjhoaV9pbnRlcm5hbCAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsMl9sYW5ldjRzaV9pbnRlcm5hbCAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsMl9sYW5ldjRzaV9pbnRlcm5hbCAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsMl9udjhoaV9pbnRlcm5hbCAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxzbDJfbnY4aGlfaW50ZXJuYWwgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sYWwyX252NHNpX2ludGVybmFsICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsMl9udjRzaV9pbnRlcm5hbCAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbHY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbHYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbHNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbF9sYW5ldjRoaV9pbnRlcm5hbCAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsX2xhbmV2MnNpX2ludGVybmFsICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGxfbGFuZWhpX2ludGVybmFsICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbF9sYW5lc2lfaW50ZXJuYWwgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsX252NGhpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsX252MnNpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsMnY4aGlfaW50ZXJuYWwgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGwydjRzaV9pbnRlcm5hbCAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbDJfbGFuZXY4aGlfaW50ZXJuYWwgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGwyX2xhbmV2NHNpX2ludGVybmFsIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsMl9udjhoaV9pbnRlcm5hbCAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGwyX252NHNpX2ludGVybmFsICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobHY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobHY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaGx2OHFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaGx2OHFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobHYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobHYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaGx2MTZxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaGx2MTZxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobHY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobHY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaGx2NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaGx2NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobHY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobHY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaGx2OGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaGx2OGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobHYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobHYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaGx2MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaGx2MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobHY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobHY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaGx2NHNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaGx2NHNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobHYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobHYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaGx2MmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaGx2MmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobGRpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobGRpICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaGxkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaGxkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGx2OHFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGx2OHFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsdjhxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsdjhxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGx2MTZxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGx2MTZxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsdjE2cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsdjE2cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGx2NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGx2NGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsdjRoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsdjRoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGx2OGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGx2OGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsdjhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsdjhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGx2MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGx2MnNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsdjJzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsdjJzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGx2NHNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGx2NHNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsdjRzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsdjRzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGx2MmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGx2MmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsdjJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsdjJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGxxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGxxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hscWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hscWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGxoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGxoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsaGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsaGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGxzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGxzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FzaGxkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFzaGxkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Fyc2hsZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXFyc2hsZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobGxfbnY4cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobGxfbnY4cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobGxfbnY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobGxfbnY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobGxfbnYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobGxfbnYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobGwyX252MTZxaSAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobGwyX252MTZxaSAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobGwyX252OGhpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobGwyX252OGhpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NobGwyX252NHNpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNobGwyX252NHNpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaHJfbnY4cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaHJfbnY4cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaHJfbnYxNnFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaHJfbnYxNnFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaHJfbnY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaHJfbnY0aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaHJfbnY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaHJfbnY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaHJfbnYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaHJfbnYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaHJfbnY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaHJfbnY0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaHJfbnYyZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaHJfbnYyZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzaHJfbmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzaHJfbmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NyYV9udjhxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3JhX252OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3Nyc3JhX252OHFpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzcmFfbnY4cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3JhX252MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzcmFfbnYxNnFpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzcmFfbnYxNnFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cnNyYV9udjE2cWkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzcmFfbnY0aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNyYV9udjRoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcnNyYV9udjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3Vyc3JhX252NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NyYV9udjhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3JhX252OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3Nyc3JhX252OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzcmFfbnY4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3JhX252MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzcmFfbnYyc2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzcmFfbnYyc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cnNyYV9udjJzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzcmFfbnY0c2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNyYV9udjRzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcnNyYV9udjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3Vyc3JhX252NHNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NyYV9udjJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3JhX252MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3Nyc3JhX252MmRpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXJzcmFfbnYyZGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3JhX25kaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzcmFfbmRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3JzcmFfbmRpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cnNyYV9uZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzbGlfbnY4cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNsaV9udjhxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3JpX252OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzcmlfbnY4cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NsaV9udjE2cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c2xpX252MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzcmlfbnYxNnFpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNyaV9udjE2cWkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc2xpX252NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzbGlfbnY0aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NyaV9udjRoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3JpX252NGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzbGlfbnY4aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNsaV9udjhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3JpX252OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzcmlfbnY4aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NsaV9udjJzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c2xpX252MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzcmlfbnYyc2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNyaV9udjJzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc2xpX252NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzbGlfbnY0c2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NyaV9udjRzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3JpX252NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzbGlfbnYyZGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNsaV9udjJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3JpX252MmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3VzcmlfbnYyZGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3NsaV9uZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c2xpX25kaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NzcmlfbmRpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXNyaV9uZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnY4cWkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9udjhxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9udjhxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnYxNnFpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9udjE2cWkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9udjE2cWkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnY0aGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9udjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9udjRoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnY4aGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9udjhoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9udjhoaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnYyc2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9udjJzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9udjJzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9udjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9udjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnYyZGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9udjJkaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9udjJkaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9ucWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9ucWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbmhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9uaGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9uaGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9uc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9uc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobHVfbmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNobF9uZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNobF9uZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocnVuX252OGhpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJ1bl9udjhoaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocm5fbnY4aGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNocm5fbnY4aGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJuX252OGhpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXJzaHJuX252OGhpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocnVuX252NHNpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJ1bl9udjRzaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocm5fbnY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNocm5fbnY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJuX252NHNpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXJzaHJuX252NHNpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocnVuX252MmRpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJ1bl9udjJkaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocm5fbnYyZGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNocm5fbnYyZGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJuX252MmRpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXJzaHJuX252MmRpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocnVuX25oaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJ1bl9uaGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocm5fbmhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNocm5fbmhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJuX25oaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXJzaHJuX25oaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocnVuX25zaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJ1bl9uc2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocm5fbnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNocm5fbnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJuX25zaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXJzaHJuX25zaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocnVuX25kaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJ1bl9uZGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXNocm5fbmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXNocm5fbmRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcXJzaHJuX25kaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91cXJzaHJuX25kaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djE2cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djhoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djRzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djJkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0ZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxlZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdlZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0ZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0dXY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldXY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldXY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0dXY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0dXYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldXYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldXYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0dXYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0dXY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldXY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldXY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0dXY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0dXY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldXY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldXY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0dXY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0dXYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldXYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldXYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0dXYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0dXY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldXY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldXY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0dXY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0dXYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldXYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldXYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0dXYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0dWRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldWRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldWRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0dWRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbXRzdHY4cWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbXRzdHYxNnFpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbXRzdHY0aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbXRzdHY4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbXRzdHYyc2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbXRzdHY0c2kgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbXRzdHYyZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbXRzdGRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djJzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0djJkZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxldjJkZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxdjJkZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdldjJkZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0djJkZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxlc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdlc2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0c2YgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWx0ZGYgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWxlZGYgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWVxZGYgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWdlZGYgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jbWd0ZGYgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9hZGRwdjhxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9hZGRwdjRoaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9hZGRwdjJzaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9hZGRwZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NxcnR2MnNmMiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9zcXJ0djRzZjIgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fc3FydHYyZGYyICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19sb2FkX2xhbmVzb2l2MTZxaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfbG9hZF9sYW5lc29pdjhoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2xvYWRfbGFuZXNvaXY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19sb2FkX2xhbmVzb2l2MmRpICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfbG9hZF9sYW5lc29pdjRzZiAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2xvYWRfbGFuZXNvaXYyZGYgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zdG9yZV9sYW5lc29pdjE2cWkgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc3RvcmVfbGFuZXNvaXY4aGkgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3N0b3JlX2xhbmVzb2l2NHNpICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zdG9yZV9sYW5lc29pdjJkaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc3RvcmVfbGFuZXNvaXY0c2YgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3N0b3JlX2xhbmVzb2l2MmRmICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19sb2FkX2xhbmVzY2l2MTZxaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfbG9hZF9sYW5lc2NpdjhoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2xvYWRfbGFuZXNjaXY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19sb2FkX2xhbmVzY2l2MmRpICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfbG9hZF9sYW5lc2NpdjRzZiAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2xvYWRfbGFuZXNjaXYyZGYgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zdG9yZV9sYW5lc2NpdjE2cWkgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc3RvcmVfbGFuZXNjaXY4aGkgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3N0b3JlX2xhbmVzY2l2NHNpICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zdG9yZV9sYW5lc2NpdjJkaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc3RvcmVfbGFuZXNjaXY0c2YgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3N0b3JlX2xhbmVzY2l2MmRmICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19sb2FkX2xhbmVzeGl2MTZxaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfbG9hZF9sYW5lc3hpdjhoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2xvYWRfbGFuZXN4aXY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19sb2FkX2xhbmVzeGl2MmRpICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfbG9hZF9sYW5lc3hpdjRzZiAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2xvYWRfbGFuZXN4aXYyZGYgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zdG9yZV9sYW5lc3hpdjE2cWkgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc3RvcmVfbGFuZXN4aXY4aGkgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3N0b3JlX2xhbmVzeGl2NHNpICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19zdG9yZV9sYW5lc3hpdjJkaSAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc3RvcmVfbGFuZXN4aXY0c2YgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3N0b3JlX2xhbmVzeGl2MmRmICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQydjhxaV9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkMnY0aGlfZHJlZyAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDJ2MnNpX2RyZWcgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQydjJzZl9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkMmRpX2RyZWcgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDJkZl9kcmVnICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQzdjhxaV9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkM3Y0aGlfZHJlZyAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDN2MnNpX2RyZWcgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQzdjJzZl9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkM2RpX2RyZWcgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDNkZl9kcmVnICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQ0djhxaV9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkNHY0aGlfZHJlZyAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDR2MnNpX2RyZWcgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQ0djJzZl9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkNGRpX2RyZWcgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDRkZl9kcmVnICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdGJsMXY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdGJsMXYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdGJsMnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfY29tYmluZXYxNnFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnY4cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnYxNnFpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnY0aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnY4aGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnYyc2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnY0c2kgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnYyZGkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnYyc2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnY0c2YgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMXYyZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfemlwMnYyZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMXYyZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdHJuMnYyZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMXYyZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfdXpwMnYyZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjhxaV9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0MnY0aGlfZHJlZyAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDJ2MnNpX2RyZWcgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjJzZl9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0MmRpX2RyZWcgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDJkZl9kcmVnICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QzdjhxaV9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3Y0aGlfZHJlZyAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDN2MnNpX2RyZWcgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QzdjJzZl9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M2RpX2RyZWcgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDNkZl9kcmVnICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Q0djhxaV9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0NHY0aGlfZHJlZyAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2MnNpX2RyZWcgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3Q0djJzZl9kcmVnICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0NGRpX2RyZWcgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDRkZl9kcmVnICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZnJlY3BldjJzZiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2ZyZWNwZXY0c2YgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9mcmVjcGV2MmRmICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZnJlY3BzdjJzZiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZnJlY3BzdjRzZiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZnJlY3BzdjJkZiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19jb21wYXJlX2FuZF9zd2FwcWlfMSAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2NvbXBhcmVfYW5kX3N3YXBoaV8xICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfY29tcGFyZV9hbmRfc3dhcHNpXzEgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19jb21wYXJlX2FuZF9zd2FwZGlfMSAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2V4Y2hhbmdlcWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZXhjaGFuZ2VoaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19leGNoYW5nZXNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2V4Y2hhbmdlZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYWRkcWkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3VicWkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfb3JxaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfeG9ycWkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYW5kcWkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYWRkaGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3ViaGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfb3JoaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfeG9yaGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYW5kaGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYWRkc2kgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3Vic2kgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfb3JzaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfeG9yc2kgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYW5kc2kgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYWRkZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3ViZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfb3JkaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfeG9yZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYW5kZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbmFuZHFpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbmFuZGhpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbmFuZHNpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbmFuZGRpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZmV0Y2hfYWRkcWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19mZXRjaF9zdWJxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2ZldGNoX29ycWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZmV0Y2hfeG9ycWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19mZXRjaF9hbmRxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2ZldGNoX2FkZGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZmV0Y2hfc3ViaGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19mZXRjaF9vcmhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2ZldGNoX3hvcmhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZmV0Y2hfYW5kaGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19mZXRjaF9hZGRzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2ZldGNoX3N1YnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZmV0Y2hfb3JzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19mZXRjaF94b3JzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2ZldGNoX2FuZHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZmV0Y2hfYWRkZGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19mZXRjaF9zdWJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2ZldGNoX29yZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZmV0Y2hfeG9yZGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19mZXRjaF9hbmRkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2ZldGNoX25hbmRxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfZmV0Y2hfbmFuZGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19mZXRjaF9uYW5kc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2ZldGNoX25hbmRkaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYWRkX2ZldGNocWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19zdWJfZmV0Y2hxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX29yX2ZldGNocWkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfeG9yX2ZldGNocWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19hbmRfZmV0Y2hxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2FkZF9mZXRjaGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3ViX2ZldGNoaGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19vcl9mZXRjaGhpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX3hvcl9mZXRjaGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYW5kX2ZldGNoaGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19hZGRfZmV0Y2hzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX3N1Yl9mZXRjaHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfb3JfZmV0Y2hzaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY194b3JfZmV0Y2hzaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2FuZF9mZXRjaHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfYWRkX2ZldGNoZGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19zdWJfZmV0Y2hkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX29yX2ZldGNoZGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfeG9yX2ZldGNoZGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19hbmRfZmV0Y2hkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX25hbmRfZmV0Y2hxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbmFuZF9mZXRjaGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19uYW5kX2ZldGNoc2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX25hbmRfZmV0Y2hkaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbG9hZHFpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbG9hZGhpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbG9hZHNpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfbG9hZGRpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3RvcmVxaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3RvcmVoaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3RvcmVzaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfc3RvcmVkaSAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xvYWRfZXhjbHVzaXZlcWkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xvYWRfZXhjbHVzaXZlaGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xvYWRfZXhjbHVzaXZlc2kgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xvYWRfZXhjbHVzaXZlZGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0b3JlX2V4Y2x1c2l2ZXFpICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3RvcmVfZXhjbHVzaXZlaGkgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdG9yZV9leGNsdXNpdmVzaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0b3JlX2V4Y2x1c2l2ZWRpICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NicmFuY2hzaTQgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2JyYW5jaGRpNCAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jYnJhbmNoc2Y0ICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NicmFuY2hkZjQgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY2FzZXNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3Byb2xvZ3VlICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2VwaWxvZ3VlICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3NpYmNhbGxfZXBpbG9ndWUgICAgICAgICAgICAgICAgICAgKHZvaWQpOworI2RlZmluZSBHRU5fQ0FMTChBLCBCLCBDLCBEKSBnZW5fY2FsbCAoKEEpLCAoQiksIChDKSkKK2V4dGVybiBydHggICAgICAgIGdlbl9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKKyNkZWZpbmUgR0VOX0NBTExfVkFMVUUoQSwgQiwgQywgRCwgRSkgZ2VuX2NhbGxfdmFsdWUgKChBKSwgKEIpLCAoQyksIChEKSkKK2V4dGVybiBydHggICAgICAgIGdlbl9jYWxsX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworI2RlZmluZSBHRU5fU0lCQ0FMTChBLCBCLCBDLCBEKSBnZW5fc2liY2FsbCAoKEEpLCAoQiksIChDKSkKK2V4dGVybiBydHggICAgICAgIGdlbl9zaWJjYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKKyNkZWZpbmUgR0VOX1NJQkNBTExfVkFMVUUoQSwgQiwgQywgRCwgRSkgZ2VuX3NpYmNhbGxfdmFsdWUgKChBKSwgKEIpLCAoQyksIChEKSkKK2V4dGVybiBydHggICAgICAgIGdlbl9zaWJjYWxsX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3VudHlwZWRfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnFpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZoaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92c2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmRpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3Z0aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92c2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3Z0ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kc2lkaTIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3plcm9fZXh0ZW5kc2lkaTIgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9leHRlbmRxaXNpMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5femVyb19leHRlbmRxaXNpMiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2V4dGVuZGhpc2kyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl96ZXJvX2V4dGVuZGhpc2kyICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0ZW5kcWlkaTIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3plcm9fZXh0ZW5kcWlkaTIgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9leHRlbmRoaWRpMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5femVyb19leHRlbmRoaWRpMiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2V4dGVuZHFpaGkyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl96ZXJvX2V4dGVuZHFpaGkyICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWRkc2kzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWRkZGkzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3Jlc2k0ICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jc3RvcmVkaTQgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2NzdG9yZXNmNCAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3N0b3JlZGY0ICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jbW92c2k2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jbW92ZGk2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jbW92c2Y2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jbW92ZGY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZxaWNjICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmhpY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92c2ljYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZkaWNjICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnNmc2ljYyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92c2ZkaWNjICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZkZnNpY2MgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmRmZGljYyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZmZzc2kyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Zmc2RpMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9jdHpzaTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fY3R6ZGkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGxzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaHJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xzaHJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGxkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaHJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2xzaHJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGxxaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FzaGxoaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvdHJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvdHJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvdGxzaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3JvdGxkaTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2V4dHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZXh0enYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9pbnN2c2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2luc3ZkaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVsb2FkX3NwX2ltbWVkaWF0ZSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWxvYWRfbW92dGkgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWxvYWRfbW92dGYgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdGxzZ2Rfc21hbGwgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2dldF90aHJlYWRfcG9pbnRlcmRpICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djhxaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnYxNnFpICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3Z2NGhpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djhoaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnYyc2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3Z2NHNpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djJkaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdnYyc2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3Z2NHNmICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92djJkZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdm1pc2FsaWdudjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZtaXNhbGlnbnYxNnFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92bWlzYWxpZ252NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdm1pc2FsaWdudjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZtaXNhbGlnbnYyc2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92bWlzYWxpZ252NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdm1pc2FsaWdudjJkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZtaXNhbGlnbnYyc2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92bWlzYWxpZ252NHNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdm1pc2FsaWdudjJkZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NwbGl0X3NpbWRfbW92djE2cWkgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcGxpdF9zaW1kX21vdnY4aGkgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3BsaXRfc2ltZF9tb3Z2NHNpICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NwbGl0X3NpbWRfbW92djJkaSAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcGxpdF9zaW1kX21vdnY0c2YgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3BsaXRfc2ltZF9tb3Z2MmRmICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjE2cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjRoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjhoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjRzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hsdjJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hydjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hydjE2cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hydjRoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hydjhoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hydjJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hydjRzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9sc2hydjJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hydjhxaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hydjE2cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hydjRoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hydjhoaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hydjJzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hydjRzaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hc2hydjJkaTMgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHY4aGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNobHYyZGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNocnY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNocnYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNocnY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNocnY4aGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNocnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92YXNocnY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92bHNocnY4cWkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92bHNocnYxNnFpMyAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92bHNocnY0aGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92bHNocnY4aGkzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92bHNocnYyc2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92bHNocnY0c2kzICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djhxaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djE2cWkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djRoaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djhoaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djJzaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djRzaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djJkaSAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djJzZiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djRzZiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfc2V0djJkZiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZlX2hpX3F1YWRfdjE2cWkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92ZV9oaV9xdWFkX3Y4aGkgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmVfaGlfcXVhZF92NHNpICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3ZlX2hpX3F1YWRfdjJkaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92ZV9oaV9xdWFkX3Y0c2YgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmVfaGlfcXVhZF92MmRmICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGFja190cnVuY192NGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGFja190cnVuY192MnNpICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGFja190cnVuY19kaSAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfdW5wYWNrc19oaV92MTZxaSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3VucGFja3VfaGlfdjE2cWkgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY191bnBhY2tzX2hpX3Y4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfdW5wYWNrdV9oaV92OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3VucGFja3NfaGlfdjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY191bnBhY2t1X2hpX3Y0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfdW5wYWNrc19sb192MTZxaSAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3VucGFja3VfbG9fdjE2cWkgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY191bnBhY2tzX2xvX3Y4aGkgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfdW5wYWNrdV9sb192OGhpICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3VucGFja3NfbG9fdjRzaSAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY191bnBhY2t1X2xvX3Y0c2kgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fc211bHRfbG9fdjE2cWkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fdW11bHRfbG9fdjE2cWkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fc211bHRfbG9fdjhoaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fdW11bHRfbG9fdjhoaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fc211bHRfbG9fdjRzaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fdW11bHRfbG9fdjRzaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fc211bHRfaGlfdjE2cWkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fdW11bHRfaGlfdjE2cWkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fc211bHRfaGlfdjhoaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fdW11bHRfaGlfdjhoaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fc211bHRfaGlfdjRzaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfd2lkZW5fdW11bHRfaGlfdjRzaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXh2MnNmdjJzaTIgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4dW5zdjJzZnYyc2kyICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZpeHY0c2Z2NHNpMiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXh1bnN2NHNmdjRzaTIgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4djJkZnYyZGkyICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZpeHVuc3YyZGZ2MmRpMiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXhfdHJ1bmN2MnNmdjJzaTIgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4dW5zX3RydW5jdjJzZnYyc2kyICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZpeF90cnVuY3Y0c2Z2NHNpMiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9maXh1bnNfdHJ1bmN2NHNmdjRzaTIgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZml4X3RydW5jdjJkZnYyZGkyICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2ZpeHVuc190cnVuY3YyZGZ2MmRpMiAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9mdHJ1bmN2MnNmMiAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZnRydW5jdjRzZjIgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2Z0cnVuY3YyZGYyICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGFja190cnVuY192MmRmICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGFja190cnVuY19kZiAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9yZWR1Y19zcGx1c192NHNmICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fcmVkdWNfdXBsdXNfdjRzZiAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9ic2x2OHFpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2JzbHYxNnFpICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYnNsdjRoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9ic2x2OGhpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2JzbHYyc2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYnNsdjRzaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9ic2x2MmRpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2JzbHYyc2YgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NpbWRfYnNsdjRzZiAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2ltZF9ic2x2MmRmICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY4cWl2OHFpICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYxNnFpdjE2cWkgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0aGl2NGhpICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY4aGl2OGhpICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2l2MnNpICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2l2NHNpICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGl2MmRpICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2Z2MnNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2Z2NHNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2Z2MmRmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2l2MnNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2l2NHNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyc2l2MmRmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2Z2MnNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2Z2NHNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2Z2MmRmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2l2MnNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2l2NHNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHY0c2l2MmRmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGZ2MnNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGZ2NHNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGZ2MmRmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGl2MnNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGl2NHNmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF92Y29uZF9pbnRlcm5hbHYyZGl2MmRmICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2OHFpdjhxaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2MTZxaXYxNnFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2NGhpdjRoaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2OGhpdjhoaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2MnNpdjJzaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2NHNpdjRzaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2MmRpdjJkaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2MnNmdjJzZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2NHNmdjRzZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2MmRmdjJkZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2MnNpdjJzZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2NHNpdjRzZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR2MmRpdjJkZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR1djhxaXY4cWkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR1djE2cWl2MTZxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR1djRoaXY0aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR1djhoaXY4aGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR1djJzaXYyc2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR1djRzaXY0c2kgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmNvbmR1djJkaXYyZGkgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jcmVhdGV2OHFpICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfY3JlYXRldjRoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2NyZWF0ZXYyc2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9jcmVhdGVkaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfY3JlYXRlZGYgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2NyZWF0ZXYyc2YgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9nZXRfbGFuZWRpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY4cWl2OHFpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2OHFpdjRoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaXYyc2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY4cWl2MnNmICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2OHFpZGkgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhxaWRmICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY0aGl2OHFpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpdjRoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaXYyc2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY0aGl2MnNmICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2NGhpZGkgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRoaWRmICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYyc2l2OHFpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNpdjRoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaXYyc2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYyc2l2MnNmICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNpZGkgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzaWRmICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYyc2Z2OHFpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNmdjRoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzZnYyc2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYyc2Z2MnNmICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MnNmZGkgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJzZmRmICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldGRpdjhxaSAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXRkaXY0aGkgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2MnNpICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldGRpZGkgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXRkaWRmICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0ZGl2MnNmICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjE2cWkgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXY4aGkgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2NHNpICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYxNnFpdjJkaSAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MTZxaXY0c2YgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djE2cWl2MmRmICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2MTZxaSAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjhoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXY0c2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY4aGl2MmRpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2OGhpdjRzZiAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djhoaXYyZGYgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2MTZxaSAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjhoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzaXY0c2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY0c2l2MmRpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNpdjRzZiAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzaXYyZGYgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY0c2Z2MTZxaSAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNmdjhoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzZnY0c2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHY0c2Z2MmRpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2NHNmdjRzZiAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djRzZnYyZGYgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2MTZxaSAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRpdjhoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXY0c2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYyZGl2MmRpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRpdjRzZiAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkaXYyZGYgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYyZGZ2MTZxaSAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRmdjhoaSAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkZnY0c2kgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9yZWludGVycHJldHYyZGZ2MmRpICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfcmVpbnRlcnByZXR2MmRmdjRzZiAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3JlaW50ZXJwcmV0djJkZnYyZGYgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2NvbWJpbmV2OHFpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2NvbWJpbmV2NGhpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2NvbWJpbmV2MnNpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2NvbWJpbmV2MnNmICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2NvbWJpbmVkaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zaW1kX2NvbWJpbmVkZiAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkbDJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkbDJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkbDJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkbDJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkbDJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkbDJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VibDJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VibDJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VibDJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VibDJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VibDJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VibDJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkdzJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkdzJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zYWRkdzJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkdzJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkdzJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91YWRkdzJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VidzJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VidzJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zc3VidzJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VidzJ2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VidzJ2OGhpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF91c3VidzJ2NHNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsX2xhbmV2NGhpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbF9sYW5ldjJzaSAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sYWxfbGFuZWhpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsX2xhbmVzaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbF9sYW5lcXY0aGkgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sYWxfbGFuZXF2MnNpICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsX2xhbmVxaGkgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbF9sYW5lcXNpICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2xfbGFuZXY0aGkgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsX2xhbmV2MnNpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxzbF9sYW5laGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2xfbGFuZXNpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsX2xhbmVxdjRoaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxzbF9sYW5lcXYyc2kgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2xfbGFuZXFoaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsX2xhbmVxc2kgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbDJ2OGhpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsMnY0c2kgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2wydjhoaSAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxzbDJ2NHNpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsMl9sYW5ldjhoaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbDJfbGFuZXY0c2kgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sYWwyX2xhbmVxdjhoaSAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbGFsMl9sYW5lcXY0c2kgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxzbDJfbGFuZXY4aGkgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2wyX2xhbmV2NHNpICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsMl9sYW5lcXY4aGkgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxzbDJfbGFuZXF2NHNpICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sYWwyX252OGhpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbWxhbDJfbnY0c2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtbHNsMl9udjhoaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG1sc2wyX252NHNpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbF9sYW5ldjRoaSAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsX2xhbmV2MnNpICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGxfbGFuZWhpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbF9sYW5lc2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsX2xhbmVxdjRoaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGxfbGFuZXF2MnNpICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbDJ2OGhpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbDJ2NHNpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbDJfbGFuZXY4aGkgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsMl9sYW5ldjRzaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NxZG11bGwyX2xhbmVxdjhoaSAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3FkbXVsbDJfbGFuZXF2NHNpICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsMl9udjhoaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zcWRtdWxsMl9udjRzaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fbW92b2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21vdmNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9tb3Z4aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDJ2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQzdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkNHY4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDJ2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQzdjRoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkNHY0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDJ2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQzdjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkNHYyc2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDJ2MnNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQzdjJzZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkNHYyc2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDJkaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQzZGkgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkNGRpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDJkZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQzZGYgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkNGRmICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDF2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQxdjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkMXY0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDF2OGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQxdjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkMXY0c2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDF2MmRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQxdjJzZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkMXY0c2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDF2MmRmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQydjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkM3YxNnFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDR2MTZxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQydjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkM3Y4aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDR2OGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQydjRzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkM3Y0c2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDR2NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQydjJkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkM3YyZGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDR2MmRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQydjRzZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkM3Y0c2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDR2NHNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfbGQydjJkZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X2xkM3YyZGYgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9sZDR2MmRmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdvaXY4cWkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdjaXY4cWkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWd4aXY4cWkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdvaXY0aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdjaXY0aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWd4aXY0aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdvaXYyc2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdjaXYyc2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWd4aXYyc2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdvaXYyc2YgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdjaXYyc2YgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWd4aXYyc2YgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdvaWRpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdjaWRpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWd4aWRpICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdvaWRmICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWdjaWRmICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X2RyZWd4aWRmICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdvaXYxNnFpICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdjaXYxNnFpICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWd4aXYxNnFpICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdvaXY4aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdjaXY4aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWd4aXY4aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdvaXY0c2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWd4aXY0c2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdvaXYyZGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdvaXY0c2YgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2YgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWd4aXY0c2YgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdvaXYyZGYgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGYgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfZ2V0X3FyZWd4aXYyZGYgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19wZXJtX2NvbnN0djhxaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3Blcm1fY29uc3R2MTZxaSAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGVybV9jb25zdHY0aGkgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19wZXJtX2NvbnN0djhoaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3Blcm1fY29uc3R2MnNpICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGVybV9jb25zdHY0c2kgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19wZXJtX2NvbnN0djJkaSAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3Blcm1fY29uc3R2MnNmICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGVybV9jb25zdHY0c2YgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19wZXJtX2NvbnN0djJkZiAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX3Blcm12OHFpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfcGVybXYxNnFpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3Y4cWkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2OHFpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjRoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3Y0aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjJzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3Yyc2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2MnNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjJzZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3Yyc2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2MnNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QyZGkgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M2RpICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDRkaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QyZGYgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M2RmICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDRkZiAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjE2cWkgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3YxNnFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2MTZxaSAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3Y4aGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2OGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjRzaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3Y0c2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjJkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3YyZGkgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2MmRpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjRzZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3Y0c2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2NHNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QydjJkZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0M3YyZGYgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDR2MmRmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QxdjhxaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0MXYxNnFpICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDF2NGhpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QxdjhoaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0MXYyc2kgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDF2NHNpICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QxdjJkaSAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3N0MXYyc2YgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zdDF2NHNmICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc3QxdjJkZiAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2V0X3FyZWdjaXYxNnFpICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjE2cWkgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NldF9xcmVnb2l2OGhpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjhoaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NldF9xcmVnb2l2NHNpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2V0X3FyZWdjaXY0c2kgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRpICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGkgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjJkaSAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NldF9xcmVnb2l2NHNmICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2V0X3FyZWdjaXY0c2YgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjRzZiAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRmICAgICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGYgICAgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYWFyY2g2NF9zZXRfcXJlZ3hpdjJkZiAgICAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfaW5pdHY4cWkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2MTZxaSAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19pbml0djRoaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfaW5pdHY4aGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2MnNpICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19pbml0djRzaSAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfaW5pdHYyZGkgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fdmVjX2luaXR2MnNmICAgICAgICAgICAgICAgICAgICAgICAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX3ZlY19pbml0djRzZiAgICAgICAgICAgICAgICAgICAgICAgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl92ZWNfaW5pdHYyZGYgICAgICAgICAgICAgICAgICAgICAgIChydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2NvbXBhcmVfYW5kX3N3YXBxaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX2F0b21pY19jb21wYXJlX2FuZF9zd2FwaGkgICAgICAgICAgKHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggICAgICAgIGdlbl9hdG9taWNfY29tcGFyZV9hbmRfc3dhcHNpICAgICAgICAgIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fYXRvbWljX2NvbXBhcmVfYW5kX3N3YXBkaSAgICAgICAgICAocnR4LCBydHgsIHJ0eCwgcnR4LCBydHgsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCAgICAgICAgZ2VuX21lbV90aHJlYWRfZmVuY2UgICAgICAgICAgICAgICAgICAgKHJ0eCk7CitleHRlcm4gcnR4ICAgICAgICBnZW5fZG1iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnR4KTsKKworI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pbnNuLW1vZGVzLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1tb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYmUxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1tb2Rlcy5oCkBAIC0wLDAgKzEsMTYxIEBACisvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIG1hY2htb2RlLmRlZiBhbmQgY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWYKKyAgIGJ5IGdlbm1vZGVzLiAgKi8KKworI2lmbmRlZiBHQ0NfSU5TTl9NT0RFU19ICisjZGVmaW5lIEdDQ19JTlNOX01PREVTX0gKKworZW51bSBtYWNoaW5lX21vZGUKK3sKKyAgVk9JRG1vZGUsICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxNzIgKi8KKyAgQkxLbW9kZSwgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxNzYgKi8KKyAgQ0Ntb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoyMDQgKi8KKyAgQ0NGUG1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjIxICovCisgIENDRlBFbW9kZSwgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjoyMiAqLworICBDQ19TV1Btb2RlLCAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6MjMgKi8KKyAgQ0NfWkVTV1Btb2RlLCAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjI0ICovCisgIENDX1NFU1dQbW9kZSwgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjoyNSAqLworICBDQ19OWm1vZGUsICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6MjYgKi8KKyAgQkltb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxNzkgKi8KKyAgUUltb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxODQgKi8KKyAgSEltb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxODUgKi8KKyAgU0ltb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxODYgKi8KKyAgREltb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxODcgKi8KKyAgVEltb2RlLCAgICAgICAgICAgICAgICAgIC8qIG1hY2htb2RlLmRlZjoxODggKi8KKyAgRUltb2RlLCAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjM5ICovCisgIE9JbW9kZSwgICAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjozNSAqLworICBDSW1vZGUsICAgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6NDAgKi8KKyAgWEltb2RlLCAgICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjQxICovCisgIFFRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjA3ICovCisgIEhRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjA4ICovCisgIFNRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjA5ICovCisgIERRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjEwICovCisgIFRRbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjExICovCisgIFVRUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjEzICovCisgIFVIUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE0ICovCisgIFVTUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE1ICovCisgIFVEUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE2ICovCisgIFVUUW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE3ICovCisgIEhBbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjE5ICovCisgIFNBbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjIwICovCisgIERBbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjIxICovCisgIFRBbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjIyICovCisgIFVIQW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjI0ICovCisgIFVTQW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjI1ICovCisgIFVEQW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjI2ICovCisgIFVUQW1vZGUsICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjI3ICovCisgIFNGbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MTk5ICovCisgIERGbW9kZSwgICAgICAgICAgICAgICAgICAvKiBtYWNobW9kZS5kZWY6MjAwICovCisgIFRGbW9kZSwgICAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo1NCAqLworICBTRG1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzOSAqLworICBERG1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjI0MCAqLworICBURG1vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjI0MSAqLworICBDUUltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBDSEltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBDU0ltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBDREltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBDVEltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBDRUltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBDT0ltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBDQ0ltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBDWEltb2RlLCAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNSAqLworICBTQ21vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNiAqLworICBEQ21vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNiAqLworICBUQ21vZGUsICAgICAgICAgICAgICAgICAgLyogbWFjaG1vZGUuZGVmOjIzNiAqLworICBWOFFJbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6MjkgKi8KKyAgVjRISW1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjI5ICovCisgIFYyU0ltb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjoyOSAqLworICBWMTZRSW1vZGUsICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6MzAgKi8KKyAgVjhISW1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjMwICovCisgIFY0U0ltb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjozMCAqLworICBWMkRJbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6MzAgKi8KKyAgVjMyUUltb2RlLCAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjQ0ICovCisgIFYxNkhJbW9kZSwgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo0NCAqLworICBWOFNJbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6NDQgKi8KKyAgVjRESW1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjQ0ICovCisgIFYyVEltb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo0NCAqLworICBWNDhRSW1vZGUsICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6NDcgKi8KKyAgVjI0SEltb2RlLCAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjQ3ICovCisgIFYxMlNJbW9kZSwgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo0NyAqLworICBWNkRJbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6NDcgKi8KKyAgVjNUSW1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjQ3ICovCisgIFYyRUltb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo0NyAqLworICBWNjRRSW1vZGUsICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6NTAgKi8KKyAgVjMySEltb2RlLCAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjUwICovCisgIFYxNlNJbW9kZSwgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo1MCAqLworICBWOERJbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6NTAgKi8KKyAgVjRUSW1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjUwICovCisgIFYyT0ltb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo1MCAqLworICBWMlNGbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6MzEgKi8KKyAgVjRTRm1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjMyICovCisgIFYyREZtb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjozMiAqLworICBWOFNGbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6NDUgKi8KKyAgVjRERm1vZGUsICAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjQ1ICovCisgIFYxMlNGbW9kZSwgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo0OCAqLworICBWNkRGbW9kZSwgICAgICAgICAgICAgICAgLyogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWY6NDggKi8KKyAgVjE2U0Ztb2RlLCAgICAgICAgICAgICAgIC8qIGNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmOjUxICovCisgIFY4REZtb2RlLCAgICAgICAgICAgICAgICAvKiBjb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZjo1MSAqLworICBNQVhfTUFDSElORV9NT0RFLAorCisgIE1JTl9NT0RFX1JBTkRPTSA9IFZPSURtb2RlLAorICBNQVhfTU9ERV9SQU5ET00gPSBCTEttb2RlLAorCisgIE1JTl9NT0RFX0NDID0gQ0Ntb2RlLAorICBNQVhfTU9ERV9DQyA9IENDX05abW9kZSwKKworICBNSU5fTU9ERV9JTlQgPSBRSW1vZGUsCisgIE1BWF9NT0RFX0lOVCA9IFhJbW9kZSwKKworICBNSU5fTU9ERV9QQVJUSUFMX0lOVCA9IFZPSURtb2RlLAorICBNQVhfTU9ERV9QQVJUSUFMX0lOVCA9IFZPSURtb2RlLAorCisgIE1JTl9NT0RFX0ZSQUNUID0gUVFtb2RlLAorICBNQVhfTU9ERV9GUkFDVCA9IFRRbW9kZSwKKworICBNSU5fTU9ERV9VRlJBQ1QgPSBVUVFtb2RlLAorICBNQVhfTU9ERV9VRlJBQ1QgPSBVVFFtb2RlLAorCisgIE1JTl9NT0RFX0FDQ1VNID0gSEFtb2RlLAorICBNQVhfTU9ERV9BQ0NVTSA9IFRBbW9kZSwKKworICBNSU5fTU9ERV9VQUNDVU0gPSBVSEFtb2RlLAorICBNQVhfTU9ERV9VQUNDVU0gPSBVVEFtb2RlLAorCisgIE1JTl9NT0RFX0ZMT0FUID0gU0Ztb2RlLAorICBNQVhfTU9ERV9GTE9BVCA9IFRGbW9kZSwKKworICBNSU5fTU9ERV9ERUNJTUFMX0ZMT0FUID0gU0Rtb2RlLAorICBNQVhfTU9ERV9ERUNJTUFMX0ZMT0FUID0gVERtb2RlLAorCisgIE1JTl9NT0RFX0NPTVBMRVhfSU5UID0gQ1FJbW9kZSwKKyAgTUFYX01PREVfQ09NUExFWF9JTlQgPSBDWEltb2RlLAorCisgIE1JTl9NT0RFX0NPTVBMRVhfRkxPQVQgPSBTQ21vZGUsCisgIE1BWF9NT0RFX0NPTVBMRVhfRkxPQVQgPSBUQ21vZGUsCisKKyAgTUlOX01PREVfVkVDVE9SX0lOVCA9IFY4UUltb2RlLAorICBNQVhfTU9ERV9WRUNUT1JfSU5UID0gVjJPSW1vZGUsCisKKyAgTUlOX01PREVfVkVDVE9SX0ZSQUNUID0gVk9JRG1vZGUsCisgIE1BWF9NT0RFX1ZFQ1RPUl9GUkFDVCA9IFZPSURtb2RlLAorCisgIE1JTl9NT0RFX1ZFQ1RPUl9VRlJBQ1QgPSBWT0lEbW9kZSwKKyAgTUFYX01PREVfVkVDVE9SX1VGUkFDVCA9IFZPSURtb2RlLAorCisgIE1JTl9NT0RFX1ZFQ1RPUl9BQ0NVTSA9IFZPSURtb2RlLAorICBNQVhfTU9ERV9WRUNUT1JfQUNDVU0gPSBWT0lEbW9kZSwKKworICBNSU5fTU9ERV9WRUNUT1JfVUFDQ1VNID0gVk9JRG1vZGUsCisgIE1BWF9NT0RFX1ZFQ1RPUl9VQUNDVU0gPSBWT0lEbW9kZSwKKworICBNSU5fTU9ERV9WRUNUT1JfRkxPQVQgPSBWMlNGbW9kZSwKKyAgTUFYX01PREVfVkVDVE9SX0ZMT0FUID0gVjhERm1vZGUsCisKKyAgTlVNX01BQ0hJTkVfTU9ERVMgPSBNQVhfTUFDSElORV9NT0RFCit9OworCisjZGVmaW5lIENPTlNUX01PREVfU0laRSBjb25zdAorI2RlZmluZSBDT05TVF9NT0RFX0JBU0VfQUxJR04gY29uc3QKKyNkZWZpbmUgQ09OU1RfTU9ERV9JQklUIGNvbnN0CisjZGVmaW5lIENPTlNUX01PREVfRkJJVCBjb25zdAorCisjZW5kaWYgLyogaW5zbi1tb2Rlcy5oICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1ub3Rlcy5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW5zbi1ub3Rlcy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5ODgzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pbnNuLW5vdGVzLmRlZgpAQCAtMCwwICsxLDkwIEBACisvKiBJbnNuIG5vdGUgZGVmaW5pdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBkZWZpbmVzIGFsbCB0aGUgY29kZXMgdGhhdCBtYXkgYXBwZWFyIGluIHRoZQorICAgTk9URV9MSU5FX05VTUJFUiBmaWVsZCBvZiBhIE5PVEUgaW5zbiBmb3Iga2luZHMgb2Ygbm90ZXMgdGhhdCBhcmUKKyAgIG5vdCBsaW5lIG51bWJlcnMuICBTb3VyY2UgZmlsZXMgZGVmaW5lIERFRl9JTlNOX05PVEUgYXBwcm9wcmlhdGVseQorICAgYmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUuCisKKyAgIFdlIGFyZSBzbG93bHkgcmVtb3ZpbmcgdGhlIGNvbmNlcHQgb2YgaW5zbi1jaGFpbiBub3RlcyBmcm9tIHRoZQorICAgY29tcGlsZXIuICBBZGRpbmcgbmV3IGNvZGVzIHRvIHRoaXMgZmlsZSBpcyBTVFJPTkdMWSBESVNDT1VSQUdFRC4KKyAgIElmIHlvdSB0aGluayB5b3UgbmVlZCBvbmUsIGxvb2sgZm9yIG90aGVyIHdheXMgdG8gZXhwcmVzcyB3aGF0IHlvdQorICAgbWVhbiwgc3VjaCBhcyByZWdpc3RlciBub3RlcyBvciBiaXRzIGluIHRoZSBiYXNpYy1ibG9jayBzdHJ1Y3R1cmUuICAqLworCisvKiBTaG9ydGhhbmQuICAqLworI2RlZmluZSBJTlNOX05PVEUoTkFNRSkgREVGX0lOU05fTk9URSAoTk9URV9JTlNOXyMjTkFNRSkKKworLyogVGhpcyBub3RlIGlzIHVzZWQgdG8gZ2V0IHJpZCBvZiBhbiBpbnNuIHdoZW4gaXQgaXNuJ3Qgc2FmZSB0byBwYXRjaAorICAgdGhlIGluc24gb3V0IG9mIHRoZSBjaGFpbi4gICovCitJTlNOX05PVEUgKERFTEVURUQpCisKKy8qIEdlbmVyYXRlZCBpbiBwbGFjZSBvZiB1c2VyLWRlY2xhcmVkIGxhYmVscyB3aGVuIHRoZXkgYXJlIGRlbGV0ZWQuICAqLworSU5TTl9OT1RFIChERUxFVEVEX0xBQkVMKQorLyogU2ltaWxhcmx5LCBidXQgZm9yIGxhYmVscyB0aGF0IGhhdmUgYmVlbiBwcmVzZW50IGluIGRlYnVnIHN0bXRzCisgICBlYXJsaWVyIGFuZCB0aHVzIHdpbGwgb25seSBhcHBlYXIgd2l0aCAtZy4gIFRoZXNlIG11c3QgdXNlIGRpZmZlcmVudAorICAgbGFiZWwgbmFtZXNwYWNlLiAgKi8KK0lOU05fTk9URSAoREVMRVRFRF9ERUJVR19MQUJFTCkKKworLyogVGhlc2UgYXJlIHVzZWQgdG8gbWFyayB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBsZXhpY2FsIGJsb2NrLgorICAgU2VlIE5PVEVfQkxPQ0sgYW5kIHJlb3JkZXJfYmxvY2tzLiAgKi8KK0lOU05fTk9URSAoQkxPQ0tfQkVHKQorSU5TTl9OT1RFIChCTE9DS19FTkQpCisKKy8qIFRoaXMgbm90ZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHRoZSByZWFsIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLAorICAgaS5lLiB0aGUgcG9pbnQganVzdCBhZnRlciBhbGwgb2YgdGhlIHBhcm1zIGhhdmUgYmVlbiBtb3ZlZCBpbnRvCisgICB0aGVpciBob21lcywgZXRjLiAgKi8KK0lOU05fTk9URSAoRlVOQ1RJT05fQkVHKQorCisvKiBUaGlzIG1hcmtzIHRoZSBwb2ludCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBwcm9sb2d1ZSBpbnNuLiAgKi8KK0lOU05fTk9URSAoUFJPTE9HVUVfRU5EKQorCisvKiBUaGlzIG1hcmtzIHRoZSBwb2ludCBpbW1lZGlhdGVseSBwcmlvciB0byB0aGUgZmlyc3QgZXBpbG9ndWUgaW5zbi4gICovCitJTlNOX05PVEUgKEVQSUxPR1VFX0JFRykKKworLyogVGhlc2Ugbm90ZSB3aGVyZSBleGNlcHRpb24gaGFuZGxpbmcgcmVnaW9ucyBiZWdpbiBhbmQgZW5kLgorICAgVXNlcyBOT1RFX0VIX0hBTkRMRVIgdG8gaWRlbnRpZnkgdGhlIHJlZ2lvbiBpbiBxdWVzdGlvbi4gICovCitJTlNOX05PVEUgKEVIX1JFR0lPTl9CRUcpCitJTlNOX05PVEUgKEVIX1JFR0lPTl9FTkQpCisKKy8qIFRoZSBsb2NhdGlvbiBvZiBhIHZhcmlhYmxlLiAgKi8KK0lOU05fTk9URSAoVkFSX0xPQ0FUSU9OKQorCisvKiBUaGUgdmFsdWVzIHBhc3NlZCB0byBjYWxsZWUuICAqLworSU5TTl9OT1RFIChDQUxMX0FSR19MT0NBVElPTikKKworLyogUmVjb3JkIHRoZSBzdHJ1Y3QgZm9yIHRoZSBmb2xsb3dpbmcgYmFzaWMgYmxvY2suICBVc2VzCisgICBOT1RFX0JBU0lDX0JMT0NLLiAgRklYTUU6IFJlZHVuZGFudCB3aXRoIHRoZSBiYXNpYyBibG9jayBwb2ludGVyCisgICBub3cgaW5jbHVkZWQgaW4gZXZlcnkgaW5zbi4gIE5PVEU6IElmIHRoZXJlJ3Mgbm8gQ0ZHIGFueW1vcmUsIGluIG90aGVyIHdvcmRzLAorICAgaWYgQkxPQ0tfRk9SX0lOU04gKCkgPT0gTlVMTCwgTk9URV9CQVNJQ19CTE9DSyBjYW5ub3QgYmUgY29uc2lkZXJlZCByZWxpYWJsZQorICAgYW55bW9yZS4gICovCitJTlNOX05PVEUgKEJBU0lDX0JMT0NLKQorCisvKiBNYXJrIHRoZSBpbmZsZWN0aW9uIHBvaW50IGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gd2hlcmUgd2Ugc3dpdGNoCisgICBiZXR3ZWVuIGhvdCBhbmQgY29sZCB0ZXh0IHNlY3Rpb25zLiAgKi8KK0lOU05fTk9URSAoU1dJVENIX1RFWFRfU0VDVElPTlMpCisKKy8qIFdoZW4gZW1pdHRpbmcgZHdhcmYyIGZyYW1lIGluZm9ybWF0aW9uLCBjb250YWlucyBhIGRpcmVjdGl2ZSB0aGF0CisgICBzaG91bGQgYmUgZW1pdHRlZC4gICovCitJTlNOX05PVEUgKENGSSkKKworLyogV2hlbiBlbWl0dGluZyBkd2FyZjIgZnJhbWUgaW5mb3JtYXRpb24sIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYSBkZWJ1ZworICAgbGFiZWwgdGhhdCBzaG91bGQgYmUgZW1pdHRlZC4gICovCitJTlNOX05PVEUgKENGSV9MQUJFTCkKKworI3VuZGVmIElOU05fTk9URQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2ludGVybmFsLWZuLmRlZiBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pbnRlcm5hbC1mbi5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwMGQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pbnRlcm5hbC1mbi5kZWYKQEAgLTAsMCArMSw0MiBAQAorLyogSW50ZXJuYWwgZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIGZpbGUgc3BlY2lmaWVzIGEgbGlzdCBvZiBpbnRlcm5hbCAiZnVuY3Rpb25zIi4gIFRoZXNlIGZ1bmN0aW9ucworICAgZGlmZmVyIGZyb20gYnVpbHQtaW4gZnVuY3Rpb25zIGluIHRoYXQgdGhleSBoYXZlIG5vIGxpbmthZ2UgYW5kIGNhbm5vdAorICAgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZSB1c2VyLiAgVGhleSByZXByZXNlbnQgb3BlcmF0aW9ucyB0aGF0IGFyZSBvbmx5CisgICBzeW50aGVzaXNlZCBieSBHQ0MgaXRzZWxmLgorCisgICBJbnRlcm5hbCBmdW5jdGlvbnMgYXJlIHVzZWQgaW5zdGVhZCBvZiB0cmVlIGNvZGVzIGlmIHRoZSBvcGVyYXRpb24KKyAgIGFuZCBpdHMgb3BlcmFuZHMgYXJlIG1vcmUgbmF0dXJhbGx5IHJlcHJlc2VudGVkIGFzIGEgR0lNUExFX0NBTEwKKyAgIHRoYW4gYSBHSU1QTEVfQVNTSUdOLgorCisgICBFYWNoIGVudHJ5IGluIHRoaXMgZmlsZSBoYXMgdGhlIGZvcm06CisKKyAgICAgREVGX0lOVEVSTkFMX0ZOIChOQU1FLCBGTEFHUykKKworICAgd2hlcmUgTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gYW5kIEZMQUdTIGlzIGEgc2V0IG9mCisgICBFQ0ZfKiBmbGFncy4gIEVhY2ggZW50cnkgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBleHBhbmRlcgorICAgb2YgdGhlIGZvcm06CisKKyAgICAgdm9pZCBleHBhbmRfTkFNRSAoZ2ltcGxlIHN0bXQpCisKKyAgIHdoZXJlIFNUTVQgaXMgdGhlIHN0YXRlbWVudCB0aGF0IHBlcmZvcm1zIHRoZSBjYWxsLiAgKi8KKworREVGX0lOVEVSTkFMX0ZOIChMT0FEX0xBTkVTLCBFQ0ZfQ09OU1QgfCBFQ0ZfTEVBRikKK0RFRl9JTlRFUk5BTF9GTiAoU1RPUkVfTEFORVMsIEVDRl9DT05TVCB8IEVDRl9MRUFGKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2ludGVybmFsLWZuLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaW50ZXJuYWwtZm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzhhMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2ludGVybmFsLWZuLmgKQEAgLTAsMCArMSw1MyBAQAorLyogSW50ZXJuYWwgZnVuY3Rpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19JTlRFUk5BTF9GTl9ICisjZGVmaW5lIEdDQ19JTlRFUk5BTF9GTl9ICisKK2VudW0gaW50ZXJuYWxfZm4geworI2RlZmluZSBERUZfSU5URVJOQUxfRk4oQ09ERSwgRkxBR1MpIElGTl8jI0NPREUsCisjaW5jbHVkZSAiaW50ZXJuYWwtZm4uZGVmIgorI3VuZGVmIERFRl9JTlRFUk5BTF9GTgorICBJRk5fTEFTVAorfTsKKworLyogUmV0dXJuIHRoZSBuYW1lIG9mIGludGVybmFsIGZ1bmN0aW9uIEZOLiAgVGhlIG5hbWUgaXMgb25seSBtZWFuaW5nZnVsCisgICBmb3IgZHVtcHM7IGl0IGhhcyBubyBsaW5rYWdlLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGludGVybmFsX2ZuX25hbWVfYXJyYXlbXTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2ludGVybmFsX2ZuX25hbWUgKGVudW0gaW50ZXJuYWxfZm4gZm4pCit7CisgIHJldHVybiBpbnRlcm5hbF9mbl9uYW1lX2FycmF5WyhpbnQpIGZuXTsKK30KKworLyogUmV0dXJuIHRoZSBFQ0ZfKiBmbGFncyBmb3IgZnVuY3Rpb24gRk4uICAqLworCitleHRlcm4gY29uc3QgaW50IGludGVybmFsX2ZuX2ZsYWdzX2FycmF5W107CisKK3N0YXRpYyBpbmxpbmUgaW50CitpbnRlcm5hbF9mbl9mbGFncyAoZW51bSBpbnRlcm5hbF9mbiBmbikKK3sKKyAgcmV0dXJuIGludGVybmFsX2ZuX2ZsYWdzX2FycmF5WyhpbnQpIGZuXTsKK30KKworZXh0ZXJuIHZvaWQgZXhwYW5kX2ludGVybmFsX2NhbGwgKGdpbXBsZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2ludGwuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4YTVlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pbnRsLmgKQEAgLTAsMCArMSw3MCBAQAorLyogaW50bC5oIC0gaW50ZXJuYXRpb25hbGl6YXRpb24KKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX0lOVExfSAorI2RlZmluZSBHQ0NfSU5UTF9ICisKKyNpZmRlZiBIQVZFX0xPQ0FMRV9ICisjIGluY2x1ZGUgPGxvY2FsZS5oPgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TRVRMT0NBTEUKKyMgZGVmaW5lIHNldGxvY2FsZShjYXRlZ29yeSwgbG9jYWxlKSAobG9jYWxlKQorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfTkxTCisjaW5jbHVkZSA8bGliaW50bC5oPgorZXh0ZXJuIHZvaWQgZ2NjX2luaXRfbGliaW50bCAodm9pZCk7CitleHRlcm4gc2l6ZV90IGdjY19nZXR0ZXh0X3dpZHRoIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZ2NjX2luaXRfbGliaW50bF9wcm9ncmFtIChjb25zdCBjaGFyICopOworI2Vsc2UKKy8qIFN0dWJzLiAgKi8KKyMgdW5kZWYgdGV4dGRvbWFpbgorIyBkZWZpbmUgdGV4dGRvbWFpbihkb21haW4pIChkb21haW4pCisjIHVuZGVmIGJpbmR0ZXh0ZG9tYWluCisjIGRlZmluZSBiaW5kdGV4dGRvbWFpbihkb21haW4sIGRpcmVjdG9yeSkgKGRvbWFpbikKKyMgdW5kZWYgZ2V0dGV4dAorIyBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorIyBkZWZpbmUgbmdldHRleHQoc2luZ3VsYXIscGx1cmFsLG4pIGZha2VfbmdldHRleHQoc2luZ3VsYXIscGx1cmFsLG4pCisjIGRlZmluZSBnY2NfaW5pdF9saWJpbnRsKCkJLyogbm90aGluZyAqLworIyBkZWZpbmUgZ2NjX2dldHRleHRfd2lkdGgocykgc3RybGVuKHMpCisKK2V4dGVybiBjb25zdCBjaGFyICpmYWtlX25nZXR0ZXh0KGNvbnN0IGNoYXIgKnNpbmd1bGFyLGNvbnN0IGNoYXIgKnBsdXJhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IG4pOworCisjZW5kaWYKKworI2lmbmRlZiBfCisjIGRlZmluZSBfKG1zZ2lkKSBnZXR0ZXh0IChtc2dpZCkKKyNlbmRpZgorCisjaWZuZGVmIE5fCisjIGRlZmluZSBOXyhtc2dpZCkgbXNnaWQKKyNlbmRpZgorCisjaWZuZGVmIEdfCisjIGRlZmluZSBHXyhnbXNnaWQpIGdtc2dpZAorI2VuZGlmCisKK2V4dGVybiBjaGFyICpnZXRfc3BhY2VzIChjb25zdCBjaGFyICopOworCitleHRlcm4gY29uc3QgY2hhciAqb3Blbl9xdW90ZTsKK2V4dGVybiBjb25zdCBjaGFyICpjbG9zZV9xdW90ZTsKK2V4dGVybiBjb25zdCBjaGFyICpsb2NhbGVfZW5jb2Rpbmc7CitleHRlcm4gYm9vbCBsb2NhbGVfdXRmODsKKworI2VuZGlmIC8qIGludGwuaCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lwYS1wcm9wLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXByb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDZlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lwYS1wcm9wLmgKQEAgLTAsMCArMSw2MTkgQEAKKy8qIEludGVycHJvY2VkdXJhbCBhbmFseXNlcy4KKyAgIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBJUEFfUFJPUF9ICisjZGVmaW5lIElQQV9QUk9QX0gKKworI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ2ZWMuaCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKKyNpbmNsdWRlICJnaW1wbGUuaCIKKyNpbmNsdWRlICJhbGxvYy1wb29sLmgiCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZXMgYXJlIHVzZWQgYnkKKyAgIGludGVycHJvY2VkdXJhbCBhbmFseXNlcyBvciBwYXJhbWV0ZXJzLiAgKi8KKworLyogaXBhLXByb3AuYyBzdHVmZiAoaXBhLWNwLCBpbmRpcmVjdCBpbmxpbmluZyk6ICAqLworCisvKiBBIGp1bXAgZnVuY3Rpb24gZm9yIGEgY2FsbHNpdGUgcmVwcmVzZW50cyB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhY3R1YWwKKyAgIGFyZ3VtZW50cyBvZiB0aGUgY2FsbHNpdGUuICBUaGV5IHdlcmUgb3JpZ2luYWxseSBwcm9wb3NlZCBpbiBhIHBhcGVyIGNhbGxlZAorICAgIkludGVycHJvY2VkdXJhbCBDb25zdGFudCBQcm9wYWdhdGlvbiIsIGJ5IERhdmlkIENhbGxhaGFuLCBLZWl0aCBEIENvb3BlciwKKyAgIEtlbiBLZW5uZWR5LCBMaW5kYSBUb3Jjem9uIGluIENvbXA4NiwgcGcgMTUyLTE2MS4gIFRoZXJlIGFyZSB0aHJlZSBtYWluCisgICB0eXBlcyBvZiB2YWx1ZXMgOgorCisgICBQYXNzLXRocm91Z2ggLSB0aGUgY2FsbGVyJ3MgZm9ybWFsIHBhcmFtZXRlciBpcyBwYXNzZWQgYXMgYW4gYWN0dWFsCisgICAgICAgICAgICAgICAgICBhcmd1bWVudCwgcG9zc2libHkgb25lIHNpbXBsZSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIGl0LgorICAgQ29uc3RhbnQgICAgIC0gYSBjb25zdGFudCAoaXNfZ2ltcGxlX2lwX2ludmFyaWFudClpcyBwYXNzZWQgYXMgYW4gYWN0dWFsCisgICAgICAgICAgICAgICAgICBhcmd1bWVudC4KKyAgIFVua25vd24gICAgICAtIG5laXRoZXIgb2YgdGhlIGFib3ZlLgorCisgICBJUEFfSkZfQU5DRVNUT1IgaXMgYSBzcGVjaWFsIHBhc3MtdGhyb3VnaCBqdW1wIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB0aGF0CisgICB0aGUgcmVzdWx0IGlzIGFuIGFkZHJlc3Mgb2YgYSBwYXJ0IG9mIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSB0aGUgZm9ybWFsCisgICBwYXJhbWV0ZXIgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uIHJlZmVycy4gIEl0IGlzIG1haW5seSBpbnRlbmRlZCB0byByZXByZXNlbnQKKyAgIGdldHRpbmcgYWRkcmVzc2VzIG9mIG9mIGFuY2VzdG9yIGZpZWxkcyBpbiBDKysKKyAgIChlLmcuICZ0aGlzXzEoRCktPkQuMTc2Ni5ELjE3NTYpLiAgTm90ZSB0aGF0IGlmIHRoZSBvcmlnaW5hbCBwb2ludGVyIGlzCisgICBOVUxMLCBhbmNlc3RvciBqdW1wIGZ1bmN0aW9uIG11c3QgYmVoYXZlIGxpa2UgYSBzaW1wbGUgcGFzcy10aHJvdWdoLgorCisgICBPdGhlciBwYXNzLXRocm91Z2ggZnVuY3Rpb25zIGNhbiBlaXRoZXIgc2ltcGx5IHBhc3Mgb24gYW4gdW5jaGFuZ2VkIGZvcm1hbAorICAgcGFyYW1ldGVyIG9yIGNhbiBhcHBseSBvbmUgc2ltcGxlIGJpbmFyeSBvcGVyYXRpb24gdG8gaXQgKHN1Y2gganVtcAorICAgZnVuY3Rpb25zIGFyZSBjYWxsZWQgcG9seW5vbWlhbCkuCisKKyAgIElQQV9KRl9LTk9XTl9UWVBFIGlzIGEgc3BlY2lhbCB0eXBlIG9mIGFuICJ1bmtub3duIiBmdW5jdGlvbiB0aGF0IGFwcGxpZXMKKyAgIG9ubHkgdG8gcG9pbnRlciBwYXJhbWV0ZXJzLiAgSXQgbWVhbnMgdGhhdCBldmVuIHRob3VnaCB3ZSBjYW5ub3QgcHJvdmUgdGhhdAorICAgdGhlIHBhc3NlZCB2YWx1ZSBpcyBhbiBpbnRlcnByb2NlZHVyYWwgY29uc3RhbnQsIHdlIHN0aWxsIGtub3cgdGhlIGV4YWN0CisgICB0eXBlIG9mIHRoZSBjb250YWluaW5nIG9iamVjdCB3aGljaCBtYXkgYmUgdmFsdWFibGUgZm9yIGRldmlydHVhbGl6YXRpb24uCisKKyAgIEp1bXAgZnVuY3Rpb25zIGFyZSBjb21wdXRlZCBpbiBpcGEtcHJvcC5jIGJ5IGZ1bmN0aW9uCisgICB1cGRhdGVfY2FsbF9ub3Rlc19hZnRlcl9pbmxpbmluZy4gIFNvbWUgaW5mb3JtYXRpb24gY2FuIGJlIGxvc3QgYW5kIGp1bXAKKyAgIGZ1bmN0aW9ucyBkZWdyYWRlZCBhY2NvcmRpbmdseSB3aGVuIGlubGluaW5nLCBzZWUKKyAgIHVwZGF0ZV9jYWxsX25vdGVzX2FmdGVyX2lubGluaW5nIGluIHRoZSBzYW1lIGZpbGUuICAqLworCitlbnVtIGp1bXBfZnVuY190eXBlCit7CisgIElQQV9KRl9VTktOT1dOID0gMCwgIC8qIG5ld2x5IGFsbG9jYXRlZCBhbmQgemVyb2VkIGp1bXAgZnVuY3Rpb25zIGRlZmF1bHQgKi8KKyAgSVBBX0pGX0tOT1dOX1RZUEUsICAgICAgICAvKiByZXByZXNlbnRlZCBieSBmaWVsZCBrbm93bl90eXBlICovCisgIElQQV9KRl9DT05TVCwgICAgICAgICAgICAgLyogcmVwcmVzZW50ZWQgYnkgZmllbGQgY29zdGFudCAqLworICBJUEFfSkZfUEFTU19USFJPVUdILAkgICAgLyogcmVwcmVzZW50ZWQgYnkgZmllbGQgcGFzc190aHJvdWdoICovCisgIElQQV9KRl9BTkNFU1RPUgkgICAgLyogcmVwcmVzZW50ZWQgYnkgZmllbGQgYW5jZXN0b3IgKi8KK307CisKKy8qIFN0cnVjdHVyZSBob2xkaW5nIGRhdGEgcmVxdWlyZWQgdG8gZGVzY3JpYmUgYSBrbm93biB0eXBlIGp1bXAgZnVuY3Rpb24uICAqLworc3RydWN0IEdUWSgoKSkgaXBhX2tub3duX3R5cGVfZGF0YQoreworICAvKiBPZmZzZXQgb2YgdGhlIGNvbXBvbmVudCBvZiB0aGUgYmFzZV90eXBlIGJlaW5nIGRlc2NyaWJlZC4gICovCisgIEhPU1RfV0lERV9JTlQgb2Zmc2V0OworICAvKiBUeXBlIG9mIHRoZSB3aG9sZSBvYmplY3QuICAqLworICB0cmVlIGJhc2VfdHlwZTsKKyAgLyogVHlwZSBvZiB0aGUgY29tcG9uZW50IG9mIHRoZSBvYmplY3QgdGhhdCBpcyBiZWluZyBkZXNjcmliZWQuICAqLworICB0cmVlIGNvbXBvbmVudF90eXBlOworfTsKKworLyogU3RydWN0dXJlIGhvbGRpbmcgZGF0YSByZXF1aXJlZCB0byBkZXNjcmliZSBhIHBhc3MtdGhyb3VnaCBqdW1wIGZ1bmN0aW9uLiAgKi8KKworc3RydWN0IEdUWSgoKSkgaXBhX3Bhc3NfdGhyb3VnaF9kYXRhCit7CisgIC8qIElmIGFuIG9wZXJhdGlvbiBpcyB0byBiZSBwZXJmb3JtZWQgb24gdGhlIG9yaWdpbmFsIHBhcmFtZXRlciwgdGhpcyBpcyB0aGUKKyAgICAgc2Vjb25kIChjb25zdGFudCkgb3BlcmFuZC4gICovCisgIHRyZWUgb3BlcmFuZDsKKyAgLyogTnVtYmVyIG9mIHRoZSBjYWxsZXIncyBmb3JtYWwgcGFyYW1ldGVyIGJlaW5nIHBhc3NlZC4gICovCisgIGludCBmb3JtYWxfaWQ7CisgIC8qIE9wZXJhdGlvbiB0aGF0IGlzIHBlcmZvcm1lZCBvbiB0aGUgYXJndW1lbnQgYmVmb3JlIGl0IGlzIHBhc3NlZCBvbi4KKyAgICAgTk9QX0VYUFIgbWVhbnMgbm8gb3BlcmF0aW9uLiAgT3RoZXJ3aXNlIG9wZXIgbXVzdCBiZSBhIHNpbXBsZSBiaW5hcnkKKyAgICAgYXJpdGhtZXRpYyBvcGVyYXRpb24gd2hlcmUgdGhlIGNhbGxlcidzIHBhcmFtZXRlciBpcyB0aGUgZmlyc3Qgb3BlcmFuZCBhbmQKKyAgICAgb3BlcmFuZCBmaWVsZCBmcm9tIHRoaXMgc3RydWN0dXJlIGlzIHRoZSBzZWNvbmQgb25lLiAgKi8KKyAgZW51bSB0cmVlX2NvZGUgb3BlcmF0aW9uOworICAvKiBXaGVuIHRoZSBwYXNzZWQgdmFsdWUgaXMgYSBwb2ludGVyLCBpdCBpcyBzZXQgdG8gdHJ1ZSBvbmx5IHdoZW4gd2UgYXJlCisgICAgIGNlcnRhaW4gdGhhdCBubyB3cml0ZSB0byB0aGUgb2JqZWN0IGl0IHBvaW50cyB0byBoYXMgb2NjdXJyZWQgc2luY2UgdGhlCisgICAgIGNhbGxlciBmdW5jdGlvbnMgc3RhcnRlZCBleGVjdXRpb24sIGV4Y2VwdCBmb3IgY2hhbmdlcyBub3RlZCBpbiB0aGUKKyAgICAgYWdncmVnYXRlIHBhcnQgb2YgdGhlIGp1bXAgZnVuY3Rpb24gKHNlZSBkZXNjcmlwdGlvbiBvZgorICAgICBpcGFfYWdnX2p1bXBfZnVuY3Rpb24pLiAgVGhlIGZsYWcgaXMgdXNlZCBvbmx5IHdoZW4gdGhlIG9wZXJhdGlvbiBpcworICAgICBOT1BfRVhQUi4gICovCisgIGJvb2wgYWdnX3ByZXNlcnZlZDsKK307CisKKy8qIFN0cnVjdHVyZSBob2xkaW5nIGRhdGEgcmVxdWlyZWQgdG8gZGVzY3JpYmUgYW4gYW5jZXN0b3IgcGFzcy10aHJvdWdoCisgICBqdW1wIGZ1bmN0aW9uLiAgKi8KKworc3RydWN0IEdUWSgoKSkgaXBhX2FuY2VzdG9yX2pmX2RhdGEKK3sKKyAgLyogT2Zmc2V0IG9mIHRoZSBmaWVsZCByZXByZXNlbnRpbmcgdGhlIGFuY2VzdG9yLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBvZmZzZXQ7CisgIC8qIFR5cGUgb2YgdGhlIHJlc3VsdC4gICovCisgIHRyZWUgdHlwZTsKKyAgLyogTnVtYmVyIG9mIHRoZSBjYWxsZXIncyBmb3JtYWwgcGFyYW1ldGVyIGJlaW5nIHBhc3NlZC4gICovCisgIGludCBmb3JtYWxfaWQ7CisgIC8qIEZsYWcgd2l0aCB0aGUgc2FtZSBtZWFuaW5nIGxpa2UgYWdnX3ByZXNlcnZlIGluIGlwYV9wYXNzX3Rocm91Z2hfZGF0YS4gICovCisgIGJvb2wgYWdnX3ByZXNlcnZlZDsKK307CisKKy8qIEFuIGVsZW1lbnQgaW4gYW4gYWdnZWdhdGUgcGFydCBvZiBhIGp1bXAgZnVuY3Rpb24gZGVzY3JpYmluZyBhIGtub3duIHZhbHVlCisgICBhdCBhIGdpdmVuIG9mZnNldC4gIFdoZW4gaXQgaXMgcGFydCBvZiBhIHBhc3MtdGhyb3VnaCBqdW1wIGZ1bmN0aW9uIHdpdGgKKyAgIGFnZ19wcmVzZXJ2ZWQgc2V0IG9yIGFuIGFuY2VzdG9yIGp1bXAgZnVuY3Rpb24gd2l0aCBhZ2dfcHJlc2VydmVkIHNldCwgYWxsCisgICB1bmxpc3RlZCBwb3NpdGlvbnMgYXJlIGFzc3VtZWQgdG8gYmUgcHJlc2VydmVkIGJ1dCB0aGUgdmFsdWUgY2FuIGJlIGEgdHlwZQorICAgbm9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgcGFydGljdWxhciBwaWVjZSAoc3RhcnRpbmcgYXQgb2Zmc2V0IGFuZCBoYXZpbmcKKyAgIHRoZSBzaXplIG9mIHRoZSB0eXBlKSBpcyBjbG9iYmVyZWQgd2l0aCBhbiB1bmtub3duIHZhbHVlLiAgV2hlbgorICAgYWdnX3ByZXNlcnZlZCBpcyBmYWxzZSBvciB0aGUgdHlwZSBvZiB0aGUgY29udGFpbmluZyBqdW1wIGZ1bmN0aW9uIGlzCisgICBkaWZmZXJlbnQsIGFsbCB1bmxpc3RlZCBwYXJ0cyBhcmUgYXNzdW1lZCB0byBiZSB1bmtub3duIGFuZCBhbGwgdmFsdWVzIG11c3QKKyAgIGZ1bGxmaWxsIGlzX2dpbXBsZV9pcF9pbnZhcmlhbnQuICAqLworCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIGlwYV9hZ2dfamZfaXRlbQoreworICAvKiBUaGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBrbm93biB2YWx1ZSBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgYWdncmVnYXRlLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBvZmZzZXQ7CisKKyAgLyogVGhlIGtub3duIGNvbnN0YW50IG9yIHR5cGUgaWYgdGhpcyBpcyBhIGNsb2JiZXIuICAqLworICB0cmVlIHZhbHVlOworfSBpcGFfYWdnX2pmX2l0ZW1fdDsKKworCisvKiBBZ2dyZWdhdGUganVtcCBmdW5jdGlvbiAtIGkuZS4gZGVzY3JpcHRpb24gb2YgY29udGVudHMgb2YgYWdncmVnYXRlcyBwYXNzZWQKKyAgIGVpdGhlciBieSByZWZlcmVuY2Ugb3IgdmFsdWUuICAqLworCitzdHJ1Y3QgR1RZKCgpKSBpcGFfYWdnX2p1bXBfZnVuY3Rpb24KK3sKKyAgLyogRGVzY3JpcHRpb24gb2YgdGhlIGluZGl2aWR1YWwgaXRlbXMuICAqLworICB2ZWM8aXBhX2FnZ19qZl9pdGVtX3QsIHZhX2djPiAqaXRlbXM7CisgIC8qIFRydWUgaWYgdGhlIGRhdGEgd2FzIHBhc3NlZCBieSByZWZlcmVuY2UgKGFzIG9wcG9zZWQgdG8gYnkgdmFsdWUpLiAqLworICBib29sIGJ5X3JlZjsKK307CisKK3R5cGVkZWYgc3RydWN0IGlwYV9hZ2dfanVtcF9mdW5jdGlvbiAqaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3A7Cit0eXBlZGVmIHN0cnVjdCBpcGFfYWdnX2p1bXBfZnVuY3Rpb24gaXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3Q7CisKKy8qIEEganVtcCBmdW5jdGlvbiBmb3IgYSBjYWxsc2l0ZSByZXByZXNlbnRzIHRoZSB2YWx1ZXMgcGFzc2VkIGFzIGFjdHVhbAorICAgYXJndW1lbnRzIG9mIHRoZSBjYWxsc2l0ZS4gU2VlIGVudW0ganVtcF9mdW5jX3R5cGUgZm9yIHRoZSB2YXJpb3VzCisgICB0eXBlcyBvZiBqdW1wIGZ1bmN0aW9ucyBzdXBwb3J0ZWQuICAqLwordHlwZWRlZiBzdHJ1Y3QgR1RZICgoKSkgaXBhX2p1bXBfZnVuYworeworICAvKiBBZ2dyZWdhdGUgY29udGFudHMgZGVzY3JpcHRpb24uICBTZWUgc3RydWN0IGlwYV9hZ2dfanVtcF9mdW5jdGlvbiBhbmQgaXRzCisgICAgIGRlc2NyaXB0aW9uLiAgKi8KKyAgc3RydWN0IGlwYV9hZ2dfanVtcF9mdW5jdGlvbiBhZ2c7CisKKyAgZW51bSBqdW1wX2Z1bmNfdHlwZSB0eXBlOworICAvKiBSZXByZXNlbnRzIGEgdmFsdWUgb2YgYSBqdW1wIGZ1bmN0aW9uLiAgcGFzc190aHJvdWdoIGlzIHVzZWQgb25seSBpbiBqdW1wCisgICAgIGZ1bmN0aW9uIGNvbnRleHQuICBjb25zdGFudCByZXByZXNlbnRzIHRoZSBhY3R1YWwgY29uc3RhbnQgaW4gY29uc3RhbnQganVtcAorICAgICBmdW5jdGlvbnMgYW5kIG1lbWJlcl9jc3QgaG9sZHMgY29uc3RhbnQgYysrIG1lbWJlciBmdW5jdGlvbnMuICAqLworICB1bmlvbiBqdW1wX2Z1bmNfdmFsdWUKKyAgeworICAgIHN0cnVjdCBpcGFfa25vd25fdHlwZV9kYXRhIEdUWSAoKHRhZyAoIklQQV9KRl9LTk9XTl9UWVBFIikpKSBrbm93bl90eXBlOworICAgIHRyZWUgR1RZICgodGFnICgiSVBBX0pGX0NPTlNUIikpKSBjb25zdGFudDsKKyAgICBzdHJ1Y3QgaXBhX3Bhc3NfdGhyb3VnaF9kYXRhIEdUWSAoKHRhZyAoIklQQV9KRl9QQVNTX1RIUk9VR0giKSkpIHBhc3NfdGhyb3VnaDsKKyAgICBzdHJ1Y3QgaXBhX2FuY2VzdG9yX2pmX2RhdGEgR1RZICgodGFnICgiSVBBX0pGX0FOQ0VTVE9SIikpKSBhbmNlc3RvcjsKKyAgfSBHVFkgKChkZXNjICgiJTEudHlwZSIpKSkgdmFsdWU7Cit9IGlwYV9qdW1wX2Z1bmNfdDsKKworCisvKiBSZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgY29tcG9uZW50IHRoYXQgaXMgZGVjcmliZWQgYnkgYSBrbm93biB0eXBlIGp1bXAKKyAgIGZ1bmN0aW9uIEpGVU5DLiAgKi8KKworc3RhdGljIGlubGluZSBIT1NUX1dJREVfSU5UCitpcGFfZ2V0X2pmX2tub3duX3R5cGVfb2Zmc2V0IChzdHJ1Y3QgaXBhX2p1bXBfZnVuYyAqamZ1bmMpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGpmdW5jLT50eXBlID09IElQQV9KRl9LTk9XTl9UWVBFKTsKKyAgcmV0dXJuIGpmdW5jLT52YWx1ZS5rbm93bl90eXBlLm9mZnNldDsKK30KKworLyogUmV0dXJuIHRoZSBiYXNlIHR5cGUgb2YgYSBrbm93biB0eXBlIGp1bXAgZnVuY3Rpb24gSkZVTkMuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2lwYV9nZXRfamZfa25vd25fdHlwZV9iYXNlX3R5cGUgKHN0cnVjdCBpcGFfanVtcF9mdW5jICpqZnVuYykKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX0tOT1dOX1RZUEUpOworICByZXR1cm4gamZ1bmMtPnZhbHVlLmtub3duX3R5cGUuYmFzZV90eXBlOworfQorCisvKiBSZXR1cm4gdGhlIGNvbXBvbmVudCB0eXBlIG9mIGEga25vd24gdHlwZSBqdW1wIGZ1bmN0aW9uIEpGVU5DLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitpcGFfZ2V0X2pmX2tub3duX3R5cGVfY29tcG9uZW50X3R5cGUgKHN0cnVjdCBpcGFfanVtcF9mdW5jICpqZnVuYykKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX0tOT1dOX1RZUEUpOworICByZXR1cm4gamZ1bmMtPnZhbHVlLmtub3duX3R5cGUuY29tcG9uZW50X3R5cGU7Cit9CisKKy8qIFJldHVybiB0aGUgY29uc3RhbnQgc3RvcmVkIGluIGEgY29uc3RhbnQganVtcCBmdW5jdGluIEpGVU5DLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitpcGFfZ2V0X2pmX2NvbnN0YW50IChzdHJ1Y3QgaXBhX2p1bXBfZnVuYyAqamZ1bmMpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGpmdW5jLT50eXBlID09IElQQV9KRl9DT05TVCk7CisgIHJldHVybiBqZnVuYy0+dmFsdWUuY29uc3RhbnQ7Cit9CisKKy8qIFJldHVybiB0aGUgb3BlcmFuZCBvZiBhIHBhc3MgdGhyb3VnaCBqbXAgZnVuY3Rpb24gSkZVTkMuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2lwYV9nZXRfamZfcGFzc190aHJvdWdoX29wZXJhbmQgKHN0cnVjdCBpcGFfanVtcF9mdW5jICpqZnVuYykKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX1BBU1NfVEhST1VHSCk7CisgIHJldHVybiBqZnVuYy0+dmFsdWUucGFzc190aHJvdWdoLm9wZXJhbmQ7Cit9CisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBjYWxsZXIncyBmb3JtYWwgcGFyYW1ldGVyIHRoYXQgYSBwYXNzIHRocm91Z2gganVtcAorICAgZnVuY3Rpb24gSkZVTkMgcmVmZXJzIHRvLiAgKi8KKworc3RhdGljIGlubGluZSBpbnQKK2lwYV9nZXRfamZfcGFzc190aHJvdWdoX2Zvcm1hbF9pZCAoc3RydWN0IGlwYV9qdW1wX2Z1bmMgKmpmdW5jKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChqZnVuYy0+dHlwZSA9PSBJUEFfSkZfUEFTU19USFJPVUdIKTsKKyAgcmV0dXJuIGpmdW5jLT52YWx1ZS5wYXNzX3Rocm91Z2guZm9ybWFsX2lkOworfQorCisvKiBSZXR1cm4gb3BlcmF0aW9uIG9mIGEgcGFzcyB0aHJvdWdoIGp1bXAgZnVuY3Rpb24gSkZVTkMuICAqLworCitzdGF0aWMgaW5saW5lIGVudW0gdHJlZV9jb2RlCitpcGFfZ2V0X2pmX3Bhc3NfdGhyb3VnaF9vcGVyYXRpb24gKHN0cnVjdCBpcGFfanVtcF9mdW5jICpqZnVuYykKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX1BBU1NfVEhST1VHSCk7CisgIHJldHVybiBqZnVuYy0+dmFsdWUucGFzc190aHJvdWdoLm9wZXJhdGlvbjsKK30KKworLyogUmV0dXJuIHRoZSBhZ2dfcHJlc2VydmVkIGZsYWcgb2YgYSBwYXNzIHRocm91Z2gganVtcCBmdW5jdGluIEpGVU5DLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitpcGFfZ2V0X2pmX3Bhc3NfdGhyb3VnaF9hZ2dfcHJlc2VydmVkIChzdHJ1Y3QgaXBhX2p1bXBfZnVuYyAqamZ1bmMpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGpmdW5jLT50eXBlID09IElQQV9KRl9QQVNTX1RIUk9VR0gpOworICByZXR1cm4gamZ1bmMtPnZhbHVlLnBhc3NfdGhyb3VnaC5hZ2dfcHJlc2VydmVkOworfQorCisvKiBSZXR1cm4gdGhlIG9mZnNldCBvZiBhbiBhbmNlc3RvciBqdW1wIGZ1bmN0aW9uIEpGVU5DLiAgKi8KKworc3RhdGljIGlubGluZSBIT1NUX1dJREVfSU5UCitpcGFfZ2V0X2pmX2FuY2VzdG9yX29mZnNldCAoc3RydWN0IGlwYV9qdW1wX2Z1bmMgKmpmdW5jKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChqZnVuYy0+dHlwZSA9PSBJUEFfSkZfQU5DRVNUT1IpOworICByZXR1cm4gamZ1bmMtPnZhbHVlLmFuY2VzdG9yLm9mZnNldDsKK30KKworLyogUmV0dXJuIHRoZSByZXN1bHQgdHlwZSBvZiBhbiBhbmNlc3RvciBqdW1wIGZ1bmN0aW9uIEpGVU5DLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitpcGFfZ2V0X2pmX2FuY2VzdG9yX3R5cGUgKHN0cnVjdCBpcGFfanVtcF9mdW5jICpqZnVuYykKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX0FOQ0VTVE9SKTsKKyAgcmV0dXJuIGpmdW5jLT52YWx1ZS5hbmNlc3Rvci50eXBlOworfQorCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgY2FsbGVyJ3MgZm9ybWFsIHBhcmFtZXRlciB0aGF0IGFuIGFuY2VzdG9yIGp1bXAKKyAgIGZ1bmN0aW9uIEpGVU5DIHJlZmVycyB0by4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitpcGFfZ2V0X2pmX2FuY2VzdG9yX2Zvcm1hbF9pZCAoc3RydWN0IGlwYV9qdW1wX2Z1bmMgKmpmdW5jKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChqZnVuYy0+dHlwZSA9PSBJUEFfSkZfQU5DRVNUT1IpOworICByZXR1cm4gamZ1bmMtPnZhbHVlLmFuY2VzdG9yLmZvcm1hbF9pZDsKK30KKworLyogUmV0dXJuIHRoZSBhZ2dfcHJlc2VydmVkIGZsYWcgb2YgYW4gYW5jZXN0b3IganVtcCBmdW5jdGluIEpGVU5DLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitpcGFfZ2V0X2pmX2FuY2VzdG9yX2FnZ19wcmVzZXJ2ZWQgKHN0cnVjdCBpcGFfanVtcF9mdW5jICpqZnVuYykKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoamZ1bmMtPnR5cGUgPT0gSVBBX0pGX0FOQ0VTVE9SKTsKKyAgcmV0dXJuIGpmdW5jLT52YWx1ZS5hbmNlc3Rvci5hZ2dfcHJlc2VydmVkOworfQorCisvKiBTdW1tYXJ5IGRlc2NyaWJpbmcgYSBzaW5nbGUgZm9ybWFsIHBhcmFtZXRlci4gICovCisKK3N0cnVjdCBpcGFfcGFyYW1fZGVzY3JpcHRvcgoreworICAvKiBQQVJBTV9ERUNMIG9mIHRoaXMgcGFyYW1ldGVyLiAgKi8KKyAgdHJlZSBkZWNsOworICAvKiBUaGUgcGFyYW1ldGVyIGlzIHVzZWQuICAqLworICB1bnNpZ25lZCB1c2VkIDogMTsKK307CisKK3R5cGVkZWYgc3RydWN0IGlwYV9wYXJhbV9kZXNjcmlwdG9yIGlwYV9wYXJhbV9kZXNjcmlwdG9yX3Q7CitzdHJ1Y3QgaXBjcF9sYXR0aWNlOworCisvKiBpcGFfbm9kZV9wYXJhbXMgc3RvcmVzIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gZm9ybWFsIHBhcmFtZXRlcnMgb2YgZnVuY3Rpb25zCisgICBhbmQgc29tZSBvdGhlciBpbmZvcm1hdGlvbiBmb3IgaW50ZXJwcm9jZWR1cmFsIHBhc3NlcyB0aGF0IG9wZXJhdGUgb24KKyAgIHBhcmFtZXRlcnMgKHN1Y2ggYXMgaXBhLWNwKS4gICovCisKK3N0cnVjdCBpcGFfbm9kZV9wYXJhbXMKK3sKKyAgLyogSW5mb3JtYXRpb24gYWJvdXQgaW5kaXZpZHVhbCBmb3JtYWwgcGFyYW1ldGVycyB0aGF0IGFyZSBnYXRoZXJlZCB3aGVuCisgICAgIHN1bW1hcmllcyBhcmUgZ2VuZXJhdGVkLiAqLworICB2ZWM8aXBhX3BhcmFtX2Rlc2NyaXB0b3JfdD4gZGVzY3JpcHRvcnM7CisgIC8qIFBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc3RydWN0dXJlcyBkZXNjcmliaW5nIGluZGl2aWR1YWwgZm9ybWFsCisgICAgIHBhcmFtZXRlcnMuICAqLworICBzdHJ1Y3QgaXBjcF9wYXJhbV9sYXR0aWNlcyAqbGF0dGljZXM7CisgIC8qIE9ubHkgZm9yIHZlcnNpb25lZCBub2RlcyB0aGlzIGZpZWxkIHdvdWxkIG5vdCBiZSBOVUxMLAorICAgICBpdCBwb2ludHMgdG8gdGhlIG5vZGUgdGhhdCBJUEEgY3AgY2xvbmVkIGZyb20uICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKmlwY3Bfb3JpZ19ub2RlOworICAvKiBJZiB0aGlzIG5vZGUgaXMgYW4gaXBhLWNwIGNsb25lLCB0aGVzZSBhcmUgdGhlIGtub3duIHZhbHVlcyB0aGF0IGRlc2NyaWJlCisgICAgIHdoYXQgaXQgaGFzIGJlZW4gc3BlY2lhbGl6ZWQgZm9yLiAgKi8KKyAgdmVjPHRyZWU+IGtub3duX3ZhbHM7CisgIC8qIFdoZXRoZXIgdGhlIHBhcmFtIHVzZXMgYW5hbHlzaXMgaGFzIGFscmVhZHkgYmVlbiBwZXJmb3JtZWQuICAqLworICB1bnNpZ25lZCB1c2VzX2FuYWx5c2lzX2RvbmUgOiAxOworICAvKiBXaGV0aGVyIHRoZSBmdW5jdGlvbiBpcyBlbnF1ZXVlZCBpbiBpcGEtY3AgcHJvcGFnYXRpb24gc3RhY2suICAqLworICB1bnNpZ25lZCBub2RlX2VucXVldWVkIDogMTsKKyAgLyogV2hldGhlciB3ZSBzaG91bGQgY3JlYXRlIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBiYXNlZCBvbiB2YWx1ZXMgdGhhdCBhcmUKKyAgICAga25vd24gdG8gYmUgY29uc3RhbnQgaW4gYWxsIGNvbnRleHRzLiAgKi8KKyAgdW5zaWduZWQgZG9fY2xvbmVfZm9yX2FsbF9jb250ZXh0cyA6IDE7CisgIC8qIFNldCBpZiB0aGlzIGlzIGFuIElQQS1DUCBjbG9uZSBmb3IgYWxsIGNvbnRleHRzLiAgKi8KKyAgdW5zaWduZWQgaXNfYWxsX2NvbnRleHRzX2Nsb25lIDogMTsKKyAgLyogTm9kZSBoYXMgYmVlbiBjb21wbGV0ZWx5IHJlcGxhY2VkIGJ5IGNsb25lcyBhbmQgd2lsbCBiZSByZW1vdmVkIGFmdGVyCisgICAgIGlwYS1jcCBpcyBmaW5pc2hlZC4gICovCisgIHVuc2lnbmVkIG5vZGVfZGVhZCA6IDE7Cit9OworCisvKiBpcGFfbm9kZV9wYXJhbXMgYWNjZXNzIGZ1bmN0aW9ucy4gIFBsZWFzZSB1c2UgdGhlc2UgdG8gYWNjZXNzIGZpZWxkcyB0aGF0CisgICBhcmUgb3Igd2lsbCBiZSBzaGFyZWQgYW1vbmcgdmFyaW91cyBwYXNzZXMuICAqLworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBmb3JtYWwgcGFyYW1ldGVycy4gKi8KKworc3RhdGljIGlubGluZSBpbnQKK2lwYV9nZXRfcGFyYW1fY291bnQgKHN0cnVjdCBpcGFfbm9kZV9wYXJhbXMgKmluZm8pCit7CisgIHJldHVybiBpbmZvLT5kZXNjcmlwdG9ycy5sZW5ndGggKCk7Cit9CisKKy8qIFJldHVybiB0aGUgZGVjbGFyYXRpb24gb2YgSXRoIGZvcm1hbCBwYXJhbWV0ZXIgb2YgdGhlIGZ1bmN0aW9uIGNvcnJlc3BvbmRpbmcKKyAgIHRvIElORk8uICBOb3RlIHRoZXJlIGlzIG5vIHNldHRlciBmdW5jdGlvbiBhcyB0aGlzIGFycmF5IGlzIGJ1aWx0IGp1c3Qgb25jZQorICAgdXNpbmcgaXBhX2luaXRpYWxpemVfbm9kZV9wYXJhbXMuICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQoraXBhX2dldF9wYXJhbSAoc3RydWN0IGlwYV9ub2RlX3BhcmFtcyAqaW5mbywgaW50IGkpCit7CisgIHJldHVybiBpbmZvLT5kZXNjcmlwdG9yc1tpXS5kZWNsOworfQorCisvKiBTZXQgdGhlIHVzZWQgZmxhZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBJdGggZm9ybWFsIHBhcmFtZXRlciBvZiB0aGUgZnVuY3Rpb24KKyAgIGFzc29jaWF0ZWQgd2l0aCBJTkZPIHRvIFZBTC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXBhX3NldF9wYXJhbV91c2VkIChzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICppbmZvLCBpbnQgaSwgYm9vbCB2YWwpCit7CisgIGluZm8tPmRlc2NyaXB0b3JzW2ldLnVzZWQgPSB2YWw7Cit9CisKKy8qIFJldHVybiB0aGUgdXNlZCBmbGFnIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEl0aCBmb3JtYWwgcGFyYW1ldGVyIG9mIHRoZQorICAgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIElORk8uICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lwYV9pc19wYXJhbV91c2VkIChzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICppbmZvLCBpbnQgaSkKK3sKKyAgcmV0dXJuIGluZm8tPmRlc2NyaXB0b3JzW2ldLnVzZWQ7Cit9CisKKy8qIEluZm9ybWF0aW9uIGFib3V0IHJlcGxhY2VtZW50cyBkb25lIGluIGFnZ3JlZ2F0ZXMgZm9yIGEgZ2l2ZW4gbm9kZSAoZWFjaAorICAgbm9kZSBoYXMgaXRzIGxpbmtlZCBsaXN0KS4gICovCitzdHJ1Y3QgR1RZKCgpKSBpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlCit7CisgIC8qIE5leHQgaXRlbSBpbiB0aGUgbGlua2VkIGxpc3QuICAqLworICBzdHJ1Y3QgaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZSAqbmV4dDsKKyAgLyogT2Zmc2V0IHdpdGhpbiB0aGUgYWdncmVnYXRlLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBvZmZzZXQ7CisgIC8qIFRoZSBjb25zdGFudCB2YWx1ZS4gICovCisgIHRyZWUgdmFsdWU7CisgIC8qIFRoZSBwYXJhbXRlciBpbmRleC4gICovCisgIGludCBpbmRleDsKKyAgLyogV2hldGhlciB0aGUgdmFsdWUgd2FzIHBhc3NlZCBieSByZWZlcmVuY2UuICAqLworICBib29sIGJ5X3JlZjsKK307CisKK3R5cGVkZWYgc3RydWN0IGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWUgKmlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWVfcDsKKwordm9pZCBpcGFfc2V0X25vZGVfYWdnX3ZhbHVlX2NoYWluIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsCisJCQkJICAgc3RydWN0IGlwYV9hZ2dfcmVwbGFjZW1lbnRfdmFsdWUgKmFnZ3ZhbHMpOworCisvKiBpcGFfZWRnZV9hcmdzIHN0b3JlcyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGEgY2FsbHNpdGUgYW5kIHBhcnRpY3VsYXJseSBpdHMKKyAgIGFyZ3VtZW50cy4gIEl0IGNhbiBiZSBhY2Nlc3NlZCBieSB0aGUgSVBBX0VER0VfUkVGIG1hY3JvLiAgKi8KK3R5cGVkZWYgc3RydWN0IEdUWSgoKSkgaXBhX2VkZ2VfYXJncworeworICAvKiBWZWN0b3Igb2YgdGhlIGNhbGxzaXRlJ3MganVtcCBmdW5jdGlvbiBvZiBlYWNoIHBhcmFtZXRlci4gICovCisgIHZlYzxpcGFfanVtcF9mdW5jX3QsIHZhX2djPiAqanVtcF9mdW5jdGlvbnM7Cit9IGlwYV9lZGdlX2FyZ3NfdDsKKworLyogaXBhX2VkZ2VfYXJncyBhY2Nlc3MgZnVuY3Rpb25zLiAgUGxlYXNlIHVzZSB0aGVzZSB0byBhY2Nlc3MgZmllbGRzIHRoYXQKKyAgIGFyZSBvciB3aWxsIGJlIHNoYXJlZCBhbW9uZyB2YXJpb3VzIHBhc3Nlcy4gICovCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGFjdHVhbCBhcmd1bWVudHMuICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitpcGFfZ2V0X2NzX2FyZ3VtZW50X2NvdW50IChzdHJ1Y3QgaXBhX2VkZ2VfYXJncyAqYXJncykKK3sKKyAgcmV0dXJuIHZlY19zYWZlX2xlbmd0aCAoYXJncy0+anVtcF9mdW5jdGlvbnMpOworfQorCisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUganVtcCBmdW5jdGlvbiBmb3IgdGhlIGl0aCBhcmd1bWVudC4gIFBsZWFzZSBub3RlCisgICB0aGVyZSBpcyBubyBzZXR0ZXIgZnVuY3Rpb24gYXMganVtcCBmdW5jdGlvbnMgYXJlIGFsbCBzZXQgdXAgaW4KKyAgIGlwYV9jb21wdXRlX2p1bXBfZnVuY3Rpb25zLiAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGFfanVtcF9mdW5jICoKK2lwYV9nZXRfaXRoX2p1bXBfZnVuYyAoc3RydWN0IGlwYV9lZGdlX2FyZ3MgKmFyZ3MsIGludCBpKQoreworICByZXR1cm4gJigqYXJncy0+anVtcF9mdW5jdGlvbnMpW2ldOworfQorCisvKiBWZWN0b3JzIG5lZWQgdG8gaGF2ZSB0eXBlZGVmcyBvZiBzdHJ1Y3R1cmVzLiAgKi8KK3R5cGVkZWYgc3RydWN0IGlwYV9ub2RlX3BhcmFtcyBpcGFfbm9kZV9wYXJhbXNfdDsKKworLyogVHlwZXMgb2YgdmVjdG9ycyBob2xkaW5nIHRoZSBpbmZvcy4gICovCisKKy8qIFZlY3RvciB3aGVyZSB0aGUgcGFyYW1ldGVyIGluZm9zIGFyZSBhY3R1YWxseSBzdG9yZWQuICovCitleHRlcm4gdmVjPGlwYV9ub2RlX3BhcmFtc190PiBpcGFfbm9kZV9wYXJhbXNfdmVjdG9yOworLyogVmVjdG9yIG9mIGtub3duIGFnZ3JlZ2F0ZSB2YWx1ZXMgaW4gY2xvbmVkIG5vZGVzLiAgKi8KK2V4dGVybiBHVFkoKCkpIHZlYzxpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlX3AsIHZhX2djPiAqaXBhX25vZGVfYWdnX3JlcGxhY2VtZW50czsKKy8qIFZlY3RvciB3aGVyZSB0aGUgcGFyYW1ldGVyIGluZm9zIGFyZSBhY3R1YWxseSBzdG9yZWQuICovCitleHRlcm4gR1RZKCgpKSB2ZWM8aXBhX2VkZ2VfYXJnc190LCB2YV9nYz4gKmlwYV9lZGdlX2FyZ3NfdmVjdG9yOworCisvKiBSZXR1cm4gdGhlIGFzc29jaWF0ZWQgcGFyYW1ldGVyL2FyZ3VtZW50IGluZm8gY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4KKyAgIG5vZGUvZWRnZS4gICovCisjZGVmaW5lIElQQV9OT0RFX1JFRihOT0RFKSAoJmlwYV9ub2RlX3BhcmFtc192ZWN0b3JbKE5PREUpLT51aWRdKQorI2RlZmluZSBJUEFfRURHRV9SRUYoRURHRSkgKCYoKmlwYV9lZGdlX2FyZ3NfdmVjdG9yKVsoRURHRSktPnVpZF0pCisvKiBUaGlzIG1hY3JvIGNoZWNrcyB2YWxpZGl0eSBvZiBpbmRleCByZXR1cm5lZCBieQorICAgaXBhX2dldF9wYXJhbV9kZWNsX2luZGV4IGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSVNfVkFMSURfSlVNUF9GVU5DX0lOREVYKEkpICgoSSkgIT0gLTEpCisKKy8qIENyZWF0aW5nIGFuZCBmcmVlaW5nIGlwYV9ub2RlX3BhcmFtcyBhbmQgaXBhX2VkZ2VfYXJncy4gICovCit2b2lkIGlwYV9jcmVhdGVfYWxsX25vZGVfcGFyYW1zICh2b2lkKTsKK3ZvaWQgaXBhX2NyZWF0ZV9hbGxfZWRnZV9hcmdzICh2b2lkKTsKK3ZvaWQgaXBhX2ZyZWVfZWRnZV9hcmdzX3N1YnN0cnVjdHVyZXMgKHN0cnVjdCBpcGFfZWRnZV9hcmdzICopOwordm9pZCBpcGFfZnJlZV9ub2RlX3BhcmFtc19zdWJzdHJ1Y3R1cmVzIChzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICopOwordm9pZCBpcGFfZnJlZV9hbGxfbm9kZV9wYXJhbXMgKHZvaWQpOwordm9pZCBpcGFfZnJlZV9hbGxfZWRnZV9hcmdzICh2b2lkKTsKK3ZvaWQgaXBhX2ZyZWVfYWxsX3N0cnVjdHVyZXNfYWZ0ZXJfaXBhX2NwICh2b2lkKTsKK3ZvaWQgaXBhX2ZyZWVfYWxsX3N0cnVjdHVyZXNfYWZ0ZXJfaWlubG4gKHZvaWQpOwordm9pZCBpcGFfcmVnaXN0ZXJfY2dyYXBoX2hvb2tzICh2b2lkKTsKKworLyogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoZSBhcnJheSBvZiBub2RlIHBhcmFtIGluZm9zIGlzIGJpZyBlbm91Z2ggdG8KKyAgIGFjY29tbW9kYXRlIGEgc3RydWN0dXJlIGZvciBhbGwgbm9kZXMgYW5kIHJlYWxsb2NhdGVzIGl0IGlmIG5vdC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXBhX2NoZWNrX2NyZWF0ZV9ub2RlX3BhcmFtcyAodm9pZCkKK3sKKyAgaWYgKCFpcGFfbm9kZV9wYXJhbXNfdmVjdG9yLmV4aXN0cyAoKSkKKyAgICBpcGFfbm9kZV9wYXJhbXNfdmVjdG9yLmNyZWF0ZSAoY2dyYXBoX21heF91aWQpOworCisgIGlmIChpcGFfbm9kZV9wYXJhbXNfdmVjdG9yLmxlbmd0aCAoKSA8PSAodW5zaWduZWQpIGNncmFwaF9tYXhfdWlkKQorICAgIGlwYV9ub2RlX3BhcmFtc192ZWN0b3Iuc2FmZV9ncm93X2NsZWFyZWQgKGNncmFwaF9tYXhfdWlkICsgMSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGUgYXJyYXkgb2YgZWRnZSBhcmd1bWVudHMgaW5mb3MgaXMgYmlnIGVub3VnaCB0bworICAgYWNjb21tb2RhdGUgYSBzdHJ1Y3R1cmUgZm9yIGFsbCBlZGdlcyBhbmQgcmVhbGxvY2F0ZXMgaXQgaWYgbm90LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitpcGFfY2hlY2tfY3JlYXRlX2VkZ2VfYXJncyAodm9pZCkKK3sKKyAgaWYgKHZlY19zYWZlX2xlbmd0aCAoaXBhX2VkZ2VfYXJnc192ZWN0b3IpIDw9ICh1bnNpZ25lZCkgY2dyYXBoX2VkZ2VfbWF4X3VpZCkKKyAgICB2ZWNfc2FmZV9ncm93X2NsZWFyZWQgKGlwYV9lZGdlX2FyZ3NfdmVjdG9yLCBjZ3JhcGhfZWRnZV9tYXhfdWlkICsgMSk7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXkgb2YgZWRnZSBpbmZvcyBpcyBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgYW4KKyAgIGluZm8gZm9yIEVER0UuICBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhhdCBkZWJ1ZyBkdW1waW5nCisgICBmdW5jdGlvbiBjYW4gY2hlY2sgaW5mbyBhdmFpbGFiaWxpdHkgd2l0aG91dCBjYXVzaW5nIHJlYWxsb2NhdGlvbnMuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lwYV9lZGdlX2FyZ3NfaW5mb19hdmFpbGFibGVfZm9yX2VkZ2VfcCAoc3RydWN0IGNncmFwaF9lZGdlICplZGdlKQoreworICByZXR1cm4gKCh1bnNpZ25lZCkgZWRnZS0+dWlkIDwgdmVjX3NhZmVfbGVuZ3RoIChpcGFfZWRnZV9hcmdzX3ZlY3RvcikpOworfQorCisvKiBSZXR1cm4gdGhlIGFnZ3JlZ2F0ZSByZXBsYWNlbWVudHMgZm9yIE5PREUsIGlmIHRoZXJlIGFyZSBhbnkuICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGFfYWdnX3JlcGxhY2VtZW50X3ZhbHVlICoKK2lwYV9nZXRfYWdnX3JlcGxhY2VtZW50c19mb3Jfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQoreworICBpZiAoKHVuc2lnbmVkKSBub2RlLT51aWQgPj0gdmVjX3NhZmVfbGVuZ3RoIChpcGFfbm9kZV9hZ2dfcmVwbGFjZW1lbnRzKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuICgqaXBhX25vZGVfYWdnX3JlcGxhY2VtZW50cylbbm9kZS0+dWlkXTsKK30KKworLyogRnVuY3Rpb24gZm9ybWFsIHBhcmFtZXRlcnMgcmVsYXRlZCBjb21wdXRhdGlvbnMuICAqLwordm9pZCBpcGFfaW5pdGlhbGl6ZV9ub2RlX3BhcmFtcyAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKTsKK2Jvb2wgaXBhX3Byb3BhZ2F0ZV9pbmRpcmVjdF9jYWxsX2luZm9zIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmNzLAorCQkJCQl2ZWM8Y2dyYXBoX2VkZ2VfcD4gKm5ld19lZGdlcyk7CisKKy8qIEluZGlyZWN0IGVkZ2UgYW5kIGJpbmZvIHByb2Nlc3NpbmcuICAqLwordHJlZSBpcGFfZ2V0X2luZGlyZWN0X2VkZ2VfdGFyZ2V0IChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmllLAorCQkJCSAgIHZlYzx0cmVlPiAsCisJCQkJICAgdmVjPHRyZWU+ICwKKwkJCQkgICB2ZWM8aXBhX2FnZ19qdW1wX2Z1bmN0aW9uX3A+ICk7CitzdHJ1Y3QgY2dyYXBoX2VkZ2UgKmlwYV9tYWtlX2VkZ2VfZGlyZWN0X3RvX3RhcmdldCAoc3RydWN0IGNncmFwaF9lZGdlICosIHRyZWUpOworCisvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBib3RoLiAgKi8KK3ZvaWQgaXBhX2FuYWx5emVfbm9kZSAoc3RydWN0IGNncmFwaF9ub2RlICopOworCisvKiBBZ2dyZWdhdGUganVtcCBmdW5jdGlvbiByZWxhdGVkIGZ1bmN0aW9ucy4gICovCit0cmVlIGlwYV9maW5kX2FnZ19jc3RfZm9yX3BhcmFtIChzdHJ1Y3QgaXBhX2FnZ19qdW1wX2Z1bmN0aW9uICosIEhPU1RfV0lERV9JTlQsCisJCQkJIGJvb2wpOworYm9vbCBpcGFfbG9hZF9mcm9tX3Bhcm1fYWdnIChzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICosIGdpbXBsZSwgdHJlZSwgaW50ICosCisJCQkgICAgIEhPU1RfV0lERV9JTlQgKiwgYm9vbCAqKTsKKworLyogRGVidWdnaW5nIGludGVyZmFjZS4gICovCit2b2lkIGlwYV9wcmludF9ub2RlX3BhcmFtcyAoRklMRSAqLCBzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpOwordm9pZCBpcGFfcHJpbnRfYWxsX3BhcmFtcyAoRklMRSAqKTsKK3ZvaWQgaXBhX3ByaW50X25vZGVfanVtcF9mdW5jdGlvbnMgKEZJTEUgKmYsIHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSk7Cit2b2lkIGlwYV9wcmludF9hbGxfanVtcF9mdW5jdGlvbnMgKEZJTEUgKiBmKTsKK3ZvaWQgaXBjcF92ZXJpZnlfcHJvcGFnYXRlZF92YWx1ZXMgKHZvaWQpOworCitleHRlcm4gYWxsb2NfcG9vbCBpcGNwX3ZhbHVlc19wb29sOworZXh0ZXJuIGFsbG9jX3Bvb2wgaXBjcF9zb3VyY2VzX3Bvb2w7CitleHRlcm4gYWxsb2NfcG9vbCBpcGNwX2FnZ19sYXR0aWNlX3Bvb2w7CisKKy8qIFN0cnVjdHVyZSB0byBkZXNjcmliZSB0cmFuc2Zvcm1hdGlvbnMgb2YgZm9ybWFsIHBhcmFtZXRlcnMgYW5kIGFjdHVhbAorICAgYXJndW1lbnRzLiAgRWFjaCBpbnN0YW5jZSBkZXNjcmliZXMgb25lIG5ldyBwYXJhbWV0ZXIgYW5kIHRoZXkgYXJlIG1lYW50IHRvCisgICBiZSBzdG9yZWQgaW4gYSB2ZWN0b3IuICBBZGRpdGlvbmFsbHksIG1vc3QgdXNlcnMgd2lsbCBwcm9iYWJseSB3YW50IHRvIHN0b3JlCisgICBhZGp1c3RtZW50cyBhYm91dCBwYXJhbWV0ZXJzIHRoYXQgYXJlIGJlaW5nIHJlbW92ZWQgYWx0b2dldGhlciBzbyB0aGF0IFNTQQorICAgbmFtZXMgYmVsb25naW5nIHRvIHRoZW0gY2FuIGJlIHJlcGxhY2VkIGJ5IFNTQSBuYW1lcyBvZiBhbiBhcnRpZmljaWFsCisgICB2YXJpYWJsZS4gICovCitzdHJ1Y3QgaXBhX3Bhcm1fYWRqdXN0bWVudAoreworICAvKiBUaGUgb3JpZ2luYWwgUEFSTV9ERUNMIGl0c2VsZiwgaGVscGZ1bCBmb3IgcHJvY2Vzc2luZyBvZiB0aGUgYm9keSBvZiB0aGUKKyAgICAgZnVuY3Rpb24gaXRzZWxmLiAgSW50ZW5kZWQgZm9yIHRyYXZlcnNpbmcgZnVuY3Rpb24gYm9kaWVzLgorICAgICBpcGFfbW9kaWZ5X2Zvcm1hbF9wYXJhbWV0ZXJzLCBpcGFfbW9kaWZ5X2NhbGxfYXJndW1lbnRzIGFuZAorICAgICBpcGFfY29tYmluZV9hZGp1c3RtZW50cyBpZ25vcmUgdGhpcyBhbmQgdXNlIGJhc2VfaW5kZXguCisgICAgIGlwYV9tb2RpZnlfZm9ybWFsX3BhcmFtZXRlcnMgYWN0dWFsbHkgc2V0cyB0aGlzLiAgKi8KKyAgdHJlZSBiYXNlOworCisgIC8qIFR5cGUgb2YgdGhlIG5ldyBwYXJhbWV0ZXIuICBIb3dldmVyLCBpZiBieV9yZWYgaXMgdHJ1ZSwgdGhlIHJlYWwgdHlwZSB3aWxsCisgICAgIGJlIGEgcG9pbnRlciB0byB0aGlzIHR5cGUuICAqLworICB0cmVlIHR5cGU7CisKKyAgLyogQWxpYXMgcmVmcmVyZW5jZSB0eXBlIHRvIGJlIHVzZWQgaW4gTUVNX1JFRnMgd2hlbiBhZGp1c3RpbmcgY2FsbGVyCisgICAgIGFyZ3VtZW50cy4gICovCisgIHRyZWUgYWxpYXNfcHRyX3R5cGU7CisKKyAgLyogVGhlIG5ldyBkZWNsYXJhdGlvbiB3aGVuIGNyZWF0aW5nL3JlcGxhY2luZyBhIHBhcmFtZXRlci4gIENyZWF0ZWQgYnkKKyAgICAgaXBhX21vZGlmeV9mb3JtYWxfcGFyYW1ldGVycywgdXNlZnVsIGZvciBmdW5jdGlvbnMgbW9kaWZ5aW5nIHRoZSBib2R5CisgICAgIGFjY29yZGluZ2x5LiAqLworICB0cmVlIHJlZHVjdGlvbjsKKworICAvKiBOZXcgZGVjbGFyYXRpb24gb2YgYSBzdWJzdGl0dXRlIHZhcmlhYmxlIHRoYXQgd2UgbWF5IHVzZSB0byByZXBsYWNlIGFsbAorICAgICBub24tZGVmYXVsdC1kZWYgc3NhIG5hbWVzIHdoZW4gYSBwYXJtIGRlY2wgaXMgZ29pbmcgYXdheS4gICovCisgIHRyZWUgbmV3X3NzYV9iYXNlOworCisgIC8qIElmIG5vbi1OVUxMIGFuZCB0aGUgb3JpZ2luYWwgcGFyYW1ldGVyIGlzIHRvIGJlIHJlbW92ZWQgKGNvcHlfcGFyYW0gYmVsb3cKKyAgICAgaXMgTlVMTCksIHRoaXMgaXMgZ29pbmcgdG8gYmUgaXRzIG5vbmxvY2FsaXplZCB2YXJzIHZhbHVlLiAgKi8KKyAgdHJlZSBub25sb2NhbF92YWx1ZTsKKworICAvKiBPZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgcGFyYW1ldGVyIChmb3IgdGhlIGNhc2VzIHdoZW4gdGhlIG5ldyBwYXJhbWV0ZXIKKyAgICAgaXMgYSBjb21wb25lbnQgb2YgYW4gb3JpZ2luYWwgb25lKS4gICovCisgIEhPU1RfV0lERV9JTlQgb2Zmc2V0OworCisgIC8qIFplcm8gYmFzZWQgaW5kZXggb2YgdGhlIG9yaWdpbmFsIHBhcmFtZXRlciB0aGlzIG9uZSBpcyBiYXNlZCBvbi4gIChBVE0KKyAgICAgdGhlcmUgaXMgbm8gd2F5IHRvIGluc2VydCBhIG5ldyBwYXJhbWV0ZXIgb3V0IG9mIHRoZSBibHVlIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAgbm8gbmVlZCBidXQgaWYgaXQgYXJpc2VzIHRoZSBjb2RlIGNhbiBiZSBlYXNpbHkgZXh0ZWRlZCB0byBkbyBzby4pICAqLworICBpbnQgYmFzZV9pbmRleDsKKworICAvKiBUaGlzIG5ldyBwYXJhbWV0ZXIgaXMgYW4gdW5tb2RpZmllZCBwYXJhbWV0ZXIgYXQgaW5kZXggYmFzZV9pbmRleC4gKi8KKyAgdW5zaWduZWQgY29weV9wYXJhbSA6IDE7CisKKyAgLyogVGhpcyBhZGp1c3RtZW50IGRlc2NyaWJlcyBhIHBhcmFtZXRlciB0aGF0IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQKKyAgICAgY29tcGxldGVseS4gIE1vc3QgdXNlcnMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGJvb2sga2VlcCB0aG9zZSBzbyB0aGF0IHRoZXkKKyAgICAgZG9uJ3QgbGVhdmUgYmVoaW5mZCBhbnkgbm9uIGRlZmF1bHQgZGVmIHNzYSBuYW1lcyBiZWxvbmdpbmcgdG8gdGhlbS4gICovCisgIHVuc2lnbmVkIHJlbW92ZV9wYXJhbSA6IDE7CisKKyAgLyogVGhlIHBhcmFtZXRlciBpcyB0byBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgKi8KKyAgdW5zaWduZWQgYnlfcmVmIDogMTsKK307CisKK3R5cGVkZWYgc3RydWN0IGlwYV9wYXJtX2FkanVzdG1lbnQgaXBhX3Bhcm1fYWRqdXN0bWVudF90OworCit0eXBlZGVmIHZlYzxpcGFfcGFybV9hZGp1c3RtZW50X3Q+IGlwYV9wYXJtX2FkanVzdG1lbnRfdmVjOworCit2ZWM8dHJlZT4gaXBhX2dldF92ZWN0b3Jfb2ZfZm9ybWFsX3Bhcm1zICh0cmVlIGZuZGVjbCk7Cit2b2lkIGlwYV9tb2RpZnlfZm9ybWFsX3BhcmFtZXRlcnMgKHRyZWUgZm5kZWNsLCBpcGFfcGFybV9hZGp1c3RtZW50X3ZlYywKKwkJCQkgICBjb25zdCBjaGFyICopOwordm9pZCBpcGFfbW9kaWZ5X2NhbGxfYXJndW1lbnRzIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKiwgZ2ltcGxlLAorCQkJCWlwYV9wYXJtX2FkanVzdG1lbnRfdmVjKTsKK2lwYV9wYXJtX2FkanVzdG1lbnRfdmVjIGlwYV9jb21iaW5lX2FkanVzdG1lbnRzIChpcGFfcGFybV9hZGp1c3RtZW50X3ZlYywKKwkJCQkJCSBpcGFfcGFybV9hZGp1c3RtZW50X3ZlYyk7Cit2b2lkIGlwYV9kdW1wX3BhcmFtX2FkanVzdG1lbnRzIChGSUxFICosIGlwYV9wYXJtX2FkanVzdG1lbnRfdmVjLCB0cmVlKTsKK3ZvaWQgaXBhX2R1bXBfYWdnX3JlcGxhY2VtZW50X3ZhbHVlcyAoRklMRSAqZiwKKwkJCQkgICAgICBzdHJ1Y3QgaXBhX2FnZ19yZXBsYWNlbWVudF92YWx1ZSAqYXYpOwordm9pZCBpcGFfcHJvcF93cml0ZV9qdW1wX2Z1bmN0aW9ucyAodm9pZCk7Cit2b2lkIGlwYV9wcm9wX3JlYWRfanVtcF9mdW5jdGlvbnMgKHZvaWQpOwordm9pZCBpcGFfcHJvcF93cml0ZV9hbGxfYWdnX3JlcGxhY2VtZW50ICh2b2lkKTsKK3ZvaWQgaXBhX3Byb3BfcmVhZF9hbGxfYWdnX3JlcGxhY2VtZW50ICh2b2lkKTsKK3ZvaWQgaXBhX3VwZGF0ZV9hZnRlcl9sdG9fcmVhZCAodm9pZCk7CitpbnQgaXBhX2dldF9wYXJhbV9kZWNsX2luZGV4IChzdHJ1Y3QgaXBhX25vZGVfcGFyYW1zICosIHRyZWUpOwordHJlZSBpcGFfdmFsdWVfZnJvbV9qZnVuYyAoc3RydWN0IGlwYV9ub2RlX3BhcmFtcyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpcGFfanVtcF9mdW5jICpqZnVuYyk7Cit1bnNpZ25lZCBpbnQgaXBjcF90cmFuc2Zvcm1fZnVuY3Rpb24gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSk7CisKKworLyogRnJvbSB0cmVlLXNyYS5jOiAgKi8KK3RyZWUgYnVpbGRfcmVmX2Zvcl9vZmZzZXQgKGxvY2F0aW9uX3QsIHRyZWUsIEhPU1RfV0lERV9JTlQsIHRyZWUsCisJCQkgICBnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBib29sKTsKKworI2VuZGlmIC8qIElQQV9QUk9QX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pcGEtcmVmLWlubGluZS5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lwYS1yZWYtaW5saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3NGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pcGEtcmVmLWlubGluZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBJUEEgcmVmZXJlbmNlIGxpc3RzLgorICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBKYW4gSHViaWNrYQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogUmV0dXJuIGNhbGxncmFwaCBub2RlIFJFRiBpcyByZWZlcnJpbmcuICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyYXBoX25vZGUgKgoraXBhX3JlZl9ub2RlIChzdHJ1Y3QgaXBhX3JlZiAqcmVmKQoreworICByZXR1cm4gY2dyYXBoIChyZWYtPnJlZmVycmVkKTsKK30KKworLyogUmV0dXJuIHZhcnBvb2wgbm9kZSBSRUYgaXMgcmVmZXJyaW5nLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmFycG9vbF9ub2RlICoKK2lwYV9yZWZfdmFycG9vbF9ub2RlIChzdHJ1Y3QgaXBhX3JlZiAqcmVmKQoreworICByZXR1cm4gdmFycG9vbCAocmVmLT5yZWZlcnJlZCk7Cit9CisKKy8qIFJldHVybiBjZ3JhcGggbm9kZSBSRUYgaXMgaW4uICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JhcGhfbm9kZSAqCitpcGFfcmVmX3JlZmVycmluZ19ub2RlIChzdHJ1Y3QgaXBhX3JlZiAqcmVmKQoreworICByZXR1cm4gY2dyYXBoIChyZWYtPnJlZmVycmluZyk7Cit9CisKKy8qIFJldHVybiB2YXJwb29sIG5vZGUgUkVGIGlzIGluLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdmFycG9vbF9ub2RlICoKK2lwYV9yZWZfcmVmZXJyaW5nX3ZhcnBvb2xfbm9kZSAoc3RydWN0IGlwYV9yZWYgKnJlZikKK3sKKyAgcmV0dXJuIHZhcnBvb2wgKHJlZi0+cmVmZXJyaW5nKTsKK30KKworLyogUmV0dXJuIHJlZmVyZW5jZSBsaXN0IFJFRiBpcyBpbi4gICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYV9yZWZfbGlzdCAqCitpcGFfcmVmX3JlZmVycmluZ19yZWZfbGlzdCAoc3RydWN0IGlwYV9yZWYgKnJlZikKK3sKKyAgcmV0dXJuICZyZWYtPnJlZmVycmluZy0+c3ltYm9sLnJlZl9saXN0OworfQorCisvKiBSZXR1cm4gcmVmZXJlbmNlIGxpc3QgUkVGIGlzIGluLiAgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhX3JlZl9saXN0ICoKK2lwYV9yZWZfcmVmZXJyZWRfcmVmX2xpc3QgKHN0cnVjdCBpcGFfcmVmICpyZWYpCit7CisgIHJldHVybiAmcmVmLT5yZWZlcnJlZC0+c3ltYm9sLnJlZl9saXN0OworfQorCisvKiBSZXR1cm4gZmlyc3QgcmVmZXJlbmNlIGluIExJU1Qgb3IgTlVMTCBpZiBlbXB0eS4gICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYV9yZWYgKgoraXBhX3JlZl9saXN0X2ZpcnN0X3JlZmVyZW5jZSAoc3RydWN0IGlwYV9yZWZfbGlzdCAqbGlzdCkKK3sKKyAgaWYgKCF2ZWNfc2FmZV9sZW5ndGggKGxpc3QtPnJlZmVyZW5jZXMpKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gJigqbGlzdC0+cmVmZXJlbmNlcylbMF07Cit9CisKKy8qIFJldHVybiBmaXJzdCByZWZlcnJpbmcgcmVmIGluIExJU1Qgb3IgTlVMTCBpZiBlbXB0eS4gICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYV9yZWYgKgoraXBhX3JlZl9saXN0X2ZpcnN0X3JlZmVycmluZyAoc3RydWN0IGlwYV9yZWZfbGlzdCAqbGlzdCkKK3sKKyAgaWYgKCFsaXN0LT5yZWZlcnJpbmcubGVuZ3RoICgpKQorICAgIHJldHVybiBOVUxMOworICByZXR1cm4gbGlzdC0+cmVmZXJyaW5nWzBdOworfQorCisvKiBDbGVhciByZWZlcmVuY2UgbGlzdC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXBhX2VtcHR5X3JlZl9saXN0IChzdHJ1Y3QgaXBhX3JlZl9saXN0ICpsaXN0KQoreworICBsaXN0LT5yZWZlcnJpbmcuY3JlYXRlICgwKTsKKyAgbGlzdC0+cmVmZXJlbmNlcyA9IE5VTEw7Cit9CisKKy8qIENsZWFyIHJlZmVyZW5jZSBsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2lwYV9yZWZfbGlzdF9ucmVmZXJlbmNlcyAoc3RydWN0IGlwYV9yZWZfbGlzdCAqbGlzdCkKK3sKKyAgcmV0dXJuIHZlY19zYWZlX2xlbmd0aCAobGlzdC0+cmVmZXJlbmNlcyk7Cit9CisKKyNkZWZpbmUgaXBhX3JlZl9saXN0X3JlZmVyZW5jZV9pdGVyYXRlKEwsSSxQKSBcCisgICB2ZWNfc2FmZV9pdGVyYXRlICgoTCktPnJlZmVyZW5jZXMsIChJKSwgJihQKSkKKyNkZWZpbmUgaXBhX3JlZl9saXN0X3JlZmVycmluZ19pdGVyYXRlKEwsSSxQKSBcCisgICAoTCktPnJlZmVycmluZy5pdGVyYXRlICgoSSksICYoUCkpCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXJlZi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lwYS1yZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjJmYzUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lwYS1yZWYuaApAQCAtMCwwICsxLDczIEBACisvKiBJUEEgcmVmZXJlbmNlIGxpc3RzLgorICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBKYW4gSHViaWNrYQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworc3RydWN0IGNncmFwaF9ub2RlOworc3RydWN0IHZhcnBvb2xfbm9kZTsKK3VuaW9uIHN5bXRhYl9ub2RlX2RlZjsKK3R5cGVkZWYgdW5pb24gc3ltdGFiX25vZGVfZGVmICpzeW10YWJfbm9kZTsKK3R5cGVkZWYgY29uc3QgdW5pb24gc3ltdGFiX25vZGVfZGVmICpjb25zdF9zeW10YWJfbm9kZTsKKworCisvKiBIb3cgdGhlIHJlZmVyZW5jZSBpcyBkb25lLiAgKi8KK2VudW0gR1RZKCgpKSBpcGFfcmVmX3VzZQoreworICBJUEFfUkVGX0xPQUQsCisgIElQQV9SRUZfU1RPUkUsCisgIElQQV9SRUZfQUREUiwKKyAgSVBBX1JFRl9BTElBUworfTsKKworLyogUmVjb3JkIG9mIHJlZmVyZW5jZSBpbiBjYWxsZ3JhcGggb3IgdmFycG9vbC4gICovCitzdHJ1Y3QgR1RZKCgpKSBpcGFfcmVmCit7CisgIHN5bXRhYl9ub2RlIHJlZmVycmluZzsKKyAgc3ltdGFiX25vZGUgcmVmZXJyZWQ7CisgIGdpbXBsZSBzdG10OworICB1bnNpZ25lZCBpbnQgcmVmZXJyZWRfaW5kZXg7CisgIEVOVU1fQklURklFTEQgKGlwYV9yZWZfdXNlKSB1c2U6MjsKK307CisKK3R5cGVkZWYgc3RydWN0IGlwYV9yZWYgaXBhX3JlZl90OwordHlwZWRlZiBzdHJ1Y3QgaXBhX3JlZiAqaXBhX3JlZl9wdHI7CisKKworLyogTGlzdCBvZiByZWZlcmVuY2VzLiAgVGhpcyBpcyBzdG9yZWQgaW4gYm90aCBjYWxsZ3JhcGggYW5kIHZhcnBvb2wgbm9kZXMuICAqLworc3RydWN0IEdUWSgoKSkgaXBhX3JlZl9saXN0Cit7CisgIC8qIFN0b3JlIGFjdHVhbCByZWZlcmVuY2VzIGluIHJlZmVyZW5jZXMgdmVjdG9yLiAgKi8KKyAgdmVjPGlwYV9yZWZfdCwgdmFfZ2M+ICpyZWZlcmVuY2VzOworICAvKiBSZWZlcnJpbmcgaXMgdmVjdG9yIG9mIHBvaW50ZXJzIHRvIHJlZmVyZW5jZXMuICBJdCBtdXN0IG5vdCBsaXZlIGluIEdHQyBzcGFjZQorICAgICBvciBHR0Mgd2lsbCB0cnkgdG8gbWFyayBtaWRkbGUgb2YgcmVmZXJlbmNlcyB2ZWN0b3JzLiAgKi8KKyAgdmVjPGlwYV9yZWZfcHRyPiAgR1RZKChza2lwKSkgcmVmZXJyaW5nOworfTsKKworc3RydWN0IGlwYV9yZWYgKiBpcGFfcmVjb3JkX3JlZmVyZW5jZSAoc3ltdGFiX25vZGUsCisJCQkJICAgICAgIHN5bXRhYl9ub2RlLAorCQkJCSAgICAgICBlbnVtIGlwYV9yZWZfdXNlLCBnaW1wbGUpOworCit2b2lkIGlwYV9yZW1vdmVfcmVmZXJlbmNlIChzdHJ1Y3QgaXBhX3JlZiAqKTsKK3ZvaWQgaXBhX3JlbW92ZV9hbGxfcmVmZXJlbmNlcyAoc3RydWN0IGlwYV9yZWZfbGlzdCAqKTsKK3ZvaWQgaXBhX3JlbW92ZV9hbGxfcmVmZXJyaW5nIChzdHJ1Y3QgaXBhX3JlZl9saXN0ICopOwordm9pZCBpcGFfZHVtcF9yZWZlcmVuY2VzIChGSUxFICosIHN0cnVjdCBpcGFfcmVmX2xpc3QgKik7Cit2b2lkIGlwYV9kdW1wX3JlZmVycmluZyAoRklMRSAqLCBzdHJ1Y3QgaXBhX3JlZl9saXN0ICopOwordm9pZCBpcGFfY2xvbmVfcmVmZXJlbmNlcyAoc3ltdGFiX25vZGUsIHN0cnVjdCBpcGFfcmVmX2xpc3QgKik7Cit2b2lkIGlwYV9jbG9uZV9yZWZlcnJpbmcgKHN5bXRhYl9ub2RlLCBzdHJ1Y3QgaXBhX3JlZl9saXN0ICopOworYm9vbCBpcGFfcmVmX2Nhbm5vdF9sZWFkX3RvX3JldHVybiAoc3RydWN0IGlwYV9yZWYgKik7Citib29sIGlwYV9yZWZfaGFzX2FsaWFzZXNfcCAoc3RydWN0IGlwYV9yZWZfbGlzdCAqKTsKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pcGEtcmVmZXJlbmNlLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXJlZmVyZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTkxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXJlZmVyZW5jZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIElQQSBoYW5kbGluZyBvZiByZWZlcmVuY2VzLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBLZW5uZXRoIFphZGVjayA8emFkZWNrQG5hdHVyYWxicmlkZ2UuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfSVBBX1JFRkVSRU5DRV9ICisjZGVmaW5lIEdDQ19JUEFfUkVGRVJFTkNFX0gKKyNpbmNsdWRlICJiaXRtYXAuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisKKy8qIEluIGlwYS1yZWZlcmVuY2UuYyAgKi8KK2JpdG1hcCBpcGFfcmVmZXJlbmNlX2dldF9ub3RfcmVhZF9nbG9iYWwgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqZm4pOworYml0bWFwIGlwYV9yZWZlcmVuY2VfZ2V0X25vdF93cml0dGVuX2dsb2JhbCAoc3RydWN0IGNncmFwaF9ub2RlICpmbik7CisKKyNlbmRpZiAgLyogR0NDX0lQQV9SRUZFUkVOQ0VfSCAgKi8KKwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lwYS11dGlscy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2lwYS11dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODg1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaXBhLXV0aWxzLmgKQEAgLTAsMCArMSw1MiBAQAorLyogVXRpbGl0aWVzIGZvciBpcGEgYW5hbHlzaXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEtlbm5ldGggWmFkZWNrIDx6YWRlY2tAbmF0dXJhbGJyaWRnZS5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19JUEFfVVRJTFNfSAorI2RlZmluZSBHQ0NfSVBBX1VUSUxTX0gKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY2dyYXBoLmgiCisKK3N0cnVjdCBpcGFfZGZzX2luZm8geworICBpbnQgZGZuX251bWJlcjsKKyAgaW50IGxvd19saW5rOworICAvKiBUaGlzIGZpZWxkIHdpbGwgaGF2ZSB0aGUgc2FteSB2YWx1ZSBmb3IgYW55IHR3byBub2RlcyBpbiB0aGUgc2FtZSBzdHJvbmdseQorICAgICBjb25uZWN0ZWQgY29tcG9uZW50LiAgKi8KKyAgaW50IHNjY19ubzsKKyAgYm9vbCBuZXdfbm9kZTsKKyAgYm9vbCBvbl9zdGFjazsKKyAgc3RydWN0IGNncmFwaF9ub2RlKiBuZXh0X2N5Y2xlOworICBQVFIgYXV4OworfTsKKworCisKKy8qIEluIGlwYS11dGlscy5jICAqLwordm9pZCBpcGFfcHJpbnRfb3JkZXIgKEZJTEUqLCBjb25zdCBjaGFyICosIHN0cnVjdCBjZ3JhcGhfbm9kZSoqLCBpbnQpOworaW50IGlwYV9yZWR1Y2VkX3Bvc3RvcmRlciAoc3RydWN0IGNncmFwaF9ub2RlICoqLCBib29sLCBib29sLAorCQkJICBib29sICgqaWdub3JlX2VkZ2UpIChzdHJ1Y3QgY2dyYXBoX2VkZ2UgKikpOwordm9pZCBpcGFfZnJlZV9wb3N0b3JkZXJfaW5mbyAodm9pZCk7Cit2ZWM8Y2dyYXBoX25vZGVfcHRyPiBpcGFfZ2V0X25vZGVzX2luX2N5Y2xlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKik7CitpbnQgaXBhX3JldmVyc2VfcG9zdG9yZGVyIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiopOwordHJlZSBnZXRfYmFzZV92YXIgKHRyZWUpOworCisKKyNlbmRpZiAgLyogR0NDX0lQQV9VVElMU19IICAqLworCisKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9pcy1hLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaXMtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiN2Y5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvaXMtYS5oCkBAIC0wLDAgKzEsMjAxIEBACisvKiBEeW5hbWljIHRlc3RpbmcgZm9yIGFic3RyYWN0IGlzLWEgcmVsYXRpb25zaGlwcy4KKyAgIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgTGF3cmVuY2UgQ3Jvd2wuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKy8qIFRoaXMgaGVhZGVyIGdlbmVyaWMgdHlwZSBxdWVyeSBhbmQgY29udmVyc2lvbiBmdW5jdGlvbnMuCisKKworVVNJTkcgVEhFIEdFTkVSSUMgVFlQRSBGQUNJTElUWQorCisKK1RoZSB1c2VyIGZ1bmN0aW9ucyBhcmU6CisKK2Jvb2wgaXNfYSA8VFlQRT4gKHBvaW50ZXIpCisKKyAgICBUZXN0cyB3aGV0aGVyIHRoZSBwb2ludGVyIGFjdHVhbGx5IHBvaW50cyB0byBhIG1vcmUgZGVyaXZlZCBUWVBFLgorCisgICAgU3VwcG9zZSB5b3UgaGF2ZSBhIHN5bXRhYl9ub2RlX2RlZiAqcHRyLCBBS0Egc3ltdGFiX25vZGUgcHRyLiAgWW91IGNhbiB0ZXN0CisgICAgd2hldGhlciBpdCBwb2ludHMgdG8gYSAnZGVyaXZlZCcgY2dyYXBoX25vZGUgYXMgZm9sbG93cy4KKworICAgICAgaWYgKGlzX2EgPGNncmFwaF9ub2RlPiAocHRyKSkKKyAgICAgICAgLi4uLgorCisKK1RZUEUgKmFzX2EgPFRZUEU+IChwb2ludGVyKQorCisgICAgQ29udmVydHMgcG9pbnRlciB0byBhIFRZUEUqLgorCisgICAgWW91IGNhbiBqdXN0IGFzc3VtZSB0aGF0IGl0IGlzIHN1Y2ggYSBub2RlLgorCisgICAgICBkb19zb21ldGhpbmdfd2l0aCAoYXNfYSA8Y2dyYXBoX25vZGU+ICpwdHIpOworCitUWVBFICpkeW5fY2FzdCA8VFlQRT4gKHBvaW50ZXIpCisKKyAgICBDb252ZXJ0cyBwb2ludGVyIHRvIFRZUEUqIGlmIGFuZCBvbmx5IGlmICJpc19hIDxUWVBFPiBwb2ludGVyIi4gIE90aGVyd2lzZSwKKyAgICByZXR1cm5zIE5VTEwuICBUaGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbGx5IGEgY2hlY2tlZCBkb3duIGNhc3QuCisKKyAgICBUaGlzIGZ1bmN0aW9ucyByZWR1Y2UgY29tcGlsZSB0aW1lIGFuZCBpbmNyZWFzZSB0eXBlIHNhZmV0eSB3aGVuIHRyZWF0aW5nIGEKKyAgICBnZW5lcmljIGl0ZW0gYXMgYSBtb3JlIHNwZWNpZmljIGl0ZW0uCisKKyAgICBZb3UgY2FuIHRlc3QgYW5kIG9idGFpbiBhIHBvaW50ZXIgdG8gdGhlICdkZXJpdmVkJyB0eXBlIGluIG9uZSBpbmRpdmlzaWJsZQorICAgIG9wZXJhdGlvbi4KKworICAgICAgaWYgKGNncmFwaF9ub2RlICpjcHRyID0gZHluX2Nhc3QgPGNncmFwaF9ub2RlPiAocHRyKSkKKyAgICAgICAgLi4uLgorCisgICAgQXMgYW4gZXhhbXBsZSwgdGhlIGNvZGUgY2hhbmdlIGlzIGZyb20KKworICAgICAgaWYgKHN5bXRhYl9mdW5jdGlvbl9wIChub2RlKSkKKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqY25vZGUgPSBjZ3JhcGggKG5vZGUpOworICAgICAgICAgIC4uLi4KKyAgICAgICAgfQorCisgICAgdG8KKworICAgICAgaWYgKGNncmFwaF9ub2RlICpjbm9kZSA9IGR5bl9jYXN0IDxjZ3JhcGhfbm9kZT4gKG5vZGUpKQorICAgICAgICB7CisgICAgICAgICAgLi4uLgorICAgICAgICB9CisKKyAgICBUaGUgbmVjZXNzYXJ5IGNvbmRpdGlvbmFsIHRlc3QgZGVmaW5lcyBhIHZhcmlhYmxlIHRoYXQgaG9sZHMgYSBrbm93biBnb29kCisgICAgcG9pbnRlciB0byB0aGUgc3BlY2lmaWMgaXRlbSBhbmQgYXZvaWRzIHN1YnNlcXVlbnQgY29udmVyc2lvbiBjYWxscyBhbmQKKyAgICB0aGUgYXNzZXJ0aW9uIGNoZWNrcyB0aGF0IG1heSBjb21lIHdpdGggdGhlbS4KKworICAgIFdoZW4sIHRoZSBwcm9wZXJ0eSB0ZXN0IGlzIGVtYmVkZGVkIHdpdGhpbiBhIGxhcmdlciBjb25kaXRpb24sIHRoZQorICAgIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGdldHMgcHVsbGVkIG91dCBvZiB0aGUgY29uZGl0aW9uLiAgKFRoaXMgYXBwcm9hY2gKKyAgICBsZWF2ZXMgc29tZSByb29tIGZvciB1c2luZyB0aGUgdmFyaWFibGUgaW5hcHByb3ByaWF0ZWx5LikKKworICAgICAgaWYgKHN5bXRhYl92YXJpYWJsZV9wIChub2RlKSAmJiB2YXJwb29sIChub2RlKS0+ZmluYWxpemVkKQorICAgICAgICB2YXJwb29sX2FuYWx5emVfbm9kZSAodmFycG9vbCAobm9kZSkpOworCisgICAgYmVjb21lcworCisgICAgICB2YXJwb29sX25vZGUgKnZub2RlID0gZHluX2Nhc3QgPHZhcnBvb2xfbm9kZT4gKG5vZGUpOworICAgICAgaWYgKHZub2RlICYmIHZub2RlLT5maW5hbGl6ZWQpCisgICAgICAgIHZhcnBvb2xfYW5hbHl6ZV9ub2RlICh2bm9kZSk7CisKKyAgICBOb3RlIHRoYXQgd2UgaGF2ZSBjb252ZXJ0ZWQgdHdvIHNldHMgb2YgYXNzZXJ0aW9ucyBpbiB0aGUgY2FsbHMgdG8gdmFycG9vbAorICAgIGludG8gc2FmZSBhbmQgZWZmaWNpZW50IHVzZSBvZiBhIHZhcmlhYmxlLgorCisKK0lmIHlvdSB1c2UgdGhlc2UgZnVuY3Rpb25zIGFuZCBnZXQgYSAnaW5saW5lIGZ1bmN0aW9uIG5vdCBkZWZpbmVkJyBvciBhCisnbWlzc2luZyBzeW1ib2wnIGVycm9yIG1lc3NhZ2UgZm9yICdpc19hX2hlbHBlcjwuLi4uPjo6dGVzdCcsIGl0IG1lYW5zIHRoYXQKK3RoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHR5cGVzIGhhcyBub3QgYmVlbiBtYWRlLiAgU2VlIGJlbG93LgorCisKK0VYVEVORElORyBUSEUgR0VORVJJQyBUWVBFIEZBQ0lMSVRZCisKK0VhY2ggY29ubmVjdGlvbiBiZXR3ZWVuIHR5cGVzIG11c3QgYmUgbWFkZSBieSBkZWZpbmluZyBhIHNwZWNpYWxpemF0aW9uIG9mIHRoZQordGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9uICd0ZXN0JyBvZiB0aGUgdGVtcGxhdGUgY2xhc3MgJ2lzX2FfaGVscGVyJy4gIEZvcgorZXhhbXBsZSwKKworICB0ZW1wbGF0ZSA8PgorICB0ZW1wbGF0ZSA8PgorICBpbmxpbmUgYm9vbAorICBpc19hX2hlbHBlciA8Y2dyYXBoX25vZGU+Ojp0ZXN0IChzeW10YWJfbm9kZV9kZWYgKnApCisgIHsKKyAgICByZXR1cm4gcC0+c3ltYm9sLnR5cGUgPT0gU1lNVEFCX0ZVTkNUSU9OOworICB9CisKK0lmIGEgc2ltcGxlIHJlaW50ZXJwcmV0X2Nhc3QgYmV0d2VlbiB0aGUgcG9pbnRlciB0eXBlcyBpcyBpbmNvcnJlY3QsIHRoZW4geW91CittdXN0IGFsc28gc3BlY2lhbGl6ZSB0aGUgdGVtcGxhdGUgbWVtYmVyIGZ1bmN0aW9uICdjYXN0Jy4gIEZhaWx1cmUgdG8gZG8gc28KK3doZW4gbmVlZGVkIG1heSByZXN1bHQgaW4gYSBjcmFzaC4gIEZvciBleGFtcGxlLAorCisgIHRlbXBsYXRlIDw+CisgIHRlbXBsYXRlIDw+CisgIGlubGluZSBib29sCisgIGlzX2FfaGVscGVyIDxjZ3JhcGhfbm9kZT46OmNhc3QgKHN5bXRhYl9ub2RlX2RlZiAqcCkKKyAgeworICAgIHJldHVybiAmcC0+eF9mdW5jdGlvbjsKKyAgfQorCisqLworCisjaWZuZGVmIEdDQ19JU19BX0gKKyNkZWZpbmUgR0NDX0lTX0FfSAorCisvKiBBIGdlbmVyaWMgdHlwZSBjb252ZXJzaW9uIGludGVybmFsIGhlbHBlciBjbGFzcy4gICovCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IGlzX2FfaGVscGVyCit7CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICBzdGF0aWMgaW5saW5lIGJvb2wgdGVzdCAoVSAqcCk7CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICBzdGF0aWMgaW5saW5lIFQgKmNhc3QgKFUgKnApOworfTsKKworLyogTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBkbyBub3QgZGVmaW5lIHRoZSAndGVzdCcgbWVtYmVyIHRlbXBsYXRlLiAgTm90CisgICBkb2luZyBzbyB3aWxsIHJlc3VsdCBpbiBhIGJ1aWxkLXRpbWUgZXJyb3IgZm9yIHR5cGUgcmVsYXRpb25zaGlwcyB0aGF0IGhhdmUKKyAgIG5vdCBiZWVuIGRlZmluZWQsIHJhdGhlciB0aGFuIGEgcnVuLXRpbWUgZXJyb3IuICBTZWUgdGhlIGRpc2N1c3Npb24gYWJvdmUKKyAgIGZvciB3aGVuIHRvIGRlZmluZSB0aGlzIG1lbWJlci4gICovCisKKy8qIFRoaXMgaXMgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIGNhc3RpbmcgZnJvbSBvbmUgdHlwZSB0byBhbm90aGVyLgorICAgRG8gbm90IHVzZSB0aGlzIHJvdXRpbmUgZGlyZWN0bHk7IGl0IGlzIGFuIGludGVybmFsIGZ1bmN0aW9uLiAgU2VlIHRoZQorICAgZGlzY3Vzc2lvbiBhYm92ZSBmb3Igd2hlbiB0byBkZWZpbmUgdGhpcyBtZW1iZXIuICAqLworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3RlbXBsYXRlIDx0eXBlbmFtZSBVPgoraW5saW5lIFQgKgoraXNfYV9oZWxwZXIgPFQ+OjpjYXN0IChVICpwKQoreworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdCA8VCAqPiAocCk7Cit9CisKKworLyogVGhlIHB1YmxpYyBpbnRlcmZhY2UuICAqLworCisvKiBBIGdlbmVyaWMgdGVzdCBmb3IgYSB0eXBlIHJlbGF0aW9uc2hpcC4gIFNlZSB0aGUgZGlzY3Vzc2lvbiBhYm92ZSBmb3Igd2hlbgorICAgdG8gdXNlIHRoaXMgZnVuY3Rpb24uICBUaGUgcXVlc3Rpb24gYW5zd2VyZWQgaXMgIklzIHR5cGUgVCBhIGRlcml2ZWQgdHlwZSBvZgorICAgdHlwZSBVPyIuICAqLworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2lubGluZSBib29sCitpc19hIChVICpwKQoreworICByZXR1cm4gaXNfYV9oZWxwZXI8VD46OnRlc3QgKHApOworfQorCisvKiBBIGdlbmVyaWMgY29udmVyc2lvbiBmcm9tIGEgYmFzZSB0eXBlIFUgdG8gYSBkZXJpdmVkIHR5cGUgVC4gIFNlZSB0aGUKKyAgIGRpc2N1c3Npb24gYWJvdmUgZm9yIHdoZW4gdG8gdXNlIHRoaXMgZnVuY3Rpb24uICAqLworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2lubGluZSBUICoKK2FzX2EgKFUgKnApCit7CisgIGdjY19hc3NlcnQgKGlzX2EgPFQ+IChwKSk7CisgIHJldHVybiBpc19hX2hlbHBlciA8VD46OmNhc3QgKHApOworfQorCisvKiBBIGdlbmVyaWMgY2hlY2tlZCBjb252ZXJzaW9uIGZyb20gYSBiYXNlIHR5cGUgVSB0byBhIGRlcml2ZWQgdHlwZSBULiAgU2VlCisgICB0aGUgZGlzY3Vzc2lvbiBhYm92ZSBmb3Igd2hlbiB0byB1c2UgdGhpcyBmdW5jdGlvbi4gICovCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgoraW5saW5lIFQgKgorZHluX2Nhc3QgKFUgKnApCit7CisgIGlmIChpc19hIDxUPiAocCkpCisgICAgcmV0dXJuIGlzX2FfaGVscGVyIDxUPjo6Y2FzdCAocCk7CisgIGVsc2UKKyAgICByZXR1cm4gc3RhdGljX2Nhc3QgPFQgKj4gKDApOworfQorCisjZW5kaWYgIC8qIEdDQ19JU19BX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvamF2YS9qYXZhLXRyZWUuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2phdmEvamF2YS10cmVlLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTJkNzhhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2phdmEvamF2YS10cmVlLmRlZgpAQCAtMCwwICsxLDM4IEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgIGV4dHJhIHRyZWUgY29kZXMgdXNlZCBieSBnY2ouCisgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworLyogU2hpZnQgcmlnaHQsIGxvZ2ljYWwuICovCitERUZUUkVFQ09ERSAoVVJTSElGVF9FWFBSLCAidXJzaGlmdF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogUmV0dXJuIC0xLCAwLCAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaXJzdCBhcmd1bWVudCBpcworICAgbGVzcywgZXF1YWwsIG9yIGdyZWF0ZXIgdG8gdGhlIHNlY29uZCBhcmd1bWVudC4gKi8KK0RFRlRSRUVDT0RFIChDT01QQVJFX0VYUFIsICJjb21wYXJlX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBTYW1lIGFzIENPTVBBUkVfRVhQUiwgYnV0IGlmIGVpdGhlciB2YWx1ZSBpcyBOYU4sIHRoZSByZXN1bHQgaXMgLTEuICovCitERUZUUkVFQ09ERSAoQ09NUEFSRV9MX0VYUFIsICJjb21wYXJlX2xfZXhwciIsIHRjY19iaW5hcnksIDIpCisvKiBTYW1lIGFzIENPTVBBUkVfRVhQUiwgYnV0IGlmIGVpdGhlciB2YWx1ZSBpcyBOYU4sIHRoZSByZXN1bHQgaXMgMS4gKi8KK0RFRlRSRUVDT0RFIChDT01QQVJFX0dfRVhQUiwgImNvbXBhcmVfZ19leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyoKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6YworRW5kOgorKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9sYW5naG9va3MuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9sYW5naG9va3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmMxYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2xhbmdob29rcy5oCkBAIC0wLDAgKzEsNDg5IEBACisvKiBUaGUgbGFuZ19ob29rcyBkYXRhIHN0cnVjdHVyZS4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfTEFOR19IT09LU19ICisjZGVmaW5lIEdDQ19MQU5HX0hPT0tTX0gKKworLyogRklYTUU6IFRoaXMgZmlsZSBzaG91bGQgYmUgI2luY2x1ZGUtZCBhZnRlciB0cmVlLmggKGZvciBlbnVtIHRyZWVfY29kZSkuICAqLworCitzdHJ1Y3QgZGlhZ25vc3RpY19pbmZvOworCitzdHJ1Y3QgZ2ltcGxpZnlfb21wX2N0eDsKKworc3RydWN0IGFycmF5X2Rlc2NyX2luZm87CisKKy8qIEEgcHJpbnQgaG9vayBmb3IgcHJpbnRfdHJlZSAoKS4gICovCit0eXBlZGVmIHZvaWQgKCpsYW5nX3ByaW50X3RyZWVfaG9vaykgKEZJTEUgKiwgdHJlZSwgaW50IGluZGVudCk7CisKK2VudW0gY2xhc3NpZnlfcmVjb3JkCisgIHsgUkVDT1JEX0lTX1NUUlVDVCwgUkVDT1JEX0lTX0NMQVNTLCBSRUNPUkRfSVNfSU5URVJGQUNFIH07CisKKy8qIFRoZSBmb2xsb3dpbmcgaG9va3MgYXJlIGRvY3VtZW50ZWQgaW4gbGFuZ2hvb2tzLmMuICBNdXN0IG5vdCBiZQorICAgTlVMTC4gICovCisKK3N0cnVjdCBsYW5nX2hvb2tzX2Zvcl90cmVlX2lubGluaW5nCit7CisgIGJvb2wgKCp2YXJfbW9kX3R5cGVfcCkgKHRyZWUsIHRyZWUpOworfTsKKworLyogVGhlIGZvbGxvd2luZyBob29rcyBhcmUgdXNlZCBieSB0cmVlLWR1bXAuYy4gICovCisKK3N0cnVjdCBsYW5nX2hvb2tzX2Zvcl90cmVlX2R1bXAKK3sKKyAgLyogRHVtcCBsYW5ndWFnZS1zcGVjaWZpYyBwYXJ0cyBvZiB0cmVlIG5vZGVzLiAgUmV0dXJucyBub256ZXJvIGlmIGl0CisgICAgIGRvZXMgbm90IHdhbnQgdGhlIHVzdWFsIGR1bXBpbmcgb2YgdGhlIHNlY29uZCBhcmd1bWVudC4gICovCisgIGJvb2wgKCpkdW1wX3RyZWUpICh2b2lkICosIHRyZWUpOworCisgIC8qIERldGVybWluZSB0eXBlIHF1YWxpZmllcnMgaW4gYSBsYW5ndWFnZS1zcGVjaWZpYyB3YXkuICAqLworICBpbnQgKCp0eXBlX3F1YWxzKSAoY29uc3RfdHJlZSk7Cit9OworCisvKiBIb29rcyByZWxhdGVkIHRvIHR5cGVzLiAgKi8KKworc3RydWN0IGxhbmdfaG9va3NfZm9yX3R5cGVzCit7CisgIC8qIFJldHVybiBhIG5ldyB0eXBlICh3aXRoIHRoZSBpbmRpY2F0ZWQgQ09ERSksIGRvaW5nIHdoYXRldmVyCisgICAgIGxhbmd1YWdlLXNwZWNpZmljIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQuICAqLworICB0cmVlICgqbWFrZV90eXBlKSAoZW51bSB0cmVlX2NvZGUpOworCisgIC8qIFJldHVybiB3aGF0IGtpbmQgb2YgUkVDT1JEX1RZUEUgdGhpcyBpcywgbWFpbmx5IGZvciBwdXJwb3NlcyBvZgorICAgICBkZWJ1ZyBpbmZvcm1hdGlvbi4gIElmIG5vdCBkZWZpbmVkLCByZWNvcmQgdHlwZXMgYXJlIGFzc3VtZWQgdG8KKyAgICAgYmUgc3RydWN0dXJlcy4gICovCisgIGVudW0gY2xhc3NpZnlfcmVjb3JkICgqY2xhc3NpZnlfcmVjb3JkKSAodHJlZSk7CisKKyAgLyogR2l2ZW4gTU9ERSBhbmQgVU5TSUdORURQLCByZXR1cm4gYSBzdWl0YWJsZSB0eXBlLXRyZWUgd2l0aCB0aGF0CisgICAgIG1vZGUuICAqLworICB0cmVlICgqdHlwZV9mb3JfbW9kZSkgKGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOworCisgIC8qIEdpdmVuIFBSRUNJU0lPTiBhbmQgVU5TSUdORURQLCByZXR1cm4gYSBzdWl0YWJsZSB0eXBlLXRyZWUgZm9yIGFuCisgICAgIGludGVnZXIgdHlwZSB3aXRoIGF0IGxlYXN0IHRoYXQgcHJlY2lzaW9uLiAgKi8KKyAgdHJlZSAoKnR5cGVfZm9yX3NpemUpICh1bnNpZ25lZCwgaW50KTsKKworICAvKiBUcnVlIGlmIHRoZSB0eXBlIGlzIGFuIGluc3RhbnRpYXRpb24gb2YgYSBnZW5lcmljIHR5cGUsCisgICAgIGUuZy4gQysrIHRlbXBsYXRlIGltcGxpY2l0IHNwZWNpYWxpemF0aW9ucy4gICovCisgIGJvb2wgKCpnZW5lcmljX3ApIChjb25zdF90cmVlKTsKKworICAvKiBSZXR1cm5zIHRoZSBUUkVFX1ZFQyBvZiBlbGVtZW50cyBvZiBhIGdpdmVuIGdlbmVyaWMgYXJndW1lbnQgcGFjay4gICovCisgIHRyZWUgKCpnZXRfYXJndW1lbnRfcGFja19lbGVtcykgKGNvbnN0X3RyZWUpOworCisgIC8qIEdpdmVuIGEgdHlwZSwgYXBwbHkgZGVmYXVsdCBwcm9tb3Rpb25zIHRvIHVubmFtZWQgZnVuY3Rpb24KKyAgICAgYXJndW1lbnRzIGFuZCByZXR1cm4gdGhlIG5ldyB0eXBlLiAgUmV0dXJuIHRoZSBzYW1lIHR5cGUgaWYgbm8KKyAgICAgY2hhbmdlLiAgUmVxdWlyZWQgYnkgYW55IGxhbmd1YWdlIHRoYXQgc3VwcG9ydHMgdmFyaWFkaWMKKyAgICAgYXJndW1lbnRzLiAgVGhlIGRlZmF1bHQgaG9vayBkaWVzLiAgKi8KKyAgdHJlZSAoKnR5cGVfcHJvbW90ZXNfdG8pICh0cmVlKTsKKworICAvKiBSZWdpc3RlciBUWVBFIGFzIGEgYnVpbHRpbiB0eXBlIHdpdGggdGhlIGluZGljYXRlZCBOQU1FLiAgVGhlCisgICAgIFRZUEUgaXMgcGxhY2VkIGluIHRoZSBvdXRlcm1vc3QgbGV4aWNhbCBzY29wZS4gIFRoZSBzZW1hbnRpY3MKKyAgICAgc2hvdWxkIGJlIGFuYWxvZ291cyB0bzoKKworICAgICAgIHR5cGVkZWYgVFlQRSBOQU1FOworCisgICAgIGluIEMuICBUaGUgZGVmYXVsdCBob29rIGlnbm9yZXMgdGhlIGRlY2xhcmF0aW9uLiAgKi8KKyAgdm9pZCAoKnJlZ2lzdGVyX2J1aWx0aW5fdHlwZSkgKHRyZWUsIGNvbnN0IGNoYXIgKik7CisKKyAgLyogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBpbiB0cmVlLmMgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBmb3IKKyAgICAgaW52YWxpZCB1c2Ugb2YgYW4gaW5jb21wbGV0ZSB0eXBlLiAgVkFMVUUgaXMgdGhlIGV4cHJlc3Npb24gdGhhdAorICAgICB3YXMgdXNlZCAob3IgMCBpZiB0aGF0IGlzbid0IGtub3duKSBhbmQgVFlQRSBpcyB0aGUgdHlwZSB0aGF0IHdhcworICAgICBpbnZhbGlkLiAgKi8KKyAgdm9pZCAoKmluY29tcGxldGVfdHlwZV9lcnJvcikgKGNvbnN0X3RyZWUgdmFsdWUsIGNvbnN0X3RyZWUgdHlwZSk7CisKKyAgLyogQ2FsbGVkIGZyb20gYXNzaWduX3RlbXAgdG8gcmV0dXJuIHRoZSBtYXhpbXVtIHNpemUsIGlmIHRoZXJlIGlzIG9uZSwKKyAgICAgZm9yIGEgdHlwZS4gICovCisgIHRyZWUgKCptYXhfc2l6ZSkgKGNvbnN0X3RyZWUpOworCisgIC8qIFJlZ2lzdGVyIGxhbmd1YWdlIHNwZWNpZmljIHR5cGUgc2l6ZSB2YXJpYWJsZXMgYXMgcG90ZW50aWFsbHkgT3Blbk1QCisgICAgIGZpcnN0cHJpdmF0ZSB2YXJpYWJsZXMuICAqLworICB2b2lkICgqb21wX2ZpcnN0cHJpdmF0aXplX3R5cGVfc2l6ZXMpIChzdHJ1Y3QgZ2ltcGxpZnlfb21wX2N0eCAqLCB0cmVlKTsKKworICAvKiBSZXR1cm4gVFJVRSBpZiBUWVBFMSBhbmQgVFlQRTIgYXJlIGlkZW50aWNhbCBmb3IgdHlwZSBoYXNoaW5nIHB1cnBvc2VzLgorICAgICBDYWxsZWQgb25seSBhZnRlciBkb2luZyBhbGwgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgY2hlY2tzLgorICAgICBBdCBwcmVzZW50LCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gYm90aCBUWVBFMSBhbmQgVFlQRTIgYXJlCisgICAgIEZVTkNUSU9OX1RZUEVzLiAgKi8KKyAgYm9vbCAoKnR5cGVfaGFzaF9lcSkgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworCisgIC8qIFJldHVybiBUUlVFIGlmIFRZUEUgdXNlcyBhIGhpZGRlbiBkZXNjcmlwdG9yIGFuZCBmaWxscyBpbiBpbmZvcm1hdGlvbgorICAgICBmb3IgdGhlIGRlYnVnZ2VyIGFib3V0IHRoZSBhcnJheSBib3VuZHMsIHN0cmlkZXMsIGV0Yy4gICovCisgIGJvb2wgKCpnZXRfYXJyYXlfZGVzY3JfaW5mbykgKGNvbnN0X3RyZWUsIHN0cnVjdCBhcnJheV9kZXNjcl9pbmZvICopOworCisgIC8qIEZpbGwgaW4gaW5mb3JtYXRpb24gZm9yIHRoZSBkZWJ1Z2dlciBhYm91dCB0aGUgYm91bmRzIG9mIFRZUEUuICAqLworICB2b2lkICgqZ2V0X3N1YnJhbmdlX2JvdW5kcykgKGNvbnN0X3RyZWUsIHRyZWUgKiwgdHJlZSAqKTsKKworICAvKiBBIHR5cGUgZGVzY3JpcHRpdmUgb2YgVFlQRSdzIGNvbXBsZXggbGF5b3V0IGdlbmVyYXRlZCB0byBoZWxwIHRoZQorICAgICBkZWJ1Z2dlciB0byBkZWNvZGUgdmFyaWFibGUtbGVuZ3RoIG9yIHNlbGYtcmVmZXJlbnRpYWwgY29uc3RydWN0cy4KKyAgICAgVGhpcyBpcyBvbmx5IHVzZWQgZm9yIHRoZSBBVF9HTkFUX2Rlc2NyaXB0aXZlX3R5cGUgRFdBUkYgYXR0cmlidXRlLiAgKi8KKyAgdHJlZSAoKmRlc2NyaXB0aXZlX3R5cGUpIChjb25zdF90cmVlKTsKKworICAvKiBJZiB3ZSByZXF1ZXN0ZWQgYSBwb2ludGVyIHRvIGEgdmVjdG9yLCBidWlsZCB1cCB0aGUgcG9pbnRlcnMgdGhhdAorICAgICB3ZSBzdHJpcHBlZCBvZmYgd2hpbGUgbG9va2luZyBmb3IgdGhlIGlubmVyIHR5cGUuICBTaW1pbGFybHkgZm9yCisgICAgIHJldHVybiB2YWx1ZXMgZnJvbSBmdW5jdGlvbnMuICBUaGUgYXJndW1lbnQgVFlQRSBpcyB0aGUgdG9wIG9mIHRoZQorICAgICBjaGFpbiwgYW5kIEJPVFRPTSBpcyB0aGUgbmV3IHR5cGUgd2hpY2ggd2Ugd2lsbCBwb2ludCB0by4gICovCisgIHRyZWUgKCpyZWNvbnN0cnVjdF9jb21wbGV4X3R5cGUpICh0cmVlLCB0cmVlKTsKK307CisKKy8qIExhbmd1YWdlIGhvb2tzIHJlbGF0ZWQgdG8gZGVjbHMgYW5kIHRoZSBzeW1ib2wgdGFibGUuICAqLworCitzdHJ1Y3QgbGFuZ19ob29rc19mb3JfZGVjbHMKK3sKKyAgLyogUmV0dXJuIHRydWUgaWYgd2UgYXJlIGluIHRoZSBnbG9iYWwgYmluZGluZyBsZXZlbC4gIFRoaXMgaG9vayBpcyByZWFsbHkKKyAgICAgbmVlZGVkIG9ubHkgaWYgdGhlIGxhbmd1YWdlIHN1cHBvcnRzIHZhcmlhYmxlLXNpemVkIHR5cGVzIGF0IHRoZSBnbG9iYWwKKyAgICAgbGV2ZWwsIGkuZS4gZGVjbGFyZWQgb3V0c2lkZSBzdWJwcm9ncmFtcy4gICovCisgIGJvb2wgKCpnbG9iYWxfYmluZGluZ3NfcCkgKHZvaWQpOworCisgIC8qIEZ1bmN0aW9uIHRvIGFkZCBhIGRlY2wgdG8gdGhlIGN1cnJlbnQgc2NvcGUgbGV2ZWwuICBUYWtlcyBvbmUKKyAgICAgYXJndW1lbnQsIGEgZGVjbCB0byBhZGQuICBSZXR1cm5zIHRoYXQgZGVjbCwgb3IsIGlmIHRoZSBzYW1lCisgICAgIHN5bWJvbCBpcyBhbHJlYWR5IGRlY2xhcmVkLCBtYXkgcmV0dXJuIGEgZGlmZmVyZW50IGRlY2wgZm9yIHRoYXQKKyAgICAgbmFtZS4gICovCisgIHRyZWUgKCpwdXNoZGVjbCkgKHRyZWUpOworCisgIC8qIFJldHVybnMgdGhlIGNoYWluIG9mIGRlY2xzIHNvIGZhciBpbiB0aGUgY3VycmVudCBzY29wZSBsZXZlbC4gICovCisgIHRyZWUgKCpnZXRkZWNscykgKHZvaWQpOworCisgIC8qIFJldHVybnMgdHJ1ZSBpZiBERUNMIGlzIGV4cGxpY2l0IG1lbWJlciBmdW5jdGlvbi4gICovCisgIGJvb2wgKCpmdW5jdGlvbl9kZWNsX2V4cGxpY2l0X3ApICh0cmVlKTsKKworICAvKiBSZXR1cm5zIFRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyBhIGdlbmVyaWMgcGFyYW1ldGVyIGRlY2wKKyAgICAgb2YgYSBnZW5lcmljIHR5cGUsIGUuZyBhIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFtZXRlciBmb3IgdGhlIEMrKyBGRS4gICovCisgIGJvb2wgKCpnZW5lcmljX2dlbmVyaWNfcGFyYW1ldGVyX2RlY2xfcCkgKGNvbnN0X3RyZWUpOworCisgIC8qIERldGVybWluZSBpZiBhIGZ1bmN0aW9uIHBhcmFtZXRlciBnb3QgZXhwYW5kZWQgZnJvbSBhCisgICAgIGZ1bmN0aW9uIHBhcmFtZXRlciBwYWNrLiAgKi8KKyAgYm9vbCAoKmZ1bmN0aW9uX3Bhcm1fZXhwYW5kZWRfZnJvbV9wYWNrX3ApICh0cmVlLCB0cmVlKTsKKworICAvKiBSZXR1cm5zIHRoZSBnZW5lcmljIGRlY2xhcmF0aW9uIG9mIGEgZ2VuZXJpYyBmdW5jdGlvbiBpbnN0YW50aWF0aW9ucy4gICovCisgIHRyZWUgKCpnZXRfZ2VuZXJpY19mdW5jdGlvbl9kZWNsKSAoY29uc3RfdHJlZSk7CisKKyAgLyogUmV0dXJucyB0cnVlIHdoZW4gd2Ugc2hvdWxkIHdhcm4gZm9yIGFuIHVudXNlZCBnbG9iYWwgREVDTC4KKyAgICAgV2Ugd2lsbCBhbHJlYWR5IGhhdmUgY2hlY2tlZCB0aGF0IGl0IGhhcyBzdGF0aWMgYmluZGluZy4gICovCisgIGJvb2wgKCp3YXJuX3VudXNlZF9nbG9iYWwpIChjb25zdF90cmVlKTsKKworICAvKiBPYnRhaW4gYSBsaXN0IG9mIGdsb2JhbHMgYW5kIGRvIGZpbmFsIG91dHB1dCBvbiB0aGVtIGF0IGVuZAorICAgICBvZiBjb21waWxhdGlvbiAqLworICB2b2lkICgqZmluYWxfd3JpdGVfZ2xvYmFscykgKHZvaWQpOworCisgIC8qIFRydWUgaWYgdGhpcyBkZWNsIG1heSBiZSBjYWxsZWQgdmlhIGEgc2liY2FsbC4gICovCisgIGJvb2wgKCpva19mb3Jfc2liY2FsbCkgKGNvbnN0X3RyZWUpOworCisgIC8qIFRydWUgaWYgT3Blbk1QIHNob3VsZCBwcml2YXRpemUgd2hhdCB0aGlzIERFQ0wgcG9pbnRzIHRvIHJhdGhlcgorICAgICB0aGFuIHRoZSBERUNMIGl0c2VsZi4gICovCisgIGJvb2wgKCpvbXBfcHJpdmF0aXplX2J5X3JlZmVyZW5jZSkgKGNvbnN0X3RyZWUpOworCisgIC8qIFJldHVybiBzaGFyaW5nIGtpbmQgaWYgT3Blbk1QIHNoYXJpbmcgYXR0cmlidXRlIG9mIERFQ0wgaXMKKyAgICAgcHJlZGV0ZXJtaW5lZCwgT01QX0NMQVVTRV9ERUZBVUxUX1VOU1BFQ0lGSUVEIG90aGVyd2lzZS4gICovCisgIGVudW0gb21wX2NsYXVzZV9kZWZhdWx0X2tpbmQgKCpvbXBfcHJlZGV0ZXJtaW5lZF9zaGFyaW5nKSAodHJlZSk7CisKKyAgLyogUmV0dXJuIGRlY2wgdGhhdCBzaG91bGQgYmUgcmVwb3J0ZWQgZm9yIERFRkFVTFQoTk9ORSkgZmFpbHVyZQorICAgICBkaWFnbm9zdGljcy4gIFVzdWFsbHkgdGhlIERFQ0wgcGFzc2VkIGluLiAgKi8KKyAgdHJlZSAoKm9tcF9yZXBvcnRfZGVjbCkgKHRyZWUpOworCisgIC8qIFJldHVybiB0cnVlIGlmIERFQ0wncyBERUNMX1ZBTFVFX0VYUFIgKGlmIGFueSkgc2hvdWxkIGJlCisgICAgIGRpc3JlZ2FyZGVkIGluIE9wZW5NUCBjb25zdHJ1Y3QsIGJlY2F1c2UgaXQgaXMgZ29pbmcgdG8gYmUKKyAgICAgcmVtYXBwZWQgZHVyaW5nIE9wZW5NUCBsb3dlcmluZy4gIFNIQVJFRCBpcyB0cnVlIGlmIERFQ0wKKyAgICAgaXMgZ29pbmcgdG8gYmUgc2hhcmVkLCBmYWxzZSBpZiBpdCBpcyBnb2luZyB0byBiZSBwcml2YXRpemVkLiAgKi8KKyAgYm9vbCAoKm9tcF9kaXNyZWdhcmRfdmFsdWVfZXhwcikgKHRyZWUsIGJvb2wpOworCisgIC8qIFJldHVybiB0cnVlIGlmIERFQ0wgdGhhdCBpcyBzaGFyZWQgaWZmIFNIQVJFRCBpcyB0cnVlIHNob3VsZAorICAgICBiZSBwdXQgaW50byBPTVBfQ0xBVVNFX1BSSVZBVEVfREVCVUcuICAqLworICBib29sICgqb21wX3ByaXZhdGVfZGVidWdfY2xhdXNlKSAodHJlZSwgYm9vbCk7CisKKyAgLyogUmV0dXJuIHRydWUgaWYgREVDTCBpbiBwcml2YXRlIGNsYXVzZSBuZWVkcworICAgICBPTVBfQ0xBVVNFX1BSSVZBVEVfT1VURVJfUkVGIG9uIHRoZSBwcml2YXRlIGNsYXVzZS4gICovCisgIGJvb2wgKCpvbXBfcHJpdmF0ZV9vdXRlcl9yZWYpICh0cmVlKTsKKworICAvKiBCdWlsZCBhbmQgcmV0dXJuIGNvZGUgZm9yIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgREVDTCBpbgorICAgICByZXNwb25zZSB0byBDTEFVU0UuICBPVVRFUiBpcyBjb3JyZXNwb25kaW5nIG91dGVyIHJlZ2lvbidzCisgICAgIHZhcmlhYmxlIGlmIG5lZWRlZC4gIFJldHVybiBOVUxMIGlmIG5vdGhpbmcgdG8gYmUgZG9uZS4gICovCisgIHRyZWUgKCpvbXBfY2xhdXNlX2RlZmF1bHRfY3RvcikgKHRyZWUgY2xhdXNlLCB0cmVlIGRlY2wsIHRyZWUgb3V0ZXIpOworCisgIC8qIEJ1aWxkIGFuZCByZXR1cm4gY29kZSBmb3IgYSBjb3B5IGNvbnN0cnVjdG9yIGZyb20gU1JDIHRvIERTVC4gICovCisgIHRyZWUgKCpvbXBfY2xhdXNlX2NvcHlfY3RvcikgKHRyZWUgY2xhdXNlLCB0cmVlIGRzdCwgdHJlZSBzcmMpOworCisgIC8qIFNpbWlsYXJseSwgZXhjZXB0IHVzZSBhbiBhc3NpZ25tZW50IG9wZXJhdG9yIGluc3RlYWQuICAqLworICB0cmVlICgqb21wX2NsYXVzZV9hc3NpZ25fb3ApICh0cmVlIGNsYXVzZSwgdHJlZSBkc3QsIHRyZWUgc3JjKTsKKworICAvKiBCdWlsZCBhbmQgcmV0dXJuIGNvZGUgZGVzdHJ1Y3RpbmcgREVDTC4gIFJldHVybiBOVUxMIGlmIG5vdGhpbmcKKyAgICAgdG8gYmUgZG9uZS4gICovCisgIHRyZWUgKCpvbXBfY2xhdXNlX2R0b3IpICh0cmVlIGNsYXVzZSwgdHJlZSBkZWNsKTsKKworICAvKiBEbyBsYW5ndWFnZSBzcGVjaWZpYyBjaGVja2luZyBvbiBhbiBpbXBsaWNpdGx5IGRldGVybWluZWQgY2xhdXNlLiAgKi8KKyAgdm9pZCAoKm9tcF9maW5pc2hfY2xhdXNlKSAodHJlZSBjbGF1c2UpOworfTsKKworLyogTGFuZ3VhZ2UgaG9va3MgcmVsYXRlZCB0byBMVE8gc2VyaWFsaXphdGlvbi4gICovCisKK3N0cnVjdCBsYW5nX2hvb2tzX2Zvcl9sdG8KK3sKKyAgLyogQmVnaW4gYSBuZXcgTFRPIHNlY3Rpb24gbmFtZWQgTkFNRS4gICovCisgIHZvaWQgKCpiZWdpbl9zZWN0aW9uKSAoY29uc3QgY2hhciAqbmFtZSk7CisKKyAgLyogV3JpdGUgREFUQSBvZiBsZW5ndGggTEVOIHRvIHRoZSBjdXJyZW50bHkgb3BlbiBMVE8gc2VjdGlvbi4gIEJMT0NLIGlzIGEKKyAgICAgcG9pbnRlciB0byB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBjb250YWluaW5nIERBVEEuICBUaGUKKyAgICAgYXBwZW5kX2RhdGEgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgICAgbmVlZGVkLiAgKi8KKyAgdm9pZCAoKmFwcGVuZF9kYXRhKSAoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbiwgdm9pZCAqYmxvY2spOworCisgIC8qIEVuZCB0aGUgcHJldmlvdXNseSBiZWd1biBMVE8gc2VjdGlvbi4gICovCisgIHZvaWQgKCplbmRfc2VjdGlvbikgKHZvaWQpOworfTsKKworLyogTGFuZ3VhZ2Utc3BlY2lmaWMgaG9va3MuICBTZWUgbGFuZ2hvb2tzLWRlZi5oIGZvciBkZWZhdWx0cy4gICovCisKK3N0cnVjdCBsYW5nX2hvb2tzCit7CisgIC8qIFN0cmluZyBpZGVudGlmeWluZyB0aGUgZnJvbnQgZW5kLiAgZS5nLiAiR05VIEMrKyIuICAqLworICBjb25zdCBjaGFyICpuYW1lOworCisgIC8qIHNpemVvZiAoc3RydWN0IGxhbmdfaWRlbnRpZmllciksIHNvIG1ha2Vfbm9kZSAoKSBjcmVhdGVzCisgICAgIGlkZW50aWZpZXIgbm9kZXMgbG9uZyBlbm91Z2ggZm9yIHRoZSBsYW5ndWFnZS1zcGVjaWZpYyBzbG90cy4gICovCisgIHNpemVfdCBpZGVudGlmaWVyX3NpemU7CisKKyAgLyogUmVtb3ZlIGFueSBwYXJ0cyBvZiB0aGUgdHJlZSB0aGF0IGFyZSB1c2VkIG9ubHkgYnkgdGhlIEZFLiAqLworICB2b2lkICgqZnJlZV9sYW5nX2RhdGEpICh0cmVlKTsKKworICAvKiBEZXRlcm1pbmVzIHRoZSBzaXplIG9mIGFueSBsYW5ndWFnZS1zcGVjaWZpYyB0Y2NfY29uc3RhbnQgb3IKKyAgICAgdGNjX2V4Y2VwdGlvbmFsIG5vZGVzLiAgU2luY2UgaXQgaXMgY2FsbGVkIGZyb20gbWFrZV9ub2RlLCB0aGUKKyAgICAgb25seSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaXMgdGhlIHRyZWUgY29kZS4gIEV4cGVjdGVkIHRvIGRpZQorICAgICBvbiB1bnJlY29nbml6ZWQgY29kZXMuICAqLworICBzaXplX3QgKCp0cmVlX3NpemUpIChlbnVtIHRyZWVfY29kZSk7CisKKyAgLyogUmV0dXJuIHRoZSBsYW5ndWFnZSBtYXNrIHVzZWQgZm9yIGNvbnZlcnRpbmcgYXJndiBpbnRvIGEgc2VxdWVuY2UKKyAgICAgb2Ygb3B0aW9ucy4gICovCisgIHVuc2lnbmVkIGludCAoKm9wdGlvbl9sYW5nX21hc2spICh2b2lkKTsKKworICAvKiBJbml0aWFsaXplIHZhcmlhYmxlcyBpbiBhbiBvcHRpb25zIHN0cnVjdHVyZS4gICovCisgIHZvaWQgKCppbml0X29wdGlvbnNfc3RydWN0KSAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzKTsKKworICAvKiBBZnRlciB0aGUgaW5pdGlhbGl6ZV9kaWFnbm9zdGljcyBob29rIGlzIGNhbGxlZCwgZG8gYW55IHNpbXBsZQorICAgICBpbml0aWFsaXphdGlvbiBuZWVkZWQgYmVmb3JlIGFueSBjYWxscyB0byBoYW5kbGVfb3B0aW9uLCBvdGhlcgorICAgICB0aGFuIHRoYXQgZG9uZSBieSB0aGUgaW5pdF9vcHRpb25zX3N0cnVjdCBob29rLiAgKi8KKyAgdm9pZCAoKmluaXRfb3B0aW9ucykgKHVuc2lnbmVkIGludCBkZWNvZGVkX29wdGlvbnNfY291bnQsCisJCQlzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gKmRlY29kZWRfb3B0aW9ucyk7CisKKyAgLyogQ2FsbGJhY2sgdXNlZCB0byBwZXJmb3JtIGxhbmd1YWdlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZvciB0aGUKKyAgICAgZ2xvYmFsIGRpYWdub3N0aWMgY29udGV4dCBzdHJ1Y3R1cmUuICAqLworICB2b2lkICgqaW5pdGlhbGl6ZV9kaWFnbm9zdGljcykgKGRpYWdub3N0aWNfY29udGV4dCAqKTsKKworICAvKiBSZXR1cm4gdHJ1ZSBpZiBhIHdhcm5pbmcgc2hvdWxkIGJlIGdpdmVuIGFib3V0IG9wdGlvbiBPUFRJT04sCisgICAgIHdoaWNoIGlzIGZvciB0aGUgd3JvbmcgbGFuZ3VhZ2UsIGZhbHNlIGlmIGl0IHNob3VsZCBiZSBxdWlldGx5CisgICAgIGlnbm9yZWQuICAqLworICBib29sICgqY29tcGxhaW5fd3JvbmdfbGFuZ19wKSAoY29uc3Qgc3RydWN0IGNsX29wdGlvbiAqb3B0aW9uKTsKKworICAvKiBIYW5kbGUgdGhlIHN3aXRjaCBDT0RFLCB3aGljaCBoYXMgcmVhbCB0eXBlIGVudW0gb3B0X2NvZGUgZnJvbQorICAgICBvcHRpb25zLmguICBJZiB0aGUgc3dpdGNoIHRha2VzIGFuIGFyZ3VtZW50LCBpdCBpcyBwYXNzZWQgaW4gQVJHCisgICAgIHdoaWNoIHBvaW50cyB0byBwZXJtYW5lbnQgc3RvcmFnZS4gIFRoZSBoYW5kbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICAgICBjaGVja2luZyB3aGV0aGVyIEFSRyBpcyBOVUxMLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCBubyBhcmd1bWVudAorICAgICB3YXMgaW4gZmFjdCBzdXBwbGllZC4gIEZvciAtZiBhbmQgLVcgc3dpdGNoZXMsIFZBTFVFIGlzIDEgb3IgMAorICAgICBmb3IgdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmb3JtcyByZXNwZWN0aXZlbHkuICBIQU5ETEVSUyBzaG91bGQKKyAgICAgYmUgcGFzc2VkIHRvIGFueSByZWN1cnNpdmUgaGFuZGxlX29wdGlvbiBjYWxscy4gIExPQyBpcyB0aGUKKyAgICAgbG9jYXRpb24gb2YgdGhlIG9wdGlvbi4KKworICAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3dpdGNoIGlzIHZhbGlkLCBmYWxzZSBpZiBpbnZhbGlkLiAgKi8KKyAgYm9vbCAoKmhhbmRsZV9vcHRpb24pIChzaXplX3QgY29kZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUsIGludCBraW5kLAorCQkJIGxvY2F0aW9uX3QgbG9jLAorCQkJIGNvbnN0IHN0cnVjdCBjbF9vcHRpb25faGFuZGxlcnMgKmhhbmRsZXJzKTsKKworICAvKiBDYWxsZWQgd2hlbiBhbGwgY29tbWFuZCBsaW5lIG9wdGlvbnMgaGF2ZSBiZWVuIHBhcnNlZCB0byBhbGxvdworICAgICBmdXJ0aGVyIHByb2Nlc3NpbmcgYW5kIGluaXRpYWxpemF0aW9uCisKKyAgICAgU2hvdWxkIHJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoYXQgYSBjb21waWxlciBiYWNrLWVuZCBpcworICAgICBub3QgcmVxdWlyZWQsIHN1Y2ggYXMgd2l0aCB0aGUgLUUgb3B0aW9uLgorCisgICAgIElmIGVycm9yY291bnQgaXMgbm9uemVybyBhZnRlciB0aGlzIGNhbGwgdGhlIGNvbXBpbGVyIGV4aXRzCisgICAgIGltbWVkaWF0ZWx5IGFuZCB0aGUgZmluaXNoIGhvb2sgaXMgbm90IGNhbGxlZC4gICovCisgIGJvb2wgKCpwb3N0X29wdGlvbnMpIChjb25zdCBjaGFyICoqKTsKKworICAvKiBDYWxsZWQgYWZ0ZXIgcG9zdF9vcHRpb25zIHRvIGluaXRpYWxpemUgdGhlIGZyb250IGVuZC4gIFJldHVybgorICAgICBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IG5vIGZ1cnRoZXIgY29tcGlsYXRpb24gYmUgcGVyZm9ybWVkLCBpbgorICAgICB3aGljaCBjYXNlIHRoZSBmaW5pc2ggaG9vayBpcyBjYWxsZWQgaW1tZWRpYXRlbHkuICAqLworICBib29sICgqaW5pdCkgKHZvaWQpOworCisgIC8qIENhbGxlZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLCBhcyBhIGZpbmFsaXplci4gICovCisgIHZvaWQgKCpmaW5pc2gpICh2b2lkKTsKKworICAvKiBQYXJzZXMgdGhlIGVudGlyZSBmaWxlLiAgKi8KKyAgdm9pZCAoKnBhcnNlX2ZpbGUpICh2b2lkKTsKKworICAvKiBEZXRlcm1pbmVzIGlmIGl0J3Mgb2sgZm9yIGEgZnVuY3Rpb24gdG8gaGF2ZSBubyBub3JldHVybiBhdHRyaWJ1dGUuICAqLworICBib29sICgqbWlzc2luZ19ub3JldHVybl9va19wKSAodHJlZSk7CisKKyAgLyogQ2FsbGVkIHRvIG9idGFpbiB0aGUgYWxpYXMgc2V0IHRvIGJlIHVzZWQgZm9yIGFuIGV4cHJlc3Npb24gb3IgdHlwZS4KKyAgICAgUmV0dXJucyAtMSBpZiB0aGUgbGFuZ3VhZ2UgZG9lcyBub3RoaW5nIHNwZWNpYWwgZm9yIGl0LiAgKi8KKyAgYWxpYXNfc2V0X3R5cGUgKCpnZXRfYWxpYXNfc2V0KSAodHJlZSk7CisKKyAgLyogRnVuY3Rpb24gdG8gZmluaXNoIGhhbmRsaW5nIGFuIGluY29tcGxldGUgZGVjbCBhdCB0aGUgZW5kIG9mCisgICAgIGNvbXBpbGF0aW9uLiAgRGVmYXVsdCBob29rIGlzIGRvZXMgbm90aGluZy4gICovCisgIHZvaWQgKCpmaW5pc2hfaW5jb21wbGV0ZV9kZWNsKSAodHJlZSk7CisKKyAgLyogUmVwbGFjZSB0aGUgREVDTF9MQU5HX1NQRUNJRklDIGRhdGEsIHdoaWNoIG1heSBiZSBOVUxMLCBvZiB0aGUKKyAgICAgREVDTF9OT0RFIHdpdGggYSBuZXdseSBHQy1hbGxvY2F0ZWQgY29weS4gICovCisgIHZvaWQgKCpkdXBfbGFuZ19zcGVjaWZpY19kZWNsKSAodHJlZSk7CisKKyAgLyogU2V0IHRoZSBERUNMX0FTU0VNQkxFUl9OQU1FIGZvciBhIG5vZGUuICBJZiBpdCBpcyB0aGUgc29ydCBvZgorICAgICB0aGluZyB0aGF0IHRoZSBhc3NlbWJsZXIgc2hvdWxkIHRhbGsgYWJvdXQsIHNldAorICAgICBERUNMX0FTU0VNQkxFUl9OQU1FIHRvIGFuIGFwcHJvcHJpYXRlIElERU5USUZJRVJfTk9ERS4KKyAgICAgT3RoZXJ3aXNlLCBzZXQgaXQgdG8gdGhlIEVSUk9SX01BUktfTk9ERSB0byBlbnN1cmUgdGhhdCB0aGUKKyAgICAgYXNzZW1ibGVyIGRvZXMgbm90IHRhbGsgYWJvdXQgaXQuICAqLworICB2b2lkICgqc2V0X2RlY2xfYXNzZW1ibGVyX25hbWUpICh0cmVlKTsKKworICAvKiBUaGUgZnJvbnQgZW5kIGNhbiBhZGQgaXRzIG93biBzdGF0aXN0aWNzIHRvIC1mbWVtLXJlcG9ydCB3aXRoCisgICAgIHRoaXMgaG9vay4gIEl0IHNob3VsZCBvdXRwdXQgdG8gc3RkZXJyLiAgKi8KKyAgdm9pZCAoKnByaW50X3N0YXRpc3RpY3MpICh2b2lkKTsKKworICAvKiBDYWxsZWQgYnkgcHJpbnRfdHJlZSB3aGVuIHRoZXJlIGlzIGEgdHJlZSBvZiBjbGFzcyB0Y2NfZXhjZXB0aW9uYWwKKyAgICAgdGhhdCBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRpc3BsYXkuICAqLworICBsYW5nX3ByaW50X3RyZWVfaG9vayBwcmludF94bm9kZTsKKworICAvKiBDYWxsZWQgdG8gcHJpbnQgbGFuZ3VhZ2UtZGVwZW5kZW50IHBhcnRzIG9mIHRjY19kZWNsLCB0Y2NfdHlwZSwKKyAgICAgYW5kIElERU5USUZJRVJfTk9ERSBub2Rlcy4gICovCisgIGxhbmdfcHJpbnRfdHJlZV9ob29rIHByaW50X2RlY2w7CisgIGxhbmdfcHJpbnRfdHJlZV9ob29rIHByaW50X3R5cGU7CisgIGxhbmdfcHJpbnRfdHJlZV9ob29rIHByaW50X2lkZW50aWZpZXI7CisKKyAgLyogQ29tcHV0ZXMgdGhlIG5hbWUgdG8gdXNlIHRvIHByaW50IGEgZGVjbGFyYXRpb24uICBERUNMIGlzIHRoZQorICAgICBub24tTlVMTCBkZWNsYXJhdGlvbiBpbiBxdWVzdGlvbi4gIFZFUkJPU0lUWSBkZXRlcm1pbmVzIHdoYXQKKyAgICAgaW5mb3JtYXRpb24gd2lsbCBiZSBwcmludGVkOiAwOiBERUNMX05BTUUsIGRlbWFuZ2xlZCBhcworICAgICBuZWNlc3NhcnkuICAxOiBhbmQgc2NvcGUgaW5mb3JtYXRpb24uICAyOiBhbmQgYW55IG90aGVyCisgICAgIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcsIHN1Y2ggYXMgZnVuY3Rpb24gcGFyYW1ldGVyCisgICAgIHR5cGVzIGluIEMrKy4gIFRoZSBuYW1lIGlzIGluIHRoZSBpbnRlcm5hbCBjaGFyYWN0ZXIgc2V0IGFuZAorICAgICBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gdGhlIGxvY2FsZSBjaGFyYWN0ZXIgc2V0IG9mIGRpYWdub3N0aWNzLAorICAgICBvciB0byB0aGUgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQgZm9yIHN0cmluZ3Mgc3VjaCBhcworICAgICBfX1BSRVRUWV9GVU5DVElPTl9fLiAgKi8KKyAgY29uc3QgY2hhciAqKCpkZWNsX3ByaW50YWJsZV9uYW1lKSAodHJlZSBkZWNsLCBpbnQgdmVyYm9zaXR5KTsKKworICAvKiBDb21wdXRlcyB0aGUgZHdhcmYtMi8zIG5hbWUgZm9yIGEgdHJlZS4gIFZFUkJPU0lUWSBkZXRlcm1pbmVzIHdoYXQKKyAgICAgaW5mb3JtYXRpb24gd2lsbCBiZSBwcmludGVkOiAwOiBERUNMX05BTUUsIGRlbWFuZ2xlZCBhcworICAgICBuZWNlc3NhcnkuICAxOiBhbmQgc2NvcGUgaW5mb3JtYXRpb24uICAqLworICBjb25zdCBjaGFyICooKmR3YXJmX25hbWUpICh0cmVlLCBpbnQgdmVyYm9zaXR5KTsKKworICAvKiBUaGlzIGNvbXBhcmVzIHR3byB0eXBlcyBmb3IgZXF1aXZhbGVuY2UgKCJjb21wYXRpYmxlIiBpbiBDLWJhc2VkIGxhbmd1YWdlcykuCisgICAgIFRoaXMgcm91dGluZSBzaG91bGQgb25seSByZXR1cm4gMSBpZiBpdCBpcyBzdXJlLiAgSXQgc2hvdWxkIG5vdCBiZSB1c2VkCisgICAgIGluIGNvbnRleHRzIHdoZXJlIGVycm9uZW91c2x5IHJldHVybmluZyAwIGNhdXNlcyBwcm9ibGVtcy4gICovCisgIGludCAoKnR5cGVzX2NvbXBhdGlibGVfcCkgKHRyZWUgeCwgdHJlZSB5KTsKKworICAvKiBDYWxsZWQgYnkgcmVwb3J0X2Vycm9yX2Z1bmN0aW9uIHRvIHByaW50IG91dCBmdW5jdGlvbiBuYW1lLiAgKi8KKyAgdm9pZCAoKnByaW50X2Vycm9yX2Z1bmN0aW9uKSAoZGlhZ25vc3RpY19jb250ZXh0ICosIGNvbnN0IGNoYXIgKiwKKwkJCQlzdHJ1Y3QgZGlhZ25vc3RpY19pbmZvICopOworCisgIC8qIENvbnZlcnQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgaG9zdCdzIHRvIHRoZSB0YXJnZXQncyBjaGFyYWN0ZXIKKyAgICAgc2V0LiAgVGhlIGNoYXJhY3RlciBzaG91bGQgYmUgaW4gd2hhdCBDIGNhbGxzIHRoZSAiYmFzaWMgc291cmNlCisgICAgIGNoYXJhY3RlciBzZXQiIChyb3VnaGx5LCB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgZGVmaW5lZCBieSBwbGFpbgorICAgICBvbGQgQVNDSUkpLiAgVGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIHRoZSBjaGFyYWN0ZXIgdW5jaGFuZ2VkLAorICAgICB3aGljaCBpcyBjb3JyZWN0IGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gIE5vdGUgdGhhdCBib3RoIGFyZ3VtZW50CisgICAgIGFuZCByZXN1bHQgc2hvdWxkIGJlIHNpZ24tZXh0ZW5kZWQgdW5kZXIgLWZzaWduZWQtY2hhciwKKyAgICAgemVyby1leHRlbmRlZCB1bmRlciAtZm5vLXNpZ25lZC1jaGFyLiAgKi8KKyAgSE9TVF9XSURFX0lOVCAoKnRvX3RhcmdldF9jaGFyc2V0KSAoSE9TVF9XSURFX0lOVCk7CisKKyAgLyogUG9pbnRlcnMgdG8gbWFjaGluZS1pbmRlcGVuZGVudCBhdHRyaWJ1dGUgdGFibGVzLCBmb3IgZnJvbnQgZW5kcworICAgICB1c2luZyBhdHRyaWJzLmMuICBJZiBvbmUgaXMgTlVMTCwgaXQgaXMgaWdub3JlZC4gIFJlc3BlY3RpdmVseSwgYQorICAgICB0YWJsZSBvZiBhdHRyaWJ1dGVzIHNwZWNpZmljIHRvIHRoZSBsYW5ndWFnZSwgYSB0YWJsZSBvZgorICAgICBhdHRyaWJ1dGVzIGNvbW1vbiB0byB0d28gb3IgbW9yZSBsYW5ndWFnZXMgKHRvIGFsbG93IGVhc3kKKyAgICAgc2hhcmluZyksIGFuZCBhIHRhYmxlIG9mIGF0dHJpYnV0ZXMgZm9yIGNoZWNraW5nIGZvcm1hdHMuICAqLworICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgKmF0dHJpYnV0ZV90YWJsZTsKKyAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjICpjb21tb25fYXR0cmlidXRlX3RhYmxlOworICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgKmZvcm1hdF9hdHRyaWJ1dGVfdGFibGU7CisKKyAgc3RydWN0IGxhbmdfaG9va3NfZm9yX3RyZWVfaW5saW5pbmcgdHJlZV9pbmxpbmluZzsKKworICBzdHJ1Y3QgbGFuZ19ob29rc19mb3JfdHJlZV9kdW1wIHRyZWVfZHVtcDsKKworICBzdHJ1Y3QgbGFuZ19ob29rc19mb3JfZGVjbHMgZGVjbHM7CisKKyAgc3RydWN0IGxhbmdfaG9va3NfZm9yX3R5cGVzIHR5cGVzOworCisgIHN0cnVjdCBsYW5nX2hvb2tzX2Zvcl9sdG8gbHRvOworCisgIC8qIFJldHVybnMgdGhlIGdlbmVyaWMgcGFyYW1ldGVycyBvZiBhbiBpbnN0YW50aWF0aW9uIG9mCisgICAgIGEgZ2VuZXJpYyB0eXBlIG9yIGRlY2wsIGUuZy4gQysrIHRlbXBsYXRlIGluc3RhbnRpYXRpb24uICAqLworICB0cmVlICgqZ2V0X2lubmVybW9zdF9nZW5lcmljX3Bhcm1zKSAoY29uc3RfdHJlZSk7CisKKyAgLyogUmV0dXJucyB0aGUgVFJFRV9WRUMgb2YgYXJndW1lbnRzIG9mIGFuIGluc3RhbnRpYXRpb24KKyAgICAgb2YgYSBnZW5lcmljIHR5cGUgb2YgZGVjbCwgZS5nLiBDKysgdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4gICovCisgIHRyZWUgKCpnZXRfaW5uZXJtb3N0X2dlbmVyaWNfYXJncykgKGNvbnN0X3RyZWUpOworCisgIC8qIERldGVybWluZSBpZiBhIHRyZWUgaXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgcGFjay4gICovCisgIGJvb2wgKCpmdW5jdGlvbl9wYXJhbWV0ZXJfcGFja19wKSAoY29uc3RfdHJlZSk7CisKKyAgLyogUGVyZm9ybSBsYW5ndWFnZS1zcGVjaWZpYyBnaW1wbGlmaWNhdGlvbiBvbiB0aGUgYXJndW1lbnQuICBSZXR1cm5zIGFuCisgICAgIGVudW0gZ2ltcGxpZnlfc3RhdHVzLCB0aG91Z2ggd2UgY2FuJ3Qgc2VlIHRoYXQgdHlwZSBoZXJlLiAgKi8KKyAgaW50ICgqZ2ltcGxpZnlfZXhwcikgKHRyZWUgKiwgZ2ltcGxlX3NlcSAqLCBnaW1wbGVfc2VxICopOworCisgIC8qIERvIGxhbmd1YWdlIHNwZWNpZmljIHByb2Nlc3NpbmcgaW4gdGhlIGJ1aWx0aW4gZnVuY3Rpb24gREVDTCAgKi8KKyAgdHJlZSAoKmJ1aWx0aW5fZnVuY3Rpb24pICh0cmVlIGRlY2wpOworCisgIC8qIExpa2UgYnVpbHRpbl9mdW5jdGlvbiwgYnV0IG1ha2Ugc3VyZSB0aGUgc2NvcGUgaXMgdGhlIGV4dGVybmFsIHNjb3BlLgorICAgICBUaGlzIGlzIHVzZWQgdG8gZGVsYXkgcHV0dGluZyBpbiBiYWNrIGVuZCBidWlsdGluIGZ1bmN0aW9ucyB1bnRpbCB0aGUgSVNBCisgICAgIHRoYXQgZGVmaW5lcyB0aGUgYnVpbHRpbiBpcyBkZWNsYXJlZCB2aWEgZnVuY3Rpb24gc3BlY2lmaWMgdGFyZ2V0IG9wdGlvbnMsCisgICAgIHdoaWNoIGNhbiBzYXZlIG1lbW9yeSBmb3IgbWFjaGluZXMgbGlrZSB0aGUgeDg2XzY0IHRoYXQgaGF2ZSBtdWx0aXBsZQorICAgICBJU0FzLiAgSWYgdGhpcyBwb2ludHMgdG8gdGhlIHNhbWUgZnVuY3Rpb24gYXMgYnVpbHRpbl9mdW5jdGlvbiwgdGhlCisgICAgIGJhY2tlbmQgbXVzdCBhZGQgYWxsIG9mIHRoZSBidWlsdGlucyBhdCBwcm9ncmFtIGluaXRpYWxpemF0aW9uIHRpbWUuICAqLworICB0cmVlICgqYnVpbHRpbl9mdW5jdGlvbl9leHRfc2NvcGUpICh0cmVlIGRlY2wpOworCisgIC8qIFVzZWQgdG8gc2V0IHVwIHRoZSB0cmVlX2NvbnRhaW5zX3N0cnVjdHVyZSBhcnJheSBmb3IgYSBmcm9udGVuZC4gKi8KKyAgdm9pZCAoKmluaXRfdHMpICh2b2lkKTsKKworICAvKiBDYWxsZWQgYnkgcmVjb21wdXRlX3RyZWVfaW52YXJpYW50X2Zvcl9hZGRyX2V4cHIgdG8gZ28gZnJvbSBFWFBSCisgICAgIHRvIGEgY29udGFpbmVkIGV4cHJlc3Npb24gb3IgREVDTCwgcG9zc2libHkgdXBkYXRpbmcgKlRDIG9yICpTRQorICAgICBpZiBpbiB0aGUgcHJvY2VzcyBUUkVFX0NPTlNUQU5UIG9yIFRSRUVfU0lERV9FRkZFQ1RTIG5lZWQgdXBkYXRpbmcuICAqLworICB0cmVlICgqZXhwcl90b19kZWNsKSAodHJlZSBleHByLCBib29sICp0YywgYm9vbCAqc2UpOworCisgIC8qIFRoZSBFSCBwZXJzb25hbGl0eSBmdW5jdGlvbiBkZWNsLiAgKi8KKyAgdHJlZSAoKmVoX3BlcnNvbmFsaXR5KSAodm9pZCk7CisKKyAgLyogTWFwIGEgdHlwZSB0byBhIHJ1bnRpbWUgb2JqZWN0IHRvIG1hdGNoIHR5cGUuICAqLworICB0cmVlICgqZWhfcnVudGltZV90eXBlKSAodHJlZSk7CisKKyAgLyogSWYgbm9uLU5VTEwsIHRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiBkZWNsIHRvIGJlCisgICAgIGV4ZWN1dGVkIGlmIGFuIHVuaGFuZGxlZCBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCBvdXQgb2YgYSBjbGVhbnVwCisgICAgIHJlZ2lvbi4gIEZvciBleGFtcGxlLCBpbiBDKyssIGFuIGV4Y2VwdGlvbiB0aHJvd24gYnkgYSBkZXN0cnVjdG9yCisgICAgIGR1cmluZyBzdGFjayB1bndpbmRpbmcgaXMgcmVxdWlyZWQgdG8gcmVzdWx0IGluIGEgY2FsbCB0bworICAgICBgc3RkOjp0ZXJtaW5hdGUnLCBzbyB0aGUgQysrIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKKyAgICAgRlVOQ1RJT05fREVDTCBmb3IgYHN0ZDo6dGVybWluYXRlJy4gICovCisgIHRyZWUgKCplaF9wcm90ZWN0X2NsZWFudXBfYWN0aW9ucykgKHZvaWQpOworCisgIC8qIFJldHVybiB0cnVlIGlmIGEgc3RtdCBjYW4gZmFsbHRocnUuICBVc2VkIGJ5IGJsb2NrX21heV9mYWxsdGhydQorICAgICB0byBwb3NzaWJseSBoYW5kbGUgbGFuZ3VhZ2UgdHJlZXMuICAqLworICBib29sICgqYmxvY2tfbWF5X2ZhbGx0aHJ1KSAoY29uc3RfdHJlZSk7CisKKyAgLyogVHJ1ZSBpZiB0aGlzIGxhbmd1YWdlIHVzZXMgX19jeGFfZW5kX2NsZWFudXAgd2hlbiB0aGUgQVJNIEVBQkkKKyAgICAgaXMgZW5hYmxlZC4gICovCisgIGJvb2wgZWhfdXNlX2N4YV9lbmRfY2xlYW51cDsKKworICAvKiBUcnVlIGlmIHRoaXMgbGFuZ3VhZ2UgcmVxdWlyZXMgZGVlcCB1bnNoYXJpbmcgb2YgdHJlZSBub2RlcyBwcmlvciB0bworICAgICBnaW1wbGlmaWNhdGlvbi4gICovCisgIGJvb2wgZGVlcF91bnNoYXJpbmc7CisKKyAgLyogV2hlbmV2ZXIgeW91IGFkZCBlbnRyaWVzIGhlcmUsIG1ha2Ugc3VyZSB5b3UgYWRqdXN0IGxhbmdob29rcy1kZWYuaAorICAgICBhbmQgbGFuZ2hvb2tzLmMgYWNjb3JkaW5nbHkuICAqLworfTsKKworLyogRWFjaCBmcm9udCBlbmQgcHJvdmlkZXMgaXRzIG93bi4gICovCitleHRlcm4gc3RydWN0IGxhbmdfaG9va3MgbGFuZ19ob29rczsKKworZXh0ZXJuIHRyZWUgYWRkX2J1aWx0aW5fZnVuY3Rpb24gKGNvbnN0IGNoYXIgKm5hbWUsIHRyZWUgdHlwZSwKKwkJCQkgIGludCBmdW5jdGlvbl9jb2RlLCBlbnVtIGJ1aWx0X2luX2NsYXNzIGNsLAorCQkJCSAgY29uc3QgY2hhciAqbGlicmFyeV9uYW1lLAorCQkJCSAgdHJlZSBhdHRycyk7CisKK2V4dGVybiB0cmVlIGFkZF9idWlsdGluX2Z1bmN0aW9uX2V4dF9zY29wZSAoY29uc3QgY2hhciAqbmFtZSwgdHJlZSB0eXBlLAorCQkJCQkgICAgaW50IGZ1bmN0aW9uX2NvZGUsCisJCQkJCSAgICBlbnVtIGJ1aWx0X2luX2NsYXNzIGNsLAorCQkJCQkgICAgY29uc3QgY2hhciAqbGlicmFyeV9uYW1lLAorCQkJCQkgICAgdHJlZSBhdHRycyk7CitleHRlcm4gdHJlZSBhZGRfYnVpbHRpbl90eXBlIChjb25zdCBjaGFyICpuYW1lLCB0cmVlIHR5cGUpOworIAorI2VuZGlmIC8qIEdDQ19MQU5HX0hPT0tTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9saWJpYmVydHkuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9saWJpYmVydHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWNkZTgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2xpYmliZXJ0eS5oCkBAIC0wLDAgKzEsNjg2IEBACisvKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIGxpYmliZXJ0eS4KKworICAgQ29weXJpZ2h0IDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgCisgICBOb3RlIC0gY2VydGFpbiBwcm90b3R5cGVzIGRlY2xhcmVkIGluIHRoaXMgaGVhZGVyIGZpbGUgYXJlIGZvcgorICAgZnVuY3Rpb25zIHdob2VzIGltcGxlbWVudGF0aW9uIGNvcHlyaWdodCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlCisgICBGU0YuICBUaG9zZSBwcm90b3R5cGVzIGFyZSBwcmVzZW50IGluIHRoaXMgZmlsZSBmb3IgcmVmZXJlbmNlCisgICBwdXJwb3NlcyBvbmx5IGFuZCB0aGVpciBwcmVzZW5jZSBpbiB0aGlzIGZpbGUgc2hvdWxkIG5vdCBjb25zdHJ1ZWQKKyAgIGFzIGFuIGluZGljYXRpb24gb2Ygb3duZXJzaGlwIGJ5IHRoZSBGU0Ygb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mCisgICB0aG9zZSBmdW5jdGlvbnMgaW4gYW55IHdheSBvciBmb3JtIHdoYXRzb2V2ZXIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAgIAorICAgV3JpdHRlbiBieSBDeWdudXMgU3VwcG9ydCwgMTk5NC4KKworICAgVGhlIGxpYmliZXJ0eSBsaWJyYXJ5IHByb3ZpZGVzIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyB3aGljaCBhcmUKKyAgIG1pc3Npbmcgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4gIFdlIGRvIG5vdCBkZWNsYXJlIHRob3NlIGhlcmUsCisgICB0byBhdm9pZCBjb25mbGljdHMgd2l0aCB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcyBvbiBvcGVyYXRpbmcKKyAgIHN5c3RlbXMgdGhhdCBkbyBzdXBwb3J0IHRob3NlIGZ1bmN0aW9ucy4gIEluIHRoaXMgZmlsZSB3ZSBvbmx5CisgICBkZWNsYXJlIHRob3NlIGZ1bmN0aW9ucyB3aGljaCBhcmUgc3BlY2lmaWMgdG8gbGliaWJlcnR5LiAgKi8KKworI2lmbmRlZiBMSUJJQkVSVFlfSAorI2RlZmluZSBMSUJJQkVSVFlfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlICJhbnNpZGVjbC5oIgorCisvKiBHZXQgYSBkZWZpbml0aW9uIGZvciBzaXplX3QuICAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorLyogR2V0IGEgZGVmaW5pdGlvbiBmb3IgdmFfbGlzdC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBJZiB0aGUgT1Mgc3VwcG9ydHMgaXQsIGVuc3VyZSB0aGF0IHRoZSBzdXBwbGllZCBzdHJlYW0gaXMgc2V0dXAgdG8KKyAgIGF2b2lkIGFueSBtdWx0aS10aHJlYWRlZCBsb2NraW5nLiAgT3RoZXJ3aXNlIGxlYXZlIHRoZSBGSUxFIHBvaW50ZXIKKyAgIHVuY2hhbmdlZC4gIElmIHRoZSBzdHJlYW0gaXMgTlVMTCBkbyBub3RoaW5nLiAgKi8KKworZXh0ZXJuIHZvaWQgdW5sb2NrX3N0cmVhbSAoRklMRSAqKTsKKworLyogSWYgdGhlIE9TIHN1cHBvcnRzIGl0LCBlbnN1cmUgdGhhdCB0aGUgc3RhbmRhcmQgSS9PIHN0cmVhbXMsIHN0ZGluLAorICAgc3Rkb3V0IGFuZCBzdGRlcnIgYXJlIHNldHVwIHRvIGF2b2lkIGFueSBtdWx0aS10aHJlYWRlZCBsb2NraW5nLgorICAgT3RoZXJ3aXNlIGRvIG5vdGhpbmcuICAqLworCitleHRlcm4gdm9pZCB1bmxvY2tfc3RkX3N0cmVhbXMgKHZvaWQpOworCisvKiBPcGVuIGFuZCByZXR1cm4gYSBGSUxFIHBvaW50ZXIuICBJZiB0aGUgT1Mgc3VwcG9ydHMgaXQsIGVuc3VyZSB0aGF0CisgICB0aGUgc3RyZWFtIGlzIHNldHVwIHRvIGF2b2lkIGFueSBtdWx0aS10aHJlYWRlZCBsb2NraW5nLiAgT3RoZXJ3aXNlCisgICByZXR1cm4gdGhlIEZJTEUgcG9pbnRlciB1bmNoYW5nZWQuICAqLworCitleHRlcm4gRklMRSAqZm9wZW5fdW5sb2NrZWQgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBGSUxFICpmZG9wZW5fdW5sb2NrZWQgKGludCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBGSUxFICpmcmVvcGVuX3VubG9ja2VkIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKKworLyogQnVpbGQgYW4gYXJndW1lbnQgdmVjdG9yIGZyb20gYSBzdHJpbmcuICBBbGxvY2F0ZXMgbWVtb3J5IHVzaW5nCisgICBtYWxsb2MuICBVc2UgZnJlZWFyZ3YgdG8gZnJlZSB0aGUgdmVjdG9yLiAgKi8KKworZXh0ZXJuIGNoYXIgKipidWlsZGFyZ3YgKGNvbnN0IGNoYXIgKikgQVRUUklCVVRFX01BTExPQzsKKworLyogRnJlZSBhIHZlY3RvciByZXR1cm5lZCBieSBidWlsZGFyZ3YuICAqLworCitleHRlcm4gdm9pZCBmcmVlYXJndiAoY2hhciAqKik7CisKKy8qIER1cGxpY2F0ZSBhbiBhcmd1bWVudCB2ZWN0b3IuIEFsbG9jYXRlcyBtZW1vcnkgdXNpbmcgbWFsbG9jLiAgVXNlCisgICBmcmVlYXJndiB0byBmcmVlIHRoZSB2ZWN0b3IuICAqLworCitleHRlcm4gY2hhciAqKmR1cGFyZ3YgKGNoYXIgKiopIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIEV4cGFuZCAiQGZpbGUiIGFyZ3VtZW50cyBpbiBhcmd2LiAgKi8KKworZXh0ZXJuIHZvaWQgZXhwYW5kYXJndiBQQVJBTVMgKChpbnQgKiwgY2hhciAqKiopKTsKKworLyogV3JpdGUgYXJndiB0byBhbiBALWZpbGUsIGluc2VydGluZyBuZWNlc3NhcnkgcXVvdGluZy4gICovCisKK2V4dGVybiBpbnQgd3JpdGVhcmd2IFBBUkFNUyAoKGNoYXIgKiosIEZJTEUgKikpOworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhcmd2LiAgKi8KKworZXh0ZXJuIGludCBjb3VudGFyZ3YgKGNoYXIqKik7CisKKy8qIFJldHVybiB0aGUgbGFzdCBjb21wb25lbnQgb2YgYSBwYXRoIG5hbWUuICBOb3RlIHRoYXQgd2UgY2FuJ3QgdXNlIGEKKyAgIHByb3RvdHlwZSBoZXJlIGJlY2F1c2UgdGhlIHBhcmFtZXRlciBpcyBkZWNsYXJlZCBpbmNvbnNpc3RlbnRseQorICAgYWNyb3NzIGRpZmZlcmVudCBzeXN0ZW1zLCBzb21ldGltZXMgYXMgImNoYXIgKiIgYW5kIHNvbWV0aW1lcyBhcworICAgImNvbnN0IGNoYXIgKiIgKi8KKworLyogSEFWRV9ERUNMXyogaXMgYSB0aHJlZS1zdGF0ZSBtYWNybzogdW5kZWZpbmVkLCAwIG9yIDEuICBJZiBpdCBpcworICAgdW5kZWZpbmVkLCB3ZSBoYXZlbid0IHJ1biB0aGUgYXV0b2NvbmYgY2hlY2sgc28gcHJvdmlkZSB0aGUKKyAgIGRlY2xhcmF0aW9uIHdpdGhvdXQgYXJndW1lbnRzLiAgSWYgaXQgaXMgMCwgd2UgY2hlY2tlZCBhbmQgZmFpbGVkCisgICB0byBmaW5kIHRoZSBkZWNsYXJhdGlvbiBzbyBwcm92aWRlIGEgZnVsbHkgcHJvdG90eXBlZCBvbmUuICBJZiBpdAorICAgaXMgMSwgd2UgZm91bmQgaXQgc28gZG9uJ3QgcHJvdmlkZSBhbnkgZGVjbGFyYXRpb24gYXQgYWxsLiAgKi8KKyNpZiAhSEFWRV9ERUNMX0JBU0VOQU1FCisjaWYgZGVmaW5lZCAoX19HTlVfTElCUkFSWV9fICkgfHwgZGVmaW5lZCAoX19saW51eF9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZCAoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykgfHwgZGVmaW5lZCAoX19DWUdXSU4zMl9fKSB8fCBkZWZpbmVkIChfX01JTkdXMzJfXykgfHwgZGVmaW5lZCAoSEFWRV9ERUNMX0JBU0VOQU1FKQorZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChjb25zdCBjaGFyICopOworI2Vsc2UKKy8qIERvIG5vdCBhbGxvdyBiYXNlbmFtZSB0byBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIHByb3RvdHlwZSBzZWVuLiAgV2UKKyAgIGVpdGhlciBuZWVkIHRvIHVzZSB0aGUgYWJvdmUgcHJvdG90eXBlIG9yIGhhdmUgb25lIGZyb20KKyAgIGF1dG9jb25mIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBIQVZFX0RFQ0xfQkFTRU5BTUUgYmVpbmcgc2V0LiAgKi8KKyNkZWZpbmUgYmFzZW5hbWUgYmFzZW5hbWVfY2Fubm90X2JlX3VzZWRfd2l0aG91dF9hX3Byb3RvdHlwZQorI2VuZGlmCisjZW5kaWYKKworLyogQSB3ZWxsLWRlZmluZWQgYmFzZW5hbWUgKCkgdGhhdCBpcyBhbHdheXMgY29tcGlsZWQgaW4uICAqLworCitleHRlcm4gY29uc3QgY2hhciAqbGJhc2VuYW1lIChjb25zdCBjaGFyICopOworCisvKiBTYW1lLCBidXQgYXNzdW1lcyBET1Mgc2VtYW50aWNzIChkcml2ZSBuYW1lLCBiYWNrc2xhc2ggaXMgYWxzbyBhCisgICBkaXIgc2VwYXJhdG9yKSByZWdhcmRsZXNzIG9mIGhvc3QuICAqLworCitleHRlcm4gY29uc3QgY2hhciAqZG9zX2xiYXNlbmFtZSAoY29uc3QgY2hhciAqKTsKKworLyogU2FtZSwgYnV0IGFzc3VtZXMgVW5peCBzZW1hbnRpY3MgKGFic29sdXRlIHBhdGhzIGFsd2F5cyBzdGFydCB3aXRoCisgICBhIHNsYXNoLCBvbmx5IGZvcndhcmQgc2xhc2ggaXMgYWNjZXB0ZWQgYXMgZGlyIHNlcGFyYXRvcikKKyAgIHJlZ2FyZGxlc3Mgb2YgaG9zdC4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICp1bml4X2xiYXNlbmFtZSAoY29uc3QgY2hhciAqKTsKKworLyogQSB3ZWxsLWRlZmluZWQgcmVhbHBhdGggKCkgdGhhdCBpcyBhbHdheXMgY29tcGlsZWQgaW4uICAqLworCitleHRlcm4gY2hhciAqbHJlYWxwYXRoIChjb25zdCBjaGFyICopOworCisvKiBDb25jYXRlbmF0ZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHN0cmluZ3MuICBZb3UgbXVzdCBwYXNzIE5VTEwgYXMKKyAgIHRoZSBsYXN0IGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb24sIHRvIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZgorICAgc3RyaW5ncy4gIEFsbG9jYXRlcyBtZW1vcnkgdXNpbmcgeG1hbGxvYy4gICovCisKK2V4dGVybiBjaGFyICpjb25jYXQgKGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfTUFMTE9DIEFUVFJJQlVURV9TRU5USU5FTDsKKworLyogQ29uY2F0ZW5hdGUgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBzdHJpbmdzLiAgWW91IG11c3QgcGFzcyBOVUxMIGFzCisgICB0aGUgbGFzdCBhcmd1bWVudCBvZiB0aGlzIGZ1bmN0aW9uLCB0byB0ZXJtaW5hdGUgdGhlIGxpc3Qgb2YKKyAgIHN0cmluZ3MuICBBbGxvY2F0ZXMgbWVtb3J5IHVzaW5nIHhtYWxsb2MuICBUaGUgZmlyc3QgYXJndW1lbnQgaXMKKyAgIG5vdCBvbmUgb2YgdGhlIHN0cmluZ3MgdG8gYmUgY29uY2F0ZW5hdGVkLCBidXQgaWYgbm90IE5VTEwgaXMgYQorICAgcG9pbnRlciB0byBiZSBmcmVlZCBhZnRlciB0aGUgbmV3IHN0cmluZyBpcyBjcmVhdGVkLCBzaW1pbGFyIHRvIHRoZQorICAgd2F5IHhyZWFsbG9jIHdvcmtzLiAgKi8KKworZXh0ZXJuIGNoYXIgKnJlY29uY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfTUFMTE9DIEFUVFJJQlVURV9TRU5USU5FTDsKKworLyogRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgY29uY2F0ZW5hdGluZyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCisgICBzdHJpbmdzLiAgWW91IG11c3QgcGFzcyBOVUxMIGFzIHRoZSBsYXN0IGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb24sCisgICB0byB0ZXJtaW5hdGUgdGhlIGxpc3Qgb2Ygc3RyaW5ncy4gICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNvbmNhdF9sZW5ndGggKGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfU0VOVElORUw7CisKKy8qIENvbmNhdGVuYXRlIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RyaW5ncyBpbnRvIGEgU1VQUExJRUQgYXJlYSBvZgorICAgbWVtb3J5LiAgWW91IG11c3QgcGFzcyBOVUxMIGFzIHRoZSBsYXN0IGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb24sCisgICB0byB0ZXJtaW5hdGUgdGhlIGxpc3Qgb2Ygc3RyaW5ncy4gIFRoZSBzdXBwbGllZCBtZW1vcnkgaXMgYXNzdW1lZAorICAgdG8gYmUgbGFyZ2UgZW5vdWdoLiAgKi8KKworZXh0ZXJuIGNoYXIgKmNvbmNhdF9jb3B5IChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfU0VOVElORUw7CisKKy8qIENvbmNhdGVuYXRlIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RyaW5ncyBpbnRvIGEgR0xPQkFMIGFyZWEgb2YKKyAgIG1lbW9yeS4gIFlvdSBtdXN0IHBhc3MgTlVMTCBhcyB0aGUgbGFzdCBhcmd1bWVudCBvZiB0aGlzIGZ1bmN0aW9uLAorICAgdG8gdGVybWluYXRlIHRoZSBsaXN0IG9mIHN0cmluZ3MuICBUaGUgc3VwcGxpZWQgbWVtb3J5IGlzIGFzc3VtZWQKKyAgIHRvIGJlIGxhcmdlIGVub3VnaC4gICovCisKK2V4dGVybiBjaGFyICpjb25jYXRfY29weTIgKGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfU0VOVElORUw7CisKKy8qIFRoaXMgaXMgdGhlIGdsb2JhbCBhcmVhIHVzZWQgYnkgY29uY2F0X2NvcHkyLiAgKi8KKworZXh0ZXJuIGNoYXIgKmxpYmliZXJ0eV9jb25jYXRfcHRyOworCisvKiBDb25jYXRlbmF0ZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHN0cmluZ3MuICBZb3UgbXVzdCBwYXNzIE5VTEwgYXMKKyAgIHRoZSBsYXN0IGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb24sIHRvIHRlcm1pbmF0ZSB0aGUgbGlzdCBvZgorICAgc3RyaW5ncy4gIEFsbG9jYXRlcyBtZW1vcnkgdXNpbmcgYWxsb2NhLiAgVGhlIGFyZ3VtZW50cyBhcmUKKyAgIGV2YWx1YXRlZCB0d2ljZSEgICovCisjZGVmaW5lIEFDT05DQVQoQUNPTkNBVF9QQVJBTVMpIFwKKyAgKGxpYmliZXJ0eV9jb25jYXRfcHRyID0gKGNoYXIgKikgYWxsb2NhIChjb25jYXRfbGVuZ3RoIEFDT05DQVRfUEFSQU1TICsgMSksIFwKKyAgIGNvbmNhdF9jb3B5MiBBQ09OQ0FUX1BBUkFNUykKKworLyogQ2hlY2sgd2hldGhlciB0d28gZmlsZSBkZXNjcmlwdG9ycyByZWZlciB0byB0aGUgc2FtZSBmaWxlLiAgKi8KKworZXh0ZXJuIGludCBmZG1hdGNoIChpbnQgZmQxLCBpbnQgZmQyKTsKKworLyogUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYml0IHNldCBpbiB0aGUgYXJndW1lbnQuICAqLworLyogUHJvdG90eXBlcyB2YXJ5IGZyb20gc3lzdGVtIHRvIHN5c3RlbSwgc28gd2Ugb25seSBwcm92aWRlIGEKKyAgIHByb3RvdHlwZSBvbiBzeXN0ZW1zIHdoZXJlIHdlIGtub3cgdGhhdCB3ZSBuZWVkIGl0LiAgKi8KKyNpZiBkZWZpbmVkIChIQVZFX0RFQ0xfRkZTKSAmJiAhSEFWRV9ERUNMX0ZGUworZXh0ZXJuIGludCBmZnMoaW50KTsKKyNlbmRpZgorCisvKiBHZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiAgVGhlIHJlc3VsdCBpcyBjYWNoZWQsIHNvIGRvbid0IGNhbGwKKyAgIGNoZGlyKCkgYmV0d2VlbiBjYWxscyB0byBnZXRwd2QoKS4gICovCisKK2V4dGVybiBjaGFyICogZ2V0cHdkICh2b2lkKTsKKworLyogR2V0IHRoZSBjdXJyZW50IHRpbWUuICAqLworLyogUHJvdG90eXBlcyB2YXJ5IGZyb20gc3lzdGVtIHRvIHN5c3RlbSwgc28gd2Ugb25seSBwcm92aWRlIGEKKyAgIHByb3RvdHlwZSBvbiBzeXN0ZW1zIHdoZXJlIHdlIGtub3cgdGhhdCB3ZSBuZWVkIGl0LiAgKi8KKyNpZmRlZiBfX01JTkdXMzJfXworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBhdm9pZCAjaW5jbHVkZSA8c3lzL3RpbWUuaD4uICAgKi8KK3N0cnVjdCB0aW1ldmFsOworZXh0ZXJuIGludCBnZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICosIHZvaWQgKik7IAorI2VuZGlmCisKKy8qIEdldCB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIHByb2Nlc3MgaGFzIHJ1biwgaW4gbWljcm9zZWNvbmRzLiAgKi8KKworZXh0ZXJuIGxvbmcgZ2V0X3J1bl90aW1lICh2b2lkKTsKKworLyogR2VuZXJhdGUgYSByZWxvY2F0ZWQgcGF0aCB0byBzb21lIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICBBbGxvY2F0ZXMKKyAgIHJldHVybiB2YWx1ZSB1c2luZyBtYWxsb2MuICAqLworCitleHRlcm4gY2hhciAqbWFrZV9yZWxhdGl2ZV9wcmVmaXggKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIEdlbmVyYXRlIGEgcmVsb2NhdGVkIHBhdGggdG8gc29tZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IHdpdGhvdXQKKyAgIGF0dGVtcHRpbmcgdG8gZm9sbG93IGFueSBzb2Z0IGxpbmtzLiAgQWxsb2NhdGVzCisgICByZXR1cm4gdmFsdWUgdXNpbmcgbWFsbG9jLiAgKi8KKworZXh0ZXJuIGNoYXIgKm1ha2VfcmVsYXRpdmVfcHJlZml4X2lnbm9yZV9saW5rcyAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJCQljb25zdCBjaGFyICopIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIENob29zZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gdXNlIGZvciBzY3JhdGNoIGZpbGVzLiAgKi8KKworZXh0ZXJuIGNoYXIgKmNob29zZV90ZW1wX2Jhc2UgKHZvaWQpIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIFJldHVybiBhIHRlbXBvcmFyeSBmaWxlIG5hbWUgb3IgTlVMTCBpZiB1bmFibGUgdG8gY3JlYXRlIG9uZS4gICovCisKK2V4dGVybiBjaGFyICptYWtlX3RlbXBfZmlsZSAoY29uc3QgY2hhciAqKSBBVFRSSUJVVEVfTUFMTE9DOworCisvKiBSZW1vdmUgYSBsaW5rIHRvIGEgZmlsZSB1bmxlc3MgaXQgaXMgc3BlY2lhbC4gKi8KKworZXh0ZXJuIGludCB1bmxpbmtfaWZfb3JkaW5hcnkgKGNvbnN0IGNoYXIgKik7CisKKy8qIEFsbG9jYXRlIG1lbW9yeSBmaWxsZWQgd2l0aCBzcGFjZXMuICBBbGxvY2F0ZXMgdXNpbmcgbWFsbG9jLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYWNlcyAoaW50IGNvdW50KTsKKworLyogUmV0dXJuIHRoZSBtYXhpbXVtIGVycm9yIG51bWJlciBmb3Igd2hpY2ggc3RyZXJyb3Igd2lsbCByZXR1cm4gYQorICAgc3RyaW5nLiAgKi8KKworZXh0ZXJuIGludCBlcnJub19tYXggKHZvaWQpOworCisvKiBSZXR1cm4gdGhlIG5hbWUgb2YgYW4gZXJybm8gdmFsdWUgKGUuZy4sIHN0cmVycm5vIChFSU5WQUwpIHJldHVybnMKKyAgICJFSU5WQUwiKS4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICpzdHJlcnJubyAoaW50KTsKKworLyogR2l2ZW4gdGhlIG5hbWUgb2YgYW4gZXJybm8gdmFsdWUsIHJldHVybiB0aGUgdmFsdWUuICAqLworCitleHRlcm4gaW50IHN0cnRvZXJybm8gKGNvbnN0IGNoYXIgKik7CisKKy8qIEFOU0kncyBzdHJlcnJvcigpLCBidXQgbW9yZSByb2J1c3QuICAqLworCitleHRlcm4gY2hhciAqeHN0cmVycm9yIChpbnQpOworCisvKiBSZXR1cm4gdGhlIG1heGltdW0gc2lnbmFsIG51bWJlciBmb3Igd2hpY2ggc3Ryc2lnbmFsIHdpbGwgcmV0dXJuIGEKKyAgIHN0cmluZy4gICovCisKK2V4dGVybiBpbnQgc2lnbm9fbWF4ICh2b2lkKTsKKworLyogUmV0dXJuIGEgc2lnbmFsIG1lc3NhZ2Ugc3RyaW5nIGZvciBhIHNpZ25hbCBudW1iZXIKKyAgIChlLmcuLCBzdHJzaWduYWwgKFNJR0hVUCkgcmV0dXJucyBzb21ldGhpbmcgbGlrZSAiSGFuZ3VwIikuICAqLworLyogVGhpcyBpcyBjb21tZW50ZWQgb3V0IGFzIGl0IGNhbiBjb25mbGljdCB3aXRoIG9uZSBpbiBzeXN0ZW0gaGVhZGVycy4KKyAgIFdlIHN0aWxsIGRvY3VtZW50IGl0cyBleGlzdGVuY2UgdGhvdWdoLiAgKi8KKworLypleHRlcm4gY29uc3QgY2hhciAqc3Ryc2lnbmFsIChpbnQpOyovCisKKy8qIFJldHVybiB0aGUgbmFtZSBvZiBhIHNpZ25hbCBudW1iZXIgKGUuZy4sIHN0cnNpZ25vIChTSUdIVVApIHJldHVybnMKKyAgICJTSUdIVVAiKS4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICpzdHJzaWdubyAoaW50KTsKKworLyogR2l2ZW4gdGhlIG5hbWUgb2YgYSBzaWduYWwsIHJldHVybiBpdHMgbnVtYmVyLiAgKi8KKworZXh0ZXJuIGludCBzdHJ0b3NpZ25vIChjb25zdCBjaGFyICopOworCisvKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIHJ1biBieSB4ZXhpdC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLiAgKi8KKworZXh0ZXJuIGludCB4YXRleGl0ICh2b2lkICgqZm4pICh2b2lkKSk7CisKKy8qIEV4aXQsIGNhbGxpbmcgYWxsIHRoZSBmdW5jdGlvbnMgcmVnaXN0ZXJlZCB3aXRoIHhhdGV4aXQuICAqLworCitleHRlcm4gdm9pZCB4ZXhpdCAoaW50IHN0YXR1cykgQVRUUklCVVRFX05PUkVUVVJOOworCisvKiBTZXQgdGhlIHByb2dyYW0gbmFtZSB1c2VkIGJ5IHhtYWxsb2MuICAqLworCitleHRlcm4gdm9pZCB4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUgKGNvbnN0IGNoYXIgKik7CisKKy8qIFJlcG9ydCBhbiBhbGxvY2F0aW9uIGZhaWx1cmUuICAqLworZXh0ZXJuIHZvaWQgeG1hbGxvY19mYWlsZWQgKHNpemVfdCkgQVRUUklCVVRFX05PUkVUVVJOOworCisvKiBBbGxvY2F0ZSBtZW1vcnkgd2l0aG91dCBmYWlsLiAgSWYgbWFsbG9jIGZhaWxzLCB0aGlzIHdpbGwgcHJpbnQgYQorICAgbWVzc2FnZSB0byBzdGRlcnIgKHVzaW5nIHRoZSBuYW1lIHNldCBieSB4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUsCisgICBpZiBhbnkpIGFuZCB0aGVuIGNhbGwgeGV4aXQuICAqLworCitleHRlcm4gdm9pZCAqeG1hbGxvYyAoc2l6ZV90KSBBVFRSSUJVVEVfTUFMTE9DOworCisvKiBSZWFsbG9jYXRlIG1lbW9yeSB3aXRob3V0IGZhaWwuICBUaGlzIHdvcmtzIGxpa2UgeG1hbGxvYy4gIE5vdGUsCisgICByZWFsbG9jIHR5cGUgZnVuY3Rpb25zIGFyZSBub3Qgc3VpdGFibGUgZm9yIGF0dHJpYnV0ZSBtYWxsb2Mgc2luY2UKKyAgIHRoZXkgbWF5IHJldHVybiB0aGUgc2FtZSBhZGRyZXNzIGFjcm9zcyBtdWx0aXBsZSBjYWxscy4gKi8KKworZXh0ZXJuIHZvaWQgKnhyZWFsbG9jICh2b2lkICosIHNpemVfdCk7CisKKy8qIEFsbG9jYXRlIG1lbW9yeSB3aXRob3V0IGZhaWwgYW5kIHNldCBpdCB0byB6ZXJvLiAgVGhpcyB3b3JrcyBsaWtlCisgICB4bWFsbG9jLiAgKi8KKworZXh0ZXJuIHZvaWQgKnhjYWxsb2MgKHNpemVfdCwgc2l6ZV90KSBBVFRSSUJVVEVfTUFMTE9DOworCisvKiBDb3B5IGEgc3RyaW5nIGludG8gYSBtZW1vcnkgYnVmZmVyIHdpdGhvdXQgZmFpbC4gICovCisKK2V4dGVybiBjaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICopIEFUVFJJQlVURV9NQUxMT0M7CisKKy8qIENvcHkgYXQgbW9zdCBOIGNoYXJhY3RlcnMgZnJvbSBzdHJpbmcgaW50byBhIGJ1ZmZlciB3aXRob3V0IGZhaWwuICAqLworCitleHRlcm4gY2hhciAqeHN0cm5kdXAgKGNvbnN0IGNoYXIgKiwgc2l6ZV90KSBBVFRSSUJVVEVfTUFMTE9DOworCisvKiBDb3B5IGFuIGV4aXN0aW5nIG1lbW9yeSBidWZmZXIgdG8gYSBuZXcgbWVtb3J5IGJ1ZmZlciB3aXRob3V0IGZhaWwuICAqLworCitleHRlcm4gdm9pZCAqeG1lbWR1cCAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCkgQVRUUklCVVRFX01BTExPQzsKKworLyogUGh5c2ljYWwgbWVtb3J5IHJvdXRpbmVzLiAgUmV0dXJuIHZhbHVlcyBhcmUgaW4gQllURVMuICAqLworZXh0ZXJuIGRvdWJsZSBwaHlzbWVtX3RvdGFsICh2b2lkKTsKK2V4dGVybiBkb3VibGUgcGh5c21lbV9hdmFpbGFibGUgKHZvaWQpOworCisvKiBDb21wdXRlIHRoZSAzMi1iaXQgQ1JDIG9mIGEgYmxvY2sgb2YgbWVtb3J5LiAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgeGNyYzMyIChjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgaW50KTsKKworLyogVGhlc2UgbWFjcm9zIHByb3ZpZGUgYSBLJlIvQzg5L0MrKy1mcmllbmRseSB3YXkgb2YgYWxsb2NhdGluZyBzdHJ1Y3R1cmVzCisgICB3aXRoIG5pY2UgZW5jYXBzdWxhdGlvbi4gIFRoZSBYREVMRVRFKigpIG1hY3JvcyBhcmUgdGVjaG5pY2FsbHkKKyAgIHN1cGVyZmx1b3VzLCBidXQgcHJvdmlkZWQgaGVyZSBmb3Igc3ltbWV0cnkuICBVc2luZyB0aGVtIGNvbnNpc3RlbnRseQorICAgbWFrZXMgaXQgZWFzaWVyIHRvIHVwZGF0ZSBjbGllbnQgY29kZSB0byB1c2UgZGlmZmVyZW50IGFsbG9jYXRvcnMgc3VjaAorICAgYXMgbmV3L2RlbGV0ZSBhbmQgbmV3W10vZGVsZXRlW10uICAqLworCisvKiBTY2FsYXIgYWxsb2NhdG9ycy4gICovCisKKyNkZWZpbmUgWEFMTE9DQShUKQkJKChUICopIGFsbG9jYSAoc2l6ZW9mIChUKSkpCisjZGVmaW5lIFhORVcoVCkJCQkoKFQgKikgeG1hbGxvYyAoc2l6ZW9mIChUKSkpCisjZGVmaW5lIFhDTkVXKFQpCQkoKFQgKikgeGNhbGxvYyAoMSwgc2l6ZW9mIChUKSkpCisjZGVmaW5lIFhEVVAoVCwgUCkJCSgoVCAqKSB4bWVtZHVwICgoUCksIHNpemVvZiAoVCksIHNpemVvZiAoVCkpKQorI2RlZmluZSBYREVMRVRFKFApCQlmcmVlICgodm9pZCopIChQKSkKKworLyogQXJyYXkgYWxsb2NhdG9ycy4gICovCisKKyNkZWZpbmUgWEFMTE9DQVZFQyhULCBOKQkoKFQgKikgYWxsb2NhIChzaXplb2YgKFQpICogKE4pKSkKKyNkZWZpbmUgWE5FV1ZFQyhULCBOKQkJKChUICopIHhtYWxsb2MgKHNpemVvZiAoVCkgKiAoTikpKQorI2RlZmluZSBYQ05FV1ZFQyhULCBOKQkJKChUICopIHhjYWxsb2MgKChOKSwgc2l6ZW9mIChUKSkpCisjZGVmaW5lIFhEVVBWRUMoVCwgUCwgTikJKChUICopIHhtZW1kdXAgKChQKSwgc2l6ZW9mIChUKSAqIChOKSwgc2l6ZW9mIChUKSAqIChOKSkpCisjZGVmaW5lIFhSRVNJWkVWRUMoVCwgUCwgTikJKChUICopIHhyZWFsbG9jICgodm9pZCAqKSAoUCksIHNpemVvZiAoVCkgKiAoTikpKQorI2RlZmluZSBYREVMRVRFVkVDKFApCQlmcmVlICgodm9pZCopIChQKSkKKworLyogQWxsb2NhdG9ycyBmb3IgdmFyaWFibGUtc2l6ZWQgc3RydWN0dXJlcyBhbmQgcmF3IGJ1ZmZlcnMuICAqLworCisjZGVmaW5lIFhBTExPQ0FWQVIoVCwgUykJKChUICopIGFsbG9jYSAoKFMpKSkKKyNkZWZpbmUgWE5FV1ZBUihULCBTKQkJKChUICopIHhtYWxsb2MgKChTKSkpCisjZGVmaW5lIFhDTkVXVkFSKFQsIFMpCQkoKFQgKikgeGNhbGxvYyAoMSwgKFMpKSkKKyNkZWZpbmUgWERVUFZBUihULCBQLCBTMSwgUzIpCSgoVCAqKSB4bWVtZHVwICgoUCksIChTMSksIChTMikpKQorI2RlZmluZSBYUkVTSVpFVkFSKFQsIFAsIFMpCSgoVCAqKSB4cmVhbGxvYyAoKFApLCAoUykpKQorCisvKiBUeXBlLXNhZmUgb2JzdGFjayBhbGxvY2F0b3IuICAqLworCisjZGVmaW5lIFhPQk5FVyhPLCBUKQkJKChUICopIG9ic3RhY2tfYWxsb2MgKChPKSwgc2l6ZW9mIChUKSkpCisjZGVmaW5lIFhPQk5FV1ZFQyhPLCBULCBOKQkoKFQgKikgb2JzdGFja19hbGxvYyAoKE8pLCBzaXplb2YgKFQpICogKE4pKSkKKyNkZWZpbmUgWE9CTkVXVkFSKE8sIFQsIFMpCSgoVCAqKSBvYnN0YWNrX2FsbG9jICgoTyksIChTKSkpCisjZGVmaW5lIFhPQkZJTklTSChPLCBUKSAgICAgICAgICgoVCkgb2JzdGFja19maW5pc2ggKChPKSkpCisKKy8qIGhleCBjaGFyYWN0ZXIgbWFuaXB1bGF0aW9uIHJvdXRpbmVzICovCisKKyNkZWZpbmUgX2hleF9hcnJheV9zaXplIDI1NgorI2RlZmluZSBfaGV4X2JhZAk5OQorZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgX2hleF92YWx1ZVtfaGV4X2FycmF5X3NpemVdOworZXh0ZXJuIHZvaWQgaGV4X2luaXQgKHZvaWQpOworI2RlZmluZSBoZXhfcChjKQkoaGV4X3ZhbHVlIChjKSAhPSBfaGV4X2JhZCkKKy8qIElmIHlvdSBjaGFuZ2UgdGhpcywgbm90ZSB3ZWxsOiBTb21lIGNvZGUgcmVsaWVzIG9uIHNpZGUgZWZmZWN0cyBpbgorICAgdGhlIGFyZ3VtZW50IGJlaW5nIHBlcmZvcm1lZCBleGFjdGx5IG9uY2UuICAqLworI2RlZmluZSBoZXhfdmFsdWUoYykJKCh1bnNpZ25lZCBpbnQpIF9oZXhfdmFsdWVbKHVuc2lnbmVkIGNoYXIpIChjKV0pCisKKy8qIEZsYWdzIGZvciBwZXhfaW5pdC4gIFRoZXNlIGFyZSBiaXRzIHRvIGJlIG9yJ2VkIHRvZ2V0aGVyLiAgKi8KKworLyogUmVjb3JkIHN1YnByb2Nlc3MgdGltZXMsIGlmIHBvc3NpYmxlLiAgKi8KKyNkZWZpbmUgUEVYX1JFQ09SRF9USU1FUwkweDEKKworLyogVXNlIHBpcGVzIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gcHJvY2Vzc2VzLCBpZiBwb3NzaWJsZS4gICovCisjZGVmaW5lIFBFWF9VU0VfUElQRVMJCTB4MgorCisvKiBTYXZlIGZpbGVzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMuICAqLworI2RlZmluZSBQRVhfU0FWRV9URU1QUwkJMHg0CisKKy8qIFByZXBhcmUgdG8gZXhlY3V0ZSBvbmUgb3IgbW9yZSBwcm9ncmFtcywgd2l0aCBzdGFuZGFyZCBvdXRwdXQgb2YKKyAgIGVhY2ggcHJvZ3JhbSBmZWQgdG8gc3RhbmRhcmQgaW5wdXQgb2YgdGhlIG5leHQuCisgICBGTEFHUwlBcyBhYm92ZS4KKyAgIFBOQU1FCVRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHJlcG9ydCBpbiBlcnJvciBtZXNzYWdlcy4KKyAgIFRFTVBCQVNFCUEgYmFzZSBuYW1lIHRvIHVzZSBmb3IgdGVtcG9yYXJ5IGZpbGVzOyBtYXkgYmUgTlVMTCB0bworICAgCQl1c2UgYSByYW5kb20gbmFtZS4KKyAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4gICovCisKK2V4dGVybiBzdHJ1Y3QgcGV4X29iaiAqcGV4X2luaXQgKGludCBmbGFncywgY29uc3QgY2hhciAqcG5hbWUsCisJCQkJIGNvbnN0IGNoYXIgKnRlbXBiYXNlKTsKKworLyogRmxhZ3MgZm9yIHBleF9ydW4uICBUaGVzZSBhcmUgYml0cyB0byBiZSBvcidlZCB0b2dldGhlci4gICovCisKKy8qIExhc3QgcHJvZ3JhbSBpbiBwaXBlbGluZS4gIFN0YW5kYXJkIG91dHB1dCBvZiBwcm9ncmFtIGdvZXMgdG8KKyAgIE9VVE5BTUUsIG9yLCBpZiBPVVROQU1FIGlzIE5VTEwsIHRvIHN0YW5kYXJkIG91dHB1dCBvZiBjYWxsZXIuICBEbworICAgbm90IHNldCB0aGlzIGlmIHlvdSB3YW50IHRvIGNhbGwgcGV4X3JlYWRfb3V0cHV0LiAgQWZ0ZXIgdGhpcyBpcworICAgc2V0LCBwZXhfcnVuIG1heSBubyBsb25nZXIgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgc3RydWN0CisgICBwZXhfb2JqLiAgKi8KKyNkZWZpbmUgUEVYX0xBU1QJCTB4MQorCisvKiBTZWFyY2ggZm9yIHByb2dyYW0gaW4gZXhlY3V0YWJsZSBzZWFyY2ggcGF0aC4gICovCisjZGVmaW5lIFBFWF9TRUFSQ0gJCTB4MgorCisvKiBPVVROQU1FIGlzIGEgc3VmZml4LiAgKi8KKyNkZWZpbmUgUEVYX1NVRkZJWAkJMHg0CisKKy8qIFNlbmQgcHJvZ3JhbSdzIHN0YW5kYXJkIGVycm9yIHRvIHN0YW5kYXJkIG91dHB1dC4gICovCisjZGVmaW5lIFBFWF9TVERFUlJfVE9fU1RET1VUCTB4OAorCisvKiBJbnB1dCBmaWxlIHNob3VsZCBiZSBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuICBUaGlzIGZsYWcgaXMgaWdub3JlZAorICAgb24gVW5peC4gICovCisjZGVmaW5lIFBFWF9CSU5BUllfSU5QVVQJMHgxMAorCisvKiBPdXRwdXQgZmlsZSBzaG91bGQgYmUgb3BlbmVkIGluIGJpbmFyeSBtb2RlLiAgVGhpcyBmbGFnIGlzIGlnbm9yZWQKKyAgIG9uIFVuaXguICBGb3IgcHJvcGVyIGJlaGF2aW91ciBQRVhfQklOQVJZX0lOUFVUIGFuZAorICAgUEVYX0JJTkFSWV9PVVRQVVQgaGF2ZSB0byBtYXRjaCBhcHByb3ByaWF0ZWx5LS1pLmUuLCBhIGNhbGwgdXNpbmcKKyAgIFBFWF9CSU5BUllfT1VUUFVUIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNhbGwgdXNpbmcKKyAgIFBFWF9CSU5BUllfSU5QVVQuICAqLworI2RlZmluZSBQRVhfQklOQVJZX09VVFBVVAkweDIwCisKKy8qIENhcHR1cmUgc3RkZXJyIHRvIGEgcGlwZS4gIFRoZSBvdXRwdXQgY2FuIGJlIHJlYWQgYnkKKyAgIGNhbGxpbmcgcGV4X3JlYWRfZXJyIGFuZCByZWFkaW5nIGZyb20gdGhlIHJldHVybmVkCisgICBGSUxFIG9iamVjdC4gIFRoaXMgZmxhZyBtYXkgYmUgc3BlY2lmaWVkIG9ubHkgZm9yCisgICB0aGUgbGFzdCBwcm9ncmFtIGluIGEgcGlwZWxpbmUuICAKKworICAgVGhpcyBmbGFnIGlzIHN1cHBvcnRlZCBvbmx5IG9uIFVuaXggYW5kIFdpbmRvd3MuICAqLworI2RlZmluZSBQRVhfU1RERVJSX1RPX1BJUEUJMHg0MAorCisvKiBDYXB0dXJlIHN0ZGVyciBpbiBiaW5hcnkgbW9kZS4gIFRoaXMgZmxhZyBpcyBpZ25vcmVkCisgICBvbiBVbml4LiAgKi8KKyNkZWZpbmUgUEVYX0JJTkFSWV9FUlJPUgkweDgwCisKKworLyogRXhlY3V0ZSBvbmUgcHJvZ3JhbS4gIFJldHVybnMgTlVMTCBvbiBzdWNjZXNzLiAgT24gZXJyb3IgcmV0dXJucyBhbgorICAgZXJyb3Igc3RyaW5nICh0eXBpY2FsbHkganVzdCB0aGUgbmFtZSBvZiBhIHN5c3RlbSBjYWxsKTsgdGhlIGVycm9yCisgICBzdHJpbmcgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisKKyAgIE9CSgkJUmV0dXJuZWQgYnkgcGV4X2luaXQuCisKKyAgIEZMQUdTCUFzIGFib3ZlLgorCisgICBFWEVDVVRBQkxFCVRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUuCisKKyAgIEFSR1YJCU5VTEwgdGVybWluYXRlZCBhcnJheSBvZiBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgcHJvZ3JhbS4KKworICAgT1VUTkFNRQlTZXRzIHRoZSBvdXRwdXQgZmlsZSBuYW1lIGFzIGZvbGxvd3M6CisKKwkJUEVYX1NVRkZJWCBzZXQgKE9VVE5BTUUgbWF5IG5vdCBiZSBOVUxMKToKKwkJICBURU1QQkFTRSBwYXJhbWV0ZXIgdG8gcGV4X2luaXQgbm90IE5VTEw6CisJCSAgICBPdXRwdXQgZmlsZSBuYW1lIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIFRFTVBCQVNFCisJCSAgICBhbmQgT1VUTkFNRS4KKwkJICBURU1QQkFTRSBpcyBOVUxMOgorCQkgICAgT3V0cHV0IGZpbGUgbmFtZSBpcyBhIHJhbmRvbSBmaWxlIG5hbWUgZW5kaW5nIGluCisJCSAgICBPVVROQU1FLgorCQlQRVhfU1VGRklYIG5vdCBzZXQ6CisJCSAgT1VUTkFNRSBub3QgTlVMTDoKKwkJICAgIE91dHB1dCBmaWxlIG5hbWUgaXMgT1VUTkFNRS4KKwkJICBPVVROQU1FIE5VTEwsIFRFTVBCQVNFIG5vdCBOVUxMOgorCQkgICAgT3V0cHV0IGZpbGUgbmFtZSBpcyByYW5kb21seSBjaG9zZW4gdXNpbmcKKwkJICAgIFRFTVBCQVNFLgorCQkgIE9VVE5BTUUgTlVMTCwgVEVNUEJBU0UgTlVMTDoKKwkJICAgIE91dHB1dCBmaWxlIG5hbWUgaXMgcmFuZG9tbHkgY2hvc2VuLgorCisJCUlmIFBFWF9MQVNUIGlzIG5vdCBzZXQsIHRoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIHRoZQorICAgCQluYW1lIHRvIHVzZSBmb3IgYSB0ZW1wb3JhcnkgZmlsZSBob2xkaW5nIHN0ZG91dCwgaWYKKyAgIAkJYW55ICh0aGVyZSB3aWxsIG5vdCBiZSBhIGZpbGUgaWYgUEVYX1VTRV9QSVBFUyBpcyBzZXQKKyAgIAkJYW5kIHRoZSBzeXN0ZW0gc3VwcG9ydHMgcGlwZXMpLiAgSWYgYSBmaWxlIGlzIHVzZWQsIGl0CisgICAJCXdpbGwgYmUgcmVtb3ZlZCB3aGVuIG5vIGxvbmdlciBuZWVkZWQgdW5sZXNzCisgICAJCVBFWF9TQVZFX1RFTVBTIGlzIHNldC4KKworCQlJZiBQRVhfTEFTVCBpcyBzZXQsIGFuZCBPVVROQU1FIGlzIG5vdCBOVUxMLCBzdGFuZGFyZAorICAgCQlvdXRwdXQgaXMgd3JpdHRlbiB0byB0aGUgb3V0cHV0IGZpbGUgbmFtZS4gIFRoZSBmaWxlCisgICAJCXdpbGwgbm90IGJlIHJlbW92ZWQuICBJZiBQRVhfTEFTVCBhbmQgUEVYX1NVRkZJWCBhcmUKKyAgIAkJYm90aCBzZXQsIFRFTVBCQVNFIG1heSBub3QgYmUgTlVMTC4KKworICAgRVJSTkFNRQlJZiBub3QgTlVMTCwgdGhpcyBpcyB0aGUgbmFtZSBvZiBhIGZpbGUgdG8gd2hpY2gKKwkJc3RhbmRhcmQgZXJyb3IgaXMgd3JpdHRlbi4gIElmIE5VTEwsIHN0YW5kYXJkIGVycm9yIG9mCisJCXRoZSBwcm9ncmFtIGlzIHN0YW5kYXJkIGVycm9yIG9mIHRoZSBjYWxsZXIuCisKKyAgIEVSUgkJT24gYW4gZXJyb3IgcmV0dXJuLCAqRVJSIGlzIHNldCB0byBhbiBlcnJubyB2YWx1ZSwgb3IKKyAgIAkJdG8gMCBpZiB0aGVyZSBpcyBubyByZWxldmFudCBlcnJuby4KKyovCisKK2V4dGVybiBjb25zdCBjaGFyICpwZXhfcnVuIChzdHJ1Y3QgcGV4X29iaiAqb2JqLCBpbnQgZmxhZ3MsCisJCQkgICAgY29uc3QgY2hhciAqZXhlY3V0YWJsZSwgY2hhciAqIGNvbnN0ICphcmd2LAorCQkJICAgIGNvbnN0IGNoYXIgKm91dG5hbWUsIGNvbnN0IGNoYXIgKmVycm5hbWUsCisJCQkgICAgaW50ICplcnIpOworCisvKiBBcyBmb3IgcGV4X3J1biAoKSwgYnV0IHRha2VzIGFuIGV4dHJhIHBhcmFtZXRlciB0byBlbmFibGUgdGhlCisgICBlbnZpcm9ubWVudCBmb3IgdGhlIGNoaWxkIHByb2Nlc3MgdG8gYmUgc3BlY2lmaWVkLgorCisgICBFTlYJCVRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIGNoaWxkIHByb2Nlc3MsIHNwZWNpZmllZCBhcworCQlhbiBhcnJheSBvZiBjaGFyYWN0ZXIgcG9pbnRlcnMuICBFYWNoIGVsZW1lbnQgb2YgdGhlCisJCWFycmF5IHNob3VsZCBwb2ludCB0byBhIHN0cmluZyBvZiB0aGUgZm9ybSBWQVI9VkFMVUUsCisgICAgICAgICAgICAgICAgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBsYXN0IGVsZW1lbnQgd2hpY2ggbXVzdCBiZQorICAgICAgICAgICAgICAgIGEgbnVsbCBwb2ludGVyLgorKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnBleF9ydW5faW5fZW52aXJvbm1lbnQgKHN0cnVjdCBwZXhfb2JqICpvYmosIGludCBmbGFncywKKwkJCSAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpleGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBjb25zdCAqYXJndiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogY29uc3QgKmVudiwKKyAgICAgICAgICAgICAgCSAgICAgICAgICAJCSAgIGNvbnN0IGNoYXIgKm91dG5hbWUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmVycm5hbWUsIGludCAqZXJyKTsKKworLyogUmV0dXJuIGEgc3RyZWFtIGZvciBhIHRlbXBvcmFyeSBmaWxlIHRvIHBhc3MgdG8gdGhlIGZpcnN0IHByb2dyYW0KKyAgIGluIHRoZSBwaXBlbGluZSBhcyBpbnB1dC4gIFRoZSBmaWxlIG5hbWUgaXMgY2hvc2VuIGFzIGZvciBwZXhfcnVuLgorICAgcGV4X3J1biBjbG9zZXMgdGhlIGZpbGUgYXV0b21hdGljYWxseTsgZG9uJ3QgY2xvc2UgaXQgeW91cnNlbGYuICAqLworCitleHRlcm4gRklMRSAqcGV4X2lucHV0X2ZpbGUgKHN0cnVjdCBwZXhfb2JqICpvYmosIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5fbmFtZSk7CisKKy8qIFJldHVybiBhIHN0cmVhbSBmb3IgYSBwaXBlIGNvbm5lY3RlZCB0byB0aGUgc3RhbmRhcmQgaW5wdXQgb2YgdGhlCisgICBmaXJzdCBwcm9ncmFtIGluIHRoZSBwaXBlbGluZS4gIFlvdSBtdXN0IGhhdmUgcGFzc2VkCisgICBgUEVYX1VTRV9QSVBFUycgdG8gYHBleF9pbml0Jy4gIENsb3NlIHRoZSByZXR1cm5lZCBzdHJlYW0KKyAgIHlvdXJzZWxmLiAgKi8KKworZXh0ZXJuIEZJTEUgKnBleF9pbnB1dF9waXBlIChzdHJ1Y3QgcGV4X29iaiAqb2JqLCBpbnQgYmluYXJ5KTsKKworLyogUmVhZCB0aGUgc3RhbmRhcmQgb3V0cHV0IG9mIHRoZSBsYXN0IHByb2dyYW0gdG8gYmUgZXhlY3V0ZWQuCisgICBwZXhfcnVuIGNhbiBub3QgYmUgY2FsbGVkIGFmdGVyIHRoaXMuICBCSU5BUlkgc2hvdWxkIGJlIG5vbi16ZXJvIGlmCisgICB0aGUgZmlsZSBzaG91bGQgYmUgb3BlbmVkIGluIGJpbmFyeSBtb2RlOyB0aGlzIGlzIGlnbm9yZWQgb24gVW5peC4KKyAgIFJldHVybnMgTlVMTCBvbiBlcnJvci4gIERvbid0IGNhbGwgZmNsb3NlIG9uIHRoZSByZXR1cm5lZCBGSUxFOyBpdAorICAgd2lsbCBiZSBjbG9zZWQgYnkgcGV4X2ZyZWUuICAqLworCitleHRlcm4gRklMRSAqcGV4X3JlYWRfb3V0cHV0IChzdHJ1Y3QgcGV4X29iaiAqLCBpbnQgYmluYXJ5KTsKKworLyogUmVhZCB0aGUgc3RhbmRhcmQgZXJyb3Igb2YgdGhlIGxhc3QgcHJvZ3JhbSB0byBiZSBleGVjdXRlZC4KKyAgIHBleF9ydW4gY2FuIG5vdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcy4gIEJJTkFSWSBzaG91bGQgYmUgbm9uLXplcm8gaWYKKyAgIHRoZSBmaWxlIHNob3VsZCBiZSBvcGVuZWQgaW4gYmluYXJ5IG1vZGU7IHRoaXMgaXMgaWdub3JlZCBvbiBVbml4LgorICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLiAgRG9uJ3QgY2FsbCBmY2xvc2Ugb24gdGhlIHJldHVybmVkIEZJTEU7IGl0CisgICB3aWxsIGJlIGNsb3NlZCBieSBwZXhfZnJlZS4gICovCisKK2V4dGVybiBGSUxFICpwZXhfcmVhZF9lcnIgKHN0cnVjdCBwZXhfb2JqICosIGludCBiaW5hcnkpOworCisvKiBSZXR1cm4gZXhpdCBzdGF0dXMgb2YgYWxsIHByb2dyYW1zIGluIFZFQ1RPUi4gIENPVU5UIGluZGljYXRlcyB0aGUKKyAgIHNpemUgb2YgVkVDVE9SLiAgVGhlIHN0YXR1cyBjb2RlcyBpbiB0aGUgdmVjdG9yIGFyZSBpbiB0aGUgb3JkZXIgb2YKKyAgIHRoZSBjYWxscyB0byBwZXhfcnVuLiAgUmV0dXJucyAwIG9uIGVycm9yLCAxIG9uIHN1Y2Nlc3MuICAqLworCitleHRlcm4gaW50IHBleF9nZXRfc3RhdHVzIChzdHJ1Y3QgcGV4X29iaiAqLCBpbnQgY291bnQsIGludCAqdmVjdG9yKTsKKworLyogUmV0dXJuIHRpbWVzIG9mIGFsbCBwcm9ncmFtcyBpbiBWRUNUT1IuICBDT1VOVCBpbmRpY2F0ZXMgdGhlIHNpemUKKyAgIG9mIFZFQ1RPUi4gIHN0cnVjdCBwZXhfdGltZSBpcyByZWFsbHkganVzdCBzdHJ1Y3QgdGltZXZhbCwgYnV0IHRoYXQKKyAgIGlzIG5vdCBwb3J0YWJsZSB0byBhbGwgc3lzdGVtcy4gIFJldHVybnMgMCBvbiBlcnJvciwgMSBvbgorICAgc3VjY2Vzcy4gICovCisKK3N0cnVjdCBwZXhfdGltZQoreworICB1bnNpZ25lZCBsb25nIHVzZXJfc2Vjb25kczsKKyAgdW5zaWduZWQgbG9uZyB1c2VyX21pY3Jvc2Vjb25kczsKKyAgdW5zaWduZWQgbG9uZyBzeXN0ZW1fc2Vjb25kczsKKyAgdW5zaWduZWQgbG9uZyBzeXN0ZW1fbWljcm9zZWNvbmRzOworfTsKKworZXh0ZXJuIGludCBwZXhfZ2V0X3RpbWVzIChzdHJ1Y3QgcGV4X29iaiAqLCBpbnQgY291bnQsCisJCQkgIHN0cnVjdCBwZXhfdGltZSAqdmVjdG9yKTsKKworLyogQ2xlYW4gdXAgYSBwZXhfb2JqLiAgSWYgeW91IGhhdmUgbm90IGNhbGxlZCBwZXhfZ2V0X3RpbWVzIG9yCisgICBwZXhfZ2V0X3N0YXR1cywgdGhpcyB3aWxsIHRyeSB0byBraWxsIHRoZSBzdWJwcm9jZXNzZXMuICAqLworCitleHRlcm4gdm9pZCBwZXhfZnJlZSAoc3RydWN0IHBleF9vYmogKik7CisKKy8qIEp1c3QgZXhlY3V0ZSBvbmUgcHJvZ3JhbS4gIFJldHVybiB2YWx1ZSBpcyBhcyBmb3IgcGV4X3J1bi4KKyAgIEZMQUdTCUNvbWJpbmF0aW9uIG9mIFBFWF9TRUFSQ0ggYW5kIFBFWF9TVERFUlJfVE9fU1RET1VULgorICAgRVhFQ1VUQUJMRQlBcyBmb3IgcGV4X3J1bi4KKyAgIEFSR1YJCUFzIGZvciBwZXhfcnVuLgorICAgUE5BTUUJQXMgZm9yIHBleF9pbml0LgorICAgT1VUTkFNRQlBcyBmb3IgcGV4X3J1biB3aGVuIFBFWF9MQVNUIGlzIHNldC4KKyAgIEVSUk5BTUUJQXMgZm9yIHBleF9ydW4uCisgICBTVEFUVVMJU2V0IHRvIGV4aXQgc3RhdHVzIG9uIHN1Y2Nlc3MuCisgICBFUlIJCUFzIGZvciBwZXhfcnVuLgorKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKnBleF9vbmUgKGludCBmbGFncywgY29uc3QgY2hhciAqZXhlY3V0YWJsZSwKKwkJCSAgICBjaGFyICogY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKnBuYW1lLAorCQkJICAgIGNvbnN0IGNoYXIgKm91dG5hbWUsIGNvbnN0IGNoYXIgKmVycm5hbWUsCisJCQkgICAgaW50ICpzdGF0dXMsIGludCAqZXJyKTsKKworLyogcGV4ZWN1dGUgYW5kIHB3YWl0IGFyZSB0aGUgb2xkIHBleGVjdXRlIGludGVyZmFjZSwgc3RpbGwgaGVyZSBmb3IKKyAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBEb24ndCB1c2UgdGhlc2UgZm9yIG5ldyBjb2RlLiAgSW5zdGVhZCwKKyAgIHVzZSBwZXhfaW5pdC9wZXhfcnVuL3BleF9nZXRfc3RhdHVzL3BleF9mcmVlLCBvciBwZXhfb25lLiAgKi8KKworLyogRGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgcGV4ZWN1dGUgcm91dGluZS4gICovCisKKyNkZWZpbmUgUEVYRUNVVEVfRklSU1QgICAxCisjZGVmaW5lIFBFWEVDVVRFX0xBU1QgICAgMgorI2RlZmluZSBQRVhFQ1VURV9PTkUgICAgIChQRVhFQ1VURV9GSVJTVCArIFBFWEVDVVRFX0xBU1QpCisjZGVmaW5lIFBFWEVDVVRFX1NFQVJDSCAgNAorI2RlZmluZSBQRVhFQ1VURV9WRVJCT1NFIDgKKworLyogRXhlY3V0ZSBhIHByb2dyYW0uICAqLworCitleHRlcm4gaW50IHBleGVjdXRlIChjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNoYXIgKiosIGNoYXIgKiosIGludCk7CisKKy8qIFdhaXQgZm9yIHBleGVjdXRlIHRvIGZpbmlzaC4gICovCisKK2V4dGVybiBpbnQgcHdhaXQgKGludCwgaW50ICosIGludCk7CisKKyNpZiAhSEFWRV9ERUNMX0FTUFJJTlRGCisvKiBMaWtlIHNwcmludGYgYnV0IHByb3ZpZGVzIGEgcG9pbnRlciB0byBtYWxsb2MnZCBzdG9yYWdlLCB3aGljaCBtdXN0CisgICBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKworZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pIEFUVFJJQlVURV9QUklOVEZfMjsKKyNlbmRpZgorCisjaWYgIUhBVkVfREVDTF9WQVNQUklOVEYKKy8qIExpa2UgdnNwcmludGYgYnV0IHByb3ZpZGVzIGEgcG9pbnRlciB0byBtYWxsb2MnZCBzdG9yYWdlLCB3aGljaAorICAgbXVzdCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKworZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkgQVRUUklCVVRFX1BSSU5URigyLDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfREVDTF9TTlBSSU5URikgJiYgIUhBVkVfREVDTF9TTlBSSU5URgorLyogTGlrZSBzcHJpbnRmIGJ1dCBwcmludHMgYXQgbW9zdCBOIGNoYXJhY3RlcnMuICAqLworZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzM7CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9ERUNMX1ZTTlBSSU5URikgJiYgIUhBVkVfREVDTF9WU05QUklOVEYKKy8qIExpa2UgdnNwcmludGYgYnV0IHByaW50cyBhdCBtb3N0IE4gY2hhcmFjdGVycy4gICovCitleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkgQVRUUklCVVRFX1BSSU5URigzLDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfREVDTF9TVFJWRVJTQ01QKSAmJiAhSEFWRV9ERUNMX1NUUlZFUlNDTVAKKy8qIENvbXBhcmUgdmVyc2lvbiBzdHJpbmdzLiAgKi8KK2V4dGVybiBpbnQgc3RydmVyc2NtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKKy8qIFNldCB0aGUgdGl0bGUgb2YgYSBwcm9jZXNzICovCitleHRlcm4gdm9pZCBzZXRwcm9jdGl0bGUgKGNvbnN0IGNoYXIgKm5hbWUsIC4uLik7CisKKy8qIEluY3JlYXNlIHN0YWNrIGxpbWl0IGlmIHBvc3NpYmxlLiAgKi8KK2V4dGVybiB2b2lkIHN0YWNrX2xpbWl0X2luY3JlYXNlICh1bnNpZ25lZCBsb25nKTsKKworI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YgKGEpIC8gc2l6ZW9mICgoYSlbMF0pKQorCisvKiBEcmFzdGljYWxseSBzaW1wbGlmaWVkIGFsbG9jYSBjb25maWd1cmF0b3IuICBJZiB3ZSdyZSB1c2luZyBHQ0MsCisgICB3ZSB1c2UgX19idWlsdGluX2FsbG9jYTsgb3RoZXJ3aXNlIHdlIHVzZSB0aGUgQyBhbGxvY2EuICBUaGUgQworICAgYWxsb2NhIGlzIGFsd2F5cyBhdmFpbGFibGUuICBZb3UgY2FuIG92ZXJyaWRlIEdDQyBieSBkZWZpbmluZworICAgVVNFX0NfQUxMT0NBIHlvdXJzZWxmLiAgVGhlIGNhbm9uaWNhbCBhdXRvY29uZiBtYWNybyBDX0FMTE9DQSBpcworICAgYWxzbyBzZXQvdW5zZXQgYXMgaXQgaXMgb2Z0ZW4gdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGNvZGUgbmVlZHMKKyAgIHRvIGNhbGwgYWxsb2NhKDApLiAgKi8KK2V4dGVybiB2b2lkICpDX2FsbG9jYSAoc2l6ZV90KSBBVFRSSUJVVEVfTUFMTE9DOworI3VuZGVmIGFsbG9jYQorI2lmIEdDQ19WRVJTSU9OID49IDIwMDAgJiYgIWRlZmluZWQgVVNFX0NfQUxMT0NBCisjIGRlZmluZSBhbGxvY2EoeCkgX19idWlsdGluX2FsbG9jYSh4KQorIyB1bmRlZiBDX0FMTE9DQQorIyBkZWZpbmUgQVNUUkRVUChYKSBcCisgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IGNoYXIgKmNvbnN0IGxpYmliZXJ0eV9vcHRyID0gKFgpOyBcCisgICBjb25zdCB1bnNpZ25lZCBsb25nIGxpYmliZXJ0eV9sZW4gPSBzdHJsZW4gKGxpYmliZXJ0eV9vcHRyKSArIDE7IFwKKyAgIGNoYXIgKmNvbnN0IGxpYmliZXJ0eV9ucHRyID0gKGNoYXIgKmNvbnN0KSBhbGxvY2EgKGxpYmliZXJ0eV9sZW4pOyBcCisgICAoY2hhciAqKSBtZW1jcHkgKGxpYmliZXJ0eV9ucHRyLCBsaWJpYmVydHlfb3B0ciwgbGliaWJlcnR5X2xlbik7IH0pKQorI2Vsc2UKKyMgZGVmaW5lIGFsbG9jYSh4KSBDX2FsbG9jYSh4KQorIyB1bmRlZiBVU0VfQ19BTExPQ0EKKyMgZGVmaW5lIFVTRV9DX0FMTE9DQSAxCisjIHVuZGVmIENfQUxMT0NBCisjIGRlZmluZSBDX0FMTE9DQSAxCitleHRlcm4gY29uc3QgY2hhciAqbGliaWJlcnR5X29wdHI7CitleHRlcm4gY2hhciAqbGliaWJlcnR5X25wdHI7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsaWJpYmVydHlfbGVuOworIyBkZWZpbmUgQVNUUkRVUChYKSBcCisgIChsaWJpYmVydHlfb3B0ciA9IChYKSwgXAorICAgbGliaWJlcnR5X2xlbiA9IHN0cmxlbiAobGliaWJlcnR5X29wdHIpICsgMSwgXAorICAgbGliaWJlcnR5X25wdHIgPSAoY2hhciAqKSBhbGxvY2EgKGxpYmliZXJ0eV9sZW4pLCBcCisgICAoY2hhciAqKSBtZW1jcHkgKGxpYmliZXJ0eV9ucHRyLCBsaWJpYmVydHlfb3B0ciwgbGliaWJlcnR5X2xlbikpCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogISBkZWZpbmVkIChMSUJJQkVSVFlfSCkgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9saW5lLW1hcC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL2xpbmUtbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkNmRhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9saW5lLW1hcC5oCkBAIC0wLDAgKzEsNzc3IEBACisvKiBNYXAgbG9naWNhbCBsaW5lIG51bWJlcnMgdG8gKHNvdXJjZSBmaWxlLCBsaW5lIG51bWJlcikgcGFpcnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyBJbiBvdGhlciB3b3JkcywgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUgdGhpcyBwcm9ncmFtLgorIFlvdSBhcmUgZm9yYmlkZGVuIHRvIGZvcmJpZCBhbnlvbmUgZWxzZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlCisgd2hhdCB5b3UgZ2l2ZSB0aGVtLiAgIEhlbHAgc3RhbXAgb3V0IHNvZnR3YXJlLWhvYXJkaW5nISAgKi8KKworI2lmbmRlZiBMSUJDUFBfTElORV9NQVBfSAorI2RlZmluZSBMSUJDUFBfTElORV9NQVBfSAorCisjaWZuZGVmIEdUWQorI2RlZmluZSBHVFkoeCkgLyogbm90aGluZyAqLworI2VuZGlmCisKKy8qIFJlYXNvbiBmb3IgY3JlYXRpbmcgYSBuZXcgbGluZSBtYXAgd2l0aCBsaW5lbWFwX2FkZC4gIExDX0VOVEVSIGlzCisgICB3aGVuIGluY2x1ZGluZyBhIG5ldyBmaWxlLCBlLmcuIGEgI2luY2x1ZGUgZGlyZWN0aXZlIGluIEMuCisgICBMQ19MRUFWRSBpcyB3aGVuIHJlYWNoaW5nIGEgZmlsZSdzIGVuZC4gIExDX1JFTkFNRSBpcyB3aGVuIGEgZmlsZQorICAgbmFtZSBvciBsaW5lIG51bWJlciBjaGFuZ2VzIGZvciBuZWl0aGVyIG9mIHRoZSBhYm92ZSByZWFzb25zCisgICAoZS5nLiBhICNsaW5lIGRpcmVjdGl2ZSBpbiBDKTsgTENfUkVOQU1FX1ZFUkJBVElNIGlzIGxpa2UgTENfUkVOQU1FCisgICBidXQgYSBmaWxlbmFtZSBvZiAiIiBpcyBub3Qgc3BlY2lhbGx5IGludGVycHJldGVkIGFzIHN0YW5kYXJkCisgICBpbnB1dC4gTENfRU5URVJfTUFDUk8gaXMgd2hlbiBhIG1hY3JvIGV4cGFuc2lvbiBpcyBhYm91dCB0byBzdGFydC4gICovCitlbnVtIGxjX3JlYXNvbgoreworICBMQ19FTlRFUiA9IDAsCisgIExDX0xFQVZFLAorICBMQ19SRU5BTUUsCisgIExDX1JFTkFNRV9WRVJCQVRJTSwKKyAgTENfRU5URVJfTUFDUk8KKyAgLyogRklYTUU6IGFkZCBzdXBwb3J0IGZvciBzdHJpbmdpemUgYW5kIHBhc3RlLiAgKi8KK307CisKKy8qIFRoZSB0eXBlIG9mIGxpbmUgbnVtYmVycy4gICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBsaW5lbnVtX3R5cGU7CisKKy8qIEEgbG9naWNhbCBsaW5lL2NvbHVtbiBudW1iZXIsIGkuZS4gYW4gImluZGV4IiBpbnRvIGEgbGluZV9tYXAuICAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgc291cmNlX2xvY2F0aW9uOworCisvKiBNZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiB0eXBlZGVmLiAgV29ya3MgbGlrZSB4cmVhbGxvYy4gICovCit0eXBlZGVmIHZvaWQgKigqbGluZV9tYXBfcmVhbGxvYykgKHZvaWQgKiwgc2l6ZV90KTsKKworLyogTWVtb3J5IGFsbG9jYXRvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGFjdHVhbCBhbGxvY2F0ZWQgc2l6ZSwKKyAgIGZvciBhIGdpdmVuIHJlcXVlc3RlZCBhbGxvY2F0aW9uLiAgKi8KK3R5cGVkZWYgc2l6ZV90ICgqbGluZV9tYXBfcm91bmRfYWxsb2Nfc2l6ZV9mdW5jKSAoc2l6ZV90KTsKKworLyogQW4gb3JkaW5hcnkgbGluZSBtYXAgZW5jb2RlcyBwaHlzaWNhbCBzb3VyY2UgbG9jYXRpb25zLiBUaG9zZQorICAgcGh5c2ljYWwgc291cmNlIGxvY2F0aW9ucyBhcmUgY2FsbGVkICJzcGVsbGluZyBsb2NhdGlvbnMiLgorICAgCisgICBQaHlzaWNhbCBzb3VyY2UgZmlsZSBUT19GSUxFIGF0IGxpbmUgVE9fTElORSBhdCBjb2x1bW4gMCBpcyByZXByZXNlbnRlZAorICAgYnkgdGhlIGxvZ2ljYWwgU1RBUlRfTE9DQVRJT04uICBUT19MSU5FK0wgYXQgY29sdW1uIEMgaXMgcmVwcmVzZW50ZWQgYnkKKyAgIFNUQVJUX0xPQ0FUSU9OKyhMKigxPDxjb2x1bW5fYml0cykpK0MsIGFzIGxvbmcgYXMgQzwoMTw8Y29sdW1uX2JpdHMpLAorICAgYW5kIHRoZSByZXN1bHRfbG9jYXRpb24gaXMgbGVzcyB0aGFuIHRoZSBuZXh0IGxpbmVfbWFwJ3Mgc3RhcnRfbG9jYXRpb24uCisgICAoVGhlIHRvcCBsaW5lIGlzIGxpbmUgMSBhbmQgdGhlIGxlZnRtb3N0IGNvbHVtbiBpcyBjb2x1bW4gMTsgbGluZS9jb2x1bW4gMAorICAgbWVhbnMgImVudGlyZSBmaWxlL2xpbmUiIG9yICJ1bmtub3duIGxpbmUvY29sdW1uIiBvciAibm90IGFwcGxpY2FibGUiLikKKworICAgVGhlIGhpZ2hlc3QgcG9zc2libGUgc291cmNlIGxvY2F0aW9uIGlzIE1BWF9TT1VSQ0VfTE9DQVRJT04uICAqLworc3RydWN0IEdUWSgoKSkgbGluZV9tYXBfb3JkaW5hcnkgeworICBjb25zdCBjaGFyICp0b19maWxlOworICBsaW5lbnVtX3R5cGUgdG9fbGluZTsKKworICAvKiBBbiBpbmRleCBpbnRvIHRoZSBzZXQgdGhhdCBnaXZlcyB0aGUgbGluZSBtYXBwaW5nIGF0IHdob3NlIGVuZAorICAgICB0aGUgY3VycmVudCBvbmUgd2FzIGluY2x1ZGVkLiAgRmlsZShzKSBhdCB0aGUgYm90dG9tIG9mIHRoZQorICAgICBpbmNsdWRlIHN0YWNrIGhhdmUgdGhpcyBzZXQgdG8gLTEuICAqLworICBpbnQgaW5jbHVkZWRfZnJvbTsKKworICAvKiBTWVNQIGlzIG9uZSBmb3IgYSBzeXN0ZW0gaGVhZGVyLCB0d28gZm9yIGEgQyBzeXN0ZW0gaGVhZGVyIGZpbGUKKyAgICAgdGhhdCB0aGVyZWZvcmUgbmVlZHMgdG8gYmUgZXh0ZXJuICJDIiBwcm90ZWN0ZWQgaW4gQysrLCBhbmQgemVybworICAgICBvdGhlcndpc2UuICBUaGlzIGZpZWxkIGlzbid0IHJlYWxseSBuZWVkZWQgbm93IHRoYXQgaXQncyBpbgorICAgICBjcHBfYnVmZmVyLiAgKi8KKyAgdW5zaWduZWQgY2hhciBzeXNwOworCisgIC8qIE51bWJlciBvZiB0aGUgbG93LW9yZGVyIHNvdXJjZV9sb2NhdGlvbiBiaXRzIHVzZWQgZm9yIGEgY29sdW1uIG51bWJlci4gICovCisgIHVuc2lnbmVkIGludCBjb2x1bW5fYml0cyA6IDg7Cit9OworCisvKiBUaGlzIGlzIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHNvdXJjZSBsb2NhdGlvbiBlbmNvZGVkIHdpdGhpbiBhbgorICAgb3JkaW5hcnkgb3IgbWFjcm8gbWFwLiAgKi8KKyNkZWZpbmUgTUFYX1NPVVJDRV9MT0NBVElPTiAweDdGRkZGRkZGCisKK3N0cnVjdCBjcHBfaGFzaG5vZGU7CisKKy8qIEEgbWFjcm8gbGluZSBtYXAgZW5jb2RlcyBsb2NhdGlvbiBvZiB0b2tlbnMgY29taW5nIGZyb20gYSBtYWNybworICAgZXhwYW5zaW9uLgorICAgCisgICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgc3RydWN0IGxpbmVfbWFwX21hY3JvIGlzIGEgZmllbGQgb2Ygc3RydWN0CisgICBsaW5lX21hcCBiZWxvdywgZ28gcmVhZCB0aGUgY29tbWVudHMgb2Ygc3RydWN0IGxpbmVfbWFwIGJlbG93IGFuZAorICAgdGhlbiBjb21lIGJhY2sgaGVyZS4KKyAgIAorICAgVGhlIG9mZnNldCBmcm9tIFNUQVJUX0xPQ0FUSU9OIGlzIHVzZWQgdG8gaW5kZXggaW50bworICAgTUFDUk9fTE9DQVRJT05TOyB0aGlzIGhvbGRzIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBvZiB0aGUgdG9rZW4uICAqLworc3RydWN0IEdUWSgoKSkgbGluZV9tYXBfbWFjcm8geworICAvKiBUaGUgY3BwIG1hY3JvIHdoaWNoIGV4cGFuc2lvbiBnYXZlIGJpcnRoIHRvIHRoaXMgbWFjcm8gbWFwLiAgKi8KKyAgc3RydWN0IGNwcF9oYXNobm9kZSAqIEdUWSAoKG5lc3RlZF9wdHIgKHVuaW9uIHRyZWVfbm9kZSwKKwkJCQkgICAiJWggPyBDUFBfSEFTSE5PREUgKEdDQ19JREVOVF9UT19IVF9JREVOVCAoJWgpKSA6IE5VTEwiLAorCQkJCSAgICIlaCA/IEhUX0lERU5UX1RPX0dDQ19JREVOVCAoSFRfTk9ERSAoJWgpKSA6IE5VTEwiKSkpCisgICAgbWFjcm87CisKKyAgLyogVGhlIG51bWJlciBvZiB0b2tlbnMgaW5zaWRlIHRoZSByZXBsYWNlbWVudC1saXN0IG9mIE1BQ1JPLiAgKi8KKyAgdW5zaWduZWQgaW50IG5fdG9rZW5zOworCisgIC8qIFRoaXMgYXJyYXkgb2YgbG9jYXRpb24gaXMgYWN0dWFsbHkgYW4gYXJyYXkgb2YgcGFpcnMgb2YKKyAgICAgbG9jYXRpb25zLiBUaGUgZWxlbWVudHMgaW5zaWRlIGl0IHRodXMgbG9vayBsaWtlOgorCisgICAgICAgICAgIHgwLHkwLCB4MSx5MSwgeDIseTIsIC4uLi4sIHhuLHluLgorCisgICAgIHdoZXJlIG4gPT0gbl90b2tlbnM7CisKKyAgICAgUmVtZW1iZXIgdGhhdCB0aGVzZSB4SSx5SSBhcmUgY29sbGVjdGVkIHdoZW4gbGliY3BwIGlzIGFib3V0IHRvCisgICAgIGV4cGFuZCBhIGdpdmVuIG1hY3JvLgorCisgICAgIHlJIGlzIHRoZSBsb2NhdGlvbiBpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbiwgZWl0aGVyIG9mIHRoZSB0b2tlbgorICAgICBpdHNlbGYgb3Igb2YgYSBtYWNybyBwYXJhbWV0ZXIgdGhhdCBpdCByZXBsYWNlcy4KKworICAgICBJbWFnaW5lIHRoaXM6CisKKwkjZGVmaW5lIFBMVVMoQSwgQikgQSArIEIgIDwtLS0gIzEKKworCWludCBhID0gUExVUyAoMSwyKTsgPC0tLSAjMgorCisgICAgIFRoZXJlIGlzIGEgbWFjcm8gbWFwIGZvciB0aGUgZXhwYW5zaW9uIG9mIFBMVVMgaW4gIzIuICBQTFVTIGlzCisgICAgIGV4cGFuZGVkIGludG8gaXRzIGV4cGFuc2lvbi1saXN0LiAgVGhlIGV4cGFuc2lvbi1saXN0IGlzIHRoZQorICAgICByZXBsYWNlbWVudC1saXN0IG9mIFBMVVMgd2hlcmUgdGhlIG1hY3JvIHBhcmFtZXRlcnMgYXJlIHJlcGxhY2VkCisgICAgIHdpdGggdGhlaXIgYXJndW1lbnRzLiAgU28gdGhlIHJlcGxhY2VtZW50LWxpc3Qgb2YgUExVUyBpcyBtYWRlIG9mCisgICAgIHRoZSB0b2tlbnM6CisKKyAgICAgICAgQSwgKywgQgorCisgICAgIGFuZCB0aGUgZXhwYW5zaW9uLWxpc3QgaXMgbWFkZSBvZiB0aGUgdG9rZW5zOgorCisgICAgICAgIDEsICssIDIKKworICAgICBMZXQncyBjb25zaWRlciB0aGUgY2FzZSBvZiB0b2tlbiAiKyIuICBJdHMgeTEgW3lJIGZvciBJID09IDFdIGlzCisgICAgIGl0cyBzcGVsbGluZyBsb2NhdGlvbiBpbiAjMS4KKworICAgICB5MCAodGh1cyBmb3IgdG9rZW4gIjEiKSBpcyB0aGUgc3BlbGxpbmcgbG9jYXRpb24gb2YgQSBpbiAjMS4KKworICAgICBBbmQgeTIgKG9mIHRva2VuICIyIikgaXMgdGhlIHNwZWxsaW5nIGxvY2F0aW9uIG9mIEIgaW4gIzEuCisKKyAgICAgV2hlbiB0aGUgdG9rZW4gaXMgL25vdC8gYW4gYXJndW1lbnQgZm9yIGEgbWFjcm8sIHhJIGlzIHRoZSBzYW1lCisgICAgIGxvY2F0aW9uIGFzIHlJLiAgT3RoZXJ3aXNlLCB4SSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIHRva2VuCisgICAgIG91dHNpZGUgdGhpcyBtYWNybyBleHBhbnNpb24uICBJZiB0aGlzIG1hY3JvIHdhcyBleHBhbmRlZCBmcm9tCisgICAgIGFub3RoZXIgbWFjcm8gZXhwYW5zaW9uLCB4SSBpcyBhIHZpcnR1YWwgbG9jYXRpb24gcmVwcmVzZW50aW5nCisgICAgIHRoZSB0b2tlbiBpbiB0aGF0IG1hY3JvIGV4cGFuc2lvbjsgb3RoZXJ3aXNlLCBpdCBpcyB0aGUgc3BlbGxpbmcKKyAgICAgbG9jYXRpb24gb2YgdGhlIHRva2VuLgorCisgICAgIE5vdGUgdGhhdCBhIHZpcnR1YWwgbG9jYXRpb24gaXMgYSBsb2NhdGlvbiByZXR1cm5lZCBieQorICAgICBsaW5lbWFwX2FkZF9tYWNyb190b2tlbi4gIEl0IGVuY29kZXMgdGhlIHJlbGV2YW50IGxvY2F0aW9ucyAoeCx5CisgICAgIHBhaXJzKSBvZiB0aGF0IHRva2VuIGFjcm9zcyB0aGUgbWFjcm8gZXhwYW5zaW9ucyBmcm9tIHdoaWNoIGl0CisgICAgICh0aGUgdG9rZW4pIG1pZ2h0IGNvbWUgZnJvbS4KKworICAgICBJbiB0aGUgZXhhbXBsZSBhYm92ZSB4MSAoZm9yIHRva2VuICIrIikgaXMgZ29pbmcgdG8gYmUgdGhlIHNhbWUKKyAgICAgYXMgeTEuICB4MCBpcyB0aGUgc3BlbGxpbmcgbG9jYXRpb24gZm9yIHRoZSBhcmd1bWVudCB0b2tlbiAiMSIsCisgICAgIGFuZCB4MiBpcyB0aGUgc3BlbGxpbmcgbG9jYXRpb24gZm9yIHRoZSBhcmd1bWVudCB0b2tlbiAiMiIuICAqLworICBzb3VyY2VfbG9jYXRpb24gKiBHVFkoKGF0b21pYykpIG1hY3JvX2xvY2F0aW9uczsKKworICAvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXhwYW5zaW9uIHBvaW50IG9mIHRoZSBjdXJyZW50IG1hY3JvCisgICAgIG1hcC4gIEl0J3MgdGhlIGxvY2F0aW9uIG9mIHRoZSBtYWNybyBuYW1lLiAgVGhhdCBsb2NhdGlvbiBpcyBoZWxkCisgICAgIGJ5IHRoZSBtYXAgdGhhdCB3YXMgY3VycmVudCByaWdodCBiZWZvcmUgdGhlIGN1cnJlbnQgb25lLiBJdAorICAgICBjb3VsZCBoYXZlIGJlZW4gZWl0aGVyIGEgbWFjcm8gb3IgYW4gb3JkaW5hcnkgbWFwLCBkZXBlbmRpbmcgb24KKyAgICAgaWYgd2UgYXJlIGluIGEgbmVzdGVkIGV4cGFuc2lvbiBjb250ZXh0IG5vdC4gICovCisgIHNvdXJjZV9sb2NhdGlvbiBleHBhbnNpb247Cit9OworCisvKiBBIGxpbmVfbWFwIGVuY29kZXMgYSBzZXF1ZW5jZSBvZiBsb2NhdGlvbnMuCisgICBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIG1hcHMuIE9yZGluYXJ5IG1hcHMgYW5kIG1hY3JvIGV4cGFuc2lvbgorICAgbWFwcywgYS5rLmEgbWFjcm8gbWFwcy4KKworICAgQSBtYWNybyBtYXAgZW5jb2RlcyBzb3VyY2UgbG9jYXRpb25zIG9mIHRva2VucyB0aGF0IGFyZSBwYXJ0IG9mIGEKKyAgIG1hY3JvIHJlcGxhY2VtZW50LWxpc3QsIGF0IGEgbWFjcm8gZXhwYW5zaW9uIHBvaW50LiBFLmcsIGluOgorCisgICAgICAgICAgICAjZGVmaW5lIFBMVVMoQSxCKSBBICsgQgorCisgICBObyBtYWNybyBtYXAgaXMgZ29pbmcgdG8gYmUgY3JlYXRlZCB0aGVyZSwgYmVjYXVzZSB3ZSBhcmUgbm90IGF0IGEKKyAgIG1hY3JvIGV4cGFuc2lvbiBwb2ludC4gV2UgYXJlIGF0IGEgbWFjcm8gL2RlZmluaXRpb24vIHBvaW50LiBTbyB0aGUKKyAgIGxvY2F0aW9ucyBvZiB0aGUgdG9rZW5zIG9mIHRoZSBtYWNybyByZXBsYWNlbWVudC1saXN0IChpLmUsIEEgKyBCKQorICAgd2lsbCBiZSBsb2NhdGlvbnMgaW4gYW4gb3JkaW5hcnkgbWFwLCBub3QgYSBtYWNybyBtYXAuCisKKyAgIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBsYXRlciBkbzoKKworICAgICAgICBpbnQgYSA9IFBMVVMgKDEsMik7CisKKyAgIFRoZSBpbnZvY2F0aW9uIG9mIFBMVVMgaGVyZSBpcyBhIG1hY3JvIGV4cGFuc2lvbi4gU28gd2UgYXJlIGF0IGEKKyAgIG1hY3JvIGV4cGFuc2lvbiBwb2ludC4gVGhlIHByZXByb2Nlc3NvciBleHBhbmRzIFBMVVMgKDEsMikgYW5kCisgICByZXBsYWNlcyBpdCB3aXRoIHRoZSB0b2tlbnMgb2YgaXRzIHJlcGxhY2VtZW50LWxpc3Q6IDEgKyAyLiBBIG1hY3JvCisgICBtYXAgaXMgZ29pbmcgdG8gYmUgY3JlYXRlZCB0byBob2xkIChvciByYXRoZXIgdG8gbWFwLCBoYWhhIC4uLikgdGhlCisgICBsb2NhdGlvbnMgb2YgdGhlIHRva2VucyAxLCArIGFuZCAyLiBUaGUgbWFjcm8gbWFwIGFsc28gcmVjb3JkcyB0aGUKKyAgIGxvY2F0aW9uIG9mIHRoZSBleHBhbnNpb24gcG9pbnQgb2YgUExVUy4gVGhhdCBsb2NhdGlvbiBpcyBtYXBwZWQgaW4KKyAgIHRoZSBtYXAgdGhhdCBpcyBhY3RpdmUgcmlnaHQgYmVmb3JlIHRoZSBsb2NhdGlvbiBvZiB0aGUgaW52b2NhdGlvbgorICAgb2YgUExVUy4gICovCitzdHJ1Y3QgR1RZKCgpKSBsaW5lX21hcCB7CisgIHNvdXJjZV9sb2NhdGlvbiBzdGFydF9sb2NhdGlvbjsKKworICAvKiBUaGUgcmVhc29uIGZvciBjcmVhdGlvbiBvZiB0aGlzIGxpbmUgbWFwLiAgKi8KKyAgRU5VTV9CSVRGSUVMRCAobGNfcmVhc29uKSByZWFzb24gOiBDSEFSX0JJVDsKKworICB1bmlvbiBtYXBfdSB7CisgICAgc3RydWN0IGxpbmVfbWFwX29yZGluYXJ5IEdUWSgodGFnICgiMCIpKSkgb3JkaW5hcnk7CisgICAgc3RydWN0IGxpbmVfbWFwX21hY3JvIEdUWSgodGFnICgiMSIpKSkgbWFjcm87CisgIH0gR1RZKChkZXNjICgiJTEucmVhc29uID09IExDX0VOVEVSX01BQ1JPIikpKSBkOworfTsKKworI2RlZmluZSBNQVBfU1RBUlRfTE9DQVRJT04oTUFQKSAoTUFQKS0+c3RhcnRfbG9jYXRpb24KKworI2RlZmluZSBPUkRJTkFSWV9NQVBfRklMRV9OQU1FKE1BUCkgXAorICBsaW5lbWFwX2NoZWNrX29yZGluYXJ5IChNQVApLT5kLm9yZGluYXJ5LnRvX2ZpbGUKKworI2RlZmluZSBPUkRJTkFSWV9NQVBfU1RBUlRJTkdfTElORV9OVU1CRVIoTUFQKSBcCisgIGxpbmVtYXBfY2hlY2tfb3JkaW5hcnkgKE1BUCktPmQub3JkaW5hcnkudG9fbGluZQorCisjZGVmaW5lIE9SRElOQVJZX01BUF9JTkNMVURFUl9GSUxFX0lOREVYKE1BUCkgXAorICBsaW5lbWFwX2NoZWNrX29yZGluYXJ5IChNQVApLT5kLm9yZGluYXJ5LmluY2x1ZGVkX2Zyb20KKworI2RlZmluZSBPUkRJTkFSWV9NQVBfSU5fU1lTVEVNX0hFQURFUl9QKE1BUCkgXAorICBsaW5lbWFwX2NoZWNrX29yZGluYXJ5IChNQVApLT5kLm9yZGluYXJ5LnN5c3AKKworI2RlZmluZSBPUkRJTkFSWV9NQVBfTlVNQkVSX09GX0NPTFVNTl9CSVRTKE1BUCkgXAorICBsaW5lbWFwX2NoZWNrX29yZGluYXJ5IChNQVApLT5kLm9yZGluYXJ5LmNvbHVtbl9iaXRzCisKKyNkZWZpbmUgTUFDUk9fTUFQX01BQ1JPKE1BUCkgKE1BUCktPmQubWFjcm8ubWFjcm8KKworI2RlZmluZSBNQUNST19NQVBfTlVNX01BQ1JPX1RPS0VOUyhNQVApIChNQVApLT5kLm1hY3JvLm5fdG9rZW5zCisKKyNkZWZpbmUgTUFDUk9fTUFQX0xPQ0FUSU9OUyhNQVApIChNQVApLT5kLm1hY3JvLm1hY3JvX2xvY2F0aW9ucworCisjZGVmaW5lIE1BQ1JPX01BUF9FWFBBTlNJT05fUE9JTlRfTE9DQVRJT04oTUFQKSAoTUFQKS0+ZC5tYWNyby5leHBhbnNpb24KKworLyogVGhlIGFic3RyYWN0aW9uIG9mIGEgc2V0IG9mIGxvY2F0aW9uIG1hcHMuIFRoZXJlIGNhbiBiZSBzZXZlcmFsCisgICB0eXBlcyBvZiBsb2NhdGlvbiBtYXBzLiBUaGlzIGFic3RyYWN0aW9uIGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzCisgICB0aGF0IGFyZSBpbmRlcGVuZGVudCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBtYXAuICAqLworc3RydWN0IEdUWSgoKSkgbWFwc19pbmZvIHsKKyAgLyogVGhpcyBhcnJheSBjb250YWlucyB0aGUgZGlmZmVyZW50IGxpbmUgbWFwcy4KKyAgICAgQSBsaW5lIG1hcCBpcyBjcmVhdGVkIGZvciB0aGUgZm9sbG93aW5nIGV2ZW50czoKKyAgICAgICAtIHdoZW4gYSBuZXcgcHJlcHJvY2Vzc2luZyB1bml0IHN0YXJ0LiAKKyAgICAgICAtIHdoZW4gYSBwcmVwcm9jZXNzaW5nIHVuaXQgZW5kcy4KKyAgICAgICAtIHdoZW4gYSBtYWNybyBleHBhbnNpb24gb2NjdXJzLiAgKi8KKyAgc3RydWN0IGxpbmVfbWFwICogR1RZICgobGVuZ3RoICgiJWgudXNlZCIpKSkgbWFwczsKKworICAvKiBUaGUgdG90YWwgbnVtYmVyIG9mIGFsbG9jYXRlZCBtYXBzLiAgKi8KKyAgdW5zaWduZWQgaW50IGFsbG9jYXRlZDsKKworICAvKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHVzZWQgaW4gbWFwcy4gVGhpcyBudW1iZXIgaXMgc21hbGxlcgorICAgICBvciBlcXVhbCB0byBBTExPQ0FURUQuICAqLworICB1bnNpZ25lZCBpbnQgdXNlZDsKKworICB1bnNpZ25lZCBpbnQgY2FjaGU7Cit9OworCisvKiBEYXRhIHN0cnVjdHVyZSB0byBhc3NvY2lhdGUgYW4gYXJiaXRyYXJ5IGRhdGEgdG8gYSBzb3VyY2UgbG9jYXRpb24uICAqLworc3RydWN0IEdUWSgoKSkgbG9jYXRpb25fYWRob2NfZGF0YSB7CisgIHNvdXJjZV9sb2NhdGlvbiBsb2N1czsKKyAgdm9pZCAqIEdUWSgoc2tpcCkpIGRhdGE7Cit9OworCitzdHJ1Y3QgaHRhYjsKKworLyogVGhlIGZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZSBlbmNvZGVzIGEgbG9jYXRpb24gd2l0aCBzb21lIGFkaG9jIGRhdGEKKyAgIGFuZCBtYXBzIGl0IHRvIGEgbmV3IHVuc2lnbmVkIGludGVnZXIgKGNhbGxlZCBhbiBhZGhvYyBsb2NhdGlvbikKKyAgIHRoYXQgcmVwbGFjZXMgdGhlIG9yaWdpbmFsIGxvY2F0aW9uIHRvIHJlcHJlc2VudCB0aGUgbWFwcGluZy4KKworICAgVGhlIG5ldyBhZGhvY19sb2MgdXNlcyB0aGUgaGlnaGVzdCBiaXQgYXMgdGhlIGVuYWJsaW5nIGJpdCwgaS5lLiBpZiB0aGUKKyAgIGhpZ2hlc3QgYml0IGlzIDEsIHRoZW4gdGhlIG51bWJlciBpcyBhZGhvY19sb2MuIE90aGVyd2lzZSwgaXQgc2VydmVzIGFzCisgICB0aGUgb3JpZ2luYWwgbG9jYXRpb24uIE9uY2UgaWRlbnRpZmllZCBhcyB0aGUgYWRob2NfbG9jLCB0aGUgbG93ZXIgMzEKKyAgIGJpdHMgb2YgdGhlIGludGVnZXIgaXMgdXNlZCB0byBpbmRleCB0aGUgbG9jYXRpb25fYWRob2NfZGF0YSBhcnJheSwKKyAgIGluIHdoaWNoIHRoZSBsb2N1cyBhbmQgYXNzb2NpYXRlZCBkYXRhIGlzIHN0b3JlZC4gICovCisKK3N0cnVjdCBHVFkoKCkpIGxvY2F0aW9uX2FkaG9jX2RhdGFfbWFwIHsKKyAgc3RydWN0IGh0YWIgKiBHVFkoKHNraXApKSBodGFiOworICBzb3VyY2VfbG9jYXRpb24gY3Vycl9sb2M7CisgIHVuc2lnbmVkIGludCBhbGxvY2F0ZWQ7CisgIHN0cnVjdCBsb2NhdGlvbl9hZGhvY19kYXRhIEdUWSgobGVuZ3RoICgiJWguYWxsb2NhdGVkIikpKSAqZGF0YTsKK307CisKKy8qIEEgc2V0IG9mIGNocm9ub2xvZ2ljYWwgbGluZV9tYXAgc3RydWN0dXJlcy4gICovCitzdHJ1Y3QgR1RZKCgpKSBsaW5lX21hcHMgeworICAKKyAgc3RydWN0IG1hcHNfaW5mbyBpbmZvX29yZGluYXJ5OworCisgIHN0cnVjdCBtYXBzX2luZm8gaW5mb19tYWNybzsKKworICAvKiBEZXB0aCBvZiB0aGUgaW5jbHVkZSBzdGFjaywgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGZpbGUuICAqLworICB1bnNpZ25lZCBpbnQgZGVwdGg7CisKKyAgLyogSWYgdHJ1ZSwgcHJpbnRzIGFuIGluY2x1ZGUgdHJhY2UgYSBsYSAtSC4gICovCisgIGJvb2wgdHJhY2VfaW5jbHVkZXM7CisKKyAgLyogSGlnaGVzdCBzb3VyY2VfbG9jYXRpb24gImdpdmVuIG91dCIuICAqLworICBzb3VyY2VfbG9jYXRpb24gaGlnaGVzdF9sb2NhdGlvbjsKKworICAvKiBTdGFydCBvZiBsaW5lIG9mIGhpZ2hlc3Qgc291cmNlX2xvY2F0aW9uICJnaXZlbiBvdXQiLiAgKi8KKyAgc291cmNlX2xvY2F0aW9uIGhpZ2hlc3RfbGluZTsKKworICAvKiBUaGUgbWF4aW11bSBjb2x1bW4gbnVtYmVyIHdlIGNhbiBxdWlja2x5IGFsbG9jYXRlLiAgSGlnaGVyIG51bWJlcnMKKyAgICAgbWF5IHJlcXVpcmUgYWxsb2NhdGluZyBhIG5ldyBsaW5lX21hcC4gICovCisgIHVuc2lnbmVkIGludCBtYXhfY29sdW1uX2hpbnQ7CisKKyAgLyogSWYgbm9uLW51bGwsIHRoZSBhbGxvY2F0b3IgdG8gdXNlIHdoZW4gcmVzaXppbmcgJ21hcHMnLiAgSWYgbnVsbCwKKyAgICAgeHJlYWxsb2MgaXMgdXNlZC4gICovCisgIGxpbmVfbWFwX3JlYWxsb2MgcmVhbGxvY2F0b3I7CisKKyAgLyogVGhlIGFsbG9jYXRvcnMnIGZ1bmN0aW9uIHVzZWQgdG8ga25vdyB0aGUgYWN0dWFsIHNpemUgaXQKKyAgICAgYWxsb2NhdGVkLCBmb3IgYSBjZXJ0YWluIGFsbG9jYXRpb24gc2l6ZSByZXF1ZXN0ZWQuICAqLworICBsaW5lX21hcF9yb3VuZF9hbGxvY19zaXplX2Z1bmMgcm91bmRfYWxsb2Nfc2l6ZTsKKworICBzdHJ1Y3QgbG9jYXRpb25fYWRob2NfZGF0YV9tYXAgbG9jYXRpb25fYWRob2NfZGF0YV9tYXA7Cit9OworCisvKiBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHdoZXJlIGluZm9ybWF0aW9uIGFib3V0CisgICBtYXBzIGFyZSBzdG9yZWQgaW4gdGhlIGxpbmUgdGFibGUgU0VULiBNQUNST19NQVBfUCBpcyBhIGZsYWcKKyAgIHRlbGxpbmcgaWYgd2Ugd2FudCBtYWNybyBvciBvcmRpbmFyeSBtYXBzLiAgKi8KKyNkZWZpbmUgTElORU1BUFNfTUFQX0lORk8oU0VULCBNQUNST19NQVBfUCkJCQkJXAorICAoKE1BQ1JPX01BUF9QKQkJCQkJCQlcCisgICA/ICYoKFNFVCktPmluZm9fbWFjcm8pCQkJCQkJXAorICAgOiAmKChTRVQpLT5pbmZvX29yZGluYXJ5KSkKKworLyogUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgbWVtb3J5IHJlZ2lvbiB3aGVyZSBtYXBzIGFyZSBzdG9yZWQgaW4KKyAgIHRoZSBsaW5lIHRhYmxlIFNFVC4gTUFQX0tJTkQgc2hhbGwgYmUgVFJVRSBpZiB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorICAgbWFjcm8gbWFwcyBmYWxzZSBvdGhlcndpc2UuICAqLworI2RlZmluZSBMSU5FTUFQU19NQVBTKFNFVCwgTUFQX0tJTkQpIFwKKyAgKExJTkVNQVBTX01BUF9JTkZPIChTRVQsIE1BUF9LSU5EKSktPm1hcHMKKworLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBtYXBzIHNvIGZhci4gTUFQX0tJTkQgc2hhbGwgYmUgVFJVRQorICAgaWYgd2UgYXJlIGludGVyZXN0ZWQgaW4gbWFjcm8gbWFwcywgRkFMU0Ugb3RoZXJ3aXNlLiAgKi8KKyNkZWZpbmUgTElORU1BUFNfQUxMT0NBVEVEKFNFVCwgTUFQX0tJTkQpIFwKKyAgKExJTkVNQVBTX01BUF9JTkZPIChTRVQsIE1BUF9LSU5EKSktPmFsbG9jYXRlZAorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCBtYXBzIHNvIGZhci4gTUFQX0tJTkQgc2hhbGwgYmUgVFJVRSBpZgorICAgd2UgYXJlIGludGVyZXN0ZWQgaW4gbWFjcm8gbWFwcywgRkFMU0Ugb3RoZXJ3aXNlLiovCisjZGVmaW5lIExJTkVNQVBTX1VTRUQoU0VULCBNQVBfS0lORCkgXAorICAoTElORU1BUFNfTUFQX0lORk8gKFNFVCwgTUFQX0tJTkQpKS0+dXNlZAorCisvKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBtYXAgdGhhdCB3YXMgbG9va2VkIHVwIHdpdGgKKyAgIGxpbmVtYXBfbG9va3VwLiBNQVBfS0lORCBzaGFsbCBiZSBUUlVFIGlmIHdlIGFyZSBpbnRlcmVzdGVkIGluCisgICBtYWNybyBtYXBzLCBGQUxTRSBvdGhlcndpc2UuICAqLworI2RlZmluZSBMSU5FTUFQU19DQUNIRShTRVQsIE1BUF9LSU5EKSBcCisgIChMSU5FTUFQU19NQVBfSU5GTyAoU0VULCBNQVBfS0lORCkpLT5jYWNoZQorCisvKiBSZXR1cm4gdGhlIG1hcCBhdCBhIGdpdmVuIGluZGV4LiAgKi8KKyNkZWZpbmUgTElORU1BUFNfTUFQX0FUKFNFVCwgTUFQX0tJTkQsIElOREVYKQlcCisgICgmKChMSU5FTUFQU19NQVBTIChTRVQsIE1BUF9LSU5EKSlbKElOREVYKV0pKQorCisvKiBSZXR1cm5zIHRoZSBsYXN0IG1hcCB1c2VkIGluIHRoZSBsaW5lIHRhYmxlIFNFVC4gTUFQX0tJTkQKKyAgIHNoYWxsIGJlIFRSVUUgaWYgd2UgYXJlIGludGVyZXN0ZWQgaW4gbWFjcm8gbWFwcywgRkFMU0UKKyAgIG90aGVyd2lzZS4qLworI2RlZmluZSBMSU5FTUFQU19MQVNUX01BUChTRVQsIE1BUF9LSU5EKSBcCisgIExJTkVNQVBTX01BUF9BVCAoU0VULCBNQVBfS0lORCwgKExJTkVNQVBTX1VTRUQgKFNFVCwgTUFQX0tJTkQpIC0gMSkpCisKKy8qIFJldHVybnMgdGhlIGxhc3QgbWFwIHRoYXQgd2FzIGFsbG9jYXRlZCBpbiB0aGUgbGluZSB0YWJsZSBTRVQuCisgICBNQVBfS0lORCBzaGFsbCBiZSBUUlVFIGlmIHdlIGFyZSBpbnRlcmVzdGVkIGluIG1hY3JvIG1hcHMsIEZBTFNFCisgICBvdGhlcndpc2UuKi8KKyNkZWZpbmUgTElORU1BUFNfTEFTVF9BTExPQ0FURURfTUFQKFNFVCwgTUFQX0tJTkQpIFwKKyAgTElORU1BUFNfTUFQX0FUIChTRVQsIE1BUF9LSU5ELCBMSU5FTUFQU19BTExPQ0FURUQgKFNFVCwgTUFQX0tJTkQpIC0gMSkKKworLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gd2hlcmUgb3JkaW5hcnkgbWFwcyBhcmUKKyAgIGFsbG9jYXRlZCBpbiB0aGUgbGluZSB0YWJsZSBTRVQuICAqLworI2RlZmluZSBMSU5FTUFQU19PUkRJTkFSWV9NQVBTKFNFVCkgXAorICBMSU5FTUFQU19NQVBTIChTRVQsIGZhbHNlKQorCisvKiBSZXR1cm5zIHRoZSBJTkRFWHRoIG9yZGluYXJ5IG1hcC4gICovCisjZGVmaW5lIExJTkVNQVBTX09SRElOQVJZX01BUF9BVChTRVQsIElOREVYKQlcCisgIExJTkVNQVBTX01BUF9BVCAoU0VULCBmYWxzZSwgSU5ERVgpCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIG9yZGluYXJ5IG1hcHMgYWxsb2NhdGVkIGluIHRoZSBsaW5lIHRhYmxlCisgICBTRVQuICAqLworI2RlZmluZSBMSU5FTUFQU19PUkRJTkFSWV9BTExPQ0FURUQoU0VUKSBcCisgIExJTkVNQVBTX0FMTE9DQVRFRChTRVQsIGZhbHNlKQorCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBvcmRpbmFyeSBtYXBzIHVzZWQgaW4gdGhlIGxpbmUgdGFibGUgU0VULiAgKi8KKyNkZWZpbmUgTElORU1BUFNfT1JESU5BUllfVVNFRChTRVQpIFwKKyAgTElORU1BUFNfVVNFRChTRVQsIGZhbHNlKQorCisvKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBsYXN0IG9yZGluYXJ5IG1hcCB0aGF0IHdhcyBsb29rZWQgdXAgd2l0aAorICAgbGluZW1hcF9sb29rdXAuICAqLworI2RlZmluZSBMSU5FTUFQU19PUkRJTkFSWV9DQUNIRShTRVQpIFwKKyAgTElORU1BUFNfQ0FDSEUoU0VULCBmYWxzZSkKKworLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxhc3Qgb3JkaW5hcnkgbWFwIHVzZWQgaW4gdGhlIGxpbmUgdGFibGUKKyAgIFNFVC4gICovCisjZGVmaW5lIExJTkVNQVBTX0xBU1RfT1JESU5BUllfTUFQKFNFVCkgXAorICBMSU5FTUFQU19MQVNUX01BUChTRVQsIGZhbHNlKQorCisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbGFzdCBvcmRpbmFyeSBtYXAgYWxsb2NhdGVkIHRoZSBsaW5lIHRhYmxlCisgICBTRVQuICAqLworI2RlZmluZSBMSU5FTUFQU19MQVNUX0FMTE9DQVRFRF9PUkRJTkFSWV9NQVAoU0VUKSBcCisgIExJTkVNQVBTX0xBU1RfQUxMT0NBVEVEX01BUChTRVQsIGZhbHNlKQorCisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWdpb24gd2hlcmUgbWFjcm8gbWFwcworICAgYXJlIGFsbGNvYXRlZC4gICovCisjZGVmaW5lIExJTkVNQVBTX01BQ1JPX01BUFMoU0VUKSBcCisgIExJTkVNQVBTX01BUFMoU0VULCB0cnVlKQorCisvKiBSZXR1cm5zIHRoZSBJTkRFWHRoIG1hY3JvIG1hcC4gICovCisjZGVmaW5lIExJTkVNQVBTX01BQ1JPX01BUF9BVChTRVQsIElOREVYKQlcCisgIExJTkVNQVBTX01BUF9BVCAoU0VULCB0cnVlLCBJTkRFWCkKKworLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1hY3JvIG1hcHMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBpbiB0aGUgbGluZQorICAgdGFibGUgU0VULiAgKi8KKyNkZWZpbmUgTElORU1BUFNfTUFDUk9fQUxMT0NBVEVEKFNFVCkgXAorICBMSU5FTUFQU19BTExPQ0FURUQoU0VULCB0cnVlKQorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWFjcm8gbWFwcyB1c2VkIGluIHRoZSBsaW5lIHRhYmxlIFNFVC4gICovCisjZGVmaW5lIExJTkVNQVBTX01BQ1JPX1VTRUQoU0VUKSBcCisgIExJTkVNQVBTX1VTRUQoU0VULCB0cnVlKQorCisvKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBtYWNybyBtYXAgbG9va2VkIHVwIHdpdGgKKyAgIGxpbmVtYXBfbG9va3VwLiAgKi8KKyNkZWZpbmUgTElORU1BUFNfTUFDUk9fQ0FDSEUoU0VUKSBcCisgIExJTkVNQVBTX0NBQ0hFKFNFVCwgdHJ1ZSkKKworLyogUmV0dXJucyB0aGUgbG93ZXN0IGxvY2F0aW9uIFtvZiBhIHRva2VuIHJlc3VsdGluZyBmcm9tIG1hY3JvCisgICBleHBhbnNpb25dIGVuY29kZWQgaW4gdGhpcyBsaW5lIHRhYmxlLiAgKi8KKyNkZWZpbmUgTElORU1BUFNfTUFDUk9fTE9XRVNUX0xPQ0FUSU9OKFNFVCkJCQlcCisgIChMSU5FTUFQU19NQUNST19VU0VEIChzZXQpCQkJCQlcCisgICA/IE1BUF9TVEFSVF9MT0NBVElPTiAoTElORU1BUFNfTEFTVF9NQUNST19NQVAgKHNldCkpCQlcCisgICA6IE1BWF9TT1VSQ0VfTE9DQVRJT04pCisKKy8qIFJldHVybnMgdGhlIGxhc3QgbWFjcm8gbWFwIHVzZWQgaW4gdGhlIGxpbmUgdGFibGUgU0VULiAgKi8KKyNkZWZpbmUgTElORU1BUFNfTEFTVF9NQUNST19NQVAoU0VUKSBcCisgIExJTkVNQVBTX0xBU1RfTUFQIChTRVQsIHRydWUpCisKKy8qIFJldHVybnMgdGhlIGxhc3QgbWFjcm8gbWFwIGFsbG9jYXRlZCBpbiB0aGUgbGluZSB0YWJsZSBTRVQuICAqLworI2RlZmluZSBMSU5FTUFQU19MQVNUX0FMTE9DQVRFRF9NQUNST19NQVAoU0VUKSBcCisgIExJTkVNQVBTX0xBU1RfQUxMT0NBVEVEX01BUCAoU0VULCB0cnVlKQorCitleHRlcm4gdm9pZCBsb2NhdGlvbl9hZGhvY19kYXRhX2ZpbmkgKHN0cnVjdCBsaW5lX21hcHMgKik7CitleHRlcm4gc291cmNlX2xvY2F0aW9uIGdldF9jb21iaW5lZF9hZGhvY19sb2MgKHN0cnVjdCBsaW5lX21hcHMgKiwKKwkJCQkJICAgICAgIHNvdXJjZV9sb2NhdGlvbiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkICpnZXRfZGF0YV9mcm9tX2FkaG9jX2xvYyAoc3RydWN0IGxpbmVfbWFwcyAqLCBzb3VyY2VfbG9jYXRpb24pOworZXh0ZXJuIHNvdXJjZV9sb2NhdGlvbiBnZXRfbG9jYXRpb25fZnJvbV9hZGhvY19sb2MgKHN0cnVjdCBsaW5lX21hcHMgKiwKKwkJCQkJCSAgICBzb3VyY2VfbG9jYXRpb24pOworCisjZGVmaW5lIElTX0FESE9DX0xPQyhMT0MpICgoKExPQykgJiBNQVhfU09VUkNFX0xPQ0FUSU9OKSAhPSAoTE9DKSkKKyNkZWZpbmUgQ09NQklORV9MT0NBVElPTl9EQVRBKFNFVCwgTE9DLCBCTE9DSykgXAorICBnZXRfY29tYmluZWRfYWRob2NfbG9jICgoU0VUKSwgKExPQyksIChCTE9DSykpCisKK2V4dGVybiB2b2lkIHJlYnVpbGRfbG9jYXRpb25fYWRob2NfaHRhYiAoc3RydWN0IGxpbmVfbWFwcyAqKTsKKworLyogSW5pdGlhbGl6ZSBhIGxpbmUgbWFwIHNldC4gICovCitleHRlcm4gdm9pZCBsaW5lbWFwX2luaXQgKHN0cnVjdCBsaW5lX21hcHMgKik7CisKKy8qIENoZWNrIGZvciBhbmQgd2FybiBhYm91dCBsaW5lX21hcHMgZW50ZXJlZCBidXQgbm90IGV4aXRlZC4gICovCisKK2V4dGVybiB2b2lkIGxpbmVtYXBfY2hlY2tfZmlsZXNfZXhpdGVkIChzdHJ1Y3QgbGluZV9tYXBzICopOworCisvKiBSZXR1cm4gYSBzb3VyY2VfbG9jYXRpb24gZm9yIHRoZSBzdGFydCAoaS5lLiBjb2x1bW49PTApIG9mCisgICAocGh5c2ljYWwpIGxpbmUgVE9fTElORSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSAoYXMgaW4gdGhlCisgICBtb3N0IHJlY2VudCBsaW5lbWFwX2FkZCkuICAgTUFYX0NPTFVNTl9ISU5UIGlzIHRoZSBoaWdoZXN0IGNvbHVtbgorICAgbnVtYmVyIHdlIGV4cGVjdCB0byB1c2UgaW4gdGhpcyBsaW5lIChidXQgaXQgZG9lcyBub3QgY2hhbmdlCisgICB0aGUgaGlnaGVzdF9sb2NhdGlvbikuICAqLworCitleHRlcm4gc291cmNlX2xvY2F0aW9uIGxpbmVtYXBfbGluZV9zdGFydAorKHN0cnVjdCBsaW5lX21hcHMgKnNldCwgbGluZW51bV90eXBlIHRvX2xpbmUsICB1bnNpZ25lZCBpbnQgbWF4X2NvbHVtbl9oaW50KTsKKworLyogQWRkIGEgbWFwcGluZyBvZiBsb2dpY2FsIHNvdXJjZSBsaW5lIHRvIHBoeXNpY2FsIHNvdXJjZSBmaWxlIGFuZAorICAgbGluZSBudW1iZXIuIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiAib3JkaW5hcnkgbWFwIiwgd2hpY2ggaXMgYQorICAgbWFwIHRoYXQgcmVjb3JkcyBsb2NhdGlvbnMgb2YgdG9rZW5zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIG1hY3JvCisgICByZXBsYWNlbWVudC1saXN0cyBwcmVzZW50IGF0IGEgbWFjcm8gZXhwYW5zaW9uIHBvaW50LgorCisgICBUaGUgdGV4dCBwb2ludGVkIHRvIGJ5IFRPX0ZJTEUgbXVzdCBoYXZlIGEgbGlmZXRpbWUKKyAgIGF0IGxlYXN0IGFzIGxvbmcgYXMgdGhlIGxpZmV0aW1lIG9mIFNFVC4gIEFuIGVtcHR5CisgICBUT19GSUxFIG1lYW5zIHN0YW5kYXJkIGlucHV0LiAgSWYgcmVhc29uIGlzIExDX0xFQVZFLCBhbmQKKyAgIFRPX0ZJTEUgaXMgTlVMTCwgdGhlbiBUT19GSUxFLCBUT19MSU5FIGFuZCBTWVNQIGFyZSBnaXZlbiB0aGVpcgorICAgbmF0dXJhbCB2YWx1ZXMgY29uc2lkZXJpbmcgdGhlIGZpbGUgd2UgYXJlIHJldHVybmluZyB0by4KKworICAgQSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gY2FuIHJlbG9jYXRlIHRoZSBwcmV2aW91cyBzZXQgb2YKKyAgIG1hcHMsIHNvIGFueSBzdG9yZWQgbGluZV9tYXAgcG9pbnRlcnMgc2hvdWxkIG5vdCBiZSB1c2VkLiAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgbGluZV9tYXAgKmxpbmVtYXBfYWRkCisgIChzdHJ1Y3QgbGluZV9tYXBzICosIGVudW0gbGNfcmVhc29uLCB1bnNpZ25lZCBpbnQgc3lzcCwKKyAgIGNvbnN0IGNoYXIgKnRvX2ZpbGUsIGxpbmVudW1fdHlwZSB0b19saW5lKTsKKworLyogR2l2ZW4gYSBsb2dpY2FsIHNvdXJjZSBsb2NhdGlvbiwgcmV0dXJucyB0aGUgbWFwIHdoaWNoIHRoZQorICAgY29ycmVzcG9uZGluZyAoc291cmNlIGZpbGUsIGxpbmUsIGNvbHVtbikgdHJpcGxldCBjYW4gYmUgZGVkdWNlZAorICAgZnJvbS4gU2luY2UgdGhlIHNldCBpcyBidWlsdCBjaHJvbm9sb2dpY2FsbHksIHRoZSBsb2dpY2FsIGxpbmVzIGFyZQorICAgbW9ub3RvbmljIGluY3JlYXNpbmcsIGFuZCBzbyB0aGUgbGlzdCBpcyBzb3J0ZWQgYW5kIHdlIGNhbiB1c2UgYQorICAgYmluYXJ5IHNlYXJjaC4gSWYgbm8gbGluZSBtYXAgaGF2ZSBiZWVuIGFsbG9jYXRlZCB5ZXQsIHRoaXMKKyAgIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4gICovCitleHRlcm4gY29uc3Qgc3RydWN0IGxpbmVfbWFwICpsaW5lbWFwX2xvb2t1cAorICAoc3RydWN0IGxpbmVfbWFwcyAqLCBzb3VyY2VfbG9jYXRpb24pOworCisvKiBSZXR1cm5zIFRSVUUgaWYgdGhlIGxpbmUgdGFibGUgc2V0IHRyYWNrcyB0b2tlbiBsb2NhdGlvbnMgYWNyb3NzCisgICBtYWNybyBleHBhbnNpb24sIEZBTFNFIG90aGVyd2lzZS4gICovCitib29sIGxpbmVtYXBfdHJhY2tzX21hY3JvX2V4cGFuc2lvbl9sb2NzX3AgKHN0cnVjdCBsaW5lX21hcHMgKik7CisKKy8qIFJldHVybiBUUlVFIGlmIE1BUCBlbmNvZGVzIGxvY2F0aW9ucyBjb21pbmcgZnJvbSBhIG1hY3JvCisgICByZXBsYWNlbWVudC1saXN0IGF0IG1hY3JvIGV4cGFuc2lvbiBwb2ludC4gICovCitib29sIGxpbmVtYXBfbWFjcm9fZXhwYW5zaW9uX21hcF9wIChjb25zdCBzdHJ1Y3QgbGluZV9tYXAgKik7CisKKy8qIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgbWFjcm8gYXNzb2NpYXRlZCB0byBNQUNST19NQVAuICAqLworY29uc3QgY2hhciogbGluZW1hcF9tYXBfZ2V0X21hY3JvX25hbWUgKGNvbnN0IHN0cnVjdCBsaW5lX21hcCopOworCisvKiBSZXR1cm4gYSBwb3NpdGl2ZSB2YWx1ZSBpZiBMT0NBVElPTiBpcyB0aGUgbG9jdXMgb2YgYSB0b2tlbiB0aGF0IGlzCisgICBsb2NhdGVkIGluIGEgc3lzdGVtIGhlYWRlciwgTyBvdGhlcndpc2UuIEl0IHJldHVybnMgMSBpZiBMT0NBVElPTgorICAgaXMgdGhlIGxvY3VzIG9mIGEgdG9rZW4gdGhhdCBpcyBsb2NhdGVkIGluIGEgc3lzdGVtIGhlYWRlciwgYW5kIDIKKyAgIGlmIExPQ0FUSU9OIGlzIHRoZSBsb2N1cyBvZiBhIHRva2VuIGxvY2F0ZWQgaW4gYSBDIHN5c3RlbSBoZWFkZXIKKyAgIHRoYXQgdGhlcmVmb3JlIG5lZWRzIHRvIGJlIGV4dGVybiAiQyIgcHJvdGVjdGVkIGluIEMrKy4KKworICAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucyAxIGlmIExPQ0FUSU9OIGJlbG9uZ3MgdG8gYSB0b2tlbgorICAgdGhhdCBpcyBwYXJ0IG9mIGEgbWFjcm8gcmVwbGFjZW1lbnQtbGlzdCBkZWZpbmVkIGluIGEgc3lzdGVtCisgICBoZWFkZXIsIGJ1dCBleHBhbmRlZCBpbiBhIG5vbi1zeXN0ZW0gZmlsZS4gICovCitpbnQgbGluZW1hcF9sb2NhdGlvbl9pbl9zeXN0ZW1faGVhZGVyX3AgKHN0cnVjdCBsaW5lX21hcHMgKiwKKwkJCQkJIHNvdXJjZV9sb2NhdGlvbik7CisKKy8qIFJldHVybiBUUlVFIGlmIExPQ0FUSU9OIGlzIGEgc291cmNlIGNvZGUgbG9jYXRpb24gb2YgYSB0b2tlbiBjb21pbmcKKyAgIGZyb20gYSBtYWNybyByZXBsYWNlbWVudC1saXN0IGF0IGEgbWFjcm8gZXhwYW5zaW9uIHBvaW50LCBGQUxTRQorICAgb3RoZXJ3aXNlLiAgKi8KK2Jvb2wgbGluZW1hcF9sb2NhdGlvbl9mcm9tX21hY3JvX2V4cGFuc2lvbl9wIChzdHJ1Y3QgbGluZV9tYXBzICosCisJCQkJCSAgICAgIHNvdXJjZV9sb2NhdGlvbik7CisKKy8qIHNvdXJjZV9sb2NhdGlvbiB2YWx1ZXMgZnJvbSAwIHRvIFJFU0VSVkVEX0xPQ0FUSU9OX0NPVU5ULTEgd2lsbAorICAgYmUgcmVzZXJ2ZWQgZm9yIGxpYmNwcCB1c2VyIGFzIHNwZWNpYWwgdmFsdWVzLCBubyB0b2tlbiBmcm9tIGxpYmNwcAorICAgd2lsbCBjb250YWluIGFueSBvZiB0aG9zZSBsb2NhdGlvbnMuICAqLworI2RlZmluZSBSRVNFUlZFRF9MT0NBVElPTl9DT1VOVAkyCisKKy8qIENvbnZlcnRzIGEgbWFwIGFuZCBhIHNvdXJjZV9sb2NhdGlvbiB0byBzb3VyY2UgbGluZS4gICovCisjZGVmaW5lIFNPVVJDRV9MSU5FKE1BUCwgTE9DKQkJCQkJCVwKKyAgKCgoKChMT0MpIC0gbGluZW1hcF9jaGVja19vcmRpbmFyeSAoTUFQKS0+c3RhcnRfbG9jYXRpb24pCQlcCisgICAgID4+IChNQVApLT5kLm9yZGluYXJ5LmNvbHVtbl9iaXRzKSArIChNQVApLT5kLm9yZGluYXJ5LnRvX2xpbmUpKQorCisvKiBDb252ZXJ0IGEgbWFwIGFuZCBzb3VyY2VfbG9jYXRpb24gdG8gc291cmNlIGNvbHVtbiBudW1iZXIuICAqLworI2RlZmluZSBTT1VSQ0VfQ09MVU1OKE1BUCwgTE9DKQkJCQkJCVwKKyAgKCgoKExPQykgLSBsaW5lbWFwX2NoZWNrX29yZGluYXJ5IChNQVApLT5zdGFydF9sb2NhdGlvbikJCVwKKyAgICAmICgoMSA8PCAoTUFQKS0+ZC5vcmRpbmFyeS5jb2x1bW5fYml0cykgLSAxKSkpCisKKy8qIFJldHVybnMgdGhlIGxhc3Qgc291cmNlIGxpbmUgbnVtYmVyIHdpdGhpbiBhbiBvcmRpbmFyeSBtYXAuICBUaGlzCisgICBpcyB0aGUgKGxhc3QpIGxpbmUgb2YgdGhlICNpbmNsdWRlLCBvciBvdGhlciBkaXJlY3RpdmUsIHRoYXQgY2F1c2VkCisgICBhIG1hcCBjaGFuZ2UuICAqLworI2RlZmluZSBMQVNUX1NPVVJDRV9MSU5FKE1BUCkgXAorICBTT1VSQ0VfTElORSAoTUFQLCBMQVNUX1NPVVJDRV9MSU5FX0xPQ0FUSU9OIChNQVApKQorCisvKiBSZXR1cm4gdGhlIGxhc3QgY29sdW1uIG51bWJlciB3aXRoaW4gYW4gb3JkaW5hcnkgbWFwLiAgKi8KKyNkZWZpbmUgTEFTVF9TT1VSQ0VfQ09MVU1OKE1BUCkgXAorICBTT1VSQ0VfQ09MVU1OIChNQVAsIExBU1RfU09VUkNFX0xJTkVfTE9DQVRJT04gKE1BUCkpCisKKy8qIFJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhlIGxhc3Qgc291cmNlIGxpbmUgd2l0aGluIGFuIG9yZGluYXJ5CisgICBtYXAuICAqLworI2RlZmluZSBMQVNUX1NPVVJDRV9MSU5FX0xPQ0FUSU9OKE1BUCkJCQkJCVwKKyAgKCgoKGxpbmVtYXBfY2hlY2tfb3JkaW5hcnkgKE1BUClbMV0uc3RhcnRfbG9jYXRpb24gLSAxCQlcCisgICAgICAtIChNQVApLT5zdGFydF9sb2NhdGlvbikJCQkJCQlcCisgICAgICYgfigoMSA8PCAoTUFQKS0+ZC5vcmRpbmFyeS5jb2x1bW5fYml0cykgLSAxKSkJCQlcCisgICAgKyAoTUFQKS0+c3RhcnRfbG9jYXRpb24pKQorCisvKiBSZXR1cm5zIHRoZSBtYXAgYSBnaXZlbiBtYXAgd2FzIGluY2x1ZGVkIGZyb20sIG9yIE5VTEwgaWYgdGhlIG1hcAorICAgYmVsb25ncyB0byB0aGUgbWFpbiBmaWxlLCBpLmUsIGEgZmlsZSB0aGF0IHdhc24ndCBpbmNsdWRlZCBieQorICAgYW5vdGhlciBvbmUuICAqLworI2RlZmluZSBJTkNMVURFRF9GUk9NKFNFVCwgTUFQKQkJCQkJCVwKKyAgKChsaW5lbWFwX2NoZWNrX29yZGluYXJ5IChNQVApLT5kLm9yZGluYXJ5LmluY2x1ZGVkX2Zyb20gPT0gLTEpCVwKKyAgID8gTlVMTAkJCQkJCQkJXAorICAgOiAoJkxJTkVNQVBTX09SRElOQVJZX01BUFMgKFNFVClbKE1BUCktPmQub3JkaW5hcnkuaW5jbHVkZWRfZnJvbV0pKQorCisvKiBOb256ZXJvIGlmIHRoZSBtYXAgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW5jbHVkZSBzdGFjay4gICovCisjZGVmaW5lIE1BSU5fRklMRV9QKE1BUCkJCQkJCQlcCisgICgobGluZW1hcF9jaGVja19vcmRpbmFyeSAoTUFQKS0+ZC5vcmRpbmFyeS5pbmNsdWRlZF9mcm9tIDwgMCkpCisKKyNpZiBkZWZpbmVkIEVOQUJMRV9DSEVDS0lORyAmJiAoR0NDX1ZFUlNJT04gPj0gMjAwNykKKworLyogQXNzZXJ0aW9uIG1hY3JvIHRvIGJlIHVzZWQgaW4gbGluZS1tYXAgY29kZS4gICovCisjZGVmaW5lIGxpbmVtYXBfYXNzZXJ0KEVYUFIpCQkJXAorICBkbyB7CQkJCQkJXAorICAgIGlmICghIChFWFBSKSkJCQkJXAorICAgICAgYWJvcnQgKCk7CQkJCQlcCisgIH0gd2hpbGUgKDApCisKKy8qIEFzc2VydCB0aGF0IE1BUCBlbmNvZGVzIGxvY2F0aW9ucyBvZiB0b2tlbnMgdGhhdCBhcmUgbm90IHBhcnQgb2YKKyAgIHRoZSByZXBsYWNlbWVudC1saXN0IG9mIGEgbWFjcm8gZXhwYW5zaW9uLiAgKi8KKyNkZWZpbmUgbGluZW1hcF9jaGVja19vcmRpbmFyeShMSU5FX01BUCkgX19leHRlbnNpb25fXwkJXAorICAoe2xpbmVtYXBfYXNzZXJ0ICghbGluZW1hcF9tYWNyb19leHBhbnNpb25fbWFwX3AgKExJTkVfTUFQKSk7IFwKKyAgICAoTElORV9NQVApO30pCisjZWxzZQorI2RlZmluZSBsaW5lbWFwX2Fzc2VydChFWFBSKQorI2RlZmluZSBsaW5lbWFwX2NoZWNrX29yZGluYXJ5KExJTkVfTUFQKSAoTElORV9NQVApCisjZW5kaWYKKworLyogRW5jb2RlIGFuZCByZXR1cm4gYSBzb3VyY2VfbG9jYXRpb24gZnJvbSBhIGNvbHVtbiBudW1iZXIuIFRoZQorICAgc291cmNlIGxpbmUgY29uc2lkZXJlZCBpcyB0aGUgbGFzdCBzb3VyY2UgbGluZSB1c2VkIHRvIGNhbGwKKyAgIGxpbmVtYXBfbGluZV9zdGFydCwgaS5lLCB0aGUgbGFzdCBzb3VyY2UgbGluZSB3aGljaCBhIGxvY2F0aW9uIHdhcworICAgZW5jb2RlZCBmcm9tLiAgKi8KK2V4dGVybiBzb3VyY2VfbG9jYXRpb24KK2xpbmVtYXBfcG9zaXRpb25fZm9yX2NvbHVtbiAoc3RydWN0IGxpbmVfbWFwcyAqLCB1bnNpZ25lZCBpbnQpOworCisvKiBFbmNvZGUgYW5kIHJldHVybiBhIHNvdXJjZSBsb2NhdGlvbiBmcm9tIGEgZ2l2ZW4gbGluZSBhbmQKKyAgIGNvbHVtbi4gICovCitzb3VyY2VfbG9jYXRpb24gbGluZW1hcF9wb3NpdGlvbl9mb3JfbGluZV9hbmRfY29sdW1uIChzdHJ1Y3QgbGluZV9tYXAgKiwKKwkJCQkJCSAgICAgIGxpbmVudW1fdHlwZSwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGludCk7CisvKiBSZXR1cm4gdGhlIGZpbGUgdGhpcyBtYXAgaXMgZm9yLiAgKi8KKyNkZWZpbmUgTElORU1BUF9GSUxFKE1BUCkJCQkJCVwKKyAgKGxpbmVtYXBfY2hlY2tfb3JkaW5hcnkgKE1BUCktPmQub3JkaW5hcnkudG9fZmlsZSkKKworLyogUmV0dXJuIHRoZSBsaW5lIG51bWJlciB0aGlzIG1hcCBzdGFydGVkIGVuY29kaW5nIGxvY2F0aW9uIGZyb20uICAqLworI2RlZmluZSBMSU5FTUFQX0xJTkUoTUFQKQkJCQkJXAorICAobGluZW1hcF9jaGVja19vcmRpbmFyeSAoTUFQKS0+ZC5vcmRpbmFyeS50b19saW5lKQorCisvKiBSZXR1cm4gYSBwb3NpdGl2ZSB2YWx1ZSBpZiBtYXAgZW5jb2RlcyBsb2NhdGlvbnMgZnJvbSBhIHN5c3RlbQorICAgaGVhZGVyLCAwIG90aGVyd2lzZS4gUmV0dXJucyAxIGlmIE1BUCBlbmNvZGVzIGxvY2F0aW9ucyBpbiBhCisgICBzeXN0ZW0gaGVhZGVyIGFuZCAyIGlmIGl0IGVuY29kZXMgbG9jYXRpb25zIGluIGEgQyBzeXN0ZW0gaGVhZGVyCisgICB0aGF0IHRoZXJlZm9yZSBuZWVkcyB0byBiZSBleHRlcm4gIkMiIHByb3RlY3RlZCBpbiBDKysuICAqLworI2RlZmluZSBMSU5FTUFQX1NZU1AoTUFQKQkJCQkJXAorICAobGluZW1hcF9jaGVja19vcmRpbmFyeSAoTUFQKS0+ZC5vcmRpbmFyeS5zeXNwKQorCisvKiBSZXR1cm4gYSBwb3NpdGl2ZSB2YWx1ZSBpZiBQUkUgZGVub3RlcyB0aGUgbG9jYXRpb24gb2YgYSB0b2tlbiB0aGF0CisgICBjb21lcyBiZWZvcmUgdGhlIHRva2VuIG9mIFBPU1QsIDAgaWYgUFJFIGRlbm90ZXMgdGhlIGxvY2F0aW9uIG9mCisgICB0aGUgc2FtZSB0b2tlbiBhcyB0aGUgdG9rZW4gZm9yIFBPU1QsIGFuZCBhIG5lZ2F0aXZlIHZhbHVlCisgICBvdGhlcndpc2UuICAqLworaW50IGxpbmVtYXBfY29tcGFyZV9sb2NhdGlvbnMgKHN0cnVjdCBsaW5lX21hcHMgKnNldCwKKwkJCSAgICAgICBzb3VyY2VfbG9jYXRpb24gICBwcmUsCisJCQkgICAgICAgc291cmNlX2xvY2F0aW9uICAgcG9zdCk7CisKKy8qIFJldHVybiBUUlVFIGlmIExPQ19BIGRlbm90ZXMgdGhlIGxvY2F0aW9uIGEgdG9rZW4gdGhhdCBjb21lcworICAgdG9wb2dpY2FsbHkgYmVmb3JlIHRoZSB0b2tlbiBkZW5vdGVkIGJ5IGxvY2F0aW9uIExPQ19CLCBvciBpZiB0aGV5CisgICBhcmUgZXF1YWwuICAqLworI2RlZmluZSBsaW5lbWFwX2xvY2F0aW9uX2JlZm9yZV9wKFNFVCwgTE9DX0EsIExPQ19CKQlcCisgIChsaW5lbWFwX2NvbXBhcmVfbG9jYXRpb25zICgoU0VUKSwgKExPQ19BKSwgKExPQ19CKSkgPj0gMCkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIGludm9sdmVkLiAgKi8KKyAgY29uc3QgY2hhciAqZmlsZTsKKworICAvKiBUaGUgbGluZS1sb2NhdGlvbiBpbiB0aGUgc291cmNlIGZpbGUuICAqLworICBpbnQgbGluZTsKKworICBpbnQgY29sdW1uOworCisgIHZvaWQgKmRhdGE7CisKKyAgLyogSW4gYSBzeXN0ZW0gaGVhZGVyPy4gKi8KKyAgYm9vbCBzeXNwOworfSBleHBhbmRlZF9sb2NhdGlvbjsKKworLyogVGhpcyBpcyBlbnVtIGlzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIGxpbmVtYXBfcmVzb2x2ZV9sb2NhdGlvbgorICAgYmVsb3cuICBUaGUgbWVhbmluZyBvZiB0aGUgdmFsdWVzIGlzIGV4cGxhaW5lZCBpbiB0aGUgY29tbWVudCBvZgorICAgdGhhdCBmdW5jdGlvbi4gICovCitlbnVtIGxvY2F0aW9uX3Jlc29sdXRpb25fa2luZAoreworICBMUktfTUFDUk9fRVhQQU5TSU9OX1BPSU5ULAorICBMUktfU1BFTExJTkdfTE9DQVRJT04sCisgIExSS19NQUNST19ERUZJTklUSU9OX0xPQ0FUSU9OCit9OworCisvKiBSZXNvbHZlIGEgdmlydHVhbCBsb2NhdGlvbiBpbnRvIGVpdGhlciBhIHNwZWxsaW5nIGxvY2F0aW9uLCBhbgorICAgZXhwYW5zaW9uIHBvaW50IGxvY2F0aW9uIG9yIGEgdG9rZW4gYXJndW1lbnQgcmVwbGFjZW1lbnQgcG9pbnQKKyAgIGxvY2F0aW9uLiAgUmV0dXJuIHRoZSBtYXAgdGhhdCBlbmNvZGVzIHRoZSB2aXJ0dWFsIGxvY2F0aW9uIGFzIHdlbGwKKyAgIGFzIHRoZSByZXNvbHZlZCBsb2NhdGlvbi4KKworICAgSWYgTE9DIGlzICpOT1QqIHRoZSBsb2NhdGlvbiBvZiBhIHRva2VuIHJlc3VsdGluZyBmcm9tIHRoZQorICAgZXhwYW5zaW9uIG9mIGEgbWFjcm8sIHRoZW4gdGhlIHBhcmFtZXRlciBMUksgKHdoaWNoIHN0YW5kcyBmb3IKKyAgIExvY2F0aW9uIFJlc29sdXRpb24gS2luZCkgaXMgaWdub3JlZCBhbmQgdGhlIHJlc3VsdGluZyBsb2NhdGlvbgorICAganVzdCBlcXVhbHMgdGhlIG9uZSBnaXZlbiBpbiBhcmd1bWVudC4KKworICAgTm93IGlmIExPQyAqSVMqIHRoZSBsb2NhdGlvbiBvZiBhIHRva2VuIHJlc3VsdGluZyBmcm9tIHRoZQorICAgZXhwYW5zaW9uIG9mIGEgbWFjcm8sIHRoaXMgaXMgd2hhdCBoYXBwZW5zLgorCisgICAqIElmIExSSyBpcyBzZXQgdG8gTFJLX01BQ1JPX0VYUEFOU0lPTl9QT0lOVAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUgdmlydHVhbCBsb2NhdGlvbiBpcyByZXNvbHZlZCB0byB0aGUgZmlyc3QgbWFjcm8gZXhwYW5zaW9uIHBvaW50CisgICB0aGF0IGxlZCB0byB0aGlzIG1hY3JvIGV4cGFuc2lvbi4KKworICAgKiBJZiBMUksgaXMgc2V0IHRvIExSS19TUEVMTElOR19MT0NBVElPTgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBUaGUgdmlydHVhbCBsb2NhdGlvbiBpcyByZXNvbHZlZCB0byB0aGUgbG9jdXMgd2hlcmUgdGhlIHRva2VuIGhhcworICAgYmVlbiBzcGVsbGVkIGluIHRoZSBzb3VyY2UuICAgVGhpcyBjYW4gZm9sbG93IHRocm91Z2ggYWxsIHRoZSBtYWNybworICAgZXhwYW5zaW9ucyB0aGF0IGxlZCB0byB0aGUgdG9rZW4uCisKKyAgICogSWYgTFJLIGlzIHNldCB0byBMUktfTUFDUk9fREVGSU5JVElPTl9MT0NBVElPTgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgVGhlIHZpcnR1YWwgbG9jYXRpb24gaXMgcmVzb2x2ZWQgdG8gdGhlIGxvY3VzIG9mIHRoZSB0b2tlbiBpbiB0aGUKKyAgIGNvbnRleHQgb2YgdGhlIG1hY3JvIGRlZmluaXRpb24uCisKKyAgIElmIExPQyBpcyB0aGUgbG9jdXMgb2YgYSB0b2tlbiB0aGF0IGlzIGFuIGFyZ3VtZW50IG9mIGEKKyAgIGZ1bmN0aW9uLWxpa2UgbWFjcm8gW3JlcGxhY2luZyBhIHBhcmFtZXRlciBpbiB0aGUgcmVwbGFjZW1lbnQgbGlzdAorICAgb2YgdGhlIG1hY3JvXSB0aGUgdmlydHVhbCBsb2NhdGlvbiBpcyByZXNvbHZlZCB0byB0aGUgbG9jdXMgb2YgdGhlCisgICBwYXJhbWV0ZXIgdGhhdCBpcyByZXBsYWNlZCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGRlZmluaXRpb24gb2YgdGhlCisgICBtYWNyby4KKworICAgSWYgTE9DIGlzIHRoZSBsb2N1cyBvZiBhIHRva2VuIHRoYXQgaXMgbm90IGFuIGFyZ3VtZW50IG9mIGEKKyAgIGZ1bmN0aW9uLWxpa2UgbWFjcm8sIHRoZW4gdGhlIGZ1bmN0aW9uIGJlaGF2ZXMgYXMgaWYgTFJLIHdhcyBzZXQgdG8KKyAgIExSS19TUEVMTElOR19MT0NBVElPTi4KKworICAgSWYgTE9DX01BUCBpcyBub3QgTlVMTCwgKkxPQ19NQVAgaXMgc2V0IHRvIHRoZSBtYXAgZW5jb2RpbmcgdGhlCisgICByZXR1cm5lZCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBpZiB0aGUgcmV0dXJuZWQgbG9jYXRpb24gd2Fzbid0IG9yaWdpbmFsbHkKKyAgIGVuY29kZWQgYnkgYSBtYXAsIHRoZSAqTUFQIGlzIHNldCB0byBOVUxMLiAgVGhpcyBjYW4gaGFwcGVuIGlmIExPQworICAgcmVzb2x2ZXMgdG8gYSBsb2NhdGlvbiByZXNlcnZlZCBmb3IgdGhlIGNsaWVudCBjb2RlLCBsaWtlCisgICBVTktOT1dOX0xPQ0FUSU9OIG9yIEJVSUxUSU5TX0xPQ0FUSU9OIGluIEdDQy4gICovCisKK3NvdXJjZV9sb2NhdGlvbiBsaW5lbWFwX3Jlc29sdmVfbG9jYXRpb24gKHN0cnVjdCBsaW5lX21hcHMgKiwKKwkJCQkJICBzb3VyY2VfbG9jYXRpb24gbG9jLAorCQkJCQkgIGVudW0gbG9jYXRpb25fcmVzb2x1dGlvbl9raW5kIGxyaywKKwkJCQkJICBjb25zdCBzdHJ1Y3QgbGluZV9tYXAgKipsb2NfbWFwKTsKKworLyogU3VwcG9zZSB0aGF0IExPQyBpcyB0aGUgdmlydHVhbCBsb2NhdGlvbiBvZiBhIHRva2VuIGNvbWluZyBmcm9tIHRoZQorICAgZXhwYW5zaW9uIG9mIGEgbWFjcm8gTS4gIFRoaXMgZnVuY3Rpb24gdGhlbiBzdGVwcyB1cCB0byBnZXQgdGhlCisgICBsb2NhdGlvbiBMIG9mIHRoZSBwb2ludCB3aGVyZSBNIGdvdCBleHBhbmRlZC4gIElmIEwgaXMgYSBzcGVsbGluZworICAgbG9jYXRpb24gaW5zaWRlIGEgbWFjcm8gZXhwYW5zaW9uIE0nLCB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICAgdGhlIHBvaW50IHdoZXJlIE0nIHdhcyBleHBhbmRlZC4gIExPQ19NQVAgaXMgYW4gb3V0cHV0IHBhcmFtZXRlci4KKyAgIFdoZW4gbm9uLU5VTEwsICpMT0NfTUFQIGlzIHNldCB0byB0aGUgbWFwIG9mIHRoZSByZXR1cm5lZAorICAgbG9jYXRpb24uICAqLworc291cmNlX2xvY2F0aW9uIGxpbmVtYXBfdW53aW5kX3Rvd2FyZF9leHBhbnNpb24gKHN0cnVjdCBsaW5lX21hcHMgKiwKKwkJCQkJCSBzb3VyY2VfbG9jYXRpb24gbG9jLAorCQkJCQkJIGNvbnN0IHN0cnVjdCBsaW5lX21hcCAqKmxvY19tYXApOworCisvKiBJZiBMT0MgaXMgdGhlIHZpcnR1YWwgbG9jYXRpb24gb2YgYSB0b2tlbiBjb21pbmcgZnJvbSB0aGUgZXhwYW5zaW9uCisgICBvZiBhIG1hY3JvIE0gYW5kIGlmIGl0cyBzcGVsbGluZyBsb2NhdGlvbiBpcyByZXNlcnZlZCAoZS5nLCBhCisgICBsb2NhdGlvbiBmb3IgYSBidWlsdC1pbiB0b2tlbiksIHRoZW4gdGhpcyBmdW5jdGlvbiB1bndpbmRzICh1c2luZworICAgbGluZW1hcF91bndpbmRfdG93YXJkX2V4cGFuc2lvbikgdGhlIGxvY2F0aW9uIHVudGlsIGEgbG9jYXRpb24gdGhhdAorICAgaXMgbm90IHJlc2VydmVkIGFuZCBpcyBub3QgaW4gYSBzeXN0ZW0gaGVhZGVyIGlzIHJlYWNoZWQuICBJbiBvdGhlcgorICAgd29yZHMsIHRoaXMgdW53aW5kcyB0aGUgcmVzZXJ2ZWQgbG9jYXRpb24gdW50aWwgYSBsb2NhdGlvbiB0aGF0IGlzCisgICBpbiByZWFsIHNvdXJjZSBjb2RlIGlzIHJlYWNoZWQuCisKKyAgIE90aGVyd2lzZSwgaWYgdGhlIHNwZWxsaW5nIGxvY2F0aW9uIGZvciBMT0MgaXMgbm90IHJlc2VydmVkIG9yIGlmCisgICBMT0MgZG9lc24ndCBjb21lIGZyb20gdGhlIGV4cGFuc2lvbiBvZiBhIG1hY3JvLCB0aGUgZnVuY3Rpb24KKyAgIHJldHVybnMgTE9DIGFzIGlzIGFuZCAqTUFQIGlzIG5vdCB0b3VjaGVkLgorCisgICAqTUFQIGlzIHNldCB0byB0aGUgbWFwIG9mIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBpZiB0aGUgbGF0ZXIgaXMKKyAgIGRpZmZlcmVudCBmcm9tIExPQy4gICovCitzb3VyY2VfbG9jYXRpb24gbGluZW1hcF91bndpbmRfdG9fZmlyc3Rfbm9uX3Jlc2VydmVkX2xvYyAoc3RydWN0IGxpbmVfbWFwcyAqLAorCQkJCQkJCSAgc291cmNlX2xvY2F0aW9uIGxvYywKKwkJCQkJCQkgIGNvbnN0IHN0cnVjdCBsaW5lX21hcCAqKm1hcCk7CisKKy8qIEV4cGFuZCBzb3VyY2UgY29kZSBsb2NhdGlvbiBMT0MgYW5kIHJldHVybiBhIHVzZXIgcmVhZGFibGUgc291cmNlCisgICBjb2RlIGxvY2F0aW9uLiAgTE9DIG11c3QgYmUgYSBzcGVsbGluZyAobm9uLXZpcnR1YWwpIGxvY2F0aW9uLiAgSWYKKyAgIGl0J3MgYSBsb2NhdGlvbiA8IFJFU0VSVkVEX0xPQ0FUSU9OX0NPVU5UIGEgemVyb2VkIGV4cGFuZGVkIHNvdXJjZQorICAgbG9jYXRpb24gaXMgcmV0dXJuZWQuICAqLworZXhwYW5kZWRfbG9jYXRpb24gbGluZW1hcF9leHBhbmRfbG9jYXRpb24gKHN0cnVjdCBsaW5lX21hcHMgKiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGxpbmVfbWFwICosCisJCQkJCSAgIHNvdXJjZV9sb2NhdGlvbiBsb2MpOworCisvKiBTdGF0aXN0aWNzIGFib3V0IG1hcHMgYWxsb2NhdGlvbiBhbmQgdXNhZ2UgYXMgcmV0dXJuZWQgYnkKKyAgIGxpbmVtYXBfZ2V0X3N0YXRpc3RpY3MuICAqLworc3RydWN0IGxpbmVtYXBfc3RhdHMKK3sKKyAgbG9uZyBudW1fb3JkaW5hcnlfbWFwc19hbGxvY2F0ZWQ7CisgIGxvbmcgbnVtX29yZGluYXJ5X21hcHNfdXNlZDsKKyAgbG9uZyBvcmRpbmFyeV9tYXBzX2FsbG9jYXRlZF9zaXplOworICBsb25nIG9yZGluYXJ5X21hcHNfdXNlZF9zaXplOworICBsb25nIG51bV9leHBhbmRlZF9tYWNyb3M7CisgIGxvbmcgbnVtX21hY3JvX3Rva2VuczsKKyAgbG9uZyBudW1fbWFjcm9fbWFwc191c2VkOworICBsb25nIG1hY3JvX21hcHNfYWxsb2NhdGVkX3NpemU7CisgIGxvbmcgbWFjcm9fbWFwc191c2VkX3NpemU7CisgIGxvbmcgbWFjcm9fbWFwc19sb2NhdGlvbnNfc2l6ZTsKKyAgbG9uZyBkdXBsaWNhdGVkX21hY3JvX21hcHNfbG9jYXRpb25zX3NpemU7Cit9OworCisvKiBDb21wdXRlIGFuZCByZXR1cm4gc3RhdGlzdGljcyBhYm91dCB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIHNvbWUKKyAgIHBhcnRzIG9mIHRoZSBsaW5lIHRhYmxlIFNFVC4gICovCit2b2lkIGxpbmVtYXBfZ2V0X3N0YXRpc3RpY3MgKHN0cnVjdCBsaW5lX21hcHMgKiwgc3RydWN0IGxpbmVtYXBfc3RhdHMgKik7CisKKy8qIER1bXAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHNvdXJjZSBsb2NhdGlvbiBMT0MgaW50byB0aGUgZmlsZQorICAgc3RyZWFtIFNUUkVBTS4gU0VUIGlzIHRoZSBsaW5lIG1hcCBzZXQgTE9DIGNvbWVzIGZyb20uICAqLwordm9pZCBsaW5lbWFwX2R1bXBfbG9jYXRpb24gKHN0cnVjdCBsaW5lX21hcHMgKiwgc291cmNlX2xvY2F0aW9uLCBGSUxFICopOworCisvKiBEdW1wIGxpbmUgbWFwIGF0IGluZGV4IElYIGluIGxpbmUgdGFibGUgU0VUIHRvIFNUUkVBTS4gIElmIFNUUkVBTQorICAgaXMgTlVMTCwgdXNlIHN0ZGVyci4gIElTX01BQ1JPIGlzIHRydWUgaWYgdGhlIGNhbGxlciB3YW50cyB0bworICAgZHVtcCBhIG1hY3JvIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLiAgKi8KK3ZvaWQgbGluZW1hcF9kdW1wIChGSUxFICosIHN0cnVjdCBsaW5lX21hcHMgKiwgdW5zaWduZWQsIGJvb2wpOworCisvKiBEdW1wIGxpbmUgdGFibGUgU0VUIHRvIFNUUkVBTS4gIElmIFNUUkVBTSBpcyBOVUxMLCBzdGRlcnIgaXMgdXNlZC4KKyAgIE5VTV9PUkRJTkFSWSBzcGVjaWZpZXMgaG93IG1hbnkgb3JkaW5hcnkgbWFwcyB0byBkdW1wLiAgTlVNX01BQ1JPCisgICBzcGVjaWZpZXMgaG93IG1hbnkgbWFjcm8gbWFwcyB0byBkdW1wLiAgKi8KK3ZvaWQgbGluZV90YWJsZV9kdW1wIChGSUxFICosIHN0cnVjdCBsaW5lX21hcHMgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCisjZW5kaWYgLyogIUxJQkNQUF9MSU5FX01BUF9IICAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL21hY2htb2RlLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvbWFjaG1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWZkN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL21hY2htb2RlLmgKQEAgLTAsMCArMSwzMjQgQEAKKy8qIE1hY2hpbmUgbW9kZSBkZWZpbml0aW9ucyBmb3IgR0NDOyBpbmNsdWRlZCBieSBydGwuaCBhbmQgdHJlZS5oLgorICAgQ29weXJpZ2h0IChDKSAxOTkxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEhBVkVfTUFDSElORV9NT0RFUworI2RlZmluZSBIQVZFX01BQ0hJTkVfTU9ERVMKKworLyogTWFrZSBhbiBlbnVtIGNsYXNzIHRoYXQgZ2l2ZXMgYWxsIHRoZSBtYWNoaW5lIG1vZGVzLiAgKi8KKyNpbmNsdWRlICJpbnNuLW1vZGVzLmgiCisKKy8qIEdldCB0aGUgbmFtZSBvZiBtb2RlIE1PREUgYXMgYSBzdHJpbmcuICAqLworCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1vZGVfbmFtZVtOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX05BTUUoTU9ERSkgIG1vZGVfbmFtZVtNT0RFXQorCisvKiBNb2RlIGNsYXNzZXMuICAqLworCisjaW5jbHVkZSAibW9kZS1jbGFzc2VzLmRlZiIKKyNkZWZpbmUgREVGX01PREVfQ0xBU1MoTSkgTQorZW51bSBtb2RlX2NsYXNzIHsgTU9ERV9DTEFTU0VTLCBNQVhfTU9ERV9DTEFTUyB9OworI3VuZGVmIERFRl9NT0RFX0NMQVNTCisjdW5kZWYgTU9ERV9DTEFTU0VTCisKKy8qIEdldCB0aGUgZ2VuZXJhbCBraW5kIG9mIG9iamVjdCB0aGF0IG1vZGUgTU9ERSByZXByZXNlbnRzCisgICAoaW50ZWdlciwgZmxvYXRpbmcsIGNvbXBsZXgsIGV0Yy4pICAqLworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBtb2RlX2NsYXNzW05VTV9NQUNISU5FX01PREVTXTsKKyNkZWZpbmUgR0VUX01PREVfQ0xBU1MoTU9ERSkgICgoZW51bSBtb2RlX2NsYXNzKSBtb2RlX2NsYXNzW01PREVdKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYW4gaW50ZWdyYWwgbW9kZS4gICovCisjZGVmaW5lIElOVEVHUkFMX01PREVfUChNT0RFKQkJCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0lOVAkJXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfUEFSVElBTF9JTlQgXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfQ09NUExFWF9JTlQgXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVkVDVE9SX0lOVCkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgZmxvYXRpbmctcG9pbnQgbW9kZS4gICovCisjZGVmaW5lIEZMT0FUX01PREVfUChNT0RFKQkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfRkxPQVQJXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfREVDSU1BTF9GTE9BVCBcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9DT01QTEVYX0ZMT0FUIFwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1ZFQ1RPUl9GTE9BVCkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgY29tcGxleCBtb2RlLiAgKi8KKyNkZWZpbmUgQ09NUExFWF9NT0RFX1AoTU9ERSkJCQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9DT01QTEVYX0lOVAlcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9DT01QTEVYX0ZMT0FUKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSB2ZWN0b3IgbW9kZS4gICovCisjZGVmaW5lIFZFQ1RPUl9NT0RFX1AoTU9ERSkJCQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9WRUNUT1JfSU5UCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1ZFQ1RPUl9GTE9BVAlcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9WRUNUT1JfRlJBQ1QJXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVkVDVE9SX1VGUkFDVAlcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9WRUNUT1JfQUNDVU0JXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVkVDVE9SX1VBQ0NVTSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyIGludGVncmFsIG1vZGUuICAqLworI2RlZmluZSBTQ0FMQVJfSU5UX01PREVfUChNT0RFKQkJCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0lOVAkJXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfUEFSVElBTF9JTlQpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhciBmbG9hdGluZyBwb2ludCBtb2RlLiAgKi8KKyNkZWZpbmUgU0NBTEFSX0ZMT0FUX01PREVfUChNT0RFKQkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfRkxPQVQJCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0RFQ0lNQUxfRkxPQVQpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbW9kZS4gICovCisjZGVmaW5lIERFQ0lNQUxfRkxPQVRfTU9ERV9QKE1PREUpCQlcCisgIChHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9ERUNJTUFMX0ZMT0FUKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIgZnJhY3QgbW9kZS4gICovCisjZGVmaW5lIFNDQUxBUl9GUkFDVF9NT0RFX1AoTU9ERSkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfRlJBQ1QpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhciB1ZnJhY3QgbW9kZS4gICovCisjZGVmaW5lIFNDQUxBUl9VRlJBQ1RfTU9ERV9QKE1PREUpCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1VGUkFDVCkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyIGZyYWN0IG9yIHVmcmFjdCBtb2RlLiAgKi8KKyNkZWZpbmUgQUxMX1NDQUxBUl9GUkFDVF9NT0RFX1AoTU9ERSkJXAorICAoU0NBTEFSX0ZSQUNUX01PREVfUCAoTU9ERSkgfHwgU0NBTEFSX1VGUkFDVF9NT0RFX1AgKE1PREUpKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIgYWNjdW0gbW9kZS4gICovCisjZGVmaW5lIFNDQUxBUl9BQ0NVTV9NT0RFX1AoTU9ERSkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfQUNDVU0pCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhciB1YWNjdW0gbW9kZS4gICovCisjZGVmaW5lIFNDQUxBUl9VQUNDVU1fTU9ERV9QKE1PREUpCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1VBQ0NVTSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyIGFjY3VtIG9yIHVhY2N1bSBtb2RlLiAgKi8KKyNkZWZpbmUgQUxMX1NDQUxBUl9BQ0NVTV9NT0RFX1AoTU9ERSkJXAorICAoU0NBTEFSX0FDQ1VNX01PREVfUCAoTU9ERSkgfHwgU0NBTEFSX1VBQ0NVTV9NT0RFX1AgKE1PREUpKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIgZnJhY3Qgb3IgYWNjdW0gbW9kZS4gICovCisjZGVmaW5lIFNJR05FRF9TQ0FMQVJfRklYRURfUE9JTlRfTU9ERV9QKE1PREUpCVwKKyAgKFNDQUxBUl9GUkFDVF9NT0RFX1AgKE1PREUpIHx8IFNDQUxBUl9BQ0NVTV9NT0RFX1AgKE1PREUpKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIgdWZyYWN0IG9yIHVhY2N1bSBtb2RlLiAgKi8KKyNkZWZpbmUgVU5TSUdORURfU0NBTEFSX0ZJWEVEX1BPSU5UX01PREVfUChNT0RFKQlcCisgIChTQ0FMQVJfVUZSQUNUX01PREVfUCAoTU9ERSkgfHwgU0NBTEFSX1VBQ0NVTV9NT0RFX1AgKE1PREUpKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIgZnJhY3QsIHVmcmFjdCwgYWNjdW0gb3IgdWFjY3VtIG1vZGUuICAqLworI2RlZmluZSBBTExfU0NBTEFSX0ZJWEVEX1BPSU5UX01PREVfUChNT0RFKQlcCisgIChTSUdORURfU0NBTEFSX0ZJWEVEX1BPSU5UX01PREVfUCAoTU9ERSkJXAorICAgfHwgVU5TSUdORURfU0NBTEFSX0ZJWEVEX1BPSU5UX01PREVfUCAoTU9ERSkpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhci92ZWN0b3IgZnJhY3QgbW9kZS4gICovCisjZGVmaW5lIEZSQUNUX01PREVfUChNT0RFKQkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfRlJBQ1QJXAorICAgfHwgR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVkVDVE9SX0ZSQUNUKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIvdmVjdG9yIHVmcmFjdCBtb2RlLiAgKi8KKyNkZWZpbmUgVUZSQUNUX01PREVfUChNT0RFKQkJXAorICAoR0VUX01PREVfQ0xBU1MgKE1PREUpID09IE1PREVfVUZSQUNUCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1ZFQ1RPUl9VRlJBQ1QpCisKKy8qIE5vbnplcm8gaWYgTU9ERSBpcyBhIHNjYWxhci92ZWN0b3IgZnJhY3Qgb3IgdWZyYWN0IG1vZGUuICAqLworI2RlZmluZSBBTExfRlJBQ1RfTU9ERV9QKE1PREUpCQlcCisgIChGUkFDVF9NT0RFX1AgKE1PREUpIHx8IFVGUkFDVF9NT0RFX1AgKE1PREUpKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIvdmVjdG9yIGFjY3VtIG1vZGUuICAqLworI2RlZmluZSBBQ0NVTV9NT0RFX1AoTU9ERSkJCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX0FDQ1VNCVwKKyAgIHx8IEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1ZFQ1RPUl9BQ0NVTSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyL3ZlY3RvciB1YWNjdW0gbW9kZS4gICovCisjZGVmaW5lIFVBQ0NVTV9NT0RFX1AoTU9ERSkJCVwKKyAgKEdFVF9NT0RFX0NMQVNTIChNT0RFKSA9PSBNT0RFX1VBQ0NVTQlcCisgICB8fCBHRVRfTU9ERV9DTEFTUyAoTU9ERSkgPT0gTU9ERV9WRUNUT1JfVUFDQ1VNKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIvdmVjdG9yIGFjY3VtIG9yIHVhY2N1bSBtb2RlLiAgKi8KKyNkZWZpbmUgQUxMX0FDQ1VNX01PREVfUChNT0RFKQkJXAorICAoQUNDVU1fTU9ERV9QIChNT0RFKSB8fCBVQUNDVU1fTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyL3ZlY3RvciBmcmFjdCBvciBhY2N1bSBtb2RlLiAgKi8KKyNkZWZpbmUgU0lHTkVEX0ZJWEVEX1BPSU5UX01PREVfUChNT0RFKQkJXAorICAoRlJBQ1RfTU9ERV9QIChNT0RFKSB8fCBBQ0NVTV9NT0RFX1AgKE1PREUpKQorCisvKiBOb256ZXJvIGlmIE1PREUgaXMgYSBzY2FsYXIvdmVjdG9yIHVmcmFjdCBvciB1YWNjdW0gbW9kZS4gICovCisjZGVmaW5lIFVOU0lHTkVEX0ZJWEVEX1BPSU5UX01PREVfUChNT0RFKQlcCisgIChVRlJBQ1RfTU9ERV9QIChNT0RFKSB8fCBVQUNDVU1fTU9ERV9QIChNT0RFKSkKKworLyogTm9uemVybyBpZiBNT0RFIGlzIGEgc2NhbGFyL3ZlY3RvciBmcmFjdCwgdWZyYWN0LCBhY2N1bSBvciB1YWNjdW0gbW9kZS4gICovCisjZGVmaW5lIEFMTF9GSVhFRF9QT0lOVF9NT0RFX1AoTU9ERSkJCVwKKyAgKFNJR05FRF9GSVhFRF9QT0lOVF9NT0RFX1AgKE1PREUpCQlcCisgICB8fCBVTlNJR05FRF9GSVhFRF9QT0lOVF9NT0RFX1AgKE1PREUpKQorCisvKiBOb256ZXJvIGlmIENMQVNTIG1vZGVzIGNhbiBiZSB3aWRlbmVkLiAgKi8KKyNkZWZpbmUgQ0xBU1NfSEFTX1dJREVSX01PREVTX1AoQ0xBU1MpICAgICAgICAgXAorICAoQ0xBU1MgPT0gTU9ERV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB8fCBDTEFTUyA9PSBNT0RFX1BBUlRJQUxfSU5UICAgICAgICAgICAgICAgIFwKKyAgIHx8IENMQVNTID09IE1PREVfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgXAorICAgfHwgQ0xBU1MgPT0gTU9ERV9ERUNJTUFMX0ZMT0FUICAgICAgICAgICAgICBcCisgICB8fCBDTEFTUyA9PSBNT0RFX0NPTVBMRVhfRkxPQVQgICAgICAgICAgICAgIFwKKyAgIHx8IENMQVNTID09IE1PREVfRlJBQ1QgICAgICAgICAgICAgICAgICAgICAgXAorICAgfHwgQ0xBU1MgPT0gTU9ERV9VRlJBQ1QgICAgICAgICAgICAgICAgICAgICBcCisgICB8fCBDTEFTUyA9PSBNT0RFX0FDQ1VNICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHx8IENMQVNTID09IE1PREVfVUFDQ1VNKQorCisvKiBHZXQgdGhlIHNpemUgaW4gYnl0ZXMgYW5kIGJpdHMgb2YgYW4gb2JqZWN0IG9mIG1vZGUgTU9ERS4gICovCisKK2V4dGVybiBDT05TVF9NT0RFX1NJWkUgdW5zaWduZWQgY2hhciBtb2RlX3NpemVbTlVNX01BQ0hJTkVfTU9ERVNdOworI2RlZmluZSBHRVRfTU9ERV9TSVpFKE1PREUpICAgICgodW5zaWduZWQgc2hvcnQpIG1vZGVfc2l6ZVtNT0RFXSkKKyNkZWZpbmUgR0VUX01PREVfQklUU0laRShNT0RFKSBcCisgICgodW5zaWduZWQgc2hvcnQpIChHRVRfTU9ERV9TSVpFIChNT0RFKSAqIEJJVFNfUEVSX1VOSVQpKQorCisvKiBHZXQgdGhlIG51bWJlciBvZiB2YWx1ZSBiaXRzIG9mIGFuIG9iamVjdCBvZiBtb2RlIE1PREUuICAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZGVfcHJlY2lzaW9uW05VTV9NQUNISU5FX01PREVTXTsKKyNkZWZpbmUgR0VUX01PREVfUFJFQ0lTSU9OKE1PREUpICBtb2RlX3ByZWNpc2lvbltNT0RFXQorCisvKiBHZXQgdGhlIG51bWJlciBvZiBpbnRlZ3JhbCBiaXRzIG9mIGFuIG9iamVjdCBvZiBtb2RlIE1PREUuICAqLworZXh0ZXJuIENPTlNUX01PREVfSUJJVCB1bnNpZ25lZCBjaGFyIG1vZGVfaWJpdFtOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX0lCSVQoTU9ERSkgbW9kZV9pYml0W01PREVdCisKKy8qIEdldCB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uYWwgYml0cyBvZiBhbiBvYmplY3Qgb2YgbW9kZSBNT0RFLiAgKi8KK2V4dGVybiBDT05TVF9NT0RFX0ZCSVQgdW5zaWduZWQgY2hhciBtb2RlX2ZiaXRbTlVNX01BQ0hJTkVfTU9ERVNdOworI2RlZmluZSBHRVRfTU9ERV9GQklUKE1PREUpIG1vZGVfZmJpdFtNT0RFXQorCisvKiBHZXQgYSBiaXRtYXNrIGNvbnRhaW5pbmcgMSBmb3IgYWxsIGJpdHMgaW4gYSB3b3JkCisgICB0aGF0IGZpdCB3aXRoaW4gbW9kZSBNT0RFLiAgKi8KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbW9kZV9tYXNrX2FycmF5W05VTV9NQUNISU5FX01PREVTXTsKKworI2RlZmluZSBHRVRfTU9ERV9NQVNLKE1PREUpIG1vZGVfbWFza19hcnJheVtNT0RFXQorCisvKiBSZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGlubmVyIGVsZW1lbnRzIGluIGEgdmVjdG9yLiAgKi8KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW9kZV9pbm5lcltOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX0lOTkVSKE1PREUpICgoZW51bSBtYWNoaW5lX21vZGUpIG1vZGVfaW5uZXJbTU9ERV0pCisKKy8qIEdldCB0aGUgc2l6ZSBpbiBieXRlcyBvciBiaXRlcyBvZiB0aGUgYmFzaWMgcGFydHMgb2YgYW4KKyAgIG9iamVjdCBvZiBtb2RlIE1PREUuICAqLworCisjZGVmaW5lIEdFVF9NT0RFX1VOSVRfU0laRShNT0RFKQkJXAorICAoR0VUX01PREVfSU5ORVIgKE1PREUpID09IFZPSURtb2RlCQlcCisgICA/IEdFVF9NT0RFX1NJWkUgKE1PREUpCQkJXAorICAgOiBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERV9JTk5FUiAoTU9ERSkpKQorCisjZGVmaW5lIEdFVF9NT0RFX1VOSVRfQklUU0laRShNT0RFKSBcCisgICgodW5zaWduZWQgc2hvcnQpIChHRVRfTU9ERV9VTklUX1NJWkUgKE1PREUpICogQklUU19QRVJfVU5JVCkpCisKKyNkZWZpbmUgR0VUX01PREVfVU5JVF9QUkVDSVNJT04oTU9ERSkJCVwKKyAgKEdFVF9NT0RFX0lOTkVSIChNT0RFKSA9PSBWT0lEbW9kZQkJXAorICAgPyBHRVRfTU9ERV9QUkVDSVNJT04gKE1PREUpCQkJXAorICAgOiBHRVRfTU9ERV9QUkVDSVNJT04gKEdFVF9NT0RFX0lOTkVSIChNT0RFKSkpCisKKy8qIEdldCB0aGUgbnVtYmVyIG9mIHVuaXRzIGluIHRoZSBvYmplY3QuICAqLworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBtb2RlX251bml0c1tOVU1fTUFDSElORV9NT0RFU107CisjZGVmaW5lIEdFVF9NT0RFX05VTklUUyhNT0RFKSAgbW9kZV9udW5pdHNbTU9ERV0KKworLyogR2V0IHRoZSBuZXh0IHdpZGVyIG5hdHVyYWwgbW9kZSAoZWcsIFFJIC0+IEhJIC0+IFNJIC0+IERJIC0+IFRJKS4gICovCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVfd2lkZXJbTlVNX01BQ0hJTkVfTU9ERVNdOworI2RlZmluZSBHRVRfTU9ERV9XSURFUl9NT0RFKE1PREUpICgoZW51bSBtYWNoaW5lX21vZGUpIG1vZGVfd2lkZXJbTU9ERV0pCisKKy8qIEZvciBzY2FsYXJzLCB0aGlzIGlzIGEgbW9kZSB3aXRoIHR3aWNlIHRoZSBwcmVjaXNpb24uICBGb3IgdmVjdG9ycywKKyAgIHRoaXMgaXMgYSBtb2RlIHdpdGggdGhlIHNhbWUgaW5uZXIgbW9kZSBidXQgd2l0aCB0d2ljZSB0aGUgZWxlbWVudHMuICAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW9kZV8yeHdpZGVyW05VTV9NQUNISU5FX01PREVTXTsKKyNkZWZpbmUgR0VUX01PREVfMlhXSURFUl9NT0RFKE1PREUpICgoZW51bSBtYWNoaW5lX21vZGUpIG1vZGVfMnh3aWRlcltNT0RFXSkKKworLyogUmV0dXJuIHRoZSBtb2RlIGZvciBkYXRhIG9mIGEgZ2l2ZW4gc2l6ZSBTSVpFIGFuZCBtb2RlIGNsYXNzIENMQVNTLgorICAgSWYgTElNSVQgaXMgbm9uemVybywgdGhlbiBkb24ndCB1c2UgbW9kZXMgYmlnZ2VyIHRoYW4gTUFYX0ZJWEVEX01PREVfU0laRS4KKyAgIFRoZSB2YWx1ZSBpcyBCTEttb2RlIGlmIG5vIG90aGVyIG1vZGUgaXMgZm91bmQuICAqLworCitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgbW9kZV9mb3Jfc2l6ZSAodW5zaWduZWQgaW50LCBlbnVtIG1vZGVfY2xhc3MsIGludCk7CisKKy8qIFNpbWlsYXIsIGJ1dCBmaW5kIHRoZSBzbWFsbGVzdCBtb2RlIGZvciBhIGdpdmVuIHdpZHRoLiAgKi8KKworZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIHNtYWxsZXN0X21vZGVfZm9yX3NpemUgKHVuc2lnbmVkIGludCwKKwkJCQkJCSBlbnVtIG1vZGVfY2xhc3MpOworCisKKy8qIFJldHVybiBhbiBpbnRlZ2VyIG1vZGUgb2YgdGhlIGV4YWN0IHNhbWUgc2l6ZSBhcyB0aGUgaW5wdXQgbW9kZSwKKyAgIG9yIEJMS21vZGUgb24gZmFpbHVyZS4gICovCisKK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBpbnRfbW9kZV9mb3JfbW9kZSAoZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBSZXR1cm4gYSBtb2RlIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJlcHJlc2VudGluZyBhIHZlY3RvciwKKyAgIG9yIEJMS21vZGUgb24gZmFpbHVyZS4gICovCisKK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlX2Zvcl92ZWN0b3IgKGVudW0gbWFjaGluZV9tb2RlLCB1bnNpZ25lZCk7CisKKy8qIEEgY2xhc3MgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHBvc3NpYmxlIGJpdGZpZWxkIG1vZGVzLiAgKi8KK2NsYXNzIGJpdF9maWVsZF9tb2RlX2l0ZXJhdG9yCit7CitwdWJsaWM6CisgIGJpdF9maWVsZF9tb2RlX2l0ZXJhdG9yIChIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5ULAorCQkJICAgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCwKKwkJCSAgIHVuc2lnbmVkIGludCwgYm9vbCk7CisgIGJvb2wgbmV4dF9tb2RlIChlbnVtIG1hY2hpbmVfbW9kZSAqKTsKKyAgYm9vbCBwcmVmZXJfc21hbGxlcl9tb2RlcyAoKTsKKworcHJpdmF0ZToKKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZV87CisgIC8qIFdlIHVzZSBzaWduZWQgdmFsdWVzIGhlcmUgYmVjYXVzZSB0aGUgYml0IHBvc2l0aW9uIGNhbiBiZSBuZWdhdGl2ZQorICAgICBmb3IgaW52YWxpZCBpbnB1dCBzdWNoIGFzIGdjYy5kZy9wcjQ4MzM1LTguYy4gICovCisgIEhPU1RfV0lERV9JTlQgYml0c2l6ZV87CisgIEhPU1RfV0lERV9JTlQgYml0cG9zXzsKKyAgSE9TVF9XSURFX0lOVCBiaXRyZWdpb25fc3RhcnRfOworICBIT1NUX1dJREVfSU5UIGJpdHJlZ2lvbl9lbmRfOworICB1bnNpZ25lZCBpbnQgYWxpZ25fOworICBib29sIHZvbGF0aWxlcF87CisgIGludCBjb3VudF87Cit9OworCisvKiBGaW5kIHRoZSBiZXN0IG1vZGUgdG8gdXNlIHRvIGFjY2VzcyBhIGJpdCBmaWVsZC4gICovCisKK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBnZXRfYmVzdF9tb2RlIChpbnQsIGludCwKKwkJCQkJdW5zaWduZWQgSE9TVF9XSURFX0lOVCwKKwkJCQkJdW5zaWduZWQgSE9TVF9XSURFX0lOVCwKKwkJCQkJdW5zaWduZWQgaW50LAorCQkJCQllbnVtIG1hY2hpbmVfbW9kZSwgYm9vbCk7CisKKy8qIERldGVybWluZSBhbGlnbm1lbnQsIDE8PXJlc3VsdDw9QklHR0VTVF9BTElHTk1FTlQuICAqLworCitleHRlcm4gQ09OU1RfTU9ERV9CQVNFX0FMSUdOIHVuc2lnbmVkIGNoYXIgbW9kZV9iYXNlX2FsaWduW05VTV9NQUNISU5FX01PREVTXTsKKworZXh0ZXJuIHVuc2lnbmVkIGdldF9tb2RlX2FsaWdubWVudCAoZW51bSBtYWNoaW5lX21vZGUpOworCisjZGVmaW5lIEdFVF9NT0RFX0FMSUdOTUVOVChNT0RFKSBnZXRfbW9kZV9hbGlnbm1lbnQgKE1PREUpCisKKy8qIEZvciBlYWNoIGNsYXNzLCBnZXQgdGhlIG5hcnJvd2VzdCBtb2RlIGluIHRoYXQgY2xhc3MuICAqLworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBjbGFzc19uYXJyb3dlc3RfbW9kZVtNQVhfTU9ERV9DTEFTU107CisjZGVmaW5lIEdFVF9DTEFTU19OQVJST1dFU1RfTU9ERShDTEFTUykgXAorICAoKGVudW0gbWFjaGluZV9tb2RlKSBjbGFzc19uYXJyb3dlc3RfbW9kZVtDTEFTU10pCisKKy8qIERlZmluZSB0aGUgaW50ZWdlciBtb2RlcyB3aG9zZSBzaXplcyBhcmUgQklUU19QRVJfVU5JVCBhbmQgQklUU19QRVJfV09SRAorICAgYW5kIHRoZSBtb2RlIHdob3NlIGNsYXNzIGlzIFBtb2RlIGFuZCB3aG9zZSBzaXplIGlzIFBPSU5URVJfU0laRS4gICovCisKK2V4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBieXRlX21vZGU7CitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgd29yZF9tb2RlOworZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIHB0cl9tb2RlOworCisvKiBUYXJnZXQtZGVwZW5kZW50IG1hY2hpbmUgbW9kZSBpbml0aWFsaXphdGlvbiAtIGluIGluc24tbW9kZXMuYy4gICovCitleHRlcm4gdm9pZCBpbml0X2FkanVzdF9tYWNoaW5lX21vZGVzICh2b2lkKTsKKworI2RlZmluZSBUUlVMWV9OT09QX1RSVU5DQVRJT05fTU9ERVNfUChNT0RFMSwgTU9ERTIpIFwKKyAgVFJVTFlfTk9PUF9UUlVOQ0FUSU9OIChHRVRfTU9ERV9QUkVDSVNJT04gKE1PREUxKSwgXAorCQkJIEdFVF9NT0RFX1BSRUNJU0lPTiAoTU9ERTIpKQorCisjZGVmaW5lIEhXSV9DT01QVVRBQkxFX01PREVfUChNT0RFKSBcCisgIChTQ0FMQVJfSU5UX01PREVfUCAoTU9ERSkgXAorICAgJiYgR0VUX01PREVfUFJFQ0lTSU9OIChNT0RFKSA8PSBIT1NUX0JJVFNfUEVSX1dJREVfSU5UKQorCisjZW5kaWYgLyogbm90IEhBVkVfTUFDSElORV9NT0RFUyAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL21kNS5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTJmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvbWQ1LmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qIG1kNS5oIC0gRGVjbGFyYXRpb24gb2YgZnVuY3Rpb25zIGFuZCBkYXRhIHR5cGVzIHVzZWQgZm9yIE1ENSBzdW0KKyAgIGNvbXB1dGluZyBsaWJyYXJ5IGZ1bmN0aW9ucy4KKyAgIENvcHlyaWdodCAxOTk1LCAxOTk2LCAyMDAwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgTk9URTogVGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdGhpcyBmaWxlIGlzIG1haW50YWluZWQgd2l0aCB0aGUgR05VIEMKKyAgIExpYnJhcnkuICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAcHJlcC5haS5taXQuZWR1LgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgICBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpZm5kZWYgX01ENV9ICisjZGVmaW5lIF9NRDVfSCAxCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgZGVmaW5lZCBIQVZFX0xJTUlUU19IIHx8IF9MSUJDCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJhbnNpZGVjbC5oIgorCisvKiBUaGUgZm9sbG93aW5nIGNvbnRvcnRpb25zIGFyZSBhbiBhdHRlbXB0IHRvIHVzZSB0aGUgQyBwcmVwcm9jZXNzb3IKKyAgIHRvIGRldGVybWluZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgaXMgMzIgYml0cyB3aWRlLiAgQW4KKyAgIGFsdGVybmF0aXZlIGFwcHJvYWNoIGlzIHRvIHVzZSBhdXRvY29uZidzIEFDX0NIRUNLX1NJWkVPRiBtYWNybywgYnV0CisgICBkb2luZyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBjb21waWxlIGFuZCAqcnVuKgorICAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlLiAgTG9jYWxseSBydW5uaW5nIGNyb3NzLWNvbXBpbGVkIGV4ZWN1dGFibGVzCisgICBpcyB1c3VhbGx5IG5vdCBwb3NzaWJsZS4gICovCisKKyNpZmRlZiBfTElCQworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK3R5cGVkZWYgdV9pbnQzMl90IG1kNV91aW50MzI7Cit0eXBlZGVmIHVpbnRwdHJfdCBtZDVfdWludHB0cjsKKyNlbGlmIGRlZmluZWQgKEhBVkVfU1lTX1RZUEVTX0gpICYmIGRlZmluZWQgKEhBVkVfU1RESU5UX0gpCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cit0eXBlZGVmIHVpbnQzMl90IG1kNV91aW50MzI7Cit0eXBlZGVmIHVpbnRwdHJfdCBtZDVfdWludHB0cjsKKyNlbHNlCisjICBkZWZpbmUgSU5UX01BWF8zMl9CSVRTIDIxNDc0ODM2NDcKKworLyogSWYgVUlOVF9NQVggaXNuJ3QgZGVmaW5lZCwgYXNzdW1lIGl0J3MgYSAzMi1iaXQgdHlwZS4KKyAgIFRoaXMgc2hvdWxkIGJlIHZhbGlkIGZvciBhbGwgc3lzdGVtcyBHTlUgY2FyZXMgYWJvdXQgYmVjYXVzZQorICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCisgICAodGhhdCBjZXJ0YWlubHkgaGF2ZSA8bGltaXRzLmg+KSBoYXZlIDY0Ky1iaXQgaW50ZWdyYWwgdHlwZXMuICAqLworCisjIGlmbmRlZiBJTlRfTUFYCisjICBkZWZpbmUgSU5UX01BWCBJTlRfTUFYXzMyX0JJVFMKKyMgZW5kaWYKKworIyBpZiBJTlRfTUFYID09IElOVF9NQVhfMzJfQklUUworICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgbWQ1X3VpbnQzMjsKKyMgZWxzZQorIyAgaWYgU0hSVF9NQVggPT0gSU5UX01BWF8zMl9CSVRTCisgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtZDVfdWludDMyOworIyAgZWxzZQorIyAgIGlmIExPTkdfTUFYID09IElOVF9NQVhfMzJfQklUUworICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWQ1X3VpbnQzMjsKKyMgICBlbHNlCisgICAgIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byBldm9rZSBhbiBlcnJvci4KKyAgICAgICAgVXNpbmcgI2Vycm9yIGlzIG5vdCBwb3J0YWJsZSBlbm91Z2guICAqLworICAgICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKy8qIFdlIGhhdmUgdG8gbWFrZSBhIGd1ZXNzIGFib3V0IHRoZSBpbnRlZ2VyIHR5cGUgZXF1aXZhbGVudCBpbiBzaXplCisgICB0byBwb2ludGVycyB3aGljaCBzaG91bGQgYWx3YXlzIGJlIGNvcnJlY3QuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBtZDVfdWludHB0cjsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFN0cnVjdHVyZSB0byBzYXZlIHN0YXRlIG9mIGNvbXB1dGF0aW9uIGJldHdlZW4gdGhlIHNpbmdsZSBzdGVwcy4gICovCitzdHJ1Y3QgbWQ1X2N0eAoreworICBtZDVfdWludDMyIEE7CisgIG1kNV91aW50MzIgQjsKKyAgbWQ1X3VpbnQzMiBDOworICBtZDVfdWludDMyIEQ7CisKKyAgbWQ1X3VpbnQzMiB0b3RhbFsyXTsKKyAgbWQ1X3VpbnQzMiBidWZsZW47CisgIGNoYXIgYnVmZmVyWzEyOF0gQVRUUklCVVRFX0FMSUdORURfQUxJR05PRihtZDVfdWludDMyKTsKK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHRocmVlIGZ1bmN0aW9ucyBhcmUgYnVpbGQgdXAgdGhlIGxvdyBsZXZlbCB1c2VkIGluCisgKiB0aGUgZnVuY3Rpb25zIGBtZDVfc3RyZWFtJyBhbmQgYG1kNV9idWZmZXInLgorICovCisKKy8qIEluaXRpYWxpemUgc3RydWN0dXJlIGNvbnRhaW5pbmcgc3RhdGUgb2YgY29tcHV0YXRpb24uCisgICAoUkZDIDEzMjEsIDMuMzogU3RlcCAzKSAgKi8KK2V4dGVybiB2b2lkIG1kNV9pbml0X2N0eCAoc3RydWN0IG1kNV9jdHggKmN0eCk7CisKKy8qIFN0YXJ0aW5nIHdpdGggdGhlIHJlc3VsdCBvZiBmb3JtZXIgY2FsbHMgb2YgdGhpcyBmdW5jdGlvbiAob3IgdGhlCisgICBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB1cGRhdGUgdGhlIGNvbnRleHQgZm9yIHRoZSBuZXh0IExFTiBieXRlcworICAgc3RhcnRpbmcgYXQgQlVGRkVSLgorICAgSXQgaXMgbmVjZXNzYXJ5IHRoYXQgTEVOIGlzIGEgbXVsdGlwbGUgb2YgNjQhISEgKi8KK2V4dGVybiB2b2lkIG1kNV9wcm9jZXNzX2Jsb2NrIChjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1kNV9jdHggKmN0eCk7CisKKy8qIFN0YXJ0aW5nIHdpdGggdGhlIHJlc3VsdCBvZiBmb3JtZXIgY2FsbHMgb2YgdGhpcyBmdW5jdGlvbiAob3IgdGhlCisgICBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiB1cGRhdGUgdGhlIGNvbnRleHQgZm9yIHRoZSBuZXh0IExFTiBieXRlcworICAgc3RhcnRpbmcgYXQgQlVGRkVSLgorICAgSXQgaXMgTk9UIHJlcXVpcmVkIHRoYXQgTEVOIGlzIGEgbXVsdGlwbGUgb2YgNjQuICAqLworZXh0ZXJuIHZvaWQgbWQ1X3Byb2Nlc3NfYnl0ZXMgKGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWQ1X2N0eCAqY3R4KTsKKworLyogUHJvY2VzcyB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoZSBidWZmZXIgYW5kIHB1dCByZXN1bHQgZnJvbSBDVFgKKyAgIGluIGZpcnN0IDE2IGJ5dGVzIGZvbGxvd2luZyBSRVNCVUYuICBUaGUgcmVzdWx0IGlzIGFsd2F5cyBpbiBsaXR0bGUKKyAgIGVuZGlhbiBieXRlIG9yZGVyLCBzbyB0aGF0IGEgYnl0ZS13aXNlIG91dHB1dCB5aWVsZHMgdG8gdGhlIHdhbnRlZAorICAgQVNDSUkgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UgZGlnZXN0LgorCisgICBJTVBPUlRBTlQ6IE9uIHNvbWUgc3lzdGVtcyBpdCBpcyByZXF1aXJlZCB0aGF0IFJFU0JVRiBpcyBjb3JyZWN0bHkKKyAgIGFsaWduZWQgZm9yIGEgMzIgYml0cyB2YWx1ZS4gICovCitleHRlcm4gdm9pZCAqbWQ1X2ZpbmlzaF9jdHggKHN0cnVjdCBtZDVfY3R4ICpjdHgsIHZvaWQgKnJlc2J1Zik7CisKKworLyogUHV0IHJlc3VsdCBmcm9tIENUWCBpbiBmaXJzdCAxNiBieXRlcyBmb2xsb3dpbmcgUkVTQlVGLiAgVGhlIHJlc3VsdCBpcworICAgYWx3YXlzIGluIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlciwgc28gdGhhdCBhIGJ5dGUtd2lzZSBvdXRwdXQgeWllbGRzCisgICB0byB0aGUgd2FudGVkIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdC4KKworICAgSU1QT1JUQU5UOiBPbiBzb21lIHN5c3RlbXMgaXQgaXMgcmVxdWlyZWQgdGhhdCBSRVNCVUYgaXMgY29ycmVjdGx5CisgICBhbGlnbmVkIGZvciBhIDMyIGJpdHMgdmFsdWUuICAqLworZXh0ZXJuIHZvaWQgKm1kNV9yZWFkX2N0eCAoY29uc3Qgc3RydWN0IG1kNV9jdHggKmN0eCwgdm9pZCAqcmVzYnVmKTsKKworCisvKiBDb21wdXRlIE1ENSBtZXNzYWdlIGRpZ2VzdCBmb3IgYnl0ZXMgcmVhZCBmcm9tIFNUUkVBTS4gIFRoZQorICAgcmVzdWx0aW5nIG1lc3NhZ2UgZGlnZXN0IG51bWJlciB3aWxsIGJlIHdyaXR0ZW4gaW50byB0aGUgMTYgYnl0ZXMKKyAgIGJlZ2lubmluZyBhdCBSRVNCTE9DSy4gICovCitleHRlcm4gaW50IG1kNV9zdHJlYW0gKEZJTEUgKnN0cmVhbSwgdm9pZCAqcmVzYmxvY2spOworCisvKiBDb21wdXRlIE1ENSBtZXNzYWdlIGRpZ2VzdCBmb3IgTEVOIGJ5dGVzIGJlZ2lubmluZyBhdCBCVUZGRVIuICBUaGUKKyAgIHJlc3VsdCBpcyBhbHdheXMgaW4gbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLCBzbyB0aGF0IGEgYnl0ZS13aXNlCisgICBvdXRwdXQgeWllbGRzIHRvIHRoZSB3YW50ZWQgQVNDSUkgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UKKyAgIGRpZ2VzdC4gICovCitleHRlcm4gdm9pZCAqbWQ1X2J1ZmZlciAoY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuLCB2b2lkICpyZXNibG9jayk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL21vZGUtY2xhc3Nlcy5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvbW9kZS1jbGFzc2VzLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjA3ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL21vZGUtY2xhc3Nlcy5kZWYKQEAgLTAsMCArMSwzOCBAQAorLyogTWFjaGluZSBtb2RlIGNsYXNzIGRlZmluaXRpb25zIGZvciBHQ0MuCisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNkZWZpbmUgTU9ERV9DTEFTU0VTCQkJCQkJCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfUkFORE9NKSwJCS8qIG90aGVyICovCQkJICAgXAorICBERUZfTU9ERV9DTEFTUyAoTU9ERV9DQyksCQkvKiBjb25kaXRpb24gY29kZSBpbiBhIHJlZ2lzdGVyICovIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfSU5UKSwJCS8qIGludGVnZXIgKi8JCQkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1BBUlRJQUxfSU5UKSwJLyogaW50ZWdlciB3aXRoIHBhZGRpbmcgYml0cyAqLyAgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX0ZSQUNUKSwJCS8qIHNpZ25lZCBmcmFjdGlvbmFsIG51bWJlciAqLwkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1VGUkFDVCksCQkvKiB1bnNpZ25lZCBmcmFjdGlvbmFsIG51bWJlciAqLyAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfQUNDVU0pLAkJLyogc2lnbmVkIGFjY3VtdWxhdG9yICovCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfVUFDQ1VNKSwJCS8qIHVuc2lnbmVkIGFjY3VtdWxhdG9yICovCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfRkxPQVQpLAkJLyogZmxvYXRpbmcgcG9pbnQgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfREVDSU1BTF9GTE9BVCksCS8qIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgKi8JICAgXAorICBERUZfTU9ERV9DTEFTUyAoTU9ERV9DT01QTEVYX0lOVCksIAkvKiBjb21wbGV4IG51bWJlcnMgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfQ09NUExFWF9GTE9BVCksCQkJCQkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1ZFQ1RPUl9JTlQpLAkvKiBTSU1EIHZlY3RvcnMgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfVkVDVE9SX0ZSQUNUKSwJLyogU0lNRCB2ZWN0b3JzICovCQkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1ZFQ1RPUl9VRlJBQ1QpLAkvKiBTSU1EIHZlY3RvcnMgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfVkVDVE9SX0FDQ1VNKSwJLyogU0lNRCB2ZWN0b3JzICovCQkgICBcCisgIERFRl9NT0RFX0NMQVNTIChNT0RFX1ZFQ1RPUl9VQUNDVU0pLAkvKiBTSU1EIHZlY3RvcnMgKi8JCSAgIFwKKyAgREVGX01PREVfQ0xBU1MgKE1PREVfVkVDVE9SX0ZMT0FUKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL29iamMvb2JqYy10cmVlLmRlZiBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9vYmpjL29iamMtdHJlZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI0OTBhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9vYmpjL29iamMtdHJlZS5kZWYKQEAgLTAsMCArMSw3NiBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICBhZGRpdGlvbmFsIHRyZWUgY29kZXMgdXNlZCBpbiB0aGUgT2JqZWN0aXZlIEMgZnJvbnQgZW5kIChzZWUgdHJlZS5kZWYKKyAgIGZvciB0aGUgc3RhbmRhcmQgY29kZXMpLgorICAgQ29weXJpZ2h0IChDKSAxOTkwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKy8qIE9iamVjdGl2ZS1DIHR5cGVzLiAgKi8KK0RFRlRSRUVDT0RFIChDTEFTU19JTlRFUkZBQ0VfVFlQRSwgImNsYXNzX2ludGVyZmFjZV90eXBlIiwgdGNjX3R5cGUsIDApCitERUZUUkVFQ09ERSAoQ0xBU1NfSU1QTEVNRU5UQVRJT05fVFlQRSwgImNsYXNzX2ltcGxlbWVudGF0aW9uX3R5cGUiLAorCSAgICAgdGNjX3R5cGUsIDApCitERUZUUkVFQ09ERSAoQ0FURUdPUllfSU5URVJGQUNFX1RZUEUsICJjYXRlZ29yeV9pbnRlcmZhY2VfdHlwZSIsIHRjY190eXBlLCAwKQorREVGVFJFRUNPREUgKENBVEVHT1JZX0lNUExFTUVOVEFUSU9OX1RZUEUsImNhdGVnb3J5X2ltcGxlbWVudGF0aW9uX3R5cGUiLAorCSAgICAgdGNjX3R5cGUsIDApCitERUZUUkVFQ09ERSAoUFJPVE9DT0xfSU5URVJGQUNFX1RZUEUsICJwcm90b2NvbF9pbnRlcmZhY2VfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBPYmplY3RpdmUtQyBkZWNscy4gICovCitERUZUUkVFQ09ERSAoS0VZV09SRF9ERUNMLCAia2V5d29yZF9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorREVGVFJFRUNPREUgKElOU1RBTkNFX01FVEhPRF9ERUNMLCAiaW5zdGFuY2VfbWV0aG9kX2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCitERUZUUkVFQ09ERSAoQ0xBU1NfTUVUSE9EX0RFQ0wsICJjbGFzc19tZXRob2RfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKK0RFRlRSRUVDT0RFIChQUk9QRVJUWV9ERUNMLCAicHJvcGVydHlfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKKworLyogT2JqZWN0aXZlLUMgZXhwcmVzc2lvbnMuICAqLworREVGVFJFRUNPREUgKE1FU1NBR0VfU0VORF9FWFBSLCAibWVzc2FnZV9zZW5kX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKK0RFRlRSRUVDT0RFIChDTEFTU19SRUZFUkVOQ0VfRVhQUiwgImNsYXNzX3JlZmVyZW5jZV9leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIFRoaXMgdHJlZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZXhwcmVzc2lvbiAnb2JqZWN0LnByb3BlcnR5JywKKyAgIHdoZXJlICdvYmplY3QnIGlzIGFuIE9iamVjdGl2ZS1DIG9iamVjdCBhbmQgJ3Byb3BlcnR5JyBpcyBhbgorICAgT2JqZWN0aXZlLUMgcHJvcGVydHkuICBPcGVyYW5kIDAgaXMgdGhlIG9iamVjdCAodGhlIHRyZWUKKyAgIHJlcHJlc2VudGluZyB0aGUgZXhwcmVzc2lvbiksIGFuZCBPcGVyYW5kIDEgaXMgdGhlIHByb3BlcnR5ICh0aGUKKyAgIFBST1BFUlRZX0RFQ0wpLiAgT3BlcmFuZCAyIGlzIHRoZSAnZ2V0dGVyJyBjYWxsLCByZWFkeSB0byBiZSB1c2VkOworICAgd2UgcHJlZ2VuZXJhdGUgaXQgYmVjYXVzZSBpdCBpcyBoYXJkIHRvIGdlbmVyYXRlIGl0IHByb3Blcmx5IGxhdGVyCisgICBvbi4gIE9wZXJhbmQgMyByZWNvcmRzIHdoZXRoZXIgdXNpbmcgdGhlICdnZXR0ZXInIGNhbGwgc2hvdWxkCisgICBnZW5lcmF0ZSBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgb3Igbm90LgorCisgICBBIFBST1BFUlRZX1JFRiB0cmVlIG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIGludG8gJ3NldHRlcicgYW5kCisgICAnZ2V0dGVyJyBjYWxscyBhdCBzb21lIHBvaW50OyBhdCB0aGUgbW9tZW50IHRoaXMgaGFwcGVucyBpbiB0d28KKyAgIHBsYWNlczoKKworICAgICAqIGlmIHdlIGRldGVjdCB0aGF0IGEgbW9kaWZ5IGV4cHJlc3Npb24gaXMgYmVpbmcgYXBwbGllZCB0byBhCisgICAgICAgUFJPUEVSVFlfUkVGLCB0aGVuIHdlIHRyYW5zZm9ybSB0aGF0IGludG8gYSAnZ2V0dGVyJyBjYWxsICh0aGlzCisgICAgICAgaGFwcGVucyBpbiBidWlsZF9tb2RpZnlfZXhwcigpIG9yIGNwX2J1aWxkX21vZGlmeV9leHByKCkpLgorCisgICAgKiBlbHNlLCBpdCB3aWxsIHJlbWFpbiBhcyBhIFBST1BFUlRZX1JFRiB1bnRpbCB3ZSBnZXQgdG8KKyAgICAgIGdpbXBsaWZpY2F0aW9uOyBhdCB0aGF0IHBvaW50LCB3ZSBjb252ZXJ0IGVhY2ggUFJPUEVSVFlfUkVGIGludG8KKyAgICAgIGEgJ2dldHRlcicgY2FsbCBkdXJpbmcgT2JqQy9PYmpDKysgZ2ltcGxpZnkuICBBdCB0aGF0IHBvaW50LCBpdAorICAgICAgaXMgcXVpdGUgaGFyZCB0byBidWlsZCBhICdnZXR0ZXInIGNhbGwsIGJ1dCB3ZSBoYXZlIGFscmVhZHkgYnVpbHQKKyAgICAgIGl0IGFuZCB3ZSBqdXN0IG5lZWQgdG8gc3dhcCBPcGVyYW5kIDIgaW4sIGFuZCBlbWl0IHRoZSBkZXByZWNhdGlvbgorICAgICAgd2FybmluZ3MgZnJvbSBPcGVyYW5kIDMgaWYgbmVlZGVkLgorCisgIFBsZWFzZSBub3RlIHRoYXQgd2hlbiB0aGUgT2JqZWN0aXZlLUMgMi4wICJkb3Qtc3ludGF4IiAnb2JqZWN0LmNvbXBvbmVudCcKKyAgaXMgZW5jb3VudGVyZWQsIHdoZXJlICdjb21wb25lbnQnIGlzIG5vdCBhIHByb3BlcnR5IGJ1dCB0aGVyZSBhcmUgdmFsaWQKKyAgc2V0dGVyL2dldHRlciBtZXRob2RzIGZvciBpdCwgYW4gYXJ0aWZpY2lhbCBQUk9QRVJUWV9ERUNMIGlzIGdlbmVyYXRlZAorICBhbmQgdXNlZCBpbiB0aGUgUFJPUEVSVFlfUkVGLiAgKi8KK0RFRlRSRUVDT0RFIChQUk9QRVJUWV9SRUYsICJwcm9wZXJ0eV9yZWYiLCB0Y2NfZXhwcmVzc2lvbiwgNCkKKworLyoKK0xvY2FsIHZhcmlhYmxlczoKK21vZGU6YworRW5kOgorKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9vYnN0YWNrLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvb2JzdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDg3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvb2JzdGFjay5oCkBAIC0wLDAgKzEsNTQ1IEBACisvKiBvYnN0YWNrLmggLSBvYmplY3Qgc3RhY2sgbWFjcm9zCisgICBDb3B5cmlnaHQgMTk4OCwgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NiwgMTk5NywgMTk5OCwKKyAgIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisKKyAgIE5PVEU6IFRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRoaXMgZmlsZSBpcyBtYWludGFpbmVkIHdpdGggdGhlIEdOVSBDIExpYnJhcnkuCisgICBCdWdzIGNhbiBiZSByZXBvcnRlZCB0byBidWctZ2xpYmNAZ251Lm9yZy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorICAgVVNBLiAgKi8KKworLyogU3VtbWFyeToKKworQWxsIHRoZSBhcHBhcmVudCBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGFyZSBtYWNyb3MuIFRoZSBpZGVhCitpcyB0aGF0IHlvdSB3b3VsZCB1c2UgdGhlc2UgcHJlLXRlc3RlZCBtYWNyb3MgdG8gc29sdmUgYQordmVyeSBzcGVjaWZpYyBzZXQgb2YgcHJvYmxlbXMsIGFuZCB0aGV5IHdvdWxkIHJ1biBmYXN0LgorQ2F1dGlvbjogbm8gc2lkZS1lZmZlY3RzIGluIGFyZ3VtZW50cyBwbGVhc2UhISBUaGV5IG1heSBiZQorZXZhbHVhdGVkIE1BTlkgdGltZXMhIQorCitUaGVzZSBtYWNyb3Mgb3BlcmF0ZSBhIHN0YWNrIG9mIG9iamVjdHMuICBFYWNoIG9iamVjdCBzdGFydHMgbGlmZQorc21hbGwsIGFuZCBtYXkgZ3JvdyB0byBtYXR1cml0eS4gIChDb25zaWRlciBidWlsZGluZyBhIHdvcmQgc3lsbGFibGUKK2J5IHN5bGxhYmxlLikgIEFuIG9iamVjdCBjYW4gbW92ZSB3aGlsZSBpdCBpcyBncm93aW5nLiAgT25jZSBpdCBoYXMKK2JlZW4gImZpbmlzaGVkIiBpdCBuZXZlciBjaGFuZ2VzIGFkZHJlc3MgYWdhaW4uICBTbyB0aGUgInRvcCBvZiB0aGUKK3N0YWNrIiBpcyB0eXBpY2FsbHkgYW4gaW1tYXR1cmUgZ3Jvd2luZyBvYmplY3QsIHdoaWxlIHRoZSByZXN0IG9mIHRoZQorc3RhY2sgaXMgb2YgbWF0dXJlLCBmaXhlZCBzaXplIGFuZCBmaXhlZCBhZGRyZXNzIG9iamVjdHMuCisKK1RoZXNlIHJvdXRpbmVzIGdyYWIgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSwgdXNpbmcgYSBmdW5jdGlvbiB5b3UKK3N1cHBseSwgY2FsbGVkIGBvYnN0YWNrX2NodW5rX2FsbG9jJy4gIE9uIG9jY2FzaW9uLCB0aGV5IGZyZWUgY2h1bmtzLAorYnkgY2FsbGluZyBgb2JzdGFja19jaHVua19mcmVlJy4gIFlvdSBtdXN0IGRlZmluZSB0aGVtIGFuZCBkZWNsYXJlCit0aGVtIGJlZm9yZSB1c2luZyBhbnkgb2JzdGFjayBtYWNyb3MuCisKK0VhY2ggaW5kZXBlbmRlbnQgc3RhY2sgaXMgcmVwcmVzZW50ZWQgYnkgYSBgc3RydWN0IG9ic3RhY2snLgorRWFjaCBvZiB0aGUgb2JzdGFjayBtYWNyb3MgZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3VjaCBhIHN0cnVjdHVyZQorYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCitPbmUgbW90aXZhdGlvbiBmb3IgdGhpcyBwYWNrYWdlIGlzIHRoZSBwcm9ibGVtIG9mIGdyb3dpbmcgY2hhciBzdHJpbmdzCitpbiBzeW1ib2wgdGFibGVzLiAgVW5sZXNzIHlvdSBhcmUgImZhc2Npc3QgcGlnIHdpdGggYSByZWFkLW9ubHkgbWluZCIKKy0tR29zcGVyJ3MgaW1tb3J0YWwgcXVvdGUgZnJvbSBIQUtNRU0gaXRlbSAxNTQsIG91dCBvZiBjb250ZXh0LS15b3UKK3dvdWxkIG5vdCBsaWtlIHRvIHB1dCBhbnkgYXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgeW91cgorc3ltYm9scy4KKworSW4gcHJhY3RpY2UgdGhpcyBvZnRlbiBtZWFucyB5b3Ugd2lsbCBidWlsZCBtYW55IHNob3J0IHN5bWJvbHMgYW5kIGEKK2ZldyBsb25nIHN5bWJvbHMuICBBdCB0aGUgdGltZSB5b3UgYXJlIHJlYWRpbmcgYSBzeW1ib2wgeW91IGRvbid0IGtub3cKK2hvdyBsb25nIGl0IGlzLiAgT25lIHRyYWRpdGlvbmFsIG1ldGhvZCBpcyB0byByZWFkIGEgc3ltYm9sIGludG8gYQorYnVmZmVyLCByZWFsbG9jKClhdGluZyB0aGUgYnVmZmVyIGV2ZXJ5IHRpbWUgeW91IHRyeSB0byByZWFkIGEgc3ltYm9sCit0aGF0IGlzIGxvbmdlciB0aGFuIHRoZSBidWZmZXIuICBUaGlzIGlzIGJlYXV0LCBidXQgeW91IHN0aWxsIHdpbGwKK3dhbnQgdG8gY29weSB0aGUgc3ltYm9sIGZyb20gdGhlIGJ1ZmZlciB0byBhIG1vcmUgcGVybWFuZW50CitzeW1ib2wtdGFibGUgZW50cnkgc2F5IGFib3V0IGhhbGYgdGhlIHRpbWUuCisKK1dpdGggb2JzdGFja3MsIHlvdSBjYW4gd29yayBkaWZmZXJlbnRseS4gIFVzZSBvbmUgb2JzdGFjayBmb3IgYWxsIHN5bWJvbAorbmFtZXMuICBBcyB5b3UgcmVhZCBhIHN5bWJvbCwgZ3JvdyB0aGUgbmFtZSBpbiB0aGUgb2JzdGFjayBncmFkdWFsbHkuCitXaGVuIHRoZSBuYW1lIGlzIGNvbXBsZXRlLCBmaW5hbGl6ZSBpdC4gIFRoZW4sIGlmIHRoZSBzeW1ib2wgZXhpc3RzIGFscmVhZHksCitmcmVlIHRoZSBuZXdseSByZWFkIG5hbWUuCisKK1RoZSB3YXkgd2UgZG8gdGhpcyBpcyB0byB0YWtlIGEgbGFyZ2UgY2h1bmssIGFsbG9jYXRpbmcgbWVtb3J5IGZyb20KK2xvdyBhZGRyZXNzZXMuICBXaGVuIHlvdSB3YW50IHRvIGJ1aWxkIGEgc3ltYm9sIGluIHRoZSBjaHVuayB5b3UganVzdAorYWRkIGNoYXJzIGFib3ZlIHRoZSBjdXJyZW50ICJoaWdoIHdhdGVyIG1hcmsiIGluIHRoZSBjaHVuay4gIFdoZW4geW91CitoYXZlIGZpbmlzaGVkIGFkZGluZyBjaGFycywgYmVjYXVzZSB5b3UgZ290IHRvIHRoZSBlbmQgb2YgdGhlIHN5bWJvbCwKK3lvdSBrbm93IGhvdyBsb25nIHRoZSBjaGFycyBhcmUsIGFuZCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBvYmplY3QuCitNb3N0bHkgdGhlIGNoYXJzIHdpbGwgbm90IGJ1cnN0IG92ZXIgdGhlIGhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgY2h1bmssCitiZWNhdXNlIHlvdSB3b3VsZCB0eXBpY2FsbHkgZXhwZWN0IGEgY2h1bmsgdG8gYmUgKHNheSkgMTAwIHRpbWVzIGFzCitsb25nIGFzIGFuIGF2ZXJhZ2Ugb2JqZWN0LgorCitJbiBjYXNlIHRoYXQgaXNuJ3QgY2xlYXIsIHdoZW4gd2UgaGF2ZSBlbm91Z2ggY2hhcnMgdG8gbWFrZSB1cAordGhlIG9iamVjdCwgVEhFWSBBUkUgQUxSRUFEWSBDT05USUdVT1VTIElOIFRIRSBDSFVOSyAoZ3VhcmFudGVlZCkKK3NvIHdlIGp1c3QgcG9pbnQgdG8gaXQgd2hlcmUgaXQgbGllcy4gIE5vIG1vdmluZyBvZiBjaGFycyBpcworbmVlZGVkIGFuZCB0aGlzIGlzIHRoZSBzZWNvbmQgd2luOiBwb3RlbnRpYWxseSBsb25nIHN0cmluZ3MgbmVlZAorbmV2ZXIgYmUgZXhwbGljaXRseSBzaHVmZmxlZC4gT25jZSBhbiBvYmplY3QgaXMgZm9ybWVkLCBpdCBkb2VzIG5vdAorY2hhbmdlIGl0cyBhZGRyZXNzIGR1cmluZyBpdHMgbGlmZXRpbWUuCisKK1doZW4gdGhlIGNoYXJzIGJ1cnN0IG92ZXIgYSBjaHVuayBib3VuZGFyeSwgd2UgYWxsb2NhdGUgYSBsYXJnZXIKK2NodW5rLCBhbmQgdGhlbiBjb3B5IHRoZSBwYXJ0bHkgZm9ybWVkIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZAorY2h1bmsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGxhcmdlciBjaHVuay4gIFdlIHRoZW4gY2Fycnkgb24KK2FjY3JldGluZyBjaGFyYWN0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBhcyB3ZSBub3JtYWxseSB3b3VsZC4KKworQSBzcGVjaWFsIG1hY3JvIGlzIHByb3ZpZGVkIHRvIGFkZCBhIHNpbmdsZSBjaGFyIGF0IGEgdGltZSB0byBhCitncm93aW5nIG9iamVjdC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgcmVnaXN0ZXIgdmFyaWFibGVzLCB3aGljaAorYnJlYWsgdGhlIG9yZGluYXJ5ICdncm93dGgnIG1hY3JvLgorCitTdW1tYXJ5OgorCVdlIGFsbG9jYXRlIGxhcmdlIGNodW5rcy4KKwlXZSBjYXJ2ZSBvdXQgb25lIG9iamVjdCBhdCBhIHRpbWUgZnJvbSB0aGUgY3VycmVudCBjaHVuay4KKwlPbmNlIGNhcnZlZCwgYW4gb2JqZWN0IG5ldmVyIG1vdmVzLgorCVdlIGFyZSBmcmVlIHRvIGFwcGVuZCBkYXRhIG9mIGFueSBzaXplIHRvIHRoZSBjdXJyZW50bHkKKwkgIGdyb3dpbmcgb2JqZWN0LgorCUV4YWN0bHkgb25lIG9iamVjdCBpcyBncm93aW5nIGluIGFuIG9ic3RhY2sgYXQgYW55IG9uZSB0aW1lLgorCVlvdSBjYW4gcnVuIG9uZSBvYnN0YWNrIHBlciBjb250cm9sIGJsb2NrLgorCVlvdSBtYXkgaGF2ZSBhcyBtYW55IGNvbnRyb2wgYmxvY2tzIGFzIHlvdSBkYXJlLgorCUJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyBpdCwgeW91IGNhbiBgdW53aW5kJyBhbiBvYnN0YWNrCisJICBiYWNrIHRvIGEgcHJldmlvdXMgc3RhdGUuIChZb3UgbWF5IHJlbW92ZSBvYmplY3RzIG11Y2gKKwkgIGFzIHlvdSB3b3VsZCB3aXRoIGEgc3RhY2suKQorKi8KKworCisvKiBEb24ndCBkbyB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1vcmUgdGhhbiBvbmNlLiAgKi8KKworI2lmbmRlZiBfT0JTVEFDS19ICisjZGVmaW5lIF9PQlNUQUNLX0ggMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisMCisvKiBXZSB1c2Ugc3VidHJhY3Rpb24gb2YgKGNoYXIgKikgMCBpbnN0ZWFkIG9mIGNhc3RpbmcgdG8gaW50CisgICBiZWNhdXNlIG9uIHdvcmQtYWRkcmVzc2FibGUgbWFjaGluZXMgYSBzaW1wbGUgY2FzdCB0byBpbnQKKyAgIG1heSBpZ25vcmUgdGhlIGJ5dGUtd2l0aGluLXdvcmQgZmllbGQgb2YgdGhlIHBvaW50ZXIuICAqLworCisjaWZuZGVmIF9fUFRSX1RPX0lOVAorIyBkZWZpbmUgX19QVFJfVE9fSU5UKFApICgoUCkgLSAoY2hhciAqKSAwKQorI2VuZGlmCisKKyNpZm5kZWYgX19JTlRfVE9fUFRSCisjIGRlZmluZSBfX0lOVF9UT19QVFIoUCkgKChQKSArIChjaGFyICopIDApCisjZW5kaWYKKworLyogV2UgbmVlZCB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0aW5nIG9iamVjdC4gIElmIF9fUFRSRElGRl9UWVBFX18gaXMKKyAgIGRlZmluZWQsIGFzIHdpdGggR05VIEMsIHVzZSB0aGF0OyB0aGF0IHdheSB3ZSBkb24ndCBwb2xsdXRlIHRoZQorICAgbmFtZXNwYWNlIHdpdGggPHN0ZGRlZi5oPidzIHN5bWJvbHMuICBPdGhlcndpc2UsIGlmIDxzdGRkZWYuaD4gaXMKKyAgIGF2YWlsYWJsZSwgaW5jbHVkZSBpdCBhbmQgdXNlIHB0cmRpZmZfdC4gIEluIHRyYWRpdGlvbmFsIEMsIGxvbmcgaXMKKyAgIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvLiAgKi8KKworI2lmZGVmIF9fUFRSRElGRl9UWVBFX18KKyMgZGVmaW5lIFBUUl9JTlRfVFlQRSBfX1BUUkRJRkZfVFlQRV9fCisjZWxzZQorIyBpZmRlZiBIQVZFX1NURERFRl9ICisjICBpbmNsdWRlIDxzdGRkZWYuaD4KKyMgIGRlZmluZSBQVFJfSU5UX1RZUEUgcHRyZGlmZl90CisjIGVsc2UKKyMgIGRlZmluZSBQVFJfSU5UX1RZUEUgbG9uZworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJJTkdfSAorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyMgZGVmaW5lIF9vYnN0YWNrX21lbWNweShUbywgRnJvbSwgTikgbWVtY3B5ICgoVG8pLCAoRnJvbSksIChOKSkKKyNlbHNlCisjIGlmZGVmIG1lbWNweQorIyAgZGVmaW5lIF9vYnN0YWNrX21lbWNweShUbywgRnJvbSwgTikgbWVtY3B5ICgoVG8pLCAoY2hhciAqKShGcm9tKSwgKE4pKQorIyBlbHNlCisjICBkZWZpbmUgX29ic3RhY2tfbWVtY3B5KFRvLCBGcm9tLCBOKSBiY29weSAoKGNoYXIgKikoRnJvbSksIChUbyksIChOKSkKKyMgZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3QgX29ic3RhY2tfY2h1bmsJCS8qIExpdmVzIGF0IGZyb250IG9mIGVhY2ggY2h1bmsuICovCit7CisgIGNoYXIgICpsaW1pdDsJCQkvKiAxIHBhc3QgZW5kIG9mIHRoaXMgY2h1bmsgKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpwcmV2OwkvKiBhZGRyZXNzIG9mIHByaW9yIGNodW5rIG9yIE5VTEwgKi8KKyAgY2hhcgljb250ZW50c1s0XTsJCS8qIG9iamVjdHMgYmVnaW4gaGVyZSAqLworfTsKKworc3RydWN0IG9ic3RhY2sJCS8qIGNvbnRyb2wgY3VycmVudCBvYmplY3QgaW4gY3VycmVudCBjaHVuayAqLworeworICBsb25nCWNodW5rX3NpemU7CQkvKiBwcmVmZXJyZWQgc2l6ZSB0byBhbGxvY2F0ZSBjaHVua3MgaW4gKi8KKyAgc3RydWN0IF9vYnN0YWNrX2NodW5rICpjaHVuazsJLyogYWRkcmVzcyBvZiBjdXJyZW50IHN0cnVjdCBvYnN0YWNrX2NodW5rICovCisgIGNoYXIJKm9iamVjdF9iYXNlOwkJLyogYWRkcmVzcyBvZiBvYmplY3Qgd2UgYXJlIGJ1aWxkaW5nICovCisgIGNoYXIJKm5leHRfZnJlZTsJCS8qIHdoZXJlIHRvIGFkZCBuZXh0IGNoYXIgdG8gY3VycmVudCBvYmplY3QgKi8KKyAgY2hhcgkqY2h1bmtfbGltaXQ7CQkvKiBhZGRyZXNzIG9mIGNoYXIgYWZ0ZXIgY3VycmVudCBjaHVuayAqLworICBQVFJfSU5UX1RZUEUgdGVtcDsJCS8qIFRlbXBvcmFyeSBmb3Igc29tZSBtYWNyb3MuICAqLworICBpbnQgICBhbGlnbm1lbnRfbWFzazsJCS8qIE1hc2sgb2YgYWxpZ25tZW50IGZvciBlYWNoIG9iamVjdC4gKi8KKyAgLyogVGhlc2UgcHJvdG90eXBlcyB2YXJ5IGJhc2VkIG9uIGB1c2VfZXh0cmFfYXJnJywgYW5kIHdlIHVzZQorICAgICBjYXN0cyB0byB0aGUgcHJvdG90eXBlbGVzcyBmdW5jdGlvbiB0eXBlIGluIGFsbCBhc3NpZ25tZW50cywKKyAgICAgYnV0IGhhdmluZyBwcm90b3R5cGVzIGhlcmUgcXVpZXRzIC1Xc3RyaWN0LXByb3RvdHlwZXMuICAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKigqY2h1bmtmdW4pICh2b2lkICosIGxvbmcpOworICB2b2lkICgqZnJlZWZ1bikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopOworICB2b2lkICpleHRyYV9hcmc7CQkvKiBmaXJzdCBhcmcgZm9yIGNodW5rIGFsbG9jL2RlYWxsb2MgZnVuY3MgKi8KKyAgdW5zaWduZWQgdXNlX2V4dHJhX2FyZzoxOwkvKiBjaHVuayBhbGxvYy9kZWFsbG9jIGZ1bmNzIHRha2UgZXh0cmEgYXJnICovCisgIHVuc2lnbmVkIG1heWJlX2VtcHR5X29iamVjdDoxOy8qIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgY3VycmVudAorCQkJCSAgIGNodW5rIGNvbnRhaW5zIGEgemVyby1sZW5ndGggb2JqZWN0LiAgVGhpcworCQkJCSAgIHByZXZlbnRzIGZyZWVpbmcgdGhlIGNodW5rIGlmIHdlIGFsbG9jYXRlCisJCQkJICAgYSBiaWdnZXIgY2h1bmsgdG8gcmVwbGFjZSBpdC4gKi8KKyAgdW5zaWduZWQgYWxsb2NfZmFpbGVkOjE7CS8qIE5vIGxvbmdlciB1c2VkLCBhcyB3ZSBub3cgY2FsbCB0aGUgZmFpbGVkCisJCQkJICAgaGFuZGxlciBvbiBlcnJvciwgYnV0IHJldGFpbmVkIGZvciBiaW5hcnkKKwkJCQkgICBjb21wYXRpYmlsaXR5LiAgKi8KK307CisKKy8qIERlY2xhcmUgdGhlIGV4dGVybmFsIGZ1bmN0aW9ucyB3ZSB1c2U7IHRoZXkgYXJlIGluIG9ic3RhY2suYy4gICovCisKK2V4dGVybiB2b2lkIF9vYnN0YWNrX25ld2NodW5rIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQpOworZXh0ZXJuIHZvaWQgX29ic3RhY2tfZnJlZSAoc3RydWN0IG9ic3RhY2sgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgX29ic3RhY2tfYmVnaW4gKHN0cnVjdCBvYnN0YWNrICosIGludCwgaW50LAorCQkJICAgIHZvaWQgKigqKSAobG9uZyksIHZvaWQgKCopICh2b2lkICopKTsKK2V4dGVybiBpbnQgX29ic3RhY2tfYmVnaW5fMSAoc3RydWN0IG9ic3RhY2sgKiwgaW50LCBpbnQsCisJCQkgICAgIHZvaWQgKigqKSAodm9pZCAqLCBsb25nKSwKKwkJCSAgICAgdm9pZCAoKikgKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiBpbnQgX29ic3RhY2tfbWVtb3J5X3VzZWQgKHN0cnVjdCBvYnN0YWNrICopOworDAorLyogRG8gdGhlIGZ1bmN0aW9uLWRlY2xhcmF0aW9ucyBhZnRlciB0aGUgc3RydWN0cworICAgYnV0IGJlZm9yZSBkZWZpbmluZyB0aGUgbWFjcm9zLiAgKi8KKwordm9pZCBvYnN0YWNrX2luaXQgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrKTsKKwordm9pZCAqIG9ic3RhY2tfYWxsb2MgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgc2l6ZSk7CisKK3ZvaWQgKiBvYnN0YWNrX2NvcHkgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICphZGRyZXNzLCBpbnQgc2l6ZSk7Cit2b2lkICogb2JzdGFja19jb3B5MCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIHZvaWQgKmFkZHJlc3MsIGludCBzaXplKTsKKwordm9pZCBvYnN0YWNrX2ZyZWUgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICpibG9jayk7CisKK3ZvaWQgb2JzdGFja19ibGFuayAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBzaXplKTsKKwordm9pZCBvYnN0YWNrX2dyb3cgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7Cit2b2lkIG9ic3RhY2tfZ3JvdzAgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7CisKK3ZvaWQgb2JzdGFja18xZ3JvdyAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBkYXRhX2NoYXIpOwordm9pZCBvYnN0YWNrX3B0cl9ncm93IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgdm9pZCAqZGF0YSk7Cit2b2lkIG9ic3RhY2tfaW50X2dyb3cgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgZGF0YSk7CisKK3ZvaWQgKiBvYnN0YWNrX2ZpbmlzaCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOworCitpbnQgb2JzdGFja19vYmplY3Rfc2l6ZSAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOworCitpbnQgb2JzdGFja19yb29tIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7Cit2b2lkIG9ic3RhY2tfbWFrZV9yb29tIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgaW50IHNpemUpOwordm9pZCBvYnN0YWNrXzFncm93X2Zhc3QgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrLCBpbnQgZGF0YV9jaGFyKTsKK3ZvaWQgb2JzdGFja19wdHJfZ3Jvd19mYXN0IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgdm9pZCAqZGF0YSk7Cit2b2lkIG9ic3RhY2tfaW50X2dyb3dfZmFzdCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2ssIGludCBkYXRhKTsKK3ZvaWQgb2JzdGFja19ibGFua19mYXN0IChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgaW50IHNpemUpOworCit2b2lkICogb2JzdGFja19iYXNlIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7Cit2b2lkICogb2JzdGFja19uZXh0X2ZyZWUgKHN0cnVjdCBvYnN0YWNrICpvYnN0YWNrKTsKK2ludCBvYnN0YWNrX2FsaWdubWVudF9tYXNrIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7CitpbnQgb2JzdGFja19jaHVua19zaXplIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjayk7CitpbnQgb2JzdGFja19tZW1vcnlfdXNlZCAoc3RydWN0IG9ic3RhY2sgKm9ic3RhY2spOworCisvKiBFcnJvciBoYW5kbGVyIGNhbGxlZCB3aGVuIGBvYnN0YWNrX2NodW5rX2FsbG9jJyBmYWlsZWQgdG8gYWxsb2NhdGUKKyAgIG1vcmUgbWVtb3J5LiAgVGhpcyBjYW4gYmUgc2V0IHRvIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uLiAgVGhlCisgICBkZWZhdWx0IGFjdGlvbiBpcyB0byBwcmludCBhIG1lc3NhZ2UgYW5kIGFib3J0LiAgKi8KK2V4dGVybiB2b2lkICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKHZvaWQpOworCisvKiBFeGl0IHZhbHVlIHVzZWQgd2hlbiBgcHJpbnRfYW5kX2Fib3J0JyBpcyB1c2VkLiAgKi8KK2V4dGVybiBpbnQgb2JzdGFja19leGl0X2ZhaWx1cmU7CisMCisvKiBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBvYmplY3QgYmVpbmcgYWxsb2NhdGVkIG9yIHRvIGJlIGFsbG9jYXRlZCBuZXh0LgorICAgTm90ZSB0aGF0IHRoaXMgbWlnaHQgbm90IGJlIHRoZSBmaW5hbCBhZGRyZXNzIG9mIHRoZSBvYmplY3QKKyAgIGJlY2F1c2UgYSBuZXcgY2h1bmsgbWlnaHQgYmUgbmVlZGVkIHRvIGhvbGQgdGhlIGZpbmFsIHNpemUuICAqLworCisjZGVmaW5lIG9ic3RhY2tfYmFzZShoKSAoKGgpLT5vYmplY3RfYmFzZSkKKworLyogU2l6ZSBmb3IgYWxsb2NhdGluZyBvcmRpbmFyeSBjaHVua3MuICAqLworCisjZGVmaW5lIG9ic3RhY2tfY2h1bmtfc2l6ZShoKSAoKGgpLT5jaHVua19zaXplKQorCisvKiBQb2ludGVyIHRvIG5leHQgYnl0ZSBub3QgeWV0IGFsbG9jYXRlZCBpbiBjdXJyZW50IGNodW5rLiAgKi8KKworI2RlZmluZSBvYnN0YWNrX25leHRfZnJlZShoKQkoKGgpLT5uZXh0X2ZyZWUpCisKKy8qIE1hc2sgc3BlY2lmeWluZyBsb3cgYml0cyB0aGF0IHNob3VsZCBiZSBjbGVhciBpbiBhZGRyZXNzIG9mIGFuIG9iamVjdC4gICovCisKKyNkZWZpbmUgb2JzdGFja19hbGlnbm1lbnRfbWFzayhoKSAoKGgpLT5hbGlnbm1lbnRfbWFzaykKKworLyogVG8gcHJldmVudCBwcm90b3R5cGUgd2FybmluZ3MgcHJvdmlkZSBjb21wbGV0ZSBhcmd1bWVudCBsaXN0IGluCisgICBzdGFuZGFyZCBDIHZlcnNpb24uICAqLworIyBkZWZpbmUgb2JzdGFja19pbml0KGgpIFwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgMCwgMCwgXAorCQkgICh2b2lkICooKikgKGxvbmcpKSBvYnN0YWNrX2NodW5rX2FsbG9jLCAodm9pZCAoKikgKHZvaWQgKikpIG9ic3RhY2tfY2h1bmtfZnJlZSkKKworIyBkZWZpbmUgb2JzdGFja19iZWdpbihoLCBzaXplKSBcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIChzaXplKSwgMCwgXAorCQkgICh2b2lkICooKikgKGxvbmcpKSBvYnN0YWNrX2NodW5rX2FsbG9jLCAodm9pZCAoKikgKHZvaWQgKikpIG9ic3RhY2tfY2h1bmtfZnJlZSkKKworIyBkZWZpbmUgb2JzdGFja19zcGVjaWZ5X2FsbG9jYXRpb24oaCwgc2l6ZSwgYWxpZ25tZW50LCBjaHVua2Z1biwgZnJlZWZ1bikgXAorICBfb2JzdGFja19iZWdpbiAoKGgpLCAoc2l6ZSksIChhbGlnbm1lbnQpLCBcCisJCSAgICAodm9pZCAqKCopIChsb25nKSkgKGNodW5rZnVuKSwgKHZvaWQgKCopICh2b2lkICopKSAoZnJlZWZ1bikpCisKKyMgZGVmaW5lIG9ic3RhY2tfc3BlY2lmeV9hbGxvY2F0aW9uX3dpdGhfYXJnKGgsIHNpemUsIGFsaWdubWVudCwgY2h1bmtmdW4sIGZyZWVmdW4sIGFyZykgXAorICBfb2JzdGFja19iZWdpbl8xICgoaCksIChzaXplKSwgKGFsaWdubWVudCksIFwKKwkJICAgICh2b2lkICooKikgKHZvaWQgKiwgbG9uZykpIChjaHVua2Z1biksIFwKKwkJICAgICh2b2lkICgqKSAodm9pZCAqLCB2b2lkICopKSAoZnJlZWZ1biksIChhcmcpKQorCisjIGRlZmluZSBvYnN0YWNrX2NodW5rZnVuKGgsIG5ld2NodW5rZnVuKSBcCisgICgoaCkgLT4gY2h1bmtmdW4gPSAoc3RydWN0IF9vYnN0YWNrX2NodW5rICooKikodm9pZCAqLCBsb25nKSkgKG5ld2NodW5rZnVuKSkKKworIyBkZWZpbmUgb2JzdGFja19mcmVlZnVuKGgsIG5ld2ZyZWVmdW4pIFwKKyAgKChoKSAtPiBmcmVlZnVuID0gKHZvaWQgKCopKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSAobmV3ZnJlZWZ1bikpCisKKyNkZWZpbmUgb2JzdGFja18xZ3Jvd19mYXN0KGgsYWNoYXIpICgqKChoKS0+bmV4dF9mcmVlKSsrID0gKGFjaGFyKSkKKworI2RlZmluZSBvYnN0YWNrX2JsYW5rX2Zhc3QoaCxuKSAoKGgpLT5uZXh0X2ZyZWUgKz0gKG4pKQorCisjZGVmaW5lIG9ic3RhY2tfbWVtb3J5X3VzZWQoaCkgX29ic3RhY2tfbWVtb3J5X3VzZWQgKGgpCisMCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCisvKiBOZXh0U3RlcCAyLjAgY2MgaXMgcmVhbGx5IGdjYyAxLjkzIGJ1dCBpdCBkZWZpbmVzIF9fR05VQ19fID0gMiBhbmQKKyAgIGRvZXMgbm90IGltcGxlbWVudCBfX2V4dGVuc2lvbl9fLiAgQnV0IHRoYXQgY29tcGlsZXIgZG9lc24ndCBkZWZpbmUKKyAgIF9fR05VQ19NSU5PUl9fLiAgKi8KKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX05lWFRfXyAmJiAhX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX19leHRlbnNpb25fXworIyBlbmRpZgorCisvKiBGb3IgR05VIEMsIGlmIG5vdCAtdHJhZGl0aW9uYWwsCisgICB3ZSBjYW4gZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBjb21wdXRlIGFsbCBhcmdzIG9ubHkgb25jZQorICAgd2l0aG91dCB1c2luZyBhIGdsb2JhbCB2YXJpYWJsZS4KKyAgIEFsc28sIHdlIGNhbiBhdm9pZCB1c2luZyB0aGUgYHRlbXAnIHNsb3QsIHRvIG1ha2UgZmFzdGVyIGNvZGUuICAqLworCisjIGRlZmluZSBvYnN0YWNrX29iamVjdF9zaXplKE9CU1RBQ0spCQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgICAgKHVuc2lnbmVkKSAoX19vLT5uZXh0X2ZyZWUgLSBfX28tPm9iamVjdF9iYXNlKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19yb29tKE9CU1RBQ0spCQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICAgICh1bnNpZ25lZCkgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfbWFrZV9yb29tKE9CU1RBQ0ssbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+Y2h1bmtfbGltaXQgLSBfX28tPm5leHRfZnJlZSA8IF9fbGVuKQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfZW1wdHlfcChPQlNUQUNLKQkJCQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisgICh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICAgIChfX28tPmNodW5rLT5wcmV2ID09IDAgJiYgX19vLT5uZXh0X2ZyZWUgLSBfX28tPmNodW5rLT5jb250ZW50cyA9PSAwKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ncm93KE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gPiBfX28tPmNodW5rX2xpbWl0KQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgX29ic3RhY2tfbWVtY3B5IChfX28tPm5leHRfZnJlZSwgKHdoZXJlKSwgX19sZW4pOwkJCVwKKyAgIF9fby0+bmV4dF9mcmVlICs9IF9fbGVuOwkJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3cwKE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gKyAxID4gX19vLT5jaHVua19saW1pdCkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuICsgMSk7CQkJCVwKKyAgIF9vYnN0YWNrX21lbWNweSAoX19vLT5uZXh0X2ZyZWUsICh3aGVyZSksIF9fbGVuKTsJCQlcCisgICBfX28tPm5leHRfZnJlZSArPSBfX2xlbjsJCQkJCQlcCisgICAqKF9fby0+bmV4dF9mcmVlKSsrID0gMDsJCQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja18xZ3JvdyhPQlNUQUNLLGRhdHVtKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIDEgPiBfX28tPmNodW5rX2xpbWl0KQkJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIDEpOwkJCQkJXAorICAgb2JzdGFja18xZ3Jvd19mYXN0IChfX28sIGRhdHVtKTsJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisvKiBUaGVzZSBhc3N1bWUgdGhhdCB0aGUgb2JzdGFjayBhbGlnbm1lbnQgaXMgZ29vZCBlbm91Z2ggZm9yIHBvaW50ZXJzIG9yIGludHMsCisgICBhbmQgdGhhdCB0aGUgZGF0YSBhZGRlZCBzbyBmYXIgdG8gdGhlIGN1cnJlbnQgb2JqZWN0CisgICBzaGFyZXMgdGhhdCBtdWNoIGFsaWdubWVudC4gICovCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3coT0JTVEFDSyxkYXR1bSkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIHNpemVvZiAodm9pZCAqKSA+IF9fby0+Y2h1bmtfbGltaXQpCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAodm9pZCAqKSk7CQkJCVwKKyAgIG9ic3RhY2tfcHRyX2dyb3dfZmFzdCAoX19vLCBkYXR1bSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3coT0JTVEFDSyxkYXR1bSkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIHNpemVvZiAoaW50KSA+IF9fby0+Y2h1bmtfbGltaXQpCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAoaW50KSk7CQkJCVwKKyAgIG9ic3RhY2tfaW50X2dyb3dfZmFzdCAoX19vLCBkYXR1bSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChPQlNUQUNLLGFwdHIpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28xID0gKE9CU1RBQ0spOwkJCQkJXAorICAgKihjb25zdCB2b2lkICoqKSBfX28xLT5uZXh0X2ZyZWUgPSAoYXB0cik7CQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZSArPSBzaXplb2YgKGNvbnN0IHZvaWQgKik7CQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93X2Zhc3QoT0JTVEFDSyxhaW50KQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgICooaW50ICopIF9fbzEtPm5leHRfZnJlZSA9IChhaW50KTsJCQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZSArPSBzaXplb2YgKGludCk7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ibGFuayhPQlNUQUNLLGxlbmd0aCkJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlIDwgX19sZW4pCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCisgICBvYnN0YWNrX2JsYW5rX2Zhc3QgKF9fbywgX19sZW4pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfYWxsb2MoT0JTVEFDSyxsZW5ndGgpCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ibGFuayAoX19oLCAobGVuZ3RoKSk7CQkJCQlcCisgICBvYnN0YWNrX2ZpbmlzaCAoX19oKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5KE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ncm93IChfX2gsICh3aGVyZSksIChsZW5ndGgpKTsJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX2ggPSAoT0JTVEFDSyk7CQkJCQlcCisgICBvYnN0YWNrX2dyb3cwIChfX2gsICh3aGVyZSksIChsZW5ndGgpKTsJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKy8qIFRoZSBsb2NhbCB2YXJpYWJsZSBpcyBuYW1lZCBfX28xIHRvIGF2b2lkIGEgbmFtZSBjb25mbGljdAorICAgd2hlbiBvYnN0YWNrX2JsYW5rIGlzIGNhbGxlZC4gICovCisjIGRlZmluZSBvYnN0YWNrX2ZpbmlzaChPQlNUQUNLKSAgCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIHZvaWQgKnZhbHVlOwkJCQkJCQkJXAorICAgdmFsdWUgPSAodm9pZCAqKSBfX28xLT5vYmplY3RfYmFzZTsJCQkJCVwKKyAgIGlmIChfX28xLT5uZXh0X2ZyZWUgPT0gdmFsdWUpCQkJCQlcCisgICAgIF9fbzEtPm1heWJlX2VtcHR5X29iamVjdCA9IDE7CQkJCQlcCisgICBfX28xLT5uZXh0X2ZyZWUJCQkJCQkJXAorICAgICA9IF9fSU5UX1RPX1BUUiAoKF9fUFRSX1RPX0lOVCAoX19vMS0+bmV4dF9mcmVlKStfX28xLT5hbGlnbm1lbnRfbWFzaylcCisJCSAgICAgJiB+IChfX28xLT5hbGlnbm1lbnRfbWFzaykpOwkJCVwKKyAgIGlmIChfX28xLT5uZXh0X2ZyZWUgLSAoY2hhciAqKV9fbzEtPmNodW5rCQkJCVwKKyAgICAgICA+IF9fbzEtPmNodW5rX2xpbWl0IC0gKGNoYXIgKilfX28xLT5jaHVuaykJCQlcCisgICAgIF9fbzEtPm5leHRfZnJlZSA9IF9fbzEtPmNodW5rX2xpbWl0OwkJCQlcCisgICBfX28xLT5vYmplY3RfYmFzZSA9IF9fbzEtPm5leHRfZnJlZTsJCQkJCVwKKyAgIHZhbHVlOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoT0JTVEFDSywgT0JKKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIHZvaWQgKl9fb2JqID0gKHZvaWQgKikgKE9CSik7CQkJCQlcCisgICBpZiAoX19vYmogPiAodm9pZCAqKV9fby0+Y2h1bmsgJiYgX19vYmogPCAodm9pZCAqKV9fby0+Y2h1bmtfbGltaXQpICBcCisgICAgIF9fby0+bmV4dF9mcmVlID0gX19vLT5vYmplY3RfYmFzZSA9IChjaGFyICopIF9fb2JqOwkJXAorICAgZWxzZSAob2JzdGFja19mcmVlKSAoX19vLCBfX29iaik7IH0pCisMCisjZWxzZSAvKiBub3QgX19HTlVDX18gb3Igbm90IF9fU1REQ19fICovCisKKyMgZGVmaW5lIG9ic3RhY2tfb2JqZWN0X3NpemUoaCkgXAorICh1bnNpZ25lZCkgKChoKS0+bmV4dF9mcmVlIC0gKGgpLT5vYmplY3RfYmFzZSkKKworIyBkZWZpbmUgb2JzdGFja19yb29tKGgpCQlcCisgKHVuc2lnbmVkKSAoKGgpLT5jaHVua19saW1pdCAtIChoKS0+bmV4dF9mcmVlKQorCisjIGRlZmluZSBvYnN0YWNrX2VtcHR5X3AoaCkgXAorICgoaCktPmNodW5rLT5wcmV2ID09IDAgJiYgKGgpLT5uZXh0X2ZyZWUgLSAoaCktPmNodW5rLT5jb250ZW50cyA9PSAwKQorCisvKiBOb3RlIHRoYXQgdGhlIGNhbGwgdG8gX29ic3RhY2tfbmV3Y2h1bmsgaXMgZW5jbG9zZWQgaW4gKC4uLiwgMCkKKyAgIHNvIHRoYXQgd2UgY2FuIGF2b2lkIGhhdmluZyB2b2lkIGV4cHJlc3Npb25zCisgICBpbiB0aGUgYXJtcyBvZiB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KKyAgIENhc3RpbmcgdGhlIHRoaXJkIG9wZXJhbmQgdG8gdm9pZCB3YXMgdHJpZWQgYmVmb3JlLAorICAgYnV0IHNvbWUgY29tcGlsZXJzIHdvbid0IGFjY2VwdCBpdC4gICovCisKKyMgZGVmaW5lIG9ic3RhY2tfbWFrZV9yb29tKGgsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAgPSAobGVuZ3RoKSwJCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wID4gKGgpLT5jaHVua19saW1pdCkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXApLCAwKSA6IDApKQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3coaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcCA9IChsZW5ndGgpLAkJCQkJCQlcCisgICgoKGgpLT5uZXh0X2ZyZWUgKyAoaCktPnRlbXAgPiAoaCktPmNodW5rX2xpbWl0KQkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcCksIDApIDogMCksCQkJXAorICBfb2JzdGFja19tZW1jcHkgKChoKS0+bmV4dF9mcmVlLCAod2hlcmUpLCAoaCktPnRlbXApLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wKQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3cwKGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAgPSAobGVuZ3RoKSwJCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wICsgMSA+IChoKS0+Y2h1bmtfbGltaXQpCQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wICsgMSksIDApIDogMCksCQkJXAorICBfb2JzdGFja19tZW1jcHkgKChoKS0+bmV4dF9mcmVlLCAod2hlcmUpLCAoaCktPnRlbXApLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wLAkJCQkJCVwKKyAgKigoaCktPm5leHRfZnJlZSkrKyA9IDApCisKKyMgZGVmaW5lIG9ic3RhY2tfMWdyb3coaCxkYXR1bSkJCQkJCQlcCisoICgoKGgpLT5uZXh0X2ZyZWUgKyAxID4gKGgpLT5jaHVua19saW1pdCkJCQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgMSksIDApIDogMCksCQkJCVwKKyAgb2JzdGFja18xZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3coaCxkYXR1bSkJCQkJCVwKKyggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoY2hhciAqKSA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGNoYXIgKikpLCAwKSA6IDApLAkJXAorICBvYnN0YWNrX3B0cl9ncm93X2Zhc3QgKGgsIGRhdHVtKSkKKworIyBkZWZpbmUgb2JzdGFja19pbnRfZ3JvdyhoLGRhdHVtKQkJCQkJXAorKCAoKChoKS0+bmV4dF9mcmVlICsgc2l6ZW9mIChpbnQpID4gKGgpLT5jaHVua19saW1pdCkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGludCkpLCAwKSA6IDApLAkJCVwKKyAgb2JzdGFja19pbnRfZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChoLGFwdHIpCQkJCQlcCisgICgoKGNvbnN0IHZvaWQgKiopICgoaCktPm5leHRfZnJlZSArPSBzaXplb2YgKHZvaWQgKikpKVstMV0gPSAoYXB0cikpCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3dfZmFzdChoLGFpbnQpCQkJCQlcCisgICgoKGludCAqKSAoKGgpLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChpbnQpKSlbLTFdID0gKGFwdHIpKQorCisjIGRlZmluZSBvYnN0YWNrX2JsYW5rKGgsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAgPSAobGVuZ3RoKSwJCQkJCQkJXAorICAoKChoKS0+Y2h1bmtfbGltaXQgLSAoaCktPm5leHRfZnJlZSA8IChoKS0+dGVtcCkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCAoaCktPnRlbXApLCAwKSA6IDApLAkJCVwKKyAgb2JzdGFja19ibGFua19mYXN0IChoLCAoaCktPnRlbXApKQorCisjIGRlZmluZSBvYnN0YWNrX2FsbG9jKGgsbGVuZ3RoKQkJCQkJXAorIChvYnN0YWNrX2JsYW5rICgoaCksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weShoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyAob2JzdGFja19ncm93ICgoaCksICh3aGVyZSksIChsZW5ndGgpKSwgb2JzdGFja19maW5pc2ggKChoKSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisgKG9ic3RhY2tfZ3JvdzAgKChoKSwgKHdoZXJlKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKKworIyBkZWZpbmUgb2JzdGFja19maW5pc2goaCkgIAkJCQkJCVwKKyggKChoKS0+bmV4dF9mcmVlID09IChoKS0+b2JqZWN0X2Jhc2UJCQkJCVwKKyAgID8gKCgoaCktPm1heWJlX2VtcHR5X29iamVjdCA9IDEpLCAwKQkJCQkJXAorICAgOiAwKSwJCQkJCQkJCVwKKyAgKGgpLT50ZW1wID0gX19QVFJfVE9fSU5UICgoaCktPm9iamVjdF9iYXNlKSwJCQkJXAorICAoaCktPm5leHRfZnJlZQkJCQkJCQlcCisgICAgPSBfX0lOVF9UT19QVFIgKChfX1BUUl9UT19JTlQgKChoKS0+bmV4dF9mcmVlKSsoaCktPmFsaWdubWVudF9tYXNrKQlcCisJCSAgICAmIH4gKChoKS0+YWxpZ25tZW50X21hc2spKSwJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlIC0gKGNoYXIgKikgKGgpLT5jaHVuawkJCQlcCisgICAgPiAoaCktPmNodW5rX2xpbWl0IC0gKGNoYXIgKikgKGgpLT5jaHVuaykJCQkJXAorICAgPyAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPmNodW5rX2xpbWl0KSA6IDApLAkJCQlcCisgIChoKS0+b2JqZWN0X2Jhc2UgPSAoaCktPm5leHRfZnJlZSwJCQkJCVwKKyAgKHZvaWQgKikgX19JTlRfVE9fUFRSICgoaCktPnRlbXApKQorCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoaCxvYmopCQkJCQkJXAorKCAoaCktPnRlbXAgPSAoY2hhciAqKSAob2JqKSAtIChjaGFyICopIChoKS0+Y2h1bmssCQkJXAorICAoKChoKS0+dGVtcCA+IDAgJiYgKGgpLT50ZW1wIDwgKGgpLT5jaHVua19saW1pdCAtIChjaGFyICopIChoKS0+Y2h1bmspXAorICAgPyAoKChoKS0+bmV4dF9mcmVlID0gKGgpLT5vYmplY3RfYmFzZQkJCQlcCisJICAgID0gKGgpLT50ZW1wICsgKGNoYXIgKikgKGgpLT5jaHVuayksIDApCQkJXAorICAgOiAoKG9ic3RhY2tfZnJlZSkgKChoKSwgKGgpLT50ZW1wICsgKGNoYXIgKikgKGgpLT5jaHVuayksIDApKSkKKworI2VuZGlmIC8qIG5vdCBfX0dOVUNfXyBvciBub3QgX19TVERDX18gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CS8qIEMrKyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBvYnN0YWNrLmggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9vbXAtYnVpbHRpbnMuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL29tcC1idWlsdGlucy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNjMjZjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9vbXAtYnVpbHRpbnMuZGVmCkBAIC0wLDAgKzEsMjEwIEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgIE9wZW5NUCBidWlsdGlucyB1c2VkIGluIHRoZSBHTlUgY29tcGlsZXIuCisgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlLCB5b3Ugc2hvdWxkIGRlZmluZSBhIG1hY3JvOgorCisgICAgIERFRl9HT01QX0JVSUxUSU4gKEVOVU0sIE5BTUUsIFRZUEUsIEFUVFJTKQorCisgICBTZWUgYnVpbHRpbnMuZGVmIGZvciBkZXRhaWxzLiAgKi8KKworREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fT01QX0dFVF9USFJFQURfTlVNLCAib21wX2dldF90aHJlYWRfbnVtIiwKKwkJICBCVF9GTl9JTlQsIEFUVFJfQ09OU1RfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9PTVBfR0VUX05VTV9USFJFQURTLCAib21wX2dldF9udW1fdGhyZWFkcyIsCisJCSAgQlRfRk5fSU5ULCBBVFRSX0NPTlNUX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0FUT01JQ19TVEFSVCwgIkdPTVBfYXRvbWljX3N0YXJ0IiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9BVE9NSUNfRU5ELCAiR09NUF9hdG9taWNfZW5kIiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9CQVJSSUVSLCAiR09NUF9iYXJyaWVyIiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9UQVNLV0FJVCwgIkdPTVBfdGFza3dhaXQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1RBU0tZSUVMRCwgIkdPTVBfdGFza3lpZWxkIiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9DUklUSUNBTF9TVEFSVCwgIkdPTVBfY3JpdGljYWxfc3RhcnQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0NSSVRJQ0FMX0VORCwgIkdPTVBfY3JpdGljYWxfZW5kIiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9DUklUSUNBTF9OQU1FX1NUQVJULAorCQkgICJHT01QX2NyaXRpY2FsX25hbWVfc3RhcnQiLAorCQkgIEJUX0ZOX1ZPSURfUFRSUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9DUklUSUNBTF9OQU1FX0VORCwKKwkJICAiR09NUF9jcml0aWNhbF9uYW1lX2VuZCIsCisJCSAgQlRfRk5fVk9JRF9QVFJQVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisvKiBOT1RFOiBEbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiBCVUlMVF9JTl9HT01QX0xPT1BfKl9TVEFSVC4gIFRoZXkKKyAgIGFyZSB1c2VkIGluIGluZGV4IGFyaXRobWV0aWMgd2l0aCBlbnVtIG9tcF9jbGF1c2Vfc2NoZWR1bGVfa2luZAorICAgaW4gb21wLWxvdy5jLiAgKi8KK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9TVEFUSUNfU1RBUlQsCisJCSAgIkdPTVBfbG9vcF9zdGF0aWNfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR19MT05HX0xPTkdfTE9OR19MT05HUFRSX0xPTkdQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9EWU5BTUlDX1NUQVJULAorCQkgICJHT01QX2xvb3BfZHluYW1pY19zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9MT05HX0xPTkdfTE9OR19MT05HX0xPTkdQVFJfTE9OR1BUUiwKKwkJICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX0dVSURFRF9TVEFSVCwKKwkJICAiR09NUF9sb29wX2d1aWRlZF9zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9MT05HX0xPTkdfTE9OR19MT05HX0xPTkdQVFJfTE9OR1BUUiwKKwkJICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1JVTlRJTUVfU1RBUlQsCisJCSAgIkdPTVBfbG9vcF9ydW50aW1lX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdfTE9OR19MT05HX0xPTkdQVFJfTE9OR1BUUiwKKwkJICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX09SREVSRURfU1RBVElDX1NUQVJULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9zdGF0aWNfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR19MT05HX0xPTkdfTE9OR19MT05HUFRSX0xPTkdQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9PUkRFUkVEX0RZTkFNSUNfU1RBUlQsCisJCSAgIkdPTVBfbG9vcF9vcmRlcmVkX2R5bmFtaWNfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR19MT05HX0xPTkdfTE9OR19MT05HUFRSX0xPTkdQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9PUkRFUkVEX0dVSURFRF9TVEFSVCwKKwkJICAiR09NUF9sb29wX29yZGVyZWRfZ3VpZGVkX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdfTE9OR19MT05HX0xPTkdfTE9OR1BUUl9MT05HUFRSLAorCQkgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfT1JERVJFRF9SVU5USU1FX1NUQVJULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9ydW50aW1lX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdfTE9OR19MT05HX0xPTkdQVFJfTE9OR1BUUiwKKwkJICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1NUQVRJQ19ORVhULCAiR09NUF9sb29wX3N0YXRpY19uZXh0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdQVFJfTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9EWU5BTUlDX05FWFQsICJHT01QX2xvb3BfZHluYW1pY19uZXh0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdQVFJfTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9HVUlERURfTkVYVCwgIkdPTVBfbG9vcF9ndWlkZWRfbmV4dCIsCisJCSAgQlRfRk5fQk9PTF9MT05HUFRSX0xPTkdQVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfUlVOVElNRV9ORVhULCAiR09NUF9sb29wX3J1bnRpbWVfbmV4dCIsCisJCSAgQlRfRk5fQk9PTF9MT05HUFRSX0xPTkdQVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfT1JERVJFRF9TVEFUSUNfTkVYVCwKKwkJICAiR09NUF9sb29wX29yZGVyZWRfc3RhdGljX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR1BUUl9MT05HUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX09SREVSRURfRFlOQU1JQ19ORVhULAorCQkgICJHT01QX2xvb3Bfb3JkZXJlZF9keW5hbWljX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfTE9OR1BUUl9MT05HUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX09SREVSRURfR1VJREVEX05FWFQsCisJCSAgIkdPTVBfbG9vcF9vcmRlcmVkX2d1aWRlZF9uZXh0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdQVFJfTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9PUkRFUkVEX1JVTlRJTUVfTkVYVCwKKwkJICAiR09NUF9sb29wX29yZGVyZWRfcnVudGltZV9uZXh0IiwKKwkJICBCVF9GTl9CT09MX0xPTkdQVFJfTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9VTExfU1RBVElDX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX3N0YXRpY19zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9CT09MX1VMTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX0RZTkFNSUNfU1RBUlQsCisJCSAgIkdPTVBfbG9vcF91bGxfZHluYW1pY19zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9CT09MX1VMTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX0dVSURFRF9TVEFSVCwKKwkJICAiR09NUF9sb29wX3VsbF9ndWlkZWRfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfQk9PTF9VTExfVUxMX1VMTF9VTExfVUxMUFRSX1VMTFBUUiwKKwkJICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9SVU5USU1FX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX3J1bnRpbWVfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0xfQk9PTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX09SREVSRURfU1RBVElDX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfc3RhdGljX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0JPT0xfVUxMX1VMTF9VTExfVUxMX1VMTFBUUl9VTExQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9VTExfT1JERVJFRF9EWU5BTUlDX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfZHluYW1pY19zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9CT09MX1VMTF9VTExfVUxMX1VMTF9VTExQVFJfVUxMUFRSLAorCQkgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX09SREVSRURfR1VJREVEX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfZ3VpZGVkX3N0YXJ0IiwKKwkJICBCVF9GTl9CT09MX0JPT0xfVUxMX1VMTF9VTExfVUxMX1VMTFBUUl9VTExQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9VTExfT1JERVJFRF9SVU5USU1FX1NUQVJULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfcnVudGltZV9zdGFydCIsCisJCSAgQlRfRk5fQk9PTF9CT09MX1VMTF9VTExfVUxMX1VMTFBUUl9VTExQVFIsCisJCSAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9VTExfU1RBVElDX05FWFQsICJHT01QX2xvb3BfdWxsX3N0YXRpY19uZXh0IiwKKwkJICBCVF9GTl9CT09MX1VMT05HTE9OR1BUUl9VTE9OR0xPTkdQVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX0RZTkFNSUNfTkVYVCwgIkdPTVBfbG9vcF91bGxfZHluYW1pY19uZXh0IiwKKwkJICBCVF9GTl9CT09MX1VMT05HTE9OR1BUUl9VTE9OR0xPTkdQVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX0dVSURFRF9ORVhULCAiR09NUF9sb29wX3VsbF9ndWlkZWRfbmV4dCIsCisJCSAgQlRfRk5fQk9PTF9VTE9OR0xPTkdQVFJfVUxPTkdMT05HUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9SVU5USU1FX05FWFQsICJHT01QX2xvb3BfdWxsX3J1bnRpbWVfbmV4dCIsCisJCSAgQlRfRk5fQk9PTF9VTE9OR0xPTkdQVFJfVUxPTkdMT05HUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9MT09QX1VMTF9PUkRFUkVEX1NUQVRJQ19ORVhULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfc3RhdGljX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfVUxPTkdMT05HUFRSX1VMT05HTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9VTExfT1JERVJFRF9EWU5BTUlDX05FWFQsCisJCSAgIkdPTVBfbG9vcF91bGxfb3JkZXJlZF9keW5hbWljX25leHQiLAorCQkgIEJUX0ZOX0JPT0xfVUxPTkdMT05HUFRSX1VMT05HTE9OR1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9VTExfT1JERVJFRF9HVUlERURfTkVYVCwKKwkJICAiR09NUF9sb29wX3VsbF9vcmRlcmVkX2d1aWRlZF9uZXh0IiwKKwkJICBCVF9GTl9CT09MX1VMT05HTE9OR1BUUl9VTE9OR0xPTkdQVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfVUxMX09SREVSRURfUlVOVElNRV9ORVhULAorCQkgICJHT01QX2xvb3BfdWxsX29yZGVyZWRfcnVudGltZV9uZXh0IiwKKwkJICBCVF9GTl9CT09MX1VMT05HTE9OR1BUUl9VTE9OR0xPTkdQVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisvKiBOT1RFOiBEbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiBCVUlMVF9JTl9HT01QX1BBUkFMTEVMX0xPT1BfKl9TVEFSVC4KKyAgIFRoZXkgYXJlIHVzZWQgaW4gaW5kZXggYXJpdGhtZXRpYyB3aXRoIGVudW0gb21wX2NsYXVzZV9zY2hlZHVsZV9raW5kCisgICBpbiBvbXAtbG93LmMuICAqLworREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9QQVJBTExFTF9MT09QX1NUQVRJQ19TVEFSVCwKKwkJICAiR09NUF9wYXJhbGxlbF9sb29wX3N0YXRpY19zdGFydCIsCisJCSAgQlRfRk5fVk9JRF9PTVBGTl9QVFJfVUlOVF9MT05HX0xPTkdfTE9OR19MT05HLAorCQkgIEFUVFJfTk9USFJPV19MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9QQVJBTExFTF9MT09QX0RZTkFNSUNfU1RBUlQsCisJCSAgIkdPTVBfcGFyYWxsZWxfbG9vcF9keW5hbWljX3N0YXJ0IiwKKwkJICBCVF9GTl9WT0lEX09NUEZOX1BUUl9VSU5UX0xPTkdfTE9OR19MT05HX0xPTkcsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1BBUkFMTEVMX0xPT1BfR1VJREVEX1NUQVJULAorCQkgICJHT01QX3BhcmFsbGVsX2xvb3BfZ3VpZGVkX3N0YXJ0IiwKKwkJICBCVF9GTl9WT0lEX09NUEZOX1BUUl9VSU5UX0xPTkdfTE9OR19MT05HX0xPTkcsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1BBUkFMTEVMX0xPT1BfUlVOVElNRV9TVEFSVCwKKwkJICAiR09NUF9wYXJhbGxlbF9sb29wX3J1bnRpbWVfc3RhcnQiLAorCQkgIEJUX0ZOX1ZPSURfT01QRk5fUFRSX1VJTlRfTE9OR19MT05HX0xPTkcsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX0xPT1BfRU5ELCAiR09NUF9sb29wX2VuZCIsCisJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfTE9PUF9FTkRfTk9XQUlULCAiR09NUF9sb29wX2VuZF9ub3dhaXQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX09SREVSRURfU1RBUlQsICJHT01QX29yZGVyZWRfc3RhcnQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX09SREVSRURfRU5ELCAiR09NUF9vcmRlcmVkX2VuZCIsCisJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfUEFSQUxMRUxfU1RBUlQsICJHT01QX3BhcmFsbGVsX3N0YXJ0IiwKKwkJICBCVF9GTl9WT0lEX09NUEZOX1BUUl9VSU5ULCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfUEFSQUxMRUxfRU5ELCAiR09NUF9wYXJhbGxlbF9lbmQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1RBU0ssICJHT01QX3Rhc2siLAorCQkgIEJUX0ZOX1ZPSURfT01QRk5fUFRSX09NUENQWUZOX0xPTkdfTE9OR19CT09MX1VJTlQsCisJCSAgQVRUUl9OT1RIUk9XX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1NFQ1RJT05TX1NUQVJULCAiR09NUF9zZWN0aW9uc19zdGFydCIsCisJCSAgQlRfRk5fVUlOVF9VSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9TRUNUSU9OU19ORVhULCAiR09NUF9zZWN0aW9uc19uZXh0IiwKKwkJICBCVF9GTl9VSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9QQVJBTExFTF9TRUNUSU9OU19TVEFSVCwKKwkJICAiR09NUF9wYXJhbGxlbF9zZWN0aW9uc19zdGFydCIsCisJCSAgQlRfRk5fVk9JRF9PTVBGTl9QVFJfVUlOVF9VSU5ULCBBVFRSX05PVEhST1dfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfU0VDVElPTlNfRU5ELCAiR09NUF9zZWN0aW9uc19lbmQiLAorCQkgIEJUX0ZOX1ZPSUQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1NFQ1RJT05TX0VORF9OT1dBSVQsCisJCSAgIkdPTVBfc2VjdGlvbnNfZW5kX25vd2FpdCIsCisJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX0dPTVBfU0lOR0xFX1NUQVJULCAiR09NUF9zaW5nbGVfc3RhcnQiLAorCQkgIEJUX0ZOX0JPT0wsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9HT01QX1NJTkdMRV9DT1BZX1NUQVJULCAiR09NUF9zaW5nbGVfY29weV9zdGFydCIsCisJCSAgQlRfRk5fUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9TSU5HTEVfQ09QWV9FTkQsICJHT01QX3NpbmdsZV9jb3B5X2VuZCIsCisJCSAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvb3B0aW9ucy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL29wdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTQ1NDVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL29wdGlvbnMuaApAQCAtMCwwICsxLDUwMTggQEAKKy8qIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcHRoLWdlbi5hd2suICAqLworCisjaWZuZGVmIE9QVElPTlNfSAorI2RlZmluZSBPUFRJT05TX0gKKworI2luY2x1ZGUgImZsYWctdHlwZXMuaCIKKworI2luY2x1ZGUgImNvbmZpZy9hYXJjaDY0L2FhcmNoNjQtb3B0cy5oIgorCisjaWYgIWRlZmluZWQoSU5fTElCR0NDMikgJiYgIWRlZmluZWQoSU5fVEFSR0VUX0xJQlMpICYmICFkZWZpbmVkKElOX1JUUykKKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKyNpZiAhZGVmaW5lZChJTl9MSUJHQ0MyKSAmJiAhZGVmaW5lZChJTl9UQVJHRVRfTElCUykKK3N0cnVjdCBHVFkoKCkpIGdjY19vcHRpb25zCisjZWxzZQorc3RydWN0IGdjY19vcHRpb25zCisjZW5kaWYKK3sKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gSE9TVF9XSURFX0lOVCBmcmFtZV9sYXJnZXJfdGhhbl9zaXplOworI2Vsc2UKKyAgSE9TVF9XSURFX0lOVCB4X2ZyYW1lX2xhcmdlcl90aGFuX3NpemU7CisjZGVmaW5lIGZyYW1lX2xhcmdlcl90aGFuX3NpemUgZ2xvYmFsX29wdGlvbnMueF9mcmFtZV9sYXJnZXJfdGhhbl9zaXplCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIEhPU1RfV0lERV9JTlQgbGFyZ2VyX3RoYW5fc2l6ZTsKKyNlbHNlCisgIEhPU1RfV0lERV9JTlQgeF9sYXJnZXJfdGhhbl9zaXplOworI2RlZmluZSBsYXJnZXJfdGhhbl9zaXplIGdsb2JhbF9vcHRpb25zLnhfbGFyZ2VyX3RoYW5fc2l6ZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBib29sIGV4aXRfYWZ0ZXJfb3B0aW9uczsKKyNlbHNlCisgIGJvb2wgeF9leGl0X2FmdGVyX29wdGlvbnM7CisjZGVmaW5lIGV4aXRfYWZ0ZXJfb3B0aW9ucyBnbG9iYWxfb3B0aW9ucy54X2V4aXRfYWZ0ZXJfb3B0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBib29sIGZsYWdfZHVtcF9hbGxfcGFzc2VkOworI2Vsc2UKKyAgYm9vbCB4X2ZsYWdfZHVtcF9hbGxfcGFzc2VkOworI2RlZmluZSBmbGFnX2R1bXBfYWxsX3Bhc3NlZCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZHVtcF9hbGxfcGFzc2VkCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGJvb2wgZmxhZ19vcHRzX2ZpbmlzaGVkOworI2Vsc2UKKyAgYm9vbCB4X2ZsYWdfb3B0c19maW5pc2hlZDsKKyNkZWZpbmUgZmxhZ19vcHRzX2ZpbmlzaGVkIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19vcHRzX2ZpbmlzaGVkCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGJvb2wgZmxhZ19zdGFja191c2FnZV9pbmZvOworI2Vsc2UKKyAgYm9vbCB4X2ZsYWdfc3RhY2tfdXNhZ2VfaW5mbzsKKyNkZWZpbmUgZmxhZ19zdGFja191c2FnZV9pbmZvIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zdGFja191c2FnZV9pbmZvCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGJvb2wgZmxhZ193YXJuX3VudXNlZF9yZXN1bHQ7CisjZWxzZQorICBib29sIHhfZmxhZ193YXJuX3VudXNlZF9yZXN1bHQ7CisjZGVmaW5lIGZsYWdfd2Fybl91bnVzZWRfcmVzdWx0IGdsb2JhbF9vcHRpb25zLnhfZmxhZ193YXJuX3VudXNlZF9yZXN1bHQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gYm9vbCBpbl9sdG9fcDsKKyNlbHNlCisgIGJvb2wgeF9pbl9sdG9fcDsKKyNkZWZpbmUgaW5fbHRvX3AgZ2xvYmFsX29wdGlvbnMueF9pbl9sdG9fcAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBib29sIHVzZV9nbnVfZGVidWdfaW5mb19leHRlbnNpb25zOworI2Vsc2UKKyAgYm9vbCB4X3VzZV9nbnVfZGVidWdfaW5mb19leHRlbnNpb25zOworI2RlZmluZSB1c2VfZ251X2RlYnVnX2luZm9fZXh0ZW5zaW9ucyBnbG9iYWxfb3B0aW9ucy54X3VzZV9nbnVfZGVidWdfaW5mb19leHRlbnNpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGJvb2wgd2Fybl9mcmFtZV9sYXJnZXJfdGhhbjsKKyNlbHNlCisgIGJvb2wgeF93YXJuX2ZyYW1lX2xhcmdlcl90aGFuOworI2RlZmluZSB3YXJuX2ZyYW1lX2xhcmdlcl90aGFuIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9mcmFtZV9sYXJnZXJfdGhhbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBib29sIHdhcm5fbGFyZ2VyX3RoYW47CisjZWxzZQorICBib29sIHhfd2Fybl9sYXJnZXJfdGhhbjsKKyNkZWZpbmUgd2Fybl9sYXJnZXJfdGhhbiBnbG9iYWxfb3B0aW9ucy54X3dhcm5fbGFyZ2VyX3RoYW4KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY2hhciAqaGVscF9lbnVtX3ByaW50ZWQ7CisjZWxzZQorICBjaGFyICogeF9oZWxwX2VudW1fcHJpbnRlZDsKKyNkZWZpbmUgaGVscF9lbnVtX3ByaW50ZWQgZ2xvYmFsX29wdGlvbnMueF9oZWxwX2VudW1fcHJpbnRlZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBjaGFyICpoZWxwX3ByaW50ZWQ7CisjZWxzZQorICBjaGFyICogeF9oZWxwX3ByaW50ZWQ7CisjZGVmaW5lIGhlbHBfcHJpbnRlZCBnbG9iYWxfb3B0aW9ucy54X2hlbHBfcHJpbnRlZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBjb25zdCBjaGFyICphYXJjaDY0X2FyY2hfc3RyaW5nOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIHhfYWFyY2g2NF9hcmNoX3N0cmluZzsKKyNkZWZpbmUgYWFyY2g2NF9hcmNoX3N0cmluZyBnbG9iYWxfb3B0aW9ucy54X2FhcmNoNjRfYXJjaF9zdHJpbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqYWFyY2g2NF9jcHVfc3RyaW5nOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIHhfYWFyY2g2NF9jcHVfc3RyaW5nOworI2RlZmluZSBhYXJjaDY0X2NwdV9zdHJpbmcgZ2xvYmFsX29wdGlvbnMueF9hYXJjaDY0X2NwdV9zdHJpbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqYWFyY2g2NF90dW5lX3N0cmluZzsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKiB4X2FhcmNoNjRfdHVuZV9zdHJpbmc7CisjZGVmaW5lIGFhcmNoNjRfdHVuZV9zdHJpbmcgZ2xvYmFsX29wdGlvbnMueF9hYXJjaDY0X3R1bmVfc3RyaW5nCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGNvbnN0IGNoYXIgKm1haW5faW5wdXRfYmFzZW5hbWU7CisjZWxzZQorICBjb25zdCBjaGFyICogeF9tYWluX2lucHV0X2Jhc2VuYW1lOworI2RlZmluZSBtYWluX2lucHV0X2Jhc2VuYW1lIGdsb2JhbF9vcHRpb25zLnhfbWFpbl9pbnB1dF9iYXNlbmFtZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBjb25zdCBjaGFyICptYWluX2lucHV0X2ZpbGVuYW1lOworI2Vsc2UKKyAgY29uc3QgY2hhciAqIHhfbWFpbl9pbnB1dF9maWxlbmFtZTsKKyNkZWZpbmUgbWFpbl9pbnB1dF9maWxlbmFtZSBnbG9iYWxfb3B0aW9ucy54X21haW5faW5wdXRfZmlsZW5hbWUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gZW51bSBkZWJ1Z19pbmZvX2xldmVscyBkZWJ1Z19pbmZvX2xldmVsOworI2Vsc2UKKyAgZW51bSBkZWJ1Z19pbmZvX2xldmVscyB4X2RlYnVnX2luZm9fbGV2ZWw7CisjZGVmaW5lIGRlYnVnX2luZm9fbGV2ZWwgZ2xvYmFsX29wdGlvbnMueF9kZWJ1Z19pbmZvX2xldmVsCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGVudW0gZGVidWdfaW5mb190eXBlIHdyaXRlX3N5bWJvbHM7CisjZWxzZQorICBlbnVtIGRlYnVnX2luZm9fdHlwZSB4X3dyaXRlX3N5bWJvbHM7CisjZGVmaW5lIHdyaXRlX3N5bWJvbHMgZ2xvYmFsX29wdGlvbnMueF93cml0ZV9zeW1ib2xzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGVudW0gZGVidWdfc3RydWN0X2ZpbGUgZGVidWdfc3RydWN0X2dlbmVyaWNbRElORk9fVVNBR0VfTlVNX0VOVU1TXTsKKyNlbHNlCisgIGVudW0gZGVidWdfc3RydWN0X2ZpbGUgeF9kZWJ1Z19zdHJ1Y3RfZ2VuZXJpY1tESU5GT19VU0FHRV9OVU1fRU5VTVNdOworI2RlZmluZSBkZWJ1Z19zdHJ1Y3RfZ2VuZXJpYyBnbG9iYWxfb3B0aW9ucy54X2RlYnVnX3N0cnVjdF9nZW5lcmljCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGVudW0gZGVidWdfc3RydWN0X2ZpbGUgZGVidWdfc3RydWN0X29yZGluYXJ5W0RJTkZPX1VTQUdFX05VTV9FTlVNU107CisjZWxzZQorICBlbnVtIGRlYnVnX3N0cnVjdF9maWxlIHhfZGVidWdfc3RydWN0X29yZGluYXJ5W0RJTkZPX1VTQUdFX05VTV9FTlVNU107CisjZGVmaW5lIGRlYnVnX3N0cnVjdF9vcmRpbmFyeSBnbG9iYWxfb3B0aW9ucy54X2RlYnVnX3N0cnVjdF9vcmRpbmFyeQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBlbnVtIHN0YWNrX2NoZWNrX3R5cGUgZmxhZ19zdGFja19jaGVjazsKKyNlbHNlCisgIGVudW0gc3RhY2tfY2hlY2tfdHlwZSB4X2ZsYWdfc3RhY2tfY2hlY2s7CisjZGVmaW5lIGZsYWdfc3RhY2tfY2hlY2sgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3N0YWNrX2NoZWNrCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCAqcGFyYW1fdmFsdWVzOworI2Vsc2UKKyAgaW50ICogeF9wYXJhbV92YWx1ZXM7CisjZGVmaW5lIHBhcmFtX3ZhbHVlcyBnbG9iYWxfb3B0aW9ucy54X3BhcmFtX3ZhbHVlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19jb21wbGV4X21ldGhvZDsKKyNlbHNlCisgIGludCB4X2ZsYWdfY29tcGxleF9tZXRob2Q7CisjZGVmaW5lIGZsYWdfY29tcGxleF9tZXRob2QgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2NvbXBsZXhfbWV0aG9kCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2RlYnVnX2FzbTsKKyNlbHNlCisgIGludCB4X2ZsYWdfZGVidWdfYXNtOworI2RlZmluZSBmbGFnX2RlYnVnX2FzbSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZGVidWdfYXNtCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2R1bXBfcnRsX2luX2FzbTsKKyNlbHNlCisgIGludCB4X2ZsYWdfZHVtcF9ydGxfaW5fYXNtOworI2RlZmluZSBmbGFnX2R1bXBfcnRsX2luX2FzbSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZHVtcF9ydGxfaW5fYXNtCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2V2YWx1YXRpb25fb3JkZXI7CisjZWxzZQorICBpbnQgeF9mbGFnX2V2YWx1YXRpb25fb3JkZXI7CisjZGVmaW5lIGZsYWdfZXZhbHVhdGlvbl9vcmRlciBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZXZhbHVhdGlvbl9vcmRlcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19nZW5fYXV4X2luZm87CisjZWxzZQorICBpbnQgeF9mbGFnX2dlbl9hdXhfaW5mbzsKKyNkZWZpbmUgZmxhZ19nZW5fYXV4X2luZm8gZ2xvYmFsX29wdGlvbnMueF9mbGFnX2dlbl9hdXhfaW5mbworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19nZW5lcmF0ZV9sdG87CisjZWxzZQorICBpbnQgeF9mbGFnX2dlbmVyYXRlX2x0bzsKKyNkZWZpbmUgZmxhZ19nZW5lcmF0ZV9sdG8gZ2xvYmFsX29wdGlvbnMueF9mbGFnX2dlbmVyYXRlX2x0bworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19wcmludF9hc21fbmFtZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfcHJpbnRfYXNtX25hbWU7CisjZGVmaW5lIGZsYWdfcHJpbnRfYXNtX25hbWUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3ByaW50X2FzbV9uYW1lCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NobGliOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zaGxpYjsKKyNkZWZpbmUgZmxhZ19zaGxpYiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2hsaWIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IG1haW5faW5wdXRfYmFzZWxlbmd0aDsKKyNlbHNlCisgIGludCB4X21haW5faW5wdXRfYmFzZWxlbmd0aDsKKyNkZWZpbmUgbWFpbl9pbnB1dF9iYXNlbGVuZ3RoIGdsb2JhbF9vcHRpb25zLnhfbWFpbl9pbnB1dF9iYXNlbGVuZ3RoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBvcHRpbWl6ZTsKKyNlbHNlCisgIGludCB4X29wdGltaXplOworI2RlZmluZSBvcHRpbWl6ZSBnbG9iYWxfb3B0aW9ucy54X29wdGltaXplCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBvcHRpbWl6ZV9kZWJ1ZzsKKyNlbHNlCisgIGludCB4X29wdGltaXplX2RlYnVnOworI2RlZmluZSBvcHRpbWl6ZV9kZWJ1ZyBnbG9iYWxfb3B0aW9ucy54X29wdGltaXplX2RlYnVnCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBvcHRpbWl6ZV9mYXN0OworI2Vsc2UKKyAgaW50IHhfb3B0aW1pemVfZmFzdDsKKyNkZWZpbmUgb3B0aW1pemVfZmFzdCBnbG9iYWxfb3B0aW9ucy54X29wdGltaXplX2Zhc3QKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IG9wdGltaXplX3NpemU7CisjZWxzZQorICBpbnQgeF9vcHRpbWl6ZV9zaXplOworI2RlZmluZSBvcHRpbWl6ZV9zaXplIGdsb2JhbF9vcHRpb25zLnhfb3B0aW1pemVfc2l6ZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgcnRsX2R1bXBfYW5kX2V4aXQ7CisjZWxzZQorICBpbnQgeF9ydGxfZHVtcF9hbmRfZXhpdDsKKyNkZWZpbmUgcnRsX2R1bXBfYW5kX2V4aXQgZ2xvYmFsX29wdGlvbnMueF9ydGxfZHVtcF9hbmRfZXhpdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgdGFyZ2V0X2ZsYWdzOworI2Vsc2UKKyAgaW50IHhfdGFyZ2V0X2ZsYWdzOworI2RlZmluZSB0YXJnZXRfZmxhZ3MgZ2xvYmFsX29wdGlvbnMueF90YXJnZXRfZmxhZ3MKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gdW5zaWduZWQgaW50IGhlbHBfY29sdW1uczsKKyNlbHNlCisgIHVuc2lnbmVkIGludCB4X2hlbHBfY29sdW1uczsKKyNkZWZpbmUgaGVscF9jb2x1bW5zIGdsb2JhbF9vcHRpb25zLnhfaGVscF9jb2x1bW5zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIHVuc2lnbmVkIGludCBpbml0aWFsX21heF9mbGRfYWxpZ247CisjZWxzZQorICB1bnNpZ25lZCBpbnQgeF9pbml0aWFsX21heF9mbGRfYWxpZ247CisjZGVmaW5lIGluaXRpYWxfbWF4X2ZsZF9hbGlnbiBnbG9iYWxfb3B0aW9ucy54X2luaXRpYWxfbWF4X2ZsZF9hbGlnbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiB2b2lkICpmbGFnX2luc3RydW1lbnRfZnVuY3Rpb25zX2V4Y2x1ZGVfZmlsZXM7CisjZWxzZQorICB2b2lkICogeF9mbGFnX2luc3RydW1lbnRfZnVuY3Rpb25zX2V4Y2x1ZGVfZmlsZXM7CisjZGVmaW5lIGZsYWdfaW5zdHJ1bWVudF9mdW5jdGlvbnNfZXhjbHVkZV9maWxlcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaW5zdHJ1bWVudF9mdW5jdGlvbnNfZXhjbHVkZV9maWxlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiB2b2lkICpmbGFnX2luc3RydW1lbnRfZnVuY3Rpb25zX2V4Y2x1ZGVfZnVuY3Rpb25zOworI2Vsc2UKKyAgdm9pZCAqIHhfZmxhZ19pbnN0cnVtZW50X2Z1bmN0aW9uc19leGNsdWRlX2Z1bmN0aW9uczsKKyNkZWZpbmUgZmxhZ19pbnN0cnVtZW50X2Z1bmN0aW9uc19leGNsdWRlX2Z1bmN0aW9ucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaW5zdHJ1bWVudF9mdW5jdGlvbnNfZXhjbHVkZV9mdW5jdGlvbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGhlbHBfZmxhZzsKKyNlbHNlCisgIGludCB4X2hlbHBfZmxhZzsKKyNkZWZpbmUgaGVscF9mbGFnIGdsb2JhbF9vcHRpb25zLnhfaGVscF9mbGFnCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBub19zeXNyb290X3N1ZmZpeDsKKyNlbHNlCisgIGludCB4X25vX3N5c3Jvb3Rfc3VmZml4OworI2RlZmluZSBub19zeXNyb290X3N1ZmZpeCBnbG9iYWxfb3B0aW9ucy54X25vX3N5c3Jvb3Rfc3VmZml4CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3ByZXByb2Nlc3Nfb25seTsKKyNlbHNlCisgIGludCB4X2ZsYWdfcHJlcHJvY2Vzc19vbmx5OworI2RlZmluZSBmbGFnX3ByZXByb2Nlc3Nfb25seSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcHJlcHJvY2Vzc19vbmx5CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2FiaTsKKyNlbHNlCisgIGludCB4X3dhcm5fYWJpOworI2RlZmluZSB3YXJuX2FiaSBnbG9iYWxfb3B0aW9ucy54X3dhcm5fYWJpCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2FiaV90YWc7CisjZWxzZQorICBpbnQgeF93YXJuX2FiaV90YWc7CisjZGVmaW5lIHdhcm5fYWJpX3RhZyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fYWJpX3RhZworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9hZGRyZXNzOworI2Vsc2UKKyAgaW50IHhfd2Fybl9hZGRyZXNzOworI2RlZmluZSB3YXJuX2FkZHJlc3MgZ2xvYmFsX29wdGlvbnMueF93YXJuX2FkZHJlc3MKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fYWdncmVnYXRlX3JldHVybjsKKyNlbHNlCisgIGludCB4X3dhcm5fYWdncmVnYXRlX3JldHVybjsKKyNkZWZpbmUgd2Fybl9hZ2dyZWdhdGVfcmV0dXJuIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9hZ2dyZWdhdGVfcmV0dXJuCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2FnZ3Jlc3NpdmVfbG9vcF9vcHRpbWl6YXRpb25zOworI2Vsc2UKKyAgaW50IHhfd2Fybl9hZ2dyZXNzaXZlX2xvb3Bfb3B0aW1pemF0aW9uczsKKyNkZWZpbmUgd2Fybl9hZ2dyZXNzaXZlX2xvb3Bfb3B0aW1pemF0aW9ucyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fYWdncmVzc2l2ZV9sb29wX29wdGltaXphdGlvbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fYXJyYXlfYm91bmRzOworI2Vsc2UKKyAgaW50IHhfd2Fybl9hcnJheV9ib3VuZHM7CisjZGVmaW5lIHdhcm5fYXJyYXlfYm91bmRzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9hcnJheV9ib3VuZHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fYXNzaWduX2ludGVyY2VwdDsKKyNlbHNlCisgIGludCB4X3dhcm5fYXNzaWduX2ludGVyY2VwdDsKKyNkZWZpbmUgd2Fybl9hc3NpZ25faW50ZXJjZXB0IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9hc3NpZ25faW50ZXJjZXB0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2F0dHJpYnV0ZXM7CisjZWxzZQorICBpbnQgeF93YXJuX2F0dHJpYnV0ZXM7CisjZGVmaW5lIHdhcm5fYXR0cmlidXRlcyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fYXR0cmlidXRlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9iYWRfZnVuY3Rpb25fY2FzdDsKKyNlbHNlCisgIGludCB4X3dhcm5fYmFkX2Z1bmN0aW9uX2Nhc3Q7CisjZGVmaW5lIHdhcm5fYmFkX2Z1bmN0aW9uX2Nhc3QgZ2xvYmFsX29wdGlvbnMueF93YXJuX2JhZF9mdW5jdGlvbl9jYXN0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2N4eF9jb21wYXQ7CisjZWxzZQorICBpbnQgeF93YXJuX2N4eF9jb21wYXQ7CisjZGVmaW5lIHdhcm5fY3h4X2NvbXBhdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fY3h4X2NvbXBhdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9jeHgweF9jb21wYXQ7CisjZWxzZQorICBpbnQgeF93YXJuX2N4eDB4X2NvbXBhdDsKKyNkZWZpbmUgd2Fybl9jeHgweF9jb21wYXQgZ2xvYmFsX29wdGlvbnMueF93YXJuX2N4eDB4X2NvbXBhdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9jYXN0X2FsaWduOworI2Vsc2UKKyAgaW50IHhfd2Fybl9jYXN0X2FsaWduOworI2RlZmluZSB3YXJuX2Nhc3RfYWxpZ24gZ2xvYmFsX29wdGlvbnMueF93YXJuX2Nhc3RfYWxpZ24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fY2FzdF9xdWFsOworI2Vsc2UKKyAgaW50IHhfd2Fybl9jYXN0X3F1YWw7CisjZGVmaW5lIHdhcm5fY2FzdF9xdWFsIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9jYXN0X3F1YWwKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fY2hhcl9zdWJzY3JpcHRzOworI2Vsc2UKKyAgaW50IHhfd2Fybl9jaGFyX3N1YnNjcmlwdHM7CisjZGVmaW5lIHdhcm5fY2hhcl9zdWJzY3JpcHRzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9jaGFyX3N1YnNjcmlwdHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fY2xvYmJlcmVkOworI2Vsc2UKKyAgaW50IHhfd2Fybl9jbG9iYmVyZWQ7CisjZGVmaW5lIHdhcm5fY2xvYmJlcmVkIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9jbG9iYmVyZWQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fY29udmVyc2lvbjsKKyNlbHNlCisgIGludCB4X3dhcm5fY29udmVyc2lvbjsKKyNkZWZpbmUgd2Fybl9jb252ZXJzaW9uIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9jb252ZXJzaW9uCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2NvbnZlcnNpb25fbnVsbDsKKyNlbHNlCisgIGludCB4X3dhcm5fY29udmVyc2lvbl9udWxsOworI2RlZmluZSB3YXJuX2NvbnZlcnNpb25fbnVsbCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fY29udmVyc2lvbl9udWxsCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2NvdmVyYWdlX21pc21hdGNoOworI2Vsc2UKKyAgaW50IHhfd2Fybl9jb3ZlcmFnZV9taXNtYXRjaDsKKyNkZWZpbmUgd2Fybl9jb3ZlcmFnZV9taXNtYXRjaCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fY292ZXJhZ2VfbWlzbWF0Y2gKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fY3BwOworI2Vsc2UKKyAgaW50IHhfd2Fybl9jcHA7CisjZGVmaW5lIHdhcm5fY3BwIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9jcHAKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fY3Rvcl9kdG9yX3ByaXZhY3k7CisjZWxzZQorICBpbnQgeF93YXJuX2N0b3JfZHRvcl9wcml2YWN5OworI2RlZmluZSB3YXJuX2N0b3JfZHRvcl9wcml2YWN5IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9jdG9yX2R0b3JfcHJpdmFjeQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnQ7CisjZWxzZQorICBpbnQgeF93YXJuX2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudDsKKyNkZWZpbmUgd2Fybl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnQgZ2xvYmFsX29wdGlvbnMueF93YXJuX2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9kZWxub252ZHRvcjsKKyNlbHNlCisgIGludCB4X3dhcm5fZGVsbm9udmR0b3I7CisjZGVmaW5lIHdhcm5fZGVsbm9udmR0b3IgZ2xvYmFsX29wdGlvbnMueF93YXJuX2RlbG5vbnZkdG9yCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2RlcHJlY2F0ZWQ7CisjZWxzZQorICBpbnQgeF93YXJuX2RlcHJlY2F0ZWQ7CisjZGVmaW5lIHdhcm5fZGVwcmVjYXRlZCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fZGVwcmVjYXRlZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9kZXByZWNhdGVkX2RlY2w7CisjZWxzZQorICBpbnQgeF93YXJuX2RlcHJlY2F0ZWRfZGVjbDsKKyNkZWZpbmUgd2Fybl9kZXByZWNhdGVkX2RlY2wgZ2xvYmFsX29wdGlvbnMueF93YXJuX2RlcHJlY2F0ZWRfZGVjbAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9kaXNhYmxlZF9vcHRpbWl6YXRpb247CisjZWxzZQorICBpbnQgeF93YXJuX2Rpc2FibGVkX29wdGltaXphdGlvbjsKKyNkZWZpbmUgd2Fybl9kaXNhYmxlZF9vcHRpbWl6YXRpb24gZ2xvYmFsX29wdGlvbnMueF93YXJuX2Rpc2FibGVkX29wdGltaXphdGlvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9kaXZfYnlfemVybzsKKyNlbHNlCisgIGludCB4X3dhcm5fZGl2X2J5X3plcm87CisjZGVmaW5lIHdhcm5fZGl2X2J5X3plcm8gZ2xvYmFsX29wdGlvbnMueF93YXJuX2Rpdl9ieV96ZXJvCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2RvdWJsZV9wcm9tb3Rpb247CisjZWxzZQorICBpbnQgeF93YXJuX2RvdWJsZV9wcm9tb3Rpb247CisjZGVmaW5lIHdhcm5fZG91YmxlX3Byb21vdGlvbiBnbG9iYWxfb3B0aW9ucy54X3dhcm5fZG91YmxlX3Byb21vdGlvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9lY3BwOworI2Vsc2UKKyAgaW50IHhfd2Fybl9lY3BwOworI2RlZmluZSB3YXJuX2VjcHAgZ2xvYmFsX29wdGlvbnMueF93YXJuX2VjcHAKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fZW1wdHlfYm9keTsKKyNlbHNlCisgIGludCB4X3dhcm5fZW1wdHlfYm9keTsKKyNkZWZpbmUgd2Fybl9lbXB0eV9ib2R5IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9lbXB0eV9ib2R5CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2VudW1fY29tcGFyZTsKKyNlbHNlCisgIGludCB4X3dhcm5fZW51bV9jb21wYXJlOworI2RlZmluZSB3YXJuX2VudW1fY29tcGFyZSBnbG9iYWxfb3B0aW9ucy54X3dhcm5fZW51bV9jb21wYXJlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuaW5nc19hcmVfZXJyb3JzOworI2Vsc2UKKyAgaW50IHhfd2FybmluZ3NfYXJlX2Vycm9yczsKKyNkZWZpbmUgd2FybmluZ3NfYXJlX2Vycm9ycyBnbG9iYWxfb3B0aW9ucy54X3dhcm5pbmdzX2FyZV9lcnJvcnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGV4dHJhX3dhcm5pbmdzOworI2Vsc2UKKyAgaW50IHhfZXh0cmFfd2FybmluZ3M7CisjZGVmaW5lIGV4dHJhX3dhcm5pbmdzIGdsb2JhbF9vcHRpb25zLnhfZXh0cmFfd2FybmluZ3MKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZXh0cmFuZW91c19zZW1pY29sb247CisjZWxzZQorICBpbnQgeF9mbGFnX2V4dHJhbmVvdXNfc2VtaWNvbG9uOworI2RlZmluZSBmbGFnX2V4dHJhbmVvdXNfc2VtaWNvbG9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19leHRyYW5lb3VzX3NlbWljb2xvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19mYXRhbF9lcnJvcnM7CisjZWxzZQorICBpbnQgeF9mbGFnX2ZhdGFsX2Vycm9yczsKKyNkZWZpbmUgZmxhZ19mYXRhbF9lcnJvcnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2ZhdGFsX2Vycm9ycworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9mbG9hdF9lcXVhbDsKKyNlbHNlCisgIGludCB4X3dhcm5fZmxvYXRfZXF1YWw7CisjZGVmaW5lIHdhcm5fZmxvYXRfZXF1YWwgZ2xvYmFsX29wdGlvbnMueF93YXJuX2Zsb2F0X2VxdWFsCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2Zvcm1hdF9jb250YWluc19udWw7CisjZWxzZQorICBpbnQgeF93YXJuX2Zvcm1hdF9jb250YWluc19udWw7CisjZGVmaW5lIHdhcm5fZm9ybWF0X2NvbnRhaW5zX251bCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fZm9ybWF0X2NvbnRhaW5zX251bAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9mb3JtYXRfZXh0cmFfYXJnczsKKyNlbHNlCisgIGludCB4X3dhcm5fZm9ybWF0X2V4dHJhX2FyZ3M7CisjZGVmaW5lIHdhcm5fZm9ybWF0X2V4dHJhX2FyZ3MgZ2xvYmFsX29wdGlvbnMueF93YXJuX2Zvcm1hdF9leHRyYV9hcmdzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2Zvcm1hdF9ub25saXRlcmFsOworI2Vsc2UKKyAgaW50IHhfd2Fybl9mb3JtYXRfbm9ubGl0ZXJhbDsKKyNkZWZpbmUgd2Fybl9mb3JtYXRfbm9ubGl0ZXJhbCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fZm9ybWF0X25vbmxpdGVyYWwKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fZm9ybWF0X3NlY3VyaXR5OworI2Vsc2UKKyAgaW50IHhfd2Fybl9mb3JtYXRfc2VjdXJpdHk7CisjZGVmaW5lIHdhcm5fZm9ybWF0X3NlY3VyaXR5IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9mb3JtYXRfc2VjdXJpdHkKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fZm9ybWF0X3kyazsKKyNlbHNlCisgIGludCB4X3dhcm5fZm9ybWF0X3kyazsKKyNkZWZpbmUgd2Fybl9mb3JtYXRfeTJrIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9mb3JtYXRfeTJrCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2Zvcm1hdF96ZXJvX2xlbmd0aDsKKyNlbHNlCisgIGludCB4X3dhcm5fZm9ybWF0X3plcm9fbGVuZ3RoOworI2RlZmluZSB3YXJuX2Zvcm1hdF96ZXJvX2xlbmd0aCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fZm9ybWF0X3plcm9fbGVuZ3RoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2Zvcm1hdDsKKyNlbHNlCisgIGludCB4X3dhcm5fZm9ybWF0OworI2RlZmluZSB3YXJuX2Zvcm1hdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fZm9ybWF0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2ZyZWVfbm9uaGVhcF9vYmplY3Q7CisjZWxzZQorICBpbnQgeF93YXJuX2ZyZWVfbm9uaGVhcF9vYmplY3Q7CisjZGVmaW5lIHdhcm5fZnJlZV9ub25oZWFwX29iamVjdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fZnJlZV9ub25oZWFwX29iamVjdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9pZ25vcmVkX3F1YWxpZmllcnM7CisjZWxzZQorICBpbnQgeF93YXJuX2lnbm9yZWRfcXVhbGlmaWVyczsKKyNkZWZpbmUgd2Fybl9pZ25vcmVkX3F1YWxpZmllcnMgZ2xvYmFsX29wdGlvbnMueF93YXJuX2lnbm9yZWRfcXVhbGlmaWVycworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9pbXBsaWNpdDsKKyNlbHNlCisgIGludCB4X3dhcm5faW1wbGljaXQ7CisjZGVmaW5lIHdhcm5faW1wbGljaXQgZ2xvYmFsX29wdGlvbnMueF93YXJuX2ltcGxpY2l0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2ltcGxpY2l0X2Z1bmN0aW9uX2RlY2xhcmF0aW9uOworI2Vsc2UKKyAgaW50IHhfd2Fybl9pbXBsaWNpdF9mdW5jdGlvbl9kZWNsYXJhdGlvbjsKKyNkZWZpbmUgd2Fybl9pbXBsaWNpdF9mdW5jdGlvbl9kZWNsYXJhdGlvbiBnbG9iYWxfb3B0aW9ucy54X3dhcm5faW1wbGljaXRfZnVuY3Rpb25fZGVjbGFyYXRpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5faW1wbGljaXRfaW50OworI2Vsc2UKKyAgaW50IHhfd2Fybl9pbXBsaWNpdF9pbnQ7CisjZGVmaW5lIHdhcm5faW1wbGljaXRfaW50IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9pbXBsaWNpdF9pbnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5faW5oX3Zhcl9jdG9yOworI2Vsc2UKKyAgaW50IHhfd2Fybl9pbmhfdmFyX2N0b3I7CisjZGVmaW5lIHdhcm5faW5oX3Zhcl9jdG9yIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9pbmhfdmFyX2N0b3IKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5faW5pdF9zZWxmOworI2Vsc2UKKyAgaW50IHhfd2Fybl9pbml0X3NlbGY7CisjZGVmaW5lIHdhcm5faW5pdF9zZWxmIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9pbml0X3NlbGYKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5faW5saW5lOworI2Vsc2UKKyAgaW50IHhfd2Fybl9pbmxpbmU7CisjZGVmaW5lIHdhcm5faW5saW5lIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9pbmxpbmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5faW50X3RvX3BvaW50ZXJfY2FzdDsKKyNlbHNlCisgIGludCB4X3dhcm5faW50X3RvX3BvaW50ZXJfY2FzdDsKKyNkZWZpbmUgd2Fybl9pbnRfdG9fcG9pbnRlcl9jYXN0IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9pbnRfdG9fcG9pbnRlcl9jYXN0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2ludmFsaWRfbWVtb3J5X21vZGVsOworI2Vsc2UKKyAgaW50IHhfd2Fybl9pbnZhbGlkX21lbW9yeV9tb2RlbDsKKyNkZWZpbmUgd2Fybl9pbnZhbGlkX21lbW9yeV9tb2RlbCBnbG9iYWxfb3B0aW9ucy54X3dhcm5faW52YWxpZF9tZW1vcnlfbW9kZWwKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5faW52YWxpZF9vZmZzZXRvZjsKKyNlbHNlCisgIGludCB4X3dhcm5faW52YWxpZF9vZmZzZXRvZjsKKyNkZWZpbmUgd2Fybl9pbnZhbGlkX29mZnNldG9mIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9pbnZhbGlkX29mZnNldG9mCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX2p1bXBfbWlzc2VzX2luaXQ7CisjZWxzZQorICBpbnQgeF93YXJuX2p1bXBfbWlzc2VzX2luaXQ7CisjZGVmaW5lIHdhcm5fanVtcF9taXNzZXNfaW5pdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fanVtcF9taXNzZXNfaW5pdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9sb2dpY2FsX29wOworI2Vsc2UKKyAgaW50IHhfd2Fybl9sb2dpY2FsX29wOworI2RlZmluZSB3YXJuX2xvZ2ljYWxfb3AgZ2xvYmFsX29wdGlvbnMueF93YXJuX2xvZ2ljYWxfb3AKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fbG9uZ19sb25nOworI2Vsc2UKKyAgaW50IHhfd2Fybl9sb25nX2xvbmc7CisjZGVmaW5lIHdhcm5fbG9uZ19sb25nIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9sb25nX2xvbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fbWFpbjsKKyNlbHNlCisgIGludCB4X3dhcm5fbWFpbjsKKyNkZWZpbmUgd2Fybl9tYWluIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9tYWluCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX21heWJlX3VuaW5pdGlhbGl6ZWQ7CisjZWxzZQorICBpbnQgeF93YXJuX21heWJlX3VuaW5pdGlhbGl6ZWQ7CisjZGVmaW5lIHdhcm5fbWF5YmVfdW5pbml0aWFsaXplZCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fbWF5YmVfdW5pbml0aWFsaXplZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9taXNzaW5nX2JyYWNlczsKKyNlbHNlCisgIGludCB4X3dhcm5fbWlzc2luZ19icmFjZXM7CisjZGVmaW5lIHdhcm5fbWlzc2luZ19icmFjZXMgZ2xvYmFsX29wdGlvbnMueF93YXJuX21pc3NpbmdfYnJhY2VzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX21pc3NpbmdfZGVjbGFyYXRpb25zOworI2Vsc2UKKyAgaW50IHhfd2Fybl9taXNzaW5nX2RlY2xhcmF0aW9uczsKKyNkZWZpbmUgd2Fybl9taXNzaW5nX2RlY2xhcmF0aW9ucyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fbWlzc2luZ19kZWNsYXJhdGlvbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fbWlzc2luZ19maWVsZF9pbml0aWFsaXplcnM7CisjZWxzZQorICBpbnQgeF93YXJuX21pc3NpbmdfZmllbGRfaW5pdGlhbGl6ZXJzOworI2RlZmluZSB3YXJuX21pc3NpbmdfZmllbGRfaW5pdGlhbGl6ZXJzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9taXNzaW5nX2ZpZWxkX2luaXRpYWxpemVycworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9taXNzaW5nX3BhcmFtZXRlcl90eXBlOworI2Vsc2UKKyAgaW50IHhfd2Fybl9taXNzaW5nX3BhcmFtZXRlcl90eXBlOworI2RlZmluZSB3YXJuX21pc3NpbmdfcGFyYW1ldGVyX3R5cGUgZ2xvYmFsX29wdGlvbnMueF93YXJuX21pc3NpbmdfcGFyYW1ldGVyX3R5cGUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fbWlzc2luZ19wcm90b3R5cGVzOworI2Vsc2UKKyAgaW50IHhfd2Fybl9taXNzaW5nX3Byb3RvdHlwZXM7CisjZGVmaW5lIHdhcm5fbWlzc2luZ19wcm90b3R5cGVzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9taXNzaW5nX3Byb3RvdHlwZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fbXVkZmxhcDsKKyNlbHNlCisgIGludCB4X3dhcm5fbXVkZmxhcDsKKyNkZWZpbmUgd2Fybl9tdWRmbGFwIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9tdWRmbGFwCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX25hcnJvd2luZzsKKyNlbHNlCisgIGludCB4X3dhcm5fbmFycm93aW5nOworI2RlZmluZSB3YXJuX25hcnJvd2luZyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fbmFycm93aW5nCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX25lc3RlZF9leHRlcm5zOworI2Vsc2UKKyAgaW50IHhfd2Fybl9uZXN0ZWRfZXh0ZXJuczsKKyNkZWZpbmUgd2Fybl9uZXN0ZWRfZXh0ZXJucyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fbmVzdGVkX2V4dGVybnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fbm9leGNlcHQ7CisjZWxzZQorICBpbnQgeF93YXJuX25vZXhjZXB0OworI2RlZmluZSB3YXJuX25vZXhjZXB0IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9ub2V4Y2VwdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9ub250ZW1wbGF0ZV9mcmllbmQ7CisjZWxzZQorICBpbnQgeF93YXJuX25vbnRlbXBsYXRlX2ZyaWVuZDsKKyNkZWZpbmUgd2Fybl9ub250ZW1wbGF0ZV9mcmllbmQgZ2xvYmFsX29wdGlvbnMueF93YXJuX25vbnRlbXBsYXRlX2ZyaWVuZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9ub252ZHRvcjsKKyNlbHNlCisgIGludCB4X3dhcm5fbm9udmR0b3I7CisjZGVmaW5lIHdhcm5fbm9udmR0b3IgZ2xvYmFsX29wdGlvbnMueF93YXJuX25vbnZkdG9yCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX25vbm51bGw7CisjZWxzZQorICBpbnQgeF93YXJuX25vbm51bGw7CisjZGVmaW5lIHdhcm5fbm9ubnVsbCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fbm9ubnVsbAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9vbGRfc3R5bGVfY2FzdDsKKyNlbHNlCisgIGludCB4X3dhcm5fb2xkX3N0eWxlX2Nhc3Q7CisjZGVmaW5lIHdhcm5fb2xkX3N0eWxlX2Nhc3QgZ2xvYmFsX29wdGlvbnMueF93YXJuX29sZF9zdHlsZV9jYXN0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX29sZF9zdHlsZV9kZWNsYXJhdGlvbjsKKyNlbHNlCisgIGludCB4X3dhcm5fb2xkX3N0eWxlX2RlY2xhcmF0aW9uOworI2RlZmluZSB3YXJuX29sZF9zdHlsZV9kZWNsYXJhdGlvbiBnbG9iYWxfb3B0aW9ucy54X3dhcm5fb2xkX3N0eWxlX2RlY2xhcmF0aW9uCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX29sZF9zdHlsZV9kZWZpbml0aW9uOworI2Vsc2UKKyAgaW50IHhfd2Fybl9vbGRfc3R5bGVfZGVmaW5pdGlvbjsKKyNkZWZpbmUgd2Fybl9vbGRfc3R5bGVfZGVmaW5pdGlvbiBnbG9iYWxfb3B0aW9ucy54X3dhcm5fb2xkX3N0eWxlX2RlZmluaXRpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbmV3ZXI7CisjZWxzZQorICBpbnQgeF9mbGFnX25ld2VyOworI2RlZmluZSBmbGFnX25ld2VyIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19uZXdlcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9vdmVyZmxvdzsKKyNlbHNlCisgIGludCB4X3dhcm5fb3ZlcmZsb3c7CisjZGVmaW5lIHdhcm5fb3ZlcmZsb3cgZ2xvYmFsX29wdGlvbnMueF93YXJuX292ZXJmbG93CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX292ZXJsZW5ndGhfc3RyaW5nczsKKyNlbHNlCisgIGludCB4X3dhcm5fb3Zlcmxlbmd0aF9zdHJpbmdzOworI2RlZmluZSB3YXJuX292ZXJsZW5ndGhfc3RyaW5ncyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fb3Zlcmxlbmd0aF9zdHJpbmdzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX292ZXJsb2FkZWRfdmlydHVhbDsKKyNlbHNlCisgIGludCB4X3dhcm5fb3ZlcmxvYWRlZF92aXJ0dWFsOworI2RlZmluZSB3YXJuX292ZXJsb2FkZWRfdmlydHVhbCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fb3ZlcmxvYWRlZF92aXJ0dWFsCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX292ZXJyaWRlX2luaXQ7CisjZWxzZQorICBpbnQgeF93YXJuX292ZXJyaWRlX2luaXQ7CisjZGVmaW5lIHdhcm5fb3ZlcnJpZGVfaW5pdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fb3ZlcnJpZGVfaW5pdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9wYWNrZWQ7CisjZWxzZQorICBpbnQgeF93YXJuX3BhY2tlZDsKKyNkZWZpbmUgd2Fybl9wYWNrZWQgZ2xvYmFsX29wdGlvbnMueF93YXJuX3BhY2tlZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9wYWNrZWRfYml0ZmllbGRfY29tcGF0OworI2Vsc2UKKyAgaW50IHhfd2Fybl9wYWNrZWRfYml0ZmllbGRfY29tcGF0OworI2RlZmluZSB3YXJuX3BhY2tlZF9iaXRmaWVsZF9jb21wYXQgZ2xvYmFsX29wdGlvbnMueF93YXJuX3BhY2tlZF9iaXRmaWVsZF9jb21wYXQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fcGFkZGVkOworI2Vsc2UKKyAgaW50IHhfd2Fybl9wYWRkZWQ7CisjZGVmaW5lIHdhcm5fcGFkZGVkIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9wYWRkZWQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fcGFyZW50aGVzZXM7CisjZWxzZQorICBpbnQgeF93YXJuX3BhcmVudGhlc2VzOworI2RlZmluZSB3YXJuX3BhcmVudGhlc2VzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9wYXJlbnRoZXNlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgcGVkYW50aWM7CisjZWxzZQorICBpbnQgeF9wZWRhbnRpYzsKKyNkZWZpbmUgcGVkYW50aWMgZ2xvYmFsX29wdGlvbnMueF9wZWRhbnRpYworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9wbWYycHRyOworI2Vsc2UKKyAgaW50IHhfd2Fybl9wbWYycHRyOworI2RlZmluZSB3YXJuX3BtZjJwdHIgZ2xvYmFsX29wdGlvbnMueF93YXJuX3BtZjJwdHIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fcG9pbnRlcl9hcml0aDsKKyNlbHNlCisgIGludCB4X3dhcm5fcG9pbnRlcl9hcml0aDsKKyNkZWZpbmUgd2Fybl9wb2ludGVyX2FyaXRoIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9wb2ludGVyX2FyaXRoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3BvaW50ZXJfc2lnbjsKKyNlbHNlCisgIGludCB4X3dhcm5fcG9pbnRlcl9zaWduOworI2RlZmluZSB3YXJuX3BvaW50ZXJfc2lnbiBnbG9iYWxfb3B0aW9ucy54X3dhcm5fcG9pbnRlcl9zaWduCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3BvaW50ZXJfdG9faW50X2Nhc3Q7CisjZWxzZQorICBpbnQgeF93YXJuX3BvaW50ZXJfdG9faW50X2Nhc3Q7CisjZGVmaW5lIHdhcm5fcG9pbnRlcl90b19pbnRfY2FzdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fcG9pbnRlcl90b19pbnRfY2FzdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9wcmFnbWFzOworI2Vsc2UKKyAgaW50IHhfd2Fybl9wcmFnbWFzOworI2RlZmluZSB3YXJuX3ByYWdtYXMgZ2xvYmFsX29wdGlvbnMueF93YXJuX3ByYWdtYXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fcHJvcGVydHlfYXNzaWduX2RlZmF1bHQ7CisjZWxzZQorICBpbnQgeF93YXJuX3Byb3BlcnR5X2Fzc2lnbl9kZWZhdWx0OworI2RlZmluZSB3YXJuX3Byb3BlcnR5X2Fzc2lnbl9kZWZhdWx0IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9wcm9wZXJ0eV9hc3NpZ25fZGVmYXVsdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9wcm90b2NvbDsKKyNlbHNlCisgIGludCB4X3dhcm5fcHJvdG9jb2w7CisjZGVmaW5lIHdhcm5fcHJvdG9jb2wgZ2xvYmFsX29wdGlvbnMueF93YXJuX3Byb3RvY29sCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3BzYWJpOworI2Vsc2UKKyAgaW50IHhfd2Fybl9wc2FiaTsKKyNkZWZpbmUgd2Fybl9wc2FiaSBnbG9iYWxfb3B0aW9ucy54X3dhcm5fcHNhYmkKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fcmVkdW5kYW50X2RlY2xzOworI2Vsc2UKKyAgaW50IHhfd2Fybl9yZWR1bmRhbnRfZGVjbHM7CisjZGVmaW5lIHdhcm5fcmVkdW5kYW50X2RlY2xzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9yZWR1bmRhbnRfZGVjbHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcmVkdW5kYW50OworI2Vsc2UKKyAgaW50IHhfZmxhZ19yZWR1bmRhbnQ7CisjZGVmaW5lIGZsYWdfcmVkdW5kYW50IGdsb2JhbF9vcHRpb25zLnhfZmxhZ19yZWR1bmRhbnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fcmVvcmRlcjsKKyNlbHNlCisgIGludCB4X3dhcm5fcmVvcmRlcjsKKyNkZWZpbmUgd2Fybl9yZW9yZGVyIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9yZW9yZGVyCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3JldHVybl9sb2NhbF9hZGRyOworI2Vsc2UKKyAgaW50IHhfd2Fybl9yZXR1cm5fbG9jYWxfYWRkcjsKKyNkZWZpbmUgd2Fybl9yZXR1cm5fbG9jYWxfYWRkciBnbG9iYWxfb3B0aW9ucy54X3dhcm5fcmV0dXJuX2xvY2FsX2FkZHIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fcmV0dXJuX3R5cGU7CisjZWxzZQorICBpbnQgeF93YXJuX3JldHVybl90eXBlOworI2RlZmluZSB3YXJuX3JldHVybl90eXBlIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9yZXR1cm5fdHlwZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9zZWxlY3RvcjsKKyNlbHNlCisgIGludCB4X3dhcm5fc2VsZWN0b3I7CisjZGVmaW5lIHdhcm5fc2VsZWN0b3IgZ2xvYmFsX29wdGlvbnMueF93YXJuX3NlbGVjdG9yCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3NlcXVlbmNlX3BvaW50OworI2Vsc2UKKyAgaW50IHhfd2Fybl9zZXF1ZW5jZV9wb2ludDsKKyNkZWZpbmUgd2Fybl9zZXF1ZW5jZV9wb2ludCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc2VxdWVuY2VfcG9pbnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fc2hhZG93OworI2Vsc2UKKyAgaW50IHhfd2Fybl9zaGFkb3c7CisjZGVmaW5lIHdhcm5fc2hhZG93IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9zaGFkb3cKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fc2lnbl9jb21wYXJlOworI2Vsc2UKKyAgaW50IHhfd2Fybl9zaWduX2NvbXBhcmU7CisjZGVmaW5lIHdhcm5fc2lnbl9jb21wYXJlIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9zaWduX2NvbXBhcmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fc2lnbl9jb252ZXJzaW9uOworI2Vsc2UKKyAgaW50IHhfd2Fybl9zaWduX2NvbnZlcnNpb247CisjZGVmaW5lIHdhcm5fc2lnbl9jb252ZXJzaW9uIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9zaWduX2NvbnZlcnNpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fc2lnbl9wcm9tbzsKKyNlbHNlCisgIGludCB4X3dhcm5fc2lnbl9wcm9tbzsKKyNkZWZpbmUgd2Fybl9zaWduX3Byb21vIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9zaWduX3Byb21vCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3NpemVvZl9wb2ludGVyX21lbWFjY2VzczsKKyNlbHNlCisgIGludCB4X3dhcm5fc2l6ZW9mX3BvaW50ZXJfbWVtYWNjZXNzOworI2RlZmluZSB3YXJuX3NpemVvZl9wb2ludGVyX21lbWFjY2VzcyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc2l6ZW9mX3BvaW50ZXJfbWVtYWNjZXNzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3N0YWNrX3Byb3RlY3Q7CisjZWxzZQorICBpbnQgeF93YXJuX3N0YWNrX3Byb3RlY3Q7CisjZGVmaW5lIHdhcm5fc3RhY2tfcHJvdGVjdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc3RhY2tfcHJvdGVjdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9zdGFja191c2FnZTsKKyNlbHNlCisgIGludCB4X3dhcm5fc3RhY2tfdXNhZ2U7CisjZGVmaW5lIHdhcm5fc3RhY2tfdXNhZ2UgZ2xvYmFsX29wdGlvbnMueF93YXJuX3N0YWNrX3VzYWdlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3N0cmljdF9hbGlhc2luZzsKKyNlbHNlCisgIGludCB4X3dhcm5fc3RyaWN0X2FsaWFzaW5nOworI2RlZmluZSB3YXJuX3N0cmljdF9hbGlhc2luZyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc3RyaWN0X2FsaWFzaW5nCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3N0cmljdF9udWxsX3NlbnRpbmVsOworI2Vsc2UKKyAgaW50IHhfd2Fybl9zdHJpY3RfbnVsbF9zZW50aW5lbDsKKyNkZWZpbmUgd2Fybl9zdHJpY3RfbnVsbF9zZW50aW5lbCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc3RyaWN0X251bGxfc2VudGluZWwKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fc3RyaWN0X292ZXJmbG93OworI2Vsc2UKKyAgaW50IHhfd2Fybl9zdHJpY3Rfb3ZlcmZsb3c7CisjZGVmaW5lIHdhcm5fc3RyaWN0X292ZXJmbG93IGdsb2JhbF9vcHRpb25zLnhfd2Fybl9zdHJpY3Rfb3ZlcmZsb3cKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fc3RyaWN0X3Byb3RvdHlwZXM7CisjZWxzZQorICBpbnQgeF93YXJuX3N0cmljdF9wcm90b3R5cGVzOworI2RlZmluZSB3YXJuX3N0cmljdF9wcm90b3R5cGVzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9zdHJpY3RfcHJvdG90eXBlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9zdHJpY3Rfc2VsZWN0b3JfbWF0Y2g7CisjZWxzZQorICBpbnQgeF93YXJuX3N0cmljdF9zZWxlY3Rvcl9tYXRjaDsKKyNkZWZpbmUgd2Fybl9zdHJpY3Rfc2VsZWN0b3JfbWF0Y2ggZ2xvYmFsX29wdGlvbnMueF93YXJuX3N0cmljdF9zZWxlY3Rvcl9tYXRjaAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9zdWdnZXN0X2F0dHJpYnV0ZV9jb25zdDsKKyNlbHNlCisgIGludCB4X3dhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfY29uc3Q7CisjZGVmaW5lIHdhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfY29uc3QgZ2xvYmFsX29wdGlvbnMueF93YXJuX3N1Z2dlc3RfYXR0cmlidXRlX2NvbnN0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3N1Z2dlc3RfYXR0cmlidXRlX2Zvcm1hdDsKKyNlbHNlCisgIGludCB4X3dhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfZm9ybWF0OworI2RlZmluZSB3YXJuX3N1Z2dlc3RfYXR0cmlidXRlX2Zvcm1hdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfZm9ybWF0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3N1Z2dlc3RfYXR0cmlidXRlX25vcmV0dXJuOworI2Vsc2UKKyAgaW50IHhfd2Fybl9zdWdnZXN0X2F0dHJpYnV0ZV9ub3JldHVybjsKKyNkZWZpbmUgd2Fybl9zdWdnZXN0X2F0dHJpYnV0ZV9ub3JldHVybiBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfbm9yZXR1cm4KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfcHVyZTsKKyNlbHNlCisgIGludCB4X3dhcm5fc3VnZ2VzdF9hdHRyaWJ1dGVfcHVyZTsKKyNkZWZpbmUgd2Fybl9zdWdnZXN0X2F0dHJpYnV0ZV9wdXJlIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9zdWdnZXN0X2F0dHJpYnV0ZV9wdXJlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3N3aXRjaDsKKyNlbHNlCisgIGludCB4X3dhcm5fc3dpdGNoOworI2RlZmluZSB3YXJuX3N3aXRjaCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc3dpdGNoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3N3aXRjaF9kZWZhdWx0OworI2Vsc2UKKyAgaW50IHhfd2Fybl9zd2l0Y2hfZGVmYXVsdDsKKyNkZWZpbmUgd2Fybl9zd2l0Y2hfZGVmYXVsdCBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc3dpdGNoX2RlZmF1bHQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fc3dpdGNoX2VudW07CisjZWxzZQorICBpbnQgeF93YXJuX3N3aXRjaF9lbnVtOworI2RlZmluZSB3YXJuX3N3aXRjaF9lbnVtIGdsb2JhbF9vcHRpb25zLnhfd2Fybl9zd2l0Y2hfZW51bQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9zeW5jX25hbmQ7CisjZWxzZQorICBpbnQgeF93YXJuX3N5bmNfbmFuZDsKKyNkZWZpbmUgd2Fybl9zeW5jX25hbmQgZ2xvYmFsX29wdGlvbnMueF93YXJuX3N5bmNfbmFuZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl9zeW50aDsKKyNlbHNlCisgIGludCB4X3dhcm5fc3ludGg7CisjZGVmaW5lIHdhcm5fc3ludGggZ2xvYmFsX29wdGlvbnMueF93YXJuX3N5bnRoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3N5c3RlbV9oZWFkZXJzOworI2Vsc2UKKyAgaW50IHhfd2Fybl9zeXN0ZW1faGVhZGVyczsKKyNkZWZpbmUgd2Fybl9zeXN0ZW1faGVhZGVycyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fc3lzdGVtX2hlYWRlcnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdHJhZGl0aW9uYWw7CisjZWxzZQorICBpbnQgeF93YXJuX3RyYWRpdGlvbmFsOworI2RlZmluZSB3YXJuX3RyYWRpdGlvbmFsIGdsb2JhbF9vcHRpb25zLnhfd2Fybl90cmFkaXRpb25hbAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl90cmFkaXRpb25hbF9jb252ZXJzaW9uOworI2Vsc2UKKyAgaW50IHhfd2Fybl90cmFkaXRpb25hbF9jb252ZXJzaW9uOworI2RlZmluZSB3YXJuX3RyYWRpdGlvbmFsX2NvbnZlcnNpb24gZ2xvYmFsX29wdGlvbnMueF93YXJuX3RyYWRpdGlvbmFsX2NvbnZlcnNpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdHJhbXBvbGluZXM7CisjZWxzZQorICBpbnQgeF93YXJuX3RyYW1wb2xpbmVzOworI2RlZmluZSB3YXJuX3RyYW1wb2xpbmVzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl90cmFtcG9saW5lcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl90eXBlX2xpbWl0czsKKyNlbHNlCisgIGludCB4X3dhcm5fdHlwZV9saW1pdHM7CisjZGVmaW5lIHdhcm5fdHlwZV9saW1pdHMgZ2xvYmFsX29wdGlvbnMueF93YXJuX3R5cGVfbGltaXRzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3VuZGVjbGFyZWRfc2VsZWN0b3I7CisjZWxzZQorICBpbnQgeF93YXJuX3VuZGVjbGFyZWRfc2VsZWN0b3I7CisjZGVmaW5lIHdhcm5fdW5kZWNsYXJlZF9zZWxlY3RvciBnbG9iYWxfb3B0aW9ucy54X3dhcm5fdW5kZWNsYXJlZF9zZWxlY3RvcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl91bmluaXRpYWxpemVkOworI2Vsc2UKKyAgaW50IHhfd2Fybl91bmluaXRpYWxpemVkOworI2RlZmluZSB3YXJuX3VuaW5pdGlhbGl6ZWQgZ2xvYmFsX29wdGlvbnMueF93YXJuX3VuaW5pdGlhbGl6ZWQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdW5rbm93bl9wcmFnbWFzOworI2Vsc2UKKyAgaW50IHhfd2Fybl91bmtub3duX3ByYWdtYXM7CisjZGVmaW5lIHdhcm5fdW5rbm93bl9wcmFnbWFzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl91bmtub3duX3ByYWdtYXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdW5zYWZlX2xvb3Bfb3B0aW1pemF0aW9uczsKKyNlbHNlCisgIGludCB4X3dhcm5fdW5zYWZlX2xvb3Bfb3B0aW1pemF0aW9uczsKKyNkZWZpbmUgd2Fybl91bnNhZmVfbG9vcF9vcHRpbWl6YXRpb25zIGdsb2JhbF9vcHRpb25zLnhfd2Fybl91bnNhZmVfbG9vcF9vcHRpbWl6YXRpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3Vuc3VmZml4ZWRfZmxvYXRfY29uc3RhbnRzOworI2Vsc2UKKyAgaW50IHhfd2Fybl91bnN1ZmZpeGVkX2Zsb2F0X2NvbnN0YW50czsKKyNkZWZpbmUgd2Fybl91bnN1ZmZpeGVkX2Zsb2F0X2NvbnN0YW50cyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fdW5zdWZmaXhlZF9mbG9hdF9jb25zdGFudHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdW51c2VkOworI2Vsc2UKKyAgaW50IHhfd2Fybl91bnVzZWQ7CisjZGVmaW5lIHdhcm5fdW51c2VkIGdsb2JhbF9vcHRpb25zLnhfd2Fybl91bnVzZWQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdW51c2VkX2J1dF9zZXRfcGFyYW1ldGVyOworI2Vsc2UKKyAgaW50IHhfd2Fybl91bnVzZWRfYnV0X3NldF9wYXJhbWV0ZXI7CisjZGVmaW5lIHdhcm5fdW51c2VkX2J1dF9zZXRfcGFyYW1ldGVyIGdsb2JhbF9vcHRpb25zLnhfd2Fybl91bnVzZWRfYnV0X3NldF9wYXJhbWV0ZXIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdW51c2VkX2J1dF9zZXRfdmFyaWFibGU7CisjZWxzZQorICBpbnQgeF93YXJuX3VudXNlZF9idXRfc2V0X3ZhcmlhYmxlOworI2RlZmluZSB3YXJuX3VudXNlZF9idXRfc2V0X3ZhcmlhYmxlIGdsb2JhbF9vcHRpb25zLnhfd2Fybl91bnVzZWRfYnV0X3NldF92YXJpYWJsZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl91bnVzZWRfZnVuY3Rpb247CisjZWxzZQorICBpbnQgeF93YXJuX3VudXNlZF9mdW5jdGlvbjsKKyNkZWZpbmUgd2Fybl91bnVzZWRfZnVuY3Rpb24gZ2xvYmFsX29wdGlvbnMueF93YXJuX3VudXNlZF9mdW5jdGlvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl91bnVzZWRfbGFiZWw7CisjZWxzZQorICBpbnQgeF93YXJuX3VudXNlZF9sYWJlbDsKKyNkZWZpbmUgd2Fybl91bnVzZWRfbGFiZWwgZ2xvYmFsX29wdGlvbnMueF93YXJuX3VudXNlZF9sYWJlbAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl91bnVzZWRfbG9jYWxfdHlwZWRlZnM7CisjZWxzZQorICBpbnQgeF93YXJuX3VudXNlZF9sb2NhbF90eXBlZGVmczsKKyNkZWZpbmUgd2Fybl91bnVzZWRfbG9jYWxfdHlwZWRlZnMgZ2xvYmFsX29wdGlvbnMueF93YXJuX3VudXNlZF9sb2NhbF90eXBlZGVmcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgY3BwX3dhcm5fdW51c2VkX21hY3JvczsKKyNlbHNlCisgIGludCB4X2NwcF93YXJuX3VudXNlZF9tYWNyb3M7CisjZGVmaW5lIGNwcF93YXJuX3VudXNlZF9tYWNyb3MgZ2xvYmFsX29wdGlvbnMueF9jcHBfd2Fybl91bnVzZWRfbWFjcm9zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3VudXNlZF9wYXJhbWV0ZXI7CisjZWxzZQorICBpbnQgeF93YXJuX3VudXNlZF9wYXJhbWV0ZXI7CisjZGVmaW5lIHdhcm5fdW51c2VkX3BhcmFtZXRlciBnbG9iYWxfb3B0aW9ucy54X3dhcm5fdW51c2VkX3BhcmFtZXRlcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl91bnVzZWRfcmVzdWx0OworI2Vsc2UKKyAgaW50IHhfd2Fybl91bnVzZWRfcmVzdWx0OworI2RlZmluZSB3YXJuX3VudXNlZF9yZXN1bHQgZ2xvYmFsX29wdGlvbnMueF93YXJuX3VudXNlZF9yZXN1bHQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdW51c2VkX3ZhbHVlOworI2Vsc2UKKyAgaW50IHhfd2Fybl91bnVzZWRfdmFsdWU7CisjZGVmaW5lIHdhcm5fdW51c2VkX3ZhbHVlIGdsb2JhbF9vcHRpb25zLnhfd2Fybl91bnVzZWRfdmFsdWUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdW51c2VkX3ZhcmlhYmxlOworI2Vsc2UKKyAgaW50IHhfd2Fybl91bnVzZWRfdmFyaWFibGU7CisjZGVmaW5lIHdhcm5fdW51c2VkX3ZhcmlhYmxlIGdsb2JhbF9vcHRpb25zLnhfd2Fybl91bnVzZWRfdmFyaWFibGUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdXNlbGVzc19jYXN0OworI2Vsc2UKKyAgaW50IHhfd2Fybl91c2VsZXNzX2Nhc3Q7CisjZGVmaW5lIHdhcm5fdXNlbGVzc19jYXN0IGdsb2JhbF9vcHRpb25zLnhfd2Fybl91c2VsZXNzX2Nhc3QKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdmFyYXJnczsKKyNlbHNlCisgIGludCB4X3dhcm5fdmFyYXJnczsKKyNkZWZpbmUgd2Fybl92YXJhcmdzIGdsb2JhbF9vcHRpb25zLnhfd2Fybl92YXJhcmdzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBjcHBfd2Fybl92YXJpYWRpY19tYWNyb3M7CisjZWxzZQorICBpbnQgeF9jcHBfd2Fybl92YXJpYWRpY19tYWNyb3M7CisjZGVmaW5lIGNwcF93YXJuX3ZhcmlhZGljX21hY3JvcyBnbG9iYWxfb3B0aW9ucy54X2NwcF93YXJuX3ZhcmlhZGljX21hY3JvcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl92ZWN0b3Jfb3BlcmF0aW9uX3BlcmZvcm1hbmNlOworI2Vsc2UKKyAgaW50IHhfd2Fybl92ZWN0b3Jfb3BlcmF0aW9uX3BlcmZvcm1hbmNlOworI2RlZmluZSB3YXJuX3ZlY3Rvcl9vcGVyYXRpb25fcGVyZm9ybWFuY2UgZ2xvYmFsX29wdGlvbnMueF93YXJuX3ZlY3Rvcl9vcGVyYXRpb25fcGVyZm9ybWFuY2UKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHdhcm5fdmlydHVhbF9tb3ZlX2Fzc2lnbjsKKyNlbHNlCisgIGludCB4X3dhcm5fdmlydHVhbF9tb3ZlX2Fzc2lnbjsKKyNkZWZpbmUgd2Fybl92aXJ0dWFsX21vdmVfYXNzaWduIGdsb2JhbF9vcHRpb25zLnhfd2Fybl92aXJ0dWFsX21vdmVfYXNzaWduCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3ZsYTsKKyNlbHNlCisgIGludCB4X3dhcm5fdmxhOworI2RlZmluZSB3YXJuX3ZsYSBnbG9iYWxfb3B0aW9ucy54X3dhcm5fdmxhCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3ZvbGF0aWxlX3JlZ2lzdGVyX3ZhcjsKKyNlbHNlCisgIGludCB4X3dhcm5fdm9sYXRpbGVfcmVnaXN0ZXJfdmFyOworI2RlZmluZSB3YXJuX3ZvbGF0aWxlX3JlZ2lzdGVyX3ZhciBnbG9iYWxfb3B0aW9ucy54X3dhcm5fdm9sYXRpbGVfcmVnaXN0ZXJfdmFyCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB3YXJuX3dyaXRlX3N0cmluZ3M7CisjZWxzZQorICBpbnQgeF93YXJuX3dyaXRlX3N0cmluZ3M7CisjZGVmaW5lIHdhcm5fd3JpdGVfc3RyaW5ncyBnbG9iYWxfb3B0aW9ucy54X3dhcm5fd3JpdGVfc3RyaW5ncworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgd2Fybl96ZXJvX2FzX251bGxfcG9pbnRlcl9jb25zdGFudDsKKyNlbHNlCisgIGludCB4X3dhcm5femVyb19hc19udWxsX3BvaW50ZXJfY29uc3RhbnQ7CisjZGVmaW5lIHdhcm5femVyb19hc19udWxsX3BvaW50ZXJfY29uc3RhbnQgZ2xvYmFsX29wdGlvbnMueF93YXJuX3plcm9fYXNfbnVsbF9wb2ludGVyX2NvbnN0YW50CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGNvbnN0IGNoYXIgKmF1eF9pbmZvX2ZpbGVfbmFtZTsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKnhfYXV4X2luZm9fZmlsZV9uYW1lOworI2RlZmluZSBhdXhfaW5mb19maWxlX25hbWUgZ2xvYmFsX29wdGlvbnMueF9hdXhfaW5mb19maWxlX25hbWUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqYXV4X2Jhc2VfbmFtZTsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKnhfYXV4X2Jhc2VfbmFtZTsKKyNkZWZpbmUgYXV4X2Jhc2VfbmFtZSBnbG9iYWxfb3B0aW9ucy54X2F1eF9iYXNlX25hbWUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqZHVtcF9iYXNlX25hbWU7CisjZWxzZQorICBjb25zdCBjaGFyICp4X2R1bXBfYmFzZV9uYW1lOworI2RlZmluZSBkdW1wX2Jhc2VfbmFtZSBnbG9iYWxfb3B0aW9ucy54X2R1bXBfYmFzZV9uYW1lCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGNvbnN0IGNoYXIgKmR1bXBfZGlyX25hbWU7CisjZWxzZQorICBjb25zdCBjaGFyICp4X2R1bXBfZGlyX25hbWU7CisjZGVmaW5lIGR1bXBfZGlyX25hbWUgZ2xvYmFsX29wdGlvbnMueF9kdW1wX2Rpcl9uYW1lCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3BpYzsKKyNlbHNlCisgIGludCB4X2ZsYWdfcGljOworI2RlZmluZSBmbGFnX3BpYyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcGljCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3BpZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfcGllOworI2RlZmluZSBmbGFnX3BpZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcGllCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2FiaV92ZXJzaW9uOworI2Vsc2UKKyAgaW50IHhfZmxhZ19hYmlfdmVyc2lvbjsKKyNkZWZpbmUgZmxhZ19hYmlfdmVyc2lvbiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfYWJpX3ZlcnNpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfYWNjZXNzX2NvbnRyb2w7CisjZWxzZQorICBpbnQgeF9mbGFnX2FjY2Vzc19jb250cm9sOworI2RlZmluZSBmbGFnX2FjY2Vzc19jb250cm9sIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19hY2Nlc3NfY29udHJvbAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBjb25zdCBjaGFyICphZGFfc3BlY3NfcGFyZW50OworI2Vsc2UKKyAgY29uc3QgY2hhciAqeF9hZGFfc3BlY3NfcGFyZW50OworI2RlZmluZSBhZGFfc3BlY3NfcGFyZW50IGdsb2JhbF9vcHRpb25zLnhfYWRhX3NwZWNzX3BhcmVudAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19hZ2dyZXNzaXZlX2xvb3Bfb3B0aW1pemF0aW9uczsKKyNlbHNlCisgIGludCB4X2ZsYWdfYWdncmVzc2l2ZV9sb29wX29wdGltaXphdGlvbnM7CisjZGVmaW5lIGZsYWdfYWdncmVzc2l2ZV9sb29wX29wdGltaXphdGlvbnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2FnZ3Jlc3NpdmVfbG9vcF9vcHRpbWl6YXRpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBhbGlnbl9mdW5jdGlvbnM7CisjZWxzZQorICBpbnQgeF9hbGlnbl9mdW5jdGlvbnM7CisjZGVmaW5lIGFsaWduX2Z1bmN0aW9ucyBnbG9iYWxfb3B0aW9ucy54X2FsaWduX2Z1bmN0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgYWxpZ25fanVtcHM7CisjZWxzZQorICBpbnQgeF9hbGlnbl9qdW1wczsKKyNkZWZpbmUgYWxpZ25fanVtcHMgZ2xvYmFsX29wdGlvbnMueF9hbGlnbl9qdW1wcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgYWxpZ25fbGFiZWxzOworI2Vsc2UKKyAgaW50IHhfYWxpZ25fbGFiZWxzOworI2RlZmluZSBhbGlnbl9sYWJlbHMgZ2xvYmFsX29wdGlvbnMueF9hbGlnbl9sYWJlbHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGFsaWduX2xvb3BzOworI2Vsc2UKKyAgaW50IHhfYWxpZ25fbG9vcHM7CisjZGVmaW5lIGFsaWduX2xvb3BzIGdsb2JhbF9vcHRpb25zLnhfYWxpZ25fbG9vcHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfYWxsb3dfcGFyYW1ldGVybGVzc192YXJpYWRpY19mdW5jdGlvbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX2FsbG93X3BhcmFtZXRlcmxlc3NfdmFyaWFkaWNfZnVuY3Rpb25zOworI2RlZmluZSBmbGFnX2FsbG93X3BhcmFtZXRlcmxlc3NfdmFyaWFkaWNfZnVuY3Rpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19hbGxvd19wYXJhbWV0ZXJsZXNzX3ZhcmlhZGljX2Z1bmN0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19ub19hc207CisjZWxzZQorICBpbnQgeF9mbGFnX25vX2FzbTsKKyNkZWZpbmUgZmxhZ19ub19hc20gZ2xvYmFsX29wdGlvbnMueF9mbGFnX25vX2FzbQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19hc3NlcnQ7CisjZWxzZQorICBpbnQgeF9mbGFnX2Fzc2VydDsKKyNkZWZpbmUgZmxhZ19hc3NlcnQgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2Fzc2VydAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19hc3NvY2lhdGl2ZV9tYXRoOworI2Vsc2UKKyAgaW50IHhfZmxhZ19hc3NvY2lhdGl2ZV9tYXRoOworI2RlZmluZSBmbGFnX2Fzc29jaWF0aXZlX21hdGggZ2xvYmFsX29wdGlvbnMueF9mbGFnX2Fzc29jaWF0aXZlX21hdGgKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfYXN5bmNocm9ub3VzX3Vud2luZF90YWJsZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX2FzeW5jaHJvbm91c191bndpbmRfdGFibGVzOworI2RlZmluZSBmbGFnX2FzeW5jaHJvbm91c191bndpbmRfdGFibGVzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19hc3luY2hyb25vdXNfdW53aW5kX3RhYmxlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19hdXRvX2luY19kZWM7CisjZWxzZQorICBpbnQgeF9mbGFnX2F1dG9faW5jX2RlYzsKKyNkZWZpbmUgZmxhZ19hdXRvX2luY19kZWMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2F1dG9faW5jX2RlYworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19ib290c3RyYXBfY2xhc3NlczsKKyNlbHNlCisgIGludCB4X2ZsYWdfYm9vdHN0cmFwX2NsYXNzZXM7CisjZGVmaW5lIGZsYWdfYm9vdHN0cmFwX2NsYXNzZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2Jvb3RzdHJhcF9jbGFzc2VzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2JvdW5kc19jaGVjazsKKyNlbHNlCisgIGludCB4X2ZsYWdfYm91bmRzX2NoZWNrOworI2RlZmluZSBmbGFnX2JvdW5kc19jaGVjayBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfYm91bmRzX2NoZWNrCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2JyYW5jaF9vbl9jb3VudF9yZWc7CisjZWxzZQorICBpbnQgeF9mbGFnX2JyYW5jaF9vbl9jb3VudF9yZWc7CisjZGVmaW5lIGZsYWdfYnJhbmNoX29uX2NvdW50X3JlZyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfYnJhbmNoX29uX2NvdW50X3JlZworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19icmFuY2hfcHJvYmFiaWxpdGllczsKKyNlbHNlCisgIGludCB4X2ZsYWdfYnJhbmNoX3Byb2JhYmlsaXRpZXM7CisjZGVmaW5lIGZsYWdfYnJhbmNoX3Byb2JhYmlsaXRpZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2JyYW5jaF9wcm9iYWJpbGl0aWVzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfYnJhbmNoX3RhcmdldF9sb2FkX29wdGltaXplOworI2RlZmluZSBmbGFnX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfYnJhbmNoX3RhcmdldF9sb2FkX29wdGltaXplCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTI7CisjZWxzZQorICBpbnQgeF9mbGFnX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTI7CisjZGVmaW5lIGZsYWdfYnJhbmNoX3RhcmdldF9sb2FkX29wdGltaXplMiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfYnJhbmNoX3RhcmdldF9sb2FkX29wdGltaXplMgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19idHJfYmJfZXhjbHVzaXZlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19idHJfYmJfZXhjbHVzaXZlOworI2RlZmluZSBmbGFnX2J0cl9iYl9leGNsdXNpdmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2J0cl9iYl9leGNsdXNpdmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfYnVpbGRpbmdfbGliZ2NjOworI2Vsc2UKKyAgaW50IHhfZmxhZ19idWlsZGluZ19saWJnY2M7CisjZGVmaW5lIGZsYWdfYnVpbGRpbmdfbGliZ2NjIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19idWlsZGluZ19saWJnY2MKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbm9fYnVpbHRpbjsKKyNlbHNlCisgIGludCB4X2ZsYWdfbm9fYnVpbHRpbjsKKyNkZWZpbmUgZmxhZ19ub19idWlsdGluIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19ub19idWlsdGluCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIHZvaWQgKmNvbW1vbl9kZWZlcnJlZF9vcHRpb25zOworI2Vsc2UKKyAgdm9pZCAqeF9jb21tb25fZGVmZXJyZWRfb3B0aW9uczsKKyNkZWZpbmUgY29tbW9uX2RlZmVycmVkX29wdGlvbnMgZ2xvYmFsX29wdGlvbnMueF9jb21tb25fZGVmZXJyZWRfb3B0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19jYWxsZXJfc2F2ZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX2NhbGxlcl9zYXZlczsKKyNkZWZpbmUgZmxhZ19jYWxsZXJfc2F2ZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2NhbGxlcl9zYXZlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19jaGVja19kYXRhX2RlcHM7CisjZWxzZQorICBpbnQgeF9mbGFnX2NoZWNrX2RhdGFfZGVwczsKKyNkZWZpbmUgZmxhZ19jaGVja19kYXRhX2RlcHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2NoZWNrX2RhdGFfZGVwcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19jaGVja19uZXc7CisjZWxzZQorICBpbnQgeF9mbGFnX2NoZWNrX25ldzsKKyNkZWZpbmUgZmxhZ19jaGVja19uZXcgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2NoZWNrX25ldworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19jaGVja19yZWZlcmVuY2VzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19jaGVja19yZWZlcmVuY2VzOworI2RlZmluZSBmbGFnX2NoZWNrX3JlZmVyZW5jZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2NoZWNrX3JlZmVyZW5jZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfY29tYmluZV9zdGFja19hZGp1c3RtZW50czsKKyNlbHNlCisgIGludCB4X2ZsYWdfY29tYmluZV9zdGFja19hZGp1c3RtZW50czsKKyNkZWZpbmUgZmxhZ19jb21iaW5lX3N0YWNrX2FkanVzdG1lbnRzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19jb21iaW5lX3N0YWNrX2FkanVzdG1lbnRzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX25vX2NvbW1vbjsKKyNlbHNlCisgIGludCB4X2ZsYWdfbm9fY29tbW9uOworI2RlZmluZSBmbGFnX25vX2NvbW1vbiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbm9fY29tbW9uCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2NvbXBhcmVfZGVidWc7CisjZWxzZQorICBpbnQgeF9mbGFnX2NvbXBhcmVfZGVidWc7CisjZGVmaW5lIGZsYWdfY29tcGFyZV9kZWJ1ZyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfY29tcGFyZV9kZWJ1ZworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBjb25zdCBjaGFyICpmbGFnX2NvbXBhcmVfZGVidWdfb3B0OworI2Vsc2UKKyAgY29uc3QgY2hhciAqeF9mbGFnX2NvbXBhcmVfZGVidWdfb3B0OworI2RlZmluZSBmbGFnX2NvbXBhcmVfZGVidWdfb3B0IGdsb2JhbF9vcHRpb25zLnhfZmxhZ19jb21wYXJlX2RlYnVnX29wdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19jb21wYXJlX2VsaW1fYWZ0ZXJfcmVsb2FkOworI2Vsc2UKKyAgaW50IHhfZmxhZ19jb21wYXJlX2VsaW1fYWZ0ZXJfcmVsb2FkOworI2RlZmluZSBmbGFnX2NvbXBhcmVfZWxpbV9hZnRlcl9yZWxvYWQgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2NvbXBhcmVfZWxpbV9hZnRlcl9yZWxvYWQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfY29uc2VydmVfc3BhY2U7CisjZWxzZQorICBpbnQgeF9mbGFnX2NvbnNlcnZlX3NwYWNlOworI2RlZmluZSBmbGFnX2NvbnNlcnZlX3NwYWNlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19jb25zZXJ2ZV9zcGFjZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19jb25zZXJ2ZV9zdGFjazsKKyNlbHNlCisgIGludCB4X2ZsYWdfY29uc2VydmVfc3RhY2s7CisjZGVmaW5lIGZsYWdfY29uc2VydmVfc3RhY2sgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2NvbnNlcnZlX3N0YWNrCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBtYXhfY29uc3RleHByX2RlcHRoOworI2Vsc2UKKyAgaW50IHhfbWF4X2NvbnN0ZXhwcl9kZXB0aDsKKyNkZWZpbmUgbWF4X2NvbnN0ZXhwcl9kZXB0aCBnbG9iYWxfb3B0aW9ucy54X21heF9jb25zdGV4cHJfZGVwdGgKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfY3Byb3BfcmVnaXN0ZXJzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19jcHJvcF9yZWdpc3RlcnM7CisjZGVmaW5lIGZsYWdfY3Byb3BfcmVnaXN0ZXJzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19jcHJvcF9yZWdpc3RlcnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfY3Jvc3NqdW1waW5nOworI2Vsc2UKKyAgaW50IHhfZmxhZ19jcm9zc2p1bXBpbmc7CisjZGVmaW5lIGZsYWdfY3Jvc3NqdW1waW5nIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19jcm9zc2p1bXBpbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfY3NlX2ZvbGxvd19qdW1wczsKKyNlbHNlCisgIGludCB4X2ZsYWdfY3NlX2ZvbGxvd19qdW1wczsKKyNkZWZpbmUgZmxhZ19jc2VfZm9sbG93X2p1bXBzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19jc2VfZm9sbG93X2p1bXBzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2N4X2ZvcnRyYW5fcnVsZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX2N4X2ZvcnRyYW5fcnVsZXM7CisjZGVmaW5lIGZsYWdfY3hfZm9ydHJhbl9ydWxlcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfY3hfZm9ydHJhbl9ydWxlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19jeF9saW1pdGVkX3JhbmdlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19jeF9saW1pdGVkX3JhbmdlOworI2RlZmluZSBmbGFnX2N4X2xpbWl0ZWRfcmFuZ2UgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2N4X2xpbWl0ZWRfcmFuZ2UKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZGF0YV9zZWN0aW9uczsKKyNlbHNlCisgIGludCB4X2ZsYWdfZGF0YV9zZWN0aW9uczsKKyNkZWZpbmUgZmxhZ19kYXRhX3NlY3Rpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kYXRhX3NlY3Rpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2RjZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfZGNlOworI2RlZmluZSBmbGFnX2RjZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZGNlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2RlYnVnX3R5cGVzX3NlY3Rpb247CisjZWxzZQorICBpbnQgeF9mbGFnX2RlYnVnX3R5cGVzX3NlY3Rpb247CisjZGVmaW5lIGZsYWdfZGVidWdfdHlwZXNfc2VjdGlvbiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZGVidWdfdHlwZXNfc2VjdGlvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19kZWR1Y2VfaW5pdF9saXN0OworI2Vsc2UKKyAgaW50IHhfZmxhZ19kZWR1Y2VfaW5pdF9saXN0OworI2RlZmluZSBmbGFnX2RlZHVjZV9pbml0X2xpc3QgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2RlZHVjZV9pbml0X2xpc3QKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZGVmZXJfcG9wOworI2Vsc2UKKyAgaW50IHhfZmxhZ19kZWZlcl9wb3A7CisjZGVmaW5lIGZsYWdfZGVmZXJfcG9wIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kZWZlcl9wb3AKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZGVsYXllZF9icmFuY2g7CisjZWxzZQorICBpbnQgeF9mbGFnX2RlbGF5ZWRfYnJhbmNoOworI2RlZmluZSBmbGFnX2RlbGF5ZWRfYnJhbmNoIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kZWxheWVkX2JyYW5jaAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19kZWxldGVfZGVhZF9leGNlcHRpb25zOworI2Vsc2UKKyAgaW50IHhfZmxhZ19kZWxldGVfZGVhZF9leGNlcHRpb25zOworI2RlZmluZSBmbGFnX2RlbGV0ZV9kZWFkX2V4Y2VwdGlvbnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2RlbGV0ZV9kZWFkX2V4Y2VwdGlvbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3M7CisjZWxzZQorICBpbnQgeF9mbGFnX2RlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzOworI2RlZmluZSBmbGFnX2RlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19kZXZpcnR1YWxpemU7CisjZWxzZQorICBpbnQgeF9mbGFnX2RldmlydHVhbGl6ZTsKKyNkZWZpbmUgZmxhZ19kZXZpcnR1YWxpemUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2RldmlydHVhbGl6ZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19kaWFnbm9zdGljc19zaG93X2NhcmV0OworI2Vsc2UKKyAgaW50IHhfZmxhZ19kaWFnbm9zdGljc19zaG93X2NhcmV0OworI2RlZmluZSBmbGFnX2RpYWdub3N0aWNzX3Nob3dfY2FyZXQgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2RpYWdub3N0aWNzX3Nob3dfY2FyZXQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZGlhZ25vc3RpY3Nfc2hvd19vcHRpb247CisjZWxzZQorICBpbnQgeF9mbGFnX2RpYWdub3N0aWNzX3Nob3dfb3B0aW9uOworI2RlZmluZSBmbGFnX2RpYWdub3N0aWNzX3Nob3dfb3B0aW9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kaWFnbm9zdGljc19zaG93X29wdGlvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19kc2U7CisjZWxzZQorICBpbnQgeF9mbGFnX2RzZTsKKyNkZWZpbmUgZmxhZ19kc2UgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2RzZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19kdW1wX2FkYV9zcGVjOworI2Vsc2UKKyAgaW50IHhfZmxhZ19kdW1wX2FkYV9zcGVjOworI2RlZmluZSBmbGFnX2R1bXBfYWRhX3NwZWMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2R1bXBfYWRhX3NwZWMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZHVtcF9hZGFfc3BlY19zbGltOworI2Vsc2UKKyAgaW50IHhfZmxhZ19kdW1wX2FkYV9zcGVjX3NsaW07CisjZGVmaW5lIGZsYWdfZHVtcF9hZGFfc3BlY19zbGltIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kdW1wX2FkYV9zcGVjX3NsaW0KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqZmxhZ19kdW1wX2ZpbmFsX2luc25zOworI2Vsc2UKKyAgY29uc3QgY2hhciAqeF9mbGFnX2R1bXBfZmluYWxfaW5zbnM7CisjZGVmaW5lIGZsYWdfZHVtcF9maW5hbF9pbnNucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZHVtcF9maW5hbF9pbnNucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBjb25zdCBjaGFyICpmbGFnX2R1bXBfZ29fc3BlYzsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKnhfZmxhZ19kdW1wX2dvX3NwZWM7CisjZGVmaW5lIGZsYWdfZHVtcF9nb19zcGVjIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kdW1wX2dvX3NwZWMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZHVtcF9ub2FkZHI7CisjZWxzZQorICBpbnQgeF9mbGFnX2R1bXBfbm9hZGRyOworI2RlZmluZSBmbGFnX2R1bXBfbm9hZGRyIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kdW1wX25vYWRkcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19kdW1wX3Bhc3NlczsKKyNlbHNlCisgIGludCB4X2ZsYWdfZHVtcF9wYXNzZXM7CisjZGVmaW5lIGZsYWdfZHVtcF9wYXNzZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2R1bXBfcGFzc2VzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2R1bXBfdW5udW1iZXJlZDsKKyNlbHNlCisgIGludCB4X2ZsYWdfZHVtcF91bm51bWJlcmVkOworI2RlZmluZSBmbGFnX2R1bXBfdW5udW1iZXJlZCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZHVtcF91bm51bWJlcmVkCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2R1bXBfdW5udW1iZXJlZF9saW5rczsKKyNlbHNlCisgIGludCB4X2ZsYWdfZHVtcF91bm51bWJlcmVkX2xpbmtzOworI2RlZmluZSBmbGFnX2R1bXBfdW5udW1iZXJlZF9saW5rcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZHVtcF91bm51bWJlcmVkX2xpbmtzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2R3YXJmMl9jZmlfYXNtOworI2Vsc2UKKyAgaW50IHhfZmxhZ19kd2FyZjJfY2ZpX2FzbTsKKyNkZWZpbmUgZmxhZ19kd2FyZjJfY2ZpX2FzbSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZHdhcmYyX2NmaV9hc20KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZWFybHlfaW5saW5pbmc7CisjZWxzZQorICBpbnQgeF9mbGFnX2Vhcmx5X2lubGluaW5nOworI2RlZmluZSBmbGFnX2Vhcmx5X2lubGluaW5nIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19lYXJseV9pbmxpbmluZworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19lbGlkZV9jb25zdHJ1Y3RvcnM7CisjZWxzZQorICBpbnQgeF9mbGFnX2VsaWRlX2NvbnN0cnVjdG9yczsKKyNkZWZpbmUgZmxhZ19lbGlkZV9jb25zdHJ1Y3RvcnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2VsaWRlX2NvbnN0cnVjdG9ycworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19lbGltaW5hdGVfZHdhcmYyX2R1cHM7CisjZWxzZQorICBpbnQgeF9mbGFnX2VsaW1pbmF0ZV9kd2FyZjJfZHVwczsKKyNkZWZpbmUgZmxhZ19lbGltaW5hdGVfZHdhcmYyX2R1cHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2VsaW1pbmF0ZV9kd2FyZjJfZHVwcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19kZWJ1Z19vbmx5X3VzZWRfc3ltYm9sczsKKyNlbHNlCisgIGludCB4X2ZsYWdfZGVidWdfb25seV91c2VkX3N5bWJvbHM7CisjZGVmaW5lIGZsYWdfZGVidWdfb25seV91c2VkX3N5bWJvbHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2RlYnVnX29ubHlfdXNlZF9zeW1ib2xzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2VsaW1pbmF0ZV91bnVzZWRfZGVidWdfdHlwZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX2VsaW1pbmF0ZV91bnVzZWRfZGVidWdfdHlwZXM7CisjZGVmaW5lIGZsYWdfZWxpbWluYXRlX3VudXNlZF9kZWJ1Z190eXBlcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZWxpbWluYXRlX3VudXNlZF9kZWJ1Z190eXBlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19lbWl0X2NsYXNzX2RlYnVnX2Fsd2F5czsKKyNlbHNlCisgIGludCB4X2ZsYWdfZW1pdF9jbGFzc19kZWJ1Z19hbHdheXM7CisjZGVmaW5lIGZsYWdfZW1pdF9jbGFzc19kZWJ1Z19hbHdheXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2VtaXRfY2xhc3NfZGVidWdfYWx3YXlzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2VtaXRfY2xhc3NfZmlsZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX2VtaXRfY2xhc3NfZmlsZXM7CisjZGVmaW5lIGZsYWdfZW1pdF9jbGFzc19maWxlcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZW1pdF9jbGFzc19maWxlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19lbmZvcmNlX2VoX3NwZWNzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19lbmZvcmNlX2VoX3NwZWNzOworI2RlZmluZSBmbGFnX2VuZm9yY2VfZWhfc3BlY3MgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2VuZm9yY2VfZWhfc3BlY3MKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZXhjZXB0aW9uczsKKyNlbHNlCisgIGludCB4X2ZsYWdfZXhjZXB0aW9uczsKKyNkZWZpbmUgZmxhZ19leGNlcHRpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19leGNlcHRpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGVudW0gZXhjZXNzX3ByZWNpc2lvbiBmbGFnX2V4Y2Vzc19wcmVjaXNpb25fY21kbGluZTsKKyNlbHNlCisgIGVudW0gZXhjZXNzX3ByZWNpc2lvbiB4X2ZsYWdfZXhjZXNzX3ByZWNpc2lvbl9jbWRsaW5lOworI2RlZmluZSBmbGFnX2V4Y2Vzc19wcmVjaXNpb25fY21kbGluZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZXhjZXNzX3ByZWNpc2lvbl9jbWRsaW5lCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2V4cGVuc2l2ZV9vcHRpbWl6YXRpb25zOworI2Vsc2UKKyAgaW50IHhfZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0aW9uczsKKyNkZWZpbmUgZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0aW9ucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZXhwZW5zaXZlX29wdGltaXphdGlvbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZXh0ZXJuX3Rsc19pbml0OworI2Vsc2UKKyAgaW50IHhfZmxhZ19leHRlcm5fdGxzX2luaXQ7CisjZGVmaW5lIGZsYWdfZXh0ZXJuX3Rsc19pbml0IGdsb2JhbF9vcHRpb25zLnhfZmxhZ19leHRlcm5fdGxzX2luaXQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZmF0X2x0b19vYmplY3RzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19mYXRfbHRvX29iamVjdHM7CisjZGVmaW5lIGZsYWdfZmF0X2x0b19vYmplY3RzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19mYXRfbHRvX29iamVjdHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZmlsZWxpc3RfZmlsZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfZmlsZWxpc3RfZmlsZTsKKyNkZWZpbmUgZmxhZ19maWxlbGlzdF9maWxlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19maWxlbGlzdF9maWxlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2Zpbml0ZV9tYXRoX29ubHk7CisjZWxzZQorICBpbnQgeF9mbGFnX2Zpbml0ZV9tYXRoX29ubHk7CisjZGVmaW5lIGZsYWdfZmluaXRlX21hdGhfb25seSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZmluaXRlX21hdGhfb25seQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19mbG9hdF9zdG9yZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfZmxvYXRfc3RvcmU7CisjZGVmaW5lIGZsYWdfZmxvYXRfc3RvcmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2Zsb2F0X3N0b3JlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX25ld19mb3Jfc2NvcGU7CisjZWxzZQorICBpbnQgeF9mbGFnX25ld19mb3Jfc2NvcGU7CisjZGVmaW5lIGZsYWdfbmV3X2Zvcl9zY29wZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbmV3X2Zvcl9zY29wZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19mb3JjZV9jbGFzc2VzX2FyY2hpdmVfY2hlY2s7CisjZWxzZQorICBpbnQgeF9mbGFnX2ZvcmNlX2NsYXNzZXNfYXJjaGl2ZV9jaGVjazsKKyNkZWZpbmUgZmxhZ19mb3JjZV9jbGFzc2VzX2FyY2hpdmVfY2hlY2sgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2ZvcmNlX2NsYXNzZXNfYXJjaGl2ZV9jaGVjaworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19mb3J3YXJkX3Byb3BhZ2F0ZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfZm9yd2FyZF9wcm9wYWdhdGU7CisjZGVmaW5lIGZsYWdfZm9yd2FyZF9wcm9wYWdhdGUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2ZvcndhcmRfcHJvcGFnYXRlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGVudW0gZnBfY29udHJhY3RfbW9kZSBmbGFnX2ZwX2NvbnRyYWN0X21vZGU7CisjZWxzZQorICBlbnVtIGZwX2NvbnRyYWN0X21vZGUgeF9mbGFnX2ZwX2NvbnRyYWN0X21vZGU7CisjZGVmaW5lIGZsYWdfZnBfY29udHJhY3RfbW9kZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZnBfY29udHJhY3RfbW9kZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19mcmllbmRfaW5qZWN0aW9uOworI2Vsc2UKKyAgaW50IHhfZmxhZ19mcmllbmRfaW5qZWN0aW9uOworI2RlZmluZSBmbGFnX2ZyaWVuZF9pbmplY3Rpb24gZ2xvYmFsX29wdGlvbnMueF9mbGFnX2ZyaWVuZF9pbmplY3Rpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbm9fZnVuY3Rpb25fY3NlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19ub19mdW5jdGlvbl9jc2U7CisjZGVmaW5lIGZsYWdfbm9fZnVuY3Rpb25fY3NlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19ub19mdW5jdGlvbl9jc2UKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZnVuY3Rpb25fc2VjdGlvbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX2Z1bmN0aW9uX3NlY3Rpb25zOworI2RlZmluZSBmbGFnX2Z1bmN0aW9uX3NlY3Rpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19mdW5jdGlvbl9zZWN0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19nY3NlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19nY3NlOworI2RlZmluZSBmbGFnX2djc2UgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2djc2UKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZ2NzZV9hZnRlcl9yZWxvYWQ7CisjZWxzZQorICBpbnQgeF9mbGFnX2djc2VfYWZ0ZXJfcmVsb2FkOworI2RlZmluZSBmbGFnX2djc2VfYWZ0ZXJfcmVsb2FkIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19nY3NlX2FmdGVyX3JlbG9hZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19nY3NlX2xhczsKKyNlbHNlCisgIGludCB4X2ZsYWdfZ2NzZV9sYXM7CisjZGVmaW5lIGZsYWdfZ2NzZV9sYXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2djc2VfbGFzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2djc2VfbG07CisjZWxzZQorICBpbnQgeF9mbGFnX2djc2VfbG07CisjZGVmaW5lIGZsYWdfZ2NzZV9sbSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZ2NzZV9sbQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19nY3NlX3NtOworI2Vsc2UKKyAgaW50IHhfZmxhZ19nY3NlX3NtOworI2RlZmluZSBmbGFnX2djc2Vfc20gZ2xvYmFsX29wdGlvbnMueF9mbGFnX2djc2Vfc20KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbm9fZ251X2tleXdvcmRzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19ub19nbnVfa2V5d29yZHM7CisjZGVmaW5lIGZsYWdfbm9fZ251X2tleXdvcmRzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19ub19nbnVfa2V5d29yZHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbmV4dF9ydW50aW1lOworI2Vsc2UKKyAgaW50IHhfZmxhZ19uZXh0X3J1bnRpbWU7CisjZGVmaW5lIGZsYWdfbmV4dF9ydW50aW1lIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19uZXh0X3J1bnRpbWUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdG07CisjZWxzZQorICBpbnQgeF9mbGFnX3RtOworI2RlZmluZSBmbGFnX3RtIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190bQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19nbnU4OV9pbmxpbmU7CisjZWxzZQorICBpbnQgeF9mbGFnX2dudTg5X2lubGluZTsKKyNkZWZpbmUgZmxhZ19nbnU4OV9pbmxpbmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2dudTg5X2lubGluZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZ29fY2hlY2tfZGl2aWRlX292ZXJmbG93OworI2Vsc2UKKyAgaW50IHhfZ29fY2hlY2tfZGl2aWRlX292ZXJmbG93OworI2RlZmluZSBnb19jaGVja19kaXZpZGVfb3ZlcmZsb3cgZ2xvYmFsX29wdGlvbnMueF9nb19jaGVja19kaXZpZGVfb3ZlcmZsb3cKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGdvX2NoZWNrX2RpdmlkZV96ZXJvOworI2Vsc2UKKyAgaW50IHhfZ29fY2hlY2tfZGl2aWRlX3plcm87CisjZGVmaW5lIGdvX2NoZWNrX2RpdmlkZV96ZXJvIGdsb2JhbF9vcHRpb25zLnhfZ29fY2hlY2tfZGl2aWRlX3plcm8KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZ3JhcGhpdGU7CisjZWxzZQorICBpbnQgeF9mbGFnX2dyYXBoaXRlOworI2RlZmluZSBmbGFnX2dyYXBoaXRlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19ncmFwaGl0ZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19ncmFwaGl0ZV9pZGVudGl0eTsKKyNlbHNlCisgIGludCB4X2ZsYWdfZ3JhcGhpdGVfaWRlbnRpdHk7CisjZGVmaW5lIGZsYWdfZ3JhcGhpdGVfaWRlbnRpdHkgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2dyYXBoaXRlX2lkZW50aXR5CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2d1ZXNzX2JyYW5jaF9wcm9iOworI2Vsc2UKKyAgaW50IHhfZmxhZ19ndWVzc19icmFuY2hfcHJvYjsKKyNkZWZpbmUgZmxhZ19ndWVzc19icmFuY2hfcHJvYiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfZ3Vlc3NfYnJhbmNoX3Byb2IKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaGFzaF9zeW5jaHJvbml6YXRpb247CisjZWxzZQorICBpbnQgeF9mbGFnX2hhc2hfc3luY2hyb25pemF0aW9uOworI2RlZmluZSBmbGFnX2hhc2hfc3luY2hyb25pemF0aW9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19oYXNoX3N5bmNocm9uaXphdGlvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19ob2lzdF9hZGphY2VudF9sb2FkczsKKyNlbHNlCisgIGludCB4X2ZsYWdfaG9pc3RfYWRqYWNlbnRfbG9hZHM7CisjZGVmaW5lIGZsYWdfaG9pc3RfYWRqYWNlbnRfbG9hZHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2hvaXN0X2FkamFjZW50X2xvYWRzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX25vX2lkZW50OworI2Vsc2UKKyAgaW50IHhfZmxhZ19ub19pZGVudDsKKyNkZWZpbmUgZmxhZ19ub19pZGVudCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbm9faWRlbnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaWZfY29udmVyc2lvbjsKKyNlbHNlCisgIGludCB4X2ZsYWdfaWZfY29udmVyc2lvbjsKKyNkZWZpbmUgZmxhZ19pZl9jb252ZXJzaW9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pZl9jb252ZXJzaW9uCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2lmX2NvbnZlcnNpb24yOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pZl9jb252ZXJzaW9uMjsKKyNkZWZpbmUgZmxhZ19pZl9jb252ZXJzaW9uMiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaWZfY29udmVyc2lvbjIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaW1wbGVtZW50X2lubGluZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX2ltcGxlbWVudF9pbmxpbmVzOworI2RlZmluZSBmbGFnX2ltcGxlbWVudF9pbmxpbmVzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pbXBsZW1lbnRfaW5saW5lcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pbXBsaWNpdF9pbmxpbmVfdGVtcGxhdGVzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pbXBsaWNpdF9pbmxpbmVfdGVtcGxhdGVzOworI2RlZmluZSBmbGFnX2ltcGxpY2l0X2lubGluZV90ZW1wbGF0ZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2ltcGxpY2l0X2lubGluZV90ZW1wbGF0ZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaW1wbGljaXRfdGVtcGxhdGVzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pbXBsaWNpdF90ZW1wbGF0ZXM7CisjZGVmaW5lIGZsYWdfaW1wbGljaXRfdGVtcGxhdGVzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pbXBsaWNpdF90ZW1wbGF0ZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaW5kaXJlY3RfY2xhc3NlczsKKyNlbHNlCisgIGludCB4X2ZsYWdfaW5kaXJlY3RfY2xhc3NlczsKKyNkZWZpbmUgZmxhZ19pbmRpcmVjdF9jbGFzc2VzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pbmRpcmVjdF9jbGFzc2VzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2luZGlyZWN0X2Rpc3BhdGNoOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pbmRpcmVjdF9kaXNwYXRjaDsKKyNkZWZpbmUgZmxhZ19pbmRpcmVjdF9kaXNwYXRjaCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaW5kaXJlY3RfZGlzcGF0Y2gKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaW5kaXJlY3RfaW5saW5pbmc7CisjZWxzZQorICBpbnQgeF9mbGFnX2luZGlyZWN0X2lubGluaW5nOworI2RlZmluZSBmbGFnX2luZGlyZWN0X2lubGluaW5nIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pbmRpcmVjdF9pbmxpbmluZworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlOworI2RlZmluZSBmbGFnX2luaGliaXRfc2l6ZV9kaXJlY3RpdmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2luaGliaXRfc2l6ZV9kaXJlY3RpdmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbm9faW5saW5lOworI2Vsc2UKKyAgaW50IHhfZmxhZ19ub19pbmxpbmU7CisjZGVmaW5lIGZsYWdfbm9faW5saW5lIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19ub19pbmxpbmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaW5saW5lX2F0b21pY3M7CisjZWxzZQorICBpbnQgeF9mbGFnX2lubGluZV9hdG9taWNzOworI2RlZmluZSBmbGFnX2lubGluZV9hdG9taWNzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pbmxpbmVfYXRvbWljcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pbmxpbmVfZnVuY3Rpb25zOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pbmxpbmVfZnVuY3Rpb25zOworI2RlZmluZSBmbGFnX2lubGluZV9mdW5jdGlvbnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2lubGluZV9mdW5jdGlvbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaW5saW5lX2Z1bmN0aW9uc19jYWxsZWRfb25jZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfaW5saW5lX2Z1bmN0aW9uc19jYWxsZWRfb25jZTsKKyNkZWZpbmUgZmxhZ19pbmxpbmVfZnVuY3Rpb25zX2NhbGxlZF9vbmNlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pbmxpbmVfZnVuY3Rpb25zX2NhbGxlZF9vbmNlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2lubGluZV9zbWFsbF9mdW5jdGlvbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX2lubGluZV9zbWFsbF9mdW5jdGlvbnM7CisjZGVmaW5lIGZsYWdfaW5saW5lX3NtYWxsX2Z1bmN0aW9ucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaW5saW5lX3NtYWxsX2Z1bmN0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQ7CisjZWxzZQorICBpbnQgeF9mbGFnX2luc3RydW1lbnRfZnVuY3Rpb25fZW50cnlfZXhpdDsKKyNkZWZpbmUgZmxhZ19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2luc3RydW1lbnRfZnVuY3Rpb25fZW50cnlfZXhpdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pcGFfY3A7CisjZWxzZQorICBpbnQgeF9mbGFnX2lwYV9jcDsKKyNkZWZpbmUgZmxhZ19pcGFfY3AgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2lwYV9jcAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pcGFfY3BfY2xvbmU7CisjZWxzZQorICBpbnQgeF9mbGFnX2lwYV9jcF9jbG9uZTsKKyNkZWZpbmUgZmxhZ19pcGFfY3BfY2xvbmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2lwYV9jcF9jbG9uZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pcGFfcHJvZmlsZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfaXBhX3Byb2ZpbGU7CisjZGVmaW5lIGZsYWdfaXBhX3Byb2ZpbGUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2lwYV9wcm9maWxlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2lwYV9wdGE7CisjZWxzZQorICBpbnQgeF9mbGFnX2lwYV9wdGE7CisjZGVmaW5lIGZsYWdfaXBhX3B0YSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaXBhX3B0YQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pcGFfcHVyZV9jb25zdDsKKyNlbHNlCisgIGludCB4X2ZsYWdfaXBhX3B1cmVfY29uc3Q7CisjZGVmaW5lIGZsYWdfaXBhX3B1cmVfY29uc3QgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2lwYV9wdXJlX2NvbnN0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2lwYV9yZWZlcmVuY2U7CisjZWxzZQorICBpbnQgeF9mbGFnX2lwYV9yZWZlcmVuY2U7CisjZGVmaW5lIGZsYWdfaXBhX3JlZmVyZW5jZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaXBhX3JlZmVyZW5jZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pcGFfc3JhOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pcGFfc3JhOworI2RlZmluZSBmbGFnX2lwYV9zcmEgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2lwYV9zcmEKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gZW51bSBpcmFfYWxnb3JpdGhtIGZsYWdfaXJhX2FsZ29yaXRobTsKKyNlbHNlCisgIGVudW0gaXJhX2FsZ29yaXRobSB4X2ZsYWdfaXJhX2FsZ29yaXRobTsKKyNkZWZpbmUgZmxhZ19pcmFfYWxnb3JpdGhtIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pcmFfYWxnb3JpdGhtCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2lyYV9ob2lzdF9wcmVzc3VyZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfaXJhX2hvaXN0X3ByZXNzdXJlOworI2RlZmluZSBmbGFnX2lyYV9ob2lzdF9wcmVzc3VyZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaXJhX2hvaXN0X3ByZXNzdXJlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2lyYV9sb29wX3ByZXNzdXJlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pcmFfbG9vcF9wcmVzc3VyZTsKKyNkZWZpbmUgZmxhZ19pcmFfbG9vcF9wcmVzc3VyZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaXJhX2xvb3BfcHJlc3N1cmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gZW51bSBpcmFfcmVnaW9uIGZsYWdfaXJhX3JlZ2lvbjsKKyNlbHNlCisgIGVudW0gaXJhX3JlZ2lvbiB4X2ZsYWdfaXJhX3JlZ2lvbjsKKyNkZWZpbmUgZmxhZ19pcmFfcmVnaW9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pcmFfcmVnaW9uCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2lyYV9zaGFyZV9zYXZlX3Nsb3RzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pcmFfc2hhcmVfc2F2ZV9zbG90czsKKyNkZWZpbmUgZmxhZ19pcmFfc2hhcmVfc2F2ZV9zbG90cyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfaXJhX3NoYXJlX3NhdmVfc2xvdHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaXJhX3NoYXJlX3NwaWxsX3Nsb3RzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19pcmFfc2hhcmVfc3BpbGxfc2xvdHM7CisjZGVmaW5lIGZsYWdfaXJhX3NoYXJlX3NwaWxsX3Nsb3RzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pcmFfc2hhcmVfc3BpbGxfc2xvdHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfaXJhX3ZlcmJvc2U7CisjZWxzZQorICBpbnQgeF9mbGFnX2lyYV92ZXJib3NlOworI2RlZmluZSBmbGFnX2lyYV92ZXJib3NlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19pcmFfdmVyYm9zZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19pdm9wdHM7CisjZWxzZQorICBpbnQgeF9mbGFnX2l2b3B0czsKKyNkZWZpbmUgZmxhZ19pdm9wdHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2l2b3B0cworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19qbmk7CisjZWxzZQorICBpbnQgeF9mbGFnX2puaTsKKyNkZWZpbmUgZmxhZ19qbmkgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2puaQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19qdW1wX3RhYmxlczsKKyNlbHNlCisgIGludCB4X2ZsYWdfanVtcF90YWJsZXM7CisjZGVmaW5lIGZsYWdfanVtcF90YWJsZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2p1bXBfdGFibGVzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2tlZXBfaW5saW5lX2RsbGV4cG9ydDsKKyNlbHNlCisgIGludCB4X2ZsYWdfa2VlcF9pbmxpbmVfZGxsZXhwb3J0OworI2RlZmluZSBmbGFnX2tlZXBfaW5saW5lX2RsbGV4cG9ydCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfa2VlcF9pbmxpbmVfZGxsZXhwb3J0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9uczsKKyNlbHNlCisgIGludCB4X2ZsYWdfa2VlcF9pbmxpbmVfZnVuY3Rpb25zOworI2RlZmluZSBmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfa2VlcF9pbmxpbmVfZnVuY3Rpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2tlZXBfc3RhdGljX2NvbnN0czsKKyNlbHNlCisgIGludCB4X2ZsYWdfa2VlcF9zdGF0aWNfY29uc3RzOworI2RlZmluZSBmbGFnX2tlZXBfc3RhdGljX2NvbnN0cyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfa2VlcF9zdGF0aWNfY29uc3RzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2xheF92ZWN0b3JfY29udmVyc2lvbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX2xheF92ZWN0b3JfY29udmVyc2lvbnM7CisjZGVmaW5lIGZsYWdfbGF4X3ZlY3Rvcl9jb252ZXJzaW9ucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbGF4X3ZlY3Rvcl9jb252ZXJzaW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19sZWFkaW5nX3VuZGVyc2NvcmU7CisjZWxzZQorICBpbnQgeF9mbGFnX2xlYWRpbmdfdW5kZXJzY29yZTsKKyNkZWZpbmUgZmxhZ19sZWFkaW5nX3VuZGVyc2NvcmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2xlYWRpbmdfdW5kZXJzY29yZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19sb29wX2Jsb2NrOworI2Vsc2UKKyAgaW50IHhfZmxhZ19sb29wX2Jsb2NrOworI2RlZmluZSBmbGFnX2xvb3BfYmxvY2sgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2xvb3BfYmxvY2sKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbG9vcF9pbnRlcmNoYW5nZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfbG9vcF9pbnRlcmNoYW5nZTsKKyNkZWZpbmUgZmxhZ19sb29wX2ludGVyY2hhbmdlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19sb29wX2ludGVyY2hhbmdlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2xvb3Bfb3B0aW1pemVfaXNsOworI2Vsc2UKKyAgaW50IHhfZmxhZ19sb29wX29wdGltaXplX2lzbDsKKyNkZWZpbmUgZmxhZ19sb29wX29wdGltaXplX2lzbCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbG9vcF9vcHRpbWl6ZV9pc2wKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbG9vcF9wYXJhbGxlbGl6ZV9hbGw7CisjZWxzZQorICBpbnQgeF9mbGFnX2xvb3BfcGFyYWxsZWxpemVfYWxsOworI2RlZmluZSBmbGFnX2xvb3BfcGFyYWxsZWxpemVfYWxsIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19sb29wX3BhcmFsbGVsaXplX2FsbAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19sb29wX3N0cmlwX21pbmU7CisjZWxzZQorICBpbnQgeF9mbGFnX2xvb3Bfc3RyaXBfbWluZTsKKyNkZWZpbmUgZmxhZ19sb29wX3N0cmlwX21pbmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2xvb3Bfc3RyaXBfbWluZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19sdG9fY29tcHJlc3Npb25fbGV2ZWw7CisjZWxzZQorICBpbnQgeF9mbGFnX2x0b19jb21wcmVzc2lvbl9sZXZlbDsKKyNkZWZpbmUgZmxhZ19sdG9fY29tcHJlc3Npb25fbGV2ZWwgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2x0b19jb21wcmVzc2lvbl9sZXZlbAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19sdG9fcGFydGl0aW9uXzF0bzE7CisjZWxzZQorICBpbnQgeF9mbGFnX2x0b19wYXJ0aXRpb25fMXRvMTsKKyNkZWZpbmUgZmxhZ19sdG9fcGFydGl0aW9uXzF0bzEgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2x0b19wYXJ0aXRpb25fMXRvMQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19sdG9fcGFydGl0aW9uX2JhbGFuY2VkOworI2Vsc2UKKyAgaW50IHhfZmxhZ19sdG9fcGFydGl0aW9uX2JhbGFuY2VkOworI2RlZmluZSBmbGFnX2x0b19wYXJ0aXRpb25fYmFsYW5jZWQgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2x0b19wYXJ0aXRpb25fYmFsYW5jZWQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbHRvX3BhcnRpdGlvbl9tYXg7CisjZWxzZQorICBpbnQgeF9mbGFnX2x0b19wYXJ0aXRpb25fbWF4OworI2RlZmluZSBmbGFnX2x0b19wYXJ0aXRpb25fbWF4IGdsb2JhbF9vcHRpb25zLnhfZmxhZ19sdG9fcGFydGl0aW9uX21heAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19sdG9fcGFydGl0aW9uX25vbmU7CisjZWxzZQorICBpbnQgeF9mbGFnX2x0b19wYXJ0aXRpb25fbm9uZTsKKyNkZWZpbmUgZmxhZ19sdG9fcGFydGl0aW9uX25vbmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2x0b19wYXJ0aXRpb25fbm9uZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19sdG9fcmVwb3J0OworI2Vsc2UKKyAgaW50IHhfZmxhZ19sdG9fcmVwb3J0OworI2RlZmluZSBmbGFnX2x0b19yZXBvcnQgZ2xvYmFsX29wdGlvbnMueF9mbGFnX2x0b19yZXBvcnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqZmxhZ19sdG87CisjZWxzZQorICBjb25zdCBjaGFyICp4X2ZsYWdfbHRvOworI2RlZmluZSBmbGFnX2x0byBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbHRvCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX2x0cmFuczsKKyNlbHNlCisgIGludCB4X2ZsYWdfbHRyYW5zOworI2RlZmluZSBmbGFnX2x0cmFucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbHRyYW5zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGNvbnN0IGNoYXIgKmx0cmFuc19vdXRwdXRfbGlzdDsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKnhfbHRyYW5zX291dHB1dF9saXN0OworI2RlZmluZSBsdHJhbnNfb3V0cHV0X2xpc3QgZ2xvYmFsX29wdGlvbnMueF9sdHJhbnNfb3V0cHV0X2xpc3QKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZXJybm9fbWF0aDsKKyNlbHNlCisgIGludCB4X2ZsYWdfZXJybm9fbWF0aDsKKyNkZWZpbmUgZmxhZ19lcnJub19tYXRoIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19lcnJub19tYXRoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX21heF9lcnJvcnM7CisjZWxzZQorICBpbnQgeF9mbGFnX21heF9lcnJvcnM7CisjZGVmaW5lIGZsYWdfbWF4X2Vycm9ycyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbWF4X2Vycm9ycworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgbWVtX3JlcG9ydDsKKyNlbHNlCisgIGludCB4X21lbV9yZXBvcnQ7CisjZGVmaW5lIG1lbV9yZXBvcnQgZ2xvYmFsX29wdGlvbnMueF9tZW1fcmVwb3J0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBtZW1fcmVwb3J0X3dwYTsKKyNlbHNlCisgIGludCB4X21lbV9yZXBvcnRfd3BhOworI2RlZmluZSBtZW1fcmVwb3J0X3dwYSBnbG9iYWxfb3B0aW9ucy54X21lbV9yZXBvcnRfd3BhCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX21lcmdlX2NvbnN0YW50czsKKyNlbHNlCisgIGludCB4X2ZsYWdfbWVyZ2VfY29uc3RhbnRzOworI2RlZmluZSBmbGFnX21lcmdlX2NvbnN0YW50cyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbWVyZ2VfY29uc3RhbnRzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX21lcmdlX2RlYnVnX3N0cmluZ3M7CisjZWxzZQorICBpbnQgeF9mbGFnX21lcmdlX2RlYnVnX3N0cmluZ3M7CisjZGVmaW5lIGZsYWdfbWVyZ2VfZGVidWdfc3RyaW5ncyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbWVyZ2VfZGVidWdfc3RyaW5ncworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19tb2R1bG9fc2NoZWQ7CisjZWxzZQorICBpbnQgeF9mbGFnX21vZHVsb19zY2hlZDsKKyNkZWZpbmUgZmxhZ19tb2R1bG9fc2NoZWQgZ2xvYmFsX29wdGlvbnMueF9mbGFnX21vZHVsb19zY2hlZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19tb2R1bG9fc2NoZWRfYWxsb3dfcmVnbW92ZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX21vZHVsb19zY2hlZF9hbGxvd19yZWdtb3ZlczsKKyNkZWZpbmUgZmxhZ19tb2R1bG9fc2NoZWRfYWxsb3dfcmVnbW92ZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX21vZHVsb19zY2hlZF9hbGxvd19yZWdtb3ZlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19tb3ZlX2xvb3BfaW52YXJpYW50czsKKyNlbHNlCisgIGludCB4X2ZsYWdfbW92ZV9sb29wX2ludmFyaWFudHM7CisjZGVmaW5lIGZsYWdfbW92ZV9sb29wX2ludmFyaWFudHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX21vdmVfbG9vcF9pbnZhcmlhbnRzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX21zX2V4dGVuc2lvbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX21zX2V4dGVuc2lvbnM7CisjZGVmaW5lIGZsYWdfbXNfZXh0ZW5zaW9ucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbXNfZXh0ZW5zaW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19tdWRmbGFwOworI2Vsc2UKKyAgaW50IHhfZmxhZ19tdWRmbGFwOworI2RlZmluZSBmbGFnX211ZGZsYXAgZ2xvYmFsX29wdGlvbnMueF9mbGFnX211ZGZsYXAKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbXVkZmxhcF9pZ25vcmVfcmVhZHM7CisjZWxzZQorICBpbnQgeF9mbGFnX211ZGZsYXBfaWdub3JlX3JlYWRzOworI2RlZmluZSBmbGFnX211ZGZsYXBfaWdub3JlX3JlYWRzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19tdWRmbGFwX2lnbm9yZV9yZWFkcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19uaWxfcmVjZWl2ZXJzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19uaWxfcmVjZWl2ZXJzOworI2RlZmluZSBmbGFnX25pbF9yZWNlaXZlcnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX25pbF9yZWNlaXZlcnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbm9uX2NhbGxfZXhjZXB0aW9uczsKKyNlbHNlCisgIGludCB4X2ZsYWdfbm9uX2NhbGxfZXhjZXB0aW9uczsKKyNkZWZpbmUgZmxhZ19ub25fY2FsbF9leGNlcHRpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19ub25fY2FsbF9leGNlcHRpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX25vX25vbmFuc2lfYnVpbHRpbjsKKyNlbHNlCisgIGludCB4X2ZsYWdfbm9fbm9uYW5zaV9idWlsdGluOworI2RlZmluZSBmbGFnX25vX25vbmFuc2lfYnVpbHRpbiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbm9fbm9uYW5zaV9idWlsdGluCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX25vdGhyb3dfb3B0OworI2Vsc2UKKyAgaW50IHhfZmxhZ19ub3Rocm93X29wdDsKKyNkZWZpbmUgZmxhZ19ub3Rocm93X29wdCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfbm90aHJvd19vcHQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfb2JqY19hYmk7CisjZWxzZQorICBpbnQgeF9mbGFnX29iamNfYWJpOworI2RlZmluZSBmbGFnX29iamNfYWJpIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19vYmpjX2FiaQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19vYmpjX2NhbGxfY3h4X2NkdG9yczsKKyNlbHNlCisgIGludCB4X2ZsYWdfb2JqY19jYWxsX2N4eF9jZHRvcnM7CisjZGVmaW5lIGZsYWdfb2JqY19jYWxsX2N4eF9jZHRvcnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX29iamNfY2FsbF9jeHhfY2R0b3JzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX29iamNfZGlyZWN0X2Rpc3BhdGNoOworI2Vsc2UKKyAgaW50IHhfZmxhZ19vYmpjX2RpcmVjdF9kaXNwYXRjaDsKKyNkZWZpbmUgZmxhZ19vYmpjX2RpcmVjdF9kaXNwYXRjaCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfb2JqY19kaXJlY3RfZGlzcGF0Y2gKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfb2JqY19leGNlcHRpb25zOworI2Vsc2UKKyAgaW50IHhfZmxhZ19vYmpjX2V4Y2VwdGlvbnM7CisjZGVmaW5lIGZsYWdfb2JqY19leGNlcHRpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19vYmpjX2V4Y2VwdGlvbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfb2JqY19nYzsKKyNlbHNlCisgIGludCB4X2ZsYWdfb2JqY19nYzsKKyNkZWZpbmUgZmxhZ19vYmpjX2djIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19vYmpjX2djCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX29iamNfbmlsY2hlY2s7CisjZWxzZQorICBpbnQgeF9mbGFnX29iamNfbmlsY2hlY2s7CisjZGVmaW5lIGZsYWdfb2JqY19uaWxjaGVjayBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfb2JqY19uaWxjaGVjaworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19vYmpjX3NqbGpfZXhjZXB0aW9uczsKKyNlbHNlCisgIGludCB4X2ZsYWdfb2JqY19zamxqX2V4Y2VwdGlvbnM7CisjZGVmaW5lIGZsYWdfb2JqY19zamxqX2V4Y2VwdGlvbnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX29iamNfc2psal9leGNlcHRpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX29iamMxX29ubHk7CisjZWxzZQorICBpbnQgeF9mbGFnX29iamMxX29ubHk7CisjZGVmaW5lIGZsYWdfb2JqYzFfb25seSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfb2JqYzFfb25seQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19vbWl0X2ZyYW1lX3BvaW50ZXI7CisjZWxzZQorICBpbnQgeF9mbGFnX29taXRfZnJhbWVfcG9pbnRlcjsKKyNkZWZpbmUgZmxhZ19vbWl0X2ZyYW1lX3BvaW50ZXIgZ2xvYmFsX29wdGlvbnMueF9mbGFnX29taXRfZnJhbWVfcG9pbnRlcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19vcGVubXA7CisjZWxzZQorICBpbnQgeF9mbGFnX29wZW5tcDsKKyNkZWZpbmUgZmxhZ19vcGVubXAgZ2xvYmFsX29wdGlvbnMueF9mbGFnX29wZW5tcAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19vcHRfaW5mbzsKKyNlbHNlCisgIGludCB4X2ZsYWdfb3B0X2luZm87CisjZGVmaW5lIGZsYWdfb3B0X2luZm8gZ2xvYmFsX29wdGlvbnMueF9mbGFnX29wdF9pbmZvCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3JlZ21vdmU7CisjZWxzZQorICBpbnQgeF9mbGFnX3JlZ21vdmU7CisjZGVmaW5lIGZsYWdfcmVnbW92ZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcmVnbW92ZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19vcHRpbWl6ZV9zaWJsaW5nX2NhbGxzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19vcHRpbWl6ZV9zaWJsaW5nX2NhbGxzOworI2RlZmluZSBmbGFnX29wdGltaXplX3NpYmxpbmdfY2FsbHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX29wdGltaXplX3NpYmxpbmdfY2FsbHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfb3B0aW1pemVfc2NpOworI2Vsc2UKKyAgaW50IHhfZmxhZ19vcHRpbWl6ZV9zY2k7CisjZGVmaW5lIGZsYWdfb3B0aW1pemVfc2NpIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19vcHRpbWl6ZV9zY2kKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfb3B0aW1pemVfc3RybGVuOworI2Vsc2UKKyAgaW50IHhfZmxhZ19vcHRpbWl6ZV9zdHJsZW47CisjZGVmaW5lIGZsYWdfb3B0aW1pemVfc3RybGVuIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19vcHRpbWl6ZV9zdHJsZW4KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcGFja19zdHJ1Y3Q7CisjZWxzZQorICBpbnQgeF9mbGFnX3BhY2tfc3RydWN0OworI2RlZmluZSBmbGFnX3BhY2tfc3RydWN0IGdsb2JhbF9vcHRpb25zLnhfZmxhZ19wYWNrX3N0cnVjdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19wYXJ0aWFsX2lubGluaW5nOworI2Vsc2UKKyAgaW50IHhfZmxhZ19wYXJ0aWFsX2lubGluaW5nOworI2RlZmluZSBmbGFnX3BhcnRpYWxfaW5saW5pbmcgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3BhcnRpYWxfaW5saW5pbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcGNjX3N0cnVjdF9yZXR1cm47CisjZWxzZQorICBpbnQgeF9mbGFnX3BjY19zdHJ1Y3RfcmV0dXJuOworI2RlZmluZSBmbGFnX3BjY19zdHJ1Y3RfcmV0dXJuIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19wY2Nfc3RydWN0X3JldHVybgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19wZWVsX2xvb3BzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19wZWVsX2xvb3BzOworI2RlZmluZSBmbGFnX3BlZWxfbG9vcHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3BlZWxfbG9vcHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfbm9fcGVlcGhvbGU7CisjZWxzZQorICBpbnQgeF9mbGFnX25vX3BlZXBob2xlOworI2RlZmluZSBmbGFnX25vX3BlZXBob2xlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19ub19wZWVwaG9sZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19wZWVwaG9sZTI7CisjZWxzZQorICBpbnQgeF9mbGFnX3BlZXBob2xlMjsKKyNkZWZpbmUgZmxhZ19wZWVwaG9sZTIgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3BlZXBob2xlMgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19wZXJtaXNzaXZlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19wZXJtaXNzaXZlOworI2RlZmluZSBmbGFnX3Blcm1pc3NpdmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3Blcm1pc3NpdmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcGxhbjlfZXh0ZW5zaW9uczsKKyNlbHNlCisgIGludCB4X2ZsYWdfcGxhbjlfZXh0ZW5zaW9uczsKKyNkZWZpbmUgZmxhZ19wbGFuOV9leHRlbnNpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19wbGFuOV9leHRlbnNpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBwb3N0X2lwYV9tZW1fcmVwb3J0OworI2Vsc2UKKyAgaW50IHhfcG9zdF9pcGFfbWVtX3JlcG9ydDsKKyNkZWZpbmUgcG9zdF9pcGFfbWVtX3JlcG9ydCBnbG9iYWxfb3B0aW9ucy54X3Bvc3RfaXBhX21lbV9yZXBvcnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHByZV9pcGFfbWVtX3JlcG9ydDsKKyNlbHNlCisgIGludCB4X3ByZV9pcGFfbWVtX3JlcG9ydDsKKyNkZWZpbmUgcHJlX2lwYV9tZW1fcmVwb3J0IGdsb2JhbF9vcHRpb25zLnhfcHJlX2lwYV9tZW1fcmVwb3J0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3ByZWRpY3RpdmVfY29tbW9uaW5nOworI2Vsc2UKKyAgaW50IHhfZmxhZ19wcmVkaWN0aXZlX2NvbW1vbmluZzsKKyNkZWZpbmUgZmxhZ19wcmVkaWN0aXZlX2NvbW1vbmluZyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcHJlZGljdGl2ZV9jb21tb25pbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcHJlZmV0Y2hfbG9vcF9hcnJheXM7CisjZWxzZQorICBpbnQgeF9mbGFnX3ByZWZldGNoX2xvb3BfYXJyYXlzOworI2RlZmluZSBmbGFnX3ByZWZldGNoX2xvb3BfYXJyYXlzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19wcmVmZXRjaF9sb29wX2FycmF5cworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19wcmV0dHlfdGVtcGxhdGVzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19wcmV0dHlfdGVtcGxhdGVzOworI2RlZmluZSBmbGFnX3ByZXR0eV90ZW1wbGF0ZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3ByZXR0eV90ZW1wbGF0ZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHByb2ZpbGVfZmxhZzsKKyNlbHNlCisgIGludCB4X3Byb2ZpbGVfZmxhZzsKKyNkZWZpbmUgcHJvZmlsZV9mbGFnIGdsb2JhbF9vcHRpb25zLnhfcHJvZmlsZV9mbGFnCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBwcm9maWxlX2FyY19mbGFnOworI2Vsc2UKKyAgaW50IHhfcHJvZmlsZV9hcmNfZmxhZzsKKyNkZWZpbmUgcHJvZmlsZV9hcmNfZmxhZyBnbG9iYWxfb3B0aW9ucy54X3Byb2ZpbGVfYXJjX2ZsYWcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcHJvZmlsZV9jb3JyZWN0aW9uOworI2Vsc2UKKyAgaW50IHhfZmxhZ19wcm9maWxlX2NvcnJlY3Rpb247CisjZGVmaW5lIGZsYWdfcHJvZmlsZV9jb3JyZWN0aW9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19wcm9maWxlX2NvcnJlY3Rpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqcHJvZmlsZV9kYXRhX3ByZWZpeDsKKyNlbHNlCisgIGNvbnN0IGNoYXIgKnhfcHJvZmlsZV9kYXRhX3ByZWZpeDsKKyNkZWZpbmUgcHJvZmlsZV9kYXRhX3ByZWZpeCBnbG9iYWxfb3B0aW9ucy54X3Byb2ZpbGVfZGF0YV9wcmVmaXgKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHByb2ZpbGVfcmVwb3J0OworI2Vsc2UKKyAgaW50IHhfcHJvZmlsZV9yZXBvcnQ7CisjZGVmaW5lIHByb2ZpbGVfcmVwb3J0IGdsb2JhbF9vcHRpb25zLnhfcHJvZmlsZV9yZXBvcnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcHJvZmlsZV91c2U7CisjZWxzZQorICBpbnQgeF9mbGFnX3Byb2ZpbGVfdXNlOworI2RlZmluZSBmbGFnX3Byb2ZpbGVfdXNlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19wcm9maWxlX3VzZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19wcm9maWxlX3ZhbHVlczsKKyNlbHNlCisgIGludCB4X2ZsYWdfcHJvZmlsZV92YWx1ZXM7CisjZGVmaW5lIGZsYWdfcHJvZmlsZV92YWx1ZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3Byb2ZpbGVfdmFsdWVzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3JlY2lwcm9jYWxfbWF0aDsKKyNlbHNlCisgIGludCB4X2ZsYWdfcmVjaXByb2NhbF9tYXRoOworI2RlZmluZSBmbGFnX3JlY2lwcm9jYWxfbWF0aCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcmVjaXByb2NhbF9tYXRoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3JlY29yZF9nY2Nfc3dpdGNoZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX3JlY29yZF9nY2Nfc3dpdGNoZXM7CisjZGVmaW5lIGZsYWdfcmVjb3JkX2djY19zd2l0Y2hlcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcmVjb3JkX2djY19zd2l0Y2hlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19yZWR1Y2VkX3JlZmxlY3Rpb247CisjZWxzZQorICBpbnQgeF9mbGFnX3JlZHVjZWRfcmVmbGVjdGlvbjsKKyNkZWZpbmUgZmxhZ19yZWR1Y2VkX3JlZmxlY3Rpb24gZ2xvYmFsX29wdGlvbnMueF9mbGFnX3JlZHVjZWRfcmVmbGVjdGlvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19yZWU7CisjZWxzZQorICBpbnQgeF9mbGFnX3JlZTsKKyNkZWZpbmUgZmxhZ19yZWUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3JlZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19yZW5hbWVfcmVnaXN0ZXJzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19yZW5hbWVfcmVnaXN0ZXJzOworI2RlZmluZSBmbGFnX3JlbmFtZV9yZWdpc3RlcnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3JlbmFtZV9yZWdpc3RlcnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcmVvcmRlcl9ibG9ja3M7CisjZWxzZQorICBpbnQgeF9mbGFnX3Jlb3JkZXJfYmxvY2tzOworI2RlZmluZSBmbGFnX3Jlb3JkZXJfYmxvY2tzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19yZW9yZGVyX2Jsb2NrcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19yZW9yZGVyX2Jsb2Nrc19hbmRfcGFydGl0aW9uOworI2Vsc2UKKyAgaW50IHhfZmxhZ19yZW9yZGVyX2Jsb2Nrc19hbmRfcGFydGl0aW9uOworI2RlZmluZSBmbGFnX3Jlb3JkZXJfYmxvY2tzX2FuZF9wYXJ0aXRpb24gZ2xvYmFsX29wdGlvbnMueF9mbGFnX3Jlb3JkZXJfYmxvY2tzX2FuZF9wYXJ0aXRpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcmVvcmRlcl9mdW5jdGlvbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX3Jlb3JkZXJfZnVuY3Rpb25zOworI2RlZmluZSBmbGFnX3Jlb3JkZXJfZnVuY3Rpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19yZW9yZGVyX2Z1bmN0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19yZXBsYWNlX29iamNfY2xhc3NlczsKKyNlbHNlCisgIGludCB4X2ZsYWdfcmVwbGFjZV9vYmpjX2NsYXNzZXM7CisjZGVmaW5lIGZsYWdfcmVwbGFjZV9vYmpjX2NsYXNzZXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3JlcGxhY2Vfb2JqY19jbGFzc2VzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBnb19yZXF1aXJlX3JldHVybl9zdGF0ZW1lbnQ7CisjZWxzZQorICBpbnQgeF9nb19yZXF1aXJlX3JldHVybl9zdGF0ZW1lbnQ7CisjZGVmaW5lIGdvX3JlcXVpcmVfcmV0dXJuX3N0YXRlbWVudCBnbG9iYWxfb3B0aW9ucy54X2dvX3JlcXVpcmVfcmV0dXJuX3N0YXRlbWVudAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19yZXJ1bl9jc2VfYWZ0ZXJfbG9vcDsKKyNlbHNlCisgIGludCB4X2ZsYWdfcmVydW5fY3NlX2FmdGVyX2xvb3A7CisjZGVmaW5lIGZsYWdfcmVydW5fY3NlX2FmdGVyX2xvb3AgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3JlcnVuX2NzZV9hZnRlcl9sb29wCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3Jlc2NoZWRfbW9kdWxvX3NjaGVkOworI2Vsc2UKKyAgaW50IHhfZmxhZ19yZXNjaGVkX21vZHVsb19zY2hlZDsKKyNkZWZpbmUgZmxhZ19yZXNjaGVkX21vZHVsb19zY2hlZCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcmVzY2hlZF9tb2R1bG9fc2NoZWQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfcm91bmRpbmdfbWF0aDsKKyNlbHNlCisgIGludCB4X2ZsYWdfcm91bmRpbmdfbWF0aDsKKyNkZWZpbmUgZmxhZ19yb3VuZGluZ19tYXRoIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19yb3VuZGluZ19tYXRoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3J0dGk7CisjZWxzZQorICBpbnQgeF9mbGFnX3J0dGk7CisjZGVmaW5lIGZsYWdfcnR0aSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfcnR0aQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19hc2FuOworI2Vsc2UKKyAgaW50IHhfZmxhZ19hc2FuOworI2RlZmluZSBmbGFnX2FzYW4gZ2xvYmFsX29wdGlvbnMueF9mbGFnX2FzYW4KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHNhbjsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHNhbjsKKyNkZWZpbmUgZmxhZ190c2FuIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190c2FuCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NjaGVkX2NyaXRpY2FsX3BhdGhfaGV1cmlzdGljOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zY2hlZF9jcml0aWNhbF9wYXRoX2hldXJpc3RpYzsKKyNkZWZpbmUgZmxhZ19zY2hlZF9jcml0aWNhbF9wYXRoX2hldXJpc3RpYyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2NoZWRfY3JpdGljYWxfcGF0aF9oZXVyaXN0aWMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2NoZWRfZGVwX2NvdW50X2hldXJpc3RpYzsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2NoZWRfZGVwX2NvdW50X2hldXJpc3RpYzsKKyNkZWZpbmUgZmxhZ19zY2hlZF9kZXBfY291bnRfaGV1cmlzdGljIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zY2hlZF9kZXBfY291bnRfaGV1cmlzdGljCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NjaGVkX2dyb3VwX2hldXJpc3RpYzsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2NoZWRfZ3JvdXBfaGV1cmlzdGljOworI2RlZmluZSBmbGFnX3NjaGVkX2dyb3VwX2hldXJpc3RpYyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2NoZWRfZ3JvdXBfaGV1cmlzdGljCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NjaGVkdWxlX2ludGVyYmxvY2s7CisjZWxzZQorICBpbnQgeF9mbGFnX3NjaGVkdWxlX2ludGVyYmxvY2s7CisjZGVmaW5lIGZsYWdfc2NoZWR1bGVfaW50ZXJibG9jayBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2NoZWR1bGVfaW50ZXJibG9jaworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zY2hlZF9sYXN0X2luc25faGV1cmlzdGljOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zY2hlZF9sYXN0X2luc25faGV1cmlzdGljOworI2RlZmluZSBmbGFnX3NjaGVkX2xhc3RfaW5zbl9oZXVyaXN0aWMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NjaGVkX2xhc3RfaW5zbl9oZXVyaXN0aWMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2NoZWRfcHJlc3N1cmU7CisjZWxzZQorICBpbnQgeF9mbGFnX3NjaGVkX3ByZXNzdXJlOworI2RlZmluZSBmbGFnX3NjaGVkX3ByZXNzdXJlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zY2hlZF9wcmVzc3VyZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zY2hlZF9yYW5rX2hldXJpc3RpYzsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2NoZWRfcmFua19oZXVyaXN0aWM7CisjZGVmaW5lIGZsYWdfc2NoZWRfcmFua19oZXVyaXN0aWMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NjaGVkX3JhbmtfaGV1cmlzdGljCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zY2hlZHVsZV9zcGVjdWxhdGl2ZTsKKyNkZWZpbmUgZmxhZ19zY2hlZHVsZV9zcGVjdWxhdGl2ZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2NoZWR1bGVfc3BlY3VsYXRpdmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2NoZWRfc3BlY19pbnNuX2hldXJpc3RpYzsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2NoZWRfc3BlY19pbnNuX2hldXJpc3RpYzsKKyNkZWZpbmUgZmxhZ19zY2hlZF9zcGVjX2luc25faGV1cmlzdGljIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zY2hlZF9zcGVjX2luc25faGV1cmlzdGljCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlX2xvYWQ7CisjZWxzZQorICBpbnQgeF9mbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlX2xvYWQ7CisjZGVmaW5lIGZsYWdfc2NoZWR1bGVfc3BlY3VsYXRpdmVfbG9hZCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2NoZWR1bGVfc3BlY3VsYXRpdmVfbG9hZAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zY2hlZHVsZV9zcGVjdWxhdGl2ZV9sb2FkX2Rhbmdlcm91czsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2NoZWR1bGVfc3BlY3VsYXRpdmVfbG9hZF9kYW5nZXJvdXM7CisjZGVmaW5lIGZsYWdfc2NoZWR1bGVfc3BlY3VsYXRpdmVfbG9hZF9kYW5nZXJvdXMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlX2xvYWRfZGFuZ2Vyb3VzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NjaGVkX3N0YWxsZWRfaW5zbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX3NjaGVkX3N0YWxsZWRfaW5zbnM7CisjZGVmaW5lIGZsYWdfc2NoZWRfc3RhbGxlZF9pbnNucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2NoZWRfc3RhbGxlZF9pbnNucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zY2hlZF9zdGFsbGVkX2luc25zX2RlcDsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2NoZWRfc3RhbGxlZF9pbnNuc19kZXA7CisjZGVmaW5lIGZsYWdfc2NoZWRfc3RhbGxlZF9pbnNuc19kZXAgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NjaGVkX3N0YWxsZWRfaW5zbnNfZGVwCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBzY2hlZF92ZXJib3NlX3BhcmFtOworI2Vsc2UKKyAgaW50IHhfc2NoZWRfdmVyYm9zZV9wYXJhbTsKKyNkZWZpbmUgc2NoZWRfdmVyYm9zZV9wYXJhbSBnbG9iYWxfb3B0aW9ucy54X3NjaGVkX3ZlcmJvc2VfcGFyYW0KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2NoZWQyX3VzZV9zdXBlcmJsb2NrczsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2NoZWQyX3VzZV9zdXBlcmJsb2NrczsKKyNkZWZpbmUgZmxhZ19zY2hlZDJfdXNlX3N1cGVyYmxvY2tzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zY2hlZDJfdXNlX3N1cGVyYmxvY2tzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NjaGVkdWxlX2luc25zOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zY2hlZHVsZV9pbnNuczsKKyNkZWZpbmUgZmxhZ19zY2hlZHVsZV9pbnNucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2NoZWR1bGVfaW5zbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2NoZWR1bGVfaW5zbnNfYWZ0ZXJfcmVsb2FkOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zY2hlZHVsZV9pbnNuc19hZnRlcl9yZWxvYWQ7CisjZGVmaW5lIGZsYWdfc2NoZWR1bGVfaW5zbnNfYWZ0ZXJfcmVsb2FkIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zY2hlZHVsZV9pbnNuc19hZnRlcl9yZWxvYWQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2VjdGlvbl9hbmNob3JzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zZWN0aW9uX2FuY2hvcnM7CisjZGVmaW5lIGZsYWdfc2VjdGlvbl9hbmNob3JzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zZWN0aW9uX2FuY2hvcnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2VsX3NjaGVkX3BpcGVsaW5pbmc7CisjZWxzZQorICBpbnQgeF9mbGFnX3NlbF9zY2hlZF9waXBlbGluaW5nOworI2RlZmluZSBmbGFnX3NlbF9zY2hlZF9waXBlbGluaW5nIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zZWxfc2NoZWRfcGlwZWxpbmluZworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zZWxfc2NoZWRfcGlwZWxpbmluZ19vdXRlcl9sb29wczsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2VsX3NjaGVkX3BpcGVsaW5pbmdfb3V0ZXJfbG9vcHM7CisjZGVmaW5lIGZsYWdfc2VsX3NjaGVkX3BpcGVsaW5pbmdfb3V0ZXJfbG9vcHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NlbF9zY2hlZF9waXBlbGluaW5nX291dGVyX2xvb3BzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NlbF9zY2hlZF9yZXNjaGVkdWxlX3BpcGVsaW5lZDsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2VsX3NjaGVkX3Jlc2NoZWR1bGVfcGlwZWxpbmVkOworI2RlZmluZSBmbGFnX3NlbF9zY2hlZF9yZXNjaGVkdWxlX3BpcGVsaW5lZCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2VsX3NjaGVkX3Jlc2NoZWR1bGVfcGlwZWxpbmVkCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NlbGVjdGl2ZV9zY2hlZHVsaW5nOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZzsKKyNkZWZpbmUgZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2VsZWN0aXZlX3NjaGVkdWxpbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2VsZWN0aXZlX3NjaGVkdWxpbmcyOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZzI7CisjZGVmaW5lIGZsYWdfc2VsZWN0aXZlX3NjaGVkdWxpbmcyIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZzIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2hvcnRfZG91YmxlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zaG9ydF9kb3VibGU7CisjZGVmaW5lIGZsYWdfc2hvcnRfZG91YmxlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zaG9ydF9kb3VibGUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2hvcnRfZW51bXM7CisjZWxzZQorICBpbnQgeF9mbGFnX3Nob3J0X2VudW1zOworI2RlZmluZSBmbGFnX3Nob3J0X2VudW1zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zaG9ydF9lbnVtcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zaG9ydF93Y2hhcjsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2hvcnRfd2NoYXI7CisjZGVmaW5lIGZsYWdfc2hvcnRfd2NoYXIgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3Nob3J0X3djaGFyCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3Nob3dfY29sdW1uOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zaG93X2NvbHVtbjsKKyNkZWZpbmUgZmxhZ19zaG93X2NvbHVtbiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2hvd19jb2x1bW4KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc2hyaW5rX3dyYXA7CisjZWxzZQorICBpbnQgeF9mbGFnX3Nocmlua193cmFwOworI2RlZmluZSBmbGFnX3Nocmlua193cmFwIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zaHJpbmtfd3JhcAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zaWduYWxpbmdfbmFuczsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2lnbmFsaW5nX25hbnM7CisjZGVmaW5lIGZsYWdfc2lnbmFsaW5nX25hbnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NpZ25hbGluZ19uYW5zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NpZ25lZF9iaXRmaWVsZHM7CisjZWxzZQorICBpbnQgeF9mbGFnX3NpZ25lZF9iaXRmaWVsZHM7CisjZGVmaW5lIGZsYWdfc2lnbmVkX2JpdGZpZWxkcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2lnbmVkX2JpdGZpZWxkcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zaWduZWRfY2hhcjsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2lnbmVkX2NoYXI7CisjZGVmaW5lIGZsYWdfc2lnbmVkX2NoYXIgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NpZ25lZF9jaGFyCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NpZ25lZF96ZXJvczsKKyNlbHNlCisgIGludCB4X2ZsYWdfc2lnbmVkX3plcm9zOworI2RlZmluZSBmbGFnX3NpZ25lZF96ZXJvcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2lnbmVkX3plcm9zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NpbmdsZV9wcmVjaXNpb25fY29uc3RhbnQ7CisjZWxzZQorICBpbnQgeF9mbGFnX3NpbmdsZV9wcmVjaXNpb25fY29uc3RhbnQ7CisjZGVmaW5lIGZsYWdfc2luZ2xlX3ByZWNpc2lvbl9jb25zdGFudCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc2luZ2xlX3ByZWNpc2lvbl9jb25zdGFudAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zcGxpdF9pdnNfaW5fdW5yb2xsZXI7CisjZWxzZQorICBpbnQgeF9mbGFnX3NwbGl0X2l2c19pbl91bnJvbGxlcjsKKyNkZWZpbmUgZmxhZ19zcGxpdF9pdnNfaW5fdW5yb2xsZXIgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NwbGl0X2l2c19pbl91bnJvbGxlcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zcGxpdF9zdGFjazsKKyNlbHNlCisgIGludCB4X2ZsYWdfc3BsaXRfc3RhY2s7CisjZGVmaW5lIGZsYWdfc3BsaXRfc3RhY2sgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3NwbGl0X3N0YWNrCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NwbGl0X3dpZGVfdHlwZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX3NwbGl0X3dpZGVfdHlwZXM7CisjZGVmaW5lIGZsYWdfc3BsaXRfd2lkZV90eXBlcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc3BsaXRfd2lkZV90eXBlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zdGFja19wcm90ZWN0OworI2Vsc2UKKyAgaW50IHhfZmxhZ19zdGFja19wcm90ZWN0OworI2RlZmluZSBmbGFnX3N0YWNrX3Byb3RlY3QgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3N0YWNrX3Byb3RlY3QKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gZW51bSBzdGFja19yZXVzZV9sZXZlbCBmbGFnX3N0YWNrX3JldXNlOworI2Vsc2UKKyAgZW51bSBzdGFja19yZXVzZV9sZXZlbCB4X2ZsYWdfc3RhY2tfcmV1c2U7CisjZGVmaW5lIGZsYWdfc3RhY2tfcmV1c2UgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3N0YWNrX3JldXNlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3N0YWNrX3VzYWdlOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zdGFja191c2FnZTsKKyNkZWZpbmUgZmxhZ19zdGFja191c2FnZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc3RhY2tfdXNhZ2UKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZGV0YWlsZWRfc3RhdGlzdGljczsKKyNlbHNlCisgIGludCB4X2ZsYWdfZGV0YWlsZWRfc3RhdGlzdGljczsKKyNkZWZpbmUgZmxhZ19kZXRhaWxlZF9zdGF0aXN0aWNzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19kZXRhaWxlZF9zdGF0aXN0aWNzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3N0b3JlX2NoZWNrOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zdG9yZV9jaGVjazsKKyNkZWZpbmUgZmxhZ19zdG9yZV9jaGVjayBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc3RvcmVfY2hlY2sKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc3RyaWN0X2FsaWFzaW5nOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zdHJpY3RfYWxpYXNpbmc7CisjZGVmaW5lIGZsYWdfc3RyaWN0X2FsaWFzaW5nIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zdHJpY3RfYWxpYXNpbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc3RyaWN0X2VudW1zOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zdHJpY3RfZW51bXM7CisjZGVmaW5lIGZsYWdfc3RyaWN0X2VudW1zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zdHJpY3RfZW51bXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc3RyaWN0X292ZXJmbG93OworI2Vsc2UKKyAgaW50IHhfZmxhZ19zdHJpY3Rfb3ZlcmZsb3c7CisjZGVmaW5lIGZsYWdfc3RyaWN0X292ZXJmbG93IGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zdHJpY3Rfb3ZlcmZsb3cKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfc3RyaWN0X3ZvbGF0aWxlX2JpdGZpZWxkczsKKyNlbHNlCisgIGludCB4X2ZsYWdfc3RyaWN0X3ZvbGF0aWxlX2JpdGZpZWxkczsKKyNkZWZpbmUgZmxhZ19zdHJpY3Rfdm9sYXRpbGVfYml0ZmllbGRzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19zdHJpY3Rfdm9sYXRpbGVfYml0ZmllbGRzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3N5bmNfbGliY2FsbHM7CisjZWxzZQorICBpbnQgeF9mbGFnX3N5bmNfbGliY2FsbHM7CisjZGVmaW5lIGZsYWdfc3luY19saWJjYWxscyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc3luY19saWJjYWxscworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19zeW50YXhfb25seTsKKyNlbHNlCisgIGludCB4X2ZsYWdfc3ludGF4X29ubHk7CisjZGVmaW5lIGZsYWdfc3ludGF4X29ubHkgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3N5bnRheF9vbmx5CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCB0ZW1wbGF0ZV9iYWNrdHJhY2VfbGltaXQ7CisjZWxzZQorICBpbnQgeF90ZW1wbGF0ZV9iYWNrdHJhY2VfbGltaXQ7CisjZGVmaW5lIHRlbXBsYXRlX2JhY2t0cmFjZV9saW1pdCBnbG9iYWxfb3B0aW9ucy54X3RlbXBsYXRlX2JhY2t0cmFjZV9saW1pdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190ZXN0X2NvdmVyYWdlOworI2Vsc2UKKyAgaW50IHhfZmxhZ190ZXN0X2NvdmVyYWdlOworI2RlZmluZSBmbGFnX3Rlc3RfY292ZXJhZ2UgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3Rlc3RfY292ZXJhZ2UKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdGhyZWFkX2p1bXBzOworI2Vsc2UKKyAgaW50IHhfZmxhZ190aHJlYWRfanVtcHM7CisjZGVmaW5lIGZsYWdfdGhyZWFkX2p1bXBzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190aHJlYWRfanVtcHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdGhyZWFkc2FmZV9zdGF0aWNzOworI2Vsc2UKKyAgaW50IHhfZmxhZ190aHJlYWRzYWZlX3N0YXRpY3M7CisjZGVmaW5lIGZsYWdfdGhyZWFkc2FmZV9zdGF0aWNzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190aHJlYWRzYWZlX3N0YXRpY3MKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHRpbWVfcmVwb3J0OworI2Vsc2UKKyAgaW50IHhfdGltZV9yZXBvcnQ7CisjZGVmaW5lIHRpbWVfcmVwb3J0IGdsb2JhbF9vcHRpb25zLnhfdGltZV9yZXBvcnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gZW51bSB0bHNfbW9kZWwgZmxhZ190bHNfZGVmYXVsdDsKKyNlbHNlCisgIGVudW0gdGxzX21vZGVsIHhfZmxhZ190bHNfZGVmYXVsdDsKKyNkZWZpbmUgZmxhZ190bHNfZGVmYXVsdCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdGxzX2RlZmF1bHQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdG9wbGV2ZWxfcmVvcmRlcjsKKyNlbHNlCisgIGludCB4X2ZsYWdfdG9wbGV2ZWxfcmVvcmRlcjsKKyNkZWZpbmUgZmxhZ190b3BsZXZlbF9yZW9yZGVyIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190b3BsZXZlbF9yZW9yZGVyCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyYWNlcjsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJhY2VyOworI2RlZmluZSBmbGFnX3RyYWNlciBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJhY2VyCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyYXBwaW5nX21hdGg7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyYXBwaW5nX21hdGg7CisjZGVmaW5lIGZsYWdfdHJhcHBpbmdfbWF0aCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJhcHBpbmdfbWF0aAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmFwdjsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJhcHY7CisjZGVmaW5lIGZsYWdfdHJhcHYgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyYXB2CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfYml0X2NjcDsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9iaXRfY2NwOworI2RlZmluZSBmbGFnX3RyZWVfYml0X2NjcCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9iaXRfY2NwCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfYnVpbHRpbl9jYWxsX2RjZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9idWlsdGluX2NhbGxfZGNlOworI2RlZmluZSBmbGFnX3RyZWVfYnVpbHRpbl9jYWxsX2RjZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9idWlsdGluX2NhbGxfZGNlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfY2NwOworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX2NjcDsKKyNkZWZpbmUgZmxhZ190cmVlX2NjcCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9jY3AKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9jaDsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9jaDsKKyNkZWZpbmUgZmxhZ190cmVlX2NoIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX2NoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3NzYV9jb2FsZXNjZV92YXJzOworI2Vsc2UKKyAgaW50IHhfZmxhZ19zc2FfY29hbGVzY2VfdmFyczsKKyNkZWZpbmUgZmxhZ19zc2FfY29hbGVzY2VfdmFycyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfc3NhX2NvYWxlc2NlX3ZhcnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9jb3B5X3Byb3A7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfY29weV9wcm9wOworI2RlZmluZSBmbGFnX3RyZWVfY29weV9wcm9wIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX2NvcHlfcHJvcAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX2NvcHlyZW5hbWU7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfY29weXJlbmFtZTsKKyNkZWZpbmUgZmxhZ190cmVlX2NvcHlyZW5hbWUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfY29weXJlbmFtZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX2NzZWxpbTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9jc2VsaW07CisjZGVmaW5lIGZsYWdfdHJlZV9jc2VsaW0gZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfY3NlbGltCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfZGNlOworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX2RjZTsKKyNkZWZpbmUgZmxhZ190cmVlX2RjZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9kY2UKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9kb207CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfZG9tOworI2RlZmluZSBmbGFnX3RyZWVfZG9tIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX2RvbQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX2RzZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9kc2U7CisjZGVmaW5lIGZsYWdfdHJlZV9kc2UgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfZHNlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfZm9yd3Byb3A7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfZm9yd3Byb3A7CisjZGVmaW5lIGZsYWdfdHJlZV9mb3J3cHJvcCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9mb3J3cHJvcAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX2ZyZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9mcmU7CisjZGVmaW5lIGZsYWdfdHJlZV9mcmUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfZnJlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfbG9vcF9kaXN0cmlidXRlX3BhdHRlcm5zOworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX2xvb3BfZGlzdHJpYnV0ZV9wYXR0ZXJuczsKKyNkZWZpbmUgZmxhZ190cmVlX2xvb3BfZGlzdHJpYnV0ZV9wYXR0ZXJucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9sb29wX2Rpc3RyaWJ1dGVfcGF0dGVybnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9sb29wX2Rpc3RyaWJ1dGlvbjsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9sb29wX2Rpc3RyaWJ1dGlvbjsKKyNkZWZpbmUgZmxhZ190cmVlX2xvb3BfZGlzdHJpYnV0aW9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX2xvb3BfZGlzdHJpYnV0aW9uCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfbG9vcF9pZl9jb252ZXJ0OworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX2xvb3BfaWZfY29udmVydDsKKyNkZWZpbmUgZmxhZ190cmVlX2xvb3BfaWZfY29udmVydCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9sb29wX2lmX2NvbnZlcnQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9sb29wX2lmX2NvbnZlcnRfc3RvcmVzOworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX2xvb3BfaWZfY29udmVydF9zdG9yZXM7CisjZGVmaW5lIGZsYWdfdHJlZV9sb29wX2lmX2NvbnZlcnRfc3RvcmVzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX2xvb3BfaWZfY29udmVydF9zdG9yZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9sb29wX2ltOworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX2xvb3BfaW07CisjZGVmaW5lIGZsYWdfdHJlZV9sb29wX2ltIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX2xvb3BfaW0KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9sb29wX2l2Y2Fub247CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfbG9vcF9pdmNhbm9uOworI2RlZmluZSBmbGFnX3RyZWVfbG9vcF9pdmNhbm9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX2xvb3BfaXZjYW5vbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX2xvb3Bfb3B0aW1pemU7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfbG9vcF9vcHRpbWl6ZTsKKyNkZWZpbmUgZmxhZ190cmVlX2xvb3Bfb3B0aW1pemUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfbG9vcF9vcHRpbWl6ZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX2xpdmVfcmFuZ2Vfc3BsaXQ7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfbGl2ZV9yYW5nZV9zcGxpdDsKKyNkZWZpbmUgZmxhZ190cmVlX2xpdmVfcmFuZ2Vfc3BsaXQgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfbGl2ZV9yYW5nZV9zcGxpdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3BhcmFsbGVsaXplX2xvb3BzOworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX3BhcmFsbGVsaXplX2xvb3BzOworI2RlZmluZSBmbGFnX3RyZWVfcGFyYWxsZWxpemVfbG9vcHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfcGFyYWxsZWxpemVfbG9vcHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9wYXJ0aWFsX3ByZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9wYXJ0aWFsX3ByZTsKKyNkZWZpbmUgZmxhZ190cmVlX3BhcnRpYWxfcHJlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX3BhcnRpYWxfcHJlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfcGhpcHJvcDsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9waGlwcm9wOworI2RlZmluZSBmbGFnX3RyZWVfcGhpcHJvcCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9waGlwcm9wCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfcHJlOworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX3ByZTsKKyNkZWZpbmUgZmxhZ190cmVlX3ByZSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9wcmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdHJlZV9wdGE7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfcHRhOworI2RlZmluZSBmbGFnX3RyZWVfcHRhIGdsb2JhbF9vcHRpb25zLnhfZmxhZ190cmVlX3B0YQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3JlYXNzb2M7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfcmVhc3NvYzsKKyNkZWZpbmUgZmxhZ190cmVlX3JlYXNzb2MgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfcmVhc3NvYworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3NjZXZfY3Byb3A7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfc2Nldl9jcHJvcDsKKyNkZWZpbmUgZmxhZ190cmVlX3NjZXZfY3Byb3AgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfc2Nldl9jcHJvcAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3Npbms7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfc2luazsKKyNkZWZpbmUgZmxhZ190cmVlX3NpbmsgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfc2luaworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3NscF92ZWN0b3JpemU7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfc2xwX3ZlY3Rvcml6ZTsKKyNkZWZpbmUgZmxhZ190cmVlX3NscF92ZWN0b3JpemUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfc2xwX3ZlY3Rvcml6ZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3Nsc3I7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfc2xzcjsKKyNkZWZpbmUgZmxhZ190cmVlX3Nsc3IgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfc2xzcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3NyYTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV9zcmE7CisjZGVmaW5lIGZsYWdfdHJlZV9zcmEgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfc3JhCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfc3dpdGNoX2NvbnZlcnNpb247CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfc3dpdGNoX2NvbnZlcnNpb247CisjZGVmaW5lIGZsYWdfdHJlZV9zd2l0Y2hfY29udmVyc2lvbiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV9zd2l0Y2hfY29udmVyc2lvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3RhaWxfbWVyZ2U7CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfdGFpbF9tZXJnZTsKKyNkZWZpbmUgZmxhZ190cmVlX3RhaWxfbWVyZ2UgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfdGFpbF9tZXJnZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3RlcjsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV90ZXI7CisjZGVmaW5lIGZsYWdfdHJlZV90ZXIgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfdGVyCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfdmVjdF9sb29wX3ZlcnNpb247CisjZWxzZQorICBpbnQgeF9mbGFnX3RyZWVfdmVjdF9sb29wX3ZlcnNpb247CisjZGVmaW5lIGZsYWdfdHJlZV92ZWN0X2xvb3BfdmVyc2lvbiBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV92ZWN0X2xvb3BfdmVyc2lvbgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ190cmVlX3ZlY3Rvcml6ZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdHJlZV92ZWN0b3JpemU7CisjZGVmaW5lIGZsYWdfdHJlZV92ZWN0b3JpemUgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3RyZWVfdmVjdG9yaXplCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3RyZWVfdnJwOworI2Vsc2UKKyAgaW50IHhfZmxhZ190cmVlX3ZycDsKKyNkZWZpbmUgZmxhZ190cmVlX3ZycCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdHJlZV92cnAKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdW5pdF9hdF9hX3RpbWU7CisjZWxzZQorICBpbnQgeF9mbGFnX3VuaXRfYXRfYV90aW1lOworI2RlZmluZSBmbGFnX3VuaXRfYXRfYV90aW1lIGdsb2JhbF9vcHRpb25zLnhfZmxhZ191bml0X2F0X2FfdGltZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ191bnJvbGxfYWxsX2xvb3BzOworI2Vsc2UKKyAgaW50IHhfZmxhZ191bnJvbGxfYWxsX2xvb3BzOworI2RlZmluZSBmbGFnX3Vucm9sbF9hbGxfbG9vcHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3Vucm9sbF9hbGxfbG9vcHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdW5yb2xsX2xvb3BzOworI2Vsc2UKKyAgaW50IHhfZmxhZ191bnJvbGxfbG9vcHM7CisjZGVmaW5lIGZsYWdfdW5yb2xsX2xvb3BzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ191bnJvbGxfbG9vcHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdW5zYWZlX2xvb3Bfb3B0aW1pemF0aW9uczsKKyNlbHNlCisgIGludCB4X2ZsYWdfdW5zYWZlX2xvb3Bfb3B0aW1pemF0aW9uczsKKyNkZWZpbmUgZmxhZ191bnNhZmVfbG9vcF9vcHRpbWl6YXRpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ191bnNhZmVfbG9vcF9vcHRpbWl6YXRpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3Vuc2FmZV9tYXRoX29wdGltaXphdGlvbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX3Vuc2FmZV9tYXRoX29wdGltaXphdGlvbnM7CisjZGVmaW5lIGZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ191bnN3aXRjaF9sb29wczsKKyNlbHNlCisgIGludCB4X2ZsYWdfdW5zd2l0Y2hfbG9vcHM7CisjZGVmaW5lIGZsYWdfdW5zd2l0Y2hfbG9vcHMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3Vuc3dpdGNoX2xvb3BzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3Vud2luZF90YWJsZXM7CisjZWxzZQorICBpbnQgeF9mbGFnX3Vud2luZF90YWJsZXM7CisjZGVmaW5lIGZsYWdfdW53aW5kX3RhYmxlcyBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdW53aW5kX3RhYmxlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ191c2VfYXRvbWljX2J1aWx0aW5zOworI2Vsc2UKKyAgaW50IHhfZmxhZ191c2VfYXRvbWljX2J1aWx0aW5zOworI2RlZmluZSBmbGFnX3VzZV9hdG9taWNfYnVpbHRpbnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3VzZV9hdG9taWNfYnVpbHRpbnMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdXNlX2JvZWhtX2djOworI2Vsc2UKKyAgaW50IHhfZmxhZ191c2VfYm9laG1fZ2M7CisjZGVmaW5lIGZsYWdfdXNlX2JvZWhtX2djIGdsb2JhbF9vcHRpb25zLnhfZmxhZ191c2VfYm9laG1fZ2MKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdXNlX2N4YV9hdGV4aXQ7CisjZWxzZQorICBpbnQgeF9mbGFnX3VzZV9jeGFfYXRleGl0OworI2RlZmluZSBmbGFnX3VzZV9jeGFfYXRleGl0IGdsb2JhbF9vcHRpb25zLnhfZmxhZ191c2VfY3hhX2F0ZXhpdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ191c2VfY3hhX2dldF9leGNlcHRpb25fcHRyOworI2Vsc2UKKyAgaW50IHhfZmxhZ191c2VfY3hhX2dldF9leGNlcHRpb25fcHRyOworI2RlZmluZSBmbGFnX3VzZV9jeGFfZ2V0X2V4Y2VwdGlvbl9wdHIgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3VzZV9jeGFfZ2V0X2V4Y2VwdGlvbl9wdHIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdXNlX2RpdmlkZV9zdWJyb3V0aW5lOworI2Vsc2UKKyAgaW50IHhfZmxhZ191c2VfZGl2aWRlX3N1YnJvdXRpbmU7CisjZGVmaW5lIGZsYWdfdXNlX2RpdmlkZV9zdWJyb3V0aW5lIGdsb2JhbF9vcHRpb25zLnhfZmxhZ191c2VfZGl2aWRlX3N1YnJvdXRpbmUKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdmFyX3RyYWNraW5nOworI2Vsc2UKKyAgaW50IHhfZmxhZ192YXJfdHJhY2tpbmc7CisjZGVmaW5lIGZsYWdfdmFyX3RyYWNraW5nIGdsb2JhbF9vcHRpb25zLnhfZmxhZ192YXJfdHJhY2tpbmcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzOworI2Vsc2UKKyAgaW50IHhfZmxhZ192YXJfdHJhY2tpbmdfYXNzaWdubWVudHM7CisjZGVmaW5lIGZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzIGdsb2JhbF9vcHRpb25zLnhfZmxhZ192YXJfdHJhY2tpbmdfYXNzaWdubWVudHMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzX3RvZ2dsZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzX3RvZ2dsZTsKKyNkZWZpbmUgZmxhZ192YXJfdHJhY2tpbmdfYXNzaWdubWVudHNfdG9nZ2xlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ192YXJfdHJhY2tpbmdfYXNzaWdubWVudHNfdG9nZ2xlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3Zhcl90cmFja2luZ191bmluaXQ7CisjZWxzZQorICBpbnQgeF9mbGFnX3Zhcl90cmFja2luZ191bmluaXQ7CisjZGVmaW5lIGZsYWdfdmFyX3RyYWNraW5nX3VuaW5pdCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdmFyX3RyYWNraW5nX3VuaW5pdAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ192YXJpYWJsZV9leHBhbnNpb25faW5fdW5yb2xsZXI7CisjZWxzZQorICBpbnQgeF9mbGFnX3ZhcmlhYmxlX2V4cGFuc2lvbl9pbl91bnJvbGxlcjsKKyNkZWZpbmUgZmxhZ192YXJpYWJsZV9leHBhbnNpb25faW5fdW5yb2xsZXIgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3ZhcmlhYmxlX2V4cGFuc2lvbl9pbl91bnJvbGxlcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ192ZWN0X2Nvc3RfbW9kZWw7CisjZWxzZQorICBpbnQgeF9mbGFnX3ZlY3RfY29zdF9tb2RlbDsKKyNkZWZpbmUgZmxhZ192ZWN0X2Nvc3RfbW9kZWwgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3ZlY3RfY29zdF9tb2RlbAorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ192ZXJib3NlX2FzbTsKKyNlbHNlCisgIGludCB4X2ZsYWdfdmVyYm9zZV9hc207CisjZGVmaW5lIGZsYWdfdmVyYm9zZV9hc20gZ2xvYmFsX29wdGlvbnMueF9mbGFnX3ZlcmJvc2VfYXNtCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3Zpc2liaWxpdHlfbXNfY29tcGF0OworI2Vsc2UKKyAgaW50IHhfZmxhZ192aXNpYmlsaXR5X21zX2NvbXBhdDsKKyNkZWZpbmUgZmxhZ192aXNpYmlsaXR5X21zX2NvbXBhdCBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfdmlzaWJpbGl0eV9tc19jb21wYXQKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gZW51bSBzeW1ib2xfdmlzaWJpbGl0eSBkZWZhdWx0X3Zpc2liaWxpdHk7CisjZWxzZQorICBlbnVtIHN5bWJvbF92aXNpYmlsaXR5IHhfZGVmYXVsdF92aXNpYmlsaXR5OworI2RlZmluZSBkZWZhdWx0X3Zpc2liaWxpdHkgZ2xvYmFsX29wdGlvbnMueF9kZWZhdWx0X3Zpc2liaWxpdHkKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdmFsdWVfcHJvZmlsZV90cmFuc2Zvcm1hdGlvbnM7CisjZWxzZQorICBpbnQgeF9mbGFnX3ZhbHVlX3Byb2ZpbGVfdHJhbnNmb3JtYXRpb25zOworI2RlZmluZSBmbGFnX3ZhbHVlX3Byb2ZpbGVfdHJhbnNmb3JtYXRpb25zIGdsb2JhbF9vcHRpb25zLnhfZmxhZ192YWx1ZV9wcm9maWxlX3RyYW5zZm9ybWF0aW9ucworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ193ZWFrOworI2Vsc2UKKyAgaW50IHhfZmxhZ193ZWFrOworI2RlZmluZSBmbGFnX3dlYWsgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3dlYWsKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfd2ViOworI2Vsc2UKKyAgaW50IHhfZmxhZ193ZWI7CisjZGVmaW5lIGZsYWdfd2ViIGdsb2JhbF9vcHRpb25zLnhfZmxhZ193ZWIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfd2hvbGVfcHJvZ3JhbTsKKyNlbHNlCisgIGludCB4X2ZsYWdfd2hvbGVfcHJvZ3JhbTsKKyNkZWZpbmUgZmxhZ193aG9sZV9wcm9ncmFtIGdsb2JhbF9vcHRpb25zLnhfZmxhZ193aG9sZV9wcm9ncmFtCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3dvcmtpbmdfZGlyZWN0b3J5OworI2Vsc2UKKyAgaW50IHhfZmxhZ193b3JraW5nX2RpcmVjdG9yeTsKKyNkZWZpbmUgZmxhZ193b3JraW5nX2RpcmVjdG9yeSBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfd29ya2luZ19kaXJlY3RvcnkKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfd3BhOworI2Vsc2UKKyAgaW50IHhfZmxhZ193cGE7CisjZGVmaW5lIGZsYWdfd3BhIGdsb2JhbF9vcHRpb25zLnhfZmxhZ193cGEKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfd3JhcHY7CisjZWxzZQorICBpbnQgeF9mbGFnX3dyYXB2OworI2RlZmluZSBmbGFnX3dyYXB2IGdsb2JhbF9vcHRpb25zLnhfZmxhZ193cmFwdgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ196ZXJvX2luaXRpYWxpemVkX2luX2JzczsKKyNlbHNlCisgIGludCB4X2ZsYWdfemVyb19pbml0aWFsaXplZF9pbl9ic3M7CisjZGVmaW5lIGZsYWdfemVyb19pbml0aWFsaXplZF9pbl9ic3MgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3plcm9faW5pdGlhbGl6ZWRfaW5fYnNzCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBmbGFnX3plcm9fbGluazsKKyNlbHNlCisgIGludCB4X2ZsYWdfemVyb19saW5rOworI2RlZmluZSBmbGFnX3plcm9fbGluayBnbG9iYWxfb3B0aW9ucy54X2ZsYWdfemVyb19saW5rCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBkd2FyZl92ZXJzaW9uOworI2Vsc2UKKyAgaW50IHhfZHdhcmZfdmVyc2lvbjsKKyNkZWZpbmUgZHdhcmZfdmVyc2lvbiBnbG9iYWxfb3B0aW9ucy54X2R3YXJmX3ZlcnNpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZ2VuX2RlY2xhcmF0aW9uOworI2Vsc2UKKyAgaW50IHhfZmxhZ19nZW5fZGVjbGFyYXRpb247CisjZGVmaW5lIGZsYWdfZ2VuX2RlY2xhcmF0aW9uIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19nZW5fZGVjbGFyYXRpb24KKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGRlYnVnX2dlbmVyYXRlX3B1Yl9zZWN0aW9uczsKKyNlbHNlCisgIGludCB4X2RlYnVnX2dlbmVyYXRlX3B1Yl9zZWN0aW9uczsKKyNkZWZpbmUgZGVidWdfZ2VuZXJhdGVfcHViX3NlY3Rpb25zIGdsb2JhbF9vcHRpb25zLnhfZGVidWdfZ2VuZXJhdGVfcHViX3NlY3Rpb25zCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBkd2FyZl9yZWNvcmRfZ2NjX3N3aXRjaGVzOworI2Vsc2UKKyAgaW50IHhfZHdhcmZfcmVjb3JkX2djY19zd2l0Y2hlczsKKyNkZWZpbmUgZHdhcmZfcmVjb3JkX2djY19zd2l0Y2hlcyBnbG9iYWxfb3B0aW9ucy54X2R3YXJmX3JlY29yZF9nY2Nfc3dpdGNoZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGR3YXJmX3NwbGl0X2RlYnVnX2luZm87CisjZWxzZQorICBpbnQgeF9kd2FyZl9zcGxpdF9kZWJ1Z19pbmZvOworI2RlZmluZSBkd2FyZl9zcGxpdF9kZWJ1Z19pbmZvIGdsb2JhbF9vcHRpb25zLnhfZHdhcmZfc3BsaXRfZGVidWdfaW5mbworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZHdhcmZfc3RyaWN0OworI2Vsc2UKKyAgaW50IHhfZHdhcmZfc3RyaWN0OworI2RlZmluZSBkd2FyZl9zdHJpY3QgZ2xvYmFsX29wdGlvbnMueF9kd2FyZl9zdHJpY3QKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfZ3RvZ2dsZTsKKyNlbHNlCisgIGludCB4X2ZsYWdfZ3RvZ2dsZTsKKyNkZWZpbmUgZmxhZ19ndG9nZ2xlIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19ndG9nZ2xlCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGNvbnN0IGNoYXIgKmltdWx0aWFyY2g7CisjZWxzZQorICBjb25zdCBjaGFyICp4X2ltdWx0aWFyY2g7CisjZGVmaW5lIGltdWx0aWFyY2ggZ2xvYmFsX29wdGlvbnMueF9pbXVsdGlhcmNoCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGNvbnN0IGNoYXIgKnBsdWdpbmRpcl9zdHJpbmc7CisjZWxzZQorICBjb25zdCBjaGFyICp4X3BsdWdpbmRpcl9zdHJpbmc7CisjZGVmaW5lIHBsdWdpbmRpcl9zdHJpbmcgZ2xvYmFsX29wdGlvbnMueF9wbHVnaW5kaXJfc3RyaW5nCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGVudW0gYWFyY2g2NF9jb2RlX21vZGVsIGFhcmNoNjRfY21vZGVsX3ZhcjsKKyNlbHNlCisgIGVudW0gYWFyY2g2NF9jb2RlX21vZGVsIHhfYWFyY2g2NF9jbW9kZWxfdmFyOworI2RlZmluZSBhYXJjaDY0X2Ntb2RlbF92YXIgZ2xvYmFsX29wdGlvbnMueF9hYXJjaDY0X2Ntb2RlbF92YXIKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfb21pdF9sZWFmX2ZyYW1lX3BvaW50ZXI7CisjZWxzZQorICBpbnQgeF9mbGFnX29taXRfbGVhZl9mcmFtZV9wb2ludGVyOworI2RlZmluZSBmbGFnX29taXRfbGVhZl9mcmFtZV9wb2ludGVyIGdsb2JhbF9vcHRpb25zLnhfZmxhZ19vbWl0X2xlYWZfZnJhbWVfcG9pbnRlcgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBlbnVtIGFhcmNoNjRfdGxzX3R5cGUgYWFyY2g2NF90bHNfZGlhbGVjdDsKKyNlbHNlCisgIGVudW0gYWFyY2g2NF90bHNfdHlwZSB4X2FhcmNoNjRfdGxzX2RpYWxlY3Q7CisjZGVmaW5lIGFhcmNoNjRfdGxzX2RpYWxlY3QgZ2xvYmFsX29wdGlvbnMueF9hYXJjaDY0X3Rsc19kaWFsZWN0CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGNvbnN0IGNoYXIgKmFzbV9maWxlX25hbWU7CisjZWxzZQorICBjb25zdCBjaGFyICp4X2FzbV9maWxlX25hbWU7CisjZGVmaW5lIGFzbV9maWxlX25hbWUgZ2xvYmFsX29wdGlvbnMueF9hc21fZmlsZV9uYW1lCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBwYXNzX2V4aXRfY29kZXM7CisjZWxzZQorICBpbnQgeF9wYXNzX2V4aXRfY29kZXM7CisjZGVmaW5lIHBhc3NfZXhpdF9jb2RlcyBnbG9iYWxfb3B0aW9ucy54X3Bhc3NfZXhpdF9jb2RlcworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgZmxhZ19wZWRhbnRpY19lcnJvcnM7CisjZWxzZQorICBpbnQgeF9mbGFnX3BlZGFudGljX2Vycm9yczsKKyNkZWZpbmUgZmxhZ19wZWRhbnRpY19lcnJvcnMgZ2xvYmFsX29wdGlvbnMueF9mbGFnX3BlZGFudGljX2Vycm9ycworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgdXNlX3BpcGVzOworI2Vsc2UKKyAgaW50IHhfdXNlX3BpcGVzOworI2RlZmluZSB1c2VfcGlwZXMgZ2xvYmFsX29wdGlvbnMueF91c2VfcGlwZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqcHJpbnRfZmlsZV9uYW1lOworI2Vsc2UKKyAgY29uc3QgY2hhciAqeF9wcmludF9maWxlX25hbWU7CisjZGVmaW5lIHByaW50X2ZpbGVfbmFtZSBnbG9iYWxfb3B0aW9ucy54X3ByaW50X2ZpbGVfbmFtZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgcHJpbnRfbXVsdGlfZGlyZWN0b3J5OworI2Vsc2UKKyAgaW50IHhfcHJpbnRfbXVsdGlfZGlyZWN0b3J5OworI2RlZmluZSBwcmludF9tdWx0aV9kaXJlY3RvcnkgZ2xvYmFsX29wdGlvbnMueF9wcmludF9tdWx0aV9kaXJlY3RvcnkKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHByaW50X211bHRpX2xpYjsKKyNlbHNlCisgIGludCB4X3ByaW50X211bHRpX2xpYjsKKyNkZWZpbmUgcHJpbnRfbXVsdGlfbGliIGdsb2JhbF9vcHRpb25zLnhfcHJpbnRfbXVsdGlfbGliCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBwcmludF9tdWx0aV9vc19kaXJlY3Rvcnk7CisjZWxzZQorICBpbnQgeF9wcmludF9tdWx0aV9vc19kaXJlY3Rvcnk7CisjZGVmaW5lIHByaW50X211bHRpX29zX2RpcmVjdG9yeSBnbG9iYWxfb3B0aW9ucy54X3ByaW50X211bHRpX29zX2RpcmVjdG9yeQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgcHJpbnRfbXVsdGlhcmNoOworI2Vsc2UKKyAgaW50IHhfcHJpbnRfbXVsdGlhcmNoOworI2RlZmluZSBwcmludF9tdWx0aWFyY2ggZ2xvYmFsX29wdGlvbnMueF9wcmludF9tdWx0aWFyY2gKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqcHJpbnRfcHJvZ19uYW1lOworI2Vsc2UKKyAgY29uc3QgY2hhciAqeF9wcmludF9wcm9nX25hbWU7CisjZGVmaW5lIHByaW50X3Byb2dfbmFtZSBnbG9iYWxfb3B0aW9ucy54X3ByaW50X3Byb2dfbmFtZQorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgcHJpbnRfc2VhcmNoX2RpcnM7CisjZWxzZQorICBpbnQgeF9wcmludF9zZWFyY2hfZGlyczsKKyNkZWZpbmUgcHJpbnRfc2VhcmNoX2RpcnMgZ2xvYmFsX29wdGlvbnMueF9wcmludF9zZWFyY2hfZGlycworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgcHJpbnRfc3lzcm9vdDsKKyNlbHNlCisgIGludCB4X3ByaW50X3N5c3Jvb3Q7CisjZGVmaW5lIHByaW50X3N5c3Jvb3QgZ2xvYmFsX29wdGlvbnMueF9wcmludF9zeXNyb290CisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBwcmludF9zeXNyb290X2hlYWRlcnNfc3VmZml4OworI2Vsc2UKKyAgaW50IHhfcHJpbnRfc3lzcm9vdF9oZWFkZXJzX3N1ZmZpeDsKKyNkZWZpbmUgcHJpbnRfc3lzcm9vdF9oZWFkZXJzX3N1ZmZpeCBnbG9iYWxfb3B0aW9ucy54X3ByaW50X3N5c3Jvb3RfaGVhZGVyc19zdWZmaXgKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHF1aWV0X2ZsYWc7CisjZWxzZQorICBpbnQgeF9xdWlldF9mbGFnOworI2RlZmluZSBxdWlldF9mbGFnIGdsb2JhbF9vcHRpb25zLnhfcXVpZXRfZmxhZworI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgcmVwb3J0X3RpbWVzOworI2Vsc2UKKyAgaW50IHhfcmVwb3J0X3RpbWVzOworI2RlZmluZSByZXBvcnRfdGltZXMgZ2xvYmFsX29wdGlvbnMueF9yZXBvcnRfdGltZXMKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IGZsYWdfdW5kZWY7CisjZWxzZQorICBpbnQgeF9mbGFnX3VuZGVmOworI2RlZmluZSBmbGFnX3VuZGVmIGdsb2JhbF9vcHRpb25zLnhfZmxhZ191bmRlZgorI2VuZGlmCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKK2V4dGVybiBpbnQgdmVyYm9zZV9mbGFnOworI2Vsc2UKKyAgaW50IHhfdmVyYm9zZV9mbGFnOworI2RlZmluZSB2ZXJib3NlX2ZsYWcgZ2xvYmFsX29wdGlvbnMueF92ZXJib3NlX2ZsYWcKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gaW50IHZlcnNpb25fZmxhZzsKKyNlbHNlCisgIGludCB4X3ZlcnNpb25fZmxhZzsKKyNkZWZpbmUgdmVyc2lvbl9mbGFnIGdsb2JhbF9vcHRpb25zLnhfdmVyc2lvbl9mbGFnCisjZW5kaWYKKyNpZmRlZiBHRU5FUkFUT1JfRklMRQorZXh0ZXJuIGludCBpbmhpYml0X3dhcm5pbmdzOworI2Vsc2UKKyAgaW50IHhfaW5oaWJpdF93YXJuaW5nczsKKyNkZWZpbmUgaW5oaWJpdF93YXJuaW5ncyBnbG9iYWxfb3B0aW9ucy54X2luaGliaXRfd2FybmluZ3MKKyNlbmRpZgorI2lmZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gY29uc3QgY2hhciAqd3JhcHBlcl9zdHJpbmc7CisjZWxzZQorICBjb25zdCBjaGFyICp4X3dyYXBwZXJfc3RyaW5nOworI2RlZmluZSB3cmFwcGVyX3N0cmluZyBnbG9iYWxfb3B0aW9ucy54X3dyYXBwZXJfc3RyaW5nCisjZW5kaWYKKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKyAgYm9vbCBmcm9udGVuZF9zZXRfZmxhZ19hc3NvY2lhdGl2ZV9tYXRoOworI2VuZGlmCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisgIGJvb2wgZnJvbnRlbmRfc2V0X2ZsYWdfY3hfbGltaXRlZF9yYW5nZTsKKyNlbmRpZgorI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorICBib29sIGZyb250ZW5kX3NldF9mbGFnX2Zpbml0ZV9tYXRoX29ubHk7CisjZW5kaWYKKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKyAgYm9vbCBmcm9udGVuZF9zZXRfZmxhZ19lcnJub19tYXRoOworI2VuZGlmCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisgIGJvb2wgZnJvbnRlbmRfc2V0X2ZsYWdfcmVjaXByb2NhbF9tYXRoOworI2VuZGlmCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisgIGJvb2wgZnJvbnRlbmRfc2V0X2ZsYWdfcm91bmRpbmdfbWF0aDsKKyNlbmRpZgorI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorICBib29sIGZyb250ZW5kX3NldF9mbGFnX3NpZ25hbGluZ19uYW5zOworI2VuZGlmCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisgIGJvb2wgZnJvbnRlbmRfc2V0X2ZsYWdfc2lnbmVkX3plcm9zOworI2VuZGlmCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisgIGJvb2wgZnJvbnRlbmRfc2V0X2ZsYWdfdHJhcHBpbmdfbWF0aDsKKyNlbmRpZgorI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorICBib29sIGZyb250ZW5kX3NldF9mbGFnX3Vuc2FmZV9tYXRoX29wdGltaXphdGlvbnM7CisjZW5kaWYKKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKK307CitleHRlcm4gc3RydWN0IGdjY19vcHRpb25zIGdsb2JhbF9vcHRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBnY2Nfb3B0aW9ucyBnbG9iYWxfb3B0aW9uc19pbml0OworZXh0ZXJuIHN0cnVjdCBnY2Nfb3B0aW9ucyBnbG9iYWxfb3B0aW9uc19zZXQ7CisjZGVmaW5lIHRhcmdldF9mbGFnc19leHBsaWNpdCBnbG9iYWxfb3B0aW9uc19zZXQueF90YXJnZXRfZmxhZ3MKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChJTl9MSUJHQ0MyKSAmJiAhZGVmaW5lZChJTl9UQVJHRVRfTElCUykgJiYgIWRlZmluZWQoSU5fUlRTKQorCisvKiBTdHJ1Y3R1cmUgdG8gc2F2ZS9yZXN0b3JlIG9wdGltaXphdGlvbiBhbmQgdGFyZ2V0IHNwZWNpZmljIG9wdGlvbnMuICAqLworc3RydWN0IEdUWSgoKSkgY2xfb3B0aW1pemF0aW9uCit7CisgIGludCB4X2FsaWduX2Z1bmN0aW9uczsKKyAgaW50IHhfYWxpZ25fanVtcHM7CisgIGludCB4X2FsaWduX2xhYmVsczsKKyAgaW50IHhfYWxpZ25fbG9vcHM7CisgIGludCB4X2ZsYWdfc2NoZWRfc3RhbGxlZF9pbnNuczsKKyAgaW50IHhfZmxhZ19zY2hlZF9zdGFsbGVkX2luc25zX2RlcDsKKyAgZW51bSBmcF9jb250cmFjdF9tb2RlIHhfZmxhZ19mcF9jb250cmFjdF9tb2RlOworICB1bnNpZ25lZCBjaGFyIHhfb3B0aW1pemU7CisgIHVuc2lnbmVkIGNoYXIgeF9vcHRpbWl6ZV9zaXplOworICBzaWduZWQgY2hhciB4X2ZsYWdfYWdncmVzc2l2ZV9sb29wX29wdGltaXphdGlvbnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19hc3luY2hyb25vdXNfdW53aW5kX3RhYmxlczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2JyYW5jaF9vbl9jb3VudF9yZWc7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19icmFuY2hfcHJvYmFiaWxpdGllczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTI7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19idHJfYmJfZXhjbHVzaXZlOworICBzaWduZWQgY2hhciB4X2ZsYWdfY2FsbGVyX3NhdmVzOworICBzaWduZWQgY2hhciB4X2ZsYWdfY29tYmluZV9zdGFja19hZGp1c3RtZW50czsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX25vX2NvbW1vbjsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2NvbXBhcmVfZWxpbV9hZnRlcl9yZWxvYWQ7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19jb25zZXJ2ZV9zdGFjazsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2Nwcm9wX3JlZ2lzdGVyczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2Nyb3NzanVtcGluZzsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2NzZV9mb2xsb3dfanVtcHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19jeF9mb3J0cmFuX3J1bGVzOworICBzaWduZWQgY2hhciB4X2ZsYWdfY3hfbGltaXRlZF9yYW5nZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2RhdGFfc2VjdGlvbnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19kY2U7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19kZWZlcl9wb3A7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19kZWxheWVkX2JyYW5jaDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2RlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzOworICBzaWduZWQgY2hhciB4X2ZsYWdfZGV2aXJ0dWFsaXplOworICBzaWduZWQgY2hhciB4X2ZsYWdfZHNlOworICBzaWduZWQgY2hhciB4X2ZsYWdfZWFybHlfaW5saW5pbmc7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19leGNlcHRpb25zOworICBzaWduZWQgY2hhciB4X2ZsYWdfZXhwZW5zaXZlX29wdGltaXphdGlvbnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19maW5pdGVfbWF0aF9vbmx5OworICBzaWduZWQgY2hhciB4X2ZsYWdfZmxvYXRfc3RvcmU7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19mb3J3YXJkX3Byb3BhZ2F0ZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2djc2U7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19nY3NlX2FmdGVyX3JlbG9hZDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2djc2VfbGFzOworICBzaWduZWQgY2hhciB4X2ZsYWdfZ2NzZV9sbTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2djc2Vfc207CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19ncmFwaGl0ZV9pZGVudGl0eTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2d1ZXNzX2JyYW5jaF9wcm9iOworICBzaWduZWQgY2hhciB4X2ZsYWdfaG9pc3RfYWRqYWNlbnRfbG9hZHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19pZl9jb252ZXJzaW9uOworICBzaWduZWQgY2hhciB4X2ZsYWdfaWZfY29udmVyc2lvbjI7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19ub19pbmxpbmU7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19pbmxpbmVfYXRvbWljczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2lubGluZV9mdW5jdGlvbnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19pbmxpbmVfZnVuY3Rpb25zX2NhbGxlZF9vbmNlOworICBzaWduZWQgY2hhciB4X2ZsYWdfaW5saW5lX3NtYWxsX2Z1bmN0aW9uczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2lwYV9jcDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2lwYV9jcF9jbG9uZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2lwYV9wcm9maWxlOworICBzaWduZWQgY2hhciB4X2ZsYWdfaXBhX3B0YTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2lwYV9wdXJlX2NvbnN0OworICBzaWduZWQgY2hhciB4X2ZsYWdfaXBhX3JlZmVyZW5jZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2lwYV9zcmE7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19pcmFfaG9pc3RfcHJlc3N1cmU7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19pdm9wdHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19qdW1wX3RhYmxlczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2xvb3BfYmxvY2s7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19sb29wX2ludGVyY2hhbmdlOworICBzaWduZWQgY2hhciB4X2ZsYWdfbG9vcF9vcHRpbWl6ZV9pc2w7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19sb29wX3BhcmFsbGVsaXplX2FsbDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2xvb3Bfc3RyaXBfbWluZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX2Vycm5vX21hdGg7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19tZXJnZV9jb25zdGFudHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19tb2R1bG9fc2NoZWQ7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19tb3ZlX2xvb3BfaW52YXJpYW50czsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX25vbl9jYWxsX2V4Y2VwdGlvbnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19ub3Rocm93X29wdDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX29taXRfZnJhbWVfcG9pbnRlcjsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX29wdF9pbmZvOworICBzaWduZWQgY2hhciB4X2ZsYWdfcmVnbW92ZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX29wdGltaXplX3NpYmxpbmdfY2FsbHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19vcHRpbWl6ZV9zdHJsZW47CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19wYWNrX3N0cnVjdDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3BlZWxfbG9vcHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19ub19wZWVwaG9sZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3BlZXBob2xlMjsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3ByZWRpY3RpdmVfY29tbW9uaW5nOworICBzaWduZWQgY2hhciB4X2ZsYWdfcHJlZmV0Y2hfbG9vcF9hcnJheXM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19wY2Nfc3RydWN0X3JldHVybjsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3JlbmFtZV9yZWdpc3RlcnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19yZW9yZGVyX2Jsb2NrczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3Jlb3JkZXJfYmxvY2tzX2FuZF9wYXJ0aXRpb247CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19yZW9yZGVyX2Z1bmN0aW9uczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3JlcnVuX2NzZV9hZnRlcl9sb29wOworICBzaWduZWQgY2hhciB4X2ZsYWdfcmVzY2hlZF9tb2R1bG9fc2NoZWQ7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19yb3VuZGluZ19tYXRoOworICBzaWduZWQgY2hhciB4X2ZsYWdfcnR0aTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NjaGVkX2NyaXRpY2FsX3BhdGhfaGV1cmlzdGljOworICBzaWduZWQgY2hhciB4X2ZsYWdfc2NoZWRfZGVwX2NvdW50X2hldXJpc3RpYzsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NjaGVkX2dyb3VwX2hldXJpc3RpYzsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NjaGVkdWxlX2ludGVyYmxvY2s7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zY2hlZF9sYXN0X2luc25faGV1cmlzdGljOworICBzaWduZWQgY2hhciB4X2ZsYWdfc2NoZWRfcHJlc3N1cmU7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zY2hlZF9yYW5rX2hldXJpc3RpYzsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlOworICBzaWduZWQgY2hhciB4X2ZsYWdfc2NoZWRfc3BlY19pbnNuX2hldXJpc3RpYzsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlX2xvYWQ7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zY2hlZHVsZV9zcGVjdWxhdGl2ZV9sb2FkX2Rhbmdlcm91czsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NjaGVkMl91c2Vfc3VwZXJibG9ja3M7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zY2hlZHVsZV9pbnNuczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NjaGVkdWxlX2luc25zX2FmdGVyX3JlbG9hZDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NlY3Rpb25fYW5jaG9yczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NlbF9zY2hlZF9waXBlbGluaW5nOworICBzaWduZWQgY2hhciB4X2ZsYWdfc2VsX3NjaGVkX3BpcGVsaW5pbmdfb3V0ZXJfbG9vcHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zZWxfc2NoZWRfcmVzY2hlZHVsZV9waXBlbGluZWQ7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zZWxlY3RpdmVfc2NoZWR1bGluZzsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NlbGVjdGl2ZV9zY2hlZHVsaW5nMjsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3Nob3J0X2RvdWJsZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3Nob3J0X2VudW1zOworICBzaWduZWQgY2hhciB4X2ZsYWdfc2hvcnRfd2NoYXI7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zaHJpbmtfd3JhcDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NpZ25hbGluZ19uYW5zOworICBzaWduZWQgY2hhciB4X2ZsYWdfc2lnbmVkX3plcm9zOworICBzaWduZWQgY2hhciB4X2ZsYWdfc2luZ2xlX3ByZWNpc2lvbl9jb25zdGFudDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NwbGl0X2l2c19pbl91bnJvbGxlcjsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3NwbGl0X3dpZGVfdHlwZXM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zdHJpY3RfYWxpYXNpbmc7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ19zdHJpY3RfZW51bXM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190aHJlYWRfanVtcHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190aHJlYWRzYWZlX3N0YXRpY3M7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190b3BsZXZlbF9yZW9yZGVyOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJhcHBpbmdfbWF0aDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyYXB2OworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9iaXRfY2NwOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9idWlsdGluX2NhbGxfZGNlOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9jY3A7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX2NoOworICBzaWduZWQgY2hhciB4X2ZsYWdfc3NhX2NvYWxlc2NlX3ZhcnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX2NvcHlfcHJvcDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyZWVfY29weXJlbmFtZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyZWVfY3NlbGltOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9kY2U7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX2RvbTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyZWVfZHNlOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9mb3J3cHJvcDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyZWVfZnJlOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9sb29wX2Rpc3RyaWJ1dGVfcGF0dGVybnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX2xvb3BfZGlzdHJpYnV0aW9uOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9sb29wX2lmX2NvbnZlcnQ7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX2xvb3BfaWZfY29udmVydF9zdG9yZXM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX2xvb3BfaW07CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX2xvb3BfaXZjYW5vbjsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyZWVfbG9vcF9vcHRpbWl6ZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyZWVfbGl2ZV9yYW5nZV9zcGxpdDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyZWVfcGFydGlhbF9wcmU7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX3BoaXByb3A7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX3ByZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3RyZWVfcHRhOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9yZWFzc29jOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9zY2V2X2Nwcm9wOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9zaW5rOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9zbHBfdmVjdG9yaXplOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9zbHNyOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV9zcmE7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX3N3aXRjaF9jb252ZXJzaW9uOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV90YWlsX21lcmdlOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV90ZXI7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX3ZlY3RfbG9vcF92ZXJzaW9uOworICBzaWduZWQgY2hhciB4X2ZsYWdfdHJlZV92ZWN0b3JpemU7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ190cmVlX3ZycDsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3VuaXRfYXRfYV90aW1lOworICBzaWduZWQgY2hhciB4X2ZsYWdfdW5yb2xsX2FsbF9sb29wczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3Vucm9sbF9sb29wczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3Vuc2FmZV9sb29wX29wdGltaXphdGlvbnM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ191bnNhZmVfbWF0aF9vcHRpbWl6YXRpb25zOworICBzaWduZWQgY2hhciB4X2ZsYWdfdW5zd2l0Y2hfbG9vcHM7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ191bndpbmRfdGFibGVzOworICBzaWduZWQgY2hhciB4X2ZsYWdfdmFyX3RyYWNraW5nOworICBzaWduZWQgY2hhciB4X2ZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzOworICBzaWduZWQgY2hhciB4X2ZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzX3RvZ2dsZTsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3Zhcl90cmFja2luZ191bmluaXQ7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ192YXJpYWJsZV9leHBhbnNpb25faW5fdW5yb2xsZXI7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ192ZWN0X2Nvc3RfbW9kZWw7CisgIHNpZ25lZCBjaGFyIHhfZmxhZ192YWx1ZV9wcm9maWxlX3RyYW5zZm9ybWF0aW9uczsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3dlYjsKKyAgc2lnbmVkIGNoYXIgeF9mbGFnX3dob2xlX3Byb2dyYW07CisgIHNpZ25lZCBjaGFyIHhfZmxhZ193cmFwdjsKK307CisKKy8qIFN0cnVjdHVyZSB0byBzYXZlL3Jlc3RvcmUgc2VsZWN0ZWQgdGFyZ2V0IHNwZWNpZmljIG9wdGlvbnMuICAqLworc3RydWN0IEdUWSgoKSkgY2xfdGFyZ2V0X29wdGlvbgoreworICBzaWduZWQgY2hhciB4X2ZsYWdfb21pdF9sZWFmX2ZyYW1lX3BvaW50ZXI7Cit9OworCisKKy8qIFNhdmUgb3B0aW1pemF0aW9uIHZhcmlhYmxlcyBpbnRvIGEgc3RydWN0dXJlLiAgKi8KK2V4dGVybiB2b2lkIGNsX29wdGltaXphdGlvbl9zYXZlIChzdHJ1Y3QgY2xfb3B0aW1pemF0aW9uICosIHN0cnVjdCBnY2Nfb3B0aW9ucyAqKTsKKworLyogUmVzdG9yZSBvcHRpbWl6YXRpb24gdmFyaWFibGVzIGZyb20gYSBzdHJ1Y3R1cmUuICAqLworZXh0ZXJuIHZvaWQgY2xfb3B0aW1pemF0aW9uX3Jlc3RvcmUgKHN0cnVjdCBnY2Nfb3B0aW9ucyAqLCBzdHJ1Y3QgY2xfb3B0aW1pemF0aW9uICopOworCisvKiBQcmludCBvcHRpbWl6YXRpb24gdmFyaWFibGVzIGZyb20gYSBzdHJ1Y3R1cmUuICAqLworZXh0ZXJuIHZvaWQgY2xfb3B0aW1pemF0aW9uX3ByaW50IChGSUxFICosIGludCwgc3RydWN0IGNsX29wdGltaXphdGlvbiAqKTsKKworLyogU2F2ZSBzZWxlY3RlZCBvcHRpb24gdmFyaWFibGVzIGludG8gYSBzdHJ1Y3R1cmUuICAqLworZXh0ZXJuIHZvaWQgY2xfdGFyZ2V0X29wdGlvbl9zYXZlIChzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiAqLCBzdHJ1Y3QgZ2NjX29wdGlvbnMgKik7CisKKy8qIFJlc3RvcmUgc2VsZWN0ZWQgb3B0aW9uIHZhcmlhYmxlcyBmcm9tIGEgc3RydWN0dXJlLiAgKi8KK2V4dGVybiB2b2lkIGNsX3RhcmdldF9vcHRpb25fcmVzdG9yZSAoc3RydWN0IGdjY19vcHRpb25zICosIHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICopOworCisvKiBQcmludCB0YXJnZXQgb3B0aW9uIHZhcmlhYmxlcyBmcm9tIGEgc3RydWN0dXJlLiAgKi8KK2V4dGVybiB2b2lkIGNsX3RhcmdldF9vcHRpb25fcHJpbnQgKEZJTEUgKiwgaW50LCBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiAqKTsKKworLyogQW55dGhpbmcgdGhhdCBpbmNsdWRlcyB0bS5oLCBkb2VzIG5vdCBuZWNlc3NhcmlseSBuZWVkIHRoaXMuICAqLworI2lmICFkZWZpbmVkKEdDQ19UTV9IKQorI2luY2x1ZGUgImlucHV0LmgiIC8qIGZvciBsb2NhdGlvbl90ICovCitib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitjb21tb25faGFuZGxlX29wdGlvbl9hdXRvIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMsICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gKmRlY29kZWQsICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGFuZ19tYXNrLCBpbnQga2luZCwgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl90IGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJzICpoYW5kbGVycywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsgICAgICAgICAgICAgICAgICAgCitib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitBZGFfaGFuZGxlX29wdGlvbl9hdXRvIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMsICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0c19zZXQsICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzY29kZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYW5nX21hc2ssIGludCBraW5kLCAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX3QgbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjbF9vcHRpb25faGFuZGxlcnMgKmhhbmRsZXJzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWdub3N0aWNfY29udGV4dCAqZGMpOyAgICAgICAgICAgICAgICAgICAKK2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0FkYVNDSUxfaGFuZGxlX29wdGlvbl9hdXRvIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMsICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0c19zZXQsICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzY29kZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYW5nX21hc2ssIGludCBraW5kLCAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX3QgbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjbF9vcHRpb25faGFuZGxlcnMgKmhhbmRsZXJzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWdub3N0aWNfY29udGV4dCAqZGMpOyAgICAgICAgICAgICAgICAgICAKK2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0FkYVdoeV9oYW5kbGVfb3B0aW9uX2F1dG8gKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNjb2RlLCBjb25zdCBjaGFyICphcmcsIGludCB2YWx1ZSwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywgaW50IGtpbmQsICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25fdCBsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNsX29wdGlvbl9oYW5kbGVycyAqaGFuZGxlcnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ25vc3RpY19jb250ZXh0ICpkYyk7ICAgICAgICAgICAgICAgICAgIAorYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ19oYW5kbGVfb3B0aW9uX2F1dG8gKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNjb2RlLCBjb25zdCBjaGFyICphcmcsIGludCB2YWx1ZSwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywgaW50IGtpbmQsICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25fdCBsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNsX29wdGlvbl9oYW5kbGVycyAqaGFuZGxlcnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ25vc3RpY19jb250ZXh0ICpkYyk7ICAgICAgICAgICAgICAgICAgIAorYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorQ1hYX2hhbmRsZV9vcHRpb25fYXV0byAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzLCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2NvZGUsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGFuZ19tYXNrLCBpbnQga2luZCwgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl90IGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJzICpoYW5kbGVycywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsgICAgICAgICAgICAgICAgICAgCitib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitGb3J0cmFuX2hhbmRsZV9vcHRpb25fYXV0byAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzLCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2NvZGUsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGFuZ19tYXNrLCBpbnQga2luZCwgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl90IGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJzICpoYW5kbGVycywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsgICAgICAgICAgICAgICAgICAgCitib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitHb19oYW5kbGVfb3B0aW9uX2F1dG8gKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNjb2RlLCBjb25zdCBjaGFyICphcmcsIGludCB2YWx1ZSwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywgaW50IGtpbmQsICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25fdCBsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNsX29wdGlvbl9oYW5kbGVycyAqaGFuZGxlcnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ25vc3RpY19jb250ZXh0ICpkYyk7ICAgICAgICAgICAgICAgICAgIAorYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorSmF2YV9oYW5kbGVfb3B0aW9uX2F1dG8gKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNjb2RlLCBjb25zdCBjaGFyICphcmcsIGludCB2YWx1ZSwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywgaW50IGtpbmQsICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25fdCBsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNsX29wdGlvbl9oYW5kbGVycyAqaGFuZGxlcnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ25vc3RpY19jb250ZXh0ICpkYyk7ICAgICAgICAgICAgICAgICAgIAorYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTFRPX2hhbmRsZV9vcHRpb25fYXV0byAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzLCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2NvZGUsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGFuZ19tYXNrLCBpbnQga2luZCwgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl90IGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJzICpoYW5kbGVycywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsgICAgICAgICAgICAgICAgICAgCitib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitPYmpDX2hhbmRsZV9vcHRpb25fYXV0byAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzLCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LCAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2NvZGUsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGFuZ19tYXNrLCBpbnQga2luZCwgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl90IGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJzICpoYW5kbGVycywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsgICAgICAgICAgICAgICAgICAgCitib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitPYmpDWFhfaGFuZGxlX29wdGlvbl9hdXRvIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMsICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0c19zZXQsICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzY29kZSwgY29uc3QgY2hhciAqYXJnLCBpbnQgdmFsdWUsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYW5nX21hc2ssIGludCBraW5kLCAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX3QgbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjbF9vcHRpb25faGFuZGxlcnMgKmhhbmRsZXJzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWdub3N0aWNfY29udGV4dCAqZGMpOyAgICAgICAgICAgICAgICAgICAKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgTUFTS19CSUdfRU5EICgxIDw8IDApCisjZGVmaW5lIE1BU0tfR0VORVJBTF9SRUdTX09OTFkgKDEgPDwgMSkKKyNkZWZpbmUgTUFTS19TVFJJQ1RfQUxJR04gKDEgPDwgMikKKworI2RlZmluZSBUQVJHRVRfQklHX0VORCAoKHRhcmdldF9mbGFncyAmIE1BU0tfQklHX0VORCkgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX0dFTkVSQUxfUkVHU19PTkxZICgodGFyZ2V0X2ZsYWdzICYgTUFTS19HRU5FUkFMX1JFR1NfT05MWSkgIT0gMCkKKyNkZWZpbmUgVEFSR0VUX1NUUklDVF9BTElHTiAoKHRhcmdldF9mbGFncyAmIE1BU0tfU1RSSUNUX0FMSUdOKSAhPSAwKQorCisKKyNkZWZpbmUgQ0xfQWRhICAgICAgICAoMVUgPDwgMCkKKyNkZWZpbmUgQ0xfQWRhU0NJTCAgICAoMVUgPDwgMSkKKyNkZWZpbmUgQ0xfQWRhV2h5ICAgICAoMVUgPDwgMikKKyNkZWZpbmUgQ0xfQyAgICAgICAgICAoMVUgPDwgMykKKyNkZWZpbmUgQ0xfQ1hYICAgICAgICAoMVUgPDwgNCkKKyNkZWZpbmUgQ0xfRm9ydHJhbiAgICAoMVUgPDwgNSkKKyNkZWZpbmUgQ0xfR28gICAgICAgICAoMVUgPDwgNikKKyNkZWZpbmUgQ0xfSmF2YSAgICAgICAoMVUgPDwgNykKKyNkZWZpbmUgQ0xfTFRPICAgICAgICAoMVUgPDwgOCkKKyNkZWZpbmUgQ0xfT2JqQyAgICAgICAoMVUgPDwgOSkKKyNkZWZpbmUgQ0xfT2JqQ1hYICAgICAoMVUgPDwgMTApCisjZGVmaW5lIENMX0xBTkdfQUxMICAgKCgxVSA8PCAxMSkgLSAxKQorCitlbnVtIG9wdF9jb2RlCit7CisgIE9QVF9fX18gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtIyMjICovCisgIC8qIE9QVF9fQ0xBU1NQQVRIID0gMSwgKi8gICAgICAgICAgICAgICAgICAvKiAtLUNMQVNTUEFUSCAqLworICAvKiBPUFRfX2FsbF93YXJuaW5ncyA9IDIsICovICAgICAgICAgICAgICAgLyogLS1hbGwtd2FybmluZ3MgKi8KKyAgLyogT1BUX19hbnNpID0gMywgKi8gICAgICAgICAgICAgICAgICAgICAgIC8qIC0tYW5zaSAqLworICAvKiBPUFRfX2Fzc2VtYmxlID0gNCwgKi8gICAgICAgICAgICAgICAgICAgLyogLS1hc3NlbWJsZSAqLworICAvKiBPUFRfX2Fzc2VydCA9IDUsICovICAgICAgICAgICAgICAgICAgICAgLyogLS1hc3NlcnQgKi8KKyAgLyogT1BUX19hc3NlcnRfID0gNiwgKi8gICAgICAgICAgICAgICAgICAgIC8qIC0tYXNzZXJ0PSAqLworICAvKiBPUFRfX2Jvb3RjbGFzc3BhdGggPSA3LCAqLyAgICAgICAgICAgICAgLyogLS1ib290Y2xhc3NwYXRoICovCisgIC8qIE9QVF9fY2xhc3NwYXRoID0gOCwgKi8gICAgICAgICAgICAgICAgICAvKiAtLWNsYXNzcGF0aCAqLworICAvKiBPUFRfX2NvbW1lbnRzID0gOSwgKi8gICAgICAgICAgICAgICAgICAgLyogLS1jb21tZW50cyAqLworICAvKiBPUFRfX2NvbW1lbnRzX2luX21hY3JvcyA9IDEwLCAqLyAgICAgICAgLyogLS1jb21tZW50cy1pbi1tYWNyb3MgKi8KKyAgLyogT1BUX19jb21waWxlID0gMTEsICovICAgICAgICAgICAgICAgICAgIC8qIC0tY29tcGlsZSAqLworICAvKiBPUFRfX2NvdmVyYWdlID0gMTIsICovICAgICAgICAgICAgICAgICAgLyogLS1jb3ZlcmFnZSAqLworICAvKiBPUFRfX2RlYnVnID0gMTMsICovICAgICAgICAgICAgICAgICAgICAgLyogLS1kZWJ1ZyAqLworICAvKiBPUFRfX2RlZmluZV9tYWNybyA9IDE0LCAqLyAgICAgICAgICAgICAgLyogLS1kZWZpbmUtbWFjcm8gKi8KKyAgLyogT1BUX19kZWZpbmVfbWFjcm9fID0gMTUsICovICAgICAgICAgICAgIC8qIC0tZGVmaW5lLW1hY3JvPSAqLworICAvKiBPUFRfX2RlcGVuZGVuY2llcyA9IDE2LCAqLyAgICAgICAgICAgICAgLyogLS1kZXBlbmRlbmNpZXMgKi8KKyAgLyogT1BUX19kdW1wID0gMTcsICovICAgICAgICAgICAgICAgICAgICAgIC8qIC0tZHVtcCAqLworICAvKiBPUFRfX2R1bXBfID0gMTgsICovICAgICAgICAgICAgICAgICAgICAgLyogLS1kdW1wPSAqLworICAvKiBPUFRfX2R1bXBiYXNlID0gMTksICovICAgICAgICAgICAgICAgICAgLyogLS1kdW1wYmFzZSAqLworICAvKiBPUFRfX2R1bXBkaXIgPSAyMCwgKi8gICAgICAgICAgICAgICAgICAgLyogLS1kdW1wZGlyICovCisgIC8qIE9QVF9fZW5jb2RpbmcgPSAyMSwgKi8gICAgICAgICAgICAgICAgICAvKiAtLWVuY29kaW5nICovCisgIC8qIE9QVF9fZW50cnkgPSAyMiwgKi8gICAgICAgICAgICAgICAgICAgICAvKiAtLWVudHJ5ICovCisgIC8qIE9QVF9fZW50cnlfID0gMjMsICovICAgICAgICAgICAgICAgICAgICAvKiAtLWVudHJ5PSAqLworICAvKiBPUFRfX2V4dGRpcnMgPSAyNCwgKi8gICAgICAgICAgICAgICAgICAgLyogLS1leHRkaXJzICovCisgIC8qIE9QVF9fZXh0cmFfd2FybmluZ3MgPSAyNSwgKi8gICAgICAgICAgICAvKiAtLWV4dHJhLXdhcm5pbmdzICovCisgIC8qIE9QVF9fZm9yX2Fzc2VtYmxlciA9IDI2LCAqLyAgICAgICAgICAgICAvKiAtLWZvci1hc3NlbWJsZXIgKi8KKyAgLyogT1BUX19mb3JfYXNzZW1ibGVyXyA9IDI3LCAqLyAgICAgICAgICAgIC8qIC0tZm9yLWFzc2VtYmxlcj0gKi8KKyAgLyogT1BUX19mb3JfbGlua2VyID0gMjgsICovICAgICAgICAgICAgICAgIC8qIC0tZm9yLWxpbmtlciAqLworICAvKiBPUFRfX2Zvcl9saW5rZXJfID0gMjksICovICAgICAgICAgICAgICAgLyogLS1mb3ItbGlua2VyPSAqLworICAvKiBPUFRfX2ZvcmNlX2xpbmsgPSAzMCwgKi8gICAgICAgICAgICAgICAgLyogLS1mb3JjZS1saW5rICovCisgIC8qIE9QVF9fZm9yY2VfbGlua18gPSAzMSwgKi8gICAgICAgICAgICAgICAvKiAtLWZvcmNlLWxpbms9ICovCisgIE9QVF9faGVscCA9IDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtLWhlbHAgKi8KKyAgT1BUX19oZWxwXyA9IDMzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0taGVscD0gKi8KKyAgLyogT1BUX19pbWFjcm9zID0gMzQsICovICAgICAgICAgICAgICAgICAgIC8qIC0taW1hY3JvcyAqLworICAvKiBPUFRfX2ltYWNyb3NfID0gMzUsICovICAgICAgICAgICAgICAgICAgLyogLS1pbWFjcm9zPSAqLworICAvKiBPUFRfX2luY2x1ZGUgPSAzNiwgKi8gICAgICAgICAgICAgICAgICAgLyogLS1pbmNsdWRlICovCisgIC8qIE9QVF9faW5jbHVkZV9iYXJyaWVyID0gMzcsICovICAgICAgICAgICAvKiAtLWluY2x1ZGUtYmFycmllciAqLworICAvKiBPUFRfX2luY2x1ZGVfZGlyZWN0b3J5ID0gMzgsICovICAgICAgICAgLyogLS1pbmNsdWRlLWRpcmVjdG9yeSAqLworICAvKiBPUFRfX2luY2x1ZGVfZGlyZWN0b3J5X2FmdGVyID0gMzksICovICAgLyogLS1pbmNsdWRlLWRpcmVjdG9yeS1hZnRlciAqLworICAvKiBPUFRfX2luY2x1ZGVfZGlyZWN0b3J5X2FmdGVyXyA9IDQwLCAqLyAgLyogLS1pbmNsdWRlLWRpcmVjdG9yeS1hZnRlcj0gKi8KKyAgLyogT1BUX19pbmNsdWRlX2RpcmVjdG9yeV8gPSA0MSwgKi8gICAgICAgIC8qIC0taW5jbHVkZS1kaXJlY3Rvcnk9ICovCisgIC8qIE9QVF9faW5jbHVkZV9wcmVmaXggPSA0MiwgKi8gICAgICAgICAgICAvKiAtLWluY2x1ZGUtcHJlZml4ICovCisgIC8qIE9QVF9faW5jbHVkZV9wcmVmaXhfID0gNDMsICovICAgICAgICAgICAvKiAtLWluY2x1ZGUtcHJlZml4PSAqLworICAvKiBPUFRfX2luY2x1ZGVfd2l0aF9wcmVmaXggPSA0NCwgKi8gICAgICAgLyogLS1pbmNsdWRlLXdpdGgtcHJlZml4ICovCisgIC8qIE9QVF9faW5jbHVkZV93aXRoX3ByZWZpeF9hZnRlciA9IDQ1LCAqLyAvKiAtLWluY2x1ZGUtd2l0aC1wcmVmaXgtYWZ0ZXIgKi8KKyAgLyogT1BUX19pbmNsdWRlX3dpdGhfcHJlZml4X2FmdGVyXyA9IDQ2LCAqLy8qIC0taW5jbHVkZS13aXRoLXByZWZpeC1hZnRlcj0gKi8KKyAgLyogT1BUX19pbmNsdWRlX3dpdGhfcHJlZml4X2JlZm9yZSA9IDQ3LCAqLy8qIC0taW5jbHVkZS13aXRoLXByZWZpeC1iZWZvcmUgKi8KKyAgLyogT1BUX19pbmNsdWRlX3dpdGhfcHJlZml4X2JlZm9yZV8gPSA0OCwgKi8vKiAtLWluY2x1ZGUtd2l0aC1wcmVmaXgtYmVmb3JlPSAqLworICAvKiBPUFRfX2luY2x1ZGVfd2l0aF9wcmVmaXhfID0gNDksICovICAgICAgLyogLS1pbmNsdWRlLXdpdGgtcHJlZml4PSAqLworICAvKiBPUFRfX2luY2x1ZGVfID0gNTAsICovICAgICAgICAgICAgICAgICAgLyogLS1pbmNsdWRlPSAqLworICAvKiBPUFRfX2xhbmd1YWdlID0gNTEsICovICAgICAgICAgICAgICAgICAgLyogLS1sYW5ndWFnZSAqLworICAvKiBPUFRfX2xhbmd1YWdlXyA9IDUyLCAqLyAgICAgICAgICAgICAgICAgLyogLS1sYW5ndWFnZT0gKi8KKyAgLyogT1BUX19saWJyYXJ5X2RpcmVjdG9yeSA9IDUzLCAqLyAgICAgICAgIC8qIC0tbGlicmFyeS1kaXJlY3RvcnkgKi8KKyAgLyogT1BUX19saWJyYXJ5X2RpcmVjdG9yeV8gPSA1NCwgKi8gICAgICAgIC8qIC0tbGlicmFyeS1kaXJlY3Rvcnk9ICovCisgIC8qIE9QVF9fbm9fY2Fub25pY2FsX3ByZWZpeGVzID0gNTUsICovICAgICAvKiAtLW5vLWNhbm9uaWNhbC1wcmVmaXhlcyAqLworICAvKiBPUFRfX25vX2ludGVncmF0ZWRfY3BwID0gNTYsICovICAgICAgICAgLyogLS1uby1pbnRlZ3JhdGVkLWNwcCAqLworICAvKiBPUFRfX25vX2xpbmVfY29tbWFuZHMgPSA1NywgKi8gICAgICAgICAgLyogLS1uby1saW5lLWNvbW1hbmRzICovCisgIC8qIE9QVF9fbm9fc3RhbmRhcmRfaW5jbHVkZXMgPSA1OCwgKi8gICAgICAvKiAtLW5vLXN0YW5kYXJkLWluY2x1ZGVzICovCisgIC8qIE9QVF9fbm9fc3RhbmRhcmRfbGlicmFyaWVzID0gNTksICovICAgICAvKiAtLW5vLXN0YW5kYXJkLWxpYnJhcmllcyAqLworICBPUFRfX25vX3N5c3Jvb3Rfc3VmZml4ID0gNjAsICAgICAgICAgICAgICAgLyogLS1uby1zeXNyb290LXN1ZmZpeCAqLworICAvKiBPUFRfX25vX3dhcm5pbmdzID0gNjEsICovICAgICAgICAgICAgICAgLyogLS1uby13YXJuaW5ncyAqLworICAvKiBPUFRfX29wdGltaXplID0gNjIsICovICAgICAgICAgICAgICAgICAgLyogLS1vcHRpbWl6ZSAqLworICAvKiBPUFRfX291dHB1dCA9IDYzLCAqLyAgICAgICAgICAgICAgICAgICAgLyogLS1vdXRwdXQgKi8KKyAgLyogT1BUX19vdXRwdXRfY2xhc3NfZGlyZWN0b3J5ID0gNjQsICovICAgIC8qIC0tb3V0cHV0LWNsYXNzLWRpcmVjdG9yeSAqLworICAvKiBPUFRfX291dHB1dF9jbGFzc19kaXJlY3RvcnlfID0gNjUsICovICAgLyogLS1vdXRwdXQtY2xhc3MtZGlyZWN0b3J5PSAqLworICBPUFRfX291dHB1dF9wY2hfID0gNjYsICAgICAgICAgICAgICAgICAgICAgLyogLS1vdXRwdXQtcGNoPSAqLworICAvKiBPUFRfX291dHB1dF8gPSA2NywgKi8gICAgICAgICAgICAgICAgICAgLyogLS1vdXRwdXQ9ICovCisgIE9QVF9fcGFyYW0gPSA2OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtLXBhcmFtICovCisgIC8qIE9QVF9fcGFyYW1fID0gNjksICovICAgICAgICAgICAgICAgICAgICAvKiAtLXBhcmFtPSAqLworICAvKiBPUFRfX3Bhc3NfZXhpdF9jb2RlcyA9IDcwLCAqLyAgICAgICAgICAgLyogLS1wYXNzLWV4aXQtY29kZXMgKi8KKyAgLyogT1BUX19wZWRhbnRpYyA9IDcxLCAqLyAgICAgICAgICAgICAgICAgIC8qIC0tcGVkYW50aWMgKi8KKyAgLyogT1BUX19wZWRhbnRpY19lcnJvcnMgPSA3MiwgKi8gICAgICAgICAgIC8qIC0tcGVkYW50aWMtZXJyb3JzICovCisgIC8qIE9QVF9fcGllID0gNzMsICovICAgICAgICAgICAgICAgICAgICAgICAvKiAtLXBpZSAqLworICAvKiBPUFRfX3BpcGUgPSA3NCwgKi8gICAgICAgICAgICAgICAgICAgICAgLyogLS1waXBlICovCisgIC8qIE9QVF9fcHJlZml4ID0gNzUsICovICAgICAgICAgICAgICAgICAgICAvKiAtLXByZWZpeCAqLworICAvKiBPUFRfX3ByZWZpeF8gPSA3NiwgKi8gICAgICAgICAgICAgICAgICAgLyogLS1wcmVmaXg9ICovCisgIC8qIE9QVF9fcHJlcHJvY2VzcyA9IDc3LCAqLyAgICAgICAgICAgICAgICAvKiAtLXByZXByb2Nlc3MgKi8KKyAgLyogT1BUX19wcmludF9maWxlX25hbWUgPSA3OCwgKi8gICAgICAgICAgIC8qIC0tcHJpbnQtZmlsZS1uYW1lICovCisgIC8qIE9QVF9fcHJpbnRfZmlsZV9uYW1lXyA9IDc5LCAqLyAgICAgICAgICAvKiAtLXByaW50LWZpbGUtbmFtZT0gKi8KKyAgLyogT1BUX19wcmludF9saWJnY2NfZmlsZV9uYW1lID0gODAsICovICAgIC8qIC0tcHJpbnQtbGliZ2NjLWZpbGUtbmFtZSAqLworICAvKiBPUFRfX3ByaW50X21pc3NpbmdfZmlsZV9kZXBlbmRlbmNpZXMgPSA4MSwgKi8vKiAtLXByaW50LW1pc3NpbmctZmlsZS1kZXBlbmRlbmNpZXMgKi8KKyAgLyogT1BUX19wcmludF9tdWx0aV9kaXJlY3RvcnkgPSA4MiwgKi8gICAgIC8qIC0tcHJpbnQtbXVsdGktZGlyZWN0b3J5ICovCisgIC8qIE9QVF9fcHJpbnRfbXVsdGlfbGliID0gODMsICovICAgICAgICAgICAvKiAtLXByaW50LW11bHRpLWxpYiAqLworICAvKiBPUFRfX3ByaW50X211bHRpX29zX2RpcmVjdG9yeSA9IDg0LCAqLyAgLyogLS1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgKi8KKyAgLyogT1BUX19wcmludF9tdWx0aWFyY2ggPSA4NSwgKi8gICAgICAgICAgIC8qIC0tcHJpbnQtbXVsdGlhcmNoICovCisgIC8qIE9QVF9fcHJpbnRfcHJvZ19uYW1lID0gODYsICovICAgICAgICAgICAvKiAtLXByaW50LXByb2ctbmFtZSAqLworICAvKiBPUFRfX3ByaW50X3Byb2dfbmFtZV8gPSA4NywgKi8gICAgICAgICAgLyogLS1wcmludC1wcm9nLW5hbWU9ICovCisgIC8qIE9QVF9fcHJpbnRfc2VhcmNoX2RpcnMgPSA4OCwgKi8gICAgICAgICAvKiAtLXByaW50LXNlYXJjaC1kaXJzICovCisgIC8qIE9QVF9fcHJpbnRfc3lzcm9vdCA9IDg5LCAqLyAgICAgICAgICAgICAvKiAtLXByaW50LXN5c3Jvb3QgKi8KKyAgLyogT1BUX19wcmludF9zeXNyb290X2hlYWRlcnNfc3VmZml4ID0gOTAsICovLyogLS1wcmludC1zeXNyb290LWhlYWRlcnMtc3VmZml4ICovCisgIC8qIE9QVF9fcHJvZmlsZSA9IDkxLCAqLyAgICAgICAgICAgICAgICAgICAvKiAtLXByb2ZpbGUgKi8KKyAgLyogT1BUX19yZXNvdXJjZSA9IDkyLCAqLyAgICAgICAgICAgICAgICAgIC8qIC0tcmVzb3VyY2UgKi8KKyAgLyogT1BUX19yZXNvdXJjZV8gPSA5MywgKi8gICAgICAgICAgICAgICAgIC8qIC0tcmVzb3VyY2U9ICovCisgIC8qIE9QVF9fc2F2ZV90ZW1wcyA9IDk0LCAqLyAgICAgICAgICAgICAgICAvKiAtLXNhdmUtdGVtcHMgKi8KKyAgLyogT1BUX19zaGFyZWQgPSA5NSwgKi8gICAgICAgICAgICAgICAgICAgIC8qIC0tc2hhcmVkICovCisgIC8qIE9QVF9fc3BlY3MgPSA5NiwgKi8gICAgICAgICAgICAgICAgICAgICAvKiAtLXNwZWNzICovCisgIC8qIE9QVF9fc3BlY3NfID0gOTcsICovICAgICAgICAgICAgICAgICAgICAvKiAtLXNwZWNzPSAqLworICAvKiBPUFRfX3N0YXRpYyA9IDk4LCAqLyAgICAgICAgICAgICAgICAgICAgLyogLS1zdGF0aWMgKi8KKyAgLyogT1BUX19zeW1ib2xpYyA9IDk5LCAqLyAgICAgICAgICAgICAgICAgIC8qIC0tc3ltYm9saWMgKi8KKyAgLyogT1BUX19zeXNyb290ID0gMTAwLCAqLyAgICAgICAgICAgICAgICAgIC8qIC0tc3lzcm9vdCAqLworICBPUFRfX3N5c3Jvb3RfID0gMTAxLCAgICAgICAgICAgICAgICAgICAgICAgLyogLS1zeXNyb290PSAqLworICBPUFRfX3RhcmdldF9oZWxwID0gMTAyLCAgICAgICAgICAgICAgICAgICAgLyogLS10YXJnZXQtaGVscCAqLworICAvKiBPUFRfX3RpbWUgPSAxMDMsICovICAgICAgICAgICAgICAgICAgICAgLyogLS10aW1lICovCisgIC8qIE9QVF9fdHJhY2VfaW5jbHVkZXMgPSAxMDQsICovICAgICAgICAgICAvKiAtLXRyYWNlLWluY2x1ZGVzICovCisgIC8qIE9QVF9fdHJhZGl0aW9uYWwgPSAxMDUsICovICAgICAgICAgICAgICAvKiAtLXRyYWRpdGlvbmFsICovCisgIC8qIE9QVF9fdHJhZGl0aW9uYWxfY3BwID0gMTA2LCAqLyAgICAgICAgICAvKiAtLXRyYWRpdGlvbmFsLWNwcCAqLworICAvKiBPUFRfX3RyaWdyYXBocyA9IDEwNywgKi8gICAgICAgICAgICAgICAgLyogLS10cmlncmFwaHMgKi8KKyAgLyogT1BUX191bmRlZmluZV9tYWNybyA9IDEwOCwgKi8gICAgICAgICAgIC8qIC0tdW5kZWZpbmUtbWFjcm8gKi8KKyAgLyogT1BUX191bmRlZmluZV9tYWNyb18gPSAxMDksICovICAgICAgICAgIC8qIC0tdW5kZWZpbmUtbWFjcm89ICovCisgIC8qIE9QVF9fdXNlcl9kZXBlbmRlbmNpZXMgPSAxMTAsICovICAgICAgICAvKiAtLXVzZXItZGVwZW5kZW5jaWVzICovCisgIC8qIE9QVF9fdmVyYm9zZSA9IDExMSwgKi8gICAgICAgICAgICAgICAgICAvKiAtLXZlcmJvc2UgKi8KKyAgT1BUX192ZXJzaW9uID0gMTEyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tdmVyc2lvbiAqLworICAvKiBPUFRfX3dyaXRlX2RlcGVuZGVuY2llcyA9IDExMywgKi8gICAgICAgLyogLS13cml0ZS1kZXBlbmRlbmNpZXMgKi8KKyAgLyogT1BUX193cml0ZV91c2VyX2RlcGVuZGVuY2llcyA9IDExNCwgKi8gIC8qIC0td3JpdGUtdXNlci1kZXBlbmRlbmNpZXMgKi8KKyAgT1BUX0EgPSAxMTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1BICovCisgIE9QVF9CID0gMTE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtQiAqLworICBPUFRfQyA9IDExNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLUMgKi8KKyAgT1BUX0NDID0gMTE4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1DQyAqLworICAvKiBPUFRfQ0xBU1NQQVRIID0gMTE5LCAqLyAgICAgICAgICAgICAgICAgLyogLUNMQVNTUEFUSCAqLworICBPUFRfRCA9IDEyMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLUQgKi8KKyAgT1BUX0UgPSAxMjEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1FICovCisgIE9QVF9GID0gMTIyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtRiAqLworICBPUFRfSCA9IDEyMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLUggKi8KKyAgT1BUX0kgPSAxMjQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1JICovCisgIE9QVF9KID0gMTI1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtSiAqLworICBPUFRfTCA9IDEyNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLUwgKi8KKyAgT1BUX00gPSAxMjcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1NICovCisgIE9QVF9NRCA9IDEyOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTUQgKi8KKyAgT1BUX01EXyA9IDEyOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1NRF8gKi8KKyAgT1BUX01GID0gMTMwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1NRiAqLworICBPUFRfTUcgPSAxMzEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU1HICovCisgIE9QVF9NTSA9IDEzMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTU0gKi8KKyAgT1BUX01NRCA9IDEzMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1NTUQgKi8KKyAgT1BUX01NRF8gPSAxMzQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1NTURfICovCisgIE9QVF9NUCA9IDEzNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTVAgKi8KKyAgT1BUX01RID0gMTM2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1NUSAqLworICBPUFRfTVQgPSAxMzcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU1UICovCisgIE9QVF9OID0gMTM4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtTiAqLworICBPUFRfTyA9IDEzOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU8gKi8KKyAgT1BUX09mYXN0ID0gMTQwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1PZmFzdCAqLworICBPUFRfT2cgPSAxNDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLU9nICovCisgIE9QVF9PcyA9IDE0MiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtT3MgKi8KKyAgT1BUX1AgPSAxNDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1QICovCisgIE9QVF9RID0gMTQ0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtUSAqLworICBPUFRfUW4gPSAxNDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVFuICovCisgIE9QVF9ReSA9IDE0NiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtUXkgKi8KKyAgT1BUX1IgPSAxNDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1SICovCisgIE9QVF9TID0gMTQ4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtUyAqLworICBPUFRfVCA9IDE0OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVQgKi8KKyAgT1BUX1Ric3MgPSAxNTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1UYnNzICovCisgIE9QVF9UYnNzXyA9IDE1MSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtVGJzcz0gKi8KKyAgT1BUX1RkYXRhID0gMTUyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1UZGF0YSAqLworICBPUFRfVGRhdGFfID0gMTUzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVRkYXRhPSAqLworICBPUFRfVHRleHQgPSAxNTQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVR0ZXh0ICovCisgIE9QVF9UdGV4dF8gPSAxNTUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtVHRleHQ9ICovCisgIE9QVF9VID0gMTU2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtVSAqLworICAvKiBPUFRfVyA9IDE1NywgKi8gICAgICAgICAgICAgICAgICAgICAgICAgLyogLVcgKi8KKyAgT1BUX1dhXyA9IDE1OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYSwgKi8KKyAgT1BUX1dhYmkgPSAxNTksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYWJpICovCisgIE9QVF9XYWJpX3RhZyA9IDE2MCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2FiaS10YWcgKi8KKyAgT1BUX1dhZGRyZXNzID0gMTYxLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYWRkcmVzcyAqLworICBPUFRfV2FnZ3JlZ2F0ZV9yZXR1cm4gPSAxNjIsICAgICAgICAgICAgICAgLyogLVdhZ2dyZWdhdGUtcmV0dXJuICovCisgIE9QVF9XYWdncmVzc2l2ZV9sb29wX29wdGltaXphdGlvbnMgPSAxNjMsICAvKiAtV2FnZ3Jlc3NpdmUtbG9vcC1vcHRpbWl6YXRpb25zICovCisgIE9QVF9XYWxpYXNpbmcgPSAxNjQsICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2FsaWFzaW5nICovCisgIE9QVF9XYWxpZ25fY29tbW9ucyA9IDE2NSwgICAgICAgICAgICAgICAgICAvKiAtV2FsaWduLWNvbW1vbnMgKi8KKyAgT1BUX1dhbGwgPSAxNjYsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XYWxsICovCisgIE9QVF9XYWxsX2RlcHJlY2F0aW9uID0gMTY3LCAgICAgICAgICAgICAgICAvKiAtV2FsbC1kZXByZWNhdGlvbiAqLworICBPUFRfV2FsbF9qYXZhZG9jID0gMTY4LCAgICAgICAgICAgICAgICAgICAgLyogLVdhbGwtamF2YWRvYyAqLworICBPUFRfV2FtcGVyc2FuZCA9IDE2OSwgICAgICAgICAgICAgICAgICAgICAgLyogLVdhbXBlcnNhbmQgKi8KKyAgT1BUX1dhcnJheV9ib3VuZHMgPSAxNzAsICAgICAgICAgICAgICAgICAgIC8qIC1XYXJyYXktYm91bmRzICovCisgIE9QVF9XYXJyYXlfdGVtcG9yYXJpZXMgPSAxNzEsICAgICAgICAgICAgICAvKiAtV2FycmF5LXRlbXBvcmFyaWVzICovCisgIE9QVF9XYXNzZXJ0X2lkZW50aWZpZXIgPSAxNzIsICAgICAgICAgICAgICAvKiAtV2Fzc2VydC1pZGVudGlmaWVyICovCisgIE9QVF9XYXNzaWduX2ludGVyY2VwdCA9IDE3MywgICAgICAgICAgICAgICAvKiAtV2Fzc2lnbi1pbnRlcmNlcHQgKi8KKyAgT1BUX1dhdHRyaWJ1dGVzID0gMTc0LCAgICAgICAgICAgICAgICAgICAgIC8qIC1XYXR0cmlidXRlcyAqLworICBPUFRfV2JhZF9mdW5jdGlvbl9jYXN0ID0gMTc1LCAgICAgICAgICAgICAgLyogLVdiYWQtZnVuY3Rpb24tY2FzdCAqLworICBPUFRfV2JveGluZyA9IDE3NiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdib3hpbmcgKi8KKyAgT1BUX1didWlsdGluX21hY3JvX3JlZGVmaW5lZCA9IDE3NywgICAgICAgIC8qIC1XYnVpbHRpbi1tYWNyby1yZWRlZmluZWQgKi8KKyAgT1BUX1djX19fY29tcGF0ID0gMTc4LCAgICAgICAgICAgICAgICAgICAgIC8qIC1XYysrLWNvbXBhdCAqLworICBPUFRfV2NfXzB4X2NvbXBhdCA9IDE3OSwgICAgICAgICAgICAgICAgICAgLyogLVdjKysweC1jb21wYXQgKi8KKyAgLyogT1BUX1djX18xMV9jb21wYXQgPSAxODAsICovICAgICAgICAgICAgIC8qIC1XYysrMTEtY29tcGF0ICovCisgIE9QVF9XY19iaW5kaW5nX3R5cGUgPSAxODEsICAgICAgICAgICAgICAgICAvKiAtV2MtYmluZGluZy10eXBlICovCisgIE9QVF9XY2FzdF9hbGlnbiA9IDE4MiwgICAgICAgICAgICAgICAgICAgICAvKiAtV2Nhc3QtYWxpZ24gKi8KKyAgT1BUX1djYXN0X3F1YWwgPSAxODMsICAgICAgICAgICAgICAgICAgICAgIC8qIC1XY2FzdC1xdWFsICovCisgIE9QVF9XY2hhcl9jb25jYXQgPSAxODQsICAgICAgICAgICAgICAgICAgICAvKiAtV2NoYXItY29uY2F0ICovCisgIE9QVF9XY2hhcl9zdWJzY3JpcHRzID0gMTg1LCAgICAgICAgICAgICAgICAvKiAtV2NoYXItc3Vic2NyaXB0cyAqLworICBPUFRfV2NoYXJhY3Rlcl90cnVuY2F0aW9uID0gMTg2LCAgICAgICAgICAgLyogLVdjaGFyYWN0ZXItdHJ1bmNhdGlvbiAqLworICBPUFRfV2Nsb2JiZXJlZCA9IDE4NywgICAgICAgICAgICAgICAgICAgICAgLyogLVdjbG9iYmVyZWQgKi8KKyAgT1BUX1djb21tZW50ID0gMTg4LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XY29tbWVudCAqLworICAvKiBPUFRfV2NvbW1lbnRzID0gMTg5LCAqLyAgICAgICAgICAgICAgICAgLyogLVdjb21tZW50cyAqLworICBPUFRfV2NvbXBhcmVfcmVhbHMgPSAxOTAsICAgICAgICAgICAgICAgICAgLyogLVdjb21wYXJlLXJlYWxzICovCisgIE9QVF9XY29uZGl0aW9uX2Fzc2lnbiA9IDE5MSwgICAgICAgICAgICAgICAvKiAtV2NvbmRpdGlvbi1hc3NpZ24gKi8KKyAgT1BUX1djb25zdHJ1Y3Rvcl9uYW1lID0gMTkyLCAgICAgICAgICAgICAgIC8qIC1XY29uc3RydWN0b3ItbmFtZSAqLworICBPUFRfV2NvbnZlcnNpb24gPSAxOTMsICAgICAgICAgICAgICAgICAgICAgLyogLVdjb252ZXJzaW9uICovCisgIE9QVF9XY29udmVyc2lvbl9leHRyYSA9IDE5NCwgICAgICAgICAgICAgICAvKiAtV2NvbnZlcnNpb24tZXh0cmEgKi8KKyAgT1BUX1djb252ZXJzaW9uX251bGwgPSAxOTUsICAgICAgICAgICAgICAgIC8qIC1XY29udmVyc2lvbi1udWxsICovCisgIE9QVF9XY292ZXJhZ2VfbWlzbWF0Y2ggPSAxOTYsICAgICAgICAgICAgICAvKiAtV2NvdmVyYWdlLW1pc21hdGNoICovCisgIE9QVF9XY3BwID0gMTk3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2NwcCAqLworICBPUFRfV2N0b3JfZHRvcl9wcml2YWN5ID0gMTk4LCAgICAgICAgICAgICAgLyogLVdjdG9yLWR0b3ItcHJpdmFjeSAqLworICBPUFRfV2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudCA9IDE5OSwgICAgLyogLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgKi8KKyAgT1BUX1dkZWxldGVfbm9uX3ZpcnR1YWxfZHRvciA9IDIwMCwgICAgICAgIC8qIC1XZGVsZXRlLW5vbi12aXJ0dWFsLWR0b3IgKi8KKyAgT1BUX1dkZXBfYW5uID0gMjAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZGVwLWFubiAqLworICBPUFRfV2RlcHJlY2F0ZWQgPSAyMDIsICAgICAgICAgICAgICAgICAgICAgLyogLVdkZXByZWNhdGVkICovCisgIE9QVF9XZGVwcmVjYXRlZF9kZWNsYXJhdGlvbnMgPSAyMDMsICAgICAgICAvKiAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zICovCisgIE9QVF9XZGlzYWJsZWRfb3B0aW1pemF0aW9uID0gMjA0LCAgICAgICAgICAvKiAtV2Rpc2FibGVkLW9wdGltaXphdGlvbiAqLworICBPUFRfV2Rpc2NvdXJhZ2VkID0gMjA1LCAgICAgICAgICAgICAgICAgICAgLyogLVdkaXNjb3VyYWdlZCAqLworICBPUFRfV2Rpdl9ieV96ZXJvID0gMjA2LCAgICAgICAgICAgICAgICAgICAgLyogLVdkaXYtYnktemVybyAqLworICBPUFRfV2RvdWJsZV9wcm9tb3Rpb24gPSAyMDcsICAgICAgICAgICAgICAgLyogLVdkb3VibGUtcHJvbW90aW9uICovCisgIE9QVF9XZWZmY19fID0gMjA4LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2VmZmMrKyAqLworICBPUFRfV2VtcHR5X2Jsb2NrID0gMjA5LCAgICAgICAgICAgICAgICAgICAgLyogLVdlbXB0eS1ibG9jayAqLworICBPUFRfV2VtcHR5X2JvZHkgPSAyMTAsICAgICAgICAgICAgICAgICAgICAgLyogLVdlbXB0eS1ib2R5ICovCisgIE9QVF9XZW5kaWZfbGFiZWxzID0gMjExLCAgICAgICAgICAgICAgICAgICAvKiAtV2VuZGlmLWxhYmVscyAqLworICBPUFRfV2VudW1fY29tcGFyZSA9IDIxMiwgICAgICAgICAgICAgICAgICAgLyogLVdlbnVtLWNvbXBhcmUgKi8KKyAgT1BUX1dlbnVtX2lkZW50aWZpZXIgPSAyMTMsICAgICAgICAgICAgICAgIC8qIC1XZW51bS1pZGVudGlmaWVyICovCisgIE9QVF9XZW51bV9zd2l0Y2ggPSAyMTQsICAgICAgICAgICAgICAgICAgICAvKiAtV2VudW0tc3dpdGNoICovCisgIE9QVF9XZXJyb3IgPSAyMTUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2Vycm9yICovCisgIC8qIE9QVF9XZXJyb3JfaW1wbGljaXRfZnVuY3Rpb25fZGVjbGFyYXRpb24gPSAyMTYsICovLyogLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAqLworICBPUFRfV2Vycm9yXyA9IDIxNywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdlcnJvcj0gKi8KKyAgT1BUX1dleHRyYSA9IDIxOCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZXh0cmEgKi8KKyAgT1BUX1dleHRyYW5lb3VzX3NlbWljb2xvbiA9IDIxOSwgICAgICAgICAgIC8qIC1XZXh0cmFuZW91cy1zZW1pY29sb24gKi8KKyAgT1BUX1dmYWxsdGhyb3VnaCA9IDIyMCwgICAgICAgICAgICAgICAgICAgIC8qIC1XZmFsbHRocm91Z2ggKi8KKyAgT1BUX1dmYXRhbF9lcnJvcnMgPSAyMjEsICAgICAgICAgICAgICAgICAgIC8qIC1XZmF0YWwtZXJyb3JzICovCisgIE9QVF9XZmllbGRfaGlkaW5nID0gMjIyLCAgICAgICAgICAgICAgICAgICAvKiAtV2ZpZWxkLWhpZGluZyAqLworICBPUFRfV2ZpbmFsX2JvdW5kID0gMjIzLCAgICAgICAgICAgICAgICAgICAgLyogLVdmaW5hbC1ib3VuZCAqLworICBPUFRfV2ZpbmFsbHkgPSAyMjQsICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdmaW5hbGx5ICovCisgIE9QVF9XZmxvYXRfZXF1YWwgPSAyMjUsICAgICAgICAgICAgICAgICAgICAvKiAtV2Zsb2F0LWVxdWFsICovCisgIE9QVF9XZm9yYmlkZGVuID0gMjI2LCAgICAgICAgICAgICAgICAgICAgICAvKiAtV2ZvcmJpZGRlbiAqLworICAvKiBPUFRfV2Zvcm1hdCA9IDIyNywgKi8gICAgICAgICAgICAgICAgICAgLyogLVdmb3JtYXQgKi8KKyAgT1BUX1dmb3JtYXRfY29udGFpbnNfbnVsID0gMjI4LCAgICAgICAgICAgIC8qIC1XZm9ybWF0LWNvbnRhaW5zLW51bCAqLworICBPUFRfV2Zvcm1hdF9leHRyYV9hcmdzID0gMjI5LCAgICAgICAgICAgICAgLyogLVdmb3JtYXQtZXh0cmEtYXJncyAqLworICBPUFRfV2Zvcm1hdF9ub25saXRlcmFsID0gMjMwLCAgICAgICAgICAgICAgLyogLVdmb3JtYXQtbm9ubGl0ZXJhbCAqLworICBPUFRfV2Zvcm1hdF9zZWN1cml0eSA9IDIzMSwgICAgICAgICAgICAgICAgLyogLVdmb3JtYXQtc2VjdXJpdHkgKi8KKyAgT1BUX1dmb3JtYXRfeTJrID0gMjMyLCAgICAgICAgICAgICAgICAgICAgIC8qIC1XZm9ybWF0LXkyayAqLworICBPUFRfV2Zvcm1hdF96ZXJvX2xlbmd0aCA9IDIzMywgICAgICAgICAgICAgLyogLVdmb3JtYXQtemVyby1sZW5ndGggKi8KKyAgT1BUX1dmb3JtYXRfID0gMjM0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XZm9ybWF0PSAqLworICBPUFRfV2ZyYW1lX2xhcmdlcl90aGFuXyA9IDIzNSwgICAgICAgICAgICAgLyogLVdmcmFtZS1sYXJnZXItdGhhbj0gKi8KKyAgT1BUX1dmcmVlX25vbmhlYXBfb2JqZWN0ID0gMjM2LCAgICAgICAgICAgIC8qIC1XZnJlZS1ub25oZWFwLW9iamVjdCAqLworICBPUFRfV2Z1bmN0aW9uX2VsaW1pbmF0aW9uID0gMjM3LCAgICAgICAgICAgLyogLVdmdW5jdGlvbi1lbGltaW5hdGlvbiAqLworICBPUFRfV2hpZGluZyA9IDIzOCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdoaWRpbmcgKi8KKyAgT1BUX1dpZ25vcmVkX3F1YWxpZmllcnMgPSAyMzksICAgICAgICAgICAgIC8qIC1XaWdub3JlZC1xdWFsaWZpZXJzICovCisgIE9QVF9XaW1wbGljaXQgPSAyNDAsICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2ltcGxpY2l0ICovCisgIE9QVF9XaW1wbGljaXRfZnVuY3Rpb25fZGVjbGFyYXRpb24gPSAyNDEsICAvKiAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uICovCisgIE9QVF9XaW1wbGljaXRfaW50ID0gMjQyLCAgICAgICAgICAgICAgICAgICAvKiAtV2ltcGxpY2l0LWludCAqLworICBPUFRfV2ltcGxpY2l0X2ludGVyZmFjZSA9IDI0MywgICAgICAgICAgICAgLyogLVdpbXBsaWNpdC1pbnRlcmZhY2UgKi8KKyAgT1BUX1dpbXBsaWNpdF9wcm9jZWR1cmUgPSAyNDQsICAgICAgICAgICAgIC8qIC1XaW1wbGljaXQtcHJvY2VkdXJlICovCisgIC8qIE9QVF9XaW1wb3J0ID0gMjQ1LCAqLyAgICAgICAgICAgICAgICAgICAvKiAtV2ltcG9ydCAqLworICBPUFRfV2luZGlyZWN0X3N0YXRpYyA9IDI0NiwgICAgICAgICAgICAgICAgLyogLVdpbmRpcmVjdC1zdGF0aWMgKi8KKyAgT1BUX1dpbmhlcml0ZWRfdmFyaWFkaWNfY3RvciA9IDI0NywgICAgICAgIC8qIC1XaW5oZXJpdGVkLXZhcmlhZGljLWN0b3IgKi8KKyAgT1BUX1dpbml0X3NlbGYgPSAyNDgsICAgICAgICAgICAgICAgICAgICAgIC8qIC1XaW5pdC1zZWxmICovCisgIE9QVF9XaW5saW5lID0gMjQ5LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2lubGluZSAqLworICBPUFRfV2ludF90b19wb2ludGVyX2Nhc3QgPSAyNTAsICAgICAgICAgICAgLyogLVdpbnQtdG8tcG9pbnRlci1jYXN0ICovCisgIE9QVF9XaW50Zl9hbm5vdGF0aW9uID0gMjUxLCAgICAgICAgICAgICAgICAvKiAtV2ludGYtYW5ub3RhdGlvbiAqLworICBPUFRfV2ludGZfbm9uX2luaGVyaXRlZCA9IDI1MiwgICAgICAgICAgICAgLyogLVdpbnRmLW5vbi1pbmhlcml0ZWQgKi8KKyAgT1BUX1dpbnRyaW5zaWNfc2hhZG93ID0gMjUzLCAgICAgICAgICAgICAgIC8qIC1XaW50cmluc2ljLXNoYWRvdyAqLworICBPUFRfV2ludHJpbnNpY3Nfc3RkID0gMjU0LCAgICAgICAgICAgICAgICAgLyogLVdpbnRyaW5zaWNzLXN0ZCAqLworICBPUFRfV2ludmFsaWRfbWVtb3J5X21vZGVsID0gMjU1LCAgICAgICAgICAgLyogLVdpbnZhbGlkLW1lbW9yeS1tb2RlbCAqLworICBPUFRfV2ludmFsaWRfb2Zmc2V0b2YgPSAyNTYsICAgICAgICAgICAgICAgLyogLVdpbnZhbGlkLW9mZnNldG9mICovCisgIE9QVF9XaW52YWxpZF9wY2ggPSAyNTcsICAgICAgICAgICAgICAgICAgICAvKiAtV2ludmFsaWQtcGNoICovCisgIE9QVF9XamF2YWRvYyA9IDI1OCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV2phdmFkb2MgKi8KKyAgT1BUX1dqdW1wX21pc3Nlc19pbml0ID0gMjU5LCAgICAgICAgICAgICAgIC8qIC1XanVtcC1taXNzZXMtaW5pdCAqLworICBPUFRfV2xfID0gMjYwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdsLCAqLworICAvKiBPUFRfV2xhcmdlcl90aGFuXyA9IDI2MSwgKi8gICAgICAgICAgICAgLyogLVdsYXJnZXItdGhhbi0gKi8KKyAgT1BUX1dsYXJnZXJfdGhhbl8gPSAyNjIsICAgICAgICAgICAgICAgICAgIC8qIC1XbGFyZ2VyLXRoYW49ICovCisgIE9QVF9XbGluZV90cnVuY2F0aW9uID0gMjYzLCAgICAgICAgICAgICAgICAvKiAtV2xpbmUtdHJ1bmNhdGlvbiAqLworICBPUFRfV2xpdGVyYWxfc3VmZml4ID0gMjY0LCAgICAgICAgICAgICAgICAgLyogLVdsaXRlcmFsLXN1ZmZpeCAqLworICBPUFRfV2xvY2FsX2hpZGluZyA9IDI2NSwgICAgICAgICAgICAgICAgICAgLyogLVdsb2NhbC1oaWRpbmcgKi8KKyAgT1BUX1dsb2dpY2FsX29wID0gMjY2LCAgICAgICAgICAgICAgICAgICAgIC8qIC1XbG9naWNhbC1vcCAqLworICBPUFRfV2xvbmdfbG9uZyA9IDI2NywgICAgICAgICAgICAgICAgICAgICAgLyogLVdsb25nLWxvbmcgKi8KKyAgT1BUX1dtYWluID0gMjY4LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XbWFpbiAqLworICBPUFRfV21hc2tlZF9jYXRjaF9ibG9jayA9IDI2OSwgICAgICAgICAgICAgLyogLVdtYXNrZWQtY2F0Y2gtYmxvY2sgKi8KKyAgT1BUX1dtYXliZV91bmluaXRpYWxpemVkID0gMjcwLCAgICAgICAgICAgIC8qIC1XbWF5YmUtdW5pbml0aWFsaXplZCAqLworICBPUFRfV21pc3NpbmdfYnJhY2VzID0gMjcxLCAgICAgICAgICAgICAgICAgLyogLVdtaXNzaW5nLWJyYWNlcyAqLworICBPUFRfV21pc3NpbmdfZGVjbGFyYXRpb25zID0gMjcyLCAgICAgICAgICAgLyogLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAqLworICBPUFRfV21pc3NpbmdfZmllbGRfaW5pdGlhbGl6ZXJzID0gMjczLCAgICAgLyogLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAqLworICAvKiBPUFRfV21pc3NpbmdfZm9ybWF0X2F0dHJpYnV0ZSA9IDI3NCwgKi8gLyogLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgKi8KKyAgT1BUX1dtaXNzaW5nX2luY2x1ZGVfZGlycyA9IDI3NSwgICAgICAgICAgIC8qIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMgKi8KKyAgLyogT1BUX1dtaXNzaW5nX25vcmV0dXJuID0gMjc2LCAqLyAgICAgICAgIC8qIC1XbWlzc2luZy1ub3JldHVybiAqLworICBPUFRfV21pc3NpbmdfcGFyYW1ldGVyX3R5cGUgPSAyNzcsICAgICAgICAgLyogLVdtaXNzaW5nLXBhcmFtZXRlci10eXBlICovCisgIE9QVF9XbWlzc2luZ19wcm90b3R5cGVzID0gMjc4LCAgICAgICAgICAgICAvKiAtV21pc3NpbmctcHJvdG90eXBlcyAqLworICBPUFRfV211ZGZsYXAgPSAyNzksICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdtdWRmbGFwICovCisgIE9QVF9XbXVsdGljaGFyID0gMjgwLCAgICAgICAgICAgICAgICAgICAgICAvKiAtV211bHRpY2hhciAqLworICBPUFRfV25hcnJvd2luZyA9IDI4MSwgICAgICAgICAgICAgICAgICAgICAgLyogLVduYXJyb3dpbmcgKi8KKyAgT1BUX1duZXN0ZWRfZXh0ZXJucyA9IDI4MiwgICAgICAgICAgICAgICAgIC8qIC1XbmVzdGVkLWV4dGVybnMgKi8KKyAgT1BUX1dubHMgPSAyODMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XbmxzICovCisgIE9QVF9Xbm9fZWZmZWN0X2Fzc2lnbiA9IDI4NCwgICAgICAgICAgICAgICAvKiAtV25vLWVmZmVjdC1hc3NpZ24gKi8KKyAgT1BUX1dub2V4Y2VwdCA9IDI4NSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xbm9leGNlcHQgKi8KKyAgT1BUX1dub25fdGVtcGxhdGVfZnJpZW5kID0gMjg2LCAgICAgICAgICAgIC8qIC1Xbm9uLXRlbXBsYXRlLWZyaWVuZCAqLworICBPUFRfV25vbl92aXJ0dWFsX2R0b3IgPSAyODcsICAgICAgICAgICAgICAgLyogLVdub24tdmlydHVhbC1kdG9yICovCisgIE9QVF9Xbm9ubnVsbCA9IDI4OCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV25vbm51bGwgKi8KKyAgT1BUX1dub3JtYWxpemVkXyA9IDI4OSwgICAgICAgICAgICAgICAgICAgIC8qIC1Xbm9ybWFsaXplZD0gKi8KKyAgT1BUX1dudWxsID0gMjkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XbnVsbCAqLworICBPUFRfV29sZF9zdHlsZV9jYXN0ID0gMjkxLCAgICAgICAgICAgICAgICAgLyogLVdvbGQtc3R5bGUtY2FzdCAqLworICBPUFRfV29sZF9zdHlsZV9kZWNsYXJhdGlvbiA9IDI5MiwgICAgICAgICAgLyogLVdvbGQtc3R5bGUtZGVjbGFyYXRpb24gKi8KKyAgT1BUX1dvbGRfc3R5bGVfZGVmaW5pdGlvbiA9IDI5MywgICAgICAgICAgIC8qIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gKi8KKyAgT1BUX1dvdXRfb2ZfZGF0ZSA9IDI5NCwgICAgICAgICAgICAgICAgICAgIC8qIC1Xb3V0LW9mLWRhdGUgKi8KKyAgT1BUX1dvdmVyX2FubiA9IDI5NSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xb3Zlci1hbm4gKi8KKyAgT1BUX1dvdmVyZmxvdyA9IDI5NiwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xb3ZlcmZsb3cgKi8KKyAgT1BUX1dvdmVybGVuZ3RoX3N0cmluZ3MgPSAyOTcsICAgICAgICAgICAgIC8qIC1Xb3Zlcmxlbmd0aC1zdHJpbmdzICovCisgIE9QVF9Xb3ZlcmxvYWRlZF92aXJ0dWFsID0gMjk4LCAgICAgICAgICAgICAvKiAtV292ZXJsb2FkZWQtdmlydHVhbCAqLworICBPUFRfV292ZXJyaWRlX2luaXQgPSAyOTksICAgICAgICAgICAgICAgICAgLyogLVdvdmVycmlkZS1pbml0ICovCisgIE9QVF9XcF8gPSAzMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3AsICovCisgIE9QVF9XcGFja2VkID0gMzAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3BhY2tlZCAqLworICBPUFRfV3BhY2tlZF9iaXRmaWVsZF9jb21wYXQgPSAzMDIsICAgICAgICAgLyogLVdwYWNrZWQtYml0ZmllbGQtY29tcGF0ICovCisgIE9QVF9XcGFkZGVkID0gMzAzLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3BhZGRlZCAqLworICBPUFRfV3BhcmFtX2Fzc2lnbiA9IDMwNCwgICAgICAgICAgICAgICAgICAgLyogLVdwYXJhbS1hc3NpZ24gKi8KKyAgT1BUX1dwYXJlbnRoZXNlcyA9IDMwNSwgICAgICAgICAgICAgICAgICAgIC8qIC1XcGFyZW50aGVzZXMgKi8KKyAgT1BUX1dwZWRhbnRpYyA9IDMwNiwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XcGVkYW50aWMgKi8KKyAgT1BUX1dwa2dfZGVmYXVsdF9tZXRob2QgPSAzMDcsICAgICAgICAgICAgIC8qIC1XcGtnLWRlZmF1bHQtbWV0aG9kICovCisgIE9QVF9XcG1mX2NvbnZlcnNpb25zID0gMzA4LCAgICAgICAgICAgICAgICAvKiAtV3BtZi1jb252ZXJzaW9ucyAqLworICBPUFRfV3BvaW50ZXJfYXJpdGggPSAzMDksICAgICAgICAgICAgICAgICAgLyogLVdwb2ludGVyLWFyaXRoICovCisgIE9QVF9XcG9pbnRlcl9zaWduID0gMzEwLCAgICAgICAgICAgICAgICAgICAvKiAtV3BvaW50ZXItc2lnbiAqLworICBPUFRfV3BvaW50ZXJfdG9faW50X2Nhc3QgPSAzMTEsICAgICAgICAgICAgLyogLVdwb2ludGVyLXRvLWludC1jYXN0ICovCisgIE9QVF9XcHJhZ21hcyA9IDMxMiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3ByYWdtYXMgKi8KKyAgT1BUX1dwcm9wZXJ0eV9hc3NpZ25fZGVmYXVsdCA9IDMxMywgICAgICAgIC8qIC1XcHJvcGVydHktYXNzaWduLWRlZmF1bHQgKi8KKyAgT1BUX1dwcm90b2NvbCA9IDMxNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XcHJvdG9jb2wgKi8KKyAgT1BUX1dwc2FiaSA9IDMxNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XcHNhYmkgKi8KKyAgT1BUX1dyYXcgPSAzMTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XcmF3ICovCisgIE9QVF9XcmVhbF9xX2NvbnN0YW50ID0gMzE3LCAgICAgICAgICAgICAgICAvKiAtV3JlYWwtcS1jb25zdGFudCAqLworICBPUFRfV3JlYWxsb2NfbGhzID0gMzE4LCAgICAgICAgICAgICAgICAgICAgLyogLVdyZWFsbG9jLWxocyAqLworICBPUFRfV3JlYWxsb2NfbGhzX2FsbCA9IDMxOSwgICAgICAgICAgICAgICAgLyogLVdyZWFsbG9jLWxocy1hbGwgKi8KKyAgT1BUX1dyZWR1bmRhbnRfZGVjbHMgPSAzMjAsICAgICAgICAgICAgICAgIC8qIC1XcmVkdW5kYW50LWRlY2xzICovCisgIE9QVF9XcmVkdW5kYW50X21vZGlmaWVycyA9IDMyMSwgICAgICAgICAgICAvKiAtV3JlZHVuZGFudC1tb2RpZmllcnMgKi8KKyAgT1BUX1dyZW9yZGVyID0gMzIyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XcmVvcmRlciAqLworICBPUFRfV3JldHVybl9sb2NhbF9hZGRyID0gMzIzLCAgICAgICAgICAgICAgLyogLVdyZXR1cm4tbG9jYWwtYWRkciAqLworICBPUFRfV3JldHVybl90eXBlID0gMzI0LCAgICAgICAgICAgICAgICAgICAgLyogLVdyZXR1cm4tdHlwZSAqLworICBPUFRfV3NlbGVjdG9yID0gMzI1LCAgICAgICAgICAgICAgICAgICAgICAgLyogLVdzZWxlY3RvciAqLworICBPUFRfV3NlcXVlbmNlX3BvaW50ID0gMzI2LCAgICAgICAgICAgICAgICAgLyogLVdzZXF1ZW5jZS1wb2ludCAqLworICBPUFRfV3NlcmlhbCA9IDMyNywgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdzZXJpYWwgKi8KKyAgT1BUX1dzaGFkb3cgPSAzMjgsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc2hhZG93ICovCisgIE9QVF9Xc2lnbl9jb21wYXJlID0gMzI5LCAgICAgICAgICAgICAgICAgICAvKiAtV3NpZ24tY29tcGFyZSAqLworICBPUFRfV3NpZ25fY29udmVyc2lvbiA9IDMzMCwgICAgICAgICAgICAgICAgLyogLVdzaWduLWNvbnZlcnNpb24gKi8KKyAgT1BUX1dzaWduX3Byb21vID0gMzMxLCAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc2lnbi1wcm9tbyAqLworICBPUFRfV3NpemVvZl9wb2ludGVyX21lbWFjY2VzcyA9IDMzMiwgICAgICAgLyogLVdzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3MgKi8KKyAgT1BUX1dzcGVjaWFsX3BhcmFtX2hpZGluZyA9IDMzMywgICAgICAgICAgIC8qIC1Xc3BlY2lhbC1wYXJhbS1oaWRpbmcgKi8KKyAgT1BUX1dzdGFja19wcm90ZWN0b3IgPSAzMzQsICAgICAgICAgICAgICAgIC8qIC1Xc3RhY2stcHJvdGVjdG9yICovCisgIE9QVF9Xc3RhY2tfdXNhZ2VfID0gMzM1LCAgICAgICAgICAgICAgICAgICAvKiAtV3N0YWNrLXVzYWdlPSAqLworICBPUFRfV3N0YXRpY19hY2Nlc3MgPSAzMzYsICAgICAgICAgICAgICAgICAgLyogLVdzdGF0aWMtYWNjZXNzICovCisgIE9QVF9Xc3RhdGljX3JlY2VpdmVyID0gMzM3LCAgICAgICAgICAgICAgICAvKiAtV3N0YXRpYy1yZWNlaXZlciAqLworICBPUFRfV3N0cmljdF9hbGlhc2luZyA9IDMzOCwgICAgICAgICAgICAgICAgLyogLVdzdHJpY3QtYWxpYXNpbmcgKi8KKyAgT1BUX1dzdHJpY3RfYWxpYXNpbmdfID0gMzM5LCAgICAgICAgICAgICAgIC8qIC1Xc3RyaWN0LWFsaWFzaW5nPSAqLworICBPUFRfV3N0cmljdF9udWxsX3NlbnRpbmVsID0gMzQwLCAgICAgICAgICAgLyogLVdzdHJpY3QtbnVsbC1zZW50aW5lbCAqLworICBPUFRfV3N0cmljdF9vdmVyZmxvdyA9IDM0MSwgICAgICAgICAgICAgICAgLyogLVdzdHJpY3Qtb3ZlcmZsb3cgKi8KKyAgT1BUX1dzdHJpY3Rfb3ZlcmZsb3dfID0gMzQyLCAgICAgICAgICAgICAgIC8qIC1Xc3RyaWN0LW92ZXJmbG93PSAqLworICBPUFRfV3N0cmljdF9wcm90b3R5cGVzID0gMzQzLCAgICAgICAgICAgICAgLyogLVdzdHJpY3QtcHJvdG90eXBlcyAqLworICBPUFRfV3N0cmljdF9zZWxlY3Rvcl9tYXRjaCA9IDM0NCwgICAgICAgICAgLyogLVdzdHJpY3Qtc2VsZWN0b3ItbWF0Y2ggKi8KKyAgT1BUX1dzdWdnZXN0X2F0dHJpYnV0ZV9jb25zdCA9IDM0NSwgICAgICAgIC8qIC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3QgKi8KKyAgT1BUX1dzdWdnZXN0X2F0dHJpYnV0ZV9mb3JtYXQgPSAzNDYsICAgICAgIC8qIC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Zm9ybWF0ICovCisgIE9QVF9Xc3VnZ2VzdF9hdHRyaWJ1dGVfbm9yZXR1cm4gPSAzNDcsICAgICAvKiAtV3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuICovCisgIE9QVF9Xc3VnZ2VzdF9hdHRyaWJ1dGVfcHVyZSA9IDM0OCwgICAgICAgICAvKiAtV3N1Z2dlc3QtYXR0cmlidXRlPXB1cmUgKi8KKyAgT1BUX1dzdXBwcmVzcyA9IDM0OSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3VwcHJlc3MgKi8KKyAgT1BUX1dzdXJwcmlzaW5nID0gMzUwLCAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3VycHJpc2luZyAqLworICBPUFRfV3N3aXRjaCA9IDM1MSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVdzd2l0Y2ggKi8KKyAgT1BUX1dzd2l0Y2hfZGVmYXVsdCA9IDM1MiwgICAgICAgICAgICAgICAgIC8qIC1Xc3dpdGNoLWRlZmF1bHQgKi8KKyAgT1BUX1dzd2l0Y2hfZW51bSA9IDM1MywgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3dpdGNoLWVudW0gKi8KKyAgT1BUX1dzeW5jX25hbmQgPSAzNTQsICAgICAgICAgICAgICAgICAgICAgIC8qIC1Xc3luYy1uYW5kICovCisgIE9QVF9Xc3ludGggPSAzNTUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3N5bnRoICovCisgIE9QVF9Xc3ludGhldGljX2FjY2VzcyA9IDM1NiwgICAgICAgICAgICAgICAvKiAtV3N5bnRoZXRpYy1hY2Nlc3MgKi8KKyAgT1BUX1dzeXN0ZW1faGVhZGVycyA9IDM1NywgICAgICAgICAgICAgICAgIC8qIC1Xc3lzdGVtLWhlYWRlcnMgKi8KKyAgT1BUX1d0YWJzID0gMzU4LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdGFicyAqLworICBPUFRfV3RhcmdldF9saWZldGltZSA9IDM1OSwgICAgICAgICAgICAgICAgLyogLVd0YXJnZXQtbGlmZXRpbWUgKi8KKyAgT1BUX1d0YXNrcyA9IDM2MCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdGFza3MgKi8KKyAgT1BUX1d0cmFkaXRpb25hbCA9IDM2MSwgICAgICAgICAgICAgICAgICAgIC8qIC1XdHJhZGl0aW9uYWwgKi8KKyAgT1BUX1d0cmFkaXRpb25hbF9jb252ZXJzaW9uID0gMzYyLCAgICAgICAgIC8qIC1XdHJhZGl0aW9uYWwtY29udmVyc2lvbiAqLworICBPUFRfV3RyYW1wb2xpbmVzID0gMzYzLCAgICAgICAgICAgICAgICAgICAgLyogLVd0cmFtcG9saW5lcyAqLworICBPUFRfV3RyaWdyYXBocyA9IDM2NCwgICAgICAgICAgICAgICAgICAgICAgLyogLVd0cmlncmFwaHMgKi8KKyAgT1BUX1d0eXBlX2hpZGluZyA9IDM2NSwgICAgICAgICAgICAgICAgICAgIC8qIC1XdHlwZS1oaWRpbmcgKi8KKyAgT1BUX1d0eXBlX2xpbWl0cyA9IDM2NiwgICAgICAgICAgICAgICAgICAgIC8qIC1XdHlwZS1saW1pdHMgKi8KKyAgT1BUX1d1bmNoZWNrID0gMzY3LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdW5jaGVjayAqLworICBPUFRfV3VuZGVjbGFyZWRfc2VsZWN0b3IgPSAzNjgsICAgICAgICAgICAgLyogLVd1bmRlY2xhcmVkLXNlbGVjdG9yICovCisgIE9QVF9XdW5kZWYgPSAzNjksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtV3VuZGVmICovCisgIE9QVF9XdW5kZXJmbG93ID0gMzcwLCAgICAgICAgICAgICAgICAgICAgICAvKiAtV3VuZGVyZmxvdyAqLworICBPUFRfV3VuaW5pdGlhbGl6ZWQgPSAzNzEsICAgICAgICAgICAgICAgICAgLyogLVd1bmluaXRpYWxpemVkICovCisgIE9QVF9XdW5rbm93bl9wcmFnbWFzID0gMzcyLCAgICAgICAgICAgICAgICAvKiAtV3Vua25vd24tcHJhZ21hcyAqLworICBPUFRfV3VubmVjZXNzYXJ5X2Vsc2UgPSAzNzMsICAgICAgICAgICAgICAgLyogLVd1bm5lY2Vzc2FyeS1lbHNlICovCisgIE9QVF9XdW5xdWFsaWZpZWRfZmllbGQgPSAzNzQsICAgICAgICAgICAgICAvKiAtV3VucXVhbGlmaWVkLWZpZWxkICovCisgIC8qIE9QVF9XdW5yZWFjaGFibGVfY29kZSA9IDM3NSwgKi8gICAgICAgICAvKiAtV3VucmVhY2hhYmxlLWNvZGUgKi8KKyAgT1BUX1d1bnNhZmVfbG9vcF9vcHRpbWl6YXRpb25zID0gMzc2LCAgICAgIC8qIC1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyAqLworICBPUFRfV3Vuc3VmZml4ZWRfZmxvYXRfY29uc3RhbnRzID0gMzc3LCAgICAgLyogLVd1bnN1ZmZpeGVkLWZsb2F0LWNvbnN0YW50cyAqLworICBPUFRfV3VudXNlZCA9IDM3OCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd1bnVzZWQgKi8KKyAgT1BUX1d1bnVzZWRfYXJndW1lbnQgPSAzNzksICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLWFyZ3VtZW50ICovCisgIE9QVF9XdW51c2VkX2J1dF9zZXRfcGFyYW1ldGVyID0gMzgwLCAgICAgICAvKiAtV3VudXNlZC1idXQtc2V0LXBhcmFtZXRlciAqLworICBPUFRfV3VudXNlZF9idXRfc2V0X3ZhcmlhYmxlID0gMzgxLCAgICAgICAgLyogLVd1bnVzZWQtYnV0LXNldC12YXJpYWJsZSAqLworICBPUFRfV3VudXNlZF9kdW1teV9hcmd1bWVudCA9IDM4MiwgICAgICAgICAgLyogLVd1bnVzZWQtZHVtbXktYXJndW1lbnQgKi8KKyAgT1BUX1d1bnVzZWRfZnVuY3Rpb24gPSAzODMsICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLWZ1bmN0aW9uICovCisgIE9QVF9XdW51c2VkX2ltcG9ydCA9IDM4NCwgICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZC1pbXBvcnQgKi8KKyAgT1BUX1d1bnVzZWRfbGFiZWwgPSAzODUsICAgICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLWxhYmVsICovCisgIE9QVF9XdW51c2VkX2xvY2FsID0gMzg2LCAgICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZC1sb2NhbCAqLworICBPUFRfV3VudXNlZF9sb2NhbF90eXBlZGVmcyA9IDM4NywgICAgICAgICAgLyogLVd1bnVzZWQtbG9jYWwtdHlwZWRlZnMgKi8KKyAgT1BUX1d1bnVzZWRfbWFjcm9zID0gMzg4LCAgICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLW1hY3JvcyAqLworICBPUFRfV3VudXNlZF9wYXJhbWV0ZXIgPSAzODksICAgICAgICAgICAgICAgLyogLVd1bnVzZWQtcGFyYW1ldGVyICovCisgIE9QVF9XdW51c2VkX3ByaXZhdGUgPSAzOTAsICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZC1wcml2YXRlICovCisgIE9QVF9XdW51c2VkX3Jlc3VsdCA9IDM5MSwgICAgICAgICAgICAgICAgICAvKiAtV3VudXNlZC1yZXN1bHQgKi8KKyAgT1BUX1d1bnVzZWRfdGhyb3duID0gMzkyLCAgICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLXRocm93biAqLworICBPUFRfV3VudXNlZF92YWx1ZSA9IDM5MywgICAgICAgICAgICAgICAgICAgLyogLVd1bnVzZWQtdmFsdWUgKi8KKyAgT1BUX1d1bnVzZWRfdmFyaWFibGUgPSAzOTQsICAgICAgICAgICAgICAgIC8qIC1XdW51c2VkLXZhcmlhYmxlICovCisgIE9QVF9XdXNlbGVzc19jYXN0ID0gMzk1LCAgICAgICAgICAgICAgICAgICAvKiAtV3VzZWxlc3MtY2FzdCAqLworICBPUFRfV3VzZWxlc3NfdHlwZV9jaGVjayA9IDM5NiwgICAgICAgICAgICAgLyogLVd1c2VsZXNzLXR5cGUtY2hlY2sgKi8KKyAgT1BUX1d2YXJhcmdzID0gMzk3LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1XdmFyYXJncyAqLworICBPUFRfV3ZhcmFyZ3NfY2FzdCA9IDM5OCwgICAgICAgICAgICAgICAgICAgLyogLVd2YXJhcmdzLWNhc3QgKi8KKyAgT1BUX1d2YXJpYWRpY19tYWNyb3MgPSAzOTksICAgICAgICAgICAgICAgIC8qIC1XdmFyaWFkaWMtbWFjcm9zICovCisgIE9QVF9XdmVjdG9yX29wZXJhdGlvbl9wZXJmb3JtYW5jZSA9IDQwMCwgICAvKiAtV3ZlY3Rvci1vcGVyYXRpb24tcGVyZm9ybWFuY2UgKi8KKyAgT1BUX1d2aXJ0dWFsX21vdmVfYXNzaWduID0gNDAxLCAgICAgICAgICAgIC8qIC1XdmlydHVhbC1tb3ZlLWFzc2lnbiAqLworICBPUFRfV3ZsYSA9IDQwMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVd2bGEgKi8KKyAgT1BUX1d2b2xhdGlsZV9yZWdpc3Rlcl92YXIgPSA0MDMsICAgICAgICAgIC8qIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyICovCisgIE9QVF9Xd2FybmluZ190b2tlbiA9IDQwNCwgICAgICAgICAgICAgICAgICAvKiAtV3dhcm5pbmctdG9rZW4gKi8KKyAgT1BUX1d3cml0ZV9zdHJpbmdzID0gNDA1LCAgICAgICAgICAgICAgICAgIC8qIC1Xd3JpdGUtc3RyaW5ncyAqLworICBPUFRfV3plcm9fYXNfbnVsbF9wb2ludGVyX2NvbnN0YW50ID0gNDA2LCAgLyogLVd6ZXJvLWFzLW51bGwtcG9pbnRlci1jb25zdGFudCAqLworICBPUFRfWGFzc2VtYmxlciA9IDQwNywgICAgICAgICAgICAgICAgICAgICAgLyogLVhhc3NlbWJsZXIgKi8KKyAgT1BUX1hsaW5rZXIgPSA0MDgsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1YbGlua2VyICovCisgIE9QVF9YcHJlcHJvY2Vzc29yID0gNDA5LCAgICAgICAgICAgICAgICAgICAvKiAtWHByZXByb2Nlc3NvciAqLworICBPUFRfWiA9IDQxMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLVogKi8KKyAgT1BUX2Fuc2kgPSA0MTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1hbnNpICovCisgIE9QVF9hdXhfaW5mbyA9IDQxMiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtYXV4LWluZm8gKi8KKyAgLyogT1BUX2F1eF9pbmZvXyA9IDQxMywgKi8gICAgICAgICAgICAgICAgIC8qIC1hdXgtaW5mbz0gKi8KKyAgT1BUX2F1eGJhc2UgPSA0MTQsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1hdXhiYXNlICovCisgIE9QVF9hdXhiYXNlX3N0cmlwID0gNDE1LCAgICAgICAgICAgICAgICAgICAvKiAtYXV4YmFzZS1zdHJpcCAqLworICAvKiBPUFRfYm9vdGNsYXNzcGF0aCA9IDQxNiwgKi8gICAgICAgICAgICAgLyogLWJvb3RjbGFzc3BhdGggKi8KKyAgT1BUX2MgPSA0MTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1jICovCisgIC8qIE9QVF9jbGFzc3BhdGggPSA0MTgsICovICAgICAgICAgICAgICAgICAvKiAtY2xhc3NwYXRoICovCisgIE9QVF9jb3ZlcmFnZSA9IDQxOSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtY292ZXJhZ2UgKi8KKyAgT1BUX2NwcCA9IDQyMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1jcHAgKi8KKyAgT1BUX2NwcF8gPSA0MjEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1jcHA9ICovCisgIE9QVF9kID0gNDIyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZCAqLworICBPUFRfZHVtcGJhc2UgPSA0MjMsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWR1bXBiYXNlICovCisgIE9QVF9kdW1wZGlyID0gNDI0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZHVtcGRpciAqLworICBPUFRfZHVtcG1hY2hpbmUgPSA0MjUsICAgICAgICAgICAgICAgICAgICAgLyogLWR1bXBtYWNoaW5lICovCisgIE9QVF9kdW1wc3BlY3MgPSA0MjYsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZHVtcHNwZWNzICovCisgIE9QVF9kdW1wdmVyc2lvbiA9IDQyNywgICAgICAgICAgICAgICAgICAgICAvKiAtZHVtcHZlcnNpb24gKi8KKyAgT1BUX2UgPSA0MjgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1lICovCisgIC8qIE9QVF9lbmNvZGluZyA9IDQyOSwgKi8gICAgICAgICAgICAgICAgICAvKiAtZW5jb2RpbmcgKi8KKyAgT1BUX2V4cG9ydF9keW5hbWljID0gNDMwLCAgICAgICAgICAgICAgICAgIC8qIC1leHBvcnQtZHluYW1pYyAqLworICBPUFRfZXh0ZGlycyA9IDQzMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWV4dGRpcnMgKi8KKyAgLyogT1BUX2ZDTEFTU1BBVEhfID0gNDMyLCAqLyAgICAgICAgICAgICAgIC8qIC1mQ0xBU1NQQVRIPSAqLworICBPUFRfZlBJQyA9IDQzMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZQSUMgKi8KKyAgT1BUX2ZQSUUgPSA0MzQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mUElFICovCisgIE9QVF9mUlRTXyA9IDQzNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZlJUUz0gKi8KKyAgT1BUX2ZhYmlfdmVyc2lvbl8gPSA0MzYsICAgICAgICAgICAgICAgICAgIC8qIC1mYWJpLXZlcnNpb249ICovCisgIE9QVF9mYWNjZXNzX2NvbnRyb2wgPSA0MzcsICAgICAgICAgICAgICAgICAvKiAtZmFjY2Vzcy1jb250cm9sICovCisgIE9QVF9mYWRhX3NwZWNfcGFyZW50XyA9IDQzOCwgICAgICAgICAgICAgICAvKiAtZmFkYS1zcGVjLXBhcmVudD0gKi8KKyAgT1BUX2ZhZ2dyZXNzaXZlX2Z1bmN0aW9uX2VsaW1pbmF0aW9uID0gNDM5LC8qIC1mYWdncmVzc2l2ZS1mdW5jdGlvbi1lbGltaW5hdGlvbiAqLworICBPUFRfZmFnZ3Jlc3NpdmVfbG9vcF9vcHRpbWl6YXRpb25zID0gNDQwLCAgLyogLWZhZ2dyZXNzaXZlLWxvb3Atb3B0aW1pemF0aW9ucyAqLworICBPUFRfZmFsaWduX2NvbW1vbnMgPSA0NDEsICAgICAgICAgICAgICAgICAgLyogLWZhbGlnbi1jb21tb25zICovCisgIE9QVF9mYWxpZ25fZnVuY3Rpb25zID0gNDQyLCAgICAgICAgICAgICAgICAvKiAtZmFsaWduLWZ1bmN0aW9ucyAqLworICBPUFRfZmFsaWduX2Z1bmN0aW9uc18gPSA0NDMsICAgICAgICAgICAgICAgLyogLWZhbGlnbi1mdW5jdGlvbnM9ICovCisgIE9QVF9mYWxpZ25fanVtcHMgPSA0NDQsICAgICAgICAgICAgICAgICAgICAvKiAtZmFsaWduLWp1bXBzICovCisgIE9QVF9mYWxpZ25fanVtcHNfID0gNDQ1LCAgICAgICAgICAgICAgICAgICAvKiAtZmFsaWduLWp1bXBzPSAqLworICBPUFRfZmFsaWduX2xhYmVscyA9IDQ0NiwgICAgICAgICAgICAgICAgICAgLyogLWZhbGlnbi1sYWJlbHMgKi8KKyAgT1BUX2ZhbGlnbl9sYWJlbHNfID0gNDQ3LCAgICAgICAgICAgICAgICAgIC8qIC1mYWxpZ24tbGFiZWxzPSAqLworICBPUFRfZmFsaWduX2xvb3BzID0gNDQ4LCAgICAgICAgICAgICAgICAgICAgLyogLWZhbGlnbi1sb29wcyAqLworICBPUFRfZmFsaWduX2xvb3BzXyA9IDQ0OSwgICAgICAgICAgICAgICAgICAgLyogLWZhbGlnbi1sb29wcz0gKi8KKyAgT1BUX2ZhbGxfaW50cmluc2ljcyA9IDQ1MCwgICAgICAgICAgICAgICAgIC8qIC1mYWxsLWludHJpbnNpY3MgKi8KKyAgLyogT1BUX2ZhbGxfdmlydHVhbCA9IDQ1MSwgKi8gICAgICAgICAgICAgIC8qIC1mYWxsLXZpcnR1YWwgKi8KKyAgT1BUX2ZhbGxvd19sZWFkaW5nX3VuZGVyc2NvcmUgPSA0NTIsICAgICAgIC8qIC1mYWxsb3ctbGVhZGluZy11bmRlcnNjb3JlICovCisgIE9QVF9mYWxsb3dfcGFyYW1ldGVybGVzc192YXJpYWRpY19mdW5jdGlvbnMgPSA0NTMsLyogLWZhbGxvdy1wYXJhbWV0ZXJsZXNzLXZhcmlhZGljLWZ1bmN0aW9ucyAqLworICAvKiBPUFRfZmFsdF9leHRlcm5hbF90ZW1wbGF0ZXMgPSA0NTQsICovICAgLyogLWZhbHQtZXh0ZXJuYWwtdGVtcGxhdGVzICovCisgIC8qIE9QVF9mYXJndW1lbnRfYWxpYXMgPSA0NTUsICovICAgICAgICAgICAvKiAtZmFyZ3VtZW50LWFsaWFzICovCisgIC8qIE9QVF9mYXJndW1lbnRfbm9hbGlhcyA9IDQ1NiwgKi8gICAgICAgICAvKiAtZmFyZ3VtZW50LW5vYWxpYXMgKi8KKyAgLyogT1BUX2Zhcmd1bWVudF9ub2FsaWFzX2FueXRoaW5nID0gNDU3LCAqLy8qIC1mYXJndW1lbnQtbm9hbGlhcy1hbnl0aGluZyAqLworICAvKiBPUFRfZmFyZ3VtZW50X25vYWxpYXNfZ2xvYmFsID0gNDU4LCAqLyAgLyogLWZhcmd1bWVudC1ub2FsaWFzLWdsb2JhbCAqLworICBPUFRfZmFzbSA9IDQ1OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZhc20gKi8KKyAgT1BUX2Zhc3NlcnQgPSA0NjAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYXNzZXJ0ICovCisgIE9QVF9mYXNzb2NpYXRpdmVfbWF0aCA9IDQ2MSwgICAgICAgICAgICAgICAvKiAtZmFzc29jaWF0aXZlLW1hdGggKi8KKyAgT1BUX2Zhc3N1bWVfY29tcGlsZWQgPSA0NjIsICAgICAgICAgICAgICAgIC8qIC1mYXNzdW1lLWNvbXBpbGVkICovCisgIE9QVF9mYXNzdW1lX2NvbXBpbGVkXyA9IDQ2MywgICAgICAgICAgICAgICAvKiAtZmFzc3VtZS1jb21waWxlZD0gKi8KKyAgT1BUX2Zhc3luY2hyb25vdXNfdW53aW5kX3RhYmxlcyA9IDQ2NCwgICAgIC8qIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMgKi8KKyAgT1BUX2ZhdXRvX2luY19kZWMgPSA0NjUsICAgICAgICAgICAgICAgICAgIC8qIC1mYXV0by1pbmMtZGVjICovCisgIE9QVF9mYXV0b21hdGljID0gNDY2LCAgICAgICAgICAgICAgICAgICAgICAvKiAtZmF1dG9tYXRpYyAqLworICBPUFRfZmF1eF9jbGFzc3BhdGggPSA0NjcsICAgICAgICAgICAgICAgICAgLyogLWZhdXgtY2xhc3NwYXRoICovCisgIE9QVF9mYmFja3NsYXNoID0gNDY4LCAgICAgICAgICAgICAgICAgICAgICAvKiAtZmJhY2tzbGFzaCAqLworICBPUFRfZmJhY2t0cmFjZSA9IDQ2OSwgICAgICAgICAgICAgICAgICAgICAgLyogLWZiYWNrdHJhY2UgKi8KKyAgT1BUX2ZibGFzX21hdG11bF9saW1pdF8gPSA0NzAsICAgICAgICAgICAgIC8qIC1mYmxhcy1tYXRtdWwtbGltaXQ9ICovCisgIE9QVF9mYm9vdGNsYXNzcGF0aF8gPSA0NzEsICAgICAgICAgICAgICAgICAvKiAtZmJvb3RjbGFzc3BhdGg9ICovCisgIE9QVF9mYm9vdHN0cmFwX2NsYXNzZXMgPSA0NzIsICAgICAgICAgICAgICAvKiAtZmJvb3RzdHJhcC1jbGFzc2VzICovCisgIE9QVF9mYm91bmRzX2NoZWNrID0gNDczLCAgICAgICAgICAgICAgICAgICAvKiAtZmJvdW5kcy1jaGVjayAqLworICBPUFRfZmJyYW5jaF9jb3VudF9yZWcgPSA0NzQsICAgICAgICAgICAgICAgLyogLWZicmFuY2gtY291bnQtcmVnICovCisgIE9QVF9mYnJhbmNoX3Byb2JhYmlsaXRpZXMgPSA0NzUsICAgICAgICAgICAvKiAtZmJyYW5jaC1wcm9iYWJpbGl0aWVzICovCisgIE9QVF9mYnJhbmNoX3RhcmdldF9sb2FkX29wdGltaXplID0gNDc2LCAgICAvKiAtZmJyYW5jaC10YXJnZXQtbG9hZC1vcHRpbWl6ZSAqLworICBPUFRfZmJyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTIgPSA0NzcsICAgLyogLWZicmFuY2gtdGFyZ2V0LWxvYWQtb3B0aW1pemUyICovCisgIE9QVF9mYnRyX2JiX2V4Y2x1c2l2ZSA9IDQ3OCwgICAgICAgICAgICAgICAvKiAtZmJ0ci1iYi1leGNsdXNpdmUgKi8KKyAgT1BUX2ZidWlsZGluZ19saWJnY2MgPSA0NzksICAgICAgICAgICAgICAgIC8qIC1mYnVpbGRpbmctbGliZ2NjICovCisgIE9QVF9mYnVpbHRpbiA9IDQ4MCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmJ1aWx0aW4gKi8KKyAgT1BUX2ZidWlsdGluXyA9IDQ4MSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mYnVpbHRpbi0gKi8KKyAgT1BUX2ZjYWxsX3NhdmVkXyA9IDQ4MiwgICAgICAgICAgICAgICAgICAgIC8qIC1mY2FsbC1zYXZlZC0gKi8KKyAgT1BUX2ZjYWxsX3VzZWRfID0gNDgzLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mY2FsbC11c2VkLSAqLworICBPUFRfZmNhbGxlcl9zYXZlcyA9IDQ4NCwgICAgICAgICAgICAgICAgICAgLyogLWZjYWxsZXItc2F2ZXMgKi8KKyAgT1BUX2ZjYW5vbmljYWxfc3lzdGVtX2hlYWRlcnMgPSA0ODUsICAgICAgIC8qIC1mY2Fub25pY2FsLXN5c3RlbS1oZWFkZXJzICovCisgIE9QVF9mY2hlY2tfYXJyYXlfdGVtcG9yYXJpZXMgPSA0ODYsICAgICAgICAvKiAtZmNoZWNrLWFycmF5LXRlbXBvcmFyaWVzICovCisgIE9QVF9mY2hlY2tfZGF0YV9kZXBzID0gNDg3LCAgICAgICAgICAgICAgICAvKiAtZmNoZWNrLWRhdGEtZGVwcyAqLworICBPUFRfZmNoZWNrX25ldyA9IDQ4OCwgICAgICAgICAgICAgICAgICAgICAgLyogLWZjaGVjay1uZXcgKi8KKyAgT1BUX2ZjaGVja19yZWZlcmVuY2VzID0gNDg5LCAgICAgICAgICAgICAgIC8qIC1mY2hlY2stcmVmZXJlbmNlcyAqLworICBPUFRfZmNoZWNrXyA9IDQ5MCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjaGVjaz0gKi8KKyAgT1BUX2ZjbGFzc3BhdGhfID0gNDkxLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mY2xhc3NwYXRoPSAqLworICBPUFRfZmNvYXJyYXlfID0gNDkyLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZjb2FycmF5PSAqLworICBPUFRfZmNvbWJpbmVfc3RhY2tfYWRqdXN0bWVudHMgPSA0OTMsICAgICAgLyogLWZjb21iaW5lLXN0YWNrLWFkanVzdG1lbnRzICovCisgIE9QVF9mY29tbW9uID0gNDk0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmNvbW1vbiAqLworICBPUFRfZmNvbXBhcmVfZGVidWcgPSA0OTUsICAgICAgICAgICAgICAgICAgLyogLWZjb21wYXJlLWRlYnVnICovCisgIE9QVF9mY29tcGFyZV9kZWJ1Z19zZWNvbmQgPSA0OTYsICAgICAgICAgICAvKiAtZmNvbXBhcmUtZGVidWctc2Vjb25kICovCisgIE9QVF9mY29tcGFyZV9kZWJ1Z18gPSA0OTcsICAgICAgICAgICAgICAgICAvKiAtZmNvbXBhcmUtZGVidWc9ICovCisgIE9QVF9mY29tcGFyZV9lbGltID0gNDk4LCAgICAgICAgICAgICAgICAgICAvKiAtZmNvbXBhcmUtZWxpbSAqLworICBPUFRfZmNvbXBpbGVfcmVzb3VyY2VfID0gNDk5LCAgICAgICAgICAgICAgLyogLWZjb21waWxlLXJlc291cmNlPSAqLworICBPUFRfZmNvbmRfbWlzbWF0Y2ggPSA1MDAsICAgICAgICAgICAgICAgICAgLyogLWZjb25kLW1pc21hdGNoICovCisgIE9QVF9mY29uc2VydmVfc3BhY2UgPSA1MDEsICAgICAgICAgICAgICAgICAvKiAtZmNvbnNlcnZlLXNwYWNlICovCisgIE9QVF9mY29uc2VydmVfc3RhY2sgPSA1MDIsICAgICAgICAgICAgICAgICAvKiAtZmNvbnNlcnZlLXN0YWNrICovCisgIE9QVF9mY29uc3RhbnRfc3RyaW5nX2NsYXNzXyA9IDUwMywgICAgICAgICAvKiAtZmNvbnN0YW50LXN0cmluZy1jbGFzcz0gKi8KKyAgT1BUX2Zjb25zdGV4cHJfZGVwdGhfID0gNTA0LCAgICAgICAgICAgICAgIC8qIC1mY29uc3RleHByLWRlcHRoPSAqLworICBPUFRfZmNvbnZlcnRfYmlnX2VuZGlhbiA9IDUwNSwgICAgICAgICAgICAgLyogLWZjb252ZXJ0PWJpZy1lbmRpYW4gKi8KKyAgT1BUX2Zjb252ZXJ0X2xpdHRsZV9lbmRpYW4gPSA1MDYsICAgICAgICAgIC8qIC1mY29udmVydD1saXR0bGUtZW5kaWFuICovCisgIE9QVF9mY29udmVydF9uYXRpdmUgPSA1MDcsICAgICAgICAgICAgICAgICAvKiAtZmNvbnZlcnQ9bmF0aXZlICovCisgIE9QVF9mY29udmVydF9zd2FwID0gNTA4LCAgICAgICAgICAgICAgICAgICAvKiAtZmNvbnZlcnQ9c3dhcCAqLworICBPUFRfZmNwcm9wX3JlZ2lzdGVycyA9IDUwOSwgICAgICAgICAgICAgICAgLyogLWZjcHJvcC1yZWdpc3RlcnMgKi8KKyAgT1BUX2ZjcmF5X3BvaW50ZXIgPSA1MTAsICAgICAgICAgICAgICAgICAgIC8qIC1mY3JheS1wb2ludGVyICovCisgIE9QVF9mY3Jvc3NqdW1waW5nID0gNTExLCAgICAgICAgICAgICAgICAgICAvKiAtZmNyb3NzanVtcGluZyAqLworICBPUFRfZmNzZV9mb2xsb3dfanVtcHMgPSA1MTIsICAgICAgICAgICAgICAgLyogLWZjc2UtZm9sbG93LWp1bXBzICovCisgIC8qIE9QVF9mY3NlX3NraXBfYmxvY2tzID0gNTEzLCAqLyAgICAgICAgICAvKiAtZmNzZS1za2lwLWJsb2NrcyAqLworICBPUFRfZmN4X2ZvcnRyYW5fcnVsZXMgPSA1MTQsICAgICAgICAgICAgICAgLyogLWZjeC1mb3J0cmFuLXJ1bGVzICovCisgIE9QVF9mY3hfbGltaXRlZF9yYW5nZSA9IDUxNSwgICAgICAgICAgICAgICAvKiAtZmN4LWxpbWl0ZWQtcmFuZ2UgKi8KKyAgT1BUX2ZkX2xpbmVzX2FzX2NvZGUgPSA1MTYsICAgICAgICAgICAgICAgIC8qIC1mZC1saW5lcy1hcy1jb2RlICovCisgIE9QVF9mZF9saW5lc19hc19jb21tZW50cyA9IDUxNywgICAgICAgICAgICAvKiAtZmQtbGluZXMtYXMtY29tbWVudHMgKi8KKyAgT1BUX2ZkYXRhX3NlY3Rpb25zID0gNTE4LCAgICAgICAgICAgICAgICAgIC8qIC1mZGF0YS1zZWN0aW9ucyAqLworICBPUFRfZmRiZ19jbnRfbGlzdCA9IDUxOSwgICAgICAgICAgICAgICAgICAgLyogLWZkYmctY250LWxpc3QgKi8KKyAgT1BUX2ZkYmdfY250XyA9IDUyMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZGJnLWNudD0gKi8KKyAgT1BUX2ZkY2UgPSA1MjEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZGNlICovCisgIE9QVF9mZGVidWdfY3BwID0gNTIyLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZmRlYnVnLWNwcCAqLworICBPUFRfZmRlYnVnX3ByZWZpeF9tYXBfID0gNTIzLCAgICAgICAgICAgICAgLyogLWZkZWJ1Zy1wcmVmaXgtbWFwPSAqLworICBPUFRfZmRlYnVnX3R5cGVzX3NlY3Rpb24gPSA1MjQsICAgICAgICAgICAgLyogLWZkZWJ1Zy10eXBlcy1zZWN0aW9uICovCisgIE9QVF9mZGVkdWNlX2luaXRfbGlzdCA9IDUyNSwgICAgICAgICAgICAgICAvKiAtZmRlZHVjZS1pbml0LWxpc3QgKi8KKyAgT1BUX2ZkZWZhdWx0X2RvdWJsZV84ID0gNTI2LCAgICAgICAgICAgICAgIC8qIC1mZGVmYXVsdC1kb3VibGUtOCAqLworICAvKiBPUFRfZmRlZmF1bHRfaW5saW5lID0gNTI3LCAqLyAgICAgICAgICAgLyogLWZkZWZhdWx0LWlubGluZSAqLworICBPUFRfZmRlZmF1bHRfaW50ZWdlcl84ID0gNTI4LCAgICAgICAgICAgICAgLyogLWZkZWZhdWx0LWludGVnZXItOCAqLworICBPUFRfZmRlZmF1bHRfcmVhbF84ID0gNTI5LCAgICAgICAgICAgICAgICAgLyogLWZkZWZhdWx0LXJlYWwtOCAqLworICBPUFRfZmRlZmVyX3BvcCA9IDUzMCwgICAgICAgICAgICAgICAgICAgICAgLyogLWZkZWZlci1wb3AgKi8KKyAgT1BUX2ZkZWxheWVkX2JyYW5jaCA9IDUzMSwgICAgICAgICAgICAgICAgIC8qIC1mZGVsYXllZC1icmFuY2ggKi8KKyAgT1BUX2ZkZWxldGVfZGVhZF9leGNlcHRpb25zID0gNTMyLCAgICAgICAgIC8qIC1mZGVsZXRlLWRlYWQtZXhjZXB0aW9ucyAqLworICBPUFRfZmRlbGV0ZV9udWxsX3BvaW50ZXJfY2hlY2tzID0gNTMzLCAgICAgLyogLWZkZWxldGUtbnVsbC1wb2ludGVyLWNoZWNrcyAqLworICBPUFRfZmRldmlydHVhbGl6ZSA9IDUzNCwgICAgICAgICAgICAgICAgICAgLyogLWZkZXZpcnR1YWxpemUgKi8KKyAgT1BUX2ZkaWFnbm9zdGljc19zaG93X2NhcmV0ID0gNTM1LCAgICAgICAgIC8qIC1mZGlhZ25vc3RpY3Mtc2hvdy1jYXJldCAqLworICBPUFRfZmRpYWdub3N0aWNzX3Nob3dfbG9jYXRpb25fID0gNTM2LCAgICAgLyogLWZkaWFnbm9zdGljcy1zaG93LWxvY2F0aW9uPSAqLworICBPUFRfZmRpYWdub3N0aWNzX3Nob3dfb3B0aW9uID0gNTM3LCAgICAgICAgLyogLWZkaWFnbm9zdGljcy1zaG93LW9wdGlvbiAqLworICBPUFRfZmRpcmVjdGl2ZXNfb25seSA9IDUzOCwgICAgICAgICAgICAgICAgLyogLWZkaXJlY3RpdmVzLW9ubHkgKi8KKyAgT1BUX2ZkaXNhYmxlXyA9IDUzOSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZGlzYWJsZS0gKi8KKyAgT1BUX2ZkaXNhYmxlX2Fzc2VydGlvbnMgPSA1NDAsICAgICAgICAgICAgIC8qIC1mZGlzYWJsZS1hc3NlcnRpb25zICovCisgIE9QVF9mZGlzYWJsZV9hc3NlcnRpb25zXyA9IDU0MSwgICAgICAgICAgICAvKiAtZmRpc2FibGUtYXNzZXJ0aW9ucz0gKi8KKyAgT1BUX2Zkb2xsYXJfb2sgPSA1NDIsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZG9sbGFyLW9rICovCisgIE9QVF9mZG9sbGFyc19pbl9pZGVudGlmaWVycyA9IDU0MywgICAgICAgICAvKiAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgKi8KKyAgT1BUX2Zkc2UgPSA1NDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZHNlICovCisgIE9QVF9mZHVtcF8gPSA1NDUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmR1bXAtICovCisgIE9QVF9mZHVtcF9hZGFfc3BlYyA9IDU0NiwgICAgICAgICAgICAgICAgICAvKiAtZmR1bXAtYWRhLXNwZWMgKi8KKyAgT1BUX2ZkdW1wX2FkYV9zcGVjX3NsaW0gPSA1NDcsICAgICAgICAgICAgIC8qIC1mZHVtcC1hZGEtc3BlYy1zbGltICovCisgIC8qIE9QVF9mZHVtcF9jb3JlID0gNTQ4LCAqLyAgICAgICAgICAgICAgICAvKiAtZmR1bXAtY29yZSAqLworICBPUFRfZmR1bXBfZmluYWxfaW5zbnMgPSA1NDksICAgICAgICAgICAgICAgLyogLWZkdW1wLWZpbmFsLWluc25zICovCisgIE9QVF9mZHVtcF9maW5hbF9pbnNuc18gPSA1NTAsICAgICAgICAgICAgICAvKiAtZmR1bXAtZmluYWwtaW5zbnM9ICovCisgIE9QVF9mZHVtcF9mb3J0cmFuX29wdGltaXplZCA9IDU1MSwgICAgICAgICAvKiAtZmR1bXAtZm9ydHJhbi1vcHRpbWl6ZWQgKi8KKyAgT1BUX2ZkdW1wX2ZvcnRyYW5fb3JpZ2luYWwgPSA1NTIsICAgICAgICAgIC8qIC1mZHVtcC1mb3J0cmFuLW9yaWdpbmFsICovCisgIE9QVF9mZHVtcF9nb19zcGVjXyA9IDU1MywgICAgICAgICAgICAgICAgICAvKiAtZmR1bXAtZ28tc3BlYz0gKi8KKyAgT1BUX2ZkdW1wX25vYWRkciA9IDU1NCwgICAgICAgICAgICAgICAgICAgIC8qIC1mZHVtcC1ub2FkZHIgKi8KKyAgT1BUX2ZkdW1wX3BhcnNlX3RyZWUgPSA1NTUsICAgICAgICAgICAgICAgIC8qIC1mZHVtcC1wYXJzZS10cmVlICovCisgIE9QVF9mZHVtcF9wYXNzZXMgPSA1NTYsICAgICAgICAgICAgICAgICAgICAvKiAtZmR1bXAtcGFzc2VzICovCisgIE9QVF9mZHVtcF91bm51bWJlcmVkID0gNTU3LCAgICAgICAgICAgICAgICAvKiAtZmR1bXAtdW5udW1iZXJlZCAqLworICBPUFRfZmR1bXBfdW5udW1iZXJlZF9saW5rcyA9IDU1OCwgICAgICAgICAgLyogLWZkdW1wLXVubnVtYmVyZWQtbGlua3MgKi8KKyAgT1BUX2Zkd2FyZjJfY2ZpX2FzbSA9IDU1OSwgICAgICAgICAgICAgICAgIC8qIC1mZHdhcmYyLWNmaS1hc20gKi8KKyAgT1BUX2ZlYXJseV9pbmxpbmluZyA9IDU2MCwgICAgICAgICAgICAgICAgIC8qIC1mZWFybHktaW5saW5pbmcgKi8KKyAgT1BUX2ZlbGlkZV9jb25zdHJ1Y3RvcnMgPSA1NjEsICAgICAgICAgICAgIC8qIC1mZWxpZGUtY29uc3RydWN0b3JzICovCisgIE9QVF9mZWxpbWluYXRlX2R3YXJmMl9kdXBzID0gNTYyLCAgICAgICAgICAvKiAtZmVsaW1pbmF0ZS1kd2FyZjItZHVwcyAqLworICBPUFRfZmVsaW1pbmF0ZV91bnVzZWRfZGVidWdfc3ltYm9scyA9IDU2MywgLyogLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXN5bWJvbHMgKi8KKyAgT1BUX2ZlbGltaW5hdGVfdW51c2VkX2RlYnVnX3R5cGVzID0gNTY0LCAgIC8qIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAqLworICBPUFRfZmVtaXRfY2xhc3NfZGVidWdfYWx3YXlzID0gNTY1LCAgICAgICAgLyogLWZlbWl0LWNsYXNzLWRlYnVnLWFsd2F5cyAqLworICBPUFRfZmVtaXRfY2xhc3NfZmlsZSA9IDU2NiwgICAgICAgICAgICAgICAgLyogLWZlbWl0LWNsYXNzLWZpbGUgKi8KKyAgT1BUX2ZlbWl0X2NsYXNzX2ZpbGVzID0gNTY3LCAgICAgICAgICAgICAgIC8qIC1mZW1pdC1jbGFzcy1maWxlcyAqLworICBPUFRfZmVtaXRfc3RydWN0X2RlYnVnX2Jhc2Vvbmx5ID0gNTY4LCAgICAgLyogLWZlbWl0LXN0cnVjdC1kZWJ1Zy1iYXNlb25seSAqLworICBPUFRfZmVtaXRfc3RydWN0X2RlYnVnX2RldGFpbGVkXyA9IDU2OSwgICAgLyogLWZlbWl0LXN0cnVjdC1kZWJ1Zy1kZXRhaWxlZD0gKi8KKyAgT1BUX2ZlbWl0X3N0cnVjdF9kZWJ1Z19yZWR1Y2VkID0gNTcwLCAgICAgIC8qIC1mZW1pdC1zdHJ1Y3QtZGVidWctcmVkdWNlZCAqLworICBPUFRfZmVuYWJsZV8gPSA1NzEsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZlbmFibGUtICovCisgIE9QVF9mZW5hYmxlX2Fzc2VydGlvbnMgPSA1NzIsICAgICAgICAgICAgICAvKiAtZmVuYWJsZS1hc3NlcnRpb25zICovCisgIE9QVF9mZW5hYmxlX2Fzc2VydGlvbnNfID0gNTczLCAgICAgICAgICAgICAvKiAtZmVuYWJsZS1hc3NlcnRpb25zPSAqLworICBPUFRfZmVuY29kaW5nXyA9IDU3NCwgICAgICAgICAgICAgICAgICAgICAgLyogLWZlbmNvZGluZz0gKi8KKyAgT1BUX2ZlbmZvcmNlX2VoX3NwZWNzID0gNTc1LCAgICAgICAgICAgICAgIC8qIC1mZW5mb3JjZS1laC1zcGVjcyAqLworICAvKiBPUFRfZmVudW1faW50X2VxdWl2ID0gNTc2LCAqLyAgICAgICAgICAgLyogLWZlbnVtLWludC1lcXVpdiAqLworICBPUFRfZmV4Y2VwdGlvbnMgPSA1NzcsICAgICAgICAgICAgICAgICAgICAgLyogLWZleGNlcHRpb25zICovCisgIE9QVF9mZXhjZXNzX3ByZWNpc2lvbl8gPSA1NzgsICAgICAgICAgICAgICAvKiAtZmV4Y2Vzcy1wcmVjaXNpb249ICovCisgIE9QVF9mZXhlY19jaGFyc2V0XyA9IDU3OSwgICAgICAgICAgICAgICAgICAvKiAtZmV4ZWMtY2hhcnNldD0gKi8KKyAgT1BUX2ZleHBlbnNpdmVfb3B0aW1pemF0aW9ucyA9IDU4MCwgICAgICAgIC8qIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgKi8KKyAgT1BUX2ZleHRfbnVtZXJpY19saXRlcmFscyA9IDU4MSwgICAgICAgICAgIC8qIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgKi8KKyAgT1BUX2ZleHRkaXJzXyA9IDU4MiwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZXh0ZGlycz0gKi8KKyAgT1BUX2ZleHRlbmRlZF9pZGVudGlmaWVycyA9IDU4MywgICAgICAgICAgIC8qIC1mZXh0ZW5kZWQtaWRlbnRpZmllcnMgKi8KKyAgT1BUX2ZleHRlcm5fdGxzX2luaXQgPSA1ODQsICAgICAgICAgICAgICAgIC8qIC1mZXh0ZXJuLXRscy1pbml0ICovCisgIE9QVF9mZXh0ZXJuYWxfYmxhcyA9IDU4NSwgICAgICAgICAgICAgICAgICAvKiAtZmV4dGVybmFsLWJsYXMgKi8KKyAgLyogT1BUX2ZleHRlcm5hbF90ZW1wbGF0ZXMgPSA1ODYsICovICAgICAgIC8qIC1mZXh0ZXJuYWwtdGVtcGxhdGVzICovCisgIE9QVF9mZjJjID0gNTg3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmYyYyAqLworICBPUFRfZmZhc3RfbWF0aCA9IDU4OCwgICAgICAgICAgICAgICAgICAgICAgLyogLWZmYXN0LW1hdGggKi8KKyAgT1BUX2ZmYXRfbHRvX29iamVjdHMgPSA1ODksICAgICAgICAgICAgICAgIC8qIC1mZmF0LWx0by1vYmplY3RzICovCisgIE9QVF9mZmlsZWxpc3RfZmlsZSA9IDU5MCwgICAgICAgICAgICAgICAgICAvKiAtZmZpbGVsaXN0LWZpbGUgKi8KKyAgT1BUX2ZmaW5pdGVfbWF0aF9vbmx5ID0gNTkxLCAgICAgICAgICAgICAgIC8qIC1mZmluaXRlLW1hdGgtb25seSAqLworICBPUFRfZmZpeGVkXyA9IDU5MiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZmaXhlZC0gKi8KKyAgT1BUX2ZmaXhlZF9mb3JtID0gNTkzLCAgICAgICAgICAgICAgICAgICAgIC8qIC1mZml4ZWQtZm9ybSAqLworICBPUFRfZmZpeGVkX2xpbmVfbGVuZ3RoXyA9IDU5NCwgICAgICAgICAgICAgLyogLWZmaXhlZC1saW5lLWxlbmd0aC0gKi8KKyAgT1BUX2ZmaXhlZF9saW5lX2xlbmd0aF9ub25lID0gNTk1LCAgICAgICAgIC8qIC1mZml4ZWQtbGluZS1sZW5ndGgtbm9uZSAqLworICBPUFRfZmZsb2F0X3N0b3JlID0gNTk2LCAgICAgICAgICAgICAgICAgICAgLyogLWZmbG9hdC1zdG9yZSAqLworICBPUFRfZmZvcl9zY29wZSA9IDU5NywgICAgICAgICAgICAgICAgICAgICAgLyogLWZmb3Itc2NvcGUgKi8KKyAgLyogT1BUX2Zmb3JjZV9hZGRyID0gNTk4LCAqLyAgICAgICAgICAgICAgIC8qIC1mZm9yY2UtYWRkciAqLworICBPUFRfZmZvcmNlX2NsYXNzZXNfYXJjaGl2ZV9jaGVjayA9IDU5OSwgICAgLyogLWZmb3JjZS1jbGFzc2VzLWFyY2hpdmUtY2hlY2sgKi8KKyAgT1BUX2Zmb3J3YXJkX3Byb3BhZ2F0ZSA9IDYwMCwgICAgICAgICAgICAgIC8qIC1mZm9yd2FyZC1wcm9wYWdhdGUgKi8KKyAgT1BUX2ZmcF9jb250cmFjdF8gPSA2MDEsICAgICAgICAgICAgICAgICAgIC8qIC1mZnAtY29udHJhY3Q9ICovCisgIE9QVF9mZnBlX3RyYXBfID0gNjAyLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZmZwZS10cmFwPSAqLworICBPUFRfZmZyZWVfZm9ybSA9IDYwMywgICAgICAgICAgICAgICAgICAgICAgLyogLWZmcmVlLWZvcm0gKi8KKyAgT1BUX2ZmcmVlX2xpbmVfbGVuZ3RoXyA9IDYwNCwgICAgICAgICAgICAgIC8qIC1mZnJlZS1saW5lLWxlbmd0aC0gKi8KKyAgT1BUX2ZmcmVlX2xpbmVfbGVuZ3RoX25vbmUgPSA2MDUsICAgICAgICAgIC8qIC1mZnJlZS1saW5lLWxlbmd0aC1ub25lICovCisgIE9QVF9mZnJlZXN0YW5kaW5nID0gNjA2LCAgICAgICAgICAgICAgICAgICAvKiAtZmZyZWVzdGFuZGluZyAqLworICBPUFRfZmZyaWVuZF9pbmplY3Rpb24gPSA2MDcsICAgICAgICAgICAgICAgLyogLWZmcmllbmQtaW5qZWN0aW9uICovCisgIE9QVF9mZnJvbnRlbmRfb3B0aW1pemUgPSA2MDgsICAgICAgICAgICAgICAvKiAtZmZyb250ZW5kLW9wdGltaXplICovCisgIE9QVF9mZnVuY3Rpb25fY3NlID0gNjA5LCAgICAgICAgICAgICAgICAgICAvKiAtZmZ1bmN0aW9uLWNzZSAqLworICBPUFRfZmZ1bmN0aW9uX3NlY3Rpb25zID0gNjEwLCAgICAgICAgICAgICAgLyogLWZmdW5jdGlvbi1zZWN0aW9ucyAqLworICBPUFRfZmdjc2UgPSA2MTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZnY3NlICovCisgIE9QVF9mZ2NzZV9hZnRlcl9yZWxvYWQgPSA2MTIsICAgICAgICAgICAgICAvKiAtZmdjc2UtYWZ0ZXItcmVsb2FkICovCisgIE9QVF9mZ2NzZV9sYXMgPSA2MTMsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmdjc2UtbGFzICovCisgIE9QVF9mZ2NzZV9sbSA9IDYxNCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmdjc2UtbG0gKi8KKyAgT1BUX2ZnY3NlX3NtID0gNjE1LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZ2NzZS1zbSAqLworICBPUFRfZmdudV9rZXl3b3JkcyA9IDYxNiwgICAgICAgICAgICAgICAgICAgLyogLWZnbnUta2V5d29yZHMgKi8KKyAgT1BUX2ZnbnVfcnVudGltZSA9IDYxNywgICAgICAgICAgICAgICAgICAgIC8qIC1mZ251LXJ1bnRpbWUgKi8KKyAgT1BUX2ZnbnVfdG0gPSA2MTgsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZ251LXRtICovCisgIE9QVF9mZ251ODlfaW5saW5lID0gNjE5LCAgICAgICAgICAgICAgICAgICAvKiAtZmdudTg5LWlubGluZSAqLworICBPUFRfZmdvX2NoZWNrX2RpdmlkZV9vdmVyZmxvdyA9IDYyMCwgICAgICAgLyogLWZnby1jaGVjay1kaXZpZGUtb3ZlcmZsb3cgKi8KKyAgT1BUX2Znb19jaGVja19kaXZpZGVfemVybyA9IDYyMSwgICAgICAgICAgIC8qIC1mZ28tY2hlY2stZGl2aWRlLXplcm8gKi8KKyAgT1BUX2Znb19kdW1wXyA9IDYyMiwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mZ28tZHVtcC0gKi8KKyAgT1BUX2Znb19vcHRpbWl6ZV8gPSA2MjMsICAgICAgICAgICAgICAgICAgIC8qIC1mZ28tb3B0aW1pemUtICovCisgIE9QVF9mZ29fcGtncGF0aF8gPSA2MjQsICAgICAgICAgICAgICAgICAgICAvKiAtZmdvLXBrZ3BhdGg9ICovCisgIE9QVF9mZ29fcHJlZml4XyA9IDYyNSwgICAgICAgICAgICAgICAgICAgICAvKiAtZmdvLXByZWZpeD0gKi8KKyAgT1BUX2Znb19yZWxhdGl2ZV9pbXBvcnRfcGF0aF8gPSA2MjYsICAgICAgIC8qIC1mZ28tcmVsYXRpdmUtaW1wb3J0LXBhdGg9ICovCisgIE9QVF9mZ3JhcGhpdGUgPSA2MjcsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmdyYXBoaXRlICovCisgIE9QVF9mZ3JhcGhpdGVfaWRlbnRpdHkgPSA2MjgsICAgICAgICAgICAgICAvKiAtZmdyYXBoaXRlLWlkZW50aXR5ICovCisgIE9QVF9mZ3Vlc3NfYnJhbmNoX3Byb2JhYmlsaXR5ID0gNjI5LCAgICAgICAvKiAtZmd1ZXNzLWJyYW5jaC1wcm9iYWJpbGl0eSAqLworICAvKiBPUFRfZmd1aWRpbmdfZGVjbHMgPSA2MzAsICovICAgICAgICAgICAgLyogLWZndWlkaW5nLWRlY2xzICovCisgIC8qIE9QVF9maGFuZGxlX2V4Y2VwdGlvbnMgPSA2MzEsICovICAgICAgICAvKiAtZmhhbmRsZS1leGNlcHRpb25zICovCisgIE9QVF9maGFzaF9zeW5jaHJvbml6YXRpb24gPSA2MzIsICAgICAgICAgICAvKiAtZmhhc2gtc3luY2hyb25pemF0aW9uICovCisgIC8qIE9QVF9maGVscCA9IDYzMywgKi8gICAgICAgICAgICAgICAgICAgICAvKiAtZmhlbHAgKi8KKyAgLyogT1BUX2ZoZWxwXyA9IDYzNCwgKi8gICAgICAgICAgICAgICAgICAgIC8qIC1maGVscD0gKi8KKyAgT1BUX2Zob2lzdF9hZGphY2VudF9sb2FkcyA9IDYzNSwgICAgICAgICAgIC8qIC1maG9pc3QtYWRqYWNlbnQtbG9hZHMgKi8KKyAgLyogT1BUX2Zob25vcl9zdGQgPSA2MzYsICovICAgICAgICAgICAgICAgIC8qIC1maG9ub3Itc3RkICovCisgIE9QVF9maG9zdGVkID0gNjM3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmhvc3RlZCAqLworICAvKiBPUFRfZmh1Z2Vfb2JqZWN0cyA9IDYzOCwgKi8gICAgICAgICAgICAgLyogLWZodWdlLW9iamVjdHMgKi8KKyAgT1BUX2ZpZGVudCA9IDYzOSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maWRlbnQgKi8KKyAgT1BUX2ZpZl9jb252ZXJzaW9uID0gNjQwLCAgICAgICAgICAgICAgICAgIC8qIC1maWYtY29udmVyc2lvbiAqLworICBPUFRfZmlmX2NvbnZlcnNpb24yID0gNjQxLCAgICAgICAgICAgICAgICAgLyogLWZpZi1jb252ZXJzaW9uMiAqLworICBPUFRfZmltcGxlbWVudF9pbmxpbmVzID0gNjQyLCAgICAgICAgICAgICAgLyogLWZpbXBsZW1lbnQtaW5saW5lcyAqLworICBPUFRfZmltcGxpY2l0X2lubGluZV90ZW1wbGF0ZXMgPSA2NDMsICAgICAgLyogLWZpbXBsaWNpdC1pbmxpbmUtdGVtcGxhdGVzICovCisgIE9QVF9maW1wbGljaXRfbm9uZSA9IDY0NCwgICAgICAgICAgICAgICAgICAvKiAtZmltcGxpY2l0LW5vbmUgKi8KKyAgT1BUX2ZpbXBsaWNpdF90ZW1wbGF0ZXMgPSA2NDUsICAgICAgICAgICAgIC8qIC1maW1wbGljaXQtdGVtcGxhdGVzICovCisgIE9QVF9maW5kaXJlY3RfY2xhc3NlcyA9IDY0NiwgICAgICAgICAgICAgICAvKiAtZmluZGlyZWN0LWNsYXNzZXMgKi8KKyAgT1BUX2ZpbmRpcmVjdF9kaXNwYXRjaCA9IDY0NywgICAgICAgICAgICAgIC8qIC1maW5kaXJlY3QtZGlzcGF0Y2ggKi8KKyAgT1BUX2ZpbmRpcmVjdF9pbmxpbmluZyA9IDY0OCwgICAgICAgICAgICAgIC8qIC1maW5kaXJlY3QtaW5saW5pbmcgKi8KKyAgT1BUX2ZpbmhpYml0X3NpemVfZGlyZWN0aXZlID0gNjQ5LCAgICAgICAgIC8qIC1maW5oaWJpdC1zaXplLWRpcmVjdGl2ZSAqLworICBPUFRfZmluaXRfY2hhcmFjdGVyXyA9IDY1MCwgICAgICAgICAgICAgICAgLyogLWZpbml0LWNoYXJhY3Rlcj0gKi8KKyAgT1BUX2Zpbml0X2ludGVnZXJfID0gNjUxLCAgICAgICAgICAgICAgICAgIC8qIC1maW5pdC1pbnRlZ2VyPSAqLworICBPUFRfZmluaXRfbG9jYWxfemVybyA9IDY1MiwgICAgICAgICAgICAgICAgLyogLWZpbml0LWxvY2FsLXplcm8gKi8KKyAgT1BUX2Zpbml0X2xvZ2ljYWxfID0gNjUzLCAgICAgICAgICAgICAgICAgIC8qIC1maW5pdC1sb2dpY2FsPSAqLworICBPUFRfZmluaXRfcmVhbF8gPSA2NTQsICAgICAgICAgICAgICAgICAgICAgLyogLWZpbml0LXJlYWw9ICovCisgIE9QVF9maW5saW5lID0gNjU1LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmlubGluZSAqLworICBPUFRfZmlubGluZV9hdG9taWNzID0gNjU2LCAgICAgICAgICAgICAgICAgLyogLWZpbmxpbmUtYXRvbWljcyAqLworICBPUFRfZmlubGluZV9mdW5jdGlvbnMgPSA2NTcsICAgICAgICAgICAgICAgLyogLWZpbmxpbmUtZnVuY3Rpb25zICovCisgIE9QVF9maW5saW5lX2Z1bmN0aW9uc19jYWxsZWRfb25jZSA9IDY1OCwgICAvKiAtZmlubGluZS1mdW5jdGlvbnMtY2FsbGVkLW9uY2UgKi8KKyAgLyogT1BUX2ZpbmxpbmVfbGltaXRfID0gNjU5LCAqLyAgICAgICAgICAgIC8qIC1maW5saW5lLWxpbWl0LSAqLworICBPUFRfZmlubGluZV9saW1pdF8gPSA2NjAsICAgICAgICAgICAgICAgICAgLyogLWZpbmxpbmUtbGltaXQ9ICovCisgIE9QVF9maW5saW5lX3NtYWxsX2Z1bmN0aW9ucyA9IDY2MSwgICAgICAgICAvKiAtZmlubGluZS1zbWFsbC1mdW5jdGlvbnMgKi8KKyAgT1BUX2ZpbnB1dF9jaGFyc2V0XyA9IDY2MiwgICAgICAgICAgICAgICAgIC8qIC1maW5wdXQtY2hhcnNldD0gKi8KKyAgT1BUX2ZpbnN0cnVtZW50X2Z1bmN0aW9ucyA9IDY2MywgICAgICAgICAgIC8qIC1maW5zdHJ1bWVudC1mdW5jdGlvbnMgKi8KKyAgT1BUX2ZpbnN0cnVtZW50X2Z1bmN0aW9uc19leGNsdWRlX2ZpbGVfbGlzdF8gPSA2NjQsLyogLWZpbnN0cnVtZW50LWZ1bmN0aW9ucy1leGNsdWRlLWZpbGUtbGlzdD0gKi8KKyAgT1BUX2ZpbnN0cnVtZW50X2Z1bmN0aW9uc19leGNsdWRlX2Z1bmN0aW9uX2xpc3RfID0gNjY1LC8qIC1maW5zdHJ1bWVudC1mdW5jdGlvbnMtZXhjbHVkZS1mdW5jdGlvbi1saXN0PSAqLworICBPUFRfZmludGVnZXJfNF9pbnRlZ2VyXzggPSA2NjYsICAgICAgICAgICAgLyogLWZpbnRlZ2VyLTQtaW50ZWdlci04ICovCisgIE9QVF9maW50cmluc2ljX21vZHVsZXNfcGF0aCA9IDY2NywgICAgICAgICAvKiAtZmludHJpbnNpYy1tb2R1bGVzLXBhdGggKi8KKyAgT1BUX2ZpbnRyaW5zaWNfbW9kdWxlc19wYXRoXyA9IDY2OCwgICAgICAgIC8qIC1maW50cmluc2ljLW1vZHVsZXMtcGF0aD0gKi8KKyAgT1BUX2ZpcGFfY3AgPSA2NjksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maXBhLWNwICovCisgIE9QVF9maXBhX2NwX2Nsb25lID0gNjcwLCAgICAgICAgICAgICAgICAgICAvKiAtZmlwYS1jcC1jbG9uZSAqLworICAvKiBPUFRfZmlwYV9tYXRyaXhfcmVvcmcgPSA2NzEsICovICAgICAgICAgLyogLWZpcGEtbWF0cml4LXJlb3JnICovCisgIE9QVF9maXBhX3Byb2ZpbGUgPSA2NzIsICAgICAgICAgICAgICAgICAgICAvKiAtZmlwYS1wcm9maWxlICovCisgIE9QVF9maXBhX3B0YSA9IDY3MywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmlwYS1wdGEgKi8KKyAgT1BUX2ZpcGFfcHVyZV9jb25zdCA9IDY3NCwgICAgICAgICAgICAgICAgIC8qIC1maXBhLXB1cmUtY29uc3QgKi8KKyAgT1BUX2ZpcGFfcmVmZXJlbmNlID0gNjc1LCAgICAgICAgICAgICAgICAgIC8qIC1maXBhLXJlZmVyZW5jZSAqLworICBPUFRfZmlwYV9zcmEgPSA2NzYsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZpcGEtc3JhICovCisgIC8qIE9QVF9maXBhX3N0cnVjdF9yZW9yZyA9IDY3NywgKi8gICAgICAgICAvKiAtZmlwYS1zdHJ1Y3QtcmVvcmcgKi8KKyAgT1BUX2ZpcmFfYWxnb3JpdGhtXyA9IDY3OCwgICAgICAgICAgICAgICAgIC8qIC1maXJhLWFsZ29yaXRobT0gKi8KKyAgT1BUX2ZpcmFfaG9pc3RfcHJlc3N1cmUgPSA2NzksICAgICAgICAgICAgIC8qIC1maXJhLWhvaXN0LXByZXNzdXJlICovCisgIE9QVF9maXJhX2xvb3BfcHJlc3N1cmUgPSA2ODAsICAgICAgICAgICAgICAvKiAtZmlyYS1sb29wLXByZXNzdXJlICovCisgIE9QVF9maXJhX3JlZ2lvbl8gPSA2ODEsICAgICAgICAgICAgICAgICAgICAvKiAtZmlyYS1yZWdpb249ICovCisgIE9QVF9maXJhX3NoYXJlX3NhdmVfc2xvdHMgPSA2ODIsICAgICAgICAgICAvKiAtZmlyYS1zaGFyZS1zYXZlLXNsb3RzICovCisgIE9QVF9maXJhX3NoYXJlX3NwaWxsX3Nsb3RzID0gNjgzLCAgICAgICAgICAvKiAtZmlyYS1zaGFyZS1zcGlsbC1zbG90cyAqLworICBPUFRfZmlyYV92ZXJib3NlXyA9IDY4NCwgICAgICAgICAgICAgICAgICAgLyogLWZpcmEtdmVyYm9zZT0gKi8KKyAgT1BUX2Zpdm9wdHMgPSA2ODUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1maXZvcHRzICovCisgIE9QVF9mam5pID0gNjg2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZmpuaSAqLworICBPUFRfZmp1bXBfdGFibGVzID0gNjg3LCAgICAgICAgICAgICAgICAgICAgLyogLWZqdW1wLXRhYmxlcyAqLworICBPUFRfZmtlZXBfaW5saW5lX2RsbGV4cG9ydCA9IDY4OCwgICAgICAgICAgLyogLWZrZWVwLWlubGluZS1kbGxleHBvcnQgKi8KKyAgT1BUX2ZrZWVwX2lubGluZV9mdW5jdGlvbnMgPSA2ODksICAgICAgICAgIC8qIC1ma2VlcC1pbmxpbmUtZnVuY3Rpb25zICovCisgIE9QVF9ma2VlcF9zdGF0aWNfY29uc3RzID0gNjkwLCAgICAgICAgICAgICAvKiAtZmtlZXAtc3RhdGljLWNvbnN0cyAqLworICAvKiBPUFRfZmxhYmVsc19vayA9IDY5MSwgKi8gICAgICAgICAgICAgICAgLyogLWZsYWJlbHMtb2sgKi8KKyAgT1BUX2ZsYXhfdmVjdG9yX2NvbnZlcnNpb25zID0gNjkyLCAgICAgICAgIC8qIC1mbGF4LXZlY3Rvci1jb252ZXJzaW9ucyAqLworICBPUFRfZmxlYWRpbmdfdW5kZXJzY29yZSA9IDY5MywgICAgICAgICAgICAgLyogLWZsZWFkaW5nLXVuZGVyc2NvcmUgKi8KKyAgT1BUX2Zsb29wX2Jsb2NrID0gNjk0LCAgICAgICAgICAgICAgICAgICAgIC8qIC1mbG9vcC1ibG9jayAqLworICAvKiBPUFRfZmxvb3BfZmxhdHRlbiA9IDY5NSwgKi8gICAgICAgICAgICAgLyogLWZsb29wLWZsYXR0ZW4gKi8KKyAgT1BUX2Zsb29wX2ludGVyY2hhbmdlID0gNjk2LCAgICAgICAgICAgICAgIC8qIC1mbG9vcC1pbnRlcmNoYW5nZSAqLworICBPUFRfZmxvb3BfbmVzdF9vcHRpbWl6ZSA9IDY5NywgICAgICAgICAgICAgLyogLWZsb29wLW5lc3Qtb3B0aW1pemUgKi8KKyAgLyogT1BUX2Zsb29wX29wdGltaXplID0gNjk4LCAqLyAgICAgICAgICAgIC8qIC1mbG9vcC1vcHRpbWl6ZSAqLworICBPUFRfZmxvb3BfcGFyYWxsZWxpemVfYWxsID0gNjk5LCAgICAgICAgICAgLyogLWZsb29wLXBhcmFsbGVsaXplLWFsbCAqLworICBPUFRfZmxvb3Bfc3RyaXBfbWluZSA9IDcwMCwgICAgICAgICAgICAgICAgLyogLWZsb29wLXN0cmlwLW1pbmUgKi8KKyAgT1BUX2ZsdG8gPSA3MDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbHRvICovCisgIE9QVF9mbHRvX2NvbXByZXNzaW9uX2xldmVsXyA9IDcwMiwgICAgICAgICAvKiAtZmx0by1jb21wcmVzc2lvbi1sZXZlbD0gKi8KKyAgT1BUX2ZsdG9fcGFydGl0aW9uXzF0bzEgPSA3MDMsICAgICAgICAgICAgIC8qIC1mbHRvLXBhcnRpdGlvbj0xdG8xICovCisgIE9QVF9mbHRvX3BhcnRpdGlvbl9iYWxhbmNlZCA9IDcwNCwgICAgICAgICAvKiAtZmx0by1wYXJ0aXRpb249YmFsYW5jZWQgKi8KKyAgT1BUX2ZsdG9fcGFydGl0aW9uX21heCA9IDcwNSwgICAgICAgICAgICAgIC8qIC1mbHRvLXBhcnRpdGlvbj1tYXggKi8KKyAgT1BUX2ZsdG9fcGFydGl0aW9uX25vbmUgPSA3MDYsICAgICAgICAgICAgIC8qIC1mbHRvLXBhcnRpdGlvbj1ub25lICovCisgIE9QVF9mbHRvX3JlcG9ydCA9IDcwNywgICAgICAgICAgICAgICAgICAgICAvKiAtZmx0by1yZXBvcnQgKi8KKyAgT1BUX2ZsdG9fID0gNzA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mbHRvPSAqLworICBPUFRfZmx0cmFucyA9IDcwOSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZsdHJhbnMgKi8KKyAgT1BUX2ZsdHJhbnNfb3V0cHV0X2xpc3RfID0gNzEwLCAgICAgICAgICAgIC8qIC1mbHRyYW5zLW91dHB1dC1saXN0PSAqLworICBPUFRfZm1haW5fID0gNzExLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZtYWluPSAqLworICBPUFRfZm1hdGhfZXJybm8gPSA3MTIsICAgICAgICAgICAgICAgICAgICAgLyogLWZtYXRoLWVycm5vICovCisgIE9QVF9mbWF4X2FycmF5X2NvbnN0cnVjdG9yXyA9IDcxMywgICAgICAgICAvKiAtZm1heC1hcnJheS1jb25zdHJ1Y3Rvcj0gKi8KKyAgT1BUX2ZtYXhfZXJyb3JzXyA9IDcxNCwgICAgICAgICAgICAgICAgICAgIC8qIC1mbWF4LWVycm9ycz0gKi8KKyAgT1BUX2ZtYXhfaWRlbnRpZmllcl9sZW5ndGhfID0gNzE1LCAgICAgICAgIC8qIC1mbWF4LWlkZW50aWZpZXItbGVuZ3RoPSAqLworICBPUFRfZm1heF9zdGFja192YXJfc2l6ZV8gPSA3MTYsICAgICAgICAgICAgLyogLWZtYXgtc3RhY2stdmFyLXNpemU9ICovCisgIE9QVF9mbWF4X3N1YnJlY29yZF9sZW5ndGhfID0gNzE3LCAgICAgICAgICAvKiAtZm1heC1zdWJyZWNvcmQtbGVuZ3RoPSAqLworICBPUFRfZm1lbV9yZXBvcnQgPSA3MTgsICAgICAgICAgICAgICAgICAgICAgLyogLWZtZW0tcmVwb3J0ICovCisgIE9QVF9mbWVtX3JlcG9ydF93cGEgPSA3MTksICAgICAgICAgICAgICAgICAvKiAtZm1lbS1yZXBvcnQtd3BhICovCisgIE9QVF9mbWVyZ2VfYWxsX2NvbnN0YW50cyA9IDcyMCwgICAgICAgICAgICAvKiAtZm1lcmdlLWFsbC1jb25zdGFudHMgKi8KKyAgT1BUX2ZtZXJnZV9jb25zdGFudHMgPSA3MjEsICAgICAgICAgICAgICAgIC8qIC1mbWVyZ2UtY29uc3RhbnRzICovCisgIE9QVF9mbWVyZ2VfZGVidWdfc3RyaW5ncyA9IDcyMiwgICAgICAgICAgICAvKiAtZm1lcmdlLWRlYnVnLXN0cmluZ3MgKi8KKyAgT1BUX2ZtZXNzYWdlX2xlbmd0aF8gPSA3MjMsICAgICAgICAgICAgICAgIC8qIC1mbWVzc2FnZS1sZW5ndGg9ICovCisgIE9QVF9mbW9kdWxlX3ByaXZhdGUgPSA3MjQsICAgICAgICAgICAgICAgICAvKiAtZm1vZHVsZS1wcml2YXRlICovCisgIE9QVF9mbW9kdWxvX3NjaGVkID0gNzI1LCAgICAgICAgICAgICAgICAgICAvKiAtZm1vZHVsby1zY2hlZCAqLworICBPUFRfZm1vZHVsb19zY2hlZF9hbGxvd19yZWdtb3ZlcyA9IDcyNiwgICAgLyogLWZtb2R1bG8tc2NoZWQtYWxsb3ctcmVnbW92ZXMgKi8KKyAgT1BUX2Ztb3ZlX2xvb3BfaW52YXJpYW50cyA9IDcyNywgICAgICAgICAgIC8qIC1mbW92ZS1sb29wLWludmFyaWFudHMgKi8KKyAgT1BUX2Ztc19leHRlbnNpb25zID0gNzI4LCAgICAgICAgICAgICAgICAgIC8qIC1mbXMtZXh0ZW5zaW9ucyAqLworICBPUFRfZm11ZGZsYXAgPSA3MjksICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZtdWRmbGFwICovCisgIE9QVF9mbXVkZmxhcGlyID0gNzMwLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZm11ZGZsYXBpciAqLworICBPUFRfZm11ZGZsYXB0aCA9IDczMSwgICAgICAgICAgICAgICAgICAgICAgLyogLWZtdWRmbGFwdGggKi8KKyAgLyogT1BUX2ZuYW1lX21hbmdsaW5nX3ZlcnNpb25fID0gNzMyLCAqLyAgIC8qIC1mbmFtZS1tYW5nbGluZy12ZXJzaW9uLSAqLworICAvKiBPUFRfZm5ld19hYmkgPSA3MzMsICovICAgICAgICAgICAgICAgICAgLyogLWZuZXctYWJpICovCisgIE9QVF9mbmV4dF9ydW50aW1lID0gNzM0LCAgICAgICAgICAgICAgICAgICAvKiAtZm5leHQtcnVudGltZSAqLworICBPUFRfZm5pbF9yZWNlaXZlcnMgPSA3MzUsICAgICAgICAgICAgICAgICAgLyogLWZuaWwtcmVjZWl2ZXJzICovCisgIE9QVF9mbm9uX2NhbGxfZXhjZXB0aW9ucyA9IDczNiwgICAgICAgICAgICAvKiAtZm5vbi1jYWxsLWV4Y2VwdGlvbnMgKi8KKyAgT1BUX2Zub25hbnNpX2J1aWx0aW5zID0gNzM3LCAgICAgICAgICAgICAgIC8qIC1mbm9uYW5zaS1idWlsdGlucyAqLworICAvKiBPUFRfZm5vbm51bGxfb2JqZWN0cyA9IDczOCwgKi8gICAgICAgICAgLyogLWZub25udWxsLW9iamVjdHMgKi8KKyAgT1BUX2Zub3Rocm93X29wdCA9IDczOSwgICAgICAgICAgICAgICAgICAgIC8qIC1mbm90aHJvdy1vcHQgKi8KKyAgT1BUX2ZvYmpjX2FiaV92ZXJzaW9uXyA9IDc0MCwgICAgICAgICAgICAgIC8qIC1mb2JqYy1hYmktdmVyc2lvbj0gKi8KKyAgT1BUX2ZvYmpjX2NhbGxfY3h4X2NkdG9ycyA9IDc0MSwgICAgICAgICAgIC8qIC1mb2JqYy1jYWxsLWN4eC1jZHRvcnMgKi8KKyAgT1BUX2ZvYmpjX2RpcmVjdF9kaXNwYXRjaCA9IDc0MiwgICAgICAgICAgIC8qIC1mb2JqYy1kaXJlY3QtZGlzcGF0Y2ggKi8KKyAgT1BUX2ZvYmpjX2V4Y2VwdGlvbnMgPSA3NDMsICAgICAgICAgICAgICAgIC8qIC1mb2JqYy1leGNlcHRpb25zICovCisgIE9QVF9mb2JqY19nYyA9IDc0NCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm9iamMtZ2MgKi8KKyAgT1BUX2ZvYmpjX25pbGNoZWNrID0gNzQ1LCAgICAgICAgICAgICAgICAgIC8qIC1mb2JqYy1uaWxjaGVjayAqLworICBPUFRfZm9iamNfc2psal9leGNlcHRpb25zID0gNzQ2LCAgICAgICAgICAgLyogLWZvYmpjLXNqbGotZXhjZXB0aW9ucyAqLworICBPUFRfZm9iamNfc3RkX29iamMxID0gNzQ3LCAgICAgICAgICAgICAgICAgLyogLWZvYmpjLXN0ZD1vYmpjMSAqLworICBPUFRfZm9taXRfZnJhbWVfcG9pbnRlciA9IDc0OCwgICAgICAgICAgICAgLyogLWZvbWl0LWZyYW1lLXBvaW50ZXIgKi8KKyAgT1BUX2ZvcGVubXAgPSA3NDksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mb3Blbm1wICovCisgIE9QVF9mb3BlcmF0b3JfbmFtZXMgPSA3NTAsICAgICAgICAgICAgICAgICAvKiAtZm9wZXJhdG9yLW5hbWVzICovCisgIE9QVF9mb3B0X2luZm8gPSA3NTEsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZm9wdC1pbmZvICovCisgIE9QVF9mb3B0X2luZm9fID0gNzUyLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZm9wdC1pbmZvLSAqLworICBPUFRfZm9wdGltaXplX3JlZ2lzdGVyX21vdmUgPSA3NTMsICAgICAgICAgLyogLWZvcHRpbWl6ZS1yZWdpc3Rlci1tb3ZlICovCisgIE9QVF9mb3B0aW1pemVfc2libGluZ19jYWxscyA9IDc1NCwgICAgICAgICAvKiAtZm9wdGltaXplLXNpYmxpbmctY2FsbHMgKi8KKyAgT1BUX2ZvcHRpbWl6ZV9zdGF0aWNfY2xhc3NfaW5pdGlhbGl6YXRpb24gPSA3NTUsLyogLWZvcHRpbWl6ZS1zdGF0aWMtY2xhc3MtaW5pdGlhbGl6YXRpb24gKi8KKyAgT1BUX2ZvcHRpbWl6ZV9zdHJsZW4gPSA3NTYsICAgICAgICAgICAgICAgIC8qIC1mb3B0aW1pemUtc3RybGVuICovCisgIC8qIE9QVF9mb3B0aW9uYWxfZGlhZ3MgPSA3NTcsICovICAgICAgICAgICAvKiAtZm9wdGlvbmFsLWRpYWdzICovCisgIE9QVF9mb3V0cHV0X2NsYXNzX2Rpcl8gPSA3NTgsICAgICAgICAgICAgICAvKiAtZm91dHB1dC1jbGFzcy1kaXI9ICovCisgIE9QVF9mcGFja19kZXJpdmVkID0gNzU5LCAgICAgICAgICAgICAgICAgICAvKiAtZnBhY2stZGVyaXZlZCAqLworICBPUFRfZnBhY2tfc3RydWN0ID0gNzYwLCAgICAgICAgICAgICAgICAgICAgLyogLWZwYWNrLXN0cnVjdCAqLworICBPUFRfZnBhY2tfc3RydWN0XyA9IDc2MSwgICAgICAgICAgICAgICAgICAgLyogLWZwYWNrLXN0cnVjdD0gKi8KKyAgT1BUX2ZwYXJ0aWFsX2lubGluaW5nID0gNzYyLCAgICAgICAgICAgICAgIC8qIC1mcGFydGlhbC1pbmxpbmluZyAqLworICBPUFRfZnBjY19zdHJ1Y3RfcmV0dXJuID0gNzYzLCAgICAgICAgICAgICAgLyogLWZwY2Mtc3RydWN0LXJldHVybiAqLworICBPUFRfZnBjaF9kZXBzID0gNzY0LCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwY2gtZGVwcyAqLworICBPUFRfZnBjaF9wcmVwcm9jZXNzID0gNzY1LCAgICAgICAgICAgICAgICAgLyogLWZwY2gtcHJlcHJvY2VzcyAqLworICBPUFRfZnBlZWxfbG9vcHMgPSA3NjYsICAgICAgICAgICAgICAgICAgICAgLyogLWZwZWVsLWxvb3BzICovCisgIE9QVF9mcGVlcGhvbGUgPSA3NjcsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnBlZXBob2xlICovCisgIE9QVF9mcGVlcGhvbGUyID0gNzY4LCAgICAgICAgICAgICAgICAgICAgICAvKiAtZnBlZXBob2xlMiAqLworICBPUFRfZnBlcm1pc3NpdmUgPSA3NjksICAgICAgICAgICAgICAgICAgICAgLyogLWZwZXJtaXNzaXZlICovCisgIE9QVF9mcGljID0gNzcwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnBpYyAqLworICBPUFRfZnBpZSA9IDc3MSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwaWUgKi8KKyAgT1BUX2ZwbGFuOV9leHRlbnNpb25zID0gNzcyLCAgICAgICAgICAgICAgIC8qIC1mcGxhbjktZXh0ZW5zaW9ucyAqLworICBPUFRfZnBsdWdpbl9hcmdfID0gNzczLCAgICAgICAgICAgICAgICAgICAgLyogLWZwbHVnaW4tYXJnLSAqLworICBPUFRfZnBsdWdpbl8gPSA3NzQsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZwbHVnaW49ICovCisgIE9QVF9mcG9zdF9pcGFfbWVtX3JlcG9ydCA9IDc3NSwgICAgICAgICAgICAvKiAtZnBvc3QtaXBhLW1lbS1yZXBvcnQgKi8KKyAgT1BUX2ZwcmVfaXBhX21lbV9yZXBvcnQgPSA3NzYsICAgICAgICAgICAgIC8qIC1mcHJlLWlwYS1tZW0tcmVwb3J0ICovCisgIE9QVF9mcHJlZGljdGl2ZV9jb21tb25pbmcgPSA3NzcsICAgICAgICAgICAvKiAtZnByZWRpY3RpdmUtY29tbW9uaW5nICovCisgIE9QVF9mcHJlZmV0Y2hfbG9vcF9hcnJheXMgPSA3NzgsICAgICAgICAgICAvKiAtZnByZWZldGNoLWxvb3AtYXJyYXlzICovCisgIE9QVF9mcHJlcHJvY2Vzc2VkID0gNzc5LCAgICAgICAgICAgICAgICAgICAvKiAtZnByZXByb2Nlc3NlZCAqLworICBPUFRfZnByZXR0eV90ZW1wbGF0ZXMgPSA3ODAsICAgICAgICAgICAgICAgLyogLWZwcmV0dHktdGVtcGxhdGVzICovCisgIE9QVF9mcHJvZmlsZSA9IDc4MSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnByb2ZpbGUgKi8KKyAgT1BUX2Zwcm9maWxlX2FyY3MgPSA3ODIsICAgICAgICAgICAgICAgICAgIC8qIC1mcHJvZmlsZS1hcmNzICovCisgIE9QVF9mcHJvZmlsZV9jb3JyZWN0aW9uID0gNzgzLCAgICAgICAgICAgICAvKiAtZnByb2ZpbGUtY29ycmVjdGlvbiAqLworICBPUFRfZnByb2ZpbGVfZGlyXyA9IDc4NCwgICAgICAgICAgICAgICAgICAgLyogLWZwcm9maWxlLWRpcj0gKi8KKyAgT1BUX2Zwcm9maWxlX2dlbmVyYXRlID0gNzg1LCAgICAgICAgICAgICAgIC8qIC1mcHJvZmlsZS1nZW5lcmF0ZSAqLworICBPUFRfZnByb2ZpbGVfZ2VuZXJhdGVfID0gNzg2LCAgICAgICAgICAgICAgLyogLWZwcm9maWxlLWdlbmVyYXRlPSAqLworICBPUFRfZnByb2ZpbGVfcmVwb3J0ID0gNzg3LCAgICAgICAgICAgICAgICAgLyogLWZwcm9maWxlLXJlcG9ydCAqLworICBPUFRfZnByb2ZpbGVfdXNlID0gNzg4LCAgICAgICAgICAgICAgICAgICAgLyogLWZwcm9maWxlLXVzZSAqLworICBPUFRfZnByb2ZpbGVfdXNlXyA9IDc4OSwgICAgICAgICAgICAgICAgICAgLyogLWZwcm9maWxlLXVzZT0gKi8KKyAgT1BUX2Zwcm9maWxlX3ZhbHVlcyA9IDc5MCwgICAgICAgICAgICAgICAgIC8qIC1mcHJvZmlsZS12YWx1ZXMgKi8KKyAgT1BUX2Zwcm90ZWN0X3BhcmVucyA9IDc5MSwgICAgICAgICAgICAgICAgIC8qIC1mcHJvdGVjdC1wYXJlbnMgKi8KKyAgT1BUX2ZyYW5kb21fc2VlZCA9IDc5MiwgICAgICAgICAgICAgICAgICAgIC8qIC1mcmFuZG9tLXNlZWQgKi8KKyAgT1BUX2ZyYW5kb21fc2VlZF8gPSA3OTMsICAgICAgICAgICAgICAgICAgIC8qIC1mcmFuZG9tLXNlZWQ9ICovCisgIE9QVF9mcmFuZ2VfY2hlY2sgPSA3OTQsICAgICAgICAgICAgICAgICAgICAvKiAtZnJhbmdlLWNoZWNrICovCisgIE9QVF9mcmVhbF80X3JlYWxfMTAgPSA3OTUsICAgICAgICAgICAgICAgICAvKiAtZnJlYWwtNC1yZWFsLTEwICovCisgIE9QVF9mcmVhbF80X3JlYWxfMTYgPSA3OTYsICAgICAgICAgICAgICAgICAvKiAtZnJlYWwtNC1yZWFsLTE2ICovCisgIE9QVF9mcmVhbF80X3JlYWxfOCA9IDc5NywgICAgICAgICAgICAgICAgICAvKiAtZnJlYWwtNC1yZWFsLTggKi8KKyAgT1BUX2ZyZWFsXzhfcmVhbF8xMCA9IDc5OCwgICAgICAgICAgICAgICAgIC8qIC1mcmVhbC04LXJlYWwtMTAgKi8KKyAgT1BUX2ZyZWFsXzhfcmVhbF8xNiA9IDc5OSwgICAgICAgICAgICAgICAgIC8qIC1mcmVhbC04LXJlYWwtMTYgKi8KKyAgT1BUX2ZyZWFsXzhfcmVhbF80ID0gODAwLCAgICAgICAgICAgICAgICAgIC8qIC1mcmVhbC04LXJlYWwtNCAqLworICBPUFRfZnJlYWxsb2NfbGhzID0gODAxLCAgICAgICAgICAgICAgICAgICAgLyogLWZyZWFsbG9jLWxocyAqLworICBPUFRfZnJlY2lwcm9jYWxfbWF0aCA9IDgwMiwgICAgICAgICAgICAgICAgLyogLWZyZWNpcHJvY2FsLW1hdGggKi8KKyAgT1BUX2ZyZWNvcmRfZ2NjX3N3aXRjaGVzID0gODAzLCAgICAgICAgICAgIC8qIC1mcmVjb3JkLWdjYy1zd2l0Y2hlcyAqLworICBPUFRfZnJlY29yZF9tYXJrZXJfNCA9IDgwNCwgICAgICAgICAgICAgICAgLyogLWZyZWNvcmQtbWFya2VyPTQgKi8KKyAgT1BUX2ZyZWNvcmRfbWFya2VyXzggPSA4MDUsICAgICAgICAgICAgICAgIC8qIC1mcmVjb3JkLW1hcmtlcj04ICovCisgIE9QVF9mcmVjdXJzaXZlID0gODA2LCAgICAgICAgICAgICAgICAgICAgICAvKiAtZnJlY3Vyc2l2ZSAqLworICBPUFRfZnJlZHVjZWRfcmVmbGVjdGlvbiA9IDgwNywgICAgICAgICAgICAgLyogLWZyZWR1Y2VkLXJlZmxlY3Rpb24gKi8KKyAgT1BUX2ZyZWUgPSA4MDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcmVlICovCisgIE9QVF9mcmVnX3N0cnVjdF9yZXR1cm4gPSA4MDksICAgICAgICAgICAgICAvKiAtZnJlZy1zdHJ1Y3QtcmV0dXJuICovCisgIE9QVF9mcmVnbW92ZSA9IDgxMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnJlZ21vdmUgKi8KKyAgT1BUX2ZyZW5hbWVfcmVnaXN0ZXJzID0gODExLCAgICAgICAgICAgICAgIC8qIC1mcmVuYW1lLXJlZ2lzdGVycyAqLworICBPUFRfZnJlb3JkZXJfYmxvY2tzID0gODEyLCAgICAgICAgICAgICAgICAgLyogLWZyZW9yZGVyLWJsb2NrcyAqLworICBPUFRfZnJlb3JkZXJfYmxvY2tzX2FuZF9wYXJ0aXRpb24gPSA4MTMsICAgLyogLWZyZW9yZGVyLWJsb2Nrcy1hbmQtcGFydGl0aW9uICovCisgIE9QVF9mcmVvcmRlcl9mdW5jdGlvbnMgPSA4MTQsICAgICAgICAgICAgICAvKiAtZnJlb3JkZXItZnVuY3Rpb25zICovCisgIE9QVF9mcmVwYWNrX2FycmF5cyA9IDgxNSwgICAgICAgICAgICAgICAgICAvKiAtZnJlcGFjay1hcnJheXMgKi8KKyAgT1BUX2ZyZXBsYWNlX29iamNfY2xhc3NlcyA9IDgxNiwgICAgICAgICAgIC8qIC1mcmVwbGFjZS1vYmpjLWNsYXNzZXMgKi8KKyAgT1BUX2ZyZXBvID0gODE3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mcmVwbyAqLworICBPUFRfZnJlcXVpcmVfcmV0dXJuX3N0YXRlbWVudCA9IDgxOCwgICAgICAgLyogLWZyZXF1aXJlLXJldHVybi1zdGF0ZW1lbnQgKi8KKyAgT1BUX2ZyZXJ1bl9jc2VfYWZ0ZXJfbG9vcCA9IDgxOSwgICAgICAgICAgIC8qIC1mcmVydW4tY3NlLWFmdGVyLWxvb3AgKi8KKyAgLyogT1BUX2ZyZXJ1bl9sb29wX29wdCA9IDgyMCwgKi8gICAgICAgICAgIC8qIC1mcmVydW4tbG9vcC1vcHQgKi8KKyAgT1BUX2ZyZXNjaGVkdWxlX21vZHVsb19zY2hlZHVsZWRfbG9vcHMgPSA4MjEsLyogLWZyZXNjaGVkdWxlLW1vZHVsby1zY2hlZHVsZWQtbG9vcHMgKi8KKyAgT1BUX2ZyZXNvbHV0aW9uXyA9IDgyMiwgICAgICAgICAgICAgICAgICAgIC8qIC1mcmVzb2x1dGlvbj0gKi8KKyAgT1BUX2Zyb3VuZGluZ19tYXRoID0gODIzLCAgICAgICAgICAgICAgICAgIC8qIC1mcm91bmRpbmctbWF0aCAqLworICBPUFRfZnJ0dGkgPSA4MjQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZydHRpICovCisgIE9QVF9mc2FuaXRpemVfYWRkcmVzcyA9IDgyNSwgICAgICAgICAgICAgICAvKiAtZnNhbml0aXplPWFkZHJlc3MgKi8KKyAgT1BUX2ZzYW5pdGl6ZV90aHJlYWQgPSA4MjYsICAgICAgICAgICAgICAgIC8qIC1mc2FuaXRpemU9dGhyZWFkICovCisgIE9QVF9mc2F3X2phdmFfZmlsZSA9IDgyNywgICAgICAgICAgICAgICAgICAvKiAtZnNhdy1qYXZhLWZpbGUgKi8KKyAgT1BUX2ZzY2hlZF9jcml0aWNhbF9wYXRoX2hldXJpc3RpYyA9IDgyOCwgIC8qIC1mc2NoZWQtY3JpdGljYWwtcGF0aC1oZXVyaXN0aWMgKi8KKyAgT1BUX2ZzY2hlZF9kZXBfY291bnRfaGV1cmlzdGljID0gODI5LCAgICAgIC8qIC1mc2NoZWQtZGVwLWNvdW50LWhldXJpc3RpYyAqLworICBPUFRfZnNjaGVkX2dyb3VwX2hldXJpc3RpYyA9IDgzMCwgICAgICAgICAgLyogLWZzY2hlZC1ncm91cC1oZXVyaXN0aWMgKi8KKyAgT1BUX2ZzY2hlZF9pbnRlcmJsb2NrID0gODMxLCAgICAgICAgICAgICAgIC8qIC1mc2NoZWQtaW50ZXJibG9jayAqLworICBPUFRfZnNjaGVkX2xhc3RfaW5zbl9oZXVyaXN0aWMgPSA4MzIsICAgICAgLyogLWZzY2hlZC1sYXN0LWluc24taGV1cmlzdGljICovCisgIE9QVF9mc2NoZWRfcHJlc3N1cmUgPSA4MzMsICAgICAgICAgICAgICAgICAvKiAtZnNjaGVkLXByZXNzdXJlICovCisgIE9QVF9mc2NoZWRfcmFua19oZXVyaXN0aWMgPSA4MzQsICAgICAgICAgICAvKiAtZnNjaGVkLXJhbmstaGV1cmlzdGljICovCisgIE9QVF9mc2NoZWRfc3BlYyA9IDgzNSwgICAgICAgICAgICAgICAgICAgICAvKiAtZnNjaGVkLXNwZWMgKi8KKyAgT1BUX2ZzY2hlZF9zcGVjX2luc25faGV1cmlzdGljID0gODM2LCAgICAgIC8qIC1mc2NoZWQtc3BlYy1pbnNuLWhldXJpc3RpYyAqLworICBPUFRfZnNjaGVkX3NwZWNfbG9hZCA9IDgzNywgICAgICAgICAgICAgICAgLyogLWZzY2hlZC1zcGVjLWxvYWQgKi8KKyAgT1BUX2ZzY2hlZF9zcGVjX2xvYWRfZGFuZ2Vyb3VzID0gODM4LCAgICAgIC8qIC1mc2NoZWQtc3BlYy1sb2FkLWRhbmdlcm91cyAqLworICBPUFRfZnNjaGVkX3N0YWxsZWRfaW5zbnMgPSA4MzksICAgICAgICAgICAgLyogLWZzY2hlZC1zdGFsbGVkLWluc25zICovCisgIE9QVF9mc2NoZWRfc3RhbGxlZF9pbnNuc19kZXAgPSA4NDAsICAgICAgICAvKiAtZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwICovCisgIE9QVF9mc2NoZWRfc3RhbGxlZF9pbnNuc19kZXBfID0gODQxLCAgICAgICAvKiAtZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwPSAqLworICBPUFRfZnNjaGVkX3N0YWxsZWRfaW5zbnNfID0gODQyLCAgICAgICAgICAgLyogLWZzY2hlZC1zdGFsbGVkLWluc25zPSAqLworICBPUFRfZnNjaGVkX3ZlcmJvc2VfID0gODQzLCAgICAgICAgICAgICAgICAgLyogLWZzY2hlZC12ZXJib3NlPSAqLworICBPUFRfZnNjaGVkMl91c2Vfc3VwZXJibG9ja3MgPSA4NDQsICAgICAgICAgLyogLWZzY2hlZDItdXNlLXN1cGVyYmxvY2tzICovCisgIC8qIE9QVF9mc2NoZWQyX3VzZV90cmFjZXMgPSA4NDUsICovICAgICAgICAvKiAtZnNjaGVkMi11c2UtdHJhY2VzICovCisgIE9QVF9mc2NoZWR1bGVfaW5zbnMgPSA4NDYsICAgICAgICAgICAgICAgICAvKiAtZnNjaGVkdWxlLWluc25zICovCisgIE9QVF9mc2NoZWR1bGVfaW5zbnMyID0gODQ3LCAgICAgICAgICAgICAgICAvKiAtZnNjaGVkdWxlLWluc25zMiAqLworICBPUFRfZnNlY29uZF91bmRlcnNjb3JlID0gODQ4LCAgICAgICAgICAgICAgLyogLWZzZWNvbmQtdW5kZXJzY29yZSAqLworICBPUFRfZnNlY3Rpb25fYW5jaG9ycyA9IDg0OSwgICAgICAgICAgICAgICAgLyogLWZzZWN0aW9uLWFuY2hvcnMgKi8KKyAgLyogT1BUX2ZzZWUgPSA4NTAsICovICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc2VlICovCisgIE9QVF9mc2VsX3NjaGVkX3BpcGVsaW5pbmcgPSA4NTEsICAgICAgICAgICAvKiAtZnNlbC1zY2hlZC1waXBlbGluaW5nICovCisgIE9QVF9mc2VsX3NjaGVkX3BpcGVsaW5pbmdfb3V0ZXJfbG9vcHMgPSA4NTIsLyogLWZzZWwtc2NoZWQtcGlwZWxpbmluZy1vdXRlci1sb29wcyAqLworICBPUFRfZnNlbF9zY2hlZF9yZXNjaGVkdWxlX3BpcGVsaW5lZCA9IDg1MywgLyogLWZzZWwtc2NoZWQtcmVzY2hlZHVsZS1waXBlbGluZWQgKi8KKyAgT1BUX2ZzZWxlY3RpdmVfc2NoZWR1bGluZyA9IDg1NCwgICAgICAgICAgIC8qIC1mc2VsZWN0aXZlLXNjaGVkdWxpbmcgKi8KKyAgT1BUX2ZzZWxlY3RpdmVfc2NoZWR1bGluZzIgPSA4NTUsICAgICAgICAgIC8qIC1mc2VsZWN0aXZlLXNjaGVkdWxpbmcyICovCisgIE9QVF9mc2hvcnRfZG91YmxlID0gODU2LCAgICAgICAgICAgICAgICAgICAvKiAtZnNob3J0LWRvdWJsZSAqLworICBPUFRfZnNob3J0X2VudW1zID0gODU3LCAgICAgICAgICAgICAgICAgICAgLyogLWZzaG9ydC1lbnVtcyAqLworICBPUFRfZnNob3J0X3djaGFyID0gODU4LCAgICAgICAgICAgICAgICAgICAgLyogLWZzaG9ydC13Y2hhciAqLworICBPUFRfZnNob3dfY29sdW1uID0gODU5LCAgICAgICAgICAgICAgICAgICAgLyogLWZzaG93LWNvbHVtbiAqLworICBPUFRfZnNocmlua193cmFwID0gODYwLCAgICAgICAgICAgICAgICAgICAgLyogLWZzaHJpbmstd3JhcCAqLworICBPUFRfZnNpZ25femVybyA9IDg2MSwgICAgICAgICAgICAgICAgICAgICAgLyogLWZzaWduLXplcm8gKi8KKyAgT1BUX2ZzaWduYWxpbmdfbmFucyA9IDg2MiwgICAgICAgICAgICAgICAgIC8qIC1mc2lnbmFsaW5nLW5hbnMgKi8KKyAgT1BUX2ZzaWduZWRfYml0ZmllbGRzID0gODYzLCAgICAgICAgICAgICAgIC8qIC1mc2lnbmVkLWJpdGZpZWxkcyAqLworICBPUFRfZnNpZ25lZF9jaGFyID0gODY0LCAgICAgICAgICAgICAgICAgICAgLyogLWZzaWduZWQtY2hhciAqLworICBPUFRfZnNpZ25lZF96ZXJvcyA9IDg2NSwgICAgICAgICAgICAgICAgICAgLyogLWZzaWduZWQtemVyb3MgKi8KKyAgT1BUX2ZzaW5nbGVfcHJlY2lzaW9uX2NvbnN0YW50ID0gODY2LCAgICAgIC8qIC1mc2luZ2xlLXByZWNpc2lvbi1jb25zdGFudCAqLworICBPUFRfZnNvdXJjZV9maWxlbmFtZV8gPSA4NjcsICAgICAgICAgICAgICAgLyogLWZzb3VyY2UtZmlsZW5hbWU9ICovCisgIE9QVF9mc291cmNlXyA9IDg2OCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnNvdXJjZT0gKi8KKyAgT1BUX2ZzcGxpdF9pdnNfaW5fdW5yb2xsZXIgPSA4NjksICAgICAgICAgIC8qIC1mc3BsaXQtaXZzLWluLXVucm9sbGVyICovCisgIE9QVF9mc3BsaXRfc3RhY2sgPSA4NzAsICAgICAgICAgICAgICAgICAgICAvKiAtZnNwbGl0LXN0YWNrICovCisgIE9QVF9mc3BsaXRfd2lkZV90eXBlcyA9IDg3MSwgICAgICAgICAgICAgICAvKiAtZnNwbGl0LXdpZGUtdHlwZXMgKi8KKyAgLyogT1BUX2ZzcXVhbmdsZSA9IDg3MiwgKi8gICAgICAgICAgICAgICAgIC8qIC1mc3F1YW5nbGUgKi8KKyAgT1BUX2ZzdGFja19hcnJheXMgPSA4NzMsICAgICAgICAgICAgICAgICAgIC8qIC1mc3RhY2stYXJyYXlzICovCisgIC8qIE9QVF9mc3RhY2tfY2hlY2sgPSA4NzQsICovICAgICAgICAgICAgICAvKiAtZnN0YWNrLWNoZWNrICovCisgIE9QVF9mc3RhY2tfY2hlY2tfID0gODc1LCAgICAgICAgICAgICAgICAgICAvKiAtZnN0YWNrLWNoZWNrPSAqLworICBPUFRfZnN0YWNrX2xpbWl0ID0gODc2LCAgICAgICAgICAgICAgICAgICAgLyogLWZzdGFjay1saW1pdCAqLworICBPUFRfZnN0YWNrX2xpbWl0X3JlZ2lzdGVyXyA9IDg3NywgICAgICAgICAgLyogLWZzdGFjay1saW1pdC1yZWdpc3Rlcj0gKi8KKyAgT1BUX2ZzdGFja19saW1pdF9zeW1ib2xfID0gODc4LCAgICAgICAgICAgIC8qIC1mc3RhY2stbGltaXQtc3ltYm9sPSAqLworICBPUFRfZnN0YWNrX3Byb3RlY3RvciA9IDg3OSwgICAgICAgICAgICAgICAgLyogLWZzdGFjay1wcm90ZWN0b3IgKi8KKyAgT1BUX2ZzdGFja19wcm90ZWN0b3JfYWxsID0gODgwLCAgICAgICAgICAgIC8qIC1mc3RhY2stcHJvdGVjdG9yLWFsbCAqLworICBPUFRfZnN0YWNrX3JldXNlXyA9IDg4MSwgICAgICAgICAgICAgICAgICAgLyogLWZzdGFjay1yZXVzZT0gKi8KKyAgT1BUX2ZzdGFja191c2FnZSA9IDg4MiwgICAgICAgICAgICAgICAgICAgIC8qIC1mc3RhY2stdXNhZ2UgKi8KKyAgT1BUX2ZzdGF0cyA9IDg4MywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mc3RhdHMgKi8KKyAgT1BUX2ZzdG9yZV9jaGVjayA9IDg4NCwgICAgICAgICAgICAgICAgICAgIC8qIC1mc3RvcmUtY2hlY2sgKi8KKyAgLyogT1BUX2ZzdHJlbmd0aF9yZWR1Y2UgPSA4ODUsICovICAgICAgICAgIC8qIC1mc3RyZW5ndGgtcmVkdWNlICovCisgIE9QVF9mc3RyaWN0X2FsaWFzaW5nID0gODg2LCAgICAgICAgICAgICAgICAvKiAtZnN0cmljdC1hbGlhc2luZyAqLworICBPUFRfZnN0cmljdF9lbnVtcyA9IDg4NywgICAgICAgICAgICAgICAgICAgLyogLWZzdHJpY3QtZW51bXMgKi8KKyAgT1BUX2ZzdHJpY3Rfb3ZlcmZsb3cgPSA4ODgsICAgICAgICAgICAgICAgIC8qIC1mc3RyaWN0LW92ZXJmbG93ICovCisgIC8qIE9QVF9mc3RyaWN0X3Byb3RvdHlwZSA9IDg4OSwgKi8gICAgICAgICAvKiAtZnN0cmljdC1wcm90b3R5cGUgKi8KKyAgT1BUX2ZzdHJpY3Rfdm9sYXRpbGVfYml0ZmllbGRzID0gODkwLCAgICAgIC8qIC1mc3RyaWN0LXZvbGF0aWxlLWJpdGZpZWxkcyAqLworICBPUFRfZnN5bmNfbGliY2FsbHMgPSA4OTEsICAgICAgICAgICAgICAgICAgLyogLWZzeW5jLWxpYmNhbGxzICovCisgIE9QVF9mc3ludGF4X29ubHkgPSA4OTIsICAgICAgICAgICAgICAgICAgICAvKiAtZnN5bnRheC1vbmx5ICovCisgIE9QVF9mdGFic3RvcF8gPSA4OTMsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRhYnN0b3A9ICovCisgIC8qIE9QVF9mdGFyZ2V0X2hlbHAgPSA4OTQsICovICAgICAgICAgICAgICAvKiAtZnRhcmdldC1oZWxwICovCisgIE9QVF9mdGFyZ2V0XyA9IDg5NSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRhcmdldD0gKi8KKyAgT1BUX2Z0ZW1wbGF0ZV9iYWNrdHJhY2VfbGltaXRfID0gODk2LCAgICAgIC8qIC1mdGVtcGxhdGUtYmFja3RyYWNlLWxpbWl0PSAqLworICAvKiBPUFRfZnRlbXBsYXRlX2RlcHRoXyA9IDg5NywgKi8gICAgICAgICAgLyogLWZ0ZW1wbGF0ZS1kZXB0aC0gKi8KKyAgT1BUX2Z0ZW1wbGF0ZV9kZXB0aF8gPSA4OTgsICAgICAgICAgICAgICAgIC8qIC1mdGVtcGxhdGUtZGVwdGg9ICovCisgIE9QVF9mdGVzdF9jb3ZlcmFnZSA9IDg5OSwgICAgICAgICAgICAgICAgICAvKiAtZnRlc3QtY292ZXJhZ2UgKi8KKyAgLyogT1BUX2Z0aGlzX2lzX3ZhcmlhYmxlID0gOTAwLCAqLyAgICAgICAgIC8qIC1mdGhpcy1pcy12YXJpYWJsZSAqLworICBPUFRfZnRocmVhZF9qdW1wcyA9IDkwMSwgICAgICAgICAgICAgICAgICAgLyogLWZ0aHJlYWQtanVtcHMgKi8KKyAgT1BUX2Z0aHJlYWRzYWZlX3N0YXRpY3MgPSA5MDIsICAgICAgICAgICAgIC8qIC1mdGhyZWFkc2FmZS1zdGF0aWNzICovCisgIE9QVF9mdGltZV9yZXBvcnQgPSA5MDMsICAgICAgICAgICAgICAgICAgICAvKiAtZnRpbWUtcmVwb3J0ICovCisgIE9QVF9mdGxzX21vZGVsXyA9IDkwNCwgICAgICAgICAgICAgICAgICAgICAvKiAtZnRscy1tb2RlbD0gKi8KKyAgT1BUX2Z0b3BsZXZlbF9yZW9yZGVyID0gOTA1LCAgICAgICAgICAgICAgIC8qIC1mdG9wbGV2ZWwtcmVvcmRlciAqLworICBPUFRfZnRyYWNlciA9IDkwNiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmFjZXIgKi8KKyAgT1BUX2Z0cmFja19tYWNyb19leHBhbnNpb24gPSA5MDcsICAgICAgICAgIC8qIC1mdHJhY2stbWFjcm8tZXhwYW5zaW9uICovCisgIE9QVF9mdHJhY2tfbWFjcm9fZXhwYW5zaW9uXyA9IDkwOCwgICAgICAgICAvKiAtZnRyYWNrLW1hY3JvLWV4cGFuc2lvbj0gKi8KKyAgT1BUX2Z0cmFwcGluZ19tYXRoID0gOTA5LCAgICAgICAgICAgICAgICAgIC8qIC1mdHJhcHBpbmctbWF0aCAqLworICBPUFRfZnRyYXB2ID0gOTEwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmFwdiAqLworICBPUFRfZnRyZWVfYml0X2NjcCA9IDkxMSwgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLWJpdC1jY3AgKi8KKyAgT1BUX2Z0cmVlX2J1aWx0aW5fY2FsbF9kY2UgPSA5MTIsICAgICAgICAgIC8qIC1mdHJlZS1idWlsdGluLWNhbGwtZGNlICovCisgIE9QVF9mdHJlZV9jY3AgPSA5MTMsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtY2NwICovCisgIE9QVF9mdHJlZV9jaCA9IDkxNCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtY2ggKi8KKyAgT1BUX2Z0cmVlX2NvYWxlc2NlX2lubGluZWRfdmFycyA9IDkxNSwgICAgIC8qIC1mdHJlZS1jb2FsZXNjZS1pbmxpbmVkLXZhcnMgKi8KKyAgT1BUX2Z0cmVlX2NvYWxlc2NlX3ZhcnMgPSA5MTYsICAgICAgICAgICAgIC8qIC1mdHJlZS1jb2FsZXNjZS12YXJzICovCisgIE9QVF9mdHJlZV9jb3B5X3Byb3AgPSA5MTcsICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtY29weS1wcm9wICovCisgIE9QVF9mdHJlZV9jb3B5cmVuYW1lID0gOTE4LCAgICAgICAgICAgICAgICAvKiAtZnRyZWUtY29weXJlbmFtZSAqLworICBPUFRfZnRyZWVfY3NlbGltID0gOTE5LCAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLWNzZWxpbSAqLworICBPUFRfZnRyZWVfZGNlID0gOTIwLCAgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLWRjZSAqLworICBPUFRfZnRyZWVfZG9taW5hdG9yX29wdHMgPSA5MjEsICAgICAgICAgICAgLyogLWZ0cmVlLWRvbWluYXRvci1vcHRzICovCisgIE9QVF9mdHJlZV9kc2UgPSA5MjIsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtZHNlICovCisgIE9QVF9mdHJlZV9mb3J3cHJvcCA9IDkyMywgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtZm9yd3Byb3AgKi8KKyAgT1BUX2Z0cmVlX2ZyZSA9IDkyNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1mcmUgKi8KKyAgT1BUX2Z0cmVlX2xvb3BfZGlzdHJpYnV0ZV9wYXR0ZXJucyA9IDkyNSwgIC8qIC1mdHJlZS1sb29wLWRpc3RyaWJ1dGUtcGF0dGVybnMgKi8KKyAgT1BUX2Z0cmVlX2xvb3BfZGlzdHJpYnV0aW9uID0gOTI2LCAgICAgICAgIC8qIC1mdHJlZS1sb29wLWRpc3RyaWJ1dGlvbiAqLworICBPUFRfZnRyZWVfbG9vcF9pZl9jb252ZXJ0ID0gOTI3LCAgICAgICAgICAgLyogLWZ0cmVlLWxvb3AtaWYtY29udmVydCAqLworICBPUFRfZnRyZWVfbG9vcF9pZl9jb252ZXJ0X3N0b3JlcyA9IDkyOCwgICAgLyogLWZ0cmVlLWxvb3AtaWYtY29udmVydC1zdG9yZXMgKi8KKyAgT1BUX2Z0cmVlX2xvb3BfaW0gPSA5MjksICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1sb29wLWltICovCisgIE9QVF9mdHJlZV9sb29wX2l2Y2Fub24gPSA5MzAsICAgICAgICAgICAgICAvKiAtZnRyZWUtbG9vcC1pdmNhbm9uICovCisgIC8qIE9QVF9mdHJlZV9sb29wX2xpbmVhciA9IDkzMSwgKi8gICAgICAgICAvKiAtZnRyZWUtbG9vcC1saW5lYXIgKi8KKyAgT1BUX2Z0cmVlX2xvb3Bfb3B0aW1pemUgPSA5MzIsICAgICAgICAgICAgIC8qIC1mdHJlZS1sb29wLW9wdGltaXplICovCisgIE9QVF9mdHJlZV9scnMgPSA5MzMsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtbHJzICovCisgIE9QVF9mdHJlZV9wYXJhbGxlbGl6ZV9sb29wc18gPSA5MzQsICAgICAgICAvKiAtZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9ICovCisgIE9QVF9mdHJlZV9wYXJ0aWFsX3ByZSA9IDkzNSwgICAgICAgICAgICAgICAvKiAtZnRyZWUtcGFydGlhbC1wcmUgKi8KKyAgT1BUX2Z0cmVlX3BoaXByb3AgPSA5MzYsICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1waGlwcm9wICovCisgIE9QVF9mdHJlZV9wcmUgPSA5MzcsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtcHJlICovCisgIE9QVF9mdHJlZV9wdGEgPSA5MzgsICAgICAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtcHRhICovCisgIE9QVF9mdHJlZV9yZWFzc29jID0gOTM5LCAgICAgICAgICAgICAgICAgICAvKiAtZnRyZWUtcmVhc3NvYyAqLworICAvKiBPUFRfZnRyZWVfc2FsaWFzID0gOTQwLCAqLyAgICAgICAgICAgICAgLyogLWZ0cmVlLXNhbGlhcyAqLworICBPUFRfZnRyZWVfc2Nldl9jcHJvcCA9IDk0MSwgICAgICAgICAgICAgICAgLyogLWZ0cmVlLXNjZXYtY3Byb3AgKi8KKyAgT1BUX2Z0cmVlX3NpbmsgPSA5NDIsICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1zaW5rICovCisgIE9QVF9mdHJlZV9zbHBfdmVjdG9yaXplID0gOTQzLCAgICAgICAgICAgICAvKiAtZnRyZWUtc2xwLXZlY3Rvcml6ZSAqLworICBPUFRfZnRyZWVfc2xzciA9IDk0NCwgICAgICAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLXNsc3IgKi8KKyAgT1BUX2Z0cmVlX3NyYSA9IDk0NSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS1zcmEgKi8KKyAgLyogT1BUX2Z0cmVlX3N0b3JlX2NjcCA9IDk0NiwgKi8gICAgICAgICAgIC8qIC1mdHJlZS1zdG9yZS1jY3AgKi8KKyAgLyogT1BUX2Z0cmVlX3N0b3JlX2NvcHlfcHJvcCA9IDk0NywgKi8gICAgIC8qIC1mdHJlZS1zdG9yZS1jb3B5LXByb3AgKi8KKyAgT1BUX2Z0cmVlX3N3aXRjaF9jb252ZXJzaW9uID0gOTQ4LCAgICAgICAgIC8qIC1mdHJlZS1zd2l0Y2gtY29udmVyc2lvbiAqLworICBPUFRfZnRyZWVfdGFpbF9tZXJnZSA9IDk0OSwgICAgICAgICAgICAgICAgLyogLWZ0cmVlLXRhaWwtbWVyZ2UgKi8KKyAgT1BUX2Z0cmVlX3RlciA9IDk1MCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS10ZXIgKi8KKyAgT1BUX2Z0cmVlX3ZlY3RfbG9vcF92ZXJzaW9uID0gOTUxLCAgICAgICAgIC8qIC1mdHJlZS12ZWN0LWxvb3AtdmVyc2lvbiAqLworICBPUFRfZnRyZWVfdmVjdG9yaXplID0gOTUyLCAgICAgICAgICAgICAgICAgLyogLWZ0cmVlLXZlY3Rvcml6ZSAqLworICBPUFRfZnRyZWVfdmVjdG9yaXplcl92ZXJib3NlXyA9IDk1MywgICAgICAgLyogLWZ0cmVlLXZlY3Rvcml6ZXItdmVyYm9zZT0gKi8KKyAgT1BUX2Z0cmVlX3ZycCA9IDk1NCwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdHJlZS12cnAgKi8KKyAgT1BUX2Z1bmRlcnNjb3JpbmcgPSA5NTUsICAgICAgICAgICAgICAgICAgIC8qIC1mdW5kZXJzY29yaW5nICovCisgIE9QVF9mdW5pdF9hdF9hX3RpbWUgPSA5NTYsICAgICAgICAgICAgICAgICAvKiAtZnVuaXQtYXQtYS10aW1lICovCisgIE9QVF9mdW5yb2xsX2FsbF9sb29wcyA9IDk1NywgICAgICAgICAgICAgICAvKiAtZnVucm9sbC1hbGwtbG9vcHMgKi8KKyAgT1BUX2Z1bnJvbGxfbG9vcHMgPSA5NTgsICAgICAgICAgICAgICAgICAgIC8qIC1mdW5yb2xsLWxvb3BzICovCisgIE9QVF9mdW5zYWZlX2xvb3Bfb3B0aW1pemF0aW9ucyA9IDk1OSwgICAgICAvKiAtZnVuc2FmZS1sb29wLW9wdGltaXphdGlvbnMgKi8KKyAgT1BUX2Z1bnNhZmVfbWF0aF9vcHRpbWl6YXRpb25zID0gOTYwLCAgICAgIC8qIC1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9ucyAqLworICBPUFRfZnVuc2lnbmVkX2JpdGZpZWxkcyA9IDk2MSwgICAgICAgICAgICAgLyogLWZ1bnNpZ25lZC1iaXRmaWVsZHMgKi8KKyAgT1BUX2Z1bnNpZ25lZF9jaGFyID0gOTYyLCAgICAgICAgICAgICAgICAgIC8qIC1mdW5zaWduZWQtY2hhciAqLworICBPUFRfZnVuc3dpdGNoX2xvb3BzID0gOTYzLCAgICAgICAgICAgICAgICAgLyogLWZ1bnN3aXRjaC1sb29wcyAqLworICBPUFRfZnVud2luZF90YWJsZXMgPSA5NjQsICAgICAgICAgICAgICAgICAgLyogLWZ1bndpbmQtdGFibGVzICovCisgIE9QVF9mdXNlX2F0b21pY19idWlsdGlucyA9IDk2NSwgICAgICAgICAgICAvKiAtZnVzZS1hdG9taWMtYnVpbHRpbnMgKi8KKyAgT1BUX2Z1c2VfYm9laG1fZ2MgPSA5NjYsICAgICAgICAgICAgICAgICAgIC8qIC1mdXNlLWJvZWhtLWdjICovCisgIE9QVF9mdXNlX2N4YV9hdGV4aXQgPSA5NjcsICAgICAgICAgICAgICAgICAvKiAtZnVzZS1jeGEtYXRleGl0ICovCisgIE9QVF9mdXNlX2N4YV9nZXRfZXhjZXB0aW9uX3B0ciA9IDk2OCwgICAgICAvKiAtZnVzZS1jeGEtZ2V0LWV4Y2VwdGlvbi1wdHIgKi8KKyAgT1BUX2Z1c2VfZGl2aWRlX3N1YnJvdXRpbmUgPSA5NjksICAgICAgICAgIC8qIC1mdXNlLWRpdmlkZS1zdWJyb3V0aW5lICovCisgIE9QVF9mdXNlX2xkX2JmZCA9IDk3MCwgICAgICAgICAgICAgICAgICAgICAvKiAtZnVzZS1sZD1iZmQgKi8KKyAgT1BUX2Z1c2VfbGRfZ29sZCA9IDk3MSwgICAgICAgICAgICAgICAgICAgIC8qIC1mdXNlLWxkPWdvbGQgKi8KKyAgT1BUX2Z1c2VfbGlua2VyX3BsdWdpbiA9IDk3MiwgICAgICAgICAgICAgIC8qIC1mdXNlLWxpbmtlci1wbHVnaW4gKi8KKyAgT1BUX2Z2YXJfdHJhY2tpbmcgPSA5NzMsICAgICAgICAgICAgICAgICAgIC8qIC1mdmFyLXRyYWNraW5nICovCisgIE9QVF9mdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzID0gOTc0LCAgICAgICAvKiAtZnZhci10cmFja2luZy1hc3NpZ25tZW50cyAqLworICBPUFRfZnZhcl90cmFja2luZ19hc3NpZ25tZW50c190b2dnbGUgPSA5NzUsLyogLWZ2YXItdHJhY2tpbmctYXNzaWdubWVudHMtdG9nZ2xlICovCisgIE9QVF9mdmFyX3RyYWNraW5nX3VuaW5pdCA9IDk3NiwgICAgICAgICAgICAvKiAtZnZhci10cmFja2luZy11bmluaXQgKi8KKyAgT1BUX2Z2YXJpYWJsZV9leHBhbnNpb25faW5fdW5yb2xsZXIgPSA5NzcsIC8qIC1mdmFyaWFibGUtZXhwYW5zaW9uLWluLXVucm9sbGVyICovCisgIE9QVF9mdmVjdF9jb3N0X21vZGVsID0gOTc4LCAgICAgICAgICAgICAgICAvKiAtZnZlY3QtY29zdC1tb2RlbCAqLworICBPUFRfZnZlcmJvc2VfYXNtID0gOTc5LCAgICAgICAgICAgICAgICAgICAgLyogLWZ2ZXJib3NlLWFzbSAqLworICAvKiBPUFRfZnZlcnNpb24gPSA5ODAsICovICAgICAgICAgICAgICAgICAgLyogLWZ2ZXJzaW9uICovCisgIE9QVF9mdmlzaWJpbGl0eV9pbmxpbmVzX2hpZGRlbiA9IDk4MSwgICAgICAvKiAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gKi8KKyAgT1BUX2Z2aXNpYmlsaXR5X21zX2NvbXBhdCA9IDk4MiwgICAgICAgICAgIC8qIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgKi8KKyAgT1BUX2Z2aXNpYmlsaXR5XyA9IDk4MywgICAgICAgICAgICAgICAgICAgIC8qIC1mdmlzaWJpbGl0eT0gKi8KKyAgT1BUX2Z2cHQgPSA5ODQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1mdnB0ICovCisgIC8qIE9QVF9mdnRhYmxlX2djID0gOTg1LCAqLyAgICAgICAgICAgICAgICAvKiAtZnZ0YWJsZS1nYyAqLworICAvKiBPUFRfZnZ0YWJsZV90aHVua3MgPSA5ODYsICovICAgICAgICAgICAgLyogLWZ2dGFibGUtdGh1bmtzICovCisgIE9QVF9md2VhayA9IDk4NywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZndlYWsgKi8KKyAgT1BUX2Z3ZWIgPSA5ODgsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1md2ViICovCisgIE9QVF9md2hvbGVfZmlsZSA9IDk4OSwgICAgICAgICAgICAgICAgICAgICAvKiAtZndob2xlLWZpbGUgKi8KKyAgT1BUX2Z3aG9sZV9wcm9ncmFtID0gOTkwLCAgICAgICAgICAgICAgICAgIC8qIC1md2hvbGUtcHJvZ3JhbSAqLworICBPUFRfZndpZGVfZXhlY19jaGFyc2V0XyA9IDk5MSwgICAgICAgICAgICAgLyogLWZ3aWRlLWV4ZWMtY2hhcnNldD0gKi8KKyAgT1BUX2Z3b3JraW5nX2RpcmVjdG9yeSA9IDk5MiwgICAgICAgICAgICAgIC8qIC1md29ya2luZy1kaXJlY3RvcnkgKi8KKyAgT1BUX2Z3cGEgPSA5OTMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1md3BhICovCisgIE9QVF9md3JhcHYgPSA5OTQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZndyYXB2ICovCisgIC8qIE9QVF9meHJlZiA9IDk5NSwgKi8gICAgICAgICAgICAgICAgICAgICAvKiAtZnhyZWYgKi8KKyAgLyogT1BUX2Z6ZWUgPSA5OTYsICovICAgICAgICAgICAgICAgICAgICAgIC8qIC1memVlICovCisgIE9QVF9memVyb19pbml0aWFsaXplZF9pbl9ic3MgPSA5OTcsICAgICAgICAvKiAtZnplcm8taW5pdGlhbGl6ZWQtaW4tYnNzICovCisgIE9QVF9memVyb19saW5rID0gOTk4LCAgICAgICAgICAgICAgICAgICAgICAvKiAtZnplcm8tbGluayAqLworICBPUFRfZyA9IDk5OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWcgKi8KKyAgT1BUX2dhbnQgPSAxMDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1nYW50ICovCisgIE9QVF9nY29mZiA9IDEwMDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ2NvZmYgKi8KKyAgT1BUX2dkd2FyZl8gPSAxMDAyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1nZHdhcmYtICovCisgIE9QVF9nZW5fZGVjbHMgPSAxMDAzLCAgICAgICAgICAgICAgICAgICAgICAvKiAtZ2VuLWRlY2xzICovCisgIE9QVF9nZ2RiID0gMTAwNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ2dkYiAqLworICBPUFRfZ25hdCA9IDEwMDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWduYXQgKi8KKyAgT1BUX2duYXRPID0gMTAwNiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1nbmF0TyAqLworICBPUFRfZ25vX3B1Ym5hbWVzID0gMTAwNywgICAgICAgICAgICAgICAgICAgLyogLWduby1wdWJuYW1lcyAqLworICBPUFRfZ25vX3JlY29yZF9nY2Nfc3dpdGNoZXMgPSAxMDA4LCAgICAgICAgLyogLWduby1yZWNvcmQtZ2NjLXN3aXRjaGVzICovCisgIE9QVF9nbm9fc3BsaXRfZHdhcmYgPSAxMDA5LCAgICAgICAgICAgICAgICAvKiAtZ25vLXNwbGl0LWR3YXJmICovCisgIE9QVF9nbm9fc3RyaWN0X2R3YXJmID0gMTAxMCwgICAgICAgICAgICAgICAvKiAtZ25vLXN0cmljdC1kd2FyZiAqLworICBPUFRfZ3B1Ym5hbWVzID0gMTAxMSwgICAgICAgICAgICAgICAgICAgICAgLyogLWdwdWJuYW1lcyAqLworICBPUFRfZ3JlY29yZF9nY2Nfc3dpdGNoZXMgPSAxMDEyLCAgICAgICAgICAgLyogLWdyZWNvcmQtZ2NjLXN3aXRjaGVzICovCisgIE9QVF9nc3BsaXRfZHdhcmYgPSAxMDEzLCAgICAgICAgICAgICAgICAgICAvKiAtZ3NwbGl0LWR3YXJmICovCisgIE9QVF9nc3RhYnMgPSAxMDE0LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ3N0YWJzICovCisgIE9QVF9nc3RhYnNfID0gMTAxNSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ3N0YWJzKyAqLworICBPUFRfZ3N0cmljdF9kd2FyZiA9IDEwMTYsICAgICAgICAgICAgICAgICAgLyogLWdzdHJpY3QtZHdhcmYgKi8KKyAgT1BUX2d0b2dnbGUgPSAxMDE3LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1ndG9nZ2xlICovCisgIE9QVF9ndm1zID0gMTAxOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtZ3ZtcyAqLworICBPUFRfZ3hjb2ZmID0gMTAxOSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWd4Y29mZiAqLworICBPUFRfZ3hjb2ZmXyA9IDEwMjAsICAgICAgICAgICAgICAgICAgICAgICAgLyogLWd4Y29mZisgKi8KKyAgT1BUX2ggPSAxMDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1oICovCisgIE9QVF9pZGlyYWZ0ZXIgPSAxMDIyLCAgICAgICAgICAgICAgICAgICAgICAvKiAtaWRpcmFmdGVyICovCisgIE9QVF9pbWFjcm9zID0gMTAyMywgICAgICAgICAgICAgICAgICAgICAgICAvKiAtaW1hY3JvcyAqLworICBPUFRfaW11bHRpYXJjaCA9IDEwMjQsICAgICAgICAgICAgICAgICAgICAgLyogLWltdWx0aWFyY2ggKi8KKyAgT1BUX2ltdWx0aWxpYiA9IDEwMjUsICAgICAgICAgICAgICAgICAgICAgIC8qIC1pbXVsdGlsaWIgKi8KKyAgT1BUX2luY2x1ZGUgPSAxMDI2LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1pbmNsdWRlICovCisgIE9QVF9pcGx1Z2luZGlyXyA9IDEwMjcsICAgICAgICAgICAgICAgICAgICAvKiAtaXBsdWdpbmRpcj0gKi8KKyAgT1BUX2lwcmVmaXggPSAxMDI4LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1pcHJlZml4ICovCisgIE9QVF9pcXVvdGUgPSAxMDI5LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtaXF1b3RlICovCisgIE9QVF9pc3lzcm9vdCA9IDEwMzAsICAgICAgICAgICAgICAgICAgICAgICAvKiAtaXN5c3Jvb3QgKi8KKyAgT1BUX2lzeXN0ZW0gPSAxMDMxLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1pc3lzdGVtICovCisgIE9QVF9pd2l0aHByZWZpeCA9IDEwMzIsICAgICAgICAgICAgICAgICAgICAvKiAtaXdpdGhwcmVmaXggKi8KKyAgT1BUX2l3aXRocHJlZml4YmVmb3JlID0gMTAzMywgICAgICAgICAgICAgIC8qIC1pd2l0aHByZWZpeGJlZm9yZSAqLworICBPUFRfazggPSAxMDM0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLWs4ICovCisgIE9QVF9sID0gMTAzNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbCAqLworICBPUFRfbGFuZ19hc20gPSAxMDM2LCAgICAgICAgICAgICAgICAgICAgICAgLyogLWxhbmctYXNtICovCisgIE9QVF9tYXJjaF8gPSAxMDM3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbWFyY2g9ICovCisgIE9QVF9tYmlnX2VuZGlhbiA9IDEwMzgsICAgICAgICAgICAgICAgICAgICAvKiAtbWJpZy1lbmRpYW4gKi8KKyAgT1BUX21jbW9kZWxfID0gMTAzOSwgICAgICAgICAgICAgICAgICAgICAgIC8qIC1tY21vZGVsPSAqLworICBPUFRfbWNwdV8gPSAxMDQwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW1jcHU9ICovCisgIE9QVF9tZ2VuZXJhbF9yZWdzX29ubHkgPSAxMDQxLCAgICAgICAgICAgICAvKiAtbWdlbmVyYWwtcmVncy1vbmx5ICovCisgIE9QVF9tbGl0dGxlX2VuZGlhbiA9IDEwNDIsICAgICAgICAgICAgICAgICAvKiAtbWxpdHRsZS1lbmRpYW4gKi8KKyAgT1BUX21vbWl0X2xlYWZfZnJhbWVfcG9pbnRlciA9IDEwNDMsICAgICAgIC8qIC1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIgKi8KKyAgT1BUX21zdHJpY3RfYWxpZ24gPSAxMDQ0LCAgICAgICAgICAgICAgICAgIC8qIC1tc3RyaWN0LWFsaWduICovCisgIE9QVF9tdGxzX2RpYWxlY3RfID0gMTA0NSwgICAgICAgICAgICAgICAgICAvKiAtbXRscy1kaWFsZWN0PSAqLworICBPUFRfbXR1bmVfID0gMTA0NiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW10dW5lPSAqLworICBPUFRfbiA9IDEwNDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW4gKi8KKyAgT1BUX25vX2Nhbm9uaWNhbF9wcmVmaXhlcyA9IDEwNDgsICAgICAgICAgIC8qIC1uby1jYW5vbmljYWwtcHJlZml4ZXMgKi8KKyAgT1BUX25vX2ludGVncmF0ZWRfY3BwID0gMTA0OSwgICAgICAgICAgICAgIC8qIC1uby1pbnRlZ3JhdGVkLWNwcCAqLworICBPUFRfbm9jcHAgPSAxMDUwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLW5vY3BwICovCisgIE9QVF9ub2RlZmF1bHRsaWJzID0gMTA1MSwgICAgICAgICAgICAgICAgICAvKiAtbm9kZWZhdWx0bGlicyAqLworICBPUFRfbm9zdGFydGZpbGVzID0gMTA1MiwgICAgICAgICAgICAgICAgICAgLyogLW5vc3RhcnRmaWxlcyAqLworICBPUFRfbm9zdGRpbmMgPSAxMDUzLCAgICAgICAgICAgICAgICAgICAgICAgLyogLW5vc3RkaW5jICovCisgIE9QVF9ub3N0ZGluY19fID0gMTA1NCwgICAgICAgICAgICAgICAgICAgICAvKiAtbm9zdGRpbmMrKyAqLworICBPUFRfbm9zdGRsaWIgPSAxMDU1LCAgICAgICAgICAgICAgICAgICAgICAgLyogLW5vc3RkbGliICovCisgIE9QVF9vID0gMTA1NiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtbyAqLworICBPUFRfcCA9IDEwNTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXAgKi8KKyAgT1BUX3Bhc3NfZXhpdF9jb2RlcyA9IDEwNTgsICAgICAgICAgICAgICAgIC8qIC1wYXNzLWV4aXQtY29kZXMgKi8KKyAgLyogT1BUX3BlZGFudGljID0gMTA1OSwgKi8gICAgICAgICAgICAgICAgIC8qIC1wZWRhbnRpYyAqLworICBPUFRfcGVkYW50aWNfZXJyb3JzID0gMTA2MCwgICAgICAgICAgICAgICAgLyogLXBlZGFudGljLWVycm9ycyAqLworICBPUFRfcGcgPSAxMDYxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXBnICovCisgIE9QVF9waWUgPSAxMDYyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcGllICovCisgIE9QVF9waXBlID0gMTA2MywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcGlwZSAqLworICBPUFRfcHJpbnRfZmlsZV9uYW1lXyA9IDEwNjQsICAgICAgICAgICAgICAgLyogLXByaW50LWZpbGUtbmFtZT0gKi8KKyAgT1BUX3ByaW50X2xpYmdjY19maWxlX25hbWUgPSAxMDY1LCAgICAgICAgIC8qIC1wcmludC1saWJnY2MtZmlsZS1uYW1lICovCisgIE9QVF9wcmludF9tdWx0aV9kaXJlY3RvcnkgPSAxMDY2LCAgICAgICAgICAvKiAtcHJpbnQtbXVsdGktZGlyZWN0b3J5ICovCisgIE9QVF9wcmludF9tdWx0aV9saWIgPSAxMDY3LCAgICAgICAgICAgICAgICAvKiAtcHJpbnQtbXVsdGktbGliICovCisgIE9QVF9wcmludF9tdWx0aV9vc19kaXJlY3RvcnkgPSAxMDY4LCAgICAgICAvKiAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5ICovCisgIE9QVF9wcmludF9tdWx0aWFyY2ggPSAxMDY5LCAgICAgICAgICAgICAgICAvKiAtcHJpbnQtbXVsdGlhcmNoICovCisgIE9QVF9wcmludF9vYmpjX3J1bnRpbWVfaW5mbyA9IDEwNzAsICAgICAgICAvKiAtcHJpbnQtb2JqYy1ydW50aW1lLWluZm8gKi8KKyAgT1BUX3ByaW50X3Byb2dfbmFtZV8gPSAxMDcxLCAgICAgICAgICAgICAgIC8qIC1wcmludC1wcm9nLW5hbWU9ICovCisgIE9QVF9wcmludF9zZWFyY2hfZGlycyA9IDEwNzIsICAgICAgICAgICAgICAvKiAtcHJpbnQtc2VhcmNoLWRpcnMgKi8KKyAgT1BUX3ByaW50X3N5c3Jvb3QgPSAxMDczLCAgICAgICAgICAgICAgICAgIC8qIC1wcmludC1zeXNyb290ICovCisgIE9QVF9wcmludF9zeXNyb290X2hlYWRlcnNfc3VmZml4ID0gMTA3NCwgICAvKiAtcHJpbnQtc3lzcm9vdC1oZWFkZXJzLXN1ZmZpeCAqLworICBPUFRfcXVpZXQgPSAxMDc1LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXF1aWV0ICovCisgIE9QVF9yID0gMTA3NiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtciAqLworICBPUFRfcmVtYXAgPSAxMDc3LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXJlbWFwICovCisgIE9QVF9zID0gMTA3OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcyAqLworICBPUFRfc19iY19hYmkgPSAxMDc5LCAgICAgICAgICAgICAgICAgICAgICAgLyogLXMtYmMtYWJpICovCisgIE9QVF9zYXZlX3RlbXBzID0gMTA4MCwgICAgICAgICAgICAgICAgICAgICAvKiAtc2F2ZS10ZW1wcyAqLworICBPUFRfc2F2ZV90ZW1wc18gPSAxMDgxLCAgICAgICAgICAgICAgICAgICAgLyogLXNhdmUtdGVtcHM9ICovCisgIE9QVF9zaGFyZWQgPSAxMDgyLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc2hhcmVkICovCisgIE9QVF9zaGFyZWRfbGliZ2NjID0gMTA4MywgICAgICAgICAgICAgICAgICAvKiAtc2hhcmVkLWxpYmdjYyAqLworICAvKiBPUFRfc3BlY3MgPSAxMDg0LCAqLyAgICAgICAgICAgICAgICAgICAgLyogLXNwZWNzICovCisgIE9QVF9zcGVjc18gPSAxMDg1LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3BlY3M9ICovCisgIE9QVF9zdGF0aWMgPSAxMDg2LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RhdGljICovCisgIE9QVF9zdGF0aWNfbGliYXNhbiA9IDEwODcsICAgICAgICAgICAgICAgICAvKiAtc3RhdGljLWxpYmFzYW4gKi8KKyAgT1BUX3N0YXRpY19saWJnY2MgPSAxMDg4LCAgICAgICAgICAgICAgICAgIC8qIC1zdGF0aWMtbGliZ2NjICovCisgIE9QVF9zdGF0aWNfbGliZ2NqID0gMTA4OSwgICAgICAgICAgICAgICAgICAvKiAtc3RhdGljLWxpYmdjaiAqLworICBPUFRfc3RhdGljX2xpYmdmb3J0cmFuID0gMTA5MCwgICAgICAgICAgICAgLyogLXN0YXRpYy1saWJnZm9ydHJhbiAqLworICBPUFRfc3RhdGljX2xpYmdvID0gMTA5MSwgICAgICAgICAgICAgICAgICAgLyogLXN0YXRpYy1saWJnbyAqLworICBPUFRfc3RhdGljX2xpYnN0ZGNfXyA9IDEwOTIsICAgICAgICAgICAgICAgLyogLXN0YXRpYy1saWJzdGRjKysgKi8KKyAgT1BUX3N0YXRpY19saWJ0c2FuID0gMTA5MywgICAgICAgICAgICAgICAgIC8qIC1zdGF0aWMtbGlidHNhbiAqLworICAvKiBPUFRfc3RkX2NfXzAzID0gMTA5NCwgKi8gICAgICAgICAgICAgICAgLyogLXN0ZD1jKyswMyAqLworICAvKiBPUFRfc3RkX2NfXzB4ID0gMTA5NSwgKi8gICAgICAgICAgICAgICAgLyogLXN0ZD1jKysweCAqLworICBPUFRfc3RkX2NfXzExID0gMTA5NiwgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1jKysxMSAqLworICBPUFRfc3RkX2NfXzF5ID0gMTA5NywgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1jKysxeSAqLworICBPUFRfc3RkX2NfXzk4ID0gMTA5OCwgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1jKys5OCAqLworICBPUFRfc3RkX2MxMSA9IDEwOTksICAgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1jMTEgKi8KKyAgLyogT1BUX3N0ZF9jMXggPSAxMTAwLCAqLyAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9YzF4ICovCisgIC8qIE9QVF9zdGRfYzg5ID0gMTEwMSwgKi8gICAgICAgICAgICAgICAgICAvKiAtc3RkPWM4OSAqLworICBPUFRfc3RkX2M5MCA9IDExMDIsICAgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1jOTAgKi8KKyAgT1BUX3N0ZF9jOTkgPSAxMTAzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9Yzk5ICovCisgIC8qIE9QVF9zdGRfYzl4ID0gMTEwNCwgKi8gICAgICAgICAgICAgICAgICAvKiAtc3RkPWM5eCAqLworICBPUFRfc3RkX2YyMDAzID0gMTEwNSwgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1mMjAwMyAqLworICBPUFRfc3RkX2YyMDA4ID0gMTEwNiwgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1mMjAwOCAqLworICBPUFRfc3RkX2YyMDA4dHMgPSAxMTA3LCAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1mMjAwOHRzICovCisgIE9QVF9zdGRfZjk1ID0gMTEwOCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWY5NSAqLworICBPUFRfc3RkX2dudSA9IDExMDksICAgICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1nbnUgKi8KKyAgLyogT1BUX3N0ZF9nbnVfXzAzID0gMTExMCwgKi8gICAgICAgICAgICAgIC8qIC1zdGQ9Z251KyswMyAqLworICAvKiBPUFRfc3RkX2dudV9fMHggPSAxMTExLCAqLyAgICAgICAgICAgICAgLyogLXN0ZD1nbnUrKzB4ICovCisgIE9QVF9zdGRfZ251X18xMSA9IDExMTIsICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWdudSsrMTEgKi8KKyAgT1BUX3N0ZF9nbnVfXzF5ID0gMTExMywgICAgICAgICAgICAgICAgICAgIC8qIC1zdGQ9Z251KysxeSAqLworICBPUFRfc3RkX2dudV9fOTggPSAxMTE0LCAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1nbnUrKzk4ICovCisgIE9QVF9zdGRfZ251MTEgPSAxMTE1LCAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTExICovCisgIC8qIE9QVF9zdGRfZ251MXggPSAxMTE2LCAqLyAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTF4ICovCisgIC8qIE9QVF9zdGRfZ251ODkgPSAxMTE3LCAqLyAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTg5ICovCisgIE9QVF9zdGRfZ251OTAgPSAxMTE4LCAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTkwICovCisgIE9QVF9zdGRfZ251OTkgPSAxMTE5LCAgICAgICAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTk5ICovCisgIC8qIE9QVF9zdGRfZ251OXggPSAxMTIwLCAqLyAgICAgICAgICAgICAgICAvKiAtc3RkPWdudTl4ICovCisgIC8qIE9QVF9zdGRfaXNvOTg5OV8xOTkwID0gMTEyMSwgKi8gICAgICAgICAvKiAtc3RkPWlzbzk4OTk6MTk5MCAqLworICBPUFRfc3RkX2lzbzk4OTlfMTk5NDA5ID0gMTEyMiwgICAgICAgICAgICAgLyogLXN0ZD1pc285ODk5OjE5OTQwOSAqLworICAvKiBPUFRfc3RkX2lzbzk4OTlfMTk5OSA9IDExMjMsICovICAgICAgICAgLyogLXN0ZD1pc285ODk5OjE5OTkgKi8KKyAgLyogT1BUX3N0ZF9pc285ODk5XzE5OXggPSAxMTI0LCAqLyAgICAgICAgIC8qIC1zdGQ9aXNvOTg5OToxOTl4ICovCisgIC8qIE9QVF9zdGRfaXNvOTg5OV8yMDExID0gMTEyNSwgKi8gICAgICAgICAvKiAtc3RkPWlzbzk4OTk6MjAxMSAqLworICBPUFRfc3RkX2xlZ2FjeSA9IDExMjYsICAgICAgICAgICAgICAgICAgICAgLyogLXN0ZD1sZWdhY3kgKi8KKyAgT1BUX3N5bWJvbGljID0gMTEyNywgICAgICAgICAgICAgICAgICAgICAgIC8qIC1zeW1ib2xpYyAqLworICBPUFRfdCA9IDExMjgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXQgKi8KKyAgT1BUX3RpbWUgPSAxMTI5LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC10aW1lICovCisgIE9QVF90aW1lXyA9IDExMzAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtdGltZT0gKi8KKyAgT1BUX3RyYWRpdGlvbmFsID0gMTEzMSwgICAgICAgICAgICAgICAgICAgIC8qIC10cmFkaXRpb25hbCAqLworICBPUFRfdHJhZGl0aW9uYWxfY3BwID0gMTEzMiwgICAgICAgICAgICAgICAgLyogLXRyYWRpdGlvbmFsLWNwcCAqLworICBPUFRfdHJpZ3JhcGhzID0gMTEzMywgICAgICAgICAgICAgICAgICAgICAgLyogLXRyaWdyYXBocyAqLworICBPUFRfdSA9IDExMzQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXUgKi8KKyAgT1BUX3VuZGVmID0gMTEzNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC11bmRlZiAqLworICBPUFRfdiA9IDExMzYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLXYgKi8KKyAgT1BUX3ZlcnNpb24gPSAxMTM3LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIC12ZXJzaW9uICovCisgIE9QVF93ID0gMTEzOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtdyAqLworICBPUFRfd3JhcHBlciA9IDExMzksICAgICAgICAgICAgICAgICAgICAgICAgLyogLXdyYXBwZXIgKi8KKyAgT1BUX3ggPSAxMTQwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC14ICovCisgIE9QVF96ID0gMTE0MSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAteiAqLworICBOX09QVFMsCisgIE9QVF9TUEVDSUFMX3Vua25vd24sCisgIE9QVF9TUEVDSUFMX2lnbm9yZSwKKyAgT1BUX1NQRUNJQUxfcHJvZ3JhbV9uYW1lLAorICBPUFRfU1BFQ0lBTF9pbnB1dF9maWxlCit9OworCisjZW5kaWYgLyogT1BUSU9OU19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvb3B0cy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL29wdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRmNGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL29wdHMuaApAQCAtMCwwICsxLDQwMyBAQAorLyogQ29tbWFuZCBsaW5lIG9wdGlvbiBoYW5kbGluZy4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfT1BUU19ICisjZGVmaW5lIEdDQ19PUFRTX0gKKworI2luY2x1ZGUgImlucHV0LmgiCisjaW5jbHVkZSAidmVjLmgiCisjaW5jbHVkZSAib2JzdGFjay5oIgorCisvKiBTcGVjaWZpZXMgaG93IGEgc3dpdGNoJ3MgVkFSX1ZBTFVFIHJlbGF0ZXMgdG8gaXRzIEZMQUdfVkFSLiAgKi8KK2VudW0gY2xfdmFyX3R5cGUgeworICAvKiBUaGUgc3dpdGNoIGlzIGVuYWJsZWQgd2hlbiBGTEFHX1ZBUiBpcyBub256ZXJvLiAgKi8KKyAgQ0xWQ19CT09MRUFOLAorCisgIC8qIFRoZSBzd2l0Y2ggaXMgZW5hYmxlZCB3aGVuIEZMQUdfVkFSID09IFZBUl9WQUxVRS4gICovCisgIENMVkNfRVFVQUwsCisKKyAgLyogVGhlIHN3aXRjaCBpcyBlbmFibGVkIHdoZW4gVkFSX1ZBTFVFIGlzIG5vdCBzZXQgaW4gRkxBR19WQVIuICAqLworICBDTFZDX0JJVF9DTEVBUiwKKworICAvKiBUaGUgc3dpdGNoIGlzIGVuYWJsZWQgd2hlbiBWQVJfVkFMVUUgaXMgc2V0IGluIEZMQUdfVkFSLiAgKi8KKyAgQ0xWQ19CSVRfU0VULAorCisgIC8qIFRoZSBzd2l0Y2ggdGFrZXMgYSBzdHJpbmcgYXJndW1lbnQgYW5kIEZMQUdfVkFSIHBvaW50cyB0byB0aGF0CisgICAgIGFyZ3VtZW50LiAgKi8KKyAgQ0xWQ19TVFJJTkcsCisKKyAgLyogVGhlIHN3aXRjaCB0YWtlcyBhbiBlbnVtZXJhdGVkIGFyZ3VtZW50IChWQVJfRU5VTSBzYXlzIHdoYXQKKyAgICAgZW51bWVyYXRpb24pIGFuZCBGTEFHX1ZBUiBwb2ludHMgdG8gdGhhdCBhcmd1bWVudC4gICovCisgIENMVkNfRU5VTSwKKworICAvKiBUaGUgc3dpdGNoIHNob3VsZCBiZSBzdG9yZWQgaW4gdGhlIFZFQyBwb2ludGVkIHRvIGJ5IEZMQUdfVkFSIGZvcgorICAgICBsYXRlciBwcm9jZXNzaW5nLiAgKi8KKyAgQ0xWQ19ERUZFUgorfTsKKworc3RydWN0IGNsX29wdGlvbgoreworICAvKiBUZXh0IG9mIHRoZSBvcHRpb24sIGluY2x1ZGluZyBpbml0aWFsICctJy4gICovCisgIGNvbnN0IGNoYXIgKm9wdF90ZXh0OworICAvKiBIZWxwIHRleHQgZm9yIC0taGVscCwgb3IgTlVMTC4gICovCisgIGNvbnN0IGNoYXIgKmhlbHA7CisgIC8qIEVycm9yIG1lc3NhZ2UgZm9yIG1pc3NpbmcgYXJndW1lbnQsIG9yIE5VTEwuICAqLworICBjb25zdCBjaGFyICptaXNzaW5nX2FyZ3VtZW50X2Vycm9yOworICAvKiBXYXJuaW5nIHRvIGdpdmUgd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBvciBOVUxMLiAgKi8KKyAgY29uc3QgY2hhciAqd2Fybl9tZXNzYWdlOworICAvKiBBcmd1bWVudCBvZiBhbGlhcyB0YXJnZXQgd2hlbiBwb3NpdGl2ZSBvcHRpb24gZ2l2ZW4sIG9yIE5VTEwuICAqLworICBjb25zdCBjaGFyICphbGlhc19hcmc7CisgIC8qIEFyZ3VtZW50IG9mIGFsaWFzIHRhcmdldCB3aGVuIG5lZ2F0aXZlIG9wdGlvbiBnaXZlbiwgb3IgTlVMTC4gICovCisgIGNvbnN0IGNoYXIgKm5lZ19hbGlhc19hcmc7CisgIC8qIEFsaWFzIHRhcmdldCwgb3IgTl9PUFRTIGlmIG5vdCBhbiBhbGlhcy4gICovCisgIHVuc2lnbmVkIHNob3J0IGFsaWFzX3RhcmdldDsKKyAgLyogUHJldmlvdXMgb3B0aW9uIHRoYXQgaXMgYW4gaW5pdGlhbCBzdWJzdHJpbmcgb2YgdGhpcyBvbmUsIG9yCisgICAgIE5fT1BUUyBpZiBub25lLiAgKi8KKyAgdW5zaWduZWQgc2hvcnQgYmFja19jaGFpbjsKKyAgLyogT3B0aW9uIGxlbmd0aCwgbm90IGluY2x1ZGluZyBpbml0aWFsICctJy4gICovCisgIHVuc2lnbmVkIGNoYXIgb3B0X2xlbjsKKyAgLyogTmV4dCBvcHRpb24gaW4gYSBzZXF1ZW5jZSBtYXJrZWQgd2l0aCBOZWdhdGl2ZSwgb3IgLTEgaWYgbm9uZS4gICovCisgIGludCBuZWdfaW5kZXg7CisgIC8qIENMXyogZmxhZ3MgZm9yIHRoaXMgb3B0aW9uLiAgKi8KKyAgdW5zaWduZWQgaW50IGZsYWdzOworICAvKiBEaXNhYmxlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uICAqLworICBCT09MX0JJVEZJRUxEIGNsX2Rpc2FibGVkIDogMTsKKyAgLyogT3B0aW9ucyBtYXJrZWQgd2l0aCBDTF9TRVBBUkFURSB0YWtlIGEgbnVtYmVyIG9mIHNlcGFyYXRlCisgICAgIGFyZ3VtZW50cyAoMSB0byA0KSB0aGF0IGlzIG9uZSBtb3JlIHRoYW4gdGhlIG51bWJlciBpbiB0aGlzCisgICAgIGJpdC1maWVsZC4gICovCisgIHVuc2lnbmVkIGludCBjbF9zZXBhcmF0ZV9uYXJncyA6IDI7CisgIC8qIE9wdGlvbiBpcyBhbiBhbGlhcyB3aGVuIHVzZWQgd2l0aCBzZXBhcmF0ZSBhcmd1bWVudC4gICovCisgIEJPT0xfQklURklFTEQgY2xfc2VwYXJhdGVfYWxpYXMgOiAxOworICAvKiBBbGlhcyB0byBuZWdhdGl2ZSBmb3JtIG9mIG9wdGlvbi4gICovCisgIEJPT0xfQklURklFTEQgY2xfbmVnYXRpdmVfYWxpYXMgOiAxOworICAvKiBPcHRpb24gdGFrZXMgbm8gYXJndW1lbnQgaW4gdGhlIGRyaXZlci4gICovCisgIEJPT0xfQklURklFTEQgY2xfbm9fZHJpdmVyX2FyZyA6IDE7CisgIC8qIFJlamVjdCB0aGlzIG9wdGlvbiBpbiB0aGUgZHJpdmVyLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBjbF9yZWplY3RfZHJpdmVyIDogMTsKKyAgLyogUmVqZWN0IG5vLSBmb3JtLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBjbF9yZWplY3RfbmVnYXRpdmUgOiAxOworICAvKiBNaXNzaW5nIGFyZ3VtZW50IE9LIChqb2luZWQpLiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBjbF9taXNzaW5nX29rIDogMTsKKyAgLyogQXJndW1lbnQgaXMgYW4gaW50ZWdlciA+PTAuICAqLworICBCT09MX0JJVEZJRUxEIGNsX3VpbnRlZ2VyIDogMTsKKyAgLyogQXJndW1lbnQgaXMgYSBIT1NUX1dJREVfSU5ULiAgKi8KKyAgQk9PTF9CSVRGSUVMRCBjbF9ob3N0X3dpZGVfaW50IDogMTsKKyAgLyogQXJndW1lbnQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuICAqLworICBCT09MX0JJVEZJRUxEIGNsX3RvbG93ZXIgOiAxOworICAvKiBSZXBvcnQgYXJndW1lbnQgd2l0aCAtZnZlcmJvc2UtYXNtICAqLworICBCT09MX0JJVEZJRUxEIGNsX3JlcG9ydCA6IDE7CisgIC8qIE9mZnNldCBvZiBmaWVsZCBmb3IgdGhpcyBvcHRpb24gaW4gc3RydWN0IGdjY19vcHRpb25zLCBvcgorICAgICAodW5zaWduZWQgc2hvcnQpIC0xIGlmIG5vbmUuICAqLworICB1bnNpZ25lZCBzaG9ydCBmbGFnX3Zhcl9vZmZzZXQ7CisgIC8qIEluZGV4IGluIGNsX2VudW1zIG9mIGVudW0gdXNlZCBmb3IgdGhpcyBvcHRpb24ncyBhcmd1bWVudHMsIGZvcgorICAgICBDTFZDX0VOVU0gb3B0aW9ucy4gICovCisgIHVuc2lnbmVkIHNob3J0IHZhcl9lbnVtOworICAvKiBIb3cgdGhpcyBvcHRpb24ncyB2YWx1ZSBpcyBkZXRlcm1pbmVkIGFuZCBzZXRzIGEgZmllbGQuICAqLworICBlbnVtIGNsX3Zhcl90eXBlIHZhcl90eXBlOworICAvKiBWYWx1ZSBvciBiaXQtbWFzayB3aXRoIHdoaWNoIHRvIHNldCBhIGZpZWxkLiAgKi8KKyAgSE9TVF9XSURFX0lOVCB2YXJfdmFsdWU7Cit9OworCisvKiBSZWNvcmRzIHRoYXQgdGhlIHN0YXRlIG9mIGFuIG9wdGlvbiBjb25zaXN0cyBvZiBTSVpFIGJ5dGVzIHN0YXJ0aW5nCisgICBhdCBEQVRBLiAgREFUQSBtaWdodCBwb2ludCB0byBDSCBpbiBzb21lIGNhc2VzLiAgKi8KK3N0cnVjdCBjbF9vcHRpb25fc3RhdGUgeworICBjb25zdCB2b2lkICpkYXRhOworICBzaXplX3Qgc2l6ZTsKKyAgY2hhciBjaDsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uIGNsX29wdGlvbnNbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgY2xfb3B0aW9uc19jb3VudDsKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBsYW5nX25hbWVzW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGNsX2xhbmdfY291bnQ7CisKKyNkZWZpbmUgQ0xfUEFSQU1TICAgICAgICAgICAgICAgKDFVIDw8IDE2KSAvKiBGYWtlIGVudHJ5LiAgVXNlZCB0byBkaXNwbGF5IC0tcGFyYW0gaW5mbyB3aXRoIC0taGVscC4gICovCisjZGVmaW5lIENMX1dBUk5JTkcJCSgxVSA8PCAxNykgLyogRW5hYmxlcyBhbiAob3B0aW9uYWwpIHdhcm5pbmcgbWVzc2FnZS4gICovCisjZGVmaW5lIENMX09QVElNSVpBVElPTgkJKDFVIDw8IDE4KSAvKiBFbmFibGVzIGFuIChvcHRpb25hbCkgb3B0aW1pemF0aW9uLiAgKi8KKyNkZWZpbmUgQ0xfRFJJVkVSCQkoMVUgPDwgMTkpIC8qIERyaXZlciBvcHRpb24uICAqLworI2RlZmluZSBDTF9UQVJHRVQJCSgxVSA8PCAyMCkgLyogVGFyZ2V0LXNwZWNpZmljIG9wdGlvbi4gICovCisjZGVmaW5lIENMX0NPTU1PTgkJKDFVIDw8IDIxKSAvKiBMYW5ndWFnZS1pbmRlcGVuZGVudC4gICovCisKKyNkZWZpbmUgQ0xfTUlOX09QVElPTl9DTEFTUwlDTF9QQVJBTVMKKyNkZWZpbmUgQ0xfTUFYX09QVElPTl9DTEFTUwlDTF9DT01NT04KKworLyogRnJvbSBoZXJlIG9uIHRoZSBiaXRzIGRlc2NyaWJlIGF0dHJpYnV0ZXMgb2YgdGhlIG9wdGlvbnMuCisgICBCZWZvcmUgdGhpcyBwb2ludCB0aGUgYml0cyBoYXZlIGRlc2NyaWJlZCB0aGUgY2xhc3Mgb2YgdGhlIG9wdGlvbi4KKyAgIFRoaXMgZGlzdGluY3Rpb24gaXMgaW1wb3J0YW50IGJlY2F1c2UgLS1oZWxwIHdpbGwgbm90IGxpc3Qgb3B0aW9ucworICAgd2hpY2ggb25seSBoYXZlIHRoZXNlIGhpZ2hlciBiaXRzIHNldC4gICovCisKKyNkZWZpbmUgQ0xfSk9JTkVECQkoMVUgPDwgMjIpIC8qIElmIHRha2VzIGpvaW5lZCBhcmd1bWVudC4gICovCisjZGVmaW5lIENMX1NFUEFSQVRFCQkoMVUgPDwgMjMpIC8qIElmIHRha2VzIGEgc2VwYXJhdGUgYXJndW1lbnQuICAqLworI2RlZmluZSBDTF9VTkRPQ1VNRU5URUQJCSgxVSA8PCAyNCkgLyogRG8gbm90IG91dHB1dCB3aXRoIC0taGVscC4gICovCisjZGVmaW5lIENMX05PX0RXQVJGX1JFQ09SRAkoMVUgPDwgMjUpIC8qIERvIG5vdCBhZGQgdG8gcHJvZHVjZXIgc3RyaW5nLiAgKi8KKworLyogRmxhZ3MgZm9yIGFuIGVudW1lcmF0ZWQgb3B0aW9uIGFyZ3VtZW50LiAgKi8KKyNkZWZpbmUgQ0xfRU5VTV9DQU5PTklDQUwJKDEgPDwgMCkgLyogQ2Fub25pY2FsIGZvciB0aGlzIHZhbHVlLiAgKi8KKyNkZWZpbmUgQ0xfRU5VTV9EUklWRVJfT05MWQkoMSA8PCAxKSAvKiBPbmx5IGFjY2VwdGVkIGluIHRoZSBkcml2ZXIuICAqLworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhbiBlbnVtZXJhdGVkIG9wdGlvbiBhcmd1bWVudC4gICovCisKK3N0cnVjdCBjbF9lbnVtX2FyZworeworICAvKiBUaGUgYXJndW1lbnQgdGV4dCwgb3IgTlVMTCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4gICovCisgIGNvbnN0IGNoYXIgKmFyZzsKKworICAvKiBUaGUgY29ycmVzcG9uZGluZyBpbnRlZ2VyIHZhbHVlLiAgKi8KKyAgaW50IHZhbHVlOworCisgIC8qIEZsYWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFyZ3VtZW50LiAgKi8KKyAgdW5zaWduZWQgaW50IGZsYWdzOworfTsKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYW4gZW51bWVyYXRlZCBzZXQgb2Ygb3B0aW9uIGFyZ3VtZW50cy4gICovCisKK3N0cnVjdCBjbF9lbnVtCit7CisgIC8qIEhlbHAgdGV4dCwgb3IgTlVMTCBpZiB0aGUgdmFsdWVzIHNob3VsZCBub3QgYmUgbGlzdGVkIGluIC0taGVscAorICAgICBvdXRwdXQuICAqLworICBjb25zdCBjaGFyICpoZWxwOworCisgIC8qIEVycm9yIG1lc3NhZ2UgZm9yIHVua25vd24gYXJndW1lbnRzLCBvciBOVUxMIHRvIHVzZSBhIGdlbmVyaWMKKyAgICAgZXJyb3IuICAqLworICBjb25zdCBjaGFyICp1bmtub3duX2Vycm9yOworCisgIC8qIEFycmF5IG9mIHBvc3NpYmxlIHZhbHVlcy4gICovCisgIGNvbnN0IHN0cnVjdCBjbF9lbnVtX2FyZyAqdmFsdWVzOworCisgIC8qIFRoZSBzaXplIG9mIHRoZSB0eXBlIHVzZWQgdG8gc3RvcmUgYSB2YWx1ZS4gICovCisgIHNpemVfdCB2YXJfc2l6ZTsKKworICAvKiBGdW5jdGlvbiB0byBzZXQgYSB2YXJpYWJsZSBvZiB0aGlzIHR5cGUuICAqLworICB2b2lkICgqc2V0KSAodm9pZCAqdmFyLCBpbnQgdmFsdWUpOworCisgIC8qIEZ1bmN0aW9uIHRvIGdldCB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBvZiB0aGlzIHR5cGUuICAqLworICBpbnQgKCpnZXQpIChjb25zdCB2b2lkICp2YXIpOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbF9lbnVtIGNsX2VudW1zW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IGNsX2VudW1zX2NvdW50OworCisvKiBQb3NzaWJsZSB3YXlzIGluIHdoaWNoIGEgY29tbWFuZC1saW5lIG9wdGlvbiBtYXkgYmUgZXJyb25lb3VzLgorICAgVGhlc2UgZG8gbm90IGluY2x1ZGUgbm90IGJlaW5nIGtub3duIGF0IGFsbDsgYW4gb3B0aW9uIGluZGV4IG9mCisgICBPUFRfU1BFQ0lBTF91bmtub3duIGlzIHVzZWQgZm9yIHRoYXQuICAqLworCisjZGVmaW5lIENMX0VSUl9ESVNBQkxFRAkJKDEgPDwgMCkgLyogRGlzYWJsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uLiAgKi8KKyNkZWZpbmUgQ0xfRVJSX01JU1NJTkdfQVJHCSgxIDw8IDEpIC8qIEFyZ3VtZW50IHJlcXVpcmVkIGJ1dCBtaXNzaW5nLiAgKi8KKyNkZWZpbmUgQ0xfRVJSX1dST05HX0xBTkcJKDEgPDwgMikgLyogT3B0aW9uIGZvciB3cm9uZyBsYW5ndWFnZS4gICovCisjZGVmaW5lIENMX0VSUl9VSU5UX0FSRwkJKDEgPDwgMykgLyogQmFkIHVuc2lnbmVkIGludGVnZXIgYXJndW1lbnQuICAqLworI2RlZmluZSBDTF9FUlJfRU5VTV9BUkcJCSgxIDw8IDQpIC8qIEJhZCBlbnVtZXJhdGVkIGFyZ3VtZW50LiAgKi8KKyNkZWZpbmUgQ0xfRVJSX05FR0FUSVZFCQkoMSA8PCA1KSAvKiBOZWdhdGl2ZSBmb3JtIG9mIG9wdGlvbgorCQkJCQkgICAgbm90IHBlcm1pdHRlZCAodG9nZXRoZXIKKwkJCQkJICAgIHdpdGggT1BUX1NQRUNJQUxfdW5rbm93bikuICAqLworCisvKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgcmVzdWx0IG9mIGRlY29kaW5nIGFuIG9wdGlvbi4gICovCisKK3N0cnVjdCBjbF9kZWNvZGVkX29wdGlvbgoreworICAvKiBUaGUgaW5kZXggb2YgdGhpcyBvcHRpb24sIG9yIGFuIE9QVF9TUEVDSUFMXyogdmFsdWUgZm9yCisgICAgIG5vbi1vcHRpb25zIGFuZCB1bmtub3duIG9wdGlvbnMuICAqLworICBzaXplX3Qgb3B0X2luZGV4OworCisgIC8qIEFueSB3YXJuaW5nIHRvIGdpdmUgZm9yIHVzZSBvZiB0aGlzIG9wdGlvbiwgb3IgTlVMTCBpZiBub25lLiAgKi8KKyAgY29uc3QgY2hhciAqd2Fybl9tZXNzYWdlOworCisgIC8qIFRoZSBzdHJpbmcgYXJndW1lbnQsIG9yIE5VTEwgaWYgbm9uZS4gIEZvciBPUFRfU1BFQ0lBTF8qIGNhc2VzLAorICAgICB0aGUgb3B0aW9uIG9yIG5vbi1vcHRpb24gY29tbWFuZC1saW5lIGFyZ3VtZW50LiAgKi8KKyAgY29uc3QgY2hhciAqYXJnOworCisgIC8qIFRoZSBvcmlnaW5hbCB0ZXh0IG9mIG9wdGlvbiBwbHVzIGFyZ3VtZW50cywgd2l0aCBzZXBhcmF0ZSBhcmd2CisgICAgIGVsZW1lbnRzIGNvbmNhdGVuYXRlZCBpbnRvIG9uZSBzdHJpbmcgd2l0aCBzcGFjZXMgc2VwYXJhdGluZworICAgICB0aGVtLiAgVGhpcyBpcyBmb3Igc3VjaCB1c2VzIGFzIGRpYWdub3N0aWNzIGFuZAorICAgICAtZnJlY29yZC1nY2Mtc3dpdGNoZXMuICAqLworICBjb25zdCBjaGFyICpvcmlnX29wdGlvbl93aXRoX2FyZ3NfdGV4dDsKKworICAvKiBUaGUgY2Fub25pY2FsIGZvcm0gb2YgdGhlIG9wdGlvbiBhbmQgaXRzIGFyZ3VtZW50LCBmb3Igd2hlbiBpdCBpcworICAgICBuZWNlc3NhcnkgdG8gcmVjb25zdHJ1Y3QgYXJndiBlbGVtZW50cyAoaW4gcGFydGljdWxhciwgZm9yCisgICAgIHByb2Nlc3Npbmcgc3BlY3MgYW5kIHBhc3Npbmcgb3B0aW9ucyB0byBzdWJwcm9jZXNzZXMgZnJvbSB0aGUKKyAgICAgZHJpdmVyKS4gICovCisgIGNvbnN0IGNoYXIgKmNhbm9uaWNhbF9vcHRpb25bNF07CisKKyAgLyogVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY2Fub25pY2FsIGZvcm0gb2YgdGhlIG9wdGlvbiBhbmQKKyAgICAgYXJndW1lbnRzOyBhbHdheXMgYXQgbGVhc3QgMS4gICovCisgIHNpemVfdCBjYW5vbmljYWxfb3B0aW9uX251bV9lbGVtZW50czsKKworICAvKiBGb3IgYSBib29sZWFuIG9wdGlvbiwgMSBmb3IgdGhlIHRydWUgY2FzZSBhbmQgMCBmb3IgdGhlICJuby0iCisgICAgIGNhc2UuICBGb3IgYW4gdW5zaWduZWQgaW50ZWdlciBvcHRpb24sIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgYXJndW1lbnQuICAxIGluIGFsbCBvdGhlciBjYXNlcy4gICovCisgIGludCB2YWx1ZTsKKworICAvKiBBbnkgZmxhZ3MgZGVzY3JpYmluZyBlcnJvcnMgZGV0ZWN0ZWQgaW4gdGhpcyBvcHRpb24uICAqLworICBpbnQgZXJyb3JzOworfTsKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYW4gb3B0aW9uIGRlZmVycmVkIGZvciBoYW5kbGluZyBhZnRlciB0aGUgbWFpbgorICAgb3B0aW9uIGhhbmRsZXJzLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogRWxlbWVudHMgZnJvbSBzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gdXNlZCBmb3IgZGVmZXJyZWQKKyAgICAgb3B0aW9ucy4gICovCisgIHNpemVfdCBvcHRfaW5kZXg7CisgIGNvbnN0IGNoYXIgKmFyZzsKKyAgaW50IHZhbHVlOworfSBjbF9kZWZlcnJlZF9vcHRpb247CisKKy8qIFN0cnVjdHVyZSBkZXNjcmliaW5nIGEgc2luZ2xlIG9wdGlvbi1oYW5kbGluZyBjYWxsYmFjay4gICovCisKK3N0cnVjdCBjbF9vcHRpb25faGFuZGxlcl9mdW5jCit7CisgIC8qIFRoZSBmdW5jdGlvbiBjYWxsZWQgdG8gaGFuZGxlIHRoZSBvcHRpb24uICAqLworICBib29sICgqaGFuZGxlcikgKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywKKwkJICAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwKKwkJICAgY29uc3Qgc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICpkZWNvZGVkLAorCQkgICB1bnNpZ25lZCBpbnQgbGFuZ19tYXNrLCBpbnQga2luZCwgbG9jYXRpb25fdCBsb2MsCisJCSAgIGNvbnN0IHN0cnVjdCBjbF9vcHRpb25faGFuZGxlcnMgKmhhbmRsZXJzLAorCQkgICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsKKworICAvKiBUaGUgbWFzayB0aGF0IG11c3QgaGF2ZSBzb21lIGJpdCBpbiBjb21tb24gd2l0aCB0aGUgZmxhZ3MgZm9yIHRoZQorICAgICBvcHRpb24gZm9yIHRoaXMgcGFydGljdWxhciBoYW5kbGVyIHRvIGJlIHVzZWQuICAqLworICB1bnNpZ25lZCBpbnQgbWFzazsKK307CisKKy8qIFN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBjYWxsYmFja3MgdXNlZCBpbiBoYW5kbGluZyBvcHRpb25zLiAgKi8KKworc3RydWN0IGNsX29wdGlvbl9oYW5kbGVycworeworICAvKiBDYWxsYmFjayBmb3IgYW4gdW5rbm93biBvcHRpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gZ2l2ZSBhbgorICAgICBlcnJvciBmb3IgaXQsIGFuZCBwb3NzaWJseSBzdG9yZSBpbmZvcm1hdGlvbiB0byBkaWFnbm9zZSB0aGUKKyAgICAgb3B0aW9uIGF0IGEgbGF0ZXIgcG9pbnQuICBSZXR1cm4gdHJ1ZSBpZiBhbiBlcnJvciBzaG91bGQgYmUKKyAgICAgZ2l2ZW4sIGZhbHNlIG90aGVyd2lzZS4gICovCisgIGJvb2wgKCp1bmtub3duX29wdGlvbl9jYWxsYmFjaykgKGNvbnN0IHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqZGVjb2RlZCk7CisKKyAgLyogQ2FsbGJhY2sgdG8gaGFuZGxlLCBhbmQgcG9zc2libHkgZGlhZ25vc2UsIGFuIG9wdGlvbiBmb3IgYW5vdGhlcgorICAgICBsYW5ndWFnZS4gICovCisgIHZvaWQgKCp3cm9uZ19sYW5nX2NhbGxiYWNrKSAoY29uc3Qgc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICpkZWNvZGVkLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBsYW5nX21hc2spOworCisgIC8qIFRoZSBudW1iZXIgb2YgaW5kaXZpZHVhbCBoYW5kbGVycy4gICovCisgIHNpemVfdCBudW1faGFuZGxlcnM7CisKKyAgLyogVGhlIGhhbmRsZXJzIHRoZW1zZWx2ZXMuICAqLworICBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJfZnVuYyBoYW5kbGVyc1szXTsKK307CisKKy8qIElucHV0IGZpbGUgbmFtZXMuICAqLworCitleHRlcm4gY29uc3QgY2hhciAqKmluX2ZuYW1lczsKKworLyogVGhlIGNvdW50IG9mIGlucHV0IGZpbGVuYW1lcy4gICovCisKK2V4dGVybiB1bnNpZ25lZCBudW1faW5fZm5hbWVzOworCitleHRlcm4gY2hhciAqb3B0c19jb25jYXQgKGNvbnN0IGNoYXIgKmZpcnN0LCAuLi4pOworCisvKiBPYnN0YWNrIGZvciBvcHRpb24gc3RyaW5ncy4gICovCisKK2V4dGVybiBzdHJ1Y3Qgb2JzdGFjayBvcHRzX29ic3RhY2s7CisKK3NpemVfdCBmaW5kX29wdCAoY29uc3QgY2hhciAqaW5wdXQsIHVuc2lnbmVkIGludCBsYW5nX21hc2spOworZXh0ZXJuIGludCBpbnRlZ3JhbF9hcmd1bWVudCAoY29uc3QgY2hhciAqYXJnKTsKK2V4dGVybiBib29sIGVudW1fdmFsdWVfdG9fYXJnIChjb25zdCBzdHJ1Y3QgY2xfZW51bV9hcmcgKmVudW1fYXJncywKKwkJCSAgICAgICBjb25zdCBjaGFyICoqYXJncCwgaW50IHZhbHVlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBsYW5nX21hc2spOworZXh0ZXJuIHZvaWQgZGVjb2RlX2NtZGxpbmVfb3B0aW9uc190b19hcnJheSAodW5zaWduZWQgaW50IGFyZ2MsCisJCQkJCSAgICAgY29uc3QgY2hhciAqKmFyZ3YsIAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBsYW5nX21hc2ssCisJCQkJCSAgICAgc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICoqZGVjb2RlZF9vcHRpb25zLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGVjb2RlZF9vcHRpb25zX2NvdW50KTsKK2V4dGVybiB2b2lkIGluaXRfb3B0aW9uc19vbmNlICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfb3B0aW9uc19zdHJ1Y3QgKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywKKwkJCQkgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCk7CitleHRlcm4gdm9pZCBkZWNvZGVfY21kbGluZV9vcHRpb25zX3RvX2FycmF5X2RlZmF1bHRfbWFzayAodW5zaWduZWQgaW50IGFyZ2MsCisJCQkJCQkJICBjb25zdCBjaGFyICoqYXJndiwgCisJCQkJCQkJICBzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gKipkZWNvZGVkX29wdGlvbnMsCisJCQkJCQkJICB1bnNpZ25lZCBpbnQgKmRlY29kZWRfb3B0aW9uc19jb3VudCk7CitleHRlcm4gdm9pZCBzZXRfZGVmYXVsdF9oYW5kbGVycyAoc3RydWN0IGNsX29wdGlvbl9oYW5kbGVycyAqaGFuZGxlcnMpOworZXh0ZXJuIHZvaWQgZGVjb2RlX29wdGlvbnMgKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywKKwkJCSAgICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LAorCQkJICAgIHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqZGVjb2RlZF9vcHRpb25zLAorCQkJICAgIHVuc2lnbmVkIGludCBkZWNvZGVkX29wdGlvbnNfY291bnQsCisJCQkgICAgbG9jYXRpb25fdCBsb2MsCisJCQkgICAgZGlhZ25vc3RpY19jb250ZXh0ICpkYyk7CitleHRlcm4gaW50IG9wdGlvbl9lbmFibGVkIChpbnQgb3B0X2lkeCwgdm9pZCAqb3B0cyk7CitleHRlcm4gYm9vbCBnZXRfb3B0aW9uX3N0YXRlIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKiwgaW50LAorCQkJICAgICAgc3RydWN0IGNsX29wdGlvbl9zdGF0ZSAqKTsKK2V4dGVybiB2b2lkIHNldF9vcHRpb24gKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywKKwkJCXN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0c19zZXQsCisJCQlpbnQgb3B0X2luZGV4LCBpbnQgdmFsdWUsIGNvbnN0IGNoYXIgKmFyZywgaW50IGtpbmQsCisJCQlsb2NhdGlvbl90IGxvYywgZGlhZ25vc3RpY19jb250ZXh0ICpkYyk7CitleHRlcm4gdm9pZCAqb3B0aW9uX2ZsYWdfdmFyIChpbnQgb3B0X2luZGV4LCBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMpOworYm9vbCBoYW5kbGVfZ2VuZXJhdGVkX29wdGlvbiAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzLAorCQkJICAgICAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwKKwkJCSAgICAgIHNpemVfdCBvcHRfaW5kZXgsIGNvbnN0IGNoYXIgKmFyZywgaW50IHZhbHVlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywgaW50IGtpbmQsIGxvY2F0aW9uX3QgbG9jLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNsX29wdGlvbl9oYW5kbGVycyAqaGFuZGxlcnMsCisJCQkgICAgICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsKK3ZvaWQgZ2VuZXJhdGVfb3B0aW9uIChzaXplX3Qgb3B0X2luZGV4LCBjb25zdCBjaGFyICphcmcsIGludCB2YWx1ZSwKKwkJICAgICAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywKKwkJICAgICAgc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICpkZWNvZGVkKTsKK3ZvaWQgZ2VuZXJhdGVfb3B0aW9uX2lucHV0X2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGUsCisJCQkJIHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqZGVjb2RlZCk7CitleHRlcm4gdm9pZCByZWFkX2NtZGxpbmVfb3B0aW9uIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMsCisJCQkJIHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0c19zZXQsCisJCQkJIHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqZGVjb2RlZCwKKwkJCQkgbG9jYXRpb25fdCBsb2MsCisJCQkJIHVuc2lnbmVkIGludCBsYW5nX21hc2ssCisJCQkJIGNvbnN0IHN0cnVjdCBjbF9vcHRpb25faGFuZGxlcnMgKmhhbmRsZXJzLAorCQkJCSBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsKK2V4dGVybiB2b2lkIGNvbnRyb2xfd2FybmluZ19vcHRpb24gKHVuc2lnbmVkIGludCBvcHRfaW5kZXgsIGludCBraW5kLAorCQkJCSAgICBib29sIGltcGx5LCBsb2NhdGlvbl90IGxvYywKKwkJCQkgICAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNsX29wdGlvbl9oYW5kbGVycyAqaGFuZGxlcnMsCisJCQkJICAgIHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywKKwkJCQkgICAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwKKwkJCQkgICAgZGlhZ25vc3RpY19jb250ZXh0ICpkYyk7CitleHRlcm4gdm9pZCBwcmludF9pZ25vcmVkX29wdGlvbnMgKHZvaWQpOworZXh0ZXJuIHZvaWQgaGFuZGxlX2NvbW1vbl9kZWZlcnJlZF9vcHRpb25zICh2b2lkKTsKK2V4dGVybiBib29sIGNvbW1vbl9oYW5kbGVfb3B0aW9uIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMsCisJCQkJICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LAorCQkJCSAgY29uc3Qgc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICpkZWNvZGVkLAorCQkJCSAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywgaW50IGtpbmQsCisJCQkJICBsb2NhdGlvbl90IGxvYywKKwkJCQkgIGNvbnN0IHN0cnVjdCBjbF9vcHRpb25faGFuZGxlcnMgKmhhbmRsZXJzLAorCQkJCSAgZGlhZ25vc3RpY19jb250ZXh0ICpkYyk7CitleHRlcm4gYm9vbCB0YXJnZXRfaGFuZGxlX29wdGlvbiAoc3RydWN0IGdjY19vcHRpb25zICpvcHRzLAorCQkJCSAgc3RydWN0IGdjY19vcHRpb25zICpvcHRzX3NldCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqZGVjb2RlZCwKKwkJCQkgIHVuc2lnbmVkIGludCBsYW5nX21hc2ssIGludCBraW5kLAorCQkJCSAgbG9jYXRpb25fdCBsb2MsCisJCQkJICBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJzICpoYW5kbGVycywKKwkJCQkgIGRpYWdub3N0aWNfY29udGV4dCAqZGMpOworZXh0ZXJuIHZvaWQgZmluaXNoX29wdGlvbnMgKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywKKwkJCSAgICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LAorCQkJICAgIGxvY2F0aW9uX3QgbG9jKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfb3B0aW9uc19vcHRpbWl6YXRpb24gKHN0cnVjdCBnY2Nfb3B0aW9ucyAqb3B0cywKKwkJCQkJICBzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHNfc2V0LAorCQkJCQkgIHN0cnVjdCBjbF9kZWNvZGVkX29wdGlvbiAqZGVjb2RlZF9vcHRpb25zLAorCQkJCQkgIHVuc2lnbmVkIGludCBkZWNvZGVkX29wdGlvbnNfY291bnQsCisJCQkJCSAgbG9jYXRpb25fdCBsb2MsCisJCQkJCSAgdW5zaWduZWQgaW50IGxhbmdfbWFzaywKKwkJCQkJICBjb25zdCBzdHJ1Y3QgY2xfb3B0aW9uX2hhbmRsZXJzICpoYW5kbGVycywKKwkJCQkJICBkaWFnbm9zdGljX2NvbnRleHQgKmRjKTsKK2V4dGVybiB2b2lkIHNldF9zdHJ1Y3RfZGVidWdfb3B0aW9uIChzdHJ1Y3QgZ2NjX29wdGlvbnMgKm9wdHMsCisJCQkJICAgICBsb2NhdGlvbl90IGxvYywKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2V4dGVybiBib29sIG9wdF9lbnVtX2FyZ190b192YWx1ZSAoc2l6ZV90IG9wdF9pbmRleCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgIGludCAqdmFsdWUsIHVuc2lnbmVkIGludCBsYW5nX21hc2spOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvb3V0cHV0LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvb3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0OGRmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9vdXRwdXQuaApAQCAtMCwwICsxLDYxNCBAQAorLyogRGVjbGFyYXRpb25zIGZvciBpbnNuLW91dHB1dC5jIGFuZCBvdGhlciBjb2RlIHRvIHdyaXRlIHRvIGFzbV9vdXRfZmlsZS4KKyAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBmaW5hbC5jLCBhbmQgdmFyYXNtLmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX09VVFBVVF9ICisjZGVmaW5lIEdDQ19PVVRQVVRfSAorCisvKiBJbml0aWFsaXplIGRhdGEgaW4gZmluYWwgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNvbXBpbGF0aW9uLiAgKi8KK2V4dGVybiB2b2lkIGluaXRfZmluYWwgKGNvbnN0IGNoYXIgKik7CisKKy8qIEVuYWJsZSBBUFAgcHJvY2Vzc2luZyBvZiBzdWJzZXF1ZW50IG91dHB1dC4KKyAgIFVzZWQgYmVmb3JlIHRoZSBvdXRwdXQgZnJvbSBhbiBgYXNtJyBzdGF0ZW1lbnQuICAqLworZXh0ZXJuIHZvaWQgYXBwX2VuYWJsZSAodm9pZCk7CisKKy8qIERpc2FibGUgQVBQIHByb2Nlc3Npbmcgb2Ygc3Vic2VxdWVudCBvdXRwdXQuCisgICBDYWxsZWQgZnJvbSB2YXJhc20uYyBiZWZvcmUgbW9zdCBraW5kcyBvZiBvdXRwdXQuICAqLworZXh0ZXJuIHZvaWQgYXBwX2Rpc2FibGUgKHZvaWQpOworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzbG90cyBmaWxsZWQgaW4gdGhlIGN1cnJlbnQKKyAgIGRlbGF5ZWQgYnJhbmNoIHNlcXVlbmNlICh3ZSBkb24ndCBjb3VudCB0aGUgaW5zbiBuZWVkaW5nIHRoZQorICAgZGVsYXkgc2xvdCkuICAgWmVybyBpZiBub3QgaW4gYSBkZWxheWVkIGJyYW5jaCBzZXF1ZW5jZS4gICovCitleHRlcm4gaW50IGRicl9zZXF1ZW5jZV9sZW5ndGggKHZvaWQpOworCisvKiBJbmRpY2F0ZSB0aGF0IGJyYW5jaCBzaG9ydGVuaW5nIGhhc24ndCB5ZXQgYmVlbiBkb25lLiAgKi8KK2V4dGVybiB2b2lkIGluaXRfaW5zbl9sZW5ndGhzICh2b2lkKTsKKworLyogT2J0YWluIHRoZSBjdXJyZW50IGxlbmd0aCBvZiBhbiBpbnNuLiAgSWYgYnJhbmNoIHNob3J0ZW5pbmcgaGFzIGJlZW4gZG9uZSwKKyAgIGdldCBpdHMgYWN0dWFsIGxlbmd0aC4gIE90aGVyd2lzZSwgZ2V0IGl0cyBtYXhpbXVtIGxlbmd0aC4gICovCitleHRlcm4gaW50IGdldF9hdHRyX2xlbmd0aCAocnR4KTsKKworLyogT2J0YWluIHRoZSBjdXJyZW50IGxlbmd0aCBvZiBhbiBpbnNuLiAgSWYgYnJhbmNoIHNob3J0ZW5pbmcgaGFzIGJlZW4gZG9uZSwKKyAgIGdldCBpdHMgYWN0dWFsIGxlbmd0aC4gIE90aGVyd2lzZSwgZ2V0IGl0cyBtaW5pbXVtIGxlbmd0aC4gICovCitleHRlcm4gaW50IGdldF9hdHRyX21pbl9sZW5ndGggKHJ0eCk7CisKKy8qIE1ha2UgYSBwYXNzIG92ZXIgYWxsIGluc25zIGFuZCBjb21wdXRlIHRoZWlyIGFjdHVhbCBsZW5ndGhzIGJ5IHNob3J0ZW5pbmcKKyAgIGFueSBicmFuY2hlcyBvZiB2YXJpYWJsZSBsZW5ndGggaWYgcG9zc2libGUuICAqLworZXh0ZXJuIHZvaWQgc2hvcnRlbl9icmFuY2hlcyAocnR4KTsKKworLyogT3V0cHV0IGFzc2VtYmxlciBjb2RlIGZvciB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiwKKyAgIGFuZCBpbml0aWFsaXplIHNvbWUgb2YgdGhlIHZhcmlhYmxlcyBpbiB0aGlzIGZpbGUKKyAgIGZvciB0aGUgbmV3IGZ1bmN0aW9uLiAgVGhlIGxhYmVsIGZvciB0aGUgZnVuY3Rpb24gYW5kIGFzc29jaWF0ZWQKKyAgIGFzc2VtYmxlciBwc2V1ZG8tb3BzIGhhdmUgYWxyZWFkeSBiZWVuIG91dHB1dCBpbgorICAgYGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uJy4gICovCitleHRlcm4gdm9pZCBmaW5hbF9zdGFydF9mdW5jdGlvbiAocnR4LCBGSUxFICosIGludCk7CisKKy8qIE91dHB1dCBhc3NlbWJsZXIgY29kZSBmb3IgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uLgorICAgRm9yIGNsYXJpdHksIGFyZ3MgYXJlIHNhbWUgYXMgdGhvc2Ugb2YgYGZpbmFsX3N0YXJ0X2Z1bmN0aW9uJworICAgZXZlbiB0aG91Z2ggbm90IGFsbCBvZiB0aGVtIGFyZSBuZWVkZWQuICAqLworZXh0ZXJuIHZvaWQgZmluYWxfZW5kX2Z1bmN0aW9uICh2b2lkKTsKKworLyogT3V0cHV0IGFzc2VtYmxlciBjb2RlIGZvciBzb21lIGluc25zOiBhbGwgb3IgcGFydCBvZiBhIGZ1bmN0aW9uLiAgKi8KK2V4dGVybiB2b2lkIGZpbmFsIChydHgsIEZJTEUgKiwgaW50KTsKKworLyogVGhlIGZpbmFsIHNjYW4gZm9yIG9uZSBpbnNuLCBJTlNOLiAgQXJncyBhcmUgc2FtZSBhcyBpbiBgZmluYWwnLCBleGNlcHQKKyAgIHRoYXQgSU5TTiBpcyB0aGUgaW5zbiBiZWluZyBzY2FubmVkLiAgVmFsdWUgcmV0dXJuZWQgaXMgdGhlIG5leHQgaW5zbiB0bworICAgYmUgc2Nhbm5lZC4gICovCitleHRlcm4gcnR4IGZpbmFsX3NjYW5faW5zbiAocnR4LCBGSUxFICosIGludCwgaW50LCBpbnQgKik7CisKKy8qIFJlcGxhY2UgYSBTVUJSRUcgd2l0aCBhIFJFRyBvciBhIE1FTSwgYmFzZWQgb24gdGhlIHRoaW5nIGl0IGlzIGEKKyAgIHN1YnJlZyBvZi4gICovCitleHRlcm4gcnR4IGFsdGVyX3N1YnJlZyAocnR4ICosIGJvb2wpOworCisvKiBQcmludCBhbiBvcGVyYW5kIHVzaW5nIG1hY2hpbmUtZGVwZW5kZW50IGFzc2VtYmxlciBzeW50YXguICAqLworZXh0ZXJuIHZvaWQgb3V0cHV0X29wZXJhbmQgKHJ0eCwgaW50KTsKKworLyogUmVwb3J0IGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgYXNzZW1ibGVyIHRlbXBsYXRlIGFuZCB0aGUgb3BlcmFuZHMuCisgICBJbiBhbiBgYXNtJywgaXQncyB0aGUgdXNlcidzIGZhdWx0OyBvdGhlcndpc2UsIHRoZSBjb21waWxlcidzIGZhdWx0LiAgKi8KK2V4dGVybiB2b2lkIG91dHB1dF9vcGVyYW5kX2xvc3NhZ2UgKGNvbnN0IGNoYXIgKiwgLi4uKSBBVFRSSUJVVEVfUFJJTlRGXzE7CisKKy8qIE91dHB1dCBhIHN0cmluZyBvZiBhc3NlbWJsZXIgY29kZSwgc3Vic3RpdHV0aW5nIGluc24gb3BlcmFuZHMuCisgICBEZWZpbmVkIGluIGZpbmFsLmMuICAqLworZXh0ZXJuIHZvaWQgb3V0cHV0X2FzbV9pbnNuIChjb25zdCBjaGFyICosIHJ0eCAqKTsKKworLyogQ29tcHV0ZSBhIHdvcnN0LWNhc2UgcmVmZXJlbmNlIGFkZHJlc3Mgb2YgYSBicmFuY2ggc28gdGhhdCBpdAorICAgY2FuIGJlIHNhZmVseSB1c2VkIGluIHRoZSBwcmVzZW5jZSBvZiBhbGlnbmVkIGxhYmVscy4KKyAgIERlZmluZWQgaW4gZmluYWwuYy4gICovCitleHRlcm4gaW50IGluc25fY3VycmVudF9yZWZlcmVuY2VfYWRkcmVzcyAocnR4KTsKKworLyogRmluZCB0aGUgYWxpZ25tZW50IGFzc29jaWF0ZWQgd2l0aCBhIENPREVfTEFCRUwuCisgICBEZWZpbmVkIGluIGZpbmFsLmMuICAqLworZXh0ZXJuIGludCBsYWJlbF90b19hbGlnbm1lbnQgKHJ0eCk7CisKKy8qIEZpbmQgdGhlIGFsaWdubWVudCBtYXhpbXVtIHNraXAgYXNzb2NpYXRlZCB3aXRoIGEgQ09ERV9MQUJFTC4KKyAgIERlZmluZWQgaW4gZmluYWwuYy4gICovCitleHRlcm4gaW50IGxhYmVsX3RvX21heF9za2lwIChydHgpOworCisvKiBPdXRwdXQgYSBMQUJFTF9SRUYsIG9yIGEgYmFyZSBDT0RFX0xBQkVMLCBhcyBhbiBhc3NlbWJsZXIgc3ltYm9sLiAgKi8KK2V4dGVybiB2b2lkIG91dHB1dF9hc21fbGFiZWwgKHJ0eCk7CisKKy8qIE1hcmtzIFNZTUJPTF9SRUZzIGluIHggYXMgcmVmZXJlbmNlZCB0aHJvdWdoIHVzZSBvZiBhc3NlbWJsZV9leHRlcm5hbC4gICovCitleHRlcm4gdm9pZCBtYXJrX3N5bWJvbF9yZWZzX2FzX3VzZWQgKHJ0eCk7CisKKy8qIFByaW50IGEgbWVtb3J5IHJlZmVyZW5jZSBvcGVyYW5kIGZvciBhZGRyZXNzIFgKKyAgIHVzaW5nIG1hY2hpbmUtZGVwZW5kZW50IGFzc2VtYmxlciBzeW50YXguICAqLworZXh0ZXJuIHZvaWQgb3V0cHV0X2FkZHJlc3MgKHJ0eCk7CisKKy8qIFByaW50IGFuIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbiBpbiBhc3NlbWJsZXIgc3ludGF4LgorICAgQWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIGFyZSB0aGUgb25seSBhcml0aG1ldGljCisgICB0aGF0IG1heSBhcHBlYXIgaW4gdGhlc2UgZXhwcmVzc2lvbnMuICAqLworZXh0ZXJuIHZvaWQgb3V0cHV0X2FkZHJfY29uc3QgKEZJTEUgKiwgcnR4KTsKKworLyogT3V0cHV0IGEgc3RyaW5nIG9mIGFzc2VtYmxlciBjb2RlLCBzdWJzdGl0dXRpbmcgbnVtYmVycywgc3RyaW5ncworICAgYW5kIGZpeGVkIHN5bnRhY3RpYyBwcmVmaXhlcy4gICovCisjaWYgR0NDX1ZFUlNJT04gPj0gMzAwNAorI2RlZmluZSBBVFRSSUJVVEVfQVNNX0ZQUklOVEYobSwgbikgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fYXNtX2ZwcmludGZfXywgbSwgbikpKSBBVFRSSUJVVEVfTk9OTlVMTChtKQorI2Vsc2UKKyNkZWZpbmUgQVRUUklCVVRFX0FTTV9GUFJJTlRGKG0sIG4pIEFUVFJJQlVURV9OT05OVUxMKG0pCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgZnByaW50X3doZXggKEZJTEUgKiwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gdm9pZCBmcHJpbnRfdWwgKEZJTEUgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IHNwcmludF91bCAoY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIHZvaWQgYXNtX2ZwcmludGYgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnAsIC4uLikKKyAgICAgQVRUUklCVVRFX0FTTV9GUFJJTlRGKDIsIDMpOworCisvKiBSZXR1cm4gbm9uemVybyBpZiB0aGlzIGZ1bmN0aW9uIGhhcyBubyBmdW5jdGlvbiBjYWxscy4gICovCitleHRlcm4gaW50IGxlYWZfZnVuY3Rpb25fcCAodm9pZCk7CisKKy8qIFJldHVybiAxIGlmIGJyYW5jaCBpcyBhIGZvcndhcmQgYnJhbmNoLgorICAgVXNlcyBpbnNuX3NodWlkIGFycmF5LCBzbyBpdCB3b3JrcyBvbmx5IGluIHRoZSBmaW5hbCBwYXNzLiAgTWF5IGJlIHVzZWQgYnkKKyAgIG91dHB1dCB0ZW1wbGF0ZXMgdG8gYWRkIGJyYW5jaCBwcmVkaWN0aW9uIGhpbnRzLCBmb3IgZXhhbXBsZS4gICovCitleHRlcm4gaW50IGZpbmFsX2ZvcndhcmRfYnJhbmNoX3AgKHJ0eCk7CisKKy8qIFJldHVybiAxIGlmIHRoaXMgZnVuY3Rpb24gdXNlcyBvbmx5IHRoZSByZWdpc3RlcnMgdGhhdCBjYW4gYmUKKyAgIHNhZmVseSByZW51bWJlcmVkLiAgKi8KK2V4dGVybiBpbnQgb25seV9sZWFmX3JlZ3NfdXNlZCAodm9pZCk7CisKKy8qIFNjYW4gSU5fUlRYIGFuZCBpdHMgc3ViZXhwcmVzc2lvbnMsIGFuZCByZW51bWJlciBhbGwgcmVncyBpbnRvIHRob3NlCisgICBhdmFpbGFibGUgaW4gbGVhZiBmdW5jdGlvbnMuICAqLworZXh0ZXJuIHZvaWQgbGVhZl9yZW51bWJlcl9yZWdzX2luc24gKHJ0eCk7CisKKy8qIExvY2F0ZSB0aGUgcHJvcGVyIHRlbXBsYXRlIGZvciB0aGUgZ2l2ZW4gaW5zbi1jb2RlLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICpnZXRfaW5zbl90ZW1wbGF0ZSAoaW50LCBydHgpOworCisvKiBGdW5jdGlvbnMgaW4gdmFyYXNtLmMuICAqLworCisvKiBFbWl0IGFueSBwZW5kaW5nIHdlYWsgZGVjbGFyYXRpb25zLiAgKi8KK2V4dGVybiB2b2lkIHdlYWtfZmluaXNoICh2b2lkKTsKKworLyogRGVjb2RlIGFuIGBhc20nIHNwZWMgZm9yIGEgZGVjbGFyYXRpb24gYXMgYSByZWdpc3RlciBuYW1lLgorICAgUmV0dXJuIHRoZSByZWdpc3RlciBudW1iZXIsIG9yIC0xIGlmIG5vdGhpbmcgc3BlY2lmaWVkLAorICAgb3IgLTIgaWYgdGhlIEFTTVNQRUMgaXMgbm90IGBjYycgb3IgYG1lbW9yeScgYW5kIGlzIG5vdCByZWNvZ25pemVkLAorICAgb3IgLTMgaWYgQVNNU1BFQyBpcyBgY2MnIGFuZCBpcyBub3QgcmVjb2duaXplZCwKKyAgIG9yIC00IGlmIEFTTVNQRUMgaXMgYG1lbW9yeScgYW5kIGlzIG5vdCByZWNvZ25pemVkLgorICAgQWNjZXB0IGFuIGV4YWN0IHNwZWxsaW5nIG9yIGEgZGVjaW1hbCBudW1iZXIuCisgICBQcmVmaXhlcyBzdWNoIGFzICUgYXJlIG9wdGlvbmFsLiAgKi8KK2V4dGVybiBpbnQgZGVjb2RlX3JlZ19uYW1lIChjb25zdCBjaGFyICopOworCisvKiBTaW1pbGFyIHRvIGRlY29kZV9yZWdfbmFtZSwgYnV0IHRha2VzIGFuIGV4dHJhIHBhcmFtZXRlciB0aGF0IGlzIGEKKyAgIHBvaW50ZXIgdG8gdGhlIG51bWJlciBvZiAoaW50ZXJuYWwpIHJlZ2lzdGVycyBkZXNjcmliZWQgYnkgdGhlCisgICBleHRlcm5hbCBuYW1lLiAgKi8KK2V4dGVybiBpbnQgZGVjb2RlX3JlZ19uYW1lX2FuZF9jb3VudCAoY29uc3QgY2hhciAqLCBpbnQgKik7CisKK2V4dGVybiB2b2lkIGRvX2Fzc2VtYmxlX2FsaWFzICh0cmVlLCB0cmVlKTsKKworZXh0ZXJuIHZvaWQgZGVmYXVsdF9hc3NlbWJsZV92aXNpYmlsaXR5ICh0cmVlLCBpbnQpOworCisvKiBPdXRwdXQgYSBzdHJpbmcgb2YgbGl0ZXJhbCBhc3NlbWJsZXIgY29kZQorICAgZm9yIGFuIGBhc20nIGtleXdvcmQgdXNlZCBiZXR3ZWVuIGZ1bmN0aW9ucy4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV9hc20gKHRyZWUpOworCisvKiBPdXRwdXQgYXNzZW1ibGVyIGNvZGUgZm9yIHRoZSBjb25zdGFudCBwb29sIG9mIGEgZnVuY3Rpb24gYW5kIGFzc29jaWF0ZWQKKyAgIHdpdGggZGVmaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLiAgREVDTCBkZXNjcmliZXMgdGhlIGZ1bmN0aW9uLgorICAgTkFNRSBpcyB0aGUgZnVuY3Rpb24ncyBuYW1lLiAgRm9yIHRoZSBjb25zdGFudCBwb29sLCB3ZSB1c2UgdGhlIGN1cnJlbnQKKyAgIGNvbnN0YW50IHBvb2wgZGF0YS4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV9zdGFydF9mdW5jdGlvbiAodHJlZSwgY29uc3QgY2hhciAqKTsKKworLyogT3V0cHV0IGFzc2VtYmxlciBjb2RlIGFzc29jaWF0ZWQgd2l0aCBkZWZpbmluZyB0aGUgc2l6ZSBvZiB0aGUKKyAgIGZ1bmN0aW9uLiAgREVDTCBkZXNjcmliZXMgdGhlIGZ1bmN0aW9uLiAgTkFNRSBpcyB0aGUgZnVuY3Rpb24ncyBuYW1lLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2VuZF9mdW5jdGlvbiAodHJlZSwgY29uc3QgY2hhciAqKTsKKworLyogQXNzZW1ibGUgZXZlcnl0aGluZyB0aGF0IGlzIG5lZWRlZCBmb3IgYSB2YXJpYWJsZSBvciBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAgIE5vdCB1c2VkIGZvciBhdXRvbWF0aWMgdmFyaWFibGVzLCBhbmQgbm90IHVzZWQgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb25zLgorICAgU2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIHZhcmlhYmxlcyBvZiBpbmNvbXBsZXRlIHN0cnVjdHVyZSB0eXBlLgorCisgICBUT1BfTEVWRUwgaXMgbm9uemVybyBpZiB0aGlzIHZhcmlhYmxlIGhhcyBmaWxlIHNjb3BlLgorICAgQVRfRU5EIGlzIG5vbnplcm8gaWYgdGhpcyBpcyB0aGUgc3BlY2lhbCBoYW5kbGluZywgYXQgZW5kIG9mIGNvbXBpbGF0aW9uLAorICAgdG8gZGVmaW5lIHRoaW5ncyB0aGF0IGhhdmUgaGFkIG9ubHkgdGVudGF0aXZlIGRlZmluaXRpb25zLgorICAgRE9OVF9PVVRQVVRfREFUQSBpZiBub256ZXJvIG1lYW5zIGRvbid0IGFjdHVhbGx5IG91dHB1dCB0aGUKKyAgIGluaXRpYWwgdmFsdWUgKHRoYXQgd2lsbCBiZSBkb25lIGJ5IHRoZSBjYWxsZXIpLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX3ZhcmlhYmxlICh0cmVlLCBpbnQsIGludCwgaW50KTsKKworLyogQ29tcHV0ZSB0aGUgYWxpZ25tZW50IG9mIHZhcmlhYmxlIHNwZWNpZmllZCBieSBERUNMLgorICAgRE9OVF9PVVRQVVRfREFUQSBpcyBmcm9tIGFzc2VtYmxlX3ZhcmlhYmxlLiAgKi8KK2V4dGVybiB2b2lkIGFsaWduX3ZhcmlhYmxlICh0cmVlIGRlY2wsIGJvb2wgZG9udF9vdXRwdXRfZGF0YSk7CisKKy8qIFF1ZXVlIGZvciBvdXRwdXR0aW5nIHNvbWV0aGluZyB0byBkZWNsYXJlIGFuIGV4dGVybmFsIHN5bWJvbCB0byB0aGUKKyAgIGFzc2VtYmxlci4gIChNb3N0IGFzc2VtYmxlcnMgZG9uJ3QgbmVlZCB0aGlzLCBzbyB3ZSBub3JtYWxseSBvdXRwdXQKKyAgIG5vdGhpbmcuKSAgRG8gbm90aGluZyBpZiBERUNMIGlzIG5vdCBleHRlcm5hbC4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV9leHRlcm5hbCAodHJlZSk7CisKKy8qIEFzc2VtYmxlIGNvZGUgdG8gbGVhdmUgU0laRSBieXRlcyBvZiB6ZXJvcy4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV96ZXJvcyAodW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CisKKy8qIEFzc2VtYmxlIGFuIGFsaWdubWVudCBwc2V1ZG8gb3AgZm9yIGFuIEFMSUdOLWJpdCBib3VuZGFyeS4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV9hbGlnbiAoaW50KTsKKworLyogQXNzZW1ibGUgYSBzdHJpbmcgY29uc3RhbnQgd2l0aCB0aGUgc3BlY2lmaWVkIEMgc3RyaW5nIGFzIGNvbnRlbnRzLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX3N0cmluZyAoY29uc3QgY2hhciAqLCBpbnQpOworCisvKiBTaW1pbGFyLCBmb3IgY2FsbGluZyBhIGxpYnJhcnkgZnVuY3Rpb24gRlVOLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2V4dGVybmFsX2xpYmNhbGwgKHJ0eCk7CisKKy8qIEFzc2VtYmxlIGEgbGFiZWwgbmFtZWQgTkFNRS4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV9sYWJlbCAoRklMRSAqLCBjb25zdCBjaGFyICopOworCisvKiBPdXRwdXQgdG8gRklMRSAoYW4gYXNzZW1ibHkgZmlsZSkgYSByZWZlcmVuY2UgdG8gTkFNRS4gIElmIE5BTUUKKyAgIHN0YXJ0cyB3aXRoIGEgKiwgdGhlIHJlc3Qgb2YgTkFNRSBpcyBvdXRwdXQgdmVyYmF0aW0uICBPdGhlcndpc2UKKyAgIE5BTUUgaXMgdHJhbnNmb3JtZWQgaW4gYSB0YXJnZXQtc3BlY2lmaWMgd2F5ICh1c3VhbGx5IGJ5IHRoZQorICAgYWRkaXRpb24gb2YgYW4gdW5kZXJzY29yZSkuICAqLworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfbmFtZV9yYXcgKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKKworLyogTGlrZSBhc3NlbWJsZV9uYW1lX3JhdywgYnV0IHNob3VsZCBiZSB1c2VkIHdoZW4gTkFNRSBtaWdodCByZWZlciB0bworICAgYW4gZW50aXR5IHRoYXQgaXMgYWxzbyByZXByZXNlbnRlZCBhcyBhIHRyZWUgKGxpa2UgYSBmdW5jdGlvbiBvcgorICAgdmFyaWFibGUpLiAgSWYgTkFNRSBkb2VzIHJlZmVyIHRvIHN1Y2ggYW4gZW50aXR5LCB0aGF0IGVudGl0eSB3aWxsCisgICBiZSBtYXJrZWQgYXMgcmVmZXJlbmNlZC4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV9uYW1lIChGSUxFICosIGNvbnN0IGNoYXIgKik7CisKKy8qIFJldHVybiB0aGUgYXNzZW1ibGVyIGRpcmVjdGl2ZSBmb3IgY3JlYXRpbmcgYSBnaXZlbiBraW5kIG9mIGludGVnZXIKKyAgIG9iamVjdC4gIFNJWkUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgb2JqZWN0IGFuZCBBTElHTkVEX1AKKyAgIGluZGljYXRlcyB3aGV0aGVyIGl0IGlzIGtub3duIHRvIGJlIGFsaWduZWQuICBSZXR1cm4gTlVMTCBpZiB0aGUKKyAgIGFzc2VtYmx5IGRpYWxlY3QgaGFzIG5vIHN1Y2ggZGlyZWN0aXZlLgorCisgICBUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3VsZCBiZSBwcmludGVkIGF0IHRoZSBzdGFydCBvZiBhIG5ldyBsaW5lIGFuZAorICAgYmUgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgdGhlIG9iamVjdCdzIGluaXRpYWwgdmFsdWUuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmludGVnZXJfYXNtX29wIChpbnQsIGludCk7CisKKy8qIFVzZSBkaXJlY3RpdmUgT1AgdG8gYXNzZW1ibGUgYW4gaW50ZWdlciBvYmplY3QgWC4gIFByaW50IE9QIGF0IHRoZQorICAgc3RhcnQgb2YgdGhlIGxpbmUsIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IHRoZSB2YWx1ZSBvZiBYLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2ludGVnZXJfd2l0aF9vcCAoY29uc3QgY2hhciAqLCBydHgpOworCisvKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYXNtX291dC5pbnRlZ2VyIHRhcmdldCBob29rLiAgKi8KK2V4dGVybiBib29sIGRlZmF1bHRfYXNzZW1ibGVfaW50ZWdlciAocnR4LCB1bnNpZ25lZCBpbnQsIGludCk7CisKKy8qIEFzc2VtYmxlIHRoZSBpbnRlZ2VyIGNvbnN0YW50IFggaW50byBhbiBvYmplY3Qgb2YgU0laRSBieXRlcy4gIEFMSUdOIGlzCisgICB0aGUgYWxpZ25tZW50IG9mIHRoZSBpbnRlZ2VyIGluIGJpdHMuICBSZXR1cm4gMSBpZiB3ZSB3ZXJlIGFibGUgdG8gb3V0cHV0CisgICB0aGUgY29uc3RhbnQsIG90aGVyd2lzZSAwLiAgSWYgRk9SQ0UgaXMgbm9uemVybyB0aGUgY29uc3RhbnQgbXVzdAorICAgYmUgb3V0cHV0YWJsZS4gKi8KK2V4dGVybiBib29sIGFzc2VtYmxlX2ludGVnZXIgKHJ0eCwgdW5zaWduZWQsIHVuc2lnbmVkLCBpbnQpOworCisvKiBSZXR1cm4gc2VjdGlvbiBmb3IgVEVYVF9TRUNJVE9OX05BTUUgaWYgREVDTCBvciBERUNMX1NFQ1RJT05fTkFNRSAoREVDTCkKKyAgIGlzIE5VTEwuICAqLworZXh0ZXJuIHNlY3Rpb24gKmdldF9uYW1lZF90ZXh0X3NlY3Rpb24gKHRyZWUsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyogQW4gaW50ZXJmYWNlIHRvIGFzc2VtYmxlX2ludGVnZXIgZm9yIHRoZSBjb21tb24gY2FzZSBpbiB3aGljaCBhIHZhbHVlIGlzCisgICBmdWxseSBhbGlnbmVkIGFuZCBtdXN0IGJlIHByaW50ZWQuICBWQUxVRSBpcyB0aGUgdmFsdWUgb2YgdGhlIGludGVnZXIKKyAgIG9iamVjdCBhbmQgU0laRSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGl0IGNvbnRhaW5zLiAgKi8KKyNkZWZpbmUgYXNzZW1ibGVfYWxpZ25lZF9pbnRlZ2VyKFNJWkUsIFZBTFVFKSBcCisgIGFzc2VtYmxlX2ludGVnZXIgKFZBTFVFLCBTSVpFLCAoU0laRSkgKiBCSVRTX1BFUl9VTklULCAxKQorCisjaWZkZWYgUkVBTF9WQUxVRV9UWVBFX1NJWkUKKy8qIEFzc2VtYmxlIHRoZSBmbG9hdGluZy1wb2ludCBjb25zdGFudCBEIGludG8gYW4gb2JqZWN0IG9mIHNpemUgTU9ERS4gICovCitleHRlcm4gdm9pZCBhc3NlbWJsZV9yZWFsIChSRUFMX1ZBTFVFX1RZUEUsIGVudW0gbWFjaGluZV9tb2RlLCB1bnNpZ25lZCk7CisjZW5kaWYKKworLyogV3JpdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIGVudGl0eSBnaXZlbiBieSBTWU1CT0wgdG8gU0VDLiAgKi8KK2V4dGVybiB2b2lkIGFzc2VtYmxlX2FkZHJfdG9fc2VjdGlvbiAocnR4LCBzZWN0aW9uICopOworCisvKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIGNvbnN0YW50IHBvb2wuICAqLworZXh0ZXJuIGludCBnZXRfcG9vbF9zaXplICh2b2lkKTsKKworI2lmZGVmIEhBVkVfcGVlcGhvbGUKK2V4dGVybiBydHggcGVlcGhvbGUgKHJ0eCk7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgb3V0cHV0X3NoYXJlZF9jb25zdGFudF9wb29sICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgb3V0cHV0X29iamVjdF9ibG9ja3MgKHZvaWQpOworCitleHRlcm4gdm9pZCBvdXRwdXRfcXVvdGVkX3N0cmluZyAoRklMRSAqLCBjb25zdCBjaGFyICopOworCisvKiBPdXRwdXQgYXNzZW1ibGVyIGNvZGUgZm9yIGNvbnN0YW50IEVYUCB0byBGSUxFLCB3aXRoIG5vIGxhYmVsLgorICAgVGhpcyBpbmNsdWRlcyB0aGUgcHNldWRvLW9wIHN1Y2ggYXMgIi5pbnQiIG9yICIuYnl0ZSIsIGFuZCBhIG5ld2xpbmUuCisgICBBc3N1bWVzIG91dHB1dF9hZGRyZXNzZWRfY29uc3RhbnRzIGhhcyBiZWVuIGRvbmUgb24gRVhQIGFscmVhZHkuCisKKyAgIEdlbmVyYXRlIGV4YWN0bHkgU0laRSBieXRlcyBvZiBhc3NlbWJsZXIgZGF0YSwgcGFkZGluZyBhdCB0aGUgZW5kCisgICB3aXRoIHplcm9zIGlmIG5lY2Vzc2FyeS4gIFNJWkUgbXVzdCBhbHdheXMgYmUgc3BlY2lmaWVkLgorCisgICBBTElHTiBpcyB0aGUgYWxpZ25tZW50IGluIGJpdHMgdGhhdCBtYXkgYmUgYXNzdW1lZCBmb3IgdGhlIGRhdGEuICAqLworZXh0ZXJuIHZvaWQgb3V0cHV0X2NvbnN0YW50ICh0cmVlLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCB1bnNpZ25lZCBpbnQpOworCisvKiBXaGVuIG91dHB1dHRpbmcgZGVsYXllZCBicmFuY2ggc2VxdWVuY2VzLCB0aGlzIHJ0eCBob2xkcyB0aGUKKyAgIHNlcXVlbmNlIGJlaW5nIG91dHB1dC4gIEl0IGlzIG51bGwgd2hlbiBubyBkZWxheWVkIGJyYW5jaAorICAgc2VxdWVuY2UgaXMgYmVpbmcgb3V0cHV0LCBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhIHRlc3QgaW4gdGhlCisgICBpbnNuIG91dHB1dCBjb2RlLgorCisgICBUaGlzIHZhcmlhYmxlIGlzIGRlZmluZWQgIGluIGZpbmFsLmMuICAqLworZXh0ZXJuIHJ0eCBmaW5hbF9zZXF1ZW5jZTsKKworLyogVGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBWYXJpb3VzCisgICBtZCBjb2RlIG5lZWRzIHRoaXMgc28gdGhhdCBpdCBjYW4gb3V0cHV0IHJlbGF0aXZlIGxpbmVudW1iZXJzLiAgKi8KKworI2lmZGVmIFNEQl9ERUJVR0dJTkdfSU5GTyAvKiBBdm9pZCB1bmRlZiBzeW0gaW4gY2VydGFpbiBicm9rZW4gbGlua2Vycy4gICovCitleHRlcm4gaW50IHNkYl9iZWdpbl9mdW5jdGlvbl9saW5lOworI2VuZGlmCisKKy8qIEZpbGUgaW4gd2hpY2ggYXNzZW1ibGVyIGNvZGUgaXMgYmVpbmcgd3JpdHRlbi4gICovCisKKyNpZmRlZiBCVUZTSVoKK2V4dGVybiBGSUxFICphc21fb3V0X2ZpbGU7CisjZW5kaWYKKworLyogVGhlIGZpcnN0IGdsb2JhbCBvYmplY3QgaW4gdGhlIGZpbGUuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmZpcnN0X2dsb2JhbF9vYmplY3RfbmFtZTsKKworLyogVGhlIGZpcnN0IHdlYWsgb2JqZWN0IGluIHRoZSBmaWxlLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICp3ZWFrX2dsb2JhbF9vYmplY3RfbmFtZTsKKworLyogTm9ubnVsbCBpZiB0aGUgaW5zbiBjdXJyZW50bHkgYmVpbmcgZW1pdHRlZCB3YXMgYSBDT05EX0VYRUMgcGF0dGVybi4gICovCitleHRlcm4gcnR4IGN1cnJlbnRfaW5zbl9wcmVkaWNhdGU7CisKKy8qIExhc3QgaW5zbiBwcm9jZXNzZWQgYnkgZmluYWxfc2Nhbl9pbnNuLiAgKi8KK2V4dGVybiBydHggY3VycmVudF9vdXRwdXRfaW5zbjsKKworLyogTm9uemVybyB3aGlsZSBvdXRwdXR0aW5nIGFuIGBhc20nIHdpdGggb3BlcmFuZHMuCisgICBUaGlzIG1lYW5zIHRoYXQgaW5jb25zaXN0ZW5jaWVzIGFyZSB0aGUgdXNlcidzIGZhdWx0LCBzbyBkb24ndCBkaWUuCisgICBUaGUgcHJlY2lzZSB2YWx1ZSBpcyB0aGUgaW5zbiBiZWluZyBvdXRwdXQsIHRvIHBhc3MgdG8gZXJyb3JfZm9yX2FzbS4gICovCitleHRlcm4gcnR4IHRoaXNfaXNfYXNtX29wZXJhbmRzOworCisvKiBDYXJyeSBpbmZvcm1hdGlvbiBmcm9tIEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FCisgICB0byBBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNULiAgKi8KK2V4dGVybiBpbnQgc2l6ZV9kaXJlY3RpdmVfb3V0cHV0OworZXh0ZXJuIHRyZWUgbGFzdF9hc3NlbWJsZV92YXJpYWJsZV9kZWNsOworCitleHRlcm4gYm9vbCBmaXJzdF9mdW5jdGlvbl9ibG9ja19pc19jb2xkOworCisvKiBEZWNpZGUgd2hldGhlciBERUNMIG5lZWRzIHRvIGJlIGluIGEgd3JpdGFibGUgc2VjdGlvbi4KKyAgIFJFTE9DIGlzIHRoZSBzYW1lIGFzIGZvciBTRUxFQ1RfU0VDVElPTi4gICovCitleHRlcm4gYm9vbCBkZWNsX3JlYWRvbmx5X3NlY3Rpb24gKGNvbnN0X3RyZWUsIGludCk7CisKKy8qIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSBSRUxPQyBmb3IgdGhlIGZ1bmN0aW9uIGFib3ZlLCB3aGVuCisgICBnaXZlbiBhIGNvbnN0YW50IGV4cHJlc3Npb24uICAqLworZXh0ZXJuIGludCBjb21wdXRlX3JlbG9jX2Zvcl9jb25zdGFudCAodHJlZSk7CisKKy8qIFVzZXIgbGFiZWwgcHJlZml4IGluIGVmZmVjdCBmb3IgdGhpcyBjb21waWxhdGlvbi4gICovCitleHRlcm4gY29uc3QgY2hhciAqdXNlcl9sYWJlbF9wcmVmaXg7CisKKy8qIERlZmF1bHQgdGFyZ2V0IGZ1bmN0aW9uIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBhc3NlbWJsZXIgb3V0cHV0LiAgKi8KK2V4dGVybiB2b2lkIGRlZmF1bHRfZnVuY3Rpb25fcHJvX2VwaWxvZ3VlIChGSUxFICosIEhPU1RfV0lERV9JTlQpOworCisvKiBEZWZhdWx0IHRhcmdldCBmdW5jdGlvbiBzd2l0Y2hlZCB0ZXh0IHNlY3Rpb25zLiAgKi8KK2V4dGVybiB2b2lkIGRlZmF1bHRfZnVuY3Rpb25fc3dpdGNoZWRfdGV4dF9zZWN0aW9ucyAoRklMRSAqLCB0cmVlLCBib29sKTsKKworLyogRGVmYXVsdCB0YXJnZXQgaG9vayB0aGF0IG91dHB1dHMgbm90aGluZyB0byBhIHN0cmVhbS4gICovCitleHRlcm4gdm9pZCBub19hc21fdG9fc3RyZWFtIChGSUxFICopOworCisvKiBGbGFncyBjb250cm9sbGluZyBwcm9wZXJ0aWVzIG9mIGEgc2VjdGlvbi4gICovCisjZGVmaW5lIFNFQ1RJT05fRU5UU0laRQkgMHgwMDBmZgkvKiBlbnRpdHkgc2l6ZSBpbiBzZWN0aW9uICovCisjZGVmaW5lIFNFQ1RJT05fQ09ERQkgMHgwMDEwMAkvKiBjb250YWlucyBjb2RlICovCisjZGVmaW5lIFNFQ1RJT05fV1JJVEUJIDB4MDAyMDAJLyogZGF0YSBpcyB3cml0YWJsZSAqLworI2RlZmluZSBTRUNUSU9OX0RFQlVHCSAweDAwNDAwCS8qIGNvbnRhaW5zIGRlYnVnIGRhdGEgKi8KKyNkZWZpbmUgU0VDVElPTl9MSU5LT05DRSAweDAwODAwCS8qIGlzIGxpbmtvbmNlICovCisjZGVmaW5lIFNFQ1RJT05fU01BTEwJIDB4MDEwMDAJLyogY29udGFpbnMgInNtYWxsIGRhdGEiICovCisjZGVmaW5lIFNFQ1RJT05fQlNTCSAweDAyMDAwCS8qIGNvbnRhaW5zIHplcm9zIG9ubHkgKi8KKyNkZWZpbmUgU0VDVElPTl9GT1JHRVQJIDB4MDQwMDAJLyogZm9yZ2V0IHRoYXQgd2UndmUgZW50ZXJlZCB0aGUgc2VjdGlvbiAqLworI2RlZmluZSBTRUNUSU9OX01FUkdFCSAweDA4MDAwCS8qIGNvbnRhaW5zIG1lcmdlYWJsZSBkYXRhICovCisjZGVmaW5lIFNFQ1RJT05fU1RSSU5HUyAgMHgxMDAwMAkvKiBjb250YWlucyB6ZXJvIHRlcm1pbmF0ZWQgc3RyaW5ncyB3aXRob3V0CisJCQkJCSAgIGVtYmVkZGVkIHplcm9zICovCisjZGVmaW5lIFNFQ1RJT05fT1ZFUlJJREUgMHgyMDAwMAkvKiBhbGxvdyBvdmVycmlkZSBvZiBkZWZhdWx0IGZsYWdzICovCisjZGVmaW5lIFNFQ1RJT05fVExTCSAweDQwMDAwCS8qIGNvbnRhaW5zIHRocmVhZC1sb2NhbCBzdG9yYWdlICovCisjZGVmaW5lIFNFQ1RJT05fTk9UWVBFCSAweDgwMDAwCS8qIGRvbid0IG91dHB1dCBAcHJvZ2JpdHMgKi8KKyNkZWZpbmUgU0VDVElPTl9ERUNMQVJFRCAweDEwMDAwMAkvKiBzZWN0aW9uIGhhcyBiZWVuIHVzZWQgKi8KKyNkZWZpbmUgU0VDVElPTl9TVFlMRV9NQVNLIDB4NjAwMDAwCS8qIGJpdHMgdXNlZCBmb3IgU0VDVElPTl9TVFlMRSAqLworI2RlZmluZSBTRUNUSU9OX0NPTU1PTiAgIDB4ODAwMDAwCS8qIGNvbnRhaW5zIGNvbW1vbiBkYXRhICovCisjZGVmaW5lIFNFQ1RJT05fUkVMUk8JIDB4MTAwMDAwMAkvKiBkYXRhIGlzIHJlYWRvbmx5IGFmdGVyIHJlbG9jYXRpb24gcHJvY2Vzc2luZyAqLworI2RlZmluZSBTRUNUSU9OX0VYQ0xVREUgIDB4MjAwMDAwMAkvKiBkaXNjYXJkZWQgYnkgdGhlIGxpbmtlciAqLworI2RlZmluZSBTRUNUSU9OX01BQ0hfREVQIDB4NDAwMDAwMAkvKiBzdWJzZXF1ZW50IGJpdHMgcmVzZXJ2ZWQgZm9yIHRhcmdldCAqLworCisvKiBUaGlzIFNFQ1RJT05fU1RZTEUgaXMgdXNlZCBmb3IgdW5uYW1lZCBzZWN0aW9ucyB0aGF0IHdlIGNhbiBzd2l0Y2gKKyAgIHRvIHVzaW5nIGEgc3BlY2lhbCBhc3NlbWJsZXIgZGlyZWN0aXZlLiAgKi8KKyNkZWZpbmUgU0VDVElPTl9VTk5BTUVECSAweDAwMDAwMAorCisvKiBUaGlzIFNFQ1RJT05fU1RZTEUgaXMgdXNlZCBmb3IgbmFtZWQgc2VjdGlvbnMgdGhhdCB3ZSBjYW4gc3dpdGNoCisgICB0byB1c2luZyBhIGdlbmVyYWwgc2VjdGlvbiBkaXJlY3RpdmUuICAqLworI2RlZmluZSBTRUNUSU9OX05BTUVECSAweDIwMDAwMAorCisvKiBUaGlzIFNFQ1RJT05fU1RZTEUgaXMgdXNlZCBmb3Igc2VjdGlvbnMgdGhhdCB3ZSBjYW5ub3Qgc3dpdGNoIHRvIGF0CisgICBhbGwuICBUaGUgY2hvaWNlIG9mIHNlY3Rpb24gaXMgaW1wbGllZCBieSB0aGUgZGlyZWN0aXZlIHRoYXQgd2UgdXNlCisgICB0byBkZWNsYXJlIHRoZSBvYmplY3QuICAqLworI2RlZmluZSBTRUNUSU9OX05PU1dJVENIIDB4NDAwMDAwCisKKy8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBkZWZhdWx0X2VsZl9zZWxlY3Rfc2VjdGlvbiBhbmQKKyAgIGRlZmF1bHRfZWxmX3VuaXF1ZV9zZWN0aW9uLiAgQ2F0ZWdvcml6ZXMgdGhlIERFQ0wuICAqLworCitlbnVtIHNlY3Rpb25fY2F0ZWdvcnkKK3sKKyAgU0VDQ0FUX1RFWFQsCisKKyAgU0VDQ0FUX1JPREFUQSwKKyAgU0VDQ0FUX1JPREFUQV9NRVJHRV9TVFIsCisgIFNFQ0NBVF9ST0RBVEFfTUVSR0VfU1RSX0lOSVQsCisgIFNFQ0NBVF9ST0RBVEFfTUVSR0VfQ09OU1QsCisgIFNFQ0NBVF9TUk9EQVRBLAorCisgIFNFQ0NBVF9EQVRBLAorCisgIC8qIFRvIG9wdGltaXplIGxvYWRpbmcgb2Ygc2hhcmVkIHByb2dyYW1zLCBkZWZpbmUgZm9sbG93aW5nIHN1YnNlY3Rpb25zCisgICAgIG9mIGRhdGEgc2VjdGlvbjoKKwlfUkVMCUNvbnRhaW5zIGRhdGEgdGhhdCBoYXMgcmVsb2NhdGlvbnMsIHNvIHRoZXkgZ2V0IGdyb3VwZWQKKwkJdG9nZXRoZXIgYW5kIGR5bmFtaWMgbGlua2VyIHdpbGwgdmlzaXQgZmV3ZXIgcGFnZXMgaW4gbWVtb3J5LgorCV9STwlDb250YWlucyBkYXRhIHRoYXQgaXMgb3RoZXJ3aXNlIHJlYWQtb25seS4gIFRoaXMgaXMgdXNlZnVsCisJCXdpdGggcHJlbGlua2luZyBhcyBtb3N0IHJlbG9jYXRpb25zIHdvbid0IGJlIGR5bmFtaWNhbGx5CisJCWxpbmtlZCBhbmQgdGh1cyBzdGF5IHJlYWQgb25seS4KKwlfTE9DQUwJTWFya3MgZGF0YSBjb250YWluaW5nIHJlbG9jYXRpb25zIG9ubHkgdG8gbG9jYWwgb2JqZWN0cy4KKwkJVGhlc2UgcmVsb2NhdGlvbnMgd2lsbCBnZXQgZnVsbHkgcmVzb2x2ZWQgYnkgcHJlbGlua2luZy4gICovCisgIFNFQ0NBVF9EQVRBX1JFTCwKKyAgU0VDQ0FUX0RBVEFfUkVMX0xPQ0FMLAorICBTRUNDQVRfREFUQV9SRUxfUk8sCisgIFNFQ0NBVF9EQVRBX1JFTF9ST19MT0NBTCwKKworICBTRUNDQVRfU0RBVEEsCisgIFNFQ0NBVF9UREFUQSwKKworICBTRUNDQVRfQlNTLAorICBTRUNDQVRfU0JTUywKKyAgU0VDQ0FUX1RCU1MKK307CisKKy8qIEluZm9ybWF0aW9uIHRoYXQgaXMgcHJvdmlkZWQgYnkgYWxsIGluc3RhbmNlcyBvZiB0aGUgc2VjdGlvbiB0eXBlLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHNlY3Rpb25fY29tbW9uIHsKKyAgLyogVGhlIHNldCBvZiBTRUNUSU9OXyogZmxhZ3MgdGhhdCBhcHBseSB0byB0aGlzIHNlY3Rpb24uICAqLworICB1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCisvKiBJbmZvcm1hdGlvbiBhYm91dCBhIFNFQ1RJT05fTkFNRUQgc2VjdGlvbi4gICovCitzdHJ1Y3QgR1RZKCgpKSBuYW1lZF9zZWN0aW9uIHsKKyAgc3RydWN0IHNlY3Rpb25fY29tbW9uIGNvbW1vbjsKKworICAvKiBUaGUgbmFtZSBvZiB0aGUgc2VjdGlvbi4gICovCisgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgLyogSWYgbm9ubnVsbCwgdGhlIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wgd2l0aCB3aGljaCB0aGUKKyAgICAgc2VjdGlvbiBpcyBhc3NvY2lhdGVkLiAgKi8KKyAgdHJlZSBkZWNsOworfTsKKworLyogQSBjYWxsYmFjayB0aGF0IHdyaXRlcyB0aGUgYXNzZW1ibHkgY29kZSBmb3Igc3dpdGNoaW5nIHRvIGFuIHVubmFtZWQKKyAgIHNlY3Rpb24uICBUaGUgYXJndW1lbnQgcHJvdmlkZXMgY2FsbGJhY2stc3BlY2lmaWMgZGF0YS4gICovCit0eXBlZGVmIHZvaWQgKCp1bm5hbWVkX3NlY3Rpb25fY2FsbGJhY2spIChjb25zdCB2b2lkICopOworCisvKiBJbmZvcm1hdGlvbiBhYm91dCBhIFNFQ1RJT05fVU5OQU1FRCBzZWN0aW9uLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHVubmFtZWRfc2VjdGlvbiB7CisgIHN0cnVjdCBzZWN0aW9uX2NvbW1vbiBjb21tb247CisKKyAgLyogVGhlIGNhbGxiYWNrIHVzZWQgdG8gc3dpdGNoIHRvIHRoZSBzZWN0aW9uLCBhbmQgdGhlIGRhdGEgdGhhdAorICAgICBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4gICovCisgIHVubmFtZWRfc2VjdGlvbl9jYWxsYmFjayBHVFkgKChza2lwKSkgY2FsbGJhY2s7CisgIGNvbnN0IHZvaWQgKkdUWSAoKHNraXApKSBkYXRhOworCisgIC8qIFRoZSBuZXh0IGVudHJ5IGluIHRoZSBjaGFpbiBvZiB1bm5hbWVkIHNlY3Rpb25zLiAgKi8KKyAgc2VjdGlvbiAqbmV4dDsKK307CisKKy8qIEEgY2FsbGJhY2sgdGhhdCB3cml0ZXMgdGhlIGFzc2VtYmx5IGNvZGUgZm9yIGEgZGVjbCBpbiBhCisgICBTRUNUSU9OX05PU1dJVENIIHNlY3Rpb24uICBERUNMIGlzIHRoZSBkZWNsIHRoYXQgc2hvdWxkIGJlIGFzc2VtYmxlZAorICAgYW5kIE5BTUUgaXMgdGhlIG5hbWUgb2YgaXRzIFNZTUJPTF9SRUYuICBTSVpFIGlzIHRoZSBzaXplIG9mIHRoZSBkZWNsCisgICBpbiBieXRlcyBhbmQgUk9VTkRFRCBpcyB0aGF0IHNpemUgcm91bmRlZCB1cCB0byB0aGUgbmV4dAorICAgQklHR0VTVF9BTElHTk1FTlQgLyBCSVRTX1BFUl9VTklUIGJvdW5kYXJ5LgorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2FsbGJhY2sgdXNlZCBERUNMX0FMSUdOIHRvIHNldCB0aGUgb2JqZWN0J3MKKyAgIGFsaWdubWVudC4gIEEgZmFsc2UgcmV0dXJuIHZhbHVlIGltcGxpZXMgdGhhdCB3ZSBhcmUgcmVseWluZworICAgb24gdGhlIHJvdW5kZWQgc2l6ZSB0byBhbGlnbiB0aGUgZGVjbC4gICovCit0eXBlZGVmIGJvb2wgKCpub3N3aXRjaF9zZWN0aW9uX2NhbGxiYWNrKSAodHJlZSBkZWNsLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNpemUsCisJCQkJCSAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgcm91bmRlZCk7CisKKy8qIEluZm9ybWF0aW9uIGFib3V0IGEgU0VDVElPTl9OT1NXSVRDSCBzZWN0aW9uLiAgKi8KK3N0cnVjdCBHVFkoKCkpIG5vc3dpdGNoX3NlY3Rpb24geworICBzdHJ1Y3Qgc2VjdGlvbl9jb21tb24gY29tbW9uOworCisgIC8qIFRoZSBjYWxsYmFjayB1c2VkIHRvIGFzc2VtYmxlIGRlY2xzIGluIHRoaXMgc2VjdGlvbi4gICovCisgIG5vc3dpdGNoX3NlY3Rpb25fY2FsbGJhY2sgR1RZICgoc2tpcCkpIGNhbGxiYWNrOworfTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgYSBzZWN0aW9uLCB3aGljaCBtYXkgYmUgbmFtZWQgb3IgdW5uYW1lZC4gICovCit1bmlvbiBHVFkgKChkZXNjICgiU0VDVElPTl9TVFlMRSAoJiglaCkpIikpKSBzZWN0aW9uIHsKKyAgc3RydWN0IHNlY3Rpb25fY29tbW9uIEdUWSAoKHNraXApKSBjb21tb247CisgIHN0cnVjdCBuYW1lZF9zZWN0aW9uIEdUWSAoKHRhZyAoIlNFQ1RJT05fTkFNRUQiKSkpIG5hbWVkOworICBzdHJ1Y3QgdW5uYW1lZF9zZWN0aW9uIEdUWSAoKHRhZyAoIlNFQ1RJT05fVU5OQU1FRCIpKSkgdW5uYW1lZDsKKyAgc3RydWN0IG5vc3dpdGNoX3NlY3Rpb24gR1RZICgodGFnICgiU0VDVElPTl9OT1NXSVRDSCIpKSkgbm9zd2l0Y2g7Cit9OworCisvKiBSZXR1cm4gdGhlIHN0eWxlIG9mIHNlY3Rpb24gU0VDVC4gICovCisjZGVmaW5lIFNFQ1RJT05fU1RZTEUoU0VDVCkgKChTRUNUKS0+Y29tbW9uLmZsYWdzICYgU0VDVElPTl9TVFlMRV9NQVNLKQorCitzdHJ1Y3Qgb2JqZWN0X2Jsb2NrOworCisvKiBTcGVjaWFsIHdlbGwta25vd24gc2VjdGlvbnMuICAqLworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqdGV4dF9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqZGF0YV9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqcmVhZG9ubHlfZGF0YV9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqc2RhdGFfc2VjdGlvbjsKK2V4dGVybiBHVFkoKCkpIHNlY3Rpb24gKmN0b3JzX3NlY3Rpb247CitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICpkdG9yc19zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqYnNzX3NlY3Rpb247CitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICpzYnNzX3NlY3Rpb247CitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICpleGNlcHRpb25fc2VjdGlvbjsKK2V4dGVybiBHVFkoKCkpIHNlY3Rpb24gKmVoX2ZyYW1lX3NlY3Rpb247CitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICp0bHNfY29tbV9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqY29tbV9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgc2VjdGlvbiAqbGNvbW1fc2VjdGlvbjsKK2V4dGVybiBHVFkoKCkpIHNlY3Rpb24gKmJzc19ub3N3aXRjaF9zZWN0aW9uOworCitleHRlcm4gR1RZKCgpKSBzZWN0aW9uICppbl9zZWN0aW9uOworZXh0ZXJuIEdUWSgoKSkgYm9vbCBpbl9jb2xkX3NlY3Rpb25fcDsKKworZXh0ZXJuIHNlY3Rpb24gKmdldF91bm5hbWVkX3NlY3Rpb24gKHVuc2lnbmVkIGludCwgdm9pZCAoKikgKGNvbnN0IHZvaWQgKiksCisJCQkJICAgICBjb25zdCB2b2lkICopOworZXh0ZXJuIHNlY3Rpb24gKmdldF9zZWN0aW9uIChjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgdHJlZSk7CitleHRlcm4gc2VjdGlvbiAqZ2V0X25hbWVkX3NlY3Rpb24gKHRyZWUsIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBzZWN0aW9uICpnZXRfdmFyaWFibGVfc2VjdGlvbiAodHJlZSwgYm9vbCk7CitleHRlcm4gdm9pZCBwbGFjZV9ibG9ja19zeW1ib2wgKHJ0eCk7CitleHRlcm4gcnR4IGdldF9zZWN0aW9uX2FuY2hvciAoc3RydWN0IG9iamVjdF9ibG9jayAqLCBIT1NUX1dJREVfSU5ULAorCQkJICAgICAgIGVudW0gdGxzX21vZGVsKTsKK2V4dGVybiBzZWN0aW9uICptZXJnZWFibGVfY29uc3RhbnRfc2VjdGlvbiAoZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSAgICB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULAorCQkJCQkgICAgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzZWN0aW9uICpmdW5jdGlvbl9zZWN0aW9uICh0cmVlKTsKK2V4dGVybiBzZWN0aW9uICp1bmxpa2VseV90ZXh0X3NlY3Rpb24gKHZvaWQpOworZXh0ZXJuIHNlY3Rpb24gKmN1cnJlbnRfZnVuY3Rpb25fc2VjdGlvbiAodm9pZCk7CisKKy8qIFJldHVybiB0aGUgbnVtYmVyZWQgLmN0b3JzLk4gKGlmIENPTlNUUlVDVE9SX1ApIG9yIC5kdG9ycy5OIChpZgorICAgbm90KSBzZWN0aW9uIGZvciBQUklPUklUWS4gICovCitleHRlcm4gc2VjdGlvbiAqZ2V0X2NkdG9yX3ByaW9yaXR5X3NlY3Rpb24gKGludCwgYm9vbCk7CisKK2V4dGVybiBib29sIHVubGlrZWx5X3RleHRfc2VjdGlvbl9wIChzZWN0aW9uICopOworZXh0ZXJuIHZvaWQgc3dpdGNoX3RvX3NlY3Rpb24gKHNlY3Rpb24gKik7CitleHRlcm4gdm9pZCBvdXRwdXRfc2VjdGlvbl9hc21fb3AgKGNvbnN0IHZvaWQgKik7CisKK2V4dGVybiB2b2lkIHJlY29yZF90bV9jbG9uZV9wYWlyICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF90bV9jbG9uZV9wYWlycyAodm9pZCk7CitleHRlcm4gdHJlZSBnZXRfdG1fY2xvbmVfcGFpciAodHJlZSk7CisKK2V4dGVybiB2b2lkIGRlZmF1bHRfYXNtX291dHB1dF9zb3VyY2VfZmlsZW5hbWUgKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIG91dHB1dF9maWxlX2RpcmVjdGl2ZSAoRklMRSAqLCBjb25zdCBjaGFyICopOworCitleHRlcm4gdW5zaWduZWQgaW50IGRlZmF1bHRfc2VjdGlvbl90eXBlX2ZsYWdzICh0cmVlLCBjb25zdCBjaGFyICosIGludCk7CisKK2V4dGVybiBib29sIGhhdmVfZ2xvYmFsX2Jzc19wICh2b2lkKTsKK2V4dGVybiBib29sIGJzc19pbml0aWFsaXplcl9wIChjb25zdF90cmVlKTsKKworZXh0ZXJuIHZvaWQgZGVmYXVsdF9ub19uYW1lZF9zZWN0aW9uIChjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgdHJlZSk7CitleHRlcm4gdm9pZCBkZWZhdWx0X2VsZl9hc21fbmFtZWRfc2VjdGlvbiAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIHRyZWUpOworZXh0ZXJuIGVudW0gc2VjdGlvbl9jYXRlZ29yeSBjYXRlZ29yaXplX2RlY2xfZm9yX3NlY3Rpb24gKGNvbnN0X3RyZWUsIGludCk7CitleHRlcm4gdm9pZCBkZWZhdWx0X2NvZmZfYXNtX25hbWVkX3NlY3Rpb24gKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCB0cmVlKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfcGVfYXNtX25hbWVkX3NlY3Rpb24gKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCB0cmVlKTsKKworZXh0ZXJuIHZvaWQgZGVmYXVsdF9uYW1lZF9zZWN0aW9uX2FzbV9vdXRfZGVzdHJ1Y3RvciAocnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9kdG9yX3NlY3Rpb25fYXNtX291dF9kZXN0cnVjdG9yIChydHgsIGludCk7CitleHRlcm4gdm9pZCBkZWZhdWx0X25hbWVkX3NlY3Rpb25fYXNtX291dF9jb25zdHJ1Y3RvciAocnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9jdG9yX3NlY3Rpb25fYXNtX291dF9jb25zdHJ1Y3RvciAocnR4LCBpbnQpOworCitleHRlcm4gc2VjdGlvbiAqZGVmYXVsdF9zZWxlY3Rfc2VjdGlvbiAodHJlZSwgaW50LCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiBzZWN0aW9uICpkZWZhdWx0X2VsZl9zZWxlY3Rfc2VjdGlvbiAodHJlZSwgaW50LCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfdW5pcXVlX3NlY3Rpb24gKHRyZWUsIGludCk7CitleHRlcm4gc2VjdGlvbiAqZGVmYXVsdF9mdW5jdGlvbl9yb2RhdGFfc2VjdGlvbiAodHJlZSk7CitleHRlcm4gc2VjdGlvbiAqZGVmYXVsdF9ub19mdW5jdGlvbl9yb2RhdGFfc2VjdGlvbiAodHJlZSk7CitleHRlcm4gc2VjdGlvbiAqZGVmYXVsdF9jbG9uZV90YWJsZV9zZWN0aW9uICh2b2lkKTsKK2V4dGVybiBzZWN0aW9uICpkZWZhdWx0X3NlbGVjdF9ydHhfc2VjdGlvbiAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwKKwkJCQkJICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHNlY3Rpb24gKmRlZmF1bHRfZWxmX3NlbGVjdF9ydHhfc2VjdGlvbiAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwKKwkJCQkJCXVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9lbmNvZGVfc2VjdGlvbl9pbmZvICh0cmVlLCBydHgsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqZGVmYXVsdF9zdHJpcF9uYW1lX2VuY29kaW5nIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9hc21fb3V0cHV0X2FuY2hvciAocnR4KTsKK2V4dGVybiBib29sIGRlZmF1bHRfdXNlX2FuY2hvcnNfZm9yX3N5bWJvbF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgZGVmYXVsdF9iaW5kc19sb2NhbF9wIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlLCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9nbG9iYWxpemVfbGFiZWwgKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfZ2xvYmFsaXplX2RlY2xfbmFtZSAoRklMRSAqLCB0cmVlKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfZW1pdF91bndpbmRfbGFiZWwgKEZJTEUgKiwgdHJlZSwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9lbWl0X2V4Y2VwdF90YWJsZV9sYWJlbCAoRklMRSAqKTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfZ2VuZXJhdGVfaW50ZXJuYWxfbGFiZWwgKGNoYXIgKiwgY29uc3QgY2hhciAqLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9pbnRlcm5hbF9sYWJlbCAoRklMRSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9hc21fZGVjbGFyZV9jb25zdGFudF9uYW1lIChGSUxFICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJICAgICAgIGNvbnN0X3RyZWUsIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9maWxlX3N0YXJ0ICh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sgKHZvaWQpOworZXh0ZXJuIHZvaWQgZmlsZV9lbmRfaW5kaWNhdGVfc3BsaXRfc3RhY2sgKHZvaWQpOworCitleHRlcm4gdm9pZCBkZWZhdWx0X2VsZl9hc21fb3V0cHV0X2V4dGVybmFsIChGSUxFICpmaWxlLCB0cmVlLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBkZWZhdWx0X2VsZl9hc21fb3V0cHV0X2xpbWl0ZWRfc3RyaW5nIChGSUxFICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBkZWZhdWx0X2VsZl9hc21fb3V0cHV0X2FzY2lpIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfZWxmX2ludGVybmFsX2xhYmVsIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiB2b2lkIGRlZmF1bHRfZWxmX2luaXRfYXJyYXlfYXNtX291dF9jb25zdHJ1Y3RvciAocnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9lbGZfZmluaV9hcnJheV9hc21fb3V0X2Rlc3RydWN0b3IgKHJ0eCwgaW50KTsKK2V4dGVybiBpbnQgbWF5YmVfYXNzZW1ibGVfdmlzaWJpbGl0eSAodHJlZSk7CisKK2V4dGVybiBpbnQgZGVmYXVsdF9hZGRyZXNzX2Nvc3QgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGFkZHJfc3BhY2VfdCwgYm9vbCk7CisKKy8qIE91dHB1dCBzdGFjayB1c2FnZSBpbmZvcm1hdGlvbi4gICovCitleHRlcm4gdm9pZCBvdXRwdXRfc3RhY2tfdXNhZ2UgKHZvaWQpOworCisjZW5kaWYgLyogISBHQ0NfT1VUUFVUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9wYXJhbXMuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BhcmFtcy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyNWRlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9wYXJhbXMuZGVmCkBAIC0wLDAgKzEsMTAyMSBAQAorLyogcGFyYW1zLmRlZiAtIFJ1bi10aW1lIHBhcmFtZXRlcnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgTWFyayBNaXRjaGVsbCA8bWFya0Bjb2Rlc291cmNlcnkuY29tPi4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQKKyAgIHBhcmFtZXRlcnMuICBUaGUgREVGUEFSQU0gbWFjcm8gdGFrZXMgNiBhcmd1bWVudHM6CisKKyAgICAgLSBUaGUgZW51bWVyYWwgY29ycmVzcG9uZGluZyB0byB0aGlzIHBhcmFtZXRlci4KKworICAgICAtIFRoZSBuYW1lIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoaXMgcGFyYW1ldGVyIHVzaW5nIHRoZQorICAgICAgIGNvbW1hbmQtbGluZSBvcHRpb24gYC0tcGFyYW0gPG5hbWU+PTx2YWx1ZT4nLgorCisgICAgIC0gQSBoZWxwIHN0cmluZyBleHBsYWluaW5nIGhvdyB0aGUgcGFyYW1ldGVyIGlzIHVzZWQuCisKKyAgICAgLSBBIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIuCisKKyAgICAgLSBUaGUgbWluaW11bSBhY2NlcHRhYmxlIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyLgorCisgICAgIC0gVGhlIG1heGltdW0gYWNjZXB0YWJsZSB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciAoaWYgZ3JlYXRlciB0aGFuCisgICAgIHRoZSBtaW5pbXVtKS4KKworICAgQmUgc3VyZSB0byBhZGQgYW4gZW50cnkgdG8gaW52b2tlLnRleGkgc3VtbWFyaXppbmcgdGhlIHBhcmFtZXRlci4gICovCisKKy8qIFdoZW4gYnJhbmNoIGlzIHByZWRpY3RlZCB0byBiZSB0YWtlbiB3aXRoIHByb2JhYmlsaXR5IGxvd2VyIHRoYW4gdGhpcworICAgdGhyZXNob2xkIChpbiBwZXJjZW50KSwgdGhlbiBpdCBpcyBjb25zaWRlcmVkIHdlbGwgcHJlZGljdGFibGUuICovCitERUZQQVJBTSAoUEFSQU1fUFJFRElDVEFCTEVfQlJBTkNIX09VVENPTUUsCisJICAicHJlZGljdGFibGUtYnJhbmNoLW91dGNvbWUiLAorCSAgIk1heGltYWwgZXN0aW1hdGVkIG91dGNvbWUgb2YgYnJhbmNoIGNvbnNpZGVyZWQgcHJlZGljdGFibGUiLAorCSAgMiwgMCwgNTApCisKK0RFRlBBUkFNIChQQVJBTV9JTkxJTkVfTUlOX1NQRUVEVVAsCisJICAiaW5saW5lLW1pbi1zcGVlZHVwIiwKKwkgICJUaGUgbWluaW1hbCBlc3RpbWF0ZWQgc3BlZWR1cCBhbGxvd2luZyBpbmxpbmVyIHRvIGlnbm9yZSBpbmxpbmUtaW5zbnMtc2luZ2xlIGFuZCBpbmxpbmUtaXNuc25zLWF1dG8iLAorCSAgMTAsIDAsIDApCisKKy8qIFRoZSBzaW5nbGUgZnVuY3Rpb24gaW5saW5pbmcgbGltaXQuIFRoaXMgaXMgdGhlIG1heGltdW0gc2l6ZQorICAgb2YgYSBmdW5jdGlvbiBjb3VudGVkIGluIGludGVybmFsIGdjYyBpbnN0cnVjdGlvbnMgKG5vdCBpbgorICAgcmVhbCBtYWNoaW5lIGluc3RydWN0aW9ucykgdGhhdCBpcyBlbGlnaWJsZSBmb3IgaW5saW5pbmcKKyAgIGJ5IHRoZSB0cmVlIGlubGluZXIuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0NTAuCisgICBPbmx5IGZ1bmN0aW9ucyBtYXJrZWQgaW5saW5lIChvciBtZXRob2RzIGRlZmluZWQgaW4gdGhlIGNsYXNzCisgICBkZWZpbml0aW9uIGZvciBDKyspIGFyZSBhZmZlY3RlZCBieSB0aGlzLgorICAgVGhlcmUgYXJlIG1vcmUgcmVzdHJpY3Rpb25zIHRvIGlubGluaW5nOiBJZiBpbmxpbmVkIGZ1bmN0aW9ucworICAgY2FsbCBvdGhlciBmdW5jdGlvbnMsIHRoZSBhbHJlYWR5IGlubGluZWQgaW5zdHJ1Y3Rpb25zIGFyZQorICAgY291bnRlZCBhbmQgb25jZSB0aGUgcmVjdXJzaXZlIGlubGluZSBsaW1pdCAoc2VlCisgICAibWF4LWlubGluZS1pbnNucyIgcGFyYW1ldGVyKSBpcyBleGNlZWRlZCwgdGhlIGFjY2VwdGFibGUgc2l6ZQorICAgZ2V0cyBkZWNyZWFzZWQuICAqLworREVGUEFSQU0gKFBBUkFNX01BWF9JTkxJTkVfSU5TTlNfU0lOR0xFLAorCSAgIm1heC1pbmxpbmUtaW5zbnMtc2luZ2xlIiwKKwkgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGluIGEgc2luZ2xlIGZ1bmN0aW9uIGVsaWdpYmxlIGZvciBpbmxpbmluZyIsCisJICA0MDAsIDAsIDApCisKKy8qIFRoZSBzaW5nbGUgZnVuY3Rpb24gaW5saW5pbmcgbGltaXQgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZQorICAgaW5saW5lZCBieSB2aXJ0dWUgb2YgLWZpbmxpbmUtZnVuY3Rpb25zICgtTzMpLgorICAgVGhpcyBsaW1pdCBzaG91bGQgYmUgY2hvc2VuIHRvIGJlIGJlbG93IG9yIGVxdWFsIHRvIHRoZSBsaW1pdAorICAgdGhhdCBpcyBhcHBsaWVkIHRvIGZ1bmN0aW9ucyBtYXJrZWQgaW5saW5lZCAob3IgZGVmaW5lZCBpbiB0aGUKKyAgIGNsYXNzIGRlY2xhcmF0aW9uIGluIEMrKykgZ2l2ZW4gYnkgdGhlICJtYXgtaW5saW5lLWluc25zLXNpbmdsZSIKKyAgIHBhcmFtZXRlci4KKyAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDQwLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9NQVhfSU5MSU5FX0lOU05TX0FVVE8sCisJICAibWF4LWlubGluZS1pbnNucy1hdXRvIiwKKwkgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHdoZW4gYXV0b21hdGljYWxseSBpbmxpbmluZyIsCisJICA0MCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX01BWF9JTkxJTkVfSU5TTlNfUkVDVVJTSVZFLAorCSAgIm1heC1pbmxpbmUtaW5zbnMtcmVjdXJzaXZlIiwKKwkgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGlubGluZSBmdW5jdGlvbiBjYW4gZ3JvdyB0byB2aWEgcmVjdXJzaXZlIGlubGluaW5nIiwKKwkgIDQ1MCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX01BWF9JTkxJTkVfSU5TTlNfUkVDVVJTSVZFX0FVVE8sCisJICAibWF4LWlubGluZS1pbnNucy1yZWN1cnNpdmUtYXV0byIsCisJICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBub24taW5saW5lIGZ1bmN0aW9uIGNhbiBncm93IHRvIHZpYSByZWN1cnNpdmUgaW5saW5pbmciLAorCSAgNDUwLCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fTUFYX0lOTElORV9SRUNVUlNJVkVfREVQVEgsCisJICAibWF4LWlubGluZS1yZWN1cnNpdmUtZGVwdGgiLAorCSAgIlRoZSBtYXhpbXVtIGRlcHRoIG9mIHJlY3Vyc2l2ZSBpbmxpbmluZyBmb3IgaW5saW5lIGZ1bmN0aW9ucyIsCisJICA4LCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fTUFYX0lOTElORV9SRUNVUlNJVkVfREVQVEhfQVVUTywKKwkgICJtYXgtaW5saW5lLXJlY3Vyc2l2ZS1kZXB0aC1hdXRvIiwKKwkgICJUaGUgbWF4aW11bSBkZXB0aCBvZiByZWN1cnNpdmUgaW5saW5pbmcgZm9yIG5vbi1pbmxpbmUgZnVuY3Rpb25zIiwKKwkgIDgsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9NSU5fSU5MSU5FX1JFQ1VSU0lWRV9QUk9CQUJJTElUWSwKKwkgICJtaW4taW5saW5lLXJlY3Vyc2l2ZS1wcm9iYWJpbGl0eSIsCisJICAiSW5saW5lIHJlY3Vyc2l2ZWx5IG9ubHkgd2hlbiB0aGUgcHJvYmFiaWxpdHkgb2YgY2FsbCBiZWluZyBleGVjdXRlZCBleGNlZWRzIHRoZSBwYXJhbWV0ZXIiLAorCSAgMTAsIDAsIDApCisKKy8qIExpbWl0IG9mIGl0ZXJhdGlvbnMgb2YgZWFybHkgaW5saW5lci4gIFRoaXMgYmFzaWNhbGx5IGJvdW5kcyBudW1iZXIgb2YKKyAgIG5lc3RlZCBpbmRpcmVjdCBjYWxscyBlYXJseSBpbmxpbmVyIGNhbiByZXNvbHZlLiAgRGVlcGVyIGNoYWlucyBhcmUgc3RpbGwKKyAgIGhhbmRsZWQgYnkgbGF0ZSBpbmxpbmluZy4gICovCitERUZQQVJBTSAoUEFSQU1fRUFSTFlfSU5MSU5FUl9NQVhfSVRFUkFUSU9OUywKKwkgICJtYXgtZWFybHktaW5saW5lci1pdGVyYXRpb25zIiwKKwkgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgbmVzdGVkIGluZGlyZWN0IGlubGluaW5nIHBlcmZvcm1lZCBieSBlYXJseSBpbmxpbmVyIiwKKwkgIDEsIDAsIDApCisKKy8qIExpbWl0IG9uIHByb2JhYmlsaXR5IG9mIGVudHJ5IEJCLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9DT01EQVRfU0hBUklOR19QUk9CQUJJTElUWSwKKwkgICJjb21kYXQtc2hhcmluZy1wcm9iYWJpbGl0eSIsCisJICAiUHJvYmFiaWxpdHkgdGhhdCBDT01EQVQgZnVuY3Rpb24gd2lsbCBiZSBzaGFyZWQgd2l0aCBkaWZmZXJlbnQgY29tcGlsYXRpb24gdW5pdCIsCisJICAyMCwgMCwgMCkKKworLyogTGltaXQgb24gcHJvYmFiaWxpdHkgb2YgZW50cnkgQkIuICAqLworREVGUEFSQU0gKFBBUkFNX1BBUlRJQUxfSU5MSU5JTkdfRU5UUllfUFJPQkFCSUxJVFksCisJICAicGFydGlhbC1pbmxpbmluZy1lbnRyeS1wcm9iYWJpbGl0eSIsCisJICAiTWF4aW11bSBwcm9iYWJpbGl0eSBvZiB0aGUgZW50cnkgQkIgb2Ygc3BsaXQgcmVnaW9uIChpbiBwZXJjZW50IHJlbGF0aXZlIHRvIGVudHJ5IEJCIG9mIHRoZSBmdW5jdGlvbikgdG8gbWFrZSBwYXJ0aWFsIGlubGluaW5nIGhhcHBlbiIsCisJICA3MCwgMCwgMCkKKworLyogTGltaXQgdGhlIG51bWJlciBvZiBleHBhbnNpb25zIGNyZWF0ZWQgYnkgdGhlIHZhcmlhYmxlIGV4cGFuc2lvbgorICAgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHJlZ2lzdGVyIHByZXNzdXJlLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9NQVhfVkFSSUFCTEVfRVhQQU5TSU9OUywKKwkgICJtYXgtdmFyaWFibGUtZXhwYW5zaW9ucy1pbi11bnJvbGxlciIsCisJICAiSWYgLWZ2YXJpYWJsZS1leHBhbnNpb24taW4tdW5yb2xsZXIgaXMgdXNlZCwgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gaW5kaXZpZHVhbCB2YXJpYWJsZSB3aWxsIGJlIGV4cGFuZGVkIGR1cmluZyBsb29wIHVucm9sbGluZyIsCisgICAgICAgICAgMSwgMCwgMCkKKworLyogTGltaXQgbG9vcCBhdXRvdmVjdG9yaXphdGlvbiB0byBsb29wcyB3aXRoIGxhcmdlIGVub3VnaCBpdGVyYXRpb24gY291bnQuICAqLworREVGUEFSQU0gKFBBUkFNX01JTl9WRUNUX0xPT1BfQk9VTkQsCisJICAibWluLXZlY3QtbG9vcC1ib3VuZCIsCisJICAiSWYgLWZ0cmVlLXZlY3Rvcml6ZSBpcyB1c2VkLCB0aGUgbWluaW1hbCBsb29wIGJvdW5kIG9mIGEgbG9vcCB0byBiZSBjb25zaWRlcmVkIGZvciB2ZWN0b3JpemF0aW9uIiwKKwkgIDEsIDEsIDApCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgd2hlbiBsb29raW5nIGZvciBhbgorICAgaW5zdHJ1Y3Rpb24gdG8gZmlsbCBhIGRlbGF5IHNsb3QuICBJZiBtb3JlIHRoYW4gdGhpcyBhcmJpdHJhcnkKKyAgIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgaXMgc2VhcmNoZWQsIHRoZSB0aW1lIHNhdmluZ3MgZnJvbSBmaWxsaW5nCisgICB0aGUgZGVsYXkgc2xvdCB3aWxsIGJlIG1pbmltYWwgc28gc3RvcCBzZWFyY2hpbmcuICBJbmNyZWFzaW5nCisgICB2YWx1ZXMgbWVhbiBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBtYWtpbmcgdGhlIGNvbXBpbGUgdGltZQorICAgaW5jcmVhc2Ugd2l0aCBwcm9iYWJseSBzbWFsbCBpbXByb3ZlbWVudCBpbiBleGVjdXRhYmxlIHJ1biB0aW1lLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9NQVhfREVMQVlfU0xPVF9JTlNOX1NFQVJDSCwKKwkgICJtYXgtZGVsYXktc2xvdC1pbnNuLXNlYXJjaCIsCisJICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBjb25zaWRlciB0byBmaWxsIGEgZGVsYXkgc2xvdCIsCisJICAxMDAsIDAsIDApCisKKy8qIFdoZW4gdHJ5aW5nIHRvIGZpbGwgZGVsYXkgc2xvdHMsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMKKyAgIHRvIGNvbnNpZGVyIHdoZW4gc2VhcmNoaW5nIGZvciBhIGJsb2NrIHdpdGggdmFsaWQgbGl2ZSByZWdpc3RlcgorICAgaW5mb3JtYXRpb24uICBJbmNyZWFzaW5nIHRoaXMgYXJiaXRyYXJpbHkgY2hvc2VuIHZhbHVlIG1lYW5zIG1vcmUKKyAgIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpbmNyZWFzaW5nIHRoZSBjb21waWxlIHRpbWUuICBUaGlzCisgICBwYXJhbWV0ZXIgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgZGVsYXkgc2xvdCBjb2RlIGlzIHJld3JpdHRlbgorICAgdG8gbWFpbnRhaW4gdGhlIGNvbnRyb2wtZmxvdyBncmFwaC4gICovCitERUZQQVJBTShQQVJBTV9NQVhfREVMQVlfU0xPVF9MSVZFX1NFQVJDSCwKKwkgIm1heC1kZWxheS1zbG90LWxpdmUtc2VhcmNoIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgdG8gZmluZCBhY2N1cmF0ZSBsaXZlIHJlZ2lzdGVyIGluZm9ybWF0aW9uIiwKKwkgMzMzLCAwLCAwKQorCisvKiBUaGlzIHBhcmFtZXRlciBsaW1pdHMgdGhlIG51bWJlciBvZiBicmFuY2ggZWxlbWVudHMgdGhhdCB0aGUKKyAgIHNjaGVkdWxlciB3aWxsIHRyYWNrIGFudGktZGVwZW5kZW5jaWVzIHRocm91Z2ggd2l0aG91dCByZXNldHRpbmcKKyAgIHRoZSB0cmFja2luZyBtZWNoYW5pc20uICBMYXJnZSBmdW5jdGlvbnMgd2l0aCBmZXcgY2FsbHMgb3IgYmFycmllcnMKKyAgIGNhbiBnZW5lcmF0ZSBsaXN0cyBjb250YWluaW5nIG1hbnkgMTAwMCdzIG9mIGRlcGVuZGVuY2llcy4gIEdlbmVyYWxseQorICAgdGhlIGNvbXBpbGVyIGVpdGhlciB1c2VzIGFsbCBhdmFpbGFibGUgbWVtb3J5LCBvciBydW5zIGZvciBmYXIgdG9vIGxvbmcuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX1BFTkRJTkdfTElTVF9MRU5HVEgsCisJICJtYXgtcGVuZGluZy1saXN0LWxlbmd0aCIsCisJICJUaGUgbWF4aW11bSBsZW5ndGggb2Ygc2NoZWR1bGluZydzIHBlbmRpbmcgb3BlcmF0aW9ucyBsaXN0IiwKKwkgMzIsIDAsIDApCisKKy8qIFRoaXMgcGFyYW1ldGVyIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGJhY2t0cmFja2luZyBhdHRlbXB0cyB3aGVuIHVzaW5nIHRoZQorICAgaGFpZmEgc2NoZWR1bGVyIGZvciBtb2R1bG8gc2NoZWR1bGluZy4gICovCitERUZQQVJBTShQQVJBTV9NQVhfTU9EVUxPX0JBQ0tUUkFDS19BVFRFTVBUUywKKwkgIm1heC1tb2R1bG8tYmFja3RyYWNrLWF0dGVtcHRzIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBiYWNrdHJhY2sgYXR0ZW1wdHMgdGhlIHNjaGVkdWxlciBzaG91bGQgbWFrZSB3aGVuIG1vZHVsbyBzY2hlZHVsaW5nIGEgbG9vcCIsCisJIDQwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9MQVJHRV9GVU5DVElPTl9JTlNOUywKKwkgImxhcmdlLWZ1bmN0aW9uLWluc25zIiwKKwkgIlRoZSBzaXplIG9mIGZ1bmN0aW9uIGJvZHkgdG8gYmUgY29uc2lkZXJlZCBsYXJnZSIsCisJIDI3MDAsIDAsIDApCitERUZQQVJBTShQQVJBTV9MQVJHRV9GVU5DVElPTl9HUk9XVEgsCisJICJsYXJnZS1mdW5jdGlvbi1ncm93dGgiLAorCSAiTWF4aW1hbCBncm93dGggZHVlIHRvIGlubGluaW5nIG9mIGxhcmdlIGZ1bmN0aW9uIChpbiBwZXJjZW50KSIsCisJIDEwMCwgMCwgMCkKK0RFRlBBUkFNKFBBUkFNX0xBUkdFX1VOSVRfSU5TTlMsCisJICJsYXJnZS11bml0LWluc25zIiwKKwkgIlRoZSBzaXplIG9mIHRyYW5zbGF0aW9uIHVuaXQgdG8gYmUgY29uc2lkZXJlZCBsYXJnZSIsCisJIDEwMDAwLCAwLCAwKQorREVGUEFSQU0oUEFSQU1fSU5MSU5FX1VOSVRfR1JPV1RILAorCSAiaW5saW5lLXVuaXQtZ3Jvd3RoIiwKKwkgIkhvdyBtdWNoIGNhbiBnaXZlbiBjb21waWxhdGlvbiB1bml0IGdyb3cgYmVjYXVzZSBvZiB0aGUgaW5saW5pbmcgKGluIHBlcmNlbnQpIiwKKwkgMzAsIDAsIDApCitERUZQQVJBTShQQVJBTV9JUENQX1VOSVRfR1JPV1RILAorCSAiaXBjcC11bml0LWdyb3d0aCIsCisJICJIb3cgbXVjaCBjYW4gZ2l2ZW4gY29tcGlsYXRpb24gdW5pdCBncm93IGJlY2F1c2Ugb2YgdGhlIGludGVycHJvY2VkdXJhbCBjb25zdGFudCBwcm9wYWdhdGlvbiAoaW4gcGVyY2VudCkiLAorCSAxMCwgMCwgMCkKK0RFRlBBUkFNKFBBUkFNX0VBUkxZX0lOTElOSU5HX0lOU05TLAorCSAiZWFybHktaW5saW5pbmctaW5zbnMiLAorCSAiTWF4aW1hbCBlc3RpbWF0ZWQgZ3Jvd3RoIG9mIGZ1bmN0aW9uIGJvZHkgY2F1c2VkIGJ5IGVhcmx5IGlubGluaW5nIG9mIHNpbmdsZSBjYWxsIiwKKwkgMTEsIDAsIDApCitERUZQQVJBTShQQVJBTV9MQVJHRV9TVEFDS19GUkFNRSwKKwkgImxhcmdlLXN0YWNrLWZyYW1lIiwKKwkgIlRoZSBzaXplIG9mIHN0YWNrIGZyYW1lIHRvIGJlIGNvbnNpZGVyZWQgbGFyZ2UiLAorCSAyNTYsIDAsIDApCitERUZQQVJBTShQQVJBTV9TVEFDS19GUkFNRV9HUk9XVEgsCisJICJsYXJnZS1zdGFjay1mcmFtZS1ncm93dGgiLAorCSAiTWF4aW1hbCBzdGFjayBmcmFtZSBncm93dGggZHVlIHRvIGlubGluaW5nIChpbiBwZXJjZW50KSIsCisJIDEwMDAsIDAsIDApCisKKy8qIFRoZSBHQ1NFIG9wdGltaXphdGlvbiB3aWxsIGJlIGRpc2FibGVkIGlmIGl0IHdvdWxkIHJlcXVpcmUKKyAgIHNpZ25pZmljYW50bHkgbW9yZSBtZW1vcnkgdGhhbiB0aGlzIHZhbHVlLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9HQ1NFX01FTU9SWSwKKwkgIm1heC1nY3NlLW1lbW9yeSIsCisJICJUaGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIGJlIGFsbG9jYXRlZCBieSBHQ1NFIiwKKwkgNTAgKiAxMDI0ICogMTAyNCwgMCwgMCkKKworLyogVGhlIEdDU0Ugb3B0aW1pemF0aW9uIG9mIGFuIGV4cHJlc3Npb24gd2lsbCBhdm9pZGVkIGlmIHRoZSByYXRpbyBvZgorICAgaW5zZXJ0aW9ucyB0byBkZWxldGlvbnMgaXMgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWUuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX0dDU0VfSU5TRVJUSU9OX1JBVElPLAorCSAibWF4LWdjc2UtaW5zZXJ0aW9uLXJhdGlvIiwKKwkgIlRoZSBtYXhpbXVtIHJhdGlvIG9mIGluc2VydGlvbnMgdG8gZGVsZXRpb25zIG9mIGV4cHJlc3Npb25zIGluIEdDU0UiLAorCSAyMCwgMCwgMCkKKworLyogVGhpcyBpcyB0aGUgdGhyZXNob2xkIHJhdGlvIHdoZW4gdG8gcGVyZm9ybSBwYXJ0aWFsIHJlZHVuZGFuY3kKKyAgIGVsaW1pbmF0aW9uIGFmdGVyIHJlbG9hZC4gV2UgcGVyZm9ybSBwYXJ0aWFsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24KKyAgIHdoZW4gdGhlIGZvbGxvd2luZyBob2xkczoKKyAgIChSZWR1bmRhbnQgbG9hZCBleGVjdXRpb24gY291bnQpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID49IEdDU0VfQUZURVJfUkVMT0FEX1BBUlRJQUxfRlJBQ1RJT04KKyAgIChBZGRlZCBsb2FkcyBleGVjdXRpb24gY291bnQpCQkJCQkgICovCitERUZQQVJBTShQQVJBTV9HQ1NFX0FGVEVSX1JFTE9BRF9QQVJUSUFMX0ZSQUNUSU9OLAorCSJnY3NlLWFmdGVyLXJlbG9hZC1wYXJ0aWFsLWZyYWN0aW9uIiwKKwkiVGhlIHRocmVzaG9sZCByYXRpbyBmb3IgcGVyZm9ybWluZyBwYXJ0aWFsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24gYWZ0ZXIgcmVsb2FkIiwKKyAgICAgICAgMywgMCwgMCkKKy8qIFRoaXMgaXMgdGhlIHRocmVzaG9sZCByYXRpbyBvZiB0aGUgY3JpdGljYWwgZWRnZXMgZXhlY3V0aW9uIGNvdW50IGNvbXBhcmVkIHRvCisgICB0aGUgcmVkdW5kYW50IGxvYWRzIGV4ZWN1dGlvbiBjb3VudCB0aGF0IHBlcm1pdHMgcGVyZm9ybWluZyB0aGUgbG9hZAorICAgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiBpbiBnY3NlIGFmdGVyIHJlbG9hZC4gICovCitERUZQQVJBTShQQVJBTV9HQ1NFX0FGVEVSX1JFTE9BRF9DUklUSUNBTF9GUkFDVElPTiwKKwkiZ2NzZS1hZnRlci1yZWxvYWQtY3JpdGljYWwtZnJhY3Rpb24iLAorCSJUaGUgdGhyZXNob2xkIHJhdGlvIG9mIGNyaXRpY2FsIGVkZ2VzIGV4ZWN1dGlvbiBjb3VudCB0aGF0IHBlcm1pdCBwZXJmb3JtaW5nIHJlZHVuZGFuY3kgZWxpbWluYXRpb24gYWZ0ZXIgcmVsb2FkIiwKKyAgICAgICAgMTAsIDAsIDApCisKKy8qIEdDU0Ugd2lsbCB1c2UgR0NTRV9DT1NUX0RJU1RBTkNFX1JBVElPTiBhcyBhIHNjYWxpbmcgZmFjdG9yCisgICB0byBjYWxjdWxhdGUgbWF4aW11bSBkaXN0YW5jZSBmb3Igd2hpY2ggYW4gZXhwcmVzc2lvbiBpcyBhbGxvd2VkIHRvIG1vdmUKKyAgIGZyb20gaXRzIHJ0eF9jb3N0LiAgKi8KK0RFRlBBUkFNKFBBUkFNX0dDU0VfQ09TVF9ESVNUQU5DRV9SQVRJTywKKwkgImdjc2UtY29zdC1kaXN0YW5jZS1yYXRpbyIsCisJICJTY2FsaW5nIGZhY3RvciBpbiBjYWxjdWxhdGlvbiBvZiBtYXhpbXVtIGRpc3RhbmNlIGFuIGV4cHJlc3Npb24gY2FuIGJlIG1vdmVkIGJ5IEdDU0Ugb3B0aW1pemF0aW9ucyIsCisJIDEwLCAwLCAwKQorLyogR0NTRSB3b24ndCByZXN0cmljdCBkaXN0YW5jZSBmb3Igd2hpY2ggYW4gZXhwcmVzc2lvbiB3aXRoIHJ0eF9jb3N0IGdyZWF0ZXIKKyAgIHRoYW4gQ09TVFNfTl9JTlNOKEdDU0VfVU5SRVNUUklDVEVEX0NPU1QpIGlzIGFsbG93ZWQgdG8gbW92ZS4gICovCitERUZQQVJBTShQQVJBTV9HQ1NFX1VOUkVTVFJJQ1RFRF9DT1NULAorCSAiZ2NzZS11bnJlc3RyaWN0ZWQtY29zdCIsCisJICJDb3N0IGF0IHdoaWNoIEdDU0Ugb3B0aW1pemF0aW9ucyB3aWxsIG5vdCBjb25zdHJhaW50IHRoZSBkaXN0YW5jZSBhbiBleHByZXNzaW9uIGNhbiB0cmF2ZWwiLAorCSAzLCAwLCAwKQorCisvKiBIb3cgZGVlcCBmcm9tIGEgZ2l2ZW4gYmFzaWMgYmxvY2sgdGhlIGRvbWluYXRvciB0cmVlIHNob3VsZCBiZSBzZWFyY2hlZAorICAgZm9yIGV4cHJlc3Npb25zIHRvIGhvaXN0IHRvIHRoZSBibG9jay4gIFRoZSB2YWx1ZSBvZiAwIHdpbGwgYXZvaWQgbGltaXRpbmcKKyAgIHRoZSBzZWFyY2guICAqLworREVGUEFSQU0oUEFSQU1fTUFYX0hPSVNUX0RFUFRILAorCSAibWF4LWhvaXN0LWRlcHRoIiwKKwkgIk1heGltdW0gZGVwdGggb2Ygc2VhcmNoIGluIHRoZSBkb21pbmF0b3IgdHJlZSBmb3IgZXhwcmVzc2lvbnMgdG8gaG9pc3QiLAorCSAzMCwgMCwgMCkKKworLyogVGhpcyBwYXJhbWV0ZXIgbGltaXRzIHRoZSBudW1iZXIgb2YgaW5zbnMgaW4gYSBsb29wIHRoYXQgd2lsbCBiZSB1bnJvbGxlZCwKKyAgIGFuZCBieSBob3cgbXVjaCB0aGUgbG9vcCBpcyB1bnJvbGxlZC4KKworICAgVGhpcyBsaW1pdCBzaG91bGQgYmUgYXQgbW9zdCBoYWxmIG9mIHRoZSBwZWVsaW5nIGxpbWl0czogIGxvb3AgdW5yb2xsZXIKKyAgIGRlY2lkZXMgdG8gbm90IHVucm9sbCBsb29wcyB0aGF0IGl0ZXJhdGUgZmV3ZXIgdGhhbiAyKm51bWJlciBvZiBhbGxvd2VkCisgICB1bnJvbGxpbmdzIGFuZCB0aHVzIHdlIHdvdWxkIGhhdmUgbG9vcHMgdGhhdCBhcmUgbmVpdGhlciBwZWVsZWQgb3IgdW5yb2xsZWQKKyAgIG90aGVyd2lzZS4gICovCitERUZQQVJBTShQQVJBTV9NQVhfVU5ST0xMRURfSU5TTlMsCisJICJtYXgtdW5yb2xsZWQtaW5zbnMiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBjb25zaWRlciB0byB1bnJvbGwgaW4gYSBsb29wIiwKKwkgMjAwLCAwLCAwKQorLyogVGhpcyBwYXJhbWV0ZXIgbGltaXRzIGhvdyBtYW55IHRpbWVzIHRoZSBsb29wIGlzIHVucm9sbGVkIGRlcGVuZGluZworICAgb24gbnVtYmVyIG9mIGluc25zIHJlYWxseSBleGVjdXRlZCBpbiBlYWNoIGl0ZXJhdGlvbi4gICovCitERUZQQVJBTShQQVJBTV9NQVhfQVZFUkFHRV9VTlJPTExFRF9JTlNOUywKKwkgIm1heC1hdmVyYWdlLXVucm9sbGVkLWluc25zIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgdG8gdW5yb2xsIGluIGEgbG9vcCBvbiBhdmVyYWdlIiwKKwkgODAsIDAsIDApCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdW5yb2xsaW5ncyBvZiBhIHNpbmdsZSBsb29wLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9VTlJPTExfVElNRVMsCisJIm1heC11bnJvbGwtdGltZXMiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgdW5yb2xsaW5ncyBvZiBhIHNpbmdsZSBsb29wIiwKKwk4LCAwLCAwKQorLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGEgcGVlbGVkIGxvb3AuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX1BFRUxFRF9JTlNOUywKKwkibWF4LXBlZWxlZC1pbnNucyIsCisJIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyBvZiBhIHBlZWxlZCBsb29wIiwKKwkxMDAsIDAsIDApCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVlbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcC4gICovCitERUZQQVJBTShQQVJBTV9NQVhfUEVFTF9USU1FUywKKwkibWF4LXBlZWwtdGltZXMiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVlbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcCIsCisJMTYsIDAsIDApCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVlbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcCB0aGF0IGlzIHBlZWxlZCBjb21wbGV0ZWx5LiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9QRUVMX0JSQU5DSEVTLAorCSJtYXgtcGVlbC1icmFuY2hlcyIsCisJIlRoZSBtYXhpbXVtIG51bWJlciBvZiBicmFuY2hlcyBvbiB0aGUgcGF0aCB0aHJvdWdoIHRoZSBwZWVsZWQgc2VxdWVuY2UiLAorCTMyLCAwLCAwKQorLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGEgcGVlbGVkIGxvb3AuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX0NPTVBMRVRFTFlfUEVFTEVEX0lOU05TLAorCSJtYXgtY29tcGxldGVseS1wZWVsZWQtaW5zbnMiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgb2YgYSBjb21wbGV0ZWx5IHBlZWxlZCBsb29wIiwKKwkxMDAsIDAsIDApCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVlbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcCB0aGF0IGlzIHBlZWxlZCBjb21wbGV0ZWx5LiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9DT01QTEVURUxZX1BFRUxfVElNRVMsCisJIm1heC1jb21wbGV0ZWx5LXBlZWwtdGltZXMiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVlbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcCB0aGF0IGlzIHBlZWxlZCBjb21wbGV0ZWx5IiwKKwkxNiwgMCwgMCkKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyBvZiBhIHBlZWxlZCBsb29wIHRoYXQgcm9sbHMgb25seSBvbmNlLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9PTkNFX1BFRUxFRF9JTlNOUywKKwkibWF4LW9uY2UtcGVlbGVkLWluc25zIiwKKwkiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGEgcGVlbGVkIGxvb3AgdGhhdCByb2xscyBvbmx5IG9uY2UiLAorCTQwMCwgMCwgMCkKKy8qIFRoZSBtYXhpbXVtIGRlcHRoIG9mIGEgbG9vcCBuZXN0IHdlIGNvbXBsZXRlbHkgcGVlbC4gICovCitERUZQQVJBTShQQVJBTV9NQVhfVU5ST0xMX0lURVJBVElPTlMsCisJICJtYXgtY29tcGxldGVseS1wZWVsLWxvb3AtbmVzdC1kZXB0aCIsCisJICJUaGUgbWF4aW11bSBkZXB0aCBvZiBhIGxvb3AgbmVzdCB3ZSBjb21wbGV0ZWx5IHBlZWwiLAorCSA4LCAwLCAwKQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgb2YgYW4gdW5zd2l0Y2hlZCBsb29wLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9VTlNXSVRDSF9JTlNOUywKKwkibWF4LXVuc3dpdGNoLWluc25zIiwKKwkiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGFuIHVuc3dpdGNoZWQgbG9vcCIsCisJNTAsIDAsIDApCisvKiBUaGUgbWF4aW11bSBsZXZlbCBvZiByZWN1cnNpb24gaW4gdW5zd2l0Y2hfc2luZ2xlX2xvb3AuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX1VOU1dJVENIX0xFVkVMLAorCSJtYXgtdW5zd2l0Y2gtbGV2ZWwiLAorCSJUaGUgbWF4aW11bSBudW1iZXIgb2YgdW5zd2l0Y2hpbmdzIGluIGEgc2luZ2xlIGxvb3AiLAorCTMsIDAsIDApCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcCB0aGUgYnJ1dGUgZm9yY2UgYWxnb3JpdGhtCisgICBmb3IgYW5hbHlzaXMgb2YgIyBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wIHRyaWVzIHRvIGV2YWx1YXRlLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9JVEVSQVRJT05TX1RPX1RSQUNLLAorCSJtYXgtaXRlcmF0aW9ucy10by10cmFjayIsCisJIkJvdW5kIG9uIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aGUgYnJ1dGUgZm9yY2UgIyBvZiBpdGVyYXRpb25zIGFuYWx5c2lzIGFsZ29yaXRobSBldmFsdWF0ZXMiLAorCTEwMDAsIDAsIDApCisvKiBBIGN1dG9mZiB0byBhdm9pZCBjb3N0bHkgY29tcHV0YXRpb25zIG9mIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBpbgorICAgdGhlIGRvbG9vcCB0cmFuc2Zvcm1hdGlvbi4gICovCitERUZQQVJBTShQQVJBTV9NQVhfSVRFUkFUSU9OU19DT01QVVRBVElPTl9DT1NULAorCSJtYXgtaXRlcmF0aW9ucy1jb21wdXRhdGlvbi1jb3N0IiwKKwkiQm91bmQgb24gdGhlIGNvc3Qgb2YgYW4gZXhwcmVzc2lvbiB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyIsCisJMTAsIDAsIDApCisKKy8qIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gdHVuZSBTTVMgTUFYIElJIGNhbGN1bGF0aW9ucy4gICovCitERUZQQVJBTShQQVJBTV9TTVNfTUFYX0lJX0ZBQ1RPUiwKKwkgInNtcy1tYXgtaWktZmFjdG9yIiwKKwkgIkEgZmFjdG9yIGZvciB0dW5pbmcgdGhlIHVwcGVyIGJvdW5kIHRoYXQgc3dpbmcgbW9kdWxvIHNjaGVkdWxlciB1c2VzIGZvciBzY2hlZHVsaW5nIGEgbG9vcCIsCisJIDEwMCwgMCwgMCkKKy8qIFRoZSBtaW5pbXVtIHZhbHVlIG9mIHN0YWdlIGNvdW50IHRoYXQgc3dpbmcgbW9kdWxvIHNjaGVkdWxlciB3aWxsIGdlbmVyYXRlLiAgKi8KK0RFRlBBUkFNKFBBUkFNX1NNU19NSU5fU0MsCisgICAgICAgICJzbXMtbWluLXNjIiwKKyAgICAgICAgIlRoZSBtaW5pbXVtIHZhbHVlIG9mIHN0YWdlIGNvdW50IHRoYXQgc3dpbmcgbW9kdWxvIHNjaGVkdWxlciB3aWxsIGdlbmVyYXRlLiIsCisgICAgICAgIDIsIDEsIDEpCitERUZQQVJBTShQQVJBTV9TTVNfREZBX0hJU1RPUlksCisJICJzbXMtZGZhLWhpc3RvcnkiLAorCSAiVGhlIG51bWJlciBvZiBjeWNsZXMgdGhlIHN3aW5nIG1vZHVsbyBzY2hlZHVsZXIgY29uc2lkZXJzIHdoZW4gY2hlY2tpbmcgY29uZmxpY3RzIHVzaW5nIERGQSIsCisJIDAsIDAsIDApCitERUZQQVJBTShQQVJBTV9TTVNfTE9PUF9BVkVSQUdFX0NPVU5UX1RIUkVTSE9MRCwKKwkgInNtcy1sb29wLWF2ZXJhZ2UtY291bnQtdGhyZXNob2xkIiwKKwkgIkEgdGhyZXNob2xkIG9uIHRoZSBhdmVyYWdlIGxvb3AgY291bnQgY29uc2lkZXJlZCBieSB0aGUgc3dpbmcgbW9kdWxvIHNjaGVkdWxlciIsCisJIDAsIDAsIDApCisKK0RFRlBBUkFNKEhPVF9CQl9DT1VOVF9XU19QRVJNSUxMRSwKKwkgImhvdC1iYi1jb3VudC13cy1wZXJtaWxsZSIsCisgICAgICAgICAiQSBiYXNpYyBibG9jayBwcm9maWxlIGNvdW50IGlzIGNvbnNpZGVyZWQgaG90IGlmIGl0IGNvbnRyaWJ1dGVzIHRvICIKKyAgICAgICAgICJ0aGUgZ2l2ZW4gcGVybWlsbGFnZSBvZiB0aGUgZW50aXJlIHByb2ZpbGVkIGV4ZWN1dGlvbiIsCisJIDk5OSwgMCwgMTAwMCkKK0RFRlBBUkFNKEhPVF9CQl9GUkVRVUVOQ1lfRlJBQ1RJT04sCisJICJob3QtYmItZnJlcXVlbmN5LWZyYWN0aW9uIiwKKwkgIlNlbGVjdCBmcmFjdGlvbiBvZiB0aGUgbWF4aW1hbCBmcmVxdWVuY3kgb2YgZXhlY3V0aW9ucyBvZiBiYXNpYyBibG9jayBpbiBmdW5jdGlvbiBnaXZlbiBiYXNpYyBibG9jayBuZWVkcyB0byBoYXZlIHRvIGJlIGNvbnNpZGVyZWQgaG90IiwKKwkgMTAwMCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX0FMSUdOX1RIUkVTSE9MRCwKKwkgICJhbGlnbi10aHJlc2hvbGQiLAorCSAgIlNlbGVjdCBmcmFjdGlvbiBvZiB0aGUgbWF4aW1hbCBmcmVxdWVuY3kgb2YgZXhlY3V0aW9ucyBvZiBiYXNpYyBibG9jayBpbiBmdW5jdGlvbiBnaXZlbiBiYXNpYyBibG9jayBnZXQgYWxpZ25tZW50IiwKKwkgIDEwMCwgMSwgMCkKKworREVGUEFSQU0gKFBBUkFNX0FMSUdOX0xPT1BfSVRFUkFUSU9OUywKKwkgICJhbGlnbi1sb29wLWl0ZXJhdGlvbnMiLAorCSAgIkxvb3BzIGl0ZXJhdGluZyBhdCBsZWFzdCBzZWxlY3RlZCBudW1iZXIgb2YgaXRlcmF0aW9ucyB3aWxsIGdldCBsb29wIGFsaWduZW1lbnQuIiwKKwkgIDQsIDAsIDApCisKKy8qIEZvciBndWVzc2VkIHByb2ZpbGVzLCB0aGUgbG9vcHMgaGF2aW5nIHVua25vd24gbnVtYmVyIG9mIGl0ZXJhdGlvbnMKKyAgIGFyZSBwcmVkaWN0ZWQgdG8gaXRlcmF0ZSByZWxhdGl2ZWx5IGZldyAoMTApIHRpbWVzIGF0IGF2ZXJhZ2UuCisgICBGb3IgZnVuY3Rpb25zIGNvbnRhaW5pbmcgb25lIGxvb3Agd2l0aCBsYXJnZSBrbm93biBudW1iZXIgb2YgaXRlcmF0aW9ucworICAgYW5kIG90aGVyIGxvb3BzIGhhdmluZyB1bmJvdW5kZWQgbG9vcHMgd2Ugd291bGQgZW5kIHVwIHByZWRpY3RpbmcgYWxsCisgICB0aGUgb3RoZXIgbG9vcHMgY29sZCB0aGF0IGlzIG5vdCB1c3VhbGx5IHRoZSBjYXNlLiAgU28gd2UgbmVlZCB0byBhcnRpZmljaWFsbHkKKyAgIGZsYXR0ZW4gdGhlIHByb2ZpbGUuCisKKyAgIFdlIG5lZWQgdG8gY3V0IHRoZSBtYXhpbWFsIHByZWRpY3RlZCBpdGVyYXRpb25zIHRvIGxhcmdlIGVub3VnaCBpdGVyYXRpb25zCisgICBzbyB0aGUgbG9vcCBhcHBlYXJzIGltcG9ydGFudCwgYnV0IHNhZmVseSB3aXRoaW4gbWF4aW11bSBob3RuZXNzCisgICByYW5nZS4gICovCisKK0RFRlBBUkFNKFBBUkFNX01BWF9QUkVESUNURURfSVRFUkFUSU9OUywKKwkgIm1heC1wcmVkaWN0ZWQtaXRlcmF0aW9ucyIsCisJICJUaGUgbWF4aW11bSBudW1iZXIgb2YgbG9vcCBpdGVyYXRpb25zIHdlIHByZWRpY3Qgc3RhdGljYWxseSIsCisJIDEwMCwgMCwgMCkKK0RFRlBBUkFNKFRSQUNFUl9EWU5BTUlDX0NPVkVSQUdFX0ZFRURCQUNLLAorCSAidHJhY2VyLWR5bmFtaWMtY292ZXJhZ2UtZmVlZGJhY2siLAorCSAiVGhlIHBlcmNlbnRhZ2Ugb2YgZnVuY3Rpb24sIHdlaWdodGVkIGJ5IGV4ZWN1dGlvbiBmcmVxdWVuY3ksIHRoYXQgbXVzdCBiZSBjb3ZlcmVkIGJ5IHRyYWNlIGZvcm1hdGlvbi4gVXNlZCB3aGVuIHByb2ZpbGUgZmVlZGJhY2sgaXMgYXZhaWxhYmxlIiwKKwkgOTUsIDAsIDEwMCkKK0RFRlBBUkFNKFRSQUNFUl9EWU5BTUlDX0NPVkVSQUdFLAorCSAidHJhY2VyLWR5bmFtaWMtY292ZXJhZ2UiLAorCSAiVGhlIHBlcmNlbnRhZ2Ugb2YgZnVuY3Rpb24sIHdlaWdodGVkIGJ5IGV4ZWN1dGlvbiBmcmVxdWVuY3ksIHRoYXQgbXVzdCBiZSBjb3ZlcmVkIGJ5IHRyYWNlIGZvcm1hdGlvbi4gVXNlZCB3aGVuIHByb2ZpbGUgZmVlZGJhY2sgaXMgbm90IGF2YWlsYWJsZSIsCisJIDc1LCAwLCAxMDApCitERUZQQVJBTShUUkFDRVJfTUFYX0NPREVfR1JPV1RILAorCSAidHJhY2VyLW1heC1jb2RlLWdyb3d0aCIsCisJICJNYXhpbWFsIGNvZGUgZ3Jvd3RoIGNhdXNlZCBieSB0YWlsIGR1cGxpY2F0aW9uIChpbiBwZXJjZW50KSIsCisJIDEwMCwgMCwgMCkKK0RFRlBBUkFNKFRSQUNFUl9NSU5fQlJBTkNIX1JBVElPLAorCSAidHJhY2VyLW1pbi1icmFuY2gtcmF0aW8iLAorCSAiU3RvcCByZXZlcnNlIGdyb3d0aCBpZiB0aGUgcmV2ZXJzZSBwcm9iYWJpbGl0eSBvZiBiZXN0IGVkZ2UgaXMgbGVzcyB0aGFuIHRoaXMgdGhyZXNob2xkIChpbiBwZXJjZW50KSIsCisJIDEwLCAwLCAxMDApCitERUZQQVJBTShUUkFDRVJfTUlOX0JSQU5DSF9QUk9CQUJJTElUWV9GRUVEQkFDSywKKwkgInRyYWNlci1taW4tYnJhbmNoLXByb2JhYmlsaXR5LWZlZWRiYWNrIiwKKwkgIlN0b3AgZm9yd2FyZCBncm93dGggaWYgdGhlIHByb2JhYmlsaXR5IG9mIGJlc3QgZWRnZSBpcyBsZXNzIHRoYW4gdGhpcyB0aHJlc2hvbGQgKGluIHBlcmNlbnQpLiBVc2VkIHdoZW4gcHJvZmlsZSBmZWVkYmFjayBpcyBhdmFpbGFibGUiLAorCSA4MCwgMCwgMTAwKQorREVGUEFSQU0oVFJBQ0VSX01JTl9CUkFOQ0hfUFJPQkFCSUxJVFksCisJICJ0cmFjZXItbWluLWJyYW5jaC1wcm9iYWJpbGl0eSIsCisJICJTdG9wIGZvcndhcmQgZ3Jvd3RoIGlmIHRoZSBwcm9iYWJpbGl0eSBvZiBiZXN0IGVkZ2UgaXMgbGVzcyB0aGFuIHRoaXMgdGhyZXNob2xkIChpbiBwZXJjZW50KS4gVXNlZCB3aGVuIHByb2ZpbGUgZmVlZGJhY2sgaXMgbm90IGF2YWlsYWJsZSIsCisJIDUwLCAwLCAxMDApCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbmNvbWluZyBlZGdlcyB0byBjb25zaWRlciBmb3IgY3Jvc3NqdW1waW5nLiAgKi8KK0RFRlBBUkFNKFBBUkFNX01BWF9DUk9TU0pVTVBfRURHRVMsCisJICJtYXgtY3Jvc3NqdW1wLWVkZ2VzIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbmNvbWluZyBlZGdlcyB0byBjb25zaWRlciBmb3IgY3Jvc3NqdW1waW5nIiwKKwkgMTAwLCAwLCAwKQorCisvKiBUaGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hpbmcgaW5zdHJ1Y3Rpb25zIHRvIGNvbnNpZGVyIGZvciBjcm9zc2p1bXBpbmcuICAqLworREVGUEFSQU0oUEFSQU1fTUlOX0NST1NTSlVNUF9JTlNOUywKKyAgICAgIm1pbi1jcm9zc2p1bXAtaW5zbnMiLAorICAgICAiVGhlIG1pbmltdW0gbnVtYmVyIG9mIG1hdGNoaW5nIGluc3RydWN0aW9ucyB0byBjb25zaWRlciBmb3IgY3Jvc3NqdW1waW5nIiwKKyAgICAgNSwgMSwgMCkKKworLyogVGhlIG1heGltdW0gbnVtYmVyIGV4cGFuc2lvbiBmYWN0b3Igd2hlbiBjb3B5aW5nIGJhc2ljIGJsb2Nrcy4gICovCitERUZQQVJBTShQQVJBTV9NQVhfR1JPV19DT1BZX0JCX0lOU05TLAorICAgICAibWF4LWdyb3ctY29weS1iYi1pbnNucyIsCisgICAgICJUaGUgbWF4aW11bSBleHBhbnNpb24gZmFjdG9yIHdoZW4gY29weWluZyBiYXNpYyBibG9ja3MiLAorICAgICA4LCAwLCAwKQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgdG8gZHVwbGljYXRlIHdoZW4gdW5mYWN0b3JpbmcgY29tcHV0ZWQgZ290b3MuICAqLworREVGUEFSQU0oUEFSQU1fTUFYX0dPVE9fRFVQTElDQVRJT05fSU5TTlMsCisgICAgICJtYXgtZ290by1kdXBsaWNhdGlvbi1pbnNucyIsCisgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgdG8gZHVwbGljYXRlIHdoZW4gdW5mYWN0b3JpbmcgY29tcHV0ZWQgZ290b3MiLAorICAgICA4LCAwLCAwKQorCisvKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgcGF0aCBjb25zaWRlcmVkIGluIGNzZS4gICovCitERUZQQVJBTShQQVJBTV9NQVhfQ1NFX1BBVEhfTEVOR1RILAorCSAibWF4LWNzZS1wYXRoLWxlbmd0aCIsCisJICJUaGUgbWF4aW11bSBsZW5ndGggb2YgcGF0aCBjb25zaWRlcmVkIGluIGNzZSIsCisJIDEwLCAxLCAwKQorREVGUEFSQU0oUEFSQU1fTUFYX0NTRV9JTlNOUywKKwkgIm1heC1jc2UtaW5zbnMiLAorCSAiVGhlIG1heGltdW0gaW5zdHJ1Y3Rpb25zIENTRSBwcm9jZXNzIGJlZm9yZSBmbHVzaGluZyIsCisJIDEwMDAsIDAsIDApCisKKy8qIFRoZSBjb3N0IG9mIGV4cHJlc3Npb24gaW4gbG9vcCBpbnZhcmlhbnQgbW90aW9uIHRoYXQgaXMgY29uc2lkZXJlZAorICAgZXhwZW5zaXZlLiAgKi8KK0RFRlBBUkFNKFBBUkFNX0xJTV9FWFBFTlNJVkUsCisJICJsaW0tZXhwZW5zaXZlIiwKKwkgIlRoZSBtaW5pbXVtIGNvc3Qgb2YgYW4gZXhwZW5zaXZlIGV4cHJlc3Npb24gaW4gdGhlIGxvb3AgaW52YXJpYW50IG1vdGlvbiIsCisJIDIwLCAwLCAwKQorCisvKiBCb3VuZCBvbiBudW1iZXIgb2YgY2FuZGlkYXRlcyBmb3IgaW5kdWN0aW9uIHZhcmlhYmxlcyBiZWxvdyB0aGF0CisgICBhbGwgY2FuZGlkYXRlcyBhcmUgY29uc2lkZXJlZCBmb3IgZWFjaCB1c2UgaW4gaW5kdWN0aW9uIHZhcmlhYmxlCisgICBvcHRpbWl6YXRpb25zLiAgKi8KKworREVGUEFSQU0oUEFSQU1fSVZfQ09OU0lERVJfQUxMX0NBTkRJREFURVNfQk9VTkQsCisJICJpdi1jb25zaWRlci1hbGwtY2FuZGlkYXRlcy1ib3VuZCIsCisJICJCb3VuZCBvbiBudW1iZXIgb2YgY2FuZGlkYXRlcyBiZWxvdyB0aGF0IGFsbCBjYW5kaWRhdGVzIGFyZSBjb25zaWRlcmVkIGluIGl2IG9wdGltaXphdGlvbnMiLAorCSAzMCwgMCwgMCkKKworLyogVGhlIGluZHVjdGlvbiB2YXJpYWJsZSBvcHRpbWl6YXRpb25zIGdpdmUgdXAgb24gbG9vcHMgdGhhdCBjb250YWluIG1vcmUKKyAgIGluZHVjdGlvbiB2YXJpYWJsZSB1c2VzLiAgKi8KKworREVGUEFSQU0oUEFSQU1fSVZfTUFYX0NPTlNJREVSRURfVVNFUywKKwkgIml2LW1heC1jb25zaWRlcmVkLXVzZXMiLAorCSAiQm91bmQgb24gbnVtYmVyIG9mIGl2IHVzZXMgaW4gbG9vcCBvcHRpbWl6ZWQgaW4gaXYgb3B0aW1pemF0aW9ucyIsCisJIDI1MCwgMCwgMCkKKworLyogSWYgdGhlcmUgYXJlIGF0IG1vc3QgdGhpcyBudW1iZXIgb2YgaXZzIGluIHRoZSBzZXQsIHRyeSByZW1vdmluZyB1bm5lY2Vzc2FyeQorICAgaXZzIGZyb20gdGhlIHNldCBhbHdheXMuICAqLworCitERUZQQVJBTShQQVJBTV9JVl9BTFdBWVNfUFJVTkVfQ0FORF9TRVRfQk9VTkQsCisJICJpdi1hbHdheXMtcHJ1bmUtY2FuZC1zZXQtYm91bmQiLAorCSAiSWYgbnVtYmVyIG9mIGNhbmRpZGF0ZXMgaW4gdGhlIHNldCBpcyBzbWFsbGVyLCB3ZSBhbHdheXMgdHJ5IHRvIHJlbW92ZSB1bnVzZWQgaXZzIGR1cmluZyBpdHMgb3B0aW1pemF0aW9uIiwKKwkgMTAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX1NDRVZfTUFYX0VYUFJfU0laRSwKKyAJICJzY2V2LW1heC1leHByLXNpemUiLAorCSAiQm91bmQgb24gc2l6ZSBvZiBleHByZXNzaW9ucyB1c2VkIGluIHRoZSBzY2FsYXIgZXZvbHV0aW9ucyBhbmFseXplciIsCisJIDEwMCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fU0NFVl9NQVhfRVhQUl9DT01QTEVYSVRZLAorCSAic2Nldi1tYXgtZXhwci1jb21wbGV4aXR5IiwKKwkgIkJvdW5kIG9uIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBleHByZXNzaW9ucyBpbiB0aGUgc2NhbGFyIGV2b2x1dGlvbnMgYW5hbHl6ZXIiLAorCSAxMCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fT01FR0FfTUFYX1ZBUlMsCisgCSAib21lZ2EtbWF4LXZhcnMiLAorCSAiQm91bmQgb24gdGhlIG51bWJlciBvZiB2YXJpYWJsZXMgaW4gT21lZ2EgY29uc3RyYWludCBzeXN0ZW1zIiwKKwkgMTI4LCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9PTUVHQV9NQVhfR0VRUywKKyAJICJvbWVnYS1tYXgtZ2VxcyIsCisJICJCb3VuZCBvbiB0aGUgbnVtYmVyIG9mIGluZXF1YWxpdGllcyBpbiBPbWVnYSBjb25zdHJhaW50IHN5c3RlbXMiLAorCSAyNTYsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX09NRUdBX01BWF9FUVMsCisgCSAib21lZ2EtbWF4LWVxcyIsCisJICJCb3VuZCBvbiB0aGUgbnVtYmVyIG9mIGVxdWFsaXRpZXMgaW4gT21lZ2EgY29uc3RyYWludCBzeXN0ZW1zIiwKKwkgMTI4LCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9PTUVHQV9NQVhfV0lMRF9DQVJEUywKKyAJICJvbWVnYS1tYXgtd2lsZC1jYXJkcyIsCisJICJCb3VuZCBvbiB0aGUgbnVtYmVyIG9mIHdpbGQgY2FyZHMgaW4gT21lZ2EgY29uc3RyYWludCBzeXN0ZW1zIiwKKwkgMTgsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX09NRUdBX0hBU0hfVEFCTEVfU0laRSwKKyAJICJvbWVnYS1oYXNoLXRhYmxlLXNpemUiLAorCSAiQm91bmQgb24gdGhlIHNpemUgb2YgdGhlIGhhc2ggdGFibGUgaW4gT21lZ2EgY29uc3RyYWludCBzeXN0ZW1zIiwKKwkgNTUwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9PTUVHQV9NQVhfS0VZUywKKyAJICJvbWVnYS1tYXgta2V5cyIsCisJICJCb3VuZCBvbiB0aGUgbnVtYmVyIG9mIGtleXMgaW4gT21lZ2EgY29uc3RyYWludCBzeXN0ZW1zIiwKKwkgNTAwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9PTUVHQV9FTElNSU5BVEVfUkVEVU5EQU5UX0NPTlNUUkFJTlRTLAorIAkgIm9tZWdhLWVsaW1pbmF0ZS1yZWR1bmRhbnQtY29uc3RyYWludHMiLAorCSAiV2hlbiBzZXQgdG8gMSwgdXNlIGV4cGVuc2l2ZSBtZXRob2RzIHRvIGVsaW1pbmF0ZSBhbGwgcmVkdW5kYW50IGNvbnN0cmFpbnRzIiwKKwkgMCwgMCwgMSkKKworREVGUEFSQU0oUEFSQU1fVkVDVF9NQVhfVkVSU0lPTl9GT1JfQUxJR05NRU5UX0NIRUNLUywKKyAgICAgICAgICJ2ZWN0LW1heC12ZXJzaW9uLWZvci1hbGlnbm1lbnQtY2hlY2tzIiwKKyAgICAgICAgICJCb3VuZCBvbiBudW1iZXIgb2YgcnVudGltZSBjaGVja3MgaW5zZXJ0ZWQgYnkgdGhlIHZlY3Rvcml6ZXIncyBsb29wIHZlcnNpb25pbmcgZm9yIGFsaWdubWVudCBjaGVjayIsCisgICAgICAgICA2LCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9WRUNUX01BWF9WRVJTSU9OX0ZPUl9BTElBU19DSEVDS1MsCisgICAgICAgICAidmVjdC1tYXgtdmVyc2lvbi1mb3ItYWxpYXMtY2hlY2tzIiwKKyAgICAgICAgICJCb3VuZCBvbiBudW1iZXIgb2YgcnVudGltZSBjaGVja3MgaW5zZXJ0ZWQgYnkgdGhlIHZlY3Rvcml6ZXIncyBsb29wIHZlcnNpb25pbmcgZm9yIGFsaWFzIGNoZWNrIiwKKyAgICAgICAgIDEwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfQ1NFTElCX01FTU9SWV9MT0NBVElPTlMsCisJICJtYXgtY3NlbGliLW1lbW9yeS1sb2NhdGlvbnMiLAorCSAiVGhlIG1heGltdW0gbWVtb3J5IGxvY2F0aW9ucyByZWNvcmRlZCBieSBjc2VsaWIiLAorCSA1MDAsIDAsIDApCisKKyNpZmRlZiBFTkFCTEVfR0NfQUxXQVlTX0NPTExFQ1QKKyMgZGVmaW5lIEdHQ19NSU5fRVhQQU5EX0RFRkFVTFQgMAorIyBkZWZpbmUgR0dDX01JTl9IRUFQU0laRV9ERUZBVUxUIDAKKyNlbHNlCisjIGRlZmluZSBHR0NfTUlOX0VYUEFORF9ERUZBVUxUIDMwCisjIGRlZmluZSBHR0NfTUlOX0hFQVBTSVpFX0RFRkFVTFQgNDA5NgorI2VuZGlmCisKK0RFRlBBUkFNKEdHQ19NSU5fRVhQQU5ELAorCSAiZ2djLW1pbi1leHBhbmQiLAorCSAiTWluaW11bSBoZWFwIGV4cGFuc2lvbiB0byB0cmlnZ2VyIGdhcmJhZ2UgY29sbGVjdGlvbiwgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBoZWFwIiwKKwkgR0dDX01JTl9FWFBBTkRfREVGQVVMVCwgMCwgMCkKKworREVGUEFSQU0oR0dDX01JTl9IRUFQU0laRSwKKwkgImdnYy1taW4taGVhcHNpemUiLAorCSAiTWluaW11bSBoZWFwIHNpemUgYmVmb3JlIHdlIHN0YXJ0IGNvbGxlY3RpbmcgZ2FyYmFnZSwgaW4ga2lsb2J5dGVzIiwKKwkgR0dDX01JTl9IRUFQU0laRV9ERUZBVUxULCAwLCAwKQorCisjdW5kZWYgR0dDX01JTl9FWFBBTkRfREVGQVVMVAorI3VuZGVmIEdHQ19NSU5fSEVBUFNJWkVfREVGQVVMVAorCitERUZQQVJBTShQQVJBTV9NQVhfUkVMT0FEX1NFQVJDSF9JTlNOUywKKwkgIm1heC1yZWxvYWQtc2VhcmNoLWluc25zIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gc2VhcmNoIGJhY2t3YXJkIHdoZW4gbG9va2luZyBmb3IgZXF1aXZhbGVudCByZWxvYWQiLAorCSAxMDAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX1NJTktfRlJFUVVFTkNZX1RIUkVTSE9MRCwKKwkgInNpbmstZnJlcXVlbmN5LXRocmVzaG9sZCIsCisJICJUYXJnZXQgYmxvY2sncyByZWxhdGl2ZSBleGVjdXRpb24gZnJlcXVlbmN5IChhcyBhIHBlcmNlbnRhZ2UpIHJlcXVpcmVkIHRvIHNpbmsgYSBzdGF0ZW1lbnQiLAorCSA3NSwgMCwgMTAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfU0NIRURfUkVHSU9OX0JMT0NLUywKKwkgIm1heC1zY2hlZC1yZWdpb24tYmxvY2tzIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgaW4gYSByZWdpb24gdG8gYmUgY29uc2lkZXJlZCBmb3IgaW50ZXJibG9jayBzY2hlZHVsaW5nIiwKKwkgMTAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX01BWF9TQ0hFRF9SRUdJT05fSU5TTlMsCisJICJtYXgtc2NoZWQtcmVnaW9uLWluc25zIiwKKwkgIlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnNucyBpbiBhIHJlZ2lvbiB0byBiZSBjb25zaWRlcmVkIGZvciBpbnRlcmJsb2NrIHNjaGVkdWxpbmciLAorCSAxMDAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX01BWF9QSVBFTElORV9SRUdJT05fQkxPQ0tTLAorCSAibWF4LXBpcGVsaW5lLXJlZ2lvbi1ibG9ja3MiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyBpbiBhIHJlZ2lvbiB0byBiZSBjb25zaWRlcmVkIGZvciBpbnRlcmJsb2NrIHNjaGVkdWxpbmciLAorCSAxNSwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fTUFYX1BJUEVMSU5FX1JFR0lPTl9JTlNOUywKKwkgIm1heC1waXBlbGluZS1yZWdpb24taW5zbnMiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIGluIGEgcmVnaW9uIHRvIGJlIGNvbnNpZGVyZWQgZm9yIGludGVyYmxvY2sgc2NoZWR1bGluZyIsCisJIDIwMCwgMCwgMCkKKworREVGUEFSQU0oUEFSQU1fTUlOX1NQRUNfUFJPQiwKKyAgICAgICAgICJtaW4tc3BlYy1wcm9iIiwKKyAgICAgICAgICJUaGUgbWluaW11bSBwcm9iYWJpbGl0eSBvZiByZWFjaGluZyBhIHNvdXJjZSBibG9jayBmb3IgaW50ZXJibG9jayBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nIiwKKyAgICAgICAgIDQwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfU0NIRURfRVhURU5EX1JFR0lPTlNfSVRFUlMsCisgICAgICAgICAibWF4LXNjaGVkLWV4dGVuZC1yZWdpb25zLWl0ZXJzIiwKKyAgICAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aHJvdWdoIENGRyB0byBleHRlbmQgcmVnaW9ucyIsCisgICAgICAgICAwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfU0NIRURfSU5TTl9DT05GTElDVF9ERUxBWSwKKyAgICAgICAgICJtYXgtc2NoZWQtaW5zbi1jb25mbGljdC1kZWxheSIsCisgICAgICAgICAiVGhlIG1heGltdW0gY29uZmxpY3QgZGVsYXkgZm9yIGFuIGluc24gdG8gYmUgY29uc2lkZXJlZCBmb3Igc3BlY3VsYXRpdmUgbW90aW9uIiwKKyAgICAgICAgIDMsIDEsIDEwKQorCitERUZQQVJBTShQQVJBTV9TQ0hFRF9TUEVDX1BST0JfQ1VUT0ZGLAorICAgICAgICAgInNjaGVkLXNwZWMtcHJvYi1jdXRvZmYiLAorICAgICAgICAgIlRoZSBtaW5pbWFsIHByb2JhYmlsaXR5IG9mIHNwZWN1bGF0aW9uIHN1Y2Nlc3MgKGluIHBlcmNlbnRzKSwgc28gdGhhdCBzcGVjdWxhdGl2ZSBpbnNuIHdpbGwgYmUgc2NoZWR1bGVkLiIsCisgICAgICAgICA0MCwgMCwgMTAwKQorCitERUZQQVJBTShQQVJBTV9TQ0hFRF9TVEFURV9FREdFX1BST0JfQ1VUT0ZGLAorICAgICAgICAgInNjaGVkLXN0YXRlLWVkZ2UtcHJvYi1jdXRvZmYiLAorICAgICAgICAgIlRoZSBtaW5pbXVtIHByb2JhYmlsaXR5IGFuIGVkZ2UgbXVzdCBoYXZlIGZvciB0aGUgc2NoZWR1bGVyIHRvIHNhdmUgaXRzIHN0YXRlIGFjcm9zcyBpdC4iLAorICAgICAgICAgMTAsIDAsIDEwMCkKKworREVGUEFSQU0oUEFSQU1fU0VMU0NIRURfTUFYX0xPT0tBSEVBRCwKKyAgICAgICAgICJzZWxzY2hlZC1tYXgtbG9va2FoZWFkIiwKKyAgICAgICAgICJUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBsb29rYWhlYWQgd2luZG93IG9mIHNlbGVjdGl2ZSBzY2hlZHVsaW5nIiwKKyAgICAgICAgIDUwLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9TRUxTQ0hFRF9NQVhfU0NIRURfVElNRVMsCisgICAgICAgICAic2Vsc2NoZWQtbWF4LXNjaGVkLXRpbWVzIiwKKyAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0aGF0IGFuIGluc24gY291bGQgYmUgc2NoZWR1bGVkIiwKKyAgICAgICAgIDIsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX1NFTFNDSEVEX0lOU05TX1RPX1JFTkFNRSwKKyAgICAgICAgICJzZWxzY2hlZC1pbnNucy10by1yZW5hbWUiLAorICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBpbiB0aGUgcmVhZHkgbGlzdCB0aGF0IGFyZSBjb25zaWRlcmVkIGVsaWdpYmxlIGZvciByZW5hbWluZyIsCisgICAgICAgICAyLCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fU0NIRURfTUVNX1RSVUVfREVQX0NPU1QsCisJICAic2NoZWQtbWVtLXRydWUtZGVwLWNvc3QiLAorCSAgIk1pbmltYWwgZGlzdGFuY2UgYmV0d2VlbiBwb3NzaWJseSBjb25mbGljdGluZyBzdG9yZSBhbmQgbG9hZCIsCisJICAxLCAwLCAwKQorCitERUZQQVJBTShQQVJBTV9NQVhfTEFTVF9WQUxVRV9SVEwsCisJICJtYXgtbGFzdC12YWx1ZS1ydGwiLAorCSAiVGhlIG1heGltdW0gbnVtYmVyIG9mIFJUTCBub2RlcyB0aGF0IGNhbiBiZSByZWNvcmRlZCBhcyBjb21iaW5lcidzIGxhc3QgdmFsdWUiLAorCSAxMDAwMCwgMCwgMCkKKworLyogSU5URUdFUl9DU1Qgbm9kZXMgYXJlIHNoYXJlZCBmb3IgdmFsdWVzIFt7LTEsMH0gLi4gTikgZm9yCisgICB7c2lnbmVkLHVuc2lnbmVkfSBpbnRlZ3JhbCB0eXBlcy4gIFRoaXMgZGV0ZXJtaW5lcyBOLgorICAgRXhwZXJpbWVudGF0aW9uIHNob3dzIDI1MSB0byBiZSBhIGdvb2QgdmFsdWUgdGhhdCBnZW5lcmF0ZXMgdGhlCisgICBsZWFzdCBhbW91bnQgb2YgZ2FyYmFnZSBmb3IgYWxsb2NhdGluZyB0aGUgVFJFRV9WRUMgc3RvcmFnZS4gICovCitERUZQQVJBTSAoUEFSQU1fSU5URUdFUl9TSEFSRV9MSU1JVCwKKwkgICJpbnRlZ2VyLXNoYXJlLWxpbWl0IiwKKwkgICJUaGUgdXBwZXIgYm91bmQgZm9yIHNoYXJpbmcgaW50ZWdlciBjb25zdGFudHMiLAorCSAgMjUxLCAyLCAyKQorCitERUZQQVJBTSAoUEFSQU1fU1NQX0JVRkZFUl9TSVpFLAorCSAgInNzcC1idWZmZXItc2l6ZSIsCisJICAiVGhlIGxvd2VyIGJvdW5kIGZvciBhIGJ1ZmZlciB0byBiZSBjb25zaWRlcmVkIGZvciBzdGFjayBzbWFzaGluZyBwcm90ZWN0aW9uIiwKKwkgIDgsIDEsIDApCisKKy8qIFdoZW4gd2UgdGhyZWFkIHRocm91Z2ggYSBibG9jayB3ZSBoYXZlIHRvIG1ha2UgY29waWVzIG9mIHRoZQorICAgc3RhdGVtZW50cyB3aXRoaW4gdGhlIGJsb2NrLiAgQ2xlYXJseSBmb3IgbGFyZ2UgYmxvY2tzIHRoZSBjb2RlCisgICBkdXBsaWNhdGlvbiBpcyBiYWQuCisKKyAgIFBBUkFNX01BWF9KVU1QX1RIUkVBRF9EVVBMSUNBVElPTl9TVE1UUyBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyCisgICBvZiBzdGF0ZW1lbnRzIGFuZCBQSEkgbm9kZXMgYWxsb3dlZCBpbiBhIGJsb2NrIHdoaWNoIGlzIGdvaW5nIHRvCisgICBiZSBkdXBsaWNhdGVkIGZvciB0aHJlYWQganVtcGluZyBwdXJwb3Nlcy4KKworICAgU29tZSBzaW1wbGUgYW5hbHlzaXMgc2hvd2VkIHRoYXQgbW9yZSB0aGFuIDk5JSBvZiB0aGUganVtcAorICAgdGhyZWFkaW5nIG9wcG9ydHVuaXRpZXMgYXJlIGZvciBibG9ja3Mgd2l0aCBsZXNzIHRoYW4gMTUKKyAgIHN0YXRlbWVudHMuICBTbyB3ZSBjYW4gZ2V0IHRoZSBiZW5lZml0cyBvZiBqdW1wIHRocmVhZGluZworICAgd2l0aG91dCBleGNlc3NpdmUgY29kZSBibG9hdCBmb3IgcGF0aG9sb2dpY2FsIGNhc2VzIHdpdGggdGhlCisgICB0aHJvdHRsZSBzZXQgYXQgMTUgc3RhdGVtZW50cy4gICovCitERUZQQVJBTSAoUEFSQU1fTUFYX0pVTVBfVEhSRUFEX0RVUExJQ0FUSU9OX1NUTVRTLAorCSAgIm1heC1qdW1wLXRocmVhZC1kdXBsaWNhdGlvbi1zdG10cyIsCisgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIHN0YXRlbWVudHMgYWxsb3dlZCBpbiBhIGJsb2NrIHRoYXQgbmVlZHMgdG8gYmUgZHVwbGljYXRlZCB3aGVuIHRocmVhZGluZyBqdW1wcyIsCisJICAxNSwgMCwgMCkKKworLyogVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmllbGRzIGEgdmFyaWFibGUgbWF5IGhhdmUgYmVmb3JlIHRoZSBwb2ludGVyIGFuYWx5c2lzIG1hY2hpbmVyeQorICAgd2lsbCBzdG9wIHRyeWluZyB0byB0cmVhdCBpdCBpbiBhIGZpZWxkLXNlbnNpdGl2ZSBtYW5uZXIuCisgICBUaGVyZSBhcmUgcHJvZ3JhbXMgb3V0IHRoZXJlIHdpdGggdGhvdXNhbmRzIG9mIGZpZWxkcyBwZXIgc3RydWN0dXJlLCBhbmQgaGFuZGxpbmcgdGhlbQorICAgZmllbGQtc2Vuc2l0aXZlbHkgaXMgbm90IHdvcnRoIHRoZSBjb3N0LiAgKi8KK0RFRlBBUkFNIChQQVJBTV9NQVhfRklFTERTX0ZPUl9GSUVMRF9TRU5TSVRJVkUsCisgICAgICAgICAgIm1heC1maWVsZHMtZm9yLWZpZWxkLXNlbnNpdGl2ZSIsCisJICAiTWF4aW11bSBudW1iZXIgb2YgZmllbGRzIGluIGEgc3RydWN0dXJlIGJlZm9yZSBwb2ludGVyIGFuYWx5c2lzIHRyZWF0cyB0aGUgc3RydWN0dXJlIGFzIGEgc2luZ2xlIHZhcmlhYmxlIiwKKwkgIDAsIDAsIDApCisKK0RFRlBBUkFNKFBBUkFNX01BWF9TQ0hFRF9SRUFEWV9JTlNOUywKKwkgIm1heC1zY2hlZC1yZWFkeS1pbnNucyIsCisJICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHJlYWR5IHRvIGJlIGlzc3VlZCB0byBiZSBjb25zaWRlcmVkIGJ5IHRoZSBzY2hlZHVsZXIgZHVyaW5nIHRoZSBmaXJzdCBzY2hlZHVsaW5nIHBhc3MiLAorCSAxMDAsIDAsIDApCisKKy8qIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFjdGl2ZSBsb2NhbCBzdG9yZXMgUlRMIERTRSB3aWxsIGNvbnNpZGVyLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9NQVhfRFNFX0FDVElWRV9MT0NBTF9TVE9SRVMsCisJICAibWF4LWRzZS1hY3RpdmUtbG9jYWwtc3RvcmVzIiwKKwkgICJNYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgbG9jYWwgc3RvcmVzIGluIFJUTCBkZWFkIHN0b3JlIGVsaW1pbmF0aW9uIiwKKwkgIDUwMDAsIDAsIDApCisKKy8qIFByZWZldGNoaW5nIGFuZCBjYWNoZS1vcHRpbWl6YXRpb25zIHJlbGF0ZWQgcGFyYW1ldGVycy4gIERlZmF1bHQgdmFsdWVzIGFyZQorICAgdXN1YWxseSBzZXQgYnkgbWFjaGluZSBkZXNjcmlwdGlvbi4gICovCisKKy8qIFRoZSBudW1iZXIgb2YgaW5zbnMgZXhlY3V0ZWQgYmVmb3JlIHByZWZldGNoIGlzIGNvbXBsZXRlZC4gICovCisKK0RFRlBBUkFNIChQQVJBTV9QUkVGRVRDSF9MQVRFTkNZLAorCSAicHJlZmV0Y2gtbGF0ZW5jeSIsCisJICJUaGUgbnVtYmVyIG9mIGluc25zIGV4ZWN1dGVkIGJlZm9yZSBwcmVmZXRjaCBpcyBjb21wbGV0ZWQiLAorCSAyMDAsIDAsIDApCisKKy8qIFRoZSBudW1iZXIgb2YgcHJlZmV0Y2hlcyB0aGF0IGNhbiBydW4gYXQgdGhlIHNhbWUgdGltZS4gICovCisKK0RFRlBBUkFNIChQQVJBTV9TSU1VTFRBTkVPVVNfUFJFRkVUQ0hFUywKKwkgICJzaW11bHRhbmVvdXMtcHJlZmV0Y2hlcyIsCisJICAiVGhlIG51bWJlciBvZiBwcmVmZXRjaGVzIHRoYXQgY2FuIHJ1biBhdCB0aGUgc2FtZSB0aW1lIiwKKwkgIDMsIDAsIDApCisKKy8qIFRoZSBzaXplIG9mIEwxIGNhY2hlIGluIGtCLiAgKi8KKworREVGUEFSQU0gKFBBUkFNX0wxX0NBQ0hFX1NJWkUsCisJICAibDEtY2FjaGUtc2l6ZSIsCisJICAiVGhlIHNpemUgb2YgTDEgY2FjaGUiLAorCSAgNjQsIDAsIDApCisKKy8qIFRoZSBzaXplIG9mIEwxIGNhY2hlIGxpbmUgaW4gYnl0ZXMuICAqLworCitERUZQQVJBTSAoUEFSQU1fTDFfQ0FDSEVfTElORV9TSVpFLAorCSAgImwxLWNhY2hlLWxpbmUtc2l6ZSIsCisJICAiVGhlIHNpemUgb2YgTDEgY2FjaGUgbGluZSIsCisJICAzMiwgMCwgMCkKKworLyogVGhlIHNpemUgb2YgTDIgY2FjaGUgaW4ga0IuICAqLworCitERUZQQVJBTSAoUEFSQU1fTDJfQ0FDSEVfU0laRSwKKwkgICJsMi1jYWNoZS1zaXplIiwKKwkgICJUaGUgc2l6ZSBvZiBMMiBjYWNoZSIsCisJICA1MTIsIDAsIDApCisKKy8qIFdoZXRoZXIgd2Ugc2hvdWxkIHVzZSBjYW5vbmljYWwgdHlwZXMgcmF0aGVyIHRoYW4gZGVlcCAic3RydWN0dXJhbCIKKyAgIHR5cGUgY2hlY2tpbmcuICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMSAodGhlIGRlZmF1bHQpIGltcHJvdmVzCisgICBjb21waWxhdGlvbiBwZXJmb3JtYW5jZSBpbiB0aGUgQysrIGFuZCBPYmplY3RpdmUtQysrIGZyb250IGVuZDsKKyAgIHRoaXMgdmFsdWUgc2hvdWxkIG9ubHkgYmUgc2V0IHRvIHplcm8gdG8gd29yayBhcm91bmQgYnVncyBpbiB0aGUKKyAgIGNhbm9uaWNhbCB0eXBlIHN5c3RlbSBieSBkaXNhYmxpbmcgaXQuICAqLworCitERUZQQVJBTSAoUEFSQU1fVVNFX0NBTk9OSUNBTF9UWVBFUywKKwkgICJ1c2UtY2Fub25pY2FsLXR5cGVzIiwKKwkgICJXaGV0aGVyIHRvIHVzZSBjYW5vbmljYWwgdHlwZXMiLAorCSAgMSwgMCwgMSkKKworREVGUEFSQU0gKFBBUkFNX01BWF9QQVJUSUFMX0FOVElDX0xFTkdUSCwKKwkgICJtYXgtcGFydGlhbC1hbnRpYy1sZW5ndGgiLAorCSAgIk1heGltdW0gbGVuZ3RoIG9mIHBhcnRpYWwgYW50aWMgc2V0IHdoZW4gcGVyZm9ybWluZyB0cmVlIHByZSBvcHRpbWl6YXRpb24iLAorCSAgMTAwLCAwLCAwKQorCisvKiBUaGUgZm9sbG93aW5nIGlzIHVzZWQgYXMgYSBzdG9wLWdhcCBsaW1pdCBmb3IgY2FzZXMgd2hlcmUgcmVhbGx5IGh1Z2UKKyAgIFNDQ3MgYmxvdyB1cCBtZW1vcnkgYW5kIGNvbXBpbGUtdGltZSB1c2UgdG9vIG11Y2guICBJZiB3ZSBoaXQgdGhpcyBsaW1pdCwKKyAgIFNDQ1ZOIGFuZCBzdWNoIEZSRSBhbmQgUFJFIHdpbGwgYmUgbm90IGRvbmUgYXQgYWxsIGZvciB0aGUgY3VycmVudAorICAgZnVuY3Rpb24uICAqLworCitERUZQQVJBTSAoUEFSQU1fU0NDVk5fTUFYX1NDQ19TSVpFLAorCSAgInNjY3ZuLW1heC1zY2Mtc2l6ZSIsCisJICAiTWF4aW11bSBzaXplIG9mIGEgU0NDIGJlZm9yZSBTQ0NWTiBzdG9wcyBwcm9jZXNzaW5nIGEgZnVuY3Rpb24iLAorCSAgMTAwMDAsIDEwLCAwKQorCisvKiBUaGUgZm9sbG93aW5nIGlzIHVzZWQgYXMgYSBzdG9wLWdhcCBsaW1pdCBmb3IgY2FzZXMgd2hlcmUgcmVhbGx5IGh1Z2UKKyAgIGZ1bmN0aW9ucyBibG93IHVwIGNvbXBpbGUtdGltZSB1c2UgdG9vIG11Y2guICBJdCBsaW1pdHMgdGhlIG51bWJlciBvZgorICAgYWxpYXMtcXVlcmllcyB3ZSBkbyBmb3IgZmluZGluZyBjb21tb24gc3ViZXhwcmVzc2lvbnMgZm9yIG1lbW9yeSBsb2FkcyBhbmQKKyAgIHN0b3Jlcy4gIFRoZSBudW1iZXIgb2YgYWxpYXMtcXVlcmllcyBpcyBvdGhlcndpc2UgbGltaXRlZCBieSB0aGUgbnVtYmVyIG9mCisgICBzdG9yZXMgb24gcGF0aHMgdG8gZnVuY3Rpb24gZW50cnkuICAqLworCitERUZQQVJBTSAoUEFSQU1fU0NDVk5fTUFYX0FMSUFTX1FVRVJJRVNfUEVSX0FDQ0VTUywKKwkgICJzY2N2bi1tYXgtYWxpYXMtcXVlcmllcy1wZXItYWNjZXNzIiwKKwkgICJNYXhpbXVtIG51bWJlciBvZiBkaXNhbWJpZ3VhdGlvbnMgdG8gcGVyZm9ybSBwZXIgbWVtb3J5IGFjY2VzcyIsCisJICAxMDAwLCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fSVJBX01BWF9MT09QU19OVU0sCisJICAiaXJhLW1heC1sb29wcy1udW0iLAorCSAgIk1heCBsb29wcyBudW1iZXIgZm9yIHJlZ2lvbmFsIFJBIiwKKwkgIDEwMCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX0lSQV9NQVhfQ09ORkxJQ1RfVEFCTEVfU0laRSwKKwkgICJpcmEtbWF4LWNvbmZsaWN0LXRhYmxlLXNpemUiLAorCSAgIk1heCBzaXplIG9mIGNvbmZsaWN0IHRhYmxlIGluIE1CIiwKKwkgIDEwMDAsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9JUkFfTE9PUF9SRVNFUlZFRF9SRUdTLAorCSAgImlyYS1sb29wLXJlc2VydmVkLXJlZ3MiLAorCSAgIlRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIGluIGVhY2ggY2xhc3Mga2VwdCB1bnVzZWQgYnkgbG9vcCBpbnZhcmlhbnQgbW90aW9uIiwKKwkgIDIsIDAsIDApCisKKy8qIFN3aXRjaCBpbml0aWFsaXphdGlvbiBjb252ZXJzaW9uIHdpbGwgcmVmdXNlIHRvIGNyZWF0ZSBhcnJheXMgdGhhdCBhcmUKKyAgIGJpZ2dlciB0aGFuIHRoaXMgcGFyYW1ldGVyIHRpbWVzIHRoZSBudW1iZXIgb2Ygc3dpdGNoIGJyYW5jaGVzLiAgKi8KKworREVGUEFSQU0gKFBBUkFNX1NXSVRDSF9DT05WRVJTSU9OX0JSQU5DSF9SQVRJTywKKwkgICJzd2l0Y2gtY29udmVyc2lvbi1tYXgtYnJhbmNoLXJhdGlvIiwKKwkgICJUaGUgbWF4aW11bSByYXRpbyBiZXR3ZWVuIGFycmF5IHNpemUgYW5kIHN3aXRjaCBicmFuY2hlcyBmb3IgIgorCSAgImEgc3dpdGNoIGNvbnZlcnNpb24gdG8gdGFrZSBwbGFjZSIsCisJICA4LCAxLCAwKQorCisvKiBTaXplIG9mIHRpbGVzIHdoZW4gZG9pbmcgbG9vcCBibG9ja2luZy4gICovCisKK0RFRlBBUkFNIChQQVJBTV9MT09QX0JMT0NLX1RJTEVfU0laRSwKKwkgICJsb29wLWJsb2NrLXRpbGUtc2l6ZSIsCisJICAic2l6ZSBvZiB0aWxlcyBmb3IgbG9vcCBibG9ja2luZyIsCisJICA1MSwgMCwgMCkKKworLyogTWF4aW1hbCBudW1iZXIgb2YgcGFyYW1ldGVycyB0aGF0IHdlIGFsbG93IGluIGEgU0NvUC4gICovCisKK0RFRlBBUkFNIChQQVJBTV9HUkFQSElURV9NQVhfTkJfU0NPUF9QQVJBTVMsCisJICAiZ3JhcGhpdGUtbWF4LW5iLXNjb3AtcGFyYW1zIiwKKwkgICJtYXhpbXVtIG51bWJlciBvZiBwYXJhbWV0ZXJzIGluIGEgU0NvUCIsCisJICAxMCwgMCwgMCkKKworLyogTWF4aW1hbCBudW1iZXIgb2YgYmFzaWMgYmxvY2tzIGluIHRoZSBmdW5jdGlvbnMgYW5hbHl6ZWQgYnkgR3JhcGhpdGUuICAqLworCitERUZQQVJBTSAoUEFSQU1fR1JBUEhJVEVfTUFYX0JCU19QRVJfRlVOQ1RJT04sCisJICAiZ3JhcGhpdGUtbWF4LWJicy1wZXItZnVuY3Rpb24iLAorCSAgIm1heGltdW0gbnVtYmVyIG9mIGJhc2ljIGJsb2NrcyBwZXIgZnVuY3Rpb24gdG8gYmUgYW5hbHl6ZWQgYnkgR3JhcGhpdGUiLAorCSAgMTAwLCAwLCAwKQorCisvKiBBdm9pZCBkYXRhIGRlcGVuZGVuY2UgYW5hbHlzaXMgb24gdmVyeSBsYXJnZSBsb29wcy4gICovCitERUZQQVJBTSAoUEFSQU1fTE9PUF9NQVhfREFUQVJFRlNfRk9SX0RBVEFERVBTLAorCSAgImxvb3AtbWF4LWRhdGFyZWZzLWZvci1kYXRhZGVwcyIsCisJICAiTWF4aW11bSBudW1iZXIgb2YgZGF0YXJlZnMgaW4gbG9vcCBmb3IgYnVpbGRpbmcgbG9vcCBkYXRhIGRlcGVuZGVuY2llcyIsCisJICAxMDAwLCAwLCAwKQorCisvKiBBdm9pZCBkb2luZyBsb29wIGludmFyaWFudCBtb3Rpb24gb24gdmVyeSBsYXJnZSBsb29wcy4gICovCisKK0RFRlBBUkFNIChQQVJBTV9MT09QX0lOVkFSSUFOVF9NQVhfQkJTX0lOX0xPT1AsCisJICAibG9vcC1pbnZhcmlhbnQtbWF4LWJicy1pbi1sb29wIiwKKwkgICJNYXggYmFzaWMgYmxvY2tzIG51bWJlciBpbiBsb29wIGZvciBsb29wIGludmFyaWFudCBtb3Rpb24iLAorCSAgMTAwMDAsIDAsIDApCisKKy8qIEF2b2lkIFNMUCB2ZWN0b3JpemF0aW9uIG9mIGxhcmdlIGJhc2ljIGJsb2Nrcy4gICovCitERUZQQVJBTSAoUEFSQU1fU0xQX01BWF9JTlNOU19JTl9CQiwKKyAgICAgICAgICAic2xwLW1heC1pbnNucy1pbi1iYiIsCisgICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBpbiBiYXNpYyBibG9jayB0byBiZSBjb25zaWRlcmVkIGZvciBTTFAgdmVjdG9yaXphdGlvbiIsCisgICAgICAgICAgMTAwMCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX01JTl9JTlNOX1RPX1BSRUZFVENIX1JBVElPLAorCSAgIm1pbi1pbnNuLXRvLXByZWZldGNoLXJhdGlvIiwKKwkgICJNaW4uIHJhdGlvIG9mIGluc25zIHRvIHByZWZldGNoZXMgdG8gZW5hYmxlIHByZWZldGNoaW5nIGZvciAiCisgICAgICAgICAgImEgbG9vcCB3aXRoIGFuIHVua25vd24gdHJpcCBjb3VudCIsCisJICA5LCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fUFJFRkVUQ0hfTUlOX0lOU05fVE9fTUVNX1JBVElPLAorCSAgInByZWZldGNoLW1pbi1pbnNuLXRvLW1lbS1yYXRpbyIsCisJICAiTWluLiByYXRpbyBvZiBpbnNucyB0byBtZW0gb3BzIHRvIGVuYWJsZSBwcmVmZXRjaGluZyBpbiBhIGxvb3AiLAorCSAgMywgMCwgMCkKKworLyogU2V0IG1heGltdW0gaGFzaCB0YWJsZSBzaXplIGZvciB2YXIgdHJhY2tpbmcuICAqLworCitERUZQQVJBTSAoUEFSQU1fTUFYX1ZBUlRSQUNLX1NJWkUsCisJICAibWF4LXZhcnRyYWNrLXNpemUiLAorCSAgIk1heC4gc2l6ZSBvZiB2YXIgdHJhY2tpbmcgaGFzaCB0YWJsZXMiLAorCSAgNTAwMDAwMDAsIDAsIDApCisKKy8qIFNldCBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBmb3IgdmFyIHRyYWNraW5nIGV4cHJlc3Npb24gZXhwYW5zaW9uCisgICBhbmQgcmVzb2x1dGlvbi4gICovCisKK0RFRlBBUkFNIChQQVJBTV9NQVhfVkFSVFJBQ0tfRVhQUl9ERVBUSCwKKwkgICJtYXgtdmFydHJhY2stZXhwci1kZXB0aCIsCisJICAiTWF4LiByZWN1cnNpb24gZGVwdGggZm9yIGV4cGFuZGluZyB2YXIgdHJhY2tpbmcgZXhwcmVzc2lvbnMiLAorCSAgMTIsIDAsIDApCisKKy8qIFNldCBtYXhpbXVtIGxlbmd0aCBvZiB2YWx1ZSBsb2NhdGlvbiBsaXN0IGZvciB3aGljaCB2YXIgdHJhY2tpbmcKKyAgIHNob3VsZCBhZGQgcmV2ZXJzZSBvcGVyYXRpb25zLiAgKi8KKworREVGUEFSQU0gKFBBUkFNX01BWF9WQVJUUkFDS19SRVZFUlNFX09QX1NJWkUsCisJICAibWF4LXZhcnRyYWNrLXJldmVyc2Utb3Atc2l6ZSIsCisJICAiTWF4LiBzaXplIG9mIGxvYyBsaXN0IGZvciB3aGljaCByZXZlcnNlIG9wcyBzaG91bGQgYmUgYWRkZWQiLAorCSAgNTAsIDAsIDApCisKKy8qIFNldCBtaW5pbXVtIGluc24gdWlkIGZvciBub24tZGVidWcgaW5zbnMuICAqLworCitERUZQQVJBTSAoUEFSQU1fTUlOX05PTkRFQlVHX0lOU05fVUlELAorCSAgIm1pbi1ub25kZWJ1Zy1pbnNuLXVpZCIsCisJICAiVGhlIG1pbmltdW0gVUlEIHRvIGJlIHVzZWQgZm9yIGEgbm9uZGVidWcgaW5zbiIsCisJICAwLCAxLCAwKQorCitERUZQQVJBTSAoUEFSQU1fSVBBX1NSQV9QVFJfR1JPV1RIX0ZBQ1RPUiwKKwkgICJpcGEtc3JhLXB0ci1ncm93dGgtZmFjdG9yIiwKKwkgICJNYXhpbXVtIGFsbG93ZWQgZ3Jvd3RoIG9mIHNpemUgb2YgbmV3IHBhcmFtZXRlcnMgaXBhLXNyYSByZXBsYWNlcyAiCisJICAiYSBwb2ludGVyIHRvIGFuIGFnZ3JlZ2F0ZSB3aXRoIiwKKwkgIDIsIDAsIDApCisKK0RFRlBBUkFNIChQQVJBTV9UTV9NQVhfQUdHUkVHQVRFX1NJWkUsCisJICAidG0tbWF4LWFnZ3JlZ2F0ZS1zaXplIiwKKwkgICJTaXplIGluIGJ5dGVzIGFmdGVyIHdoaWNoIHRocmVhZC1sb2NhbCBhZ2dyZWdhdGVzIHNob3VsZCBiZSAiCisJICAiaW5zdHJ1bWVudGVkIHdpdGggdGhlIGxvZ2dpbmcgZnVuY3Rpb25zIGluc3RlYWQgb2Ygc2F2ZS9yZXN0b3JlICIKKwkgICJwYWlycyIsCisJICA5LCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fSVBBX0NQX1ZBTFVFX0xJU1RfU0laRSwKKwkgICJpcGEtY3AtdmFsdWUtbGlzdC1zaXplIiwKKwkgICJNYXhpbXVtIHNpemUgb2YgYSBsaXN0IG9mIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBwYXJhbWV0ZXIgZm9yICIKKwkgICJpbnRlcnByb2NlZHVyYWwgY29uc3RhbnQgcHJvcGFnYXRpb24iLAorCSAgOCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX0lQQV9DUF9FVkFMX1RIUkVTSE9MRCwKKwkgICJpcGEtY3AtZXZhbC10aHJlc2hvbGQiLAorCSAgIlRocmVzaG9sZCBpcGEtY3Agb3Bwb3J0dW5pdHkgZXZhbHVhdGlvbiB0aGF0IGlzIHN0aWxsIGNvbnNpZGVyZWQgIgorCSAgImJlbmVmaWNpYWwgdG8gY2xvbmUuIiwKKwkgIDUwMCwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX0lQQV9NQVhfQUdHX0lURU1TLAorCSAgImlwYS1tYXgtYWdnLWl0ZW1zIiwKKwkgICJNYXhpbXVtIG51bWJlciBvZiBhZ2dyZWdhdGUgY29udGVudCBpdGVtcyBmb3IgYSBwYXJhbWV0ZXIgaW4gIgorCSAgImp1bXAgZnVuY3Rpb25zIGFuZCBsYXR0aWNlcyIsCisJICAxNiwgMCwgMCkKKworREVGUEFSQU0gKFBBUkFNX0lQQV9DUF9MT09QX0hJTlRfQk9OVVMsCisJICAiaXBhLWNwLWxvb3AtaGludC1ib251cyIsCisJICAiQ29tcGlsZS10aW1lIGJvbnVzIElQQS1DUCBhc3NpZ25zIHRvIGNhbmRpZGF0ZXMgd2hpY2ggbWFrZSBsb29wICIKKwkgICJib3VuZHMgb3Igc3RyaWRlcyBrbm93bi4iLAorCSAgNjQsIDAsIDApCisKKy8qIFdIT1BSIHBhcnRpdGlvbmluZyBjb25maWd1cmF0aW9uLiAgKi8KKworREVGUEFSQU0gKFBBUkFNX0xUT19QQVJUSVRJT05TLAorCSAgImx0by1wYXJ0aXRpb25zIiwKKwkgICJOdW1iZXIgb2YgcGFydGl0aW9ucyB0aGUgcHJvZ3JhbSBzaG91bGQgYmUgc3BsaXQgdG8iLAorCSAgMzIsIDEsIDApCisKK0RFRlBBUkFNIChNSU5fUEFSVElUSU9OX1NJWkUsCisJICAibHRvLW1pbi1wYXJ0aXRpb24iLAorCSAgIk1pbmltYWwgc2l6ZSBvZiBhIHBhcnRpdGlvbiBmb3IgTFRPIChpbiBlc3RpbWF0ZWQgaW5zdHJ1Y3Rpb25zKSIsCisJICAxMDAwLCAwLCAwKQorCisvKiBEaWFnbm9zdGljIHBhcmFtZXRlcnMuICAqLworCitERUZQQVJBTSAoQ1hYX01BWF9OQU1FU1BBQ0VTX0ZPUl9ESUFHTk9TVElDX0hFTFAsCisJICAiY3h4LW1heC1uYW1lc3BhY2VzLWZvci1kaWFnbm9zdGljLWhlbHAiLAorCSAgIk1heGltdW0gbnVtYmVyIG9mIG5hbWVzcGFjZXMgdG8gc2VhcmNoIGZvciBhbHRlcm5hdGl2ZXMgd2hlbiAiCisJICAibmFtZSBsb29rdXAgZmFpbHMiLAorCSAgMTAwMCwgMCwgMCkKKworLyogTWF4aW11bSBudW1iZXIgb2YgY29uZGl0aW9uYWwgc3RvcmUgcGFpcnMgdGhhdCBjYW4gYmUgc3Vuay4gICovCitERUZQQVJBTSAoUEFSQU1fTUFYX1NUT1JFU19UT19TSU5LLAorICAgICAgICAgICJtYXgtc3RvcmVzLXRvLXNpbmsiLAorICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBjb25kaXRpb25hbCBzdG9yZSBwYWlycyB0aGF0IGNhbiBiZSBzdW5rIiwKKyAgICAgICAgICAyLCAwLCAwKQorCisvKiBPdmVycmlkZSBDQVNFX1ZBTFVFU19USFJFU0hPTEQgb2Ygd2hlbiB0byBzd2l0Y2ggZnJvbSBkb2luZyBzd2l0Y2gKKyAgIHN0YXRlbWVudHMgdmlhIGlmIHN0YXRlbWVudHMgdG8gdXNpbmcgYSB0YWJsZSBqdW1wIG9wZXJhdGlvbi4gIElmIHRoZSB2YWx1ZQorICAgaXMgMCwgdGhlIGRlZmF1bHQgQ0FTRV9WQUxVRVNfVEhSRVNIT0xEIHdpbGwgYmUgdXNlZC4gICovCitERUZQQVJBTSAoUEFSQU1fQ0FTRV9WQUxVRVNfVEhSRVNIT0xELAorICAgICAgICAgICJjYXNlLXZhbHVlcy10aHJlc2hvbGQiLAorICAgICAgICAgICJUaGUgc21hbGxlc3QgbnVtYmVyIG9mIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHdoaWNoIGl0IGlzIGJlc3QgdG8gIgorCSAgInVzZSBhIGp1bXAtdGFibGUgaW5zdGVhZCBvZiBhIHRyZWUgb2YgY29uZGl0aW9uYWwgYnJhbmNoZXMsICIKKwkgICJpZiAwLCB1c2UgdGhlIGRlZmF1bHQgZm9yIHRoZSBtYWNoaW5lIiwKKyAgICAgICAgICAwLCAwLCAwKQorCisvKiBEYXRhIHJhY2UgZmxhZ3MgZm9yIEMrKzB4IG1lbW9yeSBtb2RlbCBjb21wbGlhbmNlLiAgKi8KK0RFRlBBUkFNIChQQVJBTV9BTExPV19MT0FEX0RBVEFfUkFDRVMsCisJICAiYWxsb3ctbG9hZC1kYXRhLXJhY2VzIiwKKwkgICJBbGxvdyBuZXcgZGF0YSByYWNlcyBvbiBsb2FkcyB0byBiZSBpbnRyb2R1Y2VkIiwKKwkgIDEsIDAsIDEpCisKK0RFRlBBUkFNIChQQVJBTV9BTExPV19TVE9SRV9EQVRBX1JBQ0VTLAorCSAgImFsbG93LXN0b3JlLWRhdGEtcmFjZXMiLAorCSAgIkFsbG93IG5ldyBkYXRhIHJhY2VzIG9uIHN0b3JlcyB0byBiZSBpbnRyb2R1Y2VkIiwKKwkgIDEsIDAsIDEpCisKK0RFRlBBUkFNIChQQVJBTV9BTExPV19QQUNLRURfTE9BRF9EQVRBX1JBQ0VTLAorCSAgImFsbG93LXBhY2tlZC1sb2FkLWRhdGEtcmFjZXMiLAorCSAgIkFsbG93IG5ldyBkYXRhIHJhY2VzIG9uIHBhY2tlZCBkYXRhIGxvYWRzIHRvIGJlIGludHJvZHVjZWQiLAorCSAgMSwgMCwgMSkKKworREVGUEFSQU0gKFBBUkFNX0FMTE9XX1BBQ0tFRF9TVE9SRV9EQVRBX1JBQ0VTLAorCSAgImFsbG93LXBhY2tlZC1zdG9yZS1kYXRhLXJhY2VzIiwKKwkgICJBbGxvdyBuZXcgZGF0YSByYWNlcyBvbiBwYWNrZWQgZGF0YSBzdG9yZXMgdG8gYmUgaW50cm9kdWNlZCIsCisJICAxLCAwLCAxKQorCisvKiBSZWFzc29jaWF0aW9uIHdpZHRoIHRvIGJlIHVzZWQgYnkgdHJlZSByZWFzc29jIG9wdGltaXphdGlvbi4gICovCitERUZQQVJBTSAoUEFSQU1fVFJFRV9SRUFTU09DX1dJRFRILAorCSAgInRyZWUtcmVhc3NvYy13aWR0aCIsCisJICAiU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgaW4gcGFyYWxsZWwgaW4gIgorCSAgInJlYXNzb2NpYXRlZCB0cmVlLiBJZiAwLCB1c2UgdGhlIHRhcmdldCBkZXBlbmRlbnQgaGV1cmlzdGljLiIsCisJICAwLCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fTUFYX1RBSUxfTUVSR0VfQ09NUEFSSVNPTlMsCisgICAgICAgICAgIm1heC10YWlsLW1lcmdlLWNvbXBhcmlzb25zIiwKKyAgICAgICAgICAiTWF4aW11bSBhbW91bnQgb2Ygc2ltaWxhciBiYnMgdG8gY29tcGFyZSBhIGJiIHdpdGgiLAorICAgICAgICAgIDEwLCAwLCAwKQorCitERUZQQVJBTSAoUEFSQU1fTUFYX1RBSUxfTUVSR0VfSVRFUkFUSU9OUywKKyAgICAgICAgICAibWF4LXRhaWwtbWVyZ2UtaXRlcmF0aW9ucyIsCisgICAgICAgICAgIk1heGltdW0gYW1vdW50IG9mIGl0ZXJhdGlvbnMgb2YgdGhlIHBhc3Mgb3ZlciBhIGZ1bmN0aW9uIiwKKyAgICAgICAgICAyLCAwLCAwKQorCisvKiBNYXhpbXVtIG51bWJlciBvZiBzdHJpbmdzIGZvciB3aGljaCBzdHJsZW4gb3B0aW1pemF0aW9uIHBhc3Mgd2lsbAorICAgdHJhY2sgc3RyaW5nIGxlbnRocy4gICovCitERUZQQVJBTSAoUEFSQU1fTUFYX1RSQUNLRURfU1RSTEVOUywKKwkgICJtYXgtdHJhY2tlZC1zdHJsZW5zIiwKKwkgICJNYXhpbXVtIG51bWJlciBvZiBzdHJpbmdzIGZvciB3aGljaCBzdHJsZW4gb3B0aW1pemF0aW9uIHBhc3Mgd2lsbCAiCisJICAidHJhY2sgc3RyaW5nIGxlbmd0aHMiLAorCSAgMTAwMCwgMCwgMCkKKworLyogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgc2NoZWRfcHJlc3N1cmVfYWxnb3JpdGhtIGVudW0uICAqLworREVGUEFSQU0gKFBBUkFNX1NDSEVEX1BSRVNTVVJFX0FMR09SSVRITSwKKwkgICJzY2hlZC1wcmVzc3VyZS1hbGdvcml0aG0iLAorCSAgIldoaWNoIC1mc2NoZWQtcHJlc3N1cmUgYWxnb3JpdGhtIHRvIGFwcGx5IiwKKwkgIDEsIDEsIDIpCisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIGNhbmRpZGF0ZSBzY2FucyBpbiBzdHJhaWdodC1saW5lIHN0cmVuZ3RoIHJlZHVjdGlvbi4gICovCitERUZQQVJBTSAoUEFSQU1fTUFYX1NMU1JfQ0FORElEQVRFX1NDQU4sCisJICAibWF4LXNsc3ItY2FuZC1zY2FuIiwKKwkgICJNYXhpbXVtIGxlbmd0aCBvZiBjYW5kaWRhdGUgc2NhbnMgZm9yIHN0cmFpZ2h0LWxpbmUgIgorCSAgInN0cmVuZ3RoIHJlZHVjdGlvbiIsCisJICA1MCwgMSwgOTk5OTk5KQorCisvKgorTG9jYWwgdmFyaWFibGVzOgorbW9kZTpjCitFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BhcmFtcy5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BhcmFtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ODAyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcGFyYW1zLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qIHBhcmFtcy5oIC0gUnVuLXRpbWUgcGFyYW1ldGVycy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBNYXJrIE1pdGNoZWxsIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+LgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBtZWFucyBmb3Igc2V0dGluZyBpbnRlZ3JhbCBwYXJhbWV0ZXJzCisgICBkeW5hbWljYWxseS4gIEluc3RlYWQgb2YgZW5jb2RpbmcgbWFnaWMgbnVtYmVycyBpbiB2YXJpb3VzIHBsYWNlcywKKyAgIHVzZSB0aGlzIG1vZHVsZSB0byBvcmdhbml6ZSBhbGwgdGhlIG1hZ2ljIG51bWJlcnMgaW4gYSBzaW5nbGUKKyAgIHBsYWNlLiAgVGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycyBjYW4gYmUgc2V0IG9uIHRoZQorICAgY29tbWFuZC1saW5lLCB0aGVyZWJ5IHByb3ZpZGluZyBhIHdheSB0byBjb250cm9sIHRoZSBhbW91bnQgb2YKKyAgIGVmZm9ydCBzcGVudCBvbiBwYXJ0aWN1bGFyIG9wdGltaXphdGlvbiBwYXNzZXMsIG9yIG90aGVyd2lzZSB0dW5lCisgICB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbXBpbGVyLgorCisgICBTaW5jZSB0aGVpciB2YWx1ZXMgY2FuIGJlIHNldCBvbiB0aGUgY29tbWFuZC1saW5lLCB0aGVzZSBwYXJhbWV0ZXJzCisgICBzaG91bGQgbm90IGJlIHVzZWQgZm9yIG5vbi1keW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAgKi8KKworI2lmbmRlZiBHQ0NfUEFSQU1TX0gKKyNkZWZpbmUgR0NDX1BBUkFNU19ICisKKy8qIE5vIHBhcmFtZXRlciBzaGFsbCBoYXZlIHRoaXMgdmFsdWUuICAqLworCisjZGVmaW5lIElOVkFMSURfUEFSQU1fVkFMICgtMSkKKworLyogVGhlIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHBhcmFtZXRlci4gICovCisKK3R5cGVkZWYgc3RydWN0IHBhcmFtX2luZm8KK3sKKyAgLyogVGhlIG5hbWUgdXNlZCB3aXRoIHRoZSBgLS1wYXJhbSA8bmFtZT49PHZhbHVlPicgc3dpdGNoIHRvIHNldCB0aGlzCisgICAgIHZhbHVlLiAgKi8KKyAgY29uc3QgY2hhciAqY29uc3Qgb3B0aW9uOworCisgIC8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKyAgaW50IGRlZmF1bHRfdmFsdWU7CisKKyAgLyogTWluaW11bSBhY2NlcHRhYmxlIHZhbHVlLiAgKi8KKyAgaW50IG1pbl92YWx1ZTsKKworICAvKiBNYXhpbXVtIGFjY2VwdGFibGUgdmFsdWUsIGlmIGdyZWF0ZXIgdGhhbiBtaW5pbXVtICAqLworICBpbnQgbWF4X3ZhbHVlOworCisgIC8qIEEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbi4gICovCisgIGNvbnN0IGNoYXIgKmNvbnN0IGhlbHA7Cit9IHBhcmFtX2luZm87CisKKy8qIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbXBpbGVyIHBhcmFtZXRlcnMgYW5kIHRoZWlyIGN1cnJlbnQKKyAgIHZhbHVlcy4gICovCisKK2V4dGVybiBwYXJhbV9pbmZvICpjb21waWxlcl9wYXJhbXM7CisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YWJsZSwgZm9yIHRoZSB1c2UgYnkgcGx1Z2lucy4gICovCitleHRlcm4gc2l6ZV90IGdldF9udW1fY29tcGlsZXJfcGFyYW1zICh2b2lkKTsKKworLyogQWRkIHRoZSBOIFBBUkFNUyB0byB0aGUgY3VycmVudCBsaXN0IG9mIGNvbXBpbGVyIHBhcmFtZXRlcnMuICAqLworCitleHRlcm4gdm9pZCBhZGRfcGFyYW1zIChjb25zdCBwYXJhbV9pbmZvIHBhcmFtc1tdLCBzaXplX3Qgbik7CisKKy8qIFNldCB0aGUgVkFMVUUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXJhbWV0ZXIgZ2l2ZW4gYnkgTkFNRSBpbiB0aGUKKyAgIHRhYmxlIFBBUkFNUyB1c2luZyBQQVJBTVNfU0VUIHRvIGluZGljYXRlIHdoaWNoIGhhdmUgYmVlbgorICAgZXhwbGljaXRseSBzZXQuICAqLworCitleHRlcm4gdm9pZCBzZXRfcGFyYW1fdmFsdWUgKGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSwKKwkJCSAgICAgaW50ICpwYXJhbXMsIGludCAqcGFyYW1zX3NldCk7CisKKwwKKy8qIFRoZSBwYXJhbWV0ZXJzIGluIHVzZSBieSBsYW5ndWFnZS1pbmRlcGVuZGVudCBjb2RlLiAgKi8KKwordHlwZWRlZiBlbnVtIGNvbXBpbGVyX3BhcmFtCit7CisjZGVmaW5lIERFRlBBUkFNKGVudW1lcmF0b3IsIG9wdGlvbiwgbXNnaWQsIGRlZmF1bHQsIG1pbiwgbWF4KSBcCisgIGVudW1lcmF0b3IsCisjaW5jbHVkZSAicGFyYW1zLmRlZiIKKyN1bmRlZiBERUZQQVJBTQorICBMQVNUX1BBUkFNCit9IGNvbXBpbGVyX3BhcmFtOworCisvKiBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBnaXZlbiBieSBFTlVNLiAgTm90IGFuIGx2YWx1ZS4gICovCisjZGVmaW5lIFBBUkFNX1ZBTFVFKEVOVU0pIFwKKyAgKChpbnQpIGdsb2JhbF9vcHRpb25zLnhfcGFyYW1fdmFsdWVzWyhpbnQpIEVOVU1dKQorCisvKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIgZ2l2ZW4gYnkgTlVNIHRvIFZBTFVFLCBpbXBsaWNpdGx5LAorICAgaWYgaXQgaGFzIG5vdCBiZWVuIHNldCBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyLCBpbiB0aGUgdGFibGUgUEFSQU1TCisgICB1c2luZyBQQVJBTVNfU0VUIHRvIGluZGljYXRlIHdoaWNoIGhhdmUgYmVlbiBleHBsaWNpdGx5IHNldC4gICovCisKK2V4dGVybiB2b2lkIG1heWJlX3NldF9wYXJhbV92YWx1ZSAoY29tcGlsZXJfcGFyYW0gbnVtLCBpbnQgdmFsdWUsCisJCQkJICAgaW50ICpwYXJhbXMsIGludCAqcGFyYW1zX3NldCk7CisKKy8qIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHBhcmFtZXRlciBnaXZlbiBieSBOVU0gdG8gVkFMVUUsIGJlZm9yZQorICAgb3B0aW9uIHByb2Nlc3NpbmcuICAqLworCitleHRlcm4gdm9pZCBzZXRfZGVmYXVsdF9wYXJhbV92YWx1ZSAoY29tcGlsZXJfcGFyYW0gbnVtLCBpbnQgdmFsdWUpOworCisvKiBBZGQgYWxsIHBhcmFtZXRlcnMgYW5kIGRlZmF1bHQgdmFsdWVzIHRoYXQgY2FuIGJlIHNldCBpbiBib3RoIHRoZQorICAgZHJpdmVyIGFuZCB0aGUgY29tcGlsZXIgcHJvcGVyLiAgKi8KKworZXh0ZXJuIHZvaWQgZ2xvYmFsX2luaXRfcGFyYW1zICh2b2lkKTsKKworLyogTm90ZSB0aGF0IGFsbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBhZGRlZCBhbmQgYWxsIGRlZmF1bHQgdmFsdWVzCisgICBzZXQuICAqLworZXh0ZXJuIHZvaWQgZmluaXNoX3BhcmFtcyAodm9pZCk7CisKKy8qIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBwYXJhbWV0ZXIgTlVNLiAgKi8KKworZXh0ZXJuIGludCBkZWZhdWx0X3BhcmFtX3ZhbHVlIChjb21waWxlcl9wYXJhbSBudW0pOworCisvKiBJbml0aWFsaXplIGFuIGFycmF5IFBBUkFNUyB3aXRoIGRlZmF1bHQgdmFsdWVzIG9mIHRoZQorICAgcGFyYW1ldGVycy4gICovCitleHRlcm4gdm9pZCBpbml0X3BhcmFtX3ZhbHVlcyAoaW50ICpwYXJhbXMpOworCisvKiBNYWNyb3MgZm9yIHRoZSB2YXJpb3VzIHBhcmFtZXRlcnMuICAqLworI2RlZmluZSBNQVhfSU5MSU5FX0lOU05TX1NJTkdMRSBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfSU5MSU5FX0lOU05TX1NJTkdMRSkKKyNkZWZpbmUgTUFYX0lOTElORV9JTlNOUyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfSU5MSU5FX0lOU05TKQorI2RlZmluZSBNQVhfSU5MSU5FX1NMT1BFIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9JTkxJTkVfU0xPUEUpCisjZGVmaW5lIE1JTl9JTkxJTkVfSU5TTlMgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUlOX0lOTElORV9JTlNOUykKKyNkZWZpbmUgTUFYX0lOTElORV9JTlNOU19BVVRPIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9JTkxJTkVfSU5TTlNfQVVUTykKKyNkZWZpbmUgTUFYX1ZBUklBQkxFX0VYUEFOU0lPTlMgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX1ZBUklBQkxFX0VYUEFOU0lPTlMpCisjZGVmaW5lIE1JTl9WRUNUX0xPT1BfQk9VTkQgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUlOX1ZFQ1RfTE9PUF9CT1VORCkKKyNkZWZpbmUgTUFYX0RFTEFZX1NMT1RfSU5TTl9TRUFSQ0ggXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX0RFTEFZX1NMT1RfSU5TTl9TRUFSQ0gpCisjZGVmaW5lIE1BWF9ERUxBWV9TTE9UX0xJVkVfU0VBUkNIIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9ERUxBWV9TTE9UX0xJVkVfU0VBUkNIKQorI2RlZmluZSBNQVhfUEVORElOR19MSVNUX0xFTkdUSCBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfUEVORElOR19MSVNUX0xFTkdUSCkKKyNkZWZpbmUgTUFYX0dDU0VfTUVNT1JZIFwKKyAgKChzaXplX3QpIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfR0NTRV9NRU1PUlkpKQorI2RlZmluZSBNQVhfR0NTRV9JTlNFUlRJT05fUkFUSU8gXAorICAoKHNpemVfdCkgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9HQ1NFX0lOU0VSVElPTl9SQVRJTykpCisjZGVmaW5lIEdDU0VfQUZURVJfUkVMT0FEX1BBUlRJQUxfRlJBQ1RJT04gXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fR0NTRV9BRlRFUl9SRUxPQURfUEFSVElBTF9GUkFDVElPTikKKyNkZWZpbmUgR0NTRV9BRlRFUl9SRUxPQURfQ1JJVElDQUxfRlJBQ1RJT04gXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fR0NTRV9BRlRFUl9SRUxPQURfQ1JJVElDQUxfRlJBQ1RJT04pCisjZGVmaW5lIEdDU0VfQ09TVF9ESVNUQU5DRV9SQVRJTyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9HQ1NFX0NPU1RfRElTVEFOQ0VfUkFUSU8pCisjZGVmaW5lIEdDU0VfVU5SRVNUUklDVEVEX0NPU1QgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fR0NTRV9VTlJFU1RSSUNURURfQ09TVCkKKyNkZWZpbmUgTUFYX0hPSVNUX0RFUFRIIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9IT0lTVF9ERVBUSCkKKyNkZWZpbmUgTUFYX1VOUk9MTEVEX0lOU05TIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9VTlJPTExFRF9JTlNOUykKKyNkZWZpbmUgTUFYX1NNU19MT09QX05VTUJFUiBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NQVhfU01TX0xPT1BfTlVNQkVSKQorI2RlZmluZSBTTVNfTUFYX0lJX0ZBQ1RPUiBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9TTVNfTUFYX0lJX0ZBQ1RPUikKKyNkZWZpbmUgU01TX0RGQV9ISVNUT1JZIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX1NNU19ERkFfSElTVE9SWSkKKyNkZWZpbmUgU01TX0xPT1BfQVZFUkFHRV9DT1VOVF9USFJFU0hPTEQgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fU01TX0xPT1BfQVZFUkFHRV9DT1VOVF9USFJFU0hPTEQpCisjZGVmaW5lIElOVEVHRVJfU0hBUkVfTElNSVQgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fSU5URUdFUl9TSEFSRV9MSU1JVCkKKyNkZWZpbmUgTUFYX0xBU1RfVkFMVUVfUlRMIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9MQVNUX1ZBTFVFX1JUTCkKKyNkZWZpbmUgTUlOX1ZJUlRVQUxfTUFQUElOR1MgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTUlOX1ZJUlRVQUxfTUFQUElOR1MpCisjZGVmaW5lIFZJUlRVQUxfTUFQUElOR1NfVE9fU1lNU19SQVRJTyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9WSVJUVUFMX01BUFBJTkdTX1RPX1NZTVNfUkFUSU8pCisjZGVmaW5lIE1BWF9GSUVMRFNfRk9SX0ZJRUxEX1NFTlNJVElWRSBcCisgICgoc2l6ZV90KSBQQVJBTV9WQUxVRSAoUEFSQU1fTUFYX0ZJRUxEU19GT1JfRklFTERfU0VOU0lUSVZFKSkKKyNkZWZpbmUgTUFYX1NDSEVEX1JFQURZX0lOU05TIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9TQ0hFRF9SRUFEWV9JTlNOUykKKyNkZWZpbmUgUFJFRkVUQ0hfTEFURU5DWSBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9QUkVGRVRDSF9MQVRFTkNZKQorI2RlZmluZSBTSU1VTFRBTkVPVVNfUFJFRkVUQ0hFUyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9TSU1VTFRBTkVPVVNfUFJFRkVUQ0hFUykKKyNkZWZpbmUgTDFfQ0FDSEVfU0laRSBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9MMV9DQUNIRV9TSVpFKQorI2RlZmluZSBMMV9DQUNIRV9MSU5FX1NJWkUgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fTDFfQ0FDSEVfTElORV9TSVpFKQorI2RlZmluZSBMMl9DQUNIRV9TSVpFIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0wyX0NBQ0hFX1NJWkUpCisjZGVmaW5lIFVTRV9DQU5PTklDQUxfVFlQRVMgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fVVNFX0NBTk9OSUNBTF9UWVBFUykKKyNkZWZpbmUgSVJBX01BWF9MT09QU19OVU0gXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fSVJBX01BWF9MT09QU19OVU0pCisjZGVmaW5lIElSQV9NQVhfQ09ORkxJQ1RfVEFCTEVfU0laRSBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9JUkFfTUFYX0NPTkZMSUNUX1RBQkxFX1NJWkUpCisjZGVmaW5lIElSQV9MT09QX1JFU0VSVkVEX1JFR1MgXAorICBQQVJBTV9WQUxVRSAoUEFSQU1fSVJBX0xPT1BfUkVTRVJWRURfUkVHUykKKyNkZWZpbmUgU1dJVENIX0NPTlZFUlNJT05fQlJBTkNIX1JBVElPIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX1NXSVRDSF9DT05WRVJTSU9OX0JSQU5DSF9SQVRJTykKKyNkZWZpbmUgTE9PUF9JTlZBUklBTlRfTUFYX0JCU19JTl9MT09QIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0xPT1BfSU5WQVJJQU5UX01BWF9CQlNfSU5fTE9PUCkKKyNkZWZpbmUgU0xQX01BWF9JTlNOU19JTl9CQiBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9TTFBfTUFYX0lOU05TX0lOX0JCKQorI2RlZmluZSBNSU5fSU5TTl9UT19QUkVGRVRDSF9SQVRJTyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9NSU5fSU5TTl9UT19QUkVGRVRDSF9SQVRJTykKKyNkZWZpbmUgUFJFRkVUQ0hfTUlOX0lOU05fVE9fTUVNX1JBVElPIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX1BSRUZFVENIX01JTl9JTlNOX1RPX01FTV9SQVRJTykKKyNkZWZpbmUgTUlOX05PTkRFQlVHX0lOU05fVUlEIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01JTl9OT05ERUJVR19JTlNOX1VJRCkKKyNkZWZpbmUgTUFYX1NUT1JFU19UT19TSU5LIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX01BWF9TVE9SRVNfVE9fU0lOSykKKyNkZWZpbmUgQUxMT1dfTE9BRF9EQVRBX1JBQ0VTIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0FMTE9XX0xPQURfREFUQV9SQUNFUykKKyNkZWZpbmUgQUxMT1dfU1RPUkVfREFUQV9SQUNFUyBcCisgIFBBUkFNX1ZBTFVFIChQQVJBTV9BTExPV19TVE9SRV9EQVRBX1JBQ0VTKQorI2RlZmluZSBBTExPV19QQUNLRURfTE9BRF9EQVRBX1JBQ0VTIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0FMTE9XX1BBQ0tFRF9MT0FEX0RBVEFfUkFDRVMpCisjZGVmaW5lIEFMTE9XX1BBQ0tFRF9TVE9SRV9EQVRBX1JBQ0VTIFwKKyAgUEFSQU1fVkFMVUUgKFBBUkFNX0FMTE9XX1BBQ0tFRF9TVE9SRV9EQVRBX1JBQ0VTKQorCisjZW5kaWYgLyogISBHQ0NfUEFSQU1TX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9wbHVnaW4tYXBpLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcGx1Z2luLWFwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTdkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcGx1Z2luLWFwaS5oCkBAIC0wLDAgKzEsNDMyIEBACisvKiBwbHVnaW4tYXBpLmggLS0gRXh0ZXJuYWwgbGlua2VyIHBsdWdpbiBBUEkuICAqLworCisvKiBDb3B5cmlnaHQgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFdyaXR0ZW4gYnkgQ2FyeSBDb3V0YW50IDxjY291dGFudEBnb29nbGUuY29tPi4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgYmludXRpbHMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAgIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBpbnRlcmZhY2UgZm9yIHdyaXRpbmcgYSBsaW5rZXIgcGx1Z2luLCB3aGljaCBpcworICAgZGVzY3JpYmVkIGF0IDwgaHR0cDovL2djYy5nbnUub3JnL3dpa2kvd2hvcHIvZHJpdmVyID4uICAqLworCisjaWZuZGVmIFBMVUdJTl9BUElfSAorI2RlZmluZSBQTFVHSU5fQVBJX0gKKworI2lmZGVmIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9JTlRUWVBFU19IKQorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiAhZGVmaW5lZChIQVZFX1NURElOVF9IKSAmJiAhZGVmaW5lZChIQVZFX0lOVFRZUEVTX0gpICYmIFwKKyAgICAhZGVmaW5lZChVSU5UNjRfTUFYKSAmJiAhZGVmaW5lZCh1aW50NjRfdCkKKyNlcnJvciBjYW4gbm90IGZpbmQgdWludDY0X3QgdHlwZQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisKKy8qIFN0YXR1cyBjb2RlIHJldHVybmVkIGJ5IG1vc3QgQVBJIHJvdXRpbmVzLiAgKi8KKworZW51bSBsZF9wbHVnaW5fc3RhdHVzCit7CisgIExEUFNfT0sgPSAwLAorICBMRFBTX05PX1NZTVMsICAgICAgICAgLyogQXR0ZW1wdCB0byBnZXQgc3ltYm9scyB0aGF0IGhhdmVuJ3QgYmVlbiBhZGRlZC4gKi8KKyAgTERQU19CQURfSEFORExFLCAgICAgIC8qIE5vIGNsYWltZWQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBoYW5kbGUuICovCisgIExEUFNfRVJSCisgIC8qIEFkZGl0aW9uYWwgRXJyb3IgY29kZXMgVEJELiAgKi8KK307CisKKy8qIFRoZSB2ZXJzaW9uIG9mIHRoZSBBUEkgc3BlY2lmaWNhdGlvbi4gICovCisKK2VudW0gbGRfcGx1Z2luX2FwaV92ZXJzaW9uCit7CisgIExEX1BMVUdJTl9BUElfVkVSU0lPTiA9IDEKK307CisKKy8qIFRoZSB0eXBlIG9mIG91dHB1dCBmaWxlIGJlaW5nIGdlbmVyYXRlZCBieSB0aGUgbGlua2VyLiAgKi8KKworZW51bSBsZF9wbHVnaW5fb3V0cHV0X2ZpbGVfdHlwZQoreworICBMRFBPX1JFTCwKKyAgTERQT19FWEVDLAorICBMRFBPX0RZTiwKKyAgTERQT19QSUUKK307CisKKy8qIEFuIGlucHV0IGZpbGUgbWFuYWdlZCBieSB0aGUgcGx1Z2luIGxpYnJhcnkuICAqLworCitzdHJ1Y3QgbGRfcGx1Z2luX2lucHV0X2ZpbGUKK3sKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgaW50IGZkOworICBvZmZfdCBvZmZzZXQ7CisgIG9mZl90IGZpbGVzaXplOworICB2b2lkICpoYW5kbGU7Cit9OworCisvKiBBIHN5bWJvbCBiZWxvbmdpbmcgdG8gYW4gaW5wdXQgZmlsZSBtYW5hZ2VkIGJ5IHRoZSBwbHVnaW4gbGlicmFyeS4gICovCisKK3N0cnVjdCBsZF9wbHVnaW5fc3ltYm9sCit7CisgIGNoYXIgKm5hbWU7CisgIGNoYXIgKnZlcnNpb247CisgIGludCBkZWY7CisgIGludCB2aXNpYmlsaXR5OworICB1aW50NjRfdCBzaXplOworICBjaGFyICpjb21kYXRfa2V5OworICBpbnQgcmVzb2x1dGlvbjsKK307CisKKy8qIEFuIG9iamVjdCdzIHNlY3Rpb24uICAqLworCitzdHJ1Y3QgbGRfcGx1Z2luX3NlY3Rpb24KK3sKKyAgY29uc3Qgdm9pZCogaGFuZGxlOworICB1bnNpZ25lZCBpbnQgc2huZHg7Cit9OworCisvKiBXaGV0aGVyIHRoZSBzeW1ib2wgaXMgYSBkZWZpbml0aW9uLCByZWZlcmVuY2UsIG9yIGNvbW1vbiwgd2VhayBvciBub3QuICAqLworCitlbnVtIGxkX3BsdWdpbl9zeW1ib2xfa2luZAoreworICBMRFBLX0RFRiwKKyAgTERQS19XRUFLREVGLAorICBMRFBLX1VOREVGLAorICBMRFBLX1dFQUtVTkRFRiwKKyAgTERQS19DT01NT04KK307CisKKy8qIFRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzeW1ib2wuICAqLworCitlbnVtIGxkX3BsdWdpbl9zeW1ib2xfdmlzaWJpbGl0eQoreworICBMRFBWX0RFRkFVTFQsCisgIExEUFZfUFJPVEVDVEVELAorICBMRFBWX0lOVEVSTkFMLAorICBMRFBWX0hJRERFTgorfTsKKworLyogSG93IGEgc3ltYm9sIGlzIHJlc29sdmVkLiAgKi8KKworZW51bSBsZF9wbHVnaW5fc3ltYm9sX3Jlc29sdXRpb24KK3sKKyAgTERQUl9VTktOT1dOID0gMCwKKworICAvKiBTeW1ib2wgaXMgc3RpbGwgdW5kZWZpbmVkIGF0IHRoaXMgcG9pbnQuICAqLworICBMRFBSX1VOREVGLAorCisgIC8qIFRoaXMgaXMgdGhlIHByZXZhaWxpbmcgZGVmaW5pdGlvbiBvZiB0aGUgc3ltYm9sLCB3aXRoIHJlZmVyZW5jZXMgZnJvbQorICAgICByZWd1bGFyIG9iamVjdCBjb2RlLiAgKi8KKyAgTERQUl9QUkVWQUlMSU5HX0RFRiwKKworICAvKiBUaGlzIGlzIHRoZSBwcmV2YWlsaW5nIGRlZmluaXRpb24gb2YgdGhlIHN5bWJvbCwgd2l0aCBubworICAgICByZWZlcmVuY2VzIGZyb20gcmVndWxhciBvYmplY3RzLiAgSXQgaXMgb25seSByZWZlcmVuY2VkIGZyb20gSVIKKyAgICAgY29kZS4gICovCisgIExEUFJfUFJFVkFJTElOR19ERUZfSVJPTkxZLAorCisgIC8qIFRoaXMgZGVmaW5pdGlvbiB3YXMgcHJlLWVtcHRlZCBieSBhIGRlZmluaXRpb24gaW4gYSByZWd1bGFyCisgICAgIG9iamVjdCBmaWxlLiAgKi8KKyAgTERQUl9QUkVFTVBURURfUkVHLAorCisgIC8qIFRoaXMgZGVmaW5pdGlvbiB3YXMgcHJlLWVtcHRlZCBieSBhIGRlZmluaXRpb24gaW4gYW5vdGhlciBJUiBmaWxlLiAgKi8KKyAgTERQUl9QUkVFTVBURURfSVIsCisKKyAgLyogVGhpcyBzeW1ib2wgd2FzIHJlc29sdmVkIGJ5IGEgZGVmaW5pdGlvbiBpbiBhbm90aGVyIElSIGZpbGUuICAqLworICBMRFBSX1JFU09MVkVEX0lSLAorCisgIC8qIFRoaXMgc3ltYm9sIHdhcyByZXNvbHZlZCBieSBhIGRlZmluaXRpb24gaW4gYSByZWd1bGFyIG9iamVjdAorICAgICBsaW5rZWQgaW50byB0aGUgbWFpbiBleGVjdXRhYmxlLiAgKi8KKyAgTERQUl9SRVNPTFZFRF9FWEVDLAorCisgIC8qIFRoaXMgc3ltYm9sIHdhcyByZXNvbHZlZCBieSBhIGRlZmluaXRpb24gaW4gYSBzaGFyZWQgb2JqZWN0LiAgKi8KKyAgTERQUl9SRVNPTFZFRF9EWU4sCisKKyAgLyogVGhpcyBpcyB0aGUgcHJldmFpbGluZyBkZWZpbml0aW9uIG9mIHRoZSBzeW1ib2wsIHdpdGggbm8KKyAgICAgcmVmZXJlbmNlcyBmcm9tIHJlZ3VsYXIgb2JqZWN0cy4gIEl0IGlzIG9ubHkgcmVmZXJlbmNlZCBmcm9tIElSCisgICAgIGNvZGUsIGJ1dCB0aGUgc3ltYm9sIGlzIGV4cG9ydGVkIGFuZCBtYXkgYmUgcmVmZXJlbmNlZCBmcm9tCisgICAgIGEgZHluYW1pYyBvYmplY3QgKG5vdCBzZWVuIGF0IGxpbmsgdGltZSkuICAqLworICBMRFBSX1BSRVZBSUxJTkdfREVGX0lST05MWV9FWFAKK307CisKKy8qIFRoZSBwbHVnaW4gbGlicmFyeSdzICJjbGFpbSBmaWxlIiBoYW5kbGVyLiAgKi8KKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVzCisoKmxkX3BsdWdpbl9jbGFpbV9maWxlX2hhbmRsZXIpICgKKyAgY29uc3Qgc3RydWN0IGxkX3BsdWdpbl9pbnB1dF9maWxlICpmaWxlLCBpbnQgKmNsYWltZWQpOworCisvKiBUaGUgcGx1Z2luIGxpYnJhcnkncyAiYWxsIHN5bWJvbHMgcmVhZCIgaGFuZGxlci4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fYWxsX3N5bWJvbHNfcmVhZF9oYW5kbGVyKSAodm9pZCk7CisKKy8qIFRoZSBwbHVnaW4gbGlicmFyeSdzIGNsZWFudXAgaGFuZGxlci4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fY2xlYW51cF9oYW5kbGVyKSAodm9pZCk7CisKKy8qIFRoZSBsaW5rZXIncyBpbnRlcmZhY2UgZm9yIHJlZ2lzdGVyaW5nIHRoZSAiY2xhaW0gZmlsZSIgaGFuZGxlci4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fcmVnaXN0ZXJfY2xhaW1fZmlsZSkgKGxkX3BsdWdpbl9jbGFpbV9maWxlX2hhbmRsZXIgaGFuZGxlcik7CisKKy8qIFRoZSBsaW5rZXIncyBpbnRlcmZhY2UgZm9yIHJlZ2lzdGVyaW5nIHRoZSAiYWxsIHN5bWJvbHMgcmVhZCIgaGFuZGxlci4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fcmVnaXN0ZXJfYWxsX3N5bWJvbHNfcmVhZCkgKAorICBsZF9wbHVnaW5fYWxsX3N5bWJvbHNfcmVhZF9oYW5kbGVyIGhhbmRsZXIpOworCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJmYWNlIGZvciByZWdpc3RlcmluZyB0aGUgY2xlYW51cCBoYW5kbGVyLiAgKi8KKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVzCisoKmxkX3BsdWdpbl9yZWdpc3Rlcl9jbGVhbnVwKSAobGRfcGx1Z2luX2NsZWFudXBfaGFuZGxlciBoYW5kbGVyKTsKKworLyogVGhlIGxpbmtlcidzIGludGVyZmFjZSBmb3IgYWRkaW5nIHN5bWJvbHMgZnJvbSBhIGNsYWltZWQgaW5wdXQgZmlsZS4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fYWRkX3N5bWJvbHMpICh2b2lkICpoYW5kbGUsIGludCBuc3ltcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGxkX3BsdWdpbl9zeW1ib2wgKnN5bXMpOworCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJmYWNlIGZvciBnZXR0aW5nIHRoZSBpbnB1dCBmaWxlIGluZm9ybWF0aW9uIHdpdGgKKyAgIGFuIG9wZW4gKHBvc3NpYmx5IHJlLW9wZW5lZCkgZmlsZSBkZXNjcmlwdG9yLiAgKi8KKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVzCisoKmxkX3BsdWdpbl9nZXRfaW5wdXRfZmlsZSkgKGNvbnN0IHZvaWQgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxkX3BsdWdpbl9pbnB1dF9maWxlICpmaWxlKTsKKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVzCisoKmxkX3BsdWdpbl9nZXRfdmlldykgKGNvbnN0IHZvaWQgKmhhbmRsZSwgY29uc3Qgdm9pZCAqKnZpZXdwKTsKKworLyogVGhlIGxpbmtlcidzIGludGVyZmFjZSBmb3IgcmVsZWFzaW5nIHRoZSBpbnB1dCBmaWxlLiAgKi8KKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVzCisoKmxkX3BsdWdpbl9yZWxlYXNlX2lucHV0X2ZpbGUpIChjb25zdCB2b2lkICpoYW5kbGUpOworCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJmYWNlIGZvciByZXRyaWV2aW5nIHN5bWJvbCByZXNvbHV0aW9uIGluZm9ybWF0aW9uLiAgKi8KKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVzCisoKmxkX3BsdWdpbl9nZXRfc3ltYm9scykgKGNvbnN0IHZvaWQgKmhhbmRsZSwgaW50IG5zeW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGRfcGx1Z2luX3N5bWJvbCAqc3ltcyk7CisKKy8qIFRoZSBsaW5rZXIncyBpbnRlcmZhY2UgZm9yIGFkZGluZyBhIGNvbXBpbGVkIGlucHV0IGZpbGUuICAqLworCit0eXBlZGVmCitlbnVtIGxkX3BsdWdpbl9zdGF0dXMKKygqbGRfcGx1Z2luX2FkZF9pbnB1dF9maWxlKSAoY29uc3QgY2hhciAqcGF0aG5hbWUpOworCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJmYWNlIGZvciBhZGRpbmcgYSBsaWJyYXJ5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkLiAgKi8KKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVzCisoKmxkX3BsdWdpbl9hZGRfaW5wdXRfbGlicmFyeSkgKGNvbnN0IGNoYXIgKmxpYm5hbWUpOworCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJmYWNlIGZvciBhZGRpbmcgYSBsaWJyYXJ5IHBhdGggdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQuICAqLworCit0eXBlZGVmCitlbnVtIGxkX3BsdWdpbl9zdGF0dXMKKygqbGRfcGx1Z2luX3NldF9leHRyYV9saWJyYXJ5X3BhdGgpIChjb25zdCBjaGFyICpwYXRoKTsKKworLyogVGhlIGxpbmtlcidzIGludGVyZmFjZSBmb3IgaXNzdWluZyBhIHdhcm5pbmcgb3IgZXJyb3IgbWVzc2FnZS4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fbWVzc2FnZSkgKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJmYWNlIGZvciByZXRyaWV2aW5nIHRoZSBudW1iZXIgb2Ygc2VjdGlvbnMgaW4gYW4gb2JqZWN0LgorICAgVGhlIGhhbmRsZSBpcyBvYnRhaW5lZCBpbiB0aGUgY2xhaW1fZmlsZSBoYW5kbGVyLiAgVGhpcyBpbnRlcmZhY2Ugc2hvdWxkCisgICBvbmx5IGJlIGludm9rZWQgaW4gdGhlIGNsYWltX2ZpbGUgaGFuZGxlci4gICBUaGlzIGZ1bmN0aW9uIHNldHMgKkNPVU5UIHRvCisgICB0aGUgbnVtYmVyIG9mIHNlY3Rpb25zIGluIHRoZSBvYmplY3QuICAqLworCit0eXBlZGVmCitlbnVtIGxkX3BsdWdpbl9zdGF0dXMKKygqbGRfcGx1Z2luX2dldF9pbnB1dF9zZWN0aW9uX2NvdW50KSAoY29uc3Qgdm9pZCogaGFuZGxlLCB1bnNpZ25lZCBpbnQgKmNvdW50KTsKKworLyogVGhlIGxpbmtlcidzIGludGVyZmFjZSBmb3IgcmV0cmlldmluZyB0aGUgc2VjdGlvbiB0eXBlIG9mIGEgc3BlY2lmaWMKKyAgIHNlY3Rpb24gaW4gYW4gb2JqZWN0LiAgVGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG9ubHkgYmUgaW52b2tlZCBpbiB0aGUKKyAgIGNsYWltX2ZpbGUgaGFuZGxlci4gIFRoaXMgZnVuY3Rpb24gc2V0cyAqVFlQRSB0byBhbiBFTEYgU0hUX3h4eCB2YWx1ZS4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fZ2V0X2lucHV0X3NlY3Rpb25fdHlwZSkgKGNvbnN0IHN0cnVjdCBsZF9wbHVnaW5fc2VjdGlvbiBzZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqdHlwZSk7CisKKy8qIFRoZSBsaW5rZXIncyBpbnRlcmZhY2UgZm9yIHJldHJpZXZpbmcgdGhlIG5hbWUgb2YgYSBzcGVjaWZpYyBzZWN0aW9uIGluCisgICBhbiBvYmplY3QuIFRoaXMgaW50ZXJmYWNlIHNob3VsZCBvbmx5IGJlIGludm9rZWQgaW4gdGhlIGNsYWltX2ZpbGUgaGFuZGxlci4KKyAgIFRoaXMgZnVuY3Rpb24gc2V0cyAqU0VDVElPTl9OQU1FX1BUUiB0byBhIG51bGwtdGVybWluYXRlZCBidWZmZXIgYWxsb2NhdGVkCisgICBieSBtYWxsb2MuICBUaGUgcGx1Z2luIG11c3QgZnJlZSAqU0VDVElPTl9OQU1FX1BUUi4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fZ2V0X2lucHV0X3NlY3Rpb25fbmFtZSkgKGNvbnN0IHN0cnVjdCBsZF9wbHVnaW5fc2VjdGlvbiBzZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipzZWN0aW9uX25hbWVfcHRyKTsKKworLyogVGhlIGxpbmtlcidzIGludGVyZmFjZSBmb3IgcmV0cmlldmluZyB0aGUgY29udGVudHMgb2YgYSBzcGVjaWZpYyBzZWN0aW9uCisgICBpbiBhbiBvYmplY3QuICBUaGlzIGludGVyZmFjZSBzaG91bGQgb25seSBiZSBpbnZva2VkIGluIHRoZSBjbGFpbV9maWxlCisgICBoYW5kbGVyLiAgVGhpcyBmdW5jdGlvbiBzZXRzICpTRUNUSU9OX0NPTlRFTlRTIHRvIHBvaW50IHRvIGEgYnVmZmVyIHRoYXQgaXMKKyAgIHZhbGlkIHVudGlsIGNsYW1fZmlsZSBoYW5kbGVyIHJldHVybnMuICBJdCBzZXRzICpMRU4gdG8gdGhlIHNpemUgb2YgdGhlCisgICBidWZmZXIuICAqLworCit0eXBlZGVmCitlbnVtIGxkX3BsdWdpbl9zdGF0dXMKKygqbGRfcGx1Z2luX2dldF9pbnB1dF9zZWN0aW9uX2NvbnRlbnRzKSAoY29uc3Qgc3RydWN0IGxkX3BsdWdpbl9zZWN0aW9uIHNlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipzZWN0aW9uX2NvbnRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqIGxlbik7CisKKy8qIFRoZSBsaW5rZXIncyBpbnRlcmZhY2UgZm9yIHNwZWNpZnlpbmcgdGhlIGRlc2lyZWQgb3JkZXIgb2Ygc2VjdGlvbnMuCisgICBUaGUgc2VjdGlvbnMgc2hvdWxkIGJlIHNwZWNpZmVkIHVzaW5nIHRoZSBhcnJheSBTRUNUSU9OX0xJU1QgaW4gdGhlCisgICBvcmRlciBpbiB3aGljaCB0aGV5IHNob3VsZCBhcHBlYXIgaW4gdGhlIGZpbmFsIGxheW91dC4gIE5VTV9TRUNUSU9OUworICAgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBlYWNoIGFycmF5LiAgVGhpcyBzaG91bGQgYmUgaW52b2tlZAorICAgaW4gdGhlIGFsbF9zeW1ib2xzX3JlYWQgaGFuZGxlci4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fdXBkYXRlX3NlY3Rpb25fb3JkZXIpIChjb25zdCBzdHJ1Y3QgbGRfcGx1Z2luX3NlY3Rpb24gKnNlY3Rpb25fbGlzdCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3Rpb25zKTsKKworLyogVGhlIGxpbmtlcidzIGludGVyZmFjZSBmb3Igc3BlY2lmeWluZyB0aGF0IHJlb3JkZXJpbmcgb2Ygc2VjdGlvbnMgaXMKKyAgIGRlc2lyZWQgc28gdGhhdCB0aGUgbGlua2VyIGNhbiBwcmVwYXJlIGZvciBpdC4gIFRoaXMgc2hvdWxkIGJlIGludm9rZWQKKyAgIGJlZm9yZSB1cGRhdGVfc2VjdGlvbl9vcmRlciwgcHJlZmVyYWJseSBpbiB0aGUgY2xhaW1fZmlsZSBoYW5kbGVyLiAgKi8KKwordHlwZWRlZgorZW51bSBsZF9wbHVnaW5fc3RhdHVzCisoKmxkX3BsdWdpbl9hbGxvd19zZWN0aW9uX29yZGVyaW5nKSAodm9pZCk7CisKKy8qIFRoZSBsaW5rZXIncyBpbnRlcmZhY2UgZm9yIHNwZWNpZnlpbmcgdGhhdCBhIHN1YnNldCBvZiBzZWN0aW9ucyBpcworICAgdG8gYmUgbWFwcGVkIHRvIGEgdW5pcXVlIHNlZ21lbnQuICBJZiB0aGUgcGx1Z2luIHdhbnRzIHRvIGNhbGwKKyAgIHVuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucywgaXQgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhCisgICBjbGFpbV9maWxlX2hhbmRsZXIgb3Igd2hlbiBpdCBpcyBmaXJzdCBsb2FkZWQuICAqLworCit0eXBlZGVmCitlbnVtIGxkX3BsdWdpbl9zdGF0dXMKKygqbGRfcGx1Z2luX2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucykgKHZvaWQpOworCisvKiBUaGUgbGlua2VyJ3MgaW50ZXJmYWNlIGZvciBzcGVjaWZ5aW5nIHRoYXQgYSBzcGVjaWZpYyBzZXQgb2Ygc2VjdGlvbnMKKyAgIG11c3QgYmUgbWFwcGVkIHRvIGEgdW5pcXVlIHNlZ21lbnQuICBFTEYgc2VnbWVudHMgZG8gbm90IGhhdmUgbmFtZXMKKyAgIGFuZCB0aGUgTkFNRSBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBuZXdseSBjcmVhdGVkIG91dHB1dCBzZWN0aW9uCisgICB0aGF0IGlzIHRoZW4gcGxhY2VkIGluIHRoZSB1bmlxdWUgUFRfTE9BRCBzZWdtZW50LiAgRkxBR1MgaXMgdXNlZCB0bworICAgc3BlY2lmeSBpZiBhbnkgYWRkaXRpb25hbCBzZWdtZW50IGZsYWdzIG5lZWQgdG8gYmUgc2V0LiAgRm9yIGluc3RhbmNlLAorICAgYSBzcGVjaWZpYyBzZWdtZW50IGZsYWcgY2FuIGJlIHNldCB0byBpZGVudGlmeSB0aGlzIHNlZ21lbnQuICBVbnNldHRpbmcKKyAgIHNlZ21lbnQgZmxhZ3MgdGhhdCB3b3VsZCBiZSBzZXQgYnkgZGVmYXVsdCBpcyBub3QgcG9zc2libGUuICBUaGUKKyAgIHBhcmFtZXRlciBTRUdNRU5UX0FMSUdOTUVOVCB3aGVuIG5vbi16ZXJvIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQuICAqLworCit0eXBlZGVmCitlbnVtIGxkX3BsdWdpbl9zdGF0dXMKKygqbGRfcGx1Z2luX3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucykgKAorICAgIGNvbnN0IGNoYXIqIHNlZ21lbnRfbmFtZSwKKyAgICB1aW50NjRfdCBzZWdtZW50X2ZsYWdzLAorICAgIHVpbnQ2NF90IHNlZ21lbnRfYWxpZ25tZW50LAorICAgIGNvbnN0IHN0cnVjdCBsZF9wbHVnaW5fc2VjdGlvbiAqIHNlY3Rpb25fbGlzdCwKKyAgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3Rpb25zKTsKKworZW51bSBsZF9wbHVnaW5fbGV2ZWwKK3sKKyAgTERQTF9JTkZPLAorICBMRFBMX1dBUk5JTkcsCisgIExEUExfRVJST1IsCisgIExEUExfRkFUQUwKK307CisKKy8qIFZhbHVlcyBmb3IgdGhlIHR2X3RhZyBmaWVsZCBvZiB0aGUgdHJhbnNmZXIgdmVjdG9yLiAgKi8KKworZW51bSBsZF9wbHVnaW5fdGFnCit7CisgIExEUFRfTlVMTCA9IDAsCisgIExEUFRfQVBJX1ZFUlNJT04gPSAxLAorICBMRFBUX0dPTERfVkVSU0lPTiA9IDIsCisgIExEUFRfTElOS0VSX09VVFBVVCA9IDMsCisgIExEUFRfT1BUSU9OID0gNCwKKyAgTERQVF9SRUdJU1RFUl9DTEFJTV9GSUxFX0hPT0sgPSA1LAorICBMRFBUX1JFR0lTVEVSX0FMTF9TWU1CT0xTX1JFQURfSE9PSyA9IDYsCisgIExEUFRfUkVHSVNURVJfQ0xFQU5VUF9IT09LID0gNywKKyAgTERQVF9BRERfU1lNQk9MUyA9IDgsCisgIExEUFRfR0VUX1NZTUJPTFMgPSA5LAorICBMRFBUX0FERF9JTlBVVF9GSUxFID0gMTAsCisgIExEUFRfTUVTU0FHRSA9IDExLAorICBMRFBUX0dFVF9JTlBVVF9GSUxFID0gMTIsCisgIExEUFRfUkVMRUFTRV9JTlBVVF9GSUxFID0gMTMsCisgIExEUFRfQUREX0lOUFVUX0xJQlJBUlkgPSAxNCwKKyAgTERQVF9PVVRQVVRfTkFNRSA9IDE1LAorICBMRFBUX1NFVF9FWFRSQV9MSUJSQVJZX1BBVEggPSAxNiwKKyAgTERQVF9HTlVfTERfVkVSU0lPTiA9IDE3LAorICBMRFBUX0dFVF9WSUVXID0gMTgsCisgIExEUFRfR0VUX0lOUFVUX1NFQ1RJT05fQ09VTlQgPSAxOSwKKyAgTERQVF9HRVRfSU5QVVRfU0VDVElPTl9UWVBFID0gMjAsCisgIExEUFRfR0VUX0lOUFVUX1NFQ1RJT05fTkFNRSA9IDIxLAorICBMRFBUX0dFVF9JTlBVVF9TRUNUSU9OX0NPTlRFTlRTID0gMjIsCisgIExEUFRfVVBEQVRFX1NFQ1RJT05fT1JERVIgPSAyMywKKyAgTERQVF9BTExPV19TRUNUSU9OX09SREVSSU5HID0gMjQsCisgIExEUFRfR0VUX1NZTUJPTFNfVjIgPSAyNSwKKyAgTERQVF9BTExPV19VTklRVUVfU0VHTUVOVF9GT1JfU0VDVElPTlMgPSAyNiwKKyAgTERQVF9VTklRVUVfU0VHTUVOVF9GT1JfU0VDVElPTlMgPSAyNworfTsKKworLyogVGhlIHBsdWdpbiB0cmFuc2ZlciB2ZWN0b3IuICAqLworCitzdHJ1Y3QgbGRfcGx1Z2luX3R2Cit7CisgIGVudW0gbGRfcGx1Z2luX3RhZyB0dl90YWc7CisgIHVuaW9uCisgIHsKKyAgICBpbnQgdHZfdmFsOworICAgIGNvbnN0IGNoYXIgKnR2X3N0cmluZzsKKyAgICBsZF9wbHVnaW5fcmVnaXN0ZXJfY2xhaW1fZmlsZSB0dl9yZWdpc3Rlcl9jbGFpbV9maWxlOworICAgIGxkX3BsdWdpbl9yZWdpc3Rlcl9hbGxfc3ltYm9sc19yZWFkIHR2X3JlZ2lzdGVyX2FsbF9zeW1ib2xzX3JlYWQ7CisgICAgbGRfcGx1Z2luX3JlZ2lzdGVyX2NsZWFudXAgdHZfcmVnaXN0ZXJfY2xlYW51cDsKKyAgICBsZF9wbHVnaW5fYWRkX3N5bWJvbHMgdHZfYWRkX3N5bWJvbHM7CisgICAgbGRfcGx1Z2luX2dldF9zeW1ib2xzIHR2X2dldF9zeW1ib2xzOworICAgIGxkX3BsdWdpbl9hZGRfaW5wdXRfZmlsZSB0dl9hZGRfaW5wdXRfZmlsZTsKKyAgICBsZF9wbHVnaW5fbWVzc2FnZSB0dl9tZXNzYWdlOworICAgIGxkX3BsdWdpbl9nZXRfaW5wdXRfZmlsZSB0dl9nZXRfaW5wdXRfZmlsZTsKKyAgICBsZF9wbHVnaW5fZ2V0X3ZpZXcgdHZfZ2V0X3ZpZXc7CisgICAgbGRfcGx1Z2luX3JlbGVhc2VfaW5wdXRfZmlsZSB0dl9yZWxlYXNlX2lucHV0X2ZpbGU7CisgICAgbGRfcGx1Z2luX2FkZF9pbnB1dF9saWJyYXJ5IHR2X2FkZF9pbnB1dF9saWJyYXJ5OworICAgIGxkX3BsdWdpbl9zZXRfZXh0cmFfbGlicmFyeV9wYXRoIHR2X3NldF9leHRyYV9saWJyYXJ5X3BhdGg7CisgICAgbGRfcGx1Z2luX2dldF9pbnB1dF9zZWN0aW9uX2NvdW50IHR2X2dldF9pbnB1dF9zZWN0aW9uX2NvdW50OworICAgIGxkX3BsdWdpbl9nZXRfaW5wdXRfc2VjdGlvbl90eXBlIHR2X2dldF9pbnB1dF9zZWN0aW9uX3R5cGU7CisgICAgbGRfcGx1Z2luX2dldF9pbnB1dF9zZWN0aW9uX25hbWUgdHZfZ2V0X2lucHV0X3NlY3Rpb25fbmFtZTsKKyAgICBsZF9wbHVnaW5fZ2V0X2lucHV0X3NlY3Rpb25fY29udGVudHMgdHZfZ2V0X2lucHV0X3NlY3Rpb25fY29udGVudHM7CisgICAgbGRfcGx1Z2luX3VwZGF0ZV9zZWN0aW9uX29yZGVyIHR2X3VwZGF0ZV9zZWN0aW9uX29yZGVyOworICAgIGxkX3BsdWdpbl9hbGxvd19zZWN0aW9uX29yZGVyaW5nIHR2X2FsbG93X3NlY3Rpb25fb3JkZXJpbmc7CisgICAgbGRfcGx1Z2luX2FsbG93X3VuaXF1ZV9zZWdtZW50X2Zvcl9zZWN0aW9ucyB0dl9hbGxvd191bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnM7IAorICAgIGxkX3BsdWdpbl91bmlxdWVfc2VnbWVudF9mb3Jfc2VjdGlvbnMgdHZfdW5pcXVlX3NlZ21lbnRfZm9yX3NlY3Rpb25zOworICB9IHR2X3U7Cit9OworCisvKiBUaGUgcGx1Z2luIGxpYnJhcnkncyAib25sb2FkIiBlbnRyeSBwb2ludC4gICovCisKK3R5cGVkZWYKK2VudW0gbGRfcGx1Z2luX3N0YXR1cworKCpsZF9wbHVnaW5fb25sb2FkKSAoc3RydWN0IGxkX3BsdWdpbl90diAqdHYpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogIWRlZmluZWQoUExVR0lOX0FQSV9IKSAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BsdWdpbi12ZXJzaW9uLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcGx1Z2luLXZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDQxY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BsdWdpbi12ZXJzaW9uLmgKQEAgLTAsMCArMSwxOCBAQAorI2luY2x1ZGUgImNvbmZpZ2FyZ3MuaCIKKworI2RlZmluZSBHQ0NQTFVHSU5fVkVSU0lPTl9NQUpPUiAgIDQKKyNkZWZpbmUgR0NDUExVR0lOX1ZFUlNJT05fTUlOT1IgICA4CisjZGVmaW5lIEdDQ1BMVUdJTl9WRVJTSU9OX1BBVENITEVWRUwgICAzCisjZGVmaW5lIEdDQ1BMVUdJTl9WRVJTSU9OICAoR0NDUExVR0lOX1ZFUlNJT05fTUFKT1IqMTAwMCArIEdDQ1BMVUdJTl9WRVJTSU9OX01JTk9SKQorCitzdGF0aWMgY2hhciBiYXNldmVyW10gPSAiNC44LjMiOworc3RhdGljIGNoYXIgZGF0ZXN0YW1wW10gPSAiMjAxMzExMTEiOworc3RhdGljIGNoYXIgZGV2cGhhc2VbXSA9ICJwcmVyZWxlYXNlIjsKK3N0YXRpYyBjaGFyIHJldmlzaW9uW10gPSAiIjsKKworLyogRklYTUUgcGx1Z2luczogV2Ugc2hvdWxkIG1ha2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gbW9yZSBwcmVjaXNlLgorICAgT25lIHdheSB0byBkbyBpcyB0byBhZGQgYSBjaGVja3N1bS4gKi8KKworc3RhdGljIHN0cnVjdCBwbHVnaW5fZ2NjX3ZlcnNpb24gZ2NjX3ZlcnNpb24gPSB7YmFzZXZlciwgZGF0ZXN0YW1wLAorCQkJCQkJZGV2cGhhc2UsIHJldmlzaW9uLAorCQkJCQkJY29uZmlndXJhdGlvbl9hcmd1bWVudHN9OwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BsdWdpbi5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcGx1Z2luLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNhNjFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BsdWdpbi5kZWYKQEAgLTAsMCArMSw5NyBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgcGx1Z2luIGV2ZW50cyBpbiBHQ0MuCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworLyogVG8gaG9vayBpbnRvIHBhc3MgbWFuYWdlci4gICovCitERUZFVkVOVCAoUExVR0lOX1BBU1NfTUFOQUdFUl9TRVRVUCkKKworLyogQWZ0ZXIgZmluaXNoaW5nIHBhcnNpbmcgYSB0eXBlLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fRklOSVNIX1RZUEUpCisKKy8qIEFmdGVyIGZpbmlzaGluZyBwYXJzaW5nIGEgZGVjbGFyYXRpb24uICovCitERUZFVkVOVCAoUExVR0lOX0ZJTklTSF9ERUNMKQorCisvKiBVc2VmdWwgZm9yIHN1bW1hcnkgcHJvY2Vzc2luZy4gICovCitERUZFVkVOVCAoUExVR0lOX0ZJTklTSF9VTklUKQorCisvKiBBbGxvd3MgdG8gc2VlIGxvdyBsZXZlbCBBU1QgaW4gQyBhbmQgQysrIGZyb250ZW5kcy4gKi8KK0RFRkVWRU5UIChQTFVHSU5fUFJFX0dFTkVSSUNJWkUpCisKKy8qIENhbGxlZCBiZWZvcmUgR0NDIGV4aXRzLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fRklOSVNIKQorCisvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcGx1Z2luLiAqLworREVGRVZFTlQgKFBMVUdJTl9JTkZPKQorCisvKiBDYWxsZWQgYXQgc3RhcnQgb2YgR0NDIEdhcmJhZ2UgQ29sbGVjdGlvbi4gKi8KK0RFRkVWRU5UIChQTFVHSU5fR0dDX1NUQVJUKQorCisvKiBFeHRlbmQgdGhlIEdHQyBtYXJraW5nLiAqLworREVGRVZFTlQgKFBMVUdJTl9HR0NfTUFSS0lORykKKworLyogQ2FsbGVkIGF0IGVuZCBvZiBHR0MuICovCitERUZFVkVOVCAoUExVR0lOX0dHQ19FTkQpCisKKy8qIFJlZ2lzdGVyIGFuIGV4dHJhIEdHQyByb290IHRhYmxlLiAqLworREVGRVZFTlQgKFBMVUdJTl9SRUdJU1RFUl9HR0NfUk9PVFMpCisKKy8qIFJlZ2lzdGVyIGFuIGV4dHJhIEdHQyBjYWNoZSB0YWJsZS4gKi8KK0RFRkVWRU5UIChQTFVHSU5fUkVHSVNURVJfR0dDX0NBQ0hFUykKKworLyogQ2FsbGVkIGR1cmluZyBhdHRyaWJ1dGUgcmVnaXN0cmF0aW9uLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fQVRUUklCVVRFUykKKworLyogQ2FsbGVkIGJlZm9yZSBwcm9jZXNzaW5nIGEgdHJhbnNsYXRpb24gdW5pdC4gICovCitERUZFVkVOVCAoUExVR0lOX1NUQVJUX1VOSVQpCisKKy8qIENhbGxlZCBkdXJpbmcgcHJhZ21hIHJlZ2lzdHJhdGlvbi4gICovCitERUZFVkVOVCAoUExVR0lOX1BSQUdNQVMpCisKKy8qIENhbGxlZCBiZWZvcmUgZmlyc3QgcGFzcyBmcm9tIGFsbF9wYXNzZXMuICAqLworREVGRVZFTlQgKFBMVUdJTl9BTExfUEFTU0VTX1NUQVJUKQorCisvKiBDYWxsZWQgYWZ0ZXIgbGFzdCBwYXNzIGZyb20gYWxsX3Bhc3Nlcy4gICovCitERUZFVkVOVCAoUExVR0lOX0FMTF9QQVNTRVNfRU5EKQorCisvKiBDYWxsZWQgYmVmb3JlIGZpcnN0IGlwYSBwYXNzLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fQUxMX0lQQV9QQVNTRVNfU1RBUlQpCisKKy8qIENhbGxlZCBhZnRlciBsYXN0IGlwYSBwYXNzLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fQUxMX0lQQV9QQVNTRVNfRU5EKQorCisvKiBBbGxvd3MgdG8gb3ZlcnJpZGUgcGFzcyBnYXRlIGRlY2lzaW9uIGZvciBjdXJyZW50X3Bhc3MuICAqLworREVGRVZFTlQgKFBMVUdJTl9PVkVSUklERV9HQVRFKQorCisvKiBDYWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBhIHBhc3MuICAqLworREVGRVZFTlQgKFBMVUdJTl9QQVNTX0VYRUNVVElPTikKKworLyogQ2FsbGVkIGJlZm9yZSBleGVjdXRpbmcgc3VicGFzc2VzIG9mIGEgR0lNUExFX1BBU1MgaW4KKyAgIGV4ZWN1dGVfaXBhX3Bhc3NfbGlzdC4gICovCitERUZFVkVOVCAoUExVR0lOX0VBUkxZX0dJTVBMRV9QQVNTRVNfU1RBUlQpCisKKy8qIENhbGxlZCBhZnRlciBleGVjdXRpbmcgc3VicGFzc2VzIG9mIGEgR0lNUExFX1BBU1MgaW4KKyAgIGV4ZWN1dGVfaXBhX3Bhc3NfbGlzdC4gICovCitERUZFVkVOVCAoUExVR0lOX0VBUkxZX0dJTVBMRV9QQVNTRVNfRU5EKQorCisvKiBDYWxsZWQgd2hlbiBhIHBhc3MgaXMgZmlyc3QgaW5zdGFudGlhdGVkLiAgKi8KK0RFRkVWRU5UIChQTFVHSU5fTkVXX1BBU1MpCisKKy8qIEFmdGVyIHRoZSBoYXJkLWNvZGVkIGV2ZW50cyBhYm92ZSwgcGx1Z2lucyBjYW4gZHluYW1pY2FsbHkgYWxsb2NhdGUgZXZlbnRzCisgICBhdCBydW4gdGltZS4KKyAgIFBMVUdJTl9FVkVOVF9GSVJTVF9EWU5BTUlDIG9ubHkgYXBwZWFycyBhcyBsYXN0IGVudW0gZWxlbWVudC4gICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcGx1Z2luLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcGx1Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1ZGY0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9wbHVnaW4uaApAQCAtMCwwICsxLDcxIEBACisvKiBIZWFkZXIgZmlsZSBmb3IgaW50ZXJuYWwgR0NDIHBsdWdpbiBtZWNoYW5pc20uCisgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgUExVR0lOX0gKKyNkZWZpbmUgUExVR0lOX0gKKworI2luY2x1ZGUgImdjYy1wbHVnaW4uaCIKKworc3RydWN0IGF0dHJpYnV0ZV9zcGVjOworc3RydWN0IHNjb3BlZF9hdHRyaWJ1dGVzOworCitleHRlcm4gdm9pZCBhZGRfbmV3X3BsdWdpbiAoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIHBhcnNlX3BsdWdpbl9hcmdfb3B0IChjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBpbnZva2VfcGx1Z2luX2NhbGxiYWNrc19mdWxsIChpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX3BsdWdpbnMgKHZvaWQpOworZXh0ZXJuIGJvb2wgcGx1Z2luc19hY3RpdmVfcCAodm9pZCk7CitleHRlcm4gdm9pZCBkdW1wX2FjdGl2ZV9wbHVnaW5zIChGSUxFICopOworZXh0ZXJuIHZvaWQgZGVidWdfYWN0aXZlX3BsdWdpbnMgKHZvaWQpOworZXh0ZXJuIHZvaWQgd2Fybl9pZl9wbHVnaW5zICh2b2lkKTsKK2V4dGVybiB2b2lkIHBsdWdpbnNfaW50ZXJuYWxfZXJyb3JfZnVuY3Rpb24gKGRpYWdub3N0aWNfY29udGV4dCAqLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCAqKTsKK2V4dGVybiB2b2lkIHByaW50X3BsdWdpbnNfdmVyc2lvbnMgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmluZGVudCk7CitleHRlcm4gdm9pZCBwcmludF9wbHVnaW5zX2hlbHAgKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmluZGVudCk7CitleHRlcm4gdm9pZCBmaW5hbGl6ZV9wbHVnaW5zICh2b2lkKTsKKworZXh0ZXJuIGJvb2wgZmxhZ19wbHVnaW5fYWRkZWQ7CisKKy8qIENhbGxlZCBmcm9tIGluc2lkZSBHQ0MuICBJbnZva2UgYWxsIHBsdWdpbiBjYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoCisgICB0aGUgc3BlY2lmaWVkIGV2ZW50LgorICAgUmV0dXJuIFBMVUdFVlRfU1VDQ0VTUyBpZiBhdCBsZWFzdCBvbmUgY2FsbGJhY2sgd2FzIGNhbGxlZCwKKyAgIFBMVUdFVlRfTk9fQ0FMTEJBQ0sgaWYgdGhlcmUgd2FzIG5vIGNhbGxiYWNrLgorCisgICBFVkVOVCAgICAtIHRoZSBldmVudCBpZGVudGlmaWVyCisgICBHQ0NfREFUQSAtIGV2ZW50LXNwZWNpZmljIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGNvbXBpbGVyICAqLworCitzdGF0aWMgaW5saW5lIGludAoraW52b2tlX3BsdWdpbl9jYWxsYmFja3MgKGludCBldmVudCBBVFRSSUJVVEVfVU5VU0VELAorCQkJIHZvaWQgKmdjY19kYXRhIEFUVFJJQlVURV9VTlVTRUQpCit7CisjaWZkZWYgRU5BQkxFX1BMVUdJTgorICAvKiBUcnVlIGlmZiBhdCBsZWFzdCBvbmUgcGx1Z2luIGhhcyBiZWVuIGFkZGVkLiAgKi8KKyAgaWYgKGZsYWdfcGx1Z2luX2FkZGVkKQorICAgIHJldHVybiBpbnZva2VfcGx1Z2luX2NhbGxiYWNrc19mdWxsIChldmVudCwgZ2NjX2RhdGEpOworI2VuZGlmCisKKyAgcmV0dXJuIFBMVUdFVlRfTk9fQ0FMTEJBQ0s7Cit9CisKKy8qIEluIGF0dHJpYnMuYy4gICovCisKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX2F0dHJpYnV0ZSAoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjICphdHRyKTsKK2V4dGVybiBzdHJ1Y3Qgc2NvcGVkX2F0dHJpYnV0ZXMqIHJlZ2lzdGVyX3Njb3BlZF9hdHRyaWJ1dGVzIChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgKiwKKwkJCQkJCQkgICAgIGNvbnN0IGNoYXIgKik7CisKKyNlbmRpZiAvKiBQTFVHSU5fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BvaW50ZXItc2V0LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcG9pbnRlci1zZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQ3Yzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3BvaW50ZXItc2V0LmgKQEAgLTAsMCArMSw0MiBAQAorLyogU2V0IG9wZXJhdGlvbnMgb24gcG9pbnRlcnMKKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBQT0lOVEVSX1NFVF9ICisjZGVmaW5lIFBPSU5URVJfU0VUX0gKKworc3RydWN0IHBvaW50ZXJfc2V0X3Q7CitzdHJ1Y3QgcG9pbnRlcl9zZXRfdCAqcG9pbnRlcl9zZXRfY3JlYXRlICh2b2lkKTsKK3ZvaWQgcG9pbnRlcl9zZXRfZGVzdHJveSAoc3RydWN0IHBvaW50ZXJfc2V0X3QgKnBzZXQpOworCitpbnQgcG9pbnRlcl9zZXRfY29udGFpbnMgKGNvbnN0IHN0cnVjdCBwb2ludGVyX3NldF90ICpwc2V0LCBjb25zdCB2b2lkICpwKTsKK2ludCBwb2ludGVyX3NldF9pbnNlcnQgKHN0cnVjdCBwb2ludGVyX3NldF90ICpwc2V0LCBjb25zdCB2b2lkICpwKTsKK3ZvaWQgcG9pbnRlcl9zZXRfdHJhdmVyc2UgKGNvbnN0IHN0cnVjdCBwb2ludGVyX3NldF90ICosCisJCQkgICBib29sICgqKSAoY29uc3Qgdm9pZCAqLCB2b2lkICopLAorCQkJICAgdm9pZCAqKTsKKworc3RydWN0IHBvaW50ZXJfbWFwX3Q7CitzdHJ1Y3QgcG9pbnRlcl9tYXBfdCAqcG9pbnRlcl9tYXBfY3JlYXRlICh2b2lkKTsKK3ZvaWQgcG9pbnRlcl9tYXBfZGVzdHJveSAoc3RydWN0IHBvaW50ZXJfbWFwX3QgKnBtYXApOworCit2b2lkICoqcG9pbnRlcl9tYXBfY29udGFpbnMgKGNvbnN0IHN0cnVjdCBwb2ludGVyX21hcF90ICpwbWFwLCBjb25zdCB2b2lkICpwKTsKK3ZvaWQgKipwb2ludGVyX21hcF9pbnNlcnQgKHN0cnVjdCBwb2ludGVyX21hcF90ICpwbWFwLCBjb25zdCB2b2lkICpwKTsKK3ZvaWQgcG9pbnRlcl9tYXBfdHJhdmVyc2UgKGNvbnN0IHN0cnVjdCBwb2ludGVyX21hcF90ICosCisJCQkgICBib29sICgqKSAoY29uc3Qgdm9pZCAqLCB2b2lkICoqLCB2b2lkICopLCB2b2lkICopOworCisjZW5kaWYgIC8qIFBPSU5URVJfU0VUX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcHJlZGljdC5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcHJlZGljdC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwNjIzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9wcmVkaWN0LmRlZgpAQCAtMCwwICsxLDEzNSBAQAorLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBicmFuY2ggcHJlZGljdGlvbiByb3V0aW5lcyBpbiB0aGUgR05VIGNvbXBpbGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBCZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSwgeW91IHNob3VsZCBkZWZpbmUgYSBtYWNybzoKKworICAgICBERUZfUFJFRElDVE9SIChFTlVNLCBOQU1FLCBISVRSQVRFKQorCisgICBUaGlzIG1hY3JvIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcHJlZGljdG9yLiAgVGhlIEVOVU0gd2lsbAorICAgYmUgb2YgdHlwZSBgZW51bSBwcmVkaWN0b3InLCBhbmQgd2lsbCBlbnVtZXJhdGUgYWxsIHN1cHBvcnRlZAorICAgcHJlZGljdG9ycy4gIFRoZSBvcmRlciBvZiBERUZfUFJFRElDVE9SIGNhbGxzIGlzIGltcG9ydGFudCwgYXMKKyAgIGluIHRoZSBmaXJzdCBtYXRjaCBjb21iaW5pbmcgaGV1cmlzdGljcywgdGhlIHByZWRpY3RvciBhcHBlYXJpbmcKKyAgIGZpcnN0IGluIHRoaXMgZmlsZSB3aWxsIHdpbi4KKworICAgTkFNRSBpcyB1c2VkIGluIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IHRvIGRldGVybWluZSBwcmVkaWN0b3IgdHlwZS4KKworICAgSElUUkFURSBpcyB0aGUgcHJvYmFiaWxpdHkgdGhhdCBlZGdlIHByZWRpY3RlZCBieSBwcmVkaWN0b3IgYXMgdGFrZW4KKyAgIHdpbGwgYmUgcmVhbGx5IHRha2VuIChzbyBpdCBzaG91bGQgYmUgYWx3YXlzIGFib3ZlCisgICBSRUdfQlJfUFJPQl9CQVNFIC8gMikuICAqLworCisKKy8qIEEgdmFsdWUgdXNlZCBhcyBmaW5hbCBvdXRjb21lIG9mIGFsbCBoZXVyaXN0aWNzLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfQ09NQklORUQsICJjb21iaW5lZCIsIFBST0JfQUxXQVlTLCAwKQorCisvKiBBbiBvdXRjb21lIGVzdGltYXRlZCBieSBEZW1wc3Rlci1TaGFmZmVyIHRoZW9yeS4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0RTX1RIRU9SWSwgIkRTIHRoZW9yeSIsIFBST0JfQUxXQVlTLCAwKQorCisvKiBBIGNvbWJpbmVkIGhldXJpc3RpY3MgdXNpbmcgcHJvYmFiaWxpdHkgZGV0ZXJtaW5lZCBieSBmaXJzdAorICAgbWF0Y2hpbmcgaGV1cmlzdGljcyBmcm9tIHRoaXMgbGlzdC4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0ZJUlNUX01BVENILCAiZmlyc3QgbWF0Y2giLCBQUk9CX0FMV0FZUywgMCkKKworLyogSGV1cmlzdGljIGFwcGx5aW5nIHdoZW4gbm8gaGV1cmlzdGljIGJlbG93IGFwcGxpZXMuICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9OT19QUkVESUNUSU9OLCAibm8gcHJlZGljdGlvbiIsIFBST0JfQUxXQVlTLCAwKQorCisvKiBNYXJrIHVuY29uZGl0aW9uYWwganVtcCBhcyB0YWtlbi4gICovCitERUZfUFJFRElDVE9SIChQUkVEX1VOQ09ORElUSU9OQUwsICJ1bmNvbmRpdGlvbmFsIGp1bXAiLCBQUk9CX0FMV0FZUywKKwkgICAgICAgUFJFRF9GTEFHX0ZJUlNUX01BVENIKQorCisvKiBVc2UgbnVtYmVyIG9mIGxvb3AgaXRlcmF0aW9ucyBkZXRlcm1pbmVkIGJ5ICMgb2YgaXRlcmF0aW9ucworICAgYW5hbHlzaXMgdG8gc2V0IHByb2JhYmlsaXR5LiAgV2UgZG9uJ3Qgd2FudCB0byB1c2UgRGVtcHN0ZXItU2hhZmZlcgorICAgdGhlb3J5IGhlcmUsIGFzIHRoZSBwcmVkaWN0aW9ucyBpcyBleGFjdC4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0xPT1BfSVRFUkFUSU9OUywgImxvb3AgaXRlcmF0aW9ucyIsIFBST0JfQUxXQVlTLAorCSAgICAgICBQUkVEX0ZMQUdfRklSU1RfTUFUQ0gpCisKKy8qIEhpbnRzIGRyb3BwZWQgYnkgdXNlciB2aWEgX19idWlsdGluX2V4cGVjdCBmZWF0dXJlLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfQlVJTFRJTl9FWFBFQ1QsICJfX2J1aWx0aW5fZXhwZWN0IiwgUFJPQl9WRVJZX0xJS0VMWSwKKwkgICAgICAgUFJFRF9GTEFHX0ZJUlNUX01BVENIKQorCisvKiBVc2UgbnVtYmVyIG9mIGxvb3AgaXRlcmF0aW9ucyBndWVzc2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgbG9vcC4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0xPT1BfSVRFUkFUSU9OU19HVUVTU0VELCAiZ3Vlc3NlZCBsb29wIGl0ZXJhdGlvbnMiLAorCSAgICAgICBQUk9CX0FMV0FZUywgUFJFRF9GTEFHX0ZJUlNUX01BVENIKQorCisvKiBCcmFuY2ggY29udGFpbmluZyBnb3RvIGlzIHByb2JhYmx5IG5vdCB0YWtlbi4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0NPTlRJTlVFLCAiY29udGludWUiLCBISVRSQVRFICg1MCksIDApCisKKy8qIEJyYW5jaCB0byBiYXNpYyBibG9jayBjb250YWluaW5nIGNhbGwgbWFya2VkIGJ5IG5vcmV0dXJuIGF0dHJpYnV0ZS4gICovCitERUZfUFJFRElDVE9SIChQUkVEX05PUkVUVVJOLCAibm9yZXR1cm4gY2FsbCIsIFBST0JfVkVSWV9MSUtFTFksCisJICAgICAgIFBSRURfRkxBR19GSVJTVF9NQVRDSCkKKworLyogQnJhbmNoIHRvIGJhc2ljIGJsb2NrIGNvbnRhaW5pbmcgY2FsbCBtYXJrZWQgYnkgY29sZCBmdW5jdGlvbiBhdHRyaWJ1dGUuICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9DT0xEX0ZVTkNUSU9OLCAiY29sZCBmdW5jdGlvbiBjYWxsIiwgUFJPQl9WRVJZX0xJS0VMWSwKKwkgICAgICAgUFJFRF9GTEFHX0ZJUlNUX01BVENIKQorCisvKiBMb29wYmFjayBlZGdlIGlzIHRha2VuLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTE9PUF9CUkFOQ0gsICJsb29wIGJyYW5jaCIsIEhJVFJBVEUgKDg2KSwKKwkgICAgICAgUFJFRF9GTEFHX0ZJUlNUX01BVENIKQorCisvKiBFZGdlIGNhdXNpbmcgbG9vcCB0byB0ZXJtaW5hdGUgaXMgcHJvYmFibHkgbm90IHRha2VuLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTE9PUF9FWElULCAibG9vcCBleGl0IiwgSElUUkFURSAoOTEpLAorCSAgICAgICBQUkVEX0ZMQUdfRklSU1RfTUFUQ0gpCisKKy8qIFBvaW50ZXJzIGFyZSB1c3VhbGx5IG5vdCBOVUxMLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfUE9JTlRFUiwgInBvaW50ZXIiLCBISVRSQVRFICg4NSksIDApCitERUZfUFJFRElDVE9SIChQUkVEX1RSRUVfUE9JTlRFUiwgInBvaW50ZXIgKG9uIHRyZWVzKSIsIEhJVFJBVEUgKDg1KSwgMCkKKworLyogTkUgaXMgcHJvYmFibGUsIEVRIG5vdCBldGMuLi4gICovCitERUZfUFJFRElDVE9SIChQUkVEX09QQ09ERV9QT1NJVElWRSwgIm9wY29kZSB2YWx1ZXMgcG9zaXRpdmUiLCBISVRSQVRFICg3OSksIDApCitERUZfUFJFRElDVE9SIChQUkVEX09QQ09ERV9OT05FUVVBTCwgIm9wY29kZSB2YWx1ZXMgbm9uZXF1YWwiLCBISVRSQVRFICg3MSksIDApCitERUZfUFJFRElDVE9SIChQUkVEX0ZQT1BDT0RFLCAiZnBfb3Bjb2RlIiwgSElUUkFURSAoOTApLCAwKQorREVGX1BSRURJQ1RPUiAoUFJFRF9UUkVFX09QQ09ERV9QT1NJVElWRSwgIm9wY29kZSB2YWx1ZXMgcG9zaXRpdmUgKG9uIHRyZWVzKSIsIEhJVFJBVEUgKDczKSwgMCkKK0RFRl9QUkVESUNUT1IgKFBSRURfVFJFRV9PUENPREVfTk9ORVFVQUwsICJvcGNvZGUgdmFsdWVzIG5vbmVxdWFsIChvbiB0cmVlcykiLCBISVRSQVRFICg3MiksIDApCitERUZfUFJFRElDVE9SIChQUkVEX1RSRUVfRlBPUENPREUsICJmcF9vcGNvZGUgKG9uIHRyZWVzKSIsIEhJVFJBVEUgKDkwKSwgMCkKKworLyogQnJhbmNoIGd1YXJkaW5nIGNhbGwgaXMgcHJvYmFibHkgdGFrZW4uICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9DQUxMLCAiY2FsbCIsIEhJVFJBVEUgKDcxKSwgMCkKKworLyogQnJhbmNoIGNhdXNpbmcgZnVuY3Rpb24gdG8gdGVybWluYXRlIGlzIHByb2JhYmx5IG5vdCB0YWtlbi4gICovCitERUZfUFJFRElDVE9SIChQUkVEX1RSRUVfRUFSTFlfUkVUVVJOLCAiZWFybHkgcmV0dXJuIChvbiB0cmVlcykiLCBISVRSQVRFICg2MSksIDApCisKKy8qIEJyYW5jaCBjb250YWluaW5nIGdvdG8gaXMgcHJvYmFibHkgbm90IHRha2VuLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfR09UTywgImdvdG8iLCBISVRSQVRFICg3MCksIDApCisKKy8qIEJyYW5jaCBlbmRpbmcgd2l0aCByZXR1cm4gY29uc3RhbnQgaXMgcHJvYmFibHkgbm90IHRha2VuLiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfQ09OU1RfUkVUVVJOLCAiY29uc3QgcmV0dXJuIiwgSElUUkFURSAoNjcpLCAwKQorCisvKiBCcmFuY2ggZW5kaW5nIHdpdGggcmV0dXJuIG5lZ2F0aXZlIGNvbnN0YW50IGlzIHByb2JhYmx5IG5vdCB0YWtlbi4gICovCitERUZfUFJFRElDVE9SIChQUkVEX05FR0FUSVZFX1JFVFVSTiwgIm5lZ2F0aXZlIHJldHVybiIsIEhJVFJBVEUgKDk2KSwgMCkKKworLyogQnJhbmNoIGVuZGluZyB3aXRoIHJldHVybjsgaXMgcHJvYmFibHkgbm90IHRha2VuICovCitERUZfUFJFRElDVE9SIChQUkVEX05VTExfUkVUVVJOLCAibnVsbCByZXR1cm4iLCBISVRSQVRFICg5MCksIDApCisKKy8qIEJyYW5jaGVzIHRvIGEgbXVkZmxhcCBib3VuZHMgY2hlY2sgYXJlIGV4dHJlbWVseSB1bmxpa2VseS4gICovCitERUZfUFJFRElDVE9SIChQUkVEX01VREZMQVAsICJtdWRmbGFwIGNoZWNrIiwgUFJPQl9WRVJZX0xJS0VMWSwgMCkKKworLyogQnJhbmNoZXMgdG8gY29tcGFyZSBpbmR1Y3Rpb24gdmFyaWFibGUgdG8gYSBsb29wIGJvdW5kIGlzCisgICBleHRyZW1lbHkgbGlrZWx5LiAgKi8KK0RFRl9QUkVESUNUT1IgKFBSRURfTE9PUF9JVl9DT01QQVJFX0dVRVNTLCAiZ3Vlc3MgbG9vcCBpdiBjb21wYXJlIiwKKwkgICAgICAgUFJPQl9WRVJZX0xJS0VMWSwgMCkKKworLyogVXNlIG51bWJlciBvZiBsb29wIGl0ZXJhdGlvbnMgZGV0ZXJtaW5lZCBieSAjIG9mIGl0ZXJhdGlvbnMgYW5hbHlzaXMKKyAgIHRvIHNldCBwcm9iYWJpbGl0eSBvZiBicmFuY2hlcyB0aGF0IGNvbXBhcmVzIElWIHRvIGxvb3AgYm91bmQgdmFyaWFibGUuICAqLworREVGX1BSRURJQ1RPUiAoUFJFRF9MT09QX0lWX0NPTVBBUkUsICJsb29wIGl2IGNvbXBhcmUiLCBQUk9CX1ZFUllfTElLRUxZLAorCSAgICAgICBQUkVEX0ZMQUdfRklSU1RfTUFUQ0gpCisKKy8qIEJyYW5jaGVzIHRvIGhvdCBsYWJlbHMgYXJlIGxpa2VseS4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0hPVF9MQUJFTCwgImhvdCBsYWJlbCIsIEhJVFJBVEUgKDg1KSwgMCkKKworLyogQnJhbmNoZXMgdG8gY29sZCBsYWJlbHMgYXJlIGV4dHJlbWVseSB1bmxpa2VseS4gICovCitERUZfUFJFRElDVE9SIChQUkVEX0NPTERfTEFCRUwsICJjb2xkIGxhYmVsIiwgUFJPQl9WRVJZX0xJS0VMWSwKKwkgICAgICAgUFJFRF9GTEFHX0ZJUlNUX01BVENIKQpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3ByZWRpY3QuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9wcmVkaWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5ZjgwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9wcmVkaWN0LmgKQEAgLTAsMCArMSw0NyBAQAorLyogRGVmaW5pdGlvbnMgZm9yIGJyYW5jaCBwcmVkaWN0aW9uIHJvdXRpbmVzIGluIHRoZSBHTlUgY29tcGlsZXIuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1BSRURJQ1RfSAorI2RlZmluZSBHQ0NfUFJFRElDVF9ICisKKyNkZWZpbmUgREVGX1BSRURJQ1RPUihFTlVNLCBOQU1FLCBISVRSQVRFLCBGTEFHUykgRU5VTSwKK2VudW0gYnJfcHJlZGljdG9yCit7CisjaW5jbHVkZSAicHJlZGljdC5kZWYiCisKKyAgLyogVXBwZXIgYm91bmQgb24gbm9uLWxhbmd1YWdlLXNwZWNpZmljIGJ1aWx0aW5zLiAgKi8KKyAgRU5EX1BSRURJQ1RPUlMKK307CisjdW5kZWYgREVGX1BSRURJQ1RPUgorZW51bSBwcmVkaWN0aW9uCit7CisgICBOT1RfVEFLRU4sCisgICBUQUtFTgorfTsKKworZXh0ZXJuIHZvaWQgcHJlZGljdF9pbnNuX2RlZiAocnR4LCBlbnVtIGJyX3ByZWRpY3RvciwgZW51bSBwcmVkaWN0aW9uKTsKK2V4dGVybiBpbnQgY291bnRzX3RvX2ZyZXFzICh2b2lkKTsKK2V4dGVybiB2b2lkIGVzdGltYXRlX2JiX2ZyZXF1ZW5jaWVzICh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpwcmVkaWN0b3JfbmFtZSAoZW51bSBicl9wcmVkaWN0b3IpOworZXh0ZXJuIHRyZWUgYnVpbGRfcHJlZGljdF9leHByIChlbnVtIGJyX3ByZWRpY3RvciwgZW51bSBwcmVkaWN0aW9uKTsKK2V4dGVybiB2b2lkIHRyZWVfZXN0aW1hdGVfcHJvYmFiaWxpdHkgKHZvaWQpOworZXh0ZXJuIHZvaWQgY29tcHV0ZV9mdW5jdGlvbl9mcmVxdWVuY3kgKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVidWlsZF9mcmVxdWVuY2llcyAodm9pZCk7CisKKyNlbmRpZiAgLyogR0NDX1BSRURJQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3ByZWZpeC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3ByZWZpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNGMzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcHJlZml4LmgKQEAgLTAsMCArMSw0MCBAQAorLyogUHJvdmlkZSBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSBwcmVmaXguYy4KKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK3lvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaWZuZGVmIEdDQ19QUkVGSVhfSAorI2RlZmluZSBHQ0NfUFJFRklYX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgQWRhIGZyb250ZW5kIHdpdGggQyBjb252ZW50aW9uLiAgKi8KKworLyogVXBkYXRlIFBBVEggdXNpbmcgS0VZIGlmIFBBVEggc3RhcnRzIHdpdGggUFJFRklYLiAgVGhlIHJldHVybmVkCisgICBzdHJpbmcgaXMgYWx3YXlzIG1hbGxvYy1lZCwgYW5kIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgICBmcmVlaW5nIGl0LiAgKi8KK2V4dGVybiBjaGFyICp1cGRhdGVfcGF0aCAoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqa2V5KTsKK2V4dGVybiB2b2lkIHNldF9zdGRfcHJlZml4IChjb25zdCBjaGFyICosIGludCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEdDQ19QUkVGSVhfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3ByZXR0eS1wcmludC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3ByZXR0eS1wcmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZDJkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcHJldHR5LXByaW50LmgKQEAgLTAsMCArMSwzNjMgQEAKKy8qIFZhcmlvdXMgZGVjbGFyYXRpb25zIGZvciBsYW5ndWFnZS1pbmRlcGVuZGVudCBwcmV0dHktcHJpbnQgc3Vicm91dGluZXMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEdhYnJpZWwgRG9zIFJlaXMgPGdkckBpbnRlZ3JhYmxlLXNvbHV0aW9ucy5uZXQ+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19QUkVUVFlfUFJJTlRfSAorI2RlZmluZSBHQ0NfUFJFVFRZX1BSSU5UX0gKKworI2luY2x1ZGUgIm9ic3RhY2suaCIKKyNpbmNsdWRlICJpbnB1dC5oIgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBmb3JtYXQgc3RyaW5nIGFyZ3VtZW50cy4gICovCisjZGVmaW5lIFBQX05MX0FSR01BWCAgIDMwCisKKy8qIFRoZSB0eXBlIG9mIGEgdGV4dCB0byBiZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIGEgZm9ybWF0IHNwZWNpZmljYXRpb24KKyAgIGFsb25nIHdpdGggYSBsaXN0IG9mIHRoaW5ncy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICBjb25zdCBjaGFyICpmb3JtYXRfc3BlYzsKKyAgdmFfbGlzdCAqYXJnc19wdHI7CisgIGludCBlcnJfbm87ICAvKiBmb3IgJW0gKi8KKyAgbG9jYXRpb25fdCAqbG9jdXM7CisgIHZvaWQgKip4X2RhdGE7Cit9IHRleHRfaW5mbzsKKworLyogSG93IG9mdGVuIGRpYWdub3N0aWNzIGFyZSBwcmVmaXhlZCBieSB0aGVpciBsb2NhdGlvbnM6CisgICBvIERJQUdOT1NUSUNTX1NIT1dfUFJFRklYX05FVkVSOiBuZXZlciAtIG5vdCB5ZXQgc3VwcG9ydGVkOworICAgbyBESUFHTk9TVElDU19TSE9XX1BSRUZJWF9PTkNFOiBlbWl0IG9ubHkgb25jZTsKKyAgIG8gRElBR05PU1RJQ1NfU0hPV19QUkVGSVhfRVZFUllfTElORTogZW1pdCBlYWNoIHRpbWUgYSBwaHlzaWNhbAorICAgbGluZSBpcyBzdGFydGVkLiAgKi8KK3R5cGVkZWYgZW51bQoreworICBESUFHTk9TVElDU19TSE9XX1BSRUZJWF9PTkNFICAgICAgID0gMHgwLAorICBESUFHTk9TVElDU19TSE9XX1BSRUZJWF9ORVZFUiAgICAgID0gMHgxLAorICBESUFHTk9TVElDU19TSE9XX1BSRUZJWF9FVkVSWV9MSU5FID0gMHgyCit9IGRpYWdub3N0aWNfcHJlZml4aW5nX3J1bGVfdDsKKworLyogVGhlIGNodW5rX2luZm8gZGF0YSBzdHJ1Y3R1cmUgZm9ybXMgYSBzdGFjayBvZiB0aGUgcmVzdWx0cyBmcm9tIHRoZQorICAgZmlyc3QgcGhhc2Ugb2YgZm9ybWF0dGluZyAocHBfYmFzZV9mb3JtYXQpIHdoaWNoIGhhdmUgbm90IHlldCBiZWVuCisgICBvdXRwdXQgKHBwX2Jhc2Vfb3V0cHV0X2Zvcm1hdHRlZF90ZXh0KS4gIEEgc3RhY2sgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgIHRoZSBkaWFnbm9zdGljIHN0YXJ0ZXIgbWF5IGRlY2lkZSB0byBnZW5lcmF0ZSBpdHMgb3duIG91dHB1dCBieSB3YXkKKyAgIG9mIHRoZSBmb3JtYXR0ZXIuICAqLworc3RydWN0IGNodW5rX2luZm8KK3sKKyAgLyogUG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBvbiB0aGUgc3RhY2suICAqLworICBzdHJ1Y3QgY2h1bmtfaW5mbyAqcHJldjsKKworICAvKiBBcnJheSBvZiBjaHVua3MgdG8gb3V0cHV0LiAgRWFjaCBjaHVuayBpcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAgSW4gdGhlIGZpcnN0IHBoYXNlIG9mIGZvcm1hdHRpbmcsIGV2ZW4tbnVtYmVyZWQgY2h1bmtzIGFyZQorICAgICB0byBiZSBvdXRwdXQgdmVyYmF0aW0sIG9kZC1udW1iZXJlZCBjaHVua3MgYXJlIGZvcm1hdCBzcGVjaWZpZXJzLgorICAgICBUaGUgc2Vjb25kIHBoYXNlIHJlcGxhY2VzIGFsbCBvZGQtbnVtYmVyZWQgY2h1bmtzIHdpdGggZm9ybWF0dGVkCisgICAgIHRleHQsIGFuZCB0aGUgdGhpcmQgcGhhc2Ugc2ltcGx5IGVtaXRzIGFsbCB0aGUgY2h1bmtzIGluIHNlcXVlbmNlCisgICAgIHdpdGggYXBwcm9wcmlhdGUgbGluZS13cmFwcGluZy4gICovCisgIGNvbnN0IGNoYXIgKmFyZ3NbUFBfTkxfQVJHTUFYICogMl07Cit9OworCisvKiBUaGUgb3V0cHV0IGJ1ZmZlciBkYXRhdHlwZS4gIFRoaXMgaXMgYmVzdCBzZWVuIGFzIGFuIGFic3RyYWN0IGRhdGF0eXBlCisgICB3aG9zZSBmaWVsZHMgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBkaXJlY3RseSBieSBjbGllbnRzLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIE9ic3RhY2sgd2hlcmUgdGhlIHRleHQgaXMgYnVpbHQgdXAuICAqLworICBzdHJ1Y3Qgb2JzdGFjayBmb3JtYXR0ZWRfb2JzdGFjazsKKworICAvKiBPYnN0YWNrIGNvbnRhaW5pbmcgYSBjaHVua2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmb3JtYXQKKyAgICAgc3BlY2lmaWNhdGlvbiBwbHVzIGFyZ3VtZW50cy4gICovCisgIHN0cnVjdCBvYnN0YWNrIGNodW5rX29ic3RhY2s7CisKKyAgLyogQ3VycmVudGx5IGFjdGl2ZSBvYnN0YWNrOiBvbmUgb2YgdGhlIGFib3ZlIHR3by4gIFRoaXMgaXMgdXNlZCBzbworICAgICB0aGF0IHRoZSB0ZXh0IGZvcm1hdHRlcnMgZG9uJ3QgbmVlZCB0byBrbm93IHdoaWNoIHBoYXNlIHdlJ3JlIGluLiAgKi8KKyAgc3RydWN0IG9ic3RhY2sgKm9ic3RhY2s7CisKKyAgLyogU3RhY2sgb2YgY2h1bmsgYXJyYXlzLiAgVGhlc2UgY29tZSBmcm9tIHRoZSBjaHVua19vYnN0YWNrLiAgKi8KKyAgc3RydWN0IGNodW5rX2luZm8gKmN1cl9jaHVua19hcnJheTsKKworICAvKiBXaGVyZSB0byBvdXRwdXQgZm9ybWF0dGVkIHRleHQuICAqLworICBGSUxFICpzdHJlYW07CisKKyAgLyogVGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzIG91dHB1dCBzbyBmYXIuICAqLworICBpbnQgbGluZV9sZW5ndGg7CisKKyAgLyogVGhpcyBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFueSBwcmludGVkIGludGVnZXIgb3IKKyAgICAgZmxvYXRpbmctcG9pbnQgdmFsdWUuICAqLworICBjaGFyIGRpZ2l0X2J1ZmZlclsxMjhdOworfSBvdXRwdXRfYnVmZmVyOworCisvKiBUaGUgdHlwZSBvZiBwcmV0dHktcHJpbnRlciBmbGFncyBwYXNzZWQgdG8gY2xpZW50cy4gICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBwcF9mbGFnczsKKwordHlwZWRlZiBlbnVtCit7CisgIHBwX25vbmUsIHBwX2JlZm9yZSwgcHBfYWZ0ZXIKK30gcHBfcGFkZGluZzsKKworLyogU3RydWN0dXJlIGZvciBzd2l0Y2hpbmcgaW4gYW5kIG91dCBvZiB2ZXJiYXRpbSBtb2RlIGluIGEgY29udmVuaWVudAorICAgbWFubmVyLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIEN1cnJlbnQgcHJlZml4aW5nIHJ1bGUuICAqLworICBkaWFnbm9zdGljX3ByZWZpeGluZ19ydWxlX3QgcnVsZTsKKworICAvKiBUaGUgaWRlYWwgdXBwZXIgYm91bmQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGxpbmUsIGFzIHN1Z2dlc3RlZAorICAgICBieSBmcm9udC1lbmQuICAqLworICBpbnQgbGluZV9jdXRvZmY7Cit9IHBwX3dyYXBwaW5nX21vZGVfdDsKKworLyogTWF4aW11bSBjaGFyYWN0ZXJzIHBlciBsaW5lIGluIGF1dG9tYXRpYyBsaW5lIHdyYXBwaW5nIG1vZGUuCisgICBaZXJvIG1lYW5zIGRvbid0IHdyYXAgbGluZXMuICAqLworI2RlZmluZSBwcF9saW5lX2N1dG9mZihQUCkgIHBwX2Jhc2UgKFBQKS0+d3JhcHBpbmcubGluZV9jdXRvZmYKKworLyogUHJlZml4aW5nIHJ1bGUgdXNlZCBpbiBmb3JtYXR0aW5nIGEgZGlhZ25vc3RpYyBtZXNzYWdlLiAgKi8KKyNkZWZpbmUgcHBfcHJlZml4aW5nX3J1bGUoUFApICBwcF9iYXNlIChQUCktPndyYXBwaW5nLnJ1bGUKKworLyogR2V0IG9yIHNldCB0aGUgd3JhcHBpbmcgbW9kZSBhcyBhIHNpbmdsZSBlbnRpdHkuICAqLworI2RlZmluZSBwcF93cmFwcGluZ19tb2RlKFBQKSBwcF9iYXNlIChQUCktPndyYXBwaW5nCisKKy8qIFRoZSB0eXBlIG9mIGEgaG9vayB0aGF0IGZvcm1hdHMgY2xpZW50LXNwZWNpZmljIGRhdGEgb250byBhIHByZXR0eV9waW50ZXIuCisgICBBIGNsaWVudC1zdXBwbGllZCBmb3JtYXR0ZXIgcmV0dXJucyB0cnVlIGlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLAorICAgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuICAqLwordHlwZWRlZiBib29sICgqcHJpbnRlcl9mbikgKHByZXR0eV9wcmludGVyICosIHRleHRfaW5mbyAqLCBjb25zdCBjaGFyICosCisJCQkgICAgaW50LCBib29sLCBib29sLCBib29sKTsKKworLyogQ2xpZW50IHN1cHBsaWVkIGZ1bmN0aW9uIHVzZWQgdG8gZGVjb2RlIGZvcm1hdHMuICAqLworI2RlZmluZSBwcF9mb3JtYXRfZGVjb2RlcihQUCkgcHBfYmFzZSAoUFApLT5mb3JtYXRfZGVjb2RlcgorCisvKiBUUlVFIGlmIGEgbmV3bGluZSBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgYWRkZWQgYmVmb3JlIGZ1cnRoZXIKKyAgIGZvcm1hdHRpbmcuICAqLworI2RlZmluZSBwcF9uZWVkc19uZXdsaW5lKFBQKSAgcHBfYmFzZSAoUFApLT5uZWVkX25ld2xpbmUKKworLyogVHJ1ZSBpZiBQUkVUVFktUFJJTlRFUiBpcyBpbiBsaW5lLXdyYXBwaW5nIG1vZGUuICAqLworI2RlZmluZSBwcF9pc193cmFwcGluZ19saW5lKFBQKSAocHBfbGluZV9jdXRvZmYgKFBQKSA+IDApCisKKy8qIFRoZSBhbW91bnQgb2Ygd2hpdGVzcGFjZSB0byBiZSBlbWl0dGVkIHdoZW4gc3RhcnRpbmcgYSBuZXcgbGluZS4gICovCisjZGVmaW5lIHBwX2luZGVudGF0aW9uKFBQKSBwcF9iYXNlIChQUCktPmluZGVudF9za2lwCisKKy8qIFRydWUgaWYgaWRlbnRpZmllcnMgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIGxvY2FsZSBjaGFyYWN0ZXIgc2V0IG9uCisgICBvdXRwdXQuICAqLworI2RlZmluZSBwcF90cmFuc2xhdGVfaWRlbnRpZmllcnMoUFApIHBwX2Jhc2UgKFBQKS0+dHJhbnNsYXRlX2lkZW50aWZpZXJzCisKKy8qIFRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBiYXJlIG1pbmltdW0gcmVxdWlyZWQgdG8gZG8KKyAgIHByb3BlciBwcmV0dHktcHJpbnRpbmcuICBDbGllbnRzIG1heSBkZXJpdmVkIGZyb20gdGhpcyBzdHJ1Y3R1cmUKKyAgIGFuZCBhZGQgYWRkaXRpb25hbCBmaWVsZHMgdGhleSBuZWVkLiAgKi8KK3N0cnVjdCBwcmV0dHlfcHJpbnRfaW5mbworeworICAvKiBXaGVyZSB3ZSBwcmludCBleHRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBFTlRJVFkuICAqLworICBvdXRwdXRfYnVmZmVyICpidWZmZXI7CisKKyAgLyogVGhlIHByZWZpeCBmb3IgZWFjaCBuZXcgbGluZS4gICovCisgIGNvbnN0IGNoYXIgKnByZWZpeDsKKworICAvKiBXaGVyZSB0byBwdXQgd2hpdGVzcGFjZSBhcm91bmQgdGhlIGVudGl0eSBiZWluZyBmb3JtYXR0ZWQuICAqLworICBwcF9wYWRkaW5nIHBhZGRpbmc7CisKKyAgLyogVGhlIHJlYWwgdXBwZXIgYm91bmQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGxpbmUsIHRha2luZyBpbnRvCisgICAgIGFjY291bnQgdGhlIGNhc2Ugb2YgYSB2ZXJ5IHZlcnkgbG9vb25nIHByZWZpeC4gICovCisgIGludCBtYXhpbXVtX2xlbmd0aDsKKworICAvKiBJbmRlbnRhdGlvbiBjb3VudC4gICovCisgIGludCBpbmRlbnRfc2tpcDsKKworICAvKiBDdXJyZW50IHdyYXBwaW5nIG1vZGUuICAqLworICBwcF93cmFwcGluZ19tb2RlX3Qgd3JhcHBpbmc7CisKKyAgLyogSWYgbm9uLU5VTEwsIHRoaXMgZnVuY3Rpb24gZm9ybWF0cyBhIFRFWFQgaW50byB0aGUgQlVGRkVSLiAgV2hlbiBjYWxsZWQsCisgICAgIFRFWFQtPmZvcm1hdF9zcGVjIHBvaW50cyB0byBhIGZvcm1hdCBjb2RlLiAgRk9STUFUX0RFQ09ERVIgc2hvdWxkIGNhbGwKKyAgICAgcHBfc3RyaW5nIChhbmQgcmVsYXRlZCBmdW5jdGlvbnMpIHRvIGFkZCBkYXRhIHRvIHRoZSBCVUZGRVIuCisgICAgIEZPUk1BVF9ERUNPREVSIGNhbiByZWFkIGFyZ3VtZW50cyBmcm9tICpURVhULT5hcmdzX3B0cyB1c2luZyBWQV9BUkcuCisgICAgIElmIHRoZSBCVUZGRVIgbmVlZHMgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZvcm1hdCBzdHJpbmcsIGl0CisgICAgIHNob3VsZCBhZHZhbmNlIHRoZSBURVhULT5mb3JtYXRfc3BlYyBhcyBpdCBnb2VzLiAgV2hlbiBGT1JNQVRfREVDT0RFUgorICAgICByZXR1cm5zLCBURVhULT5mb3JtYXRfc3BlYyBzaG91bGQgcG9pbnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIHByb2Nlc3NlZC4KKyAgKi8KKyAgcHJpbnRlcl9mbiBmb3JtYXRfZGVjb2RlcjsKKworICAvKiBOb256ZXJvIGlmIGN1cnJlbnQgUFJFRklYIHdhcyBlbWl0dGVkIGF0IGxlYXN0IG9uY2UuICAqLworICBib29sIGVtaXR0ZWRfcHJlZml4OworCisgIC8qIE5vbnplcm8gbWVhbnMgb25lIHNob3VsZCBlbWl0IGEgbmV3bGluZSBiZWZvcmUgb3V0cHV0dGluZyBhbnl0aGluZy4gICovCisgIGJvb2wgbmVlZF9uZXdsaW5lOworCisgIC8qIE5vbnplcm8gbWVhbnMgaWRlbnRpZmllcnMgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIGxvY2FsZSBjaGFyYWN0ZXIKKyAgICAgc2V0IG9uIG91dHB1dC4gICovCisgIGJvb2wgdHJhbnNsYXRlX2lkZW50aWZpZXJzOworfTsKKworI2RlZmluZSBwcF9zZXRfbGluZV9tYXhpbXVtX2xlbmd0aChQUCwgTCkgXAorICAgcHBfYmFzZV9zZXRfbGluZV9tYXhpbXVtX2xlbmd0aCAocHBfYmFzZSAoUFApLCBMKQorI2RlZmluZSBwcF9zZXRfcHJlZml4KFBQLCBQKSAgICBwcF9iYXNlX3NldF9wcmVmaXggKHBwX2Jhc2UgKFBQKSwgUCkKKyNkZWZpbmUgcHBfZ2V0X3ByZWZpeChQUCkgICAgICAgcHBfYmFzZV9nZXRfcHJlZml4IChwcF9iYXNlIChQUCkpCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorcHBfYmFzZV9nZXRfcHJlZml4IChjb25zdCBwcmV0dHlfcHJpbnRlciAqcHApIHsgcmV0dXJuIHBwLT5wcmVmaXg7IH0KKyNkZWZpbmUgcHBfZGVzdHJveV9wcmVmaXgoUFApICAgcHBfYmFzZV9kZXN0cm95X3ByZWZpeCAocHBfYmFzZSAoUFApKQorI2RlZmluZSBwcF9yZW1haW5pbmdfY2hhcmFjdGVyX2NvdW50X2Zvcl9saW5lKFBQKSBcCisgIHBwX2Jhc2VfcmVtYWluaW5nX2NoYXJhY3Rlcl9jb3VudF9mb3JfbGluZSAocHBfYmFzZSAoUFApKQorI2RlZmluZSBwcF9jbGVhcl9vdXRwdXRfYXJlYShQUCkgXAorICBwcF9iYXNlX2NsZWFyX291dHB1dF9hcmVhIChwcF9iYXNlIChQUCkpCisjZGVmaW5lIHBwX2Zvcm1hdHRlZF90ZXh0KFBQKSAgIHBwX2Jhc2VfZm9ybWF0dGVkX3RleHQgKHBwX2Jhc2UgKFBQKSkKKyNkZWZpbmUgcHBfbGFzdF9wb3NpdGlvbl9pbl90ZXh0KFBQKSBcCisgIHBwX2Jhc2VfbGFzdF9wb3NpdGlvbl9pbl90ZXh0IChwcF9iYXNlIChQUCkpCisjZGVmaW5lIHBwX2VtaXRfcHJlZml4KFBQKSAgICAgIHBwX2Jhc2VfZW1pdF9wcmVmaXggKHBwX2Jhc2UgKFBQKSkKKyNkZWZpbmUgcHBfYXBwZW5kX3RleHQoUFAsIEIsIEUpIFwKKyAgcHBfYmFzZV9hcHBlbmRfdGV4dCAocHBfYmFzZSAoUFApLCBCLCBFKQorI2RlZmluZSBwcF9mbHVzaChQUCkgICAgICAgICAgICBwcF9iYXNlX2ZsdXNoIChwcF9iYXNlIChQUCkpCisjZGVmaW5lIHBwX2Zvcm1hdChQUCwgVEkpICAgICAgIHBwX2Jhc2VfZm9ybWF0IChwcF9iYXNlIChQUCksIFRJKQorI2RlZmluZSBwcF9vdXRwdXRfZm9ybWF0dGVkX3RleHQoUFApIFwKKyAgcHBfYmFzZV9vdXRwdXRfZm9ybWF0dGVkX3RleHQgKHBwX2Jhc2UgKFBQKSkKKyNkZWZpbmUgcHBfZm9ybWF0X3ZlcmJhdGltKFBQLCBUSSkgXAorICBwcF9iYXNlX2Zvcm1hdF92ZXJiYXRpbSAocHBfYmFzZSAoUFApLCBUSSkKKworI2RlZmluZSBwcF9jaGFyYWN0ZXIoUFAsIEMpICAgICBwcF9iYXNlX2NoYXJhY3RlciAocHBfYmFzZSAoUFApLCBDKQorI2RlZmluZSBwcF9zdHJpbmcoUFAsIFMpICAgICAgICBwcF9iYXNlX3N0cmluZyAocHBfYmFzZSAoUFApLCBTKQorI2RlZmluZSBwcF9uZXdsaW5lKFBQKSAgICAgICAgICBwcF9iYXNlX25ld2xpbmUgKHBwX2Jhc2UgKFBQKSkKKworI2RlZmluZSBwcF9zcGFjZShQUCkgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnICcpCisjZGVmaW5lIHBwX2xlZnRfcGFyZW4oUFApICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICcoJykKKyNkZWZpbmUgcHBfcmlnaHRfcGFyZW4oUFApICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJyknKQorI2RlZmluZSBwcF9sZWZ0X2JyYWNrZXQoUFApICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnWycpCisjZGVmaW5lIHBwX3JpZ2h0X2JyYWNrZXQoUFApICAgIHBwX2NoYXJhY3RlciAoUFAsICddJykKKyNkZWZpbmUgcHBfbGVmdF9icmFjZShQUCkgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJ3snKQorI2RlZmluZSBwcF9yaWdodF9icmFjZShQUCkgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnfScpCisjZGVmaW5lIHBwX3NlbWljb2xvbihQUCkgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICc7JykKKyNkZWZpbmUgcHBfY29tbWEoUFApICAgICAgICAgICAgcHBfc3RyaW5nIChQUCwgIiwgIikKKyNkZWZpbmUgcHBfZG90KFBQKSAgICAgICAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJy4nKQorI2RlZmluZSBwcF9jb2xvbihQUCkgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnOicpCisjZGVmaW5lIHBwX2NvbG9uX2NvbG9uKFBQKSAgICAgIHBwX3N0cmluZyAoUFAsICI6OiIpCisjZGVmaW5lIHBwX2Fycm93KFBQKSAgICAgICAgICAgIHBwX3N0cmluZyAoUFAsICItPiIpCisjZGVmaW5lIHBwX2VxdWFsKFBQKSAgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICc9JykKKyNkZWZpbmUgcHBfcXVlc3Rpb24oUFApICAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJz8nKQorI2RlZmluZSBwcF9iYXIoUFApICAgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnfCcpCisjZGVmaW5lIHBwX2NhcnJldChQUCkgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICdeJykKKyNkZWZpbmUgcHBfYW1wZXJzYW5kKFBQKSAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJyYnKQorI2RlZmluZSBwcF9sZXNzKFBQKSAgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnPCcpCisjZGVmaW5lIHBwX2dyZWF0ZXIoUFApICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICc+JykKKyNkZWZpbmUgcHBfcGx1cyhQUCkgICAgICAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJysnKQorI2RlZmluZSBwcF9taW51cyhQUCkgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnLScpCisjZGVmaW5lIHBwX3N0YXIoUFApICAgICAgICAgICAgIHBwX2NoYXJhY3RlciAoUFAsICcqJykKKyNkZWZpbmUgcHBfc2xhc2goUFApICAgICAgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJy8nKQorI2RlZmluZSBwcF9tb2R1bG8oUFApICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnJScpCisjZGVmaW5lIHBwX2V4Y2xhbWF0aW9uKFBQKSAgICAgIHBwX2NoYXJhY3RlciAoUFAsICchJykKKyNkZWZpbmUgcHBfY29tcGxlbWVudChQUCkgICAgICAgcHBfY2hhcmFjdGVyIChQUCwgJ34nKQorI2RlZmluZSBwcF9xdW90ZShQUCkgICAgICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnXCcnKQorI2RlZmluZSBwcF9iYWNrcXVvdGUoUFApICAgICAgICBwcF9jaGFyYWN0ZXIgKFBQLCAnYCcpCisjZGVmaW5lIHBwX2RvdWJsZXF1b3RlKFBQKSAgICAgIHBwX2NoYXJhY3RlciAoUFAsICciJykKKyNkZWZpbmUgcHBfbmV3bGluZV9hbmRfZmx1c2goUFApICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHBwX25ld2xpbmUgKFBQKTsgICAgICAgICAgICAgICAgIFwKKyAgICBwcF9mbHVzaCAoUFApOyAgICAgICAgICAgICAgICAgICBcCisgICAgcHBfbmVlZHNfbmV3bGluZSAoUFApID0gZmFsc2U7ICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBwcF9uZXdsaW5lX2FuZF9pbmRlbnQoUFAsIE4pIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHBfaW5kZW50YXRpb24gKFBQKSArPSBOOyAgICAgICAgXAorICAgIHBwX25ld2xpbmUgKFBQKTsgICAgICAgICAgICAgICAgIFwKKyAgICBwcF9iYXNlX2luZGVudCAocHBfYmFzZSAoUFApKTsgICBcCisgICAgcHBfbmVlZHNfbmV3bGluZSAoUFApID0gZmFsc2U7ICAgXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBwcF9tYXliZV9uZXdsaW5lX2FuZF9pbmRlbnQoUFAsIE4pIFwKKyAgaWYgKHBwX25lZWRzX25ld2xpbmUgKFBQKSkgcHBfbmV3bGluZV9hbmRfaW5kZW50IChQUCwgTikKKyNkZWZpbmUgcHBfbWF5YmVfc3BhY2UoUFApICAgcHBfYmFzZV9tYXliZV9zcGFjZSAocHBfYmFzZSAoUFApKQorI2RlZmluZSBwcF9zZXBhcmF0ZV93aXRoKFBQLCBDKSAgICAgXAorICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICBwcF9jaGFyYWN0ZXIgKFBQLCBDKTsgICAgICAgICAgXAorICAgICBwcF9zcGFjZSAoUFApOyAgICAgICAgICAgICAgICAgXAorICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHBfc2NhbGFyKFBQLCBGT1JNQVQsIFNDQUxBUikJICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8JCQkJCSAgICAgICAgCSAgICAgIFwKKyAgICB7CQkJICAgICAgICAgCQkJICAgICAgXAorICAgICAgc3ByaW50ZiAocHBfYnVmZmVyIChQUCktPmRpZ2l0X2J1ZmZlciwgRk9STUFULCBTQ0FMQVIpOyBcCisgICAgICBwcF9zdHJpbmcgKFBQLCBwcF9idWZmZXIgKFBQKS0+ZGlnaXRfYnVmZmVyKTsgICAgICAgICAgIFwKKyAgICB9CQkJCQkJICAgICAgICAgICAgICBcCisgIHdoaWxlICgwKQorI2RlZmluZSBwcF9kZWNpbWFsX2ludChQUCwgSSkgIHBwX3NjYWxhciAoUFAsICIlZCIsIEkpCisjZGVmaW5lIHBwX3Vuc2lnbmVkX3dpZGVfaW50ZWdlcihQUCwgSSkgXAorICAgcHBfc2NhbGFyIChQUCwgSE9TVF9XSURFX0lOVF9QUklOVF9VTlNJR05FRCwgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIEkpCisjZGVmaW5lIHBwX3dpZGVfaW50ZWdlcihQUCwgSSkgXAorICAgcHBfc2NhbGFyIChQUCwgSE9TVF9XSURFX0lOVF9QUklOVF9ERUMsIChIT1NUX1dJREVfSU5UKSBJKQorI2RlZmluZSBwcF93aWRlc3RfaW50ZWdlcihQUCwgSSkgXAorICAgcHBfc2NhbGFyIChQUCwgSE9TVF9XSURFU1RfSU5UX1BSSU5UX0RFQywgKEhPU1RfV0lERVNUX0lOVCkgSSkKKyNkZWZpbmUgcHBfcG9pbnRlcihQUCwgUCkgICAgICBwcF9zY2FsYXIgKFBQLCAiJXAiLCBQKQorCisjZGVmaW5lIHBwX2lkZW50aWZpZXIoUFAsIElEKSAgcHBfc3RyaW5nIChQUCwgKHBwX3RyYW5zbGF0ZV9pZGVudGlmaWVycyAoUFApIFwKKwkJCQkJICA/IGlkZW50aWZpZXJfdG9fbG9jYWxlIChJRCkJXAorCQkJCQkgIDogKElEKSkpCisKKworI2RlZmluZSBwcF9idWZmZXIoUFApIHBwX2Jhc2UgKFBQKS0+YnVmZmVyCisvKiBDbGllbnRzIHRoYXQgZGlyZWN0bHkgZGVyaXZlIGZyb20gcHJldHR5X3ByaW50ZXIgbmVlZCB0byBvdmVycmlkZQorICAgdGhpcyBtYWNybyB0byByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiYXNlIHByZXR0eV9wcmludGVyIHN0cnVjdHVyZS4gICovCisjZGVmaW5lIHBwX2Jhc2UoUFApIChQUCkKKworZXh0ZXJuIHZvaWQgcHBfY29uc3RydWN0IChwcmV0dHlfcHJpbnRlciAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gdm9pZCBwcF9iYXNlX3NldF9saW5lX21heGltdW1fbGVuZ3RoIChwcmV0dHlfcHJpbnRlciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgcHBfYmFzZV9zZXRfcHJlZml4IChwcmV0dHlfcHJpbnRlciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgcHBfYmFzZV9kZXN0cm95X3ByZWZpeCAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gaW50IHBwX2Jhc2VfcmVtYWluaW5nX2NoYXJhY3Rlcl9jb3VudF9mb3JfbGluZSAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gdm9pZCBwcF9iYXNlX2NsZWFyX291dHB1dF9hcmVhIChwcmV0dHlfcHJpbnRlciAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpwcF9iYXNlX2Zvcm1hdHRlZF90ZXh0IChwcmV0dHlfcHJpbnRlciAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpwcF9iYXNlX2xhc3RfcG9zaXRpb25faW5fdGV4dCAoY29uc3QgcHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gdm9pZCBwcF9iYXNlX2VtaXRfcHJlZml4IChwcmV0dHlfcHJpbnRlciAqKTsKK2V4dGVybiB2b2lkIHBwX2Jhc2VfYXBwZW5kX3RleHQgKHByZXR0eV9wcmludGVyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyogSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRlZmluZWQgYSBmcm9udC1lbmQtc3BlY2lmaWMgZGlhZ25vc3RpY3MKKyAgIHN0eWxlLCB1c2UgdGhlIGdlbmVyaWMgb25lLiAgKi8KKyNpZmRlZiBHQ0NfRElBR19TVFlMRQorI2RlZmluZSBHQ0NfUFBESUFHX1NUWUxFIEdDQ19ESUFHX1NUWUxFCisjZWxzZQorI2RlZmluZSBHQ0NfUFBESUFHX1NUWUxFIF9fZ2NjX2RpYWdfXworI2VuZGlmCisKKy8qIFRoaXMgaGVhZGVyIG1heSBiZSBpbmNsdWRlZCBiZWZvcmUgZGlhZ25vc3RpY3MtY29yZS5oLCBoZW5jZSB0aGUgZHVwbGljYXRlCisgICBkZWZpbml0aW9ucyB0byBhbGxvdyBmb3IgR0NDLXNwZWNpZmljIGZvcm1hdHMuICAqLworI2lmIEdDQ19WRVJTSU9OID49IDMwMDUKKyNkZWZpbmUgQVRUUklCVVRFX0dDQ19QUERJQUcobSwgbikgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKEdDQ19QUERJQUdfU1RZTEUsIG0gLG4pKSkgQVRUUklCVVRFX05PTk5VTEwobSkKKyNlbHNlCisjZGVmaW5lIEFUVFJJQlVURV9HQ0NfUFBESUFHKG0sIG4pIEFUVFJJQlVURV9OT05OVUxMKG0pCisjZW5kaWYKK2V4dGVybiB2b2lkIHBwX3ByaW50ZiAocHJldHR5X3ByaW50ZXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgIEFUVFJJQlVURV9HQ0NfUFBESUFHKDIsMyk7CisKK2V4dGVybiB2b2lkIHBwX3ZlcmJhdGltIChwcmV0dHlfcHJpbnRlciAqLCBjb25zdCBjaGFyICosIC4uLikKKyAgICAgQVRUUklCVVRFX0dDQ19QUERJQUcoMiwzKTsKK2V4dGVybiB2b2lkIHBwX2Jhc2VfZmx1c2ggKHByZXR0eV9wcmludGVyICopOworZXh0ZXJuIHZvaWQgcHBfYmFzZV9mb3JtYXQgKHByZXR0eV9wcmludGVyICosIHRleHRfaW5mbyAqKTsKK2V4dGVybiB2b2lkIHBwX2Jhc2Vfb3V0cHV0X2Zvcm1hdHRlZF90ZXh0IChwcmV0dHlfcHJpbnRlciAqKTsKK2V4dGVybiB2b2lkIHBwX2Jhc2VfZm9ybWF0X3ZlcmJhdGltIChwcmV0dHlfcHJpbnRlciAqLCB0ZXh0X2luZm8gKik7CisKK2V4dGVybiB2b2lkIHBwX2Jhc2VfaW5kZW50IChwcmV0dHlfcHJpbnRlciAqKTsKK2V4dGVybiB2b2lkIHBwX2Jhc2VfbmV3bGluZSAocHJldHR5X3ByaW50ZXIgKik7CitleHRlcm4gdm9pZCBwcF9iYXNlX2NoYXJhY3RlciAocHJldHR5X3ByaW50ZXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIHBwX2Jhc2Vfc3RyaW5nIChwcmV0dHlfcHJpbnRlciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgcHBfd3JpdGVfdGV4dF90b19zdHJlYW0gKHByZXR0eV9wcmludGVyICopOworZXh0ZXJuIHZvaWQgcHBfd3JpdGVfdGV4dF9hc19kb3RfbGFiZWxfdG9fc3RyZWFtIChwcmV0dHlfcHJpbnRlciAqLCBib29sKTsKK2V4dGVybiB2b2lkIHBwX2Jhc2VfbWF5YmVfc3BhY2UgKHByZXR0eV9wcmludGVyICopOworCisvKiBTd2l0Y2ggaW50byB2ZXJiYXRpbSBtb2RlIGFuZCByZXR1cm4gdGhlIG9sZCBtb2RlLiAgKi8KK3N0YXRpYyBpbmxpbmUgcHBfd3JhcHBpbmdfbW9kZV90CitwcF9zZXRfdmVyYmF0aW1fd3JhcHBpbmdfIChwcmV0dHlfcHJpbnRlciAqcHApCit7CisgIHBwX3dyYXBwaW5nX21vZGVfdCBvbGRtb2RlID0gcHBfd3JhcHBpbmdfbW9kZSAocHApOworICBwcF9saW5lX2N1dG9mZiAocHApID0gMDsKKyAgcHBfcHJlZml4aW5nX3J1bGUgKHBwKSA9IERJQUdOT1NUSUNTX1NIT1dfUFJFRklYX05FVkVSOworICByZXR1cm4gb2xkbW9kZTsKK30KKyNkZWZpbmUgcHBfc2V0X3ZlcmJhdGltX3dyYXBwaW5nKFBQKSBwcF9zZXRfdmVyYmF0aW1fd3JhcHBpbmdfIChwcF9iYXNlIChQUCkpCisKK2V4dGVybiBjb25zdCBjaGFyICppZGVudGlmaWVyX3RvX2xvY2FsZSAoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkICooKmlkZW50aWZpZXJfdG9fbG9jYWxlX2FsbG9jKSAoc2l6ZV90KTsKK2V4dGVybiB2b2lkICgqaWRlbnRpZmllcl90b19sb2NhbGVfZnJlZSkgKHZvaWQgKik7CisKKyNlbmRpZiAvKiBHQ0NfUFJFVFRZX1BSSU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9yZWFsLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcmVhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZjg0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcmVhbC5oCkBAIC0wLDAgKzEsNDkyIEBACisvKiBEZWZpbml0aW9ucyBvZiBmbG9hdGluZy1wb2ludCBhY2Nlc3MgZm9yIEdOVSBjb21waWxlci4KKyAgIENvcHlyaWdodCAoQykgMTk4OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyAgIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKKyAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfUkVBTF9ICisjZGVmaW5lIEdDQ19SRUFMX0gKKworI2luY2x1ZGUgIm1hY2htb2RlLmgiCisKKy8qIEFuIGV4cGFuZGVkIGZvcm0gb2YgdGhlIHJlcHJlc2VudGVkIG51bWJlci4gICovCisKKy8qIEVudW1lcmF0ZSB0aGUgc3BlY2lhbCBjYXNlcyBvZiBudW1iZXJzIHRoYXQgd2UgZW5jb3VudGVyLiAgKi8KK2VudW0gcmVhbF92YWx1ZV9jbGFzcyB7CisgIHJ2Y196ZXJvLAorICBydmNfbm9ybWFsLAorICBydmNfaW5mLAorICBydmNfbmFuCit9OworCisjZGVmaW5lIFNJR05JRklDQU5EX0JJVFMJKDEyOCArIEhPU1RfQklUU19QRVJfTE9ORykKKyNkZWZpbmUgRVhQX0JJVFMJCSgzMiAtIDYpCisjZGVmaW5lIE1BWF9FWFAJCQkoKDEgPDwgKEVYUF9CSVRTIC0gMSkpIC0gMSkKKyNkZWZpbmUgU0lHU1oJCQkoU0lHTklGSUNBTkRfQklUUyAvIEhPU1RfQklUU19QRVJfTE9ORykKKyNkZWZpbmUgU0lHX01TQgkJCSgodW5zaWduZWQgbG9uZykxIDw8IChIT1NUX0JJVFNfUEVSX0xPTkcgLSAxKSkKKworc3RydWN0IEdUWSgoKSkgcmVhbF92YWx1ZSB7CisgIC8qIFVzZSB0aGUgc2FtZSB1bmRlcmx5aW5nIHR5cGUgZm9yIGFsbCBiaXQtZmllbGRzLCBzbyBhcyB0byBtYWtlCisgICAgIHN1cmUgdGhleSdyZSBwYWNrZWQgdG9nZXRoZXIsIG90aGVyd2lzZSBSRUFMX1ZBTFVFX1RZUEVfU0laRSB3aWxsCisgICAgIGJlIG1pc2NvbXB1dGVkLiAgKi8KKyAgdW5zaWduZWQgaW50IC8qIEVOVU1fQklURklFTEQgKHJlYWxfdmFsdWVfY2xhc3MpICovIGNsIDogMjsKKyAgdW5zaWduZWQgaW50IGRlY2ltYWwgOiAxOworICB1bnNpZ25lZCBpbnQgc2lnbiA6IDE7CisgIHVuc2lnbmVkIGludCBzaWduYWxsaW5nIDogMTsKKyAgdW5zaWduZWQgaW50IGNhbm9uaWNhbCA6IDE7CisgIHVuc2lnbmVkIGludCB1ZXhwIDogRVhQX0JJVFM7CisgIHVuc2lnbmVkIGxvbmcgc2lnW1NJR1NaXTsKK307CisKKyNkZWZpbmUgUkVBTF9FWFAoUkVBTCkgXAorICAoKGludCkoKFJFQUwpLT51ZXhwIF4gKHVuc2lnbmVkIGludCkoMSA8PCAoRVhQX0JJVFMgLSAxKSkpIFwKKyAgIC0gKDEgPDwgKEVYUF9CSVRTIC0gMSkpKQorI2RlZmluZSBTRVRfUkVBTF9FWFAoUkVBTCwgRVhQKSBcCisgICgoUkVBTCktPnVleHAgPSAoKHVuc2lnbmVkIGludCkoRVhQKSAmICh1bnNpZ25lZCBpbnQpKCgxIDw8IEVYUF9CSVRTKSAtIDEpKSkKKworLyogVmFyaW91cyBoZWFkZXJzIGNvbmRpdGlvbiBwcm90b3R5cGVzIG9uICNpZmRlZiBSRUFMX1ZBTFVFX1RZUEUsIHNvIGl0CisgICBuZWVkcyB0byBiZSBhIG1hY3JvLiAgV2UgZG8gbmVlZCB0byBjb250aW51ZSB0byBoYXZlIGEgc3RydWN0dXJlIHRhZworICAgc28gdGhhdCBvdGhlciBoZWFkZXJzIGNhbiBmb3J3YXJkIGRlY2xhcmUgaXQuICAqLworI2RlZmluZSBSRUFMX1ZBTFVFX1RZUEUgc3RydWN0IHJlYWxfdmFsdWUKKworLyogV2Ugc3RvcmUgYSBSRUFMX1ZBTFVFX1RZUEUgaW50byBhbiBydHgsIGFuZCB3ZSBkbyB0aGlzIGJ5IHB1dHRpbmcgaXQgaW4KKyAgIGNvbnNlY3V0aXZlICJ3IiBzbG90cy4gIE1vcmVvdmVyLCB3ZSd2ZSBnb3QgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mICJ3IgorICAgc2xvdHMgYXQgcHJlcHJvY2Vzc29yIHRpbWUsIHdoaWNoIG1lYW5zIHdlIGNhbid0IHVzZSBzaXplb2YuICBHdWVzcy4gICovCisKKyNkZWZpbmUgUkVBTF9WQUxVRV9UWVBFX1NJWkUgKFNJR05JRklDQU5EX0JJVFMgKyAzMikKKyNkZWZpbmUgUkVBTF9XSURUSCBcCisgIChSRUFMX1ZBTFVFX1RZUEVfU0laRS9IT1NUX0JJVFNfUEVSX1dJREVfSU5UIFwKKyAgICsgKFJFQUxfVkFMVUVfVFlQRV9TSVpFJUhPU1RfQklUU19QRVJfV0lERV9JTlQgPyAxIDogMCkpIC8qIHJvdW5kIHVwICovCisKKy8qIFZlcmlmeSB0aGUgZ3Vlc3MuICAqLworZXh0ZXJuIGNoYXIgdGVzdF9yZWFsX3dpZHRoCisgIFtzaXplb2YoUkVBTF9WQUxVRV9UWVBFKSA8PSBSRUFMX1dJRFRIKnNpemVvZihIT1NUX1dJREVfSU5UKSA/IDEgOiAtMV07CisKKy8qIENhbGN1bGF0ZSB0aGUgZm9ybWF0IGZvciBDT05TVF9ET1VCTEUuICBXZSBuZWVkIGFzIG1hbnkgc2xvdHMgYXMKKyAgIGFyZSBuZWNlc3NhcnkgdG8gb3ZlcmxheSBhIFJFQUxfVkFMVUVfVFlQRSBvbiB0aGVtLiAgVGhpcyBjb3VsZCBiZQorICAgYXMgbWFueSBhcyBmb3VyICgzMi1iaXQgSE9TVF9XSURFX0lOVCwgMTI4LWJpdCBSRUFMX1ZBTFVFX1RZUEUpLgorCisgICBBIG51bWJlciBvZiBwbGFjZXMgYXNzdW1lIHRoYXQgdGhlcmUgYXJlIGFsd2F5cyBhdCBsZWFzdCB0d28gJ3cnCisgICBzbG90cyBpbiBhIENPTlNUX0RPVUJMRSwgc28gd2UgcHJvdmlkZSB0aGVtIGV2ZW4gaWYgb25lIHdvdWxkIHN1ZmZpY2UuICAqLworCisjaWYgUkVBTF9XSURUSCA9PSAxCisjIGRlZmluZSBDT05TVF9ET1VCTEVfRk9STUFUCSAid3ciCisjZWxzZQorIyBpZiBSRUFMX1dJRFRIID09IDIKKyMgIGRlZmluZSBDT05TVF9ET1VCTEVfRk9STUFUCSAid3ciCisjIGVsc2UKKyMgIGlmIFJFQUxfV0lEVEggPT0gMworIyAgIGRlZmluZSBDT05TVF9ET1VCTEVfRk9STUFUCSAid3d3IgorIyAgZWxzZQorIyAgIGlmIFJFQUxfV0lEVEggPT0gNAorIyAgICBkZWZpbmUgQ09OU1RfRE9VQkxFX0ZPUk1BVAkgInd3d3ciCisjICAgZWxzZQorIyAgICBpZiBSRUFMX1dJRFRIID09IDUKKyMgICAgIGRlZmluZSBDT05TVF9ET1VCTEVfRk9STUFUICJ3d3d3dyIKKyMgICAgZWxzZQorIyAgICAgaWYgUkVBTF9XSURUSCA9PSA2CisjICAgICAgZGVmaW5lIENPTlNUX0RPVUJMRV9GT1JNQVQgInd3d3d3dyIKKyMgICAgIGVsc2UKKyAgICAgICAjZXJyb3IgIlJFQUxfV0lEVEggPiA2IG5vdCBzdXBwb3J0ZWQiCisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKworLyogRGVzY3JpYmVzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzcGVjaWZpYyB0YXJnZXQgZm9ybWF0IGluIHVzZS4gICovCitzdHJ1Y3QgcmVhbF9mb3JtYXQKK3sKKyAgLyogTW92ZSB0byBhbmQgZnJvbSB0aGUgdGFyZ2V0IGJ5dGVzLiAgKi8KKyAgdm9pZCAoKmVuY29kZSkgKGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCAqLCBsb25nICosCisJCSAgY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworICB2b2lkICgqZGVjb2RlKSAoY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0ICosIFJFQUxfVkFMVUVfVFlQRSAqLAorCQkgIGNvbnN0IGxvbmcgKik7CisKKyAgLyogVGhlIHJhZGl4IG9mIHRoZSBleHBvbmVudCBhbmQgZGlnaXRzIG9mIHRoZSBzaWduaWZpY2FuZC4gICovCisgIGludCBiOworCisgIC8qIFNpemUgb2YgdGhlIHNpZ25pZmljYW5kIGluIGRpZ2l0cyBvZiByYWRpeCBCLiAgKi8KKyAgaW50IHA7CisKKyAgLyogU2l6ZSBvZiB0aGUgc2lnbmlmaWNhbnQgb2YgYSBOYU4sIGluIGRpZ2l0cyBvZiByYWRpeCBCLiAgKi8KKyAgaW50IHBuYW47CisKKyAgLyogVGhlIG1pbmltdW0gbmVnYXRpdmUgaW50ZWdlciwgeCwgc3VjaCB0aGF0IGIqKih4LTEpIGlzIG5vcm1hbGl6ZWQuICAqLworICBpbnQgZW1pbjsKKworICAvKiBUaGUgbWF4aW11bSBpbnRlZ2VyLCB4LCBzdWNoIHRoYXQgYioqKHgtMSkgaXMgcmVwcmVzZW50YWJsZS4gICovCisgIGludCBlbWF4OworCisgIC8qIFRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIHNpZ24gYml0LCBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHZhbHVlCisgICAgIGlzIHBvc2l0aXZlL25lZ2F0aXZlLCBvciAtMSBmb3IgYSBjb21wbGV4IGVuY29kaW5nLiAgKi8KKyAgaW50IHNpZ25iaXRfcm87CisKKyAgLyogVGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgc2lnbiBiaXQsIGZvciBjaGFuZ2luZyB0aGUgc2lnbiBvZiBhIG51bWJlciwKKyAgICAgb3IgLTEgZm9yIGEgY29tcGxleCBlbmNvZGluZy4gICovCisgIGludCBzaWduYml0X3J3OworCisgIC8qIERlZmF1bHQgcm91bmRpbmcgbW9kZSBmb3Igb3BlcmF0aW9ucyBvbiB0aGlzIGZvcm1hdC4gICovCisgIGJvb2wgcm91bmRfdG93YXJkc196ZXJvOworICBib29sIGhhc19zaWduX2RlcGVuZGVudF9yb3VuZGluZzsKKworICAvKiBQcm9wZXJ0aWVzIG9mIHRoZSBmb3JtYXQuICAqLworICBib29sIGhhc19uYW5zOworICBib29sIGhhc19pbmY7CisgIGJvb2wgaGFzX2Rlbm9ybTsKKyAgYm9vbCBoYXNfc2lnbmVkX3plcm87CisgIGJvb2wgcW5hbl9tc2Jfc2V0OworICBib29sIGNhbm9uaWNhbF9uYW5fbHNic19zZXQ7Cit9OworCisKKy8qIFRoZSB0YXJnZXQgZm9ybWF0IHVzZWQgZm9yIGVhY2ggZmxvYXRpbmcgcG9pbnQgbW9kZS4KKyAgIEZsb2F0IG1vZGVzIGFyZSBmb2xsb3dlZCBieSBkZWNpbWFsIGZsb2F0IG1vZGVzLCB3aXRoIGVudHJpZXMgZm9yCisgICBmbG9hdCBtb2RlcyBpbmRleGVkIGJ5IChNT0RFIC0gZmlyc3QgZmxvYXQgbW9kZSksIGFuZCBlbnRyaWVzIGZvcgorICAgZGVjaW1hbCBmbG9hdCBtb2RlcyBpbmRleGVkIGJ5IChNT0RFIC0gZmlyc3QgZGVjaW1hbCBmbG9hdCBtb2RlKSArCisgICB0aGUgbnVtYmVyIG9mIGZsb2F0IG1vZGVzLiAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgKgorICByZWFsX2Zvcm1hdF9mb3JfbW9kZVtNQVhfTU9ERV9GTE9BVCAtIE1JTl9NT0RFX0ZMT0FUICsgMQorCQkgICAgICAgKyBNQVhfTU9ERV9ERUNJTUFMX0ZMT0FUIC0gTUlOX01PREVfREVDSU1BTF9GTE9BVCArIDFdOworCisjZGVmaW5lIFJFQUxfTU9ERV9GT1JNQVQoTU9ERSkJCQkJCQlcCisgIChyZWFsX2Zvcm1hdF9mb3JfbW9kZVtERUNJTUFMX0ZMT0FUX01PREVfUCAoTU9ERSkJCQlcCisJCQk/ICgoKE1PREUpIC0gTUlOX01PREVfREVDSU1BTF9GTE9BVCkJCVwKKwkJCSAgICsgKE1BWF9NT0RFX0ZMT0FUIC0gTUlOX01PREVfRkxPQVQgKyAxKSkJXAorCQkJOiAoKE1PREUpIC0gTUlOX01PREVfRkxPQVQpXSkKKworI2RlZmluZSBGTE9BVF9NT0RFX0ZPUk1BVChNT0RFKSBcCisgIChSRUFMX01PREVfRk9STUFUIChTQ0FMQVJfRkxPQVRfTU9ERV9QIChNT0RFKT8gKE1PREUpIFwKKwkJCQkJICAgICAgIDogR0VUX01PREVfSU5ORVIgKE1PREUpKSkKKworLyogVGhlIGZvbGxvd2luZyBtYWNybyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZsb2F0aW5nIHBvaW50IGZvcm1hdCBpcworICAgY29tcG9zaXRlLCBpLmUuIG1heSBjb250YWluIG5vbi1jb25zZWN1dGl2ZSBtYW50aXNzYSBiaXRzLCBpbiB3aGljaAorICAgY2FzZSBjb21waWxlLXRpbWUgRlAgb3ZlcmZsb3cgbWF5IG5vdCBtb2RlbCBydW4tdGltZSBvdmVyZmxvdy4gICovCisjZGVmaW5lIE1PREVfQ09NUE9TSVRFX1AoTU9ERSkgXAorICAoRkxPQVRfTU9ERV9QIChNT0RFKSBcCisgICAmJiBGTE9BVF9NT0RFX0ZPUk1BVCAoTU9ERSktPnBuYW4gPCBGTE9BVF9NT0RFX0ZPUk1BVCAoTU9ERSktPnApCisKKy8qIEFjY2Vzc29yIG1hY3JvcyBmb3IgZm9ybWF0IHByb3BlcnRpZXMuICAqLworI2RlZmluZSBNT0RFX0hBU19OQU5TKE1PREUpIFwKKyAgKEZMT0FUX01PREVfUCAoTU9ERSkgJiYgRkxPQVRfTU9ERV9GT1JNQVQgKE1PREUpLT5oYXNfbmFucykKKyNkZWZpbmUgTU9ERV9IQVNfSU5GSU5JVElFUyhNT0RFKSBcCisgIChGTE9BVF9NT0RFX1AgKE1PREUpICYmIEZMT0FUX01PREVfRk9STUFUIChNT0RFKS0+aGFzX2luZikKKyNkZWZpbmUgTU9ERV9IQVNfU0lHTkVEX1pFUk9TKE1PREUpIFwKKyAgKEZMT0FUX01PREVfUCAoTU9ERSkgJiYgRkxPQVRfTU9ERV9GT1JNQVQgKE1PREUpLT5oYXNfc2lnbmVkX3plcm8pCisjZGVmaW5lIE1PREVfSEFTX1NJR05fREVQRU5ERU5UX1JPVU5ESU5HKE1PREUpIFwKKyAgKEZMT0FUX01PREVfUCAoTU9ERSkgXAorICAgJiYgRkxPQVRfTU9ERV9GT1JNQVQgKE1PREUpLT5oYXNfc2lnbl9kZXBlbmRlbnRfcm91bmRpbmcpCisKKy8qIFRydWUgaWYgdGhlIGdpdmVuIG1vZGUgaGFzIGEgTmFOIHJlcHJlc2VudGF0aW9uIGFuZCB0aGUgdHJlYXRtZW50IG9mCisgICBOYU4gb3BlcmFuZHMgaXMgaW1wb3J0YW50LiAgQ2VydGFpbiBvcHRpbWl6YXRpb25zLCBzdWNoIGFzIGZvbGRpbmcKKyAgIHggKiAwIGludG8gMCwgYXJlIG5vdCBjb3JyZWN0IGZvciBOYU4gb3BlcmFuZHMsIGFuZCBhcmUgbm9ybWFsbHkKKyAgIGRpc2FibGVkIGZvciBtb2RlcyB3aXRoIE5hTnMuICBUaGUgdXNlciBjYW4gYXNrIGZvciB0aGVtIHRvIGJlCisgICBkb25lIGFueXdheSB1c2luZyB0aGUgLWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zIHN3aXRjaC4gICovCisjZGVmaW5lIEhPTk9SX05BTlMoTU9ERSkgXAorICAoTU9ERV9IQVNfTkFOUyAoTU9ERSkgJiYgIWZsYWdfZmluaXRlX21hdGhfb25seSkKKworLyogTGlrZSBIT05PUl9OQU5zLCBidXQgdHJ1ZSBpZiB3ZSBob25vciBzaWduYWxpbmcgTmFOcyAob3Igc05hTnMpLiAgKi8KKyNkZWZpbmUgSE9OT1JfU05BTlMoTU9ERSkgKGZsYWdfc2lnbmFsaW5nX25hbnMgJiYgSE9OT1JfTkFOUyAoTU9ERSkpCisKKy8qIEFzIGZvciBIT05PUl9OQU5TLCBidXQgdHJ1ZSBpZiB0aGUgbW9kZSBjYW4gcmVwcmVzZW50IGluZmluaXR5IGFuZAorICAgdGhlIHRyZWF0bWVudCBvZiBpbmZpbml0ZSB2YWx1ZXMgaXMgaW1wb3J0YW50LiAgKi8KKyNkZWZpbmUgSE9OT1JfSU5GSU5JVElFUyhNT0RFKSBcCisgIChNT0RFX0hBU19JTkZJTklUSUVTIChNT0RFKSAmJiAhZmxhZ19maW5pdGVfbWF0aF9vbmx5KQorCisvKiBMaWtlIEhPTk9SX05BTlMsIGJ1dCB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbgorICAgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHplcm8sIGFuZCB0aGUgc2lnbiBvZiB6ZXJvIGlzIGltcG9ydGFudC4gICovCisjZGVmaW5lIEhPTk9SX1NJR05FRF9aRVJPUyhNT0RFKSBcCisgIChNT0RFX0hBU19TSUdORURfWkVST1MgKE1PREUpICYmIGZsYWdfc2lnbmVkX3plcm9zKQorCisvKiBMaWtlIEhPTk9SX05BTlMsIGJ1dCB0cnVlIGlmIGdpdmVuIG1vZGUgc3VwcG9ydHMgc2lnbi1kZXBlbmRlbnQgcm91bmRpbmcsCisgICBhbmQgdGhlIHJvdW5kaW5nIG1vZGUgaXMgaW1wb3J0YW50LiAgKi8KKyNkZWZpbmUgSE9OT1JfU0lHTl9ERVBFTkRFTlRfUk9VTkRJTkcoTU9ERSkgXAorICAoTU9ERV9IQVNfU0lHTl9ERVBFTkRFTlRfUk9VTkRJTkcgKE1PREUpICYmIGZsYWdfcm91bmRpbmdfbWF0aCkKKworLyogRGVjbGFyZSBmdW5jdGlvbnMgaW4gcmVhbC5jLiAgKi8KKworLyogQmluYXJ5IG9yIHVuYXJ5IGFyaXRobWV0aWMgb24gdHJlZV9jb2RlLiAgKi8KK2V4dGVybiBib29sIHJlYWxfYXJpdGhtZXRpYyAoUkVBTF9WQUxVRV9UWVBFICosIGludCwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosCisJCQkgICAgIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogQ29tcGFyZSByZWFscyBieSB0cmVlX2NvZGUuICAqLworZXh0ZXJuIGJvb2wgcmVhbF9jb21wYXJlIChpbnQsIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBpbmZpbml0ZS4gICovCitleHRlcm4gYm9vbCByZWFsX2lzaW5mIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBhIE5hTi4gICovCitleHRlcm4gYm9vbCByZWFsX2lzbmFuIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBmaW5pdGUuICAqLworZXh0ZXJuIGJvb2wgcmVhbF9pc2Zpbml0ZSAoY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBEZXRlcm1pbmUgd2hldGhlciBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIFggaXMgbmVnYXRpdmUuICAqLworZXh0ZXJuIGJvb2wgcmVhbF9pc25lZyAoY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBEZXRlcm1pbmUgd2hldGhlciBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIFggaXMgbWludXMgemVyby4gICovCitleHRlcm4gYm9vbCByZWFsX2lzbmVnemVybyAoY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBDb21wYXJlIHR3byBmbG9hdGluZy1wb2ludCBvYmplY3RzIGZvciBiaXR3aXNlIGlkZW50aXR5LiAgKi8KK2V4dGVybiBib29sIHJlYWxfaWRlbnRpY2FsIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBFeHRlbmQgb3IgdHJ1bmNhdGUgdG8gYSBuZXcgbW9kZS4gICovCitleHRlcm4gdm9pZCByZWFsX2NvbnZlcnQgKFJFQUxfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBSZXR1cm4gdHJ1ZSBpZiB0cnVuY2F0aW5nIHRvIE5FVyBpcyBleGFjdC4gICovCitleHRlcm4gYm9vbCBleGFjdF9yZWFsX3RydW5jYXRlIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBSZW5kZXIgUiBhcyBhIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuICAqLworZXh0ZXJuIHZvaWQgcmVhbF90b19kZWNpbWFsIChjaGFyICosIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLCBzaXplX3QsCisJCQkgICAgIHNpemVfdCwgaW50KTsKKworLyogUmVuZGVyIFIgYXMgYSBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LCByb3VuZGVkIHNvIGFzIHRvIGJlCisgICBwYXJzZWQgYmFjayB0byB0aGUgc2FtZSB2YWx1ZSB3aGVuIGludGVycHJldGVkIGluIG1vZGUgTU9ERS4gICovCitleHRlcm4gdm9pZCByZWFsX3RvX2RlY2ltYWxfZm9yX21vZGUgKGNoYXIgKiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosIHNpemVfdCwKKwkJCQkgICAgICBzaXplX3QsIGludCwgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBSZW5kZXIgUiBhcyBhIGhleGFkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgKi8KK2V4dGVybiB2b2lkIHJlYWxfdG9faGV4YWRlY2ltYWwgKGNoYXIgKiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosCisJCQkJIHNpemVfdCwgc2l6ZV90LCBpbnQpOworCisvKiBSZW5kZXIgUiBhcyBhbiBpbnRlZ2VyLiAgKi8KK2V4dGVybiBIT1NUX1dJREVfSU5UIHJlYWxfdG9faW50ZWdlciAoY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworZXh0ZXJuIHZvaWQgcmVhbF90b19pbnRlZ2VyMiAoSE9TVF9XSURFX0lOVCAqLCBIT1NUX1dJREVfSU5UICosCisJCQkgICAgICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIEluaXRpYWxpemUgUiBmcm9tIGEgZGVjaW1hbCBvciBoZXhhZGVjaW1hbCBzdHJpbmcuICBSZXR1cm4gLTEgaWYKKyAgIHRoZSB2YWx1ZSB1bmRlcmZsb3dzLCArMSBpZiBvdmVyZmxvd3MsIGFuZCAwIG90aGVyd2lzZS4gICovCitleHRlcm4gaW50IHJlYWxfZnJvbV9zdHJpbmcgKFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBjaGFyICopOworLyogV3JhcHBlciB0byBhbGxvdyBkaWZmZXJlbnQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gZm9yIGRlY2ltYWwgZmxvYXRzLiAqLworZXh0ZXJuIHZvaWQgcmVhbF9mcm9tX3N0cmluZzMgKFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBjaGFyICosIGVudW0gbWFjaGluZV9tb2RlKTsKKworLyogSW5pdGlhbGl6ZSBSIGZyb20gYW4gaW50ZWdlciBwYWlyIEhJR0gvTE9XLiAgKi8KK2V4dGVybiB2b2lkIHJlYWxfZnJvbV9pbnRlZ2VyIChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkgICAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCwgaW50KTsKKworZXh0ZXJuIGxvbmcgcmVhbF90b190YXJnZXRfZm10IChsb25nICosIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLAorCQkJCWNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCAqKTsKK2V4dGVybiBsb25nIHJlYWxfdG9fdGFyZ2V0IChsb25nICosIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKK2V4dGVybiB2b2lkIHJlYWxfZnJvbV90YXJnZXRfZm10IChSRUFMX1ZBTFVFX1RZUEUgKiwgY29uc3QgbG9uZyAqLAorCQkJCSAgY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0ICopOworZXh0ZXJuIHZvaWQgcmVhbF9mcm9tX3RhcmdldCAoUkVBTF9WQUxVRV9UWVBFICosIGNvbnN0IGxvbmcgKiwKKwkJCSAgICAgIGVudW0gbWFjaGluZV9tb2RlKTsKKworZXh0ZXJuIHZvaWQgcmVhbF9pbmYgKFJFQUxfVkFMVUVfVFlQRSAqKTsKKworZXh0ZXJuIGJvb2wgcmVhbF9uYW4gKFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBjaGFyICosIGludCwgZW51bSBtYWNoaW5lX21vZGUpOworCitleHRlcm4gdm9pZCByZWFsX21heHZhbCAoUkVBTF9WQUxVRV9UWVBFICosIGludCwgZW51bSBtYWNoaW5lX21vZGUpOworCitleHRlcm4gdm9pZCByZWFsXzJleHBOIChSRUFMX1ZBTFVFX1RZUEUgKiwgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmVhbF9oYXNoIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKworLyogVGFyZ2V0IGZvcm1hdHMgZGVmaW5lZCBpbiByZWFsLmMuICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBpZWVlX3NpbmdsZV9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IG1pcHNfc2luZ2xlX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgbW90b3JvbGFfc2luZ2xlX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgc3B1X3NpbmdsZV9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGllZWVfZG91YmxlX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgbWlwc19kb3VibGVfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBtb3Rvcm9sYV9kb3VibGVfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBpZWVlX2V4dGVuZGVkX21vdG9yb2xhX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgaWVlZV9leHRlbmRlZF9pbnRlbF85Nl9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGllZWVfZXh0ZW5kZWRfaW50ZWxfOTZfcm91bmRfNTNfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBpZWVlX2V4dGVuZGVkX2ludGVsXzEyOF9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGlibV9leHRlbmRlZF9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IG1pcHNfZXh0ZW5kZWRfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBpZWVlX3F1YWRfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBtaXBzX3F1YWRfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCB2YXhfZl9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IHZheF9kX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgdmF4X2dfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCByZWFsX2ludGVybmFsX2Zvcm1hdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVhbF9mb3JtYXQgZGVjaW1hbF9zaW5nbGVfZm9ybWF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCBkZWNpbWFsX2RvdWJsZV9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGRlY2ltYWxfcXVhZF9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGllZWVfaGFsZl9mb3JtYXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHJlYWxfZm9ybWF0IGFybV9oYWxmX2Zvcm1hdDsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBDcmFwLiAgKi8KKworI2RlZmluZSBSRUFMX0FSSVRITUVUSUModmFsdWUsIGNvZGUsIGQxLCBkMikgXAorICByZWFsX2FyaXRobWV0aWMgKCYodmFsdWUpLCBjb2RlLCAmKGQxKSwgJihkMikpCisKKyNkZWZpbmUgUkVBTF9WQUxVRVNfSURFTlRJQ0FMKHgsIHkpCXJlYWxfaWRlbnRpY2FsICgmKHgpLCAmKHkpKQorI2RlZmluZSBSRUFMX1ZBTFVFU19FUVVBTCh4LCB5KQkJcmVhbF9jb21wYXJlIChFUV9FWFBSLCAmKHgpLCAmKHkpKQorI2RlZmluZSBSRUFMX1ZBTFVFU19MRVNTKHgsIHkpCQlyZWFsX2NvbXBhcmUgKExUX0VYUFIsICYoeCksICYoeSkpCisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBpbmZpbml0ZS4gICovCisjZGVmaW5lIFJFQUxfVkFMVUVfSVNJTkYoeCkJCXJlYWxfaXNpbmYgKCYoeCkpCisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBhIE5hTi4gICovCisjZGVmaW5lIFJFQUxfVkFMVUVfSVNOQU4oeCkJCXJlYWxfaXNuYW4gKCYoeCkpCisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBuZWdhdGl2ZS4gICovCisjZGVmaW5lIFJFQUxfVkFMVUVfTkVHQVRJVkUoeCkJCXJlYWxfaXNuZWcgKCYoeCkpCisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBtaW51cyB6ZXJvLiAgKi8KKyNkZWZpbmUgUkVBTF9WQUxVRV9NSU5VU19aRVJPKHgpCXJlYWxfaXNuZWd6ZXJvICgmKHgpKQorCisvKiBJTiBpcyBhIFJFQUxfVkFMVUVfVFlQRS4gIE9VVCBpcyBhbiBhcnJheSBvZiBsb25ncy4gICovCisjZGVmaW5lIFJFQUxfVkFMVUVfVE9fVEFSR0VUX0xPTkdfRE9VQkxFKElOLCBPVVQpCQkJXAorICByZWFsX3RvX3RhcmdldCAoT1VULCAmKElOKSwJCQkJCQlcCisJCSAgbW9kZV9mb3Jfc2l6ZSAoTE9OR19ET1VCTEVfVFlQRV9TSVpFLCBNT0RFX0ZMT0FULCAwKSkKKworI2RlZmluZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ET1VCTEUoSU4sIE9VVCkgXAorICByZWFsX3RvX3RhcmdldCAoT1VULCAmKElOKSwgbW9kZV9mb3Jfc2l6ZSAoNjQsIE1PREVfRkxPQVQsIDApKQorCisvKiBJTiBpcyBhIFJFQUxfVkFMVUVfVFlQRS4gIE9VVCBpcyBhIGxvbmcuICAqLworI2RlZmluZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUoSU4sIE9VVCkgXAorICAoKE9VVCkgPSByZWFsX3RvX3RhcmdldCAoTlVMTCwgJihJTiksIG1vZGVfZm9yX3NpemUgKDMyLCBNT0RFX0ZMT0FULCAwKSkpCisKKyNkZWZpbmUgUkVBTF9WQUxVRV9GUk9NX0lOVChyLCBsbywgaGksIG1vZGUpIFwKKyAgcmVhbF9mcm9tX2ludGVnZXIgKCYociksIG1vZGUsIGxvLCBoaSwgMCkKKworI2RlZmluZSBSRUFMX1ZBTFVFX0ZST01fVU5TSUdORURfSU5UKHIsIGxvLCBoaSwgbW9kZSkgXAorICByZWFsX2Zyb21faW50ZWdlciAoJihyKSwgbW9kZSwgbG8sIGhpLCAxKQorCisvKiBSZWFsIHZhbHVlcyB0byBJRUVFIDc1NCBkZWNpbWFsIGZsb2F0cy4gICovCisKKy8qIElOIGlzIGEgUkVBTF9WQUxVRV9UWVBFLiAgT1VUIGlzIGFuIGFycmF5IG9mIGxvbmdzLiAgKi8KKyNkZWZpbmUgUkVBTF9WQUxVRV9UT19UQVJHRVRfREVDSU1BTDEyOChJTiwgT1VUKSBcCisgIHJlYWxfdG9fdGFyZ2V0IChPVVQsICYoSU4pLCBtb2RlX2Zvcl9zaXplICgxMjgsIE1PREVfREVDSU1BTF9GTE9BVCwgMCkpCisKKyNkZWZpbmUgUkVBTF9WQUxVRV9UT19UQVJHRVRfREVDSU1BTDY0KElOLCBPVVQpIFwKKyAgcmVhbF90b190YXJnZXQgKE9VVCwgJihJTiksIG1vZGVfZm9yX3NpemUgKDY0LCBNT0RFX0RFQ0lNQUxfRkxPQVQsIDApKQorCisvKiBJTiBpcyBhIFJFQUxfVkFMVUVfVFlQRS4gIE9VVCBpcyBhIGxvbmcuICAqLworI2RlZmluZSBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ERUNJTUFMMzIoSU4sIE9VVCkgXAorICAoKE9VVCkgPSByZWFsX3RvX3RhcmdldCAoTlVMTCwgJihJTiksIG1vZGVfZm9yX3NpemUgKDMyLCBNT0RFX0RFQ0lNQUxfRkxPQVQsIDApKSkKKworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlX3RydW5jYXRlIChlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkJICAgIFJFQUxfVkFMVUVfVFlQRSk7CisKKyNkZWZpbmUgUkVBTF9WQUxVRV9UT19JTlQocGxvdywgcGhpZ2gsIHIpIFwKKyAgcmVhbF90b19pbnRlZ2VyMiAocGxvdywgcGhpZ2gsICYocikpCisKK2V4dGVybiBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZV9uZWdhdGUgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKK2V4dGVybiBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZV9hYnMgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworZXh0ZXJuIGludCBzaWduaWZpY2FuZF9zaXplIChlbnVtIG1hY2hpbmVfbW9kZSk7CisKK2V4dGVybiBSRUFMX1ZBTFVFX1RZUEUgcmVhbF9mcm9tX3N0cmluZzIgKGNvbnN0IGNoYXIgKiwgZW51bSBtYWNoaW5lX21vZGUpOworCisjZGVmaW5lIFJFQUxfVkFMVUVfQVRPRihzLCBtKSBcCisgIHJlYWxfZnJvbV9zdHJpbmcyIChzLCBtKQorCisjZGVmaW5lIENPTlNUX0RPVUJMRV9BVE9GKHMsIG0pIFwKKyAgQ09OU1RfRE9VQkxFX0ZST01fUkVBTF9WQUxVRSAocmVhbF9mcm9tX3N0cmluZzIgKHMsIG0pLCBtKQorCisjZGVmaW5lIFJFQUxfVkFMVUVfRklYKHIpIFwKKyAgcmVhbF90b19pbnRlZ2VyICgmKHIpKQorCisvKiA/Pz8gTm90IHF1aXRlIHJpZ2h0LiAgKi8KKyNkZWZpbmUgUkVBTF9WQUxVRV9VTlNJR05FRF9GSVgocikgXAorICByZWFsX3RvX2ludGVnZXIgKCYocikpCisKKy8qID8/PyBUaGVzZSB3ZXJlIGFkZGVkIGZvciBQYXJhbm9pYSBzdXBwb3J0LiAgKi8KKworLyogUmV0dXJuIGZsb29yIGxvZzIoUikuICAqLworZXh0ZXJuIGludCByZWFsX2V4cG9uZW50IChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIFIgPSBBICogMioqRVhQLiAgKi8KK2V4dGVybiB2b2lkIHJlYWxfbGRleHAgKFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgaW50KTsKKworLyogKioqKiBFbmQgb2Ygc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IgaW50ZXJmYWNlIG1hY3JvcyAqKioqICovCisMCisvKiBDb25zdGFudCByZWFsIHZhbHVlcyAwLCAxLCAyLCAtMSBhbmQgMC41LiAgKi8KKworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSBkY29uc3QwOworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSBkY29uc3QxOworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSBkY29uc3QyOworZXh0ZXJuIFJFQUxfVkFMVUVfVFlQRSBkY29uc3RtMTsKK2V4dGVybiBSRUFMX1ZBTFVFX1RZUEUgZGNvbnN0aGFsZjsKKworI2RlZmluZSBkY29uc3RfZSgpICAoKmRjb25zdF9lX3B0ciAoKSkKKyNkZWZpbmUgZGNvbnN0X3RoaXJkKCkgICgqZGNvbnN0X3RoaXJkX3B0ciAoKSkKKyNkZWZpbmUgZGNvbnN0X3NxcnQyKCkgICgqZGNvbnN0X3NxcnQyX3B0ciAoKSkKKworLyogRnVuY3Rpb24gdG8gcmV0dXJuIHRoZSByZWFsIHZhbHVlIHNwZWNpYWwgY29uc3RhbnQgJ2UnLiAgKi8KK2V4dGVybiBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiBkY29uc3RfZV9wdHIgKHZvaWQpOworCisvKiBSZXR1cm5zIHRoZSBzcGVjaWFsIFJFQUxfVkFMVUVfVFlQRSBjb3JyZXNwb25kaW5nIHRvIDEvMy4gICovCitleHRlcm4gY29uc3QgUkVBTF9WQUxVRV9UWVBFICogZGNvbnN0X3RoaXJkX3B0ciAodm9pZCk7CisKKy8qIFJldHVybnMgdGhlIHNwZWNpYWwgUkVBTF9WQUxVRV9UWVBFIGNvcnJlc3BvbmRpbmcgdG8gc3FydCgyKS4gICovCitleHRlcm4gY29uc3QgUkVBTF9WQUxVRV9UWVBFICogZGNvbnN0X3NxcnQyX3B0ciAodm9pZCk7CisKKy8qIEZ1bmN0aW9uIHRvIHJldHVybiBhIHJlYWwgdmFsdWUgKG5vdCBhIHRyZWUgbm9kZSkKKyAgIGZyb20gYSBnaXZlbiBpbnRlZ2VyIGNvbnN0YW50LiAgKi8KK1JFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlX2Zyb21faW50X2NzdCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisKKy8qIEdpdmVuIGEgQ09OU1RfRE9VQkxFIGluIEZST00sIHN0b3JlIGludG8gVE8gdGhlIHZhbHVlIGl0IHJlcHJlc2VudHMuICAqLworI2RlZmluZSBSRUFMX1ZBTFVFX0ZST01fQ09OU1RfRE9VQkxFKHRvLCBmcm9tKSBcCisgICgodG8pID0gKkNPTlNUX0RPVUJMRV9SRUFMX1ZBTFVFIChmcm9tKSkKKworLyogUmV0dXJuIGEgQ09OU1RfRE9VQkxFIHdpdGggdmFsdWUgUiBhbmQgbW9kZSBNLiAgKi8KKyNkZWZpbmUgQ09OU1RfRE9VQkxFX0ZST01fUkVBTF9WQUxVRShyLCBtKSBcCisgIGNvbnN0X2RvdWJsZV9mcm9tX3JlYWxfdmFsdWUgKHIsIG0pCitleHRlcm4gcnR4IGNvbnN0X2RvdWJsZV9mcm9tX3JlYWxfdmFsdWUgKFJFQUxfVkFMVUVfVFlQRSwgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBSZXBsYWNlIFIgYnkgMS9SIGluIHRoZSBnaXZlbiBtYWNoaW5lIG1vZGUsIGlmIHRoZSByZXN1bHQgaXMgZXhhY3QuICAqLworZXh0ZXJuIGJvb2wgZXhhY3RfcmVhbF9pbnZlcnNlIChlbnVtIG1hY2hpbmVfbW9kZSwgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBSZXR1cm4gdHJ1ZSBpZiBhcml0aG1ldGljIG9uIHZhbHVlcyBpbiBJTU9ERSB0aGF0IHdlcmUgcHJvbW90ZWQKKyAgIGZyb20gdmFsdWVzIGluIFRNT0RFIGlzIGVxdWl2YWxlbnQgdG8gZGlyZWN0IGFyaXRobWV0aWMgb24gdmFsdWVzCisgICBpbiBUTU9ERS4gICovCitib29sIHJlYWxfY2FuX3Nob3J0ZW5fYXJpdGhtZXRpYyAoZW51bSBtYWNoaW5lX21vZGUsIGVudW0gbWFjaGluZV9tb2RlKTsKKworLyogSW4gdHJlZS5jOiB3cmFwIHVwIGEgUkVBTF9WQUxVRV9UWVBFIGluIGEgdHJlZSBub2RlLiAgKi8KK2V4dGVybiB0cmVlIGJ1aWxkX3JlYWwgKHRyZWUsIFJFQUxfVkFMVUVfVFlQRSk7CisKKy8qIENhbGN1bGF0ZSBSIGFzIHRoZSBzcXVhcmUgcm9vdCBvZiBYIGluIHRoZSBnaXZlbiBtYWNoaW5lIG1vZGUuICAqLworZXh0ZXJuIGJvb2wgcmVhbF9zcXJ0IChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCSAgICAgICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CisKKy8qIENhbGN1bGF0ZSBSIGFzIFggcmFpc2VkIHRvIHRoZSBpbnRlZ2VyIGV4cG9uZW50IE4gaW4gbW9kZSBNT0RFLiAgKi8KK2V4dGVybiBib29sIHJlYWxfcG93aSAoUkVBTF9WQUxVRV9UWVBFICosIGVudW0gbWFjaGluZV9tb2RlLAorCQkgICAgICAgY29uc3QgUkVBTF9WQUxVRV9UWVBFICosIEhPU1RfV0lERV9JTlQpOworCisvKiBTdGFuZGFyZCByb3VuZCB0byBpbnRlZ2VyIHZhbHVlIGZ1bmN0aW9ucy4gICovCitleHRlcm4gdm9pZCByZWFsX3RydW5jIChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQljb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CitleHRlcm4gdm9pZCByZWFsX2Zsb29yIChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQljb25zdCBSRUFMX1ZBTFVFX1RZUEUgKik7CitleHRlcm4gdm9pZCByZWFsX2NlaWwgKFJFQUxfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJICAgICAgIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKK2V4dGVybiB2b2lkIHJlYWxfcm91bmQgKFJFQUxfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCWNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogU2V0IHRoZSBzaWduIG9mIFIgdG8gdGhlIHNpZ24gb2YgWC4gICovCitleHRlcm4gdm9pZCByZWFsX2NvcHlzaWduIChSRUFMX1ZBTFVFX1RZUEUgKiwgY29uc3QgUkVBTF9WQUxVRV9UWVBFICopOworCisvKiBDaGVjayB3aGV0aGVyIHRoZSByZWFsIGNvbnN0YW50IHZhbHVlIGdpdmVuIGlzIGFuIGludGVnZXIuICAqLworZXh0ZXJuIGJvb2wgcmVhbF9pc2ludGVnZXIgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqYywgZW51bSBtYWNoaW5lX21vZGUgbW9kZSk7CisKKy8qIFdyaXRlIGludG8gQlVGIHRoZSBtYXhpbXVtIHJlcHJlc2VudGFibGUgZmluaXRlIGZsb2F0aW5nLXBvaW50CisgICBudW1iZXIsICgxIC0gYioqLXApICogYioqZW1heCBmb3IgYSBnaXZlbiBGUCBmb3JtYXQgRk1UIGFzIGEgaGV4CisgICBmbG9hdCBzdHJpbmcuICBCVUYgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgcmVzdWx0LiAgKi8KK2V4dGVybiB2b2lkIGdldF9tYXhfZmxvYXQgKGNvbnN0IHN0cnVjdCByZWFsX2Zvcm1hdCAqLCBjaGFyICosIHNpemVfdCk7CisjZW5kaWYgLyogISBHQ0NfUkVBTF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcmVhbG1wZnIuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9yZWFsbXBmci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhM2ZiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcmVhbG1wZnIuaApAQCAtMCwwICsxLDM4IEBACisvKiBEZWZpbml0aW9ucyBvZiBmbG9hdGluZy1wb2ludCBjb252ZXJzaW9uIGZyb20gY29tcGlsZXIKKyAgIGludGVybmFsIGZvcm1hdCB0byBNUEZSLgorICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgorICAgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICAgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19SRUFMR01QX0gKKyNkZWZpbmUgR0NDX1JFQUxHTVBfSAorCisjaW5jbHVkZSA8bXBmci5oPgorI2luY2x1ZGUgPG1wYy5oPgorI2luY2x1ZGUgInJlYWwuaCIKKworLyogSW4gYnVpbHRpbnMuYy4gICovCitleHRlcm4gdHJlZSBkb19tcGNfYXJnMiAodHJlZSwgdHJlZSwgdHJlZSwgaW50LCBpbnQgKCopKG1wY19wdHIsIG1wY19zcmNwdHIsIG1wY19zcmNwdHIsIG1wY19ybmRfdCkpOworCisvKiBDb252ZXJ0IGJldHdlZW4gTVBGUiBhbmQgUkVBTF9WQUxVRV9UWVBFLiAgVGhlIGNhbGxlciBpcworICAgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhbmQgY2xlYXJpbmcgdGhlIE1QRlIgcGFyYW1ldGVyLiAgKi8KKworZXh0ZXJuIHZvaWQgcmVhbF9mcm9tX21wZnIgKFJFQUxfVkFMVUVfVFlQRSAqLCBtcGZyX3NyY3B0ciwgdHJlZSwgbXBfcm5kX3QpOworZXh0ZXJuIHZvaWQgbXBmcl9mcm9tX3JlYWwgKG1wZnJfcHRyLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgbXBfcm5kX3QpOworCisjZW5kaWYgLyogISBHQ0NfUkVBTEdNUF9IICovCisKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9yZWctbm90ZXMuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3JlZy1ub3Rlcy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2MWMwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9yZWctbm90ZXMuZGVmCkBAIC0wLDAgKzEsMjE4IEBACisvKiBSZWdpc3RlciBub3RlIGRlZmluaXRpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGlzIGZpbGUgZGVmaW5lcyBhbGwgdGhlIGNvZGVzIHRoYXQgbWF5IGFwcGVhciBvbiBpbmRpdmlkdWFsCisgICBFWFBSX0xJU1QgcnR4ZXMgaW4gdGhlIFJFR19OT1RFUyBjaGFpbiBvZiBhbiBpbnNuLiAgVGhlIGNvZGVzIGFyZQorICAgc3RvcmVkIGluIHRoZSBtb2RlIGZpZWxkIG9mIHRoZSBFWFBSX0xJU1QuICBTb3VyY2UgZmlsZXMgZGVmaW5lCisgICBERUZfUkVHX05PVEUgYXBwcm9wcmlhdGVseSBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZS4gICovCisKKy8qIFNob3J0aGFuZC4gICovCisjZGVmaW5lIFJFR19OT1RFKE5BTUUpIERFRl9SRUdfTk9URSAoUkVHXyMjTkFNRSkKKworLyogUkVHX0RFUF9UUlVFIGlzIHVzZWQgaW4gc2NoZWR1bGVyIGRlcGVuZGVuY2llcyBsaXN0cyB0byByZXByZXNlbnQgYQorICAgcmVhZC1hZnRlci13cml0ZSBkZXBlbmRlbmN5IChpLmUuIGEgdHJ1ZSBkYXRhIGRlcGVuZGVuY3kpLiAgVGhpcyBpcworICAgaGVyZSwgbm90IGdyb3VwZWQgd2l0aCBSRUdfREVQX0FOVEkgYW5kIFJFR19ERVBfT1VUUFVULCBiZWNhdXNlIHNvbWUKKyAgIHBhc3NlcyB1c2UgYSBsaXRlcmFsIDAgZm9yIGl0LiAgKi8KK1JFR19OT1RFIChERVBfVFJVRSkKKworLyogVGhlIHZhbHVlIGluIFJFRyBkaWVzIGluIHRoaXMgaW5zbiAoaS5lLiwgaXQgaXMgbm90IG5lZWRlZCBwYXN0CisgICB0aGlzIGluc24pLiAgSWYgUkVHIGlzIHNldCBpbiB0aGlzIGluc24sIHRoZSBSRUdfREVBRCBub3RlIG1heSwKKyAgIGJ1dCBuZWVkIG5vdCwgYmUgb21pdHRlZC4gICovCitSRUdfTk9URSAoREVBRCkKKworLyogVGhlIFJFRyBpcyBhdXRvaW5jcmVtZW50ZWQgb3IgYXV0b2RlY3JlbWVudGVkIGluIHRoaXMgaW5zbi4gICovCitSRUdfTk9URSAoSU5DKQorCisvKiBEZXNjcmliZXMgdGhlIGluc24gYXMgYSB3aG9sZTsgaXQgc2F5cyB0aGF0IHRoZSBpbnNuIHNldHMgYQorICAgcmVnaXN0ZXIgdG8gYSBjb25zdGFudCB2YWx1ZSBvciB0byBiZSBlcXVpdmFsZW50IHRvIGEgbWVtb3J5CisgICBhZGRyZXNzLiAgSWYgdGhlIHJlZ2lzdGVyIGlzIHNwaWxsZWQgdG8gdGhlIHN0YWNrIHRoZW4gdGhlIGNvbnN0YW50CisgICB2YWx1ZSBzaG91bGQgYmUgc3Vic3RpdHV0ZWQgZm9yIGl0LiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBSRUdfRVFVSVYKKyAgIGlzIHRoZSBjb25zdGFudCB2YWx1ZSBvciBtZW1vcnkgYWRkcmVzcywgd2hpY2ggbWF5IGJlIGRpZmZlcmVudAorICAgZnJvbSB0aGUgc291cmNlIG9mIHRoZSBTRVQgYWx0aG91Z2ggaXQgaGFzIHRoZSBzYW1lIHZhbHVlLiAgQQorICAgUkVHX0VRVUlWIG5vdGUgbWF5IGFsc28gYXBwZWFyIG9uIGFuIGluc24gd2hpY2ggY29waWVzIGEgcmVnaXN0ZXIKKyAgIHBhcmFtZXRlciB0byBhIHBzZXVkby1yZWdpc3RlciwgaWYgdGhlcmUgaXMgYSBtZW1vcnkgYWRkcmVzcyB3aGljaAorICAgY291bGQgYmUgdXNlZCB0byBob2xkIHRoYXQgcHNldWRvLXJlZ2lzdGVyIHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLiAgKi8KK1JFR19OT1RFIChFUVVJVikKKworLyogTGlrZSBSRUdfRVFVSVYgZXhjZXB0IHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIG9ubHkgbW9tZW50YXJpbHkKKyAgIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgcnR4LiAgVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdXNlZCBmb3IKKyAgIHN1YnN0aXR1dGlvbjsgYnV0IGl0IGNhbiBiZSB1c2VkIGZvciBjc2UuICAqLworUkVHX05PVEUgKEVRVUFMKQorCisvKiBUaGUgcmVnaXN0ZXIgaXMgYWx3YXlzIG5vbm5lZ2F0aXZlIGR1cmluZyB0aGUgY29udGFpbmluZyBsb29wLgorICAgVGhpcyBpcyB1c2VkIGluIGJyYW5jaGVzIHNvIHRoYXQgZGVjcmVtZW50IGFuZCBicmFuY2ggaW5zdHJ1Y3Rpb25zCisgICB0ZXJtaW5hdGluZyBvbiB6ZXJvIGNhbiBiZSBtYXRjaGVkLiAgVGhlcmUgbXVzdCBiZSBhbiBpbnNuIHBhdHRlcm4KKyAgIGluIHRoZSBtZCBmaWxlIG5hbWVkIGBkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvJyBvciBlbHNlIHRoaXMKKyAgIHdpbGwgbmV2ZXIgYmUgYWRkZWQgdG8gYW55IGluc3RydWN0aW9ucy4gICovCitSRUdfTk9URSAoTk9OTkVHKQorCisvKiBJZGVudGlmaWVzIGEgcmVnaXN0ZXIgc2V0IGluIHRoaXMgaW5zbiBhbmQgbmV2ZXIgdXNlZC4gICovCitSRUdfTk9URSAoVU5VU0VEKQorCisvKiBSRUdfQ0NfU0VUVEVSIGFuZCBSRUdfQ0NfVVNFUiBsaW5rIGEgcGFpciBvZiBpbnNucyB0aGF0IHNldCBhbmQgdXNlCisgICBDQzAsIHJlc3BlY3RpdmVseS4gIE5vcm1hbGx5LCB0aGVzZSBhcmUgcmVxdWlyZWQgdG8gYmUgY29uc2VjdXRpdmUKKyAgIGluc25zLCBidXQgd2UgcGVybWl0IHB1dHRpbmcgYSBjYzAtc2V0dGluZyBpbnNuIGluIHRoZSBkZWxheSBzbG90CisgICBvZiBhIGJyYW5jaCBhcyBsb25nIGFzIG9ubHkgb25lIGNvcHkgb2YgdGhlIGluc24gZXhpc3RzLiAgSW4gdGhhdAorICAgY2FzZSwgdGhlc2Ugbm90ZXMgcG9pbnQgZnJvbSBvbmUgdG8gdGhlIG90aGVyIHRvIGFsbG93IGNvZGUKKyAgIGdlbmVyYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgYW55IHJlcXVpcmUgaW5mb3JtYXRpb24gYW5kIHRvCisgICBwcm9wZXJseSB1cGRhdGUgQ0NfU1RBVFVTLiAgVGhlc2Ugbm90ZXMgYXJlIElOU05fTElTVHMuICAqLworUkVHX05PVEUgKENDX1NFVFRFUikKK1JFR19OT1RFIChDQ19VU0VSKQorCisvKiBQb2ludHMgdG8gYSBDT0RFX0xBQkVMLiAgVXNlZCBieSBKVU1QX0lOU05zIHRvIHNheSB0aGF0IHRoZSBDT0RFX0xBQkVMCisgICBjb250YWluZWQgaW4gdGhlIFJFR19MQUJFTF9UQVJHRVQgbm90ZSBpcyBhIHBvc3NpYmxlIGp1bXAgdGFyZ2V0IG9mCisgICB0aGlzIGluc24uICBUaGlzIG5vdGUgaXMgYW4gSU5TTl9MSVNULiAgKi8KK1JFR19OT1RFIChMQUJFTF9UQVJHRVQpCisKKy8qIFBvaW50cyB0byBhIENPREVfTEFCRUwuICBVc2VkIGJ5IGFueSBpbnNuIHRvIHNheSB0aGF0IHRoZSBDT0RFX0xBQkVMCisgICBjb250YWluZWQgaW4gdGhlIFJFR19MQUJFTF9PUEVSQU5EIG5vdGUgaXMgdXNlZCBieSB0aGUgaW5zbiwgYnV0IGFzIGFuCisgICBvcGVyYW5kLCBub3QgYXMgYSBqdW1wIHRhcmdldCAodGhvdWdoIGl0IG1heSBpbmRpcmVjdGx5IGJlIGEganVtcAorICAgdGFyZ2V0IGZvciBhIGxhdGVyIGp1bXAgaW5zbikuICBUaGlzIG5vdGUgaXMgYW4gSU5TTl9MSVNULiAgKi8KK1JFR19OT1RFIChMQUJFTF9PUEVSQU5EKQorCisvKiBSRUdfREVQX09VVFBVVCBhbmQgUkVHX0RFUF9BTlRJIGFyZSB1c2VkIGluIHNjaGVkdWxlciBkZXBlbmRlbmNpZXMgbGlzdHMKKyAgIHRvIHJlcHJlc2VudCB3cml0ZS1hZnRlci13cml0ZSBhbmQgd3JpdGUtYWZ0ZXItcmVhZCBkZXBlbmRlbmNpZXMKKyAgIHJlc3BlY3RpdmVseS4gICovCitSRUdfTk9URSAoREVQX09VVFBVVCkKK1JFR19OT1RFIChERVBfQU5USSkKK1JFR19OT1RFIChERVBfQ09OVFJPTCkKKworLyogUkVHX0JSX1BST0IgaXMgYXR0YWNoZWQgdG8gSlVNUF9JTlNOcyBhbmQgQ0FMTF9JTlNOcy4gIEl0IGhhcyBhbgorICAgaW50ZWdlciB2YWx1ZS4gIEZvciBqdW1wcywgaXQgaXMgdGhlIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBpcyBhCisgICB0YWtlbiBicmFuY2guICBGb3IgY2FsbHMsIGl0IGlzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoaXMgY2FsbAorICAgd29uJ3QgcmV0dXJuLiAgKi8KK1JFR19OT1RFIChCUl9QUk9CKQorCisvKiBBdHRhY2hlZCB0byBhIGNhbGwgaW5zbjsgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGwgaXMgbWFsbG9jLWxpa2UgYW5kCisgICB0aGF0IHRoZSBwb2ludGVyIHJldHVybmVkIGNhbm5vdCBhbGlhcyBhbnl0aGluZyBlbHNlLiAgKi8KK1JFR19OT1RFIChOT0FMSUFTKQorCisvKiBSRUdfQlJfUFJFRCBpcyBhdHRhY2hlZCB0byBKVU1QX0lOU05zIGFuZCBDQUxMX0lOU05Tcy4gIEl0IGNvbnRhaW5zCisgICBDT05DQVQgb2YgdHdvIGludGVnZXIgdmFsdWUuICBGaXJzdCBzcGVjaWZpZXMgdGhlIGJyYW5jaCBwcmVkaWN0b3IKKyAgIHRoYXQgYWRkZWQgdGhlIG5vdGUsIHNlY29uZCBzcGVjaWZpZXMgdGhlIHByZWRpY3RlZCBoaXRyYXRlIG9mCisgICBicmFuY2ggaW4gdGhlIHNhbWUgZm9ybWF0IGFzIFJFR19CUl9QUk9CIG5vdGUgdXNlcy4gICovCitSRUdfTk9URSAoQlJfUFJFRCkKKworLyogQXR0YWNoZWQgdG8gaW5zbnMgdGhhdCBhcmUgUlRYX0ZSQU1FX1JFTEFURURfUCwgYnV0IGFyZSB0b28gY29tcGxleAorICAgZm9yIERXQVJGIHRvIGludGVycHJldCB3aGF0IHRoZXkgaW1wbHkuICBUaGUgYXR0YWNoZWQgcnR4IGlzIHVzZWQKKyAgIGluc3RlYWQgb2YgaW50dWl0aW9uLiAgKi8KK1JFR19OT1RFIChGUkFNRV9SRUxBVEVEX0VYUFIpCisKKy8qIEF0dGFjaGVkIHRvIGluc25zIHRoYXQgYXJlIFJUWF9GUkFNRV9SRUxBVEVEX1AsIGJ1dCBhcmUgdG9vIGNvbXBsZXgKKyAgIGZvciBGUkFNRV9SRUxBVEVEX0VYUFIgaW50dWl0aW9uLiAgVGhlIGluc24ncyBmaXJzdCBwYXR0ZXJuIG11c3QgYmUKKyAgIGEgU0VULCBhbmQgdGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgdGhlIENGQSByZWdpc3Rlci4gIFRoZSBhdHRhY2hlZAorICAgcnR4IGlzIGFuIGV4cHJlc3Npb24gdGhhdCBkZWZpbmVzIHRoZSBDRkEuICBJbiB0aGUgc2ltcGxlc3QgY2FzZSwgdGhlCisgICBydHggY291bGQgYmUganVzdCB0aGUgc3RhY2tfcG9pbnRlcl9ydHg7IG1vcmUgY29tbW9uIHdvdWxkIGJlIGEgUExVUworICAgd2l0aCBhIGJhc2UgcmVnaXN0ZXIgYW5kIGEgY29uc3RhbnQgb2Zmc2V0LiAgSW4gdGhlIG1vc3QgY29tcGxpY2F0ZWQKKyAgIGNhc2VzLCB0aGlzIHdpbGwgcmVzdWx0IGluIGEgRFdfQ0ZBX2RlZl9jZmFfZXhwcmVzc2lvbiB3aXRoIHRoZSBydHgKKyAgIGV4cHJlc3Npb24gcmVuZGVyZWQgaW4gYSBkd2FyZiBsb2NhdGlvbiBleHByZXNzaW9uLiAgKi8KK1JFR19OT1RFIChDRkFfREVGX0NGQSkKKworLyogQXR0YWNoZWQgdG8gaW5zbnMgdGhhdCBhcmUgUlRYX0ZSQU1FX1JFTEFURURfUCwgYnV0IGFyZSB0b28gY29tcGxleAorICAgZm9yIEZSQU1FX1JFTEFURURfRVhQUiBpbnR1aXRpb24uICBUaGlzIG5vdGUgYWRqdXN0cyB0aGUgZXhwcmVzc2lvbgorICAgZnJvbSB3aGljaCB0aGUgQ0ZBIGlzIGNvbXB1dGVkLiAgVGhlIGF0dGFjaGVkIHJ0eCBkZWZpbmVzIGEgbmV3IENGQQorICAgZXhwcmVzc2lvbiwgcmVsYXRpdmUgdG8gdGhlIG9sZCBDRkEgZXhwcmVzc2lvbi4gIFRoaXMgcnR4IG11c3QgYmUgb2YKKyAgIHRoZSBmb3JtIChTRVQgbmV3LWNmYS1yZWcgKFBMVVMgb2xkLWNmYS1yZWcgY29uc3RfaW50KSkuICBJZiB0aGUgbm90ZQorICAgcnR4IGlzIE5VTEwsIHdlIHVzZSB0aGUgZmlyc3QgU0VUIG9mIHRoZSBpbnNuLiAgKi8KK1JFR19OT1RFIChDRkFfQURKVVNUX0NGQSkKKworLyogU2ltaWxhciB0byBGUkFNRV9SRUxBVEVEX0VYUFIsIHdpdGggdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhdAorICAgdGhpcyBpcyBhIHNhdmUgdG8gbWVtb3J5LCBpLmUuIHdpbGwgcmVzdWx0IGluIERXX0NGQV9vZmZzZXQgb3IgdGhlCisgICBsaWtlLiAgVGhlIHBhdHRlcm4gb3IgdGhlIGluc24gc2hvdWxkIGJlIGEgc2ltcGxlIHN0b3JlIHJlbGF0aXZlIHRvCisgICB0aGUgQ0ZBLiAgKi8KK1JFR19OT1RFIChDRkFfT0ZGU0VUKQorCisvKiBTaW1pbGFyIHRvIEZSQU1FX1JFTEFURURfRVhQUiwgd2l0aCB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0IHRoaXMKKyAgIGlzIGEgc2F2ZSB0byBhIHJlZ2lzdGVyLCBpLmUuIHdpbGwgcmVzdWx0IGluIERXX0NGQV9yZWdpc3Rlci4gIFRoZSBpbnNuCisgICBvciB0aGUgcGF0dGVybiBzaG91bGQgYmUgc2ltcGxlIHJlZy1yZWcgbW92ZS4gICovCitSRUdfTk9URSAoQ0ZBX1JFR0lTVEVSKQorCisvKiBBdHRhY2hlZCB0byBpbnNucyB0aGF0IGFyZSBSVFhfRlJBTUVfUkVMQVRFRF9QLCBidXQgYXJlIHRvbyBjb21wbGV4CisgICBmb3IgRlJBTUVfUkVMQVRFRF9FWFBSIGludHVpdGlvbi4gIFRoaXMgaXMgYSBzYXZlIHRvIG1lbW9yeSwgaS5lLiB3aWxsCisgICByZXN1bHQgaW4gYSBEV19DRkFfZXhwcmVzc2lvbi4gIFRoZSBwYXR0ZXJuIG9yIHRoZSBpbnNuIHNob3VsZCBiZSBhCisgICBzdG9yZSBvZiBhIHJlZ2lzdGVyIHRvIGFuIGFyYml0cmFyeSAobm9uLXZhbGlkYXRlZCkgbWVtb3J5IGFkZHJlc3MuICAqLworUkVHX05PVEUgKENGQV9FWFBSRVNTSU9OKQorCisvKiBBdHRhY2hlZCB0byBpbnNucyB0aGF0IGFyZSBSVFhfRlJBTUVfUkVMQVRFRF9QLCB3aXRoIHRoZSBpbmZvcm1hdGlvbgorICAgdGhhdCB0aGlzIGlzIGEgcmVzdG9yZSBvcGVyYXRpb24sIGkuZS4gd2lsbCByZXN1bHQgaW4gRFdfQ0ZBX3Jlc3RvcmUKKyAgIG9yIHRoZSBsaWtlLiAgRWl0aGVyIHRoZSBhdHRhY2hlZCBydHgsIG9yIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaW5zbidzCisgICBmaXJzdCBwYXR0ZXJuIGlzIHRoZSByZWdpc3RlciB0byBiZSByZXN0b3JlZC4gICovCitSRUdfTk9URSAoQ0ZBX1JFU1RPUkUpCisKKy8qIEF0dGFjaGVkIHRvIGluc25zIHRoYXQgYXJlIFJUWF9GUkFNRV9SRUxBVEVEX1AsIG1hcmtzIGluc24gdGhhdCBzZXRzCisgICB2RFJBUCBmcm9tIERSQVAuICBJZiB2RFJBUCBpcyBhIHJlZ2lzdGVyLCB2ZHJhcF9yZWcgaXMgaW5pdGFsaXplZAorICAgdG8gdGhlIGFyZ3VtZW50LCBpZiBpdCBpcyBhIE1FTSwgaXQgaXMgaWdub3JlZC4gICovCitSRUdfTk9URSAoQ0ZBX1NFVF9WRFJBUCkKKworLyogQXR0YWNoZWQgdG8gaW5zbnMgdGhhdCBhcmUgUlRYX0ZSQU1FX1JFTEFURURfUCwgaW5kaWNhdGluZyBhIHdpbmRvdworICAgc2F2ZSBvcGVyYXRpb24sIGkuZS4gd2lsbCByZXN1bHQgaW4gYSBEV19DRkFfR05VX3dpbmRvd19zYXZlLgorICAgVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuICAqLworUkVHX05PVEUgKENGQV9XSU5ET1dfU0FWRSkKKworLyogQXR0YWNoZWQgdG8gaW5zbnMgdGhhdCBhcmUgUlRYX0ZSQU1FX1JFTEFURURfUCwgbWFya3MgdGhlIGluc24gYXMKKyAgIHJlcXVpcmluZyB0aGF0IGFsbCBxdWV1ZWQgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGZsdXNoZWQgKmJlZm9yZSogaW5zbiwKKyAgIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBpcyB2aXNpYmxlIGluIHRoZSBydGwuICBUaGUgYXJndW1lbnQgaXMgaWdub3JlZC4KKyAgIFRoaXMgaXMgbm9ybWFsbHkgdXNlZCBmb3IgYSBjYWxsIGluc3RydWN0aW9uIHdoaWNoIGlzIG5vdCBleHBvc2VkIHRvCisgICB0aGUgcmVzdCBvZiB0aGUgY29tcGlsZXIgYXMgYSBDQUxMX0lOU04uICAqLworUkVHX05PVEUgKENGQV9GTFVTSF9RVUVVRSkKKworLyogSW5kaWNhdGVzIHRoYXQgUkVHIGhvbGRzIHRoZSBleGNlcHRpb24gY29udGV4dCBmb3IgdGhlIGZ1bmN0aW9uLgorICAgVGhpcyBjb250ZXh0IGlzIHNoYXJlZCBieSBpbmxpbmUgZnVuY3Rpb25zLCBzbyB0aGUgY29kZSB0byBhY3F1aXJlCisgICB0aGUgcmVhbCBleGNlcHRpb24gY29udGV4dCBpcyBkZWxheWVkIHVudGlsIGFmdGVyIGlubGluaW5nLiAgKi8KK1JFR19OT1RFIChFSF9DT05URVhUKQorCisvKiBJbmRpY2F0ZXMgd2hhdCBleGNlcHRpb24gcmVnaW9uIGFuIElOU04gYmVsb25ncyBpbi4gIFRoaXMgaXMgdXNlZAorICAgdG8gaW5kaWNhdGUgd2hhdCByZWdpb24gdG8gd2hpY2ggYSBjYWxsIG1heSB0aHJvdy4gIFJFR0lPTiAwCisgICBpbmRpY2F0ZXMgdGhhdCBhIGNhbGwgY2Fubm90IHRocm93IGF0IGFsbC4gIFJFR0lPTiAtMSBpbmRpY2F0ZXMKKyAgIHRoYXQgaXQgY2Fubm90IHRocm93LCBub3Igd2lsbCBpdCBleGVjdXRlIGEgbm9uLWxvY2FsIGdvdG8uICAqLworUkVHX05PVEUgKEVIX1JFR0lPTikKKworLyogVXNlZCBieSBoYWlmYS1zY2hlZCB0byBzYXZlIE5PVEVfSU5TTiBub3RlcyBhY3Jvc3Mgc2NoZWR1bGluZy4gICovCitSRUdfTk9URSAoU0FWRV9OT1RFKQorCisvKiBJbmRpY2F0ZXMgdGhhdCBhIGNhbGwgZG9lcyBub3QgcmV0dXJuLiAgKi8KK1JFR19OT1RFIChOT1JFVFVSTikKKworLyogSW5kaWNhdGVzIHRoYXQgYW4gaW5kaXJlY3QganVtcCBpcyBhIG5vbi1sb2NhbCBnb3RvIGluc3RlYWQgb2YgYQorICAgY29tcHV0ZWQgZ290by4gICovCitSRUdfTk9URSAoTk9OX0xPQ0FMX0dPVE8pCisKKy8qIEluZGljYXRlcyB0aGF0IGEganVtcCBjcm9zc2VzIGJldHdlZW4gaG90IGFuZCBjb2xkIHNlY3Rpb25zIGluIGEKKyAgIChwYXJ0aXRpb25lZCkgYXNzZW1ibHkgb3IgLm8gZmlsZSwgYW5kIHRoZXJlZm9yZSBzaG91bGQgbm90IGJlCisgICByZWR1Y2VkIHRvIGEgc2ltcGxlciBqdW1wIGJ5IG9wdGltaXphdGlvbnMuICAqLworUkVHX05PVEUgKENST1NTSU5HX0pVTVApCisKKy8qIFRoaXMga2luZCBvZiBub3RlIGlzIGdlbmVyYXRlZCBhdCBlYWNoIHRvIGBzZXRqbXAnLCBhbmQgc2ltaWxhcgorICAgZnVuY3Rpb25zIHRoYXQgY2FuIHJldHVybiB0d2ljZS4gICovCitSRUdfTk9URSAoU0VUSk1QKQorCisvKiBUaGlzIGtpbmQgb2Ygbm90ZSBpcyBnZW5lcmF0ZWQgYXQgZWFjaCB0cmFuc2FjdGlvbmFsIG1lbW9yeQorICAgYnVpbHRpbiwgdG8gaW5kaWNhdGUgd2UgbmVlZCB0byBnZW5lcmF0ZSB0cmFuc2FjdGlvbiByZXN0YXJ0CisgICBlZGdlcyBmb3IgdGhpcyBpbnNuLiAgKi8KK1JFR19OT1RFIChUTSkKKworLyogSW5kaWNhdGVzIHRoZSBjdW11bGF0aXZlIG9mZnNldCBvZiB0aGUgc3RhY2sgcG9pbnRlciBhY2NvdW50aW5nCisgICBmb3IgcHVzaGVkIGFyZ3VtZW50cy4gIFRoaXMgd2lsbCBvbmx5IGJlIGdlbmVyYXRlZCB3aGVuCisgICBBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MgaXMgZmFsc2UuICAqLworUkVHX05PVEUgKEFSR1NfU0laRSkKKworLyogVXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIElSQSBhbmQgY2FsbGVyLXNhdmUuYywgaW5kaWNhdGVzCisgICB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgYSBjYWxsIGNhbiBiZSB1c2VkIHRvIHJlaW5pdGlhbGl6ZSBhCisgICBwc2V1ZG8gcmVnLiAgKi8KK1JFR19OT1RFIChSRVRVUk5FRCkKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9ydGwuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3J0bC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjMmU2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9ydGwuZGVmCkBAIC0wLDAgKzEsMTI5MSBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICBSZWdpc3RlciBUcmFuc2ZlciBFeHByZXNzaW9ucyAocnR4J3MpIHRoYXQgbWFrZSB1cCB0aGUKKyAgIFJlZ2lzdGVyIFRyYW5zZmVyIExhbmd1YWdlIChydGwpIHVzZWQgaW4gdGhlIEJhY2sgRW5kIG9mIHRoZSBHTlUgY29tcGlsZXIuCisgICBDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworLyogRXhwcmVzc2lvbiBkZWZpbml0aW9ucyBhbmQgZGVzY3JpcHRpb25zIGZvciBhbGwgdGFyZ2V0cyBhcmUgaW4gdGhpcyBmaWxlLgorICAgU29tZSB3aWxsIG5vdCBiZSB1c2VkIGZvciBzb21lIHRhcmdldHMuCisKKyAgIFRoZSBmaWVsZHMgaW4gdGhlIGNwcCBtYWNybyBjYWxsICJERUZfUlRMX0VYUFIoKSIKKyAgIGFyZSB1c2VkIHRvIGNyZWF0ZSBkZWNsYXJhdGlvbnMgaW4gdGhlIEMgc291cmNlIG9mIHRoZSBjb21waWxlci4KKworICAgVGhlIGZpZWxkcyBhcmU6CisKKyAgIDEuICBUaGUgaW50ZXJuYWwgbmFtZSBvZiB0aGUgcnR4IHVzZWQgaW4gdGhlIEMgc291cmNlLgorICAgSXQgaXMgYSB0YWcgaW4gdGhlIGVudW1lcmF0aW9uICJlbnVtIHJ0eF9jb2RlIiBkZWZpbmVkIGluICJydGwuaCIuCisgICBCeSBjb252ZW50aW9uIHRoZXNlIGFyZSBpbiBVUFBFUl9DQVNFLgorCisgICAyLiAgVGhlIG5hbWUgb2YgdGhlIHJ0eCBpbiB0aGUgZXh0ZXJuYWwgQVNDSUkgZm9ybWF0IHJlYWQgYnkKKyAgIHJlYWRfcnR4KCksIGFuZCBwcmludGVkIGJ5IHByaW50X3J0eCgpLgorICAgVGhlc2UgbmFtZXMgYXJlIHN0b3JlZCBpbiBydHhfbmFtZVtdLgorICAgQnkgY29udmVudGlvbiB0aGVzZSBhcmUgdGhlIGludGVybmFsIChmaWVsZCAxKSBuYW1lcyBpbiBsb3dlcl9jYXNlLgorCisgICAzLiAgVGhlIHByaW50IGZvcm1hdCwgYW5kIHR5cGUgb2YgZWFjaCBydHgtPnUuZmxkW10gKGZpZWxkKSBpbiB0aGlzIHJ0eC4KKyAgIFRoZXNlIGZvcm1hdHMgYXJlIHN0b3JlZCBpbiBydHhfZm9ybWF0W10uCisgICBUaGUgbWVhbmluZyBvZiB0aGUgZm9ybWF0cyBpcyBkb2N1bWVudGVkIGluIGZyb250IG9mIHRoaXMgYXJyYXkgaW4gcnRsLmMKKworICAgNC4gIFRoZSBjbGFzcyBvZiB0aGUgcnR4LiAgVGhlc2UgYXJlIHN0b3JlZCBpbiBydHhfY2xhc3MgYW5kIGFyZSBhY2Nlc3NlZAorICAgdmlhIHRoZSBHRVRfUlRYX0NMQVNTIG1hY3JvLiAgVGhleSBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgorCisgICAgIFJUWF9DT05TVF9PQkoKKyAgICAgICAgIGFuIHJ0eCBjb2RlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50IGEgY29uc3RhbnQgb2JqZWN0CisgICAgICAgICAoZS5nLCBDT05TVF9JTlQpCisgICAgIFJUWF9PQkoKKyAgICAgICAgIGFuIHJ0eCBjb2RlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVwcmVzZW50IGFuIG9iamVjdCAoZS5nLCBSRUcsIE1FTSkKKyAgICAgUlRYX0NPTVBBUkUKKyAgICAgICAgIGFuIHJ0eCBjb2RlIGZvciBhIGNvbXBhcmlzb24gKGUuZywgTFQsIEdUKQorICAgICBSVFhfQ09NTV9DT01QQVJFCisgICAgICAgICBhbiBydHggY29kZSBmb3IgYSBjb21tdXRhdGl2ZSBjb21wYXJpc29uIChlLmcsIEVRLCBORSwgT1JERVJFRCkKKyAgICAgUlRYX1VOQVJZCisgICAgICAgICBhbiBydHggY29kZSBmb3IgYSB1bmFyeSBhcml0aG1ldGljIGV4cHJlc3Npb24gKGUuZywgTkVHLCBOT1QpCisgICAgIFJUWF9DT01NX0FSSVRICisgICAgICAgICBhbiBydHggY29kZSBmb3IgYSBjb21tdXRhdGl2ZSBiaW5hcnkgb3BlcmF0aW9uIChlLmcsLCBQTFVTLCBNVUxUKQorICAgICBSVFhfVEVSTkFSWQorICAgICAgICAgYW4gcnR4IGNvZGUgZm9yIGEgbm9uLWJpdGZpZWxkIHRocmVlIGlucHV0IG9wZXJhdGlvbiAoSUZfVEhFTl9FTFNFKQorICAgICBSVFhfQklOX0FSSVRICisgICAgICAgICBhbiBydHggY29kZSBmb3IgYSBub24tY29tbXV0YXRpdmUgYmluYXJ5IG9wZXJhdGlvbiAoZS5nLiwgTUlOVVMsIERJVikKKyAgICAgUlRYX0JJVEZJRUxEX09QUworICAgICAgICAgYW4gcnR4IGNvZGUgZm9yIGEgYml0LWZpZWxkIG9wZXJhdGlvbiAoWkVST19FWFRSQUNULCBTSUdOX0VYVFJBQ1QpCisgICAgIFJUWF9JTlNOCisgICAgICAgICBhbiBydHggY29kZSBmb3IgYSBtYWNoaW5lIGluc24gKElOU04sIEpVTVBfSU5TTiwgQ0FMTF9JTlNOKQorICAgICBSVFhfTUFUQ0gKKyAgICAgICAgIGFuIHJ0eCBjb2RlIGZvciBzb21ldGhpbmcgdGhhdCBtYXRjaGVzIGluIGluc25zIChlLmcsIE1BVENIX0RVUCkKKyAgICAgUlRYX0FVVE9JTkMKKyAgICAgICAgIGFuIHJ0eCBjb2RlIGZvciBhdXRvaW5jcmVtZW50IGFkZHJlc3NpbmcgbW9kZXMgKGUuZy4gUE9TVF9ERUMpCisgICAgIFJUWF9FWFRSQQorICAgICAgICAgZXZlcnl0aGluZyBlbHNlCisKKyAgIEFsbCBvZiB0aGUgZXhwcmVzc2lvbnMgdGhhdCBhcHBlYXIgb25seSBpbiBtYWNoaW5lIGRlc2NyaXB0aW9ucywKKyAgIG5vdCBpbiBSVEwgdXNlZCBieSB0aGUgY29tcGlsZXIgaXRzZWxmLCBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gICovCisKKy8qIFVua25vd24sIG9yIG5vIHN1Y2ggb3BlcmF0aW9uOyB0aGUgZW51bWVyYXRpb24gY29uc3RhbnQgc2hvdWxkIGhhdmUKKyAgIHZhbHVlIHplcm8uICAqLworREVGX1JUTF9FWFBSKFVOS05PV04sICJVbktub3duIiwgIioiLCBSVFhfRVhUUkEpCisKKy8qIFVzZWQgaW4gdGhlIGNzZWxpYiByb3V0aW5lcyB0byBkZXNjcmliZSBhIHZhbHVlLiAgT2JqZWN0cyBvZiB0aGlzCisgICBraW5kIGFyZSBvbmx5IGFsbG9jYXRlZCBpbiBjc2VsaWIuYywgaW4gYW4gYWxsb2MgcG9vbCBpbnN0ZWFkIG9mIGluCisgICBHQyBtZW1vcnkuICBUaGUgb25seSBvcGVyYW5kIG9mIGEgVkFMVUUgaXMgYSBjc2VsaWJfdmFsX3N0cnVjdC4KKyAgIHZhci10cmFja2luZyByZXF1aXJlcyB0aGlzIHRvIGhhdmUgYSBkaXN0aW5jdCBpbnRlZ3JhbCB2YWx1ZSBmcm9tCisgICBERUNMIGNvZGVzIGluIHRyZWVzLiAgKi8KK0RFRl9SVExfRVhQUihWQUxVRSwgInZhbHVlIiwgIjAiLCBSVFhfT0JKKQorCisvKiBUaGUgUlRMIGdlbmVyYXRlZCBmb3IgYSBERUJVR19FWFBSX0RFQ0wuICBJdCBsaW5rcyBiYWNrIHRvIHRoZQorICAgREVCVUdfRVhQUl9ERUNMIGluIHRoZSBmaXJzdCBvcGVyYW5kLiAgKi8KK0RFRl9SVExfRVhQUihERUJVR19FWFBSLCAiZGVidWdfZXhwciIsICIwIiwgUlRYX09CSikKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBFeHByZXNzaW9ucyB1c2VkIGluIGNvbnN0cnVjdGluZyBsaXN0cy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBhIGxpbmtlZCBsaXN0IG9mIGV4cHJlc3Npb25zICovCitERUZfUlRMX0VYUFIoRVhQUl9MSVNULCAiZXhwcl9saXN0IiwgImVlIiwgUlRYX0VYVFJBKQorCisvKiBhIGxpbmtlZCBsaXN0IG9mIGluc3RydWN0aW9ucy4KKyAgIFRoZSBpbnNucyBhcmUgcmVwcmVzZW50ZWQgaW4gcHJpbnQgYnkgdGhlaXIgdWlkcy4gICovCitERUZfUlRMX0VYUFIoSU5TTl9MSVNULCAiaW5zbl9saXN0IiwgInVlIiwgUlRYX0VYVFJBKQorCisvKiBTRVFVRU5DRSBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgYSBgZ2VuXy4uLicgZnVuY3Rpb24KKyAgIGZvciBhIERFRklORV9FWFBBTkQgdGhhdCB3YW50cyB0byBtYWtlIHNldmVyYWwgaW5zbnMuCisgICBJdHMgZWxlbWVudHMgYXJlIHRoZSBib2RpZXMgb2YgdGhlIGluc25zIHRoYXQgc2hvdWxkIGJlIG1hZGUuCisgICBgZW1pdF9pbnNuJyB0YWtlcyB0aGUgU0VRVUVOQ0UgYXBhcnQgYW5kIG1ha2VzIHNlcGFyYXRlIGluc25zLiAgKi8KK0RFRl9SVExfRVhQUihTRVFVRU5DRSwgInNlcXVlbmNlIiwgIkUiLCBSVFhfRVhUUkEpCisKKy8qIFJlcHJlc2VudHMgYSBub24tZ2xvYmFsIGJhc2UgYWRkcmVzcy4gIFRoaXMgaXMgb25seSB1c2VkIGluIGFsaWFzLmMuICAqLworREVGX1JUTF9FWFBSKEFERFJFU1MsICJhZGRyZXNzIiwgImkiLCBSVFhfRVhUUkEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEV4cHJlc3Npb24gdHlwZXMgdXNlZCBmb3IgdGhpbmdzIGluIHRoZSBpbnN0cnVjdGlvbiBjaGFpbi4KKworICAgQWxsIGZvcm1hdHMgbXVzdCBzdGFydCB3aXRoICJpdXUiIHRvIGhhbmRsZSB0aGUgY2hhaW4uCisgICBFYWNoIGluc24gZXhwcmVzc2lvbiBob2xkcyBhbiBydGwgaW5zdHJ1Y3Rpb24gYW5kIGl0cyBzZW1hbnRpY3MKKyAgIGR1cmluZyBiYWNrLWVuZCBwcm9jZXNzaW5nLgorICAgU2VlIG1hY3JvcydzIGluICJydGwuaCIgZm9yIHRoZSBtZWFuaW5nIG9mIGVhY2ggcnR4LT51LmZsZFtdLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEFuIGFubm90YXRpb24gZm9yIHZhcmlhYmxlIGFzc2lnbm1lbnQgdHJhY2tpbmcuICAqLworREVGX1JUTF9FWFBSKERFQlVHX0lOU04sICJkZWJ1Z19pbnNuIiwgIml1dUJlaWllIiwgUlRYX0lOU04pCisKKy8qIEFuIGluc3RydWN0aW9uIHRoYXQgY2Fubm90IGp1bXAuICAqLworREVGX1JUTF9FWFBSKElOU04sICJpbnNuIiwgIml1dUJlaWllIiwgUlRYX0lOU04pCisKKy8qIEFuIGluc3RydWN0aW9uIHRoYXQgY2FuIHBvc3NpYmx5IGp1bXAuCisgICBGaWVsZHMgKCBydHgtPnUuZmxkW10gKSBoYXZlIGV4YWN0IHNhbWUgbWVhbmluZyBhcyBJTlNOJ3MuICAqLworREVGX1JUTF9FWFBSKEpVTVBfSU5TTiwgImp1bXBfaW5zbiIsICJpdXVCZWlpZTAiLCBSVFhfSU5TTikKKworLyogQW4gaW5zdHJ1Y3Rpb24gdGhhdCBjYW4gcG9zc2libHkgY2FsbCBhIHN1YnJvdXRpbmUKKyAgIGJ1dCB3aGljaCB3aWxsIG5vdCBjaGFuZ2Ugd2hpY2ggaW5zdHJ1Y3Rpb24gY29tZXMgbmV4dAorICAgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisgICBGaWVsZCAoIHJ0eC0+dS5mbGRbOF0gKSBpcyBDQUxMX0lOU05fRlVOQ1RJT05fVVNBR0UuCisgICBBbGwgb3RoZXIgZmllbGRzICggcnR4LT51LmZsZFtdICkgaGF2ZSBleGFjdCBzYW1lIG1lYW5pbmcgYXMgSU5TTidzLiAgKi8KK0RFRl9SVExfRVhQUihDQUxMX0lOU04sICJjYWxsX2luc24iLCAiaXV1QmVpaWVlIiwgUlRYX0lOU04pCisKKy8qIEEgbWFya2VyIHRoYXQgaW5kaWNhdGVzIHRoYXQgY29udHJvbCB3aWxsIG5vdCBmbG93IHRocm91Z2guICAqLworREVGX1JUTF9FWFBSKEJBUlJJRVIsICJiYXJyaWVyIiwgIml1dTAwMDAwIiwgUlRYX0VYVFJBKQorCisvKiBIb2xkcyBhIGxhYmVsIHRoYXQgaXMgZm9sbG93ZWQgYnkgaW5zdHJ1Y3Rpb25zLgorICAgT3BlcmFuZDoKKyAgIDQ6IGlzIHVzZWQgaW4ganVtcC5jIGZvciB0aGUgdXNlLWNvdW50IG9mIHRoZSBsYWJlbC4KKyAgIDU6IGlzIHVzZWQgaW4gdGhlIHNoIGJhY2tlbmQuCisgICA2OiBpcyBhIG51bWJlciB0aGF0IGlzIHVuaXF1ZSBpbiB0aGUgZW50aXJlIGNvbXBpbGF0aW9uLgorICAgNzogaXMgdGhlIHVzZXItZ2l2ZW4gbmFtZSBvZiB0aGUgbGFiZWwsIGlmIGFueS4gICovCitERUZfUlRMX0VYUFIoQ09ERV9MQUJFTCwgImNvZGVfbGFiZWwiLCAiaXV1QjAwaXMiLCBSVFhfRVhUUkEpCisKKy8qIFNheSB3aGVyZSBpbiB0aGUgY29kZSBhIHNvdXJjZSBsaW5lIHN0YXJ0cywgZm9yIHN5bWJvbCB0YWJsZSdzIHNha2UuCisgICBPcGVyYW5kOgorICAgNDogbm90ZS1zcGVjaWZpYyBkYXRhCisgICA1OiBlbnVtIGluc25fbm90ZQorICAgNjogdW5pcXVlIG51bWJlciBpZiBpbnNuX25vdGUgPT0gbm90ZV9pbnNuX2RlbGV0ZWRfbGFiZWwuICAqLworREVGX1JUTF9FWFBSKE5PVEUsICJub3RlIiwgIml1dUIwbmkiLCBSVFhfRVhUUkEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRvcCBsZXZlbCBjb25zdGl0dWVudHMgb2YgSU5TTiwgSlVNUF9JTlNOIGFuZCBDQUxMX0lOU04uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENvbmRpdGlvbmFsbHkgZXhlY3V0ZSBjb2RlLgorICAgT3BlcmFuZCAwIGlzIHRoZSBjb25kaXRpb24gdGhhdCBpZiB0cnVlLCB0aGUgY29kZSBpcyBleGVjdXRlZC4KKyAgIE9wZXJhbmQgMSBpcyB0aGUgY29kZSB0byBiZSBleGVjdXRlZCAodHlwaWNhbGx5IGEgU0VUKS4KKworICAgU2VtYW50aWNzIGFyZSB0aGF0IHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgaWYgdGhlIGNvbmRpdGlvbgorICAgaXMgZmFsc2UuICBUaGlzIHBhdHRlcm4gaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBpZl9jb252ZXJ0CisgICBwYXNzIHJ1biBhZnRlciByZWxvYWQgb3IgYnkgdGFyZ2V0LXNwZWNpZmljIHNwbGl0dGVycy4gICovCitERUZfUlRMX0VYUFIoQ09ORF9FWEVDLCAiY29uZF9leGVjIiwgImVlIiwgUlRYX0VYVFJBKQorCisvKiBTZXZlcmFsIG9wZXJhdGlvbnMgdG8gYmUgZG9uZSBpbiBwYXJhbGxlbCAocGVyaGFwcyB1bmRlciBDT05EX0VYRUMpLiAgKi8KK0RFRl9SVExfRVhQUihQQVJBTExFTCwgInBhcmFsbGVsIiwgIkUiLCBSVFhfRVhUUkEpCisKKy8qIEEgc3RyaW5nIHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGFzc2VtYmxlciBhcyBpbnB1dC4KKyAgICAgT25lIGNhbiBvYnZpb3VzbHkgcGFzcyBjb21tZW50cyB0aHJvdWdoIGJ5IHVzaW5nIHRoZQorICAgICBhc3NlbWJsZXIgY29tbWVudCBzeW50YXguCisgICAgIFRoZXNlIG9jY3VyIGluIGFuIGluc24gYWxsIGJ5IHRoZW1zZWx2ZXMgYXMgdGhlIFBBVFRFUk4uCisgICAgIFRoZXkgYWxzbyBhcHBlYXIgaW5zaWRlIGFuIEFTTV9PUEVSQU5EUworICAgICBhcyBhIGNvbnZlbmllbnQgd2F5IHRvIGhvbGQgYSBzdHJpbmcuICAqLworREVGX1JUTF9FWFBSKEFTTV9JTlBVVCwgImFzbV9pbnB1dCIsICJzaSIsIFJUWF9FWFRSQSkKKworLyogQW4gYXNzZW1ibGVyIGluc3RydWN0aW9uIHdpdGggb3BlcmFuZHMuCisgICAxc3Qgb3BlcmFuZCBpcyB0aGUgaW5zdHJ1Y3Rpb24gdGVtcGxhdGUuCisgICAybmQgb3BlcmFuZCBpcyB0aGUgY29uc3RyYWludCBmb3IgdGhlIG91dHB1dC4KKyAgIDNyZCBvcGVyYW5kIGlzIHRoZSBudW1iZXIgb2YgdGhlIG91dHB1dCB0aGlzIGV4cHJlc3Npb24gcmVmZXJzIHRvLgorICAgICBXaGVuIGFuIGluc24gc3RvcmVzIG1vcmUgdGhhbiBvbmUgdmFsdWUsIGEgc2VwYXJhdGUgQVNNX09QRVJBTkRTCisgICAgIGlzIG1hZGUgZm9yIGVhY2ggb3V0cHV0OyB0aGlzIGludGVnZXIgZGlzdGluZ3Vpc2hlcyB0aGVtLgorICAgNHRoIGlzIGEgdmVjdG9yIG9mIHZhbHVlcyBvZiBpbnB1dCBvcGVyYW5kcy4KKyAgIDV0aCBpcyBhIHZlY3RvciBvZiBtb2RlcyBhbmQgY29uc3RyYWludHMgZm9yIHRoZSBpbnB1dCBvcGVyYW5kcy4KKyAgICAgRWFjaCBlbGVtZW50IGlzIGFuIEFTTV9JTlBVVCBjb250YWluaW5nIGEgY29uc3RyYWludCBzdHJpbmcKKyAgICAgYW5kIHdob3NlIG1vZGUgaW5kaWNhdGVzIHRoZSBtb2RlIG9mIHRoZSBpbnB1dCBvcGVyYW5kLgorICAgNnRoIGlzIGEgdmVjdG9yIG9mIGxhYmVscyB0aGF0IG1heSBiZSBicmFuY2hlZCB0byBieSB0aGUgYXNtLgorICAgN3RoIGlzIHRoZSBzb3VyY2UgbGluZSBudW1iZXIuICAqLworREVGX1JUTF9FWFBSKEFTTV9PUEVSQU5EUywgImFzbV9vcGVyYW5kcyIsICJzc2lFRUVpIiwgUlRYX0VYVFJBKQorCisvKiBBIG1hY2hpbmUtc3BlY2lmaWMgb3BlcmF0aW9uLgorICAgMXN0IG9wZXJhbmQgaXMgYSB2ZWN0b3Igb2Ygb3BlcmFuZHMgYmVpbmcgdXNlZCBieSB0aGUgb3BlcmF0aW9uIHNvIHRoYXQKKyAgICAgYW55IG5lZWRlZCByZWxvYWRzIGNhbiBiZSBkb25lLgorICAgMm5kIG9wZXJhbmQgaXMgYSB1bmlxdWUgdmFsdWUgc2F5aW5nIHdoaWNoIG9mIGEgbnVtYmVyIG9mIG1hY2hpbmUtc3BlY2lmaWMKKyAgICAgb3BlcmF0aW9ucyBpcyB0byBiZSBwZXJmb3JtZWQuCisgICAoTm90ZSB0aGF0IHRoZSB2ZWN0b3IgbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhhdAorICAgZ2VucmVjb2cuYyByZWNvcmQgcG9zaXRpb25zIHdpdGhpbiBhbiBpbnNuLikKKworICAgVU5TUEVDIGNhbiBvY2N1ciBhbGwgYnkgaXRzZWxmIGluIGEgUEFUVEVSTiwgYXMgYSBjb21wb25lbnQgb2YgYSBQQVJBTExFTCwKKyAgIG9yIGluc2lkZSBhbiBleHByZXNzaW9uLgorICAgVU5TUEVDIGJ5IGl0c2VsZiBvciBhcyBhIGNvbXBvbmVudCBvZiBhIFBBUkFMTEVMCisgICBpcyBjdXJyZW50bHkgY29uc2lkZXJlZCBub3QgZGVsZXRhYmxlLgorCisgICBGSVhNRTogUmVwbGFjZSBhbGwgdXNlcyBvZiBVTlNQRUMgdGhhdCBhcHBlYXJzIGJ5IGl0c2VsZiBvciBhcyBhIGNvbXBvbmVudAorICAgb2YgYSBQQVJBTExFTCB3aXRoIFVTRS4KKyAgICovCitERUZfUlRMX0VYUFIoVU5TUEVDLCAidW5zcGVjIiwgIkVpIiwgUlRYX0VYVFJBKQorCisvKiBTaW1pbGFyLCBidXQgYSB2b2xhdGlsZSBvcGVyYXRpb24gYW5kIG9uZSB3aGljaCBtYXkgdHJhcC4gICovCitERUZfUlRMX0VYUFIoVU5TUEVDX1ZPTEFUSUxFLCAidW5zcGVjX3ZvbGF0aWxlIiwgIkVpIiwgUlRYX0VYVFJBKQorCisvKiBWZWN0b3Igb2YgYWRkcmVzc2VzLCBzdG9yZWQgYXMgZnVsbCB3b3Jkcy4gICovCisvKiBFYWNoIGVsZW1lbnQgaXMgYSBMQUJFTF9SRUYgdG8gYSBDT0RFX0xBQkVMIHdob3NlIGFkZHJlc3Mgd2Ugd2FudC4gICovCitERUZfUlRMX0VYUFIoQUREUl9WRUMsICJhZGRyX3ZlYyIsICJFIiwgUlRYX0VYVFJBKQorCisvKiBWZWN0b3Igb2YgYWRkcmVzcyBkaWZmZXJlbmNlcyBYMCAtIEJBU0UsIFgxIC0gQkFTRSwgLi4uCisgICBGaXJzdCBvcGVyYW5kIGlzIEJBU0U7IHRoZSB2ZWN0b3IgY29udGFpbnMgdGhlIFgncy4KKyAgIFRoZSBtYWNoaW5lIG1vZGUgb2YgdGhpcyBydHggc2F5cyBob3cgbXVjaCBzcGFjZSB0byBsZWF2ZQorICAgZm9yIGVhY2ggZGlmZmVyZW5jZSBhbmQgaXMgYWRqdXN0ZWQgYnkgYnJhbmNoIHNob3J0ZW5pbmcgaWYKKyAgIENBU0VfVkVDVE9SX1NIT1JURU5fTU9ERSBpcyBkZWZpbmVkLgorICAgVGhlIHRoaXJkIGFuZCBmb3VydGggb3BlcmFuZHMgc3RvcmUgdGhlIHRhcmdldCBsYWJlbHMgd2l0aCB0aGUKKyAgIG1pbmltdW0gYW5kIG1heGltdW0gYWRkcmVzc2VzIHJlc3BlY3RpdmVseS4KKyAgIFRoZSBmaWZ0aCBvcGVyYW5kIHN0b3JlcyBmbGFncyBmb3IgdXNlIGJ5IGJyYW5jaCBzaG9ydGVuaW5nLgorICBTZXQgYXQgdGhlIHN0YXJ0IG9mIHNob3J0ZW5fYnJhbmNoZXM6CisgICBtaW5fYWxpZ246IHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgYW55IG9mIHRoZSB0YXJnZXQgbGFiZWxzLgorICAgYmFzZV9hZnRlcl92ZWM6IHRydWUgaWZmIEJBU0UgaXMgYWZ0ZXIgdGhlIEFERFJfRElGRl9WRUMuCisgICBtaW5fYWZ0ZXJfdmVjOiB0cnVlIGlmZiBtaW5pbXVtIGFkZHIgdGFyZ2V0IGxhYmVsIGlzIGFmdGVyIHRoZSBBRERSX0RJRkZfVkVDLgorICAgbWF4X2FmdGVyX3ZlYzogdHJ1ZSBpZmYgbWF4aW11bSBhZGRyIHRhcmdldCBsYWJlbCBpcyBhZnRlciB0aGUgQUREUl9ESUZGX1ZFQy4KKyAgIG1pbl9hZnRlcl9iYXNlOiB0cnVlIGlmZiBtaW5pbXVtIGFkZHJlc3MgdGFyZ2V0IGxhYmVsIGlzIGFmdGVyIEJBU0UuCisgICBtYXhfYWZ0ZXJfYmFzZTogdHJ1ZSBpZmYgbWF4aW11bSBhZGRyZXNzIHRhcmdldCBsYWJlbCBpcyBhZnRlciBCQVNFLgorICBTZXQgYnkgdGhlIGFjdHVhbCBicmFuY2ggc2hvcnRlbmluZyBwcm9jZXNzOgorICAgb2Zmc2V0X3Vuc2lnbmVkOiB0cnVlIGlmZiBvZmZzZXRzIGhhdmUgdG8gYmUgdHJlYXRlZCBhcyB1bnNpZ25lZC4KKyAgIHNjYWxlOiBzY2FsaW5nIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2Ugb2Zmc2V0cyBmaXQgaW50byB0aGUgbW9kZS4KKworICAgVGhlIHRoaXJkLCBmb3VydGggYW5kIGZpZnRoIG9wZXJhbmRzIGFyZSBvbmx5IHZhbGlkIHdoZW4KKyAgIENBU0VfVkVDVE9SX1NIT1JURU5fTU9ERSBpcyBkZWZpbmVkLCBhbmQgb25seSBpbiBhbiBvcHRpbWl6aW5nCisgICBjb21waWxhdGlvbi4gICovCisKK0RFRl9SVExfRVhQUihBRERSX0RJRkZfVkVDLCAiYWRkcl9kaWZmX3ZlYyIsICJlRWVlMCIsIFJUWF9FWFRSQSkKKworLyogTWVtb3J5IHByZWZldGNoLCB3aXRoIGF0dHJpYnV0ZXMgc3VwcG9ydGVkIG9uIHNvbWUgdGFyZ2V0cy4KKyAgIE9wZXJhbmQgMSBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHRvIGZldGNoLgorICAgT3BlcmFuZCAyIGlzIDEgZm9yIGEgd3JpdGUgYWNjZXNzLCAwIG90aGVyd2lzZS4KKyAgIE9wZXJhbmQgMyBpcyB0aGUgbGV2ZWwgb2YgdGVtcG9yYWwgbG9jYWxpdHk7IDAgbWVhbnMgdGhlcmUgaXMgbm8KKyAgIHRlbXBvcmFsIGxvY2FsaXR5IGFuZCAxLCAyLCBhbmQgMyBhcmUgZm9yIGluY3JlYXNpbmcgbGV2ZWxzIG9mIHRlbXBvcmFsCisgICBsb2NhbGl0eS4KKworICAgVGhlIGF0dHJpYnV0ZXMgc3BlY2lmaWVkIGJ5IG9wZXJhbmRzIDIgYW5kIDMgYXJlIGlnbm9yZWQgZm9yIHRhcmdldHMKKyAgIHdob3NlIHByZWZldGNoIGluc3RydWN0aW9ucyBkbyBub3Qgc3VwcG9ydCB0aGVtLiAgKi8KK0RFRl9SVExfRVhQUihQUkVGRVRDSCwgInByZWZldGNoIiwgImVlZSIsIFJUWF9FWFRSQSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQXQgdGhlIHRvcCBsZXZlbCBvZiBhbiBpbnN0cnVjdGlvbiAocGVyaGFwcyB1bmRlciBQQVJBTExFTCkuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEFzc2lnbm1lbnQuCisgICBPcGVyYW5kIDEgaXMgdGhlIGxvY2F0aW9uIChSRUcsIE1FTSwgUEMsIENDMCBvciB3aGF0ZXZlcikgYXNzaWduZWQgdG8uCisgICBPcGVyYW5kIDIgaXMgdGhlIHZhbHVlIHN0b3JlZCB0aGVyZS4KKyAgIEFMTCBhc3NpZ25tZW50IG11c3QgdXNlIFNFVC4KKyAgIEluc3RydWN0aW9ucyB0aGF0IGRvIG11bHRpcGxlIGFzc2lnbm1lbnRzIG11c3QgdXNlIG11bHRpcGxlIFNFVCwKKyAgIHVuZGVyIFBBUkFMTEVMLiAgKi8KK0RFRl9SVExfRVhQUihTRVQsICJzZXQiLCAiZWUiLCBSVFhfRVhUUkEpCisKKy8qIEluZGljYXRlIHNvbWV0aGluZyBpcyB1c2VkIGluIGEgd2F5IHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBleHBsYWluLgorICAgRm9yIGV4YW1wbGUsIHN1YnJvdXRpbmUgY2FsbHMgd2lsbCB1c2UgdGhlIHJlZ2lzdGVyCisgICBpbiB3aGljaCB0aGUgc3RhdGljIGNoYWluIGlzIHBhc3NlZC4KKworICAgVVNFIGNhbiBub3QgYXBwZWFyIGFzIGFuIG9wZXJhbmQgb2Ygb3RoZXIgcnR4IGV4Y2VwdCBmb3IgUEFSQUxMRUwuCisgICBVU0UgaXMgbm90IGRlbGV0YWJsZSwgYXMgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIG9wZXJhbmQKKyAgIGlzIHVzZWQgaW4gc29tZSB1bmtub3duIHdheS4gICovCitERUZfUlRMX0VYUFIoVVNFLCAidXNlIiwgImUiLCBSVFhfRVhUUkEpCisKKy8qIEluZGljYXRlIHNvbWV0aGluZyBpcyBjbG9iYmVyZWQgaW4gYSB3YXkgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGV4cGxhaW4uCisgICBGb3IgZXhhbXBsZSwgc3Vicm91dGluZSBjYWxscyB3aWxsIGNsb2JiZXIgc29tZSBwaHlzaWNhbCByZWdpc3RlcnMKKyAgICh0aGUgb25lcyB0aGF0IGFyZSBieSBjb252ZW50aW9uIG5vdCBzYXZlZCkuCisKKyAgIENMT0JCRVIgY2FuIG5vdCBhcHBlYXIgYXMgYW4gb3BlcmFuZCBvZiBvdGhlciBydHggZXhjZXB0IGZvciBQQVJBTExFTC4KKyAgIENMT0JCRVIgb2YgYSBoYXJkIHJlZ2lzdGVyIGFwcGVhcmluZyBieSBpdHNlbGYgKG5vdCB3aXRoaW4gUEFSQUxMRUwpCisgICBpcyBjb25zaWRlcmVkIHVuZGVsZXRhYmxlIGJlZm9yZSByZWxvYWQuICAqLworREVGX1JUTF9FWFBSKENMT0JCRVIsICJjbG9iYmVyIiwgImUiLCBSVFhfRVhUUkEpCisKKy8qIENhbGwgYSBzdWJyb3V0aW5lLgorICAgT3BlcmFuZCAxIGlzIHRoZSBhZGRyZXNzIHRvIGNhbGwuCisgICBPcGVyYW5kIDIgaXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuICAqLworCitERUZfUlRMX0VYUFIoQ0FMTCwgImNhbGwiLCAiZWUiLCBSVFhfRVhUUkEpCisKKy8qIFJldHVybiBmcm9tIGEgc3Vicm91dGluZS4gICovCisKK0RFRl9SVExfRVhQUihSRVRVUk4sICJyZXR1cm4iLCAiIiwgUlRYX0VYVFJBKQorCisvKiBMaWtlIFJFVFVSTiwgYnV0IHRydWx5IHJlcHJlc2VudHMgb25seSBhIGZ1bmN0aW9uIHJldHVybiwgd2hpbGUKKyAgIFJFVFVSTiBtYXkgcmVwcmVzZW50IGFuIGluc24gdGhhdCBhbHNvIHBlcmZvcm1zIG90aGVyIGZ1bmN0aW9ucworICAgb2YgdGhlIGZ1bmN0aW9uIGVwaWxvZ3VlLiAgTGlrZSBSRVRVUk4sIHRoaXMgbWF5IGFsc28gb2NjdXIgaW4KKyAgIGNvbmRpdGlvbmFsIGp1bXBzLiAgKi8KK0RFRl9SVExfRVhQUihTSU1QTEVfUkVUVVJOLCAic2ltcGxlX3JldHVybiIsICIiLCBSVFhfRVhUUkEpCisKKy8qIFNwZWNpYWwgZm9yIEVIIHJldHVybiBmcm9tIHN1YnJvdXRpbmUuICAqLworCitERUZfUlRMX0VYUFIoRUhfUkVUVVJOLCAiZWhfcmV0dXJuIiwgIiIsIFJUWF9FWFRSQSkKKworLyogQ29uZGl0aW9uYWwgdHJhcC4KKyAgIE9wZXJhbmQgMSBpcyB0aGUgY29uZGl0aW9uLgorICAgT3BlcmFuZCAyIGlzIHRoZSB0cmFwIGNvZGUuCisgICBGb3IgYW4gdW5jb25kaXRpb25hbCB0cmFwLCBtYWtlIHRoZSBjb25kaXRpb24gKGNvbnN0X2ludCAxKS4gICovCitERUZfUlRMX0VYUFIoVFJBUF9JRiwgInRyYXBfaWYiLCAiZWUiLCBSVFhfRVhUUkEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFByaW1pdGl2ZSB2YWx1ZXMgZm9yIHVzZSBpbiBleHByZXNzaW9ucy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogbnVtZXJpYyBpbnRlZ2VyIGNvbnN0YW50ICovCitERUZfUlRMX0VYUFIoQ09OU1RfSU5ULCAiY29uc3RfaW50IiwgInciLCBSVFhfQ09OU1RfT0JKKQorCisvKiBmaXhlZC1wb2ludCBjb25zdGFudCAqLworREVGX1JUTF9FWFBSKENPTlNUX0ZJWEVELCAiY29uc3RfZml4ZWQiLCAid3d3IiwgUlRYX0NPTlNUX09CSikKKworLyogbnVtZXJpYyBmbG9hdGluZyBwb2ludCBvciBpbnRlZ2VyIGNvbnN0YW50LiAgSWYgdGhlIG1vZGUgaXMKKyAgIFZPSURtb2RlIGl0IGlzIGFuIGludCBvdGhlcndpc2UgaXQgaGFzIGEgZmxvYXRpbmcgcG9pbnQgbW9kZSBhbmQgYQorICAgZmxvYXRpbmcgcG9pbnQgdmFsdWUuICBPcGVyYW5kcyBob2xkIHRoZSB2YWx1ZS4gIFRoZXkgYXJlIGFsbCAndycKKyAgIGFuZCB0aGVyZSBtYXkgYmUgZnJvbSAyIHRvIDY7IHNlZSByZWFsLmguICAqLworREVGX1JUTF9FWFBSKENPTlNUX0RPVUJMRSwgImNvbnN0X2RvdWJsZSIsIENPTlNUX0RPVUJMRV9GT1JNQVQsIFJUWF9DT05TVF9PQkopCisKKy8qIERlc2NyaWJlcyBhIHZlY3RvciBjb25zdGFudC4gICovCitERUZfUlRMX0VYUFIoQ09OU1RfVkVDVE9SLCAiY29uc3RfdmVjdG9yIiwgIkUiLCBSVFhfQ09OU1RfT0JKKQorCisvKiBTdHJpbmcgY29uc3RhbnQuICBVc2VkIGZvciBhdHRyaWJ1dGVzIGluIG1hY2hpbmUgZGVzY3JpcHRpb25zIGFuZAorICAgZm9yIHNwZWNpYWwgY2FzZXMgaW4gRFdBUkYyIGRlYnVnIG91dHB1dC4gIE5PVCB1c2VkIGZvciBzb3VyY2UtCisgICBsYW5ndWFnZSBzdHJpbmcgY29uc3RhbnRzLiAgKi8KK0RFRl9SVExfRVhQUihDT05TVF9TVFJJTkcsICJjb25zdF9zdHJpbmciLCAicyIsIFJUWF9PQkopCisKKy8qIFRoaXMgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSBhbiBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIGNvbnN0YW50CisgICAoc3VjaCBhcyB0aGUgc3VtIG9mIGEgU1lNQk9MX1JFRiBhbmQgYSBDT05TVF9JTlQpIHNvIHRoYXQgaXQgd2lsbCBiZQorICAgcmVjb2duaXplZCBhcyBhIGNvbnN0YW50IG9wZXJhbmQgcmF0aGVyIHRoYW4gYnkgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMuICAqLworCitERUZfUlRMX0VYUFIoQ09OU1QsICJjb25zdCIsICJlIiwgUlRYX0NPTlNUX09CSikKKworLyogcHJvZ3JhbSBjb3VudGVyLiAgT3JkaW5hcnkganVtcHMgYXJlIHJlcHJlc2VudGVkCisgICBieSBhIFNFVCB3aG9zZSBmaXJzdCBvcGVyYW5kIGlzIChQQykuICAqLworREVGX1JUTF9FWFBSKFBDLCAicGMiLCAiIiwgUlRYX09CSikKKworLyogQSByZWdpc3Rlci4gIFRoZSAib3BlcmFuZCIgaXMgdGhlIHJlZ2lzdGVyIG51bWJlciwgYWNjZXNzZWQgd2l0aAorICAgdGhlIFJFR05PIG1hY3JvLiAgSWYgdGhpcyBudW1iZXIgaXMgbGVzcyB0aGFuIEZJUlNUX1BTRVVET19SRUdJU1RFUgorICAgdGhhbiBhIGhhcmR3YXJlIHJlZ2lzdGVyIGlzIGJlaW5nIHJlZmVycmVkIHRvLiAgVGhlIHNlY29uZCBvcGVyYW5kCisgICBob2xkcyB0aGUgb3JpZ2luYWwgcmVnaXN0ZXIgbnVtYmVyIC0gdGhpcyB3aWxsIGJlIGRpZmZlcmVudCBmb3IgYQorICAgcHNldWRvIHJlZ2lzdGVyIHRoYXQgZ290IHR1cm5lZCBpbnRvIGEgaGFyZCByZWdpc3Rlci4gIFRoZSB0aGlyZAorICAgb3BlcmFuZCBwb2ludHMgdG8gYSByZWdfYXR0cnMgc3RydWN0dXJlLgorICAgVGhpcyBydHggbmVlZHMgdG8gaGF2ZSBhcyBtYW55IChvciBtb3JlKSBmaWVsZHMgYXMgYSBNRU0sIHNpbmNlIHdlCisgICBjYW4gY2hhbmdlIFJFRyBydHgncyBpbnRvIE1FTXMgZHVyaW5nIHJlbG9hZC4gICovCitERUZfUlRMX0VYUFIoUkVHLCAicmVnIiwgImkwMCIsIFJUWF9PQkopCisKKy8qIEEgc2NyYXRjaCByZWdpc3Rlci4gIFRoaXMgcmVwcmVzZW50cyBhIHJlZ2lzdGVyIHVzZWQgb25seSB3aXRoaW4gYQorICAgc2luZ2xlIGluc24uICBJdCB3aWxsIGJlIHR1cm5lZCBpbnRvIGEgUkVHIGR1cmluZyByZWdpc3RlciBhbGxvY2F0aW9uCisgICBvciByZWxvYWQgdW5sZXNzIHRoZSBjb25zdHJhaW50IGluZGljYXRlcyB0aGF0IHRoZSByZWdpc3RlciB3b24ndCBiZQorICAgbmVlZGVkLCBpbiB3aGljaCBjYXNlIGl0IGNhbiByZW1haW4gYSBTQ1JBVENILiAgVGhpcyBjb2RlIGlzCisgICBtYXJrZWQgYXMgaGF2aW5nIG9uZSBvcGVyYW5kIHNvIGl0IGNhbiBiZSB0dXJuZWQgaW50byBhIFJFRy4gICovCitERUZfUlRMX0VYUFIoU0NSQVRDSCwgInNjcmF0Y2giLCAiMCIsIFJUWF9PQkopCisKKy8qIEEgcmVmZXJlbmNlIHRvIGEgcGFydCBvZiBhbm90aGVyIHZhbHVlLiAgVGhlIGZpcnN0IG9wZXJhbmQgaXMgdGhlCisgICBjb21wbGV0ZSB2YWx1ZSBhbmQgdGhlIHNlY29uZCBpcyB0aGUgYnl0ZSBvZmZzZXQgb2YgdGhlIHNlbGVjdGVkIHBhcnQuICAgKi8KK0RFRl9SVExfRVhQUihTVUJSRUcsICJzdWJyZWciLCAiZWkiLCBSVFhfRVhUUkEpCisKKy8qIFRoaXMgb25lLWFyZ3VtZW50IHJ0eCBpcyB1c2VkIGZvciBtb3ZlIGluc3RydWN0aW9ucworICAgdGhhdCBhcmUgZ3VhcmFudGVlZCB0byBhbHRlciBvbmx5IHRoZSBsb3cgcGFydCBvZiBhIGRlc3RpbmF0aW9uLgorICAgVGh1cywgKFNFVCAoU1VCUkVHOkhJIChSRUcuLi4pKSAoTUVNOkhJIC4uLikpCisgICBoYXMgYW4gdW5zcGVjaWZpZWQgZWZmZWN0IG9uIHRoZSBoaWdoIHBhcnQgb2YgUkVHLAorICAgYnV0IChTRVQgKFNUUklDVF9MT1dfUEFSVCAoU1VCUkVHOkhJIChSRUcuLi4pKSkgKE1FTTpISSAuLi4pKQorICAgaXMgZ3VhcmFudGVlZCB0byBhbHRlciBvbmx5IHRoZSBiaXRzIG9mIFJFRyB0aGF0IGFyZSBpbiBISW1vZGUuCisKKyAgIFRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gdXNlZCBpcyBwcm9iYWJseSB0aGUgc2FtZSBpbiBib3RoIGNhc2VzLAorICAgYnV0IHRoZSByZWdpc3RlciBjb25zdHJhaW50cyBtYXkgYmUgdGlnaHRlciB3aGVuIFNUUklDVF9MT1dfUEFSVAorICAgaXMgaW4gdXNlLiAgKi8KKworREVGX1JUTF9FWFBSKFNUUklDVF9MT1dfUEFSVCwgInN0cmljdF9sb3dfcGFydCIsICJlIiwgUlRYX0VYVFJBKQorCisvKiAoQ09OQ0FUIGEgYikgcmVwcmVzZW50cyB0aGUgdmlydHVhbCBjb25jYXRlbmF0aW9uIG9mIGEgYW5kIGIKKyAgIHRvIG1ha2UgYSB2YWx1ZSB0aGF0IGhhcyBhcyBtYW55IGJpdHMgYXMgYSBhbmQgYiBwdXQgdG9nZXRoZXIuCisgICBUaGlzIGlzIHVzZWQgZm9yIGNvbXBsZXggdmFsdWVzLiAgTm9ybWFsbHkgaXQgYXBwZWFycyBvbmx5CisgICBpbiBERUNMX1JUTHMgYW5kIGR1cmluZyBSVEwgZ2VuZXJhdGlvbiwgYnV0IG5vdCBpbiB0aGUgaW5zbiBjaGFpbi4gICovCitERUZfUlRMX0VYUFIoQ09OQ0FULCAiY29uY2F0IiwgImVlIiwgUlRYX09CSikKKworLyogKENPTkNBVE4gW2ExIGEyIC4uLiBhbl0pIHJlcHJlc2VudHMgdGhlIHZpcnR1YWwgY29uY2F0ZW5hdGlvbiBvZgorICAgYWxsIEFuIHRvIG1ha2UgYSB2YWx1ZS4gIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9mIENPTkNBVCB0byBsYXJnZXIKKyAgIG51bWJlciBvZiBjb21wb25lbnRzLiAgTGlrZSBDT05DQVQsIGl0IHNob3VsZCBub3QgYXBwZWFyIGluIHRoZQorICAgaW5zbiBjaGFpbi4gIEV2ZXJ5IGVsZW1lbnQgb2YgdGhlIENPTkNBVE4gaXMgdGhlIHNhbWUgc2l6ZS4gICovCitERUZfUlRMX0VYUFIoQ09OQ0FUTiwgImNvbmNhdG4iLCAiRSIsIFJUWF9PQkopCisKKy8qIEEgbWVtb3J5IGxvY2F0aW9uOyBvcGVyYW5kIGlzIHRoZSBhZGRyZXNzLiAgVGhlIHNlY29uZCBvcGVyYW5kIGlzIHRoZQorICAgYWxpYXMgc2V0IHRvIHdoaWNoIHRoaXMgTUVNIGJlbG9uZ3MuICBXZSB1c2UgYDAnIGluc3RlYWQgb2YgYHcnIGZvciB0aGlzCisgICBmaWVsZCBzbyB0aGF0IHRoZSBmaWVsZCBuZWVkIG5vdCBiZSBzcGVjaWZpZWQgaW4gbWFjaGluZSBkZXNjcmlwdGlvbnMuICAqLworREVGX1JUTF9FWFBSKE1FTSwgIm1lbSIsICJlMCIsIFJUWF9PQkopCisKKy8qIFJlZmVyZW5jZSB0byBhbiBhc3NlbWJsZXIgbGFiZWwgaW4gdGhlIGNvZGUgZm9yIHRoaXMgZnVuY3Rpb24uCisgICBUaGUgb3BlcmFuZCBpcyBhIENPREVfTEFCRUwgZm91bmQgaW4gdGhlIGluc24gY2hhaW4uICAqLworREVGX1JUTF9FWFBSKExBQkVMX1JFRiwgImxhYmVsX3JlZiIsICJ1IiwgUlRYX0NPTlNUX09CSikKKworLyogUmVmZXJlbmNlIHRvIGEgbmFtZWQgbGFiZWw6CisgICBPcGVyYW5kIDA6IGxhYmVsIG5hbWUKKyAgIE9wZXJhbmQgMTogZmxhZ3MgKHNlZSBTWU1CT0xfRkxBR18qIGluIHJ0bC5oKQorICAgT3BlcmFuZCAyOiB0cmVlIGZyb20gd2hpY2ggdGhpcyBzeW1ib2wgaXMgZGVyaXZlZCwgb3IgbnVsbC4KKyAgIFRoaXMgaXMgZWl0aGVyIGEgREVDTCBub2RlLCBvciBzb21lIGtpbmQgb2YgY29uc3RhbnQuICAqLworREVGX1JUTF9FWFBSKFNZTUJPTF9SRUYsICJzeW1ib2xfcmVmIiwgInMwMCIsIFJUWF9DT05TVF9PQkopCisKKy8qIFRoZSBjb25kaXRpb24gY29kZSByZWdpc3RlciBpcyByZXByZXNlbnRlZCwgaW4gb3VyIGltYWdpbmF0aW9uLAorICAgYXMgYSByZWdpc3RlciBob2xkaW5nIGEgdmFsdWUgdGhhdCBjYW4gYmUgY29tcGFyZWQgdG8gemVyby4KKyAgIEluIGZhY3QsIHRoZSBtYWNoaW5lIGhhcyBhbHJlYWR5IGNvbXBhcmVkIHRoZW0gYW5kIHJlY29yZGVkIHRoZQorICAgcmVzdWx0czsgYnV0IGluc3RydWN0aW9ucyB0aGF0IGxvb2sgYXQgdGhlIGNvbmRpdGlvbiBjb2RlCisgICBwcmV0ZW5kIHRvIGJlIGxvb2tpbmcgYXQgdGhlIGVudGlyZSB2YWx1ZSBhbmQgY29tcGFyaW5nIGl0LiAgKi8KK0RFRl9SVExfRVhQUihDQzAsICJjYzAiLCAiIiwgUlRYX09CSikKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgRXhwcmVzc2lvbnMgZm9yIG9wZXJhdG9ycyBpbiBhbiBydGwgcGF0dGVybgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBpZl90aGVuX2Vsc2UuICBUaGlzIGlzIHVzZWQgaW4gcmVwcmVzZW50aW5nIG9yZGluYXJ5CisgICBjb25kaXRpb25hbCBqdW1wIGluc3RydWN0aW9ucy4KKyAgICAgT3BlcmFuZDoKKyAgICAgMDogIGNvbmRpdGlvbgorICAgICAxOiAgdGhlbiBleHByCisgICAgIDI6ICBlbHNlIGV4cHIgKi8KK0RFRl9SVExfRVhQUihJRl9USEVOX0VMU0UsICJpZl90aGVuX2Vsc2UiLCAiZWVlIiwgUlRYX1RFUk5BUlkpCisKKy8qIENvbXBhcmlzb24sIHByb2R1Y2VzIGEgY29uZGl0aW9uIGNvZGUgcmVzdWx0LiAgKi8KK0RFRl9SVExfRVhQUihDT01QQVJFLCAiY29tcGFyZSIsICJlZSIsIFJUWF9CSU5fQVJJVEgpCisKKy8qIHBsdXMgKi8KK0RFRl9SVExfRVhQUihQTFVTLCAicGx1cyIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorCisvKiBPcGVyYW5kIDAgbWludXMgb3BlcmFuZCAxLiAgKi8KK0RFRl9SVExfRVhQUihNSU5VUywgIm1pbnVzIiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogTWludXMgb3BlcmFuZCAwLiAgKi8KK0RFRl9SVExfRVhQUihORUcsICJuZWciLCAiZSIsIFJUWF9VTkFSWSkKKworREVGX1JUTF9FWFBSKE1VTFQsICJtdWx0IiwgImVlIiwgUlRYX0NPTU1fQVJJVEgpCisKKy8qIE11bHRpcGxpY2F0aW9uIHdpdGggc2lnbmVkIHNhdHVyYXRpb24gKi8KK0RFRl9SVExfRVhQUihTU19NVUxULCAic3NfbXVsdCIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorLyogTXVsdGlwbGljYXRpb24gd2l0aCB1bnNpZ25lZCBzYXR1cmF0aW9uICovCitERUZfUlRMX0VYUFIoVVNfTVVMVCwgInVzX211bHQiLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKKworLyogT3BlcmFuZCAwIGRpdmlkZWQgYnkgb3BlcmFuZCAxLiAgKi8KK0RFRl9SVExfRVhQUihESVYsICJkaXYiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorLyogRGl2aXNpb24gd2l0aCBzaWduZWQgc2F0dXJhdGlvbiAqLworREVGX1JUTF9FWFBSKFNTX0RJViwgInNzX2RpdiIsICJlZSIsIFJUWF9CSU5fQVJJVEgpCisvKiBEaXZpc2lvbiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb24gKi8KK0RFRl9SVExfRVhQUihVU19ESVYsICJ1c19kaXYiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorCisvKiBSZW1haW5kZXIgb2Ygb3BlcmFuZCAwIGRpdmlkZWQgYnkgb3BlcmFuZCAxLiAgKi8KK0RFRl9SVExfRVhQUihNT0QsICJtb2QiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorCisvKiBVbnNpZ25lZCBkaXZpZGUgYW5kIHJlbWFpbmRlci4gICovCitERUZfUlRMX0VYUFIoVURJViwgInVkaXYiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorREVGX1JUTF9FWFBSKFVNT0QsICJ1bW9kIiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogQml0d2lzZSBvcGVyYXRpb25zLiAgKi8KK0RFRl9SVExfRVhQUihBTkQsICJhbmQiLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKK0RFRl9SVExfRVhQUihJT1IsICJpb3IiLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKK0RFRl9SVExfRVhQUihYT1IsICJ4b3IiLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKK0RFRl9SVExfRVhQUihOT1QsICJub3QiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogT3BlcmFuZDoKKyAgICAgMDogIHZhbHVlIHRvIGJlIHNoaWZ0ZWQuCisgICAgIDE6ICBudW1iZXIgb2YgYml0cy4gICovCitERUZfUlRMX0VYUFIoQVNISUZULCAiYXNoaWZ0IiwgImVlIiwgUlRYX0JJTl9BUklUSCkgLyogc2hpZnQgbGVmdCAqLworREVGX1JUTF9FWFBSKFJPVEFURSwgInJvdGF0ZSIsICJlZSIsIFJUWF9CSU5fQVJJVEgpIC8qIHJvdGF0ZSBsZWZ0ICovCitERUZfUlRMX0VYUFIoQVNISUZUUlQsICJhc2hpZnRydCIsICJlZSIsIFJUWF9CSU5fQVJJVEgpIC8qIGFyaXRobWV0aWMgc2hpZnQgcmlnaHQgKi8KK0RFRl9SVExfRVhQUihMU0hJRlRSVCwgImxzaGlmdHJ0IiwgImVlIiwgUlRYX0JJTl9BUklUSCkgLyogbG9naWNhbCBzaGlmdCByaWdodCAqLworREVGX1JUTF9FWFBSKFJPVEFURVJULCAicm90YXRlcnQiLCAiZWUiLCBSVFhfQklOX0FSSVRIKSAvKiByb3RhdGUgcmlnaHQgKi8KKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgb2YgdHdvIG9wZXJhbmRzLiAgV2UgbmVlZCBib3RoIHNpZ25lZCBhbmQKKyAgIHVuc2lnbmVkIGZvcm1zLiAgKFdlIGNhbm5vdCB1c2UgTUlOIGZvciBTTUlOIGJlY2F1c2UgaXQgY29uZmxpY3RzCisgICB3aXRoIGEgbWFjcm8gb2YgdGhlIHNhbWUgbmFtZS4pICAgVGhlIHNpZ25lZCB2YXJpYW50cyBzaG91bGQgYmUgdXNlZAorICAgd2l0aCBmbG9hdGluZyBwb2ludC4gIEZ1cnRoZXIsIGlmIGJvdGggb3BlcmFuZHMgYXJlIHplcm9zLCBvciBpZiBlaXRoZXIKKyAgIG9wZXJhbmQgaXMgTmFOLCB0aGVuIGl0IGlzIHVuc3BlY2lmaWVkIHdoaWNoIG9mIHRoZSB0d28gb3BlcmFuZHMgaXMKKyAgIHJldHVybmVkIGFzIHRoZSByZXN1bHQuICAqLworCitERUZfUlRMX0VYUFIoU01JTiwgInNtaW4iLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKK0RFRl9SVExfRVhQUihTTUFYLCAic21heCIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorREVGX1JUTF9FWFBSKFVNSU4sICJ1bWluIiwgImVlIiwgUlRYX0NPTU1fQVJJVEgpCitERUZfUlRMX0VYUFIoVU1BWCwgInVtYXgiLCAiZWUiLCBSVFhfQ09NTV9BUklUSCkKKworLyogVGhlc2UgdW5hcnkgb3BlcmF0aW9ucyBhcmUgdXNlZCB0byByZXByZXNlbnQgaW5jcmVtZW50YXRpb24KKyAgIGFuZCBkZWNyZW1lbnRhdGlvbiBhcyB0aGV5IG9jY3VyIGluIG1lbW9yeSBhZGRyZXNzZXMuCisgICBUaGUgYW1vdW50IG9mIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYXJlIG5vdCByZXByZXNlbnRlZAorICAgYmVjYXVzZSB0aGV5IGNhbiBiZSB1bmRlcnN0b29kIGZyb20gdGhlIG1hY2hpbmUtbW9kZSBvZiB0aGUKKyAgIGNvbnRhaW5pbmcgTUVNLiAgVGhlc2Ugb3BlcmF0aW9ucyBleGlzdCBpbiBvbmx5IHR3byBjYXNlczoKKyAgIDEuIHB1c2hlcyBvbnRvIHRoZSBzdGFjay4KKyAgIDIuIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgYXV0by1pbmMtZGVjIHBhc3MuICAqLworREVGX1JUTF9FWFBSKFBSRV9ERUMsICJwcmVfZGVjIiwgImUiLCBSVFhfQVVUT0lOQykKK0RFRl9SVExfRVhQUihQUkVfSU5DLCAicHJlX2luYyIsICJlIiwgUlRYX0FVVE9JTkMpCitERUZfUlRMX0VYUFIoUE9TVF9ERUMsICJwb3N0X2RlYyIsICJlIiwgUlRYX0FVVE9JTkMpCitERUZfUlRMX0VYUFIoUE9TVF9JTkMsICJwb3N0X2luYyIsICJlIiwgUlRYX0FVVE9JTkMpCisKKy8qIFRoZXNlIGJpbmFyeSBvcGVyYXRpb25zIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBnZW5lcmljIGFkZHJlc3MKKyAgIHNpZGUtZWZmZWN0cyBpbiBtZW1vcnkgYWRkcmVzc2VzLCBleGNlcHQgZm9yIHNpbXBsZSBpbmNyZW1lbnRhdGlvbgorICAgb3IgZGVjcmVtZW50YXRpb24gd2hpY2ggdXNlIHRoZSBhYm92ZSBvcGVyYXRpb25zLiAgVGhleSBhcmUKKyAgIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgbGlmZV9hbmFseXNpcyBwYXNzIGluIGZsb3cuYy4KKyAgIFRoZSBmaXJzdCBvcGVyYW5kIGlzIGEgUkVHIHdoaWNoIGlzIHVzZWQgYXMgdGhlIGFkZHJlc3MuCisgICBUaGUgc2Vjb25kIG9wZXJhbmQgaXMgYW4gZXhwcmVzc2lvbiB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZQorICAgcmVnaXN0ZXIsIGVpdGhlciBiZWZvcmUgKFBSRV9NT0RJRlkpIG9yIGFmdGVyIChQT1NUX01PRElGWSkKKyAgIGV2YWx1YXRpbmcgdGhlIGFkZHJlc3MuCisgICBDdXJyZW50bHksIHRoZSBjb21waWxlciBjYW4gb25seSBoYW5kbGUgc2Vjb25kIG9wZXJhbmRzIG9mIHRoZQorICAgZm9ybSAocGx1cyAocmVnKSAocmVnKSkgYW5kIChwbHVzIChyZWcpIChjb25zdF9pbnQpKSwgd2hlcmUKKyAgIHRoZSBmaXJzdCBvcGVyYW5kIG9mIHRoZSBQTFVTIGhhcyB0byBiZSB0aGUgc2FtZSByZWdpc3RlciBhcworICAgdGhlIGZpcnN0IG9wZXJhbmQgb2YgdGhlICpfTU9ESUZZLiAgKi8KK0RFRl9SVExfRVhQUihQUkVfTU9ESUZZLCAicHJlX21vZGlmeSIsICJlZSIsIFJUWF9BVVRPSU5DKQorREVGX1JUTF9FWFBSKFBPU1RfTU9ESUZZLCAicG9zdF9tb2RpZnkiLCAiZWUiLCBSVFhfQVVUT0lOQykKKworLyogQ29tcGFyaXNvbiBvcGVyYXRpb25zLiAgVGhlIG9yZGVyZWQgY29tcGFyaXNvbnMgZXhpc3QgaW4gdHdvCisgICBmbGF2b3JzLCBzaWduZWQgYW5kIHVuc2lnbmVkLiAgKi8KK0RFRl9SVExfRVhQUihORSwgIm5lIiwgImVlIiwgUlRYX0NPTU1fQ09NUEFSRSkKK0RFRl9SVExfRVhQUihFUSwgImVxIiwgImVlIiwgUlRYX0NPTU1fQ09NUEFSRSkKK0RFRl9SVExfRVhQUihHRSwgImdlIiwgImVlIiwgUlRYX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoR1QsICJndCIsICJlZSIsIFJUWF9DT01QQVJFKQorREVGX1JUTF9FWFBSKExFLCAibGUiLCAiZWUiLCBSVFhfQ09NUEFSRSkKK0RFRl9SVExfRVhQUihMVCwgImx0IiwgImVlIiwgUlRYX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoR0VVLCAiZ2V1IiwgImVlIiwgUlRYX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoR1RVLCAiZ3R1IiwgImVlIiwgUlRYX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoTEVVLCAibGV1IiwgImVlIiwgUlRYX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoTFRVLCAibHR1IiwgImVlIiwgUlRYX0NPTVBBUkUpCisKKy8qIEFkZGl0aW9uYWwgZmxvYXRpbmcgcG9pbnQgdW5vcmRlcmVkIGNvbXBhcmlzb24gZmxhdm9ycy4gICovCitERUZfUlRMX0VYUFIoVU5PUkRFUkVELCAidW5vcmRlcmVkIiwgImVlIiwgUlRYX0NPTU1fQ09NUEFSRSkKK0RFRl9SVExfRVhQUihPUkRFUkVELCAib3JkZXJlZCIsICJlZSIsIFJUWF9DT01NX0NPTVBBUkUpCisKKy8qIFRoZXNlIGFyZSBlcXVpdmFsZW50IHRvIHVub3JkZXJlZCBvciAuLi4gICovCitERUZfUlRMX0VYUFIoVU5FUSwgInVuZXEiLCAiZWUiLCBSVFhfQ09NTV9DT01QQVJFKQorREVGX1JUTF9FWFBSKFVOR0UsICJ1bmdlIiwgImVlIiwgUlRYX0NPTVBBUkUpCitERUZfUlRMX0VYUFIoVU5HVCwgInVuZ3QiLCAiZWUiLCBSVFhfQ09NUEFSRSkKK0RFRl9SVExfRVhQUihVTkxFLCAidW5sZSIsICJlZSIsIFJUWF9DT01QQVJFKQorREVGX1JUTF9FWFBSKFVOTFQsICJ1bmx0IiwgImVlIiwgUlRYX0NPTVBBUkUpCisKKy8qIFRoaXMgaXMgYW4gb3JkZXJlZCBORSwgaWUgIVVORVEsIGllIGZhbHNlIGZvciBOYU4uICAqLworREVGX1JUTF9FWFBSKExUR1QsICJsdGd0IiwgImVlIiwgUlRYX0NPTU1fQ09NUEFSRSkKKworLyogUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHNpZ24tZXh0ZW5kaW5nIHRoZSBzb2xlIG9wZXJhbmQuCisgICBUaGUgbWFjaGluZSBtb2RlcyBvZiB0aGUgb3BlcmFuZCBhbmQgb2YgdGhlIFNJR05fRVhURU5EIGV4cHJlc3Npb24KKyAgIGRldGVybWluZSBob3cgbXVjaCBzaWduLWV4dGVuc2lvbiBpcyBnb2luZyBvbi4gICovCitERUZfUlRMX0VYUFIoU0lHTl9FWFRFTkQsICJzaWduX2V4dGVuZCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBTaW1pbGFyIGZvciB6ZXJvLWV4dGVuc2lvbiAoc3VjaCBhcyB1bnNpZ25lZCBzaG9ydCB0byBpbnQpLiAgKi8KK0RFRl9SVExfRVhQUihaRVJPX0VYVEVORCwgInplcm9fZXh0ZW5kIiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIFNpbWlsYXIgYnV0IGhlcmUgdGhlIG9wZXJhbmQgaGFzIGEgd2lkZXIgbW9kZS4gICovCitERUZfUlRMX0VYUFIoVFJVTkNBVEUsICJ0cnVuY2F0ZSIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBTaW1pbGFyIGZvciBleHRlbmRpbmcgZmxvYXRpbmctcG9pbnQgdmFsdWVzIChzdWNoIGFzIFNGbW9kZSB0byBERm1vZGUpLiAgKi8KK0RFRl9SVExfRVhQUihGTE9BVF9FWFRFTkQsICJmbG9hdF9leHRlbmQiLCAiZSIsIFJUWF9VTkFSWSkKK0RFRl9SVExfRVhQUihGTE9BVF9UUlVOQ0FURSwgImZsb2F0X3RydW5jYXRlIiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIENvbnZlcnNpb24gb2YgZml4ZWQgcG9pbnQgb3BlcmFuZCB0byBmbG9hdGluZyBwb2ludCB2YWx1ZS4gICovCitERUZfUlRMX0VYUFIoRkxPQVQsICJmbG9hdCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBXaXRoIGZpeGVkLXBvaW50IG1hY2hpbmUgbW9kZToKKyAgIENvbnZlcnNpb24gb2YgZmxvYXRpbmcgcG9pbnQgb3BlcmFuZCB0byBmaXhlZCBwb2ludCB2YWx1ZS4KKyAgIFZhbHVlIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSBvcGVyYW5kJ3MgdmFsdWUgaXMgYW4gaW50ZWdlci4KKyAgIFdpdGggZmxvYXRpbmctcG9pbnQgbWFjaGluZSBtb2RlIChhbmQgb3BlcmFuZCB3aXRoIHNhbWUgbW9kZSk6CisgICBPcGVyYW5kIGlzIHJvdW5kZWQgdG93YXJkIHplcm8gdG8gcHJvZHVjZSBhbiBpbnRlZ2VyIHZhbHVlCisgICByZXByZXNlbnRlZCBpbiBmbG9hdGluZyBwb2ludC4gICovCitERUZfUlRMX0VYUFIoRklYLCAiZml4IiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIENvbnZlcnNpb24gb2YgdW5zaWduZWQgZml4ZWQgcG9pbnQgb3BlcmFuZCB0byBmbG9hdGluZyBwb2ludCB2YWx1ZS4gICovCitERUZfUlRMX0VYUFIoVU5TSUdORURfRkxPQVQsICJ1bnNpZ25lZF9mbG9hdCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBXaXRoIGZpeGVkLXBvaW50IG1hY2hpbmUgbW9kZToKKyAgIENvbnZlcnNpb24gb2YgZmxvYXRpbmcgcG9pbnQgb3BlcmFuZCB0byAqdW5zaWduZWQqIGZpeGVkIHBvaW50IHZhbHVlLgorICAgVmFsdWUgaXMgZGVmaW5lZCBvbmx5IHdoZW4gdGhlIG9wZXJhbmQncyB2YWx1ZSBpcyBhbiBpbnRlZ2VyLiAgKi8KK0RFRl9SVExfRVhQUihVTlNJR05FRF9GSVgsICJ1bnNpZ25lZF9maXgiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogQ29udmVyc2lvbnMgaW52b2x2aW5nIGZyYWN0aW9uYWwgZml4ZWQtcG9pbnQgdHlwZXMgd2l0aG91dCBzYXR1cmF0aW9uLAorICAgaW5jbHVkaW5nOgorICAgICBmcmFjdGlvbmFsIHRvIGZyYWN0aW9uYWwgKG9mIGRpZmZlcmVudCBwcmVjaXNpb24pLAorICAgICBzaWduZWQgaW50ZWdlciB0byBmcmFjdGlvbmFsLAorICAgICBmcmFjdGlvbmFsIHRvIHNpZ25lZCBpbnRlZ2VyLAorICAgICBmbG9hdGluZyBwb2ludCB0byBmcmFjdGlvbmFsLAorICAgICBmcmFjdGlvbmFsIHRvIGZsb2F0aW5nIHBvaW50LgorICAgTk9URTogZnJhY3Rpb25hbCBjYW4gYmUgZWl0aGVyIHNpZ25lZCBvciB1bnNpZ25lZCBmb3IgY29udmVyc2lvbnMuICAqLworREVGX1JUTF9FWFBSKEZSQUNUX0NPTlZFUlQsICJmcmFjdF9jb252ZXJ0IiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIENvbnZlcnNpb25zIGludm9sdmluZyBmcmFjdGlvbmFsIGZpeGVkLXBvaW50IHR5cGVzIGFuZCB1bnNpZ25lZCBpbnRlZ2VyCisgICB3aXRob3V0IHNhdHVyYXRpb24sIGluY2x1ZGluZzoKKyAgICAgdW5zaWduZWQgaW50ZWdlciB0byBmcmFjdGlvbmFsLAorICAgICBmcmFjdGlvbmFsIHRvIHVuc2lnbmVkIGludGVnZXIuCisgICBOT1RFOiBmcmFjdGlvbmFsIGNhbiBiZSBlaXRoZXIgc2lnbmVkIG9yIHVuc2lnbmVkIGZvciBjb252ZXJzaW9ucy4gICovCitERUZfUlRMX0VYUFIoVU5TSUdORURfRlJBQ1RfQ09OVkVSVCwgInVuc2lnbmVkX2ZyYWN0X2NvbnZlcnQiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogQ29udmVyc2lvbnMgaW52b2x2aW5nIGZyYWN0aW9uYWwgZml4ZWQtcG9pbnQgdHlwZXMgd2l0aCBzYXR1cmF0aW9uLAorICAgaW5jbHVkaW5nOgorICAgICBmcmFjdGlvbmFsIHRvIGZyYWN0aW9uYWwgKG9mIGRpZmZlcmVudCBwcmVjaXNpb24pLAorICAgICBzaWduZWQgaW50ZWdlciB0byBmcmFjdGlvbmFsLAorICAgICBmbG9hdGluZyBwb2ludCB0byBmcmFjdGlvbmFsLgorICAgTk9URTogZnJhY3Rpb25hbCBjYW4gYmUgZWl0aGVyIHNpZ25lZCBvciB1bnNpZ25lZCBmb3IgY29udmVyc2lvbnMuICAqLworREVGX1JUTF9FWFBSKFNBVF9GUkFDVCwgInNhdF9mcmFjdCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBDb252ZXJzaW9ucyBpbnZvbHZpbmcgZnJhY3Rpb25hbCBmaXhlZC1wb2ludCB0eXBlcyBhbmQgdW5zaWduZWQgaW50ZWdlcgorICAgd2l0aCBzYXR1cmF0aW9uLCBpbmNsdWRpbmc6CisgICAgIHVuc2lnbmVkIGludGVnZXIgdG8gZnJhY3Rpb25hbC4KKyAgIE5PVEU6IGZyYWN0aW9uYWwgY2FuIGJlIGVpdGhlciBzaWduZWQgb3IgdW5zaWduZWQgZm9yIGNvbnZlcnNpb25zLiAgKi8KK0RFRl9SVExfRVhQUihVTlNJR05FRF9TQVRfRlJBQ1QsICJ1bnNpZ25lZF9zYXRfZnJhY3QiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogQWJzb2x1dGUgdmFsdWUgKi8KK0RFRl9SVExfRVhQUihBQlMsICJhYnMiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogU3F1YXJlIHJvb3QgKi8KK0RFRl9SVExfRVhQUihTUVJULCAic3FydCIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBTd2FwIGJ5dGVzLiAgKi8KK0RFRl9SVExfRVhQUihCU1dBUCwgImJzd2FwIiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIEZpbmQgZmlyc3QgYml0IHRoYXQgaXMgc2V0LgorICAgVmFsdWUgaXMgMSArIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgYXJnLiwKKyAgIG9yIDAgaWYgYXJnIGlzIDAuICAqLworREVGX1JUTF9FWFBSKEZGUywgImZmcyIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBDb3VudCBudW1iZXIgb2YgbGVhZGluZyByZWR1bmRhbnQgc2lnbiBiaXRzIChudW1iZXIgb2YgbGVhZGluZworICAgc2lnbiBiaXRzIG1pbnVzIG9uZSkuICAqLworREVGX1JUTF9FWFBSKENMUlNCLCAiY2xyc2IiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogQ291bnQgbGVhZGluZyB6ZXJvcy4gICovCitERUZfUlRMX0VYUFIoQ0xaLCAiY2x6IiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIENvdW50IHRyYWlsaW5nIHplcm9zLiAgKi8KK0RFRl9SVExfRVhQUihDVFosICJjdHoiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogUG9wdWxhdGlvbiBjb3VudCAobnVtYmVyIG9mIDEgYml0cykuICAqLworREVGX1JUTF9FWFBSKFBPUENPVU5ULCAicG9wY291bnQiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogUG9wdWxhdGlvbiBwYXJpdHkgKG51bWJlciBvZiAxIGJpdHMgbW9kdWxvIDIpLiAgKi8KK0RFRl9SVExfRVhQUihQQVJJVFksICJwYXJpdHkiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogUmVmZXJlbmNlIHRvIGEgc2lnbmVkIGJpdC1maWVsZCBvZiBzcGVjaWZpZWQgc2l6ZSBhbmQgcG9zaXRpb24uCisgICBPcGVyYW5kIDAgaXMgdGhlIG1lbW9yeSB1bml0ICh1c3VhbGx5IFNJbW9kZSBvciBRSW1vZGUpIHdoaWNoCisgICBjb250YWlucyB0aGUgZmllbGQncyBmaXJzdCBiaXQuICBPcGVyYW5kIDEgaXMgdGhlIHdpZHRoLCBpbiBiaXRzLgorICAgT3BlcmFuZCAyIGlzIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgbWVtb3J5IHVuaXQgYmVmb3JlIHRoZQorICAgZmlyc3QgYml0IG9mIHRoaXMgZmllbGQuCisgICBJZiBCSVRTX0JJR19FTkRJQU4gaXMgZGVmaW5lZCwgdGhlIGZpcnN0IGJpdCBpcyB0aGUgbXNiIGFuZAorICAgb3BlcmFuZCAyIGNvdW50cyBmcm9tIHRoZSBtc2Igb2YgdGhlIG1lbW9yeSB1bml0LgorICAgT3RoZXJ3aXNlLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBsc2IgYW5kIG9wZXJhbmQgMiBjb3VudHMgZnJvbQorICAgdGhlIGxzYiBvZiB0aGUgbWVtb3J5IHVuaXQuCisgICBUaGlzIGtpbmQgb2YgZXhwcmVzc2lvbiBjYW4gbm90IGFwcGVhciBhcyBhbiBsdmFsdWUgaW4gUlRMLiAgKi8KK0RFRl9SVExfRVhQUihTSUdOX0VYVFJBQ1QsICJzaWduX2V4dHJhY3QiLCAiZWVlIiwgUlRYX0JJVEZJRUxEX09QUykKKworLyogU2ltaWxhciBmb3IgdW5zaWduZWQgYml0LWZpZWxkLgorICAgQnV0IG5vdGUhICBUaGlzIGtpbmQgb2YgZXhwcmVzc2lvbiBfY2FuXyBhcHBlYXIgYXMgYW4gbHZhbHVlLiAgKi8KK0RFRl9SVExfRVhQUihaRVJPX0VYVFJBQ1QsICJ6ZXJvX2V4dHJhY3QiLCAiZWVlIiwgUlRYX0JJVEZJRUxEX09QUykKKworLyogRm9yIFJJU0MgbWFjaGluZXMuICBUaGVzZSBzYXZlIG1lbW9yeSB3aGVuIHNwbGl0dGluZyBpbnNucy4gICovCisKKy8qIEhJR0ggYXJlIHRoZSBoaWdoLW9yZGVyIGJpdHMgb2YgYSBjb25zdGFudCBleHByZXNzaW9uLiAgKi8KK0RFRl9SVExfRVhQUihISUdILCAiaGlnaCIsICJlIiwgUlRYX0NPTlNUX09CSikKKworLyogTE9fU1VNIGlzIHRoZSBzdW0gb2YgYSByZWdpc3RlciBhbmQgdGhlIGxvdy1vcmRlciBiaXRzCisgICBvZiBhIGNvbnN0YW50IGV4cHJlc3Npb24uICAqLworREVGX1JUTF9FWFBSKExPX1NVTSwgImxvX3N1bSIsICJlZSIsIFJUWF9PQkopCisKKy8qIERlc2NyaWJlcyBhIG1lcmdlIG9wZXJhdGlvbiBiZXR3ZWVuIHR3byB2ZWN0b3IgdmFsdWVzLgorICAgT3BlcmFuZHMgMCBhbmQgMSBhcmUgdGhlIHZlY3RvcnMgdG8gYmUgbWVyZ2VkLCBvcGVyYW5kIDIgaXMgYSBiaXRtYXNrCisgICB0aGF0IHNwZWNpZmllcyB3aGVyZSB0aGUgcGFydHMgb2YgdGhlIHJlc3VsdCBhcmUgdGFrZW4gZnJvbS4gIFNldCBiaXRzCisgICBpbmRpY2F0ZSBvcGVyYW5kIDAsIGNsZWFyIGJpdHMgaW5kaWNhdGUgb3BlcmFuZCAxLiAgVGhlIHBhcnRzIGFyZSBkZWZpbmVkCisgICBieSB0aGUgbW9kZSBvZiB0aGUgdmVjdG9ycy4gICovCitERUZfUlRMX0VYUFIoVkVDX01FUkdFLCAidmVjX21lcmdlIiwgImVlZSIsIFJUWF9URVJOQVJZKQorCisvKiBEZXNjcmliZXMgYW4gb3BlcmF0aW9uIHRoYXQgc2VsZWN0cyBwYXJ0cyBvZiBhIHZlY3Rvci4KKyAgIE9wZXJhbmRzIDAgaXMgdGhlIHNvdXJjZSB2ZWN0b3IsIG9wZXJhbmQgMSBpcyBhIFBBUkFMTEVMIHRoYXQgY29udGFpbnMKKyAgIGEgQ09OU1RfSU5UIGZvciBlYWNoIG9mIHRoZSBzdWJwYXJ0cyBvZiB0aGUgcmVzdWx0IHZlY3RvciwgZ2l2aW5nIHRoZQorICAgbnVtYmVyIG9mIHRoZSBzb3VyY2Ugc3VicGFydCB0aGF0IHNob3VsZCBiZSBzdG9yZWQgaW50byBpdC4gICovCitERUZfUlRMX0VYUFIoVkVDX1NFTEVDVCwgInZlY19zZWxlY3QiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorCisvKiBEZXNjcmliZXMgYSB2ZWN0b3IgY29uY2F0IG9wZXJhdGlvbi4gIE9wZXJhbmRzIDAgYW5kIDEgYXJlIHRoZSBzb3VyY2UKKyAgIHZlY3RvcnMsIHRoZSByZXN1bHQgaXMgYSB2ZWN0b3IgdGhhdCBpcyBhcyBsb25nIGFzIG9wZXJhbmRzIDAgYW5kIDEKKyAgIGNvbWJpbmVkIGFuZCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgdHdvIHNvdXJjZSB2ZWN0b3JzLiAgKi8KK0RFRl9SVExfRVhQUihWRUNfQ09OQ0FULCAidmVjX2NvbmNhdCIsICJlZSIsIFJUWF9CSU5fQVJJVEgpCisKKy8qIERlc2NyaWJlcyBhbiBvcGVyYXRpb24gdGhhdCBjb252ZXJ0cyBhIHNtYWxsIHZlY3RvciBpbnRvIGEgbGFyZ2VyIG9uZSBieQorICAgZHVwbGljYXRpbmcgdGhlIGlucHV0IHZhbHVlcy4gIFRoZSBvdXRwdXQgdmVjdG9yIG1vZGUgbXVzdCBoYXZlIHRoZSBzYW1lCisgICBzdWJtb2RlcyBhcyB0aGUgaW5wdXQgdmVjdG9yIG1vZGUsIGFuZCB0aGUgbnVtYmVyIG9mIG91dHB1dCBwYXJ0cyBtdXN0IGJlCisgICBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIHRoZSBudW1iZXIgb2YgaW5wdXQgcGFydHMuICAqLworREVGX1JUTF9FWFBSKFZFQ19EVVBMSUNBVEUsICJ2ZWNfZHVwbGljYXRlIiwgImUiLCBSVFhfVU5BUlkpCisKKy8qIEFkZGl0aW9uIHdpdGggc2lnbmVkIHNhdHVyYXRpb24gKi8KK0RFRl9SVExfRVhQUihTU19QTFVTLCAic3NfcGx1cyIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorCisvKiBBZGRpdGlvbiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb24gKi8KK0RFRl9SVExfRVhQUihVU19QTFVTLCAidXNfcGx1cyIsICJlZSIsIFJUWF9DT01NX0FSSVRIKQorCisvKiBPcGVyYW5kIDAgbWludXMgb3BlcmFuZCAxLCB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uLiAgKi8KK0RFRl9SVExfRVhQUihTU19NSU5VUywgInNzX21pbnVzIiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogTmVnYXRpb24gd2l0aCBzaWduZWQgc2F0dXJhdGlvbi4gICovCitERUZfUlRMX0VYUFIoU1NfTkVHLCAic3NfbmVnIiwgImUiLCBSVFhfVU5BUlkpCisvKiBOZWdhdGlvbiB3aXRoIHVuc2lnbmVkIHNhdHVyYXRpb24uICAqLworREVGX1JUTF9FWFBSKFVTX05FRywgInVzX25lZyIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBBYnNvbHV0ZSB2YWx1ZSB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uLiAgKi8KK0RFRl9SVExfRVhQUihTU19BQlMsICJzc19hYnMiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogU2hpZnQgbGVmdCB3aXRoIHNpZ25lZCBzYXR1cmF0aW9uLiAgKi8KK0RFRl9SVExfRVhQUihTU19BU0hJRlQsICJzc19hc2hpZnQiLCAiZWUiLCBSVFhfQklOX0FSSVRIKQorCisvKiBTaGlmdCBsZWZ0IHdpdGggdW5zaWduZWQgc2F0dXJhdGlvbi4gICovCitERUZfUlRMX0VYUFIoVVNfQVNISUZULCAidXNfYXNoaWZ0IiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogT3BlcmFuZCAwIG1pbnVzIG9wZXJhbmQgMSwgd2l0aCB1bnNpZ25lZCBzYXR1cmF0aW9uLiAgKi8KK0RFRl9SVExfRVhQUihVU19NSU5VUywgInVzX21pbnVzIiwgImVlIiwgUlRYX0JJTl9BUklUSCkKKworLyogU2lnbmVkIHNhdHVyYXRpbmcgdHJ1bmNhdGUuICAqLworREVGX1JUTF9FWFBSKFNTX1RSVU5DQVRFLCAic3NfdHJ1bmNhdGUiLCAiZSIsIFJUWF9VTkFSWSkKKworLyogVW5zaWduZWQgc2F0dXJhdGluZyB0cnVuY2F0ZS4gICovCitERUZfUlRMX0VYUFIoVVNfVFJVTkNBVEUsICJ1c190cnVuY2F0ZSIsICJlIiwgUlRYX1VOQVJZKQorCisvKiBGbG9hdGluZyBwb2ludCBtdWx0aXBseS9hZGQgY29tYmluZWQgaW5zdHJ1Y3Rpb24uICAqLworREVGX1JUTF9FWFBSKEZNQSwgImZtYSIsICJlZWUiLCBSVFhfVEVSTkFSWSkKKworLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlhYmxlIGFuZCBpdHMgbG9jYXRpb24uICAqLworLyogQ2hhbmdlZCAndGUnIHRvICd0ZWknOyB0aGUgJ2knIGZpZWxkIGlzIGZvciByZWNvcmRpbmcKKyAgIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiB2YXJpYWJsZXMuICAqLworREVGX1JUTF9FWFBSKFZBUl9MT0NBVElPTiwgInZhcl9sb2NhdGlvbiIsICJ0ZWkiLCBSVFhfRVhUUkEpCisKKy8qIFVzZWQgaW4gVkFSX0xPQ0FUSU9OIGZvciBhIHBvaW50ZXIgdG8gYSBkZWNsIHRoYXQgaXMgbm8gbG9uZ2VyCisgICBhZGRyZXNzYWJsZS4gICovCitERUZfUlRMX0VYUFIoREVCVUdfSU1QTElDSVRfUFRSLCAiZGVidWdfaW1wbGljaXRfcHRyIiwgInQiLCBSVFhfT0JKKQorCisvKiBSZXByZXNlbnRzIHZhbHVlIHRoYXQgYXJndW1lbnQgaGFkIG9uIGZ1bmN0aW9uIGVudHJ5LiAgVGhlCisgICBzaW5nbGUgYXJndW1lbnQgaXMgdGhlIERFQ0xfSU5DT01JTkdfUlRMIG9mIHRoZSBjb3JyZXNwb25kaW5nCisgICBwYXJhbWV0ZXIuICAqLworREVGX1JUTF9FWFBSKEVOVFJZX1ZBTFVFLCAiZW50cnlfdmFsdWUiLCAiMCIsIFJUWF9PQkopCisKKy8qIFVzZWQgaW4gVkFSX0xPQ0FUSU9OIGZvciBhIHJlZmVyZW5jZSB0byBhIHBhcmFtZXRlciB0aGF0IGhhcworICAgYmVlbiBvcHRpbWl6ZWQgYXdheSBjb21wbGV0ZWx5LiAgKi8KK0RFRl9SVExfRVhQUihERUJVR19QQVJBTUVURVJfUkVGLCAiZGVidWdfcGFyYW1ldGVyX3JlZiIsICJ0IiwgUlRYX09CSikKKworLyogQWxsIGV4cHJlc3Npb25zIGZyb20gdGhpcyBwb2ludCBmb3J3YXJkIGFwcGVhciBvbmx5IGluIG1hY2hpbmUKKyAgIGRlc2NyaXB0aW9ucy4gICovCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKKworLyogUGF0dGVybi1tYXRjaGluZyBvcGVyYXRvcnM6ICAqLworCisvKiBVc2UgdGhlIGZ1bmN0aW9uIG5hbWVkIGJ5IHRoZSBzZWNvbmQgYXJnICh0aGUgc3RyaW5nKQorICAgYXMgYSBwcmVkaWNhdGU7IGlmIG1hdGNoZWQsIHN0b3JlIHRoZSBzdHJ1Y3R1cmUgdGhhdCB3YXMgbWF0Y2hlZAorICAgaW4gdGhlIG9wZXJhbmQgdGFibGUgYXQgaW5kZXggc3BlY2lmaWVkIGJ5IHRoZSBmaXJzdCBhcmcgKHRoZSBpbnRlZ2VyKS4KKyAgIElmIHRoZSBzZWNvbmQgYXJnIGlzIHRoZSBudWxsIHN0cmluZywgdGhlIHN0cnVjdHVyZSBpcyBqdXN0IHN0b3JlZC4KKworICAgQSB0aGlyZCBzdHJpbmcgYXJndW1lbnQgaW5kaWNhdGVzIHRvIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgcmVzdHJpY3Rpb25zCisgICBvbiB3aGVyZSB0aGUgb3BlcmFuZCBjYW4gYmUgYWxsb2NhdGVkLgorCisgICBJZiB0aGUgdGFyZ2V0IG5lZWRzIG5vIHJlc3RyaWN0aW9uIG9uIGFueSBpbnN0cnVjdGlvbiB0aGlzIGZpZWxkIHNob3VsZAorICAgYmUgdGhlIG51bGwgc3RyaW5nLgorCisgICBUaGUgc3RyaW5nIGlzIHByZXBlbmRlZCBieToKKyAgICc9JyB0byBpbmRpY2F0ZSB0aGUgb3BlcmFuZCBpcyBvbmx5IHdyaXR0ZW4gdG8uCisgICAnKycgdG8gaW5kaWNhdGUgdGhlIG9wZXJhbmQgaXMgYm90aCByZWFkIGFuZCB3cml0dGVuIHRvLgorCisgICBFYWNoIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgYW4gYWxsb2NhYmxlIGNsYXNzIGZvciBhbiBvcGVyYW5kLgorICAgJ2cnIGluZGljYXRlcyB0aGUgb3BlcmFuZCBjYW4gYmUgYW55IHZhbGlkIGNsYXNzLgorICAgJ2knIGluZGljYXRlcyB0aGUgb3BlcmFuZCBjYW4gYmUgaW1tZWRpYXRlIChpbiB0aGUgaW5zdHJ1Y3Rpb24pIGRhdGEuCisgICAncicgaW5kaWNhdGVzIHRoZSBvcGVyYW5kIGNhbiBiZSBpbiBhIHJlZ2lzdGVyLgorICAgJ20nIGluZGljYXRlcyB0aGUgb3BlcmFuZCBjYW4gYmUgaW4gbWVtb3J5LgorICAgJ28nIGEgc3Vic2V0IG9mIHRoZSAnbScgY2xhc3MuICBUaG9zZSBtZW1vcnkgYWRkcmVzc2luZyBtb2RlcyB0aGF0CisgICAgICAgY2FuIGJlIG9mZnNldCBhdCBjb21waWxlIHRpbWUgKGhhdmUgYSBjb25zdGFudCBhZGRlZCB0byB0aGVtKS4KKworICAgT3RoZXIgY2hhcmFjdGVycyBpbmRpY2F0ZSB0YXJnZXQgZGVwZW5kZW50IG9wZXJhbmQgY2xhc3NlcyBhbmQKKyAgIGFyZSBkZXNjcmliZWQgaW4gZWFjaCB0YXJnZXQncyBtYWNoaW5lIGRlc2NyaXB0aW9uLgorCisgICBGb3IgaW5zdHJ1Y3Rpb25zIHdpdGggbW9yZSB0aGFuIG9uZSBvcGVyYW5kLCBzZXRzIG9mIGNsYXNzZXMgY2FuIGJlCisgICBzZXBhcmF0ZWQgYnkgYSBjb21tYSB0byBpbmRpY2F0ZSB0aGUgYXBwcm9wcmlhdGUgbXVsdGktb3BlcmFuZCBjb25zdHJhaW50cy4KKyAgIFRoZXJlIG11c3QgYmUgYSAxIHRvIDEgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiB0aGVzZSBzZXRzIG9mIGNsYXNzZXMgaW4KKyAgIGFsbCBvcGVyYW5kcyBmb3IgYW4gaW5zdHJ1Y3Rpb24uCisgICAqLworREVGX1JUTF9FWFBSKE1BVENIX09QRVJBTkQsICJtYXRjaF9vcGVyYW5kIiwgImlzcyIsIFJUWF9NQVRDSCkKKworLyogTWF0Y2ggYSBTQ1JBVENIIG9yIGEgcmVnaXN0ZXIuICBXaGVuIHVzZWQgdG8gZ2VuZXJhdGUgcnRsLCBhCisgICBTQ1JBVENIIGlzIGdlbmVyYXRlZC4gIEFzIGZvciBNQVRDSF9PUEVSQU5ELCB0aGUgbW9kZSBzcGVjaWZpZXMKKyAgIHRoZSBkZXNpcmVkIG1vZGUgYW5kIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgb3BlcmFuZCBudW1iZXIuCisgICBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjb25zdHJhaW50LiAgKi8KK0RFRl9SVExfRVhQUihNQVRDSF9TQ1JBVENILCAibWF0Y2hfc2NyYXRjaCIsICJpcyIsIFJUWF9NQVRDSCkKKworLyogQXBwbHkgYSBwcmVkaWNhdGUsIEFORCBtYXRjaCByZWN1cnNpdmVseSB0aGUgb3BlcmFuZHMgb2YgdGhlIHJ0eC4KKyAgIE9wZXJhbmQgMCBpcyB0aGUgb3BlcmFuZC1udW1iZXIsIGFzIGluIG1hdGNoX29wZXJhbmQuCisgICBPcGVyYW5kIDEgaXMgYSBwcmVkaWNhdGUgdG8gYXBwbHkgKGFzIGEgc3RyaW5nLCBhIGZ1bmN0aW9uIG5hbWUpLgorICAgT3BlcmFuZCAyIGlzIGEgdmVjdG9yIG9mIGV4cHJlc3Npb25zLCBlYWNoIG9mIHdoaWNoIG11c3QgbWF0Y2gKKyAgIG9uZSBzdWJleHByZXNzaW9uIG9mIHRoZSBydHggdGhpcyBjb25zdHJ1Y3QgaXMgbWF0Y2hpbmcuICAqLworREVGX1JUTF9FWFBSKE1BVENIX09QRVJBVE9SLCAibWF0Y2hfb3BlcmF0b3IiLCAiaXNFIiwgUlRYX01BVENIKQorCisvKiBNYXRjaCBhIFBBUkFMTEVMIG9mIGFyYml0cmFyeSBsZW5ndGguICBUaGUgcHJlZGljYXRlIGlzIGFwcGxpZWQKKyAgIHRvIHRoZSBQQVJBTExFTCBhbmQgdGhlIGluaXRpYWwgZXhwcmVzc2lvbnMgaW4gdGhlIFBBUkFMTEVMIGFyZSBtYXRjaGVkLgorICAgT3BlcmFuZCAwIGlzIHRoZSBvcGVyYW5kLW51bWJlciwgYXMgaW4gbWF0Y2hfb3BlcmFuZC4KKyAgIE9wZXJhbmQgMSBpcyBhIHByZWRpY2F0ZSB0byBhcHBseSB0byB0aGUgUEFSQUxMRUwuCisgICBPcGVyYW5kIDIgaXMgYSB2ZWN0b3Igb2YgZXhwcmVzc2lvbnMsIGVhY2ggb2Ygd2hpY2ggbXVzdCBtYXRjaCB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiB0aGUgUEFSQUxMRUwuICAqLworREVGX1JUTF9FWFBSKE1BVENIX1BBUkFMTEVMLCAibWF0Y2hfcGFyYWxsZWwiLCAiaXNFIiwgUlRYX01BVENIKQorCisvKiBNYXRjaCBvbmx5IHNvbWV0aGluZyBlcXVhbCB0byB3aGF0IGlzIHN0b3JlZCBpbiB0aGUgb3BlcmFuZCB0YWJsZQorICAgYXQgdGhlIGluZGV4IHNwZWNpZmllZCBieSB0aGUgYXJndW1lbnQuICBVc2Ugd2l0aCBNQVRDSF9PUEVSQU5ELiAgKi8KK0RFRl9SVExfRVhQUihNQVRDSF9EVVAsICJtYXRjaF9kdXAiLCAiaSIsIFJUWF9NQVRDSCkKKworLyogTWF0Y2ggb25seSBzb21ldGhpbmcgZXF1YWwgdG8gd2hhdCBpcyBzdG9yZWQgaW4gdGhlIG9wZXJhbmQgdGFibGUKKyAgIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50LiAgVXNlIHdpdGggTUFUQ0hfT1BFUkFUT1IuICAqLworREVGX1JUTF9FWFBSKE1BVENIX09QX0RVUCwgIm1hdGNoX29wX2R1cCIsICJpRSIsIFJUWF9NQVRDSCkKKworLyogTWF0Y2ggb25seSBzb21ldGhpbmcgZXF1YWwgdG8gd2hhdCBpcyBzdG9yZWQgaW4gdGhlIG9wZXJhbmQgdGFibGUKKyAgIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQgYnkgdGhlIGFyZ3VtZW50LiAgVXNlIHdpdGggTUFUQ0hfUEFSQUxMRUwuICAqLworREVGX1JUTF9FWFBSKE1BVENIX1BBUl9EVVAsICJtYXRjaF9wYXJfZHVwIiwgImlFIiwgUlRYX01BVENIKQorCisvKiBBcHBlYXJzIG9ubHkgaW4gZGVmaW5lX3ByZWRpY2F0ZS9kZWZpbmVfc3BlY2lhbF9wcmVkaWNhdGUKKyAgIGV4cHJlc3Npb25zLiAgRXZhbHVhdGVzIHRydWUgb25seSBpZiB0aGUgb3BlcmFuZCBoYXMgYW4gUlRYIGNvZGUKKyAgIGZyb20gdGhlIHNldCBnaXZlbiBieSB0aGUgYXJndW1lbnQgKGEgY29tbWEtc2VwYXJhdGVkIGxpc3QpLiAgSWYgdGhlCisgICBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCBhbmQgbm9uZW1wdHksIGl0IGlzIGEgc2VxdWVuY2Ugb2YgZGlnaXRzCisgICBhbmQvb3IgbGV0dGVycyB3aGljaCBpbmRpY2F0ZXMgdGhlIHN1YmV4cHJlc3Npb24gdG8gdGVzdCwgdXNpbmcgdGhlCisgICBzYW1lIHN5bnRheCBhcyBnZW5leHRyYWN0L2dlbnJlY29nJ3MgbG9jYXRpb24gc3RyaW5nczogMC05IGZvcgorICAgWEVYUCAob3AsIG4pLCBhLXogZm9yIFhWRUNFWFAgKG9wLCAwLCBuKTsgZWFjaCBjaGFyYWN0ZXIgYXBwbGllcyB0bworICAgdGhlIHJlc3VsdCBvZiB0aGUgb25lIGJlZm9yZSBpdC4gICovCitERUZfUlRMX0VYUFIoTUFUQ0hfQ09ERSwgIm1hdGNoX2NvZGUiLCAic3MiLCBSVFhfTUFUQ0gpCisKKy8qIFVzZWQgdG8gaW5qZWN0IGEgQyBjb25kaXRpb25hbCBleHByZXNzaW9uIGludG8gYW4gLm1kIGZpbGUuICBJdCBjYW4KKyAgIGFwcGVhciBpbiBhIHByZWRpY2F0ZSBkZWZpbml0aW9uIG9yIGFuIGF0dHJpYnV0ZSBleHByZXNzaW9uLiAgKi8KK0RFRl9SVExfRVhQUihNQVRDSF9URVNULCAibWF0Y2hfdGVzdCIsICJzIiwgUlRYX01BVENIKQorCisvKiBJbnNuIChhbmQgcmVsYXRlZCkgZGVmaW5pdGlvbnMuICAqLworCisvKiBEZWZpbml0aW9uIG9mIHRoZSBwYXR0ZXJuIGZvciBvbmUga2luZCBvZiBpbnN0cnVjdGlvbi4KKyAgIE9wZXJhbmQ6CisgICAwOiBuYW1lcyB0aGlzIGluc3RydWN0aW9uLgorICAgICAgSWYgdGhlIG5hbWUgaXMgdGhlIG51bGwgc3RyaW5nLCB0aGUgaW5zdHJ1Y3Rpb24gaXMgaW4gdGhlCisgICAgICBtYWNoaW5lIGRlc2NyaXB0aW9uIGp1c3QgdG8gYmUgcmVjb2duaXplZCwgYW5kIHdpbGwgbmV2ZXIgYmUgZW1pdHRlZCBieQorICAgICAgdGhlIHRyZWUgdG8gcnRsIGV4cGFuZGVyLgorICAgMTogaXMgdGhlIHBhdHRlcm4uCisgICAyOiBpcyBhIHN0cmluZyB3aGljaCBpcyBhIEMgZXhwcmVzc2lvbgorICAgICAgZ2l2aW5nIGFuIGFkZGl0aW9uYWwgY29uZGl0aW9uIGZvciByZWNvZ25pemluZyB0aGlzIHBhdHRlcm4uCisgICAgICBBIG51bGwgc3RyaW5nIG1lYW5zIG5vIGV4dHJhIGNvbmRpdGlvbi4KKyAgIDM6IGlzIHRoZSBhY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGlzIHBhdHRlcm4gaXMgbWF0Y2hlZC4KKyAgICAgIElmIHRoaXMgYXNzZW1ibGVyIGNvZGUgdGVtcGxhdGUgc3RhcnRzIHdpdGggYSAqIHRoZW4gaXQgaXMgYSBmcmFnbWVudCBvZgorICAgICAgQyBjb2RlIHRvIHJ1biB0byBkZWNpZGUgb24gYSB0ZW1wbGF0ZSB0byB1c2UuICBPdGhlcndpc2UsIGl0IGlzIHRoZQorICAgICAgdGVtcGxhdGUgdG8gdXNlLgorICAgNDogb3B0aW9uYWxseSwgYSB2ZWN0b3Igb2YgYXR0cmlidXRlcyBmb3IgdGhpcyBpbnNuLgorICAgICAqLworREVGX1JUTF9FWFBSKERFRklORV9JTlNOLCAiZGVmaW5lX2luc24iLCAic0VzVFYiLCBSVFhfRVhUUkEpCisKKy8qIERlZmluaXRpb24gb2YgYSBwZWVwaG9sZSBvcHRpbWl6YXRpb24uCisgICAxc3Qgb3BlcmFuZDogdmVjdG9yIG9mIGluc24gcGF0dGVybnMgdG8gbWF0Y2gKKyAgIDJuZCBvcGVyYW5kOiBDIGV4cHJlc3Npb24gdGhhdCBtdXN0IGJlIHRydWUKKyAgIDNyZCBvcGVyYW5kOiB0ZW1wbGF0ZSBvciBDIGNvZGUgdG8gcHJvZHVjZSBhc3NlbWJsZXIgb3V0cHV0LgorICAgNDogb3B0aW9uYWxseSwgYSB2ZWN0b3Igb2YgYXR0cmlidXRlcyBmb3IgdGhpcyBpbnNuLgorCisgICBUaGlzIGZvcm0gaXMgZGVwcmVjYXRlZDsgdXNlIGRlZmluZV9wZWVwaG9sZTIgaW5zdGVhZC4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX1BFRVBIT0xFLCAiZGVmaW5lX3BlZXBob2xlIiwgIkVzVFYiLCBSVFhfRVhUUkEpCisKKy8qIERlZmluaXRpb24gb2YgYSBzcGxpdCBvcGVyYXRpb24uCisgICAxc3Qgb3BlcmFuZDogaW5zbiBwYXR0ZXJuIHRvIG1hdGNoCisgICAybmQgb3BlcmFuZDogQyBleHByZXNzaW9uIHRoYXQgbXVzdCBiZSB0cnVlCisgICAzcmQgb3BlcmFuZDogdmVjdG9yIG9mIGluc24gcGF0dGVybnMgdG8gcGxhY2UgaW50byBhIFNFUVVFTkNFCisgICA0dGggb3BlcmFuZDogb3B0aW9uYWxseSwgc29tZSBDIGNvZGUgdG8gZXhlY3V0ZSBiZWZvcmUgZ2VuZXJhdGluZyB0aGUKKwlpbnNucy4gIFRoaXMgbWlnaHQsIGZvciBleGFtcGxlLCBjcmVhdGUgc29tZSBSVFgncyBhbmQgc3RvcmUgdGhlbSBpbgorCWVsZW1lbnRzIG9mIGByZWNvZ19kYXRhLm9wZXJhbmQnIGZvciB1c2UgYnkgdGhlIHZlY3RvciBvZgorCWluc24tcGF0dGVybnMuCisJKGBvcGVyYW5kcycgaXMgYW4gYWxpYXMgaGVyZSBmb3IgYHJlY29nX2RhdGEub3BlcmFuZCcpLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfU1BMSVQsICJkZWZpbmVfc3BsaXQiLCAiRXNFUyIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhbiBpbnNuIGFuZCBhc3NvY2lhdGVkIHNwbGl0LgorICAgVGhpcyBpcyB0aGUgY29uY2F0ZW5hdGlvbiwgd2l0aCBhIGZldyBtb2RpZmljYXRpb25zLCBvZiBhIGRlZmluZV9pbnNuCisgICBhbmQgYSBkZWZpbmVfc3BsaXQgd2hpY2ggc2hhcmUgdGhlIHNhbWUgcGF0dGVybi4KKyAgIE9wZXJhbmQ6CisgICAwOiBuYW1lcyB0aGlzIGluc3RydWN0aW9uLgorICAgICAgSWYgdGhlIG5hbWUgaXMgdGhlIG51bGwgc3RyaW5nLCB0aGUgaW5zdHJ1Y3Rpb24gaXMgaW4gdGhlCisgICAgICBtYWNoaW5lIGRlc2NyaXB0aW9uIGp1c3QgdG8gYmUgcmVjb2duaXplZCwgYW5kIHdpbGwgbmV2ZXIgYmUgZW1pdHRlZCBieQorICAgICAgdGhlIHRyZWUgdG8gcnRsIGV4cGFuZGVyLgorICAgMTogaXMgdGhlIHBhdHRlcm4uCisgICAyOiBpcyBhIHN0cmluZyB3aGljaCBpcyBhIEMgZXhwcmVzc2lvbgorICAgICAgZ2l2aW5nIGFuIGFkZGl0aW9uYWwgY29uZGl0aW9uIGZvciByZWNvZ25pemluZyB0aGlzIHBhdHRlcm4uCisgICAgICBBIG51bGwgc3RyaW5nIG1lYW5zIG5vIGV4dHJhIGNvbmRpdGlvbi4KKyAgIDM6IGlzIHRoZSBhY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGlzIHBhdHRlcm4gaXMgbWF0Y2hlZC4KKyAgICAgIElmIHRoaXMgYXNzZW1ibGVyIGNvZGUgdGVtcGxhdGUgc3RhcnRzIHdpdGggYSAqIHRoZW4gaXQgaXMgYSBmcmFnbWVudCBvZgorICAgICAgQyBjb2RlIHRvIHJ1biB0byBkZWNpZGUgb24gYSB0ZW1wbGF0ZSB0byB1c2UuICBPdGhlcndpc2UsIGl0IGlzIHRoZQorICAgICAgdGVtcGxhdGUgdG8gdXNlLgorICAgNDogQyBleHByZXNzaW9uIHRoYXQgbXVzdCBiZSB0cnVlIGZvciBzcGxpdC4gIFRoaXMgbWF5IHN0YXJ0IHdpdGggIiYmIgorICAgICAgaW4gd2hpY2ggY2FzZSB0aGUgc3BsaXQgY29uZGl0aW9uIGlzIHRoZSBsb2dpY2FsIGFuZCBvZiB0aGUgaW5zbgorICAgICAgY29uZGl0aW9uIGFuZCB3aGF0IGZvbGxvd3MgdGhlICImJiIgb2YgdGhpcyBvcGVyYW5kLgorICAgNTogdmVjdG9yIG9mIGluc24gcGF0dGVybnMgdG8gcGxhY2UgaW50byBhIFNFUVVFTkNFCisgICA2OiBvcHRpb25hbGx5LCBzb21lIEMgY29kZSB0byBleGVjdXRlIGJlZm9yZSBnZW5lcmF0aW5nIHRoZQorCWluc25zLiAgVGhpcyBtaWdodCwgZm9yIGV4YW1wbGUsIGNyZWF0ZSBzb21lIFJUWCdzIGFuZCBzdG9yZSB0aGVtIGluCisJZWxlbWVudHMgb2YgYHJlY29nX2RhdGEub3BlcmFuZCcgZm9yIHVzZSBieSB0aGUgdmVjdG9yIG9mCisJaW5zbi1wYXR0ZXJucy4KKwkoYG9wZXJhbmRzJyBpcyBhbiBhbGlhcyBoZXJlIGZvciBgcmVjb2dfZGF0YS5vcGVyYW5kJykuCisgICA3OiBvcHRpb25hbGx5LCBhIHZlY3RvciBvZiBhdHRyaWJ1dGVzIGZvciB0aGlzIGluc24uICAqLworREVGX1JUTF9FWFBSKERFRklORV9JTlNOX0FORF9TUExJVCwgImRlZmluZV9pbnNuX2FuZF9zcGxpdCIsICJzRXNUc0VTViIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhbiBSVEwgcGVlcGhvbGUgb3BlcmF0aW9uLgorICAgRm9sbG93cyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgZGVmaW5lX3NwbGl0LiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfUEVFUEhPTEUyLCAiZGVmaW5lX3BlZXBob2xlMiIsICJFc0VTIiwgUlRYX0VYVFJBKQorCisvKiBEZWZpbmUgaG93IHRvIGdlbmVyYXRlIG11bHRpcGxlIGluc25zIGZvciBhIHN0YW5kYXJkIGluc24gbmFtZS4KKyAgIDFzdCBvcGVyYW5kOiB0aGUgaW5zbiBuYW1lLgorICAgMm5kIG9wZXJhbmQ6IHZlY3RvciBvZiBpbnNuLXBhdHRlcm5zLgorCVVzZSBtYXRjaF9vcGVyYW5kIHRvIHN1YnN0aXR1dGUgYW4gZWxlbWVudCBvZiBgcmVjb2dfZGF0YS5vcGVyYW5kJy4KKyAgIDNyZCBvcGVyYW5kOiBDIGV4cHJlc3Npb24gdGhhdCBtdXN0IGJlIHRydWUgZm9yIHRoaXMgdG8gYmUgYXZhaWxhYmxlLgorCVRoaXMgbWF5IG5vdCB0ZXN0IGFueSBvcGVyYW5kcy4KKyAgIDR0aCBvcGVyYW5kOiBFeHRyYSBDIGNvZGUgdG8gZXhlY3V0ZSBiZWZvcmUgZ2VuZXJhdGluZyB0aGUgaW5zbnMuCisJVGhpcyBtaWdodCwgZm9yIGV4YW1wbGUsIGNyZWF0ZSBzb21lIFJUWCdzIGFuZCBzdG9yZSB0aGVtIGluCisJZWxlbWVudHMgb2YgYHJlY29nX2RhdGEub3BlcmFuZCcgZm9yIHVzZSBieSB0aGUgdmVjdG9yIG9mCisJaW5zbi1wYXR0ZXJucy4KKwkoYG9wZXJhbmRzJyBpcyBhbiBhbGlhcyBoZXJlIGZvciBgcmVjb2dfZGF0YS5vcGVyYW5kJykuCisgICA1dGg6IG9wdGlvbmFsbHksIGEgdmVjdG9yIG9mIGF0dHJpYnV0ZXMgZm9yIHRoaXMgZXhwYW5kLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfRVhQQU5ELCAiZGVmaW5lX2V4cGFuZCIsICJzRXNzViIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5lIGEgcmVxdWlyZW1lbnQgZm9yIGRlbGF5IHNsb3RzLgorICAgMXN0IG9wZXJhbmQ6IENvbmRpdGlvbiBpbnZvbHZpbmcgaW5zbiBhdHRyaWJ1dGVzIHRoYXQsIGlmIHRydWUsCisJICAgICAgICBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5zbiByZXF1aXJlcyB0aGUgbnVtYmVyIG9mIGRlbGF5IHNsb3RzCisJCXNob3duLgorICAgMm5kIG9wZXJhbmQ6IFZlY3RvciB3aG9zZSBsZW5ndGggaXMgdGhlIHRocmVlIHRpbWVzIHRoZSBudW1iZXIgb2YgZGVsYXkKKwkJc2xvdHMgcmVxdWlyZWQuCisJICAgICAgICBFYWNoIGVudHJ5IGdpdmVzIHRocmVlIGNvbmRpdGlvbnMsIGVhY2ggaW52b2x2aW5nIGF0dHJpYnV0ZXMuCisJCVRoZSBmaXJzdCBtdXN0IGJlIHRydWUgZm9yIGFuIGluc24gdG8gb2NjdXB5IHRoYXQgZGVsYXkgc2xvdAorCQlsb2NhdGlvbi4gIFRoZSBzZWNvbmQgaXMgdHJ1ZSBmb3IgYWxsIGluc25zIHRoYXQgY2FuIGJlCisJCWFubnVsbGVkIGlmIHRoZSBicmFuY2ggaXMgdHJ1ZSBhbmQgdGhlIHRoaXJkIGlzIHRydWUgZm9yIGFsbAorCQlpbnNucyB0aGF0IGNhbiBiZSBhbm51bGxlZCBpZiB0aGUgYnJhbmNoIGlzIGZhbHNlLgorCisgICBNdWx0aXBsZSBERUZJTkVfREVMQVlzIG1heSBiZSBwcmVzZW50LiAgVGhleSBpbmRpY2F0ZSBkaWZmZXJpbmcKKyAgIHJlcXVpcmVtZW50cyBmb3IgZGVsYXkgc2xvdHMuICAqLworREVGX1JUTF9FWFBSKERFRklORV9ERUxBWSwgImRlZmluZV9kZWxheSIsICJlRSIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5lIGF0dHJpYnV0ZSBjb21wdXRhdGlvbiBmb3IgYGFzbScgaW5zdHJ1Y3Rpb25zLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfQVNNX0FUVFJJQlVURVMsICJkZWZpbmVfYXNtX2F0dHJpYnV0ZXMiLCAiViIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiBtZXRhIG9wZXJhdGlvbi4gIEF1dG9tYXRpY2FsbHkKKyAgIGdlbmVyYXRlcyBuZXcgaW5zdGFuY2VzIG9mIERFRklORV9JTlNOLCBzZWxlY3RlZCBieSBoYXZpbmcgYXR0cmlidXRlCisgICAicHJlZGljYWJsZSIgdHJ1ZS4gIFRoZSBuZXcgcGF0dGVybiB3aWxsIGNvbnRhaW4gYSBDT05EX0VYRUMgYW5kIHRoZQorICAgcHJlZGljYXRlIGF0IHRvcC1sZXZlbC4KKworICAgT3BlcmFuZDoKKyAgIDA6IFRoZSBwcmVkaWNhdGUgcGF0dGVybi4gIFRoZSB0b3AtbGV2ZWwgZm9ybSBzaG91bGQgbWF0Y2ggYQorICAgICAgcmVsYXRpb25hbCBvcGVyYXRvci4gIE9wZXJhbmRzIHNob3VsZCBoYXZlIG9ubHkgb25lIGFsdGVybmF0aXZlLgorICAgMTogQSBDIGV4cHJlc3Npb24gZ2l2aW5nIGFuIGFkZGl0aW9uYWwgY29uZGl0aW9uIGZvciByZWNvZ25pemluZworICAgICAgdGhlIGdlbmVyYXRlZCBwYXR0ZXJuLgorICAgMjogQSB0ZW1wbGF0ZSBvciBDIGNvZGUgdG8gcHJvZHVjZSBhc3NlbWJsZXIgb3V0cHV0LgorICAgMzogQSB2ZWN0b3Igb2YgYXR0cmlidXRlcyB0byBhcHBlbmQgdG8gdGhlIHJlc3VsdGluZyBjb25kX2V4ZWMgaW5zbi4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0NPTkRfRVhFQywgImRlZmluZV9jb25kX2V4ZWMiLCAiRXNzViIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhbiBvcGVyYW5kIHByZWRpY2F0ZS4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKyAgIERFRklORV9QUkVESUNBVEUgYW5kIERFRklORV9TUEVDSUFMX1BSRURJQ0FURSBpcyB0aGF0IGdlbnJlY29nIHdpbGwKKyAgIG5vdCB3YXJuIGFib3V0IGEgbWF0Y2hfb3BlcmFuZCB3aXRoIG5vIG1vZGUgaWYgaXQgaGFzIGEgcHJlZGljYXRlCisgICBkZWZpbmVkIHdpdGggREVGSU5FX1NQRUNJQUxfUFJFRElDQVRFLgorCisgICBPcGVyYW5kOgorICAgMDogVGhlIG5hbWUgb2YgdGhlIHByZWRpY2F0ZS4KKyAgIDE6IEEgYm9vbGVhbiBleHByZXNzaW9uIHdoaWNoIGNvbXB1dGVzIHdoZXRoZXIgb3Igbm90IHRoZSBwcmVkaWNhdGUKKyAgICAgIG1hdGNoZXMuICBUaGlzIGV4cHJlc3Npb24gY2FuIHVzZSBJT1IsIEFORCwgTk9ULCBNQVRDSF9PUEVSQU5ELAorICAgICAgTUFUQ0hfQ09ERSwgYW5kIE1BVENIX1RFU1QuICBJdCBtdXN0IGJlIHNwZWNpZmljIGVub3VnaCB0aGF0IGdlbnJlY29nCisgICAgICBjYW4gY2FsY3VsYXRlIHRoZSBzZXQgb2YgUlRYIGNvZGVzIHRoYXQgY2FuIHBvc3NpYmx5IG1hdGNoLgorICAgMjogQSBDIGZ1bmN0aW9uIGJvZHkgd2hpY2ggbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhlIHByZWRpY2F0ZSB0byBtYXRjaC4KKyAgICAgIE9wdGlvbmFsLiAgVXNlIHRoaXMgd2hlbiB0aGUgdGVzdCBpcyB0b28gY29tcGxpY2F0ZWQgdG8gZml0IGludG8gYQorICAgICAgbWF0Y2hfdGVzdCBleHByZXNzaW9uLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfUFJFRElDQVRFLCAiZGVmaW5lX3ByZWRpY2F0ZSIsICJzZXMiLCBSVFhfRVhUUkEpCitERUZfUlRMX0VYUFIoREVGSU5FX1NQRUNJQUxfUFJFRElDQVRFLCAiZGVmaW5lX3NwZWNpYWxfcHJlZGljYXRlIiwgInNlcyIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhIHJlZ2lzdGVyIG9wZXJhbmQgY29uc3RyYWludC4gIFRoaXMgc2ltcGx5IG1hcHMgdGhlCisgICBjb25zdHJhaW50IHN0cmluZyB0byBhIHJlZ2lzdGVyIGNsYXNzLgorCisgICBPcGVyYW5kOgorICAgMDogVGhlIG5hbWUgb2YgdGhlIGNvbnN0cmFpbnQgKG9mdGVuLCBidXQgbm90IGFsd2F5cywgYSBzaW5nbGUgbGV0dGVyKS4KKyAgIDE6IEEgQyBleHByZXNzaW9uIHdoaWNoIGV2YWx1YXRlcyB0byB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXIgY2xhc3MgZm9yCisgICAgICB0aGlzIGNvbnN0cmFpbnQuICBJZiB0aGlzIGlzIG5vdCBqdXN0IGEgY29uc3RhbnQsIGl0IHNob3VsZCBsb29rIG9ubHkKKyAgICAgIGF0IC1tIHN3aXRjaGVzIGFuZCB0aGUgbGlrZS4KKyAgIDI6IEEgZG9jc3RyaW5nIGZvciB0aGlzIGNvbnN0cmFpbnQsIGluIFRleGluZm8gc3ludGF4OyBub3QgY3VycmVudGx5CisgICAgICB1c2VkLCBpbiBmdXR1cmUgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgbWFudWFsJ3MgbGlzdCBvZgorICAgICAgbWFjaGluZS1zcGVjaWZpYyBvcGVyYW5kIGNvbnN0cmFpbnRzLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfUkVHSVNURVJfQ09OU1RSQUlOVCwgImRlZmluZV9yZWdpc3Rlcl9jb25zdHJhaW50IiwgInNzcyIsIFJUWF9FWFRSQSkKKworLyogRGVmaW5pdGlvbiBvZiBhIG5vbi1yZWdpc3RlciBvcGVyYW5kIGNvbnN0cmFpbnQuICBUaGVzZSBsb29rIGF0IHRoZQorICAgb3BlcmFuZCBhbmQgZGVjaWRlIHdoZXRoZXIgaXQgZml0cyB0aGUgY29uc3RyYWludC4KKworICAgREVGSU5FX0NPTlNUUkFJTlQgZ2V0cyBubyBzcGVjaWFsIHRyZWF0bWVudCBpZiBpdCBmYWlscyB0byBtYXRjaC4KKyAgIEl0IGlzIGFwcHJvcHJpYXRlIGZvciBjb25zdGFudC1vbmx5IGNvbnN0cmFpbnRzLCBhbmQgbW9zdCBvdGhlcnMuCisKKyAgIERFRklORV9NRU1PUllfQ09OU1RSQUlOVCB0ZWxscyByZWxvYWQgdGhhdCB0aGlzIGNvbnN0cmFpbnQgY2FuIGJlIG1hZGUKKyAgIHRvIG1hdGNoLCBpZiBpdCBkb2Vzbid0IGFscmVhZHksIGJ5IGNvbnZlcnRpbmcgdGhlIG9wZXJhbmQgdG8gdGhlIGZvcm0KKyAgIChtZW0gKHJlZyBYKSkgd2hlcmUgWCBpcyBhIGJhc2UgcmVnaXN0ZXIuICBJdCBpcyBzdWl0YWJsZSBmb3IgY29uc3RyYWludHMKKyAgIHRoYXQgZGVzY3JpYmUgYSBzdWJzZXQgb2YgYWxsIG1lbW9yeSByZWZlcmVuY2VzLgorCisgICBERUZJTkVfQUREUkVTU19DT05TVFJBSU5UIHRlbGxzIHJlbG9hZCB0aGF0IHRoaXMgY29uc3RyYWludCBjYW4gYmUgbWFkZQorICAgdG8gbWF0Y2gsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSwgYnkgY29udmVydGluZyB0aGUgb3BlcmFuZCB0byB0aGUgZm9ybQorICAgKHJlZyBYKSB3aGVyZSBYIGlzIGEgYmFzZSByZWdpc3Rlci4gIEl0IGlzIHN1aXRhYmxlIGZvciBjb25zdHJhaW50cyB0aGF0CisgICBkZXNjcmliZSBhIHN1YnNldCBvZiBhbGwgYWRkcmVzcyByZWZlcmVuY2VzLgorCisgICBXaGVuIGluIGRvdWJ0LCB1c2UgcGxhaW4gREVGSU5FX0NPTlNUUkFJTlQuCisKKyAgIE9wZXJhbmQ6CisgICAwOiBUaGUgbmFtZSBvZiB0aGUgY29uc3RyYWludCAob2Z0ZW4sIGJ1dCBub3QgYWx3YXlzLCBhIHNpbmdsZSBsZXR0ZXIpLgorICAgMTogQSBkb2NzdHJpbmcgZm9yIHRoaXMgY29uc3RyYWludCwgaW4gVGV4aW5mbyBzeW50YXg7IG5vdCBjdXJyZW50bHkKKyAgICAgIHVzZWQsIGluIGZ1dHVyZSB3aWxsIGJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBtYW51YWwncyBsaXN0IG9mCisgICAgICBtYWNoaW5lLXNwZWNpZmljIG9wZXJhbmQgY29uc3RyYWludHMuCisgICAyOiBBIGJvb2xlYW4gZXhwcmVzc2lvbiB3aGljaCBjb21wdXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY29uc3RyYWludAorICAgICAgbWF0Y2hlcy4gIEl0IHNob3VsZCBmb2xsb3cgdGhlIHNhbWUgcnVsZXMgYXMgYSBkZWZpbmVfcHJlZGljYXRlCisgICAgICBleHByZXNzaW9uLCBpbmNsdWRpbmcgdGhlIGJpdCBhYm91dCBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgUlRYIGNvZGVzCisgICAgICB0aGF0IGNvdWxkIHBvc3NpYmx5IG1hdGNoLiAgTUFUQ0hfVEVTVCBzdWJleHByZXNzaW9ucyBtYXkgbWFrZSB1c2Ugb2YKKyAgICAgIHRoZXNlIHZhcmlhYmxlczoKKyAgICAgICAgYG9wJyAgICAtIHRoZSBSVEwgb2JqZWN0IGRlZmluaW5nIHRoZSBvcGVyYW5kLgorICAgICAgICBgbW9kZScgIC0gdGhlIG1vZGUgb2YgYG9wJy4KKwlgaXZhbCcgIC0gSU5UVkFMKG9wKSwgaWYgb3AgaXMgYSBDT05TVF9JTlQuCisgICAgICAgIGBodmFsJyAgLSBDT05TVF9ET1VCTEVfSElHSChvcCksIGlmIG9wIGlzIGFuIGludGVnZXIgQ09OU1RfRE9VQkxFLgorICAgICAgICBgbHZhbCcgIC0gQ09OU1RfRE9VQkxFX0xPVyhvcCksIGlmIG9wIGlzIGFuIGludGVnZXIgQ09OU1RfRE9VQkxFLgorICAgICAgICBgcnZhbCcgIC0gQ09OU1RfRE9VQkxFX1JFQUxfVkFMVUUob3ApLCBpZiBvcCBpcyBhIGZsb2F0aW5nLXBvaW50CisgICAgICAgICAgICAgICAgICBDT05TVF9ET1VCTEUuCisgICAgICBEbyBub3QgdXNlIGl2YWwvaHZhbC9sdmFsL3J2YWwgaWYgb3AgaXMgbm90IHRoZSBhcHByb3ByaWF0ZSBraW5kIG9mCisgICAgICBSVEwgb2JqZWN0LiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfQ09OU1RSQUlOVCwgImRlZmluZV9jb25zdHJhaW50IiwgInNzZSIsIFJUWF9FWFRSQSkKK0RFRl9SVExfRVhQUihERUZJTkVfTUVNT1JZX0NPTlNUUkFJTlQsICJkZWZpbmVfbWVtb3J5X2NvbnN0cmFpbnQiLCAic3NlIiwgUlRYX0VYVFJBKQorREVGX1JUTF9FWFBSKERFRklORV9BRERSRVNTX0NPTlNUUkFJTlQsICJkZWZpbmVfYWRkcmVzc19jb25zdHJhaW50IiwgInNzZSIsIFJUWF9FWFRSQSkKKworCisvKiBDb25zdHJ1Y3Rpb25zIGZvciBDUFUgcGlwZWxpbmUgZGVzY3JpcHRpb24gZGVzY3JpYmVkIGJ5IE5ERkFzLiAgKi8KKworLyogKGRlZmluZV9jcHVfdW5pdCBzdHJpbmcgW3N0cmluZ10pIGRlc2NyaWJlcyBjcHUgZnVuY3Rpb25hbAorICAgdW5pdHMgKHNlcGFyYXRlZCBieSBjb21tYSkuCisKKyAgIDFzdCBvcGVyYW5kOiBOYW1lcyBvZiBjcHUgZnVuY3Rpb25hbCB1bml0cy4KKyAgIDJuZCBvcGVyYW5kOiBOYW1lIG9mIGF1dG9tYXRvbiAoc2VlIGNvbW1lbnRzIGZvciBERUZJTkVfQVVUT01BVE9OKS4KKworICAgQWxsIGRlZmluZV9yZXNlcnZhdGlvbnMsIGRlZmluZV9jcHVfdW5pdHMsIGFuZAorICAgZGVmaW5lX3F1ZXJ5X2NwdV91bml0cyBzaG91bGQgaGF2ZSB1bmlxdWUgbmFtZXMgd2hpY2ggbWF5IG5vdCBiZQorICAgIm5vdGhpbmciLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfQ1BVX1VOSVQsICJkZWZpbmVfY3B1X3VuaXQiLCAic1MiLCBSVFhfRVhUUkEpCisKKy8qIChkZWZpbmVfcXVlcnlfY3B1X3VuaXQgc3RyaW5nIFtzdHJpbmddKSBkZXNjcmliZXMgY3B1IGZ1bmN0aW9uYWwKKyAgIHVuaXRzIGFuYWxvZ291c2x5IHRvIGRlZmluZV9jcHVfdW5pdC4gIFRoZSByZXNlcnZhdGlvbiBvZiBzdWNoCisgICB1bml0cyBjYW4gYmUgcXVlcmllZCBmb3IgYXV0b21hdG9uIHN0YXRlLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfUVVFUllfQ1BVX1VOSVQsICJkZWZpbmVfcXVlcnlfY3B1X3VuaXQiLCAic1MiLCBSVFhfRVhUUkEpCisKKy8qIChleGNsdXNpb25fc2V0IHN0cmluZyBzdHJpbmcpIG1lYW5zIHRoYXQgZWFjaCBDUFUgZnVuY3Rpb25hbCB1bml0CisgICBpbiB0aGUgZmlyc3Qgc3RyaW5nIGNhbiBub3QgYmUgcmVzZXJ2ZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhbnkKKyAgIHVuaXQgd2hvc2UgbmFtZSBpcyBpbiB0aGUgc2Vjb25kIHN0cmluZyBhbmQgdmlzZSB2ZXJzYS4gIENQVSB1bml0cworICAgaW4gdGhlIHN0cmluZyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIEZvciBleGFtcGxlLCBpdCBpcyB1c2VmdWwKKyAgIGZvciBkZXNjcmlwdGlvbiBDUFUgd2l0aCBmdWxseSBwaXBlbGluZWQgZmxvYXRpbmcgcG9pbnQgZnVuY3Rpb25hbAorICAgdW5pdCB3aGljaCBjYW4gZXhlY3V0ZSBzaW11bHRhbmVvdXNseSBvbmx5IHNpbmdsZSBmbG9hdGluZyBwb2ludAorICAgaW5zbnMgb3Igb25seSBkb3VibGUgZmxvYXRpbmcgcG9pbnQgaW5zbnMuICBBbGwgQ1BVIGZ1bmN0aW9uYWwKKyAgIHVuaXRzIGluIGEgc2V0IHNob3VsZCBiZWxvbmcgdG8gdGhlIHNhbWUgYXV0b21hdG9uLiAgKi8KK0RFRl9SVExfRVhQUihFWENMVVNJT05fU0VULCAiZXhjbHVzaW9uX3NldCIsICJzcyIsIFJUWF9FWFRSQSkKKworLyogKHByZXNlbmNlX3NldCBzdHJpbmcgc3RyaW5nKSBtZWFucyB0aGF0IGVhY2ggQ1BVIGZ1bmN0aW9uYWwgdW5pdCBpbgorICAgdGhlIGZpcnN0IHN0cmluZyBjYW4gbm90IGJlIHJlc2VydmVkIHVubGVzcyBhdCBsZWFzdCBvbmUgb2YgcGF0dGVybgorICAgb2YgdW5pdHMgd2hvc2UgbmFtZXMgYXJlIGluIHRoZSBzZWNvbmQgc3RyaW5nIGlzIHJlc2VydmVkLiAgVGhpcyBpcworICAgYW4gYXN5bW1ldHJpYyByZWxhdGlvbi4gIENQVSB1bml0cyBvciB1bml0IHBhdHRlcm5zIGluIHRoZSBzdHJpbmdzCisgICBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIFBhdHRlcm4gaXMgb25lIHVuaXQgbmFtZSBvciB1bml0IG5hbWVzCisgICBzZXBhcmF0ZWQgYnkgd2hpdGUtc3BhY2VzLgorCisgICBGb3IgZXhhbXBsZSwgaXQgaXMgdXNlZnVsIGZvciBkZXNjcmlwdGlvbiB0aGF0IHNsb3QxIGlzIHJlc2VydmVkCisgICBhZnRlciBzbG90MCByZXNlcnZhdGlvbiBmb3IgYSBWTElXIHByb2Nlc3Nvci4gIFdlIGNvdWxkIGRlc2NyaWJlIGl0CisgICBieSB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdGlvbgorCisgICAgICAocHJlc2VuY2Vfc2V0ICJzbG90MSIgInNsb3QwIikKKworICAgT3Igc2xvdDEgaXMgcmVzZXJ2ZWQgb25seSBhZnRlciBzbG90MCBhbmQgdW5pdCBiMCByZXNlcnZhdGlvbi4gIEluCisgICB0aGlzIGNhc2Ugd2UgY291bGQgd3JpdGUKKworICAgICAgKHByZXNlbmNlX3NldCAic2xvdDEiICJzbG90MCBiMCIpCisKKyAgIEFsbCBDUFUgZnVuY3Rpb25hbCB1bml0cyBpbiBhIHNldCBzaG91bGQgYmVsb25nIHRvIHRoZSBzYW1lCisgICBhdXRvbWF0b24uICAqLworREVGX1JUTF9FWFBSKFBSRVNFTkNFX1NFVCwgInByZXNlbmNlX3NldCIsICJzcyIsIFJUWF9FWFRSQSkKKworLyogKGZpbmFsX3ByZXNlbmNlX3NldCBzdHJpbmcgc3RyaW5nKSBpcyBhbmFsb2dvdXMgdG8gYHByZXNlbmNlX3NldCcuCisgICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMgd2hlbiBjaGVja2luZyBpcyBkb25lLiAgV2hlbiBhbgorICAgaW5zdHJ1Y3Rpb24gaXMgaXNzdWVkIGluIGdpdmVuIGF1dG9tYXRvbiBzdGF0ZSByZWZsZWN0aW5nIGFsbAorICAgY3VycmVudCBhbmQgcGxhbm5lZCB1bml0IHJlc2VydmF0aW9ucywgdGhlIGF1dG9tYXRvbiBzdGF0ZSBpcworICAgY2hhbmdlZC4gIFRoZSBmaXJzdCBzdGF0ZSBpcyBhIHNvdXJjZSBzdGF0ZSwgdGhlIHNlY29uZCBvbmUgaXMgYQorICAgcmVzdWx0IHN0YXRlLiAgQ2hlY2tpbmcgZm9yIGBwcmVzZW5jZV9zZXQnIGlzIGRvbmUgb24gdGhlIHNvdXJjZQorICAgc3RhdGUgcmVzZXJ2YXRpb24sIGNoZWNraW5nIGZvciBgZmluYWxfcHJlc2VuY2Vfc2V0JyBpcyBkb25lIG9uIHRoZQorICAgcmVzdWx0IHJlc2VydmF0aW9uLiAgVGhpcyBjb25zdHJ1Y3Rpb24gaXMgdXNlZnVsIHRvIGRlc2NyaWJlIGEKKyAgIHJlc2VydmF0aW9uIHdoaWNoIGlzIGFjdHVhbGx5IHR3byBzdWJzZXF1ZW50IHJlc2VydmF0aW9ucy4gIEZvcgorICAgZXhhbXBsZSwgaWYgd2UgdXNlCisKKyAgICAgIChwcmVzZW5jZV9zZXQgInNsb3QxIiAic2xvdDAiKQorCisgICB0aGUgZm9sbG93aW5nIGluc24gd2lsbCBiZSBuZXZlciBpc3N1ZWQgKGJlY2F1c2Ugc2xvdDEgcmVxdWlyZXMKKyAgIHNsb3QwIHdoaWNoIGlzIGFic2VudCBpbiB0aGUgc291cmNlIHN0YXRlKS4KKworICAgICAgKGRlZmluZV9yZXNlcnZhdGlvbiAiaW5zbl9hbmRfbm9wIiAic2xvdDAgKyBzbG90MSIpCisKKyAgIGJ1dCBpdCBjYW4gYmUgaXNzdWVkIGlmIHdlIHVzZSBhbmFsb2dvdXMgYGZpbmFsX3ByZXNlbmNlX3NldCcuICAqLworREVGX1JUTF9FWFBSKEZJTkFMX1BSRVNFTkNFX1NFVCwgImZpbmFsX3ByZXNlbmNlX3NldCIsICJzcyIsIFJUWF9FWFRSQSkKKworLyogKGFic2VuY2Vfc2V0IHN0cmluZyBzdHJpbmcpIG1lYW5zIHRoYXQgZWFjaCBDUFUgZnVuY3Rpb25hbCB1bml0IGluCisgICB0aGUgZmlyc3Qgc3RyaW5nIGNhbiBiZSByZXNlcnZlZCBvbmx5IGlmIGVhY2ggcGF0dGVybiBvZiB1bml0cworICAgd2hvc2UgbmFtZXMgYXJlIGluIHRoZSBzZWNvbmQgc3RyaW5nIGlzIG5vdCByZXNlcnZlZC4gIFRoaXMgaXMgYW4KKyAgIGFzeW1tZXRyaWMgcmVsYXRpb24gKGFjdHVhbGx5IGV4Y2x1c2lvbiBzZXQgaXMgYW5hbG9nb3VzIHRvIHRoaXMKKyAgIG9uZSBidXQgaXQgaXMgc3ltbWV0cmljKS4gIENQVSB1bml0cyBvciB1bml0IHBhdHRlcm5zIGluIHRoZSBzdHJpbmcKKyAgIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgUGF0dGVybiBpcyBvbmUgdW5pdCBuYW1lIG9yIHVuaXQgbmFtZXMKKyAgIHNlcGFyYXRlZCBieSB3aGl0ZS1zcGFjZXMuCisKKyAgIEZvciBleGFtcGxlLCBpdCBpcyB1c2VmdWwgZm9yIGRlc2NyaXB0aW9uIHRoYXQgc2xvdDAgY2FuIG5vdCBiZQorICAgcmVzZXJ2ZWQgYWZ0ZXIgc2xvdDEgb3Igc2xvdDIgcmVzZXJ2YXRpb24gZm9yIGEgVkxJVyBwcm9jZXNzb3IuICBXZQorICAgY291bGQgZGVzY3JpYmUgaXQgYnkgdGhlIGZvbGxvd2luZyBjb25zdHJ1Y3Rpb24KKworICAgICAgKGFic2VuY2Vfc2V0ICJzbG90MiIgInNsb3QwLCBzbG90MSIpCisKKyAgIE9yIHNsb3QyIGNhbiBub3QgYmUgcmVzZXJ2ZWQgaWYgc2xvdDAgYW5kIHVuaXQgYjAgYXJlIHJlc2VydmVkIG9yCisgICBzbG90MSBhbmQgdW5pdCBiMSBhcmUgcmVzZXJ2ZWQgLiAgSW4gdGhpcyBjYXNlIHdlIGNvdWxkIHdyaXRlCisKKyAgICAgIChhYnNlbmNlX3NldCAic2xvdDIiICJzbG90MCBiMCwgc2xvdDEgYjEiKQorCisgICBBbGwgQ1BVIGZ1bmN0aW9uYWwgdW5pdHMgaW4gYSBzZXQgc2hvdWxkIHRvIGJlbG9uZyB0aGUgc2FtZQorICAgYXV0b21hdG9uLiAgKi8KK0RFRl9SVExfRVhQUihBQlNFTkNFX1NFVCwgImFic2VuY2Vfc2V0IiwgInNzIiwgUlRYX0VYVFJBKQorCisvKiAoZmluYWxfYWJzZW5jZV9zZXQgc3RyaW5nIHN0cmluZykgaXMgYW5hbG9nb3VzIHRvIGBhYnNlbmNlX3NldCcgYnV0CisgICBjaGVja2luZyBpcyBkb25lIG9uIHRoZSByZXN1bHQgKHN0YXRlKSByZXNlcnZhdGlvbi4gIFNlZSBjb21tZW50cworICAgZm9yIGBmaW5hbF9wcmVzZW5jZV9zZXQnLiAgKi8KK0RFRl9SVExfRVhQUihGSU5BTF9BQlNFTkNFX1NFVCwgImZpbmFsX2Fic2VuY2Vfc2V0IiwgInNzIiwgUlRYX0VYVFJBKQorCisvKiAoZGVmaW5lX2J5cGFzcyBudW1iZXIgb3V0X2luc25fbmFtZXMgaW5faW5zbl9uYW1lcykgbmFtZXMgYnlwYXNzCisgICB3aXRoIGdpdmVuIGxhdGVuY3kgKHRoZSBmaXJzdCBudW1iZXIpIGZyb20gaW5zbnMgZ2l2ZW4gYnkgdGhlIGZpcnN0CisgICBzdHJpbmcgKHNlZSBkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbikgaW50byBpbnNucyBnaXZlbiBieSB0aGUgc2Vjb25kCisgICBzdHJpbmcuICBJbnNuIG5hbWVzIGluIHRoZSBzdHJpbmdzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhlCisgICB0aGlyZCBvcGVyYW5kIGlzIG9wdGlvbmFsIG5hbWUgb2YgZnVuY3Rpb24gd2hpY2ggaXMgYWRkaXRpb25hbAorICAgZ3VhcmQgZm9yIHRoZSBieXBhc3MuICBUaGUgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHR3byBpbnNucyBhcworICAgcGFyYW1ldGVycy4gIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHplcm8gdGhlIGJ5cGFzcyB3aWxsIGJlCisgICBpZ25vcmVkIGZvciB0aGlzIGNhc2UuICBBZGRpdGlvbmFsIGd1YXJkIGlzIG5lY2Vzc2FyeSB0byByZWNvZ25pemUKKyAgIGNvbXBsaWNhdGVkIGJ5cGFzc2VzLCBlLmcuIHdoZW4gY29uc3VtZXIgaXMgbG9hZCBhZGRyZXNzLiAgSWYgdGhlcmUKKyAgIGFyZSBtb3JlIG9uZSBieXBhc3Mgd2l0aCB0aGUgc2FtZSBvdXRwdXQgYW5kIGlucHV0IGluc25zLCB0aGUKKyAgIGNob3NlbiBieXBhc3MgaXMgdGhlIGZpcnN0IGJ5cGFzcyB3aXRoIGEgZ3VhcmQgaW4gZGVzY3JpcHRpb24gd2hvc2UKKyAgIGd1YXJkIGZ1bmN0aW9uIHJldHVybnMgbm9uemVyby4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggYnlwYXNzLCB0aGVuCisgICBieXBhc3Mgd2l0aG91dCB0aGUgZ3VhcmQgZnVuY3Rpb24gaXMgY2hvc2VuLiAgKi8KK0RFRl9SVExfRVhQUihERUZJTkVfQllQQVNTLCAiZGVmaW5lX2J5cGFzcyIsICJpc3NTIiwgUlRYX0VYVFJBKQorCisvKiAoZGVmaW5lX2F1dG9tYXRvbiBzdHJpbmcpIGRlc2NyaWJlcyBuYW1lcyBvZiBhdXRvbWF0YSBnZW5lcmF0ZWQgYW5kCisgICB1c2VkIGZvciBwaXBlbGluZSBoYXphcmRzIHJlY29nbml0aW9uLiAgVGhlIG5hbWVzIGFyZSBzZXBhcmF0ZWQgYnkKKyAgIGNvbW1hLiAgQWN0dWFsbHkgaXQgaXMgcG9zc2libHkgdG8gZ2VuZXJhdGUgdGhlIHNpbmdsZSBhdXRvbWF0b24KKyAgIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGNhbiBiZSB2ZXJ5IGxhcmdlLiAgSWYgd2UgdXNlIG1vcmUgb25lCisgICBhdXRvbWF0YSwgdGhlIHN1bW1hcnkgc2l6ZSBvZiB0aGUgYXV0b21hdGEgdXN1YWxseSBpcyBsZXNzIHRoYW4gdGhlCisgICBzaW5nbGUgb25lLiAgVGhlIGF1dG9tYXRvbiBuYW1lIGlzIHVzZWQgaW4gZGVmaW5lX2NwdV91bml0IGFuZAorICAgZGVmaW5lX3F1ZXJ5X2NwdV91bml0LiAgQWxsIGF1dG9tYXRhIHNob3VsZCBoYXZlIHVuaXF1ZSBuYW1lcy4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0FVVE9NQVRPTiwgImRlZmluZV9hdXRvbWF0b24iLCAicyIsIFJUWF9FWFRSQSkKKworLyogKGF1dG9tYXRhX29wdGlvbiBzdHJpbmcpIGRlc2NyaWJlcyBvcHRpb24gZm9yIGdlbmVyYXRpb24gb2YKKyAgIGF1dG9tYXRhLiAgQ3VycmVudGx5IHRoZXJlIGFyZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAgIG8gIm5vLW1pbmltaXphdGlvbiIgd2hpY2ggbWFrZXMgbm8gbWluaW1pemF0aW9uIG9mIGF1dG9tYXRhLiAgVGhpcworICAgICBpcyBvbmx5IHdvcnRoIHRvIGRvIHdoZW4gd2UgYXJlIGRlYnVnZ2luZyB0aGUgZGVzY3JpcHRpb24gYW5kCisgICAgIG5lZWQgdG8gbG9vayBtb3JlIGFjY3VyYXRlbHkgYXQgcmVzZXJ2YXRpb25zIG9mIHN0YXRlcy4KKworICAgbyAidGltZSIgd2hpY2ggbWVhbnMgcHJpbnRpbmcgYWRkaXRpb25hbCB0aW1lIHN0YXRpc3RpY3MgYWJvdXQKKyAgICAgIGdlbmVyYXRpb24gb2YgYXV0b21hdGEuCisKKyAgIG8gInYiIHdoaWNoIG1lYW5zIGdlbmVyYXRpb24gb2YgZmlsZSBkZXNjcmliaW5nIHRoZSByZXN1bHQKKyAgICAgYXV0b21hdGEuICBUaGUgZmlsZSBoYXMgc3VmZml4IGAuZGZhJyBhbmQgY2FuIGJlIHVzZWQgZm9yIHRoZQorICAgICBkZXNjcmlwdGlvbiB2ZXJpZmljYXRpb24gYW5kIGRlYnVnZ2luZy4KKworICAgbyAidyIgd2hpY2ggbWVhbnMgZ2VuZXJhdGlvbiBvZiB3YXJuaW5nIGluc3RlYWQgb2YgZXJyb3IgZm9yCisgICAgIG5vbi1jcml0aWNhbCBlcnJvcnMuCisKKyAgIG8gIm5kZmEiIHdoaWNoIG1ha2VzIG5vbmRldGVybWluaXN0aWMgZmluaXRlIHN0YXRlIGF1dG9tYXRhLgorCisgICBvICJwcm9ncmVzcyIgd2hpY2ggbWVhbnMgb3V0cHV0IG9mIGEgcHJvZ3Jlc3MgYmFyIHNob3dpbmcgaG93IG1hbnkKKyAgICAgc3RhdGVzIHdlcmUgZ2VuZXJhdGVkIHNvIGZhciBmb3IgYXV0b21hdG9uIGJlaW5nIHByb2Nlc3NlZC4gICovCitERUZfUlRMX0VYUFIoQVVUT01BVEFfT1BUSU9OLCAiYXV0b21hdGFfb3B0aW9uIiwgInMiLCBSVFhfRVhUUkEpCisKKy8qIChkZWZpbmVfcmVzZXJ2YXRpb24gc3RyaW5nIHN0cmluZykgbmFtZXMgcmVzZXJ2YXRpb24gKHRoZSBmaXJzdAorICAgc3RyaW5nKSBvZiBjcHUgZnVuY3Rpb25hbCB1bml0cyAodGhlIDJuZCBzdHJpbmcpLiAgU29tZXRpbWVzIHVuaXQKKyAgIHJlc2VydmF0aW9ucyBmb3IgZGlmZmVyZW50IGluc25zIGNvbnRhaW4gY29tbW9uIHBhcnRzLiAgSW4gc3VjaAorICAgY2FzZSwgeW91IGNhbiBkZXNjcmliZSBjb21tb24gcGFydCBhbmQgdXNlIGl0cyBuYW1lICh0aGUgMXN0CisgICBwYXJhbWV0ZXIpIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbi4gIEFsbAorICAgZGVmaW5lX3Jlc2VydmF0aW9ucywgZGVmaW5lX2NwdV91bml0cywgYW5kIGRlZmluZV9xdWVyeV9jcHVfdW5pdHMKKyAgIHNob3VsZCBoYXZlIHVuaXF1ZSBuYW1lcyB3aGljaCBtYXkgbm90IGJlICJub3RoaW5nIi4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX1JFU0VSVkFUSU9OLCAiZGVmaW5lX3Jlc2VydmF0aW9uIiwgInNzIiwgUlRYX0VYVFJBKQorCisvKiAoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gbmFtZSBkZWZhdWx0X2xhdGVuY3kgY29uZGl0aW9uIHJlZ2V4cHIpCisgICBkZXNjcmliZXMgcmVzZXJ2YXRpb24gb2YgY3B1IGZ1bmN0aW9uYWwgdW5pdHMgKHRoZSAzbmQgb3BlcmFuZCkgZm9yCisgICBpbnN0cnVjdGlvbiB3aGljaCBpcyBzZWxlY3RlZCBieSB0aGUgY29uZGl0aW9uICh0aGUgMm5kIHBhcmFtZXRlcikuCisgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIG91dHB1dCBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisgICBUaGUgcmVzZXJ2YXRpb25zIGFyZSBkZXNjcmliZWQgYnkgYSByZWd1bGFyIGV4cHJlc3Npb24gYWNjb3JkaW5nCisgICB0aGUgZm9sbG93aW5nIHN5bnRheDoKKworICAgICAgIHJlZ2V4cCA9IHJlZ2V4cCAiLCIgb25lb2YKKyAgICAgICAgICAgICAgfCBvbmVvZgorCisgICAgICAgb25lb2YgPSBvbmVvZiAifCIgYWxsb2YKKyAgICAgICAgICAgICB8IGFsbG9mCisKKyAgICAgICBhbGxvZiA9IGFsbG9mICIrIiByZXBlYXQKKyAgICAgICAgICAgICB8IHJlcGVhdAorCisgICAgICAgcmVwZWF0ID0gZWxlbWVudCAiKiIgbnVtYmVyCisgICAgICAgICAgICAgIHwgZWxlbWVudAorCisgICAgICAgZWxlbWVudCA9IGNwdV9mdW5jdGlvbl91bml0X25hbWUKKyAgICAgICAgICAgICAgIHwgcmVzZXJ2YXRpb25fbmFtZQorICAgICAgICAgICAgICAgfCByZXN1bHRfbmFtZQorICAgICAgICAgICAgICAgfCAibm90aGluZyIKKyAgICAgICAgICAgICAgIHwgIigiIHJlZ2V4cCAiKSIKKworICAgICAgIDEuICIsIiBpcyB1c2VkIGZvciBkZXNjcmliaW5nIHN0YXJ0IG9mIHRoZSBuZXh0IGN5Y2xlIGluCisgICAgICAgcmVzZXJ2YXRpb24uCisKKyAgICAgICAyLiAifCIgaXMgdXNlZCBmb3IgZGVzY3JpYmluZyB0aGUgcmVzZXJ2YXRpb24gZGVzY3JpYmVkIGJ5IHRoZQorICAgICAgIGZpcnN0IHJlZ3VsYXIgZXhwcmVzc2lvbiAqb3IqIHRoZSByZXNlcnZhdGlvbiBkZXNjcmliZWQgYnkgdGhlCisgICAgICAgc2Vjb25kIHJlZ3VsYXIgZXhwcmVzc2lvbiAqb3IqIGV0Yy4KKworICAgICAgIDMuICIrIiBpcyB1c2VkIGZvciBkZXNjcmliaW5nIHRoZSByZXNlcnZhdGlvbiBkZXNjcmliZWQgYnkgdGhlCisgICAgICAgZmlyc3QgcmVndWxhciBleHByZXNzaW9uICphbmQqIHRoZSByZXNlcnZhdGlvbiBkZXNjcmliZWQgYnkgdGhlCisgICAgICAgc2Vjb25kIHJlZ3VsYXIgZXhwcmVzc2lvbiAqYW5kKiBldGMuCisKKyAgICAgICA0LiAiKiIgaXMgdXNlZCBmb3IgY29udmVuaWVuY2UgYW5kIHNpbXBseSBtZWFucyBzZXF1ZW5jZSBpbgorICAgICAgIHdoaWNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYXJlIHJlcGVhdGVkIE5VTUJFUiB0aW1lcyB3aXRoCisgICAgICAgY3ljbGUgYWR2YW5jaW5nIChzZWUgIiwiKS4KKworICAgICAgIDUuIGNwdSBmdW5jdGlvbmFsIHVuaXQgbmFtZSB3aGljaCBtZWFucyBpdHMgcmVzZXJ2YXRpb24uCisKKyAgICAgICA2LiByZXNlcnZhdGlvbiBuYW1lIC0tIHNlZSBkZWZpbmVfcmVzZXJ2YXRpb24uCisKKyAgICAgICA3LiBzdHJpbmcgIm5vdGhpbmciIG1lYW5zIG5vIHVuaXRzIHJlc2VydmF0aW9uLiAgKi8KKworREVGX1JUTF9FWFBSKERFRklORV9JTlNOX1JFU0VSVkFUSU9OLCAiZGVmaW5lX2luc25fcmVzZXJ2YXRpb24iLCAic2llcyIsIFJUWF9FWFRSQSkKKworLyogRXhwcmVzc2lvbnMgdXNlZCBmb3IgaW5zbiBhdHRyaWJ1dGVzLiAgKi8KKworLyogRGVmaW5pdGlvbiBvZiBhbiBpbnNuIGF0dHJpYnV0ZS4KKyAgIDFzdCBvcGVyYW5kOiBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKKyAgIDJuZCBvcGVyYW5kOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwb3NzaWJsZSBhdHRyaWJ1dGUgdmFsdWVzCisgICAzcmQgb3BlcmFuZDogZXhwcmVzc2lvbiBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0FUVFIsICJkZWZpbmVfYXR0ciIsICJzc2UiLCBSVFhfRVhUUkEpCisKKy8qIERlZmluaXRpb24gb2YgYW4gaW5zbiBhdHRyaWJ1dGUgdGhhdCB1c2VzIGFuIGV4aXN0aW5nIGVudW1lcmF0ZWQgdHlwZS4KKyAgIDFzdCBvcGVyYW5kOiBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKKyAgIDJuZCBvcGVyYW5kOiB0aGUgbmFtZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlCisgICAzcmQgb3BlcmFuZDogZXhwcmVzc2lvbiBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4gICovCitERUZfUlRMX0VYUFIoREVGSU5FX0VOVU1fQVRUUiwgImRlZmluZV9lbnVtX2F0dHIiLCAic3NlIiwgUlRYX0VYVFJBKQorCisvKiBNYXJrZXIgZm9yIHRoZSBuYW1lIG9mIGFuIGF0dHJpYnV0ZS4gICovCitERUZfUlRMX0VYUFIoQVRUUiwgImF0dHIiLCAicyIsIFJUWF9FWFRSQSkKKworLyogRm9yIHVzZSBpbiB0aGUgbGFzdCAob3B0aW9uYWwpIG9wZXJhbmQgb2YgREVGSU5FX0lOU04gb3IgREVGSU5FX1BFRVBIT0xFIGFuZAorICAgaW4gREVGSU5FX0FTTV9JTlNOIHRvIHNwZWNpZnkgYW4gYXR0cmlidXRlIHRvIGFzc2lnbiB0byBpbnNucyBtYXRjaGluZyB0aGF0CisgICBwYXR0ZXJuLgorCisgICAoc2V0X2F0dHIgIm5hbWUiICJ2YWx1ZSIpIGlzIGVxdWl2YWxlbnQgdG8KKyAgIChzZXQgKGF0dHIgIm5hbWUiKSAoY29uc3Rfc3RyaW5nICJ2YWx1ZSIpKSAgKi8KK0RFRl9SVExfRVhQUihTRVRfQVRUUiwgInNldF9hdHRyIiwgInNzIiwgUlRYX0VYVFJBKQorCisvKiBJbiB0aGUgbGFzdCBvcGVyYW5kIG9mIERFRklORV9JTlNOIGFuZCBERUZJTkVfUEVFUEhPTEUsIHRoaXMgY2FuIGJlIHVzZWQgdG8KKyAgIHNwZWNpZnkgdGhhdCBhdHRyaWJ1dGUgdmFsdWVzIGFyZSB0byBiZSBhc3NpZ25lZCBhY2NvcmRpbmcgdG8gdGhlCisgICBhbHRlcm5hdGl2ZSBtYXRjaGVkLgorCisgICBUaGUgZm9sbG93aW5nIHRocmVlIGV4cHJlc3Npb25zIGFyZSBlcXVpdmFsZW50OgorCisgICAoc2V0IChhdHRyICJhdHQiKSAoY29uZCBbKGVxX2F0dHJxICJhbHRlcm5hdGl2ZSIgIjEiKSAoY29uc3Rfc3RyaW5nICJhMSIpCisJCQkgICAgKGVxX2F0dHJxICJhbHRlcm5hdGl2ZSIgIjIiKSAoY29uc3Rfc3RyaW5nICJhMiIpXQorCQkJICAgKGNvbnN0X3N0cmluZyAiYTMiKSkpCisgICAoc2V0X2F0dHJfYWx0ZXJuYXRpdmUgImF0dCIgWyhjb25zdF9zdHJpbmcgImExIikgKGNvbnN0X3N0cmluZyAiYTIiKQorCQkJCSAoY29uc3Rfc3RyaW5nICJhMyIpXSkKKyAgIChzZXRfYXR0ciAiYXR0IiAiYTEsYTIsYTMiKQorICovCitERUZfUlRMX0VYUFIoU0VUX0FUVFJfQUxURVJOQVRJVkUsICJzZXRfYXR0cl9hbHRlcm5hdGl2ZSIsICJzRSIsIFJUWF9FWFRSQSkKKworLyogQSBjb25kaXRpb25hbCBleHByZXNzaW9uIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIG9mCisgICB0aGUgY3VycmVudCBpbnNuIGVxdWFscyB0aGUgc3BlY2lmaWVkIHZhbHVlLiAgVGhlIGZpcnN0IG9wZXJhbmQgaXMgdGhlCisgICBhdHRyaWJ1dGUgbmFtZSBhbmQgdGhlIHNlY29uZCBpcyB0aGUgY29tcGFyaXNvbiB2YWx1ZS4gICovCitERUZfUlRMX0VYUFIoRVFfQVRUUiwgImVxX2F0dHIiLCAic3MiLCBSVFhfRVhUUkEpCisKKy8qIEEgc3BlY2lhbCBjYXNlIG9mIHRoZSBhYm92ZSByZXByZXNlbnRpbmcgYSBzZXQgb2YgYWx0ZXJuYXRpdmVzLiAgVGhlIGZpcnN0CisgICBvcGVyYW5kIGlzIGJpdG1hcCBvZiB0aGUgc2V0LCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4gICovCitERUZfUlRMX0VYUFIoRVFfQVRUUl9BTFQsICJlcV9hdHRyX2FsdCIsICJpaSIsIFJUWF9FWFRSQSkKKworLyogQSBjb25kaXRpb25hbCBleHByZXNzaW9uIHdoaWNoIGlzIHRydWUgaWYgdGhlIHNwZWNpZmllZCBmbGFnIGlzCisgICB0cnVlIGZvciB0aGUgaW5zbiBiZWluZyBzY2hlZHVsZWQgaW4gcmVvcmcuCisKKyAgIGdlbmF0dHIuYyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZmxhZ3Mgd2hpY2ggY2FuIGJlIHRlc3RlZCBieQorICAgKGF0dHJfZmxhZyAiZm9vIikgZXhwcmVzc2lvbnMgaW4gZWxpZ2libGVfZm9yX2RlbGF5OiBmb3J3YXJkLCBiYWNrd2FyZC4gICovCisKK0RFRl9SVExfRVhQUiAoQVRUUl9GTEFHLCAiYXR0cl9mbGFnIiwgInMiLCBSVFhfRVhUUkEpCisKKy8qIEdlbmVyYWwgY29uZGl0aW9uYWwuIFRoZSBmaXJzdCBvcGVyYW5kIGlzIGEgdmVjdG9yIGNvbXBvc2VkIG9mIHBhaXJzIG9mCisgICBleHByZXNzaW9ucy4gIFRoZSBmaXJzdCBlbGVtZW50IG9mIGVhY2ggcGFpciBpcyBldmFsdWF0ZWQsIGluIHR1cm4uCisgICBUaGUgdmFsdWUgb2YgdGhlIGNvbmRpdGlvbmFsIGlzIHRoZSBzZWNvbmQgZXhwcmVzc2lvbiBvZiB0aGUgZmlyc3QgcGFpcgorICAgd2hvc2UgZmlyc3QgZXhwcmVzc2lvbiBldmFsdWF0ZXMgbm9uemVyby4gIElmIG5vbmUgb2YgdGhlIGV4cHJlc3Npb25zIGlzCisgICB0cnVlLCB0aGUgc2Vjb25kIG9wZXJhbmQgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBvZiB0aGUgY29uZGl0aW9uYWwuICAqLworREVGX1JUTF9FWFBSKENPTkQsICJjb25kIiwgIkVlIiwgUlRYX0VYVFJBKQorCitERUZfUlRMX0VYUFIoREVGSU5FX1NVQlNULCAiZGVmaW5lX3N1YnN0IiwgInNFc0UiLCBSVFhfRVhUUkEpCitERUZfUlRMX0VYUFIoREVGSU5FX1NVQlNUX0FUVFIsICJkZWZpbmVfc3Vic3RfYXR0ciIsICJzc3NzIiwgUlRYX0VYVFJBKQorI2VuZGlmIC8qIEdFTkVSQVRPUl9GSUxFICovCisKKy8qCitMb2NhbCB2YXJpYWJsZXM6Cittb2RlOmMKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcnRsLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvcnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhNjRmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9ydGwuaApAQCAtMCwwICsxLDI3OTQgQEAKKy8qIFJlZ2lzdGVyIFRyYW5zZmVyIExhbmd1YWdlIChSVEwpIGRlZmluaXRpb25zIGZvciBHQ0MKKyAgIENvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfUlRMX0gKKyNkZWZpbmUgR0NDX1JUTF9ICisKKyNpbmNsdWRlICJzdGF0aXN0aWNzLmgiCisjaW5jbHVkZSAibWFjaG1vZGUuaCIKKyNpbmNsdWRlICJpbnB1dC5oIgorI2luY2x1ZGUgInJlYWwuaCIKKyNpbmNsdWRlICJ2ZWMuaCIKKyNpbmNsdWRlICJmaXhlZC12YWx1ZS5oIgorI2luY2x1ZGUgImFsaWFzLmgiCisjaW5jbHVkZSAiaGFzaHRhYi5oIgorI2luY2x1ZGUgImZsYWdzLmgiCisKKy8qIFZhbHVlIHVzZWQgYnkgc29tZSBwYXNzZXMgdG8gInJlY29nbml6ZSIgbm9vcCBtb3ZlcyBhcyB2YWxpZAorIGluc3RydWN0aW9ucy4gICovCisjZGVmaW5lIE5PT1BfTU9WRV9JTlNOX0NPREUJSU5UX01BWAorCisvKiBSZWdpc3RlciBUcmFuc2ZlciBMYW5ndWFnZSBFWFBSRVNTSU9OUyBDT0RFUyAqLworCisjZGVmaW5lIFJUWF9DT0RFCWVudW0gcnR4X2NvZGUKK2VudW0gcnR4X2NvZGUgIHsKKworI2RlZmluZSBERUZfUlRMX0VYUFIoRU5VTSwgTkFNRSwgRk9STUFULCBDTEFTUykgICBFTlVNICwKKyNpbmNsdWRlICJydGwuZGVmIgkJLyogcnRsIGV4cHJlc3Npb25zIGFyZSBkb2N1bWVudGVkIGhlcmUgKi8KKyN1bmRlZiBERUZfUlRMX0VYUFIKKworICBMQVNUX0FORF9VTlVTRURfUlRYX0NPREV9OwkvKiBBIGNvbnZlbmllbnQgd2F5IHRvIGdldCBhIHZhbHVlIGZvcgorCQkJCSAgIE5VTV9SVFhfQ09ERS4KKwkJCQkgICBBc3N1bWVzIGRlZmF1bHQgZW51bSB2YWx1ZSBhc3NpZ25tZW50LiAgKi8KKworLyogVGhlIGNhc3QgaGVyZSwgc2F2ZXMgbWFueSBlbHNld2hlcmUuICAqLworI2RlZmluZSBOVU1fUlRYX0NPREUgKChpbnQpIExBU1RfQU5EX1VOVVNFRF9SVFhfQ09ERSkKKworLyogU2ltaWxhciwgYnV0IHNpbmNlIGdlbmVyYXRvciBmaWxlcyBnZXQgbW9yZSBlbnRyaWVzLi4uICovCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKKyMgZGVmaW5lIE5PTl9HRU5FUkFUT1JfTlVNX1JUWF9DT0RFICgoaW50KSBNQVRDSF9PUEVSQU5EKQorI2VuZGlmCisKKy8qIFJlZ2lzdGVyIFRyYW5zZmVyIExhbmd1YWdlIEVYUFJFU1NJT05TIENPREUgQ0xBU1NFUyAqLworCitlbnVtIHJ0eF9jbGFzcyAgeworICAvKiBXZSBjaGVjayBiaXQgMC0xIG9mIHNvbWUgcnR4IGNsYXNzIGNvZGVzIGluIHRoZSBwcmVkaWNhdGVzIGJlbG93LiAgKi8KKworICAvKiBCaXQgMCA9IGNvbXBhcmlzb24gaWYgMCwgYXJpdGhtZXRpYyBpcyAxCisgICAgIEJpdCAxID0gMSBpZiBjb21tdXRhdGl2ZS4gICovCisgIFJUWF9DT01QQVJFLAkJLyogMCAqLworICBSVFhfQ09NTV9DT01QQVJFLAorICBSVFhfQklOX0FSSVRILAorICBSVFhfQ09NTV9BUklUSCwKKworICAvKiBNdXN0IGZvbGxvdyB0aGUgZm91ciBwcmVjZWRpbmcgdmFsdWVzLiAgKi8KKyAgUlRYX1VOQVJZLAkJLyogNCAqLworCisgIFJUWF9FWFRSQSwKKyAgUlRYX01BVENILAorICBSVFhfSU5TTiwKKworICAvKiBCaXQgMCA9IDEgaWYgY29uc3RhbnQuICAqLworICBSVFhfT0JKLAkJLyogOCAqLworICBSVFhfQ09OU1RfT0JKLAorCisgIFJUWF9URVJOQVJZLAorICBSVFhfQklURklFTERfT1BTLAorICBSVFhfQVVUT0lOQworfTsKKworI2RlZmluZSBSVFhfT0JKX01BU0sgKH4xKQorI2RlZmluZSBSVFhfT0JKX1JFU1VMVCAoUlRYX09CSiAmIFJUWF9PQkpfTUFTSykKKyNkZWZpbmUgUlRYX0NPTVBBUkVfTUFTSyAofjEpCisjZGVmaW5lIFJUWF9DT01QQVJFX1JFU1VMVCAoUlRYX0NPTVBBUkUgJiBSVFhfQ09NUEFSRV9NQVNLKQorI2RlZmluZSBSVFhfQVJJVEhNRVRJQ19NQVNLICh+MSkKKyNkZWZpbmUgUlRYX0FSSVRITUVUSUNfUkVTVUxUIChSVFhfQ09NTV9BUklUSCAmIFJUWF9BUklUSE1FVElDX01BU0spCisjZGVmaW5lIFJUWF9CSU5BUllfTUFTSyAofjMpCisjZGVmaW5lIFJUWF9CSU5BUllfUkVTVUxUIChSVFhfQ09NUEFSRSAmIFJUWF9CSU5BUllfTUFTSykKKyNkZWZpbmUgUlRYX0NPTU1VVEFUSVZFX01BU0sgKH4yKQorI2RlZmluZSBSVFhfQ09NTVVUQVRJVkVfUkVTVUxUIChSVFhfQ09NTV9DT01QQVJFICYgUlRYX0NPTU1VVEFUSVZFX01BU0spCisjZGVmaW5lIFJUWF9OT05fQ09NTVVUQVRJVkVfUkVTVUxUIChSVFhfQ09NUEFSRSAmIFJUWF9DT01NVVRBVElWRV9NQVNLKQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBydHhfbGVuZ3RoW05VTV9SVFhfQ09ERV07CisjZGVmaW5lIEdFVF9SVFhfTEVOR1RIKENPREUpCQkocnR4X2xlbmd0aFsoaW50KSAoQ09ERSldKQorCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHJ0eF9uYW1lW05VTV9SVFhfQ09ERV07CisjZGVmaW5lIEdFVF9SVFhfTkFNRShDT0RFKQkJKHJ0eF9uYW1lWyhpbnQpIChDT0RFKV0pCisKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgcnR4X2Zvcm1hdFtOVU1fUlRYX0NPREVdOworI2RlZmluZSBHRVRfUlRYX0ZPUk1BVChDT0RFKQkJKHJ0eF9mb3JtYXRbKGludCkgKENPREUpXSkKKworZXh0ZXJuIGNvbnN0IGVudW0gcnR4X2NsYXNzIHJ0eF9jbGFzc1tOVU1fUlRYX0NPREVdOworI2RlZmluZSBHRVRfUlRYX0NMQVNTKENPREUpCQkocnR4X2NsYXNzWyhpbnQpIChDT0RFKV0pCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHJ0eF9jb2RlX3NpemVbTlVNX1JUWF9DT0RFXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHJ0eF9uZXh0W05VTV9SVFhfQ09ERV07CisMCisvKiBUaGUgZmxhZ3MgYW5kIGJpdGZpZWxkcyBvZiBhbiBBRERSX0RJRkZfVkVDLiAgQkFTRSBpcyB0aGUgYmFzZSBsYWJlbAorICAgcmVsYXRpdmUgdG8gd2hpY2ggdGhlIG9mZnNldHMgYXJlIGNhbGN1bGF0ZWQsIGFzIGV4cGxhaW5lZCBpbiBydGwuZGVmLiAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFNldCBhdCB0aGUgc3RhcnQgb2Ygc2hvcnRlbl9icmFuY2hlcyAtIE9OTFkgV0hFTiBPUFRJTUlaSU5HIC0gOiAqLworICB1bnNpZ25lZCBtaW5fYWxpZ246IDg7CisgIC8qIEZsYWdzOiAqLworICB1bnNpZ25lZCBiYXNlX2FmdGVyX3ZlYzogMTsgLyogQkFTRSBpcyBhZnRlciB0aGUgQUREUl9ESUZGX1ZFQy4gICovCisgIHVuc2lnbmVkIG1pbl9hZnRlcl92ZWM6IDE7ICAvKiBtaW5pbXVtIGFkZHJlc3MgdGFyZ2V0IGxhYmVsIGlzCisJCQkJIGFmdGVyIHRoZSBBRERSX0RJRkZfVkVDLiAgKi8KKyAgdW5zaWduZWQgbWF4X2FmdGVyX3ZlYzogMTsgIC8qIG1heGltdW0gYWRkcmVzcyB0YXJnZXQgbGFiZWwgaXMKKwkJCQkgYWZ0ZXIgdGhlIEFERFJfRElGRl9WRUMuICAqLworICB1bnNpZ25lZCBtaW5fYWZ0ZXJfYmFzZTogMTsgLyogbWluaW11bSBhZGRyZXNzIHRhcmdldCBsYWJlbCBpcworCQkJCSBhZnRlciBCQVNFLiAgKi8KKyAgdW5zaWduZWQgbWF4X2FmdGVyX2Jhc2U6IDE7IC8qIG1heGltdW0gYWRkcmVzcyB0YXJnZXQgbGFiZWwgaXMKKwkJCQkgYWZ0ZXIgQkFTRS4gICovCisgIC8qIFNldCBieSB0aGUgYWN0dWFsIGJyYW5jaCBzaG9ydGVuaW5nIHByb2Nlc3MgLSBPTkxZIFdIRU4gT1BUSU1JWklORyAtIDogKi8KKyAgdW5zaWduZWQgb2Zmc2V0X3Vuc2lnbmVkOiAxOyAvKiBvZmZzZXRzIGhhdmUgdG8gYmUgdHJlYXRlZCBhcyB1bnNpZ25lZC4gICovCisgIHVuc2lnbmVkIDogMjsKKyAgdW5zaWduZWQgc2NhbGUgOiA4OworfSBhZGRyX2RpZmZfdmVjX2ZsYWdzOworCisvKiBTdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSB0aGUgYXR0cmlidXRlcyBvZiBhIE1FTS4gIFRoZXNlIGFyZSBoYXNoZWQKKyAgIHNvIE1FTXMgdGhhdCB0aGUgc2FtZSBhdHRyaWJ1dGVzIHNoYXJlIGEgZGF0YSBzdHJ1Y3R1cmUuICBUaGlzIG1lYW5zCisgICB0aGV5IGNhbm5vdCBiZSBtb2RpZmllZCBpbiBwbGFjZS4gICovCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIG1lbV9hdHRycworeworICAvKiBUaGUgZXhwcmVzc2lvbiB0aGF0IHRoZSBNRU0gYWNjZXNzZXMsIG9yIG51bGwgaWYgbm90IGtub3duLgorICAgICBUaGlzIGV4cHJlc3Npb24gbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhlIG1lbW9yeSByZWZlcmVuY2UgaXRzZWxmLgorICAgICAoSW4gb3RoZXIgd29yZHMsIHRoZSBNRU0gbWlnaHQgYWNjZXNzIG9ubHkgcGFydCBvZiB0aGUgb2JqZWN0LikgICovCisgIHRyZWUgZXhwcjsKKworICAvKiBUaGUgb2Zmc2V0IG9mIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGZyb20gdGhlIHN0YXJ0IG9mIEVYUFIuCisgICAgIE9ubHkgdmFsaWQgaWYgT0ZGU0VUX0tOT1dOX1AuICAqLworICBIT1NUX1dJREVfSU5UIG9mZnNldDsKKworICAvKiBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZmVyZW5jZSBpbiBieXRlcy4gIE9ubHkgdmFsaWQgaWYKKyAgICAgU0laRV9LTk9XTl9QLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBzaXplOworCisgIC8qIFRoZSBhbGlhcyBzZXQgb2YgdGhlIG1lbW9yeSByZWZlcmVuY2UuICAqLworICBhbGlhc19zZXRfdHlwZSBhbGlhczsKKworICAvKiBUaGUgYWxpZ25tZW50IG9mIHRoZSByZWZlcmVuY2UgaW4gYml0cy4gIEFsd2F5cyBhIG11bHRpcGxlIG9mCisgICAgIEJJVFNfUEVSX1VOSVQuICBOb3RlIHRoYXQgRVhQUiBtYXkgaGF2ZSBhIHN0cmljdGVyIGFsaWdubWVudAorICAgICB0aGFuIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGl0c2VsZi4gICovCisgIHVuc2lnbmVkIGludCBhbGlnbjsKKworICAvKiBUaGUgYWRkcmVzcyBzcGFjZSB0aGF0IHRoZSBtZW1vcnkgcmVmZXJlbmNlIHVzZXMuICAqLworICB1bnNpZ25lZCBjaGFyIGFkZHJzcGFjZTsKKworICAvKiBUcnVlIGlmIE9GRlNFVCBpcyBrbm93bi4gICovCisgIGJvb2wgb2Zmc2V0X2tub3duX3A7CisKKyAgLyogVHJ1ZSBpZiBTSVpFIGlzIGtub3duLiAgKi8KKyAgYm9vbCBzaXplX2tub3duX3A7Cit9IG1lbV9hdHRyczsKKworLyogU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGF0dHJpYnV0ZXMgb2YgYSBSRUcgaW4gc2ltaWxhciB3YXkgYXMKKyAgIG1lbV9hdHRycyBkb2VzIGZvciBNRU0gYWJvdmUuICBOb3RlIHRoYXQgdGhlIE9GRlNFVCBmaWVsZCBpcyBjYWxjdWxhdGVkCisgICBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIG1lbV9hdHRycywgcmF0aGVyIHRoYW4gaW4gdGhlIHNhbWUgd2F5IGFzIGEKKyAgIFNVQlJFR19CWVRFLiAgRm9yIGV4YW1wbGUsIGlmIGEgYmlnLWVuZGlhbiB0YXJnZXQgc3RvcmVzIGEgYnl0ZQorICAgb2JqZWN0IGluIHRoZSBsb3cgcGFydCBvZiBhIDQtYnl0ZSByZWdpc3RlciwgdGhlIE9GRlNFVCBmaWVsZAorICAgd2lsbCBiZSAtMyByYXRoZXIgdGhhbiAwLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSByZWdfYXR0cnMgeworICB0cmVlIGRlY2w7CQkJLyogZGVjbCBjb3JyZXNwb25kaW5nIHRvIFJFRy4gICovCisgIEhPU1RfV0lERV9JTlQgb2Zmc2V0OwkJLyogT2Zmc2V0IGZyb20gc3RhcnQgb2YgREVDTC4gICovCit9IHJlZ19hdHRyczsKKworLyogQ29tbW9uIHVuaW9uIGZvciBhbiBlbGVtZW50IG9mIGFuIHJ0eC4gICovCisKK3VuaW9uIHJ0dW5pb25fZGVmCit7CisgIGludCBydF9pbnQ7CisgIHVuc2lnbmVkIGludCBydF91aW50OworICBjb25zdCBjaGFyICpydF9zdHI7CisgIHJ0eCBydF9ydHg7CisgIHJ0dmVjIHJ0X3J0dmVjOworICBlbnVtIG1hY2hpbmVfbW9kZSBydF90eXBlOworICBhZGRyX2RpZmZfdmVjX2ZsYWdzIHJ0X2FkZHJfZGlmZl92ZWNfZmxhZ3M7CisgIHN0cnVjdCBjc2VsaWJfdmFsX3N0cnVjdCAqcnRfY3NlbGliOworICB0cmVlIHJ0X3RyZWU7CisgIGJhc2ljX2Jsb2NrIHJ0X2JiOworICBtZW1fYXR0cnMgKnJ0X21lbTsKKyAgcmVnX2F0dHJzICpydF9yZWc7CisgIHN0cnVjdCBjb25zdGFudF9kZXNjcmlwdG9yX3J0eCAqcnRfY29uc3RhbnQ7CisgIHN0cnVjdCBkd19jZmlfc3RydWN0ICpydF9jZmk7Cit9OwordHlwZWRlZiB1bmlvbiBydHVuaW9uX2RlZiBydHVuaW9uOworCisvKiBUaGlzIHN0cnVjdHVyZSByZW1lbWJlcnMgdGhlIHBvc2l0aW9uIG9mIGEgU1lNQk9MX1JFRiB3aXRoaW4gYW4KKyAgIG9iamVjdF9ibG9jayBzdHJ1Y3R1cmUuICBBIFNZTUJPTF9SRUYgb25seSBwcm92aWRlcyB0aGlzIGluZm9ybWF0aW9uCisgICBpZiBTWU1CT0xfUkVGX0hBU19CTE9DS19JTkZPX1AgaXMgdHJ1ZS4gICovCitzdHJ1Y3QgR1RZKCgpKSBibG9ja19zeW1ib2wgeworICAvKiBUaGUgdXN1YWwgU1lNQk9MX1JFRiBmaWVsZHMuICAqLworICBydHVuaW9uIEdUWSAoKHNraXApKSBmbGRbM107CisKKyAgLyogVGhlIGJsb2NrIHRoYXQgY29udGFpbnMgdGhpcyBvYmplY3QuICAqLworICBzdHJ1Y3Qgb2JqZWN0X2Jsb2NrICpibG9jazsKKworICAvKiBUaGUgb2Zmc2V0IG9mIHRoaXMgb2JqZWN0IGZyb20gdGhlIHN0YXJ0IG9mIGl0cyBibG9jay4gIEl0IGlzIG5lZ2F0aXZlCisgICAgIGlmIHRoZSBzeW1ib2wgaGFzIG5vdCB5ZXQgYmVlbiBhc3NpZ25lZCBhbiBvZmZzZXQuICAqLworICBIT1NUX1dJREVfSU5UIG9mZnNldDsKK307CisKKy8qIERlc2NyaWJlcyBhIGdyb3VwIG9mIG9iamVjdHMgdGhhdCBhcmUgdG8gYmUgcGxhY2VkIHRvZ2V0aGVyIGluIHN1Y2gKKyAgIGEgd2F5IHRoYXQgdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zIGFyZSBrbm93bi4gICovCitzdHJ1Y3QgR1RZKCgpKSBvYmplY3RfYmxvY2sgeworICAvKiBUaGUgc2VjdGlvbiBpbiB3aGljaCB0aGVzZSBvYmplY3RzIHNob3VsZCBiZSBwbGFjZWQuICAqLworICBzZWN0aW9uICpzZWN0OworCisgIC8qIFRoZSBhbGlnbm1lbnQgb2YgdGhlIGZpcnN0IG9iamVjdCwgbWVhc3VyZWQgaW4gYml0cy4gICovCisgIHVuc2lnbmVkIGludCBhbGlnbm1lbnQ7CisKKyAgLyogVGhlIHRvdGFsIHNpemUgb2YgdGhlIG9iamVjdHMsIG1lYXN1cmVkIGluIGJ5dGVzLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBzaXplOworCisgIC8qIFRoZSBTWU1CT0xfUkVGcyBmb3IgZWFjaCBvYmplY3QuICBUaGUgdmVjdG9yIGlzIHNvcnRlZCBpbgorICAgICBvcmRlciBvZiBpbmNyZWFzaW5nIG9mZnNldCBhbmQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHdpbGwKKyAgICAgaG9sZCBmb3IgZWFjaCBlbGVtZW50IFg6CisKKwkgU1lNQk9MX1JFRl9IQVNfQkxPQ0tfSU5GT19QIChYKQorCSAhU1lNQk9MX1JFRl9BTkNIT1JfUCAoWCkKKwkgU1lNQk9MX1JFRl9CTE9DSyAoWCkgPT0gW2FkZHJlc3Mgb2YgdGhpcyBzdHJ1Y3R1cmVdCisJIFNZTUJPTF9SRUZfQkxPQ0tfT0ZGU0VUIChYKSA+PSAwLiAgKi8KKyAgdmVjPHJ0eCwgdmFfZ2M+ICpvYmplY3RzOworCisgIC8qIEFsbCB0aGUgYW5jaG9yIFNZTUJPTF9SRUZzIHVzZWQgdG8gYWRkcmVzcyB0aGVzZSBvYmplY3RzLCBzb3J0ZWQKKyAgICAgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBvZmZzZXQsIGFuZCB0aGVuIGluY3JlYXNpbmcgVExTIG1vZGVsLgorICAgICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgd2lsbCBob2xkIGZvciBlYWNoIGVsZW1lbnQgWCBpbiB0aGlzIHZlY3RvcjoKKworCSBTWU1CT0xfUkVGX0hBU19CTE9DS19JTkZPX1AgKFgpCisJIFNZTUJPTF9SRUZfQU5DSE9SX1AgKFgpCisJIFNZTUJPTF9SRUZfQkxPQ0sgKFgpID09IFthZGRyZXNzIG9mIHRoaXMgc3RydWN0dXJlXQorCSBTWU1CT0xfUkVGX0JMT0NLX09GRlNFVCAoWCkgPj0gMC4gICovCisgIHZlYzxydHgsIHZhX2djPiAqYW5jaG9yczsKK307CisKKy8qIFJUTCBleHByZXNzaW9uICgicnR4IikuICAqLworCitzdHJ1Y3QgR1RZKChjaGFpbl9uZXh0ICgiUlRYX05FWFQgKCYlaCkiKSwKKwkgICAgY2hhaW5fcHJldiAoIlJUWF9QUkVWICgmJWgpIiksIHZhcmlhYmxlX3NpemUpKSBydHhfZGVmIHsKKyAgLyogVGhlIGtpbmQgb2YgZXhwcmVzc2lvbiB0aGlzIGlzLiAgKi8KKyAgRU5VTV9CSVRGSUVMRChydHhfY29kZSkgY29kZTogMTY7CisKKyAgLyogVGhlIGtpbmQgb2YgdmFsdWUgdGhlIGV4cHJlc3Npb24gaGFzLiAgKi8KKyAgRU5VTV9CSVRGSUVMRChtYWNoaW5lX21vZGUpIG1vZGUgOiA4OworCisgIC8qIDEgaW4gYSBNRU0gaWYgd2Ugc2hvdWxkIGtlZXAgdGhlIGFsaWFzIHNldCBmb3IgdGhpcyBtZW0gdW5jaGFuZ2VkCisgICAgIHdoZW4gd2UgYWNjZXNzIGEgY29tcG9uZW50LgorICAgICAxIGluIGEgQ0FMTF9JTlNOIGlmIGl0IGlzIGEgc2libGluZyBjYWxsLgorICAgICAxIGluIGEgU0VUIHRoYXQgaXMgZm9yIGEgcmV0dXJuLgorICAgICBJbiBhIENPREVfTEFCRUwsIHBhcnQgb2YgdGhlIHR3by1iaXQgYWx0ZXJuYXRlIGVudHJ5IGZpZWxkLgorICAgICAxIGluIGEgQ09OQ0FUIGlzIFZBTF9FWFBSX0lTX0NPUElFRCBpbiB2YXItdHJhY2tpbmcuYy4KKyAgICAgMSBpbiBhIFZBTFVFIGlzIFNQX0JBU0VEX1ZBTFVFX1AgaW4gY3NlbGliLmMuICAqLworICB1bnNpZ25lZCBpbnQganVtcCA6IDE7CisgIC8qIEluIGEgQ09ERV9MQUJFTCwgcGFydCBvZiB0aGUgdHdvLWJpdCBhbHRlcm5hdGUgZW50cnkgZmllbGQuCisgICAgIDEgaW4gYSBNRU0gaWYgaXQgY2Fubm90IHRyYXAuCisgICAgIDEgaW4gYSBDQUxMX0lOU04gbG9naWNhbGx5IGVxdWl2YWxlbnQgdG8KKyAgICAgICBFQ0ZfTE9PUElOR19DT05TVF9PUl9QVVJFIGFuZCBERUNMX0xPT1BJTkdfQ09OU1RfT1JfUFVSRV9QLiAqLworICB1bnNpZ25lZCBpbnQgY2FsbCA6IDE7CisgIC8qIDEgaW4gYSBSRUcsIE1FTSwgb3IgQ09OQ0FUIGlmIHRoZSB2YWx1ZSBpcyBzZXQgYXQgbW9zdCBvbmNlLCBhbnl3aGVyZS4KKyAgICAgMSBpbiBhIFNVQlJFRyB1c2VkIGZvciBTVUJSRUdfUFJPTU9URURfVU5TSUdORURfUC4KKyAgICAgMSBpbiBhIFNZTUJPTF9SRUYgaWYgaXQgYWRkcmVzc2VzIHNvbWV0aGluZyBpbiB0aGUgcGVyLWZ1bmN0aW9uCisgICAgIGNvbnN0YW50cyBwb29sLgorICAgICAxIGluIGEgQ0FMTF9JTlNOIGxvZ2ljYWxseSBlcXVpdmFsZW50IHRvIEVDRl9DT05TVCBhbmQgVFJFRV9SRUFET05MWS4KKyAgICAgMSBpbiBhIE5PVEUsIG9yIEVYUFJfTElTVCBmb3IgYSBjb25zdCBjYWxsLgorICAgICAxIGluIGEgSlVNUF9JTlNOIG9mIGFuIGFubnVsbGluZyBicmFuY2guCisgICAgIDEgaW4gYSBDT05DQVQgaXMgVkFMX0VYUFJfSVNfQ0xPQkJFUkVEIGluIHZhci10cmFja2luZy5jLgorICAgICAxIGluIGEgcHJlc2VydmVkIFZBTFVFIGlzIFBSRVNFUlZFRF9WQUxVRV9QIGluIGNzZWxpYi5jLgorICAgICAxIGluIGEgY2xvYmJlciB0ZW1wb3JhcmlseSBjcmVhdGVkIGZvciBMUkEuICAqLworICB1bnNpZ25lZCBpbnQgdW5jaGFuZ2luZyA6IDE7CisgIC8qIDEgaW4gYSBNRU0gb3IgQVNNX09QRVJBTkRTIGV4cHJlc3Npb24gaWYgdGhlIG1lbW9yeSByZWZlcmVuY2UgaXMgdm9sYXRpbGUuCisgICAgIDEgaW4gYW4gSU5TTiwgQ0FMTF9JTlNOLCBKVU1QX0lOU04sIENPREVfTEFCRUwsIEJBUlJJRVIsIG9yIE5PVEUKKyAgICAgaWYgaXQgaGFzIGJlZW4gZGVsZXRlZC4KKyAgICAgMSBpbiBhIFJFRyBleHByZXNzaW9uIGlmIGNvcnJlc3BvbmRzIHRvIGEgdmFyaWFibGUgZGVjbGFyZWQgYnkgdGhlIHVzZXIsCisgICAgIDAgZm9yIGFuIGludGVybmFsbHkgZ2VuZXJhdGVkIHRlbXBvcmFyeS4KKyAgICAgMSBpbiBhIFNVQlJFRyB1c2VkIGZvciBTVUJSRUdfUFJPTU9URURfVU5TSUdORURfUC4KKyAgICAgMSBpbiBhIExBQkVMX1JFRiwgUkVHX0xBQkVMX1RBUkdFVCBvciBSRUdfTEFCRUxfT1BFUkFORCBub3RlIGZvciBhCisgICAgIG5vbi1sb2NhbCBsYWJlbC4KKyAgICAgSW4gYSBTWU1CT0xfUkVGLCB0aGlzIGZsYWcgaXMgdXNlZCBmb3IgbWFjaGluZS1zcGVjaWZpYyBwdXJwb3Nlcy4KKyAgICAgSW4gYSBQUkVGRVRDSCwgdGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgc2NoZWR1bGluZworICAgICBiYXJyaWVyLgorICAgICAxIGluIGEgQ09OQ0FUIGlzIFZBTF9ORUVEU19SRVNPTFVUSU9OIGluIHZhci10cmFja2luZy5jLiAgKi8KKyAgdW5zaWduZWQgaW50IHZvbGF0aWwgOiAxOworICAvKiAxIGluIGEgUkVHIGlmIHRoZSByZWdpc3RlciBpcyB1c2VkIG9ubHkgaW4gZXhpdCBjb2RlIGEgbG9vcC4KKyAgICAgMSBpbiBhIFNVQlJFRyBleHByZXNzaW9uIGlmIHdhcyBnZW5lcmF0ZWQgZnJvbSBhIHZhcmlhYmxlIHdpdGggYQorICAgICBwcm9tb3RlZCBtb2RlLgorICAgICAxIGluIGEgQ09ERV9MQUJFTCBpZiB0aGUgbGFiZWwgaXMgdXNlZCBmb3Igbm9ubG9jYWwgZ290b3MKKyAgICAgYW5kIG11c3Qgbm90IGJlIGRlbGV0ZWQgZXZlbiBpZiBpdHMgY291bnQgaXMgemVyby4KKyAgICAgMSBpbiBhbiBJTlNOLCBKVU1QX0lOU04gb3IgQ0FMTF9JTlNOIGlmIHRoaXMgaW5zbiBtdXN0IGJlIHNjaGVkdWxlZAorICAgICB0b2dldGhlciB3aXRoIHRoZSBwcmVjZWRpbmcgaW5zbi4gIFZhbGlkIG9ubHkgd2l0aGluIHNjaGVkLgorICAgICAxIGluIGFuIElOU04sIEpVTVBfSU5TTiwgb3IgQ0FMTF9JTlNOIGlmIGluc24gaXMgaW4gYSBkZWxheSBzbG90IGFuZAorICAgICBmcm9tIHRoZSB0YXJnZXQgb2YgYSBicmFuY2guICBWYWxpZCBmcm9tIHJlb3JnIHVudGlsIGVuZCBvZiBjb21waWxhdGlvbjsKKyAgICAgY2xlYXJlZCBiZWZvcmUgdXNlZC4KKworICAgICBUaGUgbmFtZSBvZiB0aGUgZmllbGQgaXMgaGlzdG9yaWNhbC4gIEl0IHVzZWQgdG8gYmUgdXNlZCBpbiBNRU1zCisgICAgIHRvIHJlY29yZCB3aGV0aGVyIHRoZSBNRU0gYWNjZXNzZWQgcGFydCBvZiBhIHN0cnVjdHVyZS4gICovCisgIHVuc2lnbmVkIGludCBpbl9zdHJ1Y3QgOiAxOworICAvKiBBdCB0aGUgZW5kIG9mIFJUTCBnZW5lcmF0aW9uLCAxIGlmIHRoaXMgcnR4IGlzIHVzZWQuICBUaGlzIGlzIHVzZWQgZm9yCisgICAgIGNvcHlpbmcgc2hhcmVkIHN0cnVjdHVyZS4gIFNlZSBgdW5zaGFyZV9hbGxfcnRsJy4KKyAgICAgSW4gYSBSRUcsIHRoaXMgaXMgbm90IG5lZWRlZCBmb3IgdGhhdCBwdXJwb3NlLCBhbmQgdXNlZCBpbnN0ZWFkCisgICAgIGluIGBsZWFmX3JlbnVtYmVyX3JlZ3NfaW5zbicuCisgICAgIDEgaW4gYSBTWU1CT0xfUkVGLCBtZWFucyB0aGF0IGVtaXRfbGlicmFyeV9jYWxsCisgICAgIGhhcyB1c2VkIGl0IGFzIHRoZSBmdW5jdGlvbi4KKyAgICAgMSBpbiBhIENPTkNBVCBpcyBWQUxfSE9MRFNfVFJBQ0tfRVhQUiBpbiB2YXItdHJhY2tpbmcuYy4KKyAgICAgMSBpbiBhIFZBTFVFIG9yIERFQlVHX0VYUFIgaXMgVkFMVUVfUkVDVVJTRURfSU5UTyBpbiB2YXItdHJhY2tpbmcuYy4gICovCisgIHVuc2lnbmVkIGludCB1c2VkIDogMTsKKyAgLyogMSBpbiBhbiBJTlNOIG9yIGEgU0VUIGlmIHRoaXMgcnR4IGlzIHJlbGF0ZWQgdG8gdGhlIGNhbGwgZnJhbWUsCisgICAgIGVpdGhlciBjaGFuZ2luZyBob3cgd2UgY29tcHV0ZSB0aGUgZnJhbWUgYWRkcmVzcyBvciBzYXZpbmcgYW5kCisgICAgIHJlc3RvcmluZyByZWdpc3RlcnMgaW4gdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZS4KKyAgICAgMSBpbiBhIFJFRyBvciBNRU0gaWYgaXQgaXMgYSBwb2ludGVyLgorICAgICAxIGluIGEgU1lNQk9MX1JFRiBpZiBpdCBhZGRyZXNzZXMgc29tZXRoaW5nIGluIHRoZSBwZXItZnVuY3Rpb24KKyAgICAgY29uc3RhbnQgc3RyaW5nIHBvb2wuCisgICAgIDEgaW4gYSBWQUxVRSBpcyBWQUxVRV9DSEFOR0VEIGluIHZhci10cmFja2luZy5jLiAgKi8KKyAgdW5zaWduZWQgZnJhbWVfcmVsYXRlZCA6IDE7CisgIC8qIDEgaW4gYSBSRUcgb3IgUEFSQUxMRUwgdGhhdCBpcyB0aGUgY3VycmVudCBmdW5jdGlvbidzIHJldHVybiB2YWx1ZS4KKyAgICAgMSBpbiBhIFNZTUJPTF9SRUYgZm9yIGEgd2VhayBzeW1ib2wuCisgICAgIDEgaW4gYSBDQUxMX0lOU04gbG9naWNhbGx5IGVxdWl2YWxlbnQgdG8gRUNGX1BVUkUgYW5kIERFQ0xfUFVSRV9QLgorICAgICAxIGluIGEgQ09OQ0FUIGlzIFZBTF9FWFBSX0hBU19SRVZFUlNFIGluIHZhci10cmFja2luZy5jLgorICAgICAxIGluIGEgVkFMVUUgb3IgREVCVUdfRVhQUiBpcyBOT19MT0NfUCBpbiB2YXItdHJhY2tpbmcuYy4gICovCisgIHVuc2lnbmVkIHJldHVybl92YWwgOiAxOworCisgIC8qIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBvcGVyYW5kcyBvZiB0aGlzIHJ0eC4KKyAgICAgVGhlIG51bWJlciBvZiBvcGVyYW5kcyBhbmQgdGhlaXIgdHlwZXMgYXJlIGNvbnRyb2xsZWQKKyAgICAgYnkgdGhlIGBjb2RlJyBmaWVsZCwgYWNjb3JkaW5nIHRvIHJ0bC5kZWYuICAqLworICB1bmlvbiB1IHsKKyAgICBydHVuaW9uIGZsZFsxXTsKKyAgICBIT1NUX1dJREVfSU5UIGh3aW50WzFdOworICAgIHN0cnVjdCBibG9ja19zeW1ib2wgYmxvY2tfc3ltOworICAgIHN0cnVjdCByZWFsX3ZhbHVlIHJ2OworICAgIHN0cnVjdCBmaXhlZF92YWx1ZSBmdjsKKyAgfSBHVFkgKChzcGVjaWFsICgicnR4X2RlZiIpLCBkZXNjICgiR0VUX0NPREUgKCYlMCkiKSkpIHU7Cit9OworCisvKiBUaGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBydHggaGVhZGVyIChjb2RlLCBtb2RlIGFuZCBmbGFncykuICAqLworI2RlZmluZSBSVFhfSERSX1NJWkUgb2Zmc2V0b2YgKHN0cnVjdCBydHhfZGVmLCB1KQorCisvKiBUaGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBydHggd2l0aCBjb2RlIENPREUuICAqLworI2RlZmluZSBSVFhfQ09ERV9TSVpFKENPREUpIHJ0eF9jb2RlX3NpemVbQ09ERV0KKworI2RlZmluZSBOVUxMX1JUWCAocnR4KSAwCisKKy8qIFRoZSAibmV4dCIgYW5kICJwcmV2aW91cyIgUlRYLCByZWxhdGl2ZSB0byB0aGlzIG9uZS4gICovCisKKyNkZWZpbmUgUlRYX05FWFQoWCkgKHJ0eF9uZXh0W0dFVF9DT0RFIChYKV0gPT0gMCA/IE5VTEwJCQlcCisJCSAgICAgOiAqKHJ0eCAqKSgoKGNoYXIgKilYKSArIHJ0eF9uZXh0W0dFVF9DT0RFIChYKV0pKQorCisvKiBGSVhNRTogdGhlICJORVhUX0lOU04gKFBSRVZfSU5TTiAoWCkpID09IFgiIGNvbmRpdGlvbiBzaG91bGRuJ3QgYmUgbmVlZGVkLgorICovCisjZGVmaW5lIFJUWF9QUkVWKFgpICgoSU5TTl9QIChYKSAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgICAgICAgfHwgTk9URV9QIChYKSAgICAgICAJCVwKKyAgICAgICAgICAgICAgICAgICAgICB8fCBCQVJSSUVSX1AgKFgpICAgICAgICAJCVwKKyAgICAgICAgICAgICAgICAgICAgICB8fCBMQUJFTF9QIChYKSkgICAgCQlcCisgICAgICAgICAgICAgICAgICAgICAmJiBQUkVWX0lOU04gKFgpICE9IE5VTEwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICYmIE5FWFRfSU5TTiAoUFJFVl9JTlNOIChYKSkgPT0gWCAgXAorICAgICAgICAgICAgICAgICAgICAgPyBQUkVWX0lOU04gKFgpIDogTlVMTCkKKworLyogRGVmaW5lIG1hY3JvcyB0byBhY2Nlc3MgdGhlIGBjb2RlJyBmaWVsZCBvZiB0aGUgcnR4LiAgKi8KKworI2RlZmluZSBHRVRfQ09ERShSVFgpCSAgICAoKGVudW0gcnR4X2NvZGUpIChSVFgpLT5jb2RlKQorI2RlZmluZSBQVVRfQ09ERShSVFgsIENPREUpICgoUlRYKS0+Y29kZSA9IChDT0RFKSkKKworI2RlZmluZSBHRVRfTU9ERShSVFgpCSAgICAoKGVudW0gbWFjaGluZV9tb2RlKSAoUlRYKS0+bW9kZSkKKyNkZWZpbmUgUFVUX01PREUoUlRYLCBNT0RFKSAoKFJUWCktPm1vZGUgPSAoTU9ERSkpCisKKy8qIFJUTCB2ZWN0b3IuICBUaGVzZSBhcHBlYXIgaW5zaWRlIFJUWCdzIHdoZW4gdGhlcmUgaXMgYSBuZWVkCisgICBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgdGhpbmdzLiAgVGhlIHByaW5jaXBsZSB1c2UgaXMgaW5zaWRlCisgICBQQVJBTExFTCBleHByZXNzaW9ucy4gICovCisKK3N0cnVjdCBHVFkoKHZhcmlhYmxlX3NpemUpKSBydHZlY19kZWYgeworICBpbnQgbnVtX2VsZW07CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgKi8KKyAgcnR4IEdUWSAoKGxlbmd0aCAoIiVoLm51bV9lbGVtIikpKSBlbGVtWzFdOworfTsKKworI2RlZmluZSBOVUxMX1JUVkVDIChydHZlYykgMAorCisjZGVmaW5lIEdFVF9OVU1fRUxFTShSVFZFQykJCSgoUlRWRUMpLT5udW1fZWxlbSkKKyNkZWZpbmUgUFVUX05VTV9FTEVNKFJUVkVDLCBOVU0pCSgoUlRWRUMpLT5udW1fZWxlbSA9IChOVU0pKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhbiBydHggZm9yIGEgcmVnaXN0ZXIuICAqLworI2RlZmluZSBSRUdfUChYKSAoR0VUX0NPREUgKFgpID09IFJFRykKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYW4gcnR4IGZvciBhIG1lbW9yeSBsb2NhdGlvbi4gICovCisjZGVmaW5lIE1FTV9QKFgpIChHRVRfQ09ERSAoWCkgPT0gTUVNKQorCisvKiBNYXRjaCBDT05TVF8qcyB0aGF0IGNhbiByZXByZXNlbnQgY29tcGlsZS10aW1lIGNvbnN0YW50IGludGVnZXJzLiAgKi8KKyNkZWZpbmUgQ0FTRV9DT05TVF9TQ0FMQVJfSU5UIFwKKyAgIGNhc2UgQ09OU1RfSU5UOiBcCisgICBjYXNlIENPTlNUX0RPVUJMRQorCisvKiBNYXRjaCBDT05TVF8qcyBmb3Igd2hpY2ggcG9pbnRlciBlcXVhbGl0eSBjb3JyZXNwb25kcyB0byB2YWx1ZSBlcXVhbGl0eS4gICovCisjZGVmaW5lIENBU0VfQ09OU1RfVU5JUVVFIFwKKyAgIGNhc2UgQ09OU1RfSU5UOiBcCisgICBjYXNlIENPTlNUX0RPVUJMRTogXAorICAgY2FzZSBDT05TVF9GSVhFRAorCisvKiBNYXRjaCBhbGwgQ09OU1RfKiBydHhlcy4gICovCisjZGVmaW5lIENBU0VfQ09OU1RfQU5ZIFwKKyAgIGNhc2UgQ09OU1RfSU5UOiBcCisgICBjYXNlIENPTlNUX0RPVUJMRTogXAorICAgY2FzZSBDT05TVF9GSVhFRDogXAorICAgY2FzZSBDT05TVF9WRUNUT1IKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYW4gcnR4IGZvciBhIGNvbnN0YW50IGludGVnZXIuICAqLworI2RlZmluZSBDT05TVF9JTlRfUChYKSAoR0VUX0NPREUgKFgpID09IENPTlNUX0lOVCkKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYW4gcnR4IGZvciBhIGNvbnN0YW50IGZpeGVkLXBvaW50LiAgKi8KKyNkZWZpbmUgQ09OU1RfRklYRURfUChYKSAoR0VUX0NPREUgKFgpID09IENPTlNUX0ZJWEVEKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgdHJ1ZSBpZmYgWCBpcyBhbiBydHggZm9yIGEgZG91YmxlLWludAorICAgb3IgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuICAqLworI2RlZmluZSBDT05TVF9ET1VCTEVfUChYKSAoR0VUX0NPREUgKFgpID09IENPTlNUX0RPVUJMRSkKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIHRydWUgaWZmIFggaXMgYW4gcnR4IGZvciBhIGRvdWJsZS1pbnQuICAqLworI2RlZmluZSBDT05TVF9ET1VCTEVfQVNfSU5UX1AoWCkgXAorICAoR0VUX0NPREUgKFgpID09IENPTlNUX0RPVUJMRSAmJiBHRVRfTU9ERSAoWCkgPT0gVk9JRG1vZGUpCisKKy8qIFByZWRpY2F0ZSB5aWVsZGluZyB0cnVlIGlmZiBYIGlzIGFuIHJ0eCBmb3IgYSBpbnRlZ2VyIGNvbnN0LiAgKi8KKyNkZWZpbmUgQ09OU1RfU0NBTEFSX0lOVF9QKFgpIFwKKyAgKENPTlNUX0lOVF9QIChYKSB8fCBDT05TVF9ET1VCTEVfQVNfSU5UX1AgKFgpKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgdHJ1ZSBpZmYgWCBpcyBhbiBydHggZm9yIGEgZG91YmxlLWludC4gICovCisjZGVmaW5lIENPTlNUX0RPVUJMRV9BU19GTE9BVF9QKFgpIFwKKyAgKEdFVF9DT0RFIChYKSA9PSBDT05TVF9ET1VCTEUgJiYgR0VUX01PREUgKFgpICE9IFZPSURtb2RlKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhIGxhYmVsIGluc24uICAqLworI2RlZmluZSBMQUJFTF9QKFgpIChHRVRfQ09ERSAoWCkgPT0gQ09ERV9MQUJFTCkKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYSBqdW1wIGluc24uICAqLworI2RlZmluZSBKVU1QX1AoWCkgKEdFVF9DT0RFIChYKSA9PSBKVU1QX0lOU04pCisKKy8qIFByZWRpY2F0ZSB5aWVsZGluZyBub256ZXJvIGlmZiBYIGlzIGEgY2FsbCBpbnNuLiAgKi8KKyNkZWZpbmUgQ0FMTF9QKFgpIChHRVRfQ09ERSAoWCkgPT0gQ0FMTF9JTlNOKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhbiBpbnNuIHRoYXQgY2Fubm90IGp1bXAuICAqLworI2RlZmluZSBOT05KVU1QX0lOU05fUChYKSAoR0VUX0NPREUgKFgpID09IElOU04pCisKKy8qIFByZWRpY2F0ZSB5aWVsZGluZyBub256ZXJvIGlmZiBYIGlzIGEgZGVidWcgbm90ZS9pbnNuLiAgKi8KKyNkZWZpbmUgREVCVUdfSU5TTl9QKFgpIChHRVRfQ09ERSAoWCkgPT0gREVCVUdfSU5TTikKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYW4gaW5zbiB0aGF0IGlzIG5vdCBhIGRlYnVnIGluc24uICAqLworI2RlZmluZSBOT05ERUJVR19JTlNOX1AoWCkgKElOU05fUCAoWCkgJiYgIURFQlVHX0lOU05fUCAoWCkpCisKKy8qIE5vbnplcm8gaWYgREVCVUdfSU5TTl9QIG1heSBwb3NzaWJseSBob2xkLiAgKi8KKyNkZWZpbmUgTUFZX0hBVkVfREVCVUdfSU5TTlMgKGZsYWdfdmFyX3RyYWNraW5nX2Fzc2lnbm1lbnRzKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhIHJlYWwgaW5zbi4gICovCisjZGVmaW5lIElOU05fUChYKSBcCisgIChOT05KVU1QX0lOU05fUCAoWCkgfHwgREVCVUdfSU5TTl9QIChYKSB8fCBKVU1QX1AgKFgpIHx8IENBTExfUCAoWCkpCisKKy8qIFByZWRpY2F0ZSB5aWVsZGluZyBub256ZXJvIGlmZiBYIGlzIGEgbm90ZSBpbnNuLiAgKi8KKyNkZWZpbmUgTk9URV9QKFgpIChHRVRfQ09ERSAoWCkgPT0gTk9URSkKKworLyogUHJlZGljYXRlIHlpZWxkaW5nIG5vbnplcm8gaWZmIFggaXMgYSBiYXJyaWVyIGluc24uICAqLworI2RlZmluZSBCQVJSSUVSX1AoWCkgKEdFVF9DT0RFIChYKSA9PSBCQVJSSUVSKQorCisvKiBQcmVkaWNhdGUgeWllbGRpbmcgbm9uemVybyBpZmYgWCBpcyBhIGRhdGEgZm9yIGEganVtcCB0YWJsZS4gICovCisjZGVmaW5lIEpVTVBfVEFCTEVfREFUQV9QKElOU04pIFwKKyAgKEpVTVBfUCAoSU5TTikgJiYgKEdFVF9DT0RFIChQQVRURVJOIChJTlNOKSkgPT0gQUREUl9WRUMgfHwgXAorCQkgICAgIEdFVF9DT0RFIChQQVRURVJOIChJTlNOKSkgPT0gQUREUl9ESUZGX1ZFQykpCisKKy8qIFByZWRpY2F0ZSB5aWVsZGluZyBub256ZXJvIGlmZiBYIGlzIGEgcmV0dXJuIG9yIHNpbXBsZV9yZXR1cm4uICAqLworI2RlZmluZSBBTllfUkVUVVJOX1AoWCkgXAorICAoR0VUX0NPREUgKFgpID09IFJFVFVSTiB8fCBHRVRfQ09ERSAoWCkgPT0gU0lNUExFX1JFVFVSTikKKworLyogMSBpZiBYIGlzIGEgdW5hcnkgb3BlcmF0b3IuICAqLworCisjZGVmaW5lIFVOQVJZX1AoWCkgICBcCisgIChHRVRfUlRYX0NMQVNTIChHRVRfQ09ERSAoWCkpID09IFJUWF9VTkFSWSkKKworLyogMSBpZiBYIGlzIGEgYmluYXJ5IG9wZXJhdG9yLiAgKi8KKworI2RlZmluZSBCSU5BUllfUChYKSAgIFwKKyAgKChHRVRfUlRYX0NMQVNTIChHRVRfQ09ERSAoWCkpICYgUlRYX0JJTkFSWV9NQVNLKSA9PSBSVFhfQklOQVJZX1JFU1VMVCkKKworLyogMSBpZiBYIGlzIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IuICAqLworCisjZGVmaW5lIEFSSVRITUVUSUNfUChYKSAgIFwKKyAgKChHRVRfUlRYX0NMQVNTIChHRVRfQ09ERSAoWCkpICYgUlRYX0FSSVRITUVUSUNfTUFTSykJCQlcCisgICAgPT0gUlRYX0FSSVRITUVUSUNfUkVTVUxUKQorCisvKiAxIGlmIFggaXMgYW4gYXJpdGhtZXRpYyBvcGVyYXRvci4gICovCisKKyNkZWZpbmUgQ09NTVVUQVRJVkVfQVJJVEhfUChYKSAgIFwKKyAgKEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkgPT0gUlRYX0NPTU1fQVJJVEgpCisKKy8qIDEgaWYgWCBpcyBhIGNvbW11dGF0aXZlIGFyaXRobWV0aWMgb3BlcmF0b3Igb3IgYSBjb21wYXJpc29uIG9wZXJhdG9yLgorICAgVGhlc2UgdHdvIGFyZSBzb21ldGltZXMgc2VsZWN0ZWQgdG9nZXRoZXIgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSB0bworICAgc3dhcCB0aGUgdHdvIG9wZXJhbmRzLiAgKi8KKworI2RlZmluZSBTV0FQUEFCTEVfT1BFUkFORFNfUChYKSAgIFwKKyAgKCgxIDw8IEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkpCQkJCQlcCisgICAgJiAoKDEgPDwgUlRYX0NPTU1fQVJJVEgpIHwgKDEgPDwgUlRYX0NPTU1fQ09NUEFSRSkJCQlcCisgICAgICAgfCAoMSA8PCBSVFhfQ09NUEFSRSkpKQorCisvKiAxIGlmIFggaXMgYSBub24tY29tbXV0YXRpdmUgb3BlcmF0b3IuICAqLworCisjZGVmaW5lIE5PTl9DT01NVVRBVElWRV9QKFgpICAgXAorICAoKEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkgJiBSVFhfQ09NTVVUQVRJVkVfTUFTSykJCVwKKyAgICA9PSBSVFhfTk9OX0NPTU1VVEFUSVZFX1JFU1VMVCkKKworLyogMSBpZiBYIGlzIGEgY29tbXV0YXRpdmUgb3BlcmF0b3Igb24gaW50ZWdlcnMuICAqLworCisjZGVmaW5lIENPTU1VVEFUSVZFX1AoWCkgICBcCisgICgoR0VUX1JUWF9DTEFTUyAoR0VUX0NPREUgKFgpKSAmIFJUWF9DT01NVVRBVElWRV9NQVNLKQkJXAorICAgID09IFJUWF9DT01NVVRBVElWRV9SRVNVTFQpCisKKy8qIDEgaWYgWCBpcyBhIHJlbGF0aW9uYWwgb3BlcmF0b3IuICAqLworCisjZGVmaW5lIENPTVBBUklTT05fUChYKSAgIFwKKyAgKChHRVRfUlRYX0NMQVNTIChHRVRfQ09ERSAoWCkpICYgUlRYX0NPTVBBUkVfTUFTSykgPT0gUlRYX0NPTVBBUkVfUkVTVUxUKQorCisvKiAxIGlmIFggaXMgYSBjb25zdGFudCB2YWx1ZSB0aGF0IGlzIGFuIGludGVnZXIuICAqLworCisjZGVmaW5lIENPTlNUQU5UX1AoWCkgICBcCisgIChHRVRfUlRYX0NMQVNTIChHRVRfQ09ERSAoWCkpID09IFJUWF9DT05TVF9PQkopCisKKy8qIDEgaWYgWCBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYW4gb2JqZWN0LiAgKi8KKyNkZWZpbmUgT0JKRUNUX1AoWCkJCQkJCQkJXAorICAoKEdFVF9SVFhfQ0xBU1MgKEdFVF9DT0RFIChYKSkgJiBSVFhfT0JKX01BU0spID09IFJUWF9PQkpfUkVTVUxUKQorCisvKiBHZW5lcmFsIGFjY2Vzc29yIG1hY3JvcyBmb3IgYWNjZXNzaW5nIHRoZSBmaWVsZHMgb2YgYW4gcnR4LiAgKi8KKworI2lmIGRlZmluZWQgRU5BQkxFX1JUTF9DSEVDS0lORyAmJiAoR0NDX1ZFUlNJT04gPj0gMjAwNykKKy8qIFRoZSBiaXQgd2l0aCBhIHN0YXIgb3V0c2lkZSB0aGUgc3RhdGVtZW50IGV4cHIgYW5kIGFuICYgaW5zaWRlIGlzCisgICBzbyB0aGF0IE4gY2FuIGJlIGV2YWx1YXRlZCBvbmx5IG9uY2UuICAqLworI2RlZmluZSBSVExfQ0hFQ0sxKFJUWCwgTiwgQzEpIF9fZXh0ZW5zaW9uX18JCQkJXAorKCooeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7IGNvbnN0IGludCBfbiA9IChOKTsJCVwKKyAgICAgY29uc3QgZW51bSBydHhfY29kZSBfY29kZSA9IEdFVF9DT0RFIChfcnR4KTsJCQlcCisgICAgIGlmIChfbiA8IDAgfHwgX24gPj0gR0VUX1JUWF9MRU5HVEggKF9jb2RlKSkJCQlcCisgICAgICAgcnRsX2NoZWNrX2ZhaWxlZF9ib3VuZHMgKF9ydHgsIF9uLCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkJX19GVU5DVElPTl9fKTsJCQkJXAorICAgICBpZiAoR0VUX1JUWF9GT1JNQVQoX2NvZGUpW19uXSAhPSBDMSkJCQkJXAorICAgICAgIHJ0bF9jaGVja19mYWlsZWRfdHlwZTEgKF9ydHgsIF9uLCBDMSwgX19GSUxFX18sIF9fTElORV9fLAlcCisJCQkgICAgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgICAmX3J0eC0+dS5mbGRbX25dOyB9KSkKKworI2RlZmluZSBSVExfQ0hFQ0syKFJUWCwgTiwgQzEsIEMyKSBfX2V4dGVuc2lvbl9fCQkJXAorKCooeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7IGNvbnN0IGludCBfbiA9IChOKTsJCVwKKyAgICAgY29uc3QgZW51bSBydHhfY29kZSBfY29kZSA9IEdFVF9DT0RFIChfcnR4KTsJCQlcCisgICAgIGlmIChfbiA8IDAgfHwgX24gPj0gR0VUX1JUWF9MRU5HVEggKF9jb2RlKSkJCQlcCisgICAgICAgcnRsX2NoZWNrX2ZhaWxlZF9ib3VuZHMgKF9ydHgsIF9uLCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkJX19GVU5DVElPTl9fKTsJCQkJXAorICAgICBpZiAoR0VUX1JUWF9GT1JNQVQoX2NvZGUpW19uXSAhPSBDMQkJCQlcCisJICYmIEdFVF9SVFhfRk9STUFUKF9jb2RlKVtfbl0gIT0gQzIpCQkJCVwKKyAgICAgICBydGxfY2hlY2tfZmFpbGVkX3R5cGUyIChfcnR4LCBfbiwgQzEsIEMyLCBfX0ZJTEVfXywgX19MSU5FX18sCVwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICAgICZfcnR4LT51LmZsZFtfbl07IH0pKQorCisjZGVmaW5lIFJUTF9DSEVDS0MxKFJUWCwgTiwgQykgX19leHRlbnNpb25fXwkJCQlcCisoKih7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsgY29uc3QgaW50IF9uID0gKE4pOwkJXAorICAgICBpZiAoR0VUX0NPREUgKF9ydHgpICE9IChDKSkJCQkJCVwKKyAgICAgICBydGxfY2hlY2tfZmFpbGVkX2NvZGUxIChfcnR4LCAoQyksIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICAgICZfcnR4LT51LmZsZFtfbl07IH0pKQorCisjZGVmaW5lIFJUTF9DSEVDS0MyKFJUWCwgTiwgQzEsIEMyKSBfX2V4dGVuc2lvbl9fCQkJXAorKCooeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7IGNvbnN0IGludCBfbiA9IChOKTsJCVwKKyAgICAgY29uc3QgZW51bSBydHhfY29kZSBfY29kZSA9IEdFVF9DT0RFIChfcnR4KTsJCQlcCisgICAgIGlmIChfY29kZSAhPSAoQzEpICYmIF9jb2RlICE9IChDMikpCQkJCVwKKyAgICAgICBydGxfY2hlY2tfZmFpbGVkX2NvZGUyIChfcnR4LCAoQzEpLCAoQzIpLCBfX0ZJTEVfXywgX19MSU5FX18sCVwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOyBcCisgICAgICZfcnR4LT51LmZsZFtfbl07IH0pKQorCisjZGVmaW5lIFJUVkVDX0VMVChSVFZFQywgSSkgX19leHRlbnNpb25fXwkJCQlcCisoKih7IF9fdHlwZW9mIChSVFZFQykgY29uc3QgX3J0dmVjID0gKFJUVkVDKTsgY29uc3QgaW50IF9pID0gKEkpOwlcCisgICAgIGlmIChfaSA8IDAgfHwgX2kgPj0gR0VUX05VTV9FTEVNIChfcnR2ZWMpKQkJCQlcCisgICAgICAgcnR2ZWNfY2hlY2tfZmFpbGVkX2JvdW5kcyAoX3J0dmVjLCBfaSwgX19GSUxFX18sIF9fTElORV9fLAlcCisJCQkJICBfX0ZVTkNUSU9OX18pOwkJCVwKKyAgICAgJl9ydHZlYy0+ZWxlbVtfaV07IH0pKQorCisjZGVmaW5lIFhXSU5UKFJUWCwgTikgX19leHRlbnNpb25fXwkJCQkJXAorKCooeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7IGNvbnN0IGludCBfbiA9IChOKTsJCVwKKyAgICAgY29uc3QgZW51bSBydHhfY29kZSBfY29kZSA9IEdFVF9DT0RFIChfcnR4KTsJCQlcCisgICAgIGlmIChfbiA8IDAgfHwgX24gPj0gR0VUX1JUWF9MRU5HVEggKF9jb2RlKSkJCQlcCisgICAgICAgcnRsX2NoZWNrX2ZhaWxlZF9ib3VuZHMgKF9ydHgsIF9uLCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkJX19GVU5DVElPTl9fKTsJCQkJXAorICAgICBpZiAoR0VUX1JUWF9GT1JNQVQoX2NvZGUpW19uXSAhPSAndycpCQkJCVwKKyAgICAgICBydGxfY2hlY2tfZmFpbGVkX3R5cGUxIChfcnR4LCBfbiwgJ3cnLCBfX0ZJTEVfXywgX19MSU5FX18sCVwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICAgICZfcnR4LT51Lmh3aW50W19uXTsgfSkpCisKKyNkZWZpbmUgWENXSU5UKFJUWCwgTiwgQykgX19leHRlbnNpb25fXwkJCQkJXAorKCooeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7CQkJCQlcCisgICAgIGlmIChHRVRfQ09ERSAoX3J0eCkgIT0gKEMpKQkJCQkJXAorICAgICAgIHJ0bF9jaGVja19mYWlsZWRfY29kZTEgKF9ydHgsIChDKSwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgICAgJl9ydHgtPnUuaHdpbnRbTl07IH0pKQorCisjZGVmaW5lIFhDTVdJTlQoUlRYLCBOLCBDLCBNKSBfX2V4dGVuc2lvbl9fCQkJCVwKKygqKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOwkJCQkJXAorICAgICBpZiAoR0VUX0NPREUgKF9ydHgpICE9IChDKSB8fCBHRVRfTU9ERSAoX3J0eCkgIT0gKE0pKQkJXAorICAgICAgIHJ0bF9jaGVja19mYWlsZWRfY29kZV9tb2RlIChfcnR4LCAoQyksIChNKSwgZmFsc2UsIF9fRklMRV9fLAlcCisJCQkJICAgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQlcCisgICAgICZfcnR4LT51Lmh3aW50W05dOyB9KSkKKworI2RlZmluZSBYQ05NUFJWKFJUWCwgQywgTSkgX19leHRlbnNpb25fXwkJCQlcCisoeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7CQkJCQlcCisgICBpZiAoR0VUX0NPREUgKF9ydHgpICE9IChDKSB8fCBHRVRfTU9ERSAoX3J0eCkgPT0gKE0pKQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2NvZGVfbW9kZSAoX3J0eCwgKEMpLCAoTSksIHRydWUsIF9fRklMRV9fLAlcCisJCQkJIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOwkJXAorICAgJl9ydHgtPnUucnY7IH0pCisKKyNkZWZpbmUgWENOTVBGVihSVFgsIEMsIE0pIF9fZXh0ZW5zaW9uX18JCQkJXAorKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOwkJCQkJXAorICAgaWYgKEdFVF9DT0RFIChfcnR4KSAhPSAoQykgfHwgR0VUX01PREUgKF9ydHgpID09IChNKSkJCVwKKyAgICAgcnRsX2NoZWNrX2ZhaWxlZF9jb2RlX21vZGUgKF9ydHgsIChDKSwgKE0pLCB0cnVlLCBfX0ZJTEVfXywJXAorCQkJCSBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJCVwKKyAgICZfcnR4LT51LmZ2OyB9KQorCisjZGVmaW5lIEJMT0NLX1NZTUJPTF9DSEVDSyhSVFgpIF9fZXh0ZW5zaW9uX18JCQkJXAorKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3N5bWJvbCA9IChSVFgpOwkJCQlcCisgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MgPSBSVExfQ0hFQ0tDMSAoX3N5bWJvbCwgMSwgU1lNQk9MX1JFRikucnRfaW50OyBcCisgICBpZiAoKGZsYWdzICYgU1lNQk9MX0ZMQUdfSEFTX0JMT0NLX0lORk8pID09IDApCQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2Jsb2NrX3N5bWJvbCAoX19GSUxFX18sIF9fTElORV9fLAkJCVwKKwkJCQkgICAgX19GVU5DVElPTl9fKTsJCQlcCisgICAmX3N5bWJvbC0+dS5ibG9ja19zeW07IH0pCisKK2V4dGVybiB2b2lkIHJ0bF9jaGVja19mYWlsZWRfYm91bmRzIChjb25zdF9ydHgsIGludCwgY29uc3QgY2hhciAqLCBpbnQsCisJCQkJICAgICBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgcnRsX2NoZWNrX2ZhaWxlZF90eXBlMSAoY29uc3RfcnR4LCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBpbnQsCisJCQkJICAgIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBydGxfY2hlY2tfZmFpbGVkX3R5cGUyIChjb25zdF9ydHgsIGludCwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgcnRsX2NoZWNrX2ZhaWxlZF9jb2RlMSAoY29uc3RfcnR4LCBlbnVtIHJ0eF9jb2RlLCBjb25zdCBjaGFyICosCisJCQkJICAgIGludCwgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHJ0bF9jaGVja19mYWlsZWRfY29kZTIgKGNvbnN0X3J0eCwgZW51bSBydHhfY29kZSwgZW51bSBydHhfY29kZSwKKwkJCQkgICAgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBydGxfY2hlY2tfZmFpbGVkX2NvZGVfbW9kZSAoY29uc3RfcnR4LCBlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkJYm9vbCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBydGxfY2hlY2tfZmFpbGVkX2Jsb2NrX3N5bWJvbCAoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCBydHZlY19jaGVja19mYWlsZWRfYm91bmRzIChjb25zdF9ydHZlYywgaW50LCBjb25zdCBjaGFyICosIGludCwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKKworI2Vsc2UgICAvKiBub3QgRU5BQkxFX1JUTF9DSEVDS0lORyAqLworCisjZGVmaW5lIFJUTF9DSEVDSzEoUlRYLCBOLCBDMSkgICAgICAoKFJUWCktPnUuZmxkW05dKQorI2RlZmluZSBSVExfQ0hFQ0syKFJUWCwgTiwgQzEsIEMyKSAgKChSVFgpLT51LmZsZFtOXSkKKyNkZWZpbmUgUlRMX0NIRUNLQzEoUlRYLCBOLCBDKQkgICAgKChSVFgpLT51LmZsZFtOXSkKKyNkZWZpbmUgUlRMX0NIRUNLQzIoUlRYLCBOLCBDMSwgQzIpICgoUlRYKS0+dS5mbGRbTl0pCisjZGVmaW5lIFJUVkVDX0VMVChSVFZFQywgSSkJICAgICgoUlRWRUMpLT5lbGVtW0ldKQorI2RlZmluZSBYV0lOVChSVFgsIE4pCQkgICAgKChSVFgpLT51Lmh3aW50W05dKQorI2RlZmluZSBYQ1dJTlQoUlRYLCBOLCBDKQkgICAgKChSVFgpLT51Lmh3aW50W05dKQorI2RlZmluZSBYQ01XSU5UKFJUWCwgTiwgQywgTSkJICAgICgoUlRYKS0+dS5od2ludFtOXSkKKyNkZWZpbmUgWENOTVdJTlQoUlRYLCBOLCBDLCBNKQkgICAgKChSVFgpLT51Lmh3aW50W05dKQorI2RlZmluZSBYQ05NUFJWKFJUWCwgQywgTSkJICAgICgmKFJUWCktPnUucnYpCisjZGVmaW5lIFhDTk1QRlYoUlRYLCBDLCBNKQkgICAgKCYoUlRYKS0+dS5mdikKKyNkZWZpbmUgQkxPQ0tfU1lNQk9MX0NIRUNLKFJUWCkJICAgICgmKFJUWCktPnUuYmxvY2tfc3ltKQorCisjZW5kaWYKKworLyogR2VuZXJhbCBhY2Nlc3NvciBtYWNyb3MgZm9yIGFjY2Vzc2luZyB0aGUgZmxhZ3Mgb2YgYW4gcnR4LiAgKi8KKworLyogQWNjZXNzIGFuIGluZGl2aWR1YWwgcnR4IGZsYWcsIHdpdGggbm8gY2hlY2tpbmcgb2YgYW55IGtpbmQuICAqLworI2RlZmluZSBSVFhfRkxBRyhSVFgsIEZMQUcpCSgoUlRYKS0+RkxBRykKKworI2lmIGRlZmluZWQgRU5BQkxFX1JUTF9GTEFHX0NIRUNLSU5HICYmIChHQ0NfVkVSU0lPTiA+PSAyMDA3KQorI2RlZmluZSBSVExfRkxBR19DSEVDSzEoTkFNRSwgUlRYLCBDMSkgX19leHRlbnNpb25fXwkJCVwKKyh7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsJCQkJCVwKKyAgIGlmIChHRVRfQ09ERShfcnR4KSAhPSBDMSkJCQkJCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfZmxhZyAgKE5BTUUsIF9ydHgsIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCSAgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgX3J0eDsgfSkKKworI2RlZmluZSBSVExfRkxBR19DSEVDSzIoTkFNRSwgUlRYLCBDMSwgQzIpIF9fZXh0ZW5zaW9uX18JCVwKKyh7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsJCQkJCVwKKyAgIGlmIChHRVRfQ09ERShfcnR4KSAhPSBDMSAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMikJCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfZmxhZyAgKE5BTUUsX3J0eCwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJICAgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgX3J0eDsgfSkKKworI2RlZmluZSBSVExfRkxBR19DSEVDSzMoTkFNRSwgUlRYLCBDMSwgQzIsIEMzKSBfX2V4dGVuc2lvbl9fCQlcCisoeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7CQkJCQlcCisgICBpZiAoR0VUX0NPREUoX3J0eCkgIT0gQzEgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzIJCQlcCisgICAgICAgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzMpCQkJCQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2ZsYWcgIChOQU1FLCBfcnR4LCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgIF9ydHg7IH0pCisKKyNkZWZpbmUgUlRMX0ZMQUdfQ0hFQ0s0KE5BTUUsIFJUWCwgQzEsIEMyLCBDMywgQzQpIF9fZXh0ZW5zaW9uX18JXAorKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOwkJCQkJXAorICAgaWYgKEdFVF9DT0RFKF9ydHgpICE9IEMxICYmIEdFVF9DT0RFKF9ydHgpICE9IEMyCQkJXAorICAgICAgICYmIEdFVF9DT0RFKF9ydHgpICE9IEMzICYmIEdFVF9DT0RFKF9ydHgpICE9IEM0KQkJCVwKKyAgICAgcnRsX2NoZWNrX2ZhaWxlZF9mbGFnICAoTkFNRSwgX3J0eCwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJICAgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgX3J0eDsgfSkKKworI2RlZmluZSBSVExfRkxBR19DSEVDSzUoTkFNRSwgUlRYLCBDMSwgQzIsIEMzLCBDNCwgQzUpIF9fZXh0ZW5zaW9uX18JXAorKHsgX190eXBlb2YgKFJUWCkgY29uc3QgX3J0eCA9IChSVFgpOwkJCQkJXAorICAgaWYgKEdFVF9DT0RFKF9ydHgpICE9IEMxICYmIEdFVF9DT0RFKF9ydHgpICE9IEMyCQkJXAorICAgICAgICYmIEdFVF9DT0RFKF9ydHgpICE9IEMzICYmIEdFVF9DT0RFKF9ydHgpICE9IEM0CQkJXAorICAgICAgICYmIEdFVF9DT0RFKF9ydHgpICE9IEM1KQkJCQkJCVwKKyAgICAgcnRsX2NoZWNrX2ZhaWxlZF9mbGFnICAoTkFNRSwgX3J0eCwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICBfcnR4OyB9KQorCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLNihOQU1FLCBSVFgsIEMxLCBDMiwgQzMsIEM0LCBDNSwgQzYpCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsJCQkJCVwKKyAgIGlmIChHRVRfQ09ERShfcnR4KSAhPSBDMSAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMgkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMyAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNAkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNSAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNikJCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfZmxhZyAgKE5BTUUsX3J0eCwgX19GSUxFX18sIF9fTElORV9fLAkJXAorCQkJICAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICBfcnR4OyB9KQorCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLNyhOQU1FLCBSVFgsIEMxLCBDMiwgQzMsIEM0LCBDNSwgQzYsIEM3KQkJXAorICBfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBfX3R5cGVvZiAoUlRYKSBjb25zdCBfcnR4ID0gKFJUWCk7CQkJCQlcCisgICBpZiAoR0VUX0NPREUoX3J0eCkgIT0gQzEgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzIJCQlcCisgICAgICAgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzMgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzQJCQlcCisgICAgICAgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzUgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzYJCQlcCisgICAgICAgJiYgR0VUX0NPREUoX3J0eCkgIT0gQzcpCQkJCQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2ZsYWcgIChOQU1FLCBfcnR4LCBfX0ZJTEVfXywgX19MSU5FX18sCQlcCisJCQkgICAgIF9fRlVOQ1RJT05fXyk7CQkJCVwKKyAgIF9ydHg7IH0pCisKKyNkZWZpbmUgUlRMX0ZMQUdfQ0hFQ0s4KE5BTUUsIFJUWCwgQzEsIEMyLCBDMywgQzQsIEM1LCBDNiwgQzcsIEM4KQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IF9fdHlwZW9mIChSVFgpIGNvbnN0IF9ydHggPSAoUlRYKTsJCQkJCVwKKyAgIGlmIChHRVRfQ09ERShfcnR4KSAhPSBDMSAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMgkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDMyAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNAkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNSAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNgkJCVwKKyAgICAgICAmJiBHRVRfQ09ERShfcnR4KSAhPSBDNyAmJiBHRVRfQ09ERShfcnR4KSAhPSBDOCkJCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfZmxhZyAgKE5BTUUsIF9ydHgsIF9fRklMRV9fLCBfX0xJTkVfXywJCVwKKwkJCSAgICAgX19GVU5DVElPTl9fKTsJCQkJXAorICAgX3J0eDsgfSkKKworZXh0ZXJuIHZvaWQgcnRsX2NoZWNrX2ZhaWxlZF9mbGFnIChjb25zdCBjaGFyICosIGNvbnN0X3J0eCwgY29uc3QgY2hhciAqLAorCQkJCSAgIGludCwgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTgorICAgIDsKKworI2Vsc2UJLyogbm90IEVOQUJMRV9SVExfRkxBR19DSEVDS0lORyAqLworCisjZGVmaW5lIFJUTF9GTEFHX0NIRUNLMShOQU1FLCBSVFgsIEMxKQkJCQkJKFJUWCkKKyNkZWZpbmUgUlRMX0ZMQUdfQ0hFQ0syKE5BTUUsIFJUWCwgQzEsIEMyKQkJCQkoUlRYKQorI2RlZmluZSBSVExfRkxBR19DSEVDSzMoTkFNRSwgUlRYLCBDMSwgQzIsIEMzKQkJCQkoUlRYKQorI2RlZmluZSBSVExfRkxBR19DSEVDSzQoTkFNRSwgUlRYLCBDMSwgQzIsIEMzLCBDNCkJCQkoUlRYKQorI2RlZmluZSBSVExfRkxBR19DSEVDSzUoTkFNRSwgUlRYLCBDMSwgQzIsIEMzLCBDNCwgQzUpCQkoUlRYKQorI2RlZmluZSBSVExfRkxBR19DSEVDSzYoTkFNRSwgUlRYLCBDMSwgQzIsIEMzLCBDNCwgQzUsIEM2KQkJKFJUWCkKKyNkZWZpbmUgUlRMX0ZMQUdfQ0hFQ0s3KE5BTUUsIFJUWCwgQzEsIEMyLCBDMywgQzQsIEM1LCBDNiwgQzcpCQkoUlRYKQorI2RlZmluZSBSVExfRkxBR19DSEVDSzgoTkFNRSwgUlRYLCBDMSwgQzIsIEMzLCBDNCwgQzUsIEM2LCBDNywgQzgpCShSVFgpCisjZW5kaWYKKworI2RlZmluZSBYSU5UKFJUWCwgTikJKFJUTF9DSEVDSzIgKFJUWCwgTiwgJ2knLCAnbicpLnJ0X2ludCkKKyNkZWZpbmUgWFVJTlQoUlRYLCBOKSAgIChSVExfQ0hFQ0syIChSVFgsIE4sICdpJywgJ24nKS5ydF91aW50KQorI2RlZmluZSBYU1RSKFJUWCwgTikJKFJUTF9DSEVDSzIgKFJUWCwgTiwgJ3MnLCAnUycpLnJ0X3N0cikKKyNkZWZpbmUgWEVYUChSVFgsIE4pCShSVExfQ0hFQ0syIChSVFgsIE4sICdlJywgJ3UnKS5ydF9ydHgpCisjZGVmaW5lIFhWRUMoUlRYLCBOKQkoUlRMX0NIRUNLMiAoUlRYLCBOLCAnRScsICdWJykucnRfcnR2ZWMpCisjZGVmaW5lIFhNT0RFKFJUWCwgTikJKFJUTF9DSEVDSzEgKFJUWCwgTiwgJ00nKS5ydF90eXBlKQorI2RlZmluZSBYVFJFRShSVFgsIE4pICAgKFJUTF9DSEVDSzEgKFJUWCwgTiwgJ3QnKS5ydF90cmVlKQorI2RlZmluZSBYQkJERUYoUlRYLCBOKQkoUlRMX0NIRUNLMSAoUlRYLCBOLCAnQicpLnJ0X2JiKQorI2RlZmluZSBYVE1QTChSVFgsIE4pCShSVExfQ0hFQ0sxIChSVFgsIE4sICdUJykucnRfc3RyKQorI2RlZmluZSBYQ0ZJKFJUWCwgTikJKFJUTF9DSEVDSzEgKFJUWCwgTiwgJ0MnKS5ydF9jZmkpCisKKyNkZWZpbmUgWFZFQ0VYUChSVFgsIE4sIE0pCVJUVkVDX0VMVCAoWFZFQyAoUlRYLCBOKSwgTSkKKyNkZWZpbmUgWFZFQ0xFTihSVFgsIE4pCQlHRVRfTlVNX0VMRU0gKFhWRUMgKFJUWCwgTikpCisKKy8qIFRoZXNlIGFyZSBsaWtlIFhJTlQsIGV0Yy4gZXhjZXB0IHRoYXQgdGhleSBleHBlY3QgYSAnMCcgZmllbGQgaW5zdGVhZAorICAgb2YgdGhlIG5vcm1hbCB0eXBlIGNvZGUuICAqLworCisjZGVmaW5lIFgwSU5UKFJUWCwgTikJICAgKFJUTF9DSEVDSzEgKFJUWCwgTiwgJzAnKS5ydF9pbnQpCisjZGVmaW5lIFgwVUlOVChSVFgsIE4pCSAgIChSVExfQ0hFQ0sxIChSVFgsIE4sICcwJykucnRfdWludCkKKyNkZWZpbmUgWDBTVFIoUlRYLCBOKQkgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X3N0cikKKyNkZWZpbmUgWDBFWFAoUlRYLCBOKQkgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X3J0eCkKKyNkZWZpbmUgWDBWRUMoUlRYLCBOKQkgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X3J0dmVjKQorI2RlZmluZSBYME1PREUoUlRYLCBOKQkgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X3R5cGUpCisjZGVmaW5lIFgwVFJFRShSVFgsIE4pCSAgIChSVExfQ0hFQ0sxIChSVFgsIE4sICcwJykucnRfdHJlZSkKKyNkZWZpbmUgWDBCQkRFRihSVFgsIE4pCSAgIChSVExfQ0hFQ0sxIChSVFgsIE4sICcwJykucnRfYmIpCisjZGVmaW5lIFgwQURWRkxBR1MoUlRYLCBOKSAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X2FkZHJfZGlmZl92ZWNfZmxhZ3MpCisjZGVmaW5lIFgwQ1NFTElCKFJUWCwgTikgICAoUlRMX0NIRUNLMSAoUlRYLCBOLCAnMCcpLnJ0X2NzZWxpYikKKyNkZWZpbmUgWDBNRU1BVFRSKFJUWCwgTikgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBNRU0pLnJ0X21lbSkKKyNkZWZpbmUgWDBSRUdBVFRSKFJUWCwgTikgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBSRUcpLnJ0X3JlZykKKyNkZWZpbmUgWDBDT05TVEFOVChSVFgsIE4pIChSVExfQ0hFQ0sxIChSVFgsIE4sICcwJykucnRfY29uc3RhbnQpCisKKy8qIEFjY2VzcyBhICcwJyBmaWVsZCB3aXRoIGFueSB0eXBlLiAgKi8KKyNkZWZpbmUgWDBBTlkoUlRYLCBOKQkgICBSVExfQ0hFQ0sxIChSVFgsIE4sICcwJykKKworI2RlZmluZSBYQ0lOVChSVFgsIE4sIEMpICAgICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X2ludCkKKyNkZWZpbmUgWENVSU5UKFJUWCwgTiwgQykgICAgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBDKS5ydF91aW50KQorI2RlZmluZSBYQ1NUUihSVFgsIE4sIEMpICAgICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X3N0cikKKyNkZWZpbmUgWENFWFAoUlRYLCBOLCBDKSAgICAgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBDKS5ydF9ydHgpCisjZGVmaW5lIFhDVkVDKFJUWCwgTiwgQykgICAgICAoUlRMX0NIRUNLQzEgKFJUWCwgTiwgQykucnRfcnR2ZWMpCisjZGVmaW5lIFhDTU9ERShSVFgsIE4sIEMpICAgICAoUlRMX0NIRUNLQzEgKFJUWCwgTiwgQykucnRfdHlwZSkKKyNkZWZpbmUgWENUUkVFKFJUWCwgTiwgQykgICAgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBDKS5ydF90cmVlKQorI2RlZmluZSBYQ0JCREVGKFJUWCwgTiwgQykgICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X2JiKQorI2RlZmluZSBYQ0NGSShSVFgsIE4sIEMpICAgICAgKFJUTF9DSEVDS0MxIChSVFgsIE4sIEMpLnJ0X2NmaSkKKyNkZWZpbmUgWENDU0VMSUIoUlRYLCBOLCBDKSAgIChSVExfQ0hFQ0tDMSAoUlRYLCBOLCBDKS5ydF9jc2VsaWIpCisKKyNkZWZpbmUgWENWRUNFWFAoUlRYLCBOLCBNLCBDKQlSVFZFQ19FTFQgKFhDVkVDIChSVFgsIE4sIEMpLCBNKQorI2RlZmluZSBYQ1ZFQ0xFTihSVFgsIE4sIEMpCUdFVF9OVU1fRUxFTSAoWENWRUMgKFJUWCwgTiwgQykpCisKKyNkZWZpbmUgWEMyRVhQKFJUWCwgTiwgQzEsIEMyKSAgICAgIChSVExfQ0hFQ0tDMiAoUlRYLCBOLCBDMSwgQzIpLnJ0X3J0eCkKKwwKKy8qIEFDQ0VTUyBNQUNST1MgZm9yIHBhcnRpY3VsYXIgZmllbGRzIG9mIGluc25zLiAgKi8KKworLyogSG9sZHMgYSB1bmlxdWUgbnVtYmVyIGZvciBlYWNoIGluc24uCisgICBUaGVzZSBhcmUgbm90IG5lY2Vzc2FyaWx5IHNlcXVlbnRpYWxseSBpbmNyZWFzaW5nLiAgKi8KKyNkZWZpbmUgSU5TTl9VSUQoSU5TTikgIFhJTlQgKElOU04sIDApCisKKy8qIENoYWluIGluc25zIHRvZ2V0aGVyIGluIHNlcXVlbmNlLiAgKi8KKyNkZWZpbmUgUFJFVl9JTlNOKElOU04pCVhFWFAgKElOU04sIDEpCisjZGVmaW5lIE5FWFRfSU5TTihJTlNOKQlYRVhQIChJTlNOLCAyKQorCisjZGVmaW5lIEJMT0NLX0ZPUl9JTlNOKElOU04pIFhCQkRFRiAoSU5TTiwgMykKKworLyogVGhlIGJvZHkgb2YgYW4gaW5zbi4gICovCisjZGVmaW5lIFBBVFRFUk4oSU5TTikJWEVYUCAoSU5TTiwgNCkKKworI2RlZmluZSBJTlNOX0xPQ0FUSU9OKElOU04pIFhVSU5UIChJTlNOLCA1KQorCisjZGVmaW5lIElOU05fSEFTX0xPQ0FUSU9OKElOU04pICgoTE9DQVRJT05fTE9DVVMgKElOU05fTE9DQVRJT04gKElOU04pKSlcCisgICE9IFVOS05PV05fTE9DQVRJT04pCisKKy8qIExPQ0FUSU9OIG9mIGFuIFJUWCBpZiByZWxldmFudC4gICovCisjZGVmaW5lIFJUTF9MT0NBVElPTihYKSAoSU5TTl9QIChYKSA/IFwKKwkJCSBJTlNOX0xPQ0FUSU9OIChYKSA6IFVOS05PV05fTE9DQVRJT04pCisKKy8qIENvZGUgbnVtYmVyIG9mIGluc3RydWN0aW9uLCBmcm9tIHdoZW4gaXQgd2FzIHJlY29nbml6ZWQuCisgICAtMSBtZWFucyB0aGlzIGluc3RydWN0aW9uIGhhcyBub3QgYmVlbiByZWNvZ25pemVkIHlldC4gICovCisjZGVmaW5lIElOU05fQ09ERShJTlNOKSBYSU5UIChJTlNOLCA2KQorCisjZGVmaW5lIFJUWF9GUkFNRV9SRUxBVEVEX1AoUlRYKQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0s2KCJSVFhfRlJBTUVfUkVMQVRFRF9QIiwgKFJUWCksIERFQlVHX0lOU04sIElOU04sCVwKKwkJICAgQ0FMTF9JTlNOLCBKVU1QX0lOU04sIEJBUlJJRVIsIFNFVCktPmZyYW1lX3JlbGF0ZWQpCisKKy8qIDEgaWYgUlRYIGlzIGFuIGluc24gdGhhdCBoYXMgYmVlbiBkZWxldGVkLiAgKi8KKyNkZWZpbmUgSU5TTl9ERUxFVEVEX1AoUlRYKQkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLNygiSU5TTl9ERUxFVEVEX1AiLCAoUlRYKSwgREVCVUdfSU5TTiwgSU5TTiwJCVwKKwkJICAgQ0FMTF9JTlNOLCBKVU1QX0lOU04sCQkJCVwKKwkJICAgQ09ERV9MQUJFTCwgQkFSUklFUiwgTk9URSktPnZvbGF0aWwpCisKKy8qIDEgaWYgUlRYIGlzIGEgY2FsbCB0byBhIGNvbnN0IGZ1bmN0aW9uLiAgQnVpbHQgZnJvbSBFQ0ZfQ09OU1QgYW5kCisgICBUUkVFX1JFQURPTkxZLiAgKi8KKyNkZWZpbmUgUlRMX0NPTlNUX0NBTExfUChSVFgpCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlJUTF9DT05TVF9DQUxMX1AiLCAoUlRYKSwgQ0FMTF9JTlNOKS0+dW5jaGFuZ2luZykKKworLyogMSBpZiBSVFggaXMgYSBjYWxsIHRvIGEgcHVyZSBmdW5jdGlvbi4gIEJ1aWx0IGZyb20gRUNGX1BVUkUgYW5kCisgICBERUNMX1BVUkVfUC4gICovCisjZGVmaW5lIFJUTF9QVVJFX0NBTExfUChSVFgpCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlJUTF9QVVJFX0NBTExfUCIsIChSVFgpLCBDQUxMX0lOU04pLT5yZXR1cm5fdmFsKQorCisvKiAxIGlmIFJUWCBpcyBhIGNhbGwgdG8gYSBjb25zdCBvciBwdXJlIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgUlRMX0NPTlNUX09SX1BVUkVfQ0FMTF9QKFJUWCkgXAorICAoUlRMX0NPTlNUX0NBTExfUChSVFgpIHx8IFJUTF9QVVJFX0NBTExfUChSVFgpKQorCisvKiAxIGlmIFJUWCBpcyBhIGNhbGwgdG8gYSBsb29waW5nIGNvbnN0IG9yIHB1cmUgZnVuY3Rpb24uICBCdWlsdCBmcm9tCisgICBFQ0ZfTE9PUElOR19DT05TVF9PUl9QVVJFIGFuZCBERUNMX0xPT1BJTkdfQ09OU1RfT1JfUFVSRV9QLiAgKi8KKyNkZWZpbmUgUlRMX0xPT1BJTkdfQ09OU1RfT1JfUFVSRV9DQUxMX1AoUlRYKQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJDT05TVF9PUl9QVVJFX0NBTExfUCIsIChSVFgpLCBDQUxMX0lOU04pLT5jYWxsKQorCisvKiAxIGlmIFJUWCBpcyBhIGNhbGxfaW5zbiBmb3IgYSBzaWJsaW5nIGNhbGwuICAqLworI2RlZmluZSBTSUJMSU5HX0NBTExfUChSVFgpCQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJTSUJMSU5HX0NBTExfUCIsIChSVFgpLCBDQUxMX0lOU04pLT5qdW1wKQorCisvKiAxIGlmIFJUWCBpcyBhIGp1bXBfaW5zbiwgY2FsbF9pbnNuLCBvciBpbnNuIHRoYXQgaXMgYW4gYW5udWxsaW5nIGJyYW5jaC4gICovCisjZGVmaW5lIElOU05fQU5OVUxMRURfQlJBTkNIX1AoUlRYKQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJJTlNOX0FOTlVMTEVEX0JSQU5DSF9QIiwgKFJUWCksIEpVTVBfSU5TTiktPnVuY2hhbmdpbmcpCisKKy8qIDEgaWYgUlRYIGlzIGFuIGluc24gaW4gYSBkZWxheSBzbG90IGFuZCBpcyBmcm9tIHRoZSB0YXJnZXQgb2YgdGhlIGJyYW5jaC4KKyAgIElmIHRoZSBicmFuY2ggaW5zbiBoYXMgSU5TTl9BTk5VTExFRF9CUkFOQ0hfUCBzZXQsIHRoaXMgaW5zbiBzaG91bGQgb25seSBiZQorICAgZXhlY3V0ZWQgaWYgdGhlIGJyYW5jaCBpcyB0YWtlbi4gIEZvciBhbm51bGxlZCBicmFuY2hlcyB3aXRoIHRoaXMgYml0CisgICBjbGVhciwgdGhlIGluc24gc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgaWYgdGhlIGJyYW5jaCBpcyBub3QgdGFrZW4uICAqLworI2RlZmluZSBJTlNOX0ZST01fVEFSR0VUX1AoUlRYKQkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMygiSU5TTl9GUk9NX1RBUkdFVF9QIiwgKFJUWCksIElOU04sIEpVTVBfSU5TTiwgQ0FMTF9JTlNOKS0+aW5fc3RydWN0KQorCisvKiBJbiBhbiBBRERSX0RJRkZfVkVDLCB0aGUgZmxhZ3MgZm9yIFJUWCBmb3IgdXNlIGJ5IGJyYW5jaCBzaG9ydGVuaW5nLgorICAgU2VlIHRoZSBjb21tZW50cyBmb3IgQUREUl9ESUZGX1ZFQyBpbiBydGwuZGVmLiAgKi8KKyNkZWZpbmUgQUREUl9ESUZGX1ZFQ19GTEFHUyhSVFgpIFgwQURWRkxBR1MoUlRYLCA0KQorCisvKiBJbiBhIFZBTFVFLCB0aGUgdmFsdWUgY3NlbGliIGhhcyBhc3NpZ25lZCB0byBSVFguCisgICBUaGlzIGlzIGEgInN0cnVjdCBjc2VsaWJfdmFsX3N0cnVjdCIsIHNlZSBjc2VsaWIuaC4gICovCisjZGVmaW5lIENTRUxJQl9WQUxfUFRSKFJUWCkgWDBDU0VMSUIoUlRYLCAwKQorCisvKiBIb2xkcyBhIGxpc3Qgb2Ygbm90ZXMgb24gd2hhdCB0aGlzIGluc24gZG9lcyB0byB2YXJpb3VzIFJFR3MuCisgICBJdCBpcyBhIGNoYWluIG9mIEVYUFJfTElTVCBydHgncywgd2hlcmUgdGhlIHNlY29uZCBvcGVyYW5kIGlzIHRoZQorICAgY2hhaW4gcG9pbnRlciBhbmQgdGhlIGZpcnN0IG9wZXJhbmQgaXMgdGhlIFJFRyBiZWluZyBkZXNjcmliZWQuCisgICBUaGUgbW9kZSBmaWVsZCBvZiB0aGUgRVhQUl9MSVNUIGNvbnRhaW5zIG5vdCBhIHJlYWwgbWFjaGluZSBtb2RlCisgICBidXQgYSB2YWx1ZSBmcm9tIGVudW0gcmVnX25vdGUuICAqLworI2RlZmluZSBSRUdfTk9URVMoSU5TTikJWEVYUChJTlNOLCA3KQorCisvKiBJbiBhbiBFTlRSWV9WQUxVRSB0aGlzIGlzIHRoZSBERUNMX0lOQ09NSU5HX1JUTCBvZiB0aGUgYXJndW1lbnQgaW4KKyAgIHF1ZXN0aW9uLiAgKi8KKyNkZWZpbmUgRU5UUllfVkFMVUVfRVhQKFJUWCkgKFJUTF9DSEVDS0MxIChSVFgsIDAsIEVOVFJZX1ZBTFVFKS5ydF9ydHgpCisKK2VudW0gcmVnX25vdGUKK3sKKyNkZWZpbmUgREVGX1JFR19OT1RFKE5BTUUpIE5BTUUsCisjaW5jbHVkZSAicmVnLW5vdGVzLmRlZiIKKyN1bmRlZiBERUZfUkVHX05PVEUKKyAgUkVHX05PVEVfTUFYCit9OworCisvKiBEZWZpbmUgbWFjcm9zIHRvIGV4dHJhY3QgYW5kIGluc2VydCB0aGUgcmVnLW5vdGUga2luZCBpbiBhbiBFWFBSX0xJU1QuICAqLworI2RlZmluZSBSRUdfTk9URV9LSU5EKExJTkspICgoZW51bSByZWdfbm90ZSkgR0VUX01PREUgKExJTkspKQorI2RlZmluZSBQVVRfUkVHX05PVEVfS0lORChMSU5LLCBLSU5EKSBcCisgIFBVVF9NT0RFIChMSU5LLCAoZW51bSBtYWNoaW5lX21vZGUpIChLSU5EKSkKKworLyogTmFtZXMgZm9yIFJFR19OT1RFJ3MgaW4gRVhQUl9MSVNUIGluc24ncy4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgcmVnX25vdGVfbmFtZVtdOworI2RlZmluZSBHRVRfUkVHX05PVEVfTkFNRShNT0RFKSAocmVnX25vdGVfbmFtZVsoaW50KSAoTU9ERSldKQorCisvKiBUaGlzIGZpZWxkIGlzIG9ubHkgcHJlc2VudCBvbiBDQUxMX0lOU05zLiAgSXQgaG9sZHMgYSBjaGFpbiBvZiBFWFBSX0xJU1Qgb2YKKyAgIFVTRSBhbmQgQ0xPQkJFUiBleHByZXNzaW9ucy4KKyAgICAgVVNFIGV4cHJlc3Npb25zIGxpc3QgdGhlIHJlZ2lzdGVycyBmaWxsZWQgd2l0aCBhcmd1bWVudHMgdGhhdAorICAgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisgICAgIENMT0JCRVIgZXhwcmVzc2lvbnMgZG9jdW1lbnQgdGhlIHJlZ2lzdGVycyBleHBsaWNpdGx5IGNsb2JiZXJlZAorICAgYnkgdGhpcyBDQUxMX0lOU04uCisgICAgIFBzZXVkbyByZWdpc3RlcnMgY2FuIG5vdCBiZSBtZW50aW9uZWQgaW4gdGhpcyBsaXN0LiAgKi8KKyNkZWZpbmUgQ0FMTF9JTlNOX0ZVTkNUSU9OX1VTQUdFKElOU04pCVhFWFAoSU5TTiwgOCkKKworLyogVGhlIGxhYmVsLW51bWJlciBvZiBhIGNvZGUtbGFiZWwuICBUaGUgYXNzZW1ibGVyIGxhYmVsCisgICBpcyBtYWRlIGZyb20gYEwnIGFuZCB0aGUgbGFiZWwtbnVtYmVyIHByaW50ZWQgaW4gZGVjaW1hbC4KKyAgIExhYmVsIG51bWJlcnMgYXJlIHVuaXF1ZSBpbiBhIGNvbXBpbGF0aW9uLiAgKi8KKyNkZWZpbmUgQ09ERV9MQUJFTF9OVU1CRVIoSU5TTikJWElOVCAoSU5TTiwgNikKKworLyogSW4gYSBOT1RFIHRoYXQgaXMgYSBsaW5lIG51bWJlciwgdGhpcyBpcyBhIHN0cmluZyBmb3IgdGhlIGZpbGUgbmFtZSB0aGF0IHRoZQorICAgbGluZSBpcyBpbi4gIFdlIHVzZSB0aGUgc2FtZSBmaWVsZCB0byByZWNvcmQgYmxvY2sgbnVtYmVycyB0ZW1wb3JhcmlseSBpbgorICAgTk9URV9JTlNOX0JMT0NLX0JFRyBhbmQgTk9URV9JTlNOX0JMT0NLX0VORCBub3Rlcy4gIChXZSBhdm9pZCBsb3RzIG9mIGNhc3RzCisgICBiZXR3ZWVuIGludHMgYW5kIHBvaW50ZXJzIGlmIHdlIHVzZSBhIGRpZmZlcmVudCBtYWNybyBmb3IgdGhlIGJsb2NrIG51bWJlci4pCisgICAqLworCisvKiBPcGFxdWUgZGF0YS4gICovCisjZGVmaW5lIE5PVEVfREFUQShJTlNOKQkgICAgICAgIFJUTF9DSEVDS0MxIChJTlNOLCA0LCBOT1RFKQorI2RlZmluZSBOT1RFX0RFTEVURURfTEFCRUxfTkFNRShJTlNOKSBYQ1NUUiAoSU5TTiwgNCwgTk9URSkKKyNkZWZpbmUgU0VUX0lOU05fREVMRVRFRChJTlNOKSBzZXRfaW5zbl9kZWxldGVkIChJTlNOKTsKKyNkZWZpbmUgTk9URV9CTE9DSyhJTlNOKQlYQ1RSRUUgKElOU04sIDQsIE5PVEUpCisjZGVmaW5lIE5PVEVfRUhfSEFORExFUihJTlNOKQlYQ0lOVCAoSU5TTiwgNCwgTk9URSkKKyNkZWZpbmUgTk9URV9CQVNJQ19CTE9DSyhJTlNOKQlYQ0JCREVGIChJTlNOLCA0LCBOT1RFKQorI2RlZmluZSBOT1RFX1ZBUl9MT0NBVElPTihJTlNOKQlYQ0VYUCAoSU5TTiwgNCwgTk9URSkKKyNkZWZpbmUgTk9URV9DRkkoSU5TTikJCVhDQ0ZJIChJTlNOLCA0LCBOT1RFKQorI2RlZmluZSBOT1RFX0xBQkVMX05VTUJFUihJTlNOKQlYQ0lOVCAoSU5TTiwgNCwgTk9URSkKKworLyogSW4gYSBOT1RFIHRoYXQgaXMgYSBsaW5lIG51bWJlciwgdGhpcyBpcyB0aGUgbGluZSBudW1iZXIuCisgICBPdGhlciBraW5kcyBvZiBOT1RFcyBhcmUgaWRlbnRpZmllZCBieSBuZWdhdGl2ZSBudW1iZXJzIGhlcmUuICAqLworI2RlZmluZSBOT1RFX0tJTkQoSU5TTikgWENJTlQgKElOU04sIDUsIE5PVEUpCisKKy8qIE5vbnplcm8gaWYgSU5TTiBpcyBhIG5vdGUgbWFya2luZyB0aGUgYmVnaW5uaW5nIG9mIGEgYmFzaWMgYmxvY2suICAqLworI2RlZmluZSBOT1RFX0lOU05fQkFTSUNfQkxPQ0tfUChJTlNOKQkJCVwKKyAgKEdFVF9DT0RFIChJTlNOKSA9PSBOT1RFCQkJCVwKKyAgICYmIE5PVEVfS0lORCAoSU5TTikgPT0gTk9URV9JTlNOX0JBU0lDX0JMT0NLKQorCisvKiBWYXJpYWJsZSBkZWNsYXJhdGlvbiBhbmQgdGhlIGxvY2F0aW9uIG9mIGEgdmFyaWFibGUuICAqLworI2RlZmluZSBQQVRfVkFSX0xPQ0FUSU9OX0RFQ0woUEFUKSAoWENUUkVFICgoUEFUKSwgMCwgVkFSX0xPQ0FUSU9OKSkKKyNkZWZpbmUgUEFUX1ZBUl9MT0NBVElPTl9MT0MoUEFUKSAoWENFWFAgKChQQVQpLCAxLCBWQVJfTE9DQVRJT04pKQorCisvKiBJbml0aWFsaXphdGlvbiBzdGF0dXMgb2YgdGhlIHZhcmlhYmxlIGluIHRoZSBsb2NhdGlvbi4gIFN0YXR1cworICAgY2FuIGJlIHVua25vd24sIHVuaW5pdGlhbGl6ZWQgb3IgaW5pdGlhbGl6ZWQuICBTZWUgZW51bWVyYXRpb24KKyAgIHR5cGUgYmVsb3cuICAqLworI2RlZmluZSBQQVRfVkFSX0xPQ0FUSU9OX1NUQVRVUyhQQVQpIFwKKyAgKChlbnVtIHZhcl9pbml0X3N0YXR1cykgKFhDSU5UICgoUEFUKSwgMiwgVkFSX0xPQ0FUSU9OKSkpCisKKy8qIEFjY2Vzc29ycyBmb3IgYSBOT1RFX0lOU05fVkFSX0xPQ0FUSU9OLiAgKi8KKyNkZWZpbmUgTk9URV9WQVJfTE9DQVRJT05fREVDTChOT1RFKSBcCisgIFBBVF9WQVJfTE9DQVRJT05fREVDTCAoTk9URV9WQVJfTE9DQVRJT04gKE5PVEUpKQorI2RlZmluZSBOT1RFX1ZBUl9MT0NBVElPTl9MT0MoTk9URSkgXAorICBQQVRfVkFSX0xPQ0FUSU9OX0xPQyAoTk9URV9WQVJfTE9DQVRJT04gKE5PVEUpKQorI2RlZmluZSBOT1RFX1ZBUl9MT0NBVElPTl9TVEFUVVMoTk9URSkgXAorICBQQVRfVkFSX0xPQ0FUSU9OX1NUQVRVUyAoTk9URV9WQVJfTE9DQVRJT04gKE5PVEUpKQorCisvKiBUaGUgVkFSX0xPQ0FUSU9OIHJ0eCBpbiBhIERFQlVHX0lOU04uICAqLworI2RlZmluZSBJTlNOX1ZBUl9MT0NBVElPTihJTlNOKSBQQVRURVJOIChJTlNOKQorCisvKiBBY2Nlc3NvcnMgZm9yIGEgdHJlZS1leHBhbmRlZCB2YXIgbG9jYXRpb24gZGVidWcgaW5zbi4gICovCisjZGVmaW5lIElOU05fVkFSX0xPQ0FUSU9OX0RFQ0woSU5TTikgXAorICBQQVRfVkFSX0xPQ0FUSU9OX0RFQ0wgKElOU05fVkFSX0xPQ0FUSU9OIChJTlNOKSkKKyNkZWZpbmUgSU5TTl9WQVJfTE9DQVRJT05fTE9DKElOU04pIFwKKyAgUEFUX1ZBUl9MT0NBVElPTl9MT0MgKElOU05fVkFSX0xPQ0FUSU9OIChJTlNOKSkKKyNkZWZpbmUgSU5TTl9WQVJfTE9DQVRJT05fU1RBVFVTKElOU04pIFwKKyAgUEFUX1ZBUl9MT0NBVElPTl9TVEFUVVMgKElOU05fVkFSX0xPQ0FUSU9OIChJTlNOKSkKKworLyogRXhwYW5kIHRvIHRoZSBSVEwgdGhhdCBkZW5vdGVzIGFuIHVua25vd24gdmFyaWFibGUgbG9jYXRpb24gaW4gYQorICAgREVCVUdfSU5TTi4gICovCisjZGVmaW5lIGdlbl9ydHhfVU5LTk9XTl9WQVJfTE9DKCkgKGdlbl9ydHhfQ0xPQkJFUiAoVk9JRG1vZGUsIGNvbnN0MF9ydHgpKQorCisvKiBEZXRlcm1pbmUgd2hldGhlciBYIGlzIHN1Y2ggYW4gdW5rbm93biBsb2NhdGlvbi4gICovCisjZGVmaW5lIFZBUl9MT0NfVU5LTk9XTl9QKFgpIFwKKyAgKEdFVF9DT0RFIChYKSA9PSBDTE9CQkVSICYmIFhFWFAgKChYKSwgMCkgPT0gY29uc3QwX3J0eCkKKworLyogMSBpZiBSVFggaXMgZW1pdHRlZCBhZnRlciBhIGNhbGwsIGJ1dCBpdCBzaG91bGQgdGFrZSBlZmZlY3QgYmVmb3JlCisgICB0aGUgY2FsbCByZXR1cm5zLiAgKi8KKyNkZWZpbmUgTk9URV9EVVJJTkdfQ0FMTF9QKFJUWCkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJOT1RFX1ZBUl9MT0NBVElPTl9EVVJJTkdfQ0FMTF9QIiwgKFJUWCksIE5PVEUpLT5jYWxsKQorCisvKiBERUJVR19FWFBSX0RFQ0wgY29ycmVzcG9uZGluZyB0byBhIERFQlVHX0VYUFIgUlRYLiAgKi8KKyNkZWZpbmUgREVCVUdfRVhQUl9UUkVFX0RFQ0woUlRYKSBYQ1RSRUUgKFJUWCwgMCwgREVCVUdfRVhQUikKKworLyogVkFSX0RFQ0wvUEFSTV9ERUNMIERFQlVHX0lNUExJQ0lUX1BUUiB0YWtlcyBhZGRyZXNzIG9mLiAgKi8KKyNkZWZpbmUgREVCVUdfSU1QTElDSVRfUFRSX0RFQ0woUlRYKSBYQ1RSRUUgKFJUWCwgMCwgREVCVUdfSU1QTElDSVRfUFRSKQorCisvKiBQQVJNX0RFQ0wgREVCVUdfUEFSQU1FVEVSX1JFRiByZWZlcmVuY2VzLiAgKi8KKyNkZWZpbmUgREVCVUdfUEFSQU1FVEVSX1JFRl9ERUNMKFJUWCkgWENUUkVFIChSVFgsIDAsIERFQlVHX1BBUkFNRVRFUl9SRUYpCisKKy8qIENvZGVzIHRoYXQgYXBwZWFyIGluIHRoZSBOT1RFX0tJTkQgZmllbGQgZm9yIGtpbmRzIG9mIG5vdGVzCisgICB0aGF0IGFyZSBub3QgbGluZSBudW1iZXJzLiAgVGhlc2UgY29kZXMgYXJlIGFsbCBuZWdhdGl2ZS4KKworICAgTm90aWNlIHRoYXQgd2UgZG8gbm90IHRyeSB0byB1c2UgemVybyBoZXJlIGZvciBhbnkgb2YKKyAgIHRoZSBzcGVjaWFsIG5vdGUgY29kZXMgYmVjYXVzZSBzb21ldGltZXMgdGhlIHNvdXJjZSBsaW5lCisgICBhY3R1YWxseSBjYW4gYmUgemVybyEgIFRoaXMgaGFwcGVucyAoZm9yIGV4YW1wbGUpIHdoZW4gd2UKKyAgIGFyZSBnZW5lcmF0aW5nIGNvZGUgZm9yIHRoZSBwZXItdHJhbnNsYXRpb24tdW5pdCBjb25zdHJ1Y3RvcgorICAgYW5kIGRlc3RydWN0b3Igcm91dGluZXMgZm9yIHNvbWUgQysrIHRyYW5zbGF0aW9uIHVuaXQuICAqLworCitlbnVtIGluc25fbm90ZQoreworI2RlZmluZSBERUZfSU5TTl9OT1RFKE5BTUUpIE5BTUUsCisjaW5jbHVkZSAiaW5zbi1ub3Rlcy5kZWYiCisjdW5kZWYgREVGX0lOU05fTk9URQorCisgIE5PVEVfSU5TTl9NQVgKK307CisKKy8qIE5hbWVzIGZvciBOT1RFIGluc24ncyBvdGhlciB0aGFuIGxpbmUgbnVtYmVycy4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3Qgbm90ZV9pbnNuX25hbWVbTk9URV9JTlNOX01BWF07CisjZGVmaW5lIEdFVF9OT1RFX0lOU05fTkFNRShOT1RFX0NPREUpIFwKKyAgKG5vdGVfaW5zbl9uYW1lWyhOT1RFX0NPREUpXSkKKworLyogVGhlIG5hbWUgb2YgYSBsYWJlbCwgaW4gY2FzZSBpdCBjb3JyZXNwb25kcyB0byBhbiBleHBsaWNpdCBsYWJlbAorICAgaW4gdGhlIGlucHV0IHNvdXJjZSBjb2RlLiAgKi8KKyNkZWZpbmUgTEFCRUxfTkFNRShSVFgpIFhDU1RSIChSVFgsIDcsIENPREVfTEFCRUwpCisKKy8qIEluIGp1bXAuYywgZWFjaCBsYWJlbCBjb250YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIKKyAgIG9mIExBQkVMX1JFRnMgdGhhdCBwb2ludCBhdCBpdCwgc28gdW51c2VkIGxhYmVscyBjYW4gYmUgZGVsZXRlZC4gICovCisjZGVmaW5lIExBQkVMX05VU0VTKFJUWCkgWENJTlQgKFJUWCwgNSwgQ09ERV9MQUJFTCkKKworLyogTGFiZWxzIGNhcnJ5IGEgdHdvLWJpdCBmaWVsZCBjb21wb3NlZCBvZiB0aGUgLT5qdW1wIGFuZCAtPmNhbGwKKyAgIGJpdHMuICBUaGlzIGZpZWxkIGluZGljYXRlcyB3aGV0aGVyIHRoZSBsYWJlbCBpcyBhbiBhbHRlcm5hdGUKKyAgIGVudHJ5IHBvaW50LCBhbmQgaWYgc28sIHdoYXQga2luZC4gICovCitlbnVtIGxhYmVsX2tpbmQKK3sKKyAgTEFCRUxfTk9STUFMID0gMCwJLyogb3JkaW5hcnkgbGFiZWwgKi8KKyAgTEFCRUxfU1RBVElDX0VOVFJZLAkvKiBhbHRlcm5hdGUgZW50cnkgcG9pbnQsIG5vdCBleHBvcnRlZCAqLworICBMQUJFTF9HTE9CQUxfRU5UUlksCS8qIGFsdGVybmF0ZSBlbnRyeSBwb2ludCwgZXhwb3J0ZWQgKi8KKyAgTEFCRUxfV0VBS19FTlRSWQkvKiBhbHRlcm5hdGUgZW50cnkgcG9pbnQsIGV4cG9ydGVkIGFzIHdlYWsgc3ltYm9sICovCit9OworCisjaWYgZGVmaW5lZCBFTkFCTEVfUlRMX0ZMQUdfQ0hFQ0tJTkcgJiYgKEdDQ19WRVJTSU9OID4gMjAwNykKKworLyogUmV0cmlldmUgdGhlIGtpbmQgb2YgTEFCRUwuICAqLworI2RlZmluZSBMQUJFTF9LSU5EKExBQkVMKSBfX2V4dGVuc2lvbl9fCQkJCQlcCisoeyBfX3R5cGVvZiAoTEFCRUwpIGNvbnN0IF9sYWJlbCA9IChMQUJFTCk7CQkJCVwKKyAgIGlmIChHRVRfQ09ERSAoX2xhYmVsKSAhPSBDT0RFX0xBQkVMKQkJCQkJXAorICAgICBydGxfY2hlY2tfZmFpbGVkX2ZsYWcgKCJMQUJFTF9LSU5EIiwgX2xhYmVsLCBfX0ZJTEVfXywgX19MSU5FX18sCVwKKwkJCSAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICAoZW51bSBsYWJlbF9raW5kKSAoKF9sYWJlbC0+anVtcCA8PCAxKSB8IF9sYWJlbC0+Y2FsbCk7IH0pCisKKy8qIFNldCB0aGUga2luZCBvZiBMQUJFTC4gICovCisjZGVmaW5lIFNFVF9MQUJFTF9LSU5EKExBQkVMLCBLSU5EKSBkbyB7CQkJCVwKKyAgIF9fdHlwZW9mIChMQUJFTCkgY29uc3QgX2xhYmVsID0gKExBQkVMKTsJCQkJXAorICAgY29uc3QgdW5zaWduZWQgaW50IF9raW5kID0gKEtJTkQpOwkJCQkJXAorICAgaWYgKEdFVF9DT0RFIChfbGFiZWwpICE9IENPREVfTEFCRUwpCQkJCQlcCisgICAgIHJ0bF9jaGVja19mYWlsZWRfZmxhZyAoIlNFVF9MQUJFTF9LSU5EIiwgX2xhYmVsLCBfX0ZJTEVfXywgX19MSU5FX18sIFwKKwkJCSAgICBfX0ZVTkNUSU9OX18pOwkJCQlcCisgICBfbGFiZWwtPmp1bXAgPSAoKF9raW5kID4+IDEpICYgMSk7CQkJCQlcCisgICBfbGFiZWwtPmNhbGwgPSAoX2tpbmQgJiAxKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisvKiBSZXRyaWV2ZSB0aGUga2luZCBvZiBMQUJFTC4gICovCisjZGVmaW5lIExBQkVMX0tJTkQoTEFCRUwpIFwKKyAgICgoZW51bSBsYWJlbF9raW5kKSAoKChMQUJFTCktPmp1bXAgPDwgMSkgfCAoTEFCRUwpLT5jYWxsKSkKKworLyogU2V0IHRoZSBraW5kIG9mIExBQkVMLiAgKi8KKyNkZWZpbmUgU0VUX0xBQkVMX0tJTkQoTEFCRUwsIEtJTkQpIGRvIHsJCQkJXAorICAgcnR4IGNvbnN0IF9sYWJlbCA9IChMQUJFTCk7CQkJCQkJXAorICAgY29uc3QgdW5zaWduZWQgaW50IF9raW5kID0gKEtJTkQpOwkJCQkJXAorICAgX2xhYmVsLT5qdW1wID0gKChfa2luZCA+PiAxKSAmIDEpOwkJCQkJXAorICAgX2xhYmVsLT5jYWxsID0gKF9raW5kICYgMSk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIHJ0bCBmbGFnIGNoZWNraW5nICovCisKKyNkZWZpbmUgTEFCRUxfQUxUX0VOVFJZX1AoTEFCRUwpIChMQUJFTF9LSU5EIChMQUJFTCkgIT0gTEFCRUxfTk9STUFMKQorCisvKiBJbiBqdW1wLmMsIGVhY2ggSlVNUF9JTlNOIGNhbiBwb2ludCB0byBhIGxhYmVsIHRoYXQgaXQgY2FuIGp1bXAgdG8sCisgICBzbyB0aGF0IGlmIHRoZSBKVU1QX0lOU04gaXMgZGVsZXRlZCwgdGhlIGxhYmVsJ3MgTEFCRUxfTlVTRVMgY2FuCisgICBiZSBkZWNyZW1lbnRlZCBhbmQgcG9zc2libHkgdGhlIGxhYmVsIGNhbiBiZSBkZWxldGVkLiAgKi8KKyNkZWZpbmUgSlVNUF9MQUJFTChJTlNOKSAgIFhDRVhQIChJTlNOLCA4LCBKVU1QX0lOU04pCisKKy8qIE9uY2UgYmFzaWMgYmxvY2tzIGFyZSBmb3VuZCwgZWFjaCBDT0RFX0xBQkVMIHN0YXJ0cyBhIGNoYWluIHRoYXQKKyAgIGdvZXMgdGhyb3VnaCBhbGwgdGhlIExBQkVMX1JFRnMgdGhhdCBqdW1wIHRvIHRoYXQgbGFiZWwuICBUaGUgY2hhaW4KKyAgIGV2ZW50dWFsbHkgd2luZHMgdXAgYXQgdGhlIENPREVfTEFCRUw6IGl0IGlzIGNpcmN1bGFyLiAgKi8KKyNkZWZpbmUgTEFCRUxfUkVGUyhMQUJFTCkgWENFWFAgKExBQkVMLCA0LCBDT0RFX0xBQkVMKQorDAorLyogRm9yIGEgUkVHIHJ0eCwgUkVHTk8gZXh0cmFjdHMgdGhlIHJlZ2lzdGVyIG51bWJlci4gIFJFR05PIGNhbiBvbmx5CisgICBiZSB1c2VkIG9uIFJIUy4gIFVzZSBTRVRfUkVHTk8gdG8gY2hhbmdlIHRoZSB2YWx1ZS4gICovCisjZGVmaW5lIFJFR05PKFJUWCkgKHJoc19yZWdubyhSVFgpKQorI2RlZmluZSBTRVRfUkVHTk8oUlRYLE4pIChkZl9yZWZfY2hhbmdlX3JlZ193aXRoX2xvYyAoUkVHTk8oUlRYKSwgTiwgUlRYKSwgWENVSU5UIChSVFgsIDAsIFJFRykgPSBOKQorI2RlZmluZSBTRVRfUkVHTk9fUkFXKFJUWCxOKSAoWENVSU5UIChSVFgsIDAsIFJFRykgPSBOKQorCisvKiBPUklHSU5BTF9SRUdOTyBob2xkcyB0aGUgbnVtYmVyIHRoZSByZWdpc3RlciBvcmlnaW5hbGx5IGhhZDsgZm9yIGEKKyAgIHBzZXVkbyByZWdpc3RlciB0dXJuZWQgaW50byBhIGhhcmQgcmVnIHRoaXMgd2lsbCBob2xkIHRoZSBvbGQgcHNldWRvCisgICByZWdpc3RlciBudW1iZXIuICAqLworI2RlZmluZSBPUklHSU5BTF9SRUdOTyhSVFgpIFgwVUlOVCAoUlRYLCAxKQorCisvKiBGb3JjZSB0aGUgUkVHTk8gbWFjcm8gdG8gb25seSBiZSB1c2VkIG9uIHRoZSBsaHMuICAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3Joc19yZWdubyAoY29uc3RfcnR4IHgpCit7CisgIHJldHVybiBYQ1VJTlQgKHgsIDAsIFJFRyk7Cit9CisKKworLyogMSBpZiBSVFggaXMgYSByZWcgb3IgcGFyYWxsZWwgdGhhdCBpcyB0aGUgY3VycmVudCBmdW5jdGlvbidzIHJldHVybgorICAgdmFsdWUuICAqLworI2RlZmluZSBSRUdfRlVOQ1RJT05fVkFMVUVfUChSVFgpCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzIoIlJFR19GVU5DVElPTl9WQUxVRV9QIiwgKFJUWCksIFJFRywgUEFSQUxMRUwpLT5yZXR1cm5fdmFsKQorCisvKiAxIGlmIFJUWCBpcyBhIHJlZyB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgdmFyaWFibGUgZGVjbGFyZWQgYnkgdGhlIHVzZXIuICAqLworI2RlZmluZSBSRUdfVVNFUlZBUl9QKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlJFR19VU0VSVkFSX1AiLCAoUlRYKSwgUkVHKS0+dm9sYXRpbCkKKworLyogMSBpZiBSVFggaXMgYSByZWcgdGhhdCBob2xkcyBhIHBvaW50ZXIgdmFsdWUuICAqLworI2RlZmluZSBSRUdfUE9JTlRFUihSVFgpCQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJSRUdfUE9JTlRFUiIsIChSVFgpLCBSRUcpLT5mcmFtZV9yZWxhdGVkKQorCisvKiAxIGlmIFJUWCBpcyBhIG1lbSB0aGF0IGhvbGRzIGEgcG9pbnRlciB2YWx1ZS4gICovCisjZGVmaW5lIE1FTV9QT0lOVEVSKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIk1FTV9QT0lOVEVSIiwgKFJUWCksIE1FTSktPmZyYW1lX3JlbGF0ZWQpCisKKy8qIDEgaWYgdGhlIGdpdmVuIHJlZ2lzdGVyIFJFRyBjb3JyZXNwb25kcyB0byBhIGhhcmQgcmVnaXN0ZXIuICAqLworI2RlZmluZSBIQVJEX1JFR0lTVEVSX1AoUkVHKSAoSEFSRF9SRUdJU1RFUl9OVU1fUCAoUkVHTk8gKFJFRykpKQorCisvKiAxIGlmIHRoZSBnaXZlbiByZWdpc3RlciBudW1iZXIgUkVHX05PIGNvcnJlc3BvbmRzIHRvIGEgaGFyZCByZWdpc3Rlci4gICovCisjZGVmaW5lIEhBUkRfUkVHSVNURVJfTlVNX1AoUkVHX05PKSAoKFJFR19OTykgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVIpCisKKy8qIEZvciBhIENPTlNUX0lOVCBydHgsIElOVFZBTCBleHRyYWN0cyB0aGUgaW50ZWdlci4gICovCisjZGVmaW5lIElOVFZBTChSVFgpIFhDV0lOVChSVFgsIDAsIENPTlNUX0lOVCkKKyNkZWZpbmUgVUlOVFZBTChSVFgpICgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgSU5UVkFMIChSVFgpKQorCisvKiBGb3IgYSBDT05TVF9ET1VCTEU6CisgICBGb3IgYSBWT0lEbW9kZSwgdGhlcmUgYXJlIHR3byBpbnRlZ2VycyBDT05TVF9ET1VCTEVfTE9XIGlzIHRoZQorICAgICBsb3ctb3JkZXIgd29yZCBhbmQgLi4uX0hJR0ggdGhlIGhpZ2gtb3JkZXIuCisgICBGb3IgYSBmbG9hdCwgdGhlcmUgaXMgYSBSRUFMX1ZBTFVFX1RZUEUgc3RydWN0dXJlLCBhbmQKKyAgICAgQ09OU1RfRE9VQkxFX1JFQUxfVkFMVUUocikgaXMgYSBwb2ludGVyIHRvIGl0LiAgKi8KKyNkZWZpbmUgQ09OU1RfRE9VQkxFX0xPVyhyKSBYQ01XSU5UIChyLCAwLCBDT05TVF9ET1VCTEUsIFZPSURtb2RlKQorI2RlZmluZSBDT05TVF9ET1VCTEVfSElHSChyKSBYQ01XSU5UIChyLCAxLCBDT05TVF9ET1VCTEUsIFZPSURtb2RlKQorI2RlZmluZSBDT05TVF9ET1VCTEVfUkVBTF9WQUxVRShyKSBcCisgICgoY29uc3Qgc3RydWN0IHJlYWxfdmFsdWUgKikgWENOTVBSViAociwgQ09OU1RfRE9VQkxFLCBWT0lEbW9kZSkpCisKKyNkZWZpbmUgQ09OU1RfRklYRURfVkFMVUUocikgXAorICAoKGNvbnN0IHN0cnVjdCBmaXhlZF92YWx1ZSAqKSBYQ05NUEZWIChyLCBDT05TVF9GSVhFRCwgVk9JRG1vZGUpKQorI2RlZmluZSBDT05TVF9GSVhFRF9WQUxVRV9ISUdIKHIpIFwKKyAgKChIT1NUX1dJREVfSU5UKSAoQ09OU1RfRklYRURfVkFMVUUociktPmRhdGEuaGlnaCkpCisjZGVmaW5lIENPTlNUX0ZJWEVEX1ZBTFVFX0xPVyhyKSBcCisgICgoSE9TVF9XSURFX0lOVCkgKENPTlNUX0ZJWEVEX1ZBTFVFKHIpLT5kYXRhLmxvdykpCisKKy8qIEZvciBhIENPTlNUX1ZFQ1RPUiwgcmV0dXJuIGVsZW1lbnQgI24uICAqLworI2RlZmluZSBDT05TVF9WRUNUT1JfRUxUKFJUWCwgTikgWENWRUNFWFAgKFJUWCwgMCwgTiwgQ09OU1RfVkVDVE9SKQorCisvKiBGb3IgYSBDT05TVF9WRUNUT1IsIHJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgdmVjdG9yLiAgKi8KKyNkZWZpbmUgQ09OU1RfVkVDVE9SX05VTklUUyhSVFgpIFhDVkVDTEVOIChSVFgsIDAsIENPTlNUX1ZFQ1RPUikKKworLyogRm9yIGEgU1VCUkVHIHJ0eCwgU1VCUkVHX1JFRyBleHRyYWN0cyB0aGUgdmFsdWUgd2Ugd2FudCBhIHN1YnJlZyBvZi4KKyAgIFNVQlJFR19CWVRFIGV4dHJhY3RzIHRoZSBieXRlLW51bWJlci4gICovCisKKyNkZWZpbmUgU1VCUkVHX1JFRyhSVFgpIFhDRVhQIChSVFgsIDAsIFNVQlJFRykKKyNkZWZpbmUgU1VCUkVHX0JZVEUoUlRYKSBYQ1VJTlQgKFJUWCwgMSwgU1VCUkVHKQorCisvKiBpbiBydGxhbmFsLmMgKi8KKy8qIFJldHVybiB0aGUgcmlnaHQgY29zdCB0byBnaXZlIHRvIGFuIG9wZXJhdGlvbgorICAgdG8gbWFrZSB0aGUgY29zdCBvZiB0aGUgY29ycmVzcG9uZGluZyByZWdpc3Rlci10by1yZWdpc3RlciBpbnN0cnVjdGlvbgorICAgTiB0aW1lcyB0aGF0IG9mIGEgZmFzdCByZWdpc3Rlci10by1yZWdpc3RlciBpbnN0cnVjdGlvbi4gICovCisjZGVmaW5lIENPU1RTX05fSU5TTlMoTikgKChOKSAqIDQpCisKKy8qIE1heGltdW0gY29zdCBvZiBhbiBydGwgZXhwcmVzc2lvbi4gIFRoaXMgdmFsdWUgaGFzIHRoZSBzcGVjaWFsIG1lYW5pbmcKKyAgIG5vdCB0byB1c2UgYW4gcnR4IHdpdGggdGhpcyBjb3N0IHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLiAgKi8KKyNkZWZpbmUgTUFYX0NPU1QgSU5UX01BWAorCisvKiBBIHN0cnVjdHVyZSB0byBob2xkIGFsbCBhdmFpbGFibGUgY29zdCBpbmZvcm1hdGlvbiBhYm91dCBhbiBydGwKKyAgIGV4cHJlc3Npb24uICAqLworc3RydWN0IGZ1bGxfcnR4X2Nvc3RzCit7CisgIGludCBzcGVlZDsKKyAgaW50IHNpemU7Cit9OworCisvKiBJbml0aWFsaXplIGEgZnVsbF9ydHhfY29zdHMgc3RydWN0dXJlIEMgdG8gdGhlIG1heGltdW0gY29zdC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luaXRfY29zdHNfdG9fbWF4IChzdHJ1Y3QgZnVsbF9ydHhfY29zdHMgKmMpCit7CisgIGMtPnNwZWVkID0gTUFYX0NPU1Q7CisgIGMtPnNpemUgPSBNQVhfQ09TVDsKK30KKworLyogSW5pdGlhbGl6ZSBhIGZ1bGxfcnR4X2Nvc3RzIHN0cnVjdHVyZSBDIHRvIHplcm8gY29zdC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luaXRfY29zdHNfdG9femVybyAoc3RydWN0IGZ1bGxfcnR4X2Nvc3RzICpjKQoreworICBjLT5zcGVlZCA9IDA7CisgIGMtPnNpemUgPSAwOworfQorCisvKiBDb21wYXJlIHR3byBmdWxsX3J0eF9jb3N0cyBzdHJ1Y3R1cmVzIEEgYW5kIEIsIHJldHVybmluZyB0cnVlCisgICBpZiBBIDwgQiB3aGVuIG9wdGltaXppbmcgZm9yIHNwZWVkLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorY29zdHNfbHRfcCAoc3RydWN0IGZ1bGxfcnR4X2Nvc3RzICphLCBzdHJ1Y3QgZnVsbF9ydHhfY29zdHMgKmIsCisJICAgIGJvb2wgc3BlZWQpCit7CisgIGlmIChzcGVlZCkKKyAgICByZXR1cm4gKGEtPnNwZWVkIDwgYi0+c3BlZWQKKwkgICAgfHwgKGEtPnNwZWVkID09IGItPnNwZWVkICYmIGEtPnNpemUgPCBiLT5zaXplKSk7CisgIGVsc2UKKyAgICByZXR1cm4gKGEtPnNpemUgPCBiLT5zaXplCisJICAgIHx8IChhLT5zaXplID09IGItPnNpemUgJiYgYS0+c3BlZWQgPCBiLT5zcGVlZCkpOworfQorCisvKiBJbmNyZWFzZSBib3RoIG1lbWJlcnMgb2YgdGhlIGZ1bGxfcnR4X2Nvc3RzIHN0cnVjdHVyZSBDIGJ5IHRoZQorICAgY29zdCBvZiBOIGluc25zLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorY29zdHNfYWRkX25faW5zbnMgKHN0cnVjdCBmdWxsX3J0eF9jb3N0cyAqYywgaW50IG4pCit7CisgIGMtPnNwZWVkICs9IENPU1RTX05fSU5TTlMgKG4pOworICBjLT5zaXplICs9IENPU1RTX05fSU5TTlMgKG4pOworfQorCisvKiBJbmZvcm1hdGlvbiBhYm91dCBhbiBhZGRyZXNzLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgc3VwcG9zZWQgdG8gYmUgYWJsZQorICAgdG8gcmVwcmVzZW50IGFsbCBzdXBwb3J0ZWQgdGFyZ2V0IGFkZHJlc3Nlcy4gIFBsZWFzZSBleHRlbmQgaXQgaWYgaXQKKyAgIGlzIG5vdCB5ZXQgZ2VuZXJhbCBlbm91Z2guICAqLworc3RydWN0IGFkZHJlc3NfaW5mbyB7CisgIC8qIFRoZSBtb2RlIG9mIHRoZSB2YWx1ZSBiZWluZyBhZGRyZXNzZWQsIG9yIFZPSURtb2RlIGlmIHRoaXMgaXMKKyAgICAgYSBsb2FkLWFkZHJlc3Mgb3BlcmF0aW9uIHdpdGggbm8ga25vd24gYWRkcmVzcyBtb2RlLiAgKi8KKyAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKKworICAvKiBUaGUgYWRkcmVzcyBzcGFjZS4gICovCisgIGFkZHJfc3BhY2VfdCBhczsKKworICAvKiBBIHBvaW50ZXIgdG8gdGhlIHRvcC1sZXZlbCBhZGRyZXNzLiAgKi8KKyAgcnR4ICpvdXRlcjsKKworICAvKiBBIHBvaW50ZXIgdG8gdGhlIGlubmVyIGFkZHJlc3MsIGFmdGVyIGFsbCBhZGRyZXNzIG11dGF0aW9ucworICAgICBoYXZlIGJlZW4gc3RyaXBwZWQgZnJvbSB0aGUgdG9wLWxldmVsIGFkZHJlc3MuICBJdCBjYW4gYmUgb25lCisgICAgIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgLSBBIHtQUkUsUE9TVH1fe0lOQyxERUN9IG9mICpCQVNFLiAgU0VHTUVOVCwgSU5ERVggYW5kIERJU1AgYXJlIG51bGwuCisKKyAgICAgLSBBIHtQUkUsUE9TVH1fTU9ESUZZIG9mICpCQVNFLiAgSW4gdGhpcyBjYXNlIGVpdGhlciBJTkRFWCBvciBESVNQCisgICAgICAgcG9pbnRzIHRvIHRoZSBzdGVwIHZhbHVlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc3RlcCBpcyB2YXJpYWJsZQorICAgICAgIG9yIGNvbnN0YW50IHJlc3BlY3RpdmVseS4gIFNFR01FTlQgaXMgbnVsbC4KKworICAgICAtIEEgcGxhaW4gc3VtIG9mIHRoZSBmb3JtIFNFR01FTlQgKyBCQVNFICsgSU5ERVggKyBESVNQLAorICAgICAgIHdpdGggbnVsbCBmaWVsZHMgZXZhbHVhdGluZyB0byAwLiAgKi8KKyAgcnR4ICppbm5lcjsKKworICAvKiBDb21wb25lbnRzIHRoYXQgbWFrZSB1cCAqSU5ORVIuICBFYWNoIG9uZSBtYXkgYmUgbnVsbCBvciBub25udWxsLgorICAgICBXaGVuIG5vbm51bGwsIHRoZWlyIG1lYW5pbmdzIGFyZSBhcyBmb2xsb3dzOgorCisgICAgIC0gKlNFR01FTlQgaXMgdGhlICJzZWdtZW50IiBvZiBtZW1vcnkgdG8gd2hpY2ggdGhlIGFkZHJlc3MgcmVmZXJzLgorICAgICAgIFRoaXMgdmFsdWUgaXMgZW50aXJlbHkgdGFyZ2V0LXNwZWNpZmljIGFuZCBpcyBvbmx5IGNhbGxlZCBhICJzZWdtZW50IgorICAgICAgIGJlY2F1c2UgdGhhdCdzIGl0cyBtb3N0IHR5cGljYWwgdXNlLiAgSXQgY29udGFpbnMgZXhhY3RseSBvbmUgVU5TUEVDLAorICAgICAgIHBvaW50ZWQgdG8gYnkgU0VHTUVOVF9URVJNLiAgVGhlIGNvbnRlbnRzIG9mICpTRUdNRU5UIGRvIG5vdCBuZWVkCisgICAgICAgcmVsb2FkaW5nLgorCisgICAgIC0gKkJBU0UgaXMgYSB2YXJpYWJsZSBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhIGJhc2UgYWRkcmVzcy4KKyAgICAgICBJdCBjb250YWlucyBleGFjdGx5IG9uZSBSRUcsIFNVQlJFRyBvciBNRU0sIHBvaW50ZWQgdG8gYnkgQkFTRV9URVJNLgorCisgICAgIC0gKklOREVYIGlzIGEgdmFyaWFibGUgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgYW4gaW5kZXggdmFsdWUuCisgICAgICAgSXQgbWF5IGJlIGEgc2NhbGVkIGV4cHJlc3Npb24sIHN1Y2ggYXMgYSBNVUxULiAgSXQgaGFzIGV4YWN0bHkKKyAgICAgICBvbmUgUkVHLCBTVUJSRUcgb3IgTUVNLCBwb2ludGVkIHRvIGJ5IElOREVYX1RFUk0uCisKKyAgICAgLSAqRElTUCBpcyBhIGNvbnN0YW50LCBwb3NzaWJseSBtdXRhdGVkLiAgRElTUF9URVJNIHBvaW50cyB0byB0aGUKKyAgICAgICB1bm11dGF0ZWQgUlRYX0NPTlNUX09CSi4gICovCisgIHJ0eCAqc2VnbWVudDsKKyAgcnR4ICpiYXNlOworICBydHggKmluZGV4OworICBydHggKmRpc3A7CisKKyAgcnR4ICpzZWdtZW50X3Rlcm07CisgIHJ0eCAqYmFzZV90ZXJtOworICBydHggKmluZGV4X3Rlcm07CisgIHJ0eCAqZGlzcF90ZXJtOworCisgIC8qIEluIGEge1BSRSxQT1NUfV9NT0RJRlkgYWRkcmVzcywgdGhpcyBwb2ludHMgdG8gYSBzZWNvbmQgY29weQorICAgICBvZiBCQVNFX1RFUk0sIG90aGVyd2lzZSBpdCBpcyBudWxsLiAgKi8KKyAgcnR4ICpiYXNlX3Rlcm0yOworCisgIC8qIEFERFJFU1MgaWYgdGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGFuIGFkZHJlc3Mgb3BlcmFuZCwgTUVNIGlmCisgICAgIGl0IGRlc2NyaWJlcyBhIE1FTSBhZGRyZXNzLiAgKi8KKyAgZW51bSBydHhfY29kZSBhZGRyX291dGVyX2NvZGU7CisKKyAgLyogSWYgQkFTRSBpcyBub25udWxsLCB0aGlzIGlzIHRoZSBjb2RlIG9mIHRoZSBydHggdGhhdCBjb250YWlucyBpdC4gICovCisgIGVudW0gcnR4X2NvZGUgYmFzZV9vdXRlcl9jb2RlOworCisgIC8qIFRydWUgaWYgdGhpcyBpcyBhbiBSVFhfQVVUT0lOQyBhZGRyZXNzLiAgKi8KKyAgYm9vbCBhdXRvaW5jX3A7Cit9OworCitleHRlcm4gdm9pZCBpbml0X3J0bGFuYWwgKHZvaWQpOworZXh0ZXJuIGludCBydHhfY29zdCAocnR4LCBlbnVtIHJ0eF9jb2RlLCBpbnQsIGJvb2wpOworZXh0ZXJuIGludCBhZGRyZXNzX2Nvc3QgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGFkZHJfc3BhY2VfdCwgYm9vbCk7CitleHRlcm4gdm9pZCBnZXRfZnVsbF9ydHhfY29zdCAocnR4LCBlbnVtIHJ0eF9jb2RlLCBpbnQsCisJCQkgICAgICAgc3RydWN0IGZ1bGxfcnR4X2Nvc3RzICopOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfbHNiIChjb25zdF9ydHgpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfbHNiXzEgKGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgIHVuc2lnbmVkIGludCk7CitleHRlcm4gdW5zaWduZWQgaW50IHN1YnJlZ19yZWdub19vZmZzZXQJKHVuc2lnbmVkIGludCwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBib29sIHN1YnJlZ19vZmZzZXRfcmVwcmVzZW50YWJsZV9wICh1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX3JlZ25vIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBzaW1wbGlmeV9zdWJyZWdfcmVnbm8gKHVuc2lnbmVkIGludCwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX25yZWdzIChjb25zdF9ydHgpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfbnJlZ3Nfd2l0aF9yZWdubyAodW5zaWduZWQgaW50LCBjb25zdF9ydHgpOworZXh0ZXJuIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbm9uemVyb19iaXRzIChjb25zdF9ydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbnVtX3NpZ25fYml0X2NvcGllcyAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gYm9vbCBjb25zdGFudF9wb29sX2NvbnN0YW50X3AgKHJ0eCk7CitleHRlcm4gYm9vbCB0cnVuY2F0ZWRfdG9fbW9kZSAoZW51bSBtYWNoaW5lX21vZGUsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IGxvd19iaXRtYXNrX2xlbiAoZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHZvaWQgc3BsaXRfZG91YmxlIChydHgsIHJ0eCAqLCBydHggKik7CitleHRlcm4gcnR4ICpzdHJpcF9hZGRyZXNzX211dGF0aW9ucyAocnR4ICosIGVudW0gcnR4X2NvZGUgKiA9IDApOworZXh0ZXJuIHZvaWQgZGVjb21wb3NlX2FkZHJlc3MgKHN0cnVjdCBhZGRyZXNzX2luZm8gKiwgcnR4ICosCisJCQkgICAgICAgZW51bSBtYWNoaW5lX21vZGUsIGFkZHJfc3BhY2VfdCwgZW51bSBydHhfY29kZSk7CitleHRlcm4gdm9pZCBkZWNvbXBvc2VfbGVhX2FkZHJlc3MgKHN0cnVjdCBhZGRyZXNzX2luZm8gKiwgcnR4ICopOworZXh0ZXJuIHZvaWQgZGVjb21wb3NlX21lbV9hZGRyZXNzIChzdHJ1Y3QgYWRkcmVzc19pbmZvICosIHJ0eCk7CitleHRlcm4gdm9pZCB1cGRhdGVfYWRkcmVzcyAoc3RydWN0IGFkZHJlc3NfaW5mbyAqKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGdldF9pbmRleF9zY2FsZSAoY29uc3Qgc3RydWN0IGFkZHJlc3NfaW5mbyAqKTsKK2V4dGVybiBlbnVtIHJ0eF9jb2RlIGdldF9pbmRleF9jb2RlIChjb25zdCBzdHJ1Y3QgYWRkcmVzc19pbmZvICopOworCisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisvKiBSZXR1cm4gdGhlIGNvc3Qgb2YgU0VUIFguICBTUEVFRF9QIGlzIHRydWUgaWYgb3B0aW1pemluZyBmb3Igc3BlZWQKKyAgIHJhdGhlciB0aGFuIHNpemUuICAqLworCitzdGF0aWMgaW5saW5lIGludAorc2V0X3J0eF9jb3N0IChydHggeCwgYm9vbCBzcGVlZF9wKQoreworICByZXR1cm4gcnR4X2Nvc3QgKHgsIElOU04sIDQsIHNwZWVkX3ApOworfQorCisvKiBMaWtlIHNldF9ydHhfY29zdCwgYnV0IHJldHVybiBib3RoIHRoZSBzcGVlZCBhbmQgc2l6ZSBjb3N0cyBpbiBDLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnZXRfZnVsbF9zZXRfcnR4X2Nvc3QgKHJ0eCB4LCBzdHJ1Y3QgZnVsbF9ydHhfY29zdHMgKmMpCit7CisgIGdldF9mdWxsX3J0eF9jb3N0ICh4LCBJTlNOLCA0LCBjKTsKK30KKworLyogUmV0dXJuIHRoZSBjb3N0IG9mIG1vdmluZyBYIGludG8gYSByZWdpc3RlciwgcmVsYXRpdmUgdG8gdGhlIGNvc3QKKyAgIG9mIGEgcmVnaXN0ZXIgbW92ZS4gIFNQRUVEX1AgaXMgdHJ1ZSBpZiBvcHRpbWl6aW5nIGZvciBzcGVlZCByYXRoZXIKKyAgIHRoYW4gc2l6ZS4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitzZXRfc3JjX2Nvc3QgKHJ0eCB4LCBib29sIHNwZWVkX3ApCit7CisgIHJldHVybiBydHhfY29zdCAoeCwgU0VULCAxLCBzcGVlZF9wKTsKK30KKworLyogTGlrZSBzZXRfc3JjX2Nvc3QsIGJ1dCByZXR1cm4gYm90aCB0aGUgc3BlZWQgYW5kIHNpemUgY29zdHMgaW4gQy4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZ2V0X2Z1bGxfc2V0X3NyY19jb3N0IChydHggeCwgc3RydWN0IGZ1bGxfcnR4X2Nvc3RzICpjKQoreworICBnZXRfZnVsbF9ydHhfY29zdCAoeCwgU0VULCAxLCBjKTsKK30KKyNlbmRpZgorCisvKiAxIGlmIFJUWCBpcyBhIHN1YnJlZyBjb250YWluaW5nIGEgcmVnIHRoYXQgaXMgYWxyZWFkeSBrbm93biB0byBiZQorICAgc2lnbi0gb3IgemVyby1leHRlbmRlZCBmcm9tIHRoZSBtb2RlIG9mIHRoZSBzdWJyZWcgdG8gdGhlIG1vZGUgb2YKKyAgIHRoZSByZWcuICBTVUJSRUdfUFJPTU9URURfVU5TSUdORURfUCBnaXZlcyB0aGUgc2lnbmVkbmVzcyBvZiB0aGUKKyAgIGV4dGVuc2lvbi4KKworICAgV2hlbiB1c2VkIGFzIGEgTEhTLCBpcyBtZWFucyB0aGF0IHRoaXMgZXh0ZW5zaW9uIG11c3QgYmUgZG9uZQorICAgd2hlbiBhc3NpZ25pbmcgdG8gU1VCUkVHX1JFRy4gICovCisKKyNkZWZpbmUgU1VCUkVHX1BST01PVEVEX1ZBUl9QKFJUWCkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiU1VCUkVHX1BST01PVEVEIiwgKFJUWCksIFNVQlJFRyktPmluX3N0cnVjdCkKKworI2RlZmluZSBTVUJSRUdfUFJPTU9URURfVU5TSUdORURfU0VUKFJUWCwgVkFMKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorICBydHggY29uc3QgX3J0eCA9IFJUTF9GTEFHX0NIRUNLMSgiU1VCUkVHX1BST01PVEVEX1VOU0lHTkVEX1NFVCIsIChSVFgpLCBTVUJSRUcpOyBcCisgIGlmICgoVkFMKSA8IDApCQkJCQkJCVwKKyAgICBfcnR4LT52b2xhdGlsID0gMTsJCQkJCQkJXAorICBlbHNlIHsJCQkJCQkJCVwKKyAgICBfcnR4LT52b2xhdGlsID0gMDsJCQkJCQkJXAorICAgIF9ydHgtPnVuY2hhbmdpbmcgPSAoVkFMKTsJCQkJCQlcCisgIH0JCQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBWYWxpZCBmb3Igc3VicmVncyB3aGljaCBhcmUgU1VCUkVHX1BST01PVEVEX1ZBUl9QKCkuICBJbiB0aGF0IGNhc2UKKyAgIHRoaXMgZ2l2ZXMgdGhlIG5lY2Vzc2FyeSBleHRlbnNpb25zOgorICAgMCAgLSBzaWduZWQKKyAgIDEgIC0gbm9ybWFsIHVuc2lnbmVkCisgICAtMSAtIHBvaW50ZXIgdW5zaWduZWQsIHdoaWNoIG1vc3Qgb2Z0ZW4gY2FuIGJlIGhhbmRsZWQgbGlrZSB1bnNpZ25lZAorICAgICAgICBleHRlbnNpb24sIGV4Y2VwdCBmb3IgZ2VuZXJhdGluZyBpbnN0cnVjdGlvbnMgd2hlcmUgd2UgbmVlZCB0bworCWVtaXQgc3BlY2lhbCBjb2RlIChwdHJfZXh0ZW5kIGluc25zKSBvbiBzb21lIGFyY2hpdGVjdHVyZXMuICAqLworCisjZGVmaW5lIFNVQlJFR19QUk9NT1RFRF9VTlNJR05FRF9QKFJUWCkJXAorICAoKFJUTF9GTEFHX0NIRUNLMSgiU1VCUkVHX1BST01PVEVEX1VOU0lHTkVEX1AiLCAoUlRYKSwgU1VCUkVHKS0+dm9sYXRpbCkgXAorICAgPyAtMSA6IChpbnQpIChSVFgpLT51bmNoYW5naW5nKQorCisvKiBBY2Nlc3MgdmFyaW91cyBjb21wb25lbnRzIG9mIGFuIEFTTV9PUEVSQU5EUyBydHguICAqLworCisjZGVmaW5lIEFTTV9PUEVSQU5EU19URU1QTEFURShSVFgpIFhDU1RSIChSVFgsIDAsIEFTTV9PUEVSQU5EUykKKyNkZWZpbmUgQVNNX09QRVJBTkRTX09VVFBVVF9DT05TVFJBSU5UKFJUWCkgWENTVFIgKFJUWCwgMSwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfT1VUUFVUX0lEWChSVFgpIFhDSU5UIChSVFgsIDIsIEFTTV9PUEVSQU5EUykKKyNkZWZpbmUgQVNNX09QRVJBTkRTX0lOUFVUX1ZFQyhSVFgpIFhDVkVDIChSVFgsIDMsIEFTTV9PUEVSQU5EUykKKyNkZWZpbmUgQVNNX09QRVJBTkRTX0lOUFVUX0NPTlNUUkFJTlRfVkVDKFJUWCkgWENWRUMgKFJUWCwgNCwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfSU5QVVQoUlRYLCBOKSBYQ1ZFQ0VYUCAoUlRYLCAzLCBOLCBBU01fT1BFUkFORFMpCisjZGVmaW5lIEFTTV9PUEVSQU5EU19JTlBVVF9MRU5HVEgoUlRYKSBYQ1ZFQ0xFTiAoUlRYLCAzLCBBU01fT1BFUkFORFMpCisjZGVmaW5lIEFTTV9PUEVSQU5EU19JTlBVVF9DT05TVFJBSU5UX0VYUChSVFgsIE4pIFwKKyAgWENWRUNFWFAgKFJUWCwgNCwgTiwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfSU5QVVRfQ09OU1RSQUlOVChSVFgsIE4pIFwKKyAgWFNUUiAoWENWRUNFWFAgKFJUWCwgNCwgTiwgQVNNX09QRVJBTkRTKSwgMCkKKyNkZWZpbmUgQVNNX09QRVJBTkRTX0lOUFVUX01PREUoUlRYLCBOKSAgXAorICBHRVRfTU9ERSAoWENWRUNFWFAgKFJUWCwgNCwgTiwgQVNNX09QRVJBTkRTKSkKKyNkZWZpbmUgQVNNX09QRVJBTkRTX0xBQkVMX1ZFQyhSVFgpIFhDVkVDIChSVFgsIDUsIEFTTV9PUEVSQU5EUykKKyNkZWZpbmUgQVNNX09QRVJBTkRTX0xBQkVMX0xFTkdUSChSVFgpIFhDVkVDTEVOIChSVFgsIDUsIEFTTV9PUEVSQU5EUykKKyNkZWZpbmUgQVNNX09QRVJBTkRTX0xBQkVMKFJUWCwgTikgWENWRUNFWFAgKFJUWCwgNSwgTiwgQVNNX09QRVJBTkRTKQorI2RlZmluZSBBU01fT1BFUkFORFNfU09VUkNFX0xPQ0FUSU9OKFJUWCkgWENVSU5UIChSVFgsIDYsIEFTTV9PUEVSQU5EUykKKyNkZWZpbmUgQVNNX0lOUFVUX1NPVVJDRV9MT0NBVElPTihSVFgpIFhDVUlOVCAoUlRYLCAxLCBBU01fSU5QVVQpCisKKy8qIDEgaWYgUlRYIGlzIGEgbWVtIHRoYXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgaW4gcmVhZC1vbmx5IG1lbW9yeS4gICovCisjZGVmaW5lIE1FTV9SRUFET05MWV9QKFJUWCkgXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJNRU1fUkVBRE9OTFlfUCIsIChSVFgpLCBNRU0pLT51bmNoYW5naW5nKQorCisvKiAxIGlmIFJUWCBpcyBhIG1lbSBhbmQgd2Ugc2hvdWxkIGtlZXAgdGhlIGFsaWFzIHNldCBmb3IgdGhpcyBtZW0KKyAgIHVuY2hhbmdlZCB3aGVuIHdlIGFjY2VzcyBhIGNvbXBvbmVudC4gIFNldCB0byAxLCBvciBleGFtcGxlLCB3aGVuIHdlCisgICBhcmUgYWxyZWFkeSBpbiBhIG5vbi1hZGRyZXNzYWJsZSBjb21wb25lbnQgb2YgYW4gYWdncmVnYXRlLiAgKi8KKyNkZWZpbmUgTUVNX0tFRVBfQUxJQVNfU0VUX1AoUlRYKQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0sxKCJNRU1fS0VFUF9BTElBU19TRVRfUCIsIChSVFgpLCBNRU0pLT5qdW1wKQorCisvKiAxIGlmIFJUWCBpcyBhIG1lbSBvciBhc21fb3BlcmFuZCBmb3IgYSB2b2xhdGlsZSByZWZlcmVuY2UuICAqLworI2RlZmluZSBNRU1fVk9MQVRJTEVfUChSVFgpCQkJCQkJXAorICAoUlRMX0ZMQUdfQ0hFQ0szKCJNRU1fVk9MQVRJTEVfUCIsIChSVFgpLCBNRU0sIEFTTV9PUEVSQU5EUywJCVwKKwkJICAgQVNNX0lOUFVUKS0+dm9sYXRpbCkKKworLyogMSBpZiBSVFggaXMgYSBtZW0gdGhhdCBjYW5ub3QgdHJhcC4gICovCisjZGVmaW5lIE1FTV9OT1RSQVBfUChSVFgpIFwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiTUVNX05PVFJBUF9QIiwgKFJUWCksIE1FTSktPmNhbGwpCisKKy8qIFRoZSBtZW1vcnkgYXR0cmlidXRlIGJsb2NrLiAgV2UgcHJvdmlkZSBhY2Nlc3MgbWFjcm9zIGZvciBlYWNoIHZhbHVlCisgICBpbiB0aGUgYmxvY2sgYW5kIHByb3ZpZGUgZGVmYXVsdHMgaWYgbm9uZSBzcGVjaWZpZWQuICAqLworI2RlZmluZSBNRU1fQVRUUlMoUlRYKSBYME1FTUFUVFIgKFJUWCwgMSkKKworLyogVGhlIHJlZ2lzdGVyIGF0dHJpYnV0ZSBibG9jay4gIFdlIHByb3ZpZGUgYWNjZXNzIG1hY3JvcyBmb3IgZWFjaCB2YWx1ZQorICAgaW4gdGhlIGJsb2NrIGFuZCBwcm92aWRlIGRlZmF1bHRzIGlmIG5vbmUgc3BlY2lmaWVkLiAgKi8KKyNkZWZpbmUgUkVHX0FUVFJTKFJUWCkgWDBSRUdBVFRSIChSVFgsIDIpCisKKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKy8qIEZvciBhIE1FTSBydHgsIHRoZSBhbGlhcyBzZXQuICBJZiAwLCB0aGlzIE1FTSBpcyBub3QgaW4gYW55IGFsaWFzCisgICBzZXQsIGFuZCBtYXkgYWxpYXMgYW55dGhpbmcuICBPdGhlcndpc2UsIHRoZSBNRU0gY2FuIG9ubHkgYWxpYXMKKyAgIE1FTXMgaW4gYSBjb25mbGljdGluZyBhbGlhcyBzZXQuICBUaGlzIHZhbHVlIGlzIHNldCBpbiBhCisgICBsYW5ndWFnZS1kZXBlbmRlbnQgbWFubmVyIGluIHRoZSBmcm9udC1lbmQsIGFuZCBzaG91bGQgbm90IGJlCisgICBhbHRlcmVkIGluIHRoZSBiYWNrLWVuZC4gIFRoZXNlIHNldCBudW1iZXJzIGFyZSB0ZXN0ZWQgd2l0aAorICAgYWxpYXNfc2V0c19jb25mbGljdF9wLiAgKi8KKyNkZWZpbmUgTUVNX0FMSUFTX1NFVChSVFgpIChnZXRfbWVtX2F0dHJzIChSVFgpLT5hbGlhcykKKworLyogRm9yIGEgTUVNIHJ0eCwgdGhlIGRlY2wgaXQgaXMga25vd24gdG8gcmVmZXIgdG8sIGlmIGl0IGlzIGtub3duIHRvCisgICByZWZlciB0byBwYXJ0IG9mIGEgREVDTC4gIEl0IG1heSBhbHNvIGJlIGEgQ09NUE9ORU5UX1JFRi4gICovCisjZGVmaW5lIE1FTV9FWFBSKFJUWCkgKGdldF9tZW1fYXR0cnMgKFJUWCktPmV4cHIpCisKKy8qIEZvciBhIE1FTSBydHgsIHRydWUgaWYgaXRzIE1FTV9PRkZTRVQgaXMga25vd24uICAqLworI2RlZmluZSBNRU1fT0ZGU0VUX0tOT1dOX1AoUlRYKSAoZ2V0X21lbV9hdHRycyAoUlRYKS0+b2Zmc2V0X2tub3duX3ApCisKKy8qIEZvciBhIE1FTSBydHgsIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgTUVNX0VYUFIuICAqLworI2RlZmluZSBNRU1fT0ZGU0VUKFJUWCkgKGdldF9tZW1fYXR0cnMgKFJUWCktPm9mZnNldCkKKworLyogRm9yIGEgTUVNIHJ0eCwgdGhlIGFkZHJlc3Mgc3BhY2UuICAqLworI2RlZmluZSBNRU1fQUREUl9TUEFDRShSVFgpIChnZXRfbWVtX2F0dHJzIChSVFgpLT5hZGRyc3BhY2UpCisKKy8qIEZvciBhIE1FTSBydHgsIHRydWUgaWYgaXRzIE1FTV9TSVpFIGlzIGtub3duLiAgKi8KKyNkZWZpbmUgTUVNX1NJWkVfS05PV05fUChSVFgpIChnZXRfbWVtX2F0dHJzIChSVFgpLT5zaXplX2tub3duX3ApCisKKy8qIEZvciBhIE1FTSBydHgsIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBNRU0uICAqLworI2RlZmluZSBNRU1fU0laRShSVFgpIChnZXRfbWVtX2F0dHJzIChSVFgpLT5zaXplKQorCisvKiBGb3IgYSBNRU0gcnR4LCB0aGUgYWxpZ25tZW50IGluIGJpdHMuICBXZSBjYW4gdXNlIHRoZSBhbGlnbm1lbnQgb2YgdGhlCisgICBtb2RlIGFzIGEgZGVmYXVsdCB3aGVuIFNUUklDVF9BTElHTk1FTlQsIGJ1dCBub3QgaWYgbm90LiAgKi8KKyNkZWZpbmUgTUVNX0FMSUdOKFJUWCkgKGdldF9tZW1fYXR0cnMgKFJUWCktPmFsaWduKQorI2Vsc2UKKyNkZWZpbmUgTUVNX0FERFJfU1BBQ0UoUlRYKSBBRERSX1NQQUNFX0dFTkVSSUMKKyNlbmRpZgorCisvKiBGb3IgYSBSRUcgcnR4LCB0aGUgZGVjbCBpdCBpcyBrbm93biB0byByZWZlciB0bywgaWYgaXQgaXMga25vd24gdG8KKyAgIHJlZmVyIHRvIHBhcnQgb2YgYSBERUNMLiAgKi8KKyNkZWZpbmUgUkVHX0VYUFIoUlRYKSAoUkVHX0FUVFJTIChSVFgpID09IDAgPyAwIDogUkVHX0FUVFJTIChSVFgpLT5kZWNsKQorCisvKiBGb3IgYSBSRUcgcnR4LCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIFJFR19FWFBSLCBpZiBrbm93biwgYXMgYW4KKyAgIEhPU1RfV0lERV9JTlQuICAqLworI2RlZmluZSBSRUdfT0ZGU0VUKFJUWCkgKFJFR19BVFRSUyAoUlRYKSA9PSAwID8gMCA6IFJFR19BVFRSUyAoUlRYKS0+b2Zmc2V0KQorCisvKiBDb3B5IHRoZSBhdHRyaWJ1dGVzIHRoYXQgYXBwbHkgdG8gbWVtb3J5IGxvY2F0aW9ucyBmcm9tIFJIUyB0byBMSFMuICAqLworI2RlZmluZSBNRU1fQ09QWV9BVFRSSUJVVEVTKExIUywgUkhTKQkJCQlcCisgIChNRU1fVk9MQVRJTEVfUCAoTEhTKSA9IE1FTV9WT0xBVElMRV9QIChSSFMpLAkJCVwKKyAgIE1FTV9OT1RSQVBfUCAoTEhTKSA9IE1FTV9OT1RSQVBfUCAoUkhTKSwJCQlcCisgICBNRU1fUkVBRE9OTFlfUCAoTEhTKSA9IE1FTV9SRUFET05MWV9QIChSSFMpLAkJCVwKKyAgIE1FTV9LRUVQX0FMSUFTX1NFVF9QIChMSFMpID0gTUVNX0tFRVBfQUxJQVNfU0VUX1AgKFJIUyksCVwKKyAgIE1FTV9QT0lOVEVSIChMSFMpID0gTUVNX1BPSU5URVIgKFJIUyksCQkJXAorICAgTUVNX0FUVFJTIChMSFMpID0gTUVNX0FUVFJTIChSSFMpKQorCisvKiAxIGlmIFJUWCBpcyBhIGxhYmVsX3JlZiBmb3IgYSBub25sb2NhbCBsYWJlbC4gICovCisvKiBMaWtld2lzZSBpbiBhbiBleHByX2xpc3QgZm9yIGEgUkVHX0xBQkVMX09QRVJBTkQgb3IKKyAgIFJFR19MQUJFTF9UQVJHRVQgbm90ZS4gICovCisjZGVmaW5lIExBQkVMX1JFRl9OT05MT0NBTF9QKFJUWCkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiTEFCRUxfUkVGX05PTkxPQ0FMX1AiLCAoUlRYKSwgTEFCRUxfUkVGKS0+dm9sYXRpbCkKKworLyogMSBpZiBSVFggaXMgYSBjb2RlX2xhYmVsIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSBjb25zaWRlcmVkIHRvIGJlIG5lZWRlZC4gICovCisjZGVmaW5lIExBQkVMX1BSRVNFUlZFX1AoUlRYKQkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMigiTEFCRUxfUFJFU0VSVkVfUCIsIChSVFgpLCBDT0RFX0xBQkVMLCBOT1RFKS0+aW5fc3RydWN0KQorCisvKiBEdXJpbmcgc2NoZWQsIDEgaWYgUlRYIGlzIGFuIGluc24gdGhhdCBtdXN0IGJlIHNjaGVkdWxlZCB0b2dldGhlcgorICAgd2l0aCB0aGUgcHJlY2VkaW5nIGluc24uICAqLworI2RlZmluZSBTQ0hFRF9HUk9VUF9QKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzQoIlNDSEVEX0dST1VQX1AiLCAoUlRYKSwgREVCVUdfSU5TTiwgSU5TTiwJCVwKKwkJICAgSlVNUF9JTlNOLCBDQUxMX0lOU04JCQkJCVwKKwkJICAgKS0+aW5fc3RydWN0KQorCisvKiBGb3IgYSBTRVQgcnR4LCBTRVRfREVTVCBpcyB0aGUgcGxhY2UgdGhhdCBpcyBzZXQKKyAgIGFuZCBTRVRfU1JDIGlzIHRoZSB2YWx1ZSBpdCBpcyBzZXQgdG8uICAqLworI2RlZmluZSBTRVRfREVTVChSVFgpIFhDMkVYUChSVFgsIDAsIFNFVCwgQ0xPQkJFUikKKyNkZWZpbmUgU0VUX1NSQyhSVFgpIFhDRVhQKFJUWCwgMSwgU0VUKQorI2RlZmluZSBTRVRfSVNfUkVUVVJOX1AoUlRYKQkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiU0VUX0lTX1JFVFVSTl9QIiwgKFJUWCksIFNFVCktPmp1bXApCisKKy8qIEZvciBhIFRSQVBfSUYgcnR4LCBUUkFQX0NPTkRJVElPTiBpcyBhbiBleHByZXNzaW9uLiAgKi8KKyNkZWZpbmUgVFJBUF9DT05ESVRJT04oUlRYKSBYQ0VYUCAoUlRYLCAwLCBUUkFQX0lGKQorI2RlZmluZSBUUkFQX0NPREUoUlRYKSBYQ0VYUCAoUlRYLCAxLCBUUkFQX0lGKQorCisvKiBGb3IgYSBDT05EX0VYRUMgcnR4LCBDT05EX0VYRUNfVEVTVCBpcyB0aGUgY29uZGl0aW9uIHRvIGJhc2UKKyAgIGNvbmRpdGlvbmFsbHkgZXhlY3V0aW5nIHRoZSBjb2RlIG9uLCBDT05EX0VYRUNfQ09ERSBpcyB0aGUgY29kZQorICAgdG8gZXhlY3V0ZSBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWUuICAqLworI2RlZmluZSBDT05EX0VYRUNfVEVTVChSVFgpIFhDRVhQIChSVFgsIDAsIENPTkRfRVhFQykKKyNkZWZpbmUgQ09ORF9FWEVDX0NPREUoUlRYKSBYQ0VYUCAoUlRYLCAxLCBDT05EX0VYRUMpCisKKy8qIDEgaWYgUlRYIGlzIGEgc3ltYm9sX3JlZiB0aGF0IGFkZHJlc3NlcyB0aGlzIGZ1bmN0aW9uJ3MgcnRsCisgICBjb25zdGFudHMgcG9vbC4gICovCisjZGVmaW5lIENPTlNUQU5UX1BPT0xfQUREUkVTU19QKFJUWCkJCQkJCVwKKyAgKFJUTF9GTEFHX0NIRUNLMSgiQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AiLCAoUlRYKSwgU1lNQk9MX1JFRiktPnVuY2hhbmdpbmcpCisKKy8qIDEgaWYgUlRYIGlzIGEgc3ltYm9sX3JlZiB0aGF0IGFkZHJlc3NlcyBhIHZhbHVlIGluIHRoZSBmaWxlJ3MKKyAgIHRyZWUgY29uc3RhbnQgcG9vbC4gIFRoaXMgaW5mb3JtYXRpb24gaXMgcHJpdmF0ZSB0byB2YXJhc20uYy4gICovCisjZGVmaW5lIFRSRUVfQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AoUlRYKQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlRSRUVfQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AiLAkJCVwKKwkJICAgKFJUWCksIFNZTUJPTF9SRUYpLT5mcmFtZV9yZWxhdGVkKQorCisvKiBVc2VkIGlmIFJUWCBpcyBhIHN5bWJvbF9yZWYsIGZvciBtYWNoaW5lLXNwZWNpZmljIHB1cnBvc2VzLiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9GTEFHKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlNZTUJPTF9SRUZfRkxBRyIsIChSVFgpLCBTWU1CT0xfUkVGKS0+dm9sYXRpbCkKKworLyogMSBpZiBSVFggaXMgYSBzeW1ib2xfcmVmIHRoYXQgaGFzIGJlZW4gdGhlIGxpYnJhcnkgZnVuY3Rpb24gaW4KKyAgIGVtaXRfbGlicmFyeV9jYWxsLiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9VU0VEKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlNZTUJPTF9SRUZfVVNFRCIsIChSVFgpLCBTWU1CT0xfUkVGKS0+dXNlZCkKKworLyogMSBpZiBSVFggaXMgYSBzeW1ib2xfcmVmIGZvciBhIHdlYWsgc3ltYm9sLiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9XRUFLKFJUWCkJCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlNZTUJPTF9SRUZfV0VBSyIsIChSVFgpLCBTWU1CT0xfUkVGKS0+cmV0dXJuX3ZhbCkKKworLyogQSBwb2ludGVyIGF0dGFjaGVkIHRvIHRoZSBTWU1CT0xfUkVGOyBlaXRoZXIgU1lNQk9MX1JFRl9ERUNMIG9yCisgICBTWU1CT0xfUkVGX0NPTlNUQU5ULiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9EQVRBKFJUWCkgWDBBTlkgKChSVFgpLCAyKQorCisvKiBTZXQgUlRYJ3MgU1lNQk9MX1JFRl9ERUNMIHRvIERFQ0wuICBSVFggbXVzdCBub3QgYmUgYSBjb25zdGFudAorICAgcG9vbCBzeW1ib2wuICAqLworI2RlZmluZSBTRVRfU1lNQk9MX1JFRl9ERUNMKFJUWCwgREVDTCkgXAorICAoZ2NjX2Fzc2VydCAoIUNPTlNUQU5UX1BPT0xfQUREUkVTU19QIChSVFgpKSwgWDBUUkVFICgoUlRYKSwgMikgPSAoREVDTCkpCisKKy8qIFRoZSB0cmVlIChkZWNsIG9yIGNvbnN0YW50KSBhc3NvY2lhdGVkIHdpdGggdGhlIHN5bWJvbCwgb3IgbnVsbC4gICovCisjZGVmaW5lIFNZTUJPTF9SRUZfREVDTChSVFgpIFwKKyAgKENPTlNUQU5UX1BPT0xfQUREUkVTU19QIChSVFgpID8gTlVMTCA6IFgwVFJFRSAoKFJUWCksIDIpKQorCisvKiBTZXQgUlRYJ3MgU1lNQk9MX1JFRl9DT05TVEFOVCB0byBDLiAgUlRYIG11c3QgYmUgYSBjb25zdGFudCBwb29sIHN5bWJvbC4gICovCisjZGVmaW5lIFNFVF9TWU1CT0xfUkVGX0NPTlNUQU5UKFJUWCwgQykgXAorICAoZ2NjX2Fzc2VydCAoQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AgKFJUWCkpLCBYMENPTlNUQU5UICgoUlRYKSwgMikgPSAoQykpCisKKy8qIFRoZSBydHggY29uc3RhbnQgcG9vbCBlbnRyeSBmb3IgYSBzeW1ib2wsIG9yIG51bGwuICAqLworI2RlZmluZSBTWU1CT0xfUkVGX0NPTlNUQU5UKFJUWCkgXAorICAoQ09OU1RBTlRfUE9PTF9BRERSRVNTX1AgKFJUWCkgPyBYMENPTlNUQU5UICgoUlRYKSwgMikgOiBOVUxMKQorCisvKiBBIHNldCBvZiBmbGFncyBvbiBhIHN5bWJvbF9yZWYgdGhhdCBhcmUsIGluIHNvbWUgcmVzcGVjdHMsIHJlZHVuZGFudCB3aXRoCisgICBpbmZvcm1hdGlvbiBkZXJpdmFibGUgZnJvbSB0aGUgdHJlZSBkZWNsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN5bWJvbC4KKyAgIEV4Y2VwdCB0aGF0IHdlIGJ1aWxkIGEgKmxvdCogb2YgU1lNQk9MX1JFRnMgdGhhdCBhcmVuJ3QgYXNzb2NpYXRlZCB3aXRoIGEKKyAgIGRlY2wuICBJbiBzb21lIGNhc2VzIHRoaXMgaXMgYSBidWcuICBCdXQgYmV5b25kIHRoYXQsIGl0J3MgbmljZSB0byBjYWNoZQorICAgdGhpcyBpbmZvcm1hdGlvbiB0byBhdm9pZCByZWNvbXB1dGluZyBpdC4gIEZpbmFsbHksIHRoaXMgYWxsb3dzIHNwYWNlIGZvcgorICAgdGhlIHRhcmdldCB0byBzdG9yZSBtb3JlIHRoYW4gb25lIGJpdCBvZiBpbmZvcm1hdGlvbiwgYXMgd2l0aAorICAgU1lNQk9MX1JFRl9GTEFHLiAgKi8KKyNkZWZpbmUgU1lNQk9MX1JFRl9GTEFHUyhSVFgpCVgwSU5UICgoUlRYKSwgMSkKKworLyogVGhlc2UgZmxhZ3MgYXJlIGNvbW1vbiBlbm91Z2ggdG8gYmUgZGVmaW5lZCBmb3IgYWxsIHRhcmdldHMuICBUaGV5CisgICBhcmUgY29tcHV0ZWQgYnkgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0YXJnZXRtLmVuY29kZV9zZWN0aW9uX2luZm8uICAqLworCisvKiBTZXQgaWYgdGhpcyBzeW1ib2wgaXMgYSBmdW5jdGlvbi4gICovCisjZGVmaW5lIFNZTUJPTF9GTEFHX0ZVTkNUSU9OCSgxIDw8IDApCisjZGVmaW5lIFNZTUJPTF9SRUZfRlVOQ1RJT05fUChSVFgpIFwKKyAgKChTWU1CT0xfUkVGX0ZMQUdTIChSVFgpICYgU1lNQk9MX0ZMQUdfRlVOQ1RJT04pICE9IDApCisvKiBTZXQgaWYgdGFyZ2V0bS5iaW5kc19sb2NhbF9wIGlzIHRydWUuICAqLworI2RlZmluZSBTWU1CT0xfRkxBR19MT0NBTAkoMSA8PCAxKQorI2RlZmluZSBTWU1CT0xfUkVGX0xPQ0FMX1AoUlRYKSBcCisgICgoU1lNQk9MX1JFRl9GTEFHUyAoUlRYKSAmIFNZTUJPTF9GTEFHX0xPQ0FMKSAhPSAwKQorLyogU2V0IGlmIHRhcmdldG0uaW5fc21hbGxfZGF0YV9wIGlzIHRydWUuICAqLworI2RlZmluZSBTWU1CT0xfRkxBR19TTUFMTAkoMSA8PCAyKQorI2RlZmluZSBTWU1CT0xfUkVGX1NNQUxMX1AoUlRYKSBcCisgICgoU1lNQk9MX1JFRl9GTEFHUyAoUlRYKSAmIFNZTUJPTF9GTEFHX1NNQUxMKSAhPSAwKQorLyogVGhlIHRocmVlLWJpdCBmaWVsZCBhdCBbNTozXSBpcyB0cnVlIGZvciBUTFMgdmFyaWFibGVzOyB1c2UKKyAgIFNZTUJPTF9SRUZfVExTX01PREVMIHRvIGV4dHJhY3QgdGhlIGZpZWxkIGFzIGFuIGVudW0gdGxzX21vZGVsLiAgKi8KKyNkZWZpbmUgU1lNQk9MX0ZMQUdfVExTX1NISUZUCTMKKyNkZWZpbmUgU1lNQk9MX1JFRl9UTFNfTU9ERUwoUlRYKSBcCisgICgoZW51bSB0bHNfbW9kZWwpICgoU1lNQk9MX1JFRl9GTEFHUyAoUlRYKSA+PiBTWU1CT0xfRkxBR19UTFNfU0hJRlQpICYgNykpCisvKiBTZXQgaWYgdGhpcyBzeW1ib2wgaXMgbm90IGRlZmluZWQgaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgKi8KKyNkZWZpbmUgU1lNQk9MX0ZMQUdfRVhURVJOQUwJKDEgPDwgNikKKyNkZWZpbmUgU1lNQk9MX1JFRl9FWFRFUk5BTF9QKFJUWCkgXAorICAoKFNZTUJPTF9SRUZfRkxBR1MgKFJUWCkgJiBTWU1CT0xfRkxBR19FWFRFUk5BTCkgIT0gMCkKKy8qIFNldCBpZiB0aGlzIHN5bWJvbCBoYXMgYSBibG9ja19zeW1ib2wgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBpdC4gICovCisjZGVmaW5lIFNZTUJPTF9GTEFHX0hBU19CTE9DS19JTkZPICgxIDw8IDcpCisjZGVmaW5lIFNZTUJPTF9SRUZfSEFTX0JMT0NLX0lORk9fUChSVFgpIFwKKyAgKChTWU1CT0xfUkVGX0ZMQUdTIChSVFgpICYgU1lNQk9MX0ZMQUdfSEFTX0JMT0NLX0lORk8pICE9IDApCisvKiBTZXQgaWYgdGhpcyBzeW1ib2wgaXMgYSBzZWN0aW9uIGFuY2hvci4gIFNZTUJPTF9SRUZfQU5DSE9SX1AgaW1wbGllcworICAgU1lNQk9MX1JFRl9IQVNfQkxPQ0tfSU5GT19QLiAgKi8KKyNkZWZpbmUgU1lNQk9MX0ZMQUdfQU5DSE9SCSgxIDw8IDgpCisjZGVmaW5lIFNZTUJPTF9SRUZfQU5DSE9SX1AoUlRYKSBcCisgICgoU1lNQk9MX1JFRl9GTEFHUyAoUlRYKSAmIFNZTUJPTF9GTEFHX0FOQ0hPUikgIT0gMCkKKworLyogU3Vic2VxdWVudCBiaXRzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSB0YXJnZXQgdG8gdXNlLiAgKi8KKyNkZWZpbmUgU1lNQk9MX0ZMQUdfTUFDSF9ERVBfU0hJRlQJOQorI2RlZmluZSBTWU1CT0xfRkxBR19NQUNIX0RFUAkJKDEgPDwgU1lNQk9MX0ZMQUdfTUFDSF9ERVBfU0hJRlQpCisKKy8qIElmIFNZTUJPTF9SRUZfSEFTX0JMT0NLX0lORk9fUCAoUlRYKSwgdGhpcyBpcyB0aGUgb2JqZWN0X2Jsb2NrCisgICBzdHJ1Y3R1cmUgdG8gd2hpY2ggdGhlIHN5bWJvbCBiZWxvbmdzLCBvciBOVUxMIGlmIGl0IGhhcyBub3QgYmVlbgorICAgYXNzaWduZWQgYSBibG9jay4gICovCisjZGVmaW5lIFNZTUJPTF9SRUZfQkxPQ0soUlRYKSAoQkxPQ0tfU1lNQk9MX0NIRUNLIChSVFgpLT5ibG9jaykKKworLyogSWYgU1lNQk9MX1JFRl9IQVNfQkxPQ0tfSU5GT19QIChSVFgpLCB0aGlzIGlzIHRoZSBvZmZzZXQgb2YgUlRYIGZyb20KKyAgIHRoZSBmaXJzdCBvYmplY3QgaW4gU1lNQk9MX1JFRl9CTE9DSyAoUlRYKS4gIFRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSBpZgorICAgUlRYIGhhcyBub3QgeWV0IGJlZW4gYXNzaWduZWQgdG8gYSBibG9jaywgb3IgaXQgaGFzIG5vdCBiZWVuIGdpdmVuIGFuCisgICBvZmZzZXQgd2l0aGluIHRoYXQgYmxvY2suICAqLworI2RlZmluZSBTWU1CT0xfUkVGX0JMT0NLX09GRlNFVChSVFgpIChCTE9DS19TWU1CT0xfQ0hFQ0sgKFJUWCktPm9mZnNldCkKKworLyogVHJ1ZSBpZiBSVFggaXMgZmxhZ2dlZCB0byBiZSBhIHNjaGVkdWxpbmcgYmFycmllci4gICovCisjZGVmaW5lIFBSRUZFVENIX1NDSEVEVUxFX0JBUlJJRVJfUChSVFgpCQkJCQlcCisgIChSVExfRkxBR19DSEVDSzEoIlBSRUZFVENIX1NDSEVEVUxFX0JBUlJJRVJfUCIsIChSVFgpLCBQUkVGRVRDSCktPnZvbGF0aWwpCisKKy8qIEluZGljYXRlIHdoZXRoZXIgdGhlIG1hY2hpbmUgaGFzIGFueSBzb3J0IG9mIGF1dG8gaW5jcmVtZW50IGFkZHJlc3NpbmcuCisgICBJZiBub3QsIHdlIGNhbiBhdm9pZCBjaGVja2luZyBmb3IgUkVHX0lOQyBub3Rlcy4gICovCisKKyNpZiAoZGVmaW5lZCAoSEFWRV9QUkVfSU5DUkVNRU5UKSB8fCBkZWZpbmVkIChIQVZFX1BSRV9ERUNSRU1FTlQpIFwKKyAgICAgfHwgZGVmaW5lZCAoSEFWRV9QT1NUX0lOQ1JFTUVOVCkgfHwgZGVmaW5lZCAoSEFWRV9QT1NUX0RFQ1JFTUVOVCkgXAorICAgICB8fCBkZWZpbmVkIChIQVZFX1BSRV9NT0RJRllfRElTUCkgfHwgZGVmaW5lZCAoSEFWRV9QUkVfTU9ESUZZX0RJU1ApIFwKKyAgICAgfHwgZGVmaW5lZCAoSEFWRV9QUkVfTU9ESUZZX1JFRykgfHwgZGVmaW5lZCAoSEFWRV9QT1NUX01PRElGWV9SRUcpKQorI2RlZmluZSBBVVRPX0lOQ19ERUMKKyNlbmRpZgorCisvKiBEZWZpbmUgYSBtYWNybyB0byBsb29rIGZvciBSRUdfSU5DIG5vdGVzLAorICAgYnV0IHNhdmUgdGltZSBvbiBtYWNoaW5lcyB3aGVyZSB0aGV5IG5ldmVyIGV4aXN0LiAgKi8KKworI2lmZGVmIEFVVE9fSU5DX0RFQworI2RlZmluZSBGSU5EX1JFR19JTkNfTk9URShJTlNOLCBSRUcpCQkJXAorICAoKFJFRykgIT0gTlVMTF9SVFggJiYgUkVHX1AgKChSRUcpKQkJCVwKKyAgID8gZmluZF9yZWdub19ub3RlICgoSU5TTiksIFJFR19JTkMsIFJFR05PIChSRUcpKQlcCisgICA6IGZpbmRfcmVnX25vdGUgKChJTlNOKSwgUkVHX0lOQywgKFJFRykpKQorI2Vsc2UKKyNkZWZpbmUgRklORF9SRUdfSU5DX05PVEUoSU5TTiwgUkVHKSAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1BSRV9JTkNSRU1FTlQKKyNkZWZpbmUgSEFWRV9QUkVfSU5DUkVNRU5UIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUFJFX0RFQ1JFTUVOVAorI2RlZmluZSBIQVZFX1BSRV9ERUNSRU1FTlQgMAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9QT1NUX0lOQ1JFTUVOVAorI2RlZmluZSBIQVZFX1BPU1RfSU5DUkVNRU5UIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUE9TVF9ERUNSRU1FTlQKKyNkZWZpbmUgSEFWRV9QT1NUX0RFQ1JFTUVOVCAwCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1BPU1RfTU9ESUZZX0RJU1AKKyNkZWZpbmUgSEFWRV9QT1NUX01PRElGWV9ESVNQIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUE9TVF9NT0RJRllfUkVHCisjZGVmaW5lIEhBVkVfUE9TVF9NT0RJRllfUkVHIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUFJFX01PRElGWV9ESVNQCisjZGVmaW5lIEhBVkVfUFJFX01PRElGWV9ESVNQIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfUFJFX01PRElGWV9SRUcKKyNkZWZpbmUgSEFWRV9QUkVfTU9ESUZZX1JFRyAwCisjZW5kaWYKKworCisvKiBTb21lIGFyY2hpdGVjdHVyZXMgZG8gbm90IGhhdmUgY29tcGxldGUgcHJlL3Bvc3QgaW5jcmVtZW50L2RlY3JlbWVudAorICAgaW5zdHJ1Y3Rpb24gc2V0cywgb3Igb25seSBtb3ZlIHNvbWUgbW9kZXMgZWZmaWNpZW50bHkuICBUaGVzZSBtYWNyb3MKKyAgIGFsbG93IHVzIHRvIHR1bmUgYXV0b2luY3JlbWVudCBnZW5lcmF0aW9uLiAgKi8KKworI2lmbmRlZiBVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVAorI2RlZmluZSBVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVChNT0RFKSAgIEhBVkVfUE9TVF9JTkNSRU1FTlQKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9MT0FEX1BPU1RfREVDUkVNRU5UCisjZGVmaW5lIFVTRV9MT0FEX1BPU1RfREVDUkVNRU5UKE1PREUpICAgSEFWRV9QT1NUX0RFQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX0xPQURfUFJFX0lOQ1JFTUVOVAorI2RlZmluZSBVU0VfTE9BRF9QUkVfSU5DUkVNRU5UKE1PREUpICAgIEhBVkVfUFJFX0lOQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX0xPQURfUFJFX0RFQ1JFTUVOVAorI2RlZmluZSBVU0VfTE9BRF9QUkVfREVDUkVNRU5UKE1PREUpICAgIEhBVkVfUFJFX0RFQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1NUT1JFX1BPU1RfSU5DUkVNRU5UCisjZGVmaW5lIFVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVChNT0RFKSAgSEFWRV9QT1NUX0lOQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1NUT1JFX1BPU1RfREVDUkVNRU5UCisjZGVmaW5lIFVTRV9TVE9SRV9QT1NUX0RFQ1JFTUVOVChNT0RFKSAgSEFWRV9QT1NUX0RFQ1JFTUVOVAorI2VuZGlmCisKKyNpZm5kZWYgVVNFX1NUT1JFX1BSRV9JTkNSRU1FTlQKKyNkZWZpbmUgVVNFX1NUT1JFX1BSRV9JTkNSRU1FTlQoTU9ERSkgICBIQVZFX1BSRV9JTkNSRU1FTlQKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UCisjZGVmaW5lIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKE1PREUpICAgSEFWRV9QUkVfREVDUkVNRU5UCisjZW5kaWYKKwwKKy8qIE5vbnplcm8gd2hlbiB3ZSBhcmUgZ2VuZXJhdGluZyBDT05DQVRzLiAgKi8KK2V4dGVybiBpbnQgZ2VuZXJhdGluZ19jb25jYXRfcDsKKworLyogTm9uemVybyB3aGVuIHdlIGFyZSBleHBhbmRpbmcgdHJlZXMgdG8gUlRMLiAgKi8KK2V4dGVybiBpbnQgY3VycmVudGx5X2V4cGFuZGluZ190b19ydGw7CisKKy8qIEdlbmVyYWxseSB1c2VmdWwgZnVuY3Rpb25zLiAgKi8KKworLyogSW4gZXhwbG93LmMgKi8KK2V4dGVybiBIT1NUX1dJREVfSU5UIHRydW5jX2ludF9mb3JfbW9kZQkoSE9TVF9XSURFX0lOVCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIHJ0eCBwbHVzX2NvbnN0YW50IChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBIT1NUX1dJREVfSU5UKTsKKworLyogSW4gcnRsLmMgKi8KK2V4dGVybiBydHggcnR4X2FsbG9jX3N0YXQgKFJUWF9DT0RFIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBydHhfYWxsb2MoYykgcnR4X2FsbG9jX3N0YXQgKGMgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHJ0dmVjIHJ0dmVjX2FsbG9jIChpbnQpOworZXh0ZXJuIHJ0dmVjIHNoYWxsb3dfY29weV9ydHZlYyAocnR2ZWMpOworZXh0ZXJuIGJvb2wgc2hhcmVkX2NvbnN0X3AgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGNvcHlfcnR4IChydHgpOworZXh0ZXJuIHZvaWQgZHVtcF9ydHhfc3RhdGlzdGljcyAodm9pZCk7CisKKy8qIEluIGVtaXQtcnRsLmMgKi8KK2V4dGVybiBydHggY29weV9ydHhfaWZfc2hhcmVkIChydHgpOworCisvKiBJbiBydGwuYyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBydHhfc2l6ZSAoY29uc3RfcnR4KTsKK2V4dGVybiBydHggc2hhbGxvd19jb3B5X3J0eF9zdGF0IChjb25zdF9ydHggTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIHNoYWxsb3dfY29weV9ydHgoYSkgc2hhbGxvd19jb3B5X3J0eF9zdGF0IChhIE1FTV9TVEFUX0lORk8pCitleHRlcm4gaW50IHJ0eF9lcXVhbF9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaGFzaHZhbF90IGl0ZXJhdGl2ZV9oYXNoX3J0eCAoY29uc3RfcnR4LCBoYXNodmFsX3QpOworCisvKiBJbiBlbWl0LXJ0bC5jICovCitleHRlcm4gcnR2ZWMgZ2VuX3J0dmVjX3YgKGludCwgcnR4ICopOworZXh0ZXJuIHJ0eCBnZW5fcmVnX3J0eCAoZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIHJ0eCBnZW5fcnR4X1JFR19vZmZzZXQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkIGludCwgaW50KTsKK2V4dGVybiBydHggZ2VuX3JlZ19ydHhfb2Zmc2V0IChydHgsIGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOworZXh0ZXJuIHJ0eCBnZW5fcmVnX3J0eF9hbmRfYXR0cnMgKHJ0eCk7CitleHRlcm4gcnR4IGdlbl9sYWJlbF9ydHggKHZvaWQpOworZXh0ZXJuIHJ0eCBnZW5fbG93cGFydF9jb21tb24gKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworCisvKiBJbiBjc2UuYyAqLworZXh0ZXJuIHJ0eCBnZW5fbG93cGFydF9pZl9wb3NzaWJsZSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CisKKy8qIEluIGVtaXQtcnRsLmMgKi8KK2V4dGVybiBydHggZ2VuX2hpZ2hwYXJ0IChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKK2V4dGVybiBydHggZ2VuX2hpZ2hwYXJ0X21vZGUgKGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKK2V4dGVybiBydHggb3BlcmFuZF9zdWJ3b3JkIChydHgsIHVuc2lnbmVkIGludCwgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIEluIGVtaXQtcnRsLmMgKi8KK2V4dGVybiBydHggb3BlcmFuZF9zdWJ3b3JkX2ZvcmNlIChydHgsIHVuc2lnbmVkIGludCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGJvb2wgcGFyYWRveGljYWxfc3VicmVnX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHN1YnJlZ19sb3dwYXJ0X3AgKGNvbnN0X3J0eCk7CitleHRlcm4gdW5zaWduZWQgaW50IHN1YnJlZ19sb3dwYXJ0X29mZnNldCAoZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSAgIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX2hpZ2hwYXJ0X29mZnNldCAoZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSAgICBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGJ5dGVfbG93cGFydF9vZmZzZXQgKGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gcnR4IG1ha2Vfc2FmZV9mcm9tIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGNvbnZlcnRfbWVtb3J5X2FkZHJlc3NfYWRkcl9zcGFjZSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwKKwkJCQkJICAgICAgYWRkcl9zcGFjZV90KTsKKyNkZWZpbmUgY29udmVydF9tZW1vcnlfYWRkcmVzcyh0b19tb2RlLHgpIFwKKwljb252ZXJ0X21lbW9yeV9hZGRyZXNzX2FkZHJfc3BhY2UgKCh0b19tb2RlKSwgKHgpLCBBRERSX1NQQUNFX0dFTkVSSUMpCitleHRlcm4gY29uc3QgY2hhciAqZ2V0X2luc25fbmFtZSAoaW50KTsKK2V4dGVybiBydHggZ2V0X2xhc3RfaW5zbl9hbnl3aGVyZSAodm9pZCk7CitleHRlcm4gcnR4IGdldF9maXJzdF9ub25ub3RlX2luc24gKHZvaWQpOworZXh0ZXJuIHJ0eCBnZXRfbGFzdF9ub25ub3RlX2luc24gKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhcnRfc2VxdWVuY2UgKHZvaWQpOworZXh0ZXJuIHZvaWQgcHVzaF90b19zZXF1ZW5jZSAocnR4KTsKK2V4dGVybiB2b2lkIHB1c2hfdG9fc2VxdWVuY2UyIChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBlbmRfc2VxdWVuY2UgKHZvaWQpOworZXh0ZXJuIGRvdWJsZV9pbnQgcnR4X3RvX2RvdWJsZV9pbnQgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGltbWVkX2RvdWJsZV9pbnRfY29uc3QgKGRvdWJsZV9pbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBydHggaW1tZWRfZG91YmxlX2NvbnN0IChIT1NUX1dJREVfSU5ULCBIT1NUX1dJREVfSU5ULAorCQkJICAgICAgIGVudW0gbWFjaGluZV9tb2RlKTsKKworLyogSW4gbG9vcC1pdi5jICAqLworCitleHRlcm4gcnR4IGxvd3BhcnRfc3VicmVnIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisKKy8qIEluIHZhcmFzbS5jICAqLworZXh0ZXJuIHJ0eCBmb3JjZV9jb25zdF9tZW0gKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworCisvKiBJbiB2YXJhc20uYyAgKi8KKworc3RydWN0IGZ1bmN0aW9uOworZXh0ZXJuIHJ0eCBnZXRfcG9vbF9jb25zdGFudCAocnR4KTsKK2V4dGVybiBydHggZ2V0X3Bvb2xfY29uc3RhbnRfbWFyayAocnR4LCBib29sICopOworZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIGdldF9wb29sX21vZGUgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X3N1YnRyYWN0aW9uIChydHgpOworZXh0ZXJuIHZvaWQgZGVjaWRlX2Z1bmN0aW9uX3NlY3Rpb24gKHRyZWUpOworCisvKiBJbiBmdW5jdGlvbi5jICAqLworZXh0ZXJuIHJ0eCBhc3NpZ25fc3RhY2tfbG9jYWwgKGVudW0gbWFjaGluZV9tb2RlLCBIT1NUX1dJREVfSU5ULCBpbnQpOworI2RlZmluZSBBU0xLX1JFRFVDRV9BTElHTiAxCisjZGVmaW5lIEFTTEtfUkVDT1JEX1BBRCAyCitleHRlcm4gcnR4IGFzc2lnbl9zdGFja19sb2NhbF8xIChlbnVtIG1hY2hpbmVfbW9kZSwgSE9TVF9XSURFX0lOVCwgaW50LCBpbnQpOworZXh0ZXJuIHJ0eCBhc3NpZ25fc3RhY2tfdGVtcCAoZW51bSBtYWNoaW5lX21vZGUsIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHJ0eCBhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSAoZW51bSBtYWNoaW5lX21vZGUsIEhPU1RfV0lERV9JTlQsIHRyZWUpOworZXh0ZXJuIHJ0eCBhc3NpZ25fdGVtcCAodHJlZSwgaW50LCBpbnQpOworCisvKiBJbiBlbWl0LXJ0bC5jICovCitleHRlcm4gcnR4IGVtaXRfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9pbnNuX2JlZm9yZV9ub2xvYyAocnR4LCBydHgsIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBydHggZW1pdF9pbnNuX2JlZm9yZV9zZXRsb2MgKHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIHJ0eCBlbWl0X2p1bXBfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9qdW1wX2luc25fYmVmb3JlX25vbG9jIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2JlZm9yZV9zZXRsb2MgKHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIHJ0eCBlbWl0X2NhbGxfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9jYWxsX2luc25fYmVmb3JlX25vbG9jIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuX2JlZm9yZV9zZXRsb2MgKHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIHJ0eCBlbWl0X2RlYnVnX2luc25fYmVmb3JlIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfZGVidWdfaW5zbl9iZWZvcmVfbm9sb2MgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9kZWJ1Z19pbnNuX2JlZm9yZV9zZXRsb2MgKHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIHJ0eCBlbWl0X2JhcnJpZXJfYmVmb3JlIChydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2xhYmVsX2JlZm9yZSAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X25vdGVfYmVmb3JlIChlbnVtIGluc25fbm90ZSwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9pbnNuX2FmdGVyIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfaW5zbl9hZnRlcl9ub2xvYyAocnR4LCBydHgsIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBydHggZW1pdF9pbnNuX2FmdGVyX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2FmdGVyIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2FmdGVyX25vbG9jIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2FmdGVyX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuX2FmdGVyIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuX2FmdGVyX25vbG9jIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuX2FmdGVyX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfZGVidWdfaW5zbl9hZnRlciAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2RlYnVnX2luc25fYWZ0ZXJfbm9sb2MgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggZW1pdF9kZWJ1Z19pbnNuX2FmdGVyX3NldGxvYyAocnR4LCBydHgsIGludCk7CitleHRlcm4gcnR4IGVtaXRfYmFycmllcl9hZnRlciAocnR4KTsKK2V4dGVybiBydHggZW1pdF9sYWJlbF9hZnRlciAocnR4LCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X25vdGVfYWZ0ZXIgKGVudW0gaW5zbl9ub3RlLCBydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2luc24gKHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfZGVidWdfaW5zbiAocnR4KTsKK2V4dGVybiBydHggZW1pdF9qdW1wX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2xhYmVsIChydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2JhcnJpZXIgKHZvaWQpOworZXh0ZXJuIHJ0eCBlbWl0X25vdGUgKGVudW0gaW5zbl9ub3RlKTsKK2V4dGVybiBydHggZW1pdF9ub3RlX2NvcHkgKHJ0eCk7CitleHRlcm4gcnR4IGdlbl9jbG9iYmVyIChydHgpOworZXh0ZXJuIHJ0eCBlbWl0X2Nsb2JiZXIgKHJ0eCk7CitleHRlcm4gcnR4IGdlbl91c2UgKHJ0eCk7CitleHRlcm4gcnR4IGVtaXRfdXNlIChydHgpOworZXh0ZXJuIHJ0eCBtYWtlX2luc25fcmF3IChydHgpOworZXh0ZXJuIHZvaWQgYWRkX2Z1bmN0aW9uX3VzYWdlX3RvIChydHgsIHJ0eCk7CitleHRlcm4gcnR4IGxhc3RfY2FsbF9pbnNuICh2b2lkKTsKK2V4dGVybiBydHggcHJldmlvdXNfaW5zbiAocnR4KTsKK2V4dGVybiBydHggbmV4dF9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBwcmV2X25vbm5vdGVfaW5zbiAocnR4KTsKK2V4dGVybiBydHggcHJldl9ub25ub3RlX2luc25fYmIgKHJ0eCk7CitleHRlcm4gcnR4IG5leHRfbm9ubm90ZV9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBuZXh0X25vbm5vdGVfaW5zbl9iYiAocnR4KTsKK2V4dGVybiBydHggcHJldl9ub25kZWJ1Z19pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBuZXh0X25vbmRlYnVnX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IHByZXZfbm9ubm90ZV9ub25kZWJ1Z19pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBuZXh0X25vbm5vdGVfbm9uZGVidWdfaW5zbiAocnR4KTsKK2V4dGVybiBydHggcHJldl9yZWFsX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IG5leHRfcmVhbF9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBwcmV2X2FjdGl2ZV9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBuZXh0X2FjdGl2ZV9pbnNuIChydHgpOworZXh0ZXJuIGludCBhY3RpdmVfaW5zbl9wIChjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBuZXh0X2xhYmVsIChydHgpOworZXh0ZXJuIHJ0eCBza2lwX2NvbnNlY3V0aXZlX2xhYmVscyAocnR4KTsKK2V4dGVybiBydHggbmV4dF9jYzBfdXNlciAocnR4KTsKK2V4dGVybiBydHggcHJldl9jYzBfc2V0dGVyIChydHgpOworCisvKiBJbiBlbWl0LXJ0bC5jICAqLworZXh0ZXJuIGludCBpbnNuX2xpbmUgKGNvbnN0X3J0eCk7CitleHRlcm4gY29uc3QgY2hhciAqIGluc25fZmlsZSAoY29uc3RfcnR4KTsKK2V4dGVybiB0cmVlIGluc25fc2NvcGUgKGNvbnN0X3J0eCk7CitleHRlcm4gbG9jYXRpb25fdCBwcm9sb2d1ZV9sb2NhdGlvbiwgZXBpbG9ndWVfbG9jYXRpb247CisKKy8qIEluIGp1bXAuYyAqLworZXh0ZXJuIGVudW0gcnR4X2NvZGUgcmV2ZXJzZV9jb25kaXRpb24gKGVudW0gcnR4X2NvZGUpOworZXh0ZXJuIGVudW0gcnR4X2NvZGUgcmV2ZXJzZV9jb25kaXRpb25fbWF5YmVfdW5vcmRlcmVkIChlbnVtIHJ0eF9jb2RlKTsKK2V4dGVybiBlbnVtIHJ0eF9jb2RlIHN3YXBfY29uZGl0aW9uIChlbnVtIHJ0eF9jb2RlKTsKK2V4dGVybiBlbnVtIHJ0eF9jb2RlIHVuc2lnbmVkX2NvbmRpdGlvbiAoZW51bSBydHhfY29kZSk7CitleHRlcm4gZW51bSBydHhfY29kZSBzaWduZWRfY29uZGl0aW9uIChlbnVtIHJ0eF9jb2RlKTsKK2V4dGVybiB2b2lkIG1hcmtfanVtcF9sYWJlbCAocnR4LCBydHgsIGludCk7CitleHRlcm4gdW5zaWduZWQgaW50IGNsZWFudXBfYmFycmllcnMgKHZvaWQpOworCisvKiBJbiBqdW1wLmMgKi8KK2V4dGVybiBydHggZGVsZXRlX3JlbGF0ZWRfaW5zbnMgKHJ0eCk7CisKKy8qIEluIHJlY29nLmMgICovCitleHRlcm4gcnR4ICpmaW5kX2NvbnN0YW50X3Rlcm1fbG9jIChydHggKik7CisKKy8qIEluIGVtaXQtcnRsLmMgICovCitleHRlcm4gcnR4IHRyeV9zcGxpdCAocnR4LCBydHgsIGludCk7CitleHRlcm4gaW50IHNwbGl0X2JyYW5jaF9wcm9iYWJpbGl0eTsKKworLyogSW4gdW5rbm93biBmaWxlICAqLworZXh0ZXJuIHJ0eCBzcGxpdF9pbnNucyAocnR4LCBydHgpOworCisvKiBJbiBzaW1wbGlmeS1ydHguYyAgKi8KK2V4dGVybiBydHggc2ltcGxpZnlfY29uc3RfdW5hcnlfb3BlcmF0aW9uIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkJICAgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwKKwkJCQkgICAgIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBydHggc2ltcGxpZnlfY29uc3RfYmluYXJ5X29wZXJhdGlvbiAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJCSAgICBydHgsIHJ0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24gKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBydHgsCisJCQkJICAgICAgcnR4KTsKK2V4dGVybiBydHggc2ltcGxpZnlfdGVybmFyeV9vcGVyYXRpb24gKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCSAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X2NvbnN0X3JlbGF0aW9uYWxfb3BlcmF0aW9uIChlbnVtIHJ0eF9jb2RlLAorCQkJCQkJZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4KTsKK2V4dGVybiBydHggc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24gKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCQkgIGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X2dlbl9iaW5hcnkgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X2dlbl91bmFyeSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwKKwkJCSAgICAgICBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X2dlbl90ZXJuYXJ5IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9nZW5fcmVsYXRpb25hbCAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICAgIGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X3N1YnJlZyAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkgICAgdW5zaWduZWQgaW50KTsKK2V4dGVybiBydHggc2ltcGxpZnlfZ2VuX3N1YnJlZyAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJdW5zaWduZWQgaW50KTsKK2V4dGVybiBydHggc2ltcGxpZnlfcmVwbGFjZV9mbl9ydHggKHJ0eCwgY29uc3RfcnR4LAorCQkJCSAgICBydHggKCpmbikgKHJ0eCwgY29uc3RfcnR4LCB2b2lkICopLCB2b2lkICopOworZXh0ZXJuIHJ0eCBzaW1wbGlmeV9yZXBsYWNlX3J0eCAocnR4LCBjb25zdF9ydHgsIHJ0eCk7CitleHRlcm4gcnR4IHNpbXBsaWZ5X3J0eCAoY29uc3RfcnR4KTsKK2V4dGVybiBydHggYXZvaWRfY29uc3RhbnRfcG9vbF9yZWZlcmVuY2UgKHJ0eCk7CitleHRlcm4gcnR4IGRlbGVnaXRpbWl6ZV9tZW1fZnJvbV9hdHRycyAocnR4KTsKK2V4dGVybiBib29sIG1vZGVfc2lnbmJpdF9wIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfcnR4KTsKK2V4dGVybiBib29sIHZhbF9zaWduYml0X3AgKGVudW0gbWFjaGluZV9tb2RlLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiBib29sIHZhbF9zaWduYml0X2tub3duX3NldF9wIChlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIGJvb2wgdmFsX3NpZ25iaXRfa25vd25fY2xlYXJfcCAoZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpOworCisvKiBJbiByZWdpbmZvLmMgICovCitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgY2hvb3NlX2hhcmRfcmVnX21vZGUgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LAorCQkJCQkgICAgICAgYm9vbCk7CisKKy8qIEluIGVtaXQtcnRsLmMgICovCitleHRlcm4gcnR4IHNldF91bmlxdWVfcmVnX25vdGUgKHJ0eCwgZW51bSByZWdfbm90ZSwgcnR4KTsKK2V4dGVybiBydHggc2V0X2RzdF9yZWdfbm90ZSAocnR4LCBlbnVtIHJlZ19ub3RlLCBydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBzZXRfaW5zbl9kZWxldGVkIChydHgpOworCisvKiBGdW5jdGlvbnMgaW4gcnRsYW5hbC5jICovCisKKy8qIFNpbmdsZSBzZXQgaXMgaW1wbGVtZW50ZWQgYXMgbWFjcm8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICAqLworI2RlZmluZSBzaW5nbGVfc2V0KEkpIChJTlNOX1AgKEkpIFwKKwkJICAgICAgID8gKEdFVF9DT0RFIChQQVRURVJOIChJKSkgPT0gU0VUIFwKKwkJCSAgPyBQQVRURVJOIChJKSA6IHNpbmdsZV9zZXRfMSAoSSkpIFwKKwkJICAgICAgIDogTlVMTF9SVFgpCisjZGVmaW5lIHNpbmdsZV9zZXRfMShJKSBzaW5nbGVfc2V0XzIgKEksIFBBVFRFUk4gKEkpKQorCisvKiBTdHJ1Y3R1cmUgdXNlZCBmb3IgcGFzc2luZyBkYXRhIHRvIFJFUExBQ0VfTEFCRUwuICAqLwordHlwZWRlZiBzdHJ1Y3QgcmVwbGFjZV9sYWJlbF9kYXRhCit7CisgIHJ0eCByMTsKKyAgcnR4IHIyOworICBib29sIHVwZGF0ZV9sYWJlbF9udXNlczsKK30gcmVwbGFjZV9sYWJlbF9kYXRhOworCitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X2FkZHJlc3NfbW9kZSAocnR4IG1lbSk7CitleHRlcm4gaW50IHJ0eF9hZGRyX2Nhbl90cmFwX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gYm9vbCBub256ZXJvX2FkZHJlc3NfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgcnR4X3Vuc3RhYmxlX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gYm9vbCBydHhfdmFyaWVzX3AgKGNvbnN0X3J0eCwgYm9vbCk7CitleHRlcm4gYm9vbCBydHhfYWRkcl92YXJpZXNfcCAoY29uc3RfcnR4LCBib29sKTsKK2V4dGVybiBydHggZ2V0X2NhbGxfcnR4X2Zyb20gKHJ0eCk7CitleHRlcm4gSE9TVF9XSURFX0lOVCBnZXRfaW50ZWdlcl90ZXJtIChjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBnZXRfcmVsYXRlZF92YWx1ZSAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIG9mZnNldF93aXRoaW5fYmxvY2tfcCAoY29uc3RfcnR4LCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiB2b2lkIHNwbGl0X2NvbnN0IChydHgsIHJ0eCAqLCBydHggKik7CitleHRlcm4gYm9vbCB1bnNpZ25lZF9yZWdfcCAocnR4KTsKK2V4dGVybiBpbnQgcmVnX21lbnRpb25lZF9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IGNvdW50X29jY3VycmVuY2VzIChjb25zdF9ydHgsIGNvbnN0X3J0eCwgaW50KTsKK2V4dGVybiBpbnQgcmVnX3JlZmVyZW5jZWRfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCByZWdfdXNlZF9iZXR3ZWVuX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCByZWdfc2V0X2JldHdlZW5fcCAoY29uc3RfcnR4LCBjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IGNvbW11dGF0aXZlX29wZXJhbmRfcHJlY2VkZW5jZSAocnR4KTsKK2V4dGVybiBib29sIHN3YXBfY29tbXV0YXRpdmVfb3BlcmFuZHNfcCAocnR4LCBydHgpOworZXh0ZXJuIGludCBtb2RpZmllZF9iZXR3ZWVuX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBub19sYWJlbHNfYmV0d2Vlbl9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IG1vZGlmaWVkX2luX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgcmVnX3NldF9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IHNpbmdsZV9zZXRfMiAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBtdWx0aXBsZV9zZXRzIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBzZXRfbm9vcF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBub29wX21vdmVfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBydHggZmluZF9sYXN0X3ZhbHVlIChydHgsIHJ0eCAqLCBydHgsIGludCk7CitleHRlcm4gaW50IHJlZmVyc190b19yZWdub19wICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgY29uc3RfcnR4LCBydHggKik7CitleHRlcm4gaW50IHJlZ19vdmVybGFwX21lbnRpb25lZF9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gY29uc3RfcnR4IHNldF9vZiAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIHZvaWQgcmVjb3JkX2hhcmRfcmVnX3NldHMgKHJ0eCwgY29uc3RfcnR4LCB2b2lkICopOworZXh0ZXJuIHZvaWQgcmVjb3JkX2hhcmRfcmVnX3VzZXMgKHJ0eCAqLCB2b2lkICopOworI2lmZGVmIEhBUkRfQ09OU1QKK2V4dGVybiB2b2lkIGZpbmRfYWxsX2hhcmRfcmVnX3NldHMgKGNvbnN0X3J0eCwgSEFSRF9SRUdfU0VUICopOworI2VuZGlmCitleHRlcm4gdm9pZCBub3RlX3N0b3JlcyAoY29uc3RfcnR4LCB2b2lkICgqKSAocnR4LCBjb25zdF9ydHgsIHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gdm9pZCBub3RlX3VzZXMgKHJ0eCAqLCB2b2lkICgqKSAocnR4ICosIHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gaW50IGRlYWRfb3Jfc2V0X3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgZGVhZF9vcl9zZXRfcmVnbm9fcCAoY29uc3RfcnR4LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHJ0eCBmaW5kX3JlZ19ub3RlIChjb25zdF9ydHgsIGVudW0gcmVnX25vdGUsIGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGZpbmRfcmVnbm9fbm90ZSAoY29uc3RfcnR4LCBlbnVtIHJlZ19ub3RlLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHJ0eCBmaW5kX3JlZ19lcXVhbF9lcXVpdl9ub3RlIChjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBmaW5kX2NvbnN0YW50X3NyYyAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgZmluZF9yZWdfZnVzYWdlIChjb25zdF9ydHgsIGVudW0gcnR4X2NvZGUsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IGZpbmRfcmVnbm9fZnVzYWdlIChjb25zdF9ydHgsIGVudW0gcnR4X2NvZGUsIHVuc2lnbmVkIGludCk7CitleHRlcm4gcnR4IGFsbG9jX3JlZ19ub3RlIChlbnVtIHJlZ19ub3RlLCBydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBhZGRfcmVnX25vdGUgKHJ0eCwgZW51bSByZWdfbm90ZSwgcnR4KTsKK2V4dGVybiB2b2lkIHJlbW92ZV9ub3RlIChydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gdm9pZCByZW1vdmVfcmVnX2VxdWFsX2VxdWl2X25vdGVzIChydHgpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX3JlZ19lcXVhbF9lcXVpdl9ub3Rlc19mb3JfcmVnbm8gKHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IHNpZGVfZWZmZWN0c19wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCB2b2xhdGlsZV9yZWZzX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHZvbGF0aWxlX2luc25fcCAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgbWF5X3RyYXBfcF8xIChjb25zdF9ydHgsIHVuc2lnbmVkKTsKK2V4dGVybiBpbnQgbWF5X3RyYXBfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgbWF5X3RyYXBfb3JfZmF1bHRfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIGNhbl90aHJvd19pbnRlcm5hbCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIGNhbl90aHJvd19leHRlcm5hbCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIGluc25fY291bGRfdGhyb3dfcCAoY29uc3RfcnR4KTsKK2V4dGVybiBib29sIGluc25fbm90aHJvd19wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgY2FuX25vbmxvY2FsX2dvdG8gKGNvbnN0X3J0eCk7CitleHRlcm4gdm9pZCBjb3B5X3JlZ19laF9yZWdpb25fbm90ZV9mb3J3YXJkIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIGNvcHlfcmVnX2VoX3JlZ2lvbl9ub3RlX2JhY2t3YXJkKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIGludCBpbmVxdWFsaXR5X2NvbXBhcmlzb25zX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IHJlcGxhY2VfcnR4IChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBpbnQgcmVwbGFjZV9sYWJlbCAocnR4ICosIHZvaWQgKik7CitleHRlcm4gaW50IHJ0eF9yZWZlcmVuY2VkX3AgKHJ0eCwgcnR4KTsKK2V4dGVybiBib29sIHRhYmxlanVtcF9wIChjb25zdF9ydHgsIHJ0eCAqLCBydHggKik7CitleHRlcm4gaW50IGNvbXB1dGVkX2p1bXBfcCAoY29uc3RfcnR4KTsKKwordHlwZWRlZiBpbnQgKCpydHhfZnVuY3Rpb24pIChydHggKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfcnR4IChydHggKiwgcnR4X2Z1bmN0aW9uLCB2b2lkICopOworCisvKiBDYWxsYmFjayBmb3IgZm9yX2VhY2hfaW5jX2RlYywgdG8gcHJvY2VzcyB0aGUgYXV0b2luYyBvcGVyYXRpb24gT1AKKyAgIHdpdGhpbiBNRU0gdGhhdCBzZXRzIERFU1QgdG8gU1JDICsgU1JDT0ZGLCBvciBTUkMgaWYgU1JDT0ZGIGlzCisgICBOVUxMLiAgVGhlIGNhbGxiYWNrIGlzIHBhc3NlZCB0aGUgc2FtZSBvcGFxdWUgQVJHIHBhc3NlZCB0bworICAgZm9yX2VhY2hfaW5jX2RlYy4gIFJldHVybiB6ZXJvIHRvIGNvbnRpbnVlIGxvb2tpbmcgZm9yIG90aGVyCisgICBhdXRvaW5jIG9wZXJhdGlvbnMsIC0xIHRvIHNraXAgT1AncyBvcGVyYW5kcywgYW5kIGFueSBvdGhlciB2YWx1ZQorICAgdG8gaW50ZXJydXB0IHRoZSB0cmF2ZXJzYWwgYW5kIHJldHVybiB0aGF0IHZhbHVlIHRvIHRoZSBjYWxsZXIgb2YKKyAgIGZvcl9lYWNoX2luY19kZWMuICAqLwordHlwZWRlZiBpbnQgKCpmb3JfZWFjaF9pbmNfZGVjX2ZuKSAocnR4IG1lbSwgcnR4IG9wLCBydHggZGVzdCwgcnR4IHNyYywKKwkJCQkgICAgcnR4IHNyY29mZiwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfaW5jX2RlYyAocnR4ICosIGZvcl9lYWNoX2luY19kZWNfZm4sIHZvaWQgKmFyZyk7CisKK3R5cGVkZWYgaW50ICgqcnR4X2VxdWFsX3BfY2FsbGJhY2tfZnVuY3Rpb24pIChjb25zdF9ydHggKiwgY29uc3RfcnR4ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnR4ICosIHJ0eCAqKTsKK2V4dGVybiBpbnQgcnR4X2VxdWFsX3BfY2IgKGNvbnN0X3J0eCwgY29uc3RfcnR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcnR4X2VxdWFsX3BfY2FsbGJhY2tfZnVuY3Rpb24pOworCit0eXBlZGVmIGludCAoKmhhc2hfcnR4X2NhbGxiYWNrX2Z1bmN0aW9uKSAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBtYWNoaW5lX21vZGUgKik7CitleHRlcm4gdW5zaWduZWQgaGFzaF9ydHhfY2IgKGNvbnN0X3J0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCAqLCBpbnQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCwgaGFzaF9ydHhfY2FsbGJhY2tfZnVuY3Rpb24pOworCitleHRlcm4gcnR4IHJlZ25vX3VzZV9pbiAodW5zaWduZWQgaW50LCBydHgpOworZXh0ZXJuIGludCBhdXRvX2luY19wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBpbl9leHByX2xpc3RfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX25vZGVfZnJvbV9leHByX2xpc3QgKGNvbnN0X3J0eCwgcnR4ICopOworZXh0ZXJuIGludCBsb2NfbWVudGlvbmVkX2luX3AgKHJ0eCAqLCBjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBmaW5kX2ZpcnN0X3BhcmFtZXRlcl9sb2FkIChydHgsIHJ0eCk7CitleHRlcm4gYm9vbCBrZWVwX3dpdGhfY2FsbF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgbGFiZWxfaXNfanVtcF90YXJnZXRfcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGludCBpbnNuX3J0eF9jb3N0IChydHgsIGJvb2wpOworCisvKiBHaXZlbiBhbiBpbnNuIGFuZCBjb25kaXRpb24sIHJldHVybiBhIGNhbm9uaWNhbCBkZXNjcmlwdGlvbiBvZgorICAgdGhlIHRlc3QgYmVpbmcgbWFkZS4gICovCitleHRlcm4gcnR4IGNhbm9uaWNhbGl6ZV9jb25kaXRpb24gKHJ0eCwgcnR4LCBpbnQsIHJ0eCAqLCBydHgsIGludCwgaW50KTsKKworLyogR2l2ZW4gYSBKVU1QX0lOU04sIHJldHVybiBhIGNhbm9uaWNhbCBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdAorICAgYmVpbmcgbWFkZS4gICovCitleHRlcm4gcnR4IGdldF9jb25kaXRpb24gKHJ0eCwgcnR4ICosIGludCwgaW50KTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgYSBzdWJyZWcgb2YgYSBoYXJkIHJlZ2lzdGVyLiAgKi8KK3N0cnVjdCBzdWJyZWdfaW5mbworeworICAvKiBPZmZzZXQgb2YgZmlyc3QgaGFyZCByZWdpc3RlciBpbnZvbHZlZCBpbiB0aGUgc3VicmVnLiAgKi8KKyAgaW50IG9mZnNldDsKKyAgLyogTnVtYmVyIG9mIGhhcmQgcmVnaXN0ZXJzIGludm9sdmVkIGluIHRoZSBzdWJyZWcuICAqLworICBpbnQgbnJlZ3M7CisgIC8qIFdoZXRoZXIgdGhpcyBzdWJyZWcgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgaGFyZCByZWcgd2l0aCB0aGUgbmV3CisgICAgIG1vZGUuICAqLworICBib29sIHJlcHJlc2VudGFibGVfcDsKK307CisKK2V4dGVybiB2b2lkIHN1YnJlZ19nZXRfaW5mbyAodW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgICAgdW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCSAgICAgc3RydWN0IHN1YnJlZ19pbmZvICopOworCisvKiBsaXN0cy5jICovCisKK2V4dGVybiB2b2lkIGZyZWVfRVhQUl9MSVNUX2xpc3QgKHJ0eCAqKTsKK2V4dGVybiB2b2lkIGZyZWVfSU5TTl9MSVNUX2xpc3QgKHJ0eCAqKTsKK2V4dGVybiB2b2lkIGZyZWVfRVhQUl9MSVNUX25vZGUgKHJ0eCk7CitleHRlcm4gdm9pZCBmcmVlX0lOU05fTElTVF9ub2RlIChydHgpOworZXh0ZXJuIHJ0eCBhbGxvY19JTlNOX0xJU1QgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggY29weV9JTlNOX0xJU1QgKHJ0eCk7CitleHRlcm4gcnR4IGNvbmNhdF9JTlNOX0xJU1QgKHJ0eCwgcnR4KTsKK2V4dGVybiBydHggYWxsb2NfRVhQUl9MSVNUIChpbnQsIHJ0eCwgcnR4KTsKK2V4dGVybiB2b2lkIHJlbW92ZV9mcmVlX0lOU05fTElTVF9lbGVtIChydHgsIHJ0eCAqKTsKK2V4dGVybiBydHggcmVtb3ZlX2xpc3RfZWxlbSAocnR4LCBydHggKik7CitleHRlcm4gcnR4IHJlbW92ZV9mcmVlX0lOU05fTElTVF9ub2RlIChydHggKik7CitleHRlcm4gcnR4IHJlbW92ZV9mcmVlX0VYUFJfTElTVF9ub2RlIChydHggKik7CisKKworLyogcmVnaW5mby5jICovCisKKy8qIFJlc2l6ZSByZWcgaW5mby4gICovCitleHRlcm4gYm9vbCByZXNpemVfcmVnX2luZm8gKHZvaWQpOworLyogRnJlZSB1cCByZWdpc3RlciBpbmZvIG1lbW9yeS4gICovCitleHRlcm4gdm9pZCBmcmVlX3JlZ19pbmZvICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfc3VicmVnc19vZl9tb2RlICh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9zdWJyZWdzX29mX21vZGUgKHZvaWQpOworCisvKiByZWNvZy5jICovCitleHRlcm4gcnR4IGV4dHJhY3RfYXNtX29wZXJhbmRzIChydHgpOworZXh0ZXJuIGludCBhc21fbm9wZXJhbmRzIChjb25zdF9ydHgpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmRlY29kZV9hc21fb3BlcmFuZHMgKHJ0eCwgcnR4ICosIHJ0eCAqKiwgY29uc3QgY2hhciAqKiwKKwkJCQkJZW51bSBtYWNoaW5lX21vZGUgKiwgbG9jYXRpb25fdCAqKTsKKworZXh0ZXJuIGVudW0gcmVnX2NsYXNzIHJlZ19wcmVmZXJyZWRfY2xhc3MgKGludCk7CitleHRlcm4gZW51bSByZWdfY2xhc3MgcmVnX2FsdGVybmF0ZV9jbGFzcyAoaW50KTsKK2V4dGVybiBlbnVtIHJlZ19jbGFzcyByZWdfYWxsb2Nub19jbGFzcyAoaW50KTsKK2V4dGVybiB2b2lkIHNldHVwX3JlZ19jbGFzc2VzIChpbnQsIGVudW0gcmVnX2NsYXNzLCBlbnVtIHJlZ19jbGFzcywKKwkJCSAgICAgICBlbnVtIHJlZ19jbGFzcyk7CisKK2V4dGVybiB2b2lkIHNwbGl0X2FsbF9pbnNucyAodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IHNwbGl0X2FsbF9pbnNuc19ub2Zsb3cgKHZvaWQpOworCisjZGVmaW5lIE1BWF9TQVZFRF9DT05TVF9JTlQgNjQKK2V4dGVybiBHVFkoKCkpIHJ0eCBjb25zdF9pbnRfcnR4W01BWF9TQVZFRF9DT05TVF9JTlQgKiAyICsgMV07CisKKyNkZWZpbmUgY29uc3QwX3J0eAkoY29uc3RfaW50X3J0eFtNQVhfU0FWRURfQ09OU1RfSU5UXSkKKyNkZWZpbmUgY29uc3QxX3J0eAkoY29uc3RfaW50X3J0eFtNQVhfU0FWRURfQ09OU1RfSU5UKzFdKQorI2RlZmluZSBjb25zdDJfcnR4CShjb25zdF9pbnRfcnR4W01BWF9TQVZFRF9DT05TVF9JTlQrMl0pCisjZGVmaW5lIGNvbnN0bTFfcnR4CShjb25zdF9pbnRfcnR4W01BWF9TQVZFRF9DT05TVF9JTlQtMV0pCitleHRlcm4gR1RZKCgpKSBydHggY29uc3RfdHJ1ZV9ydHg7CisKK2V4dGVybiBHVFkoKCkpIHJ0eCBjb25zdF90aW55X3J0eFs0XVsoaW50KSBNQVhfTUFDSElORV9NT0RFXTsKKworLyogUmV0dXJucyBhIGNvbnN0YW50IDAgcnR4IGluIG1vZGUgTU9ERS4gIEludGVnZXIgbW9kZXMgYXJlIHRyZWF0ZWQgdGhlCisgICBzYW1lIGFzIFZPSURtb2RlLiAgKi8KKworI2RlZmluZSBDT05TVDBfUlRYKE1PREUpIChjb25zdF90aW55X3J0eFswXVsoaW50KSAoTU9ERSldKQorCisvKiBMaWtld2lzZSwgZm9yIHRoZSBjb25zdGFudHMgMSBhbmQgMiBhbmQgLTEuICAqLworCisjZGVmaW5lIENPTlNUMV9SVFgoTU9ERSkgKGNvbnN0X3RpbnlfcnR4WzFdWyhpbnQpIChNT0RFKV0pCisjZGVmaW5lIENPTlNUMl9SVFgoTU9ERSkgKGNvbnN0X3RpbnlfcnR4WzJdWyhpbnQpIChNT0RFKV0pCisjZGVmaW5lIENPTlNUTTFfUlRYKE1PREUpIChjb25zdF90aW55X3J0eFszXVsoaW50KSAoTU9ERSldKQorCitleHRlcm4gR1RZKCgpKSBydHggcGNfcnR4OworZXh0ZXJuIEdUWSgoKSkgcnR4IGNjMF9ydHg7CitleHRlcm4gR1RZKCgpKSBydHggcmV0X3J0eDsKK2V4dGVybiBHVFkoKCkpIHJ0eCBzaW1wbGVfcmV0dXJuX3J0eDsKKworLyogSWYgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSBpcyBkZWZpbmVkLCB0aGVuIGEgc3BlY2lhbCBkdW1teSByZWcKKyAgIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmcmFtZSBwb2ludGVyLiAgVGhpcyBpcyBiZWNhdXNlIHRoZQorICAgaGFyZCBmcmFtZSBwb2ludGVyIGFuZCB0aGUgYXV0b21hdGljIHZhcmlhYmxlcyBhcmUgc2VwYXJhdGVkIGJ5IGFuIGFtb3VudAorICAgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCB1bnRpbCBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uLiAgV2UgY2FuIGFzc3VtZQorICAgdGhhdCBpbiB0aGlzIGNhc2UgRUxJTUlOQUJMRV9SRUdTIHdpbGwgYmUgZGVmaW5lZCwgb25lIGFjdGlvbiBvZiB3aGljaAorICAgd2lsbCBiZSB0byBlbGltaW5hdGUgRlJBTUVfUE9JTlRFUl9SRUdOVU0gaW50byBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNLiAgKi8KKyNpZm5kZWYgSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTQorI2RlZmluZSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIEZSQU1FX1BPSU5URVJfUkVHTlVNCisjZW5kaWYKKworI2lmbmRlZiBIQVJEX0ZSQU1FX1BPSU5URVJfSVNfRlJBTUVfUE9JTlRFUgorI2RlZmluZSBIQVJEX0ZSQU1FX1BPSU5URVJfSVNfRlJBTUVfUE9JTlRFUiBcCisgIChIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNID09IEZSQU1FX1BPSU5URVJfUkVHTlVNKQorI2VuZGlmCisKKyNpZm5kZWYgSEFSRF9GUkFNRV9QT0lOVEVSX0lTX0FSR19QT0lOVEVSCisjZGVmaW5lIEhBUkRfRlJBTUVfUE9JTlRFUl9JU19BUkdfUE9JTlRFUiBcCisgIChIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNID09IEFSR19QT0lOVEVSX1JFR05VTSkKKyNlbmRpZgorCisvKiBJbmRleCBsYWJlbHMgZm9yIGdsb2JhbF9ydGwuICAqLworZW51bSBnbG9iYWxfcnRsX2luZGV4Cit7CisgIEdSX1NUQUNLX1BPSU5URVIsCisgIEdSX0ZSQU1FX1BPSU5URVIsCisvKiBGb3IgcmVnaXN0ZXIgZWxpbWluYXRpb24gdG8gd29yayBwcm9wZXJseSB0aGVzZSBoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4LAorICAgZnJhbWVfcG9pbnRlcl9ydHgsIGFuZCBhcmdfcG9pbnRlcl9ydHggbXVzdCBiZSB0aGUgc2FtZSBpZiB0aGV5IHJlZmVyIHRvCisgICB0aGUgc2FtZSByZWdpc3Rlci4gICovCisjaWYgRlJBTUVfUE9JTlRFUl9SRUdOVU0gPT0gQVJHX1BPSU5URVJfUkVHTlVNCisgIEdSX0FSR19QT0lOVEVSID0gR1JfRlJBTUVfUE9JTlRFUiwKKyNlbmRpZgorI2lmIEhBUkRfRlJBTUVfUE9JTlRFUl9JU19GUkFNRV9QT0lOVEVSCisgIEdSX0hBUkRfRlJBTUVfUE9JTlRFUiA9IEdSX0ZSQU1FX1BPSU5URVIsCisjZWxzZQorICBHUl9IQVJEX0ZSQU1FX1BPSU5URVIsCisjZW5kaWYKKyNpZiBGUkFNRV9QT0lOVEVSX1JFR05VTSAhPSBBUkdfUE9JTlRFUl9SRUdOVU0KKyNpZiBIQVJEX0ZSQU1FX1BPSU5URVJfSVNfQVJHX1BPSU5URVIKKyAgR1JfQVJHX1BPSU5URVIgPSBHUl9IQVJEX0ZSQU1FX1BPSU5URVIsCisjZWxzZQorICBHUl9BUkdfUE9JTlRFUiwKKyNlbmRpZgorI2VuZGlmCisgIEdSX1ZJUlRVQUxfSU5DT01JTkdfQVJHUywKKyAgR1JfVklSVFVBTF9TVEFDS19BUkdTLAorICBHUl9WSVJUVUFMX1NUQUNLX0RZTkFNSUMsCisgIEdSX1ZJUlRVQUxfT1VUR09JTkdfQVJHUywKKyAgR1JfVklSVFVBTF9DRkEsCisgIEdSX1ZJUlRVQUxfUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZLAorCisgIEdSX01BWAorfTsKKworLyogVGFyZ2V0LWRlcGVuZGVudCBnbG9iYWxzLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHRhcmdldF9ydGwgeworICAvKiBBbGwgcmVmZXJlbmNlcyB0byB0aGUgaGFyZCByZWdpc3RlcnMgaW4gZ2xvYmFsX3J0bF9pbmRleCBnbyB0aHJvdWdoCisgICAgIHRoZXNlIHVuaXF1ZSBydGwgb2JqZWN0cy4gIE9uIG1hY2hpbmVzIHdoZXJlIHRoZSBmcmFtZS1wb2ludGVyIGFuZAorICAgICBhcmctcG9pbnRlciBhcmUgdGhlIHNhbWUgcmVnaXN0ZXIsIHRoZXkgdXNlIHRoZSBzYW1lIHVuaXF1ZSBvYmplY3QuCisKKyAgICAgQWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgb3RoZXIgcnRsIG9iamVjdHMgd2hpY2ggdXNlZCB0byBiZSBwc2V1ZG8tcmVncworICAgICBtYXkgYmUgY2xvYmJlcmVkIHRvIHJlZmVyIHRvIHRoZSBmcmFtZS1wb2ludGVyIHJlZ2lzdGVyLgorICAgICBCdXQgcmVmZXJlbmNlcyB0aGF0IHdlcmUgb3JpZ2luYWxseSB0byB0aGUgZnJhbWUtcG9pbnRlciBjYW4gYmUKKyAgICAgZGlzdGluZ3Vpc2hlZCBmcm9tIHRoZSBvdGhlcnMgYmVjYXVzZSB0aGV5IGNvbnRhaW4gZnJhbWVfcG9pbnRlcl9ydHguCisKKyAgICAgV2hlbiB0byB1c2UgZnJhbWVfcG9pbnRlcl9ydHggYW5kIGhhcmRfZnJhbWVfcG9pbnRlcl9ydHggaXMgYSBsaXR0bGUKKyAgICAgdHJpY2t5OiB1bnRpbCByZWdpc3RlciBlbGltaW5hdGlvbiBoYXMgdGFrZW4gcGxhY2UgaGFyZF9mcmFtZV9wb2ludGVyX3J0eAorICAgICBzaG91bGQgYmUgdXNlZCBpZiBpdCBpcyBiZWluZyBzZXQsIGFuZCBmcmFtZV9wb2ludGVyX3J0eCBvdGhlcndpc2UuICBBZnRlcgorICAgICByZWdpc3RlciBlbGltaW5hdGlvbiBoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4IHNob3VsZCBhbHdheXMgYmUgdXNlZC4KKyAgICAgT24gbWFjaGluZXMgd2hlcmUgdGhlIHR3byByZWdpc3RlcnMgYXJlIHNhbWUgKG1vc3QpIHRoZW4gdGhlc2UgYXJlIHRoZQorICAgICBzYW1lLiAgKi8KKyAgcnR4IHhfZ2xvYmFsX3J0bFtHUl9NQVhdOworCisgIC8qIEEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIChSRUc6UG1vZGUgUElDX09GRlNFVF9UQUJMRV9SRUdOVU0pLiAgKi8KKyAgcnR4IHhfcGljX29mZnNldF90YWJsZV9ydHg7CisKKyAgLyogQSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgKFJFRzpQbW9kZSBSRVRVUk5fQUREUkVTU19QT0lOVEVSX1JFR05VTSkuCisgICAgIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgX19idWlsdGluX3JldHVybl9hZGRyZXNzIGZvciBzb21lIG1hY2hpbmVzOworICAgICBzZWUgZm9yIGluc3RhbmNlIHRoZSBNSVBTIHBvcnQuICAqLworICBydHggeF9yZXR1cm5fYWRkcmVzc19wb2ludGVyX3J0eDsKKworICAvKiBDb21tb25seSB1c2VkIFJUTCBmb3IgaGFyZCByZWdpc3RlcnMuICBUaGVzZSBvYmplY3RzIGFyZSBub3QKKyAgICAgbmVjZXNzYXJpbHkgdW5pcXVlLCBzbyB3ZSBhbGxvY2F0ZSB0aGVtIHNlcGFyYXRlbHkgZnJvbSBnbG9iYWxfcnRsLgorICAgICBUaGV5IGFyZSBpbml0aWFsaXplZCBvbmNlIHBlciBjb21waWxhdGlvbiB1bml0LCB0aGVuIGNvcGllZCBpbnRvCisgICAgIHJlZ25vX3JlZ19ydHggYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGZ1bmN0aW9uLiAgKi8KKyAgcnR4IHhfaW5pdGlhbF9yZWdub19yZWdfcnR4W0ZJUlNUX1BTRVVET19SRUdJU1RFUl07CisKKyAgLyogQSBzYW1wbGUgKG1lbTpNIHN0YWNrX3BvaW50ZXJfcnR4KSBydHggZm9yIGVhY2ggbW9kZSBNLiAgKi8KKyAgcnR4IHhfdG9wX29mX3N0YWNrW01BWF9NQUNISU5FX01PREVdOworCisgIC8qIFN0YXRpYyBodW5rcyBvZiBSVEwgdXNlZCBieSB0aGUgYWxpYXNpbmcgY29kZTsgdGhlc2UgYXJlIHRyZWF0ZWQKKyAgICAgYXMgcGVyc2lzdGVudCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBSVEwgYWxsb2NhdGlvbnMuICAqLworICBydHggeF9zdGF0aWNfcmVnX2Jhc2VfdmFsdWVbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKKworICAvKiBUaGUgZGVmYXVsdCBtZW1vcnkgYXR0cmlidXRlcyBmb3IgZWFjaCBtb2RlLiAgKi8KKyAgc3RydWN0IG1lbV9hdHRycyAqeF9tb2RlX21lbV9hdHRyc1soaW50KSBNQVhfTUFDSElORV9NT0RFXTsKK307CisKK2V4dGVybiBHVFkoKCkpIHN0cnVjdCB0YXJnZXRfcnRsIGRlZmF1bHRfdGFyZ2V0X3J0bDsKKyNpZiBTV0lUQ0hBQkxFX1RBUkdFVAorZXh0ZXJuIHN0cnVjdCB0YXJnZXRfcnRsICp0aGlzX3RhcmdldF9ydGw7CisjZWxzZQorI2RlZmluZSB0aGlzX3RhcmdldF9ydGwgKCZkZWZhdWx0X3RhcmdldF9ydGwpCisjZW5kaWYKKworI2RlZmluZSBnbG9iYWxfcnRsCQkJCVwKKyAgKHRoaXNfdGFyZ2V0X3J0bC0+eF9nbG9iYWxfcnRsKQorI2RlZmluZSBwaWNfb2Zmc2V0X3RhYmxlX3J0eCBcCisgICh0aGlzX3RhcmdldF9ydGwtPnhfcGljX29mZnNldF90YWJsZV9ydHgpCisjZGVmaW5lIHJldHVybl9hZGRyZXNzX3BvaW50ZXJfcnR4IFwKKyAgKHRoaXNfdGFyZ2V0X3J0bC0+eF9yZXR1cm5fYWRkcmVzc19wb2ludGVyX3J0eCkKKyNkZWZpbmUgdG9wX29mX3N0YWNrIFwKKyAgKHRoaXNfdGFyZ2V0X3J0bC0+eF90b3Bfb2Zfc3RhY2spCisjZGVmaW5lIG1vZGVfbWVtX2F0dHJzIFwKKyAgKHRoaXNfdGFyZ2V0X3J0bC0+eF9tb2RlX21lbV9hdHRycykKKworLyogQWxsIHJlZmVyZW5jZXMgdG8gY2VydGFpbiBoYXJkIHJlZ3MsIGV4Y2VwdCB0aG9zZSBjcmVhdGVkCisgICBieSBhbGxvY2F0aW5nIHBzZXVkbyByZWdzIGludG8gdGhlbSAod2hlbiB0aGF0J3MgcG9zc2libGUpLAorICAgZ28gdGhyb3VnaCB0aGVzZSB1bmlxdWUgcnR4IG9iamVjdHMuICAqLworI2RlZmluZSBzdGFja19wb2ludGVyX3J0eCAgICAgICAoZ2xvYmFsX3J0bFtHUl9TVEFDS19QT0lOVEVSXSkKKyNkZWZpbmUgZnJhbWVfcG9pbnRlcl9ydHggICAgICAgKGdsb2JhbF9ydGxbR1JfRlJBTUVfUE9JTlRFUl0pCisjZGVmaW5lIGhhcmRfZnJhbWVfcG9pbnRlcl9ydHgJKGdsb2JhbF9ydGxbR1JfSEFSRF9GUkFNRV9QT0lOVEVSXSkKKyNkZWZpbmUgYXJnX3BvaW50ZXJfcnR4CQkoZ2xvYmFsX3J0bFtHUl9BUkdfUE9JTlRFUl0pCisKKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKy8qIFJldHVybiB0aGUgYXR0cmlidXRlcyBvZiBhIE1FTSBydHguICAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2F0dHJzICoKK2dldF9tZW1fYXR0cnMgKGNvbnN0X3J0eCB4KQoreworICBzdHJ1Y3QgbWVtX2F0dHJzICphdHRyczsKKworICBhdHRycyA9IE1FTV9BVFRSUyAoeCk7CisgIGlmICghYXR0cnMpCisgICAgYXR0cnMgPSBtb2RlX21lbV9hdHRyc1soaW50KSBHRVRfTU9ERSAoeCldOworICByZXR1cm4gYXR0cnM7Cit9CisjZW5kaWYKKworLyogSW5jbHVkZSB0aGUgUlRMIGdlbmVyYXRpb24gZnVuY3Rpb25zLiAgKi8KKworI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorI2luY2x1ZGUgImdlbnJ0bC5oIgorI3VuZGVmIGdlbl9ydHhfQVNNX0lOUFVUCisjZGVmaW5lIGdlbl9ydHhfQVNNX0lOUFVUKE1PREUsIEFSRzApCQkJCVwKKyAgZ2VuX3J0eF9mbXRfc2kgKEFTTV9JTlBVVCwgKE1PREUpLCAoQVJHMCksIDApCisjZGVmaW5lIGdlbl9ydHhfQVNNX0lOUFVUX2xvYyhNT0RFLCBBUkcwLCBMT0MpCQkJXAorICBnZW5fcnR4X2ZtdF9zaSAoQVNNX0lOUFVULCAoTU9ERSksIChBUkcwKSwgKExPQykpCisjZW5kaWYKKworLyogVGhlcmUgYXJlIHNvbWUgUlRMIGNvZGVzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGF0dGVudGlvbjsgdGhlCisgICBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBpbmNsdWRlZCBhYm92ZSBkbyB0aGUgcmF3IGhhbmRsaW5nLiAgSWYgeW91CisgICBhZGQgdG8gdGhpcyBsaXN0LCBtb2RpZnkgc3BlY2lhbF9ydHggaW4gZ2VuZ2VucnRsLmMgYXMgd2VsbC4gICovCisKK2V4dGVybiBydHggZ2VuX3J0eF9DT05TVF9JTlQgKGVudW0gbWFjaGluZV9tb2RlLCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiBydHggZ2VuX3J0eF9DT05TVF9WRUNUT1IgKGVudW0gbWFjaGluZV9tb2RlLCBydHZlYyk7CitleHRlcm4gcnR4IGdlbl9yYXdfUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKK2V4dGVybiBydHggZ2VuX3J0eF9SRUcgKGVudW0gbWFjaGluZV9tb2RlLCB1bnNpZ25lZCk7CitleHRlcm4gcnR4IGdlbl9ydHhfU1VCUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBpbnQpOworZXh0ZXJuIHJ0eCBnZW5fcnR4X01FTSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CisKKyNkZWZpbmUgR0VOX0lOVChOKSAgZ2VuX3J0eF9DT05TVF9JTlQgKFZPSURtb2RlLCAoTikpCisKKy8qIFZpcnR1YWwgcmVnaXN0ZXJzIGFyZSB1c2VkIGR1cmluZyBSVEwgZ2VuZXJhdGlvbiB0byByZWZlciB0byBsb2NhdGlvbnMgaW50bworICAgdGhlIHN0YWNrIGZyYW1lIHdoZW4gdGhlIGFjdHVhbCBsb2NhdGlvbiBpc24ndCBrbm93biB1bnRpbCBSVEwgZ2VuZXJhdGlvbgorICAgaXMgY29tcGxldGUuICBUaGUgcm91dGluZSBpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3MgcmVwbGFjZXMgdGhlc2Ugd2l0aAorICAgdGhlIHByb3BlciB2YWx1ZSwgd2hpY2ggaXMgbm9ybWFsbHkge2ZyYW1lLGFyZyxzdGFja31fcG9pbnRlcl9ydHggcGx1cworICAgYSBjb25zdGFudC4gICovCisKKyNkZWZpbmUgRklSU1RfVklSVFVBTF9SRUdJU1RFUgkoRklSU1RfUFNFVURPX1JFR0lTVEVSKQorCisvKiBUaGlzIHBvaW50cyB0byB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgaW5jb21pbmcgYXJndW1lbnRzIHBhc3NlZCBvbiB0aGUgc3RhY2ssCisgICBlaXRoZXIgYnkgdGhlIGNhbGxlciBvciBieSB0aGUgY2FsbGVlIHdoZW4gcHJldGVuZGluZyBpdCB3YXMgcGFzc2VkIGJ5IHRoZQorICAgY2FsbGVyLiAgKi8KKworI2RlZmluZSB2aXJ0dWFsX2luY29taW5nX2FyZ3NfcnR4ICAgICAgIChnbG9iYWxfcnRsW0dSX1ZJUlRVQUxfSU5DT01JTkdfQVJHU10pCisKKyNkZWZpbmUgVklSVFVBTF9JTkNPTUlOR19BUkdTX1JFR05VTQkoRklSU1RfVklSVFVBTF9SRUdJU1RFUikKKworLyogSWYgRlJBTUVfR1JPV1NfRE9XTldBUkQsIHRoaXMgcG9pbnRzIHRvIGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBmaXJzdAorICAgdmFyaWFibGUgb24gdGhlIHN0YWNrLiAgT3RoZXJ3aXNlLCBpdCBwb2ludHMgdG8gdGhlIGZpcnN0IHZhcmlhYmxlIG9uCisgICB0aGUgc3RhY2suICAqLworCisjZGVmaW5lIHZpcnR1YWxfc3RhY2tfdmFyc19ydHgJICAgICAgICAoZ2xvYmFsX3J0bFtHUl9WSVJUVUFMX1NUQUNLX0FSR1NdKQorCisjZGVmaW5lIFZJUlRVQUxfU1RBQ0tfVkFSU19SRUdOVU0JKChGSVJTVF9WSVJUVUFMX1JFR0lTVEVSKSArIDEpCisKKy8qIFRoaXMgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiBkeW5hbWljYWxseS1hbGxvY2F0ZWQgbWVtb3J5IG9uIHRoZSBzdGFjaworICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHN0YWNrIHBvaW50ZXIgaGFzIGJlZW4gYWRqdXN0ZWQgYnkgdGhlIGFtb3VudAorICAgZGVzaXJlZC4gICovCisKKyNkZWZpbmUgdmlydHVhbF9zdGFja19keW5hbWljX3J0eAkoZ2xvYmFsX3J0bFtHUl9WSVJUVUFMX1NUQUNLX0RZTkFNSUNdKQorCisjZGVmaW5lIFZJUlRVQUxfU1RBQ0tfRFlOQU1JQ19SRUdOVU0JKChGSVJTVF9WSVJUVUFMX1JFR0lTVEVSKSArIDIpCisKKy8qIFRoaXMgcG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBpbiB0aGUgc3RhY2sgYXQgd2hpY2ggb3V0Z29pbmcgYXJndW1lbnRzIHNob3VsZAorICAgYmUgd3JpdHRlbiB3aGVuIHRoZSBzdGFjayBpcyBwcmUtcHVzaGVkIChhcmd1bWVudHMgcHVzaGVkIHVzaW5nIHB1c2gKKyAgIGluc25zIGFsd2F5cyB1c2Ugc3ApLiAgKi8KKworI2RlZmluZSB2aXJ0dWFsX291dGdvaW5nX2FyZ3NfcnR4CShnbG9iYWxfcnRsW0dSX1ZJUlRVQUxfT1VUR09JTkdfQVJHU10pCisKKyNkZWZpbmUgVklSVFVBTF9PVVRHT0lOR19BUkdTX1JFR05VTQkoKEZJUlNUX1ZJUlRVQUxfUkVHSVNURVIpICsgMykKKworLyogVGhpcyBwb2ludHMgdG8gdGhlIENhbm9uaWNhbCBGcmFtZSBBZGRyZXNzIG9mIHRoZSBmdW5jdGlvbi4gIFRoaXMKKyAgIHNob3VsZCBjb3JyZXNwb25kIHRvIHRoZSBDRkEgcHJvZHVjZWQgYnkgSU5DT01JTkdfRlJBTUVfU1BfT0ZGU0VULAorICAgYnV0IGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gdGhlIGFyZyBwb2ludGVyIGZvciBzaW1wbGljaXR5OyB0aGUKKyAgIGZyYW1lIHBvaW50ZXIgbm9yIHN0YWNrIHBvaW50ZXIgYXJlIG5lY2Vzc2FyaWx5IGZpeGVkIHJlbGF0aXZlIHRvCisgICB0aGUgQ0ZBIHVudGlsIGFmdGVyIHJlbG9hZC4gICovCisKKyNkZWZpbmUgdmlydHVhbF9jZmFfcnR4CQkJKGdsb2JhbF9ydGxbR1JfVklSVFVBTF9DRkFdKQorCisjZGVmaW5lIFZJUlRVQUxfQ0ZBX1JFR05VTQkJKChGSVJTVF9WSVJUVUFMX1JFR0lTVEVSKSArIDQpCisKKyNkZWZpbmUgTEFTVF9WSVJUVUFMX1BPSU5URVJfUkVHSVNURVIJKChGSVJTVF9WSVJUVUFMX1JFR0lTVEVSKSArIDQpCisKKy8qIFRoaXMgaXMgcmVwbGFjZWQgYnkgY3J0bC0+cHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5IC8gQklUU19QRVJfVU5JVAorICAgd2hlbiBmaW5hbGl6ZWQuICAqLworCisjZGVmaW5lIHZpcnR1YWxfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5X3J0eCBcCisJKGdsb2JhbF9ydGxbR1JfVklSVFVBTF9QUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlldKQorCisjZGVmaW5lIFZJUlRVQUxfUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZX1JFR05VTSBcCisJCQkJCSgoRklSU1RfVklSVFVBTF9SRUdJU1RFUikgKyA1KQorCisjZGVmaW5lIExBU1RfVklSVFVBTF9SRUdJU1RFUgkJKChGSVJTVF9WSVJUVUFMX1JFR0lTVEVSKSArIDUpCisKKy8qIE5vbnplcm8gaWYgUkVHTlVNIGlzIGEgcG9pbnRlciBpbnRvIHRoZSBzdGFjayBmcmFtZS4gICovCisjZGVmaW5lIFJFR05PX1BUUl9GUkFNRV9QKFJFR05VTSkJCVwKKyAgKChSRUdOVU0pID09IFNUQUNLX1BPSU5URVJfUkVHTlVNCQlcCisgICB8fCAoUkVHTlVNKSA9PSBGUkFNRV9QT0lOVEVSX1JFR05VTQkJXAorICAgfHwgKFJFR05VTSkgPT0gSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTQlcCisgICB8fCAoUkVHTlVNKSA9PSBBUkdfUE9JTlRFUl9SRUdOVU0JCVwKKyAgIHx8ICgoUkVHTlVNKSA+PSBGSVJTVF9WSVJUVUFMX1JFR0lTVEVSCVwKKyAgICAgICAmJiAoUkVHTlVNKSA8PSBMQVNUX1ZJUlRVQUxfUE9JTlRFUl9SRUdJU1RFUikpCisKKy8qIFJFR05VTSBuZXZlciByZWFsbHkgYXBwZWFyaW5nIGluIHRoZSBJTlNOIHN0cmVhbS4gICovCisjZGVmaW5lIElOVkFMSURfUkVHTlVNCQkJKH4odW5zaWduZWQgaW50KSAwKQorCisvKiBSRUdOVU0gZm9yIHdoaWNoIG5vIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSBnZW5lcmF0ZWQuICAqLworI2RlZmluZSBJR05PUkVEX0RXQVJGX1JFR05VTSAgICAgICAgICAgIChJTlZBTElEX1JFR05VTSAtIDEpCisKK2V4dGVybiBydHggb3V0cHV0X2NvbnN0YW50X2RlZiAodHJlZSwgaW50KTsKK2V4dGVybiBydHggbG9va3VwX2NvbnN0YW50X2RlZiAodHJlZSk7CisKKy8qIE5vbnplcm8gYWZ0ZXIgZW5kIG9mIHJlbG9hZCBwYXNzLgorICAgU2V0IHRvIDEgb3IgMCBieSByZWxvYWQxLmMuICAqLworCitleHRlcm4gaW50IHJlbG9hZF9jb21wbGV0ZWQ7CisKKy8qIE5vbnplcm8gYWZ0ZXIgdGhyZWFkX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyBoYXMgcnVuLiAgKi8KK2V4dGVybiBpbnQgZXBpbG9ndWVfY29tcGxldGVkOworCisvKiBTZXQgdG8gMSB3aGlsZSByZWxvYWRfYXNfbmVlZGVkIGlzIG9wZXJhdGluZy4KKyAgIFJlcXVpcmVkIGJ5IHNvbWUgbWFjaGluZXMgdG8gaGFuZGxlIGFueSBnZW5lcmF0ZWQgbW92ZXMgZGlmZmVyZW50bHkuICAqLworCitleHRlcm4gaW50IHJlbG9hZF9pbl9wcm9ncmVzczsKKworLyogU2V0IHRvIDEgd2hpbGUgaW4gbHJhLiAgKi8KK2V4dGVybiBpbnQgbHJhX2luX3Byb2dyZXNzOworCisvKiBUaGlzIG1hY3JvIGluZGljYXRlcyB3aGV0aGVyIHlvdSBtYXkgY3JlYXRlIGEgbmV3CisgICBwc2V1ZG8tcmVnaXN0ZXIuICAqLworCisjZGVmaW5lIGNhbl9jcmVhdGVfcHNldWRvX3AoKSAoIXJlbG9hZF9pbl9wcm9ncmVzcyAmJiAhcmVsb2FkX2NvbXBsZXRlZCkKKworI2lmZGVmIFNUQUNLX1JFR1MKKy8qIE5vbnplcm8gYWZ0ZXIgZW5kIG9mIHJlZ3N0YWNrIHBhc3MuCisgICBTZXQgdG8gMSBvciAwIGJ5IHJlZy1zdGFjay5jLiAgKi8KK2V4dGVybiBpbnQgcmVnc3RhY2tfY29tcGxldGVkOworI2VuZGlmCisKKy8qIElmIHRoaXMgaXMgbm9uemVybywgd2UgZG8gbm90IGJvdGhlciBnZW5lcmF0aW5nIFZPTEFUSUxFCisgICBhcm91bmQgdm9sYXRpbGUgbWVtb3J5IHJlZmVyZW5jZXMsIGFuZCB3ZSBhcmUgd2lsbGluZyB0bworICAgb3V0cHV0IGluZGlyZWN0IGFkZHJlc3Nlcy4gIElmIGNzZSBpcyB0byBmb2xsb3csIHdlIHJlamVjdAorICAgaW5kaXJlY3QgYWRkcmVzc2VzIHNvIGEgdXNlZnVsIHBvdGVudGlhbCBjc2UgaXMgZ2VuZXJhdGVkOworICAgaWYgaXQgaXMgdXNlZCBvbmx5IG9uY2UsIGluc3RydWN0aW9uIGNvbWJpbmF0aW9uIHdpbGwgcHJvZHVjZQorICAgdGhlIHNhbWUgaW5kaXJlY3QgYWRkcmVzcyBldmVudHVhbGx5LiAgKi8KK2V4dGVybiBpbnQgY3NlX25vdF9leHBlY3RlZDsKKworLyogVHJhbnNsYXRlcyBydHggY29kZSB0byB0cmVlIGNvZGUsIGZvciB0aG9zZSBjb2RlcyBuZWVkZWQgYnkKKyAgIFJFQUxfQVJJVEhNRVRJQy4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGludCBiZWNhdXNlIHRoZSBjYWxsZXIgbWF5IG5vdAorICAga25vdyB3aGF0IGBlbnVtIHRyZWVfY29kZScgbWVhbnMuICAqLworCitleHRlcm4gaW50IHJ0eF90b190cmVlX2NvZGUgKGVudW0gcnR4X2NvZGUpOworCisvKiBJbiBjc2UuYyAqLworZXh0ZXJuIGludCBkZWxldGVfdHJpdmlhbGx5X2RlYWRfaW5zbnMgKHJ0eCwgaW50KTsKK2V4dGVybiBpbnQgZXhwX2VxdWl2X3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4LCBpbnQsIGJvb2wpOworZXh0ZXJuIHVuc2lnbmVkIGhhc2hfcnR4IChjb25zdF9ydHggeCwgZW51bSBtYWNoaW5lX21vZGUsIGludCAqLCBpbnQgKiwgYm9vbCk7CisKKy8qIEluIGRzZS5jICovCitleHRlcm4gYm9vbCBjaGVja19mb3JfaW5jX2RlYyAocnR4IGluc24pOworCisvKiBJbiBqdW1wLmMgKi8KK2V4dGVybiBpbnQgY29tcGFyaXNvbl9kb21pbmF0ZXNfcCAoZW51bSBydHhfY29kZSwgZW51bSBydHhfY29kZSk7CitleHRlcm4gYm9vbCBqdW1wX3RvX2xhYmVsX3AgKHJ0eCk7CitleHRlcm4gaW50IGNvbmRqdW1wX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IGFueV9jb25kanVtcF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBhbnlfdW5jb25kanVtcF9wIChjb25zdF9ydHgpOworZXh0ZXJuIHJ0eCBwY19zZXQgKGNvbnN0X3J0eCk7CitleHRlcm4gcnR4IGNvbmRqdW1wX2xhYmVsIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBzaW1wbGVqdW1wX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHJldHVybmp1bXBfcCAocnR4KTsKK2V4dGVybiBpbnQgZWhfcmV0dXJuanVtcF9wIChydHgpOworZXh0ZXJuIGludCBvbmx5anVtcF9wIChjb25zdF9ydHgpOworZXh0ZXJuIGludCBvbmx5X3NldHNfY2MwX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHNldHNfY2MwX3AgKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IGludmVydF9qdW1wXzEgKHJ0eCwgcnR4KTsKK2V4dGVybiBpbnQgaW52ZXJ0X2p1bXAgKHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIGludCBydHhfcmVudW1iZXJlZF9lcXVhbF9wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHRydWVfcmVnbnVtIChjb25zdF9ydHgpOworZXh0ZXJuIHVuc2lnbmVkIGludCByZWdfb3Jfc3VicmVnbm8gKGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHJlZGlyZWN0X2p1bXBfMSAocnR4LCBydHgpOworZXh0ZXJuIHZvaWQgcmVkaXJlY3RfanVtcF8yIChydHgsIHJ0eCwgcnR4LCBpbnQsIGludCk7CitleHRlcm4gaW50IHJlZGlyZWN0X2p1bXAgKHJ0eCwgcnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgcmVidWlsZF9qdW1wX2xhYmVscyAocnR4KTsKK2V4dGVybiB2b2lkIHJlYnVpbGRfanVtcF9sYWJlbHNfY2hhaW4gKHJ0eCk7CitleHRlcm4gcnR4IHJldmVyc2VkX2NvbXBhcmlzb24gKGNvbnN0X3J0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGVudW0gcnR4X2NvZGUgcmV2ZXJzZWRfY29tcGFyaXNvbl9jb2RlIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gZW51bSBydHhfY29kZSByZXZlcnNlZF9jb21wYXJpc29uX2NvZGVfcGFydHMgKGVudW0gcnR4X2NvZGUsIGNvbnN0X3J0eCwKKwkJCQkJCSAgICAgY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIHZvaWQgZGVsZXRlX2Zvcl9wZWVwaG9sZSAocnR4LCBydHgpOworZXh0ZXJuIGludCBjb25kanVtcF9pbl9wYXJhbGxlbF9wIChjb25zdF9ydHgpOworCisvKiBJbiBlbWl0LXJ0bC5jLiAgKi8KK2V4dGVybiBpbnQgbWF4X3JlZ19udW0gKHZvaWQpOworZXh0ZXJuIGludCBtYXhfbGFiZWxfbnVtICh2b2lkKTsKK2V4dGVybiBpbnQgZ2V0X2ZpcnN0X2xhYmVsX251bSAodm9pZCk7CitleHRlcm4gdm9pZCBtYXliZV9zZXRfZmlyc3RfbGFiZWxfbnVtIChydHgpOworZXh0ZXJuIHZvaWQgZGVsZXRlX2luc25zX3NpbmNlIChydHgpOworZXh0ZXJuIHZvaWQgbWFya19yZWdfcG9pbnRlciAocnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgbWFya191c2VyX3JlZyAocnR4KTsKK2V4dGVybiB2b2lkIHJlc2V0X3VzZWRfZmxhZ3MgKHJ0eCk7CitleHRlcm4gdm9pZCBzZXRfdXNlZF9mbGFncyAocnR4KTsKK2V4dGVybiB2b2lkIHJlb3JkZXJfaW5zbnMgKHJ0eCwgcnR4LCBydHgpOworZXh0ZXJuIHZvaWQgcmVvcmRlcl9pbnNuc19ub2JiIChydHgsIHJ0eCwgcnR4KTsKK2V4dGVybiBpbnQgZ2V0X21heF9pbnNuX2NvdW50ICh2b2lkKTsKK2V4dGVybiBpbnQgaW5fc2VxdWVuY2VfcCAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2VtaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9lbWl0X3JlZ3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9lbWl0X29uY2UgKHZvaWQpOworZXh0ZXJuIHZvaWQgcHVzaF90b3Btb3N0X3NlcXVlbmNlICh2b2lkKTsKK2V4dGVybiB2b2lkIHBvcF90b3Btb3N0X3NlcXVlbmNlICh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9uZXdfZmlyc3RfYW5kX2xhc3RfaW5zbiAocnR4LCBydHgpOworZXh0ZXJuIHVuc2lnbmVkIGludCB1bnNoYXJlX2FsbF9ydGwgKHZvaWQpOworZXh0ZXJuIHZvaWQgdW5zaGFyZV9hbGxfcnRsX2FnYWluIChydHgpOworZXh0ZXJuIHZvaWQgdW5zaGFyZV9hbGxfcnRsX2luX2NoYWluIChydHgpOworZXh0ZXJuIHZvaWQgdmVyaWZ5X3J0bF9zaGFyaW5nICh2b2lkKTsKK2V4dGVybiB2b2lkIGxpbmtfY2MwX2luc25zIChydHgpOworZXh0ZXJuIHZvaWQgYWRkX2luc24gKHJ0eCk7CitleHRlcm4gdm9pZCBhZGRfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4LCBiYXNpY19ibG9jayk7CitleHRlcm4gdm9pZCBhZGRfaW5zbl9hZnRlciAocnR4LCBydHgsIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9pbnNuIChydHgpOworZXh0ZXJuIHJ0eCBlbWl0IChydHgpOworZXh0ZXJuIHZvaWQgZGVsZXRlX2luc24gKHJ0eCk7CitleHRlcm4gcnR4IGVudHJ5X29mX2Z1bmN0aW9uICh2b2lkKTsKK2V4dGVybiB2b2lkIGVtaXRfaW5zbl9hdF9lbnRyeSAocnR4KTsKK2V4dGVybiB2b2lkIGRlbGV0ZV9pbnNuX2NoYWluIChydHgsIHJ0eCwgYm9vbCk7CitleHRlcm4gcnR4IHVubGlua19pbnNuX2NoYWluIChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBkZWxldGVfaW5zbl9hbmRfZWRnZXMgKHJ0eCk7CitleHRlcm4gcnR4IGdlbl9sb3dwYXJ0X1NVQlJFRyAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CitleHRlcm4gcnR4IGdlbl9jb25zdF9tZW0gKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworZXh0ZXJuIHJ0eCBnZW5fZnJhbWVfbWVtIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKK2V4dGVybiBydHggZ2VuX3RtcF9zdGFja19tZW0gKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworZXh0ZXJuIGJvb2wgdmFsaWRhdGVfc3VicmVnIChlbnVtIG1hY2hpbmVfbW9kZSwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkgICAgIGNvbnN0X3J0eCwgdW5zaWduZWQgaW50KTsKKworLyogSW4gY29tYmluZS5jICAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBleHRlbmRlZF9jb3VudCAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKK2V4dGVybiBydHggcmVtb3ZlX2RlYXRoICh1bnNpZ25lZCBpbnQsIHJ0eCk7CitleHRlcm4gdm9pZCBkdW1wX2NvbWJpbmVfc3RhdHMgKEZJTEUgKik7CitleHRlcm4gdm9pZCBkdW1wX2NvbWJpbmVfdG90YWxfc3RhdHMgKEZJTEUgKik7CitleHRlcm4gcnR4IG1ha2VfY29tcG91bmRfb3BlcmF0aW9uIChydHgsIGVudW0gcnR4X2NvZGUpOworCisvKiBJbiBjZmdjbGVhbnVwLmMgICovCitleHRlcm4gdm9pZCBkZWxldGVfZGVhZF9qdW1wdGFibGVzICh2b2lkKTsKKworLyogSW4gc2NoZWQtcmduLmMuICAqLworZXh0ZXJuIHZvaWQgc2NoZWR1bGVfaW5zbnMgKHZvaWQpOworCisvKiBJbiBzY2hlZC1lYmIuYy4gICovCitleHRlcm4gdm9pZCBzY2hlZHVsZV9lYmJzICh2b2lkKTsKKworLyogSW4gc2VsLXNjaGVkLWR1bXAuYy4gICovCitleHRlcm4gdm9pZCBzZWxfc2NoZWRfZml4X3BhcmFtIChjb25zdCBjaGFyICpwYXJhbSwgY29uc3QgY2hhciAqdmFsKTsKKworLyogSW4gcHJpbnQtcnRsLmMgKi8KK2V4dGVybiBjb25zdCBjaGFyICpwcmludF9ydHhfaGVhZDsKK2V4dGVybiB2b2lkIGRlYnVnX3J0eCAoY29uc3RfcnR4KTsKK2V4dGVybiB2b2lkIGRlYnVnX3J0eF9saXN0IChjb25zdF9ydHgsIGludCk7CitleHRlcm4gdm9pZCBkZWJ1Z19ydHhfcmFuZ2UgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBjb25zdF9ydHggZGVidWdfcnR4X2ZpbmQgKGNvbnN0X3J0eCwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X21lbV9leHByIChGSUxFICosIGNvbnN0X3RyZWUpOworZXh0ZXJuIHZvaWQgcHJpbnRfcnRsIChGSUxFICosIGNvbnN0X3J0eCk7CitleHRlcm4gdm9pZCBwcmludF9zaW1wbGVfcnRsIChGSUxFICosIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IHByaW50X3J0bF9zaW5nbGUgKEZJTEUgKiwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgcHJpbnRfcnRsX3NpbmdsZV93aXRoX2luZGVudCAoRklMRSAqLCBjb25zdF9ydHgsIGludCk7CitleHRlcm4gdm9pZCBwcmludF9pbmxpbmVfcnR4IChGSUxFICosIGNvbnN0X3J0eCwgaW50KTsKKworLyogRnVuY3Rpb25zIGluIHNjaGVkLXZpcy5jLiAgRklYTUU6IElkZWFsbHkgdGhlc2UgZnVuY3Rpb25zIHdvdWxkCisgICBub3QgYmUgaW4gc2NoZWQtdmlzLmMgYnV0IGluIHJ0bC5jLCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBvbmx5IHVzZWQKKyAgIGJ5IHRoZSBzY2hlZHVsZXIgYW55bW9yZSBidXQgZm9yIGFsbCAic2xpbSIgUlRMIGR1bXBpbmcuICAqLworZXh0ZXJuIHZvaWQgZHVtcF92YWx1ZV9zbGltIChGSUxFICosIGNvbnN0X3J0eCwgaW50KTsKK2V4dGVybiB2b2lkIGR1bXBfaW5zbl9zbGltIChGSUxFICosIGNvbnN0X3J0eCk7CitleHRlcm4gdm9pZCBkdW1wX3J0bF9zbGltIChGSUxFICosIGNvbnN0X3J0eCwgY29uc3RfcnR4LCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBwcmludF92YWx1ZSAocHJldHR5X3ByaW50ZXIgKiwgY29uc3RfcnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfcGF0dGVybiAocHJldHR5X3ByaW50ZXIgKiwgY29uc3RfcnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfaW5zbiAocHJldHR5X3ByaW50ZXIgKiwgY29uc3RfcnR4LCBpbnQpOworZXh0ZXJuIHZvaWQgcnRsX2R1bXBfYmJfZm9yX2dyYXBoIChwcmV0dHlfcHJpbnRlciAqLCBiYXNpY19ibG9jayk7CitleHRlcm4gY29uc3QgY2hhciAqc3RyX3BhdHRlcm5fc2xpbSAoY29uc3RfcnR4KTsKKworLyogSW4gZnVuY3Rpb24uYyAqLworZXh0ZXJuIHZvaWQgcmVwb3NpdGlvbl9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfbm90ZXMgKHZvaWQpOworZXh0ZXJuIGludCBwcm9sb2d1ZV9lcGlsb2d1ZV9jb250YWlucyAoY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgc2liY2FsbF9lcGlsb2d1ZV9jb250YWlucyAoY29uc3RfcnR4KTsKK2V4dGVybiB2b2lkIHVwZGF0ZV90ZW1wX3Nsb3RfYWRkcmVzcyAocnR4LCBydHgpOworZXh0ZXJuIHZvaWQgbWF5YmVfY29weV9wcm9sb2d1ZV9lcGlsb2d1ZV9pbnNuIChydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBzZXRfcmV0dXJuX2p1bXBfbGFiZWwgKHJ0eCk7CisKKy8qIEluIHN0bXQuYyAqLworZXh0ZXJuIHZvaWQgZXhwYW5kX251bGxfcmV0dXJuICh2b2lkKTsKK2V4dGVybiB2b2lkIGV4cGFuZF9uYWtlZF9yZXR1cm4gKHZvaWQpOworZXh0ZXJuIHZvaWQgZW1pdF9qdW1wIChydHgpOworCisvKiBJbiBleHByLmMgKi8KK2V4dGVybiBydHggbW92ZV9ieV9waWVjZXMgKHJ0eCwgcnR4LCB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULAorCQkJICAgdW5zaWduZWQgaW50LCBpbnQpOworZXh0ZXJuIEhPU1RfV0lERV9JTlQgZmluZF9hcmdzX3NpemVfYWRqdXN0IChydHgpOworZXh0ZXJuIGludCBmaXh1cF9hcmdzX3NpemVfbm90ZXMgKHJ0eCwgcnR4LCBpbnQpOworCisvKiBJbiBjZmdydGwuYyAqLworZXh0ZXJuIHZvaWQgcHJpbnRfcnRsX3dpdGhfYmIgKEZJTEUgKiwgY29uc3RfcnR4LCBpbnQpOworZXh0ZXJuIHJ0eCBkdXBsaWNhdGVfaW5zbl9jaGFpbiAocnR4LCBydHgpOworCisvKiBJbiBleHBtZWQuYyAqLworZXh0ZXJuIHZvaWQgaW5pdF9leHBtZWQgKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2luYyAocnR4LCBydHgpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2RlYyAocnR4LCBydHgpOworCisvKiBJbiBsb3dlci1zdWJyZWcuYyAqLworZXh0ZXJuIHZvaWQgaW5pdF9sb3dlcl9zdWJyZWcgKHZvaWQpOworCisvKiBJbiBnY3NlLmMgKi8KK2V4dGVybiBib29sIGNhbl9jb3B5X3AgKGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBib29sIGNhbl9hc3NpZ25fdG9fcmVnX3dpdGhvdXRfY2xvYmJlcnNfcCAocnR4KTsKK2V4dGVybiBydHggZmlzX2dldF9jb25kaXRpb24gKHJ0eCk7CisKKy8qIEluIGlyYS5jICovCisjaWZkZWYgSEFSRF9DT05TVAorZXh0ZXJuIEhBUkRfUkVHX1NFVCBlbGltaW5hYmxlX3JlZ3NldDsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgbWFya19lbGltaW5hdGlvbiAoaW50LCBpbnQpOworCisvKiBJbiByZWdpbmZvLmMgKi8KK2V4dGVybiBpbnQgcmVnX2NsYXNzZXNfaW50ZXJzZWN0X3AgKHJlZ19jbGFzc190LCByZWdfY2xhc3NfdCk7CitleHRlcm4gaW50IHJlZ19jbGFzc19zdWJzZXRfcCAocmVnX2NsYXNzX3QsIHJlZ19jbGFzc190KTsKK2V4dGVybiB2b2lkIGdsb2JhbGl6ZV9yZWcgKHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBpbml0X3JlZ19tb2Rlc190YXJnZXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9yZWdzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlaW5pdF9yZWdzICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfZmFrZV9zdGFja19tZW1zICh2b2lkKTsKK2V4dGVybiB2b2lkIHNhdmVfcmVnaXN0ZXJfaW5mbyAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X3JlZ19zZXRzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlZ2NsYXNzIChydHgsIGludCk7CitleHRlcm4gdm9pZCByZWdfc2NhbiAocnR4LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgZml4X3JlZ2lzdGVyIChjb25zdCBjaGFyICosIGludCwgaW50KTsKK2V4dGVybiBib29sIGludmFsaWRfbW9kZV9jaGFuZ2VfcCAodW5zaWduZWQgaW50LCBlbnVtIHJlZ19jbGFzcyk7CisKKy8qIEluIHJlb3JnLmMgKi8KK2V4dGVybiB2b2lkIGRicl9zY2hlZHVsZSAocnR4KTsKKworLyogSW4gcmVsb2FkMS5jICovCitleHRlcm4gaW50IGZ1bmN0aW9uX2ludmFyaWFudF9wIChjb25zdF9ydHgpOworCisvKiBJbiBjYWxscy5jICovCitlbnVtIGxpYmNhbGxfdHlwZQoreworICBMQ1RfTk9STUFMID0gMCwKKyAgTENUX0NPTlNUID0gMSwKKyAgTENUX1BVUkUgPSAyLAorICBMQ1RfTk9SRVRVUk4gPSAzLAorICBMQ1RfVEhST1cgPSA0LAorICBMQ1RfUkVUVVJOU19UV0lDRSA9IDUKK307CisKK2V4dGVybiB2b2lkIGVtaXRfbGlicmFyeV9jYWxsIChydHgsIGVudW0gbGliY2FsbF90eXBlLCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50LAorCQkJICAgICAgIC4uLik7CitleHRlcm4gcnR4IGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlIChydHgsIHJ0eCwgZW51bSBsaWJjYWxsX3R5cGUsCisJCQkJICAgIGVudW0gbWFjaGluZV9tb2RlLCBpbnQsIC4uLik7CisKKy8qIEluIHZhcmFzbS5jICovCitleHRlcm4gdm9pZCBpbml0X3ZhcmFzbV9vbmNlICh2b2lkKTsKKworZXh0ZXJuIHJ0eCBtYWtlX2RlYnVnX2V4cHJfZnJvbV9ydGwgKGNvbnN0X3J0eCk7CisKKy8qIEluIHJlYWQtcnRsLmMgKi8KK2V4dGVybiBib29sIHJlYWRfcnR4IChjb25zdCBjaGFyICosIHJ0eCAqKTsKKworLyogSW4gYWxpYXMuYyAqLworZXh0ZXJuIHJ0eCBjYW5vbl9ydHggKHJ0eCk7CitleHRlcm4gaW50IHRydWVfZGVwZW5kZW5jZSAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfcnR4KTsKK2V4dGVybiBydHggZ2V0X2FkZHIgKHJ0eCk7CitleHRlcm4gaW50IGNhbm9uX3RydWVfZGVwZW5kZW5jZSAoY29uc3RfcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LAorCQkJCSAgY29uc3RfcnR4LCBydHgpOworZXh0ZXJuIGludCByZWFkX2RlcGVuZGVuY2UgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBpbnQgYW50aV9kZXBlbmRlbmNlIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IG91dHB1dF9kZXBlbmRlbmNlIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gaW50IG1heV9hbGlhc19wIChjb25zdF9ydHgsIGNvbnN0X3J0eCk7CitleHRlcm4gdm9pZCBpbml0X2FsaWFzX3RhcmdldCAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X2FsaWFzX2FuYWx5c2lzICh2b2lkKTsKK2V4dGVybiB2b2lkIGVuZF9hbGlhc19hbmFseXNpcyAodm9pZCk7CitleHRlcm4gdm9pZCB2dF9lcXVhdGVfcmVnX2Jhc2VfdmFsdWUgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBib29sIG1lbW9yeV9tb2RpZmllZF9pbl9pbnNuX3AgKGNvbnN0X3J0eCwgY29uc3RfcnR4KTsKK2V4dGVybiBib29sIG1lbW9yeV9tdXN0X2JlX21vZGlmaWVkX2luX2luc25fcCAoY29uc3RfcnR4LCBjb25zdF9ydHgpOworZXh0ZXJuIGJvb2wgbWF5X2JlX3NwX2Jhc2VkX3AgKHJ0eCk7CitleHRlcm4gcnR4IGdlbl9oYXJkX3JlZ19jbG9iYmVyIChlbnVtIG1hY2hpbmVfbW9kZSwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBydHggZ2V0X3JlZ19rbm93bl92YWx1ZSAodW5zaWduZWQgaW50KTsKK2V4dGVybiBib29sIGdldF9yZWdfa25vd25fZXF1aXZfcCAodW5zaWduZWQgaW50KTsKK2V4dGVybiBydHggZ2V0X3JlZ19iYXNlX3ZhbHVlICh1bnNpZ25lZCBpbnQpOworCisjaWZkZWYgU1RBQ0tfUkVHUworZXh0ZXJuIGludCBzdGFja19yZWdzX21lbnRpb25lZCAoY29uc3RfcnR4IGluc24pOworI2VuZGlmCisKKy8qIEluIHRvcGxldi5jICovCitleHRlcm4gR1RZKCgpKSBydHggc3RhY2tfbGltaXRfcnR4OworCisvKiBJbiBwcmVkaWN0LmMgKi8KK2V4dGVybiB2b2lkIGludmVydF9icl9wcm9iYWJpbGl0aWVzIChydHgpOworZXh0ZXJuIGJvb2wgZXhwZW5zaXZlX2Z1bmN0aW9uX3AgKGludCk7CisKKy8qIEluIHZhci10cmFja2luZy5jICovCitleHRlcm4gdW5zaWduZWQgaW50IHZhcmlhYmxlX3RyYWNraW5nX21haW4gKHZvaWQpOworCisvKiBJbiBzdG9yLWxheW91dC5jLiAgKi8KK2V4dGVybiB2b2lkIGdldF9tb2RlX2JvdW5kcyAoZW51bSBtYWNoaW5lX21vZGUsIGludCwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkgICAgIHJ0eCAqLCBydHggKik7CisKKy8qIEluIGxvb3AtdW5zd2l0Y2guYyAgKi8KK2V4dGVybiBydHggcmV2ZXJzZWRfY29uZGl0aW9uIChydHgpOworZXh0ZXJuIHJ0eCBjb21wYXJlX2FuZF9qdW1wX3NlcSAocnR4LCBydHgsIGVudW0gcnR4X2NvZGUsIHJ0eCwgaW50LCBydHgpOworCisvKiBJbiBsb29wLWl2LmMgICovCitleHRlcm4gcnR4IGNhbm9uX2NvbmRpdGlvbiAocnR4KTsKK2V4dGVybiB2b2lkIHNpbXBsaWZ5X3VzaW5nX2NvbmRpdGlvbiAocnR4LCBydHggKiwgYml0bWFwKTsKKworLyogSW4gZmluYWwuYyAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY29tcHV0ZV9hbGlnbm1lbnRzICh2b2lkKTsKK2V4dGVybiBpbnQgYXNtX3N0cl9jb3VudCAoY29uc3QgY2hhciAqdGVtcGwpOworDAorc3RydWN0IHJ0bF9ob29rcworeworICBydHggKCpnZW5fbG93cGFydCkgKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOworICBydHggKCpnZW5fbG93cGFydF9ub19lbWl0KSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CisgIHJ0eCAoKnJlZ19ub256ZXJvX2JpdHMpIChjb25zdF9ydHgsIGVudW0gbWFjaGluZV9tb2RlLCBjb25zdF9ydHgsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCAqKTsKKyAgcnR4ICgqcmVnX251bV9zaWduX2JpdF9jb3BpZXMpIChjb25zdF9ydHgsIGVudW0gbWFjaGluZV9tb2RlLCBjb25zdF9ydHgsIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCSAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQgKik7CisgIGJvb2wgKCpyZWdfdHJ1bmNhdGVkX3RvX21vZGUpIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfcnR4KTsKKworICAvKiBXaGVuZXZlciB5b3UgYWRkIGVudHJpZXMgaGVyZSwgbWFrZSBzdXJlIHlvdSBhZGp1c3QgcnRsaG9va3MtZGVmLmguICAqLworfTsKKworLyogRWFjaCBwYXNzIGNhbiBwcm92aWRlIGl0cyBvd24uICAqLworZXh0ZXJuIHN0cnVjdCBydGxfaG9va3MgcnRsX2hvb2tzOworCisvKiAuLi4gYnV0IHRoZW4gaXQgaGFzIHRvIHJlc3RvcmUgdGhlc2UuICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBydGxfaG9va3MgZ2VuZXJhbF9ydGxfaG9va3M7CisKKy8qIEtlZXAgdGhpcyBmb3IgdGhlIG5vbmNlLiAgKi8KKyNkZWZpbmUgZ2VuX2xvd3BhcnQgcnRsX2hvb2tzLmdlbl9sb3dwYXJ0CisKK2V4dGVybiB2b2lkIGluc25fbG9jYXRpb25zX2luaXQgKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5zbl9sb2NhdGlvbnNfZmluYWxpemUgKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0X2N1cnJfaW5zbl9sb2NhdGlvbiAobG9jYXRpb25fdCk7CitleHRlcm4gbG9jYXRpb25fdCBjdXJyX2luc25fbG9jYXRpb24gKHZvaWQpOworZXh0ZXJuIGJvb2wgb3B0aW1pemVfaW5zbl9mb3Jfc2l6ZV9wICh2b2lkKTsKK2V4dGVybiBib29sIG9wdGltaXplX2luc25fZm9yX3NwZWVkX3AgKHZvaWQpOworCisvKiBydGwtZXJyb3IuYyAqLworZXh0ZXJuIHZvaWQgX2ZhdGFsX2luc25fbm90X2ZvdW5kIChjb25zdF9ydHgsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopCisgICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIF9mYXRhbF9pbnNuIChjb25zdCBjaGFyICosIGNvbnN0X3J0eCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikKKyAgICAgQVRUUklCVVRFX05PUkVUVVJOOworCisjZGVmaW5lIGZhdGFsX2luc24obXNnaWQsIGluc24pIFwKKwlfZmF0YWxfaW5zbiAobXNnaWQsIGluc24sIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKQorI2RlZmluZSBmYXRhbF9pbnNuX25vdF9mb3VuZChpbnNuKSBcCisJX2ZhdGFsX2luc25fbm90X2ZvdW5kIChpbnNuLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXykKKworCisKKyNlbmRpZiAvKiAhIEdDQ19SVExfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3NhZmUtY3R5cGUuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zYWZlLWN0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2NmJmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zYWZlLWN0eXBlLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qIDxjdHlwZS5oPiByZXBsYWNlbWVudCBtYWNyb3MuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IFphY2sgV2VpbmJlcmcgPHphY2t3QHN0YW5mb3JkLmVkdT4uCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBsaWJpYmVydHkgbGlicmFyeS4KK0xpYmliZXJ0eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworTGliaWJlcnR5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIGxpYmliZXJ0eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYKK25vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsCitCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8qIFRoaXMgaXMgYSBjb21wYXRpYmxlIHJlcGxhY2VtZW50IG9mIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkncyA8Y3R5cGUuaD4KKyAgIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCisgICAtIEltcGxlbWVudHMgYWxsIGlzeHh4KCkgbWFjcm9zIHJlcXVpcmVkIGJ5IEM5OS4KKyAgIC0gQWxzbyBpbXBsZW1lbnRzIHNvbWUgY2hhcmFjdGVyIGNsYXNzZXMgdXNlZnVsIHdoZW4KKyAgICAgcGFyc2luZyBDLWxpa2UgbGFuZ3VhZ2VzLgorICAgLSBEb2VzIG5vdCBjaGFuZ2UgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGxvY2FsZS4KKyAgIC0gQmVoYXZlcyBwcm9wZXJseSBmb3IgYWxsIHZhbHVlcyBpbiB0aGUgcmFuZ2Ugb2YgYSBzaWduZWQgb3IKKyAgICAgdW5zaWduZWQgY2hhci4KKworICAgVG8gYXZvaWQgY29uZmxpY3RzLCB0aGlzIGhlYWRlciBkZWZpbmVzIHRoZSBpc3h4eCBmdW5jdGlvbnMgaW4gdXBwZXIKKyAgIGNhc2UsIGUuZy4gSVNBTFBIQSBub3QgaXNhbHBoYS4gICovCisKKyNpZm5kZWYgU0FGRV9DVFlQRV9ICisjZGVmaW5lIFNBRkVfQ1RZUEVfSAorCisvKiBEZXRlcm1pbmUgaG9zdCBjaGFyYWN0ZXIgc2V0LiAgKi8KKyNkZWZpbmUgSE9TVF9DSEFSU0VUX1VOS05PV04gMAorI2RlZmluZSBIT1NUX0NIQVJTRVRfQVNDSUkgICAxCisjZGVmaW5lIEhPU1RfQ0hBUlNFVF9FQkNESUMgIDIKKworI2lmICAnXG4nID09IDB4MEEgJiYgJyAnID09IDB4MjAgJiYgJzAnID09IDB4MzAgXAorICAgJiYgJ0EnID09IDB4NDEgJiYgJ2EnID09IDB4NjEgJiYgJyEnID09IDB4MjEKKyMgIGRlZmluZSBIT1NUX0NIQVJTRVQgSE9TVF9DSEFSU0VUX0FTQ0lJCisjZWxzZQorIyBpZiAnXG4nID09IDB4MTUgJiYgJyAnID09IDB4NDAgJiYgJzAnID09IDB4RjAgXAorICAgJiYgJ0EnID09IDB4QzEgJiYgJ2EnID09IDB4ODEgJiYgJyEnID09IDB4NUEKKyMgIGRlZmluZSBIT1NUX0NIQVJTRVQgSE9TVF9DSEFSU0VUX0VCQ0RJQworIyBlbHNlCisjICBkZWZpbmUgSE9TVF9DSEFSU0VUIEhPU1RfQ0hBUlNFVF9VTktOT1dOCisjIGVuZGlmCisjZW5kaWYKKworLyogQ2F0ZWdvcmllcy4gICovCisKK2VudW0geworICAvKiBJbiBDOTkgKi8KKyAgX3NjaF9pc2JsYW5rICA9IDB4MDAwMSwJLyogc3BhY2UgXHQgKi8KKyAgX3NjaF9pc2NudHJsICA9IDB4MDAwMiwJLyogbm9ucHJpbnRpbmcgY2hhcmFjdGVycyAqLworICBfc2NoX2lzZGlnaXQgID0gMHgwMDA0LAkvKiAwLTkgKi8KKyAgX3NjaF9pc2xvd2VyICA9IDB4MDAwOCwJLyogYS16ICovCisgIF9zY2hfaXNwcmludCAgPSAweDAwMTAsCS8qIGFueSBwcmludGluZyBjaGFyYWN0ZXIgaW5jbHVkaW5nICcgJyAqLworICBfc2NoX2lzcHVuY3QgID0gMHgwMDIwLAkvKiBhbGwgcHVuY3R1YXRpb24gKi8KKyAgX3NjaF9pc3NwYWNlICA9IDB4MDA0MCwJLyogc3BhY2UgXHQgXG4gXHIgXGYgXHYgKi8KKyAgX3NjaF9pc3VwcGVyICA9IDB4MDA4MCwJLyogQS1aICovCisgIF9zY2hfaXN4ZGlnaXQgPSAweDAxMDAsCS8qIDAtOUEtRmEtZiAqLworCisgIC8qIEV4dHJhIGNhdGVnb3JpZXMgdXNlZnVsIHRvIGNwcGxpYi4gICovCisgIF9zY2hfaXNpZHN0CT0gMHgwMjAwLAkvKiBBLVphLXpfICovCisgIF9zY2hfaXN2c3AgICAgPSAweDA0MDAsCS8qIFxuIFxyICovCisgIF9zY2hfaXNudnNwICAgPSAweDA4MDAsCS8qIHNwYWNlIFx0IFxmIFx2IFwwICovCisKKyAgLyogQ29tYmluYXRpb25zIG9mIHRoZSBhYm92ZS4gICovCisgIF9zY2hfaXNhbHBoYSAgPSBfc2NoX2lzdXBwZXJ8X3NjaF9pc2xvd2VyLAkvKiBBLVphLXogKi8KKyAgX3NjaF9pc2FsbnVtICA9IF9zY2hfaXNhbHBoYXxfc2NoX2lzZGlnaXQsCS8qIEEtWmEtejAtOSAqLworICBfc2NoX2lzaWRudW0gID0gX3NjaF9pc2lkc3R8X3NjaF9pc2RpZ2l0LAkvKiBBLVphLXowLTlfICovCisgIF9zY2hfaXNncmFwaCAgPSBfc2NoX2lzYWxudW18X3NjaF9pc3B1bmN0LAkvKiBpc3ByaW50IGFuZCBub3Qgc3BhY2UgKi8KKyAgX3NjaF9pc2NwcHNwICA9IF9zY2hfaXN2c3B8X3NjaF9pc252c3AsCS8qIGlzc3BhY2UgKyBcMCAqLworICBfc2NoX2lzYmFzaWMgID0gX3NjaF9pc3ByaW50fF9zY2hfaXNjcHBzcCAgICAgLyogYmFzaWMgY2hhcnNldCBvZiBJU08gQworCQkJCQkJICAgKHBsdXMgYCBhbmQgQCkgICovCit9OworCisvKiBDaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24uICAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IF9zY2hfaXN0YWJsZVsyNTZdOworCisjZGVmaW5lIF9zY2hfdGVzdChjLCBiaXQpIChfc2NoX2lzdGFibGVbKGMpICYgMHhmZl0gJiAodW5zaWduZWQgc2hvcnQpKGJpdCkpCisKKyNkZWZpbmUgSVNBTFBIQShjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNhbHBoYSkKKyNkZWZpbmUgSVNBTE5VTShjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNhbG51bSkKKyNkZWZpbmUgSVNCTEFOSyhjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNibGFuaykKKyNkZWZpbmUgSVNDTlRSTChjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNjbnRybCkKKyNkZWZpbmUgSVNESUdJVChjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNkaWdpdCkKKyNkZWZpbmUgSVNHUkFQSChjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNncmFwaCkKKyNkZWZpbmUgSVNMT1dFUihjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNsb3dlcikKKyNkZWZpbmUgSVNQUklOVChjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNwcmludCkKKyNkZWZpbmUgSVNQVU5DVChjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNwdW5jdCkKKyNkZWZpbmUgSVNTUEFDRShjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXNzcGFjZSkKKyNkZWZpbmUgSVNVUFBFUihjKSAgX3NjaF90ZXN0KGMsIF9zY2hfaXN1cHBlcikKKyNkZWZpbmUgSVNYRElHSVQoYykgX3NjaF90ZXN0KGMsIF9zY2hfaXN4ZGlnaXQpCisKKyNkZWZpbmUgSVNJRE5VTShjKQlfc2NoX3Rlc3QoYywgX3NjaF9pc2lkbnVtKQorI2RlZmluZSBJU0lEU1QoYykJX3NjaF90ZXN0KGMsIF9zY2hfaXNpZHN0KQorI2RlZmluZSBJU19JU09CQVNJQyhjKQlfc2NoX3Rlc3QoYywgX3NjaF9pc2Jhc2ljKQorI2RlZmluZSBJU19WU1BBQ0UoYykJX3NjaF90ZXN0KGMsIF9zY2hfaXN2c3ApCisjZGVmaW5lIElTX05WU1BBQ0UoYykJX3NjaF90ZXN0KGMsIF9zY2hfaXNudnNwKQorI2RlZmluZSBJU19TUEFDRV9PUl9OVUwoYykJX3NjaF90ZXN0KGMsIF9zY2hfaXNjcHBzcCkKKworLyogQ2hhcmFjdGVyIHRyYW5zZm9ybWF0aW9uLiAgKi8KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICBfc2NoX3RvdXBwZXJbMjU2XTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICBfc2NoX3RvbG93ZXJbMjU2XTsKKyNkZWZpbmUgVE9VUFBFUihjKSBfc2NoX3RvdXBwZXJbKGMpICYgMHhmZl0KKyNkZWZpbmUgVE9MT1dFUihjKSBfc2NoX3RvbG93ZXJbKGMpICYgMHhmZl0KKworLyogUHJldmVudCB0aGUgdXNlcnMgb2Ygc2FmZS1jdHlwZS5oIGZyb20gYWNjaWRlbnRseSB1c2luZyB0aGUgcm91dGluZXMKKyAgIGZyb20gY3R5cGUuaC4gIEluaXRpYWxseSwgdGhlIGFwcHJvYWNoIHdhcyB0byBwcm9kdWNlIGFuIGVycm9yIHdoZW4KKyAgIGRldGVjdGluZyB0aGF0IGN0eXBlLmggaGFzIGJlZW4gaW5jbHVkZWQuICBCdXQgdGhpcyB3YXMgY2F1c2luZworICAgdHJvdWJsZSBhcyBjdHlwZS5oIG1pZ2h0IGdldCBpbmRpcmVjdGx5IGluY2x1ZGVkIGFzIGEgcmVzdWx0IG9mCisgICBpbmNsdWRpbmcgYW5vdGhlciBzeXN0ZW0gaGVhZGVyIChmb3IgaW5zdGFuY2UgZ251bGliJ3Mgc3RkaW50LmgpLgorICAgU28gd2UgaW5jbHVkZSBjdHlwZS5oIGhlcmUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVkZWZpbmUgaXRzIG1hY3Jvcy4gICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI3VuZGVmIGlzYWxwaGEKKyNkZWZpbmUgaXNhbHBoYShjKSBkb19ub3RfdXNlX2lzYWxwaGFfd2l0aF9zYWZlX2N0eXBlCisjdW5kZWYgaXNhbG51bQorI2RlZmluZSBpc2FsbnVtKGMpIGRvX25vdF91c2VfaXNhbG51bV93aXRoX3NhZmVfY3R5cGUKKyN1bmRlZiBpc2NudHJsCisjZGVmaW5lIGlzY250cmwoYykgZG9fbm90X3VzZV9pc2NudHJsX3dpdGhfc2FmZV9jdHlwZQorI3VuZGVmIGlzZGlnaXQKKyNkZWZpbmUgaXNkaWdpdChjKSBkb19ub3RfdXNlX2lzZGlnaXRfd2l0aF9zYWZlX2N0eXBlCisjdW5kZWYgaXNncmFwaAorI2RlZmluZSBpc2dyYXBoKGMpIGRvX25vdF91c2VfaXNncmFwaF93aXRoX3NhZmVfY3R5cGUKKyN1bmRlZiBpc2xvd2VyCisjZGVmaW5lIGlzbG93ZXIoYykgZG9fbm90X3VzZV9pc2xvd2VyX3dpdGhfc2FmZV9jdHlwZQorI3VuZGVmIGlzcHJpbnQKKyNkZWZpbmUgaXNwcmludChjKSBkb19ub3RfdXNlX2lzcHJpbnRfd2l0aF9zYWZlX2N0eXBlCisjdW5kZWYgaXNwdW5jdAorI2RlZmluZSBpc3B1bmN0KGMpIGRvX25vdF91c2VfaXNwdW5jdF93aXRoX3NhZmVfY3R5cGUKKyN1bmRlZiBpc3NwYWNlCisjZGVmaW5lIGlzc3BhY2UoYykgZG9fbm90X3VzZV9pc3NwYWNlX3dpdGhfc2FmZV9jdHlwZQorI3VuZGVmIGlzdXBwZXIKKyNkZWZpbmUgaXN1cHBlcihjKSBkb19ub3RfdXNlX2lzdXBwZXJfd2l0aF9zYWZlX2N0eXBlCisjdW5kZWYgaXN4ZGlnaXQKKyNkZWZpbmUgaXN4ZGlnaXQoYykgZG9fbm90X3VzZV9pc3hkaWdpdF93aXRoX3NhZmVfY3R5cGUKKyN1bmRlZiB0b3VwcGVyCisjZGVmaW5lIHRvdXBwZXIoYykgZG9fbm90X3VzZV90b3VwcGVyX3dpdGhfc2FmZV9jdHlwZQorI3VuZGVmIHRvbG93ZXIKKyNkZWZpbmUgdG9sb3dlcihjKSBkb19ub3RfdXNlX3RvbG93ZXJfd2l0aF9zYWZlX2N0eXBlCisKKyNlbmRpZiAvKiBTQUZFX0NUWVBFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zYW5pdGl6ZXIuZGVmIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3Nhbml0aXplci5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmODdlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zYW5pdGl6ZXIuZGVmCkBAIC0wLDAgKzEsMjg1IEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGFuZCBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAgIEFkZHJlc3MgU2FuaXRpemVyIGFuZCBUaHJlYWQgU2FuaXRpemVyIGJ1aWx0aW5zIHVzZWQgaW4gdGhlIEdOVSBjb21waWxlci4KKyAgIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUsIHlvdSBzaG91bGQgZGVmaW5lIGEgbWFjcm86CisKKyAgICAgREVGX1NBTklUSVpFUl9CVUlMVElOIChFTlVNLCBOQU1FLCBUWVBFLCBBVFRSUykKKworICAgU2VlIGJ1aWx0aW5zLmRlZiBmb3IgZGV0YWlscy4KKyAgIFRoZSBidWlsdGlucyBhcmUgY3JlYXRlZCBieSB0aGUgQy1mYW1pbHkgb2YgRkVzIGluIGMtZmFtaWx5L2MtY29tbW9uLmMsCisgICBmb3Igb3RoZXIgRkVzIGJ5IGFzYW4uYy4gICovCisKKy8qIEFkZHJlc3MgU2FuaXRpemVyICovCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9JTklULCAiX19hc2FuX2luaXRfdjEiLAorCQkgICAgICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorLyogRG8gbm90IHJlb3JkZXIgdGhlIEJVSUxUX0lOX0FTQU5fUkVQT1JUKiBidWlsdGlucywgZS5nLiBjZmdjbGVhbnVwLmMKKyAgIHJlbGllcyBvbiB0aGlzIG9yZGVyLiAgKi8KK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9BU0FOX1JFUE9SVF9MT0FEMSwgIl9fYXNhbl9yZXBvcnRfbG9hZDEiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9UTVBVUkVfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9SRVBPUlRfTE9BRDIsICJfX2FzYW5fcmVwb3J0X2xvYWQyIiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfVE1QVVJFX05PUkVUVVJOX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX0FTQU5fUkVQT1JUX0xPQUQ0LCAiX19hc2FuX3JlcG9ydF9sb2FkNCIsCisJCSAgICAgIEJUX0ZOX1ZPSURfUFRSLCBBVFRSX1RNUFVSRV9OT1JFVFVSTl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9BU0FOX1JFUE9SVF9MT0FEOCwgIl9fYXNhbl9yZXBvcnRfbG9hZDgiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9UTVBVUkVfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9SRVBPUlRfTE9BRDE2LCAiX19hc2FuX3JlcG9ydF9sb2FkMTYiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9UTVBVUkVfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9SRVBPUlRfU1RPUkUxLCAiX19hc2FuX3JlcG9ydF9zdG9yZTEiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9UTVBVUkVfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9SRVBPUlRfU1RPUkUyLCAiX19hc2FuX3JlcG9ydF9zdG9yZTIiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9UTVBVUkVfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9SRVBPUlRfU1RPUkU0LCAiX19hc2FuX3JlcG9ydF9zdG9yZTQiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9UTVBVUkVfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9SRVBPUlRfU1RPUkU4LCAiX19hc2FuX3JlcG9ydF9zdG9yZTgiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9UTVBVUkVfTk9SRVRVUk5fTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9SRVBPUlRfU1RPUkUxNiwgIl9fYXNhbl9yZXBvcnRfc3RvcmUxNiIsCisJCSAgICAgIEJUX0ZOX1ZPSURfUFRSLCBBVFRSX1RNUFVSRV9OT1JFVFVSTl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9BU0FOX1JFR0lTVEVSX0dMT0JBTFMsCisJCSAgICAgICJfX2FzYW5fcmVnaXN0ZXJfZ2xvYmFscyIsCisJCSAgICAgIEJUX0ZOX1ZPSURfUFRSX1BUUk1PREUsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fQVNBTl9VTlJFR0lTVEVSX0dMT0JBTFMsCisJCSAgICAgICJfX2FzYW5fdW5yZWdpc3Rlcl9nbG9iYWxzIiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFJfUFRSTU9ERSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9BU0FOX0hBTkRMRV9OT19SRVRVUk4sCisJCSAgICAgICJfX2FzYW5faGFuZGxlX25vX3JldHVybiIsCisJCSAgICAgIEJUX0ZOX1ZPSUQsIEFUVFJfVE1QVVJFX05PVEhST1dfTEVBRl9MSVNUKQorCisvKiBUaHJlYWQgU2FuaXRpemVyICovCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9JTklULCAiX190c2FuX2luaXQiLCAKKwkJICAgICAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0ZVTkNfRU5UUlksICJfX3RzYW5fZnVuY19lbnRyeSIsCisJCSAgICAgIEJUX0ZOX1ZPSURfUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fRlVOQ19FWElULCAiX190c2FuX2Z1bmNfZXhpdCIsCisJCSAgICAgIEJUX0ZOX1ZPSURfUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fVlBUUl9VUERBVEUsICJfX3RzYW5fdnB0cl91cGRhdGUiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX1JFQUQxLCAiX190c2FuX3JlYWQxIiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9SRUFEMiwgIl9fdHNhbl9yZWFkMiIsCisJCSAgICAgIEJUX0ZOX1ZPSURfUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fUkVBRDQsICJfX3RzYW5fcmVhZDQiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX1JFQUQ4LCAiX190c2FuX3JlYWQ4IiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9SRUFEMTYsICJfX3RzYW5fcmVhZDE2IiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9XUklURTEsICJfX3RzYW5fd3JpdGUxIiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9XUklURTIsICJfX3RzYW5fd3JpdGUyIiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9XUklURTQsICJfX3RzYW5fd3JpdGU0IiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9XUklURTgsICJfX3RzYW5fd3JpdGU4IiwKKwkJICAgICAgQlRfRk5fVk9JRF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9XUklURTE2LCAiX190c2FuX3dyaXRlMTYiLAorCQkgICAgICBCVF9GTl9WT0lEX1BUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDOF9MT0FELAorCQkgICAgICAiX190c2FuX2F0b21pYzhfbG9hZCIsCisJCSAgICAgIEJUX0ZOX0kxX0NPTlNUX1ZQVFJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMTZfTE9BRCwKKwkJICAgICAgIl9fdHNhbl9hdG9taWMxNl9sb2FkIiwKKwkJICAgICAgQlRfRk5fSTJfQ09OU1RfVlBUUl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMzMl9MT0FELAorCQkgICAgICAiX190c2FuX2F0b21pYzMyX2xvYWQiLAorCQkgICAgICBCVF9GTl9JNF9DT05TVF9WUFRSX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzY0X0xPQUQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljNjRfbG9hZCIsCisJCSAgICAgIEJUX0ZOX0k4X0NPTlNUX1ZQVFJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMTI4X0xPQUQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMTI4X2xvYWQiLAorCQkgICAgICBCVF9GTl9JMTZfQ09OU1RfVlBUUl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzhfU1RPUkUsCisJCSAgICAgICJfX3RzYW5fYXRvbWljOF9zdG9yZSIsCisJCSAgICAgIEJUX0ZOX1ZPSURfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMxNl9TVE9SRSwKKwkJICAgICAgIl9fdHNhbl9hdG9taWMxNl9zdG9yZSIsCisJCSAgICAgIEJUX0ZOX1ZPSURfVlBUUl9JMl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMzMl9TVE9SRSwKKwkJICAgICAgIl9fdHNhbl9hdG9taWMzMl9zdG9yZSIsCisJCSAgICAgIEJUX0ZOX1ZPSURfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM2NF9TVE9SRSwKKwkJICAgICAgIl9fdHNhbl9hdG9taWM2NF9zdG9yZSIsCisJCSAgICAgIEJUX0ZOX1ZPSURfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMxMjhfU1RPUkUsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMTI4X3N0b3JlIiwKKwkJICAgICAgQlRfRk5fVk9JRF9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzhfRVhDSEFOR0UsCisJCSAgICAgICJfX3RzYW5fYXRvbWljOF9leGNoYW5nZSIsCisJCSAgICAgIEJUX0ZOX0kxX1ZQVFJfSTFfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMTZfRVhDSEFOR0UsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMTZfZXhjaGFuZ2UiLAorCQkgICAgICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzMyX0VYQ0hBTkdFLAorCQkgICAgICAiX190c2FuX2F0b21pYzMyX2V4Y2hhbmdlIiwKKwkJICAgICAgQlRfRk5fSTRfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM2NF9FWENIQU5HRSwKKwkJICAgICAgIl9fdHNhbl9hdG9taWM2NF9leGNoYW5nZSIsCisJCSAgICAgIEJUX0ZOX0k4X1ZQVFJfSThfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMTI4X0VYQ0hBTkdFLAorCQkgICAgICAiX190c2FuX2F0b21pYzEyOF9leGNoYW5nZSIsCisJCSAgICAgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzhfRkVUQ0hfQURELAorCQkgICAgICAiX190c2FuX2F0b21pYzhfZmV0Y2hfYWRkIiwKKwkJICAgICAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMxNl9GRVRDSF9BREQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMTZfZmV0Y2hfYWRkIiwKKwkJICAgICAgQlRfRk5fSTJfVlBUUl9JMl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMzMl9GRVRDSF9BREQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMzJfZmV0Y2hfYWRkIiwKKwkJICAgICAgQlRfRk5fSTRfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM2NF9GRVRDSF9BREQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljNjRfZmV0Y2hfYWRkIiwKKwkJICAgICAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMxMjhfRkVUQ0hfQURELAorCQkgICAgICAiX190c2FuX2F0b21pYzEyOF9mZXRjaF9hZGQiLAorCQkgICAgICBCVF9GTl9JMTZfVlBUUl9JMTZfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM4X0ZFVENIX1NVQiwKKwkJICAgICAgIl9fdHNhbl9hdG9taWM4X2ZldGNoX3N1YiIsCisJCSAgICAgIEJUX0ZOX0kxX1ZQVFJfSTFfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMTZfRkVUQ0hfU1VCLAorCQkgICAgICAiX190c2FuX2F0b21pYzE2X2ZldGNoX3N1YiIsCisJCSAgICAgIEJUX0ZOX0kyX1ZQVFJfSTJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMzJfRkVUQ0hfU1VCLAorCQkgICAgICAiX190c2FuX2F0b21pYzMyX2ZldGNoX3N1YiIsCisJCSAgICAgIEJUX0ZOX0k0X1ZQVFJfSTRfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDNjRfRkVUQ0hfU1VCLAorCQkgICAgICAiX190c2FuX2F0b21pYzY0X2ZldGNoX3N1YiIsCisJCSAgICAgIEJUX0ZOX0k4X1ZQVFJfSThfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMTI4X0ZFVENIX1NVQiwKKwkJICAgICAgIl9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfc3ViIiwKKwkJICAgICAgQlRfRk5fSTE2X1ZQVFJfSTE2X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDOF9GRVRDSF9BTkQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljOF9mZXRjaF9hbmQiLAorCQkgICAgICBCVF9GTl9JMV9WUFRSX0kxX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzE2X0ZFVENIX0FORCwKKwkJICAgICAgIl9fdHNhbl9hdG9taWMxNl9mZXRjaF9hbmQiLAorCQkgICAgICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzMyX0ZFVENIX0FORCwKKwkJICAgICAgIl9fdHNhbl9hdG9taWMzMl9mZXRjaF9hbmQiLAorCQkgICAgICBCVF9GTl9JNF9WUFRSX0k0X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzY0X0ZFVENIX0FORCwKKwkJICAgICAgIl9fdHNhbl9hdG9taWM2NF9mZXRjaF9hbmQiLAorCQkgICAgICBCVF9GTl9JOF9WUFRSX0k4X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzEyOF9GRVRDSF9BTkQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMTI4X2ZldGNoX2FuZCIsCisJCSAgICAgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzhfRkVUQ0hfT1IsCisJCSAgICAgICJfX3RzYW5fYXRvbWljOF9mZXRjaF9vciIsCisJCSAgICAgIEJUX0ZOX0kxX1ZQVFJfSTFfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMTZfRkVUQ0hfT1IsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMTZfZmV0Y2hfb3IiLAorCQkgICAgICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzMyX0ZFVENIX09SLAorCQkgICAgICAiX190c2FuX2F0b21pYzMyX2ZldGNoX29yIiwKKwkJICAgICAgQlRfRk5fSTRfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM2NF9GRVRDSF9PUiwKKwkJICAgICAgIl9fdHNhbl9hdG9taWM2NF9mZXRjaF9vciIsCisJCSAgICAgIEJUX0ZOX0k4X1ZQVFJfSThfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMTI4X0ZFVENIX09SLAorCQkgICAgICAiX190c2FuX2F0b21pYzEyOF9mZXRjaF9vciIsCisJCSAgICAgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzhfRkVUQ0hfWE9SLAorCQkgICAgICAiX190c2FuX2F0b21pYzhfZmV0Y2hfeG9yIiwKKwkJICAgICAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMxNl9GRVRDSF9YT1IsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMTZfZmV0Y2hfeG9yIiwKKwkJICAgICAgQlRfRk5fSTJfVlBUUl9JMl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMzMl9GRVRDSF9YT1IsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMzJfZmV0Y2hfeG9yIiwKKwkJICAgICAgQlRfRk5fSTRfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM2NF9GRVRDSF9YT1IsCisJCSAgICAgICJfX3RzYW5fYXRvbWljNjRfZmV0Y2hfeG9yIiwKKwkJICAgICAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMxMjhfRkVUQ0hfWE9SLAorCQkgICAgICAiX190c2FuX2F0b21pYzEyOF9mZXRjaF94b3IiLAorCQkgICAgICBCVF9GTl9JMTZfVlBUUl9JMTZfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM4X0ZFVENIX05BTkQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljOF9mZXRjaF9uYW5kIiwKKwkJICAgICAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMxNl9GRVRDSF9OQU5ELAorCQkgICAgICAiX190c2FuX2F0b21pYzE2X2ZldGNoX25hbmQiLAorCQkgICAgICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzMyX0ZFVENIX05BTkQsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMzJfZmV0Y2hfbmFuZCIsCisJCSAgICAgIEJUX0ZOX0k0X1ZQVFJfSTRfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDNjRfRkVUQ0hfTkFORCwKKwkJICAgICAgIl9fdHNhbl9hdG9taWM2NF9mZXRjaF9uYW5kIiwKKwkJICAgICAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMxMjhfRkVUQ0hfTkFORCwKKwkJICAgICAgIl9fdHNhbl9hdG9taWMxMjhfZmV0Y2hfbmFuZCIsCisJCSAgICAgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzhfQ09NUEFSRV9FWENIQU5HRV9TVFJPTkcsCisJCSAgICAgICJfX3RzYW5fYXRvbWljOF9jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyIsCisJCSAgICAgIEJUX0ZOX0JPT0xfVlBUUl9QVFJfSTFfSU5UX0lOVCwKKwkJICAgICAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzE2X0NPTVBBUkVfRVhDSEFOR0VfU1RST05HLAorCQkgICAgICAiX190c2FuX2F0b21pYzE2X2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nIiwKKwkJICAgICAgQlRfRk5fQk9PTF9WUFRSX1BUUl9JMl9JTlRfSU5ULAorCQkgICAgICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDMzJfQ09NUEFSRV9FWENIQU5HRV9TVFJPTkcsCisJCSAgICAgICJfX3RzYW5fYXRvbWljMzJfY29tcGFyZV9leGNoYW5nZV9zdHJvbmciLAorCQkgICAgICBCVF9GTl9CT09MX1ZQVFJfUFRSX0k0X0lOVF9JTlQsCisJCSAgICAgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM2NF9DT01QQVJFX0VYQ0hBTkdFX1NUUk9ORywKKwkJICAgICAgIl9fdHNhbl9hdG9taWM2NF9jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyIsCisJCSAgICAgIEJUX0ZOX0JPT0xfVlBUUl9QVFJfSThfSU5UX0lOVCwKKwkJICAgICAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzEyOF9DT01QQVJFX0VYQ0hBTkdFX1NUUk9ORywKKwkJICAgICAgIl9fdHNhbl9hdG9taWMxMjhfY29tcGFyZV9leGNoYW5nZV9zdHJvbmciLAorCQkgICAgICBCVF9GTl9CT09MX1ZQVFJfUFRSX0kxNl9JTlRfSU5ULAorCQkgICAgICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUM4X0NPTVBBUkVfRVhDSEFOR0VfV0VBSywKKwkJICAgICAgIl9fdHNhbl9hdG9taWM4X2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayIsCisJCSAgICAgIEJUX0ZOX0JPT0xfVlBUUl9QVFJfSTFfSU5UX0lOVCwKKwkJICAgICAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzE2X0NPTVBBUkVfRVhDSEFOR0VfV0VBSywKKwkJICAgICAgIl9fdHNhbl9hdG9taWMxNl9jb21wYXJlX2V4Y2hhbmdlX3dlYWsiLAorCQkgICAgICBCVF9GTl9CT09MX1ZQVFJfUFRSX0kyX0lOVF9JTlQsCisJCSAgICAgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU0FOSVRJWkVSX0JVSUxUSU4oQlVJTFRfSU5fVFNBTl9BVE9NSUMzMl9DT01QQVJFX0VYQ0hBTkdFX1dFQUssCisJCSAgICAgICJfX3RzYW5fYXRvbWljMzJfY29tcGFyZV9leGNoYW5nZV93ZWFrIiwKKwkJICAgICAgQlRfRk5fQk9PTF9WUFRSX1BUUl9JNF9JTlRfSU5ULAorCQkgICAgICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDNjRfQ09NUEFSRV9FWENIQU5HRV9XRUFLLAorCQkgICAgICAiX190c2FuX2F0b21pYzY0X2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayIsCisJCSAgICAgIEJUX0ZOX0JPT0xfVlBUUl9QVFJfSThfSU5UX0lOVCwKKwkJICAgICAgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQzEyOF9DT01QQVJFX0VYQ0hBTkdFX1dFQUssCisJCSAgICAgICJfX3RzYW5fYXRvbWljMTI4X2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayIsCisJCSAgICAgIEJUX0ZOX0JPT0xfVlBUUl9QVFJfSTE2X0lOVF9JTlQsCisJCSAgICAgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TQU5JVElaRVJfQlVJTFRJTihCVUlMVF9JTl9UU0FOX0FUT01JQ19USFJFQURfRkVOQ0UsCisJCSAgICAgICJfX3RzYW5fYXRvbWljX3RocmVhZF9mZW5jZSIsCisJCSAgICAgIEJUX0ZOX1ZPSURfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NBTklUSVpFUl9CVUlMVElOKEJVSUxUX0lOX1RTQU5fQVRPTUlDX1NJR05BTF9GRU5DRSwKKwkJICAgICAgIl9fdHNhbl9hdG9taWNfc2lnbmFsX2ZlbmNlIiwKKwkJICAgICAgQlRfRk5fVk9JRF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvc2JpdG1hcC5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3NiaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2YxMmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3NiaXRtYXAuaApAQCAtMCwwICsxLDI2MSBAQAorLyogU2ltcGxlIGJpdG1hcHMuCisgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1NCSVRNQVBfSAorI2RlZmluZSBHQ0NfU0JJVE1BUF9ICisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHNldHMgdXNpbmcgc2ltcGxlIGJpdG1hcCB2ZWN0b3JzLgorCisgICBUaGlzIHNldCByZXByZXNlbnRhdGlvbiBpcyBzdWl0YWJsZSBmb3Igbm9uLXNwYXJzZSBzZXRzIHdpdGggYSBrbm93bgorICAgKGEgcHJpb3JpKSB1bml2ZXJzZS4gIFRoZSBzZXQgaXMgcmVwcmVzZW50ZWQgYXMgYSBzaW1wbGUgYXJyYXkgb2YgdGhlCisgICBob3N0J3MgZmFzdGVzdCB1bnNpZ25lZCBpbnRlZ2VyLiAgRm9yIGEgZ2l2ZW4gbWVtYmVyIEkgaW4gdGhlIHNldDoKKyAgICAgLSB0aGUgZWxlbWVudCBmb3IgSSB3aWxsIGJlIGF0IHNiaXRtYXBbSSAvIChiaXRzIHBlciBlbGVtZW50KV0KKyAgICAgLSB0aGUgcG9zaXRpb24gZm9yIEkgd2l0aGluIGVsZW1lbnQgaXMgSSAlIChiaXRzIHBlciBlbGVtZW50KQorCisgICBUaGlzIHJlcHJlc2VudGF0aW9uIGlzIHZlcnkgc3BhY2UtZWZmaWNpZW50IGZvciBsYXJnZSBub24tc3BhcnNlIHNldHMKKyAgIHdpdGggcmFuZG9tIGFjY2VzcyBwYXR0ZXJucy4KKworICAgVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgaW4gTygxKSB0aW1lOgorCisgICAgICogc2V0X3NpemUJCQk6IFNCSVRNQVBfU0laRQorICAgICAqIG1lbWJlcl9wCQkJOiBiaXRtYXBfYml0X3AKKyAgICAgKiBhZGRfbWVtYmVyCQk6IGJpdG1hcF9zZXRfYml0CisgICAgICogcmVtb3ZlX21lbWJlcgkJOiBiaXRtYXBfY2xlYXJfYml0CisKKyAgIE1vc3Qgb3RoZXIgb3BlcmF0aW9ucyBvbiB0aGlzIHNldCByZXByZXNlbnRhdGlvbiBhcmUgTyhVKSB3aGVyZSBVIGlzCisgICB0aGUgc2l6ZSBvZiB0aGUgc2V0IHVuaXZlcnNlOgorCisgICAgICogY2xlYXIJCQk6IGJpdG1hcF9jbGVhcgorICAgICAqIGNob29zZV9vbmUJCTogYml0bWFwX2ZpcnN0X3NldF9iaXQgLworCQkJCSAgYml0bWFwX2xhc3Rfc2V0X2JpdAorICAgICAqIGZvcmFsbAkJCTogRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQCisgICAgICogc2V0X2NvcHkJCQk6IGJpdG1hcF9jb3B5CisgICAgICogc2V0X2ludGVyc2VjdGlvbgkJOiBiaXRtYXBfYW5kCisgICAgICogc2V0X3VuaW9uCQk6IGJpdG1hcF9pb3IKKyAgICAgKiBzZXRfZGlmZmVyZW5jZQkJOiBiaXRtYXBfYW5kX2NvbXBsCisgICAgICogc2V0X2Rpc2p1Y3Rpb24JCTogKG5vdCBpbXBsZW1lbnRlZCkKKyAgICAgKiBzZXRfY29tcGFyZQkJOiBiaXRtYXBfZXF1YWxfcAorCisgICBTb21lIG9wZXJhdGlvbnMgb24gMyBzZXRzIHRoYXQgb2NjdXIgZnJlcXVlbnRseSBpbiBpbiBkYXRhIGZsb3cgcHJvYmxlbXMKKyAgIGFyZSBhbHNvIGltcGxlbWVudGVkOgorCisgICAgICAqIEEgfCAoQiAmIEMpCQk6IGJpdG1hcF9vcl9hbmQKKyAgICAgICogQSB8IChCICYgfkMpCQk6IGJpdG1hcF9pb3JfYW5kX2NvbXBsCisgICAgICAqIEEgJiAoQiB8IEMpCQk6IGJpdG1hcF9hbmRfb3IKKworICAgTW9zdCBvZiB0aGUgc2V0IGZ1bmN0aW9ucyBoYXZlIHR3byB2YXJpYW50czogT25lIHRoYXQgcmV0dXJucyBub24temVybworICAgaWYgbWVtYmVycyB3ZXJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgdGFyZ2V0IHNldCwgYW5kIG9uZSB0aGF0IGp1c3QKKyAgIHBlcmZvcm1zIHRoZSBvcGVyYXRpb24gd2l0aG91dCBmZWVkYmFjay4gIFRoZSBmb3JtZXIgb3BlcmF0aW9ucyBhcmUgYQorICAgYml0IG1vcmUgZXhwZW5zaXZlIGJ1dCB0aGUgcmVzdWx0IGNhbiBvZnRlbiBiZSB1c2VkIHRvIGF2b2lkIGl0ZXJhdGlvbnMKKyAgIG9uIG90aGVyIHNldHMuCisKKyAgIEFsbG9jYXRpbmcgYSBiaXRtYXAgaXMgZG9uZSB3aXRoIHNiaXRtYXBfYWxsb2MsIGFuZCByZXNpemluZyBpcworICAgcGVyZm9ybWVkIHdpdGggc2JpdG1hcF9yZXNpemUuCisKKyAgIFRoZSBzdG9yYWdlIHJlcXVpcmVtZW50cyBmb3Igc2ltcGxlIGJpdG1hcCBzZXRzIGlzIE8oVSkgd2hlcmUgVSBpcyB0aGUKKyAgIHNpemUgb2YgdGhlIHNldCB1bml2ZXJzZSAoY29sbG9xdWlhbGx5IHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgYml0bWFwKS4KKworICAgVGhpcyBzZXQgcmVwcmVzZW50YXRpb24gd29ya3Mgd2VsbCBmb3IgcmVsYXRpdmVseSBzbWFsbCBkYXRhIGZsb3cgcHJvYmxlbXMKKyAgICh0aGVyZSBhcmUgc3BlY2lhbCByb3V0aW5lcyBmb3IgdGhhdCwgc2VlIHNiaXRtYXBfdmVjdG9yXyopLiAgVGhlIHNldAorICAgb3BlcmF0aW9ucyBjYW4gYmUgdmVjdG9yaXplZCBhbmQgdGhlcmUgaXMgYWxtb3N0IG5vIGNvbXB1dGF0aW5nIG92ZXJoZWFkLAorICAgc28gdGhhdCBldmVuIHNwYXJzZSBzaW1wbGUgYml0bWFwIHNldHMgb3V0cGVyZm9ybSBkZWRpY2F0ZWQgc3BhcnNlIHNldAorICAgcmVwcmVzZW50YXRpb25zIGxpa2UgbGlua2VkLWxpc3QgYml0bWFwcy4gIEZvciBsYXJnZXIgcHJvYmxlbXMsIHRoZSBzaXplCisgICBvdmVyaGVhZCBvZiBzaW1wbGUgYml0bWFwIHNldHMgZ2V0cyB0b28gaGlnaCBhbmQgb3RoZXIgc2V0IHJlcHJlc2VudGF0aW9ucworICAgaGF2ZSB0byBiZSB1c2VkLiAgKi8KKworI2RlZmluZSBTQklUTUFQX0VMVF9CSVRTIChIT1NUX0JJVFNfUEVSX1dJREVTVF9GQVNUX0lOVCAqIDF1KQorI2RlZmluZSBTQklUTUFQX0VMVF9UWVBFIHVuc2lnbmVkIEhPU1RfV0lERVNUX0ZBU1RfSU5UCisKK3N0cnVjdCBzaW1wbGVfYml0bWFwX2RlZgoreworICB1bnNpZ25lZCBjaGFyICpwb3Bjb3VudDsgICAgICAvKiBQb3B1bGF0aW9uIGNvdW50LiAgKi8KKyAgdW5zaWduZWQgaW50IG5fYml0czsJCS8qIE51bWJlciBvZiBiaXRzLiAgKi8KKyAgdW5zaWduZWQgaW50IHNpemU7CQkvKiBTaXplIGluIGVsZW1lbnRzLiAgKi8KKyAgU0JJVE1BUF9FTFRfVFlQRSBlbG1zWzFdOwkvKiBUaGUgZWxlbWVudHMuICAqLworfTsKKworLyogUmV0dXJuIHRoZSBzZXQgc2l6ZSBuZWVkZWQgZm9yIE4gZWxlbWVudHMuICAqLworI2RlZmluZSBTQklUTUFQX1NFVF9TSVpFKE4pICgoKE4pICsgU0JJVE1BUF9FTFRfQklUUyAtIDEpIC8gU0JJVE1BUF9FTFRfQklUUykKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyBpbiBCSVRNQVAuICAqLworI2RlZmluZSBTQklUTUFQX1NJWkUoQklUTUFQKSAoKEJJVE1BUCktPm5fYml0cykKKworLyogVGVzdCBpZiBiaXQgbnVtYmVyIGJpdG5vIGluIHRoZSBiaXRtYXAgaXMgc2V0LiAgKi8KK3N0YXRpYyBpbmxpbmUgU0JJVE1BUF9FTFRfVFlQRQorYml0bWFwX2JpdF9wIChjb25zdF9zYml0bWFwIG1hcCwgaW50IGJpdG5vKQoreworICBzaXplX3QgaSA9IGJpdG5vIC8gU0JJVE1BUF9FTFRfQklUUzsKKyAgdW5zaWduZWQgaW50IHMgPSBiaXRubyAlIFNCSVRNQVBfRUxUX0JJVFM7CisgIHJldHVybiAobWFwLT5lbG1zW2ldID4+IHMpICYgKFNCSVRNQVBfRUxUX1RZUEUpIDE7Cit9CisKKy8qIFNldCBiaXQgbnVtYmVyIEJJVE5PIGluIHRoZSBzYml0bWFwIE1BUC4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0bWFwX3NldF9iaXQgKHNiaXRtYXAgbWFwLCBpbnQgYml0bm8pCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCEgbWFwLT5wb3Bjb3VudCk7CisgIG1hcC0+ZWxtc1tiaXRubyAvIFNCSVRNQVBfRUxUX0JJVFNdCisgICAgfD0gKFNCSVRNQVBfRUxUX1RZUEUpIDEgPDwgKGJpdG5vKSAlIFNCSVRNQVBfRUxUX0JJVFM7Cit9CisKKy8qIFJlc2V0IGJpdCBudW1iZXIgQklUTk8gaW4gdGhlIHNiaXRtYXAgTUFQLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitiaXRtYXBfY2xlYXJfYml0IChzYml0bWFwIG1hcCwgaW50IGJpdG5vKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghIG1hcC0+cG9wY291bnQpOworICBtYXAtPmVsbXNbYml0bm8gLyBTQklUTUFQX0VMVF9CSVRTXQorICAgICY9IH4oKFNCSVRNQVBfRUxUX1RZUEUpIDEgPDwgKGJpdG5vKSAlIFNCSVRNQVBfRUxUX0JJVFMpOworfQorCisvKiBUaGUgaXRlcmF0b3IgZm9yIHNiaXRtYXAuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGUgcG9pbnRlciB0byB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYml0bWFwLiAgKi8KKyAgY29uc3QgU0JJVE1BUF9FTFRfVFlQRSAqcHRyOworCisgIC8qIFRoZSBzaXplIG9mIHRoZSBiaXRtYXAuICAqLworICB1bnNpZ25lZCBpbnQgc2l6ZTsKKworICAvKiBUaGUgY3VycmVudCB3b3JkIGluZGV4LiAgKi8KKyAgdW5zaWduZWQgaW50IHdvcmRfbnVtOworCisgIC8qIFRoZSBjdXJyZW50IGJpdCBpbmRleCAobm90IG1vZHVsbyBTQklUTUFQX0VMVF9CSVRTKS4gICovCisgIHVuc2lnbmVkIGludCBiaXRfbnVtOworCisgIC8qIFRoZSB3b3JkcyBjdXJyZW50bHkgdmlzaXRlZC4gICovCisgIFNCSVRNQVBfRUxUX1RZUEUgd29yZDsKK30gc2JpdG1hcF9pdGVyYXRvcjsKKworLyogSW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IgSSB3aXRoIHNiaXRtYXAgQk1QIGFuZCB0aGUgaW5pdGlhbCBpbmRleAorICAgTUlOLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitibXBfaXRlcl9zZXRfaW5pdCAoc2JpdG1hcF9pdGVyYXRvciAqaSwgY29uc3Rfc2JpdG1hcCBibXAsCisJCSAgIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkICpiaXRfbm8gQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgaS0+d29yZF9udW0gPSBtaW4gLyAodW5zaWduZWQgaW50KSBTQklUTUFQX0VMVF9CSVRTOworICBpLT5iaXRfbnVtID0gbWluOworICBpLT5zaXplID0gYm1wLT5zaXplOworICBpLT5wdHIgPSBibXAtPmVsbXM7CisKKyAgaWYgKGktPndvcmRfbnVtID49IGktPnNpemUpCisgICAgaS0+d29yZCA9IDA7CisgIGVsc2UKKyAgICBpLT53b3JkID0gKGktPnB0cltpLT53b3JkX251bV0KKwkgICAgICAgPj4gKGktPmJpdF9udW0gJSAodW5zaWduZWQgaW50KSBTQklUTUFQX0VMVF9CSVRTKSk7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgbW9yZSBiaXRzIHRvIHZpc2l0LCBpbiB3aGljaCBjYXNlICpOIGlzIHNldAorICAgdG8gdGhlIGluZGV4IG9mIHRoZSBiaXQgdG8gYmUgdmlzaXRlZC4gIE90aGVyd2lzZSwgcmV0dXJuCisgICBmYWxzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorYm1wX2l0ZXJfc2V0IChzYml0bWFwX2l0ZXJhdG9yICppLCB1bnNpZ25lZCBpbnQgKm4pCit7CisgIC8qIFNraXAgd29yZHMgdGhhdCBhcmUgemVyb3MuICAqLworICBmb3IgKDsgaS0+d29yZCA9PSAwOyBpLT53b3JkID0gaS0+cHRyW2ktPndvcmRfbnVtXSkKKyAgICB7CisgICAgICBpLT53b3JkX251bSsrOworCisgICAgICAvKiBJZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCwgYnJlYWsuICAqLworICAgICAgaWYgKGktPndvcmRfbnVtID49IGktPnNpemUpCisJcmV0dXJuIGZhbHNlOworCisgICAgICBpLT5iaXRfbnVtID0gaS0+d29yZF9udW0gKiBTQklUTUFQX0VMVF9CSVRTOworICAgIH0KKworICAvKiBTa2lwIGJpdHMgdGhhdCBhcmUgemVyby4gICovCisgIGZvciAoOyAoaS0+d29yZCAmIDEpID09IDA7IGktPndvcmQgPj49IDEpCisgICAgaS0+Yml0X251bSsrOworCisgICpuID0gaS0+Yml0X251bTsKKworICByZXR1cm4gdHJ1ZTsKK30KKworLyogQWR2YW5jZSB0byB0aGUgbmV4dCBiaXQuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2JtcF9pdGVyX25leHQgKHNiaXRtYXBfaXRlcmF0b3IgKmksIHVuc2lnbmVkICpiaXRfbm8gQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgaS0+d29yZCA+Pj0gMTsKKyAgaS0+Yml0X251bSsrOworfQorCisvKiBMb29wIG92ZXIgYWxsIGVsZW1lbnRzIG9mIFNCSVRNQVAsIHN0YXJ0aW5nIHdpdGggTUlOLiAgSW4gZWFjaAorICAgaXRlcmF0aW9uLCBOIGlzIHNldCB0byB0aGUgaW5kZXggb2YgdGhlIGJpdCBiZWluZyB2aXNpdGVkLiAgSVRFUiBpcworICAgYW4gaW5zdGFuY2Ugb2Ygc2JpdG1hcF9pdGVyYXRvciB1c2VkIHRvIGl0ZXJhdGUgdGhlIGJpdG1hcC4gICovCisKKyNpZm5kZWYgRVhFQ1VURV9JRl9TRVRfSU5fQklUTUFQCisvKiBTZWUgYml0bWFwLmggZm9yIHRoZSBvdGhlciBkZWZpbml0aW9uIG9mIEVYRUNVVEVfSUZfU0VUX0lOX0JJVE1BUC4gICovCisjZGVmaW5lIEVYRUNVVEVfSUZfU0VUX0lOX0JJVE1BUChCSVRNQVAsIE1JTiwgQklUTlVNLCBJVEVSKQlcCisgIGZvciAoYm1wX2l0ZXJfc2V0X2luaXQgKCYoSVRFUiksIChCSVRNQVApLCAoTUlOKSwgJihCSVROVU0pKTsJXAorICAgICAgIGJtcF9pdGVyX3NldCAoJihJVEVSKSwgJihCSVROVU0pKTsJCQlcCisgICAgICAgYm1wX2l0ZXJfbmV4dCAoJihJVEVSKSwgJihCSVROVU0pKSkKKyNlbmRpZgorCitpbmxpbmUgdm9pZCBzYml0bWFwX2ZyZWUgKHNiaXRtYXAgbWFwKQoreworICBmcmVlIChtYXAtPnBvcGNvdW50KTsKKyAgZnJlZSAobWFwKTsKK30KKworaW5saW5lIHZvaWQgc2JpdG1hcF92ZWN0b3JfZnJlZSAoc2JpdG1hcCAqIHZlYykKK3sKKyAgZnJlZSAodmVjKTsKK30KKworZXh0ZXJuIHZvaWQgZHVtcF9iaXRtYXAgKEZJTEUgKiwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gdm9pZCBkdW1wX2JpdG1hcF9maWxlIChGSUxFICosIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIHZvaWQgZHVtcF9iaXRtYXBfdmVjdG9yIChGSUxFICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzYml0bWFwICosCisJCQkJIGludCk7CitleHRlcm4gc2JpdG1hcCBzYml0bWFwX2FsbG9jICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHNiaXRtYXAgc2JpdG1hcF9hbGxvY193aXRoX3BvcGNvdW50ICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHNiaXRtYXAgKnNiaXRtYXBfdmVjdG9yX2FsbG9jICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gc2JpdG1hcCBzYml0bWFwX3Jlc2l6ZSAoc2JpdG1hcCwgdW5zaWduZWQgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgYml0bWFwX2NvcHkgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIGludCBiaXRtYXBfZXF1YWxfcCAoY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gYm9vbCBiaXRtYXBfZW1wdHlfcCAoY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gdm9pZCBiaXRtYXBfY2xlYXIgKHNiaXRtYXApOworZXh0ZXJuIHZvaWQgYml0bWFwX29uZXMgKHNiaXRtYXApOworZXh0ZXJuIHZvaWQgYml0bWFwX3ZlY3Rvcl9jbGVhciAoc2JpdG1hcCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYml0bWFwX3ZlY3Rvcl9vbmVzIChzYml0bWFwICosIHVuc2lnbmVkIGludCk7CisKK2V4dGVybiBib29sIGJpdG1hcF9pb3JfYW5kX2NvbXBsIChzYml0bWFwLCBjb25zdF9zYml0bWFwLAorCQkJCSAgICAgIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIHZvaWQgYml0bWFwX2FuZF9jb21wbCAoc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gdm9pZCBiaXRtYXBfbm90IChzYml0bWFwLCBjb25zdF9zYml0bWFwKTsKK2V4dGVybiBib29sIGJpdG1hcF9vcl9hbmQgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsCisJCQkJICAgICBjb25zdF9zYml0bWFwLCBjb25zdF9zYml0bWFwKTsKK2V4dGVybiBib29sIGJpdG1hcF9hbmRfb3IgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsCisJCQkJICAgICBjb25zdF9zYml0bWFwLCBjb25zdF9zYml0bWFwKTsKK2V4dGVybiBib29sIGJpdG1hcF9pbnRlcnNlY3RfcCAoY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gYm9vbCBiaXRtYXBfYW5kIChzYml0bWFwLCBjb25zdF9zYml0bWFwLCBjb25zdF9zYml0bWFwKTsKK2V4dGVybiBib29sIGJpdG1hcF9pb3IgKHNiaXRtYXAsIGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworZXh0ZXJuIGJvb2wgYml0bWFwX3hvciAoc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCwgY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gYm9vbCBiaXRtYXBfc3Vic2V0X3AgKGNvbnN0X3NiaXRtYXAsIGNvbnN0X3NiaXRtYXApOworCitleHRlcm4gaW50IGJpdG1hcF9maXJzdF9zZXRfYml0IChjb25zdF9zYml0bWFwKTsKK2V4dGVybiBpbnQgYml0bWFwX2xhc3Rfc2V0X2JpdCAoY29uc3Rfc2JpdG1hcCk7CisKK2V4dGVybiB2b2lkIGRlYnVnX2JpdG1hcCAoY29uc3Rfc2JpdG1hcCk7CitleHRlcm4gc2JpdG1hcCBzYml0bWFwX3JlYWxsb2MgKHNiaXRtYXAsIHVuc2lnbmVkIGludCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzYml0bWFwX3BvcGNvdW50IChjb25zdF9zYml0bWFwLCB1bnNpZ25lZCBsb25nKTsKKyNlbmRpZiAvKiAhIEdDQ19TQklUTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zcGxheS10cmVlLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvc3BsYXktdHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjEzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvc3BsYXktdHJlZS5oCkBAIC0wLDAgKzEsMTYxIEBACisvKiBBIHNwbGF5LXRyZWUgZGF0YXR5cGUuICAKKyAgIENvcHlyaWdodCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDA1LCAyMDA3LCAyMDA5LCAyMDEwCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IE1hcmsgTWl0Y2hlbGwgKG1hcmtAbWFya21pdGNoZWxsLmNvbSkuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKyAgIAorICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBGb3IgYW4gZWFzaWx5IHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHNwbGF5LXRyZWVzLCBzZWU6CisKKyAgICAgTGV3aXMsIEhhcnJ5IFIuIGFuZCBEZW5lbmJlcmcsIExhcnJ5LiAgRGF0YSBTdHJ1Y3R1cmVzIGFuZCBUaGVpcgorICAgICBBbGdvcml0aG1zLiAgSGFycGVyLUNvbGxpbnMsIEluYy4gIDE5OTEuICAKKworICAgVGhlIG1ham9yIGZlYXR1cmUgb2Ygc3BsYXkgdHJlZXMgaXMgdGhhdCBhbGwgYmFzaWMgdHJlZSBvcGVyYXRpb25zCisgICBhcmUgYW1vcnRpemVkIE8obG9nIG4pIHRpbWUgZm9yIGEgdHJlZSB3aXRoIG4gbm9kZXMuICAqLworCisjaWZuZGVmIF9TUExBWV9UUkVFX0gKKyNkZWZpbmUgX1NQTEFZX1RSRUVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpbmNsdWRlICJhbnNpZGVjbC5oIgorCisjaWZkZWYgSEFWRV9TVERJTlRfSAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCisjaWZuZGVmIEdUWQorI2RlZmluZSBHVFkoWCkKKyNlbmRpZgorCisvKiBVc2UgdHlwZWRlZnMgZm9yIHRoZSBrZXkgYW5kIGRhdGEgdHlwZXMgdG8gZmFjaWxpdGF0ZSBjaGFuZ2luZworICAgdGhlc2UgdHlwZXMsIGlmIG5lY2Vzc2FyeS4gIFRoZXNlIHR5cGVzIHNob3VsZCBiZSBzdWZmaWNpZW50bHkgd2lkZQorICAgdGhhdCBhbnkgcG9pbnRlciBvciBzY2FsYXIgY2FuIGJlIGNhc3QgdG8gdGhlc2UgdHlwZXMsIGFuZCB0aGVuCisgICBjYXN0IGJhY2ssIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uICAqLwordHlwZWRlZiB1aW50cHRyX3Qgc3BsYXlfdHJlZV9rZXk7Cit0eXBlZGVmIHVpbnRwdHJfdCBzcGxheV90cmVlX3ZhbHVlOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBhIG5vZGUgaW4gdGhlIHRyZWUuICAqLwordHlwZWRlZiBzdHJ1Y3Qgc3BsYXlfdHJlZV9ub2RlX3MgKnNwbGF5X3RyZWVfbm9kZTsKKworLyogVGhlIHR5cGUgb2YgYSBmdW5jdGlvbiB3aGljaCBjb21wYXJlcyB0d28gc3BsYXktdHJlZSBrZXlzLiAgVGhlCisgICBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHZhbHVlcyBhcyBmb3IgcXNvcnQuICAqLwordHlwZWRlZiBpbnQgKCpzcGxheV90cmVlX2NvbXBhcmVfZm4pIChzcGxheV90cmVlX2tleSwgc3BsYXlfdHJlZV9rZXkpOworCisvKiBUaGUgdHlwZSBvZiBhIGZ1bmN0aW9uIHVzZWQgdG8gZGVhbGxvY2F0ZSBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQKKyAgIHdpdGggdGhlIGtleS4gICovCit0eXBlZGVmIHZvaWQgKCpzcGxheV90cmVlX2RlbGV0ZV9rZXlfZm4pIChzcGxheV90cmVlX2tleSk7CisKKy8qIFRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gdXNlZCB0byBkZWFsbG9jYXRlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZAorICAgd2l0aCB0aGUgdmFsdWUuICAqLwordHlwZWRlZiB2b2lkICgqc3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4pIChzcGxheV90cmVlX3ZhbHVlKTsKKworLyogVGhlIHR5cGUgb2YgYSBmdW5jdGlvbiB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgdHJlZS4gICovCit0eXBlZGVmIGludCAoKnNwbGF5X3RyZWVfZm9yZWFjaF9mbikgKHNwbGF5X3RyZWVfbm9kZSwgdm9pZCopOworCisvKiBUaGUgdHlwZSBvZiBhIGZ1bmN0aW9uIHVzZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0cmVlIHJvb3QgYW5kCisgICBub2RlIHN0cnVjdHVyZXMuICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQ7CisgICB0aGUgc2Vjb25kIGlzIGEgZGF0YSBwb2ludGVyIHRoZSBzcGxheSB0cmVlIGZ1bmN0aW9ucyBwYXNzIHRocm91Z2gKKyAgIHRvIHRoZSBhbGxvY2F0b3IuICBUaGlzIGZ1bmN0aW9uIG11c3QgbmV2ZXIgcmV0dXJuIHplcm8uICAqLwordHlwZWRlZiB2b2lkICooKnNwbGF5X3RyZWVfYWxsb2NhdGVfZm4pIChpbnQsIHZvaWQgKik7CisKKy8qIFRoZSB0eXBlIG9mIGEgZnVuY3Rpb24gdXNlZCB0byBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgdXNpbmcgdGhlCisgICBjb3JyZXNwb25kaW5nIHNwbGF5X3RyZWVfYWxsb2NhdGVfZm4uICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlCisgICBtZW1vcnkgdG8gYmUgZnJlZWQ7IHRoZSBsYXR0ZXIgaXMgYSBkYXRhIHBvaW50ZXIgdGhlIHNwbGF5IHRyZWUKKyAgIGZ1bmN0aW9ucyBwYXNzIHRocm91Z2ggdG8gdGhlIGZyZWVyLiAgKi8KK3R5cGVkZWYgdm9pZCAoKnNwbGF5X3RyZWVfZGVhbGxvY2F0ZV9mbikgKHZvaWQgKiwgdm9pZCAqKTsKKworLyogVGhlIG5vZGVzIGluIHRoZSBzcGxheSB0cmVlLiAgKi8KK3N0cnVjdCBHVFkoKCkpIHNwbGF5X3RyZWVfbm9kZV9zIHsKKyAgLyogVGhlIGtleS4gICovCisgIHNwbGF5X3RyZWVfa2V5IEdUWSAoKHVzZV9wYXJhbTEpKSBrZXk7CisKKyAgLyogVGhlIHZhbHVlLiAgKi8KKyAgc3BsYXlfdHJlZV92YWx1ZSBHVFkgKCh1c2VfcGFyYW0yKSkgdmFsdWU7CisKKyAgLyogVGhlIGxlZnQgYW5kIHJpZ2h0IGNoaWxkcmVuLCByZXNwZWN0aXZlbHkuICAqLworICBzcGxheV90cmVlX25vZGUgR1RZICgodXNlX3BhcmFtcykpIGxlZnQ7CisgIHNwbGF5X3RyZWVfbm9kZSBHVFkgKCh1c2VfcGFyYW1zKSkgcmlnaHQ7Cit9OworCisvKiBUaGUgc3BsYXkgdHJlZSBpdHNlbGYuICAqLworc3RydWN0IEdUWSgoKSkgc3BsYXlfdHJlZV9zIHsKKyAgLyogVGhlIHJvb3Qgb2YgdGhlIHRyZWUuICAqLworICBzcGxheV90cmVlX25vZGUgR1RZICgodXNlX3BhcmFtcykpIHJvb3Q7CisKKyAgLyogVGhlIGNvbXBhcmlzaW9uIGZ1bmN0aW9uLiAgKi8KKyAgc3BsYXlfdHJlZV9jb21wYXJlX2ZuIGNvbXA7CisKKyAgLyogVGhlIGRlYWxsb2NhdGUta2V5IGZ1bmN0aW9uLiAgTlVMTCBpZiBubyBjbGVhbnVwIGlzIG5lY2Vzc2FyeS4gICovCisgIHNwbGF5X3RyZWVfZGVsZXRlX2tleV9mbiBkZWxldGVfa2V5OworCisgIC8qIFRoZSBkZWFsbG9jYXRlLXZhbHVlIGZ1bmN0aW9uLiAgTlVMTCBpZiBubyBjbGVhbnVwIGlzIG5lY2Vzc2FyeS4gICovCisgIHNwbGF5X3RyZWVfZGVsZXRlX3ZhbHVlX2ZuIGRlbGV0ZV92YWx1ZTsKKworICAvKiBOb2RlIGFsbG9jYXRlIGZ1bmN0aW9uLiAgVGFrZXMgYWxsb2NhdGVfZGF0YSBhcyBhIHBhcmFtZXRlci4gKi8KKyAgc3BsYXlfdHJlZV9hbGxvY2F0ZV9mbiBhbGxvY2F0ZTsKKworICAvKiBGcmVlIGZ1bmN0aW9uIGZvciBub2RlcyBhbmQgdHJlZXMuICBUYWtlcyBhbGxvY2F0ZV9kYXRhIGFzIGEgcGFyYW1ldGVyLiAgKi8KKyAgc3BsYXlfdHJlZV9kZWFsbG9jYXRlX2ZuIGRlYWxsb2NhdGU7CisKKyAgLyogUGFyYW1ldGVyIGZvciBhbGxvY2F0ZS9mcmVlIGZ1bmN0aW9ucy4gICovCisgIHZvaWQgKiBHVFkoKHNraXApKSBhbGxvY2F0ZV9kYXRhOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgc3BsYXlfdHJlZV9zICpzcGxheV90cmVlOworCitleHRlcm4gc3BsYXlfdHJlZSBzcGxheV90cmVlX25ldyAoc3BsYXlfdHJlZV9jb21wYXJlX2ZuLAorCQkJCSAgc3BsYXlfdHJlZV9kZWxldGVfa2V5X2ZuLAorCQkJCSAgc3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4pOworZXh0ZXJuIHNwbGF5X3RyZWUgc3BsYXlfdHJlZV9uZXdfd2l0aF9hbGxvY2F0b3IgKHNwbGF5X3RyZWVfY29tcGFyZV9mbiwKKwkJCQkJCSBzcGxheV90cmVlX2RlbGV0ZV9rZXlfZm4sCisJCQkJCQkgc3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4sCisJCQkJCQkgc3BsYXlfdHJlZV9hbGxvY2F0ZV9mbiwKKwkJCQkJCSBzcGxheV90cmVlX2RlYWxsb2NhdGVfZm4sCisJCQkJCQkgdm9pZCAqKTsKK2V4dGVybiBzcGxheV90cmVlIHNwbGF5X3RyZWVfbmV3X3R5cGVkX2FsbG9jIChzcGxheV90cmVlX2NvbXBhcmVfZm4sCisJCQkJCSAgICAgIHNwbGF5X3RyZWVfZGVsZXRlX2tleV9mbiwKKwkJCQkJICAgICAgc3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4sCisJCQkJCSAgICAgIHNwbGF5X3RyZWVfYWxsb2NhdGVfZm4sCisJCQkJCSAgICAgIHNwbGF5X3RyZWVfYWxsb2NhdGVfZm4sCisJCQkJCSAgICAgIHNwbGF5X3RyZWVfZGVhbGxvY2F0ZV9mbiwKKwkJCQkJICAgICAgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHNwbGF5X3RyZWVfZGVsZXRlIChzcGxheV90cmVlKTsKK2V4dGVybiBzcGxheV90cmVlX25vZGUgc3BsYXlfdHJlZV9pbnNlcnQgKHNwbGF5X3RyZWUsCisJCQkJCSAgc3BsYXlfdHJlZV9rZXksCisJCQkJCSAgc3BsYXlfdHJlZV92YWx1ZSk7CitleHRlcm4gdm9pZCBzcGxheV90cmVlX3JlbW92ZQkoc3BsYXlfdHJlZSwgc3BsYXlfdHJlZV9rZXkpOworZXh0ZXJuIHNwbGF5X3RyZWVfbm9kZSBzcGxheV90cmVlX2xvb2t1cCAoc3BsYXlfdHJlZSwgc3BsYXlfdHJlZV9rZXkpOworZXh0ZXJuIHNwbGF5X3RyZWVfbm9kZSBzcGxheV90cmVlX3ByZWRlY2Vzc29yIChzcGxheV90cmVlLCBzcGxheV90cmVlX2tleSk7CitleHRlcm4gc3BsYXlfdHJlZV9ub2RlIHNwbGF5X3RyZWVfc3VjY2Vzc29yIChzcGxheV90cmVlLCBzcGxheV90cmVlX2tleSk7CitleHRlcm4gc3BsYXlfdHJlZV9ub2RlIHNwbGF5X3RyZWVfbWF4IChzcGxheV90cmVlKTsKK2V4dGVybiBzcGxheV90cmVlX25vZGUgc3BsYXlfdHJlZV9taW4gKHNwbGF5X3RyZWUpOworZXh0ZXJuIGludCBzcGxheV90cmVlX2ZvcmVhY2ggKHNwbGF5X3RyZWUsIHNwbGF5X3RyZWVfZm9yZWFjaF9mbiwgdm9pZCopOworZXh0ZXJuIGludCBzcGxheV90cmVlX2NvbXBhcmVfaW50cyAoc3BsYXlfdHJlZV9rZXksIHNwbGF5X3RyZWVfa2V5KTsKK2V4dGVybiBpbnQgc3BsYXlfdHJlZV9jb21wYXJlX3BvaW50ZXJzIChzcGxheV90cmVlX2tleSwJc3BsYXlfdHJlZV9rZXkpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZW5kaWYgLyogX1NQTEFZX1RSRUVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3N0YXRpc3RpY3MuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zdGF0aXN0aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhYWRhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zdGF0aXN0aWNzLmgKQEAgLTAsMCArMSw3MSBAQAorLyogTWVtb3J5IGFuZCBvcHRpbWl6YXRpb24gc3RhdGlzdGljcyBoZWxwZXJzLgorICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBDeWdudXMgU29sdXRpb25zLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfU1RBVElTVElDUworI2RlZmluZSBHQ0NfU1RBVElTVElDUworCisjaWYgISBkZWZpbmVkIEdBVEhFUl9TVEFUSVNUSUNTCisjZXJyb3IgR0FUSEVSX1NUQVRJU1RJQ1MgbXVzdCBiZSBkZWZpbmVkCisjZW5kaWYKKworI2RlZmluZSBHQ0NfTUVNX1NUQVRfQVJHVU1FTlRTIGNvbnN0IGNoYXIgKiBBUkdfVU5VU0VEIChfbG9jX25hbWUpLCBpbnQgQVJHX1VOVVNFRCAoX2xvY19saW5lKSwgY29uc3QgY2hhciAqIEFSR19VTlVTRUQgKF9sb2NfZnVuY3Rpb24pCisjaWYgR0FUSEVSX1NUQVRJU1RJQ1MKKyNkZWZpbmUgQUxPTkVfTUVNX1NUQVRfREVDTCBHQ0NfTUVNX1NUQVRfQVJHVU1FTlRTCisjZGVmaW5lIEFMT05FX0ZJTkFMX01FTV9TVEFUX0RFQ0wgQUxPTkVfTUVNX1NUQVRfREVDTAorI2RlZmluZSBBTE9ORV9QQVNTX01FTV9TVEFUIF9sb2NfbmFtZSwgX2xvY19saW5lLCAgX2xvY19mdW5jdGlvbgorI2RlZmluZSBBTE9ORV9GSU5BTF9QQVNTX01FTV9TVEFUIEFMT05FX1BBU1NfTUVNX1NUQVQKKyNkZWZpbmUgQUxPTkVfTUVNX1NUQVRfSU5GTyBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXworI2RlZmluZSBNRU1fU1RBVF9ERUNMICwgQUxPTkVfTUVNX1NUQVRfREVDTAorI2RlZmluZSBGSU5BTF9NRU1fU1RBVF9ERUNMICwgQUxPTkVfRklOQUxfTUVNX1NUQVRfREVDTAorI2RlZmluZSBQQVNTX01FTV9TVEFUICwgQUxPTkVfUEFTU19NRU1fU1RBVAorI2RlZmluZSBGSU5BTF9QQVNTX01FTV9TVEFUICwgQUxPTkVfRklOQUxfUEFTU19NRU1fU1RBVAorI2RlZmluZSBNRU1fU1RBVF9JTkZPICwgQUxPTkVfTUVNX1NUQVRfSU5GTworI2lmIF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA4KQorI2RlZmluZSBBTE9ORV9DWFhfTUVNX1NUQVRfSU5GTyBjb25zdCBjaGFyICogX2xvY19uYW1lID0gX19idWlsdGluX0ZJTEUgKCksIGludCBfbG9jX2xpbmUgPSBfX2J1aWx0aW5fTElORSAoKSwgY29uc3QgY2hhciAqIF9sb2NfZnVuY3Rpb24gPSBfX2J1aWx0aW5fRlVOQ1RJT04gKCkKKyNlbHNlCisjZGVmaW5lIEFMT05FX0NYWF9NRU1fU1RBVF9JTkZPIGNvbnN0IGNoYXIgKiBfbG9jX25hbWUgPSBfX0ZJTEVfXywgaW50IF9sb2NfbGluZSA9IF9fTElORV9fLCBjb25zdCBjaGFyICogX2xvY19mdW5jdGlvbiA9IE5VTEwKKyNlbmRpZgorI2RlZmluZSBDWFhfTUVNX1NUQVRfSU5GTyAsIEFMT05FX0NYWF9NRU1fU1RBVF9JTkZPCisjZWxzZQorI2RlZmluZSBBTE9ORV9NRU1fU1RBVF9ERUNMIHZvaWQKKyNkZWZpbmUgQUxPTkVfRklOQUxfTUVNX1NUQVRfREVDTCBHQ0NfTUVNX1NUQVRfQVJHVU1FTlRTCisjZGVmaW5lIEFMT05FX1BBU1NfTUVNX1NUQVQKKyNkZWZpbmUgQUxPTkVfRklOQUxfUEFTU19NRU1fU1RBVCAwLDAsMAorI2RlZmluZSBBTE9ORV9NRU1fU1RBVF9JTkZPCisjZGVmaW5lIE1FTV9TVEFUX0RFQ0wKKyNkZWZpbmUgRklOQUxfTUVNX1NUQVRfREVDTCAsIEFMT05FX0ZJTkFMX01FTV9TVEFUX0RFQ0wKKyNkZWZpbmUgUEFTU19NRU1fU1RBVAorI2RlZmluZSBGSU5BTF9QQVNTX01FTV9TVEFUICwgQUxPTkVfRklOQUxfUEFTU19NRU1fU1RBVAorI2RlZmluZSBNRU1fU1RBVF9JTkZPIEFMT05FX01FTV9TVEFUX0lORk8KKyNkZWZpbmUgQUxPTkVfQ1hYX01FTV9TVEFUX0lORk8KKyNkZWZpbmUgQ1hYX01FTV9TVEFUX0lORk8KKyNlbmRpZgorCitzdHJ1Y3QgZnVuY3Rpb247CisKKy8qIEluIHN0YXRpc3RpY3MuYyAqLworZXh0ZXJuIHZvaWQgc3RhdGlzdGljc19lYXJseV9pbml0ICh2b2lkKTsKK2V4dGVybiB2b2lkIHN0YXRpc3RpY3NfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCBzdGF0aXN0aWNzX2ZpbmkgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhdGlzdGljc19maW5pX3Bhc3MgKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhdGlzdGljc19jb3VudGVyX2V2ZW50IChzdHJ1Y3QgZnVuY3Rpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgc3RhdGlzdGljc19oaXN0b2dyYW1fZXZlbnQgKHN0cnVjdCBmdW5jdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3N5bXRhYi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3N5bXRhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZWE3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvc3ltdGFiLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qIEhhc2ggdGFibGVzLgorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2xhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBMSUJDUFBfU1lNVEFCX0gKKyNkZWZpbmUgTElCQ1BQX1NZTVRBQl9ICisKKyNpbmNsdWRlICJvYnN0YWNrLmgiCisKKyNpZm5kZWYgR1RZCisjZGVmaW5lIEdUWSh4KSAvKiBub3RoaW5nICovCisjZW5kaWYKKworLyogVGhpcyBpcyB3aGF0IGVhY2ggaGFzaCB0YWJsZSBlbnRyeSBwb2ludHMgdG8uICBJdCBtYXkgYmUgZW1iZWRkZWQKKyAgIGRlZXBseSB3aXRoaW4gYW5vdGhlciBvYmplY3QuICAqLwordHlwZWRlZiBzdHJ1Y3QgaHRfaWRlbnRpZmllciBodF9pZGVudGlmaWVyOwordHlwZWRlZiBzdHJ1Y3QgaHRfaWRlbnRpZmllciAqaHRfaWRlbnRpZmllcl9wdHI7CitzdHJ1Y3QgR1RZKCgpKSBodF9pZGVudGlmaWVyIHsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqc3RyOworICB1bnNpZ25lZCBpbnQgbGVuOworICB1bnNpZ25lZCBpbnQgaGFzaF92YWx1ZTsKK307CisKKyNkZWZpbmUgSFRfTEVOKE5PREUpICgoTk9ERSktPmxlbikKKyNkZWZpbmUgSFRfU1RSKE5PREUpICgoTk9ERSktPnN0cikKKwordHlwZWRlZiBzdHJ1Y3QgaHQgY3BwX2hhc2hfdGFibGU7Cit0eXBlZGVmIHN0cnVjdCBodF9pZGVudGlmaWVyICpoYXNobm9kZTsKKworZW51bSBodF9sb29rdXBfb3B0aW9uIHtIVF9OT19JTlNFUlQgPSAwLCBIVF9BTExPQ307CisKKy8qIEFuIGlkZW50aWZpZXIgaGFzaCB0YWJsZSBmb3IgY3BwbGliIGFuZCB0aGUgZnJvbnQgZW5kcy4gICovCitzdHJ1Y3QgaHQKK3sKKyAgLyogSWRlbnRpZmllcnMgYXJlIGFsbG9jYXRlZCBmcm9tIGhlcmUuICAqLworICBzdHJ1Y3Qgb2JzdGFjayBzdGFjazsKKworICBoYXNobm9kZSAqZW50cmllczsKKyAgLyogQ2FsbCBiYWNrLCBhbGxvY2F0ZSBhIG5vZGUuICAqLworICBoYXNobm9kZSAoKmFsbG9jX25vZGUpIChjcHBfaGFzaF90YWJsZSAqKTsKKyAgLyogQ2FsbCBiYWNrLCBhbGxvY2F0ZSBzb21ldGhpbmcgdGhhdCBoYW5ncyBvZmYgYSBub2RlIGxpa2UgYSBjcHBfbWFjcm8uICAKKyAgICAgTlVMTCBtZWFucyB1c2UgdGhlIHVzdWFsIGFsbG9jYXRvci4gICovCisgIHZvaWQgKiAoKmFsbG9jX3N1Ym9iamVjdCkgKHNpemVfdCk7CisKKyAgdW5zaWduZWQgaW50IG5zbG90czsJCS8qIFRvdGFsIHNsb3RzIGluIHRoZSBlbnRyaWVzIGFycmF5LiAgKi8KKyAgdW5zaWduZWQgaW50IG5lbGVtZW50czsJLyogTnVtYmVyIG9mIGxpdmUgZWxlbWVudHMuICAqLworCisgIC8qIExpbmsgdG8gcmVhZGVyLCBpZiBhbnkuICBGb3IgdGhlIGJlbmVmaXQgb2YgY3BwbGliLiAgKi8KKyAgc3RydWN0IGNwcF9yZWFkZXIgKnBmaWxlOworCisgIC8qIFRhYmxlIHVzYWdlIHN0YXRpc3RpY3MuICAqLworICB1bnNpZ25lZCBpbnQgc2VhcmNoZXM7CisgIHVuc2lnbmVkIGludCBjb2xsaXNpb25zOworCisgIC8qIFNob3VsZCAnZW50cmllcycgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkPyAgKi8KKyAgYm9vbCBlbnRyaWVzX293bmVkOworfTsKKworLyogSW5pdGlhbGl6ZSB0aGUgaGFzaHRhYmxlIHdpdGggMiBeIG9yZGVyIGVudHJpZXMuICAqLworZXh0ZXJuIGNwcF9oYXNoX3RhYmxlICpodF9jcmVhdGUgKHVuc2lnbmVkIGludCBvcmRlcik7CisKKy8qIEZyZWVzIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgaGFzaCB0YWJsZS4gICovCitleHRlcm4gdm9pZCBodF9kZXN0cm95IChjcHBfaGFzaF90YWJsZSAqKTsKKworZXh0ZXJuIGhhc2hub2RlIGh0X2xvb2t1cCAoY3BwX2hhc2hfdGFibGUgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorCQkJICAgc2l6ZV90LCBlbnVtIGh0X2xvb2t1cF9vcHRpb24pOworZXh0ZXJuIGhhc2hub2RlIGh0X2xvb2t1cF93aXRoX2hhc2ggKGNwcF9oYXNoX3RhYmxlICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGh0X2xvb2t1cF9vcHRpb24pOworI2RlZmluZSBIVF9IQVNIU1RFUChyLCBjKSAoKHIpICogNjcgKyAoKGMpIC0gMTEzKSk7CisjZGVmaW5lIEhUX0hBU0hGSU5JU0gociwgbGVuKSAoKHIpICsgKGxlbikpCisKKy8qIEZvciBhbGwgbm9kZXMgaW4gVEFCTEUsIG1ha2UgYSBjYWxsYmFjay4gIFRoZSBjYWxsYmFjayB0YWtlcworICAgVEFCTEUtPlBGSUxFLCB0aGUgbm9kZSwgYW5kIGEgUFRSLCBhbmQgdGhlIGNhbGxiYWNrIHNlcXVlbmNlIHN0b3BzCisgICBpZiB0aGUgY2FsbGJhY2sgcmV0dXJucyB6ZXJvLiAgKi8KK3R5cGVkZWYgaW50ICgqaHRfY2IpIChzdHJ1Y3QgY3BwX3JlYWRlciAqLCBoYXNobm9kZSwgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGh0X2ZvcmFsbCAoY3BwX2hhc2hfdGFibGUgKiwgaHRfY2IsIGNvbnN0IHZvaWQgKik7CisKKy8qIEZvciBhbGwgbm9kZXMgaW4gVEFCTEUsIGNhbGwgdGhlIGNhbGxiYWNrLiAgSWYgdGhlIGNhbGxiYWNrIHJldHVybnMKKyAgIGEgbm9uemVybyB2YWx1ZSwgdGhlIG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0YWJsZS4gICovCitleHRlcm4gdm9pZCBodF9wdXJnZSAoY3BwX2hhc2hfdGFibGUgKiwgaHRfY2IsIGNvbnN0IHZvaWQgKik7CisKKy8qIFJlc3RvcmUgdGhlIGhhc2ggdGFibGUuICAqLworZXh0ZXJuIHZvaWQgaHRfbG9hZCAoY3BwX2hhc2hfdGFibGUgKmh0LCBoYXNobm9kZSAqZW50cmllcywKKwkJICAgICB1bnNpZ25lZCBpbnQgbnNsb3RzLCB1bnNpZ25lZCBpbnQgbmVsZW1lbnRzLCBib29sIG93bik7CisKKy8qIER1bXAgYWxsb2NhdGlvbiBzdGF0aXN0aWNzIHRvIHN0ZGVyci4gICovCitleHRlcm4gdm9pZCBodF9kdW1wX3N0YXRpc3RpY3MgKGNwcF9oYXNoX3RhYmxlICopOworCisjZW5kaWYgLyogTElCQ1BQX1NZTVRBQl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvc3luYy1idWlsdGlucy5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvc3luYy1idWlsdGlucy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3YTIyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zeW5jLWJ1aWx0aW5zLmRlZgpAQCAtMCwwICsxLDYwMiBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICBzeW5jaHJvbml6YXRpb24gYnVpbHRpbnMgdXNlZCBpbiB0aGUgR05VIGNvbXBpbGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBCZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSwgeW91IHNob3VsZCBkZWZpbmUgYSBtYWNybzoKKworICAgICBERUZfU1lOQ19CVUlMVElOIChFTlVNLCBOQU1FLCBUWVBFLCBBVFRSUykKKworICAgU2VlIGJ1aWx0aW5zLmRlZiBmb3IgZGV0YWlscy4gICovCisKKy8qIFN5bmNocm9uaXphdGlvbiBQcmltaXRpdmVzLiAgVGhlICJfTiIgdmVyc2lvbiBpcyB0aGUgb25lIHRoYXQgdGhlIHVzZXIKKyAgIGlzIHN1cHBvc2VkIHRvIGJlIHVzaW5nLiAgSXQncyBvdmVybG9hZGVkLCBhbmQgaXMgcmVzb2x2ZWQgdG8gb25lIG9mIHRoZQorICAgIl8xIiB0aHJvdWdoICJfMTYiIHZlcnNpb25zLCBwbHVzIHNvbWUgZXh0cmEgY2FzdHMuICAqLworCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0ZFVENIX0FORF9BRERfTiwgIl9fc3luY19mZXRjaF9hbmRfYWRkIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FERF8xLCAiX19zeW5jX2ZldGNoX2FuZF9hZGRfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FERF8yLCAiX19zeW5jX2ZldGNoX2FuZF9hZGRfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FERF80LCAiX19zeW5jX2ZldGNoX2FuZF9hZGRfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FERF84LCAiX19zeW5jX2ZldGNoX2FuZF9hZGRfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FERF8xNiwgIl9fc3luY19mZXRjaF9hbmRfYWRkXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX1NVQl9OLCAiX19zeW5jX2ZldGNoX2FuZF9zdWIiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfU1VCXzEsICJfX3N5bmNfZmV0Y2hfYW5kX3N1Yl8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfU1VCXzIsICJfX3N5bmNfZmV0Y2hfYW5kX3N1Yl8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfU1VCXzQsICJfX3N5bmNfZmV0Y2hfYW5kX3N1Yl80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfU1VCXzgsICJfX3N5bmNfZmV0Y2hfYW5kX3N1Yl84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfU1VCXzE2LCAiX19zeW5jX2ZldGNoX2FuZF9zdWJfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfT1JfTiwgIl9fc3luY19mZXRjaF9hbmRfb3IiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfT1JfMSwgIl9fc3luY19mZXRjaF9hbmRfb3JfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX09SXzIsICJfX3N5bmNfZmV0Y2hfYW5kX29yXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0ZFVENIX0FORF9PUl80LCAiX19zeW5jX2ZldGNoX2FuZF9vcl80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfT1JfOCwgIl9fc3luY19mZXRjaF9hbmRfb3JfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX09SXzE2LCAiX19zeW5jX2ZldGNoX2FuZF9vcl8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0ZFVENIX0FORF9BTkRfTiwgIl9fc3luY19mZXRjaF9hbmRfYW5kIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FORF8xLCAiX19zeW5jX2ZldGNoX2FuZF9hbmRfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FORF8yLCAiX19zeW5jX2ZldGNoX2FuZF9hbmRfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FORF80LCAiX19zeW5jX2ZldGNoX2FuZF9hbmRfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FORF84LCAiX19zeW5jX2ZldGNoX2FuZF9hbmRfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX0FORF8xNiwgIl9fc3luY19mZXRjaF9hbmRfYW5kXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX1hPUl9OLCAiX19zeW5jX2ZldGNoX2FuZF94b3IiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfWE9SXzEsICJfX3N5bmNfZmV0Y2hfYW5kX3hvcl8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfWE9SXzIsICJfX3N5bmNfZmV0Y2hfYW5kX3hvcl8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfWE9SXzQsICJfX3N5bmNfZmV0Y2hfYW5kX3hvcl80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfWE9SXzgsICJfX3N5bmNfZmV0Y2hfYW5kX3hvcl84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfWE9SXzE2LCAiX19zeW5jX2ZldGNoX2FuZF94b3JfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfTkFORF9OLCAiX19zeW5jX2ZldGNoX2FuZF9uYW5kIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX05BTkRfMSwgIl9fc3luY19mZXRjaF9hbmRfbmFuZF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfTkFORF8yLCAiX19zeW5jX2ZldGNoX2FuZF9uYW5kXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0ZFVENIX0FORF9OQU5EXzQsICJfX3N5bmNfZmV0Y2hfYW5kX25hbmRfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfRkVUQ0hfQU5EX05BTkRfOCwgIl9fc3luY19mZXRjaF9hbmRfbmFuZF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19GRVRDSF9BTkRfTkFORF8xNiwgIl9fc3luY19mZXRjaF9hbmRfbmFuZF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0FERF9BTkRfRkVUQ0hfTiwgIl9fc3luY19hZGRfYW5kX2ZldGNoIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQUREX0FORF9GRVRDSF8xLCAiX19zeW5jX2FkZF9hbmRfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQUREX0FORF9GRVRDSF8yLCAiX19zeW5jX2FkZF9hbmRfZmV0Y2hfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQUREX0FORF9GRVRDSF80LCAiX19zeW5jX2FkZF9hbmRfZmV0Y2hfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQUREX0FORF9GRVRDSF84LCAiX19zeW5jX2FkZF9hbmRfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQUREX0FORF9GRVRDSF8xNiwgIl9fc3luY19hZGRfYW5kX2ZldGNoXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfU1VCX0FORF9GRVRDSF9OLCAiX19zeW5jX3N1Yl9hbmRfZmV0Y2giLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19TVUJfQU5EX0ZFVENIXzEsICJfX3N5bmNfc3ViX2FuZF9mZXRjaF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19TVUJfQU5EX0ZFVENIXzIsICJfX3N5bmNfc3ViX2FuZF9mZXRjaF8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19TVUJfQU5EX0ZFVENIXzQsICJfX3N5bmNfc3ViX2FuZF9mZXRjaF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19TVUJfQU5EX0ZFVENIXzgsICJfX3N5bmNfc3ViX2FuZF9mZXRjaF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19TVUJfQU5EX0ZFVENIXzE2LCAiX19zeW5jX3N1Yl9hbmRfZmV0Y2hfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19PUl9BTkRfRkVUQ0hfTiwgIl9fc3luY19vcl9hbmRfZmV0Y2giLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19PUl9BTkRfRkVUQ0hfMSwgIl9fc3luY19vcl9hbmRfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfT1JfQU5EX0ZFVENIXzIsICJfX3N5bmNfb3JfYW5kX2ZldGNoXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX09SX0FORF9GRVRDSF80LCAiX19zeW5jX29yX2FuZF9mZXRjaF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19PUl9BTkRfRkVUQ0hfOCwgIl9fc3luY19vcl9hbmRfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfT1JfQU5EX0ZFVENIXzE2LCAiX19zeW5jX29yX2FuZF9mZXRjaF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0FORF9BTkRfRkVUQ0hfTiwgIl9fc3luY19hbmRfYW5kX2ZldGNoIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQU5EX0FORF9GRVRDSF8xLCAiX19zeW5jX2FuZF9hbmRfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQU5EX0FORF9GRVRDSF8yLCAiX19zeW5jX2FuZF9hbmRfZmV0Y2hfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQU5EX0FORF9GRVRDSF80LCAiX19zeW5jX2FuZF9hbmRfZmV0Y2hfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQU5EX0FORF9GRVRDSF84LCAiX19zeW5jX2FuZF9hbmRfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQU5EX0FORF9GRVRDSF8xNiwgIl9fc3luY19hbmRfYW5kX2ZldGNoXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfWE9SX0FORF9GRVRDSF9OLCAiX19zeW5jX3hvcl9hbmRfZmV0Y2giLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19YT1JfQU5EX0ZFVENIXzEsICJfX3N5bmNfeG9yX2FuZF9mZXRjaF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19YT1JfQU5EX0ZFVENIXzIsICJfX3N5bmNfeG9yX2FuZF9mZXRjaF8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19YT1JfQU5EX0ZFVENIXzQsICJfX3N5bmNfeG9yX2FuZF9mZXRjaF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19YT1JfQU5EX0ZFVENIXzgsICJfX3N5bmNfeG9yX2FuZF9mZXRjaF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19YT1JfQU5EX0ZFVENIXzE2LCAiX19zeW5jX3hvcl9hbmRfZmV0Y2hfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19OQU5EX0FORF9GRVRDSF9OLCAiX19zeW5jX25hbmRfYW5kX2ZldGNoIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTkFORF9BTkRfRkVUQ0hfMSwgIl9fc3luY19uYW5kX2FuZF9mZXRjaF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19OQU5EX0FORF9GRVRDSF8yLCAiX19zeW5jX25hbmRfYW5kX2ZldGNoXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX05BTkRfQU5EX0ZFVENIXzQsICJfX3N5bmNfbmFuZF9hbmRfZmV0Y2hfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTkFORF9BTkRfRkVUQ0hfOCwgIl9fc3luY19uYW5kX2FuZF9mZXRjaF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19OQU5EX0FORF9GRVRDSF8xNiwgIl9fc3luY19uYW5kX2FuZF9mZXRjaF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0JPT0xfQ09NUEFSRV9BTkRfU1dBUF9OLAorCQkgICJfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQk9PTF9DT01QQVJFX0FORF9TV0FQXzEsCisJCSAgIl9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMSIsCisJCSAgQlRfRk5fQk9PTF9WUFRSX0kxX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVBfMiwKKwkJICAiX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8yIiwKKwkJICBCVF9GTl9CT09MX1ZQVFJfSTJfSTIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0JPT0xfQ09NUEFSRV9BTkRfU1dBUF80LAorCQkgICJfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzQiLAorCQkgIEJUX0ZOX0JPT0xfVlBUUl9JNF9JNCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfQk9PTF9DT01QQVJFX0FORF9TV0FQXzgsCisJCSAgIl9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfOCIsCisJCSAgQlRfRk5fQk9PTF9WUFRSX0k4X0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVBfMTYsCisJCSAgIl9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMTYiLAorCQkgIEJUX0ZOX0JPT0xfVlBUUl9JMTZfSTE2LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX1ZBTF9DT01QQVJFX0FORF9TV0FQX04sCisJCSAgIl9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX1ZBTF9DT01QQVJFX0FORF9TV0FQXzEsCisJCSAgIl9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19WQUxfQ09NUEFSRV9BTkRfU1dBUF8yLAorCQkgICJfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMl9JMiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfVkFMX0NPTVBBUkVfQU5EX1NXQVBfNCwKKwkJICAiX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTRfSTQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX1ZBTF9DT01QQVJFX0FORF9TV0FQXzgsCisJCSAgIl9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4X0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19WQUxfQ09NUEFSRV9BTkRfU1dBUF8xNiwKKwkJICAiX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTZfSTE2LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0xPQ0tfVEVTVF9BTkRfU0VUX04sCisJCSAgIl9fc3luY19sb2NrX3Rlc3RfYW5kX3NldCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0xPQ0tfVEVTVF9BTkRfU0VUXzEsCisJCSAgIl9fc3luY19sb2NrX3Rlc3RfYW5kX3NldF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19MT0NLX1RFU1RfQU5EX1NFVF8yLAorCQkgICJfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXRfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTE9DS19URVNUX0FORF9TRVRfNCwKKwkJICAiX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0XzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX0xPQ0tfVEVTVF9BTkRfU0VUXzgsCisJCSAgIl9fc3luY19sb2NrX3Rlc3RfYW5kX3NldF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4LCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fU1lOQ19MT0NLX1RFU1RfQU5EX1NFVF8xNiwKKwkJICAiX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0XzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTYsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTE9DS19SRUxFQVNFX04sICJfX3N5bmNfbG9ja19yZWxlYXNlIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTE9DS19SRUxFQVNFXzEsICJfX3N5bmNfbG9ja19yZWxlYXNlXzEiLAorCQkgIEJUX0ZOX1ZPSURfVlBUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTE9DS19SRUxFQVNFXzIsICJfX3N5bmNfbG9ja19yZWxlYXNlXzIiLAorCQkgIEJUX0ZOX1ZPSURfVlBUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTE9DS19SRUxFQVNFXzQsICJfX3N5bmNfbG9ja19yZWxlYXNlXzQiLAorCQkgIEJUX0ZOX1ZPSURfVlBUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTE9DS19SRUxFQVNFXzgsICJfX3N5bmNfbG9ja19yZWxlYXNlXzgiLAorCQkgIEJUX0ZOX1ZPSURfVlBUUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX1NZTkNfTE9DS19SRUxFQVNFXzE2LCAiX19zeW5jX2xvY2tfcmVsZWFzZV8xNiIsCisJCSAgQlRfRk5fVk9JRF9WUFRSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9TWU5DX1NZTkNIUk9OSVpFLCAiX19zeW5jX3N5bmNocm9uaXplIiwKKwkJICBCVF9GTl9WT0lELCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCisvKiBfX3N5bmMqIGJ1aWx0aW5zIGZvciB0aGUgQysrIG1lbW9yeSBtb2RlbC4gICovCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19URVNUX0FORF9TRVQsICJfX2F0b21pY190ZXN0X2FuZF9zZXQiLAorCQkgIEJUX0ZOX0JPT0xfVlBUUl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19DTEVBUiwgIl9fYXRvbWljX2NsZWFyIiwgQlRfRk5fVk9JRF9WUFRSX0lOVCwKKwkJICBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRVhDSEFOR0UsCisJCSAgIl9fYXRvbWljX2V4Y2hhbmdlIiwKKwkJICBCVF9GTl9WT0lEX1NJWkVfVlBUUl9QVFJfUFRSX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19FWENIQU5HRV9OLAorCQkgICJfX2F0b21pY19leGNoYW5nZV9uIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19FWENIQU5HRV8xLAorCQkgICJfX2F0b21pY19leGNoYW5nZV8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19FWENIQU5HRV8yLAorCQkgICJfX2F0b21pY19leGNoYW5nZV8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19FWENIQU5HRV80LAorCQkgICJfX2F0b21pY19leGNoYW5nZV80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19FWENIQU5HRV84LAorCQkgICJfX2F0b21pY19leGNoYW5nZV84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19FWENIQU5HRV8xNiwKKwkJICAiX19hdG9taWNfZXhjaGFuZ2VfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19MT0FELAorCQkgICJfX2F0b21pY19sb2FkIiwKKwkJICBCVF9GTl9WT0lEX1NJWkVfQ09OU1RfVlBUUl9QVFJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0xPQURfTiwKKwkJICAiX19hdG9taWNfbG9hZF9uIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19MT0FEXzEsCisJCSAgIl9fYXRvbWljX2xvYWRfMSIsCisJCSAgQlRfRk5fSTFfQ09OU1RfVlBUUl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfTE9BRF8yLAorCQkgICJfX2F0b21pY19sb2FkXzIiLAorCQkgIEJUX0ZOX0kyX0NPTlNUX1ZQVFJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0xPQURfNCwKKwkJICAiX19hdG9taWNfbG9hZF80IiwKKwkJICBCVF9GTl9JNF9DT05TVF9WUFRSX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19MT0FEXzgsCisJCSAgIl9fYXRvbWljX2xvYWRfOCIsCisJCSAgQlRfRk5fSThfQ09OU1RfVlBUUl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfTE9BRF8xNiwKKwkJICAiX19hdG9taWNfbG9hZF8xNiIsCisJCSAgQlRfRk5fSTE2X0NPTlNUX1ZQVFJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRSwKKwkJICAiX19hdG9taWNfY29tcGFyZV9leGNoYW5nZSIsCisJCSAgQlRfRk5fQk9PTF9TSVpFX1ZQVFJfUFRSX1BUUl9JTlRfSU5ULAorCQkgIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV9OLAorCQkgICJfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24iLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfMSwKKwkJICAiX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV8xIiwKKwkJICBCVF9GTl9CT09MX1ZQVFJfUFRSX0kxX0JPT0xfSU5UX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFXzIsCisJCSAgIl9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfMiIsCisJCSAgQlRfRk5fQk9PTF9WUFRSX1BUUl9JMl9CT09MX0lOVF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfQ09NUEFSRV9FWENIQU5HRV80LAorCQkgICJfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlXzQiLAorCQkgIEJUX0ZOX0JPT0xfVlBUUl9QVFJfSTRfQk9PTF9JTlRfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0NPTVBBUkVfRVhDSEFOR0VfOCwKKwkJICAiX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV84IiwKKwkJICBCVF9GTl9CT09MX1ZQVFJfUFRSX0k4X0JPT0xfSU5UX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19DT01QQVJFX0VYQ0hBTkdFXzE2LAorCQkgICJfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlXzE2IiwKKwkJICBCVF9GTl9CT09MX1ZQVFJfUFRSX0kxNl9CT09MX0lOVF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19TVE9SRSwKKwkJICAiX19hdG9taWNfc3RvcmUiLAorCQkgIEJUX0ZOX1ZPSURfU0laRV9WUFRSX1BUUl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfU1RPUkVfTiwKKwkJICAiX19hdG9taWNfc3RvcmVfbiIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfU1RPUkVfMSwKKwkJICAiX19hdG9taWNfc3RvcmVfMSIsCisJCSAgQlRfRk5fVk9JRF9WUFRSX0kxX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19TVE9SRV8yLAorCQkgICJfX2F0b21pY19zdG9yZV8yIiwKKwkJICBCVF9GTl9WT0lEX1ZQVFJfSTJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX1NUT1JFXzQsCisJCSAgIl9fYXRvbWljX3N0b3JlXzQiLAorCQkgIEJUX0ZOX1ZPSURfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfU1RPUkVfOCwKKwkJICAiX19hdG9taWNfc3RvcmVfOCIsCisJCSAgQlRfRk5fVk9JRF9WUFRSX0k4X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19TVE9SRV8xNiwKKwkJICAiX19hdG9taWNfc3RvcmVfMTYiLAorCQkgIEJUX0ZOX1ZPSURfVlBUUl9JMTZfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfQUREX0ZFVENIX04sCisJCSAgIl9fYXRvbWljX2FkZF9mZXRjaCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfQUREX0ZFVENIXzEsCisJCSAgIl9fYXRvbWljX2FkZF9mZXRjaF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19BRERfRkVUQ0hfMiwKKwkJICAiX19hdG9taWNfYWRkX2ZldGNoXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0FERF9GRVRDSF80LAorCQkgICJfX2F0b21pY19hZGRfZmV0Y2hfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfQUREX0ZFVENIXzgsCisJCSAgIl9fYXRvbWljX2FkZF9mZXRjaF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19BRERfRkVUQ0hfMTYsCisJCSAgIl9fYXRvbWljX2FkZF9mZXRjaF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX1NVQl9GRVRDSF9OLAorCQkgICJfX2F0b21pY19zdWJfZmV0Y2giLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX1NVQl9GRVRDSF8xLAorCQkgICJfX2F0b21pY19zdWJfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfU1VCX0ZFVENIXzIsCisJCSAgIl9fYXRvbWljX3N1Yl9mZXRjaF8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19TVUJfRkVUQ0hfNCwKKwkJICAiX19hdG9taWNfc3ViX2ZldGNoXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTRfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX1NVQl9GRVRDSF84LAorCQkgICJfX2F0b21pY19zdWJfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfU1VCX0ZFVENIXzE2LAorCQkgICJfX2F0b21pY19zdWJfZmV0Y2hfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19BTkRfRkVUQ0hfTiwKKwkJICAiX19hdG9taWNfYW5kX2ZldGNoIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19BTkRfRkVUQ0hfMSwKKwkJICAiX19hdG9taWNfYW5kX2ZldGNoXzEiLAorCQkgIEJUX0ZOX0kxX1ZQVFJfSTFfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0FORF9GRVRDSF8yLAorCQkgICJfX2F0b21pY19hbmRfZmV0Y2hfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfQU5EX0ZFVENIXzQsCisJCSAgIl9fYXRvbWljX2FuZF9mZXRjaF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19BTkRfRkVUQ0hfOCwKKwkJICAiX19hdG9taWNfYW5kX2ZldGNoXzgiLAorCQkgIEJUX0ZOX0k4X1ZQVFJfSThfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0FORF9GRVRDSF8xNiwKKwkJICAiX19hdG9taWNfYW5kX2ZldGNoXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTZfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfTkFORF9GRVRDSF9OLAorCQkgICJfX2F0b21pY19uYW5kX2ZldGNoIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19OQU5EX0ZFVENIXzEsCisJCSAgIl9fYXRvbWljX25hbmRfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfTkFORF9GRVRDSF8yLAorCQkgICJfX2F0b21pY19uYW5kX2ZldGNoXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX05BTkRfRkVUQ0hfNCwKKwkJICAiX19hdG9taWNfbmFuZF9mZXRjaF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19OQU5EX0ZFVENIXzgsCisJCSAgIl9fYXRvbWljX25hbmRfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfTkFORF9GRVRDSF8xNiwKKwkJICAiX19hdG9taWNfbmFuZF9mZXRjaF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX1hPUl9GRVRDSF9OLAorCQkgICJfX2F0b21pY194b3JfZmV0Y2giLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX1hPUl9GRVRDSF8xLAorCQkgICJfX2F0b21pY194b3JfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfWE9SX0ZFVENIXzIsCisJCSAgIl9fYXRvbWljX3hvcl9mZXRjaF8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19YT1JfRkVUQ0hfNCwKKwkJICAiX19hdG9taWNfeG9yX2ZldGNoXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTRfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX1hPUl9GRVRDSF84LAorCQkgICJfX2F0b21pY194b3JfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfWE9SX0ZFVENIXzE2LAorCQkgICJfX2F0b21pY194b3JfZmV0Y2hfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19PUl9GRVRDSF9OLAorCQkgICJfX2F0b21pY19vcl9mZXRjaCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfT1JfRkVUQ0hfMSwKKwkJICAiX19hdG9taWNfb3JfZmV0Y2hfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfT1JfRkVUQ0hfMiwKKwkJICAiX19hdG9taWNfb3JfZmV0Y2hfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfT1JfRkVUQ0hfNCwKKwkJICAiX19hdG9taWNfb3JfZmV0Y2hfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfT1JfRkVUQ0hfOCwKKwkJICAiX19hdG9taWNfb3JfZmV0Y2hfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfT1JfRkVUQ0hfMTYsCisJCSAgIl9fYXRvbWljX29yX2ZldGNoXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTZfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfQUREX04sCisJCSAgIl9fYXRvbWljX2ZldGNoX2FkZCIsCisJCSAgQlRfRk5fVk9JRF9WQVIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfQUREXzEsCisJCSAgIl9fYXRvbWljX2ZldGNoX2FkZF8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9BRERfMiwKKwkJICAiX19hdG9taWNfZmV0Y2hfYWRkXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX0FERF80LAorCQkgICJfX2F0b21pY19mZXRjaF9hZGRfNCIsCisJCSAgQlRfRk5fSTRfVlBUUl9JNF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfQUREXzgsCisJCSAgIl9fYXRvbWljX2ZldGNoX2FkZF84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9BRERfMTYsCisJCSAgIl9fYXRvbWljX2ZldGNoX2FkZF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX1NVQl9OLAorCQkgICJfX2F0b21pY19mZXRjaF9zdWIiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX1NVQl8xLAorCQkgICJfX2F0b21pY19mZXRjaF9zdWJfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfU1VCXzIsCisJCSAgIl9fYXRvbWljX2ZldGNoX3N1Yl8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9TVUJfNCwKKwkJICAiX19hdG9taWNfZmV0Y2hfc3ViXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTRfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX1NVQl84LAorCQkgICJfX2F0b21pY19mZXRjaF9zdWJfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfU1VCXzE2LAorCQkgICJfX2F0b21pY19mZXRjaF9zdWJfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9BTkRfTiwKKwkJICAiX19hdG9taWNfZmV0Y2hfYW5kIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9BTkRfMSwKKwkJICAiX19hdG9taWNfZmV0Y2hfYW5kXzEiLAorCQkgIEJUX0ZOX0kxX1ZQVFJfSTFfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX0FORF8yLAorCQkgICJfX2F0b21pY19mZXRjaF9hbmRfMiIsCisJCSAgQlRfRk5fSTJfVlBUUl9JMl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfQU5EXzQsCisJCSAgIl9fYXRvbWljX2ZldGNoX2FuZF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9BTkRfOCwKKwkJICAiX19hdG9taWNfZmV0Y2hfYW5kXzgiLAorCQkgIEJUX0ZOX0k4X1ZQVFJfSThfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX0FORF8xNiwKKwkJICAiX19hdG9taWNfZmV0Y2hfYW5kXzE2IiwKKwkJICBCVF9GTl9JMTZfVlBUUl9JMTZfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfTkFORF9OLAorCQkgICJfX2F0b21pY19mZXRjaF9uYW5kIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9OQU5EXzEsCisJCSAgIl9fYXRvbWljX2ZldGNoX25hbmRfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfTkFORF8yLAorCQkgICJfX2F0b21pY19mZXRjaF9uYW5kXzIiLAorCQkgIEJUX0ZOX0kyX1ZQVFJfSTJfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX05BTkRfNCwKKwkJICAiX19hdG9taWNfZmV0Y2hfbmFuZF80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9OQU5EXzgsCisJCSAgIl9fYXRvbWljX2ZldGNoX25hbmRfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfTkFORF8xNiwKKwkJICAiX19hdG9taWNfZmV0Y2hfbmFuZF8xNiIsCisJCSAgQlRfRk5fSTE2X1ZQVFJfSTE2X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX1hPUl9OLAorCQkgICJfX2F0b21pY19mZXRjaF94b3IiLAorCQkgIEJUX0ZOX1ZPSURfVkFSLCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX1hPUl8xLAorCQkgICJfX2F0b21pY19mZXRjaF94b3JfMSIsCisJCSAgQlRfRk5fSTFfVlBUUl9JMV9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfWE9SXzIsCisJCSAgIl9fYXRvbWljX2ZldGNoX3hvcl8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9YT1JfNCwKKwkJICAiX19hdG9taWNfZmV0Y2hfeG9yXzQiLAorCQkgIEJUX0ZOX0k0X1ZQVFJfSTRfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX1hPUl84LAorCQkgICJfX2F0b21pY19mZXRjaF94b3JfOCIsCisJCSAgQlRfRk5fSThfVlBUUl9JOF9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfRkVUQ0hfWE9SXzE2LAorCQkgICJfX2F0b21pY19mZXRjaF94b3JfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0ZFVENIX09SX04sCisJCSAgIl9fYXRvbWljX2ZldGNoX29yIiwKKwkJICBCVF9GTl9WT0lEX1ZBUiwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9PUl8xLAorCQkgICJfX2F0b21pY19mZXRjaF9vcl8xIiwKKwkJICBCVF9GTl9JMV9WUFRSX0kxX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9PUl8yLAorCQkgICJfX2F0b21pY19mZXRjaF9vcl8yIiwKKwkJICBCVF9GTl9JMl9WUFRSX0kyX0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9PUl80LAorCQkgICJfX2F0b21pY19mZXRjaF9vcl80IiwKKwkJICBCVF9GTl9JNF9WUFRSX0k0X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9PUl84LAorCQkgICJfX2F0b21pY19mZXRjaF9vcl84IiwKKwkJICBCVF9GTl9JOF9WUFRSX0k4X0lOVCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19GRVRDSF9PUl8xNiwKKwkJICAiX19hdG9taWNfZmV0Y2hfb3JfMTYiLAorCQkgIEJUX0ZOX0kxNl9WUFRSX0kxNl9JTlQsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCisKK0RFRl9TWU5DX0JVSUxUSU4gKEJVSUxUX0lOX0FUT01JQ19BTFdBWVNfTE9DS19GUkVFLAorCQkgICJfX2F0b21pY19hbHdheXNfbG9ja19mcmVlIiwKKwkJICBCVF9GTl9CT09MX1NJWkVfQ09OU1RfVlBUUiwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKKworREVGX1NZTkNfQlVJTFRJTiAoQlVJTFRfSU5fQVRPTUlDX0lTX0xPQ0tfRlJFRSwKKwkJICAiX19hdG9taWNfaXNfbG9ja19mcmVlIiwKKwkJICBCVF9GTl9CT09MX1NJWkVfQ09OU1RfVlBUUiwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKKworCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfVEhSRUFEX0ZFTkNFLAorCQkgICJfX2F0b21pY190aHJlYWRfZmVuY2UiLAorCQkgIEJUX0ZOX1ZPSURfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCitERUZfU1lOQ19CVUlMVElOIChCVUlMVF9JTl9BVE9NSUNfU0lHTkFMX0ZFTkNFLAorCQkgICJfX2F0b21pY19zaWduYWxfZmVuY2UiLAorCQkgIEJUX0ZOX1ZPSURfSU5ULCBBVFRSX05PVEhST1dfTEVBRl9MSVNUKQorCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvc3lzdGVtLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjZDU2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS9zeXN0ZW0uaApAQCAtMCwwICsxLDEwNTcgQEAKKy8qIEdldCBjb21tb24gc3lzdGVtIGluY2x1ZGVzIGFuZCB2YXJpb3VzIGRlZmluaXRpb25zIGFuZCBkZWNsYXJhdGlvbnMgYmFzZWQKKyAgIG9uIGF1dG9jb25mIG1hY3Jvcy4KKyAgIENvcHlyaWdodCAoQykgMTk5OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisjaWZuZGVmIEdDQ19TWVNURU1fSAorI2RlZmluZSBHQ0NfU1lTVEVNX0gKKworLyogV2UgbXVzdCBpbmNsdWRlIHN0ZGFyZy5oIGJlZm9yZSBzdGRpby5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2lmbmRlZiB2YV9jb3B5CisjIGlmZGVmIF9fdmFfY29weQorIyAgIGRlZmluZSB2YV9jb3B5KGQscykgIF9fdmFfY29weSgoZCksKHMpKQorIyBlbHNlCisjICAgZGVmaW5lIHZhX2NvcHkoZCxzKSAgKChkKSA9IChzKSkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVERERUZfSAorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyogRGVmaW5lIGEgZ2VuZXJpYyBOVUxMIGlmIG9uZSBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRlZmluZWQuICAqLworI2lmbmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgMAorI2VuZGlmCisKKy8qIFVzZSB0aGUgdW5sb2NrZWQgb3BlbiByb3V0aW5lcyBmcm9tIGxpYmliZXJ0eS4gICovCisKKy8qIFNvbWUgb2YgdGhlc2UgYXJlICNkZWZpbmUgb24gc29tZSBzeXN0ZW1zLCBlLmcuIG9uIEFJWCB0byByZWRpcmVjdAorICAgdGhlIG5hbWVzIHRvIDY0Yml0IGNhcGFibGUgZnVuY3Rpb25zIGZvciBMQVJHRV9GSUxFUyBzdXBwb3J0LiBUaGVzZQorICAgcmVkZWZzIGFyZSBwb2ludGxlc3MgaGVyZSBzbyB3ZSBjYW4gb3ZlcnJpZGUgdGhlbS4gICovCisKKyN1bmRlZiBmb3BlbiAKKyN1bmRlZiBmcmVvcGVuIAorCisjZGVmaW5lIGZvcGVuKFBBVEgsTU9ERSkgZm9wZW5fdW5sb2NrZWQoUEFUSCxNT0RFKQorI2RlZmluZSBmZG9wZW4oRklMREVTLE1PREUpIGZkb3Blbl91bmxvY2tlZChGSUxERVMsTU9ERSkKKyNkZWZpbmUgZnJlb3BlbihQQVRILE1PREUsU1RSRUFNKSBmcmVvcGVuX3VubG9ja2VkKFBBVEgsTU9ERSxTVFJFQU0pCisKKy8qIFRoZSBjb21waWxlciBpcyBub3QgYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbiBhbmQgdGhlcmVmb3JlIHdlCisgICBkbyBub3QgaGF2ZSB0byB1c2UgdGhlIGxvY2tpbmcgZnVuY3Rpb25zLiAgSW4gZmFjdCwgdXNpbmcgdGhlIGxvY2tpbmcKKyAgIGZ1bmN0aW9ucyBjYW4gY2F1c2UgdGhlIGNvbXBpbGVyIHRvIGJlIHNpZ25pZmljYW50bHkgc2xvd2VyIHVuZGVyCisgICBJL08gYm91bmQgY29uZGl0aW9ucyAoc3VjaCBhcyAtZyAtTzAgb24gdmVyeSBsYXJnZSBzb3VyY2UgZmlsZXMpLgorCisgICBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCBhY3R1YWxseSBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHN0ZGlvCisgICBjb2RlIGlzIG11bHRpLXRocmVhZCBzYWZlIGJ5IGRlZmF1bHQuICBJZiBpdCBpcyBzZXQgdG8gMCwgdGhlbiBkbworICAgbm90IHdvcnJ5IGFib3V0IHVzaW5nIHRoZSBfdW5sb2NrZWQgZnVuY3Rpb25zLgorCisgICBmcHV0c191bmxvY2tlZCwgZndyaXRlX3VubG9ja2VkLCBhbmQgZnByaW50Zl91bmxvY2tlZCBhcmUKKyAgIGV4dGVuc2lvbnMgYW5kIG5lZWQgdG8gYmUgcHJvdG90eXBlZCBieSBoYW5kIChzaW5jZSB3ZSBkbyBub3QKKyAgIGRlZmluZSBfR05VX1NPVVJDRSkuICAqLworCisjaWYgZGVmaW5lZCBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRCAmJiBIQVZFX0RFQ0xfUFVUQ19VTkxPQ0tFRAorCisjIGlmZGVmIEhBVkVfUFVUQ19VTkxPQ0tFRAorIyAgdW5kZWYgcHV0YworIyAgZGVmaW5lIHB1dGMoQywgU3RyZWFtKSBwdXRjX3VubG9ja2VkIChDLCBTdHJlYW0pCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfUFVUQ0hBUl9VTkxPQ0tFRAorIyAgdW5kZWYgcHV0Y2hhcgorIyAgZGVmaW5lIHB1dGNoYXIoQykgcHV0Y2hhcl91bmxvY2tlZCAoQykKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9HRVRDX1VOTE9DS0VECisjICB1bmRlZiBnZXRjCisjICBkZWZpbmUgZ2V0YyhTdHJlYW0pIGdldGNfdW5sb2NrZWQgKFN0cmVhbSkKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9HRVRDSEFSX1VOTE9DS0VECisjICB1bmRlZiBnZXRjaGFyCisjICBkZWZpbmUgZ2V0Y2hhcigpIGdldGNoYXJfdW5sb2NrZWQgKCkKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GUFVUQ19VTkxPQ0tFRAorIyAgdW5kZWYgZnB1dGMKKyMgIGRlZmluZSBmcHV0YyhDLCBTdHJlYW0pIGZwdXRjX3VubG9ja2VkIChDLCBTdHJlYW0pCisjIGVuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworIyBpZmRlZiBIQVZFX0NMRUFSRVJSX1VOTE9DS0VECisjICB1bmRlZiBjbGVhcmVycgorIyAgZGVmaW5lIGNsZWFyZXJyKFN0cmVhbSkgY2xlYXJlcnJfdW5sb2NrZWQgKFN0cmVhbSkKKyMgIGlmIGRlZmluZWQgKEhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9DTEVBUkVSUl9VTkxPQ0tFRAorZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBIQVZFX0ZFT0ZfVU5MT0NLRUQKKyMgIHVuZGVmIGZlb2YKKyMgIGRlZmluZSBmZW9mKFN0cmVhbSkgZmVvZl91bmxvY2tlZCAoU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQpICYmICFIQVZFX0RFQ0xfRkVPRl9VTkxPQ0tFRAorZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GSUxFTk9fVU5MT0NLRUQKKyMgIHVuZGVmIGZpbGVubworIyAgZGVmaW5lIGZpbGVubyhTdHJlYW0pIGZpbGVub191bmxvY2tlZCAoU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZJTEVOT19VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GSUxFTk9fVU5MT0NLRUQKK2V4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GRkxVU0hfVU5MT0NLRUQKKyMgIHVuZGVmIGZmbHVzaAorIyAgZGVmaW5lIGZmbHVzaChTdHJlYW0pIGZmbHVzaF91bmxvY2tlZCAoU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZGTFVTSF9VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GRkxVU0hfVU5MT0NLRUQKK2V4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GR0VUQ19VTkxPQ0tFRAorIyAgdW5kZWYgZmdldGMKKyMgIGRlZmluZSBmZ2V0YyhTdHJlYW0pIGZnZXRjX3VubG9ja2VkIChTdHJlYW0pCisjICBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfRkdFVENfVU5MT0NLRUQpICYmICFIQVZFX0RFQ0xfRkdFVENfVU5MT0NLRUQKK2V4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKik7CisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBIQVZFX0ZHRVRTX1VOTE9DS0VECisjICB1bmRlZiBmZ2V0cworIyAgZGVmaW5lIGZnZXRzKFMsIG4sIFN0cmVhbSkgZmdldHNfdW5sb2NrZWQgKFMsIG4sIFN0cmVhbSkKKyMgIGlmIGRlZmluZWQgKEhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GR0VUU19VTkxPQ0tFRAorZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICosIGludCwgRklMRSAqKTsKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfRlBVVFNfVU5MT0NLRUQKKyMgIHVuZGVmIGZwdXRzCisjICBkZWZpbmUgZnB1dHMoU3RyaW5nLCBTdHJlYW0pIGZwdXRzX3VubG9ja2VkIChTdHJpbmcsIFN0cmVhbSkKKyMgIGlmIGRlZmluZWQgKEhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRAorZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoY29uc3QgY2hhciAqLCBGSUxFICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GRVJST1JfVU5MT0NLRUQKKyMgIHVuZGVmIGZlcnJvcgorIyAgZGVmaW5lIGZlcnJvcihTdHJlYW0pIGZlcnJvcl91bmxvY2tlZCAoU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GRVJST1JfVU5MT0NLRUQKK2V4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GUkVBRF9VTkxPQ0tFRAorIyAgdW5kZWYgZnJlYWQKKyMgIGRlZmluZSBmcmVhZChQdHIsIFNpemUsIE4sIFN0cmVhbSkgZnJlYWRfdW5sb2NrZWQgKFB0ciwgU2l6ZSwgTiwgU3RyZWFtKQorIyAgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VEKSAmJiAhSEFWRV9ERUNMX0ZSRUFEX1VOTE9DS0VECitleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9GV1JJVEVfVU5MT0NLRUQKKyMgIHVuZGVmIGZ3cml0ZQorIyAgZGVmaW5lIGZ3cml0ZShQdHIsIFNpemUsIE4sIFN0cmVhbSkgZndyaXRlX3VubG9ja2VkIChQdHIsIFNpemUsIE4sIFN0cmVhbSkKKyMgIGlmIGRlZmluZWQgKEhBVkVfREVDTF9GV1JJVEVfVU5MT0NLRUQpICYmICFIQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VECitleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmZGVmIEhBVkVfRlBSSU5URl9VTkxPQ0tFRAorIyAgdW5kZWYgZnByaW50ZgorLyogV2UgY2FuJ3QgdXNlIGEgZnVuY3Rpb24tbGlrZSBtYWNybyBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZgorICAgd2UgaGF2ZSB2YXJhcmdzIG1hY3Jvcy4gICovCisjICBkZWZpbmUgZnByaW50ZiBmcHJpbnRmX3VubG9ja2VkCisjICBpZiBkZWZpbmVkIChIQVZFX0RFQ0xfRlBSSU5URl9VTkxPQ0tFRCkgJiYgIUhBVkVfREVDTF9GUFJJTlRGX1VOTE9DS0VECitleHRlcm4gaW50IGZwcmludGZfdW5sb2NrZWQgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOworIyAgZW5kaWYKKyMgZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisKKy8qID8/PyBHbGliYydzIGZ3cml0ZS9mcmVhZF91bmxvY2tlZCBtYWNyb3MgY2F1c2UKKyAgICJ3YXJuaW5nOiBzaWduZWQgYW5kIHVuc2lnbmVkIHR5cGUgaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbiIuICAqLworI3VuZGVmIGZyZWFkX3VubG9ja2VkCisjdW5kZWYgZndyaXRlX3VubG9ja2VkCisKKy8qIFRoZXJlIGFyZSBhbiBleHRyYW9yZGluYXJ5IG51bWJlciBvZiBpc3N1ZXMgd2l0aCA8Y3R5cGUuaD4uCisgICBUaGUgbGFzdCBzdHJhdyBpcyB0aGF0IGl0IHZhcmllcyB3aXRoIHRoZSBsb2NhbGUuICBVc2UgbGliaWJlcnR5J3MKKyAgIHJlcGxhY2VtZW50IGluc3RlYWQuICAqLworI2luY2x1ZGUgInNhZmUtY3R5cGUuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmICFkZWZpbmVkIChlcnJubykgJiYgZGVmaW5lZCAoSEFWRV9ERUNMX0VSUk5PKSAmJiAhSEFWRV9ERUNMX0VSUk5PCitleHRlcm4gaW50IGVycm5vOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworIyBpbmNsdWRlIDxjc3RyaW5nPgorI2VuZGlmCisKKy8qIFNvbWUgb2YgZ2xpYmMncyBzdHJpbmcgaW5saW5lcyBjYXVzZSB3YXJuaW5ncy4gIFBsdXMgd2UnZCByYXRoZXIKKyAgIHJlbHkgb24gKGFuZCB0aGVyZWZvcmUgdGVzdCkgR0NDJ3Mgc3RyaW5nIGJ1aWx0aW5zLiAgKi8KKyNkZWZpbmUgX19OT19TVFJJTkdfSU5MSU5FUworCisjaWZkZWYgU1RSSU5HX1dJVEhfU1RSSU5HUworIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TVFJJTkdfSAorIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjIGVsc2UKKyMgIGlmZGVmIEhBVkVfU1RSSU5HU19ICisjICAgaW5jbHVkZSA8c3RyaW5ncy5oPgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVERMSUJfSAorIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisvKiBVbmRlZiB2ZWNfZnJlZSBmcm9tIEFJWCBzdGRsaWIuaCBoZWFkZXIgd2hpY2ggY29uZmxpY3RzIHdpdGggdmVjLmguICAqLworI3VuZGVmIHZlY19mcmVlCisKKy8qIElmIHdlIGRvbid0IGhhdmUgYW4gb3ZlcnJpZGluZyBkZWZpbml0aW9uLCBzZXQgU1VDQ0VTU19FWElUX0NPREUgYW5kCisgICBGQVRBTF9FWElUX0NPREUgdG8gRVhJVF9TVUNDRVNTIGFuZCBFWElUX0ZBSUxVUkUgcmVzcGVjdGl2ZWx5LAorICAgb3IgMCBhbmQgMSBpZiB0aG9zZSBtYWNyb3MgYXJlIG5vdCBkZWZpbmVkLiAgKi8KKyNpZm5kZWYgU1VDQ0VTU19FWElUX0NPREUKKyMgaWZkZWYgRVhJVF9TVUNDRVNTCisjICBkZWZpbmUgU1VDQ0VTU19FWElUX0NPREUgRVhJVF9TVUNDRVNTCisjIGVsc2UKKyMgIGRlZmluZSBTVUNDRVNTX0VYSVRfQ09ERSAwCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBGQVRBTF9FWElUX0NPREUKKyMgaWZkZWYgRVhJVF9GQUlMVVJFCisjICBkZWZpbmUgRkFUQUxfRVhJVF9DT0RFIEVYSVRfRkFJTFVSRQorIyBlbHNlCisjICBkZWZpbmUgRkFUQUxfRVhJVF9DT0RFIDEKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIElDRV9FWElUX0NPREUgNAorCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy8qIFdlIHVzZSB0aGlzIGlkZW50aWZpZXIgbGF0ZXIgYW5kIGl0IGFwcGVhcnMgaW4gc29tZSB2ZW5kb3IgcGFyYW0uaCdzLiAgKi8KKyMgdW5kZWYgUFJFRkVUQ0gKKyNlbmRpZgorCisjaWYgSEFWRV9MSU1JVFNfSAorIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZgorCisvKiBHZXQgZGVmaW5pdGlvbnMgb2YgSE9TVF9XSURFX0lOVCBhbmQgSE9TVF9XSURFU1RfSU5ULiAgKi8KKyNpbmNsdWRlICJod2ludC5oIgorCisvKiBBIG1hY3JvIHRvIGRldGVybWluZSB3aGV0aGVyIGEgVkFMVUUgbGllcyBpbmNsdXNpdmVseSB3aXRoaW4gYQorICAgY2VydGFpbiByYW5nZSB3aXRob3V0IGV2YWx1YXRpbmcgdGhlIFZBTFVFIG1vcmUgdGhhbiBvbmNlLiAgVGhpcworICAgbWFjcm8gd29uJ3Qgd2FybiBpZiB0aGUgVkFMVUUgaXMgdW5zaWduZWQgYW5kIHRoZSBMT1dFUiBib3VuZCBpcworICAgemVybywgYXMgaXQgd291bGQgZS5nLiB3aXRoICJWQUxVRSA+PSAwICYmIC4uLiIuICBOb3RlIHRoZSBMT1dFUgorICAgYm91bmQgKmlzKiBldmFsdWF0ZWQgdHdpY2UsIGFuZCBMT1dFUiBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4KKyAgIFVQUEVSLiAgSG93ZXZlciB0aGUgYm91bmRzIHRoZW1zZWx2ZXMgY2FuIGJlIGVpdGhlciBwb3NpdGl2ZSBvcgorICAgbmVnYXRpdmUuICAqLworI2RlZmluZSBJTl9SQU5HRShWQUxVRSwgTE9XRVIsIFVQUEVSKSBcCisgICgodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgKFZBTFVFKSAtICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAoTE9XRVIpIFwKKyAgIDw9ICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAoVVBQRVIpIC0gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIChMT1dFUikpCisKKy8qIEluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyBtaXNzaW5nIF9NQVggYW5kIF9NSU4gbWFjcm9zLiAgTm90ZSB0aGF0CisgICBtYWNyb3MgZGVmaW5lZCB3aXRoIHRoZXNlIGNhbm5vdCBiZSB1c2VkIGluICNpZi4gICovCisKKy8qIFRoZSBleHRyYSBjYXN0cyB3b3JrIGFyb3VuZCBjb21tb24gY29tcGlsZXIgYnVncy4gICovCisjZGVmaW5lIElOVFRZUEVfU0lHTkVEKHQpICghICgodCkgMCA8ICh0KSAtMSkpCisvKiBUaGUgb3V0ZXIgY2FzdCBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQgYSBidWcgaW4gQ3JheSBDIDUuMC4zLjAuCisgICBJdCBpcyBuZWNlc3NhcnkgYXQgbGVhc3Qgd2hlbiB0ID09IHRpbWVfdC4gICovCisjZGVmaW5lIElOVFRZUEVfTUlOSU1VTSh0KSAoKHQpIChJTlRUWVBFX1NJR05FRCAodCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IH4gKHQpIDAgPDwgKHNpemVvZih0KSAqIENIQVJfQklUIC0gMSkgOiAodCkgMCkpCisjZGVmaW5lIElOVFRZUEVfTUFYSU1VTSh0KSAoKHQpICh+ICh0KSAwIC0gSU5UVFlQRV9NSU5JTVVNICh0KSkpCisKKy8qIFVzZSB0aGF0IGluZnJhc3RydWN0dXJlIHRvIHByb3ZpZGUgYSBmZXcgY29uc3RhbnRzLiAgKi8KKyNpZm5kZWYgVUNIQVJfTUFYCisjIGRlZmluZSBVQ0hBUl9NQVggSU5UVFlQRV9NQVhJTVVNICh1bnNpZ25lZCBjaGFyKQorI2VuZGlmCisKKyNpZmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpZmRlZiBIQVZFX1RJTUVfSAorIyAgIGluY2x1ZGUgPHRpbWUuaD4KKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkNOVExfSAorIyBpbmNsdWRlIDxmY250bC5oPgorI2Vsc2UKKyMgaWZkZWYgSEFWRV9TWVNfRklMRV9ICisjICBpbmNsdWRlIDxzeXMvZmlsZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU0VFS19TRVQKKyMgZGVmaW5lIFNFRUtfU0VUIDAKKyMgZGVmaW5lIFNFRUtfQ1VSIDEKKyMgZGVmaW5lIFNFRUtfRU5EIDIKKyNlbmRpZgorI2lmbmRlZiBGX09LCisjIGRlZmluZSBGX09LIDAKKyMgZGVmaW5lIFhfT0sgMQorIyBkZWZpbmUgV19PSyAyCisjIGRlZmluZSBSX09LIDQKKyNlbmRpZgorI2lmbmRlZiBPX1JET05MWQorIyBkZWZpbmUgT19SRE9OTFkgMAorI2VuZGlmCisjaWZuZGVmIE9fV1JPTkxZCisjIGRlZmluZSBPX1dST05MWSAxCisjZW5kaWYKKyNpZm5kZWYgT19CSU5BUlkKKyMgZGVmaW5lIE9fQklOQVJZIDAKKyNlbmRpZgorCisvKiBTb21lIHN5c3RlbXMgZGVmaW5lIHRoZXNlIGluLCBlLmcuLCBwYXJhbS5oLiAgV2UgdW5kZWZpbmUgdGhlc2UgbmFtZXMKKyAgIGhlcmUgdG8gYXZvaWQgdGhlIHdhcm5pbmdzLiAgV2UgcHJlZmVyIHRvIHVzZSBvdXIgZGVmaW5pdGlvbnMgc2luY2Ugd2UKKyAgIGtub3cgdGhleSBhcmUgY29ycmVjdC4gICovCisKKyN1bmRlZiBNSU4KKyN1bmRlZiBNQVgKKyNkZWZpbmUgTUlOKFgsWSkgKChYKSA8IChZKSA/IChYKSA6IChZKSkKKyNkZWZpbmUgTUFYKFgsWSkgKChYKSA+IChZKSA/IChYKSA6IChZKSkKKworLyogUmV0dXJucyB0aGUgbGVhc3QgbnVtYmVyIE4gc3VjaCB0aGF0IE4gKiBZID49IFguICAqLworI2RlZmluZSBDRUlMKHgseSkgKCgoeCkgKyAoeSkgLSAxKSAvICh5KSkKKworI2lmZGVmIEhBVkVfU1lTX1dBSVRfSAorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjZW5kaWYKKworI2lmbmRlZiBXSUZTSUdOQUxFRAorI2RlZmluZSBXSUZTSUdOQUxFRChTKSAoKChTKSAmIDB4ZmYpICE9IDAgJiYgKChTKSAmIDB4ZmYpICE9IDB4N2YpCisjZW5kaWYKKyNpZm5kZWYgV1RFUk1TSUcKKyNkZWZpbmUgV1RFUk1TSUcoUykgKChTKSAmIDB4N2YpCisjZW5kaWYKKyNpZm5kZWYgV0lGRVhJVEVECisjZGVmaW5lIFdJRkVYSVRFRChTKSAoKChTKSAmIDB4ZmYpID09IDApCisjZW5kaWYKKyNpZm5kZWYgV0VYSVRTVEFUVVMKKyNkZWZpbmUgV0VYSVRTVEFUVVMoUykgKCgoUykgJiAweGZmMDApID4+IDgpCisjZW5kaWYKKyNpZm5kZWYgV1NUT1BTSUcKKyNkZWZpbmUgV1NUT1BTSUcgV0VYSVRTVEFUVVMKKyNlbmRpZgorI2lmbmRlZiBXQ09SRURVTVAKKyNkZWZpbmUgV0NPUkVEVU1QKFMpICgoUykgJiBXQ09SRUZMRykKKyNlbmRpZgorI2lmbmRlZiBXQ09SRUZMRworI2RlZmluZSBXQ09SRUZMRyAwMjAwCisjZW5kaWYKKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmICFkZWZpbmVkIChTSUdDSExEKSAmJiBkZWZpbmVkIChTSUdDTEQpCisjIGRlZmluZSBTSUdDSExEIFNJR0NMRAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19NTUFOX0gKKyMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNlbmRpZgorCisjaWZuZGVmIE1BUF9GQUlMRUQKKyMgZGVmaW5lIE1BUF9GQUlMRUQgKCh2b2lkICopLTEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkIChNQVBfQU5PTikKKyMgZGVmaW5lIE1BUF9BTk9OWU1PVVMgTUFQX0FOT04KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfUkVTT1VSQ0VfSAorIyBpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVElNRVNfSAorIyBpbmNsdWRlIDxzeXMvdGltZXMuaD4KKyNlbmRpZgorCisvKiBUaGUgSEFWRV9ERUNMXyogbWFjcm9zIGFyZSB0aHJlZS1zdGF0ZSwgdW5kZWZpbmVkLCAwIG9yIDEuICBJZiB0aGV5CisgICBhcmUgZGVmaW5lZCB0byAwIHRoZW4gd2UgbXVzdCBwcm92aWRlIHRoZSByZWxldmFudCBkZWNsYXJhdGlvbgorICAgaGVyZS4gIFRoZXNlIGNoZWNrcyB3aWxsIGJlIGluIHRoZSB1bmRlZmluZWQgc3RhdGUgd2hpbGUgY29uZmlndXJlCisgICBpcyBydW5uaW5nIHNvIGJlIGNhcmVmdWwgdG8gdGVzdCAiZGVmaW5lZCAoSEFWRV9ERUNMXyopIi4gICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9BVE9GKSAmJiAhSEFWRV9ERUNMX0FUT0YKK2V4dGVybiBkb3VibGUgYXRvZiAoY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0FUT0wpICYmICFIQVZFX0RFQ0xfQVRPTAorZXh0ZXJuIGxvbmcgYXRvbCAoY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0ZSRUUpICYmICFIQVZFX0RFQ0xfRlJFRQorZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVENXRCkgJiYgIUhBVkVfREVDTF9HRVRDV0QKK2V4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVEVOVikgJiYgIUhBVkVfREVDTF9HRVRFTlYKK2V4dGVybiBjaGFyICpnZXRlbnYgKGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9HRVRPUFQpICYmICFIQVZFX0RFQ0xfR0VUT1BUCitleHRlcm4gaW50IGdldG9wdCAoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVFBBR0VTSVpFKSAmJiAhSEFWRV9ERUNMX0dFVFBBR0VTSVpFCitleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVFdEKSAmJiAhSEFWRV9ERUNMX0dFVFdECitleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKik7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9TQlJLKSAmJiAhSEFWRV9ERUNMX1NCUksKK2V4dGVybiB2b2lkICpzYnJrIChpbnQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChIQVZFX0RFQ0xfU1RSU1RSKSAmJiAhSEFWRV9ERUNMX1NUUlNUUgorZXh0ZXJuIGNoYXIgKnN0cnN0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChIQVZFX0RFQ0xfU1RQQ1BZKSAmJiAhSEFWRV9ERUNMX1NUUENQWQorZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX01BTExPQ19ICisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX01BTExPQykgJiYgIUhBVkVfREVDTF9NQUxMT0MKK2V4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9DQUxMT0MpICYmICFIQVZFX0RFQ0xfQ0FMTE9DCitleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QsIHNpemVfdCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9SRUFMTE9DKSAmJiAhSEFWRV9ERUNMX1JFQUxMT0MKK2V4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICosIHNpemVfdCk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIElmIHRoZSBzeXN0ZW0gZG9lc24ndCBwcm92aWRlIHN0cnNpZ25hbCwgd2UgZ2V0IGl0IGRlZmluZWQgaW4KKyAgIGxpYmliZXJ0eSBidXQgbm8gZGVjbGFyYXRpb24gaXMgc3VwcGxpZWQuICAqLworI2lmICFkZWZpbmVkIChIQVZFX1NUUlNJR05BTCkgXAorICAgIHx8IChkZWZpbmVkIChIQVZFX0RFQ0xfU1RSU0lHTkFMKSAmJiAhSEFWRV9ERUNMX1NUUlNJR05BTCkKKyMgaWZuZGVmIHN0cnNpZ25hbAorZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cnNpZ25hbCAoaW50KTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HRVRSTElNSVQKKyMgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0dFVFJMSU1JVCkgJiYgIUhBVkVfREVDTF9HRVRSTElNSVQKKyMgIGlmbmRlZiBnZXRybGltaXQKK3N0cnVjdCBybGltaXQ7CitleHRlcm4gaW50IGdldHJsaW1pdCAoaW50LCBzdHJ1Y3QgcmxpbWl0ICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TRVRSTElNSVQKKyMgaWYgZGVmaW5lZCAoSEFWRV9ERUNMX1NFVFJMSU1JVCkgJiYgIUhBVkVfREVDTF9TRVRSTElNSVQKKyMgIGlmbmRlZiBzZXRybGltaXQKK3N0cnVjdCBybGltaXQ7CitleHRlcm4gaW50IHNldHJsaW1pdCAoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICopOworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX0FCT1JUKSAmJiAhSEFWRV9ERUNMX0FCT1JUCitleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKEhBVkVfREVDTF9TTlBSSU5URikgJiYgIUhBVkVfREVDTF9TTlBSSU5URgorZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSEFWRV9ERUNMX1ZTTlBSSU5URikgJiYgIUhBVkVfREVDTF9WU05QUklOVEYKK2V4dGVybiBpbnQgdnNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8qIDEgaWYgd2UgaGF2ZSBDOTkgZGVzaWduYXRlZCBpbml0aWFsaXplcnMuICAqLworI2lmICFkZWZpbmVkKEhBVkVfREVTSUdOQVRFRF9JTklUSUFMSVpFUlMpCisjZGVmaW5lIEhBVkVfREVTSUdOQVRFRF9JTklUSUFMSVpFUlMgXAorICAoKChHQ0NfVkVSU0lPTiA+PSAyMDA3KSB8fCAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKSkgXAorICAgJiYgIWRlZmluZWQoX19jcGx1c3BsdXMpKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX0RFU0lHTkFURURfVU5JT05fSU5JVElBTElaRVJTKQorI2RlZmluZSBIQVZFX0RFU0lHTkFURURfVU5JT05fSU5JVElBTElaRVJTIFwKKyAgKCgoR0NDX1ZFUlNJT04gPj0gMjAwNykgfHwgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkpIFwKKyAgICYmICghZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgKEdDQ19WRVJTSU9OID49IDQwMDcpKSkKKyNlbmRpZgorCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKworLyogVGVzdCBpZiBzb21ldGhpbmcgaXMgYSBub3JtYWwgZmlsZS4gICovCisjaWZuZGVmIFNfSVNSRUcKKyNkZWZpbmUgU19JU1JFRyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyNlbmRpZgorCisvKiBUZXN0IGlmIHNvbWV0aGluZyBpcyBhIGRpcmVjdG9yeS4gICovCisjaWZuZGVmIFNfSVNESVIKKyNkZWZpbmUgU19JU0RJUihtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKyNlbmRpZgorCisvKiBUZXN0IGlmIHNvbWV0aGluZyBpcyBhIGNoYXJhY3RlciBzcGVjaWFsIGZpbGUuICAqLworI2lmbmRlZiBTX0lTQ0hSCisjZGVmaW5lIFNfSVNDSFIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZDSFIpCisjZW5kaWYKKworLyogVGVzdCBpZiBzb21ldGhpbmcgaXMgYSBibG9jayBzcGVjaWFsIGZpbGUuICAqLworI2lmbmRlZiBTX0lTQkxLCisjZGVmaW5lIFNfSVNCTEsobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZCTEspCisjZW5kaWYKKworLyogVGVzdCBpZiBzb21ldGhpbmcgaXMgYSBzb2NrZXQuICAqLworI2lmbmRlZiBTX0lTU09DSworIyBpZmRlZiBTX0lGU09DSworIyAgIGRlZmluZSBTX0lTU09DSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlNPQ0spCisjIGVsc2UKKyMgICBkZWZpbmUgU19JU1NPQ0sobSkgMAorIyBlbmRpZgorI2VuZGlmCisKKy8qIFRlc3QgaWYgc29tZXRoaW5nIGlzIGEgRklGTy4gICovCisjaWZuZGVmIFNfSVNGSUZPCisjIGlmZGVmIFNfSUZJRk8KKyMgIGRlZmluZSBTX0lTRklGTyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRklGTykKKyMgZWxzZQorIyAgZGVmaW5lIFNfSVNGSUZPKG0pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBEZWZpbmUgd2VsbCBrbm93biBmaWxlbm9zIGlmIHRoZSBzeXN0ZW0gZG9lcyBub3QgZGVmaW5lIHRoZW0uICAqLworI2lmbmRlZiBTVERJTl9GSUxFTk8KKyMgZGVmaW5lIFNURElOX0ZJTEVOTyAgIDAKKyNlbmRpZgorI2lmbmRlZiBTVERPVVRfRklMRU5PCisjIGRlZmluZSBTVERPVVRfRklMRU5PICAxCisjZW5kaWYKKyNpZm5kZWYgU1RERVJSX0ZJTEVOTworIyBkZWZpbmUgU1RERVJSX0ZJTEVOTyAgMgorI2VuZGlmCisKKy8qIFNvbWUgc3lzdGVtcyBoYXZlIG1rZGlyIHRoYXQgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQuICAqLworI2lmZGVmIE1LRElSX1RBS0VTX09ORV9BUkcKKyMgZGVmaW5lIG1rZGlyKGEsYikgbWtkaXIoYSkKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfS0lMTAorIyBkZWZpbmUga2lsbChwLHMpIHJhaXNlKHMpCisjZW5kaWYKKworLyogUHJvdmlkZSBhIHdheSB0byBwcmludCBhbiBhZGRyZXNzIHZpYSBwcmludGYuICAqLworI2lmbmRlZiBIT1NUX1BUUl9QUklOVEYKKyNkZWZpbmUgSE9TVF9QVFJfUFJJTlRGICIlcCIKKyNlbmRpZiAvKiAhIEhPU1RfUFRSX1BSSU5URiAqLworCisvKiBCeSBkZWZhdWx0LCBjb2xvbiBzZXBhcmF0ZXMgZGlyZWN0b3JpZXMgaW4gYSBwYXRoLiAgKi8KKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1IKKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworLyogRmlsZW5hbWUgaGFuZGxpbmcgbWFjcm9zLiAgKi8KKyNpbmNsdWRlICJmaWxlbmFtZXMuaCIKKworLyogVGhlc2Ugc2hvdWxkIGJlIHBoYXNlZCBvdXQgaW4gZmF2b3Igb2YgSVNfRElSX1NFUEFSQVRPUiwgd2hlcmUgcG9zc2libGUuICAqLworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBpZmRlZiBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKEVOQUJMRV9QTFVHSU4pICYmIGRlZmluZWQgKEhBVkVfRExGQ05fSCkKKy8qIElmIHBsdWdpbiBzdXBwb3J0IGlzIGVuYWJsZWQsIHdlIGNvdWxkIHVzZSBsaWJkbC4gICovCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisvKiBEbyBub3QgaW50cm9kdWNlIGEgZ21wLmggZGVwZW5kZW5jeSBvbiB0aGUgYnVpbGQgc3lzdGVtLiAgKi8KKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUKKyNpbmNsdWRlIDxnbXAuaD4KKyNlbmRpZgorCisvKiBHZXQgbGliaWJlcnR5IGRlY2xhcmF0aW9ucy4gICovCisjaW5jbHVkZSAibGliaWJlcnR5LmgiCisKKyN1bmRlZiBGRlMgIC8qIFNvbWUgc3lzdGVtcyBwcmVkZWZpbmUgdGhpcyBzeW1ib2w7IGRvbid0IGxldCBpdCBpbnRlcmZlcmUuICAqLworI3VuZGVmIEZMT0FUIC8qIExpa2V3aXNlLiAgKi8KKyN1bmRlZiBBQlMgLyogTGlrZXdpc2UuICAqLworI3VuZGVmIFBDIC8qIExpa2V3aXNlLiAgKi8KKworLyogUHJvdmlkZSBhIGRlZmF1bHQgZm9yIHRoZSBIT1NUX0JJVF9CVUNLRVQuCisgICBUaGlzIHN1ZmZpY2VzIGZvciBQT1NJWC1saWtlIGhvc3RzLiAgKi8KKworI2lmbmRlZiBIT1NUX0JJVF9CVUNLRVQKKyNkZWZpbmUgSE9TVF9CSVRfQlVDS0VUICIvZGV2L251bGwiCisjZW5kaWYKKworI2lmbmRlZiBvZmZzZXRvZgorI2RlZmluZSBvZmZzZXRvZihUWVBFLCBNRU1CRVIpCSgoc2l6ZV90KSAmKChUWVBFICopIDApLT5NRU1CRVIpCisjZW5kaWYKKworLyogVmFyaW91cyBlcnJvciByZXBvcnRpbmcgcm91dGluZXMgd2FudCB0byB1c2UgX19GVU5DVElPTl9fLiAgKi8KKyNpZiAoR0NDX1ZFUlNJT04gPCAyMDA3KQorI2lmbmRlZiBfX0ZVTkNUSU9OX18KKyNkZWZpbmUgX19GVU5DVElPTl9fICI/IgorI2VuZGlmIC8qICEgX19GVU5DVElPTl9fICovCisjZW5kaWYKKworLyogX19idWlsdGluX2V4cGVjdChBLCBCKSBldmFsdWF0ZXMgdG8gQSwgYnV0IG5vdGlmaWVzIHRoZSBjb21waWxlciB0aGF0CisgICB0aGUgbW9zdCBsaWtlbHkgdmFsdWUgb2YgQSBpcyBCLiAgVGhpcyBmZWF0dXJlIHdhcyBhZGRlZCBhdCBzb21lIHBvaW50CisgICBiZXR3ZWVuIDIuOTUgYW5kIDMuMC4gIExldCdzIHVzZSAzLjAgYXMgdGhlIGxvd2VyIGJvdW5kIGZvciBub3cuICAqLworI2lmIChHQ0NfVkVSU0lPTiA8IDMwMDApCisjZGVmaW5lIF9fYnVpbHRpbl9leHBlY3QoYSwgYikgKGEpCisjZW5kaWYKKworLyogUmVkZWZpbmUgYWJvcnQgdG8gcmVwb3J0IGFuIGludGVybmFsIGVycm9yIHcvbyBjb3JlZHVtcCwgYW5kCisgICByZXBvcnRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvciBpbiB0aGUgc291cmNlIGZpbGUuICAqLworZXh0ZXJuIHZvaWQgZmFuY3lfYWJvcnQgKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopIEFUVFJJQlVURV9OT1JFVFVSTjsKKyNkZWZpbmUgYWJvcnQoKSBmYW5jeV9hYm9ydCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pCisKKy8qIFVzZSBnY2NfYXNzZXJ0KEVYUFIpIHRvIHRlc3QgaW52YXJpYW50cy4gICovCisjaWYgRU5BQkxFX0FTU0VSVF9DSEVDS0lORworI2RlZmluZSBnY2NfYXNzZXJ0KEVYUFIpIAkJCQkJCVwKKyAgICgodm9pZCkoIShFWFBSKSA/IGZhbmN5X2Fib3J0IChfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyksIDAgOiAwKSkKKyNlbGlmIChHQ0NfVkVSU0lPTiA+PSA0MDA1KQorI2RlZmluZSBnY2NfYXNzZXJ0KEVYUFIpIAkJCQkJCVwKKyAgKCh2b2lkKShfX2J1aWx0aW5fZXhwZWN0KCEoRVhQUiksIDApID8gX19idWlsdGluX3VucmVhY2hhYmxlKCksIDAgOiAwKSkKKyNlbHNlCisvKiBJbmNsdWRlIEVYUFIsIHNvIHRoYXQgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzIGRvIG5vdCBvY2N1ci4gICovCisjZGVmaW5lIGdjY19hc3NlcnQoRVhQUikgKCh2b2lkKSgwICYmIChFWFBSKSkpCisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworI2RlZmluZSBnY2NfY2hlY2tpbmdfYXNzZXJ0KEVYUFIpIGdjY19hc3NlcnQgKEVYUFIpCisjZWxzZQorI2RlZmluZSBnY2NfY2hlY2tpbmdfYXNzZXJ0KEVYUFIpICgodm9pZCkoMCAmJiAoRVhQUikpKQorI2VuZGlmCisKKy8qIFVzZSBnY2NfdW5yZWFjaGFibGUoKSB0byBtYXJrIHVucmVhY2hhYmxlIGxvY2F0aW9ucyAobGlrZSBhbgorICAgdW5yZWFjaGFibGUgZGVmYXVsdCBjYXNlIG9mIGEgc3dpdGNoLiAgRG8gbm90IHVzZSBnY2NfYXNzZXJ0KDApLiAgKi8KKyNpZiAoR0NDX1ZFUlNJT04gPj0gNDAwNSkgJiYgIUVOQUJMRV9BU1NFUlRfQ0hFQ0tJTkcKKyNkZWZpbmUgZ2NjX3VucmVhY2hhYmxlKCkgX19idWlsdGluX3VucmVhY2hhYmxlKCkKKyNlbHNlCisjZGVmaW5lIGdjY191bnJlYWNoYWJsZSgpIChmYW5jeV9hYm9ydCAoX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pKQorI2VuZGlmCisKKy8qIFByb3ZpZGUgYSBmYWtlIGJvb2xlYW4gdHlwZS4gIFdlIG1ha2Ugbm8gYXR0ZW1wdCB0byB1c2UgdGhlCisgICBDOTkgX0Jvb2wsIGFzIGl0IG1heSBub3QgYmUgYXZhaWxhYmxlIGluIHRoZSBib290c3RyYXAgY29tcGlsZXIsCisgICBhbmQgZXZlbiBpZiBpdCBpcywgaXQgaXMgbGlhYmxlIHRvIGJlIGJ1Z2d5LgorICAgVGhpcyBtdXN0IGJlIGFmdGVyIGFsbCBpbmNsdXNpb24gb2Ygc3lzdGVtIGhlYWRlcnMsIGFzIHNvbWUgb2YKKyAgIHRoZW0gd2lsbCBtZXNzIHVzIHVwLiAgKi8KKworI3VuZGVmIFRSVUUKKyN1bmRlZiBGQUxTRQorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgLyogT2Jzb2xldGUuICAqLworIyBkZWZpbmUgVFJVRSB0cnVlCisjIGRlZmluZSBGQUxTRSBmYWxzZQorI2Vsc2UgLyogIV9fY3BsdXNwbHVzICovCisjIHVuZGVmIGJvb2wKKyMgdW5kZWYgdHJ1ZQorIyB1bmRlZiBmYWxzZQorCisjIGRlZmluZSBib29sIHVuc2lnbmVkIGNoYXIKKyMgZGVmaW5lIHRydWUgMQorIyBkZWZpbmUgZmFsc2UgMAorCisgIC8qIE9ic29sZXRlLiAgKi8KKyMgZGVmaW5lIFRSVUUgdHJ1ZQorIyBkZWZpbmUgRkFMU0UgZmFsc2UKKyNlbmRpZiAvKiAhX19jcGx1c3BsdXMgKi8KKworLyogU29tZSBjb21waWxlcnMgZG8gbm90IGFsbG93IHRoZSB1c2Ugb2YgdW5zaWduZWQgY2hhciBpbiBiaXRmaWVsZHMuICAqLworI2RlZmluZSBCT09MX0JJVEZJRUxEIHVuc2lnbmVkIGludAorCisvKiBBcyB0aGUgbGFzdCBhY3Rpb24gaW4gdGhpcyBmaWxlLCB3ZSBwb2lzb24gdGhlIGlkZW50aWZpZXJzIHRoYXQKKyAgIHNob3VsZG4ndCBiZSB1c2VkLiAgTm90ZSwgbHVja2lseSBnY2MtMy4wJ3MgdG9rZW4tYmFzZWQgaW50ZWdyYXRlZAorICAgcHJlcHJvY2Vzc29yIHdvbid0IHRyaXAgb24gcG9pc29uZWQgaWRlbnRpZmllcnMgdGhhdCBhcnJpdmUgZnJvbQorICAgdGhlIGV4cGFuc2lvbiBvZiBtYWNyb3MuICBFLmcuICNkZWZpbmUgc3RycmNociByaW5kZXgsIHdvbid0IGVycm9yCisgICBpZiByaW5kZXggaXMgcG9pc29uZWQgYWZ0ZXIgdGhpcyBkaXJlY3RpdmUgaXMgaXNzdWVkIGFuZCBsYXRlciBvbgorICAgc3RycmNociBpcyBjYWxsZWQuCisKKyAgIE5vdGU6IFdlIGRlZmluZSBieXBhc3MgbWFjcm9zIGZvciB0aGUgZmV3IGNhc2VzIHdoZXJlIHdlIHJlYWxseQorICAgd2FudCB0byB1c2UgdGhlIGxpYmMgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuICBPdGhlcndpc2Ugd2UKKyAgIGluc2lzdCB5b3UgdXNlIHRoZSAieCIgdmVyc2lvbnMgZnJvbSBsaWJpYmVydHkuICAqLworCisjZGVmaW5lIHJlYWxseV9jYWxsX21hbGxvYyBtYWxsb2MKKyNkZWZpbmUgcmVhbGx5X2NhbGxfY2FsbG9jIGNhbGxvYworI2RlZmluZSByZWFsbHlfY2FsbF9yZWFsbG9jIHJlYWxsb2MKKworI2lmIGRlZmluZWQoRkxFWF9TQ0FOTkVSKSB8fCBkZWZpbmVkKFlZQklTT04pIHx8IGRlZmluZWQoWVlCWUFDQykKKy8qIEZsZXggYW5kIGJpc29uIHVzZSBtYWxsb2MgYW5kIHJlYWxsb2MuICBZdWsuICBOb3RlIHRoYXQgdGhpcyBtZWFucworICAgcmVhbGx5X2NhbGxfKiBjYW5ub3QgYmUgdXNlZCBpbiBhIC5sIG9yIC55IGZpbGUuICAqLworI2RlZmluZSBtYWxsb2MgeG1hbGxvYworI2RlZmluZSByZWFsbG9jIHhyZWFsbG9jCisjZW5kaWYKKworI2lmIChHQ0NfVkVSU0lPTiA+PSAzMDAwKQorCisvKiBOb3RlIGF1dG9jb25mIGNoZWNrcyBmb3IgcHJvdG90eXBlIGRlY2xhcmF0aW9ucyBhbmQgaW5jbHVkZXMKKyAgIHN5c3RlbS5oIHdoaWxlIGRvaW5nIHNvLiAgT25seSBwb2lzb24gdGhlc2UgdG9rZW5zIGlmIGFjdHVhbGx5CisgICBjb21waWxpbmcgZ2NjLCBzbyB0aGF0IHRoZSBhdXRvY29uZiBkZWNsYXJhdGlvbiB0ZXN0cyBmb3IgbWFsbG9jCisgICBldGMgZG9uJ3Qgc3B1cmlvdXNseSBmYWlsLiAgKi8KKyNpZmRlZiBJTl9HQ0MKKyN1bmRlZiBjYWxsb2MKKyN1bmRlZiBzdHJkdXAKKyAjcHJhZ21hIEdDQyBwb2lzb24gY2FsbG9jIHN0cmR1cAorCisjaWYgIWRlZmluZWQoRkxFWF9TQ0FOTkVSKSAmJiAhZGVmaW5lZChZWUJJU09OKQorI3VuZGVmIG1hbGxvYworI3VuZGVmIHJlYWxsb2MKKyAjcHJhZ21hIEdDQyBwb2lzb24gbWFsbG9jIHJlYWxsb2MKKyNlbmRpZgorCisvKiBUaGUgJW0gZm9ybWF0IHNob3VsZCBiZSB1c2VkIHdoZW4gR0NDJ3MgbWFpbiBkaWFnbm9zdGljIGZ1bmN0aW9ucworICAgc3VwcG9ydGluZyAlbSBhcmUgYXZhaWxhYmxlLCBhbmQgeHN0cmVycm9yIGZyb20gbGliaWJlcnR5CisgICBvdGhlcndpc2UuICAqLworI3VuZGVmIHN0cmVycm9yCisgI3ByYWdtYSBHQ0MgcG9pc29uIHN0cmVycm9yCisKKy8qIGxvY190IGlzIGRlZmluZWQgb24gc29tZSBzeXN0ZW1zIGFuZCB0b28gaW52aXRpbmcgZm9yIHNvbWUKKyAgIHByb2dyYW1tZXJzIHRvIGF2b2lkLiAgKi8KKyN1bmRlZiBsb2NfdAorICNwcmFnbWEgR0NDIHBvaXNvbiBsb2NfdAorCisvKiBPbGQgdGFyZ2V0IG1hY3JvcyB0aGF0IGhhdmUgbW92ZWQgdG8gdGhlIHRhcmdldCBob29rcyBzdHJ1Y3R1cmUuICAqLworICNwcmFnbWEgR0NDIHBvaXNvbiBBU01fT1BFTl9QQVJFTiBBU01fQ0xPU0VfUEFSRU4JCQlcCisJRlVOQ1RJT05fUFJPTE9HVUUgRlVOQ1RJT05fRVBJTE9HVUUJCQkJXAorCUZVTkNUSU9OX0VORF9QUk9MT0dVRSBGVU5DVElPTl9CRUdJTl9FUElMT0dVRQkJCVwKKwlERUNMX01BQ0hJTkVfQVRUUklCVVRFUyBDT01QX1RZUEVfQVRUUklCVVRFUyBJTlNFUlRfQVRUUklCVVRFUwlcCisJVkFMSURfTUFDSElORV9ERUNMX0FUVFJJQlVURSBWQUxJRF9NQUNISU5FX1RZUEVfQVRUUklCVVRFCVwKKwlTRVRfREVGQVVMVF9UWVBFX0FUVFJJQlVURVMgU0VUX0RFRkFVTFRfREVDTF9BVFRSSUJVVEVTCQlcCisJTUVSR0VfTUFDSElORV9UWVBFX0FUVFJJQlVURVMgTUVSR0VfTUFDSElORV9ERUNMX0FUVFJJQlVURVMJXAorCU1EX0lOSVRfQlVJTFRJTlMgTURfRVhQQU5EX0JVSUxUSU4gQVNNX09VVFBVVF9DT05TVFJVQ1RPUglcCisJQVNNX09VVFBVVF9ERVNUUlVDVE9SIFNJR05FRF9DSEFSX1NQRUMgTUFYX0NIQVJfVFlQRV9TSVpFCVwKKwlXQ0hBUl9VTlNJR05FRCBVTklRVUVfU0VDVElPTiBTRUxFQ1RfU0VDVElPTiBTRUxFQ1RfUlRYX1NFQ1RJT04JXAorCUVOQ09ERV9TRUNUSU9OX0lORk8gU1RSSVBfTkFNRV9FTkNPRElORyBBU01fR0xPQkFMSVpFX0xBQkVMCVwKKwlBU01fT1VUUFVUX01JX1RIVU5LIENPTlNUX0NPU1RTIFJUWF9DT1NUUyBERUZBVUxUX1JUWF9DT1NUUwlcCisJQUREUkVTU19DT1NUIE1BQ0hJTkVfREVQRU5ERU5UX1JFT1JHIEFTTV9GSUxFX1NUQVJUIEFTTV9GSUxFX0VORCBcCisJQVNNX1NJTVBMSUZZX0RXQVJGX0FERFIgSU5JVF9UQVJHRVRfT1BUQUJTIElOSVRfU1VCVEFSR0VUX09QVEFCUyBcCisJSU5JVF9HT0ZBU1RfT1BUQUJTIE1VTFNJM19MSUJDQUxMIE1VTERJM19MSUJDQUxMIERJVlNJM19MSUJDQUxMIFwKKwlESVZESTNfTElCQ0FMTCBVRElWU0kzX0xJQkNBTEwgVURJVkRJM19MSUJDQUxMIE1PRFNJM19MSUJDQUxMCVwKKwlNT0RESTNfTElCQ0FMTCBVTU9EU0kzX0xJQkNBTEwgVU1PRERJM19MSUJDQUxMIEJVSUxEX1ZBX0xJU1RfVFlQRSBcCisJUFJFVEVORF9PVVRHT0lOR19WQVJBUkdTX05BTUVEIFNUUlVDVF9WQUxVRV9JTkNPTUlOR19SRUdOVU0JXAorCUFTTV9PVVRQVVRfU0VDVElPTl9OQU1FIFBST01PVEVfRlVOQ1RJT05fQVJHUyBQUk9NT1RFX0ZVTkNUSU9OX01PREUgXAorCVNUUlVDVF9WQUxVRV9JTkNPTUlORyBTVFJJQ1RfQVJHVU1FTlRfTkFNSU5HCQkJXAorCVBST01PVEVfRlVOQ1RJT05fUkVUVVJOIFBST01PVEVfUFJPVE9UWVBFUyBTVFJVQ1RfVkFMVUVfUkVHTlVNCVwKKwlTRVRVUF9JTkNPTUlOR19WQVJBUkdTIEVYUEFORF9CVUlMVElOX1NBVkVSRUdTCQkJXAorCURFRkFVTFRfU0hPUlRfRU5VTVMgU1BMSVRfQ09NUExFWF9BUkdTIE1EX0FTTV9DTE9CQkVSUwkJXAorCUhBTkRMRV9QUkFHTUFfUkVERUZJTkVfRVhUTkFNRSBIQU5ETEVfUFJBR01BX0VYVEVSTl9QUkVGSVgJXAorCU1VU1RfUEFTU19JTl9TVEFDSyBGVU5DVElPTl9BUkdfUEFTU19CWV9SRUZFUkVOQ0UgICAgICAgICAgICAgICBcCisgICAgICAgIFZFQ1RPUl9NT0RFX1NVUFBPUlRFRF9QIFRBUkdFVF9TVVBQT1JUU19ISURERU4gCQkJXAorCUZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTIEFTTV9PVVRQVVRfRFdBUkZfRFRQUkVMCQlcCisJQUxMT0NBVEVfSU5JVElBTF9WQUxVRSBMRUdJVElNSVpFX0FERFJFU1MgRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCBcCisJQ0FOX0VMSU1JTkFURSBUUkFNUE9MSU5FX1RFTVBMQVRFIElOSVRJQUxJWkVfVFJBTVBPTElORQkJXAorCVRSQU1QT0xJTkVfQURKVVNUX0FERFJFU1MgU1RBVElDX0NIQUlOIFNUQVRJQ19DSEFJTl9JTkNPTUlORwlcCisJUkVUVVJOX1BPUFNfQVJHUyBVTklUU19QRVJfU0lNRF9XT1JEIE9WRVJSSURFX09QVElPTlMJCVwKKwlPUFRJTUlaQVRJT05fT1BUSU9OUyBDTEFTU19MSUtFTFlfU1BJTExFRF9QCQkJXAorCVVTSU5HX1NKTEpfRVhDRVBUSU9OUyBUQVJHRVRfVU5XSU5EX0lORk8JCQlcCisJTEFCRUxfQUxJR05fTUFYX1NLSVAgTE9PUF9BTElHTl9NQVhfU0tJUAkJCVwKKwlMQUJFTF9BTElHTl9BRlRFUl9CQVJSSUVSX01BWF9TS0lQIEpVTVBfQUxJR05fTUFYX1NLSVAgCQlcCisJQ0FOX0RFQlVHX1dJVEhPVVRfRlAgVU5MSUtFTFlfRVhFQ1VURURfVEVYVF9TRUNUSU9OX05BTUUJXAorCUhPVF9URVhUX1NFQ1RJT05fTkFNRSBMRUdJVElNQVRFX0NPTlNUQU5UX1AgQUxXQVlTX1NUUklQX0RPVERPVAlcCisJT1VUUFVUX0FERFJfQ09OU1RfRVhUUkEgU01BTExfUkVHSVNURVJfQ0xBU1NFUyBBU01fT1VUUFVUX0lERU5UCVwKKwlBU01fQllURV9PUCBNRU1CRVJfVFlQRV9GT1JDRVNfQkxLCisKKy8qIFRhcmdldCBtYWNyb3Mgb25seSB1c2VkIGZvciBjb2RlIGJ1aWx0IGZvciB0aGUgdGFyZ2V0LCB0aGF0IGhhdmUKKyAgIG1vdmVkIHRvIGxpYmdjYy10bS5oIG9yIGhhdmUgbmV2ZXIgYmVlbiBwcmVzZW50IGVsc2V3aGVyZS4gICovCisgI3ByYWdtYSBHQ0MgcG9pc29uIERFQ0xBUkVfTElCUkFSWV9SRU5BTUVTIExJQkdDQzJfR05VX1BSRUZJWAkJXAorCU1EX1VOV0lORF9TVVBQT1JUIE1EX0ZST0JfVVBEQVRFX0NPTlRFWFQgRU5BQkxFX0VYRUNVVEVfU1RBQ0sJXAorCVJFR19WQUxVRV9JTl9VTldJTkRfQ09OVEVYVCBBU1NVTUVfRVhURU5ERURfVU5XSU5EX0NPTlRFWFQKKworLyogT3RoZXIgb2Jzb2xldGUgdGFyZ2V0IG1hY3Jvcywgb3IgbWFjcm9zIHRoYXQgdXNlZCB0byBiZSBpbiB0YXJnZXQKKyAgIGhlYWRlcnMgYW5kIHdlcmUgbm90IHVzZWQsIGFuZCBtYXkgYmUgb2Jzb2xldGUgb3IgbWF5IG5ldmVyIGhhdmUKKyAgIGJlZW4gdXNlZC4gICovCisgI3ByYWdtYSBHQ0MgcG9pc29uIElOVF9BU01fT1AgQVNNX09VVFBVVF9FSF9SRUdJT05fQkVHIENQUF9QUkVERUZJTkVTCSAgIFwKKwlBU01fT1VUUFVUX0VIX1JFR0lPTl9FTkQgQVNNX09VVFBVVF9MQUJFTFJFRl9BU19JTlQgU01BTExfU1RBQ0sgICAgXAorCURPRVNOVF9ORUVEX1VOV0lOREVSIEVIX1RBQkxFX0xPT0tVUCBPQkpDX1NFTEVDVE9SU19XSVRIT1VUX0xBQkVMUyBcCisJT01JVF9FSF9UQUJMRSBFQVNZX0RJVl9FWFBSIElNUExJQ0lUX0ZJWF9FWFBSCQkJICAgXAorCUxPTkdKTVBfUkVTVE9SRV9GUk9NX1NUQUNLIE1BWF9JTlRfVFlQRV9TSVpFIEFTTV9JREVOVElGWV9HQ0MJICAgXAorCVNURENfVkFMVUUgVFJBTVBPTElORV9BTElHTiBBU01fSURFTlRJRllfR0NDX0FGVEVSX1NPVVJDRQkgICBcCisJU0xPV19aRVJPX0VYVEVORCBTVUJSRUdfUkVHTk9fT0ZGU0VUIERXQVJGX0xJTkVfTUlOX0lOU1RSX0xFTkdUSCAgIFwKKwlUUkFESVRJT05BTF9SRVRVUk5fRkxPQVQgTk9fQlVJTFRJTl9TSVpFX1RZUEUJCQkgICBcCisJTk9fQlVJTFRJTl9QVFJESUZGX1RZUEUgTk9fQlVJTFRJTl9XQ0hBUl9UWVBFIE5PX0JVSUxUSU5fV0lOVF9UWVBFIFwKKwlCTE9DS19QUk9GSUxFUiBCTE9DS19QUk9GSUxFUl9DT0RFIEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSCSAgIFwKKwlGVU5DVElPTl9CTE9DS19QUk9GSUxFUl9FWElUIE1BQ0hJTkVfU1RBVEVfU0FWRQkJCSAgIFwKKwlNQUNISU5FX1NUQVRFX1JFU1RPUkUgU0NDU19ESVJFQ1RJVkUgU0VDVElPTl9BU01fT1AgQllURU9SREVSCSAgIFwKKwlBU01fT1VUUFVUX0RFRklORV9MQUJFTF9ESUZGRVJFTkNFX1NZTUJPTCBIT1NUX1dPUkRTX0JJR19FTkRJQU4JICAgXAorCU9CSkNfUFJPTE9HVUUgQUxMT0NBVEVfVFJBTVBPTElORSBIQU5ETEVfUFJBR01BIFJPVU5EX1RZUEVfU0laRQkgICBcCisJUk9VTkRfVFlQRV9TSVpFX1VOSVQgQ09OU1RfU0VDVElPTl9BU01fT1AgQ1JUX0dFVF9SRklCX1RFWFQJICAgXAorCURCWF9MQlJBQ19GSVJTVCBEQlhfT1VUUFVUX0VOVU0gREJYX09VVFBVVF9TT1VSQ0VfRklMRU5BTUUJICAgXAorCURCWF9XT1JLSU5HX0RJUkVDVE9SWSBJTlNOX0NBQ0hFX0RFUFRIIElOU05fQ0FDSEVfU0laRQkJICAgXAorCUlOU05fQ0FDSEVfTElORV9XSURUSCBJTklUX1NFQ1RJT05fUFJFQU1CTEUgTkVFRF9BVEVYSVQgT05fRVhJVAkgICBcCisJRVhJVF9CT0RZIE9CSkVDVF9GT1JNQVRfUk9TRSBNVUxUSUJZVEVfQ0hBUlMgTUFQX0NIQVJBQ1RFUgkgICBcCisJTElCR0NDX05FRURTX0RPVUJMRSBGSU5BTF9QUkVTQ0FOX0xBQkVMIERFRkFVTFRfQ0FMTEVSX1NBVkVTCSAgIFwKKwlMT0FEX0FSR1NfUkVWRVJTRUQgTUFYX0lOVEVHRVJfQ09NUFVUQVRJT05fTU9ERQkJCSAgIFwKKwlDT05WRVJUX0hBUkRfUkVHSVNURVJfVE9fU1NBX1AgQVNNX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFTkFNRQkgICBcCisJRklSU1RfSU5TTl9BRERSRVNTIFRFWFRfU0VDVElPTiBTSEFSRURfQlNTX1NFQ1RJT05fQVNNX09QCSAgIFwKKwlQUk9NT1RFRF9NT0RFIEVYUEFORF9CVUlMVElOX1ZBX0VORAkJCQkgICBcCisJTElOS0VSX0RPRVNfTk9UX1dPUktfV0lUSF9EV0FSRjIgRlVOQ1RJT05fQVJHX0tFRVBfQVNfUkVGRVJFTkNFCSAgIFwKKwlHSVZfU09SVF9DUklURVJJT04gTUFYX0xPTkdfVFlQRV9TSVpFIE1BWF9MT05HX0RPVUJMRV9UWVBFX1NJWkUJICAgXAorCU1BWF9XQ0hBUl9UWVBFX1NJWkUgU0hBUkVEX1NFQ1RJT05fQVNNX09QIElOVEVHUkFURV9USFJFU0hPTEQgICAgICBcCisJRklOQUxfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UgTUFZQkVfUkVHX1BBUk1fU1RBQ0tfU1BBQ0UJCSAgIFwKKwlUUkFESVRJT05BTF9QSVBFTElORV9JTlRFUkZBQ0UgREZBX1BJUEVMSU5FX0lOVEVSRkFDRQkJICAgXAorCURCWF9PVVRQVVRfU1RBTkRBUkRfVFlQRVMgQlVJTFRJTl9TRVRKTVBfRlJBTUVfVkFMVUUJCSAgIFwKKwlTVU5PUzRfU0hBUkVEX0xJQlJBUklFUyBQUk9NT1RFX0ZPUl9DQUxMX09OTFkJCQkgICBcCisJU1BBQ0VfQUZURVJfTF9PUFRJT04gTk9fUkVDVVJTSVZFX0ZVTkNUSU9OX0NTRQkJCSAgIFwKKwlERUZBVUxUX01BSU5fUkVUVVJOIFRBUkdFVF9NRU1fRlVOQ1RJT05TIEVYUEFORF9CVUlMVElOX1ZBX0FSRwkgICBcCisJQ09MTEVDVF9QQVJTRV9GTEFHIERXQVJGMl9HRU5FUkFURV9URVhUX1NFQ1RJT05fTEFCRUwgV0lOTklOR19HREIgIFwKKwlBU01fT1VUUFVUX0ZJTEVOQU1FIEFTTV9PVVRQVVRfU09VUkNFX0xJTkUgRklMRV9OQU1FX0pPSU5FUgkgICBcCisJR0RCX0lOVl9SRUZfUkVHUEFSTV9TVEFCU19MRVRURVIgREJYX01FTVBBUk1fU1RBQlNfTEVUVEVSCSAgIFwKKwlQVVRfU0RCX1NSQ19GSUxFIFNUQUJTX0dDQ19NQVJLRVIgREJYX09VVFBVVF9GVU5DVElPTl9FTkQJICAgXAorCURCWF9PVVRQVVRfR0NDX01BUktFUiBEQlhfRklOSVNIX1NZTUJPTCBTREJfR0VORVJBVEVfRkFLRQkgICBcCisJTk9OX1NBVklOR19TRVRKTVAgVEFSR0VUX0xBVEVfUlRMX1BST0xPR1VFX0VQSUxPR1VFCQkgICBcCisJQ0FTRV9EUk9QU19USFJPVUdIIFRBUkdFVF9CRUxMIFRBUkdFVF9CUyBUQVJHRVRfQ1IgVEFSR0VUX0RJR0lUMCAgIFwKKyAgICAgICAgVEFSR0VUX0VTQyBUQVJHRVRfRkYgVEFSR0VUX05FV0xJTkUgVEFSR0VUX1RBQiBUQVJHRVRfVlQJICAgXAorICAgICAgICBMSU5LX0xJQkdDQ19TUEVDSUFMIERPTlRfQUNDRVNTX0dCTFNfQUZURVJfRVBJTE9HVUUJCSAgIFwKKwlUQVJHRVRfT1BUSU9OUyBUQVJHRVRfU1dJVENIRVMgRVhUUkFfQ0NfTU9ERVMgRklOQUxJWkVfUElDCSAgIFwKKwlQUkVESUNBVEVfQ09ERVMgU1BFQ0lBTF9NT0RFX1BSRURJQ0FURVMJVU5BTElHTkVEX1dPUkRfQVNNX09QCSAgIFwKKwlFWFRSQV9TRUNUSU9OUyBFWFRSQV9TRUNUSU9OX0ZVTkNUSU9OUyBSRUFET05MWV9EQVRBX1NFQ1RJT04JICAgXAorCVRBUkdFVF9BU01fRVhDRVBUSU9OX1NFQ1RJT04gVEFSR0VUX0FTTV9FSF9GUkFNRV9TRUNUSU9OCSAgIFwKKwlTTUFMTF9BUkdfTUFYIEFTTV9PVVRQVVRfU0hBUkVEX0JTUyBBU01fT1VUUFVUX1NIQVJFRF9DT01NT04JICAgXAorCUFTTV9PVVRQVVRfU0hBUkVEX0xPQ0FMIEFTTV9NQUtFX0xBQkVMX0xJTktPTkNFCQkJICAgXAorCVNUQUNLX0NIRUNLX1BST0JFX0lOVEVSVkFMIFNUQUNLX0NIRUNLX1BST0JFX0xPQUQJCSAgIFwKKwlPUkRFUl9SRUdTX0ZPUl9MT0NBTF9BTExPQyBGVU5DVElPTl9PVVRHT0lOR19WQUxVRQkJICAgXAorCUFTTV9ERUNMQVJFX0NPTlNUQU5UX05BTUUgTU9ESUZZX1RBUkdFVF9OQU1FIFNXSVRDSEVTX05FRURfU1BBQ0VTICBcCisJU1dJVENIX0NVUlRBSUxTX0NPTVBJTEFUSU9OIFNXSVRDSF9UQUtFU19BUkcgV09SRF9TV0lUQ0hfVEFLRVNfQVJHIFwKKwlUQVJHRVRfT1BUSU9OX1RSQU5TTEFURV9UQUJMRSBIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AJICAgXAorCUhBTkRMRV9TWVNWX1BSQUdNQSBIQU5ETEVfUFJBR01BX1dFQUsgQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UgICBcCisJRlVOQ1RJT05fQVJHX0JPVU5EQVJZIE1VU1RfVVNFX1NKTEpfRVhDRVBUSU9OUyBVU19TT0ZUV0FSRV9HT0ZBU1QgIFwKKwlVU0lOR19TVlI0X0ggU1ZSNF9BU01fU1BFQyBGVU5DVElPTl9BUkcgRlVOQ1RJT05fQVJHX0FEVkFOQ0UJICAgXAorCUZVTkNUSU9OX0lOQ09NSU5HX0FSRyBJUkFfQ09WRVJfQ0xBU1NFUyBUQVJHRVRfVkVSU0lPTgkJICAgXAorCU1BQ0hJTkVfVFlQRSBUQVJHRVRfSEFTX1RBUkdFVENNIEFTTV9PVVRQVVRfQlNTCQkJICAgXAorCVNFVEpNUF9WSUFfU0FWRV9BUkVBIEZPUkJJRERFTl9JTkNfREVDX0NMQVNTRVMJCQkgICBcCisJUFJFRkVSUkVEX09VVFBVVF9SRUxPQURfQ0xBU1MgU1lTVEVNX0lOQ0xVREVfRElSCQkgICBcCisJU1RBTkRBUkRfSU5DTFVERV9ESVIgU1RBTkRBUkRfSU5DTFVERV9DT01QT05FTlQJCQkgICBcCisJTElOS19FTElNSU5BVEVfRFVQTElDQVRFX0xESVJFQ1RPUklFUyBNSVBTX0RFQlVHR0lOR19JTkZPCSAgIFwKKwlJREVOVF9BU01fT1AgQUxMX0NPUF9BRERJVElPTkFMX1JFR0lTVEVSX05BTUVTIERCWF9PVVRQVVRfTEJSQUMJICAgXAorCURCWF9PVVRQVVRfTkZVTiBEQlhfT1VUUFVUX1JCUkFDIFJBTkdFX1RFU1RfTk9OX1NIT1JUX0NJUkNVSVQJICAgXAorCVJFQUxfVkFMVUVfVFJVTkNBVEUgUkVWRVJTRV9DT05ERVhFQ19QUkVESUNBVEVTX1AJCSAgIFwKKwlUQVJHRVRfQUxJR05fQU5PTl9CSVRGSUVMRFMgVEFSR0VUX05BUlJPV19WT0xBVElMRV9CSVRGSUVMRFMJICAgXAorCUlERU5UX0FTTV9PUCBVTkFMSUdORURfU0hPUlRfQVNNX09QIFVOQUxJR05FRF9JTlRfQVNNX09QCSAgIFwKKwlVTkFMSUdORURfTE9OR19BU01fT1AgVU5BTElHTkVEX0RPVUJMRV9JTlRfQVNNX09QCQkgICBcCisJVVNFX0NPTU1PTl9GT1JfT05FX09OTFkgSUZDVlRfRVhUUkFfRklFTERTIElGQ1ZUX0lOSVRfRVhUUkFfRklFTERTIFwKKwlDQVNFX1VTRV9CSVRfVEVTVFMgRklYVU5TX1RSVU5DX0xJS0VfRklYX1RSVU5DICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBHT19JRl9NT0RFX0RFUEVOREVOVF9BRERSRVNTIERFTEFZX1NMT1RTX0ZPUl9FUElMT0dVRSAgICAgICAgICAgICAgXAorICAgICAgICBFTElHSUJMRV9GT1JfRVBJTE9HVUVfREVMQVkKKworLyogSG9va3MgdGhhdCBhcmUgbm8gbG9uZ2VyIHVzZWQuICAqLworICNwcmFnbWEgR0NDIHBvaXNvbiBMQU5HX0hPT0tTX0ZVTkNUSU9OX01BUksgTEFOR19IT09LU19GVU5DVElPTl9GUkVFCVwKKwlMQU5HX0hPT0tTX01BUktfVFJFRSBMQU5HX0hPT0tTX0lOU0VSVF9ERUZBVUxUX0FUVFJJQlVURVMgXAorCUxBTkdfSE9PS1NfVFJFRV9JTkxJTklOR19FU1RJTUFURV9OVU1fSU5TTlMgXAorCUxBTkdfSE9PS1NfUFVTSExFVkVMIExBTkdfSE9PS1NfU0VUX0JMT0NLIFwKKwlMQU5HX0hPT0tTX01BWUJFX0JVSUxEX0NMRUFOVVAgTEFOR19IT09LU19VUERBVEVfREVDTF9BRlRFUl9TQVZJTkcgXAorCUxBTkdfSE9PS1NfUE9QTEVWRUwgTEFOR19IT09LU19UUlVUSFZBTFVFX0NPTlZFUlNJT04gXAorCVRBUkdFVF9QUk9NT1RFX0ZVTkNUSU9OX0FSR1MgVEFSR0VUX1BST01PVEVfRlVOQ1RJT05fUkVUVVJOIFwKKwlMQU5HX0hPT0tTX01JU1NJTkdfQVJHVU1FTlQgTEFOR19IT09LU19IQVNIX1RZUEVTIFwKKwlUQVJHRVRfSEFORExFX09GQVNUIFRBUkdFVF9PUFRJT05fT1BUSU1JWkFUSU9OIFwKKwlUQVJHRVRfSVJBX0NPVkVSX0NMQVNTRVMgVEFSR0VUX0hFTFAgXAorCVRBUkdFVF9IQU5ETEVfUFJBR01BX0VYVEVSTl9QUkVGSVggXAorCVRBUkdFVF9WRUNUT1JJWkVfQlVJTFRJTl9NVUxfV0lERU5fRVZFTiBcCisJVEFSR0VUX1ZFQ1RPUklaRV9CVUlMVElOX01VTF9XSURFTl9PREQgXAorCisvKiBBcnJheXMgdGhhdCB3ZXJlIGRlbGV0ZWQgaW4gZmF2b3Igb2YgYSBmdW5jdGlvbmFsIGludGVyZmFjZS4gICovCisgI3ByYWdtYSBHQ0MgcG9pc29uIGJ1aWx0X2luX2RlY2xzIGltcGxpY2l0X2J1aWx0X2luX2RlY2xzCisKKy8qIEhvb2tzIGludG8gbGliZ2NjMi4gICovCisgI3ByYWdtYSBHQ0MgcG9pc29uIExJQkdDQzJfRE9VQkxFX1RZUEVfU0laRSBMSUJHQ0MyX1dPUkRTX0JJR19FTkRJQU4gXAorICAgTElCR0NDMl9GTE9BVF9XT1JEU19CSUdfRU5ESUFOCisKKy8qIE1pc2NlbGxhbmVvdXMgbWFjcm9zIHRoYXQgYXJlIG5vIGxvbmdlciB1c2VkLiAgKi8KKyAjcHJhZ21hIEdDQyBwb2lzb24gVVNFX01BUFBFRF9MT0NBVElPTiBHRVRfRU5WSVJPTk1FTlQKKworLyogTGliaWJlcnR5IG1hY3JvcyB0aGF0IGFyZSBubyBsb25nZXIgdXNlZCBpbiBHQ0MuICAqLworI3VuZGVmIEFOU0lfUFJPVE9UWVBFUworI3VuZGVmIFBUUl9DT05TVAorI3VuZGVmIExPTkdfRE9VQkxFCisjdW5kZWYgVlBBUkFNUworI3VuZGVmIFZBX09QRU4KKyN1bmRlZiBWQV9GSVhFREFSRworI3VuZGVmIFZBX0NMT1NFCisjdW5kZWYgVkFfU1RBUlQKKyAjcHJhZ21hIEdDQyBwb2lzb24gQU5TSV9QUk9UT1RZUEVTIFBUUl9DT05TVCBMT05HX0RPVUJMRSBWUEFSQU1TIFZBX09QRU4gXAorICBWQV9GSVhFREFSRyBWQV9DTE9TRSBWQV9TVEFSVAorI2VuZGlmIC8qIElOX0dDQyAqLworCisvKiBGcm9udCBlbmRzIHNob3VsZCBuZXZlciBoYXZlIHRvIGluY2x1ZGUgbWlkZGxlLWVuZCBoZWFkZXJzLiAgRW5mb3JjZQorICAgdGhpcyBieSBwb2lzb25pbmcgdGhlIGhlYWRlciBkb3VibGUtaW5jbHVkZSBwcm90ZWN0aW9uIGRlZmluZXMuICAqLworI2lmZGVmIElOX0dDQ19GUk9OVEVORAorI3ByYWdtYSBHQ0MgcG9pc29uIEdDQ19SVExfSCBHQ0NfRVhDRVBUX0ggR0NDX0VYUFJfSAorI2VuZGlmCisKKy8qIE5vdGU6IG5vdCBhbGwgdXNlcyBvZiB0aGUgYGluZGV4JyB0b2tlbiAoZS5nLiB2YXJpYWJsZSBuYW1lcyBhbmQKKyAgIHN0cnVjdHVyZSBtZW1iZXJzKSBoYXZlIGJlZW4gZWxpbWluYXRlZC4gICovCisjdW5kZWYgYmNvcHkKKyN1bmRlZiBiemVybworI3VuZGVmIGJjbXAKKyN1bmRlZiByaW5kZXgKKyAjcHJhZ21hIEdDQyBwb2lzb24gYmNvcHkgYnplcm8gYmNtcCByaW5kZXgKKworI2VuZGlmIC8qIEdDQyA+PSAzLjAgKi8KKworLyogVGhpcyBtYWNybyBhbGxvd3MgY2FzdGluZyBhd2F5IGNvbnN0LW5lc3MgdG8gcGFzcyAtV2Nhc3QtcXVhbAorICAgd2FybmluZ3MuICBETyBOT1QgVVNFIFRISVMgVU5MRVNTIFlPVSBSRUFMTFkgSEFWRSBUTyEgIEl0IHNob3VsZAorICAgb25seSBiZSB1c2VkIGluIGNlcnRhaW4gc3BlY2lmaWMgY2FzZXMuICBPbmUgdmFsaWQgY2FzZSBpcyB3aGVyZQorICAgdGhlIEMgc3RhbmRhcmQgZGVmaW5pdGlvbnMgb3IgcHJvdG90eXBlcyBmb3JjZSB5b3UgdG8uICBFLmcuIGlmIHlvdQorICAgbmVlZCB0byBmcmVlIGEgY29uc3Qgb2JqZWN0LCBvciBpZiB5b3UgcGFzcyBhIGNvbnN0IHN0cmluZyB0bworICAgZXhlY3YsIGV0IGFsLiAgQW5vdGhlciB2YWxpZCB1c2Ugd291bGQgYmUgaW4gYW4gYWxsb2NhdGlvbiBmdW5jdGlvbgorICAgdGhhdCBjcmVhdGVzIGNvbnN0IG9iamVjdHMgdGhhdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkLiAgSW4gc29tZQorICAgY2FzZXMgd2UgaGF2ZSBub24tY29uc3QgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRoZSBhcmd1bWVudAorICAgKGUuZy4gbmV4dF9ub25ub3RlX2luc24pLiAgUmF0aGVyIHRoYW4gY3JlYXRlIGNvbnN0IHNoYWRvdworICAgZnVuY3Rpb25zLCB3ZSBjYW4gY2FzdCBhd2F5IGNvbnN0LW5lc3MgaW4gY2FsbGluZyB0aGVzZSBpbnRlcmZhY2VzCisgICBpZiB3ZSdyZSBjYXJlZnVsIHRvIHZlcmlmeSB0aGF0IHRoZSBjYWxsZWQgZnVuY3Rpb24gZG9lcyBpbmRlZWQgbm90CisgICBtb2RpZnkgaXRzIGFyZ3VtZW50IGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9ubHkgdXNlZCBpbiBhIGNvbnN0CisgICBjb250ZXh0LiAgKFRoaXMgY2FuIGJlIHNvbWV3aGF0IGRhbmdlcm91cyBhcyB0aGVzZSBhc3N1bXB0aW9ucyBjYW4KKyAgIGNoYW5nZSBhZnRlciB0aGUgZmFjdCkuICBCZXlvbmQgdGhlc2UgdXNlcywgbW9zdCBvdGhlciBjYXNlcyBvZgorICAgdXNpbmcgdGhpcyBtYWNybyBzaG91bGQgYmUgdmlld2VkIHdpdGggZXh0cmVtZSBjYXV0aW9uLiAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIENPTlNUX0NBU1QyKFRPVFlQRSxGUk9NVFlQRSxYKSAoY29uc3RfY2FzdDxUT1RZUEU+IChYKSkKKyNlbHNlCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgR0NDX1ZFUlNJT04gPiA0MDAwCisvKiBHQ0MgNC4wLnggaGFzIGEgYnVnIHdoZXJlIGl0IG1heSBJQ0Ugb24gdGhpcyBleHByZXNzaW9uLAorICAgc28gZG9lcyBHQ0MgMy40LnggKFBSMTc0MzYpLiAgKi8KKyNkZWZpbmUgQ09OU1RfQ0FTVDIoVE9UWVBFLEZST01UWVBFLFgpICgoX19leHRlbnNpb25fXyh1bmlvbiB7RlJPTVRZUEUgX3E7IFRPVFlQRSBfbnE7fSkoWCkpLl9ucSkKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCitzdGF0aWMgaW5saW5lIGNoYXIgKgoraGVscGVyX2NvbnN0X25vbl9jb25zdF9jYXN0IChjb25zdCBjaGFyICpwKQoreworICB1bmlvbiB7CisgICAgY29uc3QgY2hhciAqY29uc3RfYzsKKyAgICBjaGFyICpjOworICB9IHZhbDsKKyAgdmFsLmNvbnN0X2MgPSBwOworICByZXR1cm4gdmFsLmM7Cit9CisKKyNkZWZpbmUgQ09OU1RfQ0FTVDIoVE9UWVBFLEZST01UWVBFLFgpIFwKKwkoKFRPVFlQRSkgaGVscGVyX2NvbnN0X25vbl9jb25zdF9jYXN0ICgoY29uc3QgY2hhciAqKSAoRlJPTVRZUEUpIChYKSkpCisjZWxzZQorI2RlZmluZSBDT05TVF9DQVNUMihUT1RZUEUsRlJPTVRZUEUsWCkgKChUT1RZUEUpKEZST01UWVBFKShYKSkKKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIENPTlNUX0NBU1QoVFlQRSxYKSBDT05TVF9DQVNUMihUWVBFLCBjb25zdCBUWVBFLCAoWCkpCisjZGVmaW5lIENPTlNUX0NBU1RfVFJFRShYKSBDT05TVF9DQVNUKHVuaW9uIHRyZWVfbm9kZSAqLCAoWCkpCisjZGVmaW5lIENPTlNUX0NBU1RfUlRYKFgpIENPTlNUX0NBU1Qoc3RydWN0IHJ0eF9kZWYgKiwgKFgpKQorI2RlZmluZSBDT05TVF9DQVNUX0JCKFgpIENPTlNUX0NBU1Qoc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqLCAoWCkpCisjZGVmaW5lIENPTlNUX0NBU1RfR0lNUExFKFgpIENPTlNUX0NBU1QodW5pb24gZ2ltcGxlX3N0YXRlbWVudF9kICosIChYKSkKKworLyogQWN0aXZhdGUgY2VydGFpbiBkaWFnbm9zdGljcyBhcyB3YXJuaW5ncyAobm90IGVycm9ycyB2aWEgdGhlCisgICAtV2Vycm9yIGZsYWcpLiAgKi8KKyNpZiBHQ0NfVkVSU0lPTiA+PSA0MDAzCisvKiBJZiBhc3NlcnRzIGFyZSBkaXNhYmxlZCwgYWN0aXZhdGUgLVd1bmluaXRpYWxpemVkIGFzIGEgd2FybmluZyAobm90CisgICBhbiBlcnJvci8tV2Vycm9yKS4gICovCisjaWZuZGVmIEVOQUJMRV9BU1NFUlRfQ0hFQ0tJTkcKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgd2FybmluZyAiLVd1bmluaXRpYWxpemVkIgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9WQUxHUklORF9DSEVDS0lORworIyBpZmRlZiBIQVZFX1ZBTEdSSU5EX01FTUNIRUNLX0gKKyMgIGluY2x1ZGUgPHZhbGdyaW5kL21lbWNoZWNrLmg+CisjIGVsaWYgZGVmaW5lZCBIQVZFX01FTUNIRUNLX0gKKyMgIGluY2x1ZGUgPG1lbWNoZWNrLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHZhbGdyaW5kLmg+CisjIGVuZGlmCisvKiBDb21wYXRpYmlsaXR5IG1hY3JvcyB0byBsZXQgdmFsZ3JpbmQgMy4xIHdvcmsuICAqLworIyBpZm5kZWYgVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MKKyMgIGRlZmluZSBWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyBWQUxHUklORF9NQUtFX05PQUNDRVNTCisjIGVuZGlmCisjIGlmbmRlZiBWQUxHUklORF9NQUtFX01FTV9ERUZJTkVECisjICBkZWZpbmUgVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRCBWQUxHUklORF9NQUtFX1JFQURBQkxFCisjIGVuZGlmCisjIGlmbmRlZiBWQUxHUklORF9NQUtFX01FTV9VTkRFRklORUQKKyMgIGRlZmluZSBWQUxHUklORF9NQUtFX01FTV9VTkRFRklORUQgVkFMR1JJTkRfTUFLRV9XUklUQUJMRQorIyBlbmRpZgorI2Vsc2UKKy8qIEF2b2lkICNpZmRlZjpzIHdoZW4gd2UgY2FuIGhlbHAgaXQuICAqLworI2RlZmluZSBWQUxHUklORF9ESVNDQVJEKHgpCisjZGVmaW5lIFZBTEdSSU5EX01BTExPQ0xJS0VfQkxPQ0sodyx4LHkseikKKyNkZWZpbmUgVkFMR1JJTkRfRlJFRUxJS0VfQkxPQ0soeCx5KQorI2VuZGlmCisKKy8qIEluIExUTyAtZndob2xlLXByb2dyYW0gYnVpbGQgd2Ugc3RpbGwgd2FudCB0byBrZWVwIHRoZSBkZWJ1ZyBmdW5jdGlvbnMgYXZhaWxhYmxlCisgICBmb3IgZGVidWdnZXIuICBNYXJrIHRoZW0gYXMgdXNlZCB0byBwcmV2ZW50IHJlbW92YWwuICAqLworI2lmIChHQ0NfVkVSU0lPTiA+IDQwMDApCisjZGVmaW5lIERFQlVHX0ZVTkNUSU9OIF9fYXR0cmlidXRlX18gKChfX3VzZWRfXykpCisjZGVmaW5lIERFQlVHX1ZBUklBQkxFIF9fYXR0cmlidXRlX18gKChfX3VzZWRfXykpCisjZWxzZQorI2RlZmluZSBERUJVR19GVU5DVElPTgorI2RlZmluZSBERUJVR19WQVJJQUJMRQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEdDQ19TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RhcmdldC1ob29rcy1tYWNyb3MuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90YXJnZXQtaG9va3MtbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzOTJjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90YXJnZXQtaG9va3MtbWFjcm9zLmgKQEAgLTAsMCArMSw4MCBAQAorLyogQ29tbW9uIG1hY3JvcyBmb3IgdGFyZ2V0IGhvb2sgZGVmaW5pdGlvbnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBzaG91bGQgYmUgcHJvdmlkZWQgYnkgdGhlIGluY2x1ZGluZyBmaWxlOgorCisgICBERUZIT09LKE5BTUUsIERPQywgVFlQRSwgUEFSQU1TLCBJTklUKTogRGVmaW5lIGEgZnVuY3Rpb24tdmFsdWVkIGhvb2suCisgICBERUZIT09LUE9EKERPQywgVFlQRSwgTkFNRSwgSU5JVCk6IERlZmluZSBhIHBpZWNlLW9mLWRhdGEgJ2hvb2snLiAgKi8KKworLyogRGVmYXVsdHMgZm9yIG9wdGlvbmFsIG1hY3JvczoKKyAgIERFRkhPT0tQT0RYKE5BTUUsIFRZUEUsIElOSVQpOiBMaWtlIERFRkhPT0tQT0QsIGJ1dCBzaGFyZSBkb2N1bWVudGF0aW9uCisgICB3aXRoIHRoZSBwcmV2aW91cyAnaG9vaycuICAqLworI2lmbmRlZiBERUZIT09LUE9EWAorI2RlZmluZSBERUZIT09LUE9EWChOQU1FLCBUWVBFLCBJTklUKSBERUZIT09LUE9EIChOQU1FLCAwLCBUWVBFLCBJTklUKQorI2VuZGlmCisgICAKKy8qIEhPT0tTVFJVQ1QoRlJBR01FTlQpOiBEZWNsYXJhdG9yIGZyYWdtZW50cyB0byBlbmNhcHN1bGF0ZSBhbGwgdGhlCisgICBtZW1iZXJzIGludG8gYSBzdHJ1Y3QgZ2NjX3RhcmdldCwgd2hpY2ggaW4gdHVybiBjb250YWlucyBzZXZlcmFsCisgICBzdWItc3RydWN0cy4gICovCisjaWZuZGVmIEhPT0tTVFJVQ1QKKyNkZWZpbmUgSE9PS1NUUlVDVChGUkFHTUVOVCkKKyNlbmRpZgorLyogSE9PS19WRUNUT1I6IFN0YXJ0IGEgc3RydWN0IGRlY2xhcmF0aW9uLCB3aGljaCB0aGVuIGdldHMgaXRzIG93biBpbml0aWFsaXplci4KKyAgIEhPT0tfVkVDVE9SX0VORDogQ2xvc2UgYSBzdHJ1Y3QgZGVjbGFyYXRpb24sIHByb3ZpZGluZyBhIG1lbWJlciBkZWNsYXJhdG9yCisgICAgICAgICAgICAgICAgICAgIG5hbWUgZm9yIG5lc3RlZCB1c2UuICAqLworI2lmbmRlZiBIT09LX1ZFQ1RPUl8xCisjZGVmaW5lIEhPT0tfVkVDVE9SXzEoTkFNRSwgRlJBR01FTlQpIEhPT0tTVFJVQ1QoRlJBR01FTlQpCisjZW5kaWYKKyNkZWZpbmUgSE9PS19WRUNUT1IoSU5JVF9OQU1FLCBTTkFNRSkgSE9PS19WRUNUT1JfMSAoSU5JVF9OQU1FLCBzdHJ1Y3QgU05BTUUgeykKKyNkZWZpbmUgSE9PS19WRUNUT1JfRU5EKERFQ0xfTkFNRSkgSE9PS19WRUNUT1JfMSgsfSBERUNMX05BTUUgOykKKworLyogRklYTUU6IEZvciBwcmUtZXhpc3RpbmcgaG9va3MsIHdlIGNhbid0IHBsYWNlIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBmaWVsZCBoZXJlIHRpbGwgd2UgZ2V0IHBlcm1pc3Npb24gZnJvbSB0aGUgRlNGIHRvIGluY2x1ZGUKKyAgIGl0IGluIEdQTGVkIHNvZnR3YXJlIC0gdGhlIHRhcmdldCBob29rIGRvY3VtZW50YXRpb24gaXMgc28gZmFyIG9ubHkKKyAgIGF2YWlsYWJsZSB1bmRlciB0aGUgR0ZETC4gICovCisKKy8qIEEgaG9vayBzaG91bGQgZ2VuZXJhbGx5IGJlIGRvY3VtZW50ZWQgYnkgYSBzdHJpbmcgaW4gdGhlIERPQyBwYXJhbWV0ZXIsCisgICB3aGljaCBzaG91bGQgY29udGFpbiB0ZXhpbmZvIG1hcmt1cC4gIElmIHRoZSBkb2N1bWVudGF0aW9uIGlzIG9ubHkgYXZhaWxhYmxlCisgICB1bmRlciB0aGUgR1BMLCBidXQgbm90IHVuZGVyIHRoZSBHRkRMLCBwdXQgaXQgaW4gYSBjb21tZW50IGFib3ZlIHRoZSBob29rCisgICBkZWZpbml0aW9uLiAgSWYgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIGF2YWlsYWJsZSBib3RoIHVuZGVyIEdQTCBhbmQKKyAgIEdGREwsIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB1bmRlciB0aGUgR0ZETCwgcHV0IHRoZQorICAgZG9jdW1lbnRhdG9uIGluIHRtLnRleGkuaW4sIGhlYWRpbmcgd2l0aCBAaG9vayA8aG9va25hbWU+IGFuZCBjbG9zaW5nCisgICB0aGUgcGFyYWdyYXBoIHdpdGggQGVuZCBkZWZ0eXBlZm4gLyBkZWZ0eXBldnIgYXMgYXBwcm9wcmlhdGUsIGFuZCBtYXJraW5nCisgICB0aGUgbmV4dCBhdXRvZ2VuZXJhdGVkIGhvb2sgd2l0aCBAaG9vayA8aG9va25hbWU+LgorICAgSW4gYm90aCB0aGVzZSBjYXNlcywgbGVhdmUgdGhlIERPQyBzdHJpbmcgZW1wdHksIGkuZS4gIiIuCisgICBTb21ldGltZXMsIGZvciBzb21lIGhpc3RvcmljIHJlYXNvbiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gCisgICBoYXMgdG8gYmUgZG9jdW1lbnRlZCBkaWZmZXJlbnRseQorICAgdGhhbiB3aGF0IGl0IGlzLiAgSW4gdGhhdCBjYXNlLCB1c2UgREVGSE9PS19VTkRPQyB0byBzdXBwcmVzcyBhdXRvLWdlbmVyYXRpb24KKyAgIG9mIGRvY3VtZW50YXRpb24uICBERUZIT09LX1VORE9DIHRha2VzIGEgRE9DIHN0cmluZyB3aGljaCBpdCBpZ25vcmVzLCBzbworICAgeW91IGNhbiBwdXQgR1BMZWQgZG9jdW1lbnRhdGlvbiBzdHJpbmcgdGhlcmUgaWYgeW91IGhhdmUgaG9wZXMgdGhhdCB5b3UKKyAgIGNhbiBjbGVhciB0aGUgZGVjbGFyYXRpb24gJiBkb2N1bWVudGF0aW9uIGZvciBHRkRMIGRpc3RyaWJ1dGlvbiBsYXRlciwKKyAgIGluIHdoaWNoIGNhc2UgeW91IGNhbiB0aGVuIHNpbXBseSBjaGFuZ2UgdGhlIERFRkhPT0tfVU5ET0MgdG8gREVGSE9PSworICAgdG8gdHVybiBvbiB0aGUgYXV0b2dlbmVyYXRpb24gb2YgdGhlIGRvY3VtZW50YXRpb24uCisKKyAgICBBIGRvY3VtZW50YXRpb24gc3RyaW5nIG9mICIqIiBtZWFucyBub3QgdG8gZW1pdCBhbnkgZG9jdW1lbnRhdGlvbiBhdCBhbGwsCisgICBhbmQgaXMgbWFpbmx5IHVzZWQgaW50ZXJuYWxseSBmb3IgREVGSE9PS19VTkRPQy4gIEl0IHNob3VsZCBnZW5lcmFsbHkgbm90CisgICBiZSB1c2VkIG90aGVyd2lzZSwgYnV0IGl0IGhhcyBpdHMgdXNlIGZvciBleGNlcHRpb25hbCBjYXNlcyB3aGVyZSBhdXRvbWF0aWMKKyAgIGRvY3VtZW50YXRpb24gaXMgbm90IHdhbnRlZCwgYW5kIHRoZSByZWFsIGRvY3VtZW50YXRpb24gaXMgZWxzZXdlcmUsIGxpa2UKKyAgIGZvciBUQVJHRVRfQVNNX3ssVU59QUxJR05FRF9JTlRfT1AsIHdoaWNoIGFyZSBob29rcyBvbmx5IGZvciBpbXBsZW1lbnRhdGlvbgorICAgcHVycG9zZXM7IHRoZXkgcmVmZXIgdG8gc3RydWN0cywgdGhlIGNvbXBvbmVudHMgb2Ygd2hpY2ggYXJlIGRvY3VtZW50ZWQgYXMKKyAgIHNlcGFyYXRlIGhvb2tzIFRBUkdFVF9BU01feyxVTn1BTElHTkVEX1tIU0RUXUlfT1AuCisgICBBIERPQyBzdHJpbmcgb2YgMCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9mIERFRkhPT0tQT0RYIGFuZCBzcGVjaWFsIHRhYmxlCisgICBlbnRyaWVzIG9ubHkuICAqLworCisvKiBFbXB0eSBtYWNybyBhcmd1bWVudHMgYXJlIHVuZGVmaW5lZCBpbiBDOTAsIHNvIHVzZSBhbiBlbXB0eSBtYWNybworICAgdG8gY2xvc2UgdG9wLWxldmVsIGhvb2sgc3RydWN0dXJlcy4gICovCisjZGVmaW5lIEM5MF9FTVBUWV9IQUNLCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdGFyZ2V0LmRlZiBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90YXJnZXQuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTFhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdGFyZ2V0LmRlZgpAQCAtMCwwICsxLDI5OTEgQEAKKy8qIFRhcmdldCBob29rIGRlZmluaXRpb25zLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgIGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBJbiBvdGhlciB3b3JkcywgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUgdGhpcyBwcm9ncmFtLgorICAgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKKyAgIHdoYXQgeW91IGdpdmUgdGhlbS4gICBIZWxwIHN0YW1wIG91dCBzb2Z0d2FyZS1ob2FyZGluZyEgICovCisKKy8qIFNlZSB0YXJnZXQtaG9va3MtbWFjcm9zLmggZm9yIGRldGFpbHMgb2YgbWFjcm9zIHRoYXQgc2hvdWxkIGJlCisgICBwcm92aWRlZCBieSB0aGUgaW5jbHVkaW5nIGZpbGUsIGFuZCBob3cgdG8gdXNlIHRoZW0gaGVyZS4gICovCisjaW5jbHVkZSAidGFyZ2V0LWhvb2tzLW1hY3Jvcy5oIgorCisjdW5kZWYgSE9PS19UWVBFCisjZGVmaW5lIEhPT0tfVFlQRSAiVGFyZ2V0IEhvb2siCisKK0hPT0tfVkVDVE9SIChUQVJHRVRfSU5JVElBTElaRVIsIGdjY190YXJnZXQpCisKKy8qIEZ1bmN0aW9ucyB0aGF0IG91dHB1dCBhc3NlbWJsZXIgZm9yIHRoZSB0YXJnZXQuICAqLworI2RlZmluZSBIT09LX1BSRUZJWCAiVEFSR0VUX0FTTV8iCitIT09LX1ZFQ1RPUiAoVEFSR0VUX0FTTV9PVVQsIGFzbV9vdXQpCisKKy8qIE9wZW5pbmcgYW5kIGNsb3NpbmcgcGFyZW50aGVzZXMgZm9yIGFzbSBleHByZXNzaW9uIGdyb3VwaW5nLiAgKi8KK0RFRkhPT0tQT0QKKyhvcGVuX3BhcmVuLAorICIiLAorIGNvbnN0IGNoYXIgKiwgIigiKQorREVGSE9PS1BPRFggKGNsb3NlX3BhcmVuLCBjb25zdCBjaGFyICosICIpIikKKworLyogQXNzZW1ibGVyIGluc3RydWN0aW9ucyBmb3IgY3JlYXRpbmcgdmFyaW91cyBraW5kcyBvZiBpbnRlZ2VyIG9iamVjdC4gICovCitERUZIT09LUE9ECisoYnl0ZV9vcCwKKyAiIiwKKyBjb25zdCBjaGFyICosICJcdC5ieXRlXHQiKQorREVGSE9PS1BPRCAoYWxpZ25lZF9vcCwgIioiLCBzdHJ1Y3QgYXNtX2ludF9vcCwgVEFSR0VUX0FTTV9BTElHTkVEX0lOVF9PUCkKK0RFRkhPT0tQT0QgKHVuYWxpZ25lZF9vcCwgIioiLCBzdHJ1Y3QgYXNtX2ludF9vcCwgVEFSR0VUX0FTTV9VTkFMSUdORURfSU5UX09QKQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCB3aGVuIGFwcGx5aW5nCisgICBMQUJFTF9BTElHTl9BRlRFUl9CQVJSSUVSLiAgKi8KK0RFRkhPT0sKKyhsYWJlbF9hbGlnbl9hZnRlcl9iYXJyaWVyX21heF9za2lwLAorICIiLAorIGludCwgKHJ0eCBsYWJlbCksCisgZGVmYXVsdF9sYWJlbF9hbGlnbl9hZnRlcl9iYXJyaWVyX21heF9za2lwKQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCB3aGVuIGFwcGx5aW5nCisgICBMT09QX0FMSUdOLiAgKi8KK0RFRkhPT0sKKyhsb29wX2FsaWduX21heF9za2lwLAorICIiLAorIGludCwgKHJ0eCBsYWJlbCksCisgZGVmYXVsdF9sb29wX2FsaWduX21heF9za2lwKQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCB3aGVuIGFwcGx5aW5nCisgICBMQUJFTF9BTElHTi4gICovCitERUZIT09LCisobGFiZWxfYWxpZ25fbWF4X3NraXAsCisgIiIsCisgaW50LCAocnR4IGxhYmVsKSwKKyBkZWZhdWx0X2xhYmVsX2FsaWduX21heF9za2lwKQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCB3aGVuIGFwcGx5aW5nCisgICBKVU1QX0FMSUdOLiAgKi8KK0RFRkhPT0sKKyhqdW1wX2FsaWduX21heF9za2lwLAorICIiLAorIGludCwgKHJ0eCBsYWJlbCksCisgZGVmYXVsdF9qdW1wX2FsaWduX21heF9za2lwKQorCisvKiBUcnkgdG8gb3V0cHV0IHRoZSBhc3NlbWJsZXIgY29kZSBmb3IgYW4gaW50ZWdlciBvYmplY3Qgd2hvc2UKKyAgIHZhbHVlIGlzIGdpdmVuIGJ5IFguICBTSVpFIGlzIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgaW4gYnl0ZXMgYW5kCisgICBBTElHTkVEX1AgaW5kaWNhdGVzIHdoZXRoZXIgaXQgaXMgYWxpZ25lZC4gIFJldHVybiB0cnVlIGlmCisgICBzdWNjZXNzZnVsLiAgT25seSBoYW5kbGVzIGNhc2VzIGZvciB3aGljaCBCWVRFX09QLCBBTElHTkVEX09QCisgICBhbmQgVU5BTElHTkVEX09QIGFyZSBOVUxMLiAgKi8KK0RFRkhPT0sKKyhpbnRlZ2VyLAorICIiLAorIC8qIE9ubHkgaGFuZGxlcyBjYXNlcyBmb3Igd2hpY2ggQllURV9PUCwgQUxJR05FRF9PUCBhbmQgVU5BTElHTkVEX09QIGFyZQorICAgIE5VTEwuICAqLworIGJvb2wsIChydHggeCwgdW5zaWduZWQgaW50IHNpemUsIGludCBhbGlnbmVkX3ApLAorIGRlZmF1bHRfYXNzZW1ibGVfaW50ZWdlcikKKworLyogT3V0cHV0IGNvZGUgdGhhdCB3aWxsIGdsb2JhbGl6ZSBhIGxhYmVsLiAgKi8KK0RFRkhPT0sKKyhnbG9iYWxpemVfbGFiZWwsCisgIiIsCisgdm9pZCwgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqbmFtZSksCisgZGVmYXVsdF9nbG9iYWxpemVfbGFiZWwpCisKKy8qIE91dHB1dCBjb2RlIHRoYXQgd2lsbCBnbG9iYWxpemUgYSBkZWNsYXJhdGlvbi4gICovCitERUZIT09LCisoZ2xvYmFsaXplX2RlY2xfbmFtZSwKKyAiIiwKKyB2b2lkLCAoRklMRSAqc3RyZWFtLCB0cmVlIGRlY2wpLCBkZWZhdWx0X2dsb2JhbGl6ZV9kZWNsX25hbWUpCisKKy8qIE91dHB1dCBjb2RlIHRoYXQgd2lsbCBlbWl0IGEgbGFiZWwgZm9yIHVud2luZCBpbmZvLCBpZiB0aGlzCisgICB0YXJnZXQgcmVxdWlyZXMgc3VjaCBsYWJlbHMuICBTZWNvbmQgYXJndW1lbnQgaXMgdGhlIGRlY2wgdGhlCisgICB1bndpbmQgaW5mbyBpcyBhc3NvY2lhdGVkIHdpdGgsIHRoaXJkIGlzIGEgYm9vbGVhbjogdHJ1ZSBpZgorICAgdGhpcyBpcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBmb3VydGggaXMgYSBib29sZWFuOiB0cnVlIGlmCisgICB0aGlzIGlzIG9ubHkgYSBwbGFjZWhvbGRlciBmb3IgYW4gb21pdHRlZCBGREUuICAqLworREVGSE9PSworKGVtaXRfdW53aW5kX2xhYmVsLAorICIiLAorIHZvaWQsIChGSUxFICpzdHJlYW0sIHRyZWUgZGVjbCwgaW50IGZvcl9laCwgaW50IGVtcHR5KSwKKyBkZWZhdWx0X2VtaXRfdW53aW5kX2xhYmVsKQorCisvKiBPdXRwdXQgY29kZSB0aGF0IHdpbGwgZW1pdCBhIGxhYmVsIHRvIGRpdmlkZSB1cCB0aGUgZXhjZXB0aW9uIHRhYmxlLiAgKi8KK0RFRkhPT0sKKyhlbWl0X2V4Y2VwdF90YWJsZV9sYWJlbCwKKyAiIiwKKyB2b2lkLCAoRklMRSAqc3RyZWFtKSwKKyBkZWZhdWx0X2VtaXRfZXhjZXB0X3RhYmxlX2xhYmVsKQorCisvKiBFbWl0IGEgZGlyZWN0aXZlIGZvciBzZXR0aW5nIHRoZSBwZXJzb25hbGl0eSBmb3IgdGhlIGZ1bmN0aW9uLiAgKi8KK0RFRkhPT0sKKyhlbWl0X2V4Y2VwdF9wZXJzb25hbGl0eSwKKyAiSWYgdGhlIHRhcmdldCBpbXBsZW1lbnRzIEBjb2Rle1RBUkdFVF9BU01fVU5XSU5EX0VNSVR9LCB0aGlzIGhvb2sgbWF5IGJlXAorIHVzZWQgdG8gZW1pdCBhIGRpcmVjdGl2ZSB0byBpbnN0YWxsIGEgcGVyc29uYWxpdHkgaG9vayBpbnRvIHRoZSB1bndpbmRcCisgaW5mby4gIFRoaXMgaG9vayBzaG91bGQgbm90IGJlIHVzZWQgaWYgZHdhcmYyIHVud2luZCBpbmZvIGlzIHVzZWQuIiwKKyB2b2lkLCAocnR4IHBlcnNvbmFsaXR5KSwKKyBOVUxMKQorCisvKiBFbWl0IGFueSBkaXJlY3RpdmVzIHJlcXVpcmVkIHRvIHVud2luZCB0aGlzIGluc3RydWN0aW9uLiAgKi8KK0RFRkhPT0sKKyh1bndpbmRfZW1pdCwKKyAiIiwKKyB2b2lkLCAoRklMRSAqc3RyZWFtLCBydHggaW5zbiksCisgTlVMTCkKKworREVGSE9PS1BPRAorKHVud2luZF9lbWl0X2JlZm9yZV9pbnNuLAorICJUcnVlIGlmIHRoZSBAY29kZXtUQVJHRVRfQVNNX1VOV0lORF9FTUlUfSBob29rIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlXAorIHRoZSBhc3NlbWJseSBmb3IgQHZhcntpbnNufSBoYXMgYmVlbiBlbWl0dGVkLCBmYWxzZSBpZiB0aGUgaG9vayBzaG91bGRcCisgYmUgY2FsbGVkIGFmdGVyd2FyZC4iLAorIGJvb2wsIHRydWUpCisKKy8qIEdlbmVyYXRlIGFuIGludGVybmFsIGxhYmVsLgorICAgRm9yIG5vdyB0aGlzIGlzIGp1c3QgYSB3cmFwcGVyIGZvciBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwuICAqLworREVGSE9PS19VTkRPQworKGdlbmVyYXRlX2ludGVybmFsX2xhYmVsLAorICIiLAorIHZvaWQsIChjaGFyICpidWYsIGNvbnN0IGNoYXIgKnByZWZpeCwgdW5zaWduZWQgbG9uZyBsYWJlbG5vKSwKKyBkZWZhdWx0X2dlbmVyYXRlX2ludGVybmFsX2xhYmVsKQorCisvKiBPdXRwdXQgYW4gaW50ZXJuYWwgbGFiZWwuICAqLworREVGSE9PSworKGludGVybmFsX2xhYmVsLAorICIiLAorIHZvaWQsIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKnByZWZpeCwgdW5zaWduZWQgbG9uZyBsYWJlbG5vKSwKKyBkZWZhdWx0X2ludGVybmFsX2xhYmVsKQorCisvKiBPdXRwdXQgbGFiZWwgZm9yIHRoZSBjb25zdGFudC4gICovCitERUZIT09LCisoZGVjbGFyZV9jb25zdGFudF9uYW1lLAorICIiLAorIHZvaWQsIChGSUxFICpmaWxlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdF90cmVlIGV4cHIsIEhPU1RfV0lERV9JTlQgc2l6ZSksCisgZGVmYXVsdF9hc21fZGVjbGFyZV9jb25zdGFudF9uYW1lKQorCisvKiBFbWl0IGEgdHR5cGUgdGFibGUgcmVmZXJlbmNlIHRvIGEgdHlwZWluZm8gb2JqZWN0LiAgKi8KK0RFRkhPT0sKKyh0dHlwZSwKKyAiIiwKKyBib29sLCAocnR4IHN5bSksCisgaG9va19ib29sX3J0eF9mYWxzZSkKKworLyogRW1pdCBhbiBhc3NlbWJsZXIgZGlyZWN0aXZlIHRvIHNldCB2aXNpYmlsaXR5IGZvciB0aGUgc3ltYm9sCisgICBhc3NvY2lhdGVkIHdpdGggdGhlIHRyZWUgZGVjbC4gICovCitERUZIT09LCisoYXNzZW1ibGVfdmlzaWJpbGl0eSwKKyAiIiwKKyB2b2lkLCAodHJlZSBkZWNsLCBpbnQgdmlzaWJpbGl0eSksCisgZGVmYXVsdF9hc3NlbWJsZV92aXNpYmlsaXR5KQorCisvKiBPdXRwdXQgdGhlIGFzc2VtYmxlciBjb2RlIGZvciBlbnRyeSB0byBhIGZ1bmN0aW9uLiAgKi8KK0RFRkhPT0sKKyhmdW5jdGlvbl9wcm9sb2d1ZSwKKyAiIiwKKyB2b2lkLCAoRklMRSAqZmlsZSwgSE9TVF9XSURFX0lOVCBzaXplKSwKKyBkZWZhdWx0X2Z1bmN0aW9uX3Byb19lcGlsb2d1ZSkKKworLyogT3V0cHV0IHRoZSBhc3NlbWJsZXIgY29kZSBmb3IgZW5kIG9mIHByb2xvZ3VlLiAgKi8KK0RFRkhPT0sKKyhmdW5jdGlvbl9lbmRfcHJvbG9ndWUsCisgIiIsCisgdm9pZCwgKEZJTEUgKmZpbGUpLAorIG5vX2FzbV90b19zdHJlYW0pCisKKy8qIE91dHB1dCB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIHN0YXJ0IG9mIGVwaWxvZ3VlLiAgKi8KK0RFRkhPT0sKKyhmdW5jdGlvbl9iZWdpbl9lcGlsb2d1ZSwKKyAiIiwKKyB2b2lkLCAoRklMRSAqZmlsZSksCisgbm9fYXNtX3RvX3N0cmVhbSkKKworLyogT3V0cHV0IHRoZSBhc3NlbWJsZXIgY29kZSBmb3IgZnVuY3Rpb24gZXhpdC4gICovCitERUZIT09LCisoZnVuY3Rpb25fZXBpbG9ndWUsCisgIiIsCisgdm9pZCwgKEZJTEUgKmZpbGUsIEhPU1RfV0lERV9JTlQgc2l6ZSksCisgZGVmYXVsdF9mdW5jdGlvbl9wcm9fZXBpbG9ndWUpCisKKy8qIEluaXRpYWxpemUgdGFyZ2V0LXNwZWNpZmljIHNlY3Rpb25zLiAgKi8KK0RFRkhPT0sKKyhpbml0X3NlY3Rpb25zLAorICIiLAorIHZvaWQsICh2b2lkKSwKKyBob29rX3ZvaWRfdm9pZCkKKworLyogVGVsbCBhc3NlbWJsZXIgdG8gY2hhbmdlIHRvIHNlY3Rpb24gTkFNRSB3aXRoIGF0dHJpYnV0ZXMgRkxBR1MuCisgICBJZiBERUNMIGlzIG5vbi1OVUxMLCBpdCBpcyB0aGUgVkFSX0RFQ0wgb3IgRlVOQ1RJT05fREVDTCB3aXRoCisgICB3aGljaCB0aGlzIHNlY3Rpb24gaXMgYXNzb2NpYXRlZC4gICovCitERUZIT09LCisobmFtZWRfc2VjdGlvbiwKKyAiIiwKKyB2b2lkLCAoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLCB0cmVlIGRlY2wpLAorIGRlZmF1bHRfbm9fbmFtZWRfc2VjdGlvbikKKworLyogUmV0dXJuIHByZWZlcnJlZCB0ZXh0IChzdWIpc2VjdGlvbiBmb3IgZnVuY3Rpb24gREVDTC4KKyAgIE1haW4gcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHNlcGFyYXRlIGNvbGQsIG5vcm1hbCBhbmQgaG90CisgICBmdW5jdGlvbnMuIFNUQVJUVVAgaXMgdHJ1ZSB3aGVuIGZ1bmN0aW9uIGlzIGtub3duIHRvIGJlIHVzZWQgb25seSAKKyAgIGF0IHN0YXJ0dXAgKGZyb20gc3RhdGljIGNvbnN0cnVjdG9ycyBvciBpdCBpcyBtYWluKCkpLgorICAgRVhJVCBpcyB0cnVlIHdoZW4gZnVuY3Rpb24gaXMga25vd24gdG8gYmUgdXNlZCBvbmx5IGF0IGV4aXQKKyAgIChmcm9tIHN0YXRpYyBkZXN0cnVjdG9ycykuCisgICBSZXR1cm4gTlVMTCBpZiBmdW5jdGlvbiBzaG91bGQgZ28gdG8gZGVmYXVsdCB0ZXh0IHNlY3Rpb24uICAqLworREVGSE9PSworKGZ1bmN0aW9uX3NlY3Rpb24sCisgIiIsCisgc2VjdGlvbiAqLCAodHJlZSBkZWNsLCBlbnVtIG5vZGVfZnJlcXVlbmN5IGZyZXEsIGJvb2wgc3RhcnR1cCwgYm9vbCBleGl0KSwKKyBkZWZhdWx0X2Z1bmN0aW9uX3NlY3Rpb24pCisKKy8qIE91dHB1dCB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIGZ1bmN0aW9uIGV4aXQuICAqLworREVGSE9PSworKGZ1bmN0aW9uX3N3aXRjaGVkX3RleHRfc2VjdGlvbnMsCisgIlVzZWQgYnkgdGhlIHRhcmdldCB0byBlbWl0IGFueSBhc3NlbWJsZXIgZGlyZWN0aXZlcyBvciBhZGRpdGlvbmFsXAorICBsYWJlbHMgbmVlZGVkIHdoZW4gYSBmdW5jdGlvbiBpcyBwYXJ0aXRpb25lZCBiZXR3ZWVuIGRpZmZlcmVudFwKKyAgc2VjdGlvbnMuICBPdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gQHZhcntmaWxlfS4gIFRoZSBmdW5jdGlvblwKKyAgZGVjbCBpcyBhdmFpbGFibGUgYXMgQHZhcntkZWNsfSBhbmQgdGhlIG5ldyBzZWN0aW9uIGlzIGBjb2xkJyBpZlwKKyAgQHZhcntuZXdfaXNfY29sZH0gaXMgQGNvZGV7dHJ1ZX0uIiwKKyB2b2lkLCAoRklMRSAqZmlsZSwgdHJlZSBkZWNsLCBib29sIG5ld19pc19jb2xkKSwKKyBkZWZhdWx0X2Z1bmN0aW9uX3N3aXRjaGVkX3RleHRfc2VjdGlvbnMpCisKKy8qIFJldHVybiBhIG1hc2sgZGVzY3JpYmluZyBob3cgcmVsb2NhdGlvbnMgc2hvdWxkIGJlIHRyZWF0ZWQgd2hlbgorICAgc2VsZWN0aW5nIHNlY3Rpb25zLiAgQml0IDEgc2hvdWxkIGJlIHNldCBpZiBnbG9iYWwgcmVsb2NhdGlvbnMKKyAgIHNob3VsZCBiZSBwbGFjZWQgaW4gYSByZWFkLXdyaXRlIHNlY3Rpb247IGJpdCAwIHNob3VsZCBiZSBzZXQgaWYKKyAgIGxvY2FsIHJlbG9jYXRpb25zIHNob3VsZCBiZSBwbGFjZWQgaW4gYSByZWFkLXdyaXRlIHNlY3Rpb24uICAqLworREVGSE9PSworKHJlbG9jX3J3X21hc2ssCisgIiIsCisgaW50LCAodm9pZCksCisgZGVmYXVsdF9yZWxvY19yd19tYXNrKQorCisgLyogUmV0dXJuIGEgc2VjdGlvbiBmb3IgRVhQLiAgSXQgbWF5IGJlIGEgREVDTCBvciBhIGNvbnN0YW50LiAgUkVMT0MKKyAgICBpcyBub256ZXJvIGlmIHJ1bnRpbWUgcmVsb2NhdGlvbnMgbXVzdCBiZSBhcHBsaWVkOyBiaXQgMSB3aWxsIGJlCisgICAgc2V0IGlmIHRoZSBydW50aW1lIHJlbG9jYXRpb25zIHJlcXVpcmUgbm9uLWxvY2FsIG5hbWUgcmVzb2x1dGlvbi4KKyAgICBBTElHTiBpcyB0aGUgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRoZSBkYXRhLiAgKi8KK0RFRkhPT0sKKyhzZWxlY3Rfc2VjdGlvbiwKKyAiIiwKKyBzZWN0aW9uICosICh0cmVlIGV4cCwgaW50IHJlbG9jLCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGFsaWduKSwKKyBkZWZhdWx0X3NlbGVjdF9zZWN0aW9uKQorCisvKiBSZXR1cm4gYSBzZWN0aW9uIGZvciBYLiAgTU9ERSBpcyBYJ3MgbW9kZSBhbmQgQUxJR04gaXMgaXRzCisgICBhbGlnbm1lbnQgaW4gYml0cy4gICovCitERUZIT09LCisoc2VsZWN0X3J0eF9zZWN0aW9uLAorICIiLAorIHNlY3Rpb24gKiwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCB4LCB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGFsaWduKSwKKyBkZWZhdWx0X3NlbGVjdF9ydHhfc2VjdGlvbikKKworLyogU2VsZWN0IGEgdW5pcXVlIHNlY3Rpb24gbmFtZSBmb3IgREVDTC4gIFJFTE9DIGlzIHRoZSBzYW1lIGFzCisgICBmb3IgU0VMRUNUX1NFQ1RJT04uICAqLworREVGSE9PSworKHVuaXF1ZV9zZWN0aW9uLAorICIiLAorIHZvaWQsICh0cmVlIGRlY2wsIGludCByZWxvYyksCisgZGVmYXVsdF91bmlxdWVfc2VjdGlvbikKKworLyogUmV0dXJuIHRoZSByZWFkb25seSBkYXRhIHNlY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGZ1bmN0aW9uIERFQ0wuICAqLworREVGSE9PSworKGZ1bmN0aW9uX3JvZGF0YV9zZWN0aW9uLAorICIiLAorIHNlY3Rpb24gKiwgKHRyZWUgZGVjbCksCisgZGVmYXVsdF9mdW5jdGlvbl9yb2RhdGFfc2VjdGlvbikKKworLyogTm9ubnVsbCBpZiB0aGUgdGFyZ2V0IHdhbnRzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0ICIucm9kYXRhIiBwcmVmaXgKKyAgIGZvciBtZXJnZWFibGUgZGF0YSBzZWN0aW9ucy4gICovCitERUZIT09LUE9ECisobWVyZ2VhYmxlX3JvZGF0YV9wcmVmaXgsCisgIlVzdWFsbHksIHRoZSBjb21waWxlciB1c2VzIHRoZSBwcmVmaXggQGNvZGV7XCIucm9kYXRhXCJ9IHRvIGNvbnN0cnVjdFxuXAorc2VjdGlvbiBuYW1lcyBmb3IgbWVyZ2VhYmxlIGNvbnN0YW50IGRhdGEuICBEZWZpbmUgdGhpcyBtYWNybyB0byBvdmVycmlkZVxuXAordGhlIHN0cmluZyBpZiBhIGRpZmZlcmVudCBzZWN0aW9uIG5hbWUgc2hvdWxkIGJlIHVzZWQuIiwKKyBjb25zdCBjaGFyICosICIucm9kYXRhIikKKworLyogUmV0dXJuIHRoZSBzZWN0aW9uIHRvIGJlIHVzZWQgZm9yIHRyYW5zYWN0aW9uYWwgbWVtb3J5IGNsb25lIHRhYmxlcy4gICovCitERUZIT09LCisodG1fY2xvbmVfdGFibGVfc2VjdGlvbiwKKyAiUmV0dXJuIHRoZSBzZWN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRyYW5zYWN0aW9uYWwgbWVtb3J5IGNsb25lXAorICB0YWJsZXMuIiwKKyBzZWN0aW9uICosICh2b2lkKSwgZGVmYXVsdF9jbG9uZV90YWJsZV9zZWN0aW9uKQorCisvKiBPdXRwdXQgYSBjb25zdHJ1Y3RvciBmb3IgYSBzeW1ib2wgd2l0aCBhIGdpdmVuIHByaW9yaXR5LiAgKi8KK0RFRkhPT0sKKyhjb25zdHJ1Y3RvciwKKyAiIiwKKyB2b2lkLCAocnR4IHN5bWJvbCwgaW50IHByaW9yaXR5KSwgTlVMTCkKKworLyogT3V0cHV0IGEgZGVzdHJ1Y3RvciBmb3IgYSBzeW1ib2wgd2l0aCBhIGdpdmVuIHByaW9yaXR5LiAgKi8KK0RFRkhPT0sKKyhkZXN0cnVjdG9yLAorICIiLAorIHZvaWQsIChydHggc3ltYm9sLCBpbnQgcHJpb3JpdHkpLCBOVUxMKQorCisvKiBPdXRwdXQgdGhlIGFzc2VtYmxlciBjb2RlIGZvciBhIHRodW5rIGZ1bmN0aW9uLiAgVEhVTktfREVDTCBpcyB0aGUKKyAgIGRlY2xhcmF0aW9uIGZvciB0aGUgdGh1bmsgZnVuY3Rpb24gaXRzZWxmLCBGVU5DVElPTiBpcyB0aGUgZGVjbCBmb3IKKyAgIHRoZSB0YXJnZXQgZnVuY3Rpb24uICBERUxUQSBpcyBhbiBpbW1lZGlhdGUgY29uc3RhbnQgb2Zmc2V0IHRvIGJlCisgICBhZGRlZCB0byBUSElTLiAgSWYgVkNBTExfT0ZGU0VUIGlzIG5vbnplcm8sIHRoZSB3b3JkIGF0CisgICAqKCp0aGlzICsgdmNhbGxfb2Zmc2V0KSBzaG91bGQgYmUgYWRkZWQgdG8gVEhJUy4gICovCitERUZIT09LCisob3V0cHV0X21pX3RodW5rLAorICIiLAorIHZvaWQsIChGSUxFICpmaWxlLCB0cmVlIHRodW5rX2ZuZGVjbCwgSE9TVF9XSURFX0lOVCBkZWx0YSwKKwlIT1NUX1dJREVfSU5UIHZjYWxsX29mZnNldCwgdHJlZSBmdW5jdGlvbiksCisgTlVMTCkKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgb3V0cHV0X21pX3RodW5rIHdvdWxkIHN1Y2NlZWQuICAqLworLyogPz8/IElkZWFsbHksIHRoaXMgaG9vayB3b3VsZCBub3QgZXhpc3QsIGFuZCBzdWNjZXNzIG9yIGZhaWx1cmUKKyAgIHdvdWxkIGJlIHJldHVybmVkIGZyb20gb3V0cHV0X21pX3RodW5rIGRpcmVjdGx5LiAgQnV0IHRoZXJlJ3MKKyAgIHRvbyBtdWNoIHVuZG8tYWJsZSBzZXR1cCBpbnZvbHZlZCBpbiBpbnZva2luZyBvdXRwdXRfbWlfdGh1bmsuCisgICBDb3VsZCBiZSBmaXhlZCBieSBtYWtpbmcgb3V0cHV0X21pX3RodW5rIGVtaXQgcnRsIGluc3RlYWQgb2YKKyAgIHRleHQgdG8gdGhlIG91dHB1dCBmaWxlLiAgKi8KK0RFRkhPT0sKKyhjYW5fb3V0cHV0X21pX3RodW5rLAorICIiLAorIGJvb2wsIChjb25zdF90cmVlIHRodW5rX2ZuZGVjbCwgSE9TVF9XSURFX0lOVCBkZWx0YSwKKwlIT1NUX1dJREVfSU5UIHZjYWxsX29mZnNldCwgY29uc3RfdHJlZSBmdW5jdGlvbiksCisgaG9va19ib29sX2NvbnN0X3RyZWVfaHdpX2h3aV9jb25zdF90cmVlX2ZhbHNlKQorCisvKiBPdXRwdXQgYW55IGJvaWxlcnBsYXRlIHRleHQgbmVlZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYQorICAgdHJhbnNsYXRpb24gdW5pdC4gICovCitERUZIT09LCisoZmlsZV9zdGFydCwKKyAiIiwKKyB2b2lkLCAodm9pZCksCisgZGVmYXVsdF9maWxlX3N0YXJ0KQorCisvKiBPdXRwdXQgYW55IGJvaWxlcnBsYXRlIHRleHQgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYSB0cmFuc2xhdGlvbiB1bml0LiAgKi8KK0RFRkhPT0sKKyhmaWxlX2VuZCwKKyAiIiwKKyB2b2lkLCAodm9pZCksCisgaG9va192b2lkX3ZvaWQpCisKKy8qIE91dHB1dCBhbnkgYm9pbGVycGxhdGUgdGV4dCBuZWVkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbgorICAgTFRPIG91dHB1dCBzdHJlYW0uICAqLworREVGSE9PSworKGx0b19zdGFydCwKKyAiIiwKKyB2b2lkLCAodm9pZCksCisgaG9va192b2lkX3ZvaWQpCisKKy8qIE91dHB1dCBhbnkgYm9pbGVycGxhdGUgdGV4dCBuZWVkZWQgYXQgdGhlIGVuZCBvZiBhbgorICAgTFRPIG91dHB1dCBzdHJlYW0uICAqLworREVGSE9PSworKGx0b19lbmQsCisgIiIsCisgdm9pZCwgKHZvaWQpLAorIGhvb2tfdm9pZF92b2lkKQorCisvKiBPdXRwdXQgYW55IGJvaWxlcnBsYWNlIHRleHQgbmVlZGVkIGF0IHRoZSBlbmQgb2YgYQorICAgdHJhbnNsYXRpb24gdW5pdCBiZWZvcmUgZGVidWcgYW5kIHVud2luZCBpbmZvIGlzIGVtaXR0ZWQuICAqLworREVGSE9PSworKGNvZGVfZW5kLAorICIiLAorIHZvaWQsICh2b2lkKSwKKyBob29rX3ZvaWRfdm9pZCkKKworLyogT3V0cHV0IGFuIGFzc2VtYmxlciBwc2V1ZG8tb3AgdG8gZGVjbGFyZSBhIGxpYnJhcnkgZnVuY3Rpb24gbmFtZQorICAgZXh0ZXJuYWwuICAqLworREVGSE9PSworKGV4dGVybmFsX2xpYmNhbGwsCisgIiIsCisgdm9pZCwgKHJ0eCBzeW1yZWYpLAorIGRlZmF1bHRfZXh0ZXJuYWxfbGliY2FsbCkKKworLyogT3V0cHV0IGFuIGFzc2VtYmxlciBkaXJlY3RpdmUgdG8gbWFyayBkZWNsIGxpdmUuIFRoaXMgaW5zdHJ1Y3RzCisgICBsaW5rZXIgdG8gbm90IGRlYWQgY29kZSBzdHJpcCB0aGlzIHN5bWJvbC4gICovCitERUZIT09LCisobWFya19kZWNsX3ByZXNlcnZlZCwKKyAiIiwKKyB2b2lkLCAoY29uc3QgY2hhciAqc3ltYm9sKSwKKyBob29rX3ZvaWRfY29uc3RjaGFycHRyKQorCisvKiBPdXRwdXQgYSByZWNvcmQgb2YgdGhlIGNvbW1hbmQgbGluZSBzd2l0Y2hlcyB0aGF0IGhhdmUgYmVlbiBwYXNzZWQuICAqLworREVGSE9PSworKHJlY29yZF9nY2Nfc3dpdGNoZXMsCisgIiIsCisgaW50LCAocHJpbnRfc3dpdGNoX3R5cGUgdHlwZSwgY29uc3QgY2hhciAqdGV4dCksCisgTlVMTCkKKworLyogVGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gdGhhdCB0aGUgZXhhbXBsZSBFTEYgaW1wbGVtZW50YXRpb24gb2YKKyAgIHJlY29yZF9nY2Nfc3dpdGNoZXMgd2lsbCB1c2UgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uLiAgVGFyZ2V0CisgICBzcGVjaWZpYyB2ZXJzaW9ucyBvZiByZWNvcmRfZ2NjX3N3aXRjaGVzIG1heSBvciBtYXkgbm90IHVzZQorICAgdGhpcyBpbmZvcm1hdGlvbi4gICovCitERUZIT09LUE9ECisocmVjb3JkX2djY19zd2l0Y2hlc19zZWN0aW9uLAorICIiLAorIGNvbnN0IGNoYXIgKiwgIi5HQ0MuY29tbWFuZC5saW5lIikKKworLyogT3V0cHV0IHRoZSBkZWZpbml0aW9uIG9mIGEgc2VjdGlvbiBhbmNob3IuICAqLworREVGSE9PSworKG91dHB1dF9hbmNob3IsCisgIiIsCisgdm9pZCwgKHJ0eCB4KSwKKyBkZWZhdWx0X2FzbV9vdXRwdXRfYW5jaG9yKQorCitERUZIT09LCisob3V0cHV0X2lkZW50LAorICJPdXRwdXQgYSBzdHJpbmcgYmFzZWQgb24gQHZhcntuYW1lfSwgc3VpdGFibGUgZm9yIHRoZSBAc2FtcHsjaWRlbnR9IFwKKyBkaXJlY3RpdmUsIG9yIHRoZSBlcXVpdmFsZW50IGRpcmVjdGl2ZSBvciBwcmFnbWEgaW4gbm9uLUMtZmFtaWx5IGxhbmd1YWdlcy4gXAorIElmIHRoaXMgaG9vayBpcyBub3QgZGVmaW5lZCwgbm90aGluZyBpcyBvdXRwdXQgZm9yIHRoZSBAc2FtcHsjaWRlbnR9IFwKKyBkaXJlY3RpdmUuIiwKKyB2b2lkLCAoY29uc3QgY2hhciAqbmFtZSksCisgaG9va192b2lkX2NvbnN0Y2hhcnB0cikKKworLyogT3V0cHV0IGEgRFRQLXJlbGF0aXZlIHJlZmVyZW5jZSB0byBhIFRMUyBzeW1ib2wuICAqLworREVGSE9PSworKG91dHB1dF9kd2FyZl9kdHByZWwsCisgIiIsCisgdm9pZCwgKEZJTEUgKmZpbGUsIGludCBzaXplLCBydHggeCksCisgTlVMTCkKKworLyogU29tZSB0YXJnZXQgbWFjaGluZXMgbmVlZCB0byBwb3N0c2NhbiBlYWNoIGluc24gYWZ0ZXIgaXQgaXMgb3V0cHV0LiAgKi8KK0RFRkhPT0sKKyhmaW5hbF9wb3N0c2Nhbl9pbnNuLAorICIiLAorIHZvaWQsIChGSUxFICpmaWxlLCBydHggaW5zbiwgcnR4ICpvcHZlYywgaW50IG5vcGVyYW5kcyksCisgTlVMTCkKKworLyogRW1pdCB0aGUgdHJhbXBvbGluZSB0ZW1wbGF0ZS4gIFRoaXMgaG9vayBtYXkgYmUgTlVMTC4gICovCitERUZIT09LCisodHJhbXBvbGluZV90ZW1wbGF0ZSwKKyAiIiwKKyB2b2lkLCAoRklMRSAqZiksCisgTlVMTCkKKworREVGSE9PSworKG91dHB1dF9zb3VyY2VfZmlsZW5hbWUsCisgIk91dHB1dCBDT0ZGIGluZm9ybWF0aW9uIG9yIERXQVJGIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB3aGljaCBpbmRpY2F0ZXNcCisgdGhhdCBmaWxlbmFtZSBAdmFye25hbWV9IGlzIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIHRvIHRoZSBzdGRpb1wKKyBzdHJlYW0gQHZhcntmaWxlfS5cblwKKyBcblwKKyBUaGlzIHRhcmdldCBob29rIG5lZWQgbm90IGJlIGRlZmluZWQgaWYgdGhlIHN0YW5kYXJkIGZvcm0gb2Ygb3V0cHV0XAorIGZvciB0aGUgZmlsZSBmb3JtYXQgaW4gdXNlIGlzIGFwcHJvcHJpYXRlLiIsCisgdm9pZCAsKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKm5hbWUpLAorIGRlZmF1bHRfYXNtX291dHB1dF9zb3VyY2VfZmlsZW5hbWUpCisKK0RFRkhPT0sKKyhvdXRwdXRfYWRkcl9jb25zdF9leHRyYSwKKyAiIiwKKyBib29sLCAoRklMRSAqZmlsZSwgcnR4IHgpLAorIGhvb2tfYm9vbF9GSUxFcHRyX3J0eF9mYWxzZSkKKworLyogPz8/IFRoZSBUQVJHRVRfUFJJTlRfT1BFUkFORCogaG9va3MgYXJlIHBhcnQgb2YgdGhlIGFzbV9vdXQgc3RydWN0LAorICAgZXZlbiB0aG91Z2ggdGhhdCBpcyBub3QgcmVmbGVjdGVkIGluIHRoZSBtYWNybyBuYW1lIHRvIG92ZXJyaWRlIHRoZWlyCisgICBpbml0aWFsaXplcnMuICAqLworI3VuZGVmIEhPT0tfUFJFRklYCisjZGVmaW5lIEhPT0tfUFJFRklYICJUQVJHRVRfIgorCisvKiBFbWl0IGEgbWFjaGluZS1zcGVjaWZpYyBpbnNuIG9wZXJhbmQuICAqLworLyogPz8/IHRtLnRleGkgb25seSBkb2N1bWVudHMgdGhlIG9sZCBtYWNybyBQUklOVF9PUEVSQU5ELAorICAgbm90IHRoaXMgIGhvb2ssIGFuZCB1c2VzIGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBhcmd1bWVudCBGSUxFLiAgKi8KK0RFRkhPT0tfVU5ET0MKKyhwcmludF9vcGVyYW5kLAorICIiLAorIHZvaWQsIChGSUxFICpmaWxlLCBydHggeCwgaW50IGNvZGUpLAorIGRlZmF1bHRfcHJpbnRfb3BlcmFuZCkKKworLyogRW1pdCBhIG1hY2hpbmUtc3BlY2lmaWMgbWVtb3J5IGFkZHJlc3MuICAqLworLyogPz8/IHRtLnRleGkgb25seSBkb2N1bWVudHMgdGhlIG9sZCBtYWNybyBQUklOVF9PUEVSQU5EX0FERFJFU1MsCisgICBub3QgdGhpcyAgaG9vaywgYW5kIHVzZXMgZGlmZmVyZW50IGFyZ3VtZW50IG5hbWVzLiAgKi8KK0RFRkhPT0tfVU5ET0MKKyhwcmludF9vcGVyYW5kX2FkZHJlc3MsCisgIiIsCisgdm9pZCwgKEZJTEUgKmZpbGUsIHJ0eCBhZGRyKSwKKyBkZWZhdWx0X3ByaW50X29wZXJhbmRfYWRkcmVzcykKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgQ09ERSBpcyBhIHZhbGlkIHB1bmN0dWF0aW9uIGNoYXJhY3RlciBmb3IgdGhlCisgICBgcHJpbnRfb3BlcmFuZCcgaG9vay4gICovCisvKiA/Pz8gdG0udGV4aSBvbmx5IGRvY3VtZW50cyB0aGUgb2xkIG1hY3JvIFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCwKKyAgIG5vdCB0aGlzICBob29rLiAgKi8KK0RFRkhPT0tfVU5ET0MKKyhwcmludF9vcGVyYW5kX3B1bmN0X3ZhbGlkX3AsCisgIiIsCisgYm9vbCAsKHVuc2lnbmVkIGNoYXIgY29kZSksCisgZGVmYXVsdF9wcmludF9vcGVyYW5kX3B1bmN0X3ZhbGlkX3ApCisKKy8qIEdpdmVuIGEgc3ltYm9sIG5hbWUsIHBlcmZvcm0gc2FtZSBtYW5nbGluZyBhcyBhc3NlbWJsZV9uYW1lIGFuZAorICAgQVNNX09VVFBVVF9MQUJFTFJFRiwgcmV0dXJuaW5nIHJlc3VsdCBhcyBhbiBJREVOVElGSUVSX05PREUuICAqLworREVGSE9PSworKG1hbmdsZV9hc3NlbWJsZXJfbmFtZSwKKyAiR2l2ZW4gYSBzeW1ib2wgQHZhcntuYW1lfSwgcGVyZm9ybSBzYW1lIG1hbmdsaW5nIGFzIEBjb2Rle3ZhcmFzbS5jfSdzXAorIEBjb2Rle2Fzc2VtYmxlX25hbWV9LCBidXQgaW4gbWVtb3J5IHJhdGhlciB0aGFuIHRvIGEgZmlsZSBzdHJlYW0sIHJldHVybmluZ1wKKyByZXN1bHQgYXMgYW4gQGNvZGV7SURFTlRJRklFUl9OT0RFfS4gIFJlcXVpcmVkIGZvciBjb3JyZWN0IExUTyBzeW10YWJzLiAgVGhlXAorIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY2FsbHMgdGhlIEBjb2Rle1RBUkdFVF9TVFJJUF9OQU1FX0VOQ09ESU5HfSBob29rIGFuZFwKKyB0aGVuIHByZXBlbmRzIHRoZSBAY29kZXtVU0VSX0xBQkVMX1BSRUZJWH0sIGlmIGFueS4iLAorIHRyZWUsIChjb25zdCBjaGFyICpuYW1lKSwKKyBkZWZhdWx0X21hbmdsZV9hc3NlbWJsZXJfbmFtZSkKKworSE9PS19WRUNUT1JfRU5EIChhc21fb3V0KQorCisvKiBGdW5jdGlvbnMgcmVsYXRpbmcgdG8gaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZy4gIEFsbCBvZiB0aGVzZQorICAgZGVmYXVsdCB0byBudWxsIHBvaW50ZXJzLCB3aGljaCBoYWlmYS1zY2hlZC5jIGxvb2tzIGZvciBhbmQgaGFuZGxlcy4gICovCisjdW5kZWYgSE9PS19QUkVGSVgKKyNkZWZpbmUgSE9PS19QUkVGSVggIlRBUkdFVF9TQ0hFRF8iCitIT09LX1ZFQ1RPUiAoVEFSR0VUX1NDSEVELCBzY2hlZCkKKworLyogR2l2ZW4gdGhlIGN1cnJlbnQgY29zdCwgQ09TVCwgb2YgYW4gaW5zbiwgSU5TTiwgY2FsY3VsYXRlIGFuZAorICAgcmV0dXJuIGEgbmV3IGNvc3QgYmFzZWQgb24gaXRzIHJlbGF0aW9uc2hpcCB0byBERVBfSU5TTiB0aHJvdWdoCisgICB0aGUgZGVwZW5kZW5jZSBMSU5LLiAgVGhlIGRlZmF1bHQgaXMgdG8gbWFrZSBubyBhZGp1c3RtZW50LiAgKi8KK0RFRkhPT0sKKyhhZGp1c3RfY29zdCwKKyAiIiwKKyBpbnQsIChydHggaW5zbiwgcnR4IGxpbmssIHJ0eCBkZXBfaW5zbiwgaW50IGNvc3QpLCBOVUxMKQorCisvKiBBZGp1c3QgdGhlIHByaW9yaXR5IG9mIGFuIGluc24gYXMgeW91IHNlZSBmaXQuICBSZXR1cm5zIHRoZSBuZXcgcHJpb3JpdHkuICAqLworREVGSE9PSworKGFkanVzdF9wcmlvcml0eSwKKyAiIiwKKyBpbnQsIChydHggaW5zbiwgaW50IHByaW9yaXR5KSwgTlVMTCkKKworLyogRnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgdGhhdCBjYW4gYmUKKyAgIHNjaGVkdWxlZCBpbiB0aGUgc2FtZSBtYWNoaW5lIGN5Y2xlLiAgVGhpcyBtdXN0IGJlIGNvbnN0YW50CisgICBvdmVyIGFuIGVudGlyZSBjb21waWxhdGlvbi4gIFRoZSBkZWZhdWx0IGlzIDEuICAqLworREVGSE9PSworKGlzc3VlX3JhdGUsCisgIiIsCisgaW50LCAodm9pZCksIE5VTEwpCisKKy8qIENhbGN1bGF0ZSBob3cgbXVjaCB0aGlzIGluc24gYWZmZWN0cyBob3cgbWFueSBtb3JlIGluc25zIHdlCisgICBjYW4gZW1pdCB0aGlzIGN5Y2xlLiAgRGVmYXVsdCBpcyB0aGV5IGFsbCBjb3N0IHRoZSBzYW1lLiAgKi8KK0RFRkhPT0sKKyh2YXJpYWJsZV9pc3N1ZSwKKyAiIiwKKyBpbnQsIChGSUxFICpmaWxlLCBpbnQgdmVyYm9zZSwgcnR4IGluc24sIGludCBtb3JlKSwgTlVMTCkKKworLyogSW5pdGlhbGl6ZSBtYWNoaW5lLWRlcGVuZGVudCBzY2hlZHVsaW5nIGNvZGUuICAqLworREVGSE9PSworKGluaXQsCisgIiIsCisgdm9pZCwgKEZJTEUgKmZpbGUsIGludCB2ZXJib3NlLCBpbnQgbWF4X3JlYWR5KSwgTlVMTCkKKworLyogRmluYWxpemUgbWFjaGluZS1kZXBlbmRlbnQgc2NoZWR1bGluZyBjb2RlLiAgKi8KK0RFRkhPT0sKKyhmaW5pc2gsCisgIiIsCisgdm9pZCwgKEZJTEUgKmZpbGUsIGludCB2ZXJib3NlKSwgTlVMTCkKKworIC8qIEluaXRpYWxpemUgbWFjaGluZS1kZXBlbmRlbnQgZnVuY3Rpb24gd2lkZSBzY2hlZHVsaW5nIGNvZGUuICAqLworREVGSE9PSworKGluaXRfZ2xvYmFsLAorICIiLAorIHZvaWQsIChGSUxFICpmaWxlLCBpbnQgdmVyYm9zZSwgaW50IG9sZF9tYXhfdWlkKSwgTlVMTCkKKworLyogRmluYWxpemUgbWFjaGluZS1kZXBlbmRlbnQgZnVuY3Rpb24gd2lkZSBzY2hlZHVsaW5nIGNvZGUuICAqLworREVGSE9PSworKGZpbmlzaF9nbG9iYWwsCisgIiIsCisgdm9pZCwgKEZJTEUgKmZpbGUsIGludCB2ZXJib3NlKSwgTlVMTCkKKworLyogUmVvcmRlciBpbnNucyBpbiBhIG1hY2hpbmUtZGVwZW5kZW50IGZhc2hpb24sIGluIHR3byBkaWZmZXJlbnQKKyAgICAgICBwbGFjZXMuICBEZWZhdWx0IGRvZXMgbm90aGluZy4gICovCitERUZIT09LCisocmVvcmRlciwKKyAiIiwKKyBpbnQsIChGSUxFICpmaWxlLCBpbnQgdmVyYm9zZSwgcnR4ICpyZWFkeSwgaW50ICpuX3JlYWR5cCwgaW50IGNsb2NrKSwgTlVMTCkKKworREVGSE9PSworKHJlb3JkZXIyLAorICIiLAorIGludCwgKEZJTEUgKmZpbGUsIGludCB2ZXJib3NlLCBydHggKnJlYWR5LCBpbnQgKm5fcmVhZHlwLCBpbnQgY2xvY2spLCBOVUxMKQorCisvKiBUaGUgZm9sbG93aW5nIG1lbWJlciB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQKKyAgIGFmdGVyIGV2YWx1YXRpb24gZm9yd2FyZCBkZXBlbmRlbmNpZXMgb2YgaW5zbnMgaW4gY2hhaW4gZ2l2ZW4KKyAgIGJ5IHR3byBwYXJhbWV0ZXIgdmFsdWVzIChoZWFkIGFuZCB0YWlsIGNvcnJlc3BvbmRpbmdseSkuICAqLworREVGSE9PSworKGRlcGVuZGVuY2llc19ldmFsdWF0aW9uX2hvb2ssCisgIiIsCisgdm9pZCwgKHJ0eCBoZWFkLCBydHggdGFpbCksIE5VTEwpCisKKy8qIFRoZSB2YWx1ZXMgb2YgdGhlIGZvbGxvd2luZyBmb3VyIG1lbWJlcnMgYXJlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucworICAgdXNlZCB0byBzaW1wbGlmeSB0aGUgYXV0b21hdG9uIGRlc2NyaXB0aW9ucy4gIGRmYV9wcmVfY3ljbGVfaW5zbiBhbmQKKyAgIGRmYV9wb3N0X2N5Y2xlX2luc24gZ2l2ZSBmdW5jdGlvbnMgcmV0dXJuaW5nIGluc25zIHdoaWNoIGFyZSB1c2VkIHRvCisgICBjaGFuZ2UgdGhlIHBpcGVsaW5lIGhhemFyZCByZWNvZ25pemVyIHN0YXRlIHdoZW4gdGhlIG5ldyBzaW11bGF0ZWQKKyAgIHByb2Nlc3NvciBjeWNsZSBjb3JyZXNwb25kaW5nbHkgc3RhcnRzIGFuZCBmaW5pc2hlcy4gIFRoZSBmdW5jdGlvbgorICAgZGVmaW5lZCBieSBpbml0X2RmYV9wcmVfY3ljbGVfaW5zbiBhbmQgaW5pdF9kZmFfcG9zdF9jeWNsZV9pbnNuIGFyZQorICAgdXNlZCB0byBpbml0aWFsaXplIHRoZSBjb3JyZXNwb25kaW5nIGluc25zLiAgVGhlIGRlZmF1bHQgdmFsdWVzIG9mCisgICB0aGUgbWVtYmVycyByZXN1bHQgaW4gbm90IGNoYW5naW5nIHRoZSBhdXRvbWF0b24gc3RhdGUgd2hlbiB0aGUKKyAgIG5ldyBzaW11bGF0ZWQgcHJvY2Vzc29yIGN5Y2xlIGNvcnJlc3BvbmRpbmdseSBzdGFydHMgYW5kIGZpbmlzaGVzLiAgKi8KKworREVGSE9PSworKGluaXRfZGZhX3ByZV9jeWNsZV9pbnNuLAorICIiLAorIHZvaWQsICh2b2lkKSwgTlVMTCkKKworREVGSE9PSworKGRmYV9wcmVfY3ljbGVfaW5zbiwKKyAiIiwKKyBydHgsICh2b2lkKSwgTlVMTCkKKworREVGSE9PSworKGluaXRfZGZhX3Bvc3RfY3ljbGVfaW5zbiwKKyAiIiwKKyB2b2lkLCAodm9pZCksIE5VTEwpCisKK0RFRkhPT0sKKyhkZmFfcG9zdF9jeWNsZV9pbnNuLAorICIiLAorIHJ0eCwgKHZvaWQpLCBOVUxMKQorCisvKiBUaGUgdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcgdHdvIG1lbWJlcnMgYXJlIHBvaW50ZXJzIHRvCisgICBmdW5jdGlvbnMgdXNlZCB0byBzaW1wbGlmeSB0aGUgYXV0b21hdG9uIGRlc2NyaXB0aW9ucy4KKyAgIGRmYV9wcmVfYWR2YW5jZV9jeWNsZSBhbmQgZGZhX3Bvc3RfYWR2YW5jZV9jeWNsZSBhcmUgZ2V0dGluZyBjYWxsZWQKKyAgIGltbWVkaWF0ZWx5IGJlZm9yZSBhbmQgYWZ0ZXIgY3ljbGUgaXMgYWR2YW5jZWQuICAqLworCitERUZIT09LCisoZGZhX3ByZV9hZHZhbmNlX2N5Y2xlLAorICIiLAorIHZvaWQsICh2b2lkKSwgTlVMTCkKKworREVGSE9PSworKGRmYV9wb3N0X2FkdmFuY2VfY3ljbGUsCisgIiIsCisgdm9pZCwgKHZvaWQpLCBOVUxMKQorCisvKiBUaGUgZm9sbG93aW5nIG1lbWJlciB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiByZXR1cm5pbmcgdmFsdWUKKyAgIHdoaWNoIGRlZmluZXMgaG93IG1hbnkgaW5zbnMgaW4gcXVldWUgYHJlYWR5JyB3aWxsIHdlIHRyeSBmb3IKKyAgIG11bHRpLXBhc3Mgc2NoZWR1bGluZy4gIElmIHRoZSBtZW1iZXIgdmFsdWUgaXMgbm9uemVybyBhbmQgdGhlCisgICBmdW5jdGlvbiByZXR1cm5zIHBvc2l0aXZlIHZhbHVlLCB0aGUgREZBIGJhc2VkIHNjaGVkdWxlciB3aWxsIG1ha2UKKyAgIG11bHRpLXBhc3Mgc2NoZWR1bGluZyBmb3IgdGhlIGZpcnN0IGN5Y2xlLiAgSW4gb3RoZXIgd29yZHMsIHdlIHdpbGwKKyAgIHRyeSB0byBjaG9vc2UgcmVhZHkgaW5zbiB3aGljaCBwZXJtaXRzIHRvIHN0YXJ0IG1heGltdW0gbnVtYmVyIG9mCisgICBpbnNucyBvbiB0aGUgc2FtZSBjeWNsZS4gICovCitERUZIT09LCisoZmlyc3RfY3ljbGVfbXVsdGlwYXNzX2RmYV9sb29rYWhlYWQsCisgIiIsCisgaW50LCAodm9pZCksIE5VTEwpCisKKy8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjb250cm9sbGluZworICAgd2hhdCBpbnNucyBmcm9tIHRoZSByZWFkeSBpbnNuIHF1ZXVlIHdpbGwgYmUgY29uc2lkZXJlZCBmb3IgdGhlCisgICBtdWx0aXBhc3MgaW5zbiBzY2hlZHVsaW5nLiAgSWYgdGhlIGhvb2sgcmV0dXJucyB6ZXJvIGZvciBpbnNuCisgICBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlciwgdGhlIGluc24gd2lsbCBiZSBub3QgY2hvc2VuIHRvIGJlIGlzc3VlZC4gICovCitERUZIT09LCisoZmlyc3RfY3ljbGVfbXVsdGlwYXNzX2RmYV9sb29rYWhlYWRfZ3VhcmQsCisgIiIsCisgaW50LCAocnR4IGluc24pLCBOVUxMKQorCisvKiBUaGlzIGhvb2sgcHJlcGFyZXMgdGhlIHRhcmdldCBmb3IgYSBuZXcgcm91bmQgb2YgbXVsdGlwYXNzCisgICBzY2hlZHVsaW5nLgorICAgREFUQSBpcyBhIHBvaW50ZXIgdG8gdGFyZ2V0LXNwZWNpZmljIGRhdGEgdXNlZCBmb3IgbXVsdGlwYXNzIHNjaGVkdWxpbmcuCisgICBSRUFEWV9UUlkgYW5kIE5fUkVBRFkgcmVwcmVzZW50IHRoZSBjdXJyZW50IHN0YXRlIG9mIHNlYXJjaCBpbiB0aGUKKyAgIG9wdGltaXphdGlvbiBzcGFjZS4gIFRoZSB0YXJnZXQgY2FuIGZpbHRlciBvdXQgaW5zdHJ1Y3Rpb25zIHRoYXQKKyAgIHNob3VsZCBub3QgYmUgdHJpZWQgZHVyaW5nIGN1cnJlbnQgcm91bmQgYnkgc2V0dGluZyBjb3JyZXNwb25kaW5nCisgICBlbGVtZW50cyBpbiBSRUFEWV9UUlkgdG8gbm9uLXplcm8uCisgICBGSVJTVF9DWUNMRV9JTlNOX1AgaXMgdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCByb3VuZCBvZiBtdWx0aXBhc3MKKyAgIHNjaGVkdWxpbmcgb24gY3VycmVudCBjeWNsZS4gICovCitERUZIT09LCisoZmlyc3RfY3ljbGVfbXVsdGlwYXNzX2JlZ2luLAorICIiLAorIHZvaWQsICh2b2lkICpkYXRhLCBjaGFyICpyZWFkeV90cnksIGludCBuX3JlYWR5LCBib29sIGZpcnN0X2N5Y2xlX2luc25fcCksCisgTlVMTCkKKworLyogVGhpcyBob29rIGlzIGNhbGxlZCB3aGVuIG11bHRpcGFzcyBzY2hlZHVsaW5nIGV2YWx1YXRlcyBpbnN0cnVjdGlvbiBJTlNOLgorICAgREFUQSBpcyBhIHBvaW50ZXIgdG8gdGFyZ2V0LXNwZWNpZmljIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB0byByZWNvcmQgZWZmZWN0cworICAgb2YgSU5TTiBvbiBDUFUgdGhhdCBhcmUgbm90IGRlc2NyaWJlZCBpbiBERkEuCisgICBSRUFEWV9UUlkgYW5kIE5fUkVBRFkgcmVwcmVzZW50IHRoZSBjdXJyZW50IHN0YXRlIG9mIHNlYXJjaCBpbiB0aGUKKyAgIG9wdGltaXphdGlvbiBzcGFjZS4gIFRoZSB0YXJnZXQgY2FuIGZpbHRlciBvdXQgaW5zdHJ1Y3Rpb25zIHRoYXQKKyAgIHNob3VsZCBub3QgYmUgdHJpZWQgYWZ0ZXIgaXNzdWluZyBJTlNOIGJ5IHNldHRpbmcgY29ycmVzcG9uZGluZworICAgZWxlbWVudHMgaW4gUkVBRFlfVFJZIHRvIG5vbi16ZXJvLgorICAgSU5TTiBpcyB0aGUgaW5zdHJ1Y3Rpb24gYmVpbmcgZXZhbHVhdGVkLgorICAgUFJFVl9EQVRBIGlzIGEgcG9pbnRlciB0byB0YXJnZXQtc3BlY2lmaWMgZGF0YSBjb3JyZXNwb25kaW5nCisgICB0byBhIHN0YXRlIGJlZm9yZSBpc3N1aW5nIElOU04uICAqLworREVGSE9PSworKGZpcnN0X2N5Y2xlX211bHRpcGFzc19pc3N1ZSwKKyAiIiwKKyB2b2lkLCAodm9pZCAqZGF0YSwgY2hhciAqcmVhZHlfdHJ5LCBpbnQgbl9yZWFkeSwgcnR4IGluc24sCisJY29uc3Qgdm9pZCAqcHJldl9kYXRhKSwgTlVMTCkKKworLyogVGhpcyBob29rIGlzIGNhbGxlZCB3aGVuIG11bHRpcGFzcyBzY2hlZHVsaW5nIGJhY2t0cmFja3MgZnJvbSBldmFsdWF0aW9uIG9mCisgICBpbnN0cnVjdGlvbiBjb3JyZXNwb25kaW5nIHRvIERBVEEuCisgICBEQVRBIGlzIGEgcG9pbnRlciB0byB0YXJnZXQtc3BlY2lmaWMgZGF0YSB0aGF0IHN0b3JlcyB0aGUgZWZmZWN0cworICAgb2YgaW5zdHJ1Y3Rpb24gZnJvbSB3aGljaCB0aGUgYWxnb3JpdGhtIGJhY2t0cmFja3Mgb24gQ1BVIHRoYXQgYXJlIG5vdAorICAgZGVzY3JpYmVkIGluIERGQS4KKyAgIFJFQURZX1RSWSBhbmQgTl9SRUFEWSByZXByZXNlbnQgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2VhcmNoIGluIHRoZQorICAgb3B0aW1pemF0aW9uIHNwYWNlLiAgVGhlIHRhcmdldCBjYW4gZmlsdGVyIG91dCBpbnN0cnVjdGlvbnMgdGhhdAorICAgc2hvdWxkIG5vdCBiZSB0cmllZCBhZnRlciBpc3N1aW5nIElOU04gYnkgc2V0dGluZyBjb3JyZXNwb25kaW5nCisgICBlbGVtZW50cyBpbiBSRUFEWV9UUlkgdG8gbm9uLXplcm8uICAqLworREVGSE9PSworKGZpcnN0X2N5Y2xlX211bHRpcGFzc19iYWNrdHJhY2ssCisgIiIsCisgdm9pZCwgKGNvbnN0IHZvaWQgKmRhdGEsIGNoYXIgKnJlYWR5X3RyeSwgaW50IG5fcmVhZHkpLCBOVUxMKQorCisvKiBUaGlzIGhvb2sgbm90aWZpZXMgdGhlIHRhcmdldCBhYm91dCB0aGUgcmVzdWx0IG9mIHRoZSBjb25jbHVkZWQgY3VycmVudAorICAgcm91bmQgb2YgbXVsdGlwYXNzIHNjaGVkdWxpbmcuCisgICBEQVRBIGlzIGEgcG9pbnRlci4KKyAgIElmIERBVEEgaXMgbm9uLU5VTEwgaXQgcG9pbnRzIHRvIHRhcmdldC1zcGVjaWZpYyBkYXRhIHVzZWQgZm9yIG11bHRpcGFzcworICAgc2NoZWR1bGluZyB3aGljaCBjb3JyZXNwb25kcyB0byBpbnN0cnVjdGlvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIGNoYWluIG9mCisgICB0aGUgd2lubmluZyBzb2x1dGlvbi4gIERBVEEgaXMgTlVMTCB3aGVuIG11bHRpcGFzcyBzY2hlZHVsaW5nIGNhbm5vdCBmaW5kCisgICBhIGdvb2QgZW5vdWdoIHNvbHV0aW9uIG9uIGN1cnJlbnQgY3ljbGUgYW5kIGRlY2lkZXMgdG8gcmV0cnkgbGF0ZXIsCisgICB1c3VhbGx5IGFmdGVyIGFkdmFuY2luZyB0aGUgY3ljbGUgY291bnQuICAqLworREVGSE9PSworKGZpcnN0X2N5Y2xlX211bHRpcGFzc19lbmQsCisgIiIsCisgdm9pZCwgKGNvbnN0IHZvaWQgKmRhdGEpLCBOVUxMKQorCisvKiBUaGlzIGhvb2sgaXMgY2FsbGVkIHRvIGluaXRpYWxpemUgdGFyZ2V0LXNwZWNpZmljIGRhdGEgZm9yIG11bHRpcGFzcworICAgc2NoZWR1bGluZyBhZnRlciBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQuCisgICBEQVRBIGlzIGEgcG9pbnRlciB0byB0YXJnZXQtc3BlY2lmaWMgZGF0YSB0aGF0IHN0b3JlcyB0aGUgZWZmZWN0cworICAgb2YgaW5zdHJ1Y3Rpb24gZnJvbSB3aGljaCB0aGUgYWxnb3JpdGhtIGJhY2t0cmFja3Mgb24gQ1BVIHRoYXQgYXJlIG5vdAorICAgZGVzY3JpYmVkIGluIERGQS4gICovCitERUZIT09LCisoZmlyc3RfY3ljbGVfbXVsdGlwYXNzX2luaXQsCisgIiIsCisgdm9pZCwgKHZvaWQgKmRhdGEpLCBOVUxMKQorCisvKiBUaGlzIGhvb2sgaXMgY2FsbGVkIHRvIGZpbmFsaXplIHRhcmdldC1zcGVjaWZpYyBkYXRhIGZvciBtdWx0aXBhc3MKKyAgIHNjaGVkdWxpbmcgYmVmb3JlIGl0IGlzIGRlYWxsb2NhdGVkLgorICAgREFUQSBpcyBhIHBvaW50ZXIgdG8gdGFyZ2V0LXNwZWNpZmljIGRhdGEgdGhhdCBzdG9yZXMgdGhlIGVmZmVjdHMKKyAgIG9mIGluc3RydWN0aW9uIGZyb20gd2hpY2ggdGhlIGFsZ29yaXRobSBiYWNrdHJhY2tzIG9uIENQVSB0aGF0IGFyZSBub3QKKyAgIGRlc2NyaWJlZCBpbiBERkEuICAqLworREVGSE9PSworKGZpcnN0X2N5Y2xlX211bHRpcGFzc19maW5pLAorICIiLAorIHZvaWQsICh2b2lkICpkYXRhKSwgTlVMTCkKKworLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFsdWUgaXMgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZCBieQorICAgdGhlIGluc24gc2NoZWR1bGVyIGJlZm9yZSBpc3N1aW5nIGluc24gcGFzc2VkIGFzIHRoZSB0aGlyZAorICAgcGFyYW1ldGVyIG9uIGdpdmVuIGN5Y2xlLiAgSWYgdGhlIGhvb2sgcmV0dXJucyBub256ZXJvLCB0aGUKKyAgIGluc24gaXMgbm90IGlzc3VlZCBvbiBnaXZlbiBwcm9jZXNzb3JzIGN5Y2xlLiAgSW5zdGVhZCBvZiB0aGF0LAorICAgdGhlIHByb2Nlc3NvciBjeWNsZSBpcyBhZHZhbmNlZC4gIElmIHRoZSB2YWx1ZSBwYXNzZWQgdGhyb3VnaAorICAgdGhlIGxhc3QgcGFyYW1ldGVyIGlzIHplcm8sIHRoZSBpbnNuIHJlYWR5IHF1ZXVlIGlzIG5vdCBzb3J0ZWQKKyAgIG9uIHRoZSBuZXcgY3ljbGUgc3RhcnQgYXMgdXN1YWxseS4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgcGFzc2VzCisgICBmaWxlIGZvciBkZWJ1Z2dpbmcgb3V0cHV0LiAgVGhlIHNlY29uZCBvbmUgcGFzc2VzIHRoZSBzY2hlZHVsZXIKKyAgIHZlcmJvc2UgbGV2ZWwgb2YgdGhlIGRlYnVnZ2luZyBvdXRwdXQuICBUaGUgZm9ydGggYW5kIHRoZSBmaWZ0aAorICAgcGFyYW1ldGVyIHZhbHVlcyBhcmUgY29ycmVzcG9uZGluZ2x5IHByb2Nlc3NvciBjeWNsZSBvbiB3aGljaAorICAgdGhlIHByZXZpb3VzIGluc24gaGFzIGJlZW4gaXNzdWVkIGFuZCB0aGUgY3VycmVudCBwcm9jZXNzb3IgY3ljbGUuICAqLworREVGSE9PSworKGRmYV9uZXdfY3ljbGUsCisgIiIsCisgaW50LCAoRklMRSAqZHVtcCwgaW50IHZlcmJvc2UsIHJ0eCBpbnNuLCBpbnQgbGFzdF9jbG9jaywKKyAgICAgICBpbnQgY2xvY2ssIGludCAqc29ydF9wKSwKKyBOVUxMKQorCisvKiBUaGUgZm9sbG93aW5nIG1lbWJlciB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlCisgICBpbnNuIHNjaGVkdWxlci4gIEl0IHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBleGlzdHMgYSBkZXBlbmRlbmNlCisgICB3aGljaCBpcyBjb25zaWRlcmVkIGNvc3RseSBieSB0aGUgdGFyZ2V0LCBiZXR3ZWVuIHRoZSBpbnNuCisgICBERVBfUFJPICgmX0RFUCksIGFuZCB0aGUgaW5zbiBERVBfQ09OICgmX0RFUCkuICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzCisgICB0aGUgZGVwIHRoYXQgcmVwcmVzZW50cyB0aGUgZGVwZW5kZW5jZSBiZXR3ZWVuIHRoZSB0d28gaW5zbnMuICBUaGUKKyAgIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY29zdCBvZiB0aGUgZGVwZW5kZW5jZSBhcyBlc3RpbWF0ZWQgYnkKKyAgIHRoZSBzY2hlZHVsZXIuICBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgZGlzdGFuY2UgaW4gY3ljbGVzCisgICBiZXR3ZWVuIHRoZSBhbHJlYWR5IHNjaGVkdWxlZCBpbnNuIChmaXJzdCBwYXJhbWV0ZXIpIGFuZCB0aGUKKyAgIHNlY29uZCBpbnNuIChzZWNvbmQgcGFyYW1ldGVyKS4gICovCitERUZIT09LCisoaXNfY29zdGx5X2RlcGVuZGVuY2UsCisgIiIsCisgYm9vbCwgKHN0cnVjdCBfZGVwICpfZGVwLCBpbnQgY29zdCwgaW50IGRpc3RhbmNlKSwgTlVMTCkKKworREVGSE9PS19VTkRPQworKGFkanVzdF9jb3N0XzIsCisgIkdpdmVuIHRoZSBjdXJyZW50IGNvc3QsIEB2YXJ7Y29zdH0sIG9mIGFuIGluc24sIEB2YXJ7aW5zbn0sIGNhbGN1bGF0ZSBhbmRcCisgcmV0dXJuIGEgbmV3IGNvc3QgYmFzZWQgb24gaXRzIHJlbGF0aW9uc2hpcCB0byBAdmFye2RlcF9pbnNufSB0aHJvdWdoIHRoZVwKKyBkZXBlbmRlbmNlIG9mIHdlYWtuZXNzIEB2YXJ7ZHd9LiAgVGhlIGRlZmF1bHQgaXMgdG8gbWFrZSBubyBhZGp1c3RtZW50LiIsCisgaW50LCAocnR4IGluc24sIGludCBkZXBfdHlwZTEsIHJ0eCBkZXBfaW5zbiwgaW50IGNvc3QsIGludCBkdyksIE5VTEwpCisKKy8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZAorICAgYnkgdGhlIGluc24gc2NoZWR1bGVyLiBUaGlzIGhvb2sgaXMgY2FsbGVkIHRvIG5vdGlmeSB0aGUgYmFja2VuZAorICAgdGhhdCBuZXcgaW5zdHJ1Y3Rpb25zIHdlcmUgZW1pdHRlZC4gICovCitERUZIT09LCisoaF9pX2RfZXh0ZW5kZWQsCisgIiIsCisgdm9pZCwgKHZvaWQpLCBOVUxMKQorCisvKiBOZXh0IDUgZnVuY3Rpb25zIGFyZSBmb3IgbXVsdGktcG9pbnQgc2NoZWR1bGluZy4gICovCisKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igc2NoZWR1bGVyIGNvbnRleHQuICAqLworREVGSE9PSworKGFsbG9jX3NjaGVkX2NvbnRleHQsCisgIiIsCisgdm9pZCAqLCAodm9pZCksIE5VTEwpCisKKy8qIEZpbGxzIHRoZSBjb250ZXh0IGZyb20gdGhlIGxvY2FsIG1hY2hpbmUgc2NoZWR1bGVyIGNvbnRleHQuICAqLworREVGSE9PSworKGluaXRfc2NoZWRfY29udGV4dCwKKyAiIiwKKyB2b2lkLCAodm9pZCAqdGMsIGJvb2wgY2xlYW5fcCksIE5VTEwpCisKKy8qIFNldHMgbG9jYWwgbWFjaGluZSBzY2hlZHVsZXIgY29udGV4dCB0byBhIHNhdmVkIHZhbHVlLiAgKi8KK0RFRkhPT0sKKyhzZXRfc2NoZWRfY29udGV4dCwKKyAiIiwKKyB2b2lkLCAodm9pZCAqdGMpLCBOVUxMKQorCisvKiBDbGVhcnMgYSBzY2hlZHVsZXIgY29udGV4dCBzbyBpdCBiZWNvbWVzIGxpa2UgYWZ0ZXIgaW5pdC4gICovCitERUZIT09LCisoY2xlYXJfc2NoZWRfY29udGV4dCwKKyAiIiwKKyB2b2lkLCAodm9pZCAqdGMpLCBOVUxMKQorCisvKiBGcmVlcyB0aGUgc2NoZWR1bGVyIGNvbnRleHQuICAqLworREVGSE9PSworKGZyZWVfc2NoZWRfY29udGV4dCwKKyAiIiwKKyB2b2lkLCAodm9pZCAqdGMpLCBOVUxMKQorCisvKiBUaGUgZm9sbG93aW5nIG1lbWJlciB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQKKyAgIGJ5IHRoZSBpbnNuIHNjaGVkdWxlci4KKyAgIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYW4gaW5zdHJ1Y3Rpb24sIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSB0eXBlCisgICBvZiB0aGUgcmVxdWVzdGVkIHNwZWN1bGF0aW9uLCBhbmQgdGhlIHRoaXJkIHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gdGhlCisgICBzcGVjdWxhdGl2ZSBwYXR0ZXJuIG9mIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgKHNldCBpZiByZXR1cm4gdmFsdWUgPT0gMSkuCisgICBJdCBzaG91bGQgcmV0dXJuCisgICAtMSwgaWYgdGhlcmUgaXMgbm8gcGF0dGVybiwgdGhhdCB3aWxsIHNhdGlzZnkgdGhlIHJlcXVlc3RlZCBzcGVjdWxhdGlvbiB0eXBlLAorICAgMCwgaWYgY3VycmVudCBwYXR0ZXJuIHNhdGlzZmllcyB0aGUgcmVxdWVzdGVkIHNwZWN1bGF0aW9uIHR5cGUsCisgICAxLCBpZiBwYXR0ZXJuIG9mIHRoZSBpbnN0cnVjdGlvbiBzaG91bGQgYmUgY2hhbmdlZCB0byB0aGUgbmV3bHkKKyAgIGdlbmVyYXRlZCBvbmUuICAqLworREVGSE9PSworKHNwZWN1bGF0ZV9pbnNuLAorICIiLAorIGludCwgKHJ0eCBpbnNuLCBpbnQgcmVxdWVzdCwgcnR4ICpuZXdfcGF0KSwgTlVMTCkKKworLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY2FsbGVkCisgICBieSB0aGUgaW5zbiBzY2hlZHVsZXIuICBJdCBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIGNoZWNrIGluc3RydWN0aW9uCisgICBwYXNzZWQgYXMgdGhlIHBhcmFtZXRlciBuZWVkcyBhIHJlY292ZXJ5IGJsb2NrLiAgKi8KK0RFRkhPT0sKKyhuZWVkc19ibG9ja19wLAorICIiLAorIGJvb2wsIChpbnQgZGVwX3N0YXR1cyksIE5VTEwpCisKKy8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZAorICAgYnkgdGhlIGluc24gc2NoZWR1bGVyLiAgSXQgc2hvdWxkIHJldHVybiBhIHBhdHRlcm4gZm9yIHRoZSBjaGVjaworICAgaW5zdHJ1Y3Rpb24uCisgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb24sIHRoZSBzZWNvbmQgcGFyYW1ldGVyCisgICBpcyB0aGUgbGFiZWwgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcmVjb3ZlcnkgYmxvY2sgKG9yIG51bGwsIGlmIGl0IGlzIGEKKyAgIHNpbXBsZSBjaGVjaykuICBJZiB0aGUgbXV0YXRpb24gb2YgdGhlIGNoZWNrIGlzIHJlcXVlc3RlZCAoZS5nLiBmcm9tCisgICBsZC5jIHRvIGNoay5hKSwgdGhlIHRoaXJkIHBhcmFtZXRlciBpcyB0cnVlIC0gaW4gdGhpcyBjYXNlIHRoZSBmaXJzdAorICAgcGFyYW1ldGVyIGlzIHRoZSBwcmV2aW91cyBjaGVjay4gICovCitERUZIT09LCisoZ2VuX3NwZWNfY2hlY2ssCisgIiIsCisgcnR4LCAocnR4IGluc24sIHJ0eCBsYWJlbCwgaW50IG11dGF0ZV9wKSwgTlVMTCkKKworLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gY29udHJvbGxpbmcKKyAgIHdoYXQgaW5zbnMgZnJvbSB0aGUgcmVhZHkgaW5zbiBxdWV1ZSB3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIHRoZQorICAgbXVsdGlwYXNzIGluc24gc2NoZWR1bGluZy4gIElmIHRoZSBob29rIHJldHVybnMgemVybyBmb3IgdGhlIGluc24KKyAgIHBhc3NlZCBhcyB0aGUgcGFyYW1ldGVyLCB0aGUgaW5zbiB3aWxsIG5vdCBiZSBjaG9zZW4gdG8gYmUKKyAgIGlzc3VlZC4gIFRoaXMgaG9vayBpcyB1c2VkIHRvIGRpc2NhcmQgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb25zLAorICAgdGhhdCBzdGFuZCBhdCB0aGUgZmlyc3QgcG9zaXRpb24gb2YgdGhlIHJlYWR5IGxpc3QuICAqLworREVGSE9PSworKGZpcnN0X2N5Y2xlX211bHRpcGFzc19kZmFfbG9va2FoZWFkX2d1YXJkX3NwZWMsCisgIiIsCisgYm9vbCwgKGNvbnN0X3J0eCBpbnNuKSwgTlVMTCkKKworLyogVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcworICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWN1bGF0aW9uIGNhcGFiaWxpdGllcyBvZiB0aGUgdGFyZ2V0LgorICAgVGhlIHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gc3BlY19pbmZvIHZhcmlhYmxlLiAgKi8KK0RFRkhPT0sKKyhzZXRfc2NoZWRfZmxhZ3MsCisgIiIsCisgdm9pZCwgKHN0cnVjdCBzcGVjX2luZm9fZGVmICpzcGVjX2luZm8pLCBOVUxMKQorCitERUZIT09LX1VORE9DCisoZ2V0X2luc25fc3BlY19kcywKKyAiUmV0dXJuIHNwZWN1bGF0aW9uIHR5cGVzIG9mIGluc3RydWN0aW9uIEB2YXJ7aW5zbn0uIiwKKyBpbnQsIChydHggaW5zbiksIE5VTEwpCisKK0RFRkhPT0tfVU5ET0MKKyhnZXRfaW5zbl9jaGVja2VkX2RzLAorICJSZXR1cm4gc3BlY3VsYXRpb24gdHlwZXMgdGhhdCBhcmUgY2hlY2tlZCBmb3IgaW5zdHJ1Y3Rpb24gQHZhcntpbnNufSIsCisgaW50LCAocnR4IGluc24pLCBOVUxMKQorCitERUZIT09LX1VORE9DCisoc2tpcF9ydHhfcCwKKyAiUmV0dXJuIGJvb2wgaWYgcnR4IHNjYW5uaW5nIHNob3VsZCBqdXN0IHNraXAgY3VycmVudCBsYXllciBhbmRcCisgYWR2YW5jZSB0byB0aGUgaW5uZXIgcnR4ZXMuIiwKKyBib29sLCAoY29uc3RfcnR4IHgpLCBOVUxMKQorCisvKiBUaGUgZm9sbG93aW5nIG1lbWJlciB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzCisgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IHJlc291cmNlLWJhc2VkIGxvd2VyIGJvdW5kIHdoaWNoIGlzCisgICB1c2VkIGJ5IHRoZSBzd2luZyBtb2R1bG8gc2NoZWR1bGVyLiAgVGhlIHBhcmFtZXRlciBpcyBhIHBvaW50ZXIKKyAgIHRvIGRkZyB2YXJpYWJsZS4gICovCitERUZIT09LCisoc21zX3Jlc19taWksCisgIiIsCisgaW50LCAoc3RydWN0IGRkZyAqZyksIE5VTEwpCisKKy8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyBkaXNwYXRjaAorICAgc2NoZWRsaW5nIGFuZCBhZGRzIGluc3RydWN0aW9ucyB0byBkaXNwYXRjaCB3aW5kb3cgYWNjb3JkaW5nIHRvIGl0cworICAgcGFyYW1ldGVycy4gICovCitERUZIT09LCisoZGlzcGF0Y2hfZG8sCisiIiwKK3ZvaWQsIChydHggaW5zbiwgaW50IHgpLAoraG9va192b2lkX3J0eF9pbnQpCisKKy8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpcworICAgZGlzcGF0Y2ggc2NoZWRsaW5nIGlzIHN1cHBvcnRlZCBpbiBoYXJkd2FyZSBhbmQgY29uZGl0aW9uIHBhc3NlZAorICAgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZS4gICovCitERUZIT09LCisoZGlzcGF0Y2gsCisiIiwKK2Jvb2wsIChydHggaW5zbiwgaW50IHgpLAoraG9va19ib29sX3J0eF9pbnRfZmFsc2UpCisKK0RFRkhPT0tQT0QKKyhleHBvc2VkX3BpcGVsaW5lLAorIlRydWUgaWYgdGhlIHByb2Nlc3NvciBoYXMgYW4gZXhwb3NlZCBwaXBlbGluZSwgd2hpY2ggbWVhbnMgdGhhdCBub3QganVzdFxuXAordGhlIG9yZGVyIG9mIGluc3RydWN0aW9ucyBpcyBpbXBvcnRhbnQgZm9yIGNvcnJlY3RuZXNzIHdoZW4gc2NoZWR1bGluZywgYnV0XG5cCithbHNvIHRoZSBsYXRlbmNpZXMgb2Ygb3BlcmF0aW9ucy4iLAorYm9vbCwgZmFsc2UpCisKKy8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG51bWJlcgorICAgb2Ygb3BlcmF0aW9ucyByZWFzc29jaWF0b3Igc2hvdWxkIHRyeSB0byBwdXQgaW4gcGFyYWxsZWwgZm9yCisgICBzdGF0ZW1lbnRzIG9mIHRoZSBnaXZlbiB0eXBlLiAgQnkgZGVmYXVsdCAxIGlzIHVzZWQuICAqLworREVGSE9PSworKHJlYXNzb2NpYXRpb25fd2lkdGgsCisiVGhpcyBob29rIGlzIGNhbGxlZCBieSB0cmVlIHJlYXNzb2NpYXRvciB0byBkZXRlcm1pbmUgYSBsZXZlbCBvZlxuXAorcGFyYWxsZWxpc20gcmVxdWlyZWQgaW4gb3V0cHV0IGNhbGN1bGF0aW9ucyBjaGFpbi4iLAoraW50LCAodW5zaWduZWQgaW50IG9wYywgZW51bSBtYWNoaW5lX21vZGUgbW9kZSksCitob29rX2ludF91aW50X21vZGVfMSkKKworSE9PS19WRUNUT1JfRU5EIChzY2hlZCkKKworLyogRnVuY3Rpb25zIHJlbGF0aW5nIHRvIHZlY3Rvcml6YXRpb24uICAqLworI3VuZGVmIEhPT0tfUFJFRklYCisjZGVmaW5lIEhPT0tfUFJFRklYICJUQVJHRVRfVkVDVE9SSVpFXyIKK0hPT0tfVkVDVE9SIChUQVJHRVRfVkVDVE9SSVpFLCB2ZWN0b3JpemUpCisKKy8qIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGNhbGxlZAorICAgYnkgdGhlIHZlY3Rvcml6ZXIsIGFuZCByZXR1cm4gdGhlIGRlY2wgb2YgdGhlIHRhcmdldCBidWlsdGluCisgICBmdW5jdGlvbi4gICovCitERUZIT09LCisoYnVpbHRpbl9tYXNrX2Zvcl9sb2FkLAorICIiLAorIHRyZWUsICh2b2lkKSwgTlVMTCkKKworLyogUmV0dXJucyBhIGNvZGUgZm9yIGJ1aWx0aW4gdGhhdCByZWFsaXplcyB2ZWN0b3JpemVkIHZlcnNpb24gb2YKKyAgIGZ1bmN0aW9uLCBvciBOVUxMX1RSRUUgaWYgbm90IGF2YWlsYWJsZS4gICovCitERUZIT09LCisoYnVpbHRpbl92ZWN0b3JpemVkX2Z1bmN0aW9uLAorICIiLAorIHRyZWUsICh0cmVlIGZuZGVjbCwgdHJlZSB2ZWNfdHlwZV9vdXQsIHRyZWUgdmVjX3R5cGVfaW4pLAorIGRlZmF1bHRfYnVpbHRpbl92ZWN0b3JpemVkX2Z1bmN0aW9uKQorCisvKiBSZXR1cm5zIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9yIGEgYnVpbHRpbiB0aGF0IHJlYWxpemVzIHRoZQorICAgdmVjdG9yIGNvbnZlcnNpb24sIG9yIE5VTExfVFJFRSBpZiBub3QgYXZhaWxhYmxlLiAgKi8KK0RFRkhPT0sKKyhidWlsdGluX2NvbnZlcnNpb24sCisgIiIsCisgdHJlZSwgKHVuc2lnbmVkIGNvZGUsIHRyZWUgZGVzdF90eXBlLCB0cmVlIHNyY190eXBlKSwKKyBkZWZhdWx0X2J1aWx0aW5fdmVjdG9yaXplZF9jb252ZXJzaW9uKQorCisvKiBDb3N0IG9mIGRpZmZlcmVudCB2ZWN0b3Ivc2NhbGFyIHN0YXRlbWVudHMgaW4gdmVjdG9yaXphdGlvbiBjb3N0CisgICBtb2RlbC4gSW4gY2FzZSBvZiBtaXNhbGlnbmVkIHZlY3RvciBsb2FkcyBhbmQgc3RvcmVzIHRoZSBjb3N0IGRlcGVuZHMKKyAgIG9uIHRoZSBkYXRhIHR5cGUgYW5kIG1pc2FsaWdubWVudCB2YWx1ZS4gICovCitERUZIT09LCisoYnVpbHRpbl92ZWN0b3JpemF0aW9uX2Nvc3QsCisgIiIsCisgaW50LCAoZW51bSB2ZWN0X2Nvc3RfZm9yX3N0bXQgdHlwZV9vZl9jb3N0LCB0cmVlIHZlY3R5cGUsIGludCBtaXNhbGlnbiksCisgZGVmYXVsdF9idWlsdGluX3ZlY3Rvcml6YXRpb25fY29zdCkKKworLyogUmV0dXJuIHRydWUgaWYgdmVjdG9yIGFsaWdubWVudCBpcyByZWFjaGFibGUgKGJ5IHBlZWxpbmcgTgorICAgaXRlcmF0aW9ucykgZm9yIHRoZSBnaXZlbiB0eXBlLiAgKi8KK0RFRkhPT0sKKyh2ZWN0b3JfYWxpZ25tZW50X3JlYWNoYWJsZSwKKyAiIiwKKyBib29sLCAoY29uc3RfdHJlZSB0eXBlLCBib29sIGlzX3BhY2tlZCksCisgZGVmYXVsdF9idWlsdGluX3ZlY3Rvcl9hbGlnbm1lbnRfcmVhY2hhYmxlKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBhIHZlY3RvciBjcmVhdGVkIGZvciB2ZWNfcGVybV9jb25zdCBpcyB2YWxpZC4KKyAgIEEgTlVMTCBpbmRpY2F0ZXMgdGhhdCBhbGwgY29uc3RhbnRzIGFyZSB2YWxpZCBwZXJtdXRhdGlvbnMuICAqLworREVGSE9PSworKHZlY19wZXJtX2NvbnN0X29rLAorICIiLAorIGJvb2wsIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VsKSwKKyBOVUxMKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIG1pc2FsaWduZWQgc3RvcmUvbG9hZCBvZiBhCisgICBzcGVjaWZpYyBmYWN0b3IgZGVub3RlZCBpbiB0aGUgdGhpcmQgcGFyYW1ldGVyLiAgVGhlIGxhc3QgcGFyYW1ldGVyCisgICBpcyB0cnVlIGlmIHRoZSBhY2Nlc3MgaXMgZGVmaW5lZCBpbiBhIHBhY2tlZCBzdHJ1Y3QuICAqLworREVGSE9PSworKHN1cHBvcnRfdmVjdG9yX21pc2FsaWdubWVudCwKKyAiIiwKKyBib29sLAorIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdF90cmVlIHR5cGUsIGludCBtaXNhbGlnbm1lbnQsIGJvb2wgaXNfcGFja2VkKSwKKyBkZWZhdWx0X2J1aWx0aW5fc3VwcG9ydF92ZWN0b3JfbWlzYWxpZ25tZW50KQorCisvKiBSZXR1cm4gdGhlIGJ1aWx0aW4gZGVjbCBuZWVkZWQgdG8gbG9hZCBhIHZlY3RvciBvZiBUWVBFLiAgKi8KK0RFRkhPT0sKKyhidWlsdGluX3RtX2xvYWQsCisgIlRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBidWlsdC1pbiBkZWNsIG5lZWRlZCB0byBsb2FkIGEgdmVjdG9yIG9mIHRoZSAiCisgImdpdmVuIHR5cGUgd2l0aGluIGEgdHJhbnNhY3Rpb24uIiwKKyB0cmVlLAorICh0cmVlKSwKKyBkZWZhdWx0X2J1aWx0aW5fdG1fbG9hZF9zdG9yZSkKKworLyogUmV0dXJuIHRoZSBidWlsdGluIGRlY2wgbmVlZGVkIHRvIHN0b3JlIGEgdmVjdG9yIG9mIFRZUEUuICAqLworREVGSE9PSworKGJ1aWx0aW5fdG1fc3RvcmUsCisgIlRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBidWlsdC1pbiBkZWNsIG5lZWRlZCB0byBzdG9yZSBhIHZlY3RvciBvZiB0aGUgIgorICJnaXZlbiB0eXBlIHdpdGhpbiBhIHRyYW5zYWN0aW9uLiIsCisgdHJlZSwKKyAodHJlZSksCisgZGVmYXVsdF9idWlsdGluX3RtX2xvYWRfc3RvcmUpCisKKy8qIFJldHVybnMgdGhlIHByZWZlcnJlZCBtb2RlIGZvciBTSU1EIG9wZXJhdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQKKyAgIHNjYWxhciBtb2RlLiAgKi8KK0RFRkhPT0sKKyhwcmVmZXJyZWRfc2ltZF9tb2RlLAorICIiLAorIGVudW0gbWFjaGluZV9tb2RlLAorIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKSwKKyBkZWZhdWx0X3ByZWZlcnJlZF9zaW1kX21vZGUpCisKKy8qIFJldHVybnMgYSBtYXNrIG9mIHZlY3RvciBzaXplcyB0byBpdGVyYXRlIG92ZXIgd2hlbiBhdXRvLXZlY3Rvcml6aW5nCisgICBhZnRlciBwcm9jZXNzaW5nIHRoZSBwcmVmZXJyZWQgb25lIGRlcml2ZWQgZnJvbSBwcmVmZXJyZWRfc2ltZF9tb2RlLiAgKi8KK0RFRkhPT0sKKyhhdXRvdmVjdG9yaXplX3ZlY3Rvcl9zaXplcywKKyAiIiwKKyB1bnNpZ25lZCBpbnQsCisgKHZvaWQpLAorIGRlZmF1bHRfYXV0b3ZlY3Rvcml6ZV92ZWN0b3Jfc2l6ZXMpCisKKy8qIFRhcmdldCBidWlsdGluIHRoYXQgaW1wbGVtZW50cyB2ZWN0b3IgZ2F0aGVyIG9wZXJhdGlvbi4gICovCitERUZIT09LCisoYnVpbHRpbl9nYXRoZXIsCisgIiIsCisgdHJlZSwKKyAoY29uc3RfdHJlZSBtZW1fdmVjdHlwZSwgY29uc3RfdHJlZSBpbmRleF90eXBlLCBpbnQgc2NhbGUpLAorIE5VTEwpCisKKy8qIFRhcmdldCBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBjb3N0IG1vZGVsIGZvciBhIGxvb3Agb3IgYmxvY2suICAqLworREVGSE9PSworKGluaXRfY29zdCwKKyAiVGhpcyBob29rIHNob3VsZCBpbml0aWFsaXplIHRhcmdldC1zcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgaW4gcHJlcGFyYXRpb24gIgorICJmb3IgbW9kZWxpbmcgdGhlIGNvc3RzIG9mIHZlY3Rvcml6aW5nIGEgbG9vcCBvciBiYXNpYyBibG9jay4gIFRoZSBkZWZhdWx0ICIKKyAiYWxsb2NhdGVzIHRocmVlIHVuc2lnbmVkIGludGVnZXJzIGZvciBhY2N1bXVsYXRpbmcgY29zdHMgZm9yIHRoZSBwcm9sb2d1ZSwgIgorICJib2R5LCBhbmQgZXBpbG9ndWUgb2YgdGhlIGxvb3Agb3IgYmFzaWMgYmxvY2suICBJZiBAdmFye2xvb3BfaW5mb30gaXMgIgorICJub24tTlVMTCwgaXQgaWRlbnRpZmllcyB0aGUgbG9vcCBiZWluZyB2ZWN0b3JpemVkOyBvdGhlcndpc2UgYSBzaW5nbGUgYmxvY2sgIgorICJpcyBiZWluZyB2ZWN0b3JpemVkLiIsCisgdm9pZCAqLAorIChzdHJ1Y3QgbG9vcCAqbG9vcF9pbmZvKSwKKyBkZWZhdWx0X2luaXRfY29zdCkKKworLyogVGFyZ2V0IGZ1bmN0aW9uIHRvIHJlY29yZCBOIHN0YXRlbWVudHMgb2YgdGhlIGdpdmVuIGtpbmQgdXNpbmcgdGhlCisgICBnaXZlbiB2ZWN0b3IgdHlwZSB3aXRoaW4gdGhlIGNvc3QgbW9kZWwgZGF0YSBmb3IgdGhlIGN1cnJlbnQgbG9vcCBvcgorICAgIGJsb2NrLiAgKi8KK0RFRkhPT0sKKyhhZGRfc3RtdF9jb3N0LAorICJUaGlzIGhvb2sgc2hvdWxkIHVwZGF0ZSB0aGUgdGFyZ2V0LXNwZWNpZmljIEB2YXJ7ZGF0YX0gaW4gcmVzcG9uc2UgdG8gIgorICJhZGRpbmcgQHZhcntjb3VudH0gY29waWVzIG9mIHRoZSBnaXZlbiBAdmFye2tpbmR9IG9mIHN0YXRlbWVudCB0byBhICIKKyAibG9vcCBvciBiYXNpYyBibG9jay4gIFRoZSBkZWZhdWx0IGFkZHMgdGhlIGJ1aWx0aW4gdmVjdG9yaXplciBjb3N0IGZvciAiCisgInRoZSBjb3BpZXMgb2YgdGhlIHN0YXRlbWVudCB0byB0aGUgYWNjdW11bGF0b3Igc3BlY2lmaWVkIGJ5IEB2YXJ7d2hlcmV9LCAiCisgIih0aGUgcHJvbG9ndWUsIGJvZHksIG9yIGVwaWxvZ3VlKSBhbmQgcmV0dXJucyB0aGUgYW1vdW50IGFkZGVkLiAgVGhlICIKKyAicmV0dXJuIHZhbHVlIHNob3VsZCBiZSB2aWV3ZWQgYXMgYSB0ZW50YXRpdmUgY29zdCB0aGF0IG1heSBsYXRlciBiZSAiCisgInJldmlzZWQuIiwKKyB1bnNpZ25lZCwKKyAodm9pZCAqZGF0YSwgaW50IGNvdW50LCBlbnVtIHZlY3RfY29zdF9mb3Jfc3RtdCBraW5kLAorICBzdHJ1Y3QgX3N0bXRfdmVjX2luZm8gKnN0bXRfaW5mbywgaW50IG1pc2FsaWduLAorICBlbnVtIHZlY3RfY29zdF9tb2RlbF9sb2NhdGlvbiB3aGVyZSksCisgZGVmYXVsdF9hZGRfc3RtdF9jb3N0KQorCisvKiBUYXJnZXQgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB0b3RhbCBjb3N0IG9mIHRoZSBjdXJyZW50IHZlY3Rvcml6ZWQKKyAgIGxvb3Agb3IgYmxvY2suICAqLworREVGSE9PSworKGZpbmlzaF9jb3N0LAorICJUaGlzIGhvb2sgc2hvdWxkIGNvbXBsZXRlIGNhbGN1bGF0aW9ucyBvZiB0aGUgY29zdCBvZiB2ZWN0b3JpemluZyBhIGxvb3AgIgorICJvciBiYXNpYyBibG9jayBiYXNlZCBvbiBAdmFye2RhdGF9LCBhbmQgcmV0dXJuIHRoZSBwcm9sb2d1ZSwgYm9keSwgYW5kICIKKyAiZXBpbG9ndWUgY29zdHMgYXMgdW5zaWduZWQgaW50ZWdlcnMuICBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiAiCisgInRoZSB0aHJlZSBhY2N1bXVsYXRvcnMuIiwKKyB2b2lkLAorICh2b2lkICpkYXRhLCB1bnNpZ25lZCAqcHJvbG9ndWVfY29zdCwgdW5zaWduZWQgKmJvZHlfY29zdCwKKyAgdW5zaWduZWQgKmVwaWxvZ3VlX2Nvc3QpLAorIGRlZmF1bHRfZmluaXNoX2Nvc3QpCisKKy8qIEZ1bmN0aW9uIHRvIGRlbGV0ZSB0YXJnZXQtc3BlY2lmaWMgY29zdCBtb2RlbGluZyBkYXRhLiAgKi8KK0RFRkhPT0sKKyhkZXN0cm95X2Nvc3RfZGF0YSwKKyAiVGhpcyBob29rIHNob3VsZCByZWxlYXNlIEB2YXJ7ZGF0YX0gYW5kIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyAiCisgImFsbG9jYXRlZCBieSBUQVJHRVRfVkVDVE9SSVpFX0lOSVRfQ09TVC4gIFRoZSBkZWZhdWx0IHJlbGVhc2VzIHRoZSAiCisgImFjY3VtdWxhdG9yLiIsCisgdm9pZCwKKyAodm9pZCAqZGF0YSksCisgZGVmYXVsdF9kZXN0cm95X2Nvc3RfZGF0YSkKKworSE9PS19WRUNUT1JfRU5EICh2ZWN0b3JpemUpCisKKyN1bmRlZiBIT09LX1BSRUZJWAorI2RlZmluZSBIT09LX1BSRUZJWCAiVEFSR0VUXyIKKworLyogQWxsb3cgdGFyZ2V0IHNwZWNpZmljIG92ZXJyaWRpbmcgb2Ygb3B0aW9uIHNldHRpbmdzIGFmdGVyIG9wdGlvbnMgaGF2ZQorICBiZWVuIGNoYW5nZWQgYnkgYW4gYXR0cmlidXRlIG9yIHByYWdtYSBvciB3aGVuIGl0IGlzIHJlc2V0IGF0IHRoZQorICBlbmQgb2YgdGhlIGNvZGUgYWZmZWN0ZWQgYnkgYW4gYXR0cmlidXRlIG9yIHByYWdtYS4gICovCitERUZIT09LCisob3ZlcnJpZGVfb3B0aW9uc19hZnRlcl9jaGFuZ2UsCisgIiIsCisgdm9pZCwgKHZvaWQpLAorIGhvb2tfdm9pZF92b2lkKQorCitERUZIT09LX1VORE9DCisoZWhfcmV0dXJuX2ZpbHRlcl9tb2RlLAorICJSZXR1cm4gbWFjaGluZSBtb2RlIGZvciBmaWx0ZXIgdmFsdWUuIiwKKyBlbnVtIG1hY2hpbmVfbW9kZSwgKHZvaWQpLAorIGRlZmF1bHRfZWhfcmV0dXJuX2ZpbHRlcl9tb2RlKQorCisvKiBSZXR1cm4gbWFjaGluZSBtb2RlIGZvciBsaWJnY2MgZXhwYW5kZWQgY21wIGluc3RydWN0aW9ucy4gICovCitERUZIT09LCisobGliZ2NjX2NtcF9yZXR1cm5fbW9kZSwKKyAiIiwKKyBlbnVtIG1hY2hpbmVfbW9kZSwgKHZvaWQpLAorIGRlZmF1bHRfbGliZ2NjX2NtcF9yZXR1cm5fbW9kZSkKKworLyogUmV0dXJuIG1hY2hpbmUgbW9kZSBmb3IgbGliZ2NjIGV4cGFuZGVkIHNoaWZ0IGluc3RydWN0aW9ucy4gICovCitERUZIT09LCisobGliZ2NjX3NoaWZ0X2NvdW50X21vZGUsCisgIiIsCisgZW51bSBtYWNoaW5lX21vZGUsICh2b2lkKSwKKyBkZWZhdWx0X2xpYmdjY19zaGlmdF9jb3VudF9tb2RlKQorCisvKiBSZXR1cm4gbWFjaGluZSBtb2RlIHRvIGJlIHVzZWQgZm9yIF9VbndpbmRfV29yZCB0eXBlLiAgKi8KK0RFRkhPT0sKKyh1bndpbmRfd29yZF9tb2RlLAorICIiLAorIGVudW0gbWFjaGluZV9tb2RlLCAodm9pZCksCisgZGVmYXVsdF91bndpbmRfd29yZF9tb2RlKQorCisvKiBHaXZlbiB0d28gZGVjbHMsIG1lcmdlIHRoZWlyIGF0dHJpYnV0ZXMgYW5kIHJldHVybiB0aGUgcmVzdWx0LiAgKi8KK0RFRkhPT0sKKyhtZXJnZV9kZWNsX2F0dHJpYnV0ZXMsCisgIiIsCisgdHJlZSwgKHRyZWUgb2xkZGVjbCwgdHJlZSBuZXdkZWNsKSwKKyBtZXJnZV9kZWNsX2F0dHJpYnV0ZXMpCisKKy8qIEdpdmVuIHR3byB0eXBlcywgbWVyZ2UgdGhlaXIgYXR0cmlidXRlcyBhbmQgcmV0dXJuIHRoZSByZXN1bHQuICAqLworREVGSE9PSworKG1lcmdlX3R5cGVfYXR0cmlidXRlcywKKyAiIiwKKyB0cmVlLCAodHJlZSB0eXBlMSwgdHJlZSB0eXBlMiksCisgbWVyZ2VfdHlwZV9hdHRyaWJ1dGVzKQorCisvKiBUYWJsZSBvZiBtYWNoaW5lIGF0dHJpYnV0ZXMgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlbS4KKyAgIElnbm9yZWQgaWYgTlVMTC4gICovCitERUZIT09LUE9ECisoYXR0cmlidXRlX3RhYmxlLAorICIiLAorIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyAqLCBOVUxMKQorCisvKiBSZXR1cm4gdHJ1ZSBpZmYgYXR0cmlidXRlIE5BTUUgZXhwZWN0cyBhIHBsYWluIGlkZW50aWZpZXIgYXMgaXRzIGZpcnN0CisgICBhcmd1bWVudC4gICovCitERUZIT09LCisoYXR0cmlidXRlX3Rha2VzX2lkZW50aWZpZXJfcCwKKyAiIiwKKyBib29sLCAoY29uc3RfdHJlZSBuYW1lKSwKKyBob29rX2Jvb2xfY29uc3RfdHJlZV9mYWxzZSkKKworLyogUmV0dXJuIHplcm8gaWYgdGhlIGF0dHJpYnV0ZXMgb24gVFlQRTEgYW5kIFRZUEUyIGFyZSBpbmNvbXBhdGlibGUsCisgICBvbmUgaWYgdGhleSBhcmUgY29tcGF0aWJsZSBhbmQgdHdvIGlmIHRoZXkgYXJlIG5lYXJseSBjb21wYXRpYmxlCisgICAod2hpY2ggY2F1c2VzIGEgd2FybmluZyB0byBiZSBnZW5lcmF0ZWQpLiAgKi8KK0RFRkhPT0sKKyhjb21wX3R5cGVfYXR0cmlidXRlcywKKyAiIiwKKyBpbnQsIChjb25zdF90cmVlIHR5cGUxLCBjb25zdF90cmVlIHR5cGUyKSwKKyBob29rX2ludF9jb25zdF90cmVlX2NvbnN0X3RyZWVfMSkKKworLyogQXNzaWduIGRlZmF1bHQgYXR0cmlidXRlcyB0byB0aGUgbmV3bHkgZGVmaW5lZCBUWVBFLiAgKi8KK0RFRkhPT0sKKyhzZXRfZGVmYXVsdF90eXBlX2F0dHJpYnV0ZXMsCisgIiIsCisgdm9pZCwgKHRyZWUgdHlwZSksCisgaG9va192b2lkX3RyZWUpCisKKy8qIEluc2VydCBhdHRyaWJ1dGVzIG9uIHRoZSBuZXdseSBjcmVhdGVkIERFQ0wuICAqLworREVGSE9PSworKGluc2VydF9hdHRyaWJ1dGVzLAorICIiLAorIHZvaWQsICh0cmVlIG5vZGUsIHRyZWUgKmF0dHJfcHRyKSwKKyBob29rX3ZvaWRfdHJlZV90cmVlcHRyKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBGTkRFQ0wgKHdoaWNoIGhhcyBhdCBsZWFzdCBvbmUgbWFjaGluZSBhdHRyaWJ1dGUpCisgICBjYW4gYmUgaW5saW5lZCBkZXNwaXRlIGl0cyBtYWNoaW5lIGF0dHJpYnV0ZXMsIGZhbHNlIG90aGVyd2lzZS4gICovCitERUZIT09LCisoZnVuY3Rpb25fYXR0cmlidXRlX2lubGluYWJsZV9wLAorICIiLAorIGJvb2wsIChjb25zdF90cmVlIGZuZGVjbCksCisgaG9va19ib29sX2NvbnN0X3RyZWVfZmFsc2UpCisKKy8qIFJldHVybiB0cnVlIGlmIGJpdGZpZWxkcyBpbiBSRUNPUkRfVFlQRSBzaG91bGQgZm9sbG93IHRoZQorICAgTWljcm9zb2Z0IFZpc3VhbCBDKysgYml0ZmllbGQgbGF5b3V0IHJ1bGVzLiAgKi8KK0RFRkhPT0sKKyhtc19iaXRmaWVsZF9sYXlvdXRfcCwKKyAiIiwKKyBib29sLCAoY29uc3RfdHJlZSByZWNvcmRfdHlwZSksCisgaG9va19ib29sX2NvbnN0X3RyZWVfZmFsc2UpCisKKy8qIEZvciBub3cgdGhpcyBpcyBvbmx5IGFuIGludGVyZmFjZSB0byBXT1JEU19CSUdfRU5ESUFOIGZvcgorICAgdGFyZ2V0LWluZGVwZW5kZW50IGNvZGUgbGlrZSB0aGUgZnJvbnQgZW5kcywgbmVlZCBwZXJmb3JtYW5jZSB0ZXN0aW5nCisgICBiZWZvcmUgc3dpdGNoaW5nIGNvbXBsZXRlbHkgdG8gdGhlIHRhcmdldCBob29rLiAgKi8KK0RFRkhPT0tfVU5ET0MKKyh3b3Jkc19iaWdfZW5kaWFuLAorICIiLAorIGJvb2wsICh2b2lkKSwKKyB0YXJnaG9va193b3Jkc19iaWdfZW5kaWFuKQorCisvKiBMaWtld2lzZSBmb3IgRkxPQVRfV09SRFNfQklHX0VORElBTi4gICovCitERUZIT09LX1VORE9DCisoZmxvYXRfd29yZHNfYmlnX2VuZGlhbiwKKyAiIiwKKyBib29sLCAodm9pZCksCisgdGFyZ2hvb2tfZmxvYXRfd29yZHNfYmlnX2VuZGlhbikKKworLyogVHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICAqLworREVGSE9PSworKGRlY2ltYWxfZmxvYXRfc3VwcG9ydGVkX3AsCisgIiIsCisgYm9vbCwgKHZvaWQpLAorIGRlZmF1bHRfZGVjaW1hbF9mbG9hdF9zdXBwb3J0ZWRfcCkKKworLyogVHJ1ZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGZpeGVkLXBvaW50LiAgKi8KK0RFRkhPT0sKKyhmaXhlZF9wb2ludF9zdXBwb3J0ZWRfcCwKKyAiIiwKKyBib29sLCAodm9pZCksCisgZGVmYXVsdF9maXhlZF9wb2ludF9zdXBwb3J0ZWRfcCkKKworLyogUmV0dXJuIHRydWUgaWYgYW5vbnltb3VzIGJpdGZpZWxkcyBhZmZlY3Qgc3RydWN0dXJlIGFsaWdubWVudC4gICovCitERUZIT09LCisoYWxpZ25fYW5vbl9iaXRmaWVsZCwKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfZmFsc2UpCisKKy8qIFJldHVybiB0cnVlIGlmIHZvbGF0aWxlIGJpdGZpZWxkcyBzaG91bGQgdXNlIHRoZSBuYXJyb3dlc3QgdHlwZSBwb3NzaWJsZS4KKyAgIFJldHVybiBmYWxzZSBpZiB0aGV5IHNob3VsZCB1c2UgdGhlIGNvbnRhaW5lciB0eXBlLiAgKi8KK0RFRkhPT0sKKyhuYXJyb3dfdm9sYXRpbGVfYml0ZmllbGQsCisgIiIsCisgYm9vbCwgKHZvaWQpLAorIGhvb2tfYm9vbF92b2lkX2ZhbHNlKQorCisvKiBTZXQgdXAgdGFyZ2V0LXNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gICovCitERUZIT09LCisoaW5pdF9idWlsdGlucywKKyAiIiwKKyB2b2lkLCAodm9pZCksCisgaG9va192b2lkX3ZvaWQpCisKKy8qIEluaXRpYWxpemUgKGlmIElOSVRJQUxJWkVfUCBpcyB0cnVlKSBhbmQgcmV0dXJuIHRoZSB0YXJnZXQtc3BlY2lmaWMKKyAgIGJ1aWx0LWluIGZ1bmN0aW9uIGRlY2wgZm9yIENPREUuCisgICBSZXR1cm4gTlVMTCBpZiB0aGF0IGlzIG5vdCBwb3NzaWJsZS4gIFJldHVybiBlcnJvcl9tYXJrX25vZGUgaWYgQ09ERQorICAgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2Ugb2YgdmFsaWQgdGFyZ2V0IGJ1aWx0aW4gZnVuY3Rpb24gY29kZXMuICAqLworREVGSE9PSworKGJ1aWx0aW5fZGVjbCwKKyAiIiwKKyB0cmVlLCAodW5zaWduZWQgY29kZSwgYm9vbCBpbml0aWFsaXplX3ApLCBOVUxMKQorCisvKiBFeHBhbmQgYSB0YXJnZXQtc3BlY2lmaWMgYnVpbHRpbi4gICovCitERUZIT09LCisoZXhwYW5kX2J1aWx0aW4sCisgIiIsCisgcnR4LAorICh0cmVlIGV4cCwgcnR4IHRhcmdldCwgcnR4IHN1YnRhcmdldCwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGlnbm9yZSksCisgZGVmYXVsdF9leHBhbmRfYnVpbHRpbikKKworLyogU2VsZWN0IGEgcmVwbGFjZW1lbnQgZm9yIGEgdGFyZ2V0LXNwZWNpZmljIGJ1aWx0aW4uICBUaGlzIGlzIGRvbmUKKyAgICpiZWZvcmUqIHJlZ3VsYXIgdHlwZSBjaGVja2luZywgYW5kIHNvIGFsbG93cyB0aGUgdGFyZ2V0IHRvCisgICBpbXBsZW1lbnQgYSBjcnVkZSBmb3JtIG9mIGZ1bmN0aW9uIG92ZXJsb2FkaW5nLiAgVGhlIHJlc3VsdCBpcyBhCisgICBjb21wbGV0ZSBleHByZXNzaW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgb3BlcmF0aW9uLiAgUEFSQU1TIHJlYWxseQorICAgaGFzIHR5cGUgVkVDKHRyZWUsZ2MpKiwgYnV0IHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSB0cmVlLmggaGVyZS4gICovCitERUZIT09LCisocmVzb2x2ZV9vdmVybG9hZGVkX2J1aWx0aW4sCisgIiIsCisgdHJlZSwgKHVuc2lnbmVkIGludCAvKmxvY2F0aW9uX3QqLyBsb2MsIHRyZWUgZm5kZWNsLCB2b2lkICphcmdsaXN0KSwgTlVMTCkKKworLyogRm9sZCBhIHRhcmdldC1zcGVjaWZpYyBidWlsdGluIHRvIGEgdHJlZSB2YWxpZCBmb3IgYm90aCBHSU1QTEUKKyAgIGFuZCBHRU5FUklDLiAgKi8KK0RFRkhPT0sKKyhmb2xkX2J1aWx0aW4sCisgIiIsCisgdHJlZSwgKHRyZWUgZm5kZWNsLCBpbnQgbl9hcmdzLCB0cmVlICphcmdwLCBib29sIGlnbm9yZSksCisgaG9va190cmVlX3RyZWVfaW50X3RyZWVwX2Jvb2xfbnVsbCkKKworLyogRm9sZCBhIHRhcmdldC1zcGVjaWZpYyBidWlsdGluIHRvIGEgdmFsaWQgR0lNUExFIHRyZWUuICAqLworREVGSE9PSworKGdpbXBsZV9mb2xkX2J1aWx0aW4sCisgIkZvbGQgYSBjYWxsIHRvIGEgbWFjaGluZSBzcGVjaWZpYyBidWlsdC1pbiBmdW5jdGlvbiB0aGF0IHdhcyBzZXQgdXBcblwKK2J5IEBzYW1we1RBUkdFVF9JTklUX0JVSUxUSU5TfS4gIEB2YXJ7Z3NpfSBwb2ludHMgdG8gdGhlIGdpbXBsZVxuXAorc3RhdGVtZW50IGhvbGRpbmcgdGhlIGZ1bmN0aW9uIGNhbGwuICBSZXR1cm5zIHRydWUgaWYgYW55IGNoYW5nZVxuXAord2FzIG1hZGUgdG8gdGhlIEdJTVBMRSBzdHJlYW0uIiwKKyBib29sLCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSksCisgaG9va19ib29sX2dzaXB0cl9mYWxzZSkKKworLyogVGFyZ2V0IGhvb2sgaXMgdXNlZCB0byBjb21wYXJlIHRoZSB0YXJnZXQgYXR0cmlidXRlcyBpbiB0d28gZnVuY3Rpb25zIHRvCisgICBkZXRlcm1pbmUgd2hpY2ggZnVuY3Rpb24ncyBmZWF0dXJlcyBnZXQgaGlnaGVyIHByaW9yaXR5LiAgVGhpcyBpcyB1c2VkCisgICBkdXJpbmcgZnVuY3Rpb24gbXVsdGktdmVyc2lvbmluZyB0byBmaWd1cmUgb3V0IHRoZSBvcmRlciBpbiB3aGljaCB0d28KKyAgIHZlcnNpb25zIG11c3QgYmUgZGlzcGF0Y2hlZC4gIEEgZnVuY3Rpb24gdmVyc2lvbiB3aXRoIGEgaGlnaGVyIHByaW9yaXR5CisgICBpcyBjaGVja2VkIGZvciBkaXNwYXRjaGluZyBlYXJsaWVyLiAgREVDTDEgYW5kIERFQ0wyIGFyZQorICAgdGhlIHR3byBmdW5jdGlvbiBkZWNscyB0aGF0IHdpbGwgYmUgY29tcGFyZWQuIEl0IHJldHVybnMgcG9zaXRpdmUgdmFsdWUKKyAgIGlmIERFQ0wxIGlzIGhpZ2hlciBwcmlvcml0eSwgIG5lZ2F0aXZlIHZhbHVlIGlmIERFQ0wyIGlzIGhpZ2hlciBwcmlvcml0eQorICAgYW5kIDAgaWYgdGhleSBhcmUgdGhlIHNhbWUuICovCitERUZIT09LCisoY29tcGFyZV92ZXJzaW9uX3ByaW9yaXR5LAorICIiLAorIGludCwgKHRyZWUgZGVjbDEsIHRyZWUgZGVjbDIpLCBOVUxMKQorCisvKiAgVGFyZ2V0IGhvb2sgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGlzcGF0Y2hlciBsb2dpYyB0byBpbnZva2UgdGhlIHJpZ2h0CisgICAgZnVuY3Rpb24gdmVyc2lvbiBhdCBydW4tdGltZSBmb3IgYSBnaXZlbiBzZXQgb2YgZnVuY3Rpb24gdmVyc2lvbnMuCisgICAgQVJHIHBvaW50cyB0byB0aGUgY2FsbGdyYXBoIG5vZGUgb2YgdGhlIGRpc3BhdGNoZXIgZnVuY3Rpb24gd2hvc2UgYm9keQorICAgIG11c3QgYmUgZ2VuZXJhdGVkLiAgKi8KK0RFRkhPT0sKKyhnZW5lcmF0ZV92ZXJzaW9uX2Rpc3BhdGNoZXJfYm9keSwKKyAiIiwKKyB0cmVlLCAodm9pZCAqYXJnKSwgTlVMTCkgCisKKy8qIFRhcmdldCBob29rIGlzIHVzZWQgdG8gZ2V0IHRoZSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGZvciBhIHNldCBvZiBmdW5jdGlvbgorICAgdmVyc2lvbnMuICBUaGUgZGlzcGF0Y2hlciBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gaW52b2tlIHRoZSByaWdodCBmdW5jdGlvbgorICAgdmVyc2lvbiBhdCBydW4tdGltZS4gIERFQ0wgaXMgb25lIHZlcnNpb24gZnJvbSBhIHNldCBvZiBzZW1hbnRpY2FsbHkKKyAgIGlkZW50aWNhbCB2ZXJzaW9ucy4gICovCitERUZIT09LCisoZ2V0X2Z1bmN0aW9uX3ZlcnNpb25zX2Rpc3BhdGNoZXIsCisgIiIsCisgdHJlZSwgKHZvaWQgKmRlY2wpLCBOVUxMKQorCisvKiBSZXR1cm5zIGEgY29kZSBmb3IgYSB0YXJnZXQtc3BlY2lmaWMgYnVpbHRpbiB0aGF0IGltcGxlbWVudHMKKyAgIHJlY2lwcm9jYWwgb2YgdGhlIGZ1bmN0aW9uLCBvciBOVUxMX1RSRUUgaWYgbm90IGF2YWlsYWJsZS4gICovCitERUZIT09LCisoYnVpbHRpbl9yZWNpcHJvY2FsLAorICIiLAorIHRyZWUsICh1bnNpZ25lZCBmbiwgYm9vbCBtZF9mbiwgYm9vbCBzcXJ0KSwKKyBkZWZhdWx0X2J1aWx0aW5fcmVjaXByb2NhbCkKKworLyogRm9yIGEgdmVuZG9yLXNwZWNpZmljIFRZUEUsIHJldHVybiBhIHBvaW50ZXIgdG8gYSBzdGF0aWNhbGx5LWFsbG9jYXRlZAorICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEMrKyBtYW5nbGluZyBmb3IgVFlQRS4gIEluIGFsbCBvdGhlciBjYXNlcywgcmV0dXJuCisgICBOVUxMLiAgKi8KK0RFRkhPT0sKKyhtYW5nbGVfdHlwZSwKKyAiIiwKKyBjb25zdCBjaGFyICosIChjb25zdF90cmVlIHR5cGUpLAorIGhvb2tfY29uc3RjaGFycHRyX2NvbnN0X3RyZWVfbnVsbCkKKworLyogTWFrZSBhbnkgYWRqdXN0bWVudHMgdG8gbGliZnVuYyBuYW1lcyBuZWVkZWQgZm9yIHRoaXMgdGFyZ2V0LiAgKi8KK0RFRkhPT0sKKyhpbml0X2xpYmZ1bmNzLAorICIiLAorIHZvaWQsICh2b2lkKSwKKyBob29rX3ZvaWRfdm9pZCkKKworIC8qIEFkZCBhIF9fZ251XyBwcmVmaXggdG8gbGlicmFyeSBmdW5jdGlvbnMgcmF0aGVyIHRoYW4ganVzdCBfXy4gICovCitERUZIT09LUE9ECisobGliZnVuY19nbnVfcHJlZml4LAorICJJZiBmYWxzZSAodGhlIGRlZmF1bHQpLCBpbnRlcm5hbCBsaWJyYXJ5IHJvdXRpbmVzIHN0YXJ0IHdpdGggdHdvXG5cCit1bmRlcnNjb3Jlcy4gIElmIHNldCB0byB0cnVlLCB0aGVzZSByb3V0aW5lcyBzdGFydCB3aXRoIEBjb2Rle19fZ251X31cblwKK2luc3RlYWQuICBFLmcuLCBAY29kZXtfX211bGRpM30gY2hhbmdlcyB0byBAY29kZXtfX2dudV9tdWxkaTN9LiAgVGhpc1xuXAorY3VycmVudGx5IG9ubHkgYWZmZWN0cyBmdW5jdGlvbnMgZGVmaW5lZCBpbiBAZmlsZXtsaWJnY2MyLmN9LiAgSWYgdGhpc1xuXAoraXMgc2V0IHRvIHRydWUsIHRoZSBAZmlsZXt0bS5ofSBmaWxlIG11c3QgYWxzb1xuXAorQGNvZGV7I2RlZmluZSBMSUJHQ0MyX0dOVV9QUkVGSVh9LiIsCisgIGJvb2wsIGZhbHNlKQorCisvKiBHaXZlbiBhIGRlY2wsIGEgc2VjdGlvbiBuYW1lLCBhbmQgd2hldGhlciB0aGUgZGVjbCBpbml0aWFsaXplcgorICAgaGFzIHJlbG9jcywgY2hvb3NlIGF0dHJpYnV0ZXMgZm9yIHRoZSBzZWN0aW9uLiAgKi8KKy8qID8/PyBTaG91bGQgYmUgbWVyZ2VkIHdpdGggU0VMRUNUX1NFQ1RJT04gYW5kIFVOSVFVRV9TRUNUSU9OLiAgKi8KK0RFRkhPT0sKKyhzZWN0aW9uX3R5cGVfZmxhZ3MsCisgIiIsCisgdW5zaWduZWQgaW50LCAodHJlZSBkZWNsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgcmVsb2MpLAorIGRlZmF1bHRfc2VjdGlvbl90eXBlX2ZsYWdzKQorCisvKiBUcnVlIGlmIG5ldyBqdW1wcyBjYW5ub3QgYmUgY3JlYXRlZCwgdG8gcmVwbGFjZSBleGlzdGluZyBvbmVzIG9yCisgICBub3QsIGF0IHRoZSBjdXJyZW50IHBvaW50IGluIHRoZSBjb21waWxhdGlvbi4gICovCitERUZIT09LCisoY2Fubm90X21vZGlmeV9qdW1wc19wLAorICIiLAorIGJvb2wsICh2b2lkKSwKKyBob29rX2Jvb2xfdm9pZF9mYWxzZSkKKworLyogVHJ1ZSBpZiBGT0xMT1dFUiBtYXkgYmUgbW9kaWZpZWQgdG8gZm9sbG93IEZPTExPV0VFLiAgKi8KK0RFRkhPT0sKKyhjYW5fZm9sbG93X2p1bXAsCisgIkZPTExPV0VSIGFuZCBGT0xMT1dFRSBhcmUgSlVNUF9JTlNOIGluc3RydWN0aW9ucztcCisgIHJldHVybiB0cnVlIGlmIEZPTExPV0VSIG1heSBiZSBtb2RpZmllZCB0byBmb2xsb3cgRk9MTE9XRUU7XAorICBmYWxzZSwgaWYgaXQgY2FuJ3QuXAorICBGb3IgZXhhbXBsZSwgb24gc29tZSB0YXJnZXRzLCBjZXJ0YWluIGtpbmRzIG9mIGJyYW5jaGVzIGNhbid0IGJlIG1hZGUgdG9cCisgIGZvbGxvdyB0aHJvdWdoIGEgaG90L2NvbGQgcGFydGl0aW9uaW5nLiIsCisgYm9vbCwgKGNvbnN0X3J0eCBmb2xsb3dlciwgY29uc3RfcnR4IGZvbGxvd2VlKSwKKyBob29rX2Jvb2xfY29uc3RfcnR4X2NvbnN0X3J0eF90cnVlKQorCisvKiBSZXR1cm4gYSByZWdpc3RlciBjbGFzcyBmb3Igd2hpY2ggYnJhbmNoIHRhcmdldCByZWdpc3RlcgorICAgb3B0aW1pemF0aW9ucyBzaG91bGQgYmUgYXBwbGllZC4gICovCitERUZIT09LCisoYnJhbmNoX3RhcmdldF9yZWdpc3Rlcl9jbGFzcywKKyAiIiwKKyByZWdfY2xhc3NfdCwgKHZvaWQpLAorIGRlZmF1bHRfYnJhbmNoX3RhcmdldF9yZWdpc3Rlcl9jbGFzcykKKworLyogUmV0dXJuIHRydWUgaWYgYnJhbmNoIHRhcmdldCByZWdpc3RlciBvcHRpbWl6YXRpb25zIHNob3VsZCBpbmNsdWRlCisgICBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGxpdmUgZHVyaW5nIHRoZSBjdXJyZW50CisgICBmdW5jdGlvbi4gIEFGVEVSX1BFX0dFTiBpcyB0cnVlIGlmIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzIGhhdmUKKyAgIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQuICAqLworREVGSE9PSworKGJyYW5jaF90YXJnZXRfcmVnaXN0ZXJfY2FsbGVlX3NhdmVkLAorICIiLAorIGJvb2wsIChib29sIGFmdGVyX3Byb2xvZ3VlX2VwaWxvZ3VlX2dlbiksCisgaG9va19ib29sX2Jvb2xfZmFsc2UpCisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgY29uZGl0aW9uYWwgZXhlY3V0aW9uLiAgKi8KK0RFRkhPT0sKKyhoYXZlX2NvbmRpdGlvbmFsX2V4ZWN1dGlvbiwKKyAiIiwKKyBib29sLCAodm9pZCksCisgZGVmYXVsdF9oYXZlX2NvbmRpdGlvbmFsX2V4ZWN1dGlvbikKKworLyogUmV0dXJuIGEgbmV3IHZhbHVlIGZvciBsb29wIHVucm9sbCBzaXplLiAgKi8KK0RFRkhPT0sKKyhsb29wX3Vucm9sbF9hZGp1c3QsCisgIiIsCisgdW5zaWduZWQsICh1bnNpZ25lZCBudW5yb2xsLCBzdHJ1Y3QgbG9vcCAqbG9vcCksCisgTlVMTCkKKworLyogVHJ1ZSBpZiBYIGlzIGEgbGVnaXRpbWF0ZSBNT0RFLW1vZGUgaW1tZWRpYXRlIG9wZXJhbmQuICAqLworREVGSE9PSworKGxlZ2l0aW1hdGVfY29uc3RhbnRfcCwKKyAiIiwKKyBib29sLCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IHgpLAorIGhvb2tfYm9vbF9tb2RlX3J0eF90cnVlKQorCisvKiBUcnVlIGlmIHRoZSBjb25zdGFudCBYIGNhbm5vdCBiZSBwbGFjZWQgaW4gdGhlIGNvbnN0YW50IHBvb2wuICAqLworREVGSE9PSworKGNhbm5vdF9mb3JjZV9jb25zdF9tZW0sCisgIiIsCisgYm9vbCwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCB4KSwKKyBob29rX2Jvb2xfbW9kZV9ydHhfZmFsc2UpCisKK0RFRkhPT0tfVU5ET0MKKyhjYW5ub3RfY29weV9pbnNuX3AsCisgIlRydWUgaWYgdGhlIGluc24gQHZhcnt4fSBjYW5ub3QgYmUgZHVwbGljYXRlZC4iLAorIGJvb2wsIChydHgpLCBOVUxMKQorCisvKiBUcnVlIGlmIFggaXMgY29uc2lkZXJlZCB0byBiZSBjb21tdXRhdGl2ZS4gICovCitERUZIT09LCisoY29tbXV0YXRpdmVfcCwKKyAiIiwKKyBib29sLCAoY29uc3RfcnR4IHgsIGludCBvdXRlcl9jb2RlKSwKKyBob29rX2Jvb2xfY29uc3RfcnR4X2NvbW11dGF0aXZlX3ApCisKKy8qIFRydWUgaWYgQUREUiBpcyBhbiBhZGRyZXNzLWV4cHJlc3Npb24gd2hvc2UgZWZmZWN0IGRlcGVuZHMKKyAgIG9uIHRoZSBtb2RlIG9mIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGl0IGlzIHVzZWQgaW4uICAqLworREVGSE9PSworKG1vZGVfZGVwZW5kZW50X2FkZHJlc3NfcCwKKyAiIiwKKyBib29sLCAoY29uc3RfcnR4IGFkZHIsIGFkZHJfc3BhY2VfdCBhZGRyc3BhY2UpLAorIGRlZmF1bHRfbW9kZV9kZXBlbmRlbnRfYWRkcmVzc19wKQorCisvKiBHaXZlbiBhbiBpbnZhbGlkIGFkZHJlc3MgWCBmb3IgYSBnaXZlbiBtYWNoaW5lIG1vZGUsIHRyeSBtYWNoaW5lLXNwZWNpZmljCisgICB3YXlzIHRvIG1ha2UgaXQgbGVnaXRpbWF0ZS4gIFJldHVybiBYIG9yIGFuIGludmFsaWQgYWRkcmVzcyBvbiBmYWlsdXJlLiAgKi8KK0RFRkhPT0sKKyhsZWdpdGltaXplX2FkZHJlc3MsCisgIiIsCisgcnR4LCAocnR4IHgsIHJ0eCBvbGR4LCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKSwKKyBkZWZhdWx0X2xlZ2l0aW1pemVfYWRkcmVzcykKKworLyogR2l2ZW4gYW4gYWRkcmVzcyBSVFgsIHVuZG8gdGhlIGVmZmVjdHMgb2YgTEVHSVRJTUlaRV9BRERSRVNTLiAgKi8KK0RFRkhPT0sKKyhkZWxlZ2l0aW1pemVfYWRkcmVzcywKKyAiIiwKKyBydHgsIChydHggeCksCisgZGVsZWdpdGltaXplX21lbV9mcm9tX2F0dHJzKQorCisvKiBHaXZlbiBhbiBSVFgsIHJldHVybiB0cnVlIGlmIGl0IGlzIG5vdCBvayB0byBlbWl0IGl0IGludG8gZGVidWcgaW5mbworICAgc2VjdGlvbi4gICovCitERUZIT09LCisoY29uc3Rfbm90X29rX2Zvcl9kZWJ1Z19wLAorICIiLAorIGJvb2wsIChydHggeCksCisgaG9va19ib29sX3J0eF9mYWxzZSkKKworLyogR2l2ZW4gYW4gYWRkcmVzcyBSVFgsIHNheSB3aGV0aGVyIGl0IGlzIHZhbGlkLiAgKi8KK0RFRkhPT0sKKyhsZWdpdGltYXRlX2FkZHJlc3NfcCwKKyAiIiwKKyBib29sLCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IHgsIGJvb2wgc3RyaWN0KSwKKyBkZWZhdWx0X2xlZ2l0aW1hdGVfYWRkcmVzc19wKQorCisvKiBUcnVlIGlmIHRoZSBnaXZlbiBjb25zdGFudCBjYW4gYmUgcHV0IGludG8gYW4gb2JqZWN0X2Jsb2NrLiAgKi8KK0RFRkhPT0sKKyh1c2VfYmxvY2tzX2Zvcl9jb25zdGFudF9wLAorICIiLAorIGJvb2wsIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdF9ydHggeCksCisgaG9va19ib29sX21vZGVfY29uc3RfcnR4X2ZhbHNlKQorCisvKiBUcnVlIGlmIHRoZSBnaXZlbiBkZWNsIGNhbiBiZSBwdXQgaW50byBhbiBvYmplY3RfYmxvY2suICAqLworREVGSE9PSworKHVzZV9ibG9ja3NfZm9yX2RlY2xfcCwKKyAiIiwKKyBib29sLCAoY29uc3RfdHJlZSBkZWNsKSwKKyBob29rX2Jvb2xfY29uc3RfdHJlZV90cnVlKQorCisvKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBieXRlIG9mZnNldHMgZm9yIGFuY2hvcmVkIGFkZHJlc3Nlcy4gICovCitERUZIT09LUE9ECisobWluX2FuY2hvcl9vZmZzZXQsCisgIiIsCisgSE9TVF9XSURFX0lOVCwgMCkKKworREVGSE9PS1BPRAorKG1heF9hbmNob3Jfb2Zmc2V0LAorICIiLAorIEhPU1RfV0lERV9JTlQsIDApCisKKy8qIFRydWUgaWYgc2VjdGlvbiBhbmNob3JzIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgZ2l2ZW4gc3ltYm9sLiAgKi8KK0RFRkhPT0sKKyh1c2VfYW5jaG9yc19mb3Jfc3ltYm9sX3AsCisgIiIsCisgYm9vbCwgKGNvbnN0X3J0eCB4KSwKKyBkZWZhdWx0X3VzZV9hbmNob3JzX2Zvcl9zeW1ib2xfcCkKKworLyogVHJ1ZSBpZiBpdCBpcyBPSyB0byBkbyBzaWJsaW5nIGNhbGwgb3B0aW1pemF0aW9uIGZvciB0aGUgc3BlY2lmaWVkCisgICBjYWxsIGV4cHJlc3Npb24gRVhQLiAgREVDTCB3aWxsIGJlIHRoZSBjYWxsZWQgZnVuY3Rpb24sIG9yIE5VTEwgaWYKKyAgIHRoaXMgaXMgYW4gaW5kaXJlY3QgY2FsbC4gICovCitERUZIT09LCisoZnVuY3Rpb25fb2tfZm9yX3NpYmNhbGwsCisgIiIsCisgYm9vbCwgKHRyZWUgZGVjbCwgdHJlZSBleHApLAorIGhvb2tfYm9vbF90cmVlX3RyZWVfZmFsc2UpCisKKy8qIEVzdGFibGlzaCBhcHByb3ByaWF0ZSBiYWNrLWVuZCBjb250ZXh0IGZvciBwcm9jZXNzaW5nIHRoZSBmdW5jdGlvbgorICAgRk5ERUNMLiAgVGhlIGFyZ3VtZW50IG1pZ2h0IGJlIE5VTEwgdG8gaW5kaWNhdGUgcHJvY2Vzc2luZyBhdCB0b3AKKyAgIGxldmVsLCBvdXRzaWRlIG9mIGFueSBmdW5jdGlvbiBzY29wZS4gICovCitERUZIT09LCisoc2V0X2N1cnJlbnRfZnVuY3Rpb24sCisgIiIsCisgdm9pZCwgKHRyZWUgZGVjbCksIGhvb2tfdm9pZF90cmVlKQorCisvKiBUcnVlIGlmIEVYUCBzaG91bGQgYmUgcGxhY2VkIGluIGEgInNtYWxsIGRhdGEiIHNlY3Rpb24uICAqLworREVGSE9PSworKGluX3NtYWxsX2RhdGFfcCwKKyAiIiwKKyBib29sLCAoY29uc3RfdHJlZSBleHApLAorIGhvb2tfYm9vbF9jb25zdF90cmVlX2ZhbHNlKQorCisvKiBUcnVlIGlmIEVYUCBuYW1lcyBhbiBvYmplY3QgZm9yIHdoaWNoIG5hbWUgcmVzb2x1dGlvbiBtdXN0IHJlc29sdmUKKyAgIHRvIHRoZSBjdXJyZW50IGV4ZWN1dGFibGUgb3Igc2hhcmVkIGxpYnJhcnkuICAqLworREVGSE9PSworKGJpbmRzX2xvY2FsX3AsCisgIiIsCisgYm9vbCwgKGNvbnN0X3RyZWUgZXhwKSwKKyBkZWZhdWx0X2JpbmRzX2xvY2FsX3ApCisKKy8qIENoZWNrIGlmIHByb2ZpbGluZyBjb2RlIGlzIGJlZm9yZSBvciBhZnRlciBwcm9sb2d1ZS4gICovCitERUZIT09LCisocHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUsCisgIkl0IHJldHVybnMgdHJ1ZSBpZiB0YXJnZXQgd2FudHMgcHJvZmlsZSBjb2RlIGVtaXR0ZWQgYmVmb3JlIHByb2xvZ3VlLlxuXG5cCitUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgaG9vayB1c2UgdGhlIHRhcmdldCBtYWNyb1xuXAorQGNvZGV7UFJPRklMRV9CRUZPUkVfUFJPTE9HVUV9LiIsCisgYm9vbCwgKHZvaWQpLAorIGRlZmF1bHRfcHJvZmlsZV9iZWZvcmVfcHJvbG9ndWUpCisKKy8qIE1vZGlmeSBhbmQgcmV0dXJuIHRoZSBpZGVudGlmaWVyIG9mIGEgREVDTCdzIGV4dGVybmFsIG5hbWUsCisgICBvcmlnaW5hbGx5IGlkZW50aWZpZWQgYnkgSUQsIGFzIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQsCisgICAoZWcsIGFwcGVuZCBAbm4gdG8gd2luZG93czMyIHN0ZGNhbGwgZnVuY3Rpb24gbmFtZXMpLgorICAgVGhlIGRlZmF1bHQgaXMgdG8gcmV0dXJuIElEIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiAqLworREVGSE9PSworKG1hbmdsZV9kZWNsX2Fzc2VtYmxlcl9uYW1lLAorICIiLAorIHRyZWUsICh0cmVlIGRlY2wsIHRyZWUgIGlkKSwKKyBkZWZhdWx0X21hbmdsZV9kZWNsX2Fzc2VtYmxlcl9uYW1lKQorCisvKiBEbyBzb21ldGhpbmcgdGFyZ2V0LXNwZWNpZmljIHRvIHJlY29yZCBwcm9wZXJ0aWVzIG9mIHRoZSBERUNMIGludG8KKyAgIHRoZSBhc3NvY2lhdGVkIFNZTUJPTF9SRUYuICAqLworREVGSE9PSworKGVuY29kZV9zZWN0aW9uX2luZm8sCisgIiIsCisgdm9pZCwgKHRyZWUgZGVjbCwgcnR4IHJ0bCwgaW50IG5ld19kZWNsX3ApLAorIGRlZmF1bHRfZW5jb2RlX3NlY3Rpb25faW5mbykKKworLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBlbmNvZGVfc2VjdGlvbl9pbmZvIG9uIHRoZSBzeW1ib2wgc3RyaW5nLiAgKi8KK0RFRkhPT0sKKyhzdHJpcF9uYW1lX2VuY29kaW5nLAorICIiLAorIGNvbnN0IGNoYXIgKiwgKGNvbnN0IGNoYXIgKm5hbWUpLAorIGRlZmF1bHRfc3RyaXBfbmFtZV9lbmNvZGluZykKKworLyogSWYgc2hpZnQgb3B0YWJzIGZvciBNT0RFIGFyZSBrbm93biB0byBhbHdheXMgdHJ1bmNhdGUgdGhlIHNoaWZ0IGNvdW50LAorICAgcmV0dXJuIHRoZSBtYXNrIHRoYXQgdGhleSBhcHBseS4gIFJldHVybiAwIG90aGVyd2lzZS4gICovCitERUZIT09LCisoc2hpZnRfdHJ1bmNhdGlvbl9tYXNrLAorICIiLAorIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKSwKKyBkZWZhdWx0X3NoaWZ0X3RydW5jYXRpb25fbWFzaykKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGl2aXNpb25zIGluIHRoZSBnaXZlbiBNT0RFIHRoYXQgc2hvdWxkIGJlIHByZXNlbnQsCisgICBzbyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gdHVybiB0aGUgZGl2aXNpb24gaW50byBhIG11bHRpcGxpY2F0aW9uIGJ5CisgICB0aGUgcmVjaXByb2NhbC4gICovCitERUZIT09LCisobWluX2RpdmlzaW9uc19mb3JfcmVjaXBfbXVsLAorICIiLAorIHVuc2lnbmVkIGludCwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUpLAorIGRlZmF1bHRfbWluX2RpdmlzaW9uc19mb3JfcmVjaXBfbXVsKQorCisvKiBJZiB0aGUgcmVwcmVzZW50YXRpb24gb2YgaW50ZWdyYWwgTU9ERSBpcyBzdWNoIHRoYXQgdmFsdWVzIGFyZQorICAgYWx3YXlzIHNpZ24tZXh0ZW5kZWQgdG8gYSB3aWRlciBtb2RlIE1PREVfUkVQIHRoZW4gcmV0dXJuCisgICBTSUdOX0VYVEVORC4gIFJldHVybiBVTktOT1dOIG90aGVyd2lzZS4gICovCisvKiBOb3RlIHRoYXQgdGhlIHJldHVybiB0eXBlIG91Z2h0IHRvIGJlIFJUWF9DT0RFLCBidXQgdGhhdCdzIG5vdAorICAgbmVjZXNzYXJpbHkgZGVmaW5lZCBhdCB0aGlzIHBvaW50LiAgKi8KK0RFRkhPT0sKKyhtb2RlX3JlcF9leHRlbmRlZCwKKyAiIiwKKyBpbnQsIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSByZXBfbW9kZSksCisgZGVmYXVsdF9tb2RlX3JlcF9leHRlbmRlZCkKKworLyogVHJ1ZSBpZiBNT0RFIGlzIHZhbGlkIGZvciBhIHBvaW50ZXIgaW4gX19hdHRyaWJ1dGVfXygobW9kZSgiTU9ERSIpKSkuICAqLworREVGSE9PSworKHZhbGlkX3BvaW50ZXJfbW9kZSwKKyAiIiwKKyBib29sLCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSksCisgZGVmYXVsdF92YWxpZF9wb2ludGVyX21vZGUpCisKKy8qIERpc2FtYmlndWF0ZSB3aXRoIGVycm5vLiAgKi8KK0RFRkhPT0sKKyhyZWZfbWF5X2FsaWFzX2Vycm5vLAorICJEZWZpbmUgdGhpcyB0byByZXR1cm4gbm9uemVybyBpZiB0aGUgbWVtb3J5IHJlZmVyZW5jZSBAdmFye3JlZn1cCisgIG1heSBhbGlhcyB3aXRoIHRoZSBzeXN0ZW0gQyBsaWJyYXJ5IGVycm5vIGxvY2F0aW9uLiAgVGhlIGRlZmF1bHRcCisgIHZlcnNpb24gb2YgdGhpcyBob29rIGFzc3VtZXMgdGhlIHN5c3RlbSBDIGxpYnJhcnkgZXJybm8gbG9jYXRpb25cCisgIGlzIGVpdGhlciBhIGRlY2xhcmF0aW9uIG9mIHR5cGUgaW50IG9yIGFjY2Vzc2VkIGJ5IGRlcmVmZXJlbmNpbmdcCisgIGEgcG9pbnRlciB0byBpbnQuIiwKKyBib29sLCAoc3RydWN0IGFvX3JlZl9zICpyZWYpLAorIGRlZmF1bHRfcmVmX21heV9hbGlhc19lcnJubykKKworLyogU3VwcG9ydCBmb3IgbmFtZWQgYWRkcmVzcyBzcGFjZXMuICAqLworI3VuZGVmIEhPT0tfUFJFRklYCisjZGVmaW5lIEhPT0tfUFJFRklYICJUQVJHRVRfQUREUl9TUEFDRV8iCitIT09LX1ZFQ1RPUiAoVEFSR0VUX0FERFJfU1BBQ0VfSE9PS1MsIGFkZHJfc3BhY2UpCisKKy8qIE1PREUgdG8gdXNlIGZvciBhIHBvaW50ZXIgaW50byBhbm90aGVyIGFkZHJlc3Mgc3BhY2UuICAqLworREVGSE9PSworKHBvaW50ZXJfbW9kZSwKKyAiIiwKKyBlbnVtIG1hY2hpbmVfbW9kZSwgKGFkZHJfc3BhY2VfdCBhZGRyZXNzX3NwYWNlKSwKKyBkZWZhdWx0X2FkZHJfc3BhY2VfcG9pbnRlcl9tb2RlKQorCisvKiBNT0RFIHRvIHVzZSBmb3IgYW4gYWRkcmVzcyBpbiBhbm90aGVyIGFkZHJlc3Mgc3BhY2UuICAqLworREVGSE9PSworKGFkZHJlc3NfbW9kZSwKKyAiIiwKKyBlbnVtIG1hY2hpbmVfbW9kZSwgKGFkZHJfc3BhY2VfdCBhZGRyZXNzX3NwYWNlKSwKKyBkZWZhdWx0X2FkZHJfc3BhY2VfYWRkcmVzc19tb2RlKQorCisvKiBUcnVlIGlmIE1PREUgaXMgdmFsaWQgZm9yIGEgcG9pbnRlciBpbiBfX2F0dHJpYnV0ZV9fKChtb2RlKCJNT0RFIikpKQorICAgaW4gYW5vdGhlciBhZGRyZXNzIHNwYWNlLiAgKi8KK0RFRkhPT0sKKyh2YWxpZF9wb2ludGVyX21vZGUsCisgIiIsCisgYm9vbCwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGFkZHJfc3BhY2VfdCBhcyksCisgZGVmYXVsdF9hZGRyX3NwYWNlX3ZhbGlkX3BvaW50ZXJfbW9kZSkKKworLyogVHJ1ZSBpZiBhbiBhZGRyZXNzIGlzIGEgdmFsaWQgbWVtb3J5IGFkZHJlc3MgdG8gYSBnaXZlbiBuYW1lZCBhZGRyZXNzCisgICBzcGFjZSBmb3IgYSBnaXZlbiBtb2RlLiAgKi8KK0RFRkhPT0sKKyhsZWdpdGltYXRlX2FkZHJlc3NfcCwKKyAiIiwKKyBib29sLCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGV4cCwgYm9vbCBzdHJpY3QsIGFkZHJfc3BhY2VfdCBhcyksCisgZGVmYXVsdF9hZGRyX3NwYWNlX2xlZ2l0aW1hdGVfYWRkcmVzc19wKQorCisvKiBSZXR1cm4gYW4gdXBkYXRlZCBhZGRyZXNzIHRvIGNvbnZlcnQgYW4gaW52YWxpZCBwb2ludGVyIHRvIGEgbmFtZWQKKyAgIGFkZHJlc3Mgc3BhY2UgdG8gYSB2YWxpZCBvbmUuICBJZiBOVUxMX1JUWCBpcyByZXR1cm5lZCB1c2UgbWFjaGluZQorICAgaW5kZXBlbmRlbnQgbWV0aG9kcyB0byBtYWtlIHRoZSBhZGRyZXNzIHZhbGlkLiAgKi8KK0RFRkhPT0sKKyhsZWdpdGltaXplX2FkZHJlc3MsCisgIiIsCisgcnR4LCAocnR4IHgsIHJ0eCBvbGR4LCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBhZGRyX3NwYWNlX3QgYXMpLAorIGRlZmF1bHRfYWRkcl9zcGFjZV9sZWdpdGltaXplX2FkZHJlc3MpCisKKy8qIFRydWUgaWYgb25lIG5hbWVkIGFkZHJlc3Mgc3BhY2UgaXMgYSBzdWJzZXQgb2YgYW5vdGhlciBuYW1lZCBhZGRyZXNzLiAqLworREVGSE9PSworKHN1YnNldF9wLAorICIiLAorIGJvb2wsIChhZGRyX3NwYWNlX3Qgc3Vic2V0LCBhZGRyX3NwYWNlX3Qgc3VwZXJzZXQpLAorIGRlZmF1bHRfYWRkcl9zcGFjZV9zdWJzZXRfcCkKKworLyogRnVuY3Rpb24gdG8gY29udmVydCBhbiBydGwgZXhwcmVzc2lvbiBmcm9tIG9uZSBhZGRyZXNzIHNwYWNlIHRvIGFub3RoZXIuICAqLworREVGSE9PSworKGNvbnZlcnQsCisgIiIsCisgcnR4LCAocnR4IG9wLCB0cmVlIGZyb21fdHlwZSwgdHJlZSB0b190eXBlKSwKKyBkZWZhdWx0X2FkZHJfc3BhY2VfY29udmVydCkKKworSE9PS19WRUNUT1JfRU5EIChhZGRyX3NwYWNlKQorCisjdW5kZWYgSE9PS19QUkVGSVgKKyNkZWZpbmUgSE9PS19QUkVGSVggIlRBUkdFVF8iCisKKy8qIFRydWUgaWYgTU9ERSBpcyB2YWxpZCBmb3IgdGhlIHRhcmdldC4gIEJ5ICJ2YWxpZCIsIHdlIG1lYW4gYWJsZSB0bworICAgYmUgbWFuaXB1bGF0ZWQgaW4gbm9uLXRyaXZpYWwgd2F5cy4gIEluIHBhcnRpY3VsYXIsIHRoaXMgbWVhbnMgYWxsCisgICB0aGUgYXJpdGhtZXRpYyBpcyBzdXBwb3J0ZWQuICAqLworREVGSE9PSworKHNjYWxhcl9tb2RlX3N1cHBvcnRlZF9wLAorICIiLAorIGJvb2wsIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKSwKKyBkZWZhdWx0X3NjYWxhcl9tb2RlX3N1cHBvcnRlZF9wKQorCisvKiBTaW1pbGFybHkgZm9yIHZlY3RvciBtb2Rlcy4gICJTdXBwb3J0ZWQiIGhlcmUgaXMgbGVzcyBzdHJpY3QuICBBdAorICAgbGVhc3Qgc29tZSBvcGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQ7IG5lZWQgdG8gY2hlY2sgb3B0YWJzIG9yIGJ1aWx0aW5zCisgICBmb3IgZnVydGhlciBkZXRhaWxzLiAgKi8KK0RFRkhPT0sKKyh2ZWN0b3JfbW9kZV9zdXBwb3J0ZWRfcCwKKyAiIiwKKyBib29sLCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSksCisgaG9va19ib29sX21vZGVfZmFsc2UpCisKK0RFRkhPT0sKKyh2ZWN0b3JfYWxpZ25tZW50LAorICJUaGlzIGhvb2sgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBhbGlnbm1lbnQgZm9yIGEgdmVjdG9yIG9mIHR5cGVcblwKK0B2YXJ7dHlwZX0sIGluIG9yZGVyIHRvIGNvbXBseSB3aXRoIGEgcGxhdGZvcm0gQUJJLiAgVGhlIGRlZmF1bHQgaXMgdG9cblwKK3JlcXVpcmUgbmF0dXJhbCBhbGlnbm1lbnQgZm9yIHZlY3RvciB0eXBlcy4gIFRoZSBhbGlnbm1lbnQgcmV0dXJuZWQgYnlcblwKK3RoaXMgaG9vayBtdXN0IGJlIGEgcG93ZXItb2YtdHdvIG11bHRpcGxlIG9mIHRoZSBkZWZhdWx0IGFsaWdubWVudCBvZlxuXAordGhlIHZlY3RvciBlbGVtZW50IHR5cGUuIiwKKyBIT1NUX1dJREVfSU5ULCAoY29uc3RfdHJlZSB0eXBlKSwKKyBkZWZhdWx0X3ZlY3Rvcl9hbGlnbm1lbnQpCisKKy8qIFRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byB1c2UgYSBzY2FsYXIgbW9kZSB0byByZXByZXNlbnQgYW4gYXJyYXksCisgICBvdmVycmlkaW5nIHRoZSB1c3VhbCBNQVhfRklYRURfTU9ERSBsaW1pdC4gICovCitERUZIT09LCisoYXJyYXlfbW9kZV9zdXBwb3J0ZWRfcCwKKyAiUmV0dXJuIHRydWUgaWYgR0NDIHNob3VsZCB0cnkgdG8gdXNlIGEgc2NhbGFyIG1vZGUgdG8gc3RvcmUgYW4gYXJyYXlcblwKK29mIEB2YXJ7bmVsZW1zfSBlbGVtZW50cywgZ2l2ZW4gdGhhdCBlYWNoIGVsZW1lbnQgaGFzIG1vZGUgQHZhcnttb2RlfS5cblwKK1JldHVybmluZyB0cnVlIGhlcmUgb3ZlcnJpZGVzIHRoZSB1c3VhbCBAY29kZXtNQVhfRklYRURfTU9ERX0gbGltaXRcblwKK2FuZCBhbGxvd3MgR0NDIHRvIHVzZSBhbnkgZGVmaW5lZCBpbnRlZ2VyIG1vZGUuXG5cCitcblwKK09uZSB1c2Ugb2YgdGhpcyBob29rIGlzIHRvIHN1cHBvcnQgdmVjdG9yIGxvYWQgYW5kIHN0b3JlIG9wZXJhdGlvbnNcblwKK3RoYXQgb3BlcmF0ZSBvbiBzZXZlcmFsIGhvbW9nZW5lb3VzIHZlY3RvcnMuICBGb3IgZXhhbXBsZSwgQVJNIE5FT05cblwKK2hhcyBvcGVyYXRpb25zIGxpa2U6XG5cCitcblwKK0BzbWFsbGV4YW1wbGVcblwKK2ludDh4OHgzX3QgdmxkM19zOCAoY29uc3QgaW50OF90ICopXG5cCitAZW5kIHNtYWxsZXhhbXBsZVxuXAorXG5cCit3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgZGVmaW5lZCBhczpcblwKK1xuXAorQHNtYWxsZXhhbXBsZVxuXAordHlwZWRlZiBzdHJ1Y3QgaW50OHg4eDNfdFxuXAorQHtcblwKKyAgaW50OHg4X3QgdmFsWzNdO1xuXAorQH0gaW50OHg4eDNfdDtcblwKK0BlbmQgc21hbGxleGFtcGxlXG5cCitcblwKK0lmIHRoaXMgaG9vayBhbGxvd3MgQGNvZGV7dmFsfSB0byBoYXZlIGEgc2NhbGFyIG1vZGUsIHRoZW5cblwKK0Bjb2Rle2ludDh4OHgzX3R9IGNhbiBoYXZlIHRoZSBzYW1lIG1vZGUuICBHQ0MgY2FuIHRoZW4gc3RvcmVcblwKK0Bjb2Rle2ludDh4OHgzX3R9cyBpbiByZWdpc3RlcnMgcmF0aGVyIHRoYW4gZm9yY2luZyB0aGVtIG9udG8gdGhlIHN0YWNrLiIsCisgYm9vbCwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbmVsZW1zKSwKKyBob29rX2Jvb2xfbW9kZV91aHdpX2ZhbHNlKQorCisvKiBDb21wdXRlIGNvc3Qgb2YgbW92aW5nIGRhdGEgZnJvbSBhIHJlZ2lzdGVyIG9mIGNsYXNzIEZST00gdG8gb25lIG9mCisgICBUTywgdXNpbmcgTU9ERS4gICovCitERUZIT09LCisocmVnaXN0ZXJfbW92ZV9jb3N0LAorICIiLAorIGludCwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJlZ19jbGFzc190IGZyb20sIHJlZ19jbGFzc190IHRvKSwKKyBkZWZhdWx0X3JlZ2lzdGVyX21vdmVfY29zdCkKKworLyogQ29tcHV0ZSBjb3N0IG9mIG1vdmluZyByZWdpc3RlcnMgdG8vZnJvbSBtZW1vcnkuICAqLworLyogPz8/IERvY3VtZW50aW5nIHRoZSBhcmd1bWVudCB0eXBlcyBmb3IgdGhpcyBob29rIHJlcXVpcmVzIGEgR0ZETAorICAgbGljZW5zZSBncmFudC4gIEFsc28sIHRoZSBkb2N1bWVudGF0aW9uIHVzZXMgYSBkaWZmZXJlbnQgbmFtZSBmb3IgUkNMQVNTLiAgKi8KK0RFRkhPT0sKKyhtZW1vcnlfbW92ZV9jb3N0LAorICIiLAorIGludCwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJlZ19jbGFzc190IHJjbGFzcywgYm9vbCBpbiksCisgZGVmYXVsdF9tZW1vcnlfbW92ZV9jb3N0KQorCisvKiBUcnVlIGZvciBNT0RFIGlmIHRoZSB0YXJnZXQgZXhwZWN0cyB0aGF0IHJlZ2lzdGVycyBpbiB0aGlzIG1vZGUgd2lsbAorICAgYmUgYWxsb2NhdGVkIHRvIHJlZ2lzdGVycyBpbiBhIHNtYWxsIHJlZ2lzdGVyIGNsYXNzLiAgVGhlIGNvbXBpbGVyIGlzCisgICBhbGxvd2VkIHRvIHVzZSByZWdpc3RlcnMgZXhwbGljaXRseSB1c2VkIGluIHRoZSBydGwgYXMgc3BpbGwgcmVnaXN0ZXJzCisgICBidXQgaXQgc2hvdWxkIHByZXZlbnQgZXh0ZW5kaW5nIHRoZSBsaWZldGltZSBvZiB0aGVzZSByZWdpc3RlcnMuICAqLworREVGSE9PSworKHNtYWxsX3JlZ2lzdGVyX2NsYXNzZXNfZm9yX21vZGVfcCwKKyAiIiwKKyBib29sLCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSksCisgaG9va19ib29sX21vZGVfZmFsc2UpCisKKy8qIFJlZ2lzdGVyIG51bWJlciBmb3IgYSBmbGFncyByZWdpc3Rlci4gIE9ubHkgbmVlZHMgdG8gYmUgZGVmaW5lZCBpZiB0aGUKKyAgIHRhcmdldCBpcyBjb25zdHJhaW50ZWQgdG8gdXNlIHBvc3QtcmVsb2FkIGNvbXBhcmlzb24gZWxpbWluYXRpb24uICAqLworREVGSE9PS1BPRAorKGZsYWdzX3JlZ251bSwKKyAiSWYgdGhlIHRhcmdldCBoYXMgYSBkZWRpY2F0ZWQgZmxhZ3MgcmVnaXN0ZXIsIGFuZCBpdCBuZWVkcyB0byB1c2UgdGhlXAorIHBvc3QtcmVsb2FkIGNvbXBhcmlzb24gZWxpbWluYXRpb24gcGFzcywgdGhlbiB0aGlzIHZhbHVlIHNob3VsZCBiZSBzZXRcCisgYXBwcm9wcmlhdGVseS4iLAorIHVuc2lnbmVkIGludCwgSU5WQUxJRF9SRUdOVU0pCisKKy8qIENvbXB1dGUgYSAocGFydGlhbCkgY29zdCBmb3IgcnR4IFguICBSZXR1cm4gdHJ1ZSBpZiB0aGUgY29tcGxldGUKKyAgIGNvc3QgaGFzIGJlZW4gY29tcHV0ZWQsIGFuZCBmYWxzZSBpZiBzdWJleHByZXNzaW9ucyBzaG91bGQgYmUKKyAgIHNjYW5uZWQuICBJbiBlaXRoZXIgY2FzZSwgKlRPVEFMIGNvbnRhaW5zIHRoZSBjb3N0IHJlc3VsdC4gICovCisvKiBOb3RlIHRoYXQgQ09ERSBhbmQgT1VURVJfQ09ERSBvdWdodCB0byBiZSBSVFhfQ09ERSwgYnV0IHRoYXQncworICAgbm90IG5lY2Vzc2FyaWx5IGRlZmluZWQgYXQgdGhpcyBwb2ludC4gICovCitERUZIT09LCisocnR4X2Nvc3RzLAorICIiLAorIGJvb2wsIChydHggeCwgaW50IGNvZGUsIGludCBvdXRlcl9jb2RlLCBpbnQgb3BubywgaW50ICp0b3RhbCwgYm9vbCBzcGVlZCksCisgaG9va19ib29sX3J0eF9pbnRfaW50X2ludF9pbnRwX2Jvb2xfZmFsc2UpCisKKy8qIENvbXB1dGUgdGhlIGNvc3Qgb2YgWCwgdXNlZCBhcyBhbiBhZGRyZXNzLiAgTmV2ZXIgY2FsbGVkIHdpdGgKKyAgIGludmFsaWQgYWRkcmVzc2VzLiAgKi8KK0RFRkhPT0sKKyhhZGRyZXNzX2Nvc3QsCisgIiIsCisgaW50LCAocnR4IGFkZHJlc3MsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGFkZHJfc3BhY2VfdCBhcywgYm9vbCBzcGVlZCksCisgZGVmYXVsdF9hZGRyZXNzX2Nvc3QpCisKKy8qIFJldHVybiB3aGVyZSB0byBhbGxvY2F0ZSBwc2V1ZG8gZm9yIGEgZ2l2ZW4gaGFyZCByZWdpc3RlciBpbml0aWFsIHZhbHVlLiAgKi8KK0RFRkhPT0sKKyhhbGxvY2F0ZV9pbml0aWFsX3ZhbHVlLAorICIiLAorIHJ0eCwgKHJ0eCBoYXJkX3JlZyksIE5VTEwpCisKKy8qIFJldHVybiBub256ZXJvIGlmIGV2YWx1YXRpbmcgVU5TUEVDIFggbWlnaHQgY2F1c2UgYSB0cmFwLgorICAgRkxBR1MgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gcnRsYW5hbC5jOiBtYXlfdHJhcF9wXzEuICAqLworREVGSE9PSworKHVuc3BlY19tYXlfdHJhcF9wLAorICIiLAorIGludCwgKGNvbnN0X3J0eCB4LCB1bnNpZ25lZCBmbGFncyksCisgZGVmYXVsdF91bnNwZWNfbWF5X3RyYXBfcCkKKworLyogR2l2ZW4gYSByZWdpc3RlciwgdGhpcyBob29rIHNob3VsZCByZXR1cm4gYSBwYXJhbGxlbCBvZiByZWdpc3RlcnMKKyAgIHRvIHJlcHJlc2VudCB3aGVyZSB0byBmaW5kIHRoZSByZWdpc3RlciBwaWVjZXMuICBEZWZpbmUgdGhpcyBob29rCisgICBpZiB0aGUgcmVnaXN0ZXIgYW5kIGl0cyBtb2RlIGFyZSByZXByZXNlbnRlZCBpbiBEd2FyZiBpbgorICAgbm9uLWNvbnRpZ3VvdXMgbG9jYXRpb25zLCBvciBpZiB0aGUgcmVnaXN0ZXIgc2hvdWxkIGJlCisgICByZXByZXNlbnRlZCBpbiBtb3JlIHRoYW4gb25lIHJlZ2lzdGVyIGluIER3YXJmLiAgT3RoZXJ3aXNlLCB0aGlzCisgICBob29rIHNob3VsZCByZXR1cm4gTlVMTF9SVFguICAqLworREVGSE9PSworKGR3YXJmX3JlZ2lzdGVyX3NwYW4sCisgIiIsCisgcnR4LCAocnR4IHJlZyksCisgaG9va19ydHhfcnR4X251bGwpCisKKy8qIElmIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzIG5lZWRzIHRvIGZpbGwgaW4gdGFibGUKKyAgIGVudHJpZXMgbm90IGNvcnJlc3BvbmRpbmcgZGlyZWN0bHkgdG8gcmVnaXN0ZXJzIGJlbG93CisgICBGSVJTVF9QU0VVRE9fUkVHSVNURVIsIHRoaXMgaG9vayBzaG91bGQgZ2VuZXJhdGUgdGhlIG5lY2Vzc2FyeQorICAgY29kZSwgZ2l2ZW4gdGhlIGFkZHJlc3Mgb2YgdGhlIHRhYmxlLiAgKi8KK0RFRkhPT0sKKyhpbml0X2R3YXJmX3JlZ19zaXplc19leHRyYSwKKyAiIiwKKyB2b2lkLCAodHJlZSBhZGRyZXNzKSwKKyBob29rX3ZvaWRfdHJlZSkKKworLyogRmV0Y2ggdGhlIGZpeGVkIHJlZ2lzdGVyKHMpIHdoaWNoIGhvbGQgY29uZGl0aW9uIGNvZGVzLCBmb3IKKyAgIHRhcmdldHMgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gbG9vayBmb3IgZHVwbGljYXRlIGFzc2lnbm1lbnRzIHRvCisgICB0aGUgY29uZGl0aW9uIGNvZGVzLiAgVGhpcyBzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgc3VjaCBhCisgICByZWdpc3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIGFyZ3VtZW50cyBzaG91bGQgYmUgc2V0IHRvIHRoZQorICAgZml4ZWQgcmVnaXN0ZXIgbnVtYmVycy4gIFVwIHRvIHR3byBjb25kaXRpb24gY29kZSByZWdpc3RlcnMgYXJlCisgICBzdXBwb3J0ZWQuICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBmb3IgdGhpcyB0YXJnZXQsIHRoZSBpbnQgcG9pbnRlZAorICAgYXQgYnkgdGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgYmUgc2V0IHRvIC0xLiAgKi8KK0RFRkhPT0sKKyhmaXhlZF9jb25kaXRpb25fY29kZV9yZWdzLAorICIiLAorIGJvb2wsICh1bnNpZ25lZCBpbnQgKnAxLCB1bnNpZ25lZCBpbnQgKnAyKSwKKyBob29rX2Jvb2xfdWludHBfdWludHBfZmFsc2UpCisKKy8qIElmIHR3byBjb25kaXRpb24gY29kZSBtb2RlcyBhcmUgY29tcGF0aWJsZSwgcmV0dXJuIGEgY29uZGl0aW9uCisgICAgIGNvZGUgbW9kZSB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggYm90aCwgc3VjaCB0aGF0IGEgY29tcGFyaXNvbgorICAgICBkb25lIGluIHRoZSByZXR1cm5lZCBtb2RlIHdpbGwgd29yayBmb3IgYm90aCBvZiB0aGUgb3JpZ2luYWwKKyAgICAgbW9kZXMuICBJZiB0aGUgY29uZGl0aW9uIGNvZGUgbW9kZXMgYXJlIG5vdCBjb21wYXRpYmxlLCByZXR1cm4KKyAgICAgVk9JRG1vZGUuICAqLworREVGSE9PSworKGNjX21vZGVzX2NvbXBhdGlibGUsCisgIiIsCisgZW51bSBtYWNoaW5lX21vZGUsIChlbnVtIG1hY2hpbmVfbW9kZSBtMSwgZW51bSBtYWNoaW5lX21vZGUgbTIpLAorIGRlZmF1bHRfY2NfbW9kZXNfY29tcGF0aWJsZSkKKworLyogRG8gbWFjaGluZS1kZXBlbmRlbnQgY29kZSB0cmFuc2Zvcm1hdGlvbnMuICBDYWxsZWQganVzdCBiZWZvcmUKKyAgICAgZGVsYXllZC1icmFuY2ggc2NoZWR1bGluZy4gICovCitERUZIT09LCisobWFjaGluZV9kZXBlbmRlbnRfcmVvcmcsCisgIiIsCisgdm9pZCwgKHZvaWQpLCBOVUxMKQorCisvKiBDcmVhdGUgdGhlIF9fYnVpbHRpbl92YV9saXN0IHR5cGUuICAqLworREVGSE9PSworKGJ1aWxkX2J1aWx0aW5fdmFfbGlzdCwKKyAiIiwKKyB0cmVlLCAodm9pZCksCisgc3RkX2J1aWxkX2J1aWx0aW5fdmFfbGlzdCkKKworLyogRW51bWVyYXRlIHRoZSB2YSBsaXN0IHZhcmlhbnRzLiAgKi8KK0RFRkhPT0sKKyhlbnVtX3ZhX2xpc3RfcCwKKyAiIiwKKyBpbnQsIChpbnQgaWR4LCBjb25zdCBjaGFyICoqcG5hbWUsIHRyZWUgKnB0cmVlKSwKKyBOVUxMKQorCisvKiBHZXQgdGhlIGNmdW4vZm5kZWNsIGNhbGxpbmcgYWJpIF9fYnVpbHRpbl92YV9saXN0IHR5cGUuICAqLworREVGSE9PSworKGZuX2FiaV92YV9saXN0LAorICIiLAorIHRyZWUsICh0cmVlIGZuZGVjbCksCisgc3RkX2ZuX2FiaV92YV9saXN0KQorCisvKiBHZXQgdGhlIF9fYnVpbHRpbl92YV9saXN0IHR5cGUgZGVwZW5kZW50IG9uIGlucHV0IHR5cGUuICAqLworREVGSE9PSworKGNhbm9uaWNhbF92YV9saXN0X3R5cGUsCisgIiIsCisgdHJlZSwgKHRyZWUgdHlwZSksCisgc3RkX2Nhbm9uaWNhbF92YV9saXN0X3R5cGUpCisKKy8qID8/PyBEb2N1bWVudGluZyB0aGlzIGhvb2sgcmVxdWlyZXMgYSBHRkRMIGxpY2Vuc2UgZ3JhbnQuICAqLworREVGSE9PS19VTkRPQworKGV4cGFuZF9idWlsdGluX3ZhX3N0YXJ0LAorIkV4cGFuZCB0aGUgQGNvZGV7X19idWlsdGluX3ZhX3N0YXJ0fSBidWlsdGluLiIsCisgdm9pZCwgKHRyZWUgdmFsaXN0LCBydHggbmV4dGFyZyksIE5VTEwpCisKKy8qIEdpbXBsaWZpZXMgYSBWQV9BUkdfRVhQUi4gICovCitERUZIT09LCisoZ2ltcGxpZnlfdmFfYXJnX2V4cHIsCisgIiIsCisgdHJlZSwgKHRyZWUgdmFsaXN0LCB0cmVlIHR5cGUsIGdpbXBsZV9zZXEgKnByZV9wLCBnaW1wbGVfc2VxICpwb3N0X3ApLAorIHN0ZF9naW1wbGlmeV92YV9hcmdfZXhwcikKKworLyogVmFsaWRpdHktY2hlY2tpbmcgcm91dGluZXMgZm9yIFBDSCBmaWxlcywgdGFyZ2V0LXNwZWNpZmljLgorICAgZ2V0X3BjaF92YWxpZGl0eSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSBzdG9yZWQsCisgICBhbmQgc3RvcmVzIHRoZSBzaXplIGluIGl0cyBhcmd1bWVudC4gIHBjaF92YWxpZF9wIGdldHMgdGhlIHNhbWUKKyAgIGluZm9ybWF0aW9uIGJhY2sgYW5kIHJldHVybnMgTlVMTCBpZiB0aGUgUENIIGlzIHZhbGlkLAorICAgb3IgYW4gZXJyb3IgbWVzc2FnZSBpZiBub3QuICAqLworREVGSE9PSworKGdldF9wY2hfdmFsaWRpdHksCisgIiIsCisgdm9pZCAqLCAoc2l6ZV90ICpzeiksCisgZGVmYXVsdF9nZXRfcGNoX3ZhbGlkaXR5KQorCitERUZIT09LCisocGNoX3ZhbGlkX3AsCisgIiIsCisgY29uc3QgY2hhciAqLCAoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHN6KSwKKyBkZWZhdWx0X3BjaF92YWxpZF9wKQorCitERUZIT09LCisocHJlcGFyZV9wY2hfc2F2ZSwKKyAiQ2FsbGVkIGJlZm9yZSB3cml0aW5nIG91dCBhIFBDSCBmaWxlLiAgSWYgdGhlIHRhcmdldCBoYXMgc29tZVxuXAorZ2FyYmFnZS1jb2xsZWN0ZWQgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGluIGEgcGFydGljdWxhciBzdGF0ZSBvbiBQQ0ggbG9hZHMsXG5cCitpdCBjYW4gdXNlIHRoaXMgaG9vayB0byBlbmZvcmNlIHRoYXQgc3RhdGUuICBWZXJ5IGZldyB0YXJnZXRzIG5lZWRcblwKK3RvIGRvIGFueXRoaW5nIGhlcmUuIiwKKyB2b2lkLCAodm9pZCksCisgaG9va192b2lkX3ZvaWQpCisKKy8qIElmIG5vbm51bGwsIHRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgYSBQQ0ggZmlsZSB3aXRoIHRoZQorICAgZ2l2ZW4gc2V0IG9mIHRhcmdldCBmbGFncyBjYW4gYmUgdXNlZC4gIEl0IHJldHVybnMgTlVMTCBpZiBzbywKKyAgIG90aGVyd2lzZSBpdCByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UuICAqLworREVGSE9PSworKGNoZWNrX3BjaF90YXJnZXRfZmxhZ3MsCisgIiIsCisgY29uc3QgY2hhciAqLCAoaW50IHBjaF9mbGFncyksIE5VTEwpCisKKy8qIFRydWUgaWYgdGhlIGNvbXBpbGVyIHNob3VsZCBnaXZlIGFuIGVudW0gdHlwZSBvbmx5IGFzIG1hbnkKKyAgIGJ5dGVzIGFzIGl0IHRha2VzIHRvIHJlcHJlc2VudCB0aGUgcmFuZ2Ugb2YgcG9zc2libGUgdmFsdWVzIG9mCisgICB0aGF0IHR5cGUuICAqLworREVGSE9PSworKGRlZmF1bHRfc2hvcnRfZW51bXMsCisgIiIsCisgYm9vbCwgKHZvaWQpLAorIGhvb2tfYm9vbF92b2lkX2ZhbHNlKQorCisvKiBUaGlzIHRhcmdldCBob29rIHJldHVybnMgYW4gcnR4IHRoYXQgaXMgdXNlZCB0byBzdG9yZSB0aGUgYWRkcmVzcworICAgb2YgdGhlIGN1cnJlbnQgZnJhbWUgaW50byB0aGUgYnVpbHQtaW4gc2V0am1wIGJ1ZmZlci4gICovCitERUZIT09LCisoYnVpbHRpbl9zZXRqbXBfZnJhbWVfdmFsdWUsCisgIiIsCisgcnR4LCAodm9pZCksCisgZGVmYXVsdF9idWlsdGluX3NldGptcF9mcmFtZV92YWx1ZSkKKworLyogVGhpcyB0YXJnZXQgaG9vayBzaG91bGQgYWRkIFNUUklOR19DU1QgdHJlZXMgZm9yIGFueSBoYXJkIHJlZ3MKKyAgIHRoZSBwb3J0IHdpc2hlcyB0byBhdXRvbWF0aWNhbGx5IGNsb2JiZXIgZm9yIGFuIGFzbS4gICovCitERUZIT09LCisobWRfYXNtX2Nsb2JiZXJzLAorICIiLAorIHRyZWUsICh0cmVlIG91dHB1dHMsIHRyZWUgaW5wdXRzLCB0cmVlIGNsb2JiZXJzKSwKKyBob29rX3RyZWVfdHJlZV90cmVlX3RyZWVfM3JkX2lkZW50aXR5KQorCisvKiBUaGlzIHRhcmdldCBob29rIGFsbG93cyB0aGUgYmFja2VuZCB0byBzcGVjaWZ5IGEgY2FsbGluZyBjb252ZW50aW9uCisgICBpbiB0aGUgZGVidWcgaW5mb3JtYXRpb24uICBUaGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHJldHVybnMgYW4KKyAgIGVudW0gZHdhcmZfY2FsbGluZ19jb252ZW50aW9uLCBidXQgYmVjYXVzZSBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICAgYW5kIG5vdCB3YW50aW5nIHRvIGluY2x1ZGUgZHdhcmYyLmggZXZlcnl3aGVyZSB0YXJnZXQuaCBpcyBpbmNsdWRlZAorICAgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGRlY2xhcmVkIGFzIGFuIGludC4gICovCitERUZIT09LCisoZHdhcmZfY2FsbGluZ19jb252ZW50aW9uLAorICIiLAorIGludCwgKGNvbnN0X3RyZWUgZnVuY3Rpb24pLAorIGhvb2tfaW50X2NvbnN0X3RyZWVfMCkKKworLyogVGhpcyB0YXJnZXQgaG9vayBhbGxvd3MgdGhlIGJhY2tlbmQgdG8gZW1pdCBmcmFtZS1yZWxhdGVkIGluc25zIHRoYXQKKyAgIGNvbnRhaW4gVU5TUEVDcyBvciBVTlNQRUNfVk9MQVRJTEVzLiAgVGhlIGNhbGwgZnJhbWUgZGVidWdnaW5nIGluZm8KKyAgIGVuZ2luZSB3aWxsIGludm9rZSBpdCBvbiBpbnNucyBvZiB0aGUgZm9ybQorICAgICAoc2V0IChyZWcpICh1bnNwZWMgWy4uLl0gVU5TUEVDX0lOREVYKSkKKyAgIGFuZAorICAgICAoc2V0IChyZWcpICh1bnNwZWNfdm9sYXRpbGUgWy4uLl0gVU5TUEVDVl9JTkRFWCkpCisgICB0byBsZXQgdGhlIGJhY2tlbmQgZW1pdCB0aGUgY2FsbCBmcmFtZSBpbnN0cnVjdGlvbnMuICAqLworREVGSE9PSworKGR3YXJmX2hhbmRsZV9mcmFtZV91bnNwZWMsCisgIiIsCisgdm9pZCwgKGNvbnN0IGNoYXIgKmxhYmVsLCBydHggcGF0dGVybiwgaW50IGluZGV4KSwgTlVMTCkKKworLyogPz8/IERvY3VtZW50aW5nIHRoaXMgaG9vayByZXF1aXJlcyBhIEdGREwgbGljZW5zZSBncmFudC4gICovCitERUZIT09LX1VORE9DCisoc3RkYXJnX29wdGltaXplX2hvb2ssCisiUGVyZm9ybSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY2hlY2tpbmcgb2Ygc3RhdGVtZW50cyBnaW1wbGlmaWVkXAorIGZyb20gQGNvZGV7VkFfQVJHX0VYUFJ9LiAgQHZhcntzdG10fSBpcyB0aGUgc3RhdGVtZW50LiAgUmV0dXJucyB0cnVlIGlmXAorIHRoZSBzdGF0ZW1lbnQgZG9lc24ndCBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yIEBjb2Rle3ZhX2xpc3R9IHJlZmVyZW5jZXMuIiwKKyBib29sLCAoc3RydWN0IHN0ZGFyZ19pbmZvICphaSwgY29uc3RfZ2ltcGxlIHN0bXQpLCBOVUxMKQorCisvKiBUaGlzIHRhcmdldCBob29rIGFsbG93cyB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBvdmVycmlkZSB0aGUgREVDTAorICAgdGhhdCByZXByZXNlbnRzIHRoZSBleHRlcm5hbCB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBzdGFjaworICAgcHJvdGVjdGlvbiBndWFyZCB2YXJpYWJsZS4gIFRoZSB0eXBlIG9mIHRoaXMgREVDTCBpcyBwdHJfdHlwZV9ub2RlLiAgKi8KK0RFRkhPT0sKKyhzdGFja19wcm90ZWN0X2d1YXJkLAorICIiLAorIHRyZWUsICh2b2lkKSwKKyBkZWZhdWx0X3N0YWNrX3Byb3RlY3RfZ3VhcmQpCisKKy8qIFRoaXMgdGFyZ2V0IGhvb2sgYWxsb3dzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIG92ZXJyaWRlIHRoZSBDQUxMX0VYUFIKKyAgIHRoYXQgaXMgaW52b2tlZCB3aGVuIGEgY2hlY2sgdnMgdGhlIGd1YXJkIHZhcmlhYmxlIGZhaWxzLiAgKi8KK0RFRkhPT0sKKyhzdGFja19wcm90ZWN0X2ZhaWwsCisgIiIsCisgdHJlZSwgKHZvaWQpLAorIGRlZmF1bHRfZXh0ZXJuYWxfc3RhY2tfcHJvdGVjdF9mYWlsKQorCisvKiBSZXR1cm5zIE5VTEwgaWYgdGFyZ2V0IHN1cHBvcnRzIHRoZSBpbnNuIHdpdGhpbiBhIGRvbG9vcCBibG9jaywKKyAgIG90aGVyd2lzZSBpdCByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UuICAqLworREVGSE9PSworKGludmFsaWRfd2l0aGluX2RvbG9vcCwKKyAiIiwKKyBjb25zdCBjaGFyICosIChjb25zdF9ydHggaW5zbiksCisgZGVmYXVsdF9pbnZhbGlkX3dpdGhpbl9kb2xvb3ApCisKKy8qIFJldHVybnMgdHJ1ZSBmb3IgYSBsZWdpdGltYXRlIGNvbWJpbmVkIGluc24uICAqLworREVGSE9PSworKGxlZ2l0aW1hdGVfY29tYmluZWRfaW5zbiwKKyJUYWtlIGFuIGluc3RydWN0aW9uIGluIEB2YXJ7aW5zbn0gYW5kIHJldHVybiBAY29kZXtmYWxzZX0gaWYgdGhlIGluc3RydWN0aW9uXAorIGlzIG5vdCBhcHByb3ByaWF0ZSBhcyBhIGNvbWJpbmF0aW9uIG9mIHR3byBvciBtb3JlIGluc3RydWN0aW9ucy4gIFRoZVwKKyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbGwgaW5zdHJ1Y3Rpb25zLiIsCisgYm9vbCwgKHJ0eCBpbnNuKSwKKyBob29rX2Jvb2xfcnR4X3RydWUpCisKK0RFRkhPT0sKKyh2YWxpZF9kbGxpbXBvcnRfYXR0cmlidXRlX3AsCisiQHZhcntkZWNsfSBpcyBhIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIHdpdGggQGNvZGV7X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSl9XAorIHNwZWNpZmllZC4gIFVzZSB0aGlzIGhvb2sgaWYgdGhlIHRhcmdldCBuZWVkcyB0byBhZGQgZXh0cmEgdmFsaWRhdGlvblwKKyBjaGVja3MgdG8gQGNvZGV7aGFuZGxlX2RsbF9hdHRyaWJ1dGV9LiIsCisgYm9vbCwgKGNvbnN0X3RyZWUgZGVjbCksCisgaG9va19ib29sX2NvbnN0X3RyZWVfdHJ1ZSkKKworLyogSWYgbm9uLXplcm8sIGFsaWduIGNvbnN0YW50IGFuY2hvcnMgaW4gQ1NFIHRvIGEgbXVsdGlwbGUgb2YgdGhpcworICAgdmFsdWUuICAqLworREVGSE9PS1BPRAorKGNvbnN0X2FuY2hvciwKKyAiIiwKKyB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCAwKQorCisvKiBEZWZpbmVzLCB3aGljaCB0YXJnZXQtZGVwZW5kZW50IGJpdHMgKHVwcGVyIDE2KSBhcmUgdXNlZCBieSBwb3J0ICAqLworREVGSE9PSworKG1lbW1vZGVsX2NoZWNrLAorICIiLAorIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHZhbCksIE5VTEwpCisKKy8qIERlZmluZXMgYW4gb2Zmc2V0IGJpdHdpc2Ugb3JlZCBpbnRvIHNoaWZ0ZWQgYWRkcmVzcyB0byBnZXQgY29ycmVzcG9uZGluZworICAgQWRkcmVzcyBTYW5pdGl6ZXIgc2hhZG93IGFkZHJlc3MsIG9yIC0xIGlmIEFkZHJlc3MgU2FuaXRpemVyIGlzIG5vdAorICAgc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQuICAqLworREVGSE9PSworKGFzYW5fc2hhZG93X29mZnNldCwKKyAiUmV0dXJuIHRoZSBvZmZzZXQgYml0d2lzZSBvcmVkIGludG8gc2hpZnRlZCBhZGRyZXNzIHRvIGdldCBjb3JyZXNwb25kaW5nXG5cCitBZGRyZXNzIFNhbml0aXplciBzaGFkb3cgbWVtb3J5IGFkZHJlc3MuICBOVUxMIGlmIEFkZHJlc3MgU2FuaXRpemVyIGlzIG5vdFxuXAorc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQuIiwKKyB1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCAodm9pZCksCisgTlVMTCkKKworLyogRnVuY3Rpb25zIHJlbGF0aW5nIHRvIGNhbGxzIC0gYXJndW1lbnQgcGFzc2luZywgcmV0dXJucywgZXRjLiAgKi8KKy8qIE1lbWJlcnMgb2Ygc3RydWN0IGNhbGwgaGF2ZSBubyBzcGVjaWFsIG1hY3JvIHByZWZpeC4gICovCitIT09LX1ZFQ1RPUiAoVEFSR0VUX0NBTExTLCBjYWxscykKKworREVGSE9PSworKHByb21vdGVfZnVuY3Rpb25fbW9kZSwKKyAiIiwKKyBlbnVtIG1hY2hpbmVfbW9kZSwgKGNvbnN0X3RyZWUgdHlwZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50ICpwdW5zaWduZWRwLAorCQkgICAgIGNvbnN0X3RyZWUgZnVudHlwZSwgaW50IGZvcl9yZXR1cm4pLAorIGRlZmF1bHRfcHJvbW90ZV9mdW5jdGlvbl9tb2RlKQorCitERUZIT09LCisocHJvbW90ZV9wcm90b3R5cGVzLAorICIiLAorIGJvb2wsIChjb25zdF90cmVlIGZudHlwZSksCisgaG9va19ib29sX2NvbnN0X3RyZWVfZmFsc2UpCisKK0RFRkhPT0sKKyhzdHJ1Y3RfdmFsdWVfcnR4LAorICIiLAorIHJ0eCwgKHRyZWUgZm5kZWNsLCBpbnQgaW5jb21pbmcpLAorIGhvb2tfcnR4X3RyZWVfaW50X251bGwpCitERUZIT09LCisocmV0dXJuX2luX21lbW9yeSwKKyAiIiwKKyBib29sLCAoY29uc3RfdHJlZSB0eXBlLCBjb25zdF90cmVlIGZudHlwZSksCisgZGVmYXVsdF9yZXR1cm5faW5fbWVtb3J5KQorCitERUZIT09LCisocmV0dXJuX2luX21zYiwKKyAiIiwKKyBib29sLCAoY29uc3RfdHJlZSB0eXBlKSwKKyBob29rX2Jvb2xfY29uc3RfdHJlZV9mYWxzZSkKKworLyogUmV0dXJuIHRydWUgaWYgYSBwYXJhbWV0ZXIgbXVzdCBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiAgVFlQRSBtYXkKKyAgIGJlIG51bGwgaWYgdGhpcyBpcyBhIGxpYmNhbGwuICBDQSBtYXkgYmUgbnVsbCBpZiB0aGlzIHF1ZXJ5IGlzCisgICBmcm9tIF9fYnVpbHRpbl92YV9hcmcuICAqLworREVGSE9PSworKHBhc3NfYnlfcmVmZXJlbmNlLAorICIiLAorIGJvb2wsCisgKGN1bXVsYXRpdmVfYXJnc190IGN1bSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgY29uc3RfdHJlZSB0eXBlLCBib29sIG5hbWVkKSwKKyBob29rX2Jvb2xfQ1VNVUxBVElWRV9BUkdTX21vZGVfdHJlZV9ib29sX2ZhbHNlKQorCitERUZIT09LCisoZXhwYW5kX2J1aWx0aW5fc2F2ZXJlZ3MsCisgIiIsCisgcnR4LCAodm9pZCksCisgZGVmYXVsdF9leHBhbmRfYnVpbHRpbl9zYXZlcmVncykKKworLyogUmV0dXJucyBwcmV0ZW5kX2FyZ3VtZW50X3NpemUuICAqLworREVGSE9PSworKHNldHVwX2luY29taW5nX3ZhcmFyZ3MsCisgIiIsCisgdm9pZCwgKGN1bXVsYXRpdmVfYXJnc190IGFyZ3Nfc29fZmFyLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCB0cmVlIHR5cGUsCisJaW50ICpwcmV0ZW5kX2FyZ3Nfc2l6ZSwgaW50IHNlY29uZF90aW1lKSwKKyBkZWZhdWx0X3NldHVwX2luY29taW5nX3ZhcmFyZ3MpCisKK0RFRkhPT0sKKyhzdHJpY3RfYXJndW1lbnRfbmFtaW5nLAorICIiLAorIGJvb2wsIChjdW11bGF0aXZlX2FyZ3NfdCBjYSksCisgaG9va19ib29sX0NVTVVMQVRJVkVfQVJHU19mYWxzZSkKKworLyogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB1c2UKKyAgIHRhcmdldG0uY2FsbHMuc2V0dXBfaW5jb21pbmdfdmFyYXJncygpIGFuZC9vcgorICAgdGFyZ2V0bS5jYWxscy5zdHJpY3RfYXJndW1lbnRfbmFtaW5nKCkuICAqLworREVGSE9PSworKHByZXRlbmRfb3V0Z29pbmdfdmFyYXJnc19uYW1lZCwKKyAiIiwKKyBib29sLCAoY3VtdWxhdGl2ZV9hcmdzX3QgY2EpLAorIGRlZmF1bHRfcHJldGVuZF9vdXRnb2luZ192YXJhcmdzX25hbWVkKQorCisvKiBHaXZlbiBhIGNvbXBsZXggdHlwZSBULCByZXR1cm4gdHJ1ZSBpZiBhIHBhcmFtZXRlciBvZiB0eXBlIFQKKyAgIHNob3VsZCBiZSBwYXNzZWQgYXMgdHdvIHNjYWxhcnMuICAqLworREVGSE9PSworKHNwbGl0X2NvbXBsZXhfYXJnLAorICIiLAorIGJvb2wsIChjb25zdF90cmVlIHR5cGUpLCBOVUxMKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0eXBlIFQsIG1vZGUgTU9ERSwgbWF5IG5vdCBiZSBwYXNzZWQgaW4gcmVnaXN0ZXJzLAorICAgYnV0IG11c3QgYmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gICovCisvKiA/Pz8gVGhpcyBwcmVkaWNhdGUgc2hvdWxkIGJlIGFwcGxpZWQgc3RyaWN0bHkgYWZ0ZXIgcGFzcy1ieS1yZWZlcmVuY2UuCisgICBOZWVkIGF1ZGl0IHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuICAqLworREVGSE9PSworKG11c3RfcGFzc19pbl9zdGFjaywKKyAiIiwKKyBib29sLCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgY29uc3RfdHJlZSB0eXBlKSwKKyBtdXN0X3Bhc3NfaW5fc3RhY2tfdmFyX3NpemVfb3JfcGFkKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0eXBlIFRZUEUsIG1vZGUgTU9ERSwgd2hpY2ggaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSwKKyAgIHNob3VsZCBoYXZlIHRoZSBvYmplY3QgY29weSBnZW5lcmF0ZWQgYnkgdGhlIGNhbGxlZSByYXRoZXIgdGhhbgorICAgdGhlIGNhbGxlci4gIEl0IGlzIG5ldmVyIGNhbGxlZCBmb3IgVFlQRSByZXF1aXJpbmcgY29uc3RydWN0b3JzLiAgKi8KK0RFRkhPT0sKKyhjYWxsZWVfY29waWVzLAorICIiLAorIGJvb2wsCisgKGN1bXVsYXRpdmVfYXJnc190IGN1bSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgY29uc3RfdHJlZSB0eXBlLCBib29sIG5hbWVkKSwKKyBob29rX2Jvb2xfQ1VNVUxBVElWRV9BUkdTX21vZGVfdHJlZV9ib29sX2ZhbHNlKQorCisvKiBSZXR1cm4gemVybyBmb3IgYXJndW1lbnRzIHBhc3NlZCBlbnRpcmVseSBvbiB0aGUgc3RhY2sgb3IgZW50aXJlbHkKKyAgIGluIHJlZ2lzdGVycy4gIElmIHBhc3NlZCBpbiBib3RoLCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBwYXNzZWQKKyAgIGluIHJlZ2lzdGVyczsgdGhlIGJhbGFuY2UgaXMgdGhlcmVmb3JlIHBhc3NlZCBvbiB0aGUgc3RhY2suICAqLworREVGSE9PSworKGFyZ19wYXJ0aWFsX2J5dGVzLAorICIiLAorIGludCwgKGN1bXVsYXRpdmVfYXJnc190IGN1bSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgdHJlZSB0eXBlLCBib29sIG5hbWVkKSwKKyBob29rX2ludF9DVU1VTEFUSVZFX0FSR1NfbW9kZV90cmVlX2Jvb2xfMCkKKworLyogVXBkYXRlIHRoZSBzdGF0ZSBpbiBDQSB0byBhZHZhbmNlIHBhc3QgYW4gYXJndW1lbnQgaW4gdGhlCisgICBhcmd1bWVudCBsaXN0LiAgVGhlIHZhbHVlcyBNT0RFLCBUWVBFLCBhbmQgTkFNRUQgZGVzY3JpYmUgdGhhdAorICAgYXJndW1lbnQuICAqLworREVGSE9PSworKGZ1bmN0aW9uX2FyZ19hZHZhbmNlLAorICIiLAorIHZvaWQsCisgKGN1bXVsYXRpdmVfYXJnc190IGNhLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdF90cmVlIHR5cGUsIGJvb2wgbmFtZWQpLAorIGRlZmF1bHRfZnVuY3Rpb25fYXJnX2FkdmFuY2UpCisKKy8qIFJldHVybiB6ZXJvIGlmIHRoZSBhcmd1bWVudCBkZXNjcmliZWQgYnkgdGhlIHN0YXRlIG9mIENBIHNob3VsZAorICAgYmUgcGxhY2VkIG9uIGEgc3RhY2ssIG9yIGEgaGFyZCByZWdpc3RlciBpbiB3aGljaCB0byBzdG9yZSB0aGUKKyAgIGFyZ3VtZW50LiAgVGhlIHZhbHVlcyBNT0RFLCBUWVBFLCBhbmQgTkFNRUQgZGVzY3JpYmUgdGhhdAorICAgYXJndW1lbnQuICAqLworREVGSE9PSworKGZ1bmN0aW9uX2FyZywKKyAiIiwKKyBydHgsIChjdW11bGF0aXZlX2FyZ3NfdCBjYSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgY29uc3RfdHJlZSB0eXBlLAorICAgICAgIGJvb2wgbmFtZWQpLAorIGRlZmF1bHRfZnVuY3Rpb25fYXJnKQorCisvKiBMaWtld2lzZSwgYnV0IGZvciBtYWNoaW5lcyB3aXRoIHJlZ2lzdGVyIHdpbmRvd3MuICBSZXR1cm4gdGhlCisgICBsb2NhdGlvbiB3aGVyZSB0aGUgYXJndW1lbnQgd2lsbCBhcHBlYXIgdG8gdGhlIGNhbGxlZS4gICovCitERUZIT09LCisoZnVuY3Rpb25faW5jb21pbmdfYXJnLAorICIiLAorIHJ0eCwgKGN1bXVsYXRpdmVfYXJnc190IGNhLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdF90cmVlIHR5cGUsCisgICAgICAgYm9vbCBuYW1lZCksCisgZGVmYXVsdF9mdW5jdGlvbl9pbmNvbWluZ19hcmcpCisKK0RFRkhPT0sKKyhmdW5jdGlvbl9hcmdfYm91bmRhcnksCisgIiIsCisgdW5zaWduZWQgaW50LCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgY29uc3RfdHJlZSB0eXBlKSwKKyBkZWZhdWx0X2Z1bmN0aW9uX2FyZ19ib3VuZGFyeSkKKworREVGSE9PSworKGZ1bmN0aW9uX2FyZ19yb3VuZF9ib3VuZGFyeSwKKyAiTm9ybWFsbHksIHRoZSBzaXplIG9mIGFuIGFyZ3VtZW50IGlzIHJvdW5kZWQgdXAgdG8gQGNvZGV7UEFSTV9CT1VOREFSWX0sXG5cCit3aGljaCBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBob29rLiAgWW91IGNhbiBkZWZpbmUgdGhpcyBob29rIHRvXG5cCityZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgaWYgYW4gYXJndW1lbnQgc2l6ZSBtdXN0IGJlIHJvdW5kZWQgdG8gYSBsYXJnZXJcblwKK3ZhbHVlLiIsCisgdW5zaWduZWQgaW50LCAoZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgY29uc3RfdHJlZSB0eXBlKSwKKyBkZWZhdWx0X2Z1bmN0aW9uX2FyZ19yb3VuZF9ib3VuZGFyeSkKKworLyogUmV0dXJuIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2Ugc3RyaW5nIGlmIGZ1bmN0aW9uIHdpdGhvdXQgYSBwcm90b3R5cGUKKyAgIGlzIG5vdCBhbGxvd2VkIGZvciB0aGlzICd2YWwnIGFyZ3VtZW50OyBOVUxMIG90aGVyd2lzZS4gKi8KK0RFRkhPT0sKKyhpbnZhbGlkX2FyZ19mb3JfdW5wcm90b3R5cGVkX2ZuLAorICIiLAorIGNvbnN0IGNoYXIgKiwgKGNvbnN0X3RyZWUgdHlwZWxpc3QsIGNvbnN0X3RyZWUgZnVuY2RlY2wsIGNvbnN0X3RyZWUgdmFsKSwKKyBob29rX2ludmFsaWRfYXJnX2Zvcl91bnByb3RvdHlwZWRfZm4pCisKKy8qIFJldHVybiBhbiBydHggZm9yIHRoZSByZXR1cm4gdmFsdWUgbG9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uCisgICBzcGVjaWZpZWQgYnkgRk5fREVDTF9PUl9UWVBFIHdpdGggYSByZXR1cm4gdHlwZSBvZiBSRVRfVFlQRS4gICovCitERUZIT09LCisoZnVuY3Rpb25fdmFsdWUsCisgIiIsCisgcnR4LCAoY29uc3RfdHJlZSByZXRfdHlwZSwgY29uc3RfdHJlZSBmbl9kZWNsX29yX3R5cGUsIGJvb2wgb3V0Z29pbmcpLAorIGRlZmF1bHRfZnVuY3Rpb25fdmFsdWUpCisKKy8qIFJldHVybiB0aGUgcnR4IGZvciB0aGUgcmVzdWx0IG9mIGEgbGliY2FsbCBvZiBtb2RlIE1PREUsCisgICBjYWxsaW5nIHRoZSBmdW5jdGlvbiBGTl9OQU1FLiAgKi8KK0RFRkhPT0sKKyhsaWJjYWxsX3ZhbHVlLAorICIiLAorIHJ0eCwgKGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGNvbnN0X3J0eCBmdW4pLAorIGRlZmF1bHRfbGliY2FsbF92YWx1ZSkKKworLyogUmV0dXJuIHRydWUgaWYgUkVHTk8gaXMgYSBwb3NzaWJsZSByZWdpc3RlciBudW1iZXIgZm9yCisgICBhIGZ1bmN0aW9uIHZhbHVlIGFzIHNlZW4gYnkgdGhlIGNhbGxlci4gICovCitERUZIT09LCisoZnVuY3Rpb25fdmFsdWVfcmVnbm9fcCwKKyAiIiwKKyBib29sLCAoY29uc3QgdW5zaWduZWQgaW50IHJlZ25vKSwKKyBkZWZhdWx0X2Z1bmN0aW9uX3ZhbHVlX3JlZ25vX3ApCisKKy8qID8/PyBEb2N1bWVudGluZyB0aGlzIGhvb2sgcmVxdWlyZXMgYSBHRkRMIGxpY2Vuc2UgZ3JhbnQuICAqLworREVGSE9PS19VTkRPQworKGludGVybmFsX2FyZ19wb2ludGVyLAorIlJldHVybiBhbiBydHggZm9yIHRoZSBhcmd1bWVudCBwb2ludGVyIGluY29taW5nIHRvIHRoZVwKKyBjdXJyZW50IGZ1bmN0aW9uLiIsCisgcnR4LCAodm9pZCksCisgZGVmYXVsdF9pbnRlcm5hbF9hcmdfcG9pbnRlcikKKworLyogVXBkYXRlIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHN0YWNrIGJvdW5kYXJ5IGlmIG5lZWRlZC4gICovCitERUZIT09LCisodXBkYXRlX3N0YWNrX2JvdW5kYXJ5LAorICIiLAorIHZvaWQsICh2b2lkKSwgTlVMTCkKKworLyogSGFuZGxlIHN0YWNrIGFsaWdubWVudCBhbmQgcmV0dXJuIGFuIHJ0eCBmb3IgRHluYW1pYyBSZWFsaWduCisgICBBcmd1bWVudCBQb2ludGVyIGlmIG5lY2Vzc2FyeS4gICovCitERUZIT09LCisoZ2V0X2RyYXBfcnR4LAorICIiLAorIHJ0eCwgKHZvaWQpLCBOVUxMKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBhbGwgZnVuY3Rpb24gcGFyYW1ldGVycyBzaG91bGQgYmUgc3BpbGxlZCB0byB0aGUKKyAgIHN0YWNrLiAgKi8KK0RFRkhPT0sKKyhhbGxvY2F0ZV9zdGFja19zbG90c19mb3JfYXJncywKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfdHJ1ZSkKKworLyogUmV0dXJuIGFuIHJ0eCBmb3IgdGhlIHN0YXRpYyBjaGFpbiBmb3IgRk5ERUNMLiAgSWYgSU5DT01JTkdfUCBpcyB0cnVlLAorICAgICAgIHRoZW4gaXQgc2hvdWxkIGJlIGZvciB0aGUgY2FsbGVlOyBvdGhlcndpc2UgZm9yIHRoZSBjYWxsZXIuICAqLworREVGSE9PSworKHN0YXRpY19jaGFpbiwKKyAiIiwKKyBydHgsIChjb25zdF90cmVlIGZuZGVjbCwgYm9vbCBpbmNvbWluZ19wKSwKKyBkZWZhdWx0X3N0YXRpY19jaGFpbikKKworLyogRmlsbCBpbiB0aGUgdHJhbXBvbGluZSBhdCBNRU0gd2l0aCBhIGNhbGwgdG8gRk5ERUNMIGFuZCBhCisgICBzdGF0aWMgY2hhaW4gdmFsdWUgb2YgQ0hBSU4uICAqLworREVGSE9PSworKHRyYW1wb2xpbmVfaW5pdCwKKyAiIiwKKyB2b2lkLCAocnR4IG1fdHJhbXAsIHRyZWUgZm5kZWNsLCBydHggc3RhdGljX2NoYWluKSwKKyBkZWZhdWx0X3RyYW1wb2xpbmVfaW5pdCkKKworLyogQWRqdXN0IHRoZSBhZGRyZXNzIG9mIHRoZSB0cmFtcG9saW5lIGluIGEgdGFyZ2V0LXNwZWNpZmljIHdheS4gICovCitERUZIT09LCisodHJhbXBvbGluZV9hZGp1c3RfYWRkcmVzcywKKyAiIiwKKyBydHgsIChydHggYWRkciksIE5VTEwpCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGl0cyBvd24gYXJndW1lbnRzIHRoYXQgYSBmdW5jdGlvbgorICAgcG9wcyBvbiByZXR1cm5pbmcsIG9yIDAgaWYgdGhlIGZ1bmN0aW9uIHBvcHMgbm8gYXJndW1lbnRzIGFuZCB0aGUKKyAgIGNhbGxlciBtdXN0IHRoZXJlZm9yZSBwb3AgdGhlbSBhbGwgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMuICAqLworLyogPz8/IHRtLnRleGkgaGFzIG5vIHR5cGVzIGZvciB0aGUgcGFyYW1ldGVycy4gICovCitERUZIT09LCisocmV0dXJuX3BvcHNfYXJncywKKyAiIiwKKyBpbnQsICh0cmVlIGZ1bmRlY2wsIHRyZWUgZnVudHlwZSwgaW50IHNpemUpLAorIGRlZmF1bHRfcmV0dXJuX3BvcHNfYXJncykKKworLyogUmV0dXJuIGEgbW9kZSB3aWRlIGVub3VnaCB0byBjb3B5IGFueSBmdW5jdGlvbiB2YWx1ZSB0aGF0IG1pZ2h0IGJlCisgICByZXR1cm5lZC4gICovCitERUZIT09LCisoZ2V0X3Jhd19yZXN1bHRfbW9kZSwKKyAiVGhpcyB0YXJnZXQgaG9vayByZXR1cm5zIHRoZSBtb2RlIHRvIGJlIHVzZWQgd2hlbiBhY2Nlc3NpbmcgcmF3IHJldHVyblwKKyByZWdpc3RlcnMgaW4gQGNvZGV7X19idWlsdGluX3JldHVybn0uICBEZWZpbmUgdGhpcyBtYWNybyBpZiB0aGUgdmFsdWVcCisgaW4gQHZhcntyZWdfcmF3X21vZGV9IGlzIG5vdCBjb3JyZWN0LiIsCisgZW51bSBtYWNoaW5lX21vZGUsIChpbnQgcmVnbm8pLAorIGRlZmF1bHRfZ2V0X3JlZ19yYXdfbW9kZSkKKworLyogUmV0dXJuIGEgbW9kZSB3aWRlIGVub3VnaCB0byBjb3B5IGFueSBhcmd1bWVudCB2YWx1ZSB0aGF0IG1pZ2h0IGJlCisgICBwYXNzZWQuICAqLworREVGSE9PSworKGdldF9yYXdfYXJnX21vZGUsCisgIlRoaXMgdGFyZ2V0IGhvb2sgcmV0dXJucyB0aGUgbW9kZSB0byBiZSB1c2VkIHdoZW4gYWNjZXNzaW5nIHJhdyBhcmd1bWVudFwKKyByZWdpc3RlcnMgaW4gQGNvZGV7X19idWlsdGluX2FwcGx5X2FyZ3N9LiAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgdGhlIHZhbHVlXAorIGluIEB2YXJ7cmVnX3Jhd19tb2RlfSBpcyBub3QgY29ycmVjdC4iLAorIGVudW0gbWFjaGluZV9tb2RlLCAoaW50IHJlZ25vKSwKKyBkZWZhdWx0X2dldF9yZWdfcmF3X21vZGUpCisKK0hPT0tfVkVDVE9SX0VORCAoY2FsbHMpCisKKy8qIFJldHVybiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIHN0cmluZyBpZiBjb252ZXJzaW9uIGZyb20gRlJPTVRZUEUKKyAgIHRvIFRPVFlQRSBpcyBub3QgYWxsb3dlZCwgTlVMTCBvdGhlcndpc2UuICAqLworREVGSE9PSworKGludmFsaWRfY29udmVyc2lvbiwKKyAiIiwKKyBjb25zdCBjaGFyICosIChjb25zdF90cmVlIGZyb210eXBlLCBjb25zdF90cmVlIHRvdHlwZSksCisgaG9va19jb25zdGNoYXJwdHJfY29uc3RfdHJlZV9jb25zdF90cmVlX251bGwpCisKKy8qIFJldHVybiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIHN0cmluZyBpZiB0aGUgdW5hcnkgb3BlcmF0aW9uIE9QIGlzCisgICBub3QgcGVybWl0dGVkIG9uIFRZUEUsIE5VTEwgb3RoZXJ3aXNlLiAgKi8KK0RFRkhPT0sKKyhpbnZhbGlkX3VuYXJ5X29wLAorICIiLAorIGNvbnN0IGNoYXIgKiwgKGludCBvcCwgY29uc3RfdHJlZSB0eXBlKSwKKyBob29rX2NvbnN0Y2hhcnB0cl9pbnRfY29uc3RfdHJlZV9udWxsKQorCisvKiBSZXR1cm4gdGhlIGRpYWdub3N0aWMgbWVzc2FnZSBzdHJpbmcgaWYgdGhlIGJpbmFyeSBvcGVyYXRpb24gT1AKKyAgIGlzIG5vdCBwZXJtaXR0ZWQgb24gVFlQRTEgYW5kIFRZUEUyLCBOVUxMIG90aGVyd2lzZS4gICovCitERUZIT09LCisoaW52YWxpZF9iaW5hcnlfb3AsCisgIiIsCisgY29uc3QgY2hhciAqLCAoaW50IG9wLCBjb25zdF90cmVlIHR5cGUxLCBjb25zdF90cmVlIHR5cGUyKSwKKyBob29rX2NvbnN0Y2hhcnB0cl9pbnRfY29uc3RfdHJlZV9jb25zdF90cmVlX251bGwpCisKKy8qIFJldHVybiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIHN0cmluZyBpZiBUWVBFIGlzIG5vdCB2YWxpZCBhcyBhCisgICBmdW5jdGlvbiBwYXJhbWV0ZXIgdHlwZSwgTlVMTCBvdGhlcndpc2UuICAqLworREVGSE9PSworKGludmFsaWRfcGFyYW1ldGVyX3R5cGUsCisgIiIsCisgY29uc3QgY2hhciAqLCAoY29uc3RfdHJlZSB0eXBlKSwKKyBob29rX2NvbnN0Y2hhcnB0cl9jb25zdF90cmVlX251bGwpCisKKy8qIFJldHVybiB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIHN0cmluZyBpZiBUWVBFIGlzIG5vdCB2YWxpZCBhcyBhCisgICBmdW5jdGlvbiByZXR1cm4gdHlwZSwgTlVMTCBvdGhlcndpc2UuICAqLworREVGSE9PSworKGludmFsaWRfcmV0dXJuX3R5cGUsCisgIiIsCisgY29uc3QgY2hhciAqLCAoY29uc3RfdHJlZSB0eXBlKSwKKyBob29rX2NvbnN0Y2hhcnB0cl9jb25zdF90cmVlX251bGwpCisKKy8qIElmIHZhbHVlcyBvZiBUWVBFIGFyZSBwcm9tb3RlZCB0byBzb21lIG90aGVyIHR5cGUgd2hlbiB1c2VkIGluCisgICBleHByZXNzaW9ucyAoYW5hbG9nb3VzIHRvIHRoZSBpbnRlZ2VyIHByb21vdGlvbnMpLCByZXR1cm4gdGhhdCB0eXBlLAorICAgb3IgTlVMTF9UUkVFIG90aGVyd2lzZS4gICovCitERUZIT09LCisocHJvbW90ZWRfdHlwZSwKKyAiIiwKKyB0cmVlLCAoY29uc3RfdHJlZSB0eXBlKSwKKyBob29rX3RyZWVfY29uc3RfdHJlZV9udWxsKQorCisvKiBDb252ZXJ0IEVYUFIgdG8gVFlQRSwgaWYgdGFyZ2V0LXNwZWNpZmljIHR5cGVzIHdpdGggc3BlY2lhbCBjb252ZXJzaW9uCisgICBydWxlcyBhcmUgaW52b2x2ZWQuICBSZXR1cm4gdGhlIGNvbnZlcnRlZCBleHByZXNzaW9uLCBvciBOVUxMIHRvIGFwcGx5CisgICB0aGUgc3RhbmRhcmQgY29udmVyc2lvbiBydWxlcy4gICovCitERUZIT09LCisoY29udmVydF90b190eXBlLAorICIiLAorIHRyZWUsICh0cmVlIHR5cGUsIHRyZWUgZXhwciksCisgaG9va190cmVlX3RyZWVfdHJlZV9udWxsKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB3ZSB1c2UgTFJBIGluc3RlYWQgb2YgcmVsb2FkLiAgKi8KK0RFRkhPT0sKKyhscmFfcCwKKyAiQSB0YXJnZXQgaG9vayB3aGljaCByZXR1cm5zIHRydWUgaWYgd2UgdXNlIExSQSBpbnN0ZWFkIG9mIHJlbG9hZCBwYXNzLlwKKyAgSXQgbWVhbnMgdGhhdCBMUkEgd2FzIHBvcnRlZCB0byB0aGUgdGFyZ2V0LlwKKyAgXAorICBUaGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoaXMgdGFyZ2V0IGhvb2sgcmV0dXJucyBhbHdheXMgZmFsc2UuIiwKKyBib29sLCAodm9pZCksCisgZGVmYXVsdF9scmFfcCkKKworLyogUmV0dXJuIHJlZ2lzdGVyIHByaW9yaXR5IG9mIGdpdmVuIGhhcmQgcmVnbm8gZm9yIHRoZSBjdXJyZW50IHRhcmdldC4gICovCitERUZIT09LCisocmVnaXN0ZXJfcHJpb3JpdHksCisgIkEgdGFyZ2V0IGhvb2sgd2hpY2ggcmV0dXJucyB0aGUgcmVnaXN0ZXIgcHJpb3JpdHkgbnVtYmVyIHRvIHdoaWNoIHRoZVwKKyAgcmVnaXN0ZXIgQHZhcntoYXJkX3JlZ25vfSBiZWxvbmdzIHRvLiAgVGhlIGJpZ2dlciB0aGUgbnVtYmVyLCB0aGVcCisgIG1vcmUgcHJlZmVyYWJsZSB0aGUgaGFyZCByZWdpc3RlciB1c2FnZSAod2hlbiBhbGwgb3RoZXIgY29uZGl0aW9ucyBhcmVcCisgIHRoZSBzYW1lKS4gIFRoaXMgaG9vayBjYW4gYmUgdXNlZCB0byBwcmVmZXIgc29tZSBoYXJkIHJlZ2lzdGVyIG92ZXJcCisgIG90aGVycyBpbiBMUkEuICBGb3IgZXhhbXBsZSwgc29tZSB4ODYtNjQgcmVnaXN0ZXIgdXNhZ2UgbmVlZHNcCisgIGFkZGl0aW9uYWwgcHJlZml4IHdoaWNoIG1ha2VzIGluc3RydWN0aW9ucyBsb25nZXIuICBUaGUgaG9vayBjYW5cCisgIHJldHVybiBsb3dlciBwcmlvcml0eSBudW1iZXIgZm9yIHN1Y2ggcmVnaXN0ZXJzIG1ha2UgdGhlbSBsZXNzIGZhdm9yYWJsZVwKKyAgYW5kIGFzIHJlc3VsdCBtYWtpbmcgdGhlIGdlbmVyYXRlZCBjb2RlIHNtYWxsZXIuXAorICBcCisgIFRoZSBkZWZhdWx0IHZlcnNpb24gb2YgdGhpcyB0YXJnZXQgaG9vayByZXR1cm5zIGFsd2F5cyB6ZXJvLiIsCisgaW50LCAoaW50KSwKKyBkZWZhdWx0X3JlZ2lzdGVyX3ByaW9yaXR5KQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBtYXhpbWFsIGFkZHJlc3MgZGlzcGxhY2VtZW50IGNhbiBiZSBkaWZmZXJlbnQuICAqLworREVGSE9PSworKGRpZmZlcmVudF9hZGRyX2Rpc3BsYWNlbWVudF9wLAorICJBIHRhcmdldCBob29rIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiBhbiBhZGRyZXNzIHdpdGggdGhlIHNhbWUgc3RydWN0dXJlXAorICBjYW4gaGF2ZSBkaWZmZXJlbnQgbWF4aW1hbCBsZWdpdGltYXRlIGRpc3BsYWNlbWVudC4gIEZvciBleGFtcGxlLCB0aGVcCisgIGRpc3BsYWNlbWVudCBjYW4gZGVwZW5kIG9uIG1lbW9yeSBtb2RlIG9yIG9uIG9wZXJhbmQgY29tYmluYXRpb25zIGluXAorICB0aGUgaW5zbi5cCisgIFwKKyAgVGhlIGRlZmF1bHQgdmVyc2lvbiBvZiB0aGlzIHRhcmdldCBob29rIHJldHVybnMgYWx3YXlzIGZhbHNlLiIsCisgYm9vbCwgKHZvaWQpLAorIGRlZmF1bHRfZGlmZmVyZW50X2FkZHJfZGlzcGxhY2VtZW50X3ApCisKKy8qIERldGVybWluZSBjbGFzcyBmb3Igc3BpbGxpbmcgcHNldWRvcyBvZiBnaXZlbiBtb2RlIGludG8gcmVnaXN0ZXJzCisgICBpbnN0ZWFkIG9mIG1lbW9yeS4gICovCitERUZIT09LCisoc3BpbGxfY2xhc3MsCisgIlRoaXMgaG9vayBkZWZpbmVzIGEgY2xhc3Mgb2YgcmVnaXN0ZXJzIHdoaWNoIGNvdWxkIGJlIHVzZWQgZm9yIHNwaWxsaW5nXAorICBwc2V1ZG9zIG9mIHRoZSBnaXZlbiBtb2RlIGFuZCBjbGFzcywgb3IgQGNvZGV7Tk9fUkVHU30gaWYgb25seSBtZW1vcnlcCisgIHNob3VsZCBiZSB1c2VkLiAgTm90IGRlZmluaW5nIHRoaXMgaG9vayBpcyBlcXVpdmFsZW50IHRvIHJldHVybmluZ1wKKyAgQGNvZGV7Tk9fUkVHU30gZm9yIGFsbCBpbnB1dHMuIiwKKyByZWdfY2xhc3NfdCwgKHJlZ19jbGFzc190LCBlbnVtIG1hY2hpbmVfbW9kZSksCisgTlVMTCkKKworLyogVHJ1ZSBpZiBhIHN0cnVjdHVyZSwgdW5pb24gb3IgYXJyYXkgd2l0aCBNT0RFIGNvbnRhaW5pbmcgRklFTEQgc2hvdWxkCisgICBiZSBhY2Nlc3NlZCB1c2luZyBCTEttb2RlLiAgKi8KK0RFRkhPT0sKKyhtZW1iZXJfdHlwZV9mb3JjZXNfYmxrLAorICIiLAorIGJvb2wsIChjb25zdF90cmVlIGZpZWxkLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKSwKKyBkZWZhdWx0X21lbWJlcl90eXBlX2ZvcmNlc19ibGspCisKKy8qIFJldHVybiB0aGUgY2xhc3MgZm9yIGEgc2Vjb25kYXJ5IHJlbG9hZCwgYW5kIGZpbGwgaW4gZXh0cmEgaW5mb3JtYXRpb24uICAqLworREVGSE9PSworKHNlY29uZGFyeV9yZWxvYWQsCisgIiIsCisgcmVnX2NsYXNzX3QsCisgKGJvb2wgaW5fcCwgcnR4IHgsIHJlZ19jbGFzc190IHJlbG9hZF9jbGFzcywgZW51bSBtYWNoaW5lX21vZGUgcmVsb2FkX21vZGUsCisgIHNlY29uZGFyeV9yZWxvYWRfaW5mbyAqc3JpKSwKKyBkZWZhdWx0X3NlY29uZGFyeV9yZWxvYWQpCisKKy8qIEdpdmVuIGFuIHJ0eCBYIGJlaW5nIHJlbG9hZGVkIGludG8gYSByZWcgcmVxdWlyZWQgdG8gYmUgaW4gY2xhc3MgQ0xBU1MsCisgICByZXR1cm4gdGhlIGNsYXNzIG9mIHJlZyB0byBhY3R1YWxseSB1c2UuICAqLworREVGSE9PSworKHByZWZlcnJlZF9yZWxvYWRfY2xhc3MsCisgIiIsCisgcmVnX2NsYXNzX3QsCisgKHJ0eCB4LCByZWdfY2xhc3NfdCByY2xhc3MpLAorIGRlZmF1bHRfcHJlZmVycmVkX3JlbG9hZF9jbGFzcykKKworLyogTGlrZSBUQVJHRVRfUFJFRkVSUkVEX1JFTE9BRF9DTEFTUywgYnV0IGZvciBvdXRwdXQgcmVsb2FkcyBpbnN0ZWFkIG9mCisgICBpbnB1dCByZWxvYWRzLiAgKi8KK0RFRkhPT0sKKyhwcmVmZXJyZWRfb3V0cHV0X3JlbG9hZF9jbGFzcywKKyAiIiwKKyByZWdfY2xhc3NfdCwKKyAocnR4IHgsIHJlZ19jbGFzc190IHJjbGFzcyksCisgZGVmYXVsdF9wcmVmZXJyZWRfb3V0cHV0X3JlbG9hZF9jbGFzcykKKworREVGSE9PSworKGNsYXNzX2xpa2VseV9zcGlsbGVkX3AsCisgIiIsCisgYm9vbCwgKHJlZ19jbGFzc190IHJjbGFzcyksCisgZGVmYXVsdF9jbGFzc19saWtlbHlfc3BpbGxlZF9wKQorCisvKiBSZXR1cm4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycworICAgbmVlZGVkIHRvIHJlcHJlc2VudCBtb2RlIE1PREUgaW4gYSByZWdpc3RlciBvZiBjbGFzcyBSQ0xBU1MuICAqLworREVGSE9PSworKGNsYXNzX21heF9ucmVncywKKyAiIiwKKyB1bnNpZ25lZCBjaGFyLCAocmVnX2NsYXNzX3QgcmNsYXNzLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKSwKKyBkZWZhdWx0X2NsYXNzX21heF9ucmVncykKKworREVGSE9PSworKHByZWZlcnJlZF9yZW5hbWVfY2xhc3MsCisgIkEgdGFyZ2V0IGhvb2sgdGhhdCBwbGFjZXMgYWRkaXRpb25hbCBwcmVmZXJlbmNlIG9uIHRoZSByZWdpc3RlclwKKyBjbGFzcyB0byB1c2Ugd2hlbiBpdCBpcyBuZWNlc3NhcnkgdG8gcmVuYW1lIGEgcmVnaXN0ZXIgaW4gY2xhc3NcCisgQHZhcntyY2xhc3N9IHRvIGFub3RoZXIgY2xhc3MsIG9yIHBlcmhhcHMgQHZhcntOT19SRUdTfSwgaWYgbm9cCisgcHJlZmVycmVkIHJlZ2lzdGVyIGNsYXNzIGlzIGZvdW5kIG9yIGhvb2sgQGNvZGV7cHJlZmVycmVkX3JlbmFtZV9jbGFzc31cCisgaXMgbm90IGltcGxlbWVudGVkLlwKKyBTb21ldGltZXMgcmV0dXJuaW5nIGEgbW9yZSByZXN0cmljdGl2ZSBjbGFzcyBtYWtlcyBiZXR0ZXIgY29kZS4gIEZvclwKKyBleGFtcGxlLCBvbiBBUk0sIHRodW1iLTIgaW5zdHJ1Y3Rpb25zIHVzaW5nIEBjb2Rle0xPX1JFR1N9IG1heSBiZVwKKyBzbWFsbGVyIHRoYW4gaW5zdHJ1Y3Rpb25zIHVzaW5nIEBjb2Rle0dFTkVSSUNfUkVHU30uICBCeSByZXR1cm5pbmdcCisgQGNvZGV7TE9fUkVHU30gZnJvbSBAY29kZXtwcmVmZXJyZWRfcmVuYW1lX2NsYXNzfSwgY29kZSBzaXplIGNhblwKKyBiZSByZWR1Y2VkLiIsCisgcmVnX2NsYXNzX3QsIChyZWdfY2xhc3NfdCByY2xhc3MpLAorIGRlZmF1bHRfcHJlZmVycmVkX3JlbmFtZV9jbGFzcykKKworLyogVGhpcyB0YXJnZXQgaG9vayBhbGxvd3MgdGhlIGJhY2tlbmQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsCisgICBwcm9jZXNzaW5nIHdoaWxlIGluaXRpYWxpemluZyBmb3IgdmFyaWFibGUgZXhwYW5zaW9uLiAgKi8KK0RFRkhPT0sKKyhleHBhbmRfdG9fcnRsX2hvb2ssCisgIiIsCisgdm9pZCwgKHZvaWQpLAorIGhvb2tfdm9pZF92b2lkKQorCisvKiBUaGlzIHRhcmdldCBob29rIGFsbG93cyB0aGUgYmFja2VuZCB0byBwZXJmb3JtIGFkZGl0aW9uYWwKKyAgIGluc3RhbnRpYXRpb25zIG9uIHJ0eCB0aGF0IGFyZSBub3QgYWN0dWFsbHkgaW4gaW5zbnMgeWV0LAorICAgYnV0IHdpbGwgYmUgbGF0ZXIuICAqLworREVGSE9PSworKGluc3RhbnRpYXRlX2RlY2xzLAorICIiLAorIHZvaWQsICh2b2lkKSwKKyBob29rX3ZvaWRfdm9pZCkKKworLyogUmV0dXJuIHRydWUgaWYgaXMgT0sgdG8gdXNlIGEgaGFyZCByZWdpc3RlciBSRUdOTyBhcyBzY3JhdGNoIHJlZ2lzdGVyCisgICBpbiBwZWVwaG9sZTIuICAqLworREVGSE9PSworKGhhcmRfcmVnbm9fc2NyYXRjaF9vaywKKyAiIiwKKyBib29sLCAodW5zaWduZWQgaW50IHJlZ25vKSwKKyBkZWZhdWx0X2hhcmRfcmVnbm9fc2NyYXRjaF9vaykKKworLyogUmV0dXJuIHRoZSBzbWFsbGVzdCBudW1iZXIgb2YgZGlmZmVyZW50IHZhbHVlcyBmb3Igd2hpY2ggaXQgaXMgYmVzdCB0bworICAgdXNlIGEganVtcC10YWJsZSBpbnN0ZWFkIG9mIGEgdHJlZSBvZiBjb25kaXRpb25hbCBicmFuY2hlcy4gICovCitERUZIT09LCisoY2FzZV92YWx1ZXNfdGhyZXNob2xkLAorICIiLAorIHVuc2lnbmVkIGludCwgKHZvaWQpLAorIGRlZmF1bHRfY2FzZV92YWx1ZXNfdGhyZXNob2xkKQorCisvKiBSZXR1dG4gdHJ1ZSBpZiBhIGZ1bmN0aW9uIG11c3QgaGF2ZSBhbmQgdXNlIGEgZnJhbWUgcG9pbnRlci4gICovCitERUZIT09LCisoZnJhbWVfcG9pbnRlcl9yZXF1aXJlZCwKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfZmFsc2UpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGlsZXIgaXMgYWxsb3dlZCB0byB0cnkgdG8gcmVwbGFjZSByZWdpc3RlciBudW1iZXIKKyAgIGZyb20tcmVnIHdpdGggcmVnaXN0ZXIgbnVtYmVyIHRvLXJlZy4gICovCitERUZIT09LCisoY2FuX2VsaW1pbmF0ZSwKKyAiIiwKKyBib29sLCAoY29uc3QgaW50IGZyb21fcmVnLCBjb25zdCBpbnQgdG9fcmVnKSwKKyBob29rX2Jvb2xfY29uc3RfaW50X2NvbnN0X2ludF90cnVlKQorCisvKiBNb2RpZnkgYW55IG9yIGFsbCBvZiBmaXhlZF9yZWdzLCBjYWxsX3VzZWRfcmVncywgZ2xvYmFsX3JlZ3MsCisgICByZWdfbmFtZXMsIGFuZCByZWdfY2xhc3NfY29udGVudHMgdG8gYWNjb3VudCBvZiB0aGUgdmFnYXJpZXMgb2YgdGhlCisgICB0YXJnZXQuICAqLworREVGSE9PSworKGNvbmRpdGlvbmFsX3JlZ2lzdGVyX3VzYWdlLAorICIiLAorIHZvaWQsICh2b2lkKSwKKyBob29rX3ZvaWRfdm9pZCkKKworLyogRnVuY3Rpb25zIHNwZWNpZmljIHRvIHRoZSBDIGZhbWlseSBvZiBmcm9udGVuZHMuICAqLworI3VuZGVmIEhPT0tfUFJFRklYCisjZGVmaW5lIEhPT0tfUFJFRklYICJUQVJHRVRfQ18iCitIT09LX1ZFQ1RPUiAoVEFSR0VUX0MsIGMpCisKKy8qID8/PyBEb2N1bWVudGluZyB0aGlzIGhvb2sgcmVxdWlyZXMgYSBHRkRMIGxpY2Vuc2UgZ3JhbnQuICAqLworREVGSE9PS19VTkRPQworKG1vZGVfZm9yX3N1ZmZpeCwKKyJSZXR1cm4gbWFjaGluZSBtb2RlIGZvciBub24tc3RhbmRhcmQgY29uc3RhbnQgbGl0ZXJhbCBzdWZmaXggQHZhcntjfSxcCisgb3IgVk9JRG1vZGUgaWYgbm9uLXN0YW5kYXJkIHN1ZmZpeGVzIGFyZSB1bnN1cHBvcnRlZC4iLAorIGVudW0gbWFjaGluZV9tb2RlLCAoY2hhciBjKSwKKyBkZWZhdWx0X21vZGVfZm9yX3N1ZmZpeCkKKworSE9PS19WRUNUT1JfRU5EIChjKQorCisvKiBGdW5jdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEMrKyBmcm9udGVuZC4gICovCisjdW5kZWYgSE9PS19QUkVGSVgKKyNkZWZpbmUgSE9PS19QUkVGSVggIlRBUkdFVF9DWFhfIgorSE9PS19WRUNUT1IgKFRBUkdFVF9DWFgsIGN4eCkKKworLyogUmV0dXJuIHRoZSBpbnRlZ2VyIHR5cGUgdXNlZCBmb3IgZ3VhcmQgdmFyaWFibGVzLiAgKi8KK0RFRkhPT0sKKyhndWFyZF90eXBlLAorICIiLAorIHRyZWUsICh2b2lkKSwKKyBkZWZhdWx0X2N4eF9ndWFyZF90eXBlKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBvbmx5IHRoZSBsb3cgYml0IG9mIHRoZSBndWFyZCBzaG91bGQgYmUgdGVzdGVkLiAgKi8KK0RFRkhPT0sKKyhndWFyZF9tYXNrX2JpdCwKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfZmFsc2UpCisKKy8qIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGFycmF5IGNvb2tpZSBmb3IgYW4gYXJyYXkgb2YgdHlwZS4gICovCitERUZIT09LCisoZ2V0X2Nvb2tpZV9zaXplLAorICIiLAorIHRyZWUsICh0cmVlIHR5cGUpLAorIGRlZmF1bHRfY3h4X2dldF9jb29raWVfc2l6ZSkKKworLyogUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IHNpemUgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgYXJyYXkgY29va2llLiAgKi8KK0RFRkhPT0sKKyhjb29raWVfaGFzX3NpemUsCisgIiIsCisgYm9vbCwgKHZvaWQpLAorIGhvb2tfYm9vbF92b2lkX2ZhbHNlKQorCisvKiBBbGxvd3MgYmFja2VuZHMgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgd2hlbgorICAgZGVjaWRpbmcgaWYgYSBjbGFzcyBzaG91bGQgYmUgZXhwb3J0ZWQgb3IgaW1wb3J0ZWQuICAqLworREVGSE9PSworKGltcG9ydF9leHBvcnRfY2xhc3MsCisgIiIsCisgaW50LCAodHJlZSB0eXBlLCBpbnQgaW1wb3J0X2V4cG9ydCksIE5VTEwpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIHJldHVybiAidGhpcyIuICAqLworREVGSE9PSworKGNkdG9yX3JldHVybnNfdGhpcywKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfZmFsc2UpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IG1ldGhvZCBmb3IgYSBjbGFzcyBjYW4gYmUgYW4gaW5saW5lCisgICBmdW5jdGlvbiwgc28gbG9uZyBhcyBpdCBpcyBub3QgZGVjbGFyZWQgaW5saW5lIGluIHRoZSBjbGFzcworICAgaXRzZWxmLiAgUmV0dXJuaW5nIHRydWUgaXMgdGhlIGJlaGF2aW9yIHJlcXVpcmVkIGJ5IHRoZSBJdGFuaXVtIEMrKyBBQkkuICAqLworREVGSE9PSworKGtleV9tZXRob2RfbWF5X2JlX2lubGluZSwKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfdHJ1ZSkKKworREVGSE9PSworKGRldGVybWluZV9jbGFzc19kYXRhX3Zpc2liaWxpdHksCisiQHZhcntkZWNsfSBpcyBhIHZpcnR1YWwgdGFibGUsIHZpcnR1YWwgdGFibGUgdGFibGUsIHR5cGVpbmZvIG9iamVjdCxcCisgb3Igb3RoZXIgc2ltaWxhciBpbXBsaWNpdCBjbGFzcyBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgZW1pdHRlZCB3aXRoXAorIGV4dGVybmFsIGxpbmthZ2UgaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgTm8gRUxGIHZpc2liaWxpdHkgaGFzIGJlZW5cCisgZXhwbGljaXRseSBzcGVjaWZpZWQuICBJZiB0aGUgdGFyZ2V0IG5lZWRzIHRvIHNwZWNpZnkgYSB2aXNpYmlsaXR5XAorIG90aGVyIHRoYW4gdGhhdCBvZiB0aGUgY29udGFpbmluZyBjbGFzcywgdXNlIHRoaXMgaG9vayB0byBzZXRcCisgQGNvZGV7REVDTF9WSVNJQklMSVRZfSBhbmQgQGNvZGV7REVDTF9WSVNJQklMSVRZX1NQRUNJRklFRH0uIiwKKyB2b2lkLCAodHJlZSBkZWNsKSwKKyBob29rX3ZvaWRfdHJlZSkKKworLyogUmV0dXJucyB0cnVlICh0aGUgZGVmYXVsdCkgaWYgdmlydHVhbCB0YWJsZXMgYW5kIG90aGVyCisgICBzaW1pbGFyIGltcGxpY2l0IGNsYXNzIGRhdGEgb2JqZWN0cyBhcmUgYWx3YXlzIENPTURBVCBpZiB0aGV5CisgICBoYXZlIGV4dGVybmFsIGxpbmthZ2UuICBJZiB0aGlzIGhvb2sgcmV0dXJucyBmYWxzZSwgdGhlbgorICAgY2xhc3MgZGF0YSBmb3IgY2xhc3NlcyB3aG9zZSB2aXJ0dWFsIHRhYmxlIHdpbGwgYmUgZW1pdHRlZCBpbgorICAgb25seSBvbmUgdHJhbnNsYXRpb24gdW5pdCB3aWxsIG5vdCBiZSBDT01EQVQuICAqLworREVGSE9PSworKGNsYXNzX2RhdGFfYWx3YXlzX2NvbWRhdCwKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfdHJ1ZSkKKworLyogUmV0dXJucyB0cnVlICh0aGUgZGVmYXVsdCkgaWYgdGhlIFJUVEkgZm9yIHRoZSBiYXNpYyB0eXBlcywKKyAgIHdoaWNoIGlzIGFsd2F5cyBkZWZpbmVkIGluIHRoZSBDKysgcnVudGltZSwgc2hvdWxkIGJlIENPTURBVDsKKyAgIGZhbHNlIGlmIGl0IHNob3VsZCBub3QgYmUgQ09NREFULiAgKi8KK0RFRkhPT0sKKyhsaWJyYXJ5X3J0dGlfY29tZGF0LAorICIiLAorIGJvb2wsICh2b2lkKSwKKyBob29rX2Jvb2xfdm9pZF90cnVlKQorCisvKiBSZXR1cm5zIHRydWUgaWYgX19hZWFiaV9hdGV4aXQgc2hvdWxkIGJlIHVzZWQgdG8gcmVnaXN0ZXIgc3RhdGljCisgICBkZXN0cnVjdG9ycy4gICovCitERUZIT09LCisodXNlX2FlYWJpX2F0ZXhpdCwKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfZmFsc2UpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiB0YXJnZXQgbWF5IHVzZSBhdGV4aXQgaW4gdGhlIHNhbWUgbWFubmVyIGFzCisgICBfX2N4YV9hdGV4aXQgIHRvIHJlZ2lzdGVyIHN0YXRpYyBkZXN0cnVjdG9ycy4gICovCitERUZIT09LCisodXNlX2F0ZXhpdF9mb3JfY3hhX2F0ZXhpdCwKKyAiIiwKKyBib29sLCAodm9pZCksCisgaG9va19ib29sX3ZvaWRfZmFsc2UpCisKK0RFRkhPT0sKKyhhZGp1c3RfY2xhc3NfYXRfZGVmaW5pdGlvbiwKKyJAdmFye3R5cGV9IGlzIGEgQysrIGNsYXNzIChpLmUuLCBSRUNPUkRfVFlQRSBvciBVTklPTl9UWVBFKSB0aGF0IGhhcyBqdXN0XAorIGJlZW4gZGVmaW5lZC4gIFVzZSB0aGlzIGhvb2sgdG8gbWFrZSBhZGp1c3RtZW50cyB0byB0aGUgY2xhc3MgKGVnLCB0d2Vha1wKKyB2aXNpYmlsaXR5IG9yIHBlcmZvcm0gYW55IG90aGVyIHJlcXVpcmVkIHRhcmdldCBtb2RpZmljYXRpb25zKS4iLAorIHZvaWQsICh0cmVlIHR5cGUpLAorIGhvb2tfdm9pZF90cmVlKQorCitERUZIT09LCisoZGVjbF9tYW5nbGluZ19jb250ZXh0LAorICJSZXR1cm4gdGFyZ2V0LXNwZWNpZmljIG1hbmdsaW5nIGNvbnRleHQgb2YgQHZhcntkZWNsfSBvciBAY29kZXtOVUxMX1RSRUV9LiIsCisgdHJlZSwgKGNvbnN0X3RyZWUgZGVjbCksCisgaG9va190cmVlX2NvbnN0X3RyZWVfbnVsbCkKKworSE9PS19WRUNUT1JfRU5EIChjeHgpCisKKy8qIEZ1bmN0aW9ucyBhbmQgZGF0YSBmb3IgZW11bGF0ZWQgVExTIHN1cHBvcnQuICAqLworI3VuZGVmIEhPT0tfUFJFRklYCisjZGVmaW5lIEhPT0tfUFJFRklYICJUQVJHRVRfRU1VVExTXyIKK0hPT0tfVkVDVE9SIChUQVJHRVRfRU1VVExTLCBlbXV0bHMpCisKKy8qIE5hbWUgb2YgdGhlIGFkZHJlc3MgYW5kIGNvbW1vbiBmdW5jdGlvbnMuICAqLworREVGSE9PS1BPRAorKGdldF9hZGRyZXNzLAorICIiLAorIGNvbnN0IGNoYXIgKiwgIl9fYnVpbHRpbl9fX2VtdXRsc19nZXRfYWRkcmVzcyIpCisKK0RFRkhPT0tQT0QKKyhyZWdpc3Rlcl9jb21tb24sCisgIiIsCisgY29uc3QgY2hhciAqLCAiX19idWlsdGluX19fZW11dGxzX3JlZ2lzdGVyX2NvbW1vbiIpCisKKy8qIFByZWZpeGVzIGZvciBwcm94eSB2YXJpYWJsZSBhbmQgdGVtcGxhdGUuICAqLworREVGSE9PS1BPRAorKHZhcl9zZWN0aW9uLAorICIiLAorIGNvbnN0IGNoYXIgKiwgTlVMTCkKKworREVGSE9PS1BPRAorKHRtcGxfc2VjdGlvbiwKKyAiIiwKKyBjb25zdCBjaGFyICosIE5VTEwpCisKKy8qIFByZWZpeGVzIGZvciBwcm94eSB2YXJpYWJsZSBhbmQgdGVtcGxhdGUuICAqLworREVGSE9PS1BPRAorKHZhcl9wcmVmaXgsCisgIiIsCisgY29uc3QgY2hhciAqLCBOVUxMKQorCitERUZIT09LUE9ECisodG1wbF9wcmVmaXgsCisgIiIsCisgY29uc3QgY2hhciAqLCBOVUxMKQorCisvKiBGdW5jdGlvbiB0byBnZW5lcmF0ZSBmaWVsZCBkZWZpbml0aW9ucyBvZiB0aGUgcHJveHkgdmFyaWFibGUuICAqLworREVGSE9PSworKHZhcl9maWVsZHMsCisgIiIsCisgdHJlZSwgKHRyZWUgdHlwZSwgdHJlZSAqbmFtZSksCisgZGVmYXVsdF9lbXV0bHNfdmFyX2ZpZWxkcykKKworLyogRnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBhIHByb3h5IHZhcmlhYmxlLiAgKi8KK0RFRkhPT0sKKyh2YXJfaW5pdCwKKyAiIiwKKyB0cmVlLCAodHJlZSB2YXIsIHRyZWUgZGVjbCwgdHJlZSB0bXBsX2FkZHIpLAorIGRlZmF1bHRfZW11dGxzX3Zhcl9pbml0KQorCisvKiBXaGV0aGVyIHdlIGFyZSBhbGxvd2VkIHRvIGFsdGVyIHRoZSB1c3VhbCBhbGlnbm1lbnQgb2YgdGhlCisgICBwcm94eSB2YXJpYWJsZS4gICovCitERUZIT09LUE9ECisodmFyX2FsaWduX2ZpeGVkLAorICIiLAorIGJvb2wsIGZhbHNlKQorCisvKiBXaGV0aGVyIHdlIGNhbiBlbWl0IGRlYnVnIGluZm9ybWF0aW9uIGZvciBUTFMgdmFycy4gICovCitERUZIT09LUE9ECisoZGVidWdfZm9ybV90bHNfYWRkcmVzcywKKyAiIiwKKyBib29sLCBmYWxzZSkKKworSE9PS19WRUNUT1JfRU5EIChlbXV0bHMpCisKKyN1bmRlZiBIT09LX1BSRUZJWAorI2RlZmluZSBIT09LX1BSRUZJWCAiVEFSR0VUX09QVElPTl8iCitIT09LX1ZFQ1RPUiAoVEFSR0VUX09QVElPTl9IT09LUywgdGFyZ2V0X29wdGlvbl9ob29rcykKKworLyogRnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGF0dHJpYnV0ZSgodGFyZ2V0KC4uLikpKSBzdHJpbmdzLiAgSWYKKyAgIHRoZSBvcHRpb24gaXMgdmFsaWRhdGVkLCB0aGUgaG9vayBzaG91bGQgYWxzbyBmaWxsIGluCisgICBERUNMX0ZVTkNUSU9OX1NQRUNJRklDX1RBUkdFVCBpbiB0aGUgZnVuY3Rpb24gZGVjbCBub2RlLiAgKi8KK0RFRkhPT0sKKyh2YWxpZF9hdHRyaWJ1dGVfcCwKKyAiIiwKKyBib29sLCAodHJlZSBmbmRlY2wsIHRyZWUgbmFtZSwgdHJlZSBhcmdzLCBpbnQgZmxhZ3MpLAorIGRlZmF1bHRfdGFyZ2V0X29wdGlvbl92YWxpZF9hdHRyaWJ1dGVfcCkKKworLyogRnVuY3Rpb24gdG8gc2F2ZSBhbnkgZXh0cmEgdGFyZ2V0IHN0YXRlIGluIHRoZSB0YXJnZXQgb3B0aW9ucyBzdHJ1Y3R1cmUuICAqLworREVGSE9PSworKHNhdmUsCisgIiIsCisgdm9pZCwgKHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICpwdHIpLCBOVUxMKQorCisvKiBGdW5jdGlvbiB0byByZXN0b3JlIGFueSBleHRyYSB0YXJnZXQgc3RhdGUgZnJvbSB0aGUgdGFyZ2V0IG9wdGlvbnMKKyAgIHN0cnVjdHVyZS4gICovCitERUZIT09LCisocmVzdG9yZSwKKyAiIiwKKyB2b2lkLCAoc3RydWN0IGNsX3RhcmdldF9vcHRpb24gKnB0ciksIE5VTEwpCisKKy8qIEZ1bmN0aW9uIHRvIHByaW50IGFueSBleHRyYSB0YXJnZXQgc3RhdGUgZnJvbSB0aGUgdGFyZ2V0IG9wdGlvbnMKKyAgIHN0cnVjdHVyZS4gICovCitERUZIT09LCisocHJpbnQsCisgIiIsCisgdm9pZCwgKEZJTEUgKmZpbGUsIGludCBpbmRlbnQsIHN0cnVjdCBjbF90YXJnZXRfb3B0aW9uICpwdHIpLCBOVUxMKQorCisvKiBGdW5jdGlvbiB0byBwYXJzZSBhcmd1bWVudHMgdG8gYmUgdmFsaWRhdGVkIGZvciAjcHJhZ21hIHRhcmdldCwgYW5kIHRvCisgICBjaGFuZ2UgdGhlIHN0YXRlIGlmIHRoZSBvcHRpb25zIGFyZSB2YWxpZC4gIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcworICAgTlVMTCwgdGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgb3B0aW9ucyB0byB1c2UuICBSZXR1cm4KKyAgIHRydWUgaWYgdGhlIG9wdGlvbnMgYXJlIHZhbGlkLCBhbmQgc2V0IHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KK0RFRkhPT0sKKyhwcmFnbWFfcGFyc2UsCisgIiIsCisgYm9vbCwgKHRyZWUgYXJncywgdHJlZSBwb3BfdGFyZ2V0KSwKKyBkZWZhdWx0X3RhcmdldF9vcHRpb25fcHJhZ21hX3BhcnNlKQorCisvKiBEbyBvcHRpb24gb3ZlcnJpZGVzIGZvciB0aGUgdGFyZ2V0LiAgKi8KK0RFRkhPT0sKKyhvdmVycmlkZSwKKyAiIiwKKyB2b2lkLCAodm9pZCksCisgaG9va192b2lkX3ZvaWQpCisKKy8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIERFQ0wxIGFuZCBERUNMMiBhcmUgdmVyc2lvbnMgb2YgdGhlIHNhbWUKKyAgIGZ1bmN0aW9uLiAgREVDTDEgYW5kIERFQ0wyIGFyZSBmdW5jdGlvbiB2ZXJzaW9ucyBpZiBhbmQgb25seSBpZiB0aGV5CisgICBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgZGlmZmVyZW50IHRhcmdldCBzcGVjaWZpYyBhdHRyaWJ1dGVzLAorICAgdGhhdCBpcywgdGhleSBhcmUgY29tcGlsZWQgZm9yIGRpZmZlcmVudCB0YXJnZXQgbWFjaGluZXMuICAqLworREVGSE9PSworKGZ1bmN0aW9uX3ZlcnNpb25zLAorICIiLAorIGJvb2wsICh0cmVlIGRlY2wxLCB0cmVlIGRlY2wyKSwKKyBob29rX2Jvb2xfdHJlZV90cmVlX2ZhbHNlKQorCisvKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgb25lIGZ1bmN0aW9uIGNhbiBpbmxpbmUgYW5vdGhlciBmdW5jdGlvbi4gICovCisjdW5kZWYgSE9PS19QUkVGSVgKKyNkZWZpbmUgSE9PS19QUkVGSVggIlRBUkdFVF8iCitERUZIT09LCisoY2FuX2lubGluZV9wLAorICIiLAorIGJvb2wsICh0cmVlIGNhbGxlciwgdHJlZSBjYWxsZWUpLAorIGRlZmF1bHRfdGFyZ2V0X2Nhbl9pbmxpbmVfcCkKKworSE9PS19WRUNUT1JfRU5EICh0YXJnZXRfb3B0aW9uKQorCisvKiBGb3IgdGFyZ2V0cyB0aGF0IG5lZWQgdG8gbWFyayBleHRyYSByZWdpc3RlcnMgYXMgbGl2ZSBvbiBlbnRyeSB0bworICAgdGhlIGZ1bmN0aW9uLCB0aGV5IHNob3VsZCBkZWZpbmUgdGhpcyB0YXJnZXQgaG9vayBhbmQgc2V0IHRoZWlyCisgICBiaXRzIGluIHRoZSBiaXRtYXAgcGFzc2VkIGluLiAqLworREVGSE9PSworKGV4dHJhX2xpdmVfb25fZW50cnksCisgIiIsCisgdm9pZCwgKGJpdG1hcCByZWdzKSwKKyBob29rX3ZvaWRfYml0bWFwKQorCisvKiBGaWxsIGluIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIHNldCB1cCBieSBwcm9sb2d1ZSBpbnRvIGEgcmVnc2V0LiAgKi8KK0RFRkhPT0sKKyhzZXRfdXBfYnlfcHJvbG9ndWUsCisgIlRoaXMgaG9vayBzaG91bGQgYWRkIGFkZGl0aW9uYWwgcmVnaXN0ZXJzIHRoYXQgYXJlIGNvbXB1dGVkIGJ5IHRoZSBwcm9sb2d1ZVwKKyB0byB0aGUgaGFyZCByZWdzZXQgZm9yIHNocmluay13cmFwcGluZyBvcHRpbWl6YXRpb24gcHVycG9zZXMuIiwKKyB2b2lkLCAoc3RydWN0IGhhcmRfcmVnX3NldF9jb250YWluZXIgKiksCisgTlVMTCkKKworLyogRm9yIHRhcmdldHMgdGhhdCBoYXZlIGF0dHJpYnV0ZXMgdGhhdCBjYW4gYWZmZWN0IHdoZXRoZXIgYQorICAgZnVuY3Rpb24ncyByZXR1cm4gc3RhdGVtZW50cyBuZWVkIGNoZWNraW5nLiAgRm9yIGluc3RhbmNlIGEgJ25ha2VkJworICAgZnVuY3Rpb24gYXR0cmlidXRlLiAgKi8KK0RFRkhPT0sKKyh3YXJuX2Z1bmNfcmV0dXJuLAorICJUcnVlIGlmIGEgZnVuY3Rpb24ncyByZXR1cm4gc3RhdGVtZW50cyBzaG91bGQgYmUgY2hlY2tlZCBmb3IgbWF0Y2hpbmcgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUuICBUaGlzIGluY2x1ZGVzIGNoZWNraW5nIGZvciBmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIGEgbm9uLXZvaWQgZnVuY3Rpb24uICBSZXR1cm4gZmFsc2UgaWYgbm8gc3VjaCBjaGVjayBzaG91bGQgYmUgbWFkZS4iLAorIGJvb2wsICh0cmVlKSwKKyBob29rX2Jvb2xfdHJlZV90cnVlKQorCisvKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgdW53aW5kIGluZm8gdG8gZW1pdCBmb3IgZGVidWdnaW5nLiAgKi8KK0RFRkhPT0sKKyhkZWJ1Z191bndpbmRfaW5mbywKKyAiIiwKKyBlbnVtIHVud2luZF9pbmZvX3R5cGUsICh2b2lkKSwKKyBkZWZhdWx0X2RlYnVnX3Vud2luZF9pbmZvKQorCisvKiBUaGUgY29kZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIG9mIHR5cGUgZW51bSBydHhfY29kZSBidXQgdGhpcyBpcyBub3QKKyAgIGRlZmluZWQgYXQgdGhpcyB0aW1lLiAgKi8KK0RFRkhPT0sKKyhjYW5vbmljYWxpemVfY29tcGFyaXNvbiwKKyAiIiwKKyB2b2lkLCAoaW50ICpjb2RlLCBydHggKm9wMCwgcnR4ICpvcDEsIGJvb2wgb3AwX3ByZXNlcnZlX3ZhbHVlKSwKKyBkZWZhdWx0X2Nhbm9uaWNhbGl6ZV9jb21wYXJpc29uKQorCitERUZIT09LUE9ECisoYXRvbWljX3Rlc3RfYW5kX3NldF90cnVldmFsLAorICJUaGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgaWYgdGhlIHJlc3VsdCB3cml0dGVuIGJ5XAorIEBjb2Rle2F0b21pY190ZXN0X2FuZF9zZXR9IGlzIG5vdCBleGFjdGx5IDEsIGkuZS4gdGhlXAorIEBjb2Rle2Jvb2x9IEBjb2Rle3RydWV9LiIsCisgdW5zaWduZWQgY2hhciwgMSkKKyAKKy8qIExlYXZlIHRoZSBib29sZWFuIGZpZWxkcyBhdCB0aGUgZW5kLiAgKi8KKworLyogVHJ1ZSBpZiB3ZSBjYW4gY3JlYXRlIHplcm9lZCBkYXRhIGJ5IHN3aXRjaGluZyB0byBhIEJTUyBzZWN0aW9uCisgICBhbmQgdGhlbiB1c2luZyBBU01fT1VUUFVUX1NLSVAgdG8gYWxsb2NhdGUgdGhlIHNwYWNlLiAgKi8KK0RFRkhPT0tQT0QKKyhoYXZlX3N3aXRjaGFibGVfYnNzX3NlY3Rpb25zLAorICIiLAorIGJvb2wsIGZhbHNlKQorCisvKiBUcnVlIGlmICJuYXRpdmUiIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgYXJlIHN1cHBvcnRlZCwKKyAgIGZhbHNlIGlmIHdlJ3JlIHVzaW5nIGNvbGxlY3QyIGZvciB0aGUgam9iLiAgKi8KK0RFRkhPT0tQT0QKKyhoYXZlX2N0b3JzX2R0b3JzLAorICIiLAorIGJvb2wsIGZhbHNlKQorCisvKiBUcnVlIGlmIHRocmVhZC1sb2NhbCBzdG9yYWdlIGlzIHN1cHBvcnRlZC4gICovCitERUZIT09LUE9ECisoaGF2ZV90bHMsCisgIiIsCisgYm9vbCwgZmFsc2UpCisKKy8qIFRydWUgaWYgYSBzbWFsbCByZWFkb25seSBkYXRhIHNlY3Rpb24gaXMgc3VwcG9ydGVkLiAgKi8KK0RFRkhPT0tQT0QKKyhoYXZlX3Nyb2RhdGFfc2VjdGlvbiwKKyAiIiwKKyBib29sLCBmYWxzZSkKKworLyogVHJ1ZSBpZiBFSCBmcmFtZSBpbmZvIHNlY3Rpb25zIHNob3VsZCBiZSB6ZXJvLXRlcm1pbmF0ZWQuICAqLworREVGSE9PS1BPRAorKHRlcm1pbmF0ZV9kdzJfZWhfZnJhbWVfaW5mbywKKyAiIiwKKyBib29sLCB0cnVlKQorCisvKiBUcnVlIGlmICNOT19BUFAgc2hvdWxkIGJlIGVtaXR0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhc3NlbWJseSBvdXRwdXQuICAqLworREVGSE9PS1BPRAorKGFzbV9maWxlX3N0YXJ0X2FwcF9vZmYsCisgIiIsCisgYm9vbCwgZmFsc2UpCisKKy8qIFRydWUgaWYgb3V0cHV0X2ZpbGVfZGlyZWN0aXZlIHNob3VsZCBiZSBjYWxsZWQgZm9yIG1haW5faW5wdXRfZmlsZW5hbWUKKyAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYXNzZW1ibHkgb3V0cHV0LiAgKi8KK0RFRkhPT0tQT0QKKyhhc21fZmlsZV9zdGFydF9maWxlX2RpcmVjdGl2ZSwKKyAiIiwKKyBib29sLCBmYWxzZSkKKworLyogVHJ1ZSBpZiB0aGUgdGFyZ2V0IGlzIGFsbG93ZWQgdG8gcmVvcmRlciBtZW1vcnkgYWNjZXNzZXMgdW5sZXNzCisgICBzeW5jaHJvbml6YXRpb24gaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuICAqLworREVGSE9PS1BPRAorKHJlbGF4ZWRfb3JkZXJpbmcsCisgIiIsCisgYm9vbCwgZmFsc2UpCisKKy8qIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgZ2VuZXJhdGUgZXhjZXB0aW9uIHRhYmxlcyBmb3IgdXNlIHdpdGggdGhlCisgICBBUk0gRUFCSS4gIFRoZSBlZmZlY3RzIHRoZSBlbmNvZGluZyBvZiBmdW5jdGlvbiBleGNlcHRpb24gc3BlY2lmaWNhdGlvbnMuICAqLworREVGSE9PS1BPRAorKGFybV9lYWJpX3Vud2luZGVyLAorICIiLAorIGJvb2wsIGZhbHNlKQorCitERUZIT09LUE9ECisod2FudF9kZWJ1Z19wdWJfc2VjdGlvbnMsCisgIlRydWUgaWYgdGhlIEBjb2Rley5kZWJ1Z19wdWJ0eXBlc30gYW5kIEBjb2Rley5kZWJ1Z19wdWJuYW1lc30gc2VjdGlvbnNcCisgc2hvdWxkIGJlIGVtaXR0ZWQuICBUaGVzZSBzZWN0aW9ucyBhcmUgbm90IHVzZWQgb24gbW9zdCBwbGF0Zm9ybXMsIGFuZFwKKyBpbiBwYXJ0aWN1bGFyIEdEQiBkb2VzIG5vdCB1c2UgdGhlbS4iLAorIGJvb2wsIGZhbHNlKQorCitERUZIT09LUE9ECisoZm9yY2VfYXRfY29tcF9kaXIsCisgIlRydWUgaWYgdGhlIEBjb2Rle0RXX0FUX2NvbXBfZGlyfSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGVtaXR0ZWQgZm9yIGVhY2ggXAorIGNvbXBpbGF0aW9uIHVuaXQuICBUaGlzIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBmb3IgdGhlIGRhcndpbiBsaW5rZXIgXAorIHRvIGVtaXQgZGVidWcgaW5mb3JtYXRpb24uIiwKKyBib29sLCBmYWxzZSkKKworREVGSE9PS1BPRAorKGRlbGF5X3NjaGVkMiwgIlRydWUgaWYgc2NoZWQyIGlzIG5vdCB0byBiZSBydW4gYXQgaXRzIG5vcm1hbCBwbGFjZS4gIFwKK1RoaXMgdXN1YWxseSBtZWFucyBpdCB3aWxsIGJlIHJ1biBhcyBwYXJ0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcmVvcmcuIiwKK2Jvb2wsIGZhbHNlKQorCitERUZIT09LUE9ECisoZGVsYXlfdmFydHJhY2ssICJUcnVlIGlmIHZhcnRyYWNrIGlzIG5vdCB0byBiZSBydW4gYXQgaXRzIG5vcm1hbCBwbGFjZS4gIFwKK1RoaXMgdXN1YWxseSBtZWFucyBpdCB3aWxsIGJlIHJ1biBhcyBwYXJ0IG9mIG1hY2hpbmUtc3BlY2lmaWMgcmVvcmcuIiwKK2Jvb2wsIGZhbHNlKQorCisvKiBMZWF2ZSB0aGUgYm9vbGVhbiBmaWVsZHMgYXQgdGhlIGVuZC4gICovCisKKy8qIENsb3NlIHRoZSAnc3RydWN0IGdjY190YXJnZXQnIGRlZmluaXRpb24uICAqLworSE9PS19WRUNUT1JfRU5EIChDOTBfRU1QVFlfSEFDSykKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90YXJnZXQuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY4MTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RhcmdldC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKiBEYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgYSBnZW5lcmljIEdDQyB0YXJnZXQuCisgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIEluIG90aGVyIHdvcmRzLCB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZSB0aGlzIHByb2dyYW0uCisgICBZb3UgYXJlIGZvcmJpZGRlbiB0byBmb3JiaWQgYW55b25lIGVsc2UgdG8gdXNlLCBzaGFyZSBhbmQgaW1wcm92ZQorICAgd2hhdCB5b3UgZ2l2ZSB0aGVtLiAgIEhlbHAgc3RhbXAgb3V0IHNvZnR3YXJlLWhvYXJkaW5nISAgKi8KKworCisvKiBUaGlzIGZpbGUgY29udGFpbnMgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIEdDQyB0YXJnZXQuCisgICBBdCBwcmVzZW50IGl0IGlzIGluY29tcGxldGUsIGJ1dCBpbiBmdXR1cmUgaXQgc2hvdWxkIGdyb3cgdG8KKyAgIGNvbnRhaW4gbW9zdCBvciBhbGwgdGFyZ2V0IG1hY2hpbmUgYW5kIHRhcmdldCBPL1Mgc3BlY2lmaWMKKyAgIGluZm9ybWF0aW9uLgorCisgICBUaGlzIHN0cnVjdHVyZSBoYXMgaXRzIGluaXRpYWxpemVyIGRlY2xhcmVkIGluIHRhcmdldC1kZWYuaCBpbiB0aGUKKyAgIGZvcm0gb2YgbGFyZ2UgbWFjcm8gVEFSR0VUX0lOSVRJQUxJWkVSIHRoYXQgZXhwYW5kcyB0byBtYW55IHNtYWxsZXIKKyAgIG1hY3Jvcy4KKworICAgVGhlIHNtYWxsZXIgbWFjcm9zIGVhY2ggaW5pdGlhbGl6ZSBvbmUgY29tcG9uZW50IG9mIHRoZSBzdHJ1Y3R1cmUsCisgICBhbmQgZWFjaCBoYXMgYSBkZWZhdWx0LiAgRWFjaCB0YXJnZXQgc2hvdWxkIGhhdmUgYSBmaWxlIHRoYXQKKyAgIGluY2x1ZGVzIHRhcmdldC5oIGFuZCB0YXJnZXQtZGVmLmgsIGFuZCBvdmVycmlkZXMgYW55IGluYXBwcm9wcmlhdGUKKyAgIGRlZmF1bHRzIGJ5IHVuZGVmaW5pbmcgdGhlIHJlbGV2YW50IG1hY3JvIGFuZCBkZWZpbmluZyBhIHN1aXRhYmxlCisgICByZXBsYWNlbWVudC4gIFRoYXQgZmlsZSBzaG91bGQgdGhlbiBjb250YWluIHRoZSBkZWZpbml0aW9uIG9mCisgICAidGFyZ2V0bSIgbGlrZSBzbzoKKworICAgc3RydWN0IGdjY190YXJnZXQgdGFyZ2V0bSA9IFRBUkdFVF9JTklUSUFMSVpFUjsKKworICAgRG9pbmcgdGhpbmdzIHRoaXMgd2F5IGFsbG93cyB1cyB0byBicmluZyB0b2dldGhlciBldmVyeXRoaW5nIHRoYXQKKyAgIGRlZmluZXMgYSBHQ0MgdGFyZ2V0LiAgQnkgc3VwcGx5aW5nIGEgZGVmYXVsdCB0aGF0IGlzIGFwcHJvcHJpYXRlCisgICB0byBtb3N0IHRhcmdldHMsIHdlIGNhbiBlYXNpbHkgYWRkIG5ldyBpdGVtcyB3aXRob3V0IG5lZWRpbmcgdG8KKyAgIGVkaXQgZG96ZW5zIG9mIHRhcmdldCBjb25maWd1cmF0aW9uIGZpbGVzLiAgSXQgc2hvdWxkIGFsc28gYWxsb3cgdXMKKyAgIHRvIGdyYWR1YWxseSByZWR1Y2UgdGhlIGFtb3VudCBvZiBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGlzCisgICBzY2F0dGVyZWQgdGhyb3VnaG91dCBHQ0MuICAqLworCisjaWZuZGVmIEdDQ19UQVJHRVRfSAorI2RlZmluZSBHQ0NfVEFSR0VUX0gKKworI2luY2x1ZGUgImluc24tbW9kZXMuaCIKKworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworCit0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm1hZ2ljOyB2b2lkICpwOyB9IGN1bXVsYXRpdmVfYXJnc190OworCisjZWxzZSAvKiAhRU5BQkxFX0NIRUNLSU5HICovCisKKy8qIFdoZW4gdXNpbmcgYSBHQ0MgYnVpbGQgY29tcGlsZXIsIHdlIGNvdWxkIHVzZQorICAgX19hdHRyaWJ1dGVfXygodHJhbnNwYXJlbnRfdW5pb24pKSB0byBnZXQgY3VtdWxhdGl2ZV9hcmdzX3QgZnVuY3Rpb24KKyAgIGFyZ3VtZW50cyBwYXNzZWQgbGlrZSBzY2FsYXJzIHdoZXJlIHRoZSBBQkkgd291bGQgbWFuZGF0ZSBhIGxlc3MKKyAgIGVmZmljaWVudCB3YXkgb2YgYXJndW1lbnQgcGFzc2luZyBvdGhlcndpc2UuICBIb3dldmVyLCB0aGF0IHdvdWxkIGNvbWUKKyAgIGF0IHRoZSBjb3N0IG9mIGxlc3MgdHlwZS1zYWZlICFFTkFCTEVfQ0hFQ0tJTkcgY29tcGlsYXRpb24uICAqLworCit0eXBlZGVmIHVuaW9uIHsgdm9pZCAqcDsgfSBjdW11bGF0aXZlX2FyZ3NfdDsKKworI2VuZGlmIC8qICFFTkFCTEVfQ0hFQ0tJTkcgKi8KKworLyogVHlwZXMgdXNlZCBieSB0aGUgcmVjb3JkX2djY19zd2l0Y2hlcygpIHRhcmdldCBmdW5jdGlvbi4gICovCit0eXBlZGVmIGVudW0KK3sKKyAgU1dJVENIX1RZUEVfUEFTU0VELAkJLyogQSBzd2l0Y2ggcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLworICBTV0lUQ0hfVFlQRV9FTkFCTEVELAkJLyogQW4gb3B0aW9uIHRoYXQgaXMgY3VycmVudGx5IGVuYWJsZWQuICAqLworICBTV0lUQ0hfVFlQRV9ERVNDUklQVElWRSwJLyogRGVzY3JpcHRpdmUgdGV4dCwgbm90IGEgc3dpdGNoIG9yIG9wdGlvbi4gICovCisgIFNXSVRDSF9UWVBFX0xJTkVfU1RBUlQsCS8qIFBsZWFzZSBlbWl0IGFueSBuZWNlc3NhcnkgdGV4dCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLiAgKi8KKyAgU1dJVENIX1RZUEVfTElORV9FTkQJCS8qIFBsZWFzZSBlbWl0IGEgbGluZSB0ZXJtaW5hdG9yLiAgKi8KK30KK3ByaW50X3N3aXRjaF90eXBlOworCit0eXBlZGVmIGludCAoKiBwcmludF9zd2l0Y2hfZm5fdHlwZSkgKHByaW50X3N3aXRjaF90eXBlLCBjb25zdCBjaGFyICopOworCisvKiBBbiBleGFtcGxlIGltcGxlbWVudGF0aW9uIGZvciBFTEYgdGFyZ2V0cy4gIERlZmluZWQgaW4gdmFyYXNtLmMgICovCitleHRlcm4gaW50IGVsZl9yZWNvcmRfZ2NjX3N3aXRjaGVzIChwcmludF9zd2l0Y2hfdHlwZSB0eXBlLCBjb25zdCBjaGFyICopOworCisvKiBTb21lIHBsYWNlcyBzdGlsbCBhc3N1bWUgdGhhdCBhbGwgcG9pbnRlciBvciBhZGRyZXNzIG1vZGVzIGFyZSB0aGUKKyAgIHN0YW5kYXJkIFBtb2RlIGFuZCBwdHJfbW9kZS4gIFRoZXNlIG9wdGltaXphdGlvbnMgYmVjb21lIGludmFsaWQgaWYKKyAgIHRoZSB0YXJnZXQgYWN0dWFsbHkgc3VwcG9ydHMgbXVsdGlwbGUgZGlmZmVyZW50IG1vZGVzLiAgRm9yIG5vdywKKyAgIHdlIGRpc2FibGUgc3VjaCBvcHRpbWl6YXRpb25zIG9uIHN1Y2ggdGFyZ2V0cywgdXNpbmcgdGhpcyBmdW5jdGlvbi4gICovCitleHRlcm4gYm9vbCB0YXJnZXRfZGVmYXVsdF9wb2ludGVyX2FkZHJlc3NfbW9kZXNfcCAodm9pZCk7CisKK3N0cnVjdCBzdGRhcmdfaW5mbzsKK3N0cnVjdCBzcGVjX2luZm9fZGVmOworc3RydWN0IGhhcmRfcmVnX3NldF9jb250YWluZXI7CisKKy8qIFRoZSBzdHJ1Y3QgdXNlZCBieSB0aGUgc2Vjb25kYXJ5X3JlbG9hZCB0YXJnZXQgaG9vay4gICovCit0eXBlZGVmIHN0cnVjdCBzZWNvbmRhcnlfcmVsb2FkX2luZm8KK3sKKyAgLyogaWNvZGUgaXMgYWN0dWFsbHkgYW4gZW51bSBpbnNuX2NvZGUsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGZvcmNlIGV2ZXJ5CisgICAgIGZpbGUgdGhhdCBpbmNsdWRlcyB0YXJnZXQuaCB0byBpbmNsdWRlIG9wdGFicy5oIC4gICovCisgIGludCBpY29kZTsKKyAgaW50IGV4dHJhX2Nvc3Q7IC8qIENvc3QgZm9yIHVzaW5nIChhKSBzY3JhdGNoIHJlZ2lzdGVyKHMpIHRvIGJlIHRha2VuCisJCSAgICAgaW50byBhY2NvdW50IGJ5IGNvcHlfY29zdC4gICovCisgIC8qIFRoZSBuZXh0IHR3byBtZW1iZXJzIGFyZSBmb3IgdGhlIHVzZSBvZiB0aGUgYmFja3dhcmQKKyAgICAgY29tcGF0aWJpbGl0eSBob29rLiAgKi8KKyAgc3RydWN0IHNlY29uZGFyeV9yZWxvYWRfaW5mbyAqcHJldl9zcmk7CisgIGludCB0X2ljb2RlOyAvKiBBY3R1YWxseSBhbiBlbnVtIGluc25fY29kZSAtIHNlZSBhYm92ZS4gICovCit9IHNlY29uZGFyeV9yZWxvYWRfaW5mbzsKKworLyogVGhpcyBpcyBkZWZpbmVkIGluIHNjaGVkLWludC5oIC4gICovCitzdHJ1Y3QgX2RlcDsKKworLyogVGhpcyBpcyBkZWZpbmVkIGluIGRkZy5oIC4gICovCitzdHJ1Y3QgZGRnOworCisvKiBUaGlzIGlzIGRlZmluZWQgaW4gY2ZnbG9vcC5oIC4gICovCitzdHJ1Y3QgbG9vcDsKKworLyogVGhpcyBpcyBkZWZpbmVkIGluIHRyZWUtc3NhLWFsaWFzLmguICAqLworc3RydWN0IGFvX3JlZl9zOworCisvKiBUaGlzIGlzIGRlZmluZWQgaW4gdHJlZS12ZWN0b3JpemVyLmguICAqLworc3RydWN0IF9zdG10X3ZlY19pbmZvOworCisvKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiB0cmVlLXZlY3Qtc3RtdHMuYy4gICovCitleHRlcm4gdHJlZSBzdG10X3ZlY3R5cGUgKHN0cnVjdCBfc3RtdF92ZWNfaW5mbyAqKTsKK2V4dGVybiBib29sIHN0bXRfaW5faW5uZXJfbG9vcF9wIChzdHJ1Y3QgX3N0bXRfdmVjX2luZm8gKik7CisKKy8qIEFzc2VtYmxlciBpbnN0cnVjdGlvbnMgZm9yIGNyZWF0aW5nIHZhcmlvdXMga2luZHMgb2YgaW50ZWdlciBvYmplY3QuICAqLworCitzdHJ1Y3QgYXNtX2ludF9vcAoreworICBjb25zdCBjaGFyICpoaTsKKyAgY29uc3QgY2hhciAqc2k7CisgIGNvbnN0IGNoYXIgKmRpOworICBjb25zdCBjaGFyICp0aTsKK307CisKKy8qIFR5cGVzIG9mIGNvc3RzIGZvciB2ZWN0b3JpemVyIGNvc3QgbW9kZWwuICAqLworZW51bSB2ZWN0X2Nvc3RfZm9yX3N0bXQKK3sKKyAgc2NhbGFyX3N0bXQsCisgIHNjYWxhcl9sb2FkLAorICBzY2FsYXJfc3RvcmUsCisgIHZlY3Rvcl9zdG10LAorICB2ZWN0b3JfbG9hZCwKKyAgdW5hbGlnbmVkX2xvYWQsCisgIHVuYWxpZ25lZF9zdG9yZSwKKyAgdmVjdG9yX3N0b3JlLAorICB2ZWNfdG9fc2NhbGFyLAorICBzY2FsYXJfdG9fdmVjLAorICBjb25kX2JyYW5jaF9ub3RfdGFrZW4sCisgIGNvbmRfYnJhbmNoX3Rha2VuLAorICB2ZWNfcGVybSwKKyAgdmVjX3Byb21vdGVfZGVtb3RlLAorICB2ZWNfY29uc3RydWN0Cit9OworCisvKiBTZXBhcmF0ZSBsb2NhdGlvbnMgZm9yIHdoaWNoIHRoZSB2ZWN0b3JpemVyIGNvc3QgbW9kZWwgc2hvdWxkCisgICB0cmFjayBjb3N0cy4gICovCitlbnVtIHZlY3RfY29zdF9tb2RlbF9sb2NhdGlvbiB7CisgIHZlY3RfcHJvbG9ndWUgPSAwLAorICB2ZWN0X2JvZHkgPSAxLAorICB2ZWN0X2VwaWxvZ3VlID0gMgorfTsKKworLyogVGhlIHRhcmdldCBzdHJ1Y3R1cmUuICBUaGlzIGhvbGRzIGFsbCB0aGUgYmFja2VuZCBob29rcy4gICovCisjZGVmaW5lIERFRkhPT0tQT0QoTkFNRSwgRE9DLCBUWVBFLCBJTklUKSBUWVBFIE5BTUU7CisjZGVmaW5lIERFRkhPT0soTkFNRSwgRE9DLCBUWVBFLCBQQVJBTVMsIElOSVQpIFRZUEUgKCogTkFNRSkgUEFSQU1TOworI2RlZmluZSBERUZIT09LX1VORE9DIERFRkhPT0sKKyNkZWZpbmUgSE9PS1NUUlVDVChGUkFHTUVOVCkgRlJBR01FTlQKKworI2luY2x1ZGUgInRhcmdldC5kZWYiCisKK2V4dGVybiBzdHJ1Y3QgZ2NjX3RhcmdldCB0YXJnZXRtOworCisjaWZkZWYgR0NDX1RNX0gKKworI2lmbmRlZiBDVU1VTEFUSVZFX0FSR1NfTUFHSUMKKyNkZWZpbmUgQ1VNVUxBVElWRV9BUkdTX01BR0lDICgodm9pZCAqKSAmdGFyZ2V0bS5jYWxscykKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIENVTVVMQVRJVkVfQVJHUyAqCitnZXRfY3VtdWxhdGl2ZV9hcmdzIChjdW11bGF0aXZlX2FyZ3NfdCBhcmcpCit7CisjaWZkZWYgRU5BQkxFX0NIRUNLSU5HCisgIGdjY19hc3NlcnQgKGFyZy5tYWdpYyA9PSBDVU1VTEFUSVZFX0FSR1NfTUFHSUMpOworI2VuZGlmIC8qIEVOQUJMRV9DSEVDS0lORyAqLworICByZXR1cm4gKENVTVVMQVRJVkVfQVJHUyAqKSBhcmcucDsKK30KKworc3RhdGljIGlubGluZSBjdW11bGF0aXZlX2FyZ3NfdAorcGFja19jdW11bGF0aXZlX2FyZ3MgKENVTVVMQVRJVkVfQVJHUyAqYXJnKQoreworICBjdW11bGF0aXZlX2FyZ3NfdCByZXQ7CisKKyNpZmRlZiBFTkFCTEVfQ0hFQ0tJTkcKKyAgcmV0Lm1hZ2ljID0gQ1VNVUxBVElWRV9BUkdTX01BR0lDOworI2VuZGlmIC8qIEVOQUJMRV9DSEVDS0lORyAqLworICByZXQucCA9ICh2b2lkICopIGFyZzsKKyAgcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBHQ0NfVE1fSCAqLworCisjZW5kaWYgLyogR0NDX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdGltZXZhci5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdGltZXZhci5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmMGVhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90aW1ldmFyLmRlZgpAQCAtMCwwICsxLDI3MCBAQAorLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGltaW5nIHZhcmlhYmxlcyB1c2VkIHRvCisgICBtZWFzdXJlIHJ1bi10aW1lIHBlcmZvcm1hbmNlIG9mIHRoZSBjb21waWxlci4KKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQWxleCBTYW11ZWwgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRpbWluZyB2YXJpYWJsZSBkZWZpbml0aW9ucywgdXNlZCBieSB0aW1ldmFyLmgKKyAgIGFuZCB0aW1ldmFyLmMuCisKKyAgIFN5bnRheDoKKworICAgICBERUZUSU1FVkFSIChpZCwgbmFtZSkKKworICAgd2hlcmUgSUQgaXMgdGhlIGVudW1lcmFsIHZhbHVlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHRpbWluZworICAgdmFyaWFibGUsIGFuZCBOQU1FIGlzIGEgY2hhcmFjdGVyIHN0cmluZyBkZXNjcmliaW5nIGl0cyBwdXJwb3NlLiAgKi8KKworLyogVGhlIHRvdGFsIGV4ZWN1dGlvbiB0aW1lLiAgKi8KK0RFRlRJTUVWQVIgKFRWX1RPVEFMICAgICAgICAgICAgICAgICAsICJ0b3RhbCB0aW1lIikKKy8qIFRoZSBjb21waWxlciBwaGFzZXMuICBUaGVzZSBtdXN0IGJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKyAgIElkZWFsbHksIHRoZXkgd291bGQgc3VtIHRvIG5lYXIgdGhlIHRvdGFsIHRpbWUuICAqLworREVGVElNRVZBUiAoVFZfUEhBU0VfU0VUVVAgICAgICAgICAgICwgInBoYXNlIHNldHVwIikKK0RFRlRJTUVWQVIgKFRWX1BIQVNFX1BBUlNJTkcgICAgICAgICAsICJwaGFzZSBwYXJzaW5nIikKK0RFRlRJTUVWQVIgKFRWX1BIQVNFX0RFRkVSUkVEICAgICAgICAsICJwaGFzZSBsYW5nLiBkZWZlcnJlZCIpCitERUZUSU1FVkFSIChUVl9QSEFTRV9PUFRfR0VOICAgICAgICAgLCAicGhhc2Ugb3B0IGFuZCBnZW5lcmF0ZSIpCitERUZUSU1FVkFSIChUVl9QSEFTRV9EQkdJTkZPICAgICAgICAgLCAicGhhc2UgZGVidWcgaW5mbyIpCitERUZUSU1FVkFSIChUVl9QSEFTRV9DSEVDS19EQkdJTkZPICAgLCAicGhhc2UgY2hlY2sgJiBkZWJ1ZyBpbmZvIikKK0RFRlRJTUVWQVIgKFRWX1BIQVNFX0xBVEVfQVNNICAgICAgICAsICJwaGFzZSBsYXN0IGFzbSIpCitERUZUSU1FVkFSIChUVl9QSEFTRV9TVFJFQU1fSU4gICAgICAgLCAicGhhc2Ugc3RyZWFtIGluIikKK0RFRlRJTUVWQVIgKFRWX1BIQVNFX1NUUkVBTV9PVVQgICAgICAsICJwaGFzZSBzdHJlYW0gb3V0IikKK0RFRlRJTUVWQVIgKFRWX1BIQVNFX0ZJTkFMSVpFICAgICAgICAsICJwaGFzZSBmaW5hbGl6ZSIpCisKKy8qIENvbmN1cnJlbnQgdGltZXJzLCBpbmRpY2F0ZWQgYnkgInwiLiAgKi8KK0RFRlRJTUVWQVIgKFRWX05BTUVfTE9PS1VQICAgICAgICAgICAsICJ8bmFtZSBsb29rdXAiKQorREVGVElNRVZBUiAoVFZfT1ZFUkxPQUQgICAgICAgICAgICAgICwgInxvdmVybG9hZCByZXNvbHV0aW9uIikKKworLyogVGltZSBzcGVudCBnYXJiYWdlLWNvbGxlY3RpbmcuICAqLworREVGVElNRVZBUiAoVFZfR0MgICAgICAgICAgICAgICAgICAgICwgImdhcmJhZ2UgY29sbGVjdGlvbiIpCisKKy8qIFRpbWUgc3BlbnQgZ2VuZXJhdGluZyBkdW1wIGZpbGVzLiAgKi8KK0RFRlRJTUVWQVIgKFRWX0RVTVAgICAgICAgICAgICAgICAgICAsICJkdW1wIGZpbGVzIikKKworLyogVGltZSBzcGVudCBzYXZpbmcvcmVzdG9yaW5nIFBDSCBzdGF0ZS4gICovCitERUZUSU1FVkFSIChUVl9QQ0hfU0FWRSAgICAgICAgICAgICAgLCAiUENIIG1haW4gc3RhdGUgc2F2ZSIpCitERUZUSU1FVkFSIChUVl9QQ0hfQ1BQX1NBVkUgICAgICAgICAgLCAiUENIIHByZXByb2Nlc3NvciBzdGF0ZSBzYXZlIikKK0RFRlRJTUVWQVIgKFRWX1BDSF9QVFJfUkVBTExPQyAgICAgICAsICJQQ0ggcG9pbnRlciByZWFsbG9jYXRpb24iKQorREVGVElNRVZBUiAoVFZfUENIX1BUUl9TT1JUICAgICAgICAgICwgIlBDSCBwb2ludGVyIHNvcnQiKQorREVGVElNRVZBUiAoVFZfUENIX1JFU1RPUkUgICAgICAgICAgICwgIlBDSCBtYWluIHN0YXRlIHJlc3RvcmUiKQorREVGVElNRVZBUiAoVFZfUENIX0NQUF9SRVNUT1JFICAgICAgICwgIlBDSCBwcmVwcm9jZXNzb3Igc3RhdGUgcmVzdG9yZSIpCisKK0RFRlRJTUVWQVIgKFRWX0NHUkFQSCAgICAgICAgICAgICAgICAsICJjYWxsZ3JhcGggY29uc3RydWN0aW9uIikKK0RFRlRJTUVWQVIgKFRWX0NHUkFQSE9QVCAgICAgICAgICAgICAsICJjYWxsZ3JhcGggb3B0aW1pemF0aW9uIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9DT05TVEFOVF9QUk9QICAgICAsICJpcGEgY3AiKQorREVGVElNRVZBUiAoVFZfSVBBX0lOTElOSU5HICAgICAgICAgICwgImlwYSBpbmxpbmluZyBoZXVyaXN0aWNzIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9GTlNQTElUICAgICAgICAgICAsICJpcGEgZnVuY3Rpb24gc3BsaXR0aW5nIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9PUFQJCSAgICAgLCAiaXBhIHZhcmlvdXMgb3B0aW1pemF0aW9ucyIpCitERUZUSU1FVkFSIChUVl9JUEFfTFRPX0dJTVBMRV9JTiAgICAgLCAiaXBhIGx0byBnaW1wbGUgaW4iKQorREVGVElNRVZBUiAoVFZfSVBBX0xUT19HSU1QTEVfT1VUICAgICwgImlwYSBsdG8gZ2ltcGxlIG91dCIpCitERUZUSU1FVkFSIChUVl9JUEFfTFRPX0RFQ0xfSU4gICAgICAgLCAiaXBhIGx0byBkZWNsIGluIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9MVE9fREVDTF9PVVQgICAgICAsICJpcGEgbHRvIGRlY2wgb3V0IikKK0RFRlRJTUVWQVIgKFRWX0lQQV9MVE9fREVDTF9JTklUX0lPICAsICJpcGEgbHRvIGRlY2wgaW5pdCBJL08iKQorREVGVElNRVZBUiAoVFZfSVBBX0xUT19DR1JBUEhfSU8gICAgICwgImlwYSBsdG8gY2dyYXBoIEkvTyIpCitERUZUSU1FVkFSIChUVl9JUEFfTFRPX0RFQ0xfTUVSR0UgICAgLCAiaXBhIGx0byBkZWNsIG1lcmdlIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9MVE9fQ0dSQVBIX01FUkdFICAsICJpcGEgbHRvIGNncmFwaCBtZXJnZSIpCitERUZUSU1FVkFSIChUVl9MVE8gICAgICAgICAgICAgICAgICAgLCAibHRvIikKK0RFRlRJTUVWQVIgKFRWX1dIT1BSX1dQQSAgICAgICAgICAgICAsICJ3aG9wciB3cGEiKQorREVGVElNRVZBUiAoVFZfV0hPUFJfV1BBX0lPICAgICAgICAgICwgIndob3ByIHdwYSBJL08iKQorREVGVElNRVZBUiAoVFZfV0hPUFJfUEFSVElUSU9OSU5HICAgICwgIndob3ByIHBhcnRpdGlvbmluZyIpCitERUZUSU1FVkFSIChUVl9XSE9QUl9MVFJBTlMgICAgICAgICAgLCAid2hvcHIgbHRyYW5zIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9SRUZFUkVOQ0UgICAgICAgICAsICJpcGEgcmVmZXJlbmNlIikKK0RFRlRJTUVWQVIgKFRWX0lQQV9QUk9GSUxFICAgICAgICAgICAsICJpcGEgcHJvZmlsZSIpCitERUZUSU1FVkFSIChUVl9JUEFfUFVSRV9DT05TVCAgICAgICAgLCAiaXBhIHB1cmUgY29uc3QiKQorREVGVElNRVZBUiAoVFZfSVBBX1BUQSAgICAgICAgICAgICAgICwgImlwYSBwb2ludHMtdG8iKQorREVGVElNRVZBUiAoVFZfSVBBX1NSQSAgICAgICAgICAgICAgICwgImlwYSBTUkEiKQorREVGVElNRVZBUiAoVFZfSVBBX0ZSRUVfTEFOR19EQVRBICAgICwgImlwYSBmcmVlIGxhbmcgZGF0YSIpCitERUZUSU1FVkFSIChUVl9JUEFfRlJFRV9JTkxJTkVfU1VNTUFSWSwgImlwYSBmcmVlIGlubGluZSBzdW1tYXJ5IikKKy8qIFRpbWUgc3BlbnQgYnkgY29uc3RydWN0aW5nIENGRy4gICovCitERUZUSU1FVkFSIChUVl9DRkcgICAgICAgICAgICAgICAgICAgLCAiY2ZnIGNvbnN0cnVjdGlvbiIpCisvKiBUaW1lIHNwZW50IGJ5IGNsZWFuaW5nIHVwIENGRy4gICovCitERUZUSU1FVkFSIChUVl9DTEVBTlVQX0NGRyAgICAgICAgICAgLCAiY2ZnIGNsZWFudXAiKQorREVGVElNRVZBUiAoVFZfQ0ZHX1ZFUklGWSAgICAgICAgICAgICwgIkNGRyB2ZXJpZmllciIpCitERUZUSU1FVkFSIChUVl9ERUxFVEVfVFJJVklBTExZX0RFQUQgLCAidHJpdmlhbGx5IGRlYWQgY29kZSIpCisKKy8qIFRpbWUgc3BlbnQgaW4gZGF0YWZsb3cgcHJvYmxlbXMuICAqLworREVGVElNRVZBUiAoVFZfREZfU0NBTgkJICAgICAsICJkZiBzY2FuIGluc25zIikKK0RFRlRJTUVWQVIgKFRWX0RGX01ECQkgICAgICwgImRmIG11bHRpcGxlIGRlZnMiKQorREVGVElNRVZBUiAoVFZfREZfUkQJCSAgICAgLCAiZGYgcmVhY2hpbmcgZGVmcyIpCitERUZUSU1FVkFSIChUVl9ERl9MUgkJICAgICAsICJkZiBsaXZlIHJlZ3MiKQorREVGVElNRVZBUiAoVFZfREZfTElWRQkJICAgICAsICJkZiBsaXZlJmluaXRpYWxpemVkIHJlZ3MiKQorREVGVElNRVZBUiAoVFZfREZfQ0hBSU4JCSAgICAgLCAiZGYgdXNlLWRlZiAvIGRlZi11c2UgY2hhaW5zIikKK0RFRlRJTUVWQVIgKFRWX0RGX1dPUkRfTFIJICAgICAsICJkZiBsaXZlIHJlZyBzdWJ3b3JkcyIpCitERUZUSU1FVkFSIChUVl9ERl9OT1RFCQkgICAgICwgImRmIHJlZyBkZWFkL3VudXNlZCBub3RlcyIpCitERUZUSU1FVkFSIChUVl9SRUdfU1RBVFMJICAgICAsICJyZWdpc3RlciBpbmZvcm1hdGlvbiIpCisKK0RFRlRJTUVWQVIgKFRWX0FMSUFTX0FOQUxZU0lTCSAgICAgLCAiYWxpYXMgYW5hbHlzaXMiKQorREVGVElNRVZBUiAoVFZfQUxJQVNfU1RNVF9XQUxLCSAgICAgLCAiYWxpYXMgc3RtdCB3YWxraW5nIikKK0RFRlRJTUVWQVIgKFRWX1JFR19TQ0FOCQkgICAgICwgInJlZ2lzdGVyIHNjYW4iKQorREVGVElNRVZBUiAoVFZfUkVCVUlMRF9KVU1QCSAgICAgLCAicmVidWlsZCBqdW1wIGxhYmVscyIpCisvKiBUaW1pbmcgaW4gdmFyaW91cyBzdGFnZXMgb2YgdGhlIGNvbXBpbGVyLiAgKi8KK0RFRlRJTUVWQVIgKFRWX0NQUAkJICAgICAsICJwcmVwcm9jZXNzaW5nIikKK0RFRlRJTUVWQVIgKFRWX0xFWAkJICAgICAsICJsZXhpY2FsIGFuYWx5c2lzIikKK0RFRlRJTUVWQVIgKFRWX1BBUlNFX0dMT0JBTCAgICAgICAgICAsICJwYXJzZXIgKGdsb2JhbCkiKQorREVGVElNRVZBUiAoVFZfUEFSU0VfU1RSVUNUICAgICAgICAgICwgInBhcnNlciBzdHJ1Y3QgYm9keSIpCitERUZUSU1FVkFSIChUVl9QQVJTRV9FTlVNICAgICAgICAgICAgLCAicGFyc2VyIGVudW1lcmF0b3IgbGlzdCIpCitERUZUSU1FVkFSIChUVl9QQVJTRV9GVU5DICAgICAgICAgICAgLCAicGFyc2VyIGZ1bmN0aW9uIGJvZHkiKQorREVGVElNRVZBUiAoVFZfUEFSU0VfSU5MSU5FICAgICAgICAgICwgInBhcnNlciBpbmwuIGZ1bmMuIGJvZHkiKQorREVGVElNRVZBUiAoVFZfUEFSU0VfSU5NRVRIICAgICAgICAgICwgInBhcnNlciBpbmwuIG1ldGguIGJvZHkiKQorREVGVElNRVZBUiAoVFZfVEVNUExBVEVfSU5TVCAgICAgICAgICwgInRlbXBsYXRlIGluc3RhbnRpYXRpb24iKQorREVGVElNRVZBUiAoVFZfRkxBVFRFTl9JTkxJTklORyAgICAgICwgImZsYXR0ZW4gaW5saW5pbmciKQorREVGVElNRVZBUiAoVFZfRUFSTFlfSU5MSU5JTkcgICAgICAgICwgImVhcmx5IGlubGluaW5nIGhldXJpc3RpY3MiKQorREVGVElNRVZBUiAoVFZfSU5MSU5FX1BBUkFNRVRFUlMgICAgICwgImlubGluZSBwYXJhbWV0ZXJzIikKK0RFRlRJTUVWQVIgKFRWX0lOVEVHUkFUSU9OICAgICAgICAgICAsICJpbnRlZ3JhdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX0dJTVBMSUZZCSAgICAgLCAidHJlZSBnaW1wbGlmeSIpCitERUZUSU1FVkFSIChUVl9UUkVFX0VICQkgICAgICwgInRyZWUgZWgiKQorREVGVElNRVZBUiAoVFZfVFJFRV9DRkcJCSAgICAgLCAidHJlZSBDRkcgY29uc3RydWN0aW9uIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfQ0xFQU5VUF9DRkcJICAgICAsICJ0cmVlIENGRyBjbGVhbnVwIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfVEFJTF9NRVJHRSAgICAgICAsICJ0cmVlIHRhaWwgbWVyZ2UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9WUlAgICAgICAgICAgICAgICwgInRyZWUgVlJQIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfQ09QWV9QUk9QICAgICAgICAsICJ0cmVlIGNvcHkgcHJvcGFnYXRpb24iKQorREVGVElNRVZBUiAoVFZfRklORF9SRUZFUkVOQ0VEX1ZBUlMgICwgInRyZWUgZmluZCByZWYuIHZhcnMiKQorREVGVElNRVZBUiAoVFZfVFJFRV9QVEEJCSAgICAgLCAidHJlZSBQVEEiKQorREVGVElNRVZBUiAoVFZfVFJFRV9JTlNFUlRfUEhJX05PREVTICwgInRyZWUgUEhJIGluc2VydGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NTQV9SRVdSSVRFX0JMT0NLUywgInRyZWUgU1NBIHJld3JpdGUiKQorREVGVElNRVZBUiAoVFZfVFJFRV9TU0FfT1RIRVIJICAgICAsICJ0cmVlIFNTQSBvdGhlciIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NTQV9JTkNSRU1FTlRBTCAgLCAidHJlZSBTU0EgaW5jcmVtZW50YWwiKQorREVGVElNRVZBUiAoVFZfVFJFRV9PUFMJICAgICAgICAgICAgICwgInRyZWUgb3BlcmFuZCBzY2FuIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU1NBX0RPTUlOQVRPUl9PUFRTICAgLCAiZG9taW5hdG9yIG9wdGltaXphdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NSQSAgICAgICAgICAgICAgLCAidHJlZSBTUkEiKQorREVGVElNRVZBUiAoVFZfVFJFRV9DQ1AJCSAgICAgLCAidHJlZSBDQ1AiKQorREVGVElNRVZBUiAoVFZfVFJFRV9QSElfQ1BST1AJICAgICAsICJ0cmVlIFBISSBjb25zdC9jb3B5IHByb3AiKQorREVGVElNRVZBUiAoVFZfVFJFRV9TUExJVF9FREdFUyAgICAgICwgInRyZWUgc3BsaXQgY3JpdCBlZGdlcyIpCitERUZUSU1FVkFSIChUVl9UUkVFX1JFQVNTT0MgICAgICAgICAgLCAidHJlZSByZWFzc29jaWF0aW9uIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfUFJFCQkgICAgICwgInRyZWUgUFJFIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfRlJFCQkgICAgICwgInRyZWUgRlJFIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU0lOSyAgICAgICAgICAgICAsICJ0cmVlIGNvZGUgc2lua2luZyIpCitERUZUSU1FVkFSIChUVl9UUkVFX1BISU9QVAkgICAgICwgInRyZWUgbGluZWFyaXplIHBoaXMiKQorREVGVElNRVZBUiAoVFZfVFJFRV9GT1JXUFJPUAkgICAgICwgInRyZWUgZm9yd2FyZCBwcm9wYWdhdGUiKQorREVGVElNRVZBUiAoVFZfVFJFRV9QSElQUk9QCSAgICAgLCAidHJlZSBwaGlwcm9wIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfRENFCQkgICAgICwgInRyZWUgY29uc2VydmF0aXZlIERDRSIpCitERUZUSU1FVkFSIChUVl9UUkVFX0NEX0RDRQkgICAgICwgInRyZWUgYWdncmVzc2l2ZSBEQ0UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9DQUxMX0NEQ0UJICAgICAsICJ0cmVlIGJ1aWxkaW4gY2FsbCBEQ0UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9EU0UJCSAgICAgLCAidHJlZSBEU0UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9NRVJHRV9QSEkJICAgICAsICJQSEkgbWVyZ2UiKQorREVGVElNRVZBUiAoVFZfVFJFRV9MT09QCSAgICAgLCAidHJlZSBsb29wIG9wdGltaXphdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX0xPT1BfQk9VTkRTCSAgICAgLCAidHJlZSBsb29wIGJvdW5kcyIpCitERUZUSU1FVkFSIChUVl9MSU0gICAgICAgICAgICAgICAgICAgLCAidHJlZSBsb29wIGludmFyaWFudCBtb3Rpb24iKQorREVGVElNRVZBUiAoVFZfVFJFRV9MT09QX0lWQ0FOT04gICAgICwgInRyZWUgY2Fub25pY2FsIGl2IikKK0RFRlRJTUVWQVIgKFRWX1NDRVZfQ09OU1QgICAgICAgICAgICAsICJzY2V2IGNvbnN0YW50IHByb3AiKQorREVGVElNRVZBUiAoVFZfVFJFRV9MT09QX1VOU1dJVENIICAgICwgInRyZWUgbG9vcCB1bnN3aXRjaGluZyIpCitERUZUSU1FVkFSIChUVl9DT01QTEVURV9VTlJPTEwgICAgICAgLCAiY29tcGxldGUgdW5yb2xsaW5nIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfUEFSQUxMRUxJWkVfTE9PUFMsICJ0cmVlIHBhcmFsbGVsaXplIGxvb3BzIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfVkVDVE9SSVpBVElPTiAgICAsICJ0cmVlIHZlY3Rvcml6YXRpb24iKQorREVGVElNRVZBUiAoVFZfVFJFRV9TTFBfVkVDVE9SSVpBVElPTiwgInRyZWUgc2xwIHZlY3Rvcml6YXRpb24iKQorREVGVElNRVZBUiAoVFZfR1JBUEhJVEUgICAgICAgICAgICAgICwgIkdyYXBoaXRlIikKK0RFRlRJTUVWQVIgKFRWX0dSQVBISVRFX1RSQU5TRk9STVMgICAsICJHcmFwaGl0ZSBsb29wIHRyYW5zZm9ybXMiKQorREVGVElNRVZBUiAoVFZfR1JBUEhJVEVfREFUQV9ERVBTICAgICwgIkdyYXBoaXRlIGRhdGEgZGVwIGFuYWx5c2lzIikKK0RFRlRJTUVWQVIgKFRWX0dSQVBISVRFX0NPREVfR0VOICAgICAsICJHcmFwaGl0ZSBjb2RlIGdlbmVyYXRpb24iKQorREVGVElNRVZBUiAoVFZfVFJFRV9MT09QX0RJU1RSSUJVVElPTiwgInRyZWUgbG9vcCBkaXN0cmlidXRpb24iKQorREVGVElNRVZBUiAoVFZfQ0hFQ0tfREFUQV9ERVBTICAgICAgICwgInRyZWUgY2hlY2sgZGF0YSBkZXBlbmRlbmNlcyIpCitERUZUSU1FVkFSIChUVl9UUkVFX1BSRUZFVENICSAgICAgLCAidHJlZSBwcmVmZXRjaGluZyIpCitERUZUSU1FVkFSIChUVl9UUkVFX0xPT1BfSVZPUFRTCSAgICAgLCAidHJlZSBpdiBvcHRpbWl6YXRpb24iKQorREVGVElNRVZBUiAoVFZfUFJFRENPTQkJICAgICAsICJwcmVkaWN0aXZlIGNvbW1vbmluZyIpCitERUZUSU1FVkFSIChUVl9UUkVFX0NICQkgICAgICwgInRyZWUgY29weSBoZWFkZXJzIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfU1NBX1VOQ1BST1AJICAgICAsICJ0cmVlIFNTQSB1bmNwcm9wIikKK0RFRlRJTUVWQVIgKFRWX1RSRUVfTlJWCQkgICAgICwgInRyZWUgTlJWIG9wdGltaXphdGlvbiIpCitERUZUSU1FVkFSIChUVl9UUkVFX0NPUFlfUkVOQU1FCSAgICAgLCAidHJlZSByZW5hbWUgU1NBIGNvcGllcyIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NTQV9WRVJJRlkgICAgICAgLCAidHJlZSBTU0EgdmVyaWZpZXIiKQorREVGVElNRVZBUiAoVFZfVFJFRV9TVE1UX1ZFUklGWSAgICAgICwgInRyZWUgU1RNVCB2ZXJpZmllciIpCitERUZUSU1FVkFSIChUVl9UUkVFX1NXSVRDSF9DT05WRVJTSU9OLCAidHJlZSBzd2l0Y2ggY29udmVyc2lvbiIpCitERUZUSU1FVkFSIChUVl9UUkFOU19NRU0gICAgICAgICAgICAgLCAidHJhbnNhY3Rpb25hbCBtZW1vcnkiKQorREVGVElNRVZBUiAoVFZfVFJFRV9TVFJMRU4gICAgICAgICAgICwgInRyZWUgc3RybGVuIG9wdGltaXphdGlvbiIpCitERUZUSU1FVkFSIChUVl9DR1JBUEhfVkVSSUZZICAgICAgICAgLCAiY2FsbGdyYXBoIHZlcmlmaWVyIikKK0RFRlRJTUVWQVIgKFRWX0RPTV9GUk9OVElFUlMgICAgICAgICAsICJkb21pbmFuY2UgZnJvbnRpZXJzIikKK0RFRlRJTUVWQVIgKFRWX0RPTUlOQU5DRSAgICAgICAgICAgICAsICJkb21pbmFuY2UgY29tcHV0YXRpb24iKQorREVGVElNRVZBUiAoVFZfQ09OVFJPTF9ERVBFTkRFTkNFUyAgICwgImNvbnRyb2wgZGVwZW5kZW5jZXMiKQorREVGVElNRVZBUiAoVFZfT1VUX09GX1NTQQkgICAgICwgIm91dCBvZiBzc2EiKQorREVGVElNRVZBUiAoVFZfVkFSX0VYUEFORAkgICAgICwgImV4cGFuZCB2YXJzIikKK0RFRlRJTUVWQVIgKFRWX0VYUEFORAkJICAgICAsICJleHBhbmQiKQorREVGVElNRVZBUiAoVFZfUE9TVF9FWFBBTkQJICAgICAsICJwb3N0IGV4cGFuZCBjbGVhbnVwcyIpCitERUZUSU1FVkFSIChUVl9WQVJDT05TVCAgICAgICAgICAgICAgLCAidmFyY29uc3QiKQorREVGVElNRVZBUiAoVFZfTE9XRVJfU1VCUkVHCSAgICAgLCAibG93ZXIgc3VicmVnIikKK0RFRlRJTUVWQVIgKFRWX0pVTVAgICAgICAgICAgICAgICAgICAsICJqdW1wIikKK0RFRlRJTUVWQVIgKFRWX0ZXUFJPUCAgICAgICAgICAgICAgICAsICJmb3J3YXJkIHByb3AiKQorREVGVElNRVZBUiAoVFZfQ1NFICAgICAgICAgICAgICAgICAgICwgIkNTRSIpCitERUZUSU1FVkFSIChUVl9EQ0UgICAgICAgICAgICAgICAgICAgLCAiZGVhZCBjb2RlIGVsaW1pbmF0aW9uIikKK0RFRlRJTUVWQVIgKFRWX0RTRTEgICAgICAgICAgICAgICAgICAsICJkZWFkIHN0b3JlIGVsaW0xIikKK0RFRlRJTUVWQVIgKFRWX0RTRTIgICAgICAgICAgICAgICAgICAsICJkZWFkIHN0b3JlIGVsaW0yIikKK0RFRlRJTUVWQVIgKFRWX0xPT1AgICAgICAgICAgICAgICAgICAsICJsb29wIGFuYWx5c2lzIikKK0RFRlRJTUVWQVIgKFRWX0xPT1BfSU5JVAkgICAgICwgImxvb3AgaW5pdCIpCitERUZUSU1FVkFSIChUVl9MT09QX01PVkVfSU5WQVJJQU5UUyAgLCAibG9vcCBpbnZhcmlhbnQgbW90aW9uIikKK0RFRlRJTUVWQVIgKFRWX0xPT1BfVU5TV0lUQ0ggICAgICAgICAsICJsb29wIHVuc3dpdGNoaW5nIikKK0RFRlRJTUVWQVIgKFRWX0xPT1BfVU5ST0xMICAgICAgICAgICAsICJsb29wIHVucm9sbGluZyIpCitERUZUSU1FVkFSIChUVl9MT09QX0RPTE9PUCAgICAgICAgICAgLCAibG9vcCBkb2xvb3AiKQorREVGVElNRVZBUiAoVFZfTE9PUF9GSU5JCSAgICAgLCAibG9vcCBmaW5pIikKK0RFRlRJTUVWQVIgKFRWX0NQUk9QICAgICAgICAgICAgICAgICAsICJDUFJPUCIpCitERUZUSU1FVkFSIChUVl9QUkUgICAgICAgICAgICAgICAgICAgLCAiUFJFIikKK0RFRlRJTUVWQVIgKFRWX0hPSVNUICAgICAgICAgICAgICAgICAsICJjb2RlIGhvaXN0aW5nIikKK0RFRlRJTUVWQVIgKFRWX0xTTSAgICAgICAgICAgICAgICAgICAsICJMU00iKQorREVGVElNRVZBUiAoVFZfVFJBQ0VSICAgICAgICAgICAgICAgICwgInRyYWNlciIpCitERUZUSU1FVkFSIChUVl9XRUIgICAgICAgICAgICAgICAgICAgLCAid2ViIikKK0RFRlRJTUVWQVIgKFRWX0FVVE9fSU5DX0RFQyAgICAgICAgICAsICJhdXRvIGluYyBkZWMiKQorREVGVElNRVZBUiAoVFZfQ1NFMiAgICAgICAgICAgICAgICAgICwgIkNTRSAyIikKK0RFRlRJTUVWQVIgKFRWX0JSQU5DSF9QUk9CICAgICAgICAgICAsICJicmFuY2ggcHJlZGljdGlvbiIpCitERUZUSU1FVkFSIChUVl9DT01CSU5FICAgICAgICAgICAgICAgLCAiY29tYmluZXIiKQorREVGVElNRVZBUiAoVFZfSUZDVlQJCSAgICAgLCAiaWYtY29udmVyc2lvbiIpCitERUZUSU1FVkFSIChUVl9SRUdNT1ZFICAgICAgICAgICAgICAgLCAicmVnbW92ZSIpCitERUZUSU1FVkFSIChUVl9NT0RFX1NXSVRDSCAgICAgICAgICAgLCAibW9kZSBzd2l0Y2hpbmciKQorREVGVElNRVZBUiAoVFZfU01TCQkgICAgICwgInNtcyBtb2R1bG8gc2NoZWR1bGluZyIpCitERUZUSU1FVkFSIChUVl9TQ0hFRCAgICAgICAgICAgICAgICAgLCAic2NoZWR1bGluZyIpCitERUZUSU1FVkFSIChUVl9JUkEJCSAgICAgLCAiaW50ZWdyYXRlZCBSQSIpCitERUZUSU1FVkFSIChUVl9MUkEJCSAgICAgLCAiTFJBIG5vbi1zcGVjaWZpYyIpCitERUZUSU1FVkFSIChUVl9MUkFfRUxJTUlOQVRFCSAgICAgLCAiTFJBIHZpcnR1YWxzIGVsaW1pbmF0aW9uIikKK0RFRlRJTUVWQVIgKFRWX0xSQV9JTkhFUklUQU5DRQkgICAgICwgIkxSQSByZWxvYWQgaW5oZXJpdGFuY2UiKQorREVGVElNRVZBUiAoVFZfTFJBX0NSRUFURV9MSVZFX1JBTkdFUywgIkxSQSBjcmVhdGUgbGl2ZSByYW5nZXMiKQorREVGVElNRVZBUiAoVFZfTFJBX0FTU0lHTgkgICAgICwgIkxSQSBoYXJkIHJlZyBhc3NpZ25tZW50IikKK0RFRlRJTUVWQVIgKFRWX0xSQV9DT0FMRVNDRQkgICAgICwgIkxSQSBjb2FsZXNjZSBwc2V1ZG8gcmVncyIpCitERUZUSU1FVkFSIChUVl9SRUxPQUQJCSAgICAgLCAicmVsb2FkIikKK0RFRlRJTUVWQVIgKFRWX1JFTE9BRF9DU0VfUkVHUyAgICAgICAsICJyZWxvYWQgQ1NFIHJlZ3MiKQorREVGVElNRVZBUiAoVFZfR0NTRV9BRlRFUl9SRUxPQUQgICAgICwgImxvYWQgQ1NFIGFmdGVyIHJlbG9hZCIpCitERUZUSU1FVkFSIChUVl9SRUUJCSAgICAgLCAicmVlIikKK0RFRlRJTUVWQVIgKFRWX1RIUkVBRF9QUk9MT0dVRV9BTkRfRVBJTE9HVUUsICJ0aHJlYWQgcHJvLSAmIGVwaWxvZ3VlIikKK0RFRlRJTUVWQVIgKFRWX0lGQ1ZUMgkJICAgICAsICJpZi1jb252ZXJzaW9uIDIiKQorREVGVElNRVZBUiAoVFZfQ09NQklORV9TVEFDS19BREpVU1QgICwgImNvbWJpbmUgc3RhY2sgYWRqdXN0bWVudHMiKQorREVGVElNRVZBUiAoVFZfUEVFUEhPTEUyICAgICAgICAgICAgICwgInBlZXBob2xlIDIiKQorREVGVElNRVZBUiAoVFZfUkVOQU1FX1JFR0lTVEVSUyAgICAgICwgInJlbmFtZSByZWdpc3RlcnMiKQorREVGVElNRVZBUiAoVFZfQ1BST1BfUkVHSVNURVJTICAgICAgICwgImhhcmQgcmVnIGNwcm9wIikKK0RFRlRJTUVWQVIgKFRWX1NDSEVEMiAgICAgICAgICAgICAgICAsICJzY2hlZHVsaW5nIDIiKQorREVGVElNRVZBUiAoVFZfTUFDSF9ERVAgICAgICAgICAgICAgICwgIm1hY2hpbmUgZGVwIHJlb3JnIikKK0RFRlRJTUVWQVIgKFRWX0RCUl9TQ0hFRCAgICAgICAgICAgICAsICJkZWxheSBicmFuY2ggc2NoZWQiKQorREVGVElNRVZBUiAoVFZfUkVPUkRFUl9CTE9DS1MgICAgICAgICwgInJlb3JkZXIgYmxvY2tzIikKK0RFRlRJTUVWQVIgKFRWX1NIT1JURU5fQlJBTkNIICAgICAgICAsICJzaG9ydGVuIGJyYW5jaGVzIikKK0RFRlRJTUVWQVIgKFRWX1JFR19TVEFDSyAgICAgICAgICAgICAsICJyZWcgc3RhY2siKQorREVGVElNRVZBUiAoVFZfRklOQUwgICAgICAgICAgICAgICAgICwgImZpbmFsIikKK0RFRlRJTUVWQVIgKFRWX1ZBUk9VVCAgICAgICAgICAgICAgICAsICJ2YXJpYWJsZSBvdXRwdXQiKQorREVGVElNRVZBUiAoVFZfU1lNT1VUICAgICAgICAgICAgICAgICwgInN5bW91dCIpCitERUZUSU1FVkFSIChUVl9WQVJfVFJBQ0tJTkcgICAgICAgICAgLCAidmFyaWFibGUgdHJhY2tpbmciKQorREVGVElNRVZBUiAoVFZfVkFSX1RSQUNLSU5HX0RBVEFGTE9XICwgInZhci10cmFja2luZyBkYXRhZmxvdyIpCitERUZUSU1FVkFSIChUVl9WQVJfVFJBQ0tJTkdfRU1JVCAgICAgLCAidmFyLXRyYWNraW5nIGVtaXQiKQorREVGVElNRVZBUiAoVFZfVFJFRV9JRkNPTUJJTkUgICAgICAgICwgInRyZWUgaWYtY29tYmluZSIpCitERUZUSU1FVkFSIChUVl9UUkVFX1VOSU5JVCAgICAgICAgICAgLCAidW5pbml0IHZhciBhbmFseXNpcyIpCitERUZUSU1FVkFSIChUVl9QTFVHSU5fSU5JVCAgICAgICAgICAgLCAicGx1Z2luIGluaXRpYWxpemF0aW9uIikKK0RFRlRJTUVWQVIgKFRWX1BMVUdJTl9SVU4gICAgICAgICAgICAsICJwbHVnaW4gZXhlY3V0aW9uIikKK0RFRlRJTUVWQVIgKFRWX0dJTVBMRV9TTFNSICAgICAgICAgICAsICJzdHJhaWdodC1saW5lIHN0cmVuZ3RoIHJlZHVjdGlvbiIpCisKKy8qIEV2ZXJ5dGhpbmcgZWxzZSBpbiByZXN0X29mX2NvbXBpbGF0aW9uIG5vdCBpbmNsdWRlZCBhYm92ZS4gICovCitERUZUSU1FVkFSIChUVl9FQVJMWV9MT0NBTAkgICAgICwgImVhcmx5IGxvY2FsIHBhc3NlcyIpCitERUZUSU1FVkFSIChUVl9PUFRJTUlaRQkJICAgICAsICJ1bmFjY291bnRlZCBvcHRpbWl6YXRpb25zIikKK0RFRlRJTUVWQVIgKFRWX1JFU1RfT0ZfQ09NUElMQVRJT04gICAsICJyZXN0IG9mIGNvbXBpbGF0aW9uIikKK0RFRlRJTUVWQVIgKFRWX1BPU1RSRUxPQUQJICAgICAsICJ1bmFjY291bnRlZCBwb3N0IHJlbG9hZCIpCitERUZUSU1FVkFSIChUVl9SRU1PVkVfVU5VU0VECSAgICAgLCAicmVtb3ZlIHVudXNlZCBsb2NhbHMiKQorREVGVElNRVZBUiAoVFZfQUREUkVTU19UQUtFTgkgICAgICwgImFkZHJlc3MgdGFrZW4iKQorREVGVElNRVZBUiAoVFZfVE9ETwkJICAgICAsICJ1bmFjY291bnRlZCB0b2RvIikKK0RFRlRJTUVWQVIgKFRWX1ZFUklGWV9MT09QX0NMT1NFRCAgICAsICJ2ZXJpZnkgbG9vcCBjbG9zZWQiKQorREVGVElNRVZBUiAoVFZfVkVSSUZZX1JUTF9TSEFSSU5HICAgICwgInZlcmlmeSBSVEwgc2hhcmluZyIpCitERUZUSU1FVkFSIChUVl9SRUJVSUxEX0ZSRVFVRU5DSUVTICAgLCAicmVidWlsZCBmcmVxdWVuY2llcyIpCitERUZUSU1FVkFSIChUVl9SRVBBSVJfTE9PUFMJICAgICAsICJyZXBhaXIgbG9vcCBzdHJ1Y3R1cmVzIikKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90aW1ldmFyLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdGltZXZhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZGViNmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdGltZXZhci5oCkBAIC0wLDAgKzEsMTE1IEBACisvKiBUaW1pbmcgdmFyaWFibGVzIGZvciBtZWFzdXJpbmcgY29tcGlsZXIgcGVyZm9ybWFuY2UuCisgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IEFsZXggU2FtdWVsIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICAgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1RJTUVWQVJfSAorI2RlZmluZSBHQ0NfVElNRVZBUl9ICisKKy8qIFRpbWluZyB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gbWVhc3VyZSBlbGFwc2VkIHRpbWUgaW4gdmFyaW91cworICAgcG9ydGlvbnMgb2YgdGhlIGNvbXBpbGVyLiAgRWFjaCBtZWFzdXJlcyBlbGFwc2VkIHVzZXIsIHN5c3RlbSwgYW5kCisgICB3YWxsLWNsb2NrIHRpbWUsIGFzIGFwcHJvcHJpYXRlIHRvIGFuZCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QKKyAgIHN5c3RlbS4KKworICAgVGltaW5nIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCB1c2luZyB0aGUgREVGVElNRVZBUiBtYWNybyBpbgorICAgdGltZXZhci5kZWYuICBFYWNoIGhhcyBhbiBlbnVtZXJhbCBpZGVudGlmaWVyLCB1c2VkIHdoZW4gcmVmZXJyaW5nCisgICB0byB0aGUgdGltaW5nIHZhcmlhYmxlIGluIGNvZGUsIGFuZCBhIGNoYXJhY3RlciBzdHJpbmcgbmFtZS4KKworICAgVGltaW5nIHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBpbiB0d28gd2F5czoKKworICAgICAtIE9uIHRoZSB0aW1pbmcgc3RhY2ssIHVzaW5nIHRpbWV2YXJfcHVzaCBhbmQgdGltZXZhcl9wb3AuCisgICAgICAgVGltaW5nIHZhcmlhYmxlcyBtYXkgYmUgcHVzaGVkIG9udG8gdGhlIHN0YWNrOyBlbGFwc2VkIHRpbWUgaXMKKyAgICAgICBhdHRyaWJ1dGVkIHRvIHRoZSB0b3Btb3N0IHRpbWluZyB2YXJpYWJsZSBvbiB0aGUgc3RhY2suICBXaGVuCisgICAgICAgYW5vdGhlciB2YXJpYWJsZSBpcyBwdXNoZWQgb24sIHRoZSBwcmV2aW91cyB0b3Btb3N0IHZhcmlhYmxlIGlzCisgICAgICAgYHBhdXNlZCcgdW50aWwgdGhlIHB1c2hlZCB2YXJpYWJsZSBpcyBwb3BwZWQgYmFjayBvZmYuCisKKyAgICAgLSBBcyBhIHN0YW5kYWxvbmUgdGltZXIsIHVzaW5nIHRpbWV2YXJfc3RhcnQgYW5kIHRpbWV2YXJfc3RvcC4KKyAgICAgICBBbGwgdGltZSBlbGFwc2VkIGJldHdlZW4gdGhlIHR3byBjYWxscyBpcyBhdHRyaWJ1dGVkIHRvIHRoZQorICAgICAgIHZhcmlhYmxlLgorKi8KKworLyogVGhpcyBzdHJ1Y3R1cmUgc3RvcmVzIHRoZSB2YXJpb3VzIHZhcmlldGllcyBvZiB0aW1lIHRoYXQgY2FuIGJlCisgICBtZWFzdXJlZC4gIFRpbWVzIGFyZSBzdG9yZWQgaW4gc2Vjb25kcy4gIFRoZSB0aW1lIG1heSBiZSBhbgorICAgYWJzb2x1dGUgdGltZSBvciBhIHRpbWUgZGlmZmVyZW5jZTsgaW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgdGltZQorICAgYmFzZSBpcyB1bmRlZmluZWQsIGV4Y2VwdCB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHRpbWVzCisgICBwcm9kdWNlcyBhIHZhbGlkIHRpbWUgZGlmZmVyZW5jZS4gICovCisKK3N0cnVjdCB0aW1ldmFyX3RpbWVfZGVmCit7CisgIC8qIFVzZXIgdGltZSBpbiB0aGlzIHByb2Nlc3MuICAqLworICBkb3VibGUgdXNlcjsKKworICAvKiBTeXN0ZW0gdGltZSAoaWYgYXBwbGljYWJsZSBmb3IgdGhpcyBob3N0IHBsYXRmb3JtKSBpbiB0aGlzCisgICAgIHByb2Nlc3MuICAqLworICBkb3VibGUgc3lzOworCisgIC8qIFdhbGwgY2xvY2sgdGltZS4gICovCisgIGRvdWJsZSB3YWxsOworCisgIC8qIEdhcmJhZ2UgY29sbGVjdG9yIG1lbW9yeS4gICovCisgIHVuc2lnbmVkIGdnY19tZW07Cit9OworCisvKiBBbiBlbnVtZXJhdGlvbiBvZiB0aW1pbmcgdmFyaWFibGUgaWRlbnRpZmllcnMuICBDb25zdHJ1Y3RlZCBmcm9tCisgICB0aGUgY29udGVudHMgb2YgdGltZXZhci5kZWYuICAqLworCisjZGVmaW5lIERFRlRJTUVWQVIoaWRlbnRpZmllcl9fLCBuYW1lX18pIFwKKyAgICBpZGVudGlmaWVyX18sCit0eXBlZGVmIGVudW0KK3sKKyAgVFZfTk9ORSwKKyNpbmNsdWRlICJ0aW1ldmFyLmRlZiIKKyAgVElNRVZBUl9MQVNUCit9Cit0aW1ldmFyX2lkX3Q7CisjdW5kZWYgREVGVElNRVZBUgorCisvKiBUcnVlIGlmIHRpbWV2YXJzIHNob3VsZCBiZSB1c2VkLiAgSW4gR0NDLCB0aGlzIGhhcHBlbnMgd2l0aAorICAgdGhlIC1mdGltZS1yZXBvcnQgZmxhZy4gICovCitleHRlcm4gYm9vbCB0aW1ldmFyX2VuYWJsZTsKKworLyogVG90YWwgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZ2FyYmFnZSBjb2xsZWN0b3IuICAqLworZXh0ZXJuIHNpemVfdCB0aW1ldmFyX2dnY19tZW1fdG90YWw7CisKK2V4dGVybiB2b2lkIHRpbWV2YXJfaW5pdCAodm9pZCk7CitleHRlcm4gdm9pZCB0aW1ldmFyX3B1c2hfMSAodGltZXZhcl9pZF90KTsKK2V4dGVybiB2b2lkIHRpbWV2YXJfcG9wXzEgKHRpbWV2YXJfaWRfdCk7CitleHRlcm4gdm9pZCB0aW1ldmFyX3N0YXJ0ICh0aW1ldmFyX2lkX3QpOworZXh0ZXJuIHZvaWQgdGltZXZhcl9zdG9wICh0aW1ldmFyX2lkX3QpOworZXh0ZXJuIGJvb2wgdGltZXZhcl9jb25kX3N0YXJ0ICh0aW1ldmFyX2lkX3QpOworZXh0ZXJuIHZvaWQgdGltZXZhcl9jb25kX3N0b3AgKHRpbWV2YXJfaWRfdCwgYm9vbCk7CitleHRlcm4gdm9pZCB0aW1ldmFyX3ByaW50IChGSUxFICopOworCisvKiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RpbWV2YXJfcHVzaCAodGltZXZhcl9pZF90IHR2KQoreworICBpZiAodGltZXZhcl9lbmFibGUpCisgICAgdGltZXZhcl9wdXNoXzEgKHR2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0aW1ldmFyX3BvcCAodGltZXZhcl9pZF90IHR2KQoreworICBpZiAodGltZXZhcl9lbmFibGUpCisgICAgdGltZXZhcl9wb3BfMSAodHYpOworfQorCitleHRlcm4gdm9pZCBwcmludF90aW1lIChjb25zdCBjaGFyICosIGxvbmcpOworCisjZW5kaWYgLyogISBHQ0NfVElNRVZBUl9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdG0tcHJlZHMuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90bS1wcmVkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGJmMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdG0tcHJlZHMuaApAQCAtMCwwICsxLDEzNyBAQAorLyogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHByb2dyYW0gJ2J1aWxkL2dlbnByZWRzJworICAgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlICcvY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvLmJ1aWxkL3NyYy9nY2MtbGluYXJvLTQuOC0yMDEzLjExL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm1kJy4gICovCisKKyNpZm5kZWYgR0NDX1RNX1BSRURTX0gKKyNkZWZpbmUgR0NDX1RNX1BSRURTX0gKKworI2lmZGVmIEhBVkVfTUFDSElORV9NT0RFUworZXh0ZXJuIGludCBnZW5lcmFsX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhZGRyZXNzX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCByZWdpc3Rlcl9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgcG1vZGVfcmVnaXN0ZXJfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IHNjcmF0Y2hfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGltbWVkaWF0ZV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgY29uc3RfaW50X29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBjb25zdF9kb3VibGVfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG5vbmltbWVkaWF0ZV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgbm9ubWVtb3J5X29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBwdXNoX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBwb3Bfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG1lbW9yeV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgaW5kaXJlY3Rfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IG9yZGVyZWRfY29tcGFyaXNvbl9vcGVyYXRvciAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGNvbXBhcmlzb25fb3BlcmF0b3IgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBjY19yZWdpc3RlciAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfcmVnX29yX3plcm8gKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3JlZ19vcl9mcF96ZXJvIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWFyY2g2NF9yZWdfemVyb19vcl9tMV9vcl8xIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWFyY2g2NF9mcF9jb21wYXJlX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3BsdXNfaW1tZWRpYXRlIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWFyY2g2NF9wbHVzX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3BsdXNsb25nX2ltbWVkaWF0ZSAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfcGx1c2xvbmdfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfbG9naWNhbF9pbW1lZGlhdGUgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X2xvZ2ljYWxfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfc2hpZnRfaW1tX3NpIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWFyY2g2NF9zaGlmdF9pbW1fZGkgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3JlZ19vcl9zaGlmdF9pbW1fc2kgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3JlZ19vcl9zaGlmdF9pbW1fZGkgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X2ltbTMgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3B3cl9pbW0zIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWFyY2g2NF9wd3JfMl9zaSAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfcHdyXzJfZGkgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X21lbV9wYWlyX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3ZhbGlkX3N5bXJlZiAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfdGxzX2llX3N5bXJlZiAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfdGxzX2xlX3N5bXJlZiAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfbW92X29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X21vdnRpX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3JlZ19vcl9pbW0gKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X2NvbXBhcmlzb25fb3BlcmF0b3IgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3N5bmNfbWVtb3J5X29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCB2ZWN0X3Bhcl9jbnN0X2hpX2hhbGYgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCB2ZWN0X3Bhcl9jbnN0X2xvX2hhbGYgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGludCBhYXJjaDY0X3NpbWRfbHNoaWZ0X2ltbSAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfc2ltZF9yc2hpZnRfaW1tIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWFyY2g2NF9zaW1kX3JlZ19vcl96ZXJvIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWFyY2g2NF9zaW1kX3N0cnVjdF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKK2V4dGVybiBpbnQgYWFyY2g2NF9zaW1kX2dlbmVyYWxfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfc2ltZF9ub25pbW1lZGlhdGVfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CitleHRlcm4gaW50IGFhcmNoNjRfc2ltZF9pbW1femVybyAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CisjZW5kaWYgLyogSEFWRV9NQUNISU5FX01PREVTICovCisKKyNkZWZpbmUgQ09OU1RSQUlOVF9OVU1fREVGSU5FRF9QIDEKK2VudW0gY29uc3RyYWludF9udW0KK3sKKyAgQ09OU1RSQUlOVF9fVU5LTk9XTiA9IDAsCisgIENPTlNUUkFJTlRfaywKKyAgQ09OU1RSQUlOVF93LAorICBDT05TVFJBSU5UX3gsCisgIENPTlNUUkFJTlRfSSwKKyAgQ09OU1RSQUlOVF9KLAorICBDT05TVFJBSU5UX0ssCisgIENPTlNUUkFJTlRfTCwKKyAgQ09OU1RSQUlOVF9NLAorICBDT05TVFJBSU5UX04sCisgIENPTlNUUkFJTlRfUywKKyAgQ09OU1RSQUlOVF9ZLAorICBDT05TVFJBSU5UX1osCisgIENPTlNUUkFJTlRfVXNoLAorICBDT05TVFJBSU5UX1VzcywKKyAgQ09OU1RSQUlOVF9Vc2QsCisgIENPTlNUUkFJTlRfVXNNLAorICBDT05TVFJBSU5UX1VpMSwKKyAgQ09OU1RSQUlOVF9VaTMsCisgIENPTlNUUkFJTlRfVXAzLAorICBDT05TVFJBSU5UX1EsCisgIENPTlNUUkFJTlRfVW1wLAorICBDT05TVFJBSU5UX1V0diwKKyAgQ09OU1RSQUlOVF9VZmMsCisgIENPTlNUUkFJTlRfRG4sCisgIENPTlNUUkFJTlRfRGgsCisgIENPTlNUUkFJTlRfRHEsCisgIENPTlNUUkFJTlRfRGwsCisgIENPTlNUUkFJTlRfRHIsCisgIENPTlNUUkFJTlRfRHosCisgIENPTlNUUkFJTlRfRGQsCisgIENPTlNUUkFJTlRfX0xJTUlUCit9OworCitleHRlcm4gZW51bSBjb25zdHJhaW50X251bSBsb29rdXBfY29uc3RyYWludCAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBib29sIGNvbnN0cmFpbnRfc2F0aXNmaWVkX3AgKHJ0eCwgZW51bSBjb25zdHJhaW50X251bSk7CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90CitpbnNuX2NvbnN0cmFpbnRfbGVuIChjaGFyIGZjLCBjb25zdCBjaGFyICpzdHIgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgc3dpdGNoIChmYykKKyAgICB7CisgICAgY2FzZSAnRCc6IHJldHVybiAyOworICAgIGNhc2UgJ1UnOiByZXR1cm4gMzsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIHJldHVybiAxOworfQorCisjZGVmaW5lIENPTlNUUkFJTlRfTEVOKGNfLHNfKSBpbnNuX2NvbnN0cmFpbnRfbGVuIChjXyxzXykKKworZXh0ZXJuIGVudW0gcmVnX2NsYXNzIHJlZ2NsYXNzX2Zvcl9jb25zdHJhaW50IChlbnVtIGNvbnN0cmFpbnRfbnVtKTsKKyNkZWZpbmUgUkVHX0NMQVNTX0ZST01fQ09OU1RSQUlOVChjXyxzXykgXAorICAgIHJlZ2NsYXNzX2Zvcl9jb25zdHJhaW50IChsb29rdXBfY29uc3RyYWludCAoc18pKQorI2RlZmluZSBSRUdfQ0xBU1NfRk9SX0NPTlNUUkFJTlQoeF8pIFwKKyAgICByZWdjbGFzc19mb3JfY29uc3RyYWludCAoeF8pCisKK2V4dGVybiBib29sIGluc25fY29uc3RfaW50X29rX2Zvcl9jb25zdHJhaW50IChIT1NUX1dJREVfSU5ULCBlbnVtIGNvbnN0cmFpbnRfbnVtKTsKKyNkZWZpbmUgQ09OU1RfT0tfRk9SX0NPTlNUUkFJTlRfUCh2XyxjXyxzXykgXAorICAgIGluc25fY29uc3RfaW50X29rX2Zvcl9jb25zdHJhaW50ICh2XywgbG9va3VwX2NvbnN0cmFpbnQgKHNfKSkKKworI2RlZmluZSBDT05TVF9ET1VCTEVfT0tfRk9SX0NPTlNUUkFJTlRfUCh2XyxjXyxzXykgMAorCisjZGVmaW5lIEVYVFJBX0NPTlNUUkFJTlRfU1RSKHZfLGNfLHNfKSBcCisgICAgY29uc3RyYWludF9zYXRpc2ZpZWRfcCAodl8sIGxvb2t1cF9jb25zdHJhaW50IChzXykpCisKK2V4dGVybiBib29sIGluc25fZXh0cmFfbWVtb3J5X2NvbnN0cmFpbnQgKGVudW0gY29uc3RyYWludF9udW0pOworI2RlZmluZSBFWFRSQV9NRU1PUllfQ09OU1RSQUlOVChjXyxzXykgaW5zbl9leHRyYV9tZW1vcnlfY29uc3RyYWludCAobG9va3VwX2NvbnN0cmFpbnQgKHNfKSkKKworI2RlZmluZSBFWFRSQV9BRERSRVNTX0NPTlNUUkFJTlQoY18sc18pIGZhbHNlCisKKyNlbmRpZiAvKiB0bS1wcmVkcy5oICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdG0uaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YjFjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdG0uaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIEdDQ19UTV9ICisjZGVmaW5lIEdDQ19UTV9ICisjZGVmaW5lIFRBUkdFVF9DUFVfREVGQVVMVCAoVEFSR0VUX0NQVV9nZW5lcmljIHwgKChBQVJDSDY0X0NQVV9ERUZBVUxUX0ZMQUdTKSA8PCA2KSkKKyNpZm5kZWYgTElCQ19HTElCQworIyBkZWZpbmUgTElCQ19HTElCQyAxCisjZW5kaWYKKyNpZm5kZWYgTElCQ19VQ0xJQkMKKyMgZGVmaW5lIExJQkNfVUNMSUJDIDIKKyNlbmRpZgorI2lmbmRlZiBMSUJDX0JJT05JQworIyBkZWZpbmUgTElCQ19CSU9OSUMgMworI2VuZGlmCisjaWZkZWYgSU5fR0NDCisjIGluY2x1ZGUgIm9wdGlvbnMuaCIKKyMgaW5jbHVkZSAiaW5zbi1jb25zdGFudHMuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oIgorIyBpbmNsdWRlICJjb25maWcvZGJ4ZWxmLmgiCisjIGluY2x1ZGUgImNvbmZpZy9lbGZvcy5oIgorIyBpbmNsdWRlICJjb25maWcvbmV3bGliLXN0ZGludC5oIgorIyBpbmNsdWRlICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LWVsZi5oIgorIyBpbmNsdWRlICJjb25maWcvYWFyY2g2NC9hYXJjaDY0LWVsZi1yYXcuaCIKKyMgaW5jbHVkZSAiY29uZmlnL2luaXRmaW5pLWFycmF5LmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkIElOX0dDQyAmJiAhZGVmaW5lZCBHRU5FUkFUT1JfRklMRSAmJiAhZGVmaW5lZCBVU0VEX0ZPUl9UQVJHRVQKKyMgaW5jbHVkZSAiaW5zbi1mbGFncy5oIgorI2VuZGlmCisjIGluY2x1ZGUgImRlZmF1bHRzLmgiCisjZW5kaWYgLyogR0NDX1RNX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90bV9wLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdG1fcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjcxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdG1fcC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBHQ0NfVE1fUF9ICisjZGVmaW5lIEdDQ19UTV9QX0gKKyNpZmRlZiBJTl9HQ0MKKyMgaW5jbHVkZSAiY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1wcm90b3MuaCIKKyMgaW5jbHVkZSAidG0tcHJlZHMuaCIKKyNlbmRpZgorI2VuZGlmIC8qIEdDQ19UTV9QX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90b3BsZXYuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90b3BsZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmY0NTJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RvcGxldi5oCkBAIC0wLDAgKzEsODEgQEAKKy8qIHRvcGxldi5oIC0gVmFyaW91cyBkZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyBmb3VuZCBpbiB0b3BsZXYuYworICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19UT1BMRVZfSAorI2RlZmluZSBHQ0NfVE9QTEVWX0gKKworLyogRGVjb2RlZCBvcHRpb25zLCBhbmQgbnVtYmVyIG9mIHN1Y2ggb3B0aW9ucy4gICovCitleHRlcm4gc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICpzYXZlX2RlY29kZWRfb3B0aW9uczsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2F2ZV9kZWNvZGVkX29wdGlvbnNfY291bnQ7CisKK2V4dGVybiBpbnQgdG9wbGV2X21haW4gKGludCwgY2hhciAqKik7CitleHRlcm4gdm9pZCByZXN0X29mX2RlY2xfY29tcGlsYXRpb24gKHRyZWUsIGludCwgaW50KTsKK2V4dGVybiB2b2lkIHJlc3Rfb2ZfdHlwZV9jb21waWxhdGlvbiAodHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIGluaXRfb3B0aW1pemF0aW9uX3Bhc3NlcyAodm9pZCk7CitleHRlcm4gdm9pZCBmaW5pc2hfb3B0aW1pemF0aW9uX3Bhc3NlcyAodm9pZCk7CitleHRlcm4gYm9vbCBlbmFibGVfcnRsX2R1bXBfZmlsZSAodm9pZCk7CisKKy8qIEluIGV4Y2VwdC5jLiAgSW5pdGlhbGl6ZSBleGNlcHRpb24gaGFuZGxpbmcuICBUaGlzIGlzIHVzZWQgYnkgdGhlIEFkYQorICAgYW5kIExUTyBmcm9udCBlbmRzIHRvIGluaXRpYWxpemUgRUggIm9uIGRlbWFuZCIuICBTZWUgbHRvLXN0cmVhbWVyLWluLmMKKyAgIGFuZCBhZGEvZ2NjLWludGVyZmFjZS9taXNjLmMuICAqLworZXh0ZXJuIHZvaWQgaW5pdF9laCAodm9pZCk7CisKK2V4dGVybiB2b2lkIGFubm91bmNlX2Z1bmN0aW9uICh0cmVlKTsKKworZXh0ZXJuIHZvaWQgd3JhcHVwX2dsb2JhbF9kZWNsYXJhdGlvbl8xICh0cmVlKTsKK2V4dGVybiBib29sIHdyYXB1cF9nbG9iYWxfZGVjbGFyYXRpb25fMiAodHJlZSk7CitleHRlcm4gYm9vbCB3cmFwdXBfZ2xvYmFsX2RlY2xhcmF0aW9ucyAodHJlZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgY2hlY2tfZ2xvYmFsX2RlY2xhcmF0aW9uXzEgKHRyZWUpOworZXh0ZXJuIHZvaWQgY2hlY2tfZ2xvYmFsX2RlY2xhcmF0aW9ucyAodHJlZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgZW1pdF9kZWJ1Z19nbG9iYWxfZGVjbGFyYXRpb25zICh0cmVlICosIGludCk7CitleHRlcm4gdm9pZCB3cml0ZV9nbG9iYWxfZGVjbGFyYXRpb25zICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZHVtcF9tZW1vcnlfcmVwb3J0IChib29sKTsKK2V4dGVybiB2b2lkIGR1bXBfcHJvZmlsZV9yZXBvcnQgKHZvaWQpOworCitleHRlcm4gdm9pZCB0YXJnZXRfcmVpbml0ICh2b2lkKTsKKworLyogQSB1bmlxdWUgbG9jYWwgdGltZSBzdGFtcCwgbWlnaHQgYmUgemVybyBpZiBub25lIGlzIGF2YWlsYWJsZS4gICovCitleHRlcm4gdW5zaWduZWQgbG9jYWxfdGljazsKKworLyogVHJ1ZSBpZiB0aGUgdXNlciBoYXMgdGFnZ2VkIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSAnc2VjdGlvbicKKyAgIGF0dHJpYnV0ZS4gICovCisKK2V4dGVybiBib29sIHVzZXJfZGVmaW5lZF9zZWN0aW9uX2F0dHJpYnV0ZTsKKworLyogU2VlIHRvcGxldi5jLiAgKi8KK2V4dGVybiBpbnQgZmxhZ19yZXJ1bl9jc2VfYWZ0ZXJfZ2xvYmFsX29wdHM7CisKK2V4dGVybiB2b2lkIHByaW50X3ZlcnNpb24gKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKKworLyogVGhlIGhhc2h0YWJsZSwgc28gdGhhdCB0aGUgQyBmcm9udCBlbmRzIGNhbiBwYXNzIGl0IHRvIGNwcGxpYi4gICovCitleHRlcm4gc3RydWN0IGh0ICppZGVudF9oYXNoOworCisvKiBGdW5jdGlvbnMgdXNlZCB0byBnZXQgYW5kIHNldCBHQ0MncyBub3Rpb24gb2YgaW4gd2hhdCBkaXJlY3RvcnkKKyAgIGNvbXBpbGF0aW9uIHdhcyBzdGFydGVkLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9zcmNfcHdkCSAgICAgICAodm9pZCk7CitleHRlcm4gYm9vbCBzZXRfc3JjX3B3ZAkJICAgICAgIChjb25zdCBjaGFyICopOworCisvKiBGdW5jdGlvbnMgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSByYW5kb20gc2VlZC4gICovCisKK2V4dGVybiBIT1NUX1dJREVfSU5UIGdldF9yYW5kb21fc2VlZCAoYm9vbCk7CitleHRlcm4gY29uc3QgY2hhciAqc2V0X3JhbmRvbV9zZWVkIChjb25zdCBjaGFyICopOworCisjZW5kaWYgLyogISBHQ0NfVE9QTEVWX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLWNoZWNrLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1jaGVjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDYxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1jaGVjay5oCkBAIC0wLDAgKzEsMzA4IEBACisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIHVzaW5nIGdlbmNoZWNrLiBEbyBub3QgZWRpdC4gKi8KKworI2lmbmRlZiBHQ0NfVFJFRV9DSEVDS19ICisjZGVmaW5lIEdDQ19UUkVFX0NIRUNLX0gKKworI2RlZmluZSBFUlJPUl9NQVJLX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVSUk9SX01BUkspCisjZGVmaW5lIElERU5USUZJRVJfTk9ERV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJREVOVElGSUVSX05PREUpCisjZGVmaW5lIFRSRUVfTElTVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUkVFX0xJU1QpCisjZGVmaW5lIFRSRUVfVkVDX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSRUVfVkVDKQorI2RlZmluZSBCTE9DS19DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBCTE9DSykKKyNkZWZpbmUgT0ZGU0VUX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT0ZGU0VUX1RZUEUpCisjZGVmaW5lIEVOVU1FUkFMX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRU5VTUVSQUxfVFlQRSkKKyNkZWZpbmUgQk9PTEVBTl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJPT0xFQU5fVFlQRSkKKyNkZWZpbmUgSU5URUdFUl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIElOVEVHRVJfVFlQRSkKKyNkZWZpbmUgUkVBTF9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJFQUxfVFlQRSkKKyNkZWZpbmUgUE9JTlRFUl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBPSU5URVJfVFlQRSkKKyNkZWZpbmUgUkVGRVJFTkNFX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkVGRVJFTkNFX1RZUEUpCisjZGVmaW5lIE5VTExQVFJfVFlQRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOVUxMUFRSX1RZUEUpCisjZGVmaW5lIEZJWEVEX1BPSU5UX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRklYRURfUE9JTlRfVFlQRSkKKyNkZWZpbmUgQ09NUExFWF9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTVBMRVhfVFlQRSkKKyNkZWZpbmUgVkVDVE9SX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDVE9SX1RZUEUpCisjZGVmaW5lIEFSUkFZX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVJSQVlfVFlQRSkKKyNkZWZpbmUgUkVDT1JEX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkVDT1JEX1RZUEUpCisjZGVmaW5lIFVOSU9OX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVU5JT05fVFlQRSkKKyNkZWZpbmUgUVVBTF9VTklPTl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFFVQUxfVU5JT05fVFlQRSkKKyNkZWZpbmUgVk9JRF9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZPSURfVFlQRSkKKyNkZWZpbmUgRlVOQ1RJT05fVFlQRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGVU5DVElPTl9UWVBFKQorI2RlZmluZSBNRVRIT0RfVFlQRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBNRVRIT0RfVFlQRSkKKyNkZWZpbmUgTEFOR19UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIExBTkdfVFlQRSkKKyNkZWZpbmUgSU5URUdFUl9DU1RfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgSU5URUdFUl9DU1QpCisjZGVmaW5lIFJFQUxfQ1NUX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJFQUxfQ1NUKQorI2RlZmluZSBGSVhFRF9DU1RfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRklYRURfQ1NUKQorI2RlZmluZSBDT01QTEVYX0NTVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT01QTEVYX0NTVCkKKyNkZWZpbmUgVkVDVE9SX0NTVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNUT1JfQ1NUKQorI2RlZmluZSBTVFJJTkdfQ1NUX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNUUklOR19DU1QpCisjZGVmaW5lIEZVTkNUSU9OX0RFQ0xfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRlVOQ1RJT05fREVDTCkKKyNkZWZpbmUgTEFCRUxfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMQUJFTF9ERUNMKQorI2RlZmluZSBGSUVMRF9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEZJRUxEX0RFQ0wpCisjZGVmaW5lIFZBUl9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZBUl9ERUNMKQorI2RlZmluZSBDT05TVF9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTlNUX0RFQ0wpCisjZGVmaW5lIFBBUk1fREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQQVJNX0RFQ0wpCisjZGVmaW5lIFRZUEVfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUWVBFX0RFQ0wpCisjZGVmaW5lIFJFU1VMVF9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJFU1VMVF9ERUNMKQorI2RlZmluZSBERUJVR19FWFBSX0RFQ0xfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgREVCVUdfRVhQUl9ERUNMKQorI2RlZmluZSBOQU1FU1BBQ0VfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOQU1FU1BBQ0VfREVDTCkKKyNkZWZpbmUgSU1QT1JURURfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJTVBPUlRFRF9ERUNMKQorI2RlZmluZSBUUkFOU0xBVElPTl9VTklUX0RFQ0xfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFJBTlNMQVRJT05fVU5JVF9ERUNMKQorI2RlZmluZSBDT01QT05FTlRfUkVGX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTVBPTkVOVF9SRUYpCisjZGVmaW5lIEJJVF9GSUVMRF9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQklUX0ZJRUxEX1JFRikKKyNkZWZpbmUgQVJSQVlfUkVGX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFSUkFZX1JFRikKKyNkZWZpbmUgQVJSQVlfUkFOR0VfUkVGX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFSUkFZX1JBTkdFX1JFRikKKyNkZWZpbmUgUkVBTFBBUlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRUFMUEFSVF9FWFBSKQorI2RlZmluZSBJTUFHUEFSVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIElNQUdQQVJUX0VYUFIpCisjZGVmaW5lIFZJRVdfQ09OVkVSVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZJRVdfQ09OVkVSVF9FWFBSKQorI2RlZmluZSBJTkRJUkVDVF9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgSU5ESVJFQ1RfUkVGKQorI2RlZmluZSBPQkpfVFlQRV9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT0JKX1RZUEVfUkVGKQorI2RlZmluZSBDT05TVFJVQ1RPUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT05TVFJVQ1RPUikKKyNkZWZpbmUgQ09NUE9VTkRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT01QT1VORF9FWFBSKQorI2RlZmluZSBNT0RJRllfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBNT0RJRllfRVhQUikKKyNkZWZpbmUgSU5JVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIElOSVRfRVhQUikKKyNkZWZpbmUgVEFSR0VUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEFSR0VUX0VYUFIpCisjZGVmaW5lIENPTkRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT05EX0VYUFIpCisjZGVmaW5lIFZFQ19DT05EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX0NPTkRfRVhQUikKKyNkZWZpbmUgVkVDX1BFUk1fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfUEVSTV9FWFBSKQorI2RlZmluZSBCSU5EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQklORF9FWFBSKQorI2RlZmluZSBDQUxMX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0FMTF9FWFBSKQorI2RlZmluZSBXSVRIX0NMRUFOVVBfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBXSVRIX0NMRUFOVVBfRVhQUikKKyNkZWZpbmUgQ0xFQU5VUF9QT0lOVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENMRUFOVVBfUE9JTlRfRVhQUikKKyNkZWZpbmUgUExBQ0VIT0xERVJfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQTEFDRUhPTERFUl9FWFBSKQorI2RlZmluZSBQTFVTX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUExVU19FWFBSKQorI2RlZmluZSBNSU5VU19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE1JTlVTX0VYUFIpCisjZGVmaW5lIE1VTFRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBNVUxUX0VYUFIpCisjZGVmaW5lIFBPSU5URVJfUExVU19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBPSU5URVJfUExVU19FWFBSKQorI2RlZmluZSBNVUxUX0hJR0hQQVJUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTVVMVF9ISUdIUEFSVF9FWFBSKQorI2RlZmluZSBUUlVOQ19ESVZfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUlVOQ19ESVZfRVhQUikKKyNkZWZpbmUgQ0VJTF9ESVZfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDRUlMX0RJVl9FWFBSKQorI2RlZmluZSBGTE9PUl9ESVZfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGTE9PUl9ESVZfRVhQUikKKyNkZWZpbmUgUk9VTkRfRElWX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUk9VTkRfRElWX0VYUFIpCisjZGVmaW5lIFRSVU5DX01PRF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSVU5DX01PRF9FWFBSKQorI2RlZmluZSBDRUlMX01PRF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENFSUxfTU9EX0VYUFIpCisjZGVmaW5lIEZMT09SX01PRF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEZMT09SX01PRF9FWFBSKQorI2RlZmluZSBST1VORF9NT0RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBST1VORF9NT0RfRVhQUikKKyNkZWZpbmUgUkRJVl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJESVZfRVhQUikKKyNkZWZpbmUgRVhBQ1RfRElWX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRVhBQ1RfRElWX0VYUFIpCisjZGVmaW5lIEZJWF9UUlVOQ19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEZJWF9UUlVOQ19FWFBSKQorI2RlZmluZSBGTE9BVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEZMT0FUX0VYUFIpCisjZGVmaW5lIE5FR0FURV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE5FR0FURV9FWFBSKQorI2RlZmluZSBNSU5fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBNSU5fRVhQUikKKyNkZWZpbmUgTUFYX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTUFYX0VYUFIpCisjZGVmaW5lIEFCU19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFCU19FWFBSKQorI2RlZmluZSBMU0hJRlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMU0hJRlRfRVhQUikKKyNkZWZpbmUgUlNISUZUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUlNISUZUX0VYUFIpCisjZGVmaW5lIExST1RBVEVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMUk9UQVRFX0VYUFIpCisjZGVmaW5lIFJST1RBVEVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSUk9UQVRFX0VYUFIpCisjZGVmaW5lIEJJVF9JT1JfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBCSVRfSU9SX0VYUFIpCisjZGVmaW5lIEJJVF9YT1JfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBCSVRfWE9SX0VYUFIpCisjZGVmaW5lIEJJVF9BTkRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBCSVRfQU5EX0VYUFIpCisjZGVmaW5lIEJJVF9OT1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBCSVRfTk9UX0VYUFIpCisjZGVmaW5lIFRSVVRIX0FORElGX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFJVVEhfQU5ESUZfRVhQUikKKyNkZWZpbmUgVFJVVEhfT1JJRl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSVVRIX09SSUZfRVhQUikKKyNkZWZpbmUgVFJVVEhfQU5EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFJVVEhfQU5EX0VYUFIpCisjZGVmaW5lIFRSVVRIX09SX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFJVVEhfT1JfRVhQUikKKyNkZWZpbmUgVFJVVEhfWE9SX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVFJVVEhfWE9SX0VYUFIpCisjZGVmaW5lIFRSVVRIX05PVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSVVRIX05PVF9FWFBSKQorI2RlZmluZSBMVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIExUX0VYUFIpCisjZGVmaW5lIExFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTEVfRVhQUikKKyNkZWZpbmUgR1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBHVF9FWFBSKQorI2RlZmluZSBHRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEdFX0VYUFIpCisjZGVmaW5lIEVRX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRVFfRVhQUikKKyNkZWZpbmUgTkVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBORV9FWFBSKQorI2RlZmluZSBVTk9SREVSRURfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVTk9SREVSRURfRVhQUikKKyNkZWZpbmUgT1JERVJFRF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9SREVSRURfRVhQUikKKyNkZWZpbmUgVU5MVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVOTFRfRVhQUikKKyNkZWZpbmUgVU5MRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVOTEVfRVhQUikKKyNkZWZpbmUgVU5HVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVOR1RfRVhQUikKKyNkZWZpbmUgVU5HRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVOR0VfRVhQUikKKyNkZWZpbmUgVU5FUV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVORVFfRVhQUikKKyNkZWZpbmUgTFRHVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIExUR1RfRVhQUikKKyNkZWZpbmUgUkFOR0VfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSQU5HRV9FWFBSKQorI2RlZmluZSBQQVJFTl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBBUkVOX0VYUFIpCisjZGVmaW5lIENPTlZFUlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT05WRVJUX0VYUFIpCisjZGVmaW5lIEFERFJfU1BBQ0VfQ09OVkVSVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFERFJfU1BBQ0VfQ09OVkVSVF9FWFBSKQorI2RlZmluZSBGSVhFRF9DT05WRVJUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRklYRURfQ09OVkVSVF9FWFBSKQorI2RlZmluZSBOT1BfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOT1BfRVhQUikKKyNkZWZpbmUgTk9OX0xWQUxVRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE5PTl9MVkFMVUVfRVhQUikKKyNkZWZpbmUgQ09NUE9VTkRfTElURVJBTF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTVBPVU5EX0xJVEVSQUxfRVhQUikKKyNkZWZpbmUgU0FWRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNBVkVfRVhQUikKKyNkZWZpbmUgQUREUl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFERFJfRVhQUikKKyNkZWZpbmUgRkRFU0NfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGREVTQ19FWFBSKQorI2RlZmluZSBDT01QTEVYX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ09NUExFWF9FWFBSKQorI2RlZmluZSBDT05KX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ09OSl9FWFBSKQorI2RlZmluZSBQUkVERUNSRU1FTlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQUkVERUNSRU1FTlRfRVhQUikKKyNkZWZpbmUgUFJFSU5DUkVNRU5UX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUFJFSU5DUkVNRU5UX0VYUFIpCisjZGVmaW5lIFBPU1RERUNSRU1FTlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQT1NUREVDUkVNRU5UX0VYUFIpCisjZGVmaW5lIFBPU1RJTkNSRU1FTlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQT1NUSU5DUkVNRU5UX0VYUFIpCisjZGVmaW5lIFZBX0FSR19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZBX0FSR19FWFBSKQorI2RlZmluZSBUUllfQ0FUQ0hfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUllfQ0FUQ0hfRVhQUikKKyNkZWZpbmUgVFJZX0ZJTkFMTFlfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUllfRklOQUxMWV9FWFBSKQorI2RlZmluZSBERUNMX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgREVDTF9FWFBSKQorI2RlZmluZSBMQUJFTF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIExBQkVMX0VYUFIpCisjZGVmaW5lIEdPVE9fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBHT1RPX0VYUFIpCisjZGVmaW5lIFJFVFVSTl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFJFVFVSTl9FWFBSKQorI2RlZmluZSBFWElUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRVhJVF9FWFBSKQorI2RlZmluZSBMT09QX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTE9PUF9FWFBSKQorI2RlZmluZSBTV0lUQ0hfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTV0lUQ0hfRVhQUikKKyNkZWZpbmUgQ0FTRV9MQUJFTF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENBU0VfTEFCRUxfRVhQUikKKyNkZWZpbmUgQVNNX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVNNX0VYUFIpCisjZGVmaW5lIFNTQV9OQU1FX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNTQV9OQU1FKQorI2RlZmluZSBDQVRDSF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENBVENIX0VYUFIpCisjZGVmaW5lIEVIX0ZJTFRFUl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVIX0ZJTFRFUl9FWFBSKQorI2RlZmluZSBTQ0VWX0tOT1dOX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNDRVZfS05PV04pCisjZGVmaW5lIFNDRVZfTk9UX0tOT1dOX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNDRVZfTk9UX0tOT1dOKQorI2RlZmluZSBQT0xZTk9NSUFMX0NIUkVDX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFBPTFlOT01JQUxfQ0hSRUMpCisjZGVmaW5lIFNUQVRFTUVOVF9MSVNUX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFNUQVRFTUVOVF9MSVNUKQorI2RlZmluZSBBU1NFUlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBBU1NFUlRfRVhQUikKKyNkZWZpbmUgVFJFRV9CSU5GT19DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUkVFX0JJTkZPKQorI2RlZmluZSBXSVRIX1NJWkVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBXSVRIX1NJWkVfRVhQUikKKyNkZWZpbmUgUkVBTElHTl9MT0FEX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkVBTElHTl9MT0FEX0VYUFIpCisjZGVmaW5lIFRBUkdFVF9NRU1fUkVGX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRBUkdFVF9NRU1fUkVGKQorI2RlZmluZSBNRU1fUkVGX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE1FTV9SRUYpCisjZGVmaW5lIE9NUF9QQVJBTExFTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPTVBfUEFSQUxMRUwpCisjZGVmaW5lIE9NUF9UQVNLX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9NUF9UQVNLKQorI2RlZmluZSBPTVBfRk9SX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9NUF9GT1IpCisjZGVmaW5lIE9NUF9TRUNUSU9OU19DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPTVBfU0VDVElPTlMpCisjZGVmaW5lIE9NUF9TSU5HTEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX1NJTkdMRSkKKyNkZWZpbmUgT01QX1NFQ1RJT05fQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX1NFQ1RJT04pCisjZGVmaW5lIE9NUF9NQVNURVJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX01BU1RFUikKKyNkZWZpbmUgT01QX09SREVSRURfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX09SREVSRUQpCisjZGVmaW5lIE9NUF9DUklUSUNBTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPTVBfQ1JJVElDQUwpCisjZGVmaW5lIE9NUF9BVE9NSUNfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX0FUT01JQykKKyNkZWZpbmUgT01QX0FUT01JQ19SRUFEX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9NUF9BVE9NSUNfUkVBRCkKKyNkZWZpbmUgT01QX0FUT01JQ19DQVBUVVJFX09MRF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPTVBfQVRPTUlDX0NBUFRVUkVfT0xEKQorI2RlZmluZSBPTVBfQVRPTUlDX0NBUFRVUkVfTkVXX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9NUF9BVE9NSUNfQ0FQVFVSRV9ORVcpCisjZGVmaW5lIE9NUF9DTEFVU0VfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT01QX0NMQVVTRSkKKyNkZWZpbmUgVFJBTlNBQ1RJT05fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUUkFOU0FDVElPTl9FWFBSKQorI2RlZmluZSBSRURVQ19NQVhfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRURVQ19NQVhfRVhQUikKKyNkZWZpbmUgUkVEVUNfTUlOX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkVEVUNfTUlOX0VYUFIpCisjZGVmaW5lIFJFRFVDX1BMVVNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRURVQ19QTFVTX0VYUFIpCisjZGVmaW5lIERPVF9QUk9EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRE9UX1BST0RfRVhQUikKKyNkZWZpbmUgV0lERU5fU1VNX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgV0lERU5fU1VNX0VYUFIpCisjZGVmaW5lIFdJREVOX01VTFRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBXSURFTl9NVUxUX0VYUFIpCisjZGVmaW5lIFdJREVOX01VTFRfUExVU19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFdJREVOX01VTFRfUExVU19FWFBSKQorI2RlZmluZSBXSURFTl9NVUxUX01JTlVTX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgV0lERU5fTVVMVF9NSU5VU19FWFBSKQorI2RlZmluZSBXSURFTl9MU0hJRlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBXSURFTl9MU0hJRlRfRVhQUikKKyNkZWZpbmUgRk1BX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRk1BX0VYUFIpCisjZGVmaW5lIFZFQ19MU0hJRlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfTFNISUZUX0VYUFIpCisjZGVmaW5lIFZFQ19SU0hJRlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfUlNISUZUX0VYUFIpCisjZGVmaW5lIFZFQ19XSURFTl9NVUxUX0hJX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX1dJREVOX01VTFRfSElfRVhQUikKKyNkZWZpbmUgVkVDX1dJREVOX01VTFRfTE9fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfV0lERU5fTVVMVF9MT19FWFBSKQorI2RlZmluZSBWRUNfV0lERU5fTVVMVF9FVkVOX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX1dJREVOX01VTFRfRVZFTl9FWFBSKQorI2RlZmluZSBWRUNfV0lERU5fTVVMVF9PRERfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfV0lERU5fTVVMVF9PRERfRVhQUikKKyNkZWZpbmUgVkVDX1VOUEFDS19ISV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19VTlBBQ0tfSElfRVhQUikKKyNkZWZpbmUgVkVDX1VOUEFDS19MT19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19VTlBBQ0tfTE9fRVhQUikKKyNkZWZpbmUgVkVDX1VOUEFDS19GTE9BVF9ISV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19VTlBBQ0tfRkxPQVRfSElfRVhQUikKKyNkZWZpbmUgVkVDX1VOUEFDS19GTE9BVF9MT19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19VTlBBQ0tfRkxPQVRfTE9fRVhQUikKKyNkZWZpbmUgVkVDX1BBQ0tfVFJVTkNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfUEFDS19UUlVOQ19FWFBSKQorI2RlZmluZSBWRUNfUEFDS19TQVRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfUEFDS19TQVRfRVhQUikKKyNkZWZpbmUgVkVDX1BBQ0tfRklYX1RSVU5DX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX1BBQ0tfRklYX1RSVU5DX0VYUFIpCisjZGVmaW5lIFZFQ19XSURFTl9MU0hJRlRfSElfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfV0lERU5fTFNISUZUX0hJX0VYUFIpCisjZGVmaW5lIFZFQ19XSURFTl9MU0hJRlRfTE9fRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfV0lERU5fTFNISUZUX0xPX0VYUFIpCisjZGVmaW5lIFBSRURJQ1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQUkVESUNUX0VYUFIpCisjZGVmaW5lIE9QVElNSVpBVElPTl9OT0RFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9QVElNSVpBVElPTl9OT0RFKQorI2RlZmluZSBUQVJHRVRfT1BUSU9OX05PREVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEFSR0VUX09QVElPTl9OT0RFKQorI2RlZmluZSBDX01BWUJFX0NPTlNUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ19NQVlCRV9DT05TVF9FWFBSKQorI2RlZmluZSBFWENFU1NfUFJFQ0lTSU9OX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRVhDRVNTX1BSRUNJU0lPTl9FWFBSKQorI2RlZmluZSBVU0VSREVGX0xJVEVSQUxfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVVNFUkRFRl9MSVRFUkFMKQorI2RlZmluZSBTSVpFT0ZfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTSVpFT0ZfRVhQUikKKyNkZWZpbmUgVU5DT05TVFJBSU5FRF9BUlJBWV9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVOQ09OU1RSQUlORURfQVJSQVlfVFlQRSkKKyNkZWZpbmUgVU5DT05TVFJBSU5FRF9BUlJBWV9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVU5DT05TVFJBSU5FRF9BUlJBWV9SRUYpCisjZGVmaW5lIE5VTExfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOVUxMX0VYUFIpCisjZGVmaW5lIFBMVVNfTk9NT0RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQTFVTX05PTU9EX0VYUFIpCisjZGVmaW5lIE1JTlVTX05PTU9EX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTUlOVVNfTk9NT0RfRVhQUikKKyNkZWZpbmUgQVRUUl9BRERSX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVRUUl9BRERSX0VYUFIpCisjZGVmaW5lIFNUTVRfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTVE1UX1NUTVQpCisjZGVmaW5lIExPT1BfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBMT09QX1NUTVQpCisjZGVmaW5lIEVYSVRfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBFWElUX1NUTVQpCisjZGVmaW5lIE9GRlNFVF9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgT0ZGU0VUX1JFRikKKyNkZWZpbmUgUFRSTUVNX0NTVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQVFJNRU1fQ1NUKQorI2RlZmluZSBORVdfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBORVdfRVhQUikKKyNkZWZpbmUgVkVDX05FV19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFZFQ19ORVdfRVhQUikKKyNkZWZpbmUgREVMRVRFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgREVMRVRFX0VYUFIpCisjZGVmaW5lIFZFQ19ERUxFVEVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBWRUNfREVMRVRFX0VYUFIpCisjZGVmaW5lIFNDT1BFX1JFRl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTQ09QRV9SRUYpCisjZGVmaW5lIE1FTUJFUl9SRUZfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTUVNQkVSX1JFRikKKyNkZWZpbmUgVFlQRV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVfRVhQUikKKyNkZWZpbmUgQUdHUl9JTklUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQUdHUl9JTklUX0VYUFIpCisjZGVmaW5lIFZFQ19JTklUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVkVDX0lOSVRfRVhQUikKKyNkZWZpbmUgVEhST1dfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUSFJPV19FWFBSKQorI2RlZmluZSBFTVBUWV9DTEFTU19FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVNUFRZX0NMQVNTX0VYUFIpCisjZGVmaW5lIEJBU0VMSU5LX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJBU0VMSU5LKQorI2RlZmluZSBURU1QTEFURV9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRFTVBMQVRFX0RFQ0wpCisjZGVmaW5lIFRFTVBMQVRFX1BBUk1fSU5ERVhfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEVNUExBVEVfUEFSTV9JTkRFWCkKKyNkZWZpbmUgVEVNUExBVEVfVEVNUExBVEVfUEFSTV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBURU1QTEFURV9URU1QTEFURV9QQVJNKQorI2RlZmluZSBURU1QTEFURV9UWVBFX1BBUk1fQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVEVNUExBVEVfVFlQRV9QQVJNKQorI2RlZmluZSBUWVBFTkFNRV9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVOQU1FX1RZUEUpCisjZGVmaW5lIFRZUEVPRl9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVPRl9UWVBFKQorI2RlZmluZSBCT1VORF9URU1QTEFURV9URU1QTEFURV9QQVJNX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJPVU5EX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk0pCisjZGVmaW5lIFVOQk9VTkRfQ0xBU1NfVEVNUExBVEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgVU5CT1VORF9DTEFTU19URU1QTEFURSkKKyNkZWZpbmUgVVNJTkdfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVU0lOR19ERUNMKQorI2RlZmluZSBVU0lOR19TVE1UX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFVTSU5HX1NUTVQpCisjZGVmaW5lIERFRkFVTFRfQVJHX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIERFRkFVTFRfQVJHKQorI2RlZmluZSBERUZFUlJFRF9OT0VYQ0VQVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBERUZFUlJFRF9OT0VYQ0VQVCkKKyNkZWZpbmUgVEVNUExBVEVfSURfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBURU1QTEFURV9JRF9FWFBSKQorI2RlZmluZSBPVkVSTE9BRF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBPVkVSTE9BRCkKKyNkZWZpbmUgUFNFVURPX0RUT1JfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQU0VVRE9fRFRPUl9FWFBSKQorI2RlZmluZSBNT0RPUF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE1PRE9QX0VYUFIpCisjZGVmaW5lIENBU1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDQVNUX0VYUFIpCisjZGVmaW5lIFJFSU5URVJQUkVUX0NBU1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBSRUlOVEVSUFJFVF9DQVNUX0VYUFIpCisjZGVmaW5lIENPTlNUX0NBU1RfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT05TVF9DQVNUX0VYUFIpCisjZGVmaW5lIFNUQVRJQ19DQVNUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU1RBVElDX0NBU1RfRVhQUikKKyNkZWZpbmUgRFlOQU1JQ19DQVNUX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgRFlOQU1JQ19DQVNUX0VYUFIpCisjZGVmaW5lIElNUExJQ0lUX0NPTlZfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJTVBMSUNJVF9DT05WX0VYUFIpCisjZGVmaW5lIERPVFNUQVJfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBET1RTVEFSX0VYUFIpCisjZGVmaW5lIFRZUEVJRF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVJRF9FWFBSKQorI2RlZmluZSBOT0VYQ0VQVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE5PRVhDRVBUX0VYUFIpCisjZGVmaW5lIE5PTl9ERVBFTkRFTlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBOT05fREVQRU5ERU5UX0VYUFIpCisjZGVmaW5lIENUT1JfSU5JVElBTElaRVJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ1RPUl9JTklUSUFMSVpFUikKKyNkZWZpbmUgVFJZX0JMT0NLX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSWV9CTE9DSykKKyNkZWZpbmUgRUhfU1BFQ19CTE9DS19DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBFSF9TUEVDX0JMT0NLKQorI2RlZmluZSBIQU5ETEVSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEhBTkRMRVIpCisjZGVmaW5lIE1VU1RfTk9UX1RIUk9XX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgTVVTVF9OT1RfVEhST1dfRVhQUikKKyNkZWZpbmUgQ0xFQU5VUF9TVE1UX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENMRUFOVVBfU1RNVCkKKyNkZWZpbmUgSUZfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBJRl9TVE1UKQorI2RlZmluZSBGT1JfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBGT1JfU1RNVCkKKyNkZWZpbmUgUkFOR0VfRk9SX1NUTVRfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUkFOR0VfRk9SX1NUTVQpCisjZGVmaW5lIFdISUxFX1NUTVRfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgV0hJTEVfU1RNVCkKKyNkZWZpbmUgRE9fU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBET19TVE1UKQorI2RlZmluZSBCUkVBS19TVE1UX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJSRUFLX1NUTVQpCisjZGVmaW5lIENPTlRJTlVFX1NUTVRfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ09OVElOVUVfU1RNVCkKKyNkZWZpbmUgU1dJVENIX1NUTVRfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU1dJVENIX1NUTVQpCisjZGVmaW5lIEVYUFJfU1RNVF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBFWFBSX1NUTVQpCisjZGVmaW5lIFRBR19ERUZOX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRBR19ERUZOKQorI2RlZmluZSBPRkZTRVRPRl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE9GRlNFVE9GX0VYUFIpCisjZGVmaW5lIEFSUk9XX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVJST1dfRVhQUikKKyNkZWZpbmUgQUxJR05PRl9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFMSUdOT0ZfRVhQUikKKyNkZWZpbmUgQVRfRU5DT0RFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQVRfRU5DT0RFX0VYUFIpCisjZGVmaW5lIFNUTVRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBTVE1UX0VYUFIpCisjZGVmaW5lIFVOQVJZX1BMVVNfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVTkFSWV9QTFVTX0VYUFIpCisjZGVmaW5lIFNUQVRJQ19BU1NFUlRfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgU1RBVElDX0FTU0VSVCkKKyNkZWZpbmUgVFlQRV9BUkdVTUVOVF9QQUNLX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRZUEVfQVJHVU1FTlRfUEFDSykKKyNkZWZpbmUgTk9OVFlQRV9BUkdVTUVOVF9QQUNLX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIE5PTlRZUEVfQVJHVU1FTlRfUEFDSykKKyNkZWZpbmUgVFlQRV9QQUNLX0VYUEFOU0lPTl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBUWVBFX1BBQ0tfRVhQQU5TSU9OKQorI2RlZmluZSBFWFBSX1BBQ0tfRVhQQU5TSU9OX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEVYUFJfUEFDS19FWFBBTlNJT04pCisjZGVmaW5lIEFSR1VNRU5UX1BBQ0tfU0VMRUNUX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEFSR1VNRU5UX1BBQ0tfU0VMRUNUKQorI2RlZmluZSBUUkFJVF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRSQUlUX0VYUFIpCisjZGVmaW5lIExBTUJEQV9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIExBTUJEQV9FWFBSKQorI2RlZmluZSBERUNMVFlQRV9UWVBFX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIERFQ0xUWVBFX1RZUEUpCisjZGVmaW5lIFVOREVSTFlJTkdfVFlQRV9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVTkRFUkxZSU5HX1RZUEUpCisjZGVmaW5lIEJBU0VTX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIEJBU0VTKQorI2RlZmluZSBURU1QTEFURV9JTkZPX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIFRFTVBMQVRFX0lORk8pCisjZGVmaW5lIFVSU0hJRlRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBVUlNISUZUX0VYUFIpCisjZGVmaW5lIENPTVBBUkVfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT01QQVJFX0VYUFIpCisjZGVmaW5lIENPTVBBUkVfTF9FWFBSX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIENPTVBBUkVfTF9FWFBSKQorI2RlZmluZSBDT01QQVJFX0dfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDT01QQVJFX0dfRVhQUikKKyNkZWZpbmUgQ0xBU1NfSU5URVJGQUNFX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0xBU1NfSU5URVJGQUNFX1RZUEUpCisjZGVmaW5lIENMQVNTX0lNUExFTUVOVEFUSU9OX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0xBU1NfSU1QTEVNRU5UQVRJT05fVFlQRSkKKyNkZWZpbmUgQ0FURUdPUllfSU5URVJGQUNFX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0FURUdPUllfSU5URVJGQUNFX1RZUEUpCisjZGVmaW5lIENBVEVHT1JZX0lNUExFTUVOVEFUSU9OX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0FURUdPUllfSU1QTEVNRU5UQVRJT05fVFlQRSkKKyNkZWZpbmUgUFJPVE9DT0xfSU5URVJGQUNFX1RZUEVfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgUFJPVE9DT0xfSU5URVJGQUNFX1RZUEUpCisjZGVmaW5lIEtFWVdPUkRfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBLRVlXT1JEX0RFQ0wpCisjZGVmaW5lIElOU1RBTkNFX01FVEhPRF9ERUNMX0NIRUNLKHQpCVRSRUVfQ0hFQ0sgKHQsIElOU1RBTkNFX01FVEhPRF9ERUNMKQorI2RlZmluZSBDTEFTU19NRVRIT0RfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBDTEFTU19NRVRIT0RfREVDTCkKKyNkZWZpbmUgUFJPUEVSVFlfREVDTF9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQUk9QRVJUWV9ERUNMKQorI2RlZmluZSBNRVNTQUdFX1NFTkRfRVhQUl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBNRVNTQUdFX1NFTkRfRVhQUikKKyNkZWZpbmUgQ0xBU1NfUkVGRVJFTkNFX0VYUFJfQ0hFQ0sodCkJVFJFRV9DSEVDSyAodCwgQ0xBU1NfUkVGRVJFTkNFX0VYUFIpCisjZGVmaW5lIFBST1BFUlRZX1JFRl9DSEVDSyh0KQlUUkVFX0NIRUNLICh0LCBQUk9QRVJUWV9SRUYpCisKKyNlbmRpZiAvKiBHQ0NfVFJFRV9DSEVDS19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1kdW1wLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1kdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0YjM1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLWR1bXAuaApAQCAtMCwwICsxLDk2IEBACisvKiBUcmVlLWR1bXBpbmcgZnVuY3Rpb25hbGl0eSBmb3IgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgorICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0dGVuIGJ5IE1hcmsgTWl0Y2hlbGwgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1RSRUVfRFVNUF9ICisjZGVmaW5lIEdDQ19UUkVFX0RVTVBfSAorCisjaW5jbHVkZSAic3BsYXktdHJlZS5oIgorI2luY2x1ZGUgImR1bXBmaWxlLmgiCisKK3R5cGVkZWYgc3RydWN0IGR1bXBfaW5mbyAqZHVtcF9pbmZvX3A7CisKKy8qIEZsYWdzIHVzZWQgd2l0aCBxdWV1ZSBmdW5jdGlvbnMuICAqLworI2RlZmluZSBEVU1QX05PTkUgICAgIDAKKyNkZWZpbmUgRFVNUF9CSU5GTyAgICAxCisKKy8qIEluZm9ybWF0aW9uIGFib3V0IGEgbm9kZSB0byBiZSBkdW1wZWQuICAqLworCit0eXBlZGVmIHN0cnVjdCBkdW1wX25vZGVfaW5mbworeworICAvKiBUaGUgaW5kZXggZm9yIHRoZSBub2RlLiAgKi8KKyAgdW5zaWduZWQgaW50IGluZGV4OworICAvKiBOb256ZXJvIGlmIHRoZSBub2RlIGlzIGEgYmluZm8uICAqLworICB1bnNpZ25lZCBpbnQgYmluZm9fcCA6IDE7Cit9ICpkdW1wX25vZGVfaW5mb19wOworCisvKiBBIGR1bXBfcXVldWUgaXMgYSBsaW5rIGluIHRoZSBxdWV1ZSBvZiB0aGluZ3MgdG8gYmUgZHVtcGVkLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZHVtcF9xdWV1ZQoreworICAvKiBUaGUgcXVldWVkIHRyZWUgbm9kZS4gICovCisgIHNwbGF5X3RyZWVfbm9kZSBub2RlOworICAvKiBUaGUgbmV4dCBub2RlIGluIHRoZSBxdWV1ZS4gICovCisgIHN0cnVjdCBkdW1wX3F1ZXVlICpuZXh0OworfSAqZHVtcF9xdWV1ZV9wOworCisvKiBBIGR1bXBfaW5mbyBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCBob3cgd2Ugc2hvdWxkIHBlcmZvcm0gdGhlIGR1bXAKKyAgIGFuZCBhYm91dCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZHVtcC4gICovCisKK3N0cnVjdCBkdW1wX2luZm8KK3sKKyAgLyogVGhlIHN0cmVhbSBvbiB3aGljaCB0byBkdW1wIHRoZSBpbmZvcm1hdGlvbi4gICovCisgIEZJTEUgKnN0cmVhbTsKKyAgLyogVGhlIG9yaWdpbmFsIG5vZGUuICAqLworICBjb25zdF90cmVlIG5vZGU7CisgIC8qIFVzZXIgZmxhZ3MuICAqLworICBpbnQgZmxhZ3M7CisgIC8qIFRoZSBuZXh0IHVudXNlZCBub2RlIGluZGV4LiAgKi8KKyAgdW5zaWduZWQgaW50IGluZGV4OworICAvKiBUaGUgbmV4dCBjb2x1bW4uICAqLworICB1bnNpZ25lZCBpbnQgY29sdW1uOworICAvKiBUaGUgZmlyc3Qgbm9kZSBpbiB0aGUgcXVldWUgb2Ygbm9kZXMgdG8gYmUgd3JpdHRlbiBvdXQuICAqLworICBkdW1wX3F1ZXVlX3AgcXVldWU7CisgIC8qIFRoZSBsYXN0IG5vZGUgaW4gdGhlIHF1ZXVlLiAgKi8KKyAgZHVtcF9xdWV1ZV9wIHF1ZXVlX2VuZDsKKyAgLyogRnJlZSBxdWV1ZSBub2Rlcy4gICovCisgIGR1bXBfcXVldWVfcCBmcmVlX2xpc3Q7CisgIC8qIFRoZSB0cmVlIG5vZGVzIHdoaWNoIHdlIGhhdmUgYWxyZWFkeSB3cml0dGVuIG91dC4gIFRoZQorICAgICBrZXlzIGFyZSB0aGUgYWRkcmVzc2VzIG9mIHRoZSBub2RlczsgdGhlIHZhbHVlcyBhcmUgdGhlIGludGVnZXIKKyAgICAgaW5kaWNlcyB3ZSBhc3NpZ25lZCB0aGVtLiAgKi8KKyAgc3BsYXlfdHJlZSBub2RlczsKK307CisKKy8qIER1bXAgdGhlIENISUxEIGFuZCBpdHMgY2hpbGRyZW4uICAqLworI2RlZmluZSBkdW1wX2NoaWxkKGZpZWxkLCBjaGlsZCkgXAorICBxdWV1ZV9hbmRfZHVtcF9pbmRleCAoZGksIGZpZWxkLCBjaGlsZCwgRFVNUF9OT05FKQorCitleHRlcm4gdm9pZCBkdW1wX3BvaW50ZXIgKGR1bXBfaW5mb19wLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBkdW1wX2ludCAoZHVtcF9pbmZvX3AsIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIGR1bXBfc3RyaW5nIChkdW1wX2luZm9fcCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGR1bXBfc3RyaW5nX2ZpZWxkIChkdW1wX2luZm9fcCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgcXVldWVfYW5kX2R1bXBfaW5kZXggKGR1bXBfaW5mb19wLCBjb25zdCBjaGFyICosIGNvbnN0X3RyZWUsIGludCk7CitleHRlcm4gdm9pZCBxdWV1ZV9hbmRfZHVtcF90eXBlIChkdW1wX2luZm9fcCwgY29uc3RfdHJlZSk7CitleHRlcm4gdm9pZCBkdW1wX2Z1bmN0aW9uIChpbnQsIHRyZWUpOworZXh0ZXJuIGludCBkdW1wX2ZsYWcgKGR1bXBfaW5mb19wLCBpbnQsIGNvbnN0X3RyZWUpOworCisvKiBJbiB0cmVlLWNmZy5jICAqLworZXh0ZXJuIHZvaWQgZHVtcF9mdW5jdGlvbl90b19maWxlICh0cmVlLCBGSUxFICosIGludCk7CisKKyNlbmRpZiAvKiAhIEdDQ19UUkVFX0RVTVBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtZmxvdy1pbmxpbmUuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLWZsb3ctaW5saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhNzBiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLWZsb3ctaW5saW5lLmgKQEAgLTAsMCArMSwxMzY0IEBACisvKiBJbmxpbmUgZnVuY3Rpb25zIGZvciB0cmVlLWZsb3cuaAorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBEaWVnbyBOb3ZpbGxvIDxkbm92aWxsb0ByZWRoYXQuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfVFJFRV9GTE9XX0lOTElORV9ICisjZGVmaW5lIF9UUkVFX0ZMT1dfSU5MSU5FX0ggMQorCisvKiBJbmxpbmUgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgdmFyaW91cyBkYXRhIHN0cnVjdHVyZXMgZGVmaW5lZCBpbgorICAgdHJlZS1mbG93LmguICBTZWUgdHJlZS1mbG93LmggZm9yIGRvY3VtZW50YXRpb24uICAqLworCisvKiBSZXR1cm4gdHJ1ZSB3aGVuIGdpbXBsZSBTU0EgZm9ybSB3YXMgYnVpbHQuCisgICBnaW1wbGVfaW5fc3NhX3AgaXMgcXVlcmllZCBieSBnaW1wbGlmaWVyIGluIHZhcmlvdXMgZWFybHkgc3RhZ2VzIGJlZm9yZSBTU0EKKyAgIGluZnJhc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLiAgQ2hlY2sgZm9yIHByZXNlbmNlIG9mIHRoZSBkYXRhc3RydWN0dXJlcworICAgYXQgZmlyc3QgcGxhY2UuICAqLworc3RhdGljIGlubGluZSBib29sCitnaW1wbGVfaW5fc3NhX3AgKGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZnVuKQoreworICByZXR1cm4gZnVuICYmIGZ1bi0+Z2ltcGxlX2RmICYmIGZ1bi0+Z2ltcGxlX2RmLT5pbl9zc2FfcDsKK30KKworLyogQXJ0aWZpY2lhbCB2YXJpYWJsZSB1c2VkIGZvciB0aGUgdmlydHVhbCBvcGVyYW5kIEZVRCBjaGFpbi4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV92b3AgKGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZnVuKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChmdW4gJiYgZnVuLT5naW1wbGVfZGYpOworICByZXR1cm4gZnVuLT5naW1wbGVfZGYtPnZvcDsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgaGFzaHRhYmxlIGl0ZXJhdG9yIEhUSSB0byBwb2ludCB0byBoYXNodGFibGUgVEFCTEUgKi8KKworc3RhdGljIGlubGluZSB2b2lkICoKK2ZpcnN0X2h0YWJfZWxlbWVudCAoaHRhYl9pdGVyYXRvciAqaHRpLCBodGFiX3QgdGFibGUpCit7CisgIGh0aS0+aHRhYiA9IHRhYmxlOworICBodGktPnNsb3QgPSB0YWJsZS0+ZW50cmllczsKKyAgaHRpLT5saW1pdCA9IGh0aS0+c2xvdCArIGh0YWJfc2l6ZSAodGFibGUpOworICBkbworICAgIHsKKyAgICAgIFBUUiB4ID0gKihodGktPnNsb3QpOworICAgICAgaWYgKHggIT0gSFRBQl9FTVBUWV9FTlRSWSAmJiB4ICE9IEhUQUJfREVMRVRFRF9FTlRSWSkKKwlicmVhazsKKyAgICB9IHdoaWxlICgrKyhodGktPnNsb3QpIDwgaHRpLT5saW1pdCk7CisKKyAgaWYgKGh0aS0+c2xvdCA8IGh0aS0+bGltaXQpCisgICAgcmV0dXJuICooaHRpLT5zbG90KTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybiBjdXJyZW50IG5vbi1lbXB0eS9kZWxldGVkIHNsb3Qgb2YgdGhlIGhhc2h0YWJsZSBwb2ludGVkIHRvIGJ5IEhUSSwKKyAgIG9yIE5VTEwgaWYgd2UgaGF2ZSAgcmVhY2hlZCB0aGUgZW5kLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitlbmRfaHRhYl9wIChjb25zdCBodGFiX2l0ZXJhdG9yICpodGkpCit7CisgIGlmIChodGktPnNsb3QgPj0gaHRpLT5saW1pdCkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBBZHZhbmNlIHRoZSBoYXNodGFibGUgaXRlcmF0b3IgcG9pbnRlZCB0byBieSBIVEkgdG8gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUKKyAgIGhhc2h0YWJsZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCituZXh0X2h0YWJfZWxlbWVudCAoaHRhYl9pdGVyYXRvciAqaHRpKQoreworICB3aGlsZSAoKysoaHRpLT5zbG90KSA8IGh0aS0+bGltaXQpCisgICAgeworICAgICAgUFRSIHggPSAqKGh0aS0+c2xvdCk7CisgICAgICBpZiAoeCAhPSBIVEFCX0VNUFRZX0VOVFJZICYmIHggIT0gSFRBQl9ERUxFVEVEX0VOVFJZKQorCXJldHVybiB4OworICAgIH07CisgIHJldHVybiBOVUxMOworfQorCisvKiBHZXQgdGhlIG51bWJlciBvZiB0aGUgbmV4dCBzdGF0ZW1lbnQgdWlkIHRvIGJlIGFsbG9jYXRlZC4gICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorZ2ltcGxlX3N0bXRfbWF4X3VpZCAoc3RydWN0IGZ1bmN0aW9uICpmbikKK3sKKyAgcmV0dXJuIGZuLT5sYXN0X3N0bXRfdWlkOworfQorCisvKiBTZXQgdGhlIG51bWJlciBvZiB0aGUgbmV4dCBzdGF0ZW1lbnQgdWlkIHRvIGJlIGFsbG9jYXRlZC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9naW1wbGVfc3RtdF9tYXhfdWlkIChzdHJ1Y3QgZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBpbnQgbWF4aWQpCit7CisgIGZuLT5sYXN0X3N0bXRfdWlkID0gbWF4aWQ7Cit9CisKKy8qIFNldCB0aGUgbnVtYmVyIG9mIHRoZSBuZXh0IHN0YXRlbWVudCB1aWQgdG8gYmUgYWxsb2NhdGVkLiAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitpbmNfZ2ltcGxlX3N0bXRfbWF4X3VpZCAoc3RydWN0IGZ1bmN0aW9uICpmbikKK3sKKyAgcmV0dXJuIGZuLT5sYXN0X3N0bXRfdWlkKys7Cit9CisKKy8qIFJldHVybiB0aGUgbGluZSBudW1iZXIgZm9yIEVYUFIsIG9yIHJldHVybiAtMSBpZiB3ZSBoYXZlIG5vIGxpbmUKKyAgIG51bWJlciBpbmZvcm1hdGlvbiBmb3IgaXQuICAqLworc3RhdGljIGlubGluZSBpbnQKK2dldF9saW5lbm8gKGNvbnN0X2dpbXBsZSBzdG10KQoreworICBsb2NhdGlvbl90IGxvYzsKKworICBpZiAoIXN0bXQpCisgICAgcmV0dXJuIC0xOworCisgIGxvYyA9IGdpbXBsZV9sb2NhdGlvbiAoc3RtdCk7CisgIGlmIChsb2MgPT0gVU5LTk9XTl9MT0NBVElPTikKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIExPQ0FUSU9OX0xJTkUgKGxvYyk7Cit9CisKKy8qIERlbGluayBhbiBpbW1lZGlhdGVfdXNlcyBub2RlIGZyb20gaXRzIGNoYWluLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVsaW5rX2ltbV91c2UgKHNzYV91c2Vfb3BlcmFuZF90ICpsaW5rbm9kZSkKK3sKKyAgLyogUmV0dXJuIGlmIHRoaXMgbm9kZSBpcyBub3QgaW4gYSBsaXN0LiAgKi8KKyAgaWYgKGxpbmtub2RlLT5wcmV2ID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGxpbmtub2RlLT5wcmV2LT5uZXh0ID0gbGlua25vZGUtPm5leHQ7CisgIGxpbmtub2RlLT5uZXh0LT5wcmV2ID0gbGlua25vZGUtPnByZXY7CisgIGxpbmtub2RlLT5wcmV2ID0gTlVMTDsKKyAgbGlua25vZGUtPm5leHQgPSBOVUxMOworfQorCisvKiBMaW5rIHNzYV9pbW1fdXNlIG5vZGUgTElOS05PREUgaW50byB0aGUgY2hhaW4gZm9yIExJU1QuICAqLworc3RhdGljIGlubGluZSB2b2lkCitsaW5rX2ltbV91c2VfdG9fbGlzdCAoc3NhX3VzZV9vcGVyYW5kX3QgKmxpbmtub2RlLCBzc2FfdXNlX29wZXJhbmRfdCAqbGlzdCkKK3sKKyAgLyogTGluayB0aGUgbmV3IG5vZGUgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuICBJZiB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YKKyAgICAgdHJhdmVyc2luZyB0aGUgbGlzdCwgd2Ugd29uJ3QgdmlzaXQgYW55IG5ldyBub2RlcyBhZGRlZCB0byBpdC4gICovCisgIGxpbmtub2RlLT5wcmV2ID0gbGlzdDsKKyAgbGlua25vZGUtPm5leHQgPSBsaXN0LT5uZXh0OworICBsaXN0LT5uZXh0LT5wcmV2ID0gbGlua25vZGU7CisgIGxpc3QtPm5leHQgPSBsaW5rbm9kZTsKK30KKworLyogTGluayBzc2FfaW1tX3VzZSBub2RlIExJTktOT0RFIGludG8gdGhlIGNoYWluIGZvciBERUYuICAqLworc3RhdGljIGlubGluZSB2b2lkCitsaW5rX2ltbV91c2UgKHNzYV91c2Vfb3BlcmFuZF90ICpsaW5rbm9kZSwgdHJlZSBkZWYpCit7CisgIHNzYV91c2Vfb3BlcmFuZF90ICpyb290OworCisgIGlmICghZGVmIHx8IFRSRUVfQ09ERSAoZGVmKSAhPSBTU0FfTkFNRSkKKyAgICBsaW5rbm9kZS0+cHJldiA9IE5VTEw7CisgIGVsc2UKKyAgICB7CisgICAgICByb290ID0gJihTU0FfTkFNRV9JTU1fVVNFX05PREUgKGRlZikpOworICAgICAgaWYgKGxpbmtub2RlLT51c2UpCisgICAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKCoobGlua25vZGUtPnVzZSkgPT0gZGVmKTsKKyAgICAgIGxpbmtfaW1tX3VzZV90b19saXN0IChsaW5rbm9kZSwgcm9vdCk7CisgICAgfQorfQorCisvKiBTZXQgdGhlIHZhbHVlIG9mIGEgdXNlIHBvaW50ZWQgdG8gYnkgVVNFIHRvIFZBTC4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldF9zc2FfdXNlX2Zyb21fcHRyICh1c2Vfb3BlcmFuZF9wIHVzZSwgdHJlZSB2YWwpCit7CisgIGRlbGlua19pbW1fdXNlICh1c2UpOworICAqKHVzZS0+dXNlKSA9IHZhbDsKKyAgbGlua19pbW1fdXNlICh1c2UsIHZhbCk7Cit9CisKKy8qIExpbmsgc3NhX2ltbV91c2Ugbm9kZSBMSU5LTk9ERSBpbnRvIHRoZSBjaGFpbiBmb3IgREVGLCB3aXRoIHVzZSBvY2N1cnJpbmcKKyAgIGluIFNUTVQuICAqLworc3RhdGljIGlubGluZSB2b2lkCitsaW5rX2ltbV91c2Vfc3RtdCAoc3NhX3VzZV9vcGVyYW5kX3QgKmxpbmtub2RlLCB0cmVlIGRlZiwgZ2ltcGxlIHN0bXQpCit7CisgIGlmIChzdG10KQorICAgIGxpbmtfaW1tX3VzZSAobGlua25vZGUsIGRlZik7CisgIGVsc2UKKyAgICBsaW5rX2ltbV91c2UgKGxpbmtub2RlLCBOVUxMKTsKKyAgbGlua25vZGUtPmxvYy5zdG10ID0gc3RtdDsKK30KKworLyogUmVsaW5rIGEgbmV3IG5vZGUgaW4gcGxhY2Ugb2YgYW4gb2xkIG5vZGUgaW4gdGhlIGxpc3QuICAqLworc3RhdGljIGlubGluZSB2b2lkCityZWxpbmtfaW1tX3VzZSAoc3NhX3VzZV9vcGVyYW5kX3QgKm5vZGUsIHNzYV91c2Vfb3BlcmFuZF90ICpvbGQpCit7CisgIC8qIFRoZSBub2RlIG9uZSBoYWQgYmV0dGVyIGJlIGluIHRoZSBzYW1lIGxpc3QuICAqLworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgqKG9sZC0+dXNlKSA9PSAqKG5vZGUtPnVzZSkpOworICBub2RlLT5wcmV2ID0gb2xkLT5wcmV2OworICBub2RlLT5uZXh0ID0gb2xkLT5uZXh0OworICBpZiAob2xkLT5wcmV2KQorICAgIHsKKyAgICAgIG9sZC0+cHJldi0+bmV4dCA9IG5vZGU7CisgICAgICBvbGQtPm5leHQtPnByZXYgPSBub2RlOworICAgICAgLyogUmVtb3ZlIHRoZSBvbGQgbm9kZSBmcm9tIHRoZSBsaXN0LiAgKi8KKyAgICAgIG9sZC0+cHJldiA9IE5VTEw7CisgICAgfQorfQorCisvKiBSZWxpbmsgc3NhX2ltbV91c2Ugbm9kZSBMSU5LTk9ERSBpbnRvIHRoZSBjaGFpbiBmb3IgT0xELCB3aXRoIHVzZSBvY2N1cnJpbmcKKyAgIGluIFNUTVQuICAqLworc3RhdGljIGlubGluZSB2b2lkCityZWxpbmtfaW1tX3VzZV9zdG10IChzc2FfdXNlX29wZXJhbmRfdCAqbGlua25vZGUsIHNzYV91c2Vfb3BlcmFuZF90ICpvbGQsCisJCSAgICAgZ2ltcGxlIHN0bXQpCit7CisgIGlmIChzdG10KQorICAgIHJlbGlua19pbW1fdXNlIChsaW5rbm9kZSwgb2xkKTsKKyAgZWxzZQorICAgIGxpbmtfaW1tX3VzZSAobGlua25vZGUsIE5VTEwpOworICBsaW5rbm9kZS0+bG9jLnN0bXQgPSBzdG10OworfQorCisKKy8qIFJldHVybiB0cnVlIGlzIElNTSBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbW1lZGlhdGUgdXNlIGxpc3QuICAqLworc3RhdGljIGlubGluZSBib29sCitlbmRfcmVhZG9ubHlfaW1tX3VzZV9wIChjb25zdCBpbW1fdXNlX2l0ZXJhdG9yICppbW0pCit7CisgIHJldHVybiAoaW1tLT5pbW1fdXNlID09IGltbS0+ZW5kX3ApOworfQorCisvKiBJbml0aWFsaXplIGl0ZXJhdG9yIElNTSB0byBwcm9jZXNzIHRoZSBsaXN0IGZvciBWQVIuICAqLworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitmaXJzdF9yZWFkb25seV9pbW1fdXNlIChpbW1fdXNlX2l0ZXJhdG9yICppbW0sIHRyZWUgdmFyKQoreworICBpbW0tPmVuZF9wID0gJihTU0FfTkFNRV9JTU1fVVNFX05PREUgKHZhcikpOworICBpbW0tPmltbV91c2UgPSBpbW0tPmVuZF9wLT5uZXh0OworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworICBpbW0tPml0ZXJfbm9kZS5uZXh0ID0gaW1tLT5pbW1fdXNlLT5uZXh0OworI2VuZGlmCisgIGlmIChlbmRfcmVhZG9ubHlfaW1tX3VzZV9wIChpbW0pKQorICAgIHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7CisgIHJldHVybiBpbW0tPmltbV91c2U7Cit9CisKKy8qIEJ1bXAgSU1NIHRvIHRoZSBuZXh0IHVzZSBpbiB0aGUgbGlzdC4gICovCitzdGF0aWMgaW5saW5lIHVzZV9vcGVyYW5kX3AKK25leHRfcmVhZG9ubHlfaW1tX3VzZSAoaW1tX3VzZV9pdGVyYXRvciAqaW1tKQoreworICB1c2Vfb3BlcmFuZF9wIG9sZCA9IGltbS0+aW1tX3VzZTsKKworI2lmZGVmIEVOQUJMRV9DSEVDS0lORworICAvKiBJZiB0aGlzIGFzc2VydGlvbiBmYWlscywgaXQgaW5kaWNhdGVzIHRoZSAnbmV4dCcgcG9pbnRlciBoYXMgY2hhbmdlZAorICAgICBzaW5jZSB0aGUgbGFzdCBidW1wLiAgVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgbGlzdCBpcyBiZWluZyBtb2RpZmllZAorICAgICB2aWEgc3RtdCBjaGFuZ2VzLCBvciBTRVRfVVNFLCBvciBzb21lc3VjaCB0aGluZywgYW5kIHlvdSBuZWVkIHRvIGJlCisgICAgIHVzaW5nIHRoZSBTQUZFIHZlcnNpb24gb2YgdGhlIGl0ZXJhdG9yLiAgKi8KKyAgZ2NjX2Fzc2VydCAoaW1tLT5pdGVyX25vZGUubmV4dCA9PSBvbGQtPm5leHQpOworICBpbW0tPml0ZXJfbm9kZS5uZXh0ID0gb2xkLT5uZXh0LT5uZXh0OworI2VuZGlmCisKKyAgaW1tLT5pbW1fdXNlID0gb2xkLT5uZXh0OworICBpZiAoZW5kX3JlYWRvbmx5X2ltbV91c2VfcCAoaW1tKSkKKyAgICByZXR1cm4gTlVMTF9VU0VfT1BFUkFORF9QOworICByZXR1cm4gaW1tLT5pbW1fdXNlOworfQorCisvKiB0cmVlLWNmZy5jICovCitleHRlcm4gYm9vbCBoYXNfemVyb191c2VzXzEgKGNvbnN0IHNzYV91c2Vfb3BlcmFuZF90ICpoZWFkKTsKK2V4dGVybiBib29sIHNpbmdsZV9pbW1fdXNlXzEgKGNvbnN0IHNzYV91c2Vfb3BlcmFuZF90ICpoZWFkLAorCQkJICAgICAgdXNlX29wZXJhbmRfcCAqdXNlX3AsIGdpbXBsZSAqc3RtdCk7CisKKy8qIFJldHVybiB0cnVlIGlmIFZBUiBoYXMgbm8gbm9uZGVidWcgdXNlcy4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2hhc196ZXJvX3VzZXMgKGNvbnN0X3RyZWUgdmFyKQoreworICBjb25zdCBzc2FfdXNlX29wZXJhbmRfdCAqY29uc3QgcHRyID0gJihTU0FfTkFNRV9JTU1fVVNFX05PREUgKHZhcikpOworCisgIC8qIEEgc2luZ2xlIHVzZV9vcGVyYW5kIG1lYW5zIHRoZXJlIGlzIG5vIGl0ZW1zIGluIHRoZSBsaXN0LiAgKi8KKyAgaWYgKHB0ciA9PSBwdHItPm5leHQpCisgICAgcmV0dXJuIHRydWU7CisKKyAgLyogSWYgdGhlcmUgYXJlIGRlYnVnIHN0bXRzLCB3ZSBoYXZlIHRvIGxvb2sgYXQgZWFjaCB1c2UgYW5kIHNlZQorICAgICB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbm9uZGVidWcgdXNlcy4gICovCisgIGlmICghTUFZX0hBVkVfREVCVUdfU1RNVFMpCisgICAgcmV0dXJuIGZhbHNlOworCisgIHJldHVybiBoYXNfemVyb191c2VzXzEgKHB0cik7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIFZBUiBoYXMgYSBzaW5nbGUgbm9uZGVidWcgdXNlLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFzX3NpbmdsZV91c2UgKGNvbnN0X3RyZWUgdmFyKQoreworICBjb25zdCBzc2FfdXNlX29wZXJhbmRfdCAqY29uc3QgcHRyID0gJihTU0FfTkFNRV9JTU1fVVNFX05PREUgKHZhcikpOworCisgIC8qIElmIHRoZXJlIGFyZW4ndCBhbnkgdXNlcyB3aGF0c29ldmVyLCB3ZSdyZSBkb25lLiAgKi8KKyAgaWYgKHB0ciA9PSBwdHItPm5leHQpCisgICAgcmV0dXJuIGZhbHNlOworCisgIC8qIElmIHRoZXJlJ3MgYSBzaW5nbGUgdXNlLCBjaGVjayB0aGF0IGl0J3Mgbm90IGEgZGVidWcgc3RtdC4gICovCisgIGlmIChwdHIgPT0gcHRyLT5uZXh0LT5uZXh0KQorICAgIHJldHVybiAhaXNfZ2ltcGxlX2RlYnVnIChVU0VfU1RNVCAocHRyLT5uZXh0KSk7CisKKyAgLyogSWYgdGhlcmUgYXJlIGRlYnVnIHN0bXRzLCB3ZSBoYXZlIHRvIGxvb2sgYXQgZWFjaCBvZiB0aGVtLiAgKi8KKyAgaWYgKCFNQVlfSEFWRV9ERUJVR19TVE1UUykKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIHNpbmdsZV9pbW1fdXNlXzEgKHB0ciwgTlVMTCwgTlVMTCk7Cit9CisKKworLyogSWYgVkFSIGhhcyBvbmx5IGEgc2luZ2xlIGltbWVkaWF0ZSBub25kZWJ1ZyB1c2UsIHJldHVybiB0cnVlLCBhbmQKKyAgIHNldCBVU0VfUCBhbmQgU1RNVCB0byB0aGUgdXNlIHBvaW50ZXIgYW5kIHN0bXQgb2Ygb2NjdXJyZW5jZS4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3NpbmdsZV9pbW1fdXNlIChjb25zdF90cmVlIHZhciwgdXNlX29wZXJhbmRfcCAqdXNlX3AsIGdpbXBsZSAqc3RtdCkKK3sKKyAgY29uc3Qgc3NhX3VzZV9vcGVyYW5kX3QgKmNvbnN0IHB0ciA9ICYoU1NBX05BTUVfSU1NX1VTRV9OT0RFICh2YXIpKTsKKworICAvKiBJZiB0aGVyZSBhcmVuJ3QgYW55IHVzZXMgd2hhdHNvZXZlciwgd2UncmUgZG9uZS4gICovCisgIGlmIChwdHIgPT0gcHRyLT5uZXh0KQorICAgIHsKKyAgICByZXR1cm5fZmFsc2U6CisgICAgICAqdXNlX3AgPSBOVUxMX1VTRV9PUEVSQU5EX1A7CisgICAgICAqc3RtdCA9IE5VTEw7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgIC8qIElmIHRoZXJlJ3MgYSBzaW5nbGUgdXNlLCBjaGVjayB0aGF0IGl0J3Mgbm90IGEgZGVidWcgc3RtdC4gICovCisgIGlmIChwdHIgPT0gcHRyLT5uZXh0LT5uZXh0KQorICAgIHsKKyAgICAgIGlmICghaXNfZ2ltcGxlX2RlYnVnIChVU0VfU1RNVCAocHRyLT5uZXh0KSkpCisJeworCSAgKnVzZV9wID0gcHRyLT5uZXh0OworCSAgKnN0bXQgPSBwdHItPm5leHQtPmxvYy5zdG10OworCSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgZWxzZQorCWdvdG8gcmV0dXJuX2ZhbHNlOworICAgIH0KKworICAvKiBJZiB0aGVyZSBhcmUgZGVidWcgc3RtdHMsIHdlIGhhdmUgdG8gbG9vayBhdCBlYWNoIG9mIHRoZW0uICAqLworICBpZiAoIU1BWV9IQVZFX0RFQlVHX1NUTVRTKQorICAgIGdvdG8gcmV0dXJuX2ZhbHNlOworCisgIHJldHVybiBzaW5nbGVfaW1tX3VzZV8xIChwdHIsIHVzZV9wLCBzdG10KTsKK30KKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uZGVidWcgaW1tZWRpYXRlIHVzZXMgb2YgVkFSLiAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitudW1faW1tX3VzZXMgKGNvbnN0X3RyZWUgdmFyKQoreworICBjb25zdCBzc2FfdXNlX29wZXJhbmRfdCAqY29uc3Qgc3RhcnQgPSAmKFNTQV9OQU1FX0lNTV9VU0VfTk9ERSAodmFyKSk7CisgIGNvbnN0IHNzYV91c2Vfb3BlcmFuZF90ICpwdHI7CisgIHVuc2lnbmVkIGludCBudW0gPSAwOworCisgIGlmICghTUFZX0hBVkVfREVCVUdfU1RNVFMpCisgICAgZm9yIChwdHIgPSBzdGFydC0+bmV4dDsgcHRyICE9IHN0YXJ0OyBwdHIgPSBwdHItPm5leHQpCisgICAgICBudW0rKzsKKyAgZWxzZQorICAgIGZvciAocHRyID0gc3RhcnQtPm5leHQ7IHB0ciAhPSBzdGFydDsgcHRyID0gcHRyLT5uZXh0KQorICAgICAgaWYgKCFpc19naW1wbGVfZGVidWcgKFVTRV9TVE1UIChwdHIpKSkKKwludW0rKzsKKworICByZXR1cm4gbnVtOworfQorCisvKiBSZXR1cm4gdGhlIHRyZWUgcG9pbnRlZC10byBieSBVU0UuICAqLworc3RhdGljIGlubGluZSB0cmVlCitnZXRfdXNlX2Zyb21fcHRyICh1c2Vfb3BlcmFuZF9wIHVzZSkKK3sKKyAgcmV0dXJuICoodXNlLT51c2UpOworfQorCisvKiBSZXR1cm4gdGhlIHRyZWUgcG9pbnRlZC10byBieSBERUYuICAqLworc3RhdGljIGlubGluZSB0cmVlCitnZXRfZGVmX2Zyb21fcHRyIChkZWZfb3BlcmFuZF9wIGRlZikKK3sKKyAgcmV0dXJuICpkZWY7Cit9CisKKy8qIFJldHVybiBhIHVzZV9vcGVyYW5kX3AgcG9pbnRlciBmb3IgYXJndW1lbnQgSSBvZiBQSEkgbm9kZSBHUy4gICovCisKK3N0YXRpYyBpbmxpbmUgdXNlX29wZXJhbmRfcAorZ2ltcGxlX3BoaV9hcmdfaW1tX3VzZV9wdHIgKGdpbXBsZSBncywgaW50IGkpCit7CisgIHJldHVybiAmZ2ltcGxlX3BoaV9hcmcgKGdzLCBpKS0+aW1tX3VzZTsKK30KKworLyogUmV0dXJuIHRoZSB0cmVlIG9wZXJhbmQgZm9yIGFyZ3VtZW50IEkgb2YgUEhJIG5vZGUgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9waGlfYXJnX2RlZiAoZ2ltcGxlIGdzLCBzaXplX3QgaW5kZXgpCit7CisgIHN0cnVjdCBwaGlfYXJnX2QgKnBkID0gZ2ltcGxlX3BoaV9hcmcgKGdzLCBpbmRleCk7CisgIHJldHVybiBnZXRfdXNlX2Zyb21fcHRyICgmcGQtPmltbV91c2UpOworfQorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB0cmVlIG9wZXJhbmQgZm9yIGFyZ3VtZW50IEkgb2YgUEhJIG5vZGUgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUgKgorZ2ltcGxlX3BoaV9hcmdfZGVmX3B0ciAoZ2ltcGxlIGdzLCBzaXplX3QgaW5kZXgpCit7CisgIHJldHVybiAmZ2ltcGxlX3BoaV9hcmcgKGdzLCBpbmRleCktPmRlZjsKK30KKworLyogUmV0dXJuIHRoZSBlZGdlIGFzc29jaWF0ZWQgd2l0aCBhcmd1bWVudCBJIG9mIHBoaSBub2RlIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBlZGdlCitnaW1wbGVfcGhpX2FyZ19lZGdlIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICByZXR1cm4gRURHRV9QUkVEIChnaW1wbGVfYmIgKGdzKSwgaSk7Cit9CisKKy8qIFJldHVybiB0aGUgc291cmNlIGxvY2F0aW9uIG9mIGdpbXBsZSBhcmd1bWVudCBJIG9mIHBoaSBub2RlIEdTLiAgKi8KKworc3RhdGljIGlubGluZSBzb3VyY2VfbG9jYXRpb24KK2dpbXBsZV9waGlfYXJnX2xvY2F0aW9uIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICByZXR1cm4gZ2ltcGxlX3BoaV9hcmcgKGdzLCBpKS0+bG9jdXM7Cit9CisKKy8qIFJldHVybiB0aGUgc291cmNlIGxvY2F0aW9uIG9mIHRoZSBhcmd1bWVudCBvbiBlZGdlIEUgb2YgcGhpIG5vZGUgR1MuICAqLworCitzdGF0aWMgaW5saW5lIHNvdXJjZV9sb2NhdGlvbgorZ2ltcGxlX3BoaV9hcmdfbG9jYXRpb25fZnJvbV9lZGdlIChnaW1wbGUgZ3MsIGVkZ2UgZSkKK3sKKyAgcmV0dXJuIGdpbXBsZV9waGlfYXJnIChncywgZS0+ZGVzdF9pZHgpLT5sb2N1czsKK30KKworLyogU2V0IHRoZSBzb3VyY2UgbG9jYXRpb24gb2YgZ2ltcGxlIGFyZ3VtZW50IEkgb2YgcGhpIG5vZGUgR1MgdG8gTE9DLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitnaW1wbGVfcGhpX2FyZ19zZXRfbG9jYXRpb24gKGdpbXBsZSBncywgc2l6ZV90IGksIHNvdXJjZV9sb2NhdGlvbiBsb2MpCit7CisgIGdpbXBsZV9waGlfYXJnIChncywgaSktPmxvY3VzID0gbG9jOworfQorCisvKiBSZXR1cm4gVFJVRSBpZiBhcmd1bWVudCBJIG9mIHBoaSBub2RlIEdTIGhhcyBhIGxvY2F0aW9uIHJlY29yZC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZ2ltcGxlX3BoaV9hcmdfaGFzX2xvY2F0aW9uIChnaW1wbGUgZ3MsIHNpemVfdCBpKQoreworICByZXR1cm4gZ2ltcGxlX3BoaV9hcmdfbG9jYXRpb24gKGdzLCBpKSAhPSBVTktOT1dOX0xPQ0FUSU9OOworfQorCisKKy8qIFJldHVybiB0aGUgUEhJIG5vZGVzIGZvciBiYXNpYyBibG9jayBCQiwgb3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8KKyAgIFBISSBub2Rlcy4gICovCitzdGF0aWMgaW5saW5lIGdpbXBsZV9zZXEKK3BoaV9ub2RlcyAoY29uc3RfYmFzaWNfYmxvY2sgYmIpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKCEoYmItPmZsYWdzICYgQkJfUlRMKSk7CisgIHJldHVybiBiYi0+aWwuZ2ltcGxlLnBoaV9ub2RlczsKK30KKworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxICoKK3BoaV9ub2Rlc19wdHIgKGJhc2ljX2Jsb2NrIGJiKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghKGJiLT5mbGFncyAmIEJCX1JUTCkpOworICByZXR1cm4gJmJiLT5pbC5naW1wbGUucGhpX25vZGVzOworfQorCisvKiBTZXQgUEhJIG5vZGVzIG9mIGEgYmFzaWMgYmxvY2sgQkIgdG8gU0VRLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfcGhpX25vZGVzIChiYXNpY19ibG9jayBiYiwgZ2ltcGxlX3NlcSBzZXEpCit7CisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGk7CisKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIShiYi0+ZmxhZ3MgJiBCQl9SVEwpKTsKKyAgYmItPmlsLmdpbXBsZS5waGlfbm9kZXMgPSBzZXE7CisgIGlmIChzZXEpCisgICAgZm9yIChpID0gZ3NpX3N0YXJ0IChzZXEpOyAhZ3NpX2VuZF9wIChpKTsgZ3NpX25leHQgKCZpKSkKKyAgICAgIGdpbXBsZV9zZXRfYmIgKGdzaV9zdG10IChpKSwgYmIpOworfQorCisvKiBSZXR1cm4gdGhlIHBoaSBhcmd1bWVudCB3aGljaCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHVzZS4gICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitwaGlfYXJnX2luZGV4X2Zyb21fdXNlICh1c2Vfb3BlcmFuZF9wIHVzZSkKK3sKKyAgc3RydWN0IHBoaV9hcmdfZCAqZWxlbWVudCwgKnJvb3Q7CisgIHNpemVfdCBpbmRleDsKKyAgZ2ltcGxlIHBoaTsKKworICAvKiBTaW5jZSB0aGUgdXNlIGlzIHRoZSBmaXJzdCB0aGluZyBpbiBhIFBISSBhcmd1bWVudCBlbGVtZW50LCB3ZSBjYW4KKyAgICAgY2FsY3VsYXRlIGl0cyBpbmRleCBiYXNlZCBvbiBjYXN0aW5nIGl0IHRvIGFuIGFyZ3VtZW50LCBhbmQgcGVyZm9ybWluZworICAgICBwb2ludGVyIGFyaXRobWV0aWMuICAqLworCisgIHBoaSA9IFVTRV9TVE1UICh1c2UpOworCisgIGVsZW1lbnQgPSAoc3RydWN0IHBoaV9hcmdfZCAqKXVzZTsKKyAgcm9vdCA9IGdpbXBsZV9waGlfYXJnIChwaGksIDApOworICBpbmRleCA9IGVsZW1lbnQgLSByb290OworCisgIC8qIE1ha2Ugc3VyZSB0aGUgY2FsY3VsYXRpb24gZG9lc24ndCBoYXZlIGFueSBsZWZ0b3ZlciBieXRlcy4gIElmIGl0IGRvZXMsCisgICAgIHRoZW4gaW1tX3VzZSBpcyBsaWtlbHkgbm90IHRoZSBmaXJzdCBlbGVtZW50IGluIHBoaV9hcmdfZC4gICovCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCgoKGNoYXIgKillbGVtZW50IC0gKGNoYXIgKilyb290KQorCQkJJSBzaXplb2YgKHN0cnVjdCBwaGlfYXJnX2QpKSA9PSAwCisJCSAgICAgICAmJiBpbmRleCA8IGdpbXBsZV9waGlfY2FwYWNpdHkgKHBoaSkpOworCisgcmV0dXJuIGluZGV4OworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBUIChhc3N1bWVkIHRvIGJlIGEgREVDTCkgaXMgYSBnbG9iYWwgdmFyaWFibGUuCisgICBBIHZhcmlhYmxlIGlzIGNvbnNpZGVyZWQgZ2xvYmFsIGlmIGl0cyBzdG9yYWdlIGlzIG5vdCBhdXRvbWF0aWMuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lzX2dsb2JhbF92YXIgKGNvbnN0X3RyZWUgdCkKK3sKKyAgcmV0dXJuIChUUkVFX1NUQVRJQyAodCkgfHwgREVDTF9FWFRFUk5BTCAodCkpOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIFZBUiBtYXkgYmUgYWxpYXNlZC4gIEEgdmFyaWFibGUgaXMgY29uc2lkZXJlZCBhcworICAgbWF5YmUgYWxpYXNlZCBpZiBpdCBoYXMgaXRzIGFkZHJlc3MgdGFrZW4gYnkgdGhlIGxvY2FsIFRVCisgICBvciBwb3NzaWJseSBieSBhbm90aGVyIFRVIGFuZCBtaWdodCBiZSBtb2RpZmllZCB0aHJvdWdoIGEgcG9pbnRlci4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorbWF5X2JlX2FsaWFzZWQgKGNvbnN0X3RyZWUgdmFyKQoreworICByZXR1cm4gKFRSRUVfQ09ERSAodmFyKSAhPSBDT05TVF9ERUNMCisJICAmJiAhKChUUkVFX1NUQVRJQyAodmFyKSB8fCBUUkVFX1BVQkxJQyAodmFyKSB8fCBERUNMX0VYVEVSTkFMICh2YXIpKQorCSAgICAgICAmJiBUUkVFX1JFQURPTkxZICh2YXIpCisJICAgICAgICYmICFUWVBFX05FRURTX0NPTlNUUlVDVElORyAoVFJFRV9UWVBFICh2YXIpKSkKKwkgICYmIChUUkVFX1BVQkxJQyAodmFyKQorCSAgICAgIHx8IERFQ0xfRVhURVJOQUwgKHZhcikKKwkgICAgICB8fCBUUkVFX0FERFJFU1NBQkxFICh2YXIpKSk7Cit9CisKKworLyogUEhJIG5vZGVzIHNob3VsZCBjb250YWluIG9ubHkgc3NhX25hbWVzIGFuZCBpbnZhcmlhbnRzLiAgQSB0ZXN0CisgICBmb3Igc3NhX25hbWUgaXMgZGVmaW5pdGVseSBzaW1wbGVyOyBkb24ndCBsZXQgaW52YWxpZCBjb250ZW50cworICAgc2xpcCBpbiBpbiB0aGUgbWVhbnRpbWUuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BoaV9zc2FfbmFtZV9wIChjb25zdF90cmVlIHQpCit7CisgIGlmIChUUkVFX0NPREUgKHQpID09IFNTQV9OQU1FKQorICAgIHJldHVybiB0cnVlOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChpc19naW1wbGVfbWluX2ludmFyaWFudCAodCkpOworICByZXR1cm4gZmFsc2U7Cit9CisKKworLyogUmV0dXJucyB0aGUgbG9vcCBvZiB0aGUgc3RhdGVtZW50IFNUTVQuICAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsb29wICoKK2xvb3BfY29udGFpbmluZ19zdG10IChnaW1wbGUgc3RtdCkKK3sKKyAgYmFzaWNfYmxvY2sgYmIgPSBnaW1wbGVfYmIgKHN0bXQpOworICBpZiAoIWJiKQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiBiYi0+bG9vcF9mYXRoZXI7Cit9CisKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAqLworCisvKiBUaGUgZm9sbG93aW5nIHNldCBvZiByb3V0aW5lcyBhcmUgdXNlZCB0byBpdGVyYXRvciBvdmVyIHZhcmlvdXMgdHlwZSBvZgorICAgU1NBIG9wZXJhbmRzLiAgKi8KKworLyogUmV0dXJuIHRydWUgaWYgUFRSIGlzIGZpbmlzaGVkIGl0ZXJhdGluZy4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK29wX2l0ZXJfZG9uZSAoY29uc3Qgc3NhX29wX2l0ZXIgKnB0cikKK3sKKyAgcmV0dXJuIHB0ci0+ZG9uZTsKK30KKworLyogR2V0IHRoZSBuZXh0IGl0ZXJhdG9yIHVzZSB2YWx1ZSBmb3IgUFRSLiAgKi8KK3N0YXRpYyBpbmxpbmUgdXNlX29wZXJhbmRfcAorb3BfaXRlcl9uZXh0X3VzZSAoc3NhX29wX2l0ZXIgKnB0cikKK3sKKyAgdXNlX29wZXJhbmRfcCB1c2VfcDsKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAocHRyLT5pdGVyX3R5cGUgPT0gc3NhX29wX2l0ZXJfdXNlKTsKKyAgaWYgKHB0ci0+dXNlcykKKyAgICB7CisgICAgICB1c2VfcCA9IFVTRV9PUF9QVFIgKHB0ci0+dXNlcyk7CisgICAgICBwdHItPnVzZXMgPSBwdHItPnVzZXMtPm5leHQ7CisgICAgICByZXR1cm4gdXNlX3A7CisgICAgfQorICBpZiAocHRyLT5pIDwgcHRyLT5udW1vcHMpCisgICAgeworICAgICAgcmV0dXJuIFBISV9BUkdfREVGX1BUUiAocHRyLT5zdG10LCAocHRyLT5pKSsrKTsKKyAgICB9CisgIHB0ci0+ZG9uZSA9IHRydWU7CisgIHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7Cit9CisKKy8qIEdldCB0aGUgbmV4dCBpdGVyYXRvciBkZWYgdmFsdWUgZm9yIFBUUi4gICovCitzdGF0aWMgaW5saW5lIGRlZl9vcGVyYW5kX3AKK29wX2l0ZXJfbmV4dF9kZWYgKHNzYV9vcF9pdGVyICpwdHIpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKHB0ci0+aXRlcl90eXBlID09IHNzYV9vcF9pdGVyX2RlZik7CisgIGlmIChwdHItPmZsYWdzICYgU1NBX09QX1ZERUYpCisgICAgeworICAgICAgdHJlZSAqcDsKKyAgICAgIHB0ci0+ZmxhZ3MgJj0gflNTQV9PUF9WREVGOworICAgICAgcCA9IGdpbXBsZV92ZGVmX3B0ciAocHRyLT5zdG10KTsKKyAgICAgIGlmIChwICYmICpwKQorCXJldHVybiBwOworICAgIH0KKyAgaWYgKHB0ci0+ZmxhZ3MgJiBTU0FfT1BfREVGKQorICAgIHsKKyAgICAgIHdoaWxlIChwdHItPmkgPCBwdHItPm51bW9wcykKKwl7CisJICB0cmVlICp2YWwgPSBnaW1wbGVfb3BfcHRyIChwdHItPnN0bXQsIHB0ci0+aSk7CisJICBwdHItPmkrKzsKKwkgIGlmICgqdmFsKQorCSAgICB7CisJICAgICAgaWYgKFRSRUVfQ09ERSAoKnZhbCkgPT0gVFJFRV9MSVNUKQorCQl2YWwgPSAmVFJFRV9WQUxVRSAoKnZhbCk7CisJICAgICAgaWYgKFRSRUVfQ09ERSAoKnZhbCkgPT0gU1NBX05BTUUKKwkJICB8fCBpc19naW1wbGVfcmVnICgqdmFsKSkKKwkJcmV0dXJuIHZhbDsKKwkgICAgfQorCX0KKyAgICAgIHB0ci0+ZmxhZ3MgJj0gflNTQV9PUF9ERUY7CisgICAgfQorCisgIHB0ci0+ZG9uZSA9IHRydWU7CisgIHJldHVybiBOVUxMX0RFRl9PUEVSQU5EX1A7Cit9CisKKy8qIEdldCB0aGUgbmV4dCBpdGVyYXRvciB0cmVlIHZhbHVlIGZvciBQVFIuICAqLworc3RhdGljIGlubGluZSB0cmVlCitvcF9pdGVyX25leHRfdHJlZSAoc3NhX29wX2l0ZXIgKnB0cikKK3sKKyAgdHJlZSB2YWw7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKHB0ci0+aXRlcl90eXBlID09IHNzYV9vcF9pdGVyX3RyZWUpOworICBpZiAocHRyLT51c2VzKQorICAgIHsKKyAgICAgIHZhbCA9IFVTRV9PUCAocHRyLT51c2VzKTsKKyAgICAgIHB0ci0+dXNlcyA9IHB0ci0+dXNlcy0+bmV4dDsKKyAgICAgIHJldHVybiB2YWw7CisgICAgfQorICBpZiAocHRyLT5mbGFncyAmIFNTQV9PUF9WREVGKQorICAgIHsKKyAgICAgIHB0ci0+ZmxhZ3MgJj0gflNTQV9PUF9WREVGOworICAgICAgaWYgKCh2YWwgPSBnaW1wbGVfdmRlZiAocHRyLT5zdG10KSkpCisJcmV0dXJuIHZhbDsKKyAgICB9CisgIGlmIChwdHItPmZsYWdzICYgU1NBX09QX0RFRikKKyAgICB7CisgICAgICB3aGlsZSAocHRyLT5pIDwgcHRyLT5udW1vcHMpCisJeworCSAgdmFsID0gZ2ltcGxlX29wIChwdHItPnN0bXQsIHB0ci0+aSk7CisJICBwdHItPmkrKzsKKwkgIGlmICh2YWwpCisJICAgIHsKKwkgICAgICBpZiAoVFJFRV9DT0RFICh2YWwpID09IFRSRUVfTElTVCkKKwkJdmFsID0gVFJFRV9WQUxVRSAodmFsKTsKKwkgICAgICBpZiAoVFJFRV9DT0RFICh2YWwpID09IFNTQV9OQU1FCisJCSAgfHwgaXNfZ2ltcGxlX3JlZyAodmFsKSkKKwkJcmV0dXJuIHZhbDsKKwkgICAgfQorCX0KKyAgICAgIHB0ci0+ZmxhZ3MgJj0gflNTQV9PUF9ERUY7CisgICAgfQorCisgIHB0ci0+ZG9uZSA9IHRydWU7CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbnMgY2xlYXJzIHRoZSBpdGVyYXRvciBQVFIsIGFuZCBtYXJrcyBpdCBkb25lLiAgVGhpcyBpcyBub3JtYWxseQorICAgdXNlZCB0byBwcmV2ZW50IHdhcm5pbmdzIGluIHRoZSBjb21waWxlIGFib3V0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQKKyAgIGNvbXBvbmVudHMuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2NsZWFyX2FuZF9kb25lX3NzYV9pdGVyIChzc2Ffb3BfaXRlciAqcHRyKQoreworICBwdHItPmkgPSAwOworICBwdHItPm51bW9wcyA9IDA7CisgIHB0ci0+dXNlcyA9IE5VTEw7CisgIHB0ci0+aXRlcl90eXBlID0gc3NhX29wX2l0ZXJfbm9uZTsKKyAgcHRyLT5zdG10ID0gTlVMTDsKKyAgcHRyLT5kb25lID0gdHJ1ZTsKKyAgcHRyLT5mbGFncyA9IDA7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGl0ZXJhdG9yIFBUUiB0byB0aGUgdmlydHVhbCBkZWZzIGluIFNUTVQuICAqLworc3RhdGljIGlubGluZSB2b2lkCitvcF9pdGVyX2luaXQgKHNzYV9vcF9pdGVyICpwdHIsIGdpbXBsZSBzdG10LCBpbnQgZmxhZ3MpCit7CisgIC8qIFBISSBub2RlcyByZXF1aXJlIGEgZGlmZmVyZW50IGl0ZXJhdG9yIGluaXRpYWxpemF0aW9uIHBhdGguICBXZQorICAgICBkbyBub3Qgc3VwcG9ydCBpdGVyYXRpbmcgb3ZlciB2aXJ0dWFsIGRlZnMgb3IgdXNlcyB3aXRob3V0CisgICAgIGl0ZXJhdGluZyBvdmVyIGRlZnMgb3IgdXNlcyBhdCB0aGUgc2FtZSB0aW1lLiAgKi8KKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoZ2ltcGxlX2NvZGUgKHN0bXQpICE9IEdJTVBMRV9QSEkKKwkJICAgICAgICYmICghKGZsYWdzICYgU1NBX09QX1ZERUYpIHx8IChmbGFncyAmIFNTQV9PUF9ERUYpKQorCQkgICAgICAgJiYgKCEoZmxhZ3MgJiBTU0FfT1BfVlVTRSkgfHwgKGZsYWdzICYgU1NBX09QX1VTRSkpKTsKKyAgcHRyLT5udW1vcHMgPSAwOworICBpZiAoZmxhZ3MgJiAoU1NBX09QX0RFRiB8IFNTQV9PUF9WREVGKSkKKyAgICB7CisgICAgICBzd2l0Y2ggKGdpbXBsZV9jb2RlIChzdG10KSkKKwl7CisJICBjYXNlIEdJTVBMRV9BU1NJR046CisJICBjYXNlIEdJTVBMRV9DQUxMOgorCSAgICBwdHItPm51bW9wcyA9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSBHSU1QTEVfQVNNOgorCSAgICBwdHItPm51bW9wcyA9IGdpbXBsZV9hc21fbm91dHB1dHMgKHN0bXQpOworCSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisJICAgIHB0ci0+bnVtb3BzID0gMDsKKwkgICAgZmxhZ3MgJj0gfihTU0FfT1BfREVGIHwgU1NBX09QX1ZERUYpOworCSAgICBicmVhazsKKwl9CisgICAgfQorICBwdHItPnVzZXMgPSAoZmxhZ3MgJiAoU1NBX09QX1VTRXxTU0FfT1BfVlVTRSkpID8gZ2ltcGxlX3VzZV9vcHMgKHN0bXQpIDogTlVMTDsKKyAgaWYgKCEoZmxhZ3MgJiBTU0FfT1BfVlVTRSkKKyAgICAgICYmIHB0ci0+dXNlcworICAgICAgJiYgZ2ltcGxlX3Z1c2UgKHN0bXQpICE9IE5VTExfVFJFRSkKKyAgICBwdHItPnVzZXMgPSBwdHItPnVzZXMtPm5leHQ7CisgIHB0ci0+ZG9uZSA9IGZhbHNlOworICBwdHItPmkgPSAwOworCisgIHB0ci0+c3RtdCA9IHN0bXQ7CisgIHB0ci0+ZmxhZ3MgPSBmbGFnczsKK30KKworLyogSW5pdGlhbGl6ZSBpdGVyYXRvciBQVFIgdG8gdGhlIHVzZSBvcGVyYW5kcyBpbiBTVE1UIGJhc2VkIG9uIEZMQUdTLiBSZXR1cm4KKyAgIHRoZSBmaXJzdCB1c2UuICAqLworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitvcF9pdGVyX2luaXRfdXNlIChzc2Ffb3BfaXRlciAqcHRyLCBnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgoZmxhZ3MgJiBTU0FfT1BfQUxMX0RFRlMpID09IDAKKwkJICAgICAgICYmIChmbGFncyAmIFNTQV9PUF9VU0UpKTsKKyAgb3BfaXRlcl9pbml0IChwdHIsIHN0bXQsIGZsYWdzKTsKKyAgcHRyLT5pdGVyX3R5cGUgPSBzc2Ffb3BfaXRlcl91c2U7CisgIHJldHVybiBvcF9pdGVyX25leHRfdXNlIChwdHIpOworfQorCisvKiBJbml0aWFsaXplIGl0ZXJhdG9yIFBUUiB0byB0aGUgZGVmIG9wZXJhbmRzIGluIFNUTVQgYmFzZWQgb24gRkxBR1MuIFJldHVybgorICAgdGhlIGZpcnN0IGRlZi4gICovCitzdGF0aWMgaW5saW5lIGRlZl9vcGVyYW5kX3AKK29wX2l0ZXJfaW5pdF9kZWYgKHNzYV9vcF9pdGVyICpwdHIsIGdpbXBsZSBzdG10LCBpbnQgZmxhZ3MpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKChmbGFncyAmIFNTQV9PUF9BTExfVVNFUykgPT0gMAorCQkgICAgICAgJiYgKGZsYWdzICYgU1NBX09QX0RFRikpOworICBvcF9pdGVyX2luaXQgKHB0ciwgc3RtdCwgZmxhZ3MpOworICBwdHItPml0ZXJfdHlwZSA9IHNzYV9vcF9pdGVyX2RlZjsKKyAgcmV0dXJuIG9wX2l0ZXJfbmV4dF9kZWYgKHB0cik7Cit9CisKKy8qIEluaXRpYWxpemUgaXRlcmF0b3IgUFRSIHRvIHRoZSBvcGVyYW5kcyBpbiBTVE1UIGJhc2VkIG9uIEZMQUdTLiBSZXR1cm4KKyAgIHRoZSBmaXJzdCBvcGVyYW5kIGFzIGEgdHJlZS4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK29wX2l0ZXJfaW5pdF90cmVlIChzc2Ffb3BfaXRlciAqcHRyLCBnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICBvcF9pdGVyX2luaXQgKHB0ciwgc3RtdCwgZmxhZ3MpOworICBwdHItPml0ZXJfdHlwZSA9IHNzYV9vcF9pdGVyX3RyZWU7CisgIHJldHVybiBvcF9pdGVyX25leHRfdHJlZSAocHRyKTsKK30KKworCisvKiBJZiB0aGVyZSBpcyBhIHNpbmdsZSBvcGVyYW5kIGluIFNUTVQgbWF0Y2hpbmcgRkxBR1MsIHJldHVybiBpdC4gIE90aGVyd2lzZQorICAgcmV0dXJuIE5VTEwuICAqLworc3RhdGljIGlubGluZSB0cmVlCitzaW5nbGVfc3NhX3RyZWVfb3BlcmFuZCAoZ2ltcGxlIHN0bXQsIGludCBmbGFncykKK3sKKyAgdHJlZSB2YXI7CisgIHNzYV9vcF9pdGVyIGl0ZXI7CisKKyAgdmFyID0gb3BfaXRlcl9pbml0X3RyZWUgKCZpdGVyLCBzdG10LCBmbGFncyk7CisgIGlmIChvcF9pdGVyX2RvbmUgKCZpdGVyKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworICBvcF9pdGVyX25leHRfdHJlZSAoJml0ZXIpOworICBpZiAob3BfaXRlcl9kb25lICgmaXRlcikpCisgICAgcmV0dXJuIHZhcjsKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworCisvKiBJZiB0aGVyZSBpcyBhIHNpbmdsZSBvcGVyYW5kIGluIFNUTVQgbWF0Y2hpbmcgRkxBR1MsIHJldHVybiBpdC4gIE90aGVyd2lzZQorICAgcmV0dXJuIE5VTEwuICAqLworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitzaW5nbGVfc3NhX3VzZV9vcGVyYW5kIChnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICB1c2Vfb3BlcmFuZF9wIHZhcjsKKyAgc3NhX29wX2l0ZXIgaXRlcjsKKworICB2YXIgPSBvcF9pdGVyX2luaXRfdXNlICgmaXRlciwgc3RtdCwgZmxhZ3MpOworICBpZiAob3BfaXRlcl9kb25lICgmaXRlcikpCisgICAgcmV0dXJuIE5VTExfVVNFX09QRVJBTkRfUDsKKyAgb3BfaXRlcl9uZXh0X3VzZSAoJml0ZXIpOworICBpZiAob3BfaXRlcl9kb25lICgmaXRlcikpCisgICAgcmV0dXJuIHZhcjsKKyAgcmV0dXJuIE5VTExfVVNFX09QRVJBTkRfUDsKK30KKworCisKKy8qIElmIHRoZXJlIGlzIGEgc2luZ2xlIG9wZXJhbmQgaW4gU1RNVCBtYXRjaGluZyBGTEFHUywgcmV0dXJuIGl0LiAgT3RoZXJ3aXNlCisgICByZXR1cm4gTlVMTC4gICovCitzdGF0aWMgaW5saW5lIGRlZl9vcGVyYW5kX3AKK3NpbmdsZV9zc2FfZGVmX29wZXJhbmQgKGdpbXBsZSBzdG10LCBpbnQgZmxhZ3MpCit7CisgIGRlZl9vcGVyYW5kX3AgdmFyOworICBzc2Ffb3BfaXRlciBpdGVyOworCisgIHZhciA9IG9wX2l0ZXJfaW5pdF9kZWYgKCZpdGVyLCBzdG10LCBmbGFncyk7CisgIGlmIChvcF9pdGVyX2RvbmUgKCZpdGVyKSkKKyAgICByZXR1cm4gTlVMTF9ERUZfT1BFUkFORF9QOworICBvcF9pdGVyX25leHRfZGVmICgmaXRlcik7CisgIGlmIChvcF9pdGVyX2RvbmUgKCZpdGVyKSkKKyAgICByZXR1cm4gdmFyOworICByZXR1cm4gTlVMTF9ERUZfT1BFUkFORF9QOworfQorCisKKy8qIFJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSB6ZXJvIG9wZXJhbmRzIGluIFNUTVQgbWF0Y2hpbmcgdGhlIHR5cGUKKyAgIGdpdmVuIGluIEZMQUdTLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoremVyb19zc2Ffb3BlcmFuZHMgKGdpbXBsZSBzdG10LCBpbnQgZmxhZ3MpCit7CisgIHNzYV9vcF9pdGVyIGl0ZXI7CisKKyAgb3BfaXRlcl9pbml0X3RyZWUgKCZpdGVyLCBzdG10LCBmbGFncyk7CisgIHJldHVybiBvcF9pdGVyX2RvbmUgKCZpdGVyKTsKK30KKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBvcGVyYW5kcyBtYXRjaGluZyBGTEFHUyBpbiBTVE1ULiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitudW1fc3NhX29wZXJhbmRzIChnaW1wbGUgc3RtdCwgaW50IGZsYWdzKQoreworICBzc2Ffb3BfaXRlciBpdGVyOworICB0cmVlIHQ7CisgIGludCBudW0gPSAwOworCisgIGdjY19jaGVja2luZ19hc3NlcnQgKGdpbXBsZV9jb2RlIChzdG10KSAhPSBHSU1QTEVfUEhJKTsKKyAgRk9SX0VBQ0hfU1NBX1RSRUVfT1BFUkFORCAodCwgc3RtdCwgaXRlciwgZmxhZ3MpCisgICAgbnVtKys7CisgIHJldHVybiBudW07Cit9CisKK3N0YXRpYyBpbmxpbmUgdXNlX29wZXJhbmRfcAorb3BfaXRlcl9pbml0X3BoaXVzZSAoc3NhX29wX2l0ZXIgKnB0ciwgZ2ltcGxlIHBoaSwgaW50IGZsYWdzKTsKKworLyogRGVsaW5rIGFsbCBpbW1lZGlhdGVfdXNlIGluZm9ybWF0aW9uIGZvciBTVE1ULiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZGVsaW5rX3N0bXRfaW1tX3VzZSAoZ2ltcGxlIHN0bXQpCit7CisgICBzc2Ffb3BfaXRlciBpdGVyOworICAgdXNlX29wZXJhbmRfcCB1c2VfcDsKKworICAgaWYgKHNzYV9vcGVyYW5kc19hY3RpdmUgKGNmdW4pKQorICAgICBGT1JfRUFDSF9QSElfT1JfU1RNVF9VU0UgKHVzZV9wLCBzdG10LCBpdGVyLCBTU0FfT1BfQUxMX1VTRVMpCisgICAgICAgZGVsaW5rX2ltbV91c2UgKHVzZV9wKTsKK30KKworCisvKiBJZiB0aGVyZSBpcyBhIHNpbmdsZSBERUYgaW4gdGhlIFBISSBub2RlIHdoaWNoIG1hdGNoZXMgRkxBRywgcmV0dXJuIGl0LgorICAgT3RoZXJ3aXNlIHJldHVybiBOVUxMX0RFRl9PUEVSQU5EX1AuICAqLworc3RhdGljIGlubGluZSB0cmVlCitzaW5nbGVfcGhpX2RlZiAoZ2ltcGxlIHN0bXQsIGludCBmbGFncykKK3sKKyAgdHJlZSBkZWYgPSBQSElfUkVTVUxUIChzdG10KTsKKyAgaWYgKChmbGFncyAmIFNTQV9PUF9ERUYpICYmIGlzX2dpbXBsZV9yZWcgKGRlZikpCisgICAgcmV0dXJuIGRlZjsKKyAgaWYgKChmbGFncyAmIFNTQV9PUF9WSVJUVUFMX0RFRlMpICYmICFpc19naW1wbGVfcmVnIChkZWYpKQorICAgIHJldHVybiBkZWY7CisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGl0ZXJhdG9yIFBUUiBmb3IgdXNlcyBtYXRjaGluZyBGTEFHUyBpbiBQSEkuICBGTEFHUyBzaG91bGQKKyAgIGJlIGVpdGhlciBTU0FfT1BfVVNFUyBvciBTU0FfT1BfVklSVFVBTF9VU0VTLiAgKi8KK3N0YXRpYyBpbmxpbmUgdXNlX29wZXJhbmRfcAorb3BfaXRlcl9pbml0X3BoaXVzZSAoc3NhX29wX2l0ZXIgKnB0ciwgZ2ltcGxlIHBoaSwgaW50IGZsYWdzKQoreworICB0cmVlIHBoaV9kZWYgPSBnaW1wbGVfcGhpX3Jlc3VsdCAocGhpKTsKKyAgaW50IGNvbXA7CisKKyAgY2xlYXJfYW5kX2RvbmVfc3NhX2l0ZXIgKHB0cik7CisgIHB0ci0+ZG9uZSA9IGZhbHNlOworCisgIGdjY19jaGVja2luZ19hc3NlcnQgKChmbGFncyAmIChTU0FfT1BfVVNFIHwgU1NBX09QX1ZJUlRVQUxfVVNFUykpICE9IDApOworCisgIGNvbXAgPSAoaXNfZ2ltcGxlX3JlZyAocGhpX2RlZikgPyBTU0FfT1BfVVNFIDogU1NBX09QX1ZJUlRVQUxfVVNFUyk7CisKKyAgLyogSWYgdGhlIFBISSBub2RlIGRvZXNuJ3QgdGhlIG9wZXJhbmQgdHlwZSB3ZSBjYXJlIGFib3V0LCB3ZSdyZSBkb25lLiAgKi8KKyAgaWYgKChmbGFncyAmIGNvbXApID09IDApCisgICAgeworICAgICAgcHRyLT5kb25lID0gdHJ1ZTsKKyAgICAgIHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7CisgICAgfQorCisgIHB0ci0+c3RtdCA9IHBoaTsKKyAgcHRyLT5udW1vcHMgPSBnaW1wbGVfcGhpX251bV9hcmdzIChwaGkpOworICBwdHItPml0ZXJfdHlwZSA9IHNzYV9vcF9pdGVyX3VzZTsKKyAgcHRyLT5mbGFncyA9IGZsYWdzOworICByZXR1cm4gb3BfaXRlcl9uZXh0X3VzZSAocHRyKTsKK30KKworCisvKiBTdGFydCBhbiBpdGVyYXRvciBmb3IgYSBQSEkgZGVmaW5pdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgZGVmX29wZXJhbmRfcAorb3BfaXRlcl9pbml0X3BoaWRlZiAoc3NhX29wX2l0ZXIgKnB0ciwgZ2ltcGxlIHBoaSwgaW50IGZsYWdzKQoreworICB0cmVlIHBoaV9kZWYgPSBQSElfUkVTVUxUIChwaGkpOworICBpbnQgY29tcDsKKworICBjbGVhcl9hbmRfZG9uZV9zc2FfaXRlciAocHRyKTsKKyAgcHRyLT5kb25lID0gZmFsc2U7CisKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoKGZsYWdzICYgKFNTQV9PUF9ERUYgfCBTU0FfT1BfVklSVFVBTF9ERUZTKSkgIT0gMCk7CisKKyAgY29tcCA9IChpc19naW1wbGVfcmVnIChwaGlfZGVmKSA/IFNTQV9PUF9ERUYgOiBTU0FfT1BfVklSVFVBTF9ERUZTKTsKKworICAvKiBJZiB0aGUgUEhJIG5vZGUgZG9lc24ndCBoYXZlIHRoZSBvcGVyYW5kIHR5cGUgd2UgY2FyZSBhYm91dCwKKyAgICAgd2UncmUgZG9uZS4gICovCisgIGlmICgoZmxhZ3MgJiBjb21wKSA9PSAwKQorICAgIHsKKyAgICAgIHB0ci0+ZG9uZSA9IHRydWU7CisgICAgICByZXR1cm4gTlVMTF9ERUZfT1BFUkFORF9QOworICAgIH0KKworICBwdHItPml0ZXJfdHlwZSA9IHNzYV9vcF9pdGVyX2RlZjsKKyAgLyogVGhlIGZpcnN0IGNhbGwgdG8gb3BfaXRlcl9uZXh0X2RlZiB3aWxsIHRlcm1pbmF0ZSB0aGUgaXRlcmF0b3Igc2luY2UKKyAgICAgYWxsIHRoZSBmaWVsZHMgYXJlIE5VTEwuICBTaW1wbHkgcmV0dXJuIHRoZSByZXN1bHQgaGVyZSBhcyB0aGUgZmlyc3QgYW5kCisgICAgIHRoZXJlZm9yZSBvbmx5IHJlc3VsdC4gICovCisgIHJldHVybiBQSElfUkVTVUxUX1BUUiAocGhpKTsKK30KKworLyogUmV0dXJuIHRydWUgaXMgSU1NIGhhcyByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltbWVkaWF0ZSB1c2Ugc3RtdCBsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitlbmRfaW1tX3VzZV9zdG10X3AgKGNvbnN0IGltbV91c2VfaXRlcmF0b3IgKmltbSkKK3sKKyAgcmV0dXJuIChpbW0tPmltbV91c2UgPT0gaW1tLT5lbmRfcCk7Cit9CisKKy8qIEZpbmlzaGVkIHRoZSB0cmF2ZXJzZSBvZiBhbiBpbW1lZGlhdGUgdXNlIHN0bXQgbGlzdCBJTU0gYnkgcmVtb3ZpbmcgdGhlCisgICBwbGFjZWhvbGRlciBub2RlIGZyb20gdGhlIGxpc3QuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2VuZF9pbW1fdXNlX3N0bXRfdHJhdmVyc2UgKGltbV91c2VfaXRlcmF0b3IgKmltbSkKK3sKKyAgZGVsaW5rX2ltbV91c2UgKCYoaW1tLT5pdGVyX25vZGUpKTsKK30KKworLyogSW1tZWRpYXRlIHVzZSB0cmF2ZXJzYWwgb2YgdXNlcyB3aXRoaW4gYSBzdG10IHJlcXVpcmUgdGhhdCBhbGwgdGhlCisgICB1c2VzIG9uIGEgc3RtdCBiZSBzZXF1ZW50aWFsbHkgbGlzdGVkLiAgVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gYnVpbGQgdXAKKyAgIHRoaXMgc2VxdWVudGlhbCBsaXN0IGJ5IGFkZGluZyBVU0VfUCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpc3QKKyAgIGN1cnJlbnRseSBkZWxpbWl0ZWQgYnkgSEVBRCBhbmQgTEFTVF9QLiAgVGhlIG5ldyBMQVNUX1AgdmFsdWUgaXMKKyAgIHJldHVybmVkLiAgKi8KKworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCittb3ZlX3VzZV9hZnRlcl9oZWFkICh1c2Vfb3BlcmFuZF9wIHVzZV9wLCB1c2Vfb3BlcmFuZF9wIGhlYWQsCisJCSAgICAgIHVzZV9vcGVyYW5kX3AgbGFzdF9wKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChVU0VfRlJPTV9QVFIgKHVzZV9wKSA9PSBVU0VfRlJPTV9QVFIgKGhlYWQpKTsKKyAgLyogU2tpcCBoZWFkIHdoZW4gd2UgZmluZCBpdC4gICovCisgIGlmICh1c2VfcCAhPSBoZWFkKQorICAgIHsKKyAgICAgIC8qIElmIHVzZV9wIGlzIGFscmVhZHkgbGlua2VkIGluIGFmdGVyIGxhc3RfcCwgY29udGludWUuICAqLworICAgICAgaWYgKGxhc3RfcC0+bmV4dCA9PSB1c2VfcCkKKwlsYXN0X3AgPSB1c2VfcDsKKyAgICAgIGVsc2UKKwl7CisJICAvKiBEZWxpbmsgZnJvbSBjdXJyZW50IGxvY2F0aW9uLCBhbmQgbGluayBpbiBhdCBsYXN0X3AuICAqLworCSAgZGVsaW5rX2ltbV91c2UgKHVzZV9wKTsKKwkgIGxpbmtfaW1tX3VzZV90b19saXN0ICh1c2VfcCwgbGFzdF9wKTsKKwkgIGxhc3RfcCA9IHVzZV9wOworCX0KKyAgICB9CisgIHJldHVybiBsYXN0X3A7Cit9CisKKworLyogVGhpcyByb3V0aW5lIHdpbGwgcmVsaW5rIGFsbCB1c2VzIHdpdGggdGhlIHNhbWUgc3RtdCBhcyBIRUFEIGludG8gdGhlIGxpc3QKKyAgIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBIRUFEIGZvciBpdGVyYXRvciBJTU0uICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpbmtfdXNlX3N0bXRzX2FmdGVyICh1c2Vfb3BlcmFuZF9wIGhlYWQsIGltbV91c2VfaXRlcmF0b3IgKmltbSkKK3sKKyAgdXNlX29wZXJhbmRfcCB1c2VfcDsKKyAgdXNlX29wZXJhbmRfcCBsYXN0X3AgPSBoZWFkOworICBnaW1wbGUgaGVhZF9zdG10ID0gVVNFX1NUTVQgKGhlYWQpOworICB0cmVlIHVzZSA9IFVTRV9GUk9NX1BUUiAoaGVhZCk7CisgIHNzYV9vcF9pdGVyIG9wX2l0ZXI7CisgIGludCBmbGFnOworCisgIC8qIE9ubHkgbG9vayBhdCB2aXJ0dWFsIG9yIHJlYWwgdXNlcywgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIEhFQUQuICAqLworICBmbGFnID0gKGlzX2dpbXBsZV9yZWcgKHVzZSkgPyBTU0FfT1BfVVNFIDogU1NBX09QX1ZJUlRVQUxfVVNFUyk7CisKKyAgaWYgKGdpbXBsZV9jb2RlIChoZWFkX3N0bXQpID09IEdJTVBMRV9QSEkpCisgICAgeworICAgICAgRk9SX0VBQ0hfUEhJX0FSRyAodXNlX3AsIGhlYWRfc3RtdCwgb3BfaXRlciwgZmxhZykKKwlpZiAoVVNFX0ZST01fUFRSICh1c2VfcCkgPT0gdXNlKQorCSAgbGFzdF9wID0gbW92ZV91c2VfYWZ0ZXJfaGVhZCAodXNlX3AsIGhlYWQsIGxhc3RfcCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaWYgKGZsYWcgPT0gU1NBX09QX1VTRSkKKwl7CisJICBGT1JfRUFDSF9TU0FfVVNFX09QRVJBTkQgKHVzZV9wLCBoZWFkX3N0bXQsIG9wX2l0ZXIsIGZsYWcpCisJICAgIGlmIChVU0VfRlJPTV9QVFIgKHVzZV9wKSA9PSB1c2UpCisJICAgICAgbGFzdF9wID0gbW92ZV91c2VfYWZ0ZXJfaGVhZCAodXNlX3AsIGhlYWQsIGxhc3RfcCk7CisJfQorICAgICAgZWxzZSBpZiAoKHVzZV9wID0gZ2ltcGxlX3Z1c2Vfb3AgKGhlYWRfc3RtdCkpICE9IE5VTExfVVNFX09QRVJBTkRfUCkKKwl7CisJICBpZiAoVVNFX0ZST01fUFRSICh1c2VfcCkgPT0gdXNlKQorCSAgICBsYXN0X3AgPSBtb3ZlX3VzZV9hZnRlcl9oZWFkICh1c2VfcCwgaGVhZCwgbGFzdF9wKTsKKwl9CisgICAgfQorICAvKiBMaW5rIGl0ZXIgbm9kZSBpbiBhZnRlciBsYXN0X3AuICAqLworICBpZiAoaW1tLT5pdGVyX25vZGUucHJldiAhPSBOVUxMKQorICAgIGRlbGlua19pbW1fdXNlICgmaW1tLT5pdGVyX25vZGUpOworICBsaW5rX2ltbV91c2VfdG9fbGlzdCAoJihpbW0tPml0ZXJfbm9kZSksIGxhc3RfcCk7Cit9CisKKy8qIEluaXRpYWxpemUgSU1NIHRvIHRyYXZlcnNlIG92ZXIgdXNlcyBvZiBWQVIuICBSZXR1cm4gdGhlIGZpcnN0IHN0YXRlbWVudC4gICovCitzdGF0aWMgaW5saW5lIGdpbXBsZQorZmlyc3RfaW1tX3VzZV9zdG10IChpbW1fdXNlX2l0ZXJhdG9yICppbW0sIHRyZWUgdmFyKQoreworICBpbW0tPmVuZF9wID0gJihTU0FfTkFNRV9JTU1fVVNFX05PREUgKHZhcikpOworICBpbW0tPmltbV91c2UgPSBpbW0tPmVuZF9wLT5uZXh0OworICBpbW0tPm5leHRfaW1tX25hbWUgPSBOVUxMX1VTRV9PUEVSQU5EX1A7CisKKyAgLyogaXRlcl9ub2RlIGlzIHVzZWQgYXMgYSBtYXJrZXIgd2l0aGluIHRoZSBpbW1lZGlhdGUgdXNlIGxpc3QgdG8gaW5kaWNhdGUKKyAgICAgd2hlcmUgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdG10J3MgdXNlcyBhcmUuICBJbml0aWFsaXplIGl0IHRvIE5VTEwKKyAgICAgc3RtdCBhbmQgdXNlLCB3aGljaCBpbmRpY2F0ZXMgYSBtYXJrZXIgbm9kZS4gICovCisgIGltbS0+aXRlcl9ub2RlLnByZXYgPSBOVUxMX1VTRV9PUEVSQU5EX1A7CisgIGltbS0+aXRlcl9ub2RlLm5leHQgPSBOVUxMX1VTRV9PUEVSQU5EX1A7CisgIGltbS0+aXRlcl9ub2RlLmxvYy5zdG10ID0gTlVMTDsKKyAgaW1tLT5pdGVyX25vZGUudXNlID0gTlVMTDsKKworICBpZiAoZW5kX2ltbV91c2Vfc3RtdF9wIChpbW0pKQorICAgIHJldHVybiBOVUxMOworCisgIGxpbmtfdXNlX3N0bXRzX2FmdGVyIChpbW0tPmltbV91c2UsIGltbSk7CisKKyAgcmV0dXJuIFVTRV9TVE1UIChpbW0tPmltbV91c2UpOworfQorCisvKiBCdW1wIElNTSB0byB0aGUgbmV4dCBzdG10IHdoaWNoIGhhcyBhIHVzZSBvZiB2YXIuICAqLworCitzdGF0aWMgaW5saW5lIGdpbXBsZQorbmV4dF9pbW1fdXNlX3N0bXQgKGltbV91c2VfaXRlcmF0b3IgKmltbSkKK3sKKyAgaW1tLT5pbW1fdXNlID0gaW1tLT5pdGVyX25vZGUubmV4dDsKKyAgaWYgKGVuZF9pbW1fdXNlX3N0bXRfcCAoaW1tKSkKKyAgICB7CisgICAgICBpZiAoaW1tLT5pdGVyX25vZGUucHJldiAhPSBOVUxMKQorCWRlbGlua19pbW1fdXNlICgmaW1tLT5pdGVyX25vZGUpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIGxpbmtfdXNlX3N0bXRzX2FmdGVyIChpbW0tPmltbV91c2UsIGltbSk7CisgIHJldHVybiBVU0VfU1RNVCAoaW1tLT5pbW1fdXNlKTsKK30KKworLyogVGhpcyByb3V0aW5lIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCB1c2Ugb24gdGhlIHN0bXQgSU1NIGN1cnJlbnRseSByZWZlcnMKKyAgIHRvLiAgKi8KKworc3RhdGljIGlubGluZSB1c2Vfb3BlcmFuZF9wCitmaXJzdF9pbW1fdXNlX29uX3N0bXQgKGltbV91c2VfaXRlcmF0b3IgKmltbSkKK3sKKyAgaW1tLT5uZXh0X2ltbV9uYW1lID0gaW1tLT5pbW1fdXNlLT5uZXh0OworICByZXR1cm4gaW1tLT5pbW1fdXNlOworfQorCisvKiAgUmV0dXJuIFRSVUUgaWYgdGhlIGxhc3QgdXNlIG9uIHRoZSBzdG10IElNTSByZWZlcnMgdG8gaGFzIGJlZW4gdmlzaXRlZC4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAorZW5kX2ltbV91c2Vfb25fc3RtdF9wIChjb25zdCBpbW1fdXNlX2l0ZXJhdG9yICppbW0pCit7CisgIHJldHVybiAoaW1tLT5pbW1fdXNlID09ICYoaW1tLT5pdGVyX25vZGUpKTsKK30KKworLyogQnVtcCB0byB0aGUgbmV4dCB1c2Ugb24gdGhlIHN0bXQgSU1NIHJlZmVycyB0bywgcmV0dXJuIE5VTEwgaWYgZG9uZS4gICovCisKK3N0YXRpYyBpbmxpbmUgdXNlX29wZXJhbmRfcAorbmV4dF9pbW1fdXNlX29uX3N0bXQgKGltbV91c2VfaXRlcmF0b3IgKmltbSkKK3sKKyAgaW1tLT5pbW1fdXNlID0gaW1tLT5uZXh0X2ltbV9uYW1lOworICBpZiAoZW5kX2ltbV91c2Vfb25fc3RtdF9wIChpbW0pKQorICAgIHJldHVybiBOVUxMX1VTRV9PUEVSQU5EX1A7CisgIGVsc2UKKyAgICB7CisgICAgICBpbW0tPm5leHRfaW1tX25hbWUgPSBpbW0tPmltbV91c2UtPm5leHQ7CisgICAgICByZXR1cm4gaW1tLT5pbW1fdXNlOworICAgIH0KK30KKworLyogUmV0dXJuIHRydWUgaWYgVkFSIGNhbm5vdCBiZSBtb2RpZmllZCBieSB0aGUgcHJvZ3JhbS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAordW5tb2RpZmlhYmxlX3Zhcl9wIChjb25zdF90cmVlIHZhcikKK3sKKyAgaWYgKFRSRUVfQ09ERSAodmFyKSA9PSBTU0FfTkFNRSkKKyAgICB2YXIgPSBTU0FfTkFNRV9WQVIgKHZhcik7CisKKyAgcmV0dXJuIFRSRUVfUkVBRE9OTFkgKHZhcikgJiYgKFRSRUVfU1RBVElDICh2YXIpIHx8IERFQ0xfRVhURVJOQUwgKHZhcikpOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBSRUYsIGEgaGFuZGxlZCBjb21wb25lbnQgcmVmZXJlbmNlLCBoYXMgYW4gQVJSQVlfUkVGCisgICBzb21ld2hlcmUgaW4gaXQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK3JlZl9jb250YWluc19hcnJheV9yZWYgKGNvbnN0X3RyZWUgcmVmKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChoYW5kbGVkX2NvbXBvbmVudF9wIChyZWYpKTsKKworICBkbyB7CisgICAgaWYgKFRSRUVfQ09ERSAocmVmKSA9PSBBUlJBWV9SRUYpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZWYgPSBUUkVFX09QRVJBTkQgKHJlZiwgMCk7CisgIH0gd2hpbGUgKGhhbmRsZWRfY29tcG9uZW50X3AgKHJlZikpOworCisgIHJldHVybiBmYWxzZTsKK30KKworLyogUmV0dXJuIHRydWUgaWYgUkVGIGhhcyBhbiBWSUVXX0NPTlZFUlRfRVhQUiBzb21ld2hlcmUgaW4gaXQuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbnRhaW5zX3ZpZXdfY29udmVydF9leHByX3AgKGNvbnN0X3RyZWUgcmVmKQoreworICB3aGlsZSAoaGFuZGxlZF9jb21wb25lbnRfcCAocmVmKSkKKyAgICB7CisgICAgICBpZiAoVFJFRV9DT0RFIChyZWYpID09IFZJRVdfQ09OVkVSVF9FWFBSKQorCXJldHVybiB0cnVlOworICAgICAgcmVmID0gVFJFRV9PUEVSQU5EIChyZWYsIDApOworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFJldHVybiB0cnVlLCBpZiB0aGUgdHdvIHJhbmdlcyBbUE9TMSwgU0laRTFdIGFuZCBbUE9TMiwgU0laRTJdCisgICBvdmVybGFwLiAgU0laRTEgYW5kL29yIFNJWkUyIGNhbiBiZSAodW5zaWduZWQpLTEgaW4gd2hpY2ggY2FzZSB0aGUKKyAgIHJhbmdlIGlzIG9wZW4tZW5kZWQuICBPdGhlcndpc2UgcmV0dXJuIGZhbHNlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCityYW5nZXNfb3ZlcmxhcF9wICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHBvczEsCisJCSAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBzaXplMSwKKwkJICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHBvczIsCisJCSAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBzaXplMikKK3sKKyAgaWYgKHBvczEgPj0gcG9zMgorICAgICAgJiYgKHNpemUyID09ICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKS0xCisJICB8fCBwb3MxIDwgKHBvczIgKyBzaXplMikpKQorICAgIHJldHVybiB0cnVlOworICBpZiAocG9zMiA+PSBwb3MxCisgICAgICAmJiAoc2l6ZTEgPT0gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpLTEKKwkgIHx8IHBvczIgPCAocG9zMSArIHNpemUxKSkpCisgICAgcmV0dXJuIHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBBY2Nlc3NvciB0byB0cmVlLXNzYS1vcGVyYW5kcy5jIGNhY2hlcy4gICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzc2Ffb3BlcmFuZHMgKgorZ2ltcGxlX3NzYV9vcGVyYW5kcyAoY29uc3Qgc3RydWN0IGZ1bmN0aW9uICpmdW4pCit7CisgIHJldHVybiAmZnVuLT5naW1wbGVfZGYtPnNzYV9vcGVyYW5kczsKK30KKworLyogR2l2ZW4gYW4gZWRnZV92YXJfbWFwIFYsIHJldHVybiB0aGUgUEhJIGFyZyBkZWZpbml0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCityZWRpcmVjdF9lZGdlX3Zhcl9tYXBfZGVmIChlZGdlX3Zhcl9tYXAgKnYpCit7CisgIHJldHVybiB2LT5kZWY7Cit9CisKKy8qIEdpdmVuIGFuIGVkZ2VfdmFyX21hcCBWLCByZXR1cm4gdGhlIFBISSByZXN1bHQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK3JlZGlyZWN0X2VkZ2VfdmFyX21hcF9yZXN1bHQgKGVkZ2VfdmFyX21hcCAqdikKK3sKKyAgcmV0dXJuIHYtPnJlc3VsdDsKK30KKworLyogR2l2ZW4gYW4gZWRnZV92YXJfbWFwIFYsIHJldHVybiB0aGUgUEhJIGFyZyBsb2NhdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgc291cmNlX2xvY2F0aW9uCityZWRpcmVjdF9lZGdlX3Zhcl9tYXBfbG9jYXRpb24gKGVkZ2VfdmFyX21hcCAqdikKK3sKKyAgcmV0dXJuIHYtPmxvY3VzOworfQorCisKKy8qIFJldHVybiBhbiBTU0FfTkFNRSBub2RlIGZvciB2YXJpYWJsZSBWQVIgZGVmaW5lZCBpbiBzdGF0ZW1lbnQgU1RNVAorICAgaW4gZnVuY3Rpb24gY2Z1bi4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorbWFrZV9zc2FfbmFtZSAodHJlZSB2YXIsIGdpbXBsZSBzdG10KQoreworICByZXR1cm4gbWFrZV9zc2FfbmFtZV9mbiAoY2Z1biwgdmFyLCBzdG10KTsKK30KKworLyogUmV0dXJuIGFuIFNTQV9OQU1FIG5vZGUgdXNpbmcgdGhlIHRlbXBsYXRlIFNTQSBuYW1lIE5BTUUgZGVmaW5lZCBpbgorICAgc3RhdGVtZW50IFNUTVQgaW4gZnVuY3Rpb24gY2Z1bi4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorY29weV9zc2FfbmFtZSAodHJlZSB2YXIsIGdpbXBsZSBzdG10KQoreworICByZXR1cm4gY29weV9zc2FfbmFtZV9mbiAoY2Z1biwgdmFyLCBzdG10KTsKK30KKworLyogIENyZWF0ZXMgYSBkdXBsaWNhdGUgb2YgYSBTU0EgbmFtZSBOQU1FIHRvYmUgZGVmaW5lZCBieSBzdGF0ZW1lbnQgU1RNVAorICAgIGluIGZ1bmN0aW9uIGNmdW4uICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2R1cGxpY2F0ZV9zc2FfbmFtZSAodHJlZSB2YXIsIGdpbXBsZSBzdG10KQoreworICByZXR1cm4gZHVwbGljYXRlX3NzYV9uYW1lX2ZuIChjZnVuLCB2YXIsIHN0bXQpOworfQorCisvKiBSZXR1cm4gYW4gYW5vbnltb3VzIFNTQV9OQU1FIG5vZGUgZm9yIHR5cGUgVFlQRSBkZWZpbmVkIGluIHN0YXRlbWVudCBTVE1UCisgICBpbiBmdW5jdGlvbiBjZnVuLiAgQXJyYW5nZSBzbyB0aGF0IGl0IHVzZXMgTkFNRSBpbiBkdW1wcy4gICovCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorbWFrZV90ZW1wX3NzYV9uYW1lICh0cmVlIHR5cGUsIGdpbXBsZSBzdG10LCBjb25zdCBjaGFyICpuYW1lKQoreworICB0cmVlIHNzYV9uYW1lOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChUWVBFX1AgKHR5cGUpKTsKKyAgc3NhX25hbWUgPSBtYWtlX3NzYV9uYW1lX2ZuIChjZnVuLCB0eXBlLCBzdG10KTsKKyAgU0VUX1NTQV9OQU1FX1ZBUl9PUl9JREVOVElGSUVSIChzc2FfbmFtZSwgZ2V0X2lkZW50aWZpZXIgKG5hbWUpKTsKKyAgcmV0dXJuIHNzYV9uYW1lOworfQorCisvKiBSZXR1cm5zIHRoZSBiYXNlIG9iamVjdCBhbmQgYSBjb25zdGFudCBCSVRTX1BFUl9VTklUIG9mZnNldCBpbiAqUE9GRlNFVCB0aGF0CisgICBkZW5vdGVzIHRoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgYWNjZXNzIEVYUC4KKyAgIFJldHVybnMgTlVMTF9UUkVFIGlmIHRoZSBvZmZzZXQgaXMgbm90IGNvbnN0YW50IG9yIGFueSBjb21wb25lbnQKKyAgIGlzIG5vdCBCSVRTX1BFUl9VTklULWFsaWduZWQuCisgICBWQUxVRUlaRSBpZiBub24tTlVMTCBpcyB1c2VkIHRvIHZhbHVlaXplIFNTQSBuYW1lcy4gIEl0IHNob3VsZCByZXR1cm4KKyAgIGl0cyBhcmd1bWVudCBvciBhIGNvbnN0YW50IGlmIHRoZSBhcmd1bWVudCBpcyBrbm93biB0byBiZSBjb25zdGFudC4gICovCisvKiA/Pz8gVGhpcyBpcyBhIHN0YXRpYyBpbmxpbmUgaGVyZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgdGhlIGluZGlyZWN0IGNhbGxzCisgICB0byBWQUxVRUlaRS4gIEJ1dCBpcyB0aGlzIG92ZXJoZWFkIHJlYWxseSB0aGF0IHNpZ25pZmljYW50PyAgQW5kIHNob3VsZCB3ZQorICAgcGVyaGFwcyBqdXN0IHJlbHkgb24gV0hPUFIgdG8gc3BlY2lhbGl6ZSB0aGUgZnVuY3Rpb24/ICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dldF9hZGRyX2Jhc2VfYW5kX3VuaXRfb2Zmc2V0XzEgKHRyZWUgZXhwLCBIT1NUX1dJREVfSU5UICpwb2Zmc2V0LAorCQkJCSB0cmVlICgqdmFsdWVpemUpICh0cmVlKSkKK3sKKyAgSE9TVF9XSURFX0lOVCBieXRlX29mZnNldCA9IDA7CisKKyAgLyogQ29tcHV0ZSBjdW11bGF0aXZlIGJ5dGUtb2Zmc2V0IGZvciBuZXN0ZWQgY29tcG9uZW50LXJlZnMgYW5kIGFycmF5LXJlZnMsCisgICAgIGFuZCBmaW5kIHRoZSB1bHRpbWF0ZSBjb250YWluaW5nIG9iamVjdC4gICovCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIHN3aXRjaCAoVFJFRV9DT0RFIChleHApKQorCXsKKwljYXNlIEJJVF9GSUVMRF9SRUY6CisJICByZXR1cm4gTlVMTF9UUkVFOworCisJY2FzZSBDT01QT05FTlRfUkVGOgorCSAgeworCSAgICB0cmVlIGZpZWxkID0gVFJFRV9PUEVSQU5EIChleHAsIDEpOworCSAgICB0cmVlIHRoaXNfb2Zmc2V0ID0gY29tcG9uZW50X3JlZl9maWVsZF9vZmZzZXQgKGV4cCk7CisJICAgIEhPU1RfV0lERV9JTlQgaHRoaXNfb2Zmc2V0OworCisJICAgIGlmICghdGhpc19vZmZzZXQKKwkJfHwgVFJFRV9DT0RFICh0aGlzX29mZnNldCkgIT0gSU5URUdFUl9DU1QKKwkJfHwgKFRSRUVfSU5UX0NTVF9MT1cgKERFQ0xfRklFTERfQklUX09GRlNFVCAoZmllbGQpKQorCQkgICAgJSBCSVRTX1BFUl9VTklUKSkKKwkgICAgICByZXR1cm4gTlVMTF9UUkVFOworCisJICAgIGh0aGlzX29mZnNldCA9IFRSRUVfSU5UX0NTVF9MT1cgKHRoaXNfb2Zmc2V0KTsKKwkgICAgaHRoaXNfb2Zmc2V0ICs9IChUUkVFX0lOVF9DU1RfTE9XIChERUNMX0ZJRUxEX0JJVF9PRkZTRVQgKGZpZWxkKSkKKwkJCSAgICAgLyBCSVRTX1BFUl9VTklUKTsKKwkgICAgYnl0ZV9vZmZzZXQgKz0gaHRoaXNfb2Zmc2V0OworCSAgfQorCSAgYnJlYWs7CisKKwljYXNlIEFSUkFZX1JFRjoKKwljYXNlIEFSUkFZX1JBTkdFX1JFRjoKKwkgIHsKKwkgICAgdHJlZSBpbmRleCA9IFRSRUVfT1BFUkFORCAoZXhwLCAxKTsKKwkgICAgdHJlZSBsb3dfYm91bmQsIHVuaXRfc2l6ZTsKKworCSAgICBpZiAodmFsdWVpemUKKwkJJiYgVFJFRV9DT0RFIChpbmRleCkgPT0gU1NBX05BTUUpCisJICAgICAgaW5kZXggPSAoKnZhbHVlaXplKSAoaW5kZXgpOworCisJICAgIC8qIElmIHRoZSByZXN1bHRpbmcgYml0LW9mZnNldCBpcyBjb25zdGFudCwgdHJhY2sgaXQuICAqLworCSAgICBpZiAoVFJFRV9DT0RFIChpbmRleCkgPT0gSU5URUdFUl9DU1QKKwkJJiYgKGxvd19ib3VuZCA9IGFycmF5X3JlZl9sb3dfYm91bmQgKGV4cCksCisJCSAgICBUUkVFX0NPREUgKGxvd19ib3VuZCkgPT0gSU5URUdFUl9DU1QpCisJCSYmICh1bml0X3NpemUgPSBhcnJheV9yZWZfZWxlbWVudF9zaXplIChleHApLAorCQkgICAgVFJFRV9DT0RFICh1bml0X3NpemUpID09IElOVEVHRVJfQ1NUKSkKKwkgICAgICB7CisJCUhPU1RfV0lERV9JTlQgaGluZGV4ID0gVFJFRV9JTlRfQ1NUX0xPVyAoaW5kZXgpOworCisJCWhpbmRleCAtPSBUUkVFX0lOVF9DU1RfTE9XIChsb3dfYm91bmQpOworCQloaW5kZXggKj0gVFJFRV9JTlRfQ1NUX0xPVyAodW5pdF9zaXplKTsKKwkJYnl0ZV9vZmZzZXQgKz0gaGluZGV4OworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHJldHVybiBOVUxMX1RSRUU7CisJICB9CisJICBicmVhazsKKworCWNhc2UgUkVBTFBBUlRfRVhQUjoKKwkgIGJyZWFrOworCisJY2FzZSBJTUFHUEFSVF9FWFBSOgorCSAgYnl0ZV9vZmZzZXQgKz0gVFJFRV9JTlRfQ1NUX0xPVyAoVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoZXhwKSkpOworCSAgYnJlYWs7CisKKwljYXNlIFZJRVdfQ09OVkVSVF9FWFBSOgorCSAgYnJlYWs7CisKKwljYXNlIE1FTV9SRUY6CisJICB7CisJICAgIHRyZWUgYmFzZSA9IFRSRUVfT1BFUkFORCAoZXhwLCAwKTsKKwkgICAgaWYgKHZhbHVlaXplCisJCSYmIFRSRUVfQ09ERSAoYmFzZSkgPT0gU1NBX05BTUUpCisJICAgICAgYmFzZSA9ICgqdmFsdWVpemUpIChiYXNlKTsKKworCSAgICAvKiBIYW5kIGJhY2sgdGhlIGRlY2wgZm9yIE1FTVsmZGVjbCwgb2ZmXS4gICovCisJICAgIGlmIChUUkVFX0NPREUgKGJhc2UpID09IEFERFJfRVhQUikKKwkgICAgICB7CisJCWlmICghaW50ZWdlcl96ZXJvcCAoVFJFRV9PUEVSQU5EIChleHAsIDEpKSkKKwkJICB7CisJCSAgICBkb3VibGVfaW50IG9mZiA9IG1lbV9yZWZfb2Zmc2V0IChleHApOworCQkgICAgZ2NjX2Fzc2VydCAob2ZmLmhpZ2ggPT0gLTEgfHwgb2ZmLmhpZ2ggPT0gMCk7CisJCSAgICBieXRlX29mZnNldCArPSBvZmYudG9fc2h3aSAoKTsKKwkJICB9CisJCWV4cCA9IFRSRUVfT1BFUkFORCAoYmFzZSwgMCk7CisJICAgICAgfQorCSAgICBnb3RvIGRvbmU7CisJICB9CisKKwljYXNlIFRBUkdFVF9NRU1fUkVGOgorCSAgeworCSAgICB0cmVlIGJhc2UgPSBUUkVFX09QRVJBTkQgKGV4cCwgMCk7CisJICAgIGlmICh2YWx1ZWl6ZQorCQkmJiBUUkVFX0NPREUgKGJhc2UpID09IFNTQV9OQU1FKQorCSAgICAgIGJhc2UgPSAoKnZhbHVlaXplKSAoYmFzZSk7CisKKwkgICAgLyogSGFuZCBiYWNrIHRoZSBkZWNsIGZvciBNRU1bJmRlY2wsIG9mZl0uICAqLworCSAgICBpZiAoVFJFRV9DT0RFIChiYXNlKSA9PSBBRERSX0VYUFIpCisJICAgICAgeworCQlpZiAoVE1SX0lOREVYIChleHApIHx8IFRNUl9JTkRFWDIgKGV4cCkpCisJCSAgcmV0dXJuIE5VTExfVFJFRTsKKwkJaWYgKCFpbnRlZ2VyX3plcm9wIChUTVJfT0ZGU0VUIChleHApKSkKKwkJICB7CisJCSAgICBkb3VibGVfaW50IG9mZiA9IG1lbV9yZWZfb2Zmc2V0IChleHApOworCQkgICAgZ2NjX2Fzc2VydCAob2ZmLmhpZ2ggPT0gLTEgfHwgb2ZmLmhpZ2ggPT0gMCk7CisJCSAgICBieXRlX29mZnNldCArPSBvZmYudG9fc2h3aSAoKTsKKwkJICB9CisJCWV4cCA9IFRSRUVfT1BFUkFORCAoYmFzZSwgMCk7CisJICAgICAgfQorCSAgICBnb3RvIGRvbmU7CisJICB9CisKKwlkZWZhdWx0OgorCSAgZ290byBkb25lOworCX0KKworICAgICAgZXhwID0gVFJFRV9PUEVSQU5EIChleHAsIDApOworICAgIH0KK2RvbmU6CisKKyAgKnBvZmZzZXQgPSBieXRlX29mZnNldDsKKyAgcmV0dXJuIGV4cDsKK30KKworI2VuZGlmIC8qIF9UUkVFX0ZMT1dfSU5MSU5FX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1mbG93LmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1mbG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1ODRiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLWZsb3cuaApAQCAtMCwwICsxLDgwNCBAQAorLyogRGF0YSBhbmQgQ29udHJvbCBGbG93IEFuYWx5c2lzIGZvciBUcmVlcy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgRGllZ28gTm92aWxsbyA8ZG5vdmlsbG9AcmVkaGF0LmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1RSRUVfRkxPV19ICisjZGVmaW5lIF9UUkVFX0ZMT1dfSCAxCisKKyNpbmNsdWRlICJiaXRtYXAuaCIKKyNpbmNsdWRlICJzYml0bWFwLmgiCisjaW5jbHVkZSAiYmFzaWMtYmxvY2suaCIKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAiZ2ltcGxlLmgiCisjaW5jbHVkZSAidHJlZS1zc2Etb3BlcmFuZHMuaCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKKyNpbmNsdWRlICJpcGEtcmVmZXJlbmNlLmgiCisjaW5jbHVkZSAidHJlZS1zc2EtYWxpYXMuaCIKKworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIG1hcCBhIGdpbXBsZSBzdGF0ZW1lbnQgdG8gYSBsYWJlbCwKKyAgIG9yIGxpc3Qgb2YgbGFiZWxzIHRvIHJlcHJlc2VudCB0cmFuc2FjdGlvbiByZXN0YXJ0LiAgKi8KKworc3RydWN0IEdUWSgoKSkgdG1fcmVzdGFydF9ub2RlIHsKKyAgZ2ltcGxlIHN0bXQ7CisgIHRyZWUgbGFiZWxfb3JfbGlzdDsKK307CisKKy8qIEdpbXBsZSBkYXRhZmxvdyBkYXRhc3RydWN0dXJlLiBBbGwgcHVibGljbHkgYXZhaWxhYmxlIGZpZWxkcyBzaGFsbCBoYXZlCisgICBnaW1wbGVfIGFjY2Vzc29yIGRlZmluZWQgaW4gdHJlZS1mbG93LWlubGluZS5oLCBhbGwgcHVibGljbHkgbW9kaWZpYWJsZQorICAgZmllbGRzIHNob3VsZCBoYXZlIGdpbXBsZV9zZXQgYWNjZXNzb3IuICAqLworc3RydWN0IEdUWSgoKSkgZ2ltcGxlX2RmIHsKKyAgLyogQSB2ZWN0b3Igb2YgYWxsIHRoZSBub3JldHVybiBjYWxscyBwYXNzZWQgdG8gbW9kaWZ5X3N0bXQuCisgICAgIGNsZWFudXBfY29udHJvbF9mbG93IHVzZXMgaXQgdG8gZGV0ZWN0IGNhc2VzIHdoZXJlIGEgbWlkLWJsb2NrCisgICAgIGluZGlyZWN0IGNhbGwgaGFzIGJlZW4gdHVybmVkIGludG8gYSBub3JldHVybiBjYWxsLiAgV2hlbiB0aGlzCisgICAgIGhhcHBlbnMsIGFsbCB0aGUgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoZSBjYWxsIGFyZSBubyBsb25nZXIKKyAgICAgcmVhY2hhYmxlIGFuZCBtdXN0IGJlIGRlbGV0ZWQgYXMgZGVhZC4gICovCisgIHZlYzxnaW1wbGUsIHZhX2djPiAqbW9kaWZpZWRfbm9yZXR1cm5fY2FsbHM7CisKKyAgLyogQXJyYXkgb2YgYWxsIFNTQV9OQU1FcyB1c2VkIGluIHRoZSBmdW5jdGlvbi4gICovCisgIHZlYzx0cmVlLCB2YV9nYz4gKnNzYV9uYW1lczsKKworICAvKiBBcnRpZmljaWFsIHZhcmlhYmxlIHVzZWQgZm9yIHRoZSB2aXJ0dWFsIG9wZXJhbmQgRlVEIGNoYWluLiAgKi8KKyAgdHJlZSB2b3A7CisKKyAgLyogVGhlIFBUQSBzb2x1dGlvbiBmb3IgdGhlIEVTQ0FQRUQgYXJ0aWZpY2lhbCB2YXJpYWJsZS4gICovCisgIHN0cnVjdCBwdF9zb2x1dGlvbiBlc2NhcGVkOworCisgIC8qIEEgbWFwIG9mIGRlY2xzIHRvIGFydGlmaWNpYWwgc3NhLW5hbWVzIHRoYXQgcG9pbnQgdG8gdGhlIHBhcnRpdGlvbgorICAgICBvZiB0aGUgZGVjbC4gICovCisgIHN0cnVjdCBwb2ludGVyX21hcF90ICogR1RZKChza2lwKCIiKSkpIGRlY2xzX3RvX3BvaW50ZXJzOworCisgIC8qIEZyZWUgbGlzdCBvZiBTU0FfTkFNRXMuICAqLworICB2ZWM8dHJlZSwgdmFfZ2M+ICpmcmVlX3NzYW5hbWVzOworCisgIC8qIEhhc2h0YWJsZSBob2xkaW5nIGRlZmluaXRpb24gZm9yIHN5bWJvbC4gIElmIHRoaXMgZmllbGQgaXMgbm90IE5VTEwsIGl0CisgICAgIG1lYW5zIHRoYXQgdGhlIGZpcnN0IHJlZmVyZW5jZSB0byB0aGlzIHZhcmlhYmxlIGluIHRoZSBmdW5jdGlvbiBpcyBhCisgICAgIFVTRSBvciBhIFZVU0UuICBJbiB0aG9zZSBjYXNlcywgdGhlIFNTQSByZW5hbWVyIGNyZWF0ZXMgYW4gU1NBIG5hbWUKKyAgICAgZm9yIHRoaXMgdmFyaWFibGUgd2l0aCBhbiBlbXB0eSBkZWZpbmluZyBzdGF0ZW1lbnQuICAqLworICBodGFiX3QgR1RZKChwYXJhbV9pcyAodW5pb24gdHJlZV9ub2RlKSkpIGRlZmF1bHRfZGVmczsKKworICAvKiBUcnVlIGlmIHRoZXJlIGFyZSBhbnkgc3ltYm9scyB0aGF0IG5lZWQgdG8gYmUgcmVuYW1lZC4gICovCisgIHVuc2lnbmVkIGludCBzc2FfcmVuYW1pbmdfbmVlZGVkIDogMTsKKworICAvKiBUcnVlIGlmIGFsbCB2aXJ0dWFsIG9wZXJhbmRzIG5lZWQgdG8gYmUgcmVuYW1lZC4gICovCisgIHVuc2lnbmVkIGludCByZW5hbWVfdm9wcyA6IDE7CisKKyAgLyogVHJ1ZSBpZiB0aGUgY29kZSBpcyBpbiBzc2EgZm9ybS4gICovCisgIHVuc2lnbmVkIGludCBpbl9zc2FfcCA6IDE7CisKKyAgLyogVHJ1ZSBpZiBJUEEgcG9pbnRzLXRvIGluZm9ybWF0aW9uIHdhcyBjb21wdXRlZCBmb3IgdGhpcyBmdW5jdGlvbi4gICovCisgIHVuc2lnbmVkIGludCBpcGFfcHRhIDogMTsKKworICBzdHJ1Y3Qgc3NhX29wZXJhbmRzIHNzYV9vcGVyYW5kczsKKworICAvKiBNYXAgZ2ltcGxlIHN0bXQgdG8gdHJlZSBsYWJlbCAob3IgbGlzdCBvZiBsYWJlbHMpIGZvciB0cmFuc2FjdGlvbgorICAgICByZXN0YXJ0IGFuZCBhYm9ydC4gICovCisgIGh0YWJfdCBHVFkgKChwYXJhbV9pcyAoc3RydWN0IHRtX3Jlc3RhcnRfbm9kZSkpKSB0bV9yZXN0YXJ0OworfTsKKworLyogQWNjZXNzb3JzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4gIEdlbmVyaWMgY29kZSBzaG91bGQgdXNlIGFic3RyYWN0aW9uCisgICBwcm92aWRlZCBieSB0cmVlLWZsb3ctaW5saW5lLmggb3Igc3BlY2lmaWMgbW9kdWxlcy4gICovCisjZGVmaW5lIEZSRUVfU1NBTkFNRVMoZnVuKSAoZnVuKS0+Z2ltcGxlX2RmLT5mcmVlX3NzYW5hbWVzCisjZGVmaW5lIFNTQU5BTUVTKGZ1bikgKGZ1biktPmdpbXBsZV9kZi0+c3NhX25hbWVzCisjZGVmaW5lIE1PRElGSUVEX05PUkVUVVJOX0NBTExTKGZ1bikgKGZ1biktPmdpbXBsZV9kZi0+bW9kaWZpZWRfbm9yZXR1cm5fY2FsbHMKKyNkZWZpbmUgREVGQVVMVF9ERUZTKGZ1bikgKGZ1biktPmdpbXBsZV9kZi0+ZGVmYXVsdF9kZWZzCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGh0YWJfdCBodGFiOworICBQVFIgKnNsb3Q7CisgIFBUUiAqbGltaXQ7Cit9IGh0YWJfaXRlcmF0b3I7CisKKy8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgaGFzaHRhYmxlIEhUQUIsIHVzaW5nIGh0YWJfaXRlcmF0b3IgSVRFUiwKKyAgIHN0b3JpbmcgZWFjaCBlbGVtZW50IGluIFJFU1VMVCwgd2hpY2ggaXMgb2YgdHlwZSBUWVBFLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfSFRBQl9FTEVNRU5UKEhUQUIsIFJFU1VMVCwgVFlQRSwgSVRFUikgXAorICBmb3IgKFJFU1VMVCA9IChUWVBFKSBmaXJzdF9odGFiX2VsZW1lbnQgKCYoSVRFUiksIChIVEFCKSk7IFwKKwkhZW5kX2h0YWJfcCAoJihJVEVSKSk7IFwKKwlSRVNVTFQgPSAoVFlQRSkgbmV4dF9odGFiX2VsZW1lbnQgKCYoSVRFUikpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkgICAgICBBdHRyaWJ1dGVzIGZvciBTU0FfTkFNRXMuCisKKyAgTk9URTogVGhlc2Ugc3RydWN0dXJlcyBhcmUgc3RvcmVkIGluIHN0cnVjdCB0cmVlX3NzYV9uYW1lCisgIGJ1dCBhcmUgb25seSB1c2VkIGJ5IHRoZSB0cmVlIG9wdGltaXplcnMsIHNvIGl0IG1ha2VzIGJldHRlciBzZW5zZQorICB0byBkZWNsYXJlIHRoZW0gaGVyZSB0byBhdm9pZCByZWNvbXBpbGluZyB1bnJlbGF0ZWQgZmlsZXMgd2hlbgorICBtYWtpbmcgY2hhbmdlcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEFsaWFzaW5nIGluZm9ybWF0aW9uIGZvciBTU0FfTkFNRXMgcmVwcmVzZW50aW5nIHBvaW50ZXIgdmFyaWFibGVzLiAgKi8KKworc3RydWN0IEdUWSgoKSkgcHRyX2luZm9fZGVmCit7CisgIC8qIFRoZSBwb2ludHMtdG8gc29sdXRpb24uICAqLworICBzdHJ1Y3QgcHRfc29sdXRpb24gcHQ7CisKKyAgLyogQWxpZ25tZW50IGFuZCBtaXNhbGlnbm1lbnQgb2YgdGhlIHBvaW50ZXIgaW4gYnl0ZXMuICBUb2dldGhlcgorICAgICBhbGlnbiBhbmQgbWlzYWxpZ24gc3BlY2lmeSBsb3cga25vd24gYml0cyBvZiB0aGUgcG9pbnRlci4KKyAgICAgcHRyICYgKGFsaWduIC0gMSkgPT0gbWlzYWxpZ24uICAqLworCisgIC8qIFdoZW4ga25vd24sIHRoaXMgaXMgdGhlIHBvd2VyLW9mLXR3byBieXRlIGFsaWdubWVudCBvZiB0aGUgb2JqZWN0IHRoaXMKKyAgICAgcG9pbnRlciBwb2ludHMgaW50by4gIFRoaXMgaXMgdXN1YWxseSBERUNMX0FMSUdOX1VOSVQgZm9yIGRlY2xzIGFuZAorICAgICBNQUxMT0NfQUJJX0FMSUdOTUVOVCBmb3IgYWxsb2NhdGVkIHN0b3JhZ2UuICBXaGVuIHRoZSBhbGlnbm1lbnQgaXMgbm90CisgICAgIGtub3duLCBpdCBpcyB6ZXJvLiAgRG8gbm90IGFjY2VzcyBkaXJlY3RseSBidXQgdXNlIGZ1bmN0aW9ucworICAgICBnZXRfcHRyX2luZm9fYWxpZ25tZW50LCBzZXRfcHRyX2luZm9fYWxpZ25tZW50LAorICAgICBtYXJrX3B0cl9pbmZvX2FsaWdubWVudF91bmtub3duIGFuZCBzaW1pbGFyLiAgKi8KKyAgdW5zaWduZWQgaW50IGFsaWduOworCisgIC8qIFdoZW4gYWxpZ25tZW50IGlzIGtub3duLCB0aGUgYnl0ZSBvZmZzZXQgdGhpcyBwb2ludGVyIGRpZmZlcnMgZnJvbSB0aGUKKyAgICAgYWJvdmUgYWxpZ25tZW50LiAgQWNjZXNzIG9ubHkgdGhyb3VnaCB0aGUgc2FtZSBoZWxwZXIgZnVuY3Rpb25zIGFzIGFsaWduCisgICAgIGFib3ZlLiAgKi8KKyAgdW5zaWduZWQgaW50IG1pc2FsaWduOworfTsKKworCisvKiBJdCBpcyBhZHZhbnRhZ2VvdXMgdG8gYXZvaWQgdGhpbmdzIGxpa2UgbGlmZSBhbmFseXNpcyBmb3IgdmFyaWFibGVzIHdoaWNoCisgICBkbyBub3QgbmVlZCBQSEkgbm9kZXMuICBUaGlzIGVudW0gZGVzY3JpYmVzIHdoZXRoZXIgb3Igbm90IGEgcGFydGljdWxhcgorICAgdmFyaWFibGUgbWF5IG5lZWQgYSBQSEkgbm9kZS4gICovCisKK2VudW0gbmVlZF9waGlfc3RhdGUgeworICAvKiBUaGlzIGlzIHRoZSBkZWZhdWx0LiAgSWYgd2UgYXJlIHN0aWxsIGluIHRoaXMgc3RhdGUgYWZ0ZXIgZmluZGluZworICAgICBhbGwgdGhlIGRlZmluaXRpb24gYW5kIHVzZSBzaXRlcywgdGhlbiB3ZSB3aWxsIGFzc3VtZSB0aGUgdmFyaWFibGUKKyAgICAgbmVlZHMgUEhJIG5vZGVzLiAgVGhpcyBpcyBwcm9iYWJseSBhbiBvdmVybHkgY29uc2VydmF0aXZlIGFzc3VtcHRpb24uICAqLworICBORUVEX1BISV9TVEFURV9VTktOT1dOLAorCisgIC8qIFRoaXMgc3RhdGUgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBzZWVuIG9uZSBvciBtb3JlIHNldHMgb2YgdGhlCisgICAgIHZhcmlhYmxlIGluIGEgc2luZ2xlIGJhc2ljIGJsb2NrIGFuZCB0aGF0IHRoZSBzZXRzIGRvbWluYXRlIGFsbAorICAgICB1c2VzIHNlZW4gc28gZmFyLiAgSWYgYWZ0ZXIgZmluZGluZyBhbGwgZGVmaW5pdGlvbiBhbmQgdXNlIHNpdGVzCisgICAgIHdlIGFyZSBzdGlsbCBpbiB0aGlzIHN0YXRlLCB0aGVuIHRoZSB2YXJpYWJsZSBkb2VzIG5vdCBuZWVkIGFueQorICAgICBQSEkgbm9kZXMuICAqLworICBORUVEX1BISV9TVEFURV9OTywKKworICAvKiBUaGlzIHN0YXRlIGluZGljYXRlcyB0aGF0IHdlIGhhdmUgZWl0aGVyIHNlZW4gbXVsdGlwbGUgZGVmaW5pdGlvbnMgb2YKKyAgICAgdGhlIHZhcmlhYmxlIGluIG11bHRpcGxlIGJsb2Nrcywgb3IgdGhhdCB3ZSBlbmNvdW50ZXJlZCBhIHVzZSBpbiBhCisgICAgIGJsb2NrIHRoYXQgd2FzIG5vdCBkb21pbmF0ZWQgYnkgdGhlIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHNldChzKSBvZgorICAgICB0aGlzIHZhcmlhYmxlLiAgVGhpcyB2YXJpYWJsZSBpcyBhc3N1bWVkIHRvIG5lZWQgUEhJIG5vZGVzLiAgKi8KKyAgTkVFRF9QSElfU1RBVEVfTUFZQkUKK307CisKKworLyogSW1tZWRpYXRlIHVzZSBsaXN0cyBhcmUgdXNlZCB0byBkaXJlY3RseSBhY2Nlc3MgYWxsIHVzZXMgZm9yIGFuIFNTQQorICAgbmFtZSBhbmQgZ2V0IHBvaW50ZXJzIHRvIHRoZSBzdGF0ZW1lbnQgZm9yIGVhY2ggdXNlLgorCisgICBUaGUgc3RydWN0dXJlIHNzYV91c2Vfb3BlcmFuZF9kIGNvbnNpc3RzIG9mIFBSRVYgYW5kIE5FWFQgcG9pbnRlcnMKKyAgIHRvIG1haW50YWluIHRoZSBsaXN0LiAgQSBVU0UgcG9pbnRlciwgd2hpY2ggcG9pbnRzIHRvIGFkZHJlc3Mgd2hlcmUKKyAgIHRoZSB1c2UgaXMgbG9jYXRlZCBhbmQgYSBMT0MgcG9pbnRlciB3aGljaCBjYW4gcG9pbnQgdG8gdGhlCisgICBzdGF0ZW1lbnQgd2hlcmUgdGhlIHVzZSBpcyBsb2NhdGVkLCBvciwgaW4gdGhlIGNhc2Ugb2YgdGhlIHJvb3QKKyAgIG5vZGUsIGl0IHBvaW50cyB0byB0aGUgU1NBIG5hbWUgaXRzZWxmLgorCisgICBUaGUgbGlzdCBpcyBhbmNob3JlZCBieSBhbiBvY2N1cnJlbmNlIG9mIHNzYV9vcGVyYW5kX2QgKmluKiB0aGUKKyAgIHNzYV9uYW1lIG5vZGUgaXRzZWxmIChuYW1lZCAnaW1tX3VzZXMnKS4gIFRoaXMgbm9kZSBpcyB1bmlxdWVseQorICAgaWRlbnRpZmllZCBieSBoYXZpbmcgYSBOVUxMIFVTRSBwb2ludGVyLiBhbmQgdGhlIExPQyBwb2ludGVyCisgICBwb2ludGluZyBiYWNrIHRvIHRoZSBzc2FfbmFtZSBub2RlIGl0c2VsZi4gIFRoaXMgbm9kZSBmb3JtcyB0aGUKKyAgIGJhc2UgZm9yIGEgY2lyY3VsYXIgbGlzdCwgYW5kIGluaXRpYWxseSB0aGlzIGlzIHRoZSBvbmx5IG5vZGUgaW4KKyAgIHRoZSBsaXN0LgorCisgICBGYXN0IGl0ZXJhdGlvbiBhbGxvd3MgZWFjaCB1c2UgdG8gYmUgZXhhbWluZWQsIGJ1dCBkb2VzIG5vdCBhbGxvdworICAgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIHVzZXMgb3Igc3RtdHMuCisKKyAgIE5vcm1hbCBpdGVyYXRpb24gYWxsb3dzIGluc2VydGlvbiwgZGVsZXRpb24sIGFuZCBtb2RpZmljYXRpb24uIHRoZQorICAgaXRlcmF0b3IgbWFuYWdlcyB0aGlzIGJ5IGluc2VydGluZyBhIG1hcmtlciBub2RlIGludG8gdGhlIGxpc3QKKyAgIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgbm9kZSBjdXJyZW50bHkgYmVpbmcgZXhhbWluZWQgaW4gdGhlIGxpc3QuCisgICB0aGlzIG1hcmtlciBub2RlIGlzIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgaGF2aW5nIG51bGwgc3RtdCAqYW5kKiBhCisgICBudWxsIHVzZSBwb2ludGVyLgorCisgICBXaGVuIGl0ZXJhdGluZyB0byB0aGUgbmV4dCB1c2UsIHRoZSBpdGVyYXRpb24gcm91dGluZXMgY2hlY2sgdG8gc2VlCisgICBpZiB0aGUgbm9kZSBhZnRlciB0aGUgbWFya2VyIGhhcyBjaGFuZ2VkLiBpZiBpdCBoYXMsIHRoZW4gdGhlIG5vZGUKKyAgIGZvbGxvd2luZyB0aGUgbWFya2VyIGlzIG5vdyB0aGUgbmV4dCBvbmUgdG8gYmUgdmlzaXRlZC4gaWYgbm90LCB0aGUKKyAgIG1hcmtlciBub2RlIGlzIG1vdmVkIHBhc3QgdGhhdCBub2RlIGluIHRoZSBsaXN0ICh2aXN1YWxpemUgaXQgYXMKKyAgIGJ1bXBpbmcgdGhlIG1hcmtlciBub2RlIHRocm91Z2ggdGhlIGxpc3QpLiAgdGhpcyBjb250aW51ZXMgdW50aWwKKyAgIHRoZSBtYXJrZXIgbm9kZSBpcyBtb3ZlZCB0byB0aGUgb3JpZ2luYWwgYW5jaG9yIHBvc2l0aW9uLiB0aGUKKyAgIG1hcmtlciBub2RlIGlzIHRoZW4gcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LgorCisgICBJZiBpdGVyYXRpb24gaXMgaGFsdGVkIGVhcmx5LCB0aGUgbWFya2VyIG5vZGUgbXVzdCBiZSByZW1vdmVkIGZyb20KKyAgIHRoZSBsaXN0IGJlZm9yZSBjb250aW51aW5nLiAgKi8KK3R5cGVkZWYgc3RydWN0IGltbWVkaWF0ZV91c2VfaXRlcmF0b3JfZAoreworICAvKiBUaGlzIGlzIHRoZSBjdXJyZW50IHVzZSB0aGUgaXRlcmF0b3IgaXMgcHJvY2Vzc2luZy4gICovCisgIHNzYV91c2Vfb3BlcmFuZF90ICppbW1fdXNlOworICAvKiBUaGlzIG1hcmtzIHRoZSBsYXN0IHVzZSBpbiB0aGUgbGlzdCAodXNlIG5vZGUgZnJvbSBTU0FfTkFNRSkgICovCisgIHNzYV91c2Vfb3BlcmFuZF90ICplbmRfcDsKKyAgLyogVGhpcyBub2RlIGlzIGluc2VydGVkIGFuZCB1c2VkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgdXNlcyBmb3IgYSBzdG10LiAgKi8KKyAgc3NhX3VzZV9vcGVyYW5kX3QgaXRlcl9ub2RlOworICAvKiBUaGlzIGlzIHRoZSBuZXh0IHNzYV9uYW1lIHRvIHZpc2l0LiAgSU1NX1VTRSBtYXkgZ2V0IHJlbW92ZWQgYmVmb3JlCisgICAgIHRoZSBuZXh0IG9uZSBpcyB0cmF2ZXJzZWQgdG8sIHNvIGl0IG11c3QgYmUgY2FjaGVkIGVhcmx5LiAgKi8KKyAgc3NhX3VzZV9vcGVyYW5kX3QgKm5leHRfaW1tX25hbWU7Cit9IGltbV91c2VfaXRlcmF0b3I7CisKKworLyogVXNlIHRoaXMgaXRlcmF0b3Igd2hlbiBzaW1wbHkgbG9va2luZyBhdCBzdG10cy4gIEFkZGluZywgZGVsZXRpbmcgb3IKKyAgIG1vZGlmeWluZyBzdG10cyB3aWxsIGNhdXNlIHRoaXMgaXRlcmF0b3IgdG8gbWFsZnVuY3Rpb24uICAqLworCisjZGVmaW5lIEZPUl9FQUNIX0lNTV9VU0VfRkFTVChERVNULCBJVEVSLCBTU0FWQVIpCQlcCisgIGZvciAoKERFU1QpID0gZmlyc3RfcmVhZG9ubHlfaW1tX3VzZSAoJihJVEVSKSwgKFNTQVZBUikpOwlcCisgICAgICAgIWVuZF9yZWFkb25seV9pbW1fdXNlX3AgKCYoSVRFUikpOwkJCVwKKyAgICAgICAodm9pZCkgKChERVNUKSA9IG5leHRfcmVhZG9ubHlfaW1tX3VzZSAoJihJVEVSKSkpKQorCisvKiBVc2UgdGhpcyBpdGVyYXRvciB0byB2aXNpdCBlYWNoIHN0bXQgd2hpY2ggaGFzIGEgdXNlIG9mIFNTQVZBUi4gICovCisKKyNkZWZpbmUgRk9SX0VBQ0hfSU1NX1VTRV9TVE1UKFNUTVQsIElURVIsIFNTQVZBUikJCVwKKyAgZm9yICgoU1RNVCkgPSBmaXJzdF9pbW1fdXNlX3N0bXQgKCYoSVRFUiksIChTU0FWQVIpKTsJCVwKKyAgICAgICAhZW5kX2ltbV91c2Vfc3RtdF9wICgmKElURVIpKTsJCQkJXAorICAgICAgICh2b2lkKSAoKFNUTVQpID0gbmV4dF9pbW1fdXNlX3N0bXQgKCYoSVRFUikpKSkKKworLyogVXNlIHRoaXMgdG8gdGVybWluYXRlIHRoZSBGT1JfRUFDSF9JTU1fVVNFX1NUTVQgbG9vcCBlYXJseS4gIEZhaWx1cmUgdG8KKyAgIGRvIHNvIHdpbGwgcmVzdWx0IGluIGxlYXZpbmcgYSBpdGVyYXRvciBtYXJrZXIgbm9kZSBpbiB0aGUgaW1tZWRpYXRlCisgICB1c2UgbGlzdCwgYW5kIG5vdGhpbmcgZ29vZCB3aWxsIGNvbWUgZnJvbSB0aGF0LiAgICovCisjZGVmaW5lIEJSRUFLX0ZST01fSU1NX1VTRV9TVE1UKElURVIpCQkJCVwKKyAgIHsJCQkJCQkJCVwKKyAgICAgZW5kX2ltbV91c2Vfc3RtdF90cmF2ZXJzZSAoJihJVEVSKSk7CQkJXAorICAgICBicmVhazsJCQkJCQkJXAorICAgfQorCisKKy8qIFVzZSB0aGlzIGl0ZXJhdG9yIGluIGNvbWJpbmF0aW9uIHdpdGggRk9SX0VBQ0hfSU1NX1VTRV9TVE1UIHRvCisgICBnZXQgYWNjZXNzIHRvIGVhY2ggb2NjdXJyZW5jZSBvZiBzc2F2YXIgb24gdGhlIHN0bXQgcmV0dXJuZWQgYnkKKyAgIHRoYXQgaXRlcmF0b3IuLiAgZm9yIGluc3RhbmNlOgorCisgICAgIEZPUl9FQUNIX0lNTV9VU0VfU1RNVCAoc3RtdCwgaXRlciwgdmFyKQorICAgICAgIHsKKyAgICAgICAgIEZPUl9FQUNIX0lNTV9VU0VfT05fU1RNVCAodXNlX3AsIGl0ZXIpCisJICAgeworCSAgICAgU0VUX1VTRSAodXNlX3AsIGJsYWgpOworCSAgIH0KKwkgdXBkYXRlX3N0bXQgKHN0bXQpOworICAgICAgIH0JCQkJCQkJICovCisKKyNkZWZpbmUgRk9SX0VBQ0hfSU1NX1VTRV9PTl9TVE1UKERFU1QsIElURVIpCQkJXAorICBmb3IgKChERVNUKSA9IGZpcnN0X2ltbV91c2Vfb25fc3RtdCAoJihJVEVSKSk7CQlcCisgICAgICAgIWVuZF9pbW1fdXNlX29uX3N0bXRfcCAoJihJVEVSKSk7CQkJXAorICAgICAgICh2b2lkKSAoKERFU1QpID0gbmV4dF9pbW1fdXNlX29uX3N0bXQgKCYoSVRFUikpKSkKKworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc3RtdCAoZ2ltcGxlKTsKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9saW5lbm8gKGNvbnN0X2dpbXBsZSk7CisKKy8qIEFjY2Vzc29ycyBmb3IgYmFzaWMgYmxvY2sgYW5ub3RhdGlvbnMuICAqLworc3RhdGljIGlubGluZSBnaW1wbGVfc2VxIHBoaV9ub2RlcyAoY29uc3RfYmFzaWNfYmxvY2spOworc3RhdGljIGlubGluZSB2b2lkIHNldF9waGlfbm9kZXMgKGJhc2ljX2Jsb2NrLCBnaW1wbGVfc2VxKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCSAgICAgIEdsb2JhbCBkZWNsYXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgaW50X3RyZWVfbWFwIHsKKyAgdW5zaWduZWQgaW50IHVpZDsKKyAgdHJlZSB0bzsKK307CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgaW50X3RyZWVfbWFwX2hhc2ggKGNvbnN0IHZvaWQgKik7CitleHRlcm4gaW50IGludF90cmVlX21hcF9lcSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworCitleHRlcm4gdW5zaWduZWQgaW50IHVpZF9kZWNsX21hcF9oYXNoIChjb25zdCB2b2lkICopOworZXh0ZXJuIGludCB1aWRfZGVjbF9tYXBfZXEgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKKworI2RlZmluZSBudW1fc3NhX25hbWVzICh2ZWNfc2FmZV9sZW5ndGggKGNmdW4tPmdpbXBsZV9kZi0+c3NhX25hbWVzKSkKKyNkZWZpbmUgc3NhX25hbWUoaSkgKCgqY2Z1bi0+Z2ltcGxlX2RmLT5zc2FfbmFtZXMpWyhpKV0pCisKKy8qIE1hY3JvcyBmb3Igc2hvd2luZyB1c2FnZSBzdGF0aXN0aWNzLiAgKi8KKyNkZWZpbmUgU0NBTEUoeCkgKCh1bnNpZ25lZCBsb25nKSAoKHgpIDwgMTAyNCoxMAlcCisJCSAgPyAoeCkJCQkJCVwKKwkJICA6ICgoeCkgPCAxMDI0KjEwMjQqMTAJCQlcCisJCSAgICAgPyAoeCkgLyAxMDI0CQkJXAorCQkgICAgIDogKHgpIC8gKDEwMjQqMTAyNCkpKSkKKworI2RlZmluZSBMQUJFTCh4KSAoKHgpIDwgMTAyNCoxMCA/ICdiJyA6ICgoeCkgPCAxMDI0KjEwMjQqMTAgPyAnaycgOiAnTScpKQorCisjZGVmaW5lIFBFUkNFTlQoeCx5KSAoKGZsb2F0KSh4KSAqIDEwMC4wIC8gKGZsb2F0KSh5KSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCSAgICAgIE9wZW5NUCBSZWdpb24gVHJlZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUGFyYWxsZWwgcmVnaW9uIGluZm9ybWF0aW9uLiAgRXZlcnkgcGFyYWxsZWwgYW5kIHdvcmtzaGFyZQorICAgZGlyZWN0aXZlIGlzIGVuY2xvc2VkIGJldHdlZW4gdHdvIG1hcmtlcnMsIHRoZSBPTVBfKiBkaXJlY3RpdmUKKyAgIGFuZCBhIGNvcnJlc3BvbmRpbmcgT01QX1JFVFVSTiBzdGF0ZW1lbnQuICAqLworCitzdHJ1Y3Qgb21wX3JlZ2lvbgoreworICAvKiBUaGUgZW5jbG9zaW5nIHJlZ2lvbi4gICovCisgIHN0cnVjdCBvbXBfcmVnaW9uICpvdXRlcjsKKworICAvKiBGaXJzdCBjaGlsZCByZWdpb24uICAqLworICBzdHJ1Y3Qgb21wX3JlZ2lvbiAqaW5uZXI7CisKKyAgLyogTmV4dCBwZWVyIHJlZ2lvbi4gICovCisgIHN0cnVjdCBvbXBfcmVnaW9uICpuZXh0OworCisgIC8qIEJsb2NrIGNvbnRhaW5pbmcgdGhlIG9tcCBkaXJlY3RpdmUgYXMgaXRzIGxhc3Qgc3RtdC4gICovCisgIGJhc2ljX2Jsb2NrIGVudHJ5OworCisgIC8qIEJsb2NrIGNvbnRhaW5pbmcgdGhlIE9NUF9SRVRVUk4gYXMgaXRzIGxhc3Qgc3RtdC4gICovCisgIGJhc2ljX2Jsb2NrIGV4aXQ7CisKKyAgLyogQmxvY2sgY29udGFpbmluZyB0aGUgT01QX0NPTlRJTlVFIGFzIGl0cyBsYXN0IHN0bXQuICAqLworICBiYXNpY19ibG9jayBjb250OworCisgIC8qIElmIHRoaXMgaXMgYSBjb21iaW5lZCBwYXJhbGxlbCt3b3Jrc2hhcmUgcmVnaW9uLCB0aGlzIGlzIGEgbGlzdAorICAgICBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBuZWVkZWQgYnkgdGhlIGNvbWJpbmVkIHBhcmFsbGVsK3dvcmtzaGFyZQorICAgICBsaWJyYXJ5IGNhbGwuICAqLworICB2ZWM8dHJlZSwgdmFfZ2M+ICp3c19hcmdzOworCisgIC8qIFRoZSBjb2RlIGZvciB0aGUgb21wIGRpcmVjdGl2ZSBvZiB0aGlzIHJlZ2lvbi4gICovCisgIGVudW0gZ2ltcGxlX2NvZGUgdHlwZTsKKworICAvKiBTY2hlZHVsZSBraW5kLCBvbmx5IHVzZWQgZm9yIE9NUF9GT1IgdHlwZSByZWdpb25zLiAgKi8KKyAgZW51bSBvbXBfY2xhdXNlX3NjaGVkdWxlX2tpbmQgc2NoZWRfa2luZDsKKworICAvKiBUcnVlIGlmIHRoaXMgaXMgYSBjb21iaW5lZCBwYXJhbGxlbCt3b3Jrc2hhcmUgcmVnaW9uLiAgKi8KKyAgYm9vbCBpc19jb21iaW5lZF9wYXJhbGxlbDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgb21wX3JlZ2lvbiAqcm9vdF9vbXBfcmVnaW9uOworZXh0ZXJuIHN0cnVjdCBvbXBfcmVnaW9uICpuZXdfb21wX3JlZ2lvbiAoYmFzaWNfYmxvY2ssIGVudW0gZ2ltcGxlX2NvZGUsCisJCQkJCSAgc3RydWN0IG9tcF9yZWdpb24gKik7CitleHRlcm4gdm9pZCBmcmVlX29tcF9yZWdpb25zICh2b2lkKTsKK3ZvaWQgb21wX2V4cGFuZF9sb2NhbCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHRyZWUgZmluZF9vbXBfY2xhdXNlICh0cmVlLCBlbnVtIG9tcF9jbGF1c2VfY29kZSk7Cit0cmVlIGNvcHlfdmFyX2RlY2wgKHRyZWUsIHRyZWUsIHRyZWUpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJICAgICAgRnVuY3Rpb24gcHJvdG90eXBlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEluIHRyZWUtY2ZnLmMgICovCisKKy8qIExvY2F0aW9uIHRvIHRyYWNrIHBlbmRpbmcgc3RtdCBmb3IgZWRnZSBpbnNlcnRpb24uICAqLworI2RlZmluZSBQRU5ESU5HX1NUTVQoZSkJKChlKS0+aW5zbnMuZykKKworZXh0ZXJuIHZvaWQgZGVsZXRlX3RyZWVfY2ZnX2Fubm90YXRpb25zICh2b2lkKTsKK2V4dGVybiBib29sIHN0bXRfZW5kc19iYl9wIChnaW1wbGUpOworZXh0ZXJuIGJvb2wgaXNfY3RybF9zdG10IChnaW1wbGUpOworZXh0ZXJuIGJvb2wgaXNfY3RybF9hbHRlcmluZ19zdG10IChnaW1wbGUpOworZXh0ZXJuIGJvb2wgc2ltcGxlX2dvdG9fcCAoZ2ltcGxlKTsKK2V4dGVybiBib29sIHN0bXRfY2FuX21ha2VfYWJub3JtYWxfZ290byAoZ2ltcGxlKTsKK2V4dGVybiBiYXNpY19ibG9jayBzaW5nbGVfbm9uY29tcGxleF9zdWNjIChiYXNpY19ibG9jayBiYik7CitleHRlcm4gdm9pZCBnaW1wbGVfZHVtcF9iYiAoRklMRSAqLCBiYXNpY19ibG9jaywgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgZ2ltcGxlX2RlYnVnX2JiIChiYXNpY19ibG9jayk7CitleHRlcm4gYmFzaWNfYmxvY2sgZ2ltcGxlX2RlYnVnX2JiX24gKGludCk7CitleHRlcm4gdm9pZCBnaW1wbGVfZHVtcF9jZmcgKEZJTEUgKiwgaW50KTsKK2V4dGVybiB2b2lkIGdpbXBsZV9kZWJ1Z19jZmcgKGludCk7CitleHRlcm4gdm9pZCBkdW1wX2NmZ19zdGF0cyAoRklMRSAqKTsKK2V4dGVybiB2b2lkIGRvdF9jZmcgKHZvaWQpOworZXh0ZXJuIHZvaWQgZGVidWdfY2ZnX3N0YXRzICh2b2lkKTsKK2V4dGVybiB2b2lkIGRlYnVnX2xvb3BzIChpbnQpOworZXh0ZXJuIHZvaWQgZGVidWdfbG9vcCAoc3RydWN0IGxvb3AgKiwgaW50KTsKK2V4dGVybiB2b2lkIGRlYnVnX2xvb3BfbnVtICh1bnNpZ25lZCwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X2xvb3BzIChGSUxFICosIGludCk7CitleHRlcm4gdm9pZCBwcmludF9sb29wc19iYiAoRklMRSAqLCBiYXNpY19ibG9jaywgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgY2xlYW51cF9kZWFkX2xhYmVscyAodm9pZCk7CitleHRlcm4gdm9pZCBncm91cF9jYXNlX2xhYmVsc19zdG10IChnaW1wbGUpOworZXh0ZXJuIHZvaWQgZ3JvdXBfY2FzZV9sYWJlbHMgKHZvaWQpOworZXh0ZXJuIGdpbXBsZSBmaXJzdF9zdG10IChiYXNpY19ibG9jayk7CitleHRlcm4gZ2ltcGxlIGxhc3Rfc3RtdCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIGdpbXBsZSBsYXN0X2FuZF9vbmx5X3N0bXQgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiBlZGdlIGZpbmRfdGFrZW5fZWRnZSAoYmFzaWNfYmxvY2ssIHRyZWUpOworZXh0ZXJuIGJhc2ljX2Jsb2NrIGxhYmVsX3RvX2Jsb2NrX2ZuIChzdHJ1Y3QgZnVuY3Rpb24gKiwgdHJlZSk7CisjZGVmaW5lIGxhYmVsX3RvX2Jsb2NrKHQpIChsYWJlbF90b19ibG9ja19mbiAoY2Z1biwgdCkpCitleHRlcm4gdm9pZCBub3RpY2Vfc3BlY2lhbF9jYWxscyAoZ2ltcGxlKTsKK2V4dGVybiB2b2lkIGNsZWFyX3NwZWNpYWxfY2FsbHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgdmVyaWZ5X2dpbXBsZV9pbl9zZXEgKGdpbXBsZV9zZXEpOworZXh0ZXJuIHZvaWQgdmVyaWZ5X2dpbXBsZV9pbl9jZmcgKHN0cnVjdCBmdW5jdGlvbiAqKTsKK2V4dGVybiB0cmVlIGdpbXBsZV9ibG9ja19sYWJlbCAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgZXh0cmFjdF90cnVlX2ZhbHNlX2VkZ2VzX2Zyb21fYmxvY2sgKGJhc2ljX2Jsb2NrLCBlZGdlICosIGVkZ2UgKik7CitleHRlcm4gYm9vbCBnaW1wbGVfZHVwbGljYXRlX3Nlc2VfcmVnaW9uIChlZGdlLCBlZGdlLCBiYXNpY19ibG9jayAqLCB1bnNpZ25lZCwKKwkJCQkJYmFzaWNfYmxvY2sgKik7CitleHRlcm4gYm9vbCBnaW1wbGVfZHVwbGljYXRlX3Nlc2VfdGFpbCAoZWRnZSwgZWRnZSwgYmFzaWNfYmxvY2sgKiwgdW5zaWduZWQsCisJCQkJICAgICAgYmFzaWNfYmxvY2sgKik7CitleHRlcm4gdm9pZCBnYXRoZXJfYmxvY2tzX2luX3Nlc2VfcmVnaW9uIChiYXNpY19ibG9jayBlbnRyeSwgYmFzaWNfYmxvY2sgZXhpdCwKKwkJCQkJICB2ZWM8YmFzaWNfYmxvY2s+ICpiYnNfcCk7CitleHRlcm4gdm9pZCBhZGRfcGhpX2FyZ3NfYWZ0ZXJfY29weV9iYiAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgYWRkX3BoaV9hcmdzX2FmdGVyX2NvcHkgKGJhc2ljX2Jsb2NrICosIHVuc2lnbmVkLCBlZGdlKTsKK2V4dGVybiBib29sIGdpbXBsZV9wdXJnZV9kZWFkX2VoX2VkZ2VzIChiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBnaW1wbGVfcHVyZ2VfYWxsX2RlYWRfZWhfZWRnZXMgKGNvbnN0X2JpdG1hcCk7CitleHRlcm4gYm9vbCBnaW1wbGVfcHVyZ2VfZGVhZF9hYm5vcm1hbF9jYWxsX2VkZ2VzIChiYXNpY19ibG9jayk7CitleHRlcm4gYm9vbCBnaW1wbGVfcHVyZ2VfYWxsX2RlYWRfYWJub3JtYWxfY2FsbF9lZGdlcyAoY29uc3RfYml0bWFwKTsKK2V4dGVybiB0cmVlIGdpbXBsaWZ5X2J1aWxkMSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgZW51bSB0cmVlX2NvZGUsCisJCQkgICAgIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2ltcGxpZnlfYnVpbGQyIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBlbnVtIHRyZWVfY29kZSwKKwkJCSAgICAgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnaW1wbGlmeV9idWlsZDMgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGVudW0gdHJlZV9jb2RlLAorCQkJICAgICB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGluaXRfZW1wdHlfdHJlZV9jZmcgKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9lbXB0eV90cmVlX2NmZ19mb3JfZnVuY3Rpb24gKHN0cnVjdCBmdW5jdGlvbiAqKTsKK2V4dGVybiB2b2lkIGZvbGRfY29uZF9leHByX2NvbmQgKHZvaWQpOworZXh0ZXJuIHZvaWQgbWFrZV9hYm5vcm1hbF9nb3RvX2VkZ2VzIChiYXNpY19ibG9jaywgYm9vbCk7CitleHRlcm4gdm9pZCByZXBsYWNlX3VzZXNfYnkgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgc3RhcnRfcmVjb3JkaW5nX2Nhc2VfbGFiZWxzICh2b2lkKTsKK2V4dGVybiB2b2lkIGVuZF9yZWNvcmRpbmdfY2FzZV9sYWJlbHMgKHZvaWQpOworZXh0ZXJuIGJhc2ljX2Jsb2NrIG1vdmVfc2VzZV9yZWdpb25fdG9fZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBiYXNpY19ibG9jaywKKwkJCQkgICAgICAgICAgIGJhc2ljX2Jsb2NrLCB0cmVlKTsKK3ZvaWQgcmVtb3ZlX2VkZ2VfYW5kX2RvbWluYXRlZF9ibG9ja3MgKGVkZ2UpOworYm9vbCB0cmVlX25vZGVfY2FuX2JlX3NoYXJlZCAodHJlZSk7CisKKy8qIEluIHRyZWUtY2ZnY2xlYW51cC5jICAqLworZXh0ZXJuIGJpdG1hcCBjZmdjbGVhbnVwX2FsdGVyZWRfYmJzOworZXh0ZXJuIGJvb2wgY2xlYW51cF90cmVlX2NmZyAodm9pZCk7CisKKy8qIEluIHRyZWUtcHJldHR5LXByaW50LmMuICAqLworZXh0ZXJuIHZvaWQgZHVtcF9nZW5lcmljX2JiIChGSUxFICosIGJhc2ljX2Jsb2NrLCBpbnQsIGludCk7CitleHRlcm4gaW50IG9wX2NvZGVfcHJpbyAoZW51bSB0cmVlX2NvZGUpOworZXh0ZXJuIGludCBvcF9wcmlvIChjb25zdF90cmVlKTsKK2V4dGVybiBjb25zdCBjaGFyICpvcF9zeW1ib2xfY29kZSAoZW51bSB0cmVlX2NvZGUpOworCisvKiBJbiB0cmVlLWRmYS5jICAqLworZXh0ZXJuIHZvaWQgcmVudW1iZXJfZ2ltcGxlX3N0bXRfdWlkcyAodm9pZCk7CitleHRlcm4gdm9pZCByZW51bWJlcl9naW1wbGVfc3RtdF91aWRzX2luX2Jsb2NrcyAoYmFzaWNfYmxvY2sgKiwgaW50KTsKK2V4dGVybiB2b2lkIGR1bXBfZGZhX3N0YXRzIChGSUxFICopOworZXh0ZXJuIHZvaWQgZGVidWdfZGZhX3N0YXRzICh2b2lkKTsKK2V4dGVybiB2b2lkIGR1bXBfdmFyaWFibGUgKEZJTEUgKiwgdHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z192YXJpYWJsZSAodHJlZSk7CitleHRlcm4gdm9pZCBzZXRfc3NhX2RlZmF1bHRfZGVmIChzdHJ1Y3QgZnVuY3Rpb24gKiwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBzc2FfZGVmYXVsdF9kZWYgKHN0cnVjdCBmdW5jdGlvbiAqLCB0cmVlKTsKK2V4dGVybiB0cmVlIGdldF9vcl9jcmVhdGVfc3NhX2RlZmF1bHRfZGVmIChzdHJ1Y3QgZnVuY3Rpb24gKiwgdHJlZSk7CitleHRlcm4gYm9vbCBzdG10X3JlZmVyZW5jZXNfYWJub3JtYWxfc3NhX25hbWUgKGdpbXBsZSk7CitleHRlcm4gdHJlZSBnZXRfYWRkcl9iYXNlX2FuZF91bml0X29mZnNldCAodHJlZSwgSE9TVF9XSURFX0lOVCAqKTsKK2V4dGVybiB2b2lkIGR1bXBfZW51bWVyYXRlZF9kZWNscyAoRklMRSAqLCBpbnQpOworCisvKiBJbiB0cmVlLXBoaW5vZGVzLmMgICovCitleHRlcm4gdm9pZCByZXNlcnZlX3BoaV9hcmdzX2Zvcl9uZXdfZWRnZSAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgYWRkX3BoaV9ub2RlX3RvX2JiIChnaW1wbGUgcGhpLCBiYXNpY19ibG9jayBiYik7CitleHRlcm4gZ2ltcGxlIGNyZWF0ZV9waGlfbm9kZSAodHJlZSwgYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgYWRkX3BoaV9hcmcgKGdpbXBsZSwgdHJlZSwgZWRnZSwgc291cmNlX2xvY2F0aW9uKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9waGlfYXJncyAoZWRnZSk7CitleHRlcm4gdm9pZCByZW1vdmVfcGhpX25vZGUgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIGJvb2wpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX3BoaV9ub2RlcyAoYmFzaWNfYmxvY2spOworZXh0ZXJuIHZvaWQgcmVsZWFzZV9waGlfbm9kZSAoZ2ltcGxlKTsKK2V4dGVybiB2b2lkIHBoaW5vZGVzX3ByaW50X3N0YXRpc3RpY3MgKHZvaWQpOworCisvKiBJbiBnaW1wbGUtbG93LmMgICovCitleHRlcm4gdm9pZCByZWNvcmRfdmFyc19pbnRvICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHJlY29yZF92YXJzICh0cmVlKTsKK2V4dGVybiBib29sIGdpbXBsZV9zZXFfbWF5X2ZhbGx0aHJ1IChnaW1wbGVfc2VxKTsKK2V4dGVybiBib29sIGdpbXBsZV9zdG10X21heV9mYWxsdGhydSAoZ2ltcGxlKTsKK2V4dGVybiBib29sIGdpbXBsZV9jaGVja19jYWxsX21hdGNoaW5nX3R5cGVzIChnaW1wbGUsIHRyZWUpOworCisKKy8qIEluIHRyZWUtc3NhLmMgICovCisKKy8qIE1hcHBpbmcgZm9yIHJlZGlyZWN0ZWQgZWRnZXMuICAqLworc3RydWN0IF9lZGdlX3Zhcl9tYXAgeworICB0cmVlIHJlc3VsdDsJCQkvKiBQSEkgcmVzdWx0LiAgKi8KKyAgdHJlZSBkZWY7CQkJLyogUEhJIGFyZyBkZWZpbml0aW9uLiAgKi8KKyAgc291cmNlX2xvY2F0aW9uIGxvY3VzOyAgICAgICAgLyogUEhJIGFyZyBsb2NhdGlvbi4gICovCit9OwordHlwZWRlZiBzdHJ1Y3QgX2VkZ2VfdmFyX21hcCBlZGdlX3Zhcl9tYXA7CisKKworLyogQSB2ZWN0b3Igb2YgdmFyIG1hcHMuICAqLwordHlwZWRlZiB2ZWM8ZWRnZV92YXJfbWFwLCB2YV9oZWFwLCB2bF9lbWJlZD4gZWRnZV92YXJfbWFwX3ZlY3RvcjsKKworZXh0ZXJuIHZvaWQgaW5pdF90cmVlX3NzYSAoc3RydWN0IGZ1bmN0aW9uICopOworZXh0ZXJuIHZvaWQgcmVkaXJlY3RfZWRnZV92YXJfbWFwX2FkZCAoZWRnZSwgdHJlZSwgdHJlZSwgc291cmNlX2xvY2F0aW9uKTsKK2V4dGVybiB2b2lkIHJlZGlyZWN0X2VkZ2VfdmFyX21hcF9jbGVhciAoZWRnZSk7CitleHRlcm4gdm9pZCByZWRpcmVjdF9lZGdlX3Zhcl9tYXBfZHVwIChlZGdlLCBlZGdlKTsKK2V4dGVybiBlZGdlX3Zhcl9tYXBfdmVjdG9yICpyZWRpcmVjdF9lZGdlX3Zhcl9tYXBfdmVjdG9yIChlZGdlKTsKK2V4dGVybiB2b2lkIHJlZGlyZWN0X2VkZ2VfdmFyX21hcF9kZXN0cm95ICh2b2lkKTsKKworZXh0ZXJuIGVkZ2Ugc3NhX3JlZGlyZWN0X2VkZ2UgKGVkZ2UsIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIGZsdXNoX3BlbmRpbmdfc3RtdHMgKGVkZ2UpOworZXh0ZXJuIHZvaWQgdmVyaWZ5X3NzYSAoYm9vbCk7CitleHRlcm4gdm9pZCBkZWxldGVfdHJlZV9zc2EgKHZvaWQpOworZXh0ZXJuIGJvb2wgc3NhX3VuZGVmaW5lZF92YWx1ZV9wICh0cmVlKTsKK2V4dGVybiB2b2lkIHdhcm5fdW5pbml0IChlbnVtIG9wdF9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gdW5zaWduZWQgaW50IHdhcm5fdW5pbml0aWFsaXplZF92YXJzIChib29sKTsKK2V4dGVybiB2b2lkIGV4ZWN1dGVfdXBkYXRlX2FkZHJlc3Nlc190YWtlbiAodm9pZCk7CisKKy8qIENhbGwtYmFjayBmdW5jdGlvbiBmb3Igd2Fsa191c2VfZGVmX2NoYWlucygpLiAgQXQgZWFjaCByZWFjaGluZworICAgZGVmaW5pdGlvbiwgYSBmdW5jdGlvbiB3aXRoIHRoaXMgcHJvdG90eXBlIGlzIGNhbGxlZC4gICovCit0eXBlZGVmIGJvb2wgKCp3YWxrX3VzZV9kZWZfY2hhaW5zX2ZuKSAodHJlZSwgZ2ltcGxlLCB2b2lkICopOworCitleHRlcm4gdm9pZCB3YWxrX3VzZV9kZWZfY2hhaW5zICh0cmVlLCB3YWxrX3VzZV9kZWZfY2hhaW5zX2ZuLCB2b2lkICosIGJvb2wpOworCit2b2lkIGluc2VydF9kZWJ1Z190ZW1wc19mb3JfZGVmcyAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKik7Cit2b2lkIGluc2VydF9kZWJ1Z190ZW1wX2Zvcl92YXJfZGVmIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCB0cmVlKTsKK3ZvaWQgcmVzZXRfZGVidWdfdXNlcyAoZ2ltcGxlKTsKK3ZvaWQgcmVsZWFzZV9kZWZzX2JpdHNldCAoYml0bWFwIHRvcmVtb3ZlKTsKKworLyogSW4gdHJlZS1pbnRvLXNzYS5jICAqLwordm9pZCB1cGRhdGVfc3NhICh1bnNpZ25lZCk7Cit2b2lkIGRlbGV0ZV91cGRhdGVfc3NhICh2b2lkKTsKK3RyZWUgY3JlYXRlX25ld19kZWZfZm9yICh0cmVlLCBnaW1wbGUsIGRlZl9vcGVyYW5kX3ApOworYm9vbCBuZWVkX3NzYV91cGRhdGVfcCAoc3RydWN0IGZ1bmN0aW9uICopOworYm9vbCBuYW1lX3JlZ2lzdGVyZWRfZm9yX3VwZGF0ZV9wICh0cmVlKTsKK3ZvaWQgcmVsZWFzZV9zc2FfbmFtZV9hZnRlcl91cGRhdGVfc3NhICh0cmVlKTsKK3ZvaWQgbWFya192aXJ0dWFsX29wZXJhbmRzX2Zvcl9yZW5hbWluZyAoc3RydWN0IGZ1bmN0aW9uICopOwordHJlZSBnZXRfY3VycmVudF9kZWYgKHRyZWUpOwordm9pZCBzZXRfY3VycmVudF9kZWYgKHRyZWUsIHRyZWUpOworCisvKiBJbiB0cmVlLXNzYW5hbWVzLmMgICovCitleHRlcm4gdm9pZCBpbml0X3NzYW5hbWVzIChzdHJ1Y3QgZnVuY3Rpb24gKiwgaW50KTsKK2V4dGVybiB2b2lkIGZpbmlfc3NhbmFtZXMgKHZvaWQpOworZXh0ZXJuIHRyZWUgbWFrZV9zc2FfbmFtZV9mbiAoc3RydWN0IGZ1bmN0aW9uICosIHRyZWUsIGdpbXBsZSk7CitleHRlcm4gdHJlZSBjb3B5X3NzYV9uYW1lX2ZuIChzdHJ1Y3QgZnVuY3Rpb24gKiwgdHJlZSwgZ2ltcGxlKTsKK2V4dGVybiB0cmVlIGR1cGxpY2F0ZV9zc2FfbmFtZV9mbiAoc3RydWN0IGZ1bmN0aW9uICosIHRyZWUsIGdpbXBsZSk7CitleHRlcm4gdm9pZCBkdXBsaWNhdGVfc3NhX25hbWVfcHRyX2luZm8gKHRyZWUsIHN0cnVjdCBwdHJfaW5mb19kZWYgKik7CitleHRlcm4gdm9pZCByZWxlYXNlX3NzYV9uYW1lICh0cmVlKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfZGVmcyAoZ2ltcGxlKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfc3NhX25hbWVfc3ltYm9sICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIGdldF9wdHJfaW5mb19hbGlnbm1lbnQgKHN0cnVjdCBwdHJfaW5mb19kZWYgKiwgdW5zaWduZWQgaW50ICosCisJCQkJICAgIHVuc2lnbmVkIGludCAqKTsKK2V4dGVybiB2b2lkIG1hcmtfcHRyX2luZm9fYWxpZ25tZW50X3Vua25vd24gKHN0cnVjdCBwdHJfaW5mb19kZWYgKik7CitleHRlcm4gdm9pZCBzZXRfcHRyX2luZm9fYWxpZ25tZW50IChzdHJ1Y3QgcHRyX2luZm9fZGVmICosIHVuc2lnbmVkIGludCwKKwkJCQkgICAgdW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIGFkanVzdF9wdHJfaW5mb19taXNhbGlnbm1lbnQgKHN0cnVjdCBwdHJfaW5mb19kZWYgKiwKKwkJCQkJICB1bnNpZ25lZCBpbnQpOworCitleHRlcm4gdm9pZCBzc2FuYW1lc19wcmludF9zdGF0aXN0aWNzICh2b2lkKTsKKworLyogSW4gdHJlZS1zc2EtY2NwLmMgICovCit0cmVlIGZvbGRfY29uc3RfYWdncmVnYXRlX3JlZiAodHJlZSk7Cit0cmVlIGdpbXBsZV9mb2xkX3N0bXRfdG9fY29uc3RhbnQgKGdpbXBsZSwgdHJlZSAoKikodHJlZSkpOworCisvKiBJbiB0cmVlLXNzYS1kb20uYyAgKi8KK2V4dGVybiB2b2lkIGR1bXBfZG9taW5hdG9yX29wdGltaXphdGlvbl9zdGF0cyAoRklMRSAqKTsKK2V4dGVybiB2b2lkIGRlYnVnX2RvbWluYXRvcl9vcHRpbWl6YXRpb25fc3RhdHMgKHZvaWQpOworaW50IGxvb3BfZGVwdGhfb2ZfbmFtZSAodHJlZSk7Cit0cmVlIGRlZ2VuZXJhdGVfcGhpX3Jlc3VsdCAoZ2ltcGxlKTsKK2Jvb2wgc2ltcGxlX2l2X2luY3JlbWVudF9wIChnaW1wbGUpOworCisvKiBJbiB0cmVlLXNzYS1jb3B5LmMgICovCitleHRlcm4gdm9pZCBwcm9wYWdhdGVfdmFsdWUgKHVzZV9vcGVyYW5kX3AsIHRyZWUpOworZXh0ZXJuIHZvaWQgcHJvcGFnYXRlX3RyZWVfdmFsdWUgKHRyZWUgKiwgdHJlZSk7CitleHRlcm4gdm9pZCBwcm9wYWdhdGVfdHJlZV92YWx1ZV9pbnRvX3N0bXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICosIHRyZWUpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV9leHAgKHVzZV9vcGVyYW5kX3AsIHRyZWUpOworZXh0ZXJuIGJvb2wgbWF5X3Byb3BhZ2F0ZV9jb3B5ICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIG1heV9wcm9wYWdhdGVfY29weV9pbnRvX3N0bXQgKGdpbXBsZSwgdHJlZSk7CitleHRlcm4gYm9vbCBtYXlfcHJvcGFnYXRlX2NvcHlfaW50b19hc20gKHRyZWUpOworCisvKiBJbiB0cmVlLXNzYS1sb29wLWNoLmMgICovCitib29sIGRvX3doaWxlX2xvb3BfcCAoc3RydWN0IGxvb3AgKik7CisKKy8qIEFmZmluZSBpdi4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIEl2ID0gQkFTRSArIFNURVAgKiBpLiAgKi8KKyAgdHJlZSBiYXNlLCBzdGVwOworCisgIC8qIFRydWUgaWYgdGhpcyBpdiBkb2VzIG5vdCBvdmVyZmxvdy4gICovCisgIGJvb2wgbm9fb3ZlcmZsb3c7Cit9IGFmZmluZV9pdjsKKworLyogRGVzY3JpcHRpb24gb2YgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgYSBsb29wLiAgQWxsIHRoZSBleHByZXNzaW9ucyBpbnNpZGUKKyAgIHRoZSBzdHJ1Y3R1cmUgY2FuIGJlIGV2YWx1YXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wJ3MgcHJlaGVhZGVyCisgICAoYW5kIGR1ZSB0byBzc2EgZm9ybSwgYWxzbyBhbnl3aGVyZSBpbnNpZGUgdGhlIGJvZHkgb2YgdGhlIGxvb3ApLiAgKi8KKworc3RydWN0IHRyZWVfbml0ZXJfZGVzYworeworICB0cmVlIGFzc3VtcHRpb25zOwkvKiBUaGUgYm9vbGVhbiBleHByZXNzaW9uLiAgSWYgdGhpcyBleHByZXNzaW9uIGV2YWx1YXRlcworCQkJICAgdG8gZmFsc2UsIHRoZW4gdGhlIG90aGVyIGZpZWxkcyBpbiB0aGlzIHN0cnVjdHVyZQorCQkJICAgc2hvdWxkIG5vdCBiZSB1c2VkOyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGV5CisJCQkgICB3aWxsIGJlIGNvcnJlY3QuICAqLworICB0cmVlIG1heV9iZV96ZXJvOwkvKiBUaGUgYm9vbGVhbiBleHByZXNzaW9uLiAgSWYgaXQgZXZhbHVhdGVzIHRvIHRydWUsCisJCQkgICB0aGUgbG9vcCB3aWxsIGV4aXQgaW4gdGhlIGZpcnN0IGl0ZXJhdGlvbiAoaS5lLgorCQkJICAgaXRzIGxhdGNoIHdpbGwgbm90IGJlIGV4ZWN1dGVkKSwgZXZlbiBpZiB0aGUgbml0ZXIKKwkJCSAgIGZpZWxkIHNheXMgb3RoZXJ3aXNlLiAgKi8KKyAgdHJlZSBuaXRlcjsJCS8qIFRoZSBleHByZXNzaW9uIGdpdmluZyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YKKwkJCSAgIGEgbG9vcCAocHJvdmlkZWQgdGhhdCBhc3N1bXB0aW9ucyA9PSB0cnVlIGFuZAorCQkJICAgbWF5X2JlX3plcm8gPT0gZmFsc2UpLCBtb3JlIHByZWNpc2VseSB0aGUgbnVtYmVyCisJCQkgICBvZiBleGVjdXRpb25zIG9mIHRoZSBsYXRjaCBvZiB0aGUgbG9vcC4gICovCisgIGRvdWJsZV9pbnQgbWF4OwkvKiBUaGUgdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mCisJCQkgICB0aGUgbG9vcC4gICovCisKKyAgLyogVGhlIHNpbXBsaWZpZWQgc2hhcGUgb2YgdGhlIGV4aXQgY29uZGl0aW9uLiAgVGhlIGxvb3AgZXhpdHMgaWYKKyAgICAgQ09OVFJPTCBDTVAgQk9VTkQgaXMgZmFsc2UsIHdoZXJlIENNUCBpcyBvbmUgb2YgTkVfRVhQUiwKKyAgICAgTFRfRVhQUiwgb3IgR1RfRVhQUiwgYW5kIHN0ZXAgb2YgQ09OVFJPTCBpcyBwb3NpdGl2ZSBpZiBDTVAgaXMKKyAgICAgTEVfRVhQUiBhbmQgbmVnYXRpdmUgaWYgQ01QIGlzIEdFX0VYUFIuICBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQKKyAgICAgYnkgbG9vcCB1bnJvbGxpbmcuICAqLworICBhZmZpbmVfaXYgY29udHJvbDsKKyAgdHJlZSBib3VuZDsKKyAgZW51bSB0cmVlX2NvZGUgY21wOworfTsKKworLyogSW4gdHJlZS1zc2EtcGhpb3B0LmMgKi8KK2Jvb2wgZW1wdHlfYmxvY2tfcCAoYmFzaWNfYmxvY2spOworYmFzaWNfYmxvY2sgKmJsb2Nrc19pbl9waGlvcHRfb3JkZXIgKHZvaWQpOworYm9vbCBub25mcmVlaW5nX2NhbGxfcCAoZ2ltcGxlKTsKKworLyogSW4gdHJlZS1zc2EtbG9vcCouYyAgKi8KKwordW5zaWduZWQgaW50IHRyZWVfc3NhX2xpbSAodm9pZCk7Cit1bnNpZ25lZCBpbnQgdHJlZV9zc2FfdW5zd2l0Y2hfbG9vcHMgKHZvaWQpOwordW5zaWduZWQgaW50IGNhbm9uaWNhbGl6ZV9pbmR1Y3Rpb25fdmFyaWFibGVzICh2b2lkKTsKK3Vuc2lnbmVkIGludCB0cmVlX3Vucm9sbF9sb29wc19jb21wbGV0ZWx5IChib29sLCBib29sKTsKK3Vuc2lnbmVkIGludCB0cmVlX3NzYV9wcmVmZXRjaF9hcnJheXMgKHZvaWQpOwordm9pZCB0cmVlX3NzYV9pdl9vcHRpbWl6ZSAodm9pZCk7Cit1bnNpZ25lZCB0cmVlX3ByZWRpY3RpdmVfY29tbW9uaW5nICh2b2lkKTsKK3RyZWUgY2Fub25pY2FsaXplX2xvb3BfaXZzIChzdHJ1Y3QgbG9vcCAqLCB0cmVlICosIGJvb2wpOworYm9vbCBwYXJhbGxlbGl6ZV9sb29wcyAodm9pZCk7CisKK2Jvb2wgbG9vcF9vbmx5X2V4aXRfcCAoY29uc3Qgc3RydWN0IGxvb3AgKiwgY29uc3RfZWRnZSk7Citib29sIG51bWJlcl9vZl9pdGVyYXRpb25zX2V4aXQgKHN0cnVjdCBsb29wICosIGVkZ2UsCisJCQkJc3RydWN0IHRyZWVfbml0ZXJfZGVzYyAqbml0ZXIsIGJvb2wsCisJCQkJYm9vbCBldmVyeV9pdGVyYXRpb24gPSB0cnVlKTsKK3RyZWUgZmluZF9sb29wX25pdGVyIChzdHJ1Y3QgbG9vcCAqLCBlZGdlICopOwordHJlZSBsb29wX25pdGVyX2J5X2V2YWwgKHN0cnVjdCBsb29wICosIGVkZ2UpOwordHJlZSBmaW5kX2xvb3Bfbml0ZXJfYnlfZXZhbCAoc3RydWN0IGxvb3AgKiwgZWRnZSAqKTsKK3ZvaWQgZXN0aW1hdGVfbnVtYmVyc19vZl9pdGVyYXRpb25zICh2b2lkKTsKK2Jvb2wgc2Nldl9wcm9iYWJseV93cmFwc19wICh0cmVlLCB0cmVlLCBnaW1wbGUsIHN0cnVjdCBsb29wICosIGJvb2wpOworYm9vbCBjb252ZXJ0X2FmZmluZV9zY2V2IChzdHJ1Y3QgbG9vcCAqLCB0cmVlLCB0cmVlICosIHRyZWUgKiwgZ2ltcGxlLCBib29sKTsKKworYm9vbCBub3dyYXBfdHlwZV9wICh0cmVlKTsKK2VudW0gZXZfZGlyZWN0aW9uIHtFVl9ESVJfR1JPV1MsIEVWX0RJUl9ERUNSRUFTRVMsIEVWX0RJUl9VTktOT1dOfTsKK2VudW0gZXZfZGlyZWN0aW9uIHNjZXZfZGlyZWN0aW9uIChjb25zdF90cmVlKTsKKwordm9pZCBmcmVlX251bWJlcnNfb2ZfaXRlcmF0aW9uc19lc3RpbWF0ZXMgKHZvaWQpOwordm9pZCBmcmVlX251bWJlcnNfb2ZfaXRlcmF0aW9uc19lc3RpbWF0ZXNfbG9vcCAoc3RydWN0IGxvb3AgKik7Cit2b2lkIHJld3JpdGVfaW50b19sb29wX2Nsb3NlZF9zc2EgKGJpdG1hcCwgdW5zaWduZWQpOwordm9pZCB2ZXJpZnlfbG9vcF9jbG9zZWRfc3NhIChib29sKTsKK2Jvb2wgZm9yX2VhY2hfaW5kZXggKHRyZWUgKiwgYm9vbCAoKikgKHRyZWUsIHRyZWUgKiwgdm9pZCAqKSwgdm9pZCAqKTsKK3ZvaWQgY3JlYXRlX2l2ICh0cmVlLCB0cmVlLCB0cmVlLCBzdHJ1Y3QgbG9vcCAqLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCBib29sLAorCQl0cmVlICosIHRyZWUgKik7CitiYXNpY19ibG9jayBzcGxpdF9sb29wX2V4aXRfZWRnZSAoZWRnZSk7Cit2b2lkIHN0YW5kYXJkX2l2X2luY3JlbWVudF9wb3NpdGlvbiAoc3RydWN0IGxvb3AgKiwgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwKKwkJCQkgICAgIGJvb2wgKik7CitiYXNpY19ibG9jayBpcF9lbmRfcG9zIChzdHJ1Y3QgbG9vcCAqKTsKK2Jhc2ljX2Jsb2NrIGlwX25vcm1hbF9wb3MgKHN0cnVjdCBsb29wICopOworYm9vbCBnaW1wbGVfZHVwbGljYXRlX2xvb3BfdG9faGVhZGVyX2VkZ2UgKHN0cnVjdCBsb29wICosIGVkZ2UsCisJCQkJCSB1bnNpZ25lZCBpbnQsIHNiaXRtYXAsCisJCQkJCSBlZGdlLCB2ZWM8ZWRnZT4gKiwKKwkJCQkJIGludCk7CitzdHJ1Y3QgbG9vcCAqc2xwZWVsX3RyZWVfZHVwbGljYXRlX2xvb3BfdG9fZWRnZV9jZmcgKHN0cnVjdCBsb29wICosIGVkZ2UpOwordHJlZSBleHBhbmRfc2ltcGxlX29wZXJhdGlvbnMgKHRyZWUpOwordm9pZCBzdWJzdGl0dXRlX2luX2xvb3BfaW5mbyAoc3RydWN0IGxvb3AgKiwgdHJlZSwgdHJlZSk7CitlZGdlIHNpbmdsZV9kb21fZXhpdCAoc3RydWN0IGxvb3AgKik7Citib29sIGNhbl91bnJvbGxfbG9vcF9wIChzdHJ1Y3QgbG9vcCAqbG9vcCwgdW5zaWduZWQgZmFjdG9yLAorCQkJc3RydWN0IHRyZWVfbml0ZXJfZGVzYyAqbml0ZXIpOwordm9pZCB0cmVlX3Vucm9sbF9sb29wIChzdHJ1Y3QgbG9vcCAqLCB1bnNpZ25lZCwKKwkJICAgICAgIGVkZ2UsIHN0cnVjdCB0cmVlX25pdGVyX2Rlc2MgKik7Cit0eXBlZGVmIHZvaWQgKCp0cmFuc2Zvcm1fY2FsbGJhY2spKHN0cnVjdCBsb29wICosIHZvaWQgKik7Cit2b2lkIHRyZWVfdHJhbnNmb3JtX2FuZF91bnJvbGxfbG9vcCAoc3RydWN0IGxvb3AgKiwgdW5zaWduZWQsCisJCQkJICAgICBlZGdlLCBzdHJ1Y3QgdHJlZV9uaXRlcl9kZXNjICosCisJCQkJICAgICB0cmFuc2Zvcm1fY2FsbGJhY2ssIHZvaWQgKik7Citib29sIGNvbnRhaW5zX2Fibm9ybWFsX3NzYV9uYW1lX3AgKHRyZWUpOworYm9vbCBzdG10X2RvbWluYXRlc19zdG10X3AgKGdpbXBsZSwgZ2ltcGxlKTsKKworLyogSW4gdHJlZS1zc2EtZGNlLmMgKi8KK3ZvaWQgbWFya192aXJ0dWFsX29wZXJhbmRfZm9yX3JlbmFtaW5nICh0cmVlKTsKK3ZvaWQgbWFya192aXJ0dWFsX3BoaV9yZXN1bHRfZm9yX3JlbmFtaW5nIChnaW1wbGUpOworCisvKiBJbiB0cmVlLXNzYS10aHJlYWRlZGdlLmMgKi8KK2V4dGVybiB2b2lkIHRocmVhZGVkZ2VfaW5pdGlhbGl6ZV92YWx1ZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgdGhyZWFkZWRnZV9maW5hbGl6ZV92YWx1ZXMgKHZvaWQpOworZXh0ZXJuIHZlYzx0cmVlPiBzc2FfbmFtZV92YWx1ZXM7CisjZGVmaW5lIFNTQV9OQU1FX1ZBTFVFKHgpIFwKKyAgICAoU1NBX05BTUVfVkVSU0lPTih4KSA8IHNzYV9uYW1lX3ZhbHVlcy5sZW5ndGggKCkgXAorICAgICA/IHNzYV9uYW1lX3ZhbHVlc1tTU0FfTkFNRV9WRVJTSU9OKHgpXSBcCisgICAgIDogTlVMTF9UUkVFKQorZXh0ZXJuIHZvaWQgc2V0X3NzYV9uYW1lX3ZhbHVlICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIHBvdGVudGlhbGx5X3RocmVhZGFibGVfYmxvY2sgKGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHRocmVhZF9hY3Jvc3NfZWRnZSAoZ2ltcGxlLCBlZGdlLCBib29sLAorCQkJCXZlYzx0cmVlPiAqLCB0cmVlICgqKSAoZ2ltcGxlLCBnaW1wbGUpKTsKK2V4dGVybiB2b2lkIHByb3BhZ2F0ZV90aHJlYWRlZF9ibG9ja19kZWJ1Z19pbnRvIChiYXNpY19ibG9jaywgYmFzaWNfYmxvY2spOworCisvKiBJbiB0cmVlLXNzYS1sb29wLWltLmMgICovCisvKiBUaGUgcG9zc2liaWxpdGllcyBvZiBzdGF0ZW1lbnQgbW92ZW1lbnQuICAqLworCitlbnVtIG1vdmVfcG9zCisgIHsKKyAgICBNT1ZFX0lNUE9TU0lCTEUsCQkvKiBObyBtb3ZlbWVudCAtLSBzaWRlIGVmZmVjdCBleHByZXNzaW9uLiAgKi8KKyAgICBNT1ZFX1BSRVNFUlZFX0VYRUNVVElPTiwJLyogTXVzdCBub3QgY2F1c2UgdGhlIG5vbi1leGVjdXRlZCBzdGF0ZW1lbnQKKwkJCQkgICBiZWNvbWUgZXhlY3V0ZWQgLS0gbWVtb3J5IGFjY2Vzc2VzLCAuLi4gKi8KKyAgICBNT1ZFX1BPU1NJQkxFCQkvKiBVbmxpbWl0ZWQgbW92ZW1lbnQuICAqLworICB9OworZXh0ZXJuIGVudW0gbW92ZV9wb3MgbW92ZW1lbnRfcG9zc2liaWxpdHkgKGdpbXBsZSk7CitjaGFyICpnZXRfbHNtX3RtcF9uYW1lICh0cmVlLCB1bnNpZ25lZCk7CisKKy8qIEluIHRyZWUtZmxvdy1pbmxpbmUuaCAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB1bm1vZGlmaWFibGVfdmFyX3AgKGNvbnN0X3RyZWUpOworc3RhdGljIGlubGluZSBib29sIHJlZl9jb250YWluc19hcnJheV9yZWYgKGNvbnN0X3RyZWUpOworCisvKiBJbiB0cmVlLWVoLmMgICovCitleHRlcm4gdm9pZCBtYWtlX2VoX2VkZ2VzIChnaW1wbGUpOworZXh0ZXJuIGJvb2wgbWFrZV9laF9kaXNwYXRjaF9lZGdlcyAoZ2ltcGxlKTsKK2V4dGVybiBlZGdlIHJlZGlyZWN0X2VoX2VkZ2UgKGVkZ2UsIGJhc2ljX2Jsb2NrKTsKK2V4dGVybiB2b2lkIHJlZGlyZWN0X2VoX2Rpc3BhdGNoX2VkZ2UgKGdpbXBsZSwgZWRnZSwgYmFzaWNfYmxvY2spOworZXh0ZXJuIGJvb2wgc3RtdF9jb3VsZF90aHJvd19wIChnaW1wbGUpOworZXh0ZXJuIGJvb2wgc3RtdF9jYW5fdGhyb3dfaW50ZXJuYWwgKGdpbXBsZSk7CitleHRlcm4gYm9vbCBzdG10X2Nhbl90aHJvd19leHRlcm5hbCAoZ2ltcGxlKTsKK2V4dGVybiB2b2lkIGFkZF9zdG10X3RvX2VoX2xwX2ZuIChzdHJ1Y3QgZnVuY3Rpb24gKiwgZ2ltcGxlLCBpbnQpOworZXh0ZXJuIHZvaWQgYWRkX3N0bXRfdG9fZWhfbHAgKGdpbXBsZSwgaW50KTsKK2V4dGVybiBib29sIHJlbW92ZV9zdG10X2Zyb21fZWhfbHAgKGdpbXBsZSk7CitleHRlcm4gYm9vbCByZW1vdmVfc3RtdF9mcm9tX2VoX2xwX2ZuIChzdHJ1Y3QgZnVuY3Rpb24gKiwgZ2ltcGxlKTsKK2V4dGVybiBpbnQgbG9va3VwX3N0bXRfZWhfbHBfZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBnaW1wbGUpOworZXh0ZXJuIGludCBsb29rdXBfc3RtdF9laF9scCAoZ2ltcGxlKTsKK2V4dGVybiBib29sIG1heWJlX2NsZWFuX2VoX3N0bXRfZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBnaW1wbGUpOworZXh0ZXJuIGJvb2wgbWF5YmVfY2xlYW5fZWhfc3RtdCAoZ2ltcGxlKTsKK2V4dGVybiBib29sIG1heWJlX2NsZWFuX29yX3JlcGxhY2VfZWhfc3RtdCAoZ2ltcGxlLCBnaW1wbGUpOworZXh0ZXJuIGJvb2wgbWF5YmVfZHVwbGljYXRlX2VoX3N0bXRfZm4gKHN0cnVjdCBmdW5jdGlvbiAqLCBnaW1wbGUsCisJCQkJCXN0cnVjdCBmdW5jdGlvbiAqLCBnaW1wbGUsCisJCQkJCXN0cnVjdCBwb2ludGVyX21hcF90ICosIGludCk7CitleHRlcm4gYm9vbCBtYXliZV9kdXBsaWNhdGVfZWhfc3RtdCAoZ2ltcGxlLCBnaW1wbGUpOworZXh0ZXJuIGJvb2wgdmVyaWZ5X2VoX2VkZ2VzIChnaW1wbGUpOworZXh0ZXJuIGJvb2wgdmVyaWZ5X2VoX2Rpc3BhdGNoX2VkZ2UgKGdpbXBsZSk7CitleHRlcm4gdm9pZCBtYXliZV9yZW1vdmVfdW5yZWFjaGFibGVfaGFuZGxlcnMgKHZvaWQpOworCisvKiBJbiB0cmVlLXNzYS1wcmUuYyAgKi8KK3ZvaWQgZGVidWdfdmFsdWVfZXhwcmVzc2lvbnMgKHVuc2lnbmVkIGludCk7CisKKy8qIEluIHRyZWUtbG9vcC1saW5lYXIuYyAgKi8KK2V4dGVybiB2b2lkIGxpbmVhcl90cmFuc2Zvcm1fbG9vcHMgKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIHBlcmZlY3RfbG9vcF9uZXN0X2RlcHRoIChzdHJ1Y3QgbG9vcCAqKTsKKworLyogSW4gZ3JhcGhpdGUuYyAgKi8KK2V4dGVybiB2b2lkIGdyYXBoaXRlX3RyYW5zZm9ybV9sb29wcyAodm9pZCk7CisKKy8qIEluIHRyZWUtZGF0YS1yZWYuYyAgKi8KK2V4dGVybiB2b2lkIHRyZWVfY2hlY2tfZGF0YV9kZXBzICh2b2lkKTsKKworLyogSW4gdHJlZS1zc2EtbG9vcC1pdm9wdHMuYyAgKi8KK2Jvb2wgZXhwcl9pbnZhcmlhbnRfaW5fbG9vcF9wIChzdHJ1Y3QgbG9vcCAqLCB0cmVlKTsKK2Jvb2wgc3RtdF9pbnZhcmlhbnRfaW5fbG9vcF9wIChzdHJ1Y3QgbG9vcCAqLCBnaW1wbGUpOworYm9vbCBtdWx0aXBsaWVyX2FsbG93ZWRfaW5fYWRkcmVzc19wIChIT1NUX1dJREVfSU5ULCBlbnVtIG1hY2hpbmVfbW9kZSwKKwkJCQkgICAgICBhZGRyX3NwYWNlX3QpOworYm9vbCBtYXlfYmVfbm9uYWRkcmVzc2FibGVfcCAodHJlZSBleHByKTsKKworLyogSW4gdHJlZS1zc2EtdGhyZWFkdXBkYXRlLmMuICAqLworZXh0ZXJuIGJvb2wgdGhyZWFkX3Rocm91Z2hfYWxsX2Jsb2NrcyAoYm9vbCk7CitleHRlcm4gdm9pZCByZWdpc3Rlcl9qdW1wX3RocmVhZCAoZWRnZSwgZWRnZSwgZWRnZSk7CisKKy8qIEluIGdpbXBsaWZ5LmMgICovCit0cmVlIGZvcmNlX2dpbXBsZV9vcGVyYW5kXzEgKHRyZWUsIGdpbXBsZV9zZXEgKiwgZ2ltcGxlX3ByZWRpY2F0ZSwgdHJlZSk7Cit0cmVlIGZvcmNlX2dpbXBsZV9vcGVyYW5kICh0cmVlLCBnaW1wbGVfc2VxICosIGJvb2wsIHRyZWUpOwordHJlZSBmb3JjZV9naW1wbGVfb3BlcmFuZF9nc2lfMSAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwgdHJlZSwKKwkJCQkgZ2ltcGxlX3ByZWRpY2F0ZSwgdHJlZSwKKwkJCQkgYm9vbCwgZW51bSBnc2lfaXRlcmF0b3JfdXBkYXRlKTsKK3RyZWUgZm9yY2VfZ2ltcGxlX29wZXJhbmRfZ3NpIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCB0cmVlLCBib29sLCB0cmVlLAorCQkJICAgICAgIGJvb2wsIGVudW0gZ3NpX2l0ZXJhdG9yX3VwZGF0ZSk7Cit0cmVlIGdpbXBsZV9mb2xkX2luZGlyZWN0X3JlZiAodHJlZSk7CisKKy8qIEluIHRyZWUtc3NhLWxpdmUuYyAqLworZXh0ZXJuIHZvaWQgcmVtb3ZlX3VudXNlZF9sb2NhbHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZHVtcF9zY29wZV9ibG9ja3MgKEZJTEUgKiwgaW50KTsKK2V4dGVybiB2b2lkIGRlYnVnX3Njb3BlX2Jsb2NrcyAoaW50KTsKK2V4dGVybiB2b2lkIGRlYnVnX3Njb3BlX2Jsb2NrICh0cmVlLCBpbnQpOworCisvKiBJbiB0cmVlLXNzYS1hZGRyZXNzLmMgICovCisKKy8qIERlc2NyaXB0aW9uIG9mIGEgbWVtb3J5IGFkZHJlc3MuICAqLworCitzdHJ1Y3QgbWVtX2FkZHJlc3MKK3sKKyAgdHJlZSBzeW1ib2wsIGJhc2UsIGluZGV4LCBzdGVwLCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgYWZmaW5lX3RyZWVfY29tYmluYXRpb247Cit0cmVlIGNyZWF0ZV9tZW1fcmVmIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqLCB0cmVlLAorCQkgICAgIHN0cnVjdCBhZmZpbmVfdHJlZV9jb21iaW5hdGlvbiAqLCB0cmVlLCB0cmVlLCB0cmVlLCBib29sKTsKK3J0eCBhZGRyX2Zvcl9tZW1fcmVmIChzdHJ1Y3QgbWVtX2FkZHJlc3MgKiwgYWRkcl9zcGFjZV90LCBib29sKTsKK3ZvaWQgZ2V0X2FkZHJlc3NfZGVzY3JpcHRpb24gKHRyZWUsIHN0cnVjdCBtZW1fYWRkcmVzcyAqKTsKK3RyZWUgbWF5YmVfZm9sZF90bXIgKHRyZWUpOworCit1bnNpZ25lZCBpbnQgZXhlY3V0ZV9maXh1cF9jZmcgKHZvaWQpOworYm9vbCBmaXh1cF9ub3JldHVybl9jYWxsIChnaW1wbGUgc3RtdCk7CisKKy8qIEluIGlwYS1wdXJlLWNvbnN0LmMgICovCit2b2lkIHdhcm5fZnVuY3Rpb25fbm9yZXR1cm4gKHRyZWUpOworCisvKiBJbiB0cmVlLXNzYS10ZXIuYyAgKi8KK2Jvb2wgc3RtdF9pc19yZXBsYWNlYWJsZV9wIChnaW1wbGUpOworCisvKiBJbiB0cmVlLXBhcmxvb3BzLmMgICovCitib29sIHBhcmFsbGVsaXplZF9mdW5jdGlvbl9wICh0cmVlKTsKKworI2luY2x1ZGUgInRyZWUtZmxvdy1pbmxpbmUuaCIKKwordm9pZCBzd2FwX3RyZWVfb3BlcmFuZHMgKGdpbXBsZSwgdHJlZSAqLCB0cmVlICopOworCisjZW5kaWYgLyogX1RSRUVfRkxPV19IICAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtaW5saW5lLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1pbmxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjVkZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtaW5saW5lLmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qIFRyZWUgaW5saW5pbmcgaG9va3MgYW5kIGRlY2xhcmF0aW9ucy4KKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19UUkVFX0lOTElORV9ICisjZGVmaW5lIEdDQ19UUkVFX0lOTElORV9ICisKK3N0cnVjdCBjZ3JhcGhfZWRnZTsKKworLyogSW5kaWNhdGUgdGhlIGRlc2lyZWQgYmVoYXZpb3Igd3J0IGNhbGwgZ3JhcGggZWRnZXMuICBXZSBjYW4gZWl0aGVyCisgICBkdXBsaWNhdGUgdGhlIGVkZ2UgKGlubGluaW5nLCBjbG9uaW5nKSwgbW92ZSB0aGUgZWRnZSAodmVyc2lvbmluZywKKyAgIHBhcmFsbGVsaXphdGlvbiksIG9yIG1vdmUgdGhlIGVkZ2VzIG9mIHRoZSBjbG9uZXMgKHNhdmluZykuICAqLworCitlbnVtIGNvcHlfYm9keV9jZ2Vfd2hpY2gKK3sKKyAgQ0JfQ0dFX0RVUExJQ0FURSwKKyAgQ0JfQ0dFX01PVkUsCisgIENCX0NHRV9NT1ZFX0NMT05FUworfTsKKworLyogRGF0YSByZXF1aXJlZCBmb3IgZnVuY3Rpb24gYm9keSBkdXBsaWNhdGlvbi4gICovCisKK3R5cGVkZWYgc3RydWN0IGNvcHlfYm9keV9kYXRhCit7CisgIC8qIEZVTkNUSU9OX0RFQ0wgZm9yIGZ1bmN0aW9uIGJlaW5nIGlubGluZWQsIG9yIGluIGdlbmVyYWwgdGhlCisgICAgIHNvdXJjZSBmdW5jdGlvbiBwcm92aWRpbmcgdGhlIG9yaWdpbmFsIHRyZWVzLiAgKi8KKyAgdHJlZSBzcmNfZm47CisKKyAgLyogRlVOQ1RJT05fREVDTCBmb3IgZnVuY3Rpb24gYmVpbmcgaW5saW5lZCBpbnRvLCBvciBpbiBnZW5lcmFsCisgICAgIHRoZSBkZXN0aW5hdGlvbiBmdW5jdGlvbiByZWNlaXZpbmcgdGhlIG5ldyB0cmVlcy4gICovCisgIHRyZWUgZHN0X2ZuOworCisgIC8qIENhbGxncmFwaCBub2RlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uICAqLworICBzdHJ1Y3QgY2dyYXBoX25vZGUgKnNyY19ub2RlOworCisgIC8qIENhbGxncmFwaCBub2RlIG9mIHRoZSBkZXN0aW5hdGlvbiBmdW5jdGlvbi4gICovCisgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqZHN0X25vZGU7CisKKyAgLyogc3RydWN0IGZ1bmN0aW9uIGZvciBmdW5jdGlvbiBiZWluZyBpbmxpbmVkLiAgVXN1YWxseSB0aGlzIGlzIHRoZSBzYW1lCisgICAgIGFzIERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChzcmNfZm4pLCBidXQgY2FuIGJlIGRpZmZlcmVudCBpZiBzYXZlZF9jZmcKKyAgICAgYW5kIHNhdmVkX2VoIGFyZSBpbiB1c2UuICAqLworICBzdHJ1Y3QgZnVuY3Rpb24gKnNyY19jZnVuOworCisgIC8qIFRoZSBWQVJfREVDTCBmb3IgdGhlIHJldHVybiB2YWx1ZS4gICovCisgIHRyZWUgcmV0dmFyOworCisgIC8qIFRoZSBtYXAgZnJvbSBsb2NhbCBkZWNsYXJhdGlvbnMgaW4gdGhlIGlubGluZWQgZnVuY3Rpb24gdG8KKyAgICAgZXF1aXZhbGVudHMgaW4gdGhlIGZ1bmN0aW9uIGludG8gd2hpY2ggaXQgaXMgYmVpbmcgaW5saW5lZC4gICovCisgIHN0cnVjdCBwb2ludGVyX21hcF90ICpkZWNsX21hcDsKKworICAvKiBDcmVhdGUgYSBuZXcgZGVjbCB0byByZXBsYWNlIERFQ0wgaW4gdGhlIGRlc3RpbmF0aW9uIGZ1bmN0aW9uLiAgKi8KKyAgdHJlZSAoKmNvcHlfZGVjbCkgKHRyZWUsIHN0cnVjdCBjb3B5X2JvZHlfZGF0YSAqKTsKKworICAvKiBDdXJyZW50IEJMT0NLLiAgKi8KKyAgdHJlZSBibG9jazsKKworICAvKiBHSU1QTEVfQ0FMTCBpZiB2YSBhcmcgcGFyYW1ldGVyIHBhY2tzIHNob3VsZCBiZSBleHBhbmRlZCBvciBOVUxMCisgICAgIGlzIG5vdC4gICovCisgIGdpbXBsZSBnaW1wbGVfY2FsbDsKKworICAvKiBFeGNlcHRpb24gbGFuZGluZyBwYWQgdGhlIGlubGluZWQgY2FsbCBsaWVzIGluLiAgKi8KKyAgaW50IGVoX2xwX25yOworCisgIC8qIE1hcHMgcmVnaW9uIGFuZCBsYW5kaW5nIHBhZCBzdHJ1Y3R1cmVzIGZyb20gdGhlIGZ1bmN0aW9uIGJlaW5nIGNvcGllZAorICAgICB0byBkdXBsaWNhdGVzIGNyZWF0ZWQgd2l0aGluIHRoZSBmdW5jdGlvbiB3ZSBpbmxpbmUgaW50by4gICovCisgIHN0cnVjdCBwb2ludGVyX21hcF90ICplaF9tYXA7CisKKyAgLyogV2UgdXNlIHRoZSBzYW1lIG1lY2hhbmlzbSBkbyBhbGwgc29ydHMgb2YgZGlmZmVyZW50IHRoaW5ncy4gIFJhdGhlcgorICAgICB0aGFuIGVudW1lcmF0aW5nIHRoZSBkaWZmZXJlbnQgY2FzZXMsIHdlIGNhdGVnb3JpemUgdGhlIGJlaGF2aW9yCisgICAgIGluIHRoZSB2YXJpb3VzIHNpdHVhdGlvbnMuICAqLworCisgIC8qIFdoYXQgdG8gZG8gd2l0aCBjYWxsIGdyYXBoIGVkZ2VzLiAgKi8KKyAgZW51bSBjb3B5X2JvZHlfY2dlX3doaWNoIHRyYW5zZm9ybV9jYWxsX2dyYXBoX2VkZ2VzOworCisgIC8qIFRydWUgaWYgYSBuZXcgQ0ZHIHNob3VsZCBiZSBjcmVhdGVkLiAgRmFsc2UgZm9yIGlubGluaW5nLCB0cnVlIGZvcgorICAgICBldmVyeXRoaW5nIGVsc2UuICAqLworICBib29sIHRyYW5zZm9ybV9uZXdfY2ZnOworCisgIC8qIFRydWUgaWYgUkVUVVJOX0VYUFJzIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byBqdXN0IHRoZSBjb250YWluZWQKKyAgICAgTU9ESUZZX0VYUFIuICBUaGUgYnJhbmNoIHNlbWFudGljcyBvZiB0aGUgcmV0dXJuIHdpbGwgYmUgaGFuZGxlZAorICAgICBieSBtYW5pcHVsYXRpbmcgdGhlIENGRyByYXRoZXIgdGhhbiBhIHN0YXRlbWVudC4gICovCisgIGJvb2wgdHJhbnNmb3JtX3JldHVybl90b19tb2RpZnk7CisKKyAgLyogVHJ1ZSBpZiB0aGlzIHN0YXRlbWVudCB3aWxsIG5lZWQgdG8gYmUgcmVnaW1wbGlmaWVkLiAgKi8KKyAgYm9vbCByZWdpbXBsaWZ5OworCisgIC8qIFRydWUgaWYgdHJlZXMgc2hvdWxkIG5vdCBiZSB1bnNoYXJlZC4gICovCisgIGJvb2wgZG9fbm90X3Vuc2hhcmU7CisKKyAgLyogPiAwIGlmIHdlIGFyZSByZW1hcHBpbmcgYSB0eXBlIGN1cnJlbnRseS4gICovCisgIGludCByZW1hcHBpbmdfdHlwZV9kZXB0aDsKKworICAvKiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGR1cGxpY2F0aW5nIEJMT0NLIG5vZGVzLiAgKi8KKyAgdm9pZCAoKnRyYW5zZm9ybV9sYW5nX2luc2VydF9ibG9jaykgKHRyZWUpOworCisgIC8qIFN0YXRlbWVudHMgdGhhdCBtaWdodCBiZSBwb3NzaWJseSBmb2xkZWQuICAqLworICBzdHJ1Y3QgcG9pbnRlcl9zZXRfdCAqc3RhdGVtZW50c190b19mb2xkOworCisgIC8qIEVudHJ5IGJhc2ljIGJsb2NrIHRvIGN1cnJlbnRseSBjb3BpZWQgYm9keS4gICovCisgIGJhc2ljX2Jsb2NrIGVudHJ5X2JiOworCisgIC8qIERlYnVnIHN0YXRlbWVudHMgdGhhdCBuZWVkIHByb2Nlc3NpbmcuICAqLworICB2ZWM8Z2ltcGxlPiBkZWJ1Z19zdG10czsKKworICAvKiBBIG1hcCBmcm9tIGxvY2FsIGRlY2xhcmF0aW9ucyBpbiB0aGUgaW5saW5lZCBmdW5jdGlvbiB0bworICAgICBlcXVpdmFsZW50cyBpbiB0aGUgZnVuY3Rpb24gaW50byB3aGljaCBpdCBpcyBiZWluZyBpbmxpbmVkLCB3aGVyZQorICAgICB0aGUgb3JpZ2luYWxzIGhhdmUgYmVlbiBtYXBwZWQgdG8gYSB2YWx1ZSByYXRoZXIgdGhhbiB0byBhCisgICAgIHZhcmlhYmxlLiAgKi8KKyAgc3RydWN0IHBvaW50ZXJfbWFwX3QgKmRlYnVnX21hcDsKK30gY29weV9ib2R5X2RhdGE7CisKKy8qIFdlaWdodHMgb2YgY29uc3RydWN0aW9ucyBmb3IgZXN0aW1hdGVfbnVtX2luc25zLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZW5pX3dlaWdodHNfZAoreworICAvKiBDb3N0IHBlciBjYWxsLiAgKi8KKyAgdW5zaWduZWQgY2FsbF9jb3N0OworCisgIC8qIENvc3QgcGVyIGluZGlyZWN0IGNhbGwuICAqLworICB1bnNpZ25lZCBpbmRpcmVjdF9jYWxsX2Nvc3Q7CisKKyAgLyogQ29zdCBwZXIgY2FsbCB0byBhIHRhcmdldCBzcGVjaWZpYyBidWlsdGluICovCisgIHVuc2lnbmVkIHRhcmdldF9idWlsdGluX2NhbGxfY29zdDsKKworICAvKiBDb3N0IG9mICJleHBlbnNpdmUiIGRpdiBhbmQgbW9kIG9wZXJhdGlvbnMuICAqLworICB1bnNpZ25lZCBkaXZfbW9kX2Nvc3Q7CisKKyAgLyogQ29zdCBmb3Igb21wIGNvbnN0cnVjdC4gICovCisgIHVuc2lnbmVkIG9tcF9jb3N0OworCisgIC8qIENvc3QgZm9yIHRtIHRyYW5zYWN0aW9uLiAgKi8KKyAgdW5zaWduZWQgdG1fY29zdDsKKworICAvKiBDb3N0IG9mIHJldHVybi4gICovCisgIHVuc2lnbmVkIHJldHVybl9jb3N0OworCisgIC8qIFRydWUgd2hlbiB0aW1lIG9mIHN0YXRlbW50IHNob3VsZCBiZSBlc3RpbWF0ZWQuICBUaHVzIGkuZQorICAgICBjb3N0IG9mIHN3aXRjaCBzdGF0ZW1lbnQgaXMgbG9nYXJpdGhtaWMgcmF0aGVyIHRoYW4gbGluZWFyIGluIG51bWJlcgorICAgICBvZiBjYXNlcy4gICovCisgIGJvb2wgdGltZV9iYXNlZDsKK30gZW5pX3dlaWdodHM7CisKKy8qIFdlaWdodHMgdGhhdCBlc3RpbWF0ZV9udW1faW5zbnMgdXNlcyBmb3IgaGV1cmlzdGljcyBpbiBpbmxpbmluZy4gICovCisKK2V4dGVybiBlbmlfd2VpZ2h0cyBlbmlfaW5saW5pbmdfd2VpZ2h0czsKKworLyogV2VpZ2h0cyB0aGF0IGVzdGltYXRlX251bV9pbnNucyB1c2VzIHRvIGVzdGltYXRlIHRoZSBzaXplIG9mIHRoZQorICAgcHJvZHVjZWQgY29kZS4gICovCisKK2V4dGVybiBlbmlfd2VpZ2h0cyBlbmlfc2l6ZV93ZWlnaHRzOworCisvKiBXZWlnaHRzIHRoYXQgZXN0aW1hdGVfbnVtX2luc25zIHVzZXMgdG8gZXN0aW1hdGUgdGhlIHRpbWUgbmVjZXNzYXJ5CisgICB0byBleGVjdXRlIHRoZSBwcm9kdWNlZCBjb2RlLiAgKi8KKworZXh0ZXJuIGVuaV93ZWlnaHRzIGVuaV90aW1lX3dlaWdodHM7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMuICAqLworCitleHRlcm4gdHJlZSBjb3B5X3RyZWVfYm9keV9yICh0cmVlICosIGludCAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgaW5zZXJ0X2RlY2xfbWFwIChjb3B5X2JvZHlfZGF0YSAqLCB0cmVlLCB0cmVlKTsKKwordW5zaWduZWQgaW50IG9wdGltaXplX2lubGluZV9jYWxscyAodHJlZSk7Cit0cmVlIG1heWJlX2lubGluZV9jYWxsX2luX2V4cHIgKHRyZWUpOworYm9vbCB0cmVlX2lubGluYWJsZV9mdW5jdGlvbl9wICh0cmVlKTsKK3RyZWUgY29weV90cmVlX3IgKHRyZWUgKiwgaW50ICosIHZvaWQgKik7Cit0cmVlIGNvcHlfZGVjbF9ub19jaGFuZ2UgKHRyZWUgZGVjbCwgY29weV9ib2R5X2RhdGEgKmlkKTsKK2ludCBlc3RpbWF0ZV9tb3ZlX2Nvc3QgKHRyZWUgdHlwZSk7CitpbnQgZXN0aW1hdGVfbnVtX2luc25zIChnaW1wbGUsIGVuaV93ZWlnaHRzICopOworaW50IGVzdGltYXRlX251bV9pbnNuc19mbiAodHJlZSwgZW5pX3dlaWdodHMgKik7CitpbnQgY291bnRfaW5zbnNfc2VxIChnaW1wbGVfc2VxLCBlbmlfd2VpZ2h0cyAqKTsKK2Jvb2wgdHJlZV92ZXJzaW9uYWJsZV9mdW5jdGlvbl9wICh0cmVlKTsKKworZXh0ZXJuIHRyZWUgcmVtYXBfZGVjbCAodHJlZSBkZWNsLCBjb3B5X2JvZHlfZGF0YSAqaWQpOworZXh0ZXJuIHRyZWUgcmVtYXBfdHlwZSAodHJlZSB0eXBlLCBjb3B5X2JvZHlfZGF0YSAqaWQpOworZXh0ZXJuIGdpbXBsZV9zZXEgY29weV9naW1wbGVfc2VxX2FuZF9yZXBsYWNlX2xvY2FscyAoZ2ltcGxlX3NlcSBzZXEpOworCitleHRlcm4gSE9TVF9XSURFX0lOVCBlc3RpbWF0ZWRfc3RhY2tfZnJhbWVfc2l6ZSAoc3RydWN0IGNncmFwaF9ub2RlICopOworCisjZW5kaWYgLyogR0NDX1RSRUVfSU5MSU5FX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLWl0ZXJhdG9yLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1pdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTkzODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1pdGVyYXRvci5oCkBAIC0wLDAgKzEsMTIxIEBACisvKiBJdGVyYXRvciByb3V0aW5lcyBmb3IgbWFuaXB1bGF0aW5nIEdFTkVSSUMgdHJlZSBzdGF0ZW1lbnQgbGlzdC4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEByZWRoYXQuY29tPgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorYW55IGxhdGVyIHZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisvKiBUaGlzIGZpbGUgaXMgZGVwZW5kZW50IHVwb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRyZWUncy4gSXQgcHJvdmlkZXMgYW4KKyAgIGFic3RyYWN0IGludGVyZmFjZSB0byB0aGUgdHJlZSBvYmplY3RzIHN1Y2ggdGhhdCBpZiBhbGwgdHJlZSBjcmVhdGlvbiBhbmQKKyAgIG1hbmlwdWxhdGlvbnMgYXJlIGRvbmUgdGhyb3VnaCB0aGlzIGludGVyZmFjZSwgd2UgY2FuIGVhc2lseSBjaGFuZ2UgdGhlCisgICBpbXBsZW1lbnRhdGlvbiBvZiB0cmVlJ3MsIGFuZCBub3QgaW1wYWN0IG90aGVyIGNvZGUuICAqLworCisjaWZuZGVmIEdDQ19UUkVFX0lURVJBVE9SX0gKKyNkZWZpbmUgR0NDX1RSRUVfSVRFUkFUT1JfSCAxCisKKy8qIEl0ZXJhdG9yIG9iamVjdCBmb3IgR0VORVJJQyBvciBHSU1QTEUgVFJFRSBzdGF0ZW1lbnRzLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlICpwdHI7CisgIHRyZWUgY29udGFpbmVyOworfSB0cmVlX3N0bXRfaXRlcmF0b3I7CisKK3N0YXRpYyBpbmxpbmUgdHJlZV9zdG10X2l0ZXJhdG9yCit0c2lfc3RhcnQgKHRyZWUgdCkKK3sKKyAgdHJlZV9zdG10X2l0ZXJhdG9yIGk7CisKKyAgaS5wdHIgPSBTVEFURU1FTlRfTElTVF9IRUFEICh0KTsKKyAgaS5jb250YWluZXIgPSB0OworCisgIHJldHVybiBpOworfQorCitzdGF0aWMgaW5saW5lIHRyZWVfc3RtdF9pdGVyYXRvcgordHNpX2xhc3QgKHRyZWUgdCkKK3sKKyAgdHJlZV9zdG10X2l0ZXJhdG9yIGk7CisKKyAgaS5wdHIgPSBTVEFURU1FTlRfTElTVF9UQUlMICh0KTsKKyAgaS5jb250YWluZXIgPSB0OworCisgIHJldHVybiBpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK3RzaV9lbmRfcCAodHJlZV9zdG10X2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiBpLnB0ciA9PSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK3RzaV9vbmVfYmVmb3JlX2VuZF9wICh0cmVlX3N0bXRfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuIGkucHRyICE9IE5VTEwgJiYgaS5wdHItPm5leHQgPT0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0c2lfbmV4dCAodHJlZV9zdG10X2l0ZXJhdG9yICppKQoreworICBpLT5wdHIgPSBpLT5wdHItPm5leHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordHNpX3ByZXYgKHRyZWVfc3RtdF9pdGVyYXRvciAqaSkKK3sKKyAgaS0+cHRyID0gaS0+cHRyLT5wcmV2OworfQorCitzdGF0aWMgaW5saW5lIHRyZWUgKgordHNpX3N0bXRfcHRyICh0cmVlX3N0bXRfaXRlcmF0b3IgaSkKK3sKKyAgcmV0dXJuICZpLnB0ci0+c3RtdDsKK30KKworc3RhdGljIGlubGluZSB0cmVlCit0c2lfc3RtdCAodHJlZV9zdG10X2l0ZXJhdG9yIGkpCit7CisgIHJldHVybiBpLnB0ci0+c3RtdDsKK30KKworZW51bSB0c2lfaXRlcmF0b3JfdXBkYXRlCit7CisgIFRTSV9ORVdfU1RNVCwJCS8qIE9ubHkgdmFsaWQgd2hlbiBzaW5nbGUgc3RhdGVtZW50IGlzIGFkZGVkLCBtb3ZlCisJCQkgICBpdGVyYXRvciB0byBpdC4gICovCisgIFRTSV9TQU1FX1NUTVQsCS8qIExlYXZlIHRoZSBpdGVyYXRvciBhdCB0aGUgc2FtZSBzdGF0ZW1lbnQuICAqLworICBUU0lfQ0hBSU5fU1RBUlQsCS8qIE9ubHkgdmFsaWQgd2hlbiBjaGFpbiBvZiBzdGF0ZW1lbnRzIGlzIGFkZGVkLCBtb3ZlCisJCQkgICBpdGVyYXRvciB0byB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBjaGFpbi4gICovCisgIFRTSV9DSEFJTl9FTkQsCS8qIE9ubHkgdmFsaWQgd2hlbiBjaGFpbiBvZiBzdGF0ZW1lbnRzIGlzIGFkZGVkLCBtb3ZlCisJCQkgICBpdGVyYXRvciB0byB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gdGhlIGNoYWluLiAgKi8KKyAgVFNJX0NPTlRJTlVFX0xJTktJTkcJLyogTW92ZSBpdGVyYXRvciB0byB3aGF0ZXZlciBwb3NpdGlvbiBpcyBzdWl0YWJsZSBmb3IKKwkJCSAgIGxpbmtpbmcgb3RoZXIgc3RhdGVtZW50cy9jaGFpbnMgb2Ygc3RhdGVtZW50cyBpbgorCQkJICAgdGhlIHNhbWUgZGlyZWN0aW9uLiAgKi8KK307CisKK2V4dGVybiB2b2lkIHRzaV9saW5rX2JlZm9yZSAodHJlZV9zdG10X2l0ZXJhdG9yICosIHRyZWUsCisJCQkgICAgIGVudW0gdHNpX2l0ZXJhdG9yX3VwZGF0ZSk7CitleHRlcm4gdm9pZCB0c2lfbGlua19hZnRlciAodHJlZV9zdG10X2l0ZXJhdG9yICosIHRyZWUsCisJCQkgICAgZW51bSB0c2lfaXRlcmF0b3JfdXBkYXRlKTsKKworZXh0ZXJuIHZvaWQgdHNpX2RlbGluayAodHJlZV9zdG10X2l0ZXJhdG9yICopOworCitleHRlcm4gdHJlZSBhbGxvY19zdG10X2xpc3QgKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9zdG10X2xpc3QgKHRyZWUpOworZXh0ZXJuIHZvaWQgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0ICh0cmVlLCB0cmVlICopOworZXh0ZXJuIHZvaWQgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0X2ZvcmNlICh0cmVlLCB0cmVlICopOworCisjZW5kaWYgLyogR0NDX1RSRUVfSVRFUkFUT1JfSCAgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLXBhc3MuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLXBhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzgzOTIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtcGFzcy5oCkBAIC0wLDAgKzEsNTYwIEBACisvKiBEZWZpbml0aW9ucyBmb3IgZGVzY3JpYmluZyBvbmUgdHJlZS1zc2Egb3B0aW1pemF0aW9uIHBhc3MuCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgSGVuZGVyc29uIDxydGhAcmVkaGF0LmNvbT4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKworI2lmbmRlZiBHQ0NfVFJFRV9QQVNTX0gKKyNkZWZpbmUgR0NDX1RSRUVfUEFTU19IIDEKKworI2luY2x1ZGUgInRpbWV2YXIuaCIKKyNpbmNsdWRlICJkdW1wZmlsZS5oIgorCisvKiBPcHRpbWl6YXRpb24gcGFzcyB0eXBlLiAgKi8KK2VudW0gb3B0X3Bhc3NfdHlwZQoreworICBHSU1QTEVfUEFTUywKKyAgUlRMX1BBU1MsCisgIFNJTVBMRV9JUEFfUEFTUywKKyAgSVBBX1BBU1MKK307CisKKy8qIERlc2NyaWJlIG9uZSBwYXNzOyB0aGlzIGlzIHRoZSBjb21tb24gcGFydCBzaGFyZWQgYWNyb3NzIGRpZmZlcmVudCBwYXNzCisgICB0eXBlcy4gICovCitzdHJ1Y3Qgb3B0X3Bhc3MKK3sKKyAgLyogT3B0aW1pemF0aW9uIHBhc3MgdHlwZS4gICovCisgIGVudW0gb3B0X3Bhc3NfdHlwZSB0eXBlOworCisgIC8qIFRlcnNlIG5hbWUgb2YgdGhlIHBhc3MgdXNlZCBhcyBhIGZyYWdtZW50IG9mIHRoZSBkdW1wIGZpbGUKKyAgICAgbmFtZS4gIElmIHRoZSBuYW1lIHN0YXJ0cyB3aXRoIGEgc3Rhciwgbm8gZHVtcCBoYXBwZW5zLiAqLworICBjb25zdCBjaGFyICpuYW1lOworCisgIC8qIFRoZSAtZm9wdC1pbmZvIG9wdGltaXphdGlvbiBncm91cCBmbGFncyBhcyBkZWZpbmVkIGluIGR1bXBmaWxlLmguICovCisgIHVuc2lnbmVkIGludCBvcHRpbmZvX2ZsYWdzOworCisgIC8qIElmIG5vbi1udWxsLCB0aGlzIHBhc3MgYW5kIGFsbCBzdWItcGFzc2VzIGFyZSBleGVjdXRlZCBvbmx5IGlmCisgICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUuICAqLworICBib29sICgqZ2F0ZSkgKHZvaWQpOworCisgIC8qIFRoaXMgaXMgdGhlIGNvZGUgdG8gcnVuLiAgSWYgbnVsbCwgdGhlbiB0aGVyZSBzaG91bGQgYmUgc3ViLXBhc3NlcworICAgICBvdGhlcndpc2UgdGhpcyBwYXNzIGRvZXMgbm90aGluZy4gIFRoZSByZXR1cm4gdmFsdWUgY29udGFpbnMKKyAgICAgVE9ET3MgdG8gZXhlY3V0ZSBpbiBhZGRpdGlvbiB0byB0aG9zZSBpbiBUT0RPX2ZsYWdzX2ZpbmlzaC4gICAqLworICB1bnNpZ25lZCBpbnQgKCpleGVjdXRlKSAodm9pZCk7CisKKyAgLyogQSBsaXN0IG9mIHN1Yi1wYXNzZXMgdG8gcnVuLCBkZXBlbmRlbnQgb24gZ2F0ZSBwcmVkaWNhdGUuICAqLworICBzdHJ1Y3Qgb3B0X3Bhc3MgKnN1YjsKKworICAvKiBOZXh0IGluIHRoZSBsaXN0IG9mIHBhc3NlcyB0byBydW4sIGluZGVwZW5kZW50IG9mIGdhdGUgcHJlZGljYXRlLiAgKi8KKyAgc3RydWN0IG9wdF9wYXNzICpuZXh0OworCisgIC8qIFN0YXRpYyBwYXNzIG51bWJlciwgdXNlZCBhcyBhIGZyYWdtZW50IG9mIHRoZSBkdW1wIGZpbGUgbmFtZS4gICovCisgIGludCBzdGF0aWNfcGFzc19udW1iZXI7CisKKyAgLyogVGhlIHRpbWV2YXIgaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFzcy4gICovCisgIC8qID8/PyBJZGVhbGx5IHdvdWxkIGJlIGR5bmFtaWNhbGx5IGFzc2lnbmVkLiAgKi8KKyAgdGltZXZhcl9pZF90IHR2X2lkOworCisgIC8qIFNldHMgb2YgcHJvcGVydGllcyBpbnB1dCBhbmQgb3V0cHV0IGZyb20gdGhpcyBwYXNzLiAgKi8KKyAgdW5zaWduZWQgaW50IHByb3BlcnRpZXNfcmVxdWlyZWQ7CisgIHVuc2lnbmVkIGludCBwcm9wZXJ0aWVzX3Byb3ZpZGVkOworICB1bnNpZ25lZCBpbnQgcHJvcGVydGllc19kZXN0cm95ZWQ7CisKKyAgLyogRmxhZ3MgaW5kaWNhdGluZyBjb21tb24gc2V0cyB0aGluZ3MgdG8gZG8gYmVmb3JlIGFuZCBhZnRlci4gICovCisgIHVuc2lnbmVkIGludCB0b2RvX2ZsYWdzX3N0YXJ0OworICB1bnNpZ25lZCBpbnQgdG9kb19mbGFnc19maW5pc2g7Cit9OworCisvKiBEZXNjcmlwdGlvbiBvZiBHSU1QTEUgcGFzcy4gICovCitzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzCit7CisgIHN0cnVjdCBvcHRfcGFzcyBwYXNzOworfTsKKworLyogRGVzY3JpcHRpb24gb2YgUlRMIHBhc3MuICAqLworc3RydWN0IHJ0bF9vcHRfcGFzcworeworICBzdHJ1Y3Qgb3B0X3Bhc3MgcGFzczsKK307CisKK3N0cnVjdCB2YXJwb29sX25vZGU7CitzdHJ1Y3QgY2dyYXBoX25vZGU7CitzdHJ1Y3QgbHRvX3N5bXRhYl9lbmNvZGVyX2Q7CisKKy8qIERlc2NyaXB0aW9uIG9mIElQQSBwYXNzIHdpdGggZ2VuZXJhdGUgc3VtbWFyeSwgd3JpdGUsIGV4ZWN1dGUsIHJlYWQgYW5kCisgICB0cmFuc2Zvcm0gc3RhZ2VzLiAgKi8KK3N0cnVjdCBpcGFfb3B0X3Bhc3NfZAoreworICBzdHJ1Y3Qgb3B0X3Bhc3MgcGFzczsKKworICAvKiBJUEEgcGFzc2VzIGNhbiBhbmFseXplIGZ1bmN0aW9uIGJvZHkgYW5kIHZhcmlhYmxlIGluaXRpYWxpemVycworICAgICAgdXNpbmcgdGhpcyBob29rIGFuZCBwcm9kdWNlIHN1bW1hcnkuICAqLworICB2b2lkICgqZ2VuZXJhdGVfc3VtbWFyeSkgKHZvaWQpOworCisgIC8qIFRoaXMgaG9vayBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBJUEEgc3VtbWFyaWVzIG9uIGRpc2suICAqLworICB2b2lkICgqd3JpdGVfc3VtbWFyeSkgKHZvaWQpOworCisgIC8qIFRoaXMgaG9vayBpcyB1c2VkIHRvIGRlc2VyaWFsaXplIElQQSBzdW1tYXJpZXMgZnJvbSBkaXNrLiAgKi8KKyAgdm9pZCAoKnJlYWRfc3VtbWFyeSkgKHZvaWQpOworCisgIC8qIFRoaXMgaG9vayBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBJUEEgb3B0aW1pemF0aW9uIHN1bW1hcmllcyBvbiBkaXNrLiAgKi8KKyAgdm9pZCAoKndyaXRlX29wdGltaXphdGlvbl9zdW1tYXJ5KSAodm9pZCk7CisKKyAgLyogVGhpcyBob29rIGlzIHVzZWQgdG8gZGVzZXJpYWxpemUgSVBBIHN1bW1hcmllcyBmcm9tIGRpc2suICAqLworICB2b2lkICgqcmVhZF9vcHRpbWl6YXRpb25fc3VtbWFyeSkgKHZvaWQpOworCisgIC8qIEhvb2sgdG8gY29udmVydCBnaW1wbGUgc3RtdCB1aWRzIGludG8gdHJ1ZSBnaW1wbGUgc3RhdGVtZW50cy4gIFRoZSBzZWNvbmQKKyAgICAgcGFyYW1ldGVyIGlzIGFuIGFycmF5IG9mIHN0YXRlbWVudHMgaW5kZXhlZCBieSB0aGVpciB1aWQuICovCisgIHZvaWQgKCpzdG10X2ZpeHVwKSAoc3RydWN0IGNncmFwaF9ub2RlICosIGdpbXBsZSAqKTsKKworICAvKiBSZXN1bHRzIG9mIGludGVycHJvY2VkdXJhbCBwcm9wYWdhdGlvbiBvZiBhbiBJUEEgcGFzcyBpcyBhcHBsaWVkIHRvCisgICAgIGZ1bmN0aW9uIGJvZHkgdmlhIHRoaXMgaG9vay4gICovCisgIHVuc2lnbmVkIGludCBmdW5jdGlvbl90cmFuc2Zvcm1fdG9kb19mbGFnc19zdGFydDsKKyAgdW5zaWduZWQgaW50ICgqZnVuY3Rpb25fdHJhbnNmb3JtKSAoc3RydWN0IGNncmFwaF9ub2RlICopOworICB2b2lkICgqdmFyaWFibGVfdHJhbnNmb3JtKSAoc3RydWN0IHZhcnBvb2xfbm9kZSAqKTsKK307CisKKy8qIERlc2NyaXB0aW9uIG9mIHNpbXBsZSBJUEEgcGFzcy4gIFNpbXBsZSBJUEEgcGFzc2VzIGhhdmUganVzdCBvbmUgZXhlY3V0ZQorICAgaG9vay4gICovCitzdHJ1Y3Qgc2ltcGxlX2lwYV9vcHRfcGFzcworeworICBzdHJ1Y3Qgb3B0X3Bhc3MgcGFzczsKK307CisKKy8qIFBhc3MgcHJvcGVydGllcy4gICovCisjZGVmaW5lIFBST1BfZ2ltcGxlX2FueQkJKDEgPDwgMCkJLyogZW50aXJlIGdpbXBsZSBncmFtbWFyICovCisjZGVmaW5lIFBST1BfZ2ltcGxlX2xjZgkJKDEgPDwgMSkJLyogbG93ZXJlZCBjb250cm9sIGZsb3cgKi8KKyNkZWZpbmUgUFJPUF9naW1wbGVfbGVoCQkoMSA8PCAyKQkvKiBsb3dlcmVkIGVoICovCisjZGVmaW5lIFBST1BfY2ZnCQkoMSA8PCAzKQorI2RlZmluZSBQUk9QX3NzYQkJKDEgPDwgNSkKKyNkZWZpbmUgUFJPUF9ub19jcml0X2VkZ2VzICAgICAgKDEgPDwgNikKKyNkZWZpbmUgUFJPUF9ydGwJCSgxIDw8IDcpCisjZGVmaW5lIFBST1BfZ2ltcGxlX2xvbXAJKDEgPDwgOCkJLyogbG93ZXJlZCBPcGVuTVAgZGlyZWN0aXZlcyAqLworI2RlZmluZSBQUk9QX2NmZ2xheW91dAkgCSgxIDw8IDkpCS8qIGNmZ2xheW91dCBtb2RlIG9uIFJUTCAqLworI2RlZmluZSBQUk9QX2dpbXBsZV9sY3gJCSgxIDw8IDEwKSAgICAgICAvKiBsb3dlcmVkIGNvbXBsZXggKi8KKyNkZWZpbmUgUFJPUF9sb29wcwkJKDEgPDwgMTEpCS8qIHByZXNlcnZlIGxvb3Agc3RydWN0dXJlcyAqLworCisjZGVmaW5lIFBST1BfdHJlZXMgXAorICAoUFJPUF9naW1wbGVfYW55IHwgUFJPUF9naW1wbGVfbGNmIHwgUFJPUF9naW1wbGVfbGVoIHwgUFJPUF9naW1wbGVfbG9tcCkKKworLyogVG8tZG8gZmxhZ3MuICAqLworI2RlZmluZSBUT0RPX2dnY19jb2xsZWN0CQkoMSA8PCAxKQorI2RlZmluZSBUT0RPX3ZlcmlmeV9zc2EJCQkoMSA8PCAyKQorI2RlZmluZSBUT0RPX3ZlcmlmeV9mbG93CQkoMSA8PCAzKQorI2RlZmluZSBUT0RPX3ZlcmlmeV9zdG10cwkJKDEgPDwgNCkKKyNkZWZpbmUgVE9ET19jbGVhbnVwX2NmZyAgICAgICAgCSgxIDw8IDUpCisjZGVmaW5lIFRPRE9fZHVtcF9zeW10YWIJCSgxIDw8IDcpCisjZGVmaW5lIFRPRE9fcmVtb3ZlX2Z1bmN0aW9ucwkJKDEgPDwgOCkKKyNkZWZpbmUgVE9ET19yZWJ1aWxkX2ZyZXF1ZW5jaWVzCSgxIDw8IDkpCisjZGVmaW5lIFRPRE9fdmVyaWZ5X3J0bF9zaGFyaW5nICAgICAgICAgKDEgPDwgMTApCisKKy8qIFRvLWRvIGZsYWdzIGZvciBjYWxscyB0byB1cGRhdGVfc3NhLiAgKi8KKworLyogVXBkYXRlIHRoZSBTU0EgZm9ybSBpbnNlcnRpbmcgUEhJIG5vZGVzIGZvciBuZXdseSBleHBvc2VkIHN5bWJvbHMKKyAgIGFuZCB2aXJ0dWFsIG5hbWVzIG1hcmtlZCBmb3IgdXBkYXRpbmcuICBXaGVuIHVwZGF0aW5nIHJlYWwgbmFtZXMsCisgICBvbmx5IGluc2VydCBQSEkgbm9kZXMgZm9yIGEgcmVhbCBuYW1lIE9faiBpbiBibG9ja3MgcmVhY2hlZCBieSBhbGwKKyAgIHRoZSBuZXcgYW5kIG9sZCBkZWZpbml0aW9ucyBmb3IgT19qLiAgSWYgdGhlIGl0ZXJhdGVkIGRvbWluYW5jZQorICAgZnJvbnRpZXIgZm9yIE9faiBpcyBub3QgcHJ1bmVkLCB3ZSBtYXkgZW5kIHVwIGluc2VydGluZyBQSEkgbm9kZXMKKyAgIGluIGJsb2NrcyB0aGF0IGhhdmUgb25lIG9yIG1vcmUgZWRnZXMgd2l0aCBubyBpbmNvbWluZyBkZWZpbml0aW9uCisgICBmb3IgT19qLiAgVGhpcyB3b3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgd2FybmluZ3MgZm9yIE9faidzCisgICBzeW1ib2wuICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9zc2EJCQkoMSA8PCAxMSkKKworLyogVXBkYXRlIHRoZSBTU0EgZm9ybSB3aXRob3V0IGluc2VydGluZyBhbnkgbmV3IFBISSBub2RlcyBhdCBhbGwuCisgICBUaGlzIGlzIHVzZWQgYnkgcGFzc2VzIHRoYXQgaGF2ZSBlaXRoZXIgaW5zZXJ0ZWQgYWxsIHRoZSBQSEkgbm9kZXMKKyAgIHRoZW1zZWx2ZXMgb3IgcGFzc2VzIHRoYXQgbmVlZCBvbmx5IHRvIHBhdGNoIHVzZS1kZWYgYW5kIGRlZi1kZWYKKyAgIGNoYWlucyBmb3IgdmlydHVhbHMgKGUuZy4sIERDRSkuICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9zc2Ffbm9fcGhpCQkoMSA8PCAxMikKKworLyogSW5zZXJ0IFBISSBub2RlcyBldmVyeXdoZXJlIHRoZXkgYXJlIG5lZWRlZC4gIE5vIHBydW5pbmcgb2YgdGhlCisgICBJREYgaXMgZG9uZS4gIFRoaXMgaXMgdXNlZCBieSBwYXNzZXMgdGhhdCBuZWVkIHRoZSBQSEkgbm9kZXMgZm9yCisgICBPX2ogZXZlbiBpZiBpdCBtZWFucyB0aGF0IHNvbWUgYXJndW1lbnRzIHdpbGwgY29tZSBmcm9tIHRoZSBkZWZhdWx0CisgICBkZWZpbml0aW9uIG9mIE9faidzIHN5bWJvbC4KKworICAgV0FSTklORzogSWYgeW91IG5lZWQgdG8gdXNlIHRoaXMgZmxhZywgY2hhbmNlcyBhcmUgdGhhdCB5b3VyIHBhc3MKKyAgIG1heSBiZSBkb2luZyBzb21ldGhpbmcgd3JvbmcuICBJbnNlcnRpbmcgUEhJIG5vZGVzIGZvciBhbiBvbGQgbmFtZQorICAgd2hlcmUgbm90IGFsbCBlZGdlcyBjYXJyeSBhIG5ldyByZXBsYWNlbWVudCBtYXkgbGVhZCB0byBzaWxlbnQKKyAgIGNvZGVnZW4gZXJyb3JzIG9yIHNwdXJpb3VzIHVuaW5pdGlhbGl6ZWQgd2FybmluZ3MuICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9zc2FfZnVsbF9waGkJKDEgPDwgMTMpCisKKy8qIFBhc3NlcyB0aGF0IHVwZGF0ZSB0aGUgU1NBIGZvcm0gb24gdGhlaXIgb3duIG1heSB3YW50IHRvIGRlbGVnYXRlCisgICB0aGUgdXBkYXRpbmcgb2YgdmlydHVhbCBuYW1lcyB0byB0aGUgZ2VuZXJpYyB1cGRhdGVyLiAgU2luY2UgRlVECisgICBjaGFpbnMgYXJlIGVhc2llciB0byBtYWludGFpbiwgdGhpcyBzaW1wbGlmaWVzIHRoZSB3b3JrIHRoZXkgbmVlZAorICAgdG8gZG8uICBOT1RFOiBJZiB0aGlzIGZsYWcgaXMgdXNlZCwgYW55IE9MRC0+TkVXIG1hcHBpbmdzIGZvciByZWFsCisgICBuYW1lcyBhcmUgZXhwbGljaXRseSBkZXN0cm95ZWQgYW5kIG9ubHkgdGhlIHN5bWJvbHMgbWFya2VkIGZvcgorICAgcmVuYW1pbmcgYXJlIHByb2Nlc3NlZC4gICovCisjZGVmaW5lIFRPRE9fdXBkYXRlX3NzYV9vbmx5X3ZpcnR1YWxzCSgxIDw8IDE0KQorCisvKiBTb21lIHBhc3NlcyBsZWF2ZSB1bnVzZWQgbG9jYWwgdmFyaWFibGVzIHRoYXQgY2FuIGJlIHJlbW92ZWQgZnJvbQorICAgY2Z1bi0+bG9jYWxfZGVjbHMuICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgZHVtcCBmaWxlcworICAgYW5kIHRoZSBtZW1vcnkgZm9vdHByaW50IGZvciBWQVJfREVDTHMuICAqLworI2RlZmluZSBUT0RPX3JlbW92ZV91bnVzZWRfbG9jYWxzCSgxIDw8IDE1KQorCisvKiBDYWxsIGRmX2ZpbmlzaCBhdCB0aGUgZW5kIG9mIHRoZSBwYXNzLiAgVGhpcyBpcyBkb25lIGFmdGVyIGFsbCBvZgorICAgdGhlIGR1bXBlcnMgaGF2ZSBiZWVuIGFsbG93ZWQgdG8gcnVuIHNvIHRoYXQgdGhleSBoYXZlIGFjY2VzcyB0bworICAgdGhlIGluc3RhbmNlIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQuICAqLworI2RlZmluZSBUT0RPX2RmX2ZpbmlzaCAgICAgICAgICAgICAgICAgICgxIDw8IDE3KQorCisvKiBDYWxsIGRmX3ZlcmlmeSBhdCB0aGUgZW5kIG9mIHRoZSBwYXNzIGlmIGNoZWNraW5nIGlzIGVuYWJsZWQuICAqLworI2RlZmluZSBUT0RPX2RmX3ZlcmlmeSAgICAgICAgICAgICAgICAgICgxIDw8IDE4KQorCisvKiBJbnRlcm5hbGx5IHVzZWQgZm9yIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIHBhc3MuICAqLworI2RlZmluZSBUT0RPX21hcmtfZmlyc3RfaW5zdGFuY2UJKDEgPDwgMTkpCisKKy8qIFJlYnVpbGQgYWxpYXNpbmcgaW5mby4gICovCisjZGVmaW5lIFRPRE9fcmVidWlsZF9hbGlhcyAgICAgICAgICAgICAgKDEgPDwgMjApCisKKy8qIFJlYnVpbGQgdGhlIGFkZHJlc3NhYmxlLXZhcnMgYml0bWFwIGFuZCBkbyByZWdpc3RlciBwcm9tb3Rpb24uICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9hZGRyZXNzX3Rha2VuCSgxIDw8IDIxKQorCisvKiBSZWJ1aWxkIHRoZSBjYWxsZ3JhcGggZWRnZXMuICAqLworI2RlZmluZSBUT0RPX3JlYnVpbGRfY2dyYXBoX2VkZ2VzICAgICAgICgxIDw8IDIyKQorCisvKiBJbnRlcm5hbGx5IHVzZWQgaW4gZXhlY3V0ZV9mdW5jdGlvbl90b2RvKCkuICAqLworI2RlZmluZSBUT0RPX3VwZGF0ZV9zc2FfYW55CQlcCisgICAgKFRPRE9fdXBkYXRlX3NzYQkJCVwKKyAgICAgfCBUT0RPX3VwZGF0ZV9zc2Ffbm9fcGhpCQlcCisgICAgIHwgVE9ET191cGRhdGVfc3NhX2Z1bGxfcGhpCQlcCisgICAgIHwgVE9ET191cGRhdGVfc3NhX29ubHlfdmlydHVhbHMpCisKKyNkZWZpbmUgVE9ET192ZXJpZnlfYWxsIFwKKyAgKFRPRE9fdmVyaWZ5X3NzYSB8IFRPRE9fdmVyaWZ5X2Zsb3cgfCBUT0RPX3ZlcmlmeV9zdG10cykKKworCisvKiBSZWdpc3RlciBwYXNzIGluZm8uICovCisKK2VudW0gcGFzc19wb3NpdGlvbmluZ19vcHMKK3sKKyAgUEFTU19QT1NfSU5TRVJUX0FGVEVSLCAgLyogSW5zZXJ0IGFmdGVyIHRoZSByZWZlcmVuY2UgcGFzcy4gICovCisgIFBBU1NfUE9TX0lOU0VSVF9CRUZPUkUsIC8qIEluc2VydCBiZWZvcmUgdGhlIHJlZmVyZW5jZSBwYXNzLiAgKi8KKyAgUEFTU19QT1NfUkVQTEFDRSAgICAgICAgLyogUmVwbGFjZSB0aGUgcmVmZXJlbmNlIHBhc3MuICAqLworfTsKKworc3RydWN0IHJlZ2lzdGVyX3Bhc3NfaW5mbworeworICBzdHJ1Y3Qgb3B0X3Bhc3MgKnBhc3M7ICAgICAgICAgICAgLyogTmV3IHBhc3MgdG8gcmVnaXN0ZXIuICAqLworICBjb25zdCBjaGFyICpyZWZlcmVuY2VfcGFzc19uYW1lOyAgLyogTmFtZSBvZiB0aGUgcmVmZXJlbmNlIHBhc3MgZm9yIGhvb2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwIHRoZSBuZXcgcGFzcy4gICovCisgIGludCByZWZfcGFzc19pbnN0YW5jZV9udW1iZXI7ICAgICAvKiBJbnNlcnQgdGhlIHBhc3MgYXQgdGhlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgbnVtYmVyIG9mIHRoZSByZWZlcmVuY2UgcGFzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIGl0IGZvciBldmVyeSBpbnN0YW5jZSBpZiBpdCBpcyAwLiAgKi8KKyAgZW51bSBwYXNzX3Bvc2l0aW9uaW5nX29wcyBwb3Nfb3A7IC8qIGhvdyB0byBpbnNlcnQgdGhlIG5ldyBwYXNzLiAgKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbXVkZmxhcF8xOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19tdWRmbGFwXzI7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2FzYW47CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2FzYW5fTzA7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RzYW47CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RzYW5fTzA7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvd2VyX2NmOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19yZWZhY3Rvcl9laDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG93ZXJfZWg7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvd2VyX2VoX2Rpc3BhdGNoOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19sb3dlcl9yZXN4OworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19idWlsZF9jZmc7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2Vhcmx5X3RyZWVfcHJvZmlsZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY2xlYW51cF9laDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfc3JhOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19zcmFfZWFybHk7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2Vhcmx5X2lwYV9zcmE7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RhaWxfcmVjdXJzaW9uOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190YWlsX2NhbGxzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190cmVlX2xvb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RyZWVfbG9vcF9pbml0OworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19saW07CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RyZWVfdW5zd2l0Y2g7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3ByZWRjb207CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2l2X2Nhbm9uOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19zY2V2X2Nwcm9wOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19lbXB0eV9sb29wOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19yZWNvcmRfYm91bmRzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19ncmFwaGl0ZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZ3JhcGhpdGVfdHJhbnNmb3JtczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfaWZfY29udmVyc2lvbjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG9vcF9kaXN0cmlidXRpb247CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3ZlY3Rvcml6ZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfc2xwX3ZlY3Rvcml6ZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY29tcGxldGVfdW5yb2xsOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jb21wbGV0ZV91bnJvbGxpOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19wYXJhbGxlbGl6ZV9sb29wczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG9vcF9wcmVmZXRjaDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfaXZfb3B0aW1pemU7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RyZWVfbG9vcF9kb25lOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jaDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY2NwOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19waGlfb25seV9jcHJvcDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfYnVpbGRfc3NhOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19idWlsZF9hbGlhczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfYnVpbGRfZWFsaWFzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19kb21pbmF0b3I7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2RjZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZGNlX2xvb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NkX2RjZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY2FsbF9jZGNlOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19tZXJnZV9waGk7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3NwbGl0X2NyaXRfZWRnZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3ByZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdGFpbF9tZXJnZV9vcHRpbWl6ZSAodW5zaWduZWQgaW50KTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcHJvZmlsZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfc3RyaXBfcHJlZGljdF9oaW50czsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG93ZXJfY29tcGxleF9PMDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG93ZXJfY29tcGxleDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfbG93ZXJfdmVjdG9yOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19sb3dlcl92ZWN0b3Jfc3NhOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19sb3dlcl9vbXA7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2RpYWdub3NlX29tcF9ibG9ja3M7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2V4cGFuZF9vbXA7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2V4cGFuZF9vbXBfc3NhOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19vYmplY3Rfc2l6ZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3N0cmxlbjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZm9sZF9idWlsdGluczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfc3RkYXJnOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19lYXJseV93YXJuX3VuaW5pdGlhbGl6ZWQ7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xhdGVfd2Fybl91bmluaXRpYWxpemVkOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jc2VfcmVjaXByb2NhbHM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NzZV9zaW5jb3M7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX29wdGltaXplX2Jzd2FwOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19vcHRpbWl6ZV93aWRlbmluZ19tdWw7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3dhcm5fZnVuY3Rpb25fcmV0dXJuOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc193YXJuX2Z1bmN0aW9uX25vcmV0dXJuOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jc2VsaW07CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3BoaW9wdDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZm9yd3Byb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3BoaXByb3A7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RyZWVfaWZjb21iaW5lOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19kc2U7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX25ydjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcmVuYW1lX3NzYV9jb3BpZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3NpbmtfY29kZTsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfZnJlOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jaGVja19kYXRhX2RlcHM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2NvcHlfcHJvcDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfdnJwOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc191bmNwcm9wOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19yZXR1cm5fc2xvdDsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcmVhc3NvYzsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfcmVidWlsZF9jZ3JhcGhfZWRnZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3JlbW92ZV9jZ3JhcGhfY2FsbGVlX2VkZ2VzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19idWlsZF9jZ3JhcGhfZWRnZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvY2FsX3B1cmVfY29uc3Q7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RyYWNlcjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfd2Fybl91bnVzZWRfcmVzdWx0OworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19kaWFnbm9zZV90bV9ibG9ja3M7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2xvd2VyX3RtOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190bV9pbml0OworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190bV9tYXJrOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc190bV9tZW1vcHQ7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3RtX2VkZ2VzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19zcGxpdF9mdW5jdGlvbnM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2ZlZWRiYWNrX3NwbGl0X2Z1bmN0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3Nfc3RyZW5ndGhfcmVkdWN0aW9uOworCisvKiBJUEEgUGFzc2VzICovCitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfbG93ZXJfZW11dGxzOworZXh0ZXJuIHN0cnVjdCBzaW1wbGVfaXBhX29wdF9wYXNzIHBhc3NfaXBhX2Z1bmN0aW9uX2FuZF92YXJpYWJsZV92aXNpYmlsaXR5OworZXh0ZXJuIHN0cnVjdCBzaW1wbGVfaXBhX29wdF9wYXNzIHBhc3NfaXBhX3RyZWVfcHJvZmlsZTsKKworZXh0ZXJuIHN0cnVjdCBzaW1wbGVfaXBhX29wdF9wYXNzIHBhc3NfZWFybHlfbG9jYWxfcGFzc2VzOworCitleHRlcm4gc3RydWN0IGlwYV9vcHRfcGFzc19kIHBhc3NfaXBhX3dob2xlX3Byb2dyYW1fdmlzaWJpbGl0eTsKK2V4dGVybiBzdHJ1Y3QgaXBhX29wdF9wYXNzX2QgcGFzc19pcGFfbHRvX2dpbXBsZV9vdXQ7CitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfaW5jcmVhc2VfYWxpZ25tZW50OworZXh0ZXJuIHN0cnVjdCBpcGFfb3B0X3Bhc3NfZCBwYXNzX2lwYV9pbmxpbmU7CitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfZnJlZV9sYW5nX2RhdGE7CitleHRlcm4gc3RydWN0IHNpbXBsZV9pcGFfb3B0X3Bhc3MgcGFzc19pcGFfZnJlZV9pbmxpbmVfc3VtbWFyeTsKK2V4dGVybiBzdHJ1Y3QgaXBhX29wdF9wYXNzX2QgcGFzc19pcGFfY3A7CitleHRlcm4gc3RydWN0IGlwYV9vcHRfcGFzc19kIHBhc3NfaXBhX3JlZmVyZW5jZTsKK2V4dGVybiBzdHJ1Y3QgaXBhX29wdF9wYXNzX2QgcGFzc19pcGFfcHVyZV9jb25zdDsKK2V4dGVybiBzdHJ1Y3Qgc2ltcGxlX2lwYV9vcHRfcGFzcyBwYXNzX2lwYV9wdGE7CitleHRlcm4gc3RydWN0IGlwYV9vcHRfcGFzc19kIHBhc3NfaXBhX2x0b193cGFfZml4dXA7CitleHRlcm4gc3RydWN0IGlwYV9vcHRfcGFzc19kIHBhc3NfaXBhX2x0b19maW5pc2hfb3V0OworZXh0ZXJuIHN0cnVjdCBzaW1wbGVfaXBhX29wdF9wYXNzIHBhc3NfaXBhX3RtOworZXh0ZXJuIHN0cnVjdCBpcGFfb3B0X3Bhc3NfZCBwYXNzX2lwYV9wcm9maWxlOworZXh0ZXJuIHN0cnVjdCBpcGFfb3B0X3Bhc3NfZCBwYXNzX2lwYV9jZHRvcl9tZXJnZTsKKworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19jbGVhbnVwX2NmZ19wb3N0X29wdGltaXppbmc7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2luaXRfZGF0YXN0cnVjdHVyZXM7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2ZpeHVwX2NmZzsKKworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19leHBhbmQ7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2luc3RhbnRpYXRlX3ZpcnR1YWxfcmVnczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2Z3cHJvcDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2Z3cHJvcF9hZGRyOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19qdW1wOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19qdW1wMjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfbG93ZXJfc3VicmVnOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19jc2U7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2Zhc3RfcnRsX2RjZTsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfdWRfcnRsX2RjZTsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2RjZTsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2RzZTE7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9kc2UyOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfZHNlMzsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2Nwcm9wOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfcHJlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfaG9pc3Q7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9zdG9yZV9tb3Rpb247CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2NzZV9hZnRlcl9nbG9iYWxfb3B0czsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX2lmY3Z0OworCitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2ludG9fY2ZnX2xheW91dF9tb2RlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19vdXRvZl9jZmdfbGF5b3V0X21vZGU7CisKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfbG9vcDI7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9sb29wX2luaXQ7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3J0bF9tb3ZlX2xvb3BfaW52YXJpYW50czsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcnRsX3Vuc3dpdGNoOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfdW5yb2xsX2FuZF9wZWVsX2xvb3BzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfZG9sb29wOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfbG9vcF9kb25lOworCitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3dlYjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfY3NlMjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZGZfaW5pdGlhbGl6ZV9vcHQ7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2RmX2luaXRpYWxpemVfbm9fb3B0OworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19yZWdpbmZvX2luaXQ7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2luY19kZWM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3N0YWNrX3B0cl9tb2Q7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2luaXRpYWxpemVfcmVnczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfY29tYmluZTsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfaWZfYWZ0ZXJfY29tYmluZTsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcmVlOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19wYXJ0aXRpb25fYmxvY2tzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19tYXRjaF9hc21fY29uc3RyYWludHM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3JlZ21vdmU7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3NwbGl0X2FsbF9pbnNuczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZmFzdF9ydGxfYnl0ZV9kY2U7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2xvd2VyX3N1YnJlZzI7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX21vZGVfc3dpdGNoaW5nOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zbXM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3NjaGVkOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19pcmE7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3JlbG9hZDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfY2xlYW5fc3RhdGU7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2JyYW5jaF9wcm9iOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc192YWx1ZV9wcm9maWxlX3RyYW5zZm9ybWF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcG9zdHJlbG9hZF9jc2U7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2djc2UyOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zcGxpdF9hZnRlcl9yZWxvYWQ7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2JyYW5jaF90YXJnZXRfbG9hZF9vcHRpbWl6ZTE7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3RocmVhZF9wcm9sb2d1ZV9hbmRfZXBpbG9ndWU7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3N0YWNrX2FkanVzdG1lbnRzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19wZWVwaG9sZTI7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2lmX2FmdGVyX3JlbG9hZDsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfcmVncmVuYW1lOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19jcHJvcF9oYXJkcmVnOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19yZW9yZGVyX2Jsb2NrczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfYnJhbmNoX3RhcmdldF9sb2FkX29wdGltaXplMjsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfbGVhZl9yZWdzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zcGxpdF9iZWZvcmVfc2NoZWQyOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19jb21wYXJlX2VsaW1fYWZ0ZXJfcmVsb2FkOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zY2hlZDI7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3N0YWNrX3JlZ3M7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3N0YWNrX3JlZ3NfcnVuOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19kZl9maW5pc2g7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2NvbXB1dGVfYWxpZ25tZW50czsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZHVwbGljYXRlX2NvbXB1dGVkX2dvdG9zOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc192YXJpYWJsZV90cmFja2luZzsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3NfZnJlZV9jZmc7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX21hY2hpbmVfcmVvcmc7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2NsZWFudXBfYmFycmllcnM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2RlbGF5X3Nsb3RzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19zcGxpdF9mb3Jfc2hvcnRlbl9icmFuY2hlczsKK2V4dGVybiBzdHJ1Y3QgcnRsX29wdF9wYXNzIHBhc3Nfc3BsaXRfYmVmb3JlX3JlZ3N0YWNrOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19jb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3Nob3J0ZW5fYnJhbmNoZXM7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX3NldF9ub3Rocm93X2Z1bmN0aW9uX2ZsYWdzOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19kd2FyZjJfZnJhbWU7CitleHRlcm4gc3RydWN0IHJ0bF9vcHRfcGFzcyBwYXNzX2ZpbmFsOworZXh0ZXJuIHN0cnVjdCBydGxfb3B0X3Bhc3MgcGFzc19ydGxfc2VxYWJzdHI7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX3JlbGVhc2Vfc3NhX25hbWVzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc19lYXJseV9pbmxpbmU7CitleHRlcm4gc3RydWN0IGdpbXBsZV9vcHRfcGFzcyBwYXNzX2lubGluZV9wYXJhbWV0ZXJzOworZXh0ZXJuIHN0cnVjdCBnaW1wbGVfb3B0X3Bhc3MgcGFzc191cGRhdGVfYWRkcmVzc190YWtlbjsKK2V4dGVybiBzdHJ1Y3QgZ2ltcGxlX29wdF9wYXNzIHBhc3NfY29udmVydF9zd2l0Y2g7CisKKy8qIFRoZSByb290IG9mIHRoZSBjb21waWxhdGlvbiBwYXNzIHRyZWUsIG9uY2UgY29uc3RydWN0ZWQuICAqLworZXh0ZXJuIHN0cnVjdCBvcHRfcGFzcyAqYWxsX3Bhc3NlcywgKmFsbF9zbWFsbF9pcGFfcGFzc2VzLCAqYWxsX2xvd2VyaW5nX3Bhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgKmFsbF9yZWd1bGFyX2lwYV9wYXNzZXMsICphbGxfbHRvX2dlbl9wYXNzZXMsICphbGxfbGF0ZV9pcGFfcGFzc2VzOworCisvKiBEZWZpbmUgYSBsaXN0IG9mIHBhc3MgbGlzdHMgc28gdGhhdCBib3RoIHBhc3Nlcy5jIGFuZCBwbHVnaW5zIGNhbiBlYXNpbHkKKyAgIGZpbmQgYWxsIHRoZSBwYXNzIGxpc3RzLiAgKi8KKyNkZWZpbmUgR0NDX1BBU1NfTElTVFMgXAorICBERUZfUEFTU19MSVNUIChhbGxfbG93ZXJpbmdfcGFzc2VzKSBcCisgIERFRl9QQVNTX0xJU1QgKGFsbF9zbWFsbF9pcGFfcGFzc2VzKSBcCisgIERFRl9QQVNTX0xJU1QgKGFsbF9yZWd1bGFyX2lwYV9wYXNzZXMpIFwKKyAgREVGX1BBU1NfTElTVCAoYWxsX2x0b19nZW5fcGFzc2VzKSBcCisgIERFRl9QQVNTX0xJU1QgKGFsbF9wYXNzZXMpCisKKyNkZWZpbmUgREVGX1BBU1NfTElTVChMSVNUKSBQQVNTX0xJU1RfTk9fIyNMSVNULAorZW51bQoreworICBHQ0NfUEFTU19MSVNUUworICBQQVNTX0xJU1RfTlVNCit9OworI3VuZGVmIERFRl9QQVNTX0xJU1QKKworLyogVGhpcyBpcyB1c2VkIGJ5IHBsdWdpbnMsIGFuZCBzaG91bGQgYWxzbyBiZSB1c2VkIGluCisgICBwYXNzZXMuYzpyZWdpc3Rlcl9wYXNzLiAgKi8KK2V4dGVybiBzdHJ1Y3Qgb3B0X3Bhc3MgKipnY2NfcGFzc19saXN0c1tdOworCisvKiBDdXJyZW50IG9wdGltaXphdGlvbiBwYXNzLiAgKi8KK2V4dGVybiBzdHJ1Y3Qgb3B0X3Bhc3MgKmN1cnJlbnRfcGFzczsKKworZXh0ZXJuIHN0cnVjdCBvcHRfcGFzcyAqIGdldF9wYXNzX2Zvcl9pZCAoaW50KTsKK2V4dGVybiBib29sIGV4ZWN1dGVfb25lX3Bhc3MgKHN0cnVjdCBvcHRfcGFzcyAqKTsKK2V4dGVybiB2b2lkIGV4ZWN1dGVfcGFzc19saXN0IChzdHJ1Y3Qgb3B0X3Bhc3MgKik7CitleHRlcm4gdm9pZCBleGVjdXRlX2lwYV9wYXNzX2xpc3QgKHN0cnVjdCBvcHRfcGFzcyAqKTsKK2V4dGVybiB2b2lkIGV4ZWN1dGVfaXBhX3N1bW1hcnlfcGFzc2VzIChzdHJ1Y3QgaXBhX29wdF9wYXNzX2QgKik7CitleHRlcm4gdm9pZCBleGVjdXRlX2FsbF9pcGFfdHJhbnNmb3JtcyAodm9pZCk7CitleHRlcm4gdm9pZCBleGVjdXRlX2FsbF9pcGFfc3RtdF9maXh1cHMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBnaW1wbGUgKik7CitleHRlcm4gYm9vbCBwYXNzX2luaXRfZHVtcF9maWxlIChzdHJ1Y3Qgb3B0X3Bhc3MgKik7CitleHRlcm4gdm9pZCBwYXNzX2ZpbmlfZHVtcF9maWxlIChzdHJ1Y3Qgb3B0X3Bhc3MgKik7CisKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfY3VycmVudF9wYXNzX25hbWUgKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJpbnRfY3VycmVudF9wYXNzIChGSUxFICopOworZXh0ZXJuIHZvaWQgZGVidWdfcGFzcyAodm9pZCk7CitleHRlcm4gdm9pZCBpcGFfd3JpdGVfc3VtbWFyaWVzICh2b2lkKTsKK2V4dGVybiB2b2lkIGlwYV93cml0ZV9vcHRpbWl6YXRpb25fc3VtbWFyaWVzIChzdHJ1Y3QgbHRvX3N5bXRhYl9lbmNvZGVyX2QgKik7CitleHRlcm4gdm9pZCBpcGFfcmVhZF9zdW1tYXJpZXMgKHZvaWQpOworZXh0ZXJuIHZvaWQgaXBhX3JlYWRfb3B0aW1pemF0aW9uX3N1bW1hcmllcyAodm9pZCk7CitleHRlcm4gdm9pZCByZWdpc3Rlcl9vbmVfZHVtcF9maWxlIChzdHJ1Y3Qgb3B0X3Bhc3MgKik7CitleHRlcm4gYm9vbCBmdW5jdGlvbl9jYWxsZWRfYnlfcHJvY2Vzc2VkX25vZGVzX3AgKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfcGFzcyAoc3RydWN0IHJlZ2lzdGVyX3Bhc3NfaW5mbyAqKTsKKworLyogU2V0IHRvIHRydWUgaWYgdGhlIHBhc3MgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lIGR1cmluZyBjb21waWxhdGlvbiBvZiB0aGUKKyAgIGN1cnJlbnQgZnVuY3Rpb24uICBOb3RlIHRoYXQgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgb3B0aW1pemF0aW9uCisgICBwYXNzZXMgaXMgY29uc2lkZXJlZCBub3QgdG8gYmUgY2xlYW4sIGFuZCBpdCBzaG91bGQgYmUgYXZvaWRlZCBpZiBwb3NzaWJsZS4KKyAgIFRoaXMgZmxhZyBpcyBjdXJyZW50bHkgdXNlZCB0byBwcmV2ZW50IGxvb3BzIGZyb20gYmVpbmcgcGVlbGVkIHJlcGVhdGVkbHkKKyAgIGluIGp1bXAgdGhyZWFkaW5nOyBpdCB3aWxsIGJlIHJlbW92ZWQgb25jZSB3ZSBwcmVzZXJ2ZSBsb29wIHN0cnVjdHVyZXMKKyAgIHRocm91Z2hvdXQgdGhlIGNvbXBpbGF0aW9uIC0tIHdlIHdpbGwgYmUgYWJsZSB0byBtYXJrIHRoZSBhZmZlY3RlZCBsb29wcworICAgZGlyZWN0bHkgaW4ganVtcCB0aHJlYWRpbmcsIGFuZCBhdm9pZCBwZWVsaW5nIHRoZW0gbmV4dCB0aW1lLiAgKi8KK2V4dGVybiBib29sIGZpcnN0X3Bhc3NfaW5zdGFuY2U7CisKK2V4dGVybiBzdHJ1Y3Qgb3B0X3Bhc3MgKipwYXNzZXNfYnlfaWQ7CitleHRlcm4gaW50IHBhc3Nlc19ieV9pZF9zaXplOworCisvKiBEZWNsYXJlIGZvciBwbHVnaW5zLiAgKi8KK2V4dGVybiB2b2lkIGRvX3Blcl9mdW5jdGlvbl90b3BvcmRlciAodm9pZCAoKikgKHZvaWQgKiksIHZvaWQgKik7CisKK2V4dGVybiB2b2lkIGRpc2FibGVfcGFzcyAoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9wYXNzIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZHVtcF9wYXNzZXMgKHZvaWQpOworCisjZW5kaWYgLyogR0NDX1RSRUVfUEFTU19IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1wcmV0dHktcHJpbnQuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLXByZXR0eS1wcmludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NjhkYjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1wcmV0dHktcHJpbnQuaApAQCAtMCwwICsxLDU1IEBACisvKiBWYXJpb3VzIGRlY2xhcmF0aW9ucyBmb3IgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgcHJldHR5LXByaW50CisgICBzdWJyb3V0aW5lcyB0aGF0IGFyZSBvbmx5IGZvciB1c2UgaW4gdGhlIGNvbXBpbGVycyBwcm9wZXIgYW5kIG5vdAorICAgdGhlIGRyaXZlciBvciBvdGhlciBwcm9ncmFtcy4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0NfVFJFRV9QUkVUVFlfUFJJTlRfSAorI2RlZmluZSBHQ0NfVFJFRV9QUkVUVFlfUFJJTlRfSAorCisjaW5jbHVkZSAicHJldHR5LXByaW50LmgiCisKKyNkZWZpbmUgcHBfdHJlZV9pZGVudGlmaWVyKFBQLCBUKSAgICAgICAgICAgICAgICAgICAgICBcCisgIHBwX2Jhc2VfdHJlZV9pZGVudGlmaWVyIChwcF9iYXNlIChQUCksIFQpCisKKyNkZWZpbmUgcHBfdW5zdXBwb3J0ZWRfdHJlZShQUCwgVCkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwcF92ZXJiYXRpbSAocHBfYmFzZSAoUFApLCAiIyVxcyBub3Qgc3VwcG9ydGVkIGJ5ICVzIyIsIFwKKyAgICAgICAgICAgICAgIHRyZWVfY29kZV9uYW1lWyhpbnQpIFRSRUVfQ09ERSAoVCldLCBfX0ZVTkNUSU9OX18pCisKKyNkZWZpbmUgcHBfdGlfYWJzdHJhY3Rfb3JpZ2luKFRJKSAoKHRyZWUgKikgKFRJKS0+eF9kYXRhKQorCitleHRlcm4gdm9pZCBwcF9iYXNlX3RyZWVfaWRlbnRpZmllciAocHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7CisKKy8qIEluIHRyZWUtcHJldHR5LXByaW50LmMgICovCitleHRlcm4gdm9pZCBwcmludF9kZWNsYXJhdGlvbiAocHJldHR5X3ByaW50ZXIgKiwgdHJlZSwgaW50LCBpbnQpOworZXh0ZXJuIGludCBkdW1wX2dlbmVyaWNfbm9kZSAocHJldHR5X3ByaW50ZXIgKiwgdHJlZSwgaW50LCBpbnQsIGJvb2wpOworZXh0ZXJuIHZvaWQgcHJpbnRfZ2VuZXJpY19zdG10IChGSUxFICosIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBwcmludF9nZW5lcmljX3N0bXRfaW5kZW50ZWQgKEZJTEUgKiwgdHJlZSwgaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfZ2VuZXJpY19leHByIChGSUxFICosIHRyZWUsIGludCk7CitleHRlcm4gdm9pZCBwcmludF9nZW5lcmljX2RlY2wgKEZJTEUgKiwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIGR1bXBfb21wX2NsYXVzZXMgKHByZXR0eV9wcmludGVyICosIHRyZWUsIGludCwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X2NhbGxfbmFtZSAocHJldHR5X3ByaW50ZXIgKiwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIGRlYnVnX2dlbmVyaWNfZXhwciAodHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z19nZW5lcmljX3N0bXQgKHRyZWUpOworZXh0ZXJuIHZvaWQgZGVidWdfdHJlZV9jaGFpbiAodHJlZSk7CitleHRlcm4gdm9pZCBwZXJjZW50X0tfZm9ybWF0ICh0ZXh0X2luZm8gKik7CitleHRlcm4gdm9pZCBkdW1wX2Z1bmN0aW9uX2hlYWRlciAoRklMRSAqLCB0cmVlLCBpbnQpOworLyogSW4gYy1wcmV0dHktcHJpbnQuYyAgKi8KK2V4dGVybiB2b2lkIGRlYnVnX2NfdHJlZSAodHJlZSk7CisKKyNlbmRpZiAvKiAhIEdDQ19UUkVFX1BSRVRUWV9QUklOVF9IICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1zc2EtYWxpYXMuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLXNzYS1hbGlhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OWQ0YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1zc2EtYWxpYXMuaApAQCAtMCwwICsxLDE0NCBAQAorLyogVHJlZSBiYXNlZCBhbGlhcyBhbmFseXNpcyBhbmQgYWxpYXMgb3JhY2xlLgorICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBSaWNoYXJkIEd1ZW50aGVyICA8cmd1ZW50aGVyQHN1c2UuZGU+CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIFRSRUVfU1NBX0FMSUFTX0gKKyNkZWZpbmUgVFJFRV9TU0FfQUxJQVNfSAorCisvKiBUaGUgcG9pbnRzLXRvIHNvbHV0aW9uLgorCisgICBUaGUgcG9pbnRzLXRvIHNvbHV0aW9uIGlzIGEgdW5pb24gb2YgcHRfdmFycyBhbmQgdGhlIGFic3RyYWN0CisgICBzZXRzIHNwZWNpZmllZCBieSB0aGUgZmxhZ3MuICAqLworc3RydWN0IEdUWSgoKSkgcHRfc29sdXRpb24KK3sKKyAgLyogTm9uemVybyBpZiBwb2ludHMtdG8gYW5hbHlzaXMgY291bGRuJ3QgZGV0ZXJtaW5lIHdoZXJlIHRoaXMgcG9pbnRlcgorICAgICBpcyBwb2ludGluZyB0by4gICovCisgIHVuc2lnbmVkIGludCBhbnl0aGluZyA6IDE7CisKKyAgLyogTm9uemVybyBpZiB0aGUgcG9pbnRzLXRvIHNldCBpbmNsdWRlcyBhbnkgZ2xvYmFsIG1lbW9yeS4gIE5vdGUgdGhhdAorICAgICBldmVuIGlmIHRoaXMgaXMgemVybyBwdF92YXJzIGNhbiBzdGlsbCBpbmNsdWRlIGdsb2JhbCB2YXJpYWJsZXMuICAqLworICB1bnNpZ25lZCBpbnQgbm9ubG9jYWwgOiAxOworCisgIC8qIE5vbnplcm8gaWYgdGhlIHBvaW50cy10byBzZXQgaW5jbHVkZXMgdGhlIGxvY2FsIGVzY2FwZWQgc29sdXRpb24gYnkKKyAgICAgcmVmZXJlbmNlLiAgKi8KKyAgdW5zaWduZWQgaW50IGVzY2FwZWQgOiAxOworCisgIC8qIE5vbnplcm8gaWYgdGhlIHBvaW50cy10byBzZXQgaW5jbHVkZXMgdGhlIElQQSBlc2NhcGVkIHNvbHV0aW9uIGJ5CisgICAgIHJlZmVyZW5jZS4gICovCisgIHVuc2lnbmVkIGludCBpcGFfZXNjYXBlZCA6IDE7CisKKyAgLyogTm9uemVybyBpZiB0aGUgcG9pbnRzLXRvIHNldCBpbmNsdWRlcyAnbm90aGluZycsIHRoZSBwb2ludHMtdG8gc2V0CisgICAgIGluY2x1ZGVzIG1lbW9yeSBhdCBhZGRyZXNzIE5VTEwuICAqLworICB1bnNpZ25lZCBpbnQgbnVsbCA6IDE7CisKKworICAvKiBOb256ZXJvIGlmIHRoZSBwdF92YXJzIGJpdG1hcCBpbmNsdWRlcyBhIGdsb2JhbCB2YXJpYWJsZS4gICovCisgIHVuc2lnbmVkIGludCB2YXJzX2NvbnRhaW5zX2dsb2JhbCA6IDE7CisKKworICAvKiBTZXQgb2YgdmFyaWFibGVzIHRoYXQgdGhpcyBwb2ludGVyIG1heSBwb2ludCB0by4gICovCisgIGJpdG1hcCB2YXJzOworfTsKKworCisvKiBTaW1wbGlmaWVkIGFuZCBjYWNoZWQgaW5mb3JtYXRpb24gYWJvdXQgYSBtZW1vcnkgcmVmZXJlbmNlIHRyZWUuCisgICBVc2VkIGJ5IHRoZSBhbGlhcy1vcmFjbGUgaW50ZXJuYWxseSBhbmQgZXh0ZXJuYWxseSBpbiBhbHRlcm5hdGUKKyAgIGludGVyZmFjZXMuICAqLwordHlwZWRlZiBzdHJ1Y3QgYW9fcmVmX3MKK3sKKyAgLyogVGhlIG9yaWdpbmFsIGZ1bGwgbWVtb3J5IHJlZmVyZW5jZSB0cmVlIG9yIE5VTExfVFJFRSBpZiB0aGF0IGlzCisgICAgIG5vdCBhdmFpbGFibGUuICAqLworICB0cmVlIHJlZjsKKworICAvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgdGhlIGRlY29tcG9zZWQgcmVmZXJlbmNlIGFzIHJldHVybmVkCisgICAgIGJ5IGdldF9yZWZfYmFzZV9hbmRfZXh0ZW50LiAgKi8KKyAgLyogVGhlIGJhc2Ugb2JqZWN0IG9mIHRoZSBtZW1vcnkgcmVmZXJlbmNlIG9yIE5VTExfVFJFRSBpZiBhbGwgb2YKKyAgICAgdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG5vdCB5ZXQgY29tcHV0ZWQuICAqLworICB0cmVlIGJhc2U7CisgIC8qIFRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIGJhc2UuICAqLworICBIT1NUX1dJREVfSU5UIG9mZnNldDsKKyAgLyogVGhlIHNpemUgb2YgdGhlIGFjY2Vzcy4gICovCisgIEhPU1RfV0lERV9JTlQgc2l6ZTsKKyAgLyogVGhlIG1heGltdW0gcG9zc2libGUgZXh0ZW50IG9mIHRoZSBhY2Nlc3Mgb3IgLTEgaWYgdW5jb25zdHJhaW5lZC4gICovCisgIEhPU1RfV0lERV9JTlQgbWF4X3NpemU7CisKKyAgLyogVGhlIGFsaWFzIHNldCBvZiB0aGUgYWNjZXNzIG9yIC0xIGlmIG5vdCB5ZXQgY29tcHV0ZWQuICAqLworICBhbGlhc19zZXRfdHlwZSByZWZfYWxpYXNfc2V0OworCisgIC8qIFRoZSBhbGlhcyBzZXQgb2YgdGhlIGJhc2Ugb2JqZWN0IG9yIC0xIGlmIG5vdCB5ZXQgY29tcHV0ZWQuICAqLworICBhbGlhc19zZXRfdHlwZSBiYXNlX2FsaWFzX3NldDsKKworICAvKiBXaGV0aGVyIHRoZSBtZW1vcnkgaXMgY29uc2lkZXJlZCBhIHZvbGF0aWxlIGFjY2Vzcy4gICovCisgIGJvb2wgdm9sYXRpbGVfcDsKK30gYW9fcmVmOworCisKKy8qIEluIHRyZWUtc3NhLWFsaWFzLmMgICovCitleHRlcm4gdm9pZCBhb19yZWZfaW5pdCAoYW9fcmVmICosIHRyZWUpOworZXh0ZXJuIHZvaWQgYW9fcmVmX2luaXRfZnJvbV9wdHJfYW5kX3NpemUgKGFvX3JlZiAqLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGFvX3JlZl9iYXNlIChhb19yZWYgKik7CitleHRlcm4gYWxpYXNfc2V0X3R5cGUgYW9fcmVmX2FsaWFzX3NldCAoYW9fcmVmICopOworZXh0ZXJuIGJvb2wgcHRyX2RlcmVmX21heV9hbGlhc19nbG9iYWxfcCAodHJlZSk7CitleHRlcm4gYm9vbCBwdHJfZGVyZWZzX21heV9hbGlhc19wICh0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIHJlZl9tYXlfYWxpYXNfZ2xvYmFsX3AgKHRyZWUpOworZXh0ZXJuIGJvb2wgcmVmc19tYXlfYWxpYXNfcCAodHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCByZWZzX21heV9hbGlhc19wXzEgKGFvX3JlZiAqLCBhb19yZWYgKiwgYm9vbCk7CitleHRlcm4gYm9vbCByZWZzX2FudGlfZGVwZW5kZW50X3AgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgcmVmc19vdXRwdXRfZGVwZW5kZW50X3AgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGJvb2wgcmVmX21heWJlX3VzZWRfYnlfc3RtdF9wIChnaW1wbGUsIHRyZWUpOworZXh0ZXJuIGJvb2wgc3RtdF9tYXlfY2xvYmJlcl9nbG9iYWxfcCAoZ2ltcGxlKTsKK2V4dGVybiBib29sIHN0bXRfbWF5X2Nsb2JiZXJfcmVmX3AgKGdpbXBsZSwgdHJlZSk7CitleHRlcm4gYm9vbCBzdG10X21heV9jbG9iYmVyX3JlZl9wXzEgKGdpbXBsZSwgYW9fcmVmICopOworZXh0ZXJuIGJvb2wgY2FsbF9tYXlfY2xvYmJlcl9yZWZfcCAoZ2ltcGxlLCB0cmVlKTsKK2V4dGVybiBib29sIHN0bXRfa2lsbHNfcmVmX3AgKGdpbXBsZSwgdHJlZSk7CitleHRlcm4gdHJlZSBnZXRfY29udGludWF0aW9uX2Zvcl9waGkgKGdpbXBsZSwgYW9fcmVmICosCisJCQkJICAgICAgdW5zaWduZWQgaW50ICosIGJpdG1hcCAqLCBib29sKTsKK2V4dGVybiB2b2lkICp3YWxrX25vbl9hbGlhc2VkX3Z1c2VzIChhb19yZWYgKiwgdHJlZSwKKwkJCQkgICAgIHZvaWQgKigqKShhb19yZWYgKiwgdHJlZSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCwgdm9pZCAqKSwKKwkJCQkgICAgIHZvaWQgKigqKShhb19yZWYgKiwgdHJlZSwgdm9pZCAqKSwgdm9pZCAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgd2Fsa19hbGlhc2VkX3ZkZWZzIChhb19yZWYgKiwgdHJlZSwKKwkJCQkJYm9vbCAoKikoYW9fcmVmICosIHRyZWUsIHZvaWQgKiksCisJCQkJCXZvaWQgKiwgYml0bWFwICopOworZXh0ZXJuIHN0cnVjdCBwdHJfaW5mb19kZWYgKmdldF9wdHJfaW5mbyAodHJlZSk7CitleHRlcm4gdm9pZCBkdW1wX2FsaWFzX2luZm8gKEZJTEUgKik7CitleHRlcm4gdm9pZCBkZWJ1Z19hbGlhc19pbmZvICh2b2lkKTsKK2V4dGVybiB2b2lkIGR1bXBfcG9pbnRzX3RvX3NvbHV0aW9uIChGSUxFICosIHN0cnVjdCBwdF9zb2x1dGlvbiAqKTsKK2V4dGVybiB2b2lkIGR1bXBfcG9pbnRzX3RvX2luZm9fZm9yIChGSUxFICosIHRyZWUpOworZXh0ZXJuIHZvaWQgZGVidWdfcG9pbnRzX3RvX2luZm9fZm9yICh0cmVlKTsKK2V4dGVybiB2b2lkIGR1bXBfYWxpYXNfc3RhdHMgKEZJTEUgKik7CisKKworLyogSW4gdHJlZS1zc2Etc3RydWN0YWxpYXMuYyAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgY29tcHV0ZV9tYXlfYWxpYXNlcyAodm9pZCk7CitleHRlcm4gYm9vbCBwdF9zb2x1dGlvbl9lbXB0eV9wIChzdHJ1Y3QgcHRfc29sdXRpb24gKik7CitleHRlcm4gYm9vbCBwdF9zb2x1dGlvbl9zaW5nbGV0b25fcCAoc3RydWN0IHB0X3NvbHV0aW9uICosIHVuc2lnbmVkICopOworZXh0ZXJuIGJvb2wgcHRfc29sdXRpb25faW5jbHVkZXNfZ2xvYmFsIChzdHJ1Y3QgcHRfc29sdXRpb24gKik7CitleHRlcm4gYm9vbCBwdF9zb2x1dGlvbl9pbmNsdWRlcyAoc3RydWN0IHB0X3NvbHV0aW9uICosIGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgcHRfc29sdXRpb25zX2ludGVyc2VjdCAoc3RydWN0IHB0X3NvbHV0aW9uICosIHN0cnVjdCBwdF9zb2x1dGlvbiAqKTsKK2V4dGVybiB2b2lkIHB0X3NvbHV0aW9uX3Jlc2V0IChzdHJ1Y3QgcHRfc29sdXRpb24gKik7CitleHRlcm4gdm9pZCBwdF9zb2x1dGlvbl9zZXQgKHN0cnVjdCBwdF9zb2x1dGlvbiAqLCBiaXRtYXAsIGJvb2wpOworZXh0ZXJuIHZvaWQgcHRfc29sdXRpb25fc2V0X3ZhciAoc3RydWN0IHB0X3NvbHV0aW9uICosIHRyZWUpOworCitleHRlcm4gdm9pZCBkdW1wX3B0YV9zdGF0cyAoRklMRSAqKTsKKworZXh0ZXJuIEdUWSgoKSkgc3RydWN0IHB0X3NvbHV0aW9uIGlwYV9lc2NhcGVkX3B0OworCisKKyNlbmRpZiAvKiBUUkVFX1NTQV9BTElBU19IICAqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtc3NhLW9wZXJhbmRzLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS1zc2Etb3BlcmFuZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWE1YTAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtc3NhLW9wZXJhbmRzLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qIFNTQSBvcGVyYW5kIG1hbmFnZW1lbnQgZm9yIHRyZWVzLgorICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19UUkVFX1NTQV9PUEVSQU5EU19ICisjZGVmaW5lIEdDQ19UUkVFX1NTQV9PUEVSQU5EU19ICisKKy8qIEludGVyZmFjZSB0byBTU0Egb3BlcmFuZHMuICAqLworCisKKy8qIFRoaXMgcmVwcmVzZW50cyBhIHBvaW50ZXIgdG8gYSBERUYgb3BlcmFuZC4gICovCit0eXBlZGVmIHRyZWUgKmRlZl9vcGVyYW5kX3A7CisKKy8qIFRoaXMgcmVwcmVzZW50cyBhIHBvaW50ZXIgdG8gYSBVU0Ugb3BlcmFuZC4gICovCit0eXBlZGVmIHNzYV91c2Vfb3BlcmFuZF90ICp1c2Vfb3BlcmFuZF9wOworCisvKiBOVUxMIG9wZXJhbmQgdHlwZXMuICAqLworI2RlZmluZSBOVUxMX1VTRV9PUEVSQU5EX1AgCQkoKHVzZV9vcGVyYW5kX3ApTlVMTCkKKyNkZWZpbmUgTlVMTF9ERUZfT1BFUkFORF9QIAkJKChkZWZfb3BlcmFuZF9wKU5VTEwpCisKKy8qIFRoaXMgcmVwcmVzZW50cyB0aGUgVVNFIG9wZXJhbmRzIG9mIGEgc3RtdC4gICovCitzdHJ1Y3QgdXNlX29wdHlwZV9kCit7CisgIHN0cnVjdCB1c2Vfb3B0eXBlX2QgKm5leHQ7CisgIHN0cnVjdCBzc2FfdXNlX29wZXJhbmRfZCB1c2VfcHRyOworfTsKK3R5cGVkZWYgc3RydWN0IHVzZV9vcHR5cGVfZCAqdXNlX29wdHlwZV9wOworCisvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgdmFyaWFibGUgc2l6ZWQgYnVmZmVyIHdoaWNoIGlzIGFsbG9jYXRlZCBieSB0aGUKKyAgIG9wZXJhbmQgbWVtb3J5IG1hbmFnZXIuICBPcGVyYW5kcyBhcmUgc3ViYWxsb2NhdGVkIG91dCBvZiB0aGlzIGJsb2NrLiAgVGhlCisgICBNRU0gYXJyYXkgdmFyaWVzIGluIHNpemUuICAqLworCitzdHJ1Y3QgR1RZKChjaGFpbl9uZXh0KCIlaC5uZXh0IiksIHZhcmlhYmxlX3NpemUpKSBzc2Ffb3BlcmFuZF9tZW1vcnlfZCB7CisgIHN0cnVjdCBzc2Ffb3BlcmFuZF9tZW1vcnlfZCAqbmV4dDsKKyAgY2hhciBtZW1bMV07Cit9OworCisvKiBQZXItZnVuY3Rpb24gb3BlcmFuZCBjYWNoZXMuICAqLworc3RydWN0IEdUWSgoKSkgc3NhX29wZXJhbmRzIHsKKyAgIHN0cnVjdCBzc2Ffb3BlcmFuZF9tZW1vcnlfZCAqb3BlcmFuZF9tZW1vcnk7CisgICB1bnNpZ25lZCBvcGVyYW5kX21lbW9yeV9pbmRleDsKKyAgIC8qIEN1cnJlbnQgc2l6ZSBvZiB0aGUgb3BlcmFuZCBtZW1vcnkgYnVmZmVyLiAgKi8KKyAgIHVuc2lnbmVkIGludCBzc2Ffb3BlcmFuZF9tZW1fc2l6ZTsKKworICAgYm9vbCBvcHNfYWN0aXZlOworCisgICBzdHJ1Y3QgdXNlX29wdHlwZV9kICogR1RZICgoc2tpcCAoIiIpKSkgZnJlZV91c2VzOworfTsKKworI2RlZmluZSBVU0VfRlJPTV9QVFIoUFRSKQlnZXRfdXNlX2Zyb21fcHRyIChQVFIpCisjZGVmaW5lIERFRl9GUk9NX1BUUihQVFIpCWdldF9kZWZfZnJvbV9wdHIgKFBUUikKKyNkZWZpbmUgU0VUX1VTRShVU0UsIFYpCQlzZXRfc3NhX3VzZV9mcm9tX3B0ciAoVVNFLCBWKQorI2RlZmluZSBTRVRfREVGKERFRiwgVikJCSgoKihERUYpKSA9IChWKSkKKworI2RlZmluZSBVU0VfU1RNVChVU0UpCQkoVVNFKS0+bG9jLnN0bXQKKworI2RlZmluZSBVU0VfT1BfUFRSKE9QKQkJKCYoKE9QKS0+dXNlX3B0cikpCisjZGVmaW5lIFVTRV9PUChPUCkJCShVU0VfRlJPTV9QVFIgKFVTRV9PUF9QVFIgKE9QKSkpCisKKyNkZWZpbmUgUEhJX1JFU1VMVF9QVFIoUEhJKQlnaW1wbGVfcGhpX3Jlc3VsdF9wdHIgKFBISSkKKyNkZWZpbmUgUEhJX1JFU1VMVChQSEkpCQlERUZfRlJPTV9QVFIgKFBISV9SRVNVTFRfUFRSIChQSEkpKQorI2RlZmluZSBTRVRfUEhJX1JFU1VMVChQSEksIFYpCVNFVF9ERUYgKFBISV9SRVNVTFRfUFRSIChQSEkpLCAoVikpCisKKyNkZWZpbmUgUEhJX0FSR19ERUZfUFRSKFBISSwgSSkJZ2ltcGxlX3BoaV9hcmdfaW1tX3VzZV9wdHIgKChQSEkpLCAoSSkpCisjZGVmaW5lIFBISV9BUkdfREVGKFBISSwgSSkJVVNFX0ZST01fUFRSIChQSElfQVJHX0RFRl9QVFIgKChQSEkpLCAoSSkpKQorI2RlZmluZSBTRVRfUEhJX0FSR19ERUYoUEhJLCBJLCBWKQkJCQkJXAorCQkJCVNFVF9VU0UgKFBISV9BUkdfREVGX1BUUiAoKFBISSksIChJKSksIChWKSkKKyNkZWZpbmUgUEhJX0FSR19ERUZfRlJPTV9FREdFKFBISSwgRSkJCQkJCVwKKwkJCQlQSElfQVJHX0RFRiAoKFBISSksIChFKS0+ZGVzdF9pZHgpCisjZGVmaW5lIFBISV9BUkdfREVGX1BUUl9GUk9NX0VER0UoUEhJLCBFKQkJCQlcCisJCQkJUEhJX0FSR19ERUZfUFRSICgoUEhJKSwgKEUpLT5kZXN0X2lkeCkKKyNkZWZpbmUgUEhJX0FSR19JTkRFWF9GUk9NX1VTRShVU0UpICAgcGhpX2FyZ19pbmRleF9mcm9tX3VzZSAoVVNFKQorCisKK2V4dGVybiB2b2lkIGluaXRfc3NhX29wZXJhbmRzIChzdHJ1Y3QgZnVuY3Rpb24gKmZuKTsKK2V4dGVybiB2b2lkIGZpbmlfc3NhX29wZXJhbmRzICh2b2lkKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9zdG10X29wZXJhbmRzIChnaW1wbGUpOworZXh0ZXJuIHZvaWQgZnJlZV9zdG10X29wZXJhbmRzIChnaW1wbGUpOworZXh0ZXJuIGJvb2wgdmVyaWZ5X2ltbV9saW5rcyAoRklMRSAqZiwgdHJlZSB2YXIpOworZXh0ZXJuIGJvb2wgdmVyaWZ5X3NzYV9vcGVyYW5kcyAoZ2ltcGxlIHN0bXQpOworCitleHRlcm4gdm9pZCBkdW1wX2ltbWVkaWF0ZV91c2VzIChGSUxFICpmaWxlKTsKK2V4dGVybiB2b2lkIGR1bXBfaW1tZWRpYXRlX3VzZXNfZm9yIChGSUxFICpmaWxlLCB0cmVlIHZhcik7CitleHRlcm4gdm9pZCBkZWJ1Z19pbW1lZGlhdGVfdXNlcyAodm9pZCk7CitleHRlcm4gdm9pZCBkZWJ1Z19pbW1lZGlhdGVfdXNlc19mb3IgKHRyZWUgdmFyKTsKK2V4dGVybiB2b2lkIGR1bXBfZGVjbF9zZXQgKEZJTEUgKiwgYml0bWFwKTsKK2V4dGVybiB2b2lkIGRlYnVnX2RlY2xfc2V0IChiaXRtYXApOworCitleHRlcm4gYm9vbCBzc2Ffb3BlcmFuZHNfYWN0aXZlIChzdHJ1Y3QgZnVuY3Rpb24gKik7CisKK2V4dGVybiBib29sIHZpcnR1YWxfb3BlcmFuZF9wICh0cmVlKTsKK2V4dGVybiB2b2lkIHVubGlua19zdG10X3ZkZWYgKGdpbXBsZSk7CisKK2VudW0gc3NhX29wX2l0ZXJfdHlwZSB7CisgIHNzYV9vcF9pdGVyX25vbmUgPSAwLAorICBzc2Ffb3BfaXRlcl90cmVlLAorICBzc2Ffb3BfaXRlcl91c2UsCisgIHNzYV9vcF9pdGVyX2RlZgorfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbiB0aGUgb3BlcmFuZCBpdGVyYXRvciBsb29wcy4gIEl0IGNvbnRhaW5zIHRoZQorICAgaXRlbXMgcmVxdWlyZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wZXJhbmQgaXMgcmV0cmlldmVkIG5leHQuICBEdXJpbmcKKyAgIG9wdGltaXphdGlvbiwgdGhpcyBzdHJ1Y3R1cmUgaXMgc2NhbGFyaXplZCwgYW5kIGFueSB1bnVzZWQgZmllbGRzIGFyZQorICAgb3B0aW1pemVkIGF3YXksIHJlc3VsdGluZyBpbiBsaXR0bGUgb3ZlcmhlYWQuICAqLworCit0eXBlZGVmIHN0cnVjdCBzc2Ffb3BlcmFuZF9pdGVyYXRvcl9kCit7CisgIGVudW0gc3NhX29wX2l0ZXJfdHlwZSBpdGVyX3R5cGU7CisgIGJvb2wgZG9uZTsKKyAgaW50IGZsYWdzOworICB1bnNpZ25lZCBpOworICB1bnNpZ25lZCBudW1vcHM7CisgIHVzZV9vcHR5cGVfcCB1c2VzOworICBnaW1wbGUgc3RtdDsKK30gc3NhX29wX2l0ZXI7CisKKy8qIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGRldGVybWluZSB3aGljaCBvcGVyYW5kcyBhcmUgcmV0dXJuZWQgZHVyaW5nCisgICBleGVjdXRpb24gb2YgdGhlIGxvb3AuICAqLworI2RlZmluZSBTU0FfT1BfVVNFCQkweDAxCS8qIFJlYWwgVVNFIG9wZXJhbmRzLiAgKi8KKyNkZWZpbmUgU1NBX09QX0RFRgkJMHgwMgkvKiBSZWFsIERFRiBvcGVyYW5kcy4gICovCisjZGVmaW5lIFNTQV9PUF9WVVNFCQkweDA0CS8qIFZVU0Ugb3BlcmFuZHMuICAqLworI2RlZmluZSBTU0FfT1BfVkRFRgkJMHgwOAkvKiBWREVGIG9wZXJhbmRzLiAgKi8KKworLyogVGhlc2UgYXJlIGNvbW1vbmx5IGdyb3VwZWQgb3BlcmFuZCBmbGFncy4gICovCisjZGVmaW5lIFNTQV9PUF9WSVJUVUFMX1VTRVMJKFNTQV9PUF9WVVNFKQorI2RlZmluZSBTU0FfT1BfVklSVFVBTF9ERUZTCShTU0FfT1BfVkRFRikKKyNkZWZpbmUgU1NBX09QX0FMTF9WSVJUVUFMUyAgICAgKFNTQV9PUF9WSVJUVUFMX1VTRVMgfCBTU0FfT1BfVklSVFVBTF9ERUZTKQorI2RlZmluZSBTU0FfT1BfQUxMX1VTRVMJCShTU0FfT1BfVklSVFVBTF9VU0VTIHwgU1NBX09QX1VTRSkKKyNkZWZpbmUgU1NBX09QX0FMTF9ERUZTCQkoU1NBX09QX1ZJUlRVQUxfREVGUyB8IFNTQV9PUF9ERUYpCisjZGVmaW5lIFNTQV9PUF9BTExfT1BFUkFORFMJKFNTQV9PUF9BTExfVVNFUyB8IFNTQV9PUF9BTExfREVGUykKKworLyogVGhpcyBtYWNybyBleGVjdXRlcyBhIGxvb3Agb3ZlciB0aGUgb3BlcmFuZHMgb2YgU1RNVCBzcGVjaWZpZWQgaW4gRkxBRywKKyAgIHJldHVybmluZyBlYWNoIG9wZXJhbmQgYXMgYSAndHJlZScgaW4gdGhlIHZhcmlhYmxlIFRSRUVWQVIuICBJVEVSIGlzIGFuCisgICBzc2Ffb3BfaXRlciBzdHJ1Y3R1cmUgdXNlZCB0byBjb250cm9sIHRoZSBsb29wLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfU1NBX1RSRUVfT1BFUkFORChUUkVFVkFSLCBTVE1ULCBJVEVSLCBGTEFHUykJXAorICBmb3IgKFRSRUVWQVIgPSBvcF9pdGVyX2luaXRfdHJlZSAoJihJVEVSKSwgU1RNVCwgRkxBR1MpOwlcCisgICAgICAgIW9wX2l0ZXJfZG9uZSAoJihJVEVSKSk7CQkJCQlcCisgICAgICAgKHZvaWQpIChUUkVFVkFSID0gb3BfaXRlcl9uZXh0X3RyZWUgKCYoSVRFUikpKSkKKworLyogVGhpcyBtYWNybyBleGVjdXRlcyBhIGxvb3Agb3ZlciB0aGUgb3BlcmFuZHMgb2YgU1RNVCBzcGVjaWZpZWQgaW4gRkxBRywKKyAgIHJldHVybmluZyBlYWNoIG9wZXJhbmQgYXMgYSAndXNlX29wZXJhbmRfcCcgaW4gdGhlIHZhcmlhYmxlIFVTRVZBUi4KKyAgIElURVIgaXMgYW4gc3NhX29wX2l0ZXIgc3RydWN0dXJlIHVzZWQgdG8gY29udHJvbCB0aGUgbG9vcC4gICovCisjZGVmaW5lIEZPUl9FQUNIX1NTQV9VU0VfT1BFUkFORChVU0VWQVIsIFNUTVQsIElURVIsIEZMQUdTKQlcCisgIGZvciAoVVNFVkFSID0gb3BfaXRlcl9pbml0X3VzZSAoJihJVEVSKSwgU1RNVCwgRkxBR1MpOwlcCisgICAgICAgIW9wX2l0ZXJfZG9uZSAoJihJVEVSKSk7CQkJCQlcCisgICAgICAgVVNFVkFSID0gb3BfaXRlcl9uZXh0X3VzZSAoJihJVEVSKSkpCisKKy8qIFRoaXMgbWFjcm8gZXhlY3V0ZXMgYSBsb29wIG92ZXIgdGhlIG9wZXJhbmRzIG9mIFNUTVQgc3BlY2lmaWVkIGluIEZMQUcsCisgICByZXR1cm5pbmcgZWFjaCBvcGVyYW5kIGFzIGEgJ2RlZl9vcGVyYW5kX3AnIGluIHRoZSB2YXJpYWJsZSBERUZWQVIuCisgICBJVEVSIGlzIGFuIHNzYV9vcF9pdGVyIHN0cnVjdHVyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGxvb3AuICAqLworI2RlZmluZSBGT1JfRUFDSF9TU0FfREVGX09QRVJBTkQoREVGVkFSLCBTVE1ULCBJVEVSLCBGTEFHUykJXAorICBmb3IgKERFRlZBUiA9IG9wX2l0ZXJfaW5pdF9kZWYgKCYoSVRFUiksIFNUTVQsIEZMQUdTKTsJXAorICAgICAgICFvcF9pdGVyX2RvbmUgKCYoSVRFUikpOwkJCQkJXAorICAgICAgIERFRlZBUiA9IG9wX2l0ZXJfbmV4dF9kZWYgKCYoSVRFUikpKQorCisvKiBUaGlzIG1hY3JvIHdpbGwgZXhlY3V0ZSBhIGxvb3Agb3ZlciBhbGwgdGhlIGFyZ3VtZW50cyBvZiBhIFBISSB3aGljaAorICAgbWF0Y2ggRkxBR1MuICAgQSB1c2Vfb3BlcmFuZF9wIGlzIGFsd2F5cyByZXR1cm5lZCB2aWEgVVNFVkFSLiAgRkxBR1MKKyAgIGNhbiBiZSBlaXRoZXIgU1NBX09QX1VTRSBvciBTU0FfT1BfVklSVFVBTF9VU0VTIG9yIFNTQV9PUF9BTExfVVNFUy4gICovCisjZGVmaW5lIEZPUl9FQUNIX1BISV9BUkcoVVNFVkFSLCBTVE1ULCBJVEVSLCBGTEFHUykJCVwKKyAgZm9yICgoVVNFVkFSKSA9IG9wX2l0ZXJfaW5pdF9waGl1c2UgKCYoSVRFUiksIFNUTVQsIEZMQUdTKTsJXAorICAgICAgICFvcF9pdGVyX2RvbmUgKCYoSVRFUikpOwkJCQkJXAorICAgICAgIChVU0VWQVIpID0gb3BfaXRlcl9uZXh0X3VzZSAoJihJVEVSKSkpCisKKworLyogVGhpcyBtYWNybyB3aWxsIGV4ZWN1dGUgYSBsb29wIG92ZXIgYSBzdG10LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMKKyAgIGEgcmVhbCBzdG10IG9yIGEgUEhJIG5vZGUsIGxvb2tpbmcgYXQgdGhlIFVTRSBub2RlcyBtYXRjaGluZyBGTEFHUy4gICovCisjZGVmaW5lIEZPUl9FQUNIX1BISV9PUl9TVE1UX1VTRShVU0VWQVIsIFNUTVQsIElURVIsIEZMQUdTKQlcCisgIGZvciAoKFVTRVZBUikgPSAoZ2ltcGxlX2NvZGUgKFNUTVQpID09IEdJTVBMRV9QSEkgCQlcCisJCSAgID8gb3BfaXRlcl9pbml0X3BoaXVzZSAoJihJVEVSKSwgU1RNVCwgRkxBR1MpCVwKKwkJICAgOiBvcF9pdGVyX2luaXRfdXNlICgmKElURVIpLCBTVE1ULCBGTEFHUykpOwlcCisgICAgICAgIW9wX2l0ZXJfZG9uZSAoJihJVEVSKSk7CQkJCQlcCisgICAgICAgKFVTRVZBUikgPSBvcF9pdGVyX25leHRfdXNlICgmKElURVIpKSkKKworLyogVGhpcyBtYWNybyB3aWxsIGV4ZWN1dGUgYSBsb29wIG92ZXIgYSBzdG10LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMKKyAgIGEgcmVhbCBzdG10IG9yIGEgUEhJIG5vZGUsIGxvb2tpbmcgYXQgdGhlIERFRiBub2RlcyBtYXRjaGluZyBGTEFHUy4gICovCisjZGVmaW5lIEZPUl9FQUNIX1BISV9PUl9TVE1UX0RFRihERUZWQVIsIFNUTVQsIElURVIsIEZMQUdTKQlcCisgIGZvciAoKERFRlZBUikgPSAoZ2ltcGxlX2NvZGUgKFNUTVQpID09IEdJTVBMRV9QSEkgCQlcCisJCSAgID8gb3BfaXRlcl9pbml0X3BoaWRlZiAoJihJVEVSKSwgU1RNVCwgRkxBR1MpCVwKKwkJICAgOiBvcF9pdGVyX2luaXRfZGVmICgmKElURVIpLCBTVE1ULCBGTEFHUykpOwlcCisgICAgICAgIW9wX2l0ZXJfZG9uZSAoJihJVEVSKSk7CQkJCQlcCisgICAgICAgKERFRlZBUikgPSBvcF9pdGVyX25leHRfZGVmICgmKElURVIpKSkKKworLyogVGhpcyBtYWNybyByZXR1cm5zIGFuIG9wZXJhbmQgaW4gU1RNVCBhcyBhIHRyZWUgaWYgaXQgaXMgdGhlIE9OTFkKKyAgIG9wZXJhbmQgbWF0Y2hpbmcgRkxBR1MuICBJZiB0aGVyZSBhcmUgMCBvciBtb3JlIHRoYW4gMSBvcGVyYW5kIG1hdGNoaW5nCisgICBGTEFHUywgdGhlbiBOVUxMX1RSRUUgaXMgcmV0dXJuZWQuICAqLworI2RlZmluZSBTSU5HTEVfU1NBX1RSRUVfT1BFUkFORChTVE1ULCBGTEFHUykJCQlcCisgIHNpbmdsZV9zc2FfdHJlZV9vcGVyYW5kIChTVE1ULCBGTEFHUykKKworLyogVGhpcyBtYWNybyByZXR1cm5zIGFuIG9wZXJhbmQgaW4gU1RNVCBhcyBhIHVzZV9vcGVyYW5kX3AgaWYgaXQgaXMgdGhlIE9OTFkKKyAgIG9wZXJhbmQgbWF0Y2hpbmcgRkxBR1MuICBJZiB0aGVyZSBhcmUgMCBvciBtb3JlIHRoYW4gMSBvcGVyYW5kIG1hdGNoaW5nCisgICBGTEFHUywgdGhlbiBOVUxMX1VTRV9PUEVSQU5EX1AgaXMgcmV0dXJuZWQuICAqLworI2RlZmluZSBTSU5HTEVfU1NBX1VTRV9PUEVSQU5EKFNUTVQsIEZMQUdTKQkJCVwKKyAgc2luZ2xlX3NzYV91c2Vfb3BlcmFuZCAoU1RNVCwgRkxBR1MpCisKKy8qIFRoaXMgbWFjcm8gcmV0dXJucyBhbiBvcGVyYW5kIGluIFNUTVQgYXMgYSBkZWZfb3BlcmFuZF9wIGlmIGl0IGlzIHRoZSBPTkxZCisgICBvcGVyYW5kIG1hdGNoaW5nIEZMQUdTLiAgSWYgdGhlcmUgYXJlIDAgb3IgbW9yZSB0aGFuIDEgb3BlcmFuZCBtYXRjaGluZworICAgRkxBR1MsIHRoZW4gTlVMTF9ERUZfT1BFUkFORF9QIGlzIHJldHVybmVkLiAgKi8KKyNkZWZpbmUgU0lOR0xFX1NTQV9ERUZfT1BFUkFORChTVE1ULCBGTEFHUykJCQlcCisgIHNpbmdsZV9zc2FfZGVmX29wZXJhbmQgKFNUTVQsIEZMQUdTKQorCisvKiBUaGlzIG1hY3JvIHJldHVybnMgVFJVRSBpZiB0aGVyZSBhcmUgbm8gb3BlcmFuZHMgbWF0Y2hpbmcgRkxBR1MgaW4gU1RNVC4gICovCisjZGVmaW5lIFpFUk9fU1NBX09QRVJBTkRTKFNUTVQsIEZMQUdTKSAJemVyb19zc2Ffb3BlcmFuZHMgKFNUTVQsIEZMQUdTKQorCisvKiBUaGlzIG1hY3JvIGNvdW50cyB0aGUgbnVtYmVyIG9mIG9wZXJhbmRzIGluIFNUTVQgbWF0Y2hpbmcgRkxBR1MuICAqLworI2RlZmluZSBOVU1fU1NBX09QRVJBTkRTKFNUTVQsIEZMQUdTKQludW1fc3NhX29wZXJhbmRzIChTVE1ULCBGTEFHUykKKworI2VuZGlmICAvKiBHQ0NfVFJFRV9TU0FfT1BFUkFORFNfSCAgKi8KZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLXNzYS1zY2N2bi5oIGIvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RyZWUtc3NhLXNjY3ZuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyZjdkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLXNzYS1zY2N2bi5oCkBAIC0wLDAgKzEsMjQzIEBACisvKiBUcmVlIFNDQyB2YWx1ZSBudW1iZXJpbmcKKyAgIENvcHlyaWdodCAoQykgMjAwNy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgRGFuaWVsIEJlcmxpbiA8ZGJlcmxpbkBkYmVybGluLm9yZz4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgVFJFRV9TU0FfU0NDVk5fSAorI2RlZmluZSBUUkVFX1NTQV9TQ0NWTl9ICisKKy8qIEluIHRyZWUtc3NhLXNjY3ZuLmMgICovCitib29sIGV4cHJlc3Npb25zX2VxdWFsX3AgKHRyZWUsIHRyZWUpOworCisKKy8qIFRPUCBvZiB0aGUgVk4gbGF0dGljZS4gICovCitleHRlcm4gdHJlZSBWTl9UT1A7CisKKy8qIE4tYXJ5IG9wZXJhdGlvbnMgaW4gdGhlIGhhc2h0YWJsZSBjb25zaXN0IG9mIGxlbmd0aCBvcGVyYW5kcywgYW4KKyAgIG9wY29kZSwgYW5kIGEgdHlwZS4gIFJlc3VsdCBpcyB0aGUgdmFsdWUgbnVtYmVyIG9mIHRoZSBvcGVyYXRpb24sCisgICBhbmQgaGFzaGNvZGUgaXMgc3RvcmVkIHRvIGF2b2lkIGhhdmluZyB0byBjYWxjdWxhdGUgaXQKKyAgIHJlcGVhdGVkbHkuICAqLworCit0eXBlZGVmIHN0cnVjdCB2bl9uYXJ5X29wX3MKK3sKKyAgLyogVW5pcXVlIGlkZW50aWZ5IHRoYXQgYWxsIGV4cHJlc3Npb25zIHdpdGggdGhlIHNhbWUgdmFsdWUgaGF2ZS4gKi8KKyAgdW5zaWduZWQgaW50IHZhbHVlX2lkOworICBFTlVNX0JJVEZJRUxEKHRyZWVfY29kZSkgb3Bjb2RlIDogMTY7CisgIHVuc2lnbmVkIGxlbmd0aCA6IDE2OworICBoYXNodmFsX3QgaGFzaGNvZGU7CisgIHRyZWUgcmVzdWx0OworICB0cmVlIHR5cGU7CisgIHRyZWUgb3BbMV07Cit9ICp2bl9uYXJ5X29wX3Q7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCB2bl9uYXJ5X29wX3MgKmNvbnN0X3ZuX25hcnlfb3BfdDsKKworLyogUmV0dXJuIHRoZSBzaXplIG9mIGEgdm5fbmFyeV9vcF90IHdpdGggTEVOR1RIIG9wZXJhbmRzLiAgKi8KKworc3RhdGljIGlubGluZSBzaXplX3QKK3NpemVvZl92bl9uYXJ5X29wICh1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworICByZXR1cm4gc2l6ZW9mIChzdHJ1Y3Qgdm5fbmFyeV9vcF9zKSArIHNpemVvZiAodHJlZSkgKiBsZW5ndGggLSBzaXplb2YgKHRyZWUpOworfQorCisvKiBQaGkgbm9kZXMgaW4gdGhlIGhhc2h0YWJsZSBjb25zaXN0IG9mIHRoZWlyIG5vbi1WTl9UT1AgcGhpCisgICBhcmd1bWVudHMsIGFuZCB0aGUgYmFzaWMgYmxvY2sgdGhlIHBoaSBpcyBpbi4gUmVzdWx0IGlzIHRoZSB2YWx1ZQorICAgbnVtYmVyIG9mIHRoZSBvcGVyYXRpb24sIGFuZCBoYXNoY29kZSBpcyBzdG9yZWQgdG8gYXZvaWQgaGF2aW5nIHRvCisgICBjYWxjdWxhdGUgaXQgcmVwZWF0ZWRseS4gIFBoaSBub2RlcyBub3QgaW4gdGhlIHNhbWUgYmxvY2sgYXJlIG5ldmVyCisgICBjb25zaWRlcmVkIGVxdWl2YWxlbnQuICAqLworCit0eXBlZGVmIHN0cnVjdCB2bl9waGlfcworeworICAvKiBVbmlxdWUgaWRlbnRpZmllciB0aGF0IGFsbCBleHByZXNzaW9ucyB3aXRoIHRoZSBzYW1lIHZhbHVlIGhhdmUuICovCisgIHVuc2lnbmVkIGludCB2YWx1ZV9pZDsKKyAgaGFzaHZhbF90IGhhc2hjb2RlOworICB2ZWM8dHJlZT4gcGhpYXJnczsKKyAgYmFzaWNfYmxvY2sgYmxvY2s7CisgIHRyZWUgdHlwZTsKKyAgdHJlZSByZXN1bHQ7Cit9ICp2bl9waGlfdDsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IHZuX3BoaV9zICpjb25zdF92bl9waGlfdDsKKworLyogUmVmZXJlbmNlIG9wZXJhbmRzIG9ubHkgZXhpc3QgaW4gcmVmZXJlbmNlIG9wZXJhdGlvbnMgc3RydWN0dXJlcy4KKyAgIFRoZXkgY29uc2lzdCBvZiBhbiBvcGNvZGUsIHR5cGUsIGFuZCBzb21lIG51bWJlciBvZiBvcGVyYW5kcy4gIEZvcgorICAgYSBnaXZlbiBvcGNvZGUsIHNvbWUsIGFsbCwgb3Igbm9uZSBvZiB0aGUgb3BlcmFuZHMgbWF5IGJlIHVzZWQuCisgICBUaGUgb3BlcmFuZHMgYXJlIHRoZXJlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiB0aGF0IG1ha2VzIHVwIHRoZQorICAgcG9ydGlvbiBvZiB0aGUgYWRkcmVzc2luZyBjYWxjdWxhdGlvbiB0aGF0IG9wY29kZSBwZXJmb3Jtcy4gICovCisKK3R5cGVkZWYgc3RydWN0IHZuX3JlZmVyZW5jZV9vcF9zdHJ1Y3QKK3sKKyAgZW51bSB0cmVlX2NvZGUgb3Bjb2RlOworICAvKiBDb25zdGFudCBvZmZzZXQgdGhpcyBvcCBhZGRzIG9yIC0xIGlmIGl0IGlzIHZhcmlhYmxlLiAgKi8KKyAgSE9TVF9XSURFX0lOVCBvZmY7CisgIHRyZWUgdHlwZTsKKyAgdHJlZSBvcDA7CisgIHRyZWUgb3AxOworICB0cmVlIG9wMjsKK30gdm5fcmVmZXJlbmNlX29wX3M7Cit0eXBlZGVmIHZuX3JlZmVyZW5jZV9vcF9zICp2bl9yZWZlcmVuY2Vfb3BfdDsKK3R5cGVkZWYgY29uc3Qgdm5fcmVmZXJlbmNlX29wX3MgKmNvbnN0X3ZuX3JlZmVyZW5jZV9vcF90OworCisKKy8qIEEgcmVmZXJlbmNlIG9wZXJhdGlvbiBpbiB0aGUgaGFzaHRhYmxlIGlzIHJlcHJlc2VudGF0aW9uIGFzCisgICB0aGUgdnVzZSwgcmVwcmVzZW50aW5nIHRoZSBtZW1vcnkgc3RhdGUgYXQgdGhlIHRpbWUgb2YKKyAgIHRoZSBvcGVyYXRpb24sIGFuZCBhIGNvbGxlY3Rpb24gb2Ygb3BlcmFuZHMgdGhhdCBtYWtlIHVwIHRoZQorICAgYWRkcmVzc2luZyBjYWxjdWxhdGlvbi4gIElmIHR3byB2bl9yZWZlcmVuY2VfdCdzIGhhdmUgdGhlIHNhbWUgc2V0CisgICBvZiBvcGVyYW5kcywgdGhleSBhY2Nlc3MgdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLiBXZSBhbHNvIHN0b3JlCisgICB0aGUgcmVzdWx0aW5nIHZhbHVlIG51bWJlciwgYW5kIHRoZSBoYXNoY29kZS4gICovCisKK3R5cGVkZWYgc3RydWN0IHZuX3JlZmVyZW5jZV9zCit7CisgIC8qIFVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgYWxsIGV4cHJlc3Npb25zIHdpdGggdGhlIHNhbWUgdmFsdWUgaGF2ZS4gKi8KKyAgdW5zaWduZWQgaW50IHZhbHVlX2lkOworICBoYXNodmFsX3QgaGFzaGNvZGU7CisgIHRyZWUgdnVzZTsKKyAgYWxpYXNfc2V0X3R5cGUgc2V0OworICB0cmVlIHR5cGU7CisgIHZlYzx2bl9yZWZlcmVuY2Vfb3Bfcz4gb3BlcmFuZHM7CisgIHRyZWUgcmVzdWx0OworICB0cmVlIHJlc3VsdF92ZGVmOworfSAqdm5fcmVmZXJlbmNlX3Q7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCB2bl9yZWZlcmVuY2VfcyAqY29uc3Rfdm5fcmVmZXJlbmNlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHZuX2NvbnN0YW50X3MKK3sKKyAgdW5zaWduZWQgaW50IHZhbHVlX2lkOworICBoYXNodmFsX3QgaGFzaGNvZGU7CisgIHRyZWUgY29uc3RhbnQ7Cit9ICp2bl9jb25zdGFudF90OworCitlbnVtIHZuX2tpbmQgeyBWTl9OT05FLCBWTl9DT05TVEFOVCwgVk5fTkFSWSwgVk5fUkVGRVJFTkNFLCBWTl9QSEkgfTsKK2VudW0gdm5fa2luZCB2bl9nZXRfc3RtdF9raW5kIChnaW1wbGUpOworCisvKiBIYXNoIHRoZSB0eXBlIFRZUEUgdXNpbmcgYml0cyB0aGF0IGRpc3Rpbmd1aXNoZXMgaXQgaW4gdGhlCisgICB0eXBlc19jb21wYXRpYmxlX3Agc2Vuc2UuICAqLworCitzdGF0aWMgaW5saW5lIGhhc2h2YWxfdAordm5faGFzaF90eXBlICh0cmVlIHR5cGUpCit7CisgIHJldHVybiAoSU5URUdSQUxfVFlQRV9QICh0eXBlKQorCSAgKyAoSU5URUdSQUxfVFlQRV9QICh0eXBlKQorCSAgICAgPyBUWVBFX1BSRUNJU0lPTiAodHlwZSkgKyBUWVBFX1VOU0lHTkVEICh0eXBlKSA6IDApKTsKK30KKworLyogSGFzaCB0aGUgY29uc3RhbnQgQ09OU1RBTlQgd2l0aCBkaXN0aW5ndWlzaGluZyB0eXBlIGluY29tcGF0aWJsZQorICAgY29uc3RhbnRzIGluIHRoZSB0eXBlc19jb21wYXRpYmxlX3Agc2Vuc2UuICAqLworCitzdGF0aWMgaW5saW5lIGhhc2h2YWxfdAordm5faGFzaF9jb25zdGFudF93aXRoX3R5cGUgKHRyZWUgY29uc3RhbnQpCit7CisgIHJldHVybiAoaXRlcmF0aXZlX2hhc2hfZXhwciAoY29uc3RhbnQsIDApCisJICArIHZuX2hhc2hfdHlwZSAoVFJFRV9UWVBFIChjb25zdGFudCkpKTsKK30KKworLyogQ29tcGFyZSB0aGUgY29uc3RhbnRzIEMxIGFuZCBDMiB3aXRoIGRpc3Rpbmd1aXNoaW5nIHR5cGUgaW5jb21wYXRpYmxlCisgICBjb25zdGFudHMgaW4gdGhlIHR5cGVzX2NvbXBhdGlibGVfcCBzZW5zZS4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAordm5fY29uc3RhbnRfZXFfd2l0aF90eXBlICh0cmVlIGMxLCB0cmVlIGMyKQoreworICByZXR1cm4gKGV4cHJlc3Npb25zX2VxdWFsX3AgKGMxLCBjMikKKwkgICYmIHR5cGVzX2NvbXBhdGlibGVfcCAoVFJFRV9UWVBFIChjMSksIFRSRUVfVFlQRSAoYzIpKSk7Cit9CisKK3R5cGVkZWYgc3RydWN0IHZuX3NzYV9hdXgKK3sKKyAgLyogVmFsdWUgbnVtYmVyLiBUaGlzIG1heSBiZSBhbiBTU0EgbmFtZSBvciBhIGNvbnN0YW50LiAgKi8KKyAgdHJlZSB2YWxudW07CisgIC8qIFJlcHJlc2VudGF0aXZlIGV4cHJlc3Npb24sIGlmIG5vdCBhIGRpcmVjdCBjb25zdGFudC4gKi8KKyAgdHJlZSBleHByOworCisgIC8qIFVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgYWxsIGV4cHJlc3Npb25zIHdpdGggdGhlIHNhbWUgdmFsdWUgaGF2ZS4gKi8KKyAgdW5zaWduZWQgaW50IHZhbHVlX2lkOworCisgIC8qIFNDQyBpbmZvcm1hdGlvbi4gICovCisgIHVuc2lnbmVkIGludCBkZnNudW07CisgIHVuc2lnbmVkIGludCBsb3c7CisgIHVuc2lnbmVkIHZpc2l0ZWQgOiAxOworICB1bnNpZ25lZCBvbl9zY2NzdGFjayA6IDE7CisKKyAgLyogV2hldGhlciB0aGUgcmVwcmVzZW50YXRpdmUgZXhwcmVzc2lvbiBjb250YWlucyBjb25zdGFudHMuICAqLworICB1bnNpZ25lZCBoYXNfY29uc3RhbnRzIDogMTsKKyAgLyogV2hldGhlciB0aGUgU1NBX05BTUUgaGFzIGJlZW4gdmFsdWUgbnVtYmVyZWQgYWxyZWFkeS4gIFRoaXMgaXMKKyAgICAgb25seSBzYXlpbmcgd2hldGhlciB2aXNpdF91c2UgaGFzIGJlZW4gY2FsbGVkIG9uIGl0IGF0IGxlYXN0CisgICAgIG9uY2UuICBJdCBjYW5ub3QgYmUgdXNlZCB0byBhdm9pZCB2aXNpdGF0aW9uIGZvciBTU0FfTkFNRSdzCisgICAgIGludm9sdmVkIGluIG5vbi1zaW5nbGV0b24gU0NDJ3MuICAqLworICB1bnNpZ25lZCB1c2VfcHJvY2Vzc2VkIDogMTsKKworICAvKiBXaGV0aGVyIHRoZSBTU0FfTkFNRSBoYXMgbm8gZGVmaW5pbmcgc3RhdGVtZW50IGFuZCB0aHVzIGFuCisgICAgIGluc2VydGlvbiBvZiBzdWNoIHdpdGggRVhQUiBhcyBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZQorICAgICBhIHVzZSBjYW4gYmUgY3JlYXRlZCBvZiBpdC4gICovCisgIHVuc2lnbmVkIG5lZWRzX2luc2VydGlvbiA6IDE7Cit9ICp2bl9zc2FfYXV4X3Q7CisKK3R5cGVkZWYgZW51bSB7IFZOX05PV0FMSywgVk5fV0FMSywgVk5fV0FMS1JFV1JJVEUgfSB2bl9sb29rdXBfa2luZDsKKworLyogUmV0dXJuIHRoZSB2YWx1ZSBudW1iZXJpbmcgaW5mbyBmb3IgYW4gU1NBX05BTUUuICAqLworZXh0ZXJuIHZuX3NzYV9hdXhfdCBWTl9JTkZPICh0cmVlKTsKK2V4dGVybiB2bl9zc2FfYXV4X3QgVk5fSU5GT19HRVQgKHRyZWUpOwordHJlZSB2bl9nZXRfZXhwcl9mb3IgKHRyZWUpOworYm9vbCBydW5fc2NjX3ZuICh2bl9sb29rdXBfa2luZCk7Cit2b2lkIGZyZWVfc2NjX3ZuICh2b2lkKTsKK3RyZWUgdm5fbmFyeV9vcF9sb29rdXAgKHRyZWUsIHZuX25hcnlfb3BfdCAqKTsKK3RyZWUgdm5fbmFyeV9vcF9sb29rdXBfc3RtdCAoZ2ltcGxlLCB2bl9uYXJ5X29wX3QgKik7Cit0cmVlIHZuX25hcnlfb3BfbG9va3VwX3BpZWNlcyAodW5zaWduZWQgaW50LCBlbnVtIHRyZWVfY29kZSwKKwkJCSAgICAgICB0cmVlLCB0cmVlICosIHZuX25hcnlfb3BfdCAqKTsKK3ZuX25hcnlfb3BfdCB2bl9uYXJ5X29wX2luc2VydCAodHJlZSwgdHJlZSk7Cit2bl9uYXJ5X29wX3Qgdm5fbmFyeV9vcF9pbnNlcnRfc3RtdCAoZ2ltcGxlLCB0cmVlKTsKK3ZuX25hcnlfb3BfdCB2bl9uYXJ5X29wX2luc2VydF9waWVjZXMgKHVuc2lnbmVkIGludCwgZW51bSB0cmVlX2NvZGUsCisJCQkJICAgICAgIHRyZWUsIHRyZWUgKiwgdHJlZSwgdW5zaWduZWQgaW50KTsKK3ZvaWQgdm5fcmVmZXJlbmNlX2ZvbGRfaW5kaXJlY3QgKHZlYzx2bl9yZWZlcmVuY2Vfb3Bfcz4gKiwKKwkJCQkgdW5zaWduZWQgaW50ICopOwordm9pZCBjb3B5X3JlZmVyZW5jZV9vcHNfZnJvbV9yZWYgKHRyZWUsIHZlYzx2bl9yZWZlcmVuY2Vfb3Bfcz4gKik7Cit2b2lkIGNvcHlfcmVmZXJlbmNlX29wc19mcm9tX2NhbGwgKGdpbXBsZSwgdmVjPHZuX3JlZmVyZW5jZV9vcF9zPiAqKTsKK2Jvb2wgYW9fcmVmX2luaXRfZnJvbV92bl9yZWZlcmVuY2UgKGFvX3JlZiAqLCBhbGlhc19zZXRfdHlwZSwgdHJlZSwKKwkJCQkgICAgdmVjPHZuX3JlZmVyZW5jZV9vcF9zPiApOwordHJlZSB2bl9yZWZlcmVuY2VfbG9va3VwX3BpZWNlcyAodHJlZSwgYWxpYXNfc2V0X3R5cGUsIHRyZWUsCisJCQkJIHZlYzx2bl9yZWZlcmVuY2Vfb3Bfcz4gLAorCQkJCSB2bl9yZWZlcmVuY2VfdCAqLCB2bl9sb29rdXBfa2luZCk7Cit0cmVlIHZuX3JlZmVyZW5jZV9sb29rdXAgKHRyZWUsIHRyZWUsIHZuX2xvb2t1cF9raW5kLCB2bl9yZWZlcmVuY2VfdCAqKTsKK3ZuX3JlZmVyZW5jZV90IHZuX3JlZmVyZW5jZV9pbnNlcnQgKHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUpOwordm5fcmVmZXJlbmNlX3Qgdm5fcmVmZXJlbmNlX2luc2VydF9waWVjZXMgKHRyZWUsIGFsaWFzX3NldF90eXBlLCB0cmVlLAorCQkJCQkgICB2ZWM8dm5fcmVmZXJlbmNlX29wX3M+ICwKKwkJCQkJICAgdHJlZSwgdW5zaWduZWQgaW50KTsKKworaGFzaHZhbF90IHZuX25hcnlfb3BfY29tcHV0ZV9oYXNoIChjb25zdCB2bl9uYXJ5X29wX3QpOworaW50IHZuX25hcnlfb3BfZXEgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK2Jvb2wgdm5fbmFyeV9tYXlfdHJhcCAodm5fbmFyeV9vcF90KTsKK2hhc2h2YWxfdCB2bl9yZWZlcmVuY2VfY29tcHV0ZV9oYXNoIChjb25zdCB2bl9yZWZlcmVuY2VfdCk7CitpbnQgdm5fcmVmZXJlbmNlX2VxIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Cit1bnNpZ25lZCBpbnQgZ2V0X21heF92YWx1ZV9pZCAodm9pZCk7Cit1bnNpZ25lZCBpbnQgZ2V0X25leHRfdmFsdWVfaWQgKHZvaWQpOwordW5zaWduZWQgaW50IGdldF9jb25zdGFudF92YWx1ZV9pZCAodHJlZSk7Cit1bnNpZ25lZCBpbnQgZ2V0X29yX2FsbG9jX2NvbnN0YW50X3ZhbHVlX2lkICh0cmVlKTsKK2Jvb2wgdmFsdWVfaWRfY29uc3RhbnRfcCAodW5zaWduZWQgaW50KTsKK3RyZWUgZnVsbHlfY29uc3RhbnRfdm5fcmVmZXJlbmNlX3AgKHZuX3JlZmVyZW5jZV90KTsKKworLyogVmFsdWVpemUgTkFNRSBpZiBpdCBpcyBhbiBTU0EgbmFtZSwgb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIGl0LiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCit2bl92YWx1ZWl6ZSAodHJlZSBuYW1lKQoreworICBpZiAoVFJFRV9DT0RFIChuYW1lKSA9PSBTU0FfTkFNRSkKKyAgICB7CisgICAgICB0cmVlIHRlbSA9IFZOX0lORk8gKG5hbWUpLT52YWxudW07CisgICAgICByZXR1cm4gdGVtID09IFZOX1RPUCA/IG5hbWUgOiB0ZW07CisgICAgfQorICByZXR1cm4gbmFtZTsKK30KKworI2VuZGlmIC8qIFRSRUVfU1NBX1NDQ1ZOX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEzMDA3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLmRlZgpAQCAtMCwwICsxLDEyMzQgQEAKKy8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgYW5kIGRvY3VtZW50YXRpb24gZm9yIHRoZQorICAgdHJlZSBjb2RlcyB1c2VkIGluIEdDQy4KKyAgIENvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworCisvKiBGb3IgdGNjX3JlZmVyZW5jZXMsIHRjY19leHByZXNzaW9uLCB0Y2NfY29tcGFyaXNvbiwgdGNjX3VuYXJ5LAorICAgdGNjX2JpbmFyeSwgYW5kIHRjY19zdGF0ZW1lbnQgbm9kZXMsIHdoaWNoIHVzZSBzdHJ1Y3QgdHJlZV9leHAsIHRoZQorICAgNHRoIGVsZW1lbnQgaXMgdGhlIG51bWJlciBvZiBhcmd1bWVudCBzbG90cyB0byBhbGxvY2F0ZS4gIFRoaXMKKyAgIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIHRyZWUgbm9kZSBvYmplY3QuICBPdGhlciBub2RlcyB1c2UKKyAgIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHNpemUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHJlZV91bmlvbgorICAgbWVtYmVyIHN0cnVjdHVyZTsgdGhlIDR0aCBlbGVtZW50IHNob3VsZCBiZSB6ZXJvLiAgTGFuZ3VhZ2VzIHRoYXQKKyAgIGRlZmluZSBsYW5ndWFnZS1zcGVjaWZpYyB0Y2NfZXhjZXB0aW9uYWwgb3IgdGNjX2NvbnN0YW50IGNvZGVzIG11c3QKKyAgIGRlZmluZSB0aGUgdHJlZV9zaXplIGxhbmdob29rIHRvIHNheSBob3cgYmlnIHRoZXkgYXJlLgorCisgICBUaGVzZSB0cmVlIGNvZGVzIGhhdmUgYmVlbiBzb3J0ZWQgc28gdGhhdCB0aGUgbWFjcm9zIGluIHRyZWUuaCB0aGF0CisgICBjaGVjayBmb3IgdmFyaW91cyB0cmVlIGNvZGVzIGFyZSBvcHRpbWl6ZWQgaW50byByYW5nZSBjaGVja3MuICBUaGlzCisgICBnaXZlcyBhIG1lYXN1cmFibGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuICBXaGVuIGFkZGluZyBhIG5ldworICAgY29kZSwgY29uc2lkZXIgaXRzIHBsYWNlbWVudCBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgY29kZXMuICAqLworCisvKiBBbnkgZXJyb25lb3VzIGNvbnN0cnVjdCBpcyBwYXJzZWQgaW50byBhIG5vZGUgb2YgdGhpcyB0eXBlLgorICAgVGhpcyB0eXBlIG9mIG5vZGUgaXMgYWNjZXB0ZWQgd2l0aG91dCBjb21wbGFpbnQgaW4gYWxsIGNvbnRleHRzCisgICBieSBsYXRlciBwYXJzaW5nIGFjdGl2aXRpZXMsIHRvIGF2b2lkIG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzCisgICBmb3Igb25lIGVycm9yLgorICAgTm8gZmllbGRzIGluIHRoZXNlIG5vZGVzIGFyZSB1c2VkIGV4Y2VwdCB0aGUgVFJFRV9DT0RFLiAgKi8KK0RFRlRSRUVDT0RFIChFUlJPUl9NQVJLLCAiZXJyb3JfbWFyayIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogVXNlZCB0byByZXByZXNlbnQgYSBuYW1lIChzdWNoIGFzLCBpbiB0aGUgREVDTF9OQU1FIG9mIGEgZGVjbCBub2RlKS4KKyAgIEludGVybmFsbHkgaXQgbG9va3MgbGlrZSBhIFNUUklOR19DU1Qgbm9kZS4KKyAgIFRoZXJlIGlzIG9ubHkgb25lIElERU5USUZJRVJfTk9ERSBldmVyIG1hZGUgZm9yIGFueSBwYXJ0aWN1bGFyIG5hbWUuCisgICBVc2UgYGdldF9pZGVudGlmaWVyJyB0byBnZXQgaXQgKG9yIGNyZWF0ZSBpdCwgdGhlIGZpcnN0IHRpbWUpLiAgKi8KK0RFRlRSRUVDT0RFIChJREVOVElGSUVSX05PREUsICJpZGVudGlmaWVyX25vZGUiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIEhhcyB0aGUgVFJFRV9WQUxVRSBhbmQgVFJFRV9QVVJQT1NFIGZpZWxkcy4gICovCisvKiBUaGVzZSBub2RlcyBhcmUgbWFkZSBpbnRvIGxpc3RzIGJ5IGNoYWluaW5nIHRocm91Z2ggdGhlCisgICBUUkVFX0NIQUlOIGZpZWxkLiAgVGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0IGxpdmUgaW4gdGhlCisgICBUUkVFX1ZBTFVFIGZpZWxkcywgd2hpbGUgVFJFRV9QVVJQT1NFIGZpZWxkcyBhcmUgb2NjYXNpb25hbGx5CisgICB1c2VkIGFzIHdlbGwgdG8gZ2V0IHRoZSBlZmZlY3Qgb2YgTGlzcCBhc3NvY2lhdGlvbiBsaXN0cy4gICovCitERUZUUkVFQ09ERSAoVFJFRV9MSVNULCAidHJlZV9saXN0IiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBUaGVzZSBub2RlcyBjb250YWluIGFuIGFycmF5IG9mIHRyZWUgbm9kZXMuICAqLworREVGVFJFRUNPREUgKFRSRUVfVkVDLCAidHJlZV92ZWMiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIEEgc3ltYm9sIGJpbmRpbmcgYmxvY2suICBUaGVzZSBhcmUgYXJyYW5nZWQgaW4gYSB0cmVlLAorICAgd2hlcmUgdGhlIEJMT0NLX1NVQkJMT0NLUyBmaWVsZCBjb250YWlucyBhIGNoYWluIG9mIHN1YmJsb2NrcworICAgY2hhaW5lZCB0aHJvdWdoIHRoZSBCTE9DS19DSEFJTiBmaWVsZC4KKyAgIEJMT0NLX1NVUEVSQ09OVEVYVCBwb2ludHMgdG8gdGhlIHBhcmVudCBibG9jay4KKyAgICAgRm9yIGEgYmxvY2sgd2hpY2ggcmVwcmVzZW50cyB0aGUgb3V0ZXJtb3N0IHNjb3BlIG9mIGEgZnVuY3Rpb24sIGl0CisgICAgIHBvaW50cyB0byB0aGUgRlVOQ1RJT05fREVDTCBub2RlLgorICAgQkxPQ0tfVkFSUyBwb2ludHMgdG8gYSBjaGFpbiBvZiBkZWNsIG5vZGVzLgorICAgQkxPQ0tfQ0hBSU4gcG9pbnRzIHRvIHRoZSBuZXh0IEJMT0NLIGF0IHRoZSBzYW1lIGxldmVsLgorICAgQkxPQ0tfQUJTVFJBQ1RfT1JJR0lOIHBvaW50cyB0byB0aGUgb3JpZ2luYWwgKGFic3RyYWN0KSB0cmVlIG5vZGUgd2hpY2gKKyAgIHRoaXMgYmxvY2sgaXMgYW4gaW5zdGFuY2Ugb2YsIG9yIGVsc2UgaXMgTlVMTCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMKKyAgIGJsb2NrIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBhbnl0aGluZyBlbHNlLiAgV2hlbiBub24tTlVMTCwgdGhlIHZhbHVlCisgICBjb3VsZCBlaXRoZXIgcG9pbnQgdG8gYW5vdGhlciBCTE9DSyBub2RlIG9yIGl0IGNvdWxkIHBvaW50IHRvIGEKKyAgIEZVTkNUSU9OX0RFQ0wgbm9kZSAoZS5nLiBpbiB0aGUgY2FzZSBvZiBhIGJsb2NrIHJlcHJlc2VudGluZyB0aGUKKyAgIG91dGVybW9zdCBzY29wZSBvZiBhIHBhcnRpY3VsYXIgaW5saW5pbmcgb2YgYSBmdW5jdGlvbikuCisgICBCTE9DS19BQlNUUkFDVCBpcyBub256ZXJvIGlmIHRoZSBibG9jayByZXByZXNlbnRzIGFuIGFic3RyYWN0CisgICBpbnN0YW5jZSBvZiBhIGJsb2NrIChpLmUuIG9uZSB3aGljaCBpcyBuZXN0ZWQgd2l0aGluIGFuIGFic3RyYWN0CisgICBpbnN0YW5jZSBvZiBhbiBpbmxpbmUgZnVuY3Rpb24pLgorICAgVFJFRV9BU01fV1JJVFRFTiBpcyBub256ZXJvIGlmIHRoZSBibG9jayB3YXMgYWN0dWFsbHkgcmVmZXJlbmNlZAorICAgaW4gdGhlIGdlbmVyYXRlZCBhc3NlbWJseS4gICovCitERUZUUkVFQ09ERSAoQkxPQ0ssICJibG9jayIsIHRjY19leGNlcHRpb25hbCwgMCkKKwwKKy8qIEVhY2ggZGF0YSB0eXBlIGlzIHJlcHJlc2VudGVkIGJ5IGEgdHJlZSBub2RlIHdob3NlIGNvZGUgaXMgb25lIG9mCisgICB0aGUgZm9sbG93aW5nOiAgKi8KKy8qIEVhY2ggbm9kZSB0aGF0IHJlcHJlc2VudHMgYSBkYXRhIHR5cGUgaGFzIGEgY29tcG9uZW50IFRZUEVfU0laRQorICAgY29udGFpbmluZyBhIHRyZWUgdGhhdCBpcyBhbiBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBiaXRzLgorICAgVGhlIFRZUEVfTU9ERSBjb250YWlucyB0aGUgbWFjaGluZSBtb2RlIGZvciB2YWx1ZXMgb2YgdGhpcyB0eXBlLgorICAgVGhlIFRZUEVfUE9JTlRFUl9UTyBmaWVsZCBjb250YWlucyBhIHR5cGUgZm9yIGEgcG9pbnRlciB0byB0aGlzIHR5cGUsCisgICAgIG9yIHplcm8gaWYgbm8gc3VjaCBoYXMgYmVlbiBjcmVhdGVkIHlldC4KKyAgIFRoZSBUWVBFX05FWFRfVkFSSUFOVCBmaWVsZCBpcyB1c2VkIHRvIGNoYWluIHRvZ2V0aGVyIHR5cGVzCisgICAgIHRoYXQgYXJlIHZhcmlhbnRzIG1hZGUgYnkgdHlwZSBtb2RpZmllcnMgc3VjaCBhcyAiY29uc3QiIGFuZCAidm9sYXRpbGUiLgorICAgVGhlIFRZUEVfTUFJTl9WQVJJQU5UIGZpZWxkLCBpbiBhbnkgbWVtYmVyIG9mIHN1Y2ggYSBjaGFpbiwKKyAgICAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhaW4uCisgICBUaGUgVFlQRV9OQU1FIGZpZWxkIGNvbnRhaW5zIGluZm8gb24gdGhlIG5hbWUgdXNlZCBpbiB0aGUgcHJvZ3JhbQorICAgICBmb3IgdGhpcyB0eXBlIChmb3IgR0RCIHN5bWJvbCB0YWJsZSBvdXRwdXQpLiAgSXQgaXMgZWl0aGVyIGEKKyAgICAgVFlQRV9ERUNMIG5vZGUsIGZvciB0eXBlcyB0aGF0IGFyZSB0eXBlZGVmcywgb3IgYW4gSURFTlRJRklFUl9OT0RFCisgICAgIGluIHRoZSBjYXNlIG9mIHN0cnVjdHMsIHVuaW9ucyBvciBlbnVtcyB0aGF0IGFyZSBrbm93biB3aXRoIGEgdGFnLAorICAgICBvciB6ZXJvIGZvciB0eXBlcyB0aGF0IGhhdmUgbm8gc3BlY2lhbCBuYW1lLgorICAgVGhlIFRZUEVfQ09OVEVYVCBmb3IgYW55IHNvcnQgb2YgdHlwZSB3aGljaCBjb3VsZCBoYXZlIGEgbmFtZSBvcgorICAgIHdoaWNoIGNvdWxkIGhhdmUgbmFtZWQgbWVtYmVycyAoZS5nLiB0YWdnZWQgdHlwZXMgaW4gQy9DKyspIHdpbGwKKyAgICBwb2ludCB0byB0aGUgbm9kZSB3aGljaCByZXByZXNlbnRzIHRoZSBzY29wZSBvZiB0aGUgZ2l2ZW4gdHlwZSwgb3IKKyAgICB3aWxsIGJlIE5VTExfVFJFRSBpZiB0aGUgdHlwZSBoYXMgImZpbGUgc2NvcGUiLiAgRm9yIG1vc3QgdHlwZXMsIHRoaXMKKyAgICB3aWxsIHBvaW50IHRvIGEgQkxPQ0sgbm9kZSBvciBhIEZVTkNUSU9OX0RFQ0wgbm9kZSwgYnV0IGl0IGNvdWxkIGFsc28KKyAgICBwb2ludCB0byBhIEZVTkNUSU9OX1RZUEUgbm9kZSAoZm9yIHR5cGVzIHdob3NlIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlCisgICAgZm9ybWFsIHBhcmFtZXRlciBsaXN0IG9mIHNvbWUgZnVuY3Rpb24gdHlwZSBzcGVjaWZpY2F0aW9uKSBvciBpdAorICAgIGNvdWxkIHBvaW50IHRvIGEgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUgb3IgUVVBTF9VTklPTl9UWVBFIG5vZGUKKyAgICAoZm9yIEMrKyAibWVtYmVyIiB0eXBlcykuCisgICAgRm9yIG5vbi10YWdnZWQtdHlwZXMsIFRZUEVfQ09OVEVYVCBuZWVkIG5vdCBiZSBzZXQgdG8gYW55dGhpbmcgaW4KKyAgICBwYXJ0aWN1bGFyLCBzaW5jZSBhbnkgdHlwZSB3aGljaCBpcyBvZiBzb21lIHR5cGUgY2F0ZWdvcnkgIChlLmcuCisgICAgYW4gYXJyYXkgdHlwZSBvciBhIGZ1bmN0aW9uIHR5cGUpIHdoaWNoIGNhbm5vdCBlaXRoZXIgaGF2ZSBhIG5hbWUKKyAgICBpdHNlbGYgb3IgaGF2ZSBuYW1lZCBtZW1iZXJzIGRvZXNuJ3QgcmVhbGx5IGhhdmUgYSAic2NvcGUiIHBlciBzZS4KKyAgVGhlIFRSRUVfQ0hBSU4gZmllbGQgaXMgdXNlZCBhcyBhIGZvcndhcmQtcmVmZXJlbmNlcyB0byBuYW1lcyBmb3IKKyAgICBFTlVNRVJBTF9UWVBFLCBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSwgYW5kIFFVQUxfVU5JT05fVFlQRSBub2RlczsKKyAgICBzZWUgYmVsb3cuICAqLworCisvKiBUaGUgb3JkZXJpbmcgb2YgdGhlIGZvbGxvd2luZyBjb2RlcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjaGVja2luZworICAgbWFjcm9zIGluIHRyZWUuaC4gIENoYW5naW5nIHRoZSBvcmRlciB3aWxsIGRlZ3JhZGUgdGhlIHNwZWVkIG9mIHRoZQorICAgY29tcGlsZXIuICBPRkZTRVRfVFlQRSwgRU5VTUVSQUxfVFlQRSwgQk9PTEVBTl9UWVBFLCBJTlRFR0VSX1RZUEUsCisgICBSRUFMX1RZUEUsIFBPSU5URVJfVFlQRS4gICovCisKKy8qIEFuIG9mZnNldCBpcyBhIHBvaW50ZXIgcmVsYXRpdmUgdG8gYW4gb2JqZWN0LgorICAgVGhlIFRSRUVfVFlQRSBmaWVsZCBpcyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGF0IHRoZSBvZmZzZXQuCisgICBUaGUgVFlQRV9PRkZTRVRfQkFTRVRZUEUgcG9pbnRzIHRvIHRoZSBub2RlIGZvciB0aGUgdHlwZSBvZiBvYmplY3QKKyAgIHRoYXQgdGhlIG9mZnNldCBpcyByZWxhdGl2ZSB0by4gICovCitERUZUUkVFQ09ERSAoT0ZGU0VUX1RZUEUsICJvZmZzZXRfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBDIGVudW1zLiAgVGhlIHR5cGUgbm9kZSBsb29rcyBqdXN0IGxpa2UgYW4gSU5URUdFUl9UWVBFIG5vZGUuCisgICBUaGUgc3ltYm9scyBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgZW51bSB0eXBlIGFyZSBkZWZpbmVkIGJ5CisgICBDT05TVF9ERUNMIG5vZGVzLCBidXQgdGhlIHR5cGUgZG9lcyBub3QgcG9pbnQgdG8gdGhlbTsKKyAgIGhvd2V2ZXIsIHRoZSBUWVBFX1ZBTFVFUyBpcyBhIGxpc3QgaW4gd2hpY2ggZWFjaCBlbGVtZW50J3MgVFJFRV9QVVJQT1NFCisgICBpcyBhIG5hbWUgYW5kIHRoZSBUUkVFX1ZBTFVFIGlzIHRoZSB2YWx1ZSAoYW4gSU5URUdFUl9DU1Qgbm9kZSkuICAqLworLyogQSBmb3J3YXJkIHJlZmVyZW5jZSBgZW51bSBmb28nIHdoZW4gbm8gZW51bSBuYW1lZCBmb28gaXMgZGVmaW5lZCB5ZXQKKyAgIGhhcyB6ZXJvIChhIG51bGwgcG9pbnRlcikgaW4gaXRzIFRZUEVfU0laRS4gIFRoZSB0YWcgbmFtZSBpcyBpbgorICAgdGhlIFRZUEVfTkFNRSBmaWVsZC4gIElmIHRoZSB0eXBlIGlzIGxhdGVyIGRlZmluZWQsIHRoZSBub3JtYWwKKyAgIGZpZWxkcyBhcmUgZmlsbGVkIGluLgorICAgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIGFuZCBRVUFMX1VOSU9OX1RZUEUgZm9yd2FyZCByZWZzIGFyZQorICAgdHJlYXRlZCBzaW1pbGFybHkuICAqLworREVGVFJFRUNPREUgKEVOVU1FUkFMX1RZUEUsICJlbnVtZXJhbF90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIEJvb2xlYW4gdHlwZSAodHJ1ZSBvciBmYWxzZSBhcmUgdGhlIG9ubHkgdmFsdWVzKS4gIExvb2tzIGxpa2UgYW4KKyAgIElOVEVHUkFMX1RZUEUuICAqLworREVGVFJFRUNPREUgKEJPT0xFQU5fVFlQRSwgImJvb2xlYW5fdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBJbnRlZ2VyIHR5cGVzIGluIGFsbCBsYW5ndWFnZXMsIGluY2x1ZGluZyBjaGFyIGluIEMuCisgICBBbHNvIHVzZWQgZm9yIHN1Yi1yYW5nZXMgb2Ygb3RoZXIgZGlzY3JldGUgdHlwZXMuCisgICBIYXMgY29tcG9uZW50cyBUWVBFX01JTl9WQUxVRSwgVFlQRV9NQVhfVkFMVUUgKGV4cHJlc3Npb25zLCBpbmNsdXNpdmUpCisgICBhbmQgVFlQRV9QUkVDSVNJT04gKG51bWJlciBvZiBiaXRzIHVzZWQgYnkgdGhpcyB0eXBlKS4KKyAgIEluIHRoZSBjYXNlIG9mIGEgc3VicmFuZ2UgdHlwZSBpbiBQYXNjYWwsIHRoZSBUUkVFX1RZUEUKKyAgIG9mIHRoaXMgd2lsbCBwb2ludCBhdCB0aGUgc3VwZXJ0eXBlIChhbm90aGVyIElOVEVHRVJfVFlQRSwKKyAgIG9yIGFuIEVOVU1FUkFMX1RZUEUgb3IgQk9PTEVBTl9UWVBFKS4KKyAgIE90aGVyd2lzZSwgdGhlIFRSRUVfVFlQRSBpcyB6ZXJvLiAgKi8KK0RFRlRSRUVDT0RFIChJTlRFR0VSX1RZUEUsICJpbnRlZ2VyX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogQydzIGZsb2F0IGFuZCBkb3VibGUuICBEaWZmZXJlbnQgZmxvYXRpbmcgdHlwZXMgYXJlIGRpc3Rpbmd1aXNoZWQKKyAgIGJ5IG1hY2hpbmUgbW9kZSBhbmQgYnkgdGhlIFRZUEVfU0laRSBhbmQgdGhlIFRZUEVfUFJFQ0lTSU9OLiAgKi8KK0RFRlRSRUVDT0RFIChSRUFMX1RZUEUsICJyZWFsX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogVGhlIG9yZGVyaW5nIG9mIHRoZSBmb2xsb3dpbmcgY29kZXMgaXMgb3B0aW1pemVkIGZvciB0aGUgY2hlY2tpbmcKKyAgIG1hY3JvcyBpbiB0cmVlLmguICBDaGFuZ2luZyB0aGUgb3JkZXIgd2lsbCBkZWdyYWRlIHRoZSBzcGVlZCBvZiB0aGUKKyAgIGNvbXBpbGVyLiAgUE9JTlRFUl9UWVBFLCBSRUZFUkVOQ0VfVFlQRS4gIE5vdGUgdGhhdCB0aGlzIHJhbmdlCisgICBvdmVybGFwcyB0aGUgcHJldmlvdXMgcmFuZ2Ugb2Ygb3JkZXJlZCB0eXBlcy4gICovCisKKy8qIEFsbCBwb2ludGVyLXRvLXggdHlwZXMgaGF2ZSBjb2RlIFBPSU5URVJfVFlQRS4KKyAgIFRoZSBUUkVFX1RZUEUgcG9pbnRzIHRvIHRoZSBub2RlIGZvciB0aGUgdHlwZSBwb2ludGVkIHRvLiAgKi8KK0RFRlRSRUVDT0RFIChQT0lOVEVSX1RZUEUsICJwb2ludGVyX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogQSByZWZlcmVuY2UgaXMgbGlrZSBhIHBvaW50ZXIgZXhjZXB0IHRoYXQgaXQgaXMgY29lcmNlZAorICAgYXV0b21hdGljYWxseSB0byB0aGUgdmFsdWUgaXQgcG9pbnRzIHRvLiAgVXNlZCBpbiBDKysuICAqLworREVGVFJFRUNPREUgKFJFRkVSRU5DRV9UWVBFLCAicmVmZXJlbmNlX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogVGhlIEMrKyBkZWNsdHlwZShudWxscHRyKSB0eXBlLiAgKi8KK0RFRlRSRUVDT0RFIChOVUxMUFRSX1RZUEUsICJudWxscHRyX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogX0ZyYWN0IGFuZCBfQWNjdW0gdHlwZXMgaW4gRW1iZWRkZWQtQy4gIERpZmZlcmVudCBmaXhlZC1wb2ludCB0eXBlcworICAgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgbWFjaGluZSBtb2RlIGFuZCBieSB0aGUgVFlQRV9TSVpFIGFuZCB0aGUKKyAgIFRZUEVfUFJFQ0lTSU9OLiAgKi8KK0RFRlRSRUVDT0RFIChGSVhFRF9QT0lOVF9UWVBFLCAiZml4ZWRfcG9pbnRfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBUaGUgb3JkZXJpbmcgb2YgdGhlIGZvbGxvd2luZyBjb2RlcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjaGVja2luZworICAgbWFjcm9zIGluIHRyZWUuaC4gIENoYW5naW5nIHRoZSBvcmRlciB3aWxsIGRlZ3JhZGUgdGhlIHNwZWVkIG9mIHRoZQorICAgY29tcGlsZXIuICBDT01QTEVYX1RZUEUsIFZFQ1RPUl9UWVBFLCBBUlJBWV9UWVBFLiAgKi8KKworLyogQ29tcGxleCBudW1iZXIgdHlwZXMuICBUaGUgVFJFRV9UWVBFIGZpZWxkIGlzIHRoZSBkYXRhIHR5cGUKKyAgIG9mIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMuICBJdCBtdXN0IGJlIG9mIHNjYWxhcgorICAgYXJpdGhtZXRpYyB0eXBlLCBub3QgaW5jbHVkaW5nIHBvaW50ZXIgdHlwZS4gICovCitERUZUUkVFQ09ERSAoQ09NUExFWF9UWVBFLCAiY29tcGxleF90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIFZlY3RvciB0eXBlcy4gIFRoZSBUUkVFX1RZUEUgZmllbGQgaXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgdmVjdG9yCisgICBlbGVtZW50cy4gIFRoZSBUWVBFX1BSRUNJU0lPTiBmaWVsZCBpcyB0aGUgbnVtYmVyIG9mIHN1YnBhcnRzIG9mCisgICB0aGUgdmVjdG9yLiAgKi8KK0RFRlRSRUVDT0RFIChWRUNUT1JfVFlQRSwgInZlY3Rvcl90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIFRoZSBvcmRlcmluZyBvZiB0aGUgZm9sbG93aW5nIGNvZGVzIGlzIG9wdGltaXplZCBmb3IgdGhlIGNoZWNraW5nCisgICBtYWNyb3MgaW4gdHJlZS5oLiAgQ2hhbmdpbmcgdGhlIG9yZGVyIHdpbGwgZGVncmFkZSB0aGUgc3BlZWQgb2YgdGhlCisgICBjb21waWxlci4gIEFSUkFZX1RZUEUsIFJFQ09SRF9UWVBFLCBVTklPTl9UWVBFLCBRVUFMX1VOSU9OX1RZUEUuCisgICBOb3RlIHRoYXQgdGhpcyByYW5nZSBvdmVybGFwcyB0aGUgcHJldmlvdXMgcmFuZ2UuICAqLworCisvKiBUeXBlcyBvZiBhcnJheXMuICBTcGVjaWFsIGZpZWxkczoKKyAgIFRSRUVfVFlQRQkJICBUeXBlIG9mIGFuIGFycmF5IGVsZW1lbnQuCisgICBUWVBFX0RPTUFJTgkJICBUeXBlIHRvIGluZGV4IGJ5LgorCQkJICAgIEl0cyByYW5nZSBvZiB2YWx1ZXMgc3BlY2lmaWVzIHRoZSBhcnJheSBsZW5ndGguCisgVGhlIGZpZWxkIFRZUEVfUE9JTlRFUl9UTyAoVFJFRV9UWVBFIChhcnJheV90eXBlKSkgaXMgYWx3YXlzIG5vbnplcm8KKyBhbmQgaG9sZHMgdGhlIHR5cGUgdG8gY29lcmNlIGEgdmFsdWUgb2YgdGhhdCBhcnJheSB0eXBlIHRvIGluIEMuCisgVFlQRV9TVFJJTkdfRkxBRyBpbmRpY2F0ZXMgYSBzdHJpbmcgKGluIGNvbnRyYXN0IHRvIGFuIGFycmF5IG9mIGNoYXJzKQorIGluIGxhbmd1YWdlcyAoc3VjaCBhcyBDaGlsbCkgdGhhdCBtYWtlIGEgZGlzdGluY3Rpb24uICAqLworLyogQXJyYXkgdHlwZXMgaW4gQyBvciBQYXNjYWwgKi8KK0RFRlRSRUVDT0RFIChBUlJBWV9UWVBFLCAiYXJyYXlfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBTdHJ1Y3QgaW4gQywgb3IgcmVjb3JkIGluIFBhc2NhbC4gICovCisvKiBTcGVjaWFsIGZpZWxkczoKKyAgIFRZUEVfRklFTERTICBjaGFpbiBvZiBGSUVMRF9ERUNMcyBmb3IgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0LAorICAgICBhbmQgVkFSX0RFQ0xzLCBUWVBFX0RFQ0xzIGFuZCBDT05TVF9ERUNMcyBmb3IgcmVjb3JkLXNjb3BlIHZhcmlhYmxlcywKKyAgICAgdHlwZXMgYW5kIGVudW1lcmF0b3JzLgorICAgQSBmZXcgbWF5IG5lZWQgdG8gYmUgYWRkZWQgZm9yIFBhc2NhbC4gICovCisvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUsIGJlZm9yZSBFTlVNRVJBTF9UWVBFLCBmb3IgaG93CisgICBmb3J3YXJkIHJlZmVyZW5jZXMgdG8gc3RydWN0IHRhZ3MgYXJlIGhhbmRsZWQgaW4gQy4gICovCitERUZUUkVFQ09ERSAoUkVDT1JEX1RZUEUsICJyZWNvcmRfdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBVbmlvbiBpbiBDLiAgTGlrZSBhIHN0cnVjdCwgZXhjZXB0IHRoYXQgdGhlIG9mZnNldHMgb2YgdGhlIGZpZWxkcworICAgd2lsbCBhbGwgYmUgemVyby4gICovCisvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUsIGJlZm9yZSBFTlVNRVJBTF9UWVBFLCBmb3IgaG93CisgICBmb3J3YXJkIHJlZmVyZW5jZXMgdG8gdW5pb24gdGFncyBhcmUgaGFuZGxlZCBpbiBDLiAgKi8KK0RFRlRSRUVDT0RFIChVTklPTl9UWVBFLCAidW5pb25fdHlwZSIsIHRjY190eXBlLCAwKQkvKiBDIHVuaW9uIHR5cGUgKi8KKworLyogU2ltaWxhciB0byBVTklPTl9UWVBFLCBleGNlcHQgdGhhdCB0aGUgZXhwcmVzc2lvbnMgaW4gREVDTF9RVUFMSUZJRVIKKyAgIGluIGVhY2ggRklFTERfREVDTCBkZXRlcm1pbmUgd2hhdCB0aGUgdW5pb24gY29udGFpbnMuICBUaGUgZmlyc3QKKyAgIGZpZWxkIHdob3NlIERFQ0xfUVVBTElGSUVSIGV4cHJlc3Npb24gaXMgdHJ1ZSBpcyBkZWVtZWQgdG8gb2NjdXB5CisgICB0aGUgdW5pb24uICAqLworREVGVFJFRUNPREUgKFFVQUxfVU5JT05fVFlQRSwgInF1YWxfdW5pb25fdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBUaGUgb3JkZXJpbmcgb2YgdGhlIGZvbGxvd2luZyBjb2RlcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjaGVja2luZworICAgbWFjcm9zIGluIHRyZWUuaC4gIENoYW5naW5nIHRoZSBvcmRlciB3aWxsIGRlZ3JhZGUgdGhlIHNwZWVkIG9mIHRoZQorICAgY29tcGlsZXIuICBWT0lEX1RZUEUsIEZVTkNUSU9OX1RZUEUsIE1FVEhPRF9UWVBFLiAgKi8KKworLyogVGhlIHZvaWQgdHlwZSBpbiBDICovCitERUZUUkVFQ09ERSAoVk9JRF9UWVBFLCAidm9pZF90eXBlIiwgdGNjX3R5cGUsIDApCisKKy8qIFR5cGUgb2YgZnVuY3Rpb25zLiAgU3BlY2lhbCBmaWVsZHM6CisgICBUUkVFX1RZUEUJCSAgICB0eXBlIG9mIHZhbHVlIHJldHVybmVkLgorICAgVFlQRV9BUkdfVFlQRVMgICAgICBsaXN0IG9mIHR5cGVzIG9mIGFyZ3VtZW50cyBleHBlY3RlZC4KKwl0aGlzIGxpc3QgaXMgbWFkZSBvZiBUUkVFX0xJU1Qgbm9kZXMuCisgICBUeXBlcyBvZiAiUHJvY2VkdXJlcyIgaW4gbGFuZ3VhZ2VzIHdoZXJlIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIGZ1bmN0aW9ucworICAgaGF2ZSBjb2RlIEZVTkNUSU9OX1RZUEUgYWxzbywgYnV0IHRoZW4gVFJFRV9UWVBFIGlzIHplcm8gb3Igdm9pZCB0eXBlLiAgKi8KK0RFRlRSRUVDT0RFIChGVU5DVElPTl9UWVBFLCAiZnVuY3Rpb25fdHlwZSIsIHRjY190eXBlLCAwKQorCisvKiBNRVRIT0RfVFlQRSBpcyB0aGUgdHlwZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGFuIGV4dHJhIGZpcnN0CisgICBhcmd1bWVudCBmb3IgInNlbGYiLCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiB0aGUgZGVjbGFyZWQgYXJndW1lbnQgbGlzdC4KKyAgIFRoZSBUUkVFX1RZUEUgaXMgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QuICBUaGUgVFlQRV9NRVRIT0RfQkFTRVRZUEUKKyAgIGlzIHRoZSB0eXBlIG9mICJzZWxmIi4gIFRZUEVfQVJHX1RZUEVTIGlzIHRoZSByZWFsIGFyZ3VtZW50IGxpc3QsIHdoaWNoCisgICBpbmNsdWRlcyB0aGUgaGlkZGVuIGFyZ3VtZW50IGZvciAic2VsZiIuICAqLworREVGVFJFRUNPREUgKE1FVEhPRF9UWVBFLCAibWV0aG9kX3R5cGUiLCB0Y2NfdHlwZSwgMCkKKworLyogVGhpcyBpcyBhIGxhbmd1YWdlLXNwZWNpZmljIGtpbmQgb2YgdHlwZS4KKyAgIEl0cyBtZWFuaW5nIGlzIGRlZmluZWQgYnkgdGhlIGxhbmd1YWdlIGZyb250IGVuZC4KKyAgIGxheW91dF90eXBlIGRvZXMgbm90IGtub3cgaG93IHRvIGxheSB0aGlzIG91dCwKKyAgIHNvIHRoZSBmcm9udC1lbmQgbXVzdCBkbyBzbyBtYW51YWxseS4gICovCitERUZUUkVFQ09ERSAoTEFOR19UWVBFLCAibGFuZ190eXBlIiwgdGNjX3R5cGUsIDApCisMCisvKiBFeHByZXNzaW9ucyAqLworCisvKiBGaXJzdCwgdGhlIGNvbnN0YW50cy4gICovCisKKy8qIENvbnRlbnRzIGFyZSBpbiBUUkVFX0lOVF9DU1RfTE9XIGFuZCBUUkVFX0lOVF9DU1RfSElHSCBmaWVsZHMsCisgICAzMiBiaXRzIGVhY2gsIGdpdmluZyB1cyBhIDY0IGJpdCBjb25zdGFudCBjYXBhYmlsaXR5LiAgSU5URUdFUl9DU1QKKyAgIG5vZGVzIGNhbiBiZSBzaGFyZWQsIGFuZCB0aGVyZWZvcmUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVhZCBvbmx5LgorICAgVGhleSBzaG91bGQgYmUgY29waWVkLCBiZWZvcmUgc2V0dGluZyBhIGZsYWcgc3VjaCBhcyBUUkVFX09WRVJGTE9XLgorICAgSWYgYW4gSU5URUdFUl9DU1QgaGFzIFRSRUVfT1ZFUkZMT1cgYWxyZWFkeSBzZXQsIGl0IGlzIGtub3duIHRvIGJlIHVuaXF1ZS4KKyAgIElOVEVHRVJfQ1NUIG5vZGVzIGFyZSBjcmVhdGVkIGZvciB0aGUgaW50ZWdyYWwgdHlwZXMsIGZvciBwb2ludGVyCisgICB0eXBlcyBhbmQgZm9yIHZlY3RvciBhbmQgZmxvYXQgdHlwZXMgaW4gc29tZSBjaXJjdW1zdGFuY2VzLiAgKi8KK0RFRlRSRUVDT0RFIChJTlRFR0VSX0NTVCwgImludGVnZXJfY3N0IiwgdGNjX2NvbnN0YW50LCAwKQorCisvKiBDb250ZW50cyBhcmUgaW4gVFJFRV9SRUFMX0NTVCBmaWVsZC4gICovCitERUZUUkVFQ09ERSAoUkVBTF9DU1QsICJyZWFsX2NzdCIsIHRjY19jb25zdGFudCwgMCkKKworLyogQ29udGVudHMgYXJlIGluIFRSRUVfRklYRURfQ1NUIGZpZWxkLiAgKi8KK0RFRlRSRUVDT0RFIChGSVhFRF9DU1QsICJmaXhlZF9jc3QiLCB0Y2NfY29uc3RhbnQsIDApCisKKy8qIENvbnRlbnRzIGFyZSBpbiBUUkVFX1JFQUxQQVJUIGFuZCBUUkVFX0lNQUdQQVJUIGZpZWxkcywKKyAgIHdob3NlIGNvbnRlbnRzIGFyZSBvdGhlciBjb25zdGFudCBub2Rlcy4gICovCitERUZUUkVFQ09ERSAoQ09NUExFWF9DU1QsICJjb21wbGV4X2NzdCIsIHRjY19jb25zdGFudCwgMCkKKworLyogQ29udGVudHMgYXJlIGluIFRSRUVfVkVDVE9SX0NTVF9FTFRTIGZpZWxkLiAgKi8KK0RFRlRSRUVDT0RFIChWRUNUT1JfQ1NULCAidmVjdG9yX2NzdCIsIHRjY19jb25zdGFudCwgMCkKKworLyogQ29udGVudHMgYXJlIFRSRUVfU1RSSU5HX0xFTkdUSCBhbmQgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGUgc3RyaW5nLiAgKi8KK0RFRlRSRUVDT0RFIChTVFJJTkdfQ1NULCAic3RyaW5nX2NzdCIsIHRjY19jb25zdGFudCwgMCkKKworLyogRGVjbGFyYXRpb25zLiAgQWxsIHJlZmVyZW5jZXMgdG8gbmFtZXMgYXJlIHJlcHJlc2VudGVkIGFzIC4uLl9ERUNMCisgICBub2Rlcy4gIFRoZSBkZWNscyBpbiBvbmUgYmluZGluZyBjb250ZXh0IGFyZSBjaGFpbmVkIHRocm91Z2ggdGhlCisgICBUUkVFX0NIQUlOIGZpZWxkLiAgRWFjaCBERUNMIGhhcyBhIERFQ0xfTkFNRSBmaWVsZCB3aGljaCBjb250YWlucworICAgYW4gSURFTlRJRklFUl9OT0RFLiAgKFNvbWUgZGVjbHMsIG1vc3Qgb2Z0ZW4gbGFiZWxzLCBtYXkgaGF2ZSB6ZXJvCisgICBhcyB0aGUgREVDTF9OQU1FKS4gIERFQ0xfQ09OVEVYVCBwb2ludHMgdG8gdGhlIG5vZGUgcmVwcmVzZW50aW5nCisgICB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGRlY2xhcmF0aW9uIGhhcyBpdHMgc2NvcGUuICBGb3IKKyAgIEZJRUxEX0RFQ0xzLCB0aGlzIGlzIHRoZSBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSwgb3IKKyAgIFFVQUxfVU5JT05fVFlQRSBub2RlIHRoYXQgdGhlIGZpZWxkIGlzIGEgbWVtYmVyIG9mLiAgRm9yIFZBUl9ERUNMLAorICAgUEFSTV9ERUNMLCBGVU5DVElPTl9ERUNMLCBMQUJFTF9ERUNMLCBhbmQgQ09OU1RfREVDTCBub2RlcywgdGhpcworICAgcG9pbnRzIHRvIGVpdGhlciB0aGUgRlVOQ1RJT05fREVDTCBmb3IgdGhlIGNvbnRhaW5pbmcgZnVuY3Rpb24sIHRoZQorICAgUkVDT1JEX1RZUEUgb3IgVU5JT05fVFlQRSBmb3IgdGhlIGNvbnRhaW5pbmcgdHlwZSwgb3IgTlVMTF9UUkVFIG9yCisgICBhIFRSQU5TTEFUSU9OX1VOSVRfREVDTCBpZiB0aGUgZ2l2ZW4gZGVjbCBoYXMgImZpbGUgc2NvcGUiLgorICAgREVDTF9BQlNUUkFDVF9PUklHSU4sIGlmIG5vbi1OVUxMLCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsIChhYnN0cmFjdCkKKyAgICAuLi5fREVDTCBub2RlIG9mIHdoaWNoIHRoaXMgZGVjbCBpcyBhbiAoaW5saW5lZCBvciB0ZW1wbGF0ZSBleHBhbmRlZCkKKyAgICBpbnN0YW5jZS4KKyAgIFRoZSBUUkVFX1RZUEUgZmllbGQgaG9sZHMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgb2JqZWN0LCB3aGVuIHJlbGV2YW50LgorICAgIExBQkVMX0RFQ0xzIGhhdmUgbm8gZGF0YSB0eXBlLiAgRm9yIFRZUEVfREVDTCwgdGhlIFRSRUVfVFlQRSBmaWVsZAorICAgIGNvbnRlbnRzIGFyZSB0aGUgdHlwZSB3aG9zZSBuYW1lIGlzIGJlaW5nIGRlY2xhcmVkLgorICAgVGhlIERFQ0xfQUxJR04sIERFQ0xfU0laRSwKKyAgICBhbmQgREVDTF9NT0RFIGZpZWxkcyBleGlzdCBpbiBkZWNsIG5vZGVzIGp1c3QgYXMgaW4gdHlwZSBub2Rlcy4KKyAgICBUaGV5IGFyZSB1bnVzZWQgaW4gTEFCRUxfREVDTCwgVFlQRV9ERUNMIGFuZCBDT05TVF9ERUNMIG5vZGVzLgorCisgICBERUNMX0ZJRUxEX0JJVF9PRkZTRVQgaG9sZHMgYW4gaW50ZWdlciBudW1iZXIgb2YgYml0cyBvZmZzZXQgZm9yCisgICB0aGUgbG9jYXRpb24uICBERUNMX1ZPRkZTRVQgaG9sZHMgYW4gZXhwcmVzc2lvbiBmb3IgYSB2YXJpYWJsZQorICAgb2Zmc2V0OyBpdCBpcyB0byBiZSBtdWx0aXBsaWVkIGJ5IERFQ0xfVk9GRlNFVF9VTklUIChhbiBpbnRlZ2VyKS4KKyAgIFRoZXNlIGZpZWxkcyBhcmUgcmVsZXZhbnQgb25seSBpbiBGSUVMRF9ERUNMcyBhbmQgUEFSTV9ERUNMcy4KKworICAgREVDTF9JTklUSUFMIGhvbGRzIHRoZSB2YWx1ZSB0byBpbml0aWFsaXplIGEgdmFyaWFibGUgdG8sCisgICBvciB0aGUgdmFsdWUgb2YgYSBjb25zdGFudC4gIEZvciBhIGZ1bmN0aW9uLCBpdCBob2xkcyB0aGUgYm9keQorICAgKGEgbm9kZSBvZiB0eXBlIEJMT0NLIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24ncyBiaW5kaW5nIGNvbnRvdXIKKyAgIGFuZCB3aG9zZSBib2R5IGNvbnRhaW5zIHRoZSBmdW5jdGlvbidzIHN0YXRlbWVudHMuKSAgRm9yIGEgTEFCRUxfREVDTAorICAgaW4gQywgaXQgaXMgYSBmbGFnLCBub256ZXJvIGlmIHRoZSBsYWJlbCdzIGRlZmluaXRpb24gaGFzIGJlZW4gc2Vlbi4KKworICAgUEFSTV9ERUNMcyB1c2UgYSBzcGVjaWFsIGZpZWxkOgorICAgREVDTF9BUkdfVFlQRSBpcyB0aGUgdHlwZSBpbiB3aGljaCB0aGUgYXJndW1lbnQgaXMgYWN0dWFsbHkKKyAgICBwYXNzZWQsIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSBpdHMgdHlwZSB3aXRoaW4gdGhlIGZ1bmN0aW9uLgorCisgICBGVU5DVElPTl9ERUNMcyB1c2UgZm91ciBzcGVjaWFsIGZpZWxkczoKKyAgIERFQ0xfQVJHVU1FTlRTIGhvbGRzIGEgY2hhaW4gb2YgUEFSTV9ERUNMIG5vZGVzIGZvciB0aGUgYXJndW1lbnRzLgorICAgREVDTF9SRVNVTFQgaG9sZHMgYSBSRVNVTFRfREVDTCBub2RlIGZvciB0aGUgdmFsdWUgb2YgYSBmdW5jdGlvbi4KKyAgICBUaGUgREVDTF9SVEwgZmllbGQgaXMgMCBmb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgbm8gdmFsdWUuCisgICAgKEMgZnVuY3Rpb25zIHJldHVybmluZyB2b2lkIGhhdmUgemVybyBoZXJlLikKKyAgICBUaGUgVFJFRV9UWVBFIGZpZWxkIGlzIHRoZSB0eXBlIGluIHdoaWNoIHRoZSByZXN1bHQgaXMgYWN0dWFsbHkKKyAgICByZXR1cm5lZC4gIFRoaXMgaXMgdXN1YWxseSB0aGUgc2FtZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlCisgICAgRlVOQ1RJT05fREVDTCwgYnV0IGl0IG1heSBiZSBhIHdpZGVyIGludGVnZXIgdHlwZSBiZWNhdXNlIG9mCisgICAgcHJvbW90aW9uLgorICAgREVDTF9GVU5DVElPTl9DT0RFIGlzIGEgY29kZSBudW1iZXIgdGhhdCBpcyBub256ZXJvIGZvcgorICAgIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIEl0cyB2YWx1ZSBpcyBhbiBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uCisgICAgdGhhdCBzYXlzIHdoaWNoIGJ1aWx0LWluIGZ1bmN0aW9uIGl0IGlzLgorCisgICBERUNMX1NPVVJDRV9GSUxFIGhvbGRzIGEgZmlsZW5hbWUgc3RyaW5nIGFuZCBERUNMX1NPVVJDRV9MSU5FCisgICBob2xkcyBhIGxpbmUgbnVtYmVyLiAgSW4gc29tZSBjYXNlcyB0aGVzZSBjYW4gYmUgdGhlIGxvY2F0aW9uIG9mCisgICBhIHJlZmVyZW5jZSwgaWYgbm8gZGVmaW5pdGlvbiBoYXMgYmVlbiBzZWVuLgorCisgICBERUNMX0FCU1RSQUNUIGlzIG5vbnplcm8gaWYgdGhlIGRlY2wgcmVwcmVzZW50cyBhbiBhYnN0cmFjdCBpbnN0YW5jZQorICAgb2YgYSBkZWNsIChpLmUuIG9uZSB3aGljaCBpcyBuZXN0ZWQgd2l0aGluIGFuIGFic3RyYWN0IGluc3RhbmNlIG9mIGEKKyAgIGlubGluZSBmdW5jdGlvbi4gICovCisKK0RFRlRSRUVDT0RFIChGVU5DVElPTl9ERUNMLCAiZnVuY3Rpb25fZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKK0RFRlRSRUVDT0RFIChMQUJFTF9ERUNMLCAibGFiZWxfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKKy8qIFRoZSBvcmRlcmluZyBvZiB0aGUgZm9sbG93aW5nIGNvZGVzIGlzIG9wdGltaXplZCBmb3IgdGhlIGNoZWNraW5nCisgICBtYWNyb3MgaW4gdHJlZS5oLiAgQ2hhbmdpbmcgdGhlIG9yZGVyIHdpbGwgZGVncmFkZSB0aGUgc3BlZWQgb2YgdGhlCisgICBjb21waWxlci4gIEZJRUxEX0RFQ0wsIFZBUl9ERUNMLCBDT05TVF9ERUNMLCBQQVJNX0RFQ0wsCisgICBUWVBFX0RFQ0wuICAqLworREVGVFJFRUNPREUgKEZJRUxEX0RFQ0wsICJmaWVsZF9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorREVGVFJFRUNPREUgKFZBUl9ERUNMLCAidmFyX2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCitERUZUUkVFQ09ERSAoQ09OU1RfREVDTCwgImNvbnN0X2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCitERUZUUkVFQ09ERSAoUEFSTV9ERUNMLCAicGFybV9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorREVGVFJFRUNPREUgKFRZUEVfREVDTCwgInR5cGVfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKK0RFRlRSRUVDT0RFIChSRVNVTFRfREVDTCwgInJlc3VsdF9kZWNsIiwgdGNjX2RlY2xhcmF0aW9uLCAwKQorCisvKiBBICJkZWNsYXJhdGlvbiIgb2YgYSBkZWJ1ZyB0ZW1wb3JhcnkuICBJdCBzaG91bGQgb25seSBhcHBlYXIgaW4KKyAgIERFQlVHIHN0bXRzLiAgKi8KK0RFRlRSRUVDT0RFIChERUJVR19FWFBSX0RFQ0wsICJkZWJ1Z19leHByX2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCisKKy8qIEEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uLiAgTmFtZXNwYWNlcyBhcHBlYXIgaW4gREVDTF9DT05URVhUIG9mIG90aGVyCisgICBfREVDTHMsIHByb3ZpZGluZyBhIGhpZXJhcmNoeSBvZiBuYW1lcy4gICovCitERUZUUkVFQ09ERSAoTkFNRVNQQUNFX0RFQ0wsICJuYW1lc3BhY2VfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKKworLyogQSBkZWNsYXJhdGlvbiBpbXBvcnQuCisgICBUaGUgQysrIEZFIHVzZXMgdGhpcyB0byByZXByZXNlbnQgYSB1c2luZy1kaXJlY3RpdmU7IGVnOgorICAgInVzaW5nIG5hbWVzcGFjZSBmb28iLgorICAgQnV0IGl0IGNvdWxkIGJlIHVzZWQgdG8gcmVwcmVzZW50IGFueSBkZWNsYXJhdGlvbiBpbXBvcnQgY29uc3RydWN0LgorICAgV2hlbmV2ZXIgYSBkZWNsYXJhdGlvbiBpbXBvcnQgYXBwZWFycyBpbiBhIGxleGljYWwgYmxvY2ssIHRoZSBCTE9DSyBub2RlCisgICByZXByZXNlbnRpbmcgdGhhdCBsZXhpY2FsIGJsb2NrIGluIEdJTVBMRSB3aWxsIGNvbnRhaW4gYW4gSU1QT1JURURfREVDTAorICAgbm9kZSwgbGlua2VkIHZpYSBCTE9DS19WQVJTIGFjY2Vzc29yIG9mIHRoZSBzYWlkIEJMT0NLLgorICAgRm9yIGEgZ2l2ZW4gTk9ERSB3aGljaCBjb2RlIGlzIElNUE9SVEVEX0RFQ0wsCisgICBJTVBPUlRFRF9ERUNMX0FTU09DSUFURURfREVDTCAoTk9ERSkgYWNjZXNzZXMgdGhlIGltcG9ydGVkIGRlY2xhcmF0aW9uLiAgKi8KK0RFRlRSRUVDT0RFIChJTVBPUlRFRF9ERUNMLCAiaW1wb3J0ZWRfZGVjbCIsIHRjY19kZWNsYXJhdGlvbiwgMCkKKworLyogQSB0cmFuc2xhdGlvbiB1bml0LiAgVGhpcyBpcyBub3QgdGVjaG5pY2FsbHkgYSBkZWNsYXJhdGlvbiwgc2luY2UgaXQKKyAgIGNhbid0IGJlIGxvb2tlZCB1cCwgYnV0IGl0J3MgY2xvc2UgZW5vdWdoLiAgKi8KK0RFRlRSRUVDT0RFIChUUkFOU0xBVElPTl9VTklUX0RFQ0wsICJ0cmFuc2xhdGlvbl91bml0X2RlY2wiLFwKKwkgICAgIHRjY19kZWNsYXJhdGlvbiwgMCkKKwwKKy8qIFJlZmVyZW5jZXMgdG8gc3RvcmFnZS4gICovCisKKy8qIFRoZSBvcmRlcmluZyBvZiB0aGUgZm9sbG93aW5nIGNvZGVzIGlzIG9wdGltaXplZCBmb3IgdGhlIGNsYXNzaWZpY2F0aW9uCisgICBpbiBoYW5kbGVkX2NvbXBvbmVudF9wLiAgS2VlcCB0aGVtIGluIGEgY29uc2VjdXRpdmUgZ3JvdXAuICAqLworCisvKiBWYWx1ZSBpcyBzdHJ1Y3R1cmUgb3IgdW5pb24gY29tcG9uZW50LgorICAgT3BlcmFuZCAwIGlzIHRoZSBzdHJ1Y3R1cmUgb3IgdW5pb24gKGFuIGV4cHJlc3Npb24pLgorICAgT3BlcmFuZCAxIGlzIHRoZSBmaWVsZCAoYSBub2RlIG9mIHR5cGUgRklFTERfREVDTCkuCisgICBPcGVyYW5kIDIsIGlmIHByZXNlbnQsIGlzIHRoZSB2YWx1ZSBvZiBERUNMX0ZJRUxEX09GRlNFVCwgbWVhc3VyZWQKKyAgIGluIHVuaXRzIG9mIERFQ0xfT0ZGU0VUX0FMSUdOIC8gQklUU19QRVJfVU5JVC4gICovCitERUZUUkVFQ09ERSAoQ09NUE9ORU5UX1JFRiwgImNvbXBvbmVudF9yZWYiLCB0Y2NfcmVmZXJlbmNlLCAzKQorCisvKiBSZWZlcmVuY2UgdG8gYSBncm91cCBvZiBiaXRzIHdpdGhpbiBhbiBvYmplY3QuICBTaW1pbGFyIHRvIENPTVBPTkVOVF9SRUYKKyAgIGV4Y2VwdCB0aGUgcG9zaXRpb24gaXMgZ2l2ZW4gZXhwbGljaXRseSByYXRoZXIgdGhhbiB2aWEgYSBGSUVMRF9ERUNMLgorICAgT3BlcmFuZCAwIGlzIHRoZSBzdHJ1Y3R1cmUgb3IgdW5pb24gZXhwcmVzc2lvbjsKKyAgIG9wZXJhbmQgMSBpcyBhIHRyZWUgZ2l2aW5nIHRoZSBjb25zdGFudCBudW1iZXIgb2YgYml0cyBiZWluZyByZWZlcmVuY2VkOworICAgb3BlcmFuZCAyIGlzIGEgdHJlZSBnaXZpbmcgdGhlIGNvbnN0YW50IHBvc2l0aW9uIG9mIHRoZSBmaXJzdCByZWZlcmVuY2VkIGJpdC4KKyAgIFRoZSByZXN1bHQgdHlwZSB3aWR0aCBoYXMgdG8gbWF0Y2ggdGhlIG51bWJlciBvZiBiaXRzIHJlZmVyZW5jZWQuCisgICBJZiB0aGUgcmVzdWx0IHR5cGUgaXMgaW50ZWdyYWwsIGl0cyBzaWduZWRuZXNzIHNwZWNpZmllcyBob3cgaXQgaXMgZXh0ZW5kZWQKKyAgIHRvIGl0cyBtb2RlIHdpZHRoLiAgKi8KK0RFRlRSRUVDT0RFIChCSVRfRklFTERfUkVGLCAiYml0X2ZpZWxkX3JlZiIsIHRjY19yZWZlcmVuY2UsIDMpCisKKy8qIEFycmF5IGluZGV4aW5nLgorICAgT3BlcmFuZCAwIGlzIHRoZSBhcnJheTsgb3BlcmFuZCAxIGlzIGEgKHNpbmdsZSkgYXJyYXkgaW5kZXguCisgICBPcGVyYW5kIDIsIGlmIHByZXNlbnQsIGlzIGEgY29weSBvZiBUWVBFX01JTl9WQUxVRSBvZiB0aGUgaW5kZXguCisgICBPcGVyYW5kIDMsIGlmIHByZXNlbnQsIGlzIHRoZSBlbGVtZW50IHNpemUsIG1lYXN1cmVkIGluIHVuaXRzIG9mCisgICB0aGUgYWxpZ25tZW50IG9mIHRoZSBlbGVtZW50IHR5cGUuICAqLworREVGVFJFRUNPREUgKEFSUkFZX1JFRiwgImFycmF5X3JlZiIsIHRjY19yZWZlcmVuY2UsIDQpCisKKy8qIExpa2V3aXNlLCBleGNlcHQgdGhhdCB0aGUgcmVzdWx0IGlzIGEgcmFuZ2UgKCJzbGljZSIpIG9mIHRoZSBhcnJheS4gIFRoZQorICAgc3RhcnRpbmcgaW5kZXggb2YgdGhlIHJlc3VsdGluZyBhcnJheSBpcyB0YWtlbiBmcm9tIG9wZXJhbmQgMSBhbmQgdGhlIHNpemUKKyAgIG9mIHRoZSByYW5nZSBpcyB0YWtlbiBmcm9tIHRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uLiAgKi8KK0RFRlRSRUVDT0RFIChBUlJBWV9SQU5HRV9SRUYsICJhcnJheV9yYW5nZV9yZWYiLCB0Y2NfcmVmZXJlbmNlLCA0KQorCisvKiBVc2VkIG9ubHkgb24gYW4gb3BlcmFuZCBvZiBjb21wbGV4IHR5cGUsIHRoZXNlIHJldHVybgorICAgYSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBjb21wb25lbnQgdHlwZS4gICovCitERUZUUkVFQ09ERSAoUkVBTFBBUlRfRVhQUiwgInJlYWxwYXJ0X2V4cHIiLCB0Y2NfcmVmZXJlbmNlLCAxKQorREVGVFJFRUNPREUgKElNQUdQQVJUX0VYUFIsICJpbWFncGFydF9leHByIiwgdGNjX3JlZmVyZW5jZSwgMSkKKworLyogUmVwcmVzZW50cyB2aWV3aW5nIHNvbWV0aGluZyBvZiBvbmUgdHlwZSBhcyBiZWluZyBvZiBhIHNlY29uZCB0eXBlLgorICAgVGhpcyBjb3JyZXNwb25kcyB0byBhbiAiVW5jaGVja2VkIENvbnZlcnNpb24iIGluIEFkYSBhbmQgcm91Z2hseSB0bworICAgdGhlIGlkaW9tICoodHlwZTIgKikmWCBpbiBDLiAgVGhlIG9ubHkgb3BlcmFuZCBpcyB0aGUgdmFsdWUgdG8gYmUKKyAgIHZpZXdlZCBhcyBiZWluZyBvZiBhbm90aGVyIHR5cGUuICBJdCBpcyB1bmRlZmluZWQgaWYgdGhlIHR5cGUgb2YgdGhlCisgICBpbnB1dCBhbmQgb2YgdGhlIGV4cHJlc3Npb24gaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuCisKKyAgIFRoaXMgY29kZSBtYXkgYWxzbyBiZSB1c2VkIHdpdGhpbiB0aGUgTEhTIG9mIGEgTU9ESUZZX0VYUFIsIGluIHdoaWNoCisgICBjYXNlIG5vIGFjdHVhbCBkYXRhIG1vdGlvbiBtYXkgb2NjdXIuICBUUkVFX0FERFJFU1NBQkxFIHdpbGwgYmUgc2V0IGluCisgICB0aGlzIGNhc2UgYW5kIEdDQyBtdXN0IGFib3J0IGlmIGl0IGNvdWxkIG5vdCBkbyB0aGUgb3BlcmF0aW9uIHdpdGhvdXQKKyAgIGdlbmVyYXRpbmcgaW5zbnMuICAqLworREVGVFJFRUNPREUgKFZJRVdfQ09OVkVSVF9FWFBSLCAidmlld19jb252ZXJ0X2V4cHIiLCB0Y2NfcmVmZXJlbmNlLCAxKQorCisvKiBDIHVuYXJ5IGAqJyBvciBQYXNjYWwgYF4nLiAgT25lIG9wZXJhbmQsIGFuIGV4cHJlc3Npb24gZm9yIGEgcG9pbnRlci4gICovCitERUZUUkVFQ09ERSAoSU5ESVJFQ1RfUkVGLCAiaW5kaXJlY3RfcmVmIiwgdGNjX3JlZmVyZW5jZSwgMSkKKworLyogVXNlZCB0byByZXByZXNlbnQgbG9va3VwIGluIGEgdmlydHVhbCBtZXRob2QgdGFibGUgd2hpY2ggaXMgZGVwZW5kZW50IG9uCisgICB0aGUgcnVudGltZSB0eXBlIG9mIGFuIG9iamVjdC4gIE9wZXJhbmRzIGFyZToKKyAgIE9CSl9UWVBFX1JFRl9FWFBSOiBBbiBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRoZSB2YWx1ZSB0byB1c2UuCisgICBPQkpfVFlQRV9SRUZfT0JKRUNUOiBJcyB0aGUgb2JqZWN0IG9uIHdob3NlIGJlaGFsZiB0aGUgbG9va3VwIGlzCisgICBiZWluZyBwZXJmb3JtZWQuICBUaHJvdWdoIHRoaXMgdGhlIG9wdGltaXplcnMgbWF5IGJlIGFibGUgdG8gc3RhdGljYWxseQorICAgZGV0ZXJtaW5lIHRoZSBkeW5hbWljIHR5cGUgb2YgdGhlIG9iamVjdC4KKyAgIE9CSl9UWVBFX1JFRl9UT0tFTjogQW4gaW50ZWdlciBpbmRleCB0byB0aGUgdmlydHVhbCBtZXRob2QgdGFibGUuICAqLworREVGVFJFRUNPREUgKE9CSl9UWVBFX1JFRiwgIm9ial90eXBlX3JlZiIsIHRjY19leHByZXNzaW9uLCAzKQorCisvKiBDb25zdHJ1Y3RvcjogcmV0dXJuIGFuIGFnZ3JlZ2F0ZSB2YWx1ZSBtYWRlIGZyb20gc3BlY2lmaWVkIGNvbXBvbmVudHMuCisgICBJbiBDLCB0aGlzIGlzIHVzZWQgb25seSBmb3Igc3RydWN0dXJlIGFuZCBhcnJheSBpbml0aWFsaXplcnMuCisgICBUaGUgb3BlcmFuZCBpcyBhIHNlcXVlbmNlIG9mIGNvbXBvbmVudCB2YWx1ZXMgbWFkZSBvdXQgb2YgYSBWRUMgb2YKKyAgIHN0cnVjdCBjb25zdHJ1Y3Rvcl9lbHQuCisKKyAgIEZvciBBUlJBWV9UWVBFOgorICAgVGhlIGZpZWxkIElOREVYIG9mIGVhY2ggY29uc3RydWN0b3JfZWx0IGlzIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4LgorICAgSWYgdGhlIGluZGV4IGlzIGEgUkFOR0VfRVhQUiwgaXQgaXMgYSBzaG9ydC1oYW5kIGZvciBtYW55IG5vZGVzLAorICAgb25lIGZvciBlYWNoIGluZGV4IGluIHRoZSByYW5nZS4gIChJZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBWQUxVRQorICAgaGFzIHNpZGUtZWZmZWN0cywgdGhleSBhcmUgZXZhbHVhdGVkIG9uY2UgZm9yIGVhY2ggZWxlbWVudC4gIFdyYXAgdGhlCisgICB2YWx1ZSBpbiBhIFNBVkVfRVhQUiBpZiB5b3Ugd2FudCB0byBldmFsdWF0ZSBzaWRlIGVmZmVjdHMgb25seSBvbmNlLikKKworICAgRm9yIFJFQ09SRF9UWVBFLCBVTklPTl9UWVBFLCBvciBRVUFMX1VOSU9OX1RZUEU6CisgICBUaGUgZmllbGQgSU5ERVggb2YgZWFjaCBub2RlIGlzIGEgRklFTERfREVDTC4gICovCitERUZUUkVFQ09ERSAoQ09OU1RSVUNUT1IsICJjb25zdHJ1Y3RvciIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogVGhlIGV4cHJlc3Npb24gdHlwZXMgYXJlIG1vc3RseSBzdHJhaWdodGZvcndhcmQsIHdpdGggdGhlIGZvdXJ0aCBhcmd1bWVudAorICAgb2YgREVGVFJFRUNPREUgc2F5aW5nIGhvdyBtYW55IG9wZXJhbmRzIHRoZXJlIGFyZS4KKyAgIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCB0aGUgb3BlcmFuZHMgYXJlIGV4cHJlc3Npb25zIGFuZCB0aGUKKyAgIHR5cGVzIG9mIGFsbCB0aGUgb3BlcmFuZHMgYW5kIHRoZSBleHByZXNzaW9uIG11c3QgYWxsIGJlIHRoZSBzYW1lLiAgKi8KKworLyogQ29udGFpbnMgdHdvIGV4cHJlc3Npb25zIHRvIGNvbXB1dGUsIG9uZSBmb2xsb3dlZCBieSB0aGUgb3RoZXIuCisgICB0aGUgZmlyc3QgdmFsdWUgaXMgaWdub3JlZC4gIFRoZSBzZWNvbmQgb25lJ3MgdmFsdWUgaXMgdXNlZC4gIFRoZQorICAgdHlwZSBvZiB0aGUgZmlyc3QgZXhwcmVzc2lvbiBuZWVkIG5vdCBhZ3JlZSB3aXRoIHRoZSBvdGhlciB0eXBlcy4gICovCitERUZUUkVFQ09ERSAoQ09NUE9VTkRfRVhQUiwgImNvbXBvdW5kX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKKworLyogQXNzaWdubWVudCBleHByZXNzaW9uLiAgT3BlcmFuZCAwIGlzIHRoZSB3aGF0IHRvIHNldDsgMSwgdGhlIG5ldyB2YWx1ZS4gICovCitERUZUUkVFQ09ERSAoTU9ESUZZX0VYUFIsICJtb2RpZnlfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorCisvKiBJbml0aWFsaXphdGlvbiBleHByZXNzaW9uLiAgT3BlcmFuZCAwIGlzIHRoZSB2YXJpYWJsZSB0byBpbml0aWFsaXplOworICAgT3BlcmFuZCAxIGlzIHRoZSBpbml0aWFsaXplci4gIFRoaXMgZGlmZmVycyBmcm9tIE1PRElGWV9FWFBSIGluIHRoYXQgYW55CisgICByZWZlcmVuY2UgdG8gdGhlIHJlZmVyZW50IG9mIG9wZXJhbmQgMCB3aXRoaW4gb3BlcmFuZCAxIGlzIHVuZGVmaW5lZC4gICovCitERUZUUkVFQ09ERSAoSU5JVF9FWFBSLCAiaW5pdF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIEZvciBUQVJHRVRfRVhQUiwgb3BlcmFuZCAwIGlzIHRoZSB0YXJnZXQgb2YgYW4gaW5pdGlhbGl6YXRpb24sCisgICBvcGVyYW5kIDEgaXMgdGhlIGluaXRpYWxpemVyIGZvciB0aGUgdGFyZ2V0LCB3aGljaCBtYXkgYmUgdm9pZAorICAgICBpZiBzaW1wbHkgZXhwYW5kaW5nIGl0IGluaXRpYWxpemVzIHRoZSB0YXJnZXQuCisgICBvcGVyYW5kIDIgaXMgdGhlIGNsZWFudXAgZm9yIHRoaXMgbm9kZSwgaWYgYW55LgorICAgb3BlcmFuZCAzIGlzIHRoZSBzYXZlZCBpbml0aWFsaXplciBhZnRlciB0aGlzIG5vZGUgaGFzIGJlZW4KKyAgIGV4cGFuZGVkIG9uY2U7IHRoaXMgaXMgc28gd2UgY2FuIHJlLWV4cGFuZCB0aGUgdHJlZSBsYXRlci4gICovCitERUZUUkVFQ09ERSAoVEFSR0VUX0VYUFIsICJ0YXJnZXRfZXhwciIsIHRjY19leHByZXNzaW9uLCA0KQorCisvKiBDb25kaXRpb25hbCBleHByZXNzaW9uICggLi4uID8gLi4uIDogLi4uICBpbiBDKS4KKyAgIE9wZXJhbmQgMCBpcyB0aGUgY29uZGl0aW9uLgorICAgT3BlcmFuZCAxIGlzIHRoZSB0aGVuLXZhbHVlLgorICAgT3BlcmFuZCAyIGlzIHRoZSBlbHNlLXZhbHVlLgorICAgT3BlcmFuZCAwIG1heSBiZSBvZiBhbnkgdHlwZS4KKyAgIE9wZXJhbmQgMSBtdXN0IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyB0aGUgZW50aXJlIGV4cHJlc3Npb24sIHVubGVzcworICAgaXQgdW5jb25kaXRpb25hbGx5IHRocm93cyBhbiBleGNlcHRpb24sIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkCisgICBoYXZlIFZPSURfVFlQRS4gIFRoZSBzYW1lIGNvbnN0cmFpbnRzIGFwcGx5IHRvIG9wZXJhbmQgMi4gIFRoZQorICAgY29uZGl0aW9uIGluIG9wZXJhbmQgMCBtdXN0IGJlIG9mIGludGVncmFsIHR5cGUuCisKKyAgIEluIGNmZyBnaW1wbGUsIGlmIHlvdSBkbyBub3QgaGF2ZSBhIHNlbGVjdGlvbiBleHByZXNzaW9uLCBvcGVyYW5kcworICAgMSBhbmQgMiBhcmUgTlVMTC4gIFRoZSBvcGVyYW5kcyBhcmUgdGhlbiB0YWtlbiBmcm9tIHRoZSBjZmcgZWRnZXMuICovCitERUZUUkVFQ09ERSAoQ09ORF9FWFBSLCAiY29uZF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDMpCisKKy8qIFZlY3RvciBjb25kaXRpb25hbCBleHByZXNzaW9uLiBJdCBpcyBsaWtlIENPTkRfRVhQUiwgYnV0IHdpdGgKKyAgIHZlY3RvciBvcGVyYW5kcy4KKworICAgQSA9IFZFQ19DT05EX0VYUFIgKCBYIDwgWSwgQiwgQykKKworICAgbWVhbnMKKworICAgZm9yIChpPTA7IGk8TjsgaSsrKQorICAgICBBW2ldID0gWFtpXSA8IFlbaV0gPyBCW2ldIDogQ1tpXTsKKyovCitERUZUUkVFQ09ERSAoVkVDX0NPTkRfRVhQUiwgInZlY19jb25kX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKworLyogVmVjdG9yIHBlcm11dGF0aW9uIGV4cHJlc3Npb24uICBBID0gVkVDX1BFUk1fRVhQUjx2MCwgdjEsIG1hc2s+IG1lYW5zCisKKyAgIE4gPSBsZW5ndGgobWFzaykKKyAgIGZvcmVhY2ggaSBpbiBOOgorICAgICBNID0gbWFza1tpXSAlICgyKk4pCisgICAgIEEgPSBNIDwgTiA/IHYwW01dIDogdjFbTS1OXQorCisgICBWMCBhbmQgVjEgYXJlIHZlY3RvcnMgb2YgdGhlIHNhbWUgdHlwZS4gIE1BU0sgaXMgYW4gaW50ZWdlci10eXBlZAorICAgdmVjdG9yLiAgVGhlIG51bWJlciBvZiBNQVNLIGVsZW1lbnRzIG11c3QgYmUgdGhlIHNhbWUgd2l0aCB0aGUKKyAgIG51bWJlciBvZiBlbGVtZW50cyBpbiBWMCBhbmQgVjEuICBUaGUgc2l6ZSBvZiB0aGUgaW5uZXIgdHlwZQorICAgb2YgdGhlIE1BU0sgYW5kIG9mIHRoZSBWMCBhbmQgVjEgbXVzdCBiZSB0aGUgc2FtZS4KKyovCitERUZUUkVFQ09ERSAoVkVDX1BFUk1fRVhQUiwgInZlY19wZXJtX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKworLyogRGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMsIGluY2x1ZGluZyBtYWtpbmcgUlRMIGFuZCBhbGxvY2F0aW5nIHNwYWNlLgorICAgQklORF9FWFBSX1ZBUlMgaXMgYSBjaGFpbiBvZiBWQVJfREVDTCBub2RlcyBmb3IgdGhlIHZhcmlhYmxlcy4KKyAgIEJJTkRfRVhQUl9CT0RZIGlzIHRoZSBib2R5LCB0aGUgZXhwcmVzc2lvbiB0byBiZSBjb21wdXRlZCB1c2luZworICAgdGhlIHZhcmlhYmxlcy4gIFRoZSB2YWx1ZSBvZiBvcGVyYW5kIDEgYmVjb21lcyB0aGF0IG9mIHRoZSBCSU5EX0VYUFIuCisgICBCSU5EX0VYUFJfQkxPQ0sgaXMgdGhlIEJMT0NLIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlc2UgYmluZGluZ3MKKyAgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuICBJZiB0aGlzIEJJTkRfRVhQUiBpcyBhY3R1YWxseSBleHBhbmRlZCwKKyAgIHRoYXQgc2V0cyB0aGUgVFJFRV9VU0VEIGZsYWcgaW4gdGhlIEJMT0NLLgorCisgICBUaGUgQklORF9FWFBSIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgaW5mb3JtaW5nIHBhcnNlcnMKKyAgIGFib3V0IHRoZXNlIHZhcmlhYmxlcy4gIElmIHRoZSBib2R5IGlzIGNvbWluZyBmcm9tIHRoZSBpbnB1dCBmaWxlLAorICAgdGhlbiB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgdGhlIEJJTkRfRVhQUiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvcgorICAgaW5mb3JtaW5nIHRoZSBwYXJzZXIgb2YgdGhlIHZhcmlhYmxlcy4KKworICAgSWYgdGhlIEJJTkRfRVhQUiBpcyBldmVyIGV4cGFuZGVkLCBpdHMgVFJFRV9VU0VEIGZsYWcgaXMgc2V0LgorICAgVGhpcyB0ZWxscyB0aGUgY29kZSBmb3IgZGVidWdnaW5nIHN5bWJvbCB0YWJsZXMgbm90IHRvIGlnbm9yZSB0aGUgQklORF9FWFBSLgorICAgSWYgdGhlIEJJTkRfRVhQUiBzaG91bGQgYmUgb3V0cHV0IGZvciBkZWJ1Z2dpbmcgYnV0IHdpbGwgbm90IGJlIGV4cGFuZGVkLAorICAgc2V0IHRoZSBUUkVFX1VTRUQgZmxhZyBieSBoYW5kLgorCisgICBJbiBvcmRlciBmb3IgdGhlIEJJTkRfRVhQUiB0byBiZSBrbm93biBhdCBhbGwsIHRoZSBjb2RlIHRoYXQgY3JlYXRlcyBpdAorICAgbXVzdCBhbHNvIGluc3RhbGwgaXQgYXMgYSBzdWJibG9jayBpbiB0aGUgdHJlZSBvZiBCTE9DSworICAgbm9kZXMgZm9yIHRoZSBmdW5jdGlvbi4gICovCitERUZUUkVFQ09ERSAoQklORF9FWFBSLCAiYmluZF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDMpCisKKy8qIEZ1bmN0aW9uIGNhbGwuICBDQUxMX0VYUFJzIGFyZSByZXByZXNlbnRlZCBieSB2YXJpYWJseS1zaXplZCBleHByZXNzaW9uCisgICBub2Rlcy4gIFRoZXJlIGFyZSBhdCBsZWFzdCB0aHJlZSBmaXhlZCBvcGVyYW5kcy4gIE9wZXJhbmQgMCBpcyBhbgorICAgSU5URUdFUl9DU1Qgbm9kZSBjb250YWluaW5nIHRoZSB0b3RhbCBvcGVyYW5kIGNvdW50LCB0aGUgbnVtYmVyIG9mCisgICBhcmd1bWVudHMgcGx1cyAzLiAgT3BlcmFuZCAxIGlzIHRoZSBmdW5jdGlvbiwgd2hpbGUgb3BlcmFuZCAyIGlzCisgICBpcyBzdGF0aWMgY2hhaW4gYXJndW1lbnQsIG9yIE5VTEwuICBUaGUgcmVtYWluaW5nIG9wZXJhbmRzIGFyZSB0aGUKKyAgIGFyZ3VtZW50cyB0byB0aGUgY2FsbC4gICovCitERUZUUkVFQ09ERSAoQ0FMTF9FWFBSLCAiY2FsbF9leHByIiwgdGNjX3ZsX2V4cCwgMykKKworLyogU3BlY2lmeSBhIHZhbHVlIHRvIGNvbXB1dGUgYWxvbmcgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBjbGVhbnVwLgorICAgT3BlcmFuZCAwIGlzIHRoZSBjbGVhbnVwIGV4cHJlc3Npb24uCisgICBUaGUgY2xlYW51cCBpcyBleGVjdXRlZCBieSB0aGUgZmlyc3QgZW5jbG9zaW5nIENMRUFOVVBfUE9JTlRfRVhQUiwKKyAgIHdoaWNoIG11c3QgZXhpc3QuICBUaGlzIGRpZmZlcnMgZnJvbSBUUllfQ0FUQ0hfRVhQUiBpbiB0aGF0IG9wZXJhbmQgMQorICAgaXMgYWx3YXlzIGV2YWx1YXRlZCB3aGVuIGNsZWFudXBzIGFyZSBydW4uICAqLworREVGVFJFRUNPREUgKFdJVEhfQ0xFQU5VUF9FWFBSLCAid2l0aF9jbGVhbnVwX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogU3BlY2lmeSBhIGNsZWFudXAgcG9pbnQuCisgICBPcGVyYW5kIDAgaXMgYW4gZXhwcmVzc2lvbiB0aGF0IG1heSBoYXZlIGNsZWFudXBzLiAgSWYgaXQgZG9lcywgdGhvc2UKKyAgIGNsZWFudXBzIGFyZSBleGVjdXRlZCBhZnRlciB0aGUgZXhwcmVzc2lvbiBpcyBleHBhbmRlZC4KKworICAgTm90ZSB0aGF0IGlmIHRoZSBleHByZXNzaW9uIGlzIGEgcmVmZXJlbmNlIHRvIHN0b3JhZ2UsIGl0IGlzIGZvcmNlZCBvdXQKKyAgIG9mIG1lbW9yeSBiZWZvcmUgdGhlIGNsZWFudXBzIGFyZSBydW4uICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBoYW5kbGUKKyAgIGNhc2VzIHdoZXJlIHRoZSBjbGVhbnVwcyBtb2RpZnkgdGhlIHN0b3JhZ2UgcmVmZXJlbmNlZDsgaW4gdGhlCisgICBleHByZXNzaW9uICd0LmknLCBpZiAndCcgaXMgYSBzdHJ1Y3Qgd2l0aCBhbiBpbnRlZ2VyIG1lbWJlciAnaScgYW5kIGEKKyAgIGNsZWFudXAgd2hpY2ggbW9kaWZpZXMgJ2knLCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gZGVwZW5kcyBvbgorICAgd2hldGhlciB0aGUgY2xlYW51cCBpcyBydW4gYmVmb3JlIG9yIGFmdGVyICd0LmknIGlzIGV2YWx1YXRlZC4gIFdoZW4KKyAgIGV4cGFuZF9leHByIGlzIHJ1biBvbiAndC5pJywgaXQgcmV0dXJucyBhIE1FTS4gIFRoaXMgaXMgbm90IGdvb2QgZW5vdWdoOworICAgdGhlIHZhbHVlIG9mICd0LmknIG11c3QgYmUgZm9yY2VkIG91dCBvZiBtZW1vcnkuCisKKyAgIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBvcGVyYW5kIG9mIGEgQ0xFQU5VUF9QT0lOVF9FWFBSIG11c3Qgbm90IGhhdmUKKyAgIEJMS21vZGUsIGJlY2F1c2UgaXQgd2lsbCBub3QgYmUgZm9yY2VkIG91dCBvZiBtZW1vcnkuICAqLworREVGVFJFRUNPREUgKENMRUFOVVBfUE9JTlRfRVhQUiwgImNsZWFudXBfcG9pbnRfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZCBpbiBsYW5ndWFnZXMgdGhhdCBoYXZlIHR5cGVzIHdoZXJlIHNvbWUKKyAgIGZpZWxkIGluIGFuIG9iamVjdCBvZiB0aGUgdHlwZSBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiB0aGUKKyAgIGNvbXB1dGF0aW9uIG9mIGFub3RoZXIgZmllbGQncyBvZmZzZXQgb3Igc2l6ZSBhbmQvb3IgdGhlIHNpemUgb2YgdGhlCisgICB0eXBlLiAgVGhlIHBvc2l0aW9ucyBhbmQvb3Igc2l6ZXMgb2YgZmllbGRzIGNhbiB2YXJ5IGZyb20gb2JqZWN0IHRvCisgICBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBvciBldmVuIGZvciBvbmUgYW5kIHRoZSBzYW1lIG9iamVjdCB3aXRoaW4KKyAgIGl0cyBzY29wZS4KKworICAgUmVjb3JkIHR5cGVzIHdpdGggZGlzY3JpbWluYW50cyBpbiBBZGEgb3Igc2NoZW1hIHR5cGVzIGluIFBhc2NhbCBhcmUKKyAgIGV4YW1wbGVzIG9mIHN1Y2ggdHlwZXMuICBUaGlzIG1lY2hhbmlzbSBpcyBhbHNvIHVzZWQgdG8gY3JlYXRlICJmYXQKKyAgIHBvaW50ZXJzIiBmb3IgdW5jb25zdHJhaW5lZCBhcnJheSB0eXBlcyBpbiBBZGE7IHRoZSBmYXQgcG9pbnRlciBpcyBhCisgICBzdHJ1Y3R1cmUgb25lIG9mIHdob3NlIGZpZWxkcyBpcyBhIHBvaW50ZXIgdG8gdGhlIGFjdHVhbCBhcnJheSB0eXBlCisgICBhbmQgdGhlIG90aGVyIGZpZWxkIGlzIGEgcG9pbnRlciB0byBhIHRlbXBsYXRlLCB3aGljaCBpcyBhIHN0cnVjdHVyZQorICAgY29udGFpbmluZyB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4gIFRoZSBib3VuZHMgaW4gdGhlIHR5cGUgcG9pbnRlZAorICAgdG8gYnkgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBmYXQgcG9pbnRlciByZWZlciB0byB0aGUgdmFsdWVzIGluIHRoZQorICAgdGVtcGxhdGUuCisKKyAgIFdoZW4geW91IHdpc2ggdG8gY29uc3RydWN0IHN1Y2ggYSB0eXBlIHlvdSBuZWVkICJzZWxmLXJlZmVyZW5jZXMiCisgICB0aGF0IGFsbG93IHlvdSB0byByZWZlcmVuY2UgdGhlIG9iamVjdCBoYXZpbmcgdGhpcyB0eXBlIGZyb20gdGhlCisgICBUWVBFIG5vZGUsIGkuZS4gd2l0aG91dCBoYXZpbmcgYSB2YXJpYWJsZSBpbnN0YW50aWF0aW5nIHRoaXMgdHlwZS4KKworICAgU3VjaCBhICJzZWxmLXJlZmVyZW5jZXMiIGlzIGRvbmUgdXNpbmcgYSBQTEFDRUhPTERFUl9FWFBSLiAgVGhpcyBpcworICAgYSBub2RlIHRoYXQgd2lsbCBsYXRlciBiZSByZXBsYWNlZCB3aXRoIHRoZSBvYmplY3QgYmVpbmcgcmVmZXJlbmNlZC4KKyAgIEl0cyB0eXBlIGlzIHRoYXQgb2YgdGhlIG9iamVjdCBhbmQgc2VsZWN0cyB3aGljaCBvYmplY3QgdG8gdXNlIGZyb20KKyAgIGEgY2hhaW4gb2YgcmVmZXJlbmNlcyAoc2VlIGJlbG93KS4gIE5vIG90aGVyIHNsb3RzIGFyZSB1c2VkIGluIHRoZQorICAgUExBQ0VIT0xERVJfRVhQUi4KKworICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgdHlwZSBGT08gaXMgYSBSRUNPUkRfVFlQRSB3aXRoIGEgZmllbGQgQkFSLAorICAgYW5kIHlvdSBuZWVkIHRoZSB2YWx1ZSBvZiA8dmFyaWFibGU+LkJBUiB0byBjYWxjdWxhdGUgVFlQRV9TSVpFCisgICAoRk9PKSwganVzdCBzdWJzdGl0dXRlIDx2YXJpYWJsZT4gYWJvdmUgd2l0aCBhIFBMQUNFSE9MREVSX0VYUFIKKyAgIHdob3NlIFRSRUVfVFlQRSBpcyBGT08uICBUaGVuIGNvbnN0cnVjdCB5b3VyIENPTVBPTkVOVF9SRUYgd2l0aAorICAgdGhlIFBMQUNFSE9MREVSX0VYUFIgYXMgdGhlIGZpcnN0IG9wZXJhbmQgKHdoaWNoIGhhcyB0aGUgY29ycmVjdAorICAgdHlwZSkuICBMYXRlciwgd2hlbiB0aGUgc2l6ZSBpcyBuZWVkZWQgaW4gdGhlIHByb2dyYW0sIHRoZSBiYWNrLWVuZAorICAgd2lsbCBmaW5kIHRoaXMgUExBQ0VIT0xERVJfRVhQUiBhbmQgZ2VuZXJhdGUgY29kZSB0byBjYWxjdWxhdGUgdGhlCisgICBhY3R1YWwgc2l6ZSBhdCBydW4tdGltZS4gIEluIHRoZSBmb2xsb3dpbmcsIHdlIGRlc2NyaWJlIGhvdyB0aGlzCisgICBjYWxjdWxhdGlvbiBpcyBkb25lLgorCisgICBXaGVuIHdlIHdpc2ggdG8gZXZhbHVhdGUgYSBzaXplIG9yIG9mZnNldCwgd2UgY2hlY2sgd2hldGhlciBpdCBjb250YWlucyBhCisgICBQTEFDRUhPTERFUl9FWFBSLiAgSWYgaXQgZG9lcywgd2UgY2FsbCBzdWJzdGl0dXRlX3BsYWNlaG9sZGVyX2luX2V4cHIKKyAgIHBhc3NpbmcgYm90aCB0aGF0IHRyZWUgYW5kIGFuIGV4cHJlc3Npb24gd2l0aGluIHdoaWNoIHRoZSBvYmplY3QgbWF5IGJlCisgICBmb3VuZC4gIFRoZSBsYXR0ZXIgZXhwcmVzc2lvbiBpcyB0aGUgb2JqZWN0IGl0c2VsZiBpbiB0aGUgc2ltcGxlIGNhc2Ugb2YKKyAgIGFuIEFkYSByZWNvcmQgd2l0aCBkaXNjcmltaW5hbnQsIGJ1dCBpdCBjYW4gYmUgdGhlIGFycmF5IGluIHRoZSBjYXNlIG9mIGFuCisgICB1bmNvbnN0cmFpbmVkIGFycmF5LgorCisgICBJbiB0aGUgbGF0dGVyIGNhc2UsIHdlIG5lZWQgdGhlIGZhdCBwb2ludGVyLCBiZWNhdXNlIHRoZSBib3VuZHMgb2YKKyAgIHRoZSBhcnJheSBjYW4gb25seSBiZSBhY2Nlc3NlZCBmcm9tIGl0LiAgSG93ZXZlciwgd2UgcmVseSBoZXJlIG9uIHRoZQorICAgZmFjdCB0aGF0IHRoZSBleHByZXNzaW9uIGZvciB0aGUgYXJyYXkgY29udGFpbnMgdGhlIGRlcmVmZXJlbmNlIG9mCisgICB0aGUgZmF0IHBvaW50ZXIgdGhhdCBvYnRhaW5lZCB0aGUgYXJyYXkgcG9pbnRlci4gICovCisKKy8qIERlbm90ZXMgYSByZWNvcmQgdG8gbGF0ZXIgYmUgc3Vic3RpdHV0ZWQgYmVmb3JlIGV2YWx1YXRpbmcgdGhpcyBleHByZXNzaW9uLgorICAgVGhlIHR5cGUgb2YgdGhpcyBleHByZXNzaW9uIGlzIHVzZWQgdG8gZmluZCB0aGUgcmVjb3JkIHRvIHJlcGxhY2UgaXQuICAqLworREVGVFJFRUNPREUgKFBMQUNFSE9MREVSX0VYUFIsICJwbGFjZWhvbGRlcl9leHByIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBTaW1wbGUgYXJpdGhtZXRpYy4gICovCitERUZUUkVFQ09ERSAoUExVU19FWFBSLCAicGx1c19leHByIiwgdGNjX2JpbmFyeSwgMikKK0RFRlRSRUVDT0RFIChNSU5VU19FWFBSLCAibWludXNfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoTVVMVF9FWFBSLCAibXVsdF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogUG9pbnRlciBhZGRpdGlvbi4gIFRoZSBmaXJzdCBvcGVyYW5kIGlzIGFsd2F5cyBhIHBvaW50ZXIgYW5kIHRoZQorICAgc2Vjb25kIG9wZXJhbmQgaXMgYW4gaW50ZWdlciBvZiB0eXBlIHNpemV0eXBlLiAgKi8KK0RFRlRSRUVDT0RFIChQT0lOVEVSX1BMVVNfRVhQUiwgInBvaW50ZXJfcGx1c19leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogSGlnaHBhcnQgbXVsdGlwbGljYXRpb24uICBGb3IgYW4gaW50ZWdyYWwgdHlwZSB3aXRoIHByZWNpc2lvbiBCLAorICAgcmV0dXJucyBiaXRzIFsyQi0xLCBCXSBvZiB0aGUgZnVsbCAyKkIgcHJvZHVjdC4gICovCitERUZUUkVFQ09ERSAoTVVMVF9ISUdIUEFSVF9FWFBSLCAibXVsdF9oaWdocGFydF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogRGl2aXNpb24gZm9yIGludGVnZXIgcmVzdWx0IHRoYXQgcm91bmRzIHRoZSBxdW90aWVudCB0b3dhcmQgemVyby4gICovCitERUZUUkVFQ09ERSAoVFJVTkNfRElWX0VYUFIsICJ0cnVuY19kaXZfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIERpdmlzaW9uIGZvciBpbnRlZ2VyIHJlc3VsdCB0aGF0IHJvdW5kcyB0aGUgcXVvdGllbnQgdG93YXJkIGluZmluaXR5LiAgKi8KK0RFRlRSRUVDT0RFIChDRUlMX0RJVl9FWFBSLCAiY2VpbF9kaXZfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIERpdmlzaW9uIGZvciBpbnRlZ2VyIHJlc3VsdCB0aGF0IHJvdW5kcyB0b3dhcmQgbWludXMgaW5maW5pdHkuICAqLworREVGVFJFRUNPREUgKEZMT09SX0RJVl9FWFBSLCAiZmxvb3JfZGl2X2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBEaXZpc2lvbiBmb3IgaW50ZWdlciByZXN1bHQgdGhhdCByb3VuZHMgdG93YXJkIG5lYXJlc3QgaW50ZWdlci4gICovCitERUZUUkVFQ09ERSAoUk9VTkRfRElWX0VYUFIsICJyb3VuZF9kaXZfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIEZvdXIga2luZHMgb2YgcmVtYWluZGVyIHRoYXQgZ28gd2l0aCB0aGUgZm91ciBraW5kcyBvZiBkaXZpc2lvbi4gICovCitERUZUUkVFQ09ERSAoVFJVTkNfTU9EX0VYUFIsICJ0cnVuY19tb2RfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoQ0VJTF9NT0RfRVhQUiwgImNlaWxfbW9kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorREVGVFJFRUNPREUgKEZMT09SX01PRF9FWFBSLCAiZmxvb3JfbW9kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorREVGVFJFRUNPREUgKFJPVU5EX01PRF9FWFBSLCAicm91bmRfbW9kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBEaXZpc2lvbiBmb3IgcmVhbCByZXN1bHQuICAqLworREVGVFJFRUNPREUgKFJESVZfRVhQUiwgInJkaXZfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIERpdmlzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3NlZCB0byBuZWVkIHJvdW5kaW5nLgorICAgVXNlZCBmb3IgcG9pbnRlciBzdWJ0cmFjdGlvbiBpbiBDLiAgKi8KK0RFRlRSRUVDT0RFIChFWEFDVF9ESVZfRVhQUiwgImV4YWN0X2Rpdl9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogQ29udmVyc2lvbiBvZiByZWFsIHRvIGZpeGVkIHBvaW50IGJ5IHRydW5jYXRpb24uICAqLworREVGVFJFRUNPREUgKEZJWF9UUlVOQ19FWFBSLCAiZml4X3RydW5jX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIENvbnZlcnNpb24gb2YgYW4gaW50ZWdlciB0byBhIHJlYWwuICAqLworREVGVFJFRUNPREUgKEZMT0FUX0VYUFIsICJmbG9hdF9leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBVbmFyeSBuZWdhdGlvbi4gICovCitERUZUUkVFQ09ERSAoTkVHQVRFX0VYUFIsICJuZWdhdGVfZXhwciIsIHRjY191bmFyeSwgMSkKKworLyogTWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuICBXaGVuIHVzZWQgd2l0aCBmbG9hdGluZyBwb2ludCwgaWYgYm90aAorICAgb3BlcmFuZHMgYXJlIHplcm9zLCBvciBpZiBlaXRoZXIgb3BlcmFuZCBpcyBOYU4sIHRoZW4gaXQgaXMgdW5zcGVjaWZpZWQKKyAgIHdoaWNoIG9mIHRoZSB0d28gb3BlcmFuZHMgaXMgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4gICovCitERUZUUkVFQ09ERSAoTUlOX0VYUFIsICJtaW5fZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoTUFYX0VYUFIsICJtYXhfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIFJlcHJlc2VudHMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBvcGVyYW5kLgorCisgICBBbiBBQlNfRVhQUiBtdXN0IGhhdmUgZWl0aGVyIGFuIElOVEVHRVJfVFlQRSBvciBhIFJFQUxfVFlQRS4gIFRoZQorICAgb3BlcmFuZCBvZiB0aGUgQUJTX0VYUFIgbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUuICAqLworREVGVFJFRUNPREUgKEFCU19FWFBSLCAiYWJzX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIFNoaWZ0IG9wZXJhdGlvbnMgZm9yIHNoaWZ0IGFuZCByb3RhdGUuCisgICBTaGlmdCBtZWFucyBsb2dpY2FsIHNoaWZ0IGlmIGRvbmUgb24gYW4KKyAgIHVuc2lnbmVkIHR5cGUsIGFyaXRobWV0aWMgc2hpZnQgaWYgZG9uZSBvbiBhIHNpZ25lZCB0eXBlLgorICAgVGhlIHNlY29uZCBvcGVyYW5kIGlzIHRoZSBudW1iZXIgb2YgYml0cyB0bworICAgc2hpZnQgYnk7IGl0IG5lZWQgbm90IGJlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGZpcnN0IG9wZXJhbmQgYW5kIHJlc3VsdC4KKyAgIE5vdGUgdGhhdCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiB0aGUgc2Vjb25kIG9wZXJhbmQgaXMgbGFyZ2VyCisgICB0aGFuIG9yIGVxdWFsIHRvIHRoZSBmaXJzdCBvcGVyYW5kJ3MgdHlwZSBzaXplLgorCisgICBUaGUgZmlyc3Qgb3BlcmFuZCBvZiBhIHNoaWZ0IGNhbiBoYXZlIGVpdGhlciBhbiBpbnRlZ2VyIG9yIGEKKyAgIChub24taW50ZWdlcikgZml4ZWQtcG9pbnQgdHlwZS4gIFdlIGZvbGxvdyB0aGUgSVNPL0lFQyBUUiAxODAzNzoyMDA0CisgICBzZW1hbnRpY3MgZm9yIHRoZSBsYXR0ZXIuCisKKyAgIFJvdGF0ZXMgYXJlIGRlZmluZWQgZm9yIGludGVnZXIgdHlwZXMgb25seS4gICovCitERUZUUkVFQ09ERSAoTFNISUZUX0VYUFIsICJsc2hpZnRfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoUlNISUZUX0VYUFIsICJyc2hpZnRfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoTFJPVEFURV9FWFBSLCAibHJvdGF0ZV9leHByIiwgdGNjX2JpbmFyeSwgMikKK0RFRlRSRUVDT0RFIChSUk9UQVRFX0VYUFIsICJycm90YXRlX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBCaXR3aXNlIG9wZXJhdGlvbnMuICBPcGVyYW5kcyBoYXZlIHNhbWUgbW9kZSBhcyByZXN1bHQuICAqLworREVGVFJFRUNPREUgKEJJVF9JT1JfRVhQUiwgImJpdF9pb3JfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoQklUX1hPUl9FWFBSLCAiYml0X3hvcl9leHByIiwgdGNjX2JpbmFyeSwgMikKK0RFRlRSRUVDT0RFIChCSVRfQU5EX0VYUFIsICJiaXRfYW5kX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorREVGVFJFRUNPREUgKEJJVF9OT1RfRVhQUiwgImJpdF9ub3RfZXhwciIsIHRjY191bmFyeSwgMSkKKworLyogQU5ESUYgYW5kIE9SSUYgYWxsb3cgdGhlIHNlY29uZCBvcGVyYW5kIG5vdCB0byBiZSBjb21wdXRlZCBpZiB0aGUKKyAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzIGRldGVybWluZWQgZnJvbSB0aGUgZmlyc3Qgb3BlcmFuZC4gIEFORCwKKyAgIE9SLCBhbmQgWE9SIGFsd2F5cyBjb21wdXRlIHRoZSBzZWNvbmQgb3BlcmFuZCB3aGV0aGVyIGl0cyB2YWx1ZSBpcworICAgbmVlZGVkIG9yIG5vdCAoZm9yIHNpZGUgZWZmZWN0cykuICBUaGUgb3BlcmFuZCBtYXkgaGF2ZQorICAgQk9PTEVBTl9UWVBFIG9yIElOVEVHRVJfVFlQRS4gIEluIGVpdGhlciBjYXNlLCB0aGUgYXJndW1lbnQgd2lsbCBiZQorICAgZWl0aGVyIHplcm8gb3Igb25lLiAgRm9yIGV4YW1wbGUsIGEgVFJVVEhfTk9UX0VYUFIgd2lsbCBuZXZlciBoYXZlCisgICBhbiBJTlRFR0VSX1RZUEUgVkFSX0RFQ0wgYXMgaXRzIGFyZ3VtZW50OyBpbnN0ZWFkLCBhIE5FX0VYUFIgd2lsbCBiZQorICAgdXNlZCB0byBjb21wYXJlIHRoZSBWQVJfREVDTCB0byB6ZXJvLCB0aGVyZWJ5IG9idGFpbmluZyBhIG5vZGUgd2l0aAorICAgdmFsdWUgemVybyBvciBvbmUuICAqLworREVGVFJFRUNPREUgKFRSVVRIX0FORElGX0VYUFIsICJ0cnV0aF9hbmRpZl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCitERUZUUkVFQ09ERSAoVFJVVEhfT1JJRl9FWFBSLCAidHJ1dGhfb3JpZl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCitERUZUUkVFQ09ERSAoVFJVVEhfQU5EX0VYUFIsICJ0cnV0aF9hbmRfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorREVGVFJFRUNPREUgKFRSVVRIX09SX0VYUFIsICJ0cnV0aF9vcl9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCitERUZUUkVFQ09ERSAoVFJVVEhfWE9SX0VYUFIsICJ0cnV0aF94b3JfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorREVGVFJFRUNPREUgKFRSVVRIX05PVF9FWFBSLCAidHJ1dGhfbm90X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogUmVsYXRpb25hbCBvcGVyYXRvcnMuCisgICBgRVFfRVhQUicgYW5kIGBORV9FWFBSJyBhcmUgYWxsb3dlZCBmb3IgYW55IHR5cGVzLgorICAgVGhlIG90aGVycyBhcmUgYWxsb3dlZCBvbmx5IGZvciBpbnRlZ2VyIChvciBwb2ludGVyIG9yIGVudW1lcmFsKQorICAgb3IgcmVhbCB0eXBlcy4KKyAgIEluIGFsbCBjYXNlcyB0aGUgb3BlcmFuZHMgd2lsbCBoYXZlIHRoZSBzYW1lIHR5cGUsCisgICBhbmQgdGhlIHZhbHVlIGlzIGVpdGhlciB0aGUgdHlwZSB1c2VkIGJ5IHRoZSBsYW5ndWFnZSBmb3IgYm9vbGVhbnMKKyAgIG9yIGFuIGludGVnZXIgdmVjdG9yIHR5cGUgb2YgdGhlIHNhbWUgc2l6ZSBhbmQgd2l0aCB0aGUgc2FtZSBudW1iZXIKKyAgIG9mIGVsZW1lbnRzIGFzIHRoZSBjb21wYXJpc29uIG9wZXJhbmRzLiAgVHJ1ZSBmb3IgYSB2ZWN0b3Igb2YKKyAgIGNvbXBhcmlzb24gcmVzdWx0cyBoYXMgYWxsIGJpdHMgc2V0IHdoaWxlIGZhbHNlIGlzIGVxdWFsIHRvIHplcm8uICAqLworREVGVFJFRUNPREUgKExUX0VYUFIsICJsdF9leHByIiwgdGNjX2NvbXBhcmlzb24sIDIpCitERUZUUkVFQ09ERSAoTEVfRVhQUiwgImxlX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChHVF9FWFBSLCAiZ3RfZXhwciIsIHRjY19jb21wYXJpc29uLCAyKQorREVGVFJFRUNPREUgKEdFX0VYUFIsICJnZV9leHByIiwgdGNjX2NvbXBhcmlzb24sIDIpCitERUZUUkVFQ09ERSAoRVFfRVhQUiwgImVxX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChORV9FWFBSLCAibmVfZXhwciIsIHRjY19jb21wYXJpc29uLCAyKQorCisvKiBBZGRpdGlvbmFsIHJlbGF0aW9uYWwgb3BlcmF0b3JzIGZvciBmbG9hdGluZyBwb2ludCB1bm9yZGVyZWQuICAqLworREVGVFJFRUNPREUgKFVOT1JERVJFRF9FWFBSLCAidW5vcmRlcmVkX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChPUkRFUkVEX0VYUFIsICJvcmRlcmVkX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKKworLyogVGhlc2UgYXJlIGVxdWl2YWxlbnQgdG8gdW5vcmRlcmVkIG9yIC4uLiAgKi8KK0RFRlRSRUVDT0RFIChVTkxUX0VYUFIsICJ1bmx0X2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChVTkxFX0VYUFIsICJ1bmxlX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChVTkdUX0VYUFIsICJ1bmd0X2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChVTkdFX0VYUFIsICJ1bmdlX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKK0RFRlRSRUVDT0RFIChVTkVRX0VYUFIsICJ1bmVxX2V4cHIiLCB0Y2NfY29tcGFyaXNvbiwgMikKKworLyogVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiB1bmVxX2V4cHIuICAqLworREVGVFJFRUNPREUgKExUR1RfRVhQUiwgImx0Z3RfZXhwciIsIHRjY19jb21wYXJpc29uLCAyKQorCitERUZUUkVFQ09ERSAoUkFOR0VfRVhQUiwgInJhbmdlX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBSZXByZXNlbnRzIGEgcmUtYXNzb2NpYXRpb24gYmFycmllciBmb3IgZmxvYXRpbmcgcG9pbnQgZXhwcmVzc2lvbnMKKyAgIGxpa2UgZXhwbGljaXQgcGFyZW50aGVzaXMgaW4gZm9ydHJhbi4gICovCitERUZUUkVFQ09ERSAoUEFSRU5fRVhQUiwgInBhcmVuX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIFJlcHJlc2VudHMgYSBjb252ZXJzaW9uIG9mIHR5cGUgb2YgYSB2YWx1ZS4KKyAgIEFsbCBjb252ZXJzaW9ucywgaW5jbHVkaW5nIGltcGxpY2l0IG9uZXMsIG11c3QgYmUKKyAgIHJlcHJlc2VudGVkIGJ5IENPTlZFUlRfRVhQUiBvciBOT1BfRVhQUiBub2Rlcy4gICovCitERUZUUkVFQ09ERSAoQ09OVkVSVF9FWFBSLCAiY29udmVydF9leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBDb252ZXJzaW9uIG9mIGEgcG9pbnRlciB2YWx1ZSB0byBhIHBvaW50ZXIgdG8gYSBkaWZmZXJlbnQKKyAgIGFkZHJlc3Mgc3BhY2UuICAqLworREVGVFJFRUNPREUgKEFERFJfU1BBQ0VfQ09OVkVSVF9FWFBSLCAiYWRkcl9zcGFjZV9jb252ZXJ0X2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIENvbnZlcnNpb24gb2YgYSBmaXhlZC1wb2ludCB2YWx1ZSB0byBhbiBpbnRlZ2VyLCBhIHJlYWwsIG9yIGEgZml4ZWQtcG9pbnQKKyAgIHZhbHVlLiAgT3IgY29udmVyc2lvbiBvZiBhIGZpeGVkLXBvaW50IHZhbHVlIGZyb20gYW4gaW50ZWdlciwgYSByZWFsLCBvcgorICAgYSBmaXhlZC1wb2ludCB2YWx1ZS4gICovCitERUZUUkVFQ09ERSAoRklYRURfQ09OVkVSVF9FWFBSLCAiZml4ZWRfY29udmVydF9leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBSZXByZXNlbnRzIGEgY29udmVyc2lvbiBleHBlY3RlZCB0byByZXF1aXJlIG5vIGNvZGUgdG8gYmUgZ2VuZXJhdGVkLiAgKi8KK0RFRlRSRUVDT0RFIChOT1BfRVhQUiwgIm5vcF9leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBWYWx1ZSBpcyBzYW1lIGFzIGFyZ3VtZW50LCBidXQgZ3VhcmFudGVlZCBub3QgYW4gbHZhbHVlLiAgKi8KK0RFRlRSRUVDT0RFIChOT05fTFZBTFVFX0VYUFIsICJub25fbHZhbHVlX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIEEgQ09NUE9VTkRfTElURVJBTF9FWFBSIHJlcHJlc2VudHMgYSBsaXRlcmFsIHRoYXQgaXMgcGxhY2VkIGluIGEgREVDTC4gIFRoZQorICAgQ09NUE9VTkRfTElURVJBTF9FWFBSX0RFQ0xfRVhQUiBpcyB0aGUgYSBERUNMX0VYUFIgY29udGFpbmluZyB0aGUgZGVjbAorICAgZm9yIHRoZSBhbm9ueW1vdXMgb2JqZWN0IHJlcHJlc2VudGVkIGJ5IHRoZSBDT01QT1VORF9MSVRFUkFMOworICAgdGhlIERFQ0xfSU5JVElBTCBvZiB0aGF0IGRlY2wgaXMgdGhlIENPTlNUUlVDVE9SIHRoYXQgaW5pdGlhbGl6ZXMKKyAgIHRoZSBjb21wb3VuZCBsaXRlcmFsLiAgKi8KK0RFRlRSRUVDT0RFIChDT01QT1VORF9MSVRFUkFMX0VYUFIsICJjb21wb3VuZF9saXRlcmFsX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogUmVwcmVzZW50cyBzb21ldGhpbmcgd2UgY29tcHV0ZWQgb25jZSBhbmQgd2lsbCB1c2UgbXVsdGlwbGUgdGltZXMuCisgICBGaXJzdCBvcGVyYW5kIGlzIHRoYXQgZXhwcmVzc2lvbi4gIEFmdGVyIGl0IGlzIGV2YWx1YXRlZCBvbmNlLCBpdAorICAgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIHZhbHVlLiAgKi8KK0RFRlRSRUVDT0RFIChTQVZFX0VYUFIsICJzYXZlX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogJiBpbiBDLiAgVmFsdWUgaXMgdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIG9wZXJhbmQncyB2YWx1ZSByZXNpZGVzLgorICAgT3BlcmFuZCBtYXkgaGF2ZSBhbnkgbW9kZS4gIFJlc3VsdCBtb2RlIGlzIFBtb2RlLiAgKi8KK0RFRlRSRUVDT0RFIChBRERSX0VYUFIsICJhZGRyX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogT3BlcmFuZDAgaXMgYSBmdW5jdGlvbiBjb25zdGFudDsgcmVzdWx0IGlzIHBhcnQgTiBvZiBhIGZ1bmN0aW9uCisgICBkZXNjcmlwdG9yIG9mIHR5cGUgcHRyX21vZGUuICAqLworREVGVFJFRUNPREUgKEZERVNDX0VYUFIsICJmZGVzY19leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIEdpdmVuIHR3byByZWFsIG9yIGludGVnZXIgb3BlcmFuZHMgb2YgdGhlIHNhbWUgdHlwZSwKKyAgIHJldHVybnMgYSBjb21wbGV4IHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBsZXggdHlwZS4gICovCitERUZUUkVFQ09ERSAoQ09NUExFWF9FWFBSLCAiY29tcGxleF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogQ29tcGxleCBjb25qdWdhdGUgb2Ygb3BlcmFuZC4gIFVzZWQgb25seSBvbiBjb21wbGV4IHR5cGVzLiAgKi8KK0RFRlRSRUVDT0RFIChDT05KX0VYUFIsICJjb25qX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIE5vZGVzIGZvciArKyBhbmQgLS0gaW4gQy4KKyAgIFRoZSBzZWNvbmQgYXJnIGlzIGhvdyBtdWNoIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuCisgICBGb3IgYSBwb2ludGVyLCBpdCB3b3VsZCBiZSB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IHBvaW50ZWQgdG8uICAqLworREVGVFJFRUNPREUgKFBSRURFQ1JFTUVOVF9FWFBSLCAicHJlZGVjcmVtZW50X2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKK0RFRlRSRUVDT0RFIChQUkVJTkNSRU1FTlRfRVhQUiwgInByZWluY3JlbWVudF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCitERUZUUkVFQ09ERSAoUE9TVERFQ1JFTUVOVF9FWFBSLCAicG9zdGRlY3JlbWVudF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCitERUZUUkVFQ09ERSAoUE9TVElOQ1JFTUVOVF9FWFBSLCAicG9zdGluY3JlbWVudF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIFVzZWQgdG8gaW1wbGVtZW50IGB2YV9hcmcnLiAgKi8KK0RFRlRSRUVDT0RFIChWQV9BUkdfRVhQUiwgInZhX2FyZ19leHByIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIEV2YWx1YXRlIG9wZXJhbmQgMS4gIElmIGFuZCBvbmx5IGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZHVyaW5nCisgICB0aGUgZXZhbHVhdGlvbiBvZiBvcGVyYW5kIDEsIGV2YWx1YXRlIG9wZXJhbmQgMi4KKworICAgVGhpcyBkaWZmZXJzIGZyb20gVFJZX0ZJTkFMTFlfRVhQUiBpbiB0aGF0IG9wZXJhbmQgMiBpcyBub3QgZXZhbHVhdGVkCisgICBvbiBhIG5vcm1hbCBvciBqdW1wIGV4aXQsIG9ubHkgb24gYW4gZXhjZXB0aW9uLiAgKi8KK0RFRlRSRUVDT0RFIChUUllfQ0FUQ0hfRVhQUiwgInRyeV9jYXRjaF9leHByIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogRXZhbHVhdGUgdGhlIGZpcnN0IG9wZXJhbmQuCisgICBUaGUgc2Vjb25kIG9wZXJhbmQgaXMgYSBjbGVhbnVwIGV4cHJlc3Npb24gd2hpY2ggaXMgZXZhbHVhdGVkCisgICBvbiBhbnkgZXhpdCAobm9ybWFsLCBleGNlcHRpb24sIG9yIGp1bXAgb3V0KSBmcm9tIHRoaXMgZXhwcmVzc2lvbi4gICovCitERUZUUkVFQ09ERSAoVFJZX0ZJTkFMTFlfRVhQUiwgInRyeV9maW5hbGx5IiwgdGNjX3N0YXRlbWVudCwgMikKKwwKKy8qIFRoZXNlIHR5cGVzIG9mIGV4cHJlc3Npb25zIGhhdmUgbm8gdXNlZnVsIHZhbHVlLAorICAgYW5kIGFsd2F5cyBoYXZlIHNpZGUgZWZmZWN0cy4gICovCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgbG9jYWwgZGVjbGFyYXRpb24uIFRoZSBvcGVyYW5kIGlzIERFQ0xfRVhQUl9ERUNMLiAgKi8KK0RFRlRSRUVDT0RFIChERUNMX0VYUFIsICJkZWNsX2V4cHIiLCB0Y2Nfc3RhdGVtZW50LCAxKQorCisvKiBBIGxhYmVsIGRlZmluaXRpb24sIGVuY2Fwc3VsYXRlZCBhcyBhIHN0YXRlbWVudC4KKyAgIE9wZXJhbmQgMCBpcyB0aGUgTEFCRUxfREVDTCBub2RlIGZvciB0aGUgbGFiZWwgdGhhdCBhcHBlYXJzIGhlcmUuCisgICBUaGUgdHlwZSBzaG91bGQgYmUgdm9pZCBhbmQgdGhlIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkLiAgKi8KK0RFRlRSRUVDT0RFIChMQUJFTF9FWFBSLCAibGFiZWxfZXhwciIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIEdPVE8uICBPcGVyYW5kIDAgaXMgYSBMQUJFTF9ERUNMIG5vZGUgb3IgYW4gZXhwcmVzc2lvbi4KKyAgIFRoZSB0eXBlIHNob3VsZCBiZSB2b2lkIGFuZCB0aGUgdmFsdWUgc2hvdWxkIGJlIGlnbm9yZWQuICAqLworREVGVFJFRUNPREUgKEdPVE9fRVhQUiwgImdvdG9fZXhwciIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIFJFVFVSTi4gIEV2YWx1YXRlcyBvcGVyYW5kIDAsIHRoZW4gcmV0dXJucyBmcm9tIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgorICAgUHJlc3VtYWJseSB0aGF0IG9wZXJhbmQgaXMgYW4gYXNzaWdubWVudCB0aGF0IHN0b3JlcyBpbnRvIHRoZQorICAgUkVTVUxUX0RFQ0wgdGhhdCBob2xkIHRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZC4KKyAgIFRoZSBvcGVyYW5kIG1heSBiZSBudWxsLgorICAgVGhlIHR5cGUgc2hvdWxkIGJlIHZvaWQgYW5kIHRoZSB2YWx1ZSBzaG91bGQgYmUgaWdub3JlZC4gICovCitERUZUUkVFQ09ERSAoUkVUVVJOX0VYUFIsICJyZXR1cm5fZXhwciIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIEV4aXQgdGhlIGlubmVyIG1vc3QgbG9vcCBjb25kaXRpb25hbGx5LiAgT3BlcmFuZCAwIGlzIHRoZSBjb25kaXRpb24uCisgICBUaGUgdHlwZSBzaG91bGQgYmUgdm9pZCBhbmQgdGhlIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkLiAgKi8KK0RFRlRSRUVDT0RFIChFWElUX0VYUFIsICJleGl0X2V4cHIiLCB0Y2Nfc3RhdGVtZW50LCAxKQorCisvKiBBIGxvb3AuICBPcGVyYW5kIDAgaXMgdGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICBJdCBtdXN0IGNvbnRhaW4gYW4gRVhJVF9FWFBSIG9yIGlzIGFuIGluZmluaXRlIGxvb3AuCisgICBUaGUgdHlwZSBzaG91bGQgYmUgdm9pZCBhbmQgdGhlIHZhbHVlIHNob3VsZCBiZSBpZ25vcmVkLiAgKi8KK0RFRlRSRUVDT0RFIChMT09QX0VYUFIsICJsb29wX2V4cHIiLCB0Y2Nfc3RhdGVtZW50LCAxKQorCisvKiBTd2l0Y2ggZXhwcmVzc2lvbi4KKworICAgVFJFRV9UWVBFIGlzIHRoZSBvcmlnaW5hbCB0eXBlIG9mIHRoZSBjb25kaXRpb24sIGJlZm9yZSBhbnkKKyAgIGxhbmd1YWdlIHJlcXVpcmVkIHR5cGUgY29udmVyc2lvbnMuICBJdCBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZQorICAgdGhlIG9yaWdpbmFsIHR5cGUgYW5kIGZpbmFsIHR5cGVzIGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lLgorCisgICBPcGVyYW5kIDAgaXMgdGhlIGV4cHJlc3Npb24gdXNlZCB0byBwZXJmb3JtIHRoZSBicmFuY2gsCisgICBPcGVyYW5kIDEgaXMgdGhlIGJvZHkgb2YgdGhlIHN3aXRjaCwgd2hpY2ggcHJvYmFibHkgY29udGFpbnMKKyAgICAgQ0FTRV9MQUJFTF9FWFBScy4gIEl0IG1heSBhbHNvIGJlIE5VTEwsIGluIHdoaWNoIGNhc2Ugb3BlcmFuZCAyCisgICAgIG11c3Qgbm90IGJlIE5VTEwuCisgICBPcGVyYW5kIDIgaXMgZWl0aGVyIE5VTExfVFJFRSBvciBhIFRSRUVfVkVDIG9mIHRoZSBDQVNFX0xBQkVMX0VYUFJzCisgICAgIG9mIGFsbCB0aGUgY2FzZXMuICAqLworREVGVFJFRUNPREUgKFNXSVRDSF9FWFBSLCAic3dpdGNoX2V4cHIiLCB0Y2Nfc3RhdGVtZW50LCAzKQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhIGNhc2UgbGFiZWwuCisKKyAgIE9wZXJhbmQgMCBpcyBDQVNFX0xPVy4gIEl0IG1heSBiZSBOVUxMX1RSRUUsIGluIHdoaWNoIGNhc2UgdGhlIGxhYmVsCisgICAgIGlzIGEgJ2RlZmF1bHQnIGxhYmVsLgorICAgT3BlcmFuZCAxIGlzIENBU0VfSElHSC4gIElmIGl0IGlzIE5VTExfVFJFRSwgdGhlIGxhYmVsIGlzIGEgc2ltcGxlCisgICAgIChvbmUtdmFsdWUpIGNhc2UgbGFiZWwuICBJZiBpdCBpcyBub24tTlVMTF9UUkVFLCB0aGUgY2FzZSBpcyBhIHJhbmdlLgorICAgT3BlcmFuZCAyIGlzIENBU0VfTEFCRUwsIHdoaWNoIGlzIGlzIHRoZSBjb3JyZXNwb25kaW5nIExBQkVMX0RFQ0wuCisgICBPcGVyYW5kIDQgaXMgQ0FTRV9DSEFJTi4gIFRoaXMgb3BlcmFuZCBpcyBvbmx5IHVzZWQgaW4gdHJlZS1jZmcuYyB0bworICAgICBzcGVlZCB1cCB0aGUgbG9va3VwIG9mIGNhc2UgbGFiZWxzIHdoaWNoIHVzZSBhIHBhcnRpY3VsYXIgZWRnZSBpbgorICAgICB0aGUgY29udHJvbCBmbG93IGdyYXBoLiAgKi8KK0RFRlRSRUVDT0RFIChDQVNFX0xBQkVMX0VYUFIsICJjYXNlX2xhYmVsX2V4cHIiLCB0Y2Nfc3RhdGVtZW50LCA0KQorCisvKiBVc2VkIHRvIHJlcHJlc2VudCBhbiBpbmxpbmUgYXNzZW1ibHkgc3RhdGVtZW50LiAgQVNNX1NUUklORyByZXR1cm5zIGEKKyAgIFNUUklOR19DU1QgZm9yIHRoZSBpbnN0cnVjdGlvbiAoZS5nLiwgIm1vdiB4LCB5IikuIEFTTV9PVVRQVVRTLAorICAgQVNNX0lOUFVUUywgYW5kIEFTTV9DTE9CQkVSUyByZXByZXNlbnQgdGhlIG91dHB1dHMsIGlucHV0cywgYW5kIGNsb2JiZXJzCisgICBmb3IgdGhlIHN0YXRlbWVudC4gIEFTTV9MQUJFTFMsIGlmIHByZXNlbnQsIGluZGljYXRlcyB2YXJpb3VzIGRlc3RpbmF0aW9ucworICAgZm9yIHRoZSBhc207IGxhYmVscyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdXRwdXRzLiAgKi8KK0RFRlRSRUVDT0RFIChBU01fRVhQUiwgImFzbV9leHByIiwgdGNjX3N0YXRlbWVudCwgNSkKKworLyogVmFyaWFibGUgcmVmZXJlbmNlcyBmb3IgU1NBIGFuYWx5c2lzLiAgTmV3IFNTQSBuYW1lcyBhcmUgY3JlYXRlZCBldmVyeQorICAgdGltZSBhIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGEgbmV3IHZhbHVlLiAgVGhlIFNTQSBidWlsZGVyIHVzZXMgU1NBX05BTUUKKyAgIG5vZGVzIHRvIGltcGxlbWVudCBTU0EgdmVyc2lvbmluZy4gICovCitERUZUUkVFQ09ERSAoU1NBX05BTUUsICJzc2FfbmFtZSIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogVXNlZCB0byByZXByZXNlbnQgYSB0eXBlZCBleGNlcHRpb24gaGFuZGxlci4gIENBVENIX1RZUEVTIGlzIHRoZSB0eXBlIChvcgorICAgbGlzdCBvZiB0eXBlcykgaGFuZGxlZCwgYW5kIENBVENIX0JPRFkgaXMgdGhlIGNvZGUgZm9yIHRoZSBoYW5kbGVyLiAgKi8KK0RFRlRSRUVDT0RFIChDQVRDSF9FWFBSLCAiY2F0Y2hfZXhwciIsIHRjY19zdGF0ZW1lbnQsIDIpCisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGFuIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uLiAgRUhfRklMVEVSX1RZUEVTIGlzIGEgbGlzdAorICAgb2YgYWxsb3dlZCB0eXBlcywgYW5kIEVIX0ZJTFRFUl9GQUlMVVJFIGlzIGFuIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgb24KKyAgIGZhaWx1cmUuICAqLworREVGVFJFRUNPREUgKEVIX0ZJTFRFUl9FWFBSLCAiZWhfZmlsdGVyX2V4cHIiLCB0Y2Nfc3RhdGVtZW50LCAyKQorCisvKiBOb2RlIHVzZWQgZm9yIGRlc2NyaWJpbmcgYSBwcm9wZXJ0eSB0aGF0IGlzIGtub3duIGF0IGNvbXBpbGUKKyAgIHRpbWUuICAqLworREVGVFJFRUNPREUgKFNDRVZfS05PV04sICJzY2V2X2tub3duIiwgdGNjX2V4cHJlc3Npb24sIDApCisKKy8qIE5vZGUgdXNlZCBmb3IgZGVzY3JpYmluZyBhIHByb3BlcnR5IHRoYXQgaXMgbm90IGtub3duIGF0IGNvbXBpbGUKKyAgIHRpbWUuICAqLworREVGVFJFRUNPREUgKFNDRVZfTk9UX0tOT1dOLCAic2Nldl9ub3Rfa25vd24iLCB0Y2NfZXhwcmVzc2lvbiwgMCkKKworLyogUG9seW5vbWlhbCBjaGFpbnMgb2YgcmVjdXJyZW5jZXMuCisgICBVbmRlciB0aGUgZm9ybTogY3IgPSB7Q0hSRUNfTEVGVCAoY3IpLCArLCBDSFJFQ19SSUdIVCAoY3IpfS4gICovCitERUZUUkVFQ09ERSAoUE9MWU5PTUlBTF9DSFJFQywgInBvbHlub21pYWxfY2hyZWMiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKworLyogVXNlZCB0byBjaGFpbiBjaGlsZHJlbiBvZiBjb250YWluZXIgc3RhdGVtZW50cyB0b2dldGhlci4KKyAgIFVzZSB0aGUgaW50ZXJmYWNlIGluIHRyZWUtaXRlcmF0b3IuaCB0byBhY2Nlc3MgdGhpcyBub2RlLiAgKi8KK0RFRlRSRUVDT0RFIChTVEFURU1FTlRfTElTVCwgInN0YXRlbWVudF9saXN0IiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBQcmVkaWNhdGUgYXNzZXJ0aW9uLiAgQXJ0aWZpY2lhbCBleHByZXNzaW9uIGdlbmVyYXRlZCBieSB0aGUgb3B0aW1pemVycworICAgdG8ga2VlcCB0cmFjayBvZiBwcmVkaWNhdGUgdmFsdWVzLiAgVGhpcyBleHByZXNzaW9uIG1heSBvbmx5IGFwcGVhciBvbgorICAgdGhlIFJIUyBvZiBhc3NpZ25tZW50cy4KKworICAgR2l2ZW4gWCA9IEFTU0VSVF9FWFBSIDxZLCBFWFBSPiwgdGhlIG9wdGltaXplcnMgY2FuIGluZmVyCisgICB0d28gdGhpbmdzOgorCisgICAJMS0gWCBpcyBhIGNvcHkgb2YgWS4KKwkyLSBFWFBSIGlzIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhbmQgaXMga25vd24gdG8gYmUgdHJ1ZS4KKworICAgVmFsaWQgYW5kIHRvIGJlIGV4cGVjdGVkIGZvcm1zIG9mIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIGFyZQorICAgdmFsaWQgR0lNUExFIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIChhcyBkZWZpbmVkIGJ5IGlzX2dpbXBsZV9jb25kZXhwcikKKyAgIGFuZCBjb25kaXRpb25hbCBleHByZXNzaW9ucyB3aXRoIHRoZSBmaXJzdCBvcGVyYW5kIGJlaW5nIGEKKyAgIFBMVVNfRVhQUiB3aXRoIGEgdmFyaWFibGUgcG9zc2libHkgd3JhcHBlZCBpbiBhIE5PUF9FWFBSIGZpcnN0CisgICBvcGVyYW5kIGFuZCBhbiBpbnRlZ2VyIGNvbnN0YW50IHNlY29uZCBvcGVyYW5kLgorCisgICBUaGUgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiBpcyB0aGUgc2FtZSBhcyBZLiAgKi8KK0RFRlRSRUVDT0RFIChBU1NFUlRfRVhQUiwgImFzc2VydF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDIpCisKKy8qIEJhc2UgY2xhc3MgaW5mb3JtYXRpb24uIEhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGEgY2xhc3MgYXMgYQorICAgYmFzZWNsYXNzIG9mIGl0c2VsZiBvciBhbm90aGVyIGNsYXNzLiAgKi8KK0RFRlRSRUVDT0RFIChUUkVFX0JJTkZPLCAidHJlZV9iaW5mbyIsIHRjY19leGNlcHRpb25hbCwgMCkKKworLyogUmVjb3JkcyB0aGUgc2l6ZSBmb3IgYW4gZXhwcmVzc2lvbiBvZiB2YXJpYWJsZSBzaXplIHR5cGUuICBUaGlzIGlzCisgICBmb3IgdXNlIGluIGNvbnRleHRzIGluIHdoaWNoIHdlIGFyZSBhY2Nlc3NpbmcgdGhlIGVudGlyZSBvYmplY3QsCisgICBzdWNoIGFzIGZvciBhIGZ1bmN0aW9uIGNhbGwsIG9yIGJsb2NrIGNvcHkuCisgICBPcGVyYW5kIDAgaXMgdGhlIHJlYWwgZXhwcmVzc2lvbi4KKyAgIE9wZXJhbmQgMSBpcyB0aGUgc2l6ZSBvZiB0aGUgdHlwZSBpbiB0aGUgZXhwcmVzc2lvbi4gICovCitERUZUUkVFQ09ERSAoV0lUSF9TSVpFX0VYUFIsICJ3aXRoX3NpemVfZXhwciIsIHRjY19leHByZXNzaW9uLCAyKQorCisvKiBFeHRyYWN0IGVsZW1lbnRzIGZyb20gdHdvIGlucHV0IHZlY3RvcnMgT3BlcmFuZCAwIGFuZCBPcGVyYW5kIDEKKyAgIHNpemUgVlMsIGFjY29yZGluZyB0byB0aGUgb2Zmc2V0IE9GRiBkZWZpbmVkIGJ5IE9wZXJhbmQgMiBhcworICAgZm9sbG93czoKKyAgIElmIE9GRiA+IDAsIHRoZSBsYXN0IFZTIC0gT0ZGIGVsZW1lbnRzIG9mIHZlY3RvciBPUDAgYXJlIGNvbmNhdGVuYXRlZCB0bworICAgdGhlIGZpcnN0IE9GRiBlbGVtZW50cyBvZiB0aGUgdmVjdG9yIE9QMS4KKyAgIElmIE9GRiA9PSAwLCB0aGVuIHRoZSByZXR1cm5lZCB2ZWN0b3IgaXMgT1AxLgorICAgT24gZGlmZmVyZW50IHRhcmdldHMgT0ZGIG1heSB0YWtlIGRpZmZlcmVudCBmb3JtczsgSXQgY2FuIGJlIGFuIGFkZHJlc3MsIGluCisgICB3aGljaCBjYXNlIGl0cyBsb3cgbG9nMihWUyktMSBiaXRzIGRlZmluZSB0aGUgb2Zmc2V0LCBvciBpdCBjYW4gYmUgYSBtYXNrCisgICBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWx0aW4gdGFyZ2V0bS52ZWN0b3JpemUubWFza19mb3JfbG9hZF9idWlsdGluX2RlY2wuICAqLworREVGVFJFRUNPREUgKFJFQUxJR05fTE9BRF9FWFBSLCAicmVhbGlnbl9sb2FkIiwgdGNjX2V4cHJlc3Npb24sIDMpCisKKy8qIExvdy1sZXZlbCBtZW1vcnkgYWRkcmVzc2luZy4gIE9wZXJhbmRzIGFyZSBCQVNFIChhZGRyZXNzIG9mIHN0YXRpYyBvcgorICAgZ2xvYmFsIHZhcmlhYmxlIG9yIHJlZ2lzdGVyKSwgT0ZGU0VUIChpbnRlZ2VyIGNvbnN0YW50KSwKKyAgIElOREVYIChyZWdpc3RlciksIFNURVAgKGludGVnZXIgY29uc3RhbnQpLCBJTkRFWDIgKHJlZ2lzdGVyKSwKKyAgIFRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3MgaXMgQkFTRSArIFNURVAgKiBJTkRFWCArIElOREVYMiArIE9GRlNFVC4KKyAgIE9ubHkgdmFyaWF0aW9ucyBhbmQgdmFsdWVzIHZhbGlkIG9uIHRoZSB0YXJnZXQgYXJlIGFsbG93ZWQuCisKKyAgIFRoZSB0eXBlIG9mIFNURVAsIElOREVYIGFuZCBJTkRFWDIgaXMgc2l6ZXR5cGUuCisKKyAgIFRoZSB0eXBlIG9mIEJBU0UgaXMgYSBwb2ludGVyIHR5cGUuICBJZiBCQVNFIGlzIG5vdCBhbiBhZGRyZXNzIG9mCisgICBhIHN0YXRpYyBvciBnbG9iYWwgdmFyaWFibGUgSU5ERVgyIHdpbGwgYmUgTlVMTC4KKworICAgVGhlIHR5cGUgb2YgT0ZGU0VUIGlzIGEgcG9pbnRlciB0eXBlIGFuZCBkZXRlcm1pbmVzIFRCQUEgdGhlIHNhbWUgYXMKKyAgIHRoZSBjb25zdGFudCBvZmZzZXQgb3BlcmFuZCBpbiBNRU1fUkVGLiAgKi8KKworREVGVFJFRUNPREUgKFRBUkdFVF9NRU1fUkVGLCAidGFyZ2V0X21lbV9yZWYiLCB0Y2NfcmVmZXJlbmNlLCA1KQorCisvKiBNZW1vcnkgYWRkcmVzc2luZy4gIE9wZXJhbmRzIGFyZSBhIHBvaW50ZXIgYW5kIGEgdHJlZSBjb25zdGFudCBpbnRlZ2VyCisgICBieXRlIG9mZnNldCBvZiB0aGUgcG9pbnRlciB0eXBlIHRoYXQgd2hlbiBkZXJlZmVyZW5jZWQgeWllbGRzIHRoZQorICAgdHlwZSBvZiB0aGUgYmFzZSBvYmplY3QgdGhlIHBvaW50ZXIgcG9pbnRzIGludG8gYW5kIHdoaWNoIGlzIHVzZWQgZm9yCisgICBUQkFBIHB1cnBvc2VzLgorICAgVGhlIHR5cGUgb2YgdGhlIE1FTV9SRUYgaXMgdGhlIHR5cGUgdGhlIGJ5dGVzIGF0IHRoZSBtZW1vcnkgbG9jYXRpb24KKyAgIGFyZSBpbnRlcnByZXRlZCBhcy4KKyAgIE1FTV9SRUYgPHAsIGM+IGlzIGVxdWl2YWxlbnQgdG8gKCh0eXBlb2YoYykpcCktPnguLi4gd2hlcmUgeC4uLiBpcyBhCisgICBjaGFpbiBvZiBjb21wb25lbnQgcmVmZXJlbmNlcyBvZmZzZXR0aW5nIHAgYnkgYy4gICovCitERUZUUkVFQ09ERSAoTUVNX1JFRiwgIm1lbV9yZWYiLCB0Y2NfcmVmZXJlbmNlLCAyKQorCisvKiBUaGUgb3JkZXJpbmcgb2YgdGhlIGNvZGVzIGJldHdlZW4gT01QX1BBUkFMTEVMIGFuZCBPTVBfQ1JJVElDQUwgaXMKKyAgIGV4cG9zZWQgdG8gVFJFRV9SQU5HRV9DSEVDSy4gICovCisvKiBPcGVuTVAgLSAjcHJhZ21hIG9tcCBwYXJhbGxlbCBbY2xhdXNlMSAuLi4gY2xhdXNlTl0KKyAgIE9wZXJhbmQgMDogT01QX1BBUkFMTEVMX0JPRFk6IENvZGUgdG8gYmUgZXhlY3V0ZWQgYnkgYWxsIHRocmVhZHMuCisgICBPcGVyYW5kIDE6IE9NUF9QQVJBTExFTF9DTEFVU0VTOiBMaXN0IG9mIGNsYXVzZXMuICAqLworCitERUZUUkVFQ09ERSAoT01QX1BBUkFMTEVMLCAib21wX3BhcmFsbGVsIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgdGFzayBbY2xhdXNlMSAuLi4gY2xhdXNlTl0KKyAgIE9wZXJhbmQgMDogT01QX1RBU0tfQk9EWTogQ29kZSB0byBiZSBleGVjdXRlZCBieSBhbGwgdGhyZWFkcy4KKyAgIE9wZXJhbmQgMTogT01QX1RBU0tfQ0xBVVNFUzogTGlzdCBvZiBjbGF1c2VzLiAgKi8KKworREVGVFJFRUNPREUgKE9NUF9UQVNLLCAib21wX3Rhc2siLCB0Y2Nfc3RhdGVtZW50LCAyKQorCisvKiBPcGVuTVAgLSAjcHJhZ21hIG9tcCBmb3IgW2NsYXVzZTEgLi4uIGNsYXVzZU5dCisgICBPcGVyYW5kIDA6IE9NUF9GT1JfQk9EWTogTG9vcCBib2R5LgorICAgT3BlcmFuZCAxOiBPTVBfRk9SX0NMQVVTRVM6IExpc3Qgb2YgY2xhdXNlcy4KKyAgIE9wZXJhbmQgMjogT01QX0ZPUl9JTklUOiBJbml0aWFsaXphdGlvbiBjb2RlIG9mIHRoZSBmb3JtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlWQVIgPSBOMS4KKyAgIE9wZXJhbmQgMzogT01QX0ZPUl9DT05EOiBMb29wIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVZBUiB7IDwsID4sIDw9LCA+PSB9IE4yLgorICAgT3BlcmFuZCA0OiBPTVBfRk9SX0lOQ1I6IExvb3AgaW5kZXggaW5jcmVtZW50IG9mIHRoZSBmb3JtCisJCQkgICAgIAlWQVIgeyArPSwgLT0gfSBJTkNSLgorICAgT3BlcmFuZCA1OiBPTVBfRk9SX1BSRV9CT0RZOiBGaWxsZWQgYnkgdGhlIGdpbXBsaWZpZXIgd2l0aCB0aGluZ3MKKwlmcm9tIElOSVQsIENPTkQsIGFuZCBJTkNSIHRoYXQgYXJlIHRlY2huaWNhbGx5IHBhcnQgb2YgdGhlCisJT01QX0ZPUiBzdHJ1Y3R1cmVkIGJsb2NrLCBidXQgYXJlIGV2YWx1YXRlZCBiZWZvcmUgdGhlIGxvb3AKKwlib2R5IGJlZ2lucy4KKworICAgVkFSIG11c3QgYmUgYW4gaW50ZWdlciBvciBwb2ludGVyIHZhcmlhYmxlLCB3aGljaCBpcyBpbXBsaWNpdGx5IHRocmVhZAorICAgcHJpdmF0ZS4gIE4xLCBOMiBhbmQgSU5DUiBhcmUgcmVxdWlyZWQgdG8gYmUgbG9vcCBpbnZhcmlhbnQgaW50ZWdlcgorICAgZXhwcmVzc2lvbnMgdGhhdCBhcmUgZXZhbHVhdGVkIHdpdGhvdXQgYW55IHN5bmNocm9uaXphdGlvbi4KKyAgIFRoZSBldmFsdWF0aW9uIG9yZGVyLCBmcmVxdWVuY3kgb2YgZXZhbHVhdGlvbiBhbmQgc2lkZS1lZmZlY3RzIGFyZQorICAgdW5zcGVjaWZpZWQgYnkgdGhlIHN0YW5kYXJkLiAgKi8KK0RFRlRSRUVDT0RFIChPTVBfRk9SLCAib21wX2ZvciIsIHRjY19zdGF0ZW1lbnQsIDYpCisKKy8qIE9wZW5NUCAtICNwcmFnbWEgb21wIHNlY3Rpb25zIFtjbGF1c2UxIC4uLiBjbGF1c2VOXQorICAgT3BlcmFuZCAwOiBPTVBfU0VDVElPTlNfQk9EWTogU2VjdGlvbnMgYm9keS4KKyAgIE9wZXJhbmQgMTogT01QX1NFQ1RJT05TX0NMQVVTRVM6IExpc3Qgb2YgY2xhdXNlcy4gICovCitERUZUUkVFQ09ERSAoT01QX1NFQ1RJT05TLCAib21wX3NlY3Rpb25zIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgc2luZ2xlCisgICBPcGVyYW5kIDA6IE9NUF9TSU5HTEVfQk9EWTogU2luZ2xlIHNlY3Rpb24gYm9keS4KKyAgIE9wZXJhbmQgMTogT01QX1NJTkdMRV9DTEFVU0VTOiBMaXN0IG9mIGNsYXVzZXMuICAqLworREVGVFJFRUNPREUgKE9NUF9TSU5HTEUsICJvbXBfc2luZ2xlIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgc2VjdGlvbgorICAgT3BlcmFuZCAwOiBPTVBfU0VDVElPTl9CT0RZOiBTZWN0aW9uIGJvZHkuICAqLworREVGVFJFRUNPREUgKE9NUF9TRUNUSU9OLCAib21wX3NlY3Rpb24iLCB0Y2Nfc3RhdGVtZW50LCAxKQorCisvKiBPcGVuTVAgLSAjcHJhZ21hIG9tcCBtYXN0ZXIKKyAgIE9wZXJhbmQgMDogT01QX01BU1RFUl9CT0RZOiBNYXN0ZXIgc2VjdGlvbiBib2R5LiAgKi8KK0RFRlRSRUVDT0RFIChPTVBfTUFTVEVSLCAib21wX21hc3RlciIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIE9wZW5NUCAtICNwcmFnbWEgb21wIG9yZGVyZWQKKyAgIE9wZXJhbmQgMDogT01QX09SREVSRURfQk9EWTogTWFzdGVyIHNlY3Rpb24gYm9keS4gICovCitERUZUUkVFQ09ERSAoT01QX09SREVSRUQsICJvbXBfb3JkZXJlZCIsIHRjY19zdGF0ZW1lbnQsIDEpCisKKy8qIE9wZW5NUCAtICNwcmFnbWEgb21wIGNyaXRpY2FsIFtuYW1lXQorICAgT3BlcmFuZCAwOiBPTVBfQ1JJVElDQUxfQk9EWTogQ3JpdGljYWwgc2VjdGlvbiBib2R5LgorICAgT3BlcmFuZCAxOiBPTVBfQ1JJVElDQUxfTkFNRTogSWRlbnRpZmllciBmb3IgY3JpdGljYWwgc2VjdGlvbi4gICovCitERUZUUkVFQ09ERSAoT01QX0NSSVRJQ0FMLCAib21wX2NyaXRpY2FsIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgYXRvbWljCisgICBPcGVyYW5kIDA6IFRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBhdG9taWMgb3BlcmF0aW9uIGlzIHRvIGJlIHBlcmZvcm1lZC4KKwlUaGlzIGFkZHJlc3Mgc2hvdWxkIGJlIHN0YWJpbGl6ZWQgd2l0aCBzYXZlX2V4cHIuCisgICBPcGVyYW5kIDE6IFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlLiAgV2hlbiB0aGUgb2xkIHZhbHVlIG9mIHRoZSBvYmplY3QKKwlhdCB0aGUgYWRkcmVzcyBpcyB1c2VkIGluIHRoZSBleHByZXNzaW9uLCBpdCBzaG91bGQgYXBwZWFyIGFzIGlmCisJYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgb2YgdGhlIGFkZHJlc3MuICAqLworREVGVFJFRUNPREUgKE9NUF9BVE9NSUMsICJvbXBfYXRvbWljIiwgdGNjX3N0YXRlbWVudCwgMikKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgYXRvbWljIHJlYWQKKyAgIE9wZXJhbmQgMDogVGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIGF0b21pYyBvcGVyYXRpb24gaXMgdG8gYmUgcGVyZm9ybWVkLgorCVRoaXMgYWRkcmVzcyBzaG91bGQgYmUgc3RhYmlsaXplZCB3aXRoIHNhdmVfZXhwci4gICovCitERUZUUkVFQ09ERSAoT01QX0FUT01JQ19SRUFELCAib21wX2F0b21pY19yZWFkIiwgdGNjX3N0YXRlbWVudCwgMSkKKworLyogT3Blbk1QIC0gI3ByYWdtYSBvbXAgYXRvbWljIGNhcHR1cmUKKyAgIE9wZXJhbmQgMDogVGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIGF0b21pYyBvcGVyYXRpb24gaXMgdG8gYmUgcGVyZm9ybWVkLgorCVRoaXMgYWRkcmVzcyBzaG91bGQgYmUgc3RhYmlsaXplZCB3aXRoIHNhdmVfZXhwci4KKyAgIE9wZXJhbmQgMTogVGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuICBXaGVuIHRoZSBvbGQgdmFsdWUgb2YgdGhlIG9iamVjdAorCWF0IHRoZSBhZGRyZXNzIGlzIHVzZWQgaW4gdGhlIGV4cHJlc3Npb24sIGl0IHNob3VsZCBhcHBlYXIgYXMgaWYKKwlidWlsZF9mb2xkX2luZGlyZWN0X3JlZiBvZiB0aGUgYWRkcmVzcy4KKyAgIE9NUF9BVE9NSUNfQ0FQVFVSRV9PTEQgcmV0dXJucyB0aGUgb2xkIG1lbW9yeSBjb250ZW50LAorICAgT01QX0FUT01JQ19DQVBUVVJFX05FVyB0aGUgbmV3IHZhbHVlLiAgKi8KK0RFRlRSRUVDT0RFIChPTVBfQVRPTUlDX0NBUFRVUkVfT0xELCAib21wX2F0b21pY19jYXB0dXJlX29sZCIsIHRjY19zdGF0ZW1lbnQsIDIpCitERUZUUkVFQ09ERSAoT01QX0FUT01JQ19DQVBUVVJFX05FVywgIm9tcF9hdG9taWNfY2FwdHVyZV9uZXciLCB0Y2Nfc3RhdGVtZW50LCAyKQorCisvKiBPcGVuTVAgY2xhdXNlcy4gICovCitERUZUUkVFQ09ERSAoT01QX0NMQVVTRSwgIm9tcF9jbGF1c2UiLCB0Y2NfZXhjZXB0aW9uYWwsIDApCisKKy8qIFRSQU5TQUNUSU9OX0VYUFIgdHJlZSBjb2RlLgorICAgT3BlcmFuZCAwOiBCT0RZOiBjb250YWlucyBib2R5IG9mIHRoZSB0cmFuc2FjdGlvbi4gICovCitERUZUUkVFQ09ERSAoVFJBTlNBQ1RJT05fRVhQUiwgInRyYW5zYWN0aW9uX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogUmVkdWN0aW9uIG9wZXJhdGlvbnMuCisgICBPcGVyYXRpb25zIHRoYXQgdGFrZSBhIHZlY3RvciBvZiBlbGVtZW50cyBhbmQgInJlZHVjZSIgaXQgdG8gYSBzY2FsYXIKKyAgIHJlc3VsdCAoZS5nLiBzdW1taW5nIHRoZSBlbGVtZW50cyBvZiB0aGUgdmVjdG9yLCBmaW5kaW5nIHRoZSBtaW5pbXVtIG92ZXIKKyAgIHRoZSB2ZWN0b3IgZWxlbWVudHMsIGV0YykuCisgICBPcGVyYW5kIDAgaXMgYSB2ZWN0b3IuCisgICBUaGUgZXhwcmVzc2lvbiByZXR1cm5zIGEgdmVjdG9yIG9mIHRoZSBzYW1lIHR5cGUsIHdpdGggdGhlIGZpcnN0CisgICBlbGVtZW50IGluIHRoZSB2ZWN0b3IgaG9sZGluZyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24gb2YgYWxsIGVsZW1lbnRzCisgICBvZiB0aGUgb3BlcmFuZC4gIFRoZSBjb250ZW50IG9mIHRoZSBvdGhlciBlbGVtZW50cyBpbiB0aGUgcmV0dXJuZWQgdmVjdG9yCisgICBpcyB1bmRlZmluZWQuICAqLworREVGVFJFRUNPREUgKFJFRFVDX01BWF9FWFBSLCAicmVkdWNfbWF4X2V4cHIiLCB0Y2NfdW5hcnksIDEpCitERUZUUkVFQ09ERSAoUkVEVUNfTUlOX0VYUFIsICJyZWR1Y19taW5fZXhwciIsIHRjY191bmFyeSwgMSkKK0RFRlRSRUVDT0RFIChSRURVQ19QTFVTX0VYUFIsICJyZWR1Y19wbHVzX2V4cHIiLCB0Y2NfdW5hcnksIDEpCisKKy8qIFdpZGVuaW5nIGRvdC1wcm9kdWN0LgorICAgVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIG9mIHR5cGUgdDEuCisgICBUaGUgdGhpcmQgYXJndW1lbnQgYW5kIHRoZSByZXN1bHQgYXJlIG9mIHR5cGUgdDIsIHN1Y2ggdGhhdCB0MiBpcyBhdCBsZWFzdAorICAgdHdpY2UgdGhlIHNpemUgb2YgdDEuIERPVF9QUk9EX0VYUFIoYXJnMSxhcmcyLGFyZzMpIGlzIGVxdWl2YWxlbnQgdG86CisgICAJdG1wID0gV0lERU5fTVVMVF9FWFBSKGFyZzEsIGFyZzIpOworICAgCWFyZzMgPSBQTFVTX0VYUFIgKHRtcCwgYXJnMyk7CisgICBvcjoKKwl0bXAgPSBXSURFTl9NVUxUX0VYUFIoYXJnMSwgYXJnMik7CisgICAgICAgIGFyZzMgPSBXSURFTl9TVU1fRVhQUiAodG1wLCBhcmczKTsJCSAqLworREVGVFJFRUNPREUgKERPVF9QUk9EX0VYUFIsICJkb3RfcHJvZF9leHByIiwgdGNjX2V4cHJlc3Npb24sIDMpCisKKy8qIFdpZGVuaW5nIHN1bW1hdGlvbi4KKyAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBvZiB0eXBlIHQxLgorICAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBvZiB0eXBlIHQyLCBzdWNoIHRoYXQgdDIgaXMgYXQgbGVhc3QgdHdpY2UKKyAgIHRoZSBzaXplIG9mIHQxLiBUaGUgdHlwZSBvZiB0aGUgZW50aXJlIGV4cHJlc3Npb24gaXMgYWxzbyB0Mi4KKyAgIFdJREVOX1NVTV9FWFBSIGlzIGVxdWl2YWxlbnQgdG8gZmlyc3Qgd2lkZW5pbmcgKHByb21vdGluZykKKyAgIHRoZSBmaXJzdCBhcmd1bWVudCBmcm9tIHR5cGUgdDEgdG8gdHlwZSB0MiwgYW5kIHRoZW4gc3VtbWluZyBpdAorICAgd2l0aCB0aGUgc2Vjb25kIGFyZ3VtZW50LiAgKi8KK0RFRlRSRUVDT0RFIChXSURFTl9TVU1fRVhQUiwgIndpZGVuX3N1bV9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogV2lkZW5pbmcgbXVsdGlwbGljYXRpb24uCisgICBUaGUgdHdvIGFyZ3VtZW50cyBhcmUgb2YgdHlwZSB0MS4KKyAgIFRoZSByZXN1bHQgaXMgb2YgdHlwZSB0Miwgc3VjaCB0aGF0IHQyIGlzIGF0IGxlYXN0IHR3aWNlCisgICB0aGUgc2l6ZSBvZiB0MS4gV0lERU5fTVVMVF9FWFBSIGlzIGVxdWl2YWxlbnQgdG8gZmlyc3Qgd2lkZW5pbmcgKHByb21vdGluZykKKyAgIHRoZSBhcmd1bWVudHMgZnJvbSB0eXBlIHQxIHRvIHR5cGUgdDIsIGFuZCB0aGVuIG11bHRpcGx5aW5nIHRoZW0uICAqLworREVGVFJFRUNPREUgKFdJREVOX01VTFRfRVhQUiwgIndpZGVuX211bHRfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIFdpZGVuaW5nIG11bHRpcGx5LWFjY3VtdWxhdGUuCisgICBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgb2YgdHlwZSB0MS4KKyAgIFRoZSB0aGlyZCBhcmd1bWVudCBhbmQgdGhlIHJlc3VsdCBhcmUgb2YgdHlwZSB0Miwgc3VjaCBhcyB0MiBpcyBhdCBsZWFzdAorICAgdHdpY2UgdGhlIHNpemUgb2YgdDEuICB0MSBhbmQgdDIgbXVzdCBiZSBpbnRlZ3JhbCBvciBmaXhlZC1wb2ludCB0eXBlcy4KKyAgIFRoZSBleHByZXNzaW9uIGlzIGVxdWl2YWxlbnQgdG8gYSBXSURFTl9NVUxUX0VYUFIgb3BlcmF0aW9uCisgICBvZiB0aGUgZmlyc3QgdHdvIG9wZXJhbmRzIGZvbGxvd2VkIGJ5IGFuIGFkZCBvciBzdWJ0cmFjdCBvZiB0aGUgdGhpcmQKKyAgIG9wZXJhbmQuICAqLworREVGVFJFRUNPREUgKFdJREVOX01VTFRfUExVU19FWFBSLCAid2lkZW5fbXVsdF9wbHVzX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKy8qIFRoaXMgaXMgbGlrZSB0aGUgYWJvdmUsIGV4Y2VwdCBpbiB0aGUgZmluYWwgZXhwcmVzc2lvbiB0aGUgbXVsdGlwbHkgcmVzdWx0CisgICBpcyBzdWJ0cmFjdGVkIGZyb20gdDMuICAqLworREVGVFJFRUNPREUgKFdJREVOX01VTFRfTUlOVVNfRVhQUiwgIndpZGVuX211bHRfbWludXNfZXhwciIsIHRjY19leHByZXNzaW9uLCAzKQorCisvKiBXaWRlbmluZyBzaGlmdCBsZWZ0LgorICAgVGhlIGZpcnN0IG9wZXJhbmQgaXMgb2YgdHlwZSB0MS4KKyAgIFRoZSBzZWNvbmQgb3BlcmFuZCBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgYnk7IGl0IG5lZWQgbm90IGJlIHRoZQorICAgc2FtZSB0eXBlIGFzIHRoZSBmaXJzdCBvcGVyYW5kIGFuZCByZXN1bHQuCisgICBOb3RlIHRoYXQgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQgaWYgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGxhcmdlcgorICAgdGhhbiBvciBlcXVhbCB0byB0aGUgZmlyc3Qgb3BlcmFuZCdzIHR5cGUgc2l6ZS4KKyAgIFRoZSB0eXBlIG9mIHRoZSBlbnRpcmUgZXhwcmVzc2lvbiBpcyB0Miwgc3VjaCB0aGF0IHQyIGlzIGF0IGxlYXN0IHR3aWNlCisgICB0aGUgc2l6ZSBvZiB0MS4KKyAgIFdJREVOX0xTSElGVF9FWFBSIGlzIGVxdWl2YWxlbnQgdG8gZmlyc3Qgd2lkZW5pbmcgKHByb21vdGluZykKKyAgIHRoZSBmaXJzdCBhcmd1bWVudCBmcm9tIHR5cGUgdDEgdG8gdHlwZSB0MiwgYW5kIHRoZW4gc2hpZnRpbmcgaXQKKyAgIGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQuICAqLworREVGVFJFRUNPREUgKFdJREVOX0xTSElGVF9FWFBSLCAid2lkZW5fbHNoaWZ0X2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorCisvKiBGdXNlZCBtdWx0aXBseS1hZGQuCisgICBBbGwgb3BlcmFuZHMgYW5kIHRoZSByZXN1bHQgYXJlIG9mIHRoZSBzYW1lIHR5cGUuICBObyBpbnRlcm1lZGlhdGUKKyAgIHJvdW5kaW5nIGlzIHBlcmZvcm1lZCBhZnRlciBtdWx0aXBseWluZyBvcGVyYW5kIG9uZSB3aXRoIG9wZXJhbmQgdHdvCisgICBiZWZvcmUgYWRkaW5nIG9wZXJhbmQgdGhyZWUuICAqLworREVGVFJFRUNPREUgKEZNQV9FWFBSLCAiZm1hX2V4cHIiLCB0Y2NfZXhwcmVzc2lvbiwgMykKKworLyogV2hvbGUgdmVjdG9yIGxlZnQvcmlnaHQgc2hpZnQgaW4gYml0cy4KKyAgIE9wZXJhbmQgMCBpcyBhIHZlY3RvciB0byBiZSBzaGlmdGVkLgorICAgT3BlcmFuZCAxIGlzIGFuIGludGVnZXIgc2hpZnQgYW1vdW50IGluIGJpdHMuICAqLworREVGVFJFRUNPREUgKFZFQ19MU0hJRlRfRVhQUiwgInZlY19sc2hpZnRfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoVkVDX1JTSElGVF9FWFBSLCAidmVjX3JzaGlmdF9leHByIiwgdGNjX2JpbmFyeSwgMikKKwwKKy8qIFdpZGVuaW5nIHZlY3RvciBtdWx0aXBsaWNhdGlvbi4KKyAgIFRoZSB0d28gb3BlcmFuZHMgYXJlIHZlY3RvcnMgd2l0aCBOIGVsZW1lbnRzIG9mIHNpemUgUy4gTXVsdGlwbHlpbmcgdGhlCisgICBlbGVtZW50cyBvZiB0aGUgdHdvIHZlY3RvcnMgd2lsbCByZXN1bHQgaW4gTiBwcm9kdWN0cyBvZiBzaXplIDIqUy4KKyAgIFZFQ19XSURFTl9NVUxUX0hJX0VYUFIgY29tcHV0ZXMgdGhlIE4vMiBoaWdoIHByb2R1Y3RzLgorICAgVkVDX1dJREVOX01VTFRfTE9fRVhQUiBjb21wdXRlcyB0aGUgTi8yIGxvdyBwcm9kdWN0cy4gICovCitERUZUUkVFQ09ERSAoVkVDX1dJREVOX01VTFRfSElfRVhQUiwgIndpZGVuX211bHRfaGlfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoVkVDX1dJREVOX01VTFRfTE9fRVhQUiwgIndpZGVuX211bHRfbG9fZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIFNpbWlsYXJseSwgYnV0IHJldHVybiB0aGUgZXZlbiBvciBvZGQgTi8yIHByb2R1Y3RzLiAgKi8KK0RFRlRSRUVDT0RFIChWRUNfV0lERU5fTVVMVF9FVkVOX0VYUFIsICJ3aWRlbl9tdWx0X2V2ZW5fZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoVkVDX1dJREVOX01VTFRfT0REX0VYUFIsICJ3aWRlbl9tdWx0X29kZF9leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogVW5wYWNrIChleHRyYWN0IGFuZCBwcm9tb3RlL3dpZGVuKSB0aGUgaGlnaC9sb3cgZWxlbWVudHMgb2YgdGhlIGlucHV0CisgICB2ZWN0b3IgaW50byB0aGUgb3V0cHV0IHZlY3Rvci4gIFRoZSBpbnB1dCB2ZWN0b3IgaGFzIHR3aWNlIGFzIG1hbnkKKyAgIGVsZW1lbnRzIGFzIHRoZSBvdXRwdXQgdmVjdG9yLCB0aGF0IGFyZSBoYWxmIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50cworICAgb2YgdGhlIG91dHB1dCB2ZWN0b3IuICBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCB0eXBlIHByb21vdGlvbi4gKi8KK0RFRlRSRUVDT0RFIChWRUNfVU5QQUNLX0hJX0VYUFIsICJ2ZWNfdW5wYWNrX2hpX2V4cHIiLCB0Y2NfdW5hcnksIDEpCitERUZUUkVFQ09ERSAoVkVDX1VOUEFDS19MT19FWFBSLCAidmVjX3VucGFja19sb19leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBVbnBhY2sgKGV4dHJhY3QpIHRoZSBoaWdoL2xvdyBlbGVtZW50cyBvZiB0aGUgaW5wdXQgdmVjdG9yLCBjb252ZXJ0CisgICBmaXhlZCBwb2ludCB2YWx1ZXMgdG8gZmxvYXRpbmcgcG9pbnQgYW5kIHdpZGVuIGVsZW1lbnRzIGludG8gdGhlCisgICBvdXRwdXQgdmVjdG9yLiAgVGhlIGlucHV0IHZlY3RvciBoYXMgdHdpY2UgYXMgbWFueSBlbGVtZW50cyBhcyB0aGUgb3V0cHV0CisgICB2ZWN0b3IsIHRoYXQgYXJlIGhhbGYgdGhlIHNpemUgb2YgdGhlIGVsZW1lbnRzIG9mIHRoZSBvdXRwdXQgdmVjdG9yLiAgKi8KK0RFRlRSRUVDT0RFIChWRUNfVU5QQUNLX0ZMT0FUX0hJX0VYUFIsICJ2ZWNfdW5wYWNrX2Zsb2F0X2hpX2V4cHIiLCB0Y2NfdW5hcnksIDEpCitERUZUUkVFQ09ERSAoVkVDX1VOUEFDS19GTE9BVF9MT19FWFBSLCAidmVjX3VucGFja19mbG9hdF9sb19leHByIiwgdGNjX3VuYXJ5LCAxKQorCisvKiBQYWNrIChkZW1vdGUvbmFycm93IGFuZCBtZXJnZSkgdGhlIGVsZW1lbnRzIG9mIHRoZSB0d28gaW5wdXQgdmVjdG9ycworICAgaW50byB0aGUgb3V0cHV0IHZlY3RvciB1c2luZyB0cnVuY2F0aW9uL3NhdHVyYXRpb24uCisgICBUaGUgZWxlbWVudHMgb2YgdGhlIGlucHV0IHZlY3RvcnMgYXJlIHR3aWNlIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50cyBvZiB0aGUKKyAgIG91dHB1dCB2ZWN0b3IuICBUaGlzIGlzIHVzZWQgdG8gc3VwcG9ydCB0eXBlIGRlbW90aW9uLiAgKi8KK0RFRlRSRUVDT0RFIChWRUNfUEFDS19UUlVOQ19FWFBSLCAidmVjX3BhY2tfdHJ1bmNfZXhwciIsIHRjY19iaW5hcnksIDIpCitERUZUUkVFQ09ERSAoVkVDX1BBQ0tfU0FUX0VYUFIsICJ2ZWNfcGFja19zYXRfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIENvbnZlcnQgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIG9mIHRoZSB0d28gaW5wdXQgdmVjdG9ycyB0byBpbnRlZ2VyCisgICBhbmQgcGFjayAobmFycm93IGFuZCBtZXJnZSkgdGhlIGVsZW1lbnRzIGludG8gdGhlIG91dHB1dCB2ZWN0b3IuIFRoZQorICAgZWxlbWVudHMgb2YgdGhlIGlucHV0IHZlY3RvciBhcmUgdHdpY2UgdGhlIHNpemUgb2YgdGhlIGVsZW1lbnRzIG9mCisgICB0aGUgb3V0cHV0IHZlY3Rvci4gICovCitERUZUUkVFQ09ERSAoVkVDX1BBQ0tfRklYX1RSVU5DX0VYUFIsICJ2ZWNfcGFja19maXhfdHJ1bmNfZXhwciIsIHRjY19iaW5hcnksIDIpCisKKy8qIFdpZGVuaW5nIHZlY3RvciBzaGlmdCBsZWZ0IGluIGJpdHMuCisgICBPcGVyYW5kIDAgaXMgYSB2ZWN0b3IgdG8gYmUgc2hpZnRlZCB3aXRoIE4gZWxlbWVudHMgb2Ygc2l6ZSBTLgorICAgT3BlcmFuZCAxIGlzIGFuIGludGVnZXIgc2hpZnQgYW1vdW50IGluIGJpdHMuCisgICBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gaXMgTiBlbGVtZW50cyBvZiBzaXplIDIqUy4KKyAgIFZFQ19XSURFTl9MU0hJRlRfSElfRVhQUiBjb21wdXRlcyB0aGUgTi8yIGhpZ2ggcmVzdWx0cy4KKyAgIFZFQ19XSURFTl9MU0hJRlRfTE9fRVhQUiBjb21wdXRlcyB0aGUgTi8yIGxvdyByZXN1bHRzLgorICovCitERUZUUkVFQ09ERSAoVkVDX1dJREVOX0xTSElGVF9ISV9FWFBSLCAid2lkZW5fbHNoaWZ0X2hpX2V4cHIiLCB0Y2NfYmluYXJ5LCAyKQorREVGVFJFRUNPREUgKFZFQ19XSURFTl9MU0hJRlRfTE9fRVhQUiwgIndpZGVuX2xzaGlmdF9sb19leHByIiwgdGNjX2JpbmFyeSwgMikKKworLyogUFJFRElDVF9FWFBSLiAgU3BlY2lmeSBoaW50IGZvciBicmFuY2ggcHJlZGljdGlvbi4gIFRoZQorICAgUFJFRElDVF9FWFBSX1BSRURJQ1RPUiBzcGVjaWZ5IHByZWRpY3RvciBhbmQgUFJFRElDVF9FWFBSX09VVENPTUUgdGhlCisgICBvdXRjb21lICgwIGZvciBub3QgdGFrZW4gYW5kIDEgZm9yIHRha2VuKS4gIE9uY2UgdGhlIHByb2ZpbGUgaXMgZ3Vlc3NlZAorICAgYWxsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGxlYWRpbmcgdG8gZXhlY3V0aW9uIHBhdGhzIGV4ZWN1dGluZyB0aGUKKyAgIFBSRURJQ1RfRVhQUiB3aWxsIGdldCBwcmVkaWN0ZWQgYnkgdGhlIHNwZWNpZmllZCBwcmVkaWN0b3IuICAqLworREVGVFJFRUNPREUgKFBSRURJQ1RfRVhQUiwgInByZWRpY3RfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQorCisvKiBPUFRJTUlaQVRJT05fTk9ERS4gIE5vZGUgdG8gc3RvcmUgdGhlIG9wdGltaXphdGlvbiBvcHRpb25zLiAgKi8KK0RFRlRSRUVDT0RFIChPUFRJTUlaQVRJT05fTk9ERSwgIm9wdGltaXphdGlvbl9ub2RlIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKiBUQVJHRVRfT1BUSU9OX05PREUuICBOb2RlIHRvIHN0b3JlIHRoZSB0YXJnZXQgc3BlY2lmaWMgb3B0aW9ucy4gICovCitERUZUUkVFQ09ERSAoVEFSR0VUX09QVElPTl9OT0RFLCAidGFyZ2V0X29wdGlvbl9ub2RlIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQorCisvKgorTG9jYWwgdmFyaWFibGVzOgorbW9kZTpjCitFbmQ6CisqLwpkaWZmIC0tZ2l0IGEvbGliL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL3BsdWdpbi9pbmNsdWRlL3RyZWUuaCBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0MTRmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlLmgKQEAgLTAsMCArMSw2NTQ4IEBACisvKiBEZWZpbml0aW9ucyBmb3IgdGhlIHViaXF1aXRvdXMgJ3RyZWUnIHR5cGUgZm9yIEdOVSBjb21waWxlcnMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgR0NDX1RSRUVfSAorI2RlZmluZSBHQ0NfVFJFRV9ICisKKyNpbmNsdWRlICJoYXNodGFiLmgiCisjaW5jbHVkZSAibWFjaG1vZGUuaCIKKyNpbmNsdWRlICJpbnB1dC5oIgorI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKKyNpbmNsdWRlICJ2ZWMuaCIKKyNpbmNsdWRlICJkb3VibGUtaW50LmgiCisjaW5jbHVkZSAicmVhbC5oIgorI2luY2x1ZGUgImZpeGVkLXZhbHVlLmgiCisjaW5jbHVkZSAiYWxpYXMuaCIKKyNpbmNsdWRlICJmbGFncy5oIgorCisvKiBDb2RlcyBvZiB0cmVlIG5vZGVzICovCisKKyNkZWZpbmUgREVGVFJFRUNPREUoU1lNLCBTVFJJTkcsIFRZUEUsIE5BUkdTKSAgIFNZTSwKKyNkZWZpbmUgRU5EX09GX0JBU0VfVFJFRV9DT0RFUyBMQVNUX0FORF9VTlVTRURfVFJFRV9DT0RFLAorCitlbnVtIHRyZWVfY29kZSB7CisjaW5jbHVkZSAiYWxsLXRyZWUuZGVmIgorTUFYX1RSRUVfQ09ERVMKK307CisKKyN1bmRlZiBERUZUUkVFQ09ERQorI3VuZGVmIEVORF9PRl9CQVNFX1RSRUVfQ09ERVMKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgdHJlZV9jb250YWluc19zdHJ1Y3RbTUFYX1RSRUVfQ09ERVNdWzY0XTsKKyNkZWZpbmUgQ09ERV9DT05UQUlOU19TVFJVQ1QoQ09ERSwgU1RSVUNUKSAodHJlZV9jb250YWluc19zdHJ1Y3RbKENPREUpXVsoU1RSVUNUKV0pCisKKy8qIE1hY3JvcyBmb3IgaW5pdGlhbGl6aW5nIGB0cmVlX2NvbnRhaW5zX3N0cnVjdCcuICAqLworI2RlZmluZSBNQVJLX1RTX0JBU0UoQykJCQkJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgdHJlZV9jb250YWluc19zdHJ1Y3RbQ11bVFNfQkFTRV0gPSAxOwkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIE1BUktfVFNfVFlQRUQoQykJCQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICBNQVJLX1RTX0JBU0UgKEMpOwkJCQkJXAorICAgIHRyZWVfY29udGFpbnNfc3RydWN0W0NdW1RTX1RZUEVEXSA9IDE7CQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgTUFSS19UU19DT01NT04oQykJCQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICBNQVJLX1RTX1RZUEVEIChDKTsJCQkJCVwKKyAgICB0cmVlX2NvbnRhaW5zX3N0cnVjdFtDXVtUU19DT01NT05dID0gMTsJCVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNQVJLX1RTX1RZUEVfQ09NTU9OKEMpCQkJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgTUFSS19UU19DT01NT04gKEMpOwkJCQkJXAorICAgIHRyZWVfY29udGFpbnNfc3RydWN0W0NdW1RTX1RZUEVfQ09NTU9OXSA9IDE7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNQVJLX1RTX1RZUEVfV0lUSF9MQU5HX1NQRUNJRklDKEMpCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIE1BUktfVFNfVFlQRV9DT01NT04gKEMpOwkJCQlcCisgICAgdHJlZV9jb250YWluc19zdHJ1Y3RbQ11bVFNfVFlQRV9XSVRIX0xBTkdfU1BFQ0lGSUNdID0gMTsJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIE1BUktfVFNfREVDTF9NSU5JTUFMKEMpCQkJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgTUFSS19UU19DT01NT04gKEMpOwkJCQkJXAorICAgIHRyZWVfY29udGFpbnNfc3RydWN0W0NdW1RTX0RFQ0xfTUlOSU1BTF0gPSAxOwlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgTUFSS19UU19ERUNMX0NPTU1PTihDKQkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIE1BUktfVFNfREVDTF9NSU5JTUFMIChDKTsJCQkJXAorICAgIHRyZWVfY29udGFpbnNfc3RydWN0W0NdW1RTX0RFQ0xfQ09NTU9OXSA9IDE7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNQVJLX1RTX0RFQ0xfV1JUTChDKQkJCQlcCisgIGRvIHsJCQkJCQkJXAorICAgIE1BUktfVFNfREVDTF9DT01NT04gKEMpOwkJCQlcCisgICAgdHJlZV9jb250YWluc19zdHJ1Y3RbQ11bVFNfREVDTF9XUlRMXSA9IDE7CQlcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgTUFSS19UU19ERUNMX1dJVEhfVklTKEMpCQkJXAorICBkbyB7CQkJCQkJCVwKKyAgICBNQVJLX1RTX0RFQ0xfV1JUTCAoQyk7CQkJCVwKKyAgICB0cmVlX2NvbnRhaW5zX3N0cnVjdFtDXVtUU19ERUNMX1dJVEhfVklTXSA9IDE7CVwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBNQVJLX1RTX0RFQ0xfTk9OX0NPTU1PTihDKQkJCVwKKyAgZG8gewkJCQkJCQlcCisgICAgTUFSS19UU19ERUNMX1dJVEhfVklTIChDKTsJCQkJXAorICAgIHRyZWVfY29udGFpbnNfc3RydWN0W0NdW1RTX0RFQ0xfTk9OX0NPTU1PTl0gPSAxOwlcCisgIH0gd2hpbGUgKDApCisKKy8qIE51bWJlciBvZiBsYW5ndWFnZS1pbmRlcGVuZGVudCB0cmVlIGNvZGVzLiAgKi8KKyNkZWZpbmUgTlVNX1RSRUVfQ09ERVMgKChpbnQpIExBU1RfQU5EX1VOVVNFRF9UUkVFX0NPREUpCisKKy8qIFRyZWUgY29kZSBjbGFzc2VzLiAgKi8KKworLyogRWFjaCB0cmVlX2NvZGUgaGFzIGFuIGFzc29jaWF0ZWQgY29kZSBjbGFzcyByZXByZXNlbnRlZCBieSBhCisgICBUUkVFX0NPREVfQ0xBU1MuICAqLworCitlbnVtIHRyZWVfY29kZV9jbGFzcyB7CisgIHRjY19leGNlcHRpb25hbCwgLyogQW4gZXhjZXB0aW9uYWwgY29kZSAoZml0cyBubyBjYXRlZ29yeSkuICAqLworICB0Y2NfY29uc3RhbnQsICAgIC8qIEEgY29uc3RhbnQuICAqLworICAvKiBPcmRlciBvZiB0Y2NfdHlwZSBhbmQgdGNjX2RlY2xhcmF0aW9uIGlzIGltcG9ydGFudC4gICovCisgIHRjY190eXBlLCAgICAgICAgLyogQSB0eXBlIG9iamVjdCBjb2RlLiAgKi8KKyAgdGNjX2RlY2xhcmF0aW9uLCAvKiBBIGRlY2xhcmF0aW9uIChhbHNvIHNlcnZpbmcgYXMgdmFyaWFibGUgcmVmcykuICAqLworICB0Y2NfcmVmZXJlbmNlLCAgIC8qIEEgcmVmZXJlbmNlIHRvIHN0b3JhZ2UuICAqLworICB0Y2NfY29tcGFyaXNvbiwgIC8qIEEgY29tcGFyaXNvbiBleHByZXNzaW9uLiAgKi8KKyAgdGNjX3VuYXJ5LCAgICAgICAvKiBBIHVuYXJ5IGFyaXRobWV0aWMgZXhwcmVzc2lvbi4gICovCisgIHRjY19iaW5hcnksICAgICAgLyogQSBiaW5hcnkgYXJpdGhtZXRpYyBleHByZXNzaW9uLiAgKi8KKyAgdGNjX3N0YXRlbWVudCwgICAvKiBBIHN0YXRlbWVudCBleHByZXNzaW9uLCB3aGljaCBoYXZlIHNpZGUgZWZmZWN0cworCQkgICAgICBidXQgdXN1YWxseSBubyBpbnRlcmVzdGluZyB2YWx1ZS4gICovCisgIHRjY192bF9leHAsICAgICAgLyogQSBmdW5jdGlvbiBjYWxsIG9yIG90aGVyIGV4cHJlc3Npb24gd2l0aCBhCisJCSAgICAgIHZhcmlhYmxlLWxlbmd0aCBvcGVyYW5kIHZlY3Rvci4gICovCisgIHRjY19leHByZXNzaW9uICAgLyogQW55IG90aGVyIGV4cHJlc3Npb24uICAqLworfTsKKworLyogRWFjaCB0cmVlIGNvZGUgY2xhc3MgaGFzIGFuIGFzc29jaWF0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgVGhlc2UgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSB0cmVlX2NvZGVfY2xhc3MgZW50cmllcy4gICovCisKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCB0cmVlX2NvZGVfY2xhc3Nfc3RyaW5nc1tdOworCisvKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIENMQVNTLiAgKi8KKworI2RlZmluZSBUUkVFX0NPREVfQ0xBU1NfU1RSSU5HKENMQVNTKVwKKyAgICAgICAgdHJlZV9jb2RlX2NsYXNzX3N0cmluZ3NbKGludCkgKENMQVNTKV0KKworZXh0ZXJuIGNvbnN0IGVudW0gdHJlZV9jb2RlX2NsYXNzIHRyZWVfY29kZV90eXBlW107CisjZGVmaW5lIFRSRUVfQ09ERV9DTEFTUyhDT0RFKQl0cmVlX2NvZGVfdHlwZVsoaW50KSAoQ09ERSldCisKKy8qIE5vbnplcm8gaWYgQ09ERSByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbmFsIGNvZGUuICAqLworCisjZGVmaW5lIEVYQ0VQVElPTkFMX0NMQVNTX1AoQ09ERSlcCisJKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChDT0RFKSkgPT0gdGNjX2V4Y2VwdGlvbmFsKQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhIGNvbnN0YW50LiAgKi8KKworI2RlZmluZSBDT05TVEFOVF9DTEFTU19QKENPREUpXAorCShUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoQ09ERSkpID09IHRjY19jb25zdGFudCkKKworLyogTm9uemVybyBpZiBDT0RFIHJlcHJlc2VudHMgYSB0eXBlLiAgKi8KKworI2RlZmluZSBUWVBFX1AoQ09ERSlcCisJKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChDT0RFKSkgPT0gdGNjX3R5cGUpCisKKy8qIE5vbnplcm8gaWYgQ09ERSByZXByZXNlbnRzIGEgZGVjbGFyYXRpb24uICAqLworCisjZGVmaW5lIERFQ0xfUChDT0RFKVwKKyAgICAgICAgKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChDT0RFKSkgPT0gdGNjX2RlY2xhcmF0aW9uKQorCisvKiBOb256ZXJvIGlmIERFQ0wgcmVwcmVzZW50cyBhIFZBUl9ERUNMIG9yIEZVTkNUSU9OX0RFQ0wuICAqLworCisjZGVmaW5lIFZBUl9PUl9GVU5DVElPTl9ERUNMX1AoREVDTClcCisgIChUUkVFX0NPREUgKERFQ0wpID09IFZBUl9ERUNMIHx8IFRSRUVfQ09ERSAoREVDTCkgPT0gRlVOQ1RJT05fREVDTCkKKworLyogTm9uemVybyBpZiBDT0RFIHJlcHJlc2VudHMgYSBJTkRJUkVDVF9SRUYuICBLZWVwIHRoZXNlIGNoZWNrcyBpbgorICAgYXNjZW5kaW5nIGNvZGUgb3JkZXIuICAqLworCisjZGVmaW5lIElORElSRUNUX1JFRl9QKENPREUpXAorICAoVFJFRV9DT0RFIChDT0RFKSA9PSBJTkRJUkVDVF9SRUYpCisKKy8qIE5vbnplcm8gaWYgQ09ERSByZXByZXNlbnRzIGEgcmVmZXJlbmNlLiAgKi8KKworI2RlZmluZSBSRUZFUkVOQ0VfQ0xBU1NfUChDT0RFKVwKKwkoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKENPREUpKSA9PSB0Y2NfcmVmZXJlbmNlKQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhIGNvbXBhcmlzb24uICAqLworCisjZGVmaW5lIENPTVBBUklTT05fQ0xBU1NfUChDT0RFKVwKKwkoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKENPREUpKSA9PSB0Y2NfY29tcGFyaXNvbikKKworLyogTm9uemVybyBpZiBDT0RFIHJlcHJlc2VudHMgYSB1bmFyeSBhcml0aG1ldGljIGV4cHJlc3Npb24uICAqLworCisjZGVmaW5lIFVOQVJZX0NMQVNTX1AoQ09ERSlcCisJKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChDT0RFKSkgPT0gdGNjX3VuYXJ5KQorCisvKiBOb256ZXJvIGlmIENPREUgcmVwcmVzZW50cyBhIGJpbmFyeSBhcml0aG1ldGljIGV4cHJlc3Npb24uICAqLworCisjZGVmaW5lIEJJTkFSWV9DTEFTU19QKENPREUpXAorCShUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoQ09ERSkpID09IHRjY19iaW5hcnkpCisKKy8qIE5vbnplcm8gaWYgQ09ERSByZXByZXNlbnRzIGEgc3RhdGVtZW50IGV4cHJlc3Npb24uICAqLworCisjZGVmaW5lIFNUQVRFTUVOVF9DTEFTU19QKENPREUpXAorCShUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoQ09ERSkpID09IHRjY19zdGF0ZW1lbnQpCisKKy8qIE5vbnplcm8gaWYgQ09ERSByZXByZXNlbnRzIGEgZnVuY3Rpb24gY2FsbC1saWtlIGV4cHJlc3Npb24gd2l0aCBhCisgICB2YXJpYWJsZS1sZW5ndGggb3BlcmFuZCB2ZWN0b3IuICAqLworCisjZGVmaW5lIFZMX0VYUF9DTEFTU19QKENPREUpXAorCShUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoQ09ERSkpID09IHRjY192bF9leHApCisKKy8qIE5vbnplcm8gaWYgQ09ERSByZXByZXNlbnRzIGFueSBvdGhlciBleHByZXNzaW9uLiAgKi8KKworI2RlZmluZSBFWFBSRVNTSU9OX0NMQVNTX1AoQ09ERSlcCisJKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChDT0RFKSkgPT0gdGNjX2V4cHJlc3Npb24pCisKKy8qIFJldHVybnMgbm9uemVybyBpZmYgQ09ERSByZXByZXNlbnRzIGEgdHlwZSBvciBkZWNsYXJhdGlvbi4gICovCisKKyNkZWZpbmUgSVNfVFlQRV9PUl9ERUNMX1AoQ09ERSlcCisJKFRZUEVfUCAoQ09ERSkgfHwgREVDTF9QIChDT0RFKSkKKworLyogUmV0dXJucyBub256ZXJvIGlmZiBDTEFTUyBpcyB0aGUgdHJlZS1jb2RlIGNsYXNzIG9mIGFuCisgICBleHByZXNzaW9uLiAgKi8KKworI2RlZmluZSBJU19FWFBSX0NPREVfQ0xBU1MoQ0xBU1MpXAorCSgoQ0xBU1MpID49IHRjY19yZWZlcmVuY2UgJiYgKENMQVNTKSA8PSB0Y2NfZXhwcmVzc2lvbikKKworLyogUmV0dXJucyBub256ZXJvIGlmZiBOT0RFIGlzIGFuIGV4cHJlc3Npb24gb2Ygc29tZSBraW5kLiAgKi8KKworI2RlZmluZSBFWFBSX1AoTk9ERSkgSVNfRVhQUl9DT0RFX0NMQVNTIChUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoTk9ERSkpKQorCisvKiBOdW1iZXIgb2YgYXJndW1lbnQtd29yZHMgaW4gZWFjaCBraW5kIG9mIHRyZWUtbm9kZS4gICovCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHRyZWVfY29kZV9sZW5ndGhbXTsKKyNkZWZpbmUgVFJFRV9DT0RFX0xFTkdUSChDT0RFKQl0cmVlX2NvZGVfbGVuZ3RoWyhpbnQpIChDT0RFKV0KKworLyogTmFtZXMgb2YgdHJlZSBjb21wb25lbnRzLiAgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHRyZWVfY29kZV9uYW1lW107CisKKy8qIFdoZW4gcHJvY2VzaW5nIGFsaWFzZXMgb24gc3ltdGFiIGxldmVsLCB3ZSBuZWVkIHRoZSBkZWNsYXJhdGlvbiBvZiB0YXJnZXQuCisgICBGb3IgdGhpcyByZWFzb24gd2UgbmVlZCB0byBxdWV1ZSBhbGlhc2VzIGFuZCBwcm9jZXNzIHRoZW0gYWZ0ZXIgYWxsIGRlY2xhcmF0aW9ucworICAgaGFzIGJlZW4gcHJvZHVjZWQuICAqLworCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIGFsaWFzX3BhaXIKK3sKKyAgdHJlZSBkZWNsOworICB0cmVlIHRhcmdldDsgIAorfSBhbGlhc19wYWlyOworCisvKiBEZWZpbmUgZ2MnZCB2ZWN0b3IgdHlwZS4gICovCisKK2V4dGVybiBHVFkoKCkpIHZlYzxhbGlhc19wYWlyLCB2YV9nYz4gKmFsaWFzX3BhaXJzOworCisMCisvKiBDbGFzc2lmeSB3aGljaCBwYXJ0IG9mIHRoZSBjb21waWxlciBoYXMgZGVmaW5lZCBhIGdpdmVuIGJ1aWx0aW4gZnVuY3Rpb24uCisgICBOb3RlIHRoYXQgd2UgYXNzdW1lIGJlbG93IHRoYXQgdGhpcyBpcyBubyBtb3JlIHRoYW4gdHdvIGJpdHMuICAqLworZW51bSBidWlsdF9pbl9jbGFzcworeworICBOT1RfQlVJTFRfSU4gPSAwLAorICBCVUlMVF9JTl9GUk9OVEVORCwKKyAgQlVJTFRfSU5fTUQsCisgIEJVSUxUX0lOX05PUk1BTAorfTsKKworLyogTGFzdCBtYXJrZXIgdXNlZCBmb3IgTFRPIHN0cmVtYWluZyBvZiBidWlsdF9pbl9jbGFzcy4gIFdlIGNhbiBub3QgYWRkIGl0CisgICB0byB0aGUgZW51bSBzaW5jZSB3ZSBuZWVkIHRoZSBlbnVtYiB0byBmaXQgaW4gMiBiaXRzLiAgKi8KKyNkZWZpbmUgQlVJTFRfSU5fTEFTVCAoQlVJTFRfSU5fTk9STUFMICsgMSkKKworLyogTmFtZXMgZm9yIHRoZSBhYm92ZS4gICovCitleHRlcm4gY29uc3QgY2hhciAqY29uc3QgYnVpbHRfaW5fY2xhc3NfbmFtZXNbNF07CisKKy8qIENvZGVzIHRoYXQgaWRlbnRpZnkgdGhlIHZhcmlvdXMgYnVpbHQgaW4gZnVuY3Rpb25zCisgICBzbyB0aGF0IGV4cGFuZF9jYWxsIGNhbiBpZGVudGlmeSB0aGVtIHF1aWNrbHkuICAqLworCisjZGVmaW5lIERFRl9CVUlMVElOKEVOVU0sIE4sIEMsIFQsIExULCBCLCBGLCBOQSwgQVQsIElNLCBDT05EKSBFTlVNLAorZW51bSBidWlsdF9pbl9mdW5jdGlvbgoreworI2luY2x1ZGUgImJ1aWx0aW5zLmRlZiIKKworICAvKiBDb21wbGV4IGRpdmlzaW9uIHJvdXRpbmVzIGluIGxpYmdjYy4gIFRoZXNlIGFyZSBkb25lIHZpYSBidWlsdGlucworICAgICBiZWNhdXNlIGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlIGNhbid0IGhhbmRsZSBjb21wbGV4IHZhbHVlcy4gICovCisgIEJVSUxUX0lOX0NPTVBMRVhfTVVMX01JTiwKKyAgQlVJTFRfSU5fQ09NUExFWF9NVUxfTUFYCisgICAgPSBCVUlMVF9JTl9DT01QTEVYX01VTF9NSU4KKyAgICAgICsgTUFYX01PREVfQ09NUExFWF9GTE9BVAorICAgICAgLSBNSU5fTU9ERV9DT01QTEVYX0ZMT0FULAorCisgIEJVSUxUX0lOX0NPTVBMRVhfRElWX01JTiwKKyAgQlVJTFRfSU5fQ09NUExFWF9ESVZfTUFYCisgICAgPSBCVUlMVF9JTl9DT01QTEVYX0RJVl9NSU4KKyAgICAgICsgTUFYX01PREVfQ09NUExFWF9GTE9BVAorICAgICAgLSBNSU5fTU9ERV9DT01QTEVYX0ZMT0FULAorCisgIC8qIFVwcGVyIGJvdW5kIG9uIG5vbi1sYW5ndWFnZS1zcGVjaWZpYyBidWlsdGlucy4gICovCisgIEVORF9CVUlMVElOUworfTsKKyN1bmRlZiBERUZfQlVJTFRJTgorCisvKiBOYW1lcyBmb3IgdGhlIGFib3ZlLiAgKi8KK2V4dGVybiBjb25zdCBjaGFyICogYnVpbHRfaW5fbmFtZXNbKGludCkgRU5EX0JVSUxUSU5TXTsKKworLyogSGVscGVyIG1hY3JvcyBmb3IgbWF0aCBidWlsdGlucy4gICovCisKKyNkZWZpbmUgQlVJTFRJTl9FWFAxMF9QKEZOKSBcCisgKChGTikgPT0gQlVJTFRfSU5fRVhQMTAgfHwgKEZOKSA9PSBCVUlMVF9JTl9FWFAxMEYgfHwgKEZOKSA9PSBCVUlMVF9JTl9FWFAxMEwgXAorICB8fCAoRk4pID09IEJVSUxUX0lOX1BPVzEwIHx8IChGTikgPT0gQlVJTFRfSU5fUE9XMTBGIHx8IChGTikgPT0gQlVJTFRfSU5fUE9XMTBMKQorCisjZGVmaW5lIEJVSUxUSU5fRVhQT05FTlRfUChGTikgKEJVSUxUSU5fRVhQMTBfUCAoRk4pIFwKKyAgfHwgKEZOKSA9PSBCVUlMVF9JTl9FWFAgfHwgKEZOKSA9PSBCVUlMVF9JTl9FWFBGIHx8IChGTikgPT0gQlVJTFRfSU5fRVhQTCBcCisgIHx8IChGTikgPT0gQlVJTFRfSU5fRVhQMiB8fCAoRk4pID09IEJVSUxUX0lOX0VYUDJGIHx8IChGTikgPT0gQlVJTFRfSU5fRVhQMkwpCisKKyNkZWZpbmUgQlVJTFRJTl9TUVJUX1AoRk4pIFwKKyAoKEZOKSA9PSBCVUlMVF9JTl9TUVJUIHx8IChGTikgPT0gQlVJTFRfSU5fU1FSVEYgfHwgKEZOKSA9PSBCVUlMVF9JTl9TUVJUTCkKKworI2RlZmluZSBCVUlMVElOX0NCUlRfUChGTikgXAorICgoRk4pID09IEJVSUxUX0lOX0NCUlQgfHwgKEZOKSA9PSBCVUlMVF9JTl9DQlJURiB8fCAoRk4pID09IEJVSUxUX0lOX0NCUlRMKQorCisjZGVmaW5lIEJVSUxUSU5fUk9PVF9QKEZOKSAoQlVJTFRJTl9TUVJUX1AgKEZOKSB8fCBCVUlMVElOX0NCUlRfUCAoRk4pKQorCisjZGVmaW5lIENBU0VfRkxUX0ZOKEZOKSBjYXNlIEZOOiBjYXNlIEZOIyNGOiBjYXNlIEZOIyNMCisjZGVmaW5lIENBU0VfRkxUX0ZOX1JFRU5UKEZOKSBjYXNlIEZOIyNfUjogY2FzZSBGTiMjRl9SOiBjYXNlIEZOIyNMX1IKKyNkZWZpbmUgQ0FTRV9JTlRfRk4oRk4pIGNhc2UgRk46IGNhc2UgRk4jI0w6IGNhc2UgRk4jI0xMCisMCisvKiBJbiBhbiBPTVBfQ0xBVVNFIG5vZGUuICAqLworCisvKiBOdW1iZXIgb2Ygb3BlcmFuZHMgYW5kIG5hbWVzIGZvciBlYWNoIGNsYXVzZS4gICovCitleHRlcm4gdW5zaWduZWQgY29uc3QgY2hhciBvbXBfY2xhdXNlX251bV9vcHNbXTsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3Qgb21wX2NsYXVzZV9jb2RlX25hbWVbXTsKKworLyogQ2xhdXNlIGNvZGVzLiAgRG8gbm90IHJlb3JkZXIsIGFzIHRoaXMgaXMgdXNlZCB0byBpbmRleCBpbnRvIHRoZSB0YWJsZXMKKyAgIG9tcF9jbGF1c2VfbnVtX29wcyBhbmQgb21wX2NsYXVzZV9jb2RlX25hbWUuICAqLworZW51bSBvbXBfY2xhdXNlX2NvZGUKK3sKKyAgLyogQ2xhdXNlIHplcm8gaXMgc3BlY2lhbC1jYXNlZCBpbnNpZGUgdGhlIHBhcnNlcgorICAgICAoY19wYXJzZXJfb21wX3ZhcmlhYmxlX2xpc3QpLiAgKi8KKyAgT01QX0NMQVVTRV9FUlJPUiA9IDAsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogcHJpdmF0ZSAodmFyaWFibGVfbGlzdCkuICAqLworICBPTVBfQ0xBVVNFX1BSSVZBVEUsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogc2hhcmVkICh2YXJpYWJsZV9saXN0KS4gICovCisgIE9NUF9DTEFVU0VfU0hBUkVELAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IGZpcnN0cHJpdmF0ZSAodmFyaWFibGVfbGlzdCkuICAqLworICBPTVBfQ0xBVVNFX0ZJUlNUUFJJVkFURSwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBsYXN0cHJpdmF0ZSAodmFyaWFibGVfbGlzdCkuICAqLworICBPTVBfQ0xBVVNFX0xBU1RQUklWQVRFLAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IHJlZHVjdGlvbiAob3BlcmF0b3I6dmFyaWFibGVfbGlzdCkuCisgICAgIE9NUF9DTEFVU0VfUkVEVUNUSU9OX0NPREU6IFRoZSB0cmVlX2NvZGUgb2YgdGhlIG9wZXJhdG9yLgorICAgICBPcGVyYW5kIDE6IE9NUF9DTEFVU0VfUkVEVUNUSU9OX0lOSVQ6IFN0bXQtbGlzdCB0byBpbml0aWFsaXplIHRoZSB2YXIuCisgICAgIE9wZXJhbmQgMjogT01QX0NMQVVTRV9SRURVQ1RJT05fTUVSR0U6IFN0bXQtbGlzdCB0byBtZXJnZSBwcml2YXRlIHZhcgorICAgICAgICAgICAgICAgIGludG8gdGhlIHNoYXJlZCBvbmUuCisgICAgIE9wZXJhbmQgMzogT01QX0NMQVVTRV9SRURVQ1RJT05fUExBQ0VIT0xERVI6IEEgZHVtbXkgVkFSX0RFQ0wKKyAgICAgICAgICAgICAgICBwbGFjZWhvbGRlciB1c2VkIGluIE9NUF9DTEFVU0VfUkVEVUNUSU9OX3tJTklULE1FUkdFfS4gICovCisgIE9NUF9DTEFVU0VfUkVEVUNUSU9OLAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IGNvcHlpbiAodmFyaWFibGVfbGlzdCkuICAqLworICBPTVBfQ0xBVVNFX0NPUFlJTiwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBjb3B5cHJpdmF0ZSAodmFyaWFibGVfbGlzdCkuICAqLworICBPTVBfQ0xBVVNFX0NPUFlQUklWQVRFLAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IGlmIChzY2FsYXItZXhwcmVzc2lvbikuICAqLworICBPTVBfQ0xBVVNFX0lGLAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IG51bV90aHJlYWRzIChpbnRlZ2VyLWV4cHJlc3Npb24pLiAgKi8KKyAgT01QX0NMQVVTRV9OVU1fVEhSRUFEUywKKworICAvKiBPcGVuTVAgY2xhdXNlOiBzY2hlZHVsZS4gICovCisgIE9NUF9DTEFVU0VfU0NIRURVTEUsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogbm93YWl0LiAgKi8KKyAgT01QX0NMQVVTRV9OT1dBSVQsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogb3JkZXJlZC4gICovCisgIE9NUF9DTEFVU0VfT1JERVJFRCwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBkZWZhdWx0LiAgKi8KKyAgT01QX0NMQVVTRV9ERUZBVUxULAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IGNvbGxhcHNlIChjb25zdGFudC1pbnRlZ2VyLWV4cHJlc3Npb24pLiAgKi8KKyAgT01QX0NMQVVTRV9DT0xMQVBTRSwKKworICAvKiBPcGVuTVAgY2xhdXNlOiB1bnRpZWQuICAqLworICBPTVBfQ0xBVVNFX1VOVElFRCwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBmaW5hbCAoc2NhbGFyLWV4cHJlc3Npb24pLiAgKi8KKyAgT01QX0NMQVVTRV9GSU5BTCwKKworICAvKiBPcGVuTVAgY2xhdXNlOiBtZXJnZWFibGUuICAqLworICBPTVBfQ0xBVVNFX01FUkdFQUJMRQorfTsKKwwKKy8qIFRoZSBkZWZpbml0aW9uIG9mIHRyZWUgbm9kZXMgZmlsbHMgdGhlIG5leHQgc2V2ZXJhbCBwYWdlcy4gICovCisKKy8qIEEgdHJlZSBub2RlIGNhbiByZXByZXNlbnQgYSBkYXRhIHR5cGUsIGEgdmFyaWFibGUsIGFuIGV4cHJlc3Npb24KKyAgIG9yIGEgc3RhdGVtZW50LiAgRWFjaCBub2RlIGhhcyBhIFRSRUVfQ09ERSB3aGljaCBzYXlzIHdoYXQga2luZCBvZgorICAgdGhpbmcgaXQgcmVwcmVzZW50cy4gIFNvbWUgY29tbW9uIGNvZGVzIGFyZToKKyAgIElOVEVHRVJfVFlQRSAtLSByZXByZXNlbnRzIGEgdHlwZSBvZiBpbnRlZ2Vycy4KKyAgIEFSUkFZX1RZUEUgLS0gcmVwcmVzZW50cyBhIHR5cGUgb2YgcG9pbnRlci4KKyAgIFZBUl9ERUNMIC0tIHJlcHJlc2VudHMgYSBkZWNsYXJlZCB2YXJpYWJsZS4KKyAgIElOVEVHRVJfQ1NUIC0tIHJlcHJlc2VudHMgYSBjb25zdGFudCBpbnRlZ2VyIHZhbHVlLgorICAgUExVU19FWFBSIC0tIHJlcHJlc2VudHMgYSBzdW0gKGFuIGV4cHJlc3Npb24pLgorCisgICBBcyBmb3IgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBub2RlOiB0aGVyZSBhcmUgc29tZSBmaWVsZHMKKyAgIHRoYXQgYWxsIG5vZGVzIHNoYXJlLiAgRWFjaCBUUkVFX0NPREUgaGFzIHZhcmlvdXMgc3BlY2lhbC1wdXJwb3NlCisgICBmaWVsZHMgYXMgd2VsbC4gIFRoZSBmaWVsZHMgb2YgYSBub2RlIGFyZSBuZXZlciBhY2Nlc3NlZCBkaXJlY3RseSwKKyAgIGFsd2F5cyB0aHJvdWdoIGFjY2Vzc29yIG1hY3Jvcy4gICovCisKKy8qIEV2ZXJ5IGtpbmQgb2YgdHJlZSBub2RlIHN0YXJ0cyB3aXRoIHRoaXMgc3RydWN0dXJlLAorICAgc28gYWxsIG5vZGVzIGhhdmUgdGhlc2UgZmllbGRzLgorCisgICBTZWUgdGhlIGFjY2Vzc29yIG1hY3JvcywgZGVmaW5lZCBiZWxvdywgZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlCisgICBmaWVsZHMsIGFuZCB0aGUgdGFibGUgYmVsb3cgd2hpY2ggY29ubmVjdHMgdGhlIGZpZWxkcyBhbmQgdGhlCisgICBhY2Nlc3NvciBtYWNyb3MuICAqLworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2Jhc2UgeworICBFTlVNX0JJVEZJRUxEKHRyZWVfY29kZSkgY29kZSA6IDE2OworCisgIHVuc2lnbmVkIHNpZGVfZWZmZWN0c19mbGFnIDogMTsKKyAgdW5zaWduZWQgY29uc3RhbnRfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGFkZHJlc3NhYmxlX2ZsYWcgOiAxOworICB1bnNpZ25lZCB2b2xhdGlsZV9mbGFnIDogMTsKKyAgdW5zaWduZWQgcmVhZG9ubHlfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGFzbV93cml0dGVuX2ZsYWc6IDE7CisgIHVuc2lnbmVkIG5vd2FybmluZ19mbGFnIDogMTsKKyAgdW5zaWduZWQgdmlzaXRlZCA6IDE7CisKKyAgdW5zaWduZWQgdXNlZF9mbGFnIDogMTsKKyAgdW5zaWduZWQgbm90aHJvd19mbGFnIDogMTsKKyAgdW5zaWduZWQgc3RhdGljX2ZsYWcgOiAxOworICB1bnNpZ25lZCBwdWJsaWNfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHByaXZhdGVfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHByb3RlY3RlZF9mbGFnIDogMTsKKyAgdW5zaWduZWQgZGVwcmVjYXRlZF9mbGFnIDogMTsKKyAgdW5zaWduZWQgZGVmYXVsdF9kZWZfZmxhZyA6IDE7CisKKyAgdW5pb24geworICAgIC8qIFRoZSBiaXRzIGluIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aAorICAgICAgIGFjY2Vzc29yIG1hY3JvcyB0aGF0IGNvbnN0cmFpbiBpbnB1dHMgd2l0aCB0cmVlIGNoZWNraW5nLiAgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgbGFuZ19mbGFnXzAgOiAxOworICAgICAgdW5zaWduZWQgbGFuZ19mbGFnXzEgOiAxOworICAgICAgdW5zaWduZWQgbGFuZ19mbGFnXzIgOiAxOworICAgICAgdW5zaWduZWQgbGFuZ19mbGFnXzMgOiAxOworICAgICAgdW5zaWduZWQgbGFuZ19mbGFnXzQgOiAxOworICAgICAgdW5zaWduZWQgbGFuZ19mbGFnXzUgOiAxOworICAgICAgdW5zaWduZWQgbGFuZ19mbGFnXzYgOiAxOworICAgICAgdW5zaWduZWQgc2F0dXJhdGluZ19mbGFnIDogMTsKKworICAgICAgdW5zaWduZWQgdW5zaWduZWRfZmxhZyA6IDE7CisgICAgICB1bnNpZ25lZCBwYWNrZWRfZmxhZyA6IDE7CisgICAgICB1bnNpZ25lZCB1c2VyX2FsaWduIDogMTsKKyAgICAgIHVuc2lnbmVkIG5hbWVsZXNzX2ZsYWcgOiAxOworICAgICAgdW5zaWduZWQgc3BhcmUwIDogNDsKKworICAgICAgdW5zaWduZWQgc3BhcmUxIDogODsKKworICAgICAgLyogVGhpcyBmaWVsZCBpcyBvbmx5IHVzZWQgd2l0aCBUUkVFX1RZUEUgbm9kZXM7IHRoZSBvbmx5IHJlYXNvbiBpdCBpcworCSBwcmVzZW50IGluIHRyZWVfYmFzZSBpbnN0ZWFkIG9mIHRyZWVfdHlwZSBpcyB0byBzYXZlIHNwYWNlLiAgVGhlIHNpemUKKwkgb2YgdGhlIGZpZWxkIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWRkcl9zcGFjZV90IHZhbHVlcy4gICovCisgICAgICB1bnNpZ25lZCBhZGRyZXNzX3NwYWNlIDogODsKKyAgICB9IGJpdHM7CisgICAgLyogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHByZXNlbnQgaW4gdHJlZV9iYXNlIHRvIHNhdmUgc3BhY2UuICBUaGUKKyAgICAgICBub2RlcyB1c2luZyB0aGVtIGRvIG5vdCByZXF1aXJlIGFueSBvZiB0aGUgZmxhZ3MgYWJvdmUgYW5kIHNvIGNhbgorICAgICAgIG1ha2UgYmV0dGVyIHVzZSBvZiB0aGUgNC1ieXRlIHNpemVkIHdvcmQuICAqLworICAgIC8qIFZFQyBsZW5ndGguICBUaGlzIGZpZWxkIGlzIG9ubHkgdXNlZCB3aXRoIFRSRUVfVkVDLiAgKi8KKyAgICBpbnQgbGVuZ3RoOworICAgIC8qIFNTQSB2ZXJzaW9uIG51bWJlci4gIFRoaXMgZmllbGQgaXMgb25seSB1c2VkIHdpdGggU1NBX05BTUUuICAqLworICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uOworICB9IEdUWSgoc2tpcCgiIikpKSB1OworfTsKKworLyogVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgdXNlcyBvZiBlYWNoIG9mIHRoZSBhYm92ZSBmbGFncyBhbmQKKyAgIGZvciB3aGljaCB0eXBlcyBvZiBub2RlcyB0aGV5IGFyZSBkZWZpbmVkLgorCisgICBhZGRyZXNzYWJsZV9mbGFnOgorCisgICAgICAgVFJFRV9BRERSRVNTQUJMRSBpbgorICAgICAgICAgICBWQVJfREVDTCwgUEFSTV9ERUNMLCBSRVNVTFRfREVDTCwgRlVOQ1RJT05fREVDTCwgTEFCRUxfREVDTAorICAgICAgICAgICBTU0FfTkFNRQorICAgICAgICAgICBhbGwgdHlwZXMKKyAgICAgICAgICAgQ09OU1RSVUNUT1IsIElERU5USUZJRVJfTk9ERQorICAgICAgICAgICBTVE1UX0VYUFIKKworICAgICAgIENBTExfRVhQUl9UQUlMQ0FMTCBpbgorICAgICAgICAgICBDQUxMX0VYUFIKKworICAgICAgIENBU0VfTE9XX1NFRU4gaW4KKyAgICAgICAgICAgQ0FTRV9MQUJFTF9FWFBSCisKKyAgICAgICBQUkVESUNUX0VYUFJfT1VUQ09NRSBpbgorCSAgIFBSRURJQ1RfRVhQUgorCisgICBzdGF0aWNfZmxhZzoKKworICAgICAgIFRSRUVfU1RBVElDIGluCisgICAgICAgICAgIFZBUl9ERUNMLCBGVU5DVElPTl9ERUNMCisgICAgICAgICAgIENPTlNUUlVDVE9SCisKKyAgICAgICBUUkVFX05PX1RSQU1QT0xJTkUgaW4KKyAgICAgICAgICAgQUREUl9FWFBSCisKKyAgICAgICBCSU5GT19WSVJUVUFMX1AgaW4KKyAgICAgICAgICAgVFJFRV9CSU5GTworCisgICAgICAgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRCBpbgorICAgICAgICAgICBJREVOVElGSUVSX05PREUKKworICAgICAgIENMRUFOVVBfRUhfT05MWSBpbgorICAgICAgICAgICBUQVJHRVRfRVhQUiwgV0lUSF9DTEVBTlVQX0VYUFIKKworICAgICAgIFRSWV9DQVRDSF9JU19DTEVBTlVQIGluCisgICAgICAgICAgIFRSWV9DQVRDSF9FWFBSCisKKyAgICAgICBBU01fSU5QVVRfUCBpbgorICAgICAgICAgICBBU01fRVhQUgorCisgICAgICAgVFlQRV9SRUZfQ0FOX0FMSUFTX0FMTCBpbgorICAgICAgICAgICBQT0lOVEVSX1RZUEUsIFJFRkVSRU5DRV9UWVBFCisKKyAgICAgICBDQVNFX0hJR0hfU0VFTiBpbgorICAgICAgICAgICBDQVNFX0xBQkVMX0VYUFIKKworICAgICAgIEVOVU1fSVNfU0NPUEVEIGluCisJICAgRU5VTUVSQUxfVFlQRQorCisgICAgICAgVFJBTlNBQ1RJT05fRVhQUl9PVVRFUiBpbgorCSAgIFRSQU5TQUNUSU9OX0VYUFIKKworICAgcHVibGljX2ZsYWc6CisKKyAgICAgICBUUkVFX09WRVJGTE9XIGluCisgICAgICAgICAgIElOVEVHRVJfQ1NULCBSRUFMX0NTVCwgQ09NUExFWF9DU1QsIFZFQ1RPUl9DU1QKKworICAgICAgIFRSRUVfUFVCTElDIGluCisgICAgICAgICAgIFZBUl9ERUNMLCBGVU5DVElPTl9ERUNMCisgICAgICAgICAgIElERU5USUZJRVJfTk9ERQorCisgICAgICAgQVNNX1ZPTEFUSUxFX1AgaW4KKyAgICAgICAgICAgQVNNX0VYUFIKKworICAgICAgIENBTExfRVhQUl9WQV9BUkdfUEFDSyBpbgorICAgICAgICAgICBDQUxMX0VYUFIKKworICAgICAgIFRZUEVfQ0FDSEVEX1ZBTFVFU19QIGluCisgICAgICAgICAgIGFsbCB0eXBlcworCisgICAgICAgU0FWRV9FWFBSX1JFU09MVkVEX1AgaW4KKyAgICAgICAgICAgU0FWRV9FWFBSCisKKyAgICAgICBPTVBfQ0xBVVNFX0xBU1RQUklWQVRFX0ZJUlNUUFJJVkFURSBpbgorICAgICAgICAgICBPTVBfQ0xBVVNFX0xBU1RQUklWQVRFCisKKyAgICAgICBPTVBfQ0xBVVNFX1BSSVZBVEVfREVCVUcgaW4KKyAgICAgICAgICAgT01QX0NMQVVTRV9QUklWQVRFCisKKyAgICAgICBUUkFOU0FDVElPTl9FWFBSX1JFTEFYRUQgaW4KKwkgICBUUkFOU0FDVElPTl9FWFBSCisKKyAgIHByaXZhdGVfZmxhZzoKKworICAgICAgIFRSRUVfUFJJVkFURSBpbgorICAgICAgICAgICBhbGwgZGVjbHMKKworICAgICAgIENBTExfRVhQUl9SRVRVUk5fU0xPVF9PUFQgaW4KKyAgICAgICAgICAgQ0FMTF9FWFBSCisKKyAgICAgICBPTVBfU0VDVElPTl9MQVNUIGluCisgICAgICAgICAgIE9NUF9TRUNUSU9OCisKKyAgICAgICBPTVBfUEFSQUxMRUxfQ09NQklORUQgaW4KKyAgICAgICAgICAgT01QX1BBUkFMTEVMCisKKyAgICAgICBPTVBfQ0xBVVNFX1BSSVZBVEVfT1VURVJfUkVGIGluCisJICAgT01QX0NMQVVTRV9QUklWQVRFCisKKyAgICAgICBUWVBFX1JFRl9JU19SVkFMVUUgaW4KKwkgICBSRUZFUkVOQ0VfVFlQRQorCisgICAgICAgRU5VTV9JU19PUEFRVUUgaW4KKwkgICBFTlVNRVJBTF9UWVBFCisKKyAgIHByb3RlY3RlZF9mbGFnOgorCisgICAgICAgVFJFRV9QUk9URUNURUQgaW4KKyAgICAgICAgICAgQkxPQ0sKKyAgICAgICAgICAgYWxsIGRlY2xzCisKKyAgICAgICBDQUxMX0ZST01fVEhVTktfUCBhbmQKKyAgICAgICBDQUxMX0FMTE9DQV9GT1JfVkFSX1AgaW4KKyAgICAgICAgICAgQ0FMTF9FWFBSCisKKyAgIHNpZGVfZWZmZWN0c19mbGFnOgorCisgICAgICAgVFJFRV9TSURFX0VGRkVDVFMgaW4KKyAgICAgICAgICAgYWxsIGV4cHJlc3Npb25zCisgICAgICAgICAgIGFsbCBkZWNscworICAgICAgICAgICBhbGwgY29uc3RhbnRzCisKKyAgICAgICBGT1JDRURfTEFCRUwgaW4KKyAgICAgICAgICAgTEFCRUxfREVDTAorCisgICB2b2xhdGlsZV9mbGFnOgorCisgICAgICAgVFJFRV9USElTX1ZPTEFUSUxFIGluCisgICAgICAgICAgIGFsbCBleHByZXNzaW9ucworICAgICAgICAgICBhbGwgZGVjbHMKKworICAgICAgIFRZUEVfVk9MQVRJTEUgaW4KKyAgICAgICAgICAgYWxsIHR5cGVzCisKKyAgIHJlYWRvbmx5X2ZsYWc6CisKKyAgICAgICBUUkVFX1JFQURPTkxZIGluCisgICAgICAgICAgIGFsbCBleHByZXNzaW9ucworICAgICAgICAgICBhbGwgZGVjbHMKKworICAgICAgIFRZUEVfUkVBRE9OTFkgaW4KKyAgICAgICAgICAgYWxsIHR5cGVzCisKKyAgIGNvbnN0YW50X2ZsYWc6CisKKyAgICAgICBUUkVFX0NPTlNUQU5UIGluCisgICAgICAgICAgIGFsbCBleHByZXNzaW9ucworICAgICAgICAgICBhbGwgZGVjbHMKKyAgICAgICAgICAgYWxsIGNvbnN0YW50cworCisgICAgICAgVFlQRV9TSVpFU19HSU1QTElGSUVEIGluCisgICAgICAgICAgIGFsbCB0eXBlcworCisgICB1bnNpZ25lZF9mbGFnOgorCisgICAgICAgVFlQRV9VTlNJR05FRCBpbgorICAgICAgICAgICBhbGwgdHlwZXMKKworICAgICAgIERFQ0xfVU5TSUdORUQgaW4KKyAgICAgICAgICAgYWxsIGRlY2xzCisKKyAgIGFzbV93cml0dGVuX2ZsYWc6CisKKyAgICAgICBUUkVFX0FTTV9XUklUVEVOIGluCisgICAgICAgICAgIFZBUl9ERUNMLCBGVU5DVElPTl9ERUNMLCBUWVBFX0RFQ0wKKyAgICAgICAgICAgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIFFVQUxfVU5JT05fVFlQRQorICAgICAgICAgICBCTE9DSywgU1RSSU5HX0NTVAorCisgICAgICAgU1NBX05BTUVfT0NDVVJTX0lOX0FCTk9STUFMX1BISSBpbgorICAgICAgICAgICBTU0FfTkFNRQorCisgICB1c2VkX2ZsYWc6CisKKyAgICAgICBUUkVFX1VTRUQgaW4KKyAgICAgICAgICAgYWxsIGV4cHJlc3Npb25zCisgICAgICAgICAgIGFsbCBkZWNscworICAgICAgICAgICBJREVOVElGSUVSX05PREUKKworICAgbm90aHJvd19mbGFnOgorCisgICAgICAgVFJFRV9OT1RIUk9XIGluCisgICAgICAgICAgIENBTExfRVhQUgorICAgICAgICAgICBGVU5DVElPTl9ERUNMCisKKyAgICAgICBUWVBFX0FMSUdOX09LIGluCisgICAgICAgICAgIGFsbCB0eXBlcworCisgICAgICAgVFJFRV9USElTX05PVFJBUCBpbgorICAgICAgICAgIElORElSRUNUX1JFRiwgTUVNX1JFRiwgVEFSR0VUX01FTV9SRUYsIEFSUkFZX1JFRiwgQVJSQVlfUkFOR0VfUkVGCisKKyAgICAgICBTU0FfTkFNRV9JTl9GUkVFTElTVCBpbgorICAgICAgICAgIFNTQV9OQU1FCisKKyAgIGRlcHJlY2F0ZWRfZmxhZzoKKworICAgICAgIFRSRUVfREVQUkVDQVRFRCBpbgorICAgICAgICAgICBhbGwgZGVjbHMKKwkgICBhbGwgdHlwZXMKKworICAgICAgIElERU5USUZJRVJfVFJBTlNQQVJFTlRfQUxJQVMgaW4KKyAgICAgICAgICAgSURFTlRJRklFUl9OT0RFCisKKyAgIHZpc2l0ZWQ6CisKKyAgICAgICBUUkVFX1ZJU0lURUQgaW4KKyAgICAgICAgICAgYWxsIHRyZWVzICh1c2VkIGxpYmVyYWxseSBieSBtYW55IHBhc3NlcykKKworICAgc2F0dXJhdGluZ19mbGFnOgorCisgICAgICAgVFlQRV9TQVRVUkFUSU5HIGluCisgICAgICAgICAgIGFsbCB0eXBlcworCisgICAgICAgVkFSX0RFQ0xfSVNfVklSVFVBTF9PUEVSQU5EIGluCisJICAgVkFSX0RFQ0wKKworICAgbm93YXJuaW5nX2ZsYWc6CisKKyAgICAgICBUUkVFX05PX1dBUk5JTkcgaW4KKyAgICAgICAgICAgYWxsIGV4cHJlc3Npb25zCisgICAgICAgICAgIGFsbCBkZWNscworCisgICAgICAgVFlQRV9BUlRJRklDSUFMIGluCisgICAgICAgICAgIGFsbCB0eXBlcworCisgICBkZWZhdWx0X2RlZl9mbGFnOgorCisgICAgICAgVFlQRV9WRUNUT1JfT1BBUVVFIGluCisJICAgVkVDVE9SX1RZUEUKKworICAgICAgIFNTQV9OQU1FX0lTX0RFRkFVTFRfREVGIGluCisgICAgICAgICAgIFNTQV9OQU1FCisKKyAgICAgICBERUNMX05PTkxPQ0FMX0ZSQU1FIGluCisJICAgVkFSX0RFQ0wKKyovCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdHlwZWQgeworICBzdHJ1Y3QgdHJlZV9iYXNlIGJhc2U7CisgIHRyZWUgdHlwZTsKK307CisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfY29tbW9uIHsKKyAgc3RydWN0IHRyZWVfdHlwZWQgdHlwZWQ7CisgIHRyZWUgY2hhaW47Cit9OworCisjdW5kZWYgREVGVFJFRVNUUlVDVAorI2RlZmluZSBERUZUUkVFU1RSVUNUKEVOVU0sIE5BTUUpIEVOVU0sCitlbnVtIHRyZWVfbm9kZV9zdHJ1Y3R1cmVfZW51bSB7CisjaW5jbHVkZSAidHJlZXN0cnVjdC5kZWYiCisgIExBU1RfVFNfRU5VTQorfTsKKyN1bmRlZiBERUZUUkVFU1RSVUNUCisKKy8qIERlZmluZSBhY2Nlc3NvcnMgZm9yIHRoZSBmaWVsZHMgdGhhdCBhbGwgdHJlZSBub2RlcyBoYXZlCisgICAodGhvdWdoIHNvbWUgZmllbGRzIGFyZSBub3QgdXNlZCBmb3IgYWxsIGtpbmRzIG9mIG5vZGVzKS4gICovCisKKy8qIFRoZSB0cmVlLWNvZGUgc2F5cyB3aGF0IGtpbmQgb2Ygbm9kZSBpdCBpcy4KKyAgIENvZGVzIGFyZSBkZWZpbmVkIGluIHRyZWUuZGVmLiAgKi8KKyNkZWZpbmUgVFJFRV9DT0RFKE5PREUpICgoZW51bSB0cmVlX2NvZGUpIChOT0RFKS0+YmFzZS5jb2RlKQorI2RlZmluZSBUUkVFX1NFVF9DT0RFKE5PREUsIFZBTFVFKSAoKE5PREUpLT5iYXNlLmNvZGUgPSAoVkFMVUUpKQorCisvKiBXaGVuIGNoZWNraW5nIGlzIGVuYWJsZWQsIGVycm9ycyB3aWxsIGJlIGdlbmVyYXRlZCBpZiBhIHRyZWUgbm9kZQorICAgaXMgYWNjZXNzZWQgaW5jb3JyZWN0bHkuIFRoZSBtYWNyb3MgZGllIHdpdGggYSBmYXRhbCBlcnJvci4gICovCisjaWYgZGVmaW5lZCBFTkFCTEVfVFJFRV9DSEVDS0lORyAmJiAoR0NDX1ZFUlNJT04gPj0gMjAwNykKKworI2RlZmluZSBUUkVFX0NIRUNLKFQsIENPREUpIFwKKyh0cmVlX2NoZWNrICgoVCksIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAoQ09ERSkpKQorCisjZGVmaW5lIFRSRUVfTk9UX0NIRUNLKFQsIENPREUpIFwKKyh0cmVlX25vdF9jaGVjayAoKFQpLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgKENPREUpKSkKKworI2RlZmluZSBUUkVFX0NIRUNLMihULCBDT0RFMSwgQ09ERTIpIFwKKyh0cmVlX2NoZWNrMiAoKFQpLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgKENPREUxKSwgKENPREUyKSkpCisKKyNkZWZpbmUgVFJFRV9OT1RfQ0hFQ0syKFQsIENPREUxLCBDT0RFMikgXAorKHRyZWVfbm90X2NoZWNrMiAoKFQpLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgKENPREUxKSwgKENPREUyKSkpCisKKyNkZWZpbmUgVFJFRV9DSEVDSzMoVCwgQ09ERTEsIENPREUyLCBDT0RFMykgXAorKHRyZWVfY2hlY2szICgoVCksIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCAoQ09ERTEpLCAoQ09ERTIpLCAoQ09ERTMpKSkKKworI2RlZmluZSBUUkVFX05PVF9DSEVDSzMoVCwgQ09ERTEsIENPREUyLCBDT0RFMykgXAorKHRyZWVfbm90X2NoZWNrMyAoKFQpLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDT0RFMSksIChDT0RFMiksIChDT0RFMykpKQorCisjZGVmaW5lIFRSRUVfQ0hFQ0s0KFQsIENPREUxLCBDT0RFMiwgQ09ERTMsIENPREU0KSBcCisodHJlZV9jaGVjazQgKChUKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChDT0RFMSksIChDT0RFMiksIChDT0RFMyksIChDT0RFNCkpKQorCisjZGVmaW5lIFRSRUVfTk9UX0NIRUNLNChULCBDT0RFMSwgQ09ERTIsIENPREUzLCBDT0RFNCkgXAorKHRyZWVfbm90X2NoZWNrNCAoKFQpLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDT0RFMSksIChDT0RFMiksIChDT0RFMyksIChDT0RFNCkpKQorCisjZGVmaW5lIFRSRUVfQ0hFQ0s1KFQsIENPREUxLCBDT0RFMiwgQ09ERTMsIENPREU0LCBDT0RFNSkgXAorKHRyZWVfY2hlY2s1ICgoVCksIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ09ERTEpLCAoQ09ERTIpLCAoQ09ERTMpLCAoQ09ERTQpLCAoQ09ERTUpKSkKKworI2RlZmluZSBUUkVFX05PVF9DSEVDSzUoVCwgQ09ERTEsIENPREUyLCBDT0RFMywgQ09ERTQsIENPREU1KSBcCisodHJlZV9ub3RfY2hlY2s1ICgoVCksIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENPREUxKSwgKENPREUyKSwgKENPREUzKSwgKENPREU0KSwgKENPREU1KSkpCisKKyNkZWZpbmUgQ09OVEFJTlNfU1RSVUNUX0NIRUNLKFQsIFNUUlVDVCkgXAorKGNvbnRhaW5zX3N0cnVjdF9jaGVjayAoKFQpLCAoU1RSVUNUKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pKQorCisjZGVmaW5lIFRSRUVfQ0xBU1NfQ0hFQ0soVCwgQ0xBU1MpIFwKKyh0cmVlX2NsYXNzX2NoZWNrICgoVCksIChDTEFTUyksIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKSkKKworI2RlZmluZSBUUkVFX1JBTkdFX0NIRUNLKFQsIENPREUxLCBDT0RFMikgXAorKHRyZWVfcmFuZ2VfY2hlY2sgKChUKSwgKENPREUxKSwgKENPREUyKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pKQorCisjZGVmaW5lIE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyhULCBDT0RFKSBcCisob21wX2NsYXVzZV9zdWJjb2RlX2NoZWNrICgoVCksIChDT0RFKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pKQorCisjZGVmaW5lIE9NUF9DTEFVU0VfUkFOR0VfQ0hFQ0soVCwgQ09ERTEsIENPREUyKSBcCisob21wX2NsYXVzZV9yYW5nZV9jaGVjayAoKFQpLCAoQ09ERTEpLCAoQ09ERTIpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKSkKKworLyogVGhlc2UgY2hlY2tzIGhhdmUgdG8gYmUgc3BlY2lhbCBjYXNlZC4gICovCisjZGVmaW5lIEVYUFJfQ0hFQ0soVCkgXAorKGV4cHJfY2hlY2sgKChUKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pKQorCisvKiBUaGVzZSBjaGVja3MgaGF2ZSB0byBiZSBzcGVjaWFsIGNhc2VkLiAgKi8KKyNkZWZpbmUgTk9OX1RZUEVfQ0hFQ0soVCkgXAorKG5vbl90eXBlX2NoZWNrICgoVCksIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKSkKKworI2RlZmluZSBUUkVFX1ZFQ19FTFRfQ0hFQ0soVCwgSSkgXAorKCooQ09OU1RfQ0FTVDIgKHRyZWUgKiwgdHlwZW9mIChUKSosIFwKKyAgICAgdHJlZV92ZWNfZWx0X2NoZWNrICgoVCksIChJKSwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pKSkpCisKKyNkZWZpbmUgT01QX0NMQVVTRV9FTFRfQ0hFQ0soVCwgSSkgXAorKCoob21wX2NsYXVzZV9lbHRfY2hlY2sgKChUKSwgKEkpLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXykpKQorCisvKiBTcGVjaWFsIGNoZWNrcyBmb3IgVFJFRV9PUEVSQU5Ecy4gICovCisjZGVmaW5lIFRSRUVfT1BFUkFORF9DSEVDSyhULCBJKSBcCisoKihDT05TVF9DQVNUMiAodHJlZSosIHR5cGVvZiAoVCkqLCBcCisgICAgIHRyZWVfb3BlcmFuZF9jaGVjayAoKFQpLCAoSSksIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKSkpKQorCisjZGVmaW5lIFRSRUVfT1BFUkFORF9DSEVDS19DT0RFKFQsIENPREUsIEkpIFwKKygqKHRyZWVfb3BlcmFuZF9jaGVja19jb2RlICgoVCksIChDT0RFKSwgKEkpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKSkpCisKKy8qIE5vZGVzIGFyZSBjaGFpbmVkIHRvZ2V0aGVyIGZvciBtYW55IHB1cnBvc2VzLgorICAgVHlwZXMgYXJlIGNoYWluZWQgdG9nZXRoZXIgdG8gcmVjb3JkIHRoZW0gZm9yIGJlaW5nIG91dHB1dCB0byB0aGUgZGVidWdnZXIKKyAgIChzZWUgdGhlIGZ1bmN0aW9uIGBjaGFpbl90eXBlJykuCisgICBEZWNscyBpbiB0aGUgc2FtZSBzY29wZSBhcmUgY2hhaW5lZCB0b2dldGhlciB0byByZWNvcmQgdGhlIGNvbnRlbnRzCisgICBvZiB0aGUgc2NvcGUuCisgICBTdGF0ZW1lbnQgbm9kZXMgZm9yIHN1Y2Nlc3NpdmUgc3RhdGVtZW50cyB1c2VkIHRvIGJlIGNoYWluZWQgdG9nZXRoZXIuCisgICBPZnRlbiBsaXN0cyBvZiB0aGluZ3MgYXJlIHJlcHJlc2VudGVkIGJ5IFRSRUVfTElTVCBub2RlcyB0aGF0CisgICBhcmUgY2hhaW5lZCB0b2dldGhlci4gICovCisKKyNkZWZpbmUgVFJFRV9DSEFJTihOT0RFKSBcCisoQ09OVEFJTlNfU1RSVUNUX0NIRUNLIChOT0RFLCBUU19DT01NT04pLT5jb21tb24uY2hhaW4pCisKKy8qIEluIGFsbCBub2RlcyB0aGF0IGFyZSBleHByZXNzaW9ucywgdGhpcyBpcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBleHByZXNzaW9uLgorICAgSW4gUE9JTlRFUl9UWVBFIG5vZGVzLCB0aGlzIGlzIHRoZSB0eXBlIHRoYXQgdGhlIHBvaW50ZXIgcG9pbnRzIHRvLgorICAgSW4gQVJSQVlfVFlQRSBub2RlcywgdGhpcyBpcyB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudHMuCisgICBJbiBWRUNUT1JfVFlQRSBub2RlcywgdGhpcyBpcyB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudHMuICAqLworI2RlZmluZSBUUkVFX1RZUEUoTk9ERSkgXAorKENPTlRBSU5TX1NUUlVDVF9DSEVDSyAoTk9ERSwgVFNfVFlQRUQpLT50eXBlZC50eXBlKQorCitleHRlcm4gdm9pZCB0cmVlX2NvbnRhaW5zX3N0cnVjdF9jaGVja19mYWlsZWQgKGNvbnN0X3RyZWUsCisJCQkJCSAgICAgICBjb25zdCBlbnVtIHRyZWVfbm9kZV9zdHJ1Y3R1cmVfZW51bSwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopCisgIEFUVFJJQlVURV9OT1JFVFVSTjsKKworZXh0ZXJuIHZvaWQgdHJlZV9jaGVja19mYWlsZWQgKGNvbnN0X3RyZWUsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICosCisJCQkgICAgICAgLi4uKSBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCB0cmVlX25vdF9jaGVja19mYWlsZWQgKGNvbnN0X3RyZWUsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICosCisJCQkJICAgLi4uKSBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoY29uc3RfdHJlZSwgY29uc3QgZW51bSB0cmVlX2NvZGVfY2xhc3MsCisJCQkJICAgICBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIHRyZWVfcmFuZ2VfY2hlY2tfZmFpbGVkIChjb25zdF90cmVlLCBjb25zdCBjaGFyICosIGludCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKiwgZW51bSB0cmVlX2NvZGUsCisJCQkJICAgICBlbnVtIHRyZWVfY29kZSkKKyAgICBBVFRSSUJVVEVfTk9SRVRVUk47CitleHRlcm4gdm9pZCB0cmVlX25vdF9jbGFzc19jaGVja19mYWlsZWQgKGNvbnN0X3RyZWUsCisJCQkJCSBjb25zdCBlbnVtIHRyZWVfY29kZV9jbGFzcywKKwkJCQkJIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgdHJlZV92ZWNfZWx0X2NoZWNrX2ZhaWxlZCAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgICAgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgcGhpX25vZGVfZWx0X2NoZWNrX2ZhaWxlZCAoaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwKKwkJCQkgICAgICAgaW50LCBjb25zdCBjaGFyICopCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgdHJlZV9vcGVyYW5kX2NoZWNrX2ZhaWxlZCAoaW50LCBjb25zdF90cmVlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIG9tcF9jbGF1c2VfY2hlY2tfZmFpbGVkIChjb25zdF90cmVlLCBjb25zdCBjaGFyICosIGludCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKiwgZW51bSBvbXBfY2xhdXNlX2NvZGUpCisgICAgQVRUUklCVVRFX05PUkVUVVJOOworZXh0ZXJuIHZvaWQgb21wX2NsYXVzZV9vcGVyYW5kX2NoZWNrX2ZhaWxlZCAoaW50LCBjb25zdF90cmVlLCBjb25zdCBjaGFyICosCisJCQkJICAgICAgICAgICAgIGludCwgY29uc3QgY2hhciAqKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKK2V4dGVybiB2b2lkIG9tcF9jbGF1c2VfcmFuZ2VfY2hlY2tfZmFpbGVkIChjb25zdF90cmVlLCBjb25zdCBjaGFyICosIGludCwKKwkJCSAgICAgICBjb25zdCBjaGFyICosIGVudW0gb21wX2NsYXVzZV9jb2RlLAorCQkJICAgICAgIGVudW0gb21wX2NsYXVzZV9jb2RlKQorICAgIEFUVFJJQlVURV9OT1JFVFVSTjsKKworI2Vsc2UgLyogbm90IEVOQUJMRV9UUkVFX0NIRUNLSU5HLCBvciBub3QgZ2NjICovCisKKyNkZWZpbmUgQ09OVEFJTlNfU1RSVUNUX0NIRUNLKFQsIEVOVU0pICAgICAgICAgIChUKQorI2RlZmluZSBUUkVFX0NIRUNLKFQsIENPREUpCQkJKFQpCisjZGVmaW5lIFRSRUVfTk9UX0NIRUNLKFQsIENPREUpCQkJKFQpCisjZGVmaW5lIFRSRUVfQ0hFQ0syKFQsIENPREUxLCBDT0RFMikJCShUKQorI2RlZmluZSBUUkVFX05PVF9DSEVDSzIoVCwgQ09ERTEsIENPREUyKQkoVCkKKyNkZWZpbmUgVFJFRV9DSEVDSzMoVCwgQ09ERTEsIENPREUyLCBDT0RFMykJKFQpCisjZGVmaW5lIFRSRUVfTk9UX0NIRUNLMyhULCBDT0RFMSwgQ09ERTIsIENPREUzKQkoVCkKKyNkZWZpbmUgVFJFRV9DSEVDSzQoVCwgQ09ERTEsIENPREUyLCBDT0RFMywgQ09ERTQpIChUKQorI2RlZmluZSBUUkVFX05PVF9DSEVDSzQoVCwgQ09ERTEsIENPREUyLCBDT0RFMywgQ09ERTQpIChUKQorI2RlZmluZSBUUkVFX0NIRUNLNShULCBDT0RFMSwgQ09ERTIsIENPREUzLCBDT0RFNCwgQ09ERTUpIChUKQorI2RlZmluZSBUUkVFX05PVF9DSEVDSzUoVCwgQ09ERTEsIENPREUyLCBDT0RFMywgQ09ERTQsIENPREU1KSAoVCkKKyNkZWZpbmUgVFJFRV9DTEFTU19DSEVDSyhULCBDT0RFKQkJKFQpCisjZGVmaW5lIFRSRUVfUkFOR0VfQ0hFQ0soVCwgQ09ERTEsIENPREUyKQkoVCkKKyNkZWZpbmUgRVhQUl9DSEVDSyhUKQkJCQkoVCkKKyNkZWZpbmUgTk9OX1RZUEVfQ0hFQ0soVCkJCQkoVCkKKyNkZWZpbmUgVFJFRV9WRUNfRUxUX0NIRUNLKFQsIEkpCQkoKFQpLT52ZWMuYVtJXSkKKyNkZWZpbmUgVFJFRV9PUEVSQU5EX0NIRUNLKFQsIEkpCQkoKFQpLT5leHAub3BlcmFuZHNbSV0pCisjZGVmaW5lIFRSRUVfT1BFUkFORF9DSEVDS19DT0RFKFQsIENPREUsIEkpCSgoVCktPmV4cC5vcGVyYW5kc1tJXSkKKyNkZWZpbmUgT01QX0NMQVVTRV9FTFRfQ0hFQ0soVCwgaSkJICAgICAgICAoKFQpLT5vbXBfY2xhdXNlLm9wc1tpXSkKKyNkZWZpbmUgT01QX0NMQVVTRV9SQU5HRV9DSEVDSyhULCBDT0RFMSwgQ09ERTIpCShUKQorI2RlZmluZSBPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0soVCwgQ09ERSkJKFQpCisKKyNkZWZpbmUgVFJFRV9DSEFJTihOT0RFKSAoKE5PREUpLT5jb21tb24uY2hhaW4pCisjZGVmaW5lIFRSRUVfVFlQRShOT0RFKSAoKE5PREUpLT50eXBlZC50eXBlKQorCisjZW5kaWYKKworI2RlZmluZSBUUkVFX0JMT0NLKE5PREUpCQkodHJlZV9ibG9jayAoTk9ERSkpCisjZGVmaW5lIFRSRUVfU0VUX0JMT0NLKFQsIEIpCQkodHJlZV9zZXRfYmxvY2sgKChUKSwgKEIpKSkKKworI2luY2x1ZGUgInRyZWUtY2hlY2suaCIKKworI2RlZmluZSBUWVBFX0NIRUNLKFQpCQlUUkVFX0NMQVNTX0NIRUNLIChULCB0Y2NfdHlwZSkKKyNkZWZpbmUgREVDTF9NSU5JTUFMX0NIRUNLKFQpICAgQ09OVEFJTlNfU1RSVUNUX0NIRUNLIChULCBUU19ERUNMX01JTklNQUwpCisjZGVmaW5lIERFQ0xfQ09NTU9OX0NIRUNLKFQpICAgIENPTlRBSU5TX1NUUlVDVF9DSEVDSyAoVCwgVFNfREVDTF9DT01NT04pCisjZGVmaW5lIERFQ0xfV1JUTF9DSEVDSyhUKSAgICAgIENPTlRBSU5TX1NUUlVDVF9DSEVDSyAoVCwgVFNfREVDTF9XUlRMKQorI2RlZmluZSBERUNMX1dJVEhfVklTX0NIRUNLKFQpICBDT05UQUlOU19TVFJVQ1RfQ0hFQ0sgKFQsIFRTX0RFQ0xfV0lUSF9WSVMpCisjZGVmaW5lIERFQ0xfTk9OX0NPTU1PTl9DSEVDSyhUKSBDT05UQUlOU19TVFJVQ1RfQ0hFQ0sgKFQsIFRTX0RFQ0xfTk9OX0NPTU1PTikKKyNkZWZpbmUgQ1NUX0NIRUNLKFQpCQlUUkVFX0NMQVNTX0NIRUNLIChULCB0Y2NfY29uc3RhbnQpCisjZGVmaW5lIFNUTVRfQ0hFQ0soVCkJCVRSRUVfQ0xBU1NfQ0hFQ0sgKFQsIHRjY19zdGF0ZW1lbnQpCisjZGVmaW5lIFZMX0VYUF9DSEVDSyhUKQkJVFJFRV9DTEFTU19DSEVDSyAoVCwgdGNjX3ZsX2V4cCkKKyNkZWZpbmUgRlVOQ19PUl9NRVRIT0RfQ0hFQ0soVCkJVFJFRV9DSEVDSzIgKFQsIEZVTkNUSU9OX1RZUEUsIE1FVEhPRF9UWVBFKQorI2RlZmluZSBQVFJfT1JfUkVGX0NIRUNLKFQpCVRSRUVfQ0hFQ0syIChULCBQT0lOVEVSX1RZUEUsIFJFRkVSRU5DRV9UWVBFKQorCisjZGVmaW5lIFJFQ09SRF9PUl9VTklPTl9DSEVDSyhUKQlcCisgIFRSRUVfQ0hFQ0szIChULCBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSwgUVVBTF9VTklPTl9UWVBFKQorI2RlZmluZSBOT1RfUkVDT1JEX09SX1VOSU9OX0NIRUNLKFQpIFwKKyAgVFJFRV9OT1RfQ0hFQ0szIChULCBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSwgUVVBTF9VTklPTl9UWVBFKQorCisjZGVmaW5lIE5VTUVSSUNBTF9UWVBFX0NIRUNLKFQpCQkJCQlcCisgIFRSRUVfQ0hFQ0s1IChULCBJTlRFR0VSX1RZUEUsIEVOVU1FUkFMX1RZUEUsIEJPT0xFQU5fVFlQRSwgUkVBTF9UWVBFLAlcCisJICAgICAgIEZJWEVEX1BPSU5UX1RZUEUpCisKKy8qIEhlcmUgaXMgaG93IHByaW1pdGl2ZSBvciBhbHJlYWR5LWNhbm9uaWNhbGl6ZWQgdHlwZXMnIGhhc2ggY29kZXMKKyAgIGFyZSBtYWRlLiAgKi8KKyNkZWZpbmUgVFlQRV9IQVNIKFRZUEUpIChUWVBFX1VJRCAoVFlQRSkpCisKKy8qIEEgc2ltcGxlIGhhc2ggZnVuY3Rpb24gZm9yIGFuIGFyYml0cmFyeSB0cmVlIG5vZGUuICBUaGlzIG11c3Qgbm90IGJlCisgICB1c2VkIGluIGhhc2ggdGFibGVzIHdoaWNoIGFyZSBzYXZlZCB0byBhIFBDSC4gICovCisjZGVmaW5lIFRSRUVfSEFTSChOT0RFKSAoKHNpemVfdCkgKE5PREUpICYgMDc3Nzc3NykKKworLyogVGVzdHMgaWYgQ09ERSBpcyBhIGNvbnZlcnNpb24gZXhwciAoTk9QX0VYUFIgb3IgQ09OVkVSVF9FWFBSKS4gICovCisjZGVmaW5lIENPTlZFUlRfRVhQUl9DT0RFX1AoQ09ERSkJCQkJXAorICAoKENPREUpID09IE5PUF9FWFBSIHx8IChDT0RFKSA9PSBDT05WRVJUX0VYUFIpCisKKy8qIFNpbWlsYXJseSwgYnV0IGFjY2VwdCBhbiBleHByZXNzaW9ucyBpbnN0ZWFkIG9mIGEgdHJlZSBjb2RlLiAgKi8KKyNkZWZpbmUgQ09OVkVSVF9FWFBSX1AoRVhQKQlDT05WRVJUX0VYUFJfQ09ERV9QIChUUkVFX0NPREUgKEVYUCkpCisKKy8qIEdlbmVyYXRlIGNhc2UgZm9yIE5PUF9FWFBSLCBDT05WRVJUX0VYUFIuICAqLworCisjZGVmaW5lIENBU0VfQ09OVkVSVAkJCQkJCVwKKyAgY2FzZSBOT1BfRVhQUjoJCQkJCQlcCisgIGNhc2UgQ09OVkVSVF9FWFBSCisKKy8qIEdpdmVuIGFuIGV4cHJlc3Npb24gYXMgYSB0cmVlLCBzdHJpcCBhbnkgY29udmVyc2lvbiB0aGF0IGdlbmVyYXRlcworICAgbm8gaW5zdHJ1Y3Rpb24uICBBY2NlcHRzIGJvdGggdHJlZSBhbmQgY29uc3RfdHJlZSBhcmd1bWVudHMgc2luY2UKKyAgIHdlIGFyZSBub3QgbW9kaWZ5aW5nIHRoZSB0cmVlIGl0c2VsZi4gICovCisKKyNkZWZpbmUgU1RSSVBfTk9QUyhFWFApIFwKKyAgKEVYUCkgPSB0cmVlX3N0cmlwX25vcF9jb252ZXJzaW9ucyAoQ09OU1RfQ0FTVF9UUkVFIChFWFApKQorCisvKiBMaWtlIFNUUklQX05PUFMsIGJ1dCBkb24ndCBsZXQgdGhlIHNpZ25lZG5lc3MgY2hhbmdlIGVpdGhlci4gICovCisKKyNkZWZpbmUgU1RSSVBfU0lHTl9OT1BTKEVYUCkgXAorICAoRVhQKSA9IHRyZWVfc3RyaXBfc2lnbl9ub3BfY29udmVyc2lvbnMgKENPTlNUX0NBU1RfVFJFRSAoRVhQKSkKKworLyogTGlrZSBTVFJJUF9OT1BTLCBidXQgZG9uJ3QgYWx0ZXIgdGhlIFRSRUVfVFlQRSBlaXRoZXIuICAqLworCisjZGVmaW5lIFNUUklQX1RZUEVfTk9QUyhFWFApIFwKKyAgd2hpbGUgKChDT05WRVJUX0VYUFJfUCAoRVhQKQkJCQkJXAorCSAgfHwgVFJFRV9DT0RFIChFWFApID09IE5PTl9MVkFMVUVfRVhQUikJCVwKKwkgJiYgVFJFRV9PUEVSQU5EIChFWFAsIDApICE9IGVycm9yX21hcmtfbm9kZQkJXAorCSAmJiAoVFJFRV9UWVBFIChFWFApCQkJCQlcCisJICAgICA9PSBUUkVFX1RZUEUgKFRSRUVfT1BFUkFORCAoRVhQLCAwKSkpKQkJXAorICAgIChFWFApID0gVFJFRV9PUEVSQU5EIChFWFAsIDApCisKKy8qIFJlbW92ZSB1bm5lY2Vzc2FyeSB0eXBlIGNvbnZlcnNpb25zIGFjY29yZGluZyB0bworICAgdHJlZV9zc2FfdXNlbGVzc190eXBlX2NvbnZlcnNpb24uICAqLworCisjZGVmaW5lIFNUUklQX1VTRUxFU1NfVFlQRV9DT05WRVJTSU9OKEVYUCkgXAorICAoRVhQKSA9IHRyZWVfc3NhX3N0cmlwX3VzZWxlc3NfdHlwZV9jb252ZXJzaW9ucyAoRVhQKQorCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhbiBpbnRlZ3JhbCB0eXBlLiAgTm90ZSB0aGF0IHdlIGRvIG5vdAorICAgaW5jbHVkZSBDT01QTEVYIHR5cGVzIGhlcmUuICBLZWVwIHRoZXNlIGNoZWNrcyBpbiBhc2NlbmRpbmcgY29kZQorICAgb3JkZXIuICAqLworCisjZGVmaW5lIElOVEVHUkFMX1RZUEVfUChUWVBFKSAgXAorICAoVFJFRV9DT0RFIChUWVBFKSA9PSBFTlVNRVJBTF9UWVBFICBcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IEJPT0xFQU5fVFlQRSBcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IElOVEVHRVJfVFlQRSkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYSBub24tc2F0dXJhdGluZyBmaXhlZC1wb2ludCB0eXBlLiAgKi8KKworI2RlZmluZSBOT05fU0FUX0ZJWEVEX1BPSU5UX1RZUEVfUChUWVBFKSBcCisgIChUUkVFX0NPREUgKFRZUEUpID09IEZJWEVEX1BPSU5UX1RZUEUgJiYgIVRZUEVfU0FUVVJBVElORyAoVFlQRSkpCisKKy8qIE5vbnplcm8gaWYgVFlQRSByZXByZXNlbnRzIGEgc2F0dXJhdGluZyBmaXhlZC1wb2ludCB0eXBlLiAgKi8KKworI2RlZmluZSBTQVRfRklYRURfUE9JTlRfVFlQRV9QKFRZUEUpIFwKKyAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gRklYRURfUE9JTlRfVFlQRSAmJiBUWVBFX1NBVFVSQVRJTkcgKFRZUEUpKQorCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhIGZpeGVkLXBvaW50IHR5cGUuICAqLworCisjZGVmaW5lIEZJWEVEX1BPSU5UX1RZUEVfUChUWVBFKQkoVFJFRV9DT0RFIChUWVBFKSA9PSBGSVhFRF9QT0lOVF9UWVBFKQorCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhIHNjYWxhciBmbG9hdGluZy1wb2ludCB0eXBlLiAgKi8KKworI2RlZmluZSBTQ0FMQVJfRkxPQVRfVFlQRV9QKFRZUEUpIChUUkVFX0NPREUgKFRZUEUpID09IFJFQUxfVFlQRSkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYSBjb21wbGV4IGZsb2F0aW5nLXBvaW50IHR5cGUuICAqLworCisjZGVmaW5lIENPTVBMRVhfRkxPQVRfVFlQRV9QKFRZUEUpCVwKKyAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gQ09NUExFWF9UWVBFCVwKKyAgICYmIFRSRUVfQ09ERSAoVFJFRV9UWVBFIChUWVBFKSkgPT0gUkVBTF9UWVBFKQorCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhIHZlY3RvciBpbnRlZ2VyIHR5cGUuICAqLworICAgICAgICAgICAgICAgIAorI2RlZmluZSBWRUNUT1JfSU5URUdFUl9UWVBFX1AoVFlQRSkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIChUUkVFX0NPREUgKFRZUEUpID09IFZFQ1RPUl9UWVBFICAgICAgXAorICAgICAgICAgICAgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAoVFlQRSkpID09IElOVEVHRVJfVFlQRSkKKworCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhIHZlY3RvciBmbG9hdGluZy1wb2ludCB0eXBlLiAgKi8KKworI2RlZmluZSBWRUNUT1JfRkxPQVRfVFlQRV9QKFRZUEUpCVwKKyAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gVkVDVE9SX1RZUEUJXAorICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUgKFRZUEUpKSA9PSBSRUFMX1RZUEUpCisKKy8qIE5vbnplcm8gaWYgVFlQRSByZXByZXNlbnRzIGEgZmxvYXRpbmctcG9pbnQgdHlwZSwgaW5jbHVkaW5nIGNvbXBsZXgKKyAgIGFuZCB2ZWN0b3IgZmxvYXRpbmctcG9pbnQgdHlwZXMuICBUaGUgdmVjdG9yIGFuZCBjb21wbGV4IGNoZWNrIGRvZXMKKyAgIG5vdCB1c2UgdGhlIHByZXZpb3VzIHR3byBtYWNyb3MgdG8gZW5hYmxlIGVhcmx5IGZvbGRpbmcuICAqLworCisjZGVmaW5lIEZMT0FUX1RZUEVfUChUWVBFKQkJCVwKKyAgKFNDQUxBUl9GTE9BVF9UWVBFX1AgKFRZUEUpCQkJXAorICAgfHwgKChUUkVFX0NPREUgKFRZUEUpID09IENPTVBMRVhfVFlQRSAJXAorICAgICAgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IFZFQ1RPUl9UWVBFKQlcCisgICAgICAgJiYgU0NBTEFSX0ZMT0FUX1RZUEVfUCAoVFJFRV9UWVBFIChUWVBFKSkpKQorCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhIGRlY2ltYWwgZmxvYXRpbmctcG9pbnQgdHlwZS4gICovCisjZGVmaW5lIERFQ0lNQUxfRkxPQVRfVFlQRV9QKFRZUEUpCQlcCisgIChTQ0FMQVJfRkxPQVRfVFlQRV9QIChUWVBFKQkJCVwKKyAgICYmIERFQ0lNQUxfRkxPQVRfTU9ERV9QIChUWVBFX01PREUgKFRZUEUpKSkKKworLyogTm9uemVybyBpZiBUWVBFIGlzIGEgcmVjb3JkIG9yIHVuaW9uIHR5cGUuICAqLworI2RlZmluZSBSRUNPUkRfT1JfVU5JT05fVFlQRV9QKFRZUEUpCQlcCisgIChUUkVFX0NPREUgKFRZUEUpID09IFJFQ09SRF9UWVBFCQlcCisgICB8fCBUUkVFX0NPREUgKFRZUEUpID09IFVOSU9OX1RZUEUJCVwKKyAgIHx8IFRSRUVfQ09ERSAoVFlQRSkgPT0gUVVBTF9VTklPTl9UWVBFKQorCisvKiBOb256ZXJvIGlmIFRZUEUgcmVwcmVzZW50cyBhbiBhZ2dyZWdhdGUgKG11bHRpLWNvbXBvbmVudCkgdHlwZS4KKyAgIEtlZXAgdGhlc2UgY2hlY2tzIGluIGFzY2VuZGluZyBjb2RlIG9yZGVyLiAgKi8KKworI2RlZmluZSBBR0dSRUdBVEVfVFlQRV9QKFRZUEUpIFwKKyAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gQVJSQVlfVFlQRSB8fCBSRUNPUkRfT1JfVU5JT05fVFlQRV9QIChUWVBFKSkKKworLyogTm9uemVybyBpZiBUWVBFIHJlcHJlc2VudHMgYSBwb2ludGVyIG9yIHJlZmVyZW5jZSB0eXBlLgorICAgKEl0IHNob3VsZCBiZSByZW5hbWVkIHRvIElORElSRUNUX1RZUEVfUC4pICBLZWVwIHRoZXNlIGNoZWNrcyBpbgorICAgYXNjZW5kaW5nIGNvZGUgb3JkZXIuICAqLworCisjZGVmaW5lIFBPSU5URVJfVFlQRV9QKFRZUEUpIFwKKyAgKFRSRUVfQ09ERSAoVFlQRSkgPT0gUE9JTlRFUl9UWVBFIHx8IFRSRUVfQ09ERSAoVFlQRSkgPT0gUkVGRVJFTkNFX1RZUEUpCisKKy8qIE5vbnplcm8gaWYgVFlQRSByZXByZXNlbnRzIGEgcG9pbnRlciB0byBmdW5jdGlvbi4gICovCisjZGVmaW5lIEZVTkNUSU9OX1BPSU5URVJfVFlQRV9QKFRZUEUpIFwKKyAgKFBPSU5URVJfVFlQRV9QIChUWVBFKSAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAoVFlQRSkpID09IEZVTkNUSU9OX1RZUEUpCisKKy8qIE5vbnplcm8gaWYgdGhpcyB0eXBlIGlzIGEgY29tcGxldGUgdHlwZS4gICovCisjZGVmaW5lIENPTVBMRVRFX1RZUEVfUChOT0RFKSAoVFlQRV9TSVpFIChOT0RFKSAhPSBOVUxMX1RSRUUpCisKKy8qIE5vbnplcm8gaWYgdGhpcyB0eXBlIGlzIHRoZSAocG9zc2libHkgcXVhbGlmaWVkKSB2b2lkIHR5cGUuICAqLworI2RlZmluZSBWT0lEX1RZUEVfUChOT0RFKSAoVFJFRV9DT0RFIChOT0RFKSA9PSBWT0lEX1RZUEUpCisKKy8qIE5vbnplcm8gaWYgdGhpcyB0eXBlIGlzIGNvbXBsZXRlIG9yIGlzIGN2IHZvaWQuICAqLworI2RlZmluZSBDT01QTEVURV9PUl9WT0lEX1RZUEVfUChOT0RFKSBcCisgIChDT01QTEVURV9UWVBFX1AgKE5PREUpIHx8IFZPSURfVFlQRV9QIChOT0RFKSkKKworLyogTm9uemVybyBpZiB0aGlzIHR5cGUgaXMgY29tcGxldGUgb3IgaXMgYW4gYXJyYXkgd2l0aCB1bnNwZWNpZmllZCBib3VuZC4gICovCisjZGVmaW5lIENPTVBMRVRFX09SX1VOQk9VTkRfQVJSQVlfVFlQRV9QKE5PREUpIFwKKyAgKENPTVBMRVRFX1RZUEVfUCAoVFJFRV9DT0RFIChOT0RFKSA9PSBBUlJBWV9UWVBFID8gVFJFRV9UWVBFIChOT0RFKSA6IChOT0RFKSkpCisKKwwKKy8qIERlZmluZSBtYW55IGJvb2xlYW4gZmllbGRzIHRoYXQgYWxsIHRyZWUgbm9kZXMgaGF2ZS4gICovCisKKy8qIEluIFZBUl9ERUNMLCBQQVJNX0RFQ0wgYW5kIFJFU1VMVF9ERUNMIG5vZGVzLCBub256ZXJvIG1lYW5zIGFkZHJlc3MKKyAgIG9mIHRoaXMgaXMgbmVlZGVkLiAgU28gaXQgY2Fubm90IGJlIGluIGEgcmVnaXN0ZXIuCisgICBJbiBhIEZVTkNUSU9OX0RFQ0wgaXQgaGFzIG5vIG1lYW5pbmcuCisgICBJbiBMQUJFTF9ERUNMIG5vZGVzLCBpdCBtZWFucyBhIGdvdG8gZm9yIHRoaXMgbGFiZWwgaGFzIGJlZW4gc2VlbgorICAgZnJvbSBhIHBsYWNlIG91dHNpZGUgYWxsIGJpbmRpbmcgY29udG91cnMgdGhhdCByZXN0b3JlIHN0YWNrIGxldmVscy4KKyAgIEluIGFuIGFydGlmaWNpYWwgU1NBX05BTUUgdGhhdCBwb2ludHMgdG8gYSBzdGFjayBwYXJ0aXRpb24gd2l0aCBhdCBsZWFzdAorICAgdHdvIHZhcmlhYmxlcywgaXQgbWVhbnMgdGhhdCBhdCBsZWFzdCBvbmUgdmFyaWFibGUgaGFzIFRSRUVfQUREUkVTU0FCTEUuCisgICBJbiAuLi5fVFlQRSBub2RlcywgaXQgbWVhbnMgdGhhdCBvYmplY3RzIG9mIHRoaXMgdHlwZSBtdXN0IGJlIGZ1bGx5CisgICBhZGRyZXNzYWJsZS4gIFRoaXMgbWVhbnMgdGhhdCBwaWVjZXMgb2YgdGhpcyBvYmplY3QgY2Fubm90IGdvIGludG8KKyAgIHJlZ2lzdGVyIHBhcmFtZXRlcnMsIGZvciBleGFtcGxlLiAgSWYgdGhpcyBhIGZ1bmN0aW9uIHR5cGUsIHRoaXMKKyAgIG1lYW5zIHRoYXQgdGhlIHZhbHVlIG11c3QgYmUgcmV0dXJuZWQgaW4gbWVtb3J5LgorICAgSW4gQ09OU1RSVUNUT1Igbm9kZXMsIGl0IG1lYW5zIG9iamVjdCBjb25zdHJ1Y3RlZCBtdXN0IGJlIGluIG1lbW9yeS4KKyAgIEluIElERU5USUZJRVJfTk9ERXMsIHRoaXMgbWVhbnMgdGhhdCBzb21lIGV4dGVybiBkZWNsIGZvciB0aGlzIG5hbWUKKyAgIGhhZCBpdHMgYWRkcmVzcyB0YWtlbi4gIFRoYXQgbWF0dGVycyBmb3IgaW5saW5lIGZ1bmN0aW9ucy4KKyAgIEluIGEgU1RNVF9FWFBSLCBpdCBtZWFucyB3ZSB3YW50IHRoZSByZXN1bHQgb2YgdGhlIGVuY2xvc2VkIGV4cHJlc3Npb24uICAqLworI2RlZmluZSBUUkVFX0FERFJFU1NBQkxFKE5PREUpICgoTk9ERSktPmJhc2UuYWRkcmVzc2FibGVfZmxhZykKKworLyogU2V0IG9uIGEgQ0FMTF9FWFBSIGlmIHRoZSBjYWxsIGlzIGluIGEgdGFpbCBwb3NpdGlvbiwgaWUuIGp1c3QgYmVmb3JlIHRoZQorICAgZXhpdCBvZiBhIGZ1bmN0aW9uLiAgQ2FsbHMgZm9yIHdoaWNoIHRoaXMgaXMgdHJ1ZSBhcmUgY2FuZGlkYXRlcyBmb3IgdGFpbAorICAgY2FsbCBvcHRpbWl6YXRpb25zLiAgKi8KKyNkZWZpbmUgQ0FMTF9FWFBSX1RBSUxDQUxMKE5PREUpIFwKKyAgKENBTExfRVhQUl9DSEVDSyhOT0RFKS0+YmFzZS5hZGRyZXNzYWJsZV9mbGFnKQorCisvKiBVc2VkIGFzIGEgdGVtcG9yYXJ5IGZpZWxkIG9uIGEgQ0FTRV9MQUJFTF9FWFBSIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICBDQVNFX0xPVyBvcGVyYW5kIGhhcyBiZWVuIHByb2Nlc3NlZC4gICovCisjZGVmaW5lIENBU0VfTE9XX1NFRU4oTk9ERSkgXAorICAoQ0FTRV9MQUJFTF9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5hZGRyZXNzYWJsZV9mbGFnKQorCisjZGVmaW5lIFBSRURJQ1RfRVhQUl9PVVRDT01FKE5PREUpIFwKKyAgKChlbnVtIHByZWRpY3Rpb24pIChQUkVESUNUX0VYUFJfQ0hFQ0soTk9ERSktPmJhc2UuYWRkcmVzc2FibGVfZmxhZykpCisjZGVmaW5lIFNFVF9QUkVESUNUX0VYUFJfT1VUQ09NRShOT0RFLCBPVVRDT01FKSBcCisgIChQUkVESUNUX0VYUFJfQ0hFQ0soTk9ERSktPmJhc2UuYWRkcmVzc2FibGVfZmxhZyA9IChpbnQpIE9VVENPTUUpCisjZGVmaW5lIFBSRURJQ1RfRVhQUl9QUkVESUNUT1IoTk9ERSkgXAorICAoKGVudW0gYnJfcHJlZGljdG9yKXRyZWVfbG93X2NzdCAoVFJFRV9PUEVSQU5EIChQUkVESUNUX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKSwgMCkpCisKKy8qIEluIGEgVkFSX0RFQ0wsIG5vbnplcm8gbWVhbnMgYWxsb2NhdGUgc3RhdGljIHN0b3JhZ2UuCisgICBJbiBhIEZVTkNUSU9OX0RFQ0wsIG5vbnplcm8gaWYgZnVuY3Rpb24gaGFzIGJlZW4gZGVmaW5lZC4KKyAgIEluIGEgQ09OU1RSVUNUT1IsIG5vbnplcm8gbWVhbnMgYWxsb2NhdGUgc3RhdGljIHN0b3JhZ2UuICAqLworI2RlZmluZSBUUkVFX1NUQVRJQyhOT0RFKSAoKE5PREUpLT5iYXNlLnN0YXRpY19mbGFnKQorCisvKiBJbiBhbiBBRERSX0VYUFIsIG5vbnplcm8gbWVhbnMgZG8gbm90IHVzZSBhIHRyYW1wb2xpbmUuICAqLworI2RlZmluZSBUUkVFX05PX1RSQU1QT0xJTkUoTk9ERSkgKEFERFJfRVhQUl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIEluIGEgVEFSR0VUX0VYUFIgb3IgV0lUSF9DTEVBTlVQX0VYUFIsIG1lYW5zIHRoYXQgdGhlIHBlcnRpbmVudCBjbGVhbnVwCisgICBzaG91bGQgb25seSBiZSBleGVjdXRlZCBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duLCBub3Qgb24gbm9ybWFsIGV4aXQKKyAgIG9mIGl0cyBzY29wZS4gICovCisjZGVmaW5lIENMRUFOVVBfRUhfT05MWShOT0RFKSAoKE5PREUpLT5iYXNlLnN0YXRpY19mbGFnKQorCisvKiBJbiBhIFRSWV9DQVRDSF9FWFBSLCBtZWFucyB0aGF0IHRoZSBoYW5kbGVyIHNob3VsZCBiZSBjb25zaWRlcmVkIGEKKyAgIHNlcGFyYXRlIGNsZWFudXAgaW4gaG9ub3JfcHJvdGVjdF9jbGVhbnVwX2FjdGlvbnMuICAqLworI2RlZmluZSBUUllfQ0FUQ0hfSVNfQ0xFQU5VUChOT0RFKSBcCisgIChUUllfQ0FUQ0hfRVhQUl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIFVzZWQgYXMgYSB0ZW1wb3JhcnkgZmllbGQgb24gYSBDQVNFX0xBQkVMX0VYUFIgdG8gaW5kaWNhdGUgdGhhdCB0aGUKKyAgIENBU0VfSElHSCBvcGVyYW5kIGhhcyBiZWVuIHByb2Nlc3NlZC4gICovCisjZGVmaW5lIENBU0VfSElHSF9TRUVOKE5PREUpIFwKKyAgKENBU0VfTEFCRUxfRVhQUl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIFVzZWQgdG8gbWFyayBzY29wZWQgZW51bXMuICAqLworI2RlZmluZSBFTlVNX0lTX1NDT1BFRChOT0RFKSAoRU5VTUVSQUxfVFlQRV9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIERldGVybWluZXMgd2hldGhlciBhbiBFTlVNRVJBTF9UWVBFIGhhcyBkZWZpbmVkIHRoZSBsaXN0IG9mIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgRU5VTV9JU19PUEFRVUUoTk9ERSkgKEVOVU1FUkFMX1RZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLnByaXZhdGVfZmxhZykKKworLyogSW4gYW4gZXhwciBub2RlICh1c3VhbGx5IGEgY29udmVyc2lvbikgdGhpcyBtZWFucyB0aGUgbm9kZSB3YXMgbWFkZQorICAgaW1wbGljaXRseSBhbmQgc2hvdWxkIG5vdCBsZWFkIHRvIGFueSBzb3J0IG9mIHdhcm5pbmcuICBJbiBhIGRlY2wgbm9kZSwKKyAgIHdhcm5pbmdzIGNvbmNlcm5pbmcgdGhlIGRlY2wgc2hvdWxkIGJlIHN1cHByZXNzZWQuICBUaGlzIGlzIHVzZWQgYXQKKyAgIGxlYXN0IGZvciB1c2VkLWJlZm9yZS1zZXQgd2FybmluZ3MsIGFuZCBpdCBzZXQgYWZ0ZXIgb25lIHdhcm5pbmcgaXMKKyAgIGVtaXR0ZWQuICAqLworI2RlZmluZSBUUkVFX05PX1dBUk5JTkcoTk9ERSkgKChOT0RFKS0+YmFzZS5ub3dhcm5pbmdfZmxhZykKKworLyogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgVFlQRSByZXByZXNlbnRzIGEgY29tcGlsZXItZ2VuZXJhdGVkIGVudGl0eS4gICovCisjZGVmaW5lIFRZUEVfQVJUSUZJQ0lBTChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPmJhc2Uubm93YXJuaW5nX2ZsYWcpCisKKy8qIEluIGFuIElERU5USUZJRVJfTk9ERSwgdGhpcyBtZWFucyB0aGF0IGFzc2VtYmxlX25hbWUgd2FzIGNhbGxlZCB3aXRoCisgICB0aGlzIHN0cmluZyBhcyBhbiBhcmd1bWVudC4gICovCisjZGVmaW5lIFRSRUVfU1lNQk9MX1JFRkVSRU5DRUQoTk9ERSkgXAorICAoSURFTlRJRklFUl9OT0RFX0NIRUNLIChOT0RFKS0+YmFzZS5zdGF0aWNfZmxhZykKKworLyogTm9uemVybyBpbiBhIHBvaW50ZXIgb3IgcmVmZXJlbmNlIHR5cGUgbWVhbnMgdGhlIGRhdGEgcG9pbnRlZCB0bworICAgYnkgdGhpcyB0eXBlIGNhbiBhbGlhcyBhbnl0aGluZy4gICovCisjZGVmaW5lIFRZUEVfUkVGX0NBTl9BTElBU19BTEwoTk9ERSkgXAorICAoUFRSX09SX1JFRl9DSEVDSyAoTk9ERSktPmJhc2Uuc3RhdGljX2ZsYWcpCisKKy8qIEluIGFuIElOVEVHRVJfQ1NULCBSRUFMX0NTVCwgQ09NUExFWF9DU1QsIG9yIFZFQ1RPUl9DU1QsIHRoaXMgbWVhbnMKKyAgIHRoZXJlIHdhcyBhbiBvdmVyZmxvdyBpbiBmb2xkaW5nLiAgKi8KKworI2RlZmluZSBUUkVFX09WRVJGTE9XKE5PREUpIChDU1RfQ0hFQ0sgKE5PREUpLT5iYXNlLnB1YmxpY19mbGFnKQorCisvKiBUUkVFX09WRVJGTE9XIGNhbiBvbmx5IGJlIHRydWUgZm9yIEVYUFIgb2YgQ09OU1RBTlRfQ0xBU1NfUC4gICovCisKKyNkZWZpbmUgVFJFRV9PVkVSRkxPV19QKEVYUFIpIFwKKyAoQ09OU1RBTlRfQ0xBU1NfUCAoRVhQUikgJiYgVFJFRV9PVkVSRkxPVyAoRVhQUikpCisKKy8qIEluIGEgVkFSX0RFQ0wsIEZVTkNUSU9OX0RFQ0wsIE5BTUVTUEFDRV9ERUNMIG9yIFRZUEVfREVDTCwKKyAgIG5vbnplcm8gbWVhbnMgbmFtZSBpcyB0byBiZSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGlzIHRyYW5zbGF0aW9uIHVuaXQuCisgICBJbiBhbiBJREVOVElGSUVSX05PREUsIG5vbnplcm8gbWVhbnMgYW4gZXh0ZXJuYWwgZGVjbGFyYXRpb24KKyAgIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIHRoaXMgdHJhbnNsYXRpb24gdW5pdCB3YXMgcHJldmlvdXNseSBzZWVuCisgICBmb3IgdGhpcyBuYW1lIGluIGFuIGlubmVyIHNjb3BlLiAgKi8KKyNkZWZpbmUgVFJFRV9QVUJMSUMoTk9ERSkgKChOT0RFKS0+YmFzZS5wdWJsaWNfZmxhZykKKworLyogSW4gYSBfVFlQRSwgaW5kaWNhdGVzIHdoZXRoZXIgVFlQRV9DQUNIRURfVkFMVUVTIGNvbnRhaW5zIGEgdmVjdG9yCisgICBvZiBjYWNoZWQgdmFsdWVzLCBvciBpcyBzb21ldGhpbmcgZWxzZS4gICovCisjZGVmaW5lIFRZUEVfQ0FDSEVEX1ZBTFVFU19QKE5PREUpIChUWVBFX0NIRUNLKE5PREUpLT5iYXNlLnB1YmxpY19mbGFnKQorCisvKiBJbiBhIFNBVkVfRVhQUiwgaW5kaWNhdGVzIHRoYXQgdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24gaGFzIGFscmVhZHkKKyAgIGJlZW4gc3Vic3RpdHV0ZWQgd2l0aCBhIFZBUl9ERUNMIHRoYXQgY29udGFpbnMgdGhlIHZhbHVlLiAgKi8KKyNkZWZpbmUgU0FWRV9FWFBSX1JFU09MVkVEX1AoTk9ERSkgXAorICAoU0FWRV9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5wdWJsaWNfZmxhZykKKworLyogU2V0IG9uIGEgQ0FMTF9FWFBSIGlmIHRoaXMgc3RkYXJnIGNhbGwgc2hvdWxkIGJlIHBhc3NlZCB0aGUgYXJndW1lbnQKKyAgIHBhY2suICAqLworI2RlZmluZSBDQUxMX0VYUFJfVkFfQVJHX1BBQ0soTk9ERSkgXAorICAoQ0FMTF9FWFBSX0NIRUNLKE5PREUpLT5iYXNlLnB1YmxpY19mbGFnKQorCisvKiBJbiBhbnkgZXhwcmVzc2lvbiwgZGVjbCwgb3IgY29uc3RhbnQsIG5vbnplcm8gbWVhbnMgaXQgaGFzIHNpZGUgZWZmZWN0cyBvcgorICAgcmVldmFsdWF0aW9uIG9mIHRoZSB3aG9sZSBleHByZXNzaW9uIGNvdWxkIHByb2R1Y2UgYSBkaWZmZXJlbnQgdmFsdWUuCisgICBUaGlzIGlzIHNldCBpZiBhbnkgc3ViZXhwcmVzc2lvbiBpcyBhIGZ1bmN0aW9uIGNhbGwsIGEgc2lkZSBlZmZlY3Qgb3IgYQorICAgcmVmZXJlbmNlIHRvIGEgdm9sYXRpbGUgdmFyaWFibGUuICBJbiBhIC4uLl9ERUNMLCB0aGlzIGlzIHNldCBvbmx5IGlmIHRoZQorICAgZGVjbGFyYXRpb24gc2FpZCBgdm9sYXRpbGUnLiAgVGhpcyB3aWxsIG5ldmVyIGJlIHNldCBmb3IgYSBjb25zdGFudC4gICovCisjZGVmaW5lIFRSRUVfU0lERV9FRkZFQ1RTKE5PREUpIFwKKyAgKE5PTl9UWVBFX0NIRUNLIChOT0RFKS0+YmFzZS5zaWRlX2VmZmVjdHNfZmxhZykKKworLyogSW4gYSBMQUJFTF9ERUNMLCBub256ZXJvIG1lYW5zIHRoaXMgbGFiZWwgaGFkIGl0cyBhZGRyZXNzIHRha2VuCisgICBhbmQgdGhlcmVmb3JlIGNhbiBuZXZlciBiZSBkZWxldGVkIGFuZCBpcyBhIGp1bXAgdGFyZ2V0IGZvcgorICAgY29tcHV0ZWQgZ290b3MuICAqLworI2RlZmluZSBGT1JDRURfTEFCRUwoTk9ERSkgKExBQkVMX0RFQ0xfQ0hFQ0sgKE5PREUpLT5iYXNlLnNpZGVfZWZmZWN0c19mbGFnKQorCisvKiBOb256ZXJvIG1lYW5zIHRoaXMgZXhwcmVzc2lvbiBpcyB2b2xhdGlsZSBpbiB0aGUgQyBzZW5zZToKKyAgIGl0cyBhZGRyZXNzIHNob3VsZCBiZSBvZiB0eXBlIGB2b2xhdGlsZSBXSEFURVZFUiAqJy4KKyAgIEluIG90aGVyIHdvcmRzLCB0aGUgZGVjbGFyZWQgaXRlbSBpcyB2b2xhdGlsZSBxdWFsaWZpZWQuCisgICBUaGlzIGlzIHVzZWQgaW4gX0RFQ0wgbm9kZXMgYW5kIF9SRUYgbm9kZXMuCisgICBPbiBhIEZVTkNUSU9OX0RFQ0wgbm9kZSwgdGhpcyBtZWFucyB0aGUgZnVuY3Rpb24gZG9lcyBub3QKKyAgIHJldHVybiBub3JtYWxseS4gIFRoaXMgaXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcKKyAgIHRoZSBhdHRyaWJ1dGUgbm9yZXR1cm4gb24gdGhlIGZ1bmN0aW9uIGluIEMuCisKKyAgIEluIGEgLi4uX1RZUEUgbm9kZSwgbWVhbnMgdGhpcyB0eXBlIGlzIHZvbGF0aWxlLXF1YWxpZmllZC4KKyAgIEJ1dCB1c2UgVFlQRV9WT0xBVElMRSBpbnN0ZWFkIG9mIHRoaXMgbWFjcm8gd2hlbiB0aGUgbm9kZSBpcyBhIHR5cGUsCisgICBiZWNhdXNlIGV2ZW50dWFsbHkgd2UgbWF5IG1ha2UgdGhhdCBhIGRpZmZlcmVudCBiaXQuCisKKyAgIElmIHRoaXMgYml0IGlzIHNldCBpbiBhbiBleHByZXNzaW9uLCBzbyBpcyBUUkVFX1NJREVfRUZGRUNUUy4gICovCisjZGVmaW5lIFRSRUVfVEhJU19WT0xBVElMRShOT0RFKSAoKE5PREUpLT5iYXNlLnZvbGF0aWxlX2ZsYWcpCisKKy8qIE5vbnplcm8gbWVhbnMgdGhpcyBub2RlIHdpbGwgbm90IHRyYXAuICBJbiBhbiBJTkRJUkVDVF9SRUYsIG1lYW5zCisgICBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBwb2ludGVkIHRvIHdvbid0IGdlbmVyYXRlIGEgdHJhcC4gIEhvd2V2ZXIsCisgICB0aGlzIG9ubHkgYXBwbGllcyB0byBhbiBvYmplY3Qgd2hlbiB1c2VkIGFwcHJvcHJpYXRlbHk6IGl0IGRvZXNuJ3QKKyAgIG1lYW4gdGhhdCB3cml0aW5nIGEgUkVBRE9OTFkgbWVtIHdvbid0IHRyYXAuCisKKyAgIEluIEFSUkFZX1JFRiBhbmQgQVJSQVlfUkFOR0VfUkVGIG1lYW5zIHRoYXQgd2Uga25vdyB0aGF0IHRoZSBpbmRleAorICAgKG9yIHNsaWNlIG9mIHRoZSBhcnJheSkgYWx3YXlzIGJlbG9uZ3MgdG8gdGhlIHJhbmdlIG9mIHRoZSBhcnJheS4KKyAgIEkuZS4gdGhhdCB0aGUgYWNjZXNzIHdpbGwgbm90IHRyYXAsIHByb3ZpZGVkIHRoYXQgdGhlIGFjY2VzcyB0bworICAgdGhlIGJhc2UgdG8gdGhlIGFycmF5IHdpbGwgbm90IHRyYXAuICAqLworI2RlZmluZSBUUkVFX1RISVNfTk9UUkFQKE5PREUpIFwKKyAgKFRSRUVfQ0hFQ0s1IChOT0RFLCBJTkRJUkVDVF9SRUYsIE1FTV9SRUYsIFRBUkdFVF9NRU1fUkVGLCBBUlJBWV9SRUYsCVwKKwkJQVJSQVlfUkFOR0VfUkVGKS0+YmFzZS5ub3Rocm93X2ZsYWcpCisKKy8qIEluIGEgVkFSX0RFQ0wsIFBBUk1fREVDTCBvciBGSUVMRF9ERUNMLCBvciBhbnkga2luZCBvZiAuLi5fUkVGIG5vZGUsCisgICBub256ZXJvIG1lYW5zIGl0IG1heSBub3QgYmUgdGhlIGxocyBvZiBhbiBhc3NpZ25tZW50LgorICAgTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdHJlYXRlZAorICAgYXMgImNvbnN0IiBmdW5jdGlvbiAoY2FuIG9ubHkgcmVhZCBpdHMgYXJndW1lbnRzKS4gICovCisjZGVmaW5lIFRSRUVfUkVBRE9OTFkoTk9ERSkgKE5PTl9UWVBFX0NIRUNLIChOT0RFKS0+YmFzZS5yZWFkb25seV9mbGFnKQorCisvKiBWYWx1ZSBvZiBleHByZXNzaW9uIGlzIGNvbnN0YW50LiAgQWx3YXlzIG9uIGluIGFsbCAuLi5fQ1NUIG5vZGVzLiAgTWF5CisgICBhbHNvIGFwcGVhciBpbiBhbiBleHByZXNzaW9uIG9yIGRlY2wgd2hlcmUgdGhlIHZhbHVlIGlzIGNvbnN0YW50LiAgKi8KKyNkZWZpbmUgVFJFRV9DT05TVEFOVChOT0RFKSAoTk9OX1RZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLmNvbnN0YW50X2ZsYWcpCisKKy8qIE5vbnplcm8gaWYgTk9ERSwgYSB0eXBlLCBoYXMgaGFkIGl0cyBzaXplcyBnaW1wbGlmaWVkLiAgKi8KKyNkZWZpbmUgVFlQRV9TSVpFU19HSU1QTElGSUVEKE5PREUpIFwKKyAgKFRZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLmNvbnN0YW50X2ZsYWcpCisKKy8qIEluIGEgZGVjbCAobW9zdCBzaWduaWZpY2FudGx5IGEgRklFTERfREVDTCksIG1lYW5zIGFuIHVuc2lnbmVkIGZpZWxkLiAgKi8KKyNkZWZpbmUgREVDTF9VTlNJR05FRChOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmJhc2UudS5iaXRzLnVuc2lnbmVkX2ZsYWcpCisKKy8qIEluIGludGVncmFsIGFuZCBwb2ludGVyIHR5cGVzLCBtZWFucyBhbiB1bnNpZ25lZCB0eXBlLiAgKi8KKyNkZWZpbmUgVFlQRV9VTlNJR05FRChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPmJhc2UudS5iaXRzLnVuc2lnbmVkX2ZsYWcpCisKKy8qIFRydWUgaWYgb3ZlcmZsb3cgd3JhcHMgYXJvdW5kIGZvciB0aGUgZ2l2ZW4gaW50ZWdyYWwgdHlwZS4gIFRoYXQKKyAgIGlzLCBUWVBFX01BWCArIDEgPT0gVFlQRV9NSU4uICAqLworI2RlZmluZSBUWVBFX09WRVJGTE9XX1dSQVBTKFRZUEUpIFwKKyAgKFRZUEVfVU5TSUdORUQgKFRZUEUpIHx8IGZsYWdfd3JhcHYpCisKKy8qIFRydWUgaWYgb3ZlcmZsb3cgaXMgdW5kZWZpbmVkIGZvciB0aGUgZ2l2ZW4gaW50ZWdyYWwgdHlwZS4gIFdlIG1heQorICAgb3B0aW1pemUgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB2YWx1ZXMgaW4gdGhlIHR5cGUgbmV2ZXIgb3ZlcmZsb3cuCisKKyAgIElNUE9SVEFOVCBOT1RFOiBBbnkgb3B0aW1pemF0aW9uIGJhc2VkIG9uIFRZUEVfT1ZFUkZMT1dfVU5ERUZJTkVECisgICBtdXN0IGlzc3VlIGEgd2FybmluZyBiYXNlZCBvbiB3YXJuX3N0cmljdF9vdmVyZmxvdy4gIEluIHNvbWUgY2FzZXMKKyAgIGl0IHdpbGwgYmUgYXBwcm9wcmlhdGUgdG8gaXNzdWUgdGhlIHdhcm5pbmcgaW1tZWRpYXRlbHksIGFuZCBpbgorICAgb3RoZXIgY2FzZXMgaXQgd2lsbCBiZSBhcHByb3ByaWF0ZSB0byBzaW1wbHkgc2V0IGEgZmxhZyBhbmQgbGV0IHRoZQorICAgY2FsbGVyIGRlY2lkZSB3aGV0aGVyIGEgd2FybmluZyBpcyBhcHByb3ByaWF0ZSBvciBub3QuICAqLworI2RlZmluZSBUWVBFX09WRVJGTE9XX1VOREVGSU5FRChUWVBFKSBcCisgICghVFlQRV9VTlNJR05FRCAoVFlQRSkgJiYgIWZsYWdfd3JhcHYgJiYgIWZsYWdfdHJhcHYgJiYgZmxhZ19zdHJpY3Rfb3ZlcmZsb3cpCisKKy8qIFRydWUgaWYgb3ZlcmZsb3cgZm9yIHRoZSBnaXZlbiBpbnRlZ3JhbCB0eXBlIHNob3VsZCBpc3N1ZSBhCisgICB0cmFwLiAgKi8KKyNkZWZpbmUgVFlQRV9PVkVSRkxPV19UUkFQUyhUWVBFKSBcCisgICghVFlQRV9VTlNJR05FRCAoVFlQRSkgJiYgZmxhZ190cmFwdikKKworLyogVHJ1ZSBpZiBwb2ludGVyIHR5cGVzIGhhdmUgdW5kZWZpbmVkIG92ZXJmbG93LiAgKi8KKyNkZWZpbmUgUE9JTlRFUl9UWVBFX09WRVJGTE9XX1VOREVGSU5FRCAoZmxhZ19zdHJpY3Rfb3ZlcmZsb3cpCisKKy8qIE5vbnplcm8gaW4gYSBWQVJfREVDTCBvciBTVFJJTkdfQ1NUIG1lYW5zIGFzc2VtYmxlciBjb2RlIGhhcyBiZWVuIHdyaXR0ZW4uCisgICBOb256ZXJvIGluIGEgRlVOQ1RJT05fREVDTCBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBjb21waWxlZC4KKyAgIFRoaXMgaXMgaW50ZXJlc3RpbmcgaW4gYW4gaW5saW5lIGZ1bmN0aW9uLCBzaW5jZSBpdCBtaWdodCBub3QgbmVlZAorICAgdG8gYmUgY29tcGlsZWQgc2VwYXJhdGVseS4KKyAgIE5vbnplcm8gaW4gYSBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSwgUVVBTF9VTklPTl9UWVBFLCBFTlVNRVJBTF9UWVBFCisgICBvciBUWVBFX0RFQ0wgaWYgdGhlIGRlYnVnZ2luZyBpbmZvIGZvciB0aGUgdHlwZSBoYXMgYmVlbiB3cml0dGVuLgorICAgSW4gYSBCTE9DSyBub2RlLCBub256ZXJvIGlmIHJlb3JkZXJfYmxvY2tzIGhhcyBhbHJlYWR5IHNlZW4gdGhpcyBibG9jay4KKyAgIEluIGFuIFNTQV9OQU1FIG5vZGUsIG5vbnplcm8gaWYgdGhlIFNTQV9OQU1FIG9jY3VycyBpbiBhbiBhYm5vcm1hbAorICAgUEhJIG5vZGUuICAqLworI2RlZmluZSBUUkVFX0FTTV9XUklUVEVOKE5PREUpICgoTk9ERSktPmJhc2UuYXNtX3dyaXR0ZW5fZmxhZykKKworLyogTm9uemVybyBpbiBhIF9ERUNMIGlmIHRoZSBuYW1lIGlzIHVzZWQgaW4gaXRzIHNjb3BlLgorICAgTm9uemVybyBpbiBhbiBleHByIG5vZGUgbWVhbnMgaW5oaWJpdCB3YXJuaW5nIGlmIHZhbHVlIGlzIHVudXNlZC4KKyAgIEluIElERU5USUZJRVJfTk9ERXMsIHRoaXMgbWVhbnMgdGhhdCBzb21lIGV4dGVybiBkZWNsIGZvciB0aGlzIG5hbWUKKyAgIHdhcyB1c2VkLgorICAgSW4gYSBCTE9DSywgdGhpcyBtZWFucyB0aGF0IHRoZSBibG9jayBjb250YWlucyB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZC4gICovCisjZGVmaW5lIFRSRUVfVVNFRChOT0RFKSAoKE5PREUpLT5iYXNlLnVzZWRfZmxhZykKKworLyogSW4gYSBGVU5DVElPTl9ERUNMLCBub256ZXJvIG1lYW5zIGEgY2FsbCB0byB0aGUgZnVuY3Rpb24gY2Fubm90CisgICB0aHJvdyBhbiBleGNlcHRpb24uICBJbiBhIENBTExfRVhQUiwgbm9uemVybyBtZWFucyB0aGUgY2FsbCBjYW5ub3QKKyAgIHRocm93LiAgV2UgY2FuJ3QgZWFzaWx5IGNoZWNrIHRoZSBub2RlIHR5cGUgaGVyZSBhcyB0aGUgQysrCisgICBmcm9udGVuZCBhbHNvIHVzZXMgdGhpcyBmbGFnIChmb3IgQUdHUl9JTklUX0VYUFIpLiAgKi8KKyNkZWZpbmUgVFJFRV9OT1RIUk9XKE5PREUpICgoTk9ERSktPmJhc2Uubm90aHJvd19mbGFnKQorCisvKiBJbiBhIENBTExfRVhQUiwgbWVhbnMgdGhhdCBpdCdzIHNhZmUgdG8gdXNlIHRoZSB0YXJnZXQgb2YgdGhlIGNhbGwKKyAgIGV4cGFuc2lvbiBhcyB0aGUgcmV0dXJuIHNsb3QgZm9yIGEgY2FsbCB0aGF0IHJldHVybnMgaW4gbWVtb3J5LiAgKi8KKyNkZWZpbmUgQ0FMTF9FWFBSX1JFVFVSTl9TTE9UX09QVChOT0RFKSBcCisgIChDQUxMX0VYUFJfQ0hFQ0sgKE5PREUpLT5iYXNlLnByaXZhdGVfZmxhZykKKworLyogSW4gYSBSRVNVTFRfREVDTCwgUEFSTV9ERUNMIGFuZCBWQVJfREVDTCwgbWVhbnMgdGhhdCBpdCBpcworICAgcGFzc2VkIGJ5IGludmlzaWJsZSByZWZlcmVuY2UgKGFuZCB0aGUgVFJFRV9UWVBFIGlzIGEgcG9pbnRlciB0byB0aGUgdHJ1ZQorICAgdHlwZSkuICAqLworI2RlZmluZSBERUNMX0JZX1JFRkVSRU5DRShOT0RFKSBcCisgIChUUkVFX0NIRUNLMyAoTk9ERSwgVkFSX0RFQ0wsIFBBUk1fREVDTCwgXAorCQlSRVNVTFRfREVDTCktPmRlY2xfY29tbW9uLmRlY2xfYnlfcmVmZXJlbmNlX2ZsYWcpCisKKy8qIEluIFZBUl9ERUNMIGFuZCBQQVJNX0RFQ0wsIHNldCB3aGVuIHRoZSBkZWNsIGhhcyBiZWVuIHVzZWQgZXhjZXB0IGZvcgorICAgYmVpbmcgc2V0LiAgKi8KKyNkZWZpbmUgREVDTF9SRUFEX1AoTk9ERSkgXAorICAoVFJFRV9DSEVDSzIgKE5PREUsIFZBUl9ERUNMLCBQQVJNX0RFQ0wpLT5kZWNsX2NvbW1vbi5kZWNsX3JlYWRfZmxhZykKKworLyogSW4gVkFSX0RFQ0wgb3IgUkVTVUxUX0RFQ0wsIHNldCB3aGVuIHNpZ25pZmljYW50IGNvZGUgbW92ZW1lbnQgcHJlY2x1ZGVzCisgICBhdHRlbXB0aW5nIHRvIHNoYXJlIHRoZSBzdGFjayBzbG90IHdpdGggc29tZSBvdGhlciB2YXJpYWJsZS4gICovCisjZGVmaW5lIERFQ0xfTk9OU0hBUkVBQkxFKE5PREUpIFwKKyAgKFRSRUVfQ0hFQ0syIChOT0RFLCBWQVJfREVDTCwgXAorCQlSRVNVTFRfREVDTCktPmRlY2xfY29tbW9uLmRlY2xfbm9uc2hhcmVhYmxlX2ZsYWcpCisKKy8qIEluIGEgQ0FMTF9FWFBSLCBtZWFucyB0aGF0IHRoZSBjYWxsIGlzIHRoZSBqdW1wIGZyb20gYSB0aHVuayB0byB0aGUKKyAgIHRodW5rZWQtdG8gZnVuY3Rpb24uICAqLworI2RlZmluZSBDQUxMX0ZST01fVEhVTktfUChOT0RFKSAoQ0FMTF9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5wcm90ZWN0ZWRfZmxhZykKKworLyogSW4gYSBDQUxMX0VYUFIsIGlmIHRoZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgaXMgQlVJTFRfSU5fQUxMT0NBLCBtZWFucyB0aGF0CisgICBpdCBoYXMgYmVlbiBidWlsdCBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIGEgdmFyaWFibGUtc2l6ZWQgb2JqZWN0LiAgKi8KKyNkZWZpbmUgQ0FMTF9BTExPQ0FfRk9SX1ZBUl9QKE5PREUpIFwKKyAgKENBTExfRVhQUl9DSEVDSyAoTk9ERSktPmJhc2UucHJvdGVjdGVkX2ZsYWcpCisKKy8qIEluIGEgdHlwZSwgbm9uemVybyBtZWFucyB0aGF0IGFsbCBvYmplY3RzIG9mIHRoZSB0eXBlIGFyZSBndWFyYW50ZWVkIGJ5IHRoZQorICAgbGFuZ3VhZ2Ugb3IgZnJvbnQtZW5kIHRvIGJlIHByb3Blcmx5IGFsaWduZWQsIHNvIHdlIGNhbiBpbmRpY2F0ZSB0aGF0IGEgTUVNCisgICBvZiB0aGlzIHR5cGUgaXMgYWxpZ25lZCBhdCBsZWFzdCB0byB0aGUgYWxpZ25tZW50IG9mIHRoZSB0eXBlLCBldmVuIGlmIGl0CisgICBkb2Vzbid0IGFwcGVhciB0aGF0IGl0IGlzLiAgV2Ugc2VlIHRoaXMsIGZvciBleGFtcGxlLCBpbiBvYmplY3Qtb3JpZW50ZWQKKyAgIGxhbmd1YWdlcyB3aGVyZSBhIHRhZyBmaWVsZCBtYXkgc2hvdyB0aGlzIGlzIGFuIG9iamVjdCBvZiBhIG1vcmUtYWxpZ25lZAorICAgdmFyaWFudCBvZiB0aGUgbW9yZSBnZW5lcmljIHR5cGUuCisKKyAgIEluIGFuIFNTQV9OQU1FIG5vZGUsIG5vbnplcm8gaWYgdGhlIFNTQV9OQU1FIG5vZGUgaXMgb24gdGhlIFNTQV9OQU1FCisgICBmcmVlbGlzdC4gICovCisjZGVmaW5lIFRZUEVfQUxJR05fT0soTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLm5vdGhyb3dfZmxhZykKKworLyogVXNlZCBpbiBjbGFzc2VzIGluIEMrKy4gICovCisjZGVmaW5lIFRSRUVfUFJJVkFURShOT0RFKSAoKE5PREUpLT5iYXNlLnByaXZhdGVfZmxhZykKKy8qIFVzZWQgaW4gY2xhc3NlcyBpbiBDKysuICovCisjZGVmaW5lIFRSRUVfUFJPVEVDVEVEKE5PREUpICgoTk9ERSktPmJhc2UucHJvdGVjdGVkX2ZsYWcpCisKKy8qIFRydWUgaWYgcmVmZXJlbmNlIHR5cGUgTk9ERSBpcyBhIEMrKyBydmFsdWUgcmVmZXJlbmNlLiAgKi8KKyNkZWZpbmUgVFlQRV9SRUZfSVNfUlZBTFVFKE5PREUpIFwKKyAgKFJFRkVSRU5DRV9UWVBFX0NIRUNLIChOT0RFKS0+YmFzZS5wcml2YXRlX2ZsYWcpCisKKy8qIE5vbnplcm8gaW4gYSBfREVDTCBpZiB0aGUgdXNlIG9mIHRoZSBuYW1lIGlzIGRlZmluZWQgYXMgYQorICAgZGVwcmVjYXRlZCBmZWF0dXJlIGJ5IF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKS4gICovCisjZGVmaW5lIFRSRUVfREVQUkVDQVRFRChOT0RFKSBcCisgICgoTk9ERSktPmJhc2UuZGVwcmVjYXRlZF9mbGFnKQorCisvKiBOb256ZXJvIGluIGFuIElERU5USUZJRVJfTk9ERSBpZiB0aGUgbmFtZSBpcyBhIGxvY2FsIGFsaWFzLCB3aG9zZQorICAgdXNlcyBhcmUgdG8gYmUgc3Vic3RpdHV0ZWQgZm9yIHVzZXMgb2YgdGhlIFRSRUVfQ0hBSU5lZCBpZGVudGlmaWVyLiAgKi8KKyNkZWZpbmUgSURFTlRJRklFUl9UUkFOU1BBUkVOVF9BTElBUyhOT0RFKSBcCisgIChJREVOVElGSUVSX05PREVfQ0hFQ0sgKE5PREUpLT5iYXNlLmRlcHJlY2F0ZWRfZmxhZykKKworLyogSW4gZml4ZWQtcG9pbnQgdHlwZXMsIG1lYW5zIGEgc2F0dXJhdGluZyB0eXBlLiAgKi8KKyNkZWZpbmUgVFlQRV9TQVRVUkFUSU5HKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+YmFzZS51LmJpdHMuc2F0dXJhdGluZ19mbGFnKQorCisvKiBUaGVzZSBmbGFncyBhcmUgYXZhaWxhYmxlIGZvciBlYWNoIGxhbmd1YWdlIGZyb250IGVuZCB0byB1c2UgaW50ZXJuYWxseS4gICovCisjZGVmaW5lIFRSRUVfTEFOR19GTEFHXzAoTk9ERSkgXAorICAoVFJFRV9OT1RfQ0hFQ0syKE5PREUsIFRSRUVfVkVDLCBTU0FfTkFNRSktPmJhc2UudS5iaXRzLmxhbmdfZmxhZ18wKQorI2RlZmluZSBUUkVFX0xBTkdfRkxBR18xKE5PREUpIFwKKyAgKFRSRUVfTk9UX0NIRUNLMihOT0RFLCBUUkVFX1ZFQywgU1NBX05BTUUpLT5iYXNlLnUuYml0cy5sYW5nX2ZsYWdfMSkKKyNkZWZpbmUgVFJFRV9MQU5HX0ZMQUdfMihOT0RFKSBcCisgIChUUkVFX05PVF9DSEVDSzIoTk9ERSwgVFJFRV9WRUMsIFNTQV9OQU1FKS0+YmFzZS51LmJpdHMubGFuZ19mbGFnXzIpCisjZGVmaW5lIFRSRUVfTEFOR19GTEFHXzMoTk9ERSkgXAorICAoVFJFRV9OT1RfQ0hFQ0syKE5PREUsIFRSRUVfVkVDLCBTU0FfTkFNRSktPmJhc2UudS5iaXRzLmxhbmdfZmxhZ18zKQorI2RlZmluZSBUUkVFX0xBTkdfRkxBR180KE5PREUpIFwKKyAgKFRSRUVfTk9UX0NIRUNLMihOT0RFLCBUUkVFX1ZFQywgU1NBX05BTUUpLT5iYXNlLnUuYml0cy5sYW5nX2ZsYWdfNCkKKyNkZWZpbmUgVFJFRV9MQU5HX0ZMQUdfNShOT0RFKSBcCisgIChUUkVFX05PVF9DSEVDSzIoTk9ERSwgVFJFRV9WRUMsIFNTQV9OQU1FKS0+YmFzZS51LmJpdHMubGFuZ19mbGFnXzUpCisjZGVmaW5lIFRSRUVfTEFOR19GTEFHXzYoTk9ERSkgXAorICAoVFJFRV9OT1RfQ0hFQ0syKE5PREUsIFRSRUVfVkVDLCBTU0FfTkFNRSktPmJhc2UudS5iaXRzLmxhbmdfZmxhZ182KQorDAorLyogRGVmaW5lIGFkZGl0aW9uYWwgZmllbGRzIGFuZCBhY2Nlc3NvcnMgZm9yIG5vZGVzIHJlcHJlc2VudGluZyBjb25zdGFudHMuICAqLworCisvKiBJbiBhbiBJTlRFR0VSX0NTVCBub2RlLiAgVGhlc2UgdHdvIHRvZ2V0aGVyIG1ha2UgYSAyLXdvcmQgaW50ZWdlci4KKyAgIElmIHRoZSBkYXRhIHR5cGUgaXMgc2lnbmVkLCB0aGUgdmFsdWUgaXMgc2lnbi1leHRlbmRlZCB0byAyIHdvcmRzCisgICBldmVuIHRob3VnaCBub3QgYWxsIG9mIHRoZW0gbWF5IHJlYWxseSBiZSBpbiB1c2UuCisgICBJbiBhbiB1bnNpZ25lZCBjb25zdGFudCBzaG9ydGVyIHRoYW4gMiB3b3JkcywgdGhlIGV4dHJhIGJpdHMgYXJlIDAuICAqLworI2RlZmluZSBUUkVFX0lOVF9DU1QoTk9ERSkgKElOVEVHRVJfQ1NUX0NIRUNLIChOT0RFKS0+aW50X2NzdC5pbnRfY3N0KQorI2RlZmluZSBUUkVFX0lOVF9DU1RfTE9XKE5PREUpIChUUkVFX0lOVF9DU1QgKE5PREUpLmxvdykKKyNkZWZpbmUgVFJFRV9JTlRfQ1NUX0hJR0goTk9ERSkgKFRSRUVfSU5UX0NTVCAoTk9ERSkuaGlnaCkKKworI2RlZmluZSBJTlRfQ1NUX0xUKEEsIEIpCQkJCVwKKyAgKFRSRUVfSU5UX0NTVF9ISUdIIChBKSA8IFRSRUVfSU5UX0NTVF9ISUdIIChCKQlcCisgICB8fCAoVFJFRV9JTlRfQ1NUX0hJR0ggKEEpID09IFRSRUVfSU5UX0NTVF9ISUdIIChCKQlcCisgICAgICAgJiYgVFJFRV9JTlRfQ1NUX0xPVyAoQSkgPCBUUkVFX0lOVF9DU1RfTE9XIChCKSkpCisKKyNkZWZpbmUgSU5UX0NTVF9MVF9VTlNJR05FRChBLCBCKQkJCQlcCisgICgoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIFRSRUVfSU5UX0NTVF9ISUdIIChBKQkJXAorICAgIDwgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIFRSRUVfSU5UX0NTVF9ISUdIIChCKSkJCVwKKyAgIHx8ICgoKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIFRSRUVfSU5UX0NTVF9ISUdIIChBKQkJXAorCT09ICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSBUUkVFX0lOVF9DU1RfSElHSCAoQikpCVwKKyAgICAgICAmJiBUUkVFX0lOVF9DU1RfTE9XIChBKSA8IFRSRUVfSU5UX0NTVF9MT1cgKEIpKSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9pbnRfY3N0IHsKKyAgc3RydWN0IHRyZWVfdHlwZWQgdHlwZWQ7CisgIGRvdWJsZV9pbnQgaW50X2NzdDsKK307CisKKy8qIEluIGEgUkVBTF9DU1Qgbm9kZS4gIHN0cnVjdCByZWFsX3ZhbHVlIGlzIGFuIG9wYXF1ZSBlbnRpdHksIHdpdGgKKyAgIG1hbmlwdWxhdG9ycyBkZWZpbmVkIGluIHJlYWwuaC4gIFdlIGRvbid0IHdhbnQgdHJlZS5oIGRlcGVuZGluZyBvbgorICAgcmVhbC5oIGFuZCB0cmFuc2l0aXZlbHkgb24gdG0uaC4gICovCitzdHJ1Y3QgcmVhbF92YWx1ZTsKKworI2RlZmluZSBUUkVFX1JFQUxfQ1NUX1BUUihOT0RFKSAoUkVBTF9DU1RfQ0hFQ0sgKE5PREUpLT5yZWFsX2NzdC5yZWFsX2NzdF9wdHIpCisjZGVmaW5lIFRSRUVfUkVBTF9DU1QoTk9ERSkgKCpUUkVFX1JFQUxfQ1NUX1BUUiAoTk9ERSkpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfcmVhbF9jc3QgeworICBzdHJ1Y3QgdHJlZV90eXBlZCB0eXBlZDsKKyAgc3RydWN0IHJlYWxfdmFsdWUgKiByZWFsX2NzdF9wdHI7Cit9OworCisvKiBJbiBhIEZJWEVEX0NTVCBub2RlLiAgKi8KK3N0cnVjdCBmaXhlZF92YWx1ZTsKKworI2RlZmluZSBUUkVFX0ZJWEVEX0NTVF9QVFIoTk9ERSkgXAorICAoRklYRURfQ1NUX0NIRUNLIChOT0RFKS0+Zml4ZWRfY3N0LmZpeGVkX2NzdF9wdHIpCisjZGVmaW5lIFRSRUVfRklYRURfQ1NUKE5PREUpICgqVFJFRV9GSVhFRF9DU1RfUFRSIChOT0RFKSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9maXhlZF9jc3QgeworICBzdHJ1Y3QgdHJlZV90eXBlZCB0eXBlZDsKKyAgc3RydWN0IGZpeGVkX3ZhbHVlICogZml4ZWRfY3N0X3B0cjsKK307CisKKy8qIEluIGEgU1RSSU5HX0NTVCAqLworLyogSW4gQyB0ZXJtcywgdGhpcyBpcyBzaXplb2YsIG5vdCBzdHJsZW4uICAqLworI2RlZmluZSBUUkVFX1NUUklOR19MRU5HVEgoTk9ERSkgKFNUUklOR19DU1RfQ0hFQ0sgKE5PREUpLT5zdHJpbmcubGVuZ3RoKQorI2RlZmluZSBUUkVFX1NUUklOR19QT0lOVEVSKE5PREUpIFwKKyAgKChjb25zdCBjaGFyICopKFNUUklOR19DU1RfQ0hFQ0sgKE5PREUpLT5zdHJpbmcuc3RyKSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9zdHJpbmcgeworICBzdHJ1Y3QgdHJlZV90eXBlZCB0eXBlZDsKKyAgaW50IGxlbmd0aDsKKyAgY2hhciBzdHJbMV07Cit9OworCisvKiBJbiBhIENPTVBMRVhfQ1NUIG5vZGUuICAqLworI2RlZmluZSBUUkVFX1JFQUxQQVJUKE5PREUpIChDT01QTEVYX0NTVF9DSEVDSyAoTk9ERSktPmNvbXBsZXgucmVhbCkKKyNkZWZpbmUgVFJFRV9JTUFHUEFSVChOT0RFKSAoQ09NUExFWF9DU1RfQ0hFQ0sgKE5PREUpLT5jb21wbGV4LmltYWcpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfY29tcGxleCB7CisgIHN0cnVjdCB0cmVlX3R5cGVkIHR5cGVkOworICB0cmVlIHJlYWw7CisgIHRyZWUgaW1hZzsKK307CisKKy8qIEluIGEgVkVDVE9SX0NTVCBub2RlLiAgKi8KKyNkZWZpbmUgVkVDVE9SX0NTVF9ORUxUUyhOT0RFKSAoVFlQRV9WRUNUT1JfU1VCUEFSVFMgKFRSRUVfVFlQRSAoTk9ERSkpKQorI2RlZmluZSBWRUNUT1JfQ1NUX0VMVFMoTk9ERSkgKFZFQ1RPUl9DU1RfQ0hFQ0sgKE5PREUpLT52ZWN0b3IuZWx0cykKKyNkZWZpbmUgVkVDVE9SX0NTVF9FTFQoTk9ERSxJRFgpIChWRUNUT1JfQ1NUX0NIRUNLIChOT0RFKS0+dmVjdG9yLmVsdHNbSURYXSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV92ZWN0b3IgeworICBzdHJ1Y3QgdHJlZV90eXBlZCB0eXBlZDsKKyAgdHJlZSBHVFkgKChsZW5ndGggKCJUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAoVFJFRV9UWVBFICgodHJlZSkmJWgpKSIpKSkgZWx0c1sxXTsKK307CisMCisjaW5jbHVkZSAic3ltdGFiLmgiCisKKy8qIERlZmluZSBmaWVsZHMgYW5kIGFjY2Vzc29ycyBmb3Igc29tZSBzcGVjaWFsLXB1cnBvc2UgdHJlZSBub2Rlcy4gICovCisKKyNkZWZpbmUgSURFTlRJRklFUl9MRU5HVEgoTk9ERSkgXAorICAoSURFTlRJRklFUl9OT0RFX0NIRUNLIChOT0RFKS0+aWRlbnRpZmllci5pZC5sZW4pCisjZGVmaW5lIElERU5USUZJRVJfUE9JTlRFUihOT0RFKSBcCisgICgoY29uc3QgY2hhciAqKSBJREVOVElGSUVSX05PREVfQ0hFQ0sgKE5PREUpLT5pZGVudGlmaWVyLmlkLnN0cikKKyNkZWZpbmUgSURFTlRJRklFUl9IQVNIX1ZBTFVFKE5PREUpIFwKKyAgKElERU5USUZJRVJfTk9ERV9DSEVDSyAoTk9ERSktPmlkZW50aWZpZXIuaWQuaGFzaF92YWx1ZSkKKworLyogVHJhbnNsYXRlIGEgaGFzaCB0YWJsZSBpZGVudGlmaWVyIHBvaW50ZXIgdG8gYSB0cmVlX2lkZW50aWZpZXIKKyAgIHBvaW50ZXIsIGFuZCB2aWNlIHZlcnNhLiAgKi8KKworI2RlZmluZSBIVF9JREVOVF9UT19HQ0NfSURFTlQoTk9ERSkgXAorICAoKHRyZWUpICgoY2hhciAqKSAoTk9ERSkgLSBzaXplb2YgKHN0cnVjdCB0cmVlX2NvbW1vbikpKQorI2RlZmluZSBHQ0NfSURFTlRfVE9fSFRfSURFTlQoTk9ERSkgKCYoKHN0cnVjdCB0cmVlX2lkZW50aWZpZXIgKikgKE5PREUpKS0+aWQpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfaWRlbnRpZmllciB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHN0cnVjdCBodF9pZGVudGlmaWVyIGlkOworfTsKKworLyogSW4gYSBUUkVFX0xJU1Qgbm9kZS4gICovCisjZGVmaW5lIFRSRUVfUFVSUE9TRShOT0RFKSAoVFJFRV9MSVNUX0NIRUNLIChOT0RFKS0+bGlzdC5wdXJwb3NlKQorI2RlZmluZSBUUkVFX1ZBTFVFKE5PREUpIChUUkVFX0xJU1RfQ0hFQ0sgKE5PREUpLT5saXN0LnZhbHVlKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2xpc3QgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICB0cmVlIHB1cnBvc2U7CisgIHRyZWUgdmFsdWU7Cit9OworCisvKiBJbiBhIFRSRUVfVkVDIG5vZGUuICAqLworI2RlZmluZSBUUkVFX1ZFQ19MRU5HVEgoTk9ERSkgKFRSRUVfVkVDX0NIRUNLIChOT0RFKS0+YmFzZS51Lmxlbmd0aCkKKyNkZWZpbmUgVFJFRV9WRUNfRU5EKE5PREUpIFwKKyAgKCh2b2lkKSBUUkVFX1ZFQ19DSEVDSyAoTk9ERSksICYoKE5PREUpLT52ZWMuYVsoTk9ERSktPnZlYy5iYXNlLnUubGVuZ3RoXSkpCisKKyNkZWZpbmUgVFJFRV9WRUNfRUxUKE5PREUsSSkgVFJFRV9WRUNfRUxUX0NIRUNLIChOT0RFLCBJKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3ZlYyB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisgIHRyZWUgR1RZICgobGVuZ3RoICgiVFJFRV9WRUNfTEVOR1RIICgodHJlZSkmJWgpIikpKSBhWzFdOworfTsKKworLyogSW4gYSBDT05TVFJVQ1RPUiBub2RlLiAgKi8KKyNkZWZpbmUgQ09OU1RSVUNUT1JfRUxUUyhOT0RFKSAoQ09OU1RSVUNUT1JfQ0hFQ0sgKE5PREUpLT5jb25zdHJ1Y3Rvci5lbHRzKQorI2RlZmluZSBDT05TVFJVQ1RPUl9FTFQoTk9ERSxJRFgpIFwKKyAgKCYoKkNPTlNUUlVDVE9SX0VMVFMgKE5PREUpKVtJRFhdKQorI2RlZmluZSBDT05TVFJVQ1RPUl9ORUxUUyhOT0RFKSBcCisgICh2ZWNfc2FmZV9sZW5ndGggKENPTlNUUlVDVE9SX0VMVFMgKE5PREUpKSkKKworLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSB2ZWN0b3IgViBvZiBDT05TVFJVQ1RPUl9FTFQgZWxlbWVudHMsIHlpZWxkaW5nIHRoZQorICAgdmFsdWUgb2YgZWFjaCBlbGVtZW50IChzdG9yZWQgd2l0aGluIFZBTCkuIElYIG11c3QgYmUgYSBzY3JhdGNoIHZhcmlhYmxlCisgICBvZiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUuICAqLworI2RlZmluZSBGT1JfRUFDSF9DT05TVFJVQ1RPUl9WQUxVRShWLCBJWCwgVkFMKSBcCisgIGZvciAoSVggPSAwOyAoSVggPj0gdmVjX3NhZmVfbGVuZ3RoIChWKSkgXAorCSAgICAgICA/IGZhbHNlIFwKKwkgICAgICAgOiAoKFZBTCA9ICgqKFYpKVtJWF0udmFsdWUpLCBcCisJICAgICAgIHRydWUpOyBcCisgICAgICAgKElYKSsrKQorCisvKiBJdGVyYXRlIHRocm91Z2ggdGhlIHZlY3RvciBWIG9mIENPTlNUUlVDVE9SX0VMVCBlbGVtZW50cywgeWllbGRpbmcgYm90aAorICAgdGhlIHZhbHVlIG9mIGVhY2ggZWxlbWVudCAoc3RvcmVkIHdpdGhpbiBWQUwpIGFuZCBpdHMgaW5kZXggKHN0b3JlZAorICAgd2l0aGluIElOREVYKS4gSVggbXVzdCBiZSBhIHNjcmF0Y2ggdmFyaWFibGUgb2YgdW5zaWduZWQgaW50ZWdlciB0eXBlLiAgKi8KKyNkZWZpbmUgRk9SX0VBQ0hfQ09OU1RSVUNUT1JfRUxUKFYsIElYLCBJTkRFWCwgVkFMKSBcCisgIGZvciAoSVggPSAwOyAoSVggPj0gdmVjX3NhZmVfbGVuZ3RoIChWKSkgXAorCSAgICAgICA/IGZhbHNlIFwKKwkgICAgICAgOiAoKCh2b2lkKSAoVkFMID0gKCpWKVtJWF0udmFsdWUpKSwgXAorCQkgIChJTkRFWCA9ICgqVilbSVhdLmluZGV4KSwgXAorCQkgIHRydWUpOyBcCisgICAgICAgKElYKSsrKQorCisvKiBBcHBlbmQgYSBuZXcgY29uc3RydWN0b3IgZWxlbWVudCB0byBWLCB3aXRoIHRoZSBzcGVjaWZpZWQgSU5ERVggYW5kIFZBTC4gICovCisjZGVmaW5lIENPTlNUUlVDVE9SX0FQUEVORF9FTFQoViwgSU5ERVgsIFZBTFVFKSBcCisgIGRvIHsgXAorICAgIGNvbnN0cnVjdG9yX2VsdCBfY2VfX18gPSB7SU5ERVgsIFZBTFVFfTsgXAorICAgIHZlY19zYWZlX3B1c2ggKChWKSwgX2NlX19fKTsgXAorICB9IHdoaWxlICgwKQorCisvKiBUcnVlIGlmIE5PREUsIGEgRklFTERfREVDTCwgaXMgdG8gYmUgcHJvY2Vzc2VkIGFzIGEgYml0ZmllbGQgZm9yCisgICBjb25zdHJ1Y3RvciBvdXRwdXQgcHVycG9zZXMuICAqLworI2RlZmluZSBDT05TVFJVQ1RPUl9CSVRGSUVMRF9QKE5PREUpIFwKKyAgKERFQ0xfQklUX0ZJRUxEIChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKSkgJiYgREVDTF9NT0RFIChOT0RFKSAhPSBCTEttb2RlKQorCisvKiBUcnVlIGlmIE5PREUgaXMgYSBjbG9iYmVyIHJpZ2h0IGhhbmQgc2lkZSwgYW4gZXhwcmVzc2lvbiBvZiBpbmRldGVybWluYXRlCisgICB2YWx1ZSB0aGF0IGNsb2JiZXJzIHRoZSBMSFMgaW4gYSBjb3B5IGluc3RydWN0aW9uLiAgV2UgdXNlIGEgdm9sYXRpbGUKKyAgIGVtcHR5IENPTlNUUlVDVE9SIGZvciB0aGlzLCBhcyBpdCBtYXRjaGVzIG1vc3Qgb2YgdGhlIG5lY2Vzc2FyeSBzZW1hbnRpYy4KKyAgIEluIHBhcnRpY3VsYXIgdGhlIHZvbGF0aWxlIGZsYWcgY2F1c2VzIHVzIHRvIG5vdCBwcmVtYXR1cmVseSByZW1vdmUKKyAgIHN1Y2ggY2xvYmJlciBpbnN0cnVjdGlvbnMuICAqLworI2RlZmluZSBUUkVFX0NMT0JCRVJfUChOT0RFKSBcCisgIChUUkVFX0NPREUgKE5PREUpID09IENPTlNUUlVDVE9SICYmIFRSRUVfVEhJU19WT0xBVElMRSAoTk9ERSkpCisKKy8qIEEgc2luZ2xlIGVsZW1lbnQgb2YgYSBDT05TVFJVQ1RPUi4gVkFMVUUgaG9sZHMgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUKKyAgIGVsZW1lbnQuIElOREVYIGNhbiBvcHRpb25hbGx5IGRlc2lnbiB0aGUgcG9zaXRpb24gb2YgVkFMVUU6IGluIGFycmF5cywKKyAgIGl0IGlzIHRoZSBpbmRleCB3aGVyZSBWQUxVRSBoYXMgdG8gYmUgcGxhY2VkOyBpbiBzdHJ1Y3R1cmVzLCBpdCBpcyB0aGUKKyAgIEZJRUxEX0RFQ0wgb2YgdGhlIG1lbWJlci4gICovCit0eXBlZGVmIHN0cnVjdCBHVFkoKCkpIGNvbnN0cnVjdG9yX2VsdF9kIHsKKyAgdHJlZSBpbmRleDsKKyAgdHJlZSB2YWx1ZTsKK30gY29uc3RydWN0b3JfZWx0OworCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfY29uc3RydWN0b3IgeworICBzdHJ1Y3QgdHJlZV90eXBlZCB0eXBlZDsKKyAgdmVjPGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICplbHRzOworfTsKKworLyogRGVmaW5lIGZpZWxkcyBhbmQgYWNjZXNzb3JzIGZvciBzb21lIG5vZGVzIHRoYXQgcmVwcmVzZW50IGV4cHJlc3Npb25zLiAgKi8KKworLyogTm9uemVybyBpZiBOT0RFIGlzIGFuIGVtcHR5IHN0YXRlbWVudCAoTk9QX0VYUFIgPDA+KS4gICovCisjZGVmaW5lIElTX0VNUFRZX1NUTVQoTk9ERSkJKFRSRUVfQ09ERSAoTk9ERSkgPT0gTk9QX0VYUFIgXAorCQkJCSAmJiBWT0lEX1RZUEVfUCAoVFJFRV9UWVBFIChOT0RFKSkgXAorCQkJCSAmJiBpbnRlZ2VyX3plcm9wIChUUkVFX09QRVJBTkQgKE5PREUsIDApKSkKKworLyogSW4gb3JkaW5hcnkgZXhwcmVzc2lvbiBub2Rlcy4gICovCisjZGVmaW5lIFRSRUVfT1BFUkFORF9MRU5HVEgoTk9ERSkgdHJlZV9vcGVyYW5kX2xlbmd0aCAoTk9ERSkKKyNkZWZpbmUgVFJFRV9PUEVSQU5EKE5PREUsIEkpIFRSRUVfT1BFUkFORF9DSEVDSyAoTk9ERSwgSSkKKworLyogSW4gYSB0Y2NfdmxfZXhwIG5vZGUsIG9wZXJhbmQgMCBpcyBhbiBJTlRfQ1NUIG5vZGUgaG9sZGluZyB0aGUgb3BlcmFuZAorICAgbGVuZ3RoLiAgSXRzIHZhbHVlIGluY2x1ZGVzIHRoZSBsZW5ndGggb3BlcmFuZCBpdHNlbGY7IHRoYXQgaXMsCisgICB0aGUgbWluaW11bSB2YWxpZCBsZW5ndGggaXMgMS4KKyAgIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGJ5cGFzcyB0aGUgdXNlIG9mIFRSRUVfT1BFUkFORCB0byBhY2Nlc3MKKyAgIHRoYXQgZmllbGQgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluIGV4cGFuZGluZyB0aGUgbWFjcm9zLiAgKi8KKyNkZWZpbmUgVkxfRVhQX09QRVJBTkRfTEVOR1RIKE5PREUpIFwKKyAgKChpbnQpVFJFRV9JTlRfQ1NUX0xPVyAoVkxfRVhQX0NIRUNLIChOT0RFKS0+ZXhwLm9wZXJhbmRzWzBdKSkKKworLyogTm9uemVybyBpZiBpc19naW1wbGVfZGVidWcoKSBtYXkgcG9zc2libHkgaG9sZC4gICovCisjZGVmaW5lIE1BWV9IQVZFX0RFQlVHX1NUTVRTICAgIChmbGFnX3Zhcl90cmFja2luZ19hc3NpZ25tZW50cykKKworLyogSW4gYSBMT09QX0VYUFIgbm9kZS4gICovCisjZGVmaW5lIExPT1BfRVhQUl9CT0RZKE5PREUpIFRSRUVfT1BFUkFORF9DSEVDS19DT0RFIChOT0RFLCBMT09QX0VYUFIsIDApCisKKy8qIFRoZSBzb3VyY2UgbG9jYXRpb24gb2YgdGhpcyBleHByZXNzaW9uLiAgTm9uLXRyZWVfZXhwIG5vZGVzIHN1Y2ggYXMKKyAgIGRlY2xzIGFuZCBjb25zdGFudHMgY2FuIGJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBsb2NhdGlvbnMsIHNvCisgICByZXR1cm4gbm90aGluZy4gICovCisjZGVmaW5lIEVYUFJfTE9DQVRJT04oTk9ERSkgXAorICAoQ0FOX0hBVkVfTE9DQVRJT05fUCAoKE5PREUpKSA/IChOT0RFKS0+ZXhwLmxvY3VzIDogVU5LTk9XTl9MT0NBVElPTikKKyNkZWZpbmUgU0VUX0VYUFJfTE9DQVRJT04oTk9ERSwgTE9DVVMpIEVYUFJfQ0hFQ0sgKChOT0RFKSktPmV4cC5sb2N1cyA9IChMT0NVUykKKyNkZWZpbmUgRVhQUl9IQVNfTE9DQVRJT04oTk9ERSkgKExPQ0FUSU9OX0xPQ1VTIChFWFBSX0xPQ0FUSU9OIChOT0RFKSkJXAorICAhPSBVTktOT1dOX0xPQ0FUSU9OKQorLyogVGhlIGxvY2F0aW9uIHRvIGJlIHVzZWQgaW4gYSBkaWFnbm9zdGljIGFib3V0IHRoaXMgZXhwcmVzc2lvbi4gIERvIG5vdAorICAgdXNlIHRoaXMgbWFjcm8gaWYgdGhlIGxvY2F0aW9uIHdpbGwgYmUgYXNzaWduZWQgdG8gb3RoZXIgZXhwcmVzc2lvbnMuICAqLworI2RlZmluZSBFWFBSX0xPQ19PUl9IRVJFKE5PREUpIChFWFBSX0hBU19MT0NBVElPTiAoTk9ERSkgXAorCQkJCT8gKE5PREUpLT5leHAubG9jdXMgOiBpbnB1dF9sb2NhdGlvbikKKyNkZWZpbmUgRVhQUl9MT0NfT1JfTE9DKE5PREUsIExPQ1VTKSAoRVhQUl9IQVNfTE9DQVRJT04gKE5PREUpIFwKKwkJCQkgICAgICA/IChOT0RFKS0+ZXhwLmxvY3VzIDogKExPQ1VTKSkKKyNkZWZpbmUgRVhQUl9GSUxFTkFNRShOT0RFKSBMT0NBVElPTl9GSUxFIChFWFBSX0NIRUNLICgoTk9ERSkpLT5leHAubG9jdXMpCisjZGVmaW5lIEVYUFJfTElORU5PKE5PREUpIExPQ0FUSU9OX0xJTkUgKEVYUFJfQ0hFQ0sgKE5PREUpLT5leHAubG9jdXMpCisKKy8qIFRydWUgaWYgYSB0cmVlIGlzIGFuIGV4cHJlc3Npb24gb3Igc3RhdGVtZW50IHRoYXQgY2FuIGhhdmUgYQorICAgbG9jYXRpb24uICAqLworI2RlZmluZSBDQU5fSEFWRV9MT0NBVElPTl9QKE5PREUpICgoTk9ERSkgJiYgRVhQUl9QIChOT0RFKSkKKworZXh0ZXJuIHZvaWQgcHJvdGVjdGVkX3NldF9leHByX2xvY2F0aW9uICh0cmVlLCBsb2NhdGlvbl90KTsKKworLyogSW4gYSBUQVJHRVRfRVhQUiBub2RlLiAgKi8KKyNkZWZpbmUgVEFSR0VUX0VYUFJfU0xPVChOT0RFKSBUUkVFX09QRVJBTkRfQ0hFQ0tfQ09ERSAoTk9ERSwgVEFSR0VUX0VYUFIsIDApCisjZGVmaW5lIFRBUkdFVF9FWFBSX0lOSVRJQUwoTk9ERSkgVFJFRV9PUEVSQU5EX0NIRUNLX0NPREUgKE5PREUsIFRBUkdFVF9FWFBSLCAxKQorI2RlZmluZSBUQVJHRVRfRVhQUl9DTEVBTlVQKE5PREUpIFRSRUVfT1BFUkFORF9DSEVDS19DT0RFIChOT0RFLCBUQVJHRVRfRVhQUiwgMikKKworLyogREVDTF9FWFBSIGFjY2Vzc29yLiBUaGlzIGdpdmVzIGFjY2VzcyB0byB0aGUgREVDTCBhc3NvY2lhdGVkIHdpdGgKKyAgIHRoZSBnaXZlbiBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuICAqLworI2RlZmluZSBERUNMX0VYUFJfREVDTChOT0RFKSAgICBUUkVFX09QRVJBTkQgKERFQ0xfRVhQUl9DSEVDSyAoTk9ERSksIDApCisKKyNkZWZpbmUgRVhJVF9FWFBSX0NPTkQoTk9ERSkJICAgICBUUkVFX09QRVJBTkQgKEVYSVRfRVhQUl9DSEVDSyAoTk9ERSksIDApCisKKy8qIENPTVBPVU5EX0xJVEVSQUxfRVhQUiBhY2Nlc3NvcnMuICAqLworI2RlZmluZSBDT01QT1VORF9MSVRFUkFMX0VYUFJfREVDTF9FWFBSKE5PREUpCQlcCisgIFRSRUVfT1BFUkFORCAoQ09NUE9VTkRfTElURVJBTF9FWFBSX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgQ09NUE9VTkRfTElURVJBTF9FWFBSX0RFQ0woTk9ERSkJCQlcCisgIERFQ0xfRVhQUl9ERUNMIChDT01QT1VORF9MSVRFUkFMX0VYUFJfREVDTF9FWFBSIChOT0RFKSkKKworLyogU1dJVENIX0VYUFIgYWNjZXNzb3JzLiBUaGVzZSBnaXZlIGFjY2VzcyB0byB0aGUgY29uZGl0aW9uLCBib2R5IGFuZAorICAgb3JpZ2luYWwgY29uZGl0aW9uIHR5cGUgKGJlZm9yZSBhbnkgY29tcGlsZXIgY29udmVyc2lvbnMpCisgICBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudCwgcmVzcGVjdGl2ZWx5LiAgKi8KKyNkZWZpbmUgU1dJVENIX0NPTkQoTk9ERSkgICAgICAgVFJFRV9PUEVSQU5EIChTV0lUQ0hfRVhQUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIFNXSVRDSF9CT0RZKE5PREUpICAgICAgIFRSRUVfT1BFUkFORCAoU1dJVENIX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBTV0lUQ0hfTEFCRUxTKE5PREUpICAgICBUUkVFX09QRVJBTkQgKFNXSVRDSF9FWFBSX0NIRUNLIChOT0RFKSwgMikKKworLyogQ0FTRV9MQUJFTF9FWFBSIGFjY2Vzc29ycy4gVGhlc2UgZ2l2ZSBhY2Nlc3MgdG8gdGhlIGhpZ2ggYW5kIGxvdyB2YWx1ZXMKKyAgIG9mIGEgY2FzZSBsYWJlbCwgcmVzcGVjdGl2ZWx5LiAgKi8KKyNkZWZpbmUgQ0FTRV9MT1coTk9ERSkgICAgICAgICAgCVRSRUVfT1BFUkFORCAoQ0FTRV9MQUJFTF9FWFBSX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgQ0FTRV9ISUdIKE5PREUpICAgICAgICAgCVRSRUVfT1BFUkFORCAoQ0FTRV9MQUJFTF9FWFBSX0NIRUNLIChOT0RFKSwgMSkKKyNkZWZpbmUgQ0FTRV9MQUJFTChOT0RFKQkJVFJFRV9PUEVSQU5EIChDQVNFX0xBQkVMX0VYUFJfQ0hFQ0sgKE5PREUpLCAyKQorI2RlZmluZSBDQVNFX0NIQUlOKE5PREUpCQlUUkVFX09QRVJBTkQgKENBU0VfTEFCRUxfRVhQUl9DSEVDSyAoTk9ERSksIDMpCisKKy8qIFRoZSBvcGVyYW5kcyBvZiBhIFRBUkdFVF9NRU1fUkVGLiAgT3BlcmFuZHMgMCBhbmQgMSBoYXZlIHRvIG1hdGNoCisgICBjb3JyZXNwb25kaW5nIE1FTV9SRUYgb3BlcmFuZHMuICAqLworI2RlZmluZSBUTVJfQkFTRShOT0RFKSAoVFJFRV9PUEVSQU5EIChUQVJHRVRfTUVNX1JFRl9DSEVDSyAoTk9ERSksIDApKQorI2RlZmluZSBUTVJfT0ZGU0VUKE5PREUpIChUUkVFX09QRVJBTkQgKFRBUkdFVF9NRU1fUkVGX0NIRUNLIChOT0RFKSwgMSkpCisjZGVmaW5lIFRNUl9JTkRFWChOT0RFKSAoVFJFRV9PUEVSQU5EIChUQVJHRVRfTUVNX1JFRl9DSEVDSyAoTk9ERSksIDIpKQorI2RlZmluZSBUTVJfU1RFUChOT0RFKSAoVFJFRV9PUEVSQU5EIChUQVJHRVRfTUVNX1JFRl9DSEVDSyAoTk9ERSksIDMpKQorI2RlZmluZSBUTVJfSU5ERVgyKE5PREUpIChUUkVFX09QRVJBTkQgKFRBUkdFVF9NRU1fUkVGX0NIRUNLIChOT0RFKSwgNCkpCisKKy8qIFRoZSBvcGVyYW5kcyBvZiBhIEJJTkRfRVhQUi4gICovCisjZGVmaW5lIEJJTkRfRVhQUl9WQVJTKE5PREUpIChUUkVFX09QRVJBTkQgKEJJTkRfRVhQUl9DSEVDSyAoTk9ERSksIDApKQorI2RlZmluZSBCSU5EX0VYUFJfQk9EWShOT0RFKSAoVFJFRV9PUEVSQU5EIChCSU5EX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKSkKKyNkZWZpbmUgQklORF9FWFBSX0JMT0NLKE5PREUpIChUUkVFX09QRVJBTkQgKEJJTkRfRVhQUl9DSEVDSyAoTk9ERSksIDIpKQorCisvKiBHT1RPX0VYUFIgYWNjZXNzb3IuIFRoaXMgZ2l2ZXMgYWNjZXNzIHRvIHRoZSBsYWJlbCBhc3NvY2lhdGVkIHdpdGgKKyAgIGEgZ290byBzdGF0ZW1lbnQuICAqLworI2RlZmluZSBHT1RPX0RFU1RJTkFUSU9OKE5PREUpICBUUkVFX09QRVJBTkQgKChOT0RFKSwgMCkKKworLyogQVNNX0VYUFIgYWNjZXNzb3JzLiBBU01fU1RSSU5HIHJldHVybnMgYSBTVFJJTkdfQ1NUIGZvciB0aGUKKyAgIGluc3RydWN0aW9uIChlLmcuLCAibW92IHgsIHkiKS4gQVNNX09VVFBVVFMsIEFTTV9JTlBVVFMsIGFuZAorICAgQVNNX0NMT0JCRVJTIHJlcHJlc2VudCB0aGUgb3V0cHV0cywgaW5wdXRzLCBhbmQgY2xvYmJlcnMgZm9yIHRoZQorICAgc3RhdGVtZW50LiAgKi8KKyNkZWZpbmUgQVNNX1NUUklORyhOT0RFKSAgICAgICAgVFJFRV9PUEVSQU5EIChBU01fRVhQUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIEFTTV9PVVRQVVRTKE5PREUpICAgICAgIFRSRUVfT1BFUkFORCAoQVNNX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBBU01fSU5QVVRTKE5PREUpICAgICAgICBUUkVFX09QRVJBTkQgKEFTTV9FWFBSX0NIRUNLIChOT0RFKSwgMikKKyNkZWZpbmUgQVNNX0NMT0JCRVJTKE5PREUpICAgICAgVFJFRV9PUEVSQU5EIChBU01fRVhQUl9DSEVDSyAoTk9ERSksIDMpCisjZGVmaW5lIEFTTV9MQUJFTFMoTk9ERSkJVFJFRV9PUEVSQU5EIChBU01fRVhQUl9DSEVDSyAoTk9ERSksIDQpCisvKiBOb256ZXJvIGlmIHdlIHdhbnQgdG8gY3JlYXRlIGFuIEFTTV9JTlBVVCBpbnN0ZWFkIG9mIGFuCisgICBBU01fT1BFUkFORCB3aXRoIG5vIG9wZXJhbmRzLiAgKi8KKyNkZWZpbmUgQVNNX0lOUFVUX1AoTk9ERSkgKEFTTV9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5zdGF0aWNfZmxhZykKKyNkZWZpbmUgQVNNX1ZPTEFUSUxFX1AoTk9ERSkgKEFTTV9FWFBSX0NIRUNLIChOT0RFKS0+YmFzZS5wdWJsaWNfZmxhZykKKworLyogQ09ORF9FWFBSIGFjY2Vzc29ycy4gICovCisjZGVmaW5lIENPTkRfRVhQUl9DT05EKE5PREUpCShUUkVFX09QRVJBTkQgKENPTkRfRVhQUl9DSEVDSyAoTk9ERSksIDApKQorI2RlZmluZSBDT05EX0VYUFJfVEhFTihOT0RFKQkoVFJFRV9PUEVSQU5EIChDT05EX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKSkKKyNkZWZpbmUgQ09ORF9FWFBSX0VMU0UoTk9ERSkJKFRSRUVfT1BFUkFORCAoQ09ORF9FWFBSX0NIRUNLIChOT0RFKSwgMikpCisKKy8qIEFjY2Vzc29ycyBmb3IgdGhlIGNoYWlucyBvZiByZWN1cnJlbmNlcy4gICovCisjZGVmaW5lIENIUkVDX1ZBUihOT0RFKSAgICAgICAgICAgVFJFRV9PUEVSQU5EIChQT0xZTk9NSUFMX0NIUkVDX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgQ0hSRUNfTEVGVChOT0RFKSAgICAgICAgICBUUkVFX09QRVJBTkQgKFBPTFlOT01JQUxfQ0hSRUNfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBDSFJFQ19SSUdIVChOT0RFKSAgICAgICAgIFRSRUVfT1BFUkFORCAoUE9MWU5PTUlBTF9DSFJFQ19DSEVDSyAoTk9ERSksIDIpCisjZGVmaW5lIENIUkVDX1ZBUklBQkxFKE5PREUpICAgICAgVFJFRV9JTlRfQ1NUX0xPVyAoQ0hSRUNfVkFSIChOT0RFKSkKKworLyogTEFCRUxfRVhQUiBhY2Nlc3Nvci4gVGhpcyBnaXZlcyBhY2Nlc3MgdG8gdGhlIGxhYmVsIGFzc29jaWF0ZWQgd2l0aAorICAgdGhlIGdpdmVuIGxhYmVsIGV4cHJlc3Npb24uICAqLworI2RlZmluZSBMQUJFTF9FWFBSX0xBQkVMKE5PREUpICBUUkVFX09QRVJBTkQgKExBQkVMX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKQorCisvKiBWREVGX0VYUFIgYWNjZXNzb3JzIGFyZSBzcGVjaWZpZWQgaW4gdHJlZS1mbG93LmgsIGFsb25nIHdpdGggdGhlIG90aGVyCisgICBhY2Nlc3NvcnMgZm9yIFNTQSBvcGVyYW5kcy4gICovCisKKy8qIENBVENIX0VYUFIgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgQ0FUQ0hfVFlQRVMoTk9ERSkJVFJFRV9PUEVSQU5EIChDQVRDSF9FWFBSX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgQ0FUQ0hfQk9EWShOT0RFKQlUUkVFX09QRVJBTkQgKENBVENIX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBFSF9GSUxURVJfRVhQUiBhY2Nlc3NvcnMuICAqLworI2RlZmluZSBFSF9GSUxURVJfVFlQRVMoTk9ERSkJVFJFRV9PUEVSQU5EIChFSF9GSUxURVJfRVhQUl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIEVIX0ZJTFRFUl9GQUlMVVJFKE5PREUpCVRSRUVfT1BFUkFORCAoRUhfRklMVEVSX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBPQkpfVFlQRV9SRUYgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgT0JKX1RZUEVfUkVGX0VYUFIoTk9ERSkJICBUUkVFX09QRVJBTkQgKE9CSl9UWVBFX1JFRl9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIE9CSl9UWVBFX1JFRl9PQkpFQ1QoTk9ERSkgVFJFRV9PUEVSQU5EIChPQkpfVFlQRV9SRUZfQ0hFQ0sgKE5PREUpLCAxKQorI2RlZmluZSBPQkpfVFlQRV9SRUZfVE9LRU4oTk9ERSkgIFRSRUVfT1BFUkFORCAoT0JKX1RZUEVfUkVGX0NIRUNLIChOT0RFKSwgMikKKworLyogQVNTRVJUX0VYUFIgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgQVNTRVJUX0VYUFJfVkFSKE5PREUpCVRSRUVfT1BFUkFORCAoQVNTRVJUX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBBU1NFUlRfRVhQUl9DT05EKE5PREUpCVRSRUVfT1BFUkFORCAoQVNTRVJUX0VYUFJfQ0hFQ0sgKE5PREUpLCAxKQorCisvKiBDQUxMX0VYUFIgYWNjZXNzb3JzLgorICovCisjZGVmaW5lIENBTExfRVhQUl9GTihOT0RFKSBUUkVFX09QRVJBTkQgKENBTExfRVhQUl9DSEVDSyAoTk9ERSksIDEpCisjZGVmaW5lIENBTExfRVhQUl9TVEFUSUNfQ0hBSU4oTk9ERSkgVFJFRV9PUEVSQU5EIChDQUxMX0VYUFJfQ0hFQ0sgKE5PREUpLCAyKQorI2RlZmluZSBDQUxMX0VYUFJfQVJHKE5PREUsIEkpIFRSRUVfT1BFUkFORCAoQ0FMTF9FWFBSX0NIRUNLIChOT0RFKSwgKEkpICsgMykKKyNkZWZpbmUgY2FsbF9leHByX25hcmdzKE5PREUpIChWTF9FWFBfT1BFUkFORF9MRU5HVEgoTk9ERSkgLSAzKQorCisvKiBDQUxMX0VYUFJfQVJHUCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYXJndW1lbnQgdmVjdG9yIGZvciBOT0RFLgorICAgV2UgY2FuJ3QgdXNlICZDQUxMX0VYUFJfQVJHIChOT0RFLCAwKSBiZWNhdXNlIHRoYXQgd2lsbCBjb21wbGFpbiBpZgorICAgdGhlIGFyZ3VtZW50IGNvdW50IGlzIHplcm8gd2hlbiBjaGVja2luZyBpcyBlbmFibGVkLiAgSW5zdGVhZCwgZG8KKyAgIHRoZSBwb2ludGVyIGFyaXRobWV0aWMgdG8gYWR2YW5jZSBwYXN0IHRoZSAzIGZpeGVkIG9wZXJhbmRzIGluIGEKKyAgIENBTExfRVhQUi4gIFRoYXQgcHJvZHVjZXMgYSB2YWxpZCBwb2ludGVyIHRvIGp1c3QgcGFzdCB0aGUgZW5kIG9mIHRoZQorICAgb3BlcmFuZCBhcnJheSwgZXZlbiBpZiBpdCdzIG5vdCB2YWxpZCB0byBkZXJlZmVyZW5jZSBpdC4gICovCisjZGVmaW5lIENBTExfRVhQUl9BUkdQKE5PREUpIFwKKyAgKCYoVFJFRV9PUEVSQU5EIChDQUxMX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKSkgKyAzKQorCisvKiBUTSBkaXJlY3RpdmVzIGFuZCBhY2Nlc3NvcnMuICAqLworI2RlZmluZSBUUkFOU0FDVElPTl9FWFBSX0JPRFkoTk9ERSkgXAorICBUUkVFX09QRVJBTkQgKFRSQU5TQUNUSU9OX0VYUFJfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBUUkFOU0FDVElPTl9FWFBSX09VVEVSKE5PREUpIFwKKyAgKFRSQU5TQUNUSU9OX0VYUFJfQ0hFQ0sgKE5PREUpLT5iYXNlLnN0YXRpY19mbGFnKQorI2RlZmluZSBUUkFOU0FDVElPTl9FWFBSX1JFTEFYRUQoTk9ERSkgXAorICAoVFJBTlNBQ1RJT05fRVhQUl9DSEVDSyAoTk9ERSktPmJhc2UucHVibGljX2ZsYWcpCisKKy8qIE9wZW5NUCBkaXJlY3RpdmUgYW5kIGNsYXVzZSBhY2Nlc3NvcnMuICAqLworCisjZGVmaW5lIE9NUF9CT0RZKE5PREUpIFwKKyAgVFJFRV9PUEVSQU5EIChUUkVFX1JBTkdFX0NIRUNLIChOT0RFLCBPTVBfUEFSQUxMRUwsIE9NUF9DUklUSUNBTCksIDApCisjZGVmaW5lIE9NUF9DTEFVU0VTKE5PREUpIFwKKyAgVFJFRV9PUEVSQU5EIChUUkVFX1JBTkdFX0NIRUNLIChOT0RFLCBPTVBfUEFSQUxMRUwsIE9NUF9TSU5HTEUpLCAxKQorCisjZGVmaW5lIE9NUF9QQVJBTExFTF9CT0RZKE5PREUpICAgIFRSRUVfT1BFUkFORCAoT01QX1BBUkFMTEVMX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgT01QX1BBUkFMTEVMX0NMQVVTRVMoTk9ERSkgVFJFRV9PUEVSQU5EIChPTVBfUEFSQUxMRUxfQ0hFQ0sgKE5PREUpLCAxKQorCisjZGVmaW5lIE9NUF9UQVNLX0JPRFkoTk9ERSkJICAgVFJFRV9PUEVSQU5EIChPTVBfVEFTS19DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIE9NUF9UQVNLX0NMQVVTRVMoTk9ERSkJICAgVFJFRV9PUEVSQU5EIChPTVBfVEFTS19DSEVDSyAoTk9ERSksIDEpCisKKyNkZWZpbmUgT01QX1RBU0tSRUdfQ0hFQ0soTk9ERSkJICBUUkVFX1JBTkdFX0NIRUNLIChOT0RFLCBPTVBfUEFSQUxMRUwsIE9NUF9UQVNLKQorI2RlZmluZSBPTVBfVEFTS1JFR19CT0RZKE5PREUpICAgIFRSRUVfT1BFUkFORCAoT01QX1RBU0tSRUdfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBPTVBfVEFTS1JFR19DTEFVU0VTKE5PREUpIFRSRUVfT1BFUkFORCAoT01QX1RBU0tSRUdfQ0hFQ0sgKE5PREUpLCAxKQorCisjZGVmaW5lIE9NUF9GT1JfQk9EWShOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9GT1JfQ0hFQ0sgKE5PREUpLCAwKQorI2RlZmluZSBPTVBfRk9SX0NMQVVTRVMoTk9ERSkJICAgVFJFRV9PUEVSQU5EIChPTVBfRk9SX0NIRUNLIChOT0RFKSwgMSkKKyNkZWZpbmUgT01QX0ZPUl9JTklUKE5PREUpCSAgIFRSRUVfT1BFUkFORCAoT01QX0ZPUl9DSEVDSyAoTk9ERSksIDIpCisjZGVmaW5lIE9NUF9GT1JfQ09ORChOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9GT1JfQ0hFQ0sgKE5PREUpLCAzKQorI2RlZmluZSBPTVBfRk9SX0lOQ1IoTk9ERSkJICAgVFJFRV9PUEVSQU5EIChPTVBfRk9SX0NIRUNLIChOT0RFKSwgNCkKKyNkZWZpbmUgT01QX0ZPUl9QUkVfQk9EWShOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9GT1JfQ0hFQ0sgKE5PREUpLCA1KQorCisjZGVmaW5lIE9NUF9TRUNUSU9OU19CT0RZKE5PREUpICAgIFRSRUVfT1BFUkFORCAoT01QX1NFQ1RJT05TX0NIRUNLIChOT0RFKSwgMCkKKyNkZWZpbmUgT01QX1NFQ1RJT05TX0NMQVVTRVMoTk9ERSkgVFJFRV9PUEVSQU5EIChPTVBfU0VDVElPTlNfQ0hFQ0sgKE5PREUpLCAxKQorCisjZGVmaW5lIE9NUF9TRUNUSU9OX0JPRFkoTk9ERSkJICAgVFJFRV9PUEVSQU5EIChPTVBfU0VDVElPTl9DSEVDSyAoTk9ERSksIDApCisKKyNkZWZpbmUgT01QX1NJTkdMRV9CT0RZKE5PREUpCSAgIFRSRUVfT1BFUkFORCAoT01QX1NJTkdMRV9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIE9NUF9TSU5HTEVfQ0xBVVNFUyhOT0RFKSAgIFRSRUVfT1BFUkFORCAoT01QX1NJTkdMRV9DSEVDSyAoTk9ERSksIDEpCisKKyNkZWZpbmUgT01QX01BU1RFUl9CT0RZKE5PREUpCSAgIFRSRUVfT1BFUkFORCAoT01QX01BU1RFUl9DSEVDSyAoTk9ERSksIDApCisKKyNkZWZpbmUgT01QX09SREVSRURfQk9EWShOT0RFKQkgICBUUkVFX09QRVJBTkQgKE9NUF9PUkRFUkVEX0NIRUNLIChOT0RFKSwgMCkKKworI2RlZmluZSBPTVBfQ1JJVElDQUxfQk9EWShOT0RFKSAgICBUUkVFX09QRVJBTkQgKE9NUF9DUklUSUNBTF9DSEVDSyAoTk9ERSksIDApCisjZGVmaW5lIE9NUF9DUklUSUNBTF9OQU1FKE5PREUpICAgIFRSRUVfT1BFUkFORCAoT01QX0NSSVRJQ0FMX0NIRUNLIChOT0RFKSwgMSkKKworI2RlZmluZSBPTVBfQ0xBVVNFX0NIQUlOKE5PREUpICAgICBUUkVFX0NIQUlOIChPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSkKKyNkZWZpbmUgT01QX0NMQVVTRV9ERUNMKE5PREUpICAgICAgCQkJCQlcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9SQU5HRV9DSEVDSyAoT01QX0NMQVVTRV9DSEVDSyAoTk9ERSksCVwKKwkJCQkJICAgICAgT01QX0NMQVVTRV9QUklWQVRFLAlcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPTVBfQ0xBVVNFX0NPUFlQUklWQVRFKSwgMCkKKyNkZWZpbmUgT01QX0NMQVVTRV9IQVNfTE9DQVRJT04oTk9ERSkgXAorICAoTE9DQVRJT05fTE9DVVMgKChPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSktPm9tcF9jbGF1c2UubG9jdXMpCQlcCisgICE9IFVOS05PV05fTE9DQVRJT04pCisjZGVmaW5lIE9NUF9DTEFVU0VfTE9DQVRJT04oTk9ERSkgIChPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSktPm9tcF9jbGF1c2UubG9jdXMKKworLyogVHJ1ZSBvbiBhbiBPTVBfU0VDVElPTiBzdGF0ZW1lbnQgdGhhdCB3YXMgdGhlIGxhc3QgbGV4aWNhbCBtZW1iZXIuCisgICBUaGlzIHN0YXR1cyBpcyBtZWFuaW5nZnVsIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBsYXN0cHJpdmF0ZS4gICovCisjZGVmaW5lIE9NUF9TRUNUSU9OX0xBU1QoTk9ERSkgXAorICAoT01QX1NFQ1RJT05fQ0hFQ0sgKE5PREUpLT5iYXNlLnByaXZhdGVfZmxhZykKKworLyogVHJ1ZSBvbiBhbiBPTVBfUEFSQUxMRUwgc3RhdGVtZW50IGlmIGl0IHJlcHJlc2VudHMgYW4gZXhwbGljaXQKKyAgIGNvbWJpbmVkIHBhcmFsbGVsIHdvcmstc2hhcmluZyBjb25zdHJ1Y3RzLiAgKi8KKyNkZWZpbmUgT01QX1BBUkFMTEVMX0NPTUJJTkVEKE5PREUpIFwKKyAgKE9NUF9QQVJBTExFTF9DSEVDSyAoTk9ERSktPmJhc2UucHJpdmF0ZV9mbGFnKQorCisvKiBUcnVlIG9uIGEgUFJJVkFURSBjbGF1c2UgaWYgaXRzIGRlY2wgaXMga2VwdCBhcm91bmQgZm9yIGRlYnVnZ2luZworICAgaW5mb3JtYXRpb24gb25seSBhbmQgaXRzIERFQ0xfVkFMVUVfRVhQUiBpcyBzdXBwb3NlZCB0byBwb2ludAorICAgdG8gd2hhdCBpdCBoYXMgYmVlbiByZW1hcHBlZCB0by4gICovCisjZGVmaW5lIE9NUF9DTEFVU0VfUFJJVkFURV9ERUJVRyhOT0RFKSBcCisgIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfUFJJVkFURSktPmJhc2UucHVibGljX2ZsYWcpCisKKy8qIFRydWUgb24gYSBQUklWQVRFIGNsYXVzZSBpZiBjdG9yIG5lZWRzIGFjY2VzcyB0byBvdXRlciByZWdpb24ncworICAgdmFyaWFibGUuICAqLworI2RlZmluZSBPTVBfQ0xBVVNFX1BSSVZBVEVfT1VURVJfUkVGKE5PREUpIFwKKyAgVFJFRV9QUklWQVRFIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfUFJJVkFURSkpCisKKy8qIFRydWUgb24gYSBMQVNUUFJJVkFURSBjbGF1c2UgaWYgYSBGSVJTVFBSSVZBVEUgY2xhdXNlIGZvciB0aGUgc2FtZQorICAgZGVjbCBpcyBwcmVzZW50IGluIHRoZSBjaGFpbi4gICovCisjZGVmaW5lIE9NUF9DTEFVU0VfTEFTVFBSSVZBVEVfRklSU1RQUklWQVRFKE5PREUpIFwKKyAgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9MQVNUUFJJVkFURSktPmJhc2UucHVibGljX2ZsYWcpCisjZGVmaW5lIE9NUF9DTEFVU0VfTEFTVFBSSVZBVEVfU1RNVChOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLAkJCVwKKwkJCQkJCU9NUF9DTEFVU0VfTEFTVFBSSVZBVEUpLFwKKwkJICAgICAgMSkKKyNkZWZpbmUgT01QX0NMQVVTRV9MQVNUUFJJVkFURV9HSU1QTEVfU0VRKE5PREUpIFwKKyAgKE9NUF9DTEFVU0VfQ0hFQ0sgKE5PREUpKS0+b21wX2NsYXVzZS5naW1wbGVfcmVkdWN0aW9uX2luaXQKKworI2RlZmluZSBPTVBfQ0xBVVNFX0ZJTkFMX0VYUFIoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9GSU5BTCksIDApCisjZGVmaW5lIE9NUF9DTEFVU0VfSUZfRVhQUihOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX0lGKSwgMCkKKyNkZWZpbmUgT01QX0NMQVVTRV9OVU1fVEhSRUFEU19FWFBSKE5PREUpIFwKKyAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfTlVNX1RIUkVBRFMpLDApCisjZGVmaW5lIE9NUF9DTEFVU0VfU0NIRURVTEVfQ0hVTktfRVhQUihOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX1NDSEVEVUxFKSwgMCkKKworI2RlZmluZSBPTVBfQ0xBVVNFX0NPTExBUFNFX0VYUFIoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9DT0xMQVBTRSksIDApCisjZGVmaW5lIE9NUF9DTEFVU0VfQ09MTEFQU0VfSVRFUlZBUihOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX0NPTExBUFNFKSwgMSkKKyNkZWZpbmUgT01QX0NMQVVTRV9DT0xMQVBTRV9DT1VOVChOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX0NPTExBUFNFKSwgMikKKworI2RlZmluZSBPTVBfQ0xBVVNFX1JFRFVDVElPTl9DT0RFKE5PREUpCVwKKyAgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9SRURVQ1RJT04pLT5vbXBfY2xhdXNlLnN1YmNvZGUucmVkdWN0aW9uX2NvZGUpCisjZGVmaW5lIE9NUF9DTEFVU0VfUkVEVUNUSU9OX0lOSVQoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9SRURVQ1RJT04pLCAxKQorI2RlZmluZSBPTVBfQ0xBVVNFX1JFRFVDVElPTl9NRVJHRShOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX1JFRFVDVElPTiksIDIpCisjZGVmaW5lIE9NUF9DTEFVU0VfUkVEVUNUSU9OX0dJTVBMRV9JTklUKE5PREUpIFwKKyAgKE9NUF9DTEFVU0VfQ0hFQ0sgKE5PREUpKS0+b21wX2NsYXVzZS5naW1wbGVfcmVkdWN0aW9uX2luaXQKKyNkZWZpbmUgT01QX0NMQVVTRV9SRURVQ1RJT05fR0lNUExFX01FUkdFKE5PREUpIFwKKyAgKE9NUF9DTEFVU0VfQ0hFQ0sgKE5PREUpKS0+b21wX2NsYXVzZS5naW1wbGVfcmVkdWN0aW9uX21lcmdlCisjZGVmaW5lIE9NUF9DTEFVU0VfUkVEVUNUSU9OX1BMQUNFSE9MREVSKE5PREUpIFwKKyAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfUkVEVUNUSU9OKSwgMykKKworZW51bSBvbXBfY2xhdXNlX3NjaGVkdWxlX2tpbmQKK3sKKyAgT01QX0NMQVVTRV9TQ0hFRFVMRV9TVEFUSUMsCisgIE9NUF9DTEFVU0VfU0NIRURVTEVfRFlOQU1JQywKKyAgT01QX0NMQVVTRV9TQ0hFRFVMRV9HVUlERUQsCisgIE9NUF9DTEFVU0VfU0NIRURVTEVfQVVUTywKKyAgT01QX0NMQVVTRV9TQ0hFRFVMRV9SVU5USU1FCit9OworCisjZGVmaW5lIE9NUF9DTEFVU0VfU0NIRURVTEVfS0lORChOT0RFKSBcCisgIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfU0NIRURVTEUpLT5vbXBfY2xhdXNlLnN1YmNvZGUuc2NoZWR1bGVfa2luZCkKKworZW51bSBvbXBfY2xhdXNlX2RlZmF1bHRfa2luZAoreworICBPTVBfQ0xBVVNFX0RFRkFVTFRfVU5TUEVDSUZJRUQsCisgIE9NUF9DTEFVU0VfREVGQVVMVF9TSEFSRUQsCisgIE9NUF9DTEFVU0VfREVGQVVMVF9OT05FLAorICBPTVBfQ0xBVVNFX0RFRkFVTFRfUFJJVkFURSwKKyAgT01QX0NMQVVTRV9ERUZBVUxUX0ZJUlNUUFJJVkFURQorfTsKKworI2RlZmluZSBPTVBfQ0xBVVNFX0RFRkFVTFRfS0lORChOT0RFKSBcCisgIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfREVGQVVMVCktPm9tcF9jbGF1c2Uuc3ViY29kZS5kZWZhdWx0X2tpbmQpCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfZXhwIHsKKyAgc3RydWN0IHRyZWVfdHlwZWQgdHlwZWQ7CisgIGxvY2F0aW9uX3QgbG9jdXM7CisgIHRyZWUgR1RZICgoc3BlY2lhbCAoInRyZWVfZXhwIiksCisJICAgICBkZXNjICgiVFJFRV9DT0RFICgodHJlZSkgJiUwKSIpKSkKKyAgICBvcGVyYW5kc1sxXTsKK307CisMCisvKiBTU0FfTkFNRSBhY2Nlc3NvcnMuICAqLworCisvKiBSZXR1cm5zIHRoZSBJREVOVElGSUVSX05PREUgZ2l2aW5nIHRoZSBTU0EgbmFtZSBhIG5hbWUgb3IgTlVMTF9UUkVFCisgICBpZiB0aGVyZSBpcyBubyBuYW1lIGFzc29jaWF0ZWQgd2l0aCBpdC4gICovCisjZGVmaW5lIFNTQV9OQU1FX0lERU5USUZJRVIoTk9ERSkJCQkJXAorICAoU1NBX05BTUVfQ0hFQ0sgKE5PREUpLT5zc2FfbmFtZS52YXIgIT0gTlVMTF9UUkVFCQlcCisgICA/IChUUkVFX0NPREUgKChOT0RFKS0+c3NhX25hbWUudmFyKSA9PSBJREVOVElGSUVSX05PREUJXAorICAgICAgPyAoTk9ERSktPnNzYV9uYW1lLnZhcgkJCQkJXAorICAgICAgOiBERUNMX05BTUUgKChOT0RFKS0+c3NhX25hbWUudmFyKSkJCQlcCisgICA6IE5VTExfVFJFRSkKKworLyogUmV0dXJucyB0aGUgdmFyaWFibGUgYmVpbmcgcmVmZXJlbmNlZC4gIFRoaXMgY2FuIGJlIE5VTExfVFJFRSBmb3IKKyAgIHRlbXBvcmFyaWVzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHVzZXIgdmFyaWFibGUuCisgICBPbmNlIHJlbGVhc2VkLCB0aGlzIGlzIHRoZSBvbmx5IGZpZWxkIHRoYXQgY2FuIGJlIHJlbGllZCB1cG9uLiAgKi8KKyNkZWZpbmUgU1NBX05BTUVfVkFSKE5PREUpCQkJCQlcCisgIChTU0FfTkFNRV9DSEVDSyAoTk9ERSktPnNzYV9uYW1lLnZhciA9PSBOVUxMX1RSRUUJCVwKKyAgIHx8IFRSRUVfQ09ERSAoKE5PREUpLT5zc2FfbmFtZS52YXIpID09IElERU5USUZJRVJfTk9ERQlcCisgICA/IE5VTExfVFJFRSA6IChOT0RFKS0+c3NhX25hbWUudmFyKQorCisjZGVmaW5lIFNFVF9TU0FfTkFNRV9WQVJfT1JfSURFTlRJRklFUihOT0RFLFZBUikgXAorICBkbyB7IFNTQV9OQU1FX0NIRUNLIChOT0RFKS0+c3NhX25hbWUudmFyID0gKFZBUik7IH0gd2hpbGUgKDApCisKKy8qIFJldHVybnMgdGhlIHN0YXRlbWVudCB3aGljaCBkZWZpbmVzIHRoaXMgU1NBIG5hbWUuICAqLworI2RlZmluZSBTU0FfTkFNRV9ERUZfU1RNVChOT0RFKQlTU0FfTkFNRV9DSEVDSyAoTk9ERSktPnNzYV9uYW1lLmRlZl9zdG10CisKKy8qIFJldHVybnMgdGhlIFNTQSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIFNTQSBuYW1lLiAgTm90ZSB0aGF0IGluCisgICB0cmVlIFNTQSwgdmVyc2lvbiBudW1iZXJzIGFyZSBub3QgcGVyIHZhcmlhYmxlIGFuZCBtYXkgYmUgcmVjeWNsZWQuICAqLworI2RlZmluZSBTU0FfTkFNRV9WRVJTSU9OKE5PREUpCVNTQV9OQU1FX0NIRUNLIChOT0RFKS0+YmFzZS51LnZlcnNpb24KKworLyogTm9uemVybyBpZiB0aGlzIFNTQSBuYW1lIG9jY3VycyBpbiBhbiBhYm5vcm1hbCBQSEkuICBTU0FfTkFNRVMgYXJlCisgICBuZXZlciBvdXRwdXQsIHNvIHdlIGNhbiBzYWZlbHkgdXNlIHRoZSBBU01fV1JJVFRFTl9GTEFHIGZvciB0aGlzCisgICBzdGF0dXMgYml0LiAgKi8KKyNkZWZpbmUgU1NBX05BTUVfT0NDVVJTX0lOX0FCTk9STUFMX1BISShOT0RFKSBcCisgICAgU1NBX05BTUVfQ0hFQ0sgKE5PREUpLT5iYXNlLmFzbV93cml0dGVuX2ZsYWcKKworLyogTm9uemVybyBpZiB0aGlzIFNTQV9OQU1FIGV4cHJlc3Npb24gaXMgY3VycmVudGx5IG9uIHRoZSBmcmVlIGxpc3Qgb2YKKyAgIFNTQV9OQU1FUy4gIFVzaW5nIE5PVEhST1dfRkxBRyBzZWVtcyByZWFzb25hYmx5IHNhZmUgc2luY2UgdGhyb3dpbmcKKyAgIGhhcyBubyBtZWFuaW5nIGZvciBhbiBTU0FfTkFNRS4gICovCisjZGVmaW5lIFNTQV9OQU1FX0lOX0ZSRUVfTElTVChOT0RFKSBcCisgICAgU1NBX05BTUVfQ0hFQ0sgKE5PREUpLT5iYXNlLm5vdGhyb3dfZmxhZworCisvKiBOb256ZXJvIGlmIHRoaXMgU1NBX05BTUUgaXMgdGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBmb3IgdGhlCisgICB1bmRlcmx5aW5nIHN5bWJvbC4gIEEgZGVmYXVsdCBTU0EgbmFtZSBpcyBjcmVhdGVkIGZvciBzeW1ib2wgUyBpZgorICAgdGhlIHZlcnkgZmlyc3QgcmVmZXJlbmNlIHRvIFMgaW4gdGhlIGZ1bmN0aW9uIGlzIGEgcmVhZCBvcGVyYXRpb24uCisgICBEZWZhdWx0IGRlZmluaXRpb25zIGFyZSBhbHdheXMgY3JlYXRlZCBieSBhbiBlbXB0eSBzdGF0ZW1lbnQgYW5kCisgICBiZWxvbmcgdG8gbm8gYmFzaWMgYmxvY2suICAqLworI2RlZmluZSBTU0FfTkFNRV9JU19ERUZBVUxUX0RFRihOT0RFKSBcCisgICAgU1NBX05BTUVfQ0hFQ0sgKE5PREUpLT5iYXNlLmRlZmF1bHRfZGVmX2ZsYWcKKworLyogQXR0cmlidXRlcyBmb3IgU1NBX05BTUVzIGZvciBwb2ludGVyLXR5cGUgdmFyaWFibGVzLiAgKi8KKyNkZWZpbmUgU1NBX05BTUVfUFRSX0lORk8oTikgXAorICAgIFNTQV9OQU1FX0NIRUNLIChOKS0+c3NhX25hbWUucHRyX2luZm8KKworLyogRGVmaW5lZCBpbiB0cmVlLWZsb3cuaC4gICovCitzdHJ1Y3QgcHRyX2luZm9fZGVmOworCisvKiBJbW1lZGlhdGUgdXNlIGxpbmtpbmcgc3RydWN0dXJlLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgbWFpbnRhaW5pbmcKKyAgIGEgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIHVzZXMgb2YgYW4gU1NBX05BTUUuICAqLwordHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBzc2FfdXNlX29wZXJhbmRfZCB7CisgIHN0cnVjdCBzc2FfdXNlX29wZXJhbmRfZCogR1RZKChza2lwKCIiKSkpIHByZXY7CisgIHN0cnVjdCBzc2FfdXNlX29wZXJhbmRfZCogR1RZKChza2lwKCIiKSkpIG5leHQ7CisgIC8qIEltbWVkaWF0ZSB1c2VzIGZvciBhIGdpdmVuIFNTQSBuYW1lIGFyZSBtYWludGFpbmVkIGFzIGEgY3ljbGljCisgICAgIGxpc3QuICBUbyByZWNvZ25pemUgdGhlIHJvb3Qgb2YgdGhpcyBsaXN0LCB0aGUgbG9jYXRpb24gZmllbGQKKyAgICAgbmVlZHMgdG8gcG9pbnQgdG8gdGhlIG9yaWdpbmFsIFNTQSBuYW1lLiAgU2luY2Ugc3RhdGVtZW50cyBhbmQKKyAgICAgU1NBIG5hbWVzIGFyZSBvZiBkaWZmZXJlbnQgZGF0YSB0eXBlcywgd2UgbmVlZCB0aGlzIHVuaW9uLiAgU2VlCisgICAgIHRoZSBleHBsYW5hdGlvbiBpbiBzdHJ1Y3QgaW1tZWRpYXRlX3VzZV9pdGVyYXRvcl9kLiAgKi8KKyAgdW5pb24geyBnaW1wbGUgc3RtdDsgdHJlZSBzc2FfbmFtZTsgfSBHVFkoKHNraXAoIiIpKSkgbG9jOworICB0cmVlICpHVFkoKHNraXAoIiIpKSkgdXNlOworfSBzc2FfdXNlX29wZXJhbmRfdDsKKworLyogUmV0dXJuIHRoZSBpbW1lZGlhdGVfdXNlIGluZm9ybWF0aW9uIGZvciBhbiBTU0FfTkFNRS4gKi8KKyNkZWZpbmUgU1NBX05BTUVfSU1NX1VTRV9OT0RFKE5PREUpIFNTQV9OQU1FX0NIRUNLIChOT0RFKS0+c3NhX25hbWUuaW1tX3VzZXMKKworc3RydWN0IEdUWSgoKSkgdHJlZV9zc2FfbmFtZSB7CisgIHN0cnVjdCB0cmVlX3R5cGVkIHR5cGVkOworCisgIC8qIF9ERUNMIHdyYXBwZWQgYnkgdGhpcyBTU0EgbmFtZS4gICovCisgIHRyZWUgdmFyOworCisgIC8qIFN0YXRlbWVudCB0aGF0IGRlZmluZXMgdGhpcyBTU0EgbmFtZS4gICovCisgIGdpbXBsZSBkZWZfc3RtdDsKKworICAvKiBQb2ludGVyIGF0dHJpYnV0ZXMgdXNlZCBmb3IgYWxpYXMgYW5hbHlzaXMuICAqLworICBzdHJ1Y3QgcHRyX2luZm9fZGVmICpwdHJfaW5mbzsKKworICAvKiBJbW1lZGlhdGUgdXNlcyBsaXN0IGZvciB0aGlzIFNTQV9OQU1FLiAgKi8KKyAgc3RydWN0IHNzYV91c2Vfb3BlcmFuZF9kIGltbV91c2VzOworfTsKKwwKK3N0cnVjdCBHVFkoKCkpIHBoaV9hcmdfZCB7CisgIC8qIGltbV91c2UgTVVTVCBiZSB0aGUgZmlyc3QgZWxlbWVudCBpbiBzdHJ1Y3QgYmVjYXVzZSB3ZSBkbyBzb21lCisgICAgIHBvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIGl0LiAgU2VlIHBoaV9hcmdfaW5kZXhfZnJvbV91c2UuICAqLworICBzdHJ1Y3Qgc3NhX3VzZV9vcGVyYW5kX2QgaW1tX3VzZTsKKyAgdHJlZSBkZWY7CisgIGxvY2F0aW9uX3QgbG9jdXM7Cit9OworCisMCisjZGVmaW5lIE9NUF9DTEFVU0VfQ09ERShOT0RFKQkJCQkJXAorCShPTVBfQ0xBVVNFX0NIRUNLIChOT0RFKSktPm9tcF9jbGF1c2UuY29kZQorCisjZGVmaW5lIE9NUF9DTEFVU0VfU0VUX0NPREUoTk9ERSwgQ09ERSkJCQkJXAorCSgoT01QX0NMQVVTRV9DSEVDSyAoTk9ERSkpLT5vbXBfY2xhdXNlLmNvZGUgPSAoQ09ERSkpCisKKyNkZWZpbmUgT01QX0NMQVVTRV9DT0RFKE5PREUpCQkJCQlcCisJKE9NUF9DTEFVU0VfQ0hFQ0sgKE5PREUpKS0+b21wX2NsYXVzZS5jb2RlCisKKyNkZWZpbmUgT01QX0NMQVVTRV9PUEVSQU5EKE5PREUsIEkpCQkJCVwKKwlPTVBfQ0xBVVNFX0VMVF9DSEVDSyAoTk9ERSwgSSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9vbXBfY2xhdXNlIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKyAgbG9jYXRpb25fdCBsb2N1czsKKyAgZW51bSBvbXBfY2xhdXNlX2NvZGUgY29kZTsKKyAgdW5pb24gb21wX2NsYXVzZV9zdWJjb2RlIHsKKyAgICBlbnVtIG9tcF9jbGF1c2VfZGVmYXVsdF9raW5kICBkZWZhdWx0X2tpbmQ7CisgICAgZW51bSBvbXBfY2xhdXNlX3NjaGVkdWxlX2tpbmQgc2NoZWR1bGVfa2luZDsKKyAgICBlbnVtIHRyZWVfY29kZSAgICAgICAgICAgICAgICByZWR1Y3Rpb25fY29kZTsKKyAgfSBHVFkgKChza2lwKSkgc3ViY29kZTsKKworICAvKiBUaGUgZ2ltcGxpZmljYXRpb24gb2YgT01QX0NMQVVTRV9SRURVQ1RJT05fe0lOSVQsTUVSR0V9IGZvciBvbXAtbG93J3MKKyAgICAgdXNhZ2UuICAqLworICBnaW1wbGVfc2VxIGdpbXBsZV9yZWR1Y3Rpb25faW5pdDsKKyAgZ2ltcGxlX3NlcSBnaW1wbGVfcmVkdWN0aW9uX21lcmdlOworCisgIHRyZWUgR1RZICgobGVuZ3RoICgib21wX2NsYXVzZV9udW1fb3BzW09NUF9DTEFVU0VfQ09ERSAoKHRyZWUpJiVoKV0iKSkpIG9wc1sxXTsKK307CisMCisKKy8qIEluIGEgQkxPQ0sgbm9kZS4gICovCisjZGVmaW5lIEJMT0NLX1ZBUlMoTk9ERSkgKEJMT0NLX0NIRUNLIChOT0RFKS0+YmxvY2sudmFycykKKyNkZWZpbmUgQkxPQ0tfTk9OTE9DQUxJWkVEX1ZBUlMoTk9ERSkgXAorICAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay5ub25sb2NhbGl6ZWRfdmFycykKKyNkZWZpbmUgQkxPQ0tfTlVNX05PTkxPQ0FMSVpFRF9WQVJTKE5PREUpIFwKKyAgdmVjX3NhZmVfbGVuZ3RoIChCTE9DS19OT05MT0NBTElaRURfVkFSUyAoTk9ERSkpCisjZGVmaW5lIEJMT0NLX05PTkxPQ0FMSVpFRF9WQVIoTk9ERSxOKSAoKkJMT0NLX05PTkxPQ0FMSVpFRF9WQVJTIChOT0RFKSlbTl0KKyNkZWZpbmUgQkxPQ0tfU1VCQkxPQ0tTKE5PREUpIChCTE9DS19DSEVDSyAoTk9ERSktPmJsb2NrLnN1YmJsb2NrcykKKyNkZWZpbmUgQkxPQ0tfU1VQRVJDT05URVhUKE5PREUpIChCTE9DS19DSEVDSyAoTk9ERSktPmJsb2NrLnN1cGVyY29udGV4dCkKKyNkZWZpbmUgQkxPQ0tfQ0hBSU4oTk9ERSkgKEJMT0NLX0NIRUNLIChOT0RFKS0+YmxvY2suY2hhaW4pCisjZGVmaW5lIEJMT0NLX0FCU1RSQUNUX09SSUdJTihOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay5hYnN0cmFjdF9vcmlnaW4pCisjZGVmaW5lIEJMT0NLX0FCU1RSQUNUKE5PREUpIChCTE9DS19DSEVDSyAoTk9ERSktPmJsb2NrLmFic3RyYWN0X2ZsYWcpCisKKy8qIFRydWUgaWYgQkxPQ0sgaGFzIHRoZSBzYW1lIHJhbmdlcyBhcyBpdHMgQkxPQ0tfU1VQRVJDT05URVhULiAgKi8KKyNkZWZpbmUgQkxPQ0tfU0FNRV9SQU5HRShOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5iYXNlLnUuYml0cy5uYW1lbGVzc19mbGFnKQorCisvKiBBbiBpbmRleCBudW1iZXIgZm9yIHRoaXMgYmxvY2suICBUaGVzZSB2YWx1ZXMgYXJlIG5vdCBndWFyYW50ZWVkIHRvCisgICBiZSB1bmlxdWUgYWNyb3NzIGZ1bmN0aW9ucyAtLSB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBkZXBlbmRzIG9uCisgICB0aGUgZGVidWdnaW5nIG91dHB1dCBmb3JtYXQgaW4gdXNlLiAgKi8KKyNkZWZpbmUgQkxPQ0tfTlVNQkVSKE5PREUpIChCTE9DS19DSEVDSyAoTk9ERSktPmJsb2NrLmJsb2NrX251bSkKKworLyogSWYgYmxvY2sgcmVvcmRlcmluZyBzcGxpdHMgYSBsZXhpY2FsIGJsb2NrIGludG8gZGlzY29udGlndW91cworICAgYWRkcmVzcyByYW5nZXMsIHdlJ2xsIG1ha2UgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBibG9jay4KKworICAgTm90ZSB0aGF0IHRoaXMgaXMgbG9naWNhbGx5IGRpc3RpbmN0IGZyb20gQkxPQ0tfQUJTVFJBQ1RfT1JJR0lOLgorICAgSW4gdGhhdCBjYXNlLCB3ZSBoYXZlIG9uZSBzb3VyY2UgYmxvY2sgdGhhdCBoYXMgYmVlbiByZXBsaWNhdGVkCisgICAodGhyb3VnaCBpbmxpbmluZyBvciB1bnJvbGxpbmcpIGludG8gbWFueSBsb2dpY2FsIGJsb2NrcywgYW5kIHRoYXQKKyAgIHRoZXNlIGxvZ2ljYWwgYmxvY2tzIGhhdmUgZGlmZmVyZW50IHBoeXNpY2FsIHZhcmlhYmxlcyBpbiB0aGVtLgorCisgICBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgb25lIGxvZ2ljYWwgYmxvY2sgc3BsaXQgaW50byBzZXZlcmFsCisgICBub24tY29udGlndW91cyBhZGRyZXNzIHJhbmdlcy4gIE1vc3QgZGVidWcgZm9ybWF0cyBjYW4ndCBhY3R1YWxseQorICAgcmVwcmVzZW50IHRoaXMgaWRlYSBkaXJlY3RseSwgc28gd2UgZmFrZSBpdCBieSBjcmVhdGluZyBtdWx0aXBsZQorICAgbG9naWNhbCBibG9ja3Mgd2l0aCB0aGUgc2FtZSB2YXJpYWJsZXMgaW4gdGhlbS4gIEhvd2V2ZXIsIGZvciB0aG9zZQorICAgdGhhdCBkbyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHJlZ2lvbnMsIHRoZXNlIGFsbG93IHRoZSBvcmlnaW5hbAorICAgbG9naWNhbCBibG9jayB0byBiZSByZWNvbnN0cnVjdGVkLCBhbG9uZyB3aXRoIHRoZSBzZXQgb2YgYWRkcmVzcworICAgcmFuZ2VzLgorCisgICBPbmUgb2YgdGhlIGxvZ2ljYWwgYmxvY2sgZnJhZ21lbnRzIGlzIGFyYml0cmFyaWx5IGNob3NlbiB0byBiZQorICAgdGhlIE9SSUdJTi4gIFRoZSBvdGhlciBmcmFnbWVudHMgd2lsbCBwb2ludCB0byB0aGUgb3JpZ2luIHZpYQorICAgQkxPQ0tfRlJBR01FTlRfT1JJR0lOOyB0aGUgb3JpZ2luIGl0c2VsZiB3aWxsIGhhdmUgdGhpcyBwb2ludGVyCisgICBiZSBudWxsLiAgVGhlIGxpc3Qgb2YgZnJhZ21lbnRzIHdpbGwgYmUgY2hhaW5lZCB0aHJvdWdoCisgICBCTE9DS19GUkFHTUVOVF9DSEFJTiBmcm9tIHRoZSBvcmlnaW4uICAqLworCisjZGVmaW5lIEJMT0NLX0ZSQUdNRU5UX09SSUdJTihOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay5mcmFnbWVudF9vcmlnaW4pCisjZGVmaW5lIEJMT0NLX0ZSQUdNRU5UX0NIQUlOKE5PREUpIChCTE9DS19DSEVDSyAoTk9ERSktPmJsb2NrLmZyYWdtZW50X2NoYWluKQorCisvKiBGb3IgYW4gaW5saW5lZCBmdW5jdGlvbiwgdGhpcyBnaXZlcyB0aGUgbG9jYXRpb24gd2hlcmUgaXQgd2FzIGNhbGxlZAorICAgZnJvbS4gIFRoaXMgaXMgb25seSBzZXQgaW4gdGhlIHRvcCBsZXZlbCBibG9jaywgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlCisgICBpbmxpbmVkIGZ1bmN0aW9uIHNjb3BlLiAgVGhpcyBpcyB1c2VkIGluIHRoZSBkZWJ1ZyBvdXRwdXQgcm91dGluZXMuICAqLworCisjZGVmaW5lIEJMT0NLX1NPVVJDRV9MT0NBVElPTihOT0RFKSAoQkxPQ0tfQ0hFQ0sgKE5PREUpLT5ibG9jay5sb2N1cykKKworc3RydWN0IEdUWSgoKSkgdHJlZV9ibG9jayB7CisgIHN0cnVjdCB0cmVlX2Jhc2UgYmFzZTsKKyAgdHJlZSBjaGFpbjsKKworICB1bnNpZ25lZCBhYnN0cmFjdF9mbGFnIDogMTsKKyAgdW5zaWduZWQgYmxvY2tfbnVtIDogMzE7CisKKyAgbG9jYXRpb25fdCBsb2N1czsKKworICB0cmVlIHZhcnM7CisgIHZlYzx0cmVlLCB2YV9nYz4gKm5vbmxvY2FsaXplZF92YXJzOworCisgIHRyZWUgc3ViYmxvY2tzOworICB0cmVlIHN1cGVyY29udGV4dDsKKyAgdHJlZSBhYnN0cmFjdF9vcmlnaW47CisgIHRyZWUgZnJhZ21lbnRfb3JpZ2luOworICB0cmVlIGZyYWdtZW50X2NoYWluOworfTsKKwwKKy8qIERlZmluZSBmaWVsZHMgYW5kIGFjY2Vzc29ycyBmb3Igbm9kZXMgcmVwcmVzZW50aW5nIGRhdGEgdHlwZXMuICAqLworCisvKiBTZWUgdHJlZS5kZWYgZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIHVzZSBvZiB0aGVzZSBmaWVsZHMuCisgICBMb29rIGF0IHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSB2YXJpb3VzIC4uLl9UWVBFIHRyZWUgY29kZXMuCisKKyAgIE5vdGUgdGhhdCB0aGUgdHlwZS52YWx1ZXMsIHR5cGUubWludmFsLCBhbmQgdHlwZS5tYXh2YWwgZmllbGRzIGFyZQorICAgb3ZlcmxvYWRlZCBhbmQgdXNlZCBmb3IgZGlmZmVyZW50IG1hY3JvcyBpbiBkaWZmZXJlbnQga2luZHMgb2YgdHlwZXMuCisgICBFYWNoIG1hY3JvIG11c3QgY2hlY2sgdG8gZW5zdXJlIHRoZSB0cmVlIG5vZGUgaXMgb2YgdGhlIHByb3BlciBraW5kIG9mCisgICB0eXBlLiAgTm90ZSBhbHNvIHRoYXQgc29tZSBvZiB0aGUgZnJvbnQtZW5kcyBhbHNvIG92ZXJsb2FkIHRoZXNlIGZpZWxkcywKKyAgIHNvIHRoZXkgbXVzdCBiZSBjaGVja2VkIGFzIHdlbGwuICAqLworCisjZGVmaW5lIFRZUEVfVUlEKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24udWlkKQorI2RlZmluZSBUWVBFX1NJWkUoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5zaXplKQorI2RlZmluZSBUWVBFX1NJWkVfVU5JVChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLnNpemVfdW5pdCkKKyNkZWZpbmUgVFlQRV9QT0lOVEVSX1RPKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24ucG9pbnRlcl90bykKKyNkZWZpbmUgVFlQRV9SRUZFUkVOQ0VfVE8oTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5yZWZlcmVuY2VfdG8pCisjZGVmaW5lIFRZUEVfUFJFQ0lTSU9OKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24ucHJlY2lzaW9uKQorI2RlZmluZSBUWVBFX05BTUUoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5uYW1lKQorI2RlZmluZSBUWVBFX05FWFRfVkFSSUFOVChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLm5leHRfdmFyaWFudCkKKyNkZWZpbmUgVFlQRV9NQUlOX1ZBUklBTlQoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5tYWluX3ZhcmlhbnQpCisjZGVmaW5lIFRZUEVfQ09OVEVYVChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLmNvbnRleHQpCisKKy8qIFZlY3RvciB0eXBlcyBuZWVkIHRvIGNoZWNrIHRhcmdldCBmbGFncyB0byBkZXRlcm1pbmUgdHlwZS4gICovCitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgdmVjdG9yX3R5cGVfbW9kZSAoY29uc3RfdHJlZSk7CisjZGVmaW5lIFRZUEVfTU9ERShOT0RFKSBcCisgIChUUkVFX0NPREUgKFRZUEVfQ0hFQ0sgKE5PREUpKSA9PSBWRUNUT1JfVFlQRSBcCisgICA/IHZlY3Rvcl90eXBlX21vZGUgKE5PREUpIDogKE5PREUpLT50eXBlX2NvbW1vbi5tb2RlKQorI2RlZmluZSBTRVRfVFlQRV9NT0RFKE5PREUsIE1PREUpIFwKKyAgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5tb2RlID0gKE1PREUpKQorCisvKiBUaGUgImNhbm9uaWNhbCIgdHlwZSBmb3IgdGhpcyB0eXBlIG5vZGUsIHdoaWNoIGlzIHVzZWQgYnkgZnJvbnRlbmRzIHRvCisgICBjb21wYXJlIHRoZSB0eXBlIGZvciBlcXVhbGl0eSB3aXRoIGFub3RoZXIgdHlwZS4gIElmIHR3byB0eXBlcyBhcmUKKyAgIGVxdWFsIChiYXNlZCBvbiB0aGUgc2VtYW50aWNzIG9mIHRoZSBsYW5ndWFnZSksIHRoZW4gdGhleSB3aWxsIGhhdmUKKyAgIGVxdWl2YWxlbnQgVFlQRV9DQU5PTklDQUwgZW50cmllcy4KKworICAgQXMgYSBzcGVjaWFsIGNhc2UsIGlmIFRZUEVfQ0FOT05JQ0FMIGlzIE5VTExfVFJFRSwgYW5kIHRodXMKKyAgIFRZUEVfU1RSVUNUVVJBTF9FUVVBTElUWV9QIGlzIHRydWUsIHRoZW4gaXQgY2Fubm90CisgICBiZSB1c2VkIGZvciBjb21wYXJpc29uIGFnYWluc3Qgb3RoZXIgdHlwZXMuICBJbnN0ZWFkLCB0aGUgdHlwZSBpcworICAgc2FpZCB0byByZXF1aXJlIHN0cnVjdHVyYWwgZXF1YWxpdHkgY2hlY2tzLCBkZXNjcmliZWQgaW4KKyAgIFRZUEVfU1RSVUNUVVJBTF9FUVVBTElUWV9QLgorCisgICBGb3IgdW5xdWFsaWZpZWQgYWdncmVnYXRlIGFuZCBmdW5jdGlvbiB0eXBlcyB0aGUgbWlkZGxlLWVuZCByZWxpZXMgb24KKyAgIFRZUEVfQ0FOT05JQ0FMIHRvIHRlbGwgd2hldGhlciB0d28gdmFyaWFibGVzIGNhbiBiZSBhc3NpZ25lZAorICAgdG8gZWFjaCBvdGhlciB3aXRob3V0IGEgY29udmVyc2lvbi4gIFRoZSBtaWRkbGUtZW5kIGFsc28gbWFrZXMgc3VyZQorICAgdG8gYXNzaWduIHRoZSBzYW1lIGFsaWFzLXNldHMgdG8gdGhlIHR5cGUgcGFydGl0aW9uIHdpdGggZXF1YWwKKyAgIFRZUEVfQ0FOT05JQ0FMIG9mIHRoZWlyIHVucXVhbGlmaWVkIHZhcmlhbnRzLiAgKi8KKyNkZWZpbmUgVFlQRV9DQU5PTklDQUwoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5jYW5vbmljYWwpCisvKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdHlwZSBub2RlIHJlcXVpcmVzIHN0cnVjdHVyYWwgZXF1YWxpdHkKKyAgIGNoZWNrcy4gIFRoZSBjb21waWxlciB3aWxsIG5lZWQgdG8gbG9vayBhdCB0aGUgY29tcG9zaXRpb24gb2YgdGhlCisgICB0eXBlIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGVxdWFsIHRvIGFub3RoZXIgdHlwZSwgcmF0aGVyIHRoYW4KKyAgIGp1c3QgY29tcGFyaW5nIGNhbm9uaWNhbCB0eXBlIHBvaW50ZXJzLiAgRm9yIGluc3RhbmNlLCB3ZSB3b3VsZCBuZWVkCisgICB0byBsb29rIGF0IHRoZSByZXR1cm4gYW5kIHBhcmFtZXRlciB0eXBlcyBvZiBhIEZVTkNUSU9OX1RZUEUKKyAgIG5vZGUuICAqLworI2RlZmluZSBUWVBFX1NUUlVDVFVSQUxfRVFVQUxJVFlfUChOT0RFKSAoVFlQRV9DQU5PTklDQUwgKE5PREUpID09IE5VTExfVFJFRSkKKy8qIFNldHMgdGhlIFRZUEVfQ0FOT05JQ0FMIGZpZWxkIHRvIE5VTExfVFJFRSwgaW5kaWNhdGluZyB0aGF0IHRoZQorICAgdHlwZSBub2RlIHJlcXVpcmVzIHN0cnVjdHVyYWwgZXF1YWxpdHkuICAqLworI2RlZmluZSBTRVRfVFlQRV9TVFJVQ1RVUkFMX0VRVUFMSVRZKE5PREUpIChUWVBFX0NBTk9OSUNBTCAoTk9ERSkgPSBOVUxMX1RSRUUpCisKKyNkZWZpbmUgVFlQRV9JQklUKE5PREUpIChHRVRfTU9ERV9JQklUIChUWVBFX01PREUgKE5PREUpKSkKKyNkZWZpbmUgVFlQRV9GQklUKE5PREUpIChHRVRfTU9ERV9GQklUIChUWVBFX01PREUgKE5PREUpKSkKKworLyogVGhlIChsYW5ndWFnZS1zcGVjaWZpYykgdHlwZWQtYmFzZWQgYWxpYXMgc2V0IGZvciB0aGlzIHR5cGUuCisgICBPYmplY3RzIHdob3NlIFRZUEVfQUxJQVNfU0VUcyBhcmUgZGlmZmVyZW50IGNhbm5vdCBhbGlhcyBlYWNoCisgICBvdGhlci4gIElmIHRoZSBUWVBFX0FMSUFTX1NFVCBpcyAtMSwgbm8gYWxpYXMgc2V0IGhhcyB5ZXQgYmVlbgorICAgYXNzaWduZWQgdG8gdGhpcyB0eXBlLiAgSWYgdGhlIFRZUEVfQUxJQVNfU0VUIGlzIDAsIG9iamVjdHMgb2YgdGhpcworICAgdHlwZSBjYW4gYWxpYXMgb2JqZWN0cyBvZiBhbnkgdHlwZS4gICovCisjZGVmaW5lIFRZUEVfQUxJQVNfU0VUKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24uYWxpYXNfc2V0KQorCisvKiBOb256ZXJvIGlmZiB0aGUgdHlwZWQtYmFzZWQgYWxpYXMgc2V0IGZvciB0aGlzIHR5cGUgaGFzIGJlZW4KKyAgIGNhbGN1bGF0ZWQuICAqLworI2RlZmluZSBUWVBFX0FMSUFTX1NFVF9LTk9XTl9QKE5PREUpIFwKKyAgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5hbGlhc19zZXQgIT0gLTEpCisKKy8qIEEgVFJFRV9MSVNUIG9mIElERU5USUZJRVIgbm9kZXMgb2YgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhcHBseQorICAgdG8gdGhpcyB0eXBlLiAgKi8KKyNkZWZpbmUgVFlQRV9BVFRSSUJVVEVTKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24uYXR0cmlidXRlcykKKworLyogVGhlIGFsaWdubWVudCBuZWNlc3NhcnkgZm9yIG9iamVjdHMgb2YgdGhpcyB0eXBlLgorICAgVGhlIHZhbHVlIGlzIGFuIGludCwgbWVhc3VyZWQgaW4gYml0cy4gICovCisjZGVmaW5lIFRZUEVfQUxJR04oTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5hbGlnbikKKworLyogMSBpZiB0aGUgYWxpZ25tZW50IGZvciB0aGlzIHR5cGUgd2FzIHJlcXVlc3RlZCBieSAiYWxpZ25lZCIgYXR0cmlidXRlLAorICAgMCBpZiBpdCBpcyB0aGUgZGVmYXVsdCBmb3IgdGhpcyB0eXBlLiAgKi8KKyNkZWZpbmUgVFlQRV9VU0VSX0FMSUdOKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+YmFzZS51LmJpdHMudXNlcl9hbGlnbikKKworLyogVGhlIGFsaWdubWVudCBmb3IgTk9ERSwgaW4gYnl0ZXMuICAqLworI2RlZmluZSBUWVBFX0FMSUdOX1VOSVQoTk9ERSkgKFRZUEVfQUxJR04gKE5PREUpIC8gQklUU19QRVJfVU5JVCkKKworLyogSWYgeW91ciBsYW5ndWFnZSBhbGxvd3MgeW91IHRvIGRlY2xhcmUgdHlwZXMsIGFuZCB5b3Ugd2FudCBkZWJ1ZyBpbmZvCisgICBmb3IgdGhlbSwgdGhlbiB5b3UgbmVlZCB0byBnZW5lcmF0ZSBjb3JyZXNwb25kaW5nIFRZUEVfREVDTCBub2Rlcy4KKyAgIFRoZXNlICJzdHViIiBUWVBFX0RFQ0wgbm9kZXMgaGF2ZSBubyBuYW1lLCBhbmQgc2ltcGx5IHBvaW50IGF0IHRoZQorICAgdHlwZSBub2RlLiAgWW91IHRoZW4gc2V0IHRoZSBUWVBFX1NUVUJfREVDTCBmaWVsZCBvZiB0aGUgdHlwZSBub2RlCisgICB0byBwb2ludCBiYWNrIGF0IHRoZSBUWVBFX0RFQ0wgbm9kZS4gIFRoaXMgYWxsb3dzIHRoZSBkZWJ1ZyByb3V0aW5lcworICAgdG8ga25vdyB0aGF0IHRoZSB0d28gbm9kZXMgcmVwcmVzZW50IHRoZSBzYW1lIHR5cGUsIHNvIHRoYXQgd2Ugb25seQorICAgZ2V0IG9uZSBkZWJ1ZyBpbmZvIHJlY29yZCBmb3IgdGhlbS4gICovCisjZGVmaW5lIFRZUEVfU1RVQl9ERUNMKE5PREUpIChUUkVFX0NIQUlOIChUWVBFX0NIRUNLIChOT0RFKSkpCisKKy8qIEluIGEgUkVDT1JEX1RZUEUsIFVOSU9OX1RZUEUsIFFVQUxfVU5JT05fVFlQRSBvciBBUlJBWV9UWVBFLCBpdCBtZWFucworICAgdGhlIHR5cGUgaGFzIEJMS21vZGUgb25seSBiZWNhdXNlIGl0IGxhY2tzIHRoZSBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yCisgICBpdHMgc2l6ZS4gICovCisjZGVmaW5lIFRZUEVfTk9fRk9SQ0VfQkxLKE5PREUpIFwKKyAgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5ub19mb3JjZV9ibGtfZmxhZykKKworLyogTm9uemVybyBpbiBhIHR5cGUgY29uc2lkZXJlZCB2b2xhdGlsZSBhcyBhIHdob2xlLiAgKi8KKyNkZWZpbmUgVFlQRV9WT0xBVElMRShOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPmJhc2Uudm9sYXRpbGVfZmxhZykKKworLyogTWVhbnMgdGhpcyB0eXBlIGlzIGNvbnN0LXF1YWxpZmllZC4gICovCisjZGVmaW5lIFRZUEVfUkVBRE9OTFkoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLnJlYWRvbmx5X2ZsYWcpCisKKy8qIElmIG5vbnplcm8sIHRoaXMgdHlwZSBpcyBgcmVzdHJpY3QnLXF1YWxpZmllZCwgaW4gdGhlIEMgc2Vuc2Ugb2YKKyAgIHRoZSB0ZXJtLiAgKi8KKyNkZWZpbmUgVFlQRV9SRVNUUklDVChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLnJlc3RyaWN0X2ZsYWcpCisKKy8qIElmIG5vbnplcm8sIHR5cGUncyBuYW1lIHNob3VsZG4ndCBiZSBlbWl0dGVkIGludG8gZGVidWcgaW5mby4gICovCisjZGVmaW5lIFRZUEVfTkFNRUxFU1MoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLnUuYml0cy5uYW1lbGVzc19mbGFnKQorCisvKiBUaGUgYWRkcmVzcyBzcGFjZSB0aGUgdHlwZSBpcyBpbi4gICovCisjZGVmaW5lIFRZUEVfQUREUl9TUEFDRShOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPmJhc2UudS5iaXRzLmFkZHJlc3Nfc3BhY2UpCisKKy8qIFRoZXJlIGlzIGEgVFlQRV9RVUFMIHZhbHVlIGZvciBlYWNoIHR5cGUgcXVhbGlmaWVyLiAgVGhleSBjYW4gYmUKKyAgIGNvbWJpbmVkIGJ5IGJpdHdpc2Utb3IgdG8gZm9ybSB0aGUgY29tcGxldGUgc2V0IG9mIHF1YWxpZmllcnMgZm9yIGEKKyAgIHR5cGUuICAqLworZW51bSBjdl9xdWFsaWZpZXIKKyAgeworICAgIFRZUEVfVU5RVUFMSUZJRUQgICA9IDB4MCwKKyAgICBUWVBFX1FVQUxfQ09OU1QgICAgPSAweDEsCisgICAgVFlQRV9RVUFMX1ZPTEFUSUxFID0gMHgyLAorICAgIFRZUEVfUVVBTF9SRVNUUklDVCA9IDB4NAorICB9OworCisvKiBFbmNvZGUvZGVjb2RlIHRoZSBuYW1lZCBtZW1vcnkgc3VwcG9ydCBhcyBwYXJ0IG9mIHRoZSBxdWFsaWZpZXIuICBJZiBtb3JlCisgICB0aGFuIDggcXVhbGlmaWVycyBhcmUgYWRkZWQsIHRoZXNlIG1hY3JvcyBuZWVkIHRvIGJlIGFkanVzdGVkLiAgKi8KKyNkZWZpbmUgRU5DT0RFX1FVQUxfQUREUl9TUEFDRShOVU0pICgoTlVNICYgMHhGRikgPDwgOCkKKyNkZWZpbmUgREVDT0RFX1FVQUxfQUREUl9TUEFDRShYKSAoKChYKSA+PiA4KSAmIDB4RkYpCisKKy8qIFJldHVybiBhbGwgcXVhbGlmaWVycyBleGNlcHQgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIHF1YWxpZmllcnMuICAqLworI2RlZmluZSBDTEVBUl9RVUFMX0FERFJfU1BBQ0UoWCkgKChYKSAmIH4weEZGMDApCisKKy8qIE9ubHkga2VlcCB0aGUgYWRkcmVzcyBzcGFjZSBvdXQgb2YgdGhlIHF1YWxpZmllcnMgYW5kIGRpc2NhcmQgdGhlIG90aGVyCisgICBxdWFsaWZpZXJzLiAgKi8KKyNkZWZpbmUgS0VFUF9RVUFMX0FERFJfU1BBQ0UoWCkgKChYKSAmIDB4RkYwMCkKKworLyogVGhlIHNldCBvZiB0eXBlIHF1YWxpZmllcnMgZm9yIHRoaXMgdHlwZS4gICovCisjZGVmaW5lIFRZUEVfUVVBTFMoTk9ERSkJCQkJCVwKKyAgKChpbnQpICgoVFlQRV9SRUFET05MWSAoTk9ERSkgKiBUWVBFX1FVQUxfQ09OU1QpCQlcCisJICB8IChUWVBFX1ZPTEFUSUxFIChOT0RFKSAqIFRZUEVfUVVBTF9WT0xBVElMRSkJCVwKKwkgIHwgKFRZUEVfUkVTVFJJQ1QgKE5PREUpICogVFlQRV9RVUFMX1JFU1RSSUNUKQkJXAorCSAgfCAoRU5DT0RFX1FVQUxfQUREUl9TUEFDRSAoVFlQRV9BRERSX1NQQUNFIChOT0RFKSkpKSkKKworLyogVGhlIHNhbWUgYXMgVFlQRV9RVUFMUyB3aXRob3V0IHRoZSBhZGRyZXNzIHNwYWNlIHF1YWxpZmljYXRpb25zLiAgKi8KKyNkZWZpbmUgVFlQRV9RVUFMU19OT19BRERSX1NQQUNFKE5PREUpCQkJCVwKKyAgKChpbnQpICgoVFlQRV9SRUFET05MWSAoTk9ERSkgKiBUWVBFX1FVQUxfQ09OU1QpCQlcCisJICB8IChUWVBFX1ZPTEFUSUxFIChOT0RFKSAqIFRZUEVfUVVBTF9WT0xBVElMRSkJCVwKKwkgIHwgKFRZUEVfUkVTVFJJQ1QgKE5PREUpICogVFlQRV9RVUFMX1JFU1RSSUNUKSkpCisKKy8qIFRoZXNlIGZsYWdzIGFyZSBhdmFpbGFibGUgZm9yIGVhY2ggbGFuZ3VhZ2UgZnJvbnQgZW5kIHRvIHVzZSBpbnRlcm5hbGx5LiAgKi8KKyNkZWZpbmUgVFlQRV9MQU5HX0ZMQUdfMChOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLmxhbmdfZmxhZ18wKQorI2RlZmluZSBUWVBFX0xBTkdfRkxBR18xKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24ubGFuZ19mbGFnXzEpCisjZGVmaW5lIFRZUEVfTEFOR19GTEFHXzIoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5sYW5nX2ZsYWdfMikKKyNkZWZpbmUgVFlQRV9MQU5HX0ZMQUdfMyhOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLmxhbmdfZmxhZ18zKQorI2RlZmluZSBUWVBFX0xBTkdfRkxBR180KE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24ubGFuZ19mbGFnXzQpCisjZGVmaW5lIFRZUEVfTEFOR19GTEFHXzUoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX2NvbW1vbi5sYW5nX2ZsYWdfNSkKKyNkZWZpbmUgVFlQRV9MQU5HX0ZMQUdfNihOT0RFKSAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLmxhbmdfZmxhZ182KQorCisvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgdmlzaXRlZCBub2RlcyBpbiB0cmVlIHRyYXZlcnNhbHMuICBUaGlzIGlzIHNldCB0bworICAgMCBieSBjb3B5X25vZGUgYW5kIG1ha2Vfbm9kZS4gICovCisjZGVmaW5lIFRSRUVfVklTSVRFRChOT0RFKSAoKE5PREUpLT5iYXNlLnZpc2l0ZWQpCisKKy8qIElmIHNldCBpbiBhbiBBUlJBWV9UWVBFLCBpbmRpY2F0ZXMgYSBzdHJpbmcgdHlwZSAoZm9yIGxhbmd1YWdlcworICAgdGhhdCBkaXN0aW5ndWlzaCBzdHJpbmcgZnJvbSBhcnJheSBvZiBjaGFyKS4KKyAgIElmIHNldCBpbiBhIElOVEVHRVJfVFlQRSwgaW5kaWNhdGVzIGEgY2hhcmFjdGVyIHR5cGUuICAqLworI2RlZmluZSBUWVBFX1NUUklOR19GTEFHKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24uc3RyaW5nX2ZsYWcpCisKKy8qIEZvciBhIFZFQ1RPUl9UWVBFLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygc3ViLXBhcnRzIG9mIHRoZSB2ZWN0b3IuICAqLworI2RlZmluZSBUWVBFX1ZFQ1RPUl9TVUJQQVJUUyhWRUNUT1JfVFlQRSkgXAorICAoKCh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSAxKSBcCisgICA8PCBWRUNUT1JfVFlQRV9DSEVDSyAoVkVDVE9SX1RZUEUpLT50eXBlX2NvbW1vbi5wcmVjaXNpb24pCisKKy8qIFNldCBwcmVjaXNpb24gdG8gbiB3aGVuIHdlIGhhdmUgMl5uIHN1Yi1wYXJ0cyBvZiB0aGUgdmVjdG9yLiAgKi8KKyNkZWZpbmUgU0VUX1RZUEVfVkVDVE9SX1NVQlBBUlRTKFZFQ1RPUl9UWVBFLCBYKSBcCisgIChWRUNUT1JfVFlQRV9DSEVDSyAoVkVDVE9SX1RZUEUpLT50eXBlX2NvbW1vbi5wcmVjaXNpb24gPSBleGFjdF9sb2cyIChYKSkKKworLyogTm9uemVybyBpbiBhIFZFQ1RPUl9UWVBFIGlmIHRoZSBmcm9udGVuZHMgc2hvdWxkIG5vdCBlbWl0IHdhcm5pbmdzCisgICBhYm91dCBtaXNzaW5nIGNvbnZlcnNpb25zIHRvIG90aGVyIHZlY3RvciB0eXBlcyBvZiB0aGUgc2FtZSBzaXplLiAgKi8KKyNkZWZpbmUgVFlQRV9WRUNUT1JfT1BBUVVFKE5PREUpIFwKKyAgKFZFQ1RPUl9UWVBFX0NIRUNLIChOT0RFKS0+YmFzZS5kZWZhdWx0X2RlZl9mbGFnKQorCisvKiBJbmRpY2F0ZXMgdGhhdCBvYmplY3RzIG9mIHRoaXMgdHlwZSBtdXN0IGJlIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcgYQorICAgZnVuY3Rpb24gd2hlbiB0aGV5IGFyZSBjcmVhdGVkLiAgKi8KKyNkZWZpbmUgVFlQRV9ORUVEU19DT05TVFJVQ1RJTkcoTk9ERSkgXAorICAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLm5lZWRzX2NvbnN0cnVjdGluZ19mbGFnKQorCisvKiBJbmRpY2F0ZXMgdGhhdCBhIFVOSU9OX1RZUEUgb2JqZWN0IHNob3VsZCBiZSBwYXNzZWQgdGhlIHNhbWUgd2F5IHRoYXQKKyAgIHRoZSBmaXJzdCB1bmlvbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSBwYXNzZWQsIG9yIHRoYXQgYSBSRUNPUkRfVFlQRQorICAgb2JqZWN0IHNob3VsZCBiZSBwYXNzZWQgdGhlIHNhbWUgd2F5IHRoYXQgdGhlIGZpcnN0IChhbmQgb25seSkgbWVtYmVyCisgICB3b3VsZCBiZSBwYXNzZWQuICAqLworI2RlZmluZSBUWVBFX1RSQU5TUEFSRU5UX0FHR1IoTk9ERSkgXAorICAoUkVDT1JEX09SX1VOSU9OX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24udHJhbnNwYXJlbnRfYWdncl9mbGFnKQorCisvKiBGb3IgYW4gQVJSQVlfVFlQRSwgaW5kaWNhdGVzIHRoYXQgaXQgaXMgbm90IHBlcm1pdHRlZCB0byB0YWtlIHRoZQorICAgYWRkcmVzcyBvZiBhIGNvbXBvbmVudCBvZiB0aGUgdHlwZS4gIFRoaXMgaXMgdGhlIGNvdW50ZXJwYXJ0IG9mCisgICBERUNMX05PTkFERFJFU1NBQkxFX1AgZm9yIGFycmF5cywgc2VlIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgZmxhZy4gICovCisjZGVmaW5lIFRZUEVfTk9OQUxJQVNFRF9DT01QT05FTlQoTk9ERSkgXAorICAoQVJSQVlfVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLnRyYW5zcGFyZW50X2FnZ3JfZmxhZykKKworLyogSW5kaWNhdGVkIHRoYXQgb2JqZWN0cyBvZiB0aGlzIHR5cGUgc2hvdWxkIGJlIGxhaWQgb3V0IGluIGFzCisgICBjb21wYWN0IGEgd2F5IGFzIHBvc3NpYmxlLiAgKi8KKyNkZWZpbmUgVFlQRV9QQUNLRUQoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT5iYXNlLnUuYml0cy5wYWNrZWRfZmxhZykKKworLyogVXNlZCBieSB0eXBlX2NvbnRhaW5zX3BsYWNlaG9sZGVyX3AgdG8gYXZvaWQgcmVjb21wdXRhdGlvbi4KKyAgIFZhbHVlcyBhcmU6IDAgKHVua25vd24pLCAxIChmYWxzZSksIDIgKHRydWUpLiAgTmV2ZXIgYWNjZXNzCisgICB0aGlzIGZpZWxkIGRpcmVjdGx5LiAgKi8KKyNkZWZpbmUgVFlQRV9DT05UQUlOU19QTEFDRUhPTERFUl9JTlRFUk5BTChOT0RFKSBcCisgIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24uY29udGFpbnNfcGxhY2Vob2xkZXJfYml0cykKKworLyogVGhlIGRlYnVnIG91dHB1dCBmdW5jdGlvbnMgdXNlIHRoZSBzeW10YWIgdW5pb24gZmllbGQgdG8gc3RvcmUKKyAgIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZSBkZWJ1Z2dpbmcgZm9ybWF0LiAgVGhlIGRpZmZlcmVudCBkZWJ1ZworICAgb3V0cHV0IGhvb2tzIHN0b3JlIGRpZmZlcmVudCB0eXBlcyBpbiB0aGUgdW5pb24gZmllbGQuICBUaGVzZSB0aHJlZQorICAgbWFjcm9zIGFyZSB1c2VkIHRvIGFjY2VzcyBkaWZmZXJlbnQgZmllbGRzIGluIHRoZSB1bmlvbi4gIFRoZSBkZWJ1ZworICAgaG9va3MgYXJlIHJlc3BvbnNpYmxlIGZvciBjb25zaXN0ZW50bHkgdXNpbmcgb25seSBhIHNwZWNpZmljCisgICBtYWNyby4gICovCisKKy8qIFN5bXRhYiBmaWVsZCBhcyBhbiBpbnRlZ2VyLiAgVXNlZCBieSBzdGFicyBnZW5lcmF0b3IgaW4gZGJ4b3V0LmMgdG8KKyAgIGhvbGQgdGhlIHR5cGUncyBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzdGFicy4gICovCisjZGVmaW5lIFRZUEVfU1lNVEFCX0FERFJFU1MoTk9ERSkgXAorICAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLnN5bXRhYi5hZGRyZXNzKQorCisvKiBTeW10YWIgZmllbGQgYXMgYSBzdHJpbmcuICBVc2VkIGJ5IENPRkYgZ2VuZXJhdG9yIGluIHNkYm91dC5jIHRvCisgICBob2xkIHN0cnVjdC91bmlvbiB0eXBlIHRhZyBuYW1lcy4gICovCisjZGVmaW5lIFRZUEVfU1lNVEFCX1BPSU5URVIoTk9ERSkgXAorICAoVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfY29tbW9uLnN5bXRhYi5wb2ludGVyKQorCisvKiBTeW10YWIgZmllbGQgYXMgYSBwb2ludGVyIHRvIGEgRFdBUkYgRElFLiAgVXNlZCBieSBEV0FSRiBnZW5lcmF0b3IKKyAgIGluIGR3YXJmMm91dC5jIHRvIHBvaW50IHRvIHRoZSBESUUgZ2VuZXJhdGVkIGZvciB0aGUgdHlwZS4gICovCisjZGVmaW5lIFRZUEVfU1lNVEFCX0RJRShOT0RFKSBcCisgIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9jb21tb24uc3ltdGFiLmRpZSkKKworLyogVGhlIGdhcmJhZ2UgY29sbGVjdG9yIG5lZWRzIHRvIGtub3cgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZQorICAgc3ltdGFiIGZpZWxkLiAgVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgZGlmZmVyZW50IHR5cGVzIGluIHRoZQorICAgdW5pb24uICAqLworCisjZGVmaW5lIFRZUEVfU1lNVEFCX0lTX0FERFJFU1MgKDApCisjZGVmaW5lIFRZUEVfU1lNVEFCX0lTX1BPSU5URVIgKDEpCisjZGVmaW5lIFRZUEVfU1lNVEFCX0lTX0RJRSAoMikKKworc3RydWN0IGRpZV9zdHJ1Y3Q7CisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdHlwZV9jb21tb24geworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICB0cmVlIHNpemU7CisgIHRyZWUgc2l6ZV91bml0OworICB0cmVlIGF0dHJpYnV0ZXM7CisgIHVuc2lnbmVkIGludCB1aWQ7CisKKyAgdW5zaWduZWQgaW50IHByZWNpc2lvbiA6IDEwOworICB1bnNpZ25lZCBub19mb3JjZV9ibGtfZmxhZyA6IDE7CisgIHVuc2lnbmVkIG5lZWRzX2NvbnN0cnVjdGluZ19mbGFnIDogMTsKKyAgdW5zaWduZWQgdHJhbnNwYXJlbnRfYWdncl9mbGFnIDogMTsKKyAgdW5zaWduZWQgcmVzdHJpY3RfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGNvbnRhaW5zX3BsYWNlaG9sZGVyX2JpdHMgOiAyOworCisgIEVOVU1fQklURklFTEQobWFjaGluZV9tb2RlKSBtb2RlIDogODsKKworICB1bnNpZ25lZCBzdHJpbmdfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ18wIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzEgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfMiA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ18zIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzQgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfNSA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ182IDogMTsKKworICB1bnNpZ25lZCBpbnQgYWxpZ247CisgIGFsaWFzX3NldF90eXBlIGFsaWFzX3NldDsKKyAgdHJlZSBwb2ludGVyX3RvOworICB0cmVlIHJlZmVyZW5jZV90bzsKKyAgdW5pb24gdHJlZV90eXBlX3N5bXRhYiB7CisgICAgaW50IEdUWSAoKHRhZyAoIlRZUEVfU1lNVEFCX0lTX0FERFJFU1MiKSkpIGFkZHJlc3M7CisgICAgY29uc3QgY2hhciAqIEdUWSAoKHRhZyAoIlRZUEVfU1lNVEFCX0lTX1BPSU5URVIiKSkpIHBvaW50ZXI7CisgICAgc3RydWN0IGRpZV9zdHJ1Y3QgKiBHVFkgKCh0YWcgKCJUWVBFX1NZTVRBQl9JU19ESUUiKSkpIGRpZTsKKyAgfSBHVFkgKChkZXNjICgiZGVidWdfaG9va3MtPnRyZWVfdHlwZV9zeW10YWJfZmllbGQiKSkpIHN5bXRhYjsKKyAgdHJlZSBuYW1lOworICB0cmVlIG5leHRfdmFyaWFudDsKKyAgdHJlZSBtYWluX3ZhcmlhbnQ7CisgIHRyZWUgY29udGV4dDsKKyAgdHJlZSBjYW5vbmljYWw7Cit9OworCisjZGVmaW5lIFRZUEVfTEFOR19TUEVDSUZJQyhOT0RFKSBcCisgIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV93aXRoX2xhbmdfc3BlY2lmaWMubGFuZ19zcGVjaWZpYykKKworc3RydWN0IEdUWSgoKSkgdHJlZV90eXBlX3dpdGhfbGFuZ19zcGVjaWZpYyB7CisgIHN0cnVjdCB0cmVlX3R5cGVfY29tbW9uIGNvbW1vbjsKKyAgLyogUG9pbnRzIHRvIGEgc3RydWN0dXJlIHdob3NlIGRldGFpbHMgZGVwZW5kIG9uIHRoZSBsYW5ndWFnZSBpbiB1c2UuICAqLworICBzdHJ1Y3QgbGFuZ190eXBlICpsYW5nX3NwZWNpZmljOworfTsKKworI2RlZmluZSBUWVBFX1ZBTFVFUyhOT0RFKSAoRU5VTUVSQUxfVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfbm9uX2NvbW1vbi52YWx1ZXMpCisjZGVmaW5lIFRZUEVfRE9NQUlOKE5PREUpIChBUlJBWV9UWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9ub25fY29tbW9uLnZhbHVlcykKKyNkZWZpbmUgVFlQRV9GSUVMRFMoTk9ERSkgXAorICAoUkVDT1JEX09SX1VOSU9OX0NIRUNLIChOT0RFKS0+dHlwZV9ub25fY29tbW9uLnZhbHVlcykKKyNkZWZpbmUgVFlQRV9DQUNIRURfVkFMVUVTKE5PREUpIChUWVBFX0NIRUNLKE5PREUpLT50eXBlX25vbl9jb21tb24udmFsdWVzKQorI2RlZmluZSBUWVBFX0FSR19UWVBFUyhOT0RFKSBcCisgIChGVU5DX09SX01FVEhPRF9DSEVDSyAoTk9ERSktPnR5cGVfbm9uX2NvbW1vbi52YWx1ZXMpCisjZGVmaW5lIFRZUEVfVkFMVUVTX1JBVyhOT0RFKSAoVFlQRV9DSEVDSyhOT0RFKS0+dHlwZV9ub25fY29tbW9uLnZhbHVlcykKKworI2RlZmluZSBUWVBFX01FVEhPRFMoTk9ERSkgXAorICAoUkVDT1JEX09SX1VOSU9OX0NIRUNLIChOT0RFKS0+dHlwZV9ub25fY29tbW9uLm1heHZhbCkKKyNkZWZpbmUgVFlQRV9WRklFTEQoTk9ERSkgXAorICAoUkVDT1JEX09SX1VOSU9OX0NIRUNLIChOT0RFKS0+dHlwZV9ub25fY29tbW9uLm1pbnZhbCkKKyNkZWZpbmUgVFlQRV9NRVRIT0RfQkFTRVRZUEUoTk9ERSkgXAorICAoRlVOQ19PUl9NRVRIT0RfQ0hFQ0sgKE5PREUpLT50eXBlX25vbl9jb21tb24ubWF4dmFsKQorI2RlZmluZSBUWVBFX09GRlNFVF9CQVNFVFlQRShOT0RFKSBcCisgIChPRkZTRVRfVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfbm9uX2NvbW1vbi5tYXh2YWwpCisjZGVmaW5lIFRZUEVfTUFYVkFMKE5PREUpIChUWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9ub25fY29tbW9uLm1heHZhbCkKKyNkZWZpbmUgVFlQRV9NSU5WQUwoTk9ERSkgKFRZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX25vbl9jb21tb24ubWludmFsKQorI2RlZmluZSBUWVBFX05FWFRfUFRSX1RPKE5PREUpIFwKKyAgKFBPSU5URVJfVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfbm9uX2NvbW1vbi5taW52YWwpCisjZGVmaW5lIFRZUEVfTkVYVF9SRUZfVE8oTk9ERSkgXAorICAoUkVGRVJFTkNFX1RZUEVfQ0hFQ0sgKE5PREUpLT50eXBlX25vbl9jb21tb24ubWludmFsKQorI2RlZmluZSBUWVBFX01JTl9WQUxVRShOT0RFKSBcCisgIChOVU1FUklDQUxfVFlQRV9DSEVDSyAoTk9ERSktPnR5cGVfbm9uX2NvbW1vbi5taW52YWwpCisjZGVmaW5lIFRZUEVfTUFYX1ZBTFVFKE5PREUpIFwKKyAgKE5VTUVSSUNBTF9UWVBFX0NIRUNLIChOT0RFKS0+dHlwZV9ub25fY29tbW9uLm1heHZhbCkKKworLyogSWYgbm9uLU5VTEwsIHRoaXMgaXMgYW4gdXBwZXIgYm91bmQgb2YgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiBhbgorICAgb2JqZWN0IG9mIHRoZSBnaXZlbiBBUlJBWV9UWVBFX05PTl9DT01NT04uICBUaGlzIGFsbG93cyB0ZW1wb3JhcmllcyB0byBiZQorICAgYWxsb2NhdGVkLiAgKi8KKyNkZWZpbmUgVFlQRV9BUlJBWV9NQVhfU0laRShBUlJBWV9UWVBFKSBcCisgIChBUlJBWV9UWVBFX0NIRUNLIChBUlJBWV9UWVBFKS0+dHlwZV9ub25fY29tbW9uLm1heHZhbCkKKworLyogRm9yIHJlY29yZCBhbmQgdW5pb24gdHlwZXMsIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgdHlwZSwgYXMgYSBiYXNlIHR5cGUKKyAgIGZvciBpdHNlbGYuICAqLworI2RlZmluZSBUWVBFX0JJTkZPKE5PREUpIChSRUNPUkRfT1JfVU5JT05fQ0hFQ0soTk9ERSktPnR5cGVfbm9uX2NvbW1vbi5iaW5mbykKKworLyogRm9yIG5vbiByZWNvcmQgYW5kIHVuaW9uIHR5cGVzLCB1c2VkIGluIGEgbGFuZ3VhZ2UtZGVwZW5kZW50IHdheS4gICovCisjZGVmaW5lIFRZUEVfTEFOR19TTE9UXzEoTk9ERSkgXAorICAoTk9UX1JFQ09SRF9PUl9VTklPTl9DSEVDSyhOT0RFKS0+dHlwZV9ub25fY29tbW9uLmJpbmZvKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3R5cGVfbm9uX2NvbW1vbiB7CisgIHN0cnVjdCB0cmVlX3R5cGVfd2l0aF9sYW5nX3NwZWNpZmljIHdpdGhfbGFuZ19zcGVjaWZpYzsKKyAgdHJlZSB2YWx1ZXM7CisgIHRyZWUgbWludmFsOworICB0cmVlIG1heHZhbDsKKyAgdHJlZSBiaW5mbzsKK307CisMCisvKiBEZWZpbmUgYWNjZXNzb3IgbWFjcm9zIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0eXBlIGluaGVyaXRhbmNlCisgICBhbmQgYmFzZXR5cGVzLgorCisgICBBICJiYXNldHlwZSIgbWVhbnMgYSBwYXJ0aWN1bGFyIHVzYWdlIG9mIGEgZGF0YSB0eXBlIGZvciBpbmhlcml0YW5jZQorICAgaW4gYW5vdGhlciB0eXBlLiAgRWFjaCBzdWNoIGJhc2V0eXBlIHVzYWdlIGhhcyBpdHMgb3duICJiaW5mbyIKKyAgIG9iamVjdCB0byBkZXNjcmliZSBpdC4gIFRoZSBiaW5mbyBvYmplY3QgaXMgYSBUUkVFX1ZFQyBub2RlLgorCisgICBJbmhlcml0YW5jZSBpcyByZXByZXNlbnRlZCBieSB0aGUgYmluZm8gbm9kZXMgYWxsb2NhdGVkIGZvciBhCisgICBnaXZlbiB0eXBlLiAgRm9yIGV4YW1wbGUsIGdpdmVuIHR5cGVzIEMgYW5kIEQsIHN1Y2ggdGhhdCBEIGlzCisgICBpbmhlcml0ZWQgYnkgQywgMyBiaW5mbyBub2RlcyB3aWxsIGJlIGFsbG9jYXRlZDogb25lIGZvciBkZXNjcmliaW5nCisgICB0aGUgYmluZm8gcHJvcGVydGllcyBvZiBDLCBzaW1pbGFybHkgb25lIGZvciBELCBhbmQgb25lIGZvcgorICAgZGVzY3JpYmluZyB0aGUgYmluZm8gcHJvcGVydGllcyBvZiBEIGFzIGEgYmFzZSB0eXBlIGZvciBDLgorICAgVGh1cywgZ2l2ZW4gYSBwb2ludGVyIHRvIGNsYXNzIEMsIG9uZSBjYW4gZ2V0IGEgcG9pbnRlciB0byB0aGUgYmluZm8KKyAgIG9mIEQgYWN0aW5nIGFzIGEgYmFzZXR5cGUgZm9yIEMgYnkgbG9va2luZyBhdCBDJ3MgYmluZm8ncyBiYXNldHlwZXMuICAqLworCisvKiBCSU5GTyBzcGVjaWZpYyBmbGFncy4gICovCisKKy8qIE5vbnplcm8gbWVhbnMgdGhhdCB0aGUgZGVyaXZhdGlvbiBjaGFpbiBpcyB2aWEgYSBgdmlydHVhbCcgZGVjbGFyYXRpb24uICAqLworI2RlZmluZSBCSU5GT19WSVJUVUFMX1AoTk9ERSkgKFRSRUVfQklORk9fQ0hFQ0sgKE5PREUpLT5iYXNlLnN0YXRpY19mbGFnKQorCisvKiBGbGFncyBmb3IgbGFuZ3VhZ2UgZGVwZW5kZW50IHVzZS4gICovCisjZGVmaW5lIEJJTkZPX01BUktFRChOT0RFKSBUUkVFX0xBTkdfRkxBR18wKFRSRUVfQklORk9fQ0hFQ0soTk9ERSkpCisjZGVmaW5lIEJJTkZPX0ZMQUdfMShOT0RFKSBUUkVFX0xBTkdfRkxBR18xKFRSRUVfQklORk9fQ0hFQ0soTk9ERSkpCisjZGVmaW5lIEJJTkZPX0ZMQUdfMihOT0RFKSBUUkVFX0xBTkdfRkxBR18yKFRSRUVfQklORk9fQ0hFQ0soTk9ERSkpCisjZGVmaW5lIEJJTkZPX0ZMQUdfMyhOT0RFKSBUUkVFX0xBTkdfRkxBR18zKFRSRUVfQklORk9fQ0hFQ0soTk9ERSkpCisjZGVmaW5lIEJJTkZPX0ZMQUdfNChOT0RFKSBUUkVFX0xBTkdfRkxBR180KFRSRUVfQklORk9fQ0hFQ0soTk9ERSkpCisjZGVmaW5lIEJJTkZPX0ZMQUdfNShOT0RFKSBUUkVFX0xBTkdfRkxBR181KFRSRUVfQklORk9fQ0hFQ0soTk9ERSkpCisjZGVmaW5lIEJJTkZPX0ZMQUdfNihOT0RFKSBUUkVFX0xBTkdfRkxBR182KFRSRUVfQklORk9fQ0hFQ0soTk9ERSkpCisKKy8qIFRoZSBhY3R1YWwgZGF0YSB0eXBlIG5vZGUgYmVpbmcgaW5oZXJpdGVkIGluIHRoaXMgYmFzZXR5cGUuICAqLworI2RlZmluZSBCSU5GT19UWVBFKE5PREUpIFRSRUVfVFlQRSAoVFJFRV9CSU5GT19DSEVDSyhOT0RFKSkKKworLyogVGhlIG9mZnNldCB3aGVyZSB0aGlzIGJhc2V0eXBlIGFwcGVhcnMgaW4gaXRzIGNvbnRhaW5pbmcgdHlwZS4KKyAgIEJJTkZPX09GRlNFVCBzbG90IGhvbGRzIHRoZSBvZmZzZXQgKGluIGJ5dGVzKQorICAgZnJvbSB0aGUgYmFzZSBvZiB0aGUgY29tcGxldGUgb2JqZWN0IHRvIHRoZSBiYXNlIG9mIHRoZSBwYXJ0IG9mIHRoZQorICAgb2JqZWN0IHRoYXQgaXMgYWxsb2NhdGVkIG9uIGJlaGFsZiBvZiB0aGlzIGB0eXBlJy4KKyAgIFRoaXMgaXMgYWx3YXlzIDAgZXhjZXB0IHdoZW4gdGhlcmUgaXMgbXVsdGlwbGUgaW5oZXJpdGFuY2UuICAqLworCisjZGVmaW5lIEJJTkZPX09GRlNFVChOT0RFKSAoVFJFRV9CSU5GT19DSEVDSyhOT0RFKS0+YmluZm8ub2Zmc2V0KQorI2RlZmluZSBCSU5GT19PRkZTRVRfWkVST1AoTk9ERSkgKGludGVnZXJfemVyb3AgKEJJTkZPX09GRlNFVCAoTk9ERSkpKQorCisvKiBUaGUgdmlydHVhbCBmdW5jdGlvbiB0YWJsZSBiZWxvbmdpbmcgdG8gdGhpcyBiYXNldHlwZS4gIFZpcnR1YWwKKyAgIGZ1bmN0aW9uIHRhYmxlcyBwcm92aWRlIGEgbWVjaGFuaXNtIGZvciBydW4tdGltZSBtZXRob2QgZGlzcGF0Y2hpbmcuCisgICBUaGUgZW50cmllcyBvZiBhIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgYXJlIGxhbmd1YWdlLWRlcGVuZGVudC4gICovCisKKyNkZWZpbmUgQklORk9fVlRBQkxFKE5PREUpIChUUkVFX0JJTkZPX0NIRUNLKE5PREUpLT5iaW5mby52dGFibGUpCisKKy8qIFRoZSB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiB0aGUgdmlydHVhbCBmdW5jdGlvbiB0YWJsZS4gIFRoaXMgaXMKKyAgIGEgVFJFRV9MSVNUIHRoYXQgaXMgdXNlZCBhcyBhbiBpbml0aWFsIGFwcHJveGltYXRpb24gZm9yIGJ1aWxkaW5nCisgICBhIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgZm9yIHRoaXMgYmFzZXR5cGUuICAqLworI2RlZmluZSBCSU5GT19WSVJUVUFMUyhOT0RFKSAoVFJFRV9CSU5GT19DSEVDSyhOT0RFKS0+YmluZm8udmlydHVhbHMpCisKKy8qIEEgdmVjdG9yIG9mIGJpbmZvcyBmb3IgdGhlIGRpcmVjdCBiYXNldHlwZXMgaW5oZXJpdGVkIGJ5IHRoaXMKKyAgIGJhc2V0eXBlLgorCisgICBJZiB0aGlzIGJhc2V0eXBlIGRlc2NyaWJlcyB0eXBlIEQgYXMgaW5oZXJpdGVkIGluIEMsIGFuZCBpZiB0aGUKKyAgIGJhc2V0eXBlcyBvZiBEIGFyZSBFIGFuZCBGLCB0aGVuIHRoaXMgdmVjdG9yIGNvbnRhaW5zIGJpbmZvcyBmb3IKKyAgIGluaGVyaXRhbmNlIG9mIEUgYW5kIEYgYnkgQy4gICovCisjZGVmaW5lIEJJTkZPX0JBU0VfQklORk9TKE5PREUpICgmVFJFRV9CSU5GT19DSEVDSyhOT0RFKS0+YmluZm8uYmFzZV9iaW5mb3MpCisKKy8qIFRoZSBudW1iZXIgb2YgYmFzZXR5cGVzIGZvciBOT0RFLiAgKi8KKyNkZWZpbmUgQklORk9fTl9CQVNFX0JJTkZPUyhOT0RFKSAoQklORk9fQkFTRV9CSU5GT1MgKE5PREUpLT5sZW5ndGggKCkpCisKKy8qIEFjY2Vzc29yIG1hY3JvIHRvIGdldCB0byB0aGUgTnRoIGJhc2UgYmluZm8gb2YgdGhpcyBiaW5mby4gICovCisjZGVmaW5lIEJJTkZPX0JBU0VfQklORk8oTk9ERSxOKSBcCisgKCgqQklORk9fQkFTRV9CSU5GT1MgKE5PREUpKVsoTildKQorI2RlZmluZSBCSU5GT19CQVNFX0lURVJBVEUoTk9ERSxOLEIpIFwKKyAoQklORk9fQkFTRV9CSU5GT1MgKE5PREUpLT5pdGVyYXRlICgoTiksICYoQikpKQorI2RlZmluZSBCSU5GT19CQVNFX0FQUEVORChOT0RFLFQpIFwKKyAoQklORk9fQkFTRV9CSU5GT1MgKE5PREUpLT5xdWlja19wdXNoICgoVCkpKQorCisvKiBGb3IgYSBCSU5GTyByZWNvcmQgZGVzY3JpYmluZyBhIHZpcnR1YWwgYmFzZSBjbGFzcywgaS5lLiwgb25lIHdoZXJlCisgICBUUkVFX1ZJQV9WSVJUVUFMIGlzIHNldCwgdGhpcyBmaWVsZCBhc3Npc3RzIGluIGxvY2F0aW5nIHRoZSB2aXJ0dWFsCisgICBiYXNlLiAgVGhlIGFjdHVhbCBjb250ZW50cyBhcmUgbGFuZ3VhZ2UtZGVwZW5kZW50LiAgSW4gdGhlIEMrKworICAgZnJvbnQtZW5kIHRoaXMgZmllbGQgaXMgYW4gSU5URUdFUl9DU1QgZ2l2aW5nIGFuIG9mZnNldCBpbnRvIHRoZQorICAgdnRhYmxlIHdoZXJlIHRoZSBvZmZzZXQgdG8gdGhlIHZpcnR1YWwgYmFzZSBjYW4gYmUgZm91bmQuICAqLworI2RlZmluZSBCSU5GT19WUFRSX0ZJRUxEKE5PREUpIChUUkVFX0JJTkZPX0NIRUNLKE5PREUpLT5iaW5mby52cHRyX2ZpZWxkKQorCisvKiBJbmRpY2F0ZXMgdGhlIGFjY2Vzc2VzIHRoaXMgYmluZm8gaGFzIHRvIGl0cyBiYXNlcy4gVGhlIHZhbHVlcyBhcmUKKyAgIGFjY2Vzc19wdWJsaWNfbm9kZSwgYWNjZXNzX3Byb3RlY3RlZF9ub2RlIG9yIGFjY2Vzc19wcml2YXRlX25vZGUuCisgICBJZiB0aGlzIGFycmF5IGlzIG5vdCBwcmVzZW50LCBwdWJsaWMgYWNjZXNzIGlzIGltcGxpZWQuICAqLworI2RlZmluZSBCSU5GT19CQVNFX0FDQ0VTU0VTKE5PREUpIChUUkVFX0JJTkZPX0NIRUNLKE5PREUpLT5iaW5mby5iYXNlX2FjY2Vzc2VzKQorCisjZGVmaW5lIEJJTkZPX0JBU0VfQUNDRVNTKE5PREUsTikgXAorICAoKkJJTkZPX0JBU0VfQUNDRVNTRVMgKE5PREUpKVsoTildCisjZGVmaW5lIEJJTkZPX0JBU0VfQUNDRVNTX0FQUEVORChOT0RFLFQpIFwKKyAgQklORk9fQkFTRV9BQ0NFU1NFUyAoTk9ERSktPnF1aWNrX3B1c2ggKChUKSkKKworLyogVGhlIGluZGV4IGluIHRoZSBWVFQgd2hlcmUgdGhpcyBzdWJvYmplY3QncyBzdWItVlRUIGNhbiBiZSBmb3VuZC4KKyAgIE5VTExfVFJFRSBpZiB0aGVyZSBpcyBubyBzdWItVlRULiAgKi8KKyNkZWZpbmUgQklORk9fU1VCVlRUX0lOREVYKE5PREUpIChUUkVFX0JJTkZPX0NIRUNLKE5PREUpLT5iaW5mby52dHRfc3VidnR0KQorCisvKiBUaGUgaW5kZXggaW4gdGhlIFZUVCB3aGVyZSB0aGUgdnB0ciBmb3IgdGhpcyBzdWJvYmplY3QgY2FuIGJlCisgICBmb3VuZC4gIE5VTExfVFJFRSBpZiB0aGVyZSBpcyBubyBzZWNvbmRhcnkgdnB0ciBpbiB0aGUgVlRULiAgKi8KKyNkZWZpbmUgQklORk9fVlBUUl9JTkRFWChOT0RFKSAoVFJFRV9CSU5GT19DSEVDSyhOT0RFKS0+YmluZm8udnR0X3ZwdHIpCisKKy8qIFRoZSBCSU5GT19JTkhFUklUQU5DRV9DSEFJTiBwb2ludHMgYXQgdGhlIGJpbmZvIGZvciB0aGUgYmFzZQorICAgaW5oZXJpdGluZyB0aGlzIGJhc2UgZm9yIG5vbi12aXJ0dWFsIGJhc2VzLiBGb3IgdmlydHVhbCBiYXNlcyBpdAorICAgcG9pbnRzIGVpdGhlciB0byB0aGUgYmluZm8gZm9yIHdoaWNoIHRoaXMgaXMgYSBwcmltYXJ5IGJpbmZvLCBvciB0bworICAgdGhlIGJpbmZvIG9mIHRoZSBtb3N0IGRlcml2ZWQgdHlwZS4gICovCisjZGVmaW5lIEJJTkZPX0lOSEVSSVRBTkNFX0NIQUlOKE5PREUpIFwKKwkoVFJFRV9CSU5GT19DSEVDSyhOT0RFKS0+YmluZm8uaW5oZXJpdGFuY2UpCisKK3N0cnVjdCBHVFkgKCgpKSB0cmVlX2JpbmZvIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKworICB0cmVlIG9mZnNldDsKKyAgdHJlZSB2dGFibGU7CisgIHRyZWUgdmlydHVhbHM7CisgIHRyZWUgdnB0cl9maWVsZDsKKyAgdmVjPHRyZWUsIHZhX2djPiAqYmFzZV9hY2Nlc3NlczsKKyAgdHJlZSBpbmhlcml0YW5jZTsKKworICB0cmVlIHZ0dF9zdWJ2dHQ7CisgIHRyZWUgdnR0X3ZwdHI7CisKKyAgdmVjPHRyZWUsIHZhX2djPiBiYXNlX2JpbmZvczsKK307CisKKwwKKy8qIERlZmluZSBmaWVsZHMgYW5kIGFjY2Vzc29ycyBmb3Igbm9kZXMgcmVwcmVzZW50aW5nIGRlY2xhcmVkIG5hbWVzLiAgKi8KKworLyogTm9uemVybyBpZiBERUNMIHJlcHJlc2VudHMgYW4gU1NBIG5hbWUgb3IgYSB2YXJpYWJsZSB0aGF0IGNhbiBwb3NzaWJseQorICAgaGF2ZSBhbiBhc3NvY2lhdGVkIFNTQSBuYW1lLiAgKi8KKyNkZWZpbmUgU1NBX1ZBUl9QKERFQ0wpCQkJCQkJCVwKKwkoVFJFRV9DT0RFIChERUNMKSA9PSBWQVJfREVDTAkJCQkJXAorCSB8fCBUUkVFX0NPREUgKERFQ0wpID09IFBBUk1fREVDTAkJCQlcCisJIHx8IFRSRUVfQ09ERSAoREVDTCkgPT0gUkVTVUxUX0RFQ0wJCQkJXAorCSB8fCBUUkVFX0NPREUgKERFQ0wpID09IFNTQV9OQU1FKQorCisKKworLyogRW51bWVyYXRlIHZpc2liaWxpdHkgc2V0dGluZ3MuICAqLworI2lmbmRlZiBTWU1CT0xfVklTSUJJTElUWV9ERUZJTkVECisjZGVmaW5lIFNZTUJPTF9WSVNJQklMSVRZX0RFRklORUQKK2VudW0gc3ltYm9sX3Zpc2liaWxpdHkKK3sKKyAgVklTSUJJTElUWV9ERUZBVUxULAorICBWSVNJQklMSVRZX1BST1RFQ1RFRCwKKyAgVklTSUJJTElUWV9ISURERU4sCisgIFZJU0lCSUxJVFlfSU5URVJOQUwKK307CisjZW5kaWYKKworc3RydWN0IGZ1bmN0aW9uOworCisjZGVmaW5lIERFQ0xfQ0hBSU4oTk9ERSkgKFRSRUVfQ0hBSU4gKERFQ0xfTUlOSU1BTF9DSEVDSyAoTk9ERSkpKQorCisvKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgYXMgd3JpdHRlbiBieSB0aGUgdXNlci4KKyAgIEl0IGlzIGFuIElERU5USUZJRVJfTk9ERS4gICovCisjZGVmaW5lIERFQ0xfTkFNRShOT0RFKSAoREVDTF9NSU5JTUFMX0NIRUNLIChOT0RFKS0+ZGVjbF9taW5pbWFsLm5hbWUpCisKKy8qIEV2ZXJ5IC4uLl9ERUNMIG5vZGUgZ2V0cyBhIHVuaXF1ZSBudW1iZXIuICAqLworI2RlZmluZSBERUNMX1VJRChOT0RFKSAoREVDTF9NSU5JTUFMX0NIRUNLIChOT0RFKS0+ZGVjbF9taW5pbWFsLnVpZCkKKworLyogREVCVUdfRVhQUl9ERUNMcyBnZXQgbmVnYXRpdmUgVUlEIG51bWJlcnMsIHRvIGNhdGNoIGVycm9uZW91cworICAgdXNlcy4gICovCisjZGVmaW5lIERFQlVHX1RFTVBfVUlEKE5PREUpICgtREVDTF9VSUQgKFRSRUVfQ0hFQ0sgKChOT0RFKSwgREVCVUdfRVhQUl9ERUNMKSkpCisKKy8qIEV2ZXJ5IC4uLl9ERUNMIG5vZGUgZ2V0cyBhIHVuaXF1ZSBudW1iZXIgdGhhdCBzdGF5cyB0aGUgc2FtZSBldmVuCisgICB3aGVuIHRoZSBkZWNsIGlzIGNvcGllZCBieSB0aGUgaW5saW5lciBvbmNlIGl0IGlzIHNldC4gICovCisjZGVmaW5lIERFQ0xfUFRfVUlEKE5PREUpIFwKKyAgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24ucHRfdWlkID09IC0xdSBcCisgICA/IChOT0RFKS0+ZGVjbF9taW5pbWFsLnVpZCA6IChOT0RFKS0+ZGVjbF9jb21tb24ucHRfdWlkKQorLyogSW5pdGlhbGl6ZSB0aGUgLi4uX0RFQ0wgbm9kZSBwdC11aWQgdG8gdGhlIGRlY2xzIHVpZC4gICovCisjZGVmaW5lIFNFVF9ERUNMX1BUX1VJRChOT0RFLCBVSUQpIFwKKyAgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24ucHRfdWlkID0gKFVJRCkpCisvKiBXaGV0aGVyIHRoZSAuLi5fREVDTCBub2RlIHB0LXVpZCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmQgdGh1cyBuZWVkcyB0bworICAgYmUgcHJlc2VydmVkIHdoZW4gY29weWluIHRoZSBkZWNsLiAgKi8KKyNkZWZpbmUgREVDTF9QVF9VSURfU0VUX1AoTk9ERSkgXAorICAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5wdF91aWQgIT0gLTF1KQorCisvKiBUaGVzZSB0d28gZmllbGRzIGRlc2NyaWJlIHdoZXJlIGluIHRoZSBzb3VyY2UgY29kZSB0aGUgZGVjbGFyYXRpb24KKyAgIHdhcy4gIElmIHRoZSBkZWNsYXJhdGlvbiBhcHBlYXJzIGluIHNldmVyYWwgcGxhY2VzIChhcyBmb3IgYSBDCisgICBmdW5jdGlvbiB0aGF0IGlzIGRlY2xhcmVkIGZpcnN0IGFuZCB0aGVuIGRlZmluZWQgbGF0ZXIpLCB0aGlzCisgICBpbmZvcm1hdGlvbiBzaG91bGQgcmVmZXIgdG8gdGhlIGRlZmluaXRpb24uICAqLworI2RlZmluZSBERUNMX1NPVVJDRV9MT0NBVElPTihOT0RFKSBcCisgIChERUNMX01JTklNQUxfQ0hFQ0sgKE5PREUpLT5kZWNsX21pbmltYWwubG9jdXMpCisjZGVmaW5lIERFQ0xfU09VUkNFX0ZJTEUoTk9ERSkgTE9DQVRJT05fRklMRSAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKE5PREUpKQorI2RlZmluZSBERUNMX1NPVVJDRV9MSU5FKE5PREUpIExPQ0FUSU9OX0xJTkUgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChOT0RFKSkKKyNkZWZpbmUgREVDTF9TT1VSQ0VfQ09MVU1OKE5PREUpIExPQ0FUSU9OX0NPTFVNTiAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKE5PREUpKQorI2RlZmluZSBERUNMX0lTX0JVSUxUSU4oREVDTCkgXAorICAoTE9DQVRJT05fTE9DVVMgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChERUNMKSkgPD0gQlVJTFRJTlNfTE9DQVRJT04pCisKKy8qICBGb3IgRklFTERfREVDTHMsIHRoaXMgaXMgdGhlIFJFQ09SRF9UWVBFLCBVTklPTl9UWVBFLCBvcgorICAgIFFVQUxfVU5JT05fVFlQRSBub2RlIHRoYXQgdGhlIGZpZWxkIGlzIGEgbWVtYmVyIG9mLiAgRm9yIFZBUl9ERUNMLAorICAgIFBBUk1fREVDTCwgRlVOQ1RJT05fREVDTCwgTEFCRUxfREVDTCwgUkVTVUxUX0RFQ0wsIGFuZCBDT05TVF9ERUNMCisgICAgbm9kZXMsIHRoaXMgcG9pbnRzIHRvIGVpdGhlciB0aGUgRlVOQ1RJT05fREVDTCBmb3IgdGhlIGNvbnRhaW5pbmcKKyAgICBmdW5jdGlvbiwgdGhlIFJFQ09SRF9UWVBFIG9yIFVOSU9OX1RZUEUgZm9yIHRoZSBjb250YWluaW5nIHR5cGUsIG9yCisgICAgTlVMTF9UUkVFIG9yIGEgVFJBTlNMQVRJT05fVU5JVF9ERUNMIGlmIHRoZSBnaXZlbiBkZWNsIGhhcyAiZmlsZQorICAgIHNjb3BlIi4gIEluIHBhcnRpY3VsYXIsIGZvciBWQVJfREVDTHMgd2hpY2ggYXJlIHZpcnR1YWwgdGFibGUgcG9pbnRlcnMKKyAgICAodGhleSBoYXZlIERFQ0xfVklSVFVBTCBzZXQpLCB3ZSB1c2UgREVDTF9DT05URVhUIHRvIGRldGVybWluZSB0aGUgdHlwZQorICAgIHRoZXkgYmVsb25nIHRvLiAgKi8KKyNkZWZpbmUgREVDTF9DT05URVhUKE5PREUpIChERUNMX01JTklNQUxfQ0hFQ0sgKE5PREUpLT5kZWNsX21pbmltYWwuY29udGV4dCkKKyNkZWZpbmUgREVDTF9GSUVMRF9DT05URVhUKE5PREUpIFwKKyAgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX21pbmltYWwuY29udGV4dCkKKworLyogSWYgbm9uemVybywgZGVjbCdzIG5hbWUgc2hvdWxkbid0IGJlIGVtaXR0ZWQgaW50byBkZWJ1ZyBpbmZvLiAgKi8KKyNkZWZpbmUgREVDTF9OQU1FTEVTUyhOT0RFKSAoREVDTF9NSU5JTUFMX0NIRUNLIChOT0RFKS0+YmFzZS51LmJpdHMubmFtZWxlc3NfZmxhZykKKworc3RydWN0IEdUWSgoKSkgdHJlZV9kZWNsX21pbmltYWwgeworICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOworICBsb2NhdGlvbl90IGxvY3VzOworICB1bnNpZ25lZCBpbnQgdWlkOworICB0cmVlIG5hbWU7CisgIHRyZWUgY29udGV4dDsKK307CisKKworLyogRm9yIGFueSBzb3J0IG9mIGEgLi4uX0RFQ0wgbm9kZSwgdGhpcyBwb2ludHMgdG8gdGhlIG9yaWdpbmFsIChhYnN0cmFjdCkKKyAgIGRlY2wgbm9kZSB3aGljaCB0aGlzIGRlY2wgaXMgYW4gaW5saW5lZC9jbG9uZWQgaW5zdGFuY2Ugb2YsIG9yIGVsc2UgaXQKKyAgIGlzIE5VTEwgaW5kaWNhdGluZyB0aGF0IHRoaXMgZGVjbCBpcyBub3QgYW4gaW5zdGFuY2Ugb2Ygc29tZSBvdGhlciBkZWNsLgorCisgICBUaGUgQyBmcm9udC1lbmQgYWxzbyB1c2VzIHRoaXMgaW4gYSBuZXN0ZWQgZGVjbGFyYXRpb24gb2YgYW4gaW5saW5lCisgICBmdW5jdGlvbiwgdG8gcG9pbnQgYmFjayB0byB0aGUgZGVmaW5pdGlvbi4gICovCisjZGVmaW5lIERFQ0xfQUJTVFJBQ1RfT1JJR0lOKE5PREUpIFwKKyAgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uYWJzdHJhY3Rfb3JpZ2luKQorCisvKiBMaWtlIERFQ0xfQUJTVFJBQ1RfT1JJR0lOLCBidXQgcmV0dXJucyBOT0RFIGlmIHRoZXJlJ3Mgbm8gYWJzdHJhY3QKKyAgIG9yaWdpbi4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gc2V0dGluZyB0aGUgREVDTF9BQlNUUkFDVF9PUklHSU4uICAqLworI2RlZmluZSBERUNMX09SSUdJTihOT0RFKSBcCisgIChERUNMX0FCU1RSQUNUX09SSUdJTiAoTk9ERSkgPyBERUNMX0FCU1RSQUNUX09SSUdJTiAoTk9ERSkgOiAoTk9ERSkpCisKKy8qIE5vbnplcm8gZm9yIGFueSBzb3J0IG9mIC4uLl9ERUNMIG5vZGUgbWVhbnMgdGhpcyBkZWNsIG5vZGUgcmVwcmVzZW50cyBhbgorICAgaW5saW5lIGluc3RhbmNlIG9mIHNvbWUgb3JpZ2luYWwgKGFic3RyYWN0KSBkZWNsIGZyb20gYW4gaW5saW5lIGZ1bmN0aW9uOworICAgc3VwcHJlc3MgYW55IHdhcm5pbmdzIGFib3V0IHNoYWRvd2luZyBzb21lIG90aGVyIHZhcmlhYmxlLiAgRlVOQ1RJT05fREVDTAorICAgbm9kZXMgY2FuIGFsc28gaGF2ZSB0aGVpciBhYnN0cmFjdCBvcmlnaW4gc2V0IHRvIHRoZW1zZWx2ZXMuICAqLworI2RlZmluZSBERUNMX0ZST01fSU5MSU5FKE5PREUpIFwKKyAgKERFQ0xfQUJTVFJBQ1RfT1JJR0lOIChOT0RFKSAhPSBOVUxMX1RSRUUgXAorICAgJiYgREVDTF9BQlNUUkFDVF9PUklHSU4gKE5PREUpICE9IChOT0RFKSkKKworLyogSW4gYSBERUNMIHRoaXMgaXMgdGhlIGZpZWxkIHdoZXJlIGF0dHJpYnV0ZXMgYXJlIHN0b3JlZC4gICovCisjZGVmaW5lIERFQ0xfQVRUUklCVVRFUyhOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmF0dHJpYnV0ZXMpCisKKy8qIEZvciBhIEZVTkNUSU9OX0RFQ0wsIGhvbGRzIHRoZSB0cmVlIG9mIEJJTkRJTkdzLgorICAgRm9yIGEgVFJBTlNMQVRJT05fVU5JVF9ERUNMLCBob2xkcyB0aGUgbmFtZXNwYWNlJ3MgQkxPQ0suCisgICBGb3IgYSBWQVJfREVDTCwgaG9sZHMgdGhlIGluaXRpYWwgdmFsdWUuCisgICBGb3IgYSBQQVJNX0RFQ0wsIHVzZWQgZm9yIERFQ0xfQVJHX1RZUEUtLWRlZmF1bHQKKyAgIHZhbHVlcyBmb3IgcGFyYW1ldGVycyBhcmUgZW5jb2RlZCBpbiB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24sCisgICBub3QgaW4gdGhlIFBBUk1fREVDTCBzbG90LgorICAgRm9yIGEgRklFTERfREVDTCwgdGhpcyBpcyB1c2VkIGZvciBlbnVtZXJhdGlvbiB2YWx1ZXMgYW5kIHRoZSBDCisgICBmcm9udGVuZCB1c2VzIGl0IGZvciB0ZW1wb3JhcmlseSBzdG9yaW5nIGJpdHdpZHRoIG9mIGJpdGZpZWxkcy4KKworICAgPz8/IE5lZWQgdG8gZmlndXJlIG91dCBzb21lIHdheSB0byBjaGVjayB0aGlzIGlzbid0IGEgUEFSTV9ERUNMLiAgKi8KKyNkZWZpbmUgREVDTF9JTklUSUFMKE5PREUpIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmluaXRpYWwpCisKKy8qIEhvbGRzIHRoZSBzaXplIG9mIHRoZSBkYXR1bSwgaW4gYml0cywgYXMgYSB0cmVlIGV4cHJlc3Npb24uCisgICBOZWVkIG5vdCBiZSBjb25zdGFudC4gICovCisjZGVmaW5lIERFQ0xfU0laRShOT0RFKSAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5zaXplKQorLyogTGlrZXdpc2UgZm9yIHRoZSBzaXplIGluIGJ5dGVzLiAgKi8KKyNkZWZpbmUgREVDTF9TSVpFX1VOSVQoTk9ERSkgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uc2l6ZV91bml0KQorLyogSG9sZHMgdGhlIGFsaWdubWVudCByZXF1aXJlZCBmb3IgdGhlIGRhdHVtLCBpbiBiaXRzLiAgKi8KKyNkZWZpbmUgREVDTF9BTElHTihOT0RFKSAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5hbGlnbikKKy8qIFRoZSBhbGlnbm1lbnQgb2YgTk9ERSwgaW4gYnl0ZXMuICAqLworI2RlZmluZSBERUNMX0FMSUdOX1VOSVQoTk9ERSkgKERFQ0xfQUxJR04gKE5PREUpIC8gQklUU19QRVJfVU5JVCkKKy8qIFNldCBpZiB0aGUgYWxpZ25tZW50IG9mIHRoaXMgREVDTCBoYXMgYmVlbiBzZXQgYnkgdGhlIHVzZXIsIGZvcgorICAgZXhhbXBsZSB3aXRoIGFuICdhbGlnbmVkJyBhdHRyaWJ1dGUuICAqLworI2RlZmluZSBERUNMX1VTRVJfQUxJR04oTk9ERSkgXAorICAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5iYXNlLnUuYml0cy51c2VyX2FsaWduKQorLyogSG9sZHMgdGhlIG1hY2hpbmUgbW9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZWNsYXJhdGlvbiBvZiBhIHZhcmlhYmxlIG9yCisgICBmaWVsZC4gIEFsd2F5cyBlcXVhbCB0byBUWVBFX01PREUgKFRSRUVfVFlQRSAoZGVjbCkpIGV4Y2VwdCBmb3IgYQorICAgRklFTERfREVDTC4gICovCisjZGVmaW5lIERFQ0xfTU9ERShOT0RFKSAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5tb2RlKQorCisvKiBGb3IgRlVOQ1RJT05fREVDTCwgaWYgaXQgaXMgYnVpbHQtaW4sIHRoaXMgaWRlbnRpZmllcyB3aGljaCBidWlsdC1pbgorICAgb3BlcmF0aW9uIGl0IGlzLiAgTm90ZSwgaG93ZXZlciwgdGhhdCB0aGlzIGZpZWxkIGlzIG92ZXJsb2FkZWQsIHdpdGgKKyAgIERFQ0xfQlVJTFRfSU5fQ0xBU1MgYXMgdGhlIGRpc2NyaW1pbmFudCwgc28gdGhlIGxhdHRlciBtdXN0IGFsd2F5cyBiZQorICAgY2hlY2tlZCBiZWZvcmUgYW55IGFjY2VzcyB0byB0aGUgZm9ybWVyLiAgKi8KKyNkZWZpbmUgREVDTF9GVU5DVElPTl9DT0RFKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLmZ1bmN0aW9uX2NvZGUpCisjZGVmaW5lIERFQ0xfREVCVUdfRVhQUl9JU19GUk9NKE5PREUpIFwKKyAgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uZGVidWdfZXhwcl9pc19mcm9tKQorCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fUEVSU09OQUxJVFkoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wucGVyc29uYWxpdHkpCisKKy8qIE5vbnplcm8gZm9yIGEgZ2l2ZW4gLi4uX0RFQ0wgbm9kZSBtZWFucyB0aGF0IHRoZSBuYW1lIG9mIHRoaXMgbm9kZSBzaG91bGQKKyAgIGJlIGlnbm9yZWQgZm9yIHN5bWJvbGljIGRlYnVnIHB1cnBvc2VzLiAgRm9yIGEgVFlQRV9ERUNMLCB0aGlzIG1lYW5zIHRoYXQKKyAgIHRoZSBhc3NvY2lhdGVkIHR5cGUgc2hvdWxkIGJlIGlnbm9yZWQuICBGb3IgYSBGVU5DVElPTl9ERUNMLCB0aGUgYm9keSBvZgorICAgdGhlIGZ1bmN0aW9uIHNob3VsZCBhbHNvIGJlIGlnbm9yZWQuICAqLworI2RlZmluZSBERUNMX0lHTk9SRURfUChOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmlnbm9yZWRfZmxhZykKKworLyogTm9uemVybyBmb3IgYSBnaXZlbiAuLi5fREVDTCBub2RlIG1lYW5zIHRoYXQgdGhpcyBub2RlIHJlcHJlc2VudHMgYW4KKyAgICJhYnN0cmFjdCBpbnN0YW5jZSIgb2YgdGhlIGdpdmVuIGRlY2xhcmF0aW9uIChlLmcuIGluIHRoZSBvcmlnaW5hbAorICAgZGVjbGFyYXRpb24gb2YgYW4gaW5saW5lIGZ1bmN0aW9uKS4gIFdoZW4gZ2VuZXJhdGluZyBzeW1ib2xpYyBkZWJ1Z2dpbmcKKyAgIGluZm9ybWF0aW9uLCB3ZSBtdXN0bid0IHRyeSB0byBnZW5lcmF0ZSBhbnkgYWRkcmVzcyBpbmZvcm1hdGlvbiBmb3Igbm9kZXMKKyAgIG1hcmtlZCBhcyAiYWJzdHJhY3QgaW5zdGFuY2VzIiBiZWNhdXNlIHdlIGRvbid0IGFjdHVhbGx5IGdlbmVyYXRlCisgICBhbnkgY29kZSBvciBhbGxvY2F0ZSBhbnkgZGF0YSBzcGFjZSBmb3Igc3VjaCBpbnN0YW5jZXMuICAqLworI2RlZmluZSBERUNMX0FCU1RSQUNUKE5PREUpIFwKKyAgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uYWJzdHJhY3RfZmxhZykKKworLyogTGFuZ3VhZ2Utc3BlY2lmaWMgZGVjbCBpbmZvcm1hdGlvbi4gICovCisjZGVmaW5lIERFQ0xfTEFOR19TUEVDSUZJQyhOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfc3BlY2lmaWMpCisKKy8qIEluIGEgVkFSX0RFQ0wgb3IgRlVOQ1RJT05fREVDTCwgbm9uemVybyBtZWFucyBleHRlcm5hbCByZWZlcmVuY2U6CisgICBkbyBub3QgYWxsb2NhdGUgc3RvcmFnZSwgYW5kIHJlZmVyIHRvIGEgZGVmaW5pdGlvbiBlbHNld2hlcmUuICBOb3RlIHRoYXQKKyAgIHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgaW1wbHkgdGhlIGVudGl0eSByZXByZXNlbnRlZCBieSBOT0RFCisgICBoYXMgbm8gcHJvZ3JhbSBzb3VyY2UtbGV2ZWwgZGVmaW5pdGlvbiBpbiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQuICBGb3IKKyAgIGV4YW1wbGUsIGZvciBhIEZVTkNUSU9OX0RFQ0wsIERFQ0xfU0FWRURfVFJFRSBtYXkgYmUgbm9uLU5VTEwgYW5kCisgICBERUNMX0VYVEVSTkFMIG1heSBiZSB0cnVlIHNpbXVsdGFuZW91c2x5OyB0aGF0IGNhbiBiZSB0aGUgY2FzZSBmb3IKKyAgIGEgQzk5ICJleHRlcm4gaW5saW5lIiBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfRVhURVJOQUwoTk9ERSkgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uZGVjbF9mbGFnXzEpCisKKy8qIE5vbnplcm8gaW4gYSAuLi5fREVDTCBtZWFucyB0aGlzIHZhcmlhYmxlIGlzIHJlZidkIGZyb20gYSBuZXN0ZWQgZnVuY3Rpb24uCisgICBGb3IgVkFSX0RFQ0wgbm9kZXMsIFBBUk1fREVDTCBub2RlcywgYW5kIEZVTkNUSU9OX0RFQ0wgbm9kZXMuCisKKyAgIEZvciBMQUJFTF9ERUNMIG5vZGVzLCBub256ZXJvIGlmIG5vbmxvY2FsIGdvdG9zIHRvIHRoZSBsYWJlbCBhcmUgcGVybWl0dGVkLgorCisgICBBbHNvIHNldCBpbiBzb21lIGxhbmd1YWdlcyBmb3IgdmFyaWFibGVzLCBldGMuLCBvdXRzaWRlIHRoZSBub3JtYWwKKyAgIGxleGljYWwgc2NvcGUsIHN1Y2ggYXMgY2xhc3MgaW5zdGFuY2UgdmFyaWFibGVzLiAgKi8KKyNkZWZpbmUgREVDTF9OT05MT0NBTChOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLm5vbmxvY2FsX2ZsYWcpCisKKy8qIFVzZWQgaW4gVkFSX0RFQ0xzIHRvIGluZGljYXRlIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGEgdnRhYmxlLgorICAgVXNlZCBpbiBGSUVMRF9ERUNMcyBmb3IgdnRhYmxlIHBvaW50ZXJzLgorICAgVXNlZCBpbiBGVU5DVElPTl9ERUNMcyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmdW5jdGlvbiBpcyB2aXJ0dWFsLiAgKi8KKyNkZWZpbmUgREVDTF9WSVJUVUFMX1AoTk9ERSkgXAorICAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi52aXJ0dWFsX2ZsYWcpCisKKy8qIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIERFQ0wgcmVwcmVzZW50cyBhIGNvbXBpbGVyLWdlbmVyYXRlZCBlbnRpdHkuICAqLworI2RlZmluZSBERUNMX0FSVElGSUNJQUwoTk9ERSkgXAorICAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5hcnRpZmljaWFsX2ZsYWcpCisKKy8qIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIGxhbmd1YWdlLXNwZWNpZmljIHVzZXMuICAqLworI2RlZmluZSBERUNMX0xBTkdfRkxBR18wKE5PREUpIFwKKyAgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24ubGFuZ19mbGFnXzApCisjZGVmaW5lIERFQ0xfTEFOR19GTEFHXzEoTk9ERSkgXAorICAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5sYW5nX2ZsYWdfMSkKKyNkZWZpbmUgREVDTF9MQU5HX0ZMQUdfMihOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ18yKQorI2RlZmluZSBERUNMX0xBTkdfRkxBR18zKE5PREUpIFwKKyAgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24ubGFuZ19mbGFnXzMpCisjZGVmaW5lIERFQ0xfTEFOR19GTEFHXzQoTk9ERSkgXAorICAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5sYW5nX2ZsYWdfNCkKKyNkZWZpbmUgREVDTF9MQU5HX0ZMQUdfNShOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ181KQorI2RlZmluZSBERUNMX0xBTkdfRkxBR182KE5PREUpIFwKKyAgKERFQ0xfQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24ubGFuZ19mbGFnXzYpCisjZGVmaW5lIERFQ0xfTEFOR19GTEFHXzcoTk9ERSkgXAorICAoREVDTF9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5sYW5nX2ZsYWdfNykKKyNkZWZpbmUgREVDTF9MQU5HX0ZMQUdfOChOT0RFKSBcCisgIChERUNMX0NPTU1PTl9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmxhbmdfZmxhZ184KQorCisvKiBOb256ZXJvIGZvciBhIHNjb3BlIHdoaWNoIGlzIGVxdWFsIHRvIGZpbGUgc2NvcGUuICAqLworI2RlZmluZSBTQ09QRV9GSUxFX1NDT1BFX1AoRVhQKQlcCisgICghIChFWFApIHx8IFRSRUVfQ09ERSAoRVhQKSA9PSBUUkFOU0xBVElPTl9VTklUX0RFQ0wpCisvKiBOb256ZXJvIGZvciBhIGRlY2wgd2hpY2ggaXMgYXQgZmlsZSBzY29wZS4gICovCisjZGVmaW5lIERFQ0xfRklMRV9TQ09QRV9QKEVYUCkgU0NPUEVfRklMRV9TQ09QRV9QIChERUNMX0NPTlRFWFQgKEVYUCkpCisvKiBOb256ZXJvIGZvciBhIHR5cGUgd2hpY2ggaXMgYXQgZmlsZSBzY29wZS4gICovCisjZGVmaW5lIFRZUEVfRklMRV9TQ09QRV9QKEVYUCkgU0NPUEVfRklMRV9TQ09QRV9QIChUWVBFX0NPTlRFWFQgKEVYUCkpCisKKy8qIE5vbnplcm8gZm9yIGEgZGVjbCB0aGF0IGlzIGRlY29yYXRlZCB1c2luZyBhdHRyaWJ1dGUgdXNlZC4KKyAgIFRoaXMgaW5kaWNhdGVzIHRvIGNvbXBpbGVyIHRvb2xzIHRoYXQgdGhpcyBkZWNsIG5lZWRzIHRvIGJlIHByZXNlcnZlZC4gICovCisjZGVmaW5lIERFQ0xfUFJFU0VSVkVfUChERUNMKSBcCisgIERFQ0xfQ09NTU9OX0NIRUNLIChERUNMKS0+ZGVjbF9jb21tb24ucHJlc2VydmVfZmxhZworCisvKiBGb3IgZnVuY3Rpb24gbG9jYWwgdmFyaWFibGVzIG9mIENPTVBMRVggYW5kIFZFQ1RPUiB0eXBlcywKKyAgIGluZGljYXRlcyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBub3QgYWxpYXNlZCwgYW5kIHRoYXQgYWxsCisgICBtb2RpZmljYXRpb25zIHRvIHRoZSB2YXJpYWJsZSBoYXZlIGJlZW4gYWRqdXN0ZWQgc28gdGhhdAorICAgdGhleSBhcmUga2lsbGluZyBhc3NpZ25tZW50cy4gIFRodXMgdGhlIHZhcmlhYmxlIG1heSBub3cKKyAgIGJlIHRyZWF0ZWQgYXMgYSBHSU1QTEUgcmVnaXN0ZXIsIGFuZCB1c2UgcmVhbCBpbnN0ZWFkIG9mCisgICB2aXJ0dWFsIG9wcyBpbiBTU0EgZm9ybS4gICovCisjZGVmaW5lIERFQ0xfR0lNUExFX1JFR19QKERFQ0wpIFwKKyAgREVDTF9DT01NT05fQ0hFQ0sgKERFQ0wpLT5kZWNsX2NvbW1vbi5naW1wbGVfcmVnX2ZsYWcKKworc3RydWN0IEdUWSgoKSkgdHJlZV9kZWNsX2NvbW1vbiB7CisgIHN0cnVjdCB0cmVlX2RlY2xfbWluaW1hbCBjb21tb247CisgIHRyZWUgc2l6ZTsKKworICBFTlVNX0JJVEZJRUxEKG1hY2hpbmVfbW9kZSkgbW9kZSA6IDg7CisKKyAgdW5zaWduZWQgbm9ubG9jYWxfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHZpcnR1YWxfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGlnbm9yZWRfZmxhZyA6IDE7CisgIHVuc2lnbmVkIGFic3RyYWN0X2ZsYWcgOiAxOworICB1bnNpZ25lZCBhcnRpZmljaWFsX2ZsYWcgOiAxOworICB1bnNpZ25lZCBwcmVzZXJ2ZV9mbGFnOiAxOworICB1bnNpZ25lZCBkZWJ1Z19leHByX2lzX2Zyb20gOiAxOworCisgIHVuc2lnbmVkIGxhbmdfZmxhZ18wIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzEgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfMiA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ18zIDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzQgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfNSA6IDE7CisgIHVuc2lnbmVkIGxhbmdfZmxhZ182IDogMTsKKyAgdW5zaWduZWQgbGFuZ19mbGFnXzcgOiAxOworICB1bnNpZ25lZCBsYW5nX2ZsYWdfOCA6IDE7CisKKyAgLyogSW4gTEFCRUxfREVDTCwgdGhpcyBpcyBERUNMX0VSUk9SX0lTU1VFRC4KKyAgICAgSW4gVkFSX0RFQ0wgYW5kIFBBUk1fREVDTCwgdGhpcyBpcyBERUNMX1JFR0lTVEVSLiAgKi8KKyAgdW5zaWduZWQgZGVjbF9mbGFnXzAgOiAxOworICAvKiBJbiBGSUVMRF9ERUNMLCB0aGlzIGlzIERFQ0xfQklUX0ZJRUxECisgICAgIEluIFZBUl9ERUNMIGFuZCBGVU5DVElPTl9ERUNMLCB0aGlzIGlzIERFQ0xfRVhURVJOQUwuCisgICAgIEluIFRZUEVfREVDTCwgdGhpcyBpcyBUWVBFX0RFQ0xfU1VQUFJFU1NfREVCVUcuICAqLworICB1bnNpZ25lZCBkZWNsX2ZsYWdfMSA6IDE7CisgIC8qIEluIEZJRUxEX0RFQ0wsIHRoaXMgaXMgREVDTF9OT05BRERSRVNTQUJMRV9QCisgICAgIEluIFZBUl9ERUNMLCBQQVJNX0RFQ0wgYW5kIFJFU1VMVF9ERUNMLCB0aGlzIGlzCisgICAgIERFQ0xfSEFTX1ZBTFVFX0VYUFJfUC4gICovCisgIHVuc2lnbmVkIGRlY2xfZmxhZ18yIDogMTsKKyAgLyogMSBiaXQgdW51c2VkLiAgKi8KKyAgdW5zaWduZWQgZGVjbF9mbGFnXzMgOiAxOworICAvKiBMb2dpY2FsbHksIHRoZXNlIHR3byB3b3VsZCBnbyBpbiBhIHRoZW9yZXRpY2FsIGJhc2Ugc2hhcmVkIGJ5IHZhciBhbmQKKyAgICAgcGFybSBkZWNsLiAqLworICB1bnNpZ25lZCBnaW1wbGVfcmVnX2ZsYWcgOiAxOworICAvKiBJbiBWQVJfREVDTCwgUEFSTV9ERUNMIGFuZCBSRVNVTFRfREVDTCwgdGhpcyBpcyBERUNMX0JZX1JFRkVSRU5DRS4gICovCisgIHVuc2lnbmVkIGRlY2xfYnlfcmVmZXJlbmNlX2ZsYWcgOiAxOworICAvKiBJbiBhIFZBUl9ERUNMIGFuZCBQQVJNX0RFQ0wsIHRoaXMgaXMgREVDTF9SRUFEX1AuICAqLworICB1bnNpZ25lZCBkZWNsX3JlYWRfZmxhZyA6IDE7CisgIC8qIEluIGEgVkFSX0RFQ0wgb3IgUkVTVUxUX0RFQ0wsIHRoaXMgaXMgREVDTF9OT05TSEFSRUFCTEUuICAqLworICB1bnNpZ25lZCBkZWNsX25vbnNoYXJlYWJsZV9mbGFnIDogMTsKKworICAvKiBERUNMX09GRlNFVF9BTElHTiwgdXNlZCBvbmx5IGZvciBGSUVMRF9ERUNMcy4gICovCisgIHVuc2lnbmVkIGludCBvZmZfYWxpZ24gOiA4OworCisgIC8qIDI0IGJpdHMgdW51c2VkLiAgKi8KKworICAvKiBERUNMX0FMSUdOLiAgSXQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc2l6ZSBhcyBUWVBFX0FMSUdOLiAgKi8KKyAgdW5zaWduZWQgaW50IGFsaWduOworCisgIC8qIFVJRCBmb3IgcG9pbnRzLXRvIHNldHMsIHN0YWJsZSBvdmVyIGNvcHlpbmcgZnJvbSBpbmxpbmluZy4gICovCisgIHVuc2lnbmVkIGludCBwdF91aWQ7CisKKyAgdHJlZSBzaXplX3VuaXQ7CisgIHRyZWUgaW5pdGlhbDsKKyAgdHJlZSBhdHRyaWJ1dGVzOworICB0cmVlIGFic3RyYWN0X29yaWdpbjsKKworICAvKiBQb2ludHMgdG8gYSBzdHJ1Y3R1cmUgd2hvc2UgZGV0YWlscyBkZXBlbmQgb24gdGhlIGxhbmd1YWdlIGluIHVzZS4gICovCisgIHN0cnVjdCBsYW5nX2RlY2wgKmxhbmdfc3BlY2lmaWM7Cit9OworCitleHRlcm4gdHJlZSBkZWNsX3ZhbHVlX2V4cHJfbG9va3VwICh0cmVlKTsKK2V4dGVybiB2b2lkIGRlY2xfdmFsdWVfZXhwcl9pbnNlcnQgKHRyZWUsIHRyZWUpOworCisvKiBJbiBhIFZBUl9ERUNMIG9yIFBBUk1fREVDTCwgdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRoZSB2YWx1ZSBtYXkgYmUgZm91bmQsCisgICBpZiB0cmFuc2Zvcm1hdGlvbnMgaGF2ZSBtYWRlIHRoaXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIGV2YWx1YXRpbmcgdGhlCisgICBkZWNsIGl0c2VsZi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWdnaW5nOyBvbmNlIHRoaXMgZmllbGQgaGFzCisgICBiZWVuIHNldCwgdGhlIGRlY2wgaXRzZWxmIG1heSBub3QgbGVnaXRpbWF0ZWx5IGFwcGVhciBpbiB0aGUgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX0hBU19WQUxVRV9FWFBSX1AoTk9ERSkgXAorICAoVFJFRV9DSEVDSzMgKE5PREUsIFZBUl9ERUNMLCBQQVJNX0RFQ0wsIFJFU1VMVF9ERUNMKSBcCisgICAtPmRlY2xfY29tbW9uLmRlY2xfZmxhZ18yKQorI2RlZmluZSBERUNMX1ZBTFVFX0VYUFIoTk9ERSkgXAorICAoZGVjbF92YWx1ZV9leHByX2xvb2t1cCAoREVDTF9XUlRMX0NIRUNLIChOT0RFKSkpCisjZGVmaW5lIFNFVF9ERUNMX1ZBTFVFX0VYUFIoTk9ERSwgVkFMKSBcCisgIChkZWNsX3ZhbHVlX2V4cHJfaW5zZXJ0IChERUNMX1dSVExfQ0hFQ0sgKE5PREUpLCBWQUwpKQorCisvKiBIb2xkcyB0aGUgUlRMIGV4cHJlc3Npb24gZm9yIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLgorICAgVGhpcyB2YWx1ZSBjYW4gYmUgZXZhbHVhdGVkIGxhemlseSBmb3IgZnVuY3Rpb25zLCB2YXJpYWJsZXMgd2l0aAorICAgc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24sIGFuZCBsYWJlbHMuICAqLworI2RlZmluZSBERUNMX1JUTChOT0RFKQkJCQkJXAorICAoREVDTF9XUlRMX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3J0bC5ydGwJCVwKKyAgID8gKE5PREUpLT5kZWNsX3dpdGhfcnRsLnJ0bAkJCQkJXAorICAgOiAobWFrZV9kZWNsX3J0bCAoTk9ERSksIChOT0RFKS0+ZGVjbF93aXRoX3J0bC5ydGwpKQorCisvKiBTZXQgdGhlIERFQ0xfUlRMIGZvciBOT0RFIHRvIFJUTC4gICovCisjZGVmaW5lIFNFVF9ERUNMX1JUTChOT0RFLCBSVEwpIHNldF9kZWNsX3J0bCAoTk9ERSwgUlRMKQorCisvKiBSZXR1cm5zIG5vbnplcm8gaWYgTk9ERSBpcyBhIHRyZWUgbm9kZSB0aGF0IGNhbiBjb250YWluIFJUTC4gICovCisjZGVmaW5lIEhBU19SVExfUChOT0RFKSAoQ09ERV9DT05UQUlOU19TVFJVQ1QgKFRSRUVfQ09ERSAoTk9ERSksIFRTX0RFQ0xfV1JUTCkpCisKKy8qIFJldHVybnMgbm9uemVybyBpZiB0aGUgREVDTF9SVEwgZm9yIE5PREUgaGFzIGFscmVhZHkgYmVlbiBzZXQuICAqLworI2RlZmluZSBERUNMX1JUTF9TRVRfUChOT0RFKSBcCisgIChIQVNfUlRMX1AgKE5PREUpICYmIERFQ0xfV1JUTF9DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF9ydGwucnRsICE9IE5VTEwpCisKKy8qIENvcHkgdGhlIFJUTCBmcm9tIE5PREUxIHRvIE5PREUyLiAgSWYgdGhlIFJUTCB3YXMgbm90IHNldCBmb3IKKyAgIE5PREUxLCBpdCB3aWxsIG5vdCBiZSBzZXQgZm9yIE5PREUyOyB0aGlzIGlzIGEgbGF6eSBjb3B5LiAgKi8KKyNkZWZpbmUgQ09QWV9ERUNMX1JUTChOT0RFMSwgTk9ERTIpIFwKKyAgKERFQ0xfV1JUTF9DSEVDSyAoTk9ERTIpLT5kZWNsX3dpdGhfcnRsLnJ0bCBcCisgICA9IERFQ0xfV1JUTF9DSEVDSyAoTk9ERTEpLT5kZWNsX3dpdGhfcnRsLnJ0bCkKKworLyogVGhlIERFQ0xfUlRMIGZvciBOT0RFLCBpZiBpdCBpcyBzZXQsIG9yIE5VTEwsIGlmIGl0IGlzIG5vdCBzZXQuICAqLworI2RlZmluZSBERUNMX1JUTF9JRl9TRVQoTk9ERSkgKERFQ0xfUlRMX1NFVF9QIChOT0RFKSA/IERFQ0xfUlRMIChOT0RFKSA6IE5VTEwpCisKKyNpZiAoR0NDX1ZFUlNJT04gPj0gMjAwNykKKyNkZWZpbmUgREVDTF9SVExfS05PV05fU0VUKGRlY2wpIF9fZXh0ZW5zaW9uX18JCQkJXAorKHsgIHRyZWUgY29uc3QgX19kID0gKGRlY2wpOwkJCQkJCVwKKyAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChERUNMX1JUTF9TRVRfUCAoX19kKSk7CQkJCVwKKyAgICAvKiBEZXJlZmVyZW5jZSBpdCBzbyB0aGUgY29tcGlsZXIga25vd3MgaXQgY2FuJ3QgYmUgTlVMTCBldmVuCVwKKyAgICAgICB3aXRob3V0IGFzc2VydGlvbiBjaGVja2luZy4gICovCQkJCQlcCisgICAgJipERUNMX1JUTF9JRl9TRVQgKF9fZCk7IH0pCisjZWxzZQorI2RlZmluZSBERUNMX1JUTF9LTk9XTl9TRVQoZGVjbCkgKCYqREVDTF9SVExfSUZfU0VUIChkZWNsKSkKKyNlbmRpZgorCisvKiBJbiBWQVJfREVDTCBhbmQgUEFSTV9ERUNMIG5vZGVzLCBub256ZXJvIG1lYW5zIGRlY2xhcmVkIGByZWdpc3RlcicuICAqLworI2RlZmluZSBERUNMX1JFR0lTVEVSKE5PREUpIChERUNMX1dSVExfQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5kZWNsX2ZsYWdfMCkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9kZWNsX3dpdGhfcnRsIHsKKyAgc3RydWN0IHRyZWVfZGVjbF9jb21tb24gY29tbW9uOworICBydHggcnRsOworfTsKKworLyogSW4gYSBGSUVMRF9ERUNMLCB0aGlzIGlzIHRoZSBmaWVsZCBwb3NpdGlvbiwgY291bnRpbmcgaW4gYnl0ZXMsIG9mIHRoZQorICAgREVDTF9PRkZTRVRfQUxJR04tYml0LXNpemVkIHdvcmQgY29udGFpbmluZyB0aGUgYml0IGNsb3Nlc3QgdG8gdGhlIGJlZ2lubmluZworICAgb2YgdGhlIHN0cnVjdHVyZS4gICovCisjZGVmaW5lIERFQ0xfRklFTERfT0ZGU0VUKE5PREUpIChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKS0+ZmllbGRfZGVjbC5vZmZzZXQpCisKKy8qIEluIGEgRklFTERfREVDTCwgdGhpcyBpcyB0aGUgb2Zmc2V0LCBpbiBiaXRzLCBvZiB0aGUgZmlyc3QgYml0IG9mIHRoZQorICAgZmllbGQgZnJvbSBERUNMX0ZJRUxEX09GRlNFVC4gIFRoaXMgZmllbGQgbWF5IGJlIG5vbnplcm8gZXZlbiBmb3IgZmllbGRzCisgICB0aGF0IGFyZSBub3QgYml0IGZpZWxkcyAoc2luY2UgREVDTF9PRkZTRVRfQUxJR04gbWF5IGJlIGxhcmdlciB0aGFuIHRoZQorICAgbmF0dXJhbCBhbGlnbm1lbnQgb2YgdGhlIGZpZWxkJ3MgdHlwZSkuICAqLworI2RlZmluZSBERUNMX0ZJRUxEX0JJVF9PRkZTRVQoTk9ERSkgXAorICAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmZpZWxkX2RlY2wuYml0X29mZnNldCkKKworLyogSW4gYSBGSUVMRF9ERUNMLCB0aGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCB3YXMgYSBiaXQtZmllbGQgYW5kCisgICBpZiBzbywgdGhlIHR5cGUgdGhhdCB3YXMgb3JpZ2luYWxseSBzcGVjaWZpZWQgZm9yIGl0LgorICAgVFJFRV9UWVBFIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgKGluIGZpbmlzaF9zdHJ1Y3QpLiAgKi8KKyNkZWZpbmUgREVDTF9CSVRfRklFTERfVFlQRShOT0RFKSBcCisgIChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKS0+ZmllbGRfZGVjbC5iaXRfZmllbGRfdHlwZSkKKworLyogSW4gYSBGSUVMRF9ERUNMIG9mIGEgUkVDT1JEX1RZUEUsIHRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBzdG9yYWdlCisgICByZXByZXNlbnRhdGl2ZSBGSUVMRF9ERUNMLiAgKi8KKyNkZWZpbmUgREVDTF9CSVRfRklFTERfUkVQUkVTRU5UQVRJVkUoTk9ERSkgXAorICAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmZpZWxkX2RlY2wucXVhbGlmaWVyKQorCisvKiBGb3IgYSBGSUVMRF9ERUNMIGluIGEgUVVBTF9VTklPTl9UWVBFLCByZWNvcmRzIHRoZSBleHByZXNzaW9uLCB3aGljaAorICAgaWYgbm9uemVybywgaW5kaWNhdGVzIHRoYXQgdGhlIGZpZWxkIG9jY3VwaWVzIHRoZSB0eXBlLiAgKi8KKyNkZWZpbmUgREVDTF9RVUFMSUZJRVIoTk9ERSkgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpLT5maWVsZF9kZWNsLnF1YWxpZmllcikKKworLyogRm9yIEZJRUxEX0RFQ0xzLCBvZmZfYWxpZ24gaG9sZHMgdGhlIG51bWJlciBvZiBsb3ctb3JkZXIgYml0cyBvZgorICAgREVDTF9GSUVMRF9PRkZTRVQgd2hpY2ggYXJlIGtub3duIHRvIGJlIGFsd2F5cyB6ZXJvLgorICAgREVDTF9PRkZTRVRfQUxJR04gdGh1cyByZXR1cm5zIHRoZSBhbGlnbm1lbnQgdGhhdCBERUNMX0ZJRUxEX09GRlNFVAorICAgaGFzLiAgKi8KKyNkZWZpbmUgREVDTF9PRkZTRVRfQUxJR04oTk9ERSkgXAorICAoKCh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTEpIDw8IEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5vZmZfYWxpZ24pCisKKy8qIFNwZWNpZnkgdGhhdCBERUNMX0FMSUdOKE5PREUpIGlzIGEgbXVsdGlwbGUgb2YgWC4gICovCisjZGVmaW5lIFNFVF9ERUNMX09GRlNFVF9BTElHTihOT0RFLCBYKSBcCisgIChGSUVMRF9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24ub2ZmX2FsaWduID0gZmZzX2h3aSAoWCkgLSAxKQorCisvKiBGb3IgRklFTERfREVDTFMsIERFQ0xfRkNPTlRFWFQgaXMgdGhlICpmaXJzdCogYmFzZWNsYXNzIGluCisgICB3aGljaCB0aGlzIEZJRUxEX0RFQ0wgaXMgZGVmaW5lZC4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbmVlZGVkIHdoZW4KKyAgIHdyaXRpbmcgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHZmaWVsZCBhbmQgdmJhc2UgZGVjbHMgZm9yIEMrKy4gICovCisjZGVmaW5lIERFQ0xfRkNPTlRFWFQoTk9ERSkgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpLT5maWVsZF9kZWNsLmZjb250ZXh0KQorCisvKiBJbiBhIEZJRUxEX0RFQ0wsIGluZGljYXRlcyB0aGlzIGZpZWxkIHNob3VsZCBiZSBiaXQtcGFja2VkLiAgKi8KKyNkZWZpbmUgREVDTF9QQUNLRUQoTk9ERSkgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpLT5iYXNlLnUuYml0cy5wYWNrZWRfZmxhZykKKworLyogTm9uemVybyBpbiBhIEZJRUxEX0RFQ0wgbWVhbnMgaXQgaXMgYSBiaXQgZmllbGQsIGFuZCBtdXN0IGJlIGFjY2Vzc2VkCisgICBzcGVjaWFsbHkuICAqLworI2RlZmluZSBERUNMX0JJVF9GSUVMRChOT0RFKSAoRklFTERfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmRlY2xfZmxhZ18xKQorCisvKiBVc2VkIGluIGEgRklFTERfREVDTCB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbm5vdCBmb3JtIHRoZSBhZGRyZXNzIG9mCisgICB0aGlzIGNvbXBvbmVudC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIFR5cGUtQmFzZWQgQWxpYXMgQW5hbHlzaXMKKyAgIHRvIGRpc2FtYmlndWF0ZSBhY2Nlc3NlcyB0byB0aGlzIGZpZWxkIHdpdGggaW5kaXJlY3QgYWNjZXNzZXMgdXNpbmcKKyAgIHRoZSBmaWVsZCdzIHR5cGU6CisKKyAgICAgc3RydWN0IFMgeyBpbnQgaTsgfSBzOworICAgICBpbnQgKnA7CisKKyAgIElmIHRoZSBmbGFnIGlzIHNldCBvbiAnaScsIFRCQUEgY29tcHV0ZXMgdGhhdCBzLmkgYW5kICpwIG5ldmVyIGNvbmZsaWN0LgorCisgICBGcm9tIHRoZSBpbXBsZW1lbnRhdGlvbidzIHZpZXdwb2ludCwgdGhlIGFsaWFzIHNldCBvZiB0aGUgdHlwZSBvZiB0aGUKKyAgIGZpZWxkICdpJyAoaW50KSB3aWxsIG5vdCBiZSByZWNvcmRlZCBhcyBhIHN1YnNldCBvZiB0aGF0IG9mIHRoZSB0eXBlIG9mCisgICAncycgKHN0cnVjdCBTKSBpbiByZWNvcmRfY29tcG9uZW50X2FsaWFzZXMuICBUaGUgY291bnRlcnBhcnQgaXMgdGhhdAorICAgYWNjZXNzZXMgdG8gcy5pIG11c3Qgbm90IGJlIGdpdmVuIHRoZSBhbGlhcyBzZXQgb2YgdGhlIHR5cGUgb2YgJ2knCisgICAoaW50KSBidXQgaW5zdGVhZCBkaXJlY3RseSB0aGF0IG9mIHRoZSB0eXBlIG9mICdzJyAoc3RydWN0IFMpLiAgKi8KKyNkZWZpbmUgREVDTF9OT05BRERSRVNTQUJMRV9QKE5PREUpIFwKKyAgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX2NvbW1vbi5kZWNsX2ZsYWdfMikKKworc3RydWN0IEdUWSgoKSkgdHJlZV9maWVsZF9kZWNsIHsKKyAgc3RydWN0IHRyZWVfZGVjbF9jb21tb24gY29tbW9uOworCisgIHRyZWUgb2Zmc2V0OworICB0cmVlIGJpdF9maWVsZF90eXBlOworICB0cmVlIHF1YWxpZmllcjsKKyAgdHJlZSBiaXRfb2Zmc2V0OworICB0cmVlIGZjb250ZXh0OworfTsKKworLyogQSBudW1lcmljIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIExBQkVMX0RFQ0wuICBUaGUgVUlEIGFsbG9jYXRpb24gaXMKKyAgIGRlbnNlLCB1bmlxdWUgd2l0aGluIGFueSBvbmUgZnVuY3Rpb24sIGFuZCBtYXkgYmUgdXNlZCB0byBpbmRleCBhcnJheXMuCisgICBJZiB0aGUgdmFsdWUgaXMgLTEsIHRoZW4gbm8gVUlEIGhhcyBiZWVuIGFzc2lnbmVkLiAgKi8KKyNkZWZpbmUgTEFCRUxfREVDTF9VSUQoTk9ERSkgXAorICAoTEFCRUxfREVDTF9DSEVDSyAoTk9ERSktPmxhYmVsX2RlY2wubGFiZWxfZGVjbF91aWQpCisKKy8qIEluIGEgTEFCRUxfREVDTCwgdGhlIEVIIHJlZ2lvbiBudW1iZXIgZm9yIHdoaWNoIHRoZSBsYWJlbCBpcyB0aGUKKyAgIHBvc3RfbGFuZGluZ19wYWQuICAqLworI2RlZmluZSBFSF9MQU5ESU5HX1BBRF9OUihOT0RFKSBcCisgIChMQUJFTF9ERUNMX0NIRUNLIChOT0RFKS0+bGFiZWxfZGVjbC5laF9sYW5kaW5nX3BhZF9ucikKKworLyogSW4gTEFCRUxfREVDTCBub2Rlcywgbm9uemVybyBtZWFucyB0aGF0IGFuIGVycm9yIG1lc3NhZ2UgYWJvdXQKKyAgIGp1bXBpbmcgaW50byBzdWNoIGEgYmluZGluZyBjb250b3VyIGhhcyBiZWVuIHByaW50ZWQgZm9yIHRoaXMgbGFiZWwuICAqLworI2RlZmluZSBERUNMX0VSUk9SX0lTU1VFRChOT0RFKSBcCisgIChMQUJFTF9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uZGVjbF9mbGFnXzApCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfbGFiZWxfZGVjbCB7CisgIHN0cnVjdCB0cmVlX2RlY2xfd2l0aF9ydGwgY29tbW9uOworICBpbnQgbGFiZWxfZGVjbF91aWQ7CisgIGludCBlaF9sYW5kaW5nX3BhZF9ucjsKK307CisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfcmVzdWx0X2RlY2wgeworICBzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfcnRsIGNvbW1vbjsKK307CisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfY29uc3RfZGVjbCB7CisgIHN0cnVjdCB0cmVlX2RlY2xfY29tbW9uIGNvbW1vbjsKK307CisKKy8qIEZvciBhIFBBUk1fREVDTCwgcmVjb3JkcyB0aGUgZGF0YSB0eXBlIHVzZWQgdG8gcGFzcyB0aGUgYXJndW1lbnQsCisgICB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHR5cGUgc2VlbiBpbiB0aGUgcHJvZ3JhbS4gICovCisjZGVmaW5lIERFQ0xfQVJHX1RZUEUoTk9ERSkgKFBBUk1fREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfY29tbW9uLmluaXRpYWwpCisKKy8qIEZvciBQQVJNX0RFQ0wsIGhvbGRzIGFuIFJUTCBmb3IgdGhlIHN0YWNrIHNsb3Qgb3IgcmVnaXN0ZXIKKyAgIHdoZXJlIHRoZSBkYXRhIHdhcyBhY3R1YWxseSBwYXNzZWQuICAqLworI2RlZmluZSBERUNMX0lOQ09NSU5HX1JUTChOT0RFKSBcCisgIChQQVJNX0RFQ0xfQ0hFQ0sgKE5PREUpLT5wYXJtX2RlY2wuaW5jb21pbmdfcnRsKQorCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3Bhcm1fZGVjbCB7CisgIHN0cnVjdCB0cmVlX2RlY2xfd2l0aF9ydGwgY29tbW9uOworICBydHggaW5jb21pbmdfcnRsOworfTsKKworCisvKiBOb256ZXJvIGZvciBhIGdpdmVuIC4uLl9ERUNMIG5vZGUgbWVhbnMgdGhhdCBubyB3YXJuaW5ncyBzaG91bGQgYmUKKyAgIGdlbmVyYXRlZCBqdXN0IGJlY2F1c2UgdGhpcyBub2RlIGlzIHVudXNlZC4gICovCisjZGVmaW5lIERFQ0xfSU5fU1lTVEVNX0hFQURFUihOT0RFKSBcCisgIChpbl9zeXN0ZW1faGVhZGVyX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAoTk9ERSkpKQorCisvKiBVc2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIGxpbmthZ2Ugc3RhdHVzIG9mIHRoaXMgREVDTCBpcyBub3QgeWV0IGtub3duLAorICAgc28gaXQgc2hvdWxkIG5vdCBiZSBvdXRwdXQgbm93LiAgKi8KKyNkZWZpbmUgREVDTF9ERUZFUl9PVVRQVVQoTk9ERSkgXAorICAoREVDTF9XSVRIX1ZJU19DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMuZGVmZXJfb3V0cHV0KQorCisvKiBJbiBhIFZBUl9ERUNMIHRoYXQncyBzdGF0aWMsCisgICBub256ZXJvIGlmIHRoZSBzcGFjZSBpcyBpbiB0aGUgdGV4dCBzZWN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9JTl9URVhUX1NFQ1RJT04oTk9ERSkgXAorICAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLmluX3RleHRfc2VjdGlvbikKKworLyogSW4gYSBWQVJfREVDTCB0aGF0J3Mgc3RhdGljLAorICAgbm9uemVybyBpZiBpdCBiZWxvbmdzIHRvIHRoZSBnbG9iYWwgY29uc3RhbnQgcG9vbC4gICovCisjZGVmaW5lIERFQ0xfSU5fQ09OU1RBTlRfUE9PTChOT0RFKSBcCisgIChWQVJfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMuaW5fY29uc3RhbnRfcG9vbCkKKworLyogTm9uemVybyBmb3IgYSBnaXZlbiAuLi5fREVDTCBub2RlIG1lYW5zIHRoYXQgdGhpcyBub2RlIHNob3VsZCBiZQorICAgcHV0IGluIC5jb21tb24sIGlmIHBvc3NpYmxlLiAgSWYgYSBERUNMX0lOSVRJQUwgaXMgZ2l2ZW4sIGFuZCBpdAorICAgaXMgbm90IGVycm9yX21hcmtfbm9kZSwgdGhlbiB0aGUgZGVjbCBjYW5ub3QgYmUgcHV0IGluIC5jb21tb24uICAqLworI2RlZmluZSBERUNMX0NPTU1PTihOT0RFKSBcCisgIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5jb21tb25fZmxhZykKKworLyogSW4gYSBWQVJfREVDTCwgbm9uemVybyBpZiB0aGUgZGVjbCBpcyBhIHJlZ2lzdGVyIHZhcmlhYmxlIHdpdGgKKyAgIGFuIGV4cGxpY2l0IGFzbSBzcGVjaWZpY2F0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9IQVJEX1JFR0lTVEVSKE5PREUpICBcCisgIChWQVJfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMuaGFyZF9yZWdpc3RlcikKKworICAvKiBVc2VkIHRvIGluZGljYXRlIHRoYXQgdGhpcyBERUNMIGhhcyB3ZWFrIGxpbmthZ2UuICAqLworI2RlZmluZSBERUNMX1dFQUsoTk9ERSkgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLndlYWtfZmxhZykKKworLyogVXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBERUNMIGlzIGEgZGxsaW1wb3J0LiAgKi8KKyNkZWZpbmUgREVDTF9ETExJTVBPUlRfUChOT0RFKSBcCisgIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5kbGxpbXBvcnRfZmxhZykKKworLyogVXNlZCBpbiBhIERFQ0wgdG8gaW5kaWNhdGUgdGhhdCwgZXZlbiBpZiBpdCBUUkVFX1BVQkxJQywgaXQgbmVlZAorICAgbm90IGJlIHB1dCBvdXQgdW5sZXNzIGl0IGlzIG5lZWRlZCBpbiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQuCisgICBFbnRpdGllcyBsaWtlIHRoaXMgYXJlIHNoYXJlZCBhY3Jvc3MgdHJhbnNsYXRpb24gdW5pdHMgKGxpa2Ugd2VhaworICAgZW50aXRpZXMpLCBidXQgYXJlIGd1YXJhbnRlZWQgdG8gYmUgZ2VuZXJhdGVkIGJ5IGFueSB0cmFuc2xhdGlvbgorICAgdW5pdCB0aGF0IG5lZWRzIHRoZW0sIGFuZCB0aGVyZWZvcmUgbmVlZCBub3QgYmUgcHV0IG91dCBhbnl3aGVyZQorICAgd2hlcmUgdGhleSBhcmUgbm90IG5lZWRlZC4gIERFQ0xfQ09NREFUIGlzIGp1c3QgYSBoaW50IHRvIHRoZQorICAgYmFjay1lbmQ7IGl0IGlzIHVwIHRvIGZyb250LWVuZHMgd2hpY2ggc2V0IHRoaXMgZmxhZyB0byBlbnN1cmUKKyAgIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBhbnkgaGFybSwgb3RoZXIgdGhhbiBibG9hdCwgaW4gcHV0dGluZyBvdXQKKyAgIHNvbWV0aGluZyB3aGljaCBpcyBERUNMX0NPTURBVC4gICovCisjZGVmaW5lIERFQ0xfQ09NREFUKE5PREUpIFwKKyAgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLmNvbWRhdF9mbGFnKQorCisjZGVmaW5lIERFQ0xfQ09NREFUX0dST1VQKE5PREUpIFwKKyAgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLmNvbWRhdF9ncm91cCkKKworLyogVXNlZCBpbiBUUkVFX1BVQkxJQyBkZWNscyB0byBpbmRpY2F0ZSB0aGF0IGNvcGllcyBvZiB0aGlzIERFQ0wgaW4KKyAgIG11bHRpcGxlIHRyYW5zbGF0aW9uIHVuaXRzIHNob3VsZCBiZSBtZXJnZWQuICAqLworI2RlZmluZSBERUNMX09ORV9PTkxZKE5PREUpIChERUNMX0NPTURBVF9HUk9VUCAoTk9ERSkgIT0gTlVMTF9UUkVFKQorCisvKiBUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IGFzIHRoZSBhc3NlbWJsZXIgd2lsbCBzZWUgaXQgKGJ1dCBiZWZvcmUgYW55CisgICB0cmFuc2xhdGlvbnMgbWFkZSBieSBBU01fT1VUUFVUX0xBQkVMUkVGKS4gIE9mdGVuIHRoaXMgaXMgdGhlIHNhbWUKKyAgIGFzIERFQ0xfTkFNRS4gIEl0IGlzIGFuIElERU5USUZJRVJfTk9ERS4gICovCisjZGVmaW5lIERFQ0xfQVNTRU1CTEVSX05BTUUoTk9ERSkgZGVjbF9hc3NlbWJsZXJfbmFtZSAoTk9ERSkKKworLyogUmV0dXJuIHRydWUgaWYgTk9ERSBpcyBhIE5PREUgdGhhdCBjYW4gY29udGFpbiBhIERFQ0xfQVNTRU1CTEVSX05BTUUuCisgICBUaGlzIGlzIHRydWUgb2YgYWxsIERFQ0wgbm9kZXMgZXhjZXB0IEZJRUxEX0RFQ0wuICAqLworI2RlZmluZSBIQVNfREVDTF9BU1NFTUJMRVJfTkFNRV9QKE5PREUpIFwKKyAgKENPREVfQ09OVEFJTlNfU1RSVUNUIChUUkVFX0NPREUgKE5PREUpLCBUU19ERUNMX1dJVEhfVklTKSkKKworLyogUmV0dXJucyBub256ZXJvIGlmIHRoZSBERUNMX0FTU0VNQkxFUl9OQU1FIGZvciBOT0RFIGhhcyBiZWVuIHNldC4gIElmIHplcm8sCisgICB0aGUgTk9ERSBtaWdodCBzdGlsbCBoYXZlIGEgREVDTF9BU1NFTUJMRVJfTkFNRSAtLSBpdCBqdXN0IGhhc24ndCBiZWVuIHNldAorICAgeWV0LiAgKi8KKyNkZWZpbmUgREVDTF9BU1NFTUJMRVJfTkFNRV9TRVRfUChOT0RFKSBcCisgIChIQVNfREVDTF9BU1NFTUJMRVJfTkFNRV9QIChOT0RFKSBcCisgICAmJiBERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5hc3NlbWJsZXJfbmFtZSAhPSBOVUxMX1RSRUUpCisKKy8qIFNldCB0aGUgREVDTF9BU1NFTUJMRVJfTkFNRSBmb3IgTk9ERSB0byBOQU1FLiAgKi8KKyNkZWZpbmUgU0VUX0RFQ0xfQVNTRU1CTEVSX05BTUUoTk9ERSwgTkFNRSkgXAorICAoREVDTF9XSVRIX1ZJU19DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMuYXNzZW1ibGVyX25hbWUgPSAoTkFNRSkpCisKKy8qIENvcHkgdGhlIERFQ0xfQVNTRU1CTEVSX05BTUUgZnJvbSBERUNMMSB0byBERUNMMi4gIE5vdGUgdGhhdCBpZiBERUNMMSdzCisgICBERUNMX0FTU0VNQkxFUl9OQU1FIGhhcyBub3QgeWV0IGJlZW4gc2V0LCB1c2luZyB0aGlzIG1hY3JvIHdpbGwgbm90IGNhdXNlCisgICB0aGUgREVDTF9BU1NFTUJMRVJfTkFNRSBvZiBlaXRoZXIgREVDTCB0byBiZSBzZXQuICBJbiBvdGhlciB3b3JkcywgdGhlCisgICBzZW1hbnRpY3Mgb2YgdXNpbmcgdGhpcyBtYWNybywgYXJlIGRpZmZlcmVudCB0aGFuIHNheWluZzoKKworICAgICBTRVRfREVDTF9BU1NFTUJMRVJfTkFNRShERUNMMiwgREVDTF9BU1NFTUJMRVJfTkFNRSAoREVDTDEpKQorCisgICB3aGljaCB3aWxsIHRyeSB0byBzZXQgdGhlIERFQ0xfQVNTRU1CTEVSX05BTUUgZm9yIERFQ0wxLiAgKi8KKworI2RlZmluZSBDT1BZX0RFQ0xfQVNTRU1CTEVSX05BTUUoREVDTDEsIERFQ0wyKQkJCQlcCisgIChERUNMX0FTU0VNQkxFUl9OQU1FX1NFVF9QIChERUNMMSkJCQkJCVwKKyAgID8gKHZvaWQpIFNFVF9ERUNMX0FTU0VNQkxFUl9OQU1FIChERUNMMiwJCQkJXAorCQkJCSAgICAgREVDTF9BU1NFTUJMRVJfTkFNRSAoREVDTDEpKQlcCisgICA6ICh2b2lkKSAwKQorCisvKiBSZWNvcmRzIHRoZSBzZWN0aW9uIG5hbWUgaW4gYSBzZWN0aW9uIGF0dHJpYnV0ZS4gIFVzZWQgdG8gcGFzcworICAgdGhlIG5hbWUgZnJvbSBkZWNsX2F0dHJpYnV0ZXMgdG8gbWFrZV9mdW5jdGlvbl9ydGwgYW5kIG1ha2VfZGVjbF9ydGwuICAqLworI2RlZmluZSBERUNMX1NFQ1RJT05fTkFNRShOT0RFKSBcCisgIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5zZWN0aW9uX25hbWUpCisKKy8qIE5vbnplcm8gaW4gYSBkZWNsIG1lYW5zIHRoYXQgdGhlIGdpbXBsaWZpZXIgaGFzIHNlZW4gKG9yIHBsYWNlZCkKKyAgIHRoaXMgdmFyaWFibGUgaW4gYSBCSU5EX0VYUFIuICAqLworI2RlZmluZSBERUNMX1NFRU5fSU5fQklORF9FWFBSX1AoTk9ERSkgXAorICAoREVDTF9XSVRIX1ZJU19DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMuc2Vlbl9pbl9iaW5kX2V4cHIpCisKKy8qIFZhbHVlIG9mIHRoZSBkZWNscydzIHZpc2liaWxpdHkgYXR0cmlidXRlICovCisjZGVmaW5lIERFQ0xfVklTSUJJTElUWShOT0RFKSBcCisgIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy52aXNpYmlsaXR5KQorCisvKiBOb256ZXJvIG1lYW5zIHRoYXQgdGhlIGRlY2wgaGFkIGl0cyB2aXNpYmlsaXR5IHNwZWNpZmllZCByYXRoZXIgdGhhbgorICAgYmVpbmcgaW5mZXJyZWQuICAqLworI2RlZmluZSBERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEKE5PREUpIFwKKyAgKERFQ0xfV0lUSF9WSVNfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLnZpc2liaWxpdHlfc3BlY2lmaWVkKQorCisvKiBJbiBhIFZBUl9ERUNMLCB0aGUgbW9kZWwgdG8gdXNlIGlmIHRoZSBkYXRhIHNob3VsZCBiZSBhbGxvY2F0ZWQgZnJvbQorICAgdGhyZWFkLWxvY2FsIHN0b3JhZ2UuICAqLworI2RlZmluZSBERUNMX1RMU19NT0RFTChOT0RFKSAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX3dpdGhfdmlzLnRsc19tb2RlbCkKKworLyogSW4gYSBWQVJfREVDTCwgbm9uemVybyBpZiB0aGUgZGF0YSBzaG91bGQgYmUgYWxsb2NhdGVkIGZyb20KKyAgIHRocmVhZC1sb2NhbCBzdG9yYWdlLiAgKi8KKyNkZWZpbmUgREVDTF9USFJFQURfTE9DQUxfUChOT0RFKSBcCisgIChWQVJfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfd2l0aF92aXMudGxzX21vZGVsID49IFRMU19NT0RFTF9SRUFMKQorCisvKiBJbiBhIG5vbi1sb2NhbCBWQVJfREVDTCB3aXRoIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLCB0cnVlIGlmIHRoZQorICAgdmFyaWFibGUgaGFzIGFuIGluaXRpYWxpemF0aW9uIHByaW9yaXR5LiAgSWYgZmFsc2UsIHRoZSB2YXJpYWJsZQorICAgd2lsbCBiZSBpbml0aWFsaXplZCBhdCB0aGUgREVGQVVMVF9JTklUX1BSSU9SSVRZLiAgKi8KKyNkZWZpbmUgREVDTF9IQVNfSU5JVF9QUklPUklUWV9QKE5PREUpIFwKKyAgKFZBUl9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5pbml0X3ByaW9yaXR5X3ApCisKKy8qIFNwZWNpZnkgd2hldGhlciB0aGUgc2VjdGlvbiBuYW1lIHdhcyBzZXQgYnkgdXNlciBvciBieQorICAgY29tcGlsZXIgdmlhIC1mZnVuY3Rpb24tc2VjdGlvbnMuICAqLworI2RlZmluZSBERUNMX0hBU19JTVBMSUNJVF9TRUNUSU9OX05BTUVfUChOT0RFKSBcCisgIChERUNMX1dJVEhfVklTX0NIRUNLIChOT0RFKS0+ZGVjbF93aXRoX3Zpcy5pbXBsaWNpdF9zZWN0aW9uX25hbWVfcCkKKworc3RydWN0IEdUWSgoKSkgdHJlZV9kZWNsX3dpdGhfdmlzIHsKKyBzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfcnRsIGNvbW1vbjsKKyB0cmVlIGFzc2VtYmxlcl9uYW1lOworIHRyZWUgc2VjdGlvbl9uYW1lOworIHRyZWUgY29tZGF0X2dyb3VwOworCisgLyogQmVsb25nIHRvIFZBUl9ERUNMIGV4Y2x1c2l2ZWx5LiAgKi8KKyB1bnNpZ25lZCBkZWZlcl9vdXRwdXQgOiAxOworIHVuc2lnbmVkIGhhcmRfcmVnaXN0ZXIgOiAxOworIHVuc2lnbmVkIGNvbW1vbl9mbGFnIDogMTsKKyB1bnNpZ25lZCBpbl90ZXh0X3NlY3Rpb24gOiAxOworIHVuc2lnbmVkIGluX2NvbnN0YW50X3Bvb2wgOiAxOworIHVuc2lnbmVkIGRsbGltcG9ydF9mbGFnIDogMTsKKyAvKiBEb24ndCBiZWxvbmcgdG8gVkFSX0RFQ0wgZXhjbHVzaXZlbHkuICAqLworIHVuc2lnbmVkIHdlYWtfZmxhZyA6IDE7CisgLyogV2hlbiBTRUNUSU9OX05BTUUgaXMgaW1wbGllZCBieSAtZmZ1bmN0aW9uLXNlY3Rpb24uICAqLworIHVuc2lnbmVkIGltcGxpY2l0X3NlY3Rpb25fbmFtZV9wIDogMTsKKworIHVuc2lnbmVkIHNlZW5faW5fYmluZF9leHByIDogMTsKKyB1bnNpZ25lZCBjb21kYXRfZmxhZyA6IDE7CisgRU5VTV9CSVRGSUVMRChzeW1ib2xfdmlzaWJpbGl0eSkgdmlzaWJpbGl0eSA6IDI7CisgdW5zaWduZWQgdmlzaWJpbGl0eV9zcGVjaWZpZWQgOiAxOworIC8qIEJlbG9uZ3MgdG8gVkFSX0RFQ0wgZXhjbHVzaXZlbHkuICAqLworIEVOVU1fQklURklFTEQodGxzX21vZGVsKSB0bHNfbW9kZWwgOiAzOworCisgLyogQmVsb25nIHRvIEZVTkNUSU9OX0RFQ0wgZXhjbHVzaXZlbHkuICAqLworIHVuc2lnbmVkIGluaXRfcHJpb3JpdHlfcCA6IDE7CisgLyogVXNlZCBieSBDKysgb25seS4gIE1pZ2h0IGJlY29tZSBhIGdlbmVyaWMgZGVjbCBmbGFnLiAgKi8KKyB1bnNpZ25lZCBzaGFkb3dlZF9mb3JfdmFyX3AgOiAxOworIC8qIDE0IHVudXNlZCBiaXRzLiAqLworfTsKKworZXh0ZXJuIHRyZWUgZGVjbF9kZWJ1Z19leHByX2xvb2t1cCAodHJlZSk7CitleHRlcm4gdm9pZCBkZWNsX2RlYnVnX2V4cHJfaW5zZXJ0ICh0cmVlLCB0cmVlKTsKKy8qIEZvciBWQVJfREVDTCwgdGhpcyBpcyBzZXQgdG8gZWl0aGVyIGFuIGV4cHJlc3Npb24gdGhhdCBpdCB3YXMgc3BsaXQKKyAgIGZyb20gKGlmIERFQ0xfREVCVUdfRVhQUl9JU19GUk9NIGlzIHRydWUpLCBvdGhlcndpc2UgYSB0cmVlX2xpc3Qgb2YKKyAgIHN1YmV4cHJlc3Npb25zIHRoYXQgaXQgd2FzIHNwbGl0IGludG8uICAqLworI2RlZmluZSBERUNMX0RFQlVHX0VYUFIoTk9ERSkgXAorICAoZGVjbF9kZWJ1Z19leHByX2xvb2t1cCAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworI2RlZmluZSBTRVRfREVDTF9ERUJVR19FWFBSKE5PREUsIFZBTCkgXAorICAoZGVjbF9kZWJ1Z19leHByX2luc2VydCAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpLCBWQUwpKQorCisvKiBBbiBpbml0aWFsaXphdGlvbiBwcmlvcml0eS4gICovCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHByaW9yaXR5X3R5cGU7CisKK2V4dGVybiBwcmlvcml0eV90eXBlIGRlY2xfaW5pdF9wcmlvcml0eV9sb29rdXAgKHRyZWUpOworZXh0ZXJuIHByaW9yaXR5X3R5cGUgZGVjbF9maW5pX3ByaW9yaXR5X2xvb2t1cCAodHJlZSk7CitleHRlcm4gdm9pZCBkZWNsX2luaXRfcHJpb3JpdHlfaW5zZXJ0ICh0cmVlLCBwcmlvcml0eV90eXBlKTsKK2V4dGVybiB2b2lkIGRlY2xfZmluaV9wcmlvcml0eV9pbnNlcnQgKHRyZWUsIHByaW9yaXR5X3R5cGUpOworCisvKiBGb3IgYSBWQVJfREVDTCBvciBGVU5DVElPTl9ERUNMIHRoZSBpbml0aWFsaXphdGlvbiBwcmlvcml0eSBvZgorICAgTk9ERS4gICovCisjZGVmaW5lIERFQ0xfSU5JVF9QUklPUklUWShOT0RFKSBcCisgIChkZWNsX2luaXRfcHJpb3JpdHlfbG9va3VwIChOT0RFKSkKKy8qIFNldCB0aGUgaW5pdGlhbGl6YXRpb24gcHJpb3JpdHkgZm9yIE5PREUgdG8gVkFMLiAgKi8KKyNkZWZpbmUgU0VUX0RFQ0xfSU5JVF9QUklPUklUWShOT0RFLCBWQUwpIFwKKyAgKGRlY2xfaW5pdF9wcmlvcml0eV9pbnNlcnQgKE5PREUsIFZBTCkpCisKKy8qIEZvciBhIEZVTkNUSU9OX0RFQ0wgdGhlIGZpbmFsaXphdGlvbiBwcmlvcml0eSBvZiBOT0RFLiAgKi8KKyNkZWZpbmUgREVDTF9GSU5JX1BSSU9SSVRZKE5PREUpIFwKKyAgKGRlY2xfZmluaV9wcmlvcml0eV9sb29rdXAgKE5PREUpKQorLyogU2V0IHRoZSBmaW5hbGl6YXRpb24gcHJpb3JpdHkgZm9yIE5PREUgdG8gVkFMLiAgKi8KKyNkZWZpbmUgU0VUX0RFQ0xfRklOSV9QUklPUklUWShOT0RFLCBWQUwpIFwKKyAgKGRlY2xfZmluaV9wcmlvcml0eV9pbnNlcnQgKE5PREUsIFZBTCkpCisKKy8qIFRoZSBpbml0aWFsaXphdGlvbiBwcmlvcml0eSBmb3IgZW50aXRpZXMgZm9yIHdoaWNoIG5vIGV4cGxpY2l0CisgICBpbml0aWFsaXphdGlvbiBwcmlvcml0eSBoYXMgYmVlbiBzcGVjaWZpZWQuICAqLworI2RlZmluZSBERUZBVUxUX0lOSVRfUFJJT1JJVFkgNjU1MzUKKworLyogVGhlIG1heGltdW0gYWxsb3dlZCBpbml0aWFsaXphdGlvbiBwcmlvcml0eS4gICovCisjZGVmaW5lIE1BWF9JTklUX1BSSU9SSVRZIDY1NTM1CisKKy8qIFRoZSBsYXJnZXN0IHByaW9yaXR5IHZhbHVlIHJlc2VydmVkIGZvciB1c2UgYnkgc3lzdGVtIHJ1bnRpbWUKKyAgIGxpYnJhcmllcy4gICovCisjZGVmaW5lIE1BWF9SRVNFUlZFRF9JTklUX1BSSU9SSVRZIDEwMAorCisvKiBJbiBhIFZBUl9ERUNMLCBub256ZXJvIGlmIHRoaXMgaXMgYSBnbG9iYWwgdmFyaWFibGUgZm9yIFZPUHMuICAqLworI2RlZmluZSBWQVJfREVDTF9JU19WSVJUVUFMX09QRVJBTkQoTk9ERSkgXAorICAoVkFSX0RFQ0xfQ0hFQ0sgKE5PREUpLT5iYXNlLnUuYml0cy5zYXR1cmF0aW5nX2ZsYWcpCisKKy8qIEluIGEgVkFSX0RFQ0wsIG5vbnplcm8gaWYgdGhpcyBpcyBhIG5vbi1sb2NhbCBmcmFtZSBzdHJ1Y3R1cmUuICAqLworI2RlZmluZSBERUNMX05PTkxPQ0FMX0ZSQU1FKE5PREUpICBcCisgIChWQVJfREVDTF9DSEVDSyAoTk9ERSktPmJhc2UuZGVmYXVsdF9kZWZfZmxhZykKKworc3RydWN0IEdUWSgoKSkgdHJlZV92YXJfZGVjbCB7CisgIHN0cnVjdCB0cmVlX2RlY2xfd2l0aF92aXMgY29tbW9uOworfTsKKworCisvKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gcmVmZXJlbmNlIGFueXRoaW5nIGluIGRlY2wucmVzdWx0IGFuZCBpcyBtZWFudCBvbmx5CisgICBmb3IgdXNlIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gICovCisjZGVmaW5lIERFQ0xfUkVTVUxUX0ZMRChOT0RFKSBcCisgIChERUNMX05PTl9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24ucmVzdWx0KQorCisvKiBUaGUgREVDTF9WSU5ERVggaXMgdXNlZCBmb3IgRlVOQ1RJT05fREVDTFMgaW4gdHdvIGRpZmZlcmVudCB3YXlzLgorICAgQmVmb3JlIHRoZSBzdHJ1Y3QgY29udGFpbmluZyB0aGUgRlVOQ1RJT05fREVDTCBpcyBsYWlkIG91dCwKKyAgIERFQ0xfVklOREVYIG1heSBwb2ludCB0byBhIEZVTkNUSU9OX0RFQ0wgaW4gYSBiYXNlIGNsYXNzIHdoaWNoCisgICBpcyB0aGUgRlVOQ1RJT05fREVDTCB3aGljaCB0aGlzIEZVTkNUSU9OX0RFQ0wgd2lsbCByZXBsYWNlIGFzIGEgdmlydHVhbAorICAgZnVuY3Rpb24uICBXaGVuIHRoZSBjbGFzcyBpcyBsYWlkIG91dCwgdGhpcyBwb2ludGVyIGlzIGNoYW5nZWQKKyAgIHRvIGFuIElOVEVHRVJfQ1NUIG5vZGUgd2hpY2ggaXMgc3VpdGFibGUgZm9yIHVzZSBhcyBhbiBpbmRleAorICAgaW50byB0aGUgdmlydHVhbCBmdW5jdGlvbiB0YWJsZS4KKyAgIEMrKyBhbHNvIHVzZXMgdGhpcyBmaWVsZCBpbiBuYW1lc3BhY2VzLCBoZW5jZSB0aGUgREVDTF9OT05fQ09NTU9OX0NIRUNLLiAgKi8KKyNkZWZpbmUgREVDTF9WSU5ERVgoTk9ERSkgXAorICAoREVDTF9OT05fQ09NTU9OX0NIRUNLIChOT0RFKS0+ZGVjbF9ub25fY29tbW9uLnZpbmRleCkKKworc3RydWN0IEdUWSgoKSkKKyB0cmVlX2RlY2xfbm9uX2NvbW1vbiB7CisgIHN0cnVjdCB0cmVlX2RlY2xfd2l0aF92aXMgY29tbW9uOworICAvKiBDKysgdXNlcyB0aGlzIGluIG5hbWVzcGFjZXMuICAqLworICB0cmVlIHNhdmVkX3RyZWU7CisgIC8qIEMrKyB1c2VzIHRoaXMgaW4gdGVtcGxhdGVzLiAgKi8KKyAgdHJlZSBhcmd1bWVudHM7CisgIC8qIEFsbW9zdCBhbGwgRkUncyB1c2UgdGhpcy4gICovCisgIHRyZWUgcmVzdWx0OworICAvKiBDKysgdXNlcyB0aGlzIGluIG5hbWVzcGFjZXMgYW5kIGZ1bmN0aW9uX2RlY2xzLiAgKi8KKyAgdHJlZSB2aW5kZXg7Cit9OworCisvKiBJbiBGVU5DVElPTl9ERUNMLCBob2xkcyB0aGUgZGVjbCBmb3IgdGhlIHJldHVybiB2YWx1ZS4gICovCisjZGVmaW5lIERFQ0xfUkVTVUxUKE5PREUpIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF9ub25fY29tbW9uLnJlc3VsdCkKKworLyogSW4gYSBGVU5DVElPTl9ERUNMLCBub256ZXJvIGlmIHRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgaW5saW5lZC4gICovCisjZGVmaW5lIERFQ0xfVU5JTkxJTkFCTEUoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wudW5pbmxpbmFibGUpCisKKy8qIEluIGEgRlVOQ1RJT05fREVDTCwgdGhlIHNhdmVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBib2R5IG9mIHRoZQorICAgZW50aXJlIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9TQVZFRF9UUkVFKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24uc2F2ZWRfdHJlZSkKKworLyogTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdHJlYXRlZAorICAgYXMgaWYgaXQgd2VyZSBhIG1hbGxvYywgbWVhbmluZyBpdCByZXR1cm5zIGEgcG9pbnRlciB0aGF0IGlzCisgICBub3QgYW4gYWxpYXMuICAqLworI2RlZmluZSBERUNMX0lTX01BTExPQyhOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5tYWxsb2NfZmxhZykKKworLyogTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdHJlYXRlZCBhcworICAgQysrIG9wZXJhdG9yIG5ldywgbWVhbmluZyB0aGF0IGl0IHJldHVybnMgYSBwb2ludGVyIGZvciB3aGljaCB3ZQorICAgc2hvdWxkIG5vdCB1c2UgdHlwZSBiYXNlZCBhbGlhc2luZy4gICovCisjZGVmaW5lIERFQ0xfSVNfT1BFUkFUT1JfTkVXKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLm9wZXJhdG9yX25ld19mbGFnKQorCisvKiBOb256ZXJvIGluIGEgRlVOQ1RJT05fREVDTCBtZWFucyB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gbW9yZQorICAgdGhhbiBvbmNlLiAgKi8KKyNkZWZpbmUgREVDTF9JU19SRVRVUk5TX1RXSUNFKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLnJldHVybnNfdHdpY2VfZmxhZykKKworLyogTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdHJlYXRlZAorICAgYXMgInB1cmUiIGZ1bmN0aW9uIChsaWtlIGNvbnN0IGZ1bmN0aW9uLCBidXQgbWF5IHJlYWQgZ2xvYmFsIG1lbW9yeSkuICAqLworI2RlZmluZSBERUNMX1BVUkVfUChOT0RFKSAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wucHVyZV9mbGFnKQorCisvKiBOb256ZXJvIG9ubHkgaWYgb25lIG9mIFRSRUVfUkVBRE9OTFkgb3IgREVDTF9QVVJFX1AgaXMgbm9uemVybyBBTkQKKyAgIHRoZSBjb25zdCBvciBwdXJlIGZ1bmN0aW9uIG1heSBub3QgdGVybWluYXRlLiAgV2hlbiB0aGlzIGlzIG5vbnplcm8KKyAgIGZvciBhIGNvbnN0IG9yIHB1cmUgZnVuY3Rpb24sIGl0IGNhbiBiZSBkZWFsdCB3aXRoIGJ5IGNzZSBwYXNzZXMKKyAgIGJ1dCBjYW5ub3QgYmUgcmVtb3ZlZCBieSBkY2UgcGFzc2VzIHNpbmNlIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8KKyAgIGNoYW5nZSBhbiBpbmZpbml0ZSBsb29waW5nIHByb2dyYW0gaW50byBvbmUgdGhhdCB0ZXJtaW5hdGVzIHdpdGhvdXQKKyAgIGVycm9yLiAgKi8KKyNkZWZpbmUgREVDTF9MT09QSU5HX0NPTlNUX09SX1BVUkVfUChOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5sb29waW5nX2NvbnN0X29yX3B1cmVfZmxhZykKKworLyogTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdHJlYXRlZAorICAgYXMgIm5vdm9wcyIgZnVuY3Rpb24gKGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgcmVhZCBnbG9iYWwgbWVtb3J5LAorICAgYnV0IG1heSBoYXZlIGFyYml0cmFyeSBzaWRlIGVmZmVjdHMpLiAgKi8KKyNkZWZpbmUgREVDTF9JU19OT1ZPUFMoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wubm92b3BzX2ZsYWcpCisKKy8qIFVzZWQgaW4gRlVOQ1RJT05fREVDTHMgdG8gaW5kaWNhdGUgdGhhdCB0aGV5IHNob3VsZCBiZSBydW4gYXV0b21hdGljYWxseQorICAgYXQgdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgZXhlY3V0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9TVEFUSUNfQ09OU1RSVUNUT1IoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wuc3RhdGljX2N0b3JfZmxhZykKKworI2RlZmluZSBERUNMX1NUQVRJQ19ERVNUUlVDVE9SKE5PREUpIFwKKyhGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5zdGF0aWNfZHRvcl9mbGFnKQorCisvKiBVc2VkIGluIEZVTkNUSU9OX0RFQ0xzIHRvIGluZGljYXRlIHRoYXQgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQgc2hvdWxkCisgICBiZSBpbnN0cnVtZW50ZWQgd2l0aCBjYWxscyB0byBzdXBwb3J0IHJvdXRpbmVzLiAgKi8KKyNkZWZpbmUgREVDTF9OT19JTlNUUlVNRU5UX0ZVTkNUSU9OX0VOVFJZX0VYSVQoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wubm9faW5zdHJ1bWVudF9mdW5jdGlvbl9lbnRyeV9leGl0KQorCisvKiBVc2VkIGluIEZVTkNUSU9OX0RFQ0xzIHRvIGluZGljYXRlIHRoYXQgbGltaXQtc3RhY2stKiBzaG91bGQgYmUKKyAgIGRpc2FibGVkIGluIHRoaXMgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX05PX0xJTUlUX1NUQUNLKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLm5vX2xpbWl0X3N0YWNrKQorCisvKiBJbiBhIEZVTkNUSU9OX0RFQ0wgaW5kaWNhdGVzIHRoYXQgYSBzdGF0aWMgY2hhaW4gaXMgbmVlZGVkLiAgKi8KKyNkZWZpbmUgREVDTF9TVEFUSUNfQ0hBSU4oTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wucmVnZGVjbF9mbGFnKQorCisvKiBOb256ZXJvIGZvciBhIGRlY2wgdGhhdCBjZ3JhcGggaGFzIGRlY2lkZWQgc2hvdWxkIGJlIGlubGluZWQgaW50bworICAgYXQgbGVhc3Qgb25lIGNhbGwgc2l0ZS4gIEl0IGlzIG5vdCBtZWFuaW5nZnVsIHRvIGxvb2sgYXQgdGhpcworICAgZGlyZWN0bHk7IGFsd2F5cyB1c2UgY2dyYXBoX2Z1bmN0aW9uX3Bvc3NpYmx5X2lubGluZWRfcC4gICovCisjZGVmaW5lIERFQ0xfUE9TU0lCTFlfSU5MSU5FRChERUNMKSBcCisgIEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKERFQ0wpLT5mdW5jdGlvbl9kZWNsLnBvc3NpYmx5X2lubGluZWQKKworLyogTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgbWVhbnMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZCBpbmxpbmUsCisgICBzdWNoIGFzIHZpYSB0aGUgYGlubGluZScga2V5d29yZCBpbiBDL0MrKy4gIFRoaXMgZmxhZyBjb250cm9scyB0aGUgbGlua2FnZQorICAgc2VtYW50aWNzIG9mICdpbmxpbmUnICAqLworI2RlZmluZSBERUNMX0RFQ0xBUkVEX0lOTElORV9QKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLmRlY2xhcmVkX2lubGluZV9mbGFnKQorCisvKiBOb256ZXJvIGluIGEgRlVOQ1RJT05fREVDTCBtZWFucyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgZ2V0CisgICAtV2lubGluZSB3YXJuaW5ncy4gICovCisjZGVmaW5lIERFQ0xfTk9fSU5MSU5FX1dBUk5JTkdfUChOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5ub19pbmxpbmVfd2FybmluZ19mbGFnKQorCisvKiBOb256ZXJvIGlmIGEgRlVOQ1RJT05fQ09ERSBpcyBhIFRNIGxvYWQvc3RvcmUuICAqLworI2RlZmluZSBCVUlMVElOX1RNX0xPQURfU1RPUkVfUChGTikgXAorICAoKEZOKSA+PSBCVUlMVF9JTl9UTV9TVE9SRV8xICYmIChGTikgPD0gQlVJTFRfSU5fVE1fTE9BRF9SRldfTERPVUJMRSkKKworLyogTm9uemVybyBpZiBhIEZVTkNUSU9OX0NPREUgaXMgYSBUTSBsb2FkLiAgKi8KKyNkZWZpbmUgQlVJTFRJTl9UTV9MT0FEX1AoRk4pIFwKKyAgKChGTikgPj0gQlVJTFRfSU5fVE1fTE9BRF8xICYmIChGTikgPD0gQlVJTFRfSU5fVE1fTE9BRF9SRldfTERPVUJMRSkKKworLyogTm9uemVybyBpZiBhIEZVTkNUSU9OX0NPREUgaXMgYSBUTSBzdG9yZS4gICovCisjZGVmaW5lIEJVSUxUSU5fVE1fU1RPUkVfUChGTikgXAorICAoKEZOKSA+PSBCVUlMVF9JTl9UTV9TVE9SRV8xICYmIChGTikgPD0gQlVJTFRfSU5fVE1fU1RPUkVfV0FXX0xET1VCTEUpCisKKyNkZWZpbmUgQ0FTRV9CVUlMVF9JTl9UTV9MT0FEKEZOKQlcCisgIGNhc2UgQlVJTFRfSU5fVE1fTE9BRF8jI0ZOOgkJXAorICBjYXNlIEJVSUxUX0lOX1RNX0xPQURfUkFSXyMjRk46CVwKKyAgY2FzZSBCVUlMVF9JTl9UTV9MT0FEX1JBV18jI0ZOOglcCisgIGNhc2UgQlVJTFRfSU5fVE1fTE9BRF9SRldfIyNGTgorCisjZGVmaW5lIENBU0VfQlVJTFRfSU5fVE1fU1RPUkUoRk4pCVwKKyAgY2FzZSBCVUlMVF9JTl9UTV9TVE9SRV8jI0ZOOgkJXAorICBjYXNlIEJVSUxUX0lOX1RNX1NUT1JFX1dBUl8jI0ZOOglcCisgIGNhc2UgQlVJTFRfSU5fVE1fU1RPUkVfV0FXXyMjRk4KKworLyogTm9uemVybyBpbiBhIEZVTkNUSU9OX0RFQ0wgdGhhdCBzaG91bGQgYmUgYWx3YXlzIGlubGluZWQgYnkgdGhlIGlubGluZXIKKyAgIGRpc3JlZ2FyZGluZyBzaXplIGFuZCBjb3N0IGhldXJpc3RpY3MuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdXNpbmcKKyAgIHRoZSBhbHdheXNfaW5saW5lIGF0dHJpYnV0ZSB3aXRob3V0IHRoZSByZXF1aXJlZCBkaWFnbm9zdGljcyBpZiB0aGUKKyAgIGZ1bmN0aW9uIGNhbm5vdCBiZSBpbmxpbmVkLiAgKi8KKyNkZWZpbmUgREVDTF9ESVNSRUdBUkRfSU5MSU5FX0xJTUlUUyhOT0RFKSBcCisgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5kaXNyZWdhcmRfaW5saW5lX2xpbWl0cykKKworZXh0ZXJuIHZlYzx0cmVlLCB2YV9nYz4gKipkZWNsX2RlYnVnX2FyZ3NfbG9va3VwICh0cmVlKTsKK2V4dGVybiB2ZWM8dHJlZSwgdmFfZ2M+ICoqZGVjbF9kZWJ1Z19hcmdzX2luc2VydCAodHJlZSk7CisKKy8qIE5vbnplcm8gaWYgYSBGVU5DVElPTl9ERUNMIGhhcyBERUJVRyBhcmd1bWVudHMgYXR0YWNoZWQgdG8gaXQuICAqLworI2RlZmluZSBERUNMX0hBU19ERUJVR19BUkdTX1AoTk9ERSkgXAorICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wuaGFzX2RlYnVnX2FyZ3NfZmxhZykKKworLyogRm9yIEZVTkNUSU9OX0RFQ0wsIHRoaXMgaG9sZHMgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlICgic3RydWN0IGZ1bmN0aW9uIikKKyAgIHRoYXQgZGVzY3JpYmVzIHRoZSBzdGF0dXMgb2YgdGhpcyBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfU1RSVUNUX0ZVTkNUSU9OKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLmYpCisKKy8qIEluIGEgRlVOQ1RJT05fREVDTCwgbm9uemVybyBtZWFucyBhIGJ1aWx0IGluIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9CVUlMVF9JTihOT0RFKSAoREVDTF9CVUlMVF9JTl9DTEFTUyAoTk9ERSkgIT0gTk9UX0JVSUxUX0lOKQorCisvKiBGb3IgYSBidWlsdGluIGZ1bmN0aW9uLCBpZGVudGlmeSB3aGljaCBwYXJ0IG9mIHRoZSBjb21waWxlciBkZWZpbmVkIGl0LiAgKi8KKyNkZWZpbmUgREVDTF9CVUlMVF9JTl9DTEFTUyhOT0RFKSBcCisgICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wuYnVpbHRfaW5fY2xhc3MpCisKKy8qIEluIEZVTkNUSU9OX0RFQ0wsIGEgY2hhaW4gb2YgLi4uX0RFQ0wgbm9kZXMuCisgICBWQVJfREVDTCBhbmQgUEFSTV9ERUNMIHJlc2VydmUgdGhlIGFyZ3VtZW50cyBzbG90IGZvciBsYW5ndWFnZS1zcGVjaWZpYworICAgdXNlcy4gICovCisjZGVmaW5lIERFQ0xfQVJHVU1FTlRTKE5PREUpIFwKKyAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24uYXJndW1lbnRzKQorI2RlZmluZSBERUNMX0FSR1VNRU5UX0ZMRChOT0RFKSBcCisgIChERUNMX05PTl9DT01NT05fQ0hFQ0sgKE5PREUpLT5kZWNsX25vbl9jb21tb24uYXJndW1lbnRzKQorCisvKiBJbiBGVU5DVElPTl9ERUNMLCB0aGUgZnVuY3Rpb24gc3BlY2lmaWMgdGFyZ2V0IG9wdGlvbnMgdG8gdXNlIHdoZW4gY29tcGlsaW5nCisgICB0aGlzIGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgREVDTF9GVU5DVElPTl9TUEVDSUZJQ19UQVJHRVQoTk9ERSkgXAorICAgKEZVTkNUSU9OX0RFQ0xfQ0hFQ0sgKE5PREUpLT5mdW5jdGlvbl9kZWNsLmZ1bmN0aW9uX3NwZWNpZmljX3RhcmdldCkKKworLyogSW4gRlVOQ1RJT05fREVDTCwgdGhlIGZ1bmN0aW9uIHNwZWNpZmljIG9wdGltaXphdGlvbiBvcHRpb25zIHRvIHVzZSB3aGVuCisgICBjb21waWxpbmcgdGhpcyBmdW5jdGlvbi4gICovCisjZGVmaW5lIERFQ0xfRlVOQ1RJT05fU1BFQ0lGSUNfT1BUSU1JWkFUSU9OKE5PREUpIFwKKyAgIChGVU5DVElPTl9ERUNMX0NIRUNLIChOT0RFKS0+ZnVuY3Rpb25fZGVjbC5mdW5jdGlvbl9zcGVjaWZpY19vcHRpbWl6YXRpb24pCisKKy8qIEluIEZVTkNUSU9OX0RFQ0wsIHRoaXMgaXMgc2V0IGlmIHRoaXMgZnVuY3Rpb24gaGFzIG90aGVyIHZlcnNpb25zIGdlbmVyYXRlZAorICAgdXNpbmcgInRhcmdldCIgYXR0cmlidXRlcy4gIFRoZSBkZWZhdWx0IHZlcnNpb24gaXMgdGhlIG9uZSB3aGljaCBkb2VzIG5vdAorICAgaGF2ZSBhbnkgInRhcmdldCIgYXR0cmlidXRlIHNldC4gKi8KKyNkZWZpbmUgREVDTF9GVU5DVElPTl9WRVJTSU9ORUQoTk9ERSlcCisgICAoRlVOQ1RJT05fREVDTF9DSEVDSyAoTk9ERSktPmZ1bmN0aW9uX2RlY2wudmVyc2lvbmVkX2Z1bmN0aW9uKQorCisvKiBGVU5DVElPTl9ERUNMIGluaGVyaXRzIGZyb20gREVDTF9OT05fQ09NTU9OIGJlY2F1c2Ugb2YgdGhlIHVzZSBvZiB0aGUKKyAgIGFyZ3VtZW50cy9yZXN1bHQvc2F2ZWRfdHJlZSBmaWVsZHMgYnkgZnJvbnQgZW5kcy4gICBJdCB3YXMgZWl0aGVyIGluaGVyaXQKKyAgIEZVTkNUSU9OX0RFQ0wgZnJvbSBub25fY29tbW9uLCBvciBpbmhlcml0IG5vbl9jb21tb24gZnJvbSBGVU5DVElPTl9ERUNMLAorICAgd2hpY2ggc2VlbWVkIGEgYml0IHN0cmFuZ2UuICAqLworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX2Z1bmN0aW9uX2RlY2wgeworICBzdHJ1Y3QgdHJlZV9kZWNsX25vbl9jb21tb24gY29tbW9uOworCisgIHN0cnVjdCBmdW5jdGlvbiAqZjsKKworICAvKiBUaGUgcGVyc29uYWxpdHkgZnVuY3Rpb24uIFVzZWQgZm9yIHN0YWNrIHVud2luZGluZy4gKi8KKyAgdHJlZSBwZXJzb25hbGl0eTsKKworICAvKiBGdW5jdGlvbiBzcGVjaWZpYyBvcHRpb25zIHRoYXQgYXJlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbi4gICovCisgIHRyZWUgZnVuY3Rpb25fc3BlY2lmaWNfdGFyZ2V0OwkvKiB0YXJnZXQgb3B0aW9ucyAqLworICB0cmVlIGZ1bmN0aW9uX3NwZWNpZmljX29wdGltaXphdGlvbjsJLyogb3B0aW1pemF0aW9uIG9wdGlvbnMgKi8KKworICAvKiBJbiBhIEZVTkNUSU9OX0RFQ0wgZm9yIHdoaWNoIERFQ0xfQlVJTFRfSU4gaG9sZHMsIHRoaXMgaXMKKyAgICAgREVDTF9GVU5DVElPTl9DT0RFLiAgT3RoZXJ3aXNlIHVudXNlZC4KKyAgICAgPz8/ICBUaGUgYml0ZmllbGQgbmVlZHMgdG8gYmUgYWJsZSB0byBob2xkIGFsbCB0YXJnZXQgZnVuY3Rpb24KKwkgIGNvZGVzIGFzIHdlbGwuICAqLworICBFTlVNX0JJVEZJRUxEKGJ1aWx0X2luX2Z1bmN0aW9uKSBmdW5jdGlvbl9jb2RlIDogMTE7CisgIEVOVU1fQklURklFTEQoYnVpbHRfaW5fY2xhc3MpIGJ1aWx0X2luX2NsYXNzIDogMjsKKworICB1bnNpZ25lZCBzdGF0aWNfY3Rvcl9mbGFnIDogMTsKKyAgdW5zaWduZWQgc3RhdGljX2R0b3JfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHVuaW5saW5hYmxlIDogMTsKKworICB1bnNpZ25lZCBwb3NzaWJseV9pbmxpbmVkIDogMTsKKyAgdW5zaWduZWQgbm92b3BzX2ZsYWcgOiAxOworICB1bnNpZ25lZCByZXR1cm5zX3R3aWNlX2ZsYWcgOiAxOworICB1bnNpZ25lZCBtYWxsb2NfZmxhZyA6IDE7CisgIHVuc2lnbmVkIG9wZXJhdG9yX25ld19mbGFnIDogMTsKKyAgdW5zaWduZWQgZGVjbGFyZWRfaW5saW5lX2ZsYWcgOiAxOworICB1bnNpZ25lZCByZWdkZWNsX2ZsYWcgOiAxOworICB1bnNpZ25lZCBub19pbmxpbmVfd2FybmluZ19mbGFnIDogMTsKKworICB1bnNpZ25lZCBub19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQgOiAxOworICB1bnNpZ25lZCBub19saW1pdF9zdGFjayA6IDE7CisgIHVuc2lnbmVkIGRpc3JlZ2FyZF9pbmxpbmVfbGltaXRzIDogMTsKKyAgdW5zaWduZWQgcHVyZV9mbGFnIDogMTsKKyAgdW5zaWduZWQgbG9vcGluZ19jb25zdF9vcl9wdXJlX2ZsYWcgOiAxOworICB1bnNpZ25lZCBoYXNfZGVidWdfYXJnc19mbGFnIDogMTsKKyAgdW5zaWduZWQgdG1fY2xvbmVfZmxhZyA6IDE7CisgIHVuc2lnbmVkIHZlcnNpb25lZF9mdW5jdGlvbiA6IDE7CisgIC8qIE5vIGJpdHMgbGVmdC4gICovCit9OworCisvKiBUaGUgc291cmNlIGxhbmd1YWdlIG9mIHRoZSB0cmFuc2xhdGlvbi11bml0LiAgKi8KKyNkZWZpbmUgVFJBTlNMQVRJT05fVU5JVF9MQU5HVUFHRShOT0RFKSBcCisgIChUUkFOU0xBVElPTl9VTklUX0RFQ0xfQ0hFQ0sgKE5PREUpLT50cmFuc2xhdGlvbl91bml0X2RlY2wubGFuZ3VhZ2UpCisKKy8qIFRSQU5TTEFUSU9OX1VOSVRfREVDTCBpbmhlcml0cyBmcm9tIERFQ0xfTUlOSU1BTC4gICovCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdHJhbnNsYXRpb25fdW5pdF9kZWNsIHsKKyAgc3RydWN0IHRyZWVfZGVjbF9jb21tb24gY29tbW9uOworICAvKiBTb3VyY2UgbGFuZ3VhZ2Ugb2YgdGhpcyB0cmFuc2xhdGlvbiB1bml0LiAgVXNlZCBmb3IgRFdBUkYgb3V0cHV0LiAgKi8KKyAgY29uc3QgY2hhciAqIEdUWSgoc2tpcCgiIikpKSBsYW5ndWFnZTsKKyAgLyogVE9ETzogTm9uLW9wdGltaXphdGlvbiB1c2VkIHRvIGJ1aWxkIHRoaXMgdHJhbnNsYXRpb24gdW5pdC4gICovCisgIC8qIFRPRE86IFJvb3Qgb2YgYSBwYXJ0aWFsIERXQVJGIHRyZWUgZm9yIGdsb2JhbCB0eXBlcyBhbmQgZGVjbHMuICAqLworfTsKKworLyogQSB2ZWN0b3Igb2YgYWxsIHRyYW5zbGF0aW9uLXVuaXRzLiAgKi8KK2V4dGVybiBHVFkgKCgpKSB2ZWM8dHJlZSwgdmFfZ2M+ICphbGxfdHJhbnNsYXRpb25fdW5pdHM7CisKKy8qIEZvciBhIFRZUEVfREVDTCwgaG9sZHMgdGhlICJvcmlnaW5hbCIgdHlwZS4gIChUUkVFX1RZUEUgaGFzIHRoZSBjb3B5LikgKi8KKyNkZWZpbmUgREVDTF9PUklHSU5BTF9UWVBFKE5PREUpIFwKKyAgKFRZUEVfREVDTF9DSEVDSyAoTk9ERSktPmRlY2xfbm9uX2NvbW1vbi5yZXN1bHQpCisKKy8qIEluIGEgVFlQRV9ERUNMIG5vbnplcm8gbWVhbnMgdGhlIGRldGFpbCBpbmZvIGFib3V0IHRoaXMgdHlwZSBpcyBub3QgZHVtcGVkCisgICBpbnRvIHN0YWJzLiAgSW5zdGVhZCBpdCB3aWxsIGdlbmVyYXRlIGNyb3NzIHJlZmVyZW5jZSAoJ3gnKSBvZiBuYW1lcy4KKyAgIFRoaXMgdXNlcyB0aGUgc2FtZSBmbGFnIGFzIERFQ0xfRVhURVJOQUwuICAqLworI2RlZmluZSBUWVBFX0RFQ0xfU1VQUFJFU1NfREVCVUcoTk9ERSkgXAorICAoVFlQRV9ERUNMX0NIRUNLIChOT0RFKS0+ZGVjbF9jb21tb24uZGVjbF9mbGFnXzEpCisKKy8qIEdldHRlciBvZiB0aGUgaW1wb3J0ZWQgZGVjbGFyYXRpb24gYXNzb2NpYXRlZCB0byB0aGUKKyAgIElNUE9SVEVEX0RFQ0wgbm9kZS4gICovCisjZGVmaW5lIElNUE9SVEVEX0RFQ0xfQVNTT0NJQVRFRF9ERUNMKE5PREUpIFwKKyhERUNMX0lOSVRJQUwgKElNUE9SVEVEX0RFQ0xfQ0hFQ0sgKE5PREUpKSkKKworc3RydWN0IEdUWSgoKSkgdHJlZV90eXBlX2RlY2wgeworICBzdHJ1Y3QgdHJlZV9kZWNsX25vbl9jb21tb24gY29tbW9uOworCit9OworDAorLyogQSBTVEFURU1FTlRfTElTVCBjaGFpbnMgc3RhdGVtZW50cyB0b2dldGhlciBpbiBHRU5FUklDIGFuZCBHSU1QTEUuCisgICBUbyByZWR1Y2Ugb3ZlcmhlYWQsIHRoZSBub2RlcyBjb250YWluaW5nIHRoZSBzdGF0ZW1lbnRzIGFyZSBub3QgdHJlZXMuCisgICBUaGlzIGF2b2lkcyB0aGUgb3ZlcmhlYWQgb2YgdHJlZV9jb21tb24gb24gYWxsIGxpbmtlZCBsaXN0IGVsZW1lbnRzLgorCisgICBVc2UgdGhlIGludGVyZmFjZSBpbiB0cmVlLWl0ZXJhdG9yLmggdG8gYWNjZXNzIHRoaXMgbm9kZS4gICovCisKKyNkZWZpbmUgU1RBVEVNRU5UX0xJU1RfSEVBRChOT0RFKSBcCisgIChTVEFURU1FTlRfTElTVF9DSEVDSyAoTk9ERSktPnN0bXRfbGlzdC5oZWFkKQorI2RlZmluZSBTVEFURU1FTlRfTElTVF9UQUlMKE5PREUpIFwKKyAgKFNUQVRFTUVOVF9MSVNUX0NIRUNLIChOT0RFKS0+c3RtdF9saXN0LnRhaWwpCisKK3N0cnVjdCBHVFkgKChjaGFpbl9uZXh0ICgiJWgubmV4dCIpLCBjaGFpbl9wcmV2ICgiJWgucHJldiIpKSkgdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlCisgeworICBzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlICpwcmV2OworICBzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdF9ub2RlICpuZXh0OworICB0cmVlIHN0bXQ7Cit9OworCitzdHJ1Y3QgR1RZKCgpKSB0cmVlX3N0YXRlbWVudF9saXN0CisgeworICBzdHJ1Y3QgdHJlZV90eXBlZCB0eXBlZDsKKyAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqaGVhZDsKKyAgc3RydWN0IHRyZWVfc3RhdGVtZW50X2xpc3Rfbm9kZSAqdGFpbDsKK307CisKKworLyogT3B0aW1pemF0aW9uIG9wdGlvbnMgdXNlZCBieSBhIGZ1bmN0aW9uLiAgKi8KKworc3RydWN0IEdUWSgoKSkgdHJlZV9vcHRpbWl6YXRpb25fb3B0aW9uIHsKKyAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKKworICAvKiBUaGUgb3B0aW1pemF0aW9uIG9wdGlvbnMgdXNlZCBieSB0aGUgdXNlci4gICovCisgIHN0cnVjdCBjbF9vcHRpbWl6YXRpb24gb3B0czsKKworICAvKiBUYXJnZXQgb3B0YWJzIGZvciB0aGlzIHNldCBvZiBvcHRpbWl6YXRpb24gb3B0aW9ucy4gIFRoaXMgaXMgb2YKKyAgICAgdHlwZSBgc3RydWN0IHRhcmdldF9vcHRhYnMgKicuICAqLworICB1bnNpZ25lZCBjaGFyICpHVFkgKChhdG9taWMpKSBvcHRhYnM7CisKKyAgLyogVGhlIHZhbHVlIG9mIHRoaXNfdGFyZ2V0X29wdGFicyBhZ2FpbnN0IHdoaWNoIHRoZSBvcHRhYnMgYWJvdmUgd2VyZQorICAgICBnZW5lcmF0ZWQuICAqLworICBzdHJ1Y3QgdGFyZ2V0X29wdGFicyAqR1RZICgoc2tpcCkpIGJhc2Vfb3B0YWJzOworfTsKKworI2RlZmluZSBUUkVFX09QVElNSVpBVElPTihOT0RFKSBcCisgICgmT1BUSU1JWkFUSU9OX05PREVfQ0hFQ0sgKE5PREUpLT5vcHRpbWl6YXRpb24ub3B0cykKKworI2RlZmluZSBUUkVFX09QVElNSVpBVElPTl9PUFRBQlMoTk9ERSkgXAorICAoT1BUSU1JWkFUSU9OX05PREVfQ0hFQ0sgKE5PREUpLT5vcHRpbWl6YXRpb24ub3B0YWJzKQorCisjZGVmaW5lIFRSRUVfT1BUSU1JWkFUSU9OX0JBU0VfT1BUQUJTKE5PREUpIFwKKyAgKE9QVElNSVpBVElPTl9OT0RFX0NIRUNLIChOT0RFKS0+b3B0aW1pemF0aW9uLmJhc2Vfb3B0YWJzKQorCisvKiBSZXR1cm4gYSB0cmVlIG5vZGUgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlIGN1cnJlbnQgb3B0aW1pemF0aW9uIG9wdGlvbnMuICAqLworZXh0ZXJuIHRyZWUgYnVpbGRfb3B0aW1pemF0aW9uX25vZGUgKHZvaWQpOworCitleHRlcm4gdm9pZCBpbml0X3RyZWVfb3B0aW1pemF0aW9uX29wdGFicyAodHJlZSk7CisKKy8qIFRhcmdldCBvcHRpb25zIHVzZWQgYnkgYSBmdW5jdGlvbi4gICovCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfdGFyZ2V0X29wdGlvbiB7CisgIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CisKKyAgLyogVGhlIG9wdGltaXphdGlvbiBvcHRpb25zIHVzZWQgYnkgdGhlIHVzZXIuICAqLworICBzdHJ1Y3QgY2xfdGFyZ2V0X29wdGlvbiBvcHRzOworfTsKKworI2RlZmluZSBUUkVFX1RBUkdFVF9PUFRJT04oTk9ERSkgXAorICAoJlRBUkdFVF9PUFRJT05fTk9ERV9DSEVDSyAoTk9ERSktPnRhcmdldF9vcHRpb24ub3B0cykKKworLyogUmV0dXJuIGEgdHJlZSBub2RlIHRoYXQgZW5jYXBzdWxhdGVzIHRoZSBjdXJyZW50IHRhcmdldCBvcHRpb25zLiAgKi8KK2V4dGVybiB0cmVlIGJ1aWxkX3RhcmdldF9vcHRpb25fbm9kZSAodm9pZCk7CisKKwwKKy8qIERlZmluZSB0aGUgb3ZlcmFsbCBjb250ZW50cyBvZiBhIHRyZWUgbm9kZS4KKyAgIEl0IG1heSBiZSBhbnkgb2YgdGhlIHN0cnVjdHVyZXMgZGVjbGFyZWQgYWJvdmUKKyAgIGZvciB2YXJpb3VzIHR5cGVzIG9mIG5vZGUuICAqLworCit1bmlvbiBHVFkgKChwdHJfYWxpYXMgKHVuaW9uIGxhbmdfdHJlZV9ub2RlKSwKKwkgICAgZGVzYyAoInRyZWVfbm9kZV9zdHJ1Y3R1cmUgKCYlaCkiKSwgdmFyaWFibGVfc2l6ZSkpIHRyZWVfbm9kZSB7CisgIHN0cnVjdCB0cmVlX2Jhc2UgR1RZICgodGFnICgiVFNfQkFTRSIpKSkgYmFzZTsKKyAgc3RydWN0IHRyZWVfdHlwZWQgR1RZICgodGFnICgiVFNfVFlQRUQiKSkpIHR5cGVkOworICBzdHJ1Y3QgdHJlZV9jb21tb24gR1RZICgodGFnICgiVFNfQ09NTU9OIikpKSBjb21tb247CisgIHN0cnVjdCB0cmVlX2ludF9jc3QgR1RZICgodGFnICgiVFNfSU5UX0NTVCIpKSkgaW50X2NzdDsKKyAgc3RydWN0IHRyZWVfcmVhbF9jc3QgR1RZICgodGFnICgiVFNfUkVBTF9DU1QiKSkpIHJlYWxfY3N0OworICBzdHJ1Y3QgdHJlZV9maXhlZF9jc3QgR1RZICgodGFnICgiVFNfRklYRURfQ1NUIikpKSBmaXhlZF9jc3Q7CisgIHN0cnVjdCB0cmVlX3ZlY3RvciBHVFkgKCh0YWcgKCJUU19WRUNUT1IiKSkpIHZlY3RvcjsKKyAgc3RydWN0IHRyZWVfc3RyaW5nIEdUWSAoKHRhZyAoIlRTX1NUUklORyIpKSkgc3RyaW5nOworICBzdHJ1Y3QgdHJlZV9jb21wbGV4IEdUWSAoKHRhZyAoIlRTX0NPTVBMRVgiKSkpIGNvbXBsZXg7CisgIHN0cnVjdCB0cmVlX2lkZW50aWZpZXIgR1RZICgodGFnICgiVFNfSURFTlRJRklFUiIpKSkgaWRlbnRpZmllcjsKKyAgc3RydWN0IHRyZWVfZGVjbF9taW5pbWFsIEdUWSgodGFnICgiVFNfREVDTF9NSU5JTUFMIikpKSBkZWNsX21pbmltYWw7CisgIHN0cnVjdCB0cmVlX2RlY2xfY29tbW9uIEdUWSAoKHRhZyAoIlRTX0RFQ0xfQ09NTU9OIikpKSBkZWNsX2NvbW1vbjsKKyAgc3RydWN0IHRyZWVfZGVjbF93aXRoX3J0bCBHVFkgKCh0YWcgKCJUU19ERUNMX1dSVEwiKSkpIGRlY2xfd2l0aF9ydGw7CisgIHN0cnVjdCB0cmVlX2RlY2xfbm9uX2NvbW1vbiAgR1RZICgodGFnICgiVFNfREVDTF9OT05fQ09NTU9OIikpKSBkZWNsX25vbl9jb21tb247CisgIHN0cnVjdCB0cmVlX3Bhcm1fZGVjbCAgR1RZICAoKHRhZyAoIlRTX1BBUk1fREVDTCIpKSkgcGFybV9kZWNsOworICBzdHJ1Y3QgdHJlZV9kZWNsX3dpdGhfdmlzIEdUWSAoKHRhZyAoIlRTX0RFQ0xfV0lUSF9WSVMiKSkpIGRlY2xfd2l0aF92aXM7CisgIHN0cnVjdCB0cmVlX3Zhcl9kZWNsIEdUWSAoKHRhZyAoIlRTX1ZBUl9ERUNMIikpKSB2YXJfZGVjbDsKKyAgc3RydWN0IHRyZWVfZmllbGRfZGVjbCBHVFkgKCh0YWcgKCJUU19GSUVMRF9ERUNMIikpKSBmaWVsZF9kZWNsOworICBzdHJ1Y3QgdHJlZV9sYWJlbF9kZWNsIEdUWSAoKHRhZyAoIlRTX0xBQkVMX0RFQ0wiKSkpIGxhYmVsX2RlY2w7CisgIHN0cnVjdCB0cmVlX3Jlc3VsdF9kZWNsIEdUWSAoKHRhZyAoIlRTX1JFU1VMVF9ERUNMIikpKSByZXN1bHRfZGVjbDsKKyAgc3RydWN0IHRyZWVfY29uc3RfZGVjbCBHVFkgKCh0YWcgKCJUU19DT05TVF9ERUNMIikpKSBjb25zdF9kZWNsOworICBzdHJ1Y3QgdHJlZV90eXBlX2RlY2wgR1RZICgodGFnICgiVFNfVFlQRV9ERUNMIikpKSB0eXBlX2RlY2w7CisgIHN0cnVjdCB0cmVlX2Z1bmN0aW9uX2RlY2wgR1RZICgodGFnICgiVFNfRlVOQ1RJT05fREVDTCIpKSkgZnVuY3Rpb25fZGVjbDsKKyAgc3RydWN0IHRyZWVfdHJhbnNsYXRpb25fdW5pdF9kZWNsIEdUWSAoKHRhZyAoIlRTX1RSQU5TTEFUSU9OX1VOSVRfREVDTCIpKSkKKyAgICB0cmFuc2xhdGlvbl91bml0X2RlY2w7CisgIHN0cnVjdCB0cmVlX3R5cGVfY29tbW9uIEdUWSAoKHRhZyAoIlRTX1RZUEVfQ09NTU9OIikpKSB0eXBlX2NvbW1vbjsKKyAgc3RydWN0IHRyZWVfdHlwZV93aXRoX2xhbmdfc3BlY2lmaWMgR1RZICgodGFnICgiVFNfVFlQRV9XSVRIX0xBTkdfU1BFQ0lGSUMiKSkpCisgICAgdHlwZV93aXRoX2xhbmdfc3BlY2lmaWM7CisgIHN0cnVjdCB0cmVlX3R5cGVfbm9uX2NvbW1vbiBHVFkgKCh0YWcgKCJUU19UWVBFX05PTl9DT01NT04iKSkpCisgICAgdHlwZV9ub25fY29tbW9uOworICBzdHJ1Y3QgdHJlZV9saXN0IEdUWSAoKHRhZyAoIlRTX0xJU1QiKSkpIGxpc3Q7CisgIHN0cnVjdCB0cmVlX3ZlYyBHVFkgKCh0YWcgKCJUU19WRUMiKSkpIHZlYzsKKyAgc3RydWN0IHRyZWVfZXhwIEdUWSAoKHRhZyAoIlRTX0VYUCIpKSkgZXhwOworICBzdHJ1Y3QgdHJlZV9zc2FfbmFtZSBHVFkgKCh0YWcgKCJUU19TU0FfTkFNRSIpKSkgc3NhX25hbWU7CisgIHN0cnVjdCB0cmVlX2Jsb2NrIEdUWSAoKHRhZyAoIlRTX0JMT0NLIikpKSBibG9jazsKKyAgc3RydWN0IHRyZWVfYmluZm8gR1RZICgodGFnICgiVFNfQklORk8iKSkpIGJpbmZvOworICBzdHJ1Y3QgdHJlZV9zdGF0ZW1lbnRfbGlzdCBHVFkgKCh0YWcgKCJUU19TVEFURU1FTlRfTElTVCIpKSkgc3RtdF9saXN0OworICBzdHJ1Y3QgdHJlZV9jb25zdHJ1Y3RvciBHVFkgKCh0YWcgKCJUU19DT05TVFJVQ1RPUiIpKSkgY29uc3RydWN0b3I7CisgIHN0cnVjdCB0cmVlX29tcF9jbGF1c2UgR1RZICgodGFnICgiVFNfT01QX0NMQVVTRSIpKSkgb21wX2NsYXVzZTsKKyAgc3RydWN0IHRyZWVfb3B0aW1pemF0aW9uX29wdGlvbiBHVFkgKCh0YWcgKCJUU19PUFRJTUlaQVRJT04iKSkpIG9wdGltaXphdGlvbjsKKyAgc3RydWN0IHRyZWVfdGFyZ2V0X29wdGlvbiBHVFkgKCh0YWcgKCJUU19UQVJHRVRfT1BUSU9OIikpKSB0YXJnZXRfb3B0aW9uOworfTsKKworI2lmIGRlZmluZWQgRU5BQkxFX1RSRUVfQ0hFQ0tJTkcgJiYgKEdDQ19WRVJTSU9OID49IDIwMDcpCisKK2lubGluZSB0cmVlCit0cmVlX2NoZWNrICh0cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2csIHRyZWVfY29kZSBfX2MpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gX19jKQorICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIF9fYywgMCk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSB0cmVlCit0cmVlX25vdF9jaGVjayAodHJlZSBfX3QsIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nLAorICAgICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fYykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSA9PSBfX2MpCisgICAgdHJlZV9ub3RfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIF9fYywgMCk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSB0cmVlCit0cmVlX2NoZWNrMiAodHJlZSBfX3QsIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nLAorICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fYzEsIGVudW0gdHJlZV9jb2RlIF9fYzIpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gX19jMQorICAgICAgJiYgVFJFRV9DT0RFIChfX3QpICE9IF9fYzIpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jMSwgX19jMiwgMCk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSB0cmVlCit0cmVlX25vdF9jaGVjazIgKHRyZWUgX190LCBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZywKKyAgICAgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jMSwgZW51bSB0cmVlX2NvZGUgX19jMikKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSA9PSBfX2MxCisgICAgICB8fCBUUkVFX0NPREUgKF9fdCkgPT0gX19jMikKKyAgICB0cmVlX25vdF9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jMSwgX19jMiwgMCk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSB0cmVlCit0cmVlX2NoZWNrMyAodHJlZSBfX3QsIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nLAorICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fYzEsIGVudW0gdHJlZV9jb2RlIF9fYzIsIGVudW0gdHJlZV9jb2RlIF9fYzMpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gX19jMQorICAgICAgJiYgVFJFRV9DT0RFIChfX3QpICE9IF9fYzIKKyAgICAgICYmIFRSRUVfQ09ERSAoX190KSAhPSBfX2MzKQorICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIF9fYzEsIF9fYzIsIF9fYzMsIDApOworICByZXR1cm4gX190OworfQorCitpbmxpbmUgdHJlZQordHJlZV9ub3RfY2hlY2szICh0cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2csCisgICAgICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fYzEsIGVudW0gdHJlZV9jb2RlIF9fYzIsIGVudW0gdHJlZV9jb2RlIF9fYzMpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgPT0gX19jMQorICAgICAgfHwgVFJFRV9DT0RFIChfX3QpID09IF9fYzIKKyAgICAgIHx8IFRSRUVfQ09ERSAoX190KSA9PSBfX2MzKQorICAgIHRyZWVfbm90X2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBfX2MxLCBfX2MyLCBfX2MzLCAwKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIHRyZWUKK3RyZWVfY2hlY2s0ICh0cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2csCisgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jMSwgZW51bSB0cmVlX2NvZGUgX19jMiwgZW51bSB0cmVlX2NvZGUgX19jMywKKyAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBfX2M0KQoreworICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IF9fYzEKKyAgICAgICYmIFRSRUVfQ09ERSAoX190KSAhPSBfX2MyCisgICAgICAmJiBUUkVFX0NPREUgKF9fdCkgIT0gX19jMworICAgICAgJiYgVFJFRV9DT0RFIChfX3QpICE9IF9fYzQpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jMSwgX19jMiwgX19jMywgX19jNCwgMCk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSB0cmVlCit0cmVlX25vdF9jaGVjazQgKHRyZWUgX190LCBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZywKKyAgICAgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jMSwgZW51bSB0cmVlX2NvZGUgX19jMiwgZW51bSB0cmVlX2NvZGUgX19jMywKKyAgICAgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jNCkKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSA9PSBfX2MxCisgICAgICB8fCBUUkVFX0NPREUgKF9fdCkgPT0gX19jMgorICAgICAgfHwgVFJFRV9DT0RFIChfX3QpID09IF9fYzMKKyAgICAgIHx8IFRSRUVfQ09ERSAoX190KSA9PSBfX2M0KQorICAgIHRyZWVfbm90X2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBfX2MxLCBfX2MyLCBfX2MzLCBfX2M0LCAwKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIHRyZWUKK3RyZWVfY2hlY2s1ICh0cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2csCisgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jMSwgZW51bSB0cmVlX2NvZGUgX19jMiwgZW51bSB0cmVlX2NvZGUgX19jMywKKyAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBfX2M0LCBlbnVtIHRyZWVfY29kZSBfX2M1KQoreworICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IF9fYzEKKyAgICAgICYmIFRSRUVfQ09ERSAoX190KSAhPSBfX2MyCisgICAgICAmJiBUUkVFX0NPREUgKF9fdCkgIT0gX19jMworICAgICAgJiYgVFJFRV9DT0RFIChfX3QpICE9IF9fYzQKKyAgICAgICYmIFRSRUVfQ09ERSAoX190KSAhPSBfX2M1KQorICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIF9fYzEsIF9fYzIsIF9fYzMsIF9fYzQsIF9fYzUsIDApOworICByZXR1cm4gX190OworfQorCitpbmxpbmUgdHJlZQordHJlZV9ub3RfY2hlY2s1ICh0cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2csCisgICAgICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fYzEsIGVudW0gdHJlZV9jb2RlIF9fYzIsIGVudW0gdHJlZV9jb2RlIF9fYzMsCisgICAgICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fYzQsIGVudW0gdHJlZV9jb2RlIF9fYzUpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgPT0gX19jMQorICAgICAgfHwgVFJFRV9DT0RFIChfX3QpID09IF9fYzIKKyAgICAgIHx8IFRSRUVfQ09ERSAoX190KSA9PSBfX2MzCisgICAgICB8fCBUUkVFX0NPREUgKF9fdCkgPT0gX19jNAorICAgICAgfHwgVFJFRV9DT0RFIChfX3QpID09IF9fYzUpCisgICAgdHJlZV9ub3RfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIF9fYzEsIF9fYzIsIF9fYzMsIF9fYzQsIF9fYzUsIDApOworICByZXR1cm4gX190OworfQorCitpbmxpbmUgdHJlZQorY29udGFpbnNfc3RydWN0X2NoZWNrICh0cmVlIF9fdCwgY29uc3QgZW51bSB0cmVlX25vZGVfc3RydWN0dXJlX2VudW0gX19zLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgaWYgKHRyZWVfY29udGFpbnNfc3RydWN0W1RSRUVfQ09ERShfX3QpXVtfX3NdICE9IDEpCisgICAgICB0cmVlX2NvbnRhaW5zX3N0cnVjdF9jaGVja19mYWlsZWQgKF9fdCwgX19zLCBfX2YsIF9fbCwgX19nKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIHRyZWUKK3RyZWVfY2xhc3NfY2hlY2sgKHRyZWUgX190LCBjb25zdCBlbnVtIHRyZWVfY29kZV9jbGFzcyBfX2NsYXNzLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2cpCit7CisgIGlmIChUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERShfX3QpKSAhPSBfX2NsYXNzKQorICAgIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsIF9fY2xhc3MsIF9fZiwgX19sLCBfX2cpOworICByZXR1cm4gX190OworfQorCitpbmxpbmUgdHJlZQordHJlZV9yYW5nZV9jaGVjayAodHJlZSBfX3QsCisgICAgICAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBfX2NvZGUxLCBlbnVtIHRyZWVfY29kZSBfX2NvZGUyLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2cpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgPCBfX2NvZGUxIHx8IFRSRUVfQ09ERSAoX190KSA+IF9fY29kZTIpCisgICAgdHJlZV9yYW5nZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jb2RlMSwgX19jb2RlMik7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSB0cmVlCitvbXBfY2xhdXNlX3N1YmNvZGVfY2hlY2sgKHRyZWUgX190LCBlbnVtIG9tcF9jbGF1c2VfY29kZSBfX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nKQoreworICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IE9NUF9DTEFVU0UpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgT01QX0NMQVVTRSwgMCk7CisgIGlmIChfX3QtPm9tcF9jbGF1c2UuY29kZSAhPSBfX2NvZGUpCisgICAgb21wX2NsYXVzZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jb2RlKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIHRyZWUKK29tcF9jbGF1c2VfcmFuZ2VfY2hlY2sgKHRyZWUgX190LAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBvbXBfY2xhdXNlX2NvZGUgX19jb2RlMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gb21wX2NsYXVzZV9jb2RlIF9fY29kZTIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBPTVBfQ0xBVVNFKQorICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIE9NUF9DTEFVU0UsIDApOworICBpZiAoKGludCkgX190LT5vbXBfY2xhdXNlLmNvZGUgPCAoaW50KSBfX2NvZGUxCisgICAgICB8fCAoaW50KSBfX3QtPm9tcF9jbGF1c2UuY29kZSA+IChpbnQpIF9fY29kZTIpCisgICAgb21wX2NsYXVzZV9yYW5nZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jb2RlMSwgX19jb2RlMik7CisgIHJldHVybiBfX3Q7Cit9CisKKy8qIFRoZXNlIGNoZWNrcyBoYXZlIHRvIGJlIHNwZWNpYWwgY2FzZWQuICAqLworCitpbmxpbmUgdHJlZQorZXhwcl9jaGVjayAodHJlZSBfX3QsIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nKQoreworICBjaGFyIGNvbnN0IF9fYyA9IFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFIChfX3QpKTsKKyAgaWYgKCFJU19FWFBSX0NPREVfQ0xBU1MgKF9fYykpCisgICAgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgdGNjX2V4cHJlc3Npb24sIF9fZiwgX19sLCBfX2cpOworICByZXR1cm4gX190OworfQorCisvKiBUaGVzZSBjaGVja3MgaGF2ZSB0byBiZSBzcGVjaWFsIGNhc2VkLiAgKi8KKworaW5saW5lIHRyZWUKK25vbl90eXBlX2NoZWNrICh0cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2cpCit7CisgIGlmIChUWVBFX1AgKF9fdCkpCisgICAgdHJlZV9ub3RfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsIHRjY190eXBlLCBfX2YsIF9fbCwgX19nKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIHRyZWUgKgordHJlZV92ZWNfZWx0X2NoZWNrICh0cmVlIF9fdCwgaW50IF9faSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2cpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gVFJFRV9WRUMpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgVFJFRV9WRUMsIDApOworICBpZiAoX19pIDwgMCB8fCBfX2kgPj0gX190LT5iYXNlLnUubGVuZ3RoKQorICAgIHRyZWVfdmVjX2VsdF9jaGVja19mYWlsZWQgKF9faSwgX190LT5iYXNlLnUubGVuZ3RoLCBfX2YsIF9fbCwgX19nKTsKKyAgcmV0dXJuICZDT05TVF9DQVNUX1RSRUUgKF9fdCktPnZlYy5hW19faV07Cit9CisKK2lubGluZSB0cmVlICoKK29tcF9jbGF1c2VfZWx0X2NoZWNrICh0cmVlIF9fdCwgaW50IF9faSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBPTVBfQ0xBVVNFKQorICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIE9NUF9DTEFVU0UsIDApOworICBpZiAoX19pIDwgMCB8fCBfX2kgPj0gb21wX2NsYXVzZV9udW1fb3BzIFtfX3QtPm9tcF9jbGF1c2UuY29kZV0pCisgICAgb21wX2NsYXVzZV9vcGVyYW5kX2NoZWNrX2ZhaWxlZCAoX19pLCBfX3QsIF9fZiwgX19sLCBfX2cpOworICByZXR1cm4gJl9fdC0+b21wX2NsYXVzZS5vcHNbX19pXTsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK3RyZWVfY2hlY2sgKGNvbnN0X3RyZWUgX190LCBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZywKKwkgICAgdHJlZV9jb2RlIF9fYykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBfX2MpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jLCAwKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK3RyZWVfbm90X2NoZWNrIChjb25zdF90cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2csCisgICAgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jKQoreworICBpZiAoVFJFRV9DT0RFIChfX3QpID09IF9fYykKKyAgICB0cmVlX25vdF9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jLCAwKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK3RyZWVfY2hlY2syIChjb25zdF90cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2csCisgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jMSwgZW51bSB0cmVlX2NvZGUgX19jMikKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBfX2MxCisgICAgICAmJiBUUkVFX0NPREUgKF9fdCkgIT0gX19jMikKKyAgICB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBfX2MxLCBfX2MyLCAwKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK3RyZWVfbm90X2NoZWNrMiAoY29uc3RfdHJlZSBfX3QsIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nLAorICAgICAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBfX2MxLCBlbnVtIHRyZWVfY29kZSBfX2MyKQoreworICBpZiAoVFJFRV9DT0RFIChfX3QpID09IF9fYzEKKyAgICAgIHx8IFRSRUVfQ09ERSAoX190KSA9PSBfX2MyKQorICAgIHRyZWVfbm90X2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBfX2MxLCBfX2MyLCAwKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK3RyZWVfY2hlY2szIChjb25zdF90cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2csCisgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jMSwgZW51bSB0cmVlX2NvZGUgX19jMiwgZW51bSB0cmVlX2NvZGUgX19jMykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBfX2MxCisgICAgICAmJiBUUkVFX0NPREUgKF9fdCkgIT0gX19jMgorICAgICAgJiYgVFJFRV9DT0RFIChfX3QpICE9IF9fYzMpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jMSwgX19jMiwgX19jMywgMCk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSBjb25zdF90cmVlCit0cmVlX25vdF9jaGVjazMgKGNvbnN0X3RyZWUgX190LCBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZywKKyAgICAgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jMSwgZW51bSB0cmVlX2NvZGUgX19jMiwgZW51bSB0cmVlX2NvZGUgX19jMykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSA9PSBfX2MxCisgICAgICB8fCBUUkVFX0NPREUgKF9fdCkgPT0gX19jMgorICAgICAgfHwgVFJFRV9DT0RFIChfX3QpID09IF9fYzMpCisgICAgdHJlZV9ub3RfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIF9fYzEsIF9fYzIsIF9fYzMsIDApOworICByZXR1cm4gX190OworfQorCitpbmxpbmUgY29uc3RfdHJlZQordHJlZV9jaGVjazQgKGNvbnN0X3RyZWUgX190LCBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZywKKyAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBfX2MxLCBlbnVtIHRyZWVfY29kZSBfX2MyLCBlbnVtIHRyZWVfY29kZSBfX2MzLAorICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fYzQpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gX19jMQorICAgICAgJiYgVFJFRV9DT0RFIChfX3QpICE9IF9fYzIKKyAgICAgICYmIFRSRUVfQ09ERSAoX190KSAhPSBfX2MzCisgICAgICAmJiBUUkVFX0NPREUgKF9fdCkgIT0gX19jNCkKKyAgICB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBfX2MxLCBfX2MyLCBfX2MzLCBfX2M0LCAwKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK3RyZWVfbm90X2NoZWNrNCAoY29uc3RfdHJlZSBfX3QsIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nLAorICAgICAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBfX2MxLCBlbnVtIHRyZWVfY29kZSBfX2MyLCBlbnVtIHRyZWVfY29kZSBfX2MzLAorICAgICAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBfX2M0KQoreworICBpZiAoVFJFRV9DT0RFIChfX3QpID09IF9fYzEKKyAgICAgIHx8IFRSRUVfQ09ERSAoX190KSA9PSBfX2MyCisgICAgICB8fCBUUkVFX0NPREUgKF9fdCkgPT0gX19jMworICAgICAgfHwgVFJFRV9DT0RFIChfX3QpID09IF9fYzQpCisgICAgdHJlZV9ub3RfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIF9fYzEsIF9fYzIsIF9fYzMsIF9fYzQsIDApOworICByZXR1cm4gX190OworfQorCitpbmxpbmUgY29uc3RfdHJlZQordHJlZV9jaGVjazUgKGNvbnN0X3RyZWUgX190LCBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZywKKyAgICAgICAgICAgICBlbnVtIHRyZWVfY29kZSBfX2MxLCBlbnVtIHRyZWVfY29kZSBfX2MyLCBlbnVtIHRyZWVfY29kZSBfX2MzLAorICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fYzQsIGVudW0gdHJlZV9jb2RlIF9fYzUpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gX19jMQorICAgICAgJiYgVFJFRV9DT0RFIChfX3QpICE9IF9fYzIKKyAgICAgICYmIFRSRUVfQ09ERSAoX190KSAhPSBfX2MzCisgICAgICAmJiBUUkVFX0NPREUgKF9fdCkgIT0gX19jNAorICAgICAgJiYgVFJFRV9DT0RFIChfX3QpICE9IF9fYzUpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jMSwgX19jMiwgX19jMywgX19jNCwgX19jNSwgMCk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSBjb25zdF90cmVlCit0cmVlX25vdF9jaGVjazUgKGNvbnN0X3RyZWUgX190LCBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZywKKyAgICAgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jMSwgZW51bSB0cmVlX2NvZGUgX19jMiwgZW51bSB0cmVlX2NvZGUgX19jMywKKyAgICAgICAgICAgICAgICAgZW51bSB0cmVlX2NvZGUgX19jNCwgZW51bSB0cmVlX2NvZGUgX19jNSkKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSA9PSBfX2MxCisgICAgICB8fCBUUkVFX0NPREUgKF9fdCkgPT0gX19jMgorICAgICAgfHwgVFJFRV9DT0RFIChfX3QpID09IF9fYzMKKyAgICAgIHx8IFRSRUVfQ09ERSAoX190KSA9PSBfX2M0CisgICAgICB8fCBUUkVFX0NPREUgKF9fdCkgPT0gX19jNSkKKyAgICB0cmVlX25vdF9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jMSwgX19jMiwgX19jMywgX19jNCwgX19jNSwgMCk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSBjb25zdF90cmVlCitjb250YWluc19zdHJ1Y3RfY2hlY2sgKGNvbnN0X3RyZWUgX190LCBjb25zdCBlbnVtIHRyZWVfbm9kZV9zdHJ1Y3R1cmVfZW51bSBfX3MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nKQoreworICBpZiAodHJlZV9jb250YWluc19zdHJ1Y3RbVFJFRV9DT0RFKF9fdCldW19fc10gIT0gMSkKKyAgICAgIHRyZWVfY29udGFpbnNfc3RydWN0X2NoZWNrX2ZhaWxlZCAoX190LCBfX3MsIF9fZiwgX19sLCBfX2cpOworICByZXR1cm4gX190OworfQorCitpbmxpbmUgY29uc3RfdHJlZQordHJlZV9jbGFzc19jaGVjayAoY29uc3RfdHJlZSBfX3QsIGNvbnN0IGVudW0gdHJlZV9jb2RlX2NsYXNzIF9fY2xhc3MsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgaWYgKFRSRUVfQ09ERV9DTEFTUyAoVFJFRV9DT0RFKF9fdCkpICE9IF9fY2xhc3MpCisgICAgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgX19jbGFzcywgX19mLCBfX2wsIF9fZyk7CisgIHJldHVybiBfX3Q7Cit9CisKK2lubGluZSBjb25zdF90cmVlCit0cmVlX3JhbmdlX2NoZWNrIChjb25zdF90cmVlIF9fdCwKKyAgICAgICAgICAgICAgICAgIGVudW0gdHJlZV9jb2RlIF9fY29kZTEsIGVudW0gdHJlZV9jb2RlIF9fY29kZTIsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSA8IF9fY29kZTEgfHwgVFJFRV9DT0RFIChfX3QpID4gX19jb2RlMikKKyAgICB0cmVlX3JhbmdlX2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBfX2NvZGUxLCBfX2NvZGUyKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK29tcF9jbGF1c2Vfc3ViY29kZV9jaGVjayAoY29uc3RfdHJlZSBfX3QsIGVudW0gb21wX2NsYXVzZV9jb2RlIF9fY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2cpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gT01QX0NMQVVTRSkKKyAgICB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBPTVBfQ0xBVVNFLCAwKTsKKyAgaWYgKF9fdC0+b21wX2NsYXVzZS5jb2RlICE9IF9fY29kZSkKKyAgICBvbXBfY2xhdXNlX2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBfX2NvZGUpOworICByZXR1cm4gX190OworfQorCitpbmxpbmUgY29uc3RfdHJlZQorb21wX2NsYXVzZV9yYW5nZV9jaGVjayAoY29uc3RfdHJlZSBfX3QsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIG9tcF9jbGF1c2VfY29kZSBfX2NvZGUxLAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBvbXBfY2xhdXNlX2NvZGUgX19jb2RlMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nKQoreworICBpZiAoVFJFRV9DT0RFIChfX3QpICE9IE9NUF9DTEFVU0UpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgT01QX0NMQVVTRSwgMCk7CisgIGlmICgoaW50KSBfX3QtPm9tcF9jbGF1c2UuY29kZSA8IChpbnQpIF9fY29kZTEKKyAgICAgIHx8IChpbnQpIF9fdC0+b21wX2NsYXVzZS5jb2RlID4gKGludCkgX19jb2RlMikKKyAgICBvbXBfY2xhdXNlX3JhbmdlX2NoZWNrX2ZhaWxlZCAoX190LCBfX2YsIF9fbCwgX19nLCBfX2NvZGUxLCBfX2NvZGUyKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK2V4cHJfY2hlY2sgKGNvbnN0X3RyZWUgX190LCBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgY2hhciBjb25zdCBfX2MgPSBUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoX190KSk7CisgIGlmICghSVNfRVhQUl9DT0RFX0NMQVNTIChfX2MpKQorICAgIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsIHRjY19leHByZXNzaW9uLCBfX2YsIF9fbCwgX19nKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUKK25vbl90eXBlX2NoZWNrIChjb25zdF90cmVlIF9fdCwgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2cpCit7CisgIGlmIChUWVBFX1AgKF9fdCkpCisgICAgdHJlZV9ub3RfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsIHRjY190eXBlLCBfX2YsIF9fbCwgX19nKTsKKyAgcmV0dXJuIF9fdDsKK30KKworaW5saW5lIGNvbnN0X3RyZWUgKgordHJlZV92ZWNfZWx0X2NoZWNrIChjb25zdF90cmVlIF9fdCwgaW50IF9faSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19mLCBpbnQgX19sLCBjb25zdCBjaGFyICpfX2cpCit7CisgIGlmIChUUkVFX0NPREUgKF9fdCkgIT0gVFJFRV9WRUMpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgVFJFRV9WRUMsIDApOworICBpZiAoX19pIDwgMCB8fCBfX2kgPj0gX190LT5iYXNlLnUubGVuZ3RoKQorICAgIHRyZWVfdmVjX2VsdF9jaGVja19mYWlsZWQgKF9faSwgX190LT5iYXNlLnUubGVuZ3RoLCBfX2YsIF9fbCwgX19nKTsKKyAgcmV0dXJuIENPTlNUX0NBU1QgKGNvbnN0X3RyZWUgKiwgJl9fdC0+dmVjLmFbX19pXSk7CisgIC8vcmV0dXJuICZfX3QtPnZlYy5hW19faV07Cit9CisKK2lubGluZSBjb25zdF90cmVlICoKK29tcF9jbGF1c2VfZWx0X2NoZWNrIChjb25zdF90cmVlIF9fdCwgaW50IF9faSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBPTVBfQ0xBVVNFKQorICAgIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIF9fZiwgX19sLCBfX2csIE9NUF9DTEFVU0UsIDApOworICBpZiAoX19pIDwgMCB8fCBfX2kgPj0gb21wX2NsYXVzZV9udW1fb3BzIFtfX3QtPm9tcF9jbGF1c2UuY29kZV0pCisgICAgb21wX2NsYXVzZV9vcGVyYW5kX2NoZWNrX2ZhaWxlZCAoX19pLCBfX3QsIF9fZiwgX19sLCBfX2cpOworICByZXR1cm4gQ09OU1RfQ0FTVCAoY29uc3RfdHJlZSAqLCAmX190LT5vbXBfY2xhdXNlLm9wc1tfX2ldKTsKK30KKworI2VuZGlmCisKKy8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBvcGVyYW5kcyBpbiBhbiBleHByZXNzaW9uIG5vZGUgTk9ERS4gIEZvcgorICAgdGNjX3ZsX2V4cCBub2RlcyBsaWtlIENBTExfRVhQUnMsIHRoaXMgaXMgc3RvcmVkIGluIHRoZSBub2RlIGl0c2VsZiwKKyAgIG90aGVyd2lzZSBpdCBpcyBsb29rZWQgdXAgZnJvbSB0aGUgbm9kZSdzIGNvZGUuICAqLworc3RhdGljIGlubGluZSBpbnQKK3RyZWVfb3BlcmFuZF9sZW5ndGggKGNvbnN0X3RyZWUgbm9kZSkKK3sKKyAgaWYgKFZMX0VYUF9DTEFTU19QIChub2RlKSkKKyAgICByZXR1cm4gVkxfRVhQX09QRVJBTkRfTEVOR1RIIChub2RlKTsKKyAgZWxzZQorICAgIHJldHVybiBUUkVFX0NPREVfTEVOR1RIIChUUkVFX0NPREUgKG5vZGUpKTsKK30KKworI2lmIGRlZmluZWQgRU5BQkxFX1RSRUVfQ0hFQ0tJTkcgJiYgKEdDQ19WRVJTSU9OID49IDIwMDcpCisKKy8qIFNwZWNpYWwgY2hlY2tzIGZvciBUUkVFX09QRVJBTkRzLiAgKi8KK2lubGluZSB0cmVlICoKK3RyZWVfb3BlcmFuZF9jaGVjayAodHJlZSBfX3QsIGludCBfX2ksCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nKQoreworICBjb25zdF90cmVlIF9fdSA9IEVYUFJfQ0hFQ0sgKF9fdCk7CisgIGlmIChfX2kgPCAwIHx8IF9faSA+PSBUUkVFX09QRVJBTkRfTEVOR1RIIChfX3UpKQorICAgIHRyZWVfb3BlcmFuZF9jaGVja19mYWlsZWQgKF9faSwgX191LCBfX2YsIF9fbCwgX19nKTsKKyAgcmV0dXJuICZDT05TVF9DQVNUX1RSRUUgKF9fdSktPmV4cC5vcGVyYW5kc1tfX2ldOworfQorCitpbmxpbmUgdHJlZSAqCit0cmVlX29wZXJhbmRfY2hlY2tfY29kZSAodHJlZSBfX3QsIGVudW0gdHJlZV9jb2RlIF9fY29kZSwgaW50IF9faSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBfX2NvZGUpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jb2RlLCAwKTsKKyAgaWYgKF9faSA8IDAgfHwgX19pID49IFRSRUVfT1BFUkFORF9MRU5HVEggKF9fdCkpCisgICAgdHJlZV9vcGVyYW5kX2NoZWNrX2ZhaWxlZCAoX19pLCBfX3QsIF9fZiwgX19sLCBfX2cpOworICByZXR1cm4gJl9fdC0+ZXhwLm9wZXJhbmRzW19faV07Cit9CisKK2lubGluZSBjb25zdF90cmVlICoKK3RyZWVfb3BlcmFuZF9jaGVjayAoY29uc3RfdHJlZSBfX3QsIGludCBfX2ksCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZiwgaW50IF9fbCwgY29uc3QgY2hhciAqX19nKQoreworICBjb25zdF90cmVlIF9fdSA9IEVYUFJfQ0hFQ0sgKF9fdCk7CisgIGlmIChfX2kgPCAwIHx8IF9faSA+PSBUUkVFX09QRVJBTkRfTEVOR1RIIChfX3UpKQorICAgIHRyZWVfb3BlcmFuZF9jaGVja19mYWlsZWQgKF9faSwgX191LCBfX2YsIF9fbCwgX19nKTsKKyAgcmV0dXJuIENPTlNUX0NBU1QgKGNvbnN0X3RyZWUgKiwgJl9fdS0+ZXhwLm9wZXJhbmRzW19faV0pOworfQorCitpbmxpbmUgY29uc3RfdHJlZSAqCit0cmVlX29wZXJhbmRfY2hlY2tfY29kZSAoY29uc3RfdHJlZSBfX3QsIGVudW0gdHJlZV9jb2RlIF9fY29kZSwgaW50IF9faSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX2YsIGludCBfX2wsIGNvbnN0IGNoYXIgKl9fZykKK3sKKyAgaWYgKFRSRUVfQ09ERSAoX190KSAhPSBfX2NvZGUpCisgICAgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgX19mLCBfX2wsIF9fZywgX19jb2RlLCAwKTsKKyAgaWYgKF9faSA8IDAgfHwgX19pID49IFRSRUVfT1BFUkFORF9MRU5HVEggKF9fdCkpCisgICAgdHJlZV9vcGVyYW5kX2NoZWNrX2ZhaWxlZCAoX19pLCBfX3QsIF9fZiwgX19sLCBfX2cpOworICByZXR1cm4gQ09OU1RfQ0FTVCAoY29uc3RfdHJlZSAqLCAmX190LT5leHAub3BlcmFuZHNbX19pXSk7Cit9CisKKyNlbmRpZgorCisMCisvKiBTdGFuZGFyZCBuYW1lZCBvciBuYW1lbGVzcyBkYXRhIHR5cGVzIG9mIHRoZSBDIGNvbXBpbGVyLiAgKi8KKworZW51bSB0cmVlX2luZGV4Cit7CisgIFRJX0VSUk9SX01BUkssCisgIFRJX0lOVFFJX1RZUEUsCisgIFRJX0lOVEhJX1RZUEUsCisgIFRJX0lOVFNJX1RZUEUsCisgIFRJX0lOVERJX1RZUEUsCisgIFRJX0lOVFRJX1RZUEUsCisKKyAgVElfVUlOVFFJX1RZUEUsCisgIFRJX1VJTlRISV9UWVBFLAorICBUSV9VSU5UU0lfVFlQRSwKKyAgVElfVUlOVERJX1RZUEUsCisgIFRJX1VJTlRUSV9UWVBFLAorCisgIFRJX1VJTlQxNl9UWVBFLAorICBUSV9VSU5UMzJfVFlQRSwKKyAgVElfVUlOVDY0X1RZUEUsCisKKyAgVElfSU5URUdFUl9aRVJPLAorICBUSV9JTlRFR0VSX09ORSwKKyAgVElfSU5URUdFUl9USFJFRSwKKyAgVElfSU5URUdFUl9NSU5VU19PTkUsCisgIFRJX05VTExfUE9JTlRFUiwKKworICBUSV9TSVpFX1pFUk8sCisgIFRJX1NJWkVfT05FLAorCisgIFRJX0JJVFNJWkVfWkVSTywKKyAgVElfQklUU0laRV9PTkUsCisgIFRJX0JJVFNJWkVfVU5JVCwKKworICBUSV9QVUJMSUMsCisgIFRJX1BST1RFQ1RFRCwKKyAgVElfUFJJVkFURSwKKworICBUSV9CT09MRUFOX0ZBTFNFLAorICBUSV9CT09MRUFOX1RSVUUsCisKKyAgVElfQ09NUExFWF9JTlRFR0VSX1RZUEUsCisgIFRJX0NPTVBMRVhfRkxPQVRfVFlQRSwKKyAgVElfQ09NUExFWF9ET1VCTEVfVFlQRSwKKyAgVElfQ09NUExFWF9MT05HX0RPVUJMRV9UWVBFLAorCisgIFRJX0ZMT0FUX1RZUEUsCisgIFRJX0RPVUJMRV9UWVBFLAorICBUSV9MT05HX0RPVUJMRV9UWVBFLAorCisgIFRJX0ZMT0FUX1BUUl9UWVBFLAorICBUSV9ET1VCTEVfUFRSX1RZUEUsCisgIFRJX0xPTkdfRE9VQkxFX1BUUl9UWVBFLAorICBUSV9JTlRFR0VSX1BUUl9UWVBFLAorCisgIFRJX1ZPSURfVFlQRSwKKyAgVElfUFRSX1RZUEUsCisgIFRJX0NPTlNUX1BUUl9UWVBFLAorICBUSV9TSVpFX1RZUEUsCisgIFRJX1BJRF9UWVBFLAorICBUSV9QVFJESUZGX1RZUEUsCisgIFRJX1ZBX0xJU1RfVFlQRSwKKyAgVElfVkFfTElTVF9HUFJfQ09VTlRFUl9GSUVMRCwKKyAgVElfVkFfTElTVF9GUFJfQ09VTlRFUl9GSUVMRCwKKyAgVElfQk9PTEVBTl9UWVBFLAorICBUSV9GSUxFUFRSX1RZUEUsCisKKyAgVElfREZMT0FUMzJfVFlQRSwKKyAgVElfREZMT0FUNjRfVFlQRSwKKyAgVElfREZMT0FUMTI4X1RZUEUsCisgIFRJX0RGTE9BVDMyX1BUUl9UWVBFLAorICBUSV9ERkxPQVQ2NF9QVFJfVFlQRSwKKyAgVElfREZMT0FUMTI4X1BUUl9UWVBFLAorCisgIFRJX1ZPSURfTElTVF9OT0RFLAorCisgIFRJX01BSU5fSURFTlRJRklFUiwKKworICBUSV9TQVRfU0ZSQUNUX1RZUEUsCisgIFRJX1NBVF9GUkFDVF9UWVBFLAorICBUSV9TQVRfTEZSQUNUX1RZUEUsCisgIFRJX1NBVF9MTEZSQUNUX1RZUEUsCisgIFRJX1NBVF9VU0ZSQUNUX1RZUEUsCisgIFRJX1NBVF9VRlJBQ1RfVFlQRSwKKyAgVElfU0FUX1VMRlJBQ1RfVFlQRSwKKyAgVElfU0FUX1VMTEZSQUNUX1RZUEUsCisgIFRJX1NGUkFDVF9UWVBFLAorICBUSV9GUkFDVF9UWVBFLAorICBUSV9MRlJBQ1RfVFlQRSwKKyAgVElfTExGUkFDVF9UWVBFLAorICBUSV9VU0ZSQUNUX1RZUEUsCisgIFRJX1VGUkFDVF9UWVBFLAorICBUSV9VTEZSQUNUX1RZUEUsCisgIFRJX1VMTEZSQUNUX1RZUEUsCisgIFRJX1NBVF9TQUNDVU1fVFlQRSwKKyAgVElfU0FUX0FDQ1VNX1RZUEUsCisgIFRJX1NBVF9MQUNDVU1fVFlQRSwKKyAgVElfU0FUX0xMQUNDVU1fVFlQRSwKKyAgVElfU0FUX1VTQUNDVU1fVFlQRSwKKyAgVElfU0FUX1VBQ0NVTV9UWVBFLAorICBUSV9TQVRfVUxBQ0NVTV9UWVBFLAorICBUSV9TQVRfVUxMQUNDVU1fVFlQRSwKKyAgVElfU0FDQ1VNX1RZUEUsCisgIFRJX0FDQ1VNX1RZUEUsCisgIFRJX0xBQ0NVTV9UWVBFLAorICBUSV9MTEFDQ1VNX1RZUEUsCisgIFRJX1VTQUNDVU1fVFlQRSwKKyAgVElfVUFDQ1VNX1RZUEUsCisgIFRJX1VMQUNDVU1fVFlQRSwKKyAgVElfVUxMQUNDVU1fVFlQRSwKKyAgVElfUVFfVFlQRSwKKyAgVElfSFFfVFlQRSwKKyAgVElfU1FfVFlQRSwKKyAgVElfRFFfVFlQRSwKKyAgVElfVFFfVFlQRSwKKyAgVElfVVFRX1RZUEUsCisgIFRJX1VIUV9UWVBFLAorICBUSV9VU1FfVFlQRSwKKyAgVElfVURRX1RZUEUsCisgIFRJX1VUUV9UWVBFLAorICBUSV9TQVRfUVFfVFlQRSwKKyAgVElfU0FUX0hRX1RZUEUsCisgIFRJX1NBVF9TUV9UWVBFLAorICBUSV9TQVRfRFFfVFlQRSwKKyAgVElfU0FUX1RRX1RZUEUsCisgIFRJX1NBVF9VUVFfVFlQRSwKKyAgVElfU0FUX1VIUV9UWVBFLAorICBUSV9TQVRfVVNRX1RZUEUsCisgIFRJX1NBVF9VRFFfVFlQRSwKKyAgVElfU0FUX1VUUV9UWVBFLAorICBUSV9IQV9UWVBFLAorICBUSV9TQV9UWVBFLAorICBUSV9EQV9UWVBFLAorICBUSV9UQV9UWVBFLAorICBUSV9VSEFfVFlQRSwKKyAgVElfVVNBX1RZUEUsCisgIFRJX1VEQV9UWVBFLAorICBUSV9VVEFfVFlQRSwKKyAgVElfU0FUX0hBX1RZUEUsCisgIFRJX1NBVF9TQV9UWVBFLAorICBUSV9TQVRfREFfVFlQRSwKKyAgVElfU0FUX1RBX1RZUEUsCisgIFRJX1NBVF9VSEFfVFlQRSwKKyAgVElfU0FUX1VTQV9UWVBFLAorICBUSV9TQVRfVURBX1RZUEUsCisgIFRJX1NBVF9VVEFfVFlQRSwKKworICBUSV9PUFRJTUlaQVRJT05fREVGQVVMVCwKKyAgVElfT1BUSU1JWkFUSU9OX0NVUlJFTlQsCisgIFRJX1RBUkdFVF9PUFRJT05fREVGQVVMVCwKKyAgVElfVEFSR0VUX09QVElPTl9DVVJSRU5ULAorICBUSV9DVVJSRU5UX1RBUkdFVF9QUkFHTUEsCisgIFRJX0NVUlJFTlRfT1BUSU1JWkVfUFJBR01BLAorCisgIFRJX01BWAorfTsKKworZXh0ZXJuIEdUWSgoKSkgdHJlZSBnbG9iYWxfdHJlZXNbVElfTUFYXTsKKworI2RlZmluZSBlcnJvcl9tYXJrX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS10KKworI2RlZmluZSBpbnRRSV90eXBlX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfSU5UUUlfVFlQRV0KKyNkZWZpbmUgaW50SElfdHlwZV9ub2RlCQkJZ2xvYmFsX3RyZWVzW1RJX0lOVEhJX1RZUEVdCisjZGVmaW5lIGludFNJX3R5cGVfbm9kZQkJCWdsb2JhbF90cmVlc1tUSV9JTlRTSV9UWVBFXQorI2RlZmluZSBpbnRESV90eXBlX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfSU5URElfVFlQRV0KKyNkZWZpbmUgaW50VElfdHlwZV9ub2RlCQkJZ2xvYmFsX3RyZWVzW1RJX0lOVFRJX1RZUEVdCisKKyNkZWZpbmUgdW5zaWduZWRfaW50UUlfdHlwZV9ub2RlCWdsb2JhbF90cmVlc1tUSV9VSU5UUUlfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfaW50SElfdHlwZV9ub2RlCWdsb2JhbF90cmVlc1tUSV9VSU5USElfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfaW50U0lfdHlwZV9ub2RlCWdsb2JhbF90cmVlc1tUSV9VSU5UU0lfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfaW50RElfdHlwZV9ub2RlCWdsb2JhbF90cmVlc1tUSV9VSU5URElfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfaW50VElfdHlwZV9ub2RlCWdsb2JhbF90cmVlc1tUSV9VSU5UVElfVFlQRV0KKworI2RlZmluZSB1aW50MTZfdHlwZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfVUlOVDE2X1RZUEVdCisjZGVmaW5lIHVpbnQzMl90eXBlX25vZGUJCWdsb2JhbF90cmVlc1tUSV9VSU5UMzJfVFlQRV0KKyNkZWZpbmUgdWludDY0X3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX1VJTlQ2NF9UWVBFXQorCisjZGVmaW5lIGludGVnZXJfemVyb19ub2RlCQlnbG9iYWxfdHJlZXNbVElfSU5URUdFUl9aRVJPXQorI2RlZmluZSBpbnRlZ2VyX29uZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfSU5URUdFUl9PTkVdCisjZGVmaW5lIGludGVnZXJfdGhyZWVfbm9kZSAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX0lOVEVHRVJfVEhSRUVdCisjZGVmaW5lIGludGVnZXJfbWludXNfb25lX25vZGUJCWdsb2JhbF90cmVlc1tUSV9JTlRFR0VSX01JTlVTX09ORV0KKyNkZWZpbmUgc2l6ZV96ZXJvX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfU0laRV9aRVJPXQorI2RlZmluZSBzaXplX29uZV9ub2RlCQkJZ2xvYmFsX3RyZWVzW1RJX1NJWkVfT05FXQorI2RlZmluZSBiaXRzaXplX3plcm9fbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0JJVFNJWkVfWkVST10KKyNkZWZpbmUgYml0c2l6ZV9vbmVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0JJVFNJWkVfT05FXQorI2RlZmluZSBiaXRzaXplX3VuaXRfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0JJVFNJWkVfVU5JVF0KKworLyogQmFzZSBhY2Nlc3Mgbm9kZXMuICAqLworI2RlZmluZSBhY2Nlc3NfcHVibGljX25vZGUJCWdsb2JhbF90cmVlc1tUSV9QVUJMSUNdCisjZGVmaW5lIGFjY2Vzc19wcm90ZWN0ZWRfbm9kZQkgICAgICAgIGdsb2JhbF90cmVlc1tUSV9QUk9URUNURURdCisjZGVmaW5lIGFjY2Vzc19wcml2YXRlX25vZGUJCWdsb2JhbF90cmVlc1tUSV9QUklWQVRFXQorCisjZGVmaW5lIG51bGxfcG9pbnRlcl9ub2RlCQlnbG9iYWxfdHJlZXNbVElfTlVMTF9QT0lOVEVSXQorCisjZGVmaW5lIGZsb2F0X3R5cGVfbm9kZQkJCWdsb2JhbF90cmVlc1tUSV9GTE9BVF9UWVBFXQorI2RlZmluZSBkb3VibGVfdHlwZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfRE9VQkxFX1RZUEVdCisjZGVmaW5lIGxvbmdfZG91YmxlX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0xPTkdfRE9VQkxFX1RZUEVdCisKKyNkZWZpbmUgZmxvYXRfcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0ZMT0FUX1BUUl9UWVBFXQorI2RlZmluZSBkb3VibGVfcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0RPVUJMRV9QVFJfVFlQRV0KKyNkZWZpbmUgbG9uZ19kb3VibGVfcHRyX3R5cGVfbm9kZQlnbG9iYWxfdHJlZXNbVElfTE9OR19ET1VCTEVfUFRSX1RZUEVdCisjZGVmaW5lIGludGVnZXJfcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0lOVEVHRVJfUFRSX1RZUEVdCisKKyNkZWZpbmUgY29tcGxleF9pbnRlZ2VyX3R5cGVfbm9kZQlnbG9iYWxfdHJlZXNbVElfQ09NUExFWF9JTlRFR0VSX1RZUEVdCisjZGVmaW5lIGNvbXBsZXhfZmxvYXRfdHlwZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfQ09NUExFWF9GTE9BVF9UWVBFXQorI2RlZmluZSBjb21wbGV4X2RvdWJsZV90eXBlX25vZGUJZ2xvYmFsX3RyZWVzW1RJX0NPTVBMRVhfRE9VQkxFX1RZUEVdCisjZGVmaW5lIGNvbXBsZXhfbG9uZ19kb3VibGVfdHlwZV9ub2RlCWdsb2JhbF90cmVlc1tUSV9DT01QTEVYX0xPTkdfRE9VQkxFX1RZUEVdCisKKyNkZWZpbmUgdm9pZF90eXBlX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfVk9JRF9UWVBFXQorLyogVGhlIEMgdHlwZSBgdm9pZCAqJy4gICovCisjZGVmaW5lIHB0cl90eXBlX25vZGUJCQlnbG9iYWxfdHJlZXNbVElfUFRSX1RZUEVdCisvKiBUaGUgQyB0eXBlIGBjb25zdCB2b2lkIConLiAgKi8KKyNkZWZpbmUgY29uc3RfcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0NPTlNUX1BUUl9UWVBFXQorLyogVGhlIEMgdHlwZSBgc2l6ZV90Jy4gICovCisjZGVmaW5lIHNpemVfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NJWkVfVFlQRV0KKyNkZWZpbmUgcGlkX3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfUElEX1RZUEVdCisjZGVmaW5lIHB0cmRpZmZfdHlwZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfUFRSRElGRl9UWVBFXQorI2RlZmluZSB2YV9saXN0X3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX1ZBX0xJU1RfVFlQRV0KKyNkZWZpbmUgdmFfbGlzdF9ncHJfY291bnRlcl9maWVsZAlnbG9iYWxfdHJlZXNbVElfVkFfTElTVF9HUFJfQ09VTlRFUl9GSUVMRF0KKyNkZWZpbmUgdmFfbGlzdF9mcHJfY291bnRlcl9maWVsZAlnbG9iYWxfdHJlZXNbVElfVkFfTElTVF9GUFJfQ09VTlRFUl9GSUVMRF0KKy8qIFRoZSBDIHR5cGUgYEZJTEUgKicuICAqLworI2RlZmluZSBmaWxlcHRyX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0ZJTEVQVFJfVFlQRV0KKworI2RlZmluZSBib29sZWFuX3R5cGVfbm9kZQkJZ2xvYmFsX3RyZWVzW1RJX0JPT0xFQU5fVFlQRV0KKyNkZWZpbmUgYm9vbGVhbl9mYWxzZV9ub2RlCQlnbG9iYWxfdHJlZXNbVElfQk9PTEVBTl9GQUxTRV0KKyNkZWZpbmUgYm9vbGVhbl90cnVlX25vZGUJCWdsb2JhbF90cmVlc1tUSV9CT09MRUFOX1RSVUVdCisKKy8qIFRoZSBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IHR5cGVzLiAqLworI2RlZmluZSBkZmxvYXQzMl90eXBlX25vZGUgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9ERkxPQVQzMl9UWVBFXQorI2RlZmluZSBkZmxvYXQ2NF90eXBlX25vZGUgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9ERkxPQVQ2NF9UWVBFXQorI2RlZmluZSBkZmxvYXQxMjhfdHlwZV9ub2RlICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9ERkxPQVQxMjhfVFlQRV0KKyNkZWZpbmUgZGZsb2F0MzJfcHRyX3R5cGVfbm9kZSAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfREZMT0FUMzJfUFRSX1RZUEVdCisjZGVmaW5lIGRmbG9hdDY0X3B0cl90eXBlX25vZGUgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX0RGTE9BVDY0X1BUUl9UWVBFXQorI2RlZmluZSBkZmxvYXQxMjhfcHRyX3R5cGVfbm9kZSAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9ERkxPQVQxMjhfUFRSX1RZUEVdCisKKy8qIFRoZSBmaXhlZC1wb2ludCB0eXBlcy4gICovCisjZGVmaW5lIHNhdF9zaG9ydF9mcmFjdF90eXBlX25vZGUgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9TRlJBQ1RfVFlQRV0KKyNkZWZpbmUgc2F0X2ZyYWN0X3R5cGVfbm9kZSAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX0ZSQUNUX1RZUEVdCisjZGVmaW5lIHNhdF9sb25nX2ZyYWN0X3R5cGVfbm9kZSAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9MRlJBQ1RfVFlQRV0KKyNkZWZpbmUgc2F0X2xvbmdfbG9uZ19mcmFjdF90eXBlX25vZGUgICBnbG9iYWxfdHJlZXNbVElfU0FUX0xMRlJBQ1RfVFlQRV0KKyNkZWZpbmUgc2F0X3Vuc2lnbmVkX3Nob3J0X2ZyYWN0X3R5cGVfbm9kZSBcCisJCQkJCWdsb2JhbF90cmVlc1tUSV9TQVRfVVNGUkFDVF9UWVBFXQorI2RlZmluZSBzYXRfdW5zaWduZWRfZnJhY3RfdHlwZV9ub2RlICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfVUZSQUNUX1RZUEVdCisjZGVmaW5lIHNhdF91bnNpZ25lZF9sb25nX2ZyYWN0X3R5cGVfbm9kZSBcCisJCQkJCWdsb2JhbF90cmVlc1tUSV9TQVRfVUxGUkFDVF9UWVBFXQorI2RlZmluZSBzYXRfdW5zaWduZWRfbG9uZ19sb25nX2ZyYWN0X3R5cGVfbm9kZSBcCisJCQkJCWdsb2JhbF90cmVlc1tUSV9TQVRfVUxMRlJBQ1RfVFlQRV0KKyNkZWZpbmUgc2hvcnRfZnJhY3RfdHlwZV9ub2RlICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0ZSQUNUX1RZUEVdCisjZGVmaW5lIGZyYWN0X3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX0ZSQUNUX1RZUEVdCisjZGVmaW5lIGxvbmdfZnJhY3RfdHlwZV9ub2RlICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX0xGUkFDVF9UWVBFXQorI2RlZmluZSBsb25nX2xvbmdfZnJhY3RfdHlwZV9ub2RlICAgICAgIGdsb2JhbF90cmVlc1tUSV9MTEZSQUNUX1RZUEVdCisjZGVmaW5lIHVuc2lnbmVkX3Nob3J0X2ZyYWN0X3R5cGVfbm9kZSAgZ2xvYmFsX3RyZWVzW1RJX1VTRlJBQ1RfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfZnJhY3RfdHlwZV9ub2RlICAgICAgICBnbG9iYWxfdHJlZXNbVElfVUZSQUNUX1RZUEVdCisjZGVmaW5lIHVuc2lnbmVkX2xvbmdfZnJhY3RfdHlwZV9ub2RlICAgZ2xvYmFsX3RyZWVzW1RJX1VMRlJBQ1RfVFlQRV0KKyNkZWZpbmUgdW5zaWduZWRfbG9uZ19sb25nX2ZyYWN0X3R5cGVfbm9kZSBcCisJCQkJCWdsb2JhbF90cmVlc1tUSV9VTExGUkFDVF9UWVBFXQorI2RlZmluZSBzYXRfc2hvcnRfYWNjdW1fdHlwZV9ub2RlICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfU0FDQ1VNX1RZUEVdCisjZGVmaW5lIHNhdF9hY2N1bV90eXBlX25vZGUgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9BQ0NVTV9UWVBFXQorI2RlZmluZSBzYXRfbG9uZ19hY2N1bV90eXBlX25vZGUgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfTEFDQ1VNX1RZUEVdCisjZGVmaW5lIHNhdF9sb25nX2xvbmdfYWNjdW1fdHlwZV9ub2RlICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9MTEFDQ1VNX1RZUEVdCisjZGVmaW5lIHNhdF91bnNpZ25lZF9zaG9ydF9hY2N1bV90eXBlX25vZGUgXAorCQkJCQlnbG9iYWxfdHJlZXNbVElfU0FUX1VTQUNDVU1fVFlQRV0KKyNkZWZpbmUgc2F0X3Vuc2lnbmVkX2FjY3VtX3R5cGVfbm9kZSAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1VBQ0NVTV9UWVBFXQorI2RlZmluZSBzYXRfdW5zaWduZWRfbG9uZ19hY2N1bV90eXBlX25vZGUgXAorCQkJCQlnbG9iYWxfdHJlZXNbVElfU0FUX1VMQUNDVU1fVFlQRV0KKyNkZWZpbmUgc2F0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hY2N1bV90eXBlX25vZGUgXAorCQkJCQlnbG9iYWxfdHJlZXNbVElfU0FUX1VMTEFDQ1VNX1RZUEVdCisjZGVmaW5lIHNob3J0X2FjY3VtX3R5cGVfbm9kZSAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBQ0NVTV9UWVBFXQorI2RlZmluZSBhY2N1bV90eXBlX25vZGUgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9BQ0NVTV9UWVBFXQorI2RlZmluZSBsb25nX2FjY3VtX3R5cGVfbm9kZSAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9MQUNDVU1fVFlQRV0KKyNkZWZpbmUgbG9uZ19sb25nX2FjY3VtX3R5cGVfbm9kZSAgICAgICBnbG9iYWxfdHJlZXNbVElfTExBQ0NVTV9UWVBFXQorI2RlZmluZSB1bnNpZ25lZF9zaG9ydF9hY2N1bV90eXBlX25vZGUgIGdsb2JhbF90cmVlc1tUSV9VU0FDQ1VNX1RZUEVdCisjZGVmaW5lIHVuc2lnbmVkX2FjY3VtX3R5cGVfbm9kZSAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1VBQ0NVTV9UWVBFXQorI2RlZmluZSB1bnNpZ25lZF9sb25nX2FjY3VtX3R5cGVfbm9kZSAgIGdsb2JhbF90cmVlc1tUSV9VTEFDQ1VNX1RZUEVdCisjZGVmaW5lIHVuc2lnbmVkX2xvbmdfbG9uZ19hY2N1bV90eXBlX25vZGUgXAorCQkJCQlnbG9iYWxfdHJlZXNbVElfVUxMQUNDVU1fVFlQRV0KKyNkZWZpbmUgcXFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfUVFfVFlQRV0KKyNkZWZpbmUgaHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfSFFfVFlQRV0KKyNkZWZpbmUgc3FfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU1FfVFlQRV0KKyNkZWZpbmUgZHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfRFFfVFlQRV0KKyNkZWZpbmUgdHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVFFfVFlQRV0KKyNkZWZpbmUgdXFxX3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVVFRX1RZUEVdCisjZGVmaW5lIHVocV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1VIUV9UWVBFXQorI2RlZmluZSB1c3FfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9VU1FfVFlQRV0KKyNkZWZpbmUgdWRxX3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVURRX1RZUEVdCisjZGVmaW5lIHV0cV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1VUUV9UWVBFXQorI2RlZmluZSBzYXRfcXFfdHlwZV9ub2RlICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfUVFfVFlQRV0KKyNkZWZpbmUgc2F0X2hxX3R5cGVfbm9kZSAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX0hRX1RZUEVdCisjZGVmaW5lIHNhdF9zcV90eXBlX25vZGUgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9TUV9UWVBFXQorI2RlZmluZSBzYXRfZHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfRFFfVFlQRV0KKyNkZWZpbmUgc2F0X3RxX3R5cGVfbm9kZSAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1RRX1RZUEVdCisjZGVmaW5lIHNhdF91cXFfdHlwZV9ub2RlICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9VUVFfVFlQRV0KKyNkZWZpbmUgc2F0X3VocV90eXBlX25vZGUgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1VIUV9UWVBFXQorI2RlZmluZSBzYXRfdXNxX3R5cGVfbm9kZSAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfVVNRX1RZUEVdCisjZGVmaW5lIHNhdF91ZHFfdHlwZV9ub2RlICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9VRFFfVFlQRV0KKyNkZWZpbmUgc2F0X3V0cV90eXBlX25vZGUgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1VUUV9UWVBFXQorI2RlZmluZSBoYV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9IQV9UWVBFXQorI2RlZmluZSBzYV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQV9UWVBFXQorI2RlZmluZSBkYV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9EQV9UWVBFXQorI2RlZmluZSB0YV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9UQV9UWVBFXQorI2RlZmluZSB1aGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9VSEFfVFlQRV0KKyNkZWZpbmUgdXNhX3R5cGVfbm9kZSAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVVNBX1RZUEVdCisjZGVmaW5lIHVkYV90eXBlX25vZGUgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1VEQV9UWVBFXQorI2RlZmluZSB1dGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9VVEFfVFlQRV0KKyNkZWZpbmUgc2F0X2hhX3R5cGVfbm9kZSAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX0hBX1RZUEVdCisjZGVmaW5lIHNhdF9zYV90eXBlX25vZGUgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9TQV9UWVBFXQorI2RlZmluZSBzYXRfZGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfREFfVFlQRV0KKyNkZWZpbmUgc2F0X3RhX3R5cGVfbm9kZSAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1RBX1RZUEVdCisjZGVmaW5lIHNhdF91aGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9VSEFfVFlQRV0KKyNkZWZpbmUgc2F0X3VzYV90eXBlX25vZGUgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfU0FUX1VTQV9UWVBFXQorI2RlZmluZSBzYXRfdWRhX3R5cGVfbm9kZSAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9TQVRfVURBX1RZUEVdCisjZGVmaW5lIHNhdF91dGFfdHlwZV9ub2RlICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX1NBVF9VVEFfVFlQRV0KKworLyogVGhlIG5vZGUgdGhhdCBzaG91bGQgYmUgcGxhY2VkIGF0IHRoZSBlbmQgb2YgYSBwYXJhbWV0ZXIgbGlzdCB0bworICAgaW5kaWNhdGUgdGhhdCB0aGUgZnVuY3Rpb24gZG9lcyBub3QgdGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZgorICAgYXJndW1lbnRzLiAgVGhlIFRSRUVfVkFMVUUgd2lsbCBiZSB2b2lkX3R5cGVfbm9kZSBhbmQgdGhlcmUgd2lsbCBiZQorICAgbm8gVFJFRV9DSEFJTi4gIExhbmd1YWdlLWluZGVwZW5kZW50IGNvZGUgc2hvdWxkIG5vdCBhc3N1bWUKKyAgIGFueXRoaW5nIGVsc2UgYWJvdXQgdGhpcyBub2RlLiAgKi8KKyNkZWZpbmUgdm9pZF9saXN0X25vZGUgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfVk9JRF9MSVNUX05PREVdCisKKyNkZWZpbmUgbWFpbl9pZGVudGlmaWVyX25vZGUJCWdsb2JhbF90cmVlc1tUSV9NQUlOX0lERU5USUZJRVJdCisjZGVmaW5lIE1BSU5fTkFNRV9QKE5PREUpIFwKKyAgKElERU5USUZJRVJfTk9ERV9DSEVDSyAoTk9ERSkgPT0gbWFpbl9pZGVudGlmaWVyX25vZGUpCisKKy8qIE9wdGltaXphdGlvbiBvcHRpb25zIChPUFRJTUlaQVRJT05fTk9ERSkgdG8gdXNlIGZvciBkZWZhdWx0IGFuZCBjdXJyZW50CisgICBmdW5jdGlvbnMuICAqLworI2RlZmluZSBvcHRpbWl6YXRpb25fZGVmYXVsdF9ub2RlCWdsb2JhbF90cmVlc1tUSV9PUFRJTUlaQVRJT05fREVGQVVMVF0KKyNkZWZpbmUgb3B0aW1pemF0aW9uX2N1cnJlbnRfbm9kZQlnbG9iYWxfdHJlZXNbVElfT1BUSU1JWkFUSU9OX0NVUlJFTlRdCisKKy8qIERlZmF1bHQvY3VycmVudCB0YXJnZXQgb3B0aW9ucyAoVEFSR0VUX09QVElPTl9OT0RFKS4gICovCisjZGVmaW5lIHRhcmdldF9vcHRpb25fZGVmYXVsdF9ub2RlCWdsb2JhbF90cmVlc1tUSV9UQVJHRVRfT1BUSU9OX0RFRkFVTFRdCisjZGVmaW5lIHRhcmdldF9vcHRpb25fY3VycmVudF9ub2RlCWdsb2JhbF90cmVlc1tUSV9UQVJHRVRfT1BUSU9OX0NVUlJFTlRdCisKKy8qIERlZmF1bHQgdHJlZSBsaXN0IG9wdGlvbigpLCBvcHRpbWl6ZSgpIHByYWdtYXMgdG8gYmUgbGlua2VkIGludG8gdGhlCisgICBhdHRyaWJ1dGUgbGlzdC4gICovCisjZGVmaW5lIGN1cnJlbnRfdGFyZ2V0X3ByYWdtYQkJZ2xvYmFsX3RyZWVzW1RJX0NVUlJFTlRfVEFSR0VUX1BSQUdNQV0KKyNkZWZpbmUgY3VycmVudF9vcHRpbWl6ZV9wcmFnbWEJCWdsb2JhbF90cmVlc1tUSV9DVVJSRU5UX09QVElNSVpFX1BSQUdNQV0KKworLyogQW4gZW51bWVyYXRpb24gb2YgdGhlIHN0YW5kYXJkIEMgaW50ZWdlciB0eXBlcy4gIFRoZXNlIG11c3QgYmUKKyAgIG9yZGVyZWQgc28gdGhhdCBzaG9ydGVyIHR5cGVzIGFwcGVhciBiZWZvcmUgbG9uZ2VyIG9uZXMsIGFuZCBzbworICAgdGhhdCBzaWduZWQgdHlwZXMgYXBwZWFyIGJlZm9yZSB1bnNpZ25lZCBvbmVzLCBmb3IgdGhlIGNvcnJlY3QKKyAgIGZ1bmN0aW9uaW5nIG9mIGludGVycHJldF9pbnRlZ2VyKCkgaW4gYy1sZXguYy4gICovCitlbnVtIGludGVnZXJfdHlwZV9raW5kCit7CisgIGl0a19jaGFyLAorICBpdGtfc2lnbmVkX2NoYXIsCisgIGl0a191bnNpZ25lZF9jaGFyLAorICBpdGtfc2hvcnQsCisgIGl0a191bnNpZ25lZF9zaG9ydCwKKyAgaXRrX2ludCwKKyAgaXRrX3Vuc2lnbmVkX2ludCwKKyAgaXRrX2xvbmcsCisgIGl0a191bnNpZ25lZF9sb25nLAorICBpdGtfbG9uZ19sb25nLAorICBpdGtfdW5zaWduZWRfbG9uZ19sb25nLAorICBpdGtfaW50MTI4LAorICBpdGtfdW5zaWduZWRfaW50MTI4LAorICBpdGtfbm9uZQorfTsKKwordHlwZWRlZiBlbnVtIGludGVnZXJfdHlwZV9raW5kIGludGVnZXJfdHlwZV9raW5kOworCisvKiBUaGUgc3RhbmRhcmQgQyBpbnRlZ2VyIHR5cGVzLiAgVXNlIGludGVnZXJfdHlwZV9raW5kIHRvIGluZGV4IGludG8KKyAgIHRoaXMgYXJyYXkuICAqLworZXh0ZXJuIEdUWSgoKSkgdHJlZSBpbnRlZ2VyX3R5cGVzW2l0a19ub25lXTsKKworI2RlZmluZSBjaGFyX3R5cGVfbm9kZQkJCWludGVnZXJfdHlwZXNbaXRrX2NoYXJdCisjZGVmaW5lIHNpZ25lZF9jaGFyX3R5cGVfbm9kZQkJaW50ZWdlcl90eXBlc1tpdGtfc2lnbmVkX2NoYXJdCisjZGVmaW5lIHVuc2lnbmVkX2NoYXJfdHlwZV9ub2RlCQlpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9jaGFyXQorI2RlZmluZSBzaG9ydF9pbnRlZ2VyX3R5cGVfbm9kZQkJaW50ZWdlcl90eXBlc1tpdGtfc2hvcnRdCisjZGVmaW5lIHNob3J0X3Vuc2lnbmVkX3R5cGVfbm9kZQlpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9zaG9ydF0KKyNkZWZpbmUgaW50ZWdlcl90eXBlX25vZGUJCWludGVnZXJfdHlwZXNbaXRrX2ludF0KKyNkZWZpbmUgdW5zaWduZWRfdHlwZV9ub2RlCQlpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9pbnRdCisjZGVmaW5lIGxvbmdfaW50ZWdlcl90eXBlX25vZGUJCWludGVnZXJfdHlwZXNbaXRrX2xvbmddCisjZGVmaW5lIGxvbmdfdW5zaWduZWRfdHlwZV9ub2RlCQlpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9sb25nXQorI2RlZmluZSBsb25nX2xvbmdfaW50ZWdlcl90eXBlX25vZGUJaW50ZWdlcl90eXBlc1tpdGtfbG9uZ19sb25nXQorI2RlZmluZSBsb25nX2xvbmdfdW5zaWduZWRfdHlwZV9ub2RlCWludGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVkX2xvbmdfbG9uZ10KKyNkZWZpbmUgaW50MTI4X2ludGVnZXJfdHlwZV9ub2RlCWludGVnZXJfdHlwZXNbaXRrX2ludDEyOF0KKyNkZWZpbmUgaW50MTI4X3Vuc2lnbmVkX3R5cGVfbm9kZQlpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9pbnQxMjhdCisMCisvKiBBIHBvaW50ZXItdG8tZnVuY3Rpb24gbWVtYmVyIHR5cGUgbG9va3MgbGlrZToKKworICAgICBzdHJ1Y3QgeworICAgICAgIF9fUCBfX3BmbjsKKyAgICAgICBwdHJkaWZmX3QgX19kZWx0YTsKKyAgICAgfTsKKworICAgSWYgX19wZm4gaXMgTlVMTCwgaXQgaXMgYSBOVUxMIHBvaW50ZXItdG8tbWVtYmVyLWZ1bmN0aW9uLgorCisgICAoQmVjYXVzZSB0aGUgdnRhYmxlIGlzIGFsd2F5cyB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIG9iamVjdCwgd2UKKyAgIGRvbid0IG5lZWQgaXRzIG9mZnNldC4pICBJZiB0aGUgZnVuY3Rpb24gaXMgdmlydHVhbCwgdGhlbiBQRk4gaXMKKyAgIG9uZSBwbHVzIHR3aWNlIHRoZSBpbmRleCBpbnRvIHRoZSB2dGFibGU7IG90aGVyd2lzZSwgaXQgaXMganVzdCBhCisgICBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbi4KKworICAgVW5mb3J0dW5hdGVseSwgdXNpbmcgdGhlIGxvd2VzdCBiaXQgb2YgUEZOIGRvZXNuJ3Qgd29yayBpbgorICAgYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IGltcG9zZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9uIGZ1bmN0aW9uCisgICBhZGRyZXNzZXMsIG9yIHRoYXQgdXNlIHRoZSBsb3dlc3QgYml0IHRvIHRlbGwgb25lIElTQSBmcm9tIGFub3RoZXIsCisgICBmb3IgZXhhbXBsZS4gIEZvciBzdWNoIGFyY2hpdGVjdHVyZXMsIHdlIHVzZSB0aGUgbG93ZXN0IGJpdCBvZgorICAgREVMVEEgaW5zdGVhZCBvZiB0aGUgbG93ZXN0IGJpdCBvZiB0aGUgUEZOLCBhbmQgREVMVEEgd2lsbCBiZQorICAgbXVsdGlwbGllZCBieSAyLiAgKi8KKworZW51bSBwdHJtZW1mdW5jX3ZiaXRfd2hlcmVfdAoreworICBwdHJtZW1mdW5jX3ZiaXRfaW5fcGZuLAorICBwdHJtZW1mdW5jX3ZiaXRfaW5fZGVsdGEKK307CisMCisjZGVmaW5lIE5VTExfVFJFRSAodHJlZSkgTlVMTAorCisvKiBUcnVlIGlmIE5PREUgaXMgYW4gZXJyb25lb3VzIGV4cHJlc3Npb24uICAqLworCisjZGVmaW5lIGVycm9yX29wZXJhbmRfcChOT0RFKQkJCQkJXAorICAoKE5PREUpID09IGVycm9yX21hcmtfbm9kZQkJCQkJXAorICAgfHwgKChOT0RFKSAmJiBUUkVFX1RZUEUgKChOT0RFKSkgPT0gZXJyb3JfbWFya19ub2RlKSkKKworZXh0ZXJuIHRyZWUgZGVjbF9hc3NlbWJsZXJfbmFtZSAodHJlZSk7CitleHRlcm4gYm9vbCBkZWNsX2Fzc2VtYmxlcl9uYW1lX2VxdWFsICh0cmVlIGRlY2wsIGNvbnN0X3RyZWUgYXNtbmFtZSk7CitleHRlcm4gaGFzaHZhbF90IGRlY2xfYXNzZW1ibGVyX25hbWVfaGFzaCAoY29uc3RfdHJlZSBhc21uYW1lKTsKKworLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9jY3VwaWVkIGJ5ICdub2RlJy4gIFRoaXMgcm91dGluZSBvbmx5CisgICBsb29rcyBhdCBUUkVFX0NPREUgYW5kLCBpZiB0aGUgY29kZSBpcyBUUkVFX1ZFQywgVFJFRV9WRUNfTEVOR1RILiAgKi8KKworZXh0ZXJuIHNpemVfdCB0cmVlX3NpemUgKGNvbnN0X3RyZWUpOworCisvKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2NjdXBpZWQgYnkgYSB0cmVlIHdpdGggY29kZSBDT0RFLiAgVGhpcworICAgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgZm9yIFRSRUVfVkVDIGNvZGVzLCB3aGljaCBhcmUgb2YgdmFyaWFibGUKKyAgIGxlbmd0aC4gICovCitleHRlcm4gc2l6ZV90IHRyZWVfY29kZV9zaXplIChlbnVtIHRyZWVfY29kZSk7CisKKy8qIEFsbG9jYXRlIGFuZCByZXR1cm4gYSBuZXcgVUlEIGZyb20gdGhlIERFQ0xfVUlEIG5hbWVzcGFjZS4gICovCitleHRlcm4gaW50IGFsbG9jYXRlX2RlY2xfdWlkICh2b2lkKTsKKworLyogTG93ZXN0IGxldmVsIHByaW1pdGl2ZSBmb3IgYWxsb2NhdGluZyBhIG5vZGUuCisgICBUaGUgVFJFRV9DT0RFIGlzIHRoZSBvbmx5IGFyZ3VtZW50LiAgQ29udGVudHMgYXJlIGluaXRpYWxpemVkCisgICB0byB6ZXJvIGV4Y2VwdCBmb3IgYSBmZXcgb2YgdGhlIGNvbW1vbiBmaWVsZHMuICAqLworCitleHRlcm4gdHJlZSBtYWtlX25vZGVfc3RhdCAoZW51bSB0cmVlX2NvZGUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIG1ha2Vfbm9kZSh0KSBtYWtlX25vZGVfc3RhdCAodCBNRU1fU1RBVF9JTkZPKQorCisvKiBNYWtlIGEgY29weSBvZiBhIG5vZGUsIHdpdGggYWxsIHRoZSBzYW1lIGNvbnRlbnRzLiAgKi8KKworZXh0ZXJuIHRyZWUgY29weV9ub2RlX3N0YXQgKHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGNvcHlfbm9kZSh0KSBjb3B5X25vZGVfc3RhdCAodCBNRU1fU1RBVF9JTkZPKQorCisvKiBNYWtlIGEgY29weSBvZiBhIGNoYWluIG9mIFRSRUVfTElTVCBub2Rlcy4gICovCisKK2V4dGVybiB0cmVlIGNvcHlfbGlzdCAodHJlZSk7CisKKy8qIE1ha2UgYSBDQVNFX0xBQkVMX0VYUFIuICAqLworCitleHRlcm4gdHJlZSBidWlsZF9jYXNlX2xhYmVsICh0cmVlLCB0cmVlLCB0cmVlKTsKKworLyogTWFrZSBhIEJJTkZPLiAgKi8KK2V4dGVybiB0cmVlIG1ha2VfdHJlZV9iaW5mb19zdGF0ICh1bnNpZ25lZCBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgbWFrZV90cmVlX2JpbmZvKHQpIG1ha2VfdHJlZV9iaW5mb19zdGF0ICh0IE1FTV9TVEFUX0lORk8pCisKKy8qIE1ha2UgYSBUUkVFX1ZFQy4gICovCisKK2V4dGVybiB0cmVlIG1ha2VfdHJlZV92ZWNfc3RhdCAoaW50IE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBtYWtlX3RyZWVfdmVjKHQpIG1ha2VfdHJlZV92ZWNfc3RhdCAodCBNRU1fU1RBVF9JTkZPKQorCisvKiBSZXR1cm4gdGhlICh1bmlxdWUpIElERU5USUZJRVJfTk9ERSBub2RlIGZvciBhIGdpdmVuIG5hbWUuCisgICBUaGUgbmFtZSBpcyBzdXBwbGllZCBhcyBhIGNoYXIgKi4gICovCisKK2V4dGVybiB0cmVlIGdldF9pZGVudGlmaWVyIChjb25zdCBjaGFyICopOworCisjaWYgR0NDX1ZFUlNJT04gPj0gMzAwMAorI2RlZmluZSBnZXRfaWRlbnRpZmllcihzdHIpIFwKKyAgKF9fYnVpbHRpbl9jb25zdGFudF9wIChzdHIpCQkJCVwKKyAgICA/IGdldF9pZGVudGlmaWVyX3dpdGhfbGVuZ3RoICgoc3RyKSwgc3RybGVuIChzdHIpKSAgXAorICAgIDogZ2V0X2lkZW50aWZpZXIgKHN0cikpCisjZW5kaWYKKworCisvKiBJZGVudGljYWwgdG8gZ2V0X2lkZW50aWZpZXIsIGV4Y2VwdCB0aGF0IHRoZSBsZW5ndGggaXMgYXNzdW1lZAorICAga25vd24uICAqLworCitleHRlcm4gdHJlZSBnZXRfaWRlbnRpZmllcl93aXRoX2xlbmd0aCAoY29uc3QgY2hhciAqLCBzaXplX3QpOworCisvKiBJZiBhbiBpZGVudGlmaWVyIHdpdGggdGhlIG5hbWUgVEVYVCAoYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nKSBoYXMKKyAgIHByZXZpb3VzbHkgYmVlbiByZWZlcnJlZCB0bywgcmV0dXJuIHRoYXQgbm9kZTsgb3RoZXJ3aXNlIHJldHVybgorICAgTlVMTF9UUkVFLiAgKi8KKworZXh0ZXJuIHRyZWUgbWF5YmVfZ2V0X2lkZW50aWZpZXIgKGNvbnN0IGNoYXIgKik7CisKKy8qIENvbnN0cnVjdCB2YXJpb3VzIHR5cGVzIG9mIG5vZGVzLiAgKi8KKworZXh0ZXJuIHRyZWUgYnVpbGRfbnQgKGVudW0gdHJlZV9jb2RlLCAuLi4pOworZXh0ZXJuIHRyZWUgYnVpbGRfbnRfY2FsbF92ZWMgKHRyZWUsIHZlYzx0cmVlLCB2YV9nYz4gKik7CisKK2V4dGVybiB0cmVlIGJ1aWxkMF9zdGF0IChlbnVtIHRyZWVfY29kZSwgdHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgYnVpbGQwKGMsdCkgYnVpbGQwX3N0YXQgKGMsdCBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGQxX3N0YXQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBidWlsZDEoYyx0MSx0MikgYnVpbGQxX3N0YXQgKGMsdDEsdDIgTUVNX1NUQVRfSU5GTykKK2V4dGVybiB0cmVlIGJ1aWxkMl9zdGF0IChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgYnVpbGQyKGMsdDEsdDIsdDMpIGJ1aWxkMl9zdGF0IChjLHQxLHQyLHQzIE1FTV9TVEFUX0lORk8pCitleHRlcm4gdHJlZSBidWlsZDNfc3RhdCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUsIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkMyhjLHQxLHQyLHQzLHQ0KSBidWlsZDNfc3RhdCAoYyx0MSx0Mix0Myx0NCBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGQ0X3N0YXQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkNChjLHQxLHQyLHQzLHQ0LHQ1KSBidWlsZDRfc3RhdCAoYyx0MSx0Mix0Myx0NCx0NSBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGQ1X3N0YXQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkNShjLHQxLHQyLHQzLHQ0LHQ1LHQ2KSBidWlsZDVfc3RhdCAoYyx0MSx0Mix0Myx0NCx0NSx0NiBNRU1fU1RBVF9JTkZPKQorCisvKiBfbG9jIHZlcnNpb25zIG9mIGJ1aWxkWzEtNV0uICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2J1aWxkMV9zdGF0X2xvYyAobG9jYXRpb25fdCBsb2MsIGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSwKKwkJIHRyZWUgYXJnMSBNRU1fU1RBVF9ERUNMKQoreworICB0cmVlIHQgPSBidWlsZDFfc3RhdCAoY29kZSwgdHlwZSwgYXJnMSBQQVNTX01FTV9TVEFUKTsKKyAgaWYgKENBTl9IQVZFX0xPQ0FUSU9OX1AgKHQpKQorICAgIFNFVF9FWFBSX0xPQ0FUSU9OICh0LCBsb2MpOworICByZXR1cm4gdDsKK30KKyNkZWZpbmUgYnVpbGQxX2xvYyhsLGMsdDEsdDIpIGJ1aWxkMV9zdGF0X2xvYyAobCxjLHQxLHQyIE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorYnVpbGQyX3N0YXRfbG9jIChsb2NhdGlvbl90IGxvYywgZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSB0eXBlLCB0cmVlIGFyZzAsCisJCSB0cmVlIGFyZzEgTUVNX1NUQVRfREVDTCkKK3sKKyAgdHJlZSB0ID0gYnVpbGQyX3N0YXQgKGNvZGUsIHR5cGUsIGFyZzAsIGFyZzEgUEFTU19NRU1fU1RBVCk7CisgIGlmIChDQU5fSEFWRV9MT0NBVElPTl9QICh0KSkKKyAgICBTRVRfRVhQUl9MT0NBVElPTiAodCwgbG9jKTsKKyAgcmV0dXJuIHQ7Cit9CisjZGVmaW5lIGJ1aWxkMl9sb2MobCxjLHQxLHQyLHQzKSBidWlsZDJfc3RhdF9sb2MgKGwsYyx0MSx0Mix0MyBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHRyZWUKK2J1aWxkM19zdGF0X2xvYyAobG9jYXRpb25fdCBsb2MsIGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSwgdHJlZSBhcmcwLAorCQkgdHJlZSBhcmcxLCB0cmVlIGFyZzIgTUVNX1NUQVRfREVDTCkKK3sKKyAgdHJlZSB0ID0gYnVpbGQzX3N0YXQgKGNvZGUsIHR5cGUsIGFyZzAsIGFyZzEsIGFyZzIgUEFTU19NRU1fU1RBVCk7CisgIGlmIChDQU5fSEFWRV9MT0NBVElPTl9QICh0KSkKKyAgICBTRVRfRVhQUl9MT0NBVElPTiAodCwgbG9jKTsKKyAgcmV0dXJuIHQ7Cit9CisjZGVmaW5lIGJ1aWxkM19sb2MobCxjLHQxLHQyLHQzLHQ0KSBcCisgIGJ1aWxkM19zdGF0X2xvYyAobCxjLHQxLHQyLHQzLHQ0IE1FTV9TVEFUX0lORk8pCisKK3N0YXRpYyBpbmxpbmUgdHJlZQorYnVpbGQ0X3N0YXRfbG9jIChsb2NhdGlvbl90IGxvYywgZW51bSB0cmVlX2NvZGUgY29kZSwgdHJlZSB0eXBlLCB0cmVlIGFyZzAsCisJCSB0cmVlIGFyZzEsIHRyZWUgYXJnMiwgdHJlZSBhcmczIE1FTV9TVEFUX0RFQ0wpCit7CisgIHRyZWUgdCA9IGJ1aWxkNF9zdGF0IChjb2RlLCB0eXBlLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczIFBBU1NfTUVNX1NUQVQpOworICBpZiAoQ0FOX0hBVkVfTE9DQVRJT05fUCAodCkpCisgICAgU0VUX0VYUFJfTE9DQVRJT04gKHQsIGxvYyk7CisgIHJldHVybiB0OworfQorI2RlZmluZSBidWlsZDRfbG9jKGwsYyx0MSx0Mix0Myx0NCx0NSkgXAorICBidWlsZDRfc3RhdF9sb2MgKGwsYyx0MSx0Mix0Myx0NCx0NSBNRU1fU1RBVF9JTkZPKQorCitzdGF0aWMgaW5saW5lIHRyZWUKK2J1aWxkNV9zdGF0X2xvYyAobG9jYXRpb25fdCBsb2MsIGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSwgdHJlZSBhcmcwLAorCQkgdHJlZSBhcmcxLCB0cmVlIGFyZzIsIHRyZWUgYXJnMywgdHJlZSBhcmc0IE1FTV9TVEFUX0RFQ0wpCit7CisgIHRyZWUgdCA9IGJ1aWxkNV9zdGF0IChjb2RlLCB0eXBlLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLAorCQkJYXJnNCBQQVNTX01FTV9TVEFUKTsKKyAgaWYgKENBTl9IQVZFX0xPQ0FUSU9OX1AgKHQpKQorICAgIFNFVF9FWFBSX0xPQ0FUSU9OICh0LCBsb2MpOworICByZXR1cm4gdDsKK30KKyNkZWZpbmUgYnVpbGQ1X2xvYyhsLGMsdDEsdDIsdDMsdDQsdDUsdDYpIFwKKyAgYnVpbGQ1X3N0YXRfbG9jIChsLGMsdDEsdDIsdDMsdDQsdDUsdDYgTUVNX1NUQVRfSU5GTykKKworZXh0ZXJuIHRyZWUgYnVpbGRfdmFyX2RlYnVnX3ZhbHVlX3N0YXQgKHRyZWUsIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkX3Zhcl9kZWJ1Z192YWx1ZSh0MSx0MikgXAorICBidWlsZF92YXJfZGVidWdfdmFsdWVfc3RhdCAodDEsdDIgTUVNX1NUQVRfSU5GTykKKworLyogQ29uc3RydWN0cyBkb3VibGVfaW50IGZyb20gdHJlZSBDU1QuICAqLworCitzdGF0aWMgaW5saW5lIGRvdWJsZV9pbnQKK3RyZWVfdG9fZG91YmxlX2ludCAoY29uc3RfdHJlZSBjc3QpCit7CisgIHJldHVybiBUUkVFX0lOVF9DU1QgKGNzdCk7Cit9CisKK2V4dGVybiB0cmVlIGRvdWJsZV9pbnRfdG9fdHJlZSAodHJlZSwgZG91YmxlX2ludCk7CitleHRlcm4gYm9vbCBkb3VibGVfaW50X2ZpdHNfdG9fdHJlZV9wIChjb25zdF90cmVlLCBkb3VibGVfaW50KTsKK2V4dGVybiB0cmVlIGZvcmNlX2ZpdF90eXBlX2RvdWJsZSAodHJlZSwgZG91YmxlX2ludCwgaW50LCBib29sKTsKKworLyogQ3JlYXRlIGFuIElOVF9DU1Qgbm9kZSB3aXRoIGEgQ1NUIHZhbHVlIHplcm8gZXh0ZW5kZWQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2J1aWxkX2ludF9jc3R1ICh0cmVlIHR5cGUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgY3N0KQoreworICByZXR1cm4gZG91YmxlX2ludF90b190cmVlICh0eXBlLCBkb3VibGVfaW50Ojpmcm9tX3Vod2kgKGNzdCkpOworfQorCitleHRlcm4gdHJlZSBidWlsZF9pbnRfY3N0ICh0cmVlLCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2ludF9jc3RfdHlwZSAodHJlZSwgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gdHJlZSBidWlsZF9pbnRfY3N0X3dpZGUgKHRyZWUsIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQsIEhPU1RfV0lERV9JTlQpOworZXh0ZXJuIHRyZWUgbWFrZV92ZWN0b3Jfc3RhdCAodW5zaWduZWQgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIG1ha2VfdmVjdG9yKG4pIG1ha2VfdmVjdG9yX3N0YXQgKG4gTUVNX1NUQVRfSU5GTykKK2V4dGVybiB0cmVlIGJ1aWxkX3ZlY3Rvcl9zdGF0ICh0cmVlLCB0cmVlICogTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkX3ZlY3Rvcih0LHYpIGJ1aWxkX3ZlY3Rvcl9zdGF0ICh0LCB2IE1FTV9TVEFUX0lORk8pCitleHRlcm4gdHJlZSBidWlsZF92ZWN0b3JfZnJvbV9jdG9yICh0cmVlLCB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKik7CitleHRlcm4gdHJlZSBidWlsZF92ZWN0b3JfZnJvbV92YWwgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfY29uc3RydWN0b3IgKHRyZWUsIHZlYzxjb25zdHJ1Y3Rvcl9lbHQsIHZhX2djPiAqKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NvbnN0cnVjdG9yX3NpbmdsZSAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9jb25zdHJ1Y3Rvcl9mcm9tX2xpc3QgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcmVhbF9mcm9tX2ludF9jc3QgKHRyZWUsIGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfY29tcGxleCAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9vbmVfY3N0ICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3plcm9fY3N0ICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3N0cmluZyAoaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIHRyZWUgYnVpbGRfdHJlZV9saXN0X3N0YXQgKHRyZWUsIHRyZWUgTUVNX1NUQVRfREVDTCk7CisjZGVmaW5lIGJ1aWxkX3RyZWVfbGlzdCh0LHEpIGJ1aWxkX3RyZWVfbGlzdF9zdGF0KHQscSBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGRfdHJlZV9saXN0X3ZlY19zdGF0IChjb25zdCB2ZWM8dHJlZSwgdmFfZ2M+ICpNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgYnVpbGRfdHJlZV9saXN0X3ZlYyh2KSBidWlsZF90cmVlX2xpc3RfdmVjX3N0YXQgKHYgTUVNX1NUQVRfSU5GTykKK2V4dGVybiB0cmVlIGJ1aWxkX2RlY2xfc3RhdCAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsCisJCQkgICAgIHRyZWUsIHRyZWUgTUVNX1NUQVRfREVDTCk7CitleHRlcm4gdHJlZSBidWlsZF9mbl9kZWNsIChjb25zdCBjaGFyICosIHRyZWUpOworI2RlZmluZSBidWlsZF9kZWNsKGwsYyx0LHEpIGJ1aWxkX2RlY2xfc3RhdCAobCxjLHQscSBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgYnVpbGRfdHJhbnNsYXRpb25fdW5pdF9kZWNsICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2Jsb2NrICh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2VtcHR5X3N0bXQgKGxvY2F0aW9uX3QpOworZXh0ZXJuIHRyZWUgYnVpbGRfb21wX2NsYXVzZSAobG9jYXRpb25fdCwgZW51bSBvbXBfY2xhdXNlX2NvZGUpOworCitleHRlcm4gdHJlZSBidWlsZF92bF9leHBfc3RhdCAoZW51bSB0cmVlX2NvZGUsIGludCBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgYnVpbGRfdmxfZXhwKGMsbikgYnVpbGRfdmxfZXhwX3N0YXQgKGMsbiBNRU1fU1RBVF9JTkZPKQorCitleHRlcm4gdHJlZSBidWlsZF9jYWxsX25hcnkgKHRyZWUsIHRyZWUsIGludCwgLi4uKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NhbGxfdmFsaXN0ICh0cmVlLCB0cmVlLCBpbnQsIHZhX2xpc3QpOworI2RlZmluZSBidWlsZF9jYWxsX2FycmF5KFQxLFQyLE4sVDMpXAorICAgYnVpbGRfY2FsbF9hcnJheV9sb2MgKFVOS05PV05fTE9DQVRJT04sIFQxLCBUMiwgTiwgVDMpCitleHRlcm4gdHJlZSBidWlsZF9jYWxsX2FycmF5X2xvYyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgaW50LCBjb25zdCB0cmVlICopOworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF92ZWMgKHRyZWUsIHRyZWUsIHZlYzx0cmVlLCB2YV9nYz4gKik7CisKKy8qIENvbnN0cnVjdCB2YXJpb3VzIG5vZGVzIHJlcHJlc2VudGluZyBkYXRhIHR5cGVzLiAgKi8KKworZXh0ZXJuIHRyZWUgbWFrZV9zaWduZWRfdHlwZSAoaW50KTsKK2V4dGVybiB0cmVlIG1ha2VfdW5zaWduZWRfdHlwZSAoaW50KTsKK2V4dGVybiB0cmVlIHNpZ25lZF9vcl91bnNpZ25lZF90eXBlX2ZvciAoaW50LCB0cmVlKTsKK2V4dGVybiB0cmVlIHNpZ25lZF90eXBlX2ZvciAodHJlZSk7CitleHRlcm4gdHJlZSB1bnNpZ25lZF90eXBlX2ZvciAodHJlZSk7CitleHRlcm4gdHJlZSB0cnV0aF90eXBlX2ZvciAodHJlZSk7CitleHRlcm4gdm9pZCBpbml0aWFsaXplX3NpemV0eXBlcyAodm9pZCk7CitleHRlcm4gdm9pZCBmaXh1cF91bnNpZ25lZF90eXBlICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3BvaW50ZXJfdHlwZV9mb3JfbW9kZSAodHJlZSwgZW51bSBtYWNoaW5lX21vZGUsIGJvb2wpOworZXh0ZXJuIHRyZWUgYnVpbGRfcG9pbnRlcl90eXBlICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3JlZmVyZW5jZV90eXBlX2Zvcl9tb2RlICh0cmVlLCBlbnVtIG1hY2hpbmVfbW9kZSwgYm9vbCk7CitleHRlcm4gdHJlZSBidWlsZF9yZWZlcmVuY2VfdHlwZSAodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF92ZWN0b3JfdHlwZV9mb3JfbW9kZSAodHJlZSwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIHRyZWUgYnVpbGRfdmVjdG9yX3R5cGUgKHRyZWUgaW5uZXJ0eXBlLCBpbnQgbnVuaXRzKTsKK2V4dGVybiB0cmVlIGJ1aWxkX29wYXF1ZV92ZWN0b3JfdHlwZSAodHJlZSBpbm5lcnR5cGUsIGludCBudW5pdHMpOworZXh0ZXJuIHRyZWUgYnVpbGRfdHlwZV9ub19xdWFscyAodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9pbmRleF90eXBlICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2FycmF5X3R5cGUgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfbm9uc2hhcmVkX2FycmF5X3R5cGUgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfYXJyYXlfdHlwZV9uZWx0cyAodHJlZSwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gdHJlZSBidWlsZF9mdW5jdGlvbl90eXBlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2Z1bmN0aW9uX3R5cGVfbGlzdCAodHJlZSwgLi4uKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2Z1bmN0aW9uX2RlY2xfc2tpcF9hcmdzICh0cmVlLCBiaXRtYXAsIGJvb2wpOworZXh0ZXJuIHRyZWUgYnVpbGRfdmFyYXJnc19mdW5jdGlvbl90eXBlX2xpc3QgKHRyZWUsIC4uLik7CitleHRlcm4gdHJlZSBidWlsZF9mdW5jdGlvbl90eXBlX2FycmF5ICh0cmVlLCBpbnQsIHRyZWUgKik7CitleHRlcm4gdHJlZSBidWlsZF92YXJhcmdzX2Z1bmN0aW9uX3R5cGVfYXJyYXkgKHRyZWUsIGludCwgdHJlZSAqKTsKKyNkZWZpbmUgYnVpbGRfZnVuY3Rpb25fdHlwZV92ZWMoUkVULCBWKSBcCisgIGJ1aWxkX2Z1bmN0aW9uX3R5cGVfYXJyYXkgKFJFVCwgdmVjX3NhZmVfbGVuZ3RoIChWKSwgdmVjX3NhZmVfYWRkcmVzcyAoVikpCisjZGVmaW5lIGJ1aWxkX3ZhcmFyZ3NfZnVuY3Rpb25fdHlwZV92ZWMoUkVULCBWKSBcCisgIGJ1aWxkX3ZhcmFyZ3NfZnVuY3Rpb25fdHlwZV9hcnJheSAoUkVULCB2ZWNfc2FmZV9sZW5ndGggKFYpLCBcCisJCQkJICAgICB2ZWNfc2FmZV9hZGRyZXNzIChWKSkKK2V4dGVybiB0cmVlIGJ1aWxkX21ldGhvZF90eXBlX2RpcmVjdGx5ICh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX21ldGhvZF90eXBlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX29mZnNldF90eXBlICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NvbXBsZXhfdHlwZSAodHJlZSk7CitleHRlcm4gdHJlZSBhcnJheV90eXBlX25lbHRzIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGluX2FycmF5X2JvdW5kc19wICh0cmVlKTsKK2V4dGVybiBib29sIHJhbmdlX2luX2FycmF5X2JvdW5kc19wICh0cmVlKTsKKworZXh0ZXJuIHRyZWUgdmFsdWVfbWVtYmVyICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIHB1cnBvc2VfbWVtYmVyIChjb25zdF90cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIHZlY19tZW1iZXIgKGNvbnN0X3RyZWUsIHZlYzx0cmVlLCB2YV9nYz4gKik7CitleHRlcm4gdHJlZSBjaGFpbl9pbmRleCAoaW50LCB0cmVlKTsKKworZXh0ZXJuIGludCBhdHRyaWJ1dGVfbGlzdF9lcXVhbCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IGF0dHJpYnV0ZV9saXN0X2NvbnRhaW5lZCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHRyZWVfaW50X2NzdF9lcXVhbCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHRyZWVfaW50X2NzdF9sdCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHRyZWVfaW50X2NzdF9jb21wYXJlIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgaG9zdF9pbnRlZ2VycCAoY29uc3RfdHJlZSwgaW50KQorI2lmbmRlZiBFTkFCTEVfVFJFRV9DSEVDS0lORworICBBVFRSSUJVVEVfUFVSRSAvKiBob3N0X2ludGVnZXJwIGlzIHB1cmUgb25seSB3aGVuIGNoZWNraW5nIGlzIGRpc2FibGVkLiAgKi8KKyNlbmRpZgorICA7CitleHRlcm4gSE9TVF9XSURFX0lOVCB0cmVlX2xvd19jc3QgKGNvbnN0X3RyZWUsIGludCk7CisjaWYgIWRlZmluZWQgRU5BQkxFX1RSRUVfQ0hFQ0tJTkcgJiYgKEdDQ19WRVJTSU9OID49IDQwMDMpCitleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpIEhPU1RfV0lERV9JTlQKK3RyZWVfbG93X2NzdCAoY29uc3RfdHJlZSB0LCBpbnQgcG9zKQoreworICBnY2NfYXNzZXJ0IChob3N0X2ludGVnZXJwICh0LCBwb3MpKTsKKyAgcmV0dXJuIFRSRUVfSU5UX0NTVF9MT1cgKHQpOworfQorI2VuZGlmCitleHRlcm4gSE9TVF9XSURFX0lOVCBzaXplX2xvd19jc3QgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCB0cmVlX2ludF9jc3Rfc2duIChjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgdHJlZV9pbnRfY3N0X3NpZ25fYml0IChjb25zdF90cmVlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdHJlZV9pbnRfY3N0X21pbl9wcmVjaXNpb24gKHRyZWUsIGJvb2wpOworZXh0ZXJuIGJvb2wgdHJlZV9leHByX25vbm5lZ2F0aXZlX3AgKHRyZWUpOworZXh0ZXJuIGJvb2wgdHJlZV9leHByX25vbm5lZ2F0aXZlX3dhcm52X3AgKHRyZWUsIGJvb2wgKik7CitleHRlcm4gYm9vbCBtYXlfbmVnYXRlX3dpdGhvdXRfb3ZlcmZsb3dfcCAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBzdHJpcF9hcnJheV90eXBlcyAodHJlZSk7CitleHRlcm4gdHJlZSBleGNlc3NfcHJlY2lzaW9uX3R5cGUgKHRyZWUpOworZXh0ZXJuIGJvb2wgdmFsaWRfY29uc3RhbnRfc2l6ZV9wIChjb25zdF90cmVlKTsKKworLyogQ29uc3RydWN0IHZhcmlvdXMgbm9kZXMgcmVwcmVzZW50aW5nIGZyYWN0IG9yIGFjY3VtIGRhdGEgdHlwZXMuICAqLworCitleHRlcm4gdHJlZSBtYWtlX2ZyYWN0X3R5cGUgKGludCwgaW50LCBpbnQpOworZXh0ZXJuIHRyZWUgbWFrZV9hY2N1bV90eXBlIChpbnQsIGludCwgaW50KTsKKworI2RlZmluZSBtYWtlX3NpZ25lZF9mcmFjdF90eXBlKFApIG1ha2VfZnJhY3RfdHlwZSAoUCwgMCwgMCkKKyNkZWZpbmUgbWFrZV91bnNpZ25lZF9mcmFjdF90eXBlKFApIG1ha2VfZnJhY3RfdHlwZSAoUCwgMSwgMCkKKyNkZWZpbmUgbWFrZV9zYXRfc2lnbmVkX2ZyYWN0X3R5cGUoUCkgbWFrZV9mcmFjdF90eXBlIChQLCAwLCAxKQorI2RlZmluZSBtYWtlX3NhdF91bnNpZ25lZF9mcmFjdF90eXBlKFApIG1ha2VfZnJhY3RfdHlwZSAoUCwgMSwgMSkKKyNkZWZpbmUgbWFrZV9zaWduZWRfYWNjdW1fdHlwZShQKSBtYWtlX2FjY3VtX3R5cGUgKFAsIDAsIDApCisjZGVmaW5lIG1ha2VfdW5zaWduZWRfYWNjdW1fdHlwZShQKSBtYWtlX2FjY3VtX3R5cGUgKFAsIDEsIDApCisjZGVmaW5lIG1ha2Vfc2F0X3NpZ25lZF9hY2N1bV90eXBlKFApIG1ha2VfYWNjdW1fdHlwZSAoUCwgMCwgMSkKKyNkZWZpbmUgbWFrZV9zYXRfdW5zaWduZWRfYWNjdW1fdHlwZShQKSBtYWtlX2FjY3VtX3R5cGUgKFAsIDEsIDEpCisKKyNkZWZpbmUgbWFrZV9vcl9yZXVzZV9zaWduZWRfZnJhY3RfdHlwZShQKSBcCisJCW1ha2Vfb3JfcmV1c2VfZnJhY3RfdHlwZSAoUCwgMCwgMCkKKyNkZWZpbmUgbWFrZV9vcl9yZXVzZV91bnNpZ25lZF9mcmFjdF90eXBlKFApIFwKKwkJbWFrZV9vcl9yZXVzZV9mcmFjdF90eXBlIChQLCAxLCAwKQorI2RlZmluZSBtYWtlX29yX3JldXNlX3NhdF9zaWduZWRfZnJhY3RfdHlwZShQKSBcCisJCW1ha2Vfb3JfcmV1c2VfZnJhY3RfdHlwZSAoUCwgMCwgMSkKKyNkZWZpbmUgbWFrZV9vcl9yZXVzZV9zYXRfdW5zaWduZWRfZnJhY3RfdHlwZShQKSBcCisJCW1ha2Vfb3JfcmV1c2VfZnJhY3RfdHlwZSAoUCwgMSwgMSkKKyNkZWZpbmUgbWFrZV9vcl9yZXVzZV9zaWduZWRfYWNjdW1fdHlwZShQKSBcCisJCW1ha2Vfb3JfcmV1c2VfYWNjdW1fdHlwZSAoUCwgMCwgMCkKKyNkZWZpbmUgbWFrZV9vcl9yZXVzZV91bnNpZ25lZF9hY2N1bV90eXBlKFApIFwKKwkJbWFrZV9vcl9yZXVzZV9hY2N1bV90eXBlIChQLCAxLCAwKQorI2RlZmluZSBtYWtlX29yX3JldXNlX3NhdF9zaWduZWRfYWNjdW1fdHlwZShQKSBcCisJCW1ha2Vfb3JfcmV1c2VfYWNjdW1fdHlwZSAoUCwgMCwgMSkKKyNkZWZpbmUgbWFrZV9vcl9yZXVzZV9zYXRfdW5zaWduZWRfYWNjdW1fdHlwZShQKSBcCisJCW1ha2Vfb3JfcmV1c2VfYWNjdW1fdHlwZSAoUCwgMSwgMSkKKworLyogRnJvbSBleHBtZWQuYy4gIFNpbmNlIHJ0bC5oIGlzIGluY2x1ZGVkIGFmdGVyIHRyZWUuaCwgd2UgY2FuJ3QKKyAgIHB1dCB0aGUgcHJvdG90eXBlIGhlcmUuICBSdGwuaCBkb2VzIGRlY2xhcmUgdGhlIHByb3RvdHlwZSBpZgorICAgdHJlZS5oIGhhZCBiZWVuIGluY2x1ZGVkLiAgKi8KKworZXh0ZXJuIHRyZWUgbWFrZV90cmVlICh0cmVlLCBydHgpOworDAorLyogUmV0dXJuIGEgdHlwZSBsaWtlIFRUWVBFIGV4Y2VwdCB0aGF0IGl0cyBUWVBFX0FUVFJJQlVURVMKKyAgIGlzIEFUVFJJQlVURS4KKworICAgU3VjaCBtb2RpZmllZCB0eXBlcyBhbHJlYWR5IG1hZGUgYXJlIHJlY29yZGVkIHNvIHRoYXQgZHVwbGljYXRlcworICAgYXJlIG5vdCBtYWRlLiAgKi8KKworZXh0ZXJuIHRyZWUgYnVpbGRfdHlwZV9hdHRyaWJ1dGVfdmFyaWFudCAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9kZWNsX2F0dHJpYnV0ZV92YXJpYW50ICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX3R5cGVfYXR0cmlidXRlX3F1YWxfdmFyaWFudCAodHJlZSwgdHJlZSwgaW50KTsKKworLyogUmV0dXJuIDAgaWYgdGhlIGF0dHJpYnV0ZXMgZm9yIHR3byB0eXBlcyBhcmUgaW5jb21wYXRpYmxlLCAxIGlmIHRoZXkKKyAgIGFyZSBjb21wYXRpYmxlLCBhbmQgMiBpZiB0aGV5IGFyZSBuZWFybHkgY29tcGF0aWJsZSAod2hpY2ggY2F1c2VzIGEKKyAgIHdhcm5pbmcgdG8gYmUgZ2VuZXJhdGVkKS4gICovCitleHRlcm4gaW50IGNvbXBfdHlwZV9hdHRyaWJ1dGVzIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKKworLyogU3RydWN0dXJlIGRlc2NyaWJpbmcgYW4gYXR0cmlidXRlIGFuZCBhIGZ1bmN0aW9uIHRvIGhhbmRsZSBpdC4gICovCitzdHJ1Y3QgYXR0cmlidXRlX3NwZWMKK3sKKyAgLyogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSAod2l0aG91dCBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBfXyksCisgICAgIG9yIE5VTEwgdG8gbWFyayB0aGUgZW5kIG9mIGEgdGFibGUgb2YgYXR0cmlidXRlcy4gICovCisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIC8qIFRoZSBtaW5pbXVtIGxlbmd0aCBvZiB0aGUgbGlzdCBvZiBhcmd1bWVudHMgb2YgdGhlIGF0dHJpYnV0ZS4gICovCisgIGludCBtaW5fbGVuZ3RoOworICAvKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGxpc3Qgb2YgYXJndW1lbnRzIG9mIHRoZSBhdHRyaWJ1dGUKKyAgICAgKC0xIGZvciBubyBtYXhpbXVtKS4gICovCisgIGludCBtYXhfbGVuZ3RoOworICAvKiBXaGV0aGVyIHRoaXMgYXR0cmlidXRlIHJlcXVpcmVzIGEgREVDTC4gIElmIGl0IGRvZXMsIGl0IHdpbGwgYmUgcGFzc2VkCisgICAgIGZyb20gdHlwZXMgb2YgREVDTHMsIGZ1bmN0aW9uIHJldHVybiB0eXBlcyBhbmQgYXJyYXkgZWxlbWVudCB0eXBlcyB0bworICAgICB0aGUgREVDTHMsIGZ1bmN0aW9uIHR5cGVzIGFuZCBhcnJheSB0eXBlcyByZXNwZWN0aXZlbHk7IGJ1dCB3aGVuCisgICAgIGFwcGxpZWQgdG8gYSB0eXBlIGluIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzLCBpdCB3aWxsIGJlIGlnbm9yZWQgd2l0aAorICAgICBhIHdhcm5pbmcuICAoSWYgZ3JlYXRlciBjb250cm9sIGlzIGRlc2lyZWQgZm9yIGEgZ2l2ZW4gYXR0cmlidXRlLAorICAgICB0aGlzIHNob3VsZCBiZSBmYWxzZSwgYW5kIHRoZSBmbGFncyBhcmd1bWVudCB0byB0aGUgaGFuZGxlciBtYXkgYmUKKyAgICAgdXNlZCB0byBnYWluIGdyZWF0ZXIgY29udHJvbCBpbiB0aGF0IGNhc2UuKSAgKi8KKyAgYm9vbCBkZWNsX3JlcXVpcmVkOworICAvKiBXaGV0aGVyIHRoaXMgYXR0cmlidXRlIHJlcXVpcmVzIGEgdHlwZS4gIElmIGl0IGRvZXMsIGl0IHdpbGwgYmUgcGFzc2VkCisgICAgIGZyb20gYSBERUNMIHRvIHRoZSB0eXBlIG9mIHRoYXQgREVDTC4gICovCisgIGJvb2wgdHlwZV9yZXF1aXJlZDsKKyAgLyogV2hldGhlciB0aGlzIGF0dHJpYnV0ZSByZXF1aXJlcyBhIGZ1bmN0aW9uIChvciBtZXRob2QpIHR5cGUuICBJZiBpdCBkb2VzLAorICAgICBpdCB3aWxsIGJlIHBhc3NlZCBmcm9tIGEgZnVuY3Rpb24gcG9pbnRlciB0eXBlIHRvIHRoZSB0YXJnZXQgdHlwZSwKKyAgICAgYW5kIGZyb20gYSBmdW5jdGlvbiByZXR1cm4gdHlwZSAod2hpY2ggaXMgbm90IGl0c2VsZiBhIGZ1bmN0aW9uCisgICAgIHBvaW50ZXIgdHlwZSkgdG8gdGhlIGZ1bmN0aW9uIHR5cGUuICAqLworICBib29sIGZ1bmN0aW9uX3R5cGVfcmVxdWlyZWQ7CisgIC8qIEZ1bmN0aW9uIHRvIGhhbmRsZSB0aGlzIGF0dHJpYnV0ZS4gIE5PREUgcG9pbnRzIHRvIHRoZSBub2RlIHRvIHdoaWNoCisgICAgIHRoZSBhdHRyaWJ1dGUgaXMgdG8gYmUgYXBwbGllZC4gIElmIGEgREVDTCwgaXQgc2hvdWxkIGJlIG1vZGlmaWVkIGluCisgICAgIHBsYWNlOyBpZiBhIFRZUEUsIGEgY29weSBzaG91bGQgYmUgY3JlYXRlZC4gIE5BTUUgaXMgdGhlIG5hbWUgb2YgdGhlCisgICAgIGF0dHJpYnV0ZSAocG9zc2libHkgd2l0aCBsZWFkaW5nIG9yIHRyYWlsaW5nIF9fKS4gIEFSR1MgaXMgdGhlIFRSRUVfTElTVAorICAgICBvZiB0aGUgYXJndW1lbnRzICh3aGljaCBtYXkgYmUgTlVMTCkuICBGTEFHUyBnaXZlcyBmdXJ0aGVyIGluZm9ybWF0aW9uCisgICAgIGFib3V0IHRoZSBjb250ZXh0IG9mIHRoZSBhdHRyaWJ1dGUuICBBZnRlcndhcmRzLCB0aGUgYXR0cmlidXRlcyB3aWxsCisgICAgIGJlIGFkZGVkIHRvIHRoZSBERUNMX0FUVFJJQlVURVMgb3IgVFlQRV9BVFRSSUJVVEVTLCBhcyBhcHByb3ByaWF0ZSwKKyAgICAgdW5sZXNzICpOT19BRERfQVRUUlMgaXMgc2V0IHRvIHRydWUgKHdoaWNoIHNob3VsZCBiZSBkb25lIG9uIGVycm9yLAorICAgICBhcyB3ZWxsIGFzIGluIGFueSBvdGhlciBjYXNlcyB3aGVuIHRoZSBhdHRyaWJ1dGVzIHNob3VsZCBub3QgYmUgYWRkZWQKKyAgICAgdG8gdGhlIERFQ0wgb3IgVFlQRSkuICBEZXBlbmRpbmcgb24gRkxBR1MsIGFueSBhdHRyaWJ1dGVzIHRvIGJlCisgICAgIGFwcGxpZWQgdG8gYW5vdGhlciB0eXBlIG9yIERFQ0wgbGF0ZXIgbWF5IGJlIHJldHVybmVkOworICAgICBvdGhlcndpc2UgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgTlVMTF9UUkVFLiAgVGhpcyBwb2ludGVyIG1heSBiZQorICAgICBOVUxMIGlmIG5vIHNwZWNpYWwgaGFuZGxpbmcgaXMgcmVxdWlyZWQgYmV5b25kIHRoZSBjaGVja3MgaW1wbGllZAorICAgICBieSB0aGUgcmVzdCBvZiB0aGlzIHN0cnVjdHVyZS4gICovCisgIHRyZWUgKCpoYW5kbGVyKSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLCB0cmVlIGFyZ3MsCisJCSAgIGludCBmbGFncywgYm9vbCAqbm9fYWRkX2F0dHJzKTsKKyAgLyogU3BlY2lmaWVzIGlmIGF0dHJpYnV0ZSBhZmZlY3RzIHR5cGUncyBpZGVudGl0eS4gICovCisgIGJvb2wgYWZmZWN0c190eXBlX2lkZW50aXR5OworfTsKKworLyogRmxhZ3MgdGhhdCBtYXkgYmUgcGFzc2VkIGluIHRoZSB0aGlyZCBhcmd1bWVudCBvZiBkZWNsX2F0dHJpYnV0ZXMsIGFuZAorICAgdG8gaGFuZGxlciBmdW5jdGlvbnMgZm9yIGF0dHJpYnV0ZXMuICAqLworZW51bSBhdHRyaWJ1dGVfZmxhZ3MKK3sKKyAgLyogVGhlIHR5cGUgcGFzc2VkIGluIGlzIHRoZSB0eXBlIG9mIGEgREVDTCwgYW5kIGFueSBhdHRyaWJ1dGVzIHRoYXQKKyAgICAgc2hvdWxkIGJlIHBhc3NlZCBpbiBhZ2FpbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBERUNMIHJhdGhlciB0aGFuIHRoZQorICAgICB0eXBlIHNob3VsZCBiZSByZXR1cm5lZC4gICovCisgIEFUVFJfRkxBR19ERUNMX05FWFQgPSAxLAorICAvKiBUaGUgdHlwZSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbiByZXR1cm4gdHlwZSwgYW5kIGFueSBhdHRyaWJ1dGVzIHRoYXQKKyAgICAgc2hvdWxkIGJlIHBhc3NlZCBpbiBhZ2FpbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBmdW5jdGlvbiB0eXBlIHJhdGhlcgorICAgICB0aGFuIHRoZSByZXR1cm4gdHlwZSBzaG91bGQgYmUgcmV0dXJuZWQuICAqLworICBBVFRSX0ZMQUdfRlVOQ1RJT05fTkVYVCA9IDIsCisgIC8qIFRoZSB0eXBlIHBhc3NlZCBpbiBpcyBhbiBhcnJheSBlbGVtZW50IHR5cGUsIGFuZCBhbnkgYXR0cmlidXRlcyB0aGF0CisgICAgIHNob3VsZCBiZSBwYXNzZWQgaW4gYWdhaW4gdG8gYmUgYXBwbGllZCB0byB0aGUgYXJyYXkgdHlwZSByYXRoZXIKKyAgICAgdGhhbiB0aGUgZWxlbWVudCB0eXBlIHNob3VsZCBiZSByZXR1cm5lZC4gICovCisgIEFUVFJfRkxBR19BUlJBWV9ORVhUID0gNCwKKyAgLyogVGhlIHR5cGUgcGFzc2VkIGluIGlzIGEgc3RydWN0dXJlLCB1bmlvbiBvciBlbnVtZXJhdGlvbiB0eXBlIGJlaW5nCisgICAgIGNyZWF0ZWQsIGFuZCBzaG91bGQgYmUgbW9kaWZpZWQgaW4gcGxhY2UuICAqLworICBBVFRSX0ZMQUdfVFlQRV9JTl9QTEFDRSA9IDgsCisgIC8qIFRoZSBhdHRyaWJ1dGVzIGFyZSBiZWluZyBhcHBsaWVkIGJ5IGRlZmF1bHQgdG8gYSBsaWJyYXJ5IGZ1bmN0aW9uIHdob3NlCisgICAgIG5hbWUgaW5kaWNhdGVzIGtub3duIGJlaGF2aW9yLCBhbmQgc2hvdWxkIGJlIHNpbGVudGx5IGlnbm9yZWQgaWYgdGhleQorICAgICBhcmUgbm90IGluIGZhY3QgY29tcGF0aWJsZSB3aXRoIHRoZSBmdW5jdGlvbiB0eXBlLiAgKi8KKyAgQVRUUl9GTEFHX0JVSUxUX0lOID0gMTYsCisgIC8qIEEgZ2l2ZW4gYXR0cmlidXRlIGhhcyBiZWVuIHBhcnNlZCBhcyBhIEMrKy0xMSBhdHRyaWJ1dGUuICAqLworICBBVFRSX0ZMQUdfQ1hYMTEgPSAzMgorfTsKKworLyogRGVmYXVsdCB2ZXJzaW9ucyBvZiB0YXJnZXQtb3ZlcnJpZGFibGUgZnVuY3Rpb25zLiAgKi8KKworZXh0ZXJuIHRyZWUgbWVyZ2VfZGVjbF9hdHRyaWJ1dGVzICh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIG1lcmdlX3R5cGVfYXR0cmlidXRlcyAodHJlZSwgdHJlZSk7CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgYSBwcml2YXRlIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBsb29rdXBfYXR0cmlidXRlKCkKKyAgIGFuZCB5b3Ugc2hvdWxkIG5ldmVyIGNhbGwgaXQgZGlyZWN0bHkuICAqLworZXh0ZXJuIHRyZWUgcHJpdmF0ZV9sb29rdXBfYXR0cmlidXRlIChjb25zdCBjaGFyICosIHNpemVfdCwgdHJlZSk7CisKKy8qIEdpdmVuIGFuIGF0dHJpYnV0ZSBuYW1lIEFUVFJfTkFNRSBhbmQgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgTElTVCwKKyAgIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGF0dHJpYnV0ZSdzIGxpc3QgZWxlbWVudCBpZiB0aGUgYXR0cmlidXRlCisgICBpcyBwYXJ0IG9mIHRoZSBsaXN0LCBvciBOVUxMX1RSRUUgaWYgbm90IGZvdW5kLiAgSWYgdGhlIGF0dHJpYnV0ZQorICAgYXBwZWFycyBtb3JlIHRoYW4gb25jZSwgdGhpcyBvbmx5IHJldHVybnMgdGhlIGZpcnN0IG9jY3VycmVuY2U7IHRoZQorICAgVFJFRV9DSEFJTiBvZiB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBwYXNzZWQgYmFjayBpbiBpZiBmdXJ0aGVyCisgICBvY2N1cnJlbmNlcyBhcmUgd2FudGVkLiAgQVRUUl9OQU1FIG11c3QgYmUgaW4gdGhlIGZvcm0gJ3RleHQnIChub3QKKyAgICdfX3RleHRfXycpLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitsb29rdXBfYXR0cmlidXRlIChjb25zdCBjaGFyICphdHRyX25hbWUsIHRyZWUgbGlzdCkKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoYXR0cl9uYW1lWzBdICE9ICdfJyk7ICAKKyAgLyogSW4gbW9zdCBjYXNlcywgbGlzdCBpcyBOVUxMX1RSRUUuICAqLworICBpZiAobGlzdCA9PSBOVUxMX1RSRUUpCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgZWxzZQorICAgIC8qIERvIHRoZSBzdHJsZW4oKSBiZWZvcmUgY2FsbGluZyB0aGUgb3V0LW9mLWxpbmUgaW1wbGVtZW50YXRpb24uCisgICAgICAgSW4gbW9zdCBjYXNlcyBhdHRyX25hbWUgaXMgYSBzdHJpbmcgY29uc3RhbnQsIGFuZCB0aGUgY29tcGlsZXIKKyAgICAgICB3aWxsIG9wdGltaXplIHRoZSBzdHJsZW4oKSBhd2F5LiAgKi8KKyAgICByZXR1cm4gcHJpdmF0ZV9sb29rdXBfYXR0cmlidXRlIChhdHRyX25hbWUsIHN0cmxlbiAoYXR0cl9uYW1lKSwgbGlzdCk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgYSBwcml2YXRlIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZgorICAgaXNfYXR0cmlidXRlX3AoKSBhbmQgeW91IHNob3VsZCBuZXZlciBjYWxsIGl0IGRpcmVjdGx5LiAgKi8KK2V4dGVybiBib29sIHByaXZhdGVfaXNfYXR0cmlidXRlX3AgKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBjb25zdF90cmVlKTsKKworLyogR2l2ZW4gYW4gaWRlbnRpZmllciBub2RlIElERU5UIGFuZCBhIHN0cmluZyBBVFRSX05BTUUsIHJldHVybiB0cnVlCisgICBpZiB0aGUgaWRlbnRpZmllciBub2RlIGlzIGEgdmFsaWQgYXR0cmlidXRlIG5hbWUgZm9yIHRoZSBzdHJpbmcuCisgICBBVFRSX05BTUUgbXVzdCBiZSBpbiB0aGUgZm9ybSAndGV4dCcgKG5vdCAnX190ZXh0X18nKS4gIElERU5UIGNvdWxkCisgICBiZSB0aGUgaWRlbnRpZmllciBmb3IgJ3RleHQnIG9yIGZvciAnX190ZXh0X18nLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitpc19hdHRyaWJ1dGVfcCAoY29uc3QgY2hhciAqYXR0cl9uYW1lLCBjb25zdF90cmVlIGlkZW50KQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChhdHRyX25hbWVbMF0gIT0gJ18nKTsKKyAgLyogRG8gdGhlIHN0cmxlbigpIGJlZm9yZSBjYWxsaW5nIHRoZSBvdXQtb2YtbGluZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgSW4gbW9zdCBjYXNlcyBhdHRyX25hbWUgaXMgYSBzdHJpbmcgY29uc3RhbnQsIGFuZCB0aGUgY29tcGlsZXIKKyAgICAgd2lsbCBvcHRpbWl6ZSB0aGUgc3RybGVuKCkgYXdheS4gICovCisgIHJldHVybiBwcml2YXRlX2lzX2F0dHJpYnV0ZV9wIChhdHRyX25hbWUsIHN0cmxlbiAoYXR0cl9uYW1lKSwgaWRlbnQpOworfQorCisvKiBSZW1vdmUgYW55IGluc3RhbmNlcyBvZiBhdHRyaWJ1dGUgQVRUUl9OQU1FIGluIExJU1QgYW5kIHJldHVybiB0aGUKKyAgIG1vZGlmaWVkIGxpc3QuICBBVFRSX05BTUUgbXVzdCBiZSBpbiB0aGUgZm9ybSAndGV4dCcgKG5vdAorICAgJ19fdGV4dF9fJykuICAqLworCitleHRlcm4gdHJlZSByZW1vdmVfYXR0cmlidXRlIChjb25zdCBjaGFyICosIHRyZWUpOworCisvKiBHaXZlbiB0d28gYXR0cmlidXRlcyBsaXN0cywgcmV0dXJuIGEgbGlzdCBvZiB0aGVpciB1bmlvbi4gICovCisKK2V4dGVybiB0cmVlIG1lcmdlX2F0dHJpYnV0ZXMgKHRyZWUsIHRyZWUpOworCisjaWYgVEFSR0VUX0RMTElNUE9SVF9ERUNMX0FUVFJJQlVURVMKKy8qIEdpdmVuIHR3byBXaW5kb3dzIGRlY2wgYXR0cmlidXRlcyBsaXN0cywgcG9zc2libHkgaW5jbHVkaW5nCisgICBkbGxpbXBvcnQsIHJldHVybiBhIGxpc3Qgb2YgdGhlaXIgdW5pb24gLiAgKi8KK2V4dGVybiB0cmVlIG1lcmdlX2RsbGltcG9ydF9kZWNsX2F0dHJpYnV0ZXMgKHRyZWUsIHRyZWUpOworCisvKiBIYW5kbGUgYSAiZGxsaW1wb3J0IiBvciAiZGxsZXhwb3J0IiBhdHRyaWJ1dGUuICAqLworZXh0ZXJuIHRyZWUgaGFuZGxlX2RsbF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworI2VuZGlmCisKKy8qIENoZWNrIHdoZXRoZXIgQ0FORCBpcyBzdWl0YWJsZSB0byBiZSByZXR1cm5lZCBmcm9tIGdldF9xdWFsaWZpZWRfdHlwZQorICAgKEJBU0UsIFRZUEVfUVVBTFMpLiAgKi8KKworZXh0ZXJuIGJvb2wgY2hlY2tfcXVhbGlmaWVkX3R5cGUgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIGludCk7CisKKy8qIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIFRZUEUsIHF1YWxpZmllZCBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICBUWVBFX1FVQUxTLCBpZiBvbmUgZXhpc3RzLiAgSWYgbm8gcXVhbGlmaWVkIHZlcnNpb24gZXhpc3RzIHlldCwKKyAgIHJldHVybiBOVUxMX1RSRUUuICAqLworCitleHRlcm4gdHJlZSBnZXRfcXVhbGlmaWVkX3R5cGUgKHRyZWUsIGludCk7CisKKy8qIExpa2UgZ2V0X3F1YWxpZmllZF90eXBlLCBidXQgY3JlYXRlcyB0aGUgdHlwZSBpZiBpdCBkb2VzIG5vdAorICAgZXhpc3QuICBUaGlzIGZ1bmN0aW9uIG5ldmVyIHJldHVybnMgTlVMTF9UUkVFLiAgKi8KKworZXh0ZXJuIHRyZWUgYnVpbGRfcXVhbGlmaWVkX3R5cGUgKHRyZWUsIGludCk7CisKKy8qIENyZWF0ZSBhIHZhcmlhbnQgb2YgdHlwZSBUIHdpdGggYWxpZ25tZW50IEFMSUdOLiAgKi8KKworZXh0ZXJuIHRyZWUgYnVpbGRfYWxpZ25lZF90eXBlICh0cmVlLCB1bnNpZ25lZCBpbnQpOworCisvKiBMaWtlIGJ1aWxkX3F1YWxpZmllZF90eXBlLCBidXQgb25seSBkZWFscyB3aXRoIHRoZSBgY29uc3QnIGFuZAorICAgYHZvbGF0aWxlJyBxdWFsaWZpZXJzLiAgVGhpcyBpbnRlcmZhY2UgaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkcworICAgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSB2YXJpb3VzIGZyb250LWVuZHM7IG5ldyBjb2RlIHNob3VsZCB1c2UKKyAgIGJ1aWxkX3F1YWxpZmllZF90eXBlIGluc3RlYWQuICAqLworCisjZGVmaW5lIGJ1aWxkX3R5cGVfdmFyaWFudChUWVBFLCBDT05TVF9QLCBWT0xBVElMRV9QKQkJCVwKKyAgYnVpbGRfcXVhbGlmaWVkX3R5cGUgKChUWVBFKSwJCQkJCQlcCisJCQkoKENPTlNUX1ApID8gVFlQRV9RVUFMX0NPTlNUIDogMCkJCVwKKwkJCXwgKChWT0xBVElMRV9QKSA/IFRZUEVfUVVBTF9WT0xBVElMRSA6IDApKQorCisvKiBNYWtlIGEgY29weSBvZiBhIHR5cGUgbm9kZS4gICovCisKK2V4dGVybiB0cmVlIGJ1aWxkX2Rpc3RpbmN0X3R5cGVfY29weSAodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF92YXJpYW50X3R5cGVfY29weSAodHJlZSk7CisKKy8qIEZpbmlzaCB1cCBhIGJ1aWx0aW4gUkVDT1JEX1RZUEUuIEdpdmUgaXQgYSBuYW1lIGFuZCBwcm92aWRlIGl0cworICAgZmllbGRzLiBPcHRpb25hbGx5IHNwZWNpZnkgYW4gYWxpZ25tZW50LCBhbmQgdGhlbiBsYXkgaXQgb3V0LiAgKi8KKworZXh0ZXJuIHZvaWQgZmluaXNoX2J1aWx0aW5fc3RydWN0ICh0cmVlLCBjb25zdCBjaGFyICosCisJCQkJCQkJIHRyZWUsIHRyZWUpOworCisvKiBHaXZlbiBhIC4uLl9UWVBFIG5vZGUsIGNhbGN1bGF0ZSB0aGUgVFlQRV9TSVpFLCBUWVBFX1NJWkVfVU5JVCwKKyAgIFRZUEVfQUxJR04gYW5kIFRZUEVfTU9ERSBmaWVsZHMuICBJZiBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gb25lCisgICBub2RlLCBkb2VzIG5vdGhpbmcgZXhjZXB0IGZvciB0aGUgZmlyc3QgdGltZS4gICovCisKK2V4dGVybiB2b2lkIGxheW91dF90eXBlICh0cmVlKTsKKworLyogVGhlc2UgZnVuY3Rpb25zIGFsbG93IGEgZnJvbnQtZW5kIHRvIHBlcmZvcm0gYSBtYW51YWwgbGF5b3V0IG9mIGEKKyAgIFJFQ09SRF9UWVBFLiAgKEZvciBpbnN0YW5jZSwgaWYgdGhlIHBsYWNlbWVudCBvZiBzdWJzZXF1ZW50IGZpZWxkcworICAgZGVwZW5kcyBvbiB0aGUgcGxhY2VtZW50IG9mIGZpZWxkcyBzbyBmYXIuKSAgQmVnaW4gYnkgY2FsbGluZworICAgc3RhcnRfcmVjb3JkX2xheW91dC4gIFRoZW4sIGNhbGwgcGxhY2VfZmllbGQgZm9yIGVhY2ggb2YgdGhlCisgICBmaWVsZHMuICBUaGVuLCBjYWxsIGZpbmlzaF9yZWNvcmRfbGF5b3V0LiAgU2VlIGxheW91dF90eXBlIGZvciB0aGUKKyAgIGRlZmF1bHQgd2F5IGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC4gICovCisKK3R5cGVkZWYgc3RydWN0IHJlY29yZF9sYXlvdXRfaW5mb19zCit7CisgIC8qIFRoZSBSRUNPUkRfVFlQRSB0aGF0IHdlIGFyZSBsYXlpbmcgb3V0LiAgKi8KKyAgdHJlZSB0OworICAvKiBUaGUgb2Zmc2V0IGludG8gdGhlIHJlY29yZCBzbyBmYXIsIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIGJpdHMgaW4KKyAgICAgQklUUE9TLiAgKi8KKyAgdHJlZSBvZmZzZXQ7CisgIC8qIFRoZSBsYXN0IGtub3duIGFsaWdubWVudCBvZiBTSVpFLiAgKi8KKyAgdW5zaWduZWQgaW50IG9mZnNldF9hbGlnbjsKKyAgLyogVGhlIGJpdCBwb3NpdGlvbiB3aXRoaW4gdGhlIGxhc3QgT0ZGU0VUX0FMSUdOIGJpdHMsIGluIGJpdHMuICAqLworICB0cmVlIGJpdHBvczsKKyAgLyogVGhlIGFsaWdubWVudCBvZiB0aGUgcmVjb3JkIHNvIGZhciwgaW4gYml0cy4gICovCisgIHVuc2lnbmVkIGludCByZWNvcmRfYWxpZ247CisgIC8qIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHJlY29yZCBzbyBmYXIsIGlnbm9yaW5nICNwcmFnbWEgcGFjayBhbmQKKyAgICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpLCBpbiBiaXRzLiAgKi8KKyAgdW5zaWduZWQgaW50IHVucGFja2VkX2FsaWduOworICAvKiBUaGUgcHJldmlvdXMgZmllbGQgbGFpZCBvdXQuICAqLworICB0cmVlIHByZXZfZmllbGQ7CisgIC8qIFRoZSBzdGF0aWMgdmFyaWFibGVzIChpLmUuLCBjbGFzcyB2YXJpYWJsZXMsIGFzIG9wcG9zZWQgdG8KKyAgICAgaW5zdGFuY2UgdmFyaWFibGVzKSBlbmNvdW50ZXJlZCBpbiBULiAgKi8KKyAgdmVjPHRyZWUsIHZhX2djPiAqcGVuZGluZ19zdGF0aWNzOworICAvKiBCaXRzIHJlbWFpbmluZyBpbiB0aGUgY3VycmVudCBhbGlnbm1lbnQgZ3JvdXAgKi8KKyAgaW50IHJlbWFpbmluZ19pbl9hbGlnbm1lbnQ7CisgIC8qIFRydWUgaWYgd2UndmUgc2VlbiBhIHBhY2tlZCBmaWVsZCB0aGF0IGRpZG4ndCBoYXZlIG5vcm1hbAorICAgICBhbGlnbm1lbnQgYW55d2F5LiAgKi8KKyAgaW50IHBhY2tlZF9tYXliZV9uZWNlc3Nhcnk7Cit9ICpyZWNvcmRfbGF5b3V0X2luZm87CisKK2V4dGVybiByZWNvcmRfbGF5b3V0X2luZm8gc3RhcnRfcmVjb3JkX2xheW91dCAodHJlZSk7CitleHRlcm4gdHJlZSBiaXRfZnJvbV9wb3MgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnl0ZV9mcm9tX3BvcyAodHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBwb3NfZnJvbV9iaXQgKHRyZWUgKiwgdHJlZSAqLCB1bnNpZ25lZCBpbnQsIHRyZWUpOworZXh0ZXJuIHZvaWQgbm9ybWFsaXplX29mZnNldCAodHJlZSAqLCB0cmVlICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdHJlZSBybGlfc2l6ZV91bml0X3NvX2ZhciAocmVjb3JkX2xheW91dF9pbmZvKTsKK2V4dGVybiB0cmVlIHJsaV9zaXplX3NvX2ZhciAocmVjb3JkX2xheW91dF9pbmZvKTsKK2V4dGVybiB2b2lkIG5vcm1hbGl6ZV9ybGkgKHJlY29yZF9sYXlvdXRfaW5mbyk7CitleHRlcm4gdm9pZCBwbGFjZV9maWVsZCAocmVjb3JkX2xheW91dF9pbmZvLCB0cmVlKTsKK2V4dGVybiB2b2lkIGNvbXB1dGVfcmVjb3JkX21vZGUgKHRyZWUpOworZXh0ZXJuIHZvaWQgZmluaXNoX3JlY29yZF9sYXlvdXQgKHJlY29yZF9sYXlvdXRfaW5mbywgaW50KTsKKworLyogR2l2ZW4gYSBoYXNoY29kZSBhbmQgYSAuLi5fVFlQRSBub2RlIChmb3Igd2hpY2ggdGhlIGhhc2hjb2RlIHdhcyBtYWRlKSwKKyAgIHJldHVybiBhIGNhbm9uaWNhbGl6ZWQgLi4uX1RZUEUgbm9kZSwgc28gdGhhdCBkdXBsaWNhdGVzIGFyZSBub3QgbWFkZS4KKyAgIEhvdyB0aGUgaGFzaCBjb2RlIGlzIGNvbXB1dGVkIGlzIHVwIHRvIHRoZSBjYWxsZXIsIGFzIGxvbmcgYXMgYW55IHR3bworICAgY2FsbGVycyB0aGF0IGNvdWxkIGhhc2ggaWRlbnRpY2FsLWxvb2tpbmcgdHlwZSBub2RlcyBhZ3JlZS4gICovCisKK2V4dGVybiB0cmVlIHR5cGVfaGFzaF9jYW5vbiAodW5zaWduZWQgaW50LCB0cmVlKTsKKworLyogR2l2ZW4gYSBWQVJfREVDTCwgUEFSTV9ERUNMLCBSRVNVTFRfREVDTCBvciBGSUVMRF9ERUNMIG5vZGUsCisgICBjYWxjdWxhdGVzIHRoZSBERUNMX1NJWkUsIERFQ0xfU0laRV9VTklULCBERUNMX0FMSUdOIGFuZCBERUNMX01PREUKKyAgIGZpZWxkcy4gIENhbGwgdGhpcyBvbmx5IG9uY2UgZm9yIGFueSBnaXZlbiBkZWNsIG5vZGUuCisKKyAgIFNlY29uZCBhcmd1bWVudCBpcyB0aGUgYm91bmRhcnkgdGhhdCB0aGlzIGZpZWxkIGNhbiBiZSBhc3N1bWVkIHRvCisgICBiZSBzdGFydGluZyBhdCAoaW4gYml0cykuICBaZXJvIG1lYW5zIGl0IGNhbiBiZSBhc3N1bWVkIGFsaWduZWQKKyAgIG9uIGFueSBib3VuZGFyeSB0aGF0IG1heSBiZSBuZWVkZWQuICAqLworCitleHRlcm4gdm9pZCBsYXlvdXRfZGVjbCAodHJlZSwgdW5zaWduZWQpOworCisvKiBHaXZlbiBhIFZBUl9ERUNMLCBQQVJNX0RFQ0wgb3IgUkVTVUxUX0RFQ0wsIGNsZWFycyB0aGUgcmVzdWx0cyBvZgorICAgYSBwcmV2aW91cyBjYWxsIHRvIGxheW91dF9kZWNsIGFuZCBjYWxscyBpdCBhZ2Fpbi4gICovCisKK2V4dGVybiB2b2lkIHJlbGF5b3V0X2RlY2wgKHRyZWUpOworCisvKiBSZXR1cm4gdGhlIG1vZGUgZm9yIGRhdGEgb2YgYSBnaXZlbiBzaXplIFNJWkUgYW5kIG1vZGUgY2xhc3MgQ0xBU1MuCisgICBJZiBMSU1JVCBpcyBub256ZXJvLCB0aGVuIGRvbid0IHVzZSBtb2RlcyBiaWdnZXIgdGhhbiBNQVhfRklYRURfTU9ERV9TSVpFLgorICAgVGhlIHZhbHVlIGlzIEJMS21vZGUgaWYgbm8gb3RoZXIgbW9kZSBpcyBmb3VuZC4gIFRoaXMgaXMgbGlrZQorICAgbW9kZV9mb3Jfc2l6ZSwgYnV0IGlzIHBhc3NlZCBhIHRyZWUuICAqLworCitleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgbW9kZV9mb3Jfc2l6ZV90cmVlIChjb25zdF90cmVlLCBlbnVtIG1vZGVfY2xhc3MsIGludCk7CisKKy8qIFJldHVybiBhbiBleHByIGVxdWFsIHRvIFggYnV0IGNlcnRhaW5seSBub3QgdmFsaWQgYXMgYW4gbHZhbHVlLiAgKi8KKworI2RlZmluZSBub25fbHZhbHVlKFQpIG5vbl9sdmFsdWVfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBUKQorZXh0ZXJuIHRyZWUgbm9uX2x2YWx1ZV9sb2MgKGxvY2F0aW9uX3QsIHRyZWUpOworCitleHRlcm4gdHJlZSBjb252ZXJ0ICh0cmVlLCB0cmVlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZXhwcl9hbGlnbiAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBleHByX2ZpcnN0ICh0cmVlKTsKK2V4dGVybiB0cmVlIGV4cHJfbGFzdCAodHJlZSk7CitleHRlcm4gdHJlZSBzaXplX2luX2J5dGVzIChjb25zdF90cmVlKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGludF9zaXplX2luX2J5dGVzIChjb25zdF90cmVlKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIG1heF9pbnRfc2l6ZV9pbl9ieXRlcyAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSB0cmVlX2V4cHJfc2l6ZSAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBiaXRfcG9zaXRpb24gKGNvbnN0X3RyZWUpOworZXh0ZXJuIEhPU1RfV0lERV9JTlQgaW50X2JpdF9wb3NpdGlvbiAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBieXRlX3Bvc2l0aW9uIChjb25zdF90cmVlKTsKK2V4dGVybiBIT1NUX1dJREVfSU5UIGludF9ieXRlX3Bvc2l0aW9uIChjb25zdF90cmVlKTsKKworLyogRGVmaW5lIGRhdGEgc3RydWN0dXJlcywgbWFjcm9zLCBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBzaXplcworICAgYW5kIHRoZSB2YXJpb3VzIHR5cGVzIHVzZWQgdG8gcmVwcmVzZW50IHNpemVzLiAgKi8KKworZW51bSBzaXplX3R5cGVfa2luZAoreworICBzdGtfc2l6ZXR5cGUsCQkvKiBOb3JtYWwgcmVwcmVzZW50YXRpb24gb2Ygc2l6ZXMgaW4gYnl0ZXMuICAqLworICBzdGtfc3NpemV0eXBlLAkvKiBTaWduZWQgcmVwcmVzZW50YXRpb24gb2Ygc2l6ZXMgaW4gYnl0ZXMuICAqLworICBzdGtfYml0c2l6ZXR5cGUsCS8qIE5vcm1hbCByZXByZXNlbnRhdGlvbiBvZiBzaXplcyBpbiBiaXRzLiAgKi8KKyAgc3RrX3NiaXRzaXpldHlwZSwJLyogU2lnbmVkIHJlcHJlc2VudGF0aW9uIG9mIHNpemVzIGluIGJpdHMuICAqLworICBzdGtfdHlwZV9raW5kX2xhc3QKK307CisKK2V4dGVybiBHVFkoKCkpIHRyZWUgc2l6ZXR5cGVfdGFiWyhpbnQpIHN0a190eXBlX2tpbmRfbGFzdF07CisKKyNkZWZpbmUgc2l6ZXR5cGUgc2l6ZXR5cGVfdGFiWyhpbnQpIHN0a19zaXpldHlwZV0KKyNkZWZpbmUgYml0c2l6ZXR5cGUgc2l6ZXR5cGVfdGFiWyhpbnQpIHN0a19iaXRzaXpldHlwZV0KKyNkZWZpbmUgc3NpemV0eXBlIHNpemV0eXBlX3RhYlsoaW50KSBzdGtfc3NpemV0eXBlXQorI2RlZmluZSBzYml0c2l6ZXR5cGUgc2l6ZXR5cGVfdGFiWyhpbnQpIHN0a19zYml0c2l6ZXR5cGVdCisKK2V4dGVybiB0cmVlIHNpemVfaW50X2tpbmQgKEhPU1RfV0lERV9JTlQsIGVudW0gc2l6ZV90eXBlX2tpbmQpOworI2RlZmluZSBzaXplX2Jpbm9wKENPREUsVDEsVDIpXAorICAgc2l6ZV9iaW5vcF9sb2MgKFVOS05PV05fTE9DQVRJT04sIENPREUsIFQxLCBUMikKK2V4dGVybiB0cmVlIHNpemVfYmlub3BfbG9jIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CisjZGVmaW5lIHNpemVfZGlmZm9wKFQxLFQyKVwKKyAgIHNpemVfZGlmZm9wX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgVDEsIFQyKQorZXh0ZXJuIHRyZWUgc2l6ZV9kaWZmb3BfbG9jIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKKworI2RlZmluZSBzaXplX2ludChMKSBzaXplX2ludF9raW5kIChMLCBzdGtfc2l6ZXR5cGUpCisjZGVmaW5lIHNzaXplX2ludChMKSBzaXplX2ludF9raW5kIChMLCBzdGtfc3NpemV0eXBlKQorI2RlZmluZSBiaXRzaXplX2ludChMKSBzaXplX2ludF9raW5kIChMLCBzdGtfYml0c2l6ZXR5cGUpCisjZGVmaW5lIHNiaXRzaXplX2ludChMKSBzaXplX2ludF9raW5kIChMLCBzdGtfc2JpdHNpemV0eXBlKQorCisjZGVmaW5lIHJvdW5kX3VwKFQsTikgcm91bmRfdXBfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBULCBOKQorZXh0ZXJuIHRyZWUgcm91bmRfdXBfbG9jIChsb2NhdGlvbl90LCB0cmVlLCBpbnQpOworI2RlZmluZSByb3VuZF9kb3duKFQsTikgcm91bmRfZG93bl9sb2MgKFVOS05PV05fTE9DQVRJT04sIFQsIE4pCitleHRlcm4gdHJlZSByb3VuZF9kb3duX2xvYyAobG9jYXRpb25fdCwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIGZpbmFsaXplX3NpemVfZnVuY3Rpb25zICh2b2lkKTsKKworLyogVHlwZSBmb3Igc2l6ZXMgb2YgZGF0YS10eXBlLiAgKi8KKworI2RlZmluZSBCSVRTX1BFUl9VTklUX0xPRyBcCisgICgoQklUU19QRVJfVU5JVCA+IDEpICsgKEJJVFNfUEVSX1VOSVQgPiAyKSArIChCSVRTX1BFUl9VTklUID4gNCkgXAorICAgKyAoQklUU19QRVJfVU5JVCA+IDgpICsgKEJJVFNfUEVSX1VOSVQgPiAxNikgKyAoQklUU19QRVJfVU5JVCA+IDMyKSBcCisgICArIChCSVRTX1BFUl9VTklUID4gNjQpICsgKEJJVFNfUEVSX1VOSVQgPiAxMjgpICsgKEJJVFNfUEVSX1VOSVQgPiAyNTYpKQorCisvKiBJZiBub256ZXJvLCBhbiB1cHBlciBsaW1pdCBvbiBhbGlnbm1lbnQgb2Ygc3RydWN0dXJlIGZpZWxkcywgaW4gYml0cywgICovCitleHRlcm4gdW5zaWduZWQgaW50IG1heGltdW1fZmllbGRfYWxpZ25tZW50OworCisvKiBDb25jYXRlbmF0ZSB0d28gbGlzdHMgKGNoYWlucyBvZiBUUkVFX0xJU1Qgbm9kZXMpIFggYW5kIFkKKyAgIGJ5IG1ha2luZyB0aGUgbGFzdCBub2RlIGluIFggcG9pbnQgdG8gWS4KKyAgIFJldHVybnMgWCwgZXhjZXB0IGlmIFggaXMgMCByZXR1cm5zIFkuICAqLworCitleHRlcm4gdHJlZSBjaGFpbm9uICh0cmVlLCB0cmVlKTsKKworLyogTWFrZSBhIG5ldyBUUkVFX0xJU1Qgbm9kZSBmcm9tIHNwZWNpZmllZCBQVVJQT1NFLCBWQUxVRSBhbmQgQ0hBSU4uICAqLworCitleHRlcm4gdHJlZSB0cmVlX2NvbnNfc3RhdCAodHJlZSwgdHJlZSwgdHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgdHJlZV9jb25zKHQscSx3KSB0cmVlX2NvbnNfc3RhdCAodCxxLHcgTUVNX1NUQVRfSU5GTykKKworLyogUmV0dXJuIHRoZSBsYXN0IHRyZWUgbm9kZSBpbiBhIGNoYWluLiAgKi8KKworZXh0ZXJuIHRyZWUgdHJlZV9sYXN0ICh0cmVlKTsKKworLyogUmV2ZXJzZSB0aGUgb3JkZXIgb2YgZWxlbWVudHMgaW4gYSBjaGFpbiwgYW5kIHJldHVybiB0aGUgbmV3IGhlYWQuICAqLworCitleHRlcm4gdHJlZSBucmV2ZXJzZSAodHJlZSk7CisKKy8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiBhIGNoYWluIG9mIG5vZGVzCisgICAobnVtYmVyIG9mIGNoYWluIHBvaW50ZXJzIHRvIGZvbGxvdyBiZWZvcmUgcmVhY2hpbmcgYSBudWxsIHBvaW50ZXIpLiAgKi8KKworZXh0ZXJuIGludCBsaXN0X2xlbmd0aCAoY29uc3RfdHJlZSk7CisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBGSUVMRF9ERUNMcyBpbiBhIHR5cGUuICAqLworCitleHRlcm4gaW50IGZpZWxkc19sZW5ndGggKGNvbnN0X3RyZWUpOworCisvKiBSZXR1cm5zIHRoZSBmaXJzdCBGSUVMRF9ERUNMIGluIGEgdHlwZS4gICovCisKK2V4dGVybiB0cmVlIGZpcnN0X2ZpZWxkIChjb25zdF90cmVlKTsKKworLyogR2l2ZW4gYW4gaW5pdGlhbGl6ZXIgSU5JVCwgcmV0dXJuIFRSVUUgaWYgSU5JVCBpcyB6ZXJvIG9yIHNvbWUKKyAgIGFnZ3JlZ2F0ZSBvZiB6ZXJvcy4gIE90aGVyd2lzZSByZXR1cm4gRkFMU0UuICAqLworCitleHRlcm4gYm9vbCBpbml0aWFsaXplcl96ZXJvcCAoY29uc3RfdHJlZSk7CisKKy8qIEdpdmVuIGEgQ09OU1RSVUNUT1IgQ1RPUiwgcmV0dXJuIHRoZSBlbGVtZW50IHZhbHVlcyBhcyBhIHZlY3Rvci4gICovCisKK2V4dGVybiB2ZWM8dHJlZSwgdmFfZ2M+ICpjdG9yX3RvX3ZlYyAodHJlZSk7CisKK2V4dGVybiBib29sIGNhdGVnb3JpemVfY3Rvcl9lbGVtZW50cyAoY29uc3RfdHJlZSwgSE9TVF9XSURFX0lOVCAqLAorCQkJCSAgICAgIEhPU1RfV0lERV9JTlQgKiwgYm9vbCAqKTsKKworZXh0ZXJuIGJvb2wgY29tcGxldGVfY3Rvcl9hdF9sZXZlbF9wIChjb25zdF90cmVlLCBIT1NUX1dJREVfSU5ULCBjb25zdF90cmVlKTsKKworLyogaW50ZWdlcl96ZXJvcCAodHJlZSB4KSBpcyBub256ZXJvIGlmIFggaXMgYW4gaW50ZWdlciBjb25zdGFudCBvZiB2YWx1ZSAwLiAgKi8KKworZXh0ZXJuIGludCBpbnRlZ2VyX3plcm9wIChjb25zdF90cmVlKTsKKworLyogaW50ZWdlcl9vbmVwICh0cmVlIHgpIGlzIG5vbnplcm8gaWYgWCBpcyBhbiBpbnRlZ2VyIGNvbnN0YW50IG9mIHZhbHVlIDEuICAqLworCitleHRlcm4gaW50IGludGVnZXJfb25lcCAoY29uc3RfdHJlZSk7CisKKy8qIGludGVnZXJfYWxsX29uZXNwICh0cmVlIHgpIGlzIG5vbnplcm8gaWYgWCBpcyBhbiBpbnRlZ2VyIGNvbnN0YW50CisgICBhbGwgb2Ygd2hvc2Ugc2lnbmlmaWNhbnQgYml0cyBhcmUgMS4gICovCisKK2V4dGVybiBpbnQgaW50ZWdlcl9hbGxfb25lc3AgKGNvbnN0X3RyZWUpOworCisvKiBpbnRlZ2VyX3BvdzJwICh0cmVlIHgpIGlzIG5vbnplcm8gaXMgWCBpcyBhbiBpbnRlZ2VyIGNvbnN0YW50IHdpdGgKKyAgIGV4YWN0bHkgb25lIGJpdCAxLiAgKi8KKworZXh0ZXJuIGludCBpbnRlZ2VyX3BvdzJwIChjb25zdF90cmVlKTsKKworLyogaW50ZWdlcl9ub256ZXJvcCAodHJlZSB4KSBpcyBub256ZXJvIGlmIFggaXMgYW4gaW50ZWdlciBjb25zdGFudAorICAgd2l0aCBhIG5vbnplcm8gdmFsdWUuICAqLworCitleHRlcm4gaW50IGludGVnZXJfbm9uemVyb3AgKGNvbnN0X3RyZWUpOworCitleHRlcm4gYm9vbCBjc3RfYW5kX2ZpdHNfaW5faHdpIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIG51bV9lbmRpbmdfemVyb3MgKGNvbnN0X3RyZWUpOworCisvKiBmaXhlZF96ZXJvcCAodHJlZSB4KSBpcyBub256ZXJvIGlmIFggaXMgYSBmaXhlZC1wb2ludCBjb25zdGFudCBvZgorICAgdmFsdWUgMC4gICovCisKK2V4dGVybiBpbnQgZml4ZWRfemVyb3AgKGNvbnN0X3RyZWUpOworCisvKiBzdGF0aWNwICh0cmVlIHgpIGlzIG5vbnplcm8gaWYgWCBpcyBhIHJlZmVyZW5jZSB0byBkYXRhIGFsbG9jYXRlZAorICAgYXQgYSBmaXhlZCBhZGRyZXNzIGluIG1lbW9yeS4gIFJldHVybnMgdGhlIG91dGVybW9zdCBkYXRhLiAgKi8KKworZXh0ZXJuIHRyZWUgc3RhdGljcCAodHJlZSk7CisKKy8qIHNhdmVfZXhwciAoRVhQKSByZXR1cm5zIGFuIGV4cHJlc3Npb24gZXF1aXZhbGVudCB0byBFWFAKKyAgIGJ1dCBpdCBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB3aXRoaW4gY29udGV4dCBDVFgKKyAgIGFuZCBvbmx5IGV2YWx1YXRlIEVYUCBvbmNlLiAgKi8KKworZXh0ZXJuIHRyZWUgc2F2ZV9leHByICh0cmVlKTsKKworLyogTG9vayBpbnNpZGUgRVhQUiBhbmQgaW50byBhbnkgc2ltcGxlIGFyaXRobWV0aWMgb3BlcmF0aW9ucy4gIFJldHVybgorICAgdGhlIGlubmVybW9zdCBub24tYXJpdGhtZXRpYyBub2RlLiAgKi8KKworZXh0ZXJuIHRyZWUgc2tpcF9zaW1wbGVfYXJpdGhtZXRpYyAodHJlZSk7CisKKy8qIFJldHVybiB3aGljaCB0cmVlIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IFQuICAqLworCitlbnVtIHRyZWVfbm9kZV9zdHJ1Y3R1cmVfZW51bSB0cmVlX25vZGVfc3RydWN0dXJlIChjb25zdF90cmVlKTsKKworLyogUmV0dXJuIHRydWUgaWYgRVhQIGNvbnRhaW5zIGEgUExBQ0VIT0xERVJfRVhQUiwgaS5lLiBpZiBpdCByZXByZXNlbnRzIGEKKyAgIHNpemUgb3Igb2Zmc2V0IHRoYXQgZGVwZW5kcyBvbiBhIGZpZWxkIHdpdGhpbiBhIHJlY29yZC4gICovCisKK2V4dGVybiBib29sIGNvbnRhaW5zX3BsYWNlaG9sZGVyX3AgKGNvbnN0X3RyZWUpOworCisvKiBUaGlzIG1hY3JvIGNhbGxzIHRoZSBhYm92ZSBmdW5jdGlvbiBidXQgc2hvcnQtY2lyY3VpdHMgdGhlIGNvbW1vbgorICAgY2FzZSBvZiBhIGNvbnN0YW50IHRvIHNhdmUgdGltZS4gIEFsc28gY2hlY2sgZm9yIG51bGwuICAqLworCisjZGVmaW5lIENPTlRBSU5TX1BMQUNFSE9MREVSX1AoRVhQKSBcCisgICgoRVhQKSAhPSAwICYmICEgVFJFRV9DT05TVEFOVCAoRVhQKSAmJiBjb250YWluc19wbGFjZWhvbGRlcl9wIChFWFApKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBhbnkgcGFydCBvZiB0aGUgc3RydWN0dXJlIG9mIFRZUEUgaW52b2x2ZXMgYSBQTEFDRUhPTERFUl9FWFBSCisgICBkaXJlY3RseS4gIFRoaXMgaW5jbHVkZXMgc2l6ZSwgYm91bmRzLCBxdWFsaWZpZXJzIChmb3IgUVVBTF9VTklPTl9UWVBFKSBhbmQKKyAgIGZpZWxkIHBvc2l0aW9ucy4gICovCisKK2V4dGVybiBib29sIHR5cGVfY29udGFpbnNfcGxhY2Vob2xkZXJfcCAodHJlZSk7CisKKy8qIEdpdmVuIGEgdHJlZSBFWFAsIGZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIHJlZmVyZW5jZXMgdG8gZmllbGRzCisgICBpbiBhIFBMQUNFSE9MREVSX0VYUFIgYW5kIHBsYWNlIHRoZW0gaW4gdmVjdG9yIFJFRlMgd2l0aG91dAorICAgZHVwbGljYXRlcy4gIEFsc28gcmVjb3JkIFZBUl9ERUNMcyBhbmQgQ09OU1RfREVDTHMuICBOb3RlIHRoYXQKKyAgIHdlIGFzc3VtZSBoZXJlIHRoYXQgRVhQIGNvbnRhaW5zIG9ubHkgYXJpdGhtZXRpYyBleHByZXNzaW9ucworICAgb3IgQ0FMTF9FWFBScyB3aXRoIFBMQUNFSE9MREVSX0VYUFJzIG9jY3VycmluZyBvbmx5IGluIHRoZWlyCisgICBhcmd1bWVudCBsaXN0LiAgKi8KKworZXh0ZXJuIHZvaWQgZmluZF9wbGFjZWhvbGRlcl9pbl9leHByICh0cmVlLCB2ZWM8dHJlZT4gKik7CisKKy8qIFRoaXMgbWFjcm8gY2FsbHMgdGhlIGFib3ZlIGZ1bmN0aW9uIGJ1dCBzaG9ydC1jaXJjdWl0cyB0aGUgY29tbW9uCisgICBjYXNlIG9mIGEgY29uc3RhbnQgdG8gc2F2ZSB0aW1lIGFuZCBhbHNvIGNoZWNrcyBmb3IgTlVMTC4gICovCisKKyNkZWZpbmUgRklORF9QTEFDRUhPTERFUl9JTl9FWFBSKEVYUCwgVikgXAorZG8gewkJCQkJIFwKKyAgaWYoKEVYUCkgJiYgIVRSRUVfQ09OU1RBTlQgKEVYUCkpCSBcCisgICAgZmluZF9wbGFjZWhvbGRlcl9pbl9leHByIChFWFAsIFYpOwkgXAorfSB3aGlsZSAoMCkKKworLyogR2l2ZW4gYSB0cmVlIEVYUCwgYSBGSUVMRF9ERUNMIEYsIGFuZCBhIHJlcGxhY2VtZW50IHZhbHVlIFIsCisgICByZXR1cm4gYSB0cmVlIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHJlZmVyZW5jZXMgdG8gRiBpbiBhCisgICBQTEFDRUhPTERFUl9FWFBSIHJlcGxhY2VkIGJ5IFIuICBBbHNvIGhhbmRsZSBWQVJfREVDTHMgYW5kCisgICBDT05TVF9ERUNMcy4gIE5vdGUgdGhhdCB3ZSBhc3N1bWUgaGVyZSB0aGF0IEVYUCBjb250YWlucyBvbmx5CisgICBhcml0aG1ldGljIGV4cHJlc3Npb25zIG9yIENBTExfRVhQUnMgd2l0aCBQTEFDRUhPTERFUl9FWFBScworICAgb2NjdXJyaW5nIG9ubHkgaW4gdGhlaXIgYXJndW1lbnQgbGlzdC4gICovCisKK2V4dGVybiB0cmVlIHN1YnN0aXR1dGVfaW5fZXhwciAodHJlZSwgdHJlZSwgdHJlZSk7CisKKy8qIFRoaXMgbWFjcm8gY2FsbHMgdGhlIGFib3ZlIGZ1bmN0aW9uIGJ1dCBzaG9ydC1jaXJjdWl0cyB0aGUgY29tbW9uCisgICBjYXNlIG9mIGEgY29uc3RhbnQgdG8gc2F2ZSB0aW1lIGFuZCBhbHNvIGNoZWNrcyBmb3IgTlVMTC4gICovCisKKyNkZWZpbmUgU1VCU1RJVFVURV9JTl9FWFBSKEVYUCwgRiwgUikgXAorICAoKEVYUCkgPT0gMCB8fCBUUkVFX0NPTlNUQU5UIChFWFApID8gKEVYUCkgOiBzdWJzdGl0dXRlX2luX2V4cHIgKEVYUCwgRiwgUikpCisKKy8qIFNpbWlsYXIsIGJ1dCBsb29rIGZvciBhIFBMQUNFSE9MREVSX0VYUFIgaW4gRVhQIGFuZCBmaW5kIGEgcmVwbGFjZW1lbnQKKyAgIGZvciBpdCB3aXRoaW4gT0JKLCBhIHRyZWUgdGhhdCBpcyBhbiBvYmplY3Qgb3IgYSBjaGFpbiBvZiByZWZlcmVuY2VzLiAgKi8KKworZXh0ZXJuIHRyZWUgc3Vic3RpdHV0ZV9wbGFjZWhvbGRlcl9pbl9leHByICh0cmVlLCB0cmVlKTsKKworLyogVGhpcyBtYWNybyBjYWxscyB0aGUgYWJvdmUgZnVuY3Rpb24gYnV0IHNob3J0LWNpcmN1aXRzIHRoZSBjb21tb24KKyAgIGNhc2Ugb2YgYSBjb25zdGFudCB0byBzYXZlIHRpbWUgYW5kIGFsc28gY2hlY2tzIGZvciBOVUxMLiAgKi8KKworI2RlZmluZSBTVUJTVElUVVRFX1BMQUNFSE9MREVSX0lOX0VYUFIoRVhQLCBPQkopIFwKKyAgKChFWFApID09IDAgfHwgVFJFRV9DT05TVEFOVCAoRVhQKSA/IChFWFApCVwKKyAgIDogc3Vic3RpdHV0ZV9wbGFjZWhvbGRlcl9pbl9leHByIChFWFAsIE9CSikpCisKKy8qIHZhcmlhYmxlX3NpemUgKEVYUCkgaXMgbGlrZSBzYXZlX2V4cHIgKEVYUCkgZXhjZXB0IHRoYXQgaXQKKyAgIGlzIGZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIHNvbWV0aGluZyB0aGF0IGlzIHBhcnQgb2YgYQorICAgdmFyaWFibGUgc2l6ZSBmb3IgYSBkYXRhIHR5cGUuICBJdCBtYWtlcyBzcGVjaWFsIGFycmFuZ2VtZW50cworICAgdG8gY29tcHV0ZSB0aGUgdmFsdWUgYXQgdGhlIHJpZ2h0IHRpbWUgd2hlbiB0aGUgZGF0YSB0eXBlCisgICBiZWxvbmdzIHRvIGEgZnVuY3Rpb24gcGFyYW1ldGVyLiAgKi8KKworZXh0ZXJuIHRyZWUgdmFyaWFibGVfc2l6ZSAodHJlZSk7CisKKy8qIHN0YWJpbGl6ZV9yZWZlcmVuY2UgKEVYUCkgcmV0dXJucyBhIHJlZmVyZW5jZSBlcXVpdmFsZW50IHRvIEVYUAorICAgYnV0IGl0IGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzCisgICBhbmQgb25seSBldmFsdWF0ZSB0aGUgc3ViZXhwcmVzc2lvbnMgb25jZS4gICovCisKK2V4dGVybiB0cmVlIHN0YWJpbGl6ZV9yZWZlcmVuY2UgKHRyZWUpOworCisvKiBTdWJyb3V0aW5lIG9mIHN0YWJpbGl6ZV9yZWZlcmVuY2U7IHRoaXMgaXMgY2FsbGVkIGZvciBzdWJ0cmVlcyBvZgorICAgcmVmZXJlbmNlcy4gIEFueSBleHByZXNzaW9uIHdpdGggc2lkZS1lZmZlY3RzIG11c3QgYmUgcHV0IGluIGEgU0FWRV9FWFBSCisgICB0byBlbnN1cmUgdGhhdCBpdCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiAgKi8KKworZXh0ZXJuIHRyZWUgc3RhYmlsaXplX3JlZmVyZW5jZV8xICh0cmVlKTsKKworLyogUmV0dXJuIEVYUCwgc3RyaXBwZWQgb2YgYW55IGNvbnZlcnNpb25zIHRvIHdpZGVyIHR5cGVzCisgICBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIHRvIHR5cGUgRk9SX1RZUEUKKyAgIGlzIHRoZSBzYW1lIGFzIGlmIEVYUCB3ZXJlIGNvbnZlcnRlZCB0byBGT1JfVFlQRS4KKyAgIElmIEZPUl9UWVBFIGlzIDAsIGl0IHNpZ25pZmllcyBFWFAncyB0eXBlLiAgKi8KKworZXh0ZXJuIHRyZWUgZ2V0X3Vud2lkZW5lZCAodHJlZSwgdHJlZSk7CisKKy8qIFJldHVybiBPUCBvciBhIHNpbXBsZXIgZXhwcmVzc2lvbiBmb3IgYSBuYXJyb3dlciB2YWx1ZQorICAgd2hpY2ggY2FuIGJlIHNpZ24tZXh0ZW5kZWQgb3IgemVyby1leHRlbmRlZCB0byBnaXZlIGJhY2sgT1AuCisgICBTdG9yZSBpbiAqVU5TSUdORURQX1BUUiBlaXRoZXIgMSBpZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHplcm8tZXh0ZW5kZWQKKyAgIG9yIDAgaWYgdGhlIHZhbHVlIHNob3VsZCBiZSBzaWduLWV4dGVuZGVkLiAgKi8KKworZXh0ZXJuIHRyZWUgZ2V0X25hcnJvd2VyICh0cmVlLCBpbnQgKik7CisKKy8qIFJldHVybiB0cnVlIGlmIFQgaXMgYW4gZXhwcmVzc2lvbiB0aGF0IGdldF9pbm5lcl9yZWZlcmVuY2UgaGFuZGxlcy4gICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraGFuZGxlZF9jb21wb25lbnRfcCAoY29uc3RfdHJlZSB0KQoreworICBzd2l0Y2ggKFRSRUVfQ09ERSAodCkpCisgICAgeworICAgIGNhc2UgQ09NUE9ORU5UX1JFRjoKKyAgICBjYXNlIEJJVF9GSUVMRF9SRUY6CisgICAgY2FzZSBBUlJBWV9SRUY6CisgICAgY2FzZSBBUlJBWV9SQU5HRV9SRUY6CisgICAgY2FzZSBSRUFMUEFSVF9FWFBSOgorICAgIGNhc2UgSU1BR1BBUlRfRVhQUjoKKyAgICBjYXNlIFZJRVdfQ09OVkVSVF9FWFBSOgorICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLyogR2l2ZW4gYW4gZXhwcmVzc2lvbiBFWFAgdGhhdCBpcyBhIGhhbmRsZWRfY29tcG9uZW50X3AsCisgICBsb29rIGZvciB0aGUgdWx0aW1hdGUgY29udGFpbmluZyBvYmplY3QsIHdoaWNoIGlzIHJldHVybmVkIGFuZCBzcGVjaWZ5CisgICB0aGUgYWNjZXNzIHBvc2l0aW9uIGFuZCBzaXplLiAgKi8KKworZXh0ZXJuIHRyZWUgZ2V0X2lubmVyX3JlZmVyZW5jZSAodHJlZSwgSE9TVF9XSURFX0lOVCAqLCBIT1NUX1dJREVfSU5UICosCisJCQkJIHRyZWUgKiwgZW51bSBtYWNoaW5lX21vZGUgKiwgaW50ICosIGludCAqLAorCQkJCSBib29sKTsKKworLyogUmV0dXJuIGEgdHJlZSBvZiBzaXpldHlwZSByZXByZXNlbnRpbmcgdGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgZWxlbWVudAorICAgb2YgRVhQLCBhbiBBUlJBWV9SRUYgb3IgYW4gQVJSQVlfUkFOR0VfUkVGLiAgKi8KKworZXh0ZXJuIHRyZWUgYXJyYXlfcmVmX2VsZW1lbnRfc2l6ZSAodHJlZSk7CisKK2Jvb2wgYXJyYXlfYXRfc3RydWN0X2VuZF9wICh0cmVlKTsKKworLyogUmV0dXJuIGEgdHJlZSByZXByZXNlbnRpbmcgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSBhcnJheSBtZW50aW9uZWQgaW4KKyAgIEVYUCwgYW4gQVJSQVlfUkVGIG9yIGFuIEFSUkFZX1JBTkdFX1JFRi4gICovCisKK2V4dGVybiB0cmVlIGFycmF5X3JlZl9sb3dfYm91bmQgKHRyZWUpOworCisvKiBSZXR1cm4gYSB0cmVlIHJlcHJlc2VudGluZyB0aGUgdXBwZXIgYm91bmQgb2YgdGhlIGFycmF5IG1lbnRpb25lZCBpbgorICAgRVhQLCBhbiBBUlJBWV9SRUYgb3IgYW4gQVJSQVlfUkFOR0VfUkVGLiAgKi8KKworZXh0ZXJuIHRyZWUgYXJyYXlfcmVmX3VwX2JvdW5kICh0cmVlKTsKKworLyogUmV0dXJuIGEgdHJlZSByZXByZXNlbnRpbmcgdGhlIG9mZnNldCwgaW4gYnl0ZXMsIG9mIHRoZSBmaWVsZCByZWZlcmVuY2VkCisgICBieSBFWFAuICBUaGlzIGRvZXMgbm90IGluY2x1ZGUgYW55IG9mZnNldCBpbiBERUNMX0ZJRUxEX0JJVF9PRkZTRVQuICAqLworCitleHRlcm4gdHJlZSBjb21wb25lbnRfcmVmX2ZpZWxkX29mZnNldCAodHJlZSk7CisKKy8qIEdpdmVuIGEgREVDTCBvciBUWVBFLCByZXR1cm4gdGhlIHNjb3BlIGluIHdoaWNoIGl0IHdhcyBkZWNsYXJlZCwgb3IKKyAgIE5VTF9UUkVFIGlmIHRoZXJlIGlzIG5vIGNvbnRhaW5pbmcgc2NvcGUuICAqLworCitleHRlcm4gdHJlZSBnZXRfY29udGFpbmluZ19zY29wZSAoY29uc3RfdHJlZSk7CisKKy8qIFJldHVybiB0aGUgRlVOQ1RJT05fREVDTCB3aGljaCBwcm92aWRlcyB0aGlzIF9ERUNMIHdpdGggaXRzIGNvbnRleHQsCisgICBvciB6ZXJvIGlmIG5vbmUuICAqLworZXh0ZXJuIHRyZWUgZGVjbF9mdW5jdGlvbl9jb250ZXh0IChjb25zdF90cmVlKTsKKworLyogUmV0dXJuIHRoZSBSRUNPUkRfVFlQRSwgVU5JT05fVFlQRSwgb3IgUVVBTF9VTklPTl9UWVBFIHdoaWNoIHByb3ZpZGVzCisgICB0aGlzIF9ERUNMIHdpdGggaXRzIGNvbnRleHQsIG9yIHplcm8gaWYgbm9uZS4gICovCitleHRlcm4gdHJlZSBkZWNsX3R5cGVfY29udGV4dCAoY29uc3RfdHJlZSk7CisKKy8qIFJldHVybiAxIGlmIEVYUFIgaXMgdGhlIHJlYWwgY29uc3RhbnQgemVyby4gICovCitleHRlcm4gaW50IHJlYWxfemVyb3AgKGNvbnN0X3RyZWUpOworDAorLyogRGVjbGFyZSBjb21tb25seSB1c2VkIHZhcmlhYmxlcyBmb3IgdHJlZSBzdHJ1Y3R1cmUuICAqLworCisvKiBOb256ZXJvIG1lYW5zIGx2YWx1ZXMgYXJlIGxpbWl0ZWQgdG8gdGhvc2UgdmFsaWQgaW4gcGVkYW50aWMgQU5TSSBDLgorICAgWmVybyBtZWFucyBhbGxvdyBleHRlbmRlZCBsdmFsdWVzLiAgKi8KKworZXh0ZXJuIGludCBwZWRhbnRpY19sdmFsdWVzOworCisvKiBQb2ludHMgdG8gdGhlIEZVTkNUSU9OX0RFQ0wgb2YgdGhlIGZ1bmN0aW9uIHdob3NlIGJvZHkgd2UgYXJlIHJlYWRpbmcuICAqLworCitleHRlcm4gR1RZKCgpKSB0cmVlIGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKKworLyogTm9uemVybyBtZWFucyBhIEZVTkNfQkVHSU4gbGFiZWwgd2FzIGVtaXR0ZWQuICAqLworZXh0ZXJuIEdUWSgoKSkgY29uc3QgY2hhciAqIGN1cnJlbnRfZnVuY3Rpb25fZnVuY19iZWdpbl9sYWJlbDsKKwwKKy8qIEl0ZXJhdG9yIGZvciBnb2luZyB0aHJvdWdoIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICB0cmVlIG5leHQ7CQkJLyogVFJFRV9MSVNUIHBvaW50aW5nIHRvIHRoZSBuZXh0IGFyZ3VtZW50ICovCit9IGZ1bmN0aW9uX2FyZ3NfaXRlcmF0b3I7CisKKy8qIEluaXRpYWxpemUgdGhlIGl0ZXJhdG9yIEkgd2l0aCBhcmd1bWVudHMgZnJvbSBmdW5jdGlvbiBGTkRFQ0wgICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZnVuY3Rpb25fYXJnc19pdGVyX2luaXQgKGZ1bmN0aW9uX2FyZ3NfaXRlcmF0b3IgKmksIGNvbnN0X3RyZWUgZm50eXBlKQoreworICBpLT5uZXh0ID0gVFlQRV9BUkdfVFlQRVMgKGZudHlwZSk7Cit9CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdGhhdCBob2xkcyB0aGUgbmV4dCBhcmd1bWVudCBpZiB0aGVyZSBhcmUgbW9yZSBhcmd1bWVudHMgdG8KKyAgIGhhbmRsZSwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlICoKK2Z1bmN0aW9uX2FyZ3NfaXRlcl9jb25kX3B0ciAoZnVuY3Rpb25fYXJnc19pdGVyYXRvciAqaSkKK3sKKyAgcmV0dXJuIChpLT5uZXh0KSA/ICZUUkVFX1ZBTFVFIChpLT5uZXh0KSA6IE5VTEw7Cit9CisKKy8qIFJldHVybiB0aGUgbmV4dCBhcmd1bWVudCBpZiB0aGVyZSBhcmUgbW9yZSBhcmd1bWVudHMgdG8gaGFuZGxlLCBvdGhlcndpc2UKKyAgIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIGlubGluZSB0cmVlCitmdW5jdGlvbl9hcmdzX2l0ZXJfY29uZCAoZnVuY3Rpb25fYXJnc19pdGVyYXRvciAqaSkKK3sKKyAgcmV0dXJuIChpLT5uZXh0KSA/IFRSRUVfVkFMVUUgKGktPm5leHQpIDogTlVMTF9UUkVFOworfQorCisvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGFyZ3VtZW50LiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZnVuY3Rpb25fYXJnc19pdGVyX25leHQgKGZ1bmN0aW9uX2FyZ3NfaXRlcmF0b3IgKmkpCit7CisgIGdjY19hc3NlcnQgKGktPm5leHQgIT0gTlVMTF9UUkVFKTsKKyAgaS0+bmV4dCA9IFRSRUVfQ0hBSU4gKGktPm5leHQpOworfQorCisvKiBXZSBzZXQgQkxPQ0tfU09VUkNFX0xPQ0FUSU9OIG9ubHkgdG8gaW5saW5lZCBmdW5jdGlvbiBlbnRyeSBwb2ludHMuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2lubGluZWRfZnVuY3Rpb25fb3V0ZXJfc2NvcGVfcCAoY29uc3RfdHJlZSBibG9jaykKK3sKKyByZXR1cm4gTE9DQVRJT05fTE9DVVMgKEJMT0NLX1NPVVJDRV9MT0NBVElPTiAoYmxvY2spKSAhPSBVTktOT1dOX0xPQ0FUSU9OOworfQorCisvKiBMb29wIG92ZXIgYWxsIGZ1bmN0aW9uIGFyZ3VtZW50cyBvZiBGTlRZUEUuICBJbiBlYWNoIGl0ZXJhdGlvbiwgUFRSIGlzIHNldAorICAgdG8gcG9pbnQgdG8gdGhlIG5leHQgdHJlZSBlbGVtZW50LiAgSVRFUiBpcyBhbiBpbnN0YW5jZSBvZgorICAgZnVuY3Rpb25fYXJnc19pdGVyYXRvciB1c2VkIHRvIGl0ZXJhdGUgdGhlIGFyZ3VtZW50cy4gICovCisjZGVmaW5lIEZPUkVBQ0hfRlVOQ1RJT05fQVJHU19QVFIoRk5UWVBFLCBQVFIsIElURVIpCQkJXAorICBmb3IgKGZ1bmN0aW9uX2FyZ3NfaXRlcl9pbml0ICgmKElURVIpLCAoRk5UWVBFKSk7CQkJXAorICAgICAgIChQVFIgPSBmdW5jdGlvbl9hcmdzX2l0ZXJfY29uZF9wdHIgKCYoSVRFUikpKSAhPSBOVUxMOwkJXAorICAgICAgIGZ1bmN0aW9uX2FyZ3NfaXRlcl9uZXh0ICgmKElURVIpKSkKKworLyogTG9vcCBvdmVyIGFsbCBmdW5jdGlvbiBhcmd1bWVudHMgb2YgRk5UWVBFLiAgSW4gZWFjaCBpdGVyYXRpb24sIFRSRUUgaXMgc2V0CisgICB0byB0aGUgbmV4dCB0cmVlIGVsZW1lbnQuICBJVEVSIGlzIGFuIGluc3RhbmNlIG9mIGZ1bmN0aW9uX2FyZ3NfaXRlcmF0b3IKKyAgIHVzZWQgdG8gaXRlcmF0ZSB0aGUgYXJndW1lbnRzLiAgKi8KKyNkZWZpbmUgRk9SRUFDSF9GVU5DVElPTl9BUkdTKEZOVFlQRSwgVFJFRSwgSVRFUikJCQlcCisgIGZvciAoZnVuY3Rpb25fYXJnc19pdGVyX2luaXQgKCYoSVRFUiksIChGTlRZUEUpKTsJCQlcCisgICAgICAgKFRSRUUgPSBmdW5jdGlvbl9hcmdzX2l0ZXJfY29uZCAoJihJVEVSKSkpICE9IE5VTExfVFJFRTsJCVwKKyAgICAgICBmdW5jdGlvbl9hcmdzX2l0ZXJfbmV4dCAoJihJVEVSKSkpCisKKworDAorLyogSW4gdHJlZS5jICovCitleHRlcm4gdW5zaWduZWQgY3JjMzJfc3RyaW5nICh1bnNpZ25lZCwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB1bnNpZ25lZCBjcmMzMl9ieXRlICh1bnNpZ25lZCwgY2hhcik7CitleHRlcm4gdW5zaWduZWQgY3JjMzJfdW5zaWduZWQgKHVuc2lnbmVkLCB1bnNpZ25lZCk7CitleHRlcm4gdm9pZCBjbGVhbl9zeW1ib2xfbmFtZSAoY2hhciAqKTsKK2V4dGVybiB0cmVlIGdldF9maWxlX2Z1bmN0aW9uX25hbWUgKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdHJlZSBnZXRfY2FsbGVlX2ZuZGVjbCAoY29uc3RfdHJlZSk7CitleHRlcm4gaW50IHR5cGVfbnVtX2FyZ3VtZW50cyAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBhc3NvY2lhdGl2ZV90cmVlX2NvZGUgKGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiBib29sIGNvbW11dGF0aXZlX3RyZWVfY29kZSAoZW51bSB0cmVlX2NvZGUpOworZXh0ZXJuIGJvb2wgY29tbXV0YXRpdmVfdGVybmFyeV90cmVlX2NvZGUgKGVudW0gdHJlZV9jb2RlKTsKK2V4dGVybiB0cmVlIHVwcGVyX2JvdW5kX2luX3R5cGUgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgbG93ZXJfYm91bmRfaW5fdHlwZSAodHJlZSwgdHJlZSk7CitleHRlcm4gaW50IG9wZXJhbmRfZXF1YWxfZm9yX3BoaV9hcmdfcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBjcmVhdGVfYXJ0aWZpY2lhbF9sYWJlbCAobG9jYXRpb25fdCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0X25hbWUgKHRyZWUpOworZXh0ZXJuIGJvb2wgc3RkYXJnX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgcHJvdG90eXBlX3AgKHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfdHlwZWRlZl9kZWNsICh0cmVlIHgpOworZXh0ZXJuIGJvb2wgdHlwZWRlZl92YXJpYW50X3AgKHRyZWUpOworZXh0ZXJuIGJvb2wgYXV0b192YXJfaW5fZm5fcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9sb3dfYml0c19tYXNrICh0cmVlLCB1bnNpZ25lZCk7CitleHRlcm4gdHJlZSB0cmVlX3N0cmlwX25vcF9jb252ZXJzaW9ucyAodHJlZSk7CitleHRlcm4gdHJlZSB0cmVlX3N0cmlwX3NpZ25fbm9wX2NvbnZlcnNpb25zICh0cmVlKTsKK2V4dGVybiBjb25zdF90cmVlIHN0cmlwX2ludmFyaWFudF9yZWZzIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGxoZF9nY2NfcGVyc29uYWxpdHkgKHZvaWQpOworZXh0ZXJuIHZvaWQgYXNzaWduX2Fzc2VtYmxlcl9uYW1lX2lmX25lZWVkZWQgKHRyZWUpOworZXh0ZXJuIHZvaWQgd2Fybl9kZXByZWNhdGVkX3VzZSAodHJlZSwgdHJlZSk7CisKKwwKKy8qIEluIGNncmFwaC5jICovCitleHRlcm4gdm9pZCBjaGFuZ2VfZGVjbF9hc3NlbWJsZXJfbmFtZSAodHJlZSwgdHJlZSk7CisMCisvKiBJbiBnaW1wbGlmeS5jICovCitleHRlcm4gdHJlZSB1bnNoYXJlX2V4cHIgKHRyZWUpOworZXh0ZXJuIHRyZWUgdW5zaGFyZV9leHByX3dpdGhvdXRfbG9jYXRpb24gKHRyZWUpOworDAorLyogSW4gc3RtdC5jICovCisKK2V4dGVybiB2b2lkIGV4cGFuZF9sYWJlbCAodHJlZSk7CitleHRlcm4gdm9pZCBleHBhbmRfZ290byAodHJlZSk7CisKK2V4dGVybiBydHggZXhwYW5kX3N0YWNrX3NhdmUgKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhwYW5kX3N0YWNrX3Jlc3RvcmUgKHRyZWUpOworZXh0ZXJuIHZvaWQgZXhwYW5kX3JldHVybiAodHJlZSk7CisKKy8qIEluIHRyZWUtZWguYyAqLworZXh0ZXJuIHZvaWQgdXNpbmdfZWhfZm9yX2NsZWFudXBzICh2b2lkKTsKKworZXh0ZXJuIGJvb2wgdHJlZV9jb3VsZF90cmFwX3AgKHRyZWUpOworZXh0ZXJuIGJvb2wgb3BlcmF0aW9uX2NvdWxkX3RyYXBfaGVscGVyX3AgKGVudW0gdHJlZV9jb2RlLCBib29sLCBib29sLCBib29sLAorCQkJCQkgICBib29sLCB0cmVlLCBib29sICopOworZXh0ZXJuIGJvb2wgb3BlcmF0aW9uX2NvdWxkX3RyYXBfcCAoZW51bSB0cmVlX2NvZGUsIGJvb2wsIGJvb2wsIHRyZWUpOworZXh0ZXJuIGJvb2wgdHJlZV9jb3VsZF90aHJvd19wICh0cmVlKTsKKworLyogQ29tcGFyZSBhbmQgaGFzaCBmb3IgYW55IHN0cnVjdHVyZSB3aGljaCBiZWdpbnMgd2l0aCBhIGNhbm9uaWNhbAorICAgcG9pbnRlci4gIEFzc3VtZXMgYWxsIHBvaW50ZXJzIGFyZSBpbnRlcmNoYW5nZWFibGUsIHdoaWNoIGlzIHNvcnQKKyAgIG9mIGFscmVhZHkgYXNzdW1lZCBieSBnY2MgZWxzZXdoZXJlIElJUkMuICAqLworCitzdGF0aWMgaW5saW5lIGludAorc3RydWN0X3B0cl9lcSAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKyAgY29uc3Qgdm9pZCAqIGNvbnN0ICogeCA9IChjb25zdCB2b2lkICogY29uc3QgKikgYTsKKyAgY29uc3Qgdm9pZCAqIGNvbnN0ICogeSA9IChjb25zdCB2b2lkICogY29uc3QgKikgYjsKKyAgcmV0dXJuICp4ID09ICp5OworfQorCitzdGF0aWMgaW5saW5lIGhhc2h2YWxfdAorc3RydWN0X3B0cl9oYXNoIChjb25zdCB2b2lkICphKQoreworICBjb25zdCB2b2lkICogY29uc3QgKiB4ID0gKGNvbnN0IHZvaWQgKiBjb25zdCAqKSBhOworICByZXR1cm4gKGludHB0cl90KSp4ID4+IDQ7Cit9CisKKy8qIEluIGZvbGQtY29uc3QuYyAqLworCisvKiBOb24temVybyBpZiB3ZSBhcmUgZm9sZGluZyBjb25zdGFudHMgaW5zaWRlIGFuIGluaXRpYWxpemVyOyB6ZXJvCisgICBvdGhlcndpc2UuICAqLworZXh0ZXJuIGludCBmb2xkaW5nX2luaXRpYWxpemVyOworCisvKiBDb252ZXJ0IGJldHdlZW4gdHJlZXMgYW5kIG5hdGl2ZSBtZW1vcnkgcmVwcmVzZW50YXRpb24uICAqLworZXh0ZXJuIGludCBuYXRpdmVfZW5jb2RlX2V4cHIgKGNvbnN0X3RyZWUsIHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKK2V4dGVybiB0cmVlIG5hdGl2ZV9pbnRlcnByZXRfZXhwciAodHJlZSwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQpOworCisvKiBGb2xkIGNvbnN0YW50cyBhcyBtdWNoIGFzIHBvc3NpYmxlIGluIGFuIGV4cHJlc3Npb24uCisgICBSZXR1cm5zIHRoZSBzaW1wbGlmaWVkIGV4cHJlc3Npb24uCisgICBBY3RzIG9ubHkgb24gdGhlIHRvcCBsZXZlbCBvZiB0aGUgZXhwcmVzc2lvbjsKKyAgIGlmIHRoZSBhcmd1bWVudCBpdHNlbGYgY2Fubm90IGJlIHNpbXBsaWZpZWQsIGl0cworICAgc3ViZXhwcmVzc2lvbnMgYXJlIG5vdCBjaGFuZ2VkLiAgKi8KKworZXh0ZXJuIHRyZWUgZm9sZCAodHJlZSk7CisjZGVmaW5lIGZvbGRfdW5hcnkoQ09ERSxUMSxUMilcCisgICBmb2xkX3VuYXJ5X2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgQ09ERSwgVDEsIFQyKQorZXh0ZXJuIHRyZWUgZm9sZF91bmFyeV9sb2MgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlKTsKKyNkZWZpbmUgZm9sZF91bmFyeV9pZ25vcmVfb3ZlcmZsb3coQ09ERSxUMSxUMilcCisgICBmb2xkX3VuYXJ5X2lnbm9yZV9vdmVyZmxvd19sb2MgKFVOS05PV05fTE9DQVRJT04sIENPREUsIFQxLCBUMikKK2V4dGVybiB0cmVlIGZvbGRfdW5hcnlfaWdub3JlX292ZXJmbG93X2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpOworI2RlZmluZSBmb2xkX2JpbmFyeShDT0RFLFQxLFQyLFQzKVwKKyAgIGZvbGRfYmluYXJ5X2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgQ09ERSwgVDEsIFQyLCBUMykKK2V4dGVybiB0cmVlIGZvbGRfYmluYXJ5X2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIHRyZWUpOworI2RlZmluZSBmb2xkX3Rlcm5hcnkoQ09ERSxUMSxUMixUMyxUNClcCisgICBmb2xkX3Rlcm5hcnlfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBDT0RFLCBUMSwgVDIsIFQzLCBUNCkKK2V4dGVybiB0cmVlIGZvbGRfdGVybmFyeV9sb2MgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKKyNkZWZpbmUgZm9sZF9idWlsZDEoYyx0MSx0MilcCisgICBmb2xkX2J1aWxkMV9zdGF0X2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgYywgdDEsIHQyIE1FTV9TVEFUX0lORk8pCisjZGVmaW5lIGZvbGRfYnVpbGQxX2xvYyhsLGMsdDEsdDIpXAorICAgZm9sZF9idWlsZDFfc3RhdF9sb2MgKGwsIGMsIHQxLCB0MiBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgZm9sZF9idWlsZDFfc3RhdF9sb2MgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLAorCQkJCSAgdHJlZSBNRU1fU1RBVF9ERUNMKTsKKyNkZWZpbmUgZm9sZF9idWlsZDIoYyx0MSx0Mix0MylcCisgICBmb2xkX2J1aWxkMl9zdGF0X2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgYywgdDEsIHQyLCB0MyBNRU1fU1RBVF9JTkZPKQorI2RlZmluZSBmb2xkX2J1aWxkMl9sb2MobCxjLHQxLHQyLHQzKVwKKyAgIGZvbGRfYnVpbGQyX3N0YXRfbG9jIChsLCBjLCB0MSwgdDIsIHQzIE1FTV9TVEFUX0lORk8pCitleHRlcm4gdHJlZSBmb2xkX2J1aWxkMl9zdGF0X2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsCisJCQkJICB0cmVlIE1FTV9TVEFUX0RFQ0wpOworI2RlZmluZSBmb2xkX2J1aWxkMyhjLHQxLHQyLHQzLHQ0KVwKKyAgIGZvbGRfYnVpbGQzX3N0YXRfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBjLCB0MSwgdDIsIHQzLCB0NCBNRU1fU1RBVF9JTkZPKQorI2RlZmluZSBmb2xkX2J1aWxkM19sb2MobCxjLHQxLHQyLHQzLHQ0KVwKKyAgIGZvbGRfYnVpbGQzX3N0YXRfbG9jIChsLCBjLCB0MSwgdDIsIHQzLCB0NCBNRU1fU1RBVF9JTkZPKQorZXh0ZXJuIHRyZWUgZm9sZF9idWlsZDNfc3RhdF9sb2MgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJCSAgdHJlZSBNRU1fU1RBVF9ERUNMKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbGQxX2luaXRpYWxpemVyX2xvYyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsZDJfaW5pdGlhbGl6ZXJfbG9jIChsb2NhdGlvbl90LCBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX2J1aWxkM19pbml0aWFsaXplcl9sb2MgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKKyNkZWZpbmUgZm9sZF9idWlsZF9jYWxsX2FycmF5KFQxLFQyLE4sVDQpXAorICAgZm9sZF9idWlsZF9jYWxsX2FycmF5X2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgVDEsIFQyLCBOLCBUNCkKK2V4dGVybiB0cmVlIGZvbGRfYnVpbGRfY2FsbF9hcnJheV9sb2MgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIGludCwgdHJlZSAqKTsKKyNkZWZpbmUgZm9sZF9idWlsZF9jYWxsX2FycmF5X2luaXRpYWxpemVyKFQxLFQyLE4sVDQpXAorICAgZm9sZF9idWlsZF9jYWxsX2FycmF5X2luaXRpYWxpemVyX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgVDEsIFQyLCBOLCBUNCkKK2V4dGVybiB0cmVlIGZvbGRfYnVpbGRfY2FsbF9hcnJheV9pbml0aWFsaXplcl9sb2MgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIGludCwgdHJlZSAqKTsKK2V4dGVybiBib29sIGZvbGRfY29udmVydGlibGVfcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisjZGVmaW5lIGZvbGRfY29udmVydChUMSxUMilcCisgICBmb2xkX2NvbnZlcnRfbG9jKFVOS05PV05fTE9DQVRJT04sIFQxLCBUMikKK2V4dGVybiB0cmVlIGZvbGRfY29udmVydF9sb2MgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9zaW5nbGVfYml0X3Rlc3QgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfaWdub3JlZF9yZXN1bHQgKHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9hYnNfY29uc3QgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgZm9sZF9pbmRpcmVjdF9yZWZfMSAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBmb2xkX2RlZmVyX292ZXJmbG93X3dhcm5pbmdzICh2b2lkKTsKK2V4dGVybiB2b2lkIGZvbGRfdW5kZWZlcl9vdmVyZmxvd193YXJuaW5ncyAoYm9vbCwgY29uc3RfZ2ltcGxlLCBpbnQpOworZXh0ZXJuIHZvaWQgZm9sZF91bmRlZmVyX2FuZF9pZ25vcmVfb3ZlcmZsb3dfd2FybmluZ3MgKHZvaWQpOworZXh0ZXJuIGJvb2wgZm9sZF9kZWZlcnJpbmdfb3ZlcmZsb3dfd2FybmluZ3NfcCAodm9pZCk7CitleHRlcm4gdHJlZSBmb2xkX2ZtYSAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CisKK2VudW0gb3BlcmFuZF9lcXVhbF9mbGFnCit7CisgIE9FUF9PTkxZX0NPTlNUID0gMSwKKyAgT0VQX1BVUkVfU0FNRSA9IDIsCisgIE9FUF9DT05TVEFOVF9BRERSRVNTX09GID0gNAorfTsKKworZXh0ZXJuIGludCBvcGVyYW5kX2VxdWFsX3AgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IG11bHRpcGxlX29mX3AgKHRyZWUsIGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworI2RlZmluZSBvbWl0X29uZV9vcGVyYW5kKFQxLFQyLFQzKVwKKyAgIG9taXRfb25lX29wZXJhbmRfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBUMSwgVDIsIFQzKQorZXh0ZXJuIHRyZWUgb21pdF9vbmVfb3BlcmFuZF9sb2MgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUsIHRyZWUpOworI2RlZmluZSBvbWl0X3R3b19vcGVyYW5kcyhUMSxUMixUMyxUNClcCisgICBvbWl0X3R3b19vcGVyYW5kc19sb2MgKFVOS05PV05fTE9DQVRJT04sIFQxLCBUMiwgVDMsIFQ0KQorZXh0ZXJuIHRyZWUgb21pdF90d29fb3BlcmFuZHNfbG9jIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKKyNkZWZpbmUgaW52ZXJ0X3RydXRodmFsdWUoVClcCisgICBpbnZlcnRfdHJ1dGh2YWx1ZV9sb2MoVU5LTk9XTl9MT0NBVElPTiwgVCkKK2V4dGVybiB0cmVlIGludmVydF90cnV0aHZhbHVlX2xvYyAobG9jYXRpb25fdCwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX3RydXRoX25vdF9leHByIChsb2NhdGlvbl90LCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfdW5hcnlfdG9fY29uc3RhbnQgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfYmluYXJ5X3RvX2NvbnN0YW50IChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX3JlYWRfZnJvbV9jb25zdGFudF9zdHJpbmcgKHRyZWUpOworZXh0ZXJuIHRyZWUgaW50X2NvbnN0X2Jpbm9wIChlbnVtIHRyZWVfY29kZSwgY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisjZGVmaW5lIGJ1aWxkX2ZvbGRfYWRkcl9leHByKFQpXAorICAgICAgICBidWlsZF9mb2xkX2FkZHJfZXhwcl9sb2MgKFVOS05PV05fTE9DQVRJT04sIChUKSkKK2V4dGVybiB0cmVlIGJ1aWxkX2ZvbGRfYWRkcl9leHByX2xvYyAobG9jYXRpb25fdCwgdHJlZSk7CisjZGVmaW5lIGJ1aWxkX2ZvbGRfYWRkcl9leHByX3dpdGhfdHlwZShULFRZUEUpXAorICAgICAgICBidWlsZF9mb2xkX2FkZHJfZXhwcl93aXRoX3R5cGVfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCAoVCksIFRZUEUpCitleHRlcm4gdHJlZSBidWlsZF9mb2xkX2FkZHJfZXhwcl93aXRoX3R5cGVfbG9jIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbGRfY2xlYW51cF9wb2ludF9leHByICh0cmVlIHR5cGUsIHRyZWUgZXhwcik7CitleHRlcm4gdHJlZSBmb2xkX3N0cmlwX3NpZ25fb3BzICh0cmVlKTsKKyNkZWZpbmUgYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYoVClcCisgICAgICAgIGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAoVU5LTk9XTl9MT0NBVElPTiwgVCkKK2V4dGVybiB0cmVlIGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAobG9jYXRpb25fdCwgdHJlZSk7CisjZGVmaW5lIGZvbGRfaW5kaXJlY3RfcmVmKFQpXAorICAgICAgICBmb2xkX2luZGlyZWN0X3JlZl9sb2MgKFVOS05PV05fTE9DQVRJT04sIFQpCitleHRlcm4gdHJlZSBmb2xkX2luZGlyZWN0X3JlZl9sb2MgKGxvY2F0aW9uX3QsIHRyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfc2ltcGxlX21lbV9yZWZfbG9jIChsb2NhdGlvbl90LCB0cmVlKTsKKyNkZWZpbmUgYnVpbGRfc2ltcGxlX21lbV9yZWYoVClcCisJYnVpbGRfc2ltcGxlX21lbV9yZWZfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBUKQorZXh0ZXJuIGRvdWJsZV9pbnQgbWVtX3JlZl9vZmZzZXQgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgcmVmZXJlbmNlX2FsaWFzX3B0cl90eXBlIChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2ludmFyaWFudF9hZGRyZXNzICh0cmVlLCB0cmVlLCBIT1NUX1dJREVfSU5UKTsKK2V4dGVybiB0cmVlIGNvbnN0YW50X2Jvb2xlYW5fbm9kZSAoYm9vbCwgdHJlZSk7CitleHRlcm4gdHJlZSBkaXZfaWZfemVyb19yZW1haW5kZXIgKGVudW0gdHJlZV9jb2RlLCBjb25zdF90cmVlLCBjb25zdF90cmVlKTsKKworZXh0ZXJuIGJvb2wgdHJlZV9zd2FwX29wZXJhbmRzX3AgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUsIGJvb2wpOworZXh0ZXJuIGVudW0gdHJlZV9jb2RlIHN3YXBfdHJlZV9jb21wYXJpc29uIChlbnVtIHRyZWVfY29kZSk7CisKK2V4dGVybiBib29sIHB0cl9kaWZmZXJlbmNlX2NvbnN0ICh0cmVlLCB0cmVlLCBIT1NUX1dJREVfSU5UICopOworZXh0ZXJuIGVudW0gdHJlZV9jb2RlIGludmVydF90cmVlX2NvbXBhcmlzb24gKGVudW0gdHJlZV9jb2RlLCBib29sKTsKKworZXh0ZXJuIGJvb2wgdHJlZV9leHByX25vbnplcm9fcCAodHJlZSk7CitleHRlcm4gYm9vbCB0cmVlX3VuYXJ5X25vbnplcm9fd2FybnZfcCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIGJvb2wgKik7CitleHRlcm4gYm9vbCB0cmVlX2JpbmFyeV9ub256ZXJvX3dhcm52X3AgKGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlIG9wMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqKTsKK2V4dGVybiBib29sIHRyZWVfc2luZ2xlX25vbnplcm9fd2FybnZfcCAodHJlZSwgYm9vbCAqKTsKK2V4dGVybiBib29sIHRyZWVfdW5hcnlfbm9ubmVnYXRpdmVfd2FybnZfcCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUsIGJvb2wgKik7CitleHRlcm4gYm9vbCB0cmVlX2JpbmFyeV9ub25uZWdhdGl2ZV93YXJudl9wIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKik7CitleHRlcm4gYm9vbCB0cmVlX3NpbmdsZV9ub25uZWdhdGl2ZV93YXJudl9wICh0cmVlIHQsIGJvb2wgKnN0cmljdF9vdmVyZmxvd19wKTsKK2V4dGVybiBib29sIHRyZWVfaW52YWxpZF9ub25uZWdhdGl2ZV93YXJudl9wICh0cmVlIHQsIGJvb2wgKnN0cmljdF9vdmVyZmxvd19wKTsKK2V4dGVybiBib29sIHRyZWVfY2FsbF9ub25uZWdhdGl2ZV93YXJudl9wICh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCBib29sICopOworCitleHRlcm4gYm9vbCB0cmVlX2V4cHJfbm9uemVyb193YXJudl9wICh0cmVlLCBib29sICopOworCitleHRlcm4gYm9vbCBmb2xkX3JlYWxfemVyb19hZGRpdGlvbl9wIChjb25zdF90cmVlLCBjb25zdF90cmVlLCBpbnQpOworZXh0ZXJuIHRyZWUgY29tYmluZV9jb21wYXJpc29ucyAobG9jYXRpb25fdCwgZW51bSB0cmVlX2NvZGUsIGVudW0gdHJlZV9jb2RlLAorCQkJCSBlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBkZWJ1Z19mb2xkX2NoZWNrc3VtIChjb25zdF90cmVlKTsKKworLyogUmV0dXJuIG5vbnplcm8gaWYgQ09ERSBpcyBhIHRyZWUgY29kZSB0aGF0IHJlcHJlc2VudHMgYSB0cnV0aCB2YWx1ZS4gICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3RydXRoX3ZhbHVlX3AgKGVudW0gdHJlZV9jb2RlIGNvZGUpCit7CisgIHJldHVybiAoVFJFRV9DT0RFX0NMQVNTIChjb2RlKSA9PSB0Y2NfY29tcGFyaXNvbgorCSAgfHwgY29kZSA9PSBUUlVUSF9BTkRfRVhQUiB8fCBjb2RlID09IFRSVVRIX0FORElGX0VYUFIKKwkgIHx8IGNvZGUgPT0gVFJVVEhfT1JfRVhQUiB8fCBjb2RlID09IFRSVVRIX09SSUZfRVhQUgorCSAgfHwgY29kZSA9PSBUUlVUSF9YT1JfRVhQUiB8fCBjb2RlID09IFRSVVRIX05PVF9FWFBSKTsKK30KKworLyogUmV0dXJuIHdoZXRoZXIgVFlQRSBpcyBhIHR5cGUgc3VpdGFibGUgZm9yIGFuIG9mZnNldCBmb3IKKyAgIGEgUE9JTlRFUl9QTFVTX0VYUFIuICAqLworc3RhdGljIGlubGluZSBib29sCitwdHJvZmZ0eXBlX3AgKHRyZWUgdHlwZSkKK3sKKyAgcmV0dXJuIChJTlRFR1JBTF9UWVBFX1AgKHR5cGUpCisJICAmJiBUWVBFX1BSRUNJU0lPTiAodHlwZSkgPT0gVFlQRV9QUkVDSVNJT04gKHNpemV0eXBlKQorCSAgJiYgVFlQRV9VTlNJR05FRCAodHlwZSkgPT0gVFlQRV9VTlNJR05FRCAoc2l6ZXR5cGUpKTsKK30KKworLyogUmV0dXJuIE9GRiBjb252ZXJ0ZWQgdG8gYSBwb2ludGVyIG9mZnNldCB0eXBlIHN1aXRhYmxlIGFzIG9mZnNldCBmb3IKKyAgIFBPSU5URVJfUExVU19FWFBSLiAgVXNlIGxvY2F0aW9uIExPQyBmb3IgdGhpcyBjb252ZXJzaW9uLiAgKi8KK3N0YXRpYyBpbmxpbmUgdHJlZQorY29udmVydF90b19wdHJvZmZ0eXBlX2xvYyAobG9jYXRpb25fdCBsb2MsIHRyZWUgb2ZmKQoreworICByZXR1cm4gZm9sZF9jb252ZXJ0X2xvYyAobG9jLCBzaXpldHlwZSwgb2ZmKTsKK30KKyNkZWZpbmUgY29udmVydF90b19wdHJvZmZ0eXBlKHQpIGNvbnZlcnRfdG9fcHRyb2ZmdHlwZV9sb2MgKFVOS05PV05fTE9DQVRJT04sIHQpCisKKy8qIEJ1aWxkIGFuZCBmb2xkIGEgUE9JTlRFUl9QTFVTX0VYUFIgYXQgTE9DIG9mZnNldHRpbmcgUFRSIGJ5IE9GRi4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK2ZvbGRfYnVpbGRfcG9pbnRlcl9wbHVzX2xvYyAobG9jYXRpb25fdCBsb2MsIHRyZWUgcHRyLCB0cmVlIG9mZikKK3sKKyAgcmV0dXJuIGZvbGRfYnVpbGQyX2xvYyAobG9jLCBQT0lOVEVSX1BMVVNfRVhQUiwgVFJFRV9UWVBFIChwdHIpLAorCQkJICBwdHIsIGZvbGRfY29udmVydF9sb2MgKGxvYywgc2l6ZXR5cGUsIG9mZikpOworfQorI2RlZmluZSBmb2xkX2J1aWxkX3BvaW50ZXJfcGx1cyhwLG8pIFwKKwlmb2xkX2J1aWxkX3BvaW50ZXJfcGx1c19sb2MgKFVOS05PV05fTE9DQVRJT04sIHAsIG8pCisKKy8qIEJ1aWxkIGFuZCBmb2xkIGEgUE9JTlRFUl9QTFVTX0VYUFIgYXQgTE9DIG9mZnNldHRpbmcgUFRSIGJ5IE9GRi4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK2ZvbGRfYnVpbGRfcG9pbnRlcl9wbHVzX2h3aV9sb2MgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHB0ciwgSE9TVF9XSURFX0lOVCBvZmYpCit7CisgIHJldHVybiBmb2xkX2J1aWxkMl9sb2MgKGxvYywgUE9JTlRFUl9QTFVTX0VYUFIsIFRSRUVfVFlQRSAocHRyKSwKKwkJCSAgcHRyLCBzaXplX2ludCAob2ZmKSk7Cit9CisjZGVmaW5lIGZvbGRfYnVpbGRfcG9pbnRlcl9wbHVzX2h3aShwLG8pIFwKKwlmb2xkX2J1aWxkX3BvaW50ZXJfcGx1c19od2lfbG9jIChVTktOT1dOX0xPQ0FUSU9OLCBwLCBvKQorCisvKiBJbiBidWlsdGlucy5jICovCitleHRlcm4gYm9vbCBhdm9pZF9mb2xkaW5nX2lubGluZV9idWlsdGluICh0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfY2FsbF9leHByIChsb2NhdGlvbl90LCB0cmVlLCBib29sKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbHRpbl9mcHV0cyAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgYm9vbCwgYm9vbCwgdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX2J1aWx0aW5fc3RyY3B5IChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbHRpbl9zdHJuY3B5IChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfYnVpbHRpbl9tZW1vcnlfY2hrIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCBib29sLAorCQkJCSAgICAgZW51bSBidWlsdF9pbl9mdW5jdGlvbik7CitleHRlcm4gdHJlZSBmb2xkX2J1aWx0aW5fc3R4Y3B5X2NoayAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgYm9vbCwKKwkJCQkgICAgIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24pOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsdGluX3N0eG5jcHlfY2hrIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCBib29sLAorCQkJCSAgICAgIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24pOworZXh0ZXJuIHRyZWUgZm9sZF9idWlsdGluX3NucHJpbnRmX2NoayAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgZW51bSBidWlsdF9pbl9mdW5jdGlvbik7CitleHRlcm4gYm9vbCBmb2xkX2J1aWx0aW5fbmV4dF9hcmcgKHRyZWUsIGJvb2wpOworZXh0ZXJuIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9tYXRoZm5fY29kZSAoY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSBmb2xkX2J1aWx0aW5fY2FsbF9hcnJheSAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgaW50LCB0cmVlICopOworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF9leHByX2xvY19hcnJheSAobG9jYXRpb25fdCwgdHJlZSwgaW50LCB0cmVlICopOworZXh0ZXJuIHRyZWUgYnVpbGRfY2FsbF9leHByX2xvY192ZWMgKGxvY2F0aW9uX3QsIHRyZWUsIHZlYzx0cmVlLCB2YV9nYz4gKik7CitleHRlcm4gdHJlZSBidWlsZF9jYWxsX2V4cHJfbG9jIChsb2NhdGlvbl90LCB0cmVlLCBpbnQsIC4uLik7CitleHRlcm4gdHJlZSBidWlsZF9jYWxsX2V4cHIgKHRyZWUsIGludCwgLi4uKTsKK2V4dGVybiB0cmVlIG1hdGhmbl9idWlsdF9pbiAodHJlZSwgZW51bSBidWlsdF9pbl9mdW5jdGlvbiBmbik7CitleHRlcm4gdHJlZSBjX3N0cmxlbiAodHJlZSwgaW50KTsKK2V4dGVybiB0cmVlIHN0ZF9naW1wbGlmeV92YV9hcmdfZXhwciAodHJlZSwgdHJlZSwgZ2ltcGxlX3NlcSAqLCBnaW1wbGVfc2VxICopOworZXh0ZXJuIHRyZWUgYnVpbGRfdmFfYXJnX2luZGlyZWN0X3JlZiAodHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9zdHJpbmdfbGl0ZXJhbCAoaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIGJvb2wgdmFsaWRhdGVfYXJnbGlzdCAoY29uc3RfdHJlZSwgLi4uKTsKK2V4dGVybiBydHggYnVpbHRpbl9tZW1zZXRfcmVhZF9zdHIgKHZvaWQgKiwgSE9TVF9XSURFX0lOVCwgZW51bSBtYWNoaW5lX21vZGUpOworZXh0ZXJuIGJvb2wgaXNfYnVpbHRpbl9mbiAodHJlZSk7CitleHRlcm4gYm9vbCBnZXRfb2JqZWN0X2FsaWdubWVudF8xICh0cmVlLCB1bnNpZ25lZCBpbnQgKiwKKwkJCQkgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X29iamVjdF9hbGlnbm1lbnQgKHRyZWUpOworZXh0ZXJuIGJvb2wgZ2V0X3BvaW50ZXJfYWxpZ25tZW50XzEgKHRyZWUsIHVuc2lnbmVkIGludCAqLAorCQkJCSAgICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X3BvaW50ZXJfYWxpZ25tZW50ICh0cmVlKTsKK2V4dGVybiB0cmVlIGZvbGRfY2FsbF9zdG10IChnaW1wbGUsIGJvb2wpOworZXh0ZXJuIHRyZWUgZ2ltcGxlX2ZvbGRfYnVpbHRpbl9zbnByaW50Zl9jaGsgKGdpbXBsZSwgdHJlZSwgZW51bSBidWlsdF9pbl9mdW5jdGlvbik7CitleHRlcm4gdHJlZSBtYWtlX3JhbmdlICh0cmVlLCBpbnQgKiwgdHJlZSAqLCB0cmVlICosIGJvb2wgKik7CitleHRlcm4gdHJlZSBtYWtlX3JhbmdlX3N0ZXAgKGxvY2F0aW9uX3QsIGVudW0gdHJlZV9jb2RlLCB0cmVlLCB0cmVlLCB0cmVlLAorCQkJICAgICB0cmVlICosIHRyZWUgKiwgaW50ICosIGJvb2wgKik7CitleHRlcm4gdHJlZSBidWlsZF9yYW5nZV9jaGVjayAobG9jYXRpb25fdCwgdHJlZSwgdHJlZSwgaW50LCB0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIG1lcmdlX3JhbmdlcyAoaW50ICosIHRyZWUgKiwgdHJlZSAqLCBpbnQsIHRyZWUsIHRyZWUsIGludCwKKwkJCSAgdHJlZSwgdHJlZSk7CitleHRlcm4gdm9pZCBzZXRfYnVpbHRpbl91c2VyX2Fzc2VtYmxlcl9uYW1lICh0cmVlIGRlY2wsIGNvbnN0IGNoYXIgKmFzbXNwZWMpOworZXh0ZXJuIGJvb2wgaXNfc2ltcGxlX2J1aWx0aW4gKHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfaW5leHBlbnNpdmVfYnVpbHRpbiAodHJlZSk7CisKKy8qIEluIGNvbnZlcnQuYyAqLworZXh0ZXJuIHRyZWUgc3RyaXBfZmxvYXRfZXh0ZW5zaW9ucyAodHJlZSk7CisKKy8qIEluIHRyZWUuYyAqLworZXh0ZXJuIGludCByZWFsbHlfY29uc3RhbnRfcCAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBkZWNsX2FkZHJlc3NfaW52YXJpYW50X3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgZGVjbF9hZGRyZXNzX2lwX2ludmFyaWFudF9wIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGludF9maXRzX3R5cGVfcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CisjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCitleHRlcm4gdm9pZCBnZXRfdHlwZV9zdGF0aWNfYm91bmRzIChjb25zdF90cmVlLCBtcHpfdCwgbXB6X3QpOworI2VuZGlmCitleHRlcm4gYm9vbCB2YXJpYWJseV9tb2RpZmllZF90eXBlX3AgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCB0cmVlX2xvZzIgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCB0cmVlX2Zsb29yX2xvZzIgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCBzaW1wbGVfY3N0X2VxdWFsIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiBoYXNodmFsX3QgaXRlcmF0aXZlX2hhc2hfZXhwciAoY29uc3RfdHJlZSwgaGFzaHZhbF90KTsKK2V4dGVybiBoYXNodmFsX3QgaXRlcmF0aXZlX2hhc2hfZXhwcnNfY29tbXV0YXRpdmUgKGNvbnN0X3RyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF90cmVlLCBoYXNodmFsX3QpOworZXh0ZXJuIGhhc2h2YWxfdCBpdGVyYXRpdmVfaGFzaF9ob3N0X3dpZGVfaW50IChIT1NUX1dJREVfSU5ULCBoYXNodmFsX3QpOworZXh0ZXJuIGhhc2h2YWxfdCBpdGVyYXRpdmVfaGFzaF9oYXNodmFsX3QgKGhhc2h2YWxfdCwgaGFzaHZhbF90KTsKK2V4dGVybiBoYXNodmFsX3QgaXRlcmF0aXZlX2hhc2hfaG9zdF93aWRlX2ludCAoSE9TVF9XSURFX0lOVCwgaGFzaHZhbF90KTsKK2V4dGVybiBpbnQgY29tcGFyZV90cmVlX2ludCAoY29uc3RfdHJlZSwgdW5zaWduZWQgSE9TVF9XSURFX0lOVCk7CitleHRlcm4gaW50IHR5cGVfbGlzdF9lcXVhbCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gaW50IGNoYWluX21lbWJlciAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdHJlZSB0eXBlX2hhc2hfbG9va3VwICh1bnNpZ25lZCBpbnQsIHRyZWUpOworZXh0ZXJuIHZvaWQgdHlwZV9oYXNoX2FkZCAodW5zaWduZWQgaW50LCB0cmVlKTsKK2V4dGVybiBpbnQgc2ltcGxlX2NzdF9saXN0X2VxdWFsIChjb25zdF90cmVlLCBjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGR1bXBfdHJlZV9zdGF0aXN0aWNzICh2b2lkKTsKK2V4dGVybiB2b2lkIHJlY29tcHV0ZV90cmVlX2ludmFyaWFudF9mb3JfYWRkcl9leHByICh0cmVlKTsKK2V4dGVybiBib29sIG5lZWRzX3RvX2xpdmVfaW5fbWVtb3J5IChjb25zdF90cmVlKTsKK2V4dGVybiB0cmVlIHJlY29uc3RydWN0X2NvbXBsZXhfdHlwZSAodHJlZSwgdHJlZSk7CisKK2V4dGVybiBpbnQgcmVhbF9vbmVwIChjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgcmVhbF90d29wIChjb25zdF90cmVlKTsKK2V4dGVybiBpbnQgcmVhbF9taW51c19vbmVwIChjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGluaXRfdHRyZWUgKHZvaWQpOworZXh0ZXJuIHZvaWQgYnVpbGRfY29tbW9uX3RyZWVfbm9kZXMgKGJvb2wsIGJvb2wpOworZXh0ZXJuIHZvaWQgYnVpbGRfY29tbW9uX2J1aWx0aW5fbm9kZXMgKHZvaWQpOworZXh0ZXJuIHRyZWUgYnVpbGRfbm9uc3RhbmRhcmRfaW50ZWdlcl90eXBlICh1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBpbnQpOworZXh0ZXJuIHRyZWUgYnVpbGRfcmFuZ2VfdHlwZSAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBidWlsZF9ub25zaGFyZWRfcmFuZ2VfdHlwZSAodHJlZSwgdHJlZSwgdHJlZSk7CitleHRlcm4gYm9vbCBzdWJyYW5nZV90eXBlX2Zvcl9kZWJ1Z19wIChjb25zdF90cmVlLCB0cmVlICosIHRyZWUgKik7CitleHRlcm4gSE9TVF9XSURFX0lOVCBpbnRfY3N0X3ZhbHVlIChjb25zdF90cmVlKTsKK2V4dGVybiBIT1NUX1dJREVTVF9JTlQgd2lkZXN0X2ludF9jc3RfdmFsdWUgKGNvbnN0X3RyZWUpOworCitleHRlcm4gdHJlZSB0cmVlX2Jsb2NrICh0cmVlKTsKK2V4dGVybiB2b2lkIHRyZWVfc2V0X2Jsb2NrICh0cmVlLCB0cmVlKTsKK2V4dGVybiBsb2NhdGlvbl90ICpibG9ja19ub25hcnRpZmljaWFsX2xvY2F0aW9uICh0cmVlKTsKK2V4dGVybiBsb2NhdGlvbl90IHRyZWVfbm9uYXJ0aWZpY2lhbF9sb2NhdGlvbiAodHJlZSk7CisKK2V4dGVybiB0cmVlIGJsb2NrX3VsdGltYXRlX29yaWdpbiAoY29uc3RfdHJlZSk7CisKK2V4dGVybiB0cmVlIGdldF9iaW5mb19hdF9vZmZzZXQgKHRyZWUsIEhPU1RfV0lERV9JTlQsIHRyZWUpOworZXh0ZXJuIHRyZWUgZ2V0X3JlZl9iYXNlX2FuZF9leHRlbnQgKHRyZWUsIEhPU1RfV0lERV9JTlQgKiwKKwkJCQkgICAgIEhPU1RfV0lERV9JTlQgKiwgSE9TVF9XSURFX0lOVCAqKTsKK2V4dGVybiBib29sIGNvbnRhaW5zX2JpdGZsZF9jb21wb25lbnRfcmVmX3AgKGNvbnN0X3RyZWUpOworCisvKiBJbiB0cmVlLW5lc3RlZC5jICovCitleHRlcm4gdHJlZSBidWlsZF9hZGRyICh0cmVlLCB0cmVlKTsKKworLyogSW4gZnVuY3Rpb24uYyAqLworZXh0ZXJuIHZvaWQgZXhwYW5kX21haW5fZnVuY3Rpb24gKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2Z1bmN0aW9uX2VuZCAodm9pZCk7CitleHRlcm4gdm9pZCBleHBhbmRfZnVuY3Rpb25fc3RhcnQgKHRyZWUpOworZXh0ZXJuIHZvaWQgc3RhY2tfcHJvdGVjdF9wcm9sb2d1ZSAodm9pZCk7CitleHRlcm4gdm9pZCBzdGFja19wcm90ZWN0X2VwaWxvZ3VlICh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfZHVtbXlfZnVuY3Rpb25fc3RhcnQgKHZvaWQpOworZXh0ZXJuIHZvaWQgZXhwYW5kX2R1bW15X2Z1bmN0aW9uX2VuZCAodm9pZCk7CitleHRlcm4gdm9pZCBhbGxvY2F0ZV9zdHJ1Y3RfZnVuY3Rpb24gKHRyZWUsIGJvb2wpOworZXh0ZXJuIHZvaWQgcHVzaF9zdHJ1Y3RfZnVuY3Rpb24gKHRyZWUgZm5kZWNsKTsKK2V4dGVybiB2b2lkIGluaXRfZnVuY3Rpb25fc3RhcnQgKHRyZWUpOworZXh0ZXJuIGJvb2wgdXNlX3JlZ2lzdGVyX2Zvcl9kZWNsIChjb25zdF90cmVlKTsKK2V4dGVybiB2b2lkIGdlbmVyYXRlX3NldGptcF93YXJuaW5ncyAodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X3RlbXBfc2xvdHMgKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV90ZW1wX3Nsb3RzICh2b2lkKTsKK2V4dGVybiB2b2lkIHBvcF90ZW1wX3Nsb3RzICh2b2lkKTsKK2V4dGVybiB2b2lkIHB1c2hfdGVtcF9zbG90cyAodm9pZCk7CitleHRlcm4gdm9pZCBwcmVzZXJ2ZV90ZW1wX3Nsb3RzIChydHgpOworZXh0ZXJuIGludCBhZ2dyZWdhdGVfdmFsdWVfcCAoY29uc3RfdHJlZSwgY29uc3RfdHJlZSk7CitleHRlcm4gdm9pZCBwdXNoX2Z1bmN0aW9uX2NvbnRleHQgKHZvaWQpOworZXh0ZXJuIHZvaWQgcG9wX2Z1bmN0aW9uX2NvbnRleHQgKHZvaWQpOworZXh0ZXJuIGdpbXBsZV9zZXEgZ2ltcGxpZnlfcGFyYW1ldGVycyAodm9pZCk7CisKKy8qIEluIHByaW50LXJ0bC5jICovCisjaWZkZWYgQlVGU0laCitleHRlcm4gdm9pZCBwcmludF9ydGwgKEZJTEUgKiwgY29uc3RfcnR4KTsKKyNlbmRpZgorCisvKiBJbiBwcmludC10cmVlLmMgKi8KK2V4dGVybiB2b2lkIGRlYnVnX3RyZWUgKHRyZWUpOworZXh0ZXJuIHZvaWQgZGVidWdfdmVjX3RyZWUgKHZlYzx0cmVlLCB2YV9nYz4gKik7CisjaWZkZWYgQlVGU0laCitleHRlcm4gdm9pZCBkdW1wX2FkZHIgKEZJTEUqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKik7CitleHRlcm4gdm9pZCBwcmludF9ub2RlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdHJlZSwgaW50KTsKK2V4dGVybiB2b2lkIHByaW50X3ZlY190cmVlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdmVjPHRyZWUsIHZhX2djPiAqLCBpbnQpOworZXh0ZXJuIHZvaWQgcHJpbnRfbm9kZV9icmllZiAoRklMRSAqLCBjb25zdCBjaGFyICosIGNvbnN0X3RyZWUsIGludCk7CitleHRlcm4gdm9pZCBpbmRlbnRfdG8gKEZJTEUgKiwgaW50KTsKKyNlbmRpZgorCisvKiBJbiB0cmVlLWlubGluZS5jOiAgKi8KK2V4dGVybiBib29sIGRlYnVnX2ZpbmRfdHJlZSAodHJlZSwgdHJlZSk7CisvKiBUaGlzIGlzIGluIHRyZWUtaW5saW5lLmMgc2luY2UgdGhlIHJvdXRpbmUgdXNlcworICAgZGF0YSBzdHJ1Y3R1cmVzIGZyb20gdGhlIGlubGluZXIuICAqLworZXh0ZXJuIHRyZWUgdW5zYXZlX2V4cHJfbm93ICh0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2R1cGxpY2F0ZV90eXBlICh0cmVlKTsKKworLyogSW4gY2FsbHMuYyAqLworCisvKiBOb256ZXJvIGlmIHRoaXMgaXMgYSBjYWxsIHRvIGEgZnVuY3Rpb24gd2hvc2UgcmV0dXJuIHZhbHVlIGRlcGVuZHMKKyAgIHNvbGVseSBvbiBpdHMgYXJndW1lbnRzLCBoYXMgbm8gc2lkZSBlZmZlY3RzLCBhbmQgZG9lcyBub3QgcmVhZAorICAgZ2xvYmFsIG1lbW9yeS4gIFRoaXMgY29ycmVzcG9uZHMgdG8gVFJFRV9SRUFET05MWSBmb3IgZnVuY3Rpb24KKyAgIGRlY2xzLiAgKi8KKyNkZWZpbmUgRUNGX0NPTlNUCQkgICgxIDw8IDApCisvKiBOb256ZXJvIGlmIHRoaXMgaXMgYSBjYWxsIHRvICJwdXJlIiBmdW5jdGlvbiAobGlrZSBjb25zdCBmdW5jdGlvbiwKKyAgIGJ1dCBtYXkgcmVhZCBtZW1vcnkuICBUaGlzIGNvcnJlc3BvbmRzIHRvIERFQ0xfUFVSRV9QIGZvciBmdW5jdGlvbgorICAgZGVjbHMuICAqLworI2RlZmluZSBFQ0ZfUFVSRQkJICAoMSA8PCAxKQorLyogTm9uemVybyBpZiB0aGlzIGlzIEVDRl9DT05TVCBvciBFQ0ZfUFVSRSBidXQgY2Fubm90IGJlIHByb3ZlbiB0byBubworICAgaW5maW5pdGUgbG9vcC4gIFRoaXMgY29ycmVzcG9uZHMgdG8gREVDTF9MT09QSU5HX0NPTlNUX09SX1BVUkVfUAorICAgZm9yIGZ1bmN0aW9uIGRlY2xzLiovCisjZGVmaW5lIEVDRl9MT09QSU5HX0NPTlNUX09SX1BVUkUgKDEgPDwgMikKKy8qIE5vbnplcm8gaWYgdGhpcyBjYWxsIHdpbGwgbmV2ZXIgcmV0dXJuLiAgKi8KKyNkZWZpbmUgRUNGX05PUkVUVVJOCQkgICgxIDw8IDMpCisvKiBOb256ZXJvIGlmIHRoaXMgaXMgYSBjYWxsIHRvIG1hbGxvYyBvciBhIHJlbGF0ZWQgZnVuY3Rpb24uICAqLworI2RlZmluZSBFQ0ZfTUFMTE9DCQkgICgxIDw8IDQpCisvKiBOb256ZXJvIGlmIGl0IGlzIHBsYXVzaWJsZSB0aGF0IHRoaXMgaXMgYSBjYWxsIHRvIGFsbG9jYS4gICovCisjZGVmaW5lIEVDRl9NQVlfQkVfQUxMT0NBCSAgKDEgPDwgNSkKKy8qIE5vbnplcm8gaWYgdGhpcyBpcyBhIGNhbGwgdG8gYSBmdW5jdGlvbiB0aGF0IHdvbid0IHRocm93IGFuIGV4Y2VwdGlvbi4gICovCisjZGVmaW5lIEVDRl9OT1RIUk9XCQkgICgxIDw8IDYpCisvKiBOb256ZXJvIGlmIHRoaXMgaXMgYSBjYWxsIHRvIHNldGptcCBvciBhIHJlbGF0ZWQgZnVuY3Rpb24uICAqLworI2RlZmluZSBFQ0ZfUkVUVVJOU19UV0lDRQkgICgxIDw8IDcpCisvKiBOb256ZXJvIGlmIHRoaXMgY2FsbCByZXBsYWNlcyB0aGUgY3VycmVudCBzdGFjayBmcmFtZS4gICovCisjZGVmaW5lIEVDRl9TSUJDQUxMCQkgICgxIDw8IDgpCisvKiBGdW5jdGlvbiBkb2VzIG5vdCByZWFkIG9yIHdyaXRlIG1lbW9yeSAoYnV0IG1heSBoYXZlIHNpZGUgZWZmZWN0cywgc28KKyAgIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IGZpdCBFQ0ZfQ09OU1QpLiAgKi8KKyNkZWZpbmUgRUNGX05PVk9QUwkJICAoMSA8PCA5KQorLyogVGhlIGZ1bmN0aW9uIGRvZXMgbm90IGxlYWQgdG8gY2FsbHMgd2l0aGluIGN1cnJlbnQgZnVuY3Rpb24gdW5pdC4gICovCisjZGVmaW5lIEVDRl9MRUFGCQkgICgxIDw8IDEwKQorLyogTm9uemVybyBpZiB0aGlzIGNhbGwgZG9lcyBub3QgYWZmZWN0IHRyYW5zYWN0aW9ucy4gICovCisjZGVmaW5lIEVDRl9UTV9QVVJFCQkgICgxIDw8IDExKQorLyogTm9uemVybyBpZiB0aGlzIGNhbGwgaXMgaW50byB0aGUgdHJhbnNhY3Rpb24gcnVudGltZSBsaWJyYXJ5LiAgKi8KKyNkZWZpbmUgRUNGX1RNX0JVSUxUSU4JCSAgKDEgPDwgMTIpCisKK2V4dGVybiBpbnQgZmxhZ3NfZnJvbV9kZWNsX29yX3R5cGUgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGludCBjYWxsX2V4cHJfZmxhZ3MgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHZvaWQgc2V0X2NhbGxfZXhwcl9mbGFncyAodHJlZSwgaW50KTsKKworLyogQ2FsbCBhcmd1bWVudCBmbGFncy4gICovCisKKy8qIE5vbnplcm8gaWYgdGhlIGFyZ3VtZW50IGlzIG5vdCBkZXJlZmVyZW5jZWQgcmVjdXJzaXZlbHksIHRodXMgb25seQorICAgZGlyZWN0bHkgcmVhY2hhYmxlIG1lbW9yeSBpcyByZWFkIG9yIHdyaXR0ZW4uICAqLworI2RlZmluZSBFQUZfRElSRUNUCQkoMSA8PCAwKQorLyogTm9uemVybyBpZiBtZW1vcnkgcmVhY2hlZCBieSB0aGUgYXJndW1lbnQgaXMgbm90IGNsb2JiZXJlZC4gICovCisjZGVmaW5lIEVBRl9OT0NMT0JCRVIJCSgxIDw8IDEpCisvKiBOb256ZXJvIGlmIHRoZSBhcmd1bWVudCBkb2VzIG5vdCBlc2NhcGUuICAqLworI2RlZmluZSBFQUZfTk9FU0NBUEUJCSgxIDw8IDIpCisvKiBOb256ZXJvIGlmIHRoZSBhcmd1bWVudCBpcyBub3QgdXNlZCBieSB0aGUgZnVuY3Rpb24uICAqLworI2RlZmluZSBFQUZfVU5VU0VECQkoMSA8PCAzKQorCisvKiBDYWxsIHJldHVybiBmbGFncy4gICovCisKKy8qIE1hc2sgZm9yIHRoZSBhcmd1bWVudCBudW1iZXIgdGhhdCBpcyByZXR1cm5lZC4gIExvd2VyIHR3byBiaXRzIG9mCisgICB0aGUgcmV0dXJuIGZsYWdzLCBlbmNvZGVzIGFyZ3VtZW50IHNsb3RzIHplcm8gdG8gdGhyZWUuICAqLworI2RlZmluZSBFUkZfUkVUVVJOX0FSR19NQVNLCSgzKQorLyogTm9uemVybyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBhcmd1bWVudCBudW1iZXIKKyAgIGZsYWdzICYgRVJGX1JFVFVSTl9BUkdfTUFTSy4gICovCisjZGVmaW5lIEVSRl9SRVRVUk5TX0FSRwkJKDEgPDwgMikKKy8qIE5vbnplcm8gaWYgdGhlIHJldHVybiB2YWx1ZSBkb2VzIG5vdCBhbGlhcyB3aXRoIGFueXRoaW5nLiAgRnVuY3Rpb25zCisgICB3aXRoIHRoZSBtYWxsb2MgYXR0cmlidXRlIGhhdmUgdGhpcyBzZXQgb24gdGhlaXIgcmV0dXJuIHZhbHVlLiAgKi8KKyNkZWZpbmUgRVJGX05PQUxJQVMJCSgxIDw8IDMpCisKK2V4dGVybiBpbnQgc2V0am1wX2NhbGxfcCAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBnaW1wbGVfYWxsb2NhX2NhbGxfcCAoY29uc3RfZ2ltcGxlKTsKK2V4dGVybiBib29sIGFsbG9jYV9jYWxsX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgbXVzdF9wYXNzX2luX3N0YWNrX3Zhcl9zaXplIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBtdXN0X3Bhc3NfaW5fc3RhY2tfdmFyX3NpemVfb3JfcGFkIChlbnVtIG1hY2hpbmVfbW9kZSwgY29uc3RfdHJlZSk7CisKKy8qIEluIGF0dHJpYnMuYy4gICovCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgKmxvb2t1cF9hdHRyaWJ1dGVfc3BlYyAoY29uc3RfdHJlZSk7CitleHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjICpsb29rdXBfc2NvcGVkX2F0dHJpYnV0ZV9zcGVjIChjb25zdF90cmVlLAorCQkJCQkJCQkgIGNvbnN0X3RyZWUpOworCitleHRlcm4gdm9pZCBpbml0X2F0dHJpYnV0ZXMgKHZvaWQpOworCisvKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVzIGxpc3RlZCBpbiBBVFRSSUJVVEVTIGFuZCBpbnN0YWxsIHRoZW0gaW4gKk5PREUsCisgICB3aGljaCBpcyBlaXRoZXIgYSBERUNMIChpbmNsdWRpbmcgYSBUWVBFX0RFQ0wpIG9yIGEgVFlQRS4gIElmIGEgREVDTCwKKyAgIGl0IHNob3VsZCBiZSBtb2RpZmllZCBpbiBwbGFjZTsgaWYgYSBUWVBFLCBhIGNvcHkgc2hvdWxkIGJlIGNyZWF0ZWQKKyAgIHVubGVzcyBBVFRSX0ZMQUdfVFlQRV9JTl9QTEFDRSBpcyBzZXQgaW4gRkxBR1MuICBGTEFHUyBnaXZlcyBmdXJ0aGVyCisgICBpbmZvcm1hdGlvbiwgaW4gdGhlIGZvcm0gb2YgYSBiaXR3aXNlIE9SIG9mIGZsYWdzIGluIGVudW0gYXR0cmlidXRlX2ZsYWdzCisgICBmcm9tIHRyZWUuaC4gIERlcGVuZGluZyBvbiB0aGVzZSBmbGFncywgc29tZSBhdHRyaWJ1dGVzIG1heSBiZQorICAgcmV0dXJuZWQgdG8gYmUgYXBwbGllZCBhdCBhIGxhdGVyIHN0YWdlIChmb3IgZXhhbXBsZSwgdG8gYXBwbHkKKyAgIGEgZGVjbCBhdHRyaWJ1dGUgdG8gdGhlIGRlY2xhcmF0aW9uIHJhdGhlciB0aGFuIHRvIGl0cyB0eXBlKS4gICovCitleHRlcm4gdHJlZSBkZWNsX2F0dHJpYnV0ZXMgKHRyZWUgKiwgdHJlZSwgaW50KTsKKworZXh0ZXJuIGJvb2wgY3h4MTFfYXR0cmlidXRlX3AgKGNvbnN0X3RyZWUpOworCitleHRlcm4gdHJlZSBnZXRfYXR0cmlidXRlX25hbWUgKGNvbnN0X3RyZWUpOworCitleHRlcm4gdHJlZSBnZXRfYXR0cmlidXRlX25hbWVzcGFjZSAoY29uc3RfdHJlZSk7CisKK2V4dGVybiB2b2lkIGFwcGx5X3RtX2F0dHIgKHRyZWUsIHRyZWUpOworCisvKiBJbiBzdG9yLWxheW91dC5jICovCitleHRlcm4gdm9pZCBzZXRfbWluX2FuZF9tYXhfdmFsdWVzX2Zvcl9pbnRlZ3JhbF90eXBlICh0cmVlLCBpbnQsIGJvb2wpOworZXh0ZXJuIHZvaWQgZml4dXBfc2lnbmVkX3R5cGUgKHRyZWUpOworZXh0ZXJuIHZvaWQgaW50ZXJuYWxfcmVmZXJlbmNlX3R5cGVzICh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdXBkYXRlX2FsaWdubWVudF9mb3JfZmllbGQgKHJlY29yZF9sYXlvdXRfaW5mbywgdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCk7CisvKiB2YXJhc20uYyAqLworZXh0ZXJuIHRyZWUgdHJlZV9vdXRwdXRfY29uc3RhbnRfZGVmICh0cmVlKTsKK2V4dGVybiB2b2lkIG1ha2VfZGVjbF9ydGwgKHRyZWUpOworZXh0ZXJuIHJ0eCBtYWtlX2RlY2xfcnRsX2Zvcl9kZWJ1ZyAodHJlZSk7CitleHRlcm4gdm9pZCBtYWtlX2RlY2xfb25lX29ubHkgKHRyZWUsIHRyZWUpOworZXh0ZXJuIGludCBzdXBwb3J0c19vbmVfb25seSAodm9pZCk7CitleHRlcm4gdm9pZCByZXNvbHZlX3VuaXF1ZV9zZWN0aW9uICh0cmVlLCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBtYXJrX3JlZmVyZW5jZWQgKHRyZWUpOworZXh0ZXJuIHZvaWQgbWFya19kZWNsX3JlZmVyZW5jZWQgKHRyZWUpOworZXh0ZXJuIHZvaWQgbm90aWNlX2dsb2JhbF9zeW1ib2wgKHRyZWUpOworZXh0ZXJuIHZvaWQgc2V0X3VzZXJfYXNzZW1ibGVyX25hbWUgKHRyZWUsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBwcm9jZXNzX3BlbmRpbmdfYXNzZW1ibGVfZXh0ZXJuYWxzICh2b2lkKTsKK2V4dGVybiBib29sIGRlY2xfcmVwbGFjZWFibGVfcCAodHJlZSk7CitleHRlcm4gYm9vbCBkZWNsX2JpbmRzX3RvX2N1cnJlbnRfZGVmX3AgKHRyZWUpOworZXh0ZXJuIGVudW0gdGxzX21vZGVsIGRlY2xfZGVmYXVsdF90bHNfbW9kZWwgKGNvbnN0X3RyZWUpOworCisvKiBEZWNsYXJlIERFQ0wgdG8gYmUgYSB3ZWFrIHN5bWJvbC4gICovCitleHRlcm4gdm9pZCBkZWNsYXJlX3dlYWsgKHRyZWUpOworLyogTWVyZ2Ugd2VhayBzdGF0dXMuICAqLworZXh0ZXJuIHZvaWQgbWVyZ2Vfd2VhayAodHJlZSwgdHJlZSk7CisvKiBNYWtlIG9uZSBzeW1ib2wgYW4gYWxpYXMgZm9yIGFub3RoZXIuICAqLworZXh0ZXJuIHZvaWQgYXNzZW1ibGVfYWxpYXMgKHRyZWUsIHRyZWUpOworCisvKiBSZXR1cm4gbm9uemVybyBpZiBWQUxVRSBpcyBhIHZhbGlkIGNvbnN0YW50LXZhbHVlZCBleHByZXNzaW9uCisgICBmb3IgdXNlIGluIGluaXRpYWxpemluZyBhIHN0YXRpYyB2YXJpYWJsZTsgb25lIHRoYXQgY2FuIGJlIGFuCisgICBlbGVtZW50IG9mIGEgImNvbnN0YW50IiBpbml0aWFsaXplci4KKworICAgUmV0dXJuIG51bGxfcG9pbnRlcl9ub2RlIGlmIHRoZSB2YWx1ZSBpcyBhYnNvbHV0ZTsKKyAgIGlmIGl0IGlzIHJlbG9jYXRhYmxlLCByZXR1cm4gdGhlIHZhcmlhYmxlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgcmVsb2NhdGlvbi4KKyAgIFdlIGFzc3VtZSB0aGF0IFZBTFVFIGhhcyBiZWVuIGZvbGRlZCBhcyBtdWNoIGFzIHBvc3NpYmxlOworICAgdGhlcmVmb3JlLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBmb3Igc3VjaCB0aGluZ3MgYXMKKyAgIGFyaXRobWV0aWMtY29tYmluYXRpb25zIG9mIGludGVnZXJzLiAgKi8KK2V4dGVybiB0cmVlIGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3AgKHRyZWUsIHRyZWUpOworCisvKiBSZXR1cm4gdHJ1ZSBpZiBWQUxVRSBpcyBhIHZhbGlkIGNvbnN0YW50LXZhbHVlZCBleHByZXNzaW9uCisgICBmb3IgdXNlIGluIGluaXRpYWxpemluZyBhIHN0YXRpYyBiaXQtZmllbGQ7IG9uZSB0aGF0IGNhbiBiZQorICAgYW4gZWxlbWVudCBvZiBhICJjb25zdGFudCIgaW5pdGlhbGl6ZXIuICAqLworZXh0ZXJuIGJvb2wgaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfZm9yX2JpdGZpZWxkX3AgKHRyZWUpOworCisvKiBXaGV0aGVyIGEgY29uc3RydWN0b3IgQ1RPUiBpcyBhIHZhbGlkIHN0YXRpYyBjb25zdGFudCBpbml0aWFsaXplciBpZiBhbGwKKyAgIGl0cyBlbGVtZW50cyBhcmUuICBUaGlzIHVzZWQgdG8gYmUgaW50ZXJuYWwgdG8gaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcAorICAgYW5kIGhhcyBiZWVuIGV4cG9zZWQgdG8gbGV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGNhdGVnb3JpemVfY3Rvcl9lbGVtZW50cworICAgZXZhbHVhdGUgdGhlIHByb3BlcnR5IHdoaWxlIHdhbGtpbmcgYSBjb25zdHJ1Y3RvciBmb3Igb3RoZXIgcHVycG9zZXMuICAqLworCitleHRlcm4gYm9vbCBjb25zdHJ1Y3Rvcl9zdGF0aWNfZnJvbV9lbHRzX3AgKGNvbnN0X3RyZWUpOworCisvKiBJbiBzdG10LmMgKi8KK2V4dGVybiB2b2lkIGV4cGFuZF9jb21wdXRlZF9nb3RvICh0cmVlKTsKK2V4dGVybiBib29sIHBhcnNlX291dHB1dF9jb25zdHJhaW50IChjb25zdCBjaGFyICoqLCBpbnQsIGludCwgaW50LAorCQkJCSAgICAgYm9vbCAqLCBib29sICosIGJvb2wgKik7CitleHRlcm4gYm9vbCBwYXJzZV9pbnB1dF9jb25zdHJhaW50IChjb25zdCBjaGFyICoqLCBpbnQsIGludCwgaW50LCBpbnQsCisJCQkJICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqLCBib29sICosIGJvb2wgKik7CitleHRlcm4gdm9pZCBleHBhbmRfYXNtX3N0bXQgKGdpbXBsZSk7CitleHRlcm4gdHJlZSByZXNvbHZlX2FzbV9vcGVyYW5kX25hbWVzICh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKKyNpZmRlZiBIQVJEX0NPTlNUCisvKiBTaWxseSBpZmRlZiB0byBhdm9pZCBoYXZpbmcgYWxsIGluY2x1ZGVycyBkZXBlbmQgb24gaGFyZC1yZWctc2V0LmguICAqLworZXh0ZXJuIHRyZWUgdHJlZV9vdmVybGFwc19oYXJkX3JlZ19zZXQgKHRyZWUsIEhBUkRfUkVHX1NFVCAqKTsKKyNlbmRpZgorCisMCisvKiBJbiB0cmVlLWlubGluZS5jICAqLworCisvKiBUaGUgdHlwZSBvZiBhIHNldCBvZiBhbHJlYWR5LXZpc2l0ZWQgcG9pbnRlcnMuICBGdW5jdGlvbnMgZm9yIGNyZWF0aW5nCisgICBhbmQgbWFuaXB1bGF0aW5nIGl0IGFyZSBkZWNsYXJlZCBpbiBwb2ludGVyLXNldC5oICovCitzdHJ1Y3QgcG9pbnRlcl9zZXRfdDsKKworLyogVGhlIHR5cGUgb2YgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2Fsa2luZyBvdmVyIHRyZWUgc3RydWN0dXJlLiAgKi8KKwordHlwZWRlZiB0cmVlICgqd2Fsa190cmVlX2ZuKSAodHJlZSAqLCBpbnQgKiwgdm9pZCAqKTsKKworLyogVGhlIHR5cGUgb2YgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlcHJlc2VudHMgYSBjdXN0b20gd2Fsa190cmVlLiAgKi8KKwordHlwZWRlZiB0cmVlICgqd2Fsa190cmVlX2xoKSAodHJlZSAqLCBpbnQgKiwgdHJlZSAoKikgKHRyZWUgKiwgaW50ICosIHZvaWQgKiksCisJCQkgICAgICB2b2lkICosIHN0cnVjdCBwb2ludGVyX3NldF90Kik7CisKK2V4dGVybiB0cmVlIHdhbGtfdHJlZV8xICh0cmVlKiwgd2Fsa190cmVlX2ZuLCB2b2lkKiwgc3RydWN0IHBvaW50ZXJfc2V0X3QqLAorCQkJIHdhbGtfdHJlZV9saCk7CitleHRlcm4gdHJlZSB3YWxrX3RyZWVfd2l0aG91dF9kdXBsaWNhdGVzXzEgKHRyZWUqLCB3YWxrX3RyZWVfZm4sIHZvaWQqLAorCQkJCQkgICAgd2Fsa190cmVlX2xoKTsKKyNkZWZpbmUgd2Fsa190cmVlKGEsYixjLGQpIFwKKwl3YWxrX3RyZWVfMSAoYSwgYiwgYywgZCwgTlVMTCkKKyNkZWZpbmUgd2Fsa190cmVlX3dpdGhvdXRfZHVwbGljYXRlcyhhLGIsYykgXAorCXdhbGtfdHJlZV93aXRob3V0X2R1cGxpY2F0ZXNfMSAoYSwgYiwgYywgTlVMTCkKKworLyogSW4gZW1pdC1ydGwuYyAqLworLyogQXNzaWduIHRoZSBSVFggdG8gZGVjbGFyYXRpb24uICAqLworCitleHRlcm4gdm9pZCBzZXRfZGVjbF9ydGwgKHRyZWUsIHJ0eCk7CitleHRlcm4gdm9pZCBzZXRfZGVjbF9pbmNvbWluZ19ydGwgKHRyZWUsIHJ0eCwgYm9vbCk7CisMCisvKiBFbnVtIGFuZCBhcnJheXMgdXNlZCBmb3IgdHJlZSBhbGxvY2F0aW9uIHN0YXRzLgorICAgS2VlcCBpbiBzeW5jIHdpdGggdHJlZS5jOnRyZWVfbm9kZV9raW5kX25hbWVzLiAgKi8KK3R5cGVkZWYgZW51bQoreworICBkX2tpbmQsCisgIHRfa2luZCwKKyAgYl9raW5kLAorICBzX2tpbmQsCisgIHJfa2luZCwKKyAgZV9raW5kLAorICBjX2tpbmQsCisgIGlkX2tpbmQsCisgIHZlY19raW5kLAorICBiaW5mb19raW5kLAorICBzc2FfbmFtZV9raW5kLAorICBjb25zdHJfa2luZCwKKyAgeF9raW5kLAorICBsYW5nX2RlY2wsCisgIGxhbmdfdHlwZSwKKyAgb21wX2NsYXVzZV9raW5kLAorICBhbGxfa2luZHMKK30gdHJlZV9ub2RlX2tpbmQ7CisKK2V4dGVybiBpbnQgdHJlZV9ub2RlX2NvdW50c1tdOworZXh0ZXJuIGludCB0cmVlX25vZGVfc2l6ZXNbXTsKKworLyogVHJ1ZSBpZiB3ZSBhcmUgaW4gZ2ltcGxlIGZvcm0gYW5kIHRoZSBhY3Rpb25zIG9mIHRoZSBmb2xkZXJzIG5lZWQgdG8KKyAgIGJlIHJlc3RyaWN0ZWQuICBGYWxzZSBpZiB3ZSBhcmUgbm90IGluIGdpbXBsZSBmb3JtIGFuZCBmb2xkaW5nIGlzIG5vdAorICAgcmVzdHJpY3RlZCB0byBjcmVhdGluZyBnaW1wbGUgZXhwcmVzc2lvbnMuICAqLworZXh0ZXJuIGJvb2wgaW5fZ2ltcGxlX2Zvcm07CisKKy8qIEluIGdpbXBsZS5jLiAgKi8KK2V4dGVybiB0cmVlIGdldF9iYXNlX2FkZHJlc3MgKHRyZWUgdCk7CitleHRlcm4gdm9pZCBtYXJrX2FkZHJlc3NhYmxlICh0cmVlKTsKKworLyogSW4gdHJlZS5jLiAgKi8KKworc3RydWN0IEdUWSgoKSkgdHJlZV9tYXBfYmFzZSB7CisgIHRyZWUgZnJvbTsKK307CisKK2V4dGVybiBpbnQgdHJlZV9tYXBfYmFzZV9lcSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOworZXh0ZXJuIHVuc2lnbmVkIGludCB0cmVlX21hcF9iYXNlX2hhc2ggKGNvbnN0IHZvaWQgKik7CitleHRlcm4gaW50IHRyZWVfbWFwX2Jhc2VfbWFya2VkX3AgKGNvbnN0IHZvaWQgKik7CitleHRlcm4gYm9vbCBsaXN0X2VxdWFsX3AgKGNvbnN0X3RyZWUsIGNvbnN0X3RyZWUpOworCisvKiBNYXAgZnJvbSBhIHRyZWUgdG8gYW5vdGhlciB0cmVlLiAgKi8KKworc3RydWN0IEdUWSgoKSkgdHJlZV9tYXAgeworICBzdHJ1Y3QgdHJlZV9tYXBfYmFzZSBiYXNlOworICB1bnNpZ25lZCBpbnQgaGFzaDsKKyAgdHJlZSB0bzsKK307CisKKyNkZWZpbmUgdHJlZV9tYXBfZXEgdHJlZV9tYXBfYmFzZV9lcQorZXh0ZXJuIHVuc2lnbmVkIGludCB0cmVlX21hcF9oYXNoIChjb25zdCB2b2lkICopOworI2RlZmluZSB0cmVlX21hcF9tYXJrZWRfcCB0cmVlX21hcF9iYXNlX21hcmtlZF9wCisKKy8qIE1hcCBmcm9tIGEgZGVjbCB0cmVlIHRvIGFub3RoZXIgdHJlZS4gICovCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfZGVjbF9tYXAgeworICBzdHJ1Y3QgdHJlZV9tYXBfYmFzZSBiYXNlOworICB0cmVlIHRvOworfTsKKworI2RlZmluZSB0cmVlX2RlY2xfbWFwX2VxIHRyZWVfbWFwX2Jhc2VfZXEKK2V4dGVybiB1bnNpZ25lZCBpbnQgdHJlZV9kZWNsX21hcF9oYXNoIChjb25zdCB2b2lkICopOworI2RlZmluZSB0cmVlX2RlY2xfbWFwX21hcmtlZF9wIHRyZWVfbWFwX2Jhc2VfbWFya2VkX3AKKworLyogTWFwIGZyb20gYSB0cmVlIHRvIGFuIGludC4gICovCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfaW50X21hcCB7CisgIHN0cnVjdCB0cmVlX21hcF9iYXNlIGJhc2U7CisgIHVuc2lnbmVkIGludCB0bzsKK307CisKKyNkZWZpbmUgdHJlZV9pbnRfbWFwX2VxIHRyZWVfbWFwX2Jhc2VfZXEKKyNkZWZpbmUgdHJlZV9pbnRfbWFwX2hhc2ggdHJlZV9tYXBfYmFzZV9oYXNoCisjZGVmaW5lIHRyZWVfaW50X21hcF9tYXJrZWRfcCB0cmVlX21hcF9iYXNlX21hcmtlZF9wCisKKy8qIE1hcCBmcm9tIGEgdHJlZSB0byBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gcHJpb3JpdGllcy4gICovCisKK3N0cnVjdCBHVFkoKCkpIHRyZWVfcHJpb3JpdHlfbWFwIHsKKyAgc3RydWN0IHRyZWVfbWFwX2Jhc2UgYmFzZTsKKyAgcHJpb3JpdHlfdHlwZSBpbml0OworICBwcmlvcml0eV90eXBlIGZpbmk7Cit9OworCisjZGVmaW5lIHRyZWVfcHJpb3JpdHlfbWFwX2VxIHRyZWVfbWFwX2Jhc2VfZXEKKyNkZWZpbmUgdHJlZV9wcmlvcml0eV9tYXBfaGFzaCB0cmVlX21hcF9iYXNlX2hhc2gKKyNkZWZpbmUgdHJlZV9wcmlvcml0eV9tYXBfbWFya2VkX3AgdHJlZV9tYXBfYmFzZV9tYXJrZWRfcAorCisvKiBNYXAgZnJvbSBhIGRlY2wgdHJlZSB0byBhIHRyZWUgdmVjdG9yLiAgKi8KKworc3RydWN0IEdUWSgoKSkgdHJlZV92ZWNfbWFwIHsKKyAgc3RydWN0IHRyZWVfbWFwX2Jhc2UgYmFzZTsKKyAgdmVjPHRyZWUsIHZhX2djPiAqdG87Cit9OworCisjZGVmaW5lIHRyZWVfdmVjX21hcF9lcSB0cmVlX21hcF9iYXNlX2VxCisjZGVmaW5lIHRyZWVfdmVjX21hcF9oYXNoIHRyZWVfZGVjbF9tYXBfaGFzaAorI2RlZmluZSB0cmVlX3ZlY19tYXBfbWFya2VkX3AgdHJlZV9tYXBfYmFzZV9tYXJrZWRfcAorCisvKiBJbiB0cmVlLXNzYS5jICovCisKK3RyZWUgdGFyZ2V0X2Zvcl9kZWJ1Z19iaW5kICh0cmVlKTsKKworLyogSW4gdHJlZS1zc2EtYWRkcmVzcy5jLiAgKi8KK2V4dGVybiB0cmVlIHRyZWVfbWVtX3JlZl9hZGRyICh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIGNvcHlfcmVmX2luZm8gKHRyZWUsIHRyZWUpOworCisvKiBJbiB0cmVlLXZycC5jICovCitleHRlcm4gYm9vbCBzc2FfbmFtZV9ub25uZWdhdGl2ZV9wIChjb25zdF90cmVlKTsKKworLyogSW4gdHJlZS1vYmplY3Qtc2l6ZS5jLiAgKi8KK2V4dGVybiB2b2lkIGluaXRfb2JqZWN0X3NpemVzICh2b2lkKTsKK2V4dGVybiB2b2lkIGZpbmlfb2JqZWN0X3NpemVzICh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGNvbXB1dGVfYnVpbHRpbl9vYmplY3Rfc2l6ZSAodHJlZSwgaW50KTsKKworLyogSW4gZXhwci5jLiAgKi8KKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIExFTiBieXRlcyBjYW4gYmUgbW92ZWQgYnkgdXNpbmcgc2V2ZXJhbCBtb3ZlCisgICBpbnN0cnVjdGlvbnMuICBSZXR1cm4gbm9uemVybyBpZiBhIGNhbGwgdG8gbW92ZV9ieV9waWVjZXMgc2hvdWxkCisgICBzdWNjZWVkLiAgKi8KK2V4dGVybiBpbnQgY2FuX21vdmVfYnlfcGllY2VzICh1bnNpZ25lZCBIT1NUX1dJREVfSU5ULCB1bnNpZ25lZCBpbnQpOworCisvKiBJcyBpdCBhbiBBRERSX0VYUFIgb2YgYSBERUNMIHRoYXQncyBub3QgaW4gbWVtb3J5PyAgKi8KK2V4dGVybiBib29sIGFkZHJfZXhwcl9vZl9ub25fbWVtX2RlY2xfcCAodHJlZSk7CisKK2V4dGVybiB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIGhpZ2hlc3RfcG93Ml9mYWN0b3IgKGNvbnN0X3RyZWUpOworZXh0ZXJuIHRyZWUgYnVpbGRfcGVyc29uYWxpdHlfZnVuY3Rpb24gKGNvbnN0IGNoYXIgKik7CisKKy8qIEluIHRyYW5zLW1lbS5jLiAgKi8KK2V4dGVybiB0cmVlIGJ1aWxkX3RtX2Fib3J0X2NhbGwgKGxvY2F0aW9uX3QsIGJvb2wpOworZXh0ZXJuIGJvb2wgaXNfdG1fc2FmZSAoY29uc3RfdHJlZSk7CitleHRlcm4gYm9vbCBpc190bV9wdXJlIChjb25zdF90cmVlKTsKK2V4dGVybiBib29sIGlzX3RtX21heV9jYW5jZWxfb3V0ZXIgKHRyZWUpOworZXh0ZXJuIGJvb2wgaXNfdG1fZW5kaW5nX2ZuZGVjbCAodHJlZSk7CitleHRlcm4gdm9pZCByZWNvcmRfdG1fcmVwbGFjZW1lbnQgKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZvaWQgdG1fbWFsbG9jX3JlcGxhY2VtZW50ICh0cmVlKTsKKworc3RhdGljIGlubGluZSBib29sCitpc190bV9zYWZlX29yX3B1cmUgKGNvbnN0X3RyZWUgeCkKK3sKKyAgcmV0dXJuIGlzX3RtX3NhZmUgKHgpIHx8IGlzX3RtX3B1cmUgKHgpOworfQorCisvKiBJbiB0cmVlLWlubGluZS5jLiAgKi8KKwordm9pZCBpbml0X2lubGluZV9vbmNlICh2b2lkKTsKKworLyogQWJzdHJhY3QgaXRlcmF0b3JzIGZvciBDQUxMX0VYUFJzLiAgVGhlc2Ugc3RhdGljIGlubGluZSBkZWZpbml0aW9ucworICAgaGF2ZSB0byBnbyB0b3dhcmRzIHRoZSBlbmQgb2YgdHJlZS5oIHNvIHRoYXQgdW5pb24gdHJlZV9ub2RlIGlzIGZ1bGx5CisgICBkZWZpbmVkIGJ5IHRoaXMgcG9pbnQuICAqLworCisvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBpdGVyYXRvciBzdGF0ZS4gICovCit0eXBlZGVmIHN0cnVjdCBjYWxsX2V4cHJfYXJnX2l0ZXJhdG9yX2QgeworICB0cmVlIHQ7CS8qIHRoZSBjYWxsX2V4cHIgKi8KKyAgaW50IG47CS8qIGFyZ3VtZW50IGNvdW50ICovCisgIGludCBpOwkvKiBuZXh0IGFyZ3VtZW50IGluZGV4ICovCit9IGNhbGxfZXhwcl9hcmdfaXRlcmF0b3I7CisKK3R5cGVkZWYgc3RydWN0IGNvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3JfZCB7CisgIGNvbnN0X3RyZWUgdDsJLyogdGhlIGNhbGxfZXhwciAqLworICBpbnQgbjsJLyogYXJndW1lbnQgY291bnQgKi8KKyAgaW50IGk7CS8qIG5leHQgYXJndW1lbnQgaW5kZXggKi8KK30gY29uc3RfY2FsbF9leHByX2FyZ19pdGVyYXRvcjsKKworLyogSW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgYXJndW1lbnQgbGlzdCBpdGVyYXRvciBvYmplY3QgSVRFUiB3aXRoIHRoZQorICAgYXJndW1lbnRzIGZyb20gQ0FMTF9FWFBSIG5vZGUgRVhQLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5pdF9jYWxsX2V4cHJfYXJnX2l0ZXJhdG9yICh0cmVlIGV4cCwgY2FsbF9leHByX2FyZ19pdGVyYXRvciAqaXRlcikKK3sKKyAgaXRlci0+dCA9IGV4cDsKKyAgaXRlci0+biA9IGNhbGxfZXhwcl9uYXJncyAoZXhwKTsKKyAgaXRlci0+aSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraW5pdF9jb25zdF9jYWxsX2V4cHJfYXJnX2l0ZXJhdG9yIChjb25zdF90cmVlIGV4cCwgY29uc3RfY2FsbF9leHByX2FyZ19pdGVyYXRvciAqaXRlcikKK3sKKyAgaXRlci0+dCA9IGV4cDsKKyAgaXRlci0+biA9IGNhbGxfZXhwcl9uYXJncyAoZXhwKTsKKyAgaXRlci0+aSA9IDA7Cit9CisKKy8qIFJldHVybiB0aGUgbmV4dCBhcmd1bWVudCBmcm9tIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3Igb2JqZWN0IElURVIsCisgICBhbmQgYWR2YW5jZSBpdHMgc3RhdGUuICBSZXR1cm4gTlVMTF9UUkVFIGlmIHRoZXJlIGFyZSBubyBtb3JlIGFyZ3VtZW50cy4gICovCitzdGF0aWMgaW5saW5lIHRyZWUKK25leHRfY2FsbF9leHByX2FyZyAoY2FsbF9leHByX2FyZ19pdGVyYXRvciAqaXRlcikKK3sKKyAgdHJlZSByZXN1bHQ7CisgIGlmIChpdGVyLT5pID49IGl0ZXItPm4pCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgcmVzdWx0ID0gQ0FMTF9FWFBSX0FSRyAoaXRlci0+dCwgaXRlci0+aSk7CisgIGl0ZXItPmkrKzsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBjb25zdF90cmVlCituZXh0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKGNvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IgKml0ZXIpCit7CisgIGNvbnN0X3RyZWUgcmVzdWx0OworICBpZiAoaXRlci0+aSA+PSBpdGVyLT5uKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisgIHJlc3VsdCA9IENBTExfRVhQUl9BUkcgKGl0ZXItPnQsIGl0ZXItPmkpOworICBpdGVyLT5pKys7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3Igb2JqZWN0IElURVIsIHRoZW4gYWR2YW5jZQorICAgcGFzdCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBhcmd1bWVudC4gIFVzZWZ1bCBpbiBmb3IgZXhwcmVzc2lvbnMsIGUuZy4KKyAgICAgZm9yIChhcmcgPSBmaXJzdF9jYWxsX2V4cHJfYXJnIChleHAsICZpdGVyKTsgYXJnOworICAgICAgICAgIGFyZyA9IG5leHRfY2FsbF9leHByX2FyZyAoJml0ZXIpKSAgICovCitzdGF0aWMgaW5saW5lIHRyZWUKK2ZpcnN0X2NhbGxfZXhwcl9hcmcgKHRyZWUgZXhwLCBjYWxsX2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICBpbml0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IgKGV4cCwgaXRlcik7CisgIHJldHVybiBuZXh0X2NhbGxfZXhwcl9hcmcgKGl0ZXIpOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0X3RyZWUKK2ZpcnN0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKGNvbnN0X3RyZWUgZXhwLCBjb25zdF9jYWxsX2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICBpbml0X2NvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IgKGV4cCwgaXRlcik7CisgIHJldHVybiBuZXh0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKGl0ZXIpOworfQorCisvKiBUZXN0IHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgYXJndW1lbnRzIGluIGFic3RyYWN0IGFyZ3VtZW50IGxpc3QgaXRlcmF0b3IKKyAgIElURVIsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIHN0YXRlLiAgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorbW9yZV9jYWxsX2V4cHJfYXJnc19wIChjb25zdCBjYWxsX2V4cHJfYXJnX2l0ZXJhdG9yICppdGVyKQoreworICByZXR1cm4gKGl0ZXItPmkgPCBpdGVyLT5uKTsKK30KKworc3RhdGljIGlubGluZSBib29sCittb3JlX2NvbnN0X2NhbGxfZXhwcl9hcmdzX3AgKGNvbnN0IGNvbnN0X2NhbGxfZXhwcl9hcmdfaXRlcmF0b3IgKml0ZXIpCit7CisgIHJldHVybiAoaXRlci0+aSA8IGl0ZXItPm4pOworfQorCisvKiBJdGVyYXRlIHRocm91Z2ggZWFjaCBhcmd1bWVudCBBUkcgb2YgQ0FMTF9FWFBSIENBTEwsIHVzaW5nIHZhcmlhYmxlIElURVIKKyAgIChvZiB0eXBlIGNhbGxfZXhwcl9hcmdfaXRlcmF0b3IpIHRvIGhvbGQgdGhlIGl0ZXJhdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIEZPUl9FQUNIX0NBTExfRVhQUl9BUkcoYXJnLCBpdGVyLCBjYWxsKQkJCVwKKyAgZm9yICgoYXJnKSA9IGZpcnN0X2NhbGxfZXhwcl9hcmcgKChjYWxsKSwgJihpdGVyKSk7IChhcmcpOwlcCisgICAgICAgKGFyZykgPSBuZXh0X2NhbGxfZXhwcl9hcmcgKCYoaXRlcikpKQorCisjZGVmaW5lIEZPUl9FQUNIX0NPTlNUX0NBTExfRVhQUl9BUkcoYXJnLCBpdGVyLCBjYWxsKQkJCVwKKyAgZm9yICgoYXJnKSA9IGZpcnN0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKChjYWxsKSwgJihpdGVyKSk7IChhcmcpOwlcCisgICAgICAgKGFyZykgPSBuZXh0X2NvbnN0X2NhbGxfZXhwcl9hcmcgKCYoaXRlcikpKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0cmVlIG5vZGUgVCBpcyBhIGxhbmd1YWdlLXNwZWNpZmljIG5vZGUuICAqLworc3RhdGljIGlubGluZSBib29sCitpc19sYW5nX3NwZWNpZmljICh0cmVlIHQpCit7CisgIHJldHVybiBUUkVFX0NPREUgKHQpID09IExBTkdfVFlQRSB8fCBUUkVFX0NPREUgKHQpID49IE5VTV9UUkVFX0NPREVTOworfQorCisvKiBJbiBnaW1wbGUtbG93LmMuICAqLworZXh0ZXJuIGJvb2wgYmxvY2tfbWF5X2ZhbGx0aHJ1IChjb25zdF90cmVlKTsKKworDAorLyogRnVuY3Rpb25hbCBpbnRlcmZhY2UgdG8gdGhlIGJ1aWx0aW4gZnVuY3Rpb25zLiAgKi8KKworLyogVGhlIGJ1aWx0aW5faW5mbyBzdHJ1Y3R1cmUgaG9sZHMgdGhlIEZVTkNUSU9OX0RFQ0wgb2YgdGhlIHN0YW5kYXJkIGJ1aWx0aW4KKyAgIGZ1bmN0aW9uLCBhbmQgYSBmbGFnIHRoYXQgc2F5cyBpZiB0aGUgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGltcGxpY2l0bHksIG9yCisgICB3aGV0aGVyIHRoZSB1c2VyIGhhcyB0byBjb2RlIGV4cGxpY2l0IGNhbGxzIHRvIF9fYnVpbHRpbl88eHh4Pi4gICovCisKK3R5cGVkZWYgc3RydWN0IEdUWSgoKSkgYnVpbHRpbl9pbmZvX3R5cGVfZCB7CisgIHRyZWUgZGVjbFsoaW50KUVORF9CVUlMVElOU107CisgIGJvb2wgaW1wbGljaXRfcFsoaW50KUVORF9CVUlMVElOU107Cit9IGJ1aWx0aW5faW5mb190eXBlOworCitleHRlcm4gR1RZKCgpKSBidWlsdGluX2luZm9fdHlwZSBidWlsdGluX2luZm87CisKKy8qIFZhbGlkIGJ1aWx0aW4gbnVtYmVyLiAgKi8KKyNkZWZpbmUgQlVJTFRJTl9WQUxJRF9QKEZOQ09ERSkgXAorICAoSU5fUkFOR0UgKChpbnQpRk5DT0RFLCAoKGludClCVUlMVF9JTl9OT05FKSArIDEsICgoaW50KSBFTkRfQlVJTFRJTlMpIC0gMSkpCisKKy8qIFJldHVybiB0aGUgdHJlZSBub2RlIGZvciBhbiBleHBsaWNpdCBzdGFuZGFyZCBidWlsdGluIGZ1bmN0aW9uIG9yIE5VTEwuICAqLworc3RhdGljIGlubGluZSB0cmVlCitidWlsdGluX2RlY2xfZXhwbGljaXQgKGVudW0gYnVpbHRfaW5fZnVuY3Rpb24gZm5jb2RlKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChCVUlMVElOX1ZBTElEX1AgKGZuY29kZSkpOworCisgIHJldHVybiBidWlsdGluX2luZm8uZGVjbFsoc2l6ZV90KWZuY29kZV07Cit9CisKKy8qIFJldHVybiB0aGUgdHJlZSBub2RlIGZvciBhbiBpbXBsaWNpdCBidWlsdGluIGZ1bmN0aW9uIG9yIE5VTEwuICAqLworc3RhdGljIGlubGluZSB0cmVlCitidWlsdGluX2RlY2xfaW1wbGljaXQgKGVudW0gYnVpbHRfaW5fZnVuY3Rpb24gZm5jb2RlKQoreworICBzaXplX3QgdW5zX2ZuY29kZSA9IChzaXplX3QpZm5jb2RlOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChCVUlMVElOX1ZBTElEX1AgKGZuY29kZSkpOworCisgIGlmICghYnVpbHRpbl9pbmZvLmltcGxpY2l0X3BbdW5zX2ZuY29kZV0pCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKworICByZXR1cm4gYnVpbHRpbl9pbmZvLmRlY2xbdW5zX2ZuY29kZV07Cit9CisKKy8qIFNldCBleHBsaWNpdCBidWlsdGluIGZ1bmN0aW9uIG5vZGVzIGFuZCB3aGV0aGVyIGl0IGlzIGFuIGltcGxpY2l0CisgICBmdW5jdGlvbi4gICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X2J1aWx0aW5fZGVjbCAoZW51bSBidWlsdF9pbl9mdW5jdGlvbiBmbmNvZGUsIHRyZWUgZGVjbCwgYm9vbCBpbXBsaWNpdF9wKQoreworICBzaXplX3QgdWZuY29kZSA9IChzaXplX3QpZm5jb2RlOworCisgIGdjY19jaGVja2luZ19hc3NlcnQgKEJVSUxUSU5fVkFMSURfUCAoZm5jb2RlKQorCQkgICAgICAgJiYgKGRlY2wgIT0gTlVMTF9UUkVFIHx8ICFpbXBsaWNpdF9wKSk7CisKKyAgYnVpbHRpbl9pbmZvLmRlY2xbdWZuY29kZV0gPSBkZWNsOworICBidWlsdGluX2luZm8uaW1wbGljaXRfcFt1Zm5jb2RlXSA9IGltcGxpY2l0X3A7Cit9CisKKy8qIFNldCB0aGUgaW1wbGljaXQgZmxhZyBmb3IgYSBidWlsdGluIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitzZXRfYnVpbHRpbl9kZWNsX2ltcGxpY2l0X3AgKGVudW0gYnVpbHRfaW5fZnVuY3Rpb24gZm5jb2RlLCBib29sIGltcGxpY2l0X3ApCit7CisgIHNpemVfdCB1bnNfZm5jb2RlID0gKHNpemVfdClmbmNvZGU7CisKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoQlVJTFRJTl9WQUxJRF9QIChmbmNvZGUpCisJCSAgICAgICAmJiBidWlsdGluX2luZm8uZGVjbFt1bnNfZm5jb2RlXSAhPSBOVUxMX1RSRUUpOworCisgIGJ1aWx0aW5faW5mby5pbXBsaWNpdF9wW3Vuc19mbmNvZGVdID0gaW1wbGljaXRfcDsKK30KKworLyogUmV0dXJuIHdoZXRoZXIgdGhlIHN0YW5kYXJkIGJ1aWx0aW4gZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYW4gZXhwbGljaXQKKyAgIGZ1bmN0aW9uLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitidWlsdGluX2RlY2xfZXhwbGljaXRfcCAoZW51bSBidWlsdF9pbl9mdW5jdGlvbiBmbmNvZGUpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKEJVSUxUSU5fVkFMSURfUCAoZm5jb2RlKSk7CisgIHJldHVybiAoYnVpbHRpbl9pbmZvLmRlY2xbKHNpemVfdClmbmNvZGVdICE9IE5VTExfVFJFRSk7Cit9CisKKy8qIFJldHVybiB3aGV0aGVyIHRoZSBzdGFuZGFyZCBidWlsdGluIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGltcGxpY2l0bHkuICAqLworCitzdGF0aWMgaW5saW5lIGJvb2wKK2J1aWx0aW5fZGVjbF9pbXBsaWNpdF9wIChlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGZuY29kZSkKK3sKKyAgc2l6ZV90IHVuc19mbmNvZGUgPSAoc2l6ZV90KWZuY29kZTsKKworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChCVUlMVElOX1ZBTElEX1AgKGZuY29kZSkpOworICByZXR1cm4gKGJ1aWx0aW5faW5mby5kZWNsW3Vuc19mbmNvZGVdICE9IE5VTExfVFJFRQorCSAgJiYgYnVpbHRpbl9pbmZvLmltcGxpY2l0X3BbdW5zX2ZuY29kZV0pOworfQorCisjZW5kaWYgIC8qIEdDQ19UUkVFX0ggICovCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZXN0cnVjdC5kZWYgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdHJlZXN0cnVjdC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2OTYxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS90cmVlc3RydWN0LmRlZgpAQCAtMCwwICsxLDcwIEBACisvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgdHJlZSBzdHJ1Y3R1cmUKKyAgIGVudW1lcmF0aW9uIHVzZWQgaW4gR0NDLgorCitDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzCisKKyAgIERFRlRSRUVTVFJVQ1QoZW51bWVyYXRpb24gdmFsdWUsIHByaW50YWJsZSBuYW1lKS4KKworICAgRWFjaCBlbnVtZXJhdGlvbiB2YWx1ZSBzaG91bGQgY29ycmVzcG9uZCB3aXRoIGEgc2luZ2xlIG1lbWJlciBvZgorICAgdW5pb24gdHJlZV9ub2RlLgorCisgICBUaGVzZSBlbnVtZXJhdG9yIHZhbHVlcyBhcmUgdXNlZCBpbiBvcmRlciB0byBkaXN0aW5ndWlzaCBtZW1iZXJzIG9mCisgICB1bmlvbiB0cmVlX25vZGUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbiBwdXJwb3NlcywgYXMgd2VsbCBhcworICAgc3BlY2lmeWluZyB3aGF0IHN0cnVjdHVyZXMgY29udGFpbiB3aGF0IG90aGVyIHN0cnVjdHVyZXMgaW4gdGhlCisgICB0cmVlX2NvbnRhaW5zX3N0cnVjdCBhcnJheS4gICovCitERUZUUkVFU1RSVUNUKFRTX0JBU0UsICJiYXNlIikKK0RFRlRSRUVTVFJVQ1QoVFNfVFlQRUQsICJ0eXBlZCIpCitERUZUUkVFU1RSVUNUKFRTX0NPTU1PTiwgImNvbW1vbiIpCitERUZUUkVFU1RSVUNUKFRTX0lOVF9DU1QsICJpbnRlZ2VyIGNzdCIpCitERUZUUkVFU1RSVUNUKFRTX1JFQUxfQ1NULCAicmVhbCBjc3QiKQorREVGVFJFRVNUUlVDVChUU19GSVhFRF9DU1QsICJmaXhlZCBjc3QiKQorREVGVFJFRVNUUlVDVChUU19WRUNUT1IsICJ2ZWN0b3IiKQorREVGVFJFRVNUUlVDVChUU19TVFJJTkcsICJzdHJpbmciKQorREVGVFJFRVNUUlVDVChUU19DT01QTEVYLCAiY29tcGxleCIpCitERUZUUkVFU1RSVUNUKFRTX0lERU5USUZJRVIsICJpZGVudGlmaWVyIikKK0RFRlRSRUVTVFJVQ1QoVFNfREVDTF9NSU5JTUFMLCAiZGVjbCBtaW5pbWFsIikKK0RFRlRSRUVTVFJVQ1QoVFNfREVDTF9DT01NT04sICJkZWNsIGNvbW1vbiIpCitERUZUUkVFU1RSVUNUKFRTX0RFQ0xfV1JUTCwgImRlY2wgd2l0aCBSVEwiKQorREVGVFJFRVNUUlVDVChUU19ERUNMX05PTl9DT01NT04sICJkZWNsIG5vbi1jb21tb24iKQorREVGVFJFRVNUUlVDVChUU19ERUNMX1dJVEhfVklTLCAiZGVjbCB3aXRoIHZpc2liaWxpdHkiKQorREVGVFJFRVNUUlVDVChUU19GSUVMRF9ERUNMLCAiZmllbGQgZGVjbCIpCitERUZUUkVFU1RSVUNUKFRTX1ZBUl9ERUNMLCAidmFyIGRlY2wiKQorREVGVFJFRVNUUlVDVChUU19QQVJNX0RFQ0wsICJwYXJtIGRlY2wiKQorREVGVFJFRVNUUlVDVChUU19MQUJFTF9ERUNMLCAibGFiZWwgZGVjbCIpCitERUZUUkVFU1RSVUNUKFRTX1JFU1VMVF9ERUNMLCAicmVzdWx0IGRlY2wiKQorREVGVFJFRVNUUlVDVChUU19DT05TVF9ERUNMLCAiY29uc3QgZGVjbCIpCitERUZUUkVFU1RSVUNUKFRTX1RZUEVfREVDTCwgInR5cGUgZGVjbCIpCitERUZUUkVFU1RSVUNUKFRTX0ZVTkNUSU9OX0RFQ0wsICJmdW5jdGlvbiBkZWNsIikKK0RFRlRSRUVTVFJVQ1QoVFNfVFJBTlNMQVRJT05fVU5JVF9ERUNMLCAidHJhbnNsYXRpb24tdW5pdCBkZWNsIikKK0RFRlRSRUVTVFJVQ1QoVFNfVFlQRV9DT01NT04sICJ0eXBlIGNvbW1vbiIpCitERUZUUkVFU1RSVUNUKFRTX1RZUEVfV0lUSF9MQU5HX1NQRUNJRklDLCAidHlwZSB3aXRoIGxhbmctc3BlY2lmaWMiKQorREVGVFJFRVNUUlVDVChUU19UWVBFX05PTl9DT01NT04sICJ0eXBlIG5vbi1jb21tb24iKQorREVGVFJFRVNUUlVDVChUU19MSVNULCAibGlzdCIpCitERUZUUkVFU1RSVUNUKFRTX1ZFQywgInZlYyIpCitERUZUUkVFU1RSVUNUKFRTX0VYUCwgImV4cCIpCitERUZUUkVFU1RSVUNUKFRTX1NTQV9OQU1FLCAic3NhIG5hbWUiKQorREVGVFJFRVNUUlVDVChUU19CTE9DSywgImJsb2NrIikKK0RFRlRSRUVTVFJVQ1QoVFNfQklORk8sICJiaW5mbyIpCitERUZUUkVFU1RSVUNUKFRTX1NUQVRFTUVOVF9MSVNULCAic3RhdGVtZW50IGxpc3QiKQorREVGVFJFRVNUUlVDVChUU19DT05TVFJVQ1RPUiwgImNvbnN0cnVjdG9yIikKK0RFRlRSRUVTVFJVQ1QoVFNfT01QX0NMQVVTRSwgIm9tcCBjbGF1c2UiKQorREVGVFJFRVNUUlVDVChUU19PUFRJTUlaQVRJT04sICJvcHRpbWl6YXRpb24gb3B0aW9ucyIpCitERUZUUkVFU1RSVUNUKFRTX1RBUkdFVF9PUFRJT04sICJ0YXJnZXQgb3B0aW9ucyIpCmRpZmYgLS1naXQgYS9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdmVjLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxYmI5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS92ZWMuaApAQCAtMCwwICsxLDE3MzIgQEAKKy8qIFZlY3RvciBBUEkgZm9yIEdOVSBjb21waWxlci4KKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgTmF0aGFuIFNpZHdlbGwgPG5hdGhhbkBjb2Rlc291cmNlcnkuY29tPgorICAgUmUtaW1wbGVtZW50ZWQgaW4gQysrIGJ5IERpZWdvIE5vdmlsbG8gPGRub3ZpbGxvQGdvb2dsZS5jb20+CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaWZuZGVmIEdDQ19WRUNfSAorI2RlZmluZSBHQ0NfVkVDX0gKKworLyogRklYTUUgLSBXaGVuIGNvbXBpbGluZyBzb21lIG9mIHRoZSBnZW4qIGJpbmFyaWVzLCB3ZSBjYW5ub3QgZW5hYmxlIEdDCisgICBzdXBwb3J0IGJlY2F1c2UgdGhlIGhlYWRlcnMgZ2VuZXJhdGVkIGJ5IGdlbmd0eXBlIGFyZSBzdGlsbCBub3QKKyAgIHByZXNlbnQuICBJbiBwYXJ0aWN1bGFyLCB0aGUgaGVhZGVyIGZpbGUgZ3R5cGUtZGVzYy5oIGlzIG1pc3NpbmcsCisgICBzbyBjb21waWxhdGlvbiBtYXkgZmFpbCBpZiB3ZSB0cnkgdG8gaW5jbHVkZSBnZ2MuaC4KKworICAgU2luY2Ugd2UgdXNlIHNvbWUgb2YgdGhvc2UgZGVjbGFyYXRpb25zLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlbQorICAgKGV2ZW4gaWYgdGhlIEdDLWJhc2VkIHRlbXBsYXRlcyBhcmUgbm90IHVzZWQpLiAgVGhpcyBpcyBub3QgYQorICAgcHJvYmxlbSBiZWNhdXNlIHRoZSBjb2RlIHRoYXQgcnVucyBiZWZvcmUgZ2VuZ3R5cGUgaXMgYnVpbHQgd2lsbAorICAgbmV2ZXIgbmVlZCB0byB1c2UgR0MgdmVjdG9ycy4gIEJ1dCBpdCBkb2VzIGZvcmNlIHVzIHRvIGRlY2xhcmUKKyAgIHRoZXNlIGZ1bmN0aW9ucyBtb3JlIHRoYW4gb25jZS4gICovCisjaWZkZWYgR0VORVJBVE9SX0ZJTEUKKyNkZWZpbmUgVkVDX0dDX0VOQUJMRUQJMAorI2Vsc2UKKyNkZWZpbmUgVkVDX0dDX0VOQUJMRUQJMQorI2VuZGlmCS8vIEdFTkVSQVRPUl9GSUxFCisKKyNpbmNsdWRlICJzdGF0aXN0aWNzLmgiCQkvLyBGb3IgQ1hYX01FTV9TVEFUX0lORk8uCisKKyNpZiBWRUNfR0NfRU5BQkxFRAorI2luY2x1ZGUgImdnYy5oIgorI2Vsc2UKKyMgaWZuZGVmIEdDQ19HR0NfSAorICAvKiBFdmVuIGlmIHdlIHRoaW5rIHRoYXQgR0MgaXMgbm90IGVuYWJsZWQsIHRoZSB0ZXN0IHRoYXQgc2V0cyBpdCBpcworICAgICB3ZWFrLiAgVGhlcmUgYXJlIGZpbGVzIGNvbXBpbGVkIHdpdGggLURHRU5FUkFUT1JfRklMRSB0aGF0IGFscmVhZHkKKyAgICAgaW5jbHVkZSBnZ2MuaC4gIFdlIG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZXNlIGRlZmluaXRpb25zIGlmIGdnYy5oCisgICAgIGhhcyBub3QgYmVlbiBpbmNsdWRlZC4gIFNpZ2guICAqLworICBleHRlcm4gdm9pZCBnZ2NfZnJlZSAodm9pZCAqKTsKKyAgZXh0ZXJuIHNpemVfdCBnZ2Nfcm91bmRfYWxsb2Nfc2l6ZSAoc2l6ZV90IHJlcXVlc3RlZF9zaXplKTsKKyAgZXh0ZXJuIHZvaWQgKmdnY19yZWFsbG9jX3N0YXQgKHZvaWQgKiwgc2l6ZV90IE1FTV9TVEFUX0RFQ0wpOworIyAgZW5kaWYgIC8vIEdDQ19HR0NfSAorI2VuZGlmCS8vIFZFQ19HQ19FTkFCTEVECisKKy8qIFRlbXBsYXRlZCB2ZWN0b3IgdHlwZSBhbmQgYXNzb2NpYXRlZCBpbnRlcmZhY2VzLgorCisgICBUaGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgdHlwZXNhZmUgYW5kIHVzZSBpbmxpbmUgZnVuY3Rpb25zLAorICAgc29tZXRpbWVzIGJhY2tlZCBieSBvdXQtb2YtbGluZSBnZW5lcmljIGZ1bmN0aW9ucy4gIFRoZSB2ZWN0b3JzIGFyZQorICAgZGVzaWduZWQgdG8gaW50ZXJvcGVyYXRlIHdpdGggdGhlIEdUWSBtYWNoaW5lcnkuCisKKyAgIFRoZXJlIGFyZSBib3RoICdpbmRleCcgYW5kICdpdGVyYXRlJyBhY2Nlc3NvcnMuICBUaGUgaW5kZXggYWNjZXNzb3IKKyAgIGlzIGltcGxlbWVudGVkIGJ5IG9wZXJhdG9yW10uICBUaGUgaXRlcmF0b3IgcmV0dXJucyBhIGJvb2xlYW4KKyAgIGl0ZXJhdGlvbiBjb25kaXRpb24gYW5kIHVwZGF0ZXMgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZSBwYXNzZWQgYnkKKyAgIHJlZmVyZW5jZS4gIEJlY2F1c2UgdGhlIGl0ZXJhdG9yIHdpbGwgYmUgaW5saW5lZCwgdGhlIGFkZHJlc3Mtb2YKKyAgIGNhbiBiZSBvcHRpbWl6ZWQgYXdheS4KKworICAgRWFjaCBvcGVyYXRpb24gdGhhdCBpbmNyZWFzZXMgdGhlIG51bWJlciBvZiBhY3RpdmUgZWxlbWVudHMgaXMKKyAgIGF2YWlsYWJsZSBpbiAncXVpY2snIGFuZCAnc2FmZScgdmFyaWFudHMuICBUaGUgZm9ybWVyIHByZXN1bWVzIHRoYXQKKyAgIHRoZXJlIGlzIHN1ZmZpY2llbnQgYWxsb2NhdGVkIHNwYWNlIGZvciB0aGUgb3BlcmF0aW9uIHRvIHN1Y2NlZWQKKyAgIChpdCBkaWVzIGlmIHRoZXJlIGlzIG5vdCkuICBUaGUgbGF0dGVyIHdpbGwgcmVhbGxvY2F0ZSB0aGUKKyAgIHZlY3RvciwgaWYgbmVlZGVkLiAgUmVhbGxvY2F0aW9uIGNhdXNlcyBhbiBleHBvbmVudGlhbCBpbmNyZWFzZSBpbgorICAgdmVjdG9yIHNpemUuICBJZiB5b3Uga25vdyB5b3Ugd2lsbCBiZSBhZGRpbmcgTiBlbGVtZW50cywgaXQgd291bGQKKyAgIGJlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgcmVzZXJ2ZSBvcGVyYXRpb24gYmVmb3JlIGFkZGluZyB0aGUKKyAgIGVsZW1lbnRzIHdpdGggdGhlICdxdWljaycgb3BlcmF0aW9uLiAgVGhpcyB3aWxsIGVuc3VyZSB0aGVyZSBhcmUgYXQKKyAgIGxlYXN0IGFzIG1hbnkgZWxlbWVudHMgYXMgeW91IGFzayBmb3IsIGl0IHdpbGwgZXhwb25lbnRpYWxseQorICAgaW5jcmVhc2UgaWYgdGhlcmUgYXJlIHRvbyBmZXcgc3BhcmUgc2xvdHMuICBJZiB5b3Ugd2FudCByZXNlcnZlIGEKKyAgIHNwZWNpZmljIG51bWJlciBvZiBzbG90cywgYnV0IGRvIG5vdCB3YW50IHRoZSBleHBvbmVudGlhbCBpbmNyZWFzZQorICAgKGZvciBpbnN0YW5jZSwgeW91IGtub3cgdGhpcyBpcyB0aGUgbGFzdCBhbGxvY2F0aW9uKSwgdXNlIHRoZQorICAgcmVzZXJ2ZV9leGFjdCBvcGVyYXRpb24uICBZb3UgY2FuIGFsc28gY3JlYXRlIGEgdmVjdG9yIG9mIGEKKyAgIHNwZWNpZmljIHNpemUgZnJvbSB0aGUgZ2V0IGdvLgorCisgICBZb3Ugc2hvdWxkIHByZWZlciB0aGUgcHVzaCBhbmQgcG9wIG9wZXJhdGlvbnMsIGFzIHRoZXkgYXBwZW5kIGFuZAorICAgcmVtb3ZlIGZyb20gdGhlIGVuZCBvZiB0aGUgdmVjdG9yLiBJZiB5b3UgbmVlZCB0byByZW1vdmUgc2V2ZXJhbAorICAgaXRlbXMgaW4gb25lIGdvLCB1c2UgdGhlIHRydW5jYXRlIG9wZXJhdGlvbi4gIFRoZSBpbnNlcnQgYW5kIHJlbW92ZQorICAgb3BlcmF0aW9ucyBhbGxvdyB5b3UgdG8gY2hhbmdlIGVsZW1lbnRzIGluIHRoZSBtaWRkbGUgb2YgdGhlCisgICB2ZWN0b3IuICBUaGVyZSBhcmUgdHdvIHJlbW92ZSBvcGVyYXRpb25zLCBvbmUgd2hpY2ggcHJlc2VydmVzIHRoZQorICAgZWxlbWVudCBvcmRlcmluZyAnb3JkZXJlZF9yZW1vdmUnLCBhbmQgb25lIHdoaWNoIGRvZXMgbm90CisgICAndW5vcmRlcmVkX3JlbW92ZScuICBUaGUgbGF0dGVyIGZ1bmN0aW9uIGNvcGllcyB0aGUgZW5kIGVsZW1lbnQKKyAgIGludG8gdGhlIHJlbW92ZWQgc2xvdCwgcmF0aGVyIHRoYW4gaW52b2tlIGEgbWVtbW92ZSBvcGVyYXRpb24uICBUaGUKKyAgICdsb3dlcl9ib3VuZCcgZnVuY3Rpb24gd2lsbCBkZXRlcm1pbmUgd2hlcmUgdG8gcGxhY2UgYW4gaXRlbSBpbiB0aGUKKyAgIGFycmF5IHVzaW5nIGluc2VydCB0aGF0IHdpbGwgbWFpbnRhaW4gc29ydGVkIG9yZGVyLgorCisgICBWZWN0b3JzIGFyZSB0ZW1wbGF0ZSB0eXBlcyB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHR5cGUgb2YgdGhlCisgICBlbGVtZW50cyBpbiB0aGUgdmVjdG9yLCB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSwgYW5kIHRoZSBwaHlzaWNhbAorICAgbGF5b3V0IHRvIHVzZQorCisgICBGb3VyIGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhcmUgc3VwcG9ydGVkOgorCisJLSBIZWFwOiBhbGxvY2F0aW9uIGlzIGRvbmUgdXNpbmcgbWFsbG9jL2ZyZWUuICBUaGlzIGlzIHRoZQorCSAgZGVmYXVsdCBhbGxvY2F0aW9uIHN0cmF0ZWd5LgorCisgIAktIFN0YWNrOiBhbGxvY2F0aW9uIGlzIGRvbmUgdXNpbmcgYWxsb2NhLgorCisgIAktIEdDOiBhbGxvY2F0aW9uIGlzIGRvbmUgdXNpbmcgZ2djX2FsbG9jL2dnY19mcmVlLgorCisgIAktIEdDIGF0b21pYzogc2FtZSBhcyBHQyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgZWxlbWVudHMKKwkgIHRoZW1zZWx2ZXMgYXJlIGFzc3VtZWQgdG8gYmUgb2YgYW4gYXRvbWljIHR5cGUgdGhhdCBkb2VzCisJICBub3QgbmVlZCB0byBiZSBnYXJiYWdlIGNvbGxlY3RlZC4gIFRoaXMgbWVhbnMgdGhhdCBtYXJraW5nCisJICByb3V0aW5lcyBkbyBub3QgbmVlZCB0byB0cmF2ZXJzZSB0aGUgYXJyYXkgbWFya2luZyB0aGUKKwkgIGluZGl2aWR1YWwgZWxlbWVudHMuICBUaGlzIGluY3JlYXNlcyB0aGUgcGVyZm9ybWFuY2Ugb2YKKwkgIEdDIGFjdGl2aXRpZXMuCisKKyAgIFR3byBwaHlzaWNhbCBsYXlvdXRzIGFyZSBzdXBwb3J0ZWQ6CisKKwktIEVtYmVkZGVkOiBUaGUgdmVjdG9yIGlzIHN0cnVjdHVyZWQgdXNpbmcgdGhlIHRyYWlsaW5nIGFycmF5CisJICBpZGlvbS4gIFRoZSBsYXN0IG1lbWJlciBvZiB0aGUgc3RydWN0dXJlIGlzIGFuIGFycmF5IG9mIHNpemUKKwkgIDEuICBXaGVuIHRoZSB2ZWN0b3IgaXMgaW5pdGlhbGx5IGFsbG9jYXRlZCwgYSBzaW5nbGUgbWVtb3J5CisJICBibG9jayBpcyBjcmVhdGVkIHRvIGhvbGQgdGhlIHZlY3RvcidzIGNvbnRyb2wgZGF0YSBhbmQgdGhlCisJICBhcnJheSBvZiBlbGVtZW50cy4gIFRoZXNlIHZlY3RvcnMgY2Fubm90IGdyb3cgd2l0aG91dAorCSAgcmVhbGxvY2F0aW9uIChzZWUgZGlzY3Vzc2lvbiBvbiBlbWJlZGRhYmxlIHZlY3RvcnMgYmVsb3cpLgorCisJLSBTcGFjZSBlZmZpY2llbnQ6IFRoZSB2ZWN0b3IgaXMgc3RydWN0dXJlZCBhcyBhIHBvaW50ZXIgdG8gYW4KKwkgIGVtYmVkZGVkIHZlY3Rvci4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgbGF5b3V0LiAgSXQgbWVhbnMgdGhhdAorCSAgdmVjdG9ycyBvY2N1cHkgYSBzaW5nbGUgd29yZCBvZiBzdG9yYWdlIGJlZm9yZSBpbml0aWFsCisJICBhbGxvY2F0aW9uLiAgVmVjdG9ycyBhcmUgYWxsb3dlZCB0byBncm93ICh0aGUgaW50ZXJuYWwKKwkgIHBvaW50ZXIgaXMgcmVhbGxvY2F0ZWQgYnV0IHRoZSBtYWluIHZlY3RvciBpbnN0YW5jZSBkb2VzIG5vdAorCSAgbmVlZCB0byByZWxvY2F0ZSkuCisKKyAgIFRoZSB0eXBlLCBhbGxvY2F0aW9uIGFuZCBsYXlvdXQgYXJlIHNwZWNpZmllZCB3aGVuIHRoZSB2ZWN0b3IgaXMKKyAgIGRlY2xhcmVkLgorCisgICBJZiB5b3UgbmVlZCB0byBkaXJlY3RseSBtYW5pcHVsYXRlIGEgdmVjdG9yLCB0aGVuIHRoZSAnYWRkcmVzcycKKyAgIGFjY2Vzc29yIHdpbGwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiB0aGUgdmVjdG9yLiAgQWxzbworICAgdGhlICdzcGFjZScgcHJlZGljYXRlIHdpbGwgdGVsbCB5b3Ugd2hldGhlciB0aGVyZSBpcyBzcGFyZSBjYXBhY2l0eQorICAgaW4gdGhlIHZlY3Rvci4gIFlvdSB3aWxsIG5vdCBub3JtYWxseSBuZWVkIHRvIHVzZSB0aGVzZSB0d28gZnVuY3Rpb25zLgorCisgICBOb3RlcyBvbiB0aGUgZGlmZmVyZW50IGxheW91dCBzdHJhdGVnaWVzCisKKyAgICogRW1iZWRkYWJsZSB2ZWN0b3JzICh2ZWM8VCwgQSwgdmxfZW1iZWQ+KQorICAgCisgICAgIFRoZXNlIHZlY3RvcnMgYXJlIHN1aXRhYmxlIHRvIGJlIGVtYmVkZGVkIGluIG90aGVyIGRhdGEKKyAgICAgc3RydWN0dXJlcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHByZS1hbGxvY2F0ZWQgaW4gYSBjb250aWd1b3VzCisgICAgIG1lbW9yeSBibG9jay4KKworICAgICBFbWJlZGRhYmxlIHZlY3RvcnMgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSB0cmFpbGluZyBhcnJheQorICAgICBpZGlvbSwgdGh1cyB0aGV5IGFyZSBub3QgcmVzaXplYWJsZSB3aXRob3V0IGNoYW5naW5nIHRoZSBhZGRyZXNzCisgICAgIG9mIHRoZSB2ZWN0b3Igb2JqZWN0IGl0c2VsZi4gIFRoaXMgbWVhbnMgeW91IGNhbm5vdCBoYXZlCisgICAgIHZhcmlhYmxlcyBvciBmaWVsZHMgb2YgZW1iZWRkYWJsZSB2ZWN0b3IgdHlwZSAtLSBhbHdheXMgdXNlIGEKKyAgICAgcG9pbnRlciB0byBhIHZlY3Rvci4gIFRoZSBvbmUgZXhjZXB0aW9uIGlzIHRoZSBmaW5hbCBmaWVsZCBvZiBhCisgICAgIHN0cnVjdHVyZSwgd2hpY2ggY291bGQgYmUgYSB2ZWN0b3IgdHlwZS4KKworICAgICBZb3Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgZW1iZWRkZWRfc2l6ZSAmIGVtYmVkZGVkX2luaXQgY2FsbHMgdG8KKyAgICAgY3JlYXRlIHN1Y2ggb2JqZWN0cywgYW5kIHRoZXkgd2lsbCBub3QgYmUgcmVzaXplYWJsZSAoc28gdGhlCisgICAgICdzYWZlJyBhbGxvY2F0aW9uIHZhcmlhbnRzIGFyZSBub3QgYXZhaWxhYmxlKS4KKworICAgICBQcm9wZXJ0aWVzIG9mIGVtYmVkZGFibGUgdmVjdG9yczoKKworCSAgLSBUaGUgd2hvbGUgdmVjdG9yIGFuZCBjb250cm9sIGRhdGEgYXJlIGFsbG9jYXRlZCBpbiBhIHNpbmdsZQorCSAgICBjb250aWd1b3VzIGJsb2NrLiAgSXQgdXNlcyB0aGUgdHJhaWxpbmctdmVjdG9yIGlkaW9tLCBzbworCSAgICBhbGxvY2F0aW9uIG11c3QgcmVzZXJ2ZSBlbm91Z2ggc3BhY2UgZm9yIGFsbCB0aGUgZWxlbWVudHMKKwkgICAgaW4gdGhlIHZlY3RvciBwbHVzIGl0cyBjb250cm9sIGRhdGEuCisJICAtIFRoZSB2ZWN0b3IgY2Fubm90IGJlIHJlLWFsbG9jYXRlZC4KKwkgIC0gVGhlIHZlY3RvciBjYW5ub3QgZ3JvdyBub3Igc2hyaW5rLgorCSAgLSBObyBpbmRpcmVjdGlvbnMgbmVlZGVkIGZvciBhY2Nlc3MvbWFuaXB1bGF0aW9uLgorCSAgLSBJdCByZXF1aXJlcyAyIHdvcmRzIG9mIHN0b3JhZ2UgKHByaW9yIHRvIHZlY3RvciBhbGxvY2F0aW9uKS4KKworCisgICAqIFNwYWNlIGVmZmljaWVudCB2ZWN0b3IgKHZlYzxULCBBLCB2bF9wdHI+KQorCisgICAgIFRoZXNlIHZlY3RvcnMgY2FuIGdyb3cgZHluYW1pY2FsbHkgYW5kIGFyZSBhbGxvY2F0ZWQgdG9nZXRoZXIKKyAgICAgd2l0aCB0aGVpciBjb250cm9sIGRhdGEuICBUaGV5IGFyZSBzdWl0ZWQgdG8gYmUgaW5jbHVkZWQgaW4gZGF0YQorICAgICBzdHJ1Y3R1cmVzLiAgUHJpb3IgdG8gaW5pdGlhbCBhbGxvY2F0aW9uLCB0aGV5IG9ubHkgdGFrZSBhIHNpbmdsZQorICAgICB3b3JkIG9mIHN0b3JhZ2UuCisKKyAgICAgVGhlc2UgdmVjdG9ycyBhcmUgaW1wbGVtZW50ZWQgYXMgYSBwb2ludGVyIHRvIGVtYmVkZGFibGUgdmVjdG9ycy4KKyAgICAgVGhlIHNlbWFudGljcyBhbGxvdyBmb3IgdGhpcyBwb2ludGVyIHRvIGJlIE5VTEwgdG8gcmVwcmVzZW50CisgICAgIGVtcHR5IHZlY3RvcnMuICBUaGlzIHdheSwgZW1wdHkgdmVjdG9ycyBvY2N1cHkgbWluaW1hbCBzcGFjZSBpbgorICAgICB0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlbS4KKworICAgICBQcm9wZXJ0aWVzOgorCisJLSBUaGUgd2hvbGUgdmVjdG9yIGFuZCBjb250cm9sIGRhdGEgYXJlIGFsbG9jYXRlZCBpbiBhIHNpbmdsZQorCSAgY29udGlndW91cyBibG9jay4KKyAgCS0gVGhlIHdob2xlIHZlY3RvciBtYXkgYmUgcmUtYWxsb2NhdGVkLgorICAJLSBWZWN0b3IgZGF0YSBtYXkgZ3JvdyBhbmQgc2hyaW5rLgorICAJLSBBY2Nlc3MgYW5kIG1hbmlwdWxhdGlvbiByZXF1aXJlcyBhIHBvaW50ZXIgdGVzdCBhbmQKKwkgIGluZGlyZWN0aW9uLgorICAJLSBJdCByZXF1aXJlcyAxIHdvcmQgb2Ygc3RvcmFnZSAocHJpb3IgdG8gdmVjdG9yIGFsbG9jYXRpb24pLgorCisgICBBbiBleGFtcGxlIG9mIHRoZWlyIHVzZSB3b3VsZCBiZSwKKworICAgc3RydWN0IG15X3N0cnVjdCB7CisgICAgIC8vIEEgc3BhY2UtZWZmaWNpZW50IHZlY3RvciBvZiB0cmVlIHBvaW50ZXJzIGluIEdDIG1lbW9yeS4KKyAgICAgdmVjPHRyZWUsIHZhX2djLCB2bF9wdHI+IHY7CisgICB9OworCisgICBzdHJ1Y3QgbXlfc3RydWN0ICpzOworCisgICBpZiAocy0+di5sZW5ndGggKCkpIHsgd2UgaGF2ZSBzb21lIGNvbnRlbnRzIH0KKyAgIHMtPnYuc2FmZV9wdXNoIChkZWNsKTsgLy8gYXBwZW5kIHNvbWUgZGVjbCBvbnRvIHRoZSBlbmQKKyAgIGZvciAoaXggPSAwOyBzLT52Lml0ZXJhdGUgKGl4LCAmZWx0KTsgaXgrKykKKyAgICAgeyBkbyBzb21ldGhpbmcgd2l0aCBlbHQgfQorKi8KKworLyogU3VwcG9ydCBmdW5jdGlvbiBmb3Igc3RhdGlzdGljcy4gICovCitleHRlcm4gdm9pZCBkdW1wX3ZlY19sb2Nfc3RhdGlzdGljcyAodm9pZCk7CisKKworLyogQ29udHJvbCBkYXRhIGZvciB2ZWN0b3JzLiAgVGhpcyBjb250YWlucyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZAorICAgYW5kIHVzZWQgc2xvdHMgaW5zaWRlIGEgdmVjdG9yLiAgKi8KKworc3RydWN0IHZlY19wcmVmaXgKK3sKKyAgLyogRklYTUUgLSBUaGVzZSBmaWVsZHMgc2hvdWxkIGJlIHByaXZhdGUsIGJ1dCB3ZSBuZWVkIHRvIGNhdGVyIHRvCisJICAgICBjb21waWxlcnMgdGhhdCBoYXZlIHN0cmljdGVyIG5vdGlvbnMgb2YgUE9EbmVzcyBmb3IgdHlwZXMuICAqLworCisgIC8qIE1lbW9yeSBhbGxvY2F0aW9uIHN1cHBvcnQgcm91dGluZXMgaW4gdmVjLmMuICAqLworICB2b2lkIHJlZ2lzdGVyX292ZXJoZWFkIChzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopOworICB2b2lkIHJlbGVhc2Vfb3ZlcmhlYWQgKHZvaWQpOworICBzdGF0aWMgdW5zaWduZWQgY2FsY3VsYXRlX2FsbG9jYXRpb24gKHZlY19wcmVmaXggKiwgdW5zaWduZWQsIGJvb2wpOworCisgIC8qIE5vdGUgdGhhdCB2ZWNfcHJlZml4IHNob3VsZCBiZSBhIGJhc2UgY2xhc3MgZm9yIHZlYywgYnV0IHdlIHVzZQorICAgICBvZmZzZXRvZigpIG9uIHZlY3RvciBmaWVsZHMgb2YgdHJlZSBzdHJ1Y3R1cmVzIChlLmcuLAorICAgICB0cmVlX2JpbmZvOjpiYXNlX2JpbmZvcyksIGFuZCBvZmZzZXRvZiBvbmx5IHN1cHBvcnRzIGJhc2UgdHlwZXMuCisKKyAgICAgVG8gY29tcGVuc2F0ZSwgd2UgbWFrZSB2ZWNfcHJlZml4IGEgZmllbGQgaW5zaWRlIHZlYyBhbmQgbWFrZQorICAgICB2ZWMgYSBmcmllbmQgY2xhc3Mgb2YgdmVjX3ByZWZpeCBzbyBpdCBjYW4gYWNjZXNzIGl0cyBmaWVsZHMuICAqLworICB0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gZnJpZW5kIHN0cnVjdCB2ZWM7CisKKyAgLyogVGhlIGFsbG9jYXRvciB0eXBlcyBhbHNvIG5lZWQgYWNjZXNzIHRvIG91ciBpbnRlcm5hbHMuICAqLworICBmcmllbmQgc3RydWN0IHZhX2djOworICBmcmllbmQgc3RydWN0IHZhX2djX2F0b21pYzsKKyAgZnJpZW5kIHN0cnVjdCB2YV9oZWFwOworICBmcmllbmQgc3RydWN0IHZhX3N0YWNrOworCisgIHVuc2lnbmVkIGFsbG9jXzsKKyAgdW5zaWduZWQgbnVtXzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IHN0cnVjdCB2ZWM7CisKKy8qIFZhbGlkIHZlY3RvciBsYXlvdXRzCisKKyAgIHZsX2VtYmVkCS0gRW1iZWRkYWJsZSB2ZWN0b3IgdGhhdCB1c2VzIHRoZSB0cmFpbGluZyBhcnJheSBpZGlvbS4KKyAgIHZsX3B0cgktIFNwYWNlIGVmZmljaWVudCB2ZWN0b3IgdGhhdCB1c2VzIGEgcG9pbnRlciB0byBhbgorCQkgIGVtYmVkZGFibGUgdmVjdG9yLiAgKi8KK3N0cnVjdCB2bF9lbWJlZCB7IH07CitzdHJ1Y3QgdmxfcHRyIHsgfTsKKworCisvKiBUeXBlcyBvZiBzdXBwb3J0ZWQgYWxsb2NhdGlvbnMKKworICAgdmFfaGVhcAktIEFsbG9jYXRpb24gdXNlcyBtYWxsb2MvZnJlZS4KKyAgIHZhX2djCS0gQWxsb2NhdGlvbiB1c2VzIGdnY19hbGxvYy4KKyAgIHZhX2djX2F0b21pYwktIFNhbWUgYXMgR0MsIGJ1dCBpbmRpdmlkdWFsIGVsZW1lbnRzIG9mIHRoZSBhcnJheQorCQkgIGRvIG5vdCBuZWVkIHRvIGJlIG1hcmtlZCBkdXJpbmcgY29sbGVjdGlvbi4KKyAgIHZhX3N0YWNrCS0gQWxsb2NhdGlvbiB1c2VzIGFsbG9jYS4gICovCisKKy8qIEFsbG9jYXRvciB0eXBlIGZvciBoZWFwIHZlY3RvcnMuICAqLworc3RydWN0IHZhX2hlYXAKK3sKKyAgLyogSGVhcCB2ZWN0b3JzIGFyZSBmcmVxdWVudGx5IHJlZ3VsYXIgaW5zdGFuY2VzLCBzbyB1c2UgdGhlIHZsX3B0cgorICAgICBsYXlvdXQgZm9yIHRoZW0uICAqLworICB0eXBlZGVmIHZsX3B0ciBkZWZhdWx0X2xheW91dDsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICBzdGF0aWMgdm9pZCByZXNlcnZlICh2ZWM8VCwgdmFfaGVhcCwgdmxfZW1iZWQ+IComLCB1bnNpZ25lZCwgYm9vbAorCQkgICAgICAgQ1hYX01FTV9TVEFUX0lORk8pOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKHZlYzxULCB2YV9oZWFwLCB2bF9lbWJlZD4gKiYpOworfTsKKworCisvKiBBbGxvY2F0b3IgZm9yIGhlYXAgbWVtb3J5LiAgRW5zdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCBSRVNFUlZFIGZyZWUKKyAgIHNsb3RzIGluIFYuICBJZiBFWEFDVCBpcyB0cnVlLCBncm93IGV4YWN0bHksIGVsc2UgZ3JvdworICAgZXhwb25lbnRpYWxseS4gIEFzIGEgc3BlY2lhbCBjYXNlLCBpZiB0aGUgdmVjdG9yIGhhZCBub3QgYmVlbgorICAgYWxsb2NhdGVkIGFuZCBhbmQgUkVTRVJWRSBpcyAwLCBubyB2ZWN0b3Igd2lsbCBiZSBjcmVhdGVkLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkCit2YV9oZWFwOjpyZXNlcnZlICh2ZWM8VCwgdmFfaGVhcCwgdmxfZW1iZWQ+IComdiwgdW5zaWduZWQgcmVzZXJ2ZSwgYm9vbCBleGFjdAorCQkgIE1FTV9TVEFUX0RFQ0wpCit7CisgIHVuc2lnbmVkIGFsbG9jCisgICAgPSB2ZWNfcHJlZml4OjpjYWxjdWxhdGVfYWxsb2NhdGlvbiAodiA/ICZ2LT52ZWNwZnhfIDogMCwgcmVzZXJ2ZSwgZXhhY3QpOworICBpZiAoIWFsbG9jKQorICAgIHsKKyAgICAgIHJlbGVhc2UgKHYpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MgJiYgdikKKyAgICB2LT52ZWNwZnhfLnJlbGVhc2Vfb3ZlcmhlYWQgKCk7CisKKyAgc2l6ZV90IHNpemUgPSB2ZWM8VCwgdmFfaGVhcCwgdmxfZW1iZWQ+OjplbWJlZGRlZF9zaXplIChhbGxvYyk7CisgIHVuc2lnbmVkIG5lbGVtID0gdiA/IHYtPmxlbmd0aCAoKSA6IDA7CisgIHYgPSBzdGF0aWNfY2FzdCA8dmVjPFQsIHZhX2hlYXAsIHZsX2VtYmVkPiAqPiAoeHJlYWxsb2MgKHYsIHNpemUpKTsKKyAgdi0+ZW1iZWRkZWRfaW5pdCAoYWxsb2MsIG5lbGVtKTsKKworICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCisgICAgdi0+dmVjcGZ4Xy5yZWdpc3Rlcl9vdmVyaGVhZCAoc2l6ZSBGSU5BTF9QQVNTX01FTV9TVEFUKTsKK30KKworCisvKiBGcmVlIHRoZSBoZWFwIHNwYWNlIGFsbG9jYXRlZCBmb3IgdmVjdG9yIFYuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZAordmFfaGVhcDo6cmVsZWFzZSAodmVjPFQsIHZhX2hlYXAsIHZsX2VtYmVkPiAqJnYpCit7CisgIGlmICh2ID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIGlmIChHQVRIRVJfU1RBVElTVElDUykKKyAgICB2LT52ZWNwZnhfLnJlbGVhc2Vfb3ZlcmhlYWQgKCk7CisgIDo6ZnJlZSAodik7CisgIHYgPSBOVUxMOworfQorCisKKy8qIEFsbG9jYXRvciB0eXBlIGZvciBHQyB2ZWN0b3JzLiAgTm90aWNlIHRoYXQgd2UgbmVlZCB0aGUgc3RydWN0dXJlCisgICBkZWNsYXJhdGlvbiBldmVuIGlmIEdDIGlzIG5vdCBlbmFibGVkLiAgKi8KKworc3RydWN0IHZhX2djCit7CisgIC8qIFVzZSB2bF9lbWJlZCBhcyB0aGUgZGVmYXVsdCBsYXlvdXQgZm9yIEdDIHZlY3RvcnMuICBEdWUgdG8gR1RZCisgICAgIGxpbWl0YXRpb25zLCBHQyB2ZWN0b3JzIG11c3QgYWx3YXlzIGJlIHBvaW50ZXJzLCBzbyBpdCBpcyBtb3JlCisgICAgIGVmZmljaWVudCB0byB1c2UgYSBwb2ludGVyIHRvIHRoZSB2bF9lbWJlZCBsYXlvdXQsIHJhdGhlciB0aGFuCisgICAgIHVzaW5nIGEgcG9pbnRlciB0byBhIHBvaW50ZXIgYXMgd291bGQgYmUgdGhlIGNhc2Ugd2l0aCB2bF9wdHIuICAqLworICB0eXBlZGVmIHZsX2VtYmVkIGRlZmF1bHRfbGF5b3V0OworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CisgIHN0YXRpYyB2b2lkIHJlc2VydmUgKHZlYzxULCBBLCB2bF9lbWJlZD4gKiYsIHVuc2lnbmVkLCBib29sCisJCSAgICAgICBDWFhfTUVNX1NUQVRfSU5GTyk7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KKyAgc3RhdGljIHZvaWQgcmVsZWFzZSAodmVjPFQsIEEsIHZsX2VtYmVkPiAqJnYpIHsgdiA9IE5VTEw7IH0KK307CisKKworLyogQWxsb2NhdG9yIGZvciBHQyBtZW1vcnkuICBFbnN1cmUgdGhlcmUgYXJlIGF0IGxlYXN0IFJFU0VSVkUgZnJlZQorICAgc2xvdHMgaW4gVi4gIElmIEVYQUNUIGlzIHRydWUsIGdyb3cgZXhhY3RseSwgZWxzZSBncm93CisgICBleHBvbmVudGlhbGx5LiAgQXMgYSBzcGVjaWFsIGNhc2UsIGlmIHRoZSB2ZWN0b3IgaGFkIG5vdCBiZWVuCisgICBhbGxvY2F0ZWQgYW5kIGFuZCBSRVNFUlZFIGlzIDAsIG5vIHZlY3RvciB3aWxsIGJlIGNyZWF0ZWQuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgordm9pZAordmFfZ2M6OnJlc2VydmUgKHZlYzxULCBBLCB2bF9lbWJlZD4gKiZ2LCB1bnNpZ25lZCByZXNlcnZlLCBib29sIGV4YWN0CisJCU1FTV9TVEFUX0RFQ0wpCit7CisgIHVuc2lnbmVkIGFsbG9jCisgICAgPSB2ZWNfcHJlZml4OjpjYWxjdWxhdGVfYWxsb2NhdGlvbiAodiA/ICZ2LT52ZWNwZnhfIDogMCwgcmVzZXJ2ZSwgZXhhY3QpOworICBpZiAoIWFsbG9jKQorICAgIHsKKyAgICAgIDo6Z2djX2ZyZWUgKHYpOworICAgICAgdiA9IE5VTEw7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIHdlIHdhbnQuICAqLworICBzaXplX3Qgc2l6ZSA9IHZlYzxULCBBLCB2bF9lbWJlZD46OmVtYmVkZGVkX3NpemUgKGFsbG9jKTsKKworICAvKiBBc2sgdGhlIGFsbG9jYXRvciBob3cgbXVjaCBzcGFjZSBpdCB3aWxsIHJlYWxseSBnaXZlIHVzLiAgKi8KKyAgc2l6ZSA9IDo6Z2djX3JvdW5kX2FsbG9jX3NpemUgKHNpemUpOworCisgIC8qIEFkanVzdCB0aGUgbnVtYmVyIG9mIHNsb3RzIGFjY29yZGluZ2x5LiAgKi8KKyAgc2l6ZV90IHZlY19vZmZzZXQgPSBzaXplb2YgKHZlY19wcmVmaXgpOworICBzaXplX3QgZWx0X3NpemUgPSBzaXplb2YgKFQpOworICBhbGxvYyA9IChzaXplIC0gdmVjX29mZnNldCkgLyBlbHRfc2l6ZTsKKworICAvKiBBbmQgZmluYWxseSwgcmVjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSB3ZSBhc2sgZm9yLiAgKi8KKyAgc2l6ZSA9IHZlY19vZmZzZXQgKyBhbGxvYyAqIGVsdF9zaXplOworCisgIHVuc2lnbmVkIG5lbGVtID0gdiA/IHYtPmxlbmd0aCAoKSA6IDA7CisgIHYgPSBzdGF0aWNfY2FzdCA8dmVjPFQsIEEsIHZsX2VtYmVkPiAqPiAoOjpnZ2NfcmVhbGxvY19zdGF0ICh2LCBzaXplCisJCQkJCQkJICAgICAgIFBBU1NfTUVNX1NUQVQpKTsKKyAgdi0+ZW1iZWRkZWRfaW5pdCAoYWxsb2MsIG5lbGVtKTsKK30KKworCisvKiBBbGxvY2F0b3IgdHlwZSBmb3IgR0MgdmVjdG9ycy4gIFRoaXMgaXMgZm9yIHZlY3RvcnMgb2YgdHlwZXMKKyAgIGF0b21pY3Mgdy5yLnQuIGNvbGxlY3Rpb24sIHNvIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpcworICAgY29tcGxldGVseSBpbmhlcml0ZWQgZnJvbSB2YV9nYy4gICovCitzdHJ1Y3QgdmFfZ2NfYXRvbWljIDogdmFfZ2MKK3sKK307CisKKworLyogQWxsb2NhdG9yIHR5cGUgZm9yIHN0YWNrIHZlY3RvcnMuICAqLworc3RydWN0IHZhX3N0YWNrCit7CisgIC8qIFVzZSB2bF9wdHIgYXMgdGhlIGRlZmF1bHQgbGF5b3V0IGZvciBzdGFjayB2ZWN0b3JzLiAgKi8KKyAgdHlwZWRlZiB2bF9wdHIgZGVmYXVsdF9sYXlvdXQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgc3RhdGljIHZvaWQgYWxsb2MgKHZlYzxULCB2YV9zdGFjaywgdmxfcHRyPiYsIHVuc2lnbmVkLAorCQkgICAgIHZlYzxULCB2YV9zdGFjaywgdmxfZW1iZWQ+ICopOworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdGF0aWMgdm9pZCByZXNlcnZlICh2ZWM8VCwgdmFfc3RhY2ssIHZsX2VtYmVkPiAqJiwgdW5zaWduZWQsIGJvb2wKKwkJICAgICAgIENYWF9NRU1fU1RBVF9JTkZPKTsKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgc3RhdGljIHZvaWQgcmVsZWFzZSAodmVjPFQsIHZhX3N0YWNrLCB2bF9lbWJlZD4gKiYpOworfTsKKworLyogSGVscGVyIGZ1bmN0aW9ucyB0byBrZWVwIHRyYWNrIG9mIHZlY3RvcnMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4gICovCit2b2lkIHJlZ2lzdGVyX3N0YWNrX3ZlYyAodm9pZCAqKTsKK2ludCBzdGFja192ZWNfcmVnaXN0ZXJfaW5kZXggKHZvaWQgKik7Cit2b2lkIHVucmVnaXN0ZXJfc3RhY2tfdmVjICh1bnNpZ25lZCk7CisKKy8qIEFsbG9jYXRlIGEgdmVjdG9yIFYgd2hpY2ggdXNlcyBhbGxvY2EgZm9yIHRoZSBpbml0aWFsIGFsbG9jYXRpb24uCisgICBTUEFDRSBpcyBzcGFjZSBhbGxvY2F0ZWQgdXNpbmcgYWxsb2NhLiAgTkVMRU1TIGlzIHRoZSBudW1iZXIgb2YKKyAgIGVudHJpZXMgYWxsb2NhdGVkLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQKK3ZhX3N0YWNrOjphbGxvYyAodmVjPFQsIHZhX3N0YWNrLCB2bF9wdHI+ICZ2LCB1bnNpZ25lZCBuZWxlbXMsCisJCSB2ZWM8VCwgdmFfc3RhY2ssIHZsX2VtYmVkPiAqc3BhY2UpCit7CisgIHYudmVjXyA9IHNwYWNlOworICByZWdpc3Rlcl9zdGFja192ZWMgKHN0YXRpY19jYXN0PHZvaWQgKj4gKHYudmVjXykpOworICB2LnZlY18tPmVtYmVkZGVkX2luaXQgKG5lbGVtcywgMCk7Cit9CisKKworLyogUmVzZXJ2ZSBORUxFTVMgc2xvdHMgZm9yIGEgdmVjdG9yIGluaXRpYWxseSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLgorICAgV2hlbiB0aGlzIGhhcHBlbnMsIHdlIHN3aXRjaCBiYWNrIHRvIGhlYXAgYWxsb2NhdGlvbi4gIFdlIHJlbW92ZQorICAgdGhlIHZlY3RvciBmcm9tIHN0YWNrX3ZlY3MsIGlmIGl0IGlzIHRoZXJlLCBzaW5jZSB3ZSBubyBsb25nZXIgbmVlZAorICAgdG8gYXZvaWQgZnJlZWluZyBpdC4gIElmIEVYQUNUIGlzIHRydWUsIGdyb3cgZXhhY3RseSwgb3RoZXJ3aXNlCisgICBncm93IGV4cG9uZW50aWFsbHkuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZAordmFfc3RhY2s6OnJlc2VydmUgKHZlYzxULCB2YV9zdGFjaywgdmxfZW1iZWQ+IComdiwgdW5zaWduZWQgbmVsZW1zLCBib29sIGV4YWN0CisJCSAgIE1FTV9TVEFUX0RFQ0wpCit7CisgIGludCBpeCA9IHN0YWNrX3ZlY19yZWdpc3Rlcl9pbmRleCAoc3RhdGljX2Nhc3Q8dm9pZCAqPiAodikpOworICBpZiAoaXggPj0gMCkKKyAgICB1bnJlZ2lzdGVyX3N0YWNrX3ZlYyAoaXgpOworICBlbHNlCisgICAgeworICAgICAgLyogViBpcyBhbHJlYWR5IG9uIHRoZSBoZWFwLiAgKi8KKyAgICAgIHZhX2hlYXA6OnJlc2VydmUgKHJlaW50ZXJwcmV0X2Nhc3Q8dmVjPFQsIHZhX2hlYXAsIHZsX2VtYmVkPiAqJj4gKHYpLAorCQkJbmVsZW1zLCBleGFjdCBQQVNTX01FTV9TVEFUKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogTW92ZSBWRUNfIHRvIHRoZSBoZWFwLiAgKi8KKyAgbmVsZW1zICs9IHYtPnZlY3BmeF8ubnVtXzsKKyAgdmVjPFQsIHZhX3N0YWNrLCB2bF9lbWJlZD4gKm9sZHZlYyA9IHY7CisgIHYgPSBOVUxMOworICB2YV9oZWFwOjpyZXNlcnZlIChyZWludGVycHJldF9jYXN0PHZlYzxULCB2YV9oZWFwLCB2bF9lbWJlZD4gKiY+KHYpLCBuZWxlbXMsCisJCSAgICBleGFjdCBQQVNTX01FTV9TVEFUKTsKKyAgaWYgKHYgJiYgb2xkdmVjKQorICAgIHsKKyAgICAgIHYtPnZlY3BmeF8ubnVtXyA9IG9sZHZlYy0+bGVuZ3RoICgpOworICAgICAgbWVtY3B5ICh2LT52ZWNkYXRhXywKKwkgICAgICBvbGR2ZWMtPnZlY2RhdGFfLAorCSAgICAgIG9sZHZlYy0+bGVuZ3RoICgpICogc2l6ZW9mIChUKSk7CisgICAgfQorfQorCisKKy8qIEZyZWUgYSB2ZWN0b3IgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4gIERvbid0IGFjdHVhbGx5IGZyZWUgaXQgaWYgd2UKKyAgIGZpbmQgaXQgaW4gdGhlIGhhc2ggdGFibGUuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZAordmFfc3RhY2s6OnJlbGVhc2UgKHZlYzxULCB2YV9zdGFjaywgdmxfZW1iZWQ+IComdikKK3sKKyAgaWYgKHYgPT0gTlVMTCkKKyAgICByZXR1cm47CisKKyAgaW50IGl4ID0gc3RhY2tfdmVjX3JlZ2lzdGVyX2luZGV4IChzdGF0aWNfY2FzdDx2b2lkICo+ICh2KSk7CisgIGlmIChpeCA+PSAwKQorICAgIHsKKyAgICAgIHVucmVnaXN0ZXJfc3RhY2tfdmVjIChpeCk7CisgICAgICB2ID0gTlVMTDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBUaGUgdmVjdG9yIHdhcyBub3Qgb24gdGhlIGxpc3Qgb2YgdmVjdG9ycyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLCBzbyBpdAorCSBtdXN0IGJlIGFsbG9jYXRlZCBvbiB0aGUgaGVhcC4gICovCisgICAgICB2YV9oZWFwOjpyZWxlYXNlIChyZWludGVycHJldF9jYXN0PHZlYzxULCB2YV9oZWFwLCB2bF9lbWJlZD4gKiY+ICh2KSk7CisgICAgfQorfQorCisKKy8qIEdlbmVyaWMgdmVjdG9yIHRlbXBsYXRlLiAgRGVmYXVsdCB2YWx1ZXMgZm9yIEEgYW5kIEwgaW5kaWNhdGUgdGhlCisgICBtb3N0IGNvbW1vbmx5IHVzZWQgc3RyYXRlZ2llcy4KKworICAgRklYTUUgLSBJZGVhbGx5LCB0aGV5IHdvdWxkIGFsbCBiZSB2bF9wdHIgdG8gZW5jb3VyYWdlIHVzaW5nIHJlZ3VsYXIKKyAgICAgICAgICAgaW5zdGFuY2VzIGZvciB2ZWN0b3JzLCBidXQgdGhlIGV4aXN0aW5nIEdUWSBtYWNoaW5lcnkgaXMgbGltaXRlZAorCSAgIGluIHRoYXQgaXQgY2FuIG9ubHkgZGVhbCB3aXRoIEdDIG9iamVjdHMgdGhhdCBhcmUgcG9pbnRlcnMKKwkgICB0aGVtc2VsdmVzLgorCisJICAgVGhpcyBtZWFucyB0aGF0IHZlY3RvciBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBkZWFsIHdpdGgKKwkgICBwb3RlbnRpYWxseSBOVUxMIHBvaW50ZXJzLCBtdXN0IGJlIHByb3ZpZGVkIGFzIGZyZWUKKwkgICBmdW5jdGlvbnMgKHNlZSB0aGUgdmVjX3NhZmVfKiBmdW5jdGlvbnMgYWJvdmUpLiAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsCisgICAgICAgICB0eXBlbmFtZSBBID0gdmFfaGVhcCwKKyAgICAgICAgIHR5cGVuYW1lIEwgPSB0eXBlbmFtZSBBOjpkZWZhdWx0X2xheW91dD4KK3N0cnVjdCBHVFkoKHVzZXIpKSB2ZWMKK3sKK307CisKKy8qIFR5cGUgdG8gcHJvdmlkZSBOVUxMIHZhbHVlcyBmb3IgdmVjPFQsIEEsIEw+LiAgVGhpcyBpcyB1c2VkIHRvCisgICBwcm92aWRlIG5pbCBpbml0aWFsaXplcnMgZm9yIHZlYyBpbnN0YW5jZXMuICBTaW5jZSB2ZWMgbXVzdCBiZQorICAgYSBQT0QsIHdlIGNhbm5vdCBoYXZlIHByb3BlciBjdG9yL2R0b3IgZm9yIGl0LiAgVG8gaW5pdGlhbGl6ZQorICAgYSB2ZWMgaW5zdGFuY2UsIHlvdSBjYW4gYXNzaWduIGl0IHRoZSB2YWx1ZSB2TlVMTC4gICovCitzdHJ1Y3Qgdm51bGwKK3sKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEEsIHR5cGVuYW1lIEw+CisgIG9wZXJhdG9yIHZlYzxULCBBLCBMPiAoKSB7IHJldHVybiB2ZWM8VCwgQSwgTD4oKTsgfQorfTsKK2V4dGVybiB2bnVsbCB2TlVMTDsKKworCisvKiBFbWJlZGRhYmxlIHZlY3Rvci4gIFRoZXNlIHZlY3RvcnMgYXJlIHN1aXRhYmxlIHRvIGJlIGVtYmVkZGVkCisgICBpbiBvdGhlciBkYXRhIHN0cnVjdHVyZXMgc28gdGhhdCB0aGV5IGNhbiBiZSBwcmUtYWxsb2NhdGVkIGluIGEKKyAgIGNvbnRpZ3VvdXMgbWVtb3J5IGJsb2NrLgorCisgICBFbWJlZGRhYmxlIHZlY3RvcnMgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSB0cmFpbGluZyBhcnJheSBpZGlvbSwKKyAgIHRodXMgdGhleSBhcmUgbm90IHJlc2l6ZWFibGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAgIHZlY3RvciBvYmplY3QgaXRzZWxmLiAgVGhpcyBtZWFucyB5b3UgY2Fubm90IGhhdmUgdmFyaWFibGVzIG9yCisgICBmaWVsZHMgb2YgZW1iZWRkYWJsZSB2ZWN0b3IgdHlwZSAtLSBhbHdheXMgdXNlIGEgcG9pbnRlciB0byBhCisgICB2ZWN0b3IuICBUaGUgb25lIGV4Y2VwdGlvbiBpcyB0aGUgZmluYWwgZmllbGQgb2YgYSBzdHJ1Y3R1cmUsIHdoaWNoCisgICBjb3VsZCBiZSBhIHZlY3RvciB0eXBlLgorCisgICBZb3Ugd2lsbCBoYXZlIHRvIHVzZSB0aGUgZW1iZWRkZWRfc2l6ZSAmIGVtYmVkZGVkX2luaXQgY2FsbHMgdG8KKyAgIGNyZWF0ZSBzdWNoIG9iamVjdHMsIGFuZCB0aGV5IHdpbGwgbm90IGJlIHJlc2l6ZWFibGUgKHNvIHRoZSAnc2FmZScKKyAgIGFsbG9jYXRpb24gdmFyaWFudHMgYXJlIG5vdCBhdmFpbGFibGUpLgorCisgICBQcm9wZXJ0aWVzOgorCisJLSBUaGUgd2hvbGUgdmVjdG9yIGFuZCBjb250cm9sIGRhdGEgYXJlIGFsbG9jYXRlZCBpbiBhIHNpbmdsZQorCSAgY29udGlndW91cyBibG9jay4gIEl0IHVzZXMgdGhlIHRyYWlsaW5nLXZlY3RvciBpZGlvbSwgc28KKwkgIGFsbG9jYXRpb24gbXVzdCByZXNlcnZlIGVub3VnaCBzcGFjZSBmb3IgYWxsIHRoZSBlbGVtZW50cworICAJICBpbiB0aGUgdmVjdG9yIHBsdXMgaXRzIGNvbnRyb2wgZGF0YS4KKyAgCS0gVGhlIHZlY3RvciBjYW5ub3QgYmUgcmUtYWxsb2NhdGVkLgorICAJLSBUaGUgdmVjdG9yIGNhbm5vdCBncm93IG5vciBzaHJpbmsuCisgIAktIE5vIGluZGlyZWN0aW9ucyBuZWVkZWQgZm9yIGFjY2Vzcy9tYW5pcHVsYXRpb24uCisgIAktIEl0IHJlcXVpcmVzIDIgd29yZHMgb2Ygc3RvcmFnZSAocHJpb3IgdG8gdmVjdG9yIGFsbG9jYXRpb24pLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK3N0cnVjdCBHVFkoKHVzZXIpKSB2ZWM8VCwgQSwgdmxfZW1iZWQ+Cit7CitwdWJsaWM6CisgIHVuc2lnbmVkIGFsbG9jYXRlZCAodm9pZCkgY29uc3QgeyByZXR1cm4gdmVjcGZ4Xy5hbGxvY187IH0KKyAgdW5zaWduZWQgbGVuZ3RoICh2b2lkKSBjb25zdCB7IHJldHVybiB2ZWNwZnhfLm51bV87IH0KKyAgYm9vbCBpc19lbXB0eSAodm9pZCkgY29uc3QgeyByZXR1cm4gdmVjcGZ4Xy5udW1fID09IDA7IH0KKyAgVCAqYWRkcmVzcyAodm9pZCkgeyByZXR1cm4gdmVjZGF0YV87IH0KKyAgY29uc3QgVCAqYWRkcmVzcyAodm9pZCkgY29uc3QgeyByZXR1cm4gdmVjZGF0YV87IH0KKyAgY29uc3QgVCAmb3BlcmF0b3JbXSAodW5zaWduZWQpIGNvbnN0OworICBUICZvcGVyYXRvcltdICh1bnNpZ25lZCk7CisgIFQgJmxhc3QgKHZvaWQpOworICBib29sIHNwYWNlICh1bnNpZ25lZCkgY29uc3Q7CisgIGJvb2wgaXRlcmF0ZSAodW5zaWduZWQsIFQgKikgY29uc3Q7CisgIGJvb2wgaXRlcmF0ZSAodW5zaWduZWQsIFQgKiopIGNvbnN0OworICB2ZWMgKmNvcHkgKEFMT05FX0NYWF9NRU1fU1RBVF9JTkZPKSBjb25zdDsKKyAgdm9pZCBzcGxpY2UgKHZlYyAmKTsKKyAgdm9pZCBzcGxpY2UgKHZlYyAqc3JjKTsKKyAgVCAqcXVpY2tfcHVzaCAoY29uc3QgVCAmKTsKKyAgVCAmcG9wICh2b2lkKTsKKyAgdm9pZCB0cnVuY2F0ZSAodW5zaWduZWQpOworICB2b2lkIHF1aWNrX2luc2VydCAodW5zaWduZWQsIGNvbnN0IFQgJik7CisgIHZvaWQgb3JkZXJlZF9yZW1vdmUgKHVuc2lnbmVkKTsKKyAgdm9pZCB1bm9yZGVyZWRfcmVtb3ZlICh1bnNpZ25lZCk7CisgIHZvaWQgYmxvY2tfcmVtb3ZlICh1bnNpZ25lZCwgdW5zaWduZWQpOworICB2b2lkIHFzb3J0IChpbnQgKCopIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworICB1bnNpZ25lZCBsb3dlcl9ib3VuZCAoVCwgYm9vbCAoKikoY29uc3QgVCAmLCBjb25zdCBUICYpKSBjb25zdDsKKyAgc3RhdGljIHNpemVfdCBlbWJlZGRlZF9zaXplICh1bnNpZ25lZCk7CisgIHZvaWQgZW1iZWRkZWRfaW5pdCAodW5zaWduZWQsIHVuc2lnbmVkID0gMCk7CisgIHZvaWQgcXVpY2tfZ3JvdyAodW5zaWduZWQgbGVuKTsKKyAgdm9pZCBxdWlja19ncm93X2NsZWFyZWQgKHVuc2lnbmVkIGxlbik7CisKKyAgLyogdmVjIGNsYXNzIGNhbiBhY2Nlc3Mgb3VyIGludGVybmFsIGRhdGEgYW5kIGZ1bmN0aW9ucy4gICovCisgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgc3RydWN0IHZlYzsKKworICAvKiBUaGUgYWxsb2NhdG9yIHR5cGVzIGFsc28gbmVlZCBhY2Nlc3MgdG8gb3VyIGludGVybmFscy4gICovCisgIGZyaWVuZCBzdHJ1Y3QgdmFfZ2M7CisgIGZyaWVuZCBzdHJ1Y3QgdmFfZ2NfYXRvbWljOworICBmcmllbmQgc3RydWN0IHZhX2hlYXA7CisgIGZyaWVuZCBzdHJ1Y3QgdmFfc3RhY2s7CisKKyAgLyogRklYTUUgLSBUaGVzZSBmaWVsZHMgc2hvdWxkIGJlIHByaXZhdGUsIGJ1dCB3ZSBuZWVkIHRvIGNhdGVyIHRvCisJICAgICBjb21waWxlcnMgdGhhdCBoYXZlIHN0cmljdGVyIG5vdGlvbnMgb2YgUE9EbmVzcyBmb3IgdHlwZXMuICAqLworICB2ZWNfcHJlZml4IHZlY3BmeF87CisgIFQgdmVjZGF0YV9bMV07Cit9OworCisKKy8qIENvbnZlbmllbmNlIHdyYXBwZXIgZnVuY3Rpb25zIHRvIHVzZSB3aGVuIGRlYWxpbmcgd2l0aCBwb2ludGVycyB0bworICAgZW1iZWRkZWQgdmVjdG9ycy4gIFNvbWUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlc2UgdmVjdG9ycyBtdXN0IGJlCisgICBwcm92aWRlZCB2aWEgZnJlZSBmdW5jdGlvbnMgZm9yIHRoZXNlIHJlYXNvbnM6CisKKwkxLSBUaGUgcG9pbnRlciBtYXkgYmUgTlVMTCAoZS5nLiwgYmVmb3JlIGluaXRpYWwgYWxsb2NhdGlvbikuCisKKyAgCTItIFdoZW4gdGhlIHZlY3RvciBuZWVkcyB0byBncm93LCBpdCBtdXN0IGJlIHJlYWxsb2NhdGVkLCBzbworICAJICAgdGhlIHBvaW50ZXIgd2lsbCBjaGFuZ2UgaXRzIHZhbHVlLgorCisgICBCZWNhdXNlIG9mIGxpbWl0YXRpb25zIHdpdGggdGhlIGN1cnJlbnQgR0MgbWFjaGluZXJ5LCBhbGwgdmVjdG9ycworICAgaW4gR0MgbWVtb3J5ICptdXN0KiBiZSBwb2ludGVycy4gICovCisKKworLyogSWYgViBjb250YWlucyBubyByb29tIGZvciBORUxFTVMgZWxlbWVudHMsIHJldHVybiBmYWxzZS4gT3RoZXJ3aXNlLAorICAgcmV0dXJuIHRydWUuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBib29sCit2ZWNfc2FmZV9zcGFjZSAoY29uc3QgdmVjPFQsIEEsIHZsX2VtYmVkPiAqdiwgdW5zaWduZWQgbmVsZW1zKQoreworICByZXR1cm4gdiA/IHYtPnNwYWNlIChuZWxlbXMpIDogbmVsZW1zID09IDA7Cit9CisKKworLyogSWYgViBpcyBOVUxMLCByZXR1cm4gMC4gIE90aGVyd2lzZSwgcmV0dXJuIFYtPmxlbmd0aCgpLiAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdW5zaWduZWQKK3ZlY19zYWZlX2xlbmd0aCAoY29uc3QgdmVjPFQsIEEsIHZsX2VtYmVkPiAqdikKK3sKKyAgcmV0dXJuIHYgPyB2LT5sZW5ndGggKCkgOiAwOworfQorCisKKy8qIElmIFYgaXMgTlVMTCwgcmV0dXJuIE5VTEwuICBPdGhlcndpc2UsIHJldHVybiBWLT5hZGRyZXNzKCkuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBUICoKK3ZlY19zYWZlX2FkZHJlc3MgKHZlYzxULCBBLCB2bF9lbWJlZD4gKnYpCit7CisgIHJldHVybiB2ID8gdi0+YWRkcmVzcyAoKSA6IE5VTEw7Cit9CisKKworLyogSWYgViBpcyBOVUxMLCByZXR1cm4gdHJ1ZS4gIE90aGVyd2lzZSwgcmV0dXJuIFYtPmlzX2VtcHR5KCkuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBib29sCit2ZWNfc2FmZV9pc19lbXB0eSAodmVjPFQsIEEsIHZsX2VtYmVkPiAqdikKK3sKKyAgcmV0dXJuIHYgPyB2LT5pc19lbXB0eSAoKSA6IHRydWU7Cit9CisKKworLyogSWYgViBkb2VzIG5vdCBoYXZlIHNwYWNlIGZvciBORUxFTVMgZWxlbWVudHMsIGNhbGwKKyAgIFYtPnJlc2VydmUoTkVMRU1TLCBFWEFDVCkuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBib29sCit2ZWNfc2FmZV9yZXNlcnZlICh2ZWM8VCwgQSwgdmxfZW1iZWQ+IComdiwgdW5zaWduZWQgbmVsZW1zLCBib29sIGV4YWN0ID0gZmFsc2UKKwkJICBDWFhfTUVNX1NUQVRfSU5GTykKK3sKKyAgYm9vbCBleHRlbmQgPSBuZWxlbXMgPyAhdmVjX3NhZmVfc3BhY2UgKHYsIG5lbGVtcykgOiBmYWxzZTsKKyAgaWYgKGV4dGVuZCkKKyAgICBBOjpyZXNlcnZlICh2LCBuZWxlbXMsIGV4YWN0IFBBU1NfTUVNX1NUQVQpOworICByZXR1cm4gZXh0ZW5kOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIGJvb2wKK3ZlY19zYWZlX3Jlc2VydmVfZXhhY3QgKHZlYzxULCBBLCB2bF9lbWJlZD4gKiZ2LCB1bnNpZ25lZCBuZWxlbXMKKwkJCUNYWF9NRU1fU1RBVF9JTkZPKQoreworICByZXR1cm4gdmVjX3NhZmVfcmVzZXJ2ZSAodiwgbmVsZW1zLCB0cnVlIFBBU1NfTUVNX1NUQVQpOworfQorCisKKy8qIEFsbG9jYXRlIEdDIG1lbW9yeSBmb3IgViB3aXRoIHNwYWNlIGZvciBORUxFTVMgc2xvdHMuICBJZiBORUxFTVMKKyAgIGlzIDAsIFYgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTC4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjX2FsbG9jICh2ZWM8VCwgQSwgdmxfZW1iZWQ+IComdiwgdW5zaWduZWQgbmVsZW1zIENYWF9NRU1fU1RBVF9JTkZPKQoreworICB2ID0gTlVMTDsKKyAgdmVjX3NhZmVfcmVzZXJ2ZSAodiwgbmVsZW1zLCBmYWxzZSBQQVNTX01FTV9TVEFUKTsKK30KKworCisvKiBGcmVlIHRoZSBHQyBtZW1vcnkgYWxsb2NhdGVkIGJ5IHZlY3RvciBWIGFuZCBzZXQgaXQgdG8gTlVMTC4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjX2ZyZWUgKHZlYzxULCBBLCB2bF9lbWJlZD4gKiZ2KQoreworICBBOjpyZWxlYXNlICh2KTsKK30KKworCisvKiBHcm93IFYgdG8gbGVuZ3RoIExFTi4gIEFsbG9jYXRlIGl0LCBpZiBuZWNlc3NhcnkuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWNfc2FmZV9ncm93ICh2ZWM8VCwgQSwgdmxfZW1iZWQ+IComdiwgdW5zaWduZWQgbGVuIENYWF9NRU1fU1RBVF9JTkZPKQoreworICB1bnNpZ25lZCBvbGRsZW4gPSB2ZWNfc2FmZV9sZW5ndGggKHYpOworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChsZW4gPj0gb2xkbGVuKTsKKyAgdmVjX3NhZmVfcmVzZXJ2ZV9leGFjdCAodiwgbGVuIC0gb2xkbGVuIFBBU1NfTUVNX1NUQVQpOworICB2LT5xdWlja19ncm93IChsZW4pOworfQorCisKKy8qIElmIFYgaXMgTlVMTCwgYWxsb2NhdGUgaXQuICBDYWxsIFYtPnNhZmVfZ3Jvd19jbGVhcmVkKExFTikuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWNfc2FmZV9ncm93X2NsZWFyZWQgKHZlYzxULCBBLCB2bF9lbWJlZD4gKiZ2LCB1bnNpZ25lZCBsZW4gQ1hYX01FTV9TVEFUX0lORk8pCit7CisgIHVuc2lnbmVkIG9sZGxlbiA9IHZlY19zYWZlX2xlbmd0aCAodik7CisgIHZlY19zYWZlX2dyb3cgKHYsIGxlbiBQQVNTX01FTV9TVEFUKTsKKyAgbWVtc2V0ICgmKHYtPmFkZHJlc3MoKVtvbGRsZW5dKSwgMCwgc2l6ZW9mIChUKSAqIChsZW4gLSBvbGRsZW4pKTsKK30KKworCisvKiBJZiBWIGlzIE5VTEwgcmV0dXJuIGZhbHNlLCBvdGhlcndpc2UgcmV0dXJuIFYtPml0ZXJhdGUoSVgsIFBUUikuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBib29sCit2ZWNfc2FmZV9pdGVyYXRlIChjb25zdCB2ZWM8VCwgQSwgdmxfZW1iZWQ+ICp2LCB1bnNpZ25lZCBpeCwgVCAqKnB0cikKK3sKKyAgaWYgKHYpCisgICAgcmV0dXJuIHYtPml0ZXJhdGUgKGl4LCBwdHIpOworICBlbHNlCisgICAgeworICAgICAgKnB0ciA9IDA7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIGJvb2wKK3ZlY19zYWZlX2l0ZXJhdGUgKGNvbnN0IHZlYzxULCBBLCB2bF9lbWJlZD4gKnYsIHVuc2lnbmVkIGl4LCBUICpwdHIpCit7CisgIGlmICh2KQorICAgIHJldHVybiB2LT5pdGVyYXRlIChpeCwgcHRyKTsKKyAgZWxzZQorICAgIHsKKyAgICAgICpwdHIgPSAwOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworCisvKiBJZiBWIGhhcyBubyByb29tIGZvciBvbmUgbW9yZSBlbGVtZW50LCByZWFsbG9jYXRlIGl0LiAgVGhlbiBjYWxsCisgICBWLT5xdWlja19wdXNoKE9CSikuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBUICoKK3ZlY19zYWZlX3B1c2ggKHZlYzxULCBBLCB2bF9lbWJlZD4gKiZ2LCBjb25zdCBUICZvYmogQ1hYX01FTV9TVEFUX0lORk8pCit7CisgIHZlY19zYWZlX3Jlc2VydmUgKHYsIDEsIGZhbHNlIFBBU1NfTUVNX1NUQVQpOworICByZXR1cm4gdi0+cXVpY2tfcHVzaCAob2JqKTsKK30KKworCisvKiBpZiBWIGhhcyBubyByb29tIGZvciBvbmUgbW9yZSBlbGVtZW50LCByZWFsbG9jYXRlIGl0LiAgVGhlbiBjYWxsCisgICBWLT5xdWlja19pbnNlcnQoSVgsIE9CSikuICAqLwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWNfc2FmZV9pbnNlcnQgKHZlYzxULCBBLCB2bF9lbWJlZD4gKiZ2LCB1bnNpZ25lZCBpeCwgY29uc3QgVCAmb2JqCisJCSBDWFhfTUVNX1NUQVRfSU5GTykKK3sKKyAgdmVjX3NhZmVfcmVzZXJ2ZSAodiwgMSwgZmFsc2UgUEFTU19NRU1fU1RBVCk7CisgIHYtPnF1aWNrX2luc2VydCAoaXgsIG9iaik7Cit9CisKKworLyogSWYgViBpcyBOVUxMLCBkbyBub3RoaW5nLiAgT3RoZXJ3aXNlLCBjYWxsIFYtPnRydW5jYXRlKFNJWkUpLiAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjX3NhZmVfdHJ1bmNhdGUgKHZlYzxULCBBLCB2bF9lbWJlZD4gKnYsIHVuc2lnbmVkIHNpemUpCit7CisgIGlmICh2KQorICAgIHYtPnRydW5jYXRlIChzaXplKTsKK30KKworCisvKiBJZiBTUkMgaXMgbm90IE5VTEwsIHJldHVybiBhIHBvaW50ZXIgdG8gYSBjb3B5IG9mIGl0LiAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdmVjPFQsIEEsIHZsX2VtYmVkPiAqCit2ZWNfc2FmZV9jb3B5ICh2ZWM8VCwgQSwgdmxfZW1iZWQ+ICpzcmMpCit7CisgIHJldHVybiBzcmMgPyBzcmMtPmNvcHkgKCkgOiBOVUxMOworfQorCisvKiBDb3B5IHRoZSBlbGVtZW50cyBmcm9tIFNSQyB0byB0aGUgZW5kIG9mIERTVCBhcyBpZiBieSBtZW1jcHkuCisgICBSZWFsbG9jYXRlIERTVCwgaWYgbmVjZXNzYXJ5LiAgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjX3NhZmVfc3BsaWNlICh2ZWM8VCwgQSwgdmxfZW1iZWQ+IComZHN0LCB2ZWM8VCwgQSwgdmxfZW1iZWQ+ICpzcmMKKwkJIENYWF9NRU1fU1RBVF9JTkZPKQoreworICB1bnNpZ25lZCBzcmNfbGVuID0gdmVjX3NhZmVfbGVuZ3RoIChzcmMpOworICBpZiAoc3JjX2xlbikKKyAgICB7CisgICAgICB2ZWNfc2FmZV9yZXNlcnZlX2V4YWN0IChkc3QsIHZlY19zYWZlX2xlbmd0aCAoZHN0KSArIHNyY19sZW4KKwkJCSAgICAgIFBBU1NfTUVNX1NUQVQpOworICAgICAgZHN0LT5zcGxpY2UgKCpzcmMpOworICAgIH0KK30KKworCisvKiBJbmRleCBpbnRvIHZlY3Rvci4gIFJldHVybiB0aGUgSVgndGggZWxlbWVudC4gIElYIG11c3QgYmUgaW4gdGhlCisgICBkb21haW4gb2YgdGhlIHZlY3Rvci4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgY29uc3QgVCAmCit2ZWM8VCwgQSwgdmxfZW1iZWQ+OjpvcGVyYXRvcltdICh1bnNpZ25lZCBpeCkgY29uc3QKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaXggPCB2ZWNwZnhfLm51bV8pOworICByZXR1cm4gdmVjZGF0YV9baXhdOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIFQgJgordmVjPFQsIEEsIHZsX2VtYmVkPjo6b3BlcmF0b3JbXSAodW5zaWduZWQgaXgpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGl4IDwgdmVjcGZ4Xy5udW1fKTsKKyAgcmV0dXJuIHZlY2RhdGFfW2l4XTsKK30KKworCisvKiBHZXQgdGhlIGZpbmFsIGVsZW1lbnQgb2YgdGhlIHZlY3Rvciwgd2hpY2ggbXVzdCBub3QgYmUgZW1wdHkuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIFQgJgordmVjPFQsIEEsIHZsX2VtYmVkPjo6bGFzdCAodm9pZCkKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAodmVjcGZ4Xy5udW1fID4gMCk7CisgIHJldHVybiAoKnRoaXMpW3ZlY3BmeF8ubnVtXyAtIDFdOworfQorCisKKy8qIElmIHRoaXMgdmVjdG9yIGhhcyBzcGFjZSBmb3IgTkVMRU1TIGFkZGl0aW9uYWwgZW50cmllcywgcmV0dXJuCisgICB0cnVlLiAgWW91IHVzdWFsbHkgb25seSBuZWVkIHRvIHVzZSB0aGlzIGlmIHlvdSBhcmUgZG9pbmcgeW91cgorICAgb3duIHZlY3RvciByZWFsbG9jYXRpb24sIGZvciBpbnN0YW5jZSBvbiBhbiBlbWJlZGRlZCB2ZWN0b3IuICBUaGlzCisgICByZXR1cm5zIHRydWUgaW4gZXhhY3RseSB0aGUgc2FtZSBjaXJjdW1zdGFuY2VzIHRoYXQgdmVjOjpyZXNlcnZlCisgICB3aWxsLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBib29sCit2ZWM8VCwgQSwgdmxfZW1iZWQ+OjpzcGFjZSAodW5zaWduZWQgbmVsZW1zKSBjb25zdAoreworICByZXR1cm4gdmVjcGZ4Xy5hbGxvY18gLSB2ZWNwZnhfLm51bV8gPj0gbmVsZW1zOworfQorCisKKy8qIFJldHVybiBpdGVyYXRpb24gY29uZGl0aW9uIGFuZCB1cGRhdGUgUFRSIHRvIHBvaW50IHRvIHRoZSBJWCd0aAorICAgZWxlbWVudCBvZiB0aGlzIHZlY3Rvci4gIFVzZSB0aGlzIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYQorICAgdmVjdG9yIGFzIGZvbGxvd3MsCisKKyAgICAgZm9yIChpeCA9IDA7IHZlYzxULCBBPjo6aXRlcmF0ZSh2LCBpeCwgJnB0cik7IGl4KyspCisgICAgICAgY29udGludWU7ICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIGJvb2wKK3ZlYzxULCBBLCB2bF9lbWJlZD46Oml0ZXJhdGUgKHVuc2lnbmVkIGl4LCBUICpwdHIpIGNvbnN0Cit7CisgIGlmIChpeCA8IHZlY3BmeF8ubnVtXykKKyAgICB7CisgICAgICAqcHRyID0gdmVjZGF0YV9baXhdOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgKnB0ciA9IDA7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisKKy8qIFJldHVybiBpdGVyYXRpb24gY29uZGl0aW9uIGFuZCB1cGRhdGUgKlBUUiB0byBwb2ludCB0byB0aGUKKyAgIElYJ3RoIGVsZW1lbnQgb2YgdGhpcyB2ZWN0b3IuICBVc2UgdGhpcyB0byBpdGVyYXRlIG92ZXIgdGhlCisgICBlbGVtZW50cyBvZiBhIHZlY3RvciBhcyBmb2xsb3dzLAorCisgICAgIGZvciAoaXggPSAwOyB2LT5pdGVyYXRlKGl4LCAmcHRyKTsgaXgrKykKKyAgICAgICBjb250aW51ZTsKKworICAgVGhpcyB2YXJpYW50IGlzIGZvciB2ZWN0b3JzIG9mIG9iamVjdHMuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIGJvb2wKK3ZlYzxULCBBLCB2bF9lbWJlZD46Oml0ZXJhdGUgKHVuc2lnbmVkIGl4LCBUICoqcHRyKSBjb25zdAoreworICBpZiAoaXggPCB2ZWNwZnhfLm51bV8pCisgICAgeworICAgICAgKnB0ciA9IENPTlNUX0NBU1QgKFQgKiwgJnZlY2RhdGFfW2l4XSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAqcHRyID0gMDsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKworLyogUmV0dXJuIGEgcG9pbnRlciB0byBhIGNvcHkgb2YgdGhpcyB2ZWN0b3IuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZlYzxULCBBLCB2bF9lbWJlZD4gKgordmVjPFQsIEEsIHZsX2VtYmVkPjo6Y29weSAoQUxPTkVfTUVNX1NUQVRfREVDTCkgY29uc3QKK3sKKyAgdmVjPFQsIEEsIHZsX2VtYmVkPiAqbmV3X3ZlYyA9IE5VTEw7CisgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCAoKTsKKyAgaWYgKGxlbikKKyAgICB7CisgICAgICB2ZWNfYWxsb2MgKG5ld192ZWMsIGxlbiBQQVNTX01FTV9TVEFUKTsKKyAgICAgIG5ld192ZWMtPmVtYmVkZGVkX2luaXQgKGxlbiwgbGVuKTsKKyAgICAgIG1lbWNweSAobmV3X3ZlYy0+YWRkcmVzcygpLCB2ZWNkYXRhXywgc2l6ZW9mIChUKSAqIGxlbik7CisgICAgfQorICByZXR1cm4gbmV3X3ZlYzsKK30KKworCisvKiBDb3B5IHRoZSBlbGVtZW50cyBmcm9tIFNSQyB0byB0aGUgZW5kIG9mIHRoaXMgdmVjdG9yIGFzIGlmIGJ5IG1lbWNweS4KKyAgIFRoZSB2ZWN0b3IgbXVzdCBoYXZlIHN1ZmZpY2llbnQgaGVhZHJvb20gYXZhaWxhYmxlLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWM8VCwgQSwgdmxfZW1iZWQ+OjpzcGxpY2UgKHZlYzxULCBBLCB2bF9lbWJlZD4gJnNyYykKK3sKKyAgdW5zaWduZWQgbGVuID0gc3JjLmxlbmd0aCgpOworICBpZiAobGVuKQorICAgIHsKKyAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHNwYWNlIChsZW4pKTsKKyAgICAgIG1lbWNweSAoYWRkcmVzcygpICsgbGVuZ3RoKCksIHNyYy5hZGRyZXNzKCksIGxlbiAqIHNpemVvZiAoVCkpOworICAgICAgdmVjcGZ4Xy5udW1fICs9IGxlbjsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX2VtYmVkPjo6c3BsaWNlICh2ZWM8VCwgQSwgdmxfZW1iZWQ+ICpzcmMpCit7CisgIGlmIChzcmMpCisgICAgc3BsaWNlICgqc3JjKTsKK30KKworCisvKiBQdXNoIE9CSiAoYSBuZXcgZWxlbWVudCkgb250byB0aGUgZW5kIG9mIHRoZSB2ZWN0b3IuICBUaGVyZSBtdXN0IGJlCisgICBzdWZmaWNpZW50IHNwYWNlIGluIHRoZSB2ZWN0b3IuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzbG90CisgICB3aGVyZSBPQkogd2FzIGluc2VydGVkLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBUICoKK3ZlYzxULCBBLCB2bF9lbWJlZD46OnF1aWNrX3B1c2ggKGNvbnN0IFQgJm9iaikKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoc3BhY2UgKDEpKTsKKyAgVCAqc2xvdCA9ICZ2ZWNkYXRhX1t2ZWNwZnhfLm51bV8rK107CisgICpzbG90ID0gb2JqOworICByZXR1cm4gc2xvdDsKK30KKworCisvKiBQb3AgYW5kIHJldHVybiB0aGUgbGFzdCBlbGVtZW50IG9mZiB0aGUgZW5kIG9mIHRoZSB2ZWN0b3IuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIFQgJgordmVjPFQsIEEsIHZsX2VtYmVkPjo6cG9wICh2b2lkKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChsZW5ndGggKCkgPiAwKTsKKyAgcmV0dXJuIHZlY2RhdGFfWy0tdmVjcGZ4Xy5udW1fXTsKK30KKworCisvKiBTZXQgdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yIHRvIFNJWkUuICBUaGUgbmV3IGxlbmd0aCBtdXN0IGJlIGxlc3MKKyAgIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbGVuZ3RoLiAgVGhpcyBpcyBhbiBPKDEpIG9wZXJhdGlvbi4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX2VtYmVkPjo6dHJ1bmNhdGUgKHVuc2lnbmVkIHNpemUpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGxlbmd0aCAoKSA+PSBzaXplKTsKKyAgdmVjcGZ4Xy5udW1fID0gc2l6ZTsKK30KKworCisvKiBJbnNlcnQgYW4gZWxlbWVudCwgT0JKLCBhdCB0aGUgSVh0aCBwb3NpdGlvbiBvZiB0aGlzIHZlY3Rvci4gIFRoZXJlCisgICBtdXN0IGJlIHN1ZmZpY2llbnQgc3BhY2UuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9lbWJlZD46OnF1aWNrX2luc2VydCAodW5zaWduZWQgaXgsIGNvbnN0IFQgJm9iaikKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAobGVuZ3RoICgpIDwgYWxsb2NhdGVkICgpKTsKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaXggPD0gbGVuZ3RoICgpKTsKKyAgVCAqc2xvdCA9ICZ2ZWNkYXRhX1tpeF07CisgIG1lbW1vdmUgKHNsb3QgKyAxLCBzbG90LCAodmVjcGZ4Xy5udW1fKysgLSBpeCkgKiBzaXplb2YgKFQpKTsKKyAgKnNsb3QgPSBvYmo7Cit9CisKKworLyogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgSVh0aCBwb3NpdGlvbiBvZiB0aGlzIHZlY3Rvci4gIE9yZGVyaW5nIG9mCisgICByZW1haW5pbmcgZWxlbWVudHMgaXMgcHJlc2VydmVkLiAgVGhpcyBpcyBhbiBPKE4pIG9wZXJhdGlvbiBkdWUgdG8KKyAgIG1lbW1vdmUuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9lbWJlZD46Om9yZGVyZWRfcmVtb3ZlICh1bnNpZ25lZCBpeCkKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoaXggPCBsZW5ndGgoKSk7CisgIFQgKnNsb3QgPSAmdmVjZGF0YV9baXhdOworICBtZW1tb3ZlIChzbG90LCBzbG90ICsgMSwgKC0tdmVjcGZ4Xy5udW1fIC0gaXgpICogc2l6ZW9mIChUKSk7Cit9CisKKworLyogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgSVh0aCBwb3NpdGlvbiBvZiB0aGlzIHZlY3Rvci4gIE9yZGVyaW5nIG9mCisgICByZW1haW5pbmcgZWxlbWVudHMgaXMgZGVzdHJveWVkLiAgVGhpcyBpcyBhbiBPKDEpIG9wZXJhdGlvbi4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX2VtYmVkPjo6dW5vcmRlcmVkX3JlbW92ZSAodW5zaWduZWQgaXgpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGl4IDwgbGVuZ3RoKCkpOworICB2ZWNkYXRhX1tpeF0gPSB2ZWNkYXRhX1stLXZlY3BmeF8ubnVtX107Cit9CisKKworLyogUmVtb3ZlIExFTiBlbGVtZW50cyBzdGFydGluZyBhdCB0aGUgSVh0aC4gIE9yZGVyaW5nIGlzIHJldGFpbmVkLgorICAgVGhpcyBpcyBhbiBPKE4pIG9wZXJhdGlvbiBkdWUgdG8gbWVtbW92ZS4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX2VtYmVkPjo6YmxvY2tfcmVtb3ZlICh1bnNpZ25lZCBpeCwgdW5zaWduZWQgbGVuKQoreworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChpeCArIGxlbiA8PSBsZW5ndGgoKSk7CisgIFQgKnNsb3QgPSAmdmVjZGF0YV9baXhdOworICB2ZWNwZnhfLm51bV8gLT0gbGVuOworICBtZW1tb3ZlIChzbG90LCBzbG90ICsgbGVuLCAodmVjcGZ4Xy5udW1fIC0gaXgpICogc2l6ZW9mIChUKSk7Cit9CisKKworLyogU29ydCB0aGUgY29udGVudHMgb2YgdGhpcyB2ZWN0b3Igd2l0aCBxc29ydC4gIENNUCBpcyB0aGUgY29tcGFyaXNvbgorICAgZnVuY3Rpb24gdG8gcGFzcyB0byBxc29ydC4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX2VtYmVkPjo6cXNvcnQgKGludCAoKmNtcCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKyAgOjpxc29ydCAoYWRkcmVzcygpLCBsZW5ndGgoKSwgc2l6ZW9mIChUKSwgY21wKTsKK30KKworCisvKiBGaW5kIGFuZCByZXR1cm4gdGhlIGZpcnN0IHBvc2l0aW9uIGluIHdoaWNoIE9CSiBjb3VsZCBiZSBpbnNlcnRlZAorICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JkZXJpbmcgb2YgdGhpcyB2ZWN0b3IuICBMRVNTVEhBTiBpcyBhCisgICBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgc3RyaWN0bHkgbGVzcworICAgdGhhbiB0aGUgc2Vjb25kLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK3Vuc2lnbmVkCit2ZWM8VCwgQSwgdmxfZW1iZWQ+Ojpsb3dlcl9ib3VuZCAoVCBvYmosIGJvb2wgKCpsZXNzdGhhbikoY29uc3QgVCAmLCBjb25zdCBUICYpKQorICBjb25zdAoreworICB1bnNpZ25lZCBpbnQgbGVuID0gbGVuZ3RoICgpOworICB1bnNpZ25lZCBpbnQgaGFsZiwgbWlkZGxlOworICB1bnNpZ25lZCBpbnQgZmlyc3QgPSAwOworICB3aGlsZSAobGVuID4gMCkKKyAgICB7CisgICAgICBoYWxmID0gbGVuIC8gMjsKKyAgICAgIG1pZGRsZSA9IGZpcnN0OworICAgICAgbWlkZGxlICs9IGhhbGY7CisgICAgICBUIG1pZGRsZV9lbGVtID0gKCp0aGlzKVttaWRkbGVdOworICAgICAgaWYgKGxlc3N0aGFuIChtaWRkbGVfZWxlbSwgb2JqKSkKKwl7CisJICBmaXJzdCA9IG1pZGRsZTsKKwkgICsrZmlyc3Q7CisJICBsZW4gPSBsZW4gLSBoYWxmIC0gMTsKKwl9CisgICAgICBlbHNlCisJbGVuID0gaGFsZjsKKyAgICB9CisgIHJldHVybiBmaXJzdDsKK30KKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gZW1iZWQgYW4gaW5zdGFuY2Ugb2YgYW4KKyAgIGVtYmVkZGFibGUgdmVjIGluc2lkZSBhbm90aGVyIGRhdGEgc3RydWN0dXJlLgorCisgICBVc2UgdGhlc2UgbWV0aG9kcyB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHNpemUgYW5kIGluaXRpYWxpemF0aW9uCisgICBvZiBhIHZlY3RvciBWIG9mIHR5cGUgVCBlbWJlZGRlZCB3aXRoaW4gYW5vdGhlciBzdHJ1Y3R1cmUgKGFzIHRoZQorICAgZmluYWwgbWVtYmVyKToKKworICAgc2l6ZV90IHZlYzxULCBBLCB2bF9lbWJlZD46OmVtYmVkZGVkX3NpemUgKHVuc2lnbmVkIGFsbG9jKTsKKyAgIHZvaWQgdi0+ZW1iZWRkZWRfaW5pdCh1bnNpZ25lZCBhbGxvYywgdW5zaWduZWQgbnVtKTsKKworICAgVGhlc2UgYWxsb3cgdGhlIGNhbGxlciB0byBwZXJmb3JtIHRoZSBtZW1vcnkgYWxsb2NhdGlvbi4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgc2l6ZV90Cit2ZWM8VCwgQSwgdmxfZW1iZWQ+OjplbWJlZGRlZF9zaXplICh1bnNpZ25lZCBhbGxvYykKK3sKKyAgdHlwZWRlZiB2ZWM8VCwgQSwgdmxfZW1iZWQ+IHZlY19lbWJlZGRlZDsKKyAgcmV0dXJuIG9mZnNldG9mICh2ZWNfZW1iZWRkZWQsIHZlY2RhdGFfKSArIGFsbG9jICogc2l6ZW9mIChUKTsKK30KKworCisvKiBJbml0aWFsaXplIHRoZSB2ZWN0b3IgdG8gY29udGFpbiByb29tIGZvciBBTExPQyBlbGVtZW50cyBhbmQKKyAgIE5VTSBhY3RpdmUgZWxlbWVudHMuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9lbWJlZD46OmVtYmVkZGVkX2luaXQgKHVuc2lnbmVkIGFsbG9jLCB1bnNpZ25lZCBudW0pCit7CisgIHZlY3BmeF8uYWxsb2NfID0gYWxsb2M7CisgIHZlY3BmeF8ubnVtXyA9IG51bTsKK30KKworCisvKiBHcm93IHRoZSB2ZWN0b3IgdG8gYSBzcGVjaWZpYyBsZW5ndGguICBMRU4gbXVzdCBiZSBhcyBsb25nIG9yIGxvbmdlciB0aGFuCisgICB0aGUgY3VycmVudCBsZW5ndGguICBUaGUgbmV3IGVsZW1lbnRzIGFyZSB1bmluaXRpYWxpemVkLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWM8VCwgQSwgdmxfZW1iZWQ+OjpxdWlja19ncm93ICh1bnNpZ25lZCBsZW4pCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGxlbmd0aCAoKSA8PSBsZW4gJiYgbGVuIDw9IHZlY3BmeF8uYWxsb2NfKTsKKyAgdmVjcGZ4Xy5udW1fID0gbGVuOworfQorCisKKy8qIEdyb3cgdGhlIHZlY3RvciB0byBhIHNwZWNpZmljIGxlbmd0aC4gIExFTiBtdXN0IGJlIGFzIGxvbmcgb3IgbG9uZ2VyIHRoYW4KKyAgIHRoZSBjdXJyZW50IGxlbmd0aC4gIFRoZSBuZXcgZWxlbWVudHMgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9lbWJlZD46OnF1aWNrX2dyb3dfY2xlYXJlZCAodW5zaWduZWQgbGVuKQoreworICB1bnNpZ25lZCBvbGRsZW4gPSBsZW5ndGggKCk7CisgIHF1aWNrX2dyb3cgKGxlbik7CisgIG1lbXNldCAoJihhZGRyZXNzKClbb2xkbGVuXSksIDAsIHNpemVvZiAoVCkgKiAobGVuIC0gb2xkbGVuKSk7Cit9CisKKworLyogR2FyYmFnZSBjb2xsZWN0aW9uIHN1cHBvcnQgZm9yIHZlYzxULCBBLCB2bF9lbWJlZD4uICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZAorZ3RfZ2djX214ICh2ZWM8VCwgdmFfZ2M+ICp2KQoreworICBleHRlcm4gdm9pZCBndF9nZ2NfbXggKFQgJik7CisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2LT5sZW5ndGggKCk7IGkrKykKKyAgICBndF9nZ2NfbXggKCgqdilbaV0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZAorZ3RfZ2djX214ICh2ZWM8VCwgdmFfZ2NfYXRvbWljLCB2bF9lbWJlZD4gKnYgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgLyogTm90aGluZyB0byBkby4gIFZlY3RvcnMgb2YgYXRvbWljIHR5cGVzIHdydCBHQyBkbyBub3QgbmVlZCB0bworICAgICBiZSB0cmF2ZXJzZWQuICAqLworfQorCisKKy8qIFBDSCBzdXBwb3J0IGZvciB2ZWM8VCwgQSwgdmxfZW1iZWQ+LiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK3ZvaWQKK2d0X3BjaF9ueCAodmVjPFQsIEEsIHZsX2VtYmVkPiAqdikKK3sKKyAgZXh0ZXJuIHZvaWQgZ3RfcGNoX254IChUICYpOworICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi0+bGVuZ3RoICgpOyBpKyspCisgICAgZ3RfcGNoX254ICgoKnYpW2ldKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK3ZvaWQKK2d0X3BjaF9ueCAodmVjPFQgKiwgQSwgdmxfZW1iZWQ+ICp2LCBndF9wb2ludGVyX29wZXJhdG9yIG9wLCB2b2lkICpjb29raWUpCit7CisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2LT5sZW5ndGggKCk7IGkrKykKKyAgICBvcCAoJigoKnYpW2ldKSwgY29va2llKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK3ZvaWQKK2d0X3BjaF9ueCAodmVjPFQsIEEsIHZsX2VtYmVkPiAqdiwgZ3RfcG9pbnRlcl9vcGVyYXRvciBvcCwgdm9pZCAqY29va2llKQoreworICBleHRlcm4gdm9pZCBndF9wY2hfbnggKFQgKiwgZ3RfcG9pbnRlcl9vcGVyYXRvciwgdm9pZCAqKTsKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHYtPmxlbmd0aCAoKTsgaSsrKQorICAgIGd0X3BjaF9ueCAoJigoKnYpW2ldKSwgb3AsIGNvb2tpZSk7Cit9CisKKworLyogU3BhY2UgZWZmaWNpZW50IHZlY3Rvci4gIFRoZXNlIHZlY3RvcnMgY2FuIGdyb3cgZHluYW1pY2FsbHkgYW5kIGFyZQorICAgYWxsb2NhdGVkIHRvZ2V0aGVyIHdpdGggdGhlaXIgY29udHJvbCBkYXRhLiAgVGhleSBhcmUgc3VpdGVkIHRvIGJlCisgICBpbmNsdWRlZCBpbiBkYXRhIHN0cnVjdHVyZXMuICBQcmlvciB0byBpbml0aWFsIGFsbG9jYXRpb24sIHRoZXkKKyAgIG9ubHkgdGFrZSBhIHNpbmdsZSB3b3JkIG9mIHN0b3JhZ2UuCisKKyAgIFRoZXNlIHZlY3RvcnMgYXJlIGltcGxlbWVudGVkIGFzIGEgcG9pbnRlciB0byBhbiBlbWJlZGRhYmxlIHZlY3Rvci4KKyAgIFRoZSBzZW1hbnRpY3MgYWxsb3cgZm9yIHRoaXMgcG9pbnRlciB0byBiZSBOVUxMIHRvIHJlcHJlc2VudCBlbXB0eQorICAgdmVjdG9ycy4gIFRoaXMgd2F5LCBlbXB0eSB2ZWN0b3JzIG9jY3VweSBtaW5pbWFsIHNwYWNlIGluIHRoZQorICAgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlbS4KKworICAgUHJvcGVydGllczoKKworCS0gVGhlIHdob2xlIHZlY3RvciBhbmQgY29udHJvbCBkYXRhIGFyZSBhbGxvY2F0ZWQgaW4gYSBzaW5nbGUKKwkgIGNvbnRpZ3VvdXMgYmxvY2suCisgIAktIFRoZSB3aG9sZSB2ZWN0b3IgbWF5IGJlIHJlLWFsbG9jYXRlZC4KKyAgCS0gVmVjdG9yIGRhdGEgbWF5IGdyb3cgYW5kIHNocmluay4KKyAgCS0gQWNjZXNzIGFuZCBtYW5pcHVsYXRpb24gcmVxdWlyZXMgYSBwb2ludGVyIHRlc3QgYW5kCisJICBpbmRpcmVjdGlvbi4KKwktIEl0IHJlcXVpcmVzIDEgd29yZCBvZiBzdG9yYWdlIChwcmlvciB0byB2ZWN0b3IgYWxsb2NhdGlvbikuCisKKworICAgTGltaXRhdGlvbnM6CisKKyAgIFRoZXNlIHZlY3RvcnMgbXVzdCBiZSBQT0RzIGJlY2F1c2UgdGhleSBhcmUgc3RvcmVkIGluIHVuaW9ucy4KKyAgIChodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BsYWluX29sZF9kYXRhX3N0cnVjdHVyZXMpLgorICAgQXMgbG9uZyBhcyB3ZSB1c2UgQysrMDMsIHdlIGNhbm5vdCBoYXZlIGNvbnN0cnVjdG9ycyBub3IKKyAgIGRlc3RydWN0b3JzIGluIGNsYXNzZXMgdGhhdCBhcmUgc3RvcmVkIGluIHVuaW9ucy4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitzdHJ1Y3QgdmVjPFQsIEEsIHZsX3B0cj4KK3sKK3B1YmxpYzoKKyAgLyogTWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmb3IgdGhlIGVtYmVkZGVkIHZlY3Rvci4KKyAgICAgTmVlZGVkIGJlY2F1c2Ugd2UgY2Fubm90IGhhdmUgcHJvcGVyIGN0b3JzL2R0b3JzIGRlZmluZWQuICAqLworICB2b2lkIGNyZWF0ZSAodW5zaWduZWQgbmVsZW1zIENYWF9NRU1fU1RBVF9JTkZPKTsKKyAgdm9pZCByZWxlYXNlICh2b2lkKTsKKworICAvKiBWZWN0b3Igb3BlcmF0aW9ucy4gICovCisgIGJvb2wgZXhpc3RzICh2b2lkKSBjb25zdAorICB7IHJldHVybiB2ZWNfICE9IE5VTEw7IH0KKworICBib29sIGlzX2VtcHR5ICh2b2lkKSBjb25zdAorICB7IHJldHVybiB2ZWNfID8gdmVjXy0+aXNfZW1wdHkoKSA6IHRydWU7IH0KKworICB1bnNpZ25lZCBsZW5ndGggKHZvaWQpIGNvbnN0CisgIHsgcmV0dXJuIHZlY18gPyB2ZWNfLT5sZW5ndGgoKSA6IDA7IH0KKworICBUICphZGRyZXNzICh2b2lkKQorICB7IHJldHVybiB2ZWNfID8gdmVjXy0+dmVjZGF0YV8gOiBOVUxMOyB9CisKKyAgY29uc3QgVCAqYWRkcmVzcyAodm9pZCkgY29uc3QKKyAgeyByZXR1cm4gdmVjXyA/IHZlY18tPnZlY2RhdGFfIDogTlVMTDsgfQorCisgIGNvbnN0IFQgJm9wZXJhdG9yW10gKHVuc2lnbmVkIGl4KSBjb25zdAorICB7IHJldHVybiAoKnZlY18pW2l4XTsgfQorCisgIGJvb2wgb3BlcmF0b3IhPShjb25zdCB2ZWMgJm90aGVyKSBjb25zdAorICB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB2ZWMgJm90aGVyKSBjb25zdAorICB7IHJldHVybiBhZGRyZXNzKCkgPT0gb3RoZXIuYWRkcmVzcygpOyB9CisKKyAgVCAmb3BlcmF0b3JbXSAodW5zaWduZWQgaXgpCisgIHsgcmV0dXJuICgqdmVjXylbaXhdOyB9CisKKyAgVCAmbGFzdCAodm9pZCkKKyAgeyByZXR1cm4gdmVjXy0+bGFzdCgpOyB9CisKKyAgYm9vbCBzcGFjZSAoaW50IG5lbGVtcykgY29uc3QKKyAgeyByZXR1cm4gdmVjXyA/IHZlY18tPnNwYWNlIChuZWxlbXMpIDogbmVsZW1zID09IDA7IH0KKworICBib29sIGl0ZXJhdGUgKHVuc2lnbmVkIGl4LCBUICpwKSBjb25zdDsKKyAgYm9vbCBpdGVyYXRlICh1bnNpZ25lZCBpeCwgVCAqKnApIGNvbnN0OworICB2ZWMgY29weSAoQUxPTkVfQ1hYX01FTV9TVEFUX0lORk8pIGNvbnN0OworICBib29sIHJlc2VydmUgKHVuc2lnbmVkLCBib29sID0gZmFsc2UgQ1hYX01FTV9TVEFUX0lORk8pOworICBib29sIHJlc2VydmVfZXhhY3QgKHVuc2lnbmVkIENYWF9NRU1fU1RBVF9JTkZPKTsKKyAgdm9pZCBzcGxpY2UgKHZlYyAmKTsKKyAgdm9pZCBzYWZlX3NwbGljZSAodmVjICYgQ1hYX01FTV9TVEFUX0lORk8pOworICBUICpxdWlja19wdXNoIChjb25zdCBUICYpOworICBUICpzYWZlX3B1c2ggKGNvbnN0IFQgJkNYWF9NRU1fU1RBVF9JTkZPKTsKKyAgVCAmcG9wICh2b2lkKTsKKyAgdm9pZCB0cnVuY2F0ZSAodW5zaWduZWQpOworICB2b2lkIHNhZmVfZ3JvdyAodW5zaWduZWQgQ1hYX01FTV9TVEFUX0lORk8pOworICB2b2lkIHNhZmVfZ3Jvd19jbGVhcmVkICh1bnNpZ25lZCBDWFhfTUVNX1NUQVRfSU5GTyk7CisgIHZvaWQgcXVpY2tfZ3JvdyAodW5zaWduZWQpOworICB2b2lkIHF1aWNrX2dyb3dfY2xlYXJlZCAodW5zaWduZWQpOworICB2b2lkIHF1aWNrX2luc2VydCAodW5zaWduZWQsIGNvbnN0IFQgJik7CisgIHZvaWQgc2FmZV9pbnNlcnQgKHVuc2lnbmVkLCBjb25zdCBUICYgQ1hYX01FTV9TVEFUX0lORk8pOworICB2b2lkIG9yZGVyZWRfcmVtb3ZlICh1bnNpZ25lZCk7CisgIHZvaWQgdW5vcmRlcmVkX3JlbW92ZSAodW5zaWduZWQpOworICB2b2lkIGJsb2NrX3JlbW92ZSAodW5zaWduZWQsIHVuc2lnbmVkKTsKKyAgdm9pZCBxc29ydCAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKyAgdW5zaWduZWQgbG93ZXJfYm91bmQgKFQsIGJvb2wgKCopKGNvbnN0IFQgJiwgY29uc3QgVCAmKSkgY29uc3Q7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVDE+CisgIGZyaWVuZCB2b2lkIHZhX3N0YWNrOjphbGxvYyh2ZWM8VDEsIHZhX3N0YWNrLCB2bF9wdHI+JiwgdW5zaWduZWQsCisJCQkgICAgICB2ZWM8VDEsIHZhX3N0YWNrLCB2bF9lbWJlZD4gKik7CisKKyAgLyogRklYTUUgLSBUaGlzIGZpZWxkIHNob3VsZCBiZSBwcml2YXRlLCBidXQgd2UgbmVlZCB0byBjYXRlciB0bworCSAgICAgY29tcGlsZXJzIHRoYXQgaGF2ZSBzdHJpY3RlciBub3Rpb25zIG9mIFBPRG5lc3MgZm9yIHR5cGVzLiAgKi8KKyAgdmVjPFQsIEEsIHZsX2VtYmVkPiAqdmVjXzsKK307CisKKworLyogRW1wdHkgc3BlY2lhbGl6YXRpb24gZm9yIEdDIGFsbG9jYXRpb24uICBUaGlzIHdpbGwgcHJldmVudCBHQworICAgdmVjdG9ycyBmcm9tIHVzaW5nIHRoZSB2bF9wdHIgbGF5b3V0LiAgRklYTUU6IFRoaXMgaXMgbmVlZGVkIHRvCisgICBjaXJjdW12ZW50IGxpbWl0YXRpb25zIGluIHRoZSBHVFkgbWFjaGluZXJ5LiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCB2ZWM8VCwgdmFfZ2MsIHZsX3B0cj4KK3sKK307CisKKworLyogQWxsb2NhdGUgaGVhcCBtZW1vcnkgZm9yIHBvaW50ZXIgViBhbmQgY3JlYXRlIHRoZSBpbnRlcm5hbCB2ZWN0b3IKKyAgIHdpdGggc3BhY2UgZm9yIE5FTEVNUyBlbGVtZW50cy4gIElmIE5FTEVNUyBpcyAwLCB0aGUgaW50ZXJuYWwKKyAgIHZlY3RvciBpcyBpbml0aWFsaXplZCB0byBlbXB0eS4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZAordmVjX2FsbG9jICh2ZWM8VD4gKiZ2LCB1bnNpZ25lZCBuZWxlbXMgQ1hYX01FTV9TVEFUX0lORk8pCit7CisgIHYgPSBuZXcgdmVjPFQ+OworICB2LT5jcmVhdGUgKG5lbGVtcyBQQVNTX01FTV9TVEFUKTsKK30KKworCisvKiBDb25kaXRpb25hbGx5IGFsbG9jYXRlIGhlYXAgbWVtb3J5IGZvciBWRUMgYW5kIGl0cyBpbnRlcm5hbCB2ZWN0b3IuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQKK3ZlY19jaGVja19hbGxvYyAodmVjPFQsIHZhX2hlYXA+IComdmVjLCB1bnNpZ25lZCBuZWxlbXMgQ1hYX01FTV9TVEFUX0lORk8pCit7CisgIGlmICghdmVjKQorICAgIHZlY19hbGxvYyAodmVjLCBuZWxlbXMgUEFTU19NRU1fU1RBVCk7Cit9CisKKworLyogRnJlZSB0aGUgaGVhcCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHZlY3RvciBWIGFuZCBzZXQgaXQgdG8gTlVMTC4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZAordmVjX2ZyZWUgKHZlYzxUPiAqJnYpCit7CisgIGlmICh2ID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIHYtPnJlbGVhc2UgKCk7CisgIGRlbGV0ZSB2OworICB2ID0gTlVMTDsKK30KKworCisvKiBBbGxvY2F0ZSBhIG5ldyBzdGFjayB2ZWN0b3Igd2l0aCBzcGFjZSBmb3IgZXhhY3RseSBORUxFTVMgb2JqZWN0cy4KKyAgIElmIE5FTEVNUyBpcyB6ZXJvLCBOTyB2ZWN0b3IgaXMgY3JlYXRlZC4KKworICAgRm9yIHRoZSBzdGFjayBhbGxvY2F0b3IsIG5vIG1lbW9yeSBpcyByZWFsbHkgYWxsb2NhdGVkLiAgVGhlIHZlY3RvcgorICAgaXMgaW5pdGlhbGl6ZWQgdG8gYmUgYXQgYWRkcmVzcyBTUEFDRSBhbmQgY29udGFpbiBORUxFTVMgc2xvdHMuCisgICBNZW1vcnkgYWxsb2NhdGlvbiBhY3R1YWxseSBvY2N1cnMgaW4gdGhlIGV4cGFuc2lvbiBvZiBWRUNfYWxsb2MuCisKKyAgIFVzYWdlIG5vdGVzOgorCisgICAqIFRoaXMgZG9lcyBub3QgYWxsb2NhdGUgYW4gaW5zdGFuY2Ugb2YgdmVjPFQsIEE+LiAgSXQgYWxsb2NhdGVzIHRoZQorICAgICBhY3R1YWwgdmVjdG9yIG9mIGVsZW1lbnRzIChpLmUuLCB2ZWM8VCwgQSwgdmxfZW1iZWQ+KSBpbnNpZGUgYQorICAgICB2ZWM8VCwgQT4gaW5zdGFuY2UuCisKKyAgICogVGhpcyBhbGxvY2F0b3IgbXVzdCBhbHdheXMgYmUgYSBtYWNybzoKKworICAgICBXZSBzdXBwb3J0IGEgdmVjdG9yIHdoaWNoIHN0YXJ0cyBvdXQgd2l0aCBzcGFjZSBvbiB0aGUgc3RhY2sgYW5kCisgICAgIHN3aXRjaGVzIHRvIGhlYXAgc3BhY2Ugd2hlbiBmb3JjZWQgdG8gcmVhbGxvY2F0ZS4gIFRoaXMgd29ya3MgYQorICAgICBsaXR0bGUgZGlmZmVyZW50bHkuICBJbiB0aGUgY2FzZSBvZiBzdGFjayB2ZWN0b3JzLCB2ZWNfYWxsb2Mgd2lsbAorICAgICBleHBhbmQgdG8gYSBjYWxsIHRvIHZlY19hbGxvY18xIHRoYXQgY2FsbHMgWEFMTE9DQVZBUiB0byByZXF1ZXN0CisgICAgIHRoZSBpbml0aWFsIGFsbG9jYXRpb24uICBUaGlzIHVzZXMgYWxsb2NhIHRvIGdldCB0aGUgaW5pdGlhbAorICAgICBzcGFjZS4gU2luY2UgYWxsb2NhIGNhbiBub3QgYmUgdXNlZnVsbHkgY2FsbGVkIGluIGFuIGlubGluZQorICAgICBmdW5jdGlvbiwgdmVjX2FsbG9jIG11c3QgYWx3YXlzIGJlIGEgbWFjcm8uCisKKyAgICAgSW1wb3J0YW50IGxpbWl0YXRpb25zIG9mIHN0YWNrIHZlY3RvcnM6CisKKyAgICAgLSBPbmx5IHRoZSBpbml0aWFsIGFsbG9jYXRpb24gd2lsbCBiZSBtYWRlIHVzaW5nIGFsbG9jYSwgc28gcGFzcworICAgICAgIGEgcmVhc29uYWJsZSBlc3RpbWF0ZSB0aGF0IGRvZXNuJ3QgdXNlIHRvbyBtdWNoIHN0YWNrIHNwYWNlOworICAgICAgIGRvbid0IHBhc3MgemVyby4KKworICAgICAtIERvbid0IHJldHVybiBhIHN0YWNrLWFsbG9jYXRlZCB2ZWN0b3IgZnJvbSB0aGUgZnVuY3Rpb24gd2hpY2gKKyAgICAgICBhbGxvY2F0ZWQgaXQuICAqLworCisjZGVmaW5lIHZlY19zdGFja19hbGxvYyhULFYsTikJCQkJCQlcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgdHlwZWRlZiB2ZWM8VCwgdmFfc3RhY2ssIHZsX2VtYmVkPiBzdGFja3Y7CQkJCVwKKyAgICB2YV9zdGFjazo6YWxsb2MgKFYsIE4sIFhBTExPQ0FWQVIgKHN0YWNrdiwgc3RhY2t2OjplbWJlZGRlZF9zaXplIChOKSkpO1wKKyAgfSB3aGlsZSAoMCkKKworCisvKiBSZXR1cm4gaXRlcmF0aW9uIGNvbmRpdGlvbiBhbmQgdXBkYXRlIFBUUiB0byBwb2ludCB0byB0aGUgSVgndGgKKyAgIGVsZW1lbnQgb2YgdGhpcyB2ZWN0b3IuICBVc2UgdGhpcyB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGEKKyAgIHZlY3RvciBhcyBmb2xsb3dzLAorCisgICAgIGZvciAoaXggPSAwOyB2Lml0ZXJhdGUoaXgsICZwdHIpOyBpeCsrKQorICAgICAgIGNvbnRpbnVlOyAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBib29sCit2ZWM8VCwgQSwgdmxfcHRyPjo6aXRlcmF0ZSAodW5zaWduZWQgaXgsIFQgKnB0cikgY29uc3QKK3sKKyAgaWYgKHZlY18pCisgICAgcmV0dXJuIHZlY18tPml0ZXJhdGUgKGl4LCBwdHIpOworICBlbHNlCisgICAgeworICAgICAgKnB0ciA9IDA7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisKKy8qIFJldHVybiBpdGVyYXRpb24gY29uZGl0aW9uIGFuZCB1cGRhdGUgKlBUUiB0byBwb2ludCB0byB0aGUKKyAgIElYJ3RoIGVsZW1lbnQgb2YgdGhpcyB2ZWN0b3IuICBVc2UgdGhpcyB0byBpdGVyYXRlIG92ZXIgdGhlCisgICBlbGVtZW50cyBvZiBhIHZlY3RvciBhcyBmb2xsb3dzLAorCisgICAgIGZvciAoaXggPSAwOyB2LT5pdGVyYXRlKGl4LCAmcHRyKTsgaXgrKykKKyAgICAgICBjb250aW51ZTsKKworICAgVGhpcyB2YXJpYW50IGlzIGZvciB2ZWN0b3JzIG9mIG9iamVjdHMuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIGJvb2wKK3ZlYzxULCBBLCB2bF9wdHI+OjppdGVyYXRlICh1bnNpZ25lZCBpeCwgVCAqKnB0cikgY29uc3QKK3sKKyAgaWYgKHZlY18pCisgICAgcmV0dXJuIHZlY18tPml0ZXJhdGUgKGl4LCBwdHIpOworICBlbHNlCisgICAgeworICAgICAgKnB0ciA9IDA7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisKKy8qIENvbnZlbmllbmNlIG1hY3JvIGZvciBmb3J3YXJkIGl0ZXJhdGlvbi4gICovCisjZGVmaW5lIEZPUl9FQUNIX1ZFQ19FTFQoViwgSSwgUCkJCQlcCisgIGZvciAoSSA9IDA7IChWKS5pdGVyYXRlICgoSSksICYoUCkpOyArKyhJKSkKKworI2RlZmluZSBGT1JfRUFDSF9WRUNfU0FGRV9FTFQoViwgSSwgUCkJCQlcCisgIGZvciAoSSA9IDA7IHZlY19zYWZlX2l0ZXJhdGUgKChWKSwgKEkpLCAmKFApKTsgKysoSSkpCisKKy8qIExpa2V3aXNlLCBidXQgc3RhcnQgZnJvbSBGUk9NIHJhdGhlciB0aGFuIDAuICAqLworI2RlZmluZSBGT1JfRUFDSF9WRUNfRUxUX0ZST00oViwgSSwgUCwgRlJPTSkJCVwKKyAgZm9yIChJID0gKEZST00pOyAoVikuaXRlcmF0ZSAoKEkpLCAmKFApKTsgKysoSSkpCisKKy8qIENvbnZlbmllbmNlIG1hY3JvIGZvciByZXZlcnNlIGl0ZXJhdGlvbi4gICovCisjZGVmaW5lIEZPUl9FQUNIX1ZFQ19FTFRfUkVWRVJTRShWLCBJLCBQKQkJXAorICBmb3IgKEkgPSAoVikubGVuZ3RoICgpIC0gMTsJCQkJXAorICAgICAgIChWKS5pdGVyYXRlICgoSSksICYoUCkpOwkJCQlcCisgICAgICAgKEkpLS0pCisKKyNkZWZpbmUgRk9SX0VBQ0hfVkVDX1NBRkVfRUxUX1JFVkVSU0UoViwgSSwgUCkJCVwKKyAgZm9yIChJID0gdmVjX3NhZmVfbGVuZ3RoIChWKSAtIDE7CQkJXAorICAgICAgIHZlY19zYWZlX2l0ZXJhdGUgKChWKSwgKEkpLCAmKFApKTsJXAorICAgICAgIChJKS0tKQorCisKKy8qIFJldHVybiBhIGNvcHkgb2YgdGhpcyB2ZWN0b3IuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZlYzxULCBBLCB2bF9wdHI+Cit2ZWM8VCwgQSwgdmxfcHRyPjo6Y29weSAoQUxPTkVfTUVNX1NUQVRfREVDTCkgY29uc3QKK3sKKyAgdmVjPFQsIEEsIHZsX3B0cj4gbmV3X3ZlYyA9IHZOVUxMOworICBpZiAobGVuZ3RoICgpKQorICAgIG5ld192ZWMudmVjXyA9IHZlY18tPmNvcHkgKCk7CisgIHJldHVybiBuZXdfdmVjOworfQorCisKKy8qIEVuc3VyZSB0aGF0IHRoZSB2ZWN0b3IgaGFzIGF0IGxlYXN0IFJFU0VSVkUgc2xvdHMgYXZhaWxhYmxlIChpZgorICAgRVhBQ1QgaXMgZmFsc2UpLCBvciBleGFjdGx5IFJFU0VSVkUgc2xvdHMgYXZhaWxhYmxlIChpZiBFWEFDVCBpcworICAgdHJ1ZSkuCisKKyAgIFRoaXMgbWF5IGNyZWF0ZSBhZGRpdGlvbmFsIGhlYWRyb29tIGlmIEVYQUNUIGlzIGZhbHNlLgorCisgICBOb3RlIHRoYXQgdGhpcyBjYW4gY2F1c2UgdGhlIGVtYmVkZGVkIHZlY3RvciB0byBiZSByZWFsbG9jYXRlZC4KKyAgIFJldHVybnMgdHJ1ZSBpZmYgcmVhbGxvY2F0aW9uIGFjdHVhbGx5IG9jY3VycmVkLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBib29sCit2ZWM8VCwgQSwgdmxfcHRyPjo6cmVzZXJ2ZSAodW5zaWduZWQgbmVsZW1zLCBib29sIGV4YWN0IE1FTV9TVEFUX0RFQ0wpCit7CisgIGJvb2wgZXh0ZW5kID0gbmVsZW1zID8gIXNwYWNlIChuZWxlbXMpIDogZmFsc2U7CisgIGlmIChleHRlbmQpCisgICAgQTo6cmVzZXJ2ZSAodmVjXywgbmVsZW1zLCBleGFjdCBQQVNTX01FTV9TVEFUKTsKKyAgcmV0dXJuIGV4dGVuZDsKK30KKworCisvKiBFbnN1cmUgdGhhdCB0aGlzIHZlY3RvciBoYXMgZXhhY3RseSBORUxFTVMgc2xvdHMgYXZhaWxhYmxlLiAgVGhpcworICAgd2lsbCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgaGVhZHJvb20uICBOb3RlIHRoaXMgY2FuIGNhdXNlIHRoZQorICAgZW1iZWRkZWQgdmVjdG9yIHRvIGJlIHJlYWxsb2NhdGVkLiAgUmV0dXJucyB0cnVlIGlmZiByZWFsbG9jYXRpb24KKyAgIGFjdHVhbGx5IG9jY3VycmVkLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBib29sCit2ZWM8VCwgQSwgdmxfcHRyPjo6cmVzZXJ2ZV9leGFjdCAodW5zaWduZWQgbmVsZW1zIE1FTV9TVEFUX0RFQ0wpCit7CisgIHJldHVybiByZXNlcnZlIChuZWxlbXMsIHRydWUgUEFTU19NRU1fU1RBVCk7Cit9CisKKworLyogQ3JlYXRlIHRoZSBpbnRlcm5hbCB2ZWN0b3IgYW5kIHJlc2VydmUgTkVMRU1TIGZvciBpdC4gIFRoaXMgaXMKKyAgIGV4YWN0bHkgbGlrZSB2ZWM6OnJlc2VydmUsIGJ1dCB0aGUgaW50ZXJuYWwgdmVjdG9yIGlzCisgICB1bmNvbmRpdGlvbmFsbHkgYWxsb2NhdGVkIGZyb20gc2NyYXRjaC4gIFRoZSBvbGQgb25lLCBpZiBpdAorICAgZXhpc3RlZCwgaXMgbG9zdC4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX3B0cj46OmNyZWF0ZSAodW5zaWduZWQgbmVsZW1zIE1FTV9TVEFUX0RFQ0wpCit7CisgIHZlY18gPSBOVUxMOworICBpZiAobmVsZW1zID4gMCkKKyAgICByZXNlcnZlX2V4YWN0IChuZWxlbXMgUEFTU19NRU1fU1RBVCk7Cit9CisKKworLyogRnJlZSB0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IHRoZSBlbWJlZGRlZCB2ZWN0b3IuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9wdHI+OjpyZWxlYXNlICh2b2lkKQoreworICBpZiAodmVjXykKKyAgICBBOjpyZWxlYXNlICh2ZWNfKTsKK30KKworCisvKiBDb3B5IHRoZSBlbGVtZW50cyBmcm9tIFNSQyB0byB0aGUgZW5kIG9mIHRoaXMgdmVjdG9yIGFzIGlmIGJ5IG1lbWNweS4KKyAgIFNSQyBhbmQgdGhpcyB2ZWN0b3IgbXVzdCBiZSBhbGxvY2F0ZWQgd2l0aCB0aGUgc2FtZSBtZW1vcnkKKyAgIGFsbG9jYXRpb24gbWVjaGFuaXNtLiBUaGlzIHZlY3RvciBpcyBhc3N1bWVkIHRvIGhhdmUgc3VmZmljaWVudAorICAgaGVhZHJvb20gYXZhaWxhYmxlLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWM8VCwgQSwgdmxfcHRyPjo6c3BsaWNlICh2ZWM8VCwgQSwgdmxfcHRyPiAmc3JjKQoreworICBpZiAoc3JjLnZlY18pCisgICAgdmVjXy0+c3BsaWNlICgqKHNyYy52ZWNfKSk7Cit9CisKKworLyogQ29weSB0aGUgZWxlbWVudHMgaW4gU1JDIHRvIHRoZSBlbmQgb2YgdGhpcyB2ZWN0b3IgYXMgaWYgYnkgbWVtY3B5LgorICAgU1JDIGFuZCB0aGlzIHZlY3RvciBtdXN0IGJlIGFsbG9jYXRlZCB3aXRoIHRoZSBzYW1lIG1lY2hhbmlzbS4KKyAgIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggaGVhZHJvb20gaW4gdGhpcyB2ZWN0b3IsIGl0IHdpbGwgYmUgcmVhbGxvY2F0ZWQKKyAgIGFzIG5lZWRlZC4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX3B0cj46OnNhZmVfc3BsaWNlICh2ZWM8VCwgQSwgdmxfcHRyPiAmc3JjIE1FTV9TVEFUX0RFQ0wpCit7CisgIGlmIChzcmMubGVuZ3RoKCkpCisgICAgeworICAgICAgcmVzZXJ2ZV9leGFjdCAoc3JjLmxlbmd0aCgpKTsKKyAgICAgIHNwbGljZSAoc3JjKTsKKyAgICB9Cit9CisKKworLyogUHVzaCBPQkogKGEgbmV3IGVsZW1lbnQpIG9udG8gdGhlIGVuZCBvZiB0aGUgdmVjdG9yLiAgVGhlcmUgbXVzdCBiZQorICAgc3VmZmljaWVudCBzcGFjZSBpbiB0aGUgdmVjdG9yLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc2xvdAorICAgd2hlcmUgT0JKIHdhcyBpbnNlcnRlZC4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgVCAqCit2ZWM8VCwgQSwgdmxfcHRyPjo6cXVpY2tfcHVzaCAoY29uc3QgVCAmb2JqKQoreworICByZXR1cm4gdmVjXy0+cXVpY2tfcHVzaCAob2JqKTsKK30KKworCisvKiBQdXNoIGEgbmV3IGVsZW1lbnQgT0JKIG9udG8gdGhlIGVuZCBvZiB0aGlzIHZlY3Rvci4gIFJlYWxsb2NhdGVzCisgICB0aGUgZW1iZWRkZWQgdmVjdG9yLCBpZiBuZWVkZWQuICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzbG90IHdoZXJlCisgICBPQkogd2FzIGluc2VydGVkLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBUICoKK3ZlYzxULCBBLCB2bF9wdHI+OjpzYWZlX3B1c2ggKGNvbnN0IFQgJm9iaiBNRU1fU1RBVF9ERUNMKQoreworICByZXNlcnZlICgxLCBmYWxzZSBQQVNTX01FTV9TVEFUKTsKKyAgcmV0dXJuIHF1aWNrX3B1c2ggKG9iaik7Cit9CisKKworLyogUG9wIGFuZCByZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBvZmYgdGhlIGVuZCBvZiB0aGUgdmVjdG9yLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSBUICYKK3ZlYzxULCBBLCB2bF9wdHI+Ojpwb3AgKHZvaWQpCit7CisgIHJldHVybiB2ZWNfLT5wb3AgKCk7Cit9CisKKworLyogU2V0IHRoZSBsZW5ndGggb2YgdGhlIHZlY3RvciB0byBMRU4uICBUaGUgbmV3IGxlbmd0aCBtdXN0IGJlIGxlc3MKKyAgIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbGVuZ3RoLiAgVGhpcyBpcyBhbiBPKDEpIG9wZXJhdGlvbi4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX3B0cj46OnRydW5jYXRlICh1bnNpZ25lZCBzaXplKQoreworICBpZiAodmVjXykKKyAgICB2ZWNfLT50cnVuY2F0ZSAoc2l6ZSk7CisgIGVsc2UKKyAgICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChzaXplID09IDApOworfQorCisKKy8qIEdyb3cgdGhlIHZlY3RvciB0byBhIHNwZWNpZmljIGxlbmd0aC4gIExFTiBtdXN0IGJlIGFzIGxvbmcgb3IKKyAgIGxvbmdlciB0aGFuIHRoZSBjdXJyZW50IGxlbmd0aC4gIFRoZSBuZXcgZWxlbWVudHMgYXJlCisgICB1bmluaXRpYWxpemVkLiAgUmVhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgdmVjdG9yLCBpZiBuZWVkZWQuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9wdHI+OjpzYWZlX2dyb3cgKHVuc2lnbmVkIGxlbiBNRU1fU1RBVF9ERUNMKQoreworICB1bnNpZ25lZCBvbGRsZW4gPSBsZW5ndGggKCk7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKG9sZGxlbiA8PSBsZW4pOworICByZXNlcnZlX2V4YWN0IChsZW4gLSBvbGRsZW4gUEFTU19NRU1fU1RBVCk7CisgIHZlY18tPnF1aWNrX2dyb3cgKGxlbik7Cit9CisKKworLyogR3JvdyB0aGUgZW1iZWRkZWQgdmVjdG9yIHRvIGEgc3BlY2lmaWMgbGVuZ3RoLiAgTEVOIG11c3QgYmUgYXMKKyAgIGxvbmcgb3IgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQgbGVuZ3RoLiAgVGhlIG5ldyBlbGVtZW50cyBhcmUKKyAgIGluaXRpYWxpemVkIHRvIHplcm8uICBSZWFsbG9jYXRlIHRoZSBpbnRlcm5hbCB2ZWN0b3IsIGlmIG5lZWRlZC4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX3B0cj46OnNhZmVfZ3Jvd19jbGVhcmVkICh1bnNpZ25lZCBsZW4gTUVNX1NUQVRfREVDTCkKK3sKKyAgdW5zaWduZWQgb2xkbGVuID0gbGVuZ3RoICgpOworICBzYWZlX2dyb3cgKGxlbiBQQVNTX01FTV9TVEFUKTsKKyAgbWVtc2V0ICgmKGFkZHJlc3MoKVtvbGRsZW5dKSwgMCwgc2l6ZW9mIChUKSAqIChsZW4gLSBvbGRsZW4pKTsKK30KKworCisvKiBTYW1lIGFzIHZlYzo6c2FmZV9ncm93IGJ1dCB3aXRob3V0IHJlYWxsb2NhdGlvbiBvZiB0aGUgaW50ZXJuYWwgdmVjdG9yLgorICAgSWYgdGhlIHZlY3RvciBjYW5ub3QgYmUgZXh0ZW5kZWQsIGEgcnVudGltZSBhc3NlcnRpb24gd2lsbCBiZSB0cmlnZ2VyZWQuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9wdHI+OjpxdWlja19ncm93ICh1bnNpZ25lZCBsZW4pCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKHZlY18pOworICB2ZWNfLT5xdWlja19ncm93IChsZW4pOworfQorCisKKy8qIFNhbWUgYXMgdmVjOjpxdWlja19ncm93X2NsZWFyZWQgYnV0IHdpdGhvdXQgcmVhbGxvY2F0aW9uIG9mIHRoZQorICAgaW50ZXJuYWwgdmVjdG9yLiBJZiB0aGUgdmVjdG9yIGNhbm5vdCBiZSBleHRlbmRlZCwgYSBydW50aW1lCisgICBhc3NlcnRpb24gd2lsbCBiZSB0cmlnZ2VyZWQuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9wdHI+OjpxdWlja19ncm93X2NsZWFyZWQgKHVuc2lnbmVkIGxlbikKK3sKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAodmVjXyk7CisgIHZlY18tPnF1aWNrX2dyb3dfY2xlYXJlZCAobGVuKTsKK30KKworCisvKiBJbnNlcnQgYW4gZWxlbWVudCwgT0JKLCBhdCB0aGUgSVh0aCBwb3NpdGlvbiBvZiB0aGlzIHZlY3Rvci4gIFRoZXJlCisgICBtdXN0IGJlIHN1ZmZpY2llbnQgc3BhY2UuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9wdHI+OjpxdWlja19pbnNlcnQgKHVuc2lnbmVkIGl4LCBjb25zdCBUICZvYmopCit7CisgIHZlY18tPnF1aWNrX2luc2VydCAoaXgsIG9iaik7Cit9CisKKworLyogSW5zZXJ0IGFuIGVsZW1lbnQsIE9CSiwgYXQgdGhlIElYdGggcG9zaXRpb24gb2YgdGhlIHZlY3Rvci4KKyAgIFJlYWxsb2NhdGUgdGhlIGVtYmVkZGVkIHZlY3RvciwgaWYgbmVjZXNzYXJ5LiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWM8VCwgQSwgdmxfcHRyPjo6c2FmZV9pbnNlcnQgKHVuc2lnbmVkIGl4LCBjb25zdCBUICZvYmogTUVNX1NUQVRfREVDTCkKK3sKKyAgcmVzZXJ2ZSAoMSwgZmFsc2UgUEFTU19NRU1fU1RBVCk7CisgIHF1aWNrX2luc2VydCAoaXgsIG9iaik7Cit9CisKKworLyogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgSVh0aCBwb3NpdGlvbiBvZiB0aGlzIHZlY3Rvci4gIE9yZGVyaW5nIG9mCisgICByZW1haW5pbmcgZWxlbWVudHMgaXMgcHJlc2VydmVkLiAgVGhpcyBpcyBhbiBPKE4pIG9wZXJhdGlvbiBkdWUgdG8KKyAgIGEgbWVtbW92ZS4gICovCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+CitpbmxpbmUgdm9pZAordmVjPFQsIEEsIHZsX3B0cj46Om9yZGVyZWRfcmVtb3ZlICh1bnNpZ25lZCBpeCkKK3sKKyAgdmVjXy0+b3JkZXJlZF9yZW1vdmUgKGl4KTsKK30KKworCisvKiBSZW1vdmUgYW4gZWxlbWVudCBmcm9tIHRoZSBJWHRoIHBvc2l0aW9uIG9mIHRoaXMgdmVjdG9yLiAgT3JkZXJpbmcKKyAgIG9mIHJlbWFpbmluZyBlbGVtZW50cyBpcyBkZXN0cm95ZWQuICBUaGlzIGlzIGFuIE8oMSkgb3BlcmF0aW9uLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWM8VCwgQSwgdmxfcHRyPjo6dW5vcmRlcmVkX3JlbW92ZSAodW5zaWduZWQgaXgpCit7CisgIHZlY18tPnVub3JkZXJlZF9yZW1vdmUgKGl4KTsKK30KKworCisvKiBSZW1vdmUgTEVOIGVsZW1lbnRzIHN0YXJ0aW5nIGF0IHRoZSBJWHRoLiAgT3JkZXJpbmcgaXMgcmV0YWluZWQuCisgICBUaGlzIGlzIGFuIE8oTikgb3BlcmF0aW9uIGR1ZSB0byBtZW1tb3ZlLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB2b2lkCit2ZWM8VCwgQSwgdmxfcHRyPjo6YmxvY2tfcmVtb3ZlICh1bnNpZ25lZCBpeCwgdW5zaWduZWQgbGVuKQoreworICB2ZWNfLT5ibG9ja19yZW1vdmUgKGl4LCBsZW4pOworfQorCisKKy8qIFNvcnQgdGhlIGNvbnRlbnRzIG9mIHRoaXMgdmVjdG9yIHdpdGggcXNvcnQuICBDTVAgaXMgdGhlIGNvbXBhcmlzb24KKyAgIGZ1bmN0aW9uIHRvIHBhc3MgdG8gcXNvcnQuICAqLworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPgoraW5saW5lIHZvaWQKK3ZlYzxULCBBLCB2bF9wdHI+Ojpxc29ydCAoaW50ICgqY21wKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworICBpZiAodmVjXykKKyAgICB2ZWNfLT5xc29ydCAoY21wKTsKK30KKworCisvKiBGaW5kIGFuZCByZXR1cm4gdGhlIGZpcnN0IHBvc2l0aW9uIGluIHdoaWNoIE9CSiBjb3VsZCBiZSBpbnNlcnRlZAorICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JkZXJpbmcgb2YgdGhpcyB2ZWN0b3IuICBMRVNTVEhBTiBpcyBhCisgICBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgc3RyaWN0bHkgbGVzcworICAgdGhhbiB0aGUgc2Vjb25kLiAgKi8KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4KK2lubGluZSB1bnNpZ25lZAordmVjPFQsIEEsIHZsX3B0cj46Omxvd2VyX2JvdW5kIChUIG9iaiwgYm9vbCAoKmxlc3N0aGFuKShjb25zdCBUICYsIGNvbnN0IFQgJikpCisgICAgY29uc3QKK3sKKyAgcmV0dXJuIHZlY18gPyB2ZWNfLT5sb3dlcl9ib3VuZCAob2JqLCBsZXNzdGhhbikgOiAwOworfQorCisjaWYgKEdDQ19WRVJTSU9OID49IDMwMDApCisjIHByYWdtYSBHQ0MgcG9pc29uIHZlY18gdmVjcGZ4XyB2ZWNkYXRhXworI2VuZGlmCisKKyNlbmRpZiAvLyBHQ0NfVkVDX0gKZGlmZiAtLWdpdCBhL2xpYi9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vaW5jbHVkZS92ZXJzaW9uLmggYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OTE5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2luY2x1ZGUvdmVyc2lvbi5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBHQ0NfVkVSU0lPTl9ICisjZGVmaW5lIEdDQ19WRVJTSU9OX0gKK2V4dGVybiBjb25zdCBjaGFyIHZlcnNpb25fc3RyaW5nW107CitleHRlcm4gY29uc3QgY2hhciBwa2d2ZXJzaW9uX3N0cmluZ1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgYnVnX3JlcG9ydF91cmxbXTsKKyNlbmRpZiAvKiAhIEdDQ19WRVJTSU9OX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY2MxIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9jYzEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI3ZGU2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY2MxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY2MxcGx1cyBiL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY2MxcGx1cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YTNjMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9jYzFwbHVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvY29sbGVjdDIgYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2NvbGxlY3QyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2MDUyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2NvbGxlY3QyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvZjk1MSBiL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvZjk1MQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YmRhN2EwCi0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9mOTUxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5zdGFsbC10b29scy9maXhpbmMuc2ggYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvZml4aW5jLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY3YjhkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvZml4aW5jLnNoCkBAIC0wLDAgKzEsNTE0IEBACisjIS9iaW4vc2gKKyMKKyMgSW5zdGFsbCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBjZXJ0YWluIEFOU0ktaW5jb21wYXRpYmxlIHN5c3RlbSBoZWFkZXIKKyMgZmlsZXMgd2hpY2ggYXJlIGZpeGVkIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggQU5TSSBDIGFuZCBwbGFjZWQgaW4gYQorIyBkaXJlY3RvcnkgdGhhdCBHQ0Mgd2lsbCBzZWFyY2guCisjCisjIFNlZSBSRUFETUUtZml4aW5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyAgZml4aW5jbHVkZXMgY29weXJpZ2h0IChjKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDA5CisjICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIGZpeGluY2x1ZGVzIGlzIGZyZWUgc29mdHdhcmUuCisjIAorIyBZb3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyAKKyMgZml4aW5jbHVkZXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIAorIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIGZpeGluY2x1ZGVzOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyMKKyMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCisKKyMgVXNhZ2U6IGZpeGluYy5zaCBvdXRwdXQtZGlyIGlucHV0LWRpcgorIworIyBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdHMuCisjIEZhaWwgaWYgbm8gYXJnIHRvIHNwZWNpZnkgYSBkaXJlY3RvcnkgZm9yIHRoZSBvdXRwdXQuCitpZiBbICJ4JDEiID0gIngiIF0KK3RoZW4KKyAgZWNobyBmaXhpbmNsdWRlczogbm8gb3V0cHV0IGRpcmVjdG9yeSBzcGVjaWZpZWQKKyAgZXhpdCAxCitmaQorCitMSUI9JHsxfQorc2hpZnQKKworIyBNYWtlIHN1cmUgaXQgZXhpc3RzLgoraWYgWyAhIC1kICRMSUIgXTsgdGhlbgorICBta2RpciAkTElCIHx8IHsKKyAgICBlY2hvIGZpeGluY2x1ZGVzOiAgb3V0cHV0IGRpciAnYCckTElCIicgY2Fubm90IGJlIGNyZWF0ZWQiCisgICAgZXhpdCAxCisgIH0KK2Vsc2UKKyAgKCBjZCAkTElCICYmIHRvdWNoIERPTkUgJiYgcm0gRE9ORSApIHx8IHsKKyAgICBlY2hvIGZpeGluY2x1ZGVzOiAgb3V0cHV0IGRpciAnYCckTElCIicgaXMgYW4gaW52YWxpZCBkaXJlY3RvcnkiCisgICAgZXhpdCAxCisgIH0KK2ZpCisKK2lmIHRlc3QgLXogIiRWRVJCT1NFIgordGhlbgorICBWRVJCT1NFPTIKKyAgZXhwb3J0IFZFUkJPU0UKK2Vsc2UKKyAgY2FzZSAiJFZFUkJPU0UiIGluCisgIFswLTldICkgOiA7OworICAqICkgIFZFUkJPU0U9MyA7OworICBlc2FjCitmaQorCisjIERlZmluZSB3aGF0IHRhcmdldCBzeXN0ZW0gd2UncmUgZml4aW5nLgorIworaWYgdGVzdCAtciAuL01ha2VmaWxlOyB0aGVuCisgIHRhcmdldF9jYW5vbmljYWw9ImBzZWQgLW4gLWUgJ3MsXnRhcmdldFsgCV0qPVsgCV0qXCguKlwpJCxcMSxwJyA8IE1ha2VmaWxlYCIKK2ZpCisKKyMgSWYgbm90IGZyb20gdGhlIE1ha2VmaWxlLCB0aGVuIHRyeSBjb25maWcuZ3Vlc3MKKyMKK2lmIHRlc3QgLXogIiR7dGFyZ2V0X2Nhbm9uaWNhbH0iIDsgdGhlbgorICBpZiB0ZXN0IC14IC4vY29uZmlnLmd1ZXNzIDsgdGhlbgorICAgIHRhcmdldF9jYW5vbmljYWw9ImBjb25maWcuZ3Vlc3NgIiA7IGZpCisgIHRlc3QgLXogIiR7dGFyZ2V0X2Nhbm9uaWNhbH0iICYmIHRhcmdldF9jYW5vbmljYWw9dW5rbm93bgorZmkKK2V4cG9ydCB0YXJnZXRfY2Fub25pY2FsCisKKyMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCisjCisjIERlZmluZSBQV0RDTUQgYXMgYSBjb21tYW5kIHRvIHVzZSB0byBnZXQgdGhlIHdvcmtpbmcgZGlyCisjIGluIHRoZSBmb3JtIHRoYXQgd2Ugd2FudC4KK1BXRENNRD0ke1BXRENNRC1wd2R9CisKK2Nhc2UgImAkUFdEQ01EYCIgaW4KKy8vKikKKyAgICAjIE9uIGFuIEFwb2xsbywgZGlzY2FyZCBldmVyeXRoaW5nIGJlZm9yZSBgL3VzcicuCisgICAgUFdEQ01EPSJldmFsIHB3ZCB8IHNlZCAtZSAncywuKi91c3IvLC91c3IvLCciCisgICAgOzsKK2VzYWMKKworIyBPcmlnaW5hbCBkaXJlY3RvcnkuCitPUklHRElSPWAke1BXRENNRH1gCitleHBvcnQgT1JJR0RJUgorRklYSU5DTD1gJHtQV0RDTUR9YC9maXhpbmNsCitpZiBbICEgLXggJEZJWElOQ0wgXSA7IHRoZW4KKyAgZWNobyAiQ2Fubm90IGZpbmQgZml4aW5jbCIgPiYyCisgIGV4aXQgMQorZmkKK2V4cG9ydCBGSVhJTkNMCisKKyMgTWFrZSBMSUIgYWJzb2x1dGUgb25seSBpZiBuZWVkZWQgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0aGUgYW1kLgorY2FzZSAkTElCIGluCisvKikKKyAgICA7OworKikKKyAgICBjZCAkTElCOyBMSUI9YCR7UFdEQ01EfWAKKyAgICA7OworZXNhYworCitpZiB0ZXN0ICRWRVJCT1NFIC1ndCAwCit0aGVuIGVjaG8gRml4aW5nIGhlYWRlcnMgaW50byAke0xJQn0gZm9yICR7dGFyZ2V0X2Nhbm9uaWNhbH0gdGFyZ2V0IDsgZmkKKworIyBEZXRlcm1pbmUgd2hldGhlciB0aGlzIHN5c3RlbSBoYXMgc3ltYm9saWMgbGlua3MuCitpZiB0ZXN0IC1uICIkREpESVIiOyB0aGVuCisgIExJTktTPWZhbHNlCitlbGlmIGxuIC1zIFggJExJQi9TaG91bGROb3RFeGlzdCAyPi9kZXYvbnVsbDsgdGhlbgorICBybSAtZiAkTElCL1Nob3VsZE5vdEV4aXN0CisgIExJTktTPXRydWUKK2VsaWYgbG4gLXMgWCAvdG1wL1Nob3VsZE5vdEV4aXN0IDI+L2Rldi9udWxsOyB0aGVuCisgIHJtIC1mIC90bXAvU2hvdWxkTm90RXhpc3QKKyAgTElOS1M9dHJ1ZQorZWxzZQorICBMSU5LUz1mYWxzZQorZmkKKworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKKyMgIENoZWNrIHRvIHNlZSBpZiB0aGUgbWFjaGluZV9uYW1lIGZpeCBuZWVkcyB0byBiZSBkaXNhYmxlZC4KKyMKKyMgIE9uIHNvbWUgcGxhdGZvcm1zLCBtYWNoaW5lX25hbWUgZG9lc24ndCB3b3JrIHByb3Blcmx5IGFuZAorIyAgYnJlYWtzIHNvbWUgb2YgdGhlIGhlYWRlciBmaWxlcy4gIFNpbmNlIGV2ZXJ5dGhpbmcgd29ya3MKKyMgIHByb3Blcmx5IHdpdGhvdXQgaXQsIGp1c3Qgd2lwZSB0aGUgbWFjcm8gbGlzdCB0bworIyAgZGlzYWJsZSB0aGUgZml4LgorCitjYXNlICIke3RhcmdldF9jYW5vbmljYWx9IiBpbgorICAgICotKi12eHdvcmtzKikKKwl0ZXN0IC1mICR7TUFDUk9fTElTVH0gJiYgIGVjaG8gPiAke01BQ1JPX0xJU1R9CisgICAgICAgIDs7Citlc2FjCisKKworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKKyMgIEluIHRoZSBmaWxlIG1hY3JvX2xpc3QgYXJlIGxpc3RlZCBhbGwgdGhlIHByZWRlZmluZWQKKyMgIG1hY3JvcyB0aGF0IGFyZSBub3QgaW4gdGhlIEM4OSByZXNlcnZlZCBuYW1lc3BhY2UgKHRoZSByZXNlcnZlZAorIyAgbmFtZXNwYWNlIGlzIGFsbCBpZGVudGlmaWVycyBiZWdpbm5uaW5nIHdpdGggdHdvIHVuZGVyc2NvcmVzIG9yIG9uZQorIyAgdW5kZXJzY29yZSBmb2xsb3dlZCBieSBhIGNhcGl0YWwgbGV0dGVyKS4gIEEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbmQKKyMgIGFueSBvZiB0aG9zZSBtYWNyb3MgaW4gYSBoZWFkZXIgZmlsZSBpcyB3cml0dGVuIHRvIE1OX05BTUVfUEFULgorIworIyAgTm90ZSBkZXBlbmRlbmN5IG9uIEFTQ0lJLiBcMDEyID0gbmV3bGluZS4KKyMgIHRyICcgJyAnXG4nIGlzLCBhbGFzLCBub3QgcG9ydGFibGUuCisKK2lmIHRlc3QgLXMgJHtNQUNST19MSVNUfQordGhlbgorICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAwOyB0aGVuCisgICAgZWNobyAiRm9yYmlkZGVuIGlkZW50aWZpZXJzOiBgdHIgJ1wwMTInICcgJyA8ICR7TUFDUk9fTElTVH1gIgorICBmaQorICBNTl9OQU1FX1BBVD0iYHNlZCAncy9eL1xcXFw8Lzsgcy8kL1xcXFw+LzsgJCFzLyQvfC8nIFwKKyAgICAgIDwgJHtNQUNST19MSVNUfSB8IHRyIC1kICdcMDEyJ2AiCisgIGV4cG9ydCBNTl9OQU1FX1BBVAorZWxzZQorICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAwCisgIHRoZW4gZWNobyAiTm8gZm9yYmlkZGVuIGlkZW50aWZpZXJzIGRlZmluZWQgYnkgdGhpcyB0YXJnZXQiIDsgZmkKK2ZpCisKKyMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCisjCisjICBTZWFyY2ggZWFjaCBpbnB1dCBkaXJlY3RvcnkgZm9yIGJyb2tlbiBoZWFkZXIgZmlsZXMuCisjICBUaGlzIGxvb3AgZW5kcyBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUuCisjCitpZiB0ZXN0ICQjIC1lcSAwCit0aGVuCisgICAgSU5QVVRMSVNUPSIvdXNyL2luY2x1ZGUiCitlbHNlCisgICAgSU5QVVRMSVNUPSIkQCIKK2ZpCisKK2ZvciBJTlBVVCBpbiAke0lOUFVUTElTVH0gOyBkbworCitjZCAke09SSUdESVJ9CisKKyMgIE1ha2Ugc3VyZSBhIGRpcmVjdG9yeSBleGlzdHMgYmVmb3JlIGNoYW5naW5nIGludG8gaXQsCisjICBvdGhlcndpc2UgU29sYXJpczIgd2lsbCBmYWlsLWV4aXQgdGhlIHNjcmlwdC4KKyMKK2lmIFsgISAtZCAke0lOUFVUfSBdOyB0aGVuCisgIGNvbnRpbnVlCitmaQorY2QgJHtJTlBVVH0KKworSU5QVVQ9YCR7UFdEQ01EfWAKK2V4cG9ydCBJTlBVVAorCisjCisjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIworIworaWYgdGVzdCAkVkVSQk9TRSAtZ3QgMQordGhlbiBlY2hvIEZpbmRpbmcgZGlyZWN0b3JpZXMgYW5kIGxpbmtzIHRvIGRpcmVjdG9yaWVzIDsgZmkKKworIyBGaW5kIGFsbCBkaXJlY3RvcmllcyBhbmQgYWxsIHN5bWxpbmtzIHRoYXQgcG9pbnQgdG8gZGlyZWN0b3JpZXMuCisjIFB1dCB0aGUgbGlzdCBpbiAkYWxsX2RpcnMuCisjIEVhY2ggdGltZSB3ZSBmaW5kIGEgc3ltbGluaywgYWRkIGl0IHRvIG5ld2RpcnMKKyMgc28gdGhhdCB3ZSBkbyBhbm90aGVyIGZpbmQgd2l0aGluIHRoZSBkaXIgdGhlIGxpbmsgcG9pbnRzIHRvLgorIyBOb3RlIHRoYXQgJGFsbF9kaXJzIG1heSBoYXZlIGR1cGxpY2F0ZXMgaW4gaXQ7CisjIGxhdGVyIHBhcnRzIG9mIHRoaXMgZmlsZSBhcmUgc3VwcG9zZWQgdG8gaWdub3JlIHRoZW0uCitkaXJzPSIuIgorbGV2ZWxzPTIKK2FsbF9kaXJzPSIiCitzZWFyY2hfZGlycz0iIgorCit3aGlsZSBbIC1uICIkZGlycyIgXSAmJiBbICRsZXZlbHMgLWd0IDAgXQorZG8KKyAgbGV2ZWxzPWBleHByICRsZXZlbHMgLSAxYAorICBuZXdkaXJzPQorICBmb3IgZCBpbiAkZGlycworICBkbworICAgIGlmIHRlc3QgJFZFUkJPU0UgLWd0IDEKKyAgICB0aGVuIGVjaG8gIiBTZWFyY2hpbmcgJElOUFVULyRkIiA7IGZpCisKKyAgICAjIEZpbmQgYWxsIGRpcmVjdG9yaWVzIHVuZGVyICRkLCByZWxhdGl2ZSB0byAkZCwgZXhjbHVkaW5nICRkIGl0c2VsZi4KKyAgICAjIChUaGUgLy4gaXMgbmVlZGVkIGFmdGVyICRkIGluIGNhc2UgJGQgaXMgYSBzeW1saW5rLikKKyAgICBhbGxfZGlycz0iJGFsbF9kaXJzIGBmaW5kICRkLy4gLXR5cGUgZCAtcHJpbnQgfCBcCisgICAgICAgICAgICAgICBzZWQgLWUgJy9cL1wuJC9kJyAtZSAnc0AvLi9AL0BnJ2AiCisgICAgIyBGaW5kIGFsbCBsaW5rcyB0byBkaXJlY3Rvcmllcy4KKyAgICAjIFVzaW5nIGAtZXhlYyB0ZXN0IC1kJyBpbiBmaW5kIGZhaWxzIG9uIHNvbWUgc3lzdGVtcywKKyAgICAjIGFuZCB0cnlpbmcgdG8gcnVuIHRlc3QgdmlhIHNoIGZhaWxzIG9uIG90aGVycywKKyAgICAjIHNvIHRoaXMgaXMgdGhlIHNpbXBsZXN0IGFsdGVybmF0aXZlIGxlZnQuCisgICAgIyBGaXJzdCBmaW5kIGFsbCB0aGUgbGlua3MsIHRoZW4gdGVzdCBlYWNoIG9uZS4KKyAgICB0aGVzZWxpbmtzPQorICAgICRMSU5LUyAmJiBcCisgICAgICB0aGVzZWxpbmtzPWBmaW5kICRkLy4gLXR5cGUgbCAtcHJpbnQgfCBzZWQgLWUgJ3NALy4vQC9AZydgCisgICAgZm9yIGQxIGluICR0aGVzZWxpbmtzIC0tZHVtbXktLQorICAgIGRvCisgICAgICAjIElmIHRoZSBsaW5rIHBvaW50cyB0byBhIGRpcmVjdG9yeSwKKyAgICAgICMgYWRkIHRoYXQgZGlyIHRvICRuZXdkaXJzCisgICAgICBpZiBbIC1kICRkMSBdCisgICAgICB0aGVuCisgICAgICAgIGFsbF9kaXJzPSIkYWxsX2RpcnMgJGQxIgorICAgICAgICBpZiBbICJgbHMgLWxkICRkMSB8IHNlZCAtbiAncy8uKi0+IC8vcCdgIiAhPSAiLiIgXQorICAgICAgICB0aGVuCisgICAgICAgICAgbmV3ZGlycz0iJG5ld2RpcnMgJGQxIgorICAgICAgICAgIHNlYXJjaF9kaXJzPSIkc2VhcmNoX2RpcnMgJGQxIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKKworICBkaXJzPSIkbmV3ZGlycyIKK2RvbmUKKworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKK2RpcnM9CitpZiB0ZXN0ICRWRVJCT1NFIC1ndCAyCit0aGVuIGVjaG8gIkFsbCBkaXJlY3RvcmllcyAoaW5jbHVkaW5nIGxpbmtzIHRvIGRpcmVjdG9yaWVzKToiCisgICAgIGVjaG8gJGFsbF9kaXJzCitmaQorCitmb3IgZmlsZSBpbiAkYWxsX2RpcnM7IGRvCisgIHJtIC1yZiAkTElCLyRmaWxlCisgIGlmIFsgISAtZCAkTElCLyRmaWxlIF0KKyAgdGhlbiBta2RpciAkTElCLyRmaWxlCisgIGZpCitkb25lCitta2RpciAkTElCL3Jvb3QKKworIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMKKyMKKyMgdHJlZXRvcHMgZ2V0cyBhbiBhbHRlcm5hdGluZyBsaXN0CisjIG9mIG9sZCBkaXJlY3RvcmllcyB0byBjb3B5CisjIGFuZCB0aGUgbmV3IGRpcmVjdG9yaWVzIHRvIGNvcHkgdG8uCit0cmVldG9wcz0iLiAke0xJQn0iCisKK2lmICRMSU5LUzsgdGhlbgorICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAxCisgIHRoZW4gZWNobyAnTWFraW5nIHN5bWJvbGljIGRpcmVjdG9yeSBsaW5rcycgOyBmaQorICBjd2Q9YCR7UFdEQ01EfWAKKworICBmb3Igc3ltX2xpbmsgaW4gJHNlYXJjaF9kaXJzOyBkbworICAgIGNkICR7SU5QVVR9CisgICAgZGVzdD1gbHMgLWxkICR7c3ltX2xpbmt9IHwgc2VkIC1uICdzLy4qLT4gLy9wJ2AKKworICAgICMgSW4gY2FzZSAkZGVzdCBpcyByZWxhdGl2ZSwgZ2V0IHRvICR7c3ltX2xpbmt9J3MgZGlyIGZpcnN0LgorICAgICMKKyAgICBjZCAuL2BlY2hvICR7c3ltX2xpbmt9IHwgc2VkICdzOy9bXi9dKiQ7OydgCisKKyAgICAjIENoZWNrIHRoYXQgdGhlIHRhcmdldCBkaXJlY3RvcnkgZXhpc3RzLgorICAgICMgUmVkaXJlY3Rpb25zIGNoYW5nZWQgdG8gYXZvaWQgYnVnIGluIHNoIG9uIFVsdHJpeC4KKyAgICAjCisgICAgKGNkICRkZXN0KSA+IC9kZXYvbnVsbCAyPiYxCisgICAgaWYgWyAkPyA9IDAgXTsgdGhlbgorICAgICAgY2QgJGRlc3QKKworICAgICAgIyBmdWxsX2Rlc3RfZGlyIGdldHMgdGhlIGRpciB0aGF0IHRoZSBsaW5rIGFjdHVhbGx5IGxlYWRzIHRvLgorICAgICAgIworICAgICAgZnVsbF9kZXN0X2Rpcj1gJHtQV0RDTUR9YAorCisgICAgICAjIENhbm9uaWNhbGl6ZSAke0lOUFVUfSBub3cgdG8gbWluaW1pemUgdGhlIHRpbWUgYW4KKyAgICAgICMgYXV0b21vdW50ZXIgaGFzIHRvIGNoYW5nZSB0aGUgcmVzdWx0IG9mICR7UFdEQ01EfS4KKyAgICAgICMKKyAgICAgIGNpbnB1dD1gY2QgJHtJTlBVVH07ICR7UFdEQ01EfWAKKworICAgICAgIyBJZiBhIGxpbmsgcG9pbnRzIHRvIC4sIG1ha2UgYSBzaW1pbGFyIGxpbmsgdG8gLgorICAgICAgIworICAgICAgaWYgWyAke2Z1bGxfZGVzdF9kaXJ9ID0gJHtjaW5wdXR9IF07IHRoZW4KKyAgICAgICAgaWYgdGVzdCAkVkVSQk9TRSAtZ3QgMgorICAgICAgICB0aGVuIGVjaG8gJHtzeW1fbGlua30gJy0+JyAuICc6IE1ha2luZyBzZWxmIGxpbmsnIDsgZmkKKyAgICAgICAgcm0gLWZyICR7TElCfS8ke3N5bV9saW5rfSA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgIGxuIC1zIC4gJHtMSUJ9LyR7c3ltX2xpbmt9ID4gL2Rldi9udWxsIDI+JjEKKworICAgICAgIyBJZiBsaW5rIGxlYWRzIGJhY2sgaW50byAke0lOUFVUfSwKKyAgICAgICMgbWFrZSBhIHNpbWlsYXIgbGluayBoZXJlLgorICAgICAgIworICAgICAgZWxpZiBleHByICR7ZnVsbF9kZXN0X2Rpcn0gOiAiJHtjaW5wdXR9Ly4qIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIFkgZ2V0cyB0aGUgYWN0dWFsIHRhcmdldCBkaXIgbmFtZSwgcmVsYXRpdmUgdG8gJHtJTlBVVH0uCisgICAgICAgIHk9YGVjaG8gJHtmdWxsX2Rlc3RfZGlyfSB8IHNlZCAtbiAicyYke2NpbnB1dH0vJiZwImAKKyAgICAgICAgIyBET1RTIGlzIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gJHtMSUJ9LyR7c3ltX2xpbmt9IGJhY2sgdG8gJHtMSUJ9LgorICAgICAgICBkb3RzPWBlY2hvICIke3N5bV9saW5rfSIgfAorICAgICAgICAgIHNlZCAtZSAnc0BeLi9AQCcgLWUgJ3NALy4vQC9AZycgLWUgJ3NAW14vXVteL10qQC4uQGcnIC1lICdzQC4uJEBAJ2AKKyAgICAgICAgaWYgdGVzdCAkVkVSQk9TRSAtZ3QgMgorICAgICAgICB0aGVuIGVjaG8gJHtzeW1fbGlua30gJy0+JyAkZG90cyR5ICc6IE1ha2luZyBsb2NhbCBsaW5rJyA7IGZpCisgICAgICAgIHJtIC1mciAke0xJQn0vJHtzeW1fbGlua30gPiAvZGV2L251bGwgMj4mMQorICAgICAgICBsbiAtcyAkZG90cyR5ICR7TElCfS8ke3N5bV9saW5rfSA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAgIGVsc2UKKyAgICAgICAgIyBJZiB0aGUgbGluayBpcyB0byBhIGRpciAkdGFyZ2V0IG91dHNpZGUgJHtJTlBVVH0sCisgICAgICAgICMgcmVwb2ludCB0aGUgbGluayBhdCAke0lOUFVUfS9yb290JHRhcmdldAorICAgICAgICAjIGFuZCBwcm9jZXNzICR0YXJnZXQgaW50byAke0lOUFVUfS9yb290JHRhcmdldAorICAgICAgICAjIHRyZWF0IHRoaXMgZGlyZWN0b3J5IGFzIGlmIGl0IGFjdHVhbGx5IGNvbnRhaW5lZCB0aGUgZmlsZXMuCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAkVkVSQk9TRSAtZ3QgMgorICAgICAgICB0aGVuIGVjaG8gJHtzeW1fbGlua30gJy0+JyByb290JHtmdWxsX2Rlc3RfZGlyfSAnOiBNYWtpbmcgcm9vdGVkIGxpbmsnCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLWQgJExJQi9yb290JHtmdWxsX2Rlc3RfZGlyfSBdCisgICAgICAgIHRoZW4gdHJ1ZQorICAgICAgICBlbHNlCisgICAgICAgICAgZGlybmFtZT1yb290JHtmdWxsX2Rlc3RfZGlyfS8KKyAgICAgICAgICBkaXJtYWRlPS4KKyAgICAgICAgICBjZCAkTElCCisgICAgICAgICAgd2hpbGUgWyB4JGRpcm5hbWUgIT0geCBdOyBkbworICAgICAgICAgICAgY29tcG9uZW50PWBlY2hvICRkaXJuYW1lIHwgc2VkIC1lICdzfC8uKiR8fCdgCisgICAgICAgICAgICBta2RpciAkY29tcG9uZW50ID4vZGV2L251bGwgMj4mMQorICAgICAgICAgICAgY2QgJGNvbXBvbmVudAorICAgICAgICAgICAgZGlybWFkZT0kZGlybWFkZS8kY29tcG9uZW50CisgICAgICAgICAgICBkaXJuYW1lPWBlY2hvICRkaXJuYW1lIHwgc2VkIC1lICdzfFteL10qL3x8J2AKKyAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgIyBEdXBsaWNhdGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBjcmVhdGVkIGluICR7TElCfS8ke3N5bV9saW5rfSBpbiBuZXcKKyAgICAgICAgIyByb290IGFyZWEuCisgICAgICAgICMKKyAgICAgICAgZm9yIGZpbGUyIGluICRhbGxfZGlyczsgZG8KKyAgICAgICAgICBjYXNlICRmaWxlMiBpbgorICAgICAgICAgICAgJHtzeW1fbGlua30vKikKKyAgICAgICAgICAgICAgZHVwZGlyPSR7TElCfS9yb290JHtmdWxsX2Rlc3RfZGlyfS9gZWNobyAkZmlsZTIgfAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtbiAic3xeJHtzeW1fbGlua30vfHxwImAKKyAgICAgICAgICAgICAgaWYgdGVzdCAkVkVSQk9TRSAtZ3QgMgorICAgICAgICAgICAgICB0aGVuIGVjaG8gIkR1cGxpY2F0aW5nICR7c3ltX2xpbmt9J3MgJHtkdXBkaXJ9IiA7IGZpCisgICAgICAgICAgICAgIGlmIFsgLWQgJHtkdXBkaXJ9IF0KKyAgICAgICAgICAgICAgdGhlbiB0cnVlCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBta2RpciAke2R1cGRpcn0KKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBkb25lCisKKyAgICAgICAgIyBHZXQgdGhlIHBhdGggZnJvbSAke0xJQn0gdG8gJHtzeW1fbGlua30sIGFjY291bnRpbmcgZm9yIHN5bWxpbmtzLgorICAgICAgICAjCisgICAgICAgIHBhcmVudD1gZWNobyAiJHtzeW1fbGlua30iIHwgc2VkIC1lICdzQC9bXi9dKiRAQCdgCisgICAgICAgIGxpYmFicz1gY2QgJHtMSUJ9OyAke1BXRENNRH1gCisgICAgICAgIGZpbGUyPWBjZCAke0xJQn07IGNkICRwYXJlbnQ7ICR7UFdEQ01EfSB8IHNlZCAtZSAic0BeJHtsaWJhYnN9QEAiYAorCisgICAgICAgICMgRE9UUyBpcyB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tICR7TElCfS8ke3N5bV9saW5rfSBiYWNrIHRvICR7TElCfS4KKyAgICAgICAgIworICAgICAgICBkb3RzPWBlY2hvICIkZmlsZTIiIHwgc2VkIC1lICdzQC9bXi9dKkAuLi9AZydgCisgICAgICAgIHJtIC1mciAke0xJQn0vJHtzeW1fbGlua30gPiAvZGV2L251bGwgMj4mMQorICAgICAgICBsbiAtcyAke2RvdHN9cm9vdCR7ZnVsbF9kZXN0X2Rpcn0gJHtMSUJ9LyR7c3ltX2xpbmt9ID4gL2Rldi9udWxsIDI+JjEKKyAgICAgICAgdHJlZXRvcHM9IiR0cmVldG9wcyAke3N5bV9saW5rfSAke0xJQn0vcm9vdCR7ZnVsbF9kZXN0X2Rpcn0iCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKK2ZpCisKKyMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCisjCityZXF1aXJlZD0KK3NldCB4ICR0cmVldG9wcworc2hpZnQKK3doaWxlIFsgJCMgIT0gMCBdOyBkbworICAjICQxIGlzIGFuIG9sZCBkaXJlY3RvcnkgdG8gY29weSwgYW5kICQyIGlzIHRoZSBuZXcgZGlyZWN0b3J5IHRvIGNvcHkgdG8uCisgICMKKyAgU1JDRElSPWBjZCAke0lOUFVUfSA7IGNkICQxIDsgJHtQV0RDTUR9YAorICBleHBvcnQgU1JDRElSCisKKyAgRklORF9CQVNFPSQxCisgIGV4cG9ydCBGSU5EX0JBU0UKKyAgc2hpZnQKKworICBERVNURElSPWBjZCAkMTske1BXRENNRH1gCisgIGV4cG9ydCBERVNURElSCisgIHNoaWZ0CisKKyAgIyBUaGUgc2FtZSBkaXIgY2FuIGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0cmVldG9wcy4KKyAgIyBUaGVyZSdzIG5vIG5lZWQgdG8gc2NhbiBpdCBtb3JlIHRoYW4gb25jZS4KKyAgIworICBpZiBbIC1mICR7REVTVERJUn0vRE9ORSBdCisgIHRoZW4gY29udGludWUgOyBmaQorCisgIHRvdWNoICR7REVTVERJUn0vRE9ORQorICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAxCisgIHRoZW4gZWNobyBGaXhpbmcgZGlyZWN0b3J5ICR7U1JDRElSfSBpbnRvICR7REVTVERJUn0gOyBmaQorCisgICMgQ2hlY2sgZmlsZXMgd2hpY2ggYXJlIHN5bWxpbmtzIGFzIHdlbGwgYXMgdGhvc2Ugd2hpY2ggYXJlIGZpbGVzLgorICAjCisgIGNkICR7SU5QVVR9CisgIHJlcXVpcmVkPSIkcmVxdWlyZWQgYGlmICRMSU5LUzsgdGhlbgorICAgIGZpbmQgJHtGSU5EX0JBU0V9Ly4gLW5hbWUgJyouaCcgXCggLXR5cGUgZiAtbyAtdHlwZSBsIFwpIC1wcmludAorICBlbHNlCisgICAgZmluZCAke0ZJTkRfQkFTRX0vLiAtbmFtZSAnKi5oJyAtdHlwZSBmIC1wcmludAorICBmaSB8IFwKKyAgICBzZWQgLWUgJ3M7L1wuLzsvO2cnIC1lICdzOy8vKjsvO2cnIHwgXAorICAgICR7RklYSU5DTH1gIgorZG9uZQorCisjIyBNYWtlIHN1cmUgdGhhdCBhbnkgaW5jbHVkZSBmaWxlcyByZWZlcmVuY2VkIHVzaW5nIGRvdWJsZSBxdW90ZXMKKyMjIGV4aXN0IGluIHRoZSBmaXhlZCBkaXJlY3RvcnkuICBUaGlzIGNvbWVzIGxhc3Qgc2luY2Ugb3RoZXJ3aXNlCisjIyB3ZSBtaWdodCBlbmQgdXAgZGVsZXRpbmcgc29tZSBvZiB0aGVzZSBmaWxlcyAiYmVjYXVzZSB0aGV5IGRvbid0CisjIyBuZWVkIGFueSBjaGFuZ2UuIgorc2V0IHggYGVjaG8gJHJlcXVpcmVkYAorc2hpZnQKK3doaWxlIFsgJCMgIT0gMCBdOyBkbworICBuZXdyZXE9CisgIHdoaWxlIFsgJCMgIT0gMCBdOyBkbworICAgICMgJDEgaXMgdGhlIGRpcmVjdG9yeSB0byBjb3B5IGZyb20sCisgICAgIyAkMiBpcyB0aGUgdW5maXhlZCBmaWxlLAorICAgICMgJDMgaXMgdGhlIGZpeGVkIGZpbGUgbmFtZS4KKyAgICAjCisgICAgY2QgJHtJTlBVVH0KKyAgICBjZCAkMQorICAgIGlmIFsgLWYgJDIgXSA7IHRoZW4KKyAgICAgIGlmIFsgLXIgJDIgXSAmJiBbICEgLXIgJDMgXTsgdGhlbgorICAgICAgICBjcCAkMiAkMyA+L2Rldi9udWxsIDI+JjEgfHwgZWNobyAiQ2FuJ3QgY29weSAkMiIgPiYyCisgICAgICAgIGNobW9kICt3ICQzIDI+L2Rldi9udWxsCisgICAgICAgIGNobW9kIGErciAkMyAyPi9kZXYvbnVsbAorICAgICAgICBpZiB0ZXN0ICRWRVJCT1NFIC1ndCAyCisgICAgICAgIHRoZW4gZWNobyBDb3BpZWQgJDIgOyBmaQorICAgICAgICBmb3IgaW5jbHVkZSBpbiBgZWdyZXAgJ15bIAldKiNbIAldKmluY2x1ZGVbIAldKiJbXi9dJyAkMyB8CisgICAgICAgICAgICAgc2VkIC1lICdzL15bIAldKiNbIAldKmluY2x1ZGVbIAldKiJcKFteIl0qXCkiLiokL1wxLydgCisgICAgICAgIGRvCisJICBkaXI9YGVjaG8gJDIgfCBzZWQgLWUgcyd8L1teL10qJHx8J2AKKwkgIGRpcjI9YGVjaG8gJDMgfCBzZWQgLWUgcyd8L1teL10qJHx8J2AKKwkgIG5ld3JlcT0iJG5ld3JlcSAkMSAkZGlyLyRpbmNsdWRlICRkaXIyLyRpbmNsdWRlIgorICAgICAgICBkb25lCisgICAgICBmaQorICAgIGZpCisgICAgc2hpZnQ7IHNoaWZ0OyBzaGlmdAorICBkb25lCisgIHNldCB4ICRuZXdyZXEKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAkVkVSQk9TRSAtZ3QgMgordGhlbiBlY2hvICdDbGVhbmluZyB1cCBET05FIGZpbGVzLicgOyBmaQorY2QgJExJQgorIyBMb29rIGZvciBmaWxlcyBjYXNlLWluc2Vuc2l0aXZlbHksIGZvciB0aGUgYmVuZWZpdCBvZgorIyBET1MvV2luZG93cyBmaWxlc3lzdGVtcy4KK2ZpbmQgLiAtbmFtZSAnW0RkXVtPb11bTm5dW0VlXScgLWV4ZWMgcm0gLWYgJ3t9JyAnOycKKworaWYgdGVzdCAkVkVSQk9TRSAtZ3QgMQordGhlbiBlY2hvICdDbGVhbmluZyB1cCB1bm5lZWRlZCBkaXJlY3RvcmllczonIDsgZmkKK2NkICRMSUIKK2FsbF9kaXJzPWBmaW5kIC4gLXR5cGUgZCBcISAtbmFtZSAnLicgLXByaW50IHwgc29ydCAtcmAKK2ZvciBmaWxlIGluICRhbGxfZGlyczsgZG8KKyAgaWYgcm1kaXIgJExJQi8kZmlsZSA+IC9kZXYvbnVsbAorICB0aGVuCisgICAgdGVzdCAkVkVSQk9TRSAtZ3QgMyAmJiBlY2hvICIgIHJlbW92ZWQgJGZpbGUiCisgIGZpCitkb25lIDI+IC9kZXYvbnVsbAorCisjIE9uIHN5c3RlbXMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCBzeW1saW5rcywgYGZpbmQnIG1heSBiYXJmCisjIGlmIGNhbGxlZCB3aXRoICItdHlwZSBsIiBwcmVkaWNhdGUuICBTbyBvbmx5IHVzZSB0aGF0IGlmCisjIHdlIGtub3cgd2Ugc2hvdWxkIGxvb2sgZm9yIHN5bWxpbmtzLgoraWYgJExJTktTOyB0aGVuCisgIHRlc3QgJFZFUkJPU0UgLWd0IDIgJiYgZWNobyAiUmVtb3ZpbmcgdW51c2VkIHN5bWxpbmtzIgorCisgIGFsbF9kaXJzPWBmaW5kIC4gLXR5cGUgbCAtcHJpbnRgCisgIGZvciBmaWxlIGluICRhbGxfZGlycworICBkbworICAgIGlmIHRlc3QgISAtZCAkZmlsZQorICAgIHRoZW4KKyAgICAgIHJtIC1mICRmaWxlCisgICAgICB0ZXN0ICRWRVJCT1NFIC1ndCAzICYmIGVjaG8gIiAgcmVtb3ZlZCAkZmlsZSIKKyAgICAgIHJtZGlyIGBkaXJuYW1lICRmaWxlYCA+IC9kZXYvbnVsbCAmJiBcCisgICAgICAgICAgIHRlc3QgJFZFUkJPU0UgLWd0IDMgJiYgXAorICAgICAgICAgICBlY2hvICIgIHJlbW92ZWQgYGRpcm5hbWUgJGZpbGVgIgorICAgIGZpCisgIGRvbmUgMj4gL2Rldi9udWxsCitmaQorCitpZiB0ZXN0ICRWRVJCT1NFIC1ndCAwCit0aGVuIGVjaG8gZml4aW5jbHVkZXMgaXMgZG9uZSA7IGZpCisKKyMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCisjCisjIEVuZCBvZiBmb3IgSU5QVVQgZGlyZWN0b3JpZXMKKyMKK2RvbmUKKyMKKyMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjICMgIyAjCmRpZmYgLS1naXQgYS9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvZml4aW5jbCBiL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvaW5zdGFsbC10b29scy9maXhpbmNsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzNzNmZDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvZml4aW5jbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvbWtoZWFkZXJzIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL21raGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMWI0NThkCi0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL21raGVhZGVycwpAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisjR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKKyN0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorI1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCisjdmVyc2lvbi4KKworI0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorI0FOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorI0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorI2ZvciBtb3JlIGRldGFpbHMuCisKKyNZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorI2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEJhc2ljIGluZm9ybWF0aW9uCit0YXJnZXQ9YWFyY2g2NC1ub25lLWVsZgordGFyZ2V0X25vbmNhbm9uaWNhbD1hYXJjaDY0LW5vbmUtZWxmCit2ZXJzaW9uPTQuOC4zCisKK1ZFUkJPU0U9MAord2hpbGUgWyB4JDEgPSB4LXYgXSA7IGRvCisgICAgc2hpZnQKKyAgICBWRVJCT1NFPWBleHByICRWRVJCT1NFICsgMWAKK2RvbmUKK2V4cG9ydCBWRVJCT1NFCisKK2lmIFsgeCQxID0geC0taGVscCBdIDsgdGhlbgorICAgIGVjaG8gIlVzYWdlOiBta2hlYWRlcnMgW29wdGlvbnNdIFtwcmVmaXggW2lzeXNyb290XV0iCisgICAgZWNobyAiT3B0aW9uczoiCisgICAgZWNobyAiICAtdiAgICAgICAgUHJpbnQgbW9yZSBvdXRwdXQgKG1heSBiZSByZXBlYXRlZCBmb3IgZXZlbiBtb3JlIG91dHB1dCkiCisgICAgZWNobyAiICAtLWhlbHAgICAgVGhpcyBoZWxwIgorICAgIGVjaG8gIiAgLS12ZXJzaW9uIFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24iCisgICAgZXhpdCAwCitmaQorCitpZiBbIHgkMSA9IHgtLXZlcnNpb24gXSA7IHRoZW4KKyAgICBlY2hvICJta2hlYWRlcnMgKEdDQykgdmVyc2lvbiAkdmVyc2lvbiIKKyAgICBlY2hvICJDb3B5cmlnaHQgMjAwMiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4iCisgICAgZWNobyAiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IHVuZGVyIHRoZSIKKyAgICBlY2hvICJ0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIHByb2dyYW0gaGFzIgorICAgIGVjaG8gImFic29sdXRlbHkgbm8gd2FycmFudHkuIgorICAgIGV4aXQgMAorZmkKKworIyBDb21tb24gcHJlZml4IGZvciBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMuCitpZiBbIHgkMSAhPSB4IF0gOyB0aGVuCisgIHByZWZpeD0kMQorICBzaGlmdAorZWxzZQorICBwcmVmaXg9L2NidWlsZC9zbGF2ZXMvb29ydHMvY3Jvc3N0b29sLW5nL2J1aWxkcy9hYXJjaDY0LW5vbmUtZWxmLWxpbnV4L2luc3RhbGwKK2ZpCisKKyMgQWxsb3cgZm9yIGFsdGVybmF0ZSBpc3lzcm9vdCBpbiB3aGljaCB0byBmaW5kIGhlYWRlcnMKK2lmIFsgeCQxICE9IHggXSA7IHRoZW4KKyAgaXN5c3Jvb3Q9JDEKKyAgc2hpZnQKK2Vsc2UKKyAgaXN5c3Jvb3Q9CitmaQorCisjIERpcmVjdG9yeSBpbiB3aGljaCB0byBwdXQgaG9zdCBkZXBlbmRlbnQgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworZXhlY19wcmVmaXg9JHtwcmVmaXh9CisjIERpcmVjdG9yeSBpbiB3aGljaCB0byBwdXQgdGhlIGRpcmVjdG9yaWVzIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYgorbGliZXhlY2Rpcj0ke2V4ZWNfcHJlZml4fS9saWJleGVjCisjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgbGlicmFyaWVzLCBldGMuCitsaWJzdWJkaXI9JHtsaWJkaXJ9L2djYy8ke3RhcmdldF9ub25jYW5vbmljYWx9LyR7dmVyc2lvbn0KKyMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworbGliZXhlY3N1YmRpcj0ke2xpYmV4ZWNkaXJ9L2djYy8ke3RhcmdldF9ub25jYW5vbmljYWx9LyR7dmVyc2lvbn0KKworaXRvb2xzZGlyPSR7bGliZXhlY3N1YmRpcn0vaW5zdGFsbC10b29scworaXRvb2xzZGF0YWRpcj0ke2xpYnN1YmRpcn0vaW5zdGFsbC10b29scworaW5jZGlyPSR7bGlic3ViZGlyfS9pbmNsdWRlLWZpeGVkCitta2luc3RhbGxkaXJzPSIvYmluL2Jhc2ggJHtpdG9vbHNkaXJ9L21raW5zdGFsbGRpcnMiCisKK2NkICR7aXRvb2xzZGlyfQorcm0gLXJmICR7aW5jZGlyfS8qCisKK2ZvciBtbCBpbiBgY2F0ICR7aXRvb2xzZGF0YWRpcn0vZml4aW5jX2xpc3RgOyBkbworICBzeXNyb290X2hlYWRlcnNfc3VmZml4PWBlY2hvICR7bWx9IHwgc2VkIC1lICdzLzsuKiQvLydgCisgIG11bHRpX2Rpcj1gZWNobyAke21sfSB8IHNlZCAtZSAncy9eW147XSo7Ly8nYAorICBzdWJpbmNkaXI9JHtpbmNkaXJ9JHttdWx0aV9kaXJ9CisgIC4gJHtpdG9vbHNkYXRhZGlyfS9ta2hlYWRlcnMuY29uZgorICBpZiBbIHgke1NUTVBfRklYSU5DfSAhPSB4IF0gOyB0aGVuCisJVEFSR0VUX01BQ0hJTkU9IiR7dGFyZ2V0fSIgdGFyZ2V0X2Nhbm9uaWNhbD0iJHt0YXJnZXR9IiBcCisJICAgIE1BQ1JPX0xJU1Q9IiR7aXRvb2xzZGF0YWRpcn0vbWFjcm9fbGlzdCIgXAorCSAgICAvYmluL2Jhc2ggLi9maXhpbmMuc2ggJHtzdWJpbmNkaXJ9IFwKKwkgICAgJHtpc3lzcm9vdH0ke1NZU1RFTV9IRUFERVJfRElSfSAke09USEVSX0ZJWElOQ0xVREVTX0RJUlN9CisJcm0gLWYgJHtzdWJpbmNkaXJ9L3N5c2xpbWl0cy5oCisJaWYgWyAtZiAke3N1YmluY2Rpcn0vbGltaXRzLmggXTsgdGhlbgorCSAgbXYgJHtzdWJpbmNkaXJ9L2xpbWl0cy5oICR7c3ViaW5jZGlyfS9zeXNsaW1pdHMuaAorCWVsc2UKKwkgIGNwICR7aXRvb2xzZGF0YWRpcn0vZ3N5c2xpbWl0cy5oICR7c3ViaW5jZGlyfS9zeXNsaW1pdHMuaAorCWZpCisgIGZpCisKKyAgY3AgJHtpdG9vbHNkYXRhZGlyfS9pbmNsdWRlJHttdWx0aV9kaXJ9L2xpbWl0cy5oICR7c3ViaW5jZGlyfQorZG9uZQpkaWZmIC0tZ2l0IGEvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL21raW5zdGFsbGRpcnMgYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2luc3RhbGwtdG9vbHMvbWtpbnN0YWxsZGlycwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MTkxYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9pbnN0YWxsLXRvb2xzL21raW5zdGFsbGRpcnMKQEAgLTAsMCArMSwxNjIgQEAKKyMhIC9iaW4vc2gKKyMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisKK3NjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKKworIyBPcmlnaW5hbCBhdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKyMgQ3JlYXRlZDogMTk5My0wNS0xNgorIyBQdWJsaWMgZG9tYWluLgorIworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitubD0nCisnCitJRlM9IiAiIgkkbmwiCitlcnJzdGF0dXM9MAorZGlybW9kZT0KKwordXNhZ2U9IlwKK1VzYWdlOiBta2luc3RhbGxkaXJzIFstaF0gWy0taGVscF0gWy0tdmVyc2lvbl0gWy1tIE1PREVdIERJUiAuLi4KKworQ3JlYXRlIGVhY2ggZGlyZWN0b3J5IERJUiAod2l0aCBtb2RlIE1PREUsIGlmIHNwZWNpZmllZCksIGluY2x1ZGluZyBhbGwKK2xlYWRpbmcgZmlsZSBuYW1lIGNvbXBvbmVudHMuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorCisjIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cword2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtaCB8IC0taGVscCB8IC0taCopICAgICAgICAgIyAtaCBmb3IgaGVscAorICAgICAgZWNobyAiJHVzYWdlIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworICAgICAgc2hpZnQKKyAgICAgIHRlc3QgJCMgLWVxIDAgJiYgeyBlY2hvICIkdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorICAgICAgZGlybW9kZT0kMQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgLS12ZXJzaW9uKQorICAgICAgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgIHNoaWZ0CisgICAgICBicmVhaworICAgICAgOzsKKyAgICAtKikgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmtub3duIG9wdGlvbgorICAgICAgZWNobyAiJHVzYWdlIiAxPiYyCisgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlyc3Qgbm9uLW9wdCBhcmcKKyAgICAgIGJyZWFrCisgICAgICA7OworICBlc2FjCitkb25lCisKK2ZvciBmaWxlCitkbworICBpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKyAgICBzaGlmdAorICBlbHNlCisgICAgYnJlYWsKKyAgZmkKK2RvbmUKKworY2FzZSAkIyBpbgorICAwKSBleGl0IDAgOzsKK2VzYWMKKworIyBTb2xhcmlzIDgncyBta2RpciAtcCBpc24ndCB0aHJlYWQtc2FmZS4gIElmIHlvdSBta2RpciAtcCBhL2IgYW5kCisjIG1rZGlyIC1wIGEvYyBhdCB0aGUgc2FtZSB0aW1lLCBib3RoIHdpbGwgZGV0ZWN0IHRoYXQgYSBpcyBtaXNzaW5nLAorIyBvbmUgd2lsbCBjcmVhdGUgYSwgdGhlbiB0aGUgb3RoZXIgd2lsbCB0cnkgdG8gY3JlYXRlIGEgYW5kIGRpZSB3aXRoCisjIGEgIkZpbGUgZXhpc3RzIiBlcnJvci4gIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gY2FsbGluZyBta2luc3RhbGxkaXJzCisjIGZyb20gYSBwYXJhbGxlbCBtYWtlLiAgV2UgdXNlIC0tdmVyc2lvbiBpbiB0aGUgcHJvYmUgdG8gcmVzdHJpY3QKKyMgb3Vyc2VsdmVzIHRvIEdOVSBta2Rpciwgd2hpY2ggaXMgdGhyZWFkLXNhZmUuCitjYXNlICRkaXJtb2RlIGluCisgICcnKQorICAgIGlmIG1rZGlyIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtcCAtLSAiJEAiCisgICAgZWxzZQorICAgICAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKyAgICAgICMgcmVjb2duaXplIGFueSBvcHRpb24uICBJdCB3aWxsIGludGVycHJldCBhbGwgb3B0aW9ucyBhcworICAgICAgIyBkaXJlY3RvcmllcyB0byBjcmVhdGUsIGFuZCB0aGVuIGFib3J0IGJlY2F1c2UgYC4nIGFscmVhZHkKKyAgICAgICMgZXhpc3RzLgorICAgICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgICAgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KKyAgICBmaQorICAgIDs7CisgICopCisgICAgaWYgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1tICRkaXJtb2RlIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tICIkQCIKKyAgICBlbHNlCisgICAgICAjIENsZWFuIHVwIGFmdGVyIE5leHRTdGVwIGFuZCBPcGVuU3RlcCBta2Rpci4KKyAgICAgIGZvciBkIGluIC4vLW0gLi8tcCAuLy0tdmVyc2lvbiAiLi8kZGlybW9kZSI7CisgICAgICBkbworICAgICAgICB0ZXN0IC1kICRkICYmIHJtZGlyICRkCisgICAgICBkb25lCisgICAgZmkKKyAgICA7OworZXNhYworCitmb3IgZmlsZQorZG8KKyAgY2FzZSAkZmlsZSBpbgorICAgIC8qKSBwYXRoY29tcD0vIDs7CisgICAgKikgIHBhdGhjb21wPSA7OworICBlc2FjCisgIG9JRlM9JElGUworICBJRlM9LworICBzZXQgZm5vcmQgJGZpbGUKKyAgc2hpZnQKKyAgSUZTPSRvSUZTCisKKyAgZm9yIGQKKyAgZG8KKyAgICB0ZXN0ICJ4JGQiID0geCAmJiBjb250aW51ZQorCisgICAgcGF0aGNvbXA9JHBhdGhjb21wJGQKKyAgICBjYXNlICRwYXRoY29tcCBpbgorICAgICAgLSopIHBhdGhjb21wPS4vJHBhdGhjb21wIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisgICAgICBlY2hvICJta2RpciAkcGF0aGNvbXAiCisKKyAgICAgIG1rZGlyICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisJZXJyc3RhdHVzPSRsYXN0ZXJyCisgICAgICBlbHNlCisJaWYgdGVzdCAhIC16ICIkZGlybW9kZSI7IHRoZW4KKwkgIGVjaG8gImNobW9kICRkaXJtb2RlICRwYXRoY29tcCIKKwkgIGxhc3RlcnI9CisJICBjaG1vZCAiJGRpcm1vZGUiICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKworCSAgaWYgdGVzdCAhIC16ICIkbGFzdGVyciI7IHRoZW4KKwkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisJICBmaQorCWZpCisgICAgICBmaQorICAgIGZpCisKKyAgICBwYXRoY29tcD0kcGF0aGNvbXAvCisgIGRvbmUKK2RvbmUKKworZXhpdCAkZXJyc3RhdHVzCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmx0b19wbHVnaW4uc28gYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmx0b19wbHVnaW4uc28KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZjI1YmE4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbGlibHRvX3BsdWdpbi5zbwpAQCAtMCwwICsxIEBACitsaWJsdG9fcGx1Z2luLnNvLjAuMC4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9saWJsdG9fcGx1Z2luLnNvLjAgYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2xpYmx0b19wbHVnaW4uc28uMApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5mMjViYTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9saWJsdG9fcGx1Z2luLnNvLjAKQEAgLTAsMCArMSBAQAorbGlibHRvX3BsdWdpbi5zby4wLjAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbGlibHRvX3BsdWdpbi5zby4wLjAuMCBiL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbGlibHRvX3BsdWdpbi5zby4wLjAuMApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTk2NzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9saWJsdG9fcGx1Z2luLnNvLjAuMC4wCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbHRvLXdyYXBwZXIgYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2x0by13cmFwcGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhMDUwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJleGVjL2djYy9hYXJjaDY0LW5vbmUtZWxmLzQuOC4zL2x0by13cmFwcGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbHRvMSBiL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvbHRvMQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDAyMjQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9sdG8xCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2dlbmd0eXBlIGIvbGliZXhlYy9nY2MvYWFyY2g2NC1ub25lLWVsZi80LjguMy9wbHVnaW4vZ2VuZ3R5cGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzM1Mjc5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmV4ZWMvZ2NjL2FhcmNoNjQtbm9uZS1lbGYvNC44LjMvcGx1Z2luL2dlbmd0eXBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2FjbG9jYWwvcGtnLm00IGIvc2hhcmUvYWNsb2NhbC9wa2cubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiM2UwNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2FjbG9jYWwvcGtnLm00CkBAIC0wLDAgKzEsMTU3IEBACisjIHBrZy5tNCAtIE1hY3JvcyB0byBsb2NhdGUgYW5kIHV0aWxpc2UgcGtnLWNvbmZpZy4gICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIHNlcmlhbCAxIChwa2ctY29uZmlnLTAuMjQpCisjIAorIyBDb3B5cmlnaHQgwqkgMjAwNCBTY290dCBKYW1lcyBSZW1uYW50IDxzY290dEBuZXRzcGxpdC5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX1BST0dfUEtHX0NPTkZJR10sCitbbTRfcGF0dGVybl9mb3JiaWQoW15fP1BLR19bQS1aX10rJF0pCittNF9wYXR0ZXJuX2FsbG93KFteUEtHX0NPTkZJRyhfUEFUSCk/JF0pCitBQ19BUkdfVkFSKFtQS0dfQ09ORklHXSwgW3BhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5XSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfUEFUSF0sIFtkaXJlY3RvcmllcyB0byBhZGQgdG8gcGtnLWNvbmZpZydzIHNlYXJjaCBwYXRoXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUdfTElCRElSXSwgW3BhdGggb3ZlcnJpZGluZyBwa2ctY29uZmlnJ3MgYnVpbHQtaW4gc2VhcmNoIHBhdGhdKQorCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJQUNfUEFUSF9UT09MKFtQS0dfQ09ORklHXSwgW3BrZy1jb25maWddKQorZmkKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorCV9wa2dfbWluX3ZlcnNpb249bTRfZGVmYXVsdChbJDFdLCBbMC45LjBdKQorCUFDX01TR19DSEVDS0lORyhbcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uXSkKKwlpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb247IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbeWVzXSkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoW25vXSkKKwkJUEtHX0NPTkZJRz0iIgorCWZpCitmaVtdZG5sCitdKSMgUEtHX1BST0dfUEtHX0NPTkZJRworCisjIFBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMgQ2hlY2sgdG8gc2VlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBtb2R1bGVzIGV4aXN0cy4gIFNpbWlsYXIKKyMgdG8gUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMgb3IgcHJpbnQgZXJyb3JzLgorIworIyBQbGVhc2UgcmVtZW1iZXIgdGhhdCBtNCBleHBhbmRzIEFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQorIyBvbmx5IGF0IHRoZSBmaXJzdCBvY2N1cmVuY2UgaW4gY29uZmlndXJlLmFjLCBzbyBpZiB0aGUgZmlyc3QgcGxhY2UKKyMgaXQncyBjYWxsZWQgbWlnaHQgYmUgc2tpcHBlZCAoc3VjaCBhcyBpZiBpdCBpcyB3aXRoaW4gYW4gImlmIiwgeW91CisjIGhhdmUgdG8gY2FsbCBQS0dfQ0hFQ0tfRVhJU1RTIG1hbnVhbGx5CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX0VYSVNUU10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIEFDX1JVTl9MT0coWyRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkMSJdKTsgdGhlbgorICBtNF9kZWZhdWx0KFskMl0sIFs6XSkKK200X2lmdmFsbihbJDNdLCBbZWxzZQorICAkM10pZG5sCitmaV0pCisKKyMgX1BLR19DT05GSUcoW1ZBUklBQkxFXSwgW0NPTU1BTkRdLCBbTU9EVUxFU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfUEtHX0NPTkZJR10sCitbaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorICAgIHBrZ19jdl9bXSQxPSIkJDEiCisgZWxpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskM10sCisgICAgICAgICAgICAgICAgICAgICBbcGtnX2N2X1tdJDE9YCRQS0dfQ09ORklHIC0tW10kMiAiJDMiIDI+L2Rldi9udWxsYF0sCisJCSAgICAgW3BrZ19mYWlsZWQ9eWVzXSkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaVtdZG5sCitdKSMgX1BLR19DT05GSUcKKworIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURURdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQoraWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpW11kbmwKK10pIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKworCisjIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCisjIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKKyMKKyMKKyMgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KKyMgUEtHX0NIRUNLX01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUgYW4KKyMgZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmlndXJlLmFjCisjCisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbUEtHX0NIRUNLX01PRFVMRVNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdW19DRkxBR1NdLCBbQyBjb21waWxlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0xJQlNdLCBbbGlua2VyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworcGtnX2ZhaWxlZD1ubworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCitfUEtHX0NPTkZJRyhbJDFdW19DRkxBR1NdLCBbY2ZsYWdzXSwgWyQyXSkKK19QS0dfQ09ORklHKFskMV1bX0xJQlNdLCBbbGlic10sIFskMl0pCisKK200X2RlZmluZShbX1BLR19URVhUXSwgW0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJDFbXV9DRkxBR1MKK2FuZCAkMVtdX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuXSkKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCUFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAiJDIiIDI+JjFgCisgICAgICAgIGVsc2UgCisJICAgICAgICAkMVtdX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzICIkMiIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkJDFbXV9QS0dfRVJST1JTIiA+JkFTX01FU1NBR0VfTE9HX0ZECisKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRVJST1IoCitbUGFja2FnZSByZXF1aXJlbWVudHMgKCQyKSB3ZXJlIG5vdCBtZXQ6CisKKyQkMV9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworX1BLR19URVhUXSlkbmwKKyAgICAgICAgXSkKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCUFDX01TR19SRVNVTFQoW25vXSkKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRkFJTFVSRSgKK1tUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworX1BLR19URVhUCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+Ll0pZG5sCisgICAgICAgIF0pCitlbHNlCisJJDFbXV9DRkxBR1M9JHBrZ19jdl9bXSQxW11fQ0ZMQUdTCisJJDFbXV9MSUJTPSRwa2dfY3ZfW10kMVtdX0xJQlMKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkkMworZmlbXWRubAorXSkjIFBLR19DSEVDS19NT0RVTEVTCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL1JFQURNRS50eHQgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5ZWFjMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvUkVBRE1FLnR4dApAQCAtMCwwICsxLDEyMSBAQAorTGluYXJvIFRvb2xjaGFpbiAyMDEzLjExCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHByZS1idWlsdCB2ZXJzaW9ucyBvZiBMaW5hcm8gR0NDIGFuZCBMaW5hcm8gR0RCCit0aGF0IHRhcmdldCBlaXRoZXIgdGhlIExpbmFybyBFdmFsdWF0aW9uIEJ1aWxkIG9yIGJhcmVtZXRhbCBzeXN0ZW1zLgorCitJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLQorVG8gaW5zdGFsbDoKKyAqIE9uIExpbnV4LCBlbnN1cmUgdGhlIDMyIGJpdCBMU0IgbGlicmFyaWVzIGluc3RhbGxlZAorICogRXh0cmFjdCB0aGUgdGFyYmFsbCB0byBhIGNvbnZlbmllbnQgbG9jYXRpb24gc3VjaCBhcyBgL29wdGAKKyAqIEFkZCB0aGUgYGJpbmAgZGlyZWN0b3J5IHRvIHlvdXIgcGF0aAorCitTZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zLgorCitUaGlzIHBhY2thZ2UgY2FuIGJlIGluc3RhbGxlZCBpbiBhbnkgbG9jYXRpb24uICBDb25zaWRlciB1c2luZyB0aGUKK2luY2x1ZGVkIGBhcm0tKi1wa2ctY29uZmlnYCB0byBtYWtlIGZpbmRpbmcgbGlicmFyaWVzIGFuZCBkZXBlbmRlbmNpZXMKK2Vhc2llci4KKworV2hhdCdzIGluY2x1ZGVkCistLS0tLS0tLS0tLS0tLS0KKyAqIExpbmFybyBHQ0MgNC44IDIwMTMuMTEKKyAqIExpbmFybyBHREIgNy42LjEgMjAxMy4xMAorICogQSBzdGF0aWNhbGx5IGxpbmtlZCBnZGJzZXJ2ZXIgaW4gYWFyY2g2NC1saW51eC1nbnUvZGVidWctcm9vdAorICogQSBzeXN0ZW0gcm9vdAorICogTWFudWFscyB1bmRlciBzaGFyZS9kb2MvCisKK1RoZSBzeXN0ZW0gcm9vdCBjb250YWlucyB0aGUgYmFzaWMgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXMgdG8gbGluaworeW91ciBwcm9ncmFtcyBhZ2FpbnN0LgorCitTdXBwb3J0CistLS0tLS0tCitOZWVkIGhlbHA/ICBBc2sgYSBxdWVzdGlvbiBvbiBodHRwczovL2Fzay5saW5hcm8ub3JnLworCitBbHJlYWR5IG9uIExhdW5jaHBhZD8gIFN1Ym1pdCBhIGJ1ZyBhdCBodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9saW5hcm8tdG9vbGNoYWluLWJpbmFyaWVzCisKK09uIElSQz8gIFNlZSB1cyBvbiAjbGluYXJvIG9uIEZyZWVub2RlLgorCitPdGhlciB3YXlzIHRoYXQgeW91IGNhbiBjb250YWN0IHVzIG9yIGdldCBpbnZvbHZlZCBhcmUgbGlzdGVkIGF0CitodHRwczovL3dpa2kubGluYXJvLm9yZy9HZXR0aW5nSW52b2x2ZWQuCisKK1RhcmdldCBjb21wYXRpYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpczoKKyAqIFJ1bnMgb24gYWxsIEFSTXY4LUEgcHJvZmlsZSBkZXZpY2VzCisgKiAnaGFyZCBmbG9hdCcgY2FsbGluZyBjb252ZW50aW9uCisgKiAyLjE4IDIwMTMuMTAKKyAqIEEgR0NDIDQuOCBzZXJpZXMgbGliZ2NjIGFuZCBsaWJzdGRjKysKKworSG9zdCBjb21wYXRpYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBMaW51eCB2ZXJzaW9uIGlzIHN1cHBvcnRlZCBvbjoKKyAqIFVidW50dSAxMC4wNC4zIGFuZCBsYXRlcgorICogRGViaWFuIDYuMC4yCisgKiBGZWRvcmEgMTYKKyAqIG9wZW5TVVNFIDEyLjEKKyAqIFJlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCBXb3Jrc3RhdGlvbiA1LjcgYW5kIGxhdGVyCisKK2FuZCBzaG91bGQgcnVuIG9uIGFueSBMaW51eCBTdGFuZGFyZCBCYXNlIDMuMCBjb21wYXRpYmxlCitkaXN0cmlidXRpb24uICBJbnN0YWxsaW5nIHRoZSBMU0IgZGVwZW5kcyBvbiB0aGUgZGlzdHJpYnV0aW9uOgorCisgKiBPbiBVYnVudHUgb3IgRGViaWFuLCBydW4gYHN1ZG8gYXB0LWdldCBpbnN0YWxsIGxzYmAKKyAqIE9uIEZlZG9yYSAxNiwgcnVuIGBzdWRvIHl1bSBpbnN0YWxsIHJlZGhhdC1sc2IuaTY4NmAKKyAqIE9uIG9wZW5TVVNFIDEyLCBydW4gYHN1ZG8genlwcGVyIGluc3RhbGwgbHNiLmk1ODZgCisgKiBSZWQgSGF0IDUgaXMgTFNCIGNvbXBhdGlibGUgYnkgZGVmYXVsdAorICogRm9yIG90aGVyIGRpc3RyaWJ1dGlvbnMsIHBsZWFzZSBzZWUgdGhlIGRpc3RyaWJ1dGlvbiBkb2N1bWVudGF0aW9uCisKK1RoaXMgcGFja2FnZSBjb250YWlucyAzMiBiaXQgZXhlY3V0YWJsZXMgdGhhdCBhbHNvIHJ1biBvbiA2NCBiaXQKK2hvc3RzLiAgSW4gc29tZSBjYXNlcyB5b3UgbWF5IG5lZWQgdG8gaW5zdGFsbCB0aGUgMzIgYml0IHN1cHBvcnQKK2xpYnJhcmllcy4gIE9uIFVidW50dSBvciBEZWJpYW4gcnVuIGBzdWRvIGFwdC1nZXQgaW5zdGFsbCBpYTMyLWxpYnNgLgorRm9yIG90aGVyIGRpc3RyaWJ1dGlvbnMsIHBsZWFzZSBzZWUgdGhlIGRpc3RyaWJ1dGlvbiBkb2N1bWVudGF0aW9uLgorCitUaGUgV2luZG93cyB2ZXJzaW9uIGlzIHN1cHBvcnRlZCBvbjoKKyAqIFdpbmRvd3MgWFAgUHJvIFNQMworICogV2luZG93cyBWaXN0YSBCdXNpbmVzcyBTUDIKKyAqIFdpbmRvd3MgNyBQcm8gU1AxCisKK29uIGJvdGggMzIgYml0IGFuZCA2NCBiaXQgaG9zdHMuICBObyBvdGhlciBmaWxlcyBhcmUgcmVxdWlyZWQuCitGb3IgYmVzdCByZXN1bHRzLCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHNwYWNlcyBpbiB0aGUgZGlyZWN0b3J5IG5hbWUuCisKK1NvdXJjZQorLS0tLS0tCitUaGlzIHBhY2thZ2Ugd2FzIGJ1aWx0IHVzaW5nIGFuIFVidW50dSAxMC4wNCBpNjg2IGhvc3QsIGNyb3NzdG9vbC1ORywKK2FuZCB0aGUgc291cmNlIHRhcmJhbGxzIGluY2x1ZGVkIGluIHRoZSBgc3JjYCBhcmNoaXZlLgorCitUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBhcmUgdW50ZXN0ZWQuICBQYXRjaGVzIGFyZSB3ZWxjb21lIQorCitUbyByZXByb2R1Y2UgdGhpcyBidWlsZDoKKyAqIEluc3RhbGwgdGhlIGJ1aWxkIGRlcGVuZGVuY2llczoKKyAgKiBhcHQtZ2V0IGJ1aWxkLWRlcCBnY2MgYmludXRpbHMgZ2RiCisgICogYXB0LWdldCBpbnN0YWxsIGxzYiBsc2ItYnVpbGQtY2MzIGxzYi1hcHBjaGszIGNjYWNoZQorICAqIGFwdC1nZXQgaW5zdGFsbCBnY2MtbWluZ3czMiBnY2MtNC4xIGcrKy00LjEgZ2NjLTQuMS1tdWx0aWxpYiBnKystNC4xLW11bHRpbGliCisgICogYXB0LWdldCBpbnN0YWxsIHRleGxpdmUgZmxpcAorICogQnVpbGRpbmcgcmVxdWlyZXMgL2Jpbi9zaCB0byBiZSBiYXNoLiBTZWUgaHR0cDovL2Nyb3NzdG9vbC1uZy5vcmcvIGZvciBtb3JlCisgKiBEb3dubG9hZCB0aGUgYHNyY2AgYXJjaGl2ZQorICogRG93bmxvYWQgYW5kIGV4dHJhY3QgdGhlIGNyb3NzdG9vbC1ORyB0YXJiYWxsCisgKiBDaGFuZ2UgdG8gdGhlIGNyb3NzdG9vbC1ORyBkaXJlY3RvcnkKKyAqIEV4dHJhY3QgdGhlIGBzcmNgIGFyY2hpdmUgZ2l2aW5nIGB0YXJiYWxscy9iaW51dGlscy0qYCBhbmQgc2ltaWxhcgorICogUnVuIGBtYWtlIC1mIGNvbnRyaWIvbGluYXJvL2J1aWxkLm1rIFRBUkdFVFM9YWFyY2g2NC1saW51eC1nbnVgCisKK1RoZSBidWlsZHMgd2lsbCBlbmQgdXAgaW4gYGJ1aWxkcy8kdGFyZ2V0LSRob3N0YC4gIFNlZQorYGNvbnRyaWIvbGluYXJvL2J1aWxkLm1rYCBmb3IgbW9yZS4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBidWlsZCBkaXJlY3RseSB1c2luZyB0aGUgc2FtcGxlIGNvbmZpZ3VyYXRpb25zLgorU2VlIHRoZSBjcm9zc3Rvb2wtTkcgZG9jdW1lbnRhdGlvbiBhbmQgYHNhbXBsZXMvbGluYXJvLWFybS1saW51eC1nbnVlYWJpaGZgLgorCitBIHBhdGNoZWQgdmVyc2lvbiBvZiB0aGUgTFNCIGlzIHVzZWQgdG8gd29yayBhcm91bmQgY29uZmlndXJhdGlvbiBhbmQKK2hvc3QgR0NDIGNvbXBhdGliaWxpdHkgaXNzdWVzLiAgYGJ1aWxkLm1rYCBidWlsZHMgYW5kIHVzZXMgdGhpcworYXV0b21hdGljYWxseS4gIFNlZSBgY29udHJpYi9saW5hcm8vbHNiL21ha2UtbHNiLnNoYCBmb3IgbWFudWFsIGJ1aWxkcy4KKworTGlua3MKKy0tLS0tCitUaGlzIHByb2plY3Q6CisgaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2xpbmFyby10b29sY2hhaW4tYmluYXJpZXMKKworVW5zdXBwb3J0ZWQgYnVpbGRzOgorIGh0dHBzOi8vbGF1bmNocGFkLm5ldC9saW5hcm8tdG9vbGNoYWluLXVuc3VwcG9ydGVkCisKK1RoZSBMaW5hcm8gdmVyc2lvbiBvZiBjcm9zc3Rvb2wtTkc6CisgaHR0cHM6Ly9jb2RlLmxhdW5jaHBhZC5uZXQvfmxpbmFyby10b29sY2hhaW4tZGV2L2Nyb3NzdG9vbC1uZy9saW5hcm8KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0LURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWYwMDAzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSwxMTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFBcmNoNjQgRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjQUFyY2g2NF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQUFyY2g2NC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBQXJjaDY0LUZsb2F0aW5nLVBvaW50Lmh0bWwjQUFyY2g2NC1GbG9hdGluZy1Qb2ludCIgdGl0bGU9IkFBcmNoNjQgRmxvYXRpbmcgUG9pbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBQXJjaDY0LU9wY29kZXMuaHRtbCNBQXJjaDY0LU9wY29kZXMiIHRpdGxlPSJBQXJjaDY0IE9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQXJjaDY0LURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUFyY2g2NC1PcGNvZGVzLmh0bWwjQUFyY2g2NC1PcGNvZGVzIj5BQXJjaDY0IE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBQXJjaDY0LUZsb2F0aW5nLVBvaW50Lmh0bWwjQUFyY2g2NC1GbG9hdGluZy1Qb2ludCI+QUFyY2g2NCBGbG9hdGluZyBQb2ludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFBcmNoNjRfMDAyZERlcGVuZGVudC5odG1sI0FBcmNoNjRfMDAyZERlcGVuZGVudCI+QUFyY2g2NC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjEuNCBBQXJjaDY0IE1hY2hpbmUgRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1hY2hpbmUtZGlyZWN0aXZlc18wMDJjLUFBcmNoNjQtNTM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtQUFyY2g2NC1tYWNoaW5lLWRpcmVjdGl2ZXMtNTM3Ij48L2E+CisgICAgIDxkbD4KKzwhLS0gQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSAtLT4KKzwhLS0gQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkIgLS0+CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWJzc18wMDdkLWRpcmVjdGl2ZV8wMDJjLUFBcmNoNjQtNTM4Ij48L2E+PGR0Pjxjb2RlPi5ic3M8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIHN3aXRjaGVzIHRvIHRoZSA8Y29kZT4uYnNzPC9jb2RlPiBzZWN0aW9uLgorCisgICAgIDwhLS0gQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MgLS0+CisgICAgIDwhLS0gREREREREREREREREREREREREREREREREREQgLS0+CisgICAgIDwhLS0gRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUUgLS0+CisgICAgIDwhLS0gRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYgLS0+CisgICAgIDwhLS0gR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cgLS0+CisgICAgIDwhLS0gSEhISEhISEhISEhISEhISEhISEhISEhISEggLS0+CisgICAgIDwhLS0gSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUkgLS0+CisgICAgIDwhLS0gSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkogLS0+CisgICAgIDwhLS0gS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0sgLS0+CisgICAgIDwhLS0gTExMTExMTExMTExMTExMTExMTExMTExMTEwgLS0+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVsdG9yZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLUFBcmNoNjQtNTM5Ij48L2E+PGJyPjxkdD48Y29kZT4ubHRvcmc8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIGNhdXNlcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgbGl0ZXJhbCBwb29sIHRvIGJlCitkdW1wZWQgaW50byB0aGUgY3VycmVudCBzZWN0aW9uICh3aGljaCBpcyBhc3N1bWVkIHRvIGJlIHRoZSAudGV4dAorc2VjdGlvbikgYXQgdGhlIGN1cnJlbnQgbG9jYXRpb24gKGFsaWduZWQgdG8gYSB3b3JkIGJvdW5kYXJ5KS4gCis8Y29kZT5HQVM8L2NvZGU+IG1haW50YWlucyBhIHNlcGFyYXRlIGxpdGVyYWwgcG9vbCBmb3IgZWFjaCBzZWN0aW9uIGFuZCBlYWNoCitzdWItc2VjdGlvbi4gIFRoZSA8Y29kZT4ubHRvcmc8L2NvZGU+IGRpcmVjdGl2ZSB3aWxsIG9ubHkgYWZmZWN0IHRoZSBsaXRlcmFsCitwb29sIG9mIHRoZSBjdXJyZW50IHNlY3Rpb24gYW5kIHN1Yi1zZWN0aW9uLiAgQXQgdGhlIGVuZCBvZiBhc3NlbWJseQorYWxsIHJlbWFpbmluZywgdW4tZW1wdHkgbGl0ZXJhbCBwb29scyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZHVtcGVkLgorCisgICAgIDxwPk5vdGUgLSBvbGRlciB2ZXJzaW9ucyBvZiA8Y29kZT5HQVM8L2NvZGU+IHdvdWxkIGR1bXAgdGhlIGN1cnJlbnQgbGl0ZXJhbAorcG9vbCBhbnkgdGltZSBhIHNlY3Rpb24gY2hhbmdlIG9jY3VycmVkLiAgVGhpcyBpcyBubyBsb25nZXIgZG9uZSwgc2luY2UKK2l0IHByZXZlbnRzIGFjY3VyYXRlIGNvbnRyb2wgb2YgdGhlIHBsYWNlbWVudCBvZiBsaXRlcmFsIHBvb2xzLgorCisgICAgIDwhLS0gTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0gLS0+CisgICAgIDwhLS0gTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4gLS0+CisgICAgIDwhLS0gT09PT09PT09PT09PT09PT09PT09PT09PT08gLS0+CisgICAgIDwhLS0gUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAgLS0+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVwb29sXzAwN2QtZGlyZWN0aXZlXzAwMmMtQUFyY2g2NC01NDAiPjwvYT48YnI+PGR0Pjxjb2RlPi5wb29sPC9jb2RlPjxkZD5UaGlzIGlzIGEgc3lub255bSBmb3IgLmx0b3JnLgorCisgICAgIDwhLS0gUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVEgLS0+CisgICAgIDwhLS0gUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIgLS0+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVyZXFfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BQXJjaDY0LTU0MSI+PC9hPjxicj48ZHQ+PHZhcj5uYW1lPC92YXI+PGNvZGU+IC5yZXEgPC9jb2RlPjx2YXI+cmVnaXN0ZXIgbmFtZTwvdmFyPjxkZD5UaGlzIGNyZWF0ZXMgYW4gYWxpYXMgZm9yIDx2YXI+cmVnaXN0ZXIgbmFtZTwvdmFyPiBjYWxsZWQgPHZhcj5uYW1lPC92YXI+LiAgRm9yCitleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgICAgZm9vIC5yZXEgdzAKKzwvcHJlPgorICAgICA8IS0tIFNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTIC0tPgorICAgICA8IS0tIFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUIC0tPgorICAgICA8IS0tIFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVIC0tPgorICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldW5yZXFfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BQXJjaDY0LTU0MiI+PC9hPjxicj48ZHQ+PGNvZGU+LnVucmVxIDwvY29kZT48dmFyPmFsaWFzLW5hbWU8L3Zhcj48ZGQ+VGhpcyB1bmRlZmluZXMgYSByZWdpc3RlciBhbGlhcyB3aGljaCB3YXMgcHJldmlvdXNseSBkZWZpbmVkIHVzaW5nIHRoZQorPGNvZGU+cmVxPC9jb2RlPiBkaXJlY3RpdmUuICBGb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgICAgIGZvbyAucmVxIHcwCisgICAgICAgICAgICAgICAgICAudW5yZXEgZm9vCis8L3ByZT4KKyAgICAgPHA+QW4gZXJyb3Igb2NjdXJzIGlmIHRoZSBuYW1lIGlzIHVuZGVmaW5lZC4gIE5vdGUgLSB0aGlzIHBzZXVkbyBvcCBjYW4KK2JlIHVzZWQgdG8gZGVsZXRlIGJ1aWx0aW4gaW4gcmVnaXN0ZXIgbmFtZSBhbGlhc2VzIChlZyAndzAnKS4gIFRoaXMKK3Nob3VsZCBvbmx5IGJlIGRvbmUgaWYgaXQgaXMgcmVhbGx5IG5lY2Vzc2FyeS4KKworICAgICA8IS0tIFZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWIC0tPgorICAgICA8IS0tIFdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXIC0tPgorICAgICA8IS0tIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIC0tPgorICAgICA8IS0tIFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZIC0tPgorICAgICA8IS0tIFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaIC0tPgorICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1GbG9hdGluZy1Qb2ludC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1GbG9hdGluZy1Qb2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NDg3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0LUZsb2F0aW5nLVBvaW50Lmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUFyY2g2NCBGbG9hdGluZyBQb2ludCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjQUFyY2g2NF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQUFyY2g2NC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBQXJjaDY0LVN5bnRheC5odG1sI0FBcmNoNjQtU3ludGF4IiB0aXRsZT0iQUFyY2g2NCBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNBQXJjaDY0LURpcmVjdGl2ZXMiIHRpdGxlPSJBQXJjaDY0IERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQXJjaDY0LUZsb2F0aW5nLVBvaW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFBcmNoNjQtRGlyZWN0aXZlcy5odG1sI0FBcmNoNjQtRGlyZWN0aXZlcyI+QUFyY2g2NCBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQUFyY2g2NC1TeW50YXguaHRtbCNBQXJjaDY0LVN5bnRheCI+QUFyY2g2NCBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBQXJjaDY0XzAwMmREZXBlbmRlbnQuaHRtbCNBQXJjaDY0XzAwMmREZXBlbmRlbnQiPkFBcmNoNjQtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xLjMgRmxvYXRpbmcgUG9pbnQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLUFBcmNoNjQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS01MzQiPjwvYT48YSBuYW1lPSJpbmRleC1BQXJjaDY0LWZsb2F0aW5nLXBvaW50LV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktNTM1Ij48L2E+VGhlIEFBcmNoNjQgYXJjaGl0ZWN0dXJlIHVzZXMgPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPiBmbG9hdGluZy1wb2ludCBudW1iZXJzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0LU1hcHBpbmctU3ltYm9scy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1NYXBwaW5nLVN5bWJvbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjZjNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1NYXBwaW5nLVN5bWJvbHMuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BQXJjaDY0IE1hcHBpbmcgU3ltYm9scyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjQUFyY2g2NF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQUFyY2g2NC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBQXJjaDY0LU9wY29kZXMuaHRtbCNBQXJjaDY0LU9wY29kZXMiIHRpdGxlPSJBQXJjaDY0IE9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQXJjaDY0LU1hcHBpbmctU3ltYm9scyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFBcmNoNjQtT3Bjb2Rlcy5odG1sI0FBcmNoNjQtT3Bjb2RlcyI+QUFyY2g2NCBPcGNvZGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjQUFyY2g2NF8wMDJkRGVwZW5kZW50Ij5BQXJjaDY0LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMS42IE1hcHBpbmcgU3ltYm9sczwvaDQ+CisKKzxwPlRoZSBBQXJjaDY0IEVMRiBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoYXQgc3BlY2lhbCBzeW1ib2xzIGJlIGluc2VydGVkCitpbnRvIG9iamVjdCBmaWxlcyB0byBtYXJrIGNlcnRhaW4gZmVhdHVyZXM6CisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0eF8wMDdkLTU0NiI+PC9hPgorPGRsPjxkdD48Y29kZT4keDwvY29kZT48ZGQ+QXQgdGhlIHN0YXJ0IG9mIGEgcmVnaW9uIG9mIGNvZGUgY29udGFpbmluZyBBQXJjaDY0IGluc3RydWN0aW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0ZF8wMDdkLTU0NyI+PC9hPjxicj48ZHQ+PGNvZGU+JGQ8L2NvZGU+PGRkPkF0IHRoZSBzdGFydCBvZiBhIHJlZ2lvbiBvZiBkYXRhLgorCisgICA8L2RsPgorCis8IS0tIENvcHlyaWdodCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA5LCAyMDExIC0tPgorPCEtLSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FBcmNoNjQtT3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1PcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEwOTIyZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FBcmNoNjQtT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFBcmNoNjQgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjQUFyY2g2NF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQUFyY2g2NC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNBQXJjaDY0LURpcmVjdGl2ZXMiIHRpdGxlPSJBQXJjaDY0IERpcmVjdGl2ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBQXJjaDY0LU1hcHBpbmctU3ltYm9scy5odG1sI0FBcmNoNjQtTWFwcGluZy1TeW1ib2xzIiB0aXRsZT0iQUFyY2g2NCBNYXBwaW5nIFN5bWJvbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQXJjaDY0LU9wY29kZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUFyY2g2NC1NYXBwaW5nLVN5bWJvbHMuaHRtbCNBQXJjaDY0LU1hcHBpbmctU3ltYm9scyI+QUFyY2g2NCBNYXBwaW5nIFN5bWJvbHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNBQXJjaDY0LURpcmVjdGl2ZXMiPkFBcmNoNjQgRGlyZWN0aXZlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFBcmNoNjRfMDAyZERlcGVuZGVudC5odG1sI0FBcmNoNjRfMDAyZERlcGVuZGVudCI+QUFyY2g2NC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjEuNSBPcGNvZGVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtQUFyY2g2NC1vcGNvZGVzLTU0MyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZXMtZm9yLUFBcmNoNjQtNTQ0Ij48L2E+PGNvZGU+YXM8L2NvZGU+IGltcGxlbWVudHMgYWxsIHRoZSBzdGFuZGFyZCBBQXJjaDY0IG9wY29kZXMuICBJdCBhbHNvCitpbXBsZW1lbnRzIHNldmVyYWwgcHNldWRvIG9wY29kZXMsIGluY2x1ZGluZyBzZXZlcmFsIHN5bnRoZXRpYyBsb2FkCitpbnN0cnVjdGlvbnMuCisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkxEUi1yZWdfMDAyY18wMDNkXzAwM2NleHByXzAwM2VfMDA3ZC1wc2V1ZG8tb3BfMDAyYy1BQXJjaDY0LTU0NSI+PC9hPgorPGRsPjxkdD48Y29kZT5MRFIgPTwvY29kZT48ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgbGRyICZsdDtyZWdpc3RlciZndDsgLCA9Jmx0O2V4cHJlc3Npb24mZ3Q7Cis8L3ByZT4KKyAgICAgPHA+VGhlIGNvbnN0YW50IGV4cHJlc3Npb24gd2lsbCBiZSBwbGFjZWQgaW50byB0aGUgbmVhcmVzdCBsaXRlcmFsIHBvb2wgKGlmIGl0IG5vdAorYWxyZWFkeSB0aGVyZSkgYW5kIGEgUEMtcmVsYXRpdmUgTERSIGluc3RydWN0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkLgorCisgICA8L2RsPgorCisgICA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQUFyY2g2NCBpbnN0cnVjdGlvbiBzZXQgYW5kIGFzc2VtYmx5IGxhbmd1YWdlCitub3RhdGlvbiwgc2VlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QVJNdjggSW5zdHJ1Y3Rpb24gU2V0IE92ZXJ2aWV3PC9zcGFuPjwvc2FtcD4mcnNxdW87IGF2YWlsYWJsZSBhdAorPGEgaHJlZj0iaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbSI+aHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbTwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FBcmNoNjQtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyMmZlYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FBcmNoNjQtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFBcmNoNjQgT3B0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjQUFyY2g2NF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQUFyY2g2NC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBQXJjaDY0LVN5bnRheC5odG1sI0FBcmNoNjQtU3ludGF4IiB0aXRsZT0iQUFyY2g2NCBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQXJjaDY0LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUFyY2g2NC1TeW50YXguaHRtbCNBQXJjaDY0LVN5bnRheCI+QUFyY2g2NCBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBQXJjaDY0XzAwMmREZXBlbmRlbnQuaHRtbCNBQXJjaDY0XzAwMmREZXBlbmRlbnQiPkFBcmNoNjQtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xLjEgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFBcmNoNjQtb3B0aW9ucy1fMDAyOG5vbmVfMDAyOS01MTciPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zLWZvci1BQXJjaDY0LV8wMDI4bm9uZV8wMDI5LTUxOCI+PC9hPgorPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkRUJfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQUFyY2g2NC01MTkiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LUVCPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUgYXNzZW1ibGVyIHNob3VsZAorYmUgbWFya2VkIGFzIGJlaW5nIGVuY29kZWQgZm9yIGEgYmlnLWVuZGlhbiBwcm9jZXNzb3IuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZEVMXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFBcmNoNjQtNTIwIj48L2E+PGJyPjxkdD48Y29kZT4tRUw8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBhc3NlbWJsZXIgc2hvdWxkCitiZSBtYXJrZWQgYXMgYmVpbmcgZW5jb2RlZCBmb3IgYSBsaXR0bGUtZW5kaWFuIHByb2Nlc3Nvci4KKworICAgPC9kbD4KKyAgIDwhLS0gbWFuIGVuZCAtLT4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NC1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FBcmNoNjQtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyM2JjNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FBcmNoNjQtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUFyY2g2NCBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFBcmNoNjRfMDAyZERlcGVuZGVudC5odG1sI0FBcmNoNjRfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFBcmNoNjQtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIiB0aXRsZT0iQUFyY2g2NCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQUFyY2g2NC1GbG9hdGluZy1Qb2ludC5odG1sI0FBcmNoNjQtRmxvYXRpbmctUG9pbnQiIHRpdGxlPSJBQXJjaDY0IEZsb2F0aW5nIFBvaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQUFyY2g2NC1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUFyY2g2NC1GbG9hdGluZy1Qb2ludC5odG1sI0FBcmNoNjQtRmxvYXRpbmctUG9pbnQiPkFBcmNoNjQgRmxvYXRpbmcgUG9pbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFBcmNoNjRfMDAyZERlcGVuZGVudC5odG1sI0FBcmNoNjRfMDAyZERlcGVuZGVudCI+QUFyY2g2NC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjEuMiBTeW50YXg8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQUFyY2g2NF8wMDJkQ2hhcnMuaHRtbCNBQXJjaDY0XzAwMmRDaGFycyI+QUFyY2g2NC1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkFBcmNoNjRfMDAyZFJlZ3MuaHRtbCNBQXJjaDY0XzAwMmRSZWdzIj5BQXJjaDY0LVJlZ3M8L2E+OiAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucy5odG1sI0FBcmNoNjRfMDAyZFJlbG9jYXRpb25zIj5BQXJjaDY0LVJlbG9jYXRpb25zPC9hPjogCSAgICAgUmVsb2NhdGlvbnMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FBcmNoNjRfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0XzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOGI4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0XzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFBcmNoNjQtQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFBcmNoNjQtU3ludGF4Lmh0bWwjQUFyY2g2NC1TeW50YXgiIHRpdGxlPSJBQXJjaDY0IFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFBcmNoNjRfMDAyZFJlZ3MuaHRtbCNBQXJjaDY0XzAwMmRSZWdzIiB0aXRsZT0iQUFyY2g2NC1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQUFyY2g2NC1DaGFycyI+PC9hPgorPGEgbmFtZT0iQUFyY2g2NF8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUFyY2g2NF8wMDJkUmVncy5odG1sI0FBcmNoNjRfMDAyZFJlZ3MiPkFBcmNoNjQtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFBcmNoNjQtU3ludGF4Lmh0bWwjQUFyY2g2NC1TeW50YXgiPkFBcmNoNjQgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xLjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtQUFyY2g2NC01MjEiPjwvYT48YSBuYW1lPSJpbmRleC1BQXJjaDY0LWxpbmUtY29tbWVudC1jaGFyYWN0ZXItNTIyIj48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vLzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQKK3RoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUuICBJZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzCit0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSwgdGhlIHdob2xlIGxpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtQUFyY2g2NC01MjMiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtQUFyY2g2NC01MjQiPjwvYT48YSBuYW1lPSJpbmRleC1BQXJjaDY0LWxpbmUtc2VwYXJhdG9yLTUyNSI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBuZXdsaW5lIHRvIHNlcGFyYXRlCitzdGF0ZW1lbnRzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1pbW1lZGlhdGUtY2hhcmFjdGVyXzAwMmMtQUFyY2g2NC01MjYiPjwvYT48YSBuYW1lPSJpbmRleC1BQXJjaDY0LWltbWVkaWF0ZS1jaGFyYWN0ZXItNTI3Ij48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW4gYmUgb3B0aW9uYWxseSB1c2VkIHRvIGluZGljYXRlIGltbWVkaWF0ZSBvcGVyYW5kcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0XzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDZjNDlhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUFyY2g2NC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFscGhhXzAwMmREZXBlbmRlbnQuaHRtbCNBbHBoYV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQWxwaGEtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQUFyY2g2NC1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IkFBcmNoNjRfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCI+QWxwaGEtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjEgQUFyY2g2NCBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1BQXJjaDY0LXN1cHBvcnQtNTE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtVGh1bWItc3VwcG9ydC01MTYiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI0FBcmNoNjQtT3B0aW9ucyI+QUFyY2g2NCBPcHRpb25zPC9hPjogICAgICAgICAgICAgICBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBQXJjaDY0LVN5bnRheC5odG1sI0FBcmNoNjQtU3ludGF4Ij5BQXJjaDY0IFN5bnRheDwvYT46ICAgICAgICAgICAgICAgIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iQUFyY2g2NC1GbG9hdGluZy1Qb2ludC5odG1sI0FBcmNoNjQtRmxvYXRpbmctUG9pbnQiPkFBcmNoNjQgRmxvYXRpbmcgUG9pbnQ8L2E+OiAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkFBcmNoNjQtRGlyZWN0aXZlcy5odG1sI0FBcmNoNjQtRGlyZWN0aXZlcyI+QUFyY2g2NCBEaXJlY3RpdmVzPC9hPjogICAgICAgICAgICBBQXJjaDY0IE1hY2hpbmUgRGlyZWN0aXZlcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iQUFyY2g2NC1PcGNvZGVzLmh0bWwjQUFyY2g2NC1PcGNvZGVzIj5BQXJjaDY0IE9wY29kZXM8L2E+OiAgICAgICAgICAgICAgIE9wY29kZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkFBcmNoNjQtTWFwcGluZy1TeW1ib2xzLmh0bWwjQUFyY2g2NC1NYXBwaW5nLVN5bWJvbHMiPkFBcmNoNjQgTWFwcGluZyBTeW1ib2xzPC9hPjogICAgICAgTWFwcGluZyBTeW1ib2xzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0XzAwMmRSZWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0XzAwMmRSZWdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UyYTU1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FBcmNoNjRfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BQXJjaDY0LVJlZ3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFBcmNoNjQtU3ludGF4Lmh0bWwjQUFyY2g2NC1TeW50YXgiIHRpdGxlPSJBQXJjaDY0IFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFBcmNoNjRfMDAyZENoYXJzLmh0bWwjQUFyY2g2NF8wMDJkQ2hhcnMiIHRpdGxlPSJBQXJjaDY0LUNoYXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMuaHRtbCNBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucyIgdGl0bGU9IkFBcmNoNjQtUmVsb2NhdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQXJjaDY0LVJlZ3MiPjwvYT4KKzxhIG5hbWU9IkFBcmNoNjRfMDAyZFJlZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMuaHRtbCNBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucyI+QUFyY2g2NC1SZWxvY2F0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFBcmNoNjRfMDAyZENoYXJzLmh0bWwjQUFyY2g2NF8wMDJkQ2hhcnMiPkFBcmNoNjQtQ2hhcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBQXJjaDY0LVN5bnRheC5odG1sI0FBcmNoNjQtU3ludGF4Ij5BQXJjaDY0IFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMS4yLjIgUmVnaXN0ZXIgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1BQXJjaDY0LXJlZ2lzdGVyLW5hbWVzLTUyOCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtQUFyY2g2NC01MjkiPjwvYT5QbGVhc2UgcmVmZXIgdG8gdGhlIHNlY3Rpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40LjQgUmVnaXN0ZXIgTmFtZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb2YKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QVJNdjggSW5zdHJ1Y3Rpb24gU2V0IE92ZXJ2aWV3PC9zcGFuPjwvc2FtcD4mcnNxdW87LCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKzxhIGhyZWY9Imh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20iPmh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb208L2E+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BQXJjaDY0XzAwMmRSZWxvY2F0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZhMWIwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMuaHRtbApAQCAtMCwwICsxLDgzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BQXJjaDY0LVJlbG9jYXRpb25zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBQXJjaDY0LVN5bnRheC5odG1sI0FBcmNoNjQtU3ludGF4IiB0aXRsZT0iQUFyY2g2NCBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBQXJjaDY0XzAwMmRSZWdzLmh0bWwjQUFyY2g2NF8wMDJkUmVncyIgdGl0bGU9IkFBcmNoNjQtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFBcmNoNjQtUmVsb2NhdGlvbnMiPjwvYT4KKzxhIG5hbWU9IkFBcmNoNjRfMDAyZFJlbG9jYXRpb25zIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQUFyY2g2NF8wMDJkUmVncy5odG1sI0FBcmNoNjRfMDAyZFJlZ3MiPkFBcmNoNjQtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFBcmNoNjQtU3ludGF4Lmh0bWwjQUFyY2g2NC1TeW50YXgiPkFBcmNoNjQgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xLjIuMyBSZWxvY2F0aW9uczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LXJlbG9jYXRpb25zXzAwMmMtQUFyY2g2NC01MzAiPjwvYT48YSBuYW1lPSJpbmRleC1BQXJjaDY0LXJlbG9jYXRpb25zLTUzMSI+PC9hPjxhIG5hbWU9ImluZGV4LU1PVk5fMDAyYy1NT1ZaLWFuZC1NT1ZLLWdyb3VwLXJlbG9jYXRpb25zXzAwMmMtQUFyY2g2NC01MzIiPjwvYT5SZWxvY2F0aW9ucyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5NT1ZaPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk1PVks8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBnZW5lcmF0ZWQKK2J5IHByZWZpeGluZyB0aGUgbGFiZWwgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM6YWJzX2cyOjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBldGMuIAorRm9yIGV4YW1wbGUgdG8gbG9hZCB0aGUgNDgtYml0IGFic29sdXRlIGFkZHJlc3Mgb2YgPHZhcj5mb288L3Zhcj4gaW50byB4MDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgbW92eiB4MCwgIzphYnNfZzI6Zm9vCQkvLyBiaXRzIDMyLTQ3LCBvdmVyZmxvdyBjaGVjaworICAgICAgICAgICAgIG1vdmsgeDAsICM6YWJzX2cxX25jOmZvbwkvLyBiaXRzIDE2LTMxLCBubyBvdmVyZmxvdyBjaGVjaworICAgICAgICAgICAgIG1vdmsgeDAsICM6YWJzX2cwX25jOmZvbwkvLyBiaXRzICAwLTE1LCBubyBvdmVyZmxvdyBjaGVjaworPC9wcmU+CisgICA8cD48YSBuYW1lPSJpbmRleC1BRFJQXzAwMmMtQUREXzAwMmMtTERSXzAwMmZTVFItZ3JvdXAtcmVsb2NhdGlvbnNfMDAyYy1BQXJjaDY0LTUzMyI+PC9hPlJlbG9jYXRpb25zIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkFEUlA8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkFERDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MRFI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TVFI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2luc3RydWN0aW9ucyBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHByZWZpeGluZyB0aGUgbGFiZWwgd2l0aAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jOnBnX2hpMjE6PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM6bG8xMjo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVzcGVjdGl2ZWx5LgorCisgICA8cD5Gb3IgZXhhbXBsZSB0byB1c2UgMzMtYml0ICgrLy00R0IpIHBjLXJlbGF0aXZlIGFkZHJlc3NpbmcgdG8KK2xvYWQgdGhlIGFkZHJlc3Mgb2YgPHZhcj5mb288L3Zhcj4gaW50byB4MDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgYWRycCB4MCwgIzpwZ19oaTIxOmZvbworICAgICAgICAgICAgIGFkZCAgeDAsIHgwLCAjOmxvMTI6Zm9vCis8L3ByZT4KKyAgIDxwPk9yIHRvIGxvYWQgdGhlIHZhbHVlIG9mIDx2YXI+Zm9vPC92YXI+IGludG8geDA6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIGFkcnAgeDAsICM6cGdfaGkyMTpmb28KKyAgICAgICAgICAgICBsZHIgIHgwLCBbeDAsICM6bG8xMjpmb29dCis8L3ByZT4KKyAgIDxwPk5vdGUgdGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM6cGdfaGkyMTo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgb3B0aW9uYWwuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIGFkcnAgeDAsIGZvbworPC9wcmU+CisgICA8cD5pcyBlcXVpdmFsZW50IHRvCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIGFkcnAgeDAsICM6cGdfaGkyMTpmb28KKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQUJPUlQtXzAwMjhDT0ZGXzAwMjkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FCT1JULV8wMDI4Q09GRl8wMDI5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjZTA2NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FCT1JULV8wMDI4Q09GRl8wMDI5Lmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUJPUlQgKENPRkYpIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBYm9ydC5odG1sI0Fib3J0IiB0aXRsZT0iQWJvcnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBbGlnbi5odG1sI0FsaWduIiB0aXRsZT0iQWxpZ24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQk9SVC0oQ09GRikiPjwvYT4KKzxhIG5hbWU9IkFCT1JULV8wMDI4Q09GRl8wMDI5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFsaWduLmh0bWwjQWxpZ24iPkFsaWduPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQWJvcnQuaHRtbCNBYm9ydCI+QWJvcnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMiA8Y29kZT4uQUJPUlQ8L2NvZGU+IChDT0ZGKTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiQUJPUlRfMDA3ZC1kaXJlY3RpdmUtMjc0Ij48L2E+V2hlbiBwcm9kdWNpbmcgQ09GRiBvdXRwdXQsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGFjY2VwdHMgdGhpcyBkaXJlY3RpdmUgYXMgYQorc3lub255bSBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYWJvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSQy1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkMtRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNjVmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkMtRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsMjA0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUkMgRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNBUkNfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFSQy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBUkMtRmxvYXRpbmctUG9pbnQuaHRtbCNBUkMtRmxvYXRpbmctUG9pbnQiIHRpdGxlPSJBUkMgRmxvYXRpbmcgUG9pbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBUkMtT3Bjb2Rlcy5odG1sI0FSQy1PcGNvZGVzIiB0aXRsZT0iQVJDIE9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUkMtRGlyZWN0aXZlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBUkMtT3Bjb2Rlcy5odG1sI0FSQy1PcGNvZGVzIj5BUkMgT3Bjb2RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFSQy1GbG9hdGluZy1Qb2ludC5odG1sI0FSQy1GbG9hdGluZy1Qb2ludCI+QVJDIEZsb2F0aW5nIFBvaW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNBUkNfMDAyZERlcGVuZGVudCI+QVJDLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMy40IEFSQyBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1BUkMtNTk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtQVJDLW1hY2hpbmUtZGlyZWN0aXZlcy01OTYiPjwvYT5UaGUgQVJDIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbAorbWFjaGluZSBkaXJlY3RpdmVzOgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2IyYnl0ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy01OTciPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LjJieXRlIDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+PGRkPipUT0RPKgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiM2J5dGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUkMtNTk4Ij48L2E+PGJyPjxkdD48Y29kZT4uM2J5dGUgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj48ZGQ+KlRPRE8qCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2I0Ynl0ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy01OTkiPjwvYT48YnI+PGR0Pjxjb2RlPi40Ynl0ZSA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPjxkZD4qVE9ETyoKKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmV4dEF1eFJlZ2lzdGVyXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJDLTYwMCI+PC9hPjxicj48ZHQ+PGNvZGU+LmV4dEF1eFJlZ2lzdGVyIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YWRkcmVzczwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5tb2RlPC92YXI+PGRkPlRoZSBBUkN0YW5nZW50IEE0IGhhcyBleHRlbnNpYmxlIGF1eGlsaWFyeSByZWdpc3RlciBzcGFjZS4gIFRoZQorYXV4aWxpYXJ5IHJlZ2lzdGVycyBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgYXNzZW1ibGVyIHNvdXJjZSBjb2RlIGJ5Cit1c2luZyB0aGlzIGRpcmVjdGl2ZS4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIDx2YXI+bmFtZTwvdmFyPiBvZiB0aGUKK25ldyBhdXhpYWxscnkgcmVnaXN0ZXIuICBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgPHZhcj5hZGRyZXNzPC92YXI+IG9mCit0aGUgcmVnaXN0ZXIgaW4gdGhlIGF1eGlsaWFyeSByZWdpc3RlciBtZW1vcnkgbWFwIGZvciB0aGUgdmFyaWFudCBvZgordGhlIEFSQy4gIFRoZSB0aGlyZCBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSA8dmFyPm1vZGU8L3Zhcj4gaW4gd2hpY2ggdGhlCityZWdpc3RlciBjYW4gYmUgb3BlcmF0ZWQgaXMgYW5kIGl0IGNhbiBiZSBvbmUgb2Y6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+ciAgICAgICAgICAocmVhZG9ubHkpPC9jb2RlPjxicj48ZHQ+PGNvZGU+dyAgICAgICAgICAod3JpdGUgb25seSk8L2NvZGU+PGJyPjxkdD48Y29kZT5yfHcgICAgICAgIChyZWFkIG9yIHdyaXRlKTwvY29kZT48ZGQ+PC9kbD4KKworICAgICA8cD5Gb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIC5leHRBdXhSZWdpc3RlciBtdWxoaSwweDEyLHcKKzwvcHJlPgorICAgICA8cD5UaGlzIHNwZWNpZmllcyBhbiBleHRlbnNpb24gYXV4aWxpYXJ5IHJlZ2lzdGVyIGNhbGxlZCA8ZW0+bXVsaGk8L2VtPgord2hpY2ggaXMgYXQgYWRkcmVzcyAweDEyIGluIHRoZSBtZW1vcnkgc3BhY2UgYW5kIHdoaWNoIGlzIG9ubHkKK3dyaXRhYmxlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXh0Q29uZENvZGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUkMtNjAxIj48L2E+PGJyPjxkdD48Y29kZT4uZXh0Q29uZENvZGUgPC9jb2RlPjx2YXI+c3VmZml4PC92YXI+PGNvZGU+LDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGRkPlRoZSBjb25kaXRpb24gY29kZXMgb24gdGhlIEFSQ3RhbmdlbnQgQTQgYXJlIGV4dGVuc2libGUgYW5kIGNhbiBiZQorc3BlY2lmaWVkIGJ5IG1lYW5zIG9mIHRoaXMgYXNzZW1ibGVyIGRpcmVjdGl2ZS4gIFRoZXkgYXJlIHNwZWNpZmllZAorYnkgdGhlIHN1ZmZpeCBhbmQgdGhlIHZhbHVlIGZvciB0aGUgY29uZGl0aW9uIGNvZGUuICBUaGV5IGNhbiBiZSB1c2VkIHRvCitzcGVjaWZ5IGV4dHJhIGNvbmRpdGlvbiBjb2RlcyB3aXRoIGFueSB2YWx1ZXMuICBGb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIC5leHRDb25kQ29kZSBpc19idXN5LDB4MTQKKyAgICAgICAgICAKKyAgICAgICAgICAgICBhZGQuaXNfYnVzeSAgcjEscjIscjMKKyAgICAgICAgICAgICBiaXNfYnVzeSAgICAgX21haW4KKzwvcHJlPgorICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmV4dENvcmVSZWdpc3Rlcl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy02MDIiPjwvYT48YnI+PGR0Pjxjb2RlPi5leHRDb3JlUmVnaXN0ZXIgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5yZWdudW08L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+bW9kZTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5zaG9ydGN1dDwvdmFyPjxkZD5TcGVjaWZpZXMgYW4gZXh0ZW5zaW9uIGNvcmUgcmVnaXN0ZXIgPHZhcj5uYW1lPC92YXI+IGZvciB0aGUgYXBwbGljYXRpb24uIAorVGhpcyBhbGxvd3MgYSByZWdpc3RlciA8dmFyPm5hbWU8L3Zhcj4gd2l0aCBhIHZhbGlkIDx2YXI+cmVnbnVtPC92YXI+IGJldHdlZW4gMAorYW5kIDYwLCB3aXRoIHRoZSBmb2xsb3dpbmcgYXMgdmFsaWQgdmFsdWVzIGZvciA8dmFyPm1vZGU8L3Zhcj4KKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PGVtPnI8L2VtPjxzcGFuIGNsYXNzPSJzYW1wIj4gICAocmVhZG9ubHkpPC9zcGFuPjwvc2FtcD4mcnNxdW87PGJyPjxkdD4mbHNxdW87PHNhbXA+PGVtPnc8L2VtPjxzcGFuIGNsYXNzPSJzYW1wIj4gICAod3JpdGUgb25seSk8L3NwYW4+PC9zYW1wPiZyc3F1bzs8YnI+PGR0PiZsc3F1bzs8c2FtcD48ZW0+cnx3PC9lbT48c3BhbiBjbGFzcz0ic2FtcCI+IChyZWFkIG9yIHdyaXRlKTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48L2RsPgorCisgICAgIDxwPlRoZSBvdGhlciBwYXJhbWV0ZXIgZ2l2ZXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVnaXN0ZXIgaGF2aW5nIGEKKzx2YXI+c2hvcnRjdXQ8L3Zhcj4gaW4gdGhlIHBpcGVsaW5lLiAgVGhlIHZhbGlkIHZhbHVlcyBhcmU6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+Y2FuX3Nob3J0Y3V0PC9jb2RlPjxicj48ZHQ+PGNvZGU+Y2Fubm90X3Nob3J0Y3V0PC9jb2RlPjxkZD48L2RsPgorCisgICAgIDxwPkZvciBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgLmV4dENvcmVSZWdpc3RlciBtbG8sNTcscixjYW5fc2hvcnRjdXQKKzwvcHJlPgorICAgICA8cD5UaGlzIGRlZmluZXMgYW4gZXh0ZW5zaW9uIGNvcmUgcmVnaXN0ZXIgbWxvIHdpdGggdGhlIHZhbHVlIDU3IHdoaWNoCitjYW4gc2hvcnRjdXQgdGhlIHBpcGVsaW5lLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXh0SW5zdHJ1Y3Rpb25fMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUkMtNjAzIj48L2E+PGJyPjxkdD48Y29kZT4uZXh0SW5zdHJ1Y3Rpb24gPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5vcGNvZGU8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+c3Vib3Bjb2RlPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPnN1ZmZpeGNsYXNzPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPnN5bnRheGNsYXNzPC92YXI+PGRkPlRoZSBBUkN0YW5nZW50IEE0IGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMuIAorVGhlIGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMgYXJlIG5vdCBtYWNyb3MuICBUaGUgYXNzZW1ibGVyIGNyZWF0ZXMKK2VuY29kaW5ncyBmb3IgdXNlIG9mIHRoZXNlIGluc3RydWN0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24KK2J5IHRoZSB1c2VyLiAgVGhlIHBhcmFtZXRlcnMgYXJlOgorCisgICAgICAgICAgPGRsPgorPGR0PiZidWxsOzx2YXI+bmFtZTwvdmFyPjxkZD5OYW1lIG9mIHRoZSBleHRlbnNpb24gaW5zdHJ1Y3Rpb24KKworICAgICAgICAgIDxicj48ZHQ+JmJ1bGw7PHZhcj5vcGNvZGU8L3Zhcj48ZGQ+T3Bjb2RlIHRvIGJlIHVzZWQuIChCaXRzIDI3OjMxIGluIHRoZSBlbmNvZGluZykuICBWYWxpZCB2YWx1ZXMKKzB4MTAtMHgxZiBvciAweDAzCisKKyAgICAgICAgICA8YnI+PGR0PiZidWxsOzx2YXI+c3Vib3Bjb2RlPC92YXI+PGRkPlN1Ym9wY29kZSB0byBiZSB1c2VkLiAgVmFsaWQgdmFsdWVzIGFyZSBmcm9tIDB4MDktMHgzZi4gIEhvd2V2ZXIgdGhlCitjb3JyZWN0IHZhbHVlIGFsc28gZGVwZW5kcyBvbiA8dmFyPnN5bnRheGNsYXNzPC92YXI+CisKKyAgICAgICAgICA8YnI+PGR0PiZidWxsOzx2YXI+c3VmZml4Y2xhc3M8L3Zhcj48ZGQ+RGV0ZXJtaW5lcyB0aGUga2luZHMgb2Ygc3VmZml4ZXMgdG8gYmUgYWxsb3dlZC4gIFZhbGlkIHZhbHVlcyBhcmUKKzxjb2RlPlNVRkZJWF9OT05FPC9jb2RlPiwgPGNvZGU+U1VGRklYX0NPTkQ8L2NvZGU+LAorPGNvZGU+U1VGRklYX0ZMQUc8L2NvZGU+IHdoaWNoIGluZGljYXRlcyB0aGUgYWJzZW5jZSBvciBwcmVzZW5jZSBvZgorY29uZGl0aW9uYWwgc3VmZml4ZXMgYW5kIGZsYWcgc2V0dGluZyBieSB0aGUgZXh0ZW5zaW9uIGluc3RydWN0aW9uLiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSB0aGF0IGFuIGluc3RydWN0aW9uIHNldHMgdGhlIGZsYWdzIGFuZAoraXMgY29uZGl0aW9uYWwgYnkgdXNpbmcgPGNvZGU+U1VGRklYX0NPREU8L2NvZGU+IHwgPGNvZGU+U1VGRklYX0ZMQUc8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD4mYnVsbDs8dmFyPnN5bnRheGNsYXNzPC92YXI+PGRkPkRldGVybWluZXMgdGhlIHN5bnRheCBjbGFzcyBmb3IgdGhlIGluc3RydWN0aW9uLiAgSXQgY2FuIGhhdmUgdGhlCitmb2xsb3dpbmcgdmFsdWVzOgorCisgICAgICAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+U1lOVEFYXzJPUDo8L2NvZGU+PGRkPjIgT3BlcmFuZCBJbnN0cnVjdGlvbgorPGJyPjxkdD48Y29kZT5TWU5UQVhfM09QOjwvY29kZT48ZGQ+MyBPcGVyYW5kIEluc3RydWN0aW9uCis8L2RsPgorCisgICAgICAgICAgPHA+SW4gYWRkaXRpb24gdGhlcmUgY291bGQgYmUgbW9kaWZpZXJzIGZvciB0aGUgc3ludGF4IGNsYXNzIGFzIGRlc2NyaWJlZAorYmVsb3c6CisKKyAgICAgICAgICAgICAgIDx1bD4KK1N5bnRheCBDbGFzcyBNb2RpZmllcnMgYXJlOgorCisgICAgICAgICAgICAgICA8bGk+PGNvZGU+T1AxX01VU1RfQkVfSU1NPC9jb2RlPjoKK01vZGlmaWVzIHN5bnRheCBjbGFzcyBTWU5UQVhfM09QLCAgc3BlY2lmeWluZyB0aGF0IHRoZSBmaXJzdCBvcGVyYW5kCitvZiBhIHRocmVlLW9wZXJhbmQgaW5zdHJ1Y3Rpb24gbXVzdCBiZSBhbiBpbW1lZGlhdGUgKGkuZS4sIHRoZSByZXN1bHQKK2lzIGRpc2NhcmRlZCkuICBPUDFfTVVTVF9CRV9JTU0gaXMgdXNlZCBieSBiaXR3aXNlIE9SaW5nIGl0IHdpdGgKK1NZTlRBWF8zT1AgYXMgZ2l2ZW4gaW4gdGhlIGV4YW1wbGUgYmVsb3cuICBUaGlzIGNvdWxkIHVzdWFsbHkgYmUgdXNlZAordG8gc2V0IHRoZSBmbGFncyB1c2luZyBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgYW5kIG5vdCByZXRhaW4gcmVzdWx0cy4KKworICAgICAgICAgICAgICAgPGxpPjxjb2RlPk9QMV9JTU1fSU1QTElFRDwvY29kZT46CitNb2RpZmllcyBzeW50YXggY2xhc3MgU1lOVEFYXzIwUCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhlcmUgaXMgYW4KK2ltcGxpZWQgaW1tZWRpYXRlIGRlc3RpbmF0aW9uIG9wZXJhbmQgd2hpY2ggZG9lcyBub3QgYXBwZWFyIGluIHRoZQorc3ludGF4LiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBzb3VyY2UgY29kZSBjb250YWlucyBhbiBpbnN0cnVjdGlvbiBsaWtlOgorCisgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgICAgICAgaW5zdCByMSxyMgorPC9wcmU+CisgICAgICAgICAgICAgICA8cD5pdCByZWFsbHkgbWVhbnMgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gaW1wbGllZCBpbW1lZGlhdGUgKHRoYXQKK2lzLCB0aGUgcmVzdWx0IGlzIGRpc2NhcmRlZCkuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRob3VnaCB0aGUgc291cmNlCitjb2RlIHdlcmU6IGluc3QgMCxyMSxyMi4gIFlvdSB1c2UgT1AxX0lNTV9JTVBMSUVEIGJ5IGJpdHdpc2UgT1JpbmcgaXQKK3dpdGggU1lOVEFYXzIwUC4KKworICAgICAgICAgIDwvdWw+CisgICAgICAgICAgPC9kbD4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwgZGVmaW5pbmcgNjQtYml0IG11bHRpcGxpZXIgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZHM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLmV4dEluc3RydWN0aW9uIG1wNjQsMHgxNCwweDAsU1VGRklYX0NPTkQgfCBTVUZGSVhfRkxBRyAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNZTlRBWF8zT1B8T1AxX01VU1RfQkVfSU1NCis8L3ByZT4KKyAgICAgPHA+VGhlIGFib3ZlIHNwZWNpZmllcyBhbiBleHRlbnNpb24gaW5zdHJ1Y3Rpb24gY2FsbGVkIG1wNjQgd2hpY2ggaGFzIDMgb3BlcmFuZHMsCitzZXRzIHRoZSBmbGFncywgY2FuIGJlIHVzZWQgd2l0aCBhIGNvbmRpdGlvbiBjb2RlLCBmb3Igd2hpY2ggdGhlCitmaXJzdCBvcGVyYW5kIGlzIGFuIGltbWVkaWF0ZS4gIChFcXVpdmFsZW50IHRvIGRpc2NhcmRpbmcgdGhlIHJlc3VsdAorb2YgdGhlIG9wZXJhdGlvbikuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgIC5leHRJbnN0cnVjdGlvbiBtdWw2NCwweDE0LDB4MDAsU1VGRklYX0NPTkQsIFNZTlRBWF8yT1B8T1AxX0lNTV9JTVBMSUVECis8L3ByZT4KKyAgICAgPHA+VGhpcyBkZXNjcmliZXMgYSAyIG9wZXJhbmQgaW5zdHJ1Y3Rpb24gd2l0aCBhbiBpbXBsaWNpdCBmaXJzdAoraW1tZWRpYXRlIG9wZXJhbmQuICBUaGUgcmVzdWx0IG9mIHRoaXMgb3BlcmF0aW9uIHdvdWxkIGJlIGRpc2NhcmRlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmhhbGZfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUkMtNjA0Ij48L2E+PGJyPjxkdD48Y29kZT4uaGFsZiA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPjxkZD4qVE9ETyoKKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUkMtNjA1Ij48L2E+PGJyPjxkdD48Y29kZT4ubG9uZyA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPjxkZD4qVE9ETyoKKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym9wdGlvbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy02MDYiPjwvYT48YnI+PGR0Pjxjb2RlPi5vcHRpb24gPC9jb2RlPjx2YXI+YXJjfGFyYzV8YXJjNnxhcmM3fGFyYzg8L3Zhcj48ZGQ+VGhlIDxjb2RlPi5vcHRpb248L2NvZGU+IGRpcmVjdGl2ZSBtdXN0IGJlIGZvbGxvd2VkIGJ5IHRoZSBkZXNpcmVkIGNvcmUKK3ZlcnNpb24uIEFnYWluIDxjb2RlPmFyYzwvY29kZT4gaXMgYW4gYWxpYXMgZm9yCis8Y29kZT5hcmM2PC9jb2RlPi4KKworICAgICA8cD5Ob3RlOiB0aGUgPGNvZGU+Lm9wdGlvbjwvY29kZT4gZGlyZWN0aXZlIG92ZXJyaWRlcyB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbgorPGNvZGU+LW1hcmM8L2NvZGU+OyBhIHdhcm5pbmcgaXMgZW1pdHRlZCB3aGVuIHRoZSB2ZXJzaW9uIGlzIG5vdCBjb25zaXN0ZW50CitiZXR3ZWVuIHRoZSB0d28gLSBldmVuIGZvciB0aGUgaW1wbGljaXQgZGVmYXVsdCBjb3JlIHZlcnNpb24KKyhhcmM2KS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNob3J0XzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJDLTYwNyI+PC9hPjxicj48ZHQ+PGNvZGU+LnNob3J0IDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+PGRkPipUT0RPKgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdid29yZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy02MDgiPjwvYT48YnI+PGR0Pjxjb2RlPi53b3JkIDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+PGRkPipUT0RPKgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkMtRmxvYXRpbmctUG9pbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSQy1GbG9hdGluZy1Qb2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZWM5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkMtRmxvYXRpbmctUG9pbnQuaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUkMgRmxvYXRpbmcgUG9pbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFSQ18wMDJkRGVwZW5kZW50Lmh0bWwjQVJDXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJBUkMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVJDLVN5bnRheC5odG1sI0FSQy1TeW50YXgiIHRpdGxlPSJBUkMgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJDLURpcmVjdGl2ZXMuaHRtbCNBUkMtRGlyZWN0aXZlcyIgdGl0bGU9IkFSQyBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVJDLUZsb2F0aW5nLVBvaW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVJDLVN5bnRheC5odG1sI0FSQy1TeW50YXgiPkFSQyBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBUkNfMDAyZERlcGVuZGVudC5odG1sI0FSQ18wMDJkRGVwZW5kZW50Ij5BUkMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zLjMgRmxvYXRpbmcgUG9pbnQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLUFSQy1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTU5MyI+PC9hPjxhIG5hbWU9ImluZGV4LUFSQy1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTU5NCI+PC9hPlRoZSBBUkMgY29yZSBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBoYXJkd2FyZSBmbG9hdGluZyBwb2ludAorc3VwcG9ydC4gU29mdHdhcmUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBpcyBwcm92aWRlZCBieSA8Y29kZT5HQ0M8L2NvZGU+CithbmQgdXNlcyA8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+IGZsb2F0aW5nLXBvaW50IG51bWJlcnMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSQy1PcGNvZGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkMtT3Bjb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OWY4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkMtT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFSQyBPcGNvZGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBUkNfMDAyZERlcGVuZGVudC5odG1sI0FSQ18wMDJkRGVwZW5kZW50IiB0aXRsZT0iQVJDLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiIHRpdGxlPSJBUkMgRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSQy1PcGNvZGVzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVJDLURpcmVjdGl2ZXMuaHRtbCNBUkMtRGlyZWN0aXZlcyI+QVJDIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBUkNfMDAyZERlcGVuZGVudC5odG1sI0FSQ18wMDJkRGVwZW5kZW50Ij5BUkMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zLjUgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFSQy1vcGNvZGVzLTYwOSI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZXMtZm9yLUFSQy02MTAiPjwvYT4KK0ZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQVJDIGluc3RydWN0aW9uIHNldCwgc2VlIDxjaXRlPkFSQyBQcm9ncmFtbWVycworUmVmZXJlbmNlIE1hbnVhbDwvY2l0ZT4sIEFSQyBJbnRlcm5hdGlvbmFsICh3d3cuYXJjLmNvbSkKKworPCEtLSBDb3B5cmlnaHQgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgLS0+Cis8IS0tIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJDLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSQy1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmNTExNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSQy1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJDIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFSQ18wMDJkRGVwZW5kZW50Lmh0bWwjQVJDXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJBUkMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJDLVN5bnRheC5odG1sI0FSQy1TeW50YXgiIHRpdGxlPSJBUkMgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVJDLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJDLVN5bnRheC5odG1sI0FSQy1TeW50YXgiPkFSQyBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBUkNfMDAyZERlcGVuZGVudC5odG1sI0FSQ18wMDJkRGVwZW5kZW50Ij5BUkMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zLjEgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFSQy1vcHRpb25zLV8wMDI4bm9uZV8wMDI5LTU3NyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtZm9yLUFSQy1fMDAyOG5vbmVfMDAyOS01NzgiPjwvYT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWFyY18wMDViNV8wMDdjNl8wMDdjN18wMDdjOF8wMDVkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSQy01NzkiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LW1hcmNbNXw2fDd8OF08L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIGNvcmUgcHJvY2Vzc29yIHZhcmlhbnQuICBVc2luZworPGNvZGU+LW1hcmM8L2NvZGU+IGlzIHRoZSBzYW1lIGFzIDxjb2RlPi1tYXJjNjwvY29kZT4sIHdoaWNoCitpcyBhbHNvIHRoZSBkZWZhdWx0LgorCisgICAgICAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFyYzVfMDA3ZC1hcmM1XzAwMmMtQVJDLTU4MCI+PC9hPgorPGRsPjxkdD48Y29kZT5hcmM1PC9jb2RlPjxkZD5CYXNlIGluc3RydWN0aW9uIHNldC4KKworICAgICAgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYXJjNl8wMDdkLWFyYzZfMDAyYy1BUkMtNTgxIj48L2E+PGJyPjxkdD48Y29kZT5hcmM2PC9jb2RlPjxkZD5KdW1wLWFuZC1saW5rIChqbCkgaW5zdHJ1Y3Rpb24uICBObyByZXF1aXJlbWVudCBvZiBhbiBpbnN0cnVjdGlvbiBiZXR3ZWVuCitzZXR0aW5nIGZsYWdzIGFuZCBjb25kaXRpb25hbCBqdW1wLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgICAgbW92LmYgcjAscjEKKyAgICAgICAgICAgICAgICAgYmVxICAgZm9vCis8L3ByZT4KKyAgICAgICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFyYzdfMDA3ZC1hcmM3XzAwMmMtQVJDLTU4MiI+PC9hPjxicj48ZHQ+PGNvZGU+YXJjNzwvY29kZT48ZGQ+QnJlYWsgKGJyaykgYW5kIHNsZWVwIChzbGVlcCkgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhcmM4XzAwN2QtYXJjOF8wMDJjLUFSQy01ODMiPjwvYT48YnI+PGR0Pjxjb2RlPmFyYzg8L2NvZGU+PGRkPlNvZnR3YXJlIGludGVycnVwdCAoc3dpKSBpbnN0cnVjdGlvbi4KKworICAgICA8L2RsPgorCisgICAgIDxwPk5vdGU6IHRoZSA8Y29kZT4ub3B0aW9uPC9jb2RlPiBkaXJlY3RpdmUgY2FuIHRvIGJlIHVzZWQgdG8gc2VsZWN0IGEgY29yZQordmFyaWFudCBmcm9tIHdpdGhpbiBhc3NlbWJseSBjb2RlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRFQl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUkMtNTg0Ij48L2E+PGJyPjxkdD48Y29kZT4tRUI8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBhc3NlbWJsZXIgc2hvdWxkCitiZSBtYXJrZWQgYXMgYmVpbmcgZW5jb2RlZCBmb3IgYSBiaWctZW5kaWFuIHByb2Nlc3Nvci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkRUxfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJDLTU4NSI+PC9hPjxicj48ZHQ+PGNvZGU+LUVMPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUgYXNzZW1ibGVyIHNob3VsZAorYmUgbWFya2VkIGFzIGJlaW5nIGVuY29kZWQgZm9yIGEgbGl0dGxlLWVuZGlhbiBwcm9jZXNzb3IgLSB0aGlzIGlzIHRoZQorZGVmYXVsdC4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJDLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJDLVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNmQxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkMtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJDIFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNBUkNfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFSQy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBUkMtT3B0aW9ucy5odG1sI0FSQy1PcHRpb25zIiB0aXRsZT0iQVJDIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBUkMtRmxvYXRpbmctUG9pbnQuaHRtbCNBUkMtRmxvYXRpbmctUG9pbnQiIHRpdGxlPSJBUkMgRmxvYXRpbmcgUG9pbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUkMtU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFSQy1GbG9hdGluZy1Qb2ludC5odG1sI0FSQy1GbG9hdGluZy1Qb2ludCI+QVJDIEZsb2F0aW5nIFBvaW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVJDLU9wdGlvbnMuaHRtbCNBUkMtT3B0aW9ucyI+QVJDIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBUkNfMDAyZERlcGVuZGVudC5odG1sI0FSQ18wMDJkRGVwZW5kZW50Ij5BUkMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zLjIgU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkFSQ18wMDJkQ2hhcnMuaHRtbCNBUkNfMDAyZENoYXJzIj5BUkMtQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBUkNfMDAyZFJlZ3MuaHRtbCNBUkNfMDAyZFJlZ3MiPkFSQy1SZWdzPC9hPjogICAgICAgICAgICAgICAgICBSZWdpc3RlciBOYW1lcworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJDXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJDXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NmJhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkNfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJDLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBUkMtU3ludGF4Lmh0bWwjQVJDLVN5bnRheCIgdGl0bGU9IkFSQyBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBUkNfMDAyZFJlZ3MuaHRtbCNBUkNfMDAyZFJlZ3MiIHRpdGxlPSJBUkMtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSQy1DaGFycyI+PC9hPgorPGEgbmFtZT0iQVJDXzAwMmRDaGFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBUkNfMDAyZFJlZ3MuaHRtbCNBUkNfMDAyZFJlZ3MiPkFSQy1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVJDLVN5bnRheC5odG1sI0FSQy1TeW50YXgiPkFSQyBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjMuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1BUkMtNTg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtQVJDLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItNTg3Ij48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIGEgbGluZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgY29tbWVudAordGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIE5vdGUgdGhhdCBpZiBhIGxpbmUKK3N0YXJ0cyB3aXRoIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciB0aGVuIGl0IGNhbiBhbHNvIGJlIGEgbG9naWNhbCBsaW5lCitudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1BUkMtNTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLUFSQy01ODkiPjwvYT48YSBuYW1lPSJpbmRleC1BUkMtbGluZS1zZXBhcmF0b3ItNTkwIj48L2E+VGhlIEFSQyBhc3NlbWJsZXIgZG9lcyBub3Qgc3VwcG9ydCBhIGxpbmUgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJDXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSQ18wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlYjc5MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSQ18wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJDLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWxwaGFfMDAyZERlcGVuZGVudC5odG1sI0FscGhhXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJBbHBoYS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQVJNLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSQy1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IkFSQ18wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjQVJNXzAwMmREZXBlbmRlbnQiPkFSTS1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCI+QWxwaGEtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjMgQVJDIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUFSQy1zdXBwb3J0LTU3NiI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQVJDLU9wdGlvbnMuaHRtbCNBUkMtT3B0aW9ucyI+QVJDIE9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkFSQy1TeW50YXguaHRtbCNBUkMtU3ludGF4Ij5BUkMgU3ludGF4PC9hPjogICAgICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJBUkMtRmxvYXRpbmctUG9pbnQuaHRtbCNBUkMtRmxvYXRpbmctUG9pbnQiPkFSQyBGbG9hdGluZyBQb2ludDwvYT46ICAgICAgICBGbG9hdGluZyBQb2ludAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iQVJDLURpcmVjdGl2ZXMuaHRtbCNBUkMtRGlyZWN0aXZlcyI+QVJDIERpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgIEFSQyBNYWNoaW5lIERpcmVjdGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkFSQy1PcGNvZGVzLmh0bWwjQVJDLU9wY29kZXMiPkFSQyBPcGNvZGVzPC9hPjogICAgICAgICAgICAgICBPcGNvZGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkNfMDAyZFJlZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSQ18wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYWE0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUkNfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDU0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUkMtUmVncyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVJDLVN5bnRheC5odG1sI0FSQy1TeW50YXgiIHRpdGxlPSJBUkMgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVJDXzAwMmRDaGFycy5odG1sI0FSQ18wMDJkQ2hhcnMiIHRpdGxlPSJBUkMtQ2hhcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUkMtUmVncyI+PC9hPgorPGEgbmFtZT0iQVJDXzAwMmRSZWdzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVJDXzAwMmRDaGFycy5odG1sI0FSQ18wMDJkQ2hhcnMiPkFSQy1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFSQy1TeW50YXguaHRtbCNBUkMtU3ludGF4Ij5BUkMgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zLjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFSQy1yZWdpc3Rlci1uYW1lcy01OTEiPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLUFSQy01OTIiPjwvYT4qVE9ETyoKKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNLURpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1EaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmNDBiMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSwzNDggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFSTSBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQVJNLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFSTS1GbG9hdGluZy1Qb2ludC5odG1sI0FSTS1GbG9hdGluZy1Qb2ludCIgdGl0bGU9IkFSTSBGbG9hdGluZyBQb2ludCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjQVJNLU9wY29kZXMiIHRpdGxlPSJBUk0gT3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTS1EaXJlY3RpdmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjQVJNLU9wY29kZXMiPkFSTSBPcGNvZGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVJNLUZsb2F0aW5nLVBvaW50Lmh0bWwjQVJNLUZsb2F0aW5nLVBvaW50Ij5BUk0gRmxvYXRpbmcgUG9pbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50Ij5BUk0tRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40LjQgQVJNIE1hY2hpbmUgRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1hY2hpbmUtZGlyZWN0aXZlc18wMDJjLUFSTS02NTEiPjwvYT48YSBuYW1lPSJpbmRleC1BUk0tbWFjaGluZS1kaXJlY3RpdmVzLTY1MiI+PC9hPgorICAgICA8ZGw+Cis8IS0tIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEgLS0+CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZTJieXRlXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY1MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmU0Ynl0ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlOGJ5dGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjU1Ij48L2E+PGR0Pjxjb2RlPi4yYnl0ZSA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5dKjwvY29kZT48ZHQ+PGNvZGU+LjRieXRlIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4gWywgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPl0qPC9jb2RlPjxkdD48Y29kZT4uOGJ5dGUgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPiBbLCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+XSo8L2NvZGU+PGRkPlRoZXNlIGRpcmVjdGl2ZXMgd3JpdGUgMiwgNCBvciA4IGJ5dGUgdmFsdWVzIHRvIHRoZSBvdXRwdXQgc2VjdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlYWxpZ25fMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjU2Ij48L2E+PGJyPjxkdD48Y29kZT4uYWxpZ24gPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPiBbLCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+VGhpcyBpcyB0aGUgZ2VuZXJpYyA8dmFyPi5hbGlnbjwvdmFyPiBkaXJlY3RpdmUuICBGb3IgdGhlIEFSTSBob3dldmVyIGlmIHRoZQorZmlyc3QgYXJndW1lbnQgaXMgemVybyAoaWUgbm8gYWxpZ25tZW50IGlzIG5lZWRlZCkgdGhlIGFzc2VtYmxlciB3aWxsCitiZWhhdmUgYXMgaWYgdGhlIGFyZ3VtZW50IGhhZCBiZWVuIDIgKGllIHBhZCB0byB0aGUgbmV4dCBmb3VyIGJ5dGUKK2JvdW5kYXJ5KS4gIFRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBUk0ncyBvd24gYXNzZW1ibGVyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVhcmNoXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY1NyI+PC9hPjxicj48ZHQ+PGNvZGU+LmFyY2ggPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD5TZWxlY3QgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuICBWYWxpZCB2YWx1ZXMgZm9yIDx2YXI+bmFtZTwvdmFyPiBhcmUgdGhlIHNhbWUgYXMKK2ZvciB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gY29tbWFuZGxpbmUgb3B0aW9uLgorCisgICAgIDxwPlNwZWNpZnlpbmcgPGNvZGU+LmFyY2g8L2NvZGU+IGNsZWFycyBhbnkgcHJldmlvdXNseSBzZWxlY3RlZCBhcmNoaXRlY3R1cmUKK2V4dGVuc2lvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWFyY2hfMDA1ZmV4dGVuc2lvbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NTgiPjwvYT48YnI+PGR0Pjxjb2RlPi5hcmNoX2V4dGVuc2lvbiA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPkFkZCBvciByZW1vdmUgYW4gYXJjaGl0ZWN0dXJlIGV4dGVuc2lvbiB0byB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gIFZhbGlkCit2YWx1ZXMgZm9yIDx2YXI+bmFtZTwvdmFyPiBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgYWNjZXB0ZWQgYXMgYXJjaGl0ZWN0dXJhbAorZXh0ZW5zaW9ucyBieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiBjb21tYW5kbGluZSBvcHRpb24uCisKKyAgICAgPHA+PGNvZGU+LmFyY2hfZXh0ZW5zaW9uPC9jb2RlPiBtYXkgYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBhZGQgb3IgcmVtb3ZlIGV4dGVuc2lvbnMKK2luY3JlbWVudGFsbHkgdG8gdGhlIGFyY2hpdGVjdHVyZSBiZWluZyBjb21waWxlZCBmb3IuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWFybV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NTkiPjwvYT48YnI+PGR0Pjxjb2RlPi5hcm08L2NvZGU+PGRkPlRoaXMgcGVyZm9ybXMgdGhlIHNhbWUgYWN0aW9uIGFzIDx2YXI+LmNvZGUgMzI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iYXJtXzAwNWZwYWQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlcGFkXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY2MCI+PC9hPjxicj48ZHQ+PGNvZGU+LnBhZCAjPC9jb2RlPjx2YXI+Y291bnQ8L3Zhcj48ZGQ+R2VuZXJhdGUgdW53aW5kZXIgYW5ub3RhdGlvbnMgZm9yIGEgc3RhY2sgYWRqdXN0bWVudCBvZiA8dmFyPmNvdW50PC92YXI+IGJ5dGVzLiAKK0EgcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSBhbGxvY2F0ZWQgc3RhY2sgc3BhY2UgYnkKK2RlY3JlbWVudGluZyB0aGUgc3RhY2sgcG9pbnRlci4KKworICAgICA8IS0tIEJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCIC0tPgorICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlYnNzXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY2MSI+PC9hPjxicj48ZHQ+PGNvZGU+LmJzczwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgc3dpdGNoZXMgdG8gdGhlIDxjb2RlPi5ic3M8L2NvZGU+IHNlY3Rpb24uCisKKyAgICAgPCEtLSBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQyAtLT4KKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWNhbnR1bndpbmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjYyIj48L2E+PGJyPjxkdD48Y29kZT4uY2FudHVud2luZDwvY29kZT48ZGQ+UHJldmVudHMgdW53aW5kaW5nIHRocm91Z2ggdGhlIGN1cnJlbnQgZnVuY3Rpb24uICBObyBwZXJzb25hbGl0eSByb3V0aW5lCitvciBleGNlcHRpb24gdGFibGUgZGF0YSBpcyByZXF1aXJlZCBvciBwZXJtaXR0ZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWNvZGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjYzIj48L2E+PGJyPjxkdD48Y29kZT4uY29kZSBbMTZ8MzJdPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBzZWxlY3RzIHRoZSBpbnN0cnVjdGlvbiBzZXQgYmVpbmcgZ2VuZXJhdGVkLiBUaGUgdmFsdWUgMTYKK3NlbGVjdHMgVGh1bWIsIHdpdGggdGhlIHZhbHVlIDMyIHNlbGVjdGluZyBBUk0uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWNwdV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NjQiPjwvYT48YnI+PGR0Pjxjb2RlPi5jcHUgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD5TZWxlY3QgdGhlIHRhcmdldCBwcm9jZXNzb3IuICBWYWxpZCB2YWx1ZXMgZm9yIDx2YXI+bmFtZTwvdmFyPiBhcmUgdGhlIHNhbWUgYXMKK2ZvciB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiBjb21tYW5kbGluZSBvcHRpb24uCisKKyAgICAgPHA+U3BlY2lmeWluZyA8Y29kZT4uY3B1PC9jb2RlPiBjbGVhcnMgYW55IHByZXZpb3VzbHkgc2VsZWN0ZWQgYXJjaGl0ZWN0dXJlCitleHRlbnNpb25zLgorCisgICAgIDwhLS0gREREREREREREREREREREREREREREREREREQgLS0+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVkbl8wMDdkLWFuZC1fMDA0MGNvZGVfMDA3Yl8wMDJlcW5fMDA3ZC1kaXJlY3RpdmVzXzAwMmMtQVJNLTY2NSI+PC9hPjxicj48ZHQ+PHZhcj5uYW1lPC92YXI+PGNvZGU+IC5kbiA8L2NvZGU+PHZhcj5yZWdpc3RlciBuYW1lPC92YXI+PGNvZGU+IFs8L2NvZGU+PHZhcj4udHlwZTwvdmFyPjxjb2RlPl0gW1s8L2NvZGU+PHZhcj5pbmRleDwvdmFyPjxjb2RlPl1dPC9jb2RlPjxkdD48dmFyPm5hbWU8L3Zhcj48Y29kZT4gLnFuIDwvY29kZT48dmFyPnJlZ2lzdGVyIG5hbWU8L3Zhcj48Y29kZT4gWzwvY29kZT48dmFyPi50eXBlPC92YXI+PGNvZGU+XSBbWzwvY29kZT48dmFyPmluZGV4PC92YXI+PGNvZGU+XV08L2NvZGU+PGRkPgorVGhlIDxjb2RlPmRuPC9jb2RlPiBhbmQgPGNvZGU+cW48L2NvZGU+IGRpcmVjdGl2ZXMgYXJlIHVzZWQgdG8gY3JlYXRlIHR5cGVkCithbmQvb3IgaW5kZXhlZCByZWdpc3RlciBhbGlhc2VzIGZvciB1c2UgaW4gQWR2YW5jZWQgU0lNRCBFeHRlbnNpb24KKyhOZW9uKSBpbnN0cnVjdGlvbnMuICBUaGUgZm9ybWVyIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhbGlhc2VzCitvZiBkb3VibGUtcHJlY2lzaW9uIHJlZ2lzdGVycywgYW5kIHRoZSBsYXR0ZXIgdG8gY3JlYXRlIGFsaWFzZXMgb2YKK3F1YWQtcHJlY2lzaW9uIHJlZ2lzdGVycy4KKworICAgICA8cD5JZiB0aGVzZSBkaXJlY3RpdmVzIGFyZSB1c2VkIHRvIGNyZWF0ZSB0eXBlZCBhbGlhc2VzLCB0aG9zZSBhbGlhc2VzIGNhbgorYmUgdXNlZCBpbiBOZW9uIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9mIHdyaXRpbmcgdHlwZXMgYWZ0ZXIgdGhlIG1uZW1vbmljCitvciBhZnRlciBlYWNoIG9wZXJhbmQuICBGb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgICAgIHggLmRuIGQyLmYzMgorICAgICAgICAgICAgICAgICAgeSAuZG4gZDMuZjMyCisgICAgICAgICAgICAgICAgICB6IC5kbiBkNC5mMzJbMV0KKyAgICAgICAgICAgICAgICAgIHZtdWwgeCx5LHoKKzwvcHJlPgorICAgICA8cD5UaGlzIGlzIGVxdWl2YWxlbnQgdG8gd3JpdGluZyB0aGUgZm9sbG93aW5nOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgICAgdm11bC5mMzIgZDIsZDMsZDRbMV0KKzwvcHJlPgorICAgICA8cD5BbGlhc2VzIGNyZWF0ZWQgdXNpbmcgPGNvZGU+ZG48L2NvZGU+IG9yIDxjb2RlPnFuPC9jb2RlPiBjYW4gYmUgZGVzdHJveWVkIHVzaW5nCis8Y29kZT51bnJlcTwvY29kZT4uCisKKyAgICAgPCEtLSBFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRSAtLT4KKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWVhYmlfMDA1ZmF0dHJpYnV0ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NjYiPjwvYT48YnI+PGR0Pjxjb2RlPi5lYWJpX2F0dHJpYnV0ZSA8L2NvZGU+PHZhcj50YWc8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGRkPlNldCB0aGUgRUFCSSBvYmplY3QgYXR0cmlidXRlIDx2YXI+dGFnPC92YXI+IHRvIDx2YXI+dmFsdWU8L3Zhcj4uCisKKyAgICAgPHA+VGhlIDx2YXI+dGFnPC92YXI+IGlzIGVpdGhlciBhbiBhdHRyaWJ1dGUgbnVtYmVyLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKzxjb2RlPlRhZ19DUFVfcmF3X25hbWU8L2NvZGU+LCA8Y29kZT5UYWdfQ1BVX25hbWU8L2NvZGU+LCA8Y29kZT5UYWdfQ1BVX2FyY2g8L2NvZGU+LAorPGNvZGU+VGFnX0NQVV9hcmNoX3Byb2ZpbGU8L2NvZGU+LCA8Y29kZT5UYWdfQVJNX0lTQV91c2U8L2NvZGU+LAorPGNvZGU+VGFnX1RIVU1CX0lTQV91c2U8L2NvZGU+LCA8Y29kZT5UYWdfRlBfYXJjaDwvY29kZT4sIDxjb2RlPlRhZ19XTU1YX2FyY2g8L2NvZGU+LAorPGNvZGU+VGFnX0FkdmFuY2VkX1NJTURfYXJjaDwvY29kZT4sIDxjb2RlPlRhZ19QQ1NfY29uZmlnPC9jb2RlPiwKKzxjb2RlPlRhZ19BQklfUENTX1I5X3VzZTwvY29kZT4sIDxjb2RlPlRhZ19BQklfUENTX1JXX2RhdGE8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9QQ1NfUk9fZGF0YTwvY29kZT4sIDxjb2RlPlRhZ19BQklfUENTX0dPVF91c2U8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9QQ1Nfd2NoYXJfdDwvY29kZT4sIDxjb2RlPlRhZ19BQklfRlBfcm91bmRpbmc8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9GUF9kZW5vcm1hbDwvY29kZT4sIDxjb2RlPlRhZ19BQklfRlBfZXhjZXB0aW9uczwvY29kZT4sCis8Y29kZT5UYWdfQUJJX0ZQX3VzZXJfZXhjZXB0aW9uczwvY29kZT4sIDxjb2RlPlRhZ19BQklfRlBfbnVtYmVyX21vZGVsPC9jb2RlPiwKKzxjb2RlPlRhZ19BQklfYWxpZ25fbmVlZGVkPC9jb2RlPiwgPGNvZGU+VGFnX0FCSV9hbGlnbl9wcmVzZXJ2ZWQ8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9lbnVtX3NpemU8L2NvZGU+LCA8Y29kZT5UYWdfQUJJX0hhcmRGUF91c2U8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9WRlBfYXJnczwvY29kZT4sIDxjb2RlPlRhZ19BQklfV01NWF9hcmdzPC9jb2RlPiwKKzxjb2RlPlRhZ19BQklfb3B0aW1pemF0aW9uX2dvYWxzPC9jb2RlPiwgPGNvZGU+VGFnX0FCSV9GUF9vcHRpbWl6YXRpb25fZ29hbHM8L2NvZGU+LAorPGNvZGU+VGFnX2NvbXBhdGliaWxpdHk8L2NvZGU+LCA8Y29kZT5UYWdfQ1BVX3VuYWxpZ25lZF9hY2Nlc3M8L2NvZGU+LAorPGNvZGU+VGFnX0ZQX0hQX2V4dGVuc2lvbjwvY29kZT4sIDxjb2RlPlRhZ19BQklfRlBfMTZiaXRfZm9ybWF0PC9jb2RlPiwKKzxjb2RlPlRhZ19NUGV4dGVuc2lvbl91c2U8L2NvZGU+LCA8Y29kZT5UYWdfRElWX3VzZTwvY29kZT4sCis8Y29kZT5UYWdfbm9kZWZhdWx0czwvY29kZT4sIDxjb2RlPlRhZ19hbHNvX2NvbXBhdGlibGVfd2l0aDwvY29kZT4sCis8Y29kZT5UYWdfY29uZm9ybWFuY2U8L2NvZGU+LCA8Y29kZT5UYWdfVDJFRV91c2U8L2NvZGU+LAorPGNvZGU+VGFnX1ZpcnR1YWxpemF0aW9uX3VzZTwvY29kZT4KKworICAgICA8cD5UaGUgPHZhcj52YWx1ZTwvdmFyPiBpcyBlaXRoZXIgYSA8Y29kZT5udW1iZXI8L2NvZGU+LCA8Y29kZT4ic3RyaW5nIjwvY29kZT4sIG9yCis8Y29kZT5udW1iZXIsICJzdHJpbmciPC9jb2RlPiBkZXBlbmRpbmcgb24gdGhlIHRhZy4KKworICAgICA8cD5Ob3RlIC0gdGhlIGZvbGxvd2luZyBsZWdhY3kgdmFsdWVzIGFyZSBhbHNvIGFjY2VwdGVkIGJ5IDx2YXI+dGFnPC92YXI+OgorPGNvZGU+VGFnX1ZGUF9hcmNoPC9jb2RlPiwgPGNvZGU+VGFnX0FCSV9hbGlnbjhfbmVlZGVkPC9jb2RlPiwKKzxjb2RlPlRhZ19BQklfYWxpZ244X3ByZXNlcnZlZDwvY29kZT4sIDxjb2RlPlRhZ19WRlBfSFBfZXh0ZW5zaW9uPC9jb2RlPiwKKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlZXZlbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NjciPjwvYT48YnI+PGR0Pjxjb2RlPi5ldmVuPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBhbGlnbnMgdG8gYW4gZXZlbi1udW1iZXJlZCBhZGRyZXNzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVleHRlbmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWxkb3VibGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjY5Ij48L2E+PGJyPjxkdD48Y29kZT4uZXh0ZW5kICA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5dKjwvY29kZT48ZHQ+PGNvZGU+Lmxkb3VibGUgIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4gWywgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPl0qPC9jb2RlPjxkZD5UaGVzZSBkaXJlY3RpdmVzIHdyaXRlIDEyYnl0ZSBsb25nIGRvdWJsZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdG8gdGhlCitvdXRwdXQgc2VjdGlvbi4gIFRoZXNlIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIGN1cnJlbnQgQVJNIHByb2Nlc3NvcnMKK29yIEFCSXMuCisKKyAgICAgPCEtLSBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiAtLT4KKyAgICAgPHA+PGEgbmFtZT0iYXJtXzAwNWZmbmVuZCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVmbmVuZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzAiPjwvYT48YnI+PGR0Pjxjb2RlPi5mbmVuZDwvY29kZT48ZGQ+TWFya3MgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIHdpdGggYW4gdW53aW5kIHRhYmxlIGVudHJ5LiAgVGhlIHVud2luZCBpbmRleAordGFibGUgZW50cnkgaXMgY3JlYXRlZCB3aGVuIHRoaXMgZGlyZWN0aXZlIGlzIHByb2Nlc3NlZC4KKworICAgICA8cD5JZiBubyBwZXJzb25hbGl0eSByb3V0aW5lIGhhcyBiZWVuIHNwZWNpZmllZCB0aGVuIHN0YW5kYXJkIHBlcnNvbmFsaXR5Cityb3V0aW5lIDAgb3IgMSB3aWxsIGJlIHVzZWQsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHVud2luZCBvcGNvZGVzCityZXF1aXJlZC4KKworICAgICA8cD48YSBuYW1lPSJhcm1fMDA1ZmZuc3RhcnQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlZm5zdGFydF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzEiPjwvYT48YnI+PGR0Pjxjb2RlPi5mbnN0YXJ0PC9jb2RlPjxkZD5NYXJrcyB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiB3aXRoIGFuIHVud2luZCB0YWJsZSBlbnRyeS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlZm9yY2VfMDA1ZnRodW1iXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY3MiI+PC9hPjxicj48ZHQ+PGNvZGU+LmZvcmNlX3RodW1iPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBmb3JjZXMgdGhlIHNlbGVjdGlvbiBvZiBUaHVtYiBpbnN0cnVjdGlvbnMsIGV2ZW4gaWYgdGhlCit0YXJnZXQgcHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgdGhvc2UgaW5zdHJ1Y3Rpb25zCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWZwdV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzMiPjwvYT48YnI+PGR0Pjxjb2RlPi5mcHUgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD5TZWxlY3QgdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgdG8gYXNzZW1ibGUgZm9yLiAgVmFsaWQgdmFsdWVzIGZvciA8dmFyPm5hbWU8L3Zhcj4KK2FyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnB1PC9zcGFuPjwvc2FtcD4gY29tbWFuZGxpbmUgb3B0aW9uLgorCisgICAgIDwhLS0gR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cgLS0+CisgICAgIDwhLS0gSEhISEhISEhISEhISEhISEhISEhISEhISEggLS0+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVoYW5kbGVyZGF0YV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzQiPjwvYT48YnI+PGR0Pjxjb2RlPi5oYW5kbGVyZGF0YTwvY29kZT48ZGQ+TWFya3MgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiwgYW5kIHRoZSBzdGFydCBvZiB0aGUgZXhjZXB0aW9uIHRhYmxlCitlbnRyeSBmb3IgdGhhdCBmdW5jdGlvbi4gIEFueXRoaW5nIGJldHdlZW4gdGhpcyBkaXJlY3RpdmUgYW5kIHRoZQorPGNvZGU+LmZuZW5kPC9jb2RlPiBkaXJlY3RpdmUgd2lsbCBiZSBhZGRlZCB0byB0aGUgZXhjZXB0aW9uIHRhYmxlIGVudHJ5LgorCisgICAgIDxwPk11c3QgYmUgcHJlY2VkZWQgYnkgYSA8Y29kZT4ucGVyc29uYWxpdHk8L2NvZGU+IG9yIDxjb2RlPi5wZXJzb25hbGl0eWluZGV4PC9jb2RlPgorZGlyZWN0aXZlLgorCisgICAgIDwhLS0gSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUkgLS0+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVpbnN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY3NSI+PC9hPjxicj48ZHQ+PGNvZGU+Lmluc3QgPC9jb2RlPjx2YXI+b3Bjb2RlPC92YXI+PGNvZGU+IFsgLCAuLi4gXTwvY29kZT48ZHQ+PGNvZGU+Lmluc3QubiA8L2NvZGU+PHZhcj5vcGNvZGU8L3Zhcj48Y29kZT4gWyAsIC4uLiBdPC9jb2RlPjxkdD48Y29kZT4uaW5zdC53IDwvY29kZT48dmFyPm9wY29kZTwvdmFyPjxjb2RlPiBbICwgLi4uIF08L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgbnVtZXJpY2FsIHZhbHVlIDx2YXI+b3Bjb2RlPC92YXI+LiAKKzxjb2RlPi5pbnN0Lm48L2NvZGU+IGFuZCA8Y29kZT4uaW5zdC53PC9jb2RlPiBhbGxvdyB0aGUgVGh1bWIgaW5zdHJ1Y3Rpb24gc2l6ZSB0byBiZQorc3BlY2lmaWVkIGV4cGxpY2l0bHksIG92ZXJyaWRpbmcgdGhlIG5vcm1hbCBlbmNvZGluZyBydWxlcy4KKworICAgICA8IS0tIEpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKIC0tPgorICAgICA8IS0tIEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLIC0tPgorICAgICA8IS0tIExMTExMTExMTExMTExMTExMTExMTExMTExMIC0tPgorICAgICA8YnI+PGR0Pjxjb2RlPi5sZG91YmxlICA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5dKjwvY29kZT48ZGQ+U2VlIDxjb2RlPi5leHRlbmQ8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVsdG9yZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzYiPjwvYT48YnI+PGR0Pjxjb2RlPi5sdG9yZzwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgY2F1c2VzIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBsaXRlcmFsIHBvb2wgdG8gYmUKK2R1bXBlZCBpbnRvIHRoZSBjdXJyZW50IHNlY3Rpb24gKHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgdGhlIC50ZXh0CitzZWN0aW9uKSBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiAoYWxpZ25lZCB0byBhIHdvcmQgYm91bmRhcnkpLiAKKzxjb2RlPkdBUzwvY29kZT4gbWFpbnRhaW5zIGEgc2VwYXJhdGUgbGl0ZXJhbCBwb29sIGZvciBlYWNoIHNlY3Rpb24gYW5kIGVhY2gKK3N1Yi1zZWN0aW9uLiAgVGhlIDxjb2RlPi5sdG9yZzwvY29kZT4gZGlyZWN0aXZlIHdpbGwgb25seSBhZmZlY3QgdGhlIGxpdGVyYWwKK3Bvb2wgb2YgdGhlIGN1cnJlbnQgc2VjdGlvbiBhbmQgc3ViLXNlY3Rpb24uICBBdCB0aGUgZW5kIG9mIGFzc2VtYmx5CithbGwgcmVtYWluaW5nLCB1bi1lbXB0eSBsaXRlcmFsIHBvb2xzIHdpbGwgYXV0b21hdGljYWxseSBiZSBkdW1wZWQuCisKKyAgICAgPHA+Tm90ZSAtIG9sZGVyIHZlcnNpb25zIG9mIDxjb2RlPkdBUzwvY29kZT4gd291bGQgZHVtcCB0aGUgY3VycmVudCBsaXRlcmFsCitwb29sIGFueSB0aW1lIGEgc2VjdGlvbiBjaGFuZ2Ugb2NjdXJyZWQuICBUaGlzIGlzIG5vIGxvbmdlciBkb25lLCBzaW5jZQoraXQgcHJldmVudHMgYWNjdXJhdGUgY29udHJvbCBvZiB0aGUgcGxhY2VtZW50IG9mIGxpdGVyYWwgcG9vbHMuCisKKyAgICAgPCEtLSBNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTSAtLT4KKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZW1vdnNwXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY3NyI+PC9hPjxicj48ZHQ+PGNvZGU+Lm1vdnNwIDwvY29kZT48dmFyPnJlZzwvdmFyPjxjb2RlPiBbLCAjPC9jb2RlPjx2YXI+b2Zmc2V0PC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+VGVsbCB0aGUgdW53aW5kZXIgdGhhdCA8dmFyPnJlZzwvdmFyPiBjb250YWlucyBhbiBvZmZzZXQgZnJvbSB0aGUgY3VycmVudAorc3RhY2sgcG9pbnRlci4gIElmIDx2YXI+b2Zmc2V0PC92YXI+IGlzIG5vdCBzcGVjaWZpZWQgdGhlbiBpdCBpcyBhc3N1bWVkIHRvIGJlCit6ZXJvLgorCisgICAgIDwhLS0gTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4gLS0+CisgICAgIDwhLS0gT09PT09PT09PT09PT09PT09PT09PT09PT08gLS0+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVvYmplY3RfMDA1ZmFyY2hfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjc4Ij48L2E+PGJyPjxkdD48Y29kZT4ub2JqZWN0X2FyY2ggPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD5PdmVycmlkZSB0aGUgYXJjaGl0ZWN0dXJlIHJlY29yZGVkIGluIHRoZSBFQUJJIG9iamVjdCBhdHRyaWJ1dGUgc2VjdGlvbi4gCitWYWxpZCB2YWx1ZXMgZm9yIDx2YXI+bmFtZTwvdmFyPiBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSA8Y29kZT4uYXJjaDwvY29kZT4gZGlyZWN0aXZlLiAKK1R5cGljYWxseSB0aGlzIGlzIHVzZWZ1bCB3aGVuIGNvZGUgdXNlcyBydW50aW1lIGRldGVjdGlvbiBvZiBDUFUgZmVhdHVyZXMuCisKKyAgICAgPCEtLSBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUCAtLT4KKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXBhY2tlZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzkiPjwvYT48YnI+PGR0Pjxjb2RlPi5wYWNrZWQgIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4gWywgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPl0qPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSB3cml0ZXMgMTItYnl0ZSBwYWNrZWQgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHRvIHRoZQorb3V0cHV0IHNlY3Rpb24uICBUaGVzZSBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBjdXJyZW50IEFSTSBwcm9jZXNzb3JzCitvciBBQklzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVwYWRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjgwIj48L2E+PGJyPjxkdD48Y29kZT4ucGFkICM8L2NvZGU+PHZhcj5jb3VudDwvdmFyPjxkZD5HZW5lcmF0ZSB1bndpbmRlciBhbm5vdGF0aW9ucyBmb3IgYSBzdGFjayBhZGp1c3RtZW50IG9mIDx2YXI+Y291bnQ8L3Zhcj4gYnl0ZXMuIAorQSBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIGFsbG9jYXRlZCBzdGFjayBzcGFjZSBieQorZGVjcmVtZW50aW5nIHRoZSBzdGFjayBwb2ludGVyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVwZXJzb25hbGl0eV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02ODEiPjwvYT48YnI+PGR0Pjxjb2RlPi5wZXJzb25hbGl0eSA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPlNldHMgdGhlIHBlcnNvbmFsaXR5IHJvdXRpbmUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHRvIDx2YXI+bmFtZTwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlcGVyc29uYWxpdHlpbmRleF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02ODIiPjwvYT48YnI+PGR0Pjxjb2RlPi5wZXJzb25hbGl0eWluZGV4IDwvY29kZT48dmFyPmluZGV4PC92YXI+PGRkPlNldHMgdGhlIHBlcnNvbmFsaXR5IHJvdXRpbmUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHRvIHRoZSBFQUJJIHN0YW5kYXJkCityb3V0aW5lIG51bWJlciA8dmFyPmluZGV4PC92YXI+CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXBvb2xfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjgzIj48L2E+PGJyPjxkdD48Y29kZT4ucG9vbDwvY29kZT48ZGQ+VGhpcyBpcyBhIHN5bm9ueW0gZm9yIC5sdG9yZy4KKworICAgICA8IS0tIFFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRIC0tPgorICAgICA8IS0tIFJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSIC0tPgorICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlcmVxXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY4NCI+PC9hPjxicj48ZHQ+PHZhcj5uYW1lPC92YXI+PGNvZGU+IC5yZXEgPC9jb2RlPjx2YXI+cmVnaXN0ZXIgbmFtZTwvdmFyPjxkZD5UaGlzIGNyZWF0ZXMgYW4gYWxpYXMgZm9yIDx2YXI+cmVnaXN0ZXIgbmFtZTwvdmFyPiBjYWxsZWQgPHZhcj5uYW1lPC92YXI+LiAgRm9yCitleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgICAgZm9vIC5yZXEgcjAKKzwvcHJlPgorICAgICA8IS0tIFNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTIC0tPgorICAgICA8cD48YSBuYW1lPSJhcm1fMDA1ZnNhdmUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2F2ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02ODUiPjwvYT48YnI+PGR0Pjxjb2RlPi5zYXZlIDwvY29kZT48dmFyPnJlZ2xpc3Q8L3Zhcj48ZGQ+R2VuZXJhdGUgdW53aW5kZXIgYW5ub3RhdGlvbnMgdG8gcmVzdG9yZSB0aGUgcmVnaXN0ZXJzIGluIDx2YXI+cmVnbGlzdDwvdmFyPi4gCitUaGUgZm9ybWF0IG9mIDx2YXI+cmVnbGlzdDwvdmFyPiBpcyB0aGUgc2FtZSBhcyB0aGUgY29ycmVzcG9uZGluZyBzdG9yZS1tdWx0aXBsZQoraW5zdHJ1Y3Rpb24uCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDxicj48ZW0+Y29yZSByZWdpc3RlcnM8L2VtPjxicj4KKyAgICAgICAgICAgIC5zYXZlIHtyNCwgcjUsIHI2LCBscn0KKyAgICAgICAgICAgIHN0bWZkIHNwISwge3I0LCByNSwgcjYsIGxyfQorICAgICA8YnI+PGVtPkZQQSByZWdpc3RlcnM8L2VtPjxicj4KKyAgICAgICAgICAgIC5zYXZlIGY0LCAyCisgICAgICAgICAgICBzZm1mZCBmNCwgMiwgW3NwXSEKKyAgICAgPGJyPjxlbT5WRlAgcmVnaXN0ZXJzPC9lbT48YnI+CisgICAgICAgICAgICAuc2F2ZSB7ZDgsIGQ5LCBkMTB9CisgICAgICAgICAgICBmc3RtZHggc3AhLCB7ZDgsIGQ5LCBkMTB9CisgICAgIDxicj48ZW0+aVdNTVh0IHJlZ2lzdGVyczwvZW0+PGJyPgorICAgICAgICAgICAgLnNhdmUge3dyMTAsIHdyMTF9CisgICAgICAgICAgICB3c3RyZCB3cjExLCBbc3AsICMtOF0hCisgICAgICAgICAgICB3c3RyZCB3cjEwLCBbc3AsICMtOF0hCisgICAgICAgICAgb3IKKyAgICAgICAgICAgIC5zYXZlIHdyMTEKKyAgICAgICAgICAgIHdzdHJkIHdyMTEsIFtzcCwgIy04XSEKKyAgICAgICAgICAgIC5zYXZlIHdyMTAKKyAgICAgICAgICAgIHdzdHJkIHdyMTAsIFtzcCwgIy04XSEKKzwvcHJlPgorICAgICA8cD48YSBuYW1lPSJhcm1fMDA1ZnNldGZwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldGZwXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY4NiI+PC9hPjxicj48ZHQ+PGNvZGU+LnNldGZwIDwvY29kZT48dmFyPmZwcmVnPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5zcHJlZzwvdmFyPjxjb2RlPiBbLCAjPC9jb2RlPjx2YXI+b2Zmc2V0PC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+TWFrZSBhbGwgdW53aW5kZXIgYW5ub3RhdGlvbnMgcmVsYXRpdmUgdG8gYSBmcmFtZSBwb2ludGVyLiAgV2l0aG91dCB0aGlzCit0aGUgdW53aW5kZXIgd2lsbCB1c2Ugb2Zmc2V0cyBmcm9tIHRoZSBzdGFjayBwb2ludGVyLgorCisgICAgIDxwPlRoZSBzeW50YXggb2YgdGhpcyBkaXJlY3RpdmUgaXMgdGhlIHNhbWUgYXMgdGhlIDxjb2RlPmFkZDwvY29kZT4gb3IgPGNvZGU+bW92PC9jb2RlPgoraW5zdHJ1Y3Rpb24gdXNlZCB0byBzZXQgdGhlIGZyYW1lIHBvaW50ZXIuICA8dmFyPnNwcmVnPC92YXI+IG11c3QgYmUgZWl0aGVyCis8Y29kZT5zcDwvY29kZT4gb3IgbWVudGlvbmVkIGluIGEgcHJldmlvdXMgPGNvZGU+Lm1vdnNwPC9jb2RlPiBkaXJlY3RpdmUuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLm1vdnNwIGlwCisgICAgICAgICAgbW92IGlwLCBzcAorICAgICAgICAgIC4uLgorICAgICAgICAgIC5zZXRmcCBmcCwgaXAsICM0CisgICAgICAgICAgYWRkIGZwLCBpcCwgIzQKKzwvcHJlPgorICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2VjcmVsMzJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjg3Ij48L2E+PGJyPjxkdD48Y29kZT4uc2VjcmVsMzIgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPiBbLCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+XSo8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIGVtaXRzIHJlbG9jYXRpb25zIHRoYXQgZXZhbHVhdGUgdG8gdGhlIHNlY3Rpb24tcmVsYXRpdmUKK29mZnNldCBvZiBlYWNoIGV4cHJlc3Npb24ncyBzeW1ib2wuICBUaGlzIGRpcmVjdGl2ZSBpcyBvbmx5IHN1cHBvcnRlZAorZm9yIFBFIHRhcmdldHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXN5bnRheF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02ODgiPjwvYT48YnI+PGR0Pjxjb2RlPi5zeW50YXggW3VuaWZpZWQgfCBkaXZpZGVkXTwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgc2V0cyB0aGUgSW5zdHJ1Y3Rpb24gU2V0IFN5bnRheCBhcyBkZXNjcmliZWQgaW4gdGhlCis8YSBocmVmPSJBUk1fMDAyZEluc3RydWN0aW9uXzAwMmRTZXQuaHRtbCNBUk1fMDAyZEluc3RydWN0aW9uXzAwMmRTZXQiPkFSTS1JbnN0cnVjdGlvbi1TZXQ8L2E+IHNlY3Rpb24uCisKKyAgICAgPCEtLSBUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVCAtLT4KKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXRodW1iXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY4OSI+PC9hPjxicj48ZHQ+PGNvZGU+LnRodW1iPC9jb2RlPjxkZD5UaGlzIHBlcmZvcm1zIHRoZSBzYW1lIGFjdGlvbiBhcyA8dmFyPi5jb2RlIDE2PC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmV0aHVtYl8wMDVmZnVuY18wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02OTAiPjwvYT48YnI+PGR0Pjxjb2RlPi50aHVtYl9mdW5jPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhhdCB0aGUgZm9sbG93aW5nIHN5bWJvbCBpcyB0aGUgbmFtZSBvZiBhCitUaHVtYiBlbmNvZGVkIGZ1bmN0aW9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gYWxsb3cKK3RoZSBhc3NlbWJsZXIgYW5kIGxpbmtlciB0byBnZW5lcmF0ZSBjb3JyZWN0IGNvZGUgZm9yIGludGVyd29ya2luZworYmV0d2VlbiBBcm0gYW5kIFRodW1iIGluc3RydWN0aW9ucyBhbmQgc2hvdWxkIGJlIHVzZWQgZXZlbiBpZgoraW50ZXJ3b3JraW5nIGlzIG5vdCBnb2luZyB0byBiZSBwZXJmb3JtZWQuICBUaGUgcHJlc2VuY2Ugb2YgdGhpcworZGlyZWN0aXZlIGFsc28gaW1wbGllcyA8Y29kZT4udGh1bWI8L2NvZGU+CisKKyAgICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgbm90IG5lY2Nlc3Nhcnkgd2hlbiBnZW5lcmF0aW5nIEVBQkkgb2JqZWN0cy4gIE9uIHRoZXNlCit0YXJnZXRzIHRoZSBlbmNvZGluZyBpcyBpbXBsaWNpdCB3aGVuIGdlbmVyYXRpbmcgVGh1bWIgY29kZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldGh1bWJfMDA1ZnNldF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02OTEiPjwvYT48YnI+PGR0Pjxjb2RlPi50aHVtYl9zZXQ8L2NvZGU+PGRkPlRoaXMgcGVyZm9ybXMgdGhlIGVxdWl2YWxlbnQgb2YgYSA8Y29kZT4uc2V0PC9jb2RlPiBkaXJlY3RpdmUgaW4gdGhhdCBpdAorY3JlYXRlcyBhIHN5bWJvbCB3aGljaCBpcyBhbiBhbGlhcyBmb3IgYW5vdGhlciBzeW1ib2wgKHBvc3NpYmx5IG5vdCB5ZXQKK2RlZmluZWQpLiAgVGhpcyBkaXJlY3RpdmUgYWxzbyBoYXMgdGhlIGFkZGVkIHByb3BlcnR5IGluIHRoYXQgaXQgbWFya3MKK3RoZSBhbGlhc2VkIHN5bWJvbCBhcyBiZWluZyBhIHRodW1iIGZ1bmN0aW9uIGVudHJ5IHBvaW50LCBpbiB0aGUgc2FtZQord2F5IHRoYXQgdGhlIDxjb2RlPi50aHVtYl9mdW5jPC9jb2RlPiBkaXJlY3RpdmUgZG9lcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldGxzZGVzY3NlcV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02OTIiPjwvYT48YnI+PGR0Pjxjb2RlPi50bHNkZXNjc2VxIDwvY29kZT48dmFyPnRscy12YXJpYWJsZTwvdmFyPjxkZD5UaGlzIGRpcmVjdGl2ZSBpcyB1c2VkIHRvIGFubm90YXRlIHBhcnRzIG9mIGFuIGlubGluZWQgVExTIGRlc2NyaXB0b3IKK3RyYW1wb2xpbmUuICBOb3JtYWxseSB0aGUgdHJhbXBvbGluZSBpcyBwcm92aWRlZCBieSB0aGUgbGlua2VyLCBhbmQKK3RoaXMgZGlyZWN0aXZlIGlzIG5vdCBuZWVkZWQuCisKKyAgICAgPCEtLSBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSAtLT4KKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXVucmVxXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY5MyI+PC9hPjxicj48ZHQ+PGNvZGU+LnVucmVxIDwvY29kZT48dmFyPmFsaWFzLW5hbWU8L3Zhcj48ZGQ+VGhpcyB1bmRlZmluZXMgYSByZWdpc3RlciBhbGlhcyB3aGljaCB3YXMgcHJldmlvdXNseSBkZWZpbmVkIHVzaW5nIHRoZQorPGNvZGU+cmVxPC9jb2RlPiwgPGNvZGU+ZG48L2NvZGU+IG9yIDxjb2RlPnFuPC9jb2RlPiBkaXJlY3RpdmVzLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAgICBmb28gLnJlcSByMAorICAgICAgICAgICAgICAgICAgLnVucmVxIGZvbworPC9wcmU+CisgICAgIDxwPkFuIGVycm9yIG9jY3VycyBpZiB0aGUgbmFtZSBpcyB1bmRlZmluZWQuICBOb3RlIC0gdGhpcyBwc2V1ZG8gb3AgY2FuCitiZSB1c2VkIHRvIGRlbGV0ZSBidWlsdGluIGluIHJlZ2lzdGVyIG5hbWUgYWxpYXNlcyAoZWcgJ3IwJykuICBUaGlzCitzaG91bGQgb25seSBiZSBkb25lIGlmIGl0IGlzIHJlYWxseSBuZWNlc3NhcnkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXVud2luZF8wMDVmcmF3XzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY5NCI+PC9hPjxicj48ZHQ+PGNvZGU+LnVud2luZF9yYXcgPC9jb2RlPjx2YXI+b2Zmc2V0PC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5ieXRlMTwvdmFyPjxjb2RlPiwgLi4uPC9jb2RlPjxkZD5JbnNlcnQgb25lIG9mIG1vcmUgYXJiaXRhcnkgdW53aW5kIG9wY29kZSBieXRlcywgd2hpY2ggYXJlIGtub3duIHRvIGFkanVzdAordGhlIHN0YWNrIHBvaW50ZXIgYnkgPHZhcj5vZmZzZXQ8L3Zhcj4gYnl0ZXMuCisKKyAgICAgPHA+Rm9yIGV4YW1wbGUgPGNvZGU+LnVud2luZF9yYXcgNCwgMHhiMSwgMHgwMTwvY29kZT4gaXMgZXF1aXZhbGVudCB0bworPGNvZGU+LnNhdmUge3IwfTwvY29kZT4KKworICAgICA8IS0tIFZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWIC0tPgorICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldnNhdmVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjk1Ij48L2E+PGJyPjxkdD48Y29kZT4udnNhdmUgPC9jb2RlPjx2YXI+dmZwLXJlZ2xpc3Q8L3Zhcj48ZGQ+R2VuZXJhdGUgdW53aW5kZXIgYW5ub3RhdGlvbnMgdG8gcmVzdG9yZSB0aGUgVkZQIHJlZ2lzdGVycyBpbiA8dmFyPnZmcC1yZWdsaXN0PC92YXI+Cit1c2luZyBGTERNRC4gIEFsc28gd29ya3MgZm9yIFZGUHYzIHJlZ2lzdGVycwordGhhdCBhcmUgdG8gYmUgcmVzdG9yZWQgdXNpbmcgVkxETS4gCitUaGUgZm9ybWF0IG9mIDx2YXI+dmZwLXJlZ2xpc3Q8L3Zhcj4gaXMgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgc3RvcmUtbXVsdGlwbGUKK2luc3RydWN0aW9uLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8YnI+PGVtPlZGUCByZWdpc3RlcnM8L2VtPjxicj4KKyAgICAgICAgICAgIC52c2F2ZSB7ZDgsIGQ5LCBkMTB9CisgICAgICAgICAgICBmc3RtZGQgc3AhLCB7ZDgsIGQ5LCBkMTB9CisgICAgIDxicj48ZW0+VkZQdjMgcmVnaXN0ZXJzPC9lbT48YnI+CisgICAgICAgICAgICAudnNhdmUge2QxNSwgZDE2LCBkMTd9CisgICAgICAgICAgICB2c3RtIHNwISwge2QxNSwgZDE2LCBkMTd9Cis8L3ByZT4KKyAgICAgPHA+U2luY2UgRkxETVggYW5kIEZTVE1YIGFyZSBub3cgZGVwcmVjYXRlZCwgdGhpcyBkaXJlY3RpdmUgc2hvdWxkIGJlCit1c2VkIGluIGZhdm91ciBvZiA8Y29kZT4uc2F2ZTwvY29kZT4gZm9yIHNhdmluZyBWRlAgcmVnaXN0ZXJzIGZvciBBUk12NiBhbmQgYWJvdmUuCisKKyAgICAgPCEtLSBXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXVyAtLT4KKyAgICAgPCEtLSBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCAtLT4KKyAgICAgPCEtLSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWSAtLT4KKyAgICAgPCEtLSBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWiAtLT4KKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1GbG9hdGluZy1Qb2ludC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNLUZsb2F0aW5nLVBvaW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgyOTkyMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1GbG9hdGluZy1Qb2ludC5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFSTSBGbG9hdGluZyBQb2ludCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVJNXzAwMmREZXBlbmRlbnQuaHRtbCNBUk1fMDAyZERlcGVuZGVudCIgdGl0bGU9IkFSTS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBUk0tU3ludGF4Lmh0bWwjQVJNLVN5bnRheCIgdGl0bGU9IkFSTSBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIiB0aXRsZT0iQVJNIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUk0tRmxvYXRpbmctUG9pbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBUk0tU3ludGF4Lmh0bWwjQVJNLVN5bnRheCI+QVJNIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjQVJNXzAwMmREZXBlbmRlbnQiPkFSTS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQuMyBGbG9hdGluZyBQb2ludDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtQVJNLV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktNjQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtQVJNLWZsb2F0aW5nLXBvaW50LV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktNjQ3Ij48L2E+VGhlIEFSTSBmYW1pbHkgdXNlcyA8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+IGZsb2F0aW5nLXBvaW50IG51bWJlcnMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1NYXBwaW5nLVN5bWJvbHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1NYXBwaW5nLVN5bWJvbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTVkZGMwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNLU1hcHBpbmctU3ltYm9scy5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFSTSBNYXBwaW5nIFN5bWJvbHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjQVJNXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJBUk0tRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVJNLU9wY29kZXMuaHRtbCNBUk0tT3Bjb2RlcyIgdGl0bGU9IkFSTSBPcGNvZGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJNLVVud2luZGluZy1UdXRvcmlhbC5odG1sI0FSTS1VbndpbmRpbmctVHV0b3JpYWwiIHRpdGxlPSJBUk0gVW53aW5kaW5nIFR1dG9yaWFsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVJNLU1hcHBpbmctU3ltYm9scyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBUk0tVW53aW5kaW5nLVR1dG9yaWFsLmh0bWwjQVJNLVVud2luZGluZy1UdXRvcmlhbCI+QVJNIFVud2luZGluZyBUdXRvcmlhbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjQVJNLU9wY29kZXMiPkFSTSBPcGNvZGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVJNXzAwMmREZXBlbmRlbnQuaHRtbCNBUk1fMDAyZERlcGVuZGVudCI+QVJNLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNC42IE1hcHBpbmcgU3ltYm9sczwvaDQ+CisKKzxwPlRoZSBBUk0gRUxGIHNwZWNpZmljYXRpb24gcmVxdWlyZXMgdGhhdCBzcGVjaWFsIHN5bWJvbHMgYmUgaW5zZXJ0ZWQKK2ludG8gb2JqZWN0IGZpbGVzIHRvIG1hcmsgY2VydGFpbiBmZWF0dXJlczoKKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRhXzAwN2QtNzAyIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPiRhPC9jb2RlPjxkZD5BdCB0aGUgc3RhcnQgb2YgYSByZWdpb24gb2YgY29kZSBjb250YWluaW5nIEFSTSBpbnN0cnVjdGlvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHRfMDA3ZC03MDMiPjwvYT48YnI+PGR0Pjxjb2RlPiR0PC9jb2RlPjxkZD5BdCB0aGUgc3RhcnQgb2YgYSByZWdpb24gb2YgY29kZSBjb250YWluaW5nIFRIVU1CIGluc3RydWN0aW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0ZF8wMDdkLTcwNCI+PC9hPjxicj48ZHQ+PGNvZGU+JGQ8L2NvZGU+PGRkPkF0IHRoZSBzdGFydCBvZiBhIHJlZ2lvbiBvZiBkYXRhLgorCisgICA8L2RsPgorCisgICA8cD5UaGUgYXNzZW1ibGVyIHdpbGwgYXV0b21hdGljYWxseSBpbnNlcnQgdGhlc2Ugc3ltYm9scyBmb3IgeW91IC0gdGhlcmUKK2lzIG5vIG5lZWQgdG8gY29kZSB0aGVtIHlvdXJzZWxmLiAgU3VwcG9ydCBmb3IgdGFnZ2luZyBzeW1ib2xzICgkYiwKKyRmLCAkcCBhbmQgJG0pIHdoaWNoIGlzIGFsc28gbWVudGlvbmVkIGluIHRoZSBjdXJyZW50IEFSTSBFTEYKK3NwZWNpZmljYXRpb24gaXMgbm90IGltcGxlbWVudGVkLiAgVGhpcyBpcyBiZWNhdXNlIHRoZXkgaGF2ZSBiZWVuCitkcm9wcGVkIGZyb20gdGhlIG5ldyBFQUJJIGFuZCBzbyB0b29scyBjYW5ub3QgcmVseSB1cG9uIHRoZWlyCitwcmVzZW5jZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNLU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1PcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlmOTJmYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1PcGNvZGVzLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFSTSBPcGNvZGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQVJNLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiIHRpdGxlPSJBUk0gRGlyZWN0aXZlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFSTS1NYXBwaW5nLVN5bWJvbHMuaHRtbCNBUk0tTWFwcGluZy1TeW1ib2xzIiB0aXRsZT0iQVJNIE1hcHBpbmcgU3ltYm9scyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTS1PcGNvZGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFSTS1NYXBwaW5nLVN5bWJvbHMuaHRtbCNBUk0tTWFwcGluZy1TeW1ib2xzIj5BUk0gTWFwcGluZyBTeW1ib2xzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50Ij5BUk0tRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40LjUgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFSTS1vcGNvZGVzLTY5NiI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZXMtZm9yLUFSTS02OTciPjwvYT48Y29kZT5hczwvY29kZT4gaW1wbGVtZW50cyBhbGwgdGhlIHN0YW5kYXJkIEFSTSBvcGNvZGVzLiAgSXQgYWxzbworaW1wbGVtZW50cyBzZXZlcmFsIHBzZXVkbyBvcGNvZGVzLCBpbmNsdWRpbmcgc2V2ZXJhbCBzeW50aGV0aWMgbG9hZAoraW5zdHJ1Y3Rpb25zLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JOT1BfMDA3ZC1wc2V1ZG8tb3BfMDAyYy1BUk0tNjk4Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPk5PUDwvY29kZT48ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgbm9wCis8L3ByZT4KKyAgICAgPHA+VGhpcyBwc2V1ZG8gb3Agd2lsbCBhbHdheXMgZXZhbHVhdGUgdG8gYSBsZWdhbCBBUk0gaW5zdHJ1Y3Rpb24gdGhhdCBkb2VzCitub3RoaW5nLiAgQ3VycmVudGx5IGl0IHdpbGwgZXZhbHVhdGUgdG8gTU9WIHIwLCByMC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkxEUi1yZWdfMDAyY18wMDNkXzAwM2NsYWJlbF8wMDNlXzAwN2QtcHNldWRvLW9wXzAwMmMtQVJNLTY5OSI+PC9hPjxicj48ZHQ+PGNvZGU+TERSPC9jb2RlPjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICBsZHIgJmx0O3JlZ2lzdGVyJmd0OyAsID0gJmx0O2V4cHJlc3Npb24mZ3Q7Cis8L3ByZT4KKyAgICAgPHA+SWYgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYSBudW1lcmljIGNvbnN0YW50IHRoZW4gYSBNT1Ygb3IgTVZOCitpbnN0cnVjdGlvbiB3aWxsIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIExEUiBpbnN0cnVjdGlvbiwgaWYgdGhlCitjb25zdGFudCBjYW4gYmUgZ2VuZXJhdGVkIGJ5IGVpdGhlciBvZiB0aGVzZSBpbnN0cnVjdGlvbnMuICBPdGhlcndpc2UKK3RoZSBjb25zdGFudCB3aWxsIGJlIHBsYWNlZCBpbnRvIHRoZSBuZWFyZXN0IGxpdGVyYWwgcG9vbCAoaWYgaXQgbm90CithbHJlYWR5IHRoZXJlKSBhbmQgYSBQQyByZWxhdGl2ZSBMRFIgaW5zdHJ1Y3Rpb24gd2lsbCBiZSBnZW5lcmF0ZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBRFItcmVnXzAwMmNfMDAzY2xhYmVsXzAwM2VfMDA3ZC1wc2V1ZG8tb3BfMDAyYy1BUk0tNzAwIj48L2E+PGJyPjxkdD48Y29kZT5BRFI8L2NvZGU+PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIGFkciAmbHQ7cmVnaXN0ZXImZ3Q7ICZsdDtsYWJlbCZndDsKKzwvcHJlPgorICAgICA8cD5UaGlzIGluc3RydWN0aW9uIHdpbGwgbG9hZCB0aGUgYWRkcmVzcyBvZiA8dmFyPmxhYmVsPC92YXI+IGludG8gdGhlIGluZGljYXRlZAorcmVnaXN0ZXIuICBUaGUgaW5zdHJ1Y3Rpb24gd2lsbCBldmFsdWF0ZSB0byBhIFBDIHJlbGF0aXZlIEFERCBvciBTVUIKK2luc3RydWN0aW9uIGRlcGVuZGluZyB1cG9uIHdoZXJlIHRoZSBsYWJlbCBpcyBsb2NhdGVkLiAgSWYgdGhlIGxhYmVsIGlzCitvdXQgb2YgcmFuZ2UsIG9yIGlmIGl0IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzYW1lIGZpbGUgKGFuZCBzZWN0aW9uKSBhcwordGhlIEFEUiBpbnN0cnVjdGlvbiwgdGhlbiBhbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC4gIFRoaXMgaW5zdHJ1Y3Rpb24KK3dpbGwgbm90IG1ha2UgdXNlIG9mIHRoZSBsaXRlcmFsIHBvb2wuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBRFJMLXJlZ18wMDJjXzAwM2NsYWJlbF8wMDNlXzAwN2QtcHNldWRvLW9wXzAwMmMtQVJNLTcwMSI+PC9hPjxicj48ZHQ+PGNvZGU+QURSTDwvY29kZT48ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgYWRybCAmbHQ7cmVnaXN0ZXImZ3Q7ICZsdDtsYWJlbCZndDsKKzwvcHJlPgorICAgICA8cD5UaGlzIGluc3RydWN0aW9uIHdpbGwgbG9hZCB0aGUgYWRkcmVzcyBvZiA8dmFyPmxhYmVsPC92YXI+IGludG8gdGhlIGluZGljYXRlZAorcmVnaXN0ZXIuICBUaGUgaW5zdHJ1Y3Rpb24gd2lsbCBldmFsdWF0ZSB0byBvbmUgb3IgdHdvIFBDIHJlbGF0aXZlIEFERAorb3IgU1VCIGluc3RydWN0aW9ucyBkZXBlbmRpbmcgdXBvbiB3aGVyZSB0aGUgbGFiZWwgaXMgbG9jYXRlZC4gIElmIGEKK3NlY29uZCBpbnN0cnVjdGlvbiBpcyBub3QgbmVlZGVkIGEgTk9QIGluc3RydWN0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkIGluCitpdHMgcGxhY2UsIHNvIHRoYXQgdGhpcyBpbnN0cnVjdGlvbiBpcyBhbHdheXMgOCBieXRlcyBsb25nLgorCisgICAgIDxwPklmIHRoZSBsYWJlbCBpcyBvdXQgb2YgcmFuZ2UsIG9yIGlmIGl0IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzYW1lIGZpbGUKKyhhbmQgc2VjdGlvbikgYXMgdGhlIEFEUkwgaW5zdHJ1Y3Rpb24sIHRoZW4gYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQuIAorVGhpcyBpbnN0cnVjdGlvbiB3aWxsIG5vdCBtYWtlIHVzZSBvZiB0aGUgbGl0ZXJhbCBwb29sLgorCisgICA8L2RsPgorCisgICA8cD5Gb3IgaW5mb3JtYXRpb24gb24gdGhlIEFSTSBvciBUaHVtYiBpbnN0cnVjdGlvbiBzZXRzLCBzZWUgPGNpdGU+QVJNCitTb2Z0d2FyZSBEZXZlbG9wbWVudCBUb29sa2l0IFJlZmVyZW5jZSBNYW51YWw8L2NpdGU+LCBBZHZhbmNlZCBSSVNDIE1hY2hpbmVzCitMdGQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk0tT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NDA4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk0tT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMzUwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUk0gT3B0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVJNXzAwMmREZXBlbmRlbnQuaHRtbCNBUk1fMDAyZERlcGVuZGVudCIgdGl0bGU9IkFSTS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBUk0tU3ludGF4Lmh0bWwjQVJNLVN5bnRheCIgdGl0bGU9IkFSTSBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUk0tT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBUk0tU3ludGF4Lmh0bWwjQVJNLVN5bnRheCI+QVJNIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjQVJNXzAwMmREZXBlbmRlbnQiPkFSTS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQuMSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtQVJNLW9wdGlvbnMtXzAwMjhub25lXzAwMjktNjEzIj48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9ucy1mb3ItQVJNLV8wMDI4bm9uZV8wMDI5LTYxNCI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtY3B1XzAwM2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYxNSI+PC9hPgorPGRsPjxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5wcm9jZXNzb3I8L3Zhcj48Y29kZT5bKzwvY29kZT48dmFyPmV4dGVuc2lvbjwvdmFyPjxjb2RlPi4uLl08L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgdGFyZ2V0IHByb2Nlc3Nvci4gIFRoZSBhc3NlbWJsZXIgd2lsbCBpc3N1ZSBhbgorZXJyb3IgbWVzc2FnZSBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYXNzZW1ibGUgYW4gaW5zdHJ1Y3Rpb24gd2hpY2gKK3dpbGwgbm90IGV4ZWN1dGUgb24gdGhlIHRhcmdldCBwcm9jZXNzb3IuICBUaGUgZm9sbG93aW5nIHByb2Nlc3NvciBuYW1lcyBhcmUKK3JlY29nbml6ZWQ6Cis8Y29kZT5hcm0xPC9jb2RlPiwKKzxjb2RlPmFybTI8L2NvZGU+LAorPGNvZGU+YXJtMjUwPC9jb2RlPiwKKzxjb2RlPmFybTM8L2NvZGU+LAorPGNvZGU+YXJtNjwvY29kZT4sCis8Y29kZT5hcm02MDwvY29kZT4sCis8Y29kZT5hcm02MDA8L2NvZGU+LAorPGNvZGU+YXJtNjEwPC9jb2RlPiwKKzxjb2RlPmFybTYyMDwvY29kZT4sCis8Y29kZT5hcm03PC9jb2RlPiwKKzxjb2RlPmFybTdtPC9jb2RlPiwKKzxjb2RlPmFybTdkPC9jb2RlPiwKKzxjb2RlPmFybTdkbTwvY29kZT4sCis8Y29kZT5hcm03ZGk8L2NvZGU+LAorPGNvZGU+YXJtN2RtaTwvY29kZT4sCis8Y29kZT5hcm03MDwvY29kZT4sCis8Y29kZT5hcm03MDA8L2NvZGU+LAorPGNvZGU+YXJtNzAwaTwvY29kZT4sCis8Y29kZT5hcm03MTA8L2NvZGU+LAorPGNvZGU+YXJtNzEwdDwvY29kZT4sCis8Y29kZT5hcm03MjA8L2NvZGU+LAorPGNvZGU+YXJtNzIwdDwvY29kZT4sCis8Y29kZT5hcm03NDB0PC9jb2RlPiwKKzxjb2RlPmFybTcxMGM8L2NvZGU+LAorPGNvZGU+YXJtNzEwMDwvY29kZT4sCis8Y29kZT5hcm03NTAwPC9jb2RlPiwKKzxjb2RlPmFybTc1MDBmZTwvY29kZT4sCis8Y29kZT5hcm03dDwvY29kZT4sCis8Y29kZT5hcm03dGRtaTwvY29kZT4sCis8Y29kZT5hcm03dGRtaS1zPC9jb2RlPiwKKzxjb2RlPmFybTg8L2NvZGU+LAorPGNvZGU+YXJtODEwPC9jb2RlPiwKKzxjb2RlPnN0cm9uZ2FybTwvY29kZT4sCis8Y29kZT5zdHJvbmdhcm0xPC9jb2RlPiwKKzxjb2RlPnN0cm9uZ2FybTExMDwvY29kZT4sCis8Y29kZT5zdHJvbmdhcm0xMTAwPC9jb2RlPiwKKzxjb2RlPnN0cm9uZ2FybTExMTA8L2NvZGU+LAorPGNvZGU+YXJtOTwvY29kZT4sCis8Y29kZT5hcm05MjA8L2NvZGU+LAorPGNvZGU+YXJtOTIwdDwvY29kZT4sCis8Y29kZT5hcm05MjJ0PC9jb2RlPiwKKzxjb2RlPmFybTk0MHQ8L2NvZGU+LAorPGNvZGU+YXJtOXRkbWk8L2NvZGU+LAorPGNvZGU+ZmE1MjY8L2NvZGU+IChGYXJhZGF5IEZBNTI2IHByb2Nlc3NvciksCis8Y29kZT5mYTYyNjwvY29kZT4gKEZhcmFkYXkgRkE2MjYgcHJvY2Vzc29yKSwKKzxjb2RlPmFybTllPC9jb2RlPiwKKzxjb2RlPmFybTkyNmU8L2NvZGU+LAorPGNvZGU+YXJtOTI2ZWotczwvY29kZT4sCis8Y29kZT5hcm05NDZlLXIwPC9jb2RlPiwKKzxjb2RlPmFybTk0NmU8L2NvZGU+LAorPGNvZGU+YXJtOTQ2ZS1zPC9jb2RlPiwKKzxjb2RlPmFybTk2NmUtcjA8L2NvZGU+LAorPGNvZGU+YXJtOTY2ZTwvY29kZT4sCis8Y29kZT5hcm05NjZlLXM8L2NvZGU+LAorPGNvZGU+YXJtOTY4ZS1zPC9jb2RlPiwKKzxjb2RlPmFybTEwdDwvY29kZT4sCis8Y29kZT5hcm0xMHRkbWk8L2NvZGU+LAorPGNvZGU+YXJtMTBlPC9jb2RlPiwKKzxjb2RlPmFybTEwMjA8L2NvZGU+LAorPGNvZGU+YXJtMTAyMHQ8L2NvZGU+LAorPGNvZGU+YXJtMTAyMGU8L2NvZGU+LAorPGNvZGU+YXJtMTAyMmU8L2NvZGU+LAorPGNvZGU+YXJtMTAyNmVqLXM8L2NvZGU+LAorPGNvZGU+ZmE2MDZ0ZTwvY29kZT4gKEZhcmFkYXkgRkE2MDZURSBwcm9jZXNzb3IpLAorPGNvZGU+ZmE2MTZ0ZTwvY29kZT4gKEZhcmFkYXkgRkE2MTZURSBwcm9jZXNzb3IpLAorPGNvZGU+ZmE2MjZ0ZTwvY29kZT4gKEZhcmFkYXkgRkE2MjZURSBwcm9jZXNzb3IpLAorPGNvZGU+Zm1wNjI2PC9jb2RlPiAoRmFyYWRheSBGTVA2MjYgcHJvY2Vzc29yKSwKKzxjb2RlPmZhNzI2dGU8L2NvZGU+IChGYXJhZGF5IEZBNzI2VEUgcHJvY2Vzc29yKSwKKzxjb2RlPmFybTExMzZqLXM8L2NvZGU+LAorPGNvZGU+YXJtMTEzNmpmLXM8L2NvZGU+LAorPGNvZGU+YXJtMTE1NnQyLXM8L2NvZGU+LAorPGNvZGU+YXJtMTE1NnQyZi1zPC9jb2RlPiwKKzxjb2RlPmFybTExNzZqei1zPC9jb2RlPiwKKzxjb2RlPmFybTExNzZqemYtczwvY29kZT4sCis8Y29kZT5tcGNvcmU8L2NvZGU+LAorPGNvZGU+bXBjb3Jlbm92ZnA8L2NvZGU+LAorPGNvZGU+Y29ydGV4LWE1PC9jb2RlPiwKKzxjb2RlPmNvcnRleC1hNzwvY29kZT4sCis8Y29kZT5jb3J0ZXgtYTg8L2NvZGU+LAorPGNvZGU+Y29ydGV4LWE5PC9jb2RlPiwKKzxjb2RlPmNvcnRleC1hMTU8L2NvZGU+LAorPGNvZGU+Y29ydGV4LXI0PC9jb2RlPiwKKzxjb2RlPmNvcnRleC1yNGY8L2NvZGU+LAorPGNvZGU+Y29ydGV4LXI1PC9jb2RlPiwKKzxjb2RlPmNvcnRleC1yNzwvY29kZT4sCis8Y29kZT5jb3J0ZXgtbTQ8L2NvZGU+LAorPGNvZGU+Y29ydGV4LW0zPC9jb2RlPiwKKzxjb2RlPmNvcnRleC1tMTwvY29kZT4sCis8Y29kZT5jb3J0ZXgtbTA8L2NvZGU+LAorPGNvZGU+Y29ydGV4LW0wcGx1czwvY29kZT4sCis8Y29kZT5lcDkzMTI8L2NvZGU+IChBUk05MjAgd2l0aCBDaXJydXMgTWF2ZXJpY2sgY29wcm9jZXNzb3IpLAorPGNvZGU+aTgwMjAwPC9jb2RlPiAoSW50ZWwgWFNjYWxlIHByb2Nlc3NvcikKKzxjb2RlPml3bW14dDwvY29kZT4gKEludGVsKHIpIFhTY2FsZSBwcm9jZXNzb3Igd2l0aCBXaXJlbGVzcyBNTVgodG0pIHRlY2hub2xvZ3kgY29wcm9jZXNzb3IpCithbmQKKzxjb2RlPnhzY2FsZTwvY29kZT4uIAorVGhlIHNwZWNpYWwgbmFtZSA8Y29kZT5hbGw8L2NvZGU+IG1heSBiZSB1c2VkIHRvIGFsbG93IHRoZQorYXNzZW1ibGVyIHRvIGFjY2VwdCBpbnN0cnVjdGlvbnMgdmFsaWQgZm9yIGFueSBBUk0gcHJvY2Vzc29yLgorCisgICAgIDxwPkluIGFkZGl0aW9uIHRvIHRoZSBiYXNpYyBpbnN0cnVjdGlvbiBzZXQsIHRoZSBhc3NlbWJsZXIgY2FuIGJlIHRvbGQgdG8KK2FjY2VwdCB2YXJpb3VzIGV4dGVuc2lvbiBtbmVtb25pY3MgdGhhdCBleHRlbmQgdGhlIHByb2Nlc3NvciB1c2luZyB0aGUKK2NvLXByb2Nlc3NvciBpbnN0cnVjdGlvbiBzcGFjZS4gIEZvciBleGFtcGxlLCA8Y29kZT4tbWNwdT1hcm05MjArbWF2ZXJpY2s8L2NvZGU+CitpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPGNvZGU+LW1jcHU9ZXA5MzEyPC9jb2RlPi4KKworICAgICA8cD5NdWx0aXBsZSBleHRlbnNpb25zIG1heSBiZSBzcGVjaWZpZWQsIHNlcGFyYXRlZCBieSBhIDxjb2RlPis8L2NvZGU+LiAgVGhlCitleHRlbnNpb25zIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gYXNjZW5kaW5nIGFscGhhYmV0aWNhbCBvcmRlci4KKworICAgICA8cD5Tb21lIGV4dGVuc2lvbnMgbWF5IGJlIHJlc3RyaWN0ZWQgdG8gcGFydGljdWxhciBhcmNoaXRlY3R1cmVzOyB0aGlzIGlzCitkb2N1bWVudGVkIGluIHRoZSBsaXN0IG9mIGV4dGVuc2lvbnMgYmVsb3cuCisKKyAgICAgPHA+RXh0ZW5zaW9uIG1uZW1vbmljcyBtYXkgYWxzbyBiZSByZW1vdmVkIGZyb20gdGhvc2UgdGhlIGFzc2VtYmxlciBhY2NlcHRzLiAKK1RoaXMgaXMgZG9uZSBiZSBwcmVwZW5kaW5nIDxjb2RlPm5vPC9jb2RlPiB0byB0aGUgb3B0aW9uIHRoYXQgYWRkcyB0aGUgZXh0ZW5zaW9uLiAKK0V4dGVuc2lvbnMgdGhhdCBhcmUgcmVtb3ZlZCBzaG91bGQgYmUgbGlzdGVkIGFmdGVyIGFsbCBleHRlbnNpb25zIHdoaWNoIGhhdmUKK2JlZW4gYWRkZWQsIGFnYWluIGluIGFzY2VuZGluZyBhbHBoYWJldGljYWwgb3JkZXIuICBGb3IgZXhhbXBsZSwKKzxjb2RlPi1tY3B1PWVwOTMxMitub21hdmVyaWNrPC9jb2RlPiBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPGNvZGU+LW1jcHU9YXJtOTIwPC9jb2RlPi4KKworICAgICA8cD5UaGUgZm9sbG93aW5nIGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6Cis8Y29kZT5jcnlwdG88L2NvZGU+IChDcnlwdG9ncmFwaHkgRXh0ZW5zaW9ucyBmb3IgdjgtQSBhcmNoaXRlY3R1cmUsIGltcGxpZXMgPGNvZGU+ZnArc2ltZDwvY29kZT4pLAorPGNvZGU+ZnA8L2NvZGU+IChGbG9hdGluZyBQb2ludCBFeHRlbnNpb25zIGZvciB2OC1BIGFyY2hpdGVjdHVyZSksCis8Y29kZT5pZGl2PC9jb2RlPiAoSW50ZWdlciBEaXZpZGUgRXh0ZW5zaW9ucyBmb3IgdjctQSBhbmQgdjctUiBhcmNoaXRlY3R1cmVzKSwKKzxjb2RlPml3bW14dDwvY29kZT4sCis8Y29kZT5pd21teHQyPC9jb2RlPiwKKzxjb2RlPm1hdmVyaWNrPC9jb2RlPiwKKzxjb2RlPm1wPC9jb2RlPiAoTXVsdGlwcm9jZXNzaW5nIEV4dGVuc2lvbnMgZm9yIHY3LUEgYW5kIHY3LVIgYXJjaGl0ZWN0dXJlcyksCis8Y29kZT5vczwvY29kZT4gKE9wZXJhdGluZyBTeXN0ZW0gZm9yIHY2TSBhcmNoaXRlY3R1cmUpLAorPGNvZGU+c2VjPC9jb2RlPiAoU2VjdXJpdHkgRXh0ZW5zaW9ucyBmb3IgdjZLIGFuZCB2Ny1BIGFyY2hpdGVjdHVyZXMpLAorPGNvZGU+c2ltZDwvY29kZT4gKEFkdmFuY2VkIFNJTUQgRXh0ZW5zaW9ucyBmb3IgdjgtQSBhcmNoaXRlY3R1cmUsIGltcGxpZXMgPGNvZGU+ZnA8L2NvZGU+KSwKKzxjb2RlPnZpcnQ8L2NvZGU+IChWaXJ0dWFsaXphdGlvbiBFeHRlbnNpb25zIGZvciB2Ny1BIGFyY2hpdGVjdHVyZSwgaW1wbGllcworPGNvZGU+aWRpdjwvY29kZT4pLAorYW5kCis8Y29kZT54c2NhbGU8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYXJjaF8wMDNkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MTYiPjwvYT48YnI+PGR0Pjxjb2RlPi1tYXJjaD08L2NvZGU+PHZhcj5hcmNoaXRlY3R1cmU8L3Zhcj48Y29kZT5bKzwvY29kZT48dmFyPmV4dGVuc2lvbjwvdmFyPjxjb2RlPi4uLl08L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gIFRoZSBhc3NlbWJsZXIgd2lsbCBpc3N1ZQorYW4gZXJyb3IgbWVzc2FnZSBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYXNzZW1ibGUgYW4gaW5zdHJ1Y3Rpb24gd2hpY2gKK3dpbGwgbm90IGV4ZWN1dGUgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuICBUaGUgZm9sbG93aW5nIGFyY2hpdGVjdHVyZQorbmFtZXMgYXJlIHJlY29nbml6ZWQ6Cis8Y29kZT5hcm12MTwvY29kZT4sCis8Y29kZT5hcm12MjwvY29kZT4sCis8Y29kZT5hcm12MmE8L2NvZGU+LAorPGNvZGU+YXJtdjJzPC9jb2RlPiwKKzxjb2RlPmFybXYzPC9jb2RlPiwKKzxjb2RlPmFybXYzbTwvY29kZT4sCis8Y29kZT5hcm12NDwvY29kZT4sCis8Y29kZT5hcm12NHhtPC9jb2RlPiwKKzxjb2RlPmFybXY0dDwvY29kZT4sCis8Y29kZT5hcm12NHR4bTwvY29kZT4sCis8Y29kZT5hcm12NTwvY29kZT4sCis8Y29kZT5hcm12NXQ8L2NvZGU+LAorPGNvZGU+YXJtdjV0eG08L2NvZGU+LAorPGNvZGU+YXJtdjV0ZTwvY29kZT4sCis8Y29kZT5hcm12NXRleHA8L2NvZGU+LAorPGNvZGU+YXJtdjY8L2NvZGU+LAorPGNvZGU+YXJtdjZqPC9jb2RlPiwKKzxjb2RlPmFybXY2azwvY29kZT4sCis8Y29kZT5hcm12Nno8L2NvZGU+LAorPGNvZGU+YXJtdjZ6azwvY29kZT4sCis8Y29kZT5hcm12Ni1tPC9jb2RlPiwKKzxjb2RlPmFybXY2cy1tPC9jb2RlPiwKKzxjb2RlPmFybXY3PC9jb2RlPiwKKzxjb2RlPmFybXY3LWE8L2NvZGU+LAorPGNvZGU+YXJtdjctcjwvY29kZT4sCis8Y29kZT5hcm12Ny1tPC9jb2RlPiwKKzxjb2RlPmFybXY3ZS1tPC9jb2RlPiwKKzxjb2RlPmFybXY4LWE8L2NvZGU+LAorPGNvZGU+aXdtbXh0PC9jb2RlPgorYW5kCis8Y29kZT54c2NhbGU8L2NvZGU+LiAKK0lmIGJvdGggPGNvZGU+LW1jcHU8L2NvZGU+IGFuZAorPGNvZGU+LW1hcmNoPC9jb2RlPiBhcmUgc3BlY2lmaWVkLCB0aGUgYXNzZW1ibGVyIHdpbGwgdXNlCit0aGUgc2V0dGluZyBmb3IgPGNvZGU+LW1jcHU8L2NvZGU+LgorCisgICAgIDxwPlRoZSBhcmNoaXRlY3R1cmUgb3B0aW9uIGNhbiBiZSBleHRlbmRlZCB3aXRoIHRoZSBzYW1lIGluc3RydWN0aW9uIHNldAorZXh0ZW5zaW9uIG9wdGlvbnMgYXMgdGhlIDxjb2RlPi1tY3B1PC9jb2RlPiBvcHRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1mcHVfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjE3Ij48L2E+PGJyPjxkdD48Y29kZT4tbWZwdT08L2NvZGU+PHZhcj5mbG9hdGluZy1wb2ludC1mb3JtYXQ8L3Zhcj48ZGQ+CitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGZsb2F0aW5nIHBvaW50IGZvcm1hdCB0byBhc3NlbWJsZSBmb3IuICBUaGUKK2Fzc2VtYmxlciB3aWxsIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFzc2VtYmxlCithbiBpbnN0cnVjdGlvbiB3aGljaCB3aWxsIG5vdCBleGVjdXRlIG9uIHRoZSB0YXJnZXQgZmxvYXRpbmcgcG9pbnQgdW5pdC4gCitUaGUgZm9sbG93aW5nIGZvcm1hdCBvcHRpb25zIGFyZSByZWNvZ25pemVkOgorPGNvZGU+c29mdGZwYTwvY29kZT4sCis8Y29kZT5mcGU8L2NvZGU+LAorPGNvZGU+ZnBlMjwvY29kZT4sCis8Y29kZT5mcGUzPC9jb2RlPiwKKzxjb2RlPmZwYTwvY29kZT4sCis8Y29kZT5mcGExMDwvY29kZT4sCis8Y29kZT5mcGExMTwvY29kZT4sCis8Y29kZT5hcm03NTAwZmU8L2NvZGU+LAorPGNvZGU+c29mdHZmcDwvY29kZT4sCis8Y29kZT5zb2Z0dmZwK3ZmcDwvY29kZT4sCis8Y29kZT52ZnA8L2NvZGU+LAorPGNvZGU+dmZwMTA8L2NvZGU+LAorPGNvZGU+dmZwMTAtcjA8L2NvZGU+LAorPGNvZGU+dmZwOTwvY29kZT4sCis8Y29kZT52ZnB4ZDwvY29kZT4sCis8Y29kZT52ZnB2MjwvY29kZT4sCis8Y29kZT52ZnB2MzwvY29kZT4sCis8Y29kZT52ZnB2My1mcDE2PC9jb2RlPiwKKzxjb2RlPnZmcHYzLWQxNjwvY29kZT4sCis8Y29kZT52ZnB2My1kMTYtZnAxNjwvY29kZT4sCis8Y29kZT52ZnB2M3hkPC9jb2RlPiwKKzxjb2RlPnZmcHYzeGQtZDE2PC9jb2RlPiwKKzxjb2RlPnZmcHY0PC9jb2RlPiwKKzxjb2RlPnZmcHY0LWQxNjwvY29kZT4sCis8Y29kZT5mcHY0LXNwLWQxNjwvY29kZT4sCis8Y29kZT5mcC1hcm12ODwvY29kZT4sCis8Y29kZT5hcm0xMDIwdDwvY29kZT4sCis8Y29kZT5hcm0xMDIwZTwvY29kZT4sCis8Y29kZT5hcm0xMTM2amYtczwvY29kZT4sCis8Y29kZT5tYXZlcmljazwvY29kZT4sCis8Y29kZT5uZW9uPC9jb2RlPiwKKzxjb2RlPm5lb24tdmZwdjQ8L2NvZGU+LAorPGNvZGU+bmVvbi1mcC1hcm12ODwvY29kZT4sCithbmQKKzxjb2RlPmNyeXB0by1uZW9uLWZwLWFybXY4PC9jb2RlPi4KKworICAgICA8cD5JbiBhZGRpdGlvbiB0byBkZXRlcm1pbmluZyB3aGljaCBpbnN0cnVjdGlvbnMgYXJlIGFzc2VtYmxlZCwgdGhpcyBvcHRpb24KK2Fsc28gYWZmZWN0cyB0aGUgd2F5IGluIHdoaWNoIHRoZSA8Y29kZT4uZG91YmxlPC9jb2RlPiBhc3NlbWJsZXIgZGlyZWN0aXZlIGJlaGF2ZXMKK3doZW4gYXNzZW1ibGluZyBsaXR0bGUtZW5kaWFuIGNvZGUuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgZGVwZW5kZW50IG9uIHRoZSBwcm9jZXNzb3Igc2VsZWN0ZWQuICBGb3IgQXJjaGl0ZWN0dXJlIDUgb3IKK2xhdGVyLCB0aGUgZGVmYXVsdCBpcyB0byBhc3NlbWJsZXIgZm9yIFZGUCBpbnN0cnVjdGlvbnM7IGZvciBlYXJsaWVyCithcmNoaXRlY3R1cmVzIHRoZSBkZWZhdWx0IGlzIHRvIGFzc2VtYmxlIGZvciBGUEEgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdGh1bWJfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYxOCI+PC9hPjxicj48ZHQ+PGNvZGU+LW10aHVtYjwvY29kZT48ZGQ+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIGFzc2VtYmxlciBzaG91bGQgc3RhcnQgYXNzZW1ibGluZyBUaHVtYgoraW5zdHJ1Y3Rpb25zOyB0aGF0IGlzLCBpdCBzaG91bGQgYmVoYXZlIGFzIHRob3VnaCB0aGUgZmlsZSBzdGFydHMgd2l0aCBhCis8Y29kZT4uY29kZSAxNjwvY29kZT4gZGlyZWN0aXZlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdGh1bWJfMDAyZGludGVyd29ya18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjE5Ij48L2E+PGJyPjxkdD48Y29kZT4tbXRodW1iLWludGVyd29yazwvY29kZT48ZGQ+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhlIGFzc2VtYmxlciBzaG91bGQKK2JlIG1hcmtlZCBhcyBzdXBwb3J0aW5nIGludGVyd29ya2luZy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWltcGxpY2l0XzAwMmRpdF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjIwIj48L2E+PGJyPjxkdD48Y29kZT4tbWltcGxpY2l0LWl0PW5ldmVyPC9jb2RlPjxkdD48Y29kZT4tbWltcGxpY2l0LWl0PWFsd2F5czwvY29kZT48ZHQ+PGNvZGU+LW1pbXBsaWNpdC1pdD1hcm08L2NvZGU+PGR0Pjxjb2RlPi1taW1wbGljaXQtaXQ9dGh1bWI8L2NvZGU+PGRkPlRoZSA8Y29kZT4tbWltcGxpY2l0LWl0PC9jb2RlPiBvcHRpb24gY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBhc3NlbWJsZXIgd2hlbgorY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGFyZSBub3QgZW5jbG9zZWQgaW4gSVQgYmxvY2tzLiAKK1RoZXJlIGFyZSBmb3VyIHBvc3NpYmxlIGJlaGF2aW9ycy4gCitJZiA8Y29kZT5uZXZlcjwvY29kZT4gaXMgc3BlY2lmaWVkLCBzdWNoIGNvbnN0cnVjdHMgY2F1c2UgYSB3YXJuaW5nIGluIEFSTQorY29kZSBhbmQgYW4gZXJyb3IgaW4gVGh1bWItMiBjb2RlLiAKK0lmIDxjb2RlPmFsd2F5czwvY29kZT4gaXMgc3BlY2lmaWVkLCBzdWNoIGNvbnN0cnVjdHMgYXJlIGFjY2VwdGVkIGluIGJvdGgKK0FSTSBhbmQgVGh1bWItMiBjb2RlLCB3aGVyZSB0aGUgSVQgaW5zdHJ1Y3Rpb24gaXMgYWRkZWQgaW1wbGljaXRseS4gCitJZiA8Y29kZT5hcm08L2NvZGU+IGlzIHNwZWNpZmllZCwgc3VjaCBjb25zdHJ1Y3RzIGFyZSBhY2NlcHRlZCBpbiBBUk0gY29kZQorYW5kIGNhdXNlIGFuIGVycm9yIGluIFRodW1iLTIgY29kZS4gCitJZiA8Y29kZT50aHVtYjwvY29kZT4gaXMgc3BlY2lmaWVkLCBzdWNoIGNvbnN0cnVjdHMgY2F1c2UgYSB3YXJuaW5nIGluIEFSTQorY29kZSBhbmQgYXJlIGFjY2VwdGVkIGluIFRodW1iLTIgY29kZS4gIElmIHlvdSBvbWl0IHRoaXMgb3B0aW9uLCB0aGUKK2JlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gPGNvZGU+LW1pbXBsaWNpdC1pdD1hcm08L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYXBjc18wMDJkMjZfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYyMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYXBjc18wMDJkMzJfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYyMiI+PC9hPjxicj48ZHQ+PGNvZGU+LW1hcGNzLTI2PC9jb2RlPjxkdD48Y29kZT4tbWFwY3MtMzI8L2NvZGU+PGRkPlRoZXNlIG9wdGlvbnMgc3BlY2lmeSB0aGF0IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBhc3NlbWJsZXIgc2hvdWxkCitiZSBtYXJrZWQgYXMgc3VwcG9ydGluZyB0aGUgaW5kaWNhdGVkIHZlcnNpb24gb2YgdGhlIEFybSBQcm9jZWR1cmUuIAorQ2FsbGluZyBTdGFuZGFyZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWF0cGNzXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MjMiPjwvYT48YnI+PGR0Pjxjb2RlPi1tYXRwY3M8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBhc3NlbWJsZXIgc2hvdWxkCitiZSBtYXJrZWQgYXMgc3VwcG9ydGluZyB0aGUgQXJtL1RodW1iIFByb2NlZHVyZSBDYWxsaW5nIFN0YW5kYXJkLiAgSWYKK2VuYWJsZWQgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgYXNzZW1ibGVyIHRvIGNyZWF0ZSBhbiBlbXB0eQorZGVidWdnaW5nIHNlY3Rpb24gaW4gdGhlIG9iamVjdCBmaWxlIGNhbGxlZCAuYXJtLmF0cGNzLiAgRGVidWdnZXJzIGNhbgordXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHRoZSBBQkkgYmVpbmcgdXNlZCBieS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWFwY3NfMDAyZGZsb2F0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MjQiPjwvYT48YnI+PGR0Pjxjb2RlPi1tYXBjcy1mbG9hdDwvY29kZT48ZGQ+VGhpcyBpbmRpY2F0ZXMgdGhlIGZsb2F0aW5nIHBvaW50IHZhcmlhbnQgb2YgdGhlIEFQQ1Mgc2hvdWxkIGJlCit1c2VkLiAgSW4gdGhpcyB2YXJpYW50IGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIEZQCityZWdpc3RlcnMgcmF0aGVyIHRoYW4gaW50ZWdlciByZWdpc3RlcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1hcGNzXzAwMmRyZWVudHJhbnRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYyNSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1hcGNzLXJlZW50cmFudDwvY29kZT48ZGQ+VGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVlbnRyYW50IHZhcmlhbnQgb2YgdGhlIEFQQ1Mgc2hvdWxkIGJlIHVzZWQuIAorVGhpcyB2YXJpYW50IHN1cHBvcnRzIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1mbG9hdF8wMDJkYWJpXzAwM2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYyNiI+PC9hPjxicj48ZHQ+PGNvZGU+LW1mbG9hdC1hYmk9PC9jb2RlPjx2YXI+YWJpPC92YXI+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBhc3NlbWJsZXIgc2hvdWxkIGJlCittYXJrZWQgYXMgdXNpbmcgc3BlY2lmaWVkIGZsb2F0aW5nIHBvaW50IEFCSS4gCitUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgcmVjb2duaXplZDoKKzxjb2RlPnNvZnQ8L2NvZGU+LAorPGNvZGU+c29mdGZwPC9jb2RlPgorYW5kCis8Y29kZT5oYXJkPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkZWFiaV8wMDNkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MjciPjwvYT48YnI+PGR0Pjxjb2RlPi1tZWFiaT08L2NvZGU+PHZhcj52ZXI8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHdoaWNoIEVBQkkgdmVyc2lvbiB0aGUgcHJvZHVjZWQgb2JqZWN0IGZpbGVzIHNob3VsZAorY29uZm9ybSB0by4gCitUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgcmVjb2duaXplZDoKKzxjb2RlPmdudTwvY29kZT4sCis8Y29kZT40PC9jb2RlPgorYW5kCis8Y29kZT41PC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkRUJfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYyOCI+PC9hPjxicj48ZHQ+PGNvZGU+LUVCPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUgYXNzZW1ibGVyIHNob3VsZAorYmUgbWFya2VkIGFzIGJlaW5nIGVuY29kZWQgZm9yIGEgYmlnLWVuZGlhbiBwcm9jZXNzb3IuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZEVMXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MjkiPjwvYT48YnI+PGR0Pjxjb2RlPi1FTDwvY29kZT48ZGQ+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhlIGFzc2VtYmxlciBzaG91bGQKK2JlIG1hcmtlZCBhcyBiZWluZyBlbmNvZGVkIGZvciBhIGxpdHRsZS1lbmRpYW4gcHJvY2Vzc29yLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRrXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MzAiPjwvYT48YSBuYW1lPSJpbmRleC1QSUMtY29kZS1nZW5lcmF0aW9uLWZvci1BUk0tNjMxIj48L2E+PGJyPjxkdD48Y29kZT4tazwvY29kZT48ZGQ+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIG91dHB1dCBvZiB0aGUgYXNzZW1ibGVyIHNob3VsZCBiZSBtYXJrZWQKK2FzIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgKFBJQykuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZF8wMDJkZml4XzAwMmR2NGJ4XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MzIiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZml4LXY0Yng8L2NvZGU+PGRkPkFsbG93IDxjb2RlPkJYPC9jb2RlPiBpbnN0cnVjdGlvbnMgaW4gQVJNdjQgY29kZS4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSB3aXRoCit0aGUgbGlua2VyIG9wdGlvbiBvZiB0aGUgc2FtZSBuYW1lLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtd2Fybl8wMDJkZGVwcmVjYXRlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjMzIj48L2E+PGJyPjxkdD48Y29kZT4tbXdhcm4tZGVwcmVjYXRlZDwvY29kZT48ZHQ+PGNvZGU+LW1uby13YXJuLWRlcHJlY2F0ZWQ8L2NvZGU+PGRkPkVuYWJsZSBvciBkaXNhYmxlIHdhcm5pbmdzIGFib3V0IHVzaW5nIGRlcHJlY2F0ZWQgb3B0aW9ucyBvcgorZmVhdHVyZXMuICBUaGUgZGVmYXVsdCBpcyB0byB3YXJuLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk0tU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk0tU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA4ZWEzMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTS1TeW50YXguaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUk0gU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQVJNLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiIHRpdGxlPSJBUk0gT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFSTS1GbG9hdGluZy1Qb2ludC5odG1sI0FSTS1GbG9hdGluZy1Qb2ludCIgdGl0bGU9IkFSTSBGbG9hdGluZyBQb2ludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTS1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJNLUZsb2F0aW5nLVBvaW50Lmh0bWwjQVJNLUZsb2F0aW5nLVBvaW50Ij5BUk0gRmxvYXRpbmcgUG9pbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjQVJNXzAwMmREZXBlbmRlbnQiPkFSTS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQuMiBTeW50YXg8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQVJNXzAwMmRJbnN0cnVjdGlvbl8wMDJkU2V0Lmh0bWwjQVJNXzAwMmRJbnN0cnVjdGlvbl8wMDJkU2V0Ij5BUk0tSW5zdHJ1Y3Rpb24tU2V0PC9hPjogICAgICAgSW5zdHJ1Y3Rpb24gU2V0Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBUk1fMDAyZENoYXJzLmh0bWwjQVJNXzAwMmRDaGFycyI+QVJNLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iQVJNXzAwMmRSZWdzLmh0bWwjQVJNXzAwMmRSZWdzIj5BUk0tUmVnczwvYT46ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgTmFtZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkFSTV8wMDJkUmVsb2NhdGlvbnMuaHRtbCNBUk1fMDAyZFJlbG9jYXRpb25zIj5BUk0tUmVsb2NhdGlvbnM8L2E+OiAJICAgICBSZWxvY2F0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iQVJNXzAwMmROZW9uXzAwMmRBbGlnbm1lbnQuaHRtbCNBUk1fMDAyZE5lb25fMDAyZEFsaWdubWVudCI+QVJNLU5lb24tQWxpZ25tZW50PC9hPjogCSAgICAgTkVPTiBBbGlnbm1lbnQgU3BlY2lmaWVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNLVVud2luZGluZy1UdXRvcmlhbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNLVVud2luZGluZy1UdXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOTQzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk0tVW53aW5kaW5nLVR1dG9yaWFsLmh0bWwKQEAgLTAsMCArMSwxOTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFSTSBVbndpbmRpbmcgVHV0b3JpYWwgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjQVJNXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJBUk0tRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVJNLU1hcHBpbmctU3ltYm9scy5odG1sI0FSTS1NYXBwaW5nLVN5bWJvbHMiIHRpdGxlPSJBUk0gTWFwcGluZyBTeW1ib2xzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVJNLVVud2luZGluZy1UdXRvcmlhbCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFSTS1NYXBwaW5nLVN5bWJvbHMuaHRtbCNBUk0tTWFwcGluZy1TeW1ib2xzIj5BUk0gTWFwcGluZyBTeW1ib2xzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVJNXzAwMmREZXBlbmRlbnQuaHRtbCNBUk1fMDAyZERlcGVuZGVudCI+QVJNLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNC43IFVud2luZGluZzwvaDQ+CisKKzxwPlRoZSBBQkkgZm9yIHRoZSBBUk0gQXJjaGl0ZWN0dXJlIHNwZWNpZmllcyBhIHN0YW5kYXJkIGZvcm1hdCBmb3IKK2V4Y2VwdGlvbiB1bndpbmQgaW5mb3JtYXRpb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgd2hlbiBhbgorZXhjZXB0aW9uIGlzIHRocm93biB0byBkZXRlcm1pbmUgd2hlcmUgY29udHJvbCBzaG91bGQgYmUgdHJhbnNmZXJyZWQuIAorSW4gcGFydGljdWxhciwgdGhlIHVud2luZCBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaAorZnVuY3Rpb24gY2FsbGVkIHRoZSBmdW5jdGlvbiB0aGF0IHRocmV3IHRoZSBleGNlcHRpb24sIGFuZCB3aGljaAorZnVuY3Rpb24gY2FsbGVkIHRoYXQgb25lLCBhbmQgc28gZm9ydGguICBUaGlzIGluZm9ybWF0aW9uIGlzIGFsc28gdXNlZAordG8gcmVzdG9yZSB0aGUgdmFsdWVzIG9mIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgaW4gdGhlIGZ1bmN0aW9uCitjYXRjaGluZyB0aGUgZXhjZXB0aW9uLgorCisgICA8cD5JZiB5b3UgYXJlIHdyaXRpbmcgZnVuY3Rpb25zIGluIGFzc2VtYmx5IGNvZGUsIGFuZCB0aG9zZSBmdW5jdGlvbnMKK2NhbGwgb3RoZXIgZnVuY3Rpb25zIHRoYXQgdGhyb3cgZXhjZXB0aW9ucywgeW91IG11c3QgdXNlIGFzc2VtYmx5Citwc2V1ZG8gb3BzIHRvIGVuc3VyZSB0aGF0IGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiB1bndpbmQgaW5mb3JtYXRpb24gaXMKK2dlbmVyYXRlZC4gIE90aGVyd2lzZSwgaWYgb25lIG9mIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGJ5IHlvdXIgYXNzZW1ibHkKK2NvZGUgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlIHJ1bi10aW1lIGxpYnJhcnkgd2lsbCBiZSB1bmFibGUgdG8KK3Vud2luZCB0aGUgc3RhY2sgdGhyb3VnaCB5b3VyIGFzc2VtYmx5IGNvZGUgYW5kIHlvdXIgcHJvZ3JhbSB3aWxsIG5vdAorYmVoYXZlIGNvcnJlY3RseS4KKworICAgPHA+VG8gaWxsdXN0cmF0ZSB0aGUgdXNlIG9mIHRoZXNlIHBzZXVkbyBvcHMsIHdlIHdpbGwgZXhhbWluZSB0aGUgY29kZQordGhhdCBHKysgZ2VuZXJhdGVzIGZvciB0aGUgZm9sbG93aW5nIEMrKyBpbnB1dDoKKworPHByZSBjbGFzcz0idmVyYmF0aW0iPnZvaWQgY2FsbGVlIChpbnQgKik7CisKK2ludCAKK2NhbGxlciAoKSAKK3sKKyAgaW50IGk7CisgIGNhbGxlZSAoJmFtcDtpKTsKKyAgcmV0dXJuIGk7IAorfQorPC9wcmU+CisKKyAgIDxwPlRoaXMgZXhhbXBsZSBkb2VzIG5vdCBzaG93IGhvdyB0byB0aHJvdyBvciBjYXRjaCBhbiBleGNlcHRpb24gZnJvbQorYXNzZW1ibHkgY29kZS4gIFRoYXQgaXMgYSBtdWNoIG1vcmUgY29tcGxleCBvcGVyYXRpb24gYW5kIHNob3VsZAorYWx3YXlzIGJlIGRvbmUgaW4gYSBoaWdoLWxldmVsIGxhbmd1YWdlLCBzdWNoIGFzIEMrKywgdGhhdCBkaXJlY3RseQorc3VwcG9ydHMgZXhjZXB0aW9ucy4KKworICAgPHA+VGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IG9uZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgRysrIHdoZW4gY29tcGlsaW5nIHRoZQorZXhhbXBsZSBhYm92ZSBpczoKKworPHByZSBjbGFzcz0idmVyYmF0aW0iPl9aNmNhbGxlcnY6CisJLmZuc3RhcnQKKy5MRkIyOgorCUAgRnVuY3Rpb24gc3VwcG9ydHMgaW50ZXJ3b3JraW5nLgorCUAgYXJncyA9IDAsIHByZXRlbmQgPSAwLCBmcmFtZSA9IDgKKwlAIGZyYW1lX25lZWRlZCA9IDEsIHVzZXNfYW5vbnltb3VzX2FyZ3MgPSAwCisJc3RtZmQJc3AhLCB7ZnAsIGxyfQorCS5zYXZlIHtmcCwgbHJ9CisuTENGSTA6CisJLnNldGZwIGZwLCBzcCwgIzQKKwlhZGQJZnAsIHNwLCAjNAorLkxDRkkxOgorCS5wYWQgIzgKKwlzdWIJc3AsIHNwLCAjOAorLkxDRkkyOgorCXN1YglyMywgZnAsICM4CisJbW92CXIwLCByMworCWJsCV9aNmNhbGxlZVBpCisJbGRyCXIzLCBbZnAsICMtOF0KKwltb3YJcjAsIHIzCisJc3ViCXNwLCBmcCwgIzQKKwlsZG1mZAlzcCEsIHtmcCwgbHJ9CisJYngJbHIKKy5MRkUyOgorCS5mbmVuZAorPC9wcmU+CisKKyAgIDxwPk9mIGNvdXJzZSwgdGhlIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucyB2YXJpZXMgYmFzZWQgb24gdGhlIG9wdGlvbnMKK3lvdSBwYXNzIHRvIEdDQyBhbmQgb24gdGhlIHZlcnNpb24gb2YgR0NDIGluIHVzZS4gIFRoZSBleGFjdAoraW5zdHJ1Y3Rpb25zIGFyZSBub3QgaW1wb3J0YW50IHNpbmNlIHdlIGFyZSBmb2N1c2luZyBvbiB0aGUgcHNldWRvIG9wcwordGhhdCBhcmUgdXNlZCB0byBnZW5lcmF0ZSB1bndpbmQgaW5mb3JtYXRpb24uCisKKyAgIDxwPkFuIGltcG9ydGFudCBhc3N1bXB0aW9uIG1hZGUgYnkgdGhlIHVud2luZGVyIGlzIHRoYXQgdGhlIHN0YWNrIGZyYW1lCitkb2VzIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbi4gIEluIHBhcnRpY3VsYXIsIHNpbmNlCit3ZSBhc3N1bWUgdGhhdCB0aGUgYXNzZW1ibHkgY29kZSBkb2VzIG5vdCBpdHNlbGYgdGhyb3cgYW4gZXhjZXB0aW9uLAordGhlIG9ubHkgcG9pbnQgd2hlcmUgYW4gZXhjZXB0aW9uIGNhbiBiZSB0aHJvd24gaXMgZnJvbSBhIGNhbGwsIHN1Y2gKK2FzIHRoZSA8Y29kZT5ibDwvY29kZT4gaW5zdHJ1Y3Rpb24gYWJvdmUuICBBdCBlYWNoIGNhbGwgc2l0ZSwgdGhlIHNhbWUgc2F2ZWQKK3JlZ2lzdGVycyAoaW5jbHVkaW5nIDxjb2RlPmxyPC9jb2RlPiwgd2hpY2ggaW5kaWNhdGVzIHRoZSByZXR1cm4gYWRkcmVzcykKK211c3QgYmUgbG9jYXRlZCBpbiB0aGUgc2FtZSBsb2NhdGlvbnMgcmVsYXRpdmUgdG8gdGhlIGZyYW1lIHBvaW50ZXIuCisKKyAgIDxwPlRoZSA8Y29kZT4uZm5zdGFydDwvY29kZT4gKHNlZSA8YSBocmVmPSJhcm1fMDA1ZmZuc3RhcnQuaHRtbCNhcm1fMDA1ZmZuc3RhcnQiPi5mbnN0YXJ0IHBzZXVkbyBvcDwvYT4pIHBzZXVkbworb3AgYXBwZWFycyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mIHRoZSBmdW5jdGlvbgord2hpbGUgdGhlIDxjb2RlPi5mbmVuZDwvY29kZT4gKHNlZSA8YSBocmVmPSJhcm1fMDA1ZmZuZW5kLmh0bWwjYXJtXzAwNWZmbmVuZCI+LmZuZW5kIHBzZXVkbyBvcDwvYT4pIHBzZXVkbworb3AgYXBwZWFycyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBpbnN0cnVjdGlvbiBvZiB0aGUgZnVuY3Rpb24uIAorVGhlc2UgcHNldWRvIG9wcyBzcGVjaWZ5IHRoZSByYW5nZSBvZiB0aGUgZnVuY3Rpb24uCisKKyAgIDxwPk9ubHkgdGhlIG9yZGVyIG9mIHRoZSBvdGhlciBwc2V1ZG9zIG9wcyAoZS5nLiwgPGNvZGU+LnNldGZwPC9jb2RlPiBvcgorPGNvZGU+LnBhZDwvY29kZT4pIG1hdHRlcnM7IHRoZWlyIGV4YWN0IGxvY2F0aW9ucyBhcmUgaXJyZWxldmFudC4gIEluIHRoZQorZXhhbXBsZSBhYm92ZSwgdGhlIGNvbXBpbGVyIGVtaXRzIHRoZSBwc2V1ZG8gb3BzIHdpdGggcGFydGljdWxhcgoraW5zdHJ1Y3Rpb25zLiAgVGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSwgYnV0IGl0IGlzCitub3QgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLiAgSXQgd291bGQgd29yayBqdXN0IGFzIHdlbGwgdG8gZW1pdCBhbGwKK29mIHRoZSBwc2V1ZG8gb3BzIG90aGVyIHRoYW4gPGNvZGU+LmZuZW5kPC9jb2RlPiBpbiB0aGUgc2FtZSBvcmRlciwgYnV0CitpbW1lZGlhdGVseSBhZnRlciA8Y29kZT4uZm5zdGFydDwvY29kZT4uCisKKyAgIDxwPlRoZSA8Y29kZT4uc2F2ZTwvY29kZT4gKHNlZSA8YSBocmVmPSJhcm1fMDA1ZnNhdmUuaHRtbCNhcm1fMDA1ZnNhdmUiPi5zYXZlIHBzZXVkbyBvcDwvYT4pIHBzZXVkbyBvcAoraW5kaWNhdGVzIHJlZ2lzdGVycyB0aGF0IGhhdmUgYmVlbiBzYXZlZCB0byB0aGUgc3RhY2sgc28gdGhhdCB0aGV5IGNhbgorYmUgcmVzdG9yZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zLiAgVGhlIGFyZ3VtZW50IHRvIHRoZQorPGNvZGU+LnNhdmU8L2NvZGU+IHBzZXVkbyBvcCBpcyBhIGxpc3Qgb2YgcmVnaXN0ZXJzIHRvIHNhdmUuICBJZiBhIHJlZ2lzdGVyCitpcyAmbGRxdW87Y2FsbGVlLXNhdmVkJnJkcXVvOyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBBQkkpIGFuZCBpcyBtb2RpZmllZCBieSB0aGUKK2Z1bmN0aW9uIHlvdSBhcmUgd3JpdGluZywgdGhlbiB5b3VyIGNvZGUgbXVzdCBzYXZlIHRoZSB2YWx1ZSBiZWZvcmUgaXQKK2lzIG1vZGlmaWVkIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBiZWZvcmUgdGhlIGZ1bmN0aW9uCityZXR1cm5zLiAgSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biwgdGhlIHJ1bi10aW1lIGxpYnJhcnkgcmVzdG9yZXMgdGhlCit2YWx1ZXMgb2YgdGhlc2UgcmVnaXN0ZXJzIGZyb20gdGhlaXIgbG9jYXRpb25zIG9uIHRoZSBzdGFjayBiZWZvcmUKK3JldHVybmluZyBjb250cm9sIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gIChPZiBjb3Vyc2UsIGlmIGFuCitleGNlcHRpb24gaXMgbm90IHRocm93biwgdGhlIGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIDxjb2RlPi5zYXZlPC9jb2RlPgorcHNldWRvIG9wIHJlc3RvcmVzIHRoZXNlIHJlZ2lzdGVycyBpbiB0aGUgZnVuY3Rpb24gZXBpbG9ndWUsIGFzIGlzCitkb25lIHdpdGggdGhlIDxjb2RlPmxkbWZkPC9jb2RlPiBpbnN0cnVjdGlvbiBhYm92ZS4pCisKKyAgIDxwPllvdSBkbyBub3QgaGF2ZSB0byBzYXZlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nCitvZiB0aGUgZnVuY3Rpb24gYW5kIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhlIDxjb2RlPi5zYXZlPC9jb2RlPiBwc2V1ZG8gb3AKK2ltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIHJlZ2lzdGVycyBhcmUgc2F2ZWQuIAorSG93ZXZlciwgaWYgeW91IG1vZGlmeSBhIGNhbGxlZS1zYXZlZCByZWdpc3RlciwgeW91IG11c3Qgc2F2ZSBpdCBvbgordGhlIHN0YWNrIGJlZm9yZSBtb2RpZnlpbmcgaXQgYW5kIGJlZm9yZSBjYWxsaW5nIGFueSBmdW5jdGlvbnMgd2hpY2gKK21pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbi4gIEFuZCwgeW91IG11c3QgdXNlIHRoZSA8Y29kZT4uc2F2ZTwvY29kZT4gcHNldWRvCitvcCB0byBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIGRvbmUgc28uCisKKyAgIDxwPlRoZSA8Y29kZT4ucGFkPC9jb2RlPiAoc2VlIDxhIGhyZWY9ImFybV8wMDVmcGFkLmh0bWwjYXJtXzAwNWZwYWQiPi5wYWQ8L2E+KSBwc2V1ZG8gb3AgaW5kaWNhdGVzIGEKK21vZGlmaWNhdGlvbiBvZiB0aGUgc3RhY2sgcG9pbnRlciB0aGF0IGRvZXMgbm90IHNhdmUgYW55IHJlZ2lzdGVycy4gCitUaGUgYXJndW1lbnQgaXMgdGhlIG51bWJlciBvZiBieXRlcyAoaW4gZGVjaW1hbCkgdGhhdCBhcmUgc3VidHJhY3RlZAorZnJvbSB0aGUgc3RhY2sgcG9pbnRlci4gIChPbiBBUk0gQ1BVcywgdGhlIHN0YWNrIGdyb3dzIGRvd253YXJkcywgc28KK3N1YnRyYWN0aW5nIGZyb20gdGhlIHN0YWNrIHBvaW50ZXIgaW5jcmVhc2VzIHRoZSBzaXplIG9mIHRoZSBzdGFjay4pCisKKyAgIDxwPlRoZSA8Y29kZT4uc2V0ZnA8L2NvZGU+IChzZWUgPGEgaHJlZj0iYXJtXzAwNWZzZXRmcC5odG1sI2FybV8wMDVmc2V0ZnAiPi5zZXRmcCBwc2V1ZG8gb3A8L2E+KSBwc2V1ZG8gb3AKK2luZGljYXRlcyB0aGUgcmVnaXN0ZXIgdGhhdCBjb250YWlucyB0aGUgZnJhbWUgcG9pbnRlci4gIFRoZSBmaXJzdAorYXJndW1lbnQgaXMgdGhlIHJlZ2lzdGVyIHRoYXQgaXMgc2V0LCB3aGljaCBpcyB0eXBpY2FsbHkgPGNvZGU+ZnA8L2NvZGU+LiAKK1RoZSBzZWNvbmQgYXJndW1lbnQgaW5kaWNhdGVzIHRoZSByZWdpc3RlciBmcm9tIHdoaWNoIHRoZSBmcmFtZQorcG9pbnRlciB0YWtlcyBpdHMgdmFsdWUuICBUaGUgdGhpcmQgYXJndW1lbnQsIGlmIHByZXNlbnQsIGlzIHRoZSB2YWx1ZQorKGluIGRlY2ltYWwpIGFkZGVkIHRvIHRoZSByZWdpc3RlciBzcGVjaWZpZWQgYnkgdGhlIHNlY29uZCBhcmd1bWVudCB0bworY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIGZyYW1lIHBvaW50ZXIuICBZb3Ugc2hvdWxkIG5vdCBtb2RpZnkgdGhlCitmcmFtZSBwb2ludGVyIGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbi4KKworICAgPHA+SWYgeW91IGRvIG5vdCB1c2UgYSBmcmFtZSBwb2ludGVyLCB0aGVuIHlvdSBzaG91bGQgbm90IHVzZSB0aGUKKzxjb2RlPi5zZXRmcDwvY29kZT4gcHNldWRvIG9wLiAgSWYgeW91IGRvIG5vdCB1c2UgYSBmcmFtZSBwb2ludGVyLCB0aGVuIHlvdQorc2hvdWxkIGF2b2lkIG1vZGlmeWluZyB0aGUgc3RhY2sgcG9pbnRlciBvdXRzaWRlIG9mIHRoZSBmdW5jdGlvbgorcHJvbG9ndWUuICBPdGhlcndpc2UsIHRoZSBydW4tdGltZSBsaWJyYXJ5IHdpbGwgYmUgdW5hYmxlIHRvIGZpbmQKK3NhdmVkIHJlZ2lzdGVycyB3aGVuIGl0IGlzIHVud2luZGluZyB0aGUgc3RhY2suCisKKyAgIDxwPlRoZSBwc2V1ZG8gb3BzIGRlc2NyaWJlZCBhYm92ZSBhcmUgc3VmZmljaWVudCBmb3Igd3JpdGluZyBhc3NlbWJseQorY29kZSB0aGF0IGNhbGxzIGZ1bmN0aW9ucyB3aGljaCBtYXkgdGhyb3cgZXhjZXB0aW9ucy4gIElmIHlvdSBuZWVkIHRvCitrbm93IG1vcmUgYWJvdXQgdGhlIG9iamVjdC1maWxlIGZvcm1hdCB1c2VkIHRvIHJlcHJlc2VudCB1bndpbmQKK2luZm9ybWF0aW9uLCB5b3UgbWF5IGNvbnN1bHQgdGhlIDxjaXRlPkV4Y2VwdGlvbiBIYW5kbGluZyBBQkkgZm9yIHRoZQorQVJNIEFyY2hpdGVjdHVyZTwvY2l0ZT4gYXZhaWxhYmxlIGZyb20gPGEgaHJlZj0iaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbSI+aHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbTwvYT4uCisKKzwhLS0gQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ODdjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk1fMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJNLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBUk0tU3ludGF4Lmh0bWwjQVJNLVN5bnRheCIgdGl0bGU9IkFSTSBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBUk1fMDAyZEluc3RydWN0aW9uXzAwMmRTZXQuaHRtbCNBUk1fMDAyZEluc3RydWN0aW9uXzAwMmRTZXQiIHRpdGxlPSJBUk0tSW5zdHJ1Y3Rpb24tU2V0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJNXzAwMmRSZWdzLmh0bWwjQVJNXzAwMmRSZWdzIiB0aXRsZT0iQVJNLVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUk0tQ2hhcnMiPjwvYT4KKzxhIG5hbWU9IkFSTV8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJNXzAwMmRSZWdzLmh0bWwjQVJNXzAwMmRSZWdzIj5BUk0tUmVnczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFSTV8wMDJkSW5zdHJ1Y3Rpb25fMDAyZFNldC5odG1sI0FSTV8wMDJkSW5zdHJ1Y3Rpb25fMDAyZFNldCI+QVJNLUluc3RydWN0aW9uLVNldDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFSTS1TeW50YXguaHRtbCNBUk0tU3ludGF4Ij5BUk0gU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS40LjIuMiBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtQVJNLTYzNCI+PC9hPjxhIG5hbWU9ImluZGV4LUFSTS1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTYzNSI+PC9hPlRoZSBwcmVzZW5jZSBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbnl3aGVyZSBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZSBzdGFydCBvZgorYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoYXQgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSB0aGVuIHRoZSB3aG9sZQorbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjb3VsZCBhbHNvIGJlCithIGxvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1BUk0tNjM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLUFSTS02MzciPjwvYT48YSBuYW1lPSJpbmRleC1BUk0tbGluZS1zZXBhcmF0b3ItNjM4Ij48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIG5ld2xpbmUgdG8gc2VwYXJhdGUKK3N0YXRlbWVudHMuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWltbWVkaWF0ZS1jaGFyYWN0ZXJfMDAyYy1BUk0tNjM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtQVJNLWltbWVkaWF0ZS1jaGFyYWN0ZXItNjQwIj48L2E+RWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUgaW1tZWRpYXRlIG9wZXJhbmRzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1pZGVudGlmaWVyc18wMDJjLUFSTS02NDEiPjwvYT48YSBuYW1lPSJpbmRleC1BUk0taWRlbnRpZmllcnMtNjQyIj48L2E+KlRPRE8qIEV4cGxhaW4gYWJvdXQgL2RhdGEgbW9kaWZpZXIgb24gc3ltYm9scy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTV8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5MDczMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTV8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJNLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNBUkNfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFSQy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBVlJfMDAyZERlcGVuZGVudC5odG1sI0FWUl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQVZSLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTS1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IkFSTV8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFWUl8wMDJkRGVwZW5kZW50Lmh0bWwjQVZSXzAwMmREZXBlbmRlbnQiPkFWUi1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBUkNfMDAyZERlcGVuZGVudC5odG1sI0FSQ18wMDJkRGVwZW5kZW50Ij5BUkMtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjQgQVJNIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUFSTS1zdXBwb3J0LTYxMSI+PC9hPjxhIG5hbWU9ImluZGV4LVRodW1iLXN1cHBvcnQtNjEyIj48L2E+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT46ICAgICAgICAgICAgICAgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iQVJNLVN5bnRheC5odG1sI0FSTS1TeW50YXgiPkFSTSBTeW50YXg8L2E+OiAgICAgICAgICAgICAgICBTeW50YXgKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkFSTS1GbG9hdGluZy1Qb2ludC5odG1sI0FSTS1GbG9hdGluZy1Qb2ludCI+QVJNIEZsb2F0aW5nIFBvaW50PC9hPjogICAgICAgIEZsb2F0aW5nIFBvaW50Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT46ICAgICAgICAgICAgQVJNIE1hY2hpbmUgRGlyZWN0aXZlcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iQVJNLU9wY29kZXMuaHRtbCNBUk0tT3Bjb2RlcyI+QVJNIE9wY29kZXM8L2E+OiAgICAgICAgICAgICAgIE9wY29kZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkFSTS1NYXBwaW5nLVN5bWJvbHMuaHRtbCNBUk0tTWFwcGluZy1TeW1ib2xzIj5BUk0gTWFwcGluZyBTeW1ib2xzPC9hPjogICAgICAgTWFwcGluZyBTeW1ib2xzCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJBUk0tVW53aW5kaW5nLVR1dG9yaWFsLmh0bWwjQVJNLVVud2luZGluZy1UdXRvcmlhbCI+QVJNIFVud2luZGluZyBUdXRvcmlhbDwvYT46ICAgIFVud2luZGluZworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNXzAwMmRJbnN0cnVjdGlvbl8wMDJkU2V0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk1fMDAyZEluc3RydWN0aW9uXzAwMmRTZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTNhNDI1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNXzAwMmRJbnN0cnVjdGlvbl8wMDJkU2V0Lmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJNLUluc3RydWN0aW9uLVNldCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVJNLVN5bnRheC5odG1sI0FSTS1TeW50YXgiIHRpdGxlPSJBUk0gU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI0FSTV8wMDJkQ2hhcnMiIHRpdGxlPSJBUk0tQ2hhcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUk0tSW5zdHJ1Y3Rpb24tU2V0Ij48L2E+Cis8YSBuYW1lPSJBUk1fMDAyZEluc3RydWN0aW9uXzAwMmRTZXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI0FSTV8wMDJkQ2hhcnMiPkFSTS1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFSTS1TeW50YXguaHRtbCNBUk0tU3ludGF4Ij5BUk0gU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS40LjIuMSBJbnN0cnVjdGlvbiBTZXQgU3ludGF4PC9oNT4KKworPHA+VHdvIHNsaWdodGx5IGRpZmZlcmVudCBzeW50YXhlcyBhcmUgc3VwcG9ydCBmb3IgQVJNIGFuZCBUSFVNQgoraW5zdHJ1Y3Rpb25zLiAgVGhlIGRlZmF1bHQsIDxjb2RlPmRpdmlkZWQ8L2NvZGU+LCB1c2VzIHRoZSBvbGQgc3R5bGUgd2hlcmUKK0FSTSBhbmQgVEhVTUIgaW5zdHJ1Y3Rpb25zIGhhZCB0aGVpciBvd24sIHNlcGFyYXRlIHN5bnRheGVzLiAgVGhlIG5ldywKKzxjb2RlPnVuaWZpZWQ8L2NvZGU+IHN5bnRheCwgd2hpY2ggY2FuIGJlIHNlbGVjdGVkIHZpYSB0aGUgPGNvZGU+LnN5bnRheDwvY29kZT4KK2RpcmVjdGl2ZSwgYW5kIGhhcyB0aGUgZm9sbG93aW5nIG1haW4gZmVhdHVyZXM6CisKKyAgICAgPGRsPgorPGR0PiZidWxsOzxkZD5JbW1lZGlhdGUgb3BlcmFuZHMgZG8gbm90IHJlcXVpcmUgYSA8Y29kZT4jPC9jb2RlPiBwcmVmaXguCisKKyAgICAgPGJyPjxkdD4mYnVsbDs8ZGQ+VGhlIDxjb2RlPklUPC9jb2RlPiBpbnN0cnVjdGlvbiBtYXkgYXBwZWFyLCBhbmQgaWYgaXQgZG9lcyBpdCBpcyB2YWxpZGF0ZWQKK2FnYWluc3Qgc3Vic2VxdWVudCBjb25kaXRpb25hbCBhZmZpeGVzLiAgSW4gQVJNIG1vZGUgaXQgZG9lcyBub3QKK2dlbmVyYXRlIG1hY2hpbmUgY29kZSwgaW4gVEhVTUIgbW9kZSBpdCBkb2VzLgorCisgICAgIDxicj48ZHQ+JmJ1bGw7PGRkPkZvciBBUk0gaW5zdHJ1Y3Rpb25zIHRoZSBjb25kaXRpb25hbCBhZmZpeGVzIGFsd2F5cyBhcHBlYXIgYXQgdGhlIGVuZAorb2YgdGhlIGluc3RydWN0aW9uLiAgRm9yIFRIVU1CIGluc3RydWN0aW9ucyBjb25kaXRpb25hbCBhZmZpeGVzIGNhbiBiZQordXNlZCwgYnV0IG9ubHkgaW5zaWRlIHRoZSBzY29wZSBvZiBhbiA8Y29kZT5JVDwvY29kZT4gaW5zdHJ1Y3Rpb24uCisKKyAgICAgPGJyPjxkdD4mYnVsbDs8ZGQ+QWxsIG9mIHRoZSBpbnN0cnVjdGlvbnMgbmV3IHRvIHRoZSBWNlQyIGFyY2hpdGVjdHVyZSAoYW5kIGxhdGVyKSBhcmUKK2F2YWlsYWJsZS4gIChPbmx5IGEgZmV3IHN1Y2ggaW5zdHJ1Y3Rpb25zIGNhbiBiZSB3cml0dGVuIGluIHRoZQorPGNvZGU+ZGl2aWRlZDwvY29kZT4gc3ludGF4KS4KKworICAgICA8YnI+PGR0PiZidWxsOzxkZD5UaGUgPGNvZGU+Lk48L2NvZGU+IGFuZCA8Y29kZT4uVzwvY29kZT4gc3VmZml4ZXMgYXJlIHJlY29nbml6ZWQgYW5kIGhvbm9yZWQuCisKKyAgICAgPGJyPjxkdD4mYnVsbDs8ZGQ+QWxsIGluc3RydWN0aW9ucyBzZXQgdGhlIGZsYWdzIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSBhbiA8Y29kZT5zPC9jb2RlPgorYWZmaXguIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVJNXzAwMmROZW9uXzAwMmRBbGlnbm1lbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTV8wMDJkTmVvbl8wMDJkQWxpZ25tZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjNTJiNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTV8wMDJkTmVvbl8wMDJkQWxpZ25tZW50Lmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJNLU5lb24tQWxpZ25tZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBUk0tU3ludGF4Lmh0bWwjQVJNLVN5bnRheCIgdGl0bGU9IkFSTSBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBUk1fMDAyZFJlbG9jYXRpb25zLmh0bWwjQVJNXzAwMmRSZWxvY2F0aW9ucyIgdGl0bGU9IkFSTS1SZWxvY2F0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTS1OZW9uLUFsaWdubWVudCI+PC9hPgorPGEgbmFtZT0iQVJNXzAwMmROZW9uXzAwMmRBbGlnbm1lbnQiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBUk1fMDAyZFJlbG9jYXRpb25zLmh0bWwjQVJNXzAwMmRSZWxvY2F0aW9ucyI+QVJNLVJlbG9jYXRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVJNLVN5bnRheC5odG1sI0FSTS1TeW50YXgiPkFSTSBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQuMi40IE5FT04gQWxpZ25tZW50IFNwZWNpZmllcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1hbGlnbm1lbnQtZm9yLU5FT04taW5zdHJ1Y3Rpb25zLTY0NSI+PC9hPlNvbWUgTkVPTiBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyBhbGxvdyBhbiBvcHRpb25hbCBhZGRyZXNzCithbGlnbm1lbnQgcXVhbGlmaWVyLiAKK1RoZSBBUk0gZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGlzIGlzIGluZGljYXRlZCBieQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5AIDwvc3Bhbj48dmFyPmFsaWduPC92YXI+PC9zYW1wPiZyc3F1bzsuIEhvd2V2ZXIgR0FTIGFscmVhZHkgaW50ZXJwcmV0cwordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgYXMgYSAibGluZSBjb21tZW50IiBzdGFydCwKK3NvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+OiA8L3NwYW4+PHZhcj5hbGlnbjwvdmFyPjwvc2FtcD4mcnNxdW87IGlzIHVzZWQgaW5zdGVhZC4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICB2bGQxLjgge3EwfSwgW3IwLCA6MTI4XQorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk1fMDAyZFJlZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTV8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjRlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk1fMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUk0tUmVncyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVJNLVN5bnRheC5odG1sI0FSTS1TeW50YXgiIHRpdGxlPSJBUk0gU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI0FSTV8wMDJkQ2hhcnMiIHRpdGxlPSJBUk0tQ2hhcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBUk1fMDAyZFJlbG9jYXRpb25zLmh0bWwjQVJNXzAwMmRSZWxvY2F0aW9ucyIgdGl0bGU9IkFSTS1SZWxvY2F0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTS1SZWdzIj48L2E+Cis8YSBuYW1lPSJBUk1fMDAyZFJlZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJNXzAwMmRSZWxvY2F0aW9ucy5odG1sI0FSTV8wMDJkUmVsb2NhdGlvbnMiPkFSTS1SZWxvY2F0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFSTV8wMDJkQ2hhcnMuaHRtbCNBUk1fMDAyZENoYXJzIj5BUk0tQ2hhcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBUk0tU3ludGF4Lmh0bWwjQVJNLVN5bnRheCI+QVJNIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNC4yLjMgUmVnaXN0ZXIgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1BUk0tcmVnaXN0ZXItbmFtZXMtNjQzIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXItbmFtZXNfMDAyYy1BUk0tNjQ0Ij48L2E+KlRPRE8qIEV4cGxhaW4gYWJvdXQgQVJNIHJlZ2lzdGVyIG5hbWluZywgYW5kIHRoZSBwcmVkZWZpbmVkIG5hbWVzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk1fMDAyZFJlbG9jYXRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUk1fMDAyZFJlbG9jYXRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlMGQ3NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FSTV8wMDJkUmVsb2NhdGlvbnMuaHRtbApAQCAtMCwwICsxLDkwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUk0tUmVsb2NhdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFSTS1TeW50YXguaHRtbCNBUk0tU3ludGF4IiB0aXRsZT0iQVJNIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFSTV8wMDJkUmVncy5odG1sI0FSTV8wMDJkUmVncyIgdGl0bGU9IkFSTS1SZWdzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJNXzAwMmROZW9uXzAwMmRBbGlnbm1lbnQuaHRtbCNBUk1fMDAyZE5lb25fMDAyZEFsaWdubWVudCIgdGl0bGU9IkFSTS1OZW9uLUFsaWdubWVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTS1SZWxvY2F0aW9ucyI+PC9hPgorPGEgbmFtZT0iQVJNXzAwMmRSZWxvY2F0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBUk1fMDAyZE5lb25fMDAyZEFsaWdubWVudC5odG1sI0FSTV8wMDJkTmVvbl8wMDJkQWxpZ25tZW50Ij5BUk0tTmVvbi1BbGlnbm1lbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBUk1fMDAyZFJlZ3MuaHRtbCNBUk1fMDAyZFJlZ3MiPkFSTS1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVJNLVN5bnRheC5odG1sI0FSTS1TeW50YXgiPkFSTSBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQuMy4xIEFSTSByZWxvY2F0aW9uIGdlbmVyYXRpb248L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1kYXRhLXJlbG9jYXRpb25zXzAwMmMtQVJNLTY0OCI+PC9hPjxhIG5hbWU9ImluZGV4LUFSTS1kYXRhLXJlbG9jYXRpb25zLTY0OSI+PC9hPlNwZWNpZmljIGRhdGEgcmVsb2NhdGlvbnMgY2FuIGJlIGdlbmVyYXRlZCBieSBwdXR0aW5nIHRoZSByZWxvY2F0aW9uIG5hbWUKK2luIHBhcmVudGhlc2VzIGFmdGVyIHRoZSBzeW1ib2wgbmFtZS4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAud29yZCBmb28oVEFSR0VUMSkKKzwvcHJlPgorICAgPHA+VGhpcyB3aWxsIGdlbmVyYXRlIGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9BUk1fVEFSR0VUMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWxvY2F0aW9uIGFnYWluc3QgdGhlIHN5bWJvbAorPHZhcj5mb288L3Zhcj4uIAorVGhlIGZvbGxvd2luZyByZWxvY2F0aW9ucyBhcmUgc3VwcG9ydGVkOgorPGNvZGU+R09UPC9jb2RlPiwKKzxjb2RlPkdPVE9GRjwvY29kZT4sCis8Y29kZT5UQVJHRVQxPC9jb2RlPiwKKzxjb2RlPlRBUkdFVDI8L2NvZGU+LAorPGNvZGU+U0JSRUw8L2NvZGU+LAorPGNvZGU+VExTR0Q8L2NvZGU+LAorPGNvZGU+VExTTERNPC9jb2RlPiwKKzxjb2RlPlRMU0xETzwvY29kZT4sCis8Y29kZT5UTFNERVNDPC9jb2RlPiwKKzxjb2RlPlRMU0NBTEw8L2NvZGU+LAorPGNvZGU+R09UVFBPRkY8L2NvZGU+LAorPGNvZGU+R09UX1BSRUw8L2NvZGU+CithbmQKKzxjb2RlPlRQT0ZGPC9jb2RlPi4KKworICAgPHA+Rm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB0b29sY2hhaW5zIHRoZSBhc3NlbWJsZXIgYWxzbyBhY2NlcHRzCis8Y29kZT4oUExUKTwvY29kZT4gYWZ0ZXIgYnJhbmNoIHRhcmdldHMuICBPbiBsZWdhY3kgdGFyZ2V0cyB0aGlzIHdpbGwKK2dlbmVyYXRlIHRoZSBkZXByZWNhdGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9BUk1fUExUMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVsb2NhdGlvbi4gIE9uIEVBQkkKK3RhcmdldHMgaXQgd2lsbCBlbmNvZGUgZWl0aGVyIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQVJNX0NBTEw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9BUk1fSlVNUDI0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlbG9jYXRpb24sIGFzIGFwcHJvcHJpYXRlLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1NT1ZXLWFuZC1NT1ZULXJlbG9jYXRpb25zXzAwMmMtQVJNLTY1MCI+PC9hPlJlbG9jYXRpb25zIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk1PVlc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TU9WVDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbnMgY2FuIGJlIGdlbmVyYXRlZAorYnkgcHJlZml4aW5nIHRoZSB2YWx1ZSB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izpsb3dlcjE2Ojwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jOnVwcGVyMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3Jlc3BlY3RpdmVseS4gIEZvciBleGFtcGxlIHRvIGxvYWQgdGhlIDMyLWJpdCBhZGRyZXNzIG9mIGZvbyBpbnRvIHIwOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICBNT1ZXIHIwLCAjOmxvd2VyMTY6Zm9vCisgICAgICAgICAgICAgTU9WVCByMCwgIzp1cHBlcjE2OmZvbworPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BUy1JbmRleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVMtSW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTdkZDgzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVMtSW5kZXguaHRtbApAQCAtMCwwICsxLDIzNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFTIEluZGV4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgdGl0bGU9IkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFTLUluZGV4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+QVMgSW5kZXg8L2gyPgorCis8dWwgY2xhc3M9ImluZGV4LWNwIiBjb21wYWN0PgorPGxpPjxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjaW5kZXgtZ190XzAwMjMtMTI1Ij48Y29kZT4jPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI2luZGV4LWdfdF8wMDIzQVBQLTEyMSI+PGNvZGU+I0FQUDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNpbmRleC1nX3RfMDAyM05PXzAwNWZBUFAtMTIwIj48Y29kZT4jTk9fQVBQPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0g2NF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0XzAwN2QtaW4tc3ltYm9sLW5hbWVzLTE3NzciPjxjb2RlPiQ8L2NvZGU+IGluIHN5bWJvbCBuYW1lczwvYT46IDxhIGhyZWY9IlNINjRfMDAyZENoYXJzLmh0bWwjU0g2NF8wMDJkQ2hhcnMiPlNINjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0XzAwN2QtaW4tc3ltYm9sLW5hbWVzLTE3NDgiPjxjb2RlPiQ8L2NvZGU+IGluIHN5bWJvbCBuYW1lczwvYT46IDxhIGhyZWY9IlNIXzAwMmRDaGFycy5odG1sI1NIXzAwMmRDaGFycyI+U0gtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRDaGFycy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRfMDA3ZC1pbi1zeW1ib2wtbmFtZXMtODM5Ij48Y29kZT4kPC9jb2RlPiBpbiBzeW1ib2wgbmFtZXM8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRDaGFycy5odG1sI0QzMFZfMDAyZENoYXJzIj5EMzBWLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0XzAwN2QtaW4tc3ltYm9sLW5hbWVzLTgxMiI+PGNvZGU+JDwvY29kZT4gaW4gc3ltYm9sIG5hbWVzPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyI+RDEwVi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1NYXBwaW5nLVN5bWJvbHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0YV8wMDdkLTcwMiI+PGNvZGU+JGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU1hcHBpbmctU3ltYm9scy5odG1sI0FSTS1NYXBwaW5nLVN5bWJvbHMiPkFSTSBNYXBwaW5nIFN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGFjb3NfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg2MSI+PGNvZGU+JGFjb3M8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0YXNpbl8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODYyIj48Y29kZT4kYXNpbjwvY29kZT4gbWF0aCBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRhdGFuXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NjMiPjxjb2RlPiRhdGFuPC9jb2RlPiBtYXRoIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGF0YW4yXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NjQiPjxjb2RlPiRhdGFuMjwvY29kZT4gbWF0aCBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRjZWlsXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NjUiPjxjb2RlPiRjZWlsPC9jb2RlPiBtYXRoIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGNvc18wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODY3Ij48Y29kZT4kY29zPC9jb2RlPiBtYXRoIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGNvc2hfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg2NiI+PGNvZGU+JGNvc2g8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0Y3ZmXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NjgiPjxjb2RlPiRjdmY8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0Y3ZpXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NjkiPjxjb2RlPiRjdmk8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1NYXBwaW5nLVN5bWJvbHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0ZF8wMDdkLTcwNCI+PGNvZGU+JGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU1hcHBpbmctU3ltYm9scy5odG1sI0FSTS1NYXBwaW5nLVN5bWJvbHMiPkFSTSBNYXBwaW5nIFN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU1hcHBpbmctU3ltYm9scy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRkXzAwN2QtNTQ3Ij48Y29kZT4kZDwvY29kZT48L2E+OiA8YSBocmVmPSJBQXJjaDY0LU1hcHBpbmctU3ltYm9scy5odG1sI0FBcmNoNjQtTWFwcGluZy1TeW1ib2xzIj5BQXJjaDY0IE1hcHBpbmcgU3ltYm9sczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0ZXhwXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NzAiPjxjb2RlPiRleHA8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0ZmFic18wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODcxIj48Y29kZT4kZmFiczwvY29kZT4gbWF0aCBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0Zmlyc3RjaF8wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5NzQiPjxjb2RlPiRmaXJzdGNoPC9jb2RlPiBzdWJzeW0gYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0Zmxvb3JfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg3MiI+PGNvZGU+JGZsb29yPC9jb2RlPiBtYXRoIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGZtb2RfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg3MyI+PGNvZGU+JGZtb2Q8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0aW50XzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NzQiPjxjb2RlPiRpbnQ8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGlzY29uc18wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5NzgiPjxjb2RlPiRpc2NvbnM8L2NvZGU+IHN1YnN5bSBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI1RJQzU0WF8wMDJkTWFjcm9zIj5USUM1NFgtTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0aXNkZWZlZF8wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5NzYiPjxjb2RlPiRpc2RlZmVkPC9jb2RlPiBzdWJzeW0gYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGlzbWVtYmVyXzAwN2Qtc3Vic3ltLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTk3NyI+PGNvZGU+JGlzbWVtYmVyPC9jb2RlPiBzdWJzeW0gYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGlzbmFtZV8wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5NzkiPjxjb2RlPiRpc25hbWU8L2NvZGU+IHN1YnN5bSBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI1RJQzU0WF8wMDJkTWFjcm9zIj5USUM1NFgtTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0aXNyZWdfMDA3ZC1zdWJzeW0tYnVpbHRpbl8wMDJjLVRJQzU0WC0xOTgwIj48Y29kZT4kaXNyZWc8L2NvZGU+IHN1YnN5bSBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI1RJQzU0WF8wMDJkTWFjcm9zIj5USUM1NFgtTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0bGFzdGNoXzAwN2Qtc3Vic3ltLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTk3NSI+PGNvZGU+JGxhc3RjaDwvY29kZT4gc3Vic3ltIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjVElDNTRYXzAwMmRNYWNyb3MiPlRJQzU0WC1NYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGxkZXhwXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NzUiPjxjb2RlPiRsZGV4cDwvY29kZT4gbWF0aCBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRsb2dfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg3NyI+PGNvZGU+JGxvZzwvY29kZT4gbWF0aCBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRsb2cxMF8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODc2Ij48Y29kZT4kbG9nMTA8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0bWF4XzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NzgiPjxjb2RlPiRtYXg8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0bWluXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NzkiPjxjb2RlPiRtaW48L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0cG93XzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4ODAiPjxjb2RlPiRwb3c8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0cm91bmRfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg4MSI+PGNvZGU+JHJvdW5kPC9jb2RlPiBtYXRoIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHNnbl8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODgyIj48Y29kZT4kc2duPC9jb2RlPiBtYXRoIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHNpbl8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODgzIj48Y29kZT4kc2luPC9jb2RlPiBtYXRoIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHNpbmhfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg4NCI+PGNvZGU+JHNpbmg8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0c3FydF8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODg1Ij48Y29kZT4kc3FydDwvY29kZT4gbWF0aCBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0c3RydWN0YWNjXzAwN2Qtc3Vic3ltLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTk4MiI+PGNvZGU+JHN0cnVjdGFjYzwvY29kZT4gc3Vic3ltIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjVElDNTRYXzAwMmRNYWNyb3MiPlRJQzU0WC1NYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRzdHJ1Y3Rzel8wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5ODEiPjxjb2RlPiRzdHJ1Y3RzejwvY29kZT4gc3Vic3ltIGJ1aWx0aW4sIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjVElDNTRYXzAwMmRNYWNyb3MiPlRJQzU0WC1NYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRzeW1jbXBfMDA3ZC1zdWJzeW0tYnVpbHRpbl8wMDJjLVRJQzU0WC0xOTczIj48Y29kZT4kc3ltY21wPC9jb2RlPiBzdWJzeW0gYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHN5bWxlbl8wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5NzIiPjxjb2RlPiRzeW1sZW48L2NvZGU+IHN1YnN5bSBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI1RJQzU0WF8wMDJkTWFjcm9zIj5USUM1NFgtTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU1hcHBpbmctU3ltYm9scy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjR0XzAwN2QtNzAzIj48Y29kZT4kdDwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tTWFwcGluZy1TeW1ib2xzLmh0bWwjQVJNLU1hcHBpbmctU3ltYm9scyI+QVJNIE1hcHBpbmcgU3ltYm9sczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0dGFuXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4ODYiPjxjb2RlPiR0YW48L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0dGFuaF8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODg3Ij48Y29kZT4kdGFuaDwvY29kZT4gbWF0aCBidWlsdGluLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjR0cnVuY18wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODg4Ij48Y29kZT4kdHJ1bmM8L2NvZGU+IG1hdGggYnVpbHRpbiwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtTWFwcGluZy1TeW1ib2xzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHhfMDA3ZC01NDYiPjxjb2RlPiR4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFBcmNoNjQtTWFwcGluZy1TeW1ib2xzLmh0bWwjQUFyY2g2NC1NYXBwaW5nLVN5bWJvbHMiPkFBcmNoNjQgTWFwcGluZyBTeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZE1vZGlmaWVycy5odG1sI2luZGV4LWdfdF8wMDI1Z3AtMTY1OSI+JWdwPC9hPjogPGEgaHJlZj0iUlhfMDAyZE1vZGlmaWVycy5odG1sI1JYXzAwMmRNb2RpZmllcnMiPlJYLU1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRNb2RpZmllcnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDI1Z3ByZWdfMDA3ZC0xNjYwIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVncHJlZzwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9IlJYXzAwMmRNb2RpZmllcnMuaHRtbCNSWF8wMDJkTW9kaWZpZXJzIj5SWC1Nb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkTW9kaWZpZXJzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyNXBpZHJlZ18wMDdkLTE2NjEiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXBpZHJlZzwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9IlJYXzAwMmRNb2RpZmllcnMuaHRtbCNSWF8wMDJkTW9kaWZpZXJzIj5SWC1Nb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmJfMDA3ZC1vcHRpb25fMDAyYy1WQVhfMDAyZlZNUy0yMTI5Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0rPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgVkFYL1ZNUzwvYT46IDxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI1ZBWF8wMDJkT3B0cyI+VkFYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21tYW5kLUxpbmUuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkLTI3Ij48Y29kZT4tLTwvY29kZT48L2E+OiA8YSBocmVmPSJDb21tYW5kLUxpbmUuaHRtbCNDb21tYW5kLUxpbmUiPkNvbW1hbmQgTGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmQzMl8wMDdkLW9wdGlvbl8wMDJjLWkzODYtOTA3Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmQzMl8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTA4Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZDY0XzAwN2Qtb3B0aW9uXzAwMmMtaTM4Ni05MTEiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS02NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZDY0XzAwN2Qtb3B0aW9uXzAwMmMteDg2XzAwMmQ2NC05MTIiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS02NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRhYnNvbHV0ZV8wMDJkbGl0ZXJhbHMtMjI3NSI+PGNvZGU+LS1hYnNvbHV0ZS1saXRlcmFsczwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkYWxsb3dfMDAyZHJlZ18wMDJkcHJlZml4LTE3NDAiPjxjb2RlPi0tYWxsb3ctcmVnLXByZWZpeDwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFsdGVybmF0ZS5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRhbHRlcm5hdGUtNTciPjxjb2RlPi0tYWx0ZXJuYXRlPC9jb2RlPjwvYT46IDxhIGhyZWY9ImFsdGVybmF0ZS5odG1sI2FsdGVybmF0ZSI+YWx0ZXJuYXRlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZGJhc2VfMDAyZHNpemVfMDAyZGRlZmF1bHRfMDAyZDE2XzAwN2QtMTI0OSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWJhc2Utc2l6ZS1kZWZhdWx0LTE2PC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPk02OEstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRiYXNlXzAwMmRzaXplXzAwMmRkZWZhdWx0XzAwMmQzMl8wMDdkLTEyNTAiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1iYXNlLXNpemUtZGVmYXVsdC0zMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGJpZy0xNzM1Ij48Y29kZT4tLWJpZzwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRiaXR3aXNlXzAwMmRvcl8wMDdkLW9wdGlvbl8wMDJjLU02ODB4MC0xMjQ4Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tYml0d2lzZS1vcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkZGlzcF8wMDJkc2l6ZV8wMDJkZGVmYXVsdF8wMDJkMTZfMDA3ZC0xMjUxIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZGlzcC1zaXplLWRlZmF1bHQtMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjTTY4S18wMDJkT3B0cyI+TTY4Sy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZGRpc3BfMDAyZHNpemVfMDAyZGRlZmF1bHRfMDAyZDMyXzAwN2QtMTI1MiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWRpc3Atc2l6ZS1kZWZhdWx0LTMyPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPk02OEstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRkaXZpZGVfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkxMyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWRpdmlkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkc3AtMTczOCI+PGNvZGU+LS1kc3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmRlbXVsYXRpb25fMDAzZGNyaXNhb3V0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzQ4Ij48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVtdWxhdGlvbj1jcmlzYW91dDwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24sIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkZW11bGF0aW9uXzAwM2RjcmlzZWxmXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzQ3Ij48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVtdWxhdGlvbj1jcmlzZWxmPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIj5DUklTLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YS5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRlbmZvcmNlXzAwMmRhbGlnbmVkXzAwMmRkYXRhLTE4MTQiPjxjb2RlPi0tZW5mb3JjZS1hbGlnbmVkLWRhdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEuaHRtbCNTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YSI+U3BhcmMtQWxpZ25lZC1EYXRhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRmYXRhbF8wMDJkd2FybmluZ3MtMTA1Ij48Y29kZT4tLWZhdGFsLXdhcm5pbmdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlcuaHRtbCNXIj5XPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRmZHBpYy0xNzQxIj48Y29kZT4tLWZkcGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkXzAwMmRmaXhfMDAyZHY0YnhfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYzMiI+PGNvZGU+LS1maXgtdjRieDwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkZml4ZWRfMDAyZHNwZWNpYWxfMDAyZHJlZ2lzdGVyXzAwMmRuYW1lc18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NTUlYLTE0MjkiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1maXhlZC1zcGVjaWFsLXJlZ2lzdGVyLW5hbWVzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24sIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjTU1JWF8wMDJkT3B0cyI+TU1JWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZGZvcmNlXzAwMmRsb25nXzAwMmRicmFuY2hlc18wMDdkLTEzMTAiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1mb3JjZS1sb25nLWJyYW5jaGVzPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiPk02OEhDMTEtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRnZW5lcmF0ZV8wMDJkZXhhbXBsZV8wMDdkLTEzMTMiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1nZW5lcmF0ZS1leGFtcGxlPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiPk02OEhDMTEtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRnbG9iYWxpemVfMDAyZHN5bWJvbHNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTU1JWC0xNDMwIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZ2xvYmFsaXplLXN5bWJvbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lIG9wdGlvbiwgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZE9wdHMuaHRtbCNNTUlYXzAwMmRPcHRzIj5NTUlYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkZ251XzAwMmRzeW50YXhfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTU1JWC0xNDMxIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZ251LXN5bnRheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPk1NSVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGhhc2hfMDAyZHNpemVfMDAzZF8wMDQwdmFyXzAwN2JudW1iZXJfMDA3ZC00Ij48Y29kZT4tLWhhc2gtc2l6ZT08L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48L2E+OiA8YSBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRsaW5rZXJfMDAyZGFsbG9jYXRlZF8wMDJkZ3JlZ3NfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTU1JWC0xNDM5Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbGlua2VyLWFsbG9jYXRlZC1ncmVnczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPk1NSVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imxpc3RpbmcuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbGlzdGluZ18wMDJkY29udF8wMDJkbGluZXMtNzciPjxjb2RlPi0tbGlzdGluZy1jb250LWxpbmVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Imxpc3RpbmcuaHRtbCNsaXN0aW5nIj5saXN0aW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibGlzdGluZy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRsaXN0aW5nXzAwMmRsaHNfMDAyZHdpZHRoLTcxIj48Y29kZT4tLWxpc3RpbmctbGhzLXdpZHRoPC9jb2RlPjwvYT46IDxhIGhyZWY9Imxpc3RpbmcuaHRtbCNsaXN0aW5nIj5saXN0aW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibGlzdGluZy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRsaXN0aW5nXzAwMmRsaHNfMDAyZHdpZHRoMi03MyI+PGNvZGU+LS1saXN0aW5nLWxocy13aWR0aDI8L2NvZGU+PC9hPjogPGEgaHJlZj0ibGlzdGluZy5odG1sI2xpc3RpbmciPmxpc3Rpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsaXN0aW5nLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGxpc3RpbmdfMDAyZHJoc18wMDJkd2lkdGgtNzUiPjxjb2RlPi0tbGlzdGluZy1yaHMtd2lkdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0ibGlzdGluZy5odG1sI2xpc3RpbmciPmxpc3Rpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGxpdHRsZS0xNzM0Ij48Y29kZT4tLWxpdHRsZTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGxvbmdjYWxscy0yMjc5Ij48Y29kZT4tLWxvbmdjYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZG1hcmNoXzAwM2RfMDA0MHZhcl8wMDdiYXJjaGl0ZWN0dXJlXzAwN2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQ1JJUy03NTkiPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbWFyY2g9PC9zcGFuPjx2YXI+YXJjaGl0ZWN0dXJlPC92YXI+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1ELmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZE1ELTgxIj48Y29kZT4tLU1EPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1ELmh0bWwjTUQiPk1EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkbXVsXzAwMmRidWdfMDAyZGFib3J0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzY2Ij48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW11bC1idWctYWJvcnQ8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRhYnNvbHV0ZV8wMDJkbGl0ZXJhbHMtMjI3NiI+PGNvZGU+LS1uby1hYnNvbHV0ZS1saXRlcmFsczwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRub18wMDJkZXhwYW5kXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQzNCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLWV4cGFuZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPk1NSVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRsb25nY2FsbHMtMjI4MCI+PGNvZGU+LS1uby1sb25nY2FsbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkbm9fMDAyZG1lcmdlXzAwMmRncmVnc18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NTUlYLTE0MzUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby1tZXJnZS1ncmVnczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPk1NSVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZG5vXzAwMmRtdWxfMDAyZGJ1Z18wMDJkYWJvcnRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQ1JJUy03NjUiPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tbXVsLWJ1Zy1hYm9ydDwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24sIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZG5vXzAwMmRwcmVkZWZpbmVkXzAwMmRzeW1zXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQzMyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLXByZWRlZmluZWQtc3ltczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPk1NSVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRub18wMDJkcHVzaGpfMDAyZHN0dWJzXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQzNyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLXB1c2hqLXN0dWJzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24sIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjTU1JWF8wMDJkT3B0cyI+TU1JWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZG5vXzAwMmRzdHVic18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NTUlYLTE0MzgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby1zdHViczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPk1NSVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR0YXJnZXRfMDAyZGFsaWduLTIyNzgiPjxjb2RlPi0tbm8tdGFyZ2V0LWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPlh0ZW5zYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHRleHRfMDAyZHNlY3Rpb25fMDAyZGxpdGVyYWxzLTIyNzQiPjxjb2RlPi0tbm8tdGV4dC1zZWN0aW9uLWxpdGVyYWxzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPlh0ZW5zYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHRyYW5zZm9ybS0yMjgyIj48Y29kZT4tLW5vLXRyYW5zZm9ybTwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZG5vXzAwMmR1bmRlcnNjb3JlXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzUyIj48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlcuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHdhcm4tMTAyIj48Y29kZT4tLW5vLXdhcm48L2NvZGU+PC9hPjogPGEgaHJlZj0iVy5odG1sI1ciPlc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkcGNyZWxfMDA3ZC0xMjUzIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcGNyZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjTTY4S18wMDJkT3B0cyI+TTY4Sy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkcGljXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzU1Ij48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBpYzwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24sIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRwcmludF8wMDJkaW5zbl8wMDJkc3ludGF4XzAwN2QtMjIzNCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXByaW50LWluc24tc3ludGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZE9wdHMuaHRtbCNYR0FURV8wMDJkT3B0cyI+WEdBVEUtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRwcmludF8wMDJkaW5zbl8wMDJkc3ludGF4XzAwN2QtMTMxMSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXByaW50LWluc24tc3ludGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiPk02OEhDMTEtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkcHJpbnRfMDAyZG9wY29kZXNfMDA3ZC0yMjM1Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcHJpbnQtb3Bjb2Rlczwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9IlhHQVRFXzAwMmRPcHRzLmh0bWwjWEdBVEVfMDAyZE9wdHMiPlhHQVRFLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkcHJpbnRfMDAyZG9wY29kZXNfMDA3ZC0xMzEyIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcHJpbnQtb3Bjb2Rlczwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNNNjhIQzExXzAwMmRPcHRzIj5NNjhIQzExLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkcmVnaXN0ZXJfMDAyZHByZWZpeF8wMDJkb3B0aW9uYWxfMDA3ZC1vcHRpb25fMDAyYy1NNjgweDAtMTI0NyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJlZ2lzdGVyLXByZWZpeC1vcHRpb25hbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHJlbGF4LTE3MzYiPjxjb2RlPi0tcmVsYXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkcmVsYXhfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTU1JWC0xNDMyIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcmVsYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lIG9wdGlvbiwgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZE9wdHMuaHRtbCNNTUlYXzAwMmRPcHRzIj5NTUlYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRyZW5hbWVfMDAyZHNlY3Rpb24tMjI4MyI+PGNvZGU+LS1yZW5hbWUtc2VjdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkcmVuZXNhcy0xNzM5Ij48Y29kZT4tLXJlbmVzYXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkc2hvcnRfMDAyZGJyYW5jaGVzXzAwN2QtMTMwOSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXNob3J0LWJyYW5jaGVzPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiPk02OEhDMTEtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkc21hbGwtMTczNyI+PGNvZGU+LS1zbWFsbDwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0YXRpc3RpY3MuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkc3RhdGlzdGljcy05MiI+PGNvZGU+LS1zdGF0aXN0aWNzPC9jb2RlPjwvYT46IDxhIGhyZWY9InN0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzIj5zdGF0aXN0aWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZHN0cmljdF8wMDJkZGlyZWN0XzAwMmRtb2RlXzAwN2QtMTMwOCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXN0cmljdC1kaXJlY3QtbW9kZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNNNjhIQzExXzAwMmRPcHRzIj5NNjhIQzExLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR0YXJnZXRfMDAyZGFsaWduLTIyNzciPjxjb2RlPi0tdGFyZ2V0LWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPlh0ZW5zYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdGV4dF8wMDJkc2VjdGlvbl8wMDJkbGl0ZXJhbHMtMjI3MyI+PGNvZGU+LS10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0cmFkaXRpb25hbF8wMDJkZm9ybWF0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHRyYWRpdGlvbmFsXzAwMmRmb3JtYXQtOTYiPjxjb2RlPi0tdHJhZGl0aW9uYWwtZm9ybWF0PC9jb2RlPjwvYT46IDxhIGhyZWY9InRyYWRpdGlvbmFsXzAwMmRmb3JtYXQuaHRtbCN0cmFkaXRpb25hbF8wMDJkZm9ybWF0Ij50cmFkaXRpb25hbC1mb3JtYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR0cmFuc2Zvcm0tMjI4MSI+PGNvZGU+LS10cmFuc2Zvcm08L2NvZGU+PC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmR1bmRlcnNjb3JlXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzUxIj48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlcuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkd2Fybi0xMDgiPjxjb2RlPi0td2FybjwvY29kZT48L2E+OiA8YSBocmVmPSJXLmh0bWwjVyI+VzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmR4MzJfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkwOSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXgzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZHgzMl8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTEwIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0teDMyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmR4Z2F0ZV8wMDJkcmFtb2Zmc2V0XzAwN2QtMTMwMyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXhnYXRlLXJhbW9mZnNldDwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNNNjhIQzExXzAwMmRPcHRzIj5NNjhIQzExLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkMV8wMDdkLW9wdGlvbl8wMDJjLVZBWF8wMDJmVk1TLTIxMzAiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBWQVgvVk1TPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkMzJhZGRyXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFscGhhLTU2MiI+PGNvZGU+LTMyYWRkcjwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQWxwaGE8L2E+OiA8YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjQWxwaGEtT3B0aW9ucyI+QWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImEuaHRtbCNpbmRleC1nX3RfMDAyZGEtNDciPjxjb2RlPi1hPC9jb2RlPjwvYT46IDxhIGhyZWY9ImEuaHRtbCNhIj5hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9uc18wMDJkaTk2MC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRBXzAwN2Qtb3B0aW9uc18wMDJjLWk5NjAtMTA4NyI+PGNvZGU+LUE8L2NvZGU+IG9wdGlvbnMsIGk5NjA8L2E+OiA8YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjT3B0aW9uc18wMDJkaTk2MCI+T3B0aW9ucy1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYS5odG1sI2luZGV4LWdfdF8wMDJkYWMtNDgiPjxjb2RlPi1hYzwvY29kZT48L2E+OiA8YSBocmVmPSJhLmh0bWwjYSI+YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImEuaHRtbCNpbmRleC1nX3RfMDAyZGFkLTQ5Ij48Y29kZT4tYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iYS5odG1sI2EiPmE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhLmh0bWwjaW5kZXgtZ190XzAwMmRhZy01MCI+PGNvZGU+LWFnPC9jb2RlPjwvYT46IDxhIGhyZWY9ImEuaHRtbCNhIj5hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYS5odG1sI2luZGV4LWdfdF8wMDJkYWgtNTEiPjxjb2RlPi1haDwvY29kZT48L2E+OiA8YSBocmVmPSJhLmh0bWwjYSI+YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImEuaHRtbCNpbmRleC1nX3RfMDAyZGFsLTUyIj48Y29kZT4tYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iYS5odG1sI2EiPmE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhLmh0bWwjaW5kZXgtZ190XzAwMmRhbi01MyI+PGNvZGU+LWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9ImEuaHRtbCNhIj5hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYS5odG1sI2luZGV4LWdfdF8wMDJkYXMtNTQiPjxjb2RlPi1hczwvY29kZT48L2E+OiA8YSBocmVmPSJhLmh0bWwjYSI+YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwMmRBc3BhcmMtMTgwNSI+PGNvZGU+LUFzcGFyYzwvY29kZT48L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDAyZEFzcGFyY2ZtYWYtMTgwOCI+PGNvZGU+LUFzcGFyY2ZtYWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwMmRBc3BhcmNpbWEtMTgwOSI+PGNvZGU+LUFzcGFyY2ltYTwvY29kZT48L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDAyZEFzcGFyY2xldC0xNzk3Ij48Y29kZT4tQXNwYXJjbGV0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjU3BhcmNfMDAyZE9wdHMiPlNwYXJjLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDJkQXNwYXJjbGl0ZS0xNzk4Ij48Y29kZT4tQXNwYXJjbGl0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDAyZEFzcGFyY3Zpcy0xODA2Ij48Y29kZT4tQXNwYXJjdmlzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjU3BhcmNfMDAyZE9wdHMiPlNwYXJjLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDJkQXNwYXJjdmlzMi0xODA3Ij48Y29kZT4tQXNwYXJjdmlzMjwvY29kZT48L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDAyZEFzcGFyY3ZpczMtMTgxMCI+PGNvZGU+LUFzcGFyY3ZpczM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwMmRBc3BhcmN2aXMzci0xODExIj48Y29kZT4tQXNwYXJjdmlzM3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwMmRBdjYtMTc5NCI+PGNvZGU+LUF2NjwvY29kZT48L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDAyZEF2Ny0xNzk1Ij48Y29kZT4tQXY3PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjU3BhcmNfMDAyZE9wdHMiPlNwYXJjLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDJkQXY4LTE3OTYiPjxjb2RlPi1Bdjg8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwMmRBdjktMTc5OSI+PGNvZGU+LUF2OTwvY29kZT48L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDAyZEF2OWEtMTgwMCI+PGNvZGU+LUF2OWE8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwMmRBdjliLTE4MDEiPjxjb2RlPi1BdjliPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjU3BhcmNfMDAyZE9wdHMiPlNwYXJjLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDJkQXY5Yy0xODAyIj48Y29kZT4tQXY5YzwvY29kZT48L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDAyZEF2OWQtMTgwMyI+PGNvZGU+LUF2OWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwMmRBdjl2LTE4MDQiPjxjb2RlPi1Bdjl2PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjU3BhcmNfMDAyZE9wdHMiPlNwYXJjLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZGJfMDA3ZC1vcHRpb25fMDAyYy1pOTYwLTEwODgiPjxjb2RlPi1iPC9jb2RlPiBvcHRpb24sIGk5NjA8L2E+OiA8YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjT3B0aW9uc18wMDJkaTk2MCI+T3B0aW9ucy1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRiaWdfMDA3ZC1vcHRpb25fMDAyYy1NMzJSLTEyMDIiPjxjb2RlPi1iaWc8L2NvZGU+IG9wdGlvbiwgTTMyUjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJELmh0bWwjaW5kZXgtZ190XzAwMmRELTU4Ij48Y29kZT4tRDwvY29kZT48L2E+OiA8YSBocmVmPSJELmh0bWwjRCI+RDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmREXzAwN2RfMDAyYy1pZ25vcmVkLW9uLVZBWC0yMTE2Ij48Y29kZT4tRDwvY29kZT4sIGlnbm9yZWQgb24gVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRkXzAwN2RfMDAyYy1WQVgtb3B0aW9uLTIxMTkiPjxjb2RlPi1kPC9jb2RlPiwgVkFYIG9wdGlvbjwvYT46IDxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI1ZBWF8wMDJkT3B0cyI+VkFYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRlYWJpXzAwM2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYyNyI+PGNvZGU+LWVhYmk9PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRFQl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BQXJjaDY0LTUxOSI+PGNvZGU+LUVCPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBQXJjaDY0PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRFQl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUkMtNTg0Ij48Y29kZT4tRUI8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1PcHRpb25zLmh0bWwjQVJDLU9wdGlvbnMiPkFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkRUJfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYyOCI+PGNvZGU+LUVCPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRFQl8wMDdkLW9wdGlvbi1fMDAyOE1JUFNfMDAyOS0xMzYzIj48Y29kZT4tRUI8L2NvZGU+IG9wdGlvbiAoTUlQUyk8L2E+OiA8YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNNSVBTLU9wdHMiPk1JUFMgT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkRUJfMDA3ZC1vcHRpb25fMDAyYy1NMzJSLTEyMDMiPjxjb2RlPi1FQjwvY29kZT4gb3B0aW9uLCBNMzJSPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkRUJfMDA3ZC1vcHRpb25fMDAyYy1USUxFXzAwMmRHeC0yMDI1Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1FQjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIFRJTEUtR3g8L2E+OiA8YSBocmVmPSJUSUxFXzAwMmRHeC1PcHRpb25zLmh0bWwjVElMRV8wMDJkR3gtT3B0aW9ucyI+VElMRS1HeCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZEVMXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFBcmNoNjQtNTIwIj48Y29kZT4tRUw8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFBcmNoNjQ8L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZEVMXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSQy01ODUiPjxjb2RlPi1FTDwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQVJDPC9hPjogPGEgaHJlZj0iQVJDLU9wdGlvbnMuaHRtbCNBUkMtT3B0aW9ucyI+QVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRFTF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjI5Ij48Y29kZT4tRUw8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZEVMXzAwN2Qtb3B0aW9uLV8wMDI4TUlQU18wMDI5LTEzNjQiPjxjb2RlPi1FTDwvY29kZT4gb3B0aW9uIChNSVBTKTwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI01JUFMtT3B0cyI+TUlQUyBPcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRFTF8wMDdkLW9wdGlvbl8wMDJjLU0zMlItMTIwMSI+PGNvZGU+LUVMPC9jb2RlPiBvcHRpb24sIE0zMlI8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjTTMyUl8wMDJkT3B0cyI+TTMyUi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRFTF8wMDdkLW9wdGlvbl8wMDJjLVRJTEVfMDAyZEd4LTIwMjYiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUVMPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgVElMRS1HeDwvYT46IDxhIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1PcHRpb25zIj5USUxFLUd4IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmLmh0bWwjaW5kZXgtZ190XzAwMmRmLTU5Ij48Y29kZT4tZjwvY29kZT48L2E+OiA8YSBocmVmPSJmLmh0bWwjZiI+ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkRl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BbHBoYS01NjEiPjxjb2RlPi1GPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBbHBoYTwvYT46IDxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNBbHBoYS1PcHRpb25zIj5BbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRHXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFscGhhLTU2MCI+PGNvZGU+LUc8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFscGhhPC9hPjogPGEgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiPkFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZGdfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQWxwaGEtNTU5Ij48Y29kZT4tZzwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQWxwaGE8L2E+OiA8YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjQWxwaGEtT3B0aW9ucyI+QWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRHXzAwN2Qtb3B0aW9uLV8wMDI4TUlQU18wMDI5LTEzNjIiPjxjb2RlPi1HPC9jb2RlPiBvcHRpb24gKE1JUFMpPC9hPjogPGEgaHJlZj0iTUlQUy1PcHRzLmh0bWwjTUlQUy1PcHRzIj5NSVBTIE9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkSF8wMDdkLW9wdGlvbl8wMDJjLVZBWF8wMDJmVk1TLTIxMzEiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBWQVgvVk1TPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRoXzAwN2Qtb3B0aW9uXzAwMmMtVkFYXzAwMmZWTVMtMjEyOCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4taDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIFZBWC9WTVM8L2E+OiA8YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNWQVhfMDAyZE9wdHMiPlZBWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSS5odG1sI2luZGV4LWdfdF8wMDJkSS1fMDA0MHZhcl8wMDdicGF0aF8wMDdkLTYyIj48Y29kZT4tSSA8L2NvZGU+PHZhcj5wYXRoPC92YXI+PC9hPjogPGEgaHJlZj0iSS5odG1sI0kiPkk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZGlnbm9yZV8wMDJkcGFyYWxsZWxfMDAyZGNvbmZsaWN0c18wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMTQiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWlnbm9yZS1wYXJhbGxlbC1jb25mbGljdHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBNMzJSWDwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZElwXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIxNiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tSXA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBNMzJSWDwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkSl8wMDdkXzAwMmMtaWdub3JlZC1vbi1WQVgtMjEyMSI+PGNvZGU+LUo8L2NvZGU+LCBpZ25vcmVkIG9uIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI1ZBWF8wMDJkT3B0cyI+VkFYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJLLmh0bWwjaW5kZXgtZ190XzAwMmRLLTY2Ij48Y29kZT4tSzwvY29kZT48L2E+OiA8YSBocmVmPSJLLmh0bWwjSyI+SzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZGtfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYzMCI+PGNvZGU+LWs8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRLUElDXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMjA0Ij48Y29kZT4tS1BJQzwvY29kZT4gb3B0aW9uLCBNMzJSPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZEtQSUNfMDA3ZC1vcHRpb25fMDAyYy1NSVBTLTEzNzAiPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1LUElDPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBNSVBTPC9hPjogPGEgaHJlZj0iTUlQUy1PcHRzLmh0bWwjTUlQUy1PcHRzIj5NSVBTIE9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMLmh0bWwjaW5kZXgtZ190XzAwMmRMLTY5Ij48Y29kZT4tTDwvY29kZT48L2E+OiA8YSBocmVmPSJMLmh0bWwjTCI+TDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbF8wMDdkLW9wdGlvbl8wMDJjLU02ODB4MC0xMjQ2Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1sPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPk02OEstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbGl0dGxlXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMjAwIj48Y29kZT4tbGl0dGxlPC9jb2RlPiBvcHRpb24sIE0zMlI8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjTTMyUl8wMDJkT3B0cyI+TTMyUi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTS5odG1sI2luZGV4LWdfdF8wMDJkTS03OSI+PGNvZGU+LU08L2NvZGU+PC9hPjogPGEgaHJlZj0iTS5odG1sI00iPk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjAzLTE1ODAiPi1tMTEvMDM8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjA0LTE1ODEiPi1tMTEvMDQ8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjA1LTE1ODIiPi1tMTEvMDU8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjEwLTE1ODMiPi1tMTEvMTA8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjE1LTE1ODQiPi1tMTEvMTU8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjIwLTE1ODUiPi1tMTEvMjA8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjIxLTE1ODYiPi1tMTEvMjE8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjIzLTE1ODciPi1tMTEvMjM8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjI0LTE1ODgiPi1tMTEvMjQ8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjM0LTE1ODkiPi1tMTEvMzQ8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtMTFfMDAyZjM0YS0xNTkwIj4tbTExLzM0YTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmMzUtMTU5MSI+LW0xMS8zNTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNDAtMTU5MiI+LW0xMS80MDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNDQtMTU5MyI+LW0xMS80NDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNDUtMTU5NCI+LW0xMS80NTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNTAtMTU5NSI+LW0xMS81MDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNTMtMTU5OCI+LW0xMS81MzwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNTUtMTU5NiI+LW0xMS81NTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNjAtMTYwNCI+LW0xMS82MDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNzAtMTU5NyI+LW0xMS83MDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmNzMtMTU5OSI+LW0xMS83MzwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmODMtMTYwMCI+LW0xMS84MzwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmODQtMTYwMSI+LW0xMS84NDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmOTMtMTYwMiI+LW0xMS85MzwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG0xMV8wMDJmOTQtMTYwMyI+LW0xMS85NDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMkNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbTE2Y18wMDdkLW9wdGlvbl8wMDJjLU0xNkMtMTE3NyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTE2Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIE0xNkM8L2E+OiA8YSBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjTTMyQ18wMDJkT3B0cyI+TTMyQy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG0zMV8wMDdkLW9wdGlvbl8wMDJjLXMzOTAtMTY4MCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTMxPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtT3B0aW9ucy5odG1sI3MzOTAtT3B0aW9ucyI+czM5MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtMzJfMDA3ZC1vcHRpb25fMDAyYy1USUxFXzAwMmRHeC0yMDIzIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBUSUxFLUd4PC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI1RJTEVfMDAyZEd4LU9wdGlvbnMiPlRJTEUtR3ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG0zMmJpdF8wMDJkZG91Ymxlc18wMDdkLTE2NDgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW0zMmJpdC1kb3VibGVzPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNSWF8wMDJkT3B0cyI+UlgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMkNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbTMyY18wMDdkLW9wdGlvbl8wMDJjLU0zMkMtMTE3NCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTMyYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIE0zMkM8L2E+OiA8YSBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjTTMyQ18wMDJkT3B0cyI+TTMyQy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtMzJyXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMTk3Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tMzJyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgTTMyUjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG0zMnJ4XzAwN2Qtb3B0aW9uXzAwMmMtTTMyUjItMTE5NCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTMycng8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBNMzJSMjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG0zMnJ4XzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTE5MSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTMycng8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBNMzJSWDwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbTY0XzAwN2Qtb3B0aW9uXzAwMmMtczM5MC0xNjgxIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBzMzkwPC9hPjogPGEgaHJlZj0iczM5MC1PcHRpb25zLmh0bWwjczM5MC1PcHRpb25zIj5zMzkwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG02NF8wMDdkLW9wdGlvbl8wMDJjLVRJTEVfMDAyZEd4LTIwMjQiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIFRJTEUtR3g8L2E+OiA8YSBocmVmPSJUSUxFXzAwMmRHeC1PcHRpb25zLmh0bWwjVElMRV8wMDJkR3gtT3B0aW9ucyI+VElMRS1HeCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbTY0Yml0XzAwMmRkb3VibGVzXzAwN2QtMTY0OSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY0Yml0LWRvdWJsZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8L2E+OiA8YSBocmVmPSJSWF8wMDJkT3B0cy5odG1sI1JYXzAwMmRPcHRzIj5SWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtNjgwMDBfMDA3ZC1hbmQtcmVsYXRlZC1vcHRpb25zLTEyNTQiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgcmVsYXRlZCBvcHRpb25zPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPk02OEstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbTY4aGMxMV8wMDdkLTEyOTgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02OGhjMTE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjTTY4SEMxMV8wMDJkT3B0cyI+TTY4SEMxMS1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtNjhoYzEyXzAwN2QtMTI5OSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4aGMxMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNNNjhIQzExXzAwMmRPcHRzIj5NNjhIQzExLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG02OGhjczEyXzAwN2QtMTMwMCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4aGNzMTI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjTTY4SEMxMV8wMDJkT3B0cyI+TTY4SEMxMS1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtXzAwNWJub18wMDJkXzAwNWQ2ODg1MV8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NNjgweDAtMTIzOSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbVtuby1dNjg4NTE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lIG9wdGlvbiwgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPk02OEstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbV8wMDVibm9fMDAyZF8wMDVkNjg4ODFfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTTY4MHgwLTEyNDAiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1bbm8tXTY4ODgxPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24sIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1fMDA1Ym5vXzAwMmRfMDA1ZGRpdl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NNjgweDAtMTI0MSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbVtuby1dZGl2PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24sIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1fMDA1Ym5vXzAwMmRfMDA1ZGVtYWNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTTY4MHgwLTEyNDUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1bbm8tXWVtYWM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lIG9wdGlvbiwgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPk02OEstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbV8wMDVibm9fMDAyZF8wMDVkZmxvYXRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTTY4MHgwLTEyNDMiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1bbm8tXWZsb2F0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24sIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1fMDA1Ym5vXzAwMmRfMDA1ZG1hY18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NNjgweDAtMTI0NCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbVtuby1dbWFjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24sIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1fMDA1Ym5vXzAwMmRfMDA1ZHVzcF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NNjgweDAtMTI0MiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbVtuby1ddXNwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24sIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtYWxsLTE1MzQiPi1tYWxsPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1hbGxfMDAyZGVuYWJsZWRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTE0zMi0xMTU2Ij48Y29kZT4tbWFsbC1lbmFibGVkPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBMTTMyPC9hPjogPGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtYWxsXzAwMmRleHRlbnNpb25zLTE1MzUiPi1tYWxsLWV4dGVuc2lvbnM8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYWxsXzAwMmRvcGNvZGVzXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFWUi03MDkiPjxjb2RlPi1tYWxsLW9wY29kZXM8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFWUjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWFwY3NfMDAyZDI2XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MjEiPjxjb2RlPi1tYXBjcy0yNjwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYXBjc18wMDJkMzJfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYyMiI+PGNvZGU+LW1hcGNzLTMyPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1hcGNzXzAwMmRmbG9hdF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjI0Ij48Y29kZT4tbWFwY3MtZmxvYXQ8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWFwY3NfMDAyZHJlZW50cmFudF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjI1Ij48Y29kZT4tbWFwY3MtcmVlbnRyYW50PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1hcmNfMDA1YjVfMDA3YzZfMDA3YzdfMDA3YzhfMDA1ZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUkMtNTc5Ij48Y29kZT4tbWFyY1s1fDZ8N3w4XTwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQVJDPC9hPjogPGEgaHJlZj0iQVJDLU9wdGlvbnMuaHRtbCNBUkMtT3B0aW9ucyI+QVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYXJjaF8wMDNkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MTYiPjxjb2RlPi1tYXJjaD08L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtYXJjaF8wMDNkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU02ODB4MC0xMjM3Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tYXJjaD08L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lIG9wdGlvbiwgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPk02OEstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWFyY2hfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1USUM2WC0xOTk1Ij48Y29kZT4tbWFyY2g9PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBUSUM2WDwvYT46IDxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNUSUM2WC1PcHRpb25zIj5USUM2WCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtYXJjaF8wMDNkXzAwN2Qtb3B0aW9uXzAwMmMtaTM4Ni05MTQiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1hcmNoPTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1hcmNoXzAwM2RfMDA3ZC1vcHRpb25fMDAyYy1zMzkwLTE2ODQiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1hcmNoPTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHMzOTA8L2E+OiA8YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNzMzkwLU9wdGlvbnMiPnMzOTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWFyY2hfMDAzZF8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTE1Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tYXJjaD08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWF0cGNzXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MjMiPjxjb2RlPi1tYXRwY3M8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtYXZ4c2NhbGFyXzAwM2RfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkyMiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWF2eHNjYWxhcj08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWF2eHNjYWxhcl8wMDNkXzAwN2Qtb3B0aW9uXzAwMmMteDg2XzAwMmQ2NC05MjMiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1hdnhzY2FsYXI9PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYmFycmVsXzAwMmRzaGlmdF8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNTAiPjxjb2RlPi1tYmFycmVsLXNoaWZ0LWVuYWJsZWQ8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIExNMzI8L2E+OiA8YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1iaWdfMDAyZGVuZGlhbl8wMDdkLTE2NTAiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1iaWctZW5kaWFuPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNSWF8wMDJkT3B0cyI+UlgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYnJlYWtfMDAyZGVuYWJsZWRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTE0zMi0xMTU1Ij48Y29kZT4tbWJyZWFrLWVuYWJsZWQ8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIExNMzI8L2E+OiA8YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1jaXMtMTUzNyI+LW1jaXM8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtY29uc3RhbnRfMDAyZGdwXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUlBXzAwMmQ2NC0xMTE4Ij48Y29kZT4tbWNvbnN0YW50LWdwPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBJQS02NDwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1fMDA0MHZhcl8wMDdiY3B1XzAwN2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQWxwaGEtNTUzIj48Y29kZT4tbTwvY29kZT48dmFyPmNwdTwvdmFyPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBbHBoYTwvYT46IDxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNBbHBoYS1PcHRpb25zIj5BbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1jcHVfMDA3ZC1vcHRpb25fMDAyYy1jcHUtMTg1MCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWNwdTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGNwdTwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkT3B0cy5odG1sI1RJQzU0WF8wMDJkT3B0cyI+VElDNTRYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtY3B1XzAwM2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYxNSI+PGNvZGU+LW1jcHU9PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWNwdV8wMDNkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUJsYWNrZmluLTcyOSI+PGNvZGU+LW1jcHU9PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBCbGFja2ZpbjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtY3B1XzAwM2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTTY4MHgwLTEyMzgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1jcHU9PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24sIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtY3NtLTE1MzkiPi1tY3NtPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1kY2FjaGVfMDAyZGVuYWJsZWRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTE0zMi0xMTU0Ij48Y29kZT4tbWRjYWNoZS1lbmFibGVkPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBMTTMyPC9hPjogPGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1kZWJ1Z18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BbHBoYS01NTQiPjxjb2RlPi1tZGVidWc8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFscGhhPC9hPjogPGEgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiPkFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWRpdmlkZV8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNDkiPjxjb2RlPi1tZGl2aWRlLWVuYWJsZWQ8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIExNMzI8L2E+OiA8YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWRzYnRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtVElDNlgtMTk5NiI+PGNvZGU+LW1kc2J0PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBUSUM2WDwvYT46IDxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNUSUM2WC1PcHRpb25zIj5USUM2WCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1lXzAwN2Qtb3B0aW9uXzAwMmMtc3RkZXJyLXJlZGlyZWN0LTE4NTIiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1lPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgc3RkZXJyIHJlZGlyZWN0PC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRPcHRzLmh0bWwjVElDNTRYXzAwMmRPcHRzIj5USUM1NFgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1laXMtMTU0MSI+LW1laXM8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcGlwaGFueS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1lcGlwaGFueV8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1FcGlwaGFueS04NTQiPjxjb2RlPi1tZXBpcGhhbnk8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEVwaXBoYW55PC9hPjogPGEgaHJlZj0iRXBpcGhhbnktT3B0aW9ucy5odG1sI0VwaXBoYW55LU9wdGlvbnMiPkVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcGlwaGFueS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1lcGlwaGFueTE2XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUVwaXBoYW55LTg1NSI+PGNvZGU+LW1lcGlwaGFueTE2PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBFcGlwaGFueTwvYT46IDxhIGhyZWY9IkVwaXBoYW55LU9wdGlvbnMuaHRtbCNFcGlwaGFueS1PcHRpb25zIj5FcGlwaGFueSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1lcnJvcnNfMDAyZHRvXzAwMmRmaWxlXzAwN2Qtb3B0aW9uXzAwMmMtc3RkZXJyLXJlZGlyZWN0LTE4NTEiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1lcnJvcnMtdG8tZmlsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHN0ZGVyciByZWRpcmVjdDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkT3B0cy5odG1sI1RJQzU0WF8wMDJkT3B0cyI+VElDNTRYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWVzYV8wMDdkLW9wdGlvbl8wMDJjLXMzOTAtMTY4MiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWVzYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHMzOTA8L2E+OiA8YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNzMzkwLU9wdGlvbnMiPnMzOTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtZl8wMDdkLW9wdGlvbl8wMDJjLWZhcl8wMDJkbW9kZS0xODQ5Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGZhci1tb2RlPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRPcHRzLmh0bWwjVElDNTRYXzAwMmRPcHRzIj5USUM1NFgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1mMTEtMTU3NyI+LW1mMTE8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWZhcl8wMDJkbW9kZV8wMDdkLW9wdGlvbl8wMDJjLWZhcl8wMDJkbW9kZS0xODQ4Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tZmFyLW1vZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBmYXItbW9kZTwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkT3B0cy5odG1sI1RJQzU0WF8wMDJkT3B0cyI+VElDNTRYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1mZHBpY18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1CbGFja2Zpbi03MzAiPjxjb2RlPi1tZmRwaWM8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEJsYWNrZmluPC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtZmlzLTE1NDMiPi1tZmlzPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWZsb2F0XzAwMmRhYmlfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjI2Ij48Y29kZT4tbWZsb2F0LWFiaT08L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbWZwXzAwMmQxMS0xNTUyIj4tbWZwLTExPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbWZwcC0xNTQ4Ij4tbWZwcDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1mcHUtMTU1MCI+LW1mcHU8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtZnB1XzAwM2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYxNyI+PGNvZGU+LW1mcHU9PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtaWNhY2hlXzAwMmRlbmFibGVkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUxNMzItMTE1MyI+PGNvZGU+LW1pY2FjaGUtZW5hYmxlZDwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgTE0zMjwvYT46IDxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI0xNMzItT3B0aW9ucyI+TE0zMiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWltcGxpY2l0XzAwMmRpdF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BUk0tNjIwIj48Y29kZT4tbWltcGxpY2l0LWl0PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1pbnRfMDAyZHJlZ2lzdGVyXzAwN2QtMTY1NiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWludC1yZWdpc3Rlcjwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9IlJYXzAwMmRPcHRzLmh0bWwjUlhfMDAyZE9wdHMiPlJYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUDJLXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1pcDIwMjJfMDA3ZC1vcHRpb25fMDAyYy1JUDJLLTExMzciPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1pcDIwMjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBJUDJLPC9hPjogPGEgaHJlZj0iSVAyS18wMDJkT3B0cy5odG1sI0lQMktfMDAyZE9wdHMiPklQMkstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWlwMjAyMmV4dF8wMDdkLW9wdGlvbl8wMDJjLUlQMjAyMi0xMTM0Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXAyMDIyZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgSVAyMDIyPC9hPjogPGEgaHJlZj0iSVAyS18wMDJkT3B0cy5odG1sI0lQMktfMDAyZE9wdHMiPklQMkstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1qMTEtMTU3OCI+LW1qMTE8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRta2ExMS0xNTY2Ij4tbWthMTE8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRta2IxMS0xNTY3Ij4tbWtiMTE8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRta2QxMWEtMTU2OCI+LW1rZDExYTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1rZDExYi0xNTY5Ij4tbWtkMTFiPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbWtkMTFkLTE1NzAiPi1ta2QxMWQ8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRta2QxMWUtMTU3MSI+LW1rZDExZTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1rZDExZi0xNTcyIj4tbWtkMTFmPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbWtkMTFoLTE1NzMiPi1ta2QxMWg8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRta2QxMWstMTU3NSI+LW1rZDExazwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1rZDExcS0xNTc0Ij4tbWtkMTFxPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbWtkMTF6LTE1NzYiPi1ta2QxMXo8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRta2V2MTEtMTU0NSI+LW1rZXYxMTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1saW1pdGVkXzAwMmRlaXMtMTU1NCI+LW1saW1pdGVkLWVpczwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1saXR0bGVfMDAyZGVuZGlhbl8wMDdkLTE2NTEiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1saXR0bGUtZW5kaWFuPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNSWF8wMDJkT3B0cyI+UlgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1sb25nXzAwN2QtMjIzMSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWxvbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzs8L2E+OiA8YSBocmVmPSJYR0FURV8wMDJkT3B0cy5odG1sI1hHQVRFXzAwMmRPcHRzIj5YR0FURS1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbG9uZ18wMDdkLTEzMDUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1sb25nPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiPk02OEhDMTEtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1sb25nXzAwMmRkb3VibGVfMDA3ZC0yMjMzIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbG9uZy1kb3VibGU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8L2E+OiA8YSBocmVmPSJYR0FURV8wMDJkT3B0cy5odG1sI1hHQVRFXzAwMmRPcHRzIj5YR0FURS1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbG9uZ18wMDJkZG91YmxlXzAwN2QtMTMwNyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWxvbmctZG91YmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiPk02OEhDMTEtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbW05czEyeF8wMDdkLTEzMDEiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1tOXMxMng8L3NwYW4+PC9zYW1wPiZyc3F1bzs8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjTTY4SEMxMV8wMDJkT3B0cyI+TTY4SEMxMS1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbTlzMTJ4Z18wMDdkLTEzMDIiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1tOXMxMnhnPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiPk02OEhDMTEtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1tY3VfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BVlItNzA4Ij48Y29kZT4tbW1jdT08L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFWUjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbW1mcHQtMTU1NiI+LW1tZnB0PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbW1pY3JvY29kZS0xNTY0Ij4tbW1pY3JvY29kZTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbW1uZW1vbmljXzAwM2RfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkyNCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbW1uZW1vbmljPTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbW5lbW9uaWNfMDAzZF8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTI1Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbW5lbW9uaWM9PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtbXVsdGlwbHlfMDAyZGVuYWJsZWRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTE0zMi0xMTQ4Ij48Y29kZT4tbW11bHRpcGx5LWVuYWJsZWQ8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIExNMzI8L2E+OiA8YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1tdXRpcHJvYy0xNTU4Ij4tbW11dGlwcm9jPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbW14cHMtMTU2MCI+LW1teHBzPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbmFrZWRfMDAyZHJlZ18wMDdkLW9wdGlvbl8wMDJjLWkzODYtOTI4Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbmFrZWQtcmVnPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1uYWtlZF8wMDJkcmVnXzAwN2Qtb3B0aW9uXzAwMmMteDg2XzAwMmQ2NC05MjkiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1uYWtlZC1yZWc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbW5vXzAwMmRjaXMtMTUzOCI+LW1uby1jaXM8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtbm9fMDAyZGNzbS0xNTQwIj4tbW5vLWNzbTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbW5vXzAwMmRkc2J0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVRJQzZYLTE5OTciPjxjb2RlPi1tbm8tZHNidDwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgVElDNlg8L2E+OiA8YSBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjVElDNlgtT3B0aW9ucyI+VElDNlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1ub18wMDJkZWlzLTE1NDIiPi1tbm8tZWlzPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbW5vXzAwMmRleHRlbnNpb25zLTE1MzYiPi1tbm8tZXh0ZW5zaW9uczwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbW5vXzAwMmRmZHBpY18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1CbGFja2Zpbi03MzEiPjxjb2RlPi1tbm8tZmRwaWM8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEJsYWNrZmluPC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtbm9fMDAyZGZpcy0xNTQ0Ij4tbW5vLWZpczwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1ub18wMDJkZnBfMDAyZDExLTE1NTMiPi1tbm8tZnAtMTE8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtbm9fMDAyZGZwcC0xNTQ5Ij4tbW5vLWZwcDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1ub18wMDJkZnB1LTE1NTEiPi1tbm8tZnB1PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbW5vXzAwMmRrZXYxMS0xNTQ3Ij4tbW5vLWtldjExPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbW5vXzAwMmRsaW1pdGVkXzAwMmRlaXMtMTU1NSI+LW1uby1saW1pdGVkLWVpczwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1ub18wMDJkbWZwdC0xNTU3Ij4tbW5vLW1mcHQ8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtbm9fMDAyZG1pY3JvY29kZS0xNTY1Ij4tbW5vLW1pY3JvY29kZTwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1ub18wMDJkbXV0aXByb2MtMTU1OSI+LW1uby1tdXRpcHJvYzwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1ub18wMDJkbXhwcy0xNTYxIj4tbW5vLW14cHM8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtbm9fMDAyZHBpYy0xNTMzIj4tbW5vLXBpYzwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbW5vXzAwMmRwaWNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtVElDNlgtMjAwMCI+PGNvZGU+LW1uby1waWM8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI1RJQzZYLU9wdGlvbnMiPlRJQzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbW5vXzAwMmRyZWduYW1lc18wMDdkLW9wdGlvbl8wMDJjLXMzOTAtMTY4NiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbW5vLXJlZ25hbWVzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtT3B0aW9ucy5odG1sI3MzOTAtT3B0aW9ucyI+czM5MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbW5vXzAwMmRza2lwXzAwMmRidWdfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVZSLTcxMCI+PGNvZGU+LW1uby1za2lwLWJ1ZzwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQVZSPC9hPjogPGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtbm9fMDAyZHNwbC0xNTYzIj4tbW5vLXNwbDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI2luZGV4LWdfdF8wMDJkbW5vXzAwMmRzeW0zMi0xMzc0Ij4tbW5vLXN5bTMyPC9hPjogPGEgaHJlZj0iTUlQUy1PcHRzLmh0bWwjTUlQUy1PcHRzIj5NSVBTIE9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtbm9fMDAyZHdyYXBfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVZSLTcxMSI+PGNvZGU+LW1uby13cmFwPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBVlI8L2E+OiA8YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj5BVlIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbW5vcGljXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUJsYWNrZmluLTczMiI+PGNvZGU+LW1ub3BpYzwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQmxhY2tmaW48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1waWMtMTUzMiI+LW1waWM8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1waWNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtVElDNlgtMTk5OSI+PGNvZGU+LW1waWM8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI1RJQzZYLU9wdGlvbnMiPlRJQzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtcGlkXzAwN2QtMTY1NSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXBpZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9IlJYXzAwMmRPcHRzLmh0bWwjUlhfMDAyZE9wdHMiPlJYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1waWRfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1USUM2WC0xOTk4Ij48Y29kZT4tbXBpZD08L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI1RJQzZYLU9wdGlvbnMiPlRJQzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXJlZ25hbWVzXzAwN2Qtb3B0aW9uXzAwMmMtczM5MC0xNjg1Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tcmVnbmFtZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBzMzkwPC9hPjogPGEgaHJlZj0iczM5MC1PcHRpb25zLmh0bWwjczM5MC1PcHRpb25zIj5zMzkwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXJlbGF4XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVY4NTAtMjE3OSI+PGNvZGU+LW1yZWxheDwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXNob3J0XzAwN2QtMjIzMCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXNob3J0PC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZE9wdHMuaHRtbCNYR0FURV8wMDJkT3B0cyI+WEdBVEUtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXNob3J0XzAwN2QtMTMwNCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXNob3J0PC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiPk02OEhDMTEtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zaG9ydF8wMDJkZG91YmxlXzAwN2QtMjIzMiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXNob3J0LWRvdWJsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9IlhHQVRFXzAwMmRPcHRzLmh0bWwjWEdBVEVfMDAyZE9wdHMiPlhHQVRFLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zaG9ydF8wMDJkZG91YmxlXzAwN2QtMTMwNiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXNob3J0LWRvdWJsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNNNjhIQzExXzAwMmRPcHRzIj5NNjhIQzExLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXNpZ25fMDAyZGV4dGVuZF8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNTEiPjxjb2RlPi1tc2lnbi1leHRlbmQtZW5hYmxlZDwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgTE0zMjwvYT46IDxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI0xNMzItT3B0aW9ucyI+TE0zMiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXNtYWxsXzAwMmRkYXRhXzAwMmRsaW1pdF8wMDdkLTE2NTQiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1zbWFsbC1kYXRhLWxpbWl0PC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNSWF8wMDJkT3B0cyI+UlgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG1zcGwtMTU2MiI+LW1zcGw8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zc2VfMDAyZGNoZWNrXzAwM2RfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkyMCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXNzZS1jaGVjaz08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXNzZV8wMDJkY2hlY2tfMDAzZF8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTIxIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tc3NlLWNoZWNrPTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zc2UyYXZ4XzAwN2Qtb3B0aW9uXzAwMmMtaTM4Ni05MTgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1zc2UyYXZ4PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zc2UyYXZ4XzAwN2Qtb3B0aW9uXzAwMmMteDg2XzAwMmQ2NC05MTkiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1zc2UyYXZ4PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI2luZGV4LWdfdF8wMDJkbXN5bTMyLTEzNzMiPi1tc3ltMzI8L2E+OiA8YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNNSVBTLU9wdHMiPk1JUFMgT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXN5bnRheF8wMDNkXzAwN2Qtb3B0aW9uXzAwMmMtaTM4Ni05MjYiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1zeW50YXg9PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zeW50YXhfMDAzZF8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTI3Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tc3ludGF4PTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtdDExLTE1NzkiPi1tdDExPC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXRodW1iXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MTgiPjxjb2RlPi1tdGh1bWI8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXRodW1iXzAwMmRpbnRlcndvcmtfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQVJNLTYxOSI+PGNvZGU+LW10aHVtYi1pbnRlcndvcms8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtdHVuZV8wMDNkXzAwN2Qtb3B0aW9uXzAwMmMtaTM4Ni05MTYiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW10dW5lPTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtdHVuZV8wMDNkXzAwN2Qtb3B0aW9uXzAwMmMteDg2XzAwMmQ2NC05MTciPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW10dW5lPTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtdXNlXzAwMmRjb252ZW50aW9uYWxfMDAyZHNlY3Rpb25fMDAyZG5hbWVzXzAwN2QtMTY1MiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXVzZS1jb252ZW50aW9uYWwtc2VjdGlvbi1uYW1lczwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvYT46IDxhIGhyZWY9IlJYXzAwMmRPcHRzLmh0bWwjUlhfMDAyZE9wdHMiPlJYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtdXNlXzAwMmRyZW5lc2FzXzAwMmRzZWN0aW9uXzAwMmRuYW1lc18wMDdkLTE2NTMiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW11c2UtcmVuZXNhcy1zZWN0aW9uLW5hbWVzPC9zcGFuPjwvc2FtcD4mcnNxdW87PC9hPjogPGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNSWF8wMDJkT3B0cyI+UlgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdXNlcl8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNTIiPjxjb2RlPi1tdXNlci1lbmFibGVkPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBMTTMyPC9hPjogPGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXY4NTBfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtVjg1MC0yMTczIj48Y29kZT4tbXY4NTA8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdjg1MGFueV8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1WODUwLTIxNzYiPjxjb2RlPi1tdjg1MGFueTwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG12ODUwZV8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1WODUwLTIxNzQiPjxjb2RlPi1tdjg1MGU8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdjg1MGUxXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVY4NTAtMjE3NSI+PGNvZGU+LW12ODUwZTE8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdjg1MGUyXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVY4NTAtMjE3NyI+PGNvZGU+LW12ODUwZTI8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdjg1MGUydjNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtVjg1MC0yMTc4Ij48Y29kZT4tbXY4NTBlMnYzPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRtdnh3b3Jrc18wMDJkcGljXzAwN2Qtb3B0aW9uXzAwMmMtTUlQUy0xMzcxIj48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXZ4d29ya3MtcGljPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBNSVBTPC9hPjogPGEgaHJlZj0iTUlQUy1PcHRzLmh0bWwjTUlQUy1PcHRzIj5NSVBTIE9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXdhcm5fMDAyZGFyZWdfMDAyZHplcm9fMDA3ZC1vcHRpb25fMDAyYy1zMzkwLTE2ODciPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW13YXJuLWFyZWctemVybzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHMzOTA8L2E+OiA8YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNzMzkwLU9wdGlvbnMiPnMzOTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG13YXJuXzAwMmRkZXByZWNhdGVkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFSTS02MzMiPjxjb2RlPi1td2Fybi1kZXByZWNhdGVkPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InMzOTAtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtemFyY2hfMDA3ZC1vcHRpb25fMDAyYy1zMzkwLTE2ODMiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW16YXJjaDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIHMzOTA8L2E+OiA8YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNzMzkwLU9wdGlvbnMiPnMzOTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmROXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzYzIj48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTjwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24sIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRuSXBfMDA3ZC1vcHRpb25fMDAyYy1NMzJSWC0xMjE3Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1uSXA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBNMzJSWDwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG5vXzAwMmRiaXRpbnN0XzAwN2RfMDAyYy1NMzJSMi0xMjA4Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1uby1iaXRpbnN0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBNMzJSMjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG5vXzAwMmRpZ25vcmVfMDAyZHBhcmFsbGVsXzAwMmRjb25mbGljdHNfMDA3ZC1vcHRpb25fMDAyYy1NMzJSWC0xMjE1Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1uby1pZ25vcmUtcGFyYWxsZWwtY29uZmxpY3RzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgTTMyUlg8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjTTMyUl8wMDJkT3B0cyI+TTMyUi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRub18wMDJkbWRlYnVnXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFscGhhLTU1NSI+PGNvZGU+LW5vLW1kZWJ1ZzwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQWxwaGE8L2E+OiA8YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjQWxwaGEtT3B0aW9ucyI+QWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbm9fMDAyZHBhcmFsbGVsXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIwNyI+PGNvZGU+LW5vLXBhcmFsbGVsPC9jb2RlPiBvcHRpb24sIE0zMlJYPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbm9fMDAyZHJlbGF4XzAwN2Qtb3B0aW9uXzAwMmMtaTk2MC0xMDkzIj48Y29kZT4tbm8tcmVsYXg8L2NvZGU+IG9wdGlvbiwgaTk2MDwvYT46IDxhIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNPcHRpb25zXzAwMmRpOTYwIj5PcHRpb25zLWk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG5vXzAwMmR3YXJuXzAwMmRleHBsaWNpdF8wMDJkcGFyYWxsZWxfMDAyZGNvbmZsaWN0c18wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMTIiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW5vLXdhcm4tZXhwbGljaXQtcGFyYWxsZWwtY29uZmxpY3RzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgTTMyUlg8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjTTMyUl8wMDJkT3B0cyI+TTMyUi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRub18wMDJkd2Fybl8wMDJkdW5tYXRjaGVkXzAwMmRoaWdoXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMjE5Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1uby13YXJuLXVubWF0Y2hlZC1oaWdoPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgTTMyUjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbm9jcHBfMDA3ZC1pZ25vcmVkLV8wMDI4TUlQU18wMDI5LTEzNzUiPjxjb2RlPi1ub2NwcDwvY29kZT4gaWdub3JlZCAoTUlQUyk8L2E+OiA8YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNNSVBTLU9wdHMiPk1JUFMgT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbm9yZXBsYWNlXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFscGhhLTU1OCI+PGNvZGU+LW5vcmVwbGFjZTwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQWxwaGE8L2E+OiA8YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjQWxwaGEtT3B0aW9ucyI+QWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im8uaHRtbCNpbmRleC1nX3RfMDAyZG8tODQiPjxjb2RlPi1vPC9jb2RlPjwvYT46IDxhIGhyZWY9Im8uaHRtbCNvIj5vPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRPXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIwOSI+PGNvZGU+LU88L2NvZGU+IG9wdGlvbiwgTTMyUlg8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjTTMyUl8wMDJkT3B0cyI+TTMyUi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRwYXJhbGxlbF8wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMDYiPjxjb2RlPi1wYXJhbGxlbDwvY29kZT4gb3B0aW9uLCBNMzJSWDwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSLmh0bWwjaW5kZXgtZ190XzAwMmRSLTg3Ij48Y29kZT4tUjwvY29kZT48L2E+OiA8YSBocmVmPSJSLmh0bWwjUiI+UjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHI4MDBfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtWjgwLTIwNTgiPjxjb2RlPi1yODAwPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBaODA8L2E+OiA8YSBocmVmPSJaODAtT3B0aW9ucy5odG1sI1o4MC1PcHRpb25zIj5aODAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkcmVsYXhfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQWxwaGEtNTU2Ij48Y29kZT4tcmVsYXg8L2NvZGU+IGNvbW1hbmQgbGluZSBvcHRpb24sIEFscGhhPC9hPjogPGEgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiPkFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHJlcGxhY2VfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQWxwaGEtNTU3Ij48Y29kZT4tcmVwbGFjZTwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgQWxwaGE8L2E+OiA8YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjQWxwaGEtT3B0aW9ucyI+QWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRTXzAwN2RfMDAyYy1pZ25vcmVkLW9uLVZBWC0yMTE3Ij48Y29kZT4tUzwvY29kZT4sIGlnbm9yZWQgb24gVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmR0XzAwN2RfMDAyYy1pZ25vcmVkLW9uLVZBWC0yMTIyIj48Y29kZT4tdDwvY29kZT4sIGlnbm9yZWQgb24gVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRUXzAwN2RfMDAyYy1pZ25vcmVkLW9uLVZBWC0yMTE4Ij48Y29kZT4tVDwvY29kZT4sIGlnbm9yZWQgb24gVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9InYuaHRtbCNpbmRleC1nX3RfMDAyZHYtOTciPjxjb2RlPi12PC9jb2RlPjwvYT46IDxhIGhyZWY9InYuaHRtbCN2Ij52PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZFZfMDA3ZF8wMDJjLXJlZHVuZGFudC1vbi1WQVgtMjEyMCI+PGNvZGU+LVY8L2NvZGU+LCByZWR1bmRhbnQgb24gVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9InYuaHRtbCNpbmRleC1nX3RfMDAyZHZlcnNpb24tOTgiPjxjb2RlPi12ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9InYuaHRtbCN2Ij52PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVy5odG1sI2luZGV4LWdfdF8wMDJkVy0xMDEiPjxjb2RlPi1XPC9jb2RlPjwvYT46IDxhIGhyZWY9IlcuaHRtbCNXIj5XPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmR3YXJuXzAwMmRleHBsaWNpdF8wMDJkcGFyYWxsZWxfMDAyZGNvbmZsaWN0c18wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMTAiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXdhcm4tZXhwbGljaXQtcGFyYWxsZWwtY29uZmxpY3RzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgTTMyUlg8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjTTMyUl8wMDJkT3B0cyI+TTMyUi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmR3YXJuXzAwMmR1bm1hdGNoZWRfMDAyZGhpZ2hfMDA3ZC1vcHRpb25fMDAyYy1NMzJSLTEyMTgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXdhcm4tdW5tYXRjaGVkLWhpZ2g8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBNMzJSPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkV25wXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIxMyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tV25wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgTTMyUlg8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjTTMyUl8wMDJkT3B0cyI+TTMyUi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRXbnVoXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIyMSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tV251aDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIE0zMlJYPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkV3BfMDA3ZC1vcHRpb25fMDAyYy1NMzJSWC0xMjExIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1XcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIE0zMlJYPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmR3c2lnbmVkXzAwNWZvdmVyZmxvd18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1WODUwLTIxNzEiPjxjb2RlPi13c2lnbmVkX292ZXJmbG93PC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZFd1aF8wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMjAiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVd1aDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIE0zMlJYPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmR3dW5zaWduZWRfMDA1Zm92ZXJmbG93XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVY4NTAtMjE3MiI+PGNvZGU+LXd1bnNpZ25lZF9vdmVyZmxvdzwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmR4XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQzNiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4teDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPk1NSVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHo4MF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1aODAtMjA1NyI+PGNvZGU+LXo4MDwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgWjgwPC9hPjogPGEgaHJlZj0iWjgwLU9wdGlvbnMuaHRtbCNaODAtT3B0aW9ucyI+WjgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHo4MDAxXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVo4MDAwLTIwODMiPjxjb2RlPi16ODAwMTwvY29kZT4gY29tbWFuZCBsaW5lIG9wdGlvbiwgWjgwMDA8L2E+OiA8YSBocmVmPSJaODAwMC1PcHRpb25zLmh0bWwjWjgwMDAtT3B0aW9ucyI+WjgwMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkejgwMDJfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtWjgwMDAtMjA4NCI+PGNvZGU+LXo4MDAyPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLCBaODAwMDwvYT46IDxhIGhyZWY9Ilo4MDAwLU9wdGlvbnMuaHRtbCNaODAwMC1PcHRpb25zIj5aODAwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRG90Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZV8wMDdkLV8wMDI4c3ltYm9sXzAwMjktMjIyIj48Y29kZT4uPC9jb2RlPiAoc3ltYm9sKTwvYT46IDxhIGhyZWY9IkRvdC5odG1sI0RvdCI+RG90PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlMmJ5dGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjUzIj48Y29kZT4uMmJ5dGU8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmU0Ynl0ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NTQiPjxjb2RlPi40Ynl0ZTwvY29kZT4gZGlyZWN0aXZlLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZThieXRlXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY1NSI+PGNvZGU+LjhieXRlPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlYWxpZ25fMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjU2Ij48Y29kZT4uYWxpZ248L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWFsaWduXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElMRV8wMDJkR3gtMjAzNyI+PGNvZGU+LmFsaWduPC9jb2RlPiBkaXJlY3RpdmUsIFRJTEUtR3g8L2E+OiA8YSBocmVmPSJUSUxFXzAwMmRHeC1EaXJlY3RpdmVzLmh0bWwjVElMRV8wMDJkR3gtRGlyZWN0aXZlcyI+VElMRS1HeCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRVByby1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWFsaWduXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElMRVByby0yMDUxIj48Y29kZT4uYWxpZ248L2NvZGU+IGRpcmVjdGl2ZSwgVElMRVBybzwvYT46IDxhIGhyZWY9IlRJTEVQcm8tRGlyZWN0aXZlcy5odG1sI1RJTEVQcm8tRGlyZWN0aXZlcyI+VElMRVBybyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVhbGxvd18wMDVmc3VzcGljaW91c18wMDVmYnVuZGxlc18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJTEVfMDAyZEd4LTIwMzgiPjxjb2RlPi5hbGxvd19zdXNwaWNpb3VzX2J1bmRsZXM8L2NvZGU+IGRpcmVjdGl2ZSwgVElMRS1HeDwvYT46IDxhIGhyZWY9IlRJTEVfMDAyZEd4LURpcmVjdGl2ZXMuaHRtbCNUSUxFXzAwMmRHeC1EaXJlY3RpdmVzIj5USUxFLUd4IERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFUHJvLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlYWxsb3dfMDA1ZnN1c3BpY2lvdXNfMDA1ZmJ1bmRsZXNfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUxFUHJvLTIwNTIiPjxjb2RlPi5hbGxvd19zdXNwaWNpb3VzX2J1bmRsZXM8L2NvZGU+IGRpcmVjdGl2ZSwgVElMRVBybzwvYT46IDxhIGhyZWY9IlRJTEVQcm8tRGlyZWN0aXZlcy5odG1sI1RJTEVQcm8tRGlyZWN0aXZlcyI+VElMRVBybyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlYXJjaF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NTciPjxjb2RlPi5hcmNoPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNlgtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVhcmNoXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNlgtMjAxMiI+PGNvZGU+LmFyY2g8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNlg8L2E+OiA8YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjVElDNlgtRGlyZWN0aXZlcyI+VElDNlggRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWFyY2hfMDA1ZmV4dGVuc2lvbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NTgiPjxjb2RlPi5hcmNoX2V4dGVuc2lvbjwvY29kZT4gZGlyZWN0aXZlLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWFybV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NTkiPjxjb2RlPi5hcm08L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWJpZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlJYLTEyMzEiPjxjb2RlPi5iaWc8L2NvZGU+IGRpcmVjdGl2ZSwgTTMyUlg8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmREaXJlY3RpdmVzLmh0bWwjTTMyUl8wMDJkRGlyZWN0aXZlcyI+TTMyUi1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWJzc18wMDdkLWRpcmVjdGl2ZV8wMDJjLUFBcmNoNjQtNTM4Ij48Y29kZT4uYnNzPC9jb2RlPiBkaXJlY3RpdmUsIEFBcmNoNjQ8L2E+OiA8YSBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNBQXJjaDY0LURpcmVjdGl2ZXMiPkFBcmNoNjQgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWJzc18wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NjEiPjxjb2RlPi5ic3M8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWM2eGFiaV8wMDVmYXR0cmlidXRlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNlgtMjAxNCI+PGNvZGU+LmM2eGFiaV9hdHRyaWJ1dGU8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNlg8L2E+OiA8YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjVElDNlgtRGlyZWN0aXZlcyI+VElDNlggRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWNhbnR1bndpbmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjYyIj48Y29kZT4uY2FudHVud2luZDwvY29kZT4gZGlyZWN0aXZlLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlY2FudHVud2luZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzZYLTIwMTMiPjxjb2RlPi5jYW50dW53aW5kPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtRGlyZWN0aXZlcy5odG1sI1RJQzZYLURpcmVjdGl2ZXMiPlRJQzZYIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVjb2RlXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY2MyI+PGNvZGU+LmNvZGU8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVjcHVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjY0Ij48Y29kZT4uY3B1PC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlZG5fMDA3ZC1hbmQtXzAwNDBjb2RlXzAwN2JfMDAyZXFuXzAwN2QtZGlyZWN0aXZlc18wMDJjLUFSTS02NjUiPjxjb2RlPi5kbjwvY29kZT4gYW5kIDxjb2RlPi5xbjwvY29kZT4gZGlyZWN0aXZlcywgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVlYWJpXzAwNWZhdHRyaWJ1dGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjY2Ij48Y29kZT4uZWFiaV9hdHRyaWJ1dGU8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWVodHlwZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzZYLTIwMTUiPjxjb2RlPi5laHR5cGU8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNlg8L2E+OiA8YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjVElDNlgtRGlyZWN0aXZlcyI+VElDNlggRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlZW5kcF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzZYLTIwMTYiPjxjb2RlPi5lbmRwPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtRGlyZWN0aXZlcy5odG1sI1RJQzZYLURpcmVjdGl2ZXMiPlRJQzZYIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVldmVuXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY2NyI+PGNvZGU+LmV2ZW48L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVleHRlbmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjY4Ij48Y29kZT4uZXh0ZW5kPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlZm5lbmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjcwIj48Y29kZT4uZm5lbmQ8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVmbnN0YXJ0XzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY3MSI+PGNvZGU+LmZuc3RhcnQ8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVmb3JjZV8wMDVmdGh1bWJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjcyIj48Y29kZT4uZm9yY2VfdGh1bWI8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVmcHVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjczIj48Y29kZT4uZnB1PC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1pbnNuLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWdsb2JhbF8wMDdkLTEzOTAiPjxjb2RlPi5nbG9iYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1pbnNuLmh0bWwjTUlQUy1pbnNuIj5NSVBTIGluc248L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVoYW5kbGVyZGF0YV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzQiPjxjb2RlPi5oYW5kbGVyZGF0YTwvY29kZT4gZGlyZWN0aXZlLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlaGFuZGxlcmRhdGFfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM2WC0yMDE3Ij48Y29kZT4uaGFuZGxlcmRhdGE8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNlg8L2E+OiA8YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjVElDNlgtRGlyZWN0aXZlcyI+VElDNlggRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtaW5zbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVpbnNuXzAwN2QtMTM4OSI+PGNvZGU+Lmluc248L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1pbnNuLmh0bWwjTUlQUy1pbnNuIj5NSVBTIGluc248L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlaW5zbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLXMzOTAtMTcxMSI+PGNvZGU+Lmluc248L2NvZGU+IGRpcmVjdGl2ZSwgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtRGlyZWN0aXZlcy5odG1sI3MzOTAtRGlyZWN0aXZlcyI+czM5MCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlaW5zdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzUiPjxjb2RlPi5pbnN0PC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbGRvdWJsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NjkiPjxjb2RlPi5sZG91YmxlPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVsaXR0bGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NMzJSWC0xMjMwIj48Y29kZT4ubGl0dGxlPC9jb2RlPiBkaXJlY3RpdmUsIE0zMlJYPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI00zMlJfMDAyZERpcmVjdGl2ZXMiPk0zMlItRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InMzOTAtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtczM5MC0xNzEzIj48Y29kZT4ubG9uZzwvY29kZT4gZGlyZWN0aXZlLCBzMzkwPC9hPjogPGEgaHJlZj0iczM5MC1EaXJlY3RpdmVzLmh0bWwjczM5MC1EaXJlY3RpdmVzIj5zMzkwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbHRvcmdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BQXJjaDY0LTUzOSI+PGNvZGU+Lmx0b3JnPC9jb2RlPiBkaXJlY3RpdmUsIEFBcmNoNjQ8L2E+OiA8YSBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNBQXJjaDY0LURpcmVjdGl2ZXMiPkFBcmNoNjQgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWx0b3JnXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY3NiI+PGNvZGU+Lmx0b3JnPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWx0b3JnXzAwN2QtZGlyZWN0aXZlXzAwMmMtczM5MC0xNzE1Ij48Y29kZT4ubHRvcmc8L2NvZGU+IGRpcmVjdGl2ZSwgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtRGlyZWN0aXZlcy5odG1sI3MzOTAtRGlyZWN0aXZlcyI+czM5MCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVtMzJyXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTMyUi0xMjI3Ij48Y29kZT4ubTMycjwvY29kZT4gZGlyZWN0aXZlLCBNMzJSPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI00zMlJfMDAyZERpcmVjdGl2ZXMiPk0zMlItRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbTMycjJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NMzJSMi0xMjI5Ij48Y29kZT4ubTMycjI8L2NvZGU+IGRpcmVjdGl2ZSwgTTMyUjI8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmREaXJlY3RpdmVzLmh0bWwjTTMyUl8wMDJkRGlyZWN0aXZlcyI+TTMyUi1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVtMzJyeF8wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlJYLTEyMjgiPjxjb2RlPi5tMzJyeDwvY29kZT4gZGlyZWN0aXZlLCBNMzJSWDwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCNNMzJSXzAwMmREaXJlY3RpdmVzIj5NMzJSLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbWFjaGluZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLXMzOTAtMTcxNiI+PGNvZGU+Lm1hY2hpbmU8L2NvZGU+IGRpcmVjdGl2ZSwgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtRGlyZWN0aXZlcy5odG1sI3MzOTAtRGlyZWN0aXZlcyI+czM5MCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbW92c3BfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjc3Ij48Y29kZT4ubW92c3A8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVub18wMDVmcG9pbnRlcnNfMDA3ZC1kaXJlY3RpdmVfMDAyYy1YU3Rvcm15MTYtMjI2NyI+PGNvZGU+Lm5vX3BvaW50ZXJzPC9jb2RlPiBkaXJlY3RpdmUsIFhTdG9ybXkxNjwvYT46IDxhIGhyZWY9IlhTdG9ybXkxNi1EaXJlY3RpdmVzLmh0bWwjWFN0b3JteTE2LURpcmVjdGl2ZXMiPlhTdG9ybXkxNiBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNlgtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVub2NtcF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzZYLTIwMTgiPjxjb2RlPi5ub2NtcDwvY29kZT4gZGlyZWN0aXZlLCBUSUM2WDwvYT46IDxhIGhyZWY9IlRJQzZYLURpcmVjdGl2ZXMuaHRtbCNUSUM2WC1EaXJlY3RpdmVzIj5USUM2WCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0Lmh0bWwjaW5kZXgtZ190XzAwMmVvLTM3Ij48Y29kZT4ubzwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3QuaHRtbCNPYmplY3QiPk9iamVjdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZW9iamVjdF8wMDVmYXJjaF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzgiPjxjb2RlPi5vYmplY3RfYXJjaDwvY29kZT4gZGlyZWN0aXZlLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXBhY2tlZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02NzkiPjxjb2RlPi5wYWNrZWQ8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVwYWRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjYwIj48Y29kZT4ucGFkPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXBhcmFtXzAwN2Qtb24tSFBQQS04OTEiPjxjb2RlPi5wYXJhbTwvY29kZT4gb24gSFBQQTwvYT46IDxhIGhyZWY9IkhQUEEtRGlyZWN0aXZlcy5odG1sI0hQUEEtRGlyZWN0aXZlcyI+SFBQQSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlcGVyc29uYWxpdHlfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjgxIj48Y29kZT4ucGVyc29uYWxpdHk8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXBlcnNvbmFsaXR5XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNlgtMjAyMCI+PGNvZGU+LnBlcnNvbmFsaXR5PC9jb2RlPiBkaXJlY3RpdmUsIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtRGlyZWN0aXZlcy5odG1sI1RJQzZYLURpcmVjdGl2ZXMiPlRJQzZYIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVwZXJzb25hbGl0eWluZGV4XzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY4MiI+PGNvZGU+LnBlcnNvbmFsaXR5aW5kZXg8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXBlcnNvbmFsaXR5aW5kZXhfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM2WC0yMDE5Ij48Y29kZT4ucGVyc29uYWxpdHlpbmRleDwvY29kZT4gZGlyZWN0aXZlLCBUSUM2WDwvYT46IDxhIGhyZWY9IlRJQzZYLURpcmVjdGl2ZXMuaHRtbCNUSUM2WC1EaXJlY3RpdmVzIj5USUM2WCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXBvb2xfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BQXJjaDY0LTU0MCI+PGNvZGU+LnBvb2w8L2NvZGU+IGRpcmVjdGl2ZSwgQUFyY2g2NDwvYT46IDxhIGhyZWY9IkFBcmNoNjQtRGlyZWN0aXZlcy5odG1sI0FBcmNoNjQtRGlyZWN0aXZlcyI+QUFyY2g2NCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlcG9vbF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02ODMiPjxjb2RlPi5wb29sPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXF1YWRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1zMzkwLTE3MTQiPjxjb2RlPi5xdWFkPC9jb2RlPiBkaXJlY3RpdmUsIHMzOTA8L2E+OiA8YSBocmVmPSJzMzkwLURpcmVjdGl2ZXMuaHRtbCNzMzkwLURpcmVjdGl2ZXMiPnMzOTAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVyZXFfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BQXJjaDY0LTU0MSI+PGNvZGU+LnJlcTwvY29kZT4gZGlyZWN0aXZlLCBBQXJjaDY0PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1EaXJlY3RpdmVzLmh0bWwjQUFyY2g2NC1EaXJlY3RpdmVzIj5BQXJjaDY0IERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVyZXFfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjg0Ij48Y29kZT4ucmVxPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVyZXF1aXJlXzAwNWZjYW5vbmljYWxfMDA1ZnJlZ18wMDVmbmFtZXNfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUxFXzAwMmRHeC0yMDM5Ij48Y29kZT4ucmVxdWlyZV9jYW5vbmljYWxfcmVnX25hbWVzPC9jb2RlPiBkaXJlY3RpdmUsIFRJTEUtR3g8L2E+OiA8YSBocmVmPSJUSUxFXzAwMmRHeC1EaXJlY3RpdmVzLmh0bWwjVElMRV8wMDJkR3gtRGlyZWN0aXZlcyI+VElMRS1HeCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRVByby1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXJlcXVpcmVfMDA1ZmNhbm9uaWNhbF8wMDVmcmVnXzAwNWZuYW1lc18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJTEVQcm8tMjA1MyI+PGNvZGU+LnJlcXVpcmVfY2Fub25pY2FsX3JlZ19uYW1lczwvY29kZT4gZGlyZWN0aXZlLCBUSUxFUHJvPC9hPjogPGEgaHJlZj0iVElMRVByby1EaXJlY3RpdmVzLmh0bWwjVElMRVByby1EaXJlY3RpdmVzIj5USUxFUHJvIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzYXZlXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY4NSI+PGNvZGU+LnNhdmU8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNjb21tXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNlgtMjAyMSI+PGNvZGU+LnNjb21tPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtRGlyZWN0aXZlcy5odG1sI1RJQzZYLURpcmVjdGl2ZXMiPlRJQzZYIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZWNyZWwzMl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02ODciPjxjb2RlPi5zZWNyZWwzMjwvY29kZT4gZGlyZWN0aXZlLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtSVNBLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1hcmNoXzAwM2RfMDA0MHZhcl8wMDdiY3B1XzAwN2RfMDA3ZC0xMzg2Ij48Y29kZT4uc2V0IGFyY2g9PC9jb2RlPjx2YXI+Y3B1PC92YXI+PC9hPjogPGEgaHJlZj0iTUlQUy1JU0EuaHRtbCNNSVBTLUlTQSI+TUlQUyBJU0E8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLWF1dG9leHRlbmQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LWF1dG9leHRlbmRfMDA3ZC0xMzg3Ij48Y29kZT4uc2V0IGF1dG9leHRlbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1hdXRvZXh0ZW5kLmh0bWwjTUlQUy1hdXRvZXh0ZW5kIj5NSVBTIGF1dG9leHRlbmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLWZsb2F0aW5nXzAwMmRwb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtZG91YmxlZmxvYXRfMDA3ZC0xNDIwIj48Y29kZT4uc2V0IGRvdWJsZWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtZmxvYXRpbmdfMDAyZHBvaW50Lmh0bWwjTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQiPk1JUFMgZmxvYXRpbmctcG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtZHNwXzAwN2QtMTQwNCI+PGNvZGU+LnNldCBkc3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtZHNwcjJfMDA3ZC0xNDA3Ij48Y29kZT4uc2V0IGRzcHIyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMiPk1JUFMgQVNFIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LWhhcmRmbG9hdF8wMDdkLTE0MTciPjxjb2RlPi5zZXQgaGFyZGZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtZmxvYXRpbmdfMDAyZHBvaW50Lmh0bWwjTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQiPk1JUFMgZmxvYXRpbmctcG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbWN1XzAwN2QtMTQxMyI+PGNvZGU+LnNldCBtY3U8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbWRteF8wMDdkLTE0MDEiPjxjb2RlPi5zZXQgbWRteDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1taXBzM2RfMDA3ZC0xMzk1Ij48Y29kZT4uc2V0IG1pcHMzZDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtSVNBLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1taXBzXzAwNDB2YXJfMDA3Ym5fMDA3ZF8wMDdkLTEzODQiPjxjb2RlPi5zZXQgbWlwczwvY29kZT48dmFyPm48L3Zhcj48L2E+OiA8YSBocmVmPSJNSVBTLUlTQS5odG1sI01JUFMtSVNBIj5NSVBTIElTQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1tdF8wMDdkLTE0MTAiPjxjb2RlPi5zZXQgbXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLWF1dG9leHRlbmQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LW5vYXV0b2V4dGVuZF8wMDdkLTEzODgiPjxjb2RlPi5zZXQgbm9hdXRvZXh0ZW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtYXV0b2V4dGVuZC5odG1sI01JUFMtYXV0b2V4dGVuZCI+TUlQUyBhdXRvZXh0ZW5kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LW5vZHNwXzAwN2QtMTQwNSI+PGNvZGU+LnNldCBub2RzcDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1ub2RzcHIyXzAwN2QtMTQwOCI+PGNvZGU+LnNldCBub2RzcHIyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMiPk1JUFMgQVNFIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LW5vbWN1XzAwN2QtMTQxNCI+PGNvZGU+LnNldCBub21jdTwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1ub21kbXhfMDA3ZC0xNDAyIj48Y29kZT4uc2V0IG5vbWRteDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1ub21pcHMzZF8wMDdkLTEzOTYiPjxjb2RlPi5zZXQgbm9taXBzM2Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbm9tdF8wMDdkLTE0MTEiPjxjb2RlPi5zZXQgbm9tdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1ub3NtYXJ0bWlwc18wMDdkLTEzOTkiPjxjb2RlPi5zZXQgbm9zbWFydG1pcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbm9zeW0zMl8wMDdkLTEzODIiPjxjb2RlPi5zZXQgbm9zeW0zMjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI01JUFMtc3ltYm9sLXNpemVzIj5NSVBTIHN5bWJvbCBzaXplczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtb3B0aW9uLXN0YWNrLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1wb3BfMDA3ZC0xMzkzIj48Y29kZT4uc2V0IHBvcDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLW9wdGlvbi1zdGFjay5odG1sI01JUFMtb3B0aW9uLXN0YWNrIj5NSVBTIG9wdGlvbiBzdGFjazwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtb3B0aW9uLXN0YWNrLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1wdXNoXzAwN2QtMTM5MiI+PGNvZGU+LnNldCBwdXNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtb3B0aW9uLXN0YWNrLmh0bWwjTUlQUy1vcHRpb24tc3RhY2siPk1JUFMgb3B0aW9uIHN0YWNrPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LXNpbmdsZWZsb2F0XzAwN2QtMTQxOSI+PGNvZGU+LnNldCBzaW5nbGVmbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLWZsb2F0aW5nXzAwMmRwb2ludC5odG1sI01JUFMtZmxvYXRpbmdfMDAyZHBvaW50Ij5NSVBTIGZsb2F0aW5nLXBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LXNtYXJ0bWlwc18wMDdkLTEzOTgiPjxjb2RlPi5zZXQgc21hcnRtaXBzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMiPk1JUFMgQVNFIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LXNvZnRmbG9hdF8wMDdkLTE0MTYiPjxjb2RlPi5zZXQgc29mdGZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtZmxvYXRpbmdfMDAyZHBvaW50Lmh0bWwjTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQiPk1JUFMgZmxvYXRpbmctcG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtc3ltMzJfMDA3ZC0xMzgxIj48Y29kZT4uc2V0IHN5bTMyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtc3ltYm9sLXNpemVzLmh0bWwjTUlQUy1zeW1ib2wtc2l6ZXMiPk1JUFMgc3ltYm9sIHNpemVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0ZnBfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjg2Ij48Y29kZT4uc2V0ZnA8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2hvcnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1zMzkwLTE3MTIiPjxjb2RlPi5zaG9ydDwvY29kZT4gZGlyZWN0aXZlLCBzMzkwPC9hPjogPGEgaHJlZj0iczM5MC1EaXJlY3RpdmVzLmh0bWwjczM5MC1EaXJlY3RpdmVzIj5zMzkwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzeW50YXhfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjg4Ij48Y29kZT4uc3ludGF4PC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldGh1bWJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjg5Ij48Y29kZT4udGh1bWI8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmV0aHVtYl8wMDVmZnVuY18wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02OTAiPjxjb2RlPi50aHVtYl9mdW5jPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldGh1bWJfMDA1ZnNldF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSTS02OTEiPjxjb2RlPi50aHVtYl9zZXQ8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmV0bHNkZXNjc2VxXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY5MiI+PGNvZGU+LnRsc2Rlc2NzZXE8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldW5yZXFfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BQXJjaDY0LTU0MiI+PGNvZGU+LnVucmVxPC9jb2RlPiBkaXJlY3RpdmUsIEFBcmNoNjQ8L2E+OiA8YSBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNBQXJjaDY0LURpcmVjdGl2ZXMiPkFBcmNoNjQgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXVucmVxXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJNLTY5MyI+PGNvZGU+LnVucmVxPC9jb2RlPiBkaXJlY3RpdmUsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldW53aW5kXzAwNWZyYXdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjk0Ij48Y29kZT4udW53aW5kX3JhdzwvY29kZT4gZGlyZWN0aXZlLCBBUk08L2E+OiA8YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmV2ODUwXzAwN2QtZGlyZWN0aXZlXzAwMmMtVjg1MC0yMjEwIj48Y29kZT4udjg1MDwvY29kZT4gZGlyZWN0aXZlLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjVjg1MC1EaXJlY3RpdmVzIj5WODUwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldjg1MGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WODUwLTIyMTEiPjxjb2RlPi52ODUwZTwvY29kZT4gZGlyZWN0aXZlLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjVjg1MC1EaXJlY3RpdmVzIj5WODUwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldjg1MGUxXzAwN2QtZGlyZWN0aXZlXzAwMmMtVjg1MC0yMjEyIj48Y29kZT4udjg1MGUxPC9jb2RlPiBkaXJlY3RpdmUsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNWODUwLURpcmVjdGl2ZXMiPlY4NTAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmV2ODUwZTJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WODUwLTIyMTMiPjxjb2RlPi52ODUwZTI8L2NvZGU+IGRpcmVjdGl2ZSwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtRGlyZWN0aXZlcy5odG1sI1Y4NTAtRGlyZWN0aXZlcyI+Vjg1MCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXY4NTBlMnYzXzAwN2QtZGlyZWN0aXZlXzAwMmMtVjg1MC0yMjE0Ij48Y29kZT4udjg1MGUydjM8L2NvZGU+IGRpcmVjdGl2ZSwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtRGlyZWN0aXZlcy5odG1sI1Y4NTAtRGlyZWN0aXZlcyI+Vjg1MCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJldnNhdmVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUk0tNjk1Ij48Y29kZT4udnNhdmU8L2NvZGU+IGRpcmVjdGl2ZSwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNBUk0tRGlyZWN0aXZlcyI+QVJNIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwMmV6ODAwMS0yMDk3Ij48Y29kZT4uejgwMDE8L2NvZGU+PC9hPjogPGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiPlo4MDAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwMmV6ODAwMi0yMDk5Ij48Y29kZT4uejgwMDI8L2NvZGU+PC9hPjogPGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiPlo4MDAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmQxNmJpdC5odG1sI2luZGV4LWdfdDE2XzAwMmRiaXQtY29kZV8wMDJjLWkzODYtMTA1MyI+MTYtYml0IGNvZGUsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmQxNmJpdC5odG1sI2kzODZfMDAyZDE2Yml0Ij5pMzg2LTE2Yml0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2LURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YjE2Yml0XzAwNWZwb2ludGVyc18wMDdkLWRpcmVjdGl2ZV8wMDJjLVhTdG9ybXkxNi0yMjY1Ij48Y29kZT4xNmJpdF9wb2ludGVyczwvY29kZT4gZGlyZWN0aXZlLCBYU3Rvcm15MTY8L2E+OiA8YSBocmVmPSJYU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sI1hTdG9ybXkxNi1EaXJlY3RpdmVzIj5YU3Rvcm15MTYgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2IyYnl0ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy01OTciPjxjb2RlPjJieXRlPC9jb2RlPiBkaXJlY3RpdmUsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2LURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YjMyYml0XzAwNWZwb2ludGVyc18wMDdkLWRpcmVjdGl2ZV8wMDJjLVhTdG9ybXkxNi0yMjY2Ij48Y29kZT4zMmJpdF9wb2ludGVyczwvY29kZT4gZGlyZWN0aXZlLCBYU3Rvcm15MTY8L2E+OiA8YSBocmVmPSJYU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sI1hTdG9ybXkxNi1EaXJlY3RpdmVzIj5YU3Rvcm15MTYgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2IzYnl0ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy01OTgiPjxjb2RlPjNieXRlPC9jb2RlPiBkaXJlY3RpdmUsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkU0lNRC5odG1sI2luZGV4LWdfdDNETm93XzAwMjFfMDAyYy1pMzg2LTEwNDEiPjNETm93ISwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFNJTUQuaHRtbCNpMzg2XzAwMmRTSU1EIj5pMzg2LVNJTUQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRTSU1ELmh0bWwjaW5kZXgtZ190M0ROb3dfMDAyMV8wMDJjLXg4Nl8wMDJkNjQtMTA0NCI+M0ROb3chLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRTSU1ELmh0bWwjaTM4Nl8wMDJkU0lNRCI+aTM4Ni1TSU1EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1nX3Q0MzAtc3VwcG9ydC0xNDk2Ij40MzAgc3VwcG9ydDwvYT46IDxhIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiPk1TUDQzMC1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiNGJ5dGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUkMtNTk5Ij48Y29kZT40Ynl0ZTwvY29kZT4gZGlyZWN0aXZlLCBBUkM8L2E+OiA8YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI0FSQy1EaXJlY3RpdmVzIj5BUkMgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDNhXzAwN2QtXzAwMjhsYWJlbF8wMDI5LTEzNyI+PGNvZGU+OjwvY29kZT4gKGxhYmVsKTwvYT46IDxhIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNTdGF0ZW1lbnRzIj5TdGF0ZW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2LU9wY29kZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDQwXzAwNDBoaV8wMDdkLXBzZXVkb18wMDJkb3BfMDAyYy1YU3Rvcm15MTYtMjI3MSI+PGNvZGU+QGhpPC9jb2RlPiBwc2V1ZG8tb3AsIFhTdG9ybXkxNjwvYT46IDxhIGhyZWY9IlhTdG9ybXkxNi1PcGNvZGVzLmh0bWwjWFN0b3JteTE2LU9wY29kZXMiPlhTdG9ybXkxNiBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2LU9wY29kZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDQwXzAwNDBsb18wMDdkLXBzZXVkb18wMDJkb3BfMDAyYy1YU3Rvcm15MTYtMjI3MCI+PGNvZGU+QGxvPC9jb2RlPiBwc2V1ZG8tb3AsIFhTdG9ybXkxNjwvYT46IDxhIGhyZWY9IlhTdG9ybXkxNi1PcGNvZGVzLmh0bWwjWFN0b3JteTE2LU9wY29kZXMiPlhTdG9ybXkxNiBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkV29yZC5odG1sI2luZGV4LWdfdF8wMDQwXzAwNDB3b3JkLW1vZGlmaWVyXzAwMmMtRDEwVi04MTgiPkB3b3JkIG1vZGlmaWVyLCBEMTBWPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkV29yZC5odG1sI0QxMFZfMDAyZFdvcmQiPkQxMFYtV29yZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVjXzAwMjJfMDA3ZC1fMDAyOGRvdWJsZXF1b3RlLWNoYXJhY3Rlcl8wMDI5LTE2MiI+PGNvZGU+XCI8L2NvZGU+IChkb3VibGVxdW90ZSBjaGFyYWN0ZXIpPC9hPjogPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y18wMDVjXzAwN2QtXzAwMjhfMDA0MHNhbXBfMDA3Yl8wMDVjXzAwN2QtY2hhcmFjdGVyXzAwMjktMTYwIj48Y29kZT5cXDwvY29kZT4gKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIpPC9hPjogPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y2JfMDA3ZC1fMDAyOGJhY2tzcGFjZS1jaGFyYWN0ZXJfMDAyOS0xNDYiPjxjb2RlPlxiPC9jb2RlPiAoYmFja3NwYWNlIGNoYXJhY3Rlcik8L2E+OiA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVjXzAwNDB2YXJfMDA3YmRkZF8wMDdkXzAwN2QtXzAwMjhvY3RhbC1jaGFyYWN0ZXItY29kZV8wMDI5LTE1NiI+PGNvZGU+XDwvY29kZT48dmFyPmRkZDwvdmFyPiAob2N0YWwgY2hhcmFjdGVyIGNvZGUpPC9hPjogPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y2ZfMDA3ZC1fMDAyOGZvcm1mZWVkLWNoYXJhY3Rlcl8wMDI5LTE0OCI+PGNvZGU+XGY8L2NvZGU+IChmb3JtZmVlZCBjaGFyYWN0ZXIpPC9hPjogPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y25fMDA3ZC1fMDAyOG5ld2xpbmUtY2hhcmFjdGVyXzAwMjktMTUwIj48Y29kZT5cbjwvY29kZT4gKG5ld2xpbmUgY2hhcmFjdGVyKTwvYT46IDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5ncy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWNyXzAwN2QtXzAwMjhjYXJyaWFnZS1yZXR1cm4tY2hhcmFjdGVyXzAwMjktMTUyIj48Y29kZT5ccjwvY29kZT4gKGNhcnJpYWdlIHJldHVybiBjaGFyYWN0ZXIpPC9hPjogPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y3RfMDA3ZC1fMDAyOHRhYl8wMDI5LTE1NCI+PGNvZGU+XHQ8L2NvZGU+ICh0YWIpPC9hPjogPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y18wMDQwdmFyXzAwN2J4ZF8wMDJlXzAwMmVfMDAyZV8wMDdkXzAwN2QtXzAwMjhoZXgtY2hhcmFjdGVyLWNvZGVfMDAyOS0xNTgiPjxjb2RlPlw8L2NvZGU+PHZhcj54ZC4uLjwvdmFyPiAoaGV4IGNoYXJhY3RlciBjb2RlKTwvYT46IDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wY29kZXMuaHRtbCNpbmRleC1nX3RfMDA1Zi1vcGNvZGUtcHJlZml4LTIyODkiPl8gb3Bjb2RlIHByZWZpeDwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1PcGNvZGVzLmh0bWwjWHRlbnNhLU9wY29kZXMiPlh0ZW5zYSBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0Lmh0bWwjaW5kZXgtYV8wMDJlb3V0LTM2Ij48Y29kZT5hLm91dDwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3QuaHRtbCNPYmplY3QiPk9iamVjdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFfMDAyZW91dC1TeW1ib2xzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhXzAwMmVvdXRfMDA3ZC1zeW1ib2wtYXR0cmlidXRlcy0yMzEiPjxjb2RlPmEub3V0PC9jb2RlPiBzeW1ib2wgYXR0cmlidXRlczwvYT46IDxhIGhyZWY9ImFfMDAyZW91dC1TeW1ib2xzLmh0bWwjYV8wMDJlb3V0LVN5bWJvbHMiPmEub3V0IFN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEVudi5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiQV8wMDVmRElSXzAwN2QtZW52aXJvbm1lbnQtdmFyaWFibGVfMDAyYy1USUM1NFgtMTg1NCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5BX0RJUjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRFbnYuaHRtbCNUSUM1NFhfMDAyZEVudiI+VElDNTRYLUVudjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtRmxvYXRpbmctUG9pbnQuaHRtbCNpbmRleC1BQXJjaDY0LWZsb2F0aW5nLXBvaW50LV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktNTM1Ij5BQXJjaDY0IGZsb2F0aW5nIHBvaW50ICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9IkFBcmNoNjQtRmxvYXRpbmctUG9pbnQuaHRtbCNBQXJjaDY0LUZsb2F0aW5nLVBvaW50Ij5BQXJjaDY0IEZsb2F0aW5nIFBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1BQXJjaDY0LWltbWVkaWF0ZS1jaGFyYWN0ZXItNTI3Ij5BQXJjaDY0IGltbWVkaWF0ZSBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJBQXJjaDY0XzAwMmRDaGFycy5odG1sI0FBcmNoNjRfMDAyZENoYXJzIj5BQXJjaDY0LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1BQXJjaDY0LWxpbmUtY29tbWVudC1jaGFyYWN0ZXItNTIyIj5BQXJjaDY0IGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJBQXJjaDY0XzAwMmRDaGFycy5odG1sI0FBcmNoNjRfMDAyZENoYXJzIj5BQXJjaDY0LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1BQXJjaDY0LWxpbmUtc2VwYXJhdG9yLTUyNSI+QUFyY2g2NCBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9IkFBcmNoNjRfMDAyZENoYXJzLmh0bWwjQUFyY2g2NF8wMDJkQ2hhcnMiPkFBcmNoNjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNpbmRleC1BQXJjaDY0LW1hY2hpbmUtZGlyZWN0aXZlcy01MzciPkFBcmNoNjQgbWFjaGluZSBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iQUFyY2g2NC1EaXJlY3RpdmVzLmh0bWwjQUFyY2g2NC1EaXJlY3RpdmVzIj5BQXJjaDY0IERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU9wY29kZXMuaHRtbCNpbmRleC1BQXJjaDY0LW9wY29kZXMtNTQzIj5BQXJjaDY0IG9wY29kZXM8L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wY29kZXMuaHRtbCNBQXJjaDY0LU9wY29kZXMiPkFBcmNoNjQgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LUFBcmNoNjQtb3B0aW9ucy1fMDAyOG5vbmVfMDAyOS01MTciPkFBcmNoNjQgb3B0aW9ucyAobm9uZSk8L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjRfMDAyZFJlZ3MuaHRtbCNpbmRleC1BQXJjaDY0LXJlZ2lzdGVyLW5hbWVzLTUyOCI+QUFyY2g2NCByZWdpc3RlciBuYW1lczwvYT46IDxhIGhyZWY9IkFBcmNoNjRfMDAyZFJlZ3MuaHRtbCNBQXJjaDY0XzAwMmRSZWdzIj5BQXJjaDY0LVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucy5odG1sI2luZGV4LUFBcmNoNjQtcmVsb2NhdGlvbnMtNTMxIj5BQXJjaDY0IHJlbG9jYXRpb25zPC9hPjogPGEgaHJlZj0iQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMuaHRtbCNBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucyI+QUFyY2g2NC1SZWxvY2F0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjRfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LUFBcmNoNjQtc3VwcG9ydC01MTUiPkFBcmNoNjQgc3VwcG9ydDwvYT46IDxhIGhyZWY9IkFBcmNoNjRfMDAyZERlcGVuZGVudC5odG1sI0FBcmNoNjRfMDAyZERlcGVuZGVudCI+QUFyY2g2NC1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0LU9wdGlvbnMuaHRtbCNpbmRleC1BQkktb3B0aW9uc18wMDJjLVNINjQtMTc3MCI+QUJJIG9wdGlvbnMsIFNINjQ8L2E+OiA8YSBocmVmPSJTSDY0LU9wdGlvbnMuaHRtbCNTSDY0LU9wdGlvbnMiPlNINjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFCT1JULV8wMDI4Q09GRl8wMDI5Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBQk9SVF8wMDdkLWRpcmVjdGl2ZS0yNzQiPjxjb2RlPkFCT1JUPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJBQk9SVC1fMDAyOENPRkZfMDAyOS5odG1sI0FCT1JULV8wMDI4Q09GRl8wMDI5Ij5BQk9SVCAoQ09GRik8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBYm9ydC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYWJvcnRfMDA3ZC1kaXJlY3RpdmUtMjcyIj48Y29kZT5hYm9ydDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iQWJvcnQuaHRtbCNBYm9ydCI+QWJvcnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMZC1TZWN0aW9ucy5odG1sI2luZGV4LWFic29sdXRlLXNlY3Rpb24tMTk3Ij5hYnNvbHV0ZSBzZWN0aW9uPC9hPjogPGEgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNMZC1TZWN0aW9ucyI+TGQgU2VjdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFic29sdXRlXzAwMmRsaXRlcmFsc18wMDdkLWRpcmVjdGl2ZS0yMzI5Ij48Y29kZT5hYnNvbHV0ZS1saXRlcmFsczwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iQWJzb2x1dGUtTGl0ZXJhbHMtRGlyZWN0aXZlLmh0bWwjQWJzb2x1dGUtTGl0ZXJhbHMtRGlyZWN0aXZlIj5BYnNvbHV0ZSBMaXRlcmFscyBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkFERElfMDA3ZC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMTYiPjxjb2RlPkFEREk8L2NvZGU+IGluc3RydWN0aW9ucywgcmVsYXhhdGlvbjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbiI+WHRlbnNhIEltbWVkaWF0ZSBSZWxheGF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5maXgtT3BzLmh0bWwjaW5kZXgtYWRkaXRpb25fMDAyYy1wZXJtaXR0ZWQtYXJndW1lbnRzLTI2MSI+YWRkaXRpb24sIHBlcm1pdHRlZCBhcmd1bWVudHM8L2E+OiA8YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNJbmZpeC1PcHMiPkluZml4IE9wczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjaW5kZXgtYWRkcmVzc2VzLTI0MiI+YWRkcmVzc2VzPC9hPjogPGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTZWNzLUJhY2tncm91bmQuaHRtbCNpbmRleC1hZGRyZXNzZXNfMDAyYy1mb3JtYXQtb2YtMTkwIj5hZGRyZXNzZXMsIGZvcm1hdCBvZjwvYT46IDxhIGhyZWY9IlNlY3MtQmFja2dyb3VuZC5odG1sI1NlY3MtQmFja2dyb3VuZCI+U2VjcyBCYWNrZ3JvdW5kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkQWRkcmVzc2luZy5odG1sI2luZGV4LWFkZHJlc3NpbmctbW9kZXNfMDAyYy1EMTBWLTgxNSI+YWRkcmVzc2luZyBtb2RlcywgRDEwVjwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZEFkZHJlc3NpbmcuaHRtbCNEMTBWXzAwMmRBZGRyZXNzaW5nIj5EMTBWLUFkZHJlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRBZGRyZXNzaW5nLmh0bWwjaW5kZXgtYWRkcmVzc2luZy1tb2Rlc18wMDJjLUQzMFYtODQzIj5hZGRyZXNzaW5nIG1vZGVzLCBEMzBWPC9hPjogPGEgaHJlZj0iRDMwVl8wMDJkQWRkcmVzc2luZy5odG1sI0QzMFZfMDAyZEFkZHJlc3NpbmciPkQzMFYtQWRkcmVzc2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZEFkZHJlc3NpbmcuaHRtbCNpbmRleC1hZGRyZXNzaW5nLW1vZGVzXzAwMmMtSDhfMDAyZjMwMC04NzEiPmFkZHJlc3NpbmcgbW9kZXMsIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZEFkZHJlc3NpbmcuaHRtbCNIOF8wMDJmMzAwXzAwMmRBZGRyZXNzaW5nIj5IOC8zMDAtQWRkcmVzc2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZFN5bnRheC5odG1sI2luZGV4LWFkZHJlc3NpbmctbW9kZXNfMDAyYy1NNjgweDAtMTI2MyI+YWRkcmVzc2luZyBtb2RlcywgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkU3ludGF4Ij5NNjhLLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI2luZGV4LWFkZHJlc3NpbmctbW9kZXNfMDAyYy1NNjhIQzExLTEzMjIiPmFkZHJlc3NpbmcgbW9kZXMsIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNNNjhIQzExXzAwMmRTeW50YXgiPk02OEhDMTEtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hfMDAyZEFkZHJlc3NpbmcuaHRtbCNpbmRleC1hZGRyZXNzaW5nLW1vZGVzXzAwMmMtU0gtMTc1MSI+YWRkcmVzc2luZyBtb2RlcywgU0g8L2E+OiA8YSBocmVmPSJTSF8wMDJkQWRkcmVzc2luZy5odG1sI1NIXzAwMmRBZGRyZXNzaW5nIj5TSC1BZGRyZXNzaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0g2NF8wMDJkQWRkcmVzc2luZy5odG1sI2luZGV4LWFkZHJlc3NpbmctbW9kZXNfMDAyYy1TSDY0LTE3ODAiPmFkZHJlc3NpbmcgbW9kZXMsIFNINjQ8L2E+OiA8YSBocmVmPSJTSDY0XzAwMmRBZGRyZXNzaW5nLmh0bWwjU0g2NF8wMDJkQWRkcmVzc2luZyI+U0g2NC1BZGRyZXNzaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI2luZGV4LWFkZHJlc3NpbmctbW9kZXNfMDAyYy1YR0FURS0yMjQ0Ij5hZGRyZXNzaW5nIG1vZGVzLCBYR0FURTwvYT46IDxhIGhyZWY9IlhHQVRFXzAwMmRTeW50YXguaHRtbCNYR0FURV8wMDJkU3ludGF4Ij5YR0FURS1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMF8wMDJkQWRkcmVzc2luZy5odG1sI2luZGV4LWFkZHJlc3NpbmctbW9kZXNfMDAyYy1aODAwMC0yMDkyIj5hZGRyZXNzaW5nIG1vZGVzLCBaODAwMDwvYT46IDxhIGhyZWY9Ilo4MDAwXzAwMmRBZGRyZXNzaW5nLmh0bWwjWjgwMDBfMDAyZEFkZHJlc3NpbmciPlo4MDAwLUFkZHJlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3Bjb2Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiQURSLXJlZ18wMDJjXzAwM2NsYWJlbF8wMDNlXzAwN2QtcHNldWRvLW9wXzAwMmMtQVJNLTcwMCI+PGNvZGU+QURSIHJlZywmbHQ7bGFiZWwmZ3Q7PC9jb2RlPiBwc2V1ZG8gb3AsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjQVJNLU9wY29kZXMiPkFSTSBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wY29kZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkFEUkwtcmVnXzAwMmNfMDAzY2xhYmVsXzAwM2VfMDA3ZC1wc2V1ZG8tb3BfMDAyYy1BUk0tNzAxIj48Y29kZT5BRFJMIHJlZywmbHQ7bGFiZWwmZ3Q7PC9jb2RlPiBwc2V1ZG8gb3AsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjQVJNLU9wY29kZXMiPkFSTSBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMuaHRtbCNpbmRleC1BRFJQXzAwMmMtQUREXzAwMmMtTERSXzAwMmZTVFItZ3JvdXAtcmVsb2NhdGlvbnNfMDAyYy1BQXJjaDY0LTUzMyI+QURSUCwgQURELCBMRFIvU1RSIGdyb3VwIHJlbG9jYXRpb25zLCBBQXJjaDY0PC9hPjogPGEgaHJlZj0iQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMuaHRtbCNBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucyI+QUFyY2g2NC1SZWxvY2F0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9yZy5odG1sI2luZGV4LWFkdmFuY2luZy1sb2NhdGlvbi1jb3VudGVyLTQxOSI+YWR2YW5jaW5nIGxvY2F0aW9uIGNvdW50ZXI8L2E+OiA8YSBocmVmPSJPcmcuaHRtbCNPcmciPk9yZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFsaWduLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhbGlnbl8wMDdkLWRpcmVjdGl2ZS0yNzYiPjxjb2RlPmFsaWduPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJBbGlnbi5odG1sI0FsaWduIj5BbGlnbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhbGlnbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVNQQVJDLTE4MzQiPjxjb2RlPmFsaWduPC9jb2RlPiBkaXJlY3RpdmUsIFNQQVJDPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNTcGFyY18wMDJkRGlyZWN0aXZlcyI+U3BhcmMtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxpZ25fMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTg5MSI+PGNvZGU+YWxpZ248L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1bmRsZS1kaXJlY3RpdmVzLmh0bWwjaW5kZXgtYWxpZ25lZC1pbnN0cnVjdGlvbi1idW5kbGUtMjkzIj5hbGlnbmVkIGluc3RydWN0aW9uIGJ1bmRsZTwvYT46IDxhIGhyZWY9IkJ1bmRsZS1kaXJlY3RpdmVzLmh0bWwjQnVuZGxlLWRpcmVjdGl2ZXMiPkJ1bmRsZSBkaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmROZW9uXzAwMmRBbGlnbm1lbnQuaHRtbCNpbmRleC1hbGlnbm1lbnQtZm9yLU5FT04taW5zdHJ1Y3Rpb25zLTY0NSI+YWxpZ25tZW50IGZvciBORU9OIGluc3RydWN0aW9uczwvYT46IDxhIGhyZWY9IkFSTV8wMDJkTmVvbl8wMDJkQWxpZ25tZW50Lmh0bWwjQVJNXzAwMmROZW9uXzAwMmRBbGlnbm1lbnQiPkFSTS1OZW9uLUFsaWdubWVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Lmh0bWwjaW5kZXgtYWxpZ25tZW50LW9mLWJyYW5jaC10YXJnZXRzLTIyOTYiPmFsaWdubWVudCBvZiBicmFuY2ggdGFyZ2V0czwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Lmh0bWwjWHRlbnNhLUF1dG9tYXRpYy1BbGlnbm1lbnQiPlh0ZW5zYSBBdXRvbWF0aWMgQWxpZ25tZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLUF1dG9tYXRpYy1BbGlnbm1lbnQuaHRtbCNpbmRleC1hbGlnbm1lbnQtb2YtXzAwNDBjb2RlXzAwN2JMT09QXzAwN2QtaW5zdHJ1Y3Rpb25zLTIyOTUiPmFsaWdubWVudCBvZiA8Y29kZT5MT09QPC9jb2RlPiBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EtQXV0b21hdGljLUFsaWdubWVudC5odG1sI1h0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Ij5YdGVuc2EgQXV0b21hdGljIEFsaWdubWVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtQWxwaGEtZmxvYXRpbmctcG9pbnQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS01NzQiPkFscGhhIGZsb2F0aW5nIHBvaW50ICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9IkFscGhhLUZsb2F0aW5nLVBvaW50Lmh0bWwjQWxwaGEtRmxvYXRpbmctUG9pbnQiPkFscGhhIEZsb2F0aW5nIFBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxwaGFfMDAyZENoYXJzLmh0bWwjaW5kZXgtQWxwaGEtbGluZS1jb21tZW50LWNoYXJhY3Rlci01NjUiPkFscGhhIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJBbHBoYV8wMDJkQ2hhcnMuaHRtbCNBbHBoYV8wMDJkQ2hhcnMiPkFscGhhLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxwaGFfMDAyZENoYXJzLmh0bWwjaW5kZXgtQWxwaGEtbGluZS1zZXBhcmF0b3ItNTY4Ij5BbHBoYSBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9IkFscGhhXzAwMmRDaGFycy5odG1sI0FscGhhXzAwMmRDaGFycyI+QWxwaGEtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHBoYS1Ob3Rlcy5odG1sI2luZGV4LUFscGhhLW5vdGVzLTU0OSI+QWxwaGEgbm90ZXM8L2E+OiA8YSBocmVmPSJBbHBoYS1Ob3Rlcy5odG1sI0FscGhhLU5vdGVzIj5BbHBoYSBOb3RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1BbHBoYS1vcHRpb25zLTU1MSI+QWxwaGEgb3B0aW9uczwvYT46IDxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNBbHBoYS1PcHRpb25zIj5BbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxwaGFfMDAyZFJlZ3MuaHRtbCNpbmRleC1BbHBoYS1yZWdpc3RlcnMtNTY5Ij5BbHBoYSByZWdpc3RlcnM8L2E+OiA8YSBocmVmPSJBbHBoYV8wMDJkUmVncy5odG1sI0FscGhhXzAwMmRSZWdzIj5BbHBoYS1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxwaGFfMDAyZFJlbG9jcy5odG1sI2luZGV4LUFscGhhLXJlbG9jYXRpb25zLTU3MSI+QWxwaGEgcmVsb2NhdGlvbnM8L2E+OiA8YSBocmVmPSJBbHBoYV8wMDJkUmVsb2NzLmh0bWwjQWxwaGFfMDAyZFJlbG9jcyI+QWxwaGEtUmVsb2NzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxwaGFfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LUFscGhhLXN1cHBvcnQtNTQ4Ij5BbHBoYSBzdXBwb3J0PC9hPjogPGEgaHJlZj0iQWxwaGFfMDAyZERlcGVuZGVudC5odG1sI0FscGhhXzAwMmREZXBlbmRlbnQiPkFscGhhLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1BbHBoYS1TeW50YXgtNTYzIj5BbHBoYSBTeW50YXg8L2E+OiA8YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjQWxwaGEtT3B0aW9ucyI+QWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1BbHBoYV8wMDJkb25seS1kaXJlY3RpdmVzLTU3NSI+QWxwaGEtb25seSBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iQWxwaGEtRGlyZWN0aXZlcy5odG1sI0FscGhhLURpcmVjdGl2ZXMiPkFscGhhIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXb3JkLmh0bWwjaW5kZXgtYWx0ZXJlZC1kaWZmZXJlbmNlLXRhYmxlcy01MTAiPmFsdGVyZWQgZGlmZmVyZW5jZSB0YWJsZXM8L2E+OiA8YSBocmVmPSJXb3JkLmh0bWwjV29yZCI+V29yZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZE1vdG9fMDAyZFN5bnRheC5odG1sI2luZGV4LWFsdGVybmF0ZS1zeW50YXgtZm9yLXRoZS02ODB4MC0xMjY1Ij5hbHRlcm5hdGUgc3ludGF4IGZvciB0aGUgNjgweDA8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRNb3RvXzAwMmRTeW50YXguaHRtbCNNNjhLXzAwMmRNb3RvXzAwMmRTeW50YXgiPk02OEstTW90by1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtRmxvYXRpbmctUG9pbnQuaHRtbCNpbmRleC1BUkMtZmxvYXRpbmctcG9pbnQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS01OTQiPkFSQyBmbG9hdGluZyBwb2ludCAoPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPik8L2E+OiA8YSBocmVmPSJBUkMtRmxvYXRpbmctUG9pbnQuaHRtbCNBUkMtRmxvYXRpbmctUG9pbnQiPkFSQyBGbG9hdGluZyBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQ18wMDJkQ2hhcnMuaHRtbCNpbmRleC1BUkMtbGluZS1jb21tZW50LWNoYXJhY3Rlci01ODciPkFSQyBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iQVJDXzAwMmRDaGFycy5odG1sI0FSQ18wMDJkQ2hhcnMiPkFSQy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQ18wMDJkQ2hhcnMuaHRtbCNpbmRleC1BUkMtbGluZS1zZXBhcmF0b3ItNTkwIj5BUkMgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJBUkNfMDAyZENoYXJzLmh0bWwjQVJDXzAwMmRDaGFycyI+QVJDLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1BUkMtbWFjaGluZS1kaXJlY3RpdmVzLTU5NiI+QVJDIG1hY2hpbmUgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDLU9wY29kZXMuaHRtbCNpbmRleC1BUkMtb3Bjb2Rlcy02MDkiPkFSQyBvcGNvZGVzPC9hPjogPGEgaHJlZj0iQVJDLU9wY29kZXMuaHRtbCNBUkMtT3Bjb2RlcyI+QVJDIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtT3B0aW9ucy5odG1sI2luZGV4LUFSQy1vcHRpb25zLV8wMDI4bm9uZV8wMDI5LTU3NyI+QVJDIG9wdGlvbnMgKG5vbmUpPC9hPjogPGEgaHJlZj0iQVJDLU9wdGlvbnMuaHRtbCNBUkMtT3B0aW9ucyI+QVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkNfMDAyZFJlZ3MuaHRtbCNpbmRleC1BUkMtcmVnaXN0ZXItbmFtZXMtNTkxIj5BUkMgcmVnaXN0ZXIgbmFtZXM8L2E+OiA8YSBocmVmPSJBUkNfMDAyZFJlZ3MuaHRtbCNBUkNfMDAyZFJlZ3MiPkFSQy1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1BUkMtc3VwcG9ydC01NzYiPkFSQyBzdXBwb3J0PC9hPjogPGEgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNBUkNfMDAyZERlcGVuZGVudCI+QVJDLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhcmM1XzAwN2QtYXJjNV8wMDJjLUFSQy01ODAiPjxjb2RlPmFyYzU8L2NvZGU+IGFyYzUsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1PcHRpb25zLmh0bWwjQVJDLU9wdGlvbnMiPkFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFyYzZfMDA3ZC1hcmM2XzAwMmMtQVJDLTU4MSI+PGNvZGU+YXJjNjwvY29kZT4gYXJjNiwgQVJDPC9hPjogPGEgaHJlZj0iQVJDLU9wdGlvbnMuaHRtbCNBUkMtT3B0aW9ucyI+QVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYXJjN18wMDdkLWFyYzdfMDAyYy1BUkMtNTgyIj48Y29kZT5hcmM3PC9jb2RlPiBhcmM3LCBBUkM8L2E+OiA8YSBocmVmPSJBUkMtT3B0aW9ucy5odG1sI0FSQy1PcHRpb25zIj5BUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhcmM4XzAwN2QtYXJjOF8wMDJjLUFSQy01ODMiPjxjb2RlPmFyYzg8L2NvZGU+IGFyYzgsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1PcHRpb25zLmh0bWwjQVJDLU9wdGlvbnMiPkFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkQXJjaC5odG1sI2luZGV4LWFyY2gtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDYwIj5hcmNoIGRpcmVjdGl2ZSwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEFyY2guaHRtbCNpMzg2XzAwMmRBcmNoIj5pMzg2LUFyY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhcmNoXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTY4MHgwLTEyNzgiPjxjb2RlPmFyY2g8L2NvZGU+IGRpcmVjdGl2ZSwgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkRGlyZWN0aXZlcy5odG1sI002OEtfMDAyZERpcmVjdGl2ZXMiPk02OEstRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEFyY2guaHRtbCNpbmRleC1hcmNoLWRpcmVjdGl2ZV8wMDJjLXg4Nl8wMDJkNjQtMTA2MiI+YXJjaCBkaXJlY3RpdmUsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEFyY2guaHRtbCNpMzg2XzAwMmRBcmNoIj5pMzg2LUFyY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjaW5kZXgtYXJjaGl0ZWN0dXJlLW9wdGlvbnNfMDAyYy1pOTYwLTEwODYiPmFyY2hpdGVjdHVyZSBvcHRpb25zLCBpOTYwPC9hPjogPGEgaHJlZj0iT3B0aW9uc18wMDJkaTk2MC5odG1sI09wdGlvbnNfMDAyZGk5NjAiPk9wdGlvbnMtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZE9wdHMuaHRtbCNpbmRleC1hcmNoaXRlY3R1cmUtb3B0aW9uc18wMDJjLUlQMjAyMi0xMTM1Ij5hcmNoaXRlY3R1cmUgb3B0aW9ucywgSVAyMDIyPC9hPjogPGEgaHJlZj0iSVAyS18wMDJkT3B0cy5odG1sI0lQMktfMDAyZE9wdHMiPklQMkstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZE9wdHMuaHRtbCNpbmRleC1hcmNoaXRlY3R1cmUtb3B0aW9uc18wMDJjLUlQMkstMTEzOCI+YXJjaGl0ZWN0dXJlIG9wdGlvbnMsIElQMks8L2E+OiA8YSBocmVmPSJJUDJLXzAwMmRPcHRzLmh0bWwjSVAyS18wMDJkT3B0cyI+SVAySy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQ18wMDJkT3B0cy5odG1sI2luZGV4LWFyY2hpdGVjdHVyZS1vcHRpb25zXzAwMmMtTTE2Qy0xMTc4Ij5hcmNoaXRlY3R1cmUgb3B0aW9ucywgTTE2QzwvYT46IDxhIGhyZWY9Ik0zMkNfMDAyZE9wdHMuaHRtbCNNMzJDXzAwMmRPcHRzIj5NMzJDLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjaW5kZXgtYXJjaGl0ZWN0dXJlLW9wdGlvbnNfMDAyYy1NMzJDLTExNzUiPmFyY2hpdGVjdHVyZSBvcHRpb25zLCBNMzJDPC9hPjogPGEgaHJlZj0iTTMyQ18wMDJkT3B0cy5odG1sI00zMkNfMDAyZE9wdHMiPk0zMkMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNpbmRleC1hcmNoaXRlY3R1cmUtb3B0aW9uc18wMDJjLU0zMlItMTE5OCI+YXJjaGl0ZWN0dXJlIG9wdGlvbnMsIE0zMlI8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjTTMyUl8wMDJkT3B0cyI+TTMyUi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LWFyY2hpdGVjdHVyZS1vcHRpb25zXzAwMmMtTTMyUjItMTE5NSI+YXJjaGl0ZWN0dXJlIG9wdGlvbnMsIE0zMlIyPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNpbmRleC1hcmNoaXRlY3R1cmUtb3B0aW9uc18wMDJjLU0zMlJYLTExOTIiPmFyY2hpdGVjdHVyZSBvcHRpb25zLCBNMzJSWDwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtYXJjaGl0ZWN0dXJlLW9wdGlvbnNfMDAyYy1NNjgweDAtMTI1NSI+YXJjaGl0ZWN0dXJlIG9wdGlvbnMsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjaW5kZXgtQXJjaGl0ZWN0dXJlLXZhcmlhbnQtb3B0aW9uXzAwMmMtQ1JJUy03NjEiPkFyY2hpdGVjdHVyZSB2YXJpYW50IG9wdGlvbiwgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIj5DUklTLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDXzAwMmRPcHRzLmh0bWwjaW5kZXgtYXJjaGl0ZWN0dXJlc18wMDJjLVBvd2VyUEMtMTYyNCI+YXJjaGl0ZWN0dXJlcywgUG93ZXJQQzwvYT46IDxhIGhyZWY9IlBvd2VyUENfMDAyZE9wdHMuaHRtbCNQb3dlclBDXzAwMmRPcHRzIj5Qb3dlclBDLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTQ09SRV8wMDJkT3B0cy5odG1sI2luZGV4LWFyY2hpdGVjdHVyZXNfMDAyYy1TQ09SRS0xNzIyIj5hcmNoaXRlY3R1cmVzLCBTQ09SRTwvYT46IDxhIGhyZWY9IlNDT1JFXzAwMmRPcHRzLmh0bWwjU0NPUkVfMDAyZE9wdHMiPlNDT1JFLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI2luZGV4LWFyY2hpdGVjdHVyZXNfMDAyYy1TUEFSQy0xNzkyIj5hcmNoaXRlY3R1cmVzLCBTUEFSQzwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjU3BhcmNfMDAyZE9wdHMiPlNwYXJjLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNpbmRleC1hcmd1bWVudHMtZm9yLWFkZGl0aW9uLTI2MyI+YXJndW1lbnRzIGZvciBhZGRpdGlvbjwvYT46IDxhIGhyZWY9IkluZml4LU9wcy5odG1sI0luZml4LU9wcyI+SW5maXggT3BzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5maXgtT3BzLmh0bWwjaW5kZXgtYXJndW1lbnRzLWZvci1zdWJ0cmFjdGlvbi0yNjYiPmFyZ3VtZW50cyBmb3Igc3VidHJhY3Rpb248L2E+OiA8YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNJbmZpeC1PcHMiPkluZml4IE9wczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50cy5odG1sI2luZGV4LWFyZ3VtZW50cy1pbi1leHByZXNzaW9ucy0yNDkiPmFyZ3VtZW50cyBpbiBleHByZXNzaW9uczwvYT46IDxhIGhyZWY9IkFyZ3VtZW50cy5odG1sI0FyZ3VtZW50cyI+QXJndW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3BlcmF0b3JzLmh0bWwjaW5kZXgtYXJpdGhtZXRpYy1mdW5jdGlvbnMtMjU0Ij5hcml0aG1ldGljIGZ1bmN0aW9uczwvYT46IDxhIGhyZWY9Ik9wZXJhdG9ycy5odG1sI09wZXJhdG9ycyI+T3BlcmF0b3JzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXJndW1lbnRzLmh0bWwjaW5kZXgtYXJpdGhtZXRpYy1vcGVyYW5kcy0yNTEiPmFyaXRobWV0aWMgb3BlcmFuZHM8L2E+OiA8YSBocmVmPSJBcmd1bWVudHMuaHRtbCNBcmd1bWVudHMiPkFyZ3VtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTV8wMDJkUmVsb2NhdGlvbnMuaHRtbCNpbmRleC1BUk0tZGF0YS1yZWxvY2F0aW9ucy02NDkiPkFSTSBkYXRhIHJlbG9jYXRpb25zPC9hPjogPGEgaHJlZj0iQVJNXzAwMmRSZWxvY2F0aW9ucy5odG1sI0FSTV8wMDJkUmVsb2NhdGlvbnMiPkFSTS1SZWxvY2F0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1GbG9hdGluZy1Qb2ludC5odG1sI2luZGV4LUFSTS1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTY0NyI+QVJNIGZsb2F0aW5nIHBvaW50ICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9IkFSTS1GbG9hdGluZy1Qb2ludC5odG1sI0FSTS1GbG9hdGluZy1Qb2ludCI+QVJNIEZsb2F0aW5nIFBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI2luZGV4LUFSTS1pZGVudGlmaWVycy02NDIiPkFSTSBpZGVudGlmaWVyczwvYT46IDxhIGhyZWY9IkFSTV8wMDJkQ2hhcnMuaHRtbCNBUk1fMDAyZENoYXJzIj5BUk0tQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk1fMDAyZENoYXJzLmh0bWwjaW5kZXgtQVJNLWltbWVkaWF0ZS1jaGFyYWN0ZXItNjQwIj5BUk0gaW1tZWRpYXRlIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkFSTV8wMDJkQ2hhcnMuaHRtbCNBUk1fMDAyZENoYXJzIj5BUk0tQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk1fMDAyZENoYXJzLmh0bWwjaW5kZXgtQVJNLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItNjM1Ij5BUk0gbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkFSTV8wMDJkQ2hhcnMuaHRtbCNBUk1fMDAyZENoYXJzIj5BUk0tQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk1fMDAyZENoYXJzLmh0bWwjaW5kZXgtQVJNLWxpbmUtc2VwYXJhdG9yLTYzOCI+QVJNIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI0FSTV8wMDJkQ2hhcnMiPkFSTS1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtQVJNLW1hY2hpbmUtZGlyZWN0aXZlcy02NTIiPkFSTSBtYWNoaW5lIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJBUk0tRGlyZWN0aXZlcy5odG1sI0FSTS1EaXJlY3RpdmVzIj5BUk0gRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjaW5kZXgtQVJNLW9wY29kZXMtNjk2Ij5BUk0gb3Bjb2RlczwvYT46IDxhIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjQVJNLU9wY29kZXMiPkFSTSBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1BUk0tb3B0aW9ucy1fMDAyOG5vbmVfMDAyOS02MTMiPkFSTSBvcHRpb25zIChub25lKTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmRSZWdzLmh0bWwjaW5kZXgtQVJNLXJlZ2lzdGVyLW5hbWVzLTY0MyI+QVJNIHJlZ2lzdGVyIG5hbWVzPC9hPjogPGEgaHJlZj0iQVJNXzAwMmRSZWdzLmh0bWwjQVJNXzAwMmRSZWdzIj5BUk0tUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtQVJNLXN1cHBvcnQtNjExIj5BUk0gc3VwcG9ydDwvYT46IDxhIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjQVJNXzAwMmREZXBlbmRlbnQiPkFSTS1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBc2NpaS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYXNjaWlfMDA3ZC1kaXJlY3RpdmUtMjgxIj48Y29kZT5hc2NpaTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iQXNjaWkuaHRtbCNBc2NpaSI+QXNjaWk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBc2Npei5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYXNjaXpfMDA3ZC1kaXJlY3RpdmUtMjgzIj48Y29kZT5hc2NpejwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iQXNjaXouaHRtbCNBc2NpeiI+QXNjaXo8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFzZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xODkzIj48Y29kZT5hc2c8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNpbmRleC1hc3NlbWJsZXItYnVnc18wMDJjLXJlcG9ydGluZy0yMzQwIj5hc3NlbWJsZXIgYnVncywgcmVwb3J0aW5nPC9hPjogPGEgaHJlZj0iQnVnLVJlcG9ydGluZy5odG1sI0J1Zy1SZXBvcnRpbmciPkJ1ZyBSZXBvcnRpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNpbmRleC1hc3NlbWJsZXItY3Jhc2gtMjMzNSI+YXNzZW1ibGVyIGNyYXNoPC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmUzYnl0ZV8wMDJjLVJYLTE2NjQiPmFzc2VtYmxlciBkaXJlY3RpdmUgLjNieXRlLCBSWDwvYT46IDxhIGhyZWY9IlJYXzAwMmREaXJlY3RpdmVzLmh0bWwjUlhfMDAyZERpcmVjdGl2ZXMiPlJYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZWFyY2hfMDAyYy1DUklTLTc5NCI+YXNzZW1ibGVyIGRpcmVjdGl2ZSAuYXJjaCwgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj5DUklTLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZWR3b3JkXzAwMmMtQ1JJUy03ODYiPmFzc2VtYmxlciBkaXJlY3RpdmUgLmR3b3JkLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkUHNldWRvcy5odG1sI0NSSVNfMDAyZFBzZXVkb3MiPkNSSVMtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlZmFyXzAwMmMtTTY4SEMxMS0xMzM0Ij5hc3NlbWJsZXIgZGlyZWN0aXZlIC5mYXIsIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4SEMxMV8wMDJkRGlyZWN0aXZlcyI+TTY4SEMxMS1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlZmV0Y2hhbGlnbl8wMDJjLVJYLTE2NjYiPmFzc2VtYmxlciBkaXJlY3RpdmUgLmZldGNoYWxpZ24sIFJYPC9hPjogPGEgaHJlZj0iUlhfMDAyZERpcmVjdGl2ZXMuaHRtbCNSWF8wMDJkRGlyZWN0aXZlcyI+UlgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlaW50ZXJydXB0XzAwMmMtTTY4SEMxMS0xMzM2Ij5hc3NlbWJsZXIgZGlyZWN0aXZlIC5pbnRlcnJ1cHQsIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4SEMxMV8wMDJkRGlyZWN0aXZlcyI+TTY4SEMxMS1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVtb2RlXzAwMmMtTTY4SEMxMS0xMzMyIj5hc3NlbWJsZXIgZGlyZWN0aXZlIC5tb2RlLCBNNjhIQzExPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPk02OEhDMTEtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlcmVsYXhfMDAyYy1NNjhIQzExLTEzMzAiPmFzc2VtYmxlciBkaXJlY3RpdmUgLnJlbGF4LCBNNjhIQzExPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPk02OEhDMTEtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlc3ludGF4XzAwMmMtQ1JJUy03OTAiPmFzc2VtYmxlciBkaXJlY3RpdmUgLnN5bnRheCwgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj5DUklTLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZXhyZWZiXzAwMmMtTTY4SEMxMS0xMzM4Ij5hc3NlbWJsZXIgZGlyZWN0aXZlIC54cmVmYiwgTTY4SEMxMTwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhIQzExXzAwMmREaXJlY3RpdmVzIj5NNjhIQzExLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1CU1BFQ18wMDJjLU1NSVgtMTQ4NSI+YXNzZW1ibGVyIGRpcmVjdGl2ZSBCU1BFQywgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1CWVRFXzAwMmMtTU1JWC0xNDY1Ij5hc3NlbWJsZXIgZGlyZWN0aXZlIEJZVEUsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtRVNQRUNfMDAyYy1NTUlYLTE0ODkiPmFzc2VtYmxlciBkaXJlY3RpdmUgRVNQRUMsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtR1JFR18wMDJjLU1NSVgtMTQ2MSI+YXNzZW1ibGVyIGRpcmVjdGl2ZSBHUkVHLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLUlTXzAwMmMtTU1JWC0xNDU3Ij5hc3NlbWJsZXIgZGlyZWN0aXZlIElTLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLUxPQ18wMDJjLU1NSVgtMTQ0OSI+YXNzZW1ibGVyIGRpcmVjdGl2ZSBMT0MsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtTE9DQUxfMDAyYy1NTUlYLTE0NTMiPmFzc2VtYmxlciBkaXJlY3RpdmUgTE9DQUwsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtT0NUQV8wMDJjLU1NSVgtMTQ3NyI+YXNzZW1ibGVyIGRpcmVjdGl2ZSBPQ1RBLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLVBSRUZJWF8wMDJjLU1NSVgtMTQ4MSI+YXNzZW1ibGVyIGRpcmVjdGl2ZSBQUkVGSVgsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtVEVUUkFfMDAyYy1NTUlYLTE0NzMiPmFzc2VtYmxlciBkaXJlY3RpdmUgVEVUUkEsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtV1lERV8wMDJjLU1NSVgtMTQ2OSI+YXNzZW1ibGVyIGRpcmVjdGl2ZSBXWURFLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlc18wMDJjLUNSSVMtNzgyIj5hc3NlbWJsZXIgZGlyZWN0aXZlcywgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj5DUklTLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZXNfMDAyYy1NNjhIQzExLTEzMjYiPmFzc2VtYmxlciBkaXJlY3RpdmVzLCBNNjhIQzExPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPk02OEhDMTEtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlc18wMDJjLU02OEhDMTItMTMyNyI+YXNzZW1ibGVyIGRpcmVjdGl2ZXMsIE02OEhDMTI8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4SEMxMV8wMDJkRGlyZWN0aXZlcyI+TTY4SEMxMS1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LWFzc2VtYmxlci1kaXJlY3RpdmVzXzAwMmMtTU1JWC0xNDQ1Ij5hc3NlbWJsZXIgZGlyZWN0aXZlcywgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSTDc4XzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZXNfMDAyYy1STDc4LTE2MzgiPmFzc2VtYmxlciBkaXJlY3RpdmVzLCBSTDc4PC9hPjogPGEgaHJlZj0iUkw3OF8wMDJkRGlyZWN0aXZlcy5odG1sI1JMNzhfMDAyZERpcmVjdGl2ZXMiPlJMNzgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZXNfMDAyYy1SWC0xNjYyIj5hc3NlbWJsZXIgZGlyZWN0aXZlcywgUlg8L2E+OiA8YSBocmVmPSJSWF8wMDJkRGlyZWN0aXZlcy5odG1sI1JYXzAwMmREaXJlY3RpdmVzIj5SWC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlc18wMDJjLVhHQVRFLTIyNDUiPmFzc2VtYmxlciBkaXJlY3RpdmVzLCBYR0FURTwvYT46IDxhIGhyZWY9IlhHQVRFXzAwMmREaXJlY3RpdmVzLmh0bWwjWEdBVEVfMDAyZERpcmVjdGl2ZXMiPlhHQVRFLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBcy1TZWN0aW9ucy5odG1sI2luZGV4LWFzc2VtYmxlci1pbnRlcm5hbC1sb2dpYy1lcnJvci0yMDIiPmFzc2VtYmxlciBpbnRlcm5hbCBsb2dpYyBlcnJvcjwvYT46IDxhIGhyZWY9IkFzLVNlY3Rpb25zLmh0bWwjQXMtU2VjdGlvbnMiPkFzIFNlY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idi5odG1sI2luZGV4LWFzc2VtYmxlci12ZXJzaW9uLTk5Ij5hc3NlbWJsZXIgdmVyc2lvbjwvYT46IDxhIGhyZWY9InYuaHRtbCN2Ij52PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2Vjcy1CYWNrZ3JvdW5kLmh0bWwjaW5kZXgtYXNzZW1ibGVyXzAwMmMtYW5kLWxpbmtlci0xODgiPmFzc2VtYmxlciwgYW5kIGxpbmtlcjwvYT46IDxhIGhyZWY9IlNlY3MtQmFja2dyb3VuZC5odG1sI1NlY3MtQmFja2dyb3VuZCI+U2VjcyBCYWNrZ3JvdW5kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYS5odG1sI2luZGV4LWFzc2VtYmx5LWxpc3RpbmdzXzAwMmMtZW5hYmxpbmctNTYiPmFzc2VtYmx5IGxpc3RpbmdzLCBlbmFibGluZzwvYT46IDxhIGhyZWY9ImEuaHRtbCNhIj5hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXF1Lmh0bWwjaW5kZXgtYXNzaWduaW5nLXZhbHVlcy10by1zeW1ib2xzLTMyNyI+YXNzaWduaW5nIHZhbHVlcyB0byBzeW1ib2xzPC9hPjogPGEgaHJlZj0iRXF1Lmh0bWwjRXF1Ij5FcXU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTZXR0aW5nLVN5bWJvbHMuaHRtbCNpbmRleC1hc3NpZ25pbmctdmFsdWVzLXRvLXN5bWJvbHMtMjExIj5hc3NpZ25pbmcgdmFsdWVzIHRvIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJTZXR0aW5nLVN5bWJvbHMuaHRtbCNTZXR0aW5nLVN5bWJvbHMiPlNldHRpbmcgU3ltYm9sczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk4NjAuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmF0bXBfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pODYwLTEwNzQiPjxjb2RlPmF0bXA8L2NvZGU+IGRpcmVjdGl2ZSwgaTg2MDwvYT46IDxhIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk4NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpODYwIj5EaXJlY3RpdmVzLWk4NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgtYXR0XzAwNWZzeW50YXgtcHNldWRvLW9wXzAwMmMtaTM4Ni05MzYiPmF0dF9zeW50YXggcHNldWRvIG9wLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1hdHRfMDA1ZnN5bnRheC1wc2V1ZG8tb3BfMDAyYy14ODZfMDAyZDY0LTk0MiI+YXR0X3N5bnRheCBwc2V1ZG8gb3AsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpMzg2XzAwMmRWYXJpYXRpb25zIj5pMzg2LVZhcmlhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2wtQXR0cmlidXRlcy5odG1sI2luZGV4LWF0dHJpYnV0ZXNfMDAyYy1zeW1ib2wtMjI2Ij5hdHRyaWJ1dGVzLCBzeW1ib2w8L2E+OiA8YSBocmVmPSJTeW1ib2wtQXR0cmlidXRlcy5odG1sI1N5bWJvbC1BdHRyaWJ1dGVzIj5TeW1ib2wgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPRkYtU3ltYm9scy5odG1sI2luZGV4LWF1eGlsaWFyeS1hdHRyaWJ1dGVzXzAwMmMtQ09GRi1zeW1ib2xzLTIzOCI+YXV4aWxpYXJ5IGF0dHJpYnV0ZXMsIENPRkYgc3ltYm9sczwvYT46IDxhIGhyZWY9IkNPRkYtU3ltYm9scy5odG1sI0NPRkYtU3ltYm9scyI+Q09GRiBTeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGltLmh0bWwjaW5kZXgtYXV4aWxpYXJ5LXN5bWJvbC1pbmZvcm1hdGlvbl8wMDJjLUNPRkYtMzEzIj5hdXhpbGlhcnkgc3ltYm9sIGluZm9ybWF0aW9uLCBDT0ZGPC9hPjogPGEgaHJlZj0iRGltLmh0bWwjRGltIj5EaW08L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlJfMDAyZENoYXJzLmh0bWwjaW5kZXgtQVZSLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItNzEzIj5BVlIgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkFWUl8wMDJkQ2hhcnMuaHRtbCNBVlJfMDAyZENoYXJzIj5BVlItQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlJfMDAyZENoYXJzLmh0bWwjaW5kZXgtQVZSLWxpbmUtc2VwYXJhdG9yLTcxNiI+QVZSIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iQVZSXzAwMmRDaGFycy5odG1sI0FWUl8wMDJkQ2hhcnMiPkFWUi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUl8wMDJkTW9kaWZpZXJzLmh0bWwjaW5kZXgtQVZSLW1vZGlmaWVycy03MTkiPkFWUiBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJBVlJfMDAyZE1vZGlmaWVycy5odG1sI0FWUl8wMDJkTW9kaWZpZXJzIj5BVlItTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wY29kZXMuaHRtbCNpbmRleC1BVlItb3Bjb2RlLXN1bW1hcnktNzIyIj5BVlIgb3Bjb2RlIHN1bW1hcnk8L2E+OiA8YSBocmVmPSJBVlItT3Bjb2Rlcy5odG1sI0FWUi1PcGNvZGVzIj5BVlIgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjaW5kZXgtQVZSLW9wdGlvbnMtXzAwMjhub25lXzAwMjktNzA2Ij5BVlIgb3B0aW9ucyAobm9uZSk8L2E+OiA8YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj5BVlIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUl8wMDJkUmVncy5odG1sI2luZGV4LUFWUi1yZWdpc3Rlci1uYW1lcy03MTciPkFWUiByZWdpc3RlciBuYW1lczwvYT46IDxhIGhyZWY9IkFWUl8wMDJkUmVncy5odG1sI0FWUl8wMDJkUmVncyI+QVZSLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlJfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LUFWUi1zdXBwb3J0LTcwNSI+QVZSIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJBVlJfMDAyZERlcGVuZGVudC5odG1sI0FWUl8wMDJkRGVwZW5kZW50Ij5BVlItRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5ncy5odG1sI2luZGV4LWJhY2tzbGFzaC1fMDAyOF8wMDQwY29kZV8wMDdiXzAwNWNfMDA1Y18wMDdkXzAwMjktMTYxIj5iYWNrc2xhc2ggKDxjb2RlPlxcPC9jb2RlPik8L2E+OiA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNpbmRleC1iYWNrc3BhY2UtXzAwMjhfMDA0MGNvZGVfMDA3Yl8wMDVjYl8wMDdkXzAwMjktMTQ3Ij5iYWNrc3BhY2UgKDxjb2RlPlxiPC9jb2RlPik8L2E+OiA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJhbGlnbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYmFsaWduXzAwN2QtZGlyZWN0aXZlLTI4NyI+PGNvZGU+YmFsaWduPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJCYWxpZ24uaHRtbCNCYWxpZ24iPkJhbGlnbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJhbGlnbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYmFsaWdubF8wMDdkLWRpcmVjdGl2ZS0yODkiPjxjb2RlPmJhbGlnbmw8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkJhbGlnbi5odG1sI0JhbGlnbiI+QmFsaWduPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmFsaWduLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JiYWxpZ253XzAwN2QtZGlyZWN0aXZlLTI4OCI+PGNvZGU+YmFsaWdudzwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iQmFsaWduLmh0bWwjQmFsaWduIj5CYWxpZ248L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmJlc18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTUyIj48Y29kZT5iZXM8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjaW5kZXgtYmlnLWVuZGlhbi1vdXRwdXRfMDAyYy1NSVBTLTE3Ij5iaWcgZW5kaWFuIG91dHB1dCwgTUlQUzwvYT46IDxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNpbmRleC1iaWctZW5kaWFuLW91dHB1dF8wMDJjLVBKLTEzIj5iaWcgZW5kaWFuIG91dHB1dCwgUEo8L2E+OiA8YSBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI2luZGV4LWJpZ18wMDJkZW5kaWFuLW91dHB1dF8wMDJjLU1JUFMtMTM2NyI+YmlnLWVuZGlhbiBvdXRwdXQsIE1JUFM8L2E+OiA8YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNNSVBTLU9wdHMiPk1JUFMgT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNpbmRleC1iaWdfMDAyZGVuZGlhbi1vdXRwdXRfMDAyYy1USUM2WC0yMDAzIj5iaWctZW5kaWFuIG91dHB1dCwgVElDNlg8L2E+OiA8YSBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjVElDNlgtT3B0aW9ucyI+VElDNlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJpZ251bXMuaHRtbCNpbmRleC1iaWdudW1zLTE3OSI+YmlnbnVtczwvYT46IDxhIGhyZWY9IkJpZ251bXMuaHRtbCNCaWdudW1zIj5CaWdudW1zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRDb25zdGFudHMuaHRtbCNpbmRleC1iaW5hcnktY29uc3RhbnRzXzAwMmMtVElDNTRYLTE4NTciPmJpbmFyeSBjb25zdGFudHMsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQ29uc3RhbnRzLmh0bWwjVElDNTRYXzAwMmRDb25zdGFudHMiPlRJQzU0WC1Db25zdGFudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNiaW4uaHRtbCNpbmRleC1iaW5hcnktZmlsZXNfMDAyYy1pbmNsdWRpbmctMzcxIj5iaW5hcnkgZmlsZXMsIGluY2x1ZGluZzwvYT46IDxhIGhyZWY9IkluY2Jpbi5odG1sI0luY2JpbiI+SW5jYmluPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW50ZWdlcnMuaHRtbCNpbmRleC1iaW5hcnktaW50ZWdlcnMtMTcxIj5iaW5hcnkgaW50ZWdlcnM8L2E+OiA8YSBocmVmPSJJbnRlZ2Vycy5odG1sI0ludGVnZXJzIj5JbnRlZ2VyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NF8wMDJkQml0cy5odG1sI2luZGV4LWJpdC1uYW1lc18wMDJjLUlBXzAwMmQ2NC0xMTI5Ij5iaXQgbmFtZXMsIElBLTY0PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRCaXRzLmh0bWwjSUFfMDAyZDY0XzAwMmRCaXRzIj5JQS02NC1CaXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRuby5odG1sI2luZGV4LWJpdGZpZWxkc18wMDJjLW5vdC1zdXBwb3J0ZWQtb24tVkFYLTIxNjAiPmJpdGZpZWxkcywgbm90IHN1cHBvcnRlZCBvbiBWQVg8L2E+OiA8YSBocmVmPSJWQVhfMDAyZG5vLmh0bWwjVkFYXzAwMmRubyI+VkFYLW5vPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tRGlyZWN0aXZlcy5odG1sI2luZGV4LUJsYWNrZmluLWRpcmVjdGl2ZXMtNzM1Ij5CbGFja2ZpbiBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tRGlyZWN0aXZlcy5odG1sI0JsYWNrZmluLURpcmVjdGl2ZXMiPkJsYWNrZmluIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtQmxhY2tmaW4tb3B0aW9ucy1fMDAyOG5vbmVfMDAyOS03MjciPkJsYWNrZmluIG9wdGlvbnMgKG5vbmUpPC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbl8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtQmxhY2tmaW4tc3VwcG9ydC03MjYiPkJsYWNrZmluIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJCbGFja2Zpbl8wMDJkRGVwZW5kZW50Lmh0bWwjQmxhY2tmaW5fMDAyZERlcGVuZGVudCI+QmxhY2tmaW4tRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tU3ludGF4Lmh0bWwjaW5kZXgtQmxhY2tmaW4tc3ludGF4LTczMyI+QmxhY2tmaW4gc3ludGF4PC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tU3ludGF4Lmh0bWwjQmxhY2tmaW4tU3ludGF4Ij5CbGFja2ZpbiBTeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtYmxvY2stMjEwNyI+PGNvZGU+YmxvY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiPlo4MDAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRCTUkuaHRtbCNpbmRleC1CTUlfMDAyYy1pMzg2LTEwNDgiPkJNSSwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEJNSS5odG1sI2kzODZfMDAyZEJNSSI+aTM4Ni1CTUk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRCTUkuaHRtbCNpbmRleC1CTUlfMDAyYy14ODZfMDAyZDY0LTEwNDkiPkJNSSwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkQk1JLmh0bWwjaTM4Nl8wMDJkQk1JIj5pMzg2LUJNSTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZEJyYW5jaC5odG1sI2luZGV4LWJyYW5jaC1pbXByb3ZlbWVudF8wMDJjLU02ODB4MC0xMjg1Ij5icmFuY2ggaW1wcm92ZW1lbnQsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZEJyYW5jaC5odG1sI002OEtfMDAyZEJyYW5jaCI+TTY4Sy1CcmFuY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRCcmFuY2guaHRtbCNpbmRleC1icmFuY2gtaW1wcm92ZW1lbnRfMDAyYy1NNjhIQzExLTEzNTEiPmJyYW5jaCBpbXByb3ZlbWVudCwgTTY4SEMxMTwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZEJyYW5jaC5odG1sI002OEhDMTFfMDAyZEJyYW5jaCI+TTY4SEMxMS1CcmFuY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZGJyYW5jaC5odG1sI2luZGV4LWJyYW5jaC1pbXByb3ZlbWVudF8wMDJjLVZBWC0yMTQ3Ij5icmFuY2ggaW1wcm92ZW1lbnQsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkYnJhbmNoLmh0bWwjVkFYXzAwMmRicmFuY2giPlZBWC1icmFuY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24uaHRtbCNpbmRleC1icmFuY2gtaW5zdHJ1Y3Rpb25zXzAwMmMtcmVsYXhhdGlvbi0yMzAxIj5icmFuY2ggaW5zdHJ1Y3Rpb25zLCByZWxheGF0aW9uPC9hPjogPGEgaHJlZj0iWHRlbnNhLUJyYW5jaC1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUJyYW5jaC1SZWxheGF0aW9uIj5YdGVuc2EgQnJhbmNoIFJlbGF4YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjaW5kZXgtYnJhbmNoLXJlY29yZGluZ18wMDJjLWk5NjAtMTA4OSI+YnJhbmNoIHJlY29yZGluZywgaTk2MDwvYT46IDxhIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNPcHRpb25zXzAwMmRpOTYwIj5PcHRpb25zLWk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjaW5kZXgtYnJhbmNoLXN0YXRpc3RpY3MtdGFibGVfMDAyYy1pOTYwLTEwOTIiPmJyYW5jaCBzdGF0aXN0aWNzIHRhYmxlLCBpOTYwPC9hPjogPGEgaHJlZj0iT3B0aW9uc18wMDJkaTk2MC5odG1sI09wdGlvbnNfMDAyZGk5NjAiPk9wdGlvbnMtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Lmh0bWwjaW5kZXgtYnJhbmNoLXRhcmdldC1hbGlnbm1lbnQtMjI5OCI+YnJhbmNoIHRhcmdldCBhbGlnbm1lbnQ8L2E+OiA8YSBocmVmPSJYdGVuc2EtQXV0b21hdGljLUFsaWdubWVudC5odG1sI1h0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Ij5YdGVuc2EgQXV0b21hdGljIEFsaWdubWVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYnJlYWtfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkzNyI+PGNvZGU+YnJlYWs8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI2luZGV4LUJTRC1zeW50YXgtMTYwNyI+QlNEIHN5bnRheDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI1BEUF8wMDJkMTFfMDAyZFN5bnRheCI+UERQLTExLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk5NjAuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmJzc18wMDdkLWRpcmVjdGl2ZV8wMDJjLWk5NjAtMTA5OCI+PGNvZGU+YnNzPC9jb2RlPiBkaXJlY3RpdmUsIGk5NjA8L2E+OiA8YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpOTYwLmh0bWwjRGlyZWN0aXZlc18wMDJkaTk2MCI+RGlyZWN0aXZlcy1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jic3NfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTg5NSI+PGNvZGU+YnNzPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJic3MuaHRtbCNpbmRleC1ic3Mtc2VjdGlvbi0yMDYiPmJzcyBzZWN0aW9uPC9hPjogPGEgaHJlZj0iYnNzLmh0bWwjYnNzIj5ic3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMZC1TZWN0aW9ucy5odG1sI2luZGV4LWJzcy1zZWN0aW9uLTE5NiI+YnNzIHNlY3Rpb248L2E+OiA8YSBocmVmPSJMZC1TZWN0aW9ucy5odG1sI0xkLVNlY3Rpb25zIj5MZCBTZWN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWJ1Zy1jcml0ZXJpYS0yMzMzIj5idWcgY3JpdGVyaWE8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNpbmRleC1idWctcmVwb3J0cy0yMzM5Ij5idWcgcmVwb3J0czwvYT46IDxhIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIj5CdWcgUmVwb3J0aW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNpbmRleC1idWdzLWluLWFzc2VtYmxlci0yMzMxIj5idWdzIGluIGFzc2VtYmxlcjwvYT46IDxhIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiPlJlcG9ydGluZyBCdWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkU3ltYm9scy5odG1sI2luZGV4LUJ1aWx0XzAwMmRpbi1zeW1ib2xzXzAwMmMtQ1JJUy03NzQiPkJ1aWx0LWluIHN5bWJvbHMsIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRTeW1ib2xzLmh0bWwjQ1JJU18wMDJkU3ltYm9scyI+Q1JJUy1TeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI2luZGV4LWJ1aWx0aW4tbWF0aC1mdW5jdGlvbnNfMDAyYy1USUM1NFgtMTg2MCI+YnVpbHRpbiBtYXRoIGZ1bmN0aW9ucywgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjaW5kZXgtYnVpbHRpbi1zdWJzeW0tZnVuY3Rpb25zXzAwMmMtVElDNTRYLTE5NzEiPmJ1aWx0aW4gc3Vic3ltIGZ1bmN0aW9ucywgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1bmRsZS1kaXJlY3RpdmVzLmh0bWwjaW5kZXgtYnVuZGxlLTI5MSI+YnVuZGxlPC9hPjogPGEgaHJlZj0iQnVuZGxlLWRpcmVjdGl2ZXMuaHRtbCNCdW5kbGUtZGlyZWN0aXZlcyI+QnVuZGxlIGRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdW5kbGUtZGlyZWN0aXZlcy5odG1sI2luZGV4LWJ1bmRsZV8wMDJkbG9ja2VkLTI5NiI+YnVuZGxlLWxvY2tlZDwvYT46IDxhIGhyZWY9IkJ1bmRsZS1kaXJlY3RpdmVzLmh0bWwjQnVuZGxlLWRpcmVjdGl2ZXMiPkJ1bmRsZSBkaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVuZGxlLWRpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmJ1bmRsZV8wMDVmYWxpZ25fMDA1Zm1vZGVfMDA3ZC1kaXJlY3RpdmUtMjkwIj48Y29kZT5idW5kbGVfYWxpZ25fbW9kZTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iQnVuZGxlLWRpcmVjdGl2ZXMuaHRtbCNCdW5kbGUtZGlyZWN0aXZlcyI+QnVuZGxlIGRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdW5kbGUtZGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYnVuZGxlXzAwNWZsb2NrXzAwN2QtZGlyZWN0aXZlLTI5NCI+PGNvZGU+YnVuZGxlX2xvY2s8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkJ1bmRsZS1kaXJlY3RpdmVzLmh0bWwjQnVuZGxlLWRpcmVjdGl2ZXMiPkJ1bmRsZSBkaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVuZGxlLWRpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmJ1bmRsZV8wMDVmdW5sb2NrXzAwN2QtZGlyZWN0aXZlLTI5NSI+PGNvZGU+YnVuZGxlX3VubG9jazwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iQnVuZGxlLWRpcmVjdGl2ZXMuaHRtbCNCdW5kbGUtZGlyZWN0aXZlcyI+QnVuZGxlIGRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2luZGV4LWJ1cy1sb2NrLXByZWZpeGVzXzAwMmMtaTM4Ni0xMDA3Ij5idXMgbG9jayBwcmVmaXhlcywgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaTM4Nl8wMDJkUHJlZml4ZXMiPmkzODYtUHJlZml4ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtYnZhbC0yMTA0Ij48Y29kZT5idmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNaODAwMC1EaXJlY3RpdmVzIj5aODAwMCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnl0ZS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYnl0ZV8wMDdkLWRpcmVjdGl2ZS0yOTciPjxjb2RlPmJ5dGU8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkJ5dGUuaHRtbCNCeXRlIj5CeXRlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JieXRlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTYiPjxjb2RlPmJ5dGU8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRW52Lmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JDNTRYRFNQXzAwNWZESVJfMDA3ZC1lbnZpcm9ubWVudC12YXJpYWJsZV8wMDJjLVRJQzU0WC0xODU1Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkM1NFhEU1BfRElSPC9zcGFuPjwvc2FtcD4mcnNxdW87IGVudmlyb25tZW50IHZhcmlhYmxlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZEVudi5odG1sI1RJQzU0WF8wMDJkRW52Ij5USUM1NFgtRW52PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjXzAwNWZtb2RlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDEiPjxjb2RlPmNfbW9kZTwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaW5kZXgtY2FsbC1pbnN0cnVjdGlvbnNfMDAyYy1pMzg2LTk5MyI+Y2FsbCBpbnN0cnVjdGlvbnMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpMzg2XzAwMmRNbmVtb25pY3MiPmkzODYtTW5lbW9uaWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLUNhbGwtUmVsYXhhdGlvbi5odG1sI2luZGV4LWNhbGwtaW5zdHJ1Y3Rpb25zXzAwMmMtcmVsYXhhdGlvbi0yMzAzIj5jYWxsIGluc3RydWN0aW9ucywgcmVsYXhhdGlvbjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1DYWxsLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtQ2FsbC1SZWxheGF0aW9uIj5YdGVuc2EgQ2FsbCBSZWxheGF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaW5kZXgtY2FsbC1pbnN0cnVjdGlvbnNfMDAyYy14ODZfMDAyZDY0LTk5NSI+Y2FsbCBpbnN0cnVjdGlvbnMsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+aTM4Ni1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYWxsal8wMDJkaTk2MC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY2FsbGpfMDA3ZF8wMDJjLWk5NjAtcHNldWRvXzAwMmRvcGNvZGUtMTEwNCI+PGNvZGU+Y2FsbGo8L2NvZGU+LCBpOTYwIHBzZXVkby1vcGNvZGU8L2E+OiA8YSBocmVmPSJjYWxsal8wMDJkaTk2MC5odG1sI2NhbGxqXzAwMmRpOTYwIj5jYWxsai1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5ncy5odG1sI2luZGV4LWNhcnJpYWdlLXJldHVybi1fMDAyOF8wMDQwY29kZV8wMDdiXzAwNWNyXzAwN2RfMDAyOS0xNTMiPmNhcnJpYWdlIHJldHVybiAoPGNvZGU+XHI8L2NvZGU+KTwvYT46IDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwXzAwMmRDYXNlLmh0bWwjaW5kZXgtY2FzZS1zZW5zaXRpdml0eV8wMDJjLVo4MC0yMDc2Ij5jYXNlIHNlbnNpdGl2aXR5LCBaODA8L2E+OiA8YSBocmVmPSJaODBfMDAyZENhc2UuaHRtbCNaODBfMDAyZENhc2UiPlo4MC1DYXNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNmaV8wMDVmZW5kcHJvY18wMDdkLWRpcmVjdGl2ZS0zMDEiPjxjb2RlPmNmaV9lbmRwcm9jPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj5DRkkgZGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjZmlfMDA1ZnNlY3Rpb25zXzAwN2QtZGlyZWN0aXZlLTI5OSI+PGNvZGU+Y2ZpX3NlY3Rpb25zPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj5DRkkgZGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjZmlfMDA1ZnN0YXJ0cHJvY18wMDdkLWRpcmVjdGl2ZS0zMDAiPjxjb2RlPmNmaV9zdGFydHByb2M8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPkNGSSBkaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjaGFyXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTgiPjxjb2RlPmNoYXI8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1jaGFyYWN0ZXItY29uc3RhbnRfMDAyYy1aODAtMjA3MCI+Y2hhcmFjdGVyIGNvbnN0YW50LCBaODA8L2E+OiA8YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjWjgwXzAwMmRDaGFycyI+WjgwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ2hhcmFjdGVycy5odG1sI2luZGV4LWNoYXJhY3Rlci1jb25zdGFudHMtMTQwIj5jaGFyYWN0ZXIgY29uc3RhbnRzPC9hPjogPGEgaHJlZj0iQ2hhcmFjdGVycy5odG1sI0NoYXJhY3RlcnMiPkNoYXJhY3RlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtY2hhcmFjdGVyLWVzY2FwZS1jb2Rlcy0xNDUiPmNoYXJhY3RlciBlc2NhcGUgY29kZXM8L2E+OiA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1jaGFyYWN0ZXItZXNjYXBlc18wMDJjLVo4MC0yMDY4Ij5jaGFyYWN0ZXIgZXNjYXBlcywgWjgwPC9hPjogPGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPlo4MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNoYXJzLmh0bWwjaW5kZXgtY2hhcmFjdGVyXzAwMmMtc2luZ2xlLTE2NSI+Y2hhcmFjdGVyLCBzaW5nbGU8L2E+OiA8YSBocmVmPSJDaGFycy5odG1sI0NoYXJzIj5DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1JbnRyby5odG1sI2luZGV4LWNoYXJhY3RlcnMtdXNlZC1pbi1zeW1ib2xzLTEyOCI+Y2hhcmFjdGVycyB1c2VkIGluIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJTeW1ib2wtSW50cm8uaHRtbCNTeW1ib2wtSW50cm8iPlN5bWJvbCBJbnRybzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY2xpbmtfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkwMCI+PGNvZGU+Y2xpbms8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb2RlMTZfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwNTYiPjxjb2RlPmNvZGUxNjwvY29kZT4gZGlyZWN0aXZlLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkMTZiaXQuaHRtbCNpMzg2XzAwMmQxNmJpdCI+aTM4Ni0xNmJpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb2RlMTZnY2NfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwNTUiPjxjb2RlPmNvZGUxNmdjYzwvY29kZT4gZGlyZWN0aXZlLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkMTZiaXQuaHRtbCNpMzg2XzAwMmQxNmJpdCI+aTM4Ni0xNmJpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb2RlMzJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwNTciPjxjb2RlPmNvZGUzMjwvY29kZT4gZGlyZWN0aXZlLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkMTZiaXQuaHRtbCNpMzg2XzAwMmQxNmJpdCI+aTM4Ni0xNmJpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb2RlNjRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwNTgiPjxjb2RlPmNvZGU2NDwvY29kZT4gZGlyZWN0aXZlLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkMTZiaXQuaHRtbCNpMzg2XzAwMmQxNmJpdCI+aTM4Ni0xNmJpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb2RlNjRfMDA3ZC1kaXJlY3RpdmVfMDAyYy14ODZfMDAyZDY0LTEwNTkiPjxjb2RlPmNvZGU2NDwvY29kZT4gZGlyZWN0aXZlLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmQxNmJpdC5odG1sI2kzODZfMDAyZDE2Yml0Ij5pMzg2LTE2Yml0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGltLmh0bWwjaW5kZXgtQ09GRi1hdXhpbGlhcnktc3ltYm9sLWluZm9ybWF0aW9uLTMxMiI+Q09GRiBhdXhpbGlhcnkgc3ltYm9sIGluZm9ybWF0aW9uPC9hPjogPGEgaHJlZj0iRGltLmh0bWwjRGltIj5EaW08L2E+PC9saT4KKzxsaT48YSBocmVmPSJUYWcuaHRtbCNpbmRleC1DT0ZGLXN0cnVjdHVyZS1kZWJ1Z2dpbmctNDg2Ij5DT0ZGIHN0cnVjdHVyZSBkZWJ1Z2dpbmc8L2E+OiA8YSBocmVmPSJUYWcuaHRtbCNUYWciPlRhZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPRkYtU3ltYm9scy5odG1sI2luZGV4LUNPRkYtc3ltYm9sLWF0dHJpYnV0ZXMtMjM1Ij5DT0ZGIHN5bWJvbCBhdHRyaWJ1dGVzPC9hPjogPGEgaHJlZj0iQ09GRi1TeW1ib2xzLmh0bWwjQ09GRi1TeW1ib2xzIj5DT0ZGIFN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZXNjLmh0bWwjaW5kZXgtQ09GRi1zeW1ib2wtZGVzY3JpcHRvci0zMDkiPkNPRkYgc3ltYm9sIGRlc2NyaXB0b3I8L2E+OiA8YSBocmVmPSJEZXNjLmh0bWwjRGVzYyI+RGVzYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjbC5odG1sI2luZGV4LUNPRkYtc3ltYm9sLXN0b3JhZ2UtY2xhc3MtNDQ4Ij5DT0ZGIHN5bWJvbCBzdG9yYWdlIGNsYXNzPC9hPjogPGEgaHJlZj0iU2NsLmh0bWwjU2NsIj5TY2w8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUeXBlLmh0bWwjaW5kZXgtQ09GRi1zeW1ib2wtdHlwZS00OTIiPkNPRkYgc3ltYm9sIHR5cGU8L2E+OiA8YSBocmVmPSJUeXBlLmh0bWwjVHlwZSI+VHlwZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlZi5odG1sI2luZGV4LUNPRkYtc3ltYm9sc18wMDJjLWRlYnVnZ2luZy0zMDYiPkNPRkYgc3ltYm9scywgZGVidWdnaW5nPC9hPjogPGEgaHJlZj0iRGVmLmh0bWwjRGVmIj5EZWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYWwuaHRtbCNpbmRleC1DT0ZGLXZhbHVlLWF0dHJpYnV0ZS01MDAiPkNPRkYgdmFsdWUgYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iVmFsLmh0bWwjVmFsIj5WYWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rb25jZS5odG1sI2luZGV4LUNPTURBVC0zODciPkNPTURBVDwvYT46IDxhIGhyZWY9IkxpbmtvbmNlLmh0bWwjTGlua29uY2UiPkxpbmtvbmNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tbS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY29tbV8wMDdkLWRpcmVjdGl2ZS0zMDIiPjxjb2RlPmNvbW08L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkNvbW0uaHRtbCNDb21tIj5Db21tPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tbWFuZC1MaW5lLmh0bWwjaW5kZXgtY29tbWFuZC1saW5lLWNvbnZlbnRpb25zLTI1Ij5jb21tYW5kIGxpbmUgY29udmVudGlvbnM8L2E+OiA8YSBocmVmPSJDb21tYW5kLUxpbmUuaHRtbCNDb21tYW5kLUxpbmUiPkNvbW1hbmQgTGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LWNvbW1hbmQtbGluZS1vcHRpb25zXzAwMmMtVjg1MC0yMTY5Ij5jb21tYW5kIGxpbmUgb3B0aW9ucywgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjaW5kZXgtY29tbWFuZF8wMDJkbGluZS1vcHRpb25zLWlnbm9yZWRfMDAyYy1WQVgtMjExNCI+Y29tbWFuZC1saW5lIG9wdGlvbnMgaWdub3JlZCwgVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhTdG9ybXkxNl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVhTdG9ybXkxNi0yMjU4Ij5jb21tZW50IGNoYXJhY3RlciwgWFN0b3JteTE2PC9hPjogPGEgaHJlZj0iWFN0b3JteTE2XzAwMmRDaGFycy5odG1sI1hTdG9ybXkxNl8wMDJkQ2hhcnMiPlhTdG9ybXkxNi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjaW5kZXgtY29tbWVudHMtMTIzIj5jb21tZW50czwvYT46IDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkQ2hhcnMuaHRtbCNpbmRleC1jb21tZW50c18wMDJjLU02ODB4MC0xMjkwIj5jb21tZW50cywgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkQ2hhcnMuaHRtbCNNNjhLXzAwMmRDaGFycyI+TTY4Sy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNpbmRleC1jb21tZW50c18wMDJjLXJlbW92ZWQtYnktcHJlcHJvY2Vzc29yLTExNiI+Y29tbWVudHMsIHJlbW92ZWQgYnkgcHJlcHJvY2Vzc29yPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY29tbW9uXzAwN2QtZGlyZWN0aXZlXzAwMmMtU1BBUkMtMTgzNSI+PGNvZGU+Y29tbW9uPC9jb2RlPiBkaXJlY3RpdmUsIFNQQVJDPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNTcGFyY18wMDJkRGlyZWN0aXZlcyI+U3BhcmMtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmtvbmNlLmh0bWwjaW5kZXgtY29tbW9uLXNlY3Rpb25zLTM4OSI+Y29tbW9uIHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iTGlua29uY2UuaHRtbCNMaW5rb25jZSI+TGlua29uY2U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJic3MuaHRtbCNpbmRleC1jb21tb24tdmFyaWFibGUtc3RvcmFnZS0yMDciPmNvbW1vbiB2YXJpYWJsZSBzdG9yYWdlPC9hPjogPGEgaHJlZj0iYnNzLmh0bWwjYnNzIj5ic3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wYXJlXzAwMmRhbmRfMDAyZGJyYW5jaF8wMDJkaTk2MC5odG1sI2luZGV4LWNvbXBhcmUtYW5kLWp1bXAtZXhwYW5zaW9uc18wMDJjLWk5NjAtMTEwOCI+Y29tcGFyZSBhbmQganVtcCBleHBhbnNpb25zLCBpOTYwPC9hPjogPGEgaHJlZj0iQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAuaHRtbCNDb21wYXJlXzAwMmRhbmRfMDAyZGJyYW5jaF8wMDJkaTk2MCI+Q29tcGFyZS1hbmQtYnJhbmNoLWk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wYXJlXzAwMmRhbmRfMDAyZGJyYW5jaF8wMDJkaTk2MC5odG1sI2luZGV4LWNvbXBhcmVfMDAyZmJyYW5jaC1pbnN0cnVjdGlvbnNfMDAyYy1pOTYwLTExMDciPmNvbXBhcmUvYnJhbmNoIGluc3RydWN0aW9ucywgaTk2MDwvYT46IDxhIGhyZWY9IkNvbXBhcmVfMDAyZGFuZF8wMDJkYnJhbmNoXzAwMmRpOTYwLmh0bWwjQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAiPkNvbXBhcmUtYW5kLWJyYW5jaC1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5maXgtT3BzLmh0bWwjaW5kZXgtY29tcGFyaXNvbi1leHByZXNzaW9ucy0yNjciPmNvbXBhcmlzb24gZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNJbmZpeC1PcHMiPkluZml4IE9wczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklmLmh0bWwjaW5kZXgtY29uZGl0aW9uYWwtYXNzZW1ibHktMzUzIj5jb25kaXRpb25hbCBhc3NlbWJseTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ2hhcnMuaHRtbCNpbmRleC1jb25zdGFudF8wMDJjLXNpbmdsZS1jaGFyYWN0ZXItMTY2Ij5jb25zdGFudCwgc2luZ2xlIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkNoYXJzLmh0bWwjQ2hhcnMiPkNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uc3RhbnRzLmh0bWwjaW5kZXgtY29uc3RhbnRzLTEzOSI+Y29uc3RhbnRzPC9hPjogPGEgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIj5Db25zdGFudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCaWdudW1zLmh0bWwjaW5kZXgtY29uc3RhbnRzXzAwMmMtYmlnbnVtLTE4MCI+Y29uc3RhbnRzLCBiaWdudW08L2E+OiA8YSBocmVmPSJCaWdudW1zLmh0bWwjQmlnbnVtcyI+QmlnbnVtczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNoYXJhY3RlcnMuaHRtbCNpbmRleC1jb25zdGFudHNfMDAyYy1jaGFyYWN0ZXItMTQxIj5jb25zdGFudHMsIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkNoYXJhY3RlcnMuaHRtbCNDaGFyYWN0ZXJzIj5DaGFyYWN0ZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI2luZGV4LWNvbnN0YW50c18wMDJjLWNvbnZlcnRlZC1ieS1wcmVwcm9jZXNzb3ItMTE3Ij5jb25zdGFudHMsIGNvbnZlcnRlZCBieSBwcmVwcm9jZXNzb3I8L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZsb251bXMuaHRtbCNpbmRleC1jb25zdGFudHNfMDAyYy1mbG9hdGluZy1wb2ludC0xODMiPmNvbnN0YW50cywgZmxvYXRpbmcgcG9pbnQ8L2E+OiA8YSBocmVmPSJGbG9udW1zLmh0bWwjRmxvbnVtcyI+RmxvbnVtczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkludGVnZXJzLmh0bWwjaW5kZXgtY29uc3RhbnRzXzAwMmMtaW50ZWdlci0xNzAiPmNvbnN0YW50cywgaW50ZWdlcjwvYT46IDxhIGhyZWY9IkludGVnZXJzLmh0bWwjSW50ZWdlcnMiPkludGVnZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTnVtYmVycy5odG1sI2luZGV4LWNvbnN0YW50c18wMDJjLW51bWJlci0xNjciPmNvbnN0YW50cywgbnVtYmVyPC9hPjogPGEgaHJlZj0iTnVtYmVycy5odG1sI051bWJlcnMiPk51bWJlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkQ29uc3RhbnRzLmh0bWwjaW5kZXgtY29uc3RhbnRzXzAwMmMtU3BhcmMtMTgyNSI+Y29uc3RhbnRzLCBTcGFyYzwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRDb25zdGFudHMuaHRtbCNTcGFyY18wMDJkQ29uc3RhbnRzIj5TcGFyYy1Db25zdGFudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtY29uc3RhbnRzXzAwMmMtc3RyaW5nLTE0MyI+Y29uc3RhbnRzLCBzdHJpbmc8L2E+OiA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQ29uc3RhbnRzLmh0bWwjaW5kZXgtY29uc3RhbnRzXzAwMmMtVElDNTRYLTE4NTYiPmNvbnN0YW50cywgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRDb25zdGFudHMuaHRtbCNUSUM1NFhfMDAyZENvbnN0YW50cyI+VElDNTRYLUNvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2luZGV4LWNvbnZlcnNpb24taW5zdHJ1Y3Rpb25zXzAwMmMtaTM4Ni05ODgiPmNvbnZlcnNpb24gaW5zdHJ1Y3Rpb25zLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaTM4Nl8wMDJkTW5lbW9uaWNzIj5pMzg2LU1uZW1vbmljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2luZGV4LWNvbnZlcnNpb24taW5zdHJ1Y3Rpb25zXzAwMmMteDg2XzAwMmQ2NC05OTAiPmNvbnZlcnNpb24gaW5zdHJ1Y3Rpb25zLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpMzg2XzAwMmRNbmVtb25pY3MiPmkzODYtTW5lbW9uaWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkUHJlZml4ZXMuaHRtbCNpbmRleC1jb3Byb2Nlc3Nvci13YWl0XzAwMmMtaTM4Ni0xMDA5Ij5jb3Byb2Nlc3NvciB3YWl0LCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkUHJlZml4ZXMuaHRtbCNpMzg2XzAwMmRQcmVmaXhlcyI+aTM4Ni1QcmVmaXhlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY29weV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTAyIj48Y29kZT5jb3B5PC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjcHVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NNjgweDAtMTI3OSI+PGNvZGU+Y3B1PC9jb2RlPiBkaXJlY3RpdmUsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhLXzAwMmREaXJlY3RpdmVzIj5NNjhLLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUjE2XzAwMmRDaGFycy5odG1sI2luZGV4LUNSMTYtbGluZS1jb21tZW50LWNoYXJhY3Rlci03NDAiPkNSMTYgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkNSMTZfMDAyZENoYXJzLmh0bWwjQ1IxNl8wMDJkQ2hhcnMiPkNSMTYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUjE2XzAwMmRDaGFycy5odG1sI2luZGV4LUNSMTYtbGluZS1zZXBhcmF0b3ItNzQzIj5DUjE2IGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iQ1IxNl8wMDJkQ2hhcnMuaHRtbCNDUjE2XzAwMmRDaGFycyI+Q1IxNi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSMTYtT3BlcmFuZC1RdWFsaWZpZXJzLmh0bWwjaW5kZXgtQ1IxNi1PcGVyYW5kLVF1YWxpZmllcnMtNzM4Ij5DUjE2IE9wZXJhbmQgUXVhbGlmaWVyczwvYT46IDxhIGhyZWY9IkNSMTYtT3BlcmFuZC1RdWFsaWZpZXJzLmh0bWwjQ1IxNi1PcGVyYW5kLVF1YWxpZmllcnMiPkNSMTYgT3BlcmFuZCBRdWFsaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1IxNl8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtQ1IxNi1zdXBwb3J0LTczNyI+Q1IxNiBzdXBwb3J0PC9hPjogPGEgaHJlZj0iQ1IxNl8wMDJkRGVwZW5kZW50Lmh0bWwjQ1IxNl8wMDJkRGVwZW5kZW50Ij5DUjE2LURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWNyYXNoLW9mLWFzc2VtYmxlci0yMzM2Ij5jcmFzaCBvZiBhc3NlbWJsZXI8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkZW11bGF0aW9uXzAwM2RjcmlzYW91dF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzUwIj5DUklTIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZW11bGF0aW9uPWNyaXNhb3V0PC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbjwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIj5DUklTLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjaW5kZXgtQ1JJUy1fMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZGVtdWxhdGlvbl8wMDNkY3Jpc2VsZl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzQ5Ij5DUklTIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZW11bGF0aW9uPWNyaXNlbGY8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkbWFyY2hfMDAzZF8wMDQwdmFyXzAwN2JhcmNoaXRlY3R1cmVfMDA3ZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzYwIj5DUklTIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbWFyY2g9PC9zcGFuPjx2YXI+YXJjaGl0ZWN0dXJlPC92YXI+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkbXVsXzAwMmRidWdfMDAyZGFib3J0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbi03NjgiPkNSSVMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1tdWwtYnVnLWFib3J0PC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbjwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIj5DUklTLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjaW5kZXgtQ1JJUy1fMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZG5vXzAwMmRtdWxfMDAyZGJ1Z18wMDJkYWJvcnRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uLTc2NyI+Q1JJUyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLW11bC1idWctYWJvcnQ8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkbm9fMDAyZHVuZGVyc2NvcmVfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uLTc1NCI+Q1JJUyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkcGljXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbi03NTYiPkNSSVMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1waWM8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkdW5kZXJzY29yZV8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzUzIj5DUklTIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdW5kZXJzY29yZTwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb248L2E+OiA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI2luZGV4LUNSSVMtXzAwNDBvcHRpb25fMDA3Yl8wMDJkTl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzY0Ij5DUklTIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1OPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbjwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIj5DUklTLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjaW5kZXgtQ1JJUy1hcmNoaXRlY3R1cmUtdmFyaWFudC1vcHRpb24tNzYyIj5DUklTIGFyY2hpdGVjdHVyZSB2YXJpYW50IG9wdGlvbjwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIj5DUklTLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtQ1JJUy1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlYXJjaC03OTYiPkNSSVMgYXNzZW1ibGVyIGRpcmVjdGl2ZSAuYXJjaDwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj5DUklTLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtQ1JJUy1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlZHdvcmQtNzg4Ij5DUklTIGFzc2VtYmxlciBkaXJlY3RpdmUgLmR3b3JkPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkUHNldWRvcy5odG1sI0NSSVNfMDAyZFBzZXVkb3MiPkNSSVMtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1DUklTLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVzeW50YXgtNzkyIj5DUklTIGFzc2VtYmxlciBkaXJlY3RpdmUgLnN5bnRheDwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj5DUklTLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtQ1JJUy1hc3NlbWJsZXItZGlyZWN0aXZlcy03ODQiPkNSSVMgYXNzZW1ibGVyIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjQ1JJU18wMDJkUHNldWRvcyI+Q1JJUy1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkU3ltYm9scy5odG1sI2luZGV4LUNSSVMtYnVpbHRfMDAyZGluLXN5bWJvbHMtNzczIj5DUklTIGJ1aWx0LWluIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRTeW1ib2xzLmh0bWwjQ1JJU18wMDJkU3ltYm9scyI+Q1JJUy1TeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkRXhwYW5kLmh0bWwjaW5kZXgtQ1JJUy1pbnN0cnVjdGlvbi1leHBhbnNpb24tNzcwIj5DUklTIGluc3RydWN0aW9uIGV4cGFuc2lvbjwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZEV4cGFuZC5odG1sI0NSSVNfMDAyZEV4cGFuZCI+Q1JJUy1FeHBhbmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRDaGFycy5odG1sI2luZGV4LUNSSVMtbGluZS1jb21tZW50LWNoYXJhY3RlcnMtNzc2Ij5DUklTIGxpbmUgY29tbWVudCBjaGFyYWN0ZXJzPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkQ2hhcnMuaHRtbCNDUklTXzAwMmRDaGFycyI+Q1JJUy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNpbmRleC1DUklTLW9wdGlvbnMtNzQ2Ij5DUklTIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI2luZGV4LUNSSVMtcG9zaXRpb25fMDAyZGluZGVwZW5kZW50LWNvZGUtNzU4Ij5DUklTIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGU8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkUHNldWRvcy5odG1sI2luZGV4LUNSSVMtcHNldWRvXzAwMmRvcC1fMDAyZWFyY2gtNzk3Ij5DUklTIHBzZXVkby1vcCAuYXJjaDwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj5DUklTLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtQ1JJUy1wc2V1ZG9fMDAyZG9wLV8wMDJlZHdvcmQtNzg5Ij5DUklTIHBzZXVkby1vcCAuZHdvcmQ8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjQ1JJU18wMDJkUHNldWRvcyI+Q1JJUy1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkUHNldWRvcy5odG1sI2luZGV4LUNSSVMtcHNldWRvXzAwMmRvcC1fMDAyZXN5bnRheC03OTMiPkNSSVMgcHNldWRvLW9wIC5zeW50YXg8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjQ1JJU18wMDJkUHNldWRvcyI+Q1JJUy1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkUHNldWRvcy5odG1sI2luZGV4LUNSSVMtcHNldWRvXzAwMmRvcHMtNzg1Ij5DUklTIHBzZXVkby1vcHM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjQ1JJU18wMDJkUHNldWRvcyI+Q1JJUy1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkUmVncy5odG1sI2luZGV4LUNSSVMtcmVnaXN0ZXItbmFtZXMtNzgxIj5DUklTIHJlZ2lzdGVyIG5hbWVzPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkUmVncy5odG1sI0NSSVNfMDAyZFJlZ3MiPkNSSVMtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LUNSSVMtc3VwcG9ydC03NDQiPkNSSVMgc3VwcG9ydDwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI0NSSVNfMDAyZERlcGVuZGVudCI+Q1JJUy1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQaWMuaHRtbCNpbmRleC1DUklTLXN5bWJvbHMtaW4tcG9zaXRpb25fMDAyZGluZGVwZW5kZW50LWNvZGUtNzc4Ij5DUklTIHN5bWJvbHMgaW4gcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZTwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBpYy5odG1sI0NSSVNfMDAyZFBpYyI+Q1JJUy1QaWM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjdGJwXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIyMDMiPjxjb2RlPmN0YnA8L2NvZGU+IHJlZ2lzdGVyLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI1Y4NTBfMDAyZFJlZ3MiPlY4NTAtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY3RvZmZfMDA3ZC1wc2V1ZG9fMDAyZG9wXzAwMmMtVjg1MC0yMjI0Ij48Y29kZT5jdG9mZjwvY29kZT4gcHNldWRvLW9wLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MC1PcGNvZGVzLmh0bWwjVjg1MC1PcGNvZGVzIj5WODUwIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjdHBjXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTkiPjxjb2RlPmN0cGM8L2NvZGU+IHJlZ2lzdGVyLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI1Y4NTBfMDAyZFJlZ3MiPlY4NTAtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmN0cHN3XzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIyMDAiPjxjb2RlPmN0cHN3PC9jb2RlPiByZWdpc3RlciwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNWODUwXzAwMmRSZWdzIj5WODUwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEb3QuaHRtbCNpbmRleC1jdXJyZW50LWFkZHJlc3MtMjIzIj5jdXJyZW50IGFkZHJlc3M8L2E+OiA8YSBocmVmPSJEb3QuaHRtbCNEb3QiPkRvdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9yZy5odG1sI2luZGV4LWN1cnJlbnQtYWRkcmVzc18wMDJjLWFkdmFuY2luZy00MjAiPmN1cnJlbnQgYWRkcmVzcywgYWR2YW5jaW5nPC9hPjogPGEgaHJlZj0iT3JnLmh0bWwjT3JnIj5Pcmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRXb3JkLmh0bWwjaW5kZXgtRDEwVi1fMDA0MF8wMDQwd29yZC1tb2RpZmllci04MTciPkQxMFYgQHdvcmQgbW9kaWZpZXI8L2E+OiA8YSBocmVmPSJEMTBWXzAwMmRXb3JkLmh0bWwjRDEwVl8wMDJkV29yZCI+RDEwVi1Xb3JkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkQWRkcmVzc2luZy5odG1sI2luZGV4LUQxMFYtYWRkcmVzc2luZy1tb2Rlcy04MTYiPkQxMFYgYWRkcmVzc2luZyBtb2RlczwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZEFkZHJlc3NpbmcuaHRtbCNEMTBWXzAwMmRBZGRyZXNzaW5nIj5EMTBWLUFkZHJlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRGbG9hdC5odG1sI2luZGV4LUQxMFYtZmxvYXRpbmctcG9pbnQtODIwIj5EMTBWIGZsb2F0aW5nIHBvaW50PC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkRmxvYXQuaHRtbCNEMTBWXzAwMmRGbG9hdCI+RDEwVi1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZENoYXJzLmh0bWwjaW5kZXgtRDEwVi1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTgwOCI+RDEwViBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyI+RDEwVi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZE9wY29kZXMuaHRtbCNpbmRleC1EMTBWLW9wY29kZS1zdW1tYXJ5LTgyMSI+RDEwViBvcGNvZGUgc3VtbWFyeTwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZE9wY29kZXMuaHRtbCNEMTBWXzAwMmRPcGNvZGVzIj5EMTBWLU9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LUQxMFYtb3B0aW1pemF0aW9uLTUiPkQxMFYgb3B0aW1pemF0aW9uPC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRPcHRzLmh0bWwjaW5kZXgtRDEwVi1vcHRpb25zLTgwMCI+RDEwViBvcHRpb25zPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkT3B0cy5odG1sI0QxMFZfMDAyZE9wdHMiPkQxMFYtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZFJlZ3MuaHRtbCNpbmRleC1EMTBWLXJlZ2lzdGVycy04MTMiPkQxMFYgcmVnaXN0ZXJzPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkUmVncy5odG1sI0QxMFZfMDAyZFJlZ3MiPkQxMFYtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZFNpemUuaHRtbCNpbmRleC1EMTBWLXNpemUtbW9kaWZpZXJzLTgwMyI+RDEwViBzaXplIG1vZGlmaWVyczwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZFNpemUuaHRtbCNEMTBWXzAwMmRTaXplIj5EMTBWLVNpemU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRDaGFycy5odG1sI2luZGV4LUQxMFYtc3ViXzAwMmRpbnN0cnVjdGlvbi1vcmRlcmluZy04MTAiPkQxMFYgc3ViLWluc3RydWN0aW9uIG9yZGVyaW5nPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyI+RDEwVi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZFN1YnMuaHRtbCNpbmRleC1EMTBWLXN1Yl8wMDJkaW5zdHJ1Y3Rpb25zLTgwNSI+RDEwViBzdWItaW5zdHJ1Y3Rpb25zPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkU3Vicy5odG1sI0QxMFZfMDAyZFN1YnMiPkQxMFYtU3ViczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LUQxMFYtc3VwcG9ydC03OTgiPkQxMFYgc3VwcG9ydDwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCI+RDEwVi1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRTeW50YXguaHRtbCNpbmRleC1EMTBWLXN5bnRheC04MDEiPkQxMFYgc3ludGF4PC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkU3ludGF4Lmh0bWwjRDEwVl8wMDJkU3ludGF4Ij5EMTBWLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZEFkZHJlc3NpbmcuaHRtbCNpbmRleC1EMzBWLWFkZHJlc3NpbmctbW9kZXMtODQ0Ij5EMzBWIGFkZHJlc3NpbmcgbW9kZXM8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRBZGRyZXNzaW5nLmh0bWwjRDMwVl8wMDJkQWRkcmVzc2luZyI+RDMwVi1BZGRyZXNzaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkRmxvYXQuaHRtbCNpbmRleC1EMzBWLWZsb2F0aW5nLXBvaW50LTg0NiI+RDMwViBmbG9hdGluZyBwb2ludDwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZEZsb2F0Lmh0bWwjRDMwVl8wMDJkRmxvYXQiPkQzMFYtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRHdWFyZGVkLmh0bWwjaW5kZXgtRDMwVi1HdWFyZGVkLUV4ZWN1dGlvbi04NDAiPkQzMFYgR3VhcmRlZCBFeGVjdXRpb248L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRHdWFyZGVkLmh0bWwjRDMwVl8wMDJkR3VhcmRlZCI+RDMwVi1HdWFyZGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1EMzBWLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItODM1Ij5EMzBWIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRDaGFycy5odG1sI0QzMFZfMDAyZENoYXJzIj5EMzBWLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNpbmRleC1EMzBWLW5vcHMtOSI+RDMwViBub3BzPC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LUQzMFYtbm9wcy1hZnRlci0zMl8wMDJkYml0LW11bHRpcGx5LTEwIj5EMzBWIG5vcHMgYWZ0ZXIgMzItYml0IG11bHRpcGx5PC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRPcGNvZGVzLmh0bWwjaW5kZXgtRDMwVi1vcGNvZGUtc3VtbWFyeS04NDciPkQzMFYgb3Bjb2RlIHN1bW1hcnk8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRPcGNvZGVzLmh0bWwjRDMwVl8wMDJkT3Bjb2RlcyI+RDMwVi1PcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNpbmRleC1EMzBWLW9wdGltaXphdGlvbi03Ij5EMzBWIG9wdGltaXphdGlvbjwvYT46IDxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkT3B0cy5odG1sI2luZGV4LUQzMFYtb3B0aW9ucy04MjciPkQzMFYgb3B0aW9uczwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZE9wdHMuaHRtbCNEMzBWXzAwMmRPcHRzIj5EMzBWLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRSZWdzLmh0bWwjaW5kZXgtRDMwVi1yZWdpc3RlcnMtODQxIj5EMzBWIHJlZ2lzdGVyczwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZFJlZ3MuaHRtbCNEMzBWXzAwMmRSZWdzIj5EMzBWLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRTaXplLmh0bWwjaW5kZXgtRDMwVi1zaXplLW1vZGlmaWVycy04MzAiPkQzMFYgc2l6ZSBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRTaXplLmh0bWwjRDMwVl8wMDJkU2l6ZSI+RDMwVi1TaXplPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1EMzBWLXN1Yl8wMDJkaW5zdHJ1Y3Rpb24tb3JkZXJpbmctODM3Ij5EMzBWIHN1Yi1pbnN0cnVjdGlvbiBvcmRlcmluZzwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZENoYXJzLmh0bWwjRDMwVl8wMDJkQ2hhcnMiPkQzMFYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRTdWJzLmh0bWwjaW5kZXgtRDMwVi1zdWJfMDAyZGluc3RydWN0aW9ucy04MzIiPkQzMFYgc3ViLWluc3RydWN0aW9uczwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZFN1YnMuaHRtbCNEMzBWXzAwMmRTdWJzIj5EMzBWLVN1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1EMzBWLXN1cHBvcnQtODI1Ij5EMzBWIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmREZXBlbmRlbnQuaHRtbCNEMzBWXzAwMmREZXBlbmRlbnQiPkQzMFYtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkU3ludGF4Lmh0bWwjaW5kZXgtRDMwVi1zeW50YXgtODI4Ij5EMzBWIHN5bnRheDwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZFN5bnRheC5odG1sI0QzMFZfMDAyZFN5bnRheCI+RDMwVi1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YS5odG1sI2luZGV4LWRhdGEtYWxpZ25tZW50LW9uLVNQQVJDLTE4MTIiPmRhdGEgYWxpZ25tZW50IG9uIFNQQVJDPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEuaHRtbCNTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YSI+U3BhcmMtQWxpZ25lZC1EYXRhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUi5odG1sI2luZGV4LWRhdGEtYW5kLXRleHQtc2VjdGlvbnNfMDAyYy1qb2luaW5nLTg4Ij5kYXRhIGFuZCB0ZXh0IHNlY3Rpb25zLCBqb2luaW5nPC9hPjogPGEgaHJlZj0iUi5odG1sI1IiPlI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXRhLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkYXRhXzAwN2QtZGlyZWN0aXZlLTMwNCI+PGNvZGU+ZGF0YTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iRGF0YS5odG1sI0RhdGEiPkRhdGE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRhdGFfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkwMyI+PGNvZGU+ZGF0YTwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmRSZWxvY2F0aW9ucy5odG1sI2luZGV4LWRhdGEtcmVsb2NhdGlvbnNfMDAyYy1BUk0tNjQ4Ij5kYXRhIHJlbG9jYXRpb25zLCBBUk08L2E+OiA8YSBocmVmPSJBUk1fMDAyZFJlbG9jYXRpb25zLmh0bWwjQVJNXzAwMmRSZWxvY2F0aW9ucyI+QVJNLVJlbG9jYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNpbmRleC1kYXRhLXNlY3Rpb24tMTk1Ij5kYXRhIHNlY3Rpb248L2E+OiA8YSBocmVmPSJMZC1TZWN0aW9ucy5odG1sI0xkLVNlY3Rpb25zIj5MZCBTZWN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRhdGExXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTY4MHgwLTEyNzQiPjxjb2RlPmRhdGExPC9jb2RlPiBkaXJlY3RpdmUsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhLXzAwMmREaXJlY3RpdmVzIj5NNjhLLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkYXRhMl8wMDdkLWRpcmVjdGl2ZV8wMDJjLU02ODB4MC0xMjc1Ij48Y29kZT5kYXRhMjwvY29kZT4gZGlyZWN0aXZlLCBNNjgweDA8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4S18wMDJkRGlyZWN0aXZlcyI+TTY4Sy1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0g2NF8wMDJkQWRkcmVzc2luZy5odG1sI2luZGV4LWRhdGFsYWJlbF8wMDJjLVNINjQtMTc4MiI+ZGF0YWxhYmVsLCBTSDY0PC9hPjogPGEgaHJlZj0iU0g2NF8wMDJkQWRkcmVzc2luZy5odG1sI1NINjRfMDAyZEFkZHJlc3NpbmciPlNINjQtQWRkcmVzc2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRicGNfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjIwMSI+PGNvZGU+ZGJwYzwvY29kZT4gcmVnaXN0ZXIsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZGJwc3dfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjIwMiI+PGNvZGU+ZGJwc3c8L2NvZGU+IHJlZ2lzdGVyLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI1Y4NTBfMDAyZFJlZ3MiPlY4NTAtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbHMuaHRtbCNpbmRleC1kZWJ1Z2dlcnNfMDAyYy1hbmQtc3ltYm9sLW9yZGVyLTIwOSI+ZGVidWdnZXJzLCBhbmQgc3ltYm9sIG9yZGVyPC9hPjogPGEgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiPlN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWYuaHRtbCNpbmRleC1kZWJ1Z2dpbmctQ09GRi1zeW1ib2xzLTMwNyI+ZGVidWdnaW5nIENPRkYgc3ltYm9sczwvYT46IDxhIGhyZWY9IkRlZi5odG1sI0RlZiI+RGVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkU3ludGF4Lmh0bWwjaW5kZXgtREVDLXN5bnRheC0xNjA2Ij5ERUMgc3ludGF4PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkU3ludGF4Lmh0bWwjUERQXzAwMmQxMV8wMDJkU3ludGF4Ij5QRFAtMTEtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW50ZWdlcnMuaHRtbCNpbmRleC1kZWNpbWFsLWludGVnZXJzLTE3NSI+ZGVjaW1hbCBpbnRlZ2VyczwvYT46IDxhIGhyZWY9IkludGVnZXJzLmh0bWwjSW50ZWdlcnMiPkludGVnZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVmLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkZWZfMDA3ZC1kaXJlY3RpdmUtMzA1Ij48Y29kZT5kZWY8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkRlZi5odG1sI0RlZiI+RGVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkZWZfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkxOCI+PGNvZGU+ZGVmPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZW5zaXR5LUluc3RydWN0aW9ucy5odG1sI2luZGV4LWRlbnNpdHktaW5zdHJ1Y3Rpb25zLTIyOTQiPmRlbnNpdHkgaW5zdHJ1Y3Rpb25zPC9hPjogPGEgaHJlZj0iRGVuc2l0eS1JbnN0cnVjdGlvbnMuaHRtbCNEZW5zaXR5LUluc3RydWN0aW9ucyI+RGVuc2l0eSBJbnN0cnVjdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNRC5odG1sI2luZGV4LWRlcGVuZGVuY3ktdHJhY2tpbmctODIiPmRlcGVuZGVuY3kgdHJhY2tpbmc8L2E+OiA8YSBocmVmPSJNRC5odG1sI01EIj5NRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlcHJlY2F0ZWQuaHRtbCNpbmRleC1kZXByZWNhdGVkLWRpcmVjdGl2ZXMtNTExIj5kZXByZWNhdGVkIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJEZXByZWNhdGVkLmh0bWwjRGVwcmVjYXRlZCI+RGVwcmVjYXRlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlc2MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRlc2NfMDA3ZC1kaXJlY3RpdmUtMzA4Ij48Y29kZT5kZXNjPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJEZXNjLmh0bWwjRGVzYyI+RGVzYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1EZXNjLmh0bWwjaW5kZXgtZGVzY3JpcHRvcl8wMDJjLW9mLV8wMDQwY29kZV8wMDdiYV8wMDJlb3V0XzAwN2Qtc3ltYm9sLTIzMyI+ZGVzY3JpcHRvciwgb2YgPGNvZGU+YS5vdXQ8L2NvZGU+IHN5bWJvbDwvYT46IDxhIGhyZWY9IlN5bWJvbC1EZXNjLmh0bWwjU3ltYm9sLURlc2MiPlN5bWJvbCBEZXNjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRkaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjEzOSI+PGNvZGU+ZGZsb2F0PC9jb2RlPiBkaXJlY3RpdmUsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI1ZBWF8wMDJkZGlyZWN0aXZlcyI+VkFYLWRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXb3JkLmh0bWwjaW5kZXgtZGlmZmVyZW5jZS10YWJsZXMtYWx0ZXJlZC01MDkiPmRpZmZlcmVuY2UgdGFibGVzIGFsdGVyZWQ8L2E+OiA8YSBocmVmPSJXb3JkLmh0bWwjV29yZCI+V29yZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IksuaHRtbCNpbmRleC1kaWZmZXJlbmNlLXRhYmxlc18wMDJjLXdhcm5pbmctNjciPmRpZmZlcmVuY2UgdGFibGVzLCB3YXJuaW5nPC9hPjogPGEgaHJlZj0iSy5odG1sI0siPks8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRtbWl4YWwuaHRtbCNpbmRleC1kaWZmZXJlbmNlc18wMDJjLW1taXhhbC0xNDk0Ij5kaWZmZXJlbmNlcywgbW1peGFsPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkbW1peGFsLmh0bWwjTU1JWF8wMDJkbW1peGFsIj5NTUlYLW1taXhhbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpbS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZGltXzAwN2QtZGlyZWN0aXZlLTMxMSI+PGNvZGU+ZGltPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJEaW0uaHRtbCNEaW0iPkRpbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNpbmRleC1kaXJlY3RpdmVzLWFuZC1pbnN0cnVjdGlvbnMtMTM2Ij5kaXJlY3RpdmVzIGFuZCBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjU3RhdGVtZW50cyI+U3RhdGVtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUENfMDAyZFBzZXVkby5odG1sI2luZGV4LWRpcmVjdGl2ZXMtZm9yLVBvd2VyUEMtMTYyNiI+ZGlyZWN0aXZlcyBmb3IgUG93ZXJQQzwvYT46IDxhIGhyZWY9IlBvd2VyUENfMDAyZFBzZXVkby5odG1sI1Bvd2VyUENfMDAyZFBzZXVkbyI+UG93ZXJQQy1Qc2V1ZG88L2E+PC9saT4KKzxsaT48YSBocmVmPSJTQ09SRV8wMDJkUHNldWRvLmh0bWwjaW5kZXgtZGlyZWN0aXZlcy1mb3ItU0NPUkUtMTcyNCI+ZGlyZWN0aXZlcyBmb3IgU0NPUkU8L2E+OiA8YSBocmVmPSJTQ09SRV8wMDJkUHNldWRvLmh0bWwjU0NPUkVfMDAyZFBzZXVkbyI+U0NPUkUtUHNldWRvPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tRGlyZWN0aXZlcy5odG1sI2luZGV4LWRpcmVjdGl2ZXNfMDAyYy1CbGFja2Zpbi03MzYiPmRpcmVjdGl2ZXMsIEJsYWNrZmluPC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tRGlyZWN0aXZlcy5odG1sI0JsYWNrZmluLURpcmVjdGl2ZXMiPkJsYWNrZmluIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZGlyZWN0aXZlc18wMDJjLU0zMlItMTIyMiI+ZGlyZWN0aXZlcywgTTMyUjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCNNMzJSXzAwMmREaXJlY3RpdmVzIj5NMzJSLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZGlyZWN0aXZlc18wMDJjLU02ODB4MC0xMjczIj5kaXJlY3RpdmVzLCBNNjgweDA8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4S18wMDJkRGlyZWN0aXZlcyI+TTY4Sy1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHNldWRvLU9wcy5odG1sI2luZGV4LWRpcmVjdGl2ZXNfMDAyYy1tYWNoaW5lLWluZGVwZW5kZW50LTI2OSI+ZGlyZWN0aXZlcywgbWFjaGluZSBpbmRlcGVuZGVudDwvYT46IDxhIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1kaXJlY3RpdmVzXzAwMmMtWHRlbnNhLTIzMTkiPmRpcmVjdGl2ZXMsIFh0ZW5zYTwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiPlh0ZW5zYSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI2luZGV4LWRpcmVjdGl2ZXNfMDAyYy1aODAwMC0yMDk1Ij5kaXJlY3RpdmVzLCBaODAwMDwvYT46IDxhIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNaODAwMC1EaXJlY3RpdmVzIj5aODAwMCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQuaHRtbCNpbmRleC1EaXNhYmxlLWZsb2F0aW5nXzAwMmRwb2ludC1pbnN0cnVjdGlvbnMtMTQxNSI+RGlzYWJsZSBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJNSVBTLWZsb2F0aW5nXzAwMmRwb2ludC5odG1sI01JUFMtZmxvYXRpbmdfMDAyZHBvaW50Ij5NSVBTIGZsb2F0aW5nLXBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQuaHRtbCNpbmRleC1EaXNhYmxlLXNpbmdsZV8wMDJkcHJlY2lzaW9uLWZsb2F0aW5nXzAwMmRwb2ludC1vcGVyYXRpb25zLTE0MTgiPkRpc2FibGUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zPC9hPjogPGEgaHJlZj0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQuaHRtbCNNSVBTLWZsb2F0aW5nXzAwMmRwb2ludCI+TUlQUyBmbG9hdGluZy1wb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkb3BlcmFuZHMuaHRtbCNpbmRleC1kaXNwbGFjZW1lbnQtc2l6aW5nLWNoYXJhY3Rlcl8wMDJjLVZBWC0yMTU1Ij5kaXNwbGFjZW1lbnQgc2l6aW5nIGNoYXJhY3RlciwgVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI1ZBWF8wMDJkb3BlcmFuZHMiPlZBWC1vcGVyYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1OYW1lcy5odG1sI2luZGV4LWRvbGxhci1sb2NhbC1zeW1ib2xzLTIyMCI+ZG9sbGFyIGxvY2FsIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJTeW1ib2wtTmFtZXMuaHRtbCNTeW1ib2wtTmFtZXMiPlN5bWJvbCBOYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRvdC5odG1sI2luZGV4LWRvdC1fMDAyOHN5bWJvbF8wMDI5LTIyMSI+ZG90IChzeW1ib2wpPC9hPjogPGEgaHJlZj0iRG90Lmh0bWwjRG90Ij5Eb3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEb3VibGUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRvdWJsZV8wMDdkLWRpcmVjdGl2ZS0zMTQiPjxjb2RlPmRvdWJsZTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iRG91YmxlLmh0bWwjRG91YmxlIj5Eb3VibGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZG91YmxlXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDI2Ij48Y29kZT5kb3VibGU8L2NvZGU+IGRpcmVjdGl2ZSwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaTM4Nl8wMDJkRmxvYXQiPmkzODYtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZG91YmxlXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTY4MHgwLTEyNjkiPjxjb2RlPmRvdWJsZTwvY29kZT4gZGlyZWN0aXZlLCBNNjgweDA8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0Ij5NNjhLLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRvdWJsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLU02OEhDMTEtMTM0MyI+PGNvZGU+ZG91YmxlPC9jb2RlPiBkaXJlY3RpdmUsIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRGbG9hdC5odG1sI002OEhDMTFfMDAyZEZsb2F0Ij5NNjhIQzExLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jkb3VibGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1SWC0xNjcxIj48Y29kZT5kb3VibGU8L2NvZGU+IGRpcmVjdGl2ZSwgUlg8L2E+OiA8YSBocmVmPSJSWF8wMDJkRmxvYXQuaHRtbCNSWF8wMDJkRmxvYXQiPlJYLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jkb3VibGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkwNCI+PGNvZGU+ZG91YmxlPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZGZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jkb3VibGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjEzNSI+PGNvZGU+ZG91YmxlPC9jb2RlPiBkaXJlY3RpdmUsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkZmxvYXQuaHRtbCNWQVhfMDAyZGZsb2F0Ij5WQVgtZmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZG91YmxlXzAwN2QtZGlyZWN0aXZlXzAwMmMteDg2XzAwMmQ2NC0xMDMwIj48Y29kZT5kb3VibGU8L2NvZGU+IGRpcmVjdGl2ZSwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZG91YmxlXzAwN2QtZGlyZWN0aXZlXzAwMmMtWEdBVEUtMjI1MCI+PGNvZGU+ZG91YmxlPC9jb2RlPiBkaXJlY3RpdmUsIFhHQVRFPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjWEdBVEVfMDAyZEZsb2F0Ij5YR0FURS1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNpbmRleC1kb3VibGVxdW90ZS1fMDAyOF8wMDQwY29kZV8wMDdiXzAwNWNfMDAyMl8wMDdkXzAwMjktMTYzIj5kb3VibGVxdW90ZSAoPGNvZGU+XCI8L2NvZGU+KTwvYT46IDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jkcmxpc3RfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkwOCI+PGNvZGU+ZHJsaXN0PC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRybm9saXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDkiPjxjb2RlPmRybm9saXN0PC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpODYwLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkdWFsXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTg2MC0xMDcyIj48Y29kZT5kdWFsPC9jb2RlPiBkaXJlY3RpdmUsIGk4NjA8L2E+OiA8YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpODYwLmh0bWwjRGlyZWN0aXZlc18wMDJkaTg2MCI+RGlyZWN0aXZlcy1pODYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PYmplY3QuaHRtbCNpbmRleC1FQ09GRi1zZWN0aW9ucy0xMzc2Ij5FQ09GRiBzZWN0aW9uczwvYT46IDxhIGhyZWY9Ik1JUFMtT2JqZWN0Lmh0bWwjTUlQUy1PYmplY3QiPk1JUFMgT2JqZWN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZWNyXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTciPjxjb2RlPmVjcjwvY29kZT4gcmVnaXN0ZXIsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUXVhZC5odG1sI2luZGV4LWVpZ2h0XzAwMmRieXRlLWludGVnZXItNDM5Ij5laWdodC1ieXRlIGludGVnZXI8L2E+OiA8YSBocmVmPSJRdWFkLmh0bWwjUXVhZCI+UXVhZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVpcGNfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE5MyI+PGNvZGU+ZWlwYzwvY29kZT4gcmVnaXN0ZXIsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZWlwc3dfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE5NCI+PGNvZGU+ZWlwc3c8L2NvZGU+IHJlZ2lzdGVyLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI1Y4NTBfMDAyZFJlZ3MiPlY4NTAtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVqZWN0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlamVjdF8wMDdkLWRpcmVjdGl2ZS0zMTYiPjxjb2RlPmVqZWN0PC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJFamVjdC5odG1sI0VqZWN0Ij5FamVjdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlR5cGUuaHRtbCNpbmRleC1FTEYtc3ltYm9sLXR5cGUtNDk1Ij5FTEYgc3ltYm9sIHR5cGU8L2E+OiA8YSBocmVmPSJUeXBlLmh0bWwjVHlwZSI+VHlwZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVsc2UuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVsc2VfMDA3ZC1kaXJlY3RpdmUtMzIwIj48Y29kZT5lbHNlPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJFbHNlLmh0bWwjRWxzZSI+RWxzZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVsc2VpZi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZWxzZWlmXzAwN2QtZGlyZWN0aXZlLTMyMSI+PGNvZGU+ZWxzZWlmPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJFbHNlaWYuaHRtbCNFbHNlaWYiPkVsc2VpZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVtcHR5LUV4cHJzLmh0bWwjaW5kZXgtZW1wdHktZXhwcmVzc2lvbnMtMjQ0Ij5lbXB0eSBleHByZXNzaW9uczwvYT46IDxhIGhyZWY9IkVtcHR5LUV4cHJzLmh0bWwjRW1wdHktRXhwcnMiPkVtcHR5IEV4cHJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlbXNnXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MTAiPjxjb2RlPmVtc2c8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjaW5kZXgtZW11bGF0aW9uLTIwIj5lbXVsYXRpb248L2E+OiA8YSBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2luZGV4LWVuY29kaW5nLW9wdGlvbnNfMDAyYy1pMzg2LTk4NiI+ZW5jb2Rpbmcgb3B0aW9ucywgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+aTM4Ni1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpbmRleC1lbmNvZGluZy1vcHRpb25zXzAwMmMteDg2XzAwMmQ2NC05ODciPmVuY29kaW5nIG9wdGlvbnMsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+aTM4Ni1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbmQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVuZF8wMDdkLWRpcmVjdGl2ZS0zMjIiPjxjb2RlPmVuZDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iRW5kLmh0bWwjRW5kIj5FbmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpODYwLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlbmRkdWFsXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTg2MC0xMDczIj48Y29kZT5lbmRkdWFsPC9jb2RlPiBkaXJlY3RpdmUsIGk4NjA8L2E+OiA8YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpODYwLmh0bWwjRGlyZWN0aXZlc18wMDJkaTg2MCI+RGlyZWN0aXZlcy1pODYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW5kZWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVuZGVmXzAwN2QtZGlyZWN0aXZlLTMyMyI+PGNvZGU+ZW5kZWY8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkVuZGVmLmh0bWwjRW5kZWYiPkVuZGVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW5kZnVuYy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kZnVuY18wMDdkLWRpcmVjdGl2ZS0zMjQiPjxjb2RlPmVuZGZ1bmM8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkVuZGZ1bmMuaHRtbCNFbmRmdW5jIj5FbmRmdW5jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNpbmRleC1lbmRpYW5uZXNzXzAwMmMtTUlQUy0xNiI+ZW5kaWFubmVzcywgTUlQUzwvYT46IDxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNpbmRleC1lbmRpYW5uZXNzXzAwMmMtUEotMTIiPmVuZGlhbm5lc3MsIFBKPC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbmRpZi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kaWZfMDA3ZC1kaXJlY3RpdmUtMzI1Ij48Y29kZT5lbmRpZjwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iRW5kaWYuaHRtbCNFbmRpZiI+RW5kaWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVuZGxvb3BfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkzOCI+PGNvZGU+ZW5kbG9vcDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWFjcm8uaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVuZG1fMDA3ZC1kaXJlY3RpdmUtNDAyIj48Y29kZT5lbmRtPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJNYWNyby5odG1sI01hY3JvIj5NYWNybzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kbV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTQwIj48Y29kZT5lbmRtPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVuZHN0cnVjdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTU5Ij48Y29kZT5lbmRzdHJ1Y3Q8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kdW5pb25fMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk2MyI+PGNvZGU+ZW5kdW5pb248L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRW52Lmh0bWwjaW5kZXgtZW52aXJvbm1lbnQtc2V0dGluZ3NfMDAyYy1USUM1NFgtMTg1MyI+ZW52aXJvbm1lbnQgc2V0dGluZ3MsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRW52Lmh0bWwjVElDNTRYXzAwMmRFbnYiPlRJQzU0WC1FbnY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjaW5kZXgtRU9GXzAwMmMtbmV3bGluZS1tdXN0LXByZWNlZGUtMTM0Ij5FT0YsIG5ld2xpbmUgbXVzdCBwcmVjZWRlPC9hPjogPGEgaHJlZj0iU3RhdGVtZW50cy5odG1sI1N0YXRlbWVudHMiPlN0YXRlbWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlcF8wMDdkLXJlZ2lzdGVyXzAwMmMtVjg1MC0yMTkxIj48Y29kZT5lcDwvY29kZT4gcmVnaXN0ZXIsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXBpcGhhbnlfMDAyZENoYXJzLmh0bWwjaW5kZXgtRXBpcGhhbnktbGluZS1jb21tZW50LWNoYXJhY3Rlci04NTciPkVwaXBoYW55IGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJFcGlwaGFueV8wMDJkQ2hhcnMuaHRtbCNFcGlwaGFueV8wMDJkQ2hhcnMiPkVwaXBoYW55LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXBpcGhhbnlfMDAyZENoYXJzLmh0bWwjaW5kZXgtRXBpcGhhbnktbGluZS1zZXBhcmF0b3ItODYwIj5FcGlwaGFueSBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9IkVwaXBoYW55XzAwMmRDaGFycy5odG1sI0VwaXBoYW55XzAwMmRDaGFycyI+RXBpcGhhbnktQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcGlwaGFueS1PcHRpb25zLmh0bWwjaW5kZXgtRXBpcGhhbnktb3B0aW9ucy04NTIiPkVwaXBoYW55IG9wdGlvbnM8L2E+OiA8YSBocmVmPSJFcGlwaGFueS1PcHRpb25zLmh0bWwjRXBpcGhhbnktT3B0aW9ucyI+RXBpcGhhbnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVwaXBoYW55XzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1FcGlwaGFueS1zdXBwb3J0LTg1MSI+RXBpcGhhbnkgc3VwcG9ydDwvYT46IDxhIGhyZWY9IkVwaXBoYW55XzAwMmREZXBlbmRlbnQuaHRtbCNFcGlwaGFueV8wMDJkRGVwZW5kZW50Ij5FcGlwaGFueS1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcXUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVxdV8wMDdkLWRpcmVjdGl2ZS0zMjYiPjxjb2RlPmVxdTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iRXF1Lmh0bWwjRXF1Ij5FcXU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVxdV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTUwIj48Y29kZT5lcXU8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVxdWl2Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlcXVpdl8wMDdkLWRpcmVjdGl2ZS0zMjkiPjxjb2RlPmVxdWl2PC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJFcXVpdi5odG1sI0VxdWl2Ij5FcXVpdjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVxdi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZXF2XzAwN2QtZGlyZWN0aXZlLTMzMCI+PGNvZGU+ZXF2PC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJFcXYuaHRtbCNFcXYiPkVxdjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVyci5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZXJyXzAwN2QtZGlyZWN0aXZlLTMzMSI+PGNvZGU+ZXJyPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJFcnIuaHRtbCNFcnIiPkVycjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLmh0bWwjaW5kZXgtZXJyb3ItZGlyZWN0aXZlLTMzMiI+ZXJyb3IgZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iRXJyb3IuaHRtbCNFcnJvciI+RXJyb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvcnMuaHRtbCNpbmRleC1lcnJvci1tZXNzYWdlcy00MCI+ZXJyb3IgbWVzc2FnZXM8L2E+OiA8YSBocmVmPSJFcnJvcnMuaHRtbCNFcnJvcnMiPkVycm9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWVycm9yLW9uLXZhbGlkLWlucHV0LTIzMzciPmVycm9yIG9uIHZhbGlkIGlucHV0PC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXLmh0bWwjaW5kZXgtZXJyb3JzXzAwMmMtY2F1c2VkLWJ5LXdhcm5pbmdzLTEwNiI+ZXJyb3JzLCBjYXVzZWQgYnkgd2FybmluZ3M8L2E+OiA8YSBocmVmPSJXLmh0bWwjVyI+VzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlouaHRtbCNpbmRleC1lcnJvcnNfMDAyYy1jb250aW51aW5nLWFmdGVyLTExMSI+ZXJyb3JzLCBjb250aW51aW5nIGFmdGVyPC9hPjogPGEgaHJlZj0iWi5odG1sI1oiPlo8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludC5odG1sI2luZGV4LUVTQV8wMDJmMzkwLWZsb2F0aW5nLXBvaW50LV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktODk4Ij5FU0EvMzkwIGZsb2F0aW5nIHBvaW50ICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9IkVTQV8wMDJmMzkwLUZsb2F0aW5nLVBvaW50Lmh0bWwjRVNBXzAwMmYzOTAtRmxvYXRpbmctUG9pbnQiPkVTQS8zOTAgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtRVNBXzAwMmYzOTAtc3VwcG9ydC04OTUiPkVTQS8zOTAgc3VwcG9ydDwvYT46IDxhIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5FU0EvMzkwLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVTQV8wMDJmMzkwLU9wdGlvbnMuaHRtbCNpbmRleC1FU0FfMDAyZjM5MC1TeW50YXgtODk2Ij5FU0EvMzkwIFN5bnRheDwvYT46IDxhIGhyZWY9IkVTQV8wMDJmMzkwLU9wdGlvbnMuaHRtbCNFU0FfMDAyZjM5MC1PcHRpb25zIj5FU0EvMzkwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFU0FfMDAyZjM5MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtRVNBXzAwMmYzOTBfMDAyZG9ubHktZGlyZWN0aXZlcy04OTkiPkVTQS8zOTAtb25seSBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iRVNBXzAwMmYzOTAtRGlyZWN0aXZlcy5odG1sI0VTQV8wMDJmMzkwLURpcmVjdGl2ZXMiPkVTQS8zOTAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNpbmRleC1lc2NhcGUtY29kZXNfMDAyYy1jaGFyYWN0ZXItMTQ0Ij5lc2NhcGUgY29kZXMsIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JldmFsXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTQiPjxjb2RlPmV2YWw8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1ldmVuLTIxMDgiPjxjb2RlPmV2ZW48L2NvZGU+PC9hPjogPGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiPlo4MDAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JldmVuXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTY4MHgwLTEyNzYiPjxjb2RlPmV2ZW48L2NvZGU+IGRpcmVjdGl2ZSwgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkRGlyZWN0aXZlcy5odG1sI002OEtfMDAyZERpcmVjdGl2ZXMiPk02OEstRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZXZlbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xODkyIj48Y29kZT5ldmVuPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNYWNyby5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZXhpdG1fMDA3ZC1kaXJlY3RpdmUtNDA0Ij48Y29kZT5leGl0bTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTWFjcm8uaHRtbCNNYWNybyI+TWFjcm88L2E+PC9saT4KKzxsaT48YSBocmVmPSJBcy1TZWN0aW9ucy5odG1sI2luZGV4LWV4cHItXzAwMjhpbnRlcm5hbC1zZWN0aW9uXzAwMjktMjAzIj5leHByIChpbnRlcm5hbCBzZWN0aW9uKTwvYT46IDxhIGhyZWY9IkFzLVNlY3Rpb25zLmh0bWwjQXMtU2VjdGlvbnMiPkFzIFNlY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXJndW1lbnRzLmh0bWwjaW5kZXgtZXhwcmVzc2lvbi1hcmd1bWVudHMtMjQ4Ij5leHByZXNzaW9uIGFyZ3VtZW50czwvYT46IDxhIGhyZWY9IkFyZ3VtZW50cy5odG1sI0FyZ3VtZW50cyI+QXJndW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNpbmRleC1leHByZXNzaW9ucy0yNDEiPmV4cHJlc3Npb25zPC9hPjogPGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNpbmRleC1leHByZXNzaW9uc18wMDJjLWNvbXBhcmlzb24tMjY4Ij5leHByZXNzaW9ucywgY29tcGFyaXNvbjwvYT46IDxhIGhyZWY9IkluZml4LU9wcy5odG1sI0luZml4LU9wcyI+SW5maXggT3BzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW1wdHktRXhwcnMuaHRtbCNpbmRleC1leHByZXNzaW9uc18wMDJjLWVtcHR5LTI0NSI+ZXhwcmVzc2lvbnMsIGVtcHR5PC9hPjogPGEgaHJlZj0iRW1wdHktRXhwcnMuaHRtbCNFbXB0eS1FeHBycyI+RW1wdHkgRXhwcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjaW5kZXgtZXhwcmVzc2lvbnNfMDAyYy1pbnRlZ2VyLTI0NyI+ZXhwcmVzc2lvbnMsIGludGVnZXI8L2E+OiA8YSBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjSW50ZWdlci1FeHBycyI+SW50ZWdlciBFeHByczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JleHRBdXhSZWdpc3Rlcl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy02MDAiPjxjb2RlPmV4dEF1eFJlZ2lzdGVyPC9jb2RlPiBkaXJlY3RpdmUsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmV4dENvbmRDb2RlXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJDLTYwMSI+PGNvZGU+ZXh0Q29uZENvZGU8L2NvZGU+IGRpcmVjdGl2ZSwgQVJDPC9hPjogPGEgaHJlZj0iQVJDLURpcmVjdGl2ZXMuaHRtbCNBUkMtRGlyZWN0aXZlcyI+QVJDIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZXh0Q29yZVJlZ2lzdGVyXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJDLTYwMiI+PGNvZGU+ZXh0Q29yZVJlZ2lzdGVyPC9jb2RlPiBkaXJlY3RpdmUsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmV4dGVuZF8wMDdkLWRpcmVjdGl2ZS1NNjgweDAtMTI3MCI+PGNvZGU+ZXh0ZW5kPC9jb2RlPiBkaXJlY3RpdmUgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkRmxvYXQuaHRtbCNNNjhLXzAwMmRGbG9hdCI+TTY4Sy1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JleHRlbmRfMDA3ZC1kaXJlY3RpdmUtTTY4SEMxMS0xMzQ0Ij48Y29kZT5leHRlbmQ8L2NvZGU+IGRpcmVjdGl2ZSBNNjhIQzExPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCNNNjhIQzExXzAwMmRGbG9hdCI+TTY4SEMxMS1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZXh0ZW5kXzAwN2QtZGlyZWN0aXZlLVhHQVRFLTIyNTEiPjxjb2RlPmV4dGVuZDwvY29kZT4gZGlyZWN0aXZlIFhHQVRFPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjWEdBVEVfMDAyZEZsb2F0Ij5YR0FURS1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk5NjAuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmV4dGVuZGVkXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTk2MC0xMDk5Ij48Y29kZT5leHRlbmRlZDwvY29kZT4gZGlyZWN0aXZlLCBpOTYwPC9hPjogPGEgaHJlZj0iRGlyZWN0aXZlc18wMDJkaTk2MC5odG1sI0RpcmVjdGl2ZXNfMDAyZGk5NjAiPkRpcmVjdGl2ZXMtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4dGVybi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZXh0ZXJuXzAwN2QtZGlyZWN0aXZlLTMzMyI+PGNvZGU+ZXh0ZXJuPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJFeHRlcm4uaHRtbCNFeHRlcm4iPkV4dGVybjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JleHRJbnN0cnVjdGlvbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy02MDMiPjxjb2RlPmV4dEluc3RydWN0aW9uPC9jb2RlPiBkaXJlY3RpdmUsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmFpbC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmFpbF8wMDdkLWRpcmVjdGl2ZS0zMzQiPjxjb2RlPmZhaWw8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkZhaWwuaHRtbCNGYWlsIj5GYWlsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmYXJfMDA1Zm1vZGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkxMyI+PGNvZGU+ZmFyX21vZGU8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImYuaHRtbCNpbmRleC1mYXN0ZXItcHJvY2Vzc2luZy1fMDAyOF8wMDQwb3B0aW9uXzAwN2JfMDAyZGZfMDA3ZF8wMDI5LTYxIj5mYXN0ZXIgcHJvY2Vzc2luZyAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWY8L3NwYW4+PC9zYW1wPik8L2E+OiA8YSBocmVmPSJmLmh0bWwjZiI+ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWZhdGFsLXNpZ25hbC0yMzM0Ij5mYXRhbCBzaWduYWw8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmNsaXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MTQiPjxjb2RlPmZjbGlzdDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmY25vbGlzdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTE1Ij48Y29kZT5mY25vbGlzdDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmVwY18wMDdkLXJlZ2lzdGVyXzAwMmMtVjg1MC0yMTk1Ij48Y29kZT5mZXBjPC9jb2RlPiByZWdpc3RlciwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNWODUwXzAwMmRSZWdzIj5WODUwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmZXBzd18wMDdkLXJlZ2lzdGVyXzAwMmMtVjg1MC0yMTk2Ij48Y29kZT5mZXBzdzwvY29kZT4gcmVnaXN0ZXIsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRkaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjE0MCI+PGNvZGU+ZmZsb2F0PC9jb2RlPiBkaXJlY3RpdmUsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI1ZBWF8wMDJkZGlyZWN0aXZlcyI+VkFYLWRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpZWxkXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MTYiPjxjb2RlPmZpZWxkPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaWxlLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmaWxlXzAwN2QtZGlyZWN0aXZlLTMzNSI+PGNvZGU+ZmlsZTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iRmlsZS5odG1sI0ZpbGUiPkZpbGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzAtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmlsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLU1TUC00MzAtMTUxNiI+PGNvZGU+ZmlsZTwvY29kZT4gZGlyZWN0aXZlLCBNU1AgNDMwPC9hPjogPGEgaHJlZj0iTVNQNDMwLURpcmVjdGl2ZXMuaHRtbCNNU1A0MzAtRGlyZWN0aXZlcyI+TVNQNDMwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaWxlLmh0bWwjaW5kZXgtZmlsZS1uYW1lXzAwMmMtbG9naWNhbC0zMzciPmZpbGUgbmFtZSwgbG9naWNhbDwvYT46IDxhIGhyZWY9IkZpbGUuaHRtbCNGaWxlIj5GaWxlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jbHVkZS5odG1sI2luZGV4LWZpbGVzXzAwMmMtaW5jbHVkaW5nLTM3NCI+ZmlsZXMsIGluY2x1ZGluZzwvYT46IDxhIGhyZWY9IkluY2x1ZGUuaHRtbCNJbmNsdWRlIj5JbmNsdWRlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtRmlsZXMuaHRtbCNpbmRleC1maWxlc18wMDJjLWlucHV0LTMxIj5maWxlcywgaW5wdXQ8L2E+OiA8YSBocmVmPSJJbnB1dC1GaWxlcy5odG1sI0lucHV0LUZpbGVzIj5JbnB1dCBGaWxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGwuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpbGxfMDA3ZC1kaXJlY3RpdmUtMzM4Ij48Y29kZT5maWxsPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJGaWxsLmh0bWwjRmlsbCI+RmlsbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYWNlLmh0bWwjaW5kZXgtZmlsbGluZy1tZW1vcnktNDY0Ij5maWxsaW5nIG1lbW9yeTwvYT46IDxhIGhyZWY9IlNwYWNlLmh0bWwjU3BhY2UiPlNwYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2tpcC5odG1sI2luZGV4LWZpbGxpbmctbWVtb3J5LTQ2MSI+ZmlsbGluZyBtZW1vcnk8L2E+OiA8YSBocmVmPSJTa2lwLmh0bWwjU2tpcCI+U2tpcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNpbmRleC1GTElYLXN5bnRheC0yMjg2Ij5GTElYIHN5bnRheDwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNYdGVuc2EtU3ludGF4Ij5YdGVuc2EgU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZsb2F0XzAwN2QtZGlyZWN0aXZlLTM0MiI+PGNvZGU+ZmxvYXQ8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkZsb2F0Lmh0bWwjRmxvYXQiPkZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDI0Ij48Y29kZT5mbG9hdDwvY29kZT4gZGlyZWN0aXZlLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbG9hdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLU02ODB4MC0xMjY4Ij48Y29kZT5mbG9hdDwvY29kZT4gZGlyZWN0aXZlLCBNNjgweDA8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0Ij5NNjhLLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMtTTY4SEMxMS0xMzQyIj48Y29kZT5mbG9hdDwvY29kZT4gZGlyZWN0aXZlLCBNNjhIQzExPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCNNNjhIQzExXzAwMmRGbG9hdCI+TTY4SEMxMS1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1SWC0xNjcwIj48Y29kZT5mbG9hdDwvY29kZT4gZGlyZWN0aXZlLCBSWDwvYT46IDxhIGhyZWY9IlJYXzAwMmRGbG9hdC5odG1sI1JYXzAwMmRGbG9hdCI+UlgtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDYiPjxjb2RlPmZsb2F0PC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZGZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbG9hdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVZBWC0yMTM0Ij48Y29kZT5mbG9hdDwvY29kZT4gZGlyZWN0aXZlLCBWQVg8L2E+OiA8YSBocmVmPSJWQVhfMDAyZGZsb2F0Lmh0bWwjVkFYXzAwMmRmbG9hdCI+VkFYLWZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMteDg2XzAwMmQ2NC0xMDI4Ij48Y29kZT5mbG9hdDwvY29kZT4gZGlyZWN0aXZlLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij5pMzg2LUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbG9hdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVhHQVRFLTIyNDkiPjxjb2RlPmZsb2F0PC9jb2RlPiBkaXJlY3RpdmUsIFhHQVRFPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjWEdBVEVfMDAyZEZsb2F0Ij5YR0FURS1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZsb251bXMuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludC1udW1iZXJzLTE4MiI+ZmxvYXRpbmcgcG9pbnQgbnVtYmVyczwvYT46IDxhIGhyZWY9IkZsb251bXMuaHRtbCNGbG9udW1zIj5GbG9udW1zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRG91YmxlLmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnQtbnVtYmVycy1fMDAyOGRvdWJsZV8wMDI5LTMxNSI+ZmxvYXRpbmcgcG9pbnQgbnVtYmVycyAoZG91YmxlKTwvYT46IDxhIGhyZWY9IkRvdWJsZS5odG1sI0RvdWJsZSI+RG91YmxlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2luZ2xlLmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnQtbnVtYmVycy1fMDAyOHNpbmdsZV8wMDI5LTQ1NyI+ZmxvYXRpbmcgcG9pbnQgbnVtYmVycyAoc2luZ2xlKTwvYT46IDxhIGhyZWY9IlNpbmdsZS5odG1sI1NpbmdsZSI+U2luZ2xlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmxvYXQuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludC1udW1iZXJzLV8wMDI4c2luZ2xlXzAwMjktMzQxIj5mbG9hdGluZyBwb2ludCBudW1iZXJzIChzaW5nbGUpPC9hPjogPGEgaHJlZj0iRmxvYXQuaHRtbCNGbG9hdCI+RmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1BQXJjaDY0LV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktNTM0Ij5mbG9hdGluZyBwb2ludCwgQUFyY2g2NCAoPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPik8L2E+OiA8YSBocmVmPSJBQXJjaDY0LUZsb2F0aW5nLVBvaW50Lmh0bWwjQUFyY2g2NC1GbG9hdGluZy1Qb2ludCI+QUFyY2g2NCBGbG9hdGluZyBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1BbHBoYS1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTU3MyI+ZmxvYXRpbmcgcG9pbnQsIEFscGhhICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9IkFscGhhLUZsb2F0aW5nLVBvaW50Lmh0bWwjQWxwaGEtRmxvYXRpbmctUG9pbnQiPkFscGhhIEZsb2F0aW5nIFBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1BUkMtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS01OTMiPmZsb2F0aW5nIHBvaW50LCBBUkMgKDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4pPC9hPjogPGEgaHJlZj0iQVJDLUZsb2F0aW5nLVBvaW50Lmh0bWwjQVJDLUZsb2F0aW5nLVBvaW50Ij5BUkMgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tRmxvYXRpbmctUG9pbnQuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLUFSTS1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTY0NiI+ZmxvYXRpbmcgcG9pbnQsIEFSTSAoPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPik8L2E+OiA8YSBocmVmPSJBUk0tRmxvYXRpbmctUG9pbnQuaHRtbCNBUk0tRmxvYXRpbmctUG9pbnQiPkFSTSBGbG9hdGluZyBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1EMTBWLTgxOSI+ZmxvYXRpbmcgcG9pbnQsIEQxMFY8L2E+OiA8YSBocmVmPSJEMTBWXzAwMmRGbG9hdC5odG1sI0QxMFZfMDAyZEZsb2F0Ij5EMTBWLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkRmxvYXQuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLUQzMFYtODQ1Ij5mbG9hdGluZyBwb2ludCwgRDMwVjwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZEZsb2F0Lmh0bWwjRDMwVl8wMDJkRmxvYXQiPkQzMFYtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludC5odG1sI2luZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtRVNBXzAwMmYzOTAtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS04OTciPmZsb2F0aW5nIHBvaW50LCBFU0EvMzkwICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9IkVTQV8wMDJmMzkwLUZsb2F0aW5nLVBvaW50Lmh0bWwjRVNBXzAwMmYzOTAtRmxvYXRpbmctUG9pbnQiPkVTQS8zOTAgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1IOF8wMDJmMzAwLV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktODczIj5mbG9hdGluZyBwb2ludCwgSDgvMzAwICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtRmxvYXRpbmctUG9pbnQuaHRtbCNIOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Ij5IOC8zMDAgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1IUFBBLV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktODg4Ij5mbG9hdGluZyBwb2ludCwgSFBQQSAoPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPik8L2E+OiA8YSBocmVmPSJIUFBBLUZsb2F0aW5nLVBvaW50Lmh0bWwjSFBQQS1GbG9hdGluZy1Qb2ludCI+SFBQQSBGbG9hdGluZyBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1pMzg2LTEwMjEiPmZsb2F0aW5nIHBvaW50LCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZsb2F0aW5nLVBvaW50XzAwMmRpOTYwLmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1pOTYwLV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktMTA5NCI+ZmxvYXRpbmcgcG9pbnQsIGk5NjAgKDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4pPC9hPjogPGEgaHJlZj0iRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAuaHRtbCNGbG9hdGluZy1Qb2ludF8wMDJkaTk2MCI+RmxvYXRpbmcgUG9pbnQtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1NNjgweDAtMTI2NiI+ZmxvYXRpbmcgcG9pbnQsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZEZsb2F0Lmh0bWwjTTY4S18wMDJkRmxvYXQiPk02OEstRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRGbG9hdC5odG1sI2luZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtTTY4SEMxMS0xMzQwIj5mbG9hdGluZyBwb2ludCwgTTY4SEMxMTwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZEZsb2F0Lmh0bWwjTTY4SEMxMV8wMDJkRmxvYXQiPk02OEhDMTEtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzAtRmxvYXRpbmctUG9pbnQuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLU1TUC00MzAtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0xNTEyIj5mbG9hdGluZyBwb2ludCwgTVNQIDQzMCAoPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPik8L2E+OiA8YSBocmVmPSJNU1A0MzAtRmxvYXRpbmctUG9pbnQuaHRtbCNNU1A0MzAtRmxvYXRpbmctUG9pbnQiPk1TUDQzMCBGbG9hdGluZyBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRGbG9hdC5odG1sI2luZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtUlgtMTY2OCI+ZmxvYXRpbmcgcG9pbnQsIFJYPC9hPjogPGEgaHJlZj0iUlhfMDAyZEZsb2F0Lmh0bWwjUlhfMDAyZEZsb2F0Ij5SWC1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InMzOTAtRmxvYXRpbmctUG9pbnQuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLXMzOTAtMTcxNyI+ZmxvYXRpbmcgcG9pbnQsIHMzOTA8L2E+OiA8YSBocmVmPSJzMzkwLUZsb2F0aW5nLVBvaW50Lmh0bWwjczM5MC1GbG9hdGluZy1Qb2ludCI+czM5MCBGbG9hdGluZyBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1TSC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTE3NTMiPmZsb2F0aW5nIHBvaW50LCBTSCAoPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPik8L2E+OiA8YSBocmVmPSJTSC1GbG9hdGluZy1Qb2ludC5odG1sI1NILUZsb2F0aW5nLVBvaW50Ij5TSCBGbG9hdGluZyBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRGbG9hdC5odG1sI2luZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtU1BBUkMtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0xODMwIj5mbG9hdGluZyBwb2ludCwgU1BBUkMgKDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4pPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZEZsb2F0Lmh0bWwjU3BhcmNfMDAyZEZsb2F0Ij5TcGFyYy1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtRmxvYXRpbmctUG9pbnQuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLVY4NTAtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0yMjA0Ij5mbG9hdGluZyBwb2ludCwgVjg1MCAoPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPik8L2E+OiA8YSBocmVmPSJWODUwLUZsb2F0aW5nLVBvaW50Lmh0bWwjVjg1MC1GbG9hdGluZy1Qb2ludCI+Vjg1MCBGbG9hdGluZyBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkZmxvYXQuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLVZBWC0yMTMzIj5mbG9hdGluZyBwb2ludCwgVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRmbG9hdC5odG1sI1ZBWF8wMDJkZmxvYXQiPlZBWC1mbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy14ODZfMDAyZDY0LTEwMjMiPmZsb2F0aW5nIHBvaW50LCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij5pMzg2LUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1YR0FURS0yMjQ3Ij5mbG9hdGluZyBwb2ludCwgWEdBVEU8L2E+OiA8YSBocmVmPSJYR0FURV8wMDJkRmxvYXQuaHRtbCNYR0FURV8wMDJkRmxvYXQiPlhHQVRFLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1aODAtMjA3NyI+ZmxvYXRpbmcgcG9pbnQsIFo4MDwvYT46IDxhIGhyZWY9Ilo4MC1GbG9hdGluZy1Qb2ludC5odG1sI1o4MC1GbG9hdGluZy1Qb2ludCI+WjgwIEZsb2F0aW5nIFBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmxvbnVtcy5odG1sI2luZGV4LWZsb251bXMtMTgxIj5mbG9udW1zPC9hPjogPGEgaHJlZj0iRmxvbnVtcy5odG1sI0Zsb251bXMiPkZsb251bXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvcnMuaHRtbCNpbmRleC1mb3JtYXQtb2YtZXJyb3ItbWVzc2FnZXMtNDUiPmZvcm1hdCBvZiBlcnJvciBtZXNzYWdlczwvYT46IDxhIGhyZWY9IkVycm9ycy5odG1sI0Vycm9ycyI+RXJyb3JzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3JzLmh0bWwjaW5kZXgtZm9ybWF0LW9mLXdhcm5pbmctbWVzc2FnZXMtNDMiPmZvcm1hdCBvZiB3YXJuaW5nIG1lc3NhZ2VzPC9hPjogPGEgaHJlZj0iRXJyb3JzLmh0bWwjRXJyb3JzIj5FcnJvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdzLmh0bWwjaW5kZXgtZm9ybWZlZWQtXzAwMjhfMDA0MGNvZGVfMDA3Yl8wMDVjZl8wMDdkXzAwMjktMTQ5Ij5mb3JtZmVlZCAoPGNvZGU+XGY8L2NvZGU+KTwvYT46IDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuYy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZnVuY18wMDdkLWRpcmVjdGl2ZS0zNDMiPjxjb2RlPmZ1bmM8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkZ1bmMuaHRtbCNGdW5jIj5GdW5jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3BlcmF0b3JzLmh0bWwjaW5kZXgtZnVuY3Rpb25zXzAwMmMtaW4tZXhwcmVzc2lvbnMtMjU1Ij5mdW5jdGlvbnMsIGluIGV4cHJlc3Npb25zPC9hPjogPGEgaHJlZj0iT3BlcmF0b3JzLmh0bWwjT3BlcmF0b3JzIj5PcGVyYXRvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JnYnI5NjBfMDA3ZF8wMDJjLWk5NjAtcG9zdHByb2Nlc3Nvci0xMDkxIj48Y29kZT5nYnI5NjA8L2NvZGU+LCBpOTYwIHBvc3Rwcm9jZXNzb3I8L2E+OiA8YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjT3B0aW9uc18wMDJkaTk2MCI+T3B0aW9ucy1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRkaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JnZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjE0MSI+PGNvZGU+Z2Zsb2F0PC9jb2RlPiBkaXJlY3RpdmUsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI1ZBWF8wMDJkZGlyZWN0aXZlcyI+VkFYLWRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ2xvYmFsLTIxMDEiPjxjb2RlPmdsb2JhbDwvY29kZT48L2E+OiA8YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjWjgwMDAtRGlyZWN0aXZlcyI+WjgwMDAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikdsb2JhbC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZ2xvYmFsXzAwN2QtZGlyZWN0aXZlLTM0NCI+PGNvZGU+Z2xvYmFsPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJHbG9iYWwuaHRtbCNHbG9iYWwiPkdsb2JhbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZ2xvYmFsXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MTciPjxjb2RlPmdsb2JhbDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PYmplY3QuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmdwXzAwN2QtcmVnaXN0ZXJfMDAyYy1NSVBTLTEzNzkiPjxjb2RlPmdwPC9jb2RlPiByZWdpc3RlciwgTUlQUzwvYT46IDxhIGhyZWY9Ik1JUFMtT2JqZWN0Lmh0bWwjTUlQUy1PYmplY3QiPk1JUFMgT2JqZWN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZ3BfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE4OSI+PGNvZGU+Z3A8L2NvZGU+IHJlZ2lzdGVyLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI1Y4NTBfMDAyZFJlZ3MiPlY4NTAtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN1Yl8wMDJkU2VjdGlvbnMuaHRtbCNpbmRleC1ncm91cGluZy1kYXRhLTIwNSI+Z3JvdXBpbmcgZGF0YTwvYT46IDxhIGhyZWY9IlN1Yl8wMDJkU2VjdGlvbnMuaHRtbCNTdWJfMDAyZFNlY3Rpb25zIj5TdWItU2VjdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwXzAwMmRBZGRyZXNzaW5nLmh0bWwjaW5kZXgtSDhfMDAyZjMwMC1hZGRyZXNzaW5nLW1vZGVzLTg3MiI+SDgvMzAwIGFkZHJlc3NpbmcgbW9kZXM8L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwXzAwMmRBZGRyZXNzaW5nLmh0bWwjSDhfMDAyZjMwMF8wMDJkQWRkcmVzc2luZyI+SDgvMzAwLUFkZHJlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtSDhfMDAyZjMwMC1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTg3NCI+SDgvMzAwIGZsb2F0aW5nIHBvaW50ICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtRmxvYXRpbmctUG9pbnQuaHRtbCNIOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Ij5IOC8zMDAgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwXzAwMmRDaGFycy5odG1sI2luZGV4LUg4XzAwMmYzMDAtbGluZS1jb21tZW50LWNoYXJhY3Rlci04NjUiPkg4LzMwMCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbCNIOF8wMDJmMzAwXzAwMmRDaGFycyI+SDgvMzAwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1IOF8wMDJmMzAwLWxpbmUtc2VwYXJhdG9yLTg2OCI+SDgvMzAwIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbCNIOF8wMDJmMzAwXzAwMmRDaGFycyI+SDgvMzAwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtSDhfMDAyZjMwMC1tYWNoaW5lLWRpcmVjdGl2ZXMtXzAwMjhub25lXzAwMjktODc1Ij5IOC8zMDAgbWFjaGluZSBkaXJlY3RpdmVzIChub25lKTwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI0g4XzAwMmYzMDAtRGlyZWN0aXZlcyI+SDgvMzAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLU9wY29kZXMuaHRtbCNpbmRleC1IOF8wMDJmMzAwLW9wY29kZS1zdW1tYXJ5LTg4MCI+SDgvMzAwIG9wY29kZSBzdW1tYXJ5PC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMC1PcGNvZGVzLmh0bWwjSDhfMDAyZjMwMC1PcGNvZGVzIj5IOC8zMDAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI2luZGV4LUg4XzAwMmYzMDAtb3B0aW9ucy04NjIiPkg4LzMwMCBvcHRpb25zPC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIj5IOC8zMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZFJlZ3MuaHRtbCNpbmRleC1IOF8wMDJmMzAwLXJlZ2lzdGVycy04NjkiPkg4LzMwMCByZWdpc3RlcnM8L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwXzAwMmRSZWdzLmh0bWwjSDhfMDAyZjMwMF8wMDJkUmVncyI+SDgvMzAwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLU9wY29kZXMuaHRtbCNpbmRleC1IOF8wMDJmMzAwLXNpemUtc3VmZml4ZXMtODg1Ij5IOC8zMDAgc2l6ZSBzdWZmaXhlczwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI0g4XzAwMmYzMDAtT3Bjb2RlcyI+SDgvMzAwIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1IOF8wMDJmMzAwLXN1cHBvcnQtODYxIj5IOC8zMDAgc3VwcG9ydDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCI+SDgvMzAwLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI2luZGV4LUg4XzAwMmYzMDBIXzAwMmMtYXNzZW1ibGluZy1mb3ItODc5Ij5IOC8zMDBILCBhc3NlbWJsaW5nIGZvcjwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI0g4XzAwMmYzMDAtRGlyZWN0aXZlcyI+SDgvMzAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaGFsZl8wMDdkLWRpcmVjdGl2ZV8wMDJjLUFSQy02MDQiPjxjb2RlPmhhbGY8L2NvZGU+IGRpcmVjdGl2ZSwgQVJDPC9hPjogPGEgaHJlZj0iQVJDLURpcmVjdGl2ZXMuaHRtbCNBUkMtRGlyZWN0aXZlcyI+QVJDIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaGFsZl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVNQQVJDLTE4MzYiPjxjb2RlPmhhbGY8L2NvZGU+IGRpcmVjdGl2ZSwgU1BBUkM8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sI1NwYXJjXzAwMmREaXJlY3RpdmVzIj5TcGFyYy1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JoYWxmXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MjAiPjxjb2RlPmhhbGY8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNpbmRleC1oZXgtY2hhcmFjdGVyLWNvZGUtXzAwMjhfMDA0MGNvZGVfMDA3Yl8wMDVjXzAwNDB2YXJfMDA3YnhkXzAwMmVfMDAyZV8wMDJlXzAwN2RfMDA3ZF8wMDI5LTE1OSI+aGV4IGNoYXJhY3RlciBjb2RlICg8Y29kZT5cPC9jb2RlPjx2YXI+eGQuLi48L3Zhcj4pPC9hPjogPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnRlZ2Vycy5odG1sI2luZGV4LWhleGFkZWNpbWFsLWludGVnZXJzLTE3NyI+aGV4YWRlY2ltYWwgaW50ZWdlcnM8L2E+OiA8YSBocmVmPSJJbnRlZ2Vycy5odG1sI0ludGVnZXJzIj5JbnRlZ2VyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1oZXhhZGVjaW1hbC1wcmVmaXhfMDAyYy1aODAtMjA2NiI+aGV4YWRlY2ltYWwgcHJlZml4LCBaODA8L2E+OiA8YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjWjgwXzAwMmRDaGFycyI+WjgwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRkaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JoZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjE0MiI+PGNvZGU+aGZsb2F0PC9jb2RlPiBkaXJlY3RpdmUsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI1ZBWF8wMDJkZGlyZWN0aXZlcyI+VkFYLWRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmhpXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVY4NTAtMjIxOSI+PGNvZGU+aGk8L2NvZGU+IHBzZXVkby1vcCwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI1Y4NTAtT3Bjb2RlcyI+Vjg1MCBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcGNvZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JoaTBfMDA3ZC1wc2V1ZG9fMDAyZG9wXzAwMmMtVjg1MC0yMjE3Ij48Y29kZT5oaTA8L2NvZGU+IHBzZXVkby1vcCwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI1Y4NTAtT3Bjb2RlcyI+Vjg1MCBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSGlkZGVuLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JoaWRkZW5fMDA3ZC1kaXJlY3RpdmUtMzQ2Ij48Y29kZT5oaWRkZW48L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkhpZGRlbi5odG1sI0hpZGRlbiI+SGlkZGVuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaGlnaF8wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlItMTIyNSI+PGNvZGU+aGlnaDwvY29kZT4gZGlyZWN0aXZlLCBNMzJSPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI00zMlJfMDAyZERpcmVjdGl2ZXMiPk0zMlItRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaGlsb18wMDdkLXBzZXVkb18wMDJkb3BfMDAyYy1WODUwLTIyMjAiPjxjb2RlPmhpbG88L2NvZGU+IHBzZXVkby1vcCwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI1Y4NTAtT3Bjb2RlcyI+Vjg1MCBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtSFBQQS1kaXJlY3RpdmVzLW5vdC1zdXBwb3J0ZWQtODkwIj5IUFBBIGRpcmVjdGl2ZXMgbm90IHN1cHBvcnRlZDwvYT46IDxhIGhyZWY9IkhQUEEtRGlyZWN0aXZlcy5odG1sI0hQUEEtRGlyZWN0aXZlcyI+SFBQQSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1GbG9hdGluZy1Qb2ludC5odG1sI2luZGV4LUhQUEEtZmxvYXRpbmctcG9pbnQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS04ODkiPkhQUEEgZmxvYXRpbmcgcG9pbnQgKDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4pPC9hPjogPGEgaHJlZj0iSFBQQS1GbG9hdGluZy1Qb2ludC5odG1sI0hQUEEtRmxvYXRpbmctUG9pbnQiPkhQUEEgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1IUFBBLVN5bnRheC04ODciPkhQUEEgU3ludGF4PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1IUFBBXzAwMmRvbmx5LWRpcmVjdGl2ZXMtODkyIj5IUFBBLW9ubHkgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IkhQUEEtRGlyZWN0aXZlcy5odG1sI0hQUEEtRGlyZWN0aXZlcyI+SFBQQSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaHdvcmQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymh3b3JkXzAwN2QtZGlyZWN0aXZlLTM0OCI+PGNvZGU+aHdvcmQ8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9Imh3b3JkLmh0bWwjaHdvcmQiPmh3b3JkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LWkzNzAtc3VwcG9ydC04OTQiPmkzNzAgc3VwcG9ydDwvYT46IDxhIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5FU0EvMzkwLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaW5kZXgtaTM4Ni0xNl8wMDJkYml0LWNvZGUtMTA1MiI+aTM4NiAxNi1iaXQgY29kZTwvYT46IDxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaTM4Nl8wMDJkMTZiaXQiPmkzODYtMTZiaXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRBcmNoLmh0bWwjaW5kZXgtaTM4Ni1hcmNoLWRpcmVjdGl2ZS0xMDYxIj5pMzg2IGFyY2ggZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkQXJjaC5odG1sI2kzODZfMDAyZEFyY2giPmkzODYtQXJjaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1pMzg2LWF0dF8wMDVmc3ludGF4LXBzZXVkby1vcC05MzUiPmkzODYgYXR0X3N5bnRheCBwc2V1ZG8gb3A8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaW5kZXgtaTM4Ni1jb252ZXJzaW9uLWluc3RydWN0aW9ucy05ODkiPmkzODYgY29udmVyc2lvbiBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpMzg2XzAwMmRNbmVtb25pY3MiPmkzODYtTW5lbW9uaWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpbmRleC1pMzg2LWZsb2F0aW5nLXBvaW50LTEwMjAiPmkzODYgZmxvYXRpbmcgcG9pbnQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij5pMzg2LUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LWkzODYtaW1tZWRpYXRlLW9wZXJhbmRzLTk0NiI+aTM4NiBpbW1lZGlhdGUgb3BlcmFuZHM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaW5kZXgtaTM4Ni1pbnN0cnVjdGlvbi1uYW1pbmctOTgyIj5pMzg2IGluc3RydWN0aW9uIG5hbWluZzwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+aTM4Ni1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2luZGV4LWkzODYtaW5zdHJ1Y3Rpb24tcHJlZml4ZXMtMTAwMiI+aTM4NiBpbnN0cnVjdGlvbiBwcmVmaXhlczwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaTM4Nl8wMDJkUHJlZml4ZXMiPmkzODYtUHJlZml4ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgtaTM4Ni1pbnRlbF8wMDVmc3ludGF4LXBzZXVkby1vcC05MzMiPmkzODYgaW50ZWxfc3ludGF4IHBzZXVkbyBvcDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpMzg2XzAwMmRWYXJpYXRpb25zIj5pMzg2LVZhcmlhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRKdW1wcy5odG1sI2luZGV4LWkzODYtanVtcC1vcHRpbWl6YXRpb24tMTAxNyI+aTM4NiBqdW1wIG9wdGltaXphdGlvbjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEp1bXBzLmh0bWwjaTM4Nl8wMDJkSnVtcHMiPmkzODYtSnVtcHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgtaTM4Ni1qdW1wXzAwMmMtY2FsbF8wMDJjLXJldHVybi05NzAiPmkzODYganVtcCwgY2FsbCwgcmV0dXJuPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1pMzg2LWp1bXBfMDAyZmNhbGwtb3BlcmFuZHMtOTUwIj5pMzg2IGp1bXAvY2FsbCBvcGVyYW5kczwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpMzg2XzAwMmRWYXJpYXRpb25zIj5pMzg2LVZhcmlhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRDaGFycy5odG1sI2luZGV4LWkzODYtbGluZS1jb21tZW50LWNoYXJhY3Rlci05NzgiPmkzODYgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZENoYXJzLmh0bWwjaTM4Nl8wMDJkQ2hhcnMiPmkzODYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRDaGFycy5odG1sI2luZGV4LWkzODYtbGluZS1zZXBhcmF0b3ItOTgxIj5pMzg2IGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkQ2hhcnMuaHRtbCNpMzg2XzAwMmRDaGFycyI+aTM4Ni1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2luZGV4LWkzODYtbWVtb3J5LXJlZmVyZW5jZXMtMTAxMiI+aTM4NiBtZW1vcnkgcmVmZXJlbmNlczwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2kzODZfMDAyZE1lbW9yeSI+aTM4Ni1NZW1vcnk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpbmRleC1pMzg2LW1uZW1vbmljLWNvbXBhdGliaWxpdHktOTk2Ij5pMzg2IG1uZW1vbmljIGNvbXBhdGliaWxpdHk8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpMzg2XzAwMmRNbmVtb25pY3MiPmkzODYtTW5lbW9uaWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTm90ZXMuaHRtbCNpbmRleC1pMzg2LV8wMDQwY29kZV8wMDdibXVsXzAwN2RfMDAyYy1fMDA0MGNvZGVfMDA3YmltdWxfMDA3ZC1pbnN0cnVjdGlvbnMtMTA2NCI+aTM4NiA8Y29kZT5tdWw8L2NvZGU+LCA8Y29kZT5pbXVsPC9jb2RlPiBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmROb3Rlcy5odG1sI2kzODZfMDAyZE5vdGVzIj5pMzg2LU5vdGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LWkzODYtb3B0aW9ucy05MDUiPmkzODYgb3B0aW9uczwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgtaTM4Ni1yZWdpc3Rlci1vcGVyYW5kcy05NDgiPmkzODYgcmVnaXN0ZXIgb3BlcmFuZHM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkUmVncy5odG1sI2luZGV4LWkzODYtcmVnaXN0ZXJzLTk5OCI+aTM4NiByZWdpc3RlcnM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRSZWdzLmh0bWwjaTM4Nl8wMDJkUmVncyI+aTM4Ni1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LWkzODYtc2VjdGlvbnMtOTc0Ij5pMzg2IHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1pMzg2LXNpemUtc3VmZml4ZXMtOTY1Ij5pMzg2IHNpemUgc3VmZml4ZXM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LWkzODYtc291cmNlXzAwMmMtZGVzdGluYXRpb24tb3BlcmFuZHMtOTU5Ij5pMzg2IHNvdXJjZSwgZGVzdGluYXRpb24gb3BlcmFuZHM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtaTM4Ni1zdXBwb3J0LTkwMCI+aTM4NiBzdXBwb3J0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1pMzg2LXN5bnRheC1jb21wYXRpYmlsaXR5LTkzNyI+aTM4NiBzeW50YXggY29tcGF0aWJpbGl0eTwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpMzg2XzAwMmRWYXJpYXRpb25zIj5pMzg2LVZhcmlhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1pODAzODYtc3VwcG9ydC05MDEiPmk4MDM4NiBzdXBwb3J0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imk4NjBfMDAyZENoYXJzLmh0bWwjaW5kZXgtaTg2MC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTEwNzgiPmk4NjAgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9Imk4NjBfMDAyZENoYXJzLmh0bWwjaTg2MF8wMDJkQ2hhcnMiPmk4NjAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpODYwXzAwMmRDaGFycy5odG1sI2luZGV4LWk4NjAtbGluZS1zZXBhcmF0b3ItMTA4MSI+aTg2MCBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9Imk4NjBfMDAyZENoYXJzLmh0bWwjaTg2MF8wMDJkQ2hhcnMiPmk4NjAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpODYwLmh0bWwjaW5kZXgtaTg2MC1tYWNoaW5lLWRpcmVjdGl2ZXMtMTA3MSI+aTg2MCBtYWNoaW5lIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpODYwLmh0bWwjRGlyZWN0aXZlc18wMDJkaTg2MCI+RGlyZWN0aXZlcy1pODYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3Bjb2Rlcy1mb3ItaTg2MC5odG1sI2luZGV4LWk4NjAtb3Bjb2Rlcy0xMDc2Ij5pODYwIG9wY29kZXM8L2E+OiA8YSBocmVmPSJPcGNvZGVzLWZvci1pODYwLmh0bWwjT3Bjb2Rlcy1mb3ItaTg2MCI+T3Bjb2RlcyBmb3IgaTg2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imk4NjBfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LWk4NjAtc3VwcG9ydC0xMDY5Ij5pODYwIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJpODYwXzAwMmREZXBlbmRlbnQuaHRtbCNpODYwXzAwMmREZXBlbmRlbnQiPmk4NjAtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9uc18wMDJkaTk2MC5odG1sI2luZGV4LWk5NjAtYXJjaGl0ZWN0dXJlLW9wdGlvbnMtMTA4NSI+aTk2MCBhcmNoaXRlY3R1cmUgb3B0aW9uczwvYT46IDxhIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNPcHRpb25zXzAwMmRpOTYwIj5PcHRpb25zLWk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjaW5kZXgtaTk2MC1icmFuY2gtcmVjb3JkaW5nLTEwOTAiPmk5NjAgYnJhbmNoIHJlY29yZGluZzwvYT46IDxhIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNPcHRpb25zXzAwMmRpOTYwIj5PcHRpb25zLWk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYWxsal8wMDJkaTk2MC5odG1sI2luZGV4LWk5NjAtXzAwNDBjb2RlXzAwN2JjYWxsal8wMDdkLXBzZXVkb18wMDJkb3Bjb2RlLTExMDUiPmk5NjAgPGNvZGU+Y2FsbGo8L2NvZGU+IHBzZXVkby1vcGNvZGU8L2E+OiA8YSBocmVmPSJjYWxsal8wMDJkaTk2MC5odG1sI2NhbGxqXzAwMmRpOTYwIj5jYWxsai1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAuaHRtbCNpbmRleC1pOTYwLWNvbXBhcmUtYW5kLWp1bXAtZXhwYW5zaW9ucy0xMTA5Ij5pOTYwIGNvbXBhcmUgYW5kIGp1bXAgZXhwYW5zaW9uczwvYT46IDxhIGhyZWY9IkNvbXBhcmVfMDAyZGFuZF8wMDJkYnJhbmNoXzAwMmRpOTYwLmh0bWwjQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAiPkNvbXBhcmUtYW5kLWJyYW5jaC1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAuaHRtbCNpbmRleC1pOTYwLWNvbXBhcmVfMDAyZmJyYW5jaC1pbnN0cnVjdGlvbnMtMTEwNiI+aTk2MCBjb21wYXJlL2JyYW5jaCBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJDb21wYXJlXzAwMmRhbmRfMDAyZGJyYW5jaF8wMDJkaTk2MC5odG1sI0NvbXBhcmVfMDAyZGFuZF8wMDJkYnJhbmNoXzAwMmRpOTYwIj5Db21wYXJlLWFuZC1icmFuY2gtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZsb2F0aW5nLVBvaW50XzAwMmRpOTYwLmh0bWwjaW5kZXgtaTk2MC1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTEwOTUiPmk5NjAgZmxvYXRpbmcgcG9pbnQgKDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4pPC9hPjogPGEgaHJlZj0iRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAuaHRtbCNGbG9hdGluZy1Qb2ludF8wMDJkaTk2MCI+RmxvYXRpbmcgUG9pbnQtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imk5NjBfMDAyZENoYXJzLmh0bWwjaW5kZXgtaTk2MC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTExMTEiPmk5NjAgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9Imk5NjBfMDAyZENoYXJzLmh0bWwjaTk2MF8wMDJkQ2hhcnMiPmk5NjAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpOTYwXzAwMmRDaGFycy5odG1sI2luZGV4LWk5NjAtbGluZS1zZXBhcmF0b3ItMTExNCI+aTk2MCBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9Imk5NjBfMDAyZENoYXJzLmh0bWwjaTk2MF8wMDJkQ2hhcnMiPmk5NjAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpOTYwLmh0bWwjaW5kZXgtaTk2MC1tYWNoaW5lLWRpcmVjdGl2ZXMtMTA5NyI+aTk2MCBtYWNoaW5lIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpOTYwLmh0bWwjRGlyZWN0aXZlc18wMDJkaTk2MCI+RGlyZWN0aXZlcy1pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3Bjb2Rlcy1mb3ItaTk2MC5odG1sI2luZGV4LWk5NjAtb3Bjb2Rlcy0xMTAzIj5pOTYwIG9wY29kZXM8L2E+OiA8YSBocmVmPSJPcGNvZGVzLWZvci1pOTYwLmh0bWwjT3Bjb2Rlcy1mb3ItaTk2MCI+T3Bjb2RlcyBmb3IgaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNpbmRleC1pOTYwLW9wdGlvbnMtMTA4MyI+aTk2MCBvcHRpb25zPC9hPjogPGEgaHJlZj0iT3B0aW9uc18wMDJkaTk2MC5odG1sI09wdGlvbnNfMDAyZGk5NjAiPk9wdGlvbnMtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imk5NjBfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LWk5NjAtc3VwcG9ydC0xMDgyIj5pOTYwIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJpOTYwXzAwMmREZXBlbmRlbnQuaHRtbCNpOTYwXzAwMmREZXBlbmRlbnQiPmk5NjAtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRDaGFycy5odG1sI2luZGV4LUlBXzAwMmQ2NC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTExMjEiPklBLTY0IGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJJQV8wMDJkNjRfMDAyZENoYXJzLmh0bWwjSUFfMDAyZDY0XzAwMmRDaGFycyI+SUEtNjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjRfMDAyZENoYXJzLmh0bWwjaW5kZXgtSUFfMDAyZDY0LWxpbmUtc2VwYXJhdG9yLTExMjQiPklBLTY0IGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRDaGFycy5odG1sI0lBXzAwMmQ2NF8wMDJkQ2hhcnMiPklBLTY0LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1JQV8wMDJkNjQtb3B0aW9ucy0xMTE2Ij5JQS02NCBvcHRpb25zPC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NF8wMDJkQml0cy5odG1sI2luZGV4LUlBXzAwMmQ2NC1Qcm9jZXNzb3JfMDAyZHN0YXR1c18wMDJkUmVnaXN0ZXItYml0LW5hbWVzLTExMjciPklBLTY0IFByb2Nlc3Nvci1zdGF0dXMtUmVnaXN0ZXIgYml0IG5hbWVzPC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRCaXRzLmh0bWwjSUFfMDAyZDY0XzAwMmRCaXRzIj5JQS02NC1CaXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRSZWdzLmh0bWwjaW5kZXgtSUFfMDAyZDY0LXJlZ2lzdGVycy0xMTI1Ij5JQS02NCByZWdpc3RlcnM8L2E+OiA8YSBocmVmPSJJQV8wMDJkNjRfMDAyZFJlZ3MuaHRtbCNJQV8wMDJkNjRfMDAyZFJlZ3MiPklBLTY0LVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjRfMDAyZFJlbG9jcy5odG1sI2luZGV4LUlBXzAwMmQ2NC1yZWxvY2F0aW9ucy0xMTMwIj5JQS02NCByZWxvY2F0aW9uczwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NF8wMDJkUmVsb2NzLmh0bWwjSUFfMDAyZDY0XzAwMmRSZWxvY3MiPklBLTY0LVJlbG9jczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtSUFfMDAyZDY0LXN1cHBvcnQtMTExNSI+SUEtNjQgc3VwcG9ydDwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Lmh0bWwjSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQiPklBLTY0LURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtSUFfMDAyZDY0LVN5bnRheC0xMTE5Ij5JQS02NCBTeW50YXg8L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWRlbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlkZW50XzAwN2QtZGlyZWN0aXZlLTM1MiI+PGNvZGU+aWRlbnQ8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklkZW50Lmh0bWwjSWRlbnQiPklkZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI2luZGV4LWlkZW50aWZpZXJzXzAwMmMtQVJNLTY0MSI+aWRlbnRpZmllcnMsIEFSTTwvYT46IDxhIGhyZWY9IkFSTV8wMDJkQ2hhcnMuaHRtbCNBUk1fMDAyZENoYXJzIj5BUk0tQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzBfMDAyZENoYXJzLmh0bWwjaW5kZXgtaWRlbnRpZmllcnNfMDAyYy1NU1AtNDMwLTE1MDYiPmlkZW50aWZpZXJzLCBNU1AgNDMwPC9hPjogPGEgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI01TUDQzMF8wMDJkQ2hhcnMiPk1TUDQzMC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklmLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZl8wMDdkLWRpcmVjdGl2ZS0zNTQiPjxjb2RlPmlmPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJZi5odG1sI0lmIj5JZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklmLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZmJfMDA3ZC1kaXJlY3RpdmUtMzU2Ij48Y29kZT5pZmI8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmY18wMDdkLWRpcmVjdGl2ZS0zNTciPjxjb2RlPmlmYzwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iSWYuaHRtbCNJZiI+SWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJZi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZkZWZfMDA3ZC1kaXJlY3RpdmUtMzU1Ij48Y29kZT5pZmRlZjwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iSWYuaHRtbCNJZiI+SWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJZi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZlcV8wMDdkLWRpcmVjdGl2ZS0zNTgiPjxjb2RlPmlmZXE8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmZXFzXzAwN2QtZGlyZWN0aXZlLTM1OSI+PGNvZGU+aWZlcXM8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmZ2VfMDA3ZC1kaXJlY3RpdmUtMzYwIj48Y29kZT5pZmdlPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJZi5odG1sI0lmIj5JZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklmLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZmd0XzAwN2QtZGlyZWN0aXZlLTM2MSI+PGNvZGU+aWZndDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iSWYuaHRtbCNJZiI+SWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJZi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZsZV8wMDdkLWRpcmVjdGl2ZS0zNjIiPjxjb2RlPmlmbGU8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmbHRfMDA3ZC1kaXJlY3RpdmUtMzYzIj48Y29kZT5pZmx0PC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJZi5odG1sI0lmIj5JZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklmLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZm5iXzAwN2QtZGlyZWN0aXZlLTM2NCI+PGNvZGU+aWZuYjwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iSWYuaHRtbCNJZiI+SWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJZi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZuY18wMDdkLWRpcmVjdGl2ZS0zNjUiPjxjb2RlPmlmbmM8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmbmRlZl8wMDdkLWRpcmVjdGl2ZS0zNjYiPjxjb2RlPmlmbmRlZjwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iSWYuaHRtbCNJZiI+SWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJZi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZuZV8wMDdkLWRpcmVjdGl2ZS0zNjgiPjxjb2RlPmlmbmU8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmbmVzXzAwN2QtZGlyZWN0aXZlLTM2OSI+PGNvZGU+aWZuZXM8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymlmbm90ZGVmXzAwN2QtZGlyZWN0aXZlLTM2NyI+PGNvZGU+aWZub3RkZWY8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1pbW1lZGlhdGUtY2hhcmFjdGVyXzAwMmMtQUFyY2g2NC01MjYiPmltbWVkaWF0ZSBjaGFyYWN0ZXIsIEFBcmNoNjQ8L2E+OiA8YSBocmVmPSJBQXJjaDY0XzAwMmRDaGFycy5odG1sI0FBcmNoNjRfMDAyZENoYXJzIj5BQXJjaDY0LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI2luZGV4LWltbWVkaWF0ZS1jaGFyYWN0ZXJfMDAyYy1BUk0tNjM5Ij5pbW1lZGlhdGUgY2hhcmFjdGVyLCBBUk08L2E+OiA8YSBocmVmPSJBUk1fMDAyZENoYXJzLmh0bWwjQVJNXzAwMmRDaGFycyI+QVJNLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkQ2hhcnMuaHRtbCNpbmRleC1pbW1lZGlhdGUtY2hhcmFjdGVyXzAwMmMtTTY4MHgwLTEyOTIiPmltbWVkaWF0ZSBjaGFyYWN0ZXIsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjTTY4S18wMDJkQ2hhcnMiPk02OEstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZG9wZXJhbmRzLmh0bWwjaW5kZXgtaW1tZWRpYXRlLWNoYXJhY3Rlcl8wMDJjLVZBWC0yMTUxIj5pbW1lZGlhdGUgY2hhcmFjdGVyLCBWQVg8L2E+OiA8YSBocmVmPSJWQVhfMDAyZG9wZXJhbmRzLmh0bWwjVkFYXzAwMmRvcGVyYW5kcyI+VkFYLW9wZXJhbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uLmh0bWwjaW5kZXgtaW1tZWRpYXRlLWZpZWxkc18wMDJjLXJlbGF4YXRpb24tMjMwNCI+aW1tZWRpYXRlIGZpZWxkcywgcmVsYXhhdGlvbjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbiI+WHRlbnNhIEltbWVkaWF0ZSBSZWxheGF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LWltbWVkaWF0ZS1vcGVyYW5kc18wMDJjLWkzODYtOTQ1Ij5pbW1lZGlhdGUgb3BlcmFuZHMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LWltbWVkaWF0ZS1vcGVyYW5kc18wMDJjLXg4Nl8wMDJkNjQtOTUyIj5pbW1lZGlhdGUgb3BlcmFuZHMsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpMzg2XzAwMmRWYXJpYXRpb25zIj5pMzg2LVZhcmlhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmROb3Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaW11bF8wMDdkLWluc3RydWN0aW9uXzAwMmMtaTM4Ni0xMDY2Ij48Y29kZT5pbXVsPC9jb2RlPiBpbnN0cnVjdGlvbiwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE5vdGVzLmh0bWwjaTM4Nl8wMDJkTm90ZXMiPmkzODYtTm90ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmROb3Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaW11bF8wMDdkLWluc3RydWN0aW9uXzAwMmMteDg2XzAwMmQ2NC0xMDY4Ij48Y29kZT5pbXVsPC9jb2RlPiBpbnN0cnVjdGlvbiwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkTm90ZXMuaHRtbCNpMzg2XzAwMmROb3RlcyI+aTM4Ni1Ob3RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY2Jpbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaW5jYmluXzAwN2QtZGlyZWN0aXZlLTM3MCI+PGNvZGU+aW5jYmluPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJbmNiaW4uaHRtbCNJbmNiaW4iPkluY2JpbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY2x1ZGUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmluY2x1ZGVfMDA3ZC1kaXJlY3RpdmUtMzcyIj48Y29kZT5pbmNsdWRlPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJbmNsdWRlLmh0bWwjSW5jbHVkZSI+SW5jbHVkZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkkuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmluY2x1ZGVfMDA3ZC1kaXJlY3RpdmUtc2VhcmNoLXBhdGgtNjUiPjxjb2RlPmluY2x1ZGU8L2NvZGU+IGRpcmVjdGl2ZSBzZWFyY2ggcGF0aDwvYT46IDxhIGhyZWY9IkkuaHRtbCNJIj5JPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI2luZGV4LWluZGlyZWN0LWNoYXJhY3Rlcl8wMDJjLVZBWC0yMTUzIj5pbmRpcmVjdCBjaGFyYWN0ZXIsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkb3BlcmFuZHMuaHRtbCNWQVhfMDAyZG9wZXJhbmRzIj5WQVgtb3BlcmFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNpbmRleC1pbmZpeC1vcGVyYXRvcnMtMjU3Ij5pbmZpeCBvcGVyYXRvcnM8L2E+OiA8YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNJbmZpeC1PcHMiPkluZml4IE9wczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaW5kZXgtaW5oaWJpdGluZy1pbnRlcnJ1cHRzXzAwMmMtaTM4Ni0xMDA4Ij5pbmhpYml0aW5nIGludGVycnVwdHMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2kzODZfMDAyZFByZWZpeGVzIj5pMzg2LVByZWZpeGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtRmlsZXMuaHRtbCNpbmRleC1pbnB1dC0yOSI+aW5wdXQ8L2E+OiA8YSBocmVmPSJJbnB1dC1GaWxlcy5odG1sI0lucHV0LUZpbGVzIj5JbnB1dCBGaWxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklucHV0LUZpbGVzLmh0bWwjaW5kZXgtaW5wdXQtZmlsZS1saW5lbnVtYmVycy0zMiI+aW5wdXQgZmlsZSBsaW5lbnVtYmVyczwvYT46IDxhIGhyZWY9IklucHV0LUZpbGVzLmh0bWwjSW5wdXQtRmlsZXMiPklucHV0IEZpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1BbGlhc2VzLmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tYWxpYXNlc18wMDJjLXMzOTAtMTcwMyI+aW5zdHJ1Y3Rpb24gYWxpYXNlcywgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtQWxpYXNlcy5odG1sI3MzOTAtQWxpYXNlcyI+czM5MCBBbGlhc2VzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVuZGxlLWRpcmVjdGl2ZXMuaHRtbCNpbmRleC1pbnN0cnVjdGlvbi1idW5kbGUtMjkyIj5pbnN0cnVjdGlvbiBidW5kbGU8L2E+OiA8YSBocmVmPSJCdW5kbGUtZGlyZWN0aXZlcy5odG1sI0J1bmRsZS1kaXJlY3RpdmVzIj5CdW5kbGUgZGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZEV4cGFuZC5odG1sI2luZGV4LWluc3RydWN0aW9uLWV4cGFuc2lvbl8wMDJjLUNSSVMtNzY5Ij5pbnN0cnVjdGlvbiBleHBhbnNpb24sIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRFeHBhbmQuaHRtbCNDUklTXzAwMmRFeHBhbmQiPkNSSVMtRXhwYW5kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkRXhwYW5kLmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tZXhwYW5zaW9uXzAwMmMtTU1JWC0xNDQwIj5pbnN0cnVjdGlvbiBleHBhbnNpb24sIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRFeHBhbmQuaHRtbCNNTUlYXzAwMmRFeHBhbmQiPk1NSVgtRXhwYW5kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1Gb3JtYXRzLmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tZm9ybWF0c18wMDJjLXMzOTAtMTcwMSI+aW5zdHJ1Y3Rpb24gZm9ybWF0cywgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtRm9ybWF0cy5odG1sI3MzOTAtRm9ybWF0cyI+czM5MCBGb3JtYXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIuaHRtbCNpbmRleC1pbnN0cnVjdGlvbi1tYXJrZXJfMDAyYy1zMzkwLTE3MDciPmluc3RydWN0aW9uIG1hcmtlciwgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtSW5zdHJ1Y3Rpb24tTWFya2VyLmh0bWwjczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIiPnMzOTAgSW5zdHJ1Y3Rpb24gTWFya2VyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1NbmVtb25pY3MuaHRtbCNpbmRleC1pbnN0cnVjdGlvbi1tbmVtb25pY3NfMDAyYy1zMzkwLTE2OTciPmluc3RydWN0aW9uIG1uZW1vbmljcywgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtTW5lbW9uaWNzLmh0bWwjczM5MC1NbmVtb25pY3MiPnMzOTAgTW5lbW9uaWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tbmFtaW5nXzAwMmMtaTM4Ni05ODMiPmluc3RydWN0aW9uIG5hbWluZywgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+aTM4Ni1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpbmRleC1pbnN0cnVjdGlvbi1uYW1pbmdfMDAyYy14ODZfMDAyZDY0LTk4NSI+aW5zdHJ1Y3Rpb24gbmFtaW5nLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpMzg2XzAwMmRNbmVtb25pY3MiPmkzODYtTW5lbW9uaWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1PcGVyYW5kLU1vZGlmaWVyLmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tb3BlcmFuZC1tb2RpZmllcl8wMDJjLXMzOTAtMTcwNSI+aW5zdHJ1Y3Rpb24gb3BlcmFuZCBtb2RpZmllciwgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtT3BlcmFuZC1Nb2RpZmllci5odG1sI3MzOTAtT3BlcmFuZC1Nb2RpZmllciI+czM5MCBPcGVyYW5kIE1vZGlmaWVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1PcGVyYW5kcy5odG1sI2luZGV4LWluc3RydWN0aW9uLW9wZXJhbmRzXzAwMmMtczM5MC0xNjk5Ij5pbnN0cnVjdGlvbiBvcGVyYW5kcywgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtT3BlcmFuZHMuaHRtbCNzMzkwLU9wZXJhbmRzIj5zMzkwIE9wZXJhbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkUHJlZml4ZXMuaHRtbCNpbmRleC1pbnN0cnVjdGlvbi1wcmVmaXhlc18wMDJjLWkzODYtMTAwMyI+aW5zdHJ1Y3Rpb24gcHJlZml4ZXMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2kzODZfMDAyZFByZWZpeGVzIj5pMzg2LVByZWZpeGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkb3Bjb2Rlcy5odG1sI2luZGV4LWluc3RydWN0aW9uLXNldF8wMDJjLU02ODB4MC0xMjgyIj5pbnN0cnVjdGlvbiBzZXQsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZG9wY29kZXMuaHRtbCNNNjhLXzAwMmRvcGNvZGVzIj5NNjhLLW9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRvcGNvZGVzLmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tc2V0XzAwMmMtTTY4SEMxMS0xMzQ4Ij5pbnN0cnVjdGlvbiBzZXQsIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRvcGNvZGVzLmh0bWwjTTY4SEMxMV8wMDJkb3Bjb2RlcyI+TTY4SEMxMS1vcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZG9wY29kZXMuaHRtbCNpbmRleC1pbnN0cnVjdGlvbi1zZXRfMDAyYy1YR0FURS0yMjU0Ij5pbnN0cnVjdGlvbiBzZXQsIFhHQVRFPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZG9wY29kZXMuaHRtbCNYR0FURV8wMDJkb3Bjb2RlcyI+WEdBVEUtb3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcGNvZGVzLmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tc3VtbWFyeV8wMDJjLUFWUi03MjUiPmluc3RydWN0aW9uIHN1bW1hcnksIEFWUjwvYT46IDxhIGhyZWY9IkFWUi1PcGNvZGVzLmh0bWwjQVZSLU9wY29kZXMiPkFWUiBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkT3Bjb2Rlcy5odG1sI2luZGV4LWluc3RydWN0aW9uLXN1bW1hcnlfMDAyYy1EMTBWLTgyNCI+aW5zdHJ1Y3Rpb24gc3VtbWFyeSwgRDEwVjwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZE9wY29kZXMuaHRtbCNEMTBWXzAwMmRPcGNvZGVzIj5EMTBWLU9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRPcGNvZGVzLmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tc3VtbWFyeV8wMDJjLUQzMFYtODUwIj5pbnN0cnVjdGlvbiBzdW1tYXJ5LCBEMzBWPC9hPjogPGEgaHJlZj0iRDMwVl8wMDJkT3Bjb2Rlcy5odG1sI0QzMFZfMDAyZE9wY29kZXMiPkQzMFYtT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI2luZGV4LWluc3RydWN0aW9uLXN1bW1hcnlfMDAyYy1IOF8wMDJmMzAwLTg4MyI+aW5zdHJ1Y3Rpb24gc3VtbWFyeSwgSDgvMzAwPC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMC1PcGNvZGVzLmh0bWwjSDhfMDAyZjMwMC1PcGNvZGVzIj5IOC8zMDAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3Bjb2Rlcy5odG1sI2luZGV4LWluc3RydWN0aW9uLXN1bW1hcnlfMDAyYy1MTTMyLTExNzAiPmluc3RydWN0aW9uIHN1bW1hcnksIExNMzI8L2E+OiA8YSBocmVmPSJMTTMyLU9wY29kZXMuaHRtbCNMTTMyLU9wY29kZXMiPkxNMzIgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wY29kZXMuaHRtbCNpbmRleC1pbnN0cnVjdGlvbi1zdW1tYXJ5XzAwMmMtU0gtMTc2MyI+aW5zdHJ1Y3Rpb24gc3VtbWFyeSwgU0g8L2E+OiA8YSBocmVmPSJTSC1PcGNvZGVzLmh0bWwjU0gtT3Bjb2RlcyI+U0ggT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNINjQtT3Bjb2Rlcy5odG1sI2luZGV4LWluc3RydWN0aW9uLXN1bW1hcnlfMDAyYy1TSDY0LTE3ODgiPmluc3RydWN0aW9uIHN1bW1hcnksIFNINjQ8L2E+OiA8YSBocmVmPSJTSDY0LU9wY29kZXMuaHRtbCNTSDY0LU9wY29kZXMiPlNINjQgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwLU9wY29kZXMuaHRtbCNpbmRleC1pbnN0cnVjdGlvbi1zdW1tYXJ5XzAwMmMtWjgwMDAtMjExMiI+aW5zdHJ1Y3Rpb24gc3VtbWFyeSwgWjgwMDA8L2E+OiA8YSBocmVmPSJaODAwMC1PcGNvZGVzLmh0bWwjWjgwMDAtT3Bjb2RlcyI+WjgwMDAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjaW5kZXgtaW5zdHJ1Y3Rpb24tc3ludGF4XzAwMmMtczM5MC0xNjkzIj5pbnN0cnVjdGlvbiBzeW50YXgsIHMzOTA8L2E+OiA8YSBocmVmPSJzMzkwLVN5bnRheC5odG1sI3MzOTAtU3ludGF4Ij5zMzkwIFN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNpbmRleC1pbnN0cnVjdGlvbnMtYW5kLWRpcmVjdGl2ZXMtMTM1Ij5pbnN0cnVjdGlvbnMgYW5kIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjU3RhdGVtZW50cyI+U3RhdGVtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaW50XzAwN2QtZGlyZWN0aXZlLTM3NSI+PGNvZGU+aW50PC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJbnQuaHRtbCNJbnQiPkludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaW50XzAwN2QtZGlyZWN0aXZlXzAwMmMtSDhfMDAyZjMwMC04NzgiPjxjb2RlPmludDwvY29kZT4gZGlyZWN0aXZlLCBIOC8zMDA8L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLURpcmVjdGl2ZXMuaHRtbCNIOF8wMDJmMzAwLURpcmVjdGl2ZXMiPkg4LzMwMCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmludF8wMDdkLWRpcmVjdGl2ZV8wMDJjLWkzODYtMTAzNCI+PGNvZGU+aW50PC9jb2RlPiBkaXJlY3RpdmUsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij5pMzg2LUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpbnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkyNCI+PGNvZGU+aW50PC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaW50XzAwN2QtZGlyZWN0aXZlXzAwMmMteDg2XzAwMmQ2NC0xMDM4Ij48Y29kZT5pbnQ8L2NvZGU+IGRpcmVjdGl2ZSwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkludGVnZXItRXhwcnMuaHRtbCNpbmRleC1pbnRlZ2VyLWV4cHJlc3Npb25zLTI0NiI+aW50ZWdlciBleHByZXNzaW9uczwvYT46IDxhIGhyZWY9IkludGVnZXItRXhwcnMuaHRtbCNJbnRlZ2VyLUV4cHJzIj5JbnRlZ2VyIEV4cHJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2N0YS5odG1sI2luZGV4LWludGVnZXJfMDAyYy0xNl8wMDJkYnl0ZS00MTQiPmludGVnZXIsIDE2LWJ5dGU8L2E+OiA8YSBocmVmPSJPY3RhLmh0bWwjT2N0YSI+T2N0YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlF1YWQuaHRtbCNpbmRleC1pbnRlZ2VyXzAwMmMtOF8wMDJkYnl0ZS00NDAiPmludGVnZXIsIDgtYnl0ZTwvYT46IDxhIGhyZWY9IlF1YWQuaHRtbCNRdWFkIj5RdWFkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW50ZWdlcnMuaHRtbCNpbmRleC1pbnRlZ2Vycy0xNjkiPmludGVnZXJzPC9hPjogPGEgaHJlZj0iSW50ZWdlcnMuaHRtbCNJbnRlZ2VycyI+SW50ZWdlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJod29yZC5odG1sI2luZGV4LWludGVnZXJzXzAwMmMtMTZfMDAyZGJpdC0zNDkiPmludGVnZXJzLCAxNi1iaXQ8L2E+OiA8YSBocmVmPSJod29yZC5odG1sI2h3b3JkIj5od29yZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkludC5odG1sI2luZGV4LWludGVnZXJzXzAwMmMtMzJfMDAyZGJpdC0zNzYiPmludGVnZXJzLCAzMi1iaXQ8L2E+OiA8YSBocmVmPSJJbnQuaHRtbCNJbnQiPkludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkludGVnZXJzLmh0bWwjaW5kZXgtaW50ZWdlcnNfMDAyYy1iaW5hcnktMTcyIj5pbnRlZ2VycywgYmluYXJ5PC9hPjogPGEgaHJlZj0iSW50ZWdlcnMuaHRtbCNJbnRlZ2VycyI+SW50ZWdlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnRlZ2Vycy5odG1sI2luZGV4LWludGVnZXJzXzAwMmMtZGVjaW1hbC0xNzYiPmludGVnZXJzLCBkZWNpbWFsPC9hPjogPGEgaHJlZj0iSW50ZWdlcnMuaHRtbCNJbnRlZ2VycyI+SW50ZWdlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnRlZ2Vycy5odG1sI2luZGV4LWludGVnZXJzXzAwMmMtaGV4YWRlY2ltYWwtMTc4Ij5pbnRlZ2VycywgaGV4YWRlY2ltYWw8L2E+OiA8YSBocmVmPSJJbnRlZ2Vycy5odG1sI0ludGVnZXJzIj5JbnRlZ2VyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkludGVnZXJzLmh0bWwjaW5kZXgtaW50ZWdlcnNfMDAyYy1vY3RhbC0xNzQiPmludGVnZXJzLCBvY3RhbDwvYT46IDxhIGhyZWY9IkludGVnZXJzLmh0bWwjSW50ZWdlcnMiPkludGVnZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnl0ZS5odG1sI2luZGV4LWludGVnZXJzXzAwMmMtb25lLWJ5dGUtMjk4Ij5pbnRlZ2Vycywgb25lIGJ5dGU8L2E+OiA8YSBocmVmPSJCeXRlLmh0bWwjQnl0ZSI+Qnl0ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1pbnRlbF8wMDVmc3ludGF4LXBzZXVkby1vcF8wMDJjLWkzODYtOTM0Ij5pbnRlbF9zeW50YXggcHNldWRvIG9wLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1pbnRlbF8wMDVmc3ludGF4LXBzZXVkby1vcF8wMDJjLXg4Nl8wMDJkNjQtOTQwIj5pbnRlbF9zeW50YXggcHNldWRvIG9wLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXMtU2VjdGlvbnMuaHRtbCNpbmRleC1pbnRlcm5hbC1hc3NlbWJsZXItc2VjdGlvbnMtMjAwIj5pbnRlcm5hbCBhc3NlbWJsZXIgc2VjdGlvbnM8L2E+OiA8YSBocmVmPSJBcy1TZWN0aW9ucy5odG1sI0FzLVNlY3Rpb25zIj5BcyBTZWN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkludGVybmFsLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpbnRlcm5hbF8wMDdkLWRpcmVjdGl2ZS0zNzciPjxjb2RlPmludGVybmFsPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJbnRlcm5hbC5odG1sI0ludGVybmFsIj5JbnRlcm5hbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWludmFsaWQtaW5wdXQtMjMzOCI+aW52YWxpZCBpbnB1dDwvYT46IDxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI0J1Zy1Dcml0ZXJpYSI+QnVnIENyaXRlcmlhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNpbmRleC1pbnZvY2F0aW9uLXN1bW1hcnktMSI+aW52b2NhdGlvbiBzdW1tYXJ5PC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUDJLXzAwMmRPcHRzLmh0bWwjaW5kZXgtSVAySy1hcmNoaXRlY3R1cmUtb3B0aW9ucy0xMTM2Ij5JUDJLIGFyY2hpdGVjdHVyZSBvcHRpb25zPC9hPjogPGEgaHJlZj0iSVAyS18wMDJkT3B0cy5odG1sI0lQMktfMDAyZE9wdHMiPklQMkstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZENoYXJzLmh0bWwjaW5kZXgtSVAySy1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTExNDEiPklQMksgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IklQMktfMDAyZENoYXJzLmh0bWwjSVAyS18wMDJkQ2hhcnMiPklQMkstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUDJLXzAwMmRDaGFycy5odG1sI2luZGV4LUlQMkstbGluZS1zZXBhcmF0b3ItMTE0NCI+SVAySyBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9IklQMktfMDAyZENoYXJzLmh0bWwjSVAyS18wMDJkQ2hhcnMiPklQMkstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUDJLXzAwMmRPcHRzLmh0bWwjaW5kZXgtSVAySy1vcHRpb25zLTExMzMiPklQMksgb3B0aW9uczwvYT46IDxhIGhyZWY9IklQMktfMDAyZE9wdHMuaHRtbCNJUDJLXzAwMmRPcHRzIj5JUDJLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUDJLXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1JUDJLLXN1cHBvcnQtMTEzMSI+SVAySyBzdXBwb3J0PC9hPjogPGEgaHJlZj0iSVAyS18wMDJkRGVwZW5kZW50Lmh0bWwjSVAyS18wMDJkRGVwZW5kZW50Ij5JUDJLLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklycC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaXJwXzAwN2QtZGlyZWN0aXZlLTM3OSI+PGNvZGU+aXJwPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJcnAuaHRtbCNJcnAiPklycDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklycGMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlycGNfMDA3ZC1kaXJlY3RpdmUtMzgwIj48Y29kZT5pcnBjPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJJcnBjLmh0bWwjSXJwYyI+SXJwYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNINjQtT3B0aW9ucy5odG1sI2luZGV4LUlTQS1vcHRpb25zXzAwMmMtU0g2NC0xNzY4Ij5JU0Egb3B0aW9ucywgU0g2NDwvYT46IDxhIGhyZWY9IlNINjQtT3B0aW9ucy5odG1sI1NINjQtT3B0aW9ucyI+U0g2NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUi5odG1sI2luZGV4LWpvaW5pbmctdGV4dC1hbmQtZGF0YS1zZWN0aW9ucy05MCI+am9pbmluZyB0ZXh0IGFuZCBkYXRhIHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iUi5odG1sI1IiPlI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpbmRleC1qdW1wLWluc3RydWN0aW9uc18wMDJjLWkzODYtOTkyIj5qdW1wIGluc3RydWN0aW9ucywgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+aTM4Ni1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpbmRleC1qdW1wLWluc3RydWN0aW9uc18wMDJjLXg4Nl8wMDJkNjQtOTk0Ij5qdW1wIGluc3RydWN0aW9ucywgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaTM4Nl8wMDJkTW5lbW9uaWNzIj5pMzg2LU1uZW1vbmljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEp1bXBzLmh0bWwjaW5kZXgtanVtcC1vcHRpbWl6YXRpb25fMDAyYy1pMzg2LTEwMTYiPmp1bXAgb3B0aW1pemF0aW9uLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkSnVtcHMuaHRtbCNpMzg2XzAwMmRKdW1wcyI+aTM4Ni1KdW1wczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEp1bXBzLmh0bWwjaW5kZXgtanVtcC1vcHRpbWl6YXRpb25fMDAyYy14ODZfMDAyZDY0LTEwMTgiPmp1bXAgb3B0aW1pemF0aW9uLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRKdW1wcy5odG1sI2kzODZfMDAyZEp1bXBzIj5pMzg2LUp1bXBzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LWp1bXBfMDAyZmNhbGwtb3BlcmFuZHNfMDAyYy1pMzg2LTk0OSI+anVtcC9jYWxsIG9wZXJhbmRzLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1qdW1wXzAwMmZjYWxsLW9wZXJhbmRzXzAwMmMteDg2XzAwMmQ2NC05NTYiPmp1bXAvY2FsbCBvcGVyYW5kcywgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiTDE2U0lfMDA3ZC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMDkiPjxjb2RlPkwxNlNJPC9jb2RlPiBpbnN0cnVjdGlvbnMsIHJlbGF4YXRpb248L2E+OiA8YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPlh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiTDE2VUlfMDA3ZC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMTAiPjxjb2RlPkwxNlVJPC9jb2RlPiBpbnN0cnVjdGlvbnMsIHJlbGF4YXRpb248L2E+OiA8YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPlh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiTDMySV8wMDdkLWluc3RydWN0aW9uc18wMDJjLXJlbGF4YXRpb24tMjMxMSI+PGNvZGU+TDMySTwvY29kZT4gaW5zdHJ1Y3Rpb25zLCByZWxheGF0aW9uPC9hPjogPGEgaHJlZj0iWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uIj5YdGVuc2EgSW1tZWRpYXRlIFJlbGF4YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ykw4VUlfMDA3ZC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMDgiPjxjb2RlPkw4VUk8L2NvZGU+IGluc3RydWN0aW9ucywgcmVsYXhhdGlvbjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbiI+WHRlbnNhIEltbWVkaWF0ZSBSZWxheGF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhdGVtZW50cy5odG1sI2luZGV4LWxhYmVsLV8wMDI4XzAwNDBjb2RlXzAwN2JfMDAzYV8wMDdkXzAwMjktMTM4Ij5sYWJlbCAoPGNvZGU+OjwvY29kZT4pPC9hPjogPGEgaHJlZj0iU3RhdGVtZW50cy5odG1sI1N0YXRlbWVudHMiPlN0YXRlbWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxhYmVsXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MjgiPjxjb2RlPmxhYmVsPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMYWJlbHMuaHRtbCNpbmRleC1sYWJlbHMtMjEwIj5sYWJlbHM8L2E+OiA8YSBocmVmPSJMYWJlbHMuaHRtbCNMYWJlbHMiPkxhYmVsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikxjb21tLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsY29tbV8wMDdkLWRpcmVjdGl2ZS0zODEiPjxjb2RlPmxjb21tPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJMY29tbS5odG1sI0xjb21tIj5MY29tbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxjb21tXzAwN2QtZGlyZWN0aXZlXzAwMmMtQ09GRi05MzIiPjxjb2RlPmxjb21tPC9jb2RlPiBkaXJlY3RpdmUsIENPRkY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmREaXJlY3RpdmVzLmh0bWwjaTM4Nl8wMDJkRGlyZWN0aXZlcyI+aTM4Ni1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0Lmh0bWwjaW5kZXgtbGQtMzkiPjxjb2RlPmxkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdC5odG1sI09iamVjdCI+T2JqZWN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxkb3VibGVfMDA3ZC1kaXJlY3RpdmUtTTY4MHgwLTEyNzEiPjxjb2RlPmxkb3VibGU8L2NvZGU+IGRpcmVjdGl2ZSBNNjgweDA8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0Ij5NNjhLLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxkb3VibGVfMDA3ZC1kaXJlY3RpdmUtTTY4SEMxMS0xMzQ1Ij48Y29kZT5sZG91YmxlPC9jb2RlPiBkaXJlY3RpdmUgTTY4SEMxMTwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZEZsb2F0Lmh0bWwjTTY4SEMxMV8wMDJkRmxvYXQiPk02OEhDMTEtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYR0FURV8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxkb3VibGVfMDA3ZC1kaXJlY3RpdmUtWEdBVEUtMjI1MiI+PGNvZGU+bGRvdWJsZTwvY29kZT4gZGlyZWN0aXZlIFhHQVRFPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjWEdBVEVfMDAyZEZsb2F0Ij5YR0FURS1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibGRvdWJsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTA1Ij48Y29kZT5sZG91YmxlPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU9wY29kZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkxEUi1yZWdfMDAyY18wMDNkXzAwM2NleHByXzAwM2VfMDA3ZC1wc2V1ZG8tb3BfMDAyYy1BQXJjaDY0LTU0NSI+PGNvZGU+TERSIHJlZyw9Jmx0O2V4cHImZ3Q7PC9jb2RlPiBwc2V1ZG8gb3AsIEFBcmNoNjQ8L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wY29kZXMuaHRtbCNBQXJjaDY0LU9wY29kZXMiPkFBcmNoNjQgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMRFItcmVnXzAwMmNfMDAzZF8wMDNjbGFiZWxfMDAzZV8wMDdkLXBzZXVkby1vcF8wMDJjLUFSTS02OTkiPjxjb2RlPkxEUiByZWcsPSZsdDtsYWJlbCZndDs8L2NvZGU+IHBzZXVkbyBvcCwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLU9wY29kZXMuaHRtbCNBUk0tT3Bjb2RlcyI+QVJNIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpOTYwLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsZWFmcHJvY18wMDdkLWRpcmVjdGl2ZV8wMDJjLWk5NjAtMTEwMCI+PGNvZGU+bGVhZnByb2M8L2NvZGU+IGRpcmVjdGl2ZSwgaTk2MDwvYT46IDxhIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk5NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpOTYwIj5EaXJlY3RpdmVzLWk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxlbmd0aF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTI5Ij48Y29kZT5sZW5ndGg8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1JbnRyby5odG1sI2luZGV4LWxlbmd0aC1vZi1zeW1ib2xzLTEyOSI+bGVuZ3RoIG9mIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJTeW1ib2wtSW50cm8uaHRtbCNTeW1ib2wtSW50cm8iPlN5bWJvbCBJbnRybzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxmbGFncy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibGZsYWdzXzAwN2QtZGlyZWN0aXZlLV8wMDI4aWdub3JlZF8wMDI5LTM4NCI+PGNvZGU+bGZsYWdzPC9jb2RlPiBkaXJlY3RpdmUgKGlnbm9yZWQpPC9hPjogPGEgaHJlZj0iTGZsYWdzLmh0bWwjTGZsYWdzIj5MZmxhZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21tZW50cy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMTI0Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0XzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1BQXJjaDY0LTUyMSI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgQUFyY2g2NDwvYT46IDxhIGhyZWY9IkFBcmNoNjRfMDAyZENoYXJzLmh0bWwjQUFyY2g2NF8wMDJkQ2hhcnMiPkFBcmNoNjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHBoYV8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtQWxwaGEtNTY0Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBBbHBoYTwvYT46IDxhIGhyZWY9IkFscGhhXzAwMmRDaGFycy5odG1sI0FscGhhXzAwMmRDaGFycyI+QWxwaGEtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkNfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLUFSQy01ODYiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIEFSQzwvYT46IDxhIGhyZWY9IkFSQ18wMDJkQ2hhcnMuaHRtbCNBUkNfMDAyZENoYXJzIj5BUkMtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk1fMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLUFSTS02MzQiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIEFSTTwvYT46IDxhIGhyZWY9IkFSTV8wMDJkQ2hhcnMuaHRtbCNBUk1fMDAyZENoYXJzIj5BUk0tQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlJfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLUFWUi03MTIiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIEFWUjwvYT46IDxhIGhyZWY9IkFWUl8wMDJkQ2hhcnMuaHRtbCNBVlJfMDAyZENoYXJzIj5BVlItQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUjE2XzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1DUjE2LTczOSI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgQ1IxNjwvYT46IDxhIGhyZWY9IkNSMTZfMDAyZENoYXJzLmh0bWwjQ1IxNl8wMDJkQ2hhcnMiPkNSMTYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1EMTBWLTgwNyI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgRDEwVjwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZENoYXJzLmh0bWwjRDEwVl8wMDJkQ2hhcnMiPkQxMFYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1EMzBWLTgzNCI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgRDMwVjwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZENoYXJzLmh0bWwjRDMwVl8wMDJkQ2hhcnMiPkQzMFYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcGlwaGFueV8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtRXBpcGhhbnktODU2Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBFcGlwaGFueTwvYT46IDxhIGhyZWY9IkVwaXBoYW55XzAwMmRDaGFycy5odG1sI0VwaXBoYW55XzAwMmRDaGFycyI+RXBpcGhhbnktQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1IOF8wMDJmMzAwLTg2NCI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgSDgvMzAwPC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbCNIOF8wMDJmMzAwXzAwMmRDaGFycyI+SDgvMzAwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtaTM4Ni05NzciPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRDaGFycy5odG1sI2kzODZfMDAyZENoYXJzIj5pMzg2LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTg2MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtaTg2MC0xMDc3Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBpODYwPC9hPjogPGEgaHJlZj0iaTg2MF8wMDJkQ2hhcnMuaHRtbCNpODYwXzAwMmRDaGFycyI+aTg2MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imk5NjBfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLWk5NjAtMTExMCI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgaTk2MDwvYT46IDxhIGhyZWY9Imk5NjBfMDAyZENoYXJzLmh0bWwjaTk2MF8wMDJkQ2hhcnMiPmk5NjAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjRfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLUlBXzAwMmQ2NC0xMTIwIj5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBJQS02NDwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NF8wMDJkQ2hhcnMuaHRtbCNJQV8wMDJkNjRfMDAyZENoYXJzIj5JQS02NC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLUlQMkstMTE0MCI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgSVAySzwvYT46IDxhIGhyZWY9IklQMktfMDAyZENoYXJzLmh0bWwjSVAyS18wMDJkQ2hhcnMiPklQMkstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1MTTMyLTExNjIiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIExNMzI8L2E+OiA8YSBocmVmPSJMTTMyXzAwMmRDaGFycy5odG1sI0xNMzJfMDAyZENoYXJzIj5MTTMyLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQ18wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtTTMyQy0xMTgzIj5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBNMzJDPC9hPjogPGEgaHJlZj0iTTMyQ18wMDJkQ2hhcnMuaHRtbCNNMzJDXzAwMmRDaGFycyI+TTMyQy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLU02ODB4MC0xMjg5Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBNNjgweDA8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRDaGFycy5odG1sI002OEtfMDAyZENoYXJzIj5NNjhLLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkU3ludGF4Lmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLU02OEhDMTEtMTMxNiI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgTTY4SEMxMTwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI002OEhDMTFfMDAyZFN5bnRheCI+TTY4SEMxMS1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1NaWNyb0JsYXplLTEzNTYiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIE1pY3JvQmxhemU8L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplXzAwMmRDaGFycy5odG1sI01pY3JvQmxhemVfMDAyZENoYXJzIj5NaWNyb0JsYXplLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQU18wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtTUlQUy0xNDIxIj5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBNSVBTPC9hPjogPGEgaHJlZj0iTUlQU18wMDJkQ2hhcnMuaHRtbCNNSVBTXzAwMmRDaGFycyI+TUlQUy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtTVNQLTQzMC0xNTAxIj5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBNU1AgNDMwPC9hPjogPGEgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI01TUDQzMF8wMDJkQ2hhcnMiPk1TUDQzMC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5TMzJLXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1OUzMySy0xNTI1Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBOUzMySzwvYT46IDxhIGhyZWY9Ik5TMzJLXzAwMmRDaGFycy5odG1sI05TMzJLXzAwMmRDaGFycyI+TlMzMkstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQSl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtUEotMTYxNiI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgUEo8L2E+OiA8YSBocmVmPSJQSl8wMDJkQ2hhcnMuaHRtbCNQSl8wMDJkQ2hhcnMiPlBKLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQ18wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtUG93ZXJQQy0xNjI4Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBQb3dlclBDPC9hPjogPGEgaHJlZj0iUG93ZXJQQ18wMDJkQ2hhcnMuaHRtbCNQb3dlclBDXzAwMmRDaGFycyI+UG93ZXJQQy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJMNzhfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVJMNzgtMTY0MCI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgUkw3ODwvYT46IDxhIGhyZWY9IlJMNzhfMDAyZENoYXJzLmh0bWwjUkw3OF8wMDJkQ2hhcnMiPlJMNzgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtUlgtMTY3MiI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgUlg8L2E+OiA8YSBocmVmPSJSWF8wMDJkQ2hhcnMuaHRtbCNSWF8wMDJkQ2hhcnMiPlJYLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1DaGFyYWN0ZXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLXMzOTAtMTY4OCI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtQ2hhcmFjdGVycy5odG1sI3MzOTAtQ2hhcmFjdGVycyI+czM5MCBDaGFyYWN0ZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0NPUkVfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVNDT1JFLTE3MjYiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIFNDT1JFPC9hPjogPGEgaHJlZj0iU0NPUkVfMDAyZENoYXJzLmh0bWwjU0NPUkVfMDAyZENoYXJzIj5TQ09SRS1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNIXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1TSC0xNzQyIj5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBTSDwvYT46IDxhIGhyZWY9IlNIXzAwMmRDaGFycy5odG1sI1NIXzAwMmRDaGFycyI+U0gtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0XzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1TSDY0LTE3NzEiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIFNINjQ8L2E+OiA8YSBocmVmPSJTSDY0XzAwMmRDaGFycy5odG1sI1NINjRfMDAyZENoYXJzIj5TSDY0LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVNwYXJjLTE4MTciPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIFNwYXJjPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZENoYXJzLmh0bWwjU3BhcmNfMDAyZENoYXJzIj5TcGFyYy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtVElDNTRYLTE5ODYiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXIsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQ2hhcnMuaHRtbCNUSUM1NFhfMDAyZENoYXJzIj5USUM1NFgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1TeW50YXguaHRtbCNpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtVElDNlgtMjAwNSI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgVElDNlg8L2E+OiA8YSBocmVmPSJUSUM2WC1TeW50YXguaHRtbCNUSUM2WC1TeW50YXgiPlRJQzZYIFN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVY4NTAtMjE4MCI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTBfMDAyZENoYXJzLmh0bWwjVjg1MF8wMDJkQ2hhcnMiPlY4NTAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVZBWC0yMTYxIj5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBWQVg8L2E+OiA8YSBocmVmPSJWQVhfMDAyZENoYXJzLmh0bWwjVkFYXzAwMmRDaGFycyI+VkFYLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1YR0FURS0yMjM4Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBYR0FURTwvYT46IDxhIGhyZWY9IlhHQVRFXzAwMmRTeW50YXguaHRtbCNYR0FURV8wMDJkU3ludGF4Ij5YR0FURS1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYU3Rvcm15MTZfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVhTdG9ybXkxNi0yMjU2Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBYU3Rvcm15MTY8L2E+OiA8YSBocmVmPSJYU3Rvcm15MTZfMDAyZENoYXJzLmh0bWwjWFN0b3JteTE2XzAwMmRDaGFycyI+WFN0b3JteTE2LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1aODAtMjA2MCI+bGluZSBjb21tZW50IGNoYXJhY3RlciwgWjgwPC9hPjogPGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPlo4MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1aODAwMC0yMDg1Ij5saW5lIGNvbW1lbnQgY2hhcmFjdGVyLCBaODAwMDwvYT46IDxhIGhyZWY9Ilo4MDAwXzAwMmRDaGFycy5odG1sI1o4MDAwXzAwMmRDaGFycyI+WjgwMDAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJzXzAwMmMtQ1JJUy03NzUiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXJzLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkQ2hhcnMuaHRtbCNDUklTXzAwMmRDaGFycyI+Q1JJUy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3RlcnNfMDAyYy1NTUlYLTE0NDEiPmxpbmUgY29tbWVudCBjaGFyYWN0ZXJzLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkQ2hhcnMuaHRtbCNNTUlYXzAwMmRDaGFycyI+TU1JWC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxpbmVfMDA3ZC1kaXJlY3RpdmUtMzg1Ij48Y29kZT5saW5lPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJMaW5lLmh0bWwjTGluZSI+TGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsaW5lXzAwN2QtZGlyZWN0aXZlXzAwMmMtTVNQLTQzMC0xNTE3Ij48Y29kZT5saW5lPC9jb2RlPiBkaXJlY3RpdmUsIE1TUCA0MzA8L2E+OiA8YSBocmVmPSJNU1A0MzAtRGlyZWN0aXZlcy5odG1sI01TUDQzMC1EaXJlY3RpdmVzIj5NU1A0MzAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklucHV0LUZpbGVzLmh0bWwjaW5kZXgtbGluZS1udW1iZXJzXzAwMmMtaW4taW5wdXQtZmlsZXMtMzMiPmxpbmUgbnVtYmVycywgaW4gaW5wdXQgZmlsZXM8L2E+OiA8YSBocmVmPSJJbnB1dC1GaWxlcy5odG1sI0lucHV0LUZpbGVzIj5JbnB1dCBGaWxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9ycy5odG1sI2luZGV4LWxpbmUtbnVtYmVyc18wMDJjLWluLXdhcm5pbmdzXzAwMmZlcnJvcnMtNDQiPmxpbmUgbnVtYmVycywgaW4gd2FybmluZ3MvZXJyb3JzPC9hPjogPGEgaHJlZj0iRXJyb3JzLmh0bWwjRXJyb3JzIj5FcnJvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3ItY2hhcmFjdGVyLTEzMSI+bGluZSBzZXBhcmF0b3IgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iU3RhdGVtZW50cy5odG1sI1N0YXRlbWVudHMiPlN0YXRlbWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0XzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtQUFyY2g2NC01MjMiPmxpbmUgc2VwYXJhdG9yLCBBQXJjaDY0PC9hPjogPGEgaHJlZj0iQUFyY2g2NF8wMDJkQ2hhcnMuaHRtbCNBQXJjaDY0XzAwMmRDaGFycyI+QUFyY2g2NC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtQWxwaGEtNTY2Ij5saW5lIHNlcGFyYXRvciwgQWxwaGE8L2E+OiA8YSBocmVmPSJBbHBoYV8wMDJkQ2hhcnMuaHRtbCNBbHBoYV8wMDJkQ2hhcnMiPkFscGhhLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtQVJDLTU4OCI+bGluZSBzZXBhcmF0b3IsIEFSQzwvYT46IDxhIGhyZWY9IkFSQ18wMDJkQ2hhcnMuaHRtbCNBUkNfMDAyZENoYXJzIj5BUkMtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk1fMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1BUk0tNjM2Ij5saW5lIHNlcGFyYXRvciwgQVJNPC9hPjogPGEgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI0FSTV8wMDJkQ2hhcnMiPkFSTS1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLUFWUi03MTQiPmxpbmUgc2VwYXJhdG9yLCBBVlI8L2E+OiA8YSBocmVmPSJBVlJfMDAyZENoYXJzLmh0bWwjQVZSXzAwMmRDaGFycyI+QVZSLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1IxNl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLUNSMTYtNzQxIj5saW5lIHNlcGFyYXRvciwgQ1IxNjwvYT46IDxhIGhyZWY9IkNSMTZfMDAyZENoYXJzLmh0bWwjQ1IxNl8wMDJkQ2hhcnMiPkNSMTYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcGlwaGFueV8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLUVwaXBoYW55LTg1OCI+bGluZSBzZXBhcmF0b3IsIEVwaXBoYW55PC9hPjogPGEgaHJlZj0iRXBpcGhhbnlfMDAyZENoYXJzLmh0bWwjRXBpcGhhbnlfMDAyZENoYXJzIj5FcGlwaGFueS1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1IOF8wMDJmMzAwLTg2NiI+bGluZSBzZXBhcmF0b3IsIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZENoYXJzLmh0bWwjSDhfMDAyZjMwMF8wMDJkQ2hhcnMiPkg4LzMwMC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1pMzg2LTk3OSI+bGluZSBzZXBhcmF0b3IsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRDaGFycy5odG1sI2kzODZfMDAyZENoYXJzIj5pMzg2LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTg2MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLWk4NjAtMTA3OSI+bGluZSBzZXBhcmF0b3IsIGk4NjA8L2E+OiA8YSBocmVmPSJpODYwXzAwMmRDaGFycy5odG1sI2k4NjBfMDAyZENoYXJzIj5pODYwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTk2MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLWk5NjAtMTExMiI+bGluZSBzZXBhcmF0b3IsIGk5NjA8L2E+OiA8YSBocmVmPSJpOTYwXzAwMmRDaGFycy5odG1sI2k5NjBfMDAyZENoYXJzIj5pOTYwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtSUFfMDAyZDY0LTExMjIiPmxpbmUgc2VwYXJhdG9yLCBJQS02NDwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NF8wMDJkQ2hhcnMuaHRtbCNJQV8wMDJkNjRfMDAyZENoYXJzIj5JQS02NC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1JUDJLLTExNDIiPmxpbmUgc2VwYXJhdG9yLCBJUDJLPC9hPjogPGEgaHJlZj0iSVAyS18wMDJkQ2hhcnMuaHRtbCNJUDJLXzAwMmRDaGFycyI+SVAySy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzJfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1MTTMyLTExNjQiPmxpbmUgc2VwYXJhdG9yLCBMTTMyPC9hPjogPGEgaHJlZj0iTE0zMl8wMDJkQ2hhcnMuaHRtbCNMTTMyXzAwMmRDaGFycyI+TE0zMi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMkNfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1NMzJDLTExODUiPmxpbmUgc2VwYXJhdG9yLCBNMzJDPC9hPjogPGEgaHJlZj0iTTMyQ18wMDJkQ2hhcnMuaHRtbCNNMzJDXzAwMmRDaGFycyI+TTMyQy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1NNjgweDAtMTI5NCI+bGluZSBzZXBhcmF0b3IsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjTTY4S18wMDJkQ2hhcnMiPk02OEstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLU02OEhDMTEtMTMxOCI+bGluZSBzZXBhcmF0b3IsIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNNNjhIQzExXzAwMmRTeW50YXgiPk02OEhDMTEtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZV8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLU1pY3JvQmxhemUtMTM1OCI+bGluZSBzZXBhcmF0b3IsIE1pY3JvQmxhemU8L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplXzAwMmRDaGFycy5odG1sI01pY3JvQmxhemVfMDAyZENoYXJzIj5NaWNyb0JsYXplLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQU18wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLU1JUFMtMTQyMyI+bGluZSBzZXBhcmF0b3IsIE1JUFM8L2E+OiA8YSBocmVmPSJNSVBTXzAwMmRDaGFycy5odG1sI01JUFNfMDAyZENoYXJzIj5NSVBTLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtTVNQLTQzMC0xNTAzIj5saW5lIHNlcGFyYXRvciwgTVNQIDQzMDwvYT46IDxhIGhyZWY9Ik1TUDQzMF8wMDJkQ2hhcnMuaHRtbCNNU1A0MzBfMDAyZENoYXJzIj5NU1A0MzAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOUzMyS18wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLU5TMzJLLTE1MjciPmxpbmUgc2VwYXJhdG9yLCBOUzMySzwvYT46IDxhIGhyZWY9Ik5TMzJLXzAwMmRDaGFycy5odG1sI05TMzJLXzAwMmRDaGFycyI+TlMzMkstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQSl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLVBKLTE2MTgiPmxpbmUgc2VwYXJhdG9yLCBQSjwvYT46IDxhIGhyZWY9IlBKXzAwMmRDaGFycy5odG1sI1BKXzAwMmRDaGFycyI+UEotQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtUG93ZXJQQy0xNjMwIj5saW5lIHNlcGFyYXRvciwgUG93ZXJQQzwvYT46IDxhIGhyZWY9IlBvd2VyUENfMDAyZENoYXJzLmh0bWwjUG93ZXJQQ18wMDJkQ2hhcnMiPlBvd2VyUEMtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSTDc4XzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtUkw3OC0xNjQyIj5saW5lIHNlcGFyYXRvciwgUkw3ODwvYT46IDxhIGhyZWY9IlJMNzhfMDAyZENoYXJzLmh0bWwjUkw3OF8wMDJkQ2hhcnMiPlJMNzgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLVJYLTE2NzQiPmxpbmUgc2VwYXJhdG9yLCBSWDwvYT46IDxhIGhyZWY9IlJYXzAwMmRDaGFycy5odG1sI1JYXzAwMmRDaGFycyI+UlgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUNoYXJhY3RlcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLXMzOTAtMTY5MCI+bGluZSBzZXBhcmF0b3IsIHMzOTA8L2E+OiA8YSBocmVmPSJzMzkwLUNoYXJhY3RlcnMuaHRtbCNzMzkwLUNoYXJhY3RlcnMiPnMzOTAgQ2hhcmFjdGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNDT1JFXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtU0NPUkUtMTcyOCI+bGluZSBzZXBhcmF0b3IsIFNDT1JFPC9hPjogPGEgaHJlZj0iU0NPUkVfMDAyZENoYXJzLmh0bWwjU0NPUkVfMDAyZENoYXJzIj5TQ09SRS1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNIXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtU0gtMTc0NCI+bGluZSBzZXBhcmF0b3IsIFNIPC9hPjogPGEgaHJlZj0iU0hfMDAyZENoYXJzLmh0bWwjU0hfMDAyZENoYXJzIj5TSC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNINjRfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1TSDY0LTE3NzMiPmxpbmUgc2VwYXJhdG9yLCBTSDY0PC9hPjogPGEgaHJlZj0iU0g2NF8wMDJkQ2hhcnMuaHRtbCNTSDY0XzAwMmRDaGFycyI+U0g2NC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtU3BhcmMtMTgxOSI+bGluZSBzZXBhcmF0b3IsIFNwYXJjPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZENoYXJzLmh0bWwjU3BhcmNfMDAyZENoYXJzIj5TcGFyYy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLVRJQzU0WC0xOTg4Ij5saW5lIHNlcGFyYXRvciwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRDaGFycy5odG1sI1RJQzU0WF8wMDJkQ2hhcnMiPlRJQzU0WC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLVN5bnRheC5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtVElDNlgtMjAwNyI+bGluZSBzZXBhcmF0b3IsIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtU3ludGF4Lmh0bWwjVElDNlgtU3ludGF4Ij5USUM2WCBTeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtVjg1MC0yMTgyIj5saW5lIHNlcGFyYXRvciwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTBfMDAyZENoYXJzLmh0bWwjVjg1MF8wMDJkQ2hhcnMiPlY4NTAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1WQVgtMjE2MyI+bGluZSBzZXBhcmF0b3IsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkQ2hhcnMuaHRtbCNWQVhfMDAyZENoYXJzIj5WQVgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYR0FURV8wMDJkU3ludGF4Lmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1YR0FURS0yMjQwIj5saW5lIHNlcGFyYXRvciwgWEdBVEU8L2E+OiA8YSBocmVmPSJYR0FURV8wMDJkU3ludGF4Lmh0bWwjWEdBVEVfMDAyZFN5bnRheCI+WEdBVEUtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2XzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtWFN0b3JteTE2LTIyNjAiPmxpbmUgc2VwYXJhdG9yLCBYU3Rvcm15MTY8L2E+OiA8YSBocmVmPSJYU3Rvcm15MTZfMDAyZENoYXJzLmh0bWwjWFN0b3JteTE2XzAwMmRDaGFycyI+WFN0b3JteTE2LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI2luZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtWjgwLTIwNjIiPmxpbmUgc2VwYXJhdG9yLCBaODA8L2E+OiA8YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjWjgwXzAwMmRDaGFycyI+WjgwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwMDBfMDAyZENoYXJzLmh0bWwjaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1aODAwMC0yMDg3Ij5saW5lIHNlcGFyYXRvciwgWjgwMDA8L2E+OiA8YSBocmVmPSJaODAwMF8wMDJkQ2hhcnMuaHRtbCNaODAwMF8wMDJkQ2hhcnMiPlo4MDAwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tbWVudHMuaHRtbCNpbmRleC1saW5lcy1zdGFydGluZy13aXRoLV8wMDQwY29kZV8wMDdiXzAwMjNfMDA3ZC0xMjYiPmxpbmVzIHN0YXJ0aW5nIHdpdGggPGNvZGU+IzwvY29kZT48L2E+OiA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdC5odG1sI2luZGV4LWxpbmtlci0zOCI+bGlua2VyPC9hPjogPGEgaHJlZj0iT2JqZWN0Lmh0bWwjT2JqZWN0Ij5PYmplY3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTZWNzLUJhY2tncm91bmQuaHRtbCNpbmRleC1saW5rZXJfMDAyYy1hbmQtYXNzZW1ibGVyLTE4NyI+bGlua2VyLCBhbmQgYXNzZW1ibGVyPC9hPjogPGEgaHJlZj0iU2Vjcy1CYWNrZ3JvdW5kLmh0bWwjU2Vjcy1CYWNrZ3JvdW5kIj5TZWNzIEJhY2tncm91bmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rb25jZS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibGlua29uY2VfMDA3ZC1kaXJlY3RpdmUtMzg4Ij48Y29kZT5saW5rb25jZTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTGlua29uY2UuaHRtbCNMaW5rb25jZSI+TGlua29uY2U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaXN0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsaXN0XzAwN2QtZGlyZWN0aXZlLTM5MCI+PGNvZGU+bGlzdDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTGlzdC5odG1sI0xpc3QiPkxpc3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxpc3RfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkzMSI+PGNvZGU+bGlzdDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTm9saXN0Lmh0bWwjaW5kZXgtbGlzdGluZy1jb250cm9sXzAwMmMtdHVybmluZy1vZmYtNDEyIj5saXN0aW5nIGNvbnRyb2wsIHR1cm5pbmcgb2ZmPC9hPjogPGEgaHJlZj0iTm9saXN0Lmh0bWwjTm9saXN0Ij5Ob2xpc3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaXN0Lmh0bWwjaW5kZXgtbGlzdGluZy1jb250cm9sXzAwMmMtdHVybmluZy1vbi0zOTEiPmxpc3RpbmcgY29udHJvbCwgdHVybmluZyBvbjwvYT46IDxhIGhyZWY9Ikxpc3QuaHRtbCNMaXN0Ij5MaXN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRWplY3QuaHRtbCNpbmRleC1saXN0aW5nLWNvbnRyb2xfMDAzYS1uZXctcGFnZS0zMTkiPmxpc3RpbmcgY29udHJvbDogbmV3IHBhZ2U8L2E+OiA8YSBocmVmPSJFamVjdC5odG1sI0VqZWN0Ij5FamVjdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBzaXplLmh0bWwjaW5kZXgtbGlzdGluZy1jb250cm9sXzAwM2EtcGFwZXItc2l6ZS00MzMiPmxpc3RpbmcgY29udHJvbDogcGFwZXIgc2l6ZTwvYT46IDxhIGhyZWY9IlBzaXplLmh0bWwjUHNpemUiPlBzaXplPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2J0dGwuaHRtbCNpbmRleC1saXN0aW5nLWNvbnRyb2xfMDAzYS1zdWJ0aXRsZS00NDUiPmxpc3RpbmcgY29udHJvbDogc3VidGl0bGU8L2E+OiA8YSBocmVmPSJTYnR0bC5odG1sI1NidHRsIj5TYnR0bDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRpdGxlLmh0bWwjaW5kZXgtbGlzdGluZy1jb250cm9sXzAwM2EtdGl0bGUtbGluZS00OTEiPmxpc3RpbmcgY29udHJvbDogdGl0bGUgbGluZTwvYT46IDxhIGhyZWY9IlRpdGxlLmh0bWwjVGl0bGUiPlRpdGxlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYS5odG1sI2luZGV4LWxpc3RpbmdzXzAwMmMtZW5hYmxpbmctNTUiPmxpc3RpbmdzLCBlbmFibGluZzwvYT46IDxhIGhyZWY9ImEuaHRtbCNhIj5hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGl0ZXJhbC1EaXJlY3RpdmUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxpdGVyYWxfMDA3ZC1kaXJlY3RpdmUtMjMyNiI+PGNvZGU+bGl0ZXJhbDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTGl0ZXJhbC1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLURpcmVjdGl2ZSI+TGl0ZXJhbCBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUxpdGVyYWwtUG9vbC1FbnRyaWVzLmh0bWwjaW5kZXgtbGl0ZXJhbC1wb29sLWVudHJpZXNfMDAyYy1zMzkwLTE3MDkiPmxpdGVyYWwgcG9vbCBlbnRyaWVzLCBzMzkwPC9hPjogPGEgaHJlZj0iczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcy5odG1sI3MzOTAtTGl0ZXJhbC1Qb29sLUVudHJpZXMiPnMzOTAgTGl0ZXJhbCBQb29sIEVudHJpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibGl0ZXJhbF8wMDVmcG9zaXRpb25fMDA3ZC1kaXJlY3RpdmUtMjMyNyI+PGNvZGU+bGl0ZXJhbF9wb3NpdGlvbjwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTGl0ZXJhbC1Qb3NpdGlvbi1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZSI+TGl0ZXJhbCBQb3NpdGlvbiBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxpdGVyYWxfMDA1ZnByZWZpeF8wMDdkLWRpcmVjdGl2ZS0yMzI4Ij48Y29kZT5saXRlcmFsX3ByZWZpeDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTGl0ZXJhbC1QcmVmaXgtRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1QcmVmaXgtRGlyZWN0aXZlIj5MaXRlcmFsIFByZWZpeCBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LWxpdHRsZS1lbmRpYW4tb3V0cHV0XzAwMmMtTUlQUy0xOCI+bGl0dGxlIGVuZGlhbiBvdXRwdXQsIE1JUFM8L2E+OiA8YSBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjaW5kZXgtbGl0dGxlLWVuZGlhbi1vdXRwdXRfMDAyYy1QSi0xNCI+bGl0dGxlIGVuZGlhbiBvdXRwdXQsIFBKPC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNpbmRleC1saXR0bGVfMDAyZGVuZGlhbi1vdXRwdXRfMDAyYy1NSVBTLTEzNjgiPmxpdHRsZS1lbmRpYW4gb3V0cHV0LCBNSVBTPC9hPjogPGEgaHJlZj0iTUlQUy1PcHRzLmh0bWwjTUlQUy1PcHRzIj5NSVBTIE9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjaW5kZXgtbGl0dGxlXzAwMmRlbmRpYW4tb3V0cHV0XzAwMmMtVElDNlgtMjAwNCI+bGl0dGxlLWVuZGlhbiBvdXRwdXQsIFRJQzZYPC9hPjogPGEgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI1RJQzZYLU9wdGlvbnMiPlRJQzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyXzAwMmRDaGFycy5odG1sI2luZGV4LUxNMzItbGluZS1jb21tZW50LWNoYXJhY3Rlci0xMTYzIj5MTTMyIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJMTTMyXzAwMmRDaGFycy5odG1sI0xNMzJfMDAyZENoYXJzIj5MTTMyLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1MTTMyLWxpbmUtc2VwYXJhdG9yLTExNjYiPkxNMzIgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJMTTMyXzAwMmRDaGFycy5odG1sI0xNMzJfMDAyZENoYXJzIj5MTTMyLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMl8wMDJkTW9kaWZpZXJzLmh0bWwjaW5kZXgtTE0zMi1tb2RpZmllcnMtMTE1OSI+TE0zMiBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJMTTMyXzAwMmRNb2RpZmllcnMuaHRtbCNMTTMyXzAwMmRNb2RpZmllcnMiPkxNMzItTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMi1PcGNvZGVzLmh0bWwjaW5kZXgtTE0zMi1vcGNvZGUtc3VtbWFyeS0xMTY3Ij5MTTMyIG9wY29kZSBzdW1tYXJ5PC9hPjogPGEgaHJlZj0iTE0zMi1PcGNvZGVzLmh0bWwjTE0zMi1PcGNvZGVzIj5MTTMyIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNpbmRleC1MTTMyLW9wdGlvbnMtXzAwMjhub25lXzAwMjktMTE0NiI+TE0zMiBvcHRpb25zIChub25lKTwvYT46IDxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI0xNMzItT3B0aW9ucyI+TE0zMiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMl8wMDJkUmVncy5odG1sI2luZGV4LUxNMzItcmVnaXN0ZXItbmFtZXMtMTE1NyI+TE0zMiByZWdpc3RlciBuYW1lczwvYT46IDxhIGhyZWY9IkxNMzJfMDAyZFJlZ3MuaHRtbCNMTTMyXzAwMmRSZWdzIj5MTTMyLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1MTTMyLXN1cHBvcnQtMTE0NSI+TE0zMiBzdXBwb3J0PC9hPjogPGEgaHJlZj0iTE0zMl8wMDJkRGVwZW5kZW50Lmh0bWwjTE0zMl8wMDJkRGVwZW5kZW50Ij5MTTMyLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxuLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsbl8wMDdkLWRpcmVjdGl2ZS0zOTIiPjxjb2RlPmxuPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJMbi5odG1sI0xuIj5MbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibG9fMDA3ZC1wc2V1ZG9fMDAyZG9wXzAwMmMtVjg1MC0yMjE4Ij48Y29kZT5sbzwvY29kZT4gcHNldWRvLW9wLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MC1PcGNvZGVzLmh0bWwjVjg1MC1PcGNvZGVzIj5WODUwIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvY18wMDdkLWRpcmVjdGl2ZS0zOTMiPjxjb2RlPmxvYzwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTG9jLmh0bWwjTG9jIj5Mb2M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2NfMDA1Zm1hcmtfMDA1ZmxhYmVscy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibG9jXzAwNWZtYXJrXzAwNWZsYWJlbHNfMDA3ZC1kaXJlY3RpdmUtMzk0Ij48Y29kZT5sb2NfbWFya19sYWJlbHM8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkxvY18wMDVmbWFya18wMDVmbGFiZWxzLmh0bWwjTG9jXzAwNWZtYXJrXzAwNWZsYWJlbHMiPkxvY19tYXJrX2xhYmVsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikxjb21tLmh0bWwjaW5kZXgtbG9jYWwtY29tbW9uLXN5bWJvbHMtMzgyIj5sb2NhbCBjb21tb24gc3ltYm9sczwvYT46IDxhIGhyZWY9Ikxjb21tLmh0bWwjTGNvbW0iPkxjb21tPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTG9jYWwuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvY2FsXzAwN2QtZGlyZWN0aXZlLTM5NSI+PGNvZGU+bG9jYWw8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IkxvY2FsLmh0bWwjTG9jYWwiPkxvY2FsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjaW5kZXgtbG9jYWwtbGFiZWxzLTIxNyI+bG9jYWwgbGFiZWxzPC9hPjogPGEgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjU3ltYm9sLU5hbWVzIj5TeW1ib2wgTmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2wtTmFtZXMuaHRtbCNpbmRleC1sb2NhbC1zeW1ib2wtbmFtZXMtMjE1Ij5sb2NhbCBzeW1ib2wgbmFtZXM8L2E+OiA8YSBocmVmPSJTeW1ib2wtTmFtZXMuaHRtbCNTeW1ib2wtTmFtZXMiPlN5bWJvbCBOYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkwuaHRtbCNpbmRleC1sb2NhbC1zeW1ib2xzXzAwMmMtcmV0YWluaW5nLWluLW91dHB1dC03MCI+bG9jYWwgc3ltYm9scywgcmV0YWluaW5nIGluIG91dHB1dDwvYT46IDxhIGhyZWY9IkwuaHRtbCNMIj5MPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRG90Lmh0bWwjaW5kZXgtbG9jYXRpb24tY291bnRlci0yMjQiPmxvY2F0aW9uIGNvdW50ZXI8L2E+OiA8YSBocmVmPSJEb3QuaHRtbCNEb3QiPkRvdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9yZy5odG1sI2luZGV4LWxvY2F0aW9uLWNvdW50ZXJfMDAyYy1hZHZhbmNpbmctNDE4Ij5sb2NhdGlvbiBjb3VudGVyLCBhZHZhbmNpbmc8L2E+OiA8YSBocmVmPSJPcmcuaHRtbCNPcmciPk9yZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1sb2NhdGlvbi1jb3VudGVyXzAwMmMtWjgwLTIwNjUiPmxvY2F0aW9uIGNvdW50ZXIsIFo4MDwvYT46IDxhIGhyZWY9Ilo4MF8wMDJkQ2hhcnMuaHRtbCNaODBfMDAyZENoYXJzIj5aODAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaWxlLmh0bWwjaW5kZXgtbG9naWNhbC1maWxlLW5hbWUtMzM2Ij5sb2dpY2FsIGZpbGUgbmFtZTwvYT46IDxhIGhyZWY9IkZpbGUuaHRtbCNGaWxlIj5GaWxlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluZS5odG1sI2luZGV4LWxvZ2ljYWwtbGluZS1udW1iZXItMzg2Ij5sb2dpY2FsIGxpbmUgbnVtYmVyPC9hPjogPGEgaHJlZj0iTGluZS5odG1sI0xpbmUiPkxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21tZW50cy5odG1sI2luZGV4LWxvZ2ljYWwtbGluZS1udW1iZXJzLTEyNyI+bG9naWNhbCBsaW5lIG51bWJlcnM8L2E+OiA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxvbmcuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdfMDA3ZC1kaXJlY3RpdmUtMzk2Ij48Y29kZT5sb25nPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJMb25nLmh0bWwjTG9uZyI+TG9uZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJDLTYwNSI+PGNvZGU+bG9uZzwvY29kZT4gZGlyZWN0aXZlLCBBUkM8L2E+OiA8YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI0FSQy1EaXJlY3RpdmVzIj5BUkMgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDMzIj48Y29kZT5sb25nPC9jb2RlPiBkaXJlY3RpdmUsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij5pMzg2LUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MzMiPjxjb2RlPmxvbmc8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMteDg2XzAwMmQ2NC0xMDM3Ij48Y29kZT5sb25nPC9jb2RlPiBkaXJlY3RpdmUsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaTM4Nl8wMDJkRmxvYXQiPmkzODYtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdjYWxsXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVY4NTAtMjIyNSI+PGNvZGU+bG9uZ2NhbGw8L2NvZGU+IHBzZXVkby1vcCwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI1Y4NTAtT3Bjb2RlcyI+Vjg1MCBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTG9uZ2NhbGxzLURpcmVjdGl2ZS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibG9uZ2NhbGxzXzAwN2QtZGlyZWN0aXZlLTIzMjIiPjxjb2RlPmxvbmdjYWxsczwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTG9uZ2NhbGxzLURpcmVjdGl2ZS5odG1sI0xvbmdjYWxscy1EaXJlY3RpdmUiPkxvbmdjYWxscyBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdqdW1wXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVY4NTAtMjIyNiI+PGNvZGU+bG9uZ2p1bXA8L2NvZGU+IHBzZXVkby1vcCwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI1Y4NTAtT3Bjb2RlcyI+Vjg1MCBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb29wXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MzYiPjxjb2RlPmxvb3A8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMT09QXzAwN2QtaW5zdHJ1Y3Rpb25zXzAwMmMtYWxpZ25tZW50LTIyOTciPjxjb2RlPkxPT1A8L2NvZGU+IGluc3RydWN0aW9ucywgYWxpZ25tZW50PC9hPjogPGEgaHJlZj0iWHRlbnNhLUF1dG9tYXRpYy1BbGlnbm1lbnQuaHRtbCNYdGVuc2EtQXV0b21hdGljLUFsaWdubWVudCI+WHRlbnNhIEF1dG9tYXRpYyBBbGlnbm1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb3dfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NMzJSLTEyMjQiPjxjb2RlPmxvdzwvY29kZT4gZGlyZWN0aXZlLCBNMzJSPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI00zMlJfMDAyZERpcmVjdGl2ZXMiPk0zMlItRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxwXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTIiPjxjb2RlPmxwPC9jb2RlPiByZWdpc3RlciwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNWODUwXzAwMmRSZWdzIj5WODUwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtbHZhbC0yMTAzIj48Y29kZT5sdmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNaODAwMC1EaXJlY3RpdmVzIj5aODAwMCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTFdQLmh0bWwjaW5kZXgtTFdQXzAwMmMtaTM4Ni0xMDQ2Ij5MV1AsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRMV1AuaHRtbCNpMzg2XzAwMmRMV1AiPmkzODYtTFdQPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTFdQLmh0bWwjaW5kZXgtTFdQXzAwMmMteDg2XzAwMmQ2NC0xMDQ3Ij5MV1AsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZExXUC5odG1sI2kzODZfMDAyZExXUCI+aTM4Ni1MV1A8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjaW5kZXgtTTE2Qy1hcmNoaXRlY3R1cmUtb3B0aW9uLTExNzkiPk0xNkMgYXJjaGl0ZWN0dXJlIG9wdGlvbjwvYT46IDxhIGhyZWY9Ik0zMkNfMDAyZE9wdHMuaHRtbCNNMzJDXzAwMmRPcHRzIj5NMzJDLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjaW5kZXgtTTMyQy1hcmNoaXRlY3R1cmUtb3B0aW9uLTExNzYiPk0zMkMgYXJjaGl0ZWN0dXJlIG9wdGlvbjwvYT46IDxhIGhyZWY9Ik0zMkNfMDAyZE9wdHMuaHRtbCNNMzJDXzAwMmRPcHRzIj5NMzJDLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJDXzAwMmRDaGFycy5odG1sI2luZGV4LU0zMkMtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xMTg0Ij5NMzJDIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJNMzJDXzAwMmRDaGFycy5odG1sI00zMkNfMDAyZENoYXJzIj5NMzJDLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQ18wMDJkQ2hhcnMuaHRtbCNpbmRleC1NMzJDLWxpbmUtc2VwYXJhdG9yLTExODciPk0zMkMgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJNMzJDXzAwMmRDaGFycy5odG1sI00zMkNfMDAyZENoYXJzIj5NMzJDLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQ18wMDJkTW9kaWZpZXJzLmh0bWwjaW5kZXgtTTMyQy1tb2RpZmllcnMtMTE4MCI+TTMyQyBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJNMzJDXzAwMmRNb2RpZmllcnMuaHRtbCNNMzJDXzAwMmRNb2RpZmllcnMiPk0zMkMtTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQ18wMDJkT3B0cy5odG1sI2luZGV4LU0zMkMtb3B0aW9ucy0xMTczIj5NMzJDIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjTTMyQ18wMDJkT3B0cyI+TTMyQy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQ18wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtTTMyQy1zdXBwb3J0LTExNzEiPk0zMkMgc3VwcG9ydDwvYT46IDxhIGhyZWY9Ik0zMkNfMDAyZERlcGVuZGVudC5odG1sI00zMkNfMDAyZERlcGVuZGVudCI+TTMyQy1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtTTMyUi1hcmNoaXRlY3R1cmUtb3B0aW9ucy0xMTkzIj5NMzJSIGFyY2hpdGVjdHVyZSBvcHRpb25zPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1NMzJSLWRpcmVjdGl2ZXMtMTIyMyI+TTMyUiBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI00zMlJfMDAyZERpcmVjdGl2ZXMiPk0zMlItRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNpbmRleC1NMzJSLW9wdGlvbnMtMTE5MCI+TTMyUiBvcHRpb25zPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LU0zMlItc3VwcG9ydC0xMTg4Ij5NMzJSIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJSXzAwMmREZXBlbmRlbnQiPk0zMlItRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkV2FybmluZ3MuaHRtbCNpbmRleC1NMzJSLXdhcm5pbmdzLTEyMzMiPk0zMlIgd2FybmluZ3M8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRXYXJuaW5ncy5odG1sI00zMlJfMDAyZFdhcm5pbmdzIj5NMzJSLVdhcm5pbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkU3ludGF4Lmh0bWwjaW5kZXgtTTY4MHgwLWFkZHJlc3NpbmctbW9kZXMtMTI2MiI+TTY4MHgwIGFkZHJlc3NpbmcgbW9kZXM8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRTeW50YXguaHRtbCNNNjhLXzAwMmRTeW50YXgiPk02OEstU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI2luZGV4LU02ODB4MC1hcmNoaXRlY3R1cmUtb3B0aW9ucy0xMjU2Ij5NNjgweDAgYXJjaGl0ZWN0dXJlIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjTTY4S18wMDJkT3B0cyI+TTY4Sy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkQnJhbmNoLmh0bWwjaW5kZXgtTTY4MHgwLWJyYW5jaC1pbXByb3ZlbWVudC0xMjg2Ij5NNjgweDAgYnJhbmNoIGltcHJvdmVtZW50PC9hPjogPGEgaHJlZj0iTTY4S18wMDJkQnJhbmNoLmh0bWwjTTY4S18wMDJkQnJhbmNoIj5NNjhLLUJyYW5jaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1NNjgweDAtZGlyZWN0aXZlcy0xMjcyIj5NNjgweDAgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhLXzAwMmREaXJlY3RpdmVzIj5NNjhLLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI2luZGV4LU02ODB4MC1mbG9hdGluZy1wb2ludC0xMjY3Ij5NNjgweDAgZmxvYXRpbmcgcG9pbnQ8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0Ij5NNjhLLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkQ2hhcnMuaHRtbCNpbmRleC1NNjgweDAtaW1tZWRpYXRlLWNoYXJhY3Rlci0xMjkxIj5NNjgweDAgaW1tZWRpYXRlIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjTTY4S18wMDJkQ2hhcnMiPk02OEstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRDaGFycy5odG1sI2luZGV4LU02ODB4MC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTEyODgiPk02ODB4MCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkQ2hhcnMuaHRtbCNNNjhLXzAwMmRDaGFycyI+TTY4Sy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjaW5kZXgtTTY4MHgwLWxpbmUtc2VwYXJhdG9yLTEyOTMiPk02ODB4MCBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjTTY4S18wMDJkQ2hhcnMiPk02OEstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRvcGNvZGVzLmh0bWwjaW5kZXgtTTY4MHgwLW9wY29kZXMtMTI4MCI+TTY4MHgwIG9wY29kZXM8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRvcGNvZGVzLmh0bWwjTTY4S18wMDJkb3Bjb2RlcyI+TTY4Sy1vcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI2luZGV4LU02ODB4MC1vcHRpb25zLTEyMzYiPk02ODB4MCBvcHRpb25zPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPk02OEstT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZEJyYW5jaC5odG1sI2luZGV4LU02ODB4MC1wc2V1ZG9fMDAyZG9wY29kZXMtMTI4NCI+TTY4MHgwIHBzZXVkby1vcGNvZGVzPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkQnJhbmNoLmh0bWwjTTY4S18wMDJkQnJhbmNoIj5NNjhLLUJyYW5jaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZFN5bnRheC5odG1sI2luZGV4LU02ODB4MC1zaXplLW1vZGlmaWVycy0xMjYwIj5NNjgweDAgc2l6ZSBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRTeW50YXguaHRtbCNNNjhLXzAwMmRTeW50YXgiPk02OEstU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtTTY4MHgwLXN1cHBvcnQtMTIzNCI+TTY4MHgwIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhLXzAwMmREZXBlbmRlbnQiPk02OEstRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkU3ludGF4Lmh0bWwjaW5kZXgtTTY4MHgwLXN5bnRheC0xMjU4Ij5NNjgweDAgc3ludGF4PC9hPjogPGEgaHJlZj0iTTY4S18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkU3ludGF4Ij5NNjhLLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI2luZGV4LU02OEhDMTEtYWRkcmVzc2luZy1tb2Rlcy0xMzIxIj5NNjhIQzExIGFkZHJlc3NpbmcgbW9kZXM8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNNNjhIQzExXzAwMmRTeW50YXgiPk02OEhDMTEtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtTTY4SEMxMS1hbmQtTTY4SEMxMi1zdXBwb3J0LTEyOTUiPk02OEhDMTEgYW5kIE02OEhDMTIgc3VwcG9ydDwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZERlcGVuZGVudC5odG1sI002OEhDMTFfMDAyZERlcGVuZGVudCI+TTY4SEMxMS1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtTTY4SEMxMS1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlZmFyLTEzMzUiPk02OEhDMTEgYXNzZW1ibGVyIGRpcmVjdGl2ZSAuZmFyPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPk02OEhDMTEtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1NNjhIQzExLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVpbnRlcnJ1cHQtMTMzNyI+TTY4SEMxMSBhc3NlbWJsZXIgZGlyZWN0aXZlIC5pbnRlcnJ1cHQ8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4SEMxMV8wMDJkRGlyZWN0aXZlcyI+TTY4SEMxMS1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LU02OEhDMTEtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZW1vZGUtMTMzMyI+TTY4SEMxMSBhc3NlbWJsZXIgZGlyZWN0aXZlIC5tb2RlPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPk02OEhDMTEtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1NNjhIQzExLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVyZWxheC0xMzMxIj5NNjhIQzExIGFzc2VtYmxlciBkaXJlY3RpdmUgLnJlbGF4PC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPk02OEhDMTEtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1NNjhIQzExLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmV4cmVmYi0xMzM5Ij5NNjhIQzExIGFzc2VtYmxlciBkaXJlY3RpdmUgLnhyZWZiPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPk02OEhDMTEtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1NNjhIQzExLWFzc2VtYmxlci1kaXJlY3RpdmVzLTEzMjgiPk02OEhDMTEgYXNzZW1ibGVyIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4SEMxMV8wMDJkRGlyZWN0aXZlcyI+TTY4SEMxMS1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkQnJhbmNoLmh0bWwjaW5kZXgtTTY4SEMxMS1icmFuY2gtaW1wcm92ZW1lbnQtMTM1MiI+TTY4SEMxMSBicmFuY2ggaW1wcm92ZW1lbnQ8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRCcmFuY2guaHRtbCNNNjhIQzExXzAwMmRCcmFuY2giPk02OEhDMTEtQnJhbmNoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCNpbmRleC1NNjhIQzExLWZsb2F0aW5nLXBvaW50LTEzNDEiPk02OEhDMTEgZmxvYXRpbmcgcG9pbnQ8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRGbG9hdC5odG1sI002OEhDMTFfMDAyZEZsb2F0Ij5NNjhIQzExLUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkU3ludGF4Lmh0bWwjaW5kZXgtTTY4SEMxMS1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTEzMTciPk02OEhDMTEgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI002OEhDMTFfMDAyZFN5bnRheCI+TTY4SEMxMS1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNpbmRleC1NNjhIQzExLWxpbmUtc2VwYXJhdG9yLTEzMjAiPk02OEhDMTEgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNNNjhIQzExXzAwMmRTeW50YXgiPk02OEhDMTEtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkTW9kaWZpZXJzLmh0bWwjaW5kZXgtTTY4SEMxMS1tb2RpZmllcnMtMTMyMyI+TTY4SEMxMSBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRNb2RpZmllcnMuaHRtbCNNNjhIQzExXzAwMmRNb2RpZmllcnMiPk02OEhDMTEtTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkb3Bjb2Rlcy5odG1sI2luZGV4LU02OEhDMTEtb3Bjb2Rlcy0xMzQ2Ij5NNjhIQzExIG9wY29kZXM8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRvcGNvZGVzLmh0bWwjTTY4SEMxMV8wMDJkb3Bjb2RlcyI+TTY4SEMxMS1vcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI2luZGV4LU02OEhDMTEtb3B0aW9ucy0xMjk3Ij5NNjhIQzExIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjTTY4SEMxMV8wMDJkT3B0cyI+TTY4SEMxMS1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkQnJhbmNoLmh0bWwjaW5kZXgtTTY4SEMxMS1wc2V1ZG9fMDAyZG9wY29kZXMtMTM1MCI+TTY4SEMxMSBwc2V1ZG8tb3Bjb2RlczwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZEJyYW5jaC5odG1sI002OEhDMTFfMDAyZEJyYW5jaCI+TTY4SEMxMS1CcmFuY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNpbmRleC1NNjhIQzExLXN5bnRheC0xMzE0Ij5NNjhIQzExIHN5bnRheDwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI002OEhDMTFfMDAyZFN5bnRheCI+TTY4SEMxMS1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtTTY4SEMxMi1hc3NlbWJsZXItZGlyZWN0aXZlcy0xMzI5Ij5NNjhIQzEyIGFzc2VtYmxlciBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPk02OEhDMTEtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjaW5kZXgtbWFjaGluZS1kZXBlbmRlbmNpZXMtNTE0Ij5tYWNoaW5lIGRlcGVuZGVuY2llczwvYT46IDxhIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtQUFyY2g2NC01MzYiPm1hY2hpbmUgZGlyZWN0aXZlcywgQUFyY2g2NDwvYT46IDxhIGhyZWY9IkFBcmNoNjQtRGlyZWN0aXZlcy5odG1sI0FBcmNoNjQtRGlyZWN0aXZlcyI+QUFyY2g2NCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1BUkMtNTk1Ij5tYWNoaW5lIGRpcmVjdGl2ZXMsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1BUk0tNjUxIj5tYWNoaW5lIGRpcmVjdGl2ZXMsIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPkFSTSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtSDhfMDAyZjMwMC1fMDAyOG5vbmVfMDAyOS04NzYiPm1hY2hpbmUgZGlyZWN0aXZlcywgSDgvMzAwIChub25lKTwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI0g4XzAwMmYzMDAtRGlyZWN0aXZlcyI+SDgvMzAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpODYwLmh0bWwjaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtaTg2MC0xMDcwIj5tYWNoaW5lIGRpcmVjdGl2ZXMsIGk4NjA8L2E+OiA8YSBocmVmPSJEaXJlY3RpdmVzXzAwMmRpODYwLmh0bWwjRGlyZWN0aXZlc18wMDJkaTg2MCI+RGlyZWN0aXZlcy1pODYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0aXZlc18wMDJkaTk2MC5odG1sI2luZGV4LW1hY2hpbmUtZGlyZWN0aXZlc18wMDJjLWk5NjAtMTA5NiI+bWFjaGluZSBkaXJlY3RpdmVzLCBpOTYwPC9hPjogPGEgaHJlZj0iRGlyZWN0aXZlc18wMDJkaTk2MC5odG1sI0RpcmVjdGl2ZXNfMDAyZGk5NjAiPkRpcmVjdGl2ZXMtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtTVNQLTQzMC0xNTE0Ij5tYWNoaW5lIGRpcmVjdGl2ZXMsIE1TUCA0MzA8L2E+OiA8YSBocmVmPSJNU1A0MzAtRGlyZWN0aXZlcy5odG1sI01TUDQzMC1EaXJlY3RpdmVzIj5NU1A0MzAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILURpcmVjdGl2ZXMuaHRtbCNpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1TSC0xNzU2Ij5tYWNoaW5lIGRpcmVjdGl2ZXMsIFNIPC9hPjogPGEgaHJlZj0iU0gtRGlyZWN0aXZlcy5odG1sI1NILURpcmVjdGl2ZXMiPlNIIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0LURpcmVjdGl2ZXMuaHRtbCNpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1TSDY0LTE3ODQiPm1hY2hpbmUgZGlyZWN0aXZlcywgU0g2NDwvYT46IDxhIGhyZWY9IlNINjQtRGlyZWN0aXZlcy5odG1sI1NINjQtRGlyZWN0aXZlcyI+U0g2NCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1TUEFSQy0xODMzIj5tYWNoaW5lIGRpcmVjdGl2ZXMsIFNQQVJDPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNTcGFyY18wMDJkRGlyZWN0aXZlcyI+U3BhcmMtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LW1hY2hpbmUtZGlyZWN0aXZlc18wMDJjLVRJQzU0WC0xODg5Ij5tYWNoaW5lIGRpcmVjdGl2ZXMsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtVElDNlgtMjAxMCI+bWFjaGluZSBkaXJlY3RpdmVzLCBUSUM2WDwvYT46IDxhIGhyZWY9IlRJQzZYLURpcmVjdGl2ZXMuaHRtbCNUSUM2WC1EaXJlY3RpdmVzIj5USUM2WCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtRGlyZWN0aXZlcy5odG1sI2luZGV4LW1hY2hpbmUtZGlyZWN0aXZlc18wMDJjLVRJTEVfMDAyZEd4LTIwMzUiPm1hY2hpbmUgZGlyZWN0aXZlcywgVElMRS1HeDwvYT46IDxhIGhyZWY9IlRJTEVfMDAyZEd4LURpcmVjdGl2ZXMuaHRtbCNUSUxFXzAwMmRHeC1EaXJlY3RpdmVzIj5USUxFLUd4IERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFUHJvLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1USUxFUHJvLTIwNDkiPm1hY2hpbmUgZGlyZWN0aXZlcywgVElMRVBybzwvYT46IDxhIGhyZWY9IlRJTEVQcm8tRGlyZWN0aXZlcy5odG1sI1RJTEVQcm8tRGlyZWN0aXZlcyI+VElMRVBybyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtVjg1MC0yMjA2Ij5tYWNoaW5lIGRpcmVjdGl2ZXMsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNWODUwLURpcmVjdGl2ZXMiPlY4NTAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI2luZGV4LW1hY2hpbmUtZGlyZWN0aXZlc18wMDJjLVZBWC0yMTM2Ij5tYWNoaW5lIGRpcmVjdGl2ZXMsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI1ZBWF8wMDJkZGlyZWN0aXZlcyI+VkFYLWRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMteDg2LTkzMCI+bWFjaGluZSBkaXJlY3RpdmVzLCB4ODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmREaXJlY3RpdmVzLmh0bWwjaTM4Nl8wMDJkRGlyZWN0aXZlcyI+aTM4Ni1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2LURpcmVjdGl2ZXMuaHRtbCNpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1YU3Rvcm15MTYtMjI2MyI+bWFjaGluZSBkaXJlY3RpdmVzLCBYU3Rvcm15MTY8L2E+OiA8YSBocmVmPSJYU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sI1hTdG9ybXkxNi1EaXJlY3RpdmVzIj5YU3Rvcm15MTYgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNpbmRleC1tYWNoaW5lLWluZGVwZW5kZW50LWRpcmVjdGl2ZXMtMjcxIj5tYWNoaW5lIGluZGVwZW5kZW50IGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hbnVhbC5odG1sI2luZGV4LW1hY2hpbmUtaW5zdHJ1Y3Rpb25zLV8wMDI4bm90LWNvdmVyZWRfMDAyOS0yMiI+bWFjaGluZSBpbnN0cnVjdGlvbnMgKG5vdCBjb3ZlcmVkKTwvYT46IDxhIGhyZWY9Ik1hbnVhbC5odG1sI01hbnVhbCI+TWFudWFsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ludGF4Lmh0bWwjaW5kZXgtbWFjaGluZV8wMDJkaW5kZXBlbmRlbnQtc3ludGF4LTExMiI+bWFjaGluZS1pbmRlcGVuZGVudCBzeW50YXg8L2E+OiA8YSBocmVmPSJTeW50YXguaHRtbCNTeW50YXgiPlN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hY3JvLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtYWNyb18wMDdkLWRpcmVjdGl2ZS00MDAiPjxjb2RlPm1hY3JvPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJNYWNyby5odG1sI01hY3JvIj5NYWNybzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibWFjcm9fMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkzOSI+PGNvZGU+bWFjcm88L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hY3JvLmh0bWwjaW5kZXgtbWFjcm9zLTM5NyI+bWFjcm9zPC9hPjogPGEgaHJlZj0iTWFjcm8uaHRtbCNNYWNybyI+TWFjcm88L2E+PC9saT4KKzxsaT48YSBocmVmPSJNYWNyby5odG1sI2luZGV4LW1hY3Jvc18wMDJjLWNvdW50LWV4ZWN1dGVkLTQwNiI+bWFjcm9zLCBjb3VudCBleGVjdXRlZDwvYT46IDxhIGhyZWY9Ik1hY3JvLmh0bWwjTWFjcm8iPk1hY3JvPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwXzAwMmRNYWNyb3MuaHRtbCNpbmRleC1NYWNyb3NfMDAyYy1NU1AtNDMwLTE0OTkiPk1hY3JvcywgTVNQIDQzMDwvYT46IDxhIGhyZWY9Ik1TUDQzMF8wMDJkTWFjcm9zLmh0bWwjTVNQNDMwXzAwMmRNYWNyb3MiPk1TUDQzMC1NYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI2luZGV4LW1hY3Jvc18wMDJjLVRJQzU0WC0xOTY4Ij5tYWNyb3MsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjVElDNTRYXzAwMmRNYWNyb3MiPlRJQzU0WC1NYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNRC5odG1sI2luZGV4LW1ha2UtcnVsZXMtODMiPm1ha2UgcnVsZXM8L2E+OiA8YSBocmVmPSJNRC5odG1sI01EIj5NRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hbnVhbC5odG1sI2luZGV4LW1hbnVhbF8wMDJjLXN0cnVjdHVyZS1hbmQtcHVycG9zZS0yMSI+bWFudWFsLCBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2U8L2E+OiA8YSBocmVmPSJNYW51YWwuaHRtbCNNYW51YWwiPk1hbnVhbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNpbmRleC1tYXRoLWJ1aWx0aW5zXzAwMmMtVElDNTRYLTE4NTgiPm1hdGggYnVpbHRpbnMsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsaXN0aW5nLmh0bWwjaW5kZXgtTWF4aW11bS1udW1iZXItb2YtY29udGludWF0aW9uLWxpbmVzLTc4Ij5NYXhpbXVtIG51bWJlciBvZiBjb250aW51YXRpb24gbGluZXM8L2E+OiA8YSBocmVmPSJsaXN0aW5nLmh0bWwjbGlzdGluZyI+bGlzdGluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2luZGV4LW1lbW9yeS1yZWZlcmVuY2VzXzAwMmMtaTM4Ni0xMDEzIj5tZW1vcnkgcmVmZXJlbmNlcywgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2kzODZfMDAyZE1lbW9yeSI+aTM4Ni1NZW1vcnk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRNZW1vcnkuaHRtbCNpbmRleC1tZW1vcnktcmVmZXJlbmNlc18wMDJjLXg4Nl8wMDJkNjQtMTAxNSI+bWVtb3J5IHJlZmVyZW5jZXMsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2kzODZfMDAyZE1lbW9yeSI+aTM4Ni1NZW1vcnk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE1NUmVncy5odG1sI2luZGV4LW1lbW9yeV8wMDJkbWFwcGVkLXJlZ2lzdGVyc18wMDJjLVRJQzU0WC0xOTg1Ij5tZW1vcnktbWFwcGVkIHJlZ2lzdGVycywgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRNTVJlZ3MuaHRtbCNUSUM1NFhfMDAyZE1NUmVncyI+VElDNTRYLU1NUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlIuaHRtbCNpbmRleC1tZXJnaW5nLXRleHQtYW5kLWRhdGEtc2VjdGlvbnMtOTEiPm1lcmdpbmcgdGV4dCBhbmQgZGF0YSBzZWN0aW9uczwvYT46IDxhIGhyZWY9IlIuaHRtbCNSIj5SPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3JzLmh0bWwjaW5kZXgtbWVzc2FnZXMtZnJvbS1hc3NlbWJsZXItNDIiPm1lc3NhZ2VzIGZyb20gYXNzZW1ibGVyPC9hPjogPGEgaHJlZj0iRXJyb3JzLmh0bWwjRXJyb3JzIj5FcnJvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1NaWNyb0JsYXplLWFyY2hpdGVjdHVyZXMtMTM1MyI+TWljcm9CbGF6ZSBhcmNoaXRlY3R1cmVzPC9hPjogPGEgaHJlZj0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwjTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Ij5NaWNyb0JsYXplLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemUtRGlyZWN0aXZlcy5odG1sI2luZGV4LU1pY3JvQmxhemUtZGlyZWN0aXZlcy0xMzU1Ij5NaWNyb0JsYXplIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplLURpcmVjdGl2ZXMuaHRtbCNNaWNyb0JsYXplLURpcmVjdGl2ZXMiPk1pY3JvQmxhemUgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemVfMDAyZENoYXJzLmh0bWwjaW5kZXgtTWljcm9CbGF6ZS1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTEzNTciPk1pY3JvQmxhemUgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemVfMDAyZENoYXJzLmh0bWwjTWljcm9CbGF6ZV8wMDJkQ2hhcnMiPk1pY3JvQmxhemUtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplXzAwMmRDaGFycy5odG1sI2luZGV4LU1pY3JvQmxhemUtbGluZS1zZXBhcmF0b3ItMTM2MCI+TWljcm9CbGF6ZSBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemVfMDAyZENoYXJzLmh0bWwjTWljcm9CbGF6ZV8wMDJkQ2hhcnMiPk1pY3JvQmxhemUtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1NaWNyb0JsYXplLXN1cHBvcnQtMTM1NCI+TWljcm9CbGF6ZSBzdXBwb3J0PC9hPjogPGEgaHJlZj0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwjTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Ij5NaWNyb0JsYXplLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluZml4LU9wcy5odG1sI2luZGV4LW1pbnVzXzAwMmMtcGVybWl0dGVkLWFyZ3VtZW50cy0yNjUiPm1pbnVzLCBwZXJtaXR0ZWQgYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iSW5maXgtT3BzLmh0bWwjSW5maXgtT3BzIj5JbmZpeCBPcHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNpbmRleC1NSVBTLWFyY2hpdGVjdHVyZS1vcHRpb25zLTEzNzIiPk1JUFMgYXJjaGl0ZWN0dXJlIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNNSVBTLU9wdHMiPk1JUFMgT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI2luZGV4LU1JUFMtYmlnXzAwMmRlbmRpYW4tb3V0cHV0LTEzNjUiPk1JUFMgYmlnLWVuZGlhbiBvdXRwdXQ8L2E+OiA8YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNNSVBTLU9wdHMiPk1JUFMgT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtSVNBLmh0bWwjaW5kZXgtTUlQUy1DUFUtb3ZlcnJpZGUtMTM4NSI+TUlQUyBDUFUgb3ZlcnJpZGU8L2E+OiA8YSBocmVmPSJNSVBTLUlTQS5odG1sI01JUFMtSVNBIj5NSVBTIElTQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtU3RhYnMuaHRtbCNpbmRleC1NSVBTLWRlYnVnZ2luZy1kaXJlY3RpdmVzLTEzODAiPk1JUFMgZGVidWdnaW5nIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJNSVBTLVN0YWJzLmh0bWwjTUlQUy1TdGFicyI+TUlQUyBTdGFiczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtTUlQUy1EU1AtUmVsZWFzZS0xLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGUtMTQwMyI+TUlQUyBEU1AgUmVsZWFzZSAxIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGU8L2E+OiA8YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtTUlQUy1EU1AtUmVsZWFzZS0yLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGUtMTQwNiI+TUlQUyBEU1AgUmVsZWFzZSAyIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGU8L2E+OiA8YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT2JqZWN0Lmh0bWwjaW5kZXgtTUlQUy1FQ09GRi1zZWN0aW9ucy0xMzc3Ij5NSVBTIEVDT0ZGIHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iTUlQUy1PYmplY3QuaHRtbCNNSVBTLU9iamVjdCI+TUlQUyBPYmplY3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LU1JUFMtZW5kaWFubmVzcy0xNSI+TUlQUyBlbmRpYW5uZXNzPC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LU1JUFMtSVNBLTE5Ij5NSVBTIElTQTwvYT46IDxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1JU0EuaHRtbCNpbmRleC1NSVBTLUlTQS1vdmVycmlkZS0xMzgzIj5NSVBTIElTQSBvdmVycmlkZTwvYT46IDxhIGhyZWY9Ik1JUFMtSVNBLmh0bWwjTUlQUy1JU0EiPk1JUFMgSVNBPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQU18wMDJkQ2hhcnMuaHRtbCNpbmRleC1NSVBTLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMTQyMiI+TUlQUyBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iTUlQU18wMDJkQ2hhcnMuaHRtbCNNSVBTXzAwMmRDaGFycyI+TUlQUy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFNfMDAyZENoYXJzLmh0bWwjaW5kZXgtTUlQUy1saW5lLXNlcGFyYXRvci0xNDI1Ij5NSVBTIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iTUlQU18wMDJkQ2hhcnMuaHRtbCNNSVBTXzAwMmRDaGFycyI+TUlQUy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0cy5odG1sI2luZGV4LU1JUFMtbGl0dGxlXzAwMmRlbmRpYW4tb3V0cHV0LTEzNjYiPk1JUFMgbGl0dGxlLWVuZGlhbiBvdXRwdXQ8L2E+OiA8YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNNSVBTLU9wdHMiPk1JUFMgT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjaW5kZXgtTUlQUy1NQ1UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZS0xNDEyIj5NSVBTIE1DVSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlPC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI2luZGV4LU1JUFMtTURNWC1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlLTE0MDAiPk1JUFMgTURNWCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlPC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI2luZGV4LU1JUFMtTUlQU18wMDJkM0QtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZS0xMzk0Ij5NSVBTIE1JUFMtM0QgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZTwvYT46IDxhIGhyZWY9Ik1JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwjTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMiPk1JUFMgQVNFIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNpbmRleC1NSVBTLU1ULWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGUtMTQwOSI+TUlQUyBNVCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlPC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLW9wdGlvbi1zdGFjay5odG1sI2luZGV4LU1JUFMtb3B0aW9uLXN0YWNrLTEzOTEiPk1JUFMgb3B0aW9uIHN0YWNrPC9hPjogPGEgaHJlZj0iTUlQUy1vcHRpb24tc3RhY2suaHRtbCNNSVBTLW9wdGlvbi1zdGFjayI+TUlQUyBvcHRpb24gc3RhY2s8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1NSVBTLXByb2Nlc3Nvci0xMzYxIj5NSVBTIHByb2Nlc3NvcjwvYT46IDxhIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCI+TUlQUy1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRTeW50YXguaHRtbCNpbmRleC1nX3RfMDA0MHNjXzAwN2JtaXRfMDA3ZC0xMjU3Ij48c3BhbiBjbGFzcz0ic2MiPm1pdDwvc3Bhbj48L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRTeW50YXguaHRtbCNNNjhLXzAwMmRTeW50YXgiPk02OEstU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtbGliXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NDEiPjxjb2RlPm1saWI8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibWxpc3RfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk0MiI+PGNvZGU+bWxpc3Q8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1NTUlYLWFzc2VtYmxlci1kaXJlY3RpdmUtQlNQRUMtMTQ4NyI+TU1JWCBhc3NlbWJsZXIgZGlyZWN0aXZlIEJTUEVDPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1NTUlYLWFzc2VtYmxlci1kaXJlY3RpdmUtQllURS0xNDY3Ij5NTUlYIGFzc2VtYmxlciBkaXJlY3RpdmUgQllURTwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUVTUEVDLTE0OTEiPk1NSVggYXNzZW1ibGVyIGRpcmVjdGl2ZSBFU1BFQzwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUdSRUctMTQ2MyI+TU1JWCBhc3NlbWJsZXIgZGlyZWN0aXZlIEdSRUc8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LU1NSVgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1JUy0xNDU5Ij5NTUlYIGFzc2VtYmxlciBkaXJlY3RpdmUgSVM8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LU1NSVgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1MT0MtMTQ1MSI+TU1JWCBhc3NlbWJsZXIgZGlyZWN0aXZlIExPQzwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUxPQ0FMLTE0NTUiPk1NSVggYXNzZW1ibGVyIGRpcmVjdGl2ZSBMT0NBTDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLU9DVEEtMTQ3OSI+TU1JWCBhc3NlbWJsZXIgZGlyZWN0aXZlIE9DVEE8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LU1NSVgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1QUkVGSVgtMTQ4MyI+TU1JWCBhc3NlbWJsZXIgZGlyZWN0aXZlIFBSRUZJWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLVRFVFJBLTE0NzUiPk1NSVggYXNzZW1ibGVyIGRpcmVjdGl2ZSBURVRSQTwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLVdZREUtMTQ3MSI+TU1JWCBhc3NlbWJsZXIgZGlyZWN0aXZlIFdZREU8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LU1NSVgtYXNzZW1ibGVyLWRpcmVjdGl2ZXMtMTQ0NyI+TU1JWCBhc3NlbWJsZXIgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRDaGFycy5odG1sI2luZGV4LU1NSVgtbGluZS1jb21tZW50LWNoYXJhY3RlcnMtMTQ0MiI+TU1JWCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyczwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZENoYXJzLmh0bWwjTU1JWF8wMDJkQ2hhcnMiPk1NSVgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjaW5kZXgtTU1JWC1vcHRpb25zLTE0MjgiPk1NSVggb3B0aW9uczwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZE9wdHMuaHRtbCNNTUlYXzAwMmRPcHRzIj5NTUlYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1wc2V1ZG9fMDAyZG9wLUJTUEVDLTE0ODgiPk1NSVggcHNldWRvLW9wIEJTUEVDPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1NTUlYLXBzZXVkb18wMDJkb3AtQllURS0xNDY4Ij5NTUlYIHBzZXVkby1vcCBCWVRFPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1NTUlYLXBzZXVkb18wMDJkb3AtRVNQRUMtMTQ5MiI+TU1JWCBwc2V1ZG8tb3AgRVNQRUM8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LU1NSVgtcHNldWRvXzAwMmRvcC1HUkVHLTE0NjQiPk1NSVggcHNldWRvLW9wIEdSRUc8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LU1NSVgtcHNldWRvXzAwMmRvcC1JUy0xNDYwIj5NTUlYIHBzZXVkby1vcCBJUzwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1wc2V1ZG9fMDAyZG9wLUxPQy0xNDUyIj5NTUlYIHBzZXVkby1vcCBMT0M8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LU1NSVgtcHNldWRvXzAwMmRvcC1MT0NBTC0xNDU2Ij5NTUlYIHBzZXVkby1vcCBMT0NBTDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1wc2V1ZG9fMDAyZG9wLU9DVEEtMTQ4MCI+TU1JWCBwc2V1ZG8tb3AgT0NUQTwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1wc2V1ZG9fMDAyZG9wLVBSRUZJWC0xNDg0Ij5NTUlYIHBzZXVkby1vcCBQUkVGSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LU1NSVgtcHNldWRvXzAwMmRvcC1URVRSQS0xNDc2Ij5NTUlYIHBzZXVkby1vcCBURVRSQTwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1wc2V1ZG9fMDAyZG9wLVdZREUtMTQ3MiI+TU1JWCBwc2V1ZG8tb3AgV1lERTwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtTU1JWC1wc2V1ZG9fMDAyZG9wcy0xNDQ4Ij5NTUlYIHBzZXVkby1vcHM8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUmVncy5odG1sI2luZGV4LU1NSVgtcmVnaXN0ZXItbmFtZXMtMTQ0NCI+TU1JWCByZWdpc3RlciBuYW1lczwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFJlZ3MuaHRtbCNNTUlYXzAwMmRSZWdzIj5NTUlYLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1NTUlYLXN1cHBvcnQtMTQyNiI+TU1JWCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkRGVwZW5kZW50Lmh0bWwjTU1JWF8wMDJkRGVwZW5kZW50Ij5NTUlYLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZG1taXhhbC5odG1sI2luZGV4LW1taXhhbC1kaWZmZXJlbmNlcy0xNDkzIj5tbWl4YWwgZGlmZmVyZW5jZXM8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRtbWl4YWwuaHRtbCNNTUlYXzAwMmRtbWl4YWwiPk1NSVgtbW1peGFsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtbXJlZ3NfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk0NCI+PGNvZGU+bW1yZWdzPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym1tc2dfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkxMSI+PGNvZGU+bW1zZzwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkU0lNRC5odG1sI2luZGV4LU1NWF8wMDJjLWkzODYtMTA0MCI+TU1YLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkU0lNRC5odG1sI2kzODZfMDAyZFNJTUQiPmkzODYtU0lNRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFNJTUQuaHRtbCNpbmRleC1NTVhfMDAyYy14ODZfMDAyZDY0LTEwNDMiPk1NWCwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkU0lNRC5odG1sI2kzODZfMDAyZFNJTUQiPmkzODYtU0lNRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2luZGV4LW1uZW1vbmljLWNvbXBhdGliaWxpdHlfMDAyYy1pMzg2LTk5NyI+bW5lbW9uaWMgY29tcGF0aWJpbGl0eSwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+aTM4Ni1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgtbW5lbW9uaWMtc3VmZml4ZXNfMDAyYy1pMzg2LTk2MyI+bW5lbW9uaWMgc3VmZml4ZXMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LW1uZW1vbmljLXN1ZmZpeGVzXzAwMmMteDg2XzAwMmQ2NC05NjYiPm1uZW1vbmljIHN1ZmZpeGVzLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGNvZGVzLmh0bWwjaW5kZXgtbW5lbW9uaWNzLWZvci1vcGNvZGVzXzAwMmMtVkFYLTIxNDUiPm1uZW1vbmljcyBmb3Igb3Bjb2RlcywgVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRvcGNvZGVzLmh0bWwjVkFYXzAwMmRvcGNvZGVzIj5WQVgtb3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcGNvZGVzLmh0bWwjaW5kZXgtbW5lbW9uaWNzXzAwMmMtQVZSLTcyNCI+bW5lbW9uaWNzLCBBVlI8L2E+OiA8YSBocmVmPSJBVlItT3Bjb2Rlcy5odG1sI0FWUi1PcGNvZGVzIj5BVlIgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZE9wY29kZXMuaHRtbCNpbmRleC1tbmVtb25pY3NfMDAyYy1EMTBWLTgyMyI+bW5lbW9uaWNzLCBEMTBWPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkT3Bjb2Rlcy5odG1sI0QxMFZfMDAyZE9wY29kZXMiPkQxMFYtT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZE9wY29kZXMuaHRtbCNpbmRleC1tbmVtb25pY3NfMDAyYy1EMzBWLTg0OSI+bW5lbW9uaWNzLCBEMzBWPC9hPjogPGEgaHJlZj0iRDMwVl8wMDJkT3Bjb2Rlcy5odG1sI0QzMFZfMDAyZE9wY29kZXMiPkQzMFYtT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI2luZGV4LW1uZW1vbmljc18wMDJjLUg4XzAwMmYzMDAtODgyIj5tbmVtb25pY3MsIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI0g4XzAwMmYzMDAtT3Bjb2RlcyI+SDgvMzAwIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyLU9wY29kZXMuaHRtbCNpbmRleC1tbmVtb25pY3NfMDAyYy1MTTMyLTExNjkiPm1uZW1vbmljcywgTE0zMjwvYT46IDxhIGhyZWY9IkxNMzItT3Bjb2Rlcy5odG1sI0xNMzItT3Bjb2RlcyI+TE0zMiBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3Bjb2Rlcy5odG1sI2luZGV4LW1uZW1vbmljc18wMDJjLVNILTE3NjIiPm1uZW1vbmljcywgU0g8L2E+OiA8YSBocmVmPSJTSC1PcGNvZGVzLmh0bWwjU0gtT3Bjb2RlcyI+U0ggT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNINjQtT3Bjb2Rlcy5odG1sI2luZGV4LW1uZW1vbmljc18wMDJjLVNINjQtMTc4NyI+bW5lbW9uaWNzLCBTSDY0PC9hPjogPGEgaHJlZj0iU0g2NC1PcGNvZGVzLmh0bWwjU0g2NC1PcGNvZGVzIj5TSDY0IE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1PcGNvZGVzLmh0bWwjaW5kZXgtbW5lbW9uaWNzXzAwMmMtWjgwMDAtMjExMSI+bW5lbW9uaWNzLCBaODAwMDwvYT46IDxhIGhyZWY9Ilo4MDAwLU9wY29kZXMuaHRtbCNaODAwMC1PcGNvZGVzIj5aODAwMCBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jtbm9saXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NDMiPjxjb2RlPm1ub2xpc3Q8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMkNfMDAyZE1vZGlmaWVycy5odG1sI2luZGV4LW1vZGlmaWVyc18wMDJjLU0zMkMtMTE4MSI+bW9kaWZpZXJzLCBNMzJDPC9hPjogPGEgaHJlZj0iTTMyQ18wMDJkTW9kaWZpZXJzLmh0bWwjTTMyQ18wMDJkTW9kaWZpZXJzIj5NMzJDLU1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZE1vdG9fMDAyZFN5bnRheC5odG1sI2luZGV4LU1vdG9yb2xhLXN5bnRheC1mb3ItdGhlLTY4MHgwLTEyNjQiPk1vdG9yb2xhIHN5bnRheCBmb3IgdGhlIDY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkTW90b18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkTW90b18wMDJkU3ludGF4Ij5NNjhLLU1vdG8tU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JNT1ZJXzAwN2QtaW5zdHJ1Y3Rpb25zXzAwMmMtcmVsYXhhdGlvbi0yMzA2Ij48Y29kZT5NT1ZJPC9jb2RlPiBpbnN0cnVjdGlvbnMsIHJlbGF4YXRpb248L2E+OiA8YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPlh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjRfMDAyZFJlbG9jYXRpb25zLmh0bWwjaW5kZXgtTU9WTl8wMDJjLU1PVlotYW5kLU1PVkstZ3JvdXAtcmVsb2NhdGlvbnNfMDAyYy1BQXJjaDY0LTUzMiI+TU9WTiwgTU9WWiBhbmQgTU9WSyBncm91cCByZWxvY2F0aW9ucywgQUFyY2g2NDwvYT46IDxhIGhyZWY9IkFBcmNoNjRfMDAyZFJlbG9jYXRpb25zLmh0bWwjQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMiPkFBcmNoNjQtUmVsb2NhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk1fMDAyZFJlbG9jYXRpb25zLmh0bWwjaW5kZXgtTU9WVy1hbmQtTU9WVC1yZWxvY2F0aW9uc18wMDJjLUFSTS02NTAiPk1PVlcgYW5kIE1PVlQgcmVsb2NhdGlvbnMsIEFSTTwvYT46IDxhIGhyZWY9IkFSTV8wMDJkUmVsb2NhdGlvbnMuaHRtbCNBUk1fMDAyZFJlbG9jYXRpb25zIj5BUk0tUmVsb2NhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNLmh0bWwjaW5kZXgtTVJJLWNvbXBhdGliaWxpdHktbW9kZS04MCI+TVJJIGNvbXBhdGliaWxpdHkgbW9kZTwvYT46IDxhIGhyZWY9Ik0uaHRtbCNNIj5NPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtcmlfMDA3ZC1kaXJlY3RpdmUtNDA5Ij48Y29kZT5tcmk8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9Ik1SSS5odG1sI01SSSI+TVJJPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjaW5kZXgtTVJJLW1vZGVfMDAyYy10ZW1wb3JhcmlseS00MTAiPk1SSSBtb2RlLCB0ZW1wb3JhcmlseTwvYT46IDxhIGhyZWY9Ik1SSS5odG1sI01SSSI+TVJJPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtTVNQLTQzMC1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTE1MTMiPk1TUCA0MzAgZmxvYXRpbmcgcG9pbnQgKDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4pPC9hPjogPGEgaHJlZj0iTVNQNDMwLUZsb2F0aW5nLVBvaW50Lmh0bWwjTVNQNDMwLUZsb2F0aW5nLVBvaW50Ij5NU1A0MzAgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzBfMDAyZENoYXJzLmh0bWwjaW5kZXgtTVNQLTQzMC1pZGVudGlmaWVycy0xNTA3Ij5NU1AgNDMwIGlkZW50aWZpZXJzPC9hPjogPGEgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI01TUDQzMF8wMDJkQ2hhcnMiPk1TUDQzMC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1NU1AtNDMwLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMTUwMiI+TVNQIDQzMCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI01TUDQzMF8wMDJkQ2hhcnMiPk1TUDQzMC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1NU1AtNDMwLWxpbmUtc2VwYXJhdG9yLTE1MDUiPk1TUCA0MzAgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJNU1A0MzBfMDAyZENoYXJzLmh0bWwjTVNQNDMwXzAwMmRDaGFycyI+TVNQNDMwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1NU1AtNDMwLW1hY2hpbmUtZGlyZWN0aXZlcy0xNTE1Ij5NU1AgNDMwIG1hY2hpbmUgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9Ik1TUDQzMC1EaXJlY3RpdmVzLmh0bWwjTVNQNDMwLURpcmVjdGl2ZXMiPk1TUDQzMCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwXzAwMmRNYWNyb3MuaHRtbCNpbmRleC1NU1AtNDMwLW1hY3Jvcy0xNTAwIj5NU1AgNDMwIG1hY3JvczwvYT46IDxhIGhyZWY9Ik1TUDQzMF8wMDJkTWFjcm9zLmh0bWwjTVNQNDMwXzAwMmRNYWNyb3MiPk1TUDQzMC1NYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzAtT3Bjb2Rlcy5odG1sI2luZGV4LU1TUC00MzAtb3Bjb2Rlcy0xNTIwIj5NU1AgNDMwIG9wY29kZXM8L2E+OiA8YSBocmVmPSJNU1A0MzAtT3Bjb2Rlcy5odG1sI01TUDQzMC1PcGNvZGVzIj5NU1A0MzAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC1PcHRpb25zLmh0bWwjaW5kZXgtTVNQLTQzMC1vcHRpb25zLV8wMDI4bm9uZV8wMDI5LTE0OTciPk1TUCA0MzAgb3B0aW9ucyAobm9uZSk8L2E+OiA8YSBocmVmPSJNU1A0MzAtT3B0aW9ucy5odG1sI01TUDQzMC1PcHRpb25zIj5NU1A0MzAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC1Qcm9maWxpbmctQ2FwYWJpbGl0eS5odG1sI2luZGV4LU1TUC00MzAtcHJvZmlsaW5nLWNhcGFiaWxpdHktMTUyMiI+TVNQIDQzMCBwcm9maWxpbmcgY2FwYWJpbGl0eTwvYT46IDxhIGhyZWY9Ik1TUDQzMC1Qcm9maWxpbmctQ2FwYWJpbGl0eS5odG1sI01TUDQzMC1Qcm9maWxpbmctQ2FwYWJpbGl0eSI+TVNQNDMwIFByb2ZpbGluZyBDYXBhYmlsaXR5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwXzAwMmRSZWdzLmh0bWwjaW5kZXgtTVNQLTQzMC1yZWdpc3Rlci1uYW1lcy0xNTA4Ij5NU1AgNDMwIHJlZ2lzdGVyIG5hbWVzPC9hPjogPGEgaHJlZj0iTVNQNDMwXzAwMmRSZWdzLmh0bWwjTVNQNDMwXzAwMmRSZWdzIj5NU1A0MzAtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtTVNQLTQzMC1zdXBwb3J0LTE0OTUiPk1TUCA0MzAgc3VwcG9ydDwvYT46IDxhIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiPk1TUDQzMC1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzBfMDAyZEV4dC5odG1sI2luZGV4LU1TUDQzMC1Bc3NlbWJsZXItRXh0ZW5zaW9ucy0xNTExIj5NU1A0MzAgQXNzZW1ibGVyIEV4dGVuc2lvbnM8L2E+OiA8YSBocmVmPSJNU1A0MzBfMDAyZEV4dC5odG1sI01TUDQzMF8wMDJkRXh0Ij5NU1A0MzAtRXh0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTm90ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym11bF8wMDdkLWluc3RydWN0aW9uXzAwMmMtaTM4Ni0xMDY1Ij48Y29kZT5tdWw8L2NvZGU+IGluc3RydWN0aW9uLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkTm90ZXMuaHRtbCNpMzg2XzAwMmROb3RlcyI+aTM4Ni1Ob3RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE5vdGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtdWxfMDA3ZC1pbnN0cnVjdGlvbl8wMDJjLXg4Nl8wMDJkNjQtMTA2NyI+PGNvZGU+bXVsPC9jb2RlPiBpbnN0cnVjdGlvbiwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkTm90ZXMuaHRtbCNpMzg2XzAwMmROb3RlcyI+aTM4Ni1Ob3RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5TMzJLXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1OMzJLLXN1cHBvcnQtMTUyNCI+TjMySyBzdXBwb3J0PC9hPjogPGEgaHJlZj0iTlMzMktfMDAyZERlcGVuZGVudC5odG1sI05TMzJLXzAwMmREZXBlbmRlbnQiPk5TMzJLLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1uYW1lLTIxMDAiPjxjb2RlPm5hbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiPlo4MDAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTZWN0aW9uLmh0bWwjaW5kZXgtbmFtZWQtc2VjdGlvbi00NDkiPm5hbWVkIHNlY3Rpb248L2E+OiA8YSBocmVmPSJTZWN0aW9uLmh0bWwjU2VjdGlvbiI+U2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxkLVNlY3Rpb25zLmh0bWwjaW5kZXgtbmFtZWQtc2VjdGlvbnMtMTkyIj5uYW1lZCBzZWN0aW9uczwvYT46IDxhIGhyZWY9IkxkLVNlY3Rpb25zLmh0bWwjTGQtU2VjdGlvbnMiPkxkIFNlY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjaW5kZXgtbmFtZXNfMDAyYy1zeW1ib2wtMjE0Ij5uYW1lcywgc3ltYm9sPC9hPjogPGEgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjU3ltYm9sLU5hbWVzIj5TeW1ib2wgTmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvLmh0bWwjaW5kZXgtbmFtaW5nLW9iamVjdC1maWxlLTg1Ij5uYW1pbmcgb2JqZWN0IGZpbGU8L2E+OiA8YSBocmVmPSJvLmh0bWwjbyI+bzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVqZWN0Lmh0bWwjaW5kZXgtbmV3LXBhZ2VfMDAyYy1pbi1saXN0aW5ncy0zMTciPm5ldyBwYWdlLCBpbiBsaXN0aW5nczwvYT46IDxhIGhyZWY9IkVqZWN0Lmh0bWwjRWplY3QiPkVqZWN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JuZXdibG9ja18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTQ1Ij48Y29kZT5uZXdibG9jazwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5ncy5odG1sI2luZGV4LW5ld2xpbmUtXzAwMjhfMDA0MGNvZGVfMDA3Yl8wMDVjbl8wMDdkXzAwMjktMTUxIj5uZXdsaW5lICg8Y29kZT5cbjwvY29kZT4pPC9hPjogPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjaW5kZXgtbmV3bGluZV8wMDJjLXJlcXVpcmVkLWF0LWZpbGUtZW5kLTEzMyI+bmV3bGluZSwgcmVxdWlyZWQgYXQgZmlsZSBlbmQ8L2E+OiA8YSBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjU3RhdGVtZW50cyI+U3RhdGVtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFic29sdXRlLUxpdGVyYWxzLURpcmVjdGl2ZS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibm9fMDAyZGFic29sdXRlXzAwMmRsaXRlcmFsc18wMDdkLWRpcmVjdGl2ZS0yMzMwIj48Y29kZT5uby1hYnNvbHV0ZS1saXRlcmFsczwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iQWJzb2x1dGUtTGl0ZXJhbHMtRGlyZWN0aXZlLmh0bWwjQWJzb2x1dGUtTGl0ZXJhbHMtRGlyZWN0aXZlIj5BYnNvbHV0ZSBMaXRlcmFscyBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb25nY2FsbHMtRGlyZWN0aXZlLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub18wMDJkbG9uZ2NhbGxzXzAwN2QtZGlyZWN0aXZlLTIzMjMiPjxjb2RlPm5vLWxvbmdjYWxsczwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTG9uZ2NhbGxzLURpcmVjdGl2ZS5odG1sI0xvbmdjYWxscy1EaXJlY3RpdmUiPkxvbmdjYWxscyBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTY2hlZHVsZS1EaXJlY3RpdmUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vXzAwMmRzY2hlZHVsZV8wMDdkLWRpcmVjdGl2ZS0yMzIxIj48Y29kZT5uby1zY2hlZHVsZTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iU2NoZWR1bGUtRGlyZWN0aXZlLmh0bWwjU2NoZWR1bGUtRGlyZWN0aXZlIj5TY2hlZHVsZSBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUcmFuc2Zvcm0tRGlyZWN0aXZlLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub18wMDJkdHJhbnNmb3JtXzAwN2QtZGlyZWN0aXZlLTIzMjUiPjxjb2RlPm5vLXRyYW5zZm9ybTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iVHJhbnNmb3JtLURpcmVjdGl2ZS5odG1sI1RyYW5zZm9ybS1EaXJlY3RpdmUiPlRyYW5zZm9ybSBEaXJlY3RpdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOb2xpc3QuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vbGlzdF8wMDdkLWRpcmVjdGl2ZS00MTEiPjxjb2RlPm5vbGlzdDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iTm9saXN0Lmh0bWwjTm9saXN0Ij5Ob2xpc3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vbGlzdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTMyIj48Y29kZT5ub2xpc3Q8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcGNvZGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JOT1BfMDA3ZC1wc2V1ZG8tb3BfMDAyYy1BUk0tNjk4Ij48Y29kZT5OT1A8L2NvZGU+IHBzZXVkbyBvcCwgQVJNPC9hPjogPGEgaHJlZj0iQVJNLU9wY29kZXMuaHRtbCNBUk0tT3Bjb2RlcyI+QVJNIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHBoYS1Ob3Rlcy5odG1sI2luZGV4LW5vdGVzLWZvci1BbHBoYS01NTAiPm5vdGVzIGZvciBBbHBoYTwvYT46IDxhIGhyZWY9IkFscGhhLU5vdGVzLmh0bWwjQWxwaGEtTm90ZXMiPkFscGhhIE5vdGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTlMzMktfMDAyZENoYXJzLmh0bWwjaW5kZXgtTlMzMkstbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNTI2Ij5OUzMySyBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iTlMzMktfMDAyZENoYXJzLmh0bWwjTlMzMktfMDAyZENoYXJzIj5OUzMySy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5TMzJLXzAwMmRDaGFycy5odG1sI2luZGV4LU5TMzJLLWxpbmUtc2VwYXJhdG9yLTE1MjkiPk5TMzJLIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iTlMzMktfMDAyZENoYXJzLmh0bWwjTlMzMktfMDAyZENoYXJzIj5OUzMySy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFzY2l6Lmh0bWwjaW5kZXgtbnVsbF8wMDJkdGVybWluYXRlZC1zdHJpbmdzLTI4NSI+bnVsbC10ZXJtaW5hdGVkIHN0cmluZ3M8L2E+OiA8YSBocmVmPSJBc2Npei5odG1sI0FzY2l6Ij5Bc2NpejwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik51bWJlcnMuaHRtbCNpbmRleC1udW1iZXItY29uc3RhbnRzLTE2OCI+bnVtYmVyIGNvbnN0YW50czwvYT46IDxhIGhyZWY9Ik51bWJlcnMuaHRtbCNOdW1iZXJzIj5OdW1iZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWFjcm8uaHRtbCNpbmRleC1udW1iZXItb2YtbWFjcm9zLWV4ZWN1dGVkLTQwNSI+bnVtYmVyIG9mIG1hY3JvcyBleGVjdXRlZDwvYT46IDxhIGhyZWY9Ik1hY3JvLmh0bWwjTWFjcm8iPk1hY3JvPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ViXzAwMmRTZWN0aW9ucy5odG1sI2luZGV4LW51bWJlcmVkLXN1YnNlY3Rpb25zLTIwNCI+bnVtYmVyZWQgc3Vic2VjdGlvbnM8L2E+OiA8YSBocmVmPSJTdWJfMDAyZFNlY3Rpb25zLmh0bWwjU3ViXzAwMmRTZWN0aW9ucyI+U3ViLVNlY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaHdvcmQuaHRtbCNpbmRleC1udW1iZXJzXzAwMmMtMTZfMDAyZGJpdC0zNTAiPm51bWJlcnMsIDE2LWJpdDwvYT46IDxhIGhyZWY9Imh3b3JkLmh0bWwjaHdvcmQiPmh3b3JkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNpbmRleC1udW1lcmljLXZhbHVlcy0yNDMiPm51bWVyaWMgdmFsdWVzPC9hPjogPGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibndvcmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1TUEFSQy0xODM3Ij48Y29kZT5ud29yZDwvY29kZT4gZGlyZWN0aXZlLCBTUEFSQzwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjU3BhcmNfMDAyZERpcmVjdGl2ZXMiPlNwYXJjLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtQXR0cmlidXRlcy5odG1sI2luZGV4LW9iamVjdC1hdHRyaWJ1dGVzLTUxMyI+b2JqZWN0IGF0dHJpYnV0ZXM8L2E+OiA8YSBocmVmPSJPYmplY3QtQXR0cmlidXRlcy5odG1sI09iamVjdC1BdHRyaWJ1dGVzIj5PYmplY3QgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdC5odG1sI2luZGV4LW9iamVjdC1maWxlLTM0Ij5vYmplY3QgZmlsZTwvYT46IDxhIGhyZWY9Ik9iamVjdC5odG1sI09iamVjdCI+T2JqZWN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0LUZvcm1hdHMuaHRtbCNpbmRleC1vYmplY3QtZmlsZS1mb3JtYXQtMjQiPm9iamVjdCBmaWxlIGZvcm1hdDwvYT46IDxhIGhyZWY9Ik9iamVjdC1Gb3JtYXRzLmh0bWwjT2JqZWN0LUZvcm1hdHMiPk9iamVjdCBGb3JtYXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iby5odG1sI2luZGV4LW9iamVjdC1maWxlLW5hbWUtODYiPm9iamVjdCBmaWxlIG5hbWU8L2E+OiA8YSBocmVmPSJvLmh0bWwjbyI+bzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlouaHRtbCNpbmRleC1vYmplY3QtZmlsZV8wMDJjLWFmdGVyLWVycm9ycy0xMTAiPm9iamVjdCBmaWxlLCBhZnRlciBlcnJvcnM8L2E+OiA8YSBocmVmPSJaLmh0bWwjWiI+WjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlcHJlY2F0ZWQuaHRtbCNpbmRleC1vYnNvbGVzY2VudC1kaXJlY3RpdmVzLTUxMiI+b2Jzb2xlc2NlbnQgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IkRlcHJlY2F0ZWQuaHRtbCNEZXByZWNhdGVkIj5EZXByZWNhdGVkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2N0YS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdib2N0YV8wMDdkLWRpcmVjdGl2ZS00MTMiPjxjb2RlPm9jdGE8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9Ik9jdGEuaHRtbCNPY3RhIj5PY3RhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5ncy5odG1sI2luZGV4LW9jdGFsLWNoYXJhY3Rlci1jb2RlLV8wMDI4XzAwNDBjb2RlXzAwN2JfMDA1Y18wMDQwdmFyXzAwN2JkZGRfMDA3ZF8wMDdkXzAwMjktMTU3Ij5vY3RhbCBjaGFyYWN0ZXIgY29kZSAoPGNvZGU+XDwvY29kZT48dmFyPmRkZDwvdmFyPik8L2E+OiA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkludGVnZXJzLmh0bWwjaW5kZXgtb2N0YWwtaW50ZWdlcnMtMTczIj5vY3RhbCBpbnRlZ2VyczwvYT46IDxhIGhyZWY9IkludGVnZXJzLmh0bWwjSW50ZWdlcnMiPkludGVnZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2Zmc2V0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JvZmZzZXRfMDA3ZC1kaXJlY3RpdmUtNDE2Ij48Y29kZT5vZmZzZXQ8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9Ik9mZnNldC5odG1sI09mZnNldCI+T2Zmc2V0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JvZmZzZXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WODUwLTIyMDgiPjxjb2RlPm9mZnNldDwvY29kZT4gZGlyZWN0aXZlLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjVjg1MC1EaXJlY3RpdmVzIj5WODUwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZG9wY29kZXMuaHRtbCNpbmRleC1vcGNvZGUtbW5lbW9uaWNzXzAwMmMtVkFYLTIxNDQiPm9wY29kZSBtbmVtb25pY3MsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkb3Bjb2Rlcy5odG1sI1ZBWF8wMDJkb3Bjb2RlcyI+VkFYLW9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1PcGNvZGVzLmh0bWwjaW5kZXgtb3Bjb2RlLW5hbWVzXzAwMmMtVElMRV8wMDJkR3gtMjAzMCI+b3Bjb2RlIG5hbWVzLCBUSUxFLUd4PC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtT3Bjb2Rlcy5odG1sI1RJTEVfMDAyZEd4LU9wY29kZXMiPlRJTEUtR3ggT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tT3Bjb2Rlcy5odG1sI2luZGV4LW9wY29kZS1uYW1lc18wMDJjLVRJTEVQcm8tMjA0NCI+b3Bjb2RlIG5hbWVzLCBUSUxFUHJvPC9hPjogPGEgaHJlZj0iVElMRVByby1PcGNvZGVzLmh0bWwjVElMRVByby1PcGNvZGVzIj5USUxFUHJvIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3Bjb2Rlcy5odG1sI2luZGV4LW9wY29kZS1uYW1lc18wMDJjLVh0ZW5zYS0yMjg4Ij5vcGNvZGUgbmFtZXMsIFh0ZW5zYTwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1PcGNvZGVzLmh0bWwjWHRlbnNhLU9wY29kZXMiPlh0ZW5zYSBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wY29kZXMuaHRtbCNpbmRleC1vcGNvZGUtc3VtbWFyeV8wMDJjLUFWUi03MjMiPm9wY29kZSBzdW1tYXJ5LCBBVlI8L2E+OiA8YSBocmVmPSJBVlItT3Bjb2Rlcy5odG1sI0FWUi1PcGNvZGVzIj5BVlIgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZE9wY29kZXMuaHRtbCNpbmRleC1vcGNvZGUtc3VtbWFyeV8wMDJjLUQxMFYtODIyIj5vcGNvZGUgc3VtbWFyeSwgRDEwVjwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZE9wY29kZXMuaHRtbCNEMTBWXzAwMmRPcGNvZGVzIj5EMTBWLU9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRPcGNvZGVzLmh0bWwjaW5kZXgtb3Bjb2RlLXN1bW1hcnlfMDAyYy1EMzBWLTg0OCI+b3Bjb2RlIHN1bW1hcnksIEQzMFY8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRPcGNvZGVzLmh0bWwjRDMwVl8wMDJkT3Bjb2RlcyI+RDMwVi1PcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC1PcGNvZGVzLmh0bWwjaW5kZXgtb3Bjb2RlLXN1bW1hcnlfMDAyYy1IOF8wMDJmMzAwLTg4MSI+b3Bjb2RlIHN1bW1hcnksIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI0g4XzAwMmYzMDAtT3Bjb2RlcyI+SDgvMzAwIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyLU9wY29kZXMuaHRtbCNpbmRleC1vcGNvZGUtc3VtbWFyeV8wMDJjLUxNMzItMTE2OCI+b3Bjb2RlIHN1bW1hcnksIExNMzI8L2E+OiA8YSBocmVmPSJMTTMyLU9wY29kZXMuaHRtbCNMTTMyLU9wY29kZXMiPkxNMzIgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wY29kZXMuaHRtbCNpbmRleC1vcGNvZGUtc3VtbWFyeV8wMDJjLVNILTE3NjEiPm9wY29kZSBzdW1tYXJ5LCBTSDwvYT46IDxhIGhyZWY9IlNILU9wY29kZXMuaHRtbCNTSC1PcGNvZGVzIj5TSCBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0g2NC1PcGNvZGVzLmh0bWwjaW5kZXgtb3Bjb2RlLXN1bW1hcnlfMDAyYy1TSDY0LTE3ODYiPm9wY29kZSBzdW1tYXJ5LCBTSDY0PC9hPjogPGEgaHJlZj0iU0g2NC1PcGNvZGVzLmh0bWwjU0g2NC1PcGNvZGVzIj5TSDY0IE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1PcGNvZGVzLmh0bWwjaW5kZXgtb3Bjb2RlLXN1bW1hcnlfMDAyYy1aODAwMC0yMTEwIj5vcGNvZGUgc3VtbWFyeSwgWjgwMDA8L2E+OiA8YSBocmVmPSJaODAwMC1PcGNvZGVzLmh0bWwjWjgwMDAtT3Bjb2RlcyI+WjgwMDAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3Bjb2Rlcy5odG1sI2luZGV4LW9wY29kZXMtZm9yLUFBcmNoNjQtNTQ0Ij5vcGNvZGVzIGZvciBBQXJjaDY0PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcGNvZGVzLmh0bWwjQUFyY2g2NC1PcGNvZGVzIj5BQXJjaDY0IE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtT3Bjb2Rlcy5odG1sI2luZGV4LW9wY29kZXMtZm9yLUFSQy02MTAiPm9wY29kZXMgZm9yIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1PcGNvZGVzLmh0bWwjQVJDLU9wY29kZXMiPkFSQyBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wY29kZXMuaHRtbCNpbmRleC1vcGNvZGVzLWZvci1BUk0tNjk3Ij5vcGNvZGVzIGZvciBBUk08L2E+OiA8YSBocmVmPSJBUk0tT3Bjb2Rlcy5odG1sI0FSTS1PcGNvZGVzIj5BUk0gT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC1PcGNvZGVzLmh0bWwjaW5kZXgtb3Bjb2Rlcy1mb3ItTVNQLTQzMC0xNTIxIj5vcGNvZGVzIGZvciBNU1AgNDMwPC9hPjogPGEgaHJlZj0iTVNQNDMwLU9wY29kZXMuaHRtbCNNU1A0MzAtT3Bjb2RlcyI+TVNQNDMwIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNpbmRleC1vcGNvZGVzLWZvci1WODUwLTIyMTYiPm9wY29kZXMgZm9yIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNWODUwLU9wY29kZXMiPlY4NTAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wY29kZXMtZm9yLWk4NjAuaHRtbCNpbmRleC1vcGNvZGVzXzAwMmMtaTg2MC0xMDc1Ij5vcGNvZGVzLCBpODYwPC9hPjogPGEgaHJlZj0iT3Bjb2Rlcy1mb3ItaTg2MC5odG1sI09wY29kZXMtZm9yLWk4NjAiPk9wY29kZXMgZm9yIGk4NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcGNvZGVzLWZvci1pOTYwLmh0bWwjaW5kZXgtb3Bjb2Rlc18wMDJjLWk5NjAtMTEwMiI+b3Bjb2RlcywgaTk2MDwvYT46IDxhIGhyZWY9Ik9wY29kZXMtZm9yLWk5NjAuaHRtbCNPcGNvZGVzLWZvci1pOTYwIj5PcGNvZGVzIGZvciBpOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkb3Bjb2Rlcy5odG1sI2luZGV4LW9wY29kZXNfMDAyYy1NNjgweDAtMTI4MSI+b3Bjb2RlcywgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkb3Bjb2Rlcy5odG1sI002OEtfMDAyZG9wY29kZXMiPk02OEstb3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZG9wY29kZXMuaHRtbCNpbmRleC1vcGNvZGVzXzAwMmMtTTY4SEMxMS0xMzQ3Ij5vcGNvZGVzLCBNNjhIQzExPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkb3Bjb2Rlcy5odG1sI002OEhDMTFfMDAyZG9wY29kZXMiPk02OEhDMTEtb3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1vcGVyYW5kLWRlbGltaXRlcnNfMDAyYy1pMzg2LTk1MSI+b3BlcmFuZCBkZWxpbWl0ZXJzLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1vcGVyYW5kLWRlbGltaXRlcnNfMDAyYy14ODZfMDAyZDY0LTk1OCI+b3BlcmFuZCBkZWxpbWl0ZXJzLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI2luZGV4LW9wZXJhbmQtbm90YXRpb25fMDAyYy1WQVgtMjE1MCI+b3BlcmFuZCBub3RhdGlvbiwgVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI1ZBWF8wMDJkb3BlcmFuZHMiPlZBWC1vcGVyYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50cy5odG1sI2luZGV4LW9wZXJhbmRzLWluLWV4cHJlc3Npb25zLTI1MCI+b3BlcmFuZHMgaW4gZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJBcmd1bWVudHMuaHRtbCNBcmd1bWVudHMiPkFyZ3VtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluZml4LU9wcy5odG1sI2luZGV4LW9wZXJhdG9yLXByZWNlZGVuY2UtMjU5Ij5vcGVyYXRvciBwcmVjZWRlbmNlPC9hPjogPGEgaHJlZj0iSW5maXgtT3BzLmh0bWwjSW5maXgtT3BzIj5JbmZpeCBPcHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcGVyYXRvcnMuaHRtbCNpbmRleC1vcGVyYXRvcnNfMDAyYy1pbi1leHByZXNzaW9ucy0yNTMiPm9wZXJhdG9ycywgaW4gZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiPk9wZXJhdG9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluZml4LU9wcy5odG1sI2luZGV4LW9wZXJhdG9yc18wMDJjLXBlcm1pdHRlZC1hcmd1bWVudHMtMjU4Ij5vcGVyYXRvcnMsIHBlcm1pdHRlZCBhcmd1bWVudHM8L2E+OiA8YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNJbmZpeC1PcHMiPkluZml4IE9wczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjaW5kZXgtb3B0aW1pemF0aW9uXzAwMmMtRDEwVi02Ij5vcHRpbWl6YXRpb24sIEQxMFY8L2E+OiA8YSBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjaW5kZXgtb3B0aW1pemF0aW9uXzAwMmMtRDMwVi04Ij5vcHRpbWl6YXRpb24sIEQzMFY8L2E+OiA8YSBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpbWl6YXRpb25zLmh0bWwjaW5kZXgtb3B0aW1pemF0aW9ucy0yMjkzIj5vcHRpbWl6YXRpb25zPC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGltaXphdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW1pemF0aW9ucyI+WHRlbnNhIE9wdGltaXphdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdib3B0aW9uXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJDLTYwNiI+PGNvZGU+b3B0aW9uPC9jb2RlPiBkaXJlY3RpdmUsIEFSQzwvYT46IDxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPkFSQyBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JvcHRpb25fMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk0NiI+PGNvZGU+b3B0aW9uPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LW9wdGlvbi1zdW1tYXJ5LTIiPm9wdGlvbiBzdW1tYXJ5PC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zLWZvci1BQXJjaDY0LV8wMDI4bm9uZV8wMDI5LTUxOCI+b3B0aW9ucyBmb3IgQUFyY2g2NCAobm9uZSk8L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zLWZvci1BbHBoYS01NTIiPm9wdGlvbnMgZm9yIEFscGhhPC9hPjogPGEgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiPkFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnMtZm9yLUFSQy1fMDAyOG5vbmVfMDAyOS01NzgiPm9wdGlvbnMgZm9yIEFSQyAobm9uZSk8L2E+OiA8YSBocmVmPSJBUkMtT3B0aW9ucy5odG1sI0FSQy1PcHRpb25zIj5BUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9ucy1mb3ItQVJNLV8wMDI4bm9uZV8wMDI5LTYxNCI+b3B0aW9ucyBmb3IgQVJNIChub25lKTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zLWZvci1BVlItXzAwMjhub25lXzAwMjktNzA3Ij5vcHRpb25zIGZvciBBVlIgKG5vbmUpPC9hPjogPGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9ucy1mb3ItQmxhY2tmaW4tXzAwMjhub25lXzAwMjktNzI4Ij5vcHRpb25zIGZvciBCbGFja2ZpbiAobm9uZSk8L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zLWZvci1pMzg2LTkwMyI+b3B0aW9ucyBmb3IgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnMtZm9yLUlBXzAwMmQ2NC0xMTE3Ij5vcHRpb25zIGZvciBJQS02NDwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zLWZvci1MTTMyLV8wMDI4bm9uZV8wMDI5LTExNDciPm9wdGlvbnMgZm9yIExNMzIgKG5vbmUpPC9hPjogPGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzAtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnMtZm9yLU1TUDQzMC1fMDAyOG5vbmVfMDAyOS0xNDk4Ij5vcHRpb25zIGZvciBNU1A0MzAgKG5vbmUpPC9hPjogPGEgaHJlZj0iTVNQNDMwLU9wdGlvbnMuaHRtbCNNU1A0MzAtT3B0aW9ucyI+TVNQNDMwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9ucy1mb3ItUERQXzAwMmQxMS0xNTMxIj5vcHRpb25zIGZvciBQRFAtMTE8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+UERQLTExLU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDXzAwMmRPcHRzLmh0bWwjaW5kZXgtb3B0aW9ucy1mb3ItUG93ZXJQQy0xNjIyIj5vcHRpb25zIGZvciBQb3dlclBDPC9hPjogPGEgaHJlZj0iUG93ZXJQQ18wMDJkT3B0cy5odG1sI1Bvd2VyUENfMDAyZE9wdHMiPlBvd2VyUEMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9InMzOTAtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnMtZm9yLXMzOTAtMTY3OCI+b3B0aW9ucyBmb3IgczM5MDwvYT46IDxhIGhyZWY9InMzOTAtT3B0aW9ucy5odG1sI3MzOTAtT3B0aW9ucyI+czM5MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0NPUkVfMDAyZE9wdHMuaHRtbCNpbmRleC1vcHRpb25zLWZvci1TQ09SRS0xNzIwIj5vcHRpb25zIGZvciBTQ09SRTwvYT46IDxhIGhyZWY9IlNDT1JFXzAwMmRPcHRzLmh0bWwjU0NPUkVfMDAyZE9wdHMiPlNDT1JFLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI2luZGV4LW9wdGlvbnMtZm9yLVNQQVJDLTE3OTAiPm9wdGlvbnMgZm9yIFNQQVJDPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zLWZvci1USUM2WC0xOTk0Ij5vcHRpb25zIGZvciBUSUM2WDwvYT46IDxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNUSUM2WC1PcHRpb25zIj5USUM2WCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9ucy1mb3ItVjg1MC1fMDAyOG5vbmVfMDAyOS0yMTY4Ij5vcHRpb25zIGZvciBWODUwIChub25lKTwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjaW5kZXgtb3B0aW9ucy1mb3ItVkFYXzAwMmZWTVMtMjEyNCI+b3B0aW9ucyBmb3IgVkFYL1ZNUzwvYT46IDxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI1ZBWF8wMDJkT3B0cyI+VkFYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9ucy1mb3IteDg2XzAwMmQ2NC05MDQiPm9wdGlvbnMgZm9yIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE9wdGlvbnMuaHRtbCNpMzg2XzAwMmRPcHRpb25zIj5pMzg2LU9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnMtZm9yLVo4MC0yMDU2Ij5vcHRpb25zIGZvciBaODA8L2E+OiA8YSBocmVmPSJaODAtT3B0aW9ucy5odG1sI1o4MC1PcHRpb25zIj5aODAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLWFsbC12ZXJzaW9ucy1vZi1hc3NlbWJsZXItNDYiPm9wdGlvbnMsIGFsbCB2ZXJzaW9ucyBvZiBhc3NlbWJsZXI8L2E+OiA8YSBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbW1hbmQtTGluZS5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1jb21tYW5kLWxpbmUtMjgiPm9wdGlvbnMsIGNvbW1hbmQgbGluZTwvYT46IDxhIGhyZWY9IkNvbW1hbmQtTGluZS5odG1sI0NvbW1hbmQtTGluZSI+Q29tbWFuZCBMaW5lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1DUklTLTc0NSI+b3B0aW9ucywgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIj5DUklTLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRPcHRzLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLUQxMFYtNzk5Ij5vcHRpb25zLCBEMTBWPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkT3B0cy5odG1sI0QxMFZfMDAyZE9wdHMiPkQxMFYtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZE9wdHMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtRDMwVi04MjYiPm9wdGlvbnMsIEQzMFY8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRPcHRzLmh0bWwjRDMwVl8wMDJkT3B0cyI+RDMwVi1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1FcGlwaGFueS04NTMiPm9wdGlvbnMsIEVwaXBoYW55PC9hPjogPGEgaHJlZj0iRXBpcGhhbnktT3B0aW9ucy5odG1sI0VwaXBoYW55LU9wdGlvbnMiPkVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtSDhfMDAyZjMwMC04NjMiPm9wdGlvbnMsIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI0g4XzAwMmYzMDAtT3B0aW9ucyI+SDgvMzAwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLWk5NjAtMTA4NCI+b3B0aW9ucywgaTk2MDwvYT46IDxhIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNPcHRpb25zXzAwMmRpOTYwIj5PcHRpb25zLWk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUDJLXzAwMmRPcHRzLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLUlQMkstMTEzMiI+b3B0aW9ucywgSVAySzwvYT46IDxhIGhyZWY9IklQMktfMDAyZE9wdHMuaHRtbCNJUDJLXzAwMmRPcHRzIj5JUDJLLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLU0zMkMtMTE3MiI+b3B0aW9ucywgTTMyQzwvYT46IDxhIGhyZWY9Ik0zMkNfMDAyZE9wdHMuaHRtbCNNMzJDXzAwMmRPcHRzIj5NMzJDLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmRPcHRzLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLU0zMlItMTE4OSI+b3B0aW9ucywgTTMyUjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLU02ODB4MC0xMjM1Ij5vcHRpb25zLCBNNjgweDA8L2E+OiA8YSBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjTTY4S18wMDJkT3B0cyI+TTY4Sy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1NNjhIQzExLTEyOTYiPm9wdGlvbnMsIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjTTY4SEMxMV8wMDJkT3B0cyI+TTY4SEMxMS1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1NTUlYLTE0MjciPm9wdGlvbnMsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjTU1JWF8wMDJkT3B0cyI+TU1JWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUEotT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1QSi0xNjE1Ij5vcHRpb25zLCBQSjwvYT46IDxhIGhyZWY9IlBKLU9wdGlvbnMuaHRtbCNQSi1PcHRpb25zIj5QSiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkT3B0cy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1STDc4LTE2MzQiPm9wdGlvbnMsIFJMNzg8L2E+OiA8YSBocmVmPSJSTDc4XzAwMmRPcHRzLmh0bWwjUkw3OF8wMDJkT3B0cyI+Ukw3OC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtUlgtMTY0NiI+b3B0aW9ucywgUlg8L2E+OiA8YSBocmVmPSJSWF8wMDJkT3B0cy5odG1sI1JYXzAwMmRPcHRzIj5SWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1TSC0xNzMzIj5vcHRpb25zLCBTSDwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0g2NC1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLVNINjQtMTc2NiI+b3B0aW9ucywgU0g2NDwvYT46IDxhIGhyZWY9IlNINjQtT3B0aW9ucy5odG1sI1NINjQtT3B0aW9ucyI+U0g2NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRPcHRzLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLVRJQzU0WC0xODQ2Ij5vcHRpb25zLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZE9wdHMuaHRtbCNUSUM1NFhfMDAyZE9wdHMiPlRJQzU0WC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZE9wdHMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtWEdBVEUtMjIyOCI+b3B0aW9ucywgWEdBVEU8L2E+OiA8YSBocmVmPSJYR0FURV8wMDJkT3B0cy5odG1sI1hHQVRFXzAwMmRPcHRzIj5YR0FURS1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwMDAtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1aODAwMC0yMDgyIj5vcHRpb25zLCBaODAwMDwvYT46IDxhIGhyZWY9Ilo4MDAwLU9wdGlvbnMuaHRtbCNaODAwMC1PcHRpb25zIj5aODAwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3JnLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JvcmdfMDA3ZC1kaXJlY3RpdmUtNDE3Ij48Y29kZT5vcmc8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9Ik9yZy5odG1sI09yZyI+T3JnPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLU90aGVyLmh0bWwjaW5kZXgtb3RoZXItYXR0cmlidXRlXzAwMmMtb2YtXzAwNDBjb2RlXzAwN2JhXzAwMmVvdXRfMDA3ZC1zeW1ib2wtMjM0Ij5vdGhlciBhdHRyaWJ1dGUsIG9mIDxjb2RlPmEub3V0PC9jb2RlPiBzeW1ib2w8L2E+OiA8YSBocmVmPSJTeW1ib2wtT3RoZXIuaHRtbCNTeW1ib2wtT3RoZXIiPlN5bWJvbCBPdGhlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdC5odG1sI2luZGV4LW91dHB1dC1maWxlLTM1Ij5vdXRwdXQgZmlsZTwvYT46IDxhIGhyZWY9Ik9iamVjdC5odG1sI09iamVjdCI+T2JqZWN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUDJhbGlnbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdicDJhbGlnbl8wMDdkLWRpcmVjdGl2ZS00MjIiPjxjb2RlPnAyYWxpZ248L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlAyYWxpZ24uaHRtbCNQMmFsaWduIj5QMmFsaWduPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUDJhbGlnbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdicDJhbGlnbmxfMDA3ZC1kaXJlY3RpdmUtNDI0Ij48Y29kZT5wMmFsaWdubDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iUDJhbGlnbi5odG1sI1AyYWxpZ24iPlAyYWxpZ248L2E+PC9saT4KKzxsaT48YSBocmVmPSJQMmFsaWduLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwMmFsaWdud18wMDdkLWRpcmVjdGl2ZS00MjMiPjxjb2RlPnAyYWxpZ253PC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJQMmFsaWduLmh0bWwjUDJhbGlnbiI+UDJhbGlnbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFsaWduLmh0bWwjaW5kZXgtcGFkZGluZy10aGUtbG9jYXRpb24tY291bnRlci0yNzUiPnBhZGRpbmcgdGhlIGxvY2F0aW9uIGNvdW50ZXI8L2E+OiA8YSBocmVmPSJBbGlnbi5odG1sI0FsaWduIj5BbGlnbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlAyYWxpZ24uaHRtbCNpbmRleC1wYWRkaW5nLXRoZS1sb2NhdGlvbi1jb3VudGVyLWdpdmVuLWEtcG93ZXItb2YtdHdvLTQyMSI+cGFkZGluZyB0aGUgbG9jYXRpb24gY291bnRlciBnaXZlbiBhIHBvd2VyIG9mIHR3bzwvYT46IDxhIGhyZWY9IlAyYWxpZ24uaHRtbCNQMmFsaWduIj5QMmFsaWduPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmFsaWduLmh0bWwjaW5kZXgtcGFkZGluZy10aGUtbG9jYXRpb24tY291bnRlci1naXZlbi1udW1iZXItb2YtYnl0ZXMtMjg2Ij5wYWRkaW5nIHRoZSBsb2NhdGlvbiBjb3VudGVyIGdpdmVuIG51bWJlciBvZiBieXRlczwvYT46IDxhIGhyZWY9IkJhbGlnbi5odG1sI0JhbGlnbiI+QmFsaWduPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRWplY3QuaHRtbCNpbmRleC1wYWdlXzAwMmMtaW4tbGlzdGluZ3MtMzE4Ij5wYWdlLCBpbiBsaXN0aW5nczwvYT46IDxhIGhyZWY9IkVqZWN0Lmh0bWwjRWplY3QiPkVqZWN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHNpemUuaHRtbCNpbmRleC1wYXBlci1zaXplXzAwMmMtZm9yLWxpc3RpbmdzLTQzNCI+cGFwZXIgc2l6ZSwgZm9yIGxpc3RpbmdzPC9hPjogPGEgaHJlZj0iUHNpemUuaHRtbCNQc2l6ZSI+UHNpemU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJLmh0bWwjaW5kZXgtcGF0aHMtZm9yLV8wMDQwY29kZV8wMDdiXzAwMmVpbmNsdWRlXzAwN2QtNjMiPnBhdGhzIGZvciA8Y29kZT4uaW5jbHVkZTwvY29kZT48L2E+OiA8YSBocmVmPSJJLmh0bWwjSSI+STwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGwuaHRtbCNpbmRleC1wYXR0ZXJuc18wMDJjLXdyaXRpbmctaW4tbWVtb3J5LTM0MCI+cGF0dGVybnMsIHdyaXRpbmcgaW4gbWVtb3J5PC9hPjogPGEgaHJlZj0iRmlsbC5odG1sI0ZpbGwiPkZpbGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRTeW50YXguaHRtbCNpbmRleC1QRFBfMDAyZDExLWNvbW1lbnRzLTE2MTAiPlBEUC0xMSBjb21tZW50czwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI1BEUF8wMDJkMTFfMDAyZFN5bnRheCI+UERQLTExLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI2luZGV4LVBEUF8wMDJkMTEtZmxvYXRpbmdfMDAyZHBvaW50LXJlZ2lzdGVyLXN5bnRheC0xNjA5Ij5QRFAtMTEgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc3ludGF4PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkU3ludGF4Lmh0bWwjUERQXzAwMmQxMV8wMDJkU3ludGF4Ij5QRFAtMTEtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkU3ludGF4Lmh0bWwjaW5kZXgtUERQXzAwMmQxMS1nZW5lcmFsXzAwMmRwdXJwb3NlLXJlZ2lzdGVyLXN5bnRheC0xNjA4Ij5QRFAtMTEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIHN5bnRheDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI1BEUF8wMDJkMTFfMDAyZFN5bnRheCI+UERQLTExLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE1uZW1vbmljcy5odG1sI2luZGV4LVBEUF8wMDJkMTEtaW5zdHJ1Y3Rpb24tbmFtaW5nLTE2MTIiPlBEUC0xMSBpbnN0cnVjdGlvbiBuYW1pbmc8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRNbmVtb25pY3MuaHRtbCNQRFBfMDAyZDExXzAwMmRNbmVtb25pY3MiPlBEUC0xMS1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRTeW50YXguaHRtbCNpbmRleC1QRFBfMDAyZDExLWxpbmUtc2VwYXJhdG9yLTE2MTEiPlBEUC0xMSBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI1BEUF8wMDJkMTFfMDAyZFN5bnRheCI+UERQLTExLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVBEUF8wMDJkMTEtc3VwcG9ydC0xNTMwIj5QRFAtMTEgc3VwcG9ydDwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCI+UERQLTExLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI2luZGV4LVBEUF8wMDJkMTEtc3ludGF4LTE2MDUiPlBEUC0xMSBzeW50YXg8L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExXzAwMmRTeW50YXguaHRtbCNQRFBfMDAyZDExXzAwMmRTeW50YXgiPlBEUC0xMS1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LVBJQy1jb2RlLWdlbmVyYXRpb24tZm9yLUFSTS02MzEiPlBJQyBjb2RlIGdlbmVyYXRpb24gZm9yIEFSTTwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI2luZGV4LVBJQy1jb2RlLWdlbmVyYXRpb24tZm9yLU0zMlItMTIwNSI+UElDIGNvZGUgZ2VuZXJhdGlvbiBmb3IgTTMyUjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdHMuaHRtbCNpbmRleC1QSUMtc2VsZWN0aW9uXzAwMmMtTUlQUy0xMzY5Ij5QSUMgc2VsZWN0aW9uLCBNSVBTPC9hPjogPGEgaHJlZj0iTUlQUy1PcHRzLmh0bWwjTUlQUy1PcHRzIj5NSVBTIE9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LVBKLWVuZGlhbm5lc3MtMTEiPlBKIGVuZGlhbm5lc3M8L2E+OiA8YSBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBKXzAwMmRDaGFycy5odG1sI2luZGV4LVBKLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMTYxNyI+UEogbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IlBKXzAwMmRDaGFycy5odG1sI1BKXzAwMmRDaGFycyI+UEotQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQSl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1QSi1saW5lLXNlcGFyYXRvci0xNjIwIj5QSiBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9IlBKXzAwMmRDaGFycy5odG1sI1BKXzAwMmRDaGFycyI+UEotQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQSi1PcHRpb25zLmh0bWwjaW5kZXgtUEotb3B0aW9ucy0xNjE0Ij5QSiBvcHRpb25zPC9hPjogPGEgaHJlZj0iUEotT3B0aW9ucy5odG1sI1BKLU9wdGlvbnMiPlBKIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQSl8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtUEotc3VwcG9ydC0xNjEzIj5QSiBzdXBwb3J0PC9hPjogPGEgaHJlZj0iUEpfMDAyZERlcGVuZGVudC5odG1sI1BKXzAwMmREZXBlbmRlbnQiPlBKLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluZml4LU9wcy5odG1sI2luZGV4LXBsdXNfMDAyYy1wZXJtaXR0ZWQtYXJndW1lbnRzLTI2MiI+cGx1cywgcGVybWl0dGVkIGFyZ3VtZW50czwvYT46IDxhIGhyZWY9IkluZml4LU9wcy5odG1sI0luZml4LU9wcyI+SW5maXggT3BzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG9wU2VjdGlvbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdicG9wc2VjdGlvbl8wMDdkLWRpcmVjdGl2ZS00MjUiPjxjb2RlPnBvcHNlY3Rpb248L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlBvcFNlY3Rpb24uaHRtbCNQb3BTZWN0aW9uIj5Qb3BTZWN0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI2luZGV4LVBvc2l0aW9uXzAwMmRpbmRlcGVuZGVudC1jb2RlXzAwMmMtQ1JJUy03NTciPlBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUsIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkUGljLmh0bWwjaW5kZXgtUG9zaXRpb25fMDAyZGluZGVwZW5kZW50LWNvZGVfMDAyYy1zeW1ib2xzLWluXzAwMmMtQ1JJUy03NzkiPlBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUsIHN5bWJvbHMgaW4sIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRQaWMuaHRtbCNDUklTXzAwMmRQaWMiPkNSSVMtUGljPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQ18wMDJkT3B0cy5odG1sI2luZGV4LVBvd2VyUEMtYXJjaGl0ZWN0dXJlcy0xNjI1Ij5Qb3dlclBDIGFyY2hpdGVjdHVyZXM8L2E+OiA8YSBocmVmPSJQb3dlclBDXzAwMmRPcHRzLmh0bWwjUG93ZXJQQ18wMDJkT3B0cyI+UG93ZXJQQy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQ18wMDJkUHNldWRvLmh0bWwjaW5kZXgtUG93ZXJQQy1kaXJlY3RpdmVzLTE2MjciPlBvd2VyUEMgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IlBvd2VyUENfMDAyZFBzZXVkby5odG1sI1Bvd2VyUENfMDAyZFBzZXVkbyI+UG93ZXJQQy1Qc2V1ZG88L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDXzAwMmRDaGFycy5odG1sI2luZGV4LVBvd2VyUEMtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNjI5Ij5Qb3dlclBDIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJQb3dlclBDXzAwMmRDaGFycy5odG1sI1Bvd2VyUENfMDAyZENoYXJzIj5Qb3dlclBDLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQ18wMDJkQ2hhcnMuaHRtbCNpbmRleC1Qb3dlclBDLWxpbmUtc2VwYXJhdG9yLTE2MzIiPlBvd2VyUEMgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJQb3dlclBDXzAwMmRDaGFycy5odG1sI1Bvd2VyUENfMDAyZENoYXJzIj5Qb3dlclBDLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQ18wMDJkT3B0cy5odG1sI2luZGV4LVBvd2VyUEMtb3B0aW9ucy0xNjIzIj5Qb3dlclBDIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJQb3dlclBDXzAwMmRPcHRzLmh0bWwjUG93ZXJQQ18wMDJkT3B0cyI+UG93ZXJQQy1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUFBDXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1Qb3dlclBDLXN1cHBvcnQtMTYyMSI+UG93ZXJQQyBzdXBwb3J0PC9hPjogPGEgaHJlZj0iUFBDXzAwMmREZXBlbmRlbnQuaHRtbCNQUENfMDAyZERlcGVuZGVudCI+UFBDLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluZml4LU9wcy5odG1sI2luZGV4LXByZWNlZGVuY2Utb2Ytb3BlcmF0b3JzLTI2MCI+cHJlY2VkZW5jZSBvZiBvcGVyYXRvcnM8L2E+OiA8YSBocmVmPSJJbmZpeC1PcHMuaHRtbCNJbmZpeC1PcHMiPkluZml4IE9wczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZsb251bXMuaHRtbCNpbmRleC1wcmVjaXNpb25fMDAyYy1mbG9hdGluZy1wb2ludC0xODQiPnByZWNpc2lvbiwgZmxvYXRpbmcgcG9pbnQ8L2E+OiA8YSBocmVmPSJGbG9udW1zLmh0bWwjRmxvbnVtcyI+RmxvbnVtczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZWZpeC1PcHMuaHRtbCNpbmRleC1wcmVmaXgtb3BlcmF0b3JzLTI1NiI+cHJlZml4IG9wZXJhdG9yczwvYT46IDxhIGhyZWY9IlByZWZpeC1PcHMuaHRtbCNQcmVmaXgtT3BzIj5QcmVmaXggT3BzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkUHJlZml4ZXMuaHRtbCNpbmRleC1wcmVmaXhlc18wMDJjLWkzODYtMTAwNCI+cHJlZml4ZXMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2kzODZfMDAyZFByZWZpeGVzIj5pMzg2LVByZWZpeGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI2luZGV4LXByZXByb2Nlc3NpbmctMTE0Ij5wcmVwcm9jZXNzaW5nPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLXR1cm5pbmctb24tYW5kLW9mZi0xMTkiPnByZXByb2Nlc3NpbmcsIHR1cm5pbmcgb24gYW5kIG9mZjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJldmlvdXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnByZXZpb3VzXzAwN2QtZGlyZWN0aXZlLTQyNyI+PGNvZGU+cHJldmlvdXM8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlByZXZpb3VzLmh0bWwjUHJldmlvdXMiPlByZXZpb3VzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ09GRi1TeW1ib2xzLmh0bWwjaW5kZXgtcHJpbWFyeS1hdHRyaWJ1dGVzXzAwMmMtQ09GRi1zeW1ib2xzLTIzNyI+cHJpbWFyeSBhdHRyaWJ1dGVzLCBDT0ZGIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJDT0ZGLVN5bWJvbHMuaHRtbCNDT0ZGLVN5bWJvbHMiPkNPRkYgU3ltYm9sczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwcmludF8wMDdkLWRpcmVjdGl2ZS00MjkiPjxjb2RlPnByaW50PC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJQcmludC5odG1sI1ByaW50Ij5QcmludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jwcm9jXzAwN2QtZGlyZWN0aXZlXzAwMmMtU1BBUkMtMTgzOCI+PGNvZGU+cHJvYzwvY29kZT4gZGlyZWN0aXZlLCBTUEFSQzwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjU3BhcmNfMDAyZERpcmVjdGl2ZXMiPlNwYXJjLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzAtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdicHJvZmlsZXJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NU1AtNDMwLTE1MTkiPjxjb2RlPnByb2ZpbGVyPC9jb2RlPiBkaXJlY3RpdmUsIE1TUCA0MzA8L2E+OiA8YSBocmVmPSJNU1A0MzAtRGlyZWN0aXZlcy5odG1sI01TUDQzMC1EaXJlY3RpdmVzIj5NU1A0MzAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC1Qcm9maWxpbmctQ2FwYWJpbGl0eS5odG1sI2luZGV4LXByb2ZpbGluZy1jYXBhYmlsaXR5LWZvci1NU1AtNDMwLTE1MjMiPnByb2ZpbGluZyBjYXBhYmlsaXR5IGZvciBNU1AgNDMwPC9hPjogPGEgaHJlZj0iTVNQNDMwLVByb2ZpbGluZy1DYXBhYmlsaXR5Lmh0bWwjTVNQNDMwLVByb2ZpbGluZy1DYXBhYmlsaXR5Ij5NU1A0MzAgUHJvZmlsaW5nIENhcGFiaWxpdHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcm90ZWN0ZWQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnByb3RlY3RlZF8wMDdkLWRpcmVjdGl2ZS00MzAiPjxjb2RlPnByb3RlY3RlZDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iUHJvdGVjdGVkLmh0bWwjUHJvdGVjdGVkIj5Qcm90ZWN0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtcHNldWRvXzAwMmRvcC1fMDAyZWFyY2hfMDAyYy1DUklTLTc5NSI+cHNldWRvLW9wIC5hcmNoLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkUHNldWRvcy5odG1sI0NSSVNfMDAyZFBzZXVkb3MiPkNSSVMtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1wc2V1ZG9fMDAyZG9wLV8wMDJlZHdvcmRfMDAyYy1DUklTLTc4NyI+cHNldWRvLW9wIC5kd29yZCwgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj5DUklTLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtcHNldWRvXzAwMmRvcC1fMDAyZXN5bnRheF8wMDJjLUNSSVMtNzkxIj5wc2V1ZG8tb3AgLnN5bnRheCwgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj5DUklTLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtcHNldWRvXzAwMmRvcC1CU1BFQ18wMDJjLU1NSVgtMTQ4NiI+cHNldWRvLW9wIEJTUEVDLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1wc2V1ZG9fMDAyZG9wLUJZVEVfMDAyYy1NTUlYLTE0NjYiPnBzZXVkby1vcCBCWVRFLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1wc2V1ZG9fMDAyZG9wLUVTUEVDXzAwMmMtTU1JWC0xNDkwIj5wc2V1ZG8tb3AgRVNQRUMsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LXBzZXVkb18wMDJkb3AtR1JFR18wMDJjLU1NSVgtMTQ2MiI+cHNldWRvLW9wIEdSRUcsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LXBzZXVkb18wMDJkb3AtSVNfMDAyYy1NTUlYLTE0NTgiPnBzZXVkby1vcCBJUywgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtcHNldWRvXzAwMmRvcC1MT0NfMDAyYy1NTUlYLTE0NTAiPnBzZXVkby1vcCBMT0MsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LXBzZXVkb18wMDJkb3AtTE9DQUxfMDAyYy1NTUlYLTE0NTQiPnBzZXVkby1vcCBMT0NBTCwgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtcHNldWRvXzAwMmRvcC1PQ1RBXzAwMmMtTU1JWC0xNDc4Ij5wc2V1ZG8tb3AgT0NUQSwgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtcHNldWRvXzAwMmRvcC1QUkVGSVhfMDAyYy1NTUlYLTE0ODIiPnBzZXVkby1vcCBQUkVGSVgsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI2luZGV4LXBzZXVkb18wMDJkb3AtVEVUUkFfMDAyYy1NTUlYLTE0NzQiPnBzZXVkby1vcCBURVRSQSwgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtcHNldWRvXzAwMmRvcC1XWURFXzAwMmMtTU1JWC0xNDcwIj5wc2V1ZG8tb3AgV1lERSwgTU1JWDwvYT46IDxhIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYU3Rvcm15MTYtT3Bjb2Rlcy5odG1sI2luZGV4LXBzZXVkb18wMDJkb3Bjb2Rlcy1mb3ItWFN0b3JteTE2LTIyNjkiPnBzZXVkby1vcGNvZGVzIGZvciBYU3Rvcm15MTY8L2E+OiA8YSBocmVmPSJYU3Rvcm15MTYtT3Bjb2Rlcy5odG1sI1hTdG9ybXkxNi1PcGNvZGVzIj5YU3Rvcm15MTYgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZEJyYW5jaC5odG1sI2luZGV4LXBzZXVkb18wMDJkb3Bjb2Rlc18wMDJjLU02ODB4MC0xMjgzIj5wc2V1ZG8tb3Bjb2RlcywgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkQnJhbmNoLmh0bWwjTTY4S18wMDJkQnJhbmNoIj5NNjhLLUJyYW5jaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZEJyYW5jaC5odG1sI2luZGV4LXBzZXVkb18wMDJkb3Bjb2Rlc18wMDJjLU02OEhDMTEtMTM0OSI+cHNldWRvLW9wY29kZXMsIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRCcmFuY2guaHRtbCNNNjhIQzExXzAwMmRCcmFuY2giPk02OEhDMTEtQnJhbmNoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRicmFuY2guaHRtbCNpbmRleC1wc2V1ZG9fMDAyZG9wcy1mb3ItYnJhbmNoXzAwMmMtVkFYLTIxNDgiPnBzZXVkby1vcHMgZm9yIGJyYW5jaCwgVkFYPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRicmFuY2guaHRtbCNWQVhfMDAyZGJyYW5jaCI+VkFYLWJyYW5jaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNpbmRleC1wc2V1ZG9fMDAyZG9wc18wMDJjLUNSSVMtNzgzIj5wc2V1ZG8tb3BzLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkUHNldWRvcy5odG1sI0NSSVNfMDAyZFBzZXVkb3MiPkNSSVMtUHNldWRvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNpbmRleC1wc2V1ZG9fMDAyZG9wc18wMDJjLW1hY2hpbmUtaW5kZXBlbmRlbnQtMjcwIj5wc2V1ZG8tb3BzLCBtYWNoaW5lIGluZGVwZW5kZW50PC9hPjogPGEgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjaW5kZXgtcHNldWRvXzAwMmRvcHNfMDAyYy1NTUlYLTE0NDYiPnBzZXVkby1vcHMsIE1NSVg8L2E+OiA8YSBocmVmPSJNTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWF8wMDJkUHNldWRvcyI+TU1JWC1Qc2V1ZG9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHNpemUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnBzaXplXzAwN2QtZGlyZWN0aXZlLTQzMiI+PGNvZGU+cHNpemU8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlBzaXplLmh0bWwjUHNpemUiPlBzaXplPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRCaXRzLmh0bWwjaW5kZXgtUFNSLWJpdHMtMTEyOCI+UFNSIGJpdHM8L2E+OiA8YSBocmVmPSJJQV8wMDJkNjRfMDAyZEJpdHMuaHRtbCNJQV8wMDJkNjRfMDAyZEJpdHMiPklBLTY0LUJpdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnBzdHJpbmdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk1NiI+PGNvZGU+cHN0cmluZzwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdicHN3XzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTgiPjxjb2RlPnBzdzwvY29kZT4gcmVnaXN0ZXIsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHVyZ2VtLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwdXJnZW1fMDA3ZC1kaXJlY3RpdmUtNDM1Ij48Y29kZT5wdXJnZW08L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlB1cmdlbS5odG1sI1B1cmdlbSI+UHVyZ2VtPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR05VLUFzc2VtYmxlci5odG1sI2luZGV4LXB1cnBvc2Utb2YtXzAwNDBzY18wMDdiZ251XzAwN2QtYXNzZW1ibGVyLTIzIj5wdXJwb3NlIG9mIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBhc3NlbWJsZXI8L2E+OiA8YSBocmVmPSJHTlUtQXNzZW1ibGVyLmh0bWwjR05VLUFzc2VtYmxlciI+R05VIEFzc2VtYmxlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlB1c2hTZWN0aW9uLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwdXNoc2VjdGlvbl8wMDdkLWRpcmVjdGl2ZS00MzYiPjxjb2RlPnB1c2hzZWN0aW9uPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJQdXNoU2VjdGlvbi5odG1sI1B1c2hTZWN0aW9uIj5QdXNoU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlF1YWQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnF1YWRfMDA3ZC1kaXJlY3RpdmUtNDM4Ij48Y29kZT5xdWFkPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJRdWFkLmh0bWwjUXVhZCI+UXVhZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JxdWFkXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDM1Ij48Y29kZT5xdWFkPC9jb2RlPiBkaXJlY3RpdmUsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij5pMzg2LUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnF1YWRfMDA3ZC1kaXJlY3RpdmVfMDAyYy14ODZfMDAyZDY0LTEwMzkiPjxjb2RlPnF1YWQ8L2NvZGU+IGRpcmVjdGl2ZSwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaW5kZXgtcmVhbF8wMDJkbW9kZS1jb2RlXzAwMmMtaTM4Ni0xMDU0Ij5yZWFsLW1vZGUgY29kZSwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaTM4Nl8wMDJkMTZiaXQiPmkzODYtMTZiaXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnJlZl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTE5Ij48Y29kZT5yZWY8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZWdpc3Rlcl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVNQQVJDLTE4MzkiPjxjb2RlPnJlZ2lzdGVyPC9jb2RlPiBkaXJlY3RpdmUsIFNQQVJDPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNTcGFyY18wMDJkRGlyZWN0aXZlcyI+U3BhcmMtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjRfMDAyZFJlZ3MuaHRtbCNpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLUFBcmNoNjQtNTI5Ij5yZWdpc3RlciBuYW1lcywgQUFyY2g2NDwvYT46IDxhIGhyZWY9IkFBcmNoNjRfMDAyZFJlZ3MuaHRtbCNBQXJjaDY0XzAwMmRSZWdzIj5BQXJjaDY0LVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHBoYV8wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtQWxwaGEtNTcwIj5yZWdpc3RlciBuYW1lcywgQWxwaGE8L2E+OiA8YSBocmVmPSJBbHBoYV8wMDJkUmVncy5odG1sI0FscGhhXzAwMmRSZWdzIj5BbHBoYS1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDXzAwMmRSZWdzLmh0bWwjaW5kZXgtcmVnaXN0ZXItbmFtZXNfMDAyYy1BUkMtNTkyIj5yZWdpc3RlciBuYW1lcywgQVJDPC9hPjogPGEgaHJlZj0iQVJDXzAwMmRSZWdzLmh0bWwjQVJDXzAwMmRSZWdzIj5BUkMtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTV8wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtQVJNLTY0NCI+cmVnaXN0ZXIgbmFtZXMsIEFSTTwvYT46IDxhIGhyZWY9IkFSTV8wMDJkUmVncy5odG1sI0FSTV8wMDJkUmVncyI+QVJNLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlJfMDAyZFJlZ3MuaHRtbCNpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLUFWUi03MTgiPnJlZ2lzdGVyIG5hbWVzLCBBVlI8L2E+OiA8YSBocmVmPSJBVlJfMDAyZFJlZ3MuaHRtbCNBVlJfMDAyZFJlZ3MiPkFWUi1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtQ1JJUy03ODAiPnJlZ2lzdGVyIG5hbWVzLCBDUklTPC9hPjogPGEgaHJlZj0iQ1JJU18wMDJkUmVncy5odG1sI0NSSVNfMDAyZFJlZ3MiPkNSSVMtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZFJlZ3MuaHRtbCNpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLUg4XzAwMmYzMDAtODcwIj5yZWdpc3RlciBuYW1lcywgSDgvMzAwPC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMF8wMDJkUmVncy5odG1sI0g4XzAwMmYzMDBfMDAyZFJlZ3MiPkg4LzMwMC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRSZWdzLmh0bWwjaW5kZXgtcmVnaXN0ZXItbmFtZXNfMDAyYy1JQV8wMDJkNjQtMTEyNiI+cmVnaXN0ZXIgbmFtZXMsIElBLTY0PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRSZWdzLmh0bWwjSUFfMDAyZDY0XzAwMmRSZWdzIj5JQS02NC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMl8wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtTE0zMi0xMTU4Ij5yZWdpc3RlciBuYW1lcywgTE0zMjwvYT46IDxhIGhyZWY9IkxNMzJfMDAyZFJlZ3MuaHRtbCNMTTMyXzAwMmRSZWdzIj5MTTMyLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRSZWdzLmh0bWwjaW5kZXgtcmVnaXN0ZXItbmFtZXNfMDAyYy1NTUlYLTE0NDMiPnJlZ2lzdGVyIG5hbWVzLCBNTUlYPC9hPjogPGEgaHJlZj0iTU1JWF8wMDJkUmVncy5odG1sI01NSVhfMDAyZFJlZ3MiPk1NSVgtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMF8wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtTVNQLTQzMC0xNTA5Ij5yZWdpc3RlciBuYW1lcywgTVNQIDQzMDwvYT46IDxhIGhyZWY9Ik1TUDQzMF8wMDJkUmVncy5odG1sI01TUDQzMF8wMDJkUmVncyI+TVNQNDMwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtU3BhcmMtMTgyMyI+cmVnaXN0ZXIgbmFtZXMsIFNwYXJjPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZFJlZ3MuaHRtbCNTcGFyY18wMDJkUmVncyI+U3BhcmMtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LVJlZ2lzdGVycy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtVElMRV8wMDJkR3gtMjAzMiI+cmVnaXN0ZXIgbmFtZXMsIFRJTEUtR3g8L2E+OiA8YSBocmVmPSJUSUxFXzAwMmRHeC1SZWdpc3RlcnMuaHRtbCNUSUxFXzAwMmRHeC1SZWdpc3RlcnMiPlRJTEUtR3ggUmVnaXN0ZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRVByby1SZWdpc3RlcnMuaHRtbCNpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLVRJTEVQcm8tMjA0NiI+cmVnaXN0ZXIgbmFtZXMsIFRJTEVQcm88L2E+OiA8YSBocmVmPSJUSUxFUHJvLVJlZ2lzdGVycy5odG1sI1RJTEVQcm8tUmVnaXN0ZXJzIj5USUxFUHJvIFJlZ2lzdGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLVY4NTAtMjE4NiI+cmVnaXN0ZXIgbmFtZXMsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtVkFYLTIxNTciPnJlZ2lzdGVyIG5hbWVzLCBWQVg8L2E+OiA8YSBocmVmPSJWQVhfMDAyZG9wZXJhbmRzLmh0bWwjVkFYXzAwMmRvcGVyYW5kcyI+VkFYLW9wZXJhbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLVJlZ2lzdGVycy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtWHRlbnNhLTIyOTEiPnJlZ2lzdGVyIG5hbWVzLCBYdGVuc2E8L2E+OiA8YSBocmVmPSJYdGVuc2EtUmVnaXN0ZXJzLmh0bWwjWHRlbnNhLVJlZ2lzdGVycyI+WHRlbnNhIFJlZ2lzdGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtWjgwLTIwNzQiPnJlZ2lzdGVyIG5hbWVzLCBaODA8L2E+OiA8YSBocmVmPSJaODBfMDAyZFJlZ3MuaHRtbCNaODBfMDAyZFJlZ3MiPlo4MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iczM5MC1SZWdpc3Rlci5odG1sI2luZGV4LXJlZ2lzdGVyLW5hbWluZ18wMDJjLXMzOTAtMTY5NSI+cmVnaXN0ZXIgbmFtaW5nLCBzMzkwPC9hPjogPGEgaHJlZj0iczM5MC1SZWdpc3Rlci5odG1sI3MzOTAtUmVnaXN0ZXIiPnMzOTAgUmVnaXN0ZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgtcmVnaXN0ZXItb3BlcmFuZHNfMDAyYy1pMzg2LTk0NyI+cmVnaXN0ZXIgb3BlcmFuZHMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LXJlZ2lzdGVyLW9wZXJhbmRzXzAwMmMteDg2XzAwMmQ2NC05NTQiPnJlZ2lzdGVyIG9wZXJhbmRzLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyc18wMDJjLUQxMFYtODE0Ij5yZWdpc3RlcnMsIEQxMFY8L2E+OiA8YSBocmVmPSJEMTBWXzAwMmRSZWdzLmh0bWwjRDEwVl8wMDJkUmVncyI+RDEwVi1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyc18wMDJjLUQzMFYtODQyIj5yZWdpc3RlcnMsIEQzMFY8L2E+OiA8YSBocmVmPSJEMzBWXzAwMmRSZWdzLmh0bWwjRDMwVl8wMDJkUmVncyI+RDMwVi1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyc18wMDJjLWkzODYtOTk5Ij5yZWdpc3RlcnMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRSZWdzLmh0bWwjaTM4Nl8wMDJkUmVncyI+aTM4Ni1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hfMDAyZFJlZ3MuaHRtbCNpbmRleC1yZWdpc3RlcnNfMDAyYy1TSC0xNzUwIj5yZWdpc3RlcnMsIFNIPC9hPjogPGEgaHJlZj0iU0hfMDAyZFJlZ3MuaHRtbCNTSF8wMDJkUmVncyI+U0gtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNINjRfMDAyZFJlZ3MuaHRtbCNpbmRleC1yZWdpc3RlcnNfMDAyYy1TSDY0LTE3NzkiPnJlZ2lzdGVycywgU0g2NDwvYT46IDxhIGhyZWY9IlNINjRfMDAyZFJlZ3MuaHRtbCNTSDY0XzAwMmRSZWdzIj5TSDY0LVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE1NUmVncy5odG1sI2luZGV4LXJlZ2lzdGVyc18wMDJjLVRJQzU0WC1tZW1vcnlfMDAyZG1hcHBlZC0xOTg0Ij5yZWdpc3RlcnMsIFRJQzU0WCBtZW1vcnktbWFwcGVkPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRNTVJlZ3MuaHRtbCNUSUM1NFhfMDAyZE1NUmVncyI+VElDNTRYLU1NUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFJlZ3MuaHRtbCNpbmRleC1yZWdpc3RlcnNfMDAyYy14ODZfMDAyZDY0LTEwMDEiPnJlZ2lzdGVycywgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkUmVncy5odG1sI2kzODZfMDAyZFJlZ3MiPmkzODYtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwXzAwMmRSZWdzLmh0bWwjaW5kZXgtcmVnaXN0ZXJzXzAwMmMtWjgwMDAtMjA5MSI+cmVnaXN0ZXJzLCBaODAwMDwvYT46IDxhIGhyZWY9Ilo4MDAwXzAwMmRSZWdzLmh0bWwjWjgwMDBfMDAyZFJlZ3MiPlo4MDAwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtUmVsYXhhdGlvbi5odG1sI2luZGV4LXJlbGF4YXRpb24tMjI5OSI+cmVsYXhhdGlvbjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iPlh0ZW5zYSBSZWxheGF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uLmh0bWwjaW5kZXgtcmVsYXhhdGlvbi1vZi1fMDA0MGNvZGVfMDA3YkFERElfMDA3ZC1pbnN0cnVjdGlvbnMtMjMxNyI+cmVsYXhhdGlvbiBvZiA8Y29kZT5BRERJPC9jb2RlPiBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPlh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1CcmFuY2gtUmVsYXhhdGlvbi5odG1sI2luZGV4LXJlbGF4YXRpb24tb2YtYnJhbmNoLWluc3RydWN0aW9ucy0yMzAwIj5yZWxheGF0aW9uIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24iPlh0ZW5zYSBCcmFuY2ggUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1DYWxsLVJlbGF4YXRpb24uaHRtbCNpbmRleC1yZWxheGF0aW9uLW9mLWNhbGwtaW5zdHJ1Y3Rpb25zLTIzMDIiPnJlbGF4YXRpb24gb2YgY2FsbCBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EtQ2FsbC1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUNhbGwtUmVsYXhhdGlvbiI+WHRlbnNhIENhbGwgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI2luZGV4LXJlbGF4YXRpb24tb2YtaW1tZWRpYXRlLWZpZWxkcy0yMzA1Ij5yZWxheGF0aW9uIG9mIGltbWVkaWF0ZSBmaWVsZHM8L2E+OiA8YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPlh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI2luZGV4LXJlbGF4YXRpb24tb2YtXzAwNDBjb2RlXzAwN2JMMTZTSV8wMDdkLWluc3RydWN0aW9ucy0yMzEzIj5yZWxheGF0aW9uIG9mIDxjb2RlPkwxNlNJPC9jb2RlPiBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPlh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI2luZGV4LXJlbGF4YXRpb24tb2YtXzAwNDBjb2RlXzAwN2JMMTZVSV8wMDdkLWluc3RydWN0aW9ucy0yMzE0Ij5yZWxheGF0aW9uIG9mIDxjb2RlPkwxNlVJPC9jb2RlPiBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPlh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI2luZGV4LXJlbGF4YXRpb24tb2YtXzAwNDBjb2RlXzAwN2JMMzJJXzAwN2QtaW5zdHJ1Y3Rpb25zLTIzMTUiPnJlbGF4YXRpb24gb2YgPGNvZGU+TDMySTwvY29kZT4gaW5zdHJ1Y3Rpb25zPC9hPjogPGEgaHJlZj0iWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uIj5YdGVuc2EgSW1tZWRpYXRlIFJlbGF4YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNpbmRleC1yZWxheGF0aW9uLW9mLV8wMDQwY29kZV8wMDdiTDhVSV8wMDdkLWluc3RydWN0aW9ucy0yMzEyIj5yZWxheGF0aW9uIG9mIDxjb2RlPkw4VUk8L2NvZGU+IGluc3RydWN0aW9uczwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbiI+WHRlbnNhIEltbWVkaWF0ZSBSZWxheGF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uLmh0bWwjaW5kZXgtcmVsYXhhdGlvbi1vZi1fMDA0MGNvZGVfMDA3Yk1PVklfMDA3ZC1pbnN0cnVjdGlvbnMtMjMwNyI+cmVsYXhhdGlvbiBvZiA8Y29kZT5NT1ZJPC9jb2RlPiBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPlh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlbG9jLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZWxvY18wMDdkLWRpcmVjdGl2ZS00NDEiPjxjb2RlPnJlbG9jPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJSZWxvYy5odG1sI1JlbG9jIj5SZWxvYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNlY3Rpb25zLmh0bWwjaW5kZXgtcmVsb2NhdGlvbi0xODYiPnJlbG9jYXRpb248L2E+OiA8YSBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIj5TZWN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxkLVNlY3Rpb25zLmh0bWwjaW5kZXgtcmVsb2NhdGlvbi1leGFtcGxlLTE5OSI+cmVsb2NhdGlvbiBleGFtcGxlPC9hPjogPGEgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNMZC1TZWN0aW9ucyI+TGQgU2VjdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucy5odG1sI2luZGV4LXJlbG9jYXRpb25zXzAwMmMtQUFyY2g2NC01MzAiPnJlbG9jYXRpb25zLCBBQXJjaDY0PC9hPjogPGEgaHJlZj0iQUFyY2g2NF8wMDJkUmVsb2NhdGlvbnMuaHRtbCNBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucyI+QUFyY2g2NC1SZWxvY2F0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFscGhhXzAwMmRSZWxvY3MuaHRtbCNpbmRleC1yZWxvY2F0aW9uc18wMDJjLUFscGhhLTU3MiI+cmVsb2NhdGlvbnMsIEFscGhhPC9hPjogPGEgaHJlZj0iQWxwaGFfMDAyZFJlbG9jcy5odG1sI0FscGhhXzAwMmRSZWxvY3MiPkFscGhhLVJlbG9jczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRSZWxvY3MuaHRtbCNpbmRleC1yZWxvY2F0aW9uc18wMDJjLVNwYXJjLTE4MjciPnJlbG9jYXRpb25zLCBTcGFyYzwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRSZWxvY3MuaHRtbCNTcGFyY18wMDJkUmVsb2NzIj5TcGFyYy1SZWxvY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2luZGV4LXJlcGVhdC1wcmVmaXhlc18wMDJjLWkzODYtMTAxMCI+cmVwZWF0IHByZWZpeGVzLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkUHJlZml4ZXMuaHRtbCNpMzg2XzAwMmRQcmVmaXhlcyI+aTM4Ni1QcmVmaXhlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjaW5kZXgtcmVwb3J0aW5nLWJ1Z3MtaW4tYXNzZW1ibGVyLTIzMzIiPnJlcG9ydGluZyBidWdzIGluIGFzc2VtYmxlcjwvYT46IDxhIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiPlJlcG9ydGluZyBCdWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVwdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdicmVwdF8wMDdkLWRpcmVjdGl2ZS00NDIiPjxjb2RlPnJlcHQ8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlJlcHQuaHRtbCNSZXB0Ij5SZXB0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnJlc2VydmVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1TUEFSQy0xODQwIj48Y29kZT5yZXNlcnZlPC9jb2RlPiBkaXJlY3RpdmUsIFNQQVJDPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNTcGFyY18wMDJkRGlyZWN0aXZlcyI+U3BhcmMtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1yZXR1cm4taW5zdHJ1Y3Rpb25zXzAwMmMtaTM4Ni05NjkiPnJldHVybiBpbnN0cnVjdGlvbnMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LXJldHVybi1pbnN0cnVjdGlvbnNfMDAyYy14ODZfMDAyZDY0LTk3MSI+cmV0dXJuIGluc3RydWN0aW9ucywgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaW5kZXgtUkVYLXByZWZpeGVzXzAwMmMtaTM4Ni0xMDExIj5SRVggcHJlZml4ZXMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2kzODZfMDAyZFByZWZpeGVzIj5pMzg2LVByZWZpeGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LVJMNzgtYXNzZW1ibGVyLWRpcmVjdGl2ZXMtMTYzOSI+Ukw3OCBhc3NlbWJsZXIgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IlJMNzhfMDAyZERpcmVjdGl2ZXMuaHRtbCNSTDc4XzAwMmREaXJlY3RpdmVzIj5STDc4LURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSTDc4XzAwMmRDaGFycy5odG1sI2luZGV4LVJMNzgtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNjQxIj5STDc4IGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJSTDc4XzAwMmRDaGFycy5odG1sI1JMNzhfMDAyZENoYXJzIj5STDc4LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1STDc4LWxpbmUtc2VwYXJhdG9yLTE2NDQiPlJMNzggbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJSTDc4XzAwMmRDaGFycy5odG1sI1JMNzhfMDAyZENoYXJzIj5STDc4LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkTW9kaWZpZXJzLmh0bWwjaW5kZXgtUkw3OC1tb2RpZmllcnMtMTYzNiI+Ukw3OCBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJSTDc4XzAwMmRNb2RpZmllcnMuaHRtbCNSTDc4XzAwMmRNb2RpZmllcnMiPlJMNzgtTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkT3B0cy5odG1sI2luZGV4LVJMNzgtb3B0aW9ucy0xNjM1Ij5STDc4IG9wdGlvbnM8L2E+OiA8YSBocmVmPSJSTDc4XzAwMmRPcHRzLmh0bWwjUkw3OF8wMDJkT3B0cyI+Ukw3OC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtUkw3OC1zdXBwb3J0LTE2MzMiPlJMNzggc3VwcG9ydDwvYT46IDxhIGhyZWY9IlJMNzhfMDAyZERlcGVuZGVudC5odG1sI1JMNzhfMDAyZERlcGVuZGVudCI+Ukw3OC1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtcnNlY3QtMjEwNiI+PGNvZGU+cnNlY3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiPlo4MDAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LVJYLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmUzYnl0ZS0xNjY1Ij5SWCBhc3NlbWJsZXIgZGlyZWN0aXZlIC4zYnl0ZTwvYT46IDxhIGhyZWY9IlJYXzAwMmREaXJlY3RpdmVzLmh0bWwjUlhfMDAyZERpcmVjdGl2ZXMiPlJYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LVJYLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVmZXRjaGFsaWduLTE2NjciPlJYIGFzc2VtYmxlciBkaXJlY3RpdmUgLmZldGNoYWxpZ248L2E+OiA8YSBocmVmPSJSWF8wMDJkRGlyZWN0aXZlcy5odG1sI1JYXzAwMmREaXJlY3RpdmVzIj5SWC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1SWC1hc3NlbWJsZXItZGlyZWN0aXZlcy0xNjYzIj5SWCBhc3NlbWJsZXIgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IlJYXzAwMmREaXJlY3RpdmVzLmh0bWwjUlhfMDAyZERpcmVjdGl2ZXMiPlJYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkRmxvYXQuaHRtbCNpbmRleC1SWC1mbG9hdGluZy1wb2ludC0xNjY5Ij5SWCBmbG9hdGluZyBwb2ludDwvYT46IDxhIGhyZWY9IlJYXzAwMmRGbG9hdC5odG1sI1JYXzAwMmRGbG9hdCI+UlgtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1SWC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE2NzMiPlJYIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJSWF8wMDJkQ2hhcnMuaHRtbCNSWF8wMDJkQ2hhcnMiPlJYLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZENoYXJzLmh0bWwjaW5kZXgtUlgtbGluZS1zZXBhcmF0b3ItMTY3NiI+UlggbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJSWF8wMDJkQ2hhcnMuaHRtbCNSWF8wMDJkQ2hhcnMiPlJYLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZE1vZGlmaWVycy5odG1sI2luZGV4LVJYLW1vZGlmaWVycy0xNjU3Ij5SWCBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJSWF8wMDJkTW9kaWZpZXJzLmh0bWwjUlhfMDAyZE1vZGlmaWVycyI+UlgtTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNpbmRleC1SWC1vcHRpb25zLTE2NDciPlJYIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJSWF8wMDJkT3B0cy5odG1sI1JYXzAwMmRPcHRzIj5SWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVJYLXN1cHBvcnQtMTY0NSI+Ulggc3VwcG9ydDwvYT46IDxhIGhyZWY9IlJYXzAwMmREZXBlbmRlbnQuaHRtbCNSWF8wMDJkRGVwZW5kZW50Ij5SWC1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtczM5MC1mbG9hdGluZy1wb2ludC0xNzE4Ij5zMzkwIGZsb2F0aW5nIHBvaW50PC9hPjogPGEgaHJlZj0iczM5MC1GbG9hdGluZy1Qb2ludC5odG1sI3MzOTAtRmxvYXRpbmctUG9pbnQiPnMzOTAgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUFsaWFzZXMuaHRtbCNpbmRleC1zMzkwLWluc3RydWN0aW9uLWFsaWFzZXMtMTcwNCI+czM5MCBpbnN0cnVjdGlvbiBhbGlhc2VzPC9hPjogPGEgaHJlZj0iczM5MC1BbGlhc2VzLmh0bWwjczM5MC1BbGlhc2VzIj5zMzkwIEFsaWFzZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUZvcm1hdHMuaHRtbCNpbmRleC1zMzkwLWluc3RydWN0aW9uLWZvcm1hdHMtMTcwMiI+czM5MCBpbnN0cnVjdGlvbiBmb3JtYXRzPC9hPjogPGEgaHJlZj0iczM5MC1Gb3JtYXRzLmh0bWwjczM5MC1Gb3JtYXRzIj5zMzkwIEZvcm1hdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUluc3RydWN0aW9uLU1hcmtlci5odG1sI2luZGV4LXMzOTAtaW5zdHJ1Y3Rpb24tbWFya2VyLTE3MDgiPnMzOTAgaW5zdHJ1Y3Rpb24gbWFya2VyPC9hPjogPGEgaHJlZj0iczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIuaHRtbCNzMzkwLUluc3RydWN0aW9uLU1hcmtlciI+czM5MCBJbnN0cnVjdGlvbiBNYXJrZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLU1uZW1vbmljcy5odG1sI2luZGV4LXMzOTAtaW5zdHJ1Y3Rpb24tbW5lbW9uaWNzLTE2OTgiPnMzOTAgaW5zdHJ1Y3Rpb24gbW5lbW9uaWNzPC9hPjogPGEgaHJlZj0iczM5MC1NbmVtb25pY3MuaHRtbCNzMzkwLU1uZW1vbmljcyI+czM5MCBNbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLU9wZXJhbmQtTW9kaWZpZXIuaHRtbCNpbmRleC1zMzkwLWluc3RydWN0aW9uLW9wZXJhbmQtbW9kaWZpZXItMTcwNiI+czM5MCBpbnN0cnVjdGlvbiBvcGVyYW5kIG1vZGlmaWVyPC9hPjogPGEgaHJlZj0iczM5MC1PcGVyYW5kLU1vZGlmaWVyLmh0bWwjczM5MC1PcGVyYW5kLU1vZGlmaWVyIj5zMzkwIE9wZXJhbmQgTW9kaWZpZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLU9wZXJhbmRzLmh0bWwjaW5kZXgtczM5MC1pbnN0cnVjdGlvbi1vcGVyYW5kcy0xNzAwIj5zMzkwIGluc3RydWN0aW9uIG9wZXJhbmRzPC9hPjogPGEgaHJlZj0iczM5MC1PcGVyYW5kcy5odG1sI3MzOTAtT3BlcmFuZHMiPnMzOTAgT3BlcmFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLVN5bnRheC5odG1sI2luZGV4LXMzOTAtaW5zdHJ1Y3Rpb24tc3ludGF4LTE2OTQiPnMzOTAgaW5zdHJ1Y3Rpb24gc3ludGF4PC9hPjogPGEgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCI+czM5MCBTeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUNoYXJhY3RlcnMuaHRtbCNpbmRleC1zMzkwLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMTY4OSI+czM5MCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iczM5MC1DaGFyYWN0ZXJzLmh0bWwjczM5MC1DaGFyYWN0ZXJzIj5zMzkwIENoYXJhY3RlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUNoYXJhY3RlcnMuaHRtbCNpbmRleC1zMzkwLWxpbmUtc2VwYXJhdG9yLTE2OTIiPnMzOTAgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJzMzkwLUNoYXJhY3RlcnMuaHRtbCNzMzkwLUNoYXJhY3RlcnMiPnMzOTAgQ2hhcmFjdGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InMzOTAtTGl0ZXJhbC1Qb29sLUVudHJpZXMuaHRtbCNpbmRleC1zMzkwLWxpdGVyYWwtcG9vbC1lbnRyaWVzLTE3MTAiPnMzOTAgbGl0ZXJhbCBwb29sIGVudHJpZXM8L2E+OiA8YSBocmVmPSJzMzkwLUxpdGVyYWwtUG9vbC1FbnRyaWVzLmh0bWwjczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcyI+czM5MCBMaXRlcmFsIFBvb2wgRW50cmllczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InMzOTAtT3B0aW9ucy5odG1sI2luZGV4LXMzOTAtb3B0aW9ucy0xNjc5Ij5zMzkwIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNzMzkwLU9wdGlvbnMiPnMzOTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InMzOTAtUmVnaXN0ZXIuaHRtbCNpbmRleC1zMzkwLXJlZ2lzdGVyLW5hbWluZy0xNjk2Ij5zMzkwIHJlZ2lzdGVyIG5hbWluZzwvYT46IDxhIGhyZWY9InMzOTAtUmVnaXN0ZXIuaHRtbCNzMzkwLVJlZ2lzdGVyIj5zMzkwIFJlZ2lzdGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1zMzkwLXN1cHBvcnQtMTY3NyI+czM5MCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNTXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+Uy8zOTAtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzYmxvY2tfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk0NyI+PGNvZGU+c2Jsb2NrPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTYnR0bC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2J0dGxfMDA3ZC1kaXJlY3RpdmUtNDQzIj48Y29kZT5zYnR0bDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iU2J0dGwuaHRtbCNTYnR0bCI+U2J0dGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTY2hlZHVsZS1EaXJlY3RpdmUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNjaGVkdWxlXzAwN2QtZGlyZWN0aXZlLTIzMjAiPjxjb2RlPnNjaGVkdWxlPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJTY2hlZHVsZS1EaXJlY3RpdmUuaHRtbCNTY2hlZHVsZS1EaXJlY3RpdmUiPlNjaGVkdWxlIERpcmVjdGl2ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjbC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2NsXzAwN2QtZGlyZWN0aXZlLTQ0NiI+PGNvZGU+c2NsPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJTY2wuaHRtbCNTY2wiPlNjbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNDT1JFXzAwMmRPcHRzLmh0bWwjaW5kZXgtU0NPUkUtYXJjaGl0ZWN0dXJlcy0xNzIzIj5TQ09SRSBhcmNoaXRlY3R1cmVzPC9hPjogPGEgaHJlZj0iU0NPUkVfMDAyZE9wdHMuaHRtbCNTQ09SRV8wMDJkT3B0cyI+U0NPUkUtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNDT1JFXzAwMmRQc2V1ZG8uaHRtbCNpbmRleC1TQ09SRS1kaXJlY3RpdmVzLTE3MjUiPlNDT1JFIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJTQ09SRV8wMDJkUHNldWRvLmh0bWwjU0NPUkVfMDAyZFBzZXVkbyI+U0NPUkUtUHNldWRvPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0NPUkVfMDAyZENoYXJzLmh0bWwjaW5kZXgtU0NPUkUtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNzI3Ij5TQ09SRSBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iU0NPUkVfMDAyZENoYXJzLmh0bWwjU0NPUkVfMDAyZENoYXJzIj5TQ09SRS1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNDT1JFXzAwMmRDaGFycy5odG1sI2luZGV4LVNDT1JFLWxpbmUtc2VwYXJhdG9yLTE3MzAiPlNDT1JFIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iU0NPUkVfMDAyZENoYXJzLmh0bWwjU0NPUkVfMDAyZENoYXJzIj5TQ09SRS1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNDT1JFXzAwMmRPcHRzLmh0bWwjaW5kZXgtU0NPUkUtb3B0aW9ucy0xNzIxIj5TQ09SRSBvcHRpb25zPC9hPjogPGEgaHJlZj0iU0NPUkVfMDAyZE9wdHMuaHRtbCNTQ09SRV8wMDJkT3B0cyI+U0NPUkUtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNDT1JFXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1TQ09SRS1wcm9jZXNzb3ItMTcxOSI+U0NPUkUgcHJvY2Vzc29yPC9hPjogPGEgaHJlZj0iU0NPUkVfMDAyZERlcGVuZGVudC5odG1sI1NDT1JFXzAwMmREZXBlbmRlbnQiPlNDT1JFLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2Rhb2ZmXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVY4NTAtMjIyMSI+PGNvZGU+c2Rhb2ZmPC9jb2RlPiBwc2V1ZG8tb3AsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNWODUwLU9wY29kZXMiPlY4NTAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkkuaHRtbCNpbmRleC1zZWFyY2gtcGF0aC1mb3ItXzAwNDBjb2RlXzAwN2JfMDAyZWluY2x1ZGVfMDA3ZC02NCI+c2VhcmNoIHBhdGggZm9yIDxjb2RlPi5pbmNsdWRlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkkuaHRtbCNJIj5JPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNlY3RfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NU1AtNDMwLTE1MTgiPjxjb2RlPnNlY3Q8L2NvZGU+IGRpcmVjdGl2ZSwgTVNQIDQzMDwvYT46IDxhIGhyZWY9Ik1TUDQzMC1EaXJlY3RpdmVzLmh0bWwjTVNQNDMwLURpcmVjdGl2ZXMiPk1TUDQzMCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZWN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NDgiPjxjb2RlPnNlY3Q8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNlY3Rpb24uaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNlY3Rpb25fMDA3ZC1kaXJlY3RpdmUtXzAwMjhDT0ZGLXZlcnNpb25fMDAyOS00NTAiPjxjb2RlPnNlY3Rpb248L2NvZGU+IGRpcmVjdGl2ZSAoQ09GRiB2ZXJzaW9uKTwvYT46IDxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj5TZWN0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2VjdGlvbi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2VjdGlvbl8wMDdkLWRpcmVjdGl2ZS1fMDAyOEVMRi12ZXJzaW9uXzAwMjktNDUyIj48Y29kZT5zZWN0aW9uPC9jb2RlPiBkaXJlY3RpdmUgKEVMRiB2ZXJzaW9uKTwvYT46IDxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj5TZWN0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZWN0aW9uXzAwN2QtZGlyZWN0aXZlXzAwMmMtVjg1MC0yMjA5Ij48Y29kZT5zZWN0aW9uPC9jb2RlPiBkaXJlY3RpdmUsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNWODUwLURpcmVjdGl2ZXMiPlY4NTAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaW5kZXgtc2VjdGlvbi1vdmVycmlkZS1wcmVmaXhlc18wMDJjLWkzODYtMTAwNSI+c2VjdGlvbiBvdmVycmlkZSBwcmVmaXhlcywgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaTM4Nl8wMDJkUHJlZml4ZXMiPmkzODYtUHJlZml4ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjaW5kZXgtU2VjdGlvbi1TdGFjay00ODIiPlNlY3Rpb24gU3RhY2s8L2E+OiA8YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiI+U3ViU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNlY3Rpb24uaHRtbCNpbmRleC1TZWN0aW9uLVN0YWNrLTQ1MSI+U2VjdGlvbiBTdGFjazwvYT46IDxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj5TZWN0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHVzaFNlY3Rpb24uaHRtbCNpbmRleC1TZWN0aW9uLVN0YWNrLTQzNyI+U2VjdGlvbiBTdGFjazwvYT46IDxhIGhyZWY9IlB1c2hTZWN0aW9uLmh0bWwjUHVzaFNlY3Rpb24iPlB1c2hTZWN0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJldmlvdXMuaHRtbCNpbmRleC1TZWN0aW9uLVN0YWNrLTQyOCI+U2VjdGlvbiBTdGFjazwvYT46IDxhIGhyZWY9IlByZXZpb3VzLmh0bWwjUHJldmlvdXMiPlByZXZpb3VzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG9wU2VjdGlvbi5odG1sI2luZGV4LVNlY3Rpb24tU3RhY2stNDI2Ij5TZWN0aW9uIFN0YWNrPC9hPjogPGEgaHJlZj0iUG9wU2VjdGlvbi5odG1sI1BvcFNlY3Rpb24iPlBvcFNlY3Rpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJTZWNzLUJhY2tncm91bmQuaHRtbCNpbmRleC1zZWN0aW9uXzAwMmRyZWxhdGl2ZS1hZGRyZXNzaW5nLTE5MSI+c2VjdGlvbi1yZWxhdGl2ZSBhZGRyZXNzaW5nPC9hPjogPGEgaHJlZj0iU2Vjcy1CYWNrZ3JvdW5kLmh0bWwjU2Vjcy1CYWNrZ3JvdW5kIj5TZWNzIEJhY2tncm91bmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTZWN0aW9ucy5odG1sI2luZGV4LXNlY3Rpb25zLTE4NSI+c2VjdGlvbnM8L2E+OiA8YSBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIj5TZWN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFzLVNlY3Rpb25zLmh0bWwjaW5kZXgtc2VjdGlvbnMtaW4tbWVzc2FnZXNfMDAyYy1pbnRlcm5hbC0yMDEiPnNlY3Rpb25zIGluIG1lc3NhZ2VzLCBpbnRlcm5hbDwvYT46IDxhIGhyZWY9IkFzLVNlY3Rpb25zLmh0bWwjQXMtU2VjdGlvbnMiPkFzIFNlY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LXNlY3Rpb25zXzAwMmMtaTM4Ni05NzMiPnNlY3Rpb25zLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxkLVNlY3Rpb25zLmh0bWwjaW5kZXgtc2VjdGlvbnNfMDAyYy1uYW1lZC0xOTMiPnNlY3Rpb25zLCBuYW1lZDwvYT46IDxhIGhyZWY9IkxkLVNlY3Rpb25zLmh0bWwjTGQtU2VjdGlvbnMiPkxkIFNlY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LXNlY3Rpb25zXzAwMmMteDg2XzAwMmQ2NC05NzUiPnNlY3Rpb25zLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNlZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLVNQQVJDLTE4NDEiPjxjb2RlPnNlZzwvY29kZT4gZGlyZWN0aXZlLCBTUEFSQzwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjU3BhcmNfMDAyZERpcmVjdGl2ZXMiPlNwYXJjLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtc2VnbS0yMDk2Ij48Y29kZT5zZWdtPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNaODAwMC1EaXJlY3RpdmVzIj5aODAwMCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2V0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZXRfMDA3ZC1kaXJlY3RpdmUtNDUzIj48Y29kZT5zZXQ8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlNldC5odG1sI1NldCI+U2V0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk0OSI+PGNvZGU+c2V0PC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSF8wMDJkQWRkcmVzc2luZy5odG1sI2luZGV4LVNILWFkZHJlc3NpbmctbW9kZXMtMTc1MiI+U0ggYWRkcmVzc2luZyBtb2RlczwvYT46IDxhIGhyZWY9IlNIXzAwMmRBZGRyZXNzaW5nLmh0bWwjU0hfMDAyZEFkZHJlc3NpbmciPlNILUFkZHJlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1GbG9hdGluZy1Qb2ludC5odG1sI2luZGV4LVNILWZsb2F0aW5nLXBvaW50LV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktMTc1NCI+U0ggZmxvYXRpbmcgcG9pbnQgKDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4pPC9hPjogPGEgaHJlZj0iU0gtRmxvYXRpbmctUG9pbnQuaHRtbCNTSC1GbG9hdGluZy1Qb2ludCI+U0ggRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1TSC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE3NDMiPlNIIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJTSF8wMDJkQ2hhcnMuaHRtbCNTSF8wMDJkQ2hhcnMiPlNILUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hfMDAyZENoYXJzLmh0bWwjaW5kZXgtU0gtbGluZS1zZXBhcmF0b3ItMTc0NiI+U0ggbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJTSF8wMDJkQ2hhcnMuaHRtbCNTSF8wMDJkQ2hhcnMiPlNILUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtRGlyZWN0aXZlcy5odG1sI2luZGV4LVNILW1hY2hpbmUtZGlyZWN0aXZlcy0xNzU1Ij5TSCBtYWNoaW5lIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJTSC1EaXJlY3RpdmVzLmh0bWwjU0gtRGlyZWN0aXZlcyI+U0ggRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wY29kZXMuaHRtbCNpbmRleC1TSC1vcGNvZGUtc3VtbWFyeS0xNzYwIj5TSCBvcGNvZGUgc3VtbWFyeTwvYT46IDxhIGhyZWY9IlNILU9wY29kZXMuaHRtbCNTSC1PcGNvZGVzIj5TSCBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LVNILW9wdGlvbnMtMTczMiI+U0ggb3B0aW9uczwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hfMDAyZFJlZ3MuaHRtbCNpbmRleC1TSC1yZWdpc3RlcnMtMTc0OSI+U0ggcmVnaXN0ZXJzPC9hPjogPGEgaHJlZj0iU0hfMDAyZFJlZ3MuaHRtbCNTSF8wMDJkUmVncyI+U0gtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNIXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1TSC1zdXBwb3J0LTE3MzEiPlNIIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJTSF8wMDJkRGVwZW5kZW50Lmh0bWwjU0hfMDAyZERlcGVuZGVudCI+U0gtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0g2NC1PcHRpb25zLmh0bWwjaW5kZXgtU0g2NC1BQkktb3B0aW9ucy0xNzY5Ij5TSDY0IEFCSSBvcHRpb25zPC9hPjogPGEgaHJlZj0iU0g2NC1PcHRpb25zLmh0bWwjU0g2NC1PcHRpb25zIj5TSDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0XzAwMmRBZGRyZXNzaW5nLmh0bWwjaW5kZXgtU0g2NC1hZGRyZXNzaW5nLW1vZGVzLTE3ODEiPlNINjQgYWRkcmVzc2luZyBtb2RlczwvYT46IDxhIGhyZWY9IlNINjRfMDAyZEFkZHJlc3NpbmcuaHRtbCNTSDY0XzAwMmRBZGRyZXNzaW5nIj5TSDY0LUFkZHJlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0LU9wdGlvbnMuaHRtbCNpbmRleC1TSDY0LUlTQS1vcHRpb25zLTE3NjciPlNINjQgSVNBIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJTSDY0LU9wdGlvbnMuaHRtbCNTSDY0LU9wdGlvbnMiPlNINjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNINjRfMDAyZENoYXJzLmh0bWwjaW5kZXgtU0g2NC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE3NzIiPlNINjQgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IlNINjRfMDAyZENoYXJzLmh0bWwjU0g2NF8wMDJkQ2hhcnMiPlNINjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0XzAwMmRDaGFycy5odG1sI2luZGV4LVNINjQtbGluZS1zZXBhcmF0b3ItMTc3NSI+U0g2NCBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9IlNINjRfMDAyZENoYXJzLmh0bWwjU0g2NF8wMDJkQ2hhcnMiPlNINjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0LURpcmVjdGl2ZXMuaHRtbCNpbmRleC1TSDY0LW1hY2hpbmUtZGlyZWN0aXZlcy0xNzgzIj5TSDY0IG1hY2hpbmUgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IlNINjQtRGlyZWN0aXZlcy5odG1sI1NINjQtRGlyZWN0aXZlcyI+U0g2NCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0g2NC1PcGNvZGVzLmh0bWwjaW5kZXgtU0g2NC1vcGNvZGUtc3VtbWFyeS0xNzg1Ij5TSDY0IG9wY29kZSBzdW1tYXJ5PC9hPjogPGEgaHJlZj0iU0g2NC1PcGNvZGVzLmh0bWwjU0g2NC1PcGNvZGVzIj5TSDY0IE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0LU9wdGlvbnMuaHRtbCNpbmRleC1TSDY0LW9wdGlvbnMtMTc2NSI+U0g2NCBvcHRpb25zPC9hPjogPGEgaHJlZj0iU0g2NC1PcHRpb25zLmh0bWwjU0g2NC1PcHRpb25zIj5TSDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0XzAwMmRSZWdzLmh0bWwjaW5kZXgtU0g2NC1yZWdpc3RlcnMtMTc3OCI+U0g2NCByZWdpc3RlcnM8L2E+OiA8YSBocmVmPSJTSDY0XzAwMmRSZWdzLmh0bWwjU0g2NF8wMDJkUmVncyI+U0g2NC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtU0g2NC1zdXBwb3J0LTE3NjQiPlNINjQgc3VwcG9ydDwvYT46IDxhIGhyZWY9IlNINjRfMDAyZERlcGVuZGVudC5odG1sI1NINjRfMDAyZERlcGVuZGVudCI+U0g2NC1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzaGlnaF8wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlItMTIyNiI+PGNvZGU+c2hpZ2g8L2NvZGU+IGRpcmVjdGl2ZSwgTTMyUjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCNNMzJSXzAwMmREaXJlY3RpdmVzIj5NMzJSLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaG9ydC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2hvcnRfMDA3ZC1kaXJlY3RpdmUtNDU1Ij48Y29kZT5zaG9ydDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iU2hvcnQuaHRtbCNTaG9ydCI+U2hvcnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2hvcnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1BUkMtNjA3Ij48Y29kZT5zaG9ydDwvY29kZT4gZGlyZWN0aXZlLCBBUkM8L2E+OiA8YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI0FSQy1EaXJlY3RpdmVzIj5BUkMgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2hvcnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkyMiI+PGNvZGU+c2hvcnQ8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFNJTUQuaHRtbCNpbmRleC1TSU1EXzAwMmMtaTM4Ni0xMDQyIj5TSU1ELCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkU0lNRC5odG1sI2kzODZfMDAyZFNJTUQiPmkzODYtU0lNRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFNJTUQuaHRtbCNpbmRleC1TSU1EXzAwMmMteDg2XzAwMmQ2NC0xMDQ1Ij5TSU1ELCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRTSU1ELmh0bWwjaTM4Nl8wMDJkU0lNRCI+aTM4Ni1TSU1EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ2hhcnMuaHRtbCNpbmRleC1zaW5nbGUtY2hhcmFjdGVyLWNvbnN0YW50LTE2NCI+c2luZ2xlIGNoYXJhY3RlciBjb25zdGFudDwvYT46IDxhIGhyZWY9IkNoYXJzLmh0bWwjQ2hhcnMiPkNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2luZ2xlLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzaW5nbGVfMDA3ZC1kaXJlY3RpdmUtNDU2Ij48Y29kZT5zaW5nbGU8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlNpbmdsZS5odG1sI1NpbmdsZSI+U2luZ2xlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNpbmdsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLWkzODYtMTAyNSI+PGNvZGU+c2luZ2xlPC9jb2RlPiBkaXJlY3RpdmUsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij5pMzg2LUZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNpbmdsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLXg4Nl8wMDJkNjQtMTAyOSI+PGNvZGU+c2luZ2xlPC9jb2RlPiBkaXJlY3RpdmUsIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaTM4Nl8wMDJkRmxvYXQiPmkzODYtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjaW5kZXgtc2luZ2xlLXF1b3RlXzAwMmMtWjgwLTIwNzEiPnNpbmdsZSBxdW90ZSwgWjgwPC9hPjogPGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPlo4MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imh3b3JkLmh0bWwjaW5kZXgtc2l4dGVlbi1iaXQtaW50ZWdlcnMtMzUxIj5zaXh0ZWVuIGJpdCBpbnRlZ2VyczwvYT46IDxhIGhyZWY9Imh3b3JkLmh0bWwjaHdvcmQiPmh3b3JkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2N0YS5odG1sI2luZGV4LXNpeHRlZW4tYnl0ZS1pbnRlZ2VyLTQxNSI+c2l4dGVlbiBieXRlIGludGVnZXI8L2E+OiA8YSBocmVmPSJPY3RhLmh0bWwjT2N0YSI+T2N0YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpemUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNpemVfMDA3ZC1kaXJlY3RpdmUtXzAwMjhDT0ZGLXZlcnNpb25fMDAyOS00NTgiPjxjb2RlPnNpemU8L2NvZGU+IGRpcmVjdGl2ZSAoQ09GRiB2ZXJzaW9uKTwvYT46IDxhIGhyZWY9IlNpemUuaHRtbCNTaXplIj5TaXplPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2l6ZS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2l6ZV8wMDdkLWRpcmVjdGl2ZS1fMDAyOEVMRi12ZXJzaW9uXzAwMjktNDU5Ij48Y29kZT5zaXplPC9jb2RlPiBkaXJlY3RpdmUgKEVMRiB2ZXJzaW9uKTwvYT46IDxhIGhyZWY9IlNpemUuaHRtbCNTaXplIj5TaXplPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkU2l6ZS5odG1sI2luZGV4LXNpemUtbW9kaWZpZXJzXzAwMmMtRDEwVi04MDQiPnNpemUgbW9kaWZpZXJzLCBEMTBWPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkU2l6ZS5odG1sI0QxMFZfMDAyZFNpemUiPkQxMFYtU2l6ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZFNpemUuaHRtbCNpbmRleC1zaXplLW1vZGlmaWVyc18wMDJjLUQzMFYtODMxIj5zaXplIG1vZGlmaWVycywgRDMwVjwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZFNpemUuaHRtbCNEMzBWXzAwMmRTaXplIj5EMzBWLVNpemU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRTeW50YXguaHRtbCNpbmRleC1zaXplLW1vZGlmaWVyc18wMDJjLU02ODB4MC0xMjYxIj5zaXplIG1vZGlmaWVycywgTTY4MHgwPC9hPjogPGEgaHJlZj0iTTY4S18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkU3ludGF4Ij5NNjhLLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaW5kZXgtc2l6ZS1wcmVmaXhlc18wMDJjLWkzODYtMTAwNiI+c2l6ZSBwcmVmaXhlcywgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaTM4Nl8wMDJkUHJlZml4ZXMiPmkzODYtUHJlZml4ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLU9wY29kZXMuaHRtbCNpbmRleC1zaXplLXN1ZmZpeGVzXzAwMmMtSDhfMDAyZjMwMC04ODQiPnNpemUgc3VmZml4ZXMsIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI0g4XzAwMmYzMDAtT3Bjb2RlcyI+SDgvMzAwIE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkU2l6ZV8wMDJkVHJhbnNsYXRpb25zLmh0bWwjaW5kZXgtc2l6ZV8wMDJjLXRyYW5zbGF0aW9uc18wMDJjLVNwYXJjLTE4MjkiPnNpemUsIHRyYW5zbGF0aW9ucywgU3BhcmM8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkU2l6ZV8wMDJkVHJhbnNsYXRpb25zLmh0bWwjU3BhcmNfMDAyZFNpemVfMDAyZFRyYW5zbGF0aW9ucyI+U3BhcmMtU2l6ZS1UcmFuc2xhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgtc2l6ZXMtb3BlcmFuZHNfMDAyYy1pMzg2LTk2NCI+c2l6ZXMgb3BlcmFuZHMsIGkzODY8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LXNpemVzLW9wZXJhbmRzXzAwMmMteDg2XzAwMmQ2NC05NjciPnNpemVzIG9wZXJhbmRzLCB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2tpcC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2tpcF8wMDdkLWRpcmVjdGl2ZS00NjAiPjxjb2RlPnNraXA8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlNraXAuaHRtbCNTa2lwIj5Ta2lwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2tpcF8wMDdkLWRpcmVjdGl2ZV8wMDJjLU02ODB4MC0xMjc3Ij48Y29kZT5za2lwPC9jb2RlPiBkaXJlY3RpdmUsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhLXzAwMmREaXJlY3RpdmVzIj5NNjhLLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2tpcF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVNQQVJDLTE4NDIiPjxjb2RlPnNraXA8L2NvZGU+IGRpcmVjdGl2ZSwgU1BBUkM8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sI1NwYXJjXzAwMmREaXJlY3RpdmVzIj5TcGFyYy1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2xlYjEyOC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2xlYjEyOF8wMDdkLWRpcmVjdGl2ZS00NjIiPjxjb2RlPnNsZWIxMjg8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlNsZWIxMjguaHRtbCNTbGViMTI4Ij5TbGViMTI4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PYmplY3QuaHRtbCNpbmRleC1zbWFsbC1vYmplY3RzXzAwMmMtTUlQUy1FQ09GRi0xMzc4Ij5zbWFsbCBvYmplY3RzLCBNSVBTIEVDT0ZGPC9hPjogPGEgaHJlZj0iTUlQUy1PYmplY3QuaHRtbCNNSVBTLU9iamVjdCI+TUlQUyBPYmplY3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI2luZGV4LVNtYXJ0TUlQUy1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlLTEzOTciPlNtYXJ0TUlQUyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlPC9hPjogPGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTT00tU3ltYm9scy5odG1sI2luZGV4LVNPTS1zeW1ib2wtYXR0cmlidXRlcy0yMzkiPlNPTSBzeW1ib2wgYXR0cmlidXRlczwvYT46IDxhIGhyZWY9IlNPTS1TeW1ib2xzLmh0bWwjU09NLVN5bWJvbHMiPlNPTSBTeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtRmlsZXMuaHRtbCNpbmRleC1zb3VyY2UtcHJvZ3JhbS0zMCI+c291cmNlIHByb2dyYW08L2E+OiA8YSBocmVmPSJJbnB1dC1GaWxlcy5odG1sI0lucHV0LUZpbGVzIj5JbnB1dCBGaWxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1zb3VyY2VfMDAyYy1kZXN0aW5hdGlvbi1vcGVyYW5kc18wMDNiLWkzODYtOTYwIj5zb3VyY2UsIGRlc3RpbmF0aW9uIG9wZXJhbmRzOyBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1zb3VyY2VfMDAyYy1kZXN0aW5hdGlvbi1vcGVyYW5kc18wMDNiLXg4Nl8wMDJkNjQtOTYyIj5zb3VyY2UsIGRlc3RpbmF0aW9uIG9wZXJhbmRzOyB4ODYtNjQ8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLVJlZ2lzdGVycy5odG1sI2luZGV4LXNwLXJlZ2lzdGVyLTIyOTIiPnNwIHJlZ2lzdGVyPC9hPjogPGEgaHJlZj0iWHRlbnNhLVJlZ2lzdGVycy5odG1sI1h0ZW5zYS1SZWdpc3RlcnMiPlh0ZW5zYSBSZWdpc3RlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzcF8wMDdkLXJlZ2lzdGVyXzAwMmMtVjg1MC0yMTg4Ij48Y29kZT5zcDwvY29kZT4gcmVnaXN0ZXIsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhY2UuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNwYWNlXzAwN2QtZGlyZWN0aXZlLTQ2MyI+PGNvZGU+c3BhY2U8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlNwYWNlLmh0bWwjU3BhY2UiPlNwYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzcGFjZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTUxIj48Y29kZT5zcGFjZTwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RhdGlzdGljcy5odG1sI2luZGV4LXNwYWNlLXVzZWRfMDAyYy1tYXhpbXVtLWZvci1hc3NlbWJseS05NSI+c3BhY2UgdXNlZCwgbWF4aW11bSBmb3IgYXNzZW1ibHk8L2E+OiA8YSBocmVmPSJzdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcyI+c3RhdGlzdGljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtU1BBUkMtYXJjaGl0ZWN0dXJlcy0xNzkzIj5TUEFSQyBhcmNoaXRlY3R1cmVzPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRDb25zdGFudHMuaHRtbCNpbmRleC1TcGFyYy1jb25zdGFudHMtMTgyNCI+U3BhcmMgY29uc3RhbnRzPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZENvbnN0YW50cy5odG1sI1NwYXJjXzAwMmRDb25zdGFudHMiPlNwYXJjLUNvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhLmh0bWwjaW5kZXgtU1BBUkMtZGF0YS1hbGlnbm1lbnQtMTgxMyI+U1BBUkMgZGF0YSBhbGlnbm1lbnQ8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YS5odG1sI1NwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhIj5TcGFyYy1BbGlnbmVkLURhdGE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRmxvYXQuaHRtbCNpbmRleC1TUEFSQy1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTE4MzEiPlNQQVJDIGZsb2F0aW5nIHBvaW50ICg8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+KTwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRGbG9hdC5odG1sI1NwYXJjXzAwMmRGbG9hdCI+U3BhcmMtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkQ2hhcnMuaHRtbCNpbmRleC1TcGFyYy1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE4MTgiPlNwYXJjIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkQ2hhcnMuaHRtbCNTcGFyY18wMDJkQ2hhcnMiPlNwYXJjLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZENoYXJzLmh0bWwjaW5kZXgtU3BhcmMtbGluZS1zZXBhcmF0b3ItMTgyMSI+U3BhcmMgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkQ2hhcnMuaHRtbCNTcGFyY18wMDJkQ2hhcnMiPlNwYXJjLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1TUEFSQy1tYWNoaW5lLWRpcmVjdGl2ZXMtMTgzMiI+U1BBUkMgbWFjaGluZSBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNTcGFyY18wMDJkRGlyZWN0aXZlcyI+U3BhcmMtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjaW5kZXgtU1BBUkMtb3B0aW9ucy0xNzkxIj5TUEFSQyBvcHRpb25zPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZE9wdHMuaHRtbCNTcGFyY18wMDJkT3B0cyI+U3BhcmMtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRSZWdzLmh0bWwjaW5kZXgtU3BhcmMtcmVnaXN0ZXJzLTE4MjIiPlNwYXJjIHJlZ2lzdGVyczwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmRSZWdzLmh0bWwjU3BhcmNfMDAyZFJlZ3MiPlNwYXJjLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkUmVsb2NzLmh0bWwjaW5kZXgtU3BhcmMtcmVsb2NhdGlvbnMtMTgyNiI+U3BhcmMgcmVsb2NhdGlvbnM8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkUmVsb2NzLmh0bWwjU3BhcmNfMDAyZFJlbG9jcyI+U3BhcmMtUmVsb2NzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZFNpemVfMDAyZFRyYW5zbGF0aW9ucy5odG1sI2luZGV4LVNwYXJjLXNpemUtdHJhbnNsYXRpb25zLTE4MjgiPlNwYXJjIHNpemUgdHJhbnNsYXRpb25zPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZFNpemVfMDAyZFRyYW5zbGF0aW9ucy5odG1sI1NwYXJjXzAwMmRTaXplXzAwMmRUcmFuc2xhdGlvbnMiPlNwYXJjLVNpemUtVHJhbnNsYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVNQQVJDLXN1cHBvcnQtMTc4OSI+U1BBUkMgc3VwcG9ydDwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmREZXBlbmRlbnQuaHRtbCNTcGFyY18wMDJkRGVwZW5kZW50Ij5TcGFyYy1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YS5odG1sI2luZGV4LVNQQVJDLXN5bnRheC0xODE1Ij5TUEFSQyBzeW50YXg8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YS5odG1sI1NwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhIj5TcGFyYy1BbGlnbmVkLURhdGE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRDaGFycy5odG1sI2luZGV4LXNwZWNpYWwtY2hhcmFjdGVyc18wMDJjLU02ODB4MC0xMjg3Ij5zcGVjaWFsIGNoYXJhY3RlcnMsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjTTY4S18wMDJkQ2hhcnMiPk02OEstQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNU1A0MzBfMDAyZFJlZ3MuaHRtbCNpbmRleC1zcGVjaWFsLXB1cnBvc2UtcmVnaXN0ZXJzXzAwMmMtTVNQLTQzMC0xNTEwIj5zcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzLCBNU1AgNDMwPC9hPjogPGEgaHJlZj0iTVNQNDMwXzAwMmRSZWdzLmh0bWwjTVNQNDMwXzAwMmRSZWdzIj5NU1A0MzAtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3NsaXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NTMiPjxjb2RlPnNzbGlzdDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jzc25vbGlzdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTU0Ij48Y29kZT5zc25vbGlzdDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhYi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3RhYmRfMDA3ZC1kaXJlY3RpdmUtNDY3Ij48Y29kZT5zdGFiZDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iU3RhYi5odG1sI1N0YWIiPlN0YWI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFiLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdGFibl8wMDdkLWRpcmVjdGl2ZS00NjgiPjxjb2RlPnN0YWJuPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJTdGFiLmh0bWwjU3RhYiI+U3RhYjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YWIuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0YWJzXzAwN2QtZGlyZWN0aXZlLTQ2OSI+PGNvZGU+c3RhYnM8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlN0YWIuaHRtbCNTdGFiIj5TdGFiPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhYi5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3RhYl8wMDQwdmFyXzAwN2J4XzAwN2RfMDA3ZC1kaXJlY3RpdmVzLTQ2NiI+PGNvZGU+c3RhYjwvY29kZT48dmFyPng8L3Zhcj4gZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IlN0YWIuaHRtbCNTdGFiIj5TdGFiPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2Vjcy1CYWNrZ3JvdW5kLmh0bWwjaW5kZXgtc3RhbmRhcmQtYXNzZW1ibGVyLXNlY3Rpb25zLTE4OSI+c3RhbmRhcmQgYXNzZW1ibGVyIHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iU2Vjcy1CYWNrZ3JvdW5kLmh0bWwjU2Vjcy1CYWNrZ3JvdW5kIj5TZWNzIEJhY2tncm91bmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21tYW5kLUxpbmUuaHRtbCNpbmRleC1zdGFuZGFyZC1pbnB1dF8wMDJjLWFzLWlucHV0LWZpbGUtMjYiPnN0YW5kYXJkIGlucHV0LCBhcyBpbnB1dCBmaWxlPC9hPjogPGEgaHJlZj0iQ29tbWFuZC1MaW5lLmh0bWwjQ29tbWFuZC1MaW5lIj5Db21tYW5kIExpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvci1jaGFyYWN0ZXItMTMyIj5zdGF0ZW1lbnQgc2VwYXJhdG9yIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNTdGF0ZW1lbnRzIj5TdGF0ZW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtQUFyY2g2NC01MjQiPnN0YXRlbWVudCBzZXBhcmF0b3IsIEFBcmNoNjQ8L2E+OiA8YSBocmVmPSJBQXJjaDY0XzAwMmRDaGFycy5odG1sI0FBcmNoNjRfMDAyZENoYXJzIj5BQXJjaDY0LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxwaGFfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLUFscGhhLTU2NyI+c3RhdGVtZW50IHNlcGFyYXRvciwgQWxwaGE8L2E+OiA8YSBocmVmPSJBbHBoYV8wMDJkQ2hhcnMuaHRtbCNBbHBoYV8wMDJkQ2hhcnMiPkFscGhhLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJDXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1BUkMtNTg5Ij5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBBUkM8L2E+OiA8YSBocmVmPSJBUkNfMDAyZENoYXJzLmh0bWwjQVJDXzAwMmRDaGFycyI+QVJDLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1BUk0tNjM3Ij5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBBUk08L2E+OiA8YSBocmVmPSJBUk1fMDAyZENoYXJzLmh0bWwjQVJNXzAwMmRDaGFycyI+QVJNLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1BVlItNzE1Ij5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBBVlI8L2E+OiA8YSBocmVmPSJBVlJfMDAyZENoYXJzLmh0bWwjQVZSXzAwMmRDaGFycyI+QVZSLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1IxNl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtQ1IxNi03NDIiPnN0YXRlbWVudCBzZXBhcmF0b3IsIENSMTY8L2E+OiA8YSBocmVmPSJDUjE2XzAwMmRDaGFycy5odG1sI0NSMTZfMDAyZENoYXJzIj5DUjE2LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXBpcGhhbnlfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLUVwaXBoYW55LTg1OSI+c3RhdGVtZW50IHNlcGFyYXRvciwgRXBpcGhhbnk8L2E+OiA8YSBocmVmPSJFcGlwaGFueV8wMDJkQ2hhcnMuaHRtbCNFcGlwaGFueV8wMDJkQ2hhcnMiPkVwaXBoYW55LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtSDhfMDAyZjMwMC04NjciPnN0YXRlbWVudCBzZXBhcmF0b3IsIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZENoYXJzLmh0bWwjSDhfMDAyZjMwMF8wMDJkQ2hhcnMiPkg4LzMwMC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLWkzODYtOTgwIj5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkQ2hhcnMuaHRtbCNpMzg2XzAwMmRDaGFycyI+aTM4Ni1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imk4NjBfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLWk4NjAtMTA4MCI+c3RhdGVtZW50IHNlcGFyYXRvciwgaTg2MDwvYT46IDxhIGhyZWY9Imk4NjBfMDAyZENoYXJzLmh0bWwjaTg2MF8wMDJkQ2hhcnMiPmk4NjAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpOTYwXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1pOTYwLTExMTMiPnN0YXRlbWVudCBzZXBhcmF0b3IsIGk5NjA8L2E+OiA8YSBocmVmPSJpOTYwXzAwMmRDaGFycy5odG1sI2k5NjBfMDAyZENoYXJzIj5pOTYwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1JQV8wMDJkNjQtMTEyMyI+c3RhdGVtZW50IHNlcGFyYXRvciwgSUEtNjQ8L2E+OiA8YSBocmVmPSJJQV8wMDJkNjRfMDAyZENoYXJzLmh0bWwjSUFfMDAyZDY0XzAwMmRDaGFycyI+SUEtNjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUDJLXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1JUDJLLTExNDMiPnN0YXRlbWVudCBzZXBhcmF0b3IsIElQMks8L2E+OiA8YSBocmVmPSJJUDJLXzAwMmRDaGFycy5odG1sI0lQMktfMDAyZENoYXJzIj5JUDJLLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtTE0zMi0xMTY1Ij5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBMTTMyPC9hPjogPGEgaHJlZj0iTE0zMl8wMDJkQ2hhcnMuaHRtbCNMTTMyXzAwMmRDaGFycyI+TE0zMi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMkNfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLU0zMkMtMTE4NiI+c3RhdGVtZW50IHNlcGFyYXRvciwgTTMyQzwvYT46IDxhIGhyZWY9Ik0zMkNfMDAyZENoYXJzLmh0bWwjTTMyQ18wMDJkQ2hhcnMiPk0zMkMtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtTTY4SEMxMS0xMzE5Ij5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBNNjhIQzExPC9hPjogPGEgaHJlZj0iTTY4SEMxMV8wMDJkU3ludGF4Lmh0bWwjTTY4SEMxMV8wMDJkU3ludGF4Ij5NNjhIQzExLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemVfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLU1pY3JvQmxhemUtMTM1OSI+c3RhdGVtZW50IHNlcGFyYXRvciwgTWljcm9CbGF6ZTwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemVfMDAyZENoYXJzLmh0bWwjTWljcm9CbGF6ZV8wMDJkQ2hhcnMiPk1pY3JvQmxhemUtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1NSVBTLTE0MjQiPnN0YXRlbWVudCBzZXBhcmF0b3IsIE1JUFM8L2E+OiA8YSBocmVmPSJNSVBTXzAwMmRDaGFycy5odG1sI01JUFNfMDAyZENoYXJzIj5NSVBTLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1NU1AtNDMwLTE1MDQiPnN0YXRlbWVudCBzZXBhcmF0b3IsIE1TUCA0MzA8L2E+OiA8YSBocmVmPSJNU1A0MzBfMDAyZENoYXJzLmh0bWwjTVNQNDMwXzAwMmRDaGFycyI+TVNQNDMwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTlMzMktfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLU5TMzJLLTE1MjgiPnN0YXRlbWVudCBzZXBhcmF0b3IsIE5TMzJLPC9hPjogPGEgaHJlZj0iTlMzMktfMDAyZENoYXJzLmh0bWwjTlMzMktfMDAyZENoYXJzIj5OUzMySy1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBKXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1QSi0xNjE5Ij5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBQSjwvYT46IDxhIGhyZWY9IlBKXzAwMmRDaGFycy5odG1sI1BKXzAwMmRDaGFycyI+UEotQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1Qb3dlclBDLTE2MzEiPnN0YXRlbWVudCBzZXBhcmF0b3IsIFBvd2VyUEM8L2E+OiA8YSBocmVmPSJQb3dlclBDXzAwMmRDaGFycy5odG1sI1Bvd2VyUENfMDAyZENoYXJzIj5Qb3dlclBDLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtUkw3OC0xNjQzIj5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBSTDc4PC9hPjogPGEgaHJlZj0iUkw3OF8wMDJkQ2hhcnMuaHRtbCNSTDc4XzAwMmRDaGFycyI+Ukw3OC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1SWC0xNjc1Ij5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBSWDwvYT46IDxhIGhyZWY9IlJYXzAwMmRDaGFycy5odG1sI1JYXzAwMmRDaGFycyI+UlgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzMzkwLUNoYXJhY3RlcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtczM5MC0xNjkxIj5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBzMzkwPC9hPjogPGEgaHJlZj0iczM5MC1DaGFyYWN0ZXJzLmh0bWwjczM5MC1DaGFyYWN0ZXJzIj5zMzkwIENoYXJhY3RlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTQ09SRV8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtU0NPUkUtMTcyOSI+c3RhdGVtZW50IHNlcGFyYXRvciwgU0NPUkU8L2E+OiA8YSBocmVmPSJTQ09SRV8wMDJkQ2hhcnMuaHRtbCNTQ09SRV8wMDJkQ2hhcnMiPlNDT1JFLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVNILTE3NDUiPnN0YXRlbWVudCBzZXBhcmF0b3IsIFNIPC9hPjogPGEgaHJlZj0iU0hfMDAyZENoYXJzLmh0bWwjU0hfMDAyZENoYXJzIj5TSC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNINjRfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVNINjQtMTc3NCI+c3RhdGVtZW50IHNlcGFyYXRvciwgU0g2NDwvYT46IDxhIGhyZWY9IlNINjRfMDAyZENoYXJzLmh0bWwjU0g2NF8wMDJkQ2hhcnMiPlNINjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtU3BhcmMtMTgyMCI+c3RhdGVtZW50IHNlcGFyYXRvciwgU3BhcmM8L2E+OiA8YSBocmVmPSJTcGFyY18wMDJkQ2hhcnMuaHRtbCNTcGFyY18wMDJkQ2hhcnMiPlNwYXJjLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRDaGFycy5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1USUM1NFgtMTk4OSI+c3RhdGVtZW50IHNlcGFyYXRvciwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRDaGFycy5odG1sI1RJQzU0WF8wMDJkQ2hhcnMiPlRJQzU0WC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLVN5bnRheC5odG1sI2luZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1USUM2WC0yMDA4Ij5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBUSUM2WDwvYT46IDxhIGhyZWY9IlRJQzZYLVN5bnRheC5odG1sI1RJQzZYLVN5bnRheCI+VElDNlggU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtVjg1MC0yMTgzIj5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBWODUwPC9hPjogPGEgaHJlZj0iVjg1MF8wMDJkQ2hhcnMuaHRtbCNWODUwXzAwMmRDaGFycyI+Vjg1MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtVkFYLTIxNjQiPnN0YXRlbWVudCBzZXBhcmF0b3IsIFZBWDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkQ2hhcnMuaHRtbCNWQVhfMDAyZENoYXJzIj5WQVgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYR0FURV8wMDJkU3ludGF4Lmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVhHQVRFLTIyNDEiPnN0YXRlbWVudCBzZXBhcmF0b3IsIFhHQVRFPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI1hHQVRFXzAwMmRTeW50YXgiPlhHQVRFLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhTdG9ybXkxNl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtWFN0b3JteTE2LTIyNjEiPnN0YXRlbWVudCBzZXBhcmF0b3IsIFhTdG9ybXkxNjwvYT46IDxhIGhyZWY9IlhTdG9ybXkxNl8wMDJkQ2hhcnMuaHRtbCNYU3Rvcm15MTZfMDAyZENoYXJzIj5YU3Rvcm15MTYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVo4MC0yMDYzIj5zdGF0ZW1lbnQgc2VwYXJhdG9yLCBaODA8L2E+OiA8YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjWjgwXzAwMmRDaGFycyI+WjgwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwMDBfMDAyZENoYXJzLmh0bWwjaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVo4MDAwLTIwODgiPnN0YXRlbWVudCBzZXBhcmF0b3IsIFo4MDAwPC9hPjogPGEgaHJlZj0iWjgwMDBfMDAyZENoYXJzLmh0bWwjWjgwMDBfMDAyZENoYXJzIj5aODAwMC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNpbmRleC1zdGF0ZW1lbnRzXzAwMmMtc3RydWN0dXJlLW9mLTEzMCI+c3RhdGVtZW50cywgc3RydWN0dXJlIG9mPC9hPjogPGEgaHJlZj0iU3RhdGVtZW50cy5odG1sI1N0YXRlbWVudHMiPlN0YXRlbWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdGF0aXN0aWNzLmh0bWwjaW5kZXgtc3RhdGlzdGljc18wMDJjLWFib3V0LWFzc2VtYmx5LTkzIj5zdGF0aXN0aWNzLCBhYm91dCBhc3NlbWJseTwvYT46IDxhIGhyZWY9InN0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzIj5zdGF0aXN0aWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWJvcnQuaHRtbCNpbmRleC1zdG9wcGluZy10aGUtYXNzZW1ibHktMjczIj5zdG9wcGluZyB0aGUgYXNzZW1ibHk8L2E+OiA8YSBocmVmPSJBYm9ydC5odG1sI0Fib3J0Ij5BYm9ydDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNpbmRleC1zdHJpbmctY29uc3RhbnRzLTE0MiI+c3RyaW5nIGNvbnN0YW50czwvYT46IDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5nLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJpbmdfMDA3ZC1kaXJlY3RpdmUtNDc1Ij48Y29kZT5zdHJpbmc8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlN0cmluZy5odG1sI1N0cmluZyI+U3RyaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJpbmdfMDA3ZC1kaXJlY3RpdmUtb24tSFBQQS04OTMiPjxjb2RlPnN0cmluZzwvY29kZT4gZGlyZWN0aXZlIG9uIEhQUEE8L2E+OiA8YSBocmVmPSJIUFBBLURpcmVjdGl2ZXMuaHRtbCNIUFBBLURpcmVjdGl2ZXMiPkhQUEEgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3RyaW5nXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NTUiPjxjb2RlPnN0cmluZzwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXNjaWkuaHRtbCNpbmRleC1zdHJpbmctbGl0ZXJhbHMtMjgyIj5zdHJpbmcgbGl0ZXJhbHM8L2E+OiA8YSBocmVmPSJBc2NpaS5odG1sI0FzY2lpIj5Bc2NpaTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZy5odG1sI2luZGV4LXN0cmluZ18wMDJjLWNvcHlpbmctdG8tb2JqZWN0LWZpbGUtNDcwIj5zdHJpbmcsIGNvcHlpbmcgdG8gb2JqZWN0IGZpbGU8L2E+OiA8YSBocmVmPSJTdHJpbmcuaHRtbCNTdHJpbmciPlN0cmluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3RyaW5nMTZfMDA3ZC1kaXJlY3RpdmUtNDc3Ij48Y29kZT5zdHJpbmcxNjwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iU3RyaW5nLmh0bWwjU3RyaW5nIj5TdHJpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmcuaHRtbCNpbmRleC1zdHJpbmcxNl8wMDJjLWNvcHlpbmctdG8tb2JqZWN0LWZpbGUtNDcyIj5zdHJpbmcxNiwgY29weWluZyB0byBvYmplY3QgZmlsZTwvYT46IDxhIGhyZWY9IlN0cmluZy5odG1sI1N0cmluZyI+U3RyaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5nLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJpbmczMl8wMDdkLWRpcmVjdGl2ZS00NzgiPjxjb2RlPnN0cmluZzMyPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJTdHJpbmcuaHRtbCNTdHJpbmciPlN0cmluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZy5odG1sI2luZGV4LXN0cmluZzMyXzAwMmMtY29weWluZy10by1vYmplY3QtZmlsZS00NzMiPnN0cmluZzMyLCBjb3B5aW5nIHRvIG9iamVjdCBmaWxlPC9hPjogPGEgaHJlZj0iU3RyaW5nLmh0bWwjU3RyaW5nIj5TdHJpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmcuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0cmluZzY0XzAwN2QtZGlyZWN0aXZlLTQ3OSI+PGNvZGU+c3RyaW5nNjQ8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlN0cmluZy5odG1sI1N0cmluZyI+U3RyaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5nLmh0bWwjaW5kZXgtc3RyaW5nNjRfMDAyYy1jb3B5aW5nLXRvLW9iamVjdC1maWxlLTQ3NCI+c3RyaW5nNjQsIGNvcHlpbmcgdG8gb2JqZWN0IGZpbGU8L2E+OiA8YSBocmVmPSJTdHJpbmcuaHRtbCNTdHJpbmciPlN0cmluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3RyaW5nOF8wMDdkLWRpcmVjdGl2ZS00NzYiPjxjb2RlPnN0cmluZzg8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlN0cmluZy5odG1sI1N0cmluZyI+U3RyaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RyaW5nLmh0bWwjaW5kZXgtc3RyaW5nOF8wMDJjLWNvcHlpbmctdG8tb2JqZWN0LWZpbGUtNDcxIj5zdHJpbmc4LCBjb3B5aW5nIHRvIG9iamVjdCBmaWxlPC9hPjogPGEgaHJlZj0iU3RyaW5nLmh0bWwjU3RyaW5nIj5TdHJpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJ1Y3QuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0cnVjdF8wMDdkLWRpcmVjdGl2ZS00ODAiPjxjb2RlPnN0cnVjdDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iU3RydWN0Lmh0bWwjU3RydWN0Ij5TdHJ1Y3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0cnVjdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTU3Ij48Y29kZT5zdHJ1Y3Q8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRhZy5odG1sI2luZGV4LXN0cnVjdHVyZS1kZWJ1Z2dpbmdfMDAyYy1DT0ZGLTQ4NyI+c3RydWN0dXJlIGRlYnVnZ2luZywgQ09GRjwvYT46IDxhIGhyZWY9IlRhZy5odG1sI1RhZyI+VGFnPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zdWJfMDAyZGluc3RydWN0aW9uLW9yZGVyaW5nXzAwMmMtRDEwVi04MDkiPnN1Yi1pbnN0cnVjdGlvbiBvcmRlcmluZywgRDEwVjwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZENoYXJzLmh0bWwjRDEwVl8wMDJkQ2hhcnMiPkQxMFYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRDaGFycy5odG1sI2luZGV4LXN1Yl8wMDJkaW5zdHJ1Y3Rpb24tb3JkZXJpbmdfMDAyYy1EMzBWLTgzNiI+c3ViLWluc3RydWN0aW9uIG9yZGVyaW5nLCBEMzBWPC9hPjogPGEgaHJlZj0iRDMwVl8wMDJkQ2hhcnMuaHRtbCNEMzBWXzAwMmRDaGFycyI+RDMwVi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZFN1YnMuaHRtbCNpbmRleC1zdWJfMDAyZGluc3RydWN0aW9uc18wMDJjLUQxMFYtODA2Ij5zdWItaW5zdHJ1Y3Rpb25zLCBEMTBWPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkU3Vicy5odG1sI0QxMFZfMDAyZFN1YnMiPkQxMFYtU3ViczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZFN1YnMuaHRtbCNpbmRleC1zdWJfMDAyZGluc3RydWN0aW9uc18wMDJjLUQzMFYtODMzIj5zdWItaW5zdHJ1Y3Rpb25zLCBEMzBWPC9hPjogPGEgaHJlZj0iRDMwVl8wMDJkU3Vicy5odG1sI0QzMFZfMDAyZFN1YnMiPkQzMFYtU3ViczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50cy5odG1sI2luZGV4LXN1YmV4cHJlc3Npb25zLTI1MiI+c3ViZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJBcmd1bWVudHMuaHRtbCNBcmd1bWVudHMiPkFyZ3VtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN1YlNlY3Rpb24uaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN1YnNlY3Rpb25fMDA3ZC1kaXJlY3RpdmUtNDgxIj48Y29kZT5zdWJzZWN0aW9uPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiI+U3ViU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjaW5kZXgtc3Vic3ltLWJ1aWx0aW5zXzAwMmMtVElDNTRYLTE5NjkiPnN1YnN5bSBidWlsdGlucywgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNidHRsLmh0bWwjaW5kZXgtc3VidGl0bGVzLWZvci1saXN0aW5ncy00NDQiPnN1YnRpdGxlcyBmb3IgbGlzdGluZ3M8L2E+OiA8YSBocmVmPSJTYnR0bC5odG1sI1NidHRsIj5TYnR0bDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluZml4LU9wcy5odG1sI2luZGV4LXN1YnRyYWN0aW9uXzAwMmMtcGVybWl0dGVkLWFyZ3VtZW50cy0yNjQiPnN1YnRyYWN0aW9uLCBwZXJtaXR0ZWQgYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iSW5maXgtT3BzLmh0bWwjSW5maXgtT3BzIj5JbmZpeCBPcHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LXN1bW1hcnktb2Ytb3B0aW9ucy0zIj5zdW1tYXJ5IG9mIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhQUEFfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LXN1cHBvcnQtODg2Ij5zdXBwb3J0PC9hPjogPGEgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50Ij5IUFBBLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY2x1ZGUuaHRtbCNpbmRleC1zdXBwb3J0aW5nLWZpbGVzXzAwMmMtaW5jbHVkaW5nLTM3MyI+c3VwcG9ydGluZyBmaWxlcywgaW5jbHVkaW5nPC9hPjogPGEgaHJlZj0iSW5jbHVkZS5odG1sI0luY2x1ZGUiPkluY2x1ZGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXLmh0bWwjaW5kZXgtc3VwcHJlc3Npbmctd2FybmluZ3MtMTAzIj5zdXBwcmVzc2luZyB3YXJuaW5nczwvYT46IDxhIGhyZWY9IlcuaHRtbCNXIj5XPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI2luZGV4LXN2YWwtMjEwNSI+PGNvZGU+c3ZhbDwvY29kZT48L2E+OiA8YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjWjgwMDAtRGlyZWN0aXZlcyI+WjgwMDAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtc3ltYm9sLWF0dHJpYnV0ZXMtMjI1Ij5zeW1ib2wgYXR0cmlidXRlczwvYT46IDxhIGhyZWY9IlN5bWJvbC1BdHRyaWJ1dGVzLmh0bWwjU3ltYm9sLUF0dHJpYnV0ZXMiPlN5bWJvbCBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYV8wMDJlb3V0LVN5bWJvbHMuaHRtbCNpbmRleC1zeW1ib2wtYXR0cmlidXRlc18wMDJjLV8wMDQwY29kZV8wMDdiYV8wMDJlb3V0XzAwN2QtMjMyIj5zeW1ib2wgYXR0cmlidXRlcywgPGNvZGU+YS5vdXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iYV8wMDJlb3V0LVN5bWJvbHMuaHRtbCNhXzAwMmVvdXQtU3ltYm9scyI+YS5vdXQgU3ltYm9sczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPRkYtU3ltYm9scy5odG1sI2luZGV4LXN5bWJvbC1hdHRyaWJ1dGVzXzAwMmMtQ09GRi0yMzYiPnN5bWJvbCBhdHRyaWJ1dGVzLCBDT0ZGPC9hPjogPGEgaHJlZj0iQ09GRi1TeW1ib2xzLmh0bWwjQ09GRi1TeW1ib2xzIj5DT0ZGIFN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTT00tU3ltYm9scy5odG1sI2luZGV4LXN5bWJvbC1hdHRyaWJ1dGVzXzAwMmMtU09NLTI0MCI+c3ltYm9sIGF0dHJpYnV0ZXMsIFNPTTwvYT46IDxhIGhyZWY9IlNPTS1TeW1ib2xzLmh0bWwjU09NLVN5bWJvbHMiPlNPTSBTeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVzYy5odG1sI2luZGV4LXN5bWJvbC1kZXNjcmlwdG9yXzAwMmMtQ09GRi0zMTAiPnN5bWJvbCBkZXNjcmlwdG9yLCBDT0ZGPC9hPjogPGEgaHJlZj0iRGVzYy5odG1sI0Rlc2MiPkRlc2M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRNb2RpZmllcnMuaHRtbCNpbmRleC1zeW1ib2wtbW9kaWZpZXJzLTEzMjUiPnN5bWJvbCBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmRNb2RpZmllcnMuaHRtbCNNNjhIQzExXzAwMmRNb2RpZmllcnMiPk02OEhDMTEtTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQ18wMDJkTW9kaWZpZXJzLmh0bWwjaW5kZXgtc3ltYm9sLW1vZGlmaWVycy0xMTgyIj5zeW1ib2wgbW9kaWZpZXJzPC9hPjogPGEgaHJlZj0iTTMyQ18wMDJkTW9kaWZpZXJzLmh0bWwjTTMyQ18wMDJkTW9kaWZpZXJzIj5NMzJDLU1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzJfMDAyZE1vZGlmaWVycy5odG1sI2luZGV4LXN5bWJvbC1tb2RpZmllcnMtMTE2MSI+c3ltYm9sIG1vZGlmaWVyczwvYT46IDxhIGhyZWY9IkxNMzJfMDAyZE1vZGlmaWVycy5odG1sI0xNMzJfMDAyZE1vZGlmaWVycyI+TE0zMi1Nb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlJfMDAyZE1vZGlmaWVycy5odG1sI2luZGV4LXN5bWJvbC1tb2RpZmllcnMtNzIxIj5zeW1ib2wgbW9kaWZpZXJzPC9hPjogPGEgaHJlZj0iQVZSXzAwMmRNb2RpZmllcnMuaHRtbCNBVlJfMDAyZE1vZGlmaWVycyI+QVZSLU1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LU1vZGlmaWVycy5odG1sI2luZGV4LXN5bWJvbC1tb2RpZmllcnNfMDAyYy1USUxFXzAwMmRHeC0yMDM0Ij5zeW1ib2wgbW9kaWZpZXJzLCBUSUxFLUd4PC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtTW9kaWZpZXJzLmh0bWwjVElMRV8wMDJkR3gtTW9kaWZpZXJzIj5USUxFLUd4IE1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tTW9kaWZpZXJzLmh0bWwjaW5kZXgtc3ltYm9sLW1vZGlmaWVyc18wMDJjLVRJTEVQcm8tMjA0OCI+c3ltYm9sIG1vZGlmaWVycywgVElMRVBybzwvYT46IDxhIGhyZWY9IlRJTEVQcm8tTW9kaWZpZXJzLmh0bWwjVElMRVByby1Nb2RpZmllcnMiPlRJTEVQcm8gTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjaW5kZXgtc3ltYm9sLW5hbWVzLTIxMyI+c3ltYm9sIG5hbWVzPC9hPjogPGEgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjU3ltYm9sLU5hbWVzIj5TeW1ib2wgTmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSDY0XzAwMmRDaGFycy5odG1sI2luZGV4LXN5bWJvbC1uYW1lc18wMDJjLV8wMDQwc2FtcF8wMDdiXzAwMjRfMDA3ZC1pbi0xNzc2Ij5zeW1ib2wgbmFtZXMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbjwvYT46IDxhIGhyZWY9IlNINjRfMDAyZENoYXJzLmh0bWwjU0g2NF8wMDJkQ2hhcnMiPlNINjQtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy1fMDA0MHNhbXBfMDA3Yl8wMDI0XzAwN2QtaW4tMTc0NyI+c3ltYm9sIG5hbWVzLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW48L2E+OiA8YSBocmVmPSJTSF8wMDJkQ2hhcnMuaHRtbCNTSF8wMDJkQ2hhcnMiPlNILUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy1fMDA0MHNhbXBfMDA3Yl8wMDI0XzAwN2QtaW4tODM4Ij5zeW1ib2wgbmFtZXMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbjwvYT46IDxhIGhyZWY9IkQzMFZfMDAyZENoYXJzLmh0bWwjRDMwVl8wMDJkQ2hhcnMiPkQzMFYtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRDaGFycy5odG1sI2luZGV4LXN5bWJvbC1uYW1lc18wMDJjLV8wMDQwc2FtcF8wMDdiXzAwMjRfMDA3ZC1pbi04MTEiPnN5bWJvbCBuYW1lcywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluPC9hPjogPGEgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyI+RDEwVi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1OYW1lcy5odG1sI2luZGV4LXN5bWJvbC1uYW1lc18wMDJjLWxvY2FsLTIxNiI+c3ltYm9sIG5hbWVzLCBsb2NhbDwvYT46IDxhIGhyZWY9IlN5bWJvbC1OYW1lcy5odG1sI1N5bWJvbC1OYW1lcyI+U3ltYm9sIE5hbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjaW5kZXgtc3ltYm9sLW5hbWVzXzAwMmMtdGVtcG9yYXJ5LTIxOSI+c3ltYm9sIG5hbWVzLCB0ZW1wb3Jhcnk8L2E+OiA8YSBocmVmPSJTeW1ib2wtTmFtZXMuaHRtbCNTeW1ib2wtTmFtZXMiPlN5bWJvbCBOYW1lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjbC5odG1sI2luZGV4LXN5bWJvbC1zdG9yYWdlLWNsYXNzLV8wMDI4Q09GRl8wMDI5LTQ0NyI+c3ltYm9sIHN0b3JhZ2UgY2xhc3MgKENPRkYpPC9hPjogPGEgaHJlZj0iU2NsLmh0bWwjU2NsIj5TY2w8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2wtVHlwZS5odG1sI2luZGV4LXN5bWJvbC10eXBlLTIzMCI+c3ltYm9sIHR5cGU8L2E+OiA8YSBocmVmPSJTeW1ib2wtVHlwZS5odG1sI1N5bWJvbC1UeXBlIj5TeW1ib2wgVHlwZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlR5cGUuaHRtbCNpbmRleC1zeW1ib2wtdHlwZV8wMDJjLUNPRkYtNDkzIj5zeW1ib2wgdHlwZSwgQ09GRjwvYT46IDxhIGhyZWY9IlR5cGUuaHRtbCNUeXBlIj5UeXBlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVHlwZS5odG1sI2luZGV4LXN5bWJvbC10eXBlXzAwMmMtRUxGLTQ5NiI+c3ltYm9sIHR5cGUsIEVMRjwvYT46IDxhIGhyZWY9IlR5cGUuaHRtbCNUeXBlIj5UeXBlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLVZhbHVlLmh0bWwjaW5kZXgtc3ltYm9sLXZhbHVlLTIyOCI+c3ltYm9sIHZhbHVlPC9hPjogPGEgaHJlZj0iU3ltYm9sLVZhbHVlLmh0bWwjU3ltYm9sLVZhbHVlIj5TeW1ib2wgVmFsdWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTZXQuaHRtbCNpbmRleC1zeW1ib2wtdmFsdWVfMDAyYy1zZXR0aW5nLTQ1NCI+c3ltYm9sIHZhbHVlLCBzZXR0aW5nPC9hPjogPGEgaHJlZj0iU2V0Lmh0bWwjU2V0Ij5TZXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTZXR0aW5nLVN5bWJvbHMuaHRtbCNpbmRleC1zeW1ib2wtdmFsdWVzXzAwMmMtYXNzaWduaW5nLTIxMiI+c3ltYm9sIHZhbHVlcywgYXNzaWduaW5nPC9hPjogPGEgaHJlZj0iU2V0dGluZy1TeW1ib2xzLmh0bWwjU2V0dGluZy1TeW1ib2xzIj5TZXR0aW5nIFN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW12ZXIuaHRtbCNpbmRleC1zeW1ib2wtdmVyc2lvbmluZy00ODQiPnN5bWJvbCB2ZXJzaW9uaW5nPC9hPjogPGEgaHJlZj0iU3ltdmVyLmh0bWwjU3ltdmVyIj5TeW12ZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21tLmh0bWwjaW5kZXgtc3ltYm9sXzAwMmMtY29tbW9uLTMwMyI+c3ltYm9sLCBjb21tb248L2E+OiA8YSBocmVmPSJDb21tLmh0bWwjQ29tbSI+Q29tbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikdsb2JhbC5odG1sI2luZGV4LXN5bWJvbF8wMDJjLW1ha2luZy12aXNpYmxlLXRvLWxpbmtlci0zNDUiPnN5bWJvbCwgbWFraW5nIHZpc2libGUgdG8gbGlua2VyPC9hPjogPGEgaHJlZj0iR2xvYmFsLmh0bWwjR2xvYmFsIj5HbG9iYWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFiLmh0bWwjaW5kZXgtc3ltYm9saWMtZGVidWdnZXJzXzAwMmMtaW5mb3JtYXRpb24tZm9yLTQ2NSI+c3ltYm9saWMgZGVidWdnZXJzLCBpbmZvcm1hdGlvbiBmb3I8L2E+OiA8YSBocmVmPSJTdGFiLmh0bWwjU3RhYiI+U3RhYjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbHMuaHRtbCNpbmRleC1zeW1ib2xzLTIwOCI+c3ltYm9sczwvYT46IDxhIGhyZWY9IlN5bWJvbHMuaHRtbCNTeW1ib2xzIj5TeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJU18wMDJkUGljLmh0bWwjaW5kZXgtU3ltYm9scy1pbi1wb3NpdGlvbl8wMDJkaW5kZXBlbmRlbnQtY29kZV8wMDJjLUNSSVMtNzc3Ij5TeW1ib2xzIGluIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUsIENSSVM8L2E+OiA8YSBocmVmPSJDUklTXzAwMmRQaWMuaHRtbCNDUklTXzAwMmRQaWMiPkNSSVMtUGljPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjaW5kZXgtc3ltYm9scy13aXRoLXVwcGVyY2FzZV8wMDJjLVZBWF8wMDJmVk1TLTIxMjciPnN5bWJvbHMgd2l0aCB1cHBlcmNhc2UsIFZBWC9WTVM8L2E+OiA8YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNWQVhfMDAyZE9wdHMiPlZBWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXF1Lmh0bWwjaW5kZXgtc3ltYm9sc18wMDJjLWFzc2lnbmluZy12YWx1ZXMtdG8tMzI4Ij5zeW1ib2xzLCBhc3NpZ25pbmcgdmFsdWVzIHRvPC9hPjogPGEgaHJlZj0iRXF1Lmh0bWwjRXF1Ij5FcXU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRTeW1ib2xzLmh0bWwjaW5kZXgtU3ltYm9sc18wMDJjLWJ1aWx0XzAwMmRpbl8wMDJjLUNSSVMtNzcxIj5TeW1ib2xzLCBidWlsdC1pbiwgQ1JJUzwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFN5bWJvbHMuaHRtbCNDUklTXzAwMmRTeW1ib2xzIj5DUklTLVN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRTeW1ib2xzLmh0bWwjaW5kZXgtU3ltYm9sc18wMDJjLUNSSVNfMDAyYy1idWlsdF8wMDJkaW4tNzcyIj5TeW1ib2xzLCBDUklTLCBidWlsdC1pbjwvYT46IDxhIGhyZWY9IkNSSVNfMDAyZFN5bWJvbHMuaHRtbCNDUklTXzAwMmRTeW1ib2xzIj5DUklTLVN5bWJvbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMY29tbS5odG1sI2luZGV4LXN5bWJvbHNfMDAyYy1sb2NhbC1jb21tb24tMzgzIj5zeW1ib2xzLCBsb2NhbCBjb21tb248L2E+OiA8YSBocmVmPSJMY29tbS5odG1sI0xjb21tIj5MY29tbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bXZlci5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3ltdmVyXzAwN2QtZGlyZWN0aXZlLTQ4MyI+PGNvZGU+c3ltdmVyPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJTeW12ZXIuaHRtbCNTeW12ZXIiPlN5bXZlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC1zeW50YXgtY29tcGF0aWJpbGl0eV8wMDJjLWkzODYtOTM4Ij5zeW50YXggY29tcGF0aWJpbGl0eSwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpMzg2XzAwMmRWYXJpYXRpb25zIj5pMzg2LVZhcmlhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgtc3ludGF4LWNvbXBhdGliaWxpdHlfMDAyYy14ODZfMDAyZDY0LTk0NCI+c3ludGF4IGNvbXBhdGliaWxpdHksIHg4Ni02NDwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpMzg2XzAwMmRWYXJpYXRpb25zIj5pMzg2LVZhcmlhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlJfMDAyZE1vZGlmaWVycy5odG1sI2luZGV4LXN5bnRheF8wMDJjLUFWUi03MjAiPnN5bnRheCwgQVZSPC9hPjogPGEgaHJlZj0iQVZSXzAwMmRNb2RpZmllcnMuaHRtbCNBVlJfMDAyZE1vZGlmaWVycyI+QVZSLU1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLVN5bnRheC5odG1sI2luZGV4LXN5bnRheF8wMDJjLUJsYWNrZmluLTczNCI+c3ludGF4LCBCbGFja2ZpbjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLVN5bnRheC5odG1sI0JsYWNrZmluLVN5bnRheCI+QmxhY2tmaW4gU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkU3ludGF4Lmh0bWwjaW5kZXgtc3ludGF4XzAwMmMtRDEwVi04MDIiPnN5bnRheCwgRDEwVjwvYT46IDxhIGhyZWY9IkQxMFZfMDAyZFN5bnRheC5odG1sI0QxMFZfMDAyZFN5bnRheCI+RDEwVi1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNpbmRleC1zeW50YXhfMDAyYy1EMzBWLTgyOSI+c3ludGF4LCBEMzBWPC9hPjogPGEgaHJlZj0iRDMwVl8wMDJkU3ludGF4Lmh0bWwjRDMwVl8wMDJkU3ludGF4Ij5EMzBWLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzJfMDAyZE1vZGlmaWVycy5odG1sI2luZGV4LXN5bnRheF8wMDJjLUxNMzItMTE2MCI+c3ludGF4LCBMTTMyPC9hPjogPGEgaHJlZj0iTE0zMl8wMDJkTW9kaWZpZXJzLmh0bWwjTE0zMl8wMDJkTW9kaWZpZXJzIj5MTTMyLU1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZFN5bnRheC5odG1sI2luZGV4LXN5bnRheF8wMDJjLU02ODB4MC0xMjU5Ij5zeW50YXgsIE02ODB4MDwvYT46IDxhIGhyZWY9Ik02OEtfMDAyZFN5bnRheC5odG1sI002OEtfMDAyZFN5bnRheCI+TTY4Sy1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRNb2RpZmllcnMuaHRtbCNpbmRleC1zeW50YXhfMDAyYy1NNjhIQzExLTEzMjQiPnN5bnRheCwgTTY4SEMxMTwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZE1vZGlmaWVycy5odG1sI002OEhDMTFfMDAyZE1vZGlmaWVycyI+TTY4SEMxMS1Nb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNpbmRleC1zeW50YXhfMDAyYy1NNjhIQzExLTEzMTUiPnN5bnRheCwgTTY4SEMxMTwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI002OEhDMTFfMDAyZFN5bnRheCI+TTY4SEMxMS1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW50YXguaHRtbCNpbmRleC1zeW50YXhfMDAyYy1tYWNoaW5lXzAwMmRpbmRlcGVuZGVudC0xMTMiPnN5bnRheCwgbWFjaGluZS1pbmRlcGVuZGVudDwvYT46IDxhIGhyZWY9IlN5bnRheC5odG1sI1N5bnRheCI+U3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkTW9kaWZpZXJzLmh0bWwjaW5kZXgtc3ludGF4XzAwMmMtUkw3OC0xNjM3Ij5zeW50YXgsIFJMNzg8L2E+OiA8YSBocmVmPSJSTDc4XzAwMmRNb2RpZmllcnMuaHRtbCNSTDc4XzAwMmRNb2RpZmllcnMiPlJMNzgtTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZE1vZGlmaWVycy5odG1sI2luZGV4LXN5bnRheF8wMDJjLVJYLTE2NTgiPnN5bnRheCwgUlg8L2E+OiA8YSBocmVmPSJSWF8wMDJkTW9kaWZpZXJzLmh0bWwjUlhfMDAyZE1vZGlmaWVycyI+UlgtTW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEuaHRtbCNpbmRleC1zeW50YXhfMDAyYy1TUEFSQy0xODE2Ij5zeW50YXgsIFNQQVJDPC9hPjogPGEgaHJlZj0iU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEuaHRtbCNTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YSI+U3BhcmMtQWxpZ25lZC1EYXRhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwjaW5kZXgtc3ludGF4XzAwMmMtVElMRV8wMDJkR3gtMjAyOCI+c3ludGF4LCBUSUxFLUd4PC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwjVElMRV8wMDJkR3gtU3ludGF4Ij5USUxFLUd4IFN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tU3ludGF4Lmh0bWwjaW5kZXgtc3ludGF4XzAwMmMtVElMRVByby0yMDQyIj5zeW50YXgsIFRJTEVQcm88L2E+OiA8YSBocmVmPSJUSUxFUHJvLVN5bnRheC5odG1sI1RJTEVQcm8tU3ludGF4Ij5USUxFUHJvIFN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRTeW50YXguaHRtbCNpbmRleC1zeW50YXhfMDAyYy1YR0FURS0yMjM3Ij5zeW50YXgsIFhHQVRFPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI1hHQVRFXzAwMmRTeW50YXgiPlhHQVRFLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNpbmRleC1zeW50YXhfMDAyYy1YdGVuc2EtYXNzZW1ibGVyLTIyODQiPnN5bnRheCwgWHRlbnNhIGFzc2VtYmxlcjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNYdGVuc2EtU3ludGF4Ij5YdGVuc2EgU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0aXZlc18wMDJkaTk2MC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3lzcHJvY18wMDdkLWRpcmVjdGl2ZV8wMDJjLWk5NjAtMTEwMSI+PGNvZGU+c3lzcHJvYzwvY29kZT4gZGlyZWN0aXZlLCBpOTYwPC9hPjogPGEgaHJlZj0iRGlyZWN0aXZlc18wMDJkaTk2MC5odG1sI0RpcmVjdGl2ZXNfMDAyZGk5NjAiPkRpcmVjdGl2ZXMtaTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNpbmRleC10YWItXzAwMjhfMDA0MGNvZGVfMDA3Yl8wMDVjdF8wMDdkXzAwMjktMTU1Ij50YWIgKDxjb2RlPlx0PC9jb2RlPik8L2E+OiA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFiXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NjAiPjxjb2RlPnRhYjwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVGFnLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YWdfMDA3ZC1kaXJlY3RpdmUtNDg4Ij48Y29kZT50YWc8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlRhZy5odG1sI1RhZyI+VGFnPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YWdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk1OCI+PGNvZGU+dGFnPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRUQk0uaHRtbCNpbmRleC1UQk1fMDAyYy1pMzg2LTEwNTAiPlRCTSwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFRCTS5odG1sI2kzODZfMDAyZFRCTSI+aTM4Ni1UQk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRUQk0uaHRtbCNpbmRleC1UQk1fMDAyYy14ODZfMDAyZDY0LTEwNTEiPlRCTSwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVEJNLmh0bWwjaTM4Nl8wMDJkVEJNIj5pMzg2LVRCTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGRhb2ZmXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVY4NTAtMjIyMiI+PGNvZGU+dGRhb2ZmPC9jb2RlPiBwc2V1ZG8tb3AsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNWODUwLU9wY29kZXMiPlY4NTAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1OYW1lcy5odG1sI2luZGV4LXRlbXBvcmFyeS1zeW1ib2wtbmFtZXMtMjE4Ij50ZW1wb3Jhcnkgc3ltYm9sIG5hbWVzPC9hPjogPGEgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjU3ltYm9sLU5hbWVzIj5TeW1ib2wgTmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSLmh0bWwjaW5kZXgtdGV4dC1hbmQtZGF0YS1zZWN0aW9uc18wMDJjLWpvaW5pbmctODkiPnRleHQgYW5kIGRhdGEgc2VjdGlvbnMsIGpvaW5pbmc8L2E+OiA8YSBocmVmPSJSLmh0bWwjUiI+UjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRleHQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRleHRfMDA3ZC1kaXJlY3RpdmUtNDg5Ij48Y29kZT50ZXh0PC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJUZXh0Lmh0bWwjVGV4dCI+VGV4dDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxkLVNlY3Rpb25zLmh0bWwjaW5kZXgtdGV4dC1zZWN0aW9uLTE5NCI+dGV4dCBzZWN0aW9uPC9hPjogPGEgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNMZC1TZWN0aW9ucyI+TGQgU2VjdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDI3Ij48Y29kZT50ZmxvYXQ8L2NvZGU+IGRpcmVjdGl2ZSwgaTM4NjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaTM4Nl8wMDJkRmxvYXQiPmkzODYtRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMteDg2XzAwMmQ2NC0xMDMxIj48Y29kZT50ZmxvYXQ8L2NvZGU+IGRpcmVjdGl2ZSwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTV8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtVGh1bWItc3VwcG9ydC02MTIiPlRodW1iIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50Ij5BUk0tRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtVGh1bWItc3VwcG9ydC01MTYiPlRodW1iIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJBQXJjaDY0XzAwMmREZXBlbmRlbnQuaHRtbCNBQXJjaDY0XzAwMmREZXBlbmRlbnQiPkFBcmNoNjQtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI2luZGV4LVRJQzU0WC1idWlsdGluLW1hdGgtZnVuY3Rpb25zLTE4NTkiPlRJQzU0WCBidWlsdGluIG1hdGggZnVuY3Rpb25zPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiPlRJQzU0WC1CdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1USUM1NFgtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xOTg3Ij5USUM1NFggbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQ2hhcnMuaHRtbCNUSUM1NFhfMDAyZENoYXJzIj5USUM1NFgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZENoYXJzLmh0bWwjaW5kZXgtVElDNTRYLWxpbmUtc2VwYXJhdG9yLTE5OTAiPlRJQzU0WCBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkQ2hhcnMuaHRtbCNUSUM1NFhfMDAyZENoYXJzIj5USUM1NFgtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1USUM1NFgtbWFjaGluZS1kaXJlY3RpdmVzLTE4OTAiPlRJQzU0WCBtYWNoaW5lIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRNTVJlZ3MuaHRtbCNpbmRleC1USUM1NFgtbWVtb3J5XzAwMmRtYXBwZWQtcmVnaXN0ZXJzLTE5ODMiPlRJQzU0WCBtZW1vcnktbWFwcGVkIHJlZ2lzdGVyczwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkTU1SZWdzLmh0bWwjVElDNTRYXzAwMmRNTVJlZ3MiPlRJQzU0WC1NTVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE9wdHMuaHRtbCNpbmRleC1USUM1NFgtb3B0aW9ucy0xODQ3Ij5USUM1NFggb3B0aW9uczwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkT3B0cy5odG1sI1RJQzU0WF8wMDJkT3B0cyI+VElDNTRYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI2luZGV4LVRJQzU0WC1zdWJzeW0tYnVpbHRpbnMtMTk3MCI+VElDNTRYIHN1YnN5bSBidWlsdGluczwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjVElDNTRYXzAwMmRNYWNyb3MiPlRJQzU0WC1NYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVRJQzU0WC1zdXBwb3J0LTE4NDUiPlRJQzU0WCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjaW5kZXgtVElDNTRYXzAwMmRzcGVjaWZpYy1tYWNyb3MtMTk2NyI+VElDNTRYLXNwZWNpZmljIG1hY3JvczwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjVElDNTRYXzAwMmRNYWNyb3MiPlRJQzU0WC1NYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjaW5kZXgtVElDNlgtYmlnXzAwMmRlbmRpYW4tb3V0cHV0LTIwMDEiPlRJQzZYIGJpZy1lbmRpYW4gb3V0cHV0PC9hPjogPGEgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI1RJQzZYLU9wdGlvbnMiPlRJQzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1TeW50YXguaHRtbCNpbmRleC1USUM2WC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIwMDYiPlRJQzZYIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJUSUM2WC1TeW50YXguaHRtbCNUSUM2WC1TeW50YXgiPlRJQzZYIFN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzZYLVN5bnRheC5odG1sI2luZGV4LVRJQzZYLWxpbmUtc2VwYXJhdG9yLTIwMDkiPlRJQzZYIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iVElDNlgtU3ludGF4Lmh0bWwjVElDNlgtU3ludGF4Ij5USUM2WCBTeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjaW5kZXgtVElDNlgtbGl0dGxlXzAwMmRlbmRpYW4tb3V0cHV0LTIwMDIiPlRJQzZYIGxpdHRsZS1lbmRpYW4gb3V0cHV0PC9hPjogPGEgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI1RJQzZYLU9wdGlvbnMiPlRJQzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtVElDNlgtbWFjaGluZS1kaXJlY3RpdmVzLTIwMTEiPlRJQzZYIG1hY2hpbmUgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IlRJQzZYLURpcmVjdGl2ZXMuaHRtbCNUSUM2WC1EaXJlY3RpdmVzIj5USUM2WCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI2luZGV4LVRJQzZYLW9wdGlvbnMtMTk5MyI+VElDNlggb3B0aW9uczwvYT46IDxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNUSUM2WC1PcHRpb25zIj5USUM2WCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVRJQzZYLXN1cHBvcnQtMTk5MSI+VElDNlggc3VwcG9ydDwvYT46IDxhIGhyZWY9IlRJQzZYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM2WF8wMDJkRGVwZW5kZW50Ij5USUM2WC1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtVElMRV8wMDJkR3gtbWFjaGluZS1kaXJlY3RpdmVzLTIwMzYiPlRJTEUtR3ggbWFjaGluZSBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtRGlyZWN0aXZlcy5odG1sI1RJTEVfMDAyZEd4LURpcmVjdGl2ZXMiPlRJTEUtR3ggRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LU1vZGlmaWVycy5odG1sI2luZGV4LVRJTEVfMDAyZEd4LW1vZGlmaWVycy0yMDMzIj5USUxFLUd4IG1vZGlmaWVyczwvYT46IDxhIGhyZWY9IlRJTEVfMDAyZEd4LU1vZGlmaWVycy5odG1sI1RJTEVfMDAyZEd4LU1vZGlmaWVycyI+VElMRS1HeCBNb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1PcGNvZGVzLmh0bWwjaW5kZXgtVElMRV8wMDJkR3gtb3Bjb2RlLW5hbWVzLTIwMjkiPlRJTEUtR3ggb3Bjb2RlIG5hbWVzPC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtT3Bjb2Rlcy5odG1sI1RJTEVfMDAyZEd4LU9wY29kZXMiPlRJTEUtR3ggT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LVJlZ2lzdGVycy5odG1sI2luZGV4LVRJTEVfMDAyZEd4LXJlZ2lzdGVyLW5hbWVzLTIwMzEiPlRJTEUtR3ggcmVnaXN0ZXIgbmFtZXM8L2E+OiA8YSBocmVmPSJUSUxFXzAwMmRHeC1SZWdpc3RlcnMuaHRtbCNUSUxFXzAwMmRHeC1SZWdpc3RlcnMiPlRJTEUtR3ggUmVnaXN0ZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVRJTEVfMDAyZEd4LXN1cHBvcnQtMjAyMiI+VElMRS1HeCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sI1RJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQiPlRJTEUtR3gtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwjaW5kZXgtVElMRV8wMDJkR3gtc3ludGF4LTIwMjciPlRJTEUtR3ggc3ludGF4PC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwjVElMRV8wMDJkR3gtU3ludGF4Ij5USUxFLUd4IFN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tRGlyZWN0aXZlcy5odG1sI2luZGV4LVRJTEVQcm8tbWFjaGluZS1kaXJlY3RpdmVzLTIwNTAiPlRJTEVQcm8gbWFjaGluZSBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iVElMRVByby1EaXJlY3RpdmVzLmh0bWwjVElMRVByby1EaXJlY3RpdmVzIj5USUxFUHJvIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFUHJvLU1vZGlmaWVycy5odG1sI2luZGV4LVRJTEVQcm8tbW9kaWZpZXJzLTIwNDciPlRJTEVQcm8gbW9kaWZpZXJzPC9hPjogPGEgaHJlZj0iVElMRVByby1Nb2RpZmllcnMuaHRtbCNUSUxFUHJvLU1vZGlmaWVycyI+VElMRVBybyBNb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFUHJvLU9wY29kZXMuaHRtbCNpbmRleC1USUxFUHJvLW9wY29kZS1uYW1lcy0yMDQzIj5USUxFUHJvIG9wY29kZSBuYW1lczwvYT46IDxhIGhyZWY9IlRJTEVQcm8tT3Bjb2Rlcy5odG1sI1RJTEVQcm8tT3Bjb2RlcyI+VElMRVBybyBPcGNvZGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRVByby1SZWdpc3RlcnMuaHRtbCNpbmRleC1USUxFUHJvLXJlZ2lzdGVyLW5hbWVzLTIwNDUiPlRJTEVQcm8gcmVnaXN0ZXIgbmFtZXM8L2E+OiA8YSBocmVmPSJUSUxFUHJvLVJlZ2lzdGVycy5odG1sI1RJTEVQcm8tUmVnaXN0ZXJzIj5USUxFUHJvIFJlZ2lzdGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVQcm9fMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVRJTEVQcm8tc3VwcG9ydC0yMDQwIj5USUxFUHJvIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJUSUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFUHJvXzAwMmREZXBlbmRlbnQiPlRJTEVQcm8tRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRVByby1TeW50YXguaHRtbCNpbmRleC1USUxFUHJvLXN5bnRheC0yMDQxIj5USUxFUHJvIHN5bnRheDwvYT46IDxhIGhyZWY9IlRJTEVQcm8tU3ludGF4Lmh0bWwjVElMRVByby1TeW50YXgiPlRJTEVQcm8gU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RhdGlzdGljcy5odG1sI2luZGV4LXRpbWVfMDAyYy10b3RhbC1mb3ItYXNzZW1ibHktOTQiPnRpbWUsIHRvdGFsIGZvciBhc3NlbWJseTwvYT46IDxhIGhyZWY9InN0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzIj5zdGF0aXN0aWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVGl0bGUuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRpdGxlXzAwN2QtZGlyZWN0aXZlLTQ5MCI+PGNvZGU+dGl0bGU8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlRpdGxlLmh0bWwjVGl0bGUiPlRpdGxlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVRNUzMyMEM2WC1zdXBwb3J0LTE5OTIiPlRNUzMyMEM2WCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI1RJQzZYXzAwMmREZXBlbmRlbnQiPlRJQzZYLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRwXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTAiPjxjb2RlPnRwPC9jb2RlPiByZWdpc3RlciwgVjg1MDwvYT46IDxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNWODUwXzAwMmRSZWdzIj5WODUwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUcmFuc2Zvcm0tRGlyZWN0aXZlLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0cmFuc2Zvcm1fMDA3ZC1kaXJlY3RpdmUtMjMyNCI+PGNvZGU+dHJhbnNmb3JtPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJUcmFuc2Zvcm0tRGlyZWN0aXZlLmh0bWwjVHJhbnNmb3JtLURpcmVjdGl2ZSI+VHJhbnNmb3JtIERpcmVjdGl2ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImYuaHRtbCNpbmRleC10cnVzdGVkLWNvbXBpbGVyLTYwIj50cnVzdGVkIGNvbXBpbGVyPC9hPjogPGEgaHJlZj0iZi5odG1sI2YiPmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjaW5kZXgtdHVybmluZy1wcmVwcm9jZXNzaW5nLW9uLWFuZC1vZmYtMTE4Ij50dXJuaW5nIHByZXByb2Nlc3Npbmcgb24gYW5kIG9mZjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVHlwZS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidHlwZV8wMDdkLWRpcmVjdGl2ZS1fMDAyOENPRkYtdmVyc2lvbl8wMDI5LTQ5NCI+PGNvZGU+dHlwZTwvY29kZT4gZGlyZWN0aXZlIChDT0ZGIHZlcnNpb24pPC9hPjogPGEgaHJlZj0iVHlwZS5odG1sI1R5cGUiPlR5cGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUeXBlLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0eXBlXzAwN2QtZGlyZWN0aXZlLV8wMDI4RUxGLXZlcnNpb25fMDAyOS00OTciPjxjb2RlPnR5cGU8L2NvZGU+IGRpcmVjdGl2ZSAoRUxGIHZlcnNpb24pPC9hPjogPGEgaHJlZj0iVHlwZS5odG1sI1R5cGUiPlR5cGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2wtVHlwZS5odG1sI2luZGV4LXR5cGUtb2YtYS1zeW1ib2wtMjI5Ij50eXBlIG9mIGEgc3ltYm9sPC9hPjogPGEgaHJlZj0iU3ltYm9sLVR5cGUuaHRtbCNTeW1ib2wtVHlwZSI+U3ltYm9sIFR5cGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1YWxvbmdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1TSC0xNzU4Ij48Y29kZT51YWxvbmc8L2NvZGU+IGRpcmVjdGl2ZSwgU0g8L2E+OiA8YSBocmVmPSJTSC1EaXJlY3RpdmVzLmh0bWwjU0gtRGlyZWN0aXZlcyI+U0ggRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVhcXVhZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVNILTE3NTkiPjxjb2RlPnVhcXVhZDwvY29kZT4gZGlyZWN0aXZlLCBTSDwvYT46IDxhIGhyZWY9IlNILURpcmVjdGl2ZXMuaHRtbCNTSC1EaXJlY3RpdmVzIj5TSCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidWF3b3JkXzAwN2QtZGlyZWN0aXZlXzAwMmMtU0gtMTc1NyI+PGNvZGU+dWF3b3JkPC9jb2RlPiBkaXJlY3RpdmUsIFNIPC9hPjogPGEgaHJlZj0iU0gtRGlyZWN0aXZlcy5odG1sI1NILURpcmVjdGl2ZXMiPlNIIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVieXRlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTciPjxjb2RlPnVieXRlPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVjaGFyXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTkiPjxjb2RlPnVjaGFyPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVoYWxmXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MjEiPjxjb2RlPnVoYWxmPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVpbnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkyNSI+PGNvZGU+dWludDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVWxlYjEyOC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidWxlYjEyOF8wMDdkLWRpcmVjdGl2ZS00OTgiPjxjb2RlPnVsZWIxMjg8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlVsZWIxMjguaHRtbCNVbGViMTI4Ij5VbGViMTI4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bG9uZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTM0Ij48Y29kZT51bG9uZzwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNpbmRleC11bmRlZmluZWQtc2VjdGlvbi0xOTgiPnVuZGVmaW5lZCBzZWN0aW9uPC9hPjogPGEgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNMZC1TZWN0aW9ucyI+TGQgU2VjdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVuaW9uXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NjEiPjxjb2RlPnVuaW9uPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtdW5zZWdtLTIwOTgiPjxjb2RlPnVuc2VnbTwvY29kZT48L2E+OiA8YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjWjgwMDAtRGlyZWN0aXZlcyI+WjgwMDAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidXNlY3RfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk2NCI+PGNvZGU+dXNlY3Q8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidXNob3J0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MjMiPjxjb2RlPnVzaG9ydDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1d29yZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTI3Ij48Y29kZT51d29yZDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtVjg1MC1jb21tYW5kLWxpbmUtb3B0aW9ucy0yMTcwIj5WODUwIGNvbW1hbmQgbGluZSBvcHRpb25zPC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtVjg1MC1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTIyMDUiPlY4NTAgZmxvYXRpbmcgcG9pbnQgKDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4pPC9hPjogPGEgaHJlZj0iVjg1MC1GbG9hdGluZy1Qb2ludC5odG1sI1Y4NTAtRmxvYXRpbmctUG9pbnQiPlY4NTAgRmxvYXRpbmcgUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwXzAwMmRDaGFycy5odG1sI2luZGV4LVY4NTAtbGluZS1jb21tZW50LWNoYXJhY3Rlci0yMTgxIj5WODUwIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRDaGFycy5odG1sI1Y4NTBfMDAyZENoYXJzIj5WODUwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1WODUwLWxpbmUtc2VwYXJhdG9yLTIxODQiPlY4NTAgbGluZSBzZXBhcmF0b3I8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRDaGFycy5odG1sI1Y4NTBfMDAyZENoYXJzIj5WODUwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtVjg1MC1tYWNoaW5lLWRpcmVjdGl2ZXMtMjIwNyI+Vjg1MCBtYWNoaW5lIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNWODUwLURpcmVjdGl2ZXMiPlY4NTAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI2luZGV4LVY4NTAtb3Bjb2Rlcy0yMjE1Ij5WODUwIG9wY29kZXM8L2E+OiA8YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNWODUwLU9wY29kZXMiPlY4NTAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LVY4NTAtb3B0aW9ucy1fMDAyOG5vbmVfMDAyOS0yMTY3Ij5WODUwIG9wdGlvbnMgKG5vbmUpPC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjaW5kZXgtVjg1MC1yZWdpc3Rlci1uYW1lcy0yMTg1Ij5WODUwIHJlZ2lzdGVyIG5hbWVzPC9hPjogPGEgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI1Y4NTBfMDAyZFJlZ3MiPlY4NTAtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVY4NTAtc3VwcG9ydC0yMTY2Ij5WODUwIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJWODUwXzAwMmREZXBlbmRlbnQuaHRtbCNWODUwXzAwMmREZXBlbmRlbnQiPlY4NTAtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFsLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J2YWxfMDA3ZC1kaXJlY3RpdmUtNDk5Ij48Y29kZT52YWw8L2NvZGU+IGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9IlZhbC5odG1sI1ZhbCI+VmFsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFsLmh0bWwjaW5kZXgtdmFsdWUtYXR0cmlidXRlXzAwMmMtQ09GRi01MDEiPnZhbHVlIGF0dHJpYnV0ZSwgQ09GRjwvYT46IDxhIGhyZWY9IlZhbC5odG1sI1ZhbCI+VmFsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLVZhbHVlLmh0bWwjaW5kZXgtdmFsdWUtb2YtYS1zeW1ib2wtMjI3Ij52YWx1ZSBvZiBhIHN5bWJvbDwvYT46IDxhIGhyZWY9IlN5bWJvbC1WYWx1ZS5odG1sI1N5bWJvbC1WYWx1ZSI+U3ltYm9sIFZhbHVlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J2YXJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk2NSI+PGNvZGU+dmFyPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZG5vLmh0bWwjaW5kZXgtVkFYLWJpdGZpZWxkcy1ub3Qtc3VwcG9ydGVkLTIxNTkiPlZBWCBiaXRmaWVsZHMgbm90IHN1cHBvcnRlZDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkbm8uaHRtbCNWQVhfMDAyZG5vIj5WQVgtbm88L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZGJyYW5jaC5odG1sI2luZGV4LVZBWC1icmFuY2gtaW1wcm92ZW1lbnQtMjE0NiI+VkFYIGJyYW5jaCBpbXByb3ZlbWVudDwvYT46IDxhIGhyZWY9IlZBWF8wMDJkYnJhbmNoLmh0bWwjVkFYXzAwMmRicmFuY2giPlZBWC1icmFuY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNpbmRleC1WQVgtY29tbWFuZF8wMDJkbGluZS1vcHRpb25zLWlnbm9yZWQtMjExNSI+VkFYIGNvbW1hbmQtbGluZSBvcHRpb25zIGlnbm9yZWQ8L2E+OiA8YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNWQVhfMDAyZE9wdHMiPlZBWC1PcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI2luZGV4LVZBWC1kaXNwbGFjZW1lbnQtc2l6aW5nLWNoYXJhY3Rlci0yMTU2Ij5WQVggZGlzcGxhY2VtZW50IHNpemluZyBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJWQVhfMDAyZG9wZXJhbmRzLmh0bWwjVkFYXzAwMmRvcGVyYW5kcyI+VkFYLW9wZXJhbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRmbG9hdC5odG1sI2luZGV4LVZBWC1mbG9hdGluZy1wb2ludC0yMTMyIj5WQVggZmxvYXRpbmcgcG9pbnQ8L2E+OiA8YSBocmVmPSJWQVhfMDAyZGZsb2F0Lmh0bWwjVkFYXzAwMmRmbG9hdCI+VkFYLWZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI2luZGV4LVZBWC1pbW1lZGlhdGUtY2hhcmFjdGVyLTIxNTIiPlZBWCBpbW1lZGlhdGUgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI1ZBWF8wMDJkb3BlcmFuZHMiPlZBWC1vcGVyYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkb3BlcmFuZHMuaHRtbCNpbmRleC1WQVgtaW5kaXJlY3QtY2hhcmFjdGVyLTIxNTQiPlZBWCBpbmRpcmVjdCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJWQVhfMDAyZG9wZXJhbmRzLmh0bWwjVkFYXzAwMmRvcGVyYW5kcyI+VkFYLW9wZXJhbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRDaGFycy5odG1sI2luZGV4LVZBWC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIxNjIiPlZBWCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRDaGFycy5odG1sI1ZBWF8wMDJkQ2hhcnMiPlZBWC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1WQVgtbGluZS1zZXBhcmF0b3ItMjE2NSI+VkFYIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRDaGFycy5odG1sI1ZBWF8wMDJkQ2hhcnMiPlZBWC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI2luZGV4LVZBWC1tYWNoaW5lLWRpcmVjdGl2ZXMtMjEzNyI+VkFYIG1hY2hpbmUgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI1ZBWF8wMDJkZGlyZWN0aXZlcyI+VkFYLWRpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZG9wY29kZXMuaHRtbCNpbmRleC1WQVgtb3Bjb2RlLW1uZW1vbmljcy0yMTQzIj5WQVggb3Bjb2RlIG1uZW1vbmljczwvYT46IDxhIGhyZWY9IlZBWF8wMDJkb3Bjb2Rlcy5odG1sI1ZBWF8wMDJkb3Bjb2RlcyI+VkFYLW9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZG9wZXJhbmRzLmh0bWwjaW5kZXgtVkFYLW9wZXJhbmQtbm90YXRpb24tMjE0OSI+VkFYIG9wZXJhbmQgbm90YXRpb248L2E+OiA8YSBocmVmPSJWQVhfMDAyZG9wZXJhbmRzLmh0bWwjVkFYXzAwMmRvcGVyYW5kcyI+VkFYLW9wZXJhbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI2luZGV4LVZBWC1yZWdpc3Rlci1uYW1lcy0yMTU4Ij5WQVggcmVnaXN0ZXIgbmFtZXM8L2E+OiA8YSBocmVmPSJWQVhfMDAyZG9wZXJhbmRzLmh0bWwjVkFYXzAwMmRvcGVyYW5kcyI+VkFYLW9wZXJhbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmF4XzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1WQVgtc3VwcG9ydC0yMTEzIj5WQVggc3VwcG9ydDwvYT46IDxhIGhyZWY9IlZheF8wMDJkRGVwZW5kZW50Lmh0bWwjVmF4XzAwMmREZXBlbmRlbnQiPlZheC1EZXBlbmRlbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNpbmRleC1WYXhfMDAyZDExLUMtY29tcGF0aWJpbGl0eS0yMTI2Ij5WYXgtMTEgQyBjb21wYXRpYmlsaXR5PC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI2luZGV4LVZBWF8wMDJmVk1TLW9wdGlvbnMtMjEyNSI+VkFYL1ZNUyBvcHRpb25zPC9hPjogPGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZlcnNpb24uaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnZlcnNpb25fMDA3ZC1kaXJlY3RpdmUtNTAyIj48Y29kZT52ZXJzaW9uPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJWZXJzaW9uLmh0bWwjVmVyc2lvbiI+VmVyc2lvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidmVyc2lvbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTY2Ij48Y29kZT52ZXJzaW9uPC9jb2RlPiBkaXJlY3RpdmUsIFRJQzU0WDwvYT46IDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+VElDNTRYLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2Lmh0bWwjaW5kZXgtdmVyc2lvbi1vZi1hc3NlbWJsZXItMTAwIj52ZXJzaW9uIG9mIGFzc2VtYmxlcjwvYT46IDxhIGhyZWY9InYuaHRtbCN2Ij52PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltdmVyLmh0bWwjaW5kZXgtdmVyc2lvbnMtb2Ytc3ltYm9scy00ODUiPnZlcnNpb25zIG9mIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJTeW12ZXIuaHRtbCNTeW12ZXIiPlN5bXZlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByb3RlY3RlZC5odG1sI2luZGV4LXZpc2liaWxpdHktNDMxIj52aXNpYmlsaXR5PC9hPjogPGEgaHJlZj0iUHJvdGVjdGVkLmh0bWwjUHJvdGVjdGVkIj5Qcm90ZWN0ZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnRlcm5hbC5odG1sI2luZGV4LXZpc2liaWxpdHktMzc4Ij52aXNpYmlsaXR5PC9hPjogPGEgaHJlZj0iSW50ZXJuYWwuaHRtbCNJbnRlcm5hbCI+SW50ZXJuYWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIaWRkZW4uaHRtbCNpbmRleC12aXNpYmlsaXR5LTM0NyI+dmlzaWJpbGl0eTwvYT46IDxhIGhyZWY9IkhpZGRlbi5odG1sI0hpZGRlbiI+SGlkZGVuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjaW5kZXgtVk1TLV8wMDI4VkFYXzAwMjktb3B0aW9ucy0yMTIzIj5WTVMgKFZBWCkgb3B0aW9uczwvYT46IDxhIGhyZWY9IlZBWF8wMDJkT3B0cy5odG1sI1ZBWF8wMDJkT3B0cyI+VkFYLU9wdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWVGFibGVFbnRyeS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidnRhYmxlXzAwNWZlbnRyeV8wMDdkLWRpcmVjdGl2ZS01MDMiPjxjb2RlPnZ0YWJsZV9lbnRyeTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iVlRhYmxlRW50cnkuaHRtbCNWVGFibGVFbnRyeSI+VlRhYmxlRW50cnk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWVGFibGVJbmhlcml0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J2dGFibGVfMDA1ZmluaGVyaXRfMDA3ZC1kaXJlY3RpdmUtNTA0Ij48Y29kZT52dGFibGVfaW5oZXJpdDwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iVlRhYmxlSW5oZXJpdC5odG1sI1ZUYWJsZUluaGVyaXQiPlZUYWJsZUluaGVyaXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLmh0bWwjaW5kZXgtd2FybmluZy1kaXJlY3RpdmUtNTA1Ij53YXJuaW5nIGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9Ildhcm5pbmcuaHRtbCNXYXJuaW5nIj5XYXJuaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSy5odG1sI2luZGV4LXdhcm5pbmctZm9yLWFsdGVyZWQtZGlmZmVyZW5jZS10YWJsZXMtNjgiPndhcm5pbmcgZm9yIGFsdGVyZWQgZGlmZmVyZW5jZSB0YWJsZXM8L2E+OiA8YSBocmVmPSJLLmh0bWwjSyI+SzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9ycy5odG1sI2luZGV4LXdhcm5pbmctbWVzc2FnZXMtNDEiPndhcm5pbmcgbWVzc2FnZXM8L2E+OiA8YSBocmVmPSJFcnJvcnMuaHRtbCNFcnJvcnMiPkVycm9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlcuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLWNhdXNpbmctZXJyb3ItMTA3Ij53YXJuaW5ncywgY2F1c2luZyBlcnJvcjwvYT46IDxhIGhyZWY9IlcuaHRtbCNXIj5XPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkV2FybmluZ3MuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLU0zMlItMTIzMiI+d2FybmluZ3MsIE0zMlI8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmRXYXJuaW5ncy5odG1sI00zMlJfMDAyZFdhcm5pbmdzIj5NMzJSLVdhcm5pbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtc3VwcHJlc3NpbmctMTA0Ij53YXJuaW5ncywgc3VwcHJlc3Npbmc8L2E+OiA8YSBocmVmPSJXLmh0bWwjVyI+VzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlcuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLXN3aXRjaGluZy1vbi0xMDkiPndhcm5pbmdzLCBzd2l0Y2hpbmcgb248L2E+OiA8YSBocmVmPSJXLmh0bWwjVyI+VzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldlYWsuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndlYWtfMDA3ZC1kaXJlY3RpdmUtNTA2Ij48Y29kZT53ZWFrPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJXZWFrLmh0bWwjV2VhayI+V2VhazwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldlYWtyZWYuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndlYWtyZWZfMDA3ZC1kaXJlY3RpdmUtNTA3Ij48Y29kZT53ZWFrcmVmPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJXZWFrcmVmLmh0bWwjV2Vha3JlZiI+V2Vha3JlZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldoaXRlc3BhY2UuaHRtbCNpbmRleC13aGl0ZXNwYWNlLTEyMiI+d2hpdGVzcGFjZTwvYT46IDxhIGhyZWY9IldoaXRlc3BhY2UuaHRtbCNXaGl0ZXNwYWNlIj5XaGl0ZXNwYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI2luZGV4LXdoaXRlc3BhY2VfMDAyYy1yZW1vdmVkLWJ5LXByZXByb2Nlc3Nvci0xMTUiPndoaXRlc3BhY2UsIHJlbW92ZWQgYnkgcHJlcHJvY2Vzc29yPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZGRpcmVjdGl2ZXMuaHRtbCNpbmRleC13aWRlLWZsb2F0aW5nLXBvaW50LWRpcmVjdGl2ZXNfMDAyYy1WQVgtMjEzOCI+d2lkZSBmbG9hdGluZyBwb2ludCBkaXJlY3RpdmVzLCBWQVg8L2E+OiA8YSBocmVmPSJWQVhfMDAyZGRpcmVjdGl2ZXMuaHRtbCNWQVhfMDAyZGRpcmVjdGl2ZXMiPlZBWC1kaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3aWR0aF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTMwIj48Y29kZT53aWR0aDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibGlzdGluZy5odG1sI2luZGV4LVdpZHRoLW9mLWNvbnRpbnVhdGlvbi1saW5lcy1vZi1kaXNhc3NlbWJseS1vdXRwdXQtNzQiPldpZHRoIG9mIGNvbnRpbnVhdGlvbiBsaW5lcyBvZiBkaXNhc3NlbWJseSBvdXRwdXQ8L2E+OiA8YSBocmVmPSJsaXN0aW5nLmh0bWwjbGlzdGluZyI+bGlzdGluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imxpc3RpbmcuaHRtbCNpbmRleC1XaWR0aC1vZi1maXJzdC1saW5lLWRpc2Fzc2VtYmx5LW91dHB1dC03MiI+V2lkdGggb2YgZmlyc3QgbGluZSBkaXNhc3NlbWJseSBvdXRwdXQ8L2E+OiA8YSBocmVmPSJsaXN0aW5nLmh0bWwjbGlzdGluZyI+bGlzdGluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imxpc3RpbmcuaHRtbCNpbmRleC1XaWR0aC1vZi1zb3VyY2UtbGluZS1vdXRwdXQtNzYiPldpZHRoIG9mIHNvdXJjZSBsaW5lIG91dHB1dDwvYT46IDxhIGhyZWY9Imxpc3RpbmcuaHRtbCNsaXN0aW5nIj5saXN0aW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3bXNnXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MTIiPjxjb2RlPndtc2c8L2NvZGU+IGRpcmVjdGl2ZSwgVElDNTRYPC9hPjogPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldvcmQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndvcmRfMDA3ZC1kaXJlY3RpdmUtNTA4Ij48Y29kZT53b3JkPC9jb2RlPiBkaXJlY3RpdmU8L2E+OiA8YSBocmVmPSJXb3JkLmh0bWwjV29yZCI+V29yZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3b3JkXzAwN2QtZGlyZWN0aXZlXzAwMmMtQVJDLTYwOCI+PGNvZGU+d29yZDwvY29kZT4gZGlyZWN0aXZlLCBBUkM8L2E+OiA8YSBocmVmPSJBUkMtRGlyZWN0aXZlcy5odG1sI0FSQy1EaXJlY3RpdmVzIj5BUkMgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdid29yZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUg4XzAwMmYzMDAtODc3Ij48Y29kZT53b3JkPC9jb2RlPiBkaXJlY3RpdmUsIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI0g4XzAwMmYzMDAtRGlyZWN0aXZlcyI+SDgvMzAwIERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdid29yZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLWkzODYtMTAzMiI+PGNvZGU+d29yZDwvY29kZT4gZGlyZWN0aXZlLCBpMzg2PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3b3JkXzAwN2QtZGlyZWN0aXZlXzAwMmMtU1BBUkMtMTg0MyI+PGNvZGU+d29yZDwvY29kZT4gZGlyZWN0aXZlLCBTUEFSQzwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjU3BhcmNfMDAyZERpcmVjdGl2ZXMiPlNwYXJjLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndvcmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkyNiI+PGNvZGU+d29yZDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndvcmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy14ODZfMDAyZDY0LTEwMzYiPjxjb2RlPndvcmQ8L2NvZGU+IGRpcmVjdGl2ZSwgeDg2LTY0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGwuaHRtbCNpbmRleC13cml0aW5nLXBhdHRlcm5zLWluLW1lbW9yeS0zMzkiPndyaXRpbmcgcGF0dGVybnMgaW4gbWVtb3J5PC9hPjogPGEgaHJlZj0iRmlsbC5odG1sI0ZpbGwiPkZpbGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtd3ZhbC0yMTAyIj48Y29kZT53dmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNaODAwMC1EaXJlY3RpdmVzIj5aODAwMCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LXg4Ni1tYWNoaW5lLWRpcmVjdGl2ZXMtOTMxIj54ODYgbWFjaGluZSBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRGlyZWN0aXZlcy5odG1sI2kzODZfMDAyZERpcmVjdGl2ZXMiPmkzODYtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEFyY2guaHRtbCNpbmRleC14ODZfMDAyZDY0LWFyY2gtZGlyZWN0aXZlLTEwNjMiPng4Ni02NCBhcmNoIGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEFyY2guaHRtbCNpMzg2XzAwMmRBcmNoIj5pMzg2LUFyY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgteDg2XzAwMmQ2NC1hdHRfMDA1ZnN5bnRheC1wc2V1ZG8tb3AtOTQxIj54ODYtNjQgYXR0X3N5bnRheCBwc2V1ZG8gb3A8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaW5kZXgteDg2XzAwMmQ2NC1jb252ZXJzaW9uLWluc3RydWN0aW9ucy05OTEiPng4Ni02NCBjb252ZXJzaW9uIGluc3RydWN0aW9uczwvYT46IDxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+aTM4Ni1NbmVtb25pY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2luZGV4LXg4Nl8wMDJkNjQtZmxvYXRpbmctcG9pbnQtMTAyMiI+eDg2LTY0IGZsb2F0aW5nIHBvaW50PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC14ODZfMDAyZDY0LWltbWVkaWF0ZS1vcGVyYW5kcy05NTMiPng4Ni02NCBpbW1lZGlhdGUgb3BlcmFuZHM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaW5kZXgteDg2XzAwMmQ2NC1pbnN0cnVjdGlvbi1uYW1pbmctOTg0Ij54ODYtNjQgaW5zdHJ1Y3Rpb24gbmFtaW5nPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaTM4Nl8wMDJkTW5lbW9uaWNzIj5pMzg2LU1uZW1vbmljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC14ODZfMDAyZDY0LWludGVsXzAwNWZzeW50YXgtcHNldWRvLW9wLTkzOSI+eDg2LTY0IGludGVsX3N5bnRheCBwc2V1ZG8gb3A8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkSnVtcHMuaHRtbCNpbmRleC14ODZfMDAyZDY0LWp1bXAtb3B0aW1pemF0aW9uLTEwMTkiPng4Ni02NCBqdW1wIG9wdGltaXphdGlvbjwvYT46IDxhIGhyZWY9ImkzODZfMDAyZEp1bXBzLmh0bWwjaTM4Nl8wMDJkSnVtcHMiPmkzODYtSnVtcHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgteDg2XzAwMmQ2NC1qdW1wXzAwMmMtY2FsbF8wMDJjLXJldHVybi05NzIiPng4Ni02NCBqdW1wLCBjYWxsLCByZXR1cm48L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2luZGV4LXg4Nl8wMDJkNjQtanVtcF8wMDJmY2FsbC1vcGVyYW5kcy05NTciPng4Ni02NCBqdW1wL2NhbGwgb3BlcmFuZHM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTWVtb3J5Lmh0bWwjaW5kZXgteDg2XzAwMmQ2NC1tZW1vcnktcmVmZXJlbmNlcy0xMDE0Ij54ODYtNjQgbWVtb3J5IHJlZmVyZW5jZXM8L2E+OiA8YSBocmVmPSJpMzg2XzAwMmRNZW1vcnkuaHRtbCNpMzg2XzAwMmRNZW1vcnkiPmkzODYtTWVtb3J5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2luZGV4LXg4Nl8wMDJkNjQtb3B0aW9ucy05MDYiPng4Ni02NCBvcHRpb25zPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC14ODZfMDAyZDY0LXJlZ2lzdGVyLW9wZXJhbmRzLTk1NSI+eDg2LTY0IHJlZ2lzdGVyIG9wZXJhbmRzPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFJlZ3MuaHRtbCNpbmRleC14ODZfMDAyZDY0LXJlZ2lzdGVycy0xMDAwIj54ODYtNjQgcmVnaXN0ZXJzPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkUmVncy5odG1sI2kzODZfMDAyZFJlZ3MiPmkzODYtUmVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC14ODZfMDAyZDY0LXNlY3Rpb25zLTk3NiI+eDg2LTY0IHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC14ODZfMDAyZDY0LXNpemUtc3VmZml4ZXMtOTY4Ij54ODYtNjQgc2l6ZSBzdWZmaXhlczwvYT46IDxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpMzg2XzAwMmRWYXJpYXRpb25zIj5pMzg2LVZhcmlhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaW5kZXgteDg2XzAwMmQ2NC1zb3VyY2VfMDAyYy1kZXN0aW5hdGlvbi1vcGVyYW5kcy05NjEiPng4Ni02NCBzb3VyY2UsIGRlc3RpbmF0aW9uIG9wZXJhbmRzPC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LXg4Nl8wMDJkNjQtc3VwcG9ydC05MDIiPng4Ni02NCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFZhcmlhdGlvbnMuaHRtbCNpbmRleC14ODZfMDAyZDY0LXN5bnRheC1jb21wYXRpYmlsaXR5LTk0MyI+eDg2LTY0IHN5bnRheCBjb21wYXRpYmlsaXR5PC9hPjogPGEgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdieGZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDciPjxjb2RlPnhmbG9hdDwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI2luZGV4LVhHQVRFLWFkZHJlc3NpbmctbW9kZXMtMjI0MyI+WEdBVEUgYWRkcmVzc2luZyBtb2RlczwvYT46IDxhIGhyZWY9IlhHQVRFXzAwMmRTeW50YXguaHRtbCNYR0FURV8wMDJkU3ludGF4Ij5YR0FURS1TeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYR0FURV8wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LVhHQVRFLWFzc2VtYmxlci1kaXJlY3RpdmVzLTIyNDYiPlhHQVRFIGFzc2VtYmxlciBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZERpcmVjdGl2ZXMuaHRtbCNYR0FURV8wMDJkRGlyZWN0aXZlcyI+WEdBVEUtRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRGbG9hdC5odG1sI2luZGV4LVhHQVRFLWZsb2F0aW5nLXBvaW50LTIyNDgiPlhHQVRFIGZsb2F0aW5nIHBvaW50PC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjWEdBVEVfMDAyZEZsb2F0Ij5YR0FURS1GbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRTeW50YXguaHRtbCNpbmRleC1YR0FURS1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIyMzkiPlhHQVRFIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJYR0FURV8wMDJkU3ludGF4Lmh0bWwjWEdBVEVfMDAyZFN5bnRheCI+WEdBVEUtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI2luZGV4LVhHQVRFLWxpbmUtc2VwYXJhdG9yLTIyNDIiPlhHQVRFIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI1hHQVRFXzAwMmRTeW50YXgiPlhHQVRFLVN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRvcGNvZGVzLmh0bWwjaW5kZXgtWEdBVEUtb3Bjb2Rlcy0yMjUzIj5YR0FURSBvcGNvZGVzPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZG9wY29kZXMuaHRtbCNYR0FURV8wMDJkb3Bjb2RlcyI+WEdBVEUtb3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRPcHRzLmh0bWwjaW5kZXgtWEdBVEUtb3B0aW9ucy0yMjI5Ij5YR0FURSBvcHRpb25zPC9hPjogPGEgaHJlZj0iWEdBVEVfMDAyZE9wdHMuaHRtbCNYR0FURV8wMDJkT3B0cyI+WEdBVEUtT3B0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmREZXBlbmRlbnQuaHRtbCNpbmRleC1YR0FURS1zdXBwb3J0LTIyMjciPlhHQVRFIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJYR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwjWEdBVEVfMDAyZERlcGVuZGVudCI+WEdBVEUtRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI2luZGV4LVhHQVRFLXN5bnRheC0yMjM2Ij5YR0FURSBzeW50YXg8L2E+OiA8YSBocmVmPSJYR0FURV8wMDJkU3ludGF4Lmh0bWwjWEdBVEVfMDAyZFN5bnRheCI+WEdBVEUtU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J4bG9uZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTM1Ij48Y29kZT54bG9uZzwvY29kZT4gZGlyZWN0aXZlLCBUSUM1NFg8L2E+OiA8YSBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2XzAwMmRDaGFycy5odG1sI2luZGV4LVhTdG9ybXkxNi1jb21tZW50LWNoYXJhY3Rlci0yMjU5Ij5YU3Rvcm15MTYgY29tbWVudCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJYU3Rvcm15MTZfMDAyZENoYXJzLmh0bWwjWFN0b3JteTE2XzAwMmRDaGFycyI+WFN0b3JteTE2LUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2XzAwMmRDaGFycy5odG1sI2luZGV4LVhTdG9ybXkxNi1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIyNTciPlhTdG9ybXkxNiBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iWFN0b3JteTE2XzAwMmRDaGFycy5odG1sI1hTdG9ybXkxNl8wMDJkQ2hhcnMiPlhTdG9ybXkxNi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhTdG9ybXkxNl8wMDJkQ2hhcnMuaHRtbCNpbmRleC1YU3Rvcm15MTYtbGluZS1zZXBhcmF0b3ItMjI2MiI+WFN0b3JteTE2IGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iWFN0b3JteTE2XzAwMmRDaGFycy5odG1sI1hTdG9ybXkxNl8wMDJkQ2hhcnMiPlhTdG9ybXkxNi1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhTdG9ybXkxNi1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtWFN0b3JteTE2LW1hY2hpbmUtZGlyZWN0aXZlcy0yMjY0Ij5YU3Rvcm15MTYgbWFjaGluZSBkaXJlY3RpdmVzPC9hPjogPGEgaHJlZj0iWFN0b3JteTE2LURpcmVjdGl2ZXMuaHRtbCNYU3Rvcm15MTYtRGlyZWN0aXZlcyI+WFN0b3JteTE2IERpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYU3Rvcm15MTYtT3Bjb2Rlcy5odG1sI2luZGV4LVhTdG9ybXkxNi1wc2V1ZG9fMDAyZG9wY29kZXMtMjI2OCI+WFN0b3JteTE2IHBzZXVkby1vcGNvZGVzPC9hPjogPGEgaHJlZj0iWFN0b3JteTE2LU9wY29kZXMuaHRtbCNYU3Rvcm15MTYtT3Bjb2RlcyI+WFN0b3JteTE2IE9wY29kZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYU1RPUk1ZMTZfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVhTdG9ybXkxNi1zdXBwb3J0LTIyNTUiPlhTdG9ybXkxNiBzdXBwb3J0PC9hPjogPGEgaHJlZj0iWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQuaHRtbCNYU1RPUk1ZMTZfMDAyZERlcGVuZGVudCI+WFNUT1JNWTE2LURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYV8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtWHRlbnNhLWFyY2hpdGVjdHVyZS0yMjcyIj5YdGVuc2EgYXJjaGl0ZWN0dXJlPC9hPjogPGEgaHJlZj0iWHRlbnNhXzAwMmREZXBlbmRlbnQuaHRtbCNYdGVuc2FfMDAyZERlcGVuZGVudCI+WHRlbnNhLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNpbmRleC1YdGVuc2EtYXNzZW1ibGVyLXN5bnRheC0yMjg1Ij5YdGVuc2EgYXNzZW1ibGVyIHN5bnRheDwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNYdGVuc2EtU3ludGF4Ij5YdGVuc2EgU3ludGF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1YdGVuc2EtZGlyZWN0aXZlcy0yMzE4Ij5YdGVuc2EgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiPlh0ZW5zYSBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wY29kZXMuaHRtbCNpbmRleC1YdGVuc2Etb3Bjb2RlLW5hbWVzLTIyODciPlh0ZW5zYSBvcGNvZGUgbmFtZXM8L2E+OiA8YSBocmVmPSJYdGVuc2EtT3Bjb2Rlcy5odG1sI1h0ZW5zYS1PcGNvZGVzIj5YdGVuc2EgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1SZWdpc3RlcnMuaHRtbCNpbmRleC1YdGVuc2EtcmVnaXN0ZXItbmFtZXMtMjI5MCI+WHRlbnNhIHJlZ2lzdGVyIG5hbWVzPC9hPjogPGEgaHJlZj0iWHRlbnNhLVJlZ2lzdGVycy5odG1sI1h0ZW5zYS1SZWdpc3RlcnMiPlh0ZW5zYSBSZWdpc3RlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdieHdvcmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1TUEFSQy0xODQ0Ij48Y29kZT54d29yZDwvY29kZT4gZGlyZWN0aXZlLCBTUEFSQzwvYT46IDxhIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjU3BhcmNfMDAyZERpcmVjdGl2ZXMiPlNwYXJjLURpcmVjdGl2ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjaW5kZXgtWjgwLV8wMDI0LTIwNjciPlo4MCAkPC9hPjogPGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPlo4MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1aODAtXzAwMjctMjA3MiI+WjgwICc8L2E+OiA8YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjWjgwXzAwMmRDaGFycyI+WjgwLUNoYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwLUZsb2F0aW5nLVBvaW50Lmh0bWwjaW5kZXgtWjgwLWZsb2F0aW5nLXBvaW50LTIwNzgiPlo4MCBmbG9hdGluZyBwb2ludDwvYT46IDxhIGhyZWY9Ilo4MC1GbG9hdGluZy1Qb2ludC5odG1sI1o4MC1GbG9hdGluZy1Qb2ludCI+WjgwIEZsb2F0aW5nIFBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI2luZGV4LVo4MC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIwNjEiPlo4MCBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPlo4MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1aODAtbGluZS1zZXBhcmF0b3ItMjA2NCI+WjgwIGxpbmUgc2VwYXJhdG9yPC9hPjogPGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPlo4MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MC1PcHRpb25zLmh0bWwjaW5kZXgtWjgwLW9wdGlvbnMtMjA1NSI+WjgwIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJaODAtT3B0aW9ucy5odG1sI1o4MC1PcHRpb25zIj5aODAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkUmVncy5odG1sI2luZGV4LVo4MC1yZWdpc3RlcnMtMjA3MyI+WjgwIHJlZ2lzdGVyczwvYT46IDxhIGhyZWY9Ilo4MF8wMDJkUmVncy5odG1sI1o4MF8wMDJkUmVncyI+WjgwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODBfMDAyZERlcGVuZGVudC5odG1sI2luZGV4LVo4MC1zdXBwb3J0LTIwNTQiPlo4MCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iWjgwXzAwMmREZXBlbmRlbnQuaHRtbCNaODBfMDAyZERlcGVuZGVudCI+WjgwLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MC1PcHRpb25zLmh0bWwjaW5kZXgtWjgwLVN5bnRheC0yMDU5Ij5aODAgU3ludGF4PC9hPjogPGEgaHJlZj0iWjgwLU9wdGlvbnMuaHRtbCNaODAtT3B0aW9ucyI+WjgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjaW5kZXgtWjgwXzAwMmMtXzAwNWMtMjA2OSI+WjgwLCBcPC9hPjogPGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPlo4MC1DaGFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkQ2FzZS5odG1sI2luZGV4LVo4MF8wMDJjLWNhc2Utc2Vuc2l0aXZpdHktMjA3NSI+WjgwLCBjYXNlIHNlbnNpdGl2aXR5PC9hPjogPGEgaHJlZj0iWjgwXzAwMmRDYXNlLmh0bWwjWjgwXzAwMmRDYXNlIj5aODAtQ2FzZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MC1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtWjgwXzAwMmRvbmx5LWRpcmVjdGl2ZXMtMjA3OSI+WjgwLW9ubHkgZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9Ilo4MC1EaXJlY3RpdmVzLmh0bWwjWjgwLURpcmVjdGl2ZXMiPlo4MCBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWjgwMDBfMDAyZEFkZHJlc3NpbmcuaHRtbCNpbmRleC1aODAwLWFkZHJlc3NpbmctbW9kZXMtMjA5MyI+WjgwMCBhZGRyZXNzaW5nIG1vZGVzPC9hPjogPGEgaHJlZj0iWjgwMDBfMDAyZEFkZHJlc3NpbmcuaHRtbCNaODAwMF8wMDJkQWRkcmVzc2luZyI+WjgwMDAtQWRkcmVzc2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1aODAwMC1kaXJlY3RpdmVzLTIwOTQiPlo4MDAwIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjWjgwMDAtRGlyZWN0aXZlcyI+WjgwMDAgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwXzAwMmRDaGFycy5odG1sI2luZGV4LVo4MDAwLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMjA4NiI+WjgwMDAgbGluZSBjb21tZW50IGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9Ilo4MDAwXzAwMmRDaGFycy5odG1sI1o4MDAwXzAwMmRDaGFycyI+WjgwMDAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMF8wMDJkQ2hhcnMuaHRtbCNpbmRleC1aODAwMC1saW5lLXNlcGFyYXRvci0yMDg5Ij5aODAwMCBsaW5lIHNlcGFyYXRvcjwvYT46IDxhIGhyZWY9Ilo4MDAwXzAwMmRDaGFycy5odG1sI1o4MDAwXzAwMmRDaGFycyI+WjgwMDAtQ2hhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMC1PcGNvZGVzLmh0bWwjaW5kZXgtWjgwMDAtb3Bjb2RlLXN1bW1hcnktMjEwOSI+WjgwMDAgb3Bjb2RlIHN1bW1hcnk8L2E+OiA8YSBocmVmPSJaODAwMC1PcGNvZGVzLmh0bWwjWjgwMDAtT3Bjb2RlcyI+WjgwMDAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwLU9wdGlvbnMuaHRtbCNpbmRleC1aODAwMC1vcHRpb25zLTIwODEiPlo4MDAwIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJaODAwMC1PcHRpb25zLmh0bWwjWjgwMDAtT3B0aW9ucyI+WjgwMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilo4MDAwXzAwMmRSZWdzLmh0bWwjaW5kZXgtWjgwMDAtcmVnaXN0ZXJzLTIwOTAiPlo4MDAwIHJlZ2lzdGVyczwvYT46IDxhIGhyZWY9Ilo4MDAwXzAwMmRSZWdzLmh0bWwjWjgwMDBfMDAyZFJlZ3MiPlo4MDAwLVJlZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaODAwMF8wMDJkRGVwZW5kZW50Lmh0bWwjaW5kZXgtWjgwMDAtc3VwcG9ydC0yMDgwIj5aODAwMCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iWjgwMDBfMDAyZERlcGVuZGVudC5odG1sI1o4MDAwXzAwMmREZXBlbmRlbnQiPlo4MDAwLURlcGVuZGVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiemRhb2ZmXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVY4NTAtMjIyMyI+PGNvZGU+emRhb2ZmPC9jb2RlPiBwc2V1ZG8tb3AsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNWODUwLU9wY29kZXMiPlY4NTAgT3Bjb2RlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ynplcm9fMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE4NyI+PGNvZGU+emVybzwvY29kZT4gcmVnaXN0ZXIsIFY4NTA8L2E+OiA8YSBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXNjaXouaHRtbCNpbmRleC16ZXJvXzAwMmR0ZXJtaW5hdGVkLXN0cmluZ3MtMjg0Ij56ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nczwvYT46IDxhIGhyZWY9IkFzY2l6Lmh0bWwjQXNjaXoiPkFzY2l6PC9hPjwvbGk+CisgICA8L3VsPjwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUi1PcGNvZGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BVlItT3Bjb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTJiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BVlItT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsMjAxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BVlIgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVZSXzAwMmREZXBlbmRlbnQuaHRtbCNBVlJfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFWUi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBVlItU3ludGF4Lmh0bWwjQVZSLVN5bnRheCIgdGl0bGU9IkFWUiBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBVlItT3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFWUi1TeW50YXguaHRtbCNBVlItU3ludGF4Ij5BVlIgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVZSXzAwMmREZXBlbmRlbnQuaHRtbCNBVlJfMDAyZERlcGVuZGVudCI+QVZSLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNS4zIE9wY29kZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1BVlItb3Bjb2RlLXN1bW1hcnktNzIyIj48L2E+PGEgbmFtZT0iaW5kZXgtb3Bjb2RlLXN1bW1hcnlfMDAyYy1BVlItNzIzIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5lbW9uaWNzXzAwMmMtQVZSLTcyNCI+PC9hPjxhIG5hbWU9ImluZGV4LWluc3RydWN0aW9uLXN1bW1hcnlfMDAyYy1BVlItNzI1Ij48L2E+Rm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZSBBVlIgbWFjaGluZSBpbnN0cnVjdGlvbiBzZXQsIHNlZQorPGEgaHJlZj0id3d3LmF0bWVsLmNvbS9wcm9kdWN0cy9BVlIiPnd3dy5hdG1lbC5jb20vcHJvZHVjdHMvQVZSPC9hPi4KKworICAgPHA+PGNvZGU+YXM8L2NvZGU+IGltcGxlbWVudHMgYWxsIHRoZSBzdGFuZGFyZCBBVlIgb3Bjb2Rlcy4gCitUaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIEFWUiBvcGNvZGVzLCBhbmQgdGhlaXIgYXJndW1lbnRzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPGk+TGVnZW5kOjwvaT4KKyAgICAgICAgciAgIDxzcGFuIGNsYXNzPSJyb21hbiI+YW55IHJlZ2lzdGVyPC9zcGFuPgorICAgICAgICBkICAgPHNwYW4gY2xhc3M9InJvbWFuIj5gbGRpJyByZWdpc3RlciAocjE2LXIzMSk8L3NwYW4+CisgICAgICAgIHYgICA8c3BhbiBjbGFzcz0icm9tYW4iPmBtb3Z3JyBldmVuIHJlZ2lzdGVyIChyMCwgcjIsIC4uLiwgcjI4LCByMzApPC9zcGFuPgorICAgICAgICBhICAgPHNwYW4gY2xhc3M9InJvbWFuIj5gZm11bCcgcmVnaXN0ZXIgKHIxNi1yMjMpPC9zcGFuPgorICAgICAgICB3ICAgPHNwYW4gY2xhc3M9InJvbWFuIj5gYWRpdycgcmVnaXN0ZXIgKHIyNCxyMjYscjI4LHIzMCk8L3NwYW4+CisgICAgICAgIGUgICA8c3BhbiBjbGFzcz0icm9tYW4iPnBvaW50ZXIgcmVnaXN0ZXJzIChYLFksWik8L3NwYW4+CisgICAgICAgIGIgICA8c3BhbiBjbGFzcz0icm9tYW4iPmJhc2UgcG9pbnRlciByZWdpc3RlciBhbmQgZGlzcGxhY2VtZW50IChbWVpdK2Rpc3ApPC9zcGFuPgorICAgICAgICB6ICAgPHNwYW4gY2xhc3M9InJvbWFuIj5aIHBvaW50ZXIgcmVnaXN0ZXIgKGZvciBbZV1scG0gUmQsWlsrXSk8L3NwYW4+CisgICAgICAgIE0gICA8c3BhbiBjbGFzcz0icm9tYW4iPmltbWVkaWF0ZSB2YWx1ZSBmcm9tIDAgdG8gMjU1PC9zcGFuPgorICAgICAgICBuICAgPHNwYW4gY2xhc3M9InJvbWFuIj5pbW1lZGlhdGUgdmFsdWUgZnJvbSAwIHRvIDI1NSAoIG4gPSB+TSApLiBSZWxvY2F0aW9uIGltcG9zc2libGU8L3NwYW4+CisgICAgICAgIHMgICA8c3BhbiBjbGFzcz0icm9tYW4iPmltbWVkaWF0ZSB2YWx1ZSBmcm9tIDAgdG8gNzwvc3Bhbj4KKyAgICAgICAgUCAgIDxzcGFuIGNsYXNzPSJyb21hbiI+UG9ydCBhZGRyZXNzIHZhbHVlIGZyb20gMCB0byA2My4gKGluLCBvdXQpPC9zcGFuPgorICAgICAgICBwICAgPHNwYW4gY2xhc3M9InJvbWFuIj5Qb3J0IGFkZHJlc3MgdmFsdWUgZnJvbSAwIHRvIDMxLiAoY2JpLCBzYmksIHNiaWMsIHNiaXMpPC9zcGFuPgorICAgICAgICBLICAgPHNwYW4gY2xhc3M9InJvbWFuIj5pbW1lZGlhdGUgdmFsdWUgZnJvbSAwIHRvIDYzICh1c2VkIGluIGBhZGl3JywgYHNiaXcnKTwvc3Bhbj4KKyAgICAgICAgaSAgIDxzcGFuIGNsYXNzPSJyb21hbiI+aW1tZWRpYXRlIHZhbHVlPC9zcGFuPgorICAgICAgICBsICAgPHNwYW4gY2xhc3M9InJvbWFuIj5zaWduZWQgcGMgcmVsYXRpdmUgb2Zmc2V0IGZyb20gLTY0IHRvIDYzPC9zcGFuPgorICAgICAgICBMICAgPHNwYW4gY2xhc3M9InJvbWFuIj5zaWduZWQgcGMgcmVsYXRpdmUgb2Zmc2V0IGZyb20gLTIwNDggdG8gMjA0Nzwvc3Bhbj4KKyAgICAgICAgaCAgIDxzcGFuIGNsYXNzPSJyb21hbiI+YWJzb2x1dGUgY29kZSBhZGRyZXNzIChjYWxsLCBqbXApPC9zcGFuPgorICAgICAgICBTICAgPHNwYW4gY2xhc3M9InJvbWFuIj5pbW1lZGlhdGUgdmFsdWUgZnJvbSAwIHRvIDcgKFMgPSBzICZsdDsmbHQ7IDQpPC9zcGFuPgorICAgICAgICA/ICAgPHNwYW4gY2xhc3M9InJvbWFuIj51c2UgdGhpcyBvcGNvZGUgZW50cnkgaWYgbm8gcGFyYW1ldGVycywgZWxzZSB1c2UgbmV4dCBvcGNvZGUgZW50cnk8L3NwYW4+CisgICAgIAorICAgICAxMDAxMDEwMDEwMDAxMDAwICAgY2xjCisgICAgIDEwMDEwMTAwMTEwMTEwMDAgICBjbGgKKyAgICAgMTAwMTAxMDAxMTExMTAwMCAgIGNsaQorICAgICAxMDAxMDEwMDEwMTAxMDAwICAgY2xuCisgICAgIDEwMDEwMTAwMTEwMDEwMDAgICBjbHMKKyAgICAgMTAwMTAxMDAxMTEwMTAwMCAgIGNsdAorICAgICAxMDAxMDEwMDEwMTExMDAwICAgY2x2CisgICAgIDEwMDEwMTAwMTAwMTEwMDAgICBjbHoKKyAgICAgMTAwMTAxMDAwMDAwMTAwMCAgIHNlYworICAgICAxMDAxMDEwMDAxMDExMDAwICAgc2VoCisgICAgIDEwMDEwMTAwMDExMTEwMDAgICBzZWkKKyAgICAgMTAwMTAxMDAwMDEwMTAwMCAgIHNlbgorICAgICAxMDAxMDEwMDAxMDAxMDAwICAgc2VzCisgICAgIDEwMDEwMTAwMDExMDEwMDAgICBzZXQKKyAgICAgMTAwMTAxMDAwMDExMTAwMCAgIHNldgorICAgICAxMDAxMDEwMDAwMDExMDAwICAgc2V6CisgICAgIDEwMDEwMTAwMVNTUzEwMDAgICBiY2xyICAgIFMKKyAgICAgMTAwMTAxMDAwU1NTMTAwMCAgIGJzZXQgICAgUworICAgICAxMDAxMDEwMTAwMDAxMDAxICAgaWNhbGwKKyAgICAgMTAwMTAxMDAwMDAwMTAwMSAgIGlqbXAKKyAgICAgMTAwMTAxMDExMTAwMTAwMCAgIGxwbSAgICAgPworICAgICAxMDAxMDAwZGRkZGQwMTArICAgbHBtICAgICByLHoKKyAgICAgMTAwMTAxMDExMTAxMTAwMCAgIGVscG0gICAgPworICAgICAxMDAxMDAwZGRkZGQwMTErICAgZWxwbSAgICByLHoKKyAgICAgMDAwMDAwMDAwMDAwMDAwMCAgIG5vcAorICAgICAxMDAxMDEwMTAwMDAxMDAwICAgcmV0CisgICAgIDEwMDEwMTAxMDAwMTEwMDAgICByZXRpCisgICAgIDEwMDEwMTAxMTAwMDEwMDAgICBzbGVlcAorICAgICAxMDAxMDEwMTEwMDExMDAwICAgYnJlYWsKKyAgICAgMTAwMTAxMDExMDEwMTAwMCAgIHdkcgorICAgICAxMDAxMDEwMTExMTAxMDAwICAgc3BtCisgICAgIDAwMDExMXJkZGRkZHJycnIgICBhZGMgICAgIHIscgorICAgICAwMDAwMTFyZGRkZGRycnJyICAgYWRkICAgICByLHIKKyAgICAgMDAxMDAwcmRkZGRkcnJyciAgIGFuZCAgICAgcixyCisgICAgIDAwMDEwMXJkZGRkZHJycnIgICBjcCAgICAgIHIscgorICAgICAwMDAwMDFyZGRkZGRycnJyICAgY3BjICAgICByLHIKKyAgICAgMDAwMTAwcmRkZGRkcnJyciAgIGNwc2UgICAgcixyCisgICAgIDAwMTAwMXJkZGRkZHJycnIgICBlb3IgICAgIHIscgorICAgICAwMDEwMTFyZGRkZGRycnJyICAgbW92ICAgICByLHIKKyAgICAgMTAwMTExcmRkZGRkcnJyciAgIG11bCAgICAgcixyCisgICAgIDAwMTAxMHJkZGRkZHJycnIgICBvciAgICAgIHIscgorICAgICAwMDAwMTByZGRkZGRycnJyICAgc2JjICAgICByLHIKKyAgICAgMDAwMTEwcmRkZGRkcnJyciAgIHN1YiAgICAgcixyCisgICAgIDAwMTAwMXJkZGRkZHJycnIgICBjbHIgICAgIHIKKyAgICAgMDAwMDExcmRkZGRkcnJyciAgIGxzbCAgICAgcgorICAgICAwMDAxMTFyZGRkZGRycnJyICAgcm9sICAgICByCisgICAgIDAwMTAwMHJkZGRkZHJycnIgICB0c3QgICAgIHIKKyAgICAgMDExMUtLS0tkZGRkS0tLSyAgIGFuZGkgICAgZCxNCisgICAgIDAxMTFLS0tLZGRkZEtLS0sgICBjYnIgICAgIGQsbgorICAgICAxMTEwS0tLS2RkZGRLS0tLICAgbGRpICAgICBkLE0KKyAgICAgMTExMDExMTFkZGRkMTExMSAgIHNlciAgICAgZAorICAgICAwMTEwS0tLS2RkZGRLS0tLICAgb3JpICAgICBkLE0KKyAgICAgMDExMEtLS0tkZGRkS0tLSyAgIHNiciAgICAgZCxNCisgICAgIDAwMTFLS0tLZGRkZEtLS0sgICBjcGkgICAgIGQsTQorICAgICAwMTAwS0tLS2RkZGRLS0tLICAgc2JjaSAgICBkLE0KKyAgICAgMDEwMUtLS0tkZGRkS0tLSyAgIHN1YmkgICAgZCxNCisgICAgIDExMTExMTBycnJycjBzc3MgICBzYnJjICAgIHIscworICAgICAxMTExMTExcnJycnIwc3NzICAgc2JycyAgICByLHMKKyAgICAgMTExMTEwMGRkZGRkMHNzcyAgIGJsZCAgICAgcixzCisgICAgIDExMTExMDFkZGRkZDBzc3MgICBic3QgICAgIHIscworICAgICAxMDExMFBQZGRkZGRQUFBQICAgaW4gICAgICByLFAKKyAgICAgMTAxMTFQUHJycnJyUFBQUCAgIG91dCAgICAgUCxyCisgICAgIDEwMDEwMTEwS0tkZEtLS0sgICBhZGl3ICAgIHcsSworICAgICAxMDAxMDExMUtLZGRLS0tLICAgc2JpdyAgICB3LEsKKyAgICAgMTAwMTEwMDBwcHBwcHNzcyAgIGNiaSAgICAgcCxzCisgICAgIDEwMDExMDEwcHBwcHBzc3MgICBzYmkgICAgIHAscworICAgICAxMDAxMTAwMXBwcHBwc3NzICAgc2JpYyAgICBwLHMKKyAgICAgMTAwMTEwMTFwcHBwcHNzcyAgIHNiaXMgICAgcCxzCisgICAgIDExMTEwMWxsbGxsbGwwMDAgICBicmNjICAgIGwKKyAgICAgMTExMTAwbGxsbGxsbDAwMCAgIGJyY3MgICAgbAorICAgICAxMTExMDBsbGxsbGxsMDAxICAgYnJlcSAgICBsCisgICAgIDExMTEwMWxsbGxsbGwxMDAgICBicmdlICAgIGwKKyAgICAgMTExMTAxbGxsbGxsbDEwMSAgIGJyaGMgICAgbAorICAgICAxMTExMDBsbGxsbGxsMTAxICAgYnJocyAgICBsCisgICAgIDExMTEwMWxsbGxsbGwxMTEgICBicmlkICAgIGwKKyAgICAgMTExMTAwbGxsbGxsbDExMSAgIGJyaWUgICAgbAorICAgICAxMTExMDBsbGxsbGxsMDAwICAgYnJsbyAgICBsCisgICAgIDExMTEwMGxsbGxsbGwxMDAgICBicmx0ICAgIGwKKyAgICAgMTExMTAwbGxsbGxsbDAxMCAgIGJybWkgICAgbAorICAgICAxMTExMDFsbGxsbGxsMDAxICAgYnJuZSAgICBsCisgICAgIDExMTEwMWxsbGxsbGwwMTAgICBicnBsICAgIGwKKyAgICAgMTExMTAxbGxsbGxsbDAwMCAgIGJyc2ggICAgbAorICAgICAxMTExMDFsbGxsbGxsMTEwICAgYnJ0YyAgICBsCisgICAgIDExMTEwMGxsbGxsbGwxMTAgICBicnRzICAgIGwKKyAgICAgMTExMTAxbGxsbGxsbDAxMSAgIGJydmMgICAgbAorICAgICAxMTExMDBsbGxsbGxsMDExICAgYnJ2cyAgICBsCisgICAgIDExMTEwMWxsbGxsbGxzc3MgICBicmJjICAgIHMsbAorICAgICAxMTExMDBsbGxsbGxsc3NzICAgYnJicyAgICBzLGwKKyAgICAgMTEwMUxMTExMTExMTExMTCAgIHJjYWxsICAgTAorICAgICAxMTAwTExMTExMTExMTExMICAgcmptcCAgICBMCisgICAgIDEwMDEwMTBoaGhoaDExMWggICBjYWxsICAgIGgKKyAgICAgMTAwMTAxMGhoaGhoMTEwaCAgIGptcCAgICAgaAorICAgICAxMDAxMDEwcnJycnIwMTAxICAgYXNyICAgICByCisgICAgIDEwMDEwMTBycnJycjAwMDAgICBjb20gICAgIHIKKyAgICAgMTAwMTAxMHJycnJyMTAxMCAgIGRlYyAgICAgcgorICAgICAxMDAxMDEwcnJycnIwMDExICAgaW5jICAgICByCisgICAgIDEwMDEwMTBycnJycjAxMTAgICBsc3IgICAgIHIKKyAgICAgMTAwMTAxMHJycnJyMDAwMSAgIG5lZyAgICAgcgorICAgICAxMDAxMDAwcnJycnIxMTExICAgcG9wICAgICByCisgICAgIDEwMDEwMDFycnJycjExMTEgICBwdXNoICAgIHIKKyAgICAgMTAwMTAxMHJycnJyMDExMSAgIHJvciAgICAgcgorICAgICAxMDAxMDEwcnJycnIwMDEwICAgc3dhcCAgICByCisgICAgIDAwMDAwMDAxZGRkZHJycnIgICBtb3Z3ICAgIHYsdgorICAgICAwMDAwMDAxMGRkZGRycnJyICAgbXVscyAgICBkLGQKKyAgICAgMDAwMDAwMTEwZGRkMHJyciAgIG11bHN1ICAgYSxhCisgICAgIDAwMDAwMDExMGRkZDFycnIgICBmbXVsICAgIGEsYQorICAgICAwMDAwMDAxMTFkZGQwcnJyICAgZm11bHMgICBhLGEKKyAgICAgMDAwMDAwMTExZGRkMXJyciAgIGZtdWxzdSAgYSxhCisgICAgIDEwMDEwMDFkZGRkZDAwMDAgICBzdHMgICAgIGkscgorICAgICAxMDAxMDAwZGRkZGQwMDAwICAgbGRzICAgICByLGkKKyAgICAgMTBvMG9vMGRkZGRkYm9vbyAgIGxkZCAgICAgcixiCisgICAgIDEwMCEwMDBkZGRkZGVlLSsgICBsZCAgICAgIHIsZQorICAgICAxMG8wb28xcnJycnJib29vICAgc3RkICAgICBiLHIKKyAgICAgMTAwITAwMXJycnJyZWUtKyAgIHN0ICAgICAgZSxyCisgICAgIDEwMDEwMTAxMDAwMTEwMDEgICBlaWNhbGwKKyAgICAgMTAwMTAxMDAwMDAxMTAwMSAgIGVpam1wCis8L3ByZT4KKyAgIDwhLS0gQ29weXJpZ2h0IDIwMDUsIDIwMDYsIDIwMDksIDIwMTAsIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVZSLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTExMGRjOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUi1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxNDEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFWUiBPcHRpb25zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBVlJfMDAyZERlcGVuZGVudC5odG1sI0FWUl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQVZSLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFWUi1TeW50YXguaHRtbCNBVlItU3ludGF4IiB0aXRsZT0iQVZSIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFWUi1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFWUi1TeW50YXguaHRtbCNBVlItU3ludGF4Ij5BVlIgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVZSXzAwMmREZXBlbmRlbnQuaHRtbCNBVlJfMDAyZERlcGVuZGVudCI+QVZSLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNS4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1BVlItb3B0aW9ucy1fMDAyOG5vbmVfMDAyOS03MDYiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zLWZvci1BVlItXzAwMjhub25lXzAwMjktNzA3Ij48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1tY3VfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BVlItNzA4Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1tbWN1PTwvY29kZT48dmFyPm1jdTwvdmFyPjxkZD5TcGVjaWZ5IEFUTUVMIEFWUiBpbnN0cnVjdGlvbiBzZXQgb3IgTUNVIHR5cGUuCisKKyAgICAgPHA+SW5zdHJ1Y3Rpb24gc2V0IGF2cjEgaXMgZm9yIHRoZSBtaW5pbWFsIEFWUiBjb3JlLCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDCitjb21waWxlciwgb25seSBmb3IgYXNzZW1ibGVyIHByb2dyYW1zIChNQ1UgdHlwZXM6IGF0OTBzMTIwMCwKK2F0dGlueTExLCBhdHRpbnkxMiwgYXR0aW55MTUsIGF0dGlueTI4KS4KKworICAgICA8cD5JbnN0cnVjdGlvbiBzZXQgYXZyMiAoZGVmYXVsdCkgaXMgZm9yIHRoZSBjbGFzc2ljIEFWUiBjb3JlIHdpdGggdXAgdG8KKzhLIHByb2dyYW0gbWVtb3J5IHNwYWNlIChNQ1UgdHlwZXM6IGF0OTBzMjMxMywgYXQ5MHMyMzIzLCBhdDkwczIzMzMsIGF0OTBzMjM0MywKK2F0dGlueTIyLCBhdHRpbnkyNiwgYXQ5MHM0NDE0LCBhdDkwczQ0MzMsIGF0OTBzNDQzNCwgYXQ5MHM4NTE1LCBhdDkwYzg1MzQsCithdDkwczg1MzUpLgorCisgICAgIDxwPkluc3RydWN0aW9uIHNldCBhdnIyNSBpcyBmb3IgdGhlIGNsYXNzaWMgQVZSIGNvcmUgd2l0aCB1cCB0byA4SyBwcm9ncmFtIG1lbW9yeQorc3BhY2UgcGx1cyB0aGUgTU9WVyBpbnN0cnVjdGlvbiAoTUNVIHR5cGVzOiBhdHRpbnkxMywgYXR0aW55MTNhLCBhdHRpbnkyMzEzLAorYXR0aW55MjMxM2EsIGF0dGlueTI0LCBhdHRpbnkyNGEsIGF0dGlueTQzMTMsIGF0dGlueTQ0LCBhdHRpbnk0NGEsIGF0dGlueTg0LAorYXR0aW55ODRhLCBhdHRpbnkyNSwgYXR0aW55NDUsIGF0dGlueTg1LCBhdHRpbnkyNjEsIGF0dGlueTI2MWEsIGF0dGlueTQ2MSwKK2F0dGlueTQ2MWEsIGF0dGlueTg2MSwgYXR0aW55ODYxYSwgYXR0aW55ODcsIGF0dGlueTQzdSwgYXR0aW55NDgsIGF0dGlueTg4LAorYXQ4NnJmNDAxLCBhdGE2Mjg5KS4KKworICAgICA8cD5JbnN0cnVjdGlvbiBzZXQgYXZyMyBpcyBmb3IgdGhlIGNsYXNzaWMgQVZSIGNvcmUgd2l0aCB1cCB0byAxMjhLIHByb2dyYW0KK21lbW9yeSBzcGFjZSAoTUNVIHR5cGVzOiBhdDQzdXNiMzU1LCBhdDc2YzcxMSkuCisKKyAgICAgPHA+SW5zdHJ1Y3Rpb24gc2V0IGF2cjMxIGlzIGZvciB0aGUgY2xhc3NpYyBBVlIgY29yZSB3aXRoIGV4YWN0bHkgMTI4SyBwcm9ncmFtCittZW1vcnkgc3BhY2UgKE1DVSB0eXBlczogYXRtZWdhMTAzLCBhdDQzdXNiMzIwKS4KKworICAgICA8cD5JbnN0cnVjdGlvbiBzZXQgYXZyMzUgaXMgZm9yIGNsYXNzaWMgQVZSIGNvcmUgcGx1cyBNT1ZXLCBDQUxMLCBhbmQgSk1QCitpbnN0cnVjdGlvbnMgKE1DVSB0eXBlczogYXR0aW55MTY3LCBhdDkwdXNiODIsIGF0OTB1c2IxNjIsIGF0bWVnYTh1MiwKK2F0bWVnYTE2dTIsIGF0bWVnYTMydTIpLgorCisgICAgIDxwPkluc3RydWN0aW9uIHNldCBhdnI0IGlzIGZvciB0aGUgZW5oYW5jZWQgQVZSIGNvcmUgd2l0aCB1cCB0byA4SyBwcm9ncmFtCittZW1vcnkgc3BhY2UgKE1DVSB0eXBlczogYXRtZWdhNDgsIGF0bWVnYTQ4YSwgYXRtZWdhNDhwLCBhdG1lZ2E4LCBhdG1lZ2E4OCwKK2F0bWVnYTg4YSwgYXRtZWdhODhwLCBhdG1lZ2E4OHBhLCBhdG1lZ2E4NTE1LCBhdG1lZ2E4NTM1LCBhdG1lZ2E4aHZhLCBhdDkwcHdtMSwKK2F0OTBwd20yLCBhdDkwcHdtMmIsIGF0OTBwd20zLCBhdDkwcHdtM2IsIGF0OTBwd204MSkuCisKKyAgICAgPHA+SW5zdHJ1Y3Rpb24gc2V0IGF2cjUgaXMgZm9yIHRoZSBlbmhhbmNlZCBBVlIgY29yZSB3aXRoIHVwIHRvIDEyOEsgcHJvZ3JhbQorbWVtb3J5IHNwYWNlIChNQ1UgdHlwZXM6IGF0bWVnYTE2LCBhdG1lZ2ExNmEsIGF0bWVnYTE2MSwgYXRtZWdhMTYyLCBhdG1lZ2ExNjMsCithdG1lZ2ExNjRhLCBhdG1lZ2ExNjRwLCBhdG1lZ2ExNjUsIGF0bWVnYTE2NWEsIGF0bWVnYTE2NXAsIGF0bWVnYTE2OCwKK2F0bWVnYTE2OGEsIGF0bWVnYTE2OHAsIGF0bWVnYTE2OSwgYXRtZWdhMTY5YSwgYXRtZWdhMTY5cCwgYXRtZWdhMTY5cGEsCithdG1lZ2EzMiwgYXRtZWdhMzIzLCBhdG1lZ2EzMjRhLCBhdG1lZ2EzMjRwLCBhdG1lZ2EzMjUsIGF0bWVnYTMyNWEsIGF0bWVnYTMyNXAsCithdG1lZ2EzMjVwYSwgYXRtZWdhMzI1MCwgYXRtZWdhMzI1MGEsIGF0bWVnYTMyNTBwLCBhdG1lZ2EzMjUwcGEsIGF0bWVnYTMyOCwKK2F0bWVnYTMyOHAsIGF0bWVnYTMyOSwgYXRtZWdhMzI5YSwgYXRtZWdhMzI5cCwgYXRtZWdhMzI5cGEsIGF0bWVnYTMyOTAsCithdG1lZ2EzMjkwYSwgYXRtZWdhMzI5MHAsIGF0bWVnYTMyOTBwYSwgYXRtZWdhNDA2LCBhdG1lZ2E2NCwgYXRtZWdhNjQwLAorYXRtZWdhNjQ0LCBhdG1lZ2E2NDRhLCBhdG1lZ2E2NDRwLCBhdG1lZ2E2NDRwYSwgYXRtZWdhNjQ1LCBhdG1lZ2E2NDVhLAorYXRtZWdhNjQ1cCwgYXRtZWdhNjQ1MCwgYXRtZWdhNjQ1MGEsIGF0bWVnYTY0NTBwLCBhdG1lZ2E2NDksIGF0bWVnYTY0OWEsCithdG1lZ2E2NDlwLCBhdG1lZ2E2NDkwLCBhdG1lZ2E2NDkwYSwgYXRtZWdhNjQ5MHAsIGF0bWVnYTE2aHZhLCBhdG1lZ2ExNmh2YTIsCithdG1lZ2ExNmh2YiwgYXRtZWdhMTZodmJyZXZiLCBhdG1lZ2EzMmh2YiwgYXRtZWdhMzJodmJyZXZiLCBhdG1lZ2E2NGh2ZSwKK2F0OTBjYW4zMiwgYXQ5MGNhbjY0LCBhdDkwcHdtMTYxLCBhdDkwcHdtMjE2LCBhdDkwcHdtMzE2LCBhdG1lZ2EzMmMxLAorYXRtZWdhNjRjMSwgYXRtZWdhMTZtMSwgYXRtZWdhMzJtMSwgYXRtZWdhNjRtMSwgYXRtZWdhMTZ1NCwgYXRtZWdhMzJ1NCwKK2F0bWVnYTMydTYsIGF0OTB1c2I2NDYsIGF0OTB1c2I2NDcsIGF0OTRrLCBhdDkwc2NyMTAwKS4KKworICAgICA8cD5JbnN0cnVjdGlvbiBzZXQgYXZyNTEgaXMgZm9yIHRoZSBlbmhhbmNlZCBBVlIgY29yZSB3aXRoIGV4YWN0bHkgMTI4SyBwcm9ncmFtCittZW1vcnkgc3BhY2UgKE1DVSB0eXBlczogYXRtZWdhMTI4LCBhdG1lZ2ExMjgwLCBhdG1lZ2ExMjgxLCBhdG1lZ2ExMjg0cCwKK2F0bWVnYTEyOHJmYTEsIGF0OTBjYW4xMjgsIGF0OTB1c2IxMjg2LCBhdDkwdXNiMTI4NywgbTMwMDApLgorCisgICAgIDxwPkluc3RydWN0aW9uIHNldCBhdnI2IGlzIGZvciB0aGUgZW5oYW5jZWQgQVZSIGNvcmUgd2l0aCBhIDMtYnl0ZSBQQyAoTUNVIHR5cGVzOgorYXRtZWdhMjU2MCwgYXRtZWdhMjU2MSkuCisKKyAgICAgPHA+SW5zdHJ1Y3Rpb24gc2V0IGF2cnhtZWdhMiBpcyBmb3IgdGhlIFhNRUdBIEFWUiBjb3JlIHdpdGggOEsgdG8gNjRLIHByb2dyYW0KK21lbW9yeSBzcGFjZSBhbmQgbGVzcyB0aGFuIDY0SyBkYXRhIHNwYWNlIChNQ1UgdHlwZXM6IGF0eG1lZ2ExNmE0LCBhdHhtZWdhMTZkNCwKK2F0eG1lZ2ExNngxLCBhdHhtZWdhMzJhNCwgYXR4bWVnYTMyZDQsIGF0eG1lZ2EzMngxKS4KKworICAgICA8cD5JbnN0cnVjdGlvbiBzZXQgYXZyeG1lZ2EzIGlzIGZvciB0aGUgWE1FR0EgQVZSIGNvcmUgd2l0aCA4SyB0byA2NEsgcHJvZ3JhbQorbWVtb3J5IHNwYWNlIGFuZCBncmVhdGVyIHRoYW4gNjRLIGRhdGEgc3BhY2UgKE1DVSB0eXBlczogbm9uZSkuCisKKyAgICAgPHA+SW5zdHJ1Y3Rpb24gc2V0IGF2cnhtZWdhNCBpcyBmb3IgdGhlIFhNRUdBIEFWUiBjb3JlIHdpdGggdXAgdG8gNjRLIHByb2dyYW0KK21lbW9yeSBzcGFjZSBhbmQgbGVzcyB0aGFuIDY0SyBkYXRhIHNwYWNlIChNQ1UgdHlwZXM6IGF0eG1lZ2E2NGEzLCBhdHhtZWdhNjRkMykuCisKKyAgICAgPHA+SW5zdHJ1Y3Rpb24gc2V0IGF2cnhtZWdhNSBpcyBmb3IgdGhlIFhNRUdBIEFWUiBjb3JlIHdpdGggdXAgdG8gNjRLIHByb2dyYW0KK21lbW9yeSBzcGFjZSBhbmQgZ3JlYXRlciB0aGFuIDY0SyBkYXRhIHNwYWNlIChNQ1UgdHlwZXM6IGF0eG1lZ2E2NGExLAorYXR4bWVnYTY0YTF1KS4KKworICAgICA8cD5JbnN0cnVjdGlvbiBzZXQgYXZyeG1lZ2E2IGlzIGZvciB0aGUgWE1FR0EgQVZSIGNvcmUgd2l0aCB1cCB0byAyNTZLIHByb2dyYW0KK21lbW9yeSBzcGFjZSBhbmQgbGVzcyB0aGFuIDY0SyBkYXRhIHNwYWNlIChNQ1UgdHlwZXM6IGF0eG1lZ2ExMjhhMywKK2F0eG1lZ2ExMjhkMywgYXR4bWVnYTE5MmEzLCBhdHhtZWdhMTI4YjEsIGF0eG1lZ2ExOTJkMywgYXR4bWVnYTI1NmEzLAorYXR4bWVnYTI1NmEzYiwgYXR4bWVnYTI1NmEzYnUsIGF0eG1lZ2ExOTJkMykuCisKKyAgICAgPHA+SW5zdHJ1Y3Rpb24gc2V0IGF2cnhtZWdhNyBpcyBmb3IgdGhlIFhNRUdBIEFWUiBjb3JlIHdpdGggdXAgdG8gMjU2SyBwcm9ncmFtCittZW1vcnkgc3BhY2UgYW5kIGdyZWF0ZXIgdGhhbiA2NEsgZGF0YSBzcGFjZSAoTUNVIHR5cGVzOiBhdHhtZWdhMTI4YTEsCithdHhtZWdhMTI4YTF1KS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWFsbF8wMDJkb3Bjb2Rlc18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BVlItNzA5Ij48L2E+PGJyPjxkdD48Y29kZT4tbWFsbC1vcGNvZGVzPC9jb2RlPjxkZD5BY2NlcHQgYWxsIEFWUiBvcGNvZGVzLCBldmVuIGlmIG5vdCBzdXBwb3J0ZWQgYnkgPGNvZGU+LW1tY3U8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtbm9fMDAyZHNraXBfMDAyZGJ1Z18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BVlItNzEwIj48L2E+PGJyPjxkdD48Y29kZT4tbW5vLXNraXAtYnVnPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBkaXNhYmxlIHdhcm5pbmdzIGZvciBza2lwcGluZyB0d28td29yZCBpbnN0cnVjdGlvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1ub18wMDJkd3JhcF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BVlItNzExIj48L2E+PGJyPjxkdD48Y29kZT4tbW5vLXdyYXA8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHJlamVjdCA8Y29kZT5yam1wL3JjYWxsPC9jb2RlPiBpbnN0cnVjdGlvbnMgd2l0aCA4SyB3cmFwLWFyb3VuZC4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVZSLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVZSLVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmZkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BVlItU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVZSIFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQVZSXzAwMmREZXBlbmRlbnQuaHRtbCNBVlJfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFWUi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIiB0aXRsZT0iQVZSIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBVlItT3Bjb2Rlcy5odG1sI0FWUi1PcGNvZGVzIiB0aXRsZT0iQVZSIE9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBVlItU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFWUi1PcGNvZGVzLmh0bWwjQVZSLU9wY29kZXMiPkFWUiBPcGNvZGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBVlJfMDAyZERlcGVuZGVudC5odG1sI0FWUl8wMDJkRGVwZW5kZW50Ij5BVlItRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS41LjIgU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkFWUl8wMDJkQ2hhcnMuaHRtbCNBVlJfMDAyZENoYXJzIj5BVlItQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBVlJfMDAyZFJlZ3MuaHRtbCNBVlJfMDAyZFJlZ3MiPkFWUi1SZWdzPC9hPjogICAgICAgICAgICAgICAgICBSZWdpc3RlciBOYW1lcworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iQVZSXzAwMmRNb2RpZmllcnMuaHRtbCNBVlJfMDAyZE1vZGlmaWVycyI+QVZSLU1vZGlmaWVyczwvYT46ICAgICAgICAgICAgIFJlbG9jYXRhYmxlIEV4cHJlc3Npb24gTW9kaWZpZXJzCis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BVlJfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BVlJfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmMWI4MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUl8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BVlItQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFWUi1TeW50YXguaHRtbCNBVlItU3ludGF4IiB0aXRsZT0iQVZSIFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFWUl8wMDJkUmVncy5odG1sI0FWUl8wMDJkUmVncyIgdGl0bGU9IkFWUi1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVZSLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJBVlJfMDAyZENoYXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFWUl8wMDJkUmVncy5odG1sI0FWUl8wMDJkUmVncyI+QVZSLVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBVlItU3ludGF4Lmh0bWwjQVZSLVN5bnRheCI+QVZSIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNS4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLUFWUi03MTIiPjwvYT48YSBuYW1lPSJpbmRleC1BVlItbGluZS1jb21tZW50LWNoYXJhY3Rlci03MTMiPjwvYT4KK1RoZSBwcmVzZW5jZSBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbnl3aGVyZSBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhCitjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoYXQgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSwgdGhlIHdob2xlIGxpbmUKK2lzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNhbiBhbHNvIGJlIGEKK2xvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1BVlItNzE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLUFWUi03MTUiPjwvYT48YSBuYW1lPSJpbmRleC1BVlItbGluZS1zZXBhcmF0b3ItNzE2Ij48L2E+CitUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgbmV3bGluZSB0byBzZXBhcmF0ZQorc3RhdGVtZW50cy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVZSXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUl8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhMjA0MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUl8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVZSLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVJNXzAwMmREZXBlbmRlbnQuaHRtbCNBUk1fMDAyZERlcGVuZGVudCIgdGl0bGU9IkFSTS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJCbGFja2Zpbl8wMDJkRGVwZW5kZW50Lmh0bWwjQmxhY2tmaW5fMDAyZERlcGVuZGVudCIgdGl0bGU9IkJsYWNrZmluLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFWUi1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IkFWUl8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJsYWNrZmluXzAwMmREZXBlbmRlbnQuaHRtbCNCbGFja2Zpbl8wMDJkRGVwZW5kZW50Ij5CbGFja2Zpbi1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50Ij5BUk0tRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjUgQVZSIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUFWUi1zdXBwb3J0LTcwNSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkFWUi1TeW50YXguaHRtbCNBVlItU3ludGF4Ij5BVlIgU3ludGF4PC9hPjogICAgICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJBVlItT3Bjb2Rlcy5odG1sI0FWUi1PcGNvZGVzIj5BVlIgT3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVZSXzAwMmRNb2RpZmllcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUl8wMDJkTW9kaWZpZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzODZiZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUl8wMDJkTW9kaWZpZXJzLmh0bWwKQEAgLTAsMCArMSwxMTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFWUi1Nb2RpZmllcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFWUi1TeW50YXguaHRtbCNBVlItU3ludGF4IiB0aXRsZT0iQVZSIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFWUl8wMDJkUmVncy5odG1sI0FWUl8wMDJkUmVncyIgdGl0bGU9IkFWUi1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVZSLU1vZGlmaWVycyI+PC9hPgorPGEgbmFtZT0iQVZSXzAwMmRNb2RpZmllcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBVlJfMDAyZFJlZ3MuaHRtbCNBVlJfMDAyZFJlZ3MiPkFWUi1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQVZSLVN5bnRheC5odG1sI0FWUi1TeW50YXgiPkFWUiBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjUuMi4zIFJlbG9jYXRhYmxlIEV4cHJlc3Npb24gTW9kaWZpZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtQVZSLW1vZGlmaWVycy03MTkiPjwvYT48YSBuYW1lPSJpbmRleC1zeW50YXhfMDAyYy1BVlItNzIwIj48L2E+CitUaGUgYXNzZW1ibGVyIHN1cHBvcnRzIHNldmVyYWwgbW9kaWZpZXJzIHdoZW4gdXNpbmcgcmVsb2NhdGFibGUgYWRkcmVzc2VzCitpbiBBVlIgaW5zdHJ1Y3Rpb24gb3BlcmFuZHMuICBUaGUgZ2VuZXJhbCBzeW50YXggaXMgdGhlIGZvbGxvd2luZzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIG1vZGlmaWVyKHJlbG9jYXRhYmxlLWV4cHJlc3Npb24pCis8L3ByZT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1zeW1ib2wtbW9kaWZpZXJzLTcyMSI+PC9hPgorPGRsPgorPGR0Pjxjb2RlPmxvODwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGFsbG93cyB5b3UgdG8gdXNlIGJpdHMgMCB0aHJvdWdoIDcgb2YKK2FuIGFkZHJlc3MgZXhwcmVzc2lvbiBhcyA4IGJpdCByZWxvY2F0YWJsZSBleHByZXNzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aGk4PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgYWxsb3dzIHlvdSB0byB1c2UgYml0cyA3IHRocm91Z2ggMTUgb2YgYW4gYWRkcmVzcyBleHByZXNzaW9uCithcyA4IGJpdCByZWxvY2F0YWJsZSBleHByZXNzaW9uLiAgVGhpcyBpcyB1c2VmdWwgd2l0aCwgZm9yIGV4YW1wbGUsIHRoZQorQVZSICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGRpPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9uIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvODwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtb2RpZmllci4KKworICAgICA8cD5Gb3IgZXhhbXBsZQorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGxkaSByMjYsIGxvOChzeW0rMTApCisgICAgICAgICAgbGRpIHIyNywgaGk4KHN5bSsxMCkKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmhoODwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGFsbG93cyB5b3UgdG8gdXNlIGJpdHMgMTYgdGhyb3VnaCAyMyBvZgorYW4gYWRkcmVzcyBleHByZXNzaW9uIGFzIDggYml0IHJlbG9jYXRhYmxlIGV4cHJlc3Npb24uIAorQWxzbywgY2FuIGJlIHVzZWZ1bCBmb3IgbG9hZGluZyAzMiBiaXQgY29uc3RhbnRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aGxvODwvY29kZT48ZGQ+CitTeW5vbnltIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aGg4PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+aGhpODwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGFsbG93cyB5b3UgdG8gdXNlIGJpdHMgMjQgdGhyb3VnaCAzMSBvZgorYW4gZXhwcmVzc2lvbiBhcyA4IGJpdCBleHByZXNzaW9uLiBUaGlzIGlzIHVzZWZ1bCB3aXRoLCBmb3IgZXhhbXBsZSwgdGhlCitBVlIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sZGk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb24gYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG84PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmhpODwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5obG84PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5oaGk4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBtb2RpZmllci4KKworICAgICA8cD5Gb3IgZXhhbXBsZQorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGxkaSByMjYsIGxvOCgyODU3NzQ5MjUpCisgICAgICAgICAgbGRpIHIyNywgaGk4KDI4NTc3NDkyNSkKKyAgICAgICAgICBsZGkgcjI4LCBobG84KDI4NTc3NDkyNSkKKyAgICAgICAgICBsZGkgcjI5LCBoaGk4KDI4NTc3NDkyNSkKKyAgICAgICAgICA7IHIyOSxyMjgscjI3LHIyNiA9IDI4NTc3NDkyNQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+cG1fbG84PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgYWxsb3dzIHlvdSB0byB1c2UgYml0cyAwIHRocm91Z2ggNyBvZgorYW4gYWRkcmVzcyBleHByZXNzaW9uIGFzIDggYml0IHJlbG9jYXRhYmxlIGV4cHJlc3Npb24uIAorVGhpcyBtb2RpZmllciB1c2VmdWwgZm9yIGFkZHJlc3NpbmcgZGF0YSBvciBjb2RlIGZyb20KK0ZsYXNoL1Byb2dyYW0gbWVtb3J5LiBUaGUgdXNpbmcgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wbV9sbzg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2ltaWxhcgordG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sbzg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT5wbV9oaTg8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBhbGxvd3MgeW91IHRvIHVzZSBiaXRzIDggdGhyb3VnaCAxNSBvZgorYW4gYWRkcmVzcyBleHByZXNzaW9uIGFzIDggYml0IHJlbG9jYXRhYmxlIGV4cHJlc3Npb24uIAorVGhpcyBtb2RpZmllciB1c2VmdWwgZm9yIGFkZHJlc3NpbmcgZGF0YSBvciBjb2RlIGZyb20KK0ZsYXNoL1Byb2dyYW0gbWVtb3J5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+cG1faGg4PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgYWxsb3dzIHlvdSB0byB1c2UgYml0cyAxNSB0aHJvdWdoIDIzIG9mCithbiBhZGRyZXNzIGV4cHJlc3Npb24gYXMgOCBiaXQgcmVsb2NhdGFibGUgZXhwcmVzc2lvbi4gCitUaGlzIG1vZGlmaWVyIHVzZWZ1bCBmb3IgYWRkcmVzc2luZyBkYXRhIG9yIGNvZGUgZnJvbQorRmxhc2gvUHJvZ3JhbSBtZW1vcnkuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUl8wMDJkUmVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQVZSXzAwMmRSZWdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyMmZmYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FWUl8wMDJkUmVncy5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFWUi1SZWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBVlItU3ludGF4Lmh0bWwjQVZSLVN5bnRheCIgdGl0bGU9IkFWUiBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBVlJfMDAyZENoYXJzLmh0bWwjQVZSXzAwMmRDaGFycyIgdGl0bGU9IkFWUi1DaGFycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFWUl8wMDJkTW9kaWZpZXJzLmh0bWwjQVZSXzAwMmRNb2RpZmllcnMiIHRpdGxlPSJBVlItTW9kaWZpZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVZSLVJlZ3MiPjwvYT4KKzxhIG5hbWU9IkFWUl8wMDJkUmVncyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBVlJfMDAyZE1vZGlmaWVycy5odG1sI0FWUl8wMDJkTW9kaWZpZXJzIj5BVlItTW9kaWZpZXJzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVZSXzAwMmRDaGFycy5odG1sI0FWUl8wMDJkQ2hhcnMiPkFWUi1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFWUi1TeW50YXguaHRtbCNBVlItU3ludGF4Ij5BVlIgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41LjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFWUi1yZWdpc3Rlci1uYW1lcy03MTciPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLUFWUi03MTgiPjwvYT4KK1RoZSBBVlIgaGFzIDMyIHggOC1iaXQgZ2VuZXJhbCBwdXJwb3NlIHdvcmtpbmcgcmVnaXN0ZXJzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAuLi4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMzE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorU2l4IG9mIHRoZSAzMiByZWdpc3RlcnMgY2FuIGJlIHVzZWQgYXMgdGhyZWUgMTYtYml0IGluZGlyZWN0IGFkZHJlc3MKK3JlZ2lzdGVyIHBvaW50ZXJzIGZvciBEYXRhIFNwYWNlIGFkZHJlc3NpbmcuIE9uZSBvZiB0aGUgdGhlc2UgYWRkcmVzcworcG9pbnRlcnMgY2FuIGFsc28gYmUgdXNlZCBhcyBhbiBhZGRyZXNzIHBvaW50ZXIgZm9yIGxvb2sgdXAgdGFibGVzIGluCitGbGFzaCBwcm9ncmFtIG1lbW9yeS4gVGhlc2UgYWRkZWQgZnVuY3Rpb24gcmVnaXN0ZXJzIGFyZSB0aGUgMTYtYml0CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+WTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5aPC9zcGFuPjwvc2FtcD4mcnNxdW87IC0gcmVnaXN0ZXJzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgWCA9IDxzcGFuIGNsYXNzPSJyb21hbiI+cjI2OnIyNzwvc3Bhbj4KKyAgICAgWSA9IDxzcGFuIGNsYXNzPSJyb21hbiI+cjI4OnIyOTwvc3Bhbj4KKyAgICAgWiA9IDxzcGFuIGNsYXNzPSJyb21hbiI+cjMwOnIzMTwvc3Bhbj4KKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWJvcnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Fib3J0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjZGU4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Fib3J0Lmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QWJvcnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFCT1JULV8wMDI4Q09GRl8wMDI5Lmh0bWwjQUJPUlQtXzAwMjhDT0ZGXzAwMjkiIHRpdGxlPSJBQk9SVCAoQ09GRikiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBYm9ydCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBQk9SVC1fMDAyOENPRkZfMDAyOS5odG1sI0FCT1JULV8wMDI4Q09GRl8wMDI5Ij5BQk9SVCAoQ09GRik8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMSA8Y29kZT4uYWJvcnQ8L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhYm9ydF8wMDdkLWRpcmVjdGl2ZS0yNzIiPjwvYT48YSBuYW1lPSJpbmRleC1zdG9wcGluZy10aGUtYXNzZW1ibHktMjczIj48L2E+VGhpcyBkaXJlY3RpdmUgc3RvcHMgdGhlIGFzc2VtYmx5IGltbWVkaWF0ZWx5LiAgSXQgaXMgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgYXNzZW1ibGVycy4gIFRoZSBvcmlnaW5hbCBpZGVhIHdhcyB0aGF0IHRoZQorYXNzZW1ibHkgbGFuZ3VhZ2Ugc291cmNlIHdvdWxkIGJlIHBpcGVkIGludG8gdGhlIGFzc2VtYmxlci4gIElmIHRoZSBzZW5kZXIKK29mIHRoZSBzb3VyY2UgcXVpdCwgaXQgY291bGQgdXNlIHRoaXMgZGlyZWN0aXZlIHRlbGxzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRvCitxdWl0IGFsc28uICBPbmUgZGF5IDxjb2RlPi5hYm9ydDwvY29kZT4gd2lsbCBub3QgYmUgc3VwcG9ydGVkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Fic29sdXRlLUxpdGVyYWxzLURpcmVjdGl2ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjVhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BYnNvbHV0ZSBMaXRlcmFscyBEaXJlY3RpdmUgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiIHRpdGxlPSJYdGVuc2EgRGlyZWN0aXZlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxpdGVyYWwtUHJlZml4LURpcmVjdGl2ZS5odG1sI0xpdGVyYWwtUHJlZml4LURpcmVjdGl2ZSIgdGl0bGU9IkxpdGVyYWwgUHJlZml4IERpcmVjdGl2ZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFic29sdXRlLUxpdGVyYWxzLURpcmVjdGl2ZSI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxpdGVyYWwtUHJlZml4LURpcmVjdGl2ZS5odG1sI0xpdGVyYWwtUHJlZml4LURpcmVjdGl2ZSI+TGl0ZXJhbCBQcmVmaXggRGlyZWN0aXZlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWHRlbnNhLURpcmVjdGl2ZXMuaHRtbCNYdGVuc2EtRGlyZWN0aXZlcyI+WHRlbnNhIERpcmVjdGl2ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjUwLjUuNyBhYnNvbHV0ZS1saXRlcmFsczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYWJzb2x1dGVfMDAyZGxpdGVyYWxzXzAwN2QtZGlyZWN0aXZlLTIzMjkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vXzAwMmRhYnNvbHV0ZV8wMDJkbGl0ZXJhbHNfMDA3ZC1kaXJlY3RpdmUtMjMzMCI+PC9hPgorVGhlIDxjb2RlPmFic29sdXRlLWxpdGVyYWxzPC9jb2RlPiBhbmQgPGNvZGU+bm8tYWJzb2x1dGUtbGl0ZXJhbHM8L2NvZGU+CitkaXJlY3RpdmVzIGNvbnRyb2wgdGhlIGFic29sdXRlIHZzLiBQQy1yZWxhdGl2ZSBtb2RlIGZvciA8Y29kZT5MMzJSPC9jb2RlPgoraW5zdHJ1Y3Rpb25zLiAgVGhlc2UgYXJlIHJlbGV2YW50IG9ubHkgZm9yIFh0ZW5zYSBjb25maWd1cmF0aW9ucyB0aGF0CitpbmNsdWRlIHRoZSBhYnNvbHV0ZSBhZGRyZXNzaW5nIG9wdGlvbiBmb3IgPGNvZGU+TDMyUjwvY29kZT4gaW5zdHJ1Y3Rpb25zLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIC5iZWdpbiBbbm8tXWFic29sdXRlLWxpdGVyYWxzCisgICAgICAgICAuZW5kIFtuby1dYWJzb2x1dGUtbGl0ZXJhbHMKKzwvcHJlPgorICAgPHA+VGhlc2UgZGlyZWN0aXZlcyBkbyBub3QgY2hhbmdlIHRoZSA8Y29kZT5MMzJSPC9jb2RlPiBtb2RlJm1kYXNoO3RoZXkgb25seSBjYXVzZQordGhlIGFzc2VtYmxlciB0byBlbWl0IHRoZSBhcHByb3ByaWF0ZSBraW5kIG9mIHJlbG9jYXRpb24gZm9yIDxjb2RlPkwzMlI8L2NvZGU+CitpbnN0cnVjdGlvbnMgYW5kIHRvIHBsYWNlIHRoZSBsaXRlcmFsIHZhbHVlcyBpbiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbi4gCitUbyBjaGFuZ2UgdGhlIDxjb2RlPkwzMlI8L2NvZGU+IG1vZGUsIHRoZSBwcm9ncmFtIG11c3Qgd3JpdGUgdGhlCis8Y29kZT5MSVRCQVNFPC9jb2RlPiBzcGVjaWFsIHJlZ2lzdGVyLiAgSXQgaXMgdGhlIHByb2dyYW1tZXIncyByZXNwb25zaWJpbGl0eQordG8ga2VlcCB0cmFjayBvZiB0aGUgbW9kZSBhbmQgaW5kaWNhdGUgdG8gdGhlIGFzc2VtYmxlciB3aGljaCBtb2RlIGlzCit1c2VkIGluIGVhY2ggcmVnaW9uIG9mIGNvZGUuCisKKyAgIDxwPklmIHRoZSBYdGVuc2EgY29uZmlndXJhdGlvbiBpbmNsdWRlcyB0aGUgYWJzb2x1dGUgPGNvZGU+TDMyUjwvY29kZT4gYWRkcmVzc2luZworb3B0aW9uLCB0aGUgZGVmYXVsdCBpcyB0byBhc3N1bWUgYWJzb2x1dGUgPGNvZGU+TDMyUjwvY29kZT4gYWRkcmVzc2luZyB1bmxlc3MKK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tYWJzb2x1dGUtbGl0ZXJhbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZC1saW5lIG9wdGlvbiBpcyBzcGVjaWZpZWQuIAorT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBpcyB0byBhc3N1bWUgUEMtcmVsYXRpdmUgPGNvZGU+TDMyUjwvY29kZT4gYWRkcmVzc2luZy4gCitUaGUgPGNvZGU+YWJzb2x1dGUtbGl0ZXJhbHM8L2NvZGU+IGRpcmVjdGl2ZSBjYW4gdGhlbiBiZSB1c2VkIHRvIG92ZXJyaWRlCit0aGUgZGVmYXVsdCBkZXRlcm1pbmVkIGJ5IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKworPCEtLSBMb2NhbCBWYXJpYWJsZXM6IC0tPgorPCEtLSBmaWxsLWNvbHVtbjogNzIgLS0+Cis8IS0tIEVuZDogLS0+Cis8IS0tIHJldmVyc2UgZWZmZWN0IG9mIEBkb3duIGF0IHRvcCBvZiBnZW5lcmljIE1hY2hpbmUtRGVwIGNoYXB0ZXIgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BY2tub3dsZWRnZW1lbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BY2tub3dsZWRnZW1lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlNzcyZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Fja25vd2xlZGdlbWVudHMuaHRtbApAQCAtMCwwICsxLDE1NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QWNrbm93bGVkZ2VtZW50cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIiB0aXRsZT0iUmVwb3J0aW5nIEJ1Z3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiIHRpdGxlPSJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBY2tub3dsZWRnZW1lbnRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyI+UmVwb3J0aW5nIEJ1Z3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MTEgQWNrbm93bGVkZ2VtZW50czwvaDI+CisKKzxwPklmIHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIEdBUyBhbmQgeW91ciBuYW1lIGlzbid0IGxpc3RlZCBoZXJlLAoraXQgaXMgbm90IG1lYW50IGFzIGEgc2xpZ2h0LiAgV2UganVzdCBkb24ndCBrbm93IGFib3V0IGl0LiAgU2VuZCBtYWlsIHRvIHRoZQorbWFpbnRhaW5lciwgYW5kIHdlJ2xsIGNvcnJlY3QgdGhlIHNpdHVhdGlvbi4gIEN1cnJlbnRseQorPCEtLSAoSmFudWFyeSAxOTk0KSwgLS0+Cit0aGUgbWFpbnRhaW5lciBpcyBLZW4gUmFlYnVybiAoZW1haWwgYWRkcmVzcyA8Y29kZT5yYWVidXJuQGN5Z251cy5jb208L2NvZGU+KS4KKworICAgPHA+RGVhbiBFbHNuZXIgd3JvdGUgdGhlIG9yaWdpbmFsIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBhc3NlbWJsZXIgZm9yIHRoZSBWQVguPGEgcmVsPSJmb290bm90ZSIgaHJlZj0iI2ZuLTEiIG5hbWU9ImZuZC0xIj48c3VwPjE8L3N1cD48L2E+CisKKyAgIDxwPkpheSBGZW5sYXNvbiBtYWludGFpbmVkIEdBUyBmb3IgYSB3aGlsZSwgYWRkaW5nIHN1cHBvcnQgZm9yIEdEQi1zcGVjaWZpYyBkZWJ1ZworaW5mb3JtYXRpb24gYW5kIHRoZSA2OGsgc2VyaWVzIG1hY2hpbmVzLCBtb3N0IG9mIHRoZSBwcmVwcm9jZXNzaW5nIHBhc3MsIGFuZAorZXh0ZW5zaXZlIGNoYW5nZXMgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm1lc3NhZ2VzLmM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmlucHV0LWZpbGUuYzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+d3JpdGUuYzwvc3Bhbj48L3NhbXA+LgorCisgICA8cD5LLiBSaWNoYXJkIFBpeGxleSBtYWludGFpbmVkIEdBUyBmb3IgYSB3aGlsZSwgYWRkaW5nIHZhcmlvdXMgZW5oYW5jZW1lbnRzIGFuZAorbWFueSBidWcgZml4ZXMsIGluY2x1ZGluZyBtZXJnaW5nIHN1cHBvcnQgZm9yIHNldmVyYWwgcHJvY2Vzc29ycywgYnJlYWtpbmcgR0FTCit1cCB0byBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0IGZpbGUgZm9ybWF0IGJhY2sgZW5kcyAoaW5jbHVkaW5nIGhlYXZ5IHJld3JpdGUsCit0ZXN0aW5nLCBhbiBpbnRlZ3JhdGlvbiBvZiB0aGUgY29mZiBhbmQgYi5vdXQgYmFjayBlbmRzKSwgYWRkaW5nIGNvbmZpZ3VyYXRpb24KK2luY2x1ZGluZyBoZWF2eSB0ZXN0aW5nIGFuZCB2ZXJpZmljYXRpb24gb2YgY3Jvc3MgYXNzZW1ibGVycyBhbmQgZmlsZSBzcGxpdHMKK2FuZCByZW5hbWluZywgY29udmVydGVkIEdBUyB0byBzdHJpY3RseSBBTlNJIEMgaW5jbHVkaW5nIGZ1bGwgcHJvdG90eXBlcywgYWRkZWQKK3N1cHBvcnQgZm9yIG02ODBbMzRdMCBhbmQgY3B1MzIsIGRpZCBjb25zaWRlcmFibGUgd29yayBvbiBpOTYwIGluY2x1ZGluZyBhIENPRkYKK3BvcnQgKGluY2x1ZGluZyBjb25zaWRlcmFibGUgYW1vdW50cyBvZiByZXZlcnNlIGVuZ2luZWVyaW5nKSwgYSBTUEFSQyBvcGNvZGUKK2ZpbGUgcmV3cml0ZSwgREVDc3RhdGlvbiwgcnM2MDAwLCBhbmQgaHAzMDBocHV4IGhvc3QgcG9ydHMsIHVwZGF0ZWQgJmxkcXVvO2tub3cmcmRxdW87Cithc3NlcnRpb25zIGFuZCBtYWRlIHRoZW0gd29yaywgbXVjaCBvdGhlciByZW9yZ2FuaXphdGlvbiwgY2xlYW51cCwgYW5kIGxpbnQuCisKKyAgIDxwPktlbiBSYWVidXJuIHdyb3RlIHRoZSBoaWdoLWxldmVsIEJGRCBpbnRlcmZhY2UgY29kZSB0byByZXBsYWNlIG1vc3Qgb2YgdGhlIGNvZGUKK2luIGZvcm1hdC1zcGVjaWZpYyBJL08gbW9kdWxlcy4KKworICAgPHA+VGhlIG9yaWdpbmFsIFZNUyBzdXBwb3J0IHdhcyBjb250cmlidXRlZCBieSBEYXZpZCBMLiBLYXNodGFuLiAgRXJpYyBZb3VuZ2RhbGUKK2hhcyBkb25lIG11Y2ggd29yayB3aXRoIGl0IHNpbmNlLgorCisgICA8cD5UaGUgSW50ZWwgODAzODYgbWFjaGluZSBkZXNjcmlwdGlvbiB3YXMgd3JpdHRlbiBieSBFbGlvdCBEcmVzc2VsaGF1cy4KKworICAgPHA+TWluaCBUcmFuLUxlIGF0IEludGVsbGlDb3JwIGNvbnRyaWJ1dGVkIHNvbWUgQUlYIDM4NiBzdXBwb3J0LgorCisgICA8cD5UaGUgTW90b3JvbGEgODhrIG1hY2hpbmUgZGVzY3JpcHRpb24gd2FzIGNvbnRyaWJ1dGVkIGJ5IERldm9uIEJvd2VuIG9mIEJ1ZmZhbG8KK1VuaXZlcnNpdHkgYW5kIFRvcmJqb3JuIEdyYW5sdW5kIG9mIHRoZSBTd2VkaXNoIEluc3RpdHV0ZSBvZiBDb21wdXRlciBTY2llbmNlLgorCisgICA8cD5LZWl0aCBLbm93bGVzIGF0IHRoZSBPcGVuIFNvZnR3YXJlIEZvdW5kYXRpb24gd3JvdGUgdGhlIG9yaWdpbmFsIE1JUFMgYmFjayBlbmQKKyg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+dGMtbWlwcy5jPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj50Yy1taXBzLmg8L3NwYW4+PC9zYW1wPiksIGFuZCBjb250cmlidXRlZCBSb3NlIGZvcm1hdCBzdXBwb3J0Cisod2hpY2ggaGFzbid0IGJlZW4gbWVyZ2VkIGluIHlldCkuICBSYWxwaCBDYW1wYmVsbCB3b3JrZWQgd2l0aCB0aGUgTUlQUyBjb2RlIHRvCitzdXBwb3J0IGEub3V0IGZvcm1hdC4KKworICAgPHA+U3VwcG9ydCBmb3IgdGhlIFppbG9nIFo4ayBhbmQgUmVuZXNhcyBIOC8zMDAgcHJvY2Vzc29ycyAodGMtejhrLAordGMtaDgzMDApLCBhbmQgSUVFRSA2OTUgb2JqZWN0IGZpbGUgZm9ybWF0IChvYmotaWVlZSksIHdhcyB3cml0dGVuIGJ5CitTdGV2ZSBDaGFtYmVybGFpbiBvZiBDeWdudXMgU3VwcG9ydC4gIFN0ZXZlIGFsc28gbW9kaWZpZWQgdGhlIENPRkYgYmFjayBlbmQgdG8KK3VzZSBCRkQgZm9yIHNvbWUgbG93LWxldmVsIG9wZXJhdGlvbnMsIGZvciB1c2Ugd2l0aCB0aGUgSDgvMzAwIGFuZCBBTUQgMjlrCit0YXJnZXRzLgorCisgICA8cD5Kb2huIEdpbG1vcmUgYnVpbHQgdGhlIEFNRCAyOTAwMCBzdXBwb3J0LCBhZGRlZCA8Y29kZT4uaW5jbHVkZTwvY29kZT4gc3VwcG9ydCwgYW5kCitzaW1wbGlmaWVkIHRoZSBjb25maWd1cmF0aW9uIG9mIHdoaWNoIHZlcnNpb25zIGFjY2VwdCB3aGljaCBkaXJlY3RpdmVzLiAgSGUKK3VwZGF0ZWQgdGhlIDY4ayBtYWNoaW5lIGRlc2NyaXB0aW9uIHNvIHRoYXQgTW90b3JvbGEncyBvcGNvZGVzIGFsd2F5cyBwcm9kdWNlZAorZml4ZWQtc2l6ZSBpbnN0cnVjdGlvbnMgKGUuZy4sIDxjb2RlPmpzcjwvY29kZT4pLCB3aGlsZSBzeW50aGV0aWMgaW5zdHJ1Y3Rpb25zCityZW1haW5lZCBzaHJpbmthYmxlICg8Y29kZT5qYnNyPC9jb2RlPikuICBKb2huIGZpeGVkIG1hbnkgYnVncywgaW5jbHVkaW5nIHRydWUgdGVzdGVkCitjcm9zcy1jb21waWxhdGlvbiBzdXBwb3J0LCBhbmQgb25lIGJ1ZyBpbiByZWxheGF0aW9uIHRoYXQgdG9vayBhIHdlZWsgYW5kCityZXF1aXJlZCB0aGUgcHJvdmVyYmlhbCBvbmUtYml0IGZpeC4KKworICAgPHA+SWFuIExhbmNlIFRheWxvciBvZiBDeWdudXMgU3VwcG9ydCBtZXJnZWQgdGhlIE1vdG9yb2xhIGFuZCBNSVQgc3ludGF4IGZvciB0aGUKKzY4aywgY29tcGxldGVkIHN1cHBvcnQgZm9yIHNvbWUgQ09GRiB0YXJnZXRzICg2OGssIGkzODYgU1ZSMywgYW5kIFNDTyBVbml4KSwKK2FkZGVkIHN1cHBvcnQgZm9yIE1JUFMgRUNPRkYgYW5kIEVMRiB0YXJnZXRzLCB3cm90ZSB0aGUgaW5pdGlhbCBSUy82MDAwIGFuZAorUG93ZXJQQyBhc3NlbWJsZXIsIGFuZCBtYWRlIGEgZmV3IG90aGVyIG1pbm9yIHBhdGNoZXMuCisKKyAgIDxwPlN0ZXZlIENoYW1iZXJsYWluIG1hZGUgR0FTIGFibGUgdG8gZ2VuZXJhdGUgbGlzdGluZ3MuCisKKyAgIDxwPkhld2xldHQtUGFja2FyZCBjb250cmlidXRlZCBzdXBwb3J0IGZvciB0aGUgSFA5MDAwLzMwMC4KKworICAgPHA+SmVmZiBMYXcgd3JvdGUgR0FTIGFuZCBCRkQgc3VwcG9ydCBmb3IgdGhlIG5hdGl2ZSBIUFBBIG9iamVjdCBmb3JtYXQgKFNPTSkKK2Fsb25nIHdpdGggYSBmYWlybHkgZXh0ZW5zaXZlIEhQUEEgdGVzdHN1aXRlIChmb3IgYm90aCBTT00gYW5kIEVMRiBvYmplY3QKK2Zvcm1hdHMpLiAgVGhpcyB3b3JrIHdhcyBzdXBwb3J0ZWQgYnkgYm90aCB0aGUgQ2VudGVyIGZvciBTb2Z0d2FyZSBTY2llbmNlIGF0Cit0aGUgVW5pdmVyc2l0eSBvZiBVdGFoIGFuZCBDeWdudXMgU3VwcG9ydC4KKworICAgPHA+U3VwcG9ydCBmb3IgRUxGIGZvcm1hdCBmaWxlcyBoYXMgYmVlbiB3b3JrZWQgb24gYnkgTWFyayBFaWNoaW4gb2YgQ3lnbnVzCitTdXBwb3J0IChvcmlnaW5hbCwgaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBmb3IgU1BBUkMpLCBQZXRlIEhvb2dlbmJvb20gYW5kCitKZWZmIExhdyBhdCB0aGUgVW5pdmVyc2l0eSBvZiBVdGFoIChIUFBBIG1haW5seSksIE1pY2hhZWwgTWVpc3NuZXIgb2YgdGhlIE9wZW4KK1NvZnR3YXJlIEZvdW5kYXRpb24gKGkzODYgbWFpbmx5KSwgYW5kIEtlbiBSYWVidXJuIG9mIEN5Z251cyBTdXBwb3J0IChzcGFyYywKK2FuZCBzb21lIGluaXRpYWwgNjQtYml0IHN1cHBvcnQpLgorCisgICA8cD5MaW5hcyBWZXBzdGFzIGFkZGVkIEdBUyBzdXBwb3J0IGZvciB0aGUgRVNBLzM5MCAmbGRxdW87SUJNIDM3MCZyZHF1bzsgYXJjaGl0ZWN0dXJlLgorCisgICA8cD5SaWNoYXJkIEhlbmRlcnNvbiByZXdyb3RlIHRoZSBBbHBoYSBhc3NlbWJsZXIuIEtsYXVzIEthZW1wZiB3cm90ZSBHQVMgYW5kIEJGRAorc3VwcG9ydCBmb3Igb3BlblZNUy9BbHBoYS4KKworICAgPHA+VGltb3RoeSBXYWxsLCBNaWNoYWVsIEhheWVzLCBhbmQgR3JlZyBTbWFydCBjb250cmlidXRlZCB0byB0aGUgdmFyaW91cyB0aWMqCitmbGF2b3JzLgorCisgICA8cD5EYXZpZCBIZWluZSwgU3RlcmxpbmcgQXVndXN0aW5lLCBCb2IgV2lsc29uIGFuZCBKb2huIFJ1dHRlbmJlcmcgZnJvbSBUZW5zaWxpY2EsCitJbmMuIGFkZGVkIHN1cHBvcnQgZm9yIFh0ZW5zYSBwcm9jZXNzb3JzLgorCisgICA8cD5TZXZlcmFsIGVuZ2luZWVycyBhdCBDeWdudXMgU3VwcG9ydCBoYXZlIGFsc28gcHJvdmlkZWQgbWFueSBzbWFsbCBidWcgZml4ZXMgYW5kCitjb25maWd1cmF0aW9uIGVuaGFuY2VtZW50cy4KKworICAgPHA+Sm9uIEJlbmlzdG9uIGFkZGVkIHN1cHBvcnQgZm9yIHRoZSBMYXR0aWNlIE1pY28zMiBhcmNoaXRlY3R1cmUuCisKKyAgIDxwPk1hbnkgb3RoZXJzIGhhdmUgY29udHJpYnV0ZWQgbGFyZ2Ugb3Igc21hbGwgYnVnZml4ZXMgYW5kIGVuaGFuY2VtZW50cy4gIElmCit5b3UgaGF2ZSBjb250cmlidXRlZCBzaWduaWZpY2FudCB3b3JrIGFuZCBhcmUgbm90IG1lbnRpb25lZCBvbiB0aGlzIGxpc3QsIGFuZAord2FudCB0byBiZSwgbGV0IHVzIGtub3cuICBTb21lIG9mIHRoZSBoaXN0b3J5IGhhcyBiZWVuIGxvc3Q7IHdlIGFyZSBub3QKK2ludGVudGlvbmFsbHkgbGVhdmluZyBhbnlvbmUgb3V0LgorCisgICA8ZGl2IGNsYXNzPSJmb290bm90ZSI+Cis8aHI+Cis8aDQ+Rm9vdG5vdGVzPC9oND48cCBjbGFzcz0iZm9vdG5vdGUiPjxzbWFsbD5bPGEgbmFtZT0iZm4tMSIgaHJlZj0iI2ZuZC0xIj4xPC9hPl08L3NtYWxsPiBBbnkKK21vcmUgZGV0YWlscz88L3A+CisKKyAgIDxocj48L2Rpdj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxpZ24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FsaWduLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4YmY0OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FsaWduLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QWxpZ24gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFCT1JULV8wMDI4Q09GRl8wMDI5Lmh0bWwjQUJPUlQtXzAwMjhDT0ZGXzAwMjkiIHRpdGxlPSJBQk9SVCAoQ09GRikiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBbHRtYWNyby5odG1sI0FsdG1hY3JvIiB0aXRsZT0iQWx0bWFjcm8iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBbGlnbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBbHRtYWNyby5odG1sI0FsdG1hY3JvIj5BbHRtYWNybzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFCT1JULV8wMDI4Q09GRl8wMDI5Lmh0bWwjQUJPUlQtXzAwMjhDT0ZGXzAwMjkiPkFCT1JUIChDT0ZGKTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4zIDxjb2RlPi5hbGlnbiA8L2NvZGU+PHZhcj5hYnMtZXhwcjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YWJzLWV4cHI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcGFkZGluZy10aGUtbG9jYXRpb24tY291bnRlci0yNzUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFsaWduXzAwN2QtZGlyZWN0aXZlLTI3NiI+PC9hPlBhZCB0aGUgbG9jYXRpb24gY291bnRlciAoaW4gdGhlIGN1cnJlbnQgc3Vic2VjdGlvbikgdG8gYSBwYXJ0aWN1bGFyIHN0b3JhZ2UKK2JvdW5kYXJ5LiAgVGhlIGZpcnN0IGV4cHJlc3Npb24gKHdoaWNoIG11c3QgYmUgYWJzb2x1dGUpIGlzIHRoZSBhbGlnbm1lbnQKK3JlcXVpcmVkLCBhcyBkZXNjcmliZWQgYmVsb3cuCisKKyAgIDxwPlRoZSBzZWNvbmQgZXhwcmVzc2lvbiAoYWxzbyBhYnNvbHV0ZSkgZ2l2ZXMgdGhlIGZpbGwgdmFsdWUgdG8gYmUgc3RvcmVkIGluIHRoZQorcGFkZGluZyBieXRlcy4gIEl0IChhbmQgdGhlIGNvbW1hKSBtYXkgYmUgb21pdHRlZC4gIElmIGl0IGlzIG9taXR0ZWQsIHRoZQorcGFkZGluZyBieXRlcyBhcmUgbm9ybWFsbHkgemVyby4gIEhvd2V2ZXIsIG9uIHNvbWUgc3lzdGVtcywgaWYgdGhlIHNlY3Rpb24gaXMKK21hcmtlZCBhcyBjb250YWluaW5nIGNvZGUgYW5kIHRoZSBmaWxsIHZhbHVlIGlzIG9taXR0ZWQsIHRoZSBzcGFjZSBpcyBmaWxsZWQKK3dpdGggbm8tb3AgaW5zdHJ1Y3Rpb25zLgorCisgICA8cD5UaGUgdGhpcmQgZXhwcmVzc2lvbiBpcyBhbHNvIGFic29sdXRlLCBhbmQgaXMgYWxzbyBvcHRpb25hbC4gIElmIGl0IGlzIHByZXNlbnQsCitpdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBzaG91bGQgYmUgc2tpcHBlZCBieSB0aGlzIGFsaWdubWVudAorZGlyZWN0aXZlLiAgSWYgZG9pbmcgdGhlIGFsaWdubWVudCB3b3VsZCByZXF1aXJlIHNraXBwaW5nIG1vcmUgYnl0ZXMgdGhhbiB0aGUKK3NwZWNpZmllZCBtYXhpbXVtLCB0aGVuIHRoZSBhbGlnbm1lbnQgaXMgbm90IGRvbmUgYXQgYWxsLiAgWW91IGNhbiBvbWl0IHRoZQorZmlsbCB2YWx1ZSAodGhlIHNlY29uZCBhcmd1bWVudCkgZW50aXJlbHkgYnkgc2ltcGx5IHVzaW5nIHR3byBjb21tYXMgYWZ0ZXIgdGhlCityZXF1aXJlZCBhbGlnbm1lbnQ7IHRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0aGUgYWxpZ25tZW50IHRvIGJlIGZpbGxlZAord2l0aCBuby1vcCBpbnN0cnVjdGlvbnMgd2hlbiBhcHByb3ByaWF0ZS4KKworICAgPHA+VGhlIHdheSB0aGUgcmVxdWlyZWQgYWxpZ25tZW50IGlzIHNwZWNpZmllZCB2YXJpZXMgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLiAKK0ZvciB0aGUgYXJjLCBocHBhLCBpMzg2IHVzaW5nIEVMRiwgaTg2MCwgaXEyMDAwLCBtNjhrLCBvcjMyLAorczM5MCwgc3BhcmMsIHRpYzR4LCB0aWM4MCBhbmQgeHRlbnNhLCB0aGUgZmlyc3QgZXhwcmVzc2lvbiBpcyB0aGUKK2FsaWdubWVudCByZXF1ZXN0IGluIGJ5dGVzLiAgRm9yIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYWxpZ24gODwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhZHZhbmNlcwordGhlIGxvY2F0aW9uIGNvdW50ZXIgdW50aWwgaXQgaXMgYSBtdWx0aXBsZSBvZiA4LiAgSWYgdGhlIGxvY2F0aW9uIGNvdW50ZXIKK2lzIGFscmVhZHkgYSBtdWx0aXBsZSBvZiA4LCBubyBjaGFuZ2UgaXMgbmVlZGVkLiAgRm9yIHRoZSB0aWM1NHgsIHRoZQorZmlyc3QgZXhwcmVzc2lvbiBpcyB0aGUgYWxpZ25tZW50IHJlcXVlc3QgaW4gd29yZHMuCisKKyAgIDxwPkZvciBvdGhlciBzeXN0ZW1zLCBpbmNsdWRpbmcgcHBjLCBpMzg2IHVzaW5nIGEub3V0IGZvcm1hdCwgYXJtIGFuZAorc3Ryb25nYXJtLCBpdCBpcyB0aGUKK251bWJlciBvZiBsb3ctb3JkZXIgemVybyBiaXRzIHRoZSBsb2NhdGlvbiBjb3VudGVyIG11c3QgaGF2ZSBhZnRlcgorYWR2YW5jZW1lbnQuICBGb3IgZXhhbXBsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5hbGlnbiAzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFkdmFuY2VzIHRoZSBsb2NhdGlvbgorY291bnRlciB1bnRpbCBpdCBhIG11bHRpcGxlIG9mIDguICBJZiB0aGUgbG9jYXRpb24gY291bnRlciBpcyBhbHJlYWR5IGEKK211bHRpcGxlIG9mIDgsIG5vIGNoYW5nZSBpcyBuZWVkZWQuCisKKyAgIDxwPlRoaXMgaW5jb25zaXN0ZW5jeSBpcyBkdWUgdG8gdGhlIGRpZmZlcmVudCBiZWhhdmlvcnMgb2YgdGhlIHZhcmlvdXMKK25hdGl2ZSBhc3NlbWJsZXJzIGZvciB0aGVzZSBzeXN0ZW1zIHdoaWNoIEdBUyBtdXN0IGVtdWxhdGUuIAorR0FTIGFsc28gcHJvdmlkZXMgPGNvZGU+LmJhbGlnbjwvY29kZT4gYW5kIDxjb2RlPi5wMmFsaWduPC9jb2RlPiBkaXJlY3RpdmVzLAorZGVzY3JpYmVkIGxhdGVyLCB3aGljaCBoYXZlIGEgY29uc2lzdGVudCBiZWhhdmlvciBhY3Jvc3MgYWxsCithcmNoaXRlY3R1cmVzIChidXQgYXJlIHNwZWNpZmljIHRvIEdBUykuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FscGhhLURpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FscGhhLURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQwMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGEtRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsMTYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbHBoYSBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFscGhhLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFscGhhLUZsb2F0aW5nLVBvaW50Lmh0bWwjQWxwaGEtRmxvYXRpbmctUG9pbnQiIHRpdGxlPSJBbHBoYSBGbG9hdGluZyBQb2ludCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFscGhhLU9wY29kZXMuaHRtbCNBbHBoYS1PcGNvZGVzIiB0aXRsZT0iQWxwaGEgT3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFscGhhLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQWxwaGEtT3Bjb2Rlcy5odG1sI0FscGhhLU9wY29kZXMiPkFscGhhIE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBbHBoYS1GbG9hdGluZy1Qb2ludC5odG1sI0FscGhhLUZsb2F0aW5nLVBvaW50Ij5BbHBoYSBGbG9hdGluZyBQb2ludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFscGhhXzAwMmREZXBlbmRlbnQuaHRtbCNBbHBoYV8wMDJkRGVwZW5kZW50Ij5BbHBoYS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjIuNSBBbHBoYSBBc3NlbWJsZXIgRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGZvciB0aGUgQWxwaGEgc3VwcG9ydHMgbWFueSBhZGRpdGlvbmFsIGRpcmVjdGl2ZXMgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggdGhlIG5hdGl2ZSBhc3NlbWJsZXIuICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZW0gb25seQorYnJpZWZseS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtQWxwaGFfMDAyZG9ubHktZGlyZWN0aXZlcy01NzUiPjwvYT5UaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgZGlyZWN0aXZlcyBpbiA8Y29kZT5hczwvY29kZT4gZm9yIHRoZSBBbHBoYToKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LmFyY2ggPC9jb2RlPjx2YXI+Y3B1PC92YXI+PGRkPlNwZWNpZmllcyB0aGUgdGFyZ2V0IHByb2Nlc3Nvci4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tPC9zcGFuPjx2YXI+Y3B1PC92YXI+PC9zYW1wPiBjb21tYW5kLWxpbmUgb3B0aW9uLiAgU2VlIDxhIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNBbHBoYS1PcHRpb25zIj5PcHRpb25zPC9hPiwKK2ZvciBhIGxpc3Qgb2YgdmFsdWVzIGZvciA8dmFyPmNwdTwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5lbnQgPC9jb2RlPjx2YXI+ZnVuY3Rpb248L3Zhcj48Y29kZT5bLCA8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+TWFyayB0aGUgYmVnaW5uaW5nIG9mIDx2YXI+ZnVuY3Rpb248L3Zhcj4uICBBbiBvcHRpb25hbCBudW1iZXIgbWF5IGZvbGxvdyBmb3IKK2NvbXBhdGliaWxpdHkgd2l0aCB0aGUgT1NGLzEgYXNzZW1ibGVyLCBidXQgaXMgaWdub3JlZC4gIFdoZW4gZ2VuZXJhdGluZworPGNvZGU+Lm1kZWJ1ZzwvY29kZT4gaW5mb3JtYXRpb24sIHRoaXMgd2lsbCBjcmVhdGUgYSBwcm9jZWR1cmUgZGVzY3JpcHRvciBmb3IKK3RoZSBmdW5jdGlvbi4gIEluIEVMRiwgaXQgd2lsbCBtYXJrIHRoZSBzeW1ib2wgYXMgYSBmdW5jdGlvbiBhLWxhIHRoZQorZ2VuZXJpYyA8Y29kZT4udHlwZTwvY29kZT4gZGlyZWN0aXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmVuZCA8L2NvZGU+PHZhcj5mdW5jdGlvbjwvdmFyPjxkZD5NYXJrIHRoZSBlbmQgb2YgPHZhcj5mdW5jdGlvbjwvdmFyPi4gIEluIEVMRiwgaXQgd2lsbCBzZXQgdGhlIHNpemUgb2YgdGhlIHN5bWJvbAorYS1sYSB0aGUgZ2VuZXJpYyA8Y29kZT4uc2l6ZTwvY29kZT4gZGlyZWN0aXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Lm1hc2sgPC9jb2RlPjx2YXI+bWFzazwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+b2Zmc2V0PC92YXI+PGRkPkluZGljYXRlIHdoaWNoIG9mIHRoZSBpbnRlZ2VyIHJlZ2lzdGVycyBhcmUgc2F2ZWQgaW4gdGhlIGN1cnJlbnQKK2Z1bmN0aW9uJ3Mgc3RhY2sgZnJhbWUuICA8dmFyPm1hc2s8L3Zhcj4gaXMgaW50ZXJwcmV0ZWQgYSBiaXQgbWFzayBpbiB3aGljaAorYml0IDx2YXI+bjwvdmFyPiBzZXQgaW5kaWNhdGVzIHRoYXQgcmVnaXN0ZXIgPHZhcj5uPC92YXI+IGlzIHNhdmVkLiAgVGhlIHJlZ2lzdGVycworYXJlIHNhdmVkIGluIGEgYmxvY2sgbG9jYXRlZCA8dmFyPm9mZnNldDwvdmFyPiBieXRlcyBmcm9tIHRoZSA8ZGZuPmNhbm9uaWNhbAorZnJhbWUgYWRkcmVzczwvZGZuPiAoQ0ZBKSB3aGljaCBpcyB0aGUgdmFsdWUgb2YgdGhlIHN0YWNrIHBvaW50ZXIgb24gZW50cnkgdG8KK3RoZSBmdW5jdGlvbi4gIFRoZSByZWdpc3RlcnMgYXJlIHNhdmVkIHNlcXVlbnRpYWxseSwgZXhjZXB0IHRoYXQgdGhlCityZXR1cm4gYWRkcmVzcyByZWdpc3RlciAobm9ybWFsbHkgPGNvZGU+JDI2PC9jb2RlPikgaXMgc2F2ZWQgZmlyc3QuCisKKyAgICAgPHA+VGhpcyBhbmQgdGhlIG90aGVyIGRpcmVjdGl2ZXMgdGhhdCBkZXNjcmliZSB0aGUgc3RhY2sgZnJhbWUgYXJlCitjdXJyZW50bHkgb25seSB1c2VkIHdoZW4gZ2VuZXJhdGluZyA8Y29kZT4ubWRlYnVnPC9jb2RlPiBpbmZvcm1hdGlvbi4gIFRoZXkKK21heSBpbiB0aGUgZnV0dXJlIGJlIHVzZWQgdG8gZ2VuZXJhdGUgRFdBUkYyIDxjb2RlPi5kZWJ1Z19mcmFtZTwvY29kZT4gdW53aW5kCitpbmZvcm1hdGlvbiBmb3IgaGFuZCB3cml0dGVuIGFzc2VtYmx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmZtYXNrIDwvY29kZT48dmFyPm1hc2s8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjxkZD5JbmRpY2F0ZSB3aGljaCBvZiB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIGFyZSBzYXZlZCBpbiB0aGUgY3VycmVudAorc3RhY2sgZnJhbWUuICBUaGUgPHZhcj5tYXNrPC92YXI+IGFuZCA8dmFyPm9mZnNldDwvdmFyPiBwYXJhbWV0ZXJzIGFyZSBpbnRlcnByZXRlZAorYXMgd2l0aCA8Y29kZT4ubWFzazwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZnJhbWUgPC9jb2RlPjx2YXI+ZnJhbWVyZWc8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmZyYW1lb2Zmc2V0PC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yZXRyZWc8L3Zhcj48Y29kZT5bLCA8L2NvZGU+PHZhcj5hcmdvZmZzZXQ8L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5EZXNjcmliZXMgdGhlIHNoYXBlIG9mIHRoZSBzdGFjayBmcmFtZS4gIFRoZSBmcmFtZSBwb2ludGVyIGluIHVzZSBpcworPHZhcj5mcmFtZXJlZzwvdmFyPjsgbm9ybWFsbHkgdGhpcyBpcyBlaXRoZXIgPGNvZGU+JGZwPC9jb2RlPiBvciA8Y29kZT4kc3A8L2NvZGU+LiAgVGhlCitmcmFtZSBwb2ludGVyIGlzIDx2YXI+ZnJhbWVvZmZzZXQ8L3Zhcj4gYnl0ZXMgYmVsb3cgdGhlIENGQS4gIFRoZSByZXR1cm4KK2FkZHJlc3MgaXMgaW5pdGlhbGx5IGxvY2F0ZWQgaW4gPHZhcj5yZXRyZWc8L3Zhcj4gdW50aWwgaXQgaXMgc2F2ZWQgYXMKK2luZGljYXRlZCBpbiA8Y29kZT4ubWFzazwvY29kZT4uICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIE9TRi8xIGFuIG9wdGlvbmFsCis8dmFyPmFyZ29mZnNldDwvdmFyPiBwYXJhbWV0ZXIgaXMgYWNjZXB0ZWQgYW5kIGlnbm9yZWQuICBJdCBpcyBiZWxpZXZlZCB0bworaW5kaWNhdGUgdGhlIG9mZnNldCBmcm9tIHRoZSBDRkEgdG8gdGhlIHNhdmVkIGFyZ3VtZW50IHJlZ2lzdGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5wcm9sb2d1ZSA8L2NvZGU+PHZhcj5uPC92YXI+PGRkPkluZGljYXRlIHRoYXQgdGhlIHN0YWNrIGZyYW1lIGlzIHNldCB1cCBhbmQgYWxsIHJlZ2lzdGVycyBoYXZlIGJlZW4KK3NwaWxsZWQuICBUaGUgYXJndW1lbnQgPHZhcj5uPC92YXI+IGluZGljYXRlcyB3aGV0aGVyIGFuZCBob3cgdGhlIGZ1bmN0aW9uCit1c2VzIHRoZSBpbmNvbWluZyA8ZGZuPnByb2NlZHVyZSB2ZWN0b3I8L2Rmbj4gKHRoZSBhZGRyZXNzIG9mIHRoZSBjYWxsZWQKK2Z1bmN0aW9uKSBpbiA8Y29kZT4kMjc8L2NvZGU+LiAgMCBpbmRpY2F0ZXMgdGhhdCA8Y29kZT4kMjc8L2NvZGU+IGlzIG5vdCB1c2VkOyAxCitpbmRpY2F0ZXMgdGhhdCB0aGUgZmlyc3QgdHdvIGluc3RydWN0aW9ucyBvZiB0aGUgZnVuY3Rpb24gdXNlIDxjb2RlPiQyNzwvY29kZT4KK3RvIHBlcmZvcm0gYSBsb2FkIG9mIHRoZSBHUCByZWdpc3RlcjsgMiBpbmRpY2F0ZXMgdGhhdCA8Y29kZT4kMjc8L2NvZGU+IGlzCit1c2VkIGluIHNvbWUgbm9uLXN0YW5kYXJkIHdheSBhbmQgc28gdGhlIGxpbmtlciBjYW5ub3QgZWxpZGUgdGhlIGxvYWQgb2YKK3RoZSBwcm9jZWR1cmUgdmVjdG9yIGR1cmluZyByZWxheGF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LnVzZXB2IDwvY29kZT48dmFyPmZ1bmN0aW9uPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj53aGljaDwvdmFyPjxkZD5Vc2VkIHRvIGluZGljYXRlIHRoZSB1c2Ugb2YgdGhlIDxjb2RlPiQyNzwvY29kZT4gcmVnaXN0ZXIsIHNpbWlsYXIgdG8KKzxjb2RlPi5wcm9sb2d1ZTwvY29kZT4sIGJ1dCB3aXRob3V0IHRoZSBvdGhlciBzZW1hbnRpY3Mgb2YgbmVlZGluZyB0bworYmUgaW5zaWRlIGFuIG9wZW4gPGNvZGU+LmVudDwvY29kZT4vPGNvZGU+LmVuZDwvY29kZT4gYmxvY2suCisKKyAgICAgPHA+VGhlIDx2YXI+d2hpY2g8L3Zhcj4gYXJndW1lbnQgc2hvdWxkIGJlIGVpdGhlciA8Y29kZT5ubzwvY29kZT4sIGluZGljYXRpbmcgdGhhdAorPGNvZGU+JDI3PC9jb2RlPiBpcyBub3QgdXNlZCwgb3IgPGNvZGU+c3RkPC9jb2RlPiwgaW5kaWNhdGluZyB0aGF0IHRoZSBmaXJzdCB0d28KK2luc3RydWN0aW9ucyBvZiB0aGUgZnVuY3Rpb24gcGVyZm9ybSBhIEdQIGxvYWQuCisKKyAgICAgPHA+T25lIG1pZ2h0IHVzZSB0aGlzIGRpcmVjdGl2ZSBpbnN0ZWFkIG9mIDxjb2RlPi5wcm9sb2d1ZTwvY29kZT4gaWYgeW91IGFyZQorYWxzbyB1c2luZyBkd2FyZjIgQ0ZJIGRpcmVjdGl2ZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZ3ByZWwzMiA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGRkPkNvbXB1dGVzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGFkZHJlc3MgaW4gPHZhcj5leHByZXNzaW9uPC92YXI+IGFuZCB0aGUKK0dQIGZvciB0aGUgY3VycmVudCBvYmplY3QgZmlsZSwgYW5kIHN0b3JlcyBpdCBpbiA0IGJ5dGVzLiAgSW4gYWRkaXRpb24KK3RvIGJlaW5nIHNtYWxsZXIgdGhhbiBhIGZ1bGwgOCBieXRlIGFkZHJlc3MsIHRoaXMgYWxzbyBkb2VzIG5vdCByZXF1aXJlCithIGR5bmFtaWMgcmVsb2NhdGlvbiB3aGVuIHVzZWQgaW4gYSBzaGFyZWQgbGlicmFyeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi50X2Zsb2F0aW5nIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48ZGQ+U3RvcmVzIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPiBhcyBhbiA8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+IGRvdWJsZSBwcmVjaXNpb24gdmFsdWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4uc19mbG9hdGluZyA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGRkPlN0b3JlcyA8dmFyPmV4cHJlc3Npb248L3Zhcj4gYXMgYW4gPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPiBzaW5nbGUgcHJlY2lzaW9uIHZhbHVlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmZfZmxvYXRpbmcgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD5TdG9yZXMgPHZhcj5leHByZXNzaW9uPC92YXI+IGFzIGEgVkFYIEYgZm9ybWF0IHZhbHVlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmdfZmxvYXRpbmcgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD5TdG9yZXMgPHZhcj5leHByZXNzaW9uPC92YXI+IGFzIGEgVkFYIEcgZm9ybWF0IHZhbHVlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmRfZmxvYXRpbmcgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD5TdG9yZXMgPHZhcj5leHByZXNzaW9uPC92YXI+IGFzIGEgVkFYIEQgZm9ybWF0IHZhbHVlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LnNldCA8L2NvZGU+PHZhcj5mZWF0dXJlPC92YXI+PGRkPkVuYWJsZXMgb3IgZGlzYWJsZXMgdmFyaW91cyBhc3NlbWJsZXIgZmVhdHVyZXMuICBVc2luZyB0aGUgcG9zaXRpdmUKK25hbWUgb2YgdGhlIGZlYXR1cmUgZW5hYmxlcyB3aGlsZSB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vPC9zcGFuPjx2YXI+ZmVhdHVyZTwvdmFyPjwvc2FtcD4mcnNxdW87IGRpc2FibGVzLgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmF0PC9jb2RlPjxkZD5JbmRpY2F0ZXMgdGhhdCBtYWNybyBleHBhbnNpb25zIG1heSBjbG9iYmVyIHRoZSA8ZGZuPmFzc2VtYmxlcgordGVtcG9yYXJ5PC9kZm4+ICg8Y29kZT4kYXQ8L2NvZGU+IG9yIDxjb2RlPiQyODwvY29kZT4pIHJlZ2lzdGVyLiAgU29tZSBtYWNyb3MgbWF5IG5vdCBiZQorZXhwYW5kZWQgd2l0aG91dCB0aGlzIGFuZCB3aWxsIGdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UgaWYgPGNvZGU+bm9hdDwvY29kZT4KK2lzIGluIGVmZmVjdC4gIFdoZW4gPGNvZGU+YXQ8L2NvZGU+IGlzIGluIGVmZmVjdCwgYSB3YXJuaW5nIHdpbGwgYmUgZ2VuZXJhdGVkCitpZiA8Y29kZT4kYXQ8L2NvZGU+IGlzIHVzZWQgYnkgdGhlIHByb2dyYW1tZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1hY3JvPC9jb2RlPjxkZD5FbmFibGVzIHRoZSBleHBhbnNpb24gb2YgbWFjcm8gaW5zdHJ1Y3Rpb25zLiAgTm90ZSB0aGF0IHZhcmlhbnRzIG9mIHJlYWwKK2luc3RydWN0aW9ucywgc3VjaCBhcyA8Y29kZT5iciBsYWJlbDwvY29kZT4gdnMgPGNvZGU+YnIgJDMxLGxhYmVsPC9jb2RlPiBhcmUKK2NvbnNpZGVyZWQgYWx0ZXJuYXRlIGZvcm1zIGFuZCBub3QgbWFjcm9zLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tb3ZlPC9jb2RlPjxkdD48Y29kZT5yZW9yZGVyPC9jb2RlPjxkdD48Y29kZT52b2xhdGlsZTwvY29kZT48ZGQ+VGhlc2UgY29udHJvbCB3aGV0aGVyIGFuZCBob3cgdGhlIGFzc2VtYmxlciBtYXkgcmUtb3JkZXIgaW5zdHJ1Y3Rpb25zLiAKK0FjY2VwdGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE9TRi8xIGFzc2VtYmxlciwgYnV0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+Citkb2VzIG5vdCBkbyBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLCBzbyB0aGVzZSBmZWF0dXJlcyBhcmUgaWdub3JlZC4gCis8L2RsPgorICAgICA8L2RsPgorCisgICA8cD5UaGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgYXJlIHJlY29nbml6ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgT1NGLzEKK2Fzc2VtYmxlciBidXQgYXJlIGlnbm9yZWQuCisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgLnByb2MgICAgICAgICAgIC5hcHJvYworICAgICAucmVndXNlICAgICAgICAgLmxpdmVyZWcKKyAgICAgLm9wdGlvbiAgICAgICAgIC5hZW50CisgICAgIC51Z2VuICAgICAgICAgICAuZWZsYWcKKyAgICAgLmFsaWFzICAgICAgICAgIC5ub2FsaWFzCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FscGhhLUZsb2F0aW5nLVBvaW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYS1GbG9hdGluZy1Qb2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YWRlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYS1GbG9hdGluZy1Qb2ludC5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFscGhhIEZsb2F0aW5nIFBvaW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFscGhhLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFscGhhLVN5bnRheC5odG1sI0FscGhhLVN5bnRheCIgdGl0bGU9IkFscGhhIFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFscGhhLURpcmVjdGl2ZXMuaHRtbCNBbHBoYS1EaXJlY3RpdmVzIiB0aXRsZT0iQWxwaGEgRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFscGhhLUZsb2F0aW5nLVBvaW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFscGhhLURpcmVjdGl2ZXMuaHRtbCNBbHBoYS1EaXJlY3RpdmVzIj5BbHBoYSBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQWxwaGEtU3ludGF4Lmh0bWwjQWxwaGEtU3ludGF4Ij5BbHBoYSBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCI+QWxwaGEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yLjQgRmxvYXRpbmcgUG9pbnQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLUFscGhhLV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktNTczIj48L2E+PGEgbmFtZT0iaW5kZXgtQWxwaGEtZmxvYXRpbmctcG9pbnQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS01NzQiPjwvYT5UaGUgQWxwaGEgZmFtaWx5IHVzZXMgYm90aCA8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+IGFuZCBWQVggZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGEtTm90ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FscGhhLU5vdGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM4ZmIyYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FscGhhLU5vdGVzLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QWxwaGEgTm90ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFscGhhXzAwMmREZXBlbmRlbnQuaHRtbCNBbHBoYV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQWxwaGEtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiIHRpdGxlPSJBbHBoYSBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQWxwaGEtTm90ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiPkFscGhhIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCI+QWxwaGEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yLjEgTm90ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1BbHBoYS1ub3Rlcy01NDkiPjwvYT48YSBuYW1lPSJpbmRleC1ub3Rlcy1mb3ItQWxwaGEtNTUwIj48L2E+CitUaGUgZG9jdW1lbnRhdGlvbiBoZXJlIGlzIHByaW1hcmlseSBmb3IgdGhlIEVMRiBvYmplY3QgZm9ybWF0LiAKKzxjb2RlPmFzPC9jb2RlPiBhbHNvIHN1cHBvcnRzIHRoZSBFQ09GRiBhbmQgRVZBWCBmb3JtYXRzLCBidXQKK2ZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZXNlIGZvcm1hdHMgYXJlIG5vdCB5ZXQgZG9jdW1lbnRlZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGEtT3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGEtT3Bjb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ODE3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYS1PcGNvZGVzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QWxwaGEgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQWxwaGFfMDAyZERlcGVuZGVudC5odG1sI0FscGhhXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJBbHBoYS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBbHBoYS1EaXJlY3RpdmVzLmh0bWwjQWxwaGEtRGlyZWN0aXZlcyIgdGl0bGU9IkFscGhhIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBbHBoYS1PcGNvZGVzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQWxwaGEtRGlyZWN0aXZlcy5odG1sI0FscGhhLURpcmVjdGl2ZXMiPkFscGhhIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCI+QWxwaGEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yLjYgT3Bjb2RlczwvaDQ+CisKKzxwPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgQWxwaGEgbWFjaGluZSBpbnN0cnVjdGlvbiBzZXQsIHNlZSB0aGUKKzwhLS0gQXR0ZW1wdCB0byB3b3JrIGFyb3VuZCBhIHZlcnkgb3ZlcmZ1bGwgaGJveC4gLS0+Cis8YSBocmVmPSJmdHA6Ly9mdHAuZGlnaXRhbC5jb20vcHViL0RpZ2l0YWwvaW5mby9zZW1pY29uZHVjdG9yL2xpdGVyYXR1cmUvYWxwaGFhaGIucGRmIj5BbHBoYSBBcmNoaXRlY3R1cmUgSGFuZGJvb2s8L2E+LgorCis8IS0tIENvcHlyaWdodCAyMDAwLCAyMDAxLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGEtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGEtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZDJkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFscGhhIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFscGhhXzAwMmREZXBlbmRlbnQuaHRtbCNBbHBoYV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQWxwaGEtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWxwaGEtTm90ZXMuaHRtbCNBbHBoYS1Ob3RlcyIgdGl0bGU9IkFscGhhIE5vdGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQWxwaGEtU3ludGF4Lmh0bWwjQWxwaGEtU3ludGF4IiB0aXRsZT0iQWxwaGEgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQWxwaGEtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBbHBoYS1TeW50YXguaHRtbCNBbHBoYS1TeW50YXgiPkFscGhhIFN5bnRheDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFscGhhLU5vdGVzLmh0bWwjQWxwaGEtTm90ZXMiPkFscGhhIE5vdGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQWxwaGFfMDAyZERlcGVuZGVudC5odG1sI0FscGhhXzAwMmREZXBlbmRlbnQiPkFscGhhLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMi4yIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1BbHBoYS1vcHRpb25zLTU1MSI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtZm9yLUFscGhhLTU1MiI+PC9hPgorPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbV8wMDQwdmFyXzAwN2JjcHVfMDA3ZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BbHBoYS01NTMiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LW08L2NvZGU+PHZhcj5jcHU8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiAgSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvCithc3NlbWJsZSBhbiBpbnN0cnVjdGlvbiB3aGljaCB3aWxsIG5vdCBleGVjdXRlIG9uIHRoZSB0YXJnZXQgcHJvY2Vzc29yLAordGhlIGFzc2VtYmxlciBtYXkgZWl0aGVyIGV4cGFuZCB0aGUgaW5zdHJ1Y3Rpb24gYXMgYSBtYWNybyBvciBpc3N1ZSBhbgorZXJyb3IgbWVzc2FnZS4gIFRoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIDxjb2RlPi5hcmNoPC9jb2RlPiBkaXJlY3RpdmUuCisKKyAgICAgPHA+VGhlIGZvbGxvd2luZyBwcm9jZXNzb3IgbmFtZXMgYXJlIHJlY29nbml6ZWQ6Cis8Y29kZT4yMTA2NDwvY29kZT4sCis8Y29kZT4yMTA2NGE8L2NvZGU+LAorPGNvZGU+MjEwNjY8L2NvZGU+LAorPGNvZGU+MjEwNjg8L2NvZGU+LAorPGNvZGU+MjExNjQ8L2NvZGU+LAorPGNvZGU+MjExNjRhPC9jb2RlPiwKKzxjb2RlPjIxMTY0cGM8L2NvZGU+LAorPGNvZGU+MjEyNjQ8L2NvZGU+LAorPGNvZGU+MjEyNjRhPC9jb2RlPiwKKzxjb2RlPjIxMjY0YjwvY29kZT4sCis8Y29kZT5ldjQ8L2NvZGU+LAorPGNvZGU+ZXY1PC9jb2RlPiwKKzxjb2RlPmxjYTQ1PC9jb2RlPiwKKzxjb2RlPmV2NTwvY29kZT4sCis8Y29kZT5ldjU2PC9jb2RlPiwKKzxjb2RlPnBjYTU2PC9jb2RlPiwKKzxjb2RlPmV2NjwvY29kZT4sCis8Y29kZT5ldjY3PC9jb2RlPiwKKzxjb2RlPmV2Njg8L2NvZGU+LiAKK1RoZSBzcGVjaWFsIG5hbWUgPGNvZGU+YWxsPC9jb2RlPiBtYXkgYmUgdXNlZCB0byBhbGxvdyB0aGUgYXNzZW1ibGVyIHRvIGFjY2VwdAoraW5zdHJ1Y3Rpb25zIHZhbGlkIGZvciBhbnkgQWxwaGEgcHJvY2Vzc29yLgorCisgICAgIDxwPkluIG9yZGVyIHRvIHN1cHBvcnQgZXhpc3RpbmcgcHJhY3RpY2UgaW4gT1NGLzEgd2l0aCByZXNwZWN0IHRvIDxjb2RlPi5hcmNoPC9jb2RlPiwKK2FuZCBleGlzdGluZyBwcmFjdGljZSB3aXRoaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPk1JTE88L3NwYW4+PC9zYW1wPiAodGhlIExpbnV4IEFSQyBib290bG9hZGVyKSwgdGhlCitudW1iZXJlZCBwcm9jZXNzb3IgbmFtZXMgKGUuZy4gMjEwNjQpIGVuYWJsZSB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIFBBTGNvZGUKK2luc3RydWN0aW9ucywgd2hpbGUgdGhlICZsZHF1bztlbGVjdHJvLXZsYXNpYyZyZHF1bzsgbmFtZXMgKGUuZy4gPGNvZGU+ZXY0PC9jb2RlPikgZG8gbm90LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtZGVidWdfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQWxwaGEtNTU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG5vXzAwMmRtZGVidWdfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQWxwaGEtNTU1Ij48L2E+PGJyPjxkdD48Y29kZT4tbWRlYnVnPC9jb2RlPjxkdD48Y29kZT4tbm8tbWRlYnVnPC9jb2RlPjxkZD5FbmFibGVzIG9yIGRpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIDxjb2RlPi5tZGVidWc8L2NvZGU+IGVuY2Fwc3VsYXRpb24gZm9yCitzdGFicyBkaXJlY3RpdmVzIGFuZCBwcm9jZWR1cmUgZGVzY3JpcHRvcnMuICBUaGUgZGVmYXVsdCBpcyB0byBhdXRvbWF0aWNhbGx5CitlbmFibGUgPGNvZGU+Lm1kZWJ1ZzwvY29kZT4gd2hlbiB0aGUgZmlyc3Qgc3RhYnMgZGlyZWN0aXZlIGlzIHNlZW4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHJlbGF4XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFscGhhLTU1NiI+PC9hPjxicj48ZHQ+PGNvZGU+LXJlbGF4PC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBmb3JjZXMgYWxsIHJlbG9jYXRpb25zIHRvIGJlIHB1dCBpbnRvIHRoZSBvYmplY3QgZmlsZSwgaW5zdGVhZAorb2Ygc2F2aW5nIHNwYWNlIGFuZCByZXNvbHZpbmcgc29tZSByZWxvY2F0aW9ucyBhdCBhc3NlbWJseSB0aW1lLiAgTm90ZSB0aGF0Cit0aGlzIG9wdGlvbiBkb2VzIG5vdCBwcm9wYWdhdGUgYWxsIHN5bWJvbCBhcml0aG1ldGljIGludG8gdGhlIG9iamVjdCBmaWxlLAorYmVjYXVzZSBub3QgYWxsIHN5bWJvbCBhcml0aG1ldGljIGNhbiBiZSByZXByZXNlbnRlZC4gIEhvd2V2ZXIsIHRoZSBvcHRpb24KK2NhbiBzdGlsbCBiZSB1c2VmdWwgaW4gc3BlY2lmaWMgYXBwbGljYXRpb25zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRyZXBsYWNlXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFscGhhLTU1NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRub3JlcGxhY2VfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQWxwaGEtNTU4Ij48L2E+PGJyPjxkdD48Y29kZT4tcmVwbGFjZTwvY29kZT48ZHQ+PGNvZGU+LW5vcmVwbGFjZTwvY29kZT48ZGQ+RW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgb3B0aW1pemF0aW9uIG9mIHByb2NlZHVyZSBjYWxscywgYm90aCBhdCBhc3NlbWJsYWdlCithbmQgYXQgbGluayB0aW1lLiAgVGhlc2Ugb3B0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgZm9yIFZNUyB0YXJnZXRzIGFuZAorPGNvZGU+LXJlcGxhY2U8L2NvZGU+IGlzIHRoZSBkZWZhdWx0LiAgU2VlIHNlY3Rpb24gMS40LjEgb2YgdGhlIE9wZW5WTVMgTGlua2VyCitVdGlsaXR5IE1hbnVhbC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkZ18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BbHBoYS01NTkiPjwvYT48YnI+PGR0Pjxjb2RlPi1nPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBpcyB1c2VkIHdoZW4gdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBkZWJ1ZyBpbmZvcm1hdGlvbi4gIFdoZW4KKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiBpcyB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bWlwcy10ZmlsZTwvc3Bhbj48L3NhbXA+IHRvIGdlbmVyYXRlIGRlYnVnCitpbmZvcm1hdGlvbiBmb3IgRUNPRkYsIGxvY2FsIGxhYmVscyBtdXN0IGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBvYmplY3QKK2ZpbGUuICBPdGhlcndpc2UgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkR18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BbHBoYS01NjAiPjwvYT48YnI+PGR0Pjxjb2RlPi1HPC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxkZD5BIGxvY2FsIGNvbW1vbiBzeW1ib2wgbGFyZ2VyIHRoYW4gPHZhcj5zaXplPC92YXI+IGlzIHBsYWNlZCBpbiA8Y29kZT4uYnNzPC9jb2RlPiwKK3doaWxlIHNtYWxsZXIgc3ltYm9scyBhcmUgcGxhY2VkIGluIDxjb2RlPi5zYnNzPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkRl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1BbHBoYS01NjEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkMzJhZGRyXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUFscGhhLTU2MiI+PC9hPjxicj48ZHQ+PGNvZGU+LUY8L2NvZGU+PGR0Pjxjb2RlPi0zMmFkZHI8L2NvZGU+PGRkPlRoZXNlIG9wdGlvbnMgYXJlIGlnbm9yZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIAorPC9kbD4KKyAgIDwhLS0gbWFuIGVuZCAtLT4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtQWxwaGEtU3ludGF4LTU2MyI+PC9hPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYS1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FscGhhLVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OWEyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYS1TeW50YXguaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbHBoYSBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFscGhhXzAwMmREZXBlbmRlbnQuaHRtbCNBbHBoYV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQWxwaGEtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiIHRpdGxlPSJBbHBoYSBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQWxwaGEtRmxvYXRpbmctUG9pbnQuaHRtbCNBbHBoYS1GbG9hdGluZy1Qb2ludCIgdGl0bGU9IkFscGhhIEZsb2F0aW5nIFBvaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQWxwaGEtU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFscGhhLUZsb2F0aW5nLVBvaW50Lmh0bWwjQWxwaGEtRmxvYXRpbmctUG9pbnQiPkFscGhhIEZsb2F0aW5nIFBvaW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiPkFscGhhIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCI+QWxwaGEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yLjMgU3ludGF4PC9oND4KKworPHA+VGhlIGFzc2VtYmxlciBzeW50YXggY2xvc2VseSBmb2xsb3cgdGhlIEFscGhhIFJlZmVyZW5jZSBNYW51YWw7Cithc3NlbWJsZXIgZGlyZWN0aXZlcyBhbmQgZ2VuZXJhbCBzeW50YXggY2xvc2VseSBmb2xsb3cgdGhlIE9TRi8xIGFuZAorT3BlblZNUyBzeW50YXgsIHdpdGggYSBmZXcgZGlmZmVyZW5jZXMgZm9yIEVMRi4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkFscGhhXzAwMmRDaGFycy5odG1sI0FscGhhXzAwMmRDaGFycyI+QWxwaGEtQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBbHBoYV8wMDJkUmVncy5odG1sI0FscGhhXzAwMmRSZWdzIj5BbHBoYS1SZWdzPC9hPjogICAgICAgICAgICAgICAgICBSZWdpc3RlciBOYW1lcworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iQWxwaGFfMDAyZFJlbG9jcy5odG1sI0FscGhhXzAwMmRSZWxvY3MiPkFscGhhLVJlbG9jczwvYT46ICAgICAgICAgICAgICAgIFJlbG9jYXRpb25zCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYV8wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FscGhhXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZDkyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYV8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbHBoYS1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQWxwaGEtU3ludGF4Lmh0bWwjQWxwaGEtU3ludGF4IiB0aXRsZT0iQWxwaGEgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQWxwaGFfMDAyZFJlZ3MuaHRtbCNBbHBoYV8wMDJkUmVncyIgdGl0bGU9IkFscGhhLVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBbHBoYS1DaGFycyI+PC9hPgorPGEgbmFtZT0iQWxwaGFfMDAyZENoYXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFscGhhXzAwMmRSZWdzLmh0bWwjQWxwaGFfMDAyZFJlZ3MiPkFscGhhLVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBbHBoYS1TeW50YXguaHRtbCNBbHBoYS1TeW50YXgiPkFscGhhIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMi4zLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLUFscGhhLTU2NCI+PC9hPjxhIG5hbWU9ImluZGV4LUFscGhhLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItNTY1Ij48L2E+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRoZSBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyLiAgTm90ZSB0aGF0IGlmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB0aGUKK2ZpcnN0IGNoYXJhY3RlciBvbiBhIGxpbmUgdGhlbiBpdCBjYW4gYWxzbyBiZSBhIGxvZ2ljYWwgbGluZSBudW1iZXIKK2RpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IgY29udHJvbAorY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtQWxwaGEtNTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLUFscGhhLTU2NyI+PC9hPjxhIG5hbWU9ImluZGV4LUFscGhhLWxpbmUtc2VwYXJhdG9yLTU2OCI+PC9hPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgbmV3bGluZSB0byBzZXBhcmF0ZSBzdGF0ZW1lbnRzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4ZmFlYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FscGhhXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbHBoYS1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFBcmNoNjRfMDAyZERlcGVuZGVudC5odG1sI0FBcmNoNjRfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFBcmNoNjQtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNBUkNfMDAyZERlcGVuZGVudCIgdGl0bGU9IkFSQy1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBbHBoYS1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IkFscGhhXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNBUkNfMDAyZERlcGVuZGVudCI+QVJDLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFBcmNoNjRfMDAyZERlcGVuZGVudC5odG1sI0FBcmNoNjRfMDAyZERlcGVuZGVudCI+QUFyY2g2NC1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMiBBbHBoYSBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1BbHBoYS1zdXBwb3J0LTU0OCI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQWxwaGEtTm90ZXMuaHRtbCNBbHBoYS1Ob3RlcyI+QWxwaGEgTm90ZXM8L2E+OiAgICAgICAgICAgICAgICAgTm90ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkFscGhhLU9wdGlvbnMuaHRtbCNBbHBoYS1PcHRpb25zIj5BbHBoYSBPcHRpb25zPC9hPjogICAgICAgICAgICAgICBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJBbHBoYS1TeW50YXguaHRtbCNBbHBoYS1TeW50YXgiPkFscGhhIFN5bnRheDwvYT46ICAgICAgICAgICAgICAgIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iQWxwaGEtRmxvYXRpbmctUG9pbnQuaHRtbCNBbHBoYS1GbG9hdGluZy1Qb2ludCI+QWxwaGEgRmxvYXRpbmcgUG9pbnQ8L2E+OiAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkFscGhhLURpcmVjdGl2ZXMuaHRtbCNBbHBoYS1EaXJlY3RpdmVzIj5BbHBoYSBEaXJlY3RpdmVzPC9hPjogICAgICAgICAgICBBbHBoYSBNYWNoaW5lIERpcmVjdGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkFscGhhLU9wY29kZXMuaHRtbCNBbHBoYS1PcGNvZGVzIj5BbHBoYSBPcGNvZGVzPC9hPjogICAgICAgICAgICAgICBPcGNvZGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYV8wMDJkUmVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGFfMDAyZFJlZ3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDQ0MjdiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGFfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbHBoYS1SZWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBbHBoYS1TeW50YXguaHRtbCNBbHBoYS1TeW50YXgiIHRpdGxlPSJBbHBoYSBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBbHBoYV8wMDJkQ2hhcnMuaHRtbCNBbHBoYV8wMDJkQ2hhcnMiIHRpdGxlPSJBbHBoYS1DaGFycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFscGhhXzAwMmRSZWxvY3MuaHRtbCNBbHBoYV8wMDJkUmVsb2NzIiB0aXRsZT0iQWxwaGEtUmVsb2NzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQWxwaGEtUmVncyI+PC9hPgorPGEgbmFtZT0iQWxwaGFfMDAyZFJlZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQWxwaGFfMDAyZFJlbG9jcy5odG1sI0FscGhhXzAwMmRSZWxvY3MiPkFscGhhLVJlbG9jczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFscGhhXzAwMmRDaGFycy5odG1sI0FscGhhXzAwMmRDaGFycyI+QWxwaGEtQ2hhcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBbHBoYS1TeW50YXguaHRtbCNBbHBoYS1TeW50YXgiPkFscGhhIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMi4zLjIgUmVnaXN0ZXIgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1BbHBoYS1yZWdpc3RlcnMtNTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXItbmFtZXNfMDAyYy1BbHBoYS01NzAiPjwvYT4KK1RoZSAzMiBpbnRlZ2VyIHJlZ2lzdGVycyBhcmUgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87IG9yCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiRyPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87LiAgSW4gYWRkaXRpb24sIHJlZ2lzdGVycyAxNSwgMjgsIDI5LCBhbmQgMzAgbWF5CitiZSByZWZlcnJlZCB0byBieSB0aGUgc3ltYm9scyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiRmcDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JGdwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JHNwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlc3BlY3RpdmVseS4KKworICAgPHA+VGhlIDMyIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBhcmUgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kZjwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGFfMDAyZFJlbG9jcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWxwaGFfMDAyZFJlbG9jcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzJjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHBoYV8wMDJkUmVsb2NzLmh0bWwKQEAgLTAsMCArMSwxODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFscGhhLVJlbG9jcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQWxwaGEtU3ludGF4Lmh0bWwjQWxwaGEtU3ludGF4IiB0aXRsZT0iQWxwaGEgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWxwaGFfMDAyZFJlZ3MuaHRtbCNBbHBoYV8wMDJkUmVncyIgdGl0bGU9IkFscGhhLVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBbHBoYS1SZWxvY3MiPjwvYT4KKzxhIG5hbWU9IkFscGhhXzAwMmRSZWxvY3MiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBbHBoYV8wMDJkUmVncy5odG1sI0FscGhhXzAwMmRSZWdzIj5BbHBoYS1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQWxwaGEtU3ludGF4Lmh0bWwjQWxwaGEtU3ludGF4Ij5BbHBoYSBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjIuMy4zIFJlbG9jYXRpb25zPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtQWxwaGEtcmVsb2NhdGlvbnMtNTcxIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVsb2NhdGlvbnNfMDAyYy1BbHBoYS01NzIiPjwvYT4KK1NvbWUgb2YgdGhlc2UgcmVsb2NhdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgRUNPRkYsIGJ1dCBtb3N0bHkKK29ubHkgZm9yIEVMRi4gIFRoZXkgYXJlIG1vZGVsZWQgYWZ0ZXIgdGhlIHJlbG9jYXRpb24gZm9ybWF0CitpbnRyb2R1Y2VkIGluIERpZ2l0YWwgVW5peCA0LjAsIGJ1dCB0aGVyZSBhcmUgYWRkaXRpb25zLgorCisgICA8cD5UaGUgZm9ybWF0IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ITwvc3Bhbj48dmFyPnRhZzwvdmFyPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ITwvc3Bhbj48dmFyPnRhZzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjx2YXI+bnVtYmVyPC92YXI+PC9zYW1wPiZyc3F1bzsKK3doZXJlIDx2YXI+dGFnPC92YXI+IGlzIHRoZSBuYW1lIG9mIHRoZSByZWxvY2F0aW9uLiAgSW4gc29tZSBjYXNlcworPHZhcj5udW1iZXI8L3Zhcj4gaXMgdXNlZCB0byByZWxhdGUgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLgorCisgICA8cD5UaGUgcmVsb2NhdGlvbiBpcyBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb24gbGlrZSBzbzoKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBsZGFoICAkMCxhKCQyOSkgICAgIWdwcmVsaGlnaAorICAgICBsZGEgICAkMCxhKCQwKSAgICAgIWdwcmVsbG93CisgICAgIGxkcSAgICQxLGIoJDI5KSAgICAhbGl0ZXJhbCExMDAKKyAgICAgbGRsICAgJDIsMCgkMSkgICAgICFsaXR1c2VfYmFzZSExMDAKKzwvcHJlPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+IWxpdGVyYWw8L2NvZGU+PGR0Pjxjb2RlPiFsaXRlcmFsITwvY29kZT48dmFyPk48L3Zhcj48ZGQ+VXNlZCB3aXRoIGFuIDxjb2RlPmxkcTwvY29kZT4gaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgYWRkcmVzcyBvZiBhIHN5bWJvbAorZnJvbSB0aGUgR09ULgorCisgICAgIDxwPkEgc2VxdWVuY2UgbnVtYmVyIDx2YXI+TjwvdmFyPiBpcyBvcHRpb25hbCwgYW5kIGlmIHByZXNlbnQgaXMgdXNlZCB0byBwYWlyCis8Y29kZT5saXR1c2U8L2NvZGU+IHJlbG9jYXRpb25zIHdpdGggdGhpcyA8Y29kZT5saXRlcmFsPC9jb2RlPiByZWxvY2F0aW9uLiAgVGhlCis8Y29kZT5saXR1c2U8L2NvZGU+IHJlbG9jYXRpb25zIGFyZSB1c2VkIGJ5IHRoZSBsaW5rZXIgdG8gb3B0aW1pemUgdGhlIGNvZGUKK2Jhc2VkIG9uIHRoZSBmaW5hbCBsb2NhdGlvbiBvZiB0aGUgc3ltYm9sLgorCisgICAgIDxwPk5vdGUgdGhhdCB0aGVzZSBvcHRpbWl6YXRpb25zIGFyZSBkZXBlbmRlbnQgb24gdGhlIGRhdGEgZmxvdyBvZiB0aGUKK3Byb2dyYW0uICBUaGVyZWZvcmUsIGlmIDxlbT5hbnk8L2VtPiA8Y29kZT5saXR1c2U8L2NvZGU+IGlzIHBhaXJlZCB3aXRoIGEKKzxjb2RlPmxpdGVyYWw8L2NvZGU+IHJlbG9jYXRpb24sIHRoZW4gPGVtPmFsbDwvZW0+IHVzZXMgb2YgdGhlIHJlZ2lzdGVyIHNldCBieQordGhlIDxjb2RlPmxpdGVyYWw8L2NvZGU+IGluc3RydWN0aW9uIG11c3QgYWxzbyBiZSBtYXJrZWQgd2l0aCA8Y29kZT5saXR1c2U8L2NvZGU+CityZWxvY2F0aW9ucy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgb3JpZ2luYWwgPGNvZGU+bGl0ZXJhbDwvY29kZT4gaW5zdHJ1Y3Rpb24KK21heSBiZSBkZWxldGVkIG9yIHRyYW5zZm9ybWVkIGludG8gYW5vdGhlciBpbnN0cnVjdGlvbi4KKworICAgICA8cD5BbHNvIG5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXAgYmV0d2VlbgorPGNvZGU+bGl0ZXJhbDwvY29kZT4gYW5kIDxjb2RlPmxpdHVzZTwvY29kZT4sIGJ1dCBub3QgYSBtYW55LXRvLW9uZS4gIFRoYXQgaXMsIGlmCit0aGVyZSBhcmUgdHdvIGNvZGUgcGF0aHMgdGhhdCBsb2FkIHVwIHRoZSBzYW1lIGFkZHJlc3MgYW5kIGZlZWQgdGhlCit2YWx1ZSB0byBhIHNpbmdsZSB1c2UsIHRoZW4gdGhlIHVzZSBtYXkgbm90IHVzZSBhIDxjb2RlPmxpdHVzZTwvY29kZT4KK3JlbG9jYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4hbGl0dXNlX2Jhc2UhPC9jb2RlPjx2YXI+TjwvdmFyPjxkZD5Vc2VkIHdpdGggYW55IG1lbW9yeSBmb3JtYXQgaW5zdHJ1Y3Rpb24gKGUuZy4gPGNvZGU+bGRsPC9jb2RlPikgdG8gaW5kaWNhdGUKK3RoYXQgdGhlIGxpdGVyYWwgaXMgdXNlZCBmb3IgYW4gYWRkcmVzcyBsb2FkLiAgVGhlIG9mZnNldCBmaWVsZCBvZiB0aGUKK2luc3RydWN0aW9uIG11c3QgYmUgemVyby4gIER1cmluZyByZWxheGF0aW9uLCB0aGUgY29kZSBtYXkgYmUgYWx0ZXJlZAordG8gdXNlIGEgZ3AtcmVsYXRpdmUgbG9hZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPiFsaXR1c2VfanNyITwvY29kZT48dmFyPk48L3Zhcj48ZGQ+VXNlZCB3aXRoIGEgcmVnaXN0ZXIgYnJhbmNoIGZvcm1hdCBpbnN0cnVjdGlvbiAoZS5nLiA8Y29kZT5qc3I8L2NvZGU+KSB0bworaW5kaWNhdGUgdGhhdCB0aGUgbGl0ZXJhbCBpcyB1c2VkIGZvciBhIGNhbGwuICBEdXJpbmcgcmVsYXhhdGlvbiwgdGhlCitjb2RlIG1heSBiZSBhbHRlcmVkIHRvIHVzZSBhIGRpcmVjdCBicmFuY2ggKGUuZy4gPGNvZGU+YnNyPC9jb2RlPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT4hbGl0dXNlX2pzcmRpcmVjdCE8L2NvZGU+PHZhcj5OPC92YXI+PGRkPlNpbWlsYXIgdG8gPGNvZGU+bGl0dXNlX2pzcjwvY29kZT4sIGJ1dCBhbHNvIHRoYXQgdGhpcyBjYWxsIGNhbm5vdCBiZSB2ZWN0b3JlZAordGhyb3VnaCBhIFBMVCBlbnRyeS4gIFRoaXMgaXMgdXNlZnVsIGZvciBmdW5jdGlvbnMgd2l0aCBzcGVjaWFsIGNhbGxpbmcKK2NvbnZlbnRpb25zIHdoaWNoIGRvIG5vdCBhbGxvdyB0aGUgbm9ybWFsIGNhbGwtY2xvYmJlcmVkIHJlZ2lzdGVycyB0byBiZQorY2xvYmJlcmVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+IWxpdHVzZV9ieXRvZmYhPC9jb2RlPjx2YXI+TjwvdmFyPjxkZD5Vc2VkIHdpdGggYSBieXRlIG1hc2sgaW5zdHJ1Y3Rpb24gKGUuZy4gPGNvZGU+ZXh0Ymw8L2NvZGU+KSB0byBpbmRpY2F0ZQordGhhdCBvbmx5IHRoZSBsb3cgMyBiaXRzIG9mIHRoZSBhZGRyZXNzIGFyZSByZWxldmFudC4gIER1cmluZyByZWxheGF0aW9uLAordGhlIGNvZGUgbWF5IGJlIGFsdGVyZWQgdG8gdXNlIGFuIGltbWVkaWF0ZSBpbnN0ZWFkIG9mIGEgcmVnaXN0ZXIgc2hpZnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4hbGl0dXNlX2FkZHIhPC9jb2RlPjx2YXI+TjwvdmFyPjxkZD5Vc2VkIHdpdGggYW55IG90aGVyIGluc3RydWN0aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlIG9yaWdpbmFsIGFkZHJlc3MKK2lzIGluIGZhY3QgdXNlZCwgYW5kIHRoZSBvcmlnaW5hbCA8Y29kZT5sZHE8L2NvZGU+IGluc3RydWN0aW9uIG1heSBub3QgYmUKK2FsdGVyZWQgb3IgZGVsZXRlZC4gIFRoaXMgaXMgdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggPGNvZGU+bGl0dXNlX2pzcjwvY29kZT4KK3RvIHRlc3Qgd2hldGhlciBhIHdlYWsgc3ltYm9sIGlzIGRlZmluZWQuCisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGxkcSAgJDI3LGZvbygkMjkpICAgIWxpdGVyYWwhMQorICAgICAgICAgIGJlcSAgJDI3LGlzX3VuZGVmICAgIWxpdHVzZV9hZGRyITEKKyAgICAgICAgICBqc3IgICQyNiwoJDI3KSxmb28gICFsaXR1c2VfanNyITEKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPiFsaXR1c2VfdGxzZ2QhPC9jb2RlPjx2YXI+TjwvdmFyPjxkZD5Vc2VkIHdpdGggYSByZWdpc3RlciBicmFuY2ggZm9ybWF0IGluc3RydWN0aW9uIHRvIGluZGljYXRlIHRoYXQgdGhlCitsaXRlcmFsIGlzIHRoZSBjYWxsIHRvIDxjb2RlPl9fdGxzX2dldF9hZGRyPC9jb2RlPiB1c2VkIHRvIGNvbXB1dGUgdGhlCithZGRyZXNzIG9mIHRoZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSB2YXJpYWJsZSB3aG9zZSBkZXNjcmlwdG9yIHdhcworbG9hZGVkIHdpdGggPGNvZGU+IXRsc2dkITwvY29kZT48dmFyPk48L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4hbGl0dXNlX3Rsc2xkbSE8L2NvZGU+PHZhcj5OPC92YXI+PGRkPlVzZWQgd2l0aCBhIHJlZ2lzdGVyIGJyYW5jaCBmb3JtYXQgaW5zdHJ1Y3Rpb24gdG8gaW5kaWNhdGUgdGhhdCB0aGUKK2xpdGVyYWwgaXMgdGhlIGNhbGwgdG8gPGNvZGU+X190bHNfZ2V0X2FkZHI8L2NvZGU+IHVzZWQgdG8gY29tcHV0ZSB0aGUKK2FkZHJlc3Mgb2YgdGhlIGJhc2Ugb2YgdGhlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGJsb2NrIGZvciB0aGUgY3VycmVudAorbW9kdWxlLiAgVGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBtb2R1bGUgbXVzdCBoYXZlIGJlZW4gbG9hZGVkIHdpdGgKKzxjb2RlPiF0bHNsZG0hPC9jb2RlPjx2YXI+TjwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiFncGRpc3AhPC9jb2RlPjx2YXI+TjwvdmFyPjxkZD5Vc2VkIHdpdGggPGNvZGU+bGRhaDwvY29kZT4gYW5kIDxjb2RlPmxkYTwvY29kZT4gdG8gbG9hZCB0aGUgR1AgZnJvbSB0aGUgY3VycmVudAorYWRkcmVzcywgYS1sYSB0aGUgPGNvZGU+bGRncDwvY29kZT4gbWFjcm8uICBUaGUgc291cmNlIHJlZ2lzdGVyIGZvciB0aGUKKzxjb2RlPmxkYWg8L2NvZGU+IGluc3RydWN0aW9uIG11c3QgY29udGFpbiB0aGUgYWRkcmVzcyBvZiB0aGUgPGNvZGU+bGRhaDwvY29kZT4KK2luc3RydWN0aW9uLiAgVGhlcmUgbXVzdCBiZSBleGFjdGx5IG9uZSA8Y29kZT5sZGE8L2NvZGU+IGluc3RydWN0aW9uIHBhaXJlZAord2l0aCB0aGUgPGNvZGU+bGRhaDwvY29kZT4gaW5zdHJ1Y3Rpb24sIHRob3VnaCBpdCBtYXkgYXBwZWFyIGFueXdoZXJlIGluCit0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLiAgVGhlIGltbWVkaWF0ZSBvcGVyYW5kcyBtdXN0IGJlIHplcm8uCisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGJzciAgJDI2LGZvbworICAgICAgICAgIGxkYWggJDI5LDAoJDI2KSAgICAgIWdwZGlzcCExCisgICAgICAgICAgbGRhICAkMjksMCgkMjkpICAgICAhZ3BkaXNwITEKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPiFncHJlbGhpZ2g8L2NvZGU+PGRkPlVzZWQgd2l0aCBhbiA8Y29kZT5sZGFoPC9jb2RlPiBpbnN0cnVjdGlvbiB0byBhZGQgdGhlIGhpZ2ggMTYgYml0cyBvZiBhCiszMi1iaXQgZGlzcGxhY2VtZW50IGZyb20gdGhlIEdQLgorCisgICAgIDxicj48ZHQ+PGNvZGU+IWdwcmVsbG93PC9jb2RlPjxkZD5Vc2VkIHdpdGggYW55IG1lbW9yeSBmb3JtYXQgaW5zdHJ1Y3Rpb24gdG8gYWRkIHRoZSBsb3cgMTYgYml0cyBvZiBhCiszMi1iaXQgZGlzcGxhY2VtZW50IGZyb20gdGhlIEdQLgorCisgICAgIDxicj48ZHQ+PGNvZGU+IWdwcmVsPC9jb2RlPjxkZD5Vc2VkIHdpdGggYW55IG1lbW9yeSBmb3JtYXQgaW5zdHJ1Y3Rpb24gdG8gYWRkIGEgMTYtYml0IGRpc3BsYWNlbWVudAorZnJvbSB0aGUgR1AuCisKKyAgICAgPGJyPjxkdD48Y29kZT4hc2FtZWdwPC9jb2RlPjxkZD5Vc2VkIHdpdGggYW55IGJyYW5jaCBmb3JtYXQgaW5zdHJ1Y3Rpb24gdG8gc2tpcCB0aGUgR1AgbG9hZCBhdCB0aGUKK3RhcmdldCBhZGRyZXNzLiAgVGhlIHJlZmVyZW5jZWQgc3ltYm9sIG11c3QgaGF2ZSB0aGUgc2FtZSBHUCBhcyB0aGUKK3NvdXJjZSBvYmplY3QgZmlsZSwgYW5kIGl0IG11c3QgYmUgZGVjbGFyZWQgdG8gZWl0aGVyIG5vdCB1c2UgPGNvZGU+JDI3PC9jb2RlPgorb3IgcGVyZm9ybSBhIHN0YW5kYXJkIEdQIGxvYWQgaW4gdGhlIGZpcnN0IHR3byBpbnN0cnVjdGlvbnMgdmlhIHRoZQorPGNvZGU+LnByb2xvZ3VlPC9jb2RlPiBkaXJlY3RpdmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4hdGxzZ2Q8L2NvZGU+PGR0Pjxjb2RlPiF0bHNnZCE8L2NvZGU+PHZhcj5OPC92YXI+PGRkPlVzZWQgd2l0aCBhbiA8Y29kZT5sZGE8L2NvZGU+IGluc3RydWN0aW9uIHRvIGxvYWQgdGhlIGFkZHJlc3Mgb2YgYSBUTFMKK2Rlc2NyaXB0b3IgZm9yIGEgc3ltYm9sIGluIHRoZSBHT1QuCisKKyAgICAgPHA+VGhlIHNlcXVlbmNlIG51bWJlciA8dmFyPk48L3Zhcj4gaXMgb3B0aW9uYWwsIGFuZCBpZiBwcmVzZW50IGl0IHVzZWQgdG8KK3BhaXIgdGhlIGRlc2NyaXB0b3IgbG9hZCB3aXRoIGJvdGggdGhlIDxjb2RlPmxpdGVyYWw8L2NvZGU+IGxvYWRpbmcgdGhlCithZGRyZXNzIG9mIHRoZSA8Y29kZT5fX3Rsc19nZXRfYWRkcjwvY29kZT4gZnVuY3Rpb24gYW5kIHRoZSA8Y29kZT5saXR1c2VfdGxzZ2Q8L2NvZGU+CittYXJraW5nIHRoZSBjYWxsIHRvIHRoYXQgZnVuY3Rpb24uCisKKyAgICAgPHA+Rm9yIHByb3BlciByZWxheGF0aW9uLCBib3RoIHRoZSA8Y29kZT50bHNnZDwvY29kZT4sIDxjb2RlPmxpdGVyYWw8L2NvZGU+IGFuZAorPGNvZGU+bGl0dXNlPC9jb2RlPiByZWxvY2F0aW9ucyBtdXN0IGJlIGluIHRoZSBzYW1lIGV4dGVuZGVkIGJhc2ljIGJsb2NrLiAKK1RoYXQgaXMsIHRoZSByZWxvY2F0aW9uIHdpdGggdGhlIGxvd2VzdCBhZGRyZXNzIG11c3QgYmUgZXhlY3V0ZWQKK2ZpcnN0IGF0IHJ1bnRpbWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4hdGxzbGRtPC9jb2RlPjxkdD48Y29kZT4hdGxzbGRtITwvY29kZT48dmFyPk48L3Zhcj48ZGQ+VXNlZCB3aXRoIGFuIDxjb2RlPmxkYTwvY29kZT4gaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgYWRkcmVzcyBvZiBhIFRMUworZGVzY3JpcHRvciBmb3IgdGhlIGN1cnJlbnQgbW9kdWxlIGluIHRoZSBHT1QuCisKKyAgICAgPHA+U2ltaWxhciBpbiBvdGhlciByZXNwZWN0cyB0byA8Y29kZT50bHNnZDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4hZ290ZHRwcmVsPC9jb2RlPjxkZD5Vc2VkIHdpdGggYW4gPGNvZGU+bGRxPC9jb2RlPiBpbnN0cnVjdGlvbiB0byBsb2FkIHRoZSBvZmZzZXQgb2YgdGhlIFRMUworc3ltYm9sIHdpdGhpbiBpdHMgbW9kdWxlJ3MgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgYmxvY2suICBBbHNvIGtub3duCithcyB0aGUgZHluYW1pYyB0aHJlYWQgcG9pbnRlciBvZmZzZXQgb3IgZHRwLXJlbGF0aXZlIG9mZnNldC4KKworICAgICA8YnI+PGR0Pjxjb2RlPiFkdHByZWxoaTwvY29kZT48ZHQ+PGNvZGU+IWR0cHJlbGxvPC9jb2RlPjxkdD48Y29kZT4hZHRwcmVsPC9jb2RlPjxkZD5MaWtlIDxjb2RlPmdwcmVsPC9jb2RlPiByZWxvY2F0aW9ucyBleGNlcHQgdGhleSBjb21wdXRlIGR0cC1yZWxhdGl2ZSBvZmZzZXRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+IWdvdHRwcmVsPC9jb2RlPjxkZD5Vc2VkIHdpdGggYW4gPGNvZGU+bGRxPC9jb2RlPiBpbnN0cnVjdGlvbiB0byBsb2FkIHRoZSBvZmZzZXQgb2YgdGhlIFRMUworc3ltYm9sIGZyb20gdGhlIHRocmVhZCBwb2ludGVyLiAgQWxzbyBrbm93biBhcyB0aGUgdHAtcmVsYXRpdmUgb2Zmc2V0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+IXRwcmVsaGk8L2NvZGU+PGR0Pjxjb2RlPiF0cHJlbGxvPC9jb2RlPjxkdD48Y29kZT4hdHByZWw8L2NvZGU+PGRkPkxpa2UgPGNvZGU+Z3ByZWw8L2NvZGU+IHJlbG9jYXRpb25zIGV4Y2VwdCB0aGV5IGNvbXB1dGUgdHAtcmVsYXRpdmUgb2Zmc2V0cy4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9BbHRtYWNyby5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWx0bWFjcm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQ2MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQWx0bWFjcm8uaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbHRtYWNybyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWxpZ24uaHRtbCNBbGlnbiIgdGl0bGU9IkFsaWduIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQXNjaWkuaHRtbCNBc2NpaSIgdGl0bGU9IkFzY2lpIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQWx0bWFjcm8iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXNjaWkuaHRtbCNBc2NpaSI+QXNjaWk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBbGlnbi5odG1sI0FsaWduIj5BbGlnbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny40IDxjb2RlPi5hbHRtYWNybzwvY29kZT48L2gzPgorCis8cD5FbmFibGUgYWx0ZXJuYXRlIG1hY3JvIG1vZGUsIGVuYWJsaW5nOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5MT0NBTCA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+IFsgLCAuLi4gXTwvY29kZT48YSBuYW1lPSJpbmRleC1MT0NBTC1fMDA0MHZhcl8wMDdibmFtZV8wMDdkLV8wMDViLV8wMDJjLV8wMDQwZG90c18wMDdiXzAwN2QtXzAwNWQtMjc3Ij48L2E+PGRkPk9uZSBhZGRpdGlvbmFsIGRpcmVjdGl2ZSwgPGNvZGU+TE9DQUw8L2NvZGU+LCBpcyBhdmFpbGFibGUuICBJdCBpcyB1c2VkIHRvCitnZW5lcmF0ZSBhIHN0cmluZyByZXBsYWNlbWVudCBmb3IgZWFjaCBvZiB0aGUgPHZhcj5uYW1lPC92YXI+IGFyZ3VtZW50cywgYW5kCityZXBsYWNlIGFueSBpbnN0YW5jZXMgb2YgPHZhcj5uYW1lPC92YXI+IGluIGVhY2ggbWFjcm8gZXhwYW5zaW9uLiAgVGhlCityZXBsYWNlbWVudCBzdHJpbmcgaXMgdW5pcXVlIGluIHRoZSBhc3NlbWJseSwgYW5kIGRpZmZlcmVudCBmb3IgZWFjaAorc2VwYXJhdGUgbWFjcm8gZXhwYW5zaW9uLiAgPGNvZGU+TE9DQUw8L2NvZGU+IGFsbG93cyB5b3UgdG8gd3JpdGUgbWFjcm9zIHRoYXQKK2RlZmluZSBzeW1ib2xzLCB3aXRob3V0IGZlYXIgb2YgY29uZmxpY3QgYmV0d2VlbiBzZXBhcmF0ZSBtYWNybyBleHBhbnNpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+U3RyaW5nIGRlbGltaXRlcnM8L2NvZGU+PGEgbmFtZT0iaW5kZXgtU3RyaW5nLWRlbGltaXRlcnMtMjc4Ij48L2E+PGRkPllvdSBjYW4gd3JpdGUgc3RyaW5ncyBkZWxpbWl0ZWQgaW4gdGhlc2Ugb3RoZXIgd2F5cyBiZXNpZGVzCis8Y29kZT4iPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGNvZGU+IjwvY29kZT46CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JzwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPic8L2NvZGU+PGRkPllvdSBjYW4gZGVsaW1pdCBzdHJpbmdzIHdpdGggc2luZ2xlLXF1b3RlIGNoYXJhY3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPiZsdDs8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48Y29kZT4mZ3Q7PC9jb2RlPjxkZD5Zb3UgY2FuIGRlbGltaXQgc3RyaW5ncyB3aXRoIG1hdGNoaW5nIGFuZ2xlIGJyYWNrZXRzLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT5zaW5nbGUtY2hhcmFjdGVyIHN0cmluZyBlc2NhcGU8L2NvZGU+PGEgbmFtZT0iaW5kZXgtc2luZ2xlXzAwMmRjaGFyYWN0ZXItc3RyaW5nLWVzY2FwZS0yNzkiPjwvYT48ZGQ+VG8gaW5jbHVkZSBhbnkgc2luZ2xlIGNoYXJhY3RlciBsaXRlcmFsbHkgaW4gYSBzdHJpbmcgKGV2ZW4gaWYgdGhlCitjaGFyYWN0ZXIgd291bGQgb3RoZXJ3aXNlIGhhdmUgc29tZSBzcGVjaWFsIG1lYW5pbmcpLCB5b3UgY2FuIHByZWZpeCB0aGUKK2NoYXJhY3RlciB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ITwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoYW4gZXhjbGFtYXRpb24gbWFyaykuICBGb3IgZXhhbXBsZSwgeW91IGNhbgord3JpdGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7NC4zICEmZ3Q7IDUuNCEhJmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBnZXQgdGhlIGxpdGVyYWwgdGV4dCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjQuMyAmZ3Q7IDUuNCE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT5FeHByZXNzaW9uIHJlc3VsdHMgYXMgc3RyaW5nczwvY29kZT48YSBuYW1lPSJpbmRleC1FeHByZXNzaW9uLXJlc3VsdHMtYXMtc3RyaW5ncy0yODAiPjwvYT48ZGQ+WW91IGNhbiB3cml0ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiU8L3NwYW4+PHZhcj5leHByPC92YXI+PC9zYW1wPiZyc3F1bzsgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gPHZhcj5leHByPC92YXI+CithbmQgdXNlIHRoZSByZXN1bHQgYXMgYSBzdHJpbmcuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQXJndW1lbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Bcmd1bWVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTc3NjdhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQXJndW1lbnRzLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QXJndW1lbnRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjSW50ZWdlci1FeHBycyIgdGl0bGU9IkludGVnZXIgRXhwcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiIHRpdGxlPSJPcGVyYXRvcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBcmd1bWVudHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3BlcmF0b3JzLmh0bWwjT3BlcmF0b3JzIj5PcGVyYXRvcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjSW50ZWdlci1FeHBycyI+SW50ZWdlciBFeHByczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMi4xIEFyZ3VtZW50czwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWV4cHJlc3Npb24tYXJndW1lbnRzLTI0OCI+PC9hPjxhIG5hbWU9ImluZGV4LWFyZ3VtZW50cy1pbi1leHByZXNzaW9ucy0yNDkiPjwvYT48YSBuYW1lPSJpbmRleC1vcGVyYW5kcy1pbi1leHByZXNzaW9ucy0yNTAiPjwvYT48YSBuYW1lPSJpbmRleC1hcml0aG1ldGljLW9wZXJhbmRzLTI1MSI+PC9hPjxkZm4+QXJndW1lbnRzPC9kZm4+IGFyZSBzeW1ib2xzLCBudW1iZXJzIG9yIHN1YmV4cHJlc3Npb25zLiAgSW4gb3RoZXIKK2NvbnRleHRzIGFyZ3VtZW50cyBhcmUgc29tZXRpbWVzIGNhbGxlZCAmbGRxdW87YXJpdGhtZXRpYyBvcGVyYW5kcyZyZHF1bzsuICBJbgordGhpcyBtYW51YWwsIHRvIGF2b2lkIGNvbmZ1c2luZyB0aGVtIHdpdGggdGhlICZsZHF1bztpbnN0cnVjdGlvbiBvcGVyYW5kcyZyZHF1bzsgb2YKK3RoZSBtYWNoaW5lIGxhbmd1YWdlLCB3ZSB1c2UgdGhlIHRlcm0gJmxkcXVvO2FyZ3VtZW50JnJkcXVvOyB0byByZWZlciB0byBwYXJ0cyBvZgorZXhwcmVzc2lvbnMgb25seSwgcmVzZXJ2aW5nIHRoZSB3b3JkICZsZHF1bztvcGVyYW5kJnJkcXVvOyB0byByZWZlciBvbmx5IHRvIG1hY2hpbmUKK2luc3RydWN0aW9uIG9wZXJhbmRzLgorCisgICA8cD5TeW1ib2xzIGFyZSBldmFsdWF0ZWQgdG8geWllbGQgezx2YXI+c2VjdGlvbjwvdmFyPiA8dmFyPk5OTjwvdmFyPn0gd2hlcmUKKzx2YXI+c2VjdGlvbjwvdmFyPiBpcyBvbmUgb2YgdGV4dCwgZGF0YSwgYnNzLCBhYnNvbHV0ZSwKK29yIHVuZGVmaW5lZC4gIDx2YXI+Tk5OPC92YXI+IGlzIGEgc2lnbmVkLCAyJ3MgY29tcGxlbWVudCAzMiBiaXQKK2ludGVnZXIuCisKKyAgIDxwPk51bWJlcnMgYXJlIHVzdWFsbHkgaW50ZWdlcnMuCisKKyAgIDxwPkEgbnVtYmVyIGNhbiBiZSBhIGZsb251bSBvciBiaWdudW0uICBJbiB0aGlzIGNhc2UsIHlvdSBhcmUgd2FybmVkCit0aGF0IG9ubHkgdGhlIGxvdyBvcmRlciAzMiBiaXRzIGFyZSB1c2VkLCBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gcHJldGVuZHMKK3RoZXNlIDMyIGJpdHMgYXJlIGFuIGludGVnZXIuICBZb3UgbWF5IHdyaXRlIGludGVnZXItbWFuaXB1bGF0aW5nCitpbnN0cnVjdGlvbnMgdGhhdCBhY3Qgb24gZXhvdGljIGNvbnN0YW50cywgY29tcGF0aWJsZSB3aXRoIG90aGVyCithc3NlbWJsZXJzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zdWJleHByZXNzaW9ucy0yNTIiPjwvYT5TdWJleHByZXNzaW9ucyBhcmUgYSBsZWZ0IHBhcmVudGhlc2lzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyCitleHByZXNzaW9uLCBmb2xsb3dlZCBieSBhIHJpZ2h0IHBhcmVudGhlc2lzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KTwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgb3IgYSBwcmVmaXgKK29wZXJhdG9yIGZvbGxvd2VkIGJ5IGFuIGFyZ3VtZW50LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Bcy1TZWN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQXMtU2VjdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTMyNDVkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQXMtU2VjdGlvbnMuaHRtbApAQCAtMCwwICsxLDc1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BcyBTZWN0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2VjdGlvbnMuaHRtbCNTZWN0aW9ucyIgdGl0bGU9IlNlY3Rpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNMZC1TZWN0aW9ucyIgdGl0bGU9IkxkIFNlY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ViXzAwMmRTZWN0aW9ucy5odG1sI1N1Yl8wMDJkU2VjdGlvbnMiIHRpdGxlPSJTdWItU2VjdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBcy1TZWN0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTdWJfMDAyZFNlY3Rpb25zLmh0bWwjU3ViXzAwMmRTZWN0aW9ucyI+U3ViLVNlY3Rpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNMZC1TZWN0aW9ucyI+TGQgU2VjdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIj5TZWN0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMyBBc3NlbWJsZXIgSW50ZXJuYWwgU2VjdGlvbnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pbnRlcm5hbC1hc3NlbWJsZXItc2VjdGlvbnMtMjAwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbnMtaW4tbWVzc2FnZXNfMDAyYy1pbnRlcm5hbC0yMDEiPjwvYT5UaGVzZSBzZWN0aW9ucyBhcmUgbWVhbnQgb25seSBmb3IgdGhlIGludGVybmFsIHVzZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4gIFRoZXkKK2hhdmUgbm8gbWVhbmluZyBhdCBydW4tdGltZS4gIFlvdSBkbyBub3QgcmVhbGx5IG5lZWQgdG8ga25vdyBhYm91dCB0aGVzZQorc2VjdGlvbnMgZm9yIG1vc3QgcHVycG9zZXM7IGJ1dCB0aGV5IGNhbiBiZSBtZW50aW9uZWQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4KK3dhcm5pbmcgbWVzc2FnZXMsIHNvIGl0IG1pZ2h0IGJlIGhlbHBmdWwgdG8gaGF2ZSBhbiBpZGVhIG9mIHRoZWlyCittZWFuaW5ncyB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4gIFRoZXNlIHNlY3Rpb25zIGFyZSB1c2VkIHRvIHBlcm1pdCB0aGUKK3ZhbHVlIG9mIGV2ZXJ5IGV4cHJlc3Npb24gaW4geW91ciBhc3NlbWJseSBsYW5ndWFnZSBwcm9ncmFtIHRvIGJlIGEKK3NlY3Rpb24tcmVsYXRpdmUgYWRkcmVzcy4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1pbnRlcm5hbC1sb2dpYy1lcnJvci0yMDIiPjwvYT4KKzxkbD48ZHQ+PGI+QVNTRU1CTEVSLUlOVEVSTkFMLUxPR0lDLUVSUk9SITwvYj48ZGQ+QW4gaW50ZXJuYWwgYXNzZW1ibGVyIGxvZ2ljIGVycm9yIGhhcyBiZWVuIGZvdW5kLiAgVGhpcyBtZWFucyB0aGVyZSBpcyBhCitidWcgaW4gdGhlIGFzc2VtYmxlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1leHByLV8wMDI4aW50ZXJuYWwtc2VjdGlvbl8wMDI5LTIwMyI+PC9hPjxicj48ZHQ+PGI+ZXhwciBzZWN0aW9uPC9iPjxkZD5UaGUgYXNzZW1ibGVyIHN0b3JlcyBjb21wbGV4IGV4cHJlc3Npb24gaW50ZXJuYWxseSBhcyBjb21iaW5hdGlvbnMgb2YKK3N5bWJvbHMuICBXaGVuIGl0IG5lZWRzIHRvIHJlcHJlc2VudCBhbiBleHByZXNzaW9uIGFzIGEgc3ltYm9sLCBpdCBwdXRzCitpdCBpbiB0aGUgZXhwciBzZWN0aW9uLiAKKzwhLS0gRklYTUUgaXRlbSBkZWJ1ZyAtLT4KKzwhLS0gRklYTUUgaXRlbSB0cmFuc2Zlclt0XSB2ZWN0b3IgcHJlbG9hZCAtLT4KKzwhLS0gRklYTUUgaXRlbSB0cmFuc2Zlclt0XSB2ZWN0b3IgcG9zdGxvYWQgLS0+Cis8IS0tIEZJWE1FIGl0ZW0gcmVnaXN0ZXIgLS0+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Bc2NpaS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQXNjaWkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTk1MWFkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQXNjaWkuaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Bc2NpaSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWx0bWFjcm8uaHRtbCNBbHRtYWNybyIgdGl0bGU9IkFsdG1hY3JvIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQXNjaXouaHRtbCNBc2NpeiIgdGl0bGU9IkFzY2l6Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQXNjaWkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXNjaXouaHRtbCNBc2NpeiI+QXNjaXo8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBbHRtYWNyby5odG1sI0FsdG1hY3JvIj5BbHRtYWNybzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny41IDxjb2RlPi5hc2NpaSAiPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGNvZGU+IjwvY29kZT48c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jhc2NpaV8wMDdkLWRpcmVjdGl2ZS0yODEiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmctbGl0ZXJhbHMtMjgyIj48L2E+PGNvZGU+LmFzY2lpPC9jb2RlPiBleHBlY3RzIHplcm8gb3IgbW9yZSBzdHJpbmcgbGl0ZXJhbHMgKHNlZSA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4pCitzZXBhcmF0ZWQgYnkgY29tbWFzLiAgSXQgYXNzZW1ibGVzIGVhY2ggc3RyaW5nICh3aXRoIG5vIGF1dG9tYXRpYwordHJhaWxpbmcgemVybyBieXRlKSBpbnRvIGNvbnNlY3V0aXZlIGFkZHJlc3Nlcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQXNjaXouaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FzY2l6Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3MTM4MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0FzY2l6Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QXNjaXogLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFzY2lpLmh0bWwjQXNjaWkiIHRpdGxlPSJBc2NpaSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJhbGlnbi5odG1sI0JhbGlnbiIgdGl0bGU9IkJhbGlnbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFzY2l6Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJhbGlnbi5odG1sI0JhbGlnbiI+QmFsaWduPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQXNjaWkuaHRtbCNBc2NpaSI+QXNjaWk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNiA8Y29kZT4uYXNjaXogIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYXNjaXpfMDA3ZC1kaXJlY3RpdmUtMjgzIj48L2E+PGEgbmFtZT0iaW5kZXgtemVyb18wMDJkdGVybWluYXRlZC1zdHJpbmdzLTI4NCI+PC9hPjxhIG5hbWU9ImluZGV4LW51bGxfMDAyZHRlcm1pbmF0ZWQtc3RyaW5ncy0yODUiPjwvYT48Y29kZT4uYXNjaXo8L2NvZGU+IGlzIGp1c3QgbGlrZSA8Y29kZT4uYXNjaWk8L2NvZGU+LCBidXQgZWFjaCBzdHJpbmcgaXMgZm9sbG93ZWQgYnkKK2EgemVybyBieXRlLiAgVGhlICZsZHF1bzt6JnJkcXVvOyBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5hc2Npejwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdGFuZHMgZm9yICZsZHF1bzt6ZXJvJnJkcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQmFsaWduLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9CYWxpZ24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzdjZTVmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQmFsaWduLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QmFsaWduIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBc2Npei5odG1sI0FzY2l6IiB0aXRsZT0iQXNjaXoiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJCdW5kbGUtZGlyZWN0aXZlcy5odG1sI0J1bmRsZS1kaXJlY3RpdmVzIiB0aXRsZT0iQnVuZGxlIGRpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCYWxpZ24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQnVuZGxlLWRpcmVjdGl2ZXMuaHRtbCNCdW5kbGUtZGlyZWN0aXZlcyI+QnVuZGxlIGRpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBc2Npei5odG1sI0FzY2l6Ij5Bc2NpejwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny43IDxjb2RlPi5iYWxpZ25bd2xdIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hYnMtZXhwcjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YWJzLWV4cHI8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1wYWRkaW5nLXRoZS1sb2NhdGlvbi1jb3VudGVyLWdpdmVuLW51bWJlci1vZi1ieXRlcy0yODYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmJhbGlnbl8wMDdkLWRpcmVjdGl2ZS0yODciPjwvYT5QYWQgdGhlIGxvY2F0aW9uIGNvdW50ZXIgKGluIHRoZSBjdXJyZW50IHN1YnNlY3Rpb24pIHRvIGEgcGFydGljdWxhcgorc3RvcmFnZSBib3VuZGFyeS4gIFRoZSBmaXJzdCBleHByZXNzaW9uICh3aGljaCBtdXN0IGJlIGFic29sdXRlKSBpcyB0aGUKK2FsaWdubWVudCByZXF1ZXN0IGluIGJ5dGVzLiAgRm9yIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYmFsaWduIDg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWR2YW5jZXMKK3RoZSBsb2NhdGlvbiBjb3VudGVyIHVudGlsIGl0IGlzIGEgbXVsdGlwbGUgb2YgOC4gIElmIHRoZSBsb2NhdGlvbiBjb3VudGVyCitpcyBhbHJlYWR5IGEgbXVsdGlwbGUgb2YgOCwgbm8gY2hhbmdlIGlzIG5lZWRlZC4KKworICAgPHA+VGhlIHNlY29uZCBleHByZXNzaW9uIChhbHNvIGFic29sdXRlKSBnaXZlcyB0aGUgZmlsbCB2YWx1ZSB0byBiZSBzdG9yZWQgaW4gdGhlCitwYWRkaW5nIGJ5dGVzLiAgSXQgKGFuZCB0aGUgY29tbWEpIG1heSBiZSBvbWl0dGVkLiAgSWYgaXQgaXMgb21pdHRlZCwgdGhlCitwYWRkaW5nIGJ5dGVzIGFyZSBub3JtYWxseSB6ZXJvLiAgSG93ZXZlciwgb24gc29tZSBzeXN0ZW1zLCBpZiB0aGUgc2VjdGlvbiBpcworbWFya2VkIGFzIGNvbnRhaW5pbmcgY29kZSBhbmQgdGhlIGZpbGwgdmFsdWUgaXMgb21pdHRlZCwgdGhlIHNwYWNlIGlzIGZpbGxlZAord2l0aCBuby1vcCBpbnN0cnVjdGlvbnMuCisKKyAgIDxwPlRoZSB0aGlyZCBleHByZXNzaW9uIGlzIGFsc28gYWJzb2x1dGUsIGFuZCBpcyBhbHNvIG9wdGlvbmFsLiAgSWYgaXQgaXMgcHJlc2VudCwKK2l0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHNob3VsZCBiZSBza2lwcGVkIGJ5IHRoaXMgYWxpZ25tZW50CitkaXJlY3RpdmUuICBJZiBkb2luZyB0aGUgYWxpZ25tZW50IHdvdWxkIHJlcXVpcmUgc2tpcHBpbmcgbW9yZSBieXRlcyB0aGFuIHRoZQorc3BlY2lmaWVkIG1heGltdW0sIHRoZW4gdGhlIGFsaWdubWVudCBpcyBub3QgZG9uZSBhdCBhbGwuICBZb3UgY2FuIG9taXQgdGhlCitmaWxsIHZhbHVlICh0aGUgc2Vjb25kIGFyZ3VtZW50KSBlbnRpcmVseSBieSBzaW1wbHkgdXNpbmcgdHdvIGNvbW1hcyBhZnRlciB0aGUKK3JlcXVpcmVkIGFsaWdubWVudDsgdGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRoZSBhbGlnbm1lbnQgdG8gYmUgZmlsbGVkCit3aXRoIG5vLW9wIGluc3RydWN0aW9ucyB3aGVuIGFwcHJvcHJpYXRlLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmJhbGlnbndfMDA3ZC1kaXJlY3RpdmUtMjg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JiYWxpZ25sXzAwN2QtZGlyZWN0aXZlLTI4OSI+PC9hPlRoZSA8Y29kZT4uYmFsaWdudzwvY29kZT4gYW5kIDxjb2RlPi5iYWxpZ25sPC9jb2RlPiBkaXJlY3RpdmVzIGFyZSB2YXJpYW50cyBvZiB0aGUKKzxjb2RlPi5iYWxpZ248L2NvZGU+IGRpcmVjdGl2ZS4gIFRoZSA8Y29kZT4uYmFsaWdudzwvY29kZT4gZGlyZWN0aXZlIHRyZWF0cyB0aGUgZmlsbAorcGF0dGVybiBhcyBhIHR3byBieXRlIHdvcmQgdmFsdWUuICBUaGUgPGNvZGU+LmJhbGlnbmw8L2NvZGU+IGRpcmVjdGl2ZXMgdHJlYXRzIHRoZQorZmlsbCBwYXR0ZXJuIGFzIGEgZm91ciBieXRlIGxvbmd3b3JkIHZhbHVlLiAgRm9yIGV4YW1wbGUsIDxjb2RlPi5iYWxpZ253Cis0LDB4MzY4ZDwvY29kZT4gd2lsbCBhbGlnbiB0byBhIG11bHRpcGxlIG9mIDQuICBJZiBpdCBza2lwcyB0d28gYnl0ZXMsIHRoZXkgd2lsbCBiZQorZmlsbGVkIGluIHdpdGggdGhlIHZhbHVlIDB4MzY4ZCAodGhlIGV4YWN0IHBsYWNlbWVudCBvZiB0aGUgYnl0ZXMgZGVwZW5kcyB1cG9uCit0aGUgZW5kaWFubmVzcyBvZiB0aGUgcHJvY2Vzc29yKS4gIElmIGl0IHNraXBzIDEgb3IgMyBieXRlcywgdGhlIGZpbGwgdmFsdWUgaXMKK3VuZGVmaW5lZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQmlnbnVtcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQmlnbnVtcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNmFhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9CaWdudW1zLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QmlnbnVtcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTnVtYmVycy5odG1sI051bWJlcnMiIHRpdGxlPSJOdW1iZXJzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW50ZWdlcnMuaHRtbCNJbnRlZ2VycyIgdGl0bGU9IkludGVnZXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRmxvbnVtcy5odG1sI0Zsb251bXMiIHRpdGxlPSJGbG9udW1zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQmlnbnVtcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGbG9udW1zLmh0bWwjRmxvbnVtcyI+RmxvbnVtczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkludGVnZXJzLmh0bWwjSW50ZWdlcnMiPkludGVnZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTnVtYmVycy5odG1sI051bWJlcnMiPk51bWJlcnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjYuMi4yIEJpZ251bXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1iaWdudW1zLTE3OSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnN0YW50c18wMDJjLWJpZ251bS0xODAiPjwvYT5BIDxkZm4+YmlnbnVtPC9kZm4+IGhhcyB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyBhbiBpbnRlZ2VyCitleGNlcHQgdGhhdCB0aGUgbnVtYmVyIChvciBpdHMgbmVnYXRpdmUpIHRha2VzIG1vcmUgdGhhbiAzMiBiaXRzIHRvCityZXByZXNlbnQgaW4gYmluYXJ5LiAgVGhlIGRpc3RpbmN0aW9uIGlzIG1hZGUgYmVjYXVzZSBpbiBzb21lIHBsYWNlcworaW50ZWdlcnMgYXJlIHBlcm1pdHRlZCB3aGlsZSBiaWdudW1zIGFyZSBub3QuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0JsYWNrZmluLURpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0JsYWNrZmluLURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJiZDlmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQmxhY2tmaW4tRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJsYWNrZmluIERpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkJsYWNrZmluXzAwMmREZXBlbmRlbnQuaHRtbCNCbGFja2Zpbl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQmxhY2tmaW4tRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQmxhY2tmaW4tU3ludGF4Lmh0bWwjQmxhY2tmaW4tU3ludGF4IiB0aXRsZT0iQmxhY2tmaW4gU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQmxhY2tmaW4tRGlyZWN0aXZlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkJsYWNrZmluLVN5bnRheC5odG1sI0JsYWNrZmluLVN5bnRheCI+QmxhY2tmaW4gU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQmxhY2tmaW5fMDAyZERlcGVuZGVudC5odG1sI0JsYWNrZmluXzAwMmREZXBlbmRlbnQiPkJsYWNrZmluLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNi4zIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1CbGFja2Zpbi1kaXJlY3RpdmVzLTczNSI+PC9hPjxhIG5hbWU9ImluZGV4LWRpcmVjdGl2ZXNfMDAyYy1CbGFja2Zpbi03MzYiPjwvYT4KK1RoZSBmb2xsb3dpbmcgZGlyZWN0aXZlcyBhcmUgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgVkRTUCBhc3NlbWJsZXIuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi5ieXRlMjwvY29kZT48ZGQ+SW5pdGlhbGl6ZXMgYSB0d28gYnl0ZSBkYXRhIG9iamVjdC4KKworICAgICA8cD5UaGlzIG1hcHMgdG8gdGhlIDxjb2RlPi5zaG9ydDwvY29kZT4gZGlyZWN0aXZlLiAKKzxicj48ZHQ+PGNvZGU+LmJ5dGU0PC9jb2RlPjxkZD5Jbml0aWFsaXplcyBhIGZvdXIgYnl0ZSBkYXRhIG9iamVjdC4KKworICAgICA8cD5UaGlzIG1hcHMgdG8gdGhlIDxjb2RlPi5pbnQ8L2NvZGU+IGRpcmVjdGl2ZS4gCis8YnI+PGR0Pjxjb2RlPi5kYjwvY29kZT48ZGQ+SW5pdGlhbGl6ZXMgYSBzaW5nbGUgYnl0ZSBkYXRhIG9iamVjdC4KKworICAgICA8cD5UaGlzIGRpcmVjdGl2ZSBpcyBhIHN5bm9ueW0gZm9yIDxjb2RlPi5ieXRlPC9jb2RlPi4gCis8YnI+PGR0Pjxjb2RlPi5kdzwvY29kZT48ZGQ+SW5pdGlhbGl6ZXMgYSB0d28gYnl0ZSBkYXRhIG9iamVjdC4KKworICAgICA8cD5UaGlzIGRpcmVjdGl2ZSBpcyBhIHN5bm9ueW0gZm9yIDxjb2RlPi5ieXRlMjwvY29kZT4uIAorPGJyPjxkdD48Y29kZT4uZGQ8L2NvZGU+PGRkPkluaXRpYWxpemVzIGEgZm91ciBieXRlIGRhdGEgb2JqZWN0LgorCisgICAgIDxwPlRoaXMgZGlyZWN0aXZlIGlzIGEgc3lub255bSBmb3IgPGNvZGU+LmJ5dGU0PC9jb2RlPi4gCis8YnI+PGR0Pjxjb2RlPi52YXI8L2NvZGU+PGRkPkRlZmluZSBhbmQgaW5pdGlhbGl6ZSBhIDMyIGJpdCBkYXRhIG9iamVjdC4gCis8L2RsPgorCis8IS0tIENvcHlyaWdodCAyMDA3LCAyMDA4LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQmxhY2tmaW4tT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQmxhY2tmaW4tT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NWQyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9CbGFja2Zpbi1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJsYWNrZmluIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkJsYWNrZmluXzAwMmREZXBlbmRlbnQuaHRtbCNCbGFja2Zpbl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQmxhY2tmaW4tRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQmxhY2tmaW4tU3ludGF4Lmh0bWwjQmxhY2tmaW4tU3ludGF4IiB0aXRsZT0iQmxhY2tmaW4gU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQmxhY2tmaW4tT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCbGFja2Zpbi1TeW50YXguaHRtbCNCbGFja2Zpbi1TeW50YXgiPkJsYWNrZmluIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkJsYWNrZmluXzAwMmREZXBlbmRlbnQuaHRtbCNCbGFja2Zpbl8wMDJkRGVwZW5kZW50Ij5CbGFja2Zpbi1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjYuMSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtQmxhY2tmaW4tb3B0aW9ucy1fMDAyOG5vbmVfMDAyOS03MjciPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zLWZvci1CbGFja2Zpbi1fMDAyOG5vbmVfMDAyOS03MjgiPjwvYT4KKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1jcHVfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1CbGFja2Zpbi03MjkiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LW1jcHU9PC9jb2RlPjx2YXI+cHJvY2Vzc29yPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPjxjb2RlPi08L2NvZGU+PHZhcj5zaXJldmlzaW9uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPjxkZD5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIHRhcmdldCBwcm9jZXNzb3IuICBUaGUgb3B0aW9uYWwgPHZhcj5zaXJldmlzaW9uPC92YXI+CitpcyBub3QgdXNlZCBpbiBhc3NlbWJsZXIuICBJdCdzIGhlcmUgc3VjaCB0aGF0IEdDQyBjYW4gZWFzaWx5IHBhc3MgZG93biBpdHMKKzxjb2RlPi1tY3B1PTwvY29kZT4gb3B0aW9uLiAgVGhlIGFzc2VtYmxlciB3aWxsIGlzc3VlIGFuCitlcnJvciBtZXNzYWdlIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NlbWJsZSBhbiBpbnN0cnVjdGlvbiB3aGljaAord2lsbCBub3QgZXhlY3V0ZSBvbiB0aGUgdGFyZ2V0IHByb2Nlc3Nvci4gIFRoZSBmb2xsb3dpbmcgcHJvY2Vzc29yIG5hbWVzIGFyZQorcmVjb2duaXplZDoKKzxjb2RlPmJmNTA0PC9jb2RlPiwKKzxjb2RlPmJmNTA2PC9jb2RlPiwKKzxjb2RlPmJmNTEyPC9jb2RlPiwKKzxjb2RlPmJmNTE0PC9jb2RlPiwKKzxjb2RlPmJmNTE2PC9jb2RlPiwKKzxjb2RlPmJmNTE4PC9jb2RlPiwKKzxjb2RlPmJmNTIyPC9jb2RlPiwKKzxjb2RlPmJmNTIzPC9jb2RlPiwKKzxjb2RlPmJmNTI0PC9jb2RlPiwKKzxjb2RlPmJmNTI1PC9jb2RlPiwKKzxjb2RlPmJmNTI2PC9jb2RlPiwKKzxjb2RlPmJmNTI3PC9jb2RlPiwKKzxjb2RlPmJmNTMxPC9jb2RlPiwKKzxjb2RlPmJmNTMyPC9jb2RlPiwKKzxjb2RlPmJmNTMzPC9jb2RlPiwKKzxjb2RlPmJmNTM0PC9jb2RlPiwKKzxjb2RlPmJmNTM1PC9jb2RlPiAobm90IGltcGxlbWVudGVkIHlldCksCis8Y29kZT5iZjUzNjwvY29kZT4sCis8Y29kZT5iZjUzNzwvY29kZT4sCis8Y29kZT5iZjUzODwvY29kZT4sCis8Y29kZT5iZjUzOTwvY29kZT4sCis8Y29kZT5iZjU0MjwvY29kZT4sCis8Y29kZT5iZjU0Mm08L2NvZGU+LAorPGNvZGU+YmY1NDQ8L2NvZGU+LAorPGNvZGU+YmY1NDRtPC9jb2RlPiwKKzxjb2RlPmJmNTQ3PC9jb2RlPiwKKzxjb2RlPmJmNTQ3bTwvY29kZT4sCis8Y29kZT5iZjU0ODwvY29kZT4sCis8Y29kZT5iZjU0OG08L2NvZGU+LAorPGNvZGU+YmY1NDk8L2NvZGU+LAorPGNvZGU+YmY1NDltPC9jb2RlPiwKKzxjb2RlPmJmNTYxPC9jb2RlPiwKK2FuZAorPGNvZGU+YmY1OTI8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtZmRwaWNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQmxhY2tmaW4tNzMwIj48L2E+PGJyPjxkdD48Y29kZT4tbWZkcGljPC9jb2RlPjxkZD5Bc3NlbWJsZSBmb3IgdGhlIEZEUElDIEFCSS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbW5vXzAwMmRmZHBpY18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1CbGFja2Zpbi03MzEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbW5vcGljXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUJsYWNrZmluLTczMiI+PC9hPjxicj48ZHQ+PGNvZGU+LW1uby1mZHBpYzwvY29kZT48ZHQ+PGNvZGU+LW1ub3BpYzwvY29kZT48ZGQ+RGlzYWJsZSAtbWZkcGljLiAKKzwvZGw+CisgICA8IS0tIG1hbiBlbmQgLS0+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0JsYWNrZmluLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQmxhY2tmaW4tU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiM2NhYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0JsYWNrZmluLVN5bnRheC5odG1sCkBAIC0wLDAgKzEsMTc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CbGFja2ZpbiBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkJsYWNrZmluXzAwMmREZXBlbmRlbnQuaHRtbCNCbGFja2Zpbl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQmxhY2tmaW4tRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiIHRpdGxlPSJCbGFja2ZpbiBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQmxhY2tmaW4tRGlyZWN0aXZlcy5odG1sI0JsYWNrZmluLURpcmVjdGl2ZXMiIHRpdGxlPSJCbGFja2ZpbiBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQmxhY2tmaW4tU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJsYWNrZmluLURpcmVjdGl2ZXMuaHRtbCNCbGFja2Zpbi1EaXJlY3RpdmVzIj5CbGFja2ZpbiBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJCbGFja2Zpbl8wMDJkRGVwZW5kZW50Lmh0bWwjQmxhY2tmaW5fMDAyZERlcGVuZGVudCI+QmxhY2tmaW4tRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS42LjIgU3ludGF4PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtQmxhY2tmaW4tc3ludGF4LTczMyI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bnRheF8wMDJjLUJsYWNrZmluLTczNCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+U3BlY2lhbCBDaGFyYWN0ZXJzPC9jb2RlPjxkZD5Bc3NlbWJsZXIgaW5wdXQgaXMgZnJlZSBmb3JtYXQgYW5kIG1heSBhcHBlYXIgYW55d2hlcmUgb24gdGhlIGxpbmUuIAorT25lIGluc3RydWN0aW9uIG1heSBleHRlbmQgYWNyb3NzIG11bHRpcGxlIGxpbmVzIG9yIG1vcmUgdGhhbiBvbmUKK2luc3RydWN0aW9uIG1heSBhcHBlYXIgb24gdGhlIHNhbWUgbGluZS4gIFdoaXRlIHNwYWNlIChzcGFjZSwgdGFiLAorY29tbWVudHMgb3IgbmV3bGluZSkgbWF5IGFwcGVhciBhbnl3aGVyZSBiZXR3ZWVuIHRva2Vucy4gIEEgdG9rZW4gbXVzdAorbm90IGhhdmUgZW1iZWRkZWQgc3BhY2VzLiAgVG9rZW5zIGluY2x1ZGUgbnVtYmVycywgcmVnaXN0ZXIgbmFtZXMsCitrZXl3b3JkcywgdXNlciBpZGVudGlmaWVycywgYW5kIGFsc28gc29tZSBtdWx0aWNoYXJhY3RlciBzcGVjaWFsCitzeW1ib2xzIGxpa2UgIis9IiwgIi8qIiBvciAifHwiLgorCisgICAgIDxwPkNvbW1lbnRzIGFyZSBpbnRyb2R1Y2VkIGJ5IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGFuZCBleHRlbmQgdG8gdGhlCitlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIElmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QKK2NoYXJhY3RlciBvZiBhIGxpbmUsIHRoZSB3aG9sZSBsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4KK3RoaXMgY2FzZSB0aGUgbGluZSBjYW4gYWxzbyBiZSBhIGxvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlCisoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IgY29udHJvbCBjb21tYW5kCisoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT5JbnN0cnVjdGlvbiBEZWxpbWl0aW5nPC9jb2RlPjxkZD5BIHNlbWljb2xvbiBtdXN0IHRlcm1pbmF0ZSBldmVyeSBpbnN0cnVjdGlvbi4gIFNvbWV0aW1lcyBhIGNvbXBsZXRlCitpbnN0cnVjdGlvbiB3aWxsIGNvbnNpc3Qgb2YgbW9yZSB0aGFuIG9uZSBvcGVyYXRpb24uICBUaGVyZSBhcmUgdHdvCitjYXNlcyB3aGVyZSB0aGlzIG9jY3Vycy4gIFRoZSBmaXJzdCBpcyB3aGVuIHR3byBnZW5lcmFsIG9wZXJhdGlvbnMKK2FyZSBjb21iaW5lZC4gIE5vcm1hbGx5IGEgY29tbWEgc2VwYXJhdGVzIHRoZSBkaWZmZXJlbnQgcGFydHMsIGFzIGluCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgYTA9IHIzLmggKiByMi5sLCBhMSA9IHIzLmwgKiByMi5oIDsKKzwvcHJlPgorICAgICA8cD5UaGUgc2Vjb25kIGNhc2Ugb2NjdXJzIHdoZW4gYSBnZW5lcmFsIGluc3RydWN0aW9uIGlzIGNvbWJpbmVkIHdpdGggb25lCitvciB0d28gbWVtb3J5IHJlZmVyZW5jZXMgZm9yIGpvaW50IGlzc3VlLiAgVGhlIGxhdHRlciBwb3J0aW9ucyBhcmUKK3NldCBvZmYgYnkgYSAifHwiIHRva2VuLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGEwID0gcjMuaCAqIHIyLmwgfHwgcjEgPSBbcDMrK10gfHwgcjQgPSBbaTIrK107Cis8L3ByZT4KKyAgICAgPHA+TXVsdGlwbGUgaW5zdHJ1Y3Rpb25zIGNhbiBvY2N1ciBvbiB0aGUgc2FtZSBsaW5lLiAgRWFjaCBtdXN0IGJlCit0ZXJtaW5hdGVkIGJ5IGEgc2VtaWNvbG9uIGNoYXJhY3Rlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPlJlZ2lzdGVyIE5hbWVzPC9jb2RlPjxkZD4KK1RoZSBhc3NlbWJsZXIgdHJlYXRzIHJlZ2lzdGVyIG5hbWVzIGFuZCBpbnN0cnVjdGlvbiBrZXl3b3JkcyBpbiBhIGNhc2UKK2luc2Vuc2l0aXZlIG1hbm5lci4gIFVzZXIgaWRlbnRpZmllcnMgYXJlIGNhc2Ugc2Vuc2l0aXZlLiAgVGh1cywgUjMubCwKK1IzLkwsIHIzLmwgYW5kIHIzLkwgYXJlIGFsbCBlcXVpdmFsZW50IGlucHV0IHRvIHRoZSBhc3NlbWJsZXIuCisKKyAgICAgPHA+UmVnaXN0ZXIgbmFtZXMgYXJlIHJlc2VydmVkIGFuZCBtYXkgbm90IGJlIHVzZWQgYXMgcHJvZ3JhbSBpZGVudGlmaWVycy4KKworICAgICA8cD5Tb21lIG9wZXJhdGlvbnMgKHN1Y2ggYXMgIk1vdmUgUmVnaXN0ZXIiKSByZXF1aXJlIGEgcmVnaXN0ZXIgcGFpci4gCitSZWdpc3RlciBwYWlycyBhcmUgYWx3YXlzIGRhdGEgcmVnaXN0ZXJzIGFuZCBhcmUgZGVub3RlZCB1c2luZyBhIGNvbG9uLAorZWcuLCBSMzoyLiAgVGhlIGxhcmdlciBudW1iZXIgbXVzdCBiZSB3cml0dGVuIGZpcnN0cy4gIE5vdGUgdGhhdCB0aGUKK2hhcmR3YXJlIG9ubHkgc3VwcG9ydHMgb2RkLWV2ZW4gcGFpcnMsIGVnLiwgUjc6NiwgUjU6NCwgUjM6MiwgYW5kIFIxOjAuCisKKyAgICAgPHA+U29tZSBpbnN0cnVjdGlvbnMgKHN1Y2ggYXMgJm5kYXNoO1NQIChQdXNoIE11bHRpcGxlKSkgcmVxdWlyZSBhIGdyb3VwIG9mCithZGphY2VudCByZWdpc3RlcnMuICBBZGphY2VudCByZWdpc3RlcnMgYXJlIGRlbm90ZWQgaW4gdGhlIHN5bnRheCBieQordGhlIHJhbmdlIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIGFuZCBzZXBhcmF0ZWQgYnkgYSBjb2xvbiwgZWcuLCAoUjc6MykuIAorQWdhaW4sIHRoZSBsYXJnZXIgbnVtYmVyIGFwcGVhcnMgZmlyc3QuCisKKyAgICAgPHA+UG9ydGlvbnMgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyIG1heSBiZSBpbmRpdmlkdWFsbHkgc3BlY2lmaWVkLiAgVGhpcworaXMgd3JpdHRlbiB3aXRoIGEgZG90ICgiLiIpIGZvbGxvd2luZyB0aGUgcmVnaXN0ZXIgbmFtZSBhbmQgdGhlbiBhCitsZXR0ZXIgZGVub3RpbmcgdGhlIGRlc2lyZWQgcG9ydGlvbi4gIEZvciAzMi1iaXQgcmVnaXN0ZXJzLCAiLkgiCitkZW5vdGVzIHRoZSBtb3N0IHNpZ25pZmljYW50ICgiSGlnaCIpIHBvcnRpb24uICAiLkwiIGRlbm90ZXMgdGhlCitsZWFzdC1zaWduaWZpY2FudCBwb3J0aW9uLiAgVGhlIHN1YmRpdmlzaW9ucyBvZiB0aGUgNDAtYml0IHJlZ2lzdGVycworYXJlIGRlc2NyaWJlZCBsYXRlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPkFjY3VtdWxhdG9yczwvY29kZT48ZGQ+VGhlIHNldCBvZiA0MC1iaXQgcmVnaXN0ZXJzIEExIGFuZCBBMCB0aGF0IG5vcm1hbGx5IGNvbnRhaW4gZGF0YSB0aGF0CitpcyBiZWluZyBtYW5pcHVsYXRlZC4gIEVhY2ggYWNjdW11bGF0b3IgY2FuIGJlIGFjY2Vzc2VkIGluIGZvdXIgd2F5cy4KKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5vbmUgNDAtYml0IHJlZ2lzdGVyPC9jb2RlPjxkZD5UaGUgcmVnaXN0ZXIgd2lsbCBiZSByZWZlcnJlZCB0byBhcyBBMSBvciBBMC4gCis8YnI+PGR0Pjxjb2RlPm9uZSAzMi1iaXQgcmVnaXN0ZXI8L2NvZGU+PGRkPlRoZSByZWdpc3RlcnMgYXJlIGRlc2lnbmF0ZWQgYXMgQTEuVyBvciBBMC5XLiAKKzxicj48ZHQ+PGNvZGU+dHdvIDE2LWJpdCByZWdpc3RlcnM8L2NvZGU+PGRkPlRoZSByZWdpc3RlcnMgYXJlIGRlc2lnbmF0ZWQgYXMgQTEuSCwgQTEuTCwgQTAuSCBvciBBMC5MLiAKKzxicj48ZHQ+PGNvZGU+b25lIDgtYml0IHJlZ2lzdGVyPC9jb2RlPjxkZD5UaGUgcmVnaXN0ZXJzIGFyZSBkZXNpZ25hdGVkIGFzIEExLlggb3IgQTAuWCBmb3IgdGhlIGJpdHMgdGhhdAorZXh0ZW5kIGJleW9uZCBiaXQgMzEuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPkRhdGEgUmVnaXN0ZXJzPC9jb2RlPjxkZD5UaGUgc2V0IG9mIDMyLWJpdCByZWdpc3RlcnMgKFIwLCBSMSwgUjIsIFIzLCBSNCwgUjUsIFI2IGFuZCBSNykgdGhhdAorbm9ybWFsbHkgY29udGFpbiBkYXRhIGZvciBtYW5pcHVsYXRpb24uICBUaGVzZSBhcmUgYWJicmV2aWF0ZWQgYXMKK0QtcmVnaXN0ZXIgb3IgRHJlZy4gIERhdGEgcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NlZCBhcyAzMi1iaXQgcmVnaXN0ZXJzCitvciBhcyB0d28gaW5kZXBlbmRlbnQgMTYtYml0IHJlZ2lzdGVycy4gIFRoZSBsZWFzdCBzaWduaWZpY2FudCAxNiBiaXRzCitvZiBlYWNoIHJlZ2lzdGVyIGlzIGNhbGxlZCB0aGUgImxvdyIgaGFsZiBhbmQgaXMgZGVzaWduYXRlZCB3aXRoICIuTCIKK2ZvbGxvd2luZyB0aGUgcmVnaXN0ZXIgbmFtZS4gIFRoZSBtb3N0IHNpZ25pZmljYW50IDE2IGJpdHMgYXJlIGNhbGxlZAordGhlICJoaWdoIiBoYWxmIGFuZCBpcyBkZXNpZ25hdGVkIHdpdGggIi5IIiBmb2xsb3dpbmcgdGhlIG5hbWUuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgUjcuTCwgcjIuaCwgcjQuTCwgUjAuSAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+UG9pbnRlciBSZWdpc3RlcnM8L2NvZGU+PGRkPlRoZSBzZXQgb2YgMzItYml0IHJlZ2lzdGVycyAoUDAsIFAxLCBQMiwgUDMsIFA0LCBQNSwgU1AgYW5kIEZQKSB0aGF0Citub3JtYWxseSBjb250YWluIGJ5dGUgYWRkcmVzc2VzIG9mIGRhdGEgc3RydWN0dXJlcy4gIFRoZXNlIGFyZQorYWJicmV2aWF0ZWQgYXMgUC1yZWdpc3RlciBvciBQcmVnLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHAyLCBwNSwgZnAsIHNwCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5TdGFjayBQb2ludGVyIFNQPC9jb2RlPjxkZD5UaGUgc3RhY2sgcG9pbnRlciBjb250YWlucyB0aGUgMzItYml0IGFkZHJlc3Mgb2YgdGhlIGxhc3Qgb2NjdXBpZWQKK2J5dGUgbG9jYXRpb24gaW4gdGhlIHN0YWNrLiAgVGhlIHN0YWNrIGdyb3dzIGJ5IGRlY3JlbWVudGluZyB0aGUKK3N0YWNrIHBvaW50ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT5GcmFtZSBQb2ludGVyIEZQPC9jb2RlPjxkZD5UaGUgZnJhbWUgcG9pbnRlciBjb250YWlucyB0aGUgMzItYml0IGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIGZyYW1lCitwb2ludGVyIGluIHRoZSBzdGFjay4gIEl0IGlzIGxvY2F0ZWQgYXQgdGhlIHRvcCBvZiBhIGZyYW1lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+TG9vcCBUb3A8L2NvZGU+PGRkPkxUMCBhbmQgTFQxLiAgVGhlc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIDMyLWJpdCBhZGRyZXNzIG9mIHRoZSB0b3Agb2YKK2EgemVybyBvdmVyaGVhZCBsb29wLgorCisgICAgIDxicj48ZHQ+PGNvZGU+TG9vcCBDb3VudDwvY29kZT48ZGQ+TEMwIGFuZCBMQzEuICBUaGVzZSByZWdpc3RlcnMgY29udGFpbiB0aGUgMzItYml0IGNvdW50ZXIgb2YgdGhlIHplcm8KK292ZXJoZWFkIGxvb3AgZXhlY3V0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPkxvb3AgQm90dG9tPC9jb2RlPjxkZD5MQjAgYW5kIExCMS4gIFRoZXNlIHJlZ2lzdGVycyBjb250YWluIHRoZSAzMi1iaXQgYWRkcmVzcyBvZiB0aGUgYm90dG9tCitvZiBhIHplcm8gb3ZlcmhlYWQgbG9vcC4KKworICAgICA8YnI+PGR0Pjxjb2RlPkluZGV4IFJlZ2lzdGVyczwvY29kZT48ZGQ+VGhlIHNldCBvZiAzMi1iaXQgcmVnaXN0ZXJzIChJMCwgSTEsIEkyLCBJMykgdGhhdCBub3JtYWxseSBjb250YWluIGJ5dGUKK2FkZHJlc3NlcyBvZiBkYXRhIHN0cnVjdHVyZXMuICBBYmJyZXZpYXRlZCBJLXJlZ2lzdGVyIG9yIElyZWcuCisKKyAgICAgPGJyPjxkdD48Y29kZT5Nb2RpZnkgUmVnaXN0ZXJzPC9jb2RlPjxkZD5UaGUgc2V0IG9mIDMyLWJpdCByZWdpc3RlcnMgKE0wLCBNMSwgTTIsIE0zKSB0aGF0IG5vcm1hbGx5IGNvbnRhaW4KK29mZnNldCB2YWx1ZXMgdGhhdCBhcmUgYWRkZWQgYW5kIHN1YnRyYWN0ZWQgdG8gb25lIG9mIHRoZSBpbmRleAorcmVnaXN0ZXJzLiAgQWJicmV2aWF0ZWQgYXMgTXJlZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPkxlbmd0aCBSZWdpc3RlcnM8L2NvZGU+PGRkPlRoZSBzZXQgb2YgMzItYml0IHJlZ2lzdGVycyAoTDAsIEwxLCBMMiwgTDMpIHRoYXQgbm9ybWFsbHkgY29udGFpbiB0aGUKK2xlbmd0aCBpbiBieXRlcyBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyLiAgQWJicmV2aWF0ZWQgYXMgTHJlZy4gIENsZWFyCit0aGUgTHJlZyB0byBkaXNhYmxlIGNpcmN1bGFyIGFkZHJlc3NpbmcgZm9yIHRoZSBjb3JyZXNwb25kaW5nIElyZWcuCisKKyAgICAgPGJyPjxkdD48Y29kZT5CYXNlIFJlZ2lzdGVyczwvY29kZT48ZGQ+VGhlIHNldCBvZiAzMi1iaXQgcmVnaXN0ZXJzIChCMCwgQjEsIEIyLCBCMykgdGhhdCBub3JtYWxseSBjb250YWluIHRoZQorYmFzZSBhZGRyZXNzIGluIGJ5dGVzIG9mIHRoZSBjaXJjdWxhciBidWZmZXIuICBBYmJyZXZpYXRlZCBhcyBCcmVnLgorCisgICAgIDxicj48ZHQ+PGNvZGU+RmxvYXRpbmcgUG9pbnQ8L2NvZGU+PGRkPlRoZSBCbGFja2ZpbiBmYW1pbHkgaGFzIG5vIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50IGJ1dCB0aGUgLmZsb2F0CitkaXJlY3RpdmUgZ2VuZXJhdGVzIGllZWUgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBmb3IgdXNlIHdpdGggc29mdHdhcmUKK2Zsb2F0aW5nIHBvaW50IGxpYnJhcmllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPkJsYWNrZmluIE9wY29kZXM8L2NvZGU+PGRkPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgQmxhY2tmaW4gbWFjaGluZSBpbnN0cnVjdGlvbiBzZXQsIHNlZQordGhlIEJsYWNrZmluKHIpIFByb2Nlc3NvciBJbnN0cnVjdGlvbiBTZXQgUmVmZXJlbmNlLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9CbGFja2Zpbl8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9CbGFja2Zpbl8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYWY0NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0JsYWNrZmluXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CbGFja2Zpbi1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFWUl8wMDJkRGVwZW5kZW50Lmh0bWwjQVZSXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJBVlItRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ1IxNl8wMDJkRGVwZW5kZW50Lmh0bWwjQ1IxNl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQ1IxNi1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCbGFja2Zpbi1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IkJsYWNrZmluXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ1IxNl8wMDJkRGVwZW5kZW50Lmh0bWwjQ1IxNl8wMDJkRGVwZW5kZW50Ij5DUjE2LURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFWUl8wMDJkRGVwZW5kZW50Lmh0bWwjQVZSXzAwMmREZXBlbmRlbnQiPkFWUi1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuNiBCbGFja2ZpbiBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1CbGFja2Zpbi1zdXBwb3J0LTcyNiI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+OiAJCUJsYWNrZmluIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkJsYWNrZmluLVN5bnRheC5odG1sI0JsYWNrZmluLVN5bnRheCI+QmxhY2tmaW4gU3ludGF4PC9hPjogCQlCbGFja2ZpbiBTeW50YXgKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkJsYWNrZmluLURpcmVjdGl2ZXMuaHRtbCNCbGFja2Zpbi1EaXJlY3RpdmVzIj5CbGFja2ZpbiBEaXJlY3RpdmVzPC9hPjogCQlCbGFja2ZpbiBEaXJlY3RpdmVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9CdWctQ3JpdGVyaWEuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0J1Zy1Dcml0ZXJpYS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjA1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9CdWctQ3JpdGVyaWEuaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CdWcgQ3JpdGVyaWEgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiIHRpdGxlPSJSZXBvcnRpbmcgQnVncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIiB0aXRsZT0iQnVnIFJlcG9ydGluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJ1Zy1Dcml0ZXJpYSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjQnVnLVJlcG9ydGluZyI+QnVnIFJlcG9ydGluZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiPlJlcG9ydGluZyBCdWdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTAuMSBIYXZlIFlvdSBGb3VuZCBhIEJ1Zz88L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1idWctY3JpdGVyaWEtMjMzMyI+PC9hPgorSWYgeW91IGFyZSBub3Qgc3VyZSB3aGV0aGVyIHlvdSBoYXZlIGZvdW5kIGEgYnVnLCBoZXJlIGFyZSBzb21lIGd1aWRlbGluZXM6CisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1mYXRhbC1zaWduYWwtMjMzNCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWNyYXNoLTIzMzUiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWNyYXNoLW9mLWFzc2VtYmxlci0yMzM2Ij48L2E+Cis8dWw+PGxpPklmIHRoZSBhc3NlbWJsZXIgZ2V0cyBhIGZhdGFsIHNpZ25hbCwgZm9yIGFueSBpbnB1dCB3aGF0ZXZlciwgdGhhdCBpcyBhCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBidWcuICBSZWxpYWJsZSBhc3NlbWJsZXJzIG5ldmVyIGNyYXNoLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWVycm9yLW9uLXZhbGlkLWlucHV0LTIzMzciPjwvYT48bGk+SWYgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gcHJvZHVjZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdmFsaWQgaW5wdXQsIHRoYXQgaXMgYSBidWcuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtaW52YWxpZC1pbnB1dC0yMzM4Ij48L2E+PGxpPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGRvZXMgbm90IHByb2R1Y2UgYW4gZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBpbnB1dCwgdGhhdAoraXMgYSBidWcuICBIb3dldmVyLCB5b3Ugc2hvdWxkIG5vdGUgdGhhdCB5b3VyIGlkZWEgb2YgJmxkcXVvO2ludmFsaWQgaW5wdXQmcmRxdW87IG1pZ2h0CitiZSBvdXIgaWRlYSBvZiAmbGRxdW87YW4gZXh0ZW5zaW9uJnJkcXVvOyBvciAmbGRxdW87c3VwcG9ydCBmb3IgdHJhZGl0aW9uYWwgcHJhY3RpY2UmcmRxdW87LgorCisgICAgIDxsaT5JZiB5b3UgYXJlIGFuIGV4cGVyaWVuY2VkIHVzZXIgb2YgYXNzZW1ibGVycywgeW91ciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQKK29mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGFyZSB3ZWxjb21lIGluIGFueSBjYXNlLiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0J1Zy1SZXBvcnRpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0J1Zy1SZXBvcnRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDEyMmMxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQnVnLVJlcG9ydGluZy5odG1sCkBAIC0wLDAgKzEsMTg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CdWcgUmVwb3J0aW5nIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIiB0aXRsZT0iUmVwb3J0aW5nIEJ1Z3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiIHRpdGxlPSJCdWcgQ3JpdGVyaWEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCdWctUmVwb3J0aW5nIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEwLjIgSG93IHRvIFJlcG9ydCBCdWdzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYnVnLXJlcG9ydHMtMjMzOSI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1idWdzXzAwMmMtcmVwb3J0aW5nLTIzNDAiPjwvYT4KK0EgbnVtYmVyIG9mIGNvbXBhbmllcyBhbmQgaW5kaXZpZHVhbHMgb2ZmZXIgc3VwcG9ydCBmb3IgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IHByb2R1Y3RzLiAgSWYKK3lvdSBvYnRhaW5lZCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBmcm9tIGEgc3VwcG9ydCBvcmdhbml6YXRpb24sIHdlIHJlY29tbWVuZCB5b3UKK2NvbnRhY3QgdGhhdCBvcmdhbml6YXRpb24gZmlyc3QuCisKKyAgIDxwPllvdSBjYW4gZmluZCBjb250YWN0IGluZm9ybWF0aW9uIGZvciBtYW55IHN1cHBvcnQgY29tcGFuaWVzIGFuZAoraW5kaXZpZHVhbHMgaW4gdGhlIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmV0Yy9TRVJWSUNFPC9zcGFuPjwvc2FtcD4gaW4gdGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBFbWFjcworZGlzdHJpYnV0aW9uLgorCisgICA8cD5JbiBhbnkgZXZlbnQsIHdlIGFsc28gcmVjb21tZW5kIHRoYXQgeW91IHNlbmQgYnVnIHJlcG9ydHMgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+Cit0byA8YSBocmVmPSJodHRwOi8vd3d3LnNvdXJjZXdhcmUub3JnL2J1Z3ppbGxhLyI+aHR0cDovL3d3dy5zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS88L2E+LgorCisgICA8cD5UaGUgZnVuZGFtZW50YWwgcHJpbmNpcGxlIG9mIHJlcG9ydGluZyBidWdzIHVzZWZ1bGx5IGlzIHRoaXM6Cis8c3Ryb25nPnJlcG9ydCBhbGwgdGhlIGZhY3RzPC9zdHJvbmc+LiAgSWYgeW91IGFyZSBub3Qgc3VyZSB3aGV0aGVyIHRvIHN0YXRlIGEKK2ZhY3Qgb3IgbGVhdmUgaXQgb3V0LCBzdGF0ZSBpdCEKKworICAgPHA+T2Z0ZW4gcGVvcGxlIG9taXQgZmFjdHMgYmVjYXVzZSB0aGV5IHRoaW5rIHRoZXkga25vdyB3aGF0IGNhdXNlcyB0aGUgcHJvYmxlbQorYW5kIGFzc3VtZSB0aGF0IHNvbWUgZGV0YWlscyBkbyBub3QgbWF0dGVyLiAgVGh1cywgeW91IG1pZ2h0IGFzc3VtZSB0aGF0IHRoZQorbmFtZSBvZiBhIHN5bWJvbCB5b3UgdXNlIGluIGFuIGV4YW1wbGUgZG9lcyBub3QgbWF0dGVyLiAgV2VsbCwgcHJvYmFibHkgaXQgZG9lcworbm90LCBidXQgb25lIGNhbm5vdCBiZSBzdXJlLiAgUGVyaGFwcyB0aGUgYnVnIGlzIGEgc3RyYXkgbWVtb3J5IHJlZmVyZW5jZSB3aGljaAoraGFwcGVucyB0byBmZXRjaCBmcm9tIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGF0IG5hbWUgaXMgc3RvcmVkIGluIG1lbW9yeTsKK3BlcmhhcHMsIGlmIHRoZSBuYW1lIHdlcmUgZGlmZmVyZW50LCB0aGUgY29udGVudHMgb2YgdGhhdCBsb2NhdGlvbiB3b3VsZCBmb29sCit0aGUgYXNzZW1ibGVyIGludG8gZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGRlc3BpdGUgdGhlIGJ1Zy4gIFBsYXkgaXQgc2FmZSBhbmQKK2dpdmUgYSBzcGVjaWZpYywgY29tcGxldGUgZXhhbXBsZS4gIFRoYXQgaXMgdGhlIGVhc2llc3QgdGhpbmcgZm9yIHlvdSB0byBkbywKK2FuZCB0aGUgbW9zdCBoZWxwZnVsLgorCisgICA8cD5LZWVwIGluIG1pbmQgdGhhdCB0aGUgcHVycG9zZSBvZiBhIGJ1ZyByZXBvcnQgaXMgdG8gZW5hYmxlIHVzIHRvIGZpeCB0aGUgYnVnIGlmCitpdCBpcyBuZXcgdG8gdXMuICBUaGVyZWZvcmUsIGFsd2F5cyB3cml0ZSB5b3VyIGJ1ZyByZXBvcnRzIG9uIHRoZSBhc3N1bXB0aW9uCit0aGF0IHRoZSBidWcgaGFzIG5vdCBiZWVuIHJlcG9ydGVkIHByZXZpb3VzbHkuCisKKyAgIDxwPlNvbWV0aW1lcyBwZW9wbGUgZ2l2ZSBhIGZldyBza2V0Y2h5IGZhY3RzIGFuZCBhc2ssICZsZHF1bztEb2VzIHRoaXMgcmluZyBhCitiZWxsPyZyZHF1bzsgIFRoaXMgY2Fubm90IGhlbHAgdXMgZml4IGEgYnVnLCBzbyBpdCBpcyBiYXNpY2FsbHkgdXNlbGVzcy4gIFdlCityZXNwb25kIGJ5IGFza2luZyBmb3IgZW5vdWdoIGRldGFpbHMgdG8gZW5hYmxlIHVzIHRvIGludmVzdGlnYXRlLiAKK1lvdSBtaWdodCBhcyB3ZWxsIGV4cGVkaXRlIG1hdHRlcnMgYnkgc2VuZGluZyB0aGVtIHRvIGJlZ2luIHdpdGguCisKKyAgIDxwPlRvIGVuYWJsZSB1cyB0byBmaXggdGhlIGJ1ZywgeW91IHNob3VsZCBpbmNsdWRlIGFsbCB0aGVzZSB0aGluZ3M6CisKKyAgICAgPHVsPgorPGxpPlRoZSB2ZXJzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+LiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYW5ub3VuY2VzIGl0IGlmIHlvdSBzdGFydAoraXQgd2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXZlcnNpb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXJndW1lbnQuCisKKyAgICAgPHA+V2l0aG91dCB0aGlzLCB3ZSB3aWxsIG5vdCBrbm93IHdoZXRoZXIgdGhlcmUgaXMgYW55IHBvaW50IGluIGxvb2tpbmcgZm9yCit0aGUgYnVnIGluIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGxpPkFueSBwYXRjaGVzIHlvdSBtYXkgaGF2ZSBhcHBsaWVkIHRvIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBzb3VyY2UuCisKKyAgICAgPGxpPlRoZSB0eXBlIG9mIG1hY2hpbmUgeW91IGFyZSB1c2luZywgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kCit2ZXJzaW9uIG51bWJlci4KKworICAgICA8bGk+V2hhdCBjb21waWxlciAoYW5kIGl0cyB2ZXJzaW9uKSB3YXMgdXNlZCB0byBjb21waWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+Jm1kYXNoO2UuZy4gCismbGRxdW87PGNvZGU+Z2NjLTIuNzwvY29kZT4mcmRxdW87LgorCisgICAgIDxsaT5UaGUgY29tbWFuZCBhcmd1bWVudHMgeW91IGdhdmUgdGhlIGFzc2VtYmxlciB0byBhc3NlbWJsZSB5b3VyIGV4YW1wbGUgYW5kCitvYnNlcnZlIHRoZSBidWcuICBUbyBndWFyYW50ZWUgeW91IHdpbGwgbm90IG9taXQgc29tZXRoaW5nIGltcG9ydGFudCwgbGlzdCB0aGVtCithbGwuICBBIGNvcHkgb2YgdGhlIE1ha2VmaWxlIChvciB0aGUgb3V0cHV0IGZyb20gbWFrZSkgaXMgc3VmZmljaWVudC4KKworICAgICA8cD5JZiB3ZSB3ZXJlIHRvIHRyeSB0byBndWVzcyB0aGUgYXJndW1lbnRzLCB3ZSB3b3VsZCBwcm9iYWJseSBndWVzcyB3cm9uZworYW5kIHRoZW4gd2UgbWlnaHQgbm90IGVuY291bnRlciB0aGUgYnVnLgorCisgICAgIDxsaT5BIGNvbXBsZXRlIGlucHV0IGZpbGUgdGhhdCB3aWxsIHJlcHJvZHVjZSB0aGUgYnVnLiAgSWYgdGhlIGJ1ZyBpcyBvYnNlcnZlZCB3aGVuCit0aGUgYXNzZW1ibGVyIGlzIGludm9rZWQgdmlhIGEgY29tcGlsZXIsIHNlbmQgdGhlIGFzc2VtYmxlciBzb3VyY2UsIG5vdCB0aGUKK2hpZ2ggbGV2ZWwgbGFuZ3VhZ2Ugc291cmNlLiAgTW9zdCBjb21waWxlcnMgd2lsbCBwcm9kdWNlIHRoZSBhc3NlbWJsZXIgc291cmNlCit3aGVuIHJ1biB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1TPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbi4gIElmIHlvdSBhcmUgdXNpbmcgPGNvZGU+Z2NjPC9jb2RlPiwgdXNlCit0aGUgb3B0aW9ucyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi12IC0tc2F2ZS10ZW1wczwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgdGhpcyB3aWxsIHNhdmUgdGhlIGFzc2VtYmxlciBzb3VyY2UgaW4gYQorZmlsZSB3aXRoIGFuIGV4dGVuc2lvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LnM8L3NwYW4+PC9zYW1wPiwgYW5kIGFsc28gc2hvdyB5b3UgZXhhY3RseSBob3cKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGlzIGJlaW5nIHJ1bi4KKworICAgICA8bGk+QSBkZXNjcmlwdGlvbiBvZiB3aGF0IGJlaGF2aW9yIHlvdSBvYnNlcnZlIHRoYXQgeW91IGJlbGlldmUgaXMKK2luY29ycmVjdC4gIEZvciBleGFtcGxlLCAmbGRxdW87SXQgZ2V0cyBhIGZhdGFsIHNpZ25hbC4mcmRxdW87CisKKyAgICAgPHA+T2YgY291cnNlLCBpZiB0aGUgYnVnIGlzIHRoYXQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gZ2V0cyBhIGZhdGFsIHNpZ25hbCwgdGhlbiB3ZQord2lsbCBjZXJ0YWlubHkgbm90aWNlIGl0LiAgQnV0IGlmIHRoZSBidWcgaXMgaW5jb3JyZWN0IG91dHB1dCwgd2UgbWlnaHQgbm90Citub3RpY2UgdW5sZXNzIGl0IGlzIGdsYXJpbmdseSB3cm9uZy4gIFlvdSBtaWdodCBhcyB3ZWxsIG5vdCBnaXZlIHVzIGEgY2hhbmNlIHRvCittYWtlIGEgbWlzdGFrZS4KKworICAgICA8cD5FdmVuIGlmIHRoZSBwcm9ibGVtIHlvdSBleHBlcmllbmNlIGlzIGEgZmF0YWwgc2lnbmFsLCB5b3Ugc2hvdWxkIHN0aWxsIHNheSBzbworZXhwbGljaXRseS4gIFN1cHBvc2Ugc29tZXRoaW5nIHN0cmFuZ2UgaXMgZ29pbmcgb24sIHN1Y2ggYXMsIHlvdXIgY29weSBvZgorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaXMgb3V0IG9mIHN5bmMsIG9yIHlvdSBoYXZlIGVuY291bnRlcmVkIGEgYnVnIGluIHRoZSBDCitsaWJyYXJ5IG9uIHlvdXIgc3lzdGVtLiAgKFRoaXMgaGFzIGhhcHBlbmVkISkgIFlvdXIgY29weSBtaWdodCBjcmFzaCBhbmQgb3Vycword291bGQgbm90LiAgSWYgeW91IHRvbGQgdXMgdG8gZXhwZWN0IGEgY3Jhc2gsIHRoZW4gd2hlbiBvdXJzIGZhaWxzIHRvIGNyYXNoLCB3ZQord291bGQga25vdyB0aGF0IHRoZSBidWcgd2FzIG5vdCBoYXBwZW5pbmcgZm9yIHVzLiAgSWYgeW91IGhhZCBub3QgdG9sZCB1cyB0bworZXhwZWN0IGEgY3Jhc2gsIHRoZW4gd2Ugd291bGQgbm90IGJlIGFibGUgdG8gZHJhdyBhbnkgY29uY2x1c2lvbiBmcm9tIG91cgorb2JzZXJ2YXRpb25zLgorCisgICAgIDxsaT5JZiB5b3Ugd2lzaCB0byBzdWdnZXN0IGNoYW5nZXMgdG8gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHNvdXJjZSwgc2VuZCB1cyBjb250ZXh0CitkaWZmcywgYXMgZ2VuZXJhdGVkIGJ5IDxjb2RlPmRpZmY8L2NvZGU+IHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWM8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXA8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29wdGlvbi4gIEFsd2F5cyBzZW5kIGRpZmZzIGZyb20gdGhlIG9sZCBmaWxlIHRvIHRoZSBuZXcgZmlsZS4gIElmIHlvdSBldmVuCitkaXNjdXNzIHNvbWV0aGluZyBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc291cmNlLCByZWZlciB0byBpdCBieSBjb250ZXh0LCBub3QKK2J5IGxpbmUgbnVtYmVyLgorCisgICAgIDxwPlRoZSBsaW5lIG51bWJlcnMgaW4gb3VyIGRldmVsb3BtZW50IHNvdXJjZXMgd2lsbCBub3QgbWF0Y2ggdGhvc2UgaW4geW91cgorc291cmNlcy4gIFlvdXIgbGluZSBudW1iZXJzIHdvdWxkIGNvbnZleSBubyB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdXMuIAorPC91bD4KKworICAgPHA+SGVyZSBhcmUgc29tZSB0aGluZ3MgdGhhdCBhcmUgbm90IG5lY2Vzc2FyeToKKworICAgICA8dWw+Cis8bGk+QSBkZXNjcmlwdGlvbiBvZiB0aGUgZW52ZWxvcGUgb2YgdGhlIGJ1Zy4KKworICAgICA8cD5PZnRlbiBwZW9wbGUgd2hvIGVuY291bnRlciBhIGJ1ZyBzcGVuZCBhIGxvdCBvZiB0aW1lIGludmVzdGlnYXRpbmcKK3doaWNoIGNoYW5nZXMgdG8gdGhlIGlucHV0IGZpbGUgd2lsbCBtYWtlIHRoZSBidWcgZ28gYXdheSBhbmQgd2hpY2gKK2NoYW5nZXMgd2lsbCBub3QgYWZmZWN0IGl0LgorCisgICAgIDxwPlRoaXMgaXMgb2Z0ZW4gdGltZSBjb25zdW1pbmcgYW5kIG5vdCB2ZXJ5IHVzZWZ1bCwgYmVjYXVzZSB0aGUgd2F5IHdlCit3aWxsIGZpbmQgdGhlIGJ1ZyBpcyBieSBydW5uaW5nIGEgc2luZ2xlIGV4YW1wbGUgdW5kZXIgdGhlIGRlYnVnZ2VyCit3aXRoIGJyZWFrcG9pbnRzLCBub3QgYnkgcHVyZSBkZWR1Y3Rpb24gZnJvbSBhIHNlcmllcyBvZiBleGFtcGxlcy4gCitXZSByZWNvbW1lbmQgdGhhdCB5b3Ugc2F2ZSB5b3VyIHRpbWUgZm9yIHNvbWV0aGluZyBlbHNlLgorCisgICAgIDxwPk9mIGNvdXJzZSwgaWYgeW91IGNhbiBmaW5kIGEgc2ltcGxlciBleGFtcGxlIHRvIHJlcG9ydCA8ZW0+aW5zdGVhZDwvZW0+CitvZiB0aGUgb3JpZ2luYWwgb25lLCB0aGF0IGlzIGEgY29udmVuaWVuY2UgZm9yIHVzLiAgRXJyb3JzIGluIHRoZQorb3V0cHV0IHdpbGwgYmUgZWFzaWVyIHRvIHNwb3QsIHJ1bm5pbmcgdW5kZXIgdGhlIGRlYnVnZ2VyIHdpbGwgdGFrZQorbGVzcyB0aW1lLCBhbmQgc28gb24uCisKKyAgICAgPHA+SG93ZXZlciwgc2ltcGxpZmljYXRpb24gaXMgbm90IHZpdGFsOyBpZiB5b3UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcywKK3JlcG9ydCB0aGUgYnVnIGFueXdheSBhbmQgc2VuZCB1cyB0aGUgZW50aXJlIHRlc3QgY2FzZSB5b3UgdXNlZC4KKworICAgICA8bGk+QSBwYXRjaCBmb3IgdGhlIGJ1Zy4KKworICAgICA8cD5BIHBhdGNoIGZvciB0aGUgYnVnIGRvZXMgaGVscCB1cyBpZiBpdCBpcyBhIGdvb2Qgb25lLiAgQnV0IGRvIG5vdCBvbWl0Cit0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSB0ZXN0IGNhc2UsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQKK2EgcGF0Y2ggaXMgYWxsIHdlIG5lZWQuICBXZSBtaWdodCBzZWUgcHJvYmxlbXMgd2l0aCB5b3VyIHBhdGNoIGFuZCBkZWNpZGUKK3RvIGZpeCB0aGUgcHJvYmxlbSBhbm90aGVyIHdheSwgb3Igd2UgbWlnaHQgbm90IHVuZGVyc3RhbmQgaXQgYXQgYWxsLgorCisgICAgIDxwPlNvbWV0aW1lcyB3aXRoIGEgcHJvZ3JhbSBhcyBjb21wbGljYXRlZCBhcyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBpdCBpcyB2ZXJ5IGhhcmQgdG8KK2NvbnN0cnVjdCBhbiBleGFtcGxlIHRoYXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGZvbGxvdyBhIGNlcnRhaW4gcGF0aCB0aHJvdWdoCit0aGUgY29kZS4gIElmIHlvdSBkbyBub3Qgc2VuZCB1cyB0aGUgZXhhbXBsZSwgd2Ugd2lsbCBub3QgYmUgYWJsZSB0byBjb25zdHJ1Y3QKK29uZSwgc28gd2Ugd2lsbCBub3QgYmUgYWJsZSB0byB2ZXJpZnkgdGhhdCB0aGUgYnVnIGlzIGZpeGVkLgorCisgICAgIDxwPkFuZCBpZiB3ZSBjYW5ub3QgdW5kZXJzdGFuZCB3aGF0IGJ1ZyB5b3UgYXJlIHRyeWluZyB0byBmaXgsIG9yIHdoeSB5b3VyCitwYXRjaCBzaG91bGQgYmUgYW4gaW1wcm92ZW1lbnQsIHdlIHdpbGwgbm90IGluc3RhbGwgaXQuICBBIHRlc3QgY2FzZSB3aWxsCitoZWxwIHVzIHRvIHVuZGVyc3RhbmQuCisKKyAgICAgPGxpPkEgZ3Vlc3MgYWJvdXQgd2hhdCB0aGUgYnVnIGlzIG9yIHdoYXQgaXQgZGVwZW5kcyBvbi4KKworICAgICA8cD5TdWNoIGd1ZXNzZXMgYXJlIHVzdWFsbHkgd3JvbmcuICBFdmVuIHdlIGNhbm5vdCBndWVzcyByaWdodCBhYm91dCBzdWNoCit0aGluZ3Mgd2l0aG91dCBmaXJzdCB1c2luZyB0aGUgZGVidWdnZXIgdG8gZmluZCB0aGUgZmFjdHMuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQnVuZGxlLWRpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0J1bmRsZS1kaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2MmZmYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0J1bmRsZS1kaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSwxMDEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJ1bmRsZSBkaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCYWxpZ24uaHRtbCNCYWxpZ24iIHRpdGxlPSJCYWxpZ24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJCeXRlLmh0bWwjQnl0ZSIgdGl0bGU9IkJ5dGUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCdW5kbGUtZGlyZWN0aXZlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCeXRlLmh0bWwjQnl0ZSI+Qnl0ZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkJhbGlnbi5odG1sI0JhbGlnbiI+QmFsaWduPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjggPGNvZGU+LmJ1bmRsZV9hbGlnbl9tb2RlIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JidW5kbGVfMDA1ZmFsaWduXzAwNWZtb2RlXzAwN2QtZGlyZWN0aXZlLTI5MCI+PC9hPjxhIG5hbWU9ImluZGV4LWJ1bmRsZS0yOTEiPjwvYT48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1idW5kbGUtMjkyIj48L2E+PGEgbmFtZT0iaW5kZXgtYWxpZ25lZC1pbnN0cnVjdGlvbi1idW5kbGUtMjkzIj48L2E+PGNvZGU+LmJ1bmRsZV9hbGlnbl9tb2RlPC9jb2RlPiBlbmFibGVzIG9yIGRpc2FibGVzIDxkZm4+YWxpZ25lZCBpbnN0cnVjdGlvbgorYnVuZGxlPC9kZm4+IG1vZGUuICBJbiB0aGlzIG1vZGUsIHNlcXVlbmNlcyBvZiBhZGphY2VudCBpbnN0cnVjdGlvbnMgYXJlIGdyb3VwZWQKK2ludG8gZml4ZWQtc2l6ZWQgPGRmbj5idW5kbGVzPC9kZm4+LiAgSWYgdGhlIGFyZ3VtZW50IGlzIHplcm8sIHRoaXMgbW9kZSBpcworZGlzYWJsZWQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0IHN0YXRlKS4gIElmIHRoZSBhcmd1bWVudCBpdCBub3QgemVybywgaXQKK2dpdmVzIHRoZSBzaXplIG9mIGFuIGluc3RydWN0aW9uIGJ1bmRsZSBhcyBhIHBvd2VyIG9mIHR3byAoYXMgZm9yIHRoZQorPGNvZGU+LnAyYWxpZ248L2NvZGU+IGRpcmVjdGl2ZSwgc2VlIDxhIGhyZWY9IlAyYWxpZ24uaHRtbCNQMmFsaWduIj5QMmFsaWduPC9hPikuCisKKyAgIDxwPkZvciBzb21lIHRhcmdldHMsIGl0J3MgYW4gQUJJIHJlcXVpcmVtZW50IHRoYXQgbm8gaW5zdHJ1Y3Rpb24gbWF5IHNwYW4gYQorY2VydGFpbiBhbGlnbmVkIGJvdW5kYXJ5LiAgQSA8ZGZuPmJ1bmRsZTwvZGZuPiBpcyBzaW1wbHkgYSBzZXF1ZW5jZSBvZgoraW5zdHJ1Y3Rpb25zIHRoYXQgc3RhcnRzIG9uIGFuIGFsaWduZWQgYm91bmRhcnkuICBGb3IgZXhhbXBsZSwgaWYKKzx2YXI+YWJzLWV4cHI8L3Zhcj4gaXMgPGNvZGU+NTwvY29kZT4gdGhlbiB0aGUgYnVuZGxlIHNpemUgaXMgMzIsIHNvIGVhY2ggYWxpZ25lZAorY2h1bmsgb2YgMzIgYnl0ZXMgaXMgYSBidW5kbGUuICBXaGVuIGFsaWduZWQgaW5zdHJ1Y3Rpb24gYnVuZGxlIG1vZGUgaXMgaW4KK2VmZmVjdCwgbm8gc2luZ2xlIGluc3RydWN0aW9uIG1heSBzcGFuIGEgYm91bmRhcnkgYmV0d2VlbiBidW5kbGVzLiAgSWYgYW4KK2luc3RydWN0aW9uIHdvdWxkIHN0YXJ0IHRvbyBjbG9zZSB0byB0aGUgZW5kIG9mIGEgYnVuZGxlIGZvciB0aGUgbGVuZ3RoIG9mCit0aGF0IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24gdG8gZml0IHdpdGhpbiB0aGUgYnVuZGxlLCB0aGVuIHRoZSBzcGFjZSBhdCB0aGUKK2VuZCBvZiB0aGF0IGJ1bmRsZSBpcyBmaWxsZWQgd2l0aCBuby1vcCBpbnN0cnVjdGlvbnMgc28gdGhlIGluc3RydWN0aW9uCitzdGFydHMgaW4gdGhlIG5leHQgYnVuZGxlLiAgQXMgYSBjb3JvbGxhcnksIGl0J3MgYW4gZXJyb3IgaWYgYW55IHNpbmdsZQoraW5zdHJ1Y3Rpb24ncyBlbmNvZGluZyBpcyBsb25nZXIgdGhhbiB0aGUgYnVuZGxlIHNpemUuCisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny45IDxjb2RlPi5idW5kbGVfbG9jazwvY29kZT4gYW5kIDxjb2RlPi5idW5kbGVfdW5sb2NrPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYnVuZGxlXzAwNWZsb2NrXzAwN2QtZGlyZWN0aXZlLTI5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYnVuZGxlXzAwNWZ1bmxvY2tfMDA3ZC1kaXJlY3RpdmUtMjk1Ij48L2E+VGhlIDxjb2RlPi5idW5kbGVfbG9jazwvY29kZT4gYW5kIGRpcmVjdGl2ZSA8Y29kZT4uYnVuZGxlX3VubG9jazwvY29kZT4gZGlyZWN0aXZlcworYWxsb3cgZXhwbGljaXQgY29udHJvbCBvdmVyIGluc3RydWN0aW9uIGJ1bmRsZSBwYWRkaW5nLiAgVGhlc2UgZGlyZWN0aXZlcworYXJlIG9ubHkgdmFsaWQgd2hlbiA8Y29kZT4uYnVuZGxlX2FsaWduX21vZGU8L2NvZGU+IGhhcyBiZWVuIHVzZWQgdG8gZW5hYmxlCithbGlnbmVkIGluc3RydWN0aW9uIGJ1bmRsZSBtb2RlLiAgSXQncyBhbiBlcnJvciBpZiB0aGV5IGFwcGVhciB3aGVuCis8Y29kZT4uYnVuZGxlX2FsaWduX21vZGU8L2NvZGU+IGhhcyBub3QgYmVlbiB1c2VkIGF0IGFsbCwgb3Igd2hlbiB0aGUgbGFzdAorZGlyZWN0aXZlIHdhcyA8Y29kZT4uYnVuZGxlX2FsaWduX21vZGUmbmJzcDswPC9jb2RlPjwhLS0gL0B3IC0tPi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtYnVuZGxlXzAwMmRsb2NrZWQtMjk2Ij48L2E+Rm9yIHNvbWUgdGFyZ2V0cywgaXQncyBhbiBBQkkgcmVxdWlyZW1lbnQgdGhhdCBjZXJ0YWluIGluc3RydWN0aW9ucyBtYXkKK2FwcGVhciBvbmx5IGFzIHBhcnQgb2Ygc3BlY2lmaWVkIHBlcm1pc3NpYmxlIHNlcXVlbmNlcyBvZiBtdWx0aXBsZQoraW5zdHJ1Y3Rpb25zLCBhbGwgd2l0aGluIHRoZSBzYW1lIGJ1bmRsZS4gIEEgcGFpciBvZiA8Y29kZT4uYnVuZGxlX2xvY2s8L2NvZGU+CithbmQgPGNvZGU+LmJ1bmRsZV91bmxvY2s8L2NvZGU+IGRpcmVjdGl2ZXMgZGVmaW5lIGEgPGRmbj5idW5kbGUtbG9ja2VkPC9kZm4+CitpbnN0cnVjdGlvbiBzZXF1ZW5jZS4gIEZvciBwdXJwb3NlcyBvZiBhbGlnbmVkIGluc3RydWN0aW9uIGJ1bmRsZSBtb2RlLCBhCitzZXF1ZW5jZSBzdGFydGluZyB3aXRoIDxjb2RlPi5idW5kbGVfbG9jazwvY29kZT4gYW5kIGVuZGluZyB3aXRoCis8Y29kZT4uYnVuZGxlX3VubG9jazwvY29kZT4gaXMgdHJlYXRlZCBhcyBhIHNpbmdsZSBpbnN0cnVjdGlvbi4gIFRoYXQgaXMsIHRoZQorZW50aXJlIHNlcXVlbmNlIG11c3QgZml0IGludG8gYSBzaW5nbGUgYnVuZGxlIGFuZCBtYXkgbm90IHNwYW4gYSBidW5kbGUKK2JvdW5kYXJ5LiAgSWYgbmVjZXNzYXJ5LCBuby1vcCBpbnN0cnVjdGlvbnMgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmUgdGhlCitmaXJzdCBpbnN0cnVjdGlvbiBvZiB0aGUgc2VxdWVuY2Ugc28gdGhhdCB0aGUgd2hvbGUgc2VxdWVuY2Ugc3RhcnRzIG9uIGFuCithbGlnbmVkIGJ1bmRsZSBib3VuZGFyeS4gIEl0J3MgYW4gZXJyb3IgaWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIHRoZQorYnVuZGxlIHNpemUuCisKKyAgIDxwPkZvciBjb252ZW5pZW5jZSB3aGVuIHVzaW5nIDxjb2RlPi5idW5kbGVfbG9jazwvY29kZT4gYW5kIDxjb2RlPi5idW5kbGVfdW5sb2NrPC9jb2RlPgoraW5zaWRlIGFzc2VtYmxlciBtYWNyb3MgKHNlZSA8YSBocmVmPSJNYWNyby5odG1sI01hY3JvIj5NYWNybzwvYT4pLCBidW5kbGUtbG9ja2VkIHNlcXVlbmNlcyBtYXkgYmUKK25lc3RlZC4gIFRoYXQgaXMsIGEgc2Vjb25kIDxjb2RlPi5idW5kbGVfbG9jazwvY29kZT4gZGlyZWN0aXZlIGJlZm9yZSB0aGUgbmV4dAorPGNvZGU+LmJ1bmRsZV91bmxvY2s8L2NvZGU+IGRpcmVjdGl2ZSBoYXMgbm8gZWZmZWN0IGV4Y2VwdCB0aGF0IGl0IG11c3QgYmUKK21hdGNoZWQgYnkgYW5vdGhlciBjbG9zaW5nIDxjb2RlPi5idW5kbGVfdW5sb2NrPC9jb2RlPiBzbyB0aGF0IHRoZXJlIGlzIHRoZQorc2FtZSBudW1iZXIgb2YgPGNvZGU+LmJ1bmRsZV9sb2NrPC9jb2RlPiBhbmQgPGNvZGU+LmJ1bmRsZV91bmxvY2s8L2NvZGU+IGRpcmVjdGl2ZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0J5dGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0J5dGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE1NTk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQnl0ZS5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJ5dGUgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJ1bmRsZS1kaXJlY3RpdmVzLmh0bWwjQnVuZGxlLWRpcmVjdGl2ZXMiIHRpdGxlPSJCdW5kbGUgZGlyZWN0aXZlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiIHRpdGxlPSJDRkkgZGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJ5dGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Q0ZJIGRpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCdW5kbGUtZGlyZWN0aXZlcy5odG1sI0J1bmRsZS1kaXJlY3RpdmVzIj5CdW5kbGUgZGlyZWN0aXZlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMCA8Y29kZT4uYnl0ZSA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYnl0ZV8wMDdkLWRpcmVjdGl2ZS0yOTciPjwvYT48YSBuYW1lPSJpbmRleC1pbnRlZ2Vyc18wMDJjLW9uZS1ieXRlLTI5OCI+PC9hPjxjb2RlPi5ieXRlPC9jb2RlPiBleHBlY3RzIHplcm8gb3IgbW9yZSBleHByZXNzaW9ucywgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gCitFYWNoIGV4cHJlc3Npb24gaXMgYXNzZW1ibGVkIGludG8gdGhlIG5leHQgYnl0ZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ0ZJLWRpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NGSS1kaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxMjBkOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NGSS1kaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNGSSBkaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCeXRlLmh0bWwjQnl0ZSIgdGl0bGU9IkJ5dGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb21tLmh0bWwjQ29tbSIgdGl0bGU9IkNvbW0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDRkktZGlyZWN0aXZlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb21tLmh0bWwjQ29tbSI+Q29tbTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkJ5dGUuaHRtbCNCeXRlIj5CeXRlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjExIDxjb2RlPi5jZmlfc2VjdGlvbnMgPC9jb2RlPjx2YXI+c2VjdGlvbl9saXN0PC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjZmlfMDA1ZnNlY3Rpb25zXzAwN2QtZGlyZWN0aXZlLTI5OSI+PC9hPjxjb2RlPi5jZmlfc2VjdGlvbnM8L2NvZGU+IG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgd2hldGhlciBDRkkgZGlyZWN0aXZlcworc2hvdWxkIGVtaXQgPGNvZGU+LmVoX2ZyYW1lPC9jb2RlPiBzZWN0aW9uIGFuZC9vciA8Y29kZT4uZGVidWdfZnJhbWU8L2NvZGU+IHNlY3Rpb24uIAorSWYgPHZhcj5zZWN0aW9uX2xpc3Q8L3Zhcj4gaXMgPGNvZGU+LmVoX2ZyYW1lPC9jb2RlPiwgPGNvZGU+LmVoX2ZyYW1lPC9jb2RlPiBpcyBlbWl0dGVkLAoraWYgPHZhcj5zZWN0aW9uX2xpc3Q8L3Zhcj4gaXMgPGNvZGU+LmRlYnVnX2ZyYW1lPC9jb2RlPiwgPGNvZGU+LmRlYnVnX2ZyYW1lPC9jb2RlPiBpcyBlbWl0dGVkLiAKK1RvIGVtaXQgYm90aCB1c2UgPGNvZGU+LmVoX2ZyYW1lLCAuZGVidWdfZnJhbWU8L2NvZGU+LiAgVGhlIGRlZmF1bHQgaWYgdGhpcworZGlyZWN0aXZlIGlzIG5vdCB1c2VkIGlzIDxjb2RlPi5jZmlfc2VjdGlvbnMgLmVoX2ZyYW1lPC9jb2RlPi4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjEyIDxjb2RlPi5jZmlfc3RhcnRwcm9jIFtzaW1wbGVdPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiY2ZpXzAwNWZzdGFydHByb2NfMDA3ZC1kaXJlY3RpdmUtMzAwIj48L2E+PGNvZGU+LmNmaV9zdGFydHByb2M8L2NvZGU+IGlzIHVzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGZ1bmN0aW9uIHRoYXQKK3Nob3VsZCBoYXZlIGFuIGVudHJ5IGluIDxjb2RlPi5laF9mcmFtZTwvY29kZT4uIEl0IGluaXRpYWxpemVzIHNvbWUgaW50ZXJuYWwKK2RhdGEgc3RydWN0dXJlcy4gRG9uJ3QgZm9yZ2V0IHRvIGNsb3NlIHRoZSBmdW5jdGlvbiBieQorPGNvZGU+LmNmaV9lbmRwcm9jPC9jb2RlPi4KKworICAgPHA+VW5sZXNzIDxjb2RlPi5jZmlfc3RhcnRwcm9jPC9jb2RlPiBpcyB1c2VkIGFsb25nIHdpdGggcGFyYW1ldGVyIDxjb2RlPnNpbXBsZTwvY29kZT4KK2l0IGFsc28gZW1pdHMgc29tZSBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IGluaXRpYWwgQ0ZJIGluc3RydWN0aW9ucy4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjEzIDxjb2RlPi5jZmlfZW5kcHJvYzwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNmaV8wMDVmZW5kcHJvY18wMDdkLWRpcmVjdGl2ZS0zMDEiPjwvYT48Y29kZT4uY2ZpX2VuZHByb2M8L2NvZGU+IGlzIHVzZWQgYXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIHdoZXJlIGl0IGNsb3NlcyBpdHMKK3Vud2luZCBlbnRyeSBwcmV2aW91c2x5IG9wZW5lZCBieQorPGNvZGU+LmNmaV9zdGFydHByb2M8L2NvZGU+LCBhbmQgZW1pdHMgaXQgdG8gPGNvZGU+LmVoX2ZyYW1lPC9jb2RlPi4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjE0IDxjb2RlPi5jZmlfcGVyc29uYWxpdHkgPC9jb2RlPjx2YXI+ZW5jb2Rpbmc8L3Zhcj48Y29kZT4gWywgPC9jb2RlPjx2YXI+ZXhwPC92YXI+PGNvZGU+XTwvY29kZT48L2gzPgorCis8cD48Y29kZT4uY2ZpX3BlcnNvbmFsaXR5PC9jb2RlPiBkZWZpbmVzIHBlcnNvbmFsaXR5IHJvdXRpbmUgYW5kIGl0cyBlbmNvZGluZy4gCis8dmFyPmVuY29kaW5nPC92YXI+IG11c3QgYmUgYSBjb25zdGFudCBkZXRlcm1pbmluZyBob3cgdGhlIHBlcnNvbmFsaXR5CitzaG91bGQgYmUgZW5jb2RlZC4gIElmIGl0IGlzIDI1NSAoPGNvZGU+RFdfRUhfUEVfb21pdDwvY29kZT4pLCBzZWNvbmQKK2FyZ3VtZW50IGlzIG5vdCBwcmVzZW50LCBvdGhlcndpc2Ugc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBiZQorYSBjb25zdGFudCBvciBhIHN5bWJvbCBuYW1lLiAgV2hlbiB1c2luZyBpbmRpcmVjdCBlbmNvZGluZ3MsCit0aGUgc3ltYm9sIHByb3ZpZGVkIHNob3VsZCBiZSB0aGUgbG9jYXRpb24gd2hlcmUgcGVyc29uYWxpdHkKK2NhbiBiZSBsb2FkZWQgZnJvbSwgbm90IHRoZSBwZXJzb25hbGl0eSByb3V0aW5lIGl0c2VsZi4gCitUaGUgZGVmYXVsdCBhZnRlciA8Y29kZT4uY2ZpX3N0YXJ0cHJvYzwvY29kZT4gaXMgPGNvZGU+LmNmaV9wZXJzb25hbGl0eSAweGZmPC9jb2RlPiwKK25vIHBlcnNvbmFsaXR5IHJvdXRpbmUuCisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xNSA8Y29kZT4uY2ZpX2xzZGEgPC9jb2RlPjx2YXI+ZW5jb2Rpbmc8L3Zhcj48Y29kZT4gWywgPC9jb2RlPjx2YXI+ZXhwPC92YXI+PGNvZGU+XTwvY29kZT48L2gzPgorCis8cD48Y29kZT4uY2ZpX2xzZGE8L2NvZGU+IGRlZmluZXMgTFNEQSBhbmQgaXRzIGVuY29kaW5nLiAKKzx2YXI+ZW5jb2Rpbmc8L3Zhcj4gbXVzdCBiZSBhIGNvbnN0YW50IGRldGVybWluaW5nIGhvdyB0aGUgTFNEQQorc2hvdWxkIGJlIGVuY29kZWQuICBJZiBpdCBpcyAyNTUgKDxjb2RlPkRXX0VIX1BFX29taXQ8L2NvZGU+KSwgc2Vjb25kCithcmd1bWVudCBpcyBub3QgcHJlc2VudCwgb3RoZXJ3aXNlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgYmUgYSBjb25zdGFudAorb3IgYSBzeW1ib2wgbmFtZS4gIFRoZSBkZWZhdWx0IGFmdGVyIDxjb2RlPi5jZmlfc3RhcnRwcm9jPC9jb2RlPiBpcyA8Y29kZT4uY2ZpX2xzZGEgMHhmZjwvY29kZT4sCitubyBMU0RBLgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTYgPGNvZGU+LmNmaV9kZWZfY2ZhIDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5vZmZzZXQ8L3Zhcj48L2gzPgorCis8cD48Y29kZT4uY2ZpX2RlZl9jZmE8L2NvZGU+IGRlZmluZXMgYSBydWxlIGZvciBjb21wdXRpbmcgQ0ZBIGFzOiA8aT50YWtlCithZGRyZXNzIGZyb20gPC9pPjx2YXI+cmVnaXN0ZXI8L3Zhcj48aT4gYW5kIGFkZCA8L2k+PHZhcj5vZmZzZXQ8L3Zhcj48aT4gdG8gaXQ8L2k+LgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTcgPGNvZGU+LmNmaV9kZWZfY2ZhX3JlZ2lzdGVyIDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PC9oMz4KKworPHA+PGNvZGU+LmNmaV9kZWZfY2ZhX3JlZ2lzdGVyPC9jb2RlPiBtb2RpZmllcyBhIHJ1bGUgZm9yIGNvbXB1dGluZyBDRkEuIEZyb20KK25vdyBvbiA8dmFyPnJlZ2lzdGVyPC92YXI+IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvbGQgb25lLiBPZmZzZXQKK3JlbWFpbnMgdGhlIHNhbWUuCisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xOCA8Y29kZT4uY2ZpX2RlZl9jZmFfb2Zmc2V0IDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjwvaDM+CisKKzxwPjxjb2RlPi5jZmlfZGVmX2NmYV9vZmZzZXQ8L2NvZGU+IG1vZGlmaWVzIGEgcnVsZSBmb3IgY29tcHV0aW5nIENGQS4gUmVnaXN0ZXIKK3JlbWFpbnMgdGhlIHNhbWUsIGJ1dCA8dmFyPm9mZnNldDwvdmFyPiBpcyBuZXcuIE5vdGUgdGhhdCBpdCBpcyB0aGUKK2Fic29sdXRlIG9mZnNldCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gYSBkZWZpbmVkIHJlZ2lzdGVyIHRvIGNvbXB1dGUKK0NGQSBhZGRyZXNzLgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTkgPGNvZGU+LmNmaV9hZGp1c3RfY2ZhX29mZnNldCA8L2NvZGU+PHZhcj5vZmZzZXQ8L3Zhcj48L2gzPgorCis8cD5TYW1lIGFzIDxjb2RlPi5jZmlfZGVmX2NmYV9vZmZzZXQ8L2NvZGU+IGJ1dCA8dmFyPm9mZnNldDwvdmFyPiBpcyBhIHJlbGF0aXZlCit2YWx1ZSB0aGF0IGlzIGFkZGVkL3N1YnN0cmFjdGVkIGZyb20gdGhlIHByZXZpb3VzIG9mZnNldC4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjIwIDxjb2RlPi5jZmlfb2Zmc2V0IDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5vZmZzZXQ8L3Zhcj48L2gzPgorCis8cD5QcmV2aW91cyB2YWx1ZSBvZiA8dmFyPnJlZ2lzdGVyPC92YXI+IGlzIHNhdmVkIGF0IG9mZnNldCA8dmFyPm9mZnNldDwvdmFyPiBmcm9tCitDRkEuCisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4yMSA8Y29kZT4uY2ZpX3JlbF9vZmZzZXQgPC9jb2RlPjx2YXI+cmVnaXN0ZXI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjwvaDM+CisKKzxwPlByZXZpb3VzIHZhbHVlIG9mIDx2YXI+cmVnaXN0ZXI8L3Zhcj4gaXMgc2F2ZWQgYXQgb2Zmc2V0IDx2YXI+b2Zmc2V0PC92YXI+IGZyb20KK3RoZSBjdXJyZW50IENGQSByZWdpc3Rlci4gIFRoaXMgaXMgdHJhbnNmb3JtZWQgdG8gPGNvZGU+LmNmaV9vZmZzZXQ8L2NvZGU+Cit1c2luZyB0aGUga25vd24gZGlzcGxhY2VtZW50IG9mIHRoZSBDRkEgcmVnaXN0ZXIgZnJvbSB0aGUgQ0ZBLiAKK1RoaXMgaXMgb2Z0ZW4gZWFzaWVyIHRvIHVzZSwgYmVjYXVzZSB0aGUgbnVtYmVyIHdpbGwgbWF0Y2ggdGhlCitjb2RlIGl0J3MgYW5ub3RhdGluZy4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjIyIDxjb2RlPi5jZmlfcmVnaXN0ZXIgPC9jb2RlPjx2YXI+cmVnaXN0ZXIxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yZWdpc3RlcjI8L3Zhcj48L2gzPgorCis8cD5QcmV2aW91cyB2YWx1ZSBvZiA8dmFyPnJlZ2lzdGVyMTwvdmFyPiBpcyBzYXZlZCBpbiByZWdpc3RlciA8dmFyPnJlZ2lzdGVyMjwvdmFyPi4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjIzIDxjb2RlPi5jZmlfcmVzdG9yZSA8L2NvZGU+PHZhcj5yZWdpc3RlcjwvdmFyPjwvaDM+CisKKzxwPjxjb2RlPi5jZmlfcmVzdG9yZTwvY29kZT4gc2F5cyB0aGF0IHRoZSBydWxlIGZvciA8dmFyPnJlZ2lzdGVyPC92YXI+IGlzIG5vdyB0aGUKK3NhbWUgYXMgaXQgd2FzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLCBhZnRlciBhbGwgaW5pdGlhbAoraW5zdHJ1Y3Rpb24gYWRkZWQgYnkgPGNvZGU+LmNmaV9zdGFydHByb2M8L2NvZGU+IHdlcmUgZXhlY3V0ZWQuCisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4yNCA8Y29kZT4uY2ZpX3VuZGVmaW5lZCA8L2NvZGU+PHZhcj5yZWdpc3RlcjwvdmFyPjwvaDM+CisKKzxwPkZyb20gbm93IG9uIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiA8dmFyPnJlZ2lzdGVyPC92YXI+IGNhbid0IGJlIHJlc3RvcmVkIGFueW1vcmUuCisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4yNSA8Y29kZT4uY2ZpX3NhbWVfdmFsdWUgPC9jb2RlPjx2YXI+cmVnaXN0ZXI8L3Zhcj48L2gzPgorCis8cD5DdXJyZW50IHZhbHVlIG9mIDx2YXI+cmVnaXN0ZXI8L3Zhcj4gaXMgdGhlIHNhbWUgbGlrZSBpbiB0aGUgcHJldmlvdXMgZnJhbWUsCitpLmUuIG5vIHJlc3RvcmF0aW9uIG5lZWRlZC4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjI2IDxjb2RlPi5jZmlfcmVtZW1iZXJfc3RhdGU8L2NvZGU+LDwvaDM+CisKKzxwPkZpcnN0IHNhdmUgYWxsIGN1cnJlbnQgcnVsZXMgZm9yIGFsbCByZWdpc3RlcnMgYnkgPGNvZGU+LmNmaV9yZW1lbWJlcl9zdGF0ZTwvY29kZT4sCit0aGVuIHRvdGFsbHkgc2NyZXcgdGhlbSB1cCBieSBzdWJzZXF1ZW50IDxjb2RlPi5jZmlfKjwvY29kZT4gZGlyZWN0aXZlcyBhbmQgd2hlbgorZXZlcnl0aGluZyBpcyBob3BlbGVzc2x5IGJhZCwgdXNlIDxjb2RlPi5jZmlfcmVzdG9yZV9zdGF0ZTwvY29kZT4gdG8gcmVzdG9yZQordGhlIHByZXZpb3VzIHNhdmVkIHN0YXRlLgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMjcgPGNvZGU+LmNmaV9yZXR1cm5fY29sdW1uIDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PC9oMz4KKworPHA+Q2hhbmdlIHJldHVybiBjb2x1bW4gPHZhcj5yZWdpc3RlcjwvdmFyPiwgaS5lLiB0aGUgcmV0dXJuIGFkZHJlc3MgaXMgZWl0aGVyCitkaXJlY3RseSBpbiA8dmFyPnJlZ2lzdGVyPC92YXI+IG9yIGNhbiBiZSBhY2Nlc3NlZCBieSBydWxlcyBmb3IgPHZhcj5yZWdpc3RlcjwvdmFyPi4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjI4IDxjb2RlPi5jZmlfc2lnbmFsX2ZyYW1lPC9jb2RlPjwvaDM+CisKKzxwPk1hcmsgY3VycmVudCBmdW5jdGlvbiBhcyBzaWduYWwgdHJhbXBvbGluZS4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjI5IDxjb2RlPi5jZmlfd2luZG93X3NhdmU8L2NvZGU+PC9oMz4KKworPHA+U1BBUkMgcmVnaXN0ZXIgd2luZG93IGhhcyBiZWVuIHNhdmVkLgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMzAgPGNvZGU+LmNmaV9lc2NhcGU8L2NvZGU+IDx2YXI+ZXhwcmVzc2lvbjwvdmFyPlssIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD5dPC9oMz4KKworPHA+QWxsb3dzIHRoZSB1c2VyIHRvIGFkZCBhcmJpdHJhcnkgYnl0ZXMgdG8gdGhlIHVud2luZCBpbmZvLiAgT25lCittaWdodCB1c2UgdGhpcyB0byBhZGQgT1Mtc3BlY2lmaWMgQ0ZJIG9wY29kZXMsIG9yIGdlbmVyaWMgQ0ZJCitvcGNvZGVzIHRoYXQgR0FTIGRvZXMgbm90IHlldCBzdXBwb3J0LgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMzEgPGNvZGU+LmNmaV92YWxfZW5jb2RlZF9hZGRyIDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5lbmNvZGluZzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+bGFiZWw8L3Zhcj48L2gzPgorCis8cD5UaGUgY3VycmVudCB2YWx1ZSBvZiA8dmFyPnJlZ2lzdGVyPC92YXI+IGlzIDx2YXI+bGFiZWw8L3Zhcj4uICBUaGUgdmFsdWUgb2YgPHZhcj5sYWJlbDwvdmFyPgord2lsbCBiZSBlbmNvZGVkIGluIHRoZSBvdXRwdXQgZmlsZSBhY2NvcmRpbmcgdG8gPHZhcj5lbmNvZGluZzwvdmFyPjsgc2VlIHRoZQorZGVzY3JpcHRpb24gb2YgPGNvZGU+LmNmaV9wZXJzb25hbGl0eTwvY29kZT4gZm9yIGRldGFpbHMgb24gdGhpcyBlbmNvZGluZy4KKworICAgPHA+VGhlIHVzZWZ1bG5lc3Mgb2YgZXF1YXRpbmcgYSByZWdpc3RlciB0byBhIGZpeGVkIGxhYmVsIGlzIHByb2JhYmx5CitsaW1pdGVkIHRvIHRoZSByZXR1cm4gYWRkcmVzcyByZWdpc3Rlci4gIEhlcmUsIGl0IGNhbiBiZSB1c2VmdWwgdG8KK21hcmsgYSBjb2RlIHNlZ21lbnQgdGhhdCBoYXMgb25seSBvbmUgcmV0dXJuIGFkZHJlc3Mgd2hpY2ggaXMgcmVhY2hlZAorYnkgYSBkaXJlY3QgYnJhbmNoIGFuZCBubyBjb3B5IG9mIHRoZSByZXR1cm4gYWRkcmVzcyBleGlzdHMgaW4gbWVtb3J5CitvciBhbm90aGVyIHJlZ2lzdGVyLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DT0ZGLVN5bWJvbHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NPRkYtU3ltYm9scy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NmU5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DT0ZGLVN5bWJvbHMuaHRtbApAQCAtMCwwICsxLDY5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DT0ZGIFN5bWJvbHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN5bWJvbC1BdHRyaWJ1dGVzLmh0bWwjU3ltYm9sLUF0dHJpYnV0ZXMiIHRpdGxlPSJTeW1ib2wgQXR0cmlidXRlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImFfMDAyZW91dC1TeW1ib2xzLmh0bWwjYV8wMDJlb3V0LVN5bWJvbHMiIHRpdGxlPSJhLm91dCBTeW1ib2xzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU09NLVN5bWJvbHMuaHRtbCNTT00tU3ltYm9scyIgdGl0bGU9IlNPTSBTeW1ib2xzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ09GRi1TeW1ib2xzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNPTS1TeW1ib2xzLmh0bWwjU09NLVN5bWJvbHMiPlNPTSBTeW1ib2xzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iYV8wMDJlb3V0LVN5bWJvbHMuaHRtbCNhXzAwMmVvdXQtU3ltYm9scyI+YS5vdXQgU3ltYm9sczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN5bWJvbC1BdHRyaWJ1dGVzLmh0bWwjU3ltYm9sLUF0dHJpYnV0ZXMiPlN5bWJvbCBBdHRyaWJ1dGVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+NS41LjQgU3ltYm9sIEF0dHJpYnV0ZXMgZm9yIENPRkY8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1DT0ZGLXN5bWJvbC1hdHRyaWJ1dGVzLTIzNSI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bWJvbC1hdHRyaWJ1dGVzXzAwMmMtQ09GRi0yMzYiPjwvYT4KK1RoZSBDT0ZGIGZvcm1hdCBzdXBwb3J0cyBhIG11bHRpdHVkZSBvZiBhdXhpbGlhcnkgc3ltYm9sIGF0dHJpYnV0ZXM7CitsaWtlIHRoZSBwcmltYXJ5IHN5bWJvbCBhdHRyaWJ1dGVzLCB0aGV5IGFyZSBzZXQgYmV0d2VlbiA8Y29kZT4uZGVmPC9jb2RlPiBhbmQKKzxjb2RlPi5lbmRlZjwvY29kZT4gZGlyZWN0aXZlcy4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj41LjUuNC4xIFByaW1hcnkgQXR0cmlidXRlczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LXByaW1hcnktYXR0cmlidXRlc18wMDJjLUNPRkYtc3ltYm9scy0yMzciPjwvYT5UaGUgc3ltYm9sIG5hbWUgaXMgc2V0IHdpdGggPGNvZGU+LmRlZjwvY29kZT47IHRoZSB2YWx1ZSBhbmQgdHlwZSwKK3Jlc3BlY3RpdmVseSwgd2l0aCA8Y29kZT4udmFsPC9jb2RlPiBhbmQgPGNvZGU+LnR5cGU8L2NvZGU+LgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjUuNS40LjIgQXV4aWxpYXJ5IEF0dHJpYnV0ZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1hdXhpbGlhcnktYXR0cmlidXRlc18wMDJjLUNPRkYtc3ltYm9scy0yMzgiPjwvYT5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gZGlyZWN0aXZlcyA8Y29kZT4uZGltPC9jb2RlPiwgPGNvZGU+LmxpbmU8L2NvZGU+LCA8Y29kZT4uc2NsPC9jb2RlPiwKKzxjb2RlPi5zaXplPC9jb2RlPiwgPGNvZGU+LnRhZzwvY29kZT4sIGFuZCA8Y29kZT4ud2VhazwvY29kZT4gY2FuIGdlbmVyYXRlIGF1eGlsaWFyeSBzeW1ib2wKK3RhYmxlIGluZm9ybWF0aW9uIGZvciBDT0ZGLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUjE2LU9wZXJhbmQtUXVhbGlmaWVycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1IxNi1PcGVyYW5kLVF1YWxpZmllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjFlOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1IxNi1PcGVyYW5kLVF1YWxpZmllcnMuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q1IxNiBPcGVyYW5kIFF1YWxpZmllcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNSMTZfMDAyZERlcGVuZGVudC5odG1sI0NSMTZfMDAyZERlcGVuZGVudCIgdGl0bGU9IkNSMTYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ1IxNi1TeW50YXguaHRtbCNDUjE2LVN5bnRheCIgdGl0bGU9IkNSMTYgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ1IxNi1PcGVyYW5kLVF1YWxpZmllcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ1IxNi1TeW50YXguaHRtbCNDUjE2LVN5bnRheCI+Q1IxNiBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDUjE2XzAwMmREZXBlbmRlbnQuaHRtbCNDUjE2XzAwMmREZXBlbmRlbnQiPkNSMTYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS43LjEgQ1IxNiBPcGVyYW5kIFF1YWxpZmllcnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1DUjE2LU9wZXJhbmQtUXVhbGlmaWVycy03MzgiPjwvYT4KK1RoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENSMTYgdGFyZ2V0IG9mIDxjb2RlPmFzPC9jb2RlPiBoYXMgYSBmZXcgbWFjaGluZSBkZXBlbmRlbnQgb3BlcmFuZCBxdWFsaWZpZXJzLgorCisgICA8cD5PcGVyYW5kIGV4cHJlc3Npb24gdHlwZSBxdWFsaWZpZXIgaXMgYW4gb3B0aW9uYWwgZmllbGQgaW4gdGhlIGluc3RydWN0aW9uIG9wZXJhbmQsIHRvIGRldGVybWluZXMgdGhlIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24gZmllbGQgb2YgYW4gb3BlcmFuZC4gVGhlIDxjb2RlPkA8L2NvZGU+IGlzIHJlcXVpcmVkLiBDUjE2IGFyY2hpdGVjdHVyZSB1c2VzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb24gcXVhbGlmaWVyczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+czwvY29kZT48ZGQ+LSA8Y29kZT5TcGVjaWZpZXMgZXhwcmVzc2lvbiBvcGVyYW5kIHR5cGUgYXMgc21hbGw8L2NvZGU+Cis8YnI+PGR0Pjxjb2RlPm08L2NvZGU+PGRkPi0gPGNvZGU+U3BlY2lmaWVzIGV4cHJlc3Npb24gb3BlcmFuZCB0eXBlIGFzIG1lZGl1bTwvY29kZT4KKzxicj48ZHQ+PGNvZGU+bDwvY29kZT48ZGQ+LSA8Y29kZT5TcGVjaWZpZXMgZXhwcmVzc2lvbiBvcGVyYW5kIHR5cGUgYXMgbGFyZ2U8L2NvZGU+Cis8YnI+PGR0Pjxjb2RlPmM8L2NvZGU+PGRkPi0gPGNvZGU+U3BlY2lmaWVzIHRoZSBDUjE2IEFzc2VtYmxlciBnZW5lcmF0ZXMgYSByZWxvY2F0aW9uIGVudHJ5IGZvciB0aGUgb3BlcmFuZCwgd2hlcmUgcGMgaGFzIGltcGxpZWQgYml0LCB0aGUgZXhwcmVzc2lvbiBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4gVGhlIGxpbmtlciB1c2VzIHRoZSByZWxvY2F0aW9uIGVudHJ5IHRvIHVwZGF0ZSB0aGUgb3BlcmFuZCBhZGRyZXNzIGF0IGxpbmsgdGltZS48L2NvZGU+Cis8YnI+PGR0Pjxjb2RlPmdvdC9HT1Q8L2NvZGU+PGRkPi0gPGNvZGU+U3BlY2lmaWVzIHRoZSBDUjE2IEFzc2VtYmxlciBnZW5lcmF0ZXMgYSByZWxvY2F0aW9uIGVudHJ5IGZvciB0aGUgb3BlcmFuZCwgb2Zmc2V0IGZyb20gR2xvYmFsIE9mZnNldCBUYWJsZS4gVGhlIGxpbmtlciB1c2VzIHRoaXMgcmVsb2NhdGlvbiBlbnRyeSB0byB1cGRhdGUgdGhlIG9wZXJhbmQgYWRkcmVzcyBhdCBsaW5rIHRpbWU8L2NvZGU+Cis8YnI+PGR0Pjxjb2RlPmNnb3QvY0dPVDwvY29kZT48ZGQ+LSA8Y29kZT5TcGVjaWZpZXMgdGhlIENvbXBhY3RSSVNDIEFzc2VtYmxlciBnZW5lcmF0ZXMgYSByZWxvY2F0aW9uIGVudHJ5IGZvciB0aGUgb3BlcmFuZCwgd2hlcmUgcGMgaGFzIGltcGxpZWQgYml0LCB0aGUgZXhwcmVzc2lvbiBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4gVGhlIGxpbmtlciB1c2VzIHRoZSByZWxvY2F0aW9uIGVudHJ5IHRvIHVwZGF0ZSB0aGUgb3BlcmFuZCBhZGRyZXNzIGF0IGxpbmsgdGltZS48L2NvZGU+Cis8L2RsPgorCisgICA8cD5DUjE2IHRhcmdldCBvcGVyYW5kIHF1YWxpZmllcnMgYW5kIGl0cyBzaXplIChpbiBiaXRzKToKKworICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5JbW1lZGlhdGUgT3BlcmFuZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD4tIHMgJm1kYXNoOyZuZGFzaDsgNCBiaXRzCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48L3NhbXA+JnJzcXVvOzxkZD4tIG0gJm1kYXNoOyZuZGFzaDsgMTYgYml0cywgZm9yIG1vdmIgYW5kIG1vdncgaW5zdHJ1Y3Rpb25zLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjwvc2FtcD4mcnNxdW87PGRkPi0gbSAmbWRhc2g7Jm5kYXNoOyAyMCBiaXRzLCBtb3ZkIGluc3RydWN0aW9ucy4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48L3NhbXA+JnJzcXVvOzxkZD4tIGwgJm1kYXNoOyZuZGFzaDsgMzIgYml0cworCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5BYnNvbHV0ZSBPcGVyYW5kPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPi0gcyAmbWRhc2g7Jm5kYXNoOyBJbGxlZ2FsIHNwZWNpZmllciBmb3IgdGhpcyBvcGVyYW5kLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjwvc2FtcD4mcnNxdW87PGRkPi0gbSAmbWRhc2g7Jm5kYXNoOyAyMCBiaXRzLCBtb3ZkIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RGlzcGxhY2VtZW50IE9wZXJhbmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+LSBzICZtZGFzaDsmbmRhc2g7IDggYml0cworPGJyPjxkdD4mbHNxdW87PHNhbXA+PC9zYW1wPiZyc3F1bzs8ZGQ+LSBtICZtZGFzaDsmbmRhc2g7IDE2IGJpdHMKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjwvc2FtcD4mcnNxdW87PGRkPi0gbCAmbWRhc2g7Jm5kYXNoOyAyNCBiaXRzCis8L2RsPgorCisgICA8cD5Gb3IgZXhhbXBsZToKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgMSAgIDxjb2RlPm1vdncgJF9teWZ1bkBjLHIxPC9jb2RlPgorICAgICAKKyAgICAgICAgIFRoaXMgbG9hZHMgdGhlIGFkZHJlc3Mgb2YgX215ZnVuLCBzaGlmdGVkIHJpZ2h0IGJ5IDEsIGludG8gcjEuCisgICAgIAorICAgICAyICAgPGNvZGU+bW92ZCAkX215ZnVuQGMsKHIyLHIxKTwvY29kZT4KKyAgICAgCisgICAgICAgICBUaGlzIGxvYWRzIHRoZSBhZGRyZXNzIG9mIF9teWZ1biwgc2hpZnRlZCByaWdodCBieSAxLCBpbnRvIHJlZ2lzdGVyLXBhaXIgcjItcjEuCisgICAgIAorICAgICAzICAgPGNvZGU+X215ZnVuX3B0cjo8L2NvZGU+CisgICAgICAgICA8Y29kZT4ubG9uZyBfbXlmdW5AYzwvY29kZT4KKyAgICAgICAgIDxjb2RlPmxvYWRkIF9teWZ1bl9wdHIsIChyMSxyMCk8L2NvZGU+CisgICAgICAgICA8Y29kZT5qYWwgKHIxLHIwKTwvY29kZT4KKyAgICAgCisgICAgICAgICBUaGlzIC5sb25nIGRpcmVjdGl2ZSwgdGhlIGFkZHJlc3Mgb2YgX215ZnVuYywgc2hpZnRlZCByaWdodCBieSAxIGF0IGxpbmsgdGltZS4KKyAgICAgCisgICAgIDQgICA8Y29kZT5sb2FkZCAgX2RhdGExQEdPVChyMTIpLCAocjEscjApPC9jb2RlPgorICAgICAKKyAgICAgICAgIFRoaXMgbG9hZHMgdGhlIGFkZHJlc3Mgb2YgX2RhdGExLCBpbnRvIGdsb2JhbCBvZmZzZXQgdGFibGUgKGllIEdPVCkgYW5kIGl0cyBvZmZzZXQgdmFsdWUgZnJvbSBHT1QgbG9hZHMgaW50byByZWdpc3Rlci1wYWlyIHIyLXIxLgorICAgICAKKyAgICAgNSAgIDxjb2RlPmxvYWRkICBfbXlmdW5jQGNHT1QocjEyKSwgKHIxLHIwKTwvY29kZT4KKyAgICAgCisgICAgICAgICBUaGlzIGxvYWRzIHRoZSBhZGRyZXNzIG9mIF9teWZ1biwgc2hpZnRlZCByaWdodCBieSAxLCBpbnRvIGdsb2JhbCBvZmZzZXQgdGFibGUgKGllIEdPVCkgYW5kIGl0cyBvZmZzZXQgdmFsdWUgZnJvbSBHT1QgbG9hZHMgaW50byByZWdpc3Rlci1wYWlyIHIxLXIwLgorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUjE2LVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1IxNi1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWI4NGYwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1IxNi1TeW50YXguaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DUjE2IFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ1IxNl8wMDJkRGVwZW5kZW50Lmh0bWwjQ1IxNl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iQ1IxNi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDUjE2LU9wZXJhbmQtUXVhbGlmaWVycy5odG1sI0NSMTYtT3BlcmFuZC1RdWFsaWZpZXJzIiB0aXRsZT0iQ1IxNiBPcGVyYW5kIFF1YWxpZmllcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDUjE2LVN5bnRheCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNSMTYtT3BlcmFuZC1RdWFsaWZpZXJzLmh0bWwjQ1IxNi1PcGVyYW5kLVF1YWxpZmllcnMiPkNSMTYgT3BlcmFuZCBRdWFsaWZpZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ1IxNl8wMDJkRGVwZW5kZW50Lmh0bWwjQ1IxNl8wMDJkRGVwZW5kZW50Ij5DUjE2LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNy4yIENSMTYgU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkNSMTZfMDAyZENoYXJzLmh0bWwjQ1IxNl8wMDJkQ2hhcnMiPkNSMTYtQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUjE2XzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1IxNl8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWU1YTEzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1IxNl8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DUjE2LUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDUjE2LVN5bnRheC5odG1sI0NSMTYtU3ludGF4IiB0aXRsZT0iQ1IxNiBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDUjE2LUNoYXJzIj48L2E+Cis8YSBuYW1lPSJDUjE2XzAwMmRDaGFycyI+PC9hPgorPHA+CitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNSMTYtU3ludGF4Lmh0bWwjQ1IxNi1TeW50YXgiPkNSMTYgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS43LjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtQ1IxNi03MzkiPjwvYT48YSBuYW1lPSJpbmRleC1DUjE2LWxpbmUtY29tbWVudC1jaGFyYWN0ZXItNzQwIj48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIGEgbGluZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgY29tbWVudAordGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4gIElmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycworYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUsIHRoZSB3aG9sZSBsaW5lIGlzIHRyZWF0ZWQgYXMgYQorY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjYW4gYWxzbyBiZSBhIGxvZ2ljYWwgbGluZSBudW1iZXIKK2RpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IgY29udHJvbCBjb21tYW5kCisoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtQ1IxNi03NDEiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtQ1IxNi03NDIiPjwvYT48YSBuYW1lPSJpbmRleC1DUjE2LWxpbmUtc2VwYXJhdG9yLTc0MyI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUKK2xpbmUuCisKKzwhLS0gQ29weXJpZ2h0IDIwMDIsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+Cis8IS0tIENSSVMgZGVzY3JpcHRpb24gY29udHJpYnV0ZWQgYnkgQXhpcyBDb21tdW5pY2F0aW9ucy4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUjE2XzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSMTZfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTA5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUjE2XzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DUjE2LURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQmxhY2tmaW5fMDAyZERlcGVuZGVudC5odG1sI0JsYWNrZmluXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJCbGFja2Zpbi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDUklTXzAwMmREZXBlbmRlbnQuaHRtbCNDUklTXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJDUklTLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNSMTYtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJDUjE2XzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ1JJU18wMDJkRGVwZW5kZW50Lmh0bWwjQ1JJU18wMDJkRGVwZW5kZW50Ij5DUklTLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkJsYWNrZmluXzAwMmREZXBlbmRlbnQuaHRtbCNCbGFja2Zpbl8wMDJkRGVwZW5kZW50Ij5CbGFja2Zpbi1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuNyBDUjE2IERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUNSMTYtc3VwcG9ydC03MzciPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkNSMTYtT3BlcmFuZC1RdWFsaWZpZXJzLmh0bWwjQ1IxNi1PcGVyYW5kLVF1YWxpZmllcnMiPkNSMTYgT3BlcmFuZCBRdWFsaWZpZXJzPC9hPjogICAgICBDUjE2IE1hY2hpbmUgT3BlcmFuZCBRdWFsaWZpZXJzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJDUjE2LVN5bnRheC5odG1sI0NSMTYtU3ludGF4Ij5DUjE2IFN5bnRheDwvYT46ICAgICAgICAgICAgICAgICAgU3ludGF4IGZvciB0aGUgQ1IxNgorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkM2UwOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q1JJUy1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ1JJU18wMDJkU3ludGF4Lmh0bWwjQ1JJU18wMDJkU3ludGF4IiB0aXRsZT0iQ1JJUy1TeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDUklTXzAwMmRQaWMuaHRtbCNDUklTXzAwMmRQaWMiIHRpdGxlPSJDUklTLVBpYyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNSSVMtQ2hhcnMiPjwvYT4KKzxhIG5hbWU9IkNSSVNfMDAyZENoYXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNSSVNfMDAyZFBpYy5odG1sI0NSSVNfMDAyZFBpYyI+Q1JJUy1QaWM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDUklTXzAwMmRTeW50YXguaHRtbCNDUklTXzAwMmRTeW50YXgiPkNSSVMtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS44LjQuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyc18wMDJjLUNSSVMtNzc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ1JJUy1saW5lLWNvbW1lbnQtY2hhcmFjdGVycy03NzYiPjwvYT4KK1RoZSBjaGFyYWN0ZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGEgbGluZSBjb21tZW50IGNoYXJhY3Rlci4gIEl0IHN0YXJ0cyBhCitjb21tZW50IGlmIGFuZCBvbmx5IGlmIGl0IGlzIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKworICAgPHA+QSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIHN0YXJ0cyBhIGNvbW1lbnQgYW55d2hlcmUgb24gdGhlIGxpbmUsCitjYXVzaW5nIGFsbCBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgdG8gYmUgaWdub3JlZC4KKworICAgPHA+QSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGlzIGhhbmRsZWQgYXMgYSBsaW5lIHNlcGFyYXRvciBlcXVpdmFsZW50Cit0byBhIGxvZ2ljYWwgbmV3LWxpbmUgY2hhcmFjdGVyIChleGNlcHQgaW4gYSBjb21tZW50KSwgc28KK3NlcGFyYXRlIGluc3RydWN0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIG9uIGEgc2luZ2xlIGxpbmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzZmE0YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNSSVMtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDUjE2XzAwMmREZXBlbmRlbnQuaHRtbCNDUjE2XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJDUjE2LURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCIgdGl0bGU9IkQxMFYtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ1JJUy1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IkNSSVNfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMTBWXzAwMmREZXBlbmRlbnQuaHRtbCNEMTBWXzAwMmREZXBlbmRlbnQiPkQxMFYtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ1IxNl8wMDJkRGVwZW5kZW50Lmh0bWwjQ1IxNl8wMDJkRGVwZW5kZW50Ij5DUjE2LURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS44IENSSVMgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtQ1JJUy1zdXBwb3J0LTc0NCI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQ1JJU18wMDJkT3B0cy5odG1sI0NSSVNfMDAyZE9wdHMiPkNSSVMtT3B0czwvYT46ICAgICAgICAgICAgICAgQ29tbWFuZC1saW5lIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkNSSVNfMDAyZEV4cGFuZC5odG1sI0NSSVNfMDAyZEV4cGFuZCI+Q1JJUy1FeHBhbmQ8L2E+OiAgICAgICAgICAgICBJbnN0cnVjdGlvbiBleHBhbnNpb24KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkNSSVNfMDAyZFN5bWJvbHMuaHRtbCNDUklTXzAwMmRTeW1ib2xzIj5DUklTLVN5bWJvbHM8L2E+OiAgICAgICAgICAgIFN5bWJvbHMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkNSSVNfMDAyZFN5bnRheC5odG1sI0NSSVNfMDAyZFN5bnRheCI+Q1JJUy1TeW50YXg8L2E+OiAgICAgICAgICAgICBTeW50YXgKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZEV4cGFuZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkRXhwYW5kLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhN2VhYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZEV4cGFuZC5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNSSVMtRXhwYW5kIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDUklTXzAwMmREZXBlbmRlbnQuaHRtbCNDUklTXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJDUklTLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIiB0aXRsZT0iQ1JJUy1PcHRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ1JJU18wMDJkU3ltYm9scy5odG1sI0NSSVNfMDAyZFN5bWJvbHMiIHRpdGxlPSJDUklTLVN5bWJvbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDUklTLUV4cGFuZCI+PC9hPgorPGEgbmFtZT0iQ1JJU18wMDJkRXhwYW5kIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNSSVNfMDAyZFN5bWJvbHMuaHRtbCNDUklTXzAwMmRTeW1ib2xzIj5DUklTLVN5bWJvbHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ1JJU18wMDJkRGVwZW5kZW50Lmh0bWwjQ1JJU18wMDJkRGVwZW5kZW50Ij5DUklTLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuOC4yIEluc3RydWN0aW9uIGV4cGFuc2lvbjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWluc3RydWN0aW9uLWV4cGFuc2lvbl8wMDJjLUNSSVMtNzY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ1JJUy1pbnN0cnVjdGlvbi1leHBhbnNpb24tNzcwIj48L2E+PGNvZGU+YXM8L2NvZGU+IHdpbGwgc2lsZW50bHkgY2hvb3NlIGFuIGluc3RydWN0aW9uIHRoYXQgZml0cwordGhlIG9wZXJhbmQgc2l6ZSBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5bcmVnaXN0ZXIrY29uc3RhbnRdPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wZXJhbmRzLiAgRm9yCitleGFtcGxlLCB0aGUgb2Zmc2V0IDxjb2RlPjEyNzwvY29kZT4gaW4gPGNvZGU+bW92ZS5kIFtyMysxMjddLHI0PC9jb2RlPiBmaXRzCitpbiBhbiBpbnN0cnVjdGlvbiB1c2luZyBhIHNpZ25lZC1ieXRlIG9mZnNldC4gIFNpbWlsYXJseSwKKzxjb2RlPm1vdmUuZCBbcjIrMzI3NjddLHIxPC9jb2RlPiB3aWxsIGdlbmVyYXRlIGFuIGluc3RydWN0aW9uIHVzaW5nIGEKKzE2LWJpdCBvZmZzZXQuICBGb3Igc3ltYm9saWMgZXhwcmVzc2lvbnMgYW5kIGNvbnN0YW50cyB0aGF0IGRvCitub3QgZml0IGluIDE2IGJpdHMgaW5jbHVkaW5nIHRoZSBzaWduIGJpdCwgYSAzMi1iaXQgb2Zmc2V0IGlzCitnZW5lcmF0ZWQuCisKKyAgIDxwPkZvciBicmFuY2hlcywgPGNvZGU+YXM8L2NvZGU+IHdpbGwgZXhwYW5kIGZyb20gYSAxNi1iaXQgYnJhbmNoCitpbnN0cnVjdGlvbiBpbnRvIGEgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgY2FuIHJlYWNoIGEKK2Z1bGwgMzItYml0IGFkZHJlc3MuICBTaW5jZSB0aGlzIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBzaW5nbGUKK2luc3RydWN0aW9uLCBzdWNoIGV4cGFuc2lvbnMgY2FuIG9wdGlvbmFsbHkgYmUgd2FybmVkIGFib3V0LiAKK1NlZSA8YSBocmVmPSJDUklTXzAwMmRPcHRzLmh0bWwjQ1JJU18wMDJkT3B0cyI+Q1JJUy1PcHRzPC9hPi4KKworICAgPHA+SWYgdGhlIG9wZXJhbmQgaXMgZm91bmQgdG8gZml0IHRoZSByYW5nZSwgYSA8Y29kZT5sYXBjPC9jb2RlPiBtbmVtb25pYword2lsbCB0cmFuc2xhdGUgdG8gYSA8Y29kZT5sYXBjcTwvY29kZT4gaW5zdHJ1Y3Rpb24uICBVc2UgPGNvZGU+bGFwYy5kPC9jb2RlPgordG8gZm9yY2UgdGhlIDMyLWJpdCA8Y29kZT5sYXBjPC9jb2RlPiBpbnN0cnVjdGlvbi4KKworICAgPHA+U2ltaWxhcmx5LCB0aGUgPGNvZGU+YWRkbzwvY29kZT4gbW5lbW9uaWMgd2lsbCB0cmFuc2xhdGUgdG8gdGhlCitzaG9ydGVzdCBmaXR0aW5nIGluc3RydWN0aW9uIG9mIDxjb2RlPmFkZG9xPC9jb2RlPiwgPGNvZGU+YWRkby53PC9jb2RlPiBhbmQKKzxjb2RlPmFkZG8uZDwvY29kZT4sIHdoZW4gdXNlZCB3aXRoIGEgb3BlcmFuZCB0aGF0IGlzIGEgY29uc3RhbnQga25vd24KK2F0IGFzc2VtYmx5IHRpbWUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZE9wdHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZE9wdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzcwZTZlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkT3B0cy5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DUklTLU9wdHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI0NSSVNfMDAyZERlcGVuZGVudCIgdGl0bGU9IkNSSVMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ1JJU18wMDJkRXhwYW5kLmh0bWwjQ1JJU18wMDJkRXhwYW5kIiB0aXRsZT0iQ1JJUy1FeHBhbmQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDUklTLU9wdHMiPjwvYT4KKzxhIG5hbWU9IkNSSVNfMDAyZE9wdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ1JJU18wMDJkRXhwYW5kLmh0bWwjQ1JJU18wMDJkRXhwYW5kIj5DUklTLUV4cGFuZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI0NSSVNfMDAyZERlcGVuZGVudCI+Q1JJUy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjguMSBDb21tYW5kLWxpbmUgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1DUklTLTc0NSI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtb3B0aW9ucy03NDYiPjwvYT5UaGUgQ1JJUyB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBoYXMgdGhlc2UKK21hY2hpbmUtZGVwZW5kZW50IGNvbW1hbmQtbGluZSBvcHRpb25zLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZGVtdWxhdGlvbl8wMDNkY3Jpc2VsZl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1DUklTLTc0NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkZW11bGF0aW9uXzAwM2RjcmlzYW91dF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1DUklTLTc0OCI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtXzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmRlbXVsYXRpb25fMDAzZGNyaXNlbGZfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uLTc0OSI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtXzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmRlbXVsYXRpb25fMDAzZGNyaXNhb3V0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbi03NTAiPjwvYT4KK1RoZSBmb3JtYXQgb2YgdGhlIGdlbmVyYXRlZCBvYmplY3QgZmlsZXMgY2FuIGJlIGVpdGhlciBFTEYgb3IKK2Eub3V0LCBzcGVjaWZpZWQgYnkgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVtdWxhdGlvbj1jcmlzYW91dDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVtdWxhdGlvbj1jcmlzZWxmPC9zcGFuPjwvc2FtcD4uIAorVGhlIGRlZmF1bHQgaXMgRUxGIChjcmlzZWxmKSwgdW5sZXNzIDxjb2RlPmFzPC9jb2RlPiBoYXMgYmVlbgorY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIGEub3V0IGJ5IHVzaW5nIHRoZSBjb25maWd1cmF0aW9uCituYW1lIDxjb2RlPmNyaXMtYXhpcy1hb3V0PC9jb2RlPi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmR1bmRlcnNjb3JlXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzUxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmRub18wMDJkdW5kZXJzY29yZV8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1DUklTLTc1MiI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtXzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmR1bmRlcnNjb3JlXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbi03NTMiPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkbm9fMDAyZHVuZGVyc2NvcmVfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uLTc1NCI+PC9hPlRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGxpbmstaW5jb21wYXRpYmxlIEVMRiBvYmplY3QgZmlsZQordmFyaWFudHMgZm9yIENSSVMsIGZvciB1c2UgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHN5bWJvbHMgYXJlCitleHBlY3RlZCB0byBiZSBwcmVmaXhlZCBieSBhIGxlYWRpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBhbmQgZm9yCitlbnZpcm9ubWVudHMgd2l0aG91dCBzdWNoIGEgc3ltYm9sIHByZWZpeC4gIFRoZSB2YXJpYW50IHVzZWQgZm9yCitHTlUvTGludXggcG9ydCBoYXMgbm8gc3ltYm9sIHByZWZpeC4gIFdoaWNoIHZhcmlhbnQgdG8gcHJvZHVjZQoraXMgc3BlY2lmaWVkIGJ5IGVpdGhlciBvZiB0aGUgb3B0aW9ucyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPiBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tdW5kZXJzY29yZTwvc3Bhbj48L3NhbXA+LiAgVGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD4uIAorU2luY2Ugc3ltYm9scyBpbiBDUklTIGEub3V0IG9iamVjdHMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgYQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fPC9zcGFuPjwvc2FtcD4mcnNxdW87IHByZWZpeCwgc3BlY2lmeWluZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPiB3aGVuCitnZW5lcmF0aW5nIGEub3V0IG9iamVjdHMgaXMgYW4gZXJyb3IuICBCZXNpZGVzIHRoZSBvYmplY3QgZm9ybWF0CitkaWZmZXJlbmNlLCB0aGUgZWZmZWN0IG9mIHRoaXMgb3B0aW9uIGlzIHRvIHBhcnNlIHJlZ2lzdGVyIG5hbWVzCitkaWZmZXJlbnRseSAoc2VlIDxhIGhyZWY9ImNyaXNub3VzLmh0bWwjY3Jpc25vdXMiPmNyaXNub3VzPC9hPikuICBUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBtYWtlcyBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWdpc3RlciBwcmVmaXggbWFuZGF0b3J5LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZHBpY18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1DUklTLTc1NSI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtXzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmRwaWNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uLTc1NiI+PC9hPjxhIG5hbWU9ImluZGV4LVBvc2l0aW9uXzAwMmRpbmRlcGVuZGVudC1jb2RlXzAwMmMtQ1JJUy03NTciPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLXBvc2l0aW9uXzAwMmRpbmRlcGVuZGVudC1jb2RlLTc1OCI+PC9hPlRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1waWM8L3NwYW4+PC9zYW1wPiBtdXN0IGJlIHBhc3NlZCB0byA8Y29kZT5hczwvY29kZT4gaW4KK29yZGVyIHRvIHJlY29nbml6ZSB0aGUgc3ltYm9sIHN5bnRheCB1c2VkIGZvciBFTEYgKFNWUjQgUElDKQorcG9zaXRpb24taW5kZXBlbmRlbnQtY29kZSAoc2VlIDxhIGhyZWY9ImNyaXNwaWMuaHRtbCNjcmlzcGljIj5jcmlzcGljPC9hPikuICBUaGlzIHdpbGwgYWxzbworYWZmZWN0IGV4cGFuc2lvbiBvZiBpbnN0cnVjdGlvbnMuICBUaGUgZXhwYW5zaW9uIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGljPC9zcGFuPjwvc2FtcD4gd2lsbCB1c2UgUEMtcmVsYXRpdmUgcmF0aGVyIHRoYW4gKHNsaWdodGx5CitmYXN0ZXIpIGFic29sdXRlIGFkZHJlc3NlcyBpbiB0aG9zZSBleHBhbnNpb25zLiAgVGhpcyBvcHRpb24gaXMgb25seQordmFsaWQgd2hlbiBnZW5lcmF0aW5nIEVMRiBmb3JtYXQgb2JqZWN0IGZpbGVzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZG1hcmNoXzAwM2RfMDA0MHZhcl8wMDdiYXJjaGl0ZWN0dXJlXzAwN2RfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQ1JJUy03NTkiPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkbWFyY2hfMDAzZF8wMDQwdmFyXzAwN2JhcmNoaXRlY3R1cmVfMDA3ZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzYwIj48L2E+PGEgbmFtZT0iaW5kZXgtQXJjaGl0ZWN0dXJlLXZhcmlhbnQtb3B0aW9uXzAwMmMtQ1JJUy03NjEiPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLWFyY2hpdGVjdHVyZS12YXJpYW50LW9wdGlvbi03NjIiPjwvYT5UaGUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbWFyY2g9PC9zcGFuPjx2YXI+YXJjaGl0ZWN0dXJlPC92YXI+PC9zYW1wPgorPGEgbmFtZT0ibWFyY2hfMDAyZG9wdGlvbiI+PC9hPnNwZWNpZmllcyB0aGUgcmVjb2duaXplZCBpbnN0cnVjdGlvbiBzZXQKK2FuZCByZWNvZ25pemVkIHJlZ2lzdGVyIG5hbWVzLiAgSXQgYWxzbyBjb250cm9scyB0aGUKK2FyY2hpdGVjdHVyZSB0eXBlIG9mIHRoZSBvYmplY3QgZmlsZS4gIFZhbGlkIHZhbHVlcyBmb3IKKzx2YXI+YXJjaGl0ZWN0dXJlPC92YXI+IGFyZToKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnYwX3YxMDwvY29kZT48ZGQ+QWxsIGluc3RydWN0aW9ucyBhbmQgcmVnaXN0ZXIgbmFtZXMgZm9yIGFueSBhcmNoaXRlY3R1cmUgdmFyaWFudAoraW4gdGhlIHNldCB2MDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD52MTAgYXJlIHJlY29nbml6ZWQuICBUaGlzIGlzIHRoZQorZGVmYXVsdCBpZiB0aGUgdGFyZ2V0IGlzIGNvbmZpZ3VyZWQgYXMgY3Jpcy0qLgorCisgICAgIDxicj48ZHQ+PGNvZGU+djEwPC9jb2RlPjxkZD5Pbmx5IGluc3RydWN0aW9ucyBhbmQgcmVnaXN0ZXIgbmFtZXMgZm9yIENSSVMgdjEwIChhcyBmb3VuZCBpbgorRVRSQVggMTAwIExYKSBhcmUgcmVjb2duaXplZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIHRhcmdldAoraXMgY29uZmlndXJlZCBhcyBjcmlzdjEwLSouCisKKyAgICAgPGJyPjxkdD48Y29kZT52MzI8L2NvZGU+PGRkPk9ubHkgaW5zdHJ1Y3Rpb25zIGFuZCByZWdpc3RlciBuYW1lcyBmb3IgQ1JJUyB2MzIgKGNvZGUgbmFtZQorR3Vpbm5lc3MpIGFyZSByZWNvZ25pemVkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdGFyZ2V0IGlzCitjb25maWd1cmVkIGFzIGNyaXN2MzItKi4gIFRoaXMgdmFsdWUgaW1wbGllcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1tdWwtYnVnLWFib3J0PC9zcGFuPjwvc2FtcD4uICAoQSBzdWJzZXF1ZW50Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW11bC1idWctYWJvcnQ8L3NwYW4+PC9zYW1wPiB3aWxsIHR1cm4gaXQgYmFjayBvbi4pCisKKyAgICAgPGJyPjxkdD48Y29kZT5jb21tb25fdjEwX3YzMjwvY29kZT48ZGQ+T25seSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3RlciBuYW1lcyBhbmQgYWRkcmVzc2luZyBtb2RlcyB3aXRoCitvcGNvZGVzIGNvbW1vbiB0byB0aGUgdjEwIGFuZCB2MzIgYXJlIHJlY29nbml6ZWQuIAorPC9kbD4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkTl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1DUklTLTc2MyI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtXzAwNDBvcHRpb25fMDA3Yl8wMDJkTl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzY0Ij48L2E+V2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTjwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwgPGNvZGU+YXM8L2NvZGU+IHdpbGwgZW1pdCBhCit3YXJuaW5nIHdoZW4gYSAxNi1iaXQgYnJhbmNoIGluc3RydWN0aW9uIGlzIGV4cGFuZGVkIGludG8gYQorMzItYml0IG11bHRpcGxlLWluc3RydWN0aW9uIGNvbnN0cnVjdCAoc2VlIDxhIGhyZWY9IkNSSVNfMDAyZEV4cGFuZC5odG1sI0NSSVNfMDAyZEV4cGFuZCI+Q1JJUy1FeHBhbmQ8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmRub18wMDJkbXVsXzAwMmRidWdfMDAyZGFib3J0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUNSSVMtNzY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkXzAwMmRtdWxfMDAyZGJ1Z18wMDJkYWJvcnRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtQ1JJUy03NjYiPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLV8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkbm9fMDAyZG11bF8wMDJkYnVnXzAwMmRhYm9ydF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ1JJUy1fMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZG11bF8wMDJkYnVnXzAwMmRhYm9ydF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb24tNzY4Ij48L2E+CitTb21lIHZlcnNpb25zIG9mIHRoZSBDUklTIHYxMCwgZm9yIGV4YW1wbGUgaW4gdGhlIEV0cmF4IDEwMCBMWCwKK2NvbnRhaW4gYSBidWcgdGhhdCBjYXVzZXMgZGVzdGFiaWxpemluZyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBhCittdWx0aXBseSBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCB3aXRoIGNlcnRhaW4gdmFsdWVzIGluIHRoZQorZmlyc3Qgb3BlcmFuZCBqdXN0IGJlZm9yZSBhIGNhY2hlLW1pc3MuICBXaGVuIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1tdWwtYnVnLWFib3J0PC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBhY3RpdmUgKHRoZQorZGVmYXVsdCB2YWx1ZSksIDxjb2RlPmFzPC9jb2RlPiB3aWxsIHJlZnVzZSB0byBhc3NlbWJsZSBhIGZpbGUKK2NvbnRhaW5pbmcgYSBtdWx0aXBseSBpbnN0cnVjdGlvbiBhdCBhIGRhbmdlcm91cyBvZmZzZXQsIG9uZQordGhhdCBjb3VsZCBiZSB0aGUgbGFzdCBvbiBhIGNhY2hlLWxpbmUsIG9yIGlzIGluIGEgc2VjdGlvbiB3aXRoCitpbnN1ZmZpY2llbnQgYWxpZ25tZW50LiAgVGhpcyBwbGFjZW1lbnQgY2hlY2tpbmcgZG9lcyBub3QgY2F0Y2gKK2FueSBjYXNlIHdoZXJlIHRoZSBtdWx0aXBseSBpbnN0cnVjdGlvbiBpcyBkYW5nZXJvdXNseSBwbGFjZWQKK2JlY2F1c2UgaXQgaXMgbG9jYXRlZCBpbiBhIGRlbGF5LXNsb3QuICBUaGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbXVsLWJ1Zy1hYm9ydDwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24gdHVybnMgb2ZmIHRoZQorY2hlY2tpbmcuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZFBpYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkUGljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1ODY5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZFBpYy5odG1sCkBAIC0wLDAgKzEsMTM1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DUklTLVBpYyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ1JJU18wMDJkU3ludGF4Lmh0bWwjQ1JJU18wMDJkU3ludGF4IiB0aXRsZT0iQ1JJUy1TeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDUklTXzAwMmRDaGFycy5odG1sI0NSSVNfMDAyZENoYXJzIiB0aXRsZT0iQ1JJUy1DaGFycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNSSVNfMDAyZFJlZ3MuaHRtbCNDUklTXzAwMmRSZWdzIiB0aXRsZT0iQ1JJUy1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ1JJUy1QaWMiPjwvYT4KKzxhIG5hbWU9IkNSSVNfMDAyZFBpYyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDUklTXzAwMmRSZWdzLmh0bWwjQ1JJU18wMDJkUmVncyI+Q1JJUy1SZWdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ1JJU18wMDJkQ2hhcnMuaHRtbCNDUklTXzAwMmRDaGFycyI+Q1JJUy1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNSSVNfMDAyZFN5bnRheC5odG1sI0NSSVNfMDAyZFN5bnRheCI+Q1JJUy1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjguNC4yIFN5bWJvbHMgaW4gcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZTwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVN5bWJvbHMtaW4tcG9zaXRpb25fMDAyZGluZGVwZW5kZW50LWNvZGVfMDAyYy1DUklTLTc3NyI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtc3ltYm9scy1pbi1wb3NpdGlvbl8wMDJkaW5kZXBlbmRlbnQtY29kZS03NzgiPjwvYT48YSBuYW1lPSJpbmRleC1Qb3NpdGlvbl8wMDJkaW5kZXBlbmRlbnQtY29kZV8wMDJjLXN5bWJvbHMtaW5fMDAyYy1DUklTLTc3OSI+PC9hPgorV2hlbiBnZW5lcmF0aW5nIDxhIG5hbWU9ImNyaXNwaWMiPjwvYT5wb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIChTVlI0CitQSUMpIGZvciB1c2UgaW4gY3Jpcy1heGlzLWxpbnV4LWdudSBvciBjcmlzdjMyLWF4aXMtbGludXgtZ251CitzaGFyZWQgbGlicmFyaWVzLCBzeW1ib2wKK3N1ZmZpeGVzIGFyZSB1c2VkIHRvIHNwZWNpZnkgd2hhdCBraW5kIG9mIHJ1bi10aW1lIHN5bWJvbCBsb29rdXAKK3dpbGwgYmUgdXNlZCwgZXhwcmVzc2VkIGluIHRoZSBvYmplY3QgYXMgZGlmZmVyZW50Cis8ZW0+cmVsb2NhdGlvbiB0eXBlczwvZW0+LiAgVXN1YWxseSwgYWxsIGFic29sdXRlIHN5bWJvbCB2YWx1ZXMKK211c3QgYmUgbG9jYXRlZCBpbiBhIHRhYmxlLCB0aGUgPGVtPmdsb2JhbCBvZmZzZXQgdGFibGU8L2VtPiwKK2xlYXZpbmcgdGhlIGNvZGUgcG9zaXRpb24taW5kZXBlbmRlbnQ7IGluZGVwZW5kZW50IG9mIHZhbHVlcyBvZgorZ2xvYmFsIHN5bWJvbHMgYW5kIGluZGVwZW5kZW50IG9mIHRoZSBhZGRyZXNzIG9mIHRoZSBjb2RlLiAgVGhlCitzdWZmaXggbW9kaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wsIGludG8gZm9yIGV4YW1wbGUgYW4KK2luZGV4IGludG8gdGhlIGdsb2JhbCBvZmZzZXQgdGFibGUgd2hlcmUgdGhlIHJlYWwgc3ltYm9sIHZhbHVlCitpcyBlbnRlcmVkLCBvciBhIFBDLXJlbGF0aXZlIHZhbHVlLCBvciBhIHZhbHVlIHJlbGF0aXZlIHRvIHRoZQorc3RhcnQgb2YgdGhlIGdsb2JhbCBvZmZzZXQgdGFibGUuICBBbGwgc3ltYm9sIHN1ZmZpeGVzIHN0YXJ0Cit3aXRoIHRoZSBjaGFyYWN0ZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjwvc2FtcD4mcnNxdW87IChvbWl0dGVkIGluIHRoZSBsaXN0IGJlbG93KS4gIEV2ZXJ5CitzeW1ib2wgdXNlIGluIGNvZGUgb3IgYSByZWFkLW9ubHkgc2VjdGlvbiBtdXN0IHRoZXJlZm9yZSBoYXZlIGEKK1BJQyBzdWZmaXggdG8gZW5hYmxlIGEgdXNlZnVsIHNoYXJlZCBsaWJyYXJ5IHRvIGJlIGNyZWF0ZWQuIAorVXN1YWxseSwgdGhlc2UgY29uc3RydWN0cyBtdXN0IG5vdCBiZSB1c2VkIHdpdGggYW4gYWRkaXRpdmUKK2NvbnN0YW50IG9mZnNldCBhcyBpcyB1c3VhbGx5IGFsbG93ZWQsIGkuZS4gbm8gNCBhcyBpbgorPGNvZGU+c3ltYm9sICsgNDwvY29kZT4gaXMgYWxsb3dlZC4gIFRoaXMgcmVzdHJpY3Rpb24gaXMgY2hlY2tlZCBhdAorbGluay10aW1lLCBub3QgYXQgYXNzZW1ibHktdGltZS4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+R09UPC9jb2RlPjxkZD4KK0F0dGFjaGluZyB0aGlzIHN1ZmZpeCB0byBhIHN5bWJvbCBpbiBhbiBpbnN0cnVjdGlvbiBjYXVzZXMgdGhlCitzeW1ib2wgdG8gYmUgZW50ZXJlZCBpbnRvIHRoZSBnbG9iYWwgb2Zmc2V0IHRhYmxlLiAgVGhlIHZhbHVlIGlzCithIDMyLWJpdCBpbmRleCBmb3IgdGhhdCBzeW1ib2wgaW50byB0aGUgZ2xvYmFsIG9mZnNldCB0YWJsZS4gCitUaGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyByZWxvY2F0aW9uIGlzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQ1JJU18zMl9HT1Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBFeGFtcGxlOiA8Y29kZT5tb3ZlLmQKK1skcjArZXh0c3ltOkdPVF0sJHI5PC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+R09UMTY8L2NvZGU+PGRkPgorU2FtZSBhcyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HT1Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGJ1dCB0aGUgdmFsdWUgaXMgYSAxNi1iaXQgaW5kZXggaW50byB0aGUKK2dsb2JhbCBvZmZzZXQgdGFibGUuICBUaGUgY29ycmVzcG9uZGluZyByZWxvY2F0aW9uIGlzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQ1JJU18xNl9HT1Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBFeGFtcGxlOiA8Y29kZT5tb3ZlLmQKK1skcjArYXN5bWJvbDpHT1QxNl0sJHIxMDwvY29kZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlBMVDwvY29kZT48ZGQ+CitUaGlzIHN1ZmZpeCBpcyB1c2VkIGZvciBmdW5jdGlvbiBzeW1ib2xzLiAgSXQgY2F1c2VzIGEKKzxlbT5wcm9jZWR1cmUgbGlua2FnZSB0YWJsZTwvZW0+LCBhbiBhcnJheSBvZiBjb2RlIHN0dWJzLCB0byBiZQorY3JlYXRlZCBhdCB0aGUgdGltZSB0aGUgc2hhcmVkIG9iamVjdCBpcyBjcmVhdGVkIG9yIGxpbmtlZAorYWdhaW5zdCwgdG9nZXRoZXIgd2l0aCBhIGdsb2JhbCBvZmZzZXQgdGFibGUgZW50cnkuICBUaGUgdmFsdWUKK2lzIGEgcGMtcmVsYXRpdmUgb2Zmc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0dWIgY29kZSBpbiB0aGUKK3Byb2NlZHVyZSBsaW5rYWdlIHRhYmxlLiAgVGhpcyBhcnJhbmdlbWVudCBjYXVzZXMgdGhlIHJ1bi10aW1lCitzeW1ib2wgcmVzb2x2ZXIgdG8gYmUgY2FsbGVkIHRvIGxvb2sgdXAgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlCitzeW1ib2wgdGhlIGZpcnN0IHRpbWUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCAoYXQgbGF0ZXN0OworZGVwZW5kaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcykuICBJdCBpcyBvbmx5IHNhZmUgdG8gbGVhdmUgdGhlCitzeW1ib2wgdW5yZXNvbHZlZCB0aGlzIHdheSBpZiBhbGwgcmVmZXJlbmNlcyBhcmUgZnVuY3Rpb24gY2FsbHMuIAorVGhlIG5hbWUgb2YgdGhlIHJlbG9jYXRpb24gaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5SX0NSSVNfMzJfUExUX1BDUkVMPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK0V4YW1wbGU6IDxjb2RlPmFkZC5kIGZubmFtZTpQTFQsJHBjPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+UExURzwvY29kZT48ZGQ+CitMaWtlIFBMVCwgYnV0IHRoZSB2YWx1ZSBpcyByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQorZ2xvYmFsIG9mZnNldCB0YWJsZS4gIFRoZSByZWxvY2F0aW9uIGlzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQ1JJU18zMl9QTFRfR09UUkVMPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgRXhhbXBsZTogPGNvZGU+bW92ZS5kCitmbm5hbWU6UExURywkcjM8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5HT1RQTFQ8L2NvZGU+PGRkPgorU2ltaWxhciB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlBMVDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYnV0IHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIGlzIGEgMzItYml0CitpbmRleCBpbnRvIHRoZSBnbG9iYWwgb2Zmc2V0IHRhYmxlLiAgVGhpcyBpcyBzb21ld2hhdCBvZiBhIG1peAorYmV0d2VlbiB0aGUgZWZmZWN0IG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkdPVDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UExUPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN1ZmZpeDsKK3RoZSBkaWZmZXJlbmNlIHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+R09UPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRoYXQgdGhlcmUgd2lsbCBiZSBhIHByb2NlZHVyZQorbGlua2FnZSB0YWJsZSBlbnRyeSBjcmVhdGVkLCBhbmQgdGhhdCB0aGUgc3ltYm9sIGlzIGFzc3VtZWQgdG8KK2JlIGEgZnVuY3Rpb24gZW50cnkgYW5kIHdpbGwgYmUgcmVzb2x2ZWQgYnkgdGhlIHJ1bi10aW1lCityZXNvbHZlciBhcyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UExUPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIHJlbG9jYXRpb24gaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9DUklTXzMyX0dPVFBMVDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEV4YW1wbGU6IDxjb2RlPmpzcgorWyRyMCtmbm5hbWU6R09UUExUXTwvY29kZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPkdPVFBMVDE2PC9jb2RlPjxkZD4KK0EgdmFyaWFudCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkdPVFBMVDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBnaXZpbmcgYSAxNi1iaXQgdmFsdWUuICBJdHMKK3JlbG9jYXRpb24gbmFtZSBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQ1JJU18xNl9HT1RQTFQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBFeGFtcGxlOiA8Y29kZT5qc3IKK1skcjArZm5uYW1lOkdPVFBMVDE2XTwvY29kZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPkdPVE9GRjwvY29kZT48ZGQ+CitUaGlzIHN1ZmZpeCBtdXN0IG9ubHkgYmUgYXR0YWNoZWQgdG8gYSBsb2NhbCBzeW1ib2wsIGJ1dCBtYXkgYmUKK3VzZWQgaW4gYW4gZXhwcmVzc2lvbiBhZGRpbmcgYW4gb2Zmc2V0LiAgVGhlIHZhbHVlIGlzIHRoZQorYWRkcmVzcyBvZiB0aGUgc3ltYm9sIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgZ2xvYmFsIG9mZnNldAordGFibGUuICBUaGUgcmVsb2NhdGlvbiBuYW1lIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9DUklTXzMyX0dPVFJFTDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitFeGFtcGxlOiA8Y29kZT5tb3ZlLmQgWyRyMCtsb2NhbHN5bTpHT1RPRkZdLHIzPC9jb2RlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkUHNldWRvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkUHNldWRvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NmFhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUklTXzAwMmRQc2V1ZG9zLmh0bWwKQEAgLTAsMCArMSwxMDggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNSSVMtUHNldWRvcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ1JJU18wMDJkU3ludGF4Lmh0bWwjQ1JJU18wMDJkU3ludGF4IiB0aXRsZT0iQ1JJUy1TeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDUklTXzAwMmRSZWdzLmh0bWwjQ1JJU18wMDJkUmVncyIgdGl0bGU9IkNSSVMtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNSSVMtUHNldWRvcyI+PC9hPgorPGEgbmFtZT0iQ1JJU18wMDJkUHNldWRvcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNSSVNfMDAyZFJlZ3MuaHRtbCNDUklTXzAwMmRSZWdzIj5DUklTLVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDUklTXzAwMmRTeW50YXguaHRtbCNDUklTXzAwMmRTeW50YXgiPkNSSVMtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS44LjQuNCBBc3NlbWJsZXIgRGlyZWN0aXZlczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmVzXzAwMmMtQ1JJUy03ODIiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wc18wMDJjLUNSSVMtNzgzIj48L2E+PGEgbmFtZT0iaW5kZXgtQ1JJUy1hc3NlbWJsZXItZGlyZWN0aXZlcy03ODQiPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLXBzZXVkb18wMDJkb3BzLTc4NSI+PC9hPgorVGhlcmUgYXJlIGEgZmV3IENSSVMtc3BlY2lmaWMgcHNldWRvLWRpcmVjdGl2ZXMgaW4gYWRkaXRpb24gdG8KK3RoZSBnZW5lcmljIG9uZXMuICBTZWUgPGEgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+LiAgQ29uc3RhbnRzIGVtaXR0ZWQgYnkKK3BzZXVkby1kaXJlY3RpdmVzIGFyZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyIGZvciBDUklTLiAgVGhlcmUgaXMKK25vIHN1cHBvcnQgZm9yIGZsb2F0aW5nLXBvaW50LXNwZWNpZmljIGRpcmVjdGl2ZXMgZm9yIENSSVMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi5kd29yZCBFWFBSRVNTSU9OUzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZWR3b3JkXzAwMmMtQ1JJUy03ODYiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wLV8wMDJlZHdvcmRfMDAyYy1DUklTLTc4NyI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZWR3b3JkLTc4OCI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtcHNldWRvXzAwMmRvcC1fMDAyZWR3b3JkLTc4OSI+PC9hPgorVGhlIDxjb2RlPi5kd29yZDwvY29kZT4gZGlyZWN0aXZlIGlzIGEgc3lub255bSBmb3IgPGNvZGU+LmludDwvY29kZT4sCitleHBlY3RpbmcgemVybyBvciBtb3JlIEVYUFJFU1NJT05TLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgRm9yCitlYWNoIGV4cHJlc3Npb24sIGEgMzItYml0IGxpdHRsZS1lbmRpYW4gY29uc3RhbnQgaXMgZW1pdHRlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5zeW50YXggQVJHVU1FTlQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVzeW50YXhfMDAyYy1DUklTLTc5MCI+PC9hPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3AtXzAwMmVzeW50YXhfMDAyYy1DUklTLTc5MSI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZXN5bnRheC03OTIiPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLXBzZXVkb18wMDJkb3AtXzAwMmVzeW50YXgtNzkzIj48L2E+VGhlIDxjb2RlPi5zeW50YXg8L2NvZGU+IGRpcmVjdGl2ZSB0YWtlcyBhcyA8dmFyPkFSR1VNRU5UPC92YXI+IG9uZSBvZiB0aGUKK2ZvbGxvd2luZyBjYXNlLXNlbnNpdGl2ZSBjaG9pY2VzLgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPm5vX3JlZ2lzdGVyX3ByZWZpeDwvY29kZT48ZGQ+CitUaGUgPGNvZGU+LnN5bnRheCBub19yZWdpc3Rlcl9wcmVmaXg8L2NvZGU+IDxhIG5hbWU9ImNyaXNub3VzIj48L2E+ZGlyZWN0aXZlCittYWtlcyBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgcHJlZml4IG9uIGFsbCByZWdpc3RlcnMgb3B0aW9uYWwuICBJdAorb3ZlcnJpZGVzIGEgcHJldmlvdXMgc2V0dGluZywgaW5jbHVkaW5nIHRoZSBjb3JyZXNwb25kaW5nIGVmZmVjdAorb2YgdGhlIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPi4gIElmIHRoaXMgZGlyZWN0aXZlIGlzCit1c2VkIHdoZW4gb3JkaW5hcnkgc3ltYm9scyBkbyBub3QgaGF2ZSBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Xzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIKK3ByZWZpeCwgY2FyZSBtdXN0IGJlIHRha2VuIHRvIGF2b2lkIGFtYmlndWl0aWVzIHdoZXRoZXIgYW4KK29wZXJhbmQgaXMgYSByZWdpc3RlciBvciBhIHN5bWJvbDsgdXNpbmcgc3ltYm9scyB3aXRoIG5hbWVzIHRoZQorc2FtZSBhcyBnZW5lcmFsIG9yIHNwZWNpYWwgcmVnaXN0ZXJzIHRoZW4gaW52b2tlIHVuZGVmaW5lZAorYmVoYXZpb3IuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnJlZ2lzdGVyX3ByZWZpeDwvY29kZT48ZGQ+CitUaGlzIGRpcmVjdGl2ZSBtYWtlcyBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgcHJlZml4IG9uIGFsbAorcmVnaXN0ZXJzIG1hbmRhdG9yeS4gIEl0IG92ZXJyaWRlcyBhIHByZXZpb3VzIHNldHRpbmcsIGluY2x1ZGluZwordGhlIGNvcnJlc3BvbmRpbmcgZWZmZWN0IG9mIHRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmxlYWRpbmdfdW5kZXJzY29yZTwvY29kZT48ZGQ+CitUaGlzIGlzIGFuIGFzc2VydGlvbiBkaXJlY3RpdmUsIGVtaXR0aW5nIGFuIGVycm9yIGlmIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIGluIGVmZmVjdC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bm9fbGVhZGluZ191bmRlcnNjb3JlPC9jb2RlPjxkZD4KK1RoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIHRoZSA8Y29kZT4uc3ludGF4IGxlYWRpbmdfdW5kZXJzY29yZTwvY29kZT4KK2RpcmVjdGl2ZSBhbmQgZW1pdHMgYW4gZXJyb3IgaWYgdGhlIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPgoraXMgaW4gZWZmZWN0LiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4uYXJjaCBBUkdVTUVOVDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZWFyY2hfMDAyYy1DUklTLTc5NCI+PC9hPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3AtXzAwMmVhcmNoXzAwMmMtQ1JJUy03OTUiPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVhcmNoLTc5NiI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtcHNldWRvXzAwMmRvcC1fMDAyZWFyY2gtNzk3Ij48L2E+VGhpcyBpcyBhbiBhc3NlcnRpb24gZGlyZWN0aXZlLCBnaXZpbmcgYW4gZXJyb3IgaWYgdGhlIHNwZWNpZmllZAorPHZhcj5BUkdVTUVOVDwvdmFyPiBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHNwZWNpZmllZCBvciBkZWZhdWx0IHZhbHVlCitmb3IgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbWFyY2g9PC9zcGFuPjx2YXI+YXJjaGl0ZWN0dXJlPC92YXI+PC9zYW1wPiBvcHRpb24KKyhzZWUgPGEgaHJlZj0ibWFyY2hfMDAyZG9wdGlvbi5odG1sI21hcmNoXzAwMmRvcHRpb24iPm1hcmNoLW9wdGlvbjwvYT4pLgorCisgICAgIDwhLS0gSWYgeW91IGNvbXBhcmUgd2l0aCBtZF9wc2V1ZG9fdGFibGUsIHlvdSBzZWUgdGhhdCB3ZSBkb24ndCAtLT4KKyAgICAgPCEtLSBkb2N1bWVudCAiLmZpbGUiIGFuZCAiLmxvYyIgaGVyZS4gIFRoaXMgaXMgYmVjYXVzZSB3ZSdyZSBqdXN0IC0tPgorICAgICA8IS0tIHdyYXBwaW5nIHRoZSBjb3JyZXNwb25kaW5nIEVMRiBmdW5jdGlvbiBhbmQgZW1pdHRpbmcgYW4gZXJyb3IgZm9yIC0tPgorICAgICA8IS0tIGEub3V0LiAtLT4KKyAgIDwvZGw+CisKKzwhLS0gQ29weXJpZ2h0IDE5OTYsIDIwMDAsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUklTXzAwMmRSZWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUklTXzAwMmRSZWdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5YjY5NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DUklTLVJlZ3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNSSVNfMDAyZFN5bnRheC5odG1sI0NSSVNfMDAyZFN5bnRheCIgdGl0bGU9IkNSSVMtU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ1JJU18wMDJkUGljLmh0bWwjQ1JJU18wMDJkUGljIiB0aXRsZT0iQ1JJUy1QaWMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjQ1JJU18wMDJkUHNldWRvcyIgdGl0bGU9IkNSSVMtUHNldWRvcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNSSVMtUmVncyI+PC9hPgorPGEgbmFtZT0iQ1JJU18wMDJkUmVncyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDUklTXzAwMmRQc2V1ZG9zLmh0bWwjQ1JJU18wMDJkUHNldWRvcyI+Q1JJUy1Qc2V1ZG9zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ1JJU18wMDJkUGljLmh0bWwjQ1JJU18wMDJkUGljIj5DUklTLVBpYzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNSSVNfMDAyZFN5bnRheC5odG1sI0NSSVNfMDAyZFN5bnRheCI+Q1JJUy1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjguNC4zIFJlZ2lzdGVyIG5hbWVzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXItbmFtZXNfMDAyYy1DUklTLTc4MCI+PC9hPjxhIG5hbWU9ImluZGV4LUNSSVMtcmVnaXN0ZXItbmFtZXMtNzgxIj48L2E+CitBICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgbWF5IGFsd2F5cyBwcmVmaXggYSBnZW5lcmFsIG9yIHNwZWNpYWwKK3JlZ2lzdGVyIG5hbWUgaW4gYW4gaW5zdHJ1Y3Rpb24gb3BlcmFuZCBidXQgaXMgbWFuZGF0b3J5IHdoZW4KK3RoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkIG9yIHdoZW4gdGhlCis8Y29kZT4uc3ludGF4IHJlZ2lzdGVyX3ByZWZpeDwvY29kZT4gZGlyZWN0aXZlIGlzIGluIGVmZmVjdAorKHNlZSA8YSBocmVmPSJjcmlzbm91cy5odG1sI2NyaXNub3VzIj5jcmlzbm91czwvYT4pLiAgUmVnaXN0ZXIgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZFN5bWJvbHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NSSVNfMDAyZFN5bWJvbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWU1ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkU3ltYm9scy5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNSSVMtU3ltYm9scyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ1JJU18wMDJkRGVwZW5kZW50Lmh0bWwjQ1JJU18wMDJkRGVwZW5kZW50IiB0aXRsZT0iQ1JJUy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDUklTXzAwMmRFeHBhbmQuaHRtbCNDUklTXzAwMmRFeHBhbmQiIHRpdGxlPSJDUklTLUV4cGFuZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNSSVNfMDAyZFN5bnRheC5odG1sI0NSSVNfMDAyZFN5bnRheCIgdGl0bGU9IkNSSVMtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ1JJUy1TeW1ib2xzIj48L2E+Cis8YSBuYW1lPSJDUklTXzAwMmRTeW1ib2xzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNSSVNfMDAyZFN5bnRheC5odG1sI0NSSVNfMDAyZFN5bnRheCI+Q1JJUy1TeW50YXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDUklTXzAwMmRFeHBhbmQuaHRtbCNDUklTXzAwMmRFeHBhbmQiPkNSSVMtRXhwYW5kPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ1JJU18wMDJkRGVwZW5kZW50Lmh0bWwjQ1JJU18wMDJkRGVwZW5kZW50Ij5DUklTLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuOC4zIFN5bWJvbHM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1TeW1ib2xzXzAwMmMtYnVpbHRfMDAyZGluXzAwMmMtQ1JJUy03NzEiPjwvYT48YSBuYW1lPSJpbmRleC1TeW1ib2xzXzAwMmMtQ1JJU18wMDJjLWJ1aWx0XzAwMmRpbi03NzIiPjwvYT48YSBuYW1lPSJpbmRleC1DUklTLWJ1aWx0XzAwMmRpbi1zeW1ib2xzLTc3MyI+PC9hPjxhIG5hbWU9ImluZGV4LUJ1aWx0XzAwMmRpbi1zeW1ib2xzXzAwMmMtQ1JJUy03NzQiPjwvYT4KK1NvbWUgc3ltYm9scyBhcmUgZGVmaW5lZCBieSB0aGUgYXNzZW1ibGVyLiAgVGhleSdyZSBpbnRlbmRlZCB0bworYmUgdXNlZCBpbiBjb25kaXRpb25hbCBhc3NlbWJseSwgZm9yIGV4YW1wbGU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIC5pZiAuLmFzbS5hcmNoLmNyaXMudjMyCisgICAgICA8dmFyPmNvZGUgZm9yIENSSVMgdjMyPC92YXI+CisgICAgICAuZWxzZWlmIC4uYXNtLmFyY2guY3Jpcy5jb21tb25fdjEwX3YzMgorICAgICAgPHZhcj5jb2RlIGNvbW1vbiB0byBDUklTIHYzMiBhbmQgQ1JJUyB2MTA8L3Zhcj4KKyAgICAgIC5lbHNlaWYgLi5hc20uYXJjaC5jcmlzLnYxMCB8IC4uYXNtLmFyY2guY3Jpcy5hbnlfdjBfdjEwCisgICAgICA8dmFyPmNvZGUgZm9yIHYxMDwvdmFyPgorICAgICAgLmVsc2UKKyAgICAgIC5lcnJvciAiQ29kZSBuZWVkcyB0byBiZSBhZGRlZCBoZXJlLiIKKyAgICAgIC5lbmRpZgorPC9wcmU+CisgICA8cD5UaGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIGluIHRoZSBhc3NlbWJsZXIsIHJlZmxlY3RpbmcKK2NvbW1hbmQtbGluZSBvcHRpb25zLCBlaXRoZXIgd2hlbiBzcGVjaWZpZWQgb3IgdGhlIGRlZmF1bHQuIAorVGhleSBhcmUgYWx3YXlzIGRlZmluZWQsIHRvIDAgb3IgMS4KKyAgICAgPGRsPgorPGR0Pjxjb2RlPi4uYXNtLmFyY2guY3Jpcy5hbnlfdjBfdjEwPC9jb2RlPjxkZD5UaGlzIHN5bWJvbCBpcyBub24temVybyB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbWFyY2g9djBfdjEwPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkCitvciB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi4uYXNtLmFyY2guY3Jpcy5jb21tb25fdjEwX3YzMjwvY29kZT48ZGQ+U2V0IGFjY29yZGluZyB0byB0aGUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbWFyY2g9Y29tbW9uX3YxMF92MzI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi4uYXNtLmFyY2guY3Jpcy52MTA8L2NvZGU+PGRkPlJlZmxlY3RzIHRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1tYXJjaD12MTA8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi4uYXNtLmFyY2guY3Jpcy52MzI8L2NvZGU+PGRkPkNvcnJlc3BvbmRzIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbWFyY2g9djEwPC9zcGFuPjwvc2FtcD4uIAorPC9kbD4KKworICAgPHA+U3BlYWtpbmcgb2Ygc3ltYm9scywgd2hlbiBhIHN5bWJvbCBpcyB1c2VkIGluIGNvZGUsIGl0IGNhbiBoYXZlCithIHN1ZmZpeCBtb2RpZnlpbmcgaXRzIHZhbHVlIGZvciB1c2UgaW4gcG9zaXRpb24taW5kZXBlbmRlbnQKK2NvZGUuIFNlZSA8YSBocmVmPSJDUklTXzAwMmRQaWMuaHRtbCNDUklTXzAwMmRQaWMiPkNSSVMtUGljPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DUklTXzAwMmRTeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDQyNGU1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ1JJU18wMDJkU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q1JJUy1TeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI0NSSVNfMDAyZERlcGVuZGVudCIgdGl0bGU9IkNSSVMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ1JJU18wMDJkU3ltYm9scy5odG1sI0NSSVNfMDAyZFN5bWJvbHMiIHRpdGxlPSJDUklTLVN5bWJvbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDUklTLVN5bnRheCI+PC9hPgorPGEgbmFtZT0iQ1JJU18wMDJkU3ludGF4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ1JJU18wMDJkU3ltYm9scy5odG1sI0NSSVNfMDAyZFN5bWJvbHMiPkNSSVMtU3ltYm9sczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI0NSSVNfMDAyZERlcGVuZGVudCI+Q1JJUy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjguNCBTeW50YXg8L2g0PgorCis8cD5UaGVyZSBhcmUgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIENSSVMgYXNzZW1ibHkgc3ludGF4LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQ1JJU18wMDJkQ2hhcnMuaHRtbCNDUklTXzAwMmRDaGFycyI+Q1JJUy1DaGFyczwvYT46IAkJICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkNSSVNfMDAyZFBpYy5odG1sI0NSSVNfMDAyZFBpYyI+Q1JJUy1QaWM8L2E+OiAJCQlQb3NpdGlvbi1JbmRlcGVuZGVudCBDb2RlIFN5bWJvbHMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkNSSVNfMDAyZFJlZ3MuaHRtbCNDUklTXzAwMmRSZWdzIj5DUklTLVJlZ3M8L2E+OiAJCQlSZWdpc3RlciBOYW1lcworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iQ1JJU18wMDJkUHNldWRvcy5odG1sI0NSSVNfMDAyZFBzZXVkb3MiPkNSSVMtUHNldWRvczwvYT46IAkJQXNzZW1ibGVyIERpcmVjdGl2ZXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NoYXJhY3RlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NoYXJhY3RlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJhNzA1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ2hhcmFjdGVycy5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNoYXJhY3RlcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbnN0YW50cy5odG1sI0NvbnN0YW50cyIgdGl0bGU9IkNvbnN0YW50cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik51bWJlcnMuaHRtbCNOdW1iZXJzIiB0aXRsZT0iTnVtYmVycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNoYXJhY3RlcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTnVtYmVycy5odG1sI051bWJlcnMiPk51bWJlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb25zdGFudHMuaHRtbCNDb25zdGFudHMiPkNvbnN0YW50czwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuNi4xIENoYXJhY3RlciBDb25zdGFudHM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1jaGFyYWN0ZXItY29uc3RhbnRzLTE0MCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnN0YW50c18wMDJjLWNoYXJhY3Rlci0xNDEiPjwvYT5UaGVyZSBhcmUgdHdvIGtpbmRzIG9mIGNoYXJhY3RlciBjb25zdGFudHMuICBBIDxkZm4+Y2hhcmFjdGVyPC9kZm4+IHN0YW5kcworZm9yIG9uZSBjaGFyYWN0ZXIgaW4gb25lIGJ5dGUgYW5kIGl0cyB2YWx1ZSBtYXkgYmUgdXNlZCBpbgorbnVtZXJpYyBleHByZXNzaW9ucy4gIFN0cmluZyBjb25zdGFudHMgKHByb3Blcmx5IGNhbGxlZCBzdHJpbmcKKzxlbT5saXRlcmFsczwvZW0+KSBhcmUgcG90ZW50aWFsbHkgbWFueSBieXRlcyBhbmQgdGhlaXIgdmFsdWVzIG1heSBub3QgYmUKK3VzZWQgaW4gYXJpdGhtZXRpYyBleHByZXNzaW9ucy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPjogICAgICAgICAgICAgICAgICAgICAgU3RyaW5ncworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iQ2hhcnMuaHRtbCNDaGFycyI+Q2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJhY3RlcnMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YmM1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9DaGFycy5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDaGFyYWN0ZXJzLmh0bWwjQ2hhcmFjdGVycyIgdGl0bGU9IkNoYXJhY3RlcnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDaGFycyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ2hhcmFjdGVycy5odG1sI0NoYXJhY3RlcnMiPkNoYXJhY3RlcnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjYuMS4yIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1zaW5nbGUtY2hhcmFjdGVyLWNvbnN0YW50LTE2NCI+PC9hPjxhIG5hbWU9ImluZGV4LWNoYXJhY3Rlcl8wMDJjLXNpbmdsZS0xNjUiPjwvYT48YSBuYW1lPSJpbmRleC1jb25zdGFudF8wMDJjLXNpbmdsZS1jaGFyYWN0ZXItMTY2Ij48L2E+QSBzaW5nbGUgY2hhcmFjdGVyIG1heSBiZSB3cml0dGVuIGFzIGEgc2luZ2xlIHF1b3RlIGltbWVkaWF0ZWx5Citmb2xsb3dlZCBieSB0aGF0IGNoYXJhY3Rlci4gIFRoZSBzYW1lIGVzY2FwZXMgYXBwbHkgdG8gY2hhcmFjdGVycyBhcwordG8gc3RyaW5ncy4gIFNvIGlmIHlvdSB3YW50IHRvIHdyaXRlIHRoZSBjaGFyYWN0ZXIgYmFja3NsYXNoLCB5b3UKK211c3Qgd3JpdGUgPGtiZD4nXFw8L2tiZD4gd2hlcmUgdGhlIGZpcnN0IDxjb2RlPlw8L2NvZGU+IGVzY2FwZXMgdGhlIHNlY29uZAorPGNvZGU+XDwvY29kZT4uICBBcyB5b3UgY2FuIHNlZSwgdGhlIHF1b3RlIGlzIGFuIGFjdXRlIGFjY2VudCwgbm90IGEKK2dyYXZlIGFjY2VudC4gIEEgbmV3bGluZQoraW1tZWRpYXRlbHkgZm9sbG93aW5nIGFuIGFjdXRlIGFjY2VudCBpcyB0YWtlbiBhcyBhIGxpdGVyYWwgY2hhcmFjdGVyCithbmQgZG9lcyBub3QgY291bnQgYXMgdGhlIGVuZCBvZiBhIHN0YXRlbWVudC4gIFRoZSB2YWx1ZSBvZiBhIGNoYXJhY3RlcgorY29uc3RhbnQgaW4gYSBudW1lcmljIGV4cHJlc3Npb24gaXMgdGhlIG1hY2hpbmUncyBieXRlLXdpZGUgY29kZSBmb3IKK3RoYXQgY2hhcmFjdGVyLiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYXNzdW1lcyB5b3VyIGNoYXJhY3RlciBjb2RlIGlzIEFTQ0lJOgorPGtiZD4nQTwva2JkPiBtZWFucyA2NSwgPGtiZD4nQjwva2JkPiBtZWFucyA2NiwgYW5kIHNvIG9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Db21tLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Db21tLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5MmM1YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NvbW0uaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db21tIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIiB0aXRsZT0iQ0ZJIGRpcmVjdGl2ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEYXRhLmh0bWwjRGF0YSIgdGl0bGU9IkRhdGEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb21tIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRhdGEuaHRtbCNEYXRhIj5EYXRhPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Q0ZJIGRpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMzIgPGNvZGU+LmNvbW0gPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+bGVuZ3RoPC92YXI+IDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiY29tbV8wMDdkLWRpcmVjdGl2ZS0zMDIiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2xfMDAyYy1jb21tb24tMzAzIj48L2E+PGNvZGU+LmNvbW08L2NvZGU+IGRlY2xhcmVzIGEgY29tbW9uIHN5bWJvbCBuYW1lZCA8dmFyPnN5bWJvbDwvdmFyPi4gIFdoZW4gbGlua2luZywgYQorY29tbW9uIHN5bWJvbCBpbiBvbmUgb2JqZWN0IGZpbGUgbWF5IGJlIG1lcmdlZCB3aXRoIGEgZGVmaW5lZCBvciBjb21tb24gc3ltYm9sCitvZiB0aGUgc2FtZSBuYW1lIGluIGFub3RoZXIgb2JqZWN0IGZpbGUuICBJZiA8Y29kZT5sZDwvY29kZT4gZG9lcyBub3Qgc2VlIGEKK2RlZmluaXRpb24gZm9yIHRoZSBzeW1ib2wmbmRhc2g7anVzdCBvbmUgb3IgbW9yZSBjb21tb24gc3ltYm9scyZuZGFzaDt0aGVuIGl0IHdpbGwKK2FsbG9jYXRlIDx2YXI+bGVuZ3RoPC92YXI+IGJ5dGVzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiAgPHZhcj5sZW5ndGg8L3Zhcj4gbXVzdCBiZSBhbgorYWJzb2x1dGUgZXhwcmVzc2lvbi4gIElmIDxjb2RlPmxkPC9jb2RlPiBzZWVzIG11bHRpcGxlIGNvbW1vbiBzeW1ib2xzIHdpdGgKK3RoZSBzYW1lIG5hbWUsIGFuZCB0aGV5IGRvIG5vdCBhbGwgaGF2ZSB0aGUgc2FtZSBzaXplLCBpdCB3aWxsIGFsbG9jYXRlIHNwYWNlCit1c2luZyB0aGUgbGFyZ2VzdCBzaXplLgorCisgICA8cD5XaGVuIHVzaW5nIEVMRiBvciAoYXMgYSBHTlUgZXh0ZW5zaW9uKSBQRSwgdGhlIDxjb2RlPi5jb21tPC9jb2RlPiBkaXJlY3RpdmUgdGFrZXMKK2FuIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50LiAgVGhpcyBpcyB0aGUgZGVzaXJlZCBhbGlnbm1lbnQgb2YgdGhlIHN5bWJvbCwKK3NwZWNpZmllZCBmb3IgRUxGIGFzIGEgYnl0ZSBib3VuZGFyeSAoZm9yIGV4YW1wbGUsIGFuIGFsaWdubWVudCBvZiAxNiBtZWFucwordGhhdCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgNCBiaXRzIG9mIHRoZSBhZGRyZXNzIHNob3VsZCBiZSB6ZXJvKSwgYW5kIGZvciBQRQorYXMgYSBwb3dlciBvZiB0d28gKGZvciBleGFtcGxlLCBhbiBhbGlnbm1lbnQgb2YgNSBtZWFucyBhbGlnbmVkIHRvIGEgMzItYnl0ZQorYm91bmRhcnkpLiAgVGhlIGFsaWdubWVudCBtdXN0IGJlIGFuIGFic29sdXRlIGV4cHJlc3Npb24sIGFuZCBpdCBtdXN0IGJlIGEKK3Bvd2VyIG9mIHR3by4gIElmIDxjb2RlPmxkPC9jb2RlPiBhbGxvY2F0ZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZm9yIHRoZQorY29tbW9uIHN5bWJvbCwgaXQgd2lsbCB1c2UgdGhlIGFsaWdubWVudCB3aGVuIHBsYWNpbmcgdGhlIHN5bWJvbC4gIElmIG5vCithbGlnbm1lbnQgaXMgc3BlY2lmaWVkLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiB3aWxsIHNldCB0aGUgYWxpZ25tZW50IHRvIHRoZQorbGFyZ2VzdCBwb3dlciBvZiB0d28gbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBzeW1ib2wsIHVwIHRvIGEKK21heGltdW0gb2YgMTYgb24gRUxGLCBvciB0aGUgZGVmYXVsdCBzZWN0aW9uIGFsaWdubWVudCBvZiA0IG9uIFBFPGEgcmVsPSJmb290bm90ZSIgaHJlZj0iI2ZuLTEiIG5hbWU9ImZuZC0xIj48c3VwPjE8L3N1cD48L2E+LgorCisgICA8cD5UaGUgc3ludGF4IGZvciA8Y29kZT4uY29tbTwvY29kZT4gZGlmZmVycyBzbGlnaHRseSBvbiB0aGUgSFBQQS4gIFRoZSBzeW50YXggaXMKKyZsc3F1bzs8c2FtcD48dmFyPnN5bWJvbDwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4gLmNvbW0sIDwvc3Bhbj48dmFyPmxlbmd0aDwvdmFyPjwvc2FtcD4mcnNxdW87OyA8dmFyPnN5bWJvbDwvdmFyPiBpcyBvcHRpb25hbC4KKworICAgPGRpdiBjbGFzcz0iZm9vdG5vdGUiPgorPGhyPgorPGg0PkZvb3Rub3RlczwvaDQ+PHAgY2xhc3M9ImZvb3Rub3RlIj48c21hbGw+WzxhIG5hbWU9ImZuLTEiIGhyZWY9IiNmbmQtMSI+MTwvYT5dPC9zbWFsbD4gVGhpcworaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBleGVjdXRhYmxlIGltYWdlIGZpbGUgYWxpZ25tZW50IGNvbnRyb2xsZWQgYnkgPGNvZGU+bGQ8L2NvZGU+J3MKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1zZWN0aW9uLWFsaWdubWVudDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb247IGltYWdlIGZpbGUgc2VjdGlvbnMgaW4gUEUgYXJlIGFsaWduZWQgdG8KK211bHRpcGxlcyBvZiA0MDk2LCB3aGljaCBpcyBmYXIgdG9vIGxhcmdlIGFuIGFsaWdubWVudCBmb3Igb3JkaW5hcnkgdmFyaWFibGVzLiAKK0l0IGlzIHJhdGhlciB0aGUgZGVmYXVsdCBhbGlnbm1lbnQgZm9yIChub24tZGVidWcpIHNlY3Rpb25zIHdpdGhpbiBvYmplY3QKKygmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPioubzwvc3Bhbj48L3NhbXA+JnJzcXVvOykgZmlsZXMsIHdoaWNoIGFyZSBsZXNzIHN0cmljdGx5IGFsaWduZWQuPC9wPgorCisgICA8aHI+PC9kaXY+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NvbW1hbmQtTGluZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ29tbWFuZC1MaW5lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjMjNkYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NvbW1hbmQtTGluZS5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbW1hbmQgTGluZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyIgdGl0bGU9Ik92ZXJ2aWV3Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT2JqZWN0LUZvcm1hdHMuaHRtbCNPYmplY3QtRm9ybWF0cyIgdGl0bGU9Ik9iamVjdCBGb3JtYXRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW5wdXQtRmlsZXMuaHRtbCNJbnB1dC1GaWxlcyIgdGl0bGU9IklucHV0IEZpbGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29tbWFuZC1MaW5lIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklucHV0LUZpbGVzLmh0bWwjSW5wdXQtRmlsZXMiPklucHV0IEZpbGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT2JqZWN0LUZvcm1hdHMuaHRtbCNPYmplY3QtRm9ybWF0cyI+T2JqZWN0IEZvcm1hdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNCBDb21tYW5kIExpbmU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb21tYW5kLWxpbmUtY29udmVudGlvbnMtMjUiPjwvYT4KK0FmdGVyIHRoZSBwcm9ncmFtIG5hbWUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21tYW5kIGxpbmUgbWF5IGNvbnRhaW4KK29wdGlvbnMgYW5kIGZpbGUgbmFtZXMuICBPcHRpb25zIG1heSBhcHBlYXIgaW4gYW55IG9yZGVyLCBhbmQgbWF5IGJlCitiZWZvcmUsIGFmdGVyLCBvciBiZXR3ZWVuIGZpbGUgbmFtZXMuICBUaGUgb3JkZXIgb2YgZmlsZSBuYW1lcyBpcworc2lnbmlmaWNhbnQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXN0YW5kYXJkLWlucHV0XzAwMmMtYXMtaW5wdXQtZmlsZS0yNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmQtMjciPjwvYT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LS08L3NwYW4+PC9zYW1wPiAodHdvIGh5cGhlbnMpIGJ5IGl0c2VsZiBuYW1lcyB0aGUgc3RhbmRhcmQgaW5wdXQgZmlsZQorZXhwbGljaXRseSwgYXMgb25lIG9mIHRoZSBmaWxlcyBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gdG8gYXNzZW1ibGUuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1jb21tYW5kLWxpbmUtMjgiPjwvYT5FeGNlcHQgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS08L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW55IGNvbW1hbmQgbGluZSBhcmd1bWVudCB0aGF0IGJlZ2lucyB3aXRoIGEKK2h5cGhlbiAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tPC9zcGFuPjwvc2FtcD4mcnNxdW87KSBpcyBhbiBvcHRpb24uICBFYWNoIG9wdGlvbiBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZgorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uICBObyBvcHRpb24gY2hhbmdlcyB0aGUgd2F5IGFub3RoZXIgb3B0aW9uIHdvcmtzLiAgQW4KK29wdGlvbiBpcyBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBsZXR0ZXJzOyB0aGUgY2FzZSBvZgordGhlIGxldHRlciBpcyBpbXBvcnRhbnQuICAgQWxsIG9wdGlvbnMgYXJlIG9wdGlvbmFsLgorCisgICA8cD5Tb21lIG9wdGlvbnMgZXhwZWN0IGV4YWN0bHkgb25lIGZpbGUgbmFtZSB0byBmb2xsb3cgdGhlbS4gIFRoZSBmaWxlCituYW1lIG1heSBlaXRoZXIgaW1tZWRpYXRlbHkgZm9sbG93IHRoZSBvcHRpb24ncyBsZXR0ZXIgKGNvbXBhdGlibGUKK3dpdGggb2xkZXIgYXNzZW1ibGVycykgb3IgaXQgbWF5IGJlIHRoZSBuZXh0IGNvbW1hbmQgYXJndW1lbnQgKDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPgorc3RhbmRhcmQpLiAgVGhlc2UgdHdvIGNvbW1hbmQgbGluZXMgYXJlIGVxdWl2YWxlbnQ6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhcyAtbyBteS1vYmplY3QtZmlsZS5vIG11bWJsZS5zCisgICAgIGFzIC1vbXktb2JqZWN0LWZpbGUubyBtdW1ibGUucworPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Db21tZW50cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ29tbWVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjgxYzIyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ29tbWVudHMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db21tZW50cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3ludGF4Lmh0bWwjU3ludGF4IiB0aXRsZT0iU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iV2hpdGVzcGFjZS5odG1sI1doaXRlc3BhY2UiIHRpdGxlPSJXaGl0ZXNwYWNlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltYm9sLUludHJvLmh0bWwjU3ltYm9sLUludHJvIiB0aXRsZT0iU3ltYm9sIEludHJvIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29tbWVudHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3ltYm9sLUludHJvLmh0bWwjU3ltYm9sLUludHJvIj5TeW1ib2wgSW50cm88L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJXaGl0ZXNwYWNlLmh0bWwjV2hpdGVzcGFjZSI+V2hpdGVzcGFjZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN5bnRheC5odG1sI1N5bnRheCI+U3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4zIENvbW1lbnRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY29tbWVudHMtMTIzIj48L2E+VGhlcmUgYXJlIHR3byB3YXlzIG9mIHJlbmRlcmluZyBjb21tZW50cyB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4gIEluIGJvdGgKK2Nhc2VzIHRoZSBjb21tZW50IGlzIGVxdWl2YWxlbnQgdG8gb25lIHNwYWNlLgorCisgICA8cD5Bbnl0aGluZyBmcm9tICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lyo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCB0aGUgbmV4dCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiovPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGEgY29tbWVudC4gCitUaGlzIG1lYW5zIHlvdSBtYXkgbm90IG5lc3QgdGhlc2UgY29tbWVudHMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAvKgorICAgICAgIFRoZSBvbmx5IHdheSB0byBpbmNsdWRlIGEgbmV3bGluZSAoJ1xuJykgaW4gYSBjb21tZW50CisgICAgICAgaXMgdG8gdXNlIHRoaXMgc29ydCBvZiBjb21tZW50LgorICAgICAqLworICAgICAKKyAgICAgLyogVGhpcyBzb3J0IG9mIGNvbW1lbnQgZG9lcyBub3QgbmVzdC4gKi8KKzwvcHJlPgorICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xMjQiPjwvYT5Bbnl0aGluZyBmcm9tIGEgPGRmbj5saW5lIGNvbW1lbnQ8L2Rmbj4gY2hhcmFjdGVyIHVwIHRvIHRoZSBuZXh0IG5ld2xpbmUgaXMKK2NvbnNpZGVyZWQgYSBjb21tZW50IGFuZCBpcyBpZ25vcmVkLiAgVGhlIGxpbmUgY29tbWVudCBjaGFyYWN0ZXIgaXMgdGFyZ2V0CitzcGVjaWZpYywgYW5kIHNvbWUgdGFyZ2V0cyBtdWx0aXBsZSBjb21tZW50IGNoYXJhY3RlcnMuICBTb21lIHRhcmdldHMgYWxzbyBoYXZlCitsaW5lIGNvbW1lbnQgY2hhcmFjdGVycyB0aGF0IG9ubHkgd29yayBpZiB0aGV5IGFyZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIGEKK2xpbmUuICBTb21lIHRhcmdldHMgdXNlIGEgc2VxdWVuY2Ugb2YgdHdvIGNoYXJhY3RlcnMgdG8gaW50cm9kdWNlIGEgbGluZQorY29tbWVudC4gIFNvbWUgdGFyZ2V0cyBjYW4gYWxzbyBjaGFuZ2UgdGhlaXIgbGluZSBjb21tZW50IGNoYXJhY3RlcnMgZGVwZW5kaW5nCit1cG9uIGNvbW1hbmQgbGluZSBvcHRpb25zIHRoYXQgaGF2ZSBiZWVuIHVzZWQuICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUKKzxlbT5TeW50YXg8L2VtPiBzZWN0aW9uIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBpbmRpdmlkdWFsIHRhcmdldHMuCisKKyAgIDxwPklmIHRoZSBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyIGlzIHRoZSBoYXNoIHNpZ24gKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOykgdGhlbiBpdCBzdGlsbCBoYXMgdGhlCitzcGVjaWFsIGFiaWxpdHkgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHByZXByb2Nlc3NpbmcgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pIGFuZAordG8gc3BlY2lmeSBsb2dpY2FsIGxpbmUgbnVtYmVyczoKKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjMtMTI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGluZXMtc3RhcnRpbmctd2l0aC1fMDA0MGNvZGVfMDA3Yl8wMDIzXzAwN2QtMTI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9naWNhbC1saW5lLW51bWJlcnMtMTI3Ij48L2E+VG8gYmUgY29tcGF0aWJsZSB3aXRoIHBhc3QgYXNzZW1ibGVycywgbGluZXMgdGhhdCBiZWdpbiB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXZlIGEKK3NwZWNpYWwgaW50ZXJwcmV0YXRpb24uICBGb2xsb3dpbmcgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzaG91bGQgYmUgYW4gYWJzb2x1dGUKK2V4cHJlc3Npb24gKHNlZSA8YSBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIj5FeHByZXNzaW9uczwvYT4pOiB0aGUgbG9naWNhbCBsaW5lIG51bWJlciBvZiB0aGUgPGVtPm5leHQ8L2VtPgorbGluZS4gIFRoZW4gYSBzdHJpbmcgKHNlZSA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4pIGlzIGFsbG93ZWQ6IGlmIHByZXNlbnQgaXQgaXMgYQorbmV3IGxvZ2ljYWwgZmlsZSBuYW1lLiAgVGhlIHJlc3Qgb2YgdGhlIGxpbmUsIGlmIGFueSwgc2hvdWxkIGJlIHdoaXRlc3BhY2UuCisKKyAgIDxwPklmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIG9uIHRoZSBsaW5lIGFyZSBub3QgbnVtZXJpYywKK3RoZSBsaW5lIGlzIGlnbm9yZWQuICAoSnVzdCBsaWtlIGEgY29tbWVudC4pCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhbiBvcmRpbmFyeSBjb21tZW50LgorICAgICAjIDQyLTYgIm5ld19maWxlX25hbWUiICAgICMgTmV3IGxvZ2ljYWwgZmlsZSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGxvZ2ljYWwgbGluZSAjIDM2LgorPC9wcmU+CisgICA8cD5UaGlzIGZlYXR1cmUgaXMgZGVwcmVjYXRlZCwgYW5kIG1heSBkaXNhcHBlYXIgZnJvbSBmdXR1cmUgdmVyc2lvbnMKK29mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Db21wYXJlXzAwMmRhbmRfMDAyZGJyYW5jaF8wMDJkaTk2MC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDg1OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAuaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db21wYXJlLWFuZC1icmFuY2gtaTk2MCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3Bjb2Rlcy1mb3ItaTk2MC5odG1sI09wY29kZXMtZm9yLWk5NjAiIHRpdGxlPSJPcGNvZGVzIGZvciBpOTYwIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2FsbGpfMDAyZGk5NjAuaHRtbCNjYWxsal8wMDJkaTk2MCIgdGl0bGU9ImNhbGxqLWk5NjAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb21wYXJlLWFuZC1icmFuY2gtaTk2MCI+PC9hPgorPGEgbmFtZT0iQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjYWxsal8wMDJkaTk2MC5odG1sI2NhbGxqXzAwMmRpOTYwIj5jYWxsai1pOTYwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT3Bjb2Rlcy1mb3ItaTk2MC5odG1sI09wY29kZXMtZm9yLWk5NjAiPk9wY29kZXMgZm9yIGk5NjA8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjE3LjQuMiBDb21wYXJlLWFuZC1CcmFuY2g8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1pOTYwLWNvbXBhcmVfMDAyZmJyYW5jaC1pbnN0cnVjdGlvbnMtMTEwNiI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbXBhcmVfMDAyZmJyYW5jaC1pbnN0cnVjdGlvbnNfMDAyYy1pOTYwLTExMDciPjwvYT5UaGUgOTYwIGFyY2hpdGVjdHVyZXMgcHJvdmlkZSBjb21iaW5lZCBDb21wYXJlLWFuZC1CcmFuY2ggaW5zdHJ1Y3Rpb25zCit0aGF0IHBlcm1pdCB5b3UgdG8gc3RvcmUgdGhlIGJyYW5jaCB0YXJnZXQgaW4gdGhlIGxvd2VyIDEzIGJpdHMgb2YgdGhlCitpbnN0cnVjdGlvbiB3b3JkIGl0c2VsZi4gIEhvd2V2ZXIsIGlmIHlvdSBzcGVjaWZ5IGEgYnJhbmNoIHRhcmdldCBmYXIKK2Vub3VnaCBhd2F5IHRoYXQgaXRzIGFkZHJlc3Mgd29uJ3QgZml0IGluIDEzIGJpdHMsIHRoZSBhc3NlbWJsZXIgY2FuCitlaXRoZXIgaXNzdWUgYW4gZXJyb3IsIG9yIGNvbnZlcnQgeW91ciBDb21wYXJlLWFuZC1CcmFuY2ggaW5zdHJ1Y3Rpb24KK2ludG8gc2VwYXJhdGUgaW5zdHJ1Y3Rpb25zIHRvIGRvIHRoZSBjb21wYXJlIGFuZCB0aGUgYnJhbmNoLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1jb21wYXJlLWFuZC1qdW1wLWV4cGFuc2lvbnNfMDAyYy1pOTYwLTExMDgiPjwvYT48YSBuYW1lPSJpbmRleC1pOTYwLWNvbXBhcmUtYW5kLWp1bXAtZXhwYW5zaW9ucy0xMTA5Ij48L2E+V2hldGhlciA8Y29kZT5hczwvY29kZT4gZ2l2ZXMgYW4gZXJyb3Igb3IgZXhwYW5kcyB0aGUgaW5zdHJ1Y3Rpb24gZGVwZW5kcworb24gdHdvIGNob2ljZXMgeW91IGNhbiBtYWtlOiB3aGV0aGVyIHlvdSB1c2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW5vLXJlbGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwKK2FuZCB3aGV0aGVyIHlvdSB1c2UgYSAmbGRxdW87Q29tcGFyZSBhbmQgQnJhbmNoJnJkcXVvOyBpbnN0cnVjdGlvbiBvciBhICZsZHF1bztDb21wYXJlCithbmQgSnVtcCZyZHF1bzsgaW5zdHJ1Y3Rpb24uICBUaGUgJmxkcXVvO0p1bXAmcmRxdW87IGluc3RydWN0aW9ucyBhcmUgPGVtPmFsd2F5czwvZW0+CitleHBhbmRlZCBpZiBuZWNlc3Nhcnk7IHRoZSAmbGRxdW87QnJhbmNoJnJkcXVvOyBpbnN0cnVjdGlvbnMgYXJlIGV4cGFuZGVkIHdoZW4KK25lY2Vzc2FyeSA8ZW0+dW5sZXNzPC9lbT4geW91IHNwZWNpZnkgPGNvZGU+LW5vLXJlbGF4PC9jb2RlPiZtZGFzaDtpbiB3aGljaCBjYXNlCis8Y29kZT5hczwvY29kZT4gZ2l2ZXMgYW4gZXJyb3IgaW5zdGVhZC4KKworICAgPHA+VGhlc2UgYXJlIHRoZSBDb21wYXJlLWFuZC1CcmFuY2ggaW5zdHJ1Y3Rpb25zLCB0aGVpciAmbGRxdW87SnVtcCZyZHF1bzsgdmFyaWFudHMsCithbmQgdGhlIGluc3RydWN0aW9uIHBhaXJzIHRoZXkgbWF5IGV4cGFuZCBpbnRvOgorCis8IS0tIFRFWEkyUk9GRi1LSUxMIC0tPgorPCEtLSBFTkQgVEVYSTJST0ZGLUtJTEwgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Db25zdGFudHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0NvbnN0YW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTA1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Db25zdGFudHMuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db25zdGFudHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN5bnRheC5odG1sI1N5bnRheCIgdGl0bGU9IlN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNTdGF0ZW1lbnRzIiB0aXRsZT0iU3RhdGVtZW50cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvbnN0YW50cyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNTdGF0ZW1lbnRzIj5TdGF0ZW1lbnRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3ludGF4Lmh0bWwjU3ludGF4Ij5TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjYgQ29uc3RhbnRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY29uc3RhbnRzLTEzOSI+PC9hPkEgY29uc3RhbnQgaXMgYSBudW1iZXIsIHdyaXR0ZW4gc28gdGhhdCBpdHMgdmFsdWUgaXMga25vd24gYnkKK2luc3BlY3Rpb24sIHdpdGhvdXQga25vd2luZyBhbnkgY29udGV4dC4gIExpa2UgdGhpczoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAuYnl0ZSAgNzQsIDAxMTIsIDA5MiwgMHg0QSwgMFg0YSwgJ0osICdcSiAjIEFsbCB0aGUgc2FtZSB2YWx1ZS4KKyAgICAgLmFzY2lpICJSaW5nIHRoZSBiZWxsXDciICAgICAgICAgICAgICAgICAgIyBBIHN0cmluZyBjb25zdGFudC4KKyAgICAgLm9jdGEgIDB4MTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RFRjAgIyBBIGJpZ251bS4KKyAgICAgLmZsb2F0IDBmLTMxNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyN1wKKyAgICAgOTUwMjg4NDE5NzEuNjkzOTkzNzUxRS00MCAgICAgICAgICAgICAgICAgIyAtIHBpLCBhIGZsb251bS4KKzwvcHJlPgorICAgPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkNoYXJhY3RlcnMuaHRtbCNDaGFyYWN0ZXJzIj5DaGFyYWN0ZXJzPC9hPjogICAgICAgICAgICAgICAgICAgQ2hhcmFjdGVyIENvbnN0YW50cworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iTnVtYmVycy5odG1sI051bWJlcnMiPk51bWJlcnM8L2E+OiAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgQ29uc3RhbnRzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9ELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiM2RkYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QuaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIiB0aXRsZT0iSW52b2tpbmciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhbHRlcm5hdGUuaHRtbCNhbHRlcm5hdGUiIHRpdGxlPSJhbHRlcm5hdGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmLmh0bWwjZiIgdGl0bGU9ImYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImYuaHRtbCNmIj5mPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iYWx0ZXJuYXRlLmh0bWwjYWx0ZXJuYXRlIj5hbHRlcm5hdGU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRELTU4Ij48L2E+VGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCB3aGF0c29ldmVyLCBidXQgaXQgaXMgYWNjZXB0ZWQgdG8gbWFrZSBpdCBtb3JlCitsaWtlbHkgdGhhdCBzY3JpcHRzIHdyaXR0ZW4gZm9yIG90aGVyIGFzc2VtYmxlcnMgYWxzbyB3b3JrIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRBZGRyZXNzaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRBZGRyZXNzaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5NDNlOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QxMFZfMDAyZEFkZHJlc3NpbmcuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMTBWLUFkZHJlc3NpbmcgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkQxMFZfMDAyZFN5bnRheC5odG1sI0QxMFZfMDAyZFN5bnRheCIgdGl0bGU9IkQxMFYtU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRDEwVl8wMDJkUmVncy5odG1sI0QxMFZfMDAyZFJlZ3MiIHRpdGxlPSJEMTBWLVJlZ3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEMTBWXzAwMmRXb3JkLmh0bWwjRDEwVl8wMDJkV29yZCIgdGl0bGU9IkQxMFYtV29yZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkQxMFYtQWRkcmVzc2luZyI+PC9hPgorPGEgbmFtZT0iRDEwVl8wMDJkQWRkcmVzc2luZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMTBWXzAwMmRXb3JkLmh0bWwjRDEwVl8wMDJkV29yZCI+RDEwVi1Xb3JkPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRDEwVl8wMDJkUmVncy5odG1sI0QxMFZfMDAyZFJlZ3MiPkQxMFYtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkQxMFZfMDAyZFN5bnRheC5odG1sI0QxMFZfMDAyZFN5bnRheCI+RDEwVi1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjkuMi41IEFkZHJlc3NpbmcgTW9kZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1hZGRyZXNzaW5nLW1vZGVzXzAwMmMtRDEwVi04MTUiPjwvYT48YSBuYW1lPSJpbmRleC1EMTBWLWFkZHJlc3NpbmctbW9kZXMtODE2Ij48L2E+PGNvZGU+YXM8L2NvZGU+IHVuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgYWRkcmVzc2luZyBtb2RlcyBmb3IgdGhlIEQxMFYuIAorPGNvZGU+UjwvY29kZT48dmFyPm48L3Zhcj4gaW4gdGhlIGZvbGxvd2luZyByZWZlcnMgdG8gYW55IG9mIHRoZSBudW1iZXJlZAorcmVnaXN0ZXJzLCBidXQgPGVtPm5vdDwvZW0+IHRoZSBjb250cm9sIHJlZ2lzdGVycy4KKyAgICAgPGRsPgorPGR0Pjxjb2RlPlI8L2NvZGU+PHZhcj5uPC92YXI+PGRkPlJlZ2lzdGVyIGRpcmVjdAorPGJyPjxkdD48Y29kZT5AUjwvY29kZT48dmFyPm48L3Zhcj48ZGQ+UmVnaXN0ZXIgaW5kaXJlY3QKKzxicj48ZHQ+PGNvZGU+QFI8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+KzwvY29kZT48ZGQ+UmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBwb3N0LWluY3JlbWVudAorPGJyPjxkdD48Y29kZT5AUjwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4tPC9jb2RlPjxkZD5SZWdpc3RlciBpbmRpcmVjdCB3aXRoIHBvc3QtZGVjcmVtZW50Cis8YnI+PGR0Pjxjb2RlPkAtU1A8L2NvZGU+PGRkPlJlZ2lzdGVyIGluZGlyZWN0IHdpdGggcHJlLWRlY3JlbWVudAorPGJyPjxkdD48Y29kZT5AKDwvY29kZT48dmFyPmRpc3A8L3Zhcj48Y29kZT4sIFI8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBkaXNwbGFjZW1lbnQKKzxicj48ZHQ+PHZhcj5hZGRyPC92YXI+PGRkPlBDIHJlbGF0aXZlIGFkZHJlc3MgKGZvciBicmFuY2ggb3IgcmVwKS4gCis8YnI+PGR0Pjxjb2RlPiM8L2NvZGU+PHZhcj5pbW08L3Zhcj48ZGQ+SW1tZWRpYXRlIGRhdGEgKHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgb3B0aW9uYWwgYW5kIGlnbm9yZWQpCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTc2ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMTBWLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMTBWXzAwMmRTeW50YXguaHRtbCNEMTBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMTBWLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkQxMFZfMDAyZFN1YnMuaHRtbCNEMTBWXzAwMmRTdWJzIiB0aXRsZT0iRDEwVi1TdWJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRDEwVl8wMDJkUmVncy5odG1sI0QxMFZfMDAyZFJlZ3MiIHRpdGxlPSJEMTBWLVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMTBWLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJEMTBWXzAwMmRDaGFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMTBWXzAwMmRSZWdzLmh0bWwjRDEwVl8wMDJkUmVncyI+RDEwVi1SZWdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRDEwVl8wMDJkU3Vicy5odG1sI0QxMFZfMDAyZFN1YnMiPkQxMFYtU3ViczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkQxMFZfMDAyZFN5bnRheC5odG1sI0QxMFZfMDAyZFN5bnRheCI+RDEwVi1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjkuMi4zIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1EMTBWLTgwNyI+PC9hPjxhIG5hbWU9ImluZGV4LUQxMFYtbGluZS1jb21tZW50LWNoYXJhY3Rlci04MDgiPjwvYT5BIHNlbWljb2xvbiAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj47PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBjYW4gYmUgdXNlZCBhbnl3aGVyZSBvbiBhIGxpbmUgdG8gc3RhcnQgYQorY29tbWVudCB0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSwgdGhlIHdob2xlIGxpbmUKK2lzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNvdWxkIGFsc28gYmUgYQorbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEgcHJlcHJvY2Vzc29yCitjb250cm9sIGNvbW1hbmQgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zdWJfMDAyZGluc3RydWN0aW9uLW9yZGVyaW5nXzAwMmMtRDEwVi04MDkiPjwvYT48YSBuYW1lPSJpbmRleC1EMTBWLXN1Yl8wMDJkaW5zdHJ1Y3Rpb24tb3JkZXJpbmctODEwIj48L2E+U3ViLWluc3RydWN0aW9ucyBtYXkgYmUgZXhlY3V0ZWQgaW4gb3JkZXIsIGluIHJldmVyc2Utb3JkZXIsIG9yIGluIHBhcmFsbGVsLiAKK0luc3RydWN0aW9ucyBsaXN0ZWQgaW4gdGhlIHN0YW5kYXJkIG9uZS1wZXItbGluZSBmb3JtYXQgd2lsbCBiZSBleGVjdXRlZCBzZXF1ZW50aWFsbHkuIAorVG8gc3BlY2lmeSB0aGUgZXhlY3V0aW5nIG9yZGVyLCB1c2UgdGhlIGZvbGxvd2luZyBzeW1ib2xzOgorICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tJmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TZXF1ZW50aWFsIHdpdGggaW5zdHJ1Y3Rpb24gb24gdGhlIGxlZnQgZmlyc3QuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDstPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlNlcXVlbnRpYWwgd2l0aCBpbnN0cnVjdGlvbiBvbiB0aGUgcmlnaHQgZmlyc3QuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnx8PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlBhcmFsbGVsCis8L2RsPgorICAgVGhlIEQxMFYgc3ludGF4IGFsbG93cyBlaXRoZXIgb25lIGluc3RydWN0aW9uIHBlciBsaW5lLCBvbmUgaW5zdHJ1Y3Rpb24gcGVyIGxpbmUgd2l0aAordGhlIGV4ZWN1dGlvbiBzeW1ib2wsIG9yIHR3byBpbnN0cnVjdGlvbnMgcGVyIGxpbmUuICBGb3IgZXhhbXBsZQorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YWJzICAgICAgIGExICAgICAgLSZndDsgICAgICBhYnMgICAgIHIwPC9jb2RlPjxkZD5FeGVjdXRlIHRoZXNlIHNlcXVlbnRpYWxseS4gIFRoZSBpbnN0cnVjdGlvbiBvbiB0aGUgcmlnaHQgaXMgaW4gdGhlIHJpZ2h0Citjb250YWluZXIgYW5kIGlzIGV4ZWN1dGVkIHNlY29uZC4gCis8YnI+PGR0Pjxjb2RlPmFicyAgICAgICByMCAgICAgICZsdDstICAgICAgYWJzICAgICBhMTwvY29kZT48ZGQ+RXhlY3V0ZSB0aGVzZSByZXZlcnNlLXNlcXVlbnRpYWxseS4gIFRoZSBpbnN0cnVjdGlvbiBvbiB0aGUgcmlnaHQgaXMgaW4gdGhlIHJpZ2h0Citjb250YWluZXIsIGFuZCBpcyBleGVjdXRlZCBmaXJzdC4gCis8YnI+PGR0Pjxjb2RlPmxkMncgICAgcjIsQHI4KyAgICAgICAgIHx8ICAgICAgbWFjICAgICBhMCxyMCxyNzwvY29kZT48ZGQ+RXhlY3V0ZSB0aGVzZSBpbiBwYXJhbGxlbC4gCis8YnI+PGR0Pjxjb2RlPmxkMncgICAgcjIsQHI4KyAgICAgICAgIHx8PC9jb2RlPjxkdD48Y29kZT5tYWMgICAgIGEwLHIwLHI3PC9jb2RlPjxkZD5Ud28tbGluZSBmb3JtYXQuIEV4ZWN1dGUgdGhlc2UgaW4gcGFyYWxsZWwuIAorPGJyPjxkdD48Y29kZT5sZDJ3ICAgIHIyLEByOCs8L2NvZGU+PGR0Pjxjb2RlPm1hYyAgICAgYTAscjAscjc8L2NvZGU+PGRkPlR3by1saW5lIGZvcm1hdC4gRXhlY3V0ZSB0aGVzZSBzZXF1ZW50aWFsbHkuICBBc3NlbWJsZXIgd2lsbAorcHV0IHRoZW0gaW4gdGhlIHByb3BlciBjb250YWluZXJzLiAKKzxicj48ZHQ+PGNvZGU+bGQydyAgICByMixAcjgrICAgICAgICAgLSZndDs8L2NvZGU+PGR0Pjxjb2RlPm1hYyAgICAgYTAscjAscjc8L2NvZGU+PGRkPlR3by1saW5lIGZvcm1hdC4gRXhlY3V0ZSB0aGVzZSBzZXF1ZW50aWFsbHkuICBTYW1lIGFzIGFib3ZlIGJ1dAorc2Vjb25kIGluc3RydWN0aW9uIHdpbGwgYWx3YXlzIGdvIGludG8gcmlnaHQgY29udGFpbmVyLiAKKzwvZGw+CisgICA8YSBuYW1lPSJpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy1fMDA0MHNhbXBfMDA3Yl8wMDI0XzAwN2QtaW4tODExIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNF8wMDdkLWluLXN5bWJvbC1uYW1lcy04MTIiPjwvYT5TaW5jZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaGFzIG5vIHNwZWNpYWwgbWVhbmluZywgeW91IG1heSB1c2UgaXQgaW4gc3ltYm9sIG5hbWVzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QxMFZfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3N2RiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMTBWLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ1JJU18wMDJkRGVwZW5kZW50Lmh0bWwjQ1JJU18wMDJkRGVwZW5kZW50IiB0aXRsZT0iQ1JJUy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEMzBWXzAwMmREZXBlbmRlbnQuaHRtbCNEMzBWXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJEMzBWLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkQxMFYtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJEMTBWXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRDMwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDMwVl8wMDJkRGVwZW5kZW50Ij5EMzBWLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI0NSSVNfMDAyZERlcGVuZGVudCI+Q1JJUy1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuOSBEMTBWIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUQxMFYtc3VwcG9ydC03OTgiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkQxMFZfMDAyZE9wdHMuaHRtbCNEMTBWXzAwMmRPcHRzIj5EMTBWLU9wdHM8L2E+OiAgICAgICAgICAgICAgICAgICAgRDEwViBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJEMTBWXzAwMmRTeW50YXguaHRtbCNEMTBWXzAwMmRTeW50YXgiPkQxMFYtU3ludGF4PC9hPjogICAgICAgICAgICAgICAgICBTeW50YXgKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkQxMFZfMDAyZEZsb2F0Lmh0bWwjRDEwVl8wMDJkRmxvYXQiPkQxMFYtRmxvYXQ8L2E+OiAgICAgICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iRDEwVl8wMDJkT3Bjb2Rlcy5odG1sI0QxMFZfMDAyZE9wY29kZXMiPkQxMFYtT3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgICBPcGNvZGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRGbG9hdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkRmxvYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTZkMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkRmxvYXQuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMTBWLUZsb2F0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMTBWXzAwMmREZXBlbmRlbnQuaHRtbCNEMTBWXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJEMTBWLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkQxMFZfMDAyZFN5bnRheC5odG1sI0QxMFZfMDAyZFN5bnRheCIgdGl0bGU9IkQxMFYtU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRDEwVl8wMDJkT3Bjb2Rlcy5odG1sI0QxMFZfMDAyZE9wY29kZXMiIHRpdGxlPSJEMTBWLU9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMTBWLUZsb2F0Ij48L2E+Cis8YSBuYW1lPSJEMTBWXzAwMmRGbG9hdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMTBWXzAwMmRPcGNvZGVzLmh0bWwjRDEwVl8wMDJkT3Bjb2RlcyI+RDEwVi1PcGNvZGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRDEwVl8wMDJkU3ludGF4Lmh0bWwjRDEwVl8wMDJkU3ludGF4Ij5EMTBWLVN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCI+RDEwVi1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjkuMyBGbG9hdGluZyBQb2ludDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtRDEwVi04MTkiPjwvYT48YSBuYW1lPSJpbmRleC1EMTBWLWZsb2F0aW5nLXBvaW50LTgyMCI+PC9hPlRoZSBEMTBWIGhhcyBubyBoYXJkd2FyZSBmbG9hdGluZyBwb2ludCwgYnV0IHRoZSA8Y29kZT4uZmxvYXQ8L2NvZGU+IGFuZCA8Y29kZT4uZG91YmxlPC9jb2RlPgorZGlyZWN0aXZlcyBnZW5lcmF0ZXMgPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPiBmbG9hdGluZy1wb2ludCBudW1iZXJzIGZvciBjb21wYXRpYmlsaXR5Cit3aXRoIG90aGVyIGRldmVsb3BtZW50IHRvb2xzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRPcGNvZGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRPcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkNTg3MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QxMFZfMDAyZE9wY29kZXMuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMTBWLU9wY29kZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCIgdGl0bGU9IkQxMFYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRDEwVl8wMDJkRmxvYXQuaHRtbCNEMTBWXzAwMmRGbG9hdCIgdGl0bGU9IkQxMFYtRmxvYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMTBWLU9wY29kZXMiPjwvYT4KKzxhIG5hbWU9IkQxMFZfMDAyZE9wY29kZXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEMTBWXzAwMmRGbG9hdC5odG1sI0QxMFZfMDAyZEZsb2F0Ij5EMTBWLUZsb2F0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRDEwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDEwVl8wMDJkRGVwZW5kZW50Ij5EMTBWLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuOS40IE9wY29kZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1EMTBWLW9wY29kZS1zdW1tYXJ5LTgyMSI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZS1zdW1tYXJ5XzAwMmMtRDEwVi04MjIiPjwvYT48YSBuYW1lPSJpbmRleC1tbmVtb25pY3NfMDAyYy1EMTBWLTgyMyI+PC9hPjxhIG5hbWU9ImluZGV4LWluc3RydWN0aW9uLXN1bW1hcnlfMDAyYy1EMTBWLTgyNCI+PC9hPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgRDEwViBtYWNoaW5lIGluc3RydWN0aW9uIHNldCwgc2VlCis8Y2l0ZT5EMTBWIEFyY2hpdGVjdHVyZTogQSBWTElXIE1pY3JvcHJvY2Vzc29yIGZvciBNdWx0aW1lZGlhIEFwcGxpY2F0aW9uczwvY2l0ZT4KKyhNaXRzdWJpc2hpIEVsZWN0cmljIENvcnAuKS4gCis8Y29kZT5hczwvY29kZT4gaW1wbGVtZW50cyBhbGwgdGhlIHN0YW5kYXJkIEQxMFYgb3Bjb2Rlcy4gIFRoZSBvbmx5IGNoYW5nZXMgYXJlIHRob3NlCitkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gb24gc2l6ZSBtb2RpZmllcnMKKworPCEtLSBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1MmI3MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QxMFZfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDY5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMTBWLU9wdHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCIgdGl0bGU9IkQxMFYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRDEwVl8wMDJkU3ludGF4Lmh0bWwjRDEwVl8wMDJkU3ludGF4IiB0aXRsZT0iRDEwVi1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMTBWLU9wdHMiPjwvYT4KKzxhIG5hbWU9IkQxMFZfMDAyZE9wdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRDEwVl8wMDJkU3ludGF4Lmh0bWwjRDEwVl8wMDJkU3ludGF4Ij5EMTBWLVN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCI+RDEwVi1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjkuMSBEMTBWIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtRDEwVi03OTkiPjwvYT48YSBuYW1lPSJpbmRleC1EMTBWLW9wdGlvbnMtODAwIj48L2E+VGhlIE1pdHN1YmlzaGkgRDEwViB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBoYXMgYSBmZXcgbWFjaGluZQorZGVwZW5kZW50IG9wdGlvbnMuCisKKyAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LU88L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VGhlIEQxMFYgY2FuIG9mdGVuIGV4ZWN1dGUgdHdvIHN1Yi1pbnN0cnVjdGlvbnMgaW4gcGFyYWxsZWwuIFdoZW4gdGhpcyBvcHRpb24KK2lzIHVzZWQsIDxjb2RlPmFzPC9jb2RlPiB3aWxsIGF0dGVtcHQgdG8gb3B0aW1pemUgaXRzIG91dHB1dCBieSBkZXRlY3Rpbmcgd2hlbgoraW5zdHJ1Y3Rpb25zIGNhbiBiZSBleGVjdXRlZCBpbiBwYXJhbGxlbC4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1ub3dhcm5zd2FwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRvIG9wdGltaXplIGV4ZWN1dGlvbiBwZXJmb3JtYW5jZSwgPGNvZGU+YXM8L2NvZGU+IHdpbGwgc29tZXRpbWVzIHN3YXAgdGhlCitvcmRlciBvZiBpbnN0cnVjdGlvbnMuIE5vcm1hbGx5IHRoaXMgZ2VuZXJhdGVzIGEgd2FybmluZy4gV2hlbiB0aGlzIG9wdGlvbgoraXMgdXNlZCwgbm8gd2FybmluZyB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIGluc3RydWN0aW9ucyBhcmUgc3dhcHBlZC4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1nc3RhYnMtcGFja2luZzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tZ3N0YWJzLXBhY2tpbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGNvZGU+YXM8L2NvZGU+IHBhY2tzIGFkamFjZW50IHNob3J0IGluc3RydWN0aW9ucyBpbnRvIGEgc2luZ2xlIHBhY2tlZAoraW5zdHJ1Y3Rpb24uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby1nc3RhYnMtcGFja2luZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0dXJucyBpbnN0cnVjdGlvbiBwYWNraW5nIG9mZiBpZgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWdzdGFiczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBzcGVjaWZpZWQgYXMgd2VsbDsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWdzdGFicy1wYWNraW5nPC9zcGFuPjwvc2FtcD4mcnNxdW87ICh0aGUKK2RlZmF1bHQpIHR1cm5zIGluc3RydWN0aW9uIHBhY2tpbmcgb24gZXZlbiB3aGVuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1nc3RhYnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMKK3NwZWNpZmllZC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRSZWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRSZWdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjOTY5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QxMFZfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMTBWLVJlZ3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkQxMFZfMDAyZFN5bnRheC5odG1sI0QxMFZfMDAyZFN5bnRheCIgdGl0bGU9IkQxMFYtU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyIgdGl0bGU9IkQxMFYtQ2hhcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEMTBWXzAwMmRBZGRyZXNzaW5nLmh0bWwjRDEwVl8wMDJkQWRkcmVzc2luZyIgdGl0bGU9IkQxMFYtQWRkcmVzc2luZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkQxMFYtUmVncyI+PC9hPgorPGEgbmFtZT0iRDEwVl8wMDJkUmVncyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMTBWXzAwMmRBZGRyZXNzaW5nLmh0bWwjRDEwVl8wMDJkQWRkcmVzc2luZyI+RDEwVi1BZGRyZXNzaW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyI+RDEwVi1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkQxMFZfMDAyZFN5bnRheC5odG1sI0QxMFZfMDAyZFN5bnRheCI+RDEwVi1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjkuMi40IFJlZ2lzdGVyIE5hbWVzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtRDEwVi1yZWdpc3RlcnMtODEzIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXJzXzAwMmMtRDEwVi04MTQiPjwvYT5Zb3UgY2FuIHVzZSB0aGUgcHJlZGVmaW5lZCBzeW1ib2xzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIxNTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byByZWZlciB0byB0aGUgRDEwVgorcmVnaXN0ZXJzLiAgWW91IGNhbiBhbHNvIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGFuIGFsaWFzIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIxNTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSBhY2N1bXVsYXRvcnMKK2FyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmEwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmExPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlcmUgYXJlIHNwZWNpYWwgcmVnaXN0ZXItcGFpciBuYW1lcyB0aGF0IG1heQorb3B0aW9uYWxseSBiZSB1c2VkIGluIG9wY29kZXMgdGhhdCByZXF1aXJlIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXJzLiBSZWdpc3RlciBuYW1lcyBhcmUKK25vdCBjYXNlIHNlbnNpdGl2ZS4KKworICAgPHA+UmVnaXN0ZXIgUGFpcnMKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnIwLXIxPC9jb2RlPjxicj48ZHQ+PGNvZGU+cjItcjM8L2NvZGU+PGJyPjxkdD48Y29kZT5yNC1yNTwvY29kZT48YnI+PGR0Pjxjb2RlPnI2LXI3PC9jb2RlPjxicj48ZHQ+PGNvZGU+cjgtcjk8L2NvZGU+PGJyPjxkdD48Y29kZT5yMTAtcjExPC9jb2RlPjxicj48ZHQ+PGNvZGU+cjEyLXIxMzwvY29kZT48YnI+PGR0Pjxjb2RlPnIxNC1yMTU8L2NvZGU+PGRkPjwvZGw+CisKKyAgIDxwPlRoZSBEMTBWIGFsc28gaGFzIHByZWRlZmluZWQgc3ltYm9scyBmb3IgdGhlc2UgY29udHJvbCByZWdpc3RlcnMgYW5kIHN0YXR1cyBiaXRzOgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+cHN3PC9jb2RlPjxkZD5Qcm9jZXNzb3IgU3RhdHVzIFdvcmQKKzxicj48ZHQ+PGNvZGU+YnBzdzwvY29kZT48ZGQ+QmFja3VwIFByb2Nlc3NvciBTdGF0dXMgV29yZAorPGJyPjxkdD48Y29kZT5wYzwvY29kZT48ZGQ+UHJvZ3JhbSBDb3VudGVyCis8YnI+PGR0Pjxjb2RlPmJwYzwvY29kZT48ZGQ+QmFja3VwIFByb2dyYW0gQ291bnRlcgorPGJyPjxkdD48Y29kZT5ycHRfYzwvY29kZT48ZGQ+UmVwZWF0IENvdW50Cis8YnI+PGR0Pjxjb2RlPnJwdF9zPC9jb2RlPjxkZD5SZXBlYXQgU3RhcnQgYWRkcmVzcworPGJyPjxkdD48Y29kZT5ycHRfZTwvY29kZT48ZGQ+UmVwZWF0IEVuZCBhZGRyZXNzCis8YnI+PGR0Pjxjb2RlPm1vZF9zPC9jb2RlPjxkZD5Nb2R1bG8gU3RhcnQgYWRkcmVzcworPGJyPjxkdD48Y29kZT5tb2RfZTwvY29kZT48ZGQ+TW9kdWxvIEVuZCBhZGRyZXNzCis8YnI+PGR0Pjxjb2RlPmliYTwvY29kZT48ZGQ+SW5zdHJ1Y3Rpb24gQnJlYWsgQWRkcmVzcworPGJyPjxkdD48Y29kZT5mMDwvY29kZT48ZGQ+RmxhZyAwCis8YnI+PGR0Pjxjb2RlPmYxPC9jb2RlPjxkZD5GbGFnIDEKKzxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+Q2FycnkgZmxhZworPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkU2l6ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkU2l6ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MzUxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRTaXplLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RDEwVi1TaXplIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMTBWXzAwMmRTeW50YXguaHRtbCNEMTBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMTBWLVN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkQxMFZfMDAyZFN1YnMuaHRtbCNEMTBWXzAwMmRTdWJzIiB0aXRsZT0iRDEwVi1TdWJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRDEwVi1TaXplIj48L2E+Cis8YSBuYW1lPSJEMTBWXzAwMmRTaXplIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkQxMFZfMDAyZFN1YnMuaHRtbCNEMTBWXzAwMmRTdWJzIj5EMTBWLVN1YnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEMTBWXzAwMmRTeW50YXguaHRtbCNEMTBWXzAwMmRTeW50YXgiPkQxMFYtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS45LjIuMSBTaXplIE1vZGlmaWVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LUQxMFYtc2l6ZS1tb2RpZmllcnMtODAzIj48L2E+PGEgbmFtZT0iaW5kZXgtc2l6ZS1tb2RpZmllcnNfMDAyYy1EMTBWLTgwNCI+PC9hPlRoZSBEMTBWIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IHVzZXMgdGhlIGluc3RydWN0aW9uIG5hbWVzIGluIHRoZSBEMTBWCitBcmNoaXRlY3R1cmUgTWFudWFsLiAgSG93ZXZlciwgdGhlIG5hbWVzIGluIHRoZSBtYW51YWwgYXJlIHNvbWV0aW1lcyBhbWJpZ3VvdXMuIAorVGhlcmUgYXJlIGluc3RydWN0aW9uIG5hbWVzIHRoYXQgY2FuIGFzc2VtYmxlIHRvIGEgc2hvcnQgb3IgbG9uZyBmb3JtIG9wY29kZS4gCitIb3cgZG9lcyB0aGUgYXNzZW1ibGVyIHBpY2sgdGhlIGNvcnJlY3QgZm9ybT8gIDxjb2RlPmFzPC9jb2RlPiB3aWxsIGFsd2F5cyBwaWNrIHRoZQorc21hbGxlc3QgZm9ybSBpZiBpdCBjYW4uICBXaGVuIGRlYWxpbmcgd2l0aCBhIHN5bWJvbCB0aGF0IGlzIG5vdCBkZWZpbmVkIHlldCB3aGVuIGEKK2xpbmUgaXMgYmVpbmcgYXNzZW1ibGVkLCBpdCB3aWxsIGFsd2F5cyB1c2UgdGhlIGxvbmcgZm9ybS4gIElmIHlvdSBuZWVkIHRvIGZvcmNlIHRoZQorYXNzZW1ibGVyIHRvIHVzZSBlaXRoZXIgdGhlIHNob3J0IG9yIGxvbmcgZm9ybSBvZiB0aGUgaW5zdHJ1Y3Rpb24sIHlvdSBjYW4gYXBwZW5kCitlaXRoZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uczwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoc2hvcnQpIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGxvbmcpIHRvIGl0LiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgd3JpdGluZworYW4gYXNzZW1ibHkgcHJvZ3JhbSBhbmQgeW91IHdhbnQgdG8gZG8gYSBicmFuY2ggdG8gYSBzeW1ib2wgdGhhdCBpcyBkZWZpbmVkIGxhdGVyCitpbiB5b3VyIHByb2dyYW0sIHlvdSBjYW4gd3JpdGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5icmEucyAgIGZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitPYmpkdW1wIGFuZCBHREIgd2lsbCBhbHdheXMgYXBwZW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBpbnN0cnVjdGlvbnMgd2hpY2gKK2hhdmUgYm90aCBzaG9ydCBhbmQgbG9uZyBmb3Jtcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkU3Vicy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkU3Vicy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODlmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRTdWJzLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RDEwVi1TdWJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMTBWXzAwMmRTeW50YXguaHRtbCNEMTBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMTBWLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkQxMFZfMDAyZFNpemUuaHRtbCNEMTBWXzAwMmRTaXplIiB0aXRsZT0iRDEwVi1TaXplIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyIgdGl0bGU9IkQxMFYtQ2hhcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMTBWLVN1YnMiPjwvYT4KKzxhIG5hbWU9IkQxMFZfMDAyZFN1YnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyI+RDEwVi1DaGFyczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQxMFZfMDAyZFNpemUuaHRtbCNEMTBWXzAwMmRTaXplIj5EMTBWLVNpemU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEMTBWXzAwMmRTeW50YXguaHRtbCNEMTBWXzAwMmRTeW50YXgiPkQxMFYtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS45LjIuMiBTdWItSW5zdHJ1Y3Rpb25zPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtRDEwVi1zdWJfMDAyZGluc3RydWN0aW9ucy04MDUiPjwvYT48YSBuYW1lPSJpbmRleC1zdWJfMDAyZGluc3RydWN0aW9uc18wMDJjLUQxMFYtODA2Ij48L2E+VGhlIEQxMFYgYXNzZW1ibGVyIHRha2VzIGFzIGlucHV0IGEgc2VyaWVzIG9mIGluc3RydWN0aW9ucywgZWl0aGVyIG9uZS1wZXItbGluZSwKK29yIGluIHRoZSBzcGVjaWFsIHR3by1wZXItbGluZSBmb3JtYXQgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uICBTb21lIG9mIHRoZXNlCitpbnN0cnVjdGlvbnMgd2lsbCBiZSBzaG9ydC1mb3JtIG9yIHN1Yi1pbnN0cnVjdGlvbnMuICBUaGVzZSBzdWItaW5zdHJ1Y3Rpb25zIGNhbiBiZSBwYWNrZWQKK2ludG8gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uICBUaGUgYXNzZW1ibGVyIHdpbGwgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LiAgSXQgd2lsbCBhbHNvIGRldGVjdAord2hlbiBpdCBzaG91bGQgbm90IHBhY2sgaW5zdHJ1Y3Rpb25zLiAgRm9yIGV4YW1wbGUsIHdoZW4gYSBsYWJlbCBpcyBkZWZpbmVkLCB0aGUgbmV4dAoraW5zdHJ1Y3Rpb24gd2lsbCBuZXZlciBiZSBwYWNrYWdlZCB3aXRoIHRoZSBwcmV2aW91cyBvbmUuICBXaGVuZXZlciBhIGJyYW5jaCBhbmQgbGluaworaW5zdHJ1Y3Rpb24gaXMgY2FsbGVkLCBpdCB3aWxsIG5vdCBiZSBwYWNrYWdlZCB3aXRoIHRoZSBuZXh0IGluc3RydWN0aW9uIHNvIHRoZSByZXR1cm4KK2FkZHJlc3Mgd2lsbCBiZSB2YWxpZC4gIE5vcHMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgd2hlbiBuZWNlc3NhcnkuCisKKyAgIDxwPklmIHlvdSBkbyBub3Qgd2FudCB0aGUgYXNzZW1ibGVyIGF1dG9tYXRpY2FsbHkgbWFraW5nIHRoZXNlIGRlY2lzaW9ucywgeW91IGNhbiBjb250cm9sCit0aGUgcGFja2FnaW5nIGFuZCBleGVjdXRpb24gdHlwZSAocGFyYWxsZWwgb3Igc2VxdWVudGlhbCkgd2l0aCB0aGUgc3BlY2lhbCBleGVjdXRpb24KK3N5bWJvbHMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QxMFZfMDAyZFN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmN2U1YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QxMFZfMDAyZFN5bnRheC5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkQxMFYtU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMTBWXzAwMmREZXBlbmRlbnQuaHRtbCNEMTBWXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJEMTBWLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkQxMFZfMDAyZE9wdHMuaHRtbCNEMTBWXzAwMmRPcHRzIiB0aXRsZT0iRDEwVi1PcHRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRDEwVl8wMDJkRmxvYXQuaHRtbCNEMTBWXzAwMmRGbG9hdCIgdGl0bGU9IkQxMFYtRmxvYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMTBWLVN5bnRheCI+PC9hPgorPGEgbmFtZT0iRDEwVl8wMDJkU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkQxMFZfMDAyZEZsb2F0Lmh0bWwjRDEwVl8wMDJkRmxvYXQiPkQxMFYtRmxvYXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEMTBWXzAwMmRPcHRzLmh0bWwjRDEwVl8wMDJkT3B0cyI+RDEwVi1PcHRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRDEwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDEwVl8wMDJkRGVwZW5kZW50Ij5EMTBWLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuOS4yIFN5bnRheDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUQxMFYtc3ludGF4LTgwMSI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bnRheF8wMDJjLUQxMFYtODAyIj48L2E+CitUaGUgRDEwViBzeW50YXggaXMgYmFzZWQgb24gdGhlIHN5bnRheCBpbiBNaXRzdWJpc2hpJ3MgRDEwViBhcmNoaXRlY3R1cmUgbWFudWFsLiAKK1RoZSBkaWZmZXJlbmNlcyBhcmUgZGV0YWlsZWQgYmVsb3cuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJEMTBWXzAwMmRTaXplLmh0bWwjRDEwVl8wMDJkU2l6ZSI+RDEwVi1TaXplPC9hPjogICAgICAgICAgICAgICAgICBTaXplIE1vZGlmaWVycworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iRDEwVl8wMDJkU3Vicy5odG1sI0QxMFZfMDAyZFN1YnMiPkQxMFYtU3ViczwvYT46ICAgICAgICAgICAgICAgICAgU3ViLUluc3RydWN0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iRDEwVl8wMDJkQ2hhcnMuaHRtbCNEMTBWXzAwMmRDaGFycyI+RDEwVi1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkQxMFZfMDAyZFJlZ3MuaHRtbCNEMTBWXzAwMmRSZWdzIj5EMTBWLVJlZ3M8L2E+OiAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJEMTBWXzAwMmRBZGRyZXNzaW5nLmh0bWwjRDEwVl8wMDJkQWRkcmVzc2luZyI+RDEwVi1BZGRyZXNzaW5nPC9hPjogICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJEMTBWXzAwMmRXb3JkLmh0bWwjRDEwVl8wMDJkV29yZCI+RDEwVi1Xb3JkPC9hPjogICAgICAgICAgICAgICAgICBAV09SRCBNb2RpZmllcgorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkV29yZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDEwVl8wMDJkV29yZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTZkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMTBWXzAwMmRXb3JkLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RDEwVi1Xb3JkIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMTBWXzAwMmRTeW50YXguaHRtbCNEMTBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMTBWLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkQxMFZfMDAyZEFkZHJlc3NpbmcuaHRtbCNEMTBWXzAwMmRBZGRyZXNzaW5nIiB0aXRsZT0iRDEwVi1BZGRyZXNzaW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRDEwVi1Xb3JkIj48L2E+Cis8YSBuYW1lPSJEMTBWXzAwMmRXb3JkIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRDEwVl8wMDJkQWRkcmVzc2luZy5odG1sI0QxMFZfMDAyZEFkZHJlc3NpbmciPkQxMFYtQWRkcmVzc2luZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkQxMFZfMDAyZFN5bnRheC5odG1sI0QxMFZfMDAyZFN5bnRheCI+RDEwVi1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjkuMi42IEBXT1JEIE1vZGlmaWVyPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtRDEwVi1fMDA0MF8wMDQwd29yZC1tb2RpZmllci04MTciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MF8wMDQwd29yZC1tb2RpZmllcl8wMDJjLUQxMFYtODE4Ij48L2E+QW55IHN5bWJvbCBmb2xsb3dlZCBieSA8Y29kZT5Ad29yZDwvY29kZT4gd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgc3ltYm9sJ3MgdmFsdWUKK3NoaWZ0ZWQgcmlnaHQgYnkgMi4gIFRoaXMgaXMgdXNlZCBpbiBzaXR1YXRpb25zIHN1Y2ggYXMgbG9hZGluZyBhIHJlZ2lzdGVyCit3aXRoIHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gKG9yIGFueSBvdGhlciBjb2RlIGZyYWdtZW50KS4gIEZvciBleGFtcGxlLCBpZgoreW91IHdhbnQgdG8gbG9hZCBhIHJlZ2lzdGVyIHdpdGggdGhlIGxvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbiA8Y29kZT5tYWluPC9jb2RlPiB0aGVuCitqdW1wIHRvIHRoYXQgZnVuY3Rpb24sIHlvdSBjb3VsZCBkbyBpdCBhcyBmb2xsb3dzOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGxkaSAgICAgcjIsIG1haW5Ad29yZAorICAgICBqbXAgICAgIHIyCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZEFkZHJlc3NpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZEFkZHJlc3NpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGJlMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkQWRkcmVzc2luZy5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkQzMFYtQWRkcmVzc2luZyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRDMwVl8wMDJkU3ludGF4Lmh0bWwjRDMwVl8wMDJkU3ludGF4IiB0aXRsZT0iRDMwVi1TeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEMzBWXzAwMmRSZWdzLmh0bWwjRDMwVl8wMDJkUmVncyIgdGl0bGU9IkQzMFYtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkQzMFYtQWRkcmVzc2luZyI+PC9hPgorPGEgbmFtZT0iRDMwVl8wMDJkQWRkcmVzc2luZyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQzMFZfMDAyZFJlZ3MuaHRtbCNEMzBWXzAwMmRSZWdzIj5EMzBWLVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiPkQzMFYtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xMC4yLjYgQWRkcmVzc2luZyBNb2RlczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFkZHJlc3NpbmctbW9kZXNfMDAyYy1EMzBWLTg0MyI+PC9hPjxhIG5hbWU9ImluZGV4LUQzMFYtYWRkcmVzc2luZy1tb2Rlcy04NDQiPjwvYT48Y29kZT5hczwvY29kZT4gdW5kZXJzdGFuZHMgdGhlIGZvbGxvd2luZyBhZGRyZXNzaW5nIG1vZGVzIGZvciB0aGUgRDMwVi4gCis8Y29kZT5SPC9jb2RlPjx2YXI+bjwvdmFyPiBpbiB0aGUgZm9sbG93aW5nIHJlZmVycyB0byBhbnkgb2YgdGhlIG51bWJlcmVkCityZWdpc3RlcnMsIGJ1dCA8ZW0+bm90PC9lbT4gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzLgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+UjwvY29kZT48dmFyPm48L3Zhcj48ZGQ+UmVnaXN0ZXIgZGlyZWN0Cis8YnI+PGR0Pjxjb2RlPkBSPC9jb2RlPjx2YXI+bjwvdmFyPjxkZD5SZWdpc3RlciBpbmRpcmVjdAorPGJyPjxkdD48Y29kZT5AUjwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4rPC9jb2RlPjxkZD5SZWdpc3RlciBpbmRpcmVjdCB3aXRoIHBvc3QtaW5jcmVtZW50Cis8YnI+PGR0Pjxjb2RlPkBSPC9jb2RlPjx2YXI+bjwvdmFyPjxjb2RlPi08L2NvZGU+PGRkPlJlZ2lzdGVyIGluZGlyZWN0IHdpdGggcG9zdC1kZWNyZW1lbnQKKzxicj48ZHQ+PGNvZGU+QC1TUDwvY29kZT48ZGQ+UmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBwcmUtZGVjcmVtZW50Cis8YnI+PGR0Pjxjb2RlPkAoPC9jb2RlPjx2YXI+ZGlzcDwvdmFyPjxjb2RlPiwgUjwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZWdpc3RlciBpbmRpcmVjdCB3aXRoIGRpc3BsYWNlbWVudAorPGJyPjxkdD48dmFyPmFkZHI8L3Zhcj48ZGQ+UEMgcmVsYXRpdmUgYWRkcmVzcyAoZm9yIGJyYW5jaCBvciByZXApLiAKKzxicj48ZHQ+PGNvZGU+IzwvY29kZT48dmFyPmltbTwvdmFyPjxkZD5JbW1lZGlhdGUgZGF0YSAodGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBvcHRpb25hbCBhbmQgaWdub3JlZCkKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMzBWXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOTBmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMzBWXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMzBWLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMzBWLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkQzMFZfMDAyZFN1YnMuaHRtbCNEMzBWXzAwMmRTdWJzIiB0aXRsZT0iRDMwVi1TdWJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRDMwVl8wMDJkR3VhcmRlZC5odG1sI0QzMFZfMDAyZEd1YXJkZWQiIHRpdGxlPSJEMzBWLUd1YXJkZWQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMzBWLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJEMzBWXzAwMmRDaGFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMzBWXzAwMmRHdWFyZGVkLmh0bWwjRDMwVl8wMDJkR3VhcmRlZCI+RDMwVi1HdWFyZGVkPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRDMwVl8wMDJkU3Vicy5odG1sI0QzMFZfMDAyZFN1YnMiPkQzMFYtU3ViczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkQzMFZfMDAyZFN5bnRheC5odG1sI0QzMFZfMDAyZFN5bnRheCI+RDMwVi1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjEwLjIuMyBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtRDMwVi04MzQiPjwvYT48YSBuYW1lPSJpbmRleC1EMzBWLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItODM1Ij48L2E+QSBzZW1pY29sb24gKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOykgY2FuIGJlIHVzZWQgYW55d2hlcmUgb24gYSBsaW5lIHRvIHN0YXJ0IGEKK2NvbW1lbnQgdGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUsIHRoZSB3aG9sZSBsaW5lCitpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjb3VsZCBhbHNvIGJlIGEKK2xvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtc3ViXzAwMmRpbnN0cnVjdGlvbi1vcmRlcmluZ18wMDJjLUQzMFYtODM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtRDMwVi1zdWJfMDAyZGluc3RydWN0aW9uLW9yZGVyaW5nLTgzNyI+PC9hPlN1Yi1pbnN0cnVjdGlvbnMgbWF5IGJlIGV4ZWN1dGVkIGluIG9yZGVyLCBpbiByZXZlcnNlLW9yZGVyLCBvciBpbiBwYXJhbGxlbC4gCitJbnN0cnVjdGlvbnMgbGlzdGVkIGluIHRoZSBzdGFuZGFyZCBvbmUtcGVyLWxpbmUgZm9ybWF0IHdpbGwgYmUgZXhlY3V0ZWQKK3NlcXVlbnRpYWxseSB1bmxlc3MgeW91IHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tTzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24uCisKKyAgIDxwPlRvIHNwZWNpZnkgdGhlIGV4ZWN1dGluZyBvcmRlciwgdXNlIHRoZSBmb2xsb3dpbmcgc3ltYm9sczoKKyAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LSZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+U2VxdWVudGlhbCB3aXRoIGluc3RydWN0aW9uIG9uIHRoZSBsZWZ0IGZpcnN0LgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7LTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TZXF1ZW50aWFsIHdpdGggaW5zdHJ1Y3Rpb24gb24gdGhlIHJpZ2h0IGZpcnN0LgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj58fDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5QYXJhbGxlbAorPC9kbD4KKworICAgPHA+VGhlIEQzMFYgc3ludGF4IGFsbG93cyBlaXRoZXIgb25lIGluc3RydWN0aW9uIHBlciBsaW5lLCBvbmUgaW5zdHJ1Y3Rpb24gcGVyIGxpbmUgd2l0aAordGhlIGV4ZWN1dGlvbiBzeW1ib2wsIG9yIHR3byBpbnN0cnVjdGlvbnMgcGVyIGxpbmUuICBGb3IgZXhhbXBsZQorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YWJzIHIyLHIzIC0mZ3Q7IGFicyByNCxyNTwvY29kZT48ZGQ+RXhlY3V0ZSB0aGVzZSBzZXF1ZW50aWFsbHkuICBUaGUgaW5zdHJ1Y3Rpb24gb24gdGhlIHJpZ2h0IGlzIGluIHRoZSByaWdodAorY29udGFpbmVyIGFuZCBpcyBleGVjdXRlZCBzZWNvbmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5hYnMgcjIscjMgJmx0Oy0gYWJzIHI0LHI1PC9jb2RlPjxkZD5FeGVjdXRlIHRoZXNlIHJldmVyc2Utc2VxdWVudGlhbGx5LiAgVGhlIGluc3RydWN0aW9uIG9uIHRoZSByaWdodCBpcyBpbiB0aGUgcmlnaHQKK2NvbnRhaW5lciwgYW5kIGlzIGV4ZWN1dGVkIGZpcnN0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+YWJzIHIyLHIzIHx8IGFicyByNCxyNTwvY29kZT48ZGQ+RXhlY3V0ZSB0aGVzZSBpbiBwYXJhbGxlbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmxkdyByMixAKHIzLHI0KSB8fDwvY29kZT48ZHQ+PGNvZGU+bXVseCByNixyOCxyOTwvY29kZT48ZGQ+VHdvLWxpbmUgZm9ybWF0LiBFeGVjdXRlIHRoZXNlIGluIHBhcmFsbGVsLgorCisgICAgIDxicj48ZHQ+PGNvZGU+bXVseCBhMCxyOCxyOTwvY29kZT48ZHQ+PGNvZGU+c3R3IHIyLEAocjMscjQpPC9jb2RlPjxkZD5Ud28tbGluZSBmb3JtYXQuIEV4ZWN1dGUgdGhlc2Ugc2VxdWVudGlhbGx5IHVubGVzcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1PPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcwordXNlZC4gIElmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1PPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcyB1c2VkLCB0aGUgYXNzZW1ibGVyIHdpbGwgZGV0ZXJtaW5lIGlmCit0aGUgaW5zdHJ1Y3Rpb25zIGNvdWxkIGJlIGRvbmUgaW4gcGFyYWxsZWwgKHRoZSBhYm92ZSB0d28gaW5zdHJ1Y3Rpb25zCitjYW4gYmUgZG9uZSBpbiBwYXJhbGxlbCksIGFuZCBpZiBzbywgZW1pdCB0aGVtIGFzIHBhcmFsbGVsIGluc3RydWN0aW9ucy4gCitUaGUgYXNzZW1ibGVyIHdpbGwgcHV0IHRoZW0gaW4gdGhlIHByb3BlciBjb250YWluZXJzLiAgSW4gdGhlIGFib3ZlCitleGFtcGxlLCB0aGUgYXNzZW1ibGVyIHdpbGwgcHV0IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0dzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbiBpbiBsZWZ0Citjb250YWluZXIgYW5kIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11bHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb24gaW4gdGhlIHJpZ2h0IGNvbnRhaW5lci4KKworICAgICA8YnI+PGR0Pjxjb2RlPnN0dyByMixAKHIzLHI0KSAtJmd0OzwvY29kZT48ZHQ+PGNvZGU+bXVseCBhMCxyOCxyOTwvY29kZT48ZGQ+VHdvLWxpbmUgZm9ybWF0LiAgRXhlY3V0ZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdHc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb24gZm9sbG93ZWQgYnkgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11bHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb24gc2VxdWVudGlhbGx5LiAgVGhlIGZpcnN0IGluc3RydWN0aW9uIGdvZXMgaW4gdGhlCitsZWZ0IGNvbnRhaW5lciBhbmQgdGhlIHNlY29uZCBpbnN0cnVjdGlvbiBnb2VzIGludG8gcmlnaHQgY29udGFpbmVyLiAKK1RoZSBhc3NlbWJsZXIgd2lsbCBnaXZlIGFuIGVycm9yIGlmIHRoZSBtYWNoaW5lIG9yZGVyaW5nIGNvbnN0cmFpbnRzIGFyZQordmlvbGF0ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5zdHcgcjIsQChyMyxyNCkgJmx0Oy08L2NvZGU+PGR0Pjxjb2RlPm11bHggYTAscjgscjk8L2NvZGU+PGRkPlNhbWUgYXMgcHJldmlvdXMgZXhhbXBsZSwgZXhjZXB0IHRoYXQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXVseDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbiBpcworZXhlY3V0ZWQgYmVmb3JlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0dzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbi4gCis8L2RsPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy1fMDA0MHNhbXBfMDA3Yl8wMDI0XzAwN2QtaW4tODM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNF8wMDdkLWluLXN5bWJvbC1uYW1lcy04MzkiPjwvYT5TaW5jZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaGFzIG5vIHNwZWNpYWwgbWVhbmluZywgeW91IG1heSB1c2UgaXQgaW4gc3ltYm9sIG5hbWVzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMzBWXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmRkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMzBWXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMzBWLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRDEwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDEwVl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRDEwVi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFcGlwaGFueV8wMDJkRGVwZW5kZW50Lmh0bWwjRXBpcGhhbnlfMDAyZERlcGVuZGVudCIgdGl0bGU9IkVwaXBoYW55LURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkQzMFYtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJEMzBWXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXBpcGhhbnlfMDAyZERlcGVuZGVudC5odG1sI0VwaXBoYW55XzAwMmREZXBlbmRlbnQiPkVwaXBoYW55LURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCI+RDEwVi1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMTAgRDMwViBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1EMzBWLXN1cHBvcnQtODI1Ij48L2E+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJEMzBWXzAwMmRPcHRzLmh0bWwjRDMwVl8wMDJkT3B0cyI+RDMwVi1PcHRzPC9hPjogICAgICAgICAgICAgICAgICAgIEQzMFYgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iRDMwVl8wMDJkU3ludGF4Lmh0bWwjRDMwVl8wMDJkU3ludGF4Ij5EMzBWLVN5bnRheDwvYT46ICAgICAgICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJEMzBWXzAwMmRGbG9hdC5odG1sI0QzMFZfMDAyZEZsb2F0Ij5EMzBWLUZsb2F0PC9hPjogICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkQzMFZfMDAyZE9wY29kZXMuaHRtbCNEMzBWXzAwMmRPcGNvZGVzIj5EMzBWLU9wY29kZXM8L2E+OiAgICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkRmxvYXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZEZsb2F0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzNjg1MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZEZsb2F0Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RDMwVi1GbG9hdCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRDMwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDMwVl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRDMwVi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMzBWLVN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkQzMFZfMDAyZE9wY29kZXMuaHRtbCNEMzBWXzAwMmRPcGNvZGVzIiB0aXRsZT0iRDMwVi1PcGNvZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRDMwVi1GbG9hdCI+PC9hPgorPGEgbmFtZT0iRDMwVl8wMDJkRmxvYXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRDMwVl8wMDJkT3Bjb2Rlcy5odG1sI0QzMFZfMDAyZE9wY29kZXMiPkQzMFYtT3Bjb2RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQzMFZfMDAyZFN5bnRheC5odG1sI0QzMFZfMDAyZFN5bnRheCI+RDMwVi1TeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEMzBWXzAwMmREZXBlbmRlbnQuaHRtbCNEMzBWXzAwMmREZXBlbmRlbnQiPkQzMFYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xMC4zIEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1EMzBWLTg0NSI+PC9hPjxhIG5hbWU9ImluZGV4LUQzMFYtZmxvYXRpbmctcG9pbnQtODQ2Ij48L2E+VGhlIEQzMFYgaGFzIG5vIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50LCBidXQgdGhlIDxjb2RlPi5mbG9hdDwvY29kZT4gYW5kIDxjb2RlPi5kb3VibGU8L2NvZGU+CitkaXJlY3RpdmVzIGdlbmVyYXRlcyA8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggb3RoZXIgZGV2ZWxvcG1lbnQgdG9vbHMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZEd1YXJkZWQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZEd1YXJkZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDYyMDNiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkR3VhcmRlZC5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkQzMFYtR3VhcmRlZCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRDMwVl8wMDJkU3ludGF4Lmh0bWwjRDMwVl8wMDJkU3ludGF4IiB0aXRsZT0iRDMwVi1TeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEMzBWXzAwMmRDaGFycy5odG1sI0QzMFZfMDAyZENoYXJzIiB0aXRsZT0iRDMwVi1DaGFycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkQzMFZfMDAyZFJlZ3MuaHRtbCNEMzBWXzAwMmRSZWdzIiB0aXRsZT0iRDMwVi1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRDMwVi1HdWFyZGVkIj48L2E+Cis8YSBuYW1lPSJEMzBWXzAwMmRHdWFyZGVkIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkQzMFZfMDAyZFJlZ3MuaHRtbCNEMzBWXzAwMmRSZWdzIj5EMzBWLVJlZ3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEMzBWXzAwMmRDaGFycy5odG1sI0QzMFZfMDAyZENoYXJzIj5EMzBWLUNoYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRDMwVl8wMDJkU3ludGF4Lmh0bWwjRDMwVl8wMDJkU3ludGF4Ij5EMzBWLVN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMTAuMi40IEd1YXJkZWQgRXhlY3V0aW9uPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtRDMwVi1HdWFyZGVkLUV4ZWN1dGlvbi04NDAiPjwvYT48Y29kZT5hczwvY29kZT4gc3VwcG9ydHMgdGhlIGZ1bGwgcmFuZ2Ugb2YgZ3VhcmRlZCBleGVjdXRpb24KK2RpcmVjdGl2ZXMgZm9yIGVhY2ggaW5zdHJ1Y3Rpb24uICBKdXN0IGFwcGVuZCB0aGUgZGlyZWN0aXZlIGFmdGVyIHRoZQoraW5zdHJ1Y3Rpb24gcHJvcGVyLiAgVGhlIGRpcmVjdGl2ZXMgYXJlOgorCisgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi90eDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FeGVjdXRlIHRoZSBpbnN0cnVjdGlvbiBpZiBmbGFnIGYwIGlzIHRydWUuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi9meDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FeGVjdXRlIHRoZSBpbnN0cnVjdGlvbiBpZiBmbGFnIGYwIGlzIGZhbHNlLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4veHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaWYgZmxhZyBmMSBpcyB0cnVlLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4veGY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaWYgZmxhZyBmMSBpcyBmYWxzZS4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+L3R0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkV4ZWN1dGUgdGhlIGluc3RydWN0aW9uIGlmIGJvdGggZmxhZ3MgZjAgYW5kIGYxIGFyZSB0cnVlLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vdGY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaWYgZmxhZyBmMCBpcyB0cnVlIGFuZCBmbGFnIGYxIGlzIGZhbHNlLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZE9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZE9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWNlNzRiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkQzMFYtT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRDMwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDMwVl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRDMwVi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEMzBWXzAwMmRGbG9hdC5odG1sI0QzMFZfMDAyZEZsb2F0IiB0aXRsZT0iRDMwVi1GbG9hdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkQzMFYtT3Bjb2RlcyI+PC9hPgorPGEgbmFtZT0iRDMwVl8wMDJkT3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQzMFZfMDAyZEZsb2F0Lmh0bWwjRDMwVl8wMDJkRmxvYXQiPkQzMFYtRmxvYXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEMzBWXzAwMmREZXBlbmRlbnQuaHRtbCNEMzBWXzAwMmREZXBlbmRlbnQiPkQzMFYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xMC40IE9wY29kZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1EMzBWLW9wY29kZS1zdW1tYXJ5LTg0NyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZS1zdW1tYXJ5XzAwMmMtRDMwVi04NDgiPjwvYT48YSBuYW1lPSJpbmRleC1tbmVtb25pY3NfMDAyYy1EMzBWLTg0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWluc3RydWN0aW9uLXN1bW1hcnlfMDAyYy1EMzBWLTg1MCI+PC9hPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgRDMwViBtYWNoaW5lIGluc3RydWN0aW9uIHNldCwgc2VlCis8Y2l0ZT5EMzBWIEFyY2hpdGVjdHVyZTogQSBWTElXIE1pY3JvcHJvY2Vzc29yIGZvciBNdWx0aW1lZGlhIEFwcGxpY2F0aW9uczwvY2l0ZT4KKyhNaXRzdWJpc2hpIEVsZWN0cmljIENvcnAuKS4gCis8Y29kZT5hczwvY29kZT4gaW1wbGVtZW50cyBhbGwgdGhlIHN0YW5kYXJkIEQzMFYgb3Bjb2Rlcy4gIFRoZSBvbmx5IGNoYW5nZXMgYXJlIHRob3NlCitkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gb24gc2l6ZSBtb2RpZmllcnMKKworPCEtLSBDb3B5cmlnaHQgMTk5OSwgMjAwMiwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZE9wdHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZE9wdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWU2N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkT3B0cy5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkQzMFYtT3B0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRDMwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDMwVl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRDMwVi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMzBWLVN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkQzMFYtT3B0cyI+PC9hPgorPGEgbmFtZT0iRDMwVl8wMDJkT3B0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiPkQzMFYtU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRDMwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDMwVl8wMDJkRGVwZW5kZW50Ij5EMzBWLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTAuMSBEMzBWIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtRDMwVi04MjYiPjwvYT48YSBuYW1lPSJpbmRleC1EMzBWLW9wdGlvbnMtODI3Ij48L2E+VGhlIE1pdHN1YmlzaGkgRDMwViB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBoYXMgYSBmZXcgbWFjaGluZQorZGVwZW5kZW50IG9wdGlvbnMuCisKKyAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LU88L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VGhlIEQzMFYgY2FuIG9mdGVuIGV4ZWN1dGUgdHdvIHN1Yi1pbnN0cnVjdGlvbnMgaW4gcGFyYWxsZWwuIFdoZW4gdGhpcyBvcHRpb24KK2lzIHVzZWQsIDxjb2RlPmFzPC9jb2RlPiB3aWxsIGF0dGVtcHQgdG8gb3B0aW1pemUgaXRzIG91dHB1dCBieSBkZXRlY3Rpbmcgd2hlbgoraW5zdHJ1Y3Rpb25zIGNhbiBiZSBleGVjdXRlZCBpbiBwYXJhbGxlbC4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW48L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+V2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCA8Y29kZT5hczwvY29kZT4gd2lsbCBpc3N1ZSBhIHdhcm5pbmcgZXZlcnkKK3RpbWUgaXQgYWRkcyBhIG5vcCBpbnN0cnVjdGlvbi4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LU48L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+V2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCA8Y29kZT5hczwvY29kZT4gd2lsbCBpc3N1ZSBhIHdhcm5pbmcgaWYgaXQKK25lZWRzIHRvIGluc2VydCBhIG5vcCBhZnRlciBhIDMyLWJpdCBtdWx0aXBseSBiZWZvcmUgYSBsb2FkIG9yIDE2LWJpdAorbXVsdGlwbHkgaW5zdHJ1Y3Rpb24uIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkUmVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTYyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMzBWXzAwMmRSZWdzLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RDMwVi1SZWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMzBWLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkQzMFZfMDAyZEd1YXJkZWQuaHRtbCNEMzBWXzAwMmRHdWFyZGVkIiB0aXRsZT0iRDMwVi1HdWFyZGVkIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRDMwVl8wMDJkQWRkcmVzc2luZy5odG1sI0QzMFZfMDAyZEFkZHJlc3NpbmciIHRpdGxlPSJEMzBWLUFkZHJlc3NpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMzBWLVJlZ3MiPjwvYT4KKzxhIG5hbWU9IkQzMFZfMDAyZFJlZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRDMwVl8wMDJkQWRkcmVzc2luZy5odG1sI0QzMFZfMDAyZEFkZHJlc3NpbmciPkQzMFYtQWRkcmVzc2luZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQzMFZfMDAyZEd1YXJkZWQuaHRtbCNEMzBWXzAwMmRHdWFyZGVkIj5EMzBWLUd1YXJkZWQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiPkQzMFYtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xMC4yLjUgUmVnaXN0ZXIgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1EMzBWLXJlZ2lzdGVycy04NDEiPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3RlcnNfMDAyYy1EMzBWLTg0MiI+PC9hPllvdSBjYW4gdXNlIHRoZSBwcmVkZWZpbmVkIHN5bWJvbHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aHJvdWdoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjYzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHJlZmVyCit0byB0aGUgRDMwViByZWdpc3RlcnMuICBZb3UgY2FuIGFsc28gdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgYW4gYWxpYXMgZm9yCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI2Mzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5saW5rPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGFuIGFsaWFzIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI2Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSBhY2N1bXVsYXRvcnMKK2FyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmEwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmExPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5UaGUgRDMwViBhbHNvIGhhcyBwcmVkZWZpbmVkIHN5bWJvbHMgZm9yIHRoZXNlIGNvbnRyb2wgcmVnaXN0ZXJzIGFuZCBzdGF0dXMgYml0czoKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnBzdzwvY29kZT48ZGQ+UHJvY2Vzc29yIFN0YXR1cyBXb3JkCis8YnI+PGR0Pjxjb2RlPmJwc3c8L2NvZGU+PGRkPkJhY2t1cCBQcm9jZXNzb3IgU3RhdHVzIFdvcmQKKzxicj48ZHQ+PGNvZGU+cGM8L2NvZGU+PGRkPlByb2dyYW0gQ291bnRlcgorPGJyPjxkdD48Y29kZT5icGM8L2NvZGU+PGRkPkJhY2t1cCBQcm9ncmFtIENvdW50ZXIKKzxicj48ZHQ+PGNvZGU+cnB0X2M8L2NvZGU+PGRkPlJlcGVhdCBDb3VudAorPGJyPjxkdD48Y29kZT5ycHRfczwvY29kZT48ZGQ+UmVwZWF0IFN0YXJ0IGFkZHJlc3MKKzxicj48ZHQ+PGNvZGU+cnB0X2U8L2NvZGU+PGRkPlJlcGVhdCBFbmQgYWRkcmVzcworPGJyPjxkdD48Y29kZT5tb2RfczwvY29kZT48ZGQ+TW9kdWxvIFN0YXJ0IGFkZHJlc3MKKzxicj48ZHQ+PGNvZGU+bW9kX2U8L2NvZGU+PGRkPk1vZHVsbyBFbmQgYWRkcmVzcworPGJyPjxkdD48Y29kZT5pYmE8L2NvZGU+PGRkPkluc3RydWN0aW9uIEJyZWFrIEFkZHJlc3MKKzxicj48ZHQ+PGNvZGU+ZjA8L2NvZGU+PGRkPkZsYWcgMAorPGJyPjxkdD48Y29kZT5mMTwvY29kZT48ZGQ+RmxhZyAxCis8YnI+PGR0Pjxjb2RlPmYyPC9jb2RlPjxkZD5GbGFnIDIKKzxicj48ZHQ+PGNvZGU+ZjM8L2NvZGU+PGRkPkZsYWcgMworPGJyPjxkdD48Y29kZT5mNDwvY29kZT48ZGQ+RmxhZyA0Cis8YnI+PGR0Pjxjb2RlPmY1PC9jb2RlPjxkZD5GbGFnIDUKKzxicj48ZHQ+PGNvZGU+ZjY8L2NvZGU+PGRkPkZsYWcgNgorPGJyPjxkdD48Y29kZT5mNzwvY29kZT48ZGQ+RmxhZyA3Cis8YnI+PGR0Pjxjb2RlPnM8L2NvZGU+PGRkPlNhbWUgYXMgZmxhZyA0IChzYXR1cmF0aW9uIGZsYWcpCis8YnI+PGR0Pjxjb2RlPnY8L2NvZGU+PGRkPlNhbWUgYXMgZmxhZyA1IChvdmVyZmxvdyBmbGFnKQorPGJyPjxkdD48Y29kZT52YTwvY29kZT48ZGQ+U2FtZSBhcyBmbGFnIDYgKHN0aWNreSBvdmVyZmxvdyBmbGFnKQorPGJyPjxkdD48Y29kZT5jPC9jb2RlPjxkZD5TYW1lIGFzIGZsYWcgNyAoY2FycnkvYm9ycm93IGZsYWcpCis8YnI+PGR0Pjxjb2RlPmI8L2NvZGU+PGRkPlNhbWUgYXMgZmxhZyA3IChjYXJyeS9ib3Jyb3cgZmxhZykKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZFNpemUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZFNpemUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI3NWQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkU2l6ZS5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkQzMFYtU2l6ZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRDMwVl8wMDJkU3ludGF4Lmh0bWwjRDMwVl8wMDJkU3ludGF4IiB0aXRsZT0iRDMwVi1TeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEMzBWXzAwMmRTdWJzLmh0bWwjRDMwVl8wMDJkU3VicyIgdGl0bGU9IkQzMFYtU3VicyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkQzMFYtU2l6ZSI+PC9hPgorPGEgbmFtZT0iRDMwVl8wMDJkU2l6ZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMzBWXzAwMmRTdWJzLmh0bWwjRDMwVl8wMDJkU3VicyI+RDMwVi1TdWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRDMwVl8wMDJkU3ludGF4Lmh0bWwjRDMwVl8wMDJkU3ludGF4Ij5EMzBWLVN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMTAuMi4xIFNpemUgTW9kaWZpZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtRDMwVi1zaXplLW1vZGlmaWVycy04MzAiPjwvYT48YSBuYW1lPSJpbmRleC1zaXplLW1vZGlmaWVyc18wMDJjLUQzMFYtODMxIj48L2E+VGhlIEQzMFYgdmVyc2lvbiBvZiA8Y29kZT5hczwvY29kZT4gdXNlcyB0aGUgaW5zdHJ1Y3Rpb24gbmFtZXMgaW4gdGhlIEQzMFYKK0FyY2hpdGVjdHVyZSBNYW51YWwuICBIb3dldmVyLCB0aGUgbmFtZXMgaW4gdGhlIG1hbnVhbCBhcmUgc29tZXRpbWVzIGFtYmlndW91cy4gCitUaGVyZSBhcmUgaW5zdHJ1Y3Rpb24gbmFtZXMgdGhhdCBjYW4gYXNzZW1ibGUgdG8gYSBzaG9ydCBvciBsb25nIGZvcm0gb3Bjb2RlLiAKK0hvdyBkb2VzIHRoZSBhc3NlbWJsZXIgcGljayB0aGUgY29ycmVjdCBmb3JtPyAgPGNvZGU+YXM8L2NvZGU+IHdpbGwgYWx3YXlzIHBpY2sgdGhlCitzbWFsbGVzdCBmb3JtIGlmIGl0IGNhbi4gIFdoZW4gZGVhbGluZyB3aXRoIGEgc3ltYm9sIHRoYXQgaXMgbm90IGRlZmluZWQgeWV0IHdoZW4gYQorbGluZSBpcyBiZWluZyBhc3NlbWJsZWQsIGl0IHdpbGwgYWx3YXlzIHVzZSB0aGUgbG9uZyBmb3JtLiAgSWYgeW91IG5lZWQgdG8gZm9yY2UgdGhlCithc3NlbWJsZXIgdG8gdXNlIGVpdGhlciB0aGUgc2hvcnQgb3IgbG9uZyBmb3JtIG9mIHRoZSBpbnN0cnVjdGlvbiwgeW91IGNhbiBhcHBlbmQKK2VpdGhlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zPC9zcGFuPjwvc2FtcD4mcnNxdW87IChzaG9ydCkgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAobG9uZykgdG8gaXQuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB3cml0aW5nCithbiBhc3NlbWJseSBwcm9ncmFtIGFuZCB5b3Ugd2FudCB0byBkbyBhIGJyYW5jaCB0byBhIHN5bWJvbCB0aGF0IGlzIGRlZmluZWQgbGF0ZXIKK2luIHlvdXIgcHJvZ3JhbSwgeW91IGNhbiB3cml0ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJyYS5zIGZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitPYmpkdW1wIGFuZCBHREIgd2lsbCBhbHdheXMgYXBwZW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBpbnN0cnVjdGlvbnMgd2hpY2gKK2hhdmUgYm90aCBzaG9ydCBhbmQgbG9uZyBmb3Jtcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkU3Vicy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRDMwVl8wMDJkU3Vicy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjhkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMzBWXzAwMmRTdWJzLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RDMwVi1TdWJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiIHRpdGxlPSJEMzBWLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkQzMFZfMDAyZFNpemUuaHRtbCNEMzBWXzAwMmRTaXplIiB0aXRsZT0iRDMwVi1TaXplIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRDMwVl8wMDJkQ2hhcnMuaHRtbCNEMzBWXzAwMmRDaGFycyIgdGl0bGU9IkQzMFYtQ2hhcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEMzBWLVN1YnMiPjwvYT4KKzxhIG5hbWU9IkQzMFZfMDAyZFN1YnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRDMwVl8wMDJkQ2hhcnMuaHRtbCNEMzBWXzAwMmRDaGFycyI+RDMwVi1DaGFyczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQzMFZfMDAyZFNpemUuaHRtbCNEMzBWXzAwMmRTaXplIj5EMzBWLVNpemU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiPkQzMFYtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xMC4yLjIgU3ViLUluc3RydWN0aW9uczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LUQzMFYtc3ViXzAwMmRpbnN0cnVjdGlvbnMtODMyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ViXzAwMmRpbnN0cnVjdGlvbnNfMDAyYy1EMzBWLTgzMyI+PC9hPlRoZSBEMzBWIGFzc2VtYmxlciB0YWtlcyBhcyBpbnB1dCBhIHNlcmllcyBvZiBpbnN0cnVjdGlvbnMsIGVpdGhlciBvbmUtcGVyLWxpbmUsCitvciBpbiB0aGUgc3BlY2lhbCB0d28tcGVyLWxpbmUgZm9ybWF0IGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLiAgU29tZSBvZiB0aGVzZQoraW5zdHJ1Y3Rpb25zIHdpbGwgYmUgc2hvcnQtZm9ybSBvciBzdWItaW5zdHJ1Y3Rpb25zLiAgVGhlc2Ugc3ViLWluc3RydWN0aW9ucyBjYW4gYmUgcGFja2VkCitpbnRvIGEgc2luZ2xlIGluc3RydWN0aW9uLiAgVGhlIGFzc2VtYmxlciB3aWxsIGRvIHRoaXMgYXV0b21hdGljYWxseS4gIEl0IHdpbGwgYWxzbyBkZXRlY3QKK3doZW4gaXQgc2hvdWxkIG5vdCBwYWNrIGluc3RydWN0aW9ucy4gIEZvciBleGFtcGxlLCB3aGVuIGEgbGFiZWwgaXMgZGVmaW5lZCwgdGhlIG5leHQKK2luc3RydWN0aW9uIHdpbGwgbmV2ZXIgYmUgcGFja2FnZWQgd2l0aCB0aGUgcHJldmlvdXMgb25lLiAgV2hlbmV2ZXIgYSBicmFuY2ggYW5kIGxpbmsKK2luc3RydWN0aW9uIGlzIGNhbGxlZCwgaXQgd2lsbCBub3QgYmUgcGFja2FnZWQgd2l0aCB0aGUgbmV4dCBpbnN0cnVjdGlvbiBzbyB0aGUgcmV0dXJuCithZGRyZXNzIHdpbGwgYmUgdmFsaWQuICBOb3BzIGFyZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIHdoZW4gbmVjZXNzYXJ5LgorCisgICA8cD5JZiB5b3UgZG8gbm90IHdhbnQgdGhlIGFzc2VtYmxlciBhdXRvbWF0aWNhbGx5IG1ha2luZyB0aGVzZSBkZWNpc2lvbnMsIHlvdSBjYW4gY29udHJvbAordGhlIHBhY2thZ2luZyBhbmQgZXhlY3V0aW9uIHR5cGUgKHBhcmFsbGVsIG9yIHNlcXVlbnRpYWwpIHdpdGggdGhlIHNwZWNpYWwgZXhlY3V0aW9uCitzeW1ib2xzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMzBWXzAwMmRTeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0QzMFZfMDAyZFN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjY0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EMzBWXzAwMmRTeW50YXguaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EMzBWLVN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRDMwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDMwVl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRDMwVi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEMzBWXzAwMmRPcHRzLmh0bWwjRDMwVl8wMDJkT3B0cyIgdGl0bGU9IkQzMFYtT3B0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkQzMFZfMDAyZEZsb2F0Lmh0bWwjRDMwVl8wMDJkRmxvYXQiIHRpdGxlPSJEMzBWLUZsb2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRDMwVi1TeW50YXgiPjwvYT4KKzxhIG5hbWU9IkQzMFZfMDAyZFN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEMzBWXzAwMmRGbG9hdC5odG1sI0QzMFZfMDAyZEZsb2F0Ij5EMzBWLUZsb2F0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRDMwVl8wMDJkT3B0cy5odG1sI0QzMFZfMDAyZE9wdHMiPkQzMFYtT3B0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkQzMFZfMDAyZERlcGVuZGVudC5odG1sI0QzMFZfMDAyZERlcGVuZGVudCI+RDMwVi1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjEwLjIgU3ludGF4PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtRDMwVi1zeW50YXgtODI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3ludGF4XzAwMmMtRDMwVi04MjkiPjwvYT4KK1RoZSBEMzBWIHN5bnRheCBpcyBiYXNlZCBvbiB0aGUgc3ludGF4IGluIE1pdHN1YmlzaGkncyBEMzBWIGFyY2hpdGVjdHVyZSBtYW51YWwuIAorVGhlIGRpZmZlcmVuY2VzIGFyZSBkZXRhaWxlZCBiZWxvdy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkQzMFZfMDAyZFNpemUuaHRtbCNEMzBWXzAwMmRTaXplIj5EMzBWLVNpemU8L2E+OiAgICAgICAgICAgICAgICAgIFNpemUgTW9kaWZpZXJzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJEMzBWXzAwMmRTdWJzLmh0bWwjRDMwVl8wMDJkU3VicyI+RDMwVi1TdWJzPC9hPjogICAgICAgICAgICAgICAgICBTdWItSW5zdHJ1Y3Rpb25zCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJEMzBWXzAwMmRDaGFycy5odG1sI0QzMFZfMDAyZENoYXJzIj5EMzBWLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iRDMwVl8wMDJkR3VhcmRlZC5odG1sI0QzMFZfMDAyZEd1YXJkZWQiPkQzMFYtR3VhcmRlZDwvYT46ICAgICAgICAgICAgICAgR3VhcmRlZCBFeGVjdXRpb24KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkQzMFZfMDAyZFJlZ3MuaHRtbCNEMzBWXzAwMmRSZWdzIj5EMzBWLVJlZ3M8L2E+OiAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJEMzBWXzAwMmRBZGRyZXNzaW5nLmh0bWwjRDMwVl8wMDJkQWRkcmVzc2luZyI+RDMwVi1BZGRyZXNzaW5nPC9hPjogICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EYXRhLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EYXRhLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiYTEyMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RhdGEuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EYXRhIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb21tLmh0bWwjQ29tbSIgdGl0bGU9IkNvbW0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEZWYuaHRtbCNEZWYiIHRpdGxlPSJEZWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEYXRhIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRlZi5odG1sI0RlZiI+RGVmPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29tbS5odG1sI0NvbW0iPkNvbW08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMzMgPGNvZGU+LmRhdGEgPC9jb2RlPjx2YXI+c3Vic2VjdGlvbjwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZGF0YV8wMDdkLWRpcmVjdGl2ZS0zMDQiPjwvYT48Y29kZT4uZGF0YTwvY29kZT4gdGVsbHMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gdG8gYXNzZW1ibGUgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnRzIG9udG8gdGhlCitlbmQgb2YgdGhlIGRhdGEgc3Vic2VjdGlvbiBudW1iZXJlZCA8dmFyPnN1YnNlY3Rpb248L3Zhcj4gKHdoaWNoIGlzIGFuCithYnNvbHV0ZSBleHByZXNzaW9uKS4gIElmIDx2YXI+c3Vic2VjdGlvbjwvdmFyPiBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cwordG8gemVyby4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRGVmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EZWYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTRjZjRhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRGVmLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGVmIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEYXRhLmh0bWwjRGF0YSIgdGl0bGU9IkRhdGEiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEZXNjLmh0bWwjRGVzYyIgdGl0bGU9IkRlc2MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZWYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGVzYy5odG1sI0Rlc2MiPkRlc2M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEYXRhLmh0bWwjRGF0YSI+RGF0YTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4zNCA8Y29kZT4uZGVmIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRlZl8wMDdkLWRpcmVjdGl2ZS0zMDUiPjwvYT48YSBuYW1lPSJpbmRleC1DT0ZGLXN5bWJvbHNfMDAyYy1kZWJ1Z2dpbmctMzA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGVidWdnaW5nLUNPRkYtc3ltYm9scy0zMDciPjwvYT5CZWdpbiBkZWZpbmluZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGEgc3ltYm9sIDx2YXI+bmFtZTwvdmFyPjsgdGhlCitkZWZpbml0aW9uIGV4dGVuZHMgdW50aWwgdGhlIDxjb2RlPi5lbmRlZjwvY29kZT4gZGlyZWN0aXZlIGlzIGVuY291bnRlcmVkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EZWZpbmluZy1OZXctT2JqZWN0LUF0dHJpYnV0ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RlZmluaW5nLU5ldy1PYmplY3QtQXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODRlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EZWZpbmluZy1OZXctT2JqZWN0LUF0dHJpYnV0ZXMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EZWZpbmluZyBOZXcgT2JqZWN0IEF0dHJpYnV0ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik9iamVjdC1BdHRyaWJ1dGVzLmh0bWwjT2JqZWN0LUF0dHJpYnV0ZXMiIHRpdGxlPSJPYmplY3QgQXR0cmlidXRlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdOVS1PYmplY3QtQXR0cmlidXRlcy5odG1sI0dOVS1PYmplY3QtQXR0cmlidXRlcyIgdGl0bGU9IkdOVSBPYmplY3QgQXR0cmlidXRlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRlZmluaW5nLU5ldy1PYmplY3QtQXR0cmlidXRlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdOVS1PYmplY3QtQXR0cmlidXRlcy5odG1sI0dOVS1PYmplY3QtQXR0cmlidXRlcyI+R05VIE9iamVjdCBBdHRyaWJ1dGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT2JqZWN0LUF0dHJpYnV0ZXMuaHRtbCNPYmplY3QtQXR0cmlidXRlcyI+T2JqZWN0IEF0dHJpYnV0ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIgRGVmaW5pbmcgTmV3IE9iamVjdCBBdHRyaWJ1dGVzPC9oMz4KKworPHA+SWYgeW91IHdhbnQgdG8gZGVmaW5lIGEgbmV3IDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBvYmplY3QgYXR0cmlidXRlLCBoZXJlIGFyZSB0aGUgcGxhY2VzIHlvdQord2lsbCBuZWVkIHRvIG1vZGlmeS4gIE5ldyBhdHRyaWJ1dGVzIHNob3VsZCBiZSBkaXNjdXNzZWQgb24gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmludXRpbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK21haWxpbmcgbGlzdC4KKworICAgICA8dWw+Cis8bGk+VGhpcyBtYW51YWwsIHdoaWNoIGlzIHRoZSBvZmZpY2lhbCByZWdpc3RlciBvZiBhdHRyaWJ1dGVzLiAKKzxsaT5UaGUgaGVhZGVyIGZvciB5b3VyIGFyY2hpdGVjdHVyZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+aW5jbHVkZS9lbGY8L3NwYW4+PC9zYW1wPiwgdG8gZGVmaW5lIHRoZSB0YWcuIAorPGxpPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmZkPC9zcGFuPjwvc2FtcD4gc3VwcG9ydCBmaWxlIGZvciB5b3VyIGFyY2hpdGVjdHVyZSwgdG8gbWVyZ2UgdGhlIGF0dHJpYnV0ZQorYW5kIGlzc3VlIGFueSBhcHByb3ByaWF0ZSBsaW5rIHdhcm5pbmdzLiAKKzxsaT5UZXN0IGNhc2VzIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5sZC90ZXN0c3VpdGU8L3NwYW4+PC9zYW1wPiBmb3IgbWVyZ2luZyBhbmQgbGluayB3YXJuaW5ncy4gCis8bGk+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmJpbnV0aWxzL3JlYWRlbGYuYzwvc3Bhbj48L3NhbXA+IHRvIGRpc3BsYXkgeW91ciBhdHRyaWJ1dGUuIAorPGxpPkdDQywgaWYgeW91IHdhbnQgdGhlIGNvbXBpbGVyIHRvIG1hcmsgdGhlIGF0dHJpYnV0ZSBhdXRvbWF0aWNhbGx5LiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RlbnNpdHktSW5zdHJ1Y3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EZW5zaXR5LUluc3RydWN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGIxODAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EZW5zaXR5LUluc3RydWN0aW9ucy5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRlbnNpdHkgSW5zdHJ1Y3Rpb25zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYdGVuc2EtT3B0aW1pemF0aW9ucy5odG1sI1h0ZW5zYS1PcHRpbWl6YXRpb25zIiB0aXRsZT0iWHRlbnNhIE9wdGltaXphdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJYdGVuc2EtQXV0b21hdGljLUFsaWdubWVudC5odG1sI1h0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50IiB0aXRsZT0iWHRlbnNhIEF1dG9tYXRpYyBBbGlnbm1lbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZW5zaXR5LUluc3RydWN0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJYdGVuc2EtQXV0b21hdGljLUFsaWdubWVudC5odG1sI1h0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Ij5YdGVuc2EgQXV0b21hdGljIEFsaWdubWVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilh0ZW5zYS1PcHRpbWl6YXRpb25zLmh0bWwjWHRlbnNhLU9wdGltaXphdGlvbnMiPlh0ZW5zYSBPcHRpbWl6YXRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41MC4zLjEgVXNpbmcgRGVuc2l0eSBJbnN0cnVjdGlvbnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1kZW5zaXR5LWluc3RydWN0aW9ucy0yMjk0Ij48L2E+CitUaGUgWHRlbnNhIGluc3RydWN0aW9uIHNldCBoYXMgYSBjb2RlIGRlbnNpdHkgb3B0aW9uIHRoYXQgcHJvdmlkZXMKKzE2LWJpdCB2ZXJzaW9ucyBvZiBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgb3Bjb2Rlcy4gIFVzZSBvZiB0aGVzZQorb3Bjb2RlcyBjYW4gc2lnbmlmaWNhbnRseSByZWR1Y2UgY29kZSBzaXplLiAgV2hlbiBwb3NzaWJsZSwgdGhlCithc3NlbWJsZXIgYXV0b21hdGljYWxseSB0cmFuc2xhdGVzIGluc3RydWN0aW9ucyBmcm9tIHRoZSBjb3JlCitYdGVuc2EgaW5zdHJ1Y3Rpb24gc2V0IGludG8gZXF1aXZhbGVudCBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgWHRlbnNhIGNvZGUKK2RlbnNpdHkgb3B0aW9uLiAgVGhpcyB0cmFuc2xhdGlvbiBjYW4gYmUgZGlzYWJsZWQgYnkgdXNpbmcgdW5kZXJzY29yZQorcHJlZml4ZXMgKHNlZSA8YSBocmVmPSJYdGVuc2EtT3Bjb2Rlcy5odG1sI1h0ZW5zYS1PcGNvZGVzIj5PcGNvZGUgTmFtZXM8L2E+KSwgYnkgdXNpbmcgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tdHJhbnNmb3JtPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQtbGluZSBvcHRpb24gKHNlZSA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5Db21tYW5kIExpbmUgT3B0aW9uczwvYT4pLCBvciBieSB1c2luZyB0aGUgPGNvZGU+bm8tdHJhbnNmb3JtPC9jb2RlPiBkaXJlY3RpdmUKKyhzZWUgPGEgaHJlZj0iVHJhbnNmb3JtLURpcmVjdGl2ZS5odG1sI1RyYW5zZm9ybS1EaXJlY3RpdmUiPnRyYW5zZm9ybTwvYT4pLgorCisgICA8cD5JdCBpcyBhIGdvb2QgaWRlYSA8ZW0+bm90PC9lbT4gdG8gdXNlIHRoZSBkZW5zaXR5IGluc3RydWN0aW9ucyBkaXJlY3RseS4gCitUaGUgYXNzZW1ibGVyIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgZGVuc2UgaW5zdHJ1Y3Rpb25zIHdoZXJlCitwb3NzaWJsZS4gIElmIHlvdSBsYXRlciBuZWVkIHRvIHVzZSBhbiBYdGVuc2EgcHJvY2Vzc29yIHdpdGhvdXQgdGhlIGNvZGUKK2RlbnNpdHkgb3B0aW9uLCB0aGUgc2FtZSBhc3NlbWJseSBjb2RlIHdpbGwgdGhlbiB3b3JrIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EZXByZWNhdGVkLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EZXByZWNhdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwYWI0YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RlcHJlY2F0ZWQuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EZXByZWNhdGVkIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJXb3JkLmh0bWwjV29yZCIgdGl0bGU9IldvcmQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZXByZWNhdGVkIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iV29yZC5odG1sI1dvcmQiPldvcmQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTI1IERlcHJlY2F0ZWQgRGlyZWN0aXZlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRlcHJlY2F0ZWQtZGlyZWN0aXZlcy01MTEiPjwvYT48YSBuYW1lPSJpbmRleC1vYnNvbGVzY2VudC1kaXJlY3RpdmVzLTUxMiI+PC9hPk9uZSBkYXkgdGhlc2UgZGlyZWN0aXZlcyB3b24ndCB3b3JrLiAKK1RoZXkgYXJlIGluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgYXNzZW1ibGVycy4KKyAgICAgPGRsPgorPGR0Pjx0dD4uYWJvcnQ8L3R0Pjxicj48ZHQ+PHR0Pi5saW5lPC90dD48ZGQ+PC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRGVzYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRGVzYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YzkyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EZXNjLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGVzYyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGVmLmh0bWwjRGVmIiB0aXRsZT0iRGVmIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGltLmh0bWwjRGltIiB0aXRsZT0iRGltIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGVzYyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEaW0uaHRtbCNEaW0iPkRpbTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRlZi5odG1sI0RlZiI+RGVmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjM1IDxjb2RlPi5kZXNjIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YWJzLWV4cHJlc3Npb248L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRlc2NfMDA3ZC1kaXJlY3RpdmUtMzA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ09GRi1zeW1ib2wtZGVzY3JpcHRvci0zMDkiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtZGVzY3JpcHRvcl8wMDJjLUNPRkYtMzEwIj48L2E+VGhpcyBkaXJlY3RpdmUgc2V0cyB0aGUgZGVzY3JpcHRvciBvZiB0aGUgc3ltYm9sIChzZWUgPGEgaHJlZj0iU3ltYm9sLUF0dHJpYnV0ZXMuaHRtbCNTeW1ib2wtQXR0cmlidXRlcyI+U3ltYm9sIEF0dHJpYnV0ZXM8L2E+KQordG8gdGhlIGxvdyAxNiBiaXRzIG9mIGFuIGFic29sdXRlIGV4cHJlc3Npb24uCisKKyAgIDxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kZXNjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSBpcyBub3QgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaXMKK2NvbmZpZ3VyZWQgZm9yIENPRkYgb3V0cHV0OyBpdCBpcyBvbmx5IGZvciA8Y29kZT5hLm91dDwvY29kZT4gb3IgPGNvZGU+Yi5vdXQ8L2NvZGU+CitvYmplY3QgZm9ybWF0LiAgRm9yIHRoZSBzYWtlIG9mIGNvbXBhdGliaWxpdHksIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGFjY2VwdHMKK2l0LCBidXQgcHJvZHVjZXMgbm8gb3V0cHV0LCB3aGVuIGNvbmZpZ3VyZWQgZm9yIENPRkYuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RpbS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRGltLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxNjljZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RpbS5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRpbSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGVzYy5odG1sI0Rlc2MiIHRpdGxlPSJEZXNjIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRG91YmxlLmh0bWwjRG91YmxlIiB0aXRsZT0iRG91YmxlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGltIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRvdWJsZS5odG1sI0RvdWJsZSI+RG91YmxlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRGVzYy5odG1sI0Rlc2MiPkRlc2M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMzYgPGNvZGU+LmRpbTwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRpbV8wMDdkLWRpcmVjdGl2ZS0zMTEiPjwvYT48YSBuYW1lPSJpbmRleC1DT0ZGLWF1eGlsaWFyeS1zeW1ib2wtaW5mb3JtYXRpb24tMzEyIj48L2E+PGEgbmFtZT0iaW5kZXgtYXV4aWxpYXJ5LXN5bWJvbC1pbmZvcm1hdGlvbl8wMDJjLUNPRkYtMzEzIj48L2E+VGhpcyBkaXJlY3RpdmUgaXMgZ2VuZXJhdGVkIGJ5IGNvbXBpbGVycyB0byBpbmNsdWRlIGF1eGlsaWFyeSBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGluIHRoZSBzeW1ib2wgdGFibGUuICBJdCBpcyBvbmx5IHBlcm1pdHRlZCBpbnNpZGUKKzxjb2RlPi5kZWY8L2NvZGU+Lzxjb2RlPi5lbmRlZjwvY29kZT4gcGFpcnMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RpcmVjdGl2ZXNfMDAyZGk4NjAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RpcmVjdGl2ZXNfMDAyZGk4NjAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjBiNzlkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRGlyZWN0aXZlc18wMDJkaTg2MC5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRpcmVjdGl2ZXMtaTg2MCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTg2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTg2MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTg2MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcHRpb25zXzAwMmRpODYwLmh0bWwjT3B0aW9uc18wMDJkaTg2MCIgdGl0bGU9Ik9wdGlvbnMtaTg2MCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik9wY29kZXMtZm9yLWk4NjAuaHRtbCNPcGNvZGVzLWZvci1pODYwIiB0aXRsZT0iT3Bjb2RlcyBmb3IgaTg2MCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRpcmVjdGl2ZXMtaTg2MCI+PC9hPgorPGEgbmFtZT0iRGlyZWN0aXZlc18wMDJkaTg2MCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPcGNvZGVzLWZvci1pODYwLmh0bWwjT3Bjb2Rlcy1mb3ItaTg2MCI+T3Bjb2RlcyBmb3IgaTg2MDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9wdGlvbnNfMDAyZGk4NjAuaHRtbCNPcHRpb25zXzAwMmRpODYwIj5PcHRpb25zLWk4NjA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpODYwXzAwMmREZXBlbmRlbnQuaHRtbCNpODYwXzAwMmREZXBlbmRlbnQiPmk4NjAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNi4zIGk4NjAgTWFjaGluZSBEaXJlY3RpdmVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtaTg2MC0xMDcwIj48L2E+PGEgbmFtZT0iaW5kZXgtaTg2MC1tYWNoaW5lLWRpcmVjdGl2ZXMtMTA3MSI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZHVhbF8wMDdkLWRpcmVjdGl2ZV8wMDJjLWk4NjAtMTA3MiI+PC9hPgorPGRsPjxkdD48Y29kZT4uZHVhbDwvY29kZT48ZGQ+RW50ZXIgZHVhbCBpbnN0cnVjdGlvbiBtb2RlLiBXaGlsZSB0aGlzIGRpcmVjdGl2ZSBpcyBzdXBwb3J0ZWQsIHRoZQorcHJlZmVycmVkIHdheSB0byB1c2UgZHVhbCBpbnN0cnVjdGlvbiBtb2RlIGlzIHRvIGV4cGxpY2l0bHkgY29kZQordGhlIGR1YWwgYml0IHdpdGggdGhlIDxjb2RlPmQuPC9jb2RlPiBwcmVmaXguIAorPC9kbD4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kZHVhbF8wMDdkLWRpcmVjdGl2ZV8wMDJjLWk4NjAtMTA3MyI+PC9hPgorPGRsPjxkdD48Y29kZT4uZW5kZHVhbDwvY29kZT48ZGQ+RXhpdCBkdWFsIGluc3RydWN0aW9uIG1vZGUuIFdoaWxlIHRoaXMgZGlyZWN0aXZlIGlzIHN1cHBvcnRlZCwgdGhlCitwcmVmZXJyZWQgd2F5IHRvIHVzZSBkdWFsIGluc3RydWN0aW9uIG1vZGUgaXMgdG8gZXhwbGljaXRseSBjb2RlCit0aGUgZHVhbCBiaXQgd2l0aCB0aGUgPGNvZGU+ZC48L2NvZGU+IHByZWZpeC4gCis8L2RsPgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhdG1wXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTg2MC0xMDc0Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi5hdG1wPC9jb2RlPjxkZD5DaGFuZ2UgdGhlIHRlbXBvcmFyeSByZWdpc3RlciB1c2VkIHdoZW4gZXhwYW5kaW5nIHBzZXVkbyBvcGVyYXRpb25zLiBUaGUKK2RlZmF1bHQgcmVnaXN0ZXIgaXMgPGNvZGU+cjMxPC9jb2RlPi4gCis8L2RsPgorCisgICA8cD5UaGUgPGNvZGU+LmR1YWw8L2NvZGU+LCA8Y29kZT4uZW5kZHVhbDwvY29kZT4sIGFuZCA8Y29kZT4uYXRtcDwvY29kZT4gZGlyZWN0aXZlcyBhcmUgYXZhaWxhYmxlIG9ubHkgaW4gdGhlIEludGVsIHN5bnRheCBtb2RlLgorCisgICA8cD5Cb3RoIHN5bnRheGVzIGFsbG93IGZvciB0aGUgc3RhbmRhcmQgPGNvZGU+LmFsaWduPC9jb2RlPiBkaXJlY3RpdmUuICBIb3dldmVyLAordGhlIEludGVsIHN5bnRheCBhZGRpdGlvbmFsbHkgYWxsb3dzIGtleXdvcmRzIGZvciB0aGUgYWxpZ25tZW50CitwYXJhbWV0ZXI6ICI8Y29kZT4uYWxpZ24gdHlwZTwvY29kZT4iLCB3aGVyZSBgdHlwZScgaXMgb25lIG9mIDxjb2RlPi5zaG9ydDwvY29kZT4sIDxjb2RlPi5sb25nPC9jb2RlPiwKKzxjb2RlPi5xdWFkPC9jb2RlPiwgPGNvZGU+LnNpbmdsZTwvY29kZT4sIDxjb2RlPi5kb3VibGU8L2NvZGU+IHJlcHJlc2VudGluZyBhbGlnbm1lbnRzIG9mIDIsIDQsCisxNiwgNCwgYW5kIDgsIHJlc3BlY3RpdmVseS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRGlyZWN0aXZlc18wMDJkaTk2MC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRGlyZWN0aXZlc18wMDJkaTk2MC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMWU5YzcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9EaXJlY3RpdmVzXzAwMmRpOTYwLmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGlyZWN0aXZlcy1pOTYwIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpOTYwXzAwMmREZXBlbmRlbnQuaHRtbCNpOTYwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpOTYwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZsb2F0aW5nLVBvaW50XzAwMmRpOTYwLmh0bWwjRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAiIHRpdGxlPSJGbG9hdGluZyBQb2ludC1pOTYwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3Bjb2Rlcy1mb3ItaTk2MC5odG1sI09wY29kZXMtZm9yLWk5NjAiIHRpdGxlPSJPcGNvZGVzIGZvciBpOTYwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGlyZWN0aXZlcy1pOTYwIj48L2E+Cis8YSBuYW1lPSJEaXJlY3RpdmVzXzAwMmRpOTYwIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9wY29kZXMtZm9yLWk5NjAuaHRtbCNPcGNvZGVzLWZvci1pOTYwIj5PcGNvZGVzIGZvciBpOTYwPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAuaHRtbCNGbG9hdGluZy1Qb2ludF8wMDJkaTk2MCI+RmxvYXRpbmcgUG9pbnQtaTk2MDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Imk5NjBfMDAyZERlcGVuZGVudC5odG1sI2k5NjBfMDAyZERlcGVuZGVudCI+aTk2MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE3LjMgaTk2MCBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1pOTYwLTEwOTYiPjwvYT48YSBuYW1lPSJpbmRleC1pOTYwLW1hY2hpbmUtZGlyZWN0aXZlcy0xMDk3Ij48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jic3NfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pOTYwLTEwOTgiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LmJzcyA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmxlbmd0aDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YWxpZ248L3Zhcj48ZGQ+UmVzZXJ2ZSA8dmFyPmxlbmd0aDwvdmFyPiBieXRlcyBpbiB0aGUgYnNzIHNlY3Rpb24gZm9yIGEgbG9jYWwgPHZhcj5zeW1ib2w8L3Zhcj4sCithbGlnbmVkIHRvIHRoZSBwb3dlciBvZiB0d28gc3BlY2lmaWVkIGJ5IDx2YXI+YWxpZ248L3Zhcj4uICA8dmFyPmxlbmd0aDwvdmFyPiBhbmQKKzx2YXI+YWxpZ248L3Zhcj4gbXVzdCBiZSBwb3NpdGl2ZSBhYnNvbHV0ZSBleHByZXNzaW9ucy4gIFRoaXMgZGlyZWN0aXZlCitkaWZmZXJzIGZyb20gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubGNvbW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb25seSBpbiB0aGF0IGl0IHBlcm1pdHMgeW91IHRvIHNwZWNpZnkKK2FuIGFsaWdubWVudC4gIFNlZSA8YSBocmVmPSJMY29tbS5odG1sI0xjb21tIj48Y29kZT4ubGNvbW08L2NvZGU+PC9hPi4gCis8L2RsPgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JleHRlbmRlZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLWk5NjAtMTA5OSI+PC9hPgorPGRsPjxkdD48Y29kZT4uZXh0ZW5kZWQgPC9jb2RlPjx2YXI+ZmxvbnVtczwvdmFyPjxkZD48Y29kZT4uZXh0ZW5kZWQ8L2NvZGU+IGV4cGVjdHMgemVybyBvciBtb3JlIGZsb251bXMsIHNlcGFyYXRlZCBieSBjb21tYXM7IGZvcgorZWFjaCBmbG9udW0sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmV4dGVuZGVkPC9zcGFuPjwvc2FtcD4mcnNxdW87IGVtaXRzIGFuIDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4gZXh0ZW5kZWQtZm9ybWF0ICg4MC1iaXQpCitmbG9hdGluZy1wb2ludCBudW1iZXIuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsZWFmcHJvY18wMDdkLWRpcmVjdGl2ZV8wMDJjLWk5NjAtMTEwMCI+PC9hPjxicj48ZHQ+PGNvZGU+LmxlYWZwcm9jIDwvY29kZT48dmFyPmNhbGwtbGFiPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iYWwtbGFiPC92YXI+PGRkPllvdSBjYW4gdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5sZWFmcHJvYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKK29wdGltaXplZCA8Y29kZT5jYWxsajwvY29kZT4gaW5zdHJ1Y3Rpb24gdG8gZW5hYmxlIGZhc3RlciBjYWxscyBvZiBsZWFmCitwcm9jZWR1cmVzLiAgSWYgYSBwcm9jZWR1cmUgaXMga25vd24gdG8gY2FsbCBubyBvdGhlciBwcm9jZWR1cmVzLCB5b3UKK21heSBkZWZpbmUgYW4gZW50cnkgcG9pbnQgdGhhdCBza2lwcyBwcm9jZWR1cmUgcHJvbG9nIGNvZGUgKGFuZCB0aGF0IGRvZXMKK25vdCBkZXBlbmQgb24gc3lzdGVtLXN1cHBsaWVkIHNhdmVkIGNvbnRleHQpLCBhbmQgZGVjbGFyZSBpdCBhcyB0aGUKKzx2YXI+YmFsLWxhYjwvdmFyPiB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5sZWFmcHJvYzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIElmIHRoZSBwcm9jZWR1cmUgYWxzbyBoYXMgYW4KK2VudHJ5IHBvaW50IHRoYXQgZ29lcyB0aHJvdWdoIHRoZSBub3JtYWwgcHJvbG9nLCB5b3UgY2FuIHNwZWNpZnkgdGhhdAorZW50cnkgcG9pbnQgYXMgPHZhcj5jYWxsLWxhYjwvdmFyPi4KKworICAgICA8cD5BICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmxlYWZwcm9jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRlY2xhcmF0aW9uIGlzIG1lYW50IGZvciB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKK29wdGltaXplZCBjYWxsIGluc3RydWN0aW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbGo8L3NwYW4+PC9zYW1wPiZyc3F1bzs7IHRoZSBkaXJlY3RpdmUgcmVjb3JkcyB0aGUgZGF0YQorbmVlZGVkIGxhdGVyIHRvIGNob29zZSBiZXR3ZWVuIGNvbnZlcnRpbmcgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbGo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW50byBhCis8Y29kZT5iYWw8L2NvZGU+IG9yIGEgPGNvZGU+Y2FsbDwvY29kZT4uCisKKyAgICAgPHA+PHZhcj5jYWxsLWxhYjwvdmFyPiBpcyBvcHRpb25hbDsgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcHJlc2VudCwgb3IgaWYgdGhlCit0d28gYXJndW1lbnRzIGFyZSBpZGVudGljYWwsIHRoZSBzaW5nbGUgYXJndW1lbnQgaXMgYXNzdW1lZCB0byBiZSB0aGUKKzxjb2RlPmJhbDwvY29kZT4gZW50cnkgcG9pbnQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzeXNwcm9jXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTk2MC0xMTAxIj48L2E+PGJyPjxkdD48Y29kZT4uc3lzcHJvYyA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5pbmRleDwvdmFyPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3lzcHJvYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgZGVmaW5lcyBhIG5hbWUgZm9yIGEgc3lzdGVtIHByb2NlZHVyZS4gCitBZnRlciB5b3UgZGVmaW5lIGl0IHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnN5c3Byb2M8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHlvdSBjYW4gdXNlIDx2YXI+bmFtZTwvdmFyPiB0bworcmVmZXIgdG8gdGhlIHN5c3RlbSBwcm9jZWR1cmUgaWRlbnRpZmllZCBieSA8dmFyPmluZGV4PC92YXI+IHdoZW4gY2FsbGluZworcHJvY2VkdXJlcyB3aXRoIHRoZSBvcHRpbWl6ZWQgY2FsbCBpbnN0cnVjdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNhbGxqPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPkJvdGggYXJndW1lbnRzIGFyZSByZXF1aXJlZDsgPHZhcj5pbmRleDwvdmFyPiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzEKKyhpbmNsdXNpdmUpLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RvdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRG90Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwMDUzMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RvdC5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRvdCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiIHRpdGxlPSJTeW1ib2xzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjU3ltYm9sLU5hbWVzIiB0aXRsZT0iU3ltYm9sIE5hbWVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltYm9sLUF0dHJpYnV0ZXMuaHRtbCNTeW1ib2wtQXR0cmlidXRlcyIgdGl0bGU9IlN5bWJvbCBBdHRyaWJ1dGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRG90Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN5bWJvbC1BdHRyaWJ1dGVzLmh0bWwjU3ltYm9sLUF0dHJpYnV0ZXMiPlN5bWJvbCBBdHRyaWJ1dGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjU3ltYm9sLU5hbWVzIj5TeW1ib2wgTmFtZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyI+U3ltYm9sczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuNCBUaGUgU3BlY2lhbCBEb3QgU3ltYm9sPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZG90LV8wMDI4c3ltYm9sXzAwMjktMjIxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZV8wMDdkLV8wMDI4c3ltYm9sXzAwMjktMjIyIj48L2E+PGEgbmFtZT0iaW5kZXgtY3VycmVudC1hZGRyZXNzLTIyMyI+PC9hPjxhIG5hbWU9ImluZGV4LWxvY2F0aW9uLWNvdW50ZXItMjI0Ij48L2E+VGhlIHNwZWNpYWwgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWZlcnMgdG8gdGhlIGN1cnJlbnQgYWRkcmVzcyB0aGF0Cis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBpcyBhc3NlbWJsaW5nIGludG8uICBUaHVzLCB0aGUgZXhwcmVzc2lvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1lbHZpbjoKKy5sb25nIC48L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGVmaW5lcyA8Y29kZT5tZWx2aW48L2NvZGU+IHRvIGNvbnRhaW4gaXRzIG93biBhZGRyZXNzLiAKK0Fzc2lnbmluZyBhIHZhbHVlIHRvIDxjb2RlPi48L2NvZGU+IGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYSA8Y29kZT4ub3JnPC9jb2RlPgorZGlyZWN0aXZlLiAKK1RodXMsIHRoZSBleHByZXNzaW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lj0uKzQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIHNhbWUgYXMgc2F5aW5nCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zcGFjZSA0PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Eb3VibGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0RvdWJsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YmNhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Eb3VibGUuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Eb3VibGUgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRpbS5odG1sI0RpbSIgdGl0bGU9IkRpbSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVqZWN0Lmh0bWwjRWplY3QiIHRpdGxlPSJFamVjdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRvdWJsZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFamVjdC5odG1sI0VqZWN0Ij5FamVjdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRpbS5odG1sI0RpbSI+RGltPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjM3IDxjb2RlPi5kb3VibGUgPC9jb2RlPjx2YXI+ZmxvbnVtczwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZG91YmxlXzAwN2QtZGlyZWN0aXZlLTMxNCI+PC9hPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50LW51bWJlcnMtXzAwMjhkb3VibGVfMDAyOS0zMTUiPjwvYT48Y29kZT4uZG91YmxlPC9jb2RlPiBleHBlY3RzIHplcm8gb3IgbW9yZSBmbG9udW1zLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgSXQKK2Fzc2VtYmxlcyBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAKK1RoZSBleGFjdCBraW5kIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgZW1pdHRlZCBkZXBlbmRzIG9uIGhvdworPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaXMgY29uZmlndXJlZC4gIFNlZSA8YSBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VTQV8wMDJmMzkwLURpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VTQV8wMDJmMzkwLURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJmNmJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTAtRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsMTI5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FU0EvMzkwIERpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRVNBLzM5MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludC5odG1sI0VTQV8wMDJmMzkwLUZsb2F0aW5nLVBvaW50IiB0aXRsZT0iRVNBLzM5MCBGbG9hdGluZyBQb2ludCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVTQV8wMDJmMzkwLU9wY29kZXMuaHRtbCNFU0FfMDAyZjM5MC1PcGNvZGVzIiB0aXRsZT0iRVNBLzM5MCBPcGNvZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRVNBJTJmMzkwLURpcmVjdGl2ZXMiPjwvYT4KKzxhIG5hbWU9IkVTQV8wMDJmMzkwLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRVNBXzAwMmYzOTAtT3Bjb2Rlcy5odG1sI0VTQV8wMDJmMzkwLU9wY29kZXMiPkVTQS8zOTAgT3Bjb2RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVTQV8wMDJmMzkwLUZsb2F0aW5nLVBvaW50Lmh0bWwjRVNBXzAwMmYzOTAtRmxvYXRpbmctUG9pbnQiPkVTQS8zOTAgRmxvYXRpbmcgUG9pbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+RVNBLzM5MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE0LjUgRVNBLzM5MCBBc3NlbWJsZXIgRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxjb2RlPmFzPC9jb2RlPiBmb3IgdGhlIEVTQS8zOTAgc3VwcG9ydHMgYWxsIG9mIHRoZSBzdGFuZGFyZCBFTEYvU1ZSNAorYXNzZW1ibGVyIGRpcmVjdGl2ZXMgdGhhdCBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgbWFpbiBwYXJ0IG9mIHRoaXMKK2RvY3VtZW50YXRpb24uICBTZXZlcmFsIGFkZGl0aW9uYWwgZGlyZWN0aXZlcyBhcmUgc3VwcG9ydGVkIGluIG9yZGVyCit0byBpbXBsZW1lbnQgdGhlIEVTQS8zOTAgYWRkcmVzc2luZyBtb2RlbC4gIFRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGVzZQorYXJlIDxjb2RlPi51c2luZzwvY29kZT4gYW5kIDxjb2RlPi5sdG9yZzwvY29kZT4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtRVNBXzAwMmYzOTBfMDAyZG9ubHktZGlyZWN0aXZlcy04OTkiPjwvYT5UaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgZGlyZWN0aXZlcyBpbiA8Y29kZT5hczwvY29kZT4gZm9yIHRoZSBFU0EvMzkwOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4uZGM8L2NvZGU+PGRkPkEgc21hbGwgc3Vic2V0IG9mIHRoZSB1c3VhbCBEQyBkaXJlY3RpdmUgaXMgc3VwcG9ydGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmRyb3AgPC9jb2RlPjx2YXI+cmVnbm88L3Zhcj48ZGQ+U3RvcCB1c2luZyA8dmFyPnJlZ25vPC92YXI+IGFzIHRoZSBiYXNlIHJlZ2lzdGVyLiAgVGhlIDx2YXI+cmVnbm88L3Zhcj4gbXVzdAoraGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVjbGFyZWQgd2l0aCBhIDxjb2RlPi51c2luZzwvY29kZT4gZGlyZWN0aXZlIGluIHRoZQorc2FtZSBzZWN0aW9uIGFzIHRoZSBjdXJyZW50IHNlY3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZWJjZGljIDwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxkZD5FbWl0IHRoZSBFQkNESUMgZXF1aXZhbGVudCBvZiB0aGUgaW5kaWNhdGVkIHN0cmluZy4gIFRoZSBlbWl0dGVkIHN0cmluZword2lsbCBiZSBudWxsIHRlcm1pbmF0ZWQuICBOb3RlIHRoYXQgdGhlIGRpcmVjdGl2ZXMgPGNvZGU+LnN0cmluZzwvY29kZT4gZXRjLiBlbWl0Cithc2NpaSBzdHJpbmdzIGJ5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5FUVU8L2NvZGU+PGRkPlRoZSBzdGFuZGFyZCBITEFTTS1zdHlsZSBFUVUgZGlyZWN0aXZlIGlzIG5vdCBzdXBwb3J0ZWQ7IGhvd2V2ZXIsIHRoZQorc3RhbmRhcmQgPGNvZGU+YXM8L2NvZGU+IGRpcmVjdGl2ZSAuZXF1IGNhbiBiZSB1c2VkIHRvIHRoZSBzYW1lIGVmZmVjdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5sdG9yZzwvY29kZT48ZGQ+RHVtcCB0aGUgbGl0ZXJhbCBwb29sIGFjY3VtdWxhdGVkIHNvIGZhcjsgYmVnaW4gYSBuZXcgbGl0ZXJhbCBwb29sLiAKK1RoZSBsaXRlcmFsIHBvb2wgd2lsbCBiZSB3cml0dGVuIGluIHRoZSBjdXJyZW50IHNlY3Rpb247IGluIG9yZGVyIHRvCitnZW5lcmF0ZSBjb3JyZWN0IGFzc2VtYmx5LCBhIDxjb2RlPi51c2luZzwvY29kZT4gbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseQorc3BlY2lmaWVkIGluIHRoZSBzYW1lIHNlY3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4udXNpbmcgPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5yZWdubzwvdmFyPjxkZD5Vc2UgPHZhcj5yZWdubzwvdmFyPiBhcyB0aGUgYmFzZSByZWdpc3RlciBmb3IgYWxsIHN1YnNlcXVlbnQgUlgsIFJTLCBhbmQgU1MgZm9ybQoraW5zdHJ1Y3Rpb25zLiBUaGUgPHZhcj5leHByPC92YXI+IHdpbGwgYmUgZXZhbHVhdGVkIHRvIG9idGFpbiB0aGUgYmFzZSBhZGRyZXNzOwordXN1YWxseSwgPHZhcj5leHByPC92YXI+IHdpbGwgbWVyZWx5IGJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5UaGlzIGFzc2VtYmxlciBhbGxvd3MgdHdvIDxjb2RlPi51c2luZzwvY29kZT4gZGlyZWN0aXZlcyB0byBiZSBzaW11bHRhbmVvdXNseQorb3V0c3RhbmRpbmcsIG9uZSBpbiB0aGUgPGNvZGU+LnRleHQ8L2NvZGU+IHNlY3Rpb24sIGFuZCBvbmUgaW4gYW5vdGhlciBzZWN0aW9uCisodHlwaWNhbGx5LCB0aGUgPGNvZGU+LmRhdGE8L2NvZGU+IHNlY3Rpb24pLiAgVGhpcyBmZWF0dXJlIGFsbG93cworZHluYW1pY2FsbHkgbG9hZGVkIG9iamVjdHMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gYSByZWxhdGl2ZWx5CitzdHJhaWdodGZvcndhcmQgd2F5LiAgQSA8Y29kZT4udXNpbmc8L2NvZGU+IGRpcmVjdGl2ZSBtdXN0IGFsd2F5cyBiZSBzcGVjaWZpZWQKK2luIHRoZSA8Y29kZT4udGV4dDwvY29kZT4gc2VjdGlvbjsgdGhpcyB3aWxsIHNwZWNpZnkgdGhlIGJhc2UgcmVnaXN0ZXIgdGhhdAord2lsbCBiZSB1c2VkIGZvciBicmFuY2hlcyBpbiB0aGUgPGNvZGU+LnRleHQ8L2NvZGU+IHNlY3Rpb24uICBBIHNlY29uZAorPGNvZGU+LnVzaW5nPC9jb2RlPiBtYXkgYmUgc3BlY2lmaWVkIGluIGFub3RoZXIgc2VjdGlvbjsgdGhpcyB3aWxsIHNwZWNpZnkKK3RoZSBiYXNlIHJlZ2lzdGVyIHRoYXQgaXMgdXNlZCBmb3Igbm9uLWxhYmVsIGFkZHJlc3MgbGl0ZXJhbHMuIAorV2hlbiBhIHNlY29uZCA8Y29kZT4udXNpbmc8L2NvZGU+IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgc3Vic2VxdWVudAorPGNvZGU+Lmx0b3JnPC9jb2RlPiBtdXN0IGJlIHB1dCBpbiB0aGUgc2FtZSBzZWN0aW9uOyBvdGhlcndpc2UgYW4gZXJyb3Igd2lsbAorcmVzdWx0LgorCisgICAgIDxwPlRodXMsIGZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgdXNlcyA8Y29kZT5yMzwvY29kZT4gdG8gYWRkcmVzcyBicmFuY2gKK3RhcmdldHMgYW5kIDxjb2RlPnI0PC9jb2RlPiB0byBhZGRyZXNzIHRoZSBsaXRlcmFsIHBvb2wsIHdoaWNoIGhhcyBiZWVuIHdyaXR0ZW4KK3RvIHRoZSA8Y29kZT4uZGF0YTwvY29kZT4gc2VjdGlvbi4gIFRoZSBpcywgdGhlIGNvbnN0YW50cyA8Y29kZT49QShzb21lX3JvdXRpbmUpPC9jb2RlPiwKKzxjb2RlPj1IJzQyJzwvY29kZT4gYW5kIDxjb2RlPj1FJzMuMTQxNic8L2NvZGU+IHdpbGwgYWxsIGFwcGVhciBpbiB0aGUgPGNvZGU+LmRhdGE8L2NvZGU+CitzZWN0aW9uLgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAuZGF0YQorICAgICAgICAgIAkudXNpbmcgIExJVFBPT0wscjQKKyAgICAgICAgICAudGV4dAorICAgICAgICAgIAlCQVNSCXIzLDAKKyAgICAgICAgICAJLnVzaW5nCSoscjMKKyAgICAgICAgICAgICAgICAgIEIgICAgICAgU1RBUlQKKyAgICAgICAgICAJLmxvbmcJTElUUE9PTAorICAgICAgICAgIFNUQVJUOgorICAgICAgICAgIAlMCXI0LDQoLHIzKQorICAgICAgICAgIAlMCXIxNSw9QShzb21lX3JvdXRpbmUpCisgICAgICAgICAgCUxUUglyMTUscjE1CisgICAgICAgICAgCUJORQlMQUJFTAorICAgICAgICAgIAlBSAlyMCw9SCc0MicKKyAgICAgICAgICBMQUJFTDoKKyAgICAgICAgICAJTUUJcjYsPUUnMy4xNDE2JworICAgICAgICAgIC5kYXRhCisgICAgICAgICAgTElUUE9PTDoKKyAgICAgICAgICAJLmx0b3JnCis8L3ByZT4KKyAgICAgPHA+Tm90ZSB0aGF0IHRoaXMgZHVhbC08Y29kZT4udXNpbmc8L2NvZGU+IGRpcmVjdGl2ZSBzZW1hbnRpY3MgZXh0ZW5kcworYW5kIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggSExBU00gc2VtYW50aWNzLiAgTm90ZSB0aGF0IHRoaXMgYXNzZW1ibGVyCitkaXJlY3RpdmUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZnVsbCByYW5nZSBvZiBITEFTTSBzZW1hbnRpY3MuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VTQV8wMDJmMzkwLUZsb2F0aW5nLVBvaW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYmMzMDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVTQS8zOTAgRmxvYXRpbmcgUG9pbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRVNBLzM5MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFU0FfMDAyZjM5MC1TeW50YXguaHRtbCNFU0FfMDAyZjM5MC1TeW50YXgiIHRpdGxlPSJFU0EvMzkwIFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVTQV8wMDJmMzkwLURpcmVjdGl2ZXMuaHRtbCNFU0FfMDAyZjM5MC1EaXJlY3RpdmVzIiB0aXRsZT0iRVNBLzM5MCBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRVNBJTJmMzkwLUZsb2F0aW5nLVBvaW50Ij48L2E+Cis8YSBuYW1lPSJFU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFU0FfMDAyZjM5MC1EaXJlY3RpdmVzLmh0bWwjRVNBXzAwMmYzOTAtRGlyZWN0aXZlcyI+RVNBLzM5MCBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRVNBXzAwMmYzOTAtU3ludGF4Lmh0bWwjRVNBXzAwMmYzOTAtU3ludGF4Ij5FU0EvMzkwIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5FU0EvMzkwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTQuNCBGbG9hdGluZyBQb2ludDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtRVNBXzAwMmYzOTAtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS04OTciPjwvYT48YSBuYW1lPSJpbmRleC1FU0FfMDAyZjM5MC1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTg5OCI+PC9hPlRoZSBhc3NlbWJsZXIgZ2VuZXJhdGVzIG9ubHkgPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPiBmbG9hdGluZy1wb2ludCBudW1iZXJzLiAgVGhlIG9sZGVyCitmbG9hdGluZyBwb2ludCBmb3JtYXRzIGFyZSBub3Qgc3VwcG9ydGVkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FU0FfMDAyZjM5MC1Ob3Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTAtTm90ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDRkMDQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTAtTm90ZXMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FU0EvMzkwIE5vdGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IkVTQS8zOTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRVNBXzAwMmYzOTAtT3B0aW9ucy5odG1sI0VTQV8wMDJmMzkwLU9wdGlvbnMiIHRpdGxlPSJFU0EvMzkwIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFU0ElMmYzOTAtTm90ZXMiPjwvYT4KKzxhIG5hbWU9IkVTQV8wMDJmMzkwLU5vdGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVTQV8wMDJmMzkwLU9wdGlvbnMuaHRtbCNFU0FfMDAyZjM5MC1PcHRpb25zIj5FU0EvMzkwIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+RVNBLzM5MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE0LjEgTm90ZXM8L2g0PgorCis8cD5UaGUgRVNBLzM5MCA8Y29kZT5hczwvY29kZT4gcG9ydCBpcyBjdXJyZW50bHkgaW50ZW5kZWQgdG8gYmUgYSBiYWNrLWVuZAorZm9yIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNjIj5jYzwvc3Bhbj4gY29tcGlsZXIuICBJdCBpcyBub3QgSExBU00gY29tcGF0aWJsZSwgYWx0aG91Z2gKK2l0IGRvZXMgc3VwcG9ydCBhIHN1YnNldCBvZiBzb21lIG9mIHRoZSBITEFTTSBkaXJlY3RpdmVzLiAgVGhlIG9ubHkKK3N1cHBvcnRlZCBiaW5hcnkgZmlsZSBmb3JtYXQgaXMgRUxGOyBub25lIG9mIHRoZSB1c3VhbCBNVlMvVk0vT0UvVVNTCitvYmplY3QgZmlsZSBmb3JtYXRzLCBzdWNoIGFzIEVTRCBvciBYU0QsIGFyZSBzdXBwb3J0ZWQuCisKKyAgIDxwPldoZW4gdXNlZCB3aXRoIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNjIj5jYzwvc3Bhbj4gY29tcGlsZXIsIHRoZSBFU0EvMzkwIDxjb2RlPmFzPC9jb2RlPgord2lsbCBwcm9kdWNlIGNvcnJlY3QsIGZ1bGx5IHJlbG9jYXRlZCwgZnVuY3Rpb25hbCBiaW5hcmllcywgYW5kIGhhcyBiZWVuCit1c2VkIHRvIGNvbXBpbGUgYW5kIGV4ZWN1dGUgbGFyZ2UgcHJvamVjdHMuICBIb3dldmVyLCBtYW55IGFzcGVjdHMgc2hvdWxkCitzdGlsbCBiZSBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbDsgdGhlc2UgaW5jbHVkZSBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LAorZHluYW1pY2FsbHkgbG9hZGFibGUgb2JqZWN0cywgYW5kIGFueSByZWxvY2F0aW9uIG90aGVyIHRoYW4gdGhlIDMxLWJpdAorcmVsb2NhdGlvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTAtT3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTAtT3Bjb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2VlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FU0FfMDAyZjM5MC1PcGNvZGVzLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RVNBLzM5MCBPcGNvZGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IkVTQS8zOTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRVNBXzAwMmYzOTAtRGlyZWN0aXZlcy5odG1sI0VTQV8wMDJmMzkwLURpcmVjdGl2ZXMiIHRpdGxlPSJFU0EvMzkwIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFU0ElMmYzOTAtT3Bjb2RlcyI+PC9hPgorPGEgbmFtZT0iRVNBXzAwMmYzOTAtT3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVTQV8wMDJmMzkwLURpcmVjdGl2ZXMuaHRtbCNFU0FfMDAyZjM5MC1EaXJlY3RpdmVzIj5FU0EvMzkwIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+RVNBLzM5MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE0LjYgT3Bjb2RlczwvaDQ+CisKKzxwPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgRVNBLzM5MCBtYWNoaW5lIGluc3RydWN0aW9uIHNldCwgc2VlCis8Y2l0ZT5FU0EvMzkwIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uPC9jaXRlPiAoSUJNIFB1YmxpY2F0aW9uIE51bWJlciBEWjlBUjAwNCkuCisKKzwhLS0gQ29weXJpZ2h0IDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIC0tPgorPCEtLSAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIC0tPgorPCEtLSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VTQV8wMDJmMzkwLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VTQV8wMDJmMzkwLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjBjYWNiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTAtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVTQS8zOTAgT3B0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI0VTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJFU0EvMzkwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVTQV8wMDJmMzkwLU5vdGVzLmh0bWwjRVNBXzAwMmYzOTAtTm90ZXMiIHRpdGxlPSJFU0EvMzkwIE5vdGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRVNBXzAwMmYzOTAtU3ludGF4Lmh0bWwjRVNBXzAwMmYzOTAtU3ludGF4IiB0aXRsZT0iRVNBLzM5MCBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFU0ElMmYzOTAtT3B0aW9ucyI+PC9hPgorPGEgbmFtZT0iRVNBXzAwMmYzOTAtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFU0FfMDAyZjM5MC1TeW50YXguaHRtbCNFU0FfMDAyZjM5MC1TeW50YXgiPkVTQS8zOTAgU3ludGF4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRVNBXzAwMmYzOTAtTm90ZXMuaHRtbCNFU0FfMDAyZjM5MC1Ob3RlcyI+RVNBLzM5MCBOb3RlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5FU0EvMzkwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTQuMiBPcHRpb25zPC9oND4KKworPHA+PGNvZGU+YXM8L2NvZGU+IGhhcyBubyBtYWNoaW5lLWRlcGVuZGVudCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgdGhlIEVTQS8zOTAuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUVTQV8wMDJmMzkwLVN5bnRheC04OTYiPjwvYT4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTAtU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FU0FfMDAyZjM5MC1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDI5OThkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTAtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSwxMDYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVTQS8zOTAgU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IkVTQS8zOTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRVNBXzAwMmYzOTAtT3B0aW9ucy5odG1sI0VTQV8wMDJmMzkwLU9wdGlvbnMiIHRpdGxlPSJFU0EvMzkwIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludC5odG1sI0VTQV8wMDJmMzkwLUZsb2F0aW5nLVBvaW50IiB0aXRsZT0iRVNBLzM5MCBGbG9hdGluZyBQb2ludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVTQSUyZjM5MC1TeW50YXgiPjwvYT4KKzxhIG5hbWU9IkVTQV8wMDJmMzkwLVN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludC5odG1sI0VTQV8wMDJmMzkwLUZsb2F0aW5nLVBvaW50Ij5FU0EvMzkwIEZsb2F0aW5nIFBvaW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRVNBXzAwMmYzOTAtT3B0aW9ucy5odG1sI0VTQV8wMDJmMzkwLU9wdGlvbnMiPkVTQS8zOTAgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5FU0EvMzkwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTQuMyBTeW50YXg8L2g0PgorCis8cD5UaGUgb3Bjb2RlL29wZXJhbmQgc3ludGF4IGZvbGxvd3MgdGhlIEVTQS8zOTAgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24KK21hbnVhbDsgYXNzZW1ibGVyIGRpcmVjdGl2ZXMgYW5kIGdlbmVyYWwgc3ludGF4IGFyZSBsb29zZWx5IGJhc2VkIG9uIHRoZQorcHJldmFpbGluZyBBVCZhbXA7VC9TVlI0L0VMRi9Tb2xhcmlzIHN0eWxlIG5vdGF0aW9uLiAgSExBU00tc3R5bGUgZGlyZWN0aXZlcworYXJlIDxlbT5ub3Q8L2VtPiBzdXBwb3J0ZWQgZm9yIHRoZSBtb3N0IHBhcnQsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aG9zZQorZGVzY3JpYmVkIGhlcmVpbi4KKworICAgPHA+QSBsZWFkaW5nIGRvdCBpbiBmcm9udCBvZiBkaXJlY3RpdmVzIGlzIG9wdGlvbmFsLCBhbmQgdGhlIGNhc2Ugb2YKK2RpcmVjdGl2ZXMgaXMgaWdub3JlZDsgdGh1cyBmb3IgZXhhbXBsZSwgLnVzaW5nIGFuZCBVU0lORyBoYXZlIHRoZSBzYW1lCitlZmZlY3QuCisKKyAgIDxwPkEgY29sb24gbWF5IGltbWVkaWF0ZWx5IGZvbGxvdyBhIGxhYmVsIGRlZmluaXRpb24uICBUaGlzIGlzCitzaW1wbHkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBob3cgbW9zdCBhc3NlbWJseSBsYW5ndWFnZSBwcm9ncmFtbWVycword3JpdGUgY29kZS4KKworICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRoZSBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyLgorCisgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIG5ld2xpbmUgdG8gc2VwYXJhdGUgc3RhdGVtZW50cy4KKworICAgPHA+U2luY2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGhhcyBubyBzcGVjaWFsIG1lYW5pbmcsIHlvdSBtYXkgdXNlIGl0IGluIHN5bWJvbCBuYW1lcy4KKworICAgPHA+UmVnaXN0ZXJzIGNhbiBiZSBnaXZlbiB0aGUgc3ltYm9saWMgbmFtZXMgcjAuLnIxNSwgZnAwLCBmcDIsIGZwNCwgZnA2LiAKK0J5IHVzaW5nIHRoZXNzZSBzeW1ib2xpYyBuYW1lcywgPGNvZGU+YXM8L2NvZGU+IGNhbiBkZXRlY3Qgc2ltcGxlCitzeW50YXggZXJyb3JzLiBUaGUgbmFtZSByYXJnIG9yIHIuYXJnIGlzIGEgc3lub255bSBmb3IgcjExLCBydGNhIG9yIHIudGNhCitmb3IgcjEyLCBzcCwgci5zcCwgZHNhIHIuZHNhIGZvciByMTMsIGxyIG9yIHIubHIgZm9yIHIxNCwgcmJhc2Ugb3Igci5iYXNlCitmb3IgcjMgYW5kIHJwZ3Qgb3Igci5wZ3QgZm9yIHI0LgorCisgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIGN1cnJlbnQgbG9jYXRpb24gY291bnRlci4gIFVubGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXQgaXMgYWx3YXlzCityZWxhdGl2ZSB0byB0aGUgbGFzdCBVU0lORyBkaXJlY3RpdmUuICBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0CitleHByZXNzaW9ucyBjYW5ub3QgdXNlIG11bHRpcGxpY2F0aW9uLCBhcyBhbnkgb2NjdXJyZW5jZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3dpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhdGlvbiBjb3VudGVyLgorCisgICA8cD5BbGwgbGFiZWxzIGFyZSByZWxhdGl2ZSB0byB0aGUgbGFzdCBVU0lORy4gIFRodXMsIGJyYW5jaGVzIHRvIGEgbGFiZWwKK2Fsd2F5cyBpbXBseSB0aGUgdXNlIG9mIGJhc2UrZGlzcGxhY2VtZW50LgorCisgICA8cD5NYW55IG9mIHRoZSB1c3VhbCBmb3JtcyBvZiBhZGRyZXNzIGNvbnN0YW50cyAvIGFkZHJlc3MgbGl0ZXJhbHMKK2FyZSBzdXBwb3J0ZWQuICBUaHVzLAorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAJLnVzaW5nCSoscjMKKyAgICAgCUwJcjE1LD1BKHNvbWVfcm91dGluZSkKKyAgICAgCUxNCXI2LHI3LD1WKHNvbWVfbG9uZ2xvbmdfZXh0ZXJuKQorICAgICAJQQlyMSw9RicxMicKKyAgICAgCUFICXIwLD1IJzQyJworICAgICAJTUUJcjYsPUUnMy4xNDE2JworICAgICAJTUQJcjYsPUQnMy4xNDE1OTI2NTM1ODk3OScKKyAgICAgCU8JcjYsPVhMNCdjYWNhZDBkMCcKKyAgICAgCS5sdG9yZworPC9wcmU+CisgICA8cD5zaG91bGQgYWxsIGJlaGF2ZSBhcyBleHBlY3RlZDogdGhhdCBpcywgYW4gZW50cnkgaW4gdGhlIGxpdGVyYWwKK3Bvb2wgd2lsbCBiZSBjcmVhdGVkIChvciByZXVzZWQgaWYgaXQgYWxyZWFkeSBleGlzdHMpLCBhbmQgdGhlCitpbnN0cnVjdGlvbiBvcGVyYW5kcyB3aWxsIGJlIHRoZSBkaXNwbGFjZW1lbnQgaW50byB0aGUgbGl0ZXJhbCBwb29sCit1c2luZyB0aGUgY3VycmVudCBiYXNlIHJlZ2lzdGVyIChhcyBsYXN0IGRlY2xhcmVkIHdpdGggdGhlIDxjb2RlPi51c2luZzwvY29kZT4KK2RpcmVjdGl2ZSkuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2QxNDNjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVTQS8zOTAtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIUFBBXzAwMmREZXBlbmRlbnQuaHRtbCNIUFBBXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJIUFBBLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRVNBJTJmMzkwLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50Ij5IUFBBLURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4xNCBFU0EvMzkwIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWkzNzAtc3VwcG9ydC04OTQiPjwvYT48YSBuYW1lPSJpbmRleC1FU0FfMDAyZjM5MC1zdXBwb3J0LTg5NSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iRVNBXzAwMmYzOTAtTm90ZXMuaHRtbCNFU0FfMDAyZjM5MC1Ob3RlcyI+RVNBLzM5MCBOb3RlczwvYT46ICAgICAgICAgICAgICAgICBOb3RlcworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iRVNBXzAwMmYzOTAtT3B0aW9ucy5odG1sI0VTQV8wMDJmMzkwLU9wdGlvbnMiPkVTQS8zOTAgT3B0aW9uczwvYT46ICAgICAgICAgICAgICAgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iRVNBXzAwMmYzOTAtU3ludGF4Lmh0bWwjRVNBXzAwMmYzOTAtU3ludGF4Ij5FU0EvMzkwIFN5bnRheDwvYT46ICAgICAgICAgICAgICAgIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iRVNBXzAwMmYzOTAtRmxvYXRpbmctUG9pbnQuaHRtbCNFU0FfMDAyZjM5MC1GbG9hdGluZy1Qb2ludCI+RVNBLzM5MCBGbG9hdGluZyBQb2ludDwvYT46ICAgICAgICBGbG9hdGluZyBQb2ludAorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iRVNBXzAwMmYzOTAtRGlyZWN0aXZlcy5odG1sI0VTQV8wMDJmMzkwLURpcmVjdGl2ZXMiPkVTQS8zOTAgRGlyZWN0aXZlczwvYT46ICAgICAgICAgICAgRVNBLzM5MCBNYWNoaW5lIERpcmVjdGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkVTQV8wMDJmMzkwLU9wY29kZXMuaHRtbCNFU0FfMDAyZjM5MC1PcGNvZGVzIj5FU0EvMzkwIE9wY29kZXM8L2E+OiAgICAgICAgICAgICAgIE9wY29kZXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VqZWN0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FamVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjJmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FamVjdC5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVqZWN0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEb3VibGUuaHRtbCNEb3VibGUiIHRpdGxlPSJEb3VibGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFbHNlLmh0bWwjRWxzZSIgdGl0bGU9IkVsc2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFamVjdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFbHNlLmh0bWwjRWxzZSI+RWxzZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRvdWJsZS5odG1sI0RvdWJsZSI+RG91YmxlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjM4IDxjb2RlPi5lamVjdDwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVqZWN0XzAwN2QtZGlyZWN0aXZlLTMxNiI+PC9hPjxhIG5hbWU9ImluZGV4LW5ldy1wYWdlXzAwMmMtaW4tbGlzdGluZ3MtMzE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtcGFnZV8wMDJjLWluLWxpc3RpbmdzLTMxOCI+PC9hPjxhIG5hbWU9ImluZGV4LWxpc3RpbmctY29udHJvbF8wMDNhLW5ldy1wYWdlLTMxOSI+PC9hPkZvcmNlIGEgcGFnZSBicmVhayBhdCB0aGlzIHBvaW50LCB3aGVuIGdlbmVyYXRpbmcgYXNzZW1ibHkgbGlzdGluZ3MuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Vsc2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Vsc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWZmZTgxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRWxzZS5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVsc2UgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVqZWN0Lmh0bWwjRWplY3QiIHRpdGxlPSJFamVjdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVsc2VpZi5odG1sI0Vsc2VpZiIgdGl0bGU9IkVsc2VpZiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVsc2UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRWxzZWlmLmh0bWwjRWxzZWlmIj5FbHNlaWY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFamVjdC5odG1sI0VqZWN0Ij5FamVjdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4zOSA8Y29kZT4uZWxzZTwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVsc2VfMDA3ZC1kaXJlY3RpdmUtMzIwIj48L2E+PGNvZGU+LmVsc2U8L2NvZGU+IGlzIHBhcnQgb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHN1cHBvcnQgZm9yIGNvbmRpdGlvbmFsCithc3NlbWJseTsgc2VlIDxhIGhyZWY9IklmLmh0bWwjSWYiPjxjb2RlPi5pZjwvY29kZT48L2E+LiAgSXQgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIHNlY3Rpb24KK29mIGNvZGUgdG8gYmUgYXNzZW1ibGVkIGlmIHRoZSBjb25kaXRpb24gZm9yIHRoZSBwcmVjZWRpbmcgPGNvZGU+LmlmPC9jb2RlPgord2FzIGZhbHNlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FbHNlaWYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Vsc2VpZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZjhhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FbHNlaWYuaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FbHNlaWYgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVsc2UuaHRtbCNFbHNlIiB0aXRsZT0iRWxzZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVuZC5odG1sI0VuZCIgdGl0bGU9IkVuZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVsc2VpZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFbmQuaHRtbCNFbmQiPkVuZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVsc2UuaHRtbCNFbHNlIj5FbHNlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjQwIDxjb2RlPi5lbHNlaWY8L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlbHNlaWZfMDA3ZC1kaXJlY3RpdmUtMzIxIj48L2E+PGNvZGU+LmVsc2VpZjwvY29kZT4gaXMgcGFydCBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwKK2Fzc2VtYmx5OyBzZWUgPGEgaHJlZj0iSWYuaHRtbCNJZiI+PGNvZGU+LmlmPC9jb2RlPjwvYT4uICBJdCBpcyBzaG9ydGhhbmQgZm9yIGJlZ2lubmluZyBhIG5ldworPGNvZGU+LmlmPC9jb2RlPiBibG9jayB0aGF0IHdvdWxkIG90aGVyd2lzZSBmaWxsIHRoZSBlbnRpcmUgPGNvZGU+LmVsc2U8L2NvZGU+IHNlY3Rpb24uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VtcHR5LUV4cHJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FbXB0eS1FeHBycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTVlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FbXB0eS1FeHBycy5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVtcHR5IEV4cHJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIiB0aXRsZT0iRXhwcmVzc2lvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjSW50ZWdlci1FeHBycyIgdGl0bGU9IkludGVnZXIgRXhwcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFbXB0eS1FeHBycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjSW50ZWdlci1FeHBycyI+SW50ZWdlciBFeHByczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xIEVtcHR5IEV4cHJlc3Npb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZW1wdHktZXhwcmVzc2lvbnMtMjQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXhwcmVzc2lvbnNfMDAyYy1lbXB0eS0yNDUiPjwvYT5BbiBlbXB0eSBleHByZXNzaW9uIGhhcyBubyB2YWx1ZTogaXQgaXMganVzdCB3aGl0ZXNwYWNlIG9yIG51bGwuIAorV2hlcmV2ZXIgYW4gYWJzb2x1dGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZCwgeW91IG1heSBvbWl0IHRoZQorZXhwcmVzc2lvbiwgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGFzc3VtZXMgYSB2YWx1ZSBvZiAoYWJzb2x1dGUpIDAuICBUaGlzCitpcyBjb21wYXRpYmxlIHdpdGggb3RoZXIgYXNzZW1ibGVycy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRW5kLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2MzMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRW5kLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RW5kIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFbHNlaWYuaHRtbCNFbHNlaWYiIHRpdGxlPSJFbHNlaWYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFbmRlZi5odG1sI0VuZGVmIiB0aXRsZT0iRW5kZWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFbmQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRW5kZWYuaHRtbCNFbmRlZiI+RW5kZWY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFbHNlaWYuaHRtbCNFbHNlaWYiPkVsc2VpZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny40MSA8Y29kZT4uZW5kPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kXzAwN2QtZGlyZWN0aXZlLTMyMiI+PC9hPjxjb2RlPi5lbmQ8L2NvZGU+IG1hcmtzIHRoZSBlbmQgb2YgdGhlIGFzc2VtYmx5IGZpbGUuICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBkb2VzIG5vdAorcHJvY2VzcyBhbnl0aGluZyBpbiB0aGUgZmlsZSBwYXN0IHRoZSA8Y29kZT4uZW5kPC9jb2RlPiBkaXJlY3RpdmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VuZGVmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FbmRlZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOGI5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FbmRlZi5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVuZGVmIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFbmQuaHRtbCNFbmQiIHRpdGxlPSJFbmQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFbmRmdW5jLmh0bWwjRW5kZnVuYyIgdGl0bGU9IkVuZGZ1bmMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFbmRlZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFbmRmdW5jLmh0bWwjRW5kZnVuYyI+RW5kZnVuYzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVuZC5odG1sI0VuZCI+RW5kPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjQyIDxjb2RlPi5lbmRlZjwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVuZGVmXzAwN2QtZGlyZWN0aXZlLTMyMyI+PC9hPlRoaXMgZGlyZWN0aXZlIGZsYWdzIHRoZSBlbmQgb2YgYSBzeW1ib2wgZGVmaW5pdGlvbiBiZWd1biB3aXRoCis8Y29kZT4uZGVmPC9jb2RlPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRW5kZnVuYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRW5kZnVuYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Y2FlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FbmRmdW5jLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RW5kZnVuYyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRW5kZWYuaHRtbCNFbmRlZiIgdGl0bGU9IkVuZGVmIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRW5kaWYuaHRtbCNFbmRpZiIgdGl0bGU9IkVuZGlmIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRW5kZnVuYyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFbmRpZi5odG1sI0VuZGlmIj5FbmRpZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVuZGVmLmh0bWwjRW5kZWYiPkVuZGVmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjQzIDxjb2RlPi5lbmRmdW5jPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kZnVuY18wMDdkLWRpcmVjdGl2ZS0zMjQiPjwvYT48Y29kZT4uZW5kZnVuYzwvY29kZT4gbWFya3MgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIHNwZWNpZmllZCB3aXRoIDxjb2RlPi5mdW5jPC9jb2RlPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRW5kaWYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VuZGlmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZmJmZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VuZGlmLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RW5kaWYgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVuZGZ1bmMuaHRtbCNFbmRmdW5jIiB0aXRsZT0iRW5kZnVuYyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVxdS5odG1sI0VxdSIgdGl0bGU9IkVxdSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVuZGlmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVxdS5odG1sI0VxdSI+RXF1PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRW5kZnVuYy5odG1sI0VuZGZ1bmMiPkVuZGZ1bmM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNDQgPGNvZGU+LmVuZGlmPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kaWZfMDA3ZC1kaXJlY3RpdmUtMzI1Ij48L2E+PGNvZGU+LmVuZGlmPC9jb2RlPiBpcyBwYXJ0IG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBzdXBwb3J0IGZvciBjb25kaXRpb25hbCBhc3NlbWJseTsKK2l0IG1hcmtzIHRoZSBlbmQgb2YgYSBibG9jayBvZiBjb2RlIHRoYXQgaXMgb25seSBhc3NlbWJsZWQKK2NvbmRpdGlvbmFsbHkuICBTZWUgPGEgaHJlZj0iSWYuaHRtbCNJZiI+PGNvZGU+LmlmPC9jb2RlPjwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VwaXBoYW55LU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VwaXBoYW55LU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzlkMTRjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXBpcGhhbnktT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVwaXBoYW55IE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkVwaXBoYW55XzAwMmREZXBlbmRlbnQuaHRtbCNFcGlwaGFueV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRXBpcGhhbnktRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRXBpcGhhbnktU3ludGF4Lmh0bWwjRXBpcGhhbnktU3ludGF4IiB0aXRsZT0iRXBpcGhhbnkgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXBpcGhhbnktT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFcGlwaGFueS1TeW50YXguaHRtbCNFcGlwaGFueS1TeW50YXgiPkVwaXBoYW55IFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkVwaXBoYW55XzAwMmREZXBlbmRlbnQuaHRtbCNFcGlwaGFueV8wMDJkRGVwZW5kZW50Ij5FcGlwaGFueS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjExLjEgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUVwaXBoYW55LW9wdGlvbnMtODUyIj48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLUVwaXBoYW55LTg1MyI+PC9hPjxjb2RlPmFzPC9jb2RlPiBoYXMgdHdvIGFkZGl0aW9uYWwgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIHRoZSBFcGlwaGFueQorYXJjaGl0ZWN0dXJlLgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtZXBpcGhhbnlfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtRXBpcGhhbnktODU0Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1tZXBpcGhhbnk8L2NvZGU+PGRkPlNwZWNpZmllcyB0aGF0IHRoZSBib3RoIDMyIGFuZCAxNiBiaXQgaW5zdHJ1Y3Rpb25zIGFyZSBhbGxvd2VkLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQgYmVoYXZpb3IuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1lcGlwaGFueTE2XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUVwaXBoYW55LTg1NSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1lcGlwaGFueTE2PC9jb2RlPjxkZD5SZXN0cmljdHMgdGhlIHBlcm1pdHRlZCBpbnN0cnVjdGlvbnMgdG8ganVzdCB0aGUgMTYgYml0IHNldC4gCis8L2RsPgorICAgPCEtLSBtYW4gZW5kIC0tPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcGlwaGFueS1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VwaXBoYW55LVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYWUxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcGlwaGFueS1TeW50YXguaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FcGlwaGFueSBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkVwaXBoYW55XzAwMmREZXBlbmRlbnQuaHRtbCNFcGlwaGFueV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRXBpcGhhbnktRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXBpcGhhbnktT3B0aW9ucy5odG1sI0VwaXBoYW55LU9wdGlvbnMiIHRpdGxlPSJFcGlwaGFueSBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXBpcGhhbnktU3ludGF4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRXBpcGhhbnktT3B0aW9ucy5odG1sI0VwaXBoYW55LU9wdGlvbnMiPkVwaXBoYW55IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFcGlwaGFueV8wMDJkRGVwZW5kZW50Lmh0bWwjRXBpcGhhbnlfMDAyZERlcGVuZGVudCI+RXBpcGhhbnktRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xMS4yIEVwaXBoYW55IFN5bnRheDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJFcGlwaGFueV8wMDJkQ2hhcnMuaHRtbCNFcGlwaGFueV8wMDJkQ2hhcnMiPkVwaXBoYW55LUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXBpcGhhbnlfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcGlwaGFueV8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmY1OTkyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXBpcGhhbnlfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXBpcGhhbnktQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkVwaXBoYW55LVN5bnRheC5odG1sI0VwaXBoYW55LVN5bnRheCIgdGl0bGU9IkVwaXBoYW55IFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVwaXBoYW55LUNoYXJzIj48L2E+Cis8YSBuYW1lPSJFcGlwaGFueV8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFcGlwaGFueS1TeW50YXguaHRtbCNFcGlwaGFueS1TeW50YXgiPkVwaXBoYW55IFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMTEuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1FcGlwaGFueS04NTYiPjwvYT48YSBuYW1lPSJpbmRleC1FcGlwaGFueS1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTg1NyI+PC9hPlRoZSBwcmVzZW5jZSBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZSBzdGFydAorb2YgYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgdGhlbiB0aGUgd2hvbGUKK2xpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY291bGQgYWxzbyBiZQorYSBsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtRXBpcGhhbnktODU4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLUVwaXBoYW55LTg1OSI+PC9hPjxhIG5hbWU9ImluZGV4LUVwaXBoYW55LWxpbmUtc2VwYXJhdG9yLTg2MCI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUKK2xpbmUuCisKKzwhLS0gQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAyMDAzLCAyMDA4LCAyMDExIC0tPgorPCEtLSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VwaXBoYW55XzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VwaXBoYW55XzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWZkMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXBpcGhhbnlfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVwaXBoYW55LURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRDMwVl8wMDJkRGVwZW5kZW50Lmh0bWwjRDMwVl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRDMwVi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIOF8wMDJmMzAwXzAwMmREZXBlbmRlbnQuaHRtbCNIOF8wMDJmMzAwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJIOC8zMDAtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXBpcGhhbnktRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJFcGlwaGFueV8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCI+SDgvMzAwLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQzMFZfMDAyZERlcGVuZGVudC5odG1sI0QzMFZfMDAyZERlcGVuZGVudCI+RDMwVi1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMTEgRXBpcGhhbnkgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtRXBpcGhhbnktc3VwcG9ydC04NTEiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkVwaXBoYW55LU9wdGlvbnMuaHRtbCNFcGlwaGFueS1PcHRpb25zIj5FcGlwaGFueSBPcHRpb25zPC9hPjogICAgICAgICAgICAgICBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJFcGlwaGFueS1TeW50YXguaHRtbCNFcGlwaGFueS1TeW50YXgiPkVwaXBoYW55IFN5bnRheDwvYT46ICAgICAgICAgICAgICAgIEVwaXBoYW55IFN5bnRheAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXF1Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcXUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGI5ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXF1Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXF1IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFbmRpZi5odG1sI0VuZGlmIiB0aXRsZT0iRW5kaWYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFcXVpdi5odG1sI0VxdWl2IiB0aXRsZT0iRXF1aXYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFcXUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXF1aXYuaHRtbCNFcXVpdiI+RXF1aXY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFbmRpZi5odG1sI0VuZGlmIj5FbmRpZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny40NSA8Y29kZT4uZXF1IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXF1XzAwN2QtZGlyZWN0aXZlLTMyNiI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2lnbmluZy12YWx1ZXMtdG8tc3ltYm9scy0zMjciPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2xzXzAwMmMtYXNzaWduaW5nLXZhbHVlcy10by0zMjgiPjwvYT5UaGlzIGRpcmVjdGl2ZSBzZXRzIHRoZSB2YWx1ZSBvZiA8dmFyPnN5bWJvbDwvdmFyPiB0byA8dmFyPmV4cHJlc3Npb248L3Zhcj4uIAorSXQgaXMgc3lub255bW91cyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNldDwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgc2VlIDxhIGhyZWY9IlNldC5odG1sI1NldCI+PGNvZGU+LnNldDwvY29kZT48L2E+LgorCisgICA8cD5UaGUgc3ludGF4IGZvciA8Y29kZT5lcXU8L2NvZGU+IG9uIHRoZSBIUFBBIGlzCismbHNxdW87PHNhbXA+PHZhcj5zeW1ib2w8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+IC5lcXUgPC9zcGFuPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5UaGUgc3ludGF4IGZvciA8Y29kZT5lcXU8L2NvZGU+IG9uIHRoZSBaODAgaXMKKyZsc3F1bzs8c2FtcD48dmFyPnN5bWJvbDwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4gZXF1IDwvc3Bhbj48dmFyPmV4cHJlc3Npb248L3Zhcj48L3NhbXA+JnJzcXVvOy4gCitPbiB0aGUgWjgwIGl0IGlzIGFuIGVyb3IgaWYgPHZhcj5zeW1ib2w8L3Zhcj4gaXMgYWxyZWFkeSBkZWZpbmVkLAorYnV0IHRoZSBzeW1ib2wgaXMgbm90IHByb3RlY3RlZCBmcm9tIGxhdGVyIHJlZGVmaW5pdGlvbi4gCitDb21wYXJlIDxhIGhyZWY9IkVxdWl2Lmh0bWwjRXF1aXYiPkVxdWl2PC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXF1aXYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VxdWl2Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY0NWJlYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0VxdWl2Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXF1aXYgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVxdS5odG1sI0VxdSIgdGl0bGU9IkVxdSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVxdi5odG1sI0VxdiIgdGl0bGU9IkVxdiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVxdWl2Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVxdi5odG1sI0VxdiI+RXF2PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRXF1Lmh0bWwjRXF1Ij5FcXU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNDYgPGNvZGU+LmVxdWl2IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXF1aXZfMDA3ZC1kaXJlY3RpdmUtMzI5Ij48L2E+VGhlIDxjb2RlPi5lcXVpdjwvY29kZT4gZGlyZWN0aXZlIGlzIGxpa2UgPGNvZGU+LmVxdTwvY29kZT4gYW5kIDxjb2RlPi5zZXQ8L2NvZGU+LCBleGNlcHQgdGhhdAordGhlIGFzc2VtYmxlciB3aWxsIHNpZ25hbCBhbiBlcnJvciBpZiA8dmFyPnN5bWJvbDwvdmFyPiBpcyBhbHJlYWR5IGRlZmluZWQuICBOb3RlIGEKK3N5bWJvbCB3aGljaCBoYXMgYmVlbiByZWZlcmVuY2VkIGJ1dCBub3QgYWN0dWFsbHkgZGVmaW5lZCBpcyBjb25zaWRlcmVkIHRvIGJlCit1bmRlZmluZWQuCisKKyAgIDxwPkV4Y2VwdCBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoZSBlcnJvciBtZXNzYWdlLCB0aGlzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0bworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5pZmRlZiBTWU0KKyAgICAgLmVycgorICAgICAuZW5kaWYKKyAgICAgLmVxdSBTWU0sVkFMCis8L3ByZT4KKyAgIDxwPnBsdXMgaXQgcHJvdGVjdHMgdGhlIHN5bWJvbCBmcm9tIGxhdGVyIHJlZGVmaW5pdGlvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXF2Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcXYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDc3NWZhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXF2Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXF2IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFcXVpdi5odG1sI0VxdWl2IiB0aXRsZT0iRXF1aXYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFcnIuaHRtbCNFcnIiIHRpdGxlPSJFcnIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFcXYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXJyLmh0bWwjRXJyIj5FcnI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFcXVpdi5odG1sI0VxdWl2Ij5FcXVpdjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny40NyA8Y29kZT4uZXF2IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXF2XzAwN2QtZGlyZWN0aXZlLTMzMCI+PC9hPlRoZSA8Y29kZT4uZXF2PC9jb2RlPiBkaXJlY3RpdmUgaXMgbGlrZSA8Y29kZT4uZXF1aXY8L2NvZGU+LCBidXQgbm8gYXR0ZW1wdCBpcyBtYWRlIHRvCitldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBvciBhbnkgcGFydCBvZiBpdCBpbW1lZGlhdGVseS4gIEluc3RlYWQgZWFjaCB0aW1lCit0aGUgcmVzdWx0aW5nIHN5bWJvbCBpcyB1c2VkIGluIGFuIGV4cHJlc3Npb24sIGEgc25hcHNob3Qgb2YgaXRzIGN1cnJlbnQKK3ZhbHVlIGlzIHRha2VuLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcnIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Vyci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNzM5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcnIuaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FcnIgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVxdi5odG1sI0VxdiIgdGl0bGU9IkVxdiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVycm9yLmh0bWwjRXJyb3IiIHRpdGxlPSJFcnJvciI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVyciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFcnJvci5odG1sI0Vycm9yIj5FcnJvcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVxdi5odG1sI0VxdiI+RXF2PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjQ4IDxjb2RlPi5lcnI8L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlcnJfMDA3ZC1kaXJlY3RpdmUtMzMxIj48L2E+SWYgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYXNzZW1ibGVzIGEgPGNvZGU+LmVycjwvY29kZT4gZGlyZWN0aXZlLCBpdCB3aWxsIHByaW50IGFuIGVycm9yCittZXNzYWdlIGFuZCwgdW5sZXNzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tWjwvc3Bhbj48L3NhbXA+IG9wdGlvbiB3YXMgdXNlZCwgaXQgd2lsbCBub3QgZ2VuZXJhdGUgYW4KK29iamVjdCBmaWxlLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBzaWduYWwgYW4gZXJyb3IgaW4gY29uZGl0aW9uYWxseSBjb21waWxlZCBjb2RlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcnJvci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXJyb3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZThiZTUxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXJyb3IuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FcnJvciAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXJyLmh0bWwjRXJyIiB0aXRsZT0iRXJyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRXhpdG0uaHRtbCNFeGl0bSIgdGl0bGU9IkV4aXRtIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXJyb3IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXhpdG0uaHRtbCNFeGl0bSI+RXhpdG08L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFcnIuaHRtbCNFcnIiPkVycjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny40OSA8Y29kZT4uZXJyb3IgIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXJyb3ItZGlyZWN0aXZlLTMzMiI+PC9hPgorU2ltaWxhcmx5IHRvIDxjb2RlPi5lcnI8L2NvZGU+LCB0aGlzIGRpcmVjdGl2ZSBlbWl0cyBhbiBlcnJvciwgYnV0IHlvdSBjYW4gc3BlY2lmeSBhCitzdHJpbmcgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2UuICBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUKK21lc3NhZ2UsIGl0IGRlZmF1bHRzIHRvIDxjb2RlPiIuZXJyb3IgZGlyZWN0aXZlIGludm9rZWQgaW4gc291cmNlIGZpbGUiPC9jb2RlPi4gCitTZWUgPGEgaHJlZj0iRXJyb3JzLmh0bWwjRXJyb3JzIj5FcnJvciBhbmQgV2FybmluZyBNZXNzYWdlczwvYT4uCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgLmVycm9yICJUaGlzIGNvZGUgaGFzIG5vdCBiZWVuIGFzc2VtYmxlZCBhbmQgdGVzdGVkLiIKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXJyb3JzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FcnJvcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDEzYTIxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXJyb3JzLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXJyb3JzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3IiB0aXRsZT0iT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPYmplY3QuaHRtbCNPYmplY3QiIHRpdGxlPSJPYmplY3QiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFcnJvcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPYmplY3QuaHRtbCNPYmplY3QiPk9iamVjdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS43IEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC9oMz4KKworPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+Cis8cD48YSBuYW1lPSJpbmRleC1lcnJvci1tZXNzYWdlcy00MCI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmctbWVzc2FnZXMtNDEiPjwvYT48YSBuYW1lPSJpbmRleC1tZXNzYWdlcy1mcm9tLWFzc2VtYmxlci00MiI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IG1heSB3cml0ZSB3YXJuaW5ncyBhbmQgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIHN0YW5kYXJkIGVycm9yCitmaWxlICh1c3VhbGx5IHlvdXIgdGVybWluYWwpLiAgVGhpcyBzaG91bGQgbm90IGhhcHBlbiB3aGVuICBhIGNvbXBpbGVyCitydW5zIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGF1dG9tYXRpY2FsbHkuICBXYXJuaW5ncyByZXBvcnQgYW4gYXNzdW1wdGlvbiBtYWRlIHNvCit0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGNvdWxkIGtlZXAgYXNzZW1ibGluZyBhIGZsYXdlZCBwcm9ncmFtOyBlcnJvcnMgcmVwb3J0IGEKK2dyYXZlIHByb2JsZW0gdGhhdCBzdG9wcyB0aGUgYXNzZW1ibHkuCisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDxwPjxhIG5hbWU9ImluZGV4LWZvcm1hdC1vZi13YXJuaW5nLW1lc3NhZ2VzLTQzIj48L2E+V2FybmluZyBtZXNzYWdlcyBoYXZlIHRoZSBmb3JtYXQKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGZpbGVfbmFtZTo8Yj5OTk48L2I+Oldhcm5pbmcgTWVzc2FnZSBUZXh0Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+PGEgbmFtZT0iaW5kZXgtbGluZS1udW1iZXJzXzAwMmMtaW4td2FybmluZ3NfMDAyZmVycm9ycy00NCI+PC9hPih3aGVyZSA8Yj5OTk48L2I+IGlzIGEgbGluZSBudW1iZXIpLiAgSWYgYSBsb2dpY2FsIGZpbGUgbmFtZSBoYXMgYmVlbiBnaXZlbgorKHNlZSA8YSBocmVmPSJGaWxlLmh0bWwjRmlsZSI+PGNvZGU+LmZpbGU8L2NvZGU+PC9hPikgaXQgaXMgdXNlZCBmb3IgdGhlIGZpbGVuYW1lLCBvdGhlcndpc2UgdGhlIG5hbWUgb2YKK3RoZSBjdXJyZW50IGlucHV0IGZpbGUgaXMgdXNlZC4gIElmIGEgbG9naWNhbCBsaW5lIG51bWJlciB3YXMgZ2l2ZW4KKyhzZWUgPGEgaHJlZj0iTGluZS5odG1sI0xpbmUiPjxjb2RlPi5saW5lPC9jb2RlPjwvYT4pCit0aGVuIGl0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgcHJpbnRlZCwKK290aGVyd2lzZSB0aGUgYWN0dWFsIGxpbmUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgaXMgcHJpbnRlZC4gIFRoZQorbWVzc2FnZSB0ZXh0IGlzIGludGVuZGVkIHRvIGJlIHNlbGYgZXhwbGFuYXRvcnkgKGluIHRoZSBncmFuZCBVbml4Cit0cmFkaXRpb24pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1mb3JtYXQtb2YtZXJyb3ItbWVzc2FnZXMtNDUiPjwvYT5FcnJvciBtZXNzYWdlcyBoYXZlIHRoZSBmb3JtYXQKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBmaWxlX25hbWU6PGI+Tk5OPC9iPjpGQVRBTDpFcnJvciBNZXNzYWdlIFRleHQKKzwvcHJlPgorICAgPHA+VGhlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgYXJlIGRlcml2ZWQgYXMgZm9yIHdhcm5pbmcKK21lc3NhZ2VzLiAgVGhlIGFjdHVhbCBtZXNzYWdlIHRleHQgbWF5IGJlIHJhdGhlciBsZXNzIGV4cGxhbmF0b3J5CitiZWNhdXNlIG1hbnkgb2YgdGhlbSBhcmVuJ3Qgc3VwcG9zZWQgdG8gaGFwcGVuLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FeGl0bS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXhpdG0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTRhYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXhpdG0uaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FeGl0bSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXJyb3IuaHRtbCNFcnJvciIgdGl0bGU9IkVycm9yIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRXh0ZXJuLmh0bWwjRXh0ZXJuIiB0aXRsZT0iRXh0ZXJuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXhpdG0iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXh0ZXJuLmh0bWwjRXh0ZXJuIj5FeHRlcm48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFcnJvci5odG1sI0Vycm9yIj5FcnJvcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny41MCA8Y29kZT4uZXhpdG08L2NvZGU+PC9oMz4KKworPHA+RXhpdCBlYXJseSBmcm9tIHRoZSBjdXJyZW50IG1hY3JvIGRlZmluaXRpb24uICBTZWUgPGEgaHJlZj0iTWFjcm8uaHRtbCNNYWNybyI+TWFjcm88L2E+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FeHByZXNzaW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXhwcmVzc2lvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTM1ZTNmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRXhwcmVzc2lvbnMuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FeHByZXNzaW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyIgdGl0bGU9IlN5bWJvbHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFeHByZXNzaW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN5bWJvbHMuaHRtbCNTeW1ib2xzIj5TeW1ib2xzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjYgRXhwcmVzc2lvbnM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1leHByZXNzaW9ucy0yNDEiPjwvYT48YSBuYW1lPSJpbmRleC1hZGRyZXNzZXMtMjQyIj48L2E+PGEgbmFtZT0iaW5kZXgtbnVtZXJpYy12YWx1ZXMtMjQzIj48L2E+QW4gPGRmbj5leHByZXNzaW9uPC9kZm4+IHNwZWNpZmllcyBhbiBhZGRyZXNzIG9yIG51bWVyaWMgdmFsdWUuIAorV2hpdGVzcGFjZSBtYXkgcHJlY2VkZSBhbmQvb3IgZm9sbG93IGFuIGV4cHJlc3Npb24uCisKKyAgIDxwPlRoZSByZXN1bHQgb2YgYW4gZXhwcmVzc2lvbiBtdXN0IGJlIGFuIGFic29sdXRlIG51bWJlciwgb3IgZWxzZSBhbiBvZmZzZXQgaW50bworYSBwYXJ0aWN1bGFyIHNlY3Rpb24uICBJZiBhbiBleHByZXNzaW9uIGlzIG5vdCBhYnNvbHV0ZSwgYW5kIHRoZXJlIGlzIG5vdAorZW5vdWdoIGluZm9ybWF0aW9uIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc2VlcyB0aGUgZXhwcmVzc2lvbiB0byBrbm93IGl0cworc2VjdGlvbiwgYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBzb3VyY2UgcHJvZ3JhbSBtaWdodCBiZSBuZWNlc3NhcnkgdG8gaW50ZXJwcmV0Cit0aGUgZXhwcmVzc2lvbiZtZGFzaDtidXQgdGhlIHNlY29uZCBwYXNzIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQuIAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYWJvcnRzIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiB0aGlzIHNpdHVhdGlvbi4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkVtcHR5LUV4cHJzLmh0bWwjRW1wdHktRXhwcnMiPkVtcHR5IEV4cHJzPC9hPjogICAgICAgICAgICAgICAgICBFbXB0eSBFeHByZXNzaW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iSW50ZWdlci1FeHBycy5odG1sI0ludGVnZXItRXhwcnMiPkludGVnZXIgRXhwcnM8L2E+OiAgICAgICAgICAgICAgICBJbnRlZ2VyIEV4cHJlc3Npb25zCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FeHRlcm4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0V4dGVybi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMzU3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9FeHRlcm4uaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FeHRlcm4gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkV4aXRtLmh0bWwjRXhpdG0iIHRpdGxlPSJFeGl0bSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZhaWwuaHRtbCNGYWlsIiB0aXRsZT0iRmFpbCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkV4dGVybiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGYWlsLmh0bWwjRmFpbCI+RmFpbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkV4aXRtLmh0bWwjRXhpdG0iPkV4aXRtPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjUxIDxjb2RlPi5leHRlcm48L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JleHRlcm5fMDA3ZC1kaXJlY3RpdmUtMzMzIj48L2E+PGNvZGU+LmV4dGVybjwvY29kZT4gaXMgYWNjZXB0ZWQgaW4gdGhlIHNvdXJjZSBwcm9ncmFtJm1kYXNoO2ZvciBjb21wYXRpYmlsaXR5Cit3aXRoIG90aGVyIGFzc2VtYmxlcnMmbWRhc2g7YnV0IGl0IGlzIGlnbm9yZWQuICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiB0cmVhdHMKK2FsbCB1bmRlZmluZWQgc3ltYm9scyBhcyBleHRlcm5hbC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRmFpbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRmFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjRhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9GYWlsLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RmFpbCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXh0ZXJuLmh0bWwjRXh0ZXJuIiB0aXRsZT0iRXh0ZXJuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRmlsZS5odG1sI0ZpbGUiIHRpdGxlPSJGaWxlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRmFpbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGaWxlLmh0bWwjRmlsZSI+RmlsZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkV4dGVybi5odG1sI0V4dGVybiI+RXh0ZXJuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjUyIDxjb2RlPi5mYWlsIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZhaWxfMDA3ZC1kaXJlY3RpdmUtMzM0Ij48L2E+R2VuZXJhdGVzIGFuIGVycm9yIG9yIGEgd2FybmluZy4gIElmIHRoZSB2YWx1ZSBvZiB0aGUgPHZhcj5leHByZXNzaW9uPC92YXI+IGlzIDUwMAorb3IgbW9yZSwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gd2lsbCBwcmludCBhIHdhcm5pbmcgbWVzc2FnZS4gIElmIHRoZSB2YWx1ZSBpcyBsZXNzCit0aGFuIDUwMCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gd2lsbCBwcmludCBhbiBlcnJvciBtZXNzYWdlLiAgVGhlIG1lc3NhZ2Ugd2lsbAoraW5jbHVkZSB0aGUgdmFsdWUgb2YgPHZhcj5leHByZXNzaW9uPC92YXI+LiAgVGhpcyBjYW4gb2NjYXNpb25hbGx5IGJlIHVzZWZ1bCBpbnNpZGUKK2NvbXBsZXggbmVzdGVkIG1hY3JvcyBvciBjb25kaXRpb25hbCBhc3NlbWJseS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRmlsZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRmlsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZGJkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9GaWxlLmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RmlsZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRmFpbC5odG1sI0ZhaWwiIHRpdGxlPSJGYWlsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRmlsbC5odG1sI0ZpbGwiIHRpdGxlPSJGaWxsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRmlsZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGaWxsLmh0bWwjRmlsbCI+RmlsbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZhaWwuaHRtbCNGYWlsIj5GYWlsPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjUzIDxjb2RlPi5maWxlPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmlsZV8wMDdkLWRpcmVjdGl2ZS0zMzUiPjwvYT4KK1RoZXJlIGFyZSB0d28gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSA8Y29kZT4uZmlsZTwvY29kZT4gZGlyZWN0aXZlLiAgVGFyZ2V0cwordGhhdCBzdXBwb3J0IERXQVJGMiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiB1c2UgdGhlIERXQVJGMiB2ZXJzaW9uIG9mCis8Y29kZT4uZmlsZTwvY29kZT4uICBPdGhlciB0YXJnZXRzIHVzZSB0aGUgZGVmYXVsdCB2ZXJzaW9uLgorCis8aDQgY2xhc3M9InN1YmhlYWRpbmciPkRlZmF1bHQgVmVyc2lvbjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxvZ2ljYWwtZmlsZS1uYW1lLTMzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtbmFtZV8wMDJjLWxvZ2ljYWwtMzM3Ij48L2E+VGhpcyB2ZXJzaW9uIG9mIHRoZSA8Y29kZT4uZmlsZTwvY29kZT4gZGlyZWN0aXZlIHRlbGxzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRoYXQgd2UKK2FyZSBhYm91dCB0byBzdGFydCBhIG5ldyBsb2dpY2FsIGZpbGUuICBUaGUgc3ludGF4IGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLmZpbGUgPHZhcj5zdHJpbmc8L3Zhcj4KKzwvcHJlPgorICAgPHA+PHZhcj5zdHJpbmc8L3Zhcj4gaXMgdGhlIG5ldyBmaWxlIG5hbWUuICBJbiBnZW5lcmFsLCB0aGUgZmlsZW5hbWUgaXMKK3JlY29nbml6ZWQgd2hldGhlciBvciBub3QgaXQgaXMgc3Vycm91bmRlZCBieSBxdW90ZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4iPC9zcGFuPjwvc2FtcD4mcnNxdW87OyBidXQgaWYgeW91IHdpc2gKK3RvIHNwZWNpZnkgYW4gZW1wdHkgZmlsZSBuYW1lLCB5b3UgbXVzdCBnaXZlIHRoZSBxdW90ZXMmbmRhc2g7PGNvZGU+IiI8L2NvZGU+LiAgVGhpcworc3RhdGVtZW50IG1heSBnbyBhd2F5IGluIGZ1dHVyZTogaXQgaXMgb25seSByZWNvZ25pemVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aAorb2xkIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHByb2dyYW1zLgorCis8aDQgY2xhc3M9InN1YmhlYWRpbmciPkRXQVJGMiBWZXJzaW9uPC9oND4KKworICAgPHA+V2hlbiBlbWl0dGluZyBEV0FSRjIgbGluZSBudW1iZXIgaW5mb3JtYXRpb24sIDxjb2RlPi5maWxlPC9jb2RlPiBhc3NpZ25zIGZpbGVuYW1lcwordG8gdGhlIDxjb2RlPi5kZWJ1Z19saW5lPC9jb2RlPiBmaWxlIG5hbWUgdGFibGUuICBUaGUgc3ludGF4IGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLmZpbGUgPHZhcj5maWxlbm88L3Zhcj4gPHZhcj5maWxlbmFtZTwvdmFyPgorPC9wcmU+CisgICA8cD5UaGUgPHZhcj5maWxlbm88L3Zhcj4gb3BlcmFuZCBzaG91bGQgYmUgYSB1bmlxdWUgcG9zaXRpdmUgaW50ZWdlciB0byB1c2UgYXMgdGhlCitpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLiAgVGhlIDx2YXI+ZmlsZW5hbWU8L3Zhcj4gb3BlcmFuZCBpcyBhIEMgc3RyaW5nCitsaXRlcmFsLgorCisgICA8cD5UaGUgZGV0YWlsIG9mIGZpbGVuYW1lIGluZGljZXMgaXMgZXhwb3NlZCB0byB0aGUgdXNlciBiZWNhdXNlIHRoZSBmaWxlbmFtZQordGFibGUgaXMgc2hhcmVkIHdpdGggdGhlIDxjb2RlPi5kZWJ1Z19pbmZvPC9jb2RlPiBzZWN0aW9uIG9mIHRoZSBEV0FSRjIgZGVidWdnaW5nCitpbmZvcm1hdGlvbiwgYW5kIHRodXMgdGhlIHVzZXIgbXVzdCBrbm93IHRoZSBleGFjdCBpbmRpY2VzIHRoYXQgdGFibGUKK2VudHJpZXMgd2lsbCBoYXZlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9GaWxsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9GaWxsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0NjA5NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0ZpbGwuaHRtbApAQCAtMCwwICsxLDcwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GaWxsIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGaWxlLmh0bWwjRmlsZSIgdGl0bGU9IkZpbGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGbG9hdC5odG1sI0Zsb2F0IiB0aXRsZT0iRmxvYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGaWxsIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZsb2F0Lmh0bWwjRmxvYXQiPkZsb2F0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRmlsZS5odG1sI0ZpbGUiPkZpbGU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNTQgPGNvZGU+LmZpbGwgPC9jb2RlPjx2YXI+cmVwZWF0PC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmaWxsXzAwN2QtZGlyZWN0aXZlLTMzOCI+PC9hPjxhIG5hbWU9ImluZGV4LXdyaXRpbmctcGF0dGVybnMtaW4tbWVtb3J5LTMzOSI+PC9hPjxhIG5hbWU9ImluZGV4LXBhdHRlcm5zXzAwMmMtd3JpdGluZy1pbi1tZW1vcnktMzQwIj48L2E+PHZhcj5yZXBlYXQ8L3Zhcj4sIDx2YXI+c2l6ZTwvdmFyPiBhbmQgPHZhcj52YWx1ZTwvdmFyPiBhcmUgYWJzb2x1dGUgZXhwcmVzc2lvbnMuIAorVGhpcyBlbWl0cyA8dmFyPnJlcGVhdDwvdmFyPiBjb3BpZXMgb2YgPHZhcj5zaXplPC92YXI+IGJ5dGVzLiAgPHZhcj5SZXBlYXQ8L3Zhcj4KK21heSBiZSB6ZXJvIG9yIG1vcmUuICA8dmFyPlNpemU8L3Zhcj4gbWF5IGJlIHplcm8gb3IgbW9yZSwgYnV0IGlmIGl0IGlzCittb3JlIHRoYW4gOCwgdGhlbiBpdCBpcyBkZWVtZWQgdG8gaGF2ZSB0aGUgdmFsdWUgOCwgY29tcGF0aWJsZSB3aXRoCitvdGhlciBwZW9wbGUncyBhc3NlbWJsZXJzLiAgVGhlIGNvbnRlbnRzIG9mIGVhY2ggPHZhcj5yZXBlYXQ8L3Zhcj4gYnl0ZXMKK2lzIHRha2VuIGZyb20gYW4gOC1ieXRlIG51bWJlci4gIFRoZSBoaWdoZXN0IG9yZGVyIDQgYnl0ZXMgYXJlCit6ZXJvLiAgVGhlIGxvd2VzdCBvcmRlciA0IGJ5dGVzIGFyZSA8dmFyPnZhbHVlPC92YXI+IHJlbmRlcmVkIGluIHRoZQorYnl0ZS1vcmRlciBvZiBhbiBpbnRlZ2VyIG9uIHRoZSBjb21wdXRlciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBpcyBhc3NlbWJsaW5nIGZvci4gCitFYWNoIDx2YXI+c2l6ZTwvdmFyPiBieXRlcyBpbiBhIHJlcGV0aXRpb24gaXMgdGFrZW4gZnJvbSB0aGUgbG93ZXN0IG9yZGVyCis8dmFyPnNpemU8L3Zhcj4gYnl0ZXMgb2YgdGhpcyBudW1iZXIuICBBZ2FpbiwgdGhpcyBiaXphcnJlIGJlaGF2aW9yIGlzCitjb21wYXRpYmxlIHdpdGggb3RoZXIgcGVvcGxlJ3MgYXNzZW1ibGVycy4KKworICAgPHA+PHZhcj5zaXplPC92YXI+IGFuZCA8dmFyPnZhbHVlPC92YXI+IGFyZSBvcHRpb25hbC4gCitJZiB0aGUgc2Vjb25kIGNvbW1hIGFuZCA8dmFyPnZhbHVlPC92YXI+IGFyZSBhYnNlbnQsIDx2YXI+dmFsdWU8L3Zhcj4gaXMKK2Fzc3VtZWQgemVyby4gIElmIHRoZSBmaXJzdCBjb21tYSBhbmQgZm9sbG93aW5nIHRva2VucyBhcmUgYWJzZW50LAorPHZhcj5zaXplPC92YXI+IGlzIGFzc3VtZWQgdG8gYmUgMS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRmxvYXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Zsb2F0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczYzhlYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Zsb2F0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RmxvYXQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZpbGwuaHRtbCNGaWxsIiB0aXRsZT0iRmlsbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZ1bmMuaHRtbCNGdW5jIiB0aXRsZT0iRnVuYyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZsb2F0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZ1bmMuaHRtbCNGdW5jIj5GdW5jPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRmlsbC5odG1sI0ZpbGwiPkZpbGw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNTUgPGNvZGU+LmZsb2F0IDwvY29kZT48dmFyPmZsb251bXM8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludC1udW1iZXJzLV8wMDI4c2luZ2xlXzAwMjktMzQxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbG9hdF8wMDdkLWRpcmVjdGl2ZS0zNDIiPjwvYT5UaGlzIGRpcmVjdGl2ZSBhc3NlbWJsZXMgemVybyBvciBtb3JlIGZsb251bXMsIHNlcGFyYXRlZCBieSBjb21tYXMuICBJdAoraGFzIHRoZSBzYW1lIGVmZmVjdCBhcyA8Y29kZT4uc2luZ2xlPC9jb2RlPi4gCitUaGUgZXhhY3Qga2luZCBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzIGVtaXR0ZWQgZGVwZW5kcyBvbiBob3cKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGlzIGNvbmZpZ3VyZWQuIAorU2VlIDxhIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Zsb2F0aW5nLVBvaW50XzAwMmRpOTYwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI0Nzc5MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0Zsb2F0aW5nLVBvaW50XzAwMmRpOTYwLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RmxvYXRpbmcgUG9pbnQtaTk2MCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTk2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTk2MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTk2MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjT3B0aW9uc18wMDJkaTk2MCIgdGl0bGU9Ik9wdGlvbnMtaTk2MCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk5NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpOTYwIiB0aXRsZT0iRGlyZWN0aXZlcy1pOTYwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRmxvYXRpbmctUG9pbnQtaTk2MCI+PC9hPgorPGEgbmFtZT0iRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGlyZWN0aXZlc18wMDJkaTk2MC5odG1sI0RpcmVjdGl2ZXNfMDAyZGk5NjAiPkRpcmVjdGl2ZXMtaTk2MDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNPcHRpb25zXzAwMmRpOTYwIj5PcHRpb25zLWk5NjA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpOTYwXzAwMmREZXBlbmRlbnQuaHRtbCNpOTYwXzAwMmREZXBlbmRlbnQiPmk5NjAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNy4yIEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1pOTYwLV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktMTA5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWk5NjAtZmxvYXRpbmctcG9pbnQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0xMDk1Ij48L2E+PGNvZGU+YXM8L2NvZGU+IGdlbmVyYXRlcyA8c3BhbiBjbGFzcz0ic2MiPmllZWU8L3NwYW4+IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgZm9yIHRoZSBkaXJlY3RpdmVzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5mbG9hdDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZG91YmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5leHRlbmRlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNpbmdsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRmxvbnVtcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRmxvbnVtcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNTlkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9GbG9udW1zLmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZsb251bXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik51bWJlcnMuaHRtbCNOdW1iZXJzIiB0aXRsZT0iTnVtYmVycyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJpZ251bXMuaHRtbCNCaWdudW1zIiB0aXRsZT0iQmlnbnVtcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZsb251bXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCaWdudW1zLmh0bWwjQmlnbnVtcyI+QmlnbnVtczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik51bWJlcnMuaHRtbCNOdW1iZXJzIj5OdW1iZXJzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+My42LjIuMyBGbG9udW1zPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvbnVtcy0xODEiPjwvYT48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludC1udW1iZXJzLTE4MiI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnN0YW50c18wMDJjLWZsb2F0aW5nLXBvaW50LTE4MyI+PC9hPgorPGEgbmFtZT0iaW5kZXgtcHJlY2lzaW9uXzAwMmMtZmxvYXRpbmctcG9pbnQtMTg0Ij48L2E+QSA8ZGZuPmZsb251bTwvZGZuPiByZXByZXNlbnRzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiAgVGhlIHRyYW5zbGF0aW9uIGlzCitpbmRpcmVjdDogYSBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IG51bWJlciBmcm9tIHRoZSB0ZXh0IGlzIGNvbnZlcnRlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gdG8gYSBnZW5lcmljIGJpbmFyeSBmbG9hdGluZyBwb2ludCBudW1iZXIgb2YgbW9yZSB0aGFuCitzdWZmaWNpZW50IHByZWNpc2lvbi4gIFRoaXMgZ2VuZXJpYyBmbG9hdGluZyBwb2ludCBudW1iZXIgaXMgY29udmVydGVkCit0byBhIHBhcnRpY3VsYXIgY29tcHV0ZXIncyBmbG9hdGluZyBwb2ludCBmb3JtYXQgKG9yIGZvcm1hdHMpIGJ5IGEKK3BvcnRpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc3BlY2lhbGl6ZWQgdG8gdGhhdCBjb21wdXRlci4KKworICAgPHA+QSBmbG9udW0gaXMgd3JpdHRlbiBieSB3cml0aW5nIChpbiBvcmRlcikKKyAgICAgPHVsPgorPGxpPlRoZSBkaWdpdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBvcHRpb25hbCBvbiB0aGUgSFBQQS4pCisKKyAgICAgPGxpPkEgbGV0dGVyLCB0byB0ZWxsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRoZSByZXN0IG9mIHRoZSBudW1iZXIgaXMgYSBmbG9udW0uIAorPGtiZD5lPC9rYmQ+IGlzIHJlY29tbWVuZGVkLiAgQ2FzZSBpcyBub3QgaW1wb3J0YW50LgorCisgICAgIDxwPk9uIHRoZSBIOC8zMDAsIFJlbmVzYXMgLyBTdXBlckggU0gsCithbmQgQU1EIDI5SyBhcmNoaXRlY3R1cmVzLCB0aGUgbGV0dGVyIG11c3QgYmUKK29uZSBvZiB0aGUgbGV0dGVycyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkRGUFJTWDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSkuCisKKyAgICAgPHA+T24gdGhlIEFSQywgdGhlIGxldHRlciBtdXN0IGJlIG9uZSBvZiB0aGUgbGV0dGVycyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkRGUlM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyhpbiB1cHBlciBvciBsb3dlciBjYXNlKS4KKworICAgICA8cD5PbiB0aGUgSW50ZWwgOTYwIGFyY2hpdGVjdHVyZSwgdGhlIGxldHRlciBtdXN0IGJlCitvbmUgb2YgdGhlIGxldHRlcnMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ERlQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGluIHVwcGVyIG9yIGxvd2VyIGNhc2UpLgorCisgICAgIDxwPk9uIHRoZSBIUFBBIGFyY2hpdGVjdHVyZSwgdGhlIGxldHRlciBtdXN0IGJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAodXBwZXIgY2FzZSBvbmx5KS4KKworICAgICA8bGk+QW4gb3B0aW9uYWwgc2lnbjogZWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi08L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPkFuIG9wdGlvbmFsIDxkZm4+aW50ZWdlciBwYXJ0PC9kZm4+OiB6ZXJvIG9yIG1vcmUgZGVjaW1hbCBkaWdpdHMuCisKKyAgICAgPGxpPkFuIG9wdGlvbmFsIDxkZm4+ZnJhY3Rpb25hbCBwYXJ0PC9kZm4+OiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9sbG93ZWQgYnkgemVybworb3IgbW9yZSBkZWNpbWFsIGRpZ2l0cy4KKworICAgICA8bGk+QW4gb3B0aW9uYWwgZXhwb25lbnQsIGNvbnNpc3Rpbmcgb2Y6CisKKyAgICAgICAgICA8dWw+Cis8bGk+QW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5FPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8IS0tIEkgY2FuJ3QgZmluZCBhIGNvbmZpZyB3aGVyZSAiRVhQX0NIQVJTIiBpcyBvdGhlciB0aGFuICdlRScsIGJ1dCBpbiAtLT4KKzwhLS0gcHJpbmNpcGxlIHRoaXMgY2FuIHBlcmZlY3RseSB3ZWxsIGJlIGRpZmZlcmVudCBvbiBkaWZmZXJlbnQgdGFyZ2V0cy4gLS0+Cis8bGk+T3B0aW9uYWwgc2lnbjogZWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi08L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPGxpPk9uZSBvciBtb3JlIGRlY2ltYWwgZGlnaXRzLiAKKzwvdWw+CisKKyAgIDwvdWw+CisKKyAgIDxwPkF0IGxlYXN0IG9uZSBvZiB0aGUgaW50ZWdlciBwYXJ0IG9yIHRoZSBmcmFjdGlvbmFsIHBhcnQgbXVzdCBiZQorcHJlc2VudC4gIFRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIgaGFzIHRoZSB1c3VhbCBiYXNlLTEwIHZhbHVlLgorCisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBkb2VzIGFsbCBwcm9jZXNzaW5nIHVzaW5nIGludGVnZXJzLiAgRmxvbnVtcyBhcmUgY29tcHV0ZWQKK2luZGVwZW5kZW50bHkgb2YgYW55IGZsb2F0aW5nIHBvaW50IGhhcmR3YXJlIGluIHRoZSBjb21wdXRlciBydW5uaW5nCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRnVuYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvRnVuYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YzdjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9GdW5jLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RnVuYyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRmxvYXQuaHRtbCNGbG9hdCIgdGl0bGU9IkZsb2F0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR2xvYmFsLmh0bWwjR2xvYmFsIiB0aXRsZT0iR2xvYmFsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRnVuYyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHbG9iYWwuaHRtbCNHbG9iYWwiPkdsb2JhbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZsb2F0Lmh0bWwjRmxvYXQiPkZsb2F0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjU2IDxjb2RlPi5mdW5jIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT5bLDwvY29kZT48dmFyPmxhYmVsPC92YXI+PGNvZGU+XTwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZ1bmNfMDA3ZC1kaXJlY3RpdmUtMzQzIj48L2E+PGNvZGU+LmZ1bmM8L2NvZGU+IGVtaXRzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBkZW5vdGUgZnVuY3Rpb24gPHZhcj5uYW1lPC92YXI+LCBhbmQKK2lzIGlnbm9yZWQgdW5sZXNzIHRoZSBmaWxlIGlzIGFzc2VtYmxlZCB3aXRoIGRlYnVnZ2luZyBlbmFibGVkLiAKK09ubHkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWdzdGFic1srXTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLiAKKzx2YXI+bGFiZWw8L3Zhcj4gaXMgdGhlIGVudHJ5IHBvaW50IG9mIHRoZSBmdW5jdGlvbiBhbmQgaWYgb21pdHRlZCA8dmFyPm5hbWU8L3Zhcj4KK3ByZXBlbmRlZCB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxlYWRpbmcgY2hhcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB1c2VkLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGVhZGluZyBjaGFyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHVzdWFsbHkgPGNvZGU+XzwvY29kZT4gb3Igbm90aGluZywgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQuIAorQWxsIGZ1bmN0aW9ucyBhcmUgY3VycmVudGx5IGRlZmluZWQgdG8gaGF2ZSA8Y29kZT52b2lkPC9jb2RlPiByZXR1cm4gdHlwZS4gCitUaGUgZnVuY3Rpb24gbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggPGNvZGU+LmVuZGZ1bmM8L2NvZGU+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9HTlUtQXNzZW1ibGVyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9HTlUtQXNzZW1ibGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzZjBkNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0dOVS1Bc3NlbWJsZXIuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HTlUgQXNzZW1ibGVyIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3IiB0aXRsZT0iT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNYW51YWwuaHRtbCNNYW51YWwiIHRpdGxlPSJNYW51YWwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPYmplY3QtRm9ybWF0cy5odG1sI09iamVjdC1Gb3JtYXRzIiB0aXRsZT0iT2JqZWN0IEZvcm1hdHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHTlUtQXNzZW1ibGVyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9iamVjdC1Gb3JtYXRzLmh0bWwjT2JqZWN0LUZvcm1hdHMiPk9iamVjdCBGb3JtYXRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTWFudWFsLmh0bWwjTWFudWFsIj5NYW51YWw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMiBUaGUgR05VIEFzc2VtYmxlcjwvaDM+CisKKzwhLS0gbWFuIGJlZ2luIERFU0NSSVBUSU9OIC0tPgorPHA+PHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGlzIHJlYWxseSBhIGZhbWlseSBvZiBhc3NlbWJsZXJzLiAKK0lmIHlvdSB1c2UgKG9yIGhhdmUgdXNlZCkgdGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBhc3NlbWJsZXIgb24gb25lIGFyY2hpdGVjdHVyZSwgeW91CitzaG91bGQgZmluZCBhIGZhaXJseSBzaW1pbGFyIGVudmlyb25tZW50IHdoZW4geW91IHVzZSBpdCBvbiBhbm90aGVyCithcmNoaXRlY3R1cmUuICBFYWNoIHZlcnNpb24gaGFzIG11Y2ggaW4gY29tbW9uIHdpdGggdGhlIG90aGVycywKK2luY2x1ZGluZyBvYmplY3QgZmlsZSBmb3JtYXRzLCBtb3N0IGFzc2VtYmxlciBkaXJlY3RpdmVzIChvZnRlbiBjYWxsZWQKKzxkZm4+cHNldWRvLW9wczwvZGZuPikgYW5kIGFzc2VtYmxlciBzeW50YXguCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXB1cnBvc2Utb2YtXzAwNDBzY18wMDdiZ251XzAwN2QtYXNzZW1ibGVyLTIzIj48L2E+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGFzc2VtYmxlIHRoZSBvdXRwdXQgb2YgdGhlCis8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gQyBjb21waWxlciA8Y29kZT5nY2M8L2NvZGU+IGZvciB1c2UgYnkgdGhlIGxpbmtlcgorPGNvZGU+bGQ8L2NvZGU+LiAgTmV2ZXJ0aGVsZXNzLCB3ZSd2ZSB0cmllZCB0byBtYWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+Cithc3NlbWJsZSBjb3JyZWN0bHkgZXZlcnl0aGluZyB0aGF0IG90aGVyIGFzc2VtYmxlcnMgZm9yIHRoZSBzYW1lCittYWNoaW5lIHdvdWxkIGFzc2VtYmxlLiAKK0FueSBleGNlcHRpb25zIGFyZSBkb2N1bWVudGVkIGV4cGxpY2l0bHkgKHNlZSA8YSBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4pLiAKKzwhLS0gVGhpcyByZW1hcmsgc2hvdWxkIGFwcGVhciBpbiBnZW5lcmljIHZlcnNpb24gb2YgbWFudWFsOyBhc3N1bXB0aW9uIC0tPgorPCEtLSBoZXJlIGlzIHRoYXQgZ2VuZXJpYyB2ZXJzaW9uIHNldHMgTTY4MHgwLiAtLT4KK1RoaXMgZG9lc24ndCBtZWFuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGFsd2F5cyB1c2VzIHRoZSBzYW1lIHN5bnRheCBhcyBhbm90aGVyCithc3NlbWJsZXIgZm9yIHRoZSBzYW1lIGFyY2hpdGVjdHVyZTsgZm9yIGV4YW1wbGUsIHdlIGtub3cgb2Ygc2V2ZXJhbAoraW5jb21wYXRpYmxlIHZlcnNpb25zIG9mIDY4MHgwIGFzc2VtYmx5IGxhbmd1YWdlIHN5bnRheC4KKworPCEtLSBtYW4gZW5kIC0tPgorICAgPHA+VW5saWtlIG9sZGVyIGFzc2VtYmxlcnMsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGlzIGRlc2lnbmVkIHRvIGFzc2VtYmxlIGEgc291cmNlCitwcm9ncmFtIGluIG9uZSBwYXNzIG9mIHRoZSBzb3VyY2UgZmlsZS4gIFRoaXMgaGFzIGEgc3VidGxlIGltcGFjdCBvbiB0aGUKKzxrYmQ+Lm9yZzwva2JkPiBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJPcmcuaHRtbCNPcmciPjxjb2RlPi5vcmc8L2NvZGU+PC9hPikuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmYmQwYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sCkBAIC0wLDAgKzEsNTE4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWNrbm93bGVkZ2VtZW50cy5odG1sI0Fja25vd2xlZGdlbWVudHMiIHRpdGxlPSJBY2tub3dsZWRnZW1lbnRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVMtSW5kZXguaHRtbCNBUy1JbmRleCIgdGl0bGU9IkFTIEluZGV4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFTLUluZGV4Lmh0bWwjQVMtSW5kZXgiPkFTIEluZGV4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQWNrbm93bGVkZ2VtZW50cy5odG1sI0Fja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iYXBwZW5kaXgiPkFwcGVuZGl4IEEgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9oMj4KKworPCEtLSBUaGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLiAtLT4KKzxkaXYgYWxpZ249ImNlbnRlciI+VmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwODwvZGl2PgorCis8IS0tIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCB3aXRoaW4gYW5vdGhlciBkb2N1bWVudCwgLS0+Cis8IS0tIGhlbmNlIG5vIHNlY3Rpb25pbmcgY29tbWFuZCBvciBAbm9kZS4gLS0+Cis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4gICAgIENvcHlyaWdodCAmY29weTsgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgPGEgaHJlZj0iaHR0cDovL2ZzZi5vcmcvIj5odHRwOi8vZnNmLm9yZy88L2E+CisgICAgIAorICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCis8L3ByZT4KKyAgICAgPG9sIHR5cGU9MSBzdGFydD0wPgorPGxpPlBSRUFNQkxFCisKKyAgICAgPHA+VGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50IDxkZm4+ZnJlZTwvZGZuPiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuIAorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCisgICAgIDxwPlRoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgJmxkcXVvO2NvcHlsZWZ0JnJkcXVvOywgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCisgICAgIDxwPldlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisgICAgIDxsaT5BUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCisgICAgIDxwPlRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICZsZHF1bztEb2N1bWVudCZyZHF1bzssIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICZsZHF1bzt5b3UmcmRxdW87LiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCisgICAgIDxwPkEgJmxkcXVvO01vZGlmaWVkIFZlcnNpb24mcmRxdW87IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworICAgICA8cD5BICZsZHF1bztTZWNvbmRhcnkgU2VjdGlvbiZyZHF1bzsgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uCitvZiB0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudCdzIG92ZXJhbGwKK3N1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsCitkaXJlY3RseSB3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluCitwYXJ0IGEgdGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluCithbnkgbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCisgICAgIDxwPlRoZSAmbGRxdW87SW52YXJpYW50IFNlY3Rpb25zJnJkcXVvOyBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCisgICAgIDxwPlRoZSAmbGRxdW87Q292ZXIgVGV4dHMmcmRxdW87IGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCisgICAgIDxwPkEgJmxkcXVvO1RyYW5zcGFyZW50JnJkcXVvOyBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgJmxkcXVvO1RyYW5zcGFyZW50JnJkcXVvOyBpcyBjYWxsZWQgJmxkcXVvO09wYXF1ZSZyZHF1bzsuCisKKyAgICAgPHA+RXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KKzxzcGFuIGNsYXNzPSJzYyI+YXNjaWk8L3NwYW4+IHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQKK2Zvcm1hdCwgPGFjcm9ueW0+U0dNTDwvYWNyb255bT4gb3IgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZQorPGFjcm9ueW0+RFREPC9hY3JvbnltPiwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+LAorUG9zdFNjcmlwdCBvciA8YWNyb255bT5QREY8L2Fjcm9ueW0+IGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcworb2YgdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIDxhY3JvbnltPlBORzwvYWNyb255bT4sIDxhY3JvbnltPlhDRjwvYWNyb255bT4gYW5kCis8YWNyb255bT5KUEc8L2Fjcm9ueW0+LiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlCityZWFkIGFuZCBlZGl0ZWQgb25seSBieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IG9yCis8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGZvciB3aGljaCB0aGUgPGFjcm9ueW0+RFREPC9hY3JvbnltPiBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUKK25vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+LAorUG9zdFNjcmlwdCBvciA8YWNyb255bT5QREY8L2Fjcm9ueW0+IHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvcgorb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKKyAgICAgPHA+VGhlICZsZHF1bztUaXRsZSBQYWdlJnJkcXVvOyBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICZsZHF1bztUaXRsZSBQYWdlJnJkcXVvOyBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKKyAgICAgPHA+VGhlICZsZHF1bztwdWJsaXNoZXImcmRxdW87IG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzCitvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIHB1YmxpYy4KKworICAgICA8cD5BIHNlY3Rpb24gJmxkcXVvO0VudGl0bGVkIFhZWiZyZHF1bzsgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOywKKyZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzssICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LCBvciAmbGRxdW87SGlzdG9yeSZyZHF1bzsuKSAgVG8gJmxkcXVvO1ByZXNlcnZlIHRoZSBUaXRsZSZyZHF1bzsKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gJmxkcXVvO0VudGl0bGVkIFhZWiZyZHF1bzsgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworICAgICA8cD5UaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworICAgICA8bGk+VkVSQkFUSU0gQ09QWUlORworCisgICAgIDxwPllvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworICAgICA8cD5Zb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKyAgICAgPGxpPkNPUFlJTkcgSU4gUVVBTlRJVFkKKworICAgICA8cD5JZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50J3MgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLiAKK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCisgICAgIDxwPklmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworICAgICA8cD5JZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuIAorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKKyAgICAgPHA+SXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUKK3RoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisgICAgIDxsaT5NT0RJRklDQVRJT05TCisKKyAgICAgPHA+WW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKKyAgICAgICAgICA8b2wgdHlwZT1BIHN0YXJ0PTE+Cis8bGk+VXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0Citmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCitvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCitpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgICAgPGxpPkxpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKK3Jlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKK3VubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KKworICAgICAgICAgIDxsaT5TdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICAgICAgIDxsaT5BZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCithZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCisKKyAgICAgICAgICA8bGk+SW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCitnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCithbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCisKKyAgICAgICAgICA8bGk+SW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87LCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKK3RvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKK3B1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCit0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztIaXN0b3J5JnJkcXVvOyBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKK3N0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCitwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQordGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKK2l0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICZsZHF1bztIaXN0b3J5JnJkcXVvOyBzZWN0aW9uLiAKK1lvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKK2xlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgICAgPGxpPkZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzsgb3IgJmxkcXVvO0RlZGljYXRpb25zJnJkcXVvOywgUHJlc2VydmUKK3RoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUKK3N1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzIGFuZC9vcgorZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCit1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCitvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCisKKyAgICAgICAgICA8bGk+RGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LiAgU3VjaCBhIHNlY3Rpb24KK21heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCisKKyAgICAgICAgICA8bGk+RG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzsgb3IKK3RvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPklmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuIAorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKKyAgICAgPHA+WW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzJm1kYXNoO2ZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCisgICAgIDxwPllvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCisgICAgIDxwPlRoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisgICAgIDxsaT5DT01CSU5JTkcgRE9DVU1FTlRTCisKKyAgICAgPHA+WW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCisgICAgIDxwPlRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4gCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCisgICAgIDxwPkluIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87CitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyZsZHF1bztIaXN0b3J5JnJkcXVvOzsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0Fja25vd2xlZGdlbWVudHMmcmRxdW87LAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LiAgWW91IG11c3QgZGVsZXRlIGFsbAorc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cy4mcmRxdW87CisKKyAgICAgPGxpPkNPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCisgICAgIDxwPllvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworICAgICA8cD5Zb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKyAgICAgPGxpPkFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworICAgICA8cD5BIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gJmxkcXVvO2FnZ3JlZ2F0ZSZyZHF1bzsgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICA8cD5JZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50J3MgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLiAKK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworICAgICA8bGk+VFJBTlNMQVRJT04KKworICAgICA8cD5UcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LiAKK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKKyAgICAgPHA+SWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzssCismbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LCBvciAmbGRxdW87SGlzdG9yeSZyZHF1bzssIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKyAgICAgPGxpPlRFUk1JTkFUSU9OCisKKyAgICAgPHA+WW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgIDxwPkhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UKK2Zyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwKK3VubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseQordGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvCis2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKKyAgICAgPHA+TW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKyAgICAgPHA+VGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcworbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgorCisgICAgIDxsaT5GVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCisgICAgIDxwPlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQorPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LyI+aHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LzwvYT4uCisKKyAgICAgPHA+RWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgJmxkcXVvO29yIGFueSBsYXRlciB2ZXJzaW9uJnJkcXVvOyBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50CitzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMKK0xpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYQordmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0RvY3VtZW50LgorCisgICAgIDxsaT5SRUxJQ0VOU0lORworCisgICAgIDxwPiZsZHF1bztNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24gU2l0ZSZyZHF1bzsgKG9yICZsZHF1bztNTUMgU2l0ZSZyZHF1bzspIG1lYW5zIGFueQorV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28KK3Byb3ZpZGVzIHByb21pbmVudCBmYWNpbGl0aWVzIGZvciBhbnlib2R5IHRvIGVkaXQgdGhvc2Ugd29ya3MuICBBCitwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLiAgQQorJmxkcXVvO01hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiZyZHF1bzsgKG9yICZsZHF1bztNTUMmcmRxdW87KSBjb250YWluZWQgaW4gdGhlCitzaXRlIG1lYW5zIGFueSBzZXQgb2YgY29weXJpZ2h0YWJsZSB3b3JrcyB0aHVzIHB1Ymxpc2hlZCBvbiB0aGUgTU1DCitzaXRlLgorCisgICAgIDxwPiZsZHF1bztDQy1CWS1TQSZyZHF1bzsgbWVhbnMgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMy4wCitsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0Citjb3Jwb3JhdGlvbiB3aXRoIGEgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGluIFNhbiBGcmFuY2lzY28sCitDYWxpZm9ybmlhLCBhcyB3ZWxsIGFzIGZ1dHVyZSBjb3B5bGVmdCB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UKK3B1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgorCisgICAgIDxwPiZsZHF1bztJbmNvcnBvcmF0ZSZyZHF1bzsgbWVhbnMgdG8gcHVibGlzaCBvciByZXB1Ymxpc2ggYSBEb2N1bWVudCwgaW4gd2hvbGUgb3IKK2luIHBhcnQsIGFzIHBhcnQgb2YgYW5vdGhlciBEb2N1bWVudC4KKworICAgICA8cD5BbiBNTUMgaXMgJmxkcXVvO2VsaWdpYmxlIGZvciByZWxpY2Vuc2luZyZyZHF1bzsgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZSwgYW5kIGlmIGFsbCB3b3JrcyB0aGF0IHdlcmUgZmlyc3QgcHVibGlzaGVkIHVuZGVyIHRoaXMgTGljZW5zZQorc29tZXdoZXJlIG90aGVyIHRoYW4gdGhpcyBNTUMsIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIGluIHdob2xlCitvciBpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlciB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsCithbmQgKDIpIHdlcmUgdGh1cyBpbmNvcnBvcmF0ZWQgcHJpb3IgdG8gTm92ZW1iZXIgMSwgMjAwOC4KKworICAgICA8cD5UaGUgb3BlcmF0b3Igb2YgYW4gTU1DIFNpdGUgbWF5IHJlcHVibGlzaCBhbiBNTUMgY29udGFpbmVkIGluIHRoZSBzaXRlCit1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwKK3Byb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgorCisgICAgICAgIDwvb2w+CisKKzxoMyBjbGFzcz0iaGVhZGluZyI+QURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50czwvaDM+CisKKzxwPlRvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgQ29weXJpZ2h0IChDKSAgPHZhcj55ZWFyPC92YXI+ICA8dmFyPnlvdXIgbmFtZTwvdmFyPi4KKyAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKKyAgICAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKKyAgICAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyCisgICAgICAgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgYGBHTlUKKyAgICAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorPC9wcmU+CisgICA8cD5JZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgJmxkcXVvO3dpdGg8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+VGV4dHMuJnJkcXVvOyBsaW5lIHdpdGggdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgPHZhcj5saXN0IHRoZWlyIHRpdGxlczwvdmFyPiwgd2l0aAorICAgICAgICAgdGhlIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIDx2YXI+bGlzdDwvdmFyPiwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMKKyAgICAgICAgIGJlaW5nIDx2YXI+bGlzdDwvdmFyPi4KKzwvcHJlPgorICAgPHA+SWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCisgICA8cD5JZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KKworPCEtLSBMb2NhbCBWYXJpYWJsZXM6IC0tPgorPCEtLSBpc3BlbGwtbG9jYWwtcGRpY3Q6ICJpc3BlbGwtZGljdCIgLS0+Cis8IS0tIEVuZDogLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9HTlUtT2JqZWN0LUF0dHJpYnV0ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0dOVS1PYmplY3QtQXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZjFkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9HTlUtT2JqZWN0LUF0dHJpYnV0ZXMuaHRtbApAQCAtMCwwICsxLDExMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R05VIE9iamVjdCBBdHRyaWJ1dGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPYmplY3QtQXR0cmlidXRlcy5odG1sI09iamVjdC1BdHRyaWJ1dGVzIiB0aXRsZT0iT2JqZWN0IEF0dHJpYnV0ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEZWZpbmluZy1OZXctT2JqZWN0LUF0dHJpYnV0ZXMuaHRtbCNEZWZpbmluZy1OZXctT2JqZWN0LUF0dHJpYnV0ZXMiIHRpdGxlPSJEZWZpbmluZyBOZXcgT2JqZWN0IEF0dHJpYnV0ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHTlUtT2JqZWN0LUF0dHJpYnV0ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGVmaW5pbmctTmV3LU9iamVjdC1BdHRyaWJ1dGVzLmh0bWwjRGVmaW5pbmctTmV3LU9iamVjdC1BdHRyaWJ1dGVzIj5EZWZpbmluZyBOZXcgT2JqZWN0IEF0dHJpYnV0ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPYmplY3QtQXR0cmlidXRlcy5odG1sI09iamVjdC1BdHRyaWJ1dGVzIj5PYmplY3QgQXR0cmlidXRlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gT2JqZWN0IEF0dHJpYnV0ZXM8L2gzPgorCis8cD5UaGUgPGNvZGU+LmdudV9hdHRyaWJ1dGU8L2NvZGU+IGRpcmVjdGl2ZSByZWNvcmRzIGFuIG9iamVjdCBhdHRyaWJ1dGUKK3dpdGggdmVuZG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5FeGNlcHQgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VGFnX2NvbXBhdGliaWxpdHk8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdoaWNoIGhhcyBib3RoIGFuIGludGVnZXIgYW5kIGEgc3RyaW5nIGZvcgoraXRzIHZhbHVlLCA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gYXR0cmlidXRlcyBoYXZlIGEgc3RyaW5nIHZhbHVlIGlmIHRoZSB0YWcgbnVtYmVyIGlzIG9kZCBhbmQKK2FuIGludGVnZXIgdmFsdWUgaWYgdGhlIHRhZyBudW1iZXIgaXMgZXZlbi4gIFRoZSBzZWNvbmQgYml0ICg8dmFyPnRhZzwvdmFyPjxjb2RlPiAmYW1wOworMjwvY29kZT4gaXMgc2V0IGZvciBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgYXR0cmlidXRlcyBhbmQgY2xlYXIgZm9yCithcmNoaXRlY3R1cmUtZGVwZW5kZW50IG9uZXMuCisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OC4xLjEgQ29tbW9uIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBhdHRyaWJ1dGVzPC9oND4KKworPHA+VGhlc2UgYXR0cmlidXRlcyBhcmUgdmFsaWQgb24gYWxsIGFyY2hpdGVjdHVyZXMuCisKKyAgICAgPGRsPgorPGR0PjxzcGFuIGNsYXNzPSJyb21hbiI+VGFnX2NvbXBhdGliaWxpdHkgKDMyKTwvc3Bhbj48ZGQ+VGhlIGNvbXBhdGliaWxpdHkgYXR0cmlidXRlIHRha2VzIGFuIGludGVnZXIgZmxhZyB2YWx1ZSBhbmQgYSB2ZW5kb3IgbmFtZS4gIElmCit0aGUgZmxhZyB2YWx1ZSBpcyAwLCB0aGUgZmlsZSBpcyBjb21wYXRpYmxlIHdpdGggb3RoZXIgdG9vbGNoYWlucy4gIElmIGl0IGlzIDEsCit0aGVuIHRoZSBmaWxlIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIHRoZSBuYW1lZCB0b29sY2hhaW4uICBJZiBpdCBpcyBncmVhdGVyCit0aGFuIDEsIHRoZSBmaWxlIGNhbiBvbmx5IGJlIHByb2Nlc3NlZCBieSBvdGhlciB0b29sY2hhaW5zIHVuZGVyIHNvbWUgcHJpdmF0ZQorYXJyYW5nZW1lbnQgaW5kaWNhdGVkIGJ5IHRoZSBmbGFnIHZhbHVlIGFuZCB0aGUgdmVuZG9yIG5hbWUuIAorPC9kbD4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj44LjEuMiBNSVBTIEF0dHJpYnV0ZXM8L2g0PgorCisgICAgIDxkbD4KKzxkdD48c3BhbiBjbGFzcz0icm9tYW4iPlRhZ19HTlVfTUlQU19BQklfRlAgKDQpPC9zcGFuPjxkZD5UaGUgZmxvYXRpbmctcG9pbnQgQUJJIHVzZWQgYnkgdGhpcyBvYmplY3QgZmlsZS4gIFRoZSB2YWx1ZSB3aWxsIGJlOgorCisgICAgICAgICAgPHVsPgorPGxpPjAgZm9yIGZpbGVzIG5vdCBhZmZlY3RlZCBieSB0aGUgZmxvYXRpbmctcG9pbnQgQUJJLiAKKzxsaT4xIGZvciBmaWxlcyB1c2luZyB0aGUgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgd2l0aCBhIHN0YW5kYXJkIGRvdWJsZS1wcmVjaXNpb24KK0ZQVS4gCis8bGk+MiBmb3IgZmlsZXMgdXNpbmcgdGhlIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IEFCSSB3aXRoIGEgc2luZ2xlLXByZWNpc2lvbiBGUFUuIAorPGxpPjMgZm9yIGZpbGVzIHVzaW5nIHRoZSBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBBQkkuIAorPGxpPjQgZm9yIGZpbGVzIHVzaW5nIHRoZSBoYXJkd2FyZSBmbG9hdGluZy1wb2ludCBBQkkgd2l0aCA2NC1iaXQgd2lkZQorZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgYW5kIDMyLWJpdCB3aWRlIGdlbmVyYWwKK3B1cnBvc2UgcmVnaXN0ZXJzLiAKKzwvdWw+CisgICAgIDwvZGw+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OC4xLjMgUG93ZXJQQyBBdHRyaWJ1dGVzPC9oND4KKworICAgICA8ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InJvbWFuIj5UYWdfR05VX1Bvd2VyX0FCSV9GUCAoNCk8L3NwYW4+PGRkPlRoZSBmbG9hdGluZy1wb2ludCBBQkkgdXNlZCBieSB0aGlzIG9iamVjdCBmaWxlLiAgVGhlIHZhbHVlIHdpbGwgYmU6CisKKyAgICAgICAgICA8dWw+Cis8bGk+MCBmb3IgZmlsZXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBmbG9hdGluZy1wb2ludCBBQkkuIAorPGxpPjEgZm9yIGZpbGVzIHVzaW5nIGRvdWJsZS1wcmVjaXNpb24gaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgQUJJLiAKKzxsaT4yIGZvciBmaWxlcyB1c2luZyB0aGUgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgQUJJLiAKKzxsaT4zIGZvciBmaWxlcyB1c2luZyBzaW5nbGUtcHJlY2lzaW9uIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IEFCSS4gCis8L3VsPgorCisgICAgIDxicj48ZHQ+PHNwYW4gY2xhc3M9InJvbWFuIj5UYWdfR05VX1Bvd2VyX0FCSV9WZWN0b3IgKDgpPC9zcGFuPjxkZD5UaGUgdmVjdG9yIEFCSSB1c2VkIGJ5IHRoaXMgb2JqZWN0IGZpbGUuICBUaGUgdmFsdWUgd2lsbCBiZToKKworICAgICAgICAgIDx1bD4KKzxsaT4wIGZvciBmaWxlcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHZlY3RvciBBQkkuIAorPGxpPjEgZm9yIGZpbGVzIHVzaW5nIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgdG8gcGFzcyB2ZWN0b3JzLiAKKzxsaT4yIGZvciBmaWxlcyB1c2luZyBBbHRpVmVjIHJlZ2lzdGVycyB0byBwYXNzIHZlY3RvcnMuIAorPGxpPjMgZm9yIGZpbGVzIHVzaW5nIFNQRSByZWdpc3RlcnMgdG8gcGFzcyB2ZWN0b3JzLiAKKzwvdWw+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0dSRUdfMDAyZGJhc2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0dSRUdfMDAyZGJhc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2RiMzhiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvR1JFR18wMDJkYmFzZS5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1NTUlYXzAwMmRQc2V1ZG9zLmh0bWwjR1JFRyUyZGJhc2UiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvR2xvYmFsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9HbG9iYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTA5NDUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvR2xvYmFsLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R2xvYmFsIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGdW5jLmh0bWwjRnVuYyIgdGl0bGU9IkZ1bmMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHbnVfMDA1ZmF0dHJpYnV0ZS5odG1sI0dudV8wMDVmYXR0cmlidXRlIiB0aXRsZT0iR251X2F0dHJpYnV0ZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikdsb2JhbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHbnVfMDA1ZmF0dHJpYnV0ZS5odG1sI0dudV8wMDVmYXR0cmlidXRlIj5HbnVfYXR0cmlidXRlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRnVuYy5odG1sI0Z1bmMiPkZ1bmM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNTcgPGNvZGU+Lmdsb2JhbCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj4sIDxjb2RlPi5nbG9ibCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymdsb2JhbF8wMDdkLWRpcmVjdGl2ZS0zNDQiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2xfMDAyYy1tYWtpbmctdmlzaWJsZS10by1saW5rZXItMzQ1Ij48L2E+PGNvZGU+Lmdsb2JhbDwvY29kZT4gbWFrZXMgdGhlIHN5bWJvbCB2aXNpYmxlIHRvIDxjb2RlPmxkPC9jb2RlPi4gIElmIHlvdSBkZWZpbmUKKzx2YXI+c3ltYm9sPC92YXI+IGluIHlvdXIgcGFydGlhbCBwcm9ncmFtLCBpdHMgdmFsdWUgaXMgbWFkZSBhdmFpbGFibGUgdG8KK290aGVyIHBhcnRpYWwgcHJvZ3JhbXMgdGhhdCBhcmUgbGlua2VkIHdpdGggaXQuICBPdGhlcndpc2UsCis8dmFyPnN5bWJvbDwvdmFyPiB0YWtlcyBpdHMgYXR0cmlidXRlcyBmcm9tIGEgc3ltYm9sIG9mIHRoZSBzYW1lIG5hbWUKK2Zyb20gYW5vdGhlciBmaWxlIGxpbmtlZCBpbnRvIHRoZSBzYW1lIHByb2dyYW0uCisKKyAgIDxwPkJvdGggc3BlbGxpbmdzICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5nbG9ibDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZ2xvYmFsPC9zcGFuPjwvc2FtcD4mcnNxdW87KSBhcmUgYWNjZXB0ZWQsIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGFzc2VtYmxlcnMuCisKKyAgIDxwPk9uIHRoZSBIUFBBLCA8Y29kZT4uZ2xvYmFsPC9jb2RlPiBpcyBub3QgYWx3YXlzIGVub3VnaCB0byBtYWtlIGl0IGFjY2Vzc2libGUgdG8gb3RoZXIKK3BhcnRpYWwgcHJvZ3JhbXMuICBZb3UgbWF5IG5lZWQgdGhlIEhQUEEtb25seSA8Y29kZT4uRVhQT1JUPC9jb2RlPiBkaXJlY3RpdmUgYXMgd2VsbC4gCitTZWUgPGEgaHJlZj0iSFBQQS1EaXJlY3RpdmVzLmh0bWwjSFBQQS1EaXJlY3RpdmVzIj5IUFBBIEFzc2VtYmxlciBEaXJlY3RpdmVzPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvR251XzAwNWZhdHRyaWJ1dGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0dudV8wMDVmYXR0cmlidXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4ZDdlYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0dudV8wMDVmYXR0cmlidXRlLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R251X2F0dHJpYnV0ZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR2xvYmFsLmh0bWwjR2xvYmFsIiB0aXRsZT0iR2xvYmFsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSGlkZGVuLmh0bWwjSGlkZGVuIiB0aXRsZT0iSGlkZGVuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR251X2F0dHJpYnV0ZSI+PC9hPgorPGEgbmFtZT0iR251XzAwNWZhdHRyaWJ1dGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSGlkZGVuLmh0bWwjSGlkZGVuIj5IaWRkZW48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHbG9iYWwuaHRtbCNHbG9iYWwiPkdsb2JhbDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny41OCA8Y29kZT4uZ251X2F0dHJpYnV0ZSA8L2NvZGU+PHZhcj50YWc8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48L2gzPgorCis8cD5SZWNvcmQgYSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gb2JqZWN0IGF0dHJpYnV0ZSBmb3IgdGhpcyBmaWxlLiAgU2VlIDxhIGhyZWY9Ik9iamVjdC1BdHRyaWJ1dGVzLmh0bWwjT2JqZWN0LUF0dHJpYnV0ZXMiPk9iamVjdCBBdHRyaWJ1dGVzPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMC1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwLURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTRlN2VkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMC1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SDgvMzAwIERpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ikg4LzMwMC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Lmh0bWwjSDhfMDAyZjMwMC1GbG9hdGluZy1Qb2ludCIgdGl0bGU9Ikg4LzMwMCBGbG9hdGluZyBQb2ludCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI0g4XzAwMmYzMDAtT3Bjb2RlcyIgdGl0bGU9Ikg4LzMwMCBPcGNvZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSDglMmYzMDAtRGlyZWN0aXZlcyI+PC9hPgorPGEgbmFtZT0iSDhfMDAyZjMwMC1EaXJlY3RpdmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI0g4XzAwMmYzMDAtT3Bjb2RlcyI+SDgvMzAwIE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJIOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Lmh0bWwjSDhfMDAyZjMwMC1GbG9hdGluZy1Qb2ludCI+SDgvMzAwIEZsb2F0aW5nIFBvaW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Lmh0bWwjSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Ij5IOC8zMDAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xMi40IEg4LzMwMCBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1IOF8wMDJmMzAwLW1hY2hpbmUtZGlyZWN0aXZlcy1fMDAyOG5vbmVfMDAyOS04NzUiPjwvYT48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1IOF8wMDJmMzAwLV8wMDI4bm9uZV8wMDI5LTg3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdid29yZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLUg4XzAwMmYzMDAtODc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpbnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1IOF8wMDJmMzAwLTg3OCI+PC9hPjxjb2RlPmFzPC9jb2RlPiBoYXMgdGhlIGZvbGxvd2luZyBtYWNoaW5lLWRlcGVuZGVudCBkaXJlY3RpdmVzIGZvcgordGhlIEg4LzMwMDoKKworICAgICAKKzxhIG5hbWU9ImluZGV4LUg4XzAwMmYzMDBIXzAwMmMtYXNzZW1ibGluZy1mb3ItODc5Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi5oODMwMGg8L2NvZGU+PGRkPlJlY29nbml6ZSBhbmQgZW1pdCBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBmb3IgdGhlIEg4LzMwMEggdmFyaWFudCwgYW5kCithbHNvIG1ha2UgPGNvZGU+LmludDwvY29kZT4gZW1pdCAzMi1iaXQgbnVtYmVycyByYXRoZXIgdGhhbiB0aGUgdXN1YWwgKDE2LWJpdCkKK2ZvciB0aGUgSDgvMzAwIGZhbWlseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5oODMwMHM8L2NvZGU+PGRkPlJlY29nbml6ZSBhbmQgZW1pdCBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBmb3IgdGhlIEg4UyB2YXJpYW50LCBhbmQKK2Fsc28gbWFrZSA8Y29kZT4uaW50PC9jb2RlPiBlbWl0IDMyLWJpdCBudW1iZXJzIHJhdGhlciB0aGFuIHRoZSB1c3VhbCAoMTYtYml0KQorZm9yIHRoZSBIOC8zMDAgZmFtaWx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Lmg4MzAwaG48L2NvZGU+PGRkPlJlY29nbml6ZSBhbmQgZW1pdCBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBmb3IgdGhlIEg4LzMwMEggdmFyaWFudCBpbgorbm9ybWFsIG1vZGUsIGFuZCBhbHNvIG1ha2UgPGNvZGU+LmludDwvY29kZT4gZW1pdCAzMi1iaXQgbnVtYmVycyByYXRoZXIgdGhhbgordGhlIHVzdWFsICgxNi1iaXQpIGZvciB0aGUgSDgvMzAwIGZhbWlseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5oODMwMHNuPC9jb2RlPjxkZD5SZWNvZ25pemUgYW5kIGVtaXQgYWRkaXRpb25hbCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBIOFMgdmFyaWFudCBpbgorbm9ybWFsIG1vZGUsIGFuZCBhbHNvIG1ha2UgPGNvZGU+LmludDwvY29kZT4gZW1pdCAzMi1iaXQgbnVtYmVycyByYXRoZXIgdGhhbgordGhlIHVzdWFsICgxNi1iaXQpIGZvciB0aGUgSDgvMzAwIGZhbWlseS4gCis8L2RsPgorCisgICA8cD5PbiB0aGUgSDgvMzAwIGZhbWlseSAoaW5jbHVkaW5nIHRoZSBIOC8zMDBIKSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi53b3JkPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZXMKK2dlbmVyYXRlIDE2LWJpdCBudW1iZXJzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5OGIyOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0g4XzAwMmYzMDAtRmxvYXRpbmctUG9pbnQuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IOC8zMDAgRmxvYXRpbmcgUG9pbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ikg4LzMwMC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIOF8wMDJmMzAwLVN5bnRheC5odG1sI0g4XzAwMmYzMDAtU3ludGF4IiB0aXRsZT0iSDgvMzAwIFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI0g4XzAwMmYzMDAtRGlyZWN0aXZlcyIgdGl0bGU9Ikg4LzMwMCBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSDglMmYzMDAtRmxvYXRpbmctUG9pbnQiPjwvYT4KKzxhIG5hbWU9Ikg4XzAwMmYzMDAtRmxvYXRpbmctUG9pbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSDhfMDAyZjMwMC1EaXJlY3RpdmVzLmh0bWwjSDhfMDAyZjMwMC1EaXJlY3RpdmVzIj5IOC8zMDAgRGlyZWN0aXZlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikg4XzAwMmYzMDAtU3ludGF4Lmh0bWwjSDhfMDAyZjMwMC1TeW50YXgiPkg4LzMwMCBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJIOF8wMDJmMzAwXzAwMmREZXBlbmRlbnQuaHRtbCNIOF8wMDJmMzAwXzAwMmREZXBlbmRlbnQiPkg4LzMwMC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjEyLjMgRmxvYXRpbmcgUG9pbnQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLUg4XzAwMmYzMDAtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS04NzMiPjwvYT48YSBuYW1lPSJpbmRleC1IOF8wMDJmMzAwLWZsb2F0aW5nLXBvaW50LV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktODc0Ij48L2E+VGhlIEg4LzMwMCBmYW1pbHkgaGFzIG5vIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50LCBidXQgdGhlIDxjb2RlPi5mbG9hdDwvY29kZT4KK2RpcmVjdGl2ZSBnZW5lcmF0ZXMgPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPiBmbG9hdGluZy1wb2ludCBudW1iZXJzIGZvciBjb21wYXRpYmlsaXR5Cit3aXRoIG90aGVyIGRldmVsb3BtZW50IHRvb2xzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwLU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0g4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZDUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwLU9wY29kZXMuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IOC8zMDAgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Lmh0bWwjSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iSDgvMzAwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikg4XzAwMmYzMDAtRGlyZWN0aXZlcy5odG1sI0g4XzAwMmYzMDAtRGlyZWN0aXZlcyIgdGl0bGU9Ikg4LzMwMCBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSDglMmYzMDAtT3Bjb2RlcyI+PC9hPgorPGEgbmFtZT0iSDhfMDAyZjMwMC1PcGNvZGVzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSDhfMDAyZjMwMC1EaXJlY3RpdmVzLmh0bWwjSDhfMDAyZjMwMC1EaXJlY3RpdmVzIj5IOC8zMDAgRGlyZWN0aXZlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCI+SDgvMzAwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTIuNSBPcGNvZGVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtSDhfMDAyZjMwMC1vcGNvZGUtc3VtbWFyeS04ODAiPjwvYT48YSBuYW1lPSJpbmRleC1vcGNvZGUtc3VtbWFyeV8wMDJjLUg4XzAwMmYzMDAtODgxIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5lbW9uaWNzXzAwMmMtSDhfMDAyZjMwMC04ODIiPjwvYT48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1zdW1tYXJ5XzAwMmMtSDhfMDAyZjMwMC04ODMiPjwvYT5Gb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIEg4LzMwMCBtYWNoaW5lIGluc3RydWN0aW9uIHNldCwgc2VlCis8Y2l0ZT5IOC8zMDAgU2VyaWVzIFByb2dyYW1taW5nIE1hbnVhbDwvY2l0ZT4uICBGb3IgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8KK3RoZSBIOC8zMDBILCBzZWUgPGNpdGU+SDgvMzAwSCBTZXJpZXMgUHJvZ3JhbW1pbmcgTWFudWFsPC9jaXRlPiAoUmVuZXNhcykuCisKKyAgIDxwPjxjb2RlPmFzPC9jb2RlPiBpbXBsZW1lbnRzIGFsbCB0aGUgc3RhbmRhcmQgSDgvMzAwIG9wY29kZXMuICBObyBhZGRpdGlvbmFsCitwc2V1ZG8taW5zdHJ1Y3Rpb25zIGFyZSBuZWVkZWQgb24gdGhpcyBmYW1pbHkuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXNpemUtc3VmZml4ZXNfMDAyYy1IOF8wMDJmMzAwLTg4NCI+PC9hPjxhIG5hbWU9ImluZGV4LUg4XzAwMmYzMDAtc2l6ZS1zdWZmaXhlcy04ODUiPjwvYT5Gb3VyIEg4LzMwMCBpbnN0cnVjdGlvbnMgKDxjb2RlPmFkZDwvY29kZT4sIDxjb2RlPmNtcDwvY29kZT4sIDxjb2RlPm1vdjwvY29kZT4sCis8Y29kZT5zdWI8L2NvZGU+KSBhcmUgZGVmaW5lZCB3aXRoIHZhcmlhbnRzIHVzaW5nIHRoZSBzdWZmaXhlcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5iPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gc3BlY2lmeSB0aGUgc2l6ZSBvZiBhIG1lbW9yeSBvcGVyYW5kLiAKKzxjb2RlPmFzPC9jb2RlPiBzdXBwb3J0cyB0aGVzZSBzdWZmaXhlcywgYnV0IGRvZXMgbm90IHJlcXVpcmUgdGhlbTsKK3NpbmNlIG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgYWx3YXlzIGEgcmVnaXN0ZXIsIDxjb2RlPmFzPC9jb2RlPiBjYW4KK2RlZHVjZSB0aGUgY29ycmVjdCBzaXplLgorCisgICA8cD5Gb3IgZXhhbXBsZSwgc2luY2UgPGNvZGU+cjA8L2NvZGU+IHJlZmVycyB0byBhIDE2LWJpdCByZWdpc3RlciwKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgbW92ICAgIHIwLEBmb28KKzxicj5pcyBlcXVpdmFsZW50IHRvPGJyPgorICAgICBtb3YudyAgcjAsQGZvbworPC9wcmU+CisgICA8cD5JZiB5b3UgdXNlIHRoZSBzaXplIHN1ZmZpeGVzLCA8Y29kZT5hczwvY29kZT4gaXNzdWVzIGEgd2FybmluZyB3aGVuCit0aGUgc3VmZml4IGFuZCB0aGUgcmVnaXN0ZXIgc2l6ZSBkbyBub3QgbWF0Y2guCisKKzwhLS0gQ29weXJpZ2h0IDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTgsIDIwMDQsIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzNiYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SDgvMzAwIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ikg4LzMwMC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIOF8wMDJmMzAwLVN5bnRheC5odG1sI0g4XzAwMmYzMDAtU3ludGF4IiB0aXRsZT0iSDgvMzAwIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikg4JTJmMzAwLU9wdGlvbnMiPjwvYT4KKzxhIG5hbWU9Ikg4XzAwMmYzMDAtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJIOF8wMDJmMzAwLVN5bnRheC5odG1sI0g4XzAwMmYzMDAtU3ludGF4Ij5IOC8zMDAgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Lmh0bWwjSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Ij5IOC8zMDAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xMi4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1IOF8wMDJmMzAwLW9wdGlvbnMtODYyIj48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLUg4XzAwMmYzMDAtODYzIj48L2E+VGhlIFJlbmVzYXMgSDgvMzAwIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IGhhcyBvbmUKK21hY2hpbmUtZGVwZW5kZW50IG9wdGlvbjoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWgtdGljay1oZXg8L2NvZGU+PGRkPlN1cHBvcnQgSCcwMCBzdHlsZSBoZXggY29uc3RhbnRzIGluIGFkZGl0aW9uIHRvIDB4MDAgc3R5bGUuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0g4XzAwMmYzMDAtU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwLVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5N2M5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwLVN5bnRheC5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkg4LzMwMCBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ikg4LzMwMC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNIOF8wMDJmMzAwLU9wdGlvbnMiIHRpdGxlPSJIOC8zMDAgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ikg4XzAwMmYzMDAtRmxvYXRpbmctUG9pbnQuaHRtbCNIOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50IiB0aXRsZT0iSDgvMzAwIEZsb2F0aW5nIFBvaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSDglMmYzMDAtU3ludGF4Ij48L2E+Cis8YSBuYW1lPSJIOF8wMDJmMzAwLVN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJIOF8wMDJmMzAwLUZsb2F0aW5nLVBvaW50Lmh0bWwjSDhfMDAyZjMwMC1GbG9hdGluZy1Qb2ludCI+SDgvMzAwIEZsb2F0aW5nIFBvaW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIj5IOC8zMDAgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCI+SDgvMzAwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTIuMiBTeW50YXg8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbCNIOF8wMDJmMzAwXzAwMmRDaGFycyI+SDgvMzAwLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkUmVncy5odG1sI0g4XzAwMmYzMDBfMDAyZFJlZ3MiPkg4LzMwMC1SZWdzPC9hPjogICAgICAgICAgICAgICAgICBSZWdpc3RlciBOYW1lcworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQWRkcmVzc2luZy5odG1sI0g4XzAwMmYzMDBfMDAyZEFkZHJlc3NpbmciPkg4LzMwMC1BZGRyZXNzaW5nPC9hPjogICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzCis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwXzAwMmRBZGRyZXNzaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwXzAwMmRBZGRyZXNzaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjZjQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0g4XzAwMmYzMDBfMDAyZEFkZHJlc3NpbmcuaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IOC8zMDAtQWRkcmVzc2luZyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSDhfMDAyZjMwMC1TeW50YXguaHRtbCNIOF8wMDJmMzAwLVN5bnRheCIgdGl0bGU9Ikg4LzMwMCBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIOF8wMDJmMzAwXzAwMmRSZWdzLmh0bWwjSDhfMDAyZjMwMF8wMDJkUmVncyIgdGl0bGU9Ikg4LzMwMC1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSDglMmYzMDAtQWRkcmVzc2luZyI+PC9hPgorPGEgbmFtZT0iSDhfMDAyZjMwMF8wMDJkQWRkcmVzc2luZyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZFJlZ3MuaHRtbCNIOF8wMDJmMzAwXzAwMmRSZWdzIj5IOC8zMDAtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikg4XzAwMmYzMDAtU3ludGF4Lmh0bWwjSDhfMDAyZjMwMC1TeW50YXgiPkg4LzMwMCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjEyLjIuMyBBZGRyZXNzaW5nIE1vZGVzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtYWRkcmVzc2luZy1tb2Rlc18wMDJjLUg4XzAwMmYzMDAtODcxIj48L2E+PGEgbmFtZT0iaW5kZXgtSDhfMDAyZjMwMC1hZGRyZXNzaW5nLW1vZGVzLTg3MiI+PC9hPmFzIHVuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgYWRkcmVzc2luZyBtb2RlcyBmb3IgdGhlIEg4LzMwMDoKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnI8L2NvZGU+PHZhcj5uPC92YXI+PGRkPlJlZ2lzdGVyIGRpcmVjdAorCisgICAgIDxicj48ZHQ+PGNvZGU+QHI8L2NvZGU+PHZhcj5uPC92YXI+PGRkPlJlZ2lzdGVyIGluZGlyZWN0CisKKyAgICAgPGJyPjxkdD48Y29kZT5AKDwvY29kZT48dmFyPmQ8L3Zhcj48Y29kZT4sIHI8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+KTwvY29kZT48ZHQ+PGNvZGU+QCg8L2NvZGU+PHZhcj5kPC92YXI+PGNvZGU+OjE2LCByPC9jb2RlPjx2YXI+bjwvdmFyPjxjb2RlPik8L2NvZGU+PGR0Pjxjb2RlPkAoPC9jb2RlPjx2YXI+ZDwvdmFyPjxjb2RlPjoyNCwgcjwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZWdpc3RlciBpbmRpcmVjdDogMTYtYml0IG9yIDI0LWJpdCBkaXNwbGFjZW1lbnQgPHZhcj5kPC92YXI+IGZyb20gcmVnaXN0ZXIKKzx2YXI+bjwvdmFyPi4gICgyNC1iaXQgZGlzcGxhY2VtZW50cyBhcmUgb25seSBtZWFuaW5nZnVsIG9uIHRoZSBIOC8zMDBILikKKworICAgICA8YnI+PGR0Pjxjb2RlPkByPC9jb2RlPjx2YXI+bjwvdmFyPjxjb2RlPis8L2NvZGU+PGRkPlJlZ2lzdGVyIGluZGlyZWN0IHdpdGggcG9zdC1pbmNyZW1lbnQKKworICAgICA8YnI+PGR0Pjxjb2RlPkAtcjwvY29kZT48dmFyPm48L3Zhcj48ZGQ+UmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBwcmUtZGVjcmVtZW50CisKKyAgICAgPGJyPjxkdD48Y29kZT5APC9jb2RlPjx2YXI+YWE8L3Zhcj48ZHQ+PGNvZGU+QDwvY29kZT48dmFyPmFhPC92YXI+PGNvZGU+Ojg8L2NvZGU+PGR0Pjxjb2RlPkA8L2NvZGU+PHZhcj5hYTwvdmFyPjxjb2RlPjoxNjwvY29kZT48ZHQ+PGNvZGU+QDwvY29kZT48dmFyPmFhPC92YXI+PGNvZGU+OjI0PC9jb2RlPjxkZD5BYnNvbHV0ZSBhZGRyZXNzIDxjb2RlPmFhPC9jb2RlPi4gIChUaGUgYWRkcmVzcyBzaXplICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+OjI0PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9ubHkgbWFrZXMKK3NlbnNlIG9uIHRoZSBIOC8zMDBILikKKworICAgICA8YnI+PGR0Pjxjb2RlPiM8L2NvZGU+PHZhcj54eDwvdmFyPjxkdD48Y29kZT4jPC9jb2RlPjx2YXI+eHg8L3Zhcj48Y29kZT46ODwvY29kZT48ZHQ+PGNvZGU+IzwvY29kZT48dmFyPnh4PC92YXI+PGNvZGU+OjE2PC9jb2RlPjxkdD48Y29kZT4jPC9jb2RlPjx2YXI+eHg8L3Zhcj48Y29kZT46MzI8L2NvZGU+PGRkPkltbWVkaWF0ZSBkYXRhIDx2YXI+eHg8L3Zhcj4uICBZb3UgbWF5IHNwZWNpZnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ojg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+OjE2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46MzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGNsYXJpdHksIGlmIHlvdSB3aXNoOyBidXQgPGNvZGU+YXM8L2NvZGU+IG5laXRoZXIKK3JlcXVpcmVzIHRoaXMgbm9yIHVzZXMgaXQmbWRhc2g7dGhlIGRhdGEgc2l6ZSByZXF1aXJlZCBpcyB0YWtlbiBmcm9tCitjb250ZXh0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+QEA8L2NvZGU+PHZhcj5hYTwvdmFyPjxkdD48Y29kZT5AQDwvY29kZT48dmFyPmFhPC92YXI+PGNvZGU+Ojg8L2NvZGU+PGRkPk1lbW9yeSBpbmRpcmVjdC4gIFlvdSBtYXkgc3BlY2lmeSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46ODwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgY2xhcml0eSwgaWYgeW91Cit3aXNoOyBidXQgPGNvZGU+YXM8L2NvZGU+IG5laXRoZXIgcmVxdWlyZXMgdGhpcyBub3IgdXNlcyBpdC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGM3M2NiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IOC8zMDAtQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikg4XzAwMmYzMDAtU3ludGF4Lmh0bWwjSDhfMDAyZjMwMC1TeW50YXgiIHRpdGxlPSJIOC8zMDAgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkUmVncy5odG1sI0g4XzAwMmYzMDBfMDAyZFJlZ3MiIHRpdGxlPSJIOC8zMDAtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikg4JTJmMzAwLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJIOF8wMDJmMzAwXzAwMmRDaGFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJIOF8wMDJmMzAwXzAwMmRSZWdzLmh0bWwjSDhfMDAyZjMwMF8wMDJkUmVncyI+SDgvMzAwLVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJIOF8wMDJmMzAwLVN5bnRheC5odG1sI0g4XzAwMmYzMDAtU3ludGF4Ij5IOC8zMDAgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xMi4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLUg4XzAwMmYzMDAtODY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtSDhfMDAyZjMwMC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTg2NSI+PC9hPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB0aGUgbGluZSBjb21tZW50IGNoYXJhY3Rlci4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1IOF8wMDJmMzAwLTg2NiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1IOF8wMDJmMzAwLTg2NyI+PC9hPjxhIG5hbWU9ImluZGV4LUg4XzAwMmYzMDAtbGluZS1zZXBhcmF0b3ItODY4Ij48L2E+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBuZXdsaW5lIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMuIAorVGhlcmVmb3JlIDxlbT55b3UgbWF5IG5vdCB1c2UgJmxzcXVvOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPjxlbT4mcnNxdW87IGluIHN5bWJvbCBuYW1lczwvZW0+IG9uIHRoZSBIOC8zMDAuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZhYjBhMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkg4LzMwMC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVwaXBoYW55XzAwMmREZXBlbmRlbnQuaHRtbCNFcGlwaGFueV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iRXBpcGhhbnktRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iSFBQQS1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIOCUyZjMwMC1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJIUFBBXzAwMmREZXBlbmRlbnQuaHRtbCNIUFBBXzAwMmREZXBlbmRlbnQiPkhQUEEtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRXBpcGhhbnlfMDAyZERlcGVuZGVudC5odG1sI0VwaXBoYW55XzAwMmREZXBlbmRlbnQiPkVwaXBoYW55LURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4xMiBIOC8zMDAgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSDhfMDAyZjMwMC1zdXBwb3J0LTg2MSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIj5IOC8zMDAgT3B0aW9uczwvYT46ICAgICAgICAgICAgICAgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iSDhfMDAyZjMwMC1TeW50YXguaHRtbCNIOF8wMDJmMzAwLVN5bnRheCI+SDgvMzAwIFN5bnRheDwvYT46ICAgICAgICAgICAgICAgIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iSDhfMDAyZjMwMC1GbG9hdGluZy1Qb2ludC5odG1sI0g4XzAwMmYzMDAtRmxvYXRpbmctUG9pbnQiPkg4LzMwMCBGbG9hdGluZyBQb2ludDwvYT46ICAgICAgICBGbG9hdGluZyBQb2ludAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iSDhfMDAyZjMwMC1EaXJlY3RpdmVzLmh0bWwjSDhfMDAyZjMwMC1EaXJlY3RpdmVzIj5IOC8zMDAgRGlyZWN0aXZlczwvYT46ICAgICAgICAgICAgSDgvMzAwIE1hY2hpbmUgRGlyZWN0aXZlcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iSDhfMDAyZjMwMC1PcGNvZGVzLmh0bWwjSDhfMDAyZjMwMC1PcGNvZGVzIj5IOC8zMDAgT3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMF8wMDJkUmVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSDhfMDAyZjMwMF8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYjgyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IOF8wMDJmMzAwXzAwMmRSZWdzLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SDgvMzAwLVJlZ3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikg4XzAwMmYzMDAtU3ludGF4Lmh0bWwjSDhfMDAyZjMwMC1TeW50YXgiIHRpdGxlPSJIOC8zMDAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQ2hhcnMuaHRtbCNIOF8wMDJmMzAwXzAwMmRDaGFycyIgdGl0bGU9Ikg4LzMwMC1DaGFycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZEFkZHJlc3NpbmcuaHRtbCNIOF8wMDJmMzAwXzAwMmRBZGRyZXNzaW5nIiB0aXRsZT0iSDgvMzAwLUFkZHJlc3NpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIOCUyZjMwMC1SZWdzIj48L2E+Cis8YSBuYW1lPSJIOF8wMDJmMzAwXzAwMmRSZWdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZEFkZHJlc3NpbmcuaHRtbCNIOF8wMDJmMzAwXzAwMmRBZGRyZXNzaW5nIj5IOC8zMDAtQWRkcmVzc2luZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZENoYXJzLmh0bWwjSDhfMDAyZjMwMF8wMDJkQ2hhcnMiPkg4LzMwMC1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikg4XzAwMmYzMDAtU3ludGF4Lmh0bWwjSDhfMDAyZjMwMC1TeW50YXgiPkg4LzMwMCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjEyLjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LUg4XzAwMmYzMDAtcmVnaXN0ZXJzLTg2OSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtSDhfMDAyZjMwMC04NzAiPjwvYT5Zb3UgY2FuIHVzZSBwcmVkZWZpbmVkIHN5bWJvbHMgb2YgdGhlIGZvcm0gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yPC9zcGFuPjx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5oPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yPC9zcGFuPjx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5sPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHJlZmVyIHRvIHRoZSBIOC8zMDAgcmVnaXN0ZXJzIGFzIHNpeHRlZW4gOC1iaXQKK2dlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuICA8dmFyPm48L3Zhcj4gaXMgYSBkaWdpdCBmcm9tICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0bworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj43PC9zcGFuPjwvc2FtcD4mcnNxdW87KTsgZm9yIGluc3RhbmNlLCBib3RoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjBoPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI3bDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgdmFsaWQKK3JlZ2lzdGVyIG5hbWVzLgorCisgICA8cD5Zb3UgY2FuIGFsc28gdXNlIHRoZSBlaWdodCBwcmVkZWZpbmVkIHN5bWJvbHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87IHRvIHJlZmVyCit0byB0aGUgSDgvMzAwIHJlZ2lzdGVycyBhcyAxNi1iaXQgcmVnaXN0ZXJzICh5b3UgbXVzdCB1c2UgdGhpcyBmb3JtIGZvcgorYWRkcmVzc2luZykuCisKKyAgIDxwPk9uIHRoZSBIOC8zMDBILCB5b3UgY2FuIGFsc28gdXNlIHRoZSBlaWdodCBwcmVkZWZpbmVkIHN5bWJvbHMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXI8L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPiZyc3F1bzsgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXIwPC9zcGFuPjwvc2FtcD4mcnNxdW87IDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lcjc8L3NwYW4+PC9zYW1wPiZyc3F1bzspIHRvIHJlZmVyIHRvIHRoZSAzMi1iaXQKK2dlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMuCisKKyAgIDxwPlRoZSB0d28gY29udHJvbCByZWdpc3RlcnMgYXJlIGNhbGxlZCA8Y29kZT5wYzwvY29kZT4gKHByb2dyYW0gY291bnRlcjsgYQorMTYtYml0IHJlZ2lzdGVyLCBleGNlcHQgb24gdGhlIEg4LzMwMEggd2hlcmUgaXQgaXMgMjQgYml0cykgYW5kCis8Y29kZT5jY3I8L2NvZGU+IChjb25kaXRpb24gY29kZSByZWdpc3RlcjsgYW4gOC1iaXQgcmVnaXN0ZXIpLiAgPGNvZGU+cjc8L2NvZGU+IGlzCit1c2VkIGFzIHRoZSBzdGFjayBwb2ludGVyLCBhbmQgY2FuIGFsc28gYmUgY2FsbGVkIDxjb2RlPnNwPC9jb2RlPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQS1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IUFBBLURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTc1ZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQS1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSwyMzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkhQUEEgRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iSFBQQS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIUFBBLUZsb2F0aW5nLVBvaW50Lmh0bWwjSFBQQS1GbG9hdGluZy1Qb2ludCIgdGl0bGU9IkhQUEEgRmxvYXRpbmcgUG9pbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIUFBBLU9wY29kZXMuaHRtbCNIUFBBLU9wY29kZXMiIHRpdGxlPSJIUFBBIE9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIUFBBLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSFBQQS1PcGNvZGVzLmh0bWwjSFBQQS1PcGNvZGVzIj5IUFBBIE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJIUFBBLUZsb2F0aW5nLVBvaW50Lmh0bWwjSFBQQS1GbG9hdGluZy1Qb2ludCI+SFBQQSBGbG9hdGluZyBQb2ludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkhQUEFfMDAyZERlcGVuZGVudC5odG1sI0hQUEFfMDAyZERlcGVuZGVudCI+SFBQQS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjEzLjUgSFBQQSBBc3NlbWJsZXIgRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxjb2RlPmFzPC9jb2RlPiBmb3IgdGhlIEhQUEEgc3VwcG9ydHMgbWFueSBhZGRpdGlvbmFsIGRpcmVjdGl2ZXMgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggdGhlIG5hdGl2ZSBhc3NlbWJsZXIuICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZW0gb25seQorYnJpZWZseS4gIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBIUFBBLXNwZWNpZmljIGFzc2VtYmxlciBkaXJlY3RpdmVzLCBzZWUKKzxjaXRlPkhQOTAwMCBTZXJpZXMgODAwIEFzc2VtYmx5IExhbmd1YWdlIFJlZmVyZW5jZSBNYW51YWw8L2NpdGU+IChIUCA5MjQzMi05MDAwMSkuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUhQUEEtZGlyZWN0aXZlcy1ub3Qtc3VwcG9ydGVkLTg5MCI+PC9hPjxjb2RlPmFzPC9jb2RlPiBkb2VzIDxlbT5ub3Q8L2VtPiBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgYXNzZW1ibGVyIGRpcmVjdGl2ZXMKK2Rlc2NyaWJlZCBpbiB0aGUgSFAgbWFudWFsOgorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIC5lbmRtICAgICAgICAgICAubGlzdG9uCisgICAgIC5lbnRlciAgICAgICAgICAubG9jY3QKKyAgICAgLmxlYXZlICAgICAgICAgIC5tYWNybworICAgICAubGlzdG9mZgorPC9wcmU+CisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlcGFyYW1fMDA3ZC1vbi1IUFBBLTg5MSI+PC9hPkJleW9uZCB0aG9zZSBpbXBsZW1lbnRlZCBmb3IgY29tcGF0aWJpbGl0eSwgPGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIG9uZQorYWRkaXRpb25hbCBhc3NlbWJsZXIgZGlyZWN0aXZlIGZvciB0aGUgSFBQQTogPGNvZGU+LnBhcmFtPC9jb2RlPi4gIEl0IGNvbnZleXMKK3JlZ2lzdGVyIGFyZ3VtZW50IGxvY2F0aW9ucyBmb3Igc3RhdGljIGZ1bmN0aW9ucy4gIEl0cyBzeW50YXggY2xvc2VseSBmb2xsb3dzCit0aGUgPGNvZGU+LmV4cG9ydDwvY29kZT4gZGlyZWN0aXZlLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1IUFBBXzAwMmRvbmx5LWRpcmVjdGl2ZXMtODkyIj48L2E+VGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIGRpcmVjdGl2ZXMgaW4gPGNvZGU+YXM8L2NvZGU+IGZvciB0aGUgSFBQQToKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LmJsb2NrIDwvY29kZT48dmFyPm48L3Zhcj48ZHQ+PGNvZGU+LmJsb2NreiA8L2NvZGU+PHZhcj5uPC92YXI+PGRkPlJlc2VydmUgPHZhcj5uPC92YXI+IGJ5dGVzIG9mIHN0b3JhZ2UsIGFuZCBpbml0aWFsaXplIHRoZW0gdG8gemVyby4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5jYWxsPC9jb2RlPjxkZD5NYXJrIHRoZSBiZWdpbm5pbmcgb2YgYSBwcm9jZWR1cmUgY2FsbC4gIE9ubHkgdGhlIHNwZWNpYWwgY2FzZSB3aXRoIDxlbT5ubworYXJndW1lbnRzPC9lbT4gaXMgYWxsb3dlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5jYWxsaW5mbyBbIDwvY29kZT48dmFyPnBhcmFtPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+LCAuLi4gXSAgWyA8L2NvZGU+PHZhcj5mbGFnPC92YXI+PGNvZGU+LCAuLi4gXTwvY29kZT48ZGQ+U3BlY2lmeSBhIG51bWJlciBvZiBwYXJhbWV0ZXJzIGFuZCBmbGFncyB0aGF0IGRlZmluZSB0aGUgZW52aXJvbm1lbnQgZm9yIGEKK3Byb2NlZHVyZS4KKworICAgICA8cD48dmFyPnBhcmFtPC92YXI+IG1heSBiZSBhbnkgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcmFtZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoZnJhbWUgc2l6ZSksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZW50cnlfZ3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGVuZCBvZgorZ2VuZXJhbCByZWdpc3RlciByYW5nZSksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZW50cnlfZnI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGVuZCBvZiBmbG9hdCByZWdpc3RlciByYW5nZSksCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmVudHJ5X3NyPC9zcGFuPjwvc2FtcD4mcnNxdW87IChlbmQgb2Ygc3BhY2UgcmVnaXN0ZXIgcmFuZ2UpLgorCisgICAgIDxwPlRoZSB2YWx1ZXMgZm9yIDx2YXI+ZmxhZzwvdmFyPiBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNhbGxlcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAocHJvYyBoYXMKK3N1YnJvdXRpbmVzKSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub19jYWxsczwvc3Bhbj48L3NhbXA+JnJzcXVvOyAocHJvYyBkb2VzIG5vdCBjYWxsIHN1YnJvdXRpbmVzKSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zYXZlX3JwPC9zcGFuPjwvc2FtcD4mcnNxdW87CisocHJlc2VydmUgcmV0dXJuIHBvaW50ZXIpLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNhdmVfc3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHByb2MgcHJlc2VydmVzIHN0YWNrIHBvaW50ZXIpLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub191bndpbmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGRvIG5vdCB1bndpbmQgdGhpcyBwcm9jKSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ocHV4X2ludDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAocHJvYyBpcyBpbnRlcnJ1cHQKK3JvdXRpbmUpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmNvZGU8L2NvZGU+PGRkPkFzc2VtYmxlIGludG8gdGhlIHN0YW5kYXJkIHNlY3Rpb24gY2FsbGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JFRFWFQkPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBzdWJzZWN0aW9uCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiRDT0RFJDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5jb3B5cmlnaHQgIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PGRkPkluIHRoZSBTT00gb2JqZWN0IGZvcm1hdCwgaW5zZXJ0IDx2YXI+c3RyaW5nPC92YXI+IGludG8gdGhlIG9iamVjdCBjb2RlLCBtYXJrZWQgYXMgYQorY29weXJpZ2h0IHN0cmluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5jb3B5cmlnaHQgIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PGRkPkluIHRoZSBFTEYgb2JqZWN0IGZvcm1hdCwgaW5zZXJ0IDx2YXI+c3RyaW5nPC92YXI+IGludG8gdGhlIG9iamVjdCBjb2RlLCBtYXJrZWQgYXMgYQordmVyc2lvbiBzdHJpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZW50ZXI8L2NvZGU+PGRkPk5vdCB5ZXQgc3VwcG9ydGVkOyB0aGUgYXNzZW1ibGVyIHJlamVjdHMgcHJvZ3JhbXMgY29udGFpbmluZyB0aGlzIGRpcmVjdGl2ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5lbnRyeTwvY29kZT48ZGQ+TWFyayB0aGUgYmVnaW5uaW5nIG9mIGEgcHJvY2VkdXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmV4aXQ8L2NvZGU+PGRkPk1hcmsgdGhlIGVuZCBvZiBhIHByb2NlZHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5leHBvcnQgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiBbICw8L2NvZGU+PHZhcj50eXA8L3Zhcj48Y29kZT4gXSAgWyAsPC9jb2RlPjx2YXI+cGFyYW08L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+cjwvdmFyPjxjb2RlPiBdPC9jb2RlPjxkZD5NYWtlIGEgcHJvY2VkdXJlIDx2YXI+bmFtZTwvdmFyPiBhdmFpbGFibGUgdG8gY2FsbGVycy4gIDx2YXI+dHlwPC92YXI+LCBpZiBwcmVzZW50LCBtdXN0CitiZSBvbmUgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hYnNvbHV0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb2RlPC9zcGFuPjwvc2FtcD4mcnNxdW87IChFTEYgb25seSwgbm90IFNPTSksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZW50cnk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lbnRyeTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taWxsaWNvZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cGxhYmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wcmlfcHJvZzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zZWNfcHJvZzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD48dmFyPnBhcmFtPC92YXI+LCBpZiBwcmVzZW50LCBwcm92aWRlcyBlaXRoZXIgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlCitwcm9jZWR1cmUgYXJndW1lbnRzIGFuZCByZXN1bHQsIG9yIGEgcHJpdmlsZWdlIGxldmVsLiAgPHZhcj5wYXJhbTwvdmFyPiBtYXkgYmUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJndzwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOyAod2hlcmUgPHZhcj5uPC92YXI+IHJhbmdlcyBmcm9tIDxjb2RlPjA8L2NvZGU+IHRvIDxjb2RlPjM8L2NvZGU+LCBhbmQKK2luZGljYXRlcyBvbmUgb2YgZm91ciBvbmUtd29yZCBhcmd1bWVudHMpOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJ0bnZhbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAodGhlIHByb2NlZHVyZSdzCityZXN1bHQpOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByaXZfbGV2PC9zcGFuPjwvc2FtcD4mcnNxdW87IChwcml2aWxlZ2UgbGV2ZWwpLiAgRm9yIGFyZ3VtZW50cyBvciB0aGUgcmVzdWx0LAorPHZhcj5yPC92YXI+IHNwZWNpZmllcyBob3cgdG8gcmVsb2NhdGUsIGFuZCBtdXN0IGJlIG9uZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vPC9zcGFuPjwvc2FtcD4mcnNxdW87IChub3QKK3JlbG9jYXRhYmxlKSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ncjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoYXJndW1lbnQgaXMgaW4gZ2VuZXJhbCByZWdpc3RlciksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGluCitmbG9hdGluZyBwb2ludCByZWdpc3RlciksIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHVwcGVyIGhhbGYgb2YgZmxvYXQgcmVnaXN0ZXIpLiAKK0ZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByaXZfbGV2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCA8dmFyPnI8L3Zhcj4gaXMgYW4gaW50ZWdlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5oYWxmIDwvY29kZT48dmFyPm48L3Zhcj48ZGQ+RGVmaW5lIGEgdHdvLWJ5dGUgaW50ZWdlciBjb25zdGFudCA8dmFyPm48L3Zhcj47IHN5bm9ueW0gZm9yIHRoZSBwb3J0YWJsZQorPGNvZGU+YXM8L2NvZGU+IGRpcmVjdGl2ZSA8Y29kZT4uc2hvcnQ8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmltcG9ydCA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+IFsgLDwvY29kZT48dmFyPnR5cDwvdmFyPjxjb2RlPiBdPC9jb2RlPjxkZD5Db252ZXJzZSBvZiA8Y29kZT4uZXhwb3J0PC9jb2RlPjsgbWFrZSBhIHByb2NlZHVyZSBhdmFpbGFibGUgdG8gY2FsbC4gIFRoZSBhcmd1bWVudHMKK3VzZSB0aGUgc2FtZSBjb252ZW50aW9ucyBhcyB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBmb3IgPGNvZGU+LmV4cG9ydDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4ubGFiZWwgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD5EZWZpbmUgPHZhcj5uYW1lPC92YXI+IGFzIGEgbGFiZWwgZm9yIHRoZSBjdXJyZW50IGFzc2VtYmx5IGxvY2F0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmxlYXZlPC9jb2RlPjxkZD5Ob3QgeWV0IHN1cHBvcnRlZDsgdGhlIGFzc2VtYmxlciByZWplY3RzIHByb2dyYW1zIGNvbnRhaW5pbmcgdGhpcyBkaXJlY3RpdmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4ub3JpZ2luIDwvY29kZT48dmFyPmxjPC92YXI+PGRkPkFkdmFuY2UgbG9jYXRpb24gY291bnRlciB0byA8dmFyPmxjPC92YXI+LiBTeW5vbnltIGZvciB0aGUgPGNvZGU+YXM8L2NvZGU+Citwb3J0YWJsZSBkaXJlY3RpdmUgPGNvZGU+Lm9yZzwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4ucGFyYW0gPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiBbICw8L2NvZGU+PHZhcj50eXA8L3Zhcj48Y29kZT4gXSAgWyAsPC9jb2RlPjx2YXI+cGFyYW08L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+cjwvdmFyPjxjb2RlPiBdPC9jb2RlPjxkZD48IS0tIE5vdCBpbiBIUCBtYW51YWw7IEBzY3tnbnV9IEhQUEEgZXh0ZW5zaW9uIC0tPgorU2ltaWxhciB0byA8Y29kZT4uZXhwb3J0PC9jb2RlPiwgYnV0IHVzZWQgZm9yIHN0YXRpYyBwcm9jZWR1cmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LnByb2M8L2NvZGU+PGRkPlVzZSBwcmVjZWRpbmcgdGhlIGZpcnN0IHN0YXRlbWVudCBvZiBhIHByb2NlZHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5wcm9jZW5kPC9jb2RlPjxkZD5Vc2UgZm9sbG93aW5nIHRoZSBsYXN0IHN0YXRlbWVudCBvZiBhIHByb2NlZHVyZS4KKworICAgICA8YnI+PGR0Pjx2YXI+bGFiZWw8L3Zhcj48Y29kZT4gLnJlZyA8L2NvZGU+PHZhcj5leHByPC92YXI+PGRkPjwhLS0gPz8gTm90IGluIEhQIG1hbnVhbCAoSmFuIDE5ODggdm4pIC0tPgorU3lub255bSBmb3IgPGNvZGU+LmVxdTwvY29kZT47IGRlZmluZSA8dmFyPmxhYmVsPC92YXI+IHdpdGggdGhlIGFic29sdXRlIGV4cHJlc3Npb24KKzx2YXI+ZXhwcjwvdmFyPiBhcyBpdHMgdmFsdWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4uc3BhY2UgPC9jb2RlPjx2YXI+c2VjbmFtZTwvdmFyPjxjb2RlPiBbICw8L2NvZGU+PHZhcj5wYXJhbXM8L3Zhcj48Y29kZT4gXTwvY29kZT48ZGQ+U3dpdGNoIHRvIHNlY3Rpb24gPHZhcj5zZWNuYW1lPC92YXI+LCBjcmVhdGluZyBhIG5ldyBzZWN0aW9uIGJ5IHRoYXQgbmFtZSBpZgorbmVjZXNzYXJ5LiAgWW91IG1heSBvbmx5IHVzZSA8dmFyPnBhcmFtczwvdmFyPiB3aGVuIGNyZWF0aW5nIGEgbmV3IHNlY3Rpb24sIG5vdAord2hlbiBzd2l0Y2hpbmcgdG8gYW4gZXhpc3Rpbmcgb25lLiAgPHZhcj5zZWNuYW1lPC92YXI+IG1heSBpZGVudGlmeSBhIHNlY3Rpb24gYnkKK251bWJlciByYXRoZXIgdGhhbiBieSBuYW1lLgorCisgICAgIDxwPklmIHNwZWNpZmllZCwgdGhlIGxpc3QgPHZhcj5wYXJhbXM8L3Zhcj4gZGVjbGFyZXMgYXR0cmlidXRlcyBvZiB0aGUgc2VjdGlvbiwKK2lkZW50aWZpZWQgYnkga2V5d29yZHMuICBUaGUga2V5d29yZHMgcmVjb2duaXplZCBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zcG51bT08L3NwYW4+PHZhcj5leHA8L3Zhcj48L3NhbXA+JnJzcXVvOworKGlkZW50aWZ5IHRoaXMgc2VjdGlvbiBieSB0aGUgbnVtYmVyIDx2YXI+ZXhwPC92YXI+LCBhbiBhYnNvbHV0ZSBleHByZXNzaW9uKSwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c29ydD08L3NwYW4+PHZhcj5leHA8L3Zhcj48L3NhbXA+JnJzcXVvOyAob3JkZXIgc2VjdGlvbnMgYWNjb3JkaW5nIHRvIHRoaXMgc29ydCBrZXkgd2hlbiBsaW5raW5nOworPHZhcj5leHA8L3Zhcj4gaXMgYW4gYWJzb2x1dGUgZXhwcmVzc2lvbiksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dW5sb2FkYWJsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoc2VjdGlvbiBjb250YWlucyBubworbG9hZGFibGUgZGF0YSksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm90ZGVmaW5lZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAodGhpcyBzZWN0aW9uIGRlZmluZWQgZWxzZXdoZXJlKSwgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByaXZhdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGRhdGEgaW4gdGhpcyBzZWN0aW9uIG5vdCBhdmFpbGFibGUgdG8gb3RoZXIgcHJvZ3JhbXMpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LnNwbnVtIDwvY29kZT48dmFyPnNlY25hbTwvdmFyPjxkZD48IS0tID8/IE5vdCBpbiBIUCBtYW51YWwgKEphbiAxOTg4KSAtLT4KK0FsbG9jYXRlIGZvdXIgYnl0ZXMgb2Ygc3RvcmFnZSwgYW5kIGluaXRpYWxpemUgdGhlbSB3aXRoIHRoZSBzZWN0aW9uIG51bWJlciBvZgordGhlIHNlY3Rpb24gbmFtZWQgPHZhcj5zZWNuYW08L3Zhcj4uICAoWW91IGNhbiBkZWZpbmUgdGhlIHNlY3Rpb24gbnVtYmVyIHdpdGggdGhlCitIUFBBIDxjb2RlPi5zcGFjZTwvY29kZT4gZGlyZWN0aXZlLikKKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0cmluZ18wMDdkLWRpcmVjdGl2ZS1vbi1IUFBBLTg5MyI+PC9hPjxicj48ZHQ+PGNvZGU+LnN0cmluZyAiPC9jb2RlPjx2YXI+c3RyPC92YXI+PGNvZGU+IjwvY29kZT48ZGQ+Q29weSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIDx2YXI+c3RyPC92YXI+IHRvIHRoZSBvYmplY3QgZmlsZS4gCitTZWUgPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+LCBmb3IgaW5mb3JtYXRpb24gb24gZXNjYXBlIHNlcXVlbmNlcyB5b3UgY2FuIHVzZSBpbgorPGNvZGU+YXM8L2NvZGU+IHN0cmluZ3MuCisKKyAgICAgPHA+PGVtPldhcm5pbmchPC9lbT4gVGhlIEhQUEEgdmVyc2lvbiBvZiA8Y29kZT4uc3RyaW5nPC9jb2RlPiBkaWZmZXJzIGZyb20gdGhlCit1c3VhbCA8Y29kZT5hczwvY29kZT4gZGVmaW5pdGlvbjogaXQgZG9lcyA8ZW0+bm90PC9lbT4gd3JpdGUgYSB6ZXJvIGJ5dGUKK2FmdGVyIGNvcHlpbmcgPHZhcj5zdHI8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4uc3RyaW5neiAiPC9jb2RlPjx2YXI+c3RyPC92YXI+PGNvZGU+IjwvY29kZT48ZGQ+TGlrZSA8Y29kZT4uc3RyaW5nPC9jb2RlPiwgYnV0IGFwcGVuZHMgYSB6ZXJvIGJ5dGUgYWZ0ZXIgY29weWluZyA8dmFyPnN0cjwvdmFyPiB0byBvYmplY3QKK2ZpbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4uc3Vic3BhIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT4gWyAsPC9jb2RlPjx2YXI+cGFyYW1zPC92YXI+PGNvZGU+IF08L2NvZGU+PGR0Pjxjb2RlPi5uc3Vic3BhIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT4gWyAsPC9jb2RlPjx2YXI+cGFyYW1zPC92YXI+PGNvZGU+IF08L2NvZGU+PGRkPlNpbWlsYXIgdG8gPGNvZGU+LnNwYWNlPC9jb2RlPiwgYnV0IHNlbGVjdHMgYSBzdWJzZWN0aW9uIDx2YXI+bmFtZTwvdmFyPiB3aXRoaW4gdGhlCitjdXJyZW50IHNlY3Rpb24uICBZb3UgbWF5IG9ubHkgc3BlY2lmeSA8dmFyPnBhcmFtczwvdmFyPiB3aGVuIHlvdSBjcmVhdGUgYQorc3Vic2VjdGlvbiAoaW4gdGhlIGZpcnN0IGluc3RhbmNlIG9mIDxjb2RlPi5zdWJzcGE8L2NvZGU+IGZvciB0aGlzIDx2YXI+bmFtZTwvdmFyPikuCisKKyAgICAgPHA+SWYgc3BlY2lmaWVkLCB0aGUgbGlzdCA8dmFyPnBhcmFtczwvdmFyPiBkZWNsYXJlcyBhdHRyaWJ1dGVzIG9mIHRoZSBzdWJzZWN0aW9uLAoraWRlbnRpZmllZCBieSBrZXl3b3Jkcy4gIFRoZSBrZXl3b3JkcyByZWNvZ25pemVkIGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnF1YWQ9PC9zcGFuPjx2YXI+ZXhwcjwvdmFyPjwvc2FtcD4mcnNxdW87CisoJmxkcXVvO3F1YWRyYW50JnJkcXVvOyBmb3IgdGhpcyBzdWJzZWN0aW9uKSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbGlnbj08L3NwYW4+PHZhcj5leHByPC92YXI+PC9zYW1wPiZyc3F1bzsgKGFsaWdubWVudCBmb3IKK2JlZ2lubmluZyBvZiB0aGlzIHN1YnNlY3Rpb247IGEgcG93ZXIgb2YgdHdvKSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hY2Nlc3M9PC9zcGFuPjx2YXI+ZXhwcjwvdmFyPjwvc2FtcD4mcnNxdW87ICh2YWx1ZQorZm9yICZsZHF1bzthY2Nlc3MgcmlnaHRzJnJkcXVvOyBmaWVsZCksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c29ydD08L3NwYW4+PHZhcj5leHByPC92YXI+PC9zYW1wPiZyc3F1bzsgKHNvcnRpbmcgb3JkZXIgZm9yIHRoaXMKK3N1YnNwYWNlIGluIGxpbmspLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvZGVfb25seTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoc3Vic2VjdGlvbiBjb250YWlucyBvbmx5IGNvZGUpLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj51bmxvYWRhYmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IChzdWJzZWN0aW9uIGNhbm5vdCBiZSBsb2FkZWQgaW50byBtZW1vcnkpLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvbWRhdDwvc3Bhbj48L3NhbXA+JnJzcXVvOworKHN1YnNlY3Rpb24gaXMgY29tZGF0KSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHN1YnNlY3Rpb24gaXMgY29tbW9uIGJsb2NrKSwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZHVwX2NvbW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHN1YnNlY3Rpb24gbWF5IGhhdmUgZHVwbGljYXRlIG5hbWVzKSwgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj56ZXJvPC9zcGFuPjwvc2FtcD4mcnNxdW87Cisoc3Vic2VjdGlvbiBpcyBhbGwgemVyb3MsIGRvIG5vdCB3cml0ZSBpbiBvYmplY3QgZmlsZSkuCisKKyAgICAgPHA+PGNvZGU+Lm5zdWJzcGE8L2NvZGU+IGFsd2F5cyBjcmVhdGVzIGEgbmV3IHN1YnNwYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUsIGV2ZW4KK2lmIG9uZSB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb21kYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29tbW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmR1cF9jb21tPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudAordmFyaW91cyBmbGF2b3JzIG9mIG9uZS1vbmx5IHN1cHBvcnQgd2hlbiB1c2luZyB0aGUgU09NIGxpbmtlci4gIFRoZSBTT00KK2xpbmtlciBvbmx5IHN1cHBvcnRzIHNwZWNpZmljIGNvbWJpbmF0aW9ucyBvZiB0aGVzZSBmbGFncy4gIFRoZSBkZXRhaWxzCithcmUgbm90IGRvY3VtZW50ZWQuICBBIGJyaWVmIGRlc2NyaXB0aW9uIGlzIHByb3ZpZGVkIGhlcmUuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb21kYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJvdmlkZXMgYSBmb3JtIG9mIGxpbmtvbmNlIHN1cHBvcnQuICBJdCBpcyB1c2VmdWwgZm9yCitib3RoIGNvZGUgYW5kIGRhdGEgc3Vic3BhY2VzLiAgQSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvbWRhdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdWJzcGFjZSBoYXMgYSBrZXkgc3ltYm9sCittYXJrZWQgYnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXNfY29tZGF0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGZsYWcgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TVF9DT01EQVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBPbmx5IHRoZSBmaXJzdAorc3Vic3BhY2UgZm9yIGFueSBnaXZlbiBrZXkgaXMgc2VsZWN0ZWQuICBUaGUga2V5IHN5bWJvbCBiZWNvbWVzIHVuaXZlcnNhbAoraW4gc2hhcmVkIGxpbmtzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBiZWhhdmlvciBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNlY29uZGFyeV9kZWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3N5bWJvbHMuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJvdmlkZXMgRm9ydHJhbiBuYW1lZCBjb21tb24gc3VwcG9ydC4gIEl0IGlzIG9ubHkgdXNlZnVsCitmb3IgZGF0YSBzdWJzcGFjZXMuICBTeW1ib2xzIHdpdGggdGhlIGZsYWcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pc19jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmV0YWluIHRoaXMKK2ZsYWcgaW4gc2hhcmVkIGxpbmtzLiAgUmVmZXJlbmNpbmcgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlzX2NvbW1vbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzeW1ib2wgaW4gYSBzaGFyZWQKK2xpYnJhcnkgZnJvbSBvdXRzaWRlIHRoZSBsaWJyYXJ5IGRvZXNuJ3Qgd29yay4gIFRodXMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXNfY29tbW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87CitzeW1ib2xzIG11c3QgYmUgb3V0cHV0IHdoZW5ldmVyIHRoZXkgYXJlIG5lZWRlZC4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvbW1vbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kdXBfY29tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0b2dldGhlciBwcm92aWRlIENvYm9sIGNvbW1vbiBzdXBwb3J0LiAKK1RoZSBzdWJzcGFjZXMgaW4gdGhpcyBjYXNlIG11c3QgYWxsIGJlIHRoZSBzYW1lIGxlbmd0aC4gIE90aGVyd2lzZSwgdGhpcworc3VwcG9ydCBpcyBzaW1pbGFyIHRvIHRoZSBGb3J0cmFuIGNvbW1vbiBzdXBwb3J0LgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZHVwX2NvbW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgYnkgaXRzZWxmIHByb3ZpZGVzIGEgdHlwZSBvZiBvbmUtb25seSBzdXBwb3J0IGZvciBjb2RlLiAKK09ubHkgdGhlIGZpcnN0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZHVwX2NvbW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3Vic3BhY2UgaXMgc2VsZWN0ZWQuICBUaGVyZSBpcyBhIHJhdGhlcgorY29tcGxleCBhbGdvcml0aG0gdG8gY29tcGFyZSBzdWJzcGFjZXMuICBDb2RlIHN5bWJvbHMgbWFya2VkIHdpdGggdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmR1cF9jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgZmxhZyBhcmUgaGlkZGVuLiAgVGhpcyBzdXBwb3J0IHdhcyBpbnRlbmRlZCBmb3IgIkMrKworZHVwbGljYXRlIGlubGluZXMiLgorCisgICAgIDxwPkEgc2ltcGxpZmllZCB0ZWNobmlxdWUgaXMgdXNlZCB0byBtYXJrIHRoZSBmbGFncyBvZiBzeW1ib2xzIGJhc2VkIG9uCit0aGUgZmxhZ3Mgb2YgdGhlaXIgc3Vic3BhY2UuICBBIHN5bWJvbCB3aXRoIHRoZSBzY29wZSBTU19VTklWRVJTQUwgYW5kCit0eXBlIFNUX0VOVFJZLCBTVF9DT0RFIG9yIFNUX0RBVEEgaXMgbWFya2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcKK3NldHRpbmdzIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29tZGF0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvbW1vbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kdXBfY29tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmcm9tIHRoZQorc3Vic3BhY2UsIHJlc3BlY3RpdmVseS4gIFRoaXMgYXZvaWRzIGhhdmluZyB0byBpbnRyb2R1Y2UgYWRkaXRpb25hbAorZGlyZWN0aXZlcyB0byBtYXJrIHRoZXNlIHN5bWJvbHMuICBUaGUgSFAgYXNzZW1ibGVyIHNldHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pc19jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2Zyb20gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBIb3dldmVyLCBpdCBkb2Vzbid0IHNldCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kdXBfY29tbW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZyb20KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZHVwX2NvbW08L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJdCBkb2Vzbid0IGhhdmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb21kYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3VwcG9ydC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi52ZXJzaW9uICI8L2NvZGU+PHZhcj5zdHI8L3Zhcj48Y29kZT4iPC9jb2RlPjxkZD5Xcml0ZSA8dmFyPnN0cjwvdmFyPiBhcyB2ZXJzaW9uIGlkZW50aWZpZXIgaW4gb2JqZWN0IGNvZGUuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQS1GbG9hdGluZy1Qb2ludC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQS1GbG9hdGluZy1Qb2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwODU1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IUFBBLUZsb2F0aW5nLVBvaW50Lmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SFBQQSBGbG9hdGluZyBQb2ludCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iSFBQQS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIUFBBLVN5bnRheC5odG1sI0hQUEEtU3ludGF4IiB0aXRsZT0iSFBQQSBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIUFBBLURpcmVjdGl2ZXMuaHRtbCNIUFBBLURpcmVjdGl2ZXMiIHRpdGxlPSJIUFBBIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIUFBBLUZsb2F0aW5nLVBvaW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkhQUEEtRGlyZWN0aXZlcy5odG1sI0hQUEEtRGlyZWN0aXZlcyI+SFBQQSBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSFBQQS1TeW50YXguaHRtbCNIUFBBLVN5bnRheCI+SFBQQSBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJIUFBBXzAwMmREZXBlbmRlbnQuaHRtbCNIUFBBXzAwMmREZXBlbmRlbnQiPkhQUEEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xMy40IEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1IUFBBLV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktODg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtSFBQQS1mbG9hdGluZy1wb2ludC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTg4OSI+PC9hPlRoZSBIUFBBIGZhbWlseSB1c2VzIDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4gZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQS1Ob3Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQS1Ob3Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzYyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IUFBBLU5vdGVzLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SFBQQSBOb3RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iSFBQQS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiIHRpdGxlPSJIUFBBIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIUFBBLU5vdGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyI+SFBQQSBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50Ij5IUFBBLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTMuMSBOb3RlczwvaDQ+CisKKzxwPkFzIGEgYmFjayBlbmQgZm9yIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c3BhbiBjbGFzcz0ic2MiPmNjPC9zcGFuPiA8Y29kZT5hczwvY29kZT4gaGFzIGJlZW4gdGhyb3VnaGx5IHRlc3RlZCBhbmQgc2hvdWxkCit3b3JrIGV4dHJlbWVseSB3ZWxsLiAgV2UgaGF2ZSB0ZXN0ZWQgaXQgb25seSBtaW5pbWFsbHkgb24gaGFuZCB3cml0dGVuIGFzc2VtYmx5Citjb2RlIGFuZCBubyBvbmUgaGFzIHRlc3RlZCBpdCBtdWNoIG9uIHRoZSBhc3NlbWJseSBvdXRwdXQgZnJvbSB0aGUgSFAKK2NvbXBpbGVycy4KKworICAgPHA+VGhlIGZvcm1hdCBvZiB0aGUgZGVidWdnaW5nIHNlY3Rpb25zIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBvcmlnaW5hbAorPGNvZGU+YXM8L2NvZGU+IHBvcnQgKHZlcnNpb24gMS4zWCkgd2FzIHJlbGVhc2VkOyB0aGVyZWZvcmUsCit5b3UgbXVzdCByZWJ1aWxkIGFsbCBIUFBBIG9iamVjdHMgYW5kIGxpYnJhcmllcyB3aXRoIHRoZSBuZXcKK2Fzc2VtYmxlciBzbyB0aGF0IHlvdSBjYW4gZGVidWcgdGhlIGZpbmFsIGV4ZWN1dGFibGUuCisKKyAgIDxwPlRoZSBIUFBBIDxjb2RlPmFzPC9jb2RlPiBwb3J0IGdlbmVyYXRlcyBhIHNtYWxsIHN1YnNldCBvZiB0aGUgcmVsb2NhdGlvbnMKK2F2YWlsYWJsZSBpbiB0aGUgU09NIGFuZCBFTEYgb2JqZWN0IGZpbGUgZm9ybWF0cy4gIEFkZGl0aW9uYWwgcmVsb2NhdGlvbgorc3VwcG9ydCB3aWxsIGJlIGFkZGVkIGFzIGl0IGJlY29tZXMgbmVjZXNzYXJ5LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IUFBBLU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0hQUEEtT3Bjb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjY0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IUFBBLU9wY29kZXMuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IUFBBIE9wY29kZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkhQUEFfMDAyZERlcGVuZGVudC5odG1sI0hQUEFfMDAyZERlcGVuZGVudCIgdGl0bGU9IkhQUEEtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSFBQQS1EaXJlY3RpdmVzLmh0bWwjSFBQQS1EaXJlY3RpdmVzIiB0aXRsZT0iSFBQQSBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSFBQQS1PcGNvZGVzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSFBQQS1EaXJlY3RpdmVzLmh0bWwjSFBQQS1EaXJlY3RpdmVzIj5IUFBBIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJIUFBBXzAwMmREZXBlbmRlbnQuaHRtbCNIUFBBXzAwMmREZXBlbmRlbnQiPkhQUEEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xMy42IE9wY29kZXM8L2g0PgorCis8cD5Gb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIEhQUEEgbWFjaGluZSBpbnN0cnVjdGlvbiBzZXQsIHNlZQorPGNpdGU+UEEtUklTQyBBcmNoaXRlY3R1cmUgYW5kIEluc3RydWN0aW9uIFNldCBSZWZlcmVuY2UgTWFudWFsPC9jaXRlPgorKEhQIDA5NzQwLTkwMDM5KS4KKworPCEtLSBDb3B5cmlnaHQgMjAwMCwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0hQUEEtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQS1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjZTg2YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0hQUEEtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkhQUEEgT3B0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iSFBQQS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIUFBBLU5vdGVzLmh0bWwjSFBQQS1Ob3RlcyIgdGl0bGU9IkhQUEEgTm90ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIUFBBLVN5bnRheC5odG1sI0hQUEEtU3ludGF4IiB0aXRsZT0iSFBQQSBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIUFBBLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSFBQQS1TeW50YXguaHRtbCNIUFBBLVN5bnRheCI+SFBQQSBTeW50YXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJIUFBBLU5vdGVzLmh0bWwjSFBQQS1Ob3RlcyI+SFBQQSBOb3RlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkhQUEFfMDAyZERlcGVuZGVudC5odG1sI0hQUEFfMDAyZERlcGVuZGVudCI+SFBQQS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjEzLjIgT3B0aW9uczwvaDQ+CisKKzxwPjxjb2RlPmFzPC9jb2RlPiBoYXMgbm8gbWFjaGluZS1kZXBlbmRlbnQgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIHRoZSBIUFBBLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1IUFBBLVN5bnRheC04ODciPjwvYT4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQS1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0hQUEEtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkNDhlZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0hQUEEtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SFBQQSBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkhQUEFfMDAyZERlcGVuZGVudC5odG1sI0hQUEFfMDAyZERlcGVuZGVudCIgdGl0bGU9IkhQUEEtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIiB0aXRsZT0iSFBQQSBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSFBQQS1GbG9hdGluZy1Qb2ludC5odG1sI0hQUEEtRmxvYXRpbmctUG9pbnQiIHRpdGxlPSJIUFBBIEZsb2F0aW5nIFBvaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSFBQQS1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSFBQQS1GbG9hdGluZy1Qb2ludC5odG1sI0hQUEEtRmxvYXRpbmctUG9pbnQiPkhQUEEgRmxvYXRpbmcgUG9pbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiPkhQUEEgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkhQUEFfMDAyZERlcGVuZGVudC5odG1sI0hQUEFfMDAyZERlcGVuZGVudCI+SFBQQS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjEzLjMgU3ludGF4PC9oND4KKworPHA+VGhlIGFzc2VtYmxlciBzeW50YXggY2xvc2VseSBmb2xsb3dzIHRoZSBIUFBBIGluc3RydWN0aW9uIHNldAorcmVmZXJlbmNlIG1hbnVhbDsgYXNzZW1ibGVyIGRpcmVjdGl2ZXMgYW5kIGdlbmVyYWwgc3ludGF4IGNsb3NlbHkgZm9sbG93IHRoZQorSFBQQSBhc3NlbWJseSBsYW5ndWFnZSByZWZlcmVuY2UgbWFudWFsLCB3aXRoIGEgZmV3IG5vdGV3b3J0aHkgZGlmZmVyZW5jZXMuCisKKyAgIDxwPkZpcnN0LCBhIGNvbG9uIG1heSBpbW1lZGlhdGVseSBmb2xsb3cgYSBsYWJlbCBkZWZpbml0aW9uLiAgVGhpcyBpcworc2ltcGx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggaG93IG1vc3QgYXNzZW1ibHkgbGFuZ3VhZ2UgcHJvZ3JhbW1lcnMKK3dyaXRlIGNvZGUuCisKKyAgIDxwPlNvbWUgb2JzY3VyZSBleHByZXNzaW9uIHBhcnNpbmcgcHJvYmxlbXMgbWF5IGFmZmVjdCBoYW5kIHdyaXR0ZW4gY29kZSB3aGljaAordXNlcyB0aGUgPGNvZGU+c3BvcDwvY29kZT4gaW5zdHJ1Y3Rpb25zLCBvciBjb2RlIHdoaWNoIG1ha2VzIHNpZ25pZmljYW50Cit1c2Ugb2YgdGhlIDxjb2RlPiE8L2NvZGU+IGxpbmUgc2VwYXJhdG9yLgorCisgICA8cD48Y29kZT5hczwvY29kZT4gaXMgbXVjaCBsZXNzIGZvcmdpdmluZyBhYm91dCBtaXNzaW5nIGFyZ3VtZW50cyBhbmQgb3RoZXIKK3NpbWlsYXIgb3ZlcnNpZ2h0cyB0aGFuIHRoZSBIUCBhc3NlbWJsZXIuICA8Y29kZT5hczwvY29kZT4gbm90aWZpZXMgeW91CitvZiBtaXNzaW5nIGFyZ3VtZW50cyBhcyBzeW50YXggZXJyb3JzOyB0aGlzIGlzIHJlZ2FyZGVkIGFzIGEgZmVhdHVyZSwgbm90IGEKK2J1Zy4KKworICAgPHA+RmluYWxseSwgPGNvZGU+YXM8L2NvZGU+IGFsbG93cyB5b3UgdG8gdXNlIGFuIGV4dGVybmFsIHN5bWJvbCB3aXRob3V0CitleHBsaWNpdGx5IGltcG9ydGluZyB0aGUgc3ltYm9sLiAgPGVtPldhcm5pbmc6PC9lbT4gaW4gdGhlIGZ1dHVyZSB0aGlzIHdpbGwgYmUKK2FuIGVycm9yIGZvciBIUFBBIHRhcmdldHMuCisKKyAgIDxwPlNwZWNpYWwgY2hhcmFjdGVycyBmb3IgSFBQQSB0YXJnZXRzIGluY2x1ZGU6CisKKyAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB0aGUgbGluZSBjb21tZW50IGNoYXJhY3Rlci4KKworICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBuZXdsaW5lIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMuCisKKyAgIDxwPlNpbmNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nLCB5b3UgbWF5IHVzZSBpdCBpbiBzeW1ib2wgbmFtZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0hQUEFfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1YzU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0hQUEFfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkhQUEEtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIOF8wMDJmMzAwXzAwMmREZXBlbmRlbnQuaHRtbCNIOF8wMDJmMzAwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJIOC8zMDAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI0VTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJFU0EvMzkwLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkhQUEEtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJIUFBBXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI0VTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQiPkVTQS8zOTAtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Lmh0bWwjSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Ij5IOC8zMDAtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjEzIEhQUEEgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3VwcG9ydC04ODYiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkhQUEEtTm90ZXMuaHRtbCNIUFBBLU5vdGVzIj5IUFBBIE5vdGVzPC9hPjogICAgICAgICAgICAgICAgIE5vdGVzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiPkhQUEEgT3B0aW9uczwvYT46ICAgICAgICAgICAgICAgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iSFBQQS1TeW50YXguaHRtbCNIUFBBLVN5bnRheCI+SFBQQSBTeW50YXg8L2E+OiAgICAgICAgICAgICAgICBTeW50YXgKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkhQUEEtRmxvYXRpbmctUG9pbnQuaHRtbCNIUFBBLUZsb2F0aW5nLVBvaW50Ij5IUFBBIEZsb2F0aW5nIFBvaW50PC9hPjogICAgICAgIEZsb2F0aW5nIFBvaW50Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJIUFBBLURpcmVjdGl2ZXMuaHRtbCNIUFBBLURpcmVjdGl2ZXMiPkhQUEEgRGlyZWN0aXZlczwvYT46ICAgICAgICAgICAgSFBQQSBNYWNoaW5lIERpcmVjdGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkhQUEEtT3Bjb2Rlcy5odG1sI0hQUEEtT3Bjb2RlcyI+SFBQQSBPcGNvZGVzPC9hPjogICAgICAgICAgICAgICBPcGNvZGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IaWRkZW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0hpZGRlbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwOTc1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9IaWRkZW4uaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IaWRkZW4gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdudV8wMDVmYXR0cmlidXRlLmh0bWwjR251XzAwNWZhdHRyaWJ1dGUiIHRpdGxlPSJHbnVfYXR0cmlidXRlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaHdvcmQuaHRtbCNod29yZCIgdGl0bGU9Imh3b3JkIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSGlkZGVuIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Imh3b3JkLmh0bWwjaHdvcmQiPmh3b3JkPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR251XzAwNWZhdHRyaWJ1dGUuaHRtbCNHbnVfMDA1ZmF0dHJpYnV0ZSI+R251X2F0dHJpYnV0ZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny41OSA8Y29kZT4uaGlkZGVuIDwvY29kZT48dmFyPm5hbWVzPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JoaWRkZW5fMDA3ZC1kaXJlY3RpdmUtMzQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmlzaWJpbGl0eS0zNDciPjwvYT5UaGlzIGlzIG9uZSBvZiB0aGUgRUxGIHZpc2liaWxpdHkgZGlyZWN0aXZlcy4gIFRoZSBvdGhlciB0d28gYXJlCis8Y29kZT4uaW50ZXJuYWw8L2NvZGU+IChzZWUgPGEgaHJlZj0iSW50ZXJuYWwuaHRtbCNJbnRlcm5hbCI+PGNvZGU+LmludGVybmFsPC9jb2RlPjwvYT4pIGFuZAorPGNvZGU+LnByb3RlY3RlZDwvY29kZT4gKHNlZSA8YSBocmVmPSJQcm90ZWN0ZWQuaHRtbCNQcm90ZWN0ZWQiPjxjb2RlPi5wcm90ZWN0ZWQ8L2NvZGU+PC9hPikuCisKKyAgIDxwPlRoaXMgZGlyZWN0aXZlIG92ZXJyaWRlcyB0aGUgbmFtZWQgc3ltYm9scyBkZWZhdWx0IHZpc2liaWxpdHkgKHdoaWNoIGlzIHNldCBieQordGhlaXIgYmluZGluZzogbG9jYWwsIGdsb2JhbCBvciB3ZWFrKS4gIFRoZSBkaXJlY3RpdmUgc2V0cyB0aGUgdmlzaWJpbGl0eSB0bworPGNvZGU+aGlkZGVuPC9jb2RlPiB3aGljaCBtZWFucyB0aGF0IHRoZSBzeW1ib2xzIGFyZSBub3QgdmlzaWJsZSB0byBvdGhlciBjb21wb25lbnRzLiAKK1N1Y2ggc3ltYm9scyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgPGNvZGU+cHJvdGVjdGVkPC9jb2RlPiBhcyB3ZWxsLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyN2FhZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0kuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIiB0aXRsZT0iSW52b2tpbmciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmLmh0bWwjZiIgdGl0bGU9ImYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJLLmh0bWwjSyIgdGl0bGU9IksiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IksuaHRtbCNLIj5LPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZi5odG1sI2YiPmY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuNSA8Y29kZT4uaW5jbHVkZTwvY29kZT4gU2VhcmNoIFBhdGg6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gPHZhcj5wYXRoPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRJLV8wMDQwdmFyXzAwN2JwYXRoXzAwN2QtNjIiPjwvYT48YSBuYW1lPSJpbmRleC1wYXRocy1mb3ItXzAwNDBjb2RlXzAwN2JfMDAyZWluY2x1ZGVfMDA3ZC02MyI+PC9hPjxhIG5hbWU9ImluZGV4LXNlYXJjaC1wYXRoLWZvci1fMDA0MGNvZGVfMDA3Yl8wMDJlaW5jbHVkZV8wMDdkLTY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpbmNsdWRlXzAwN2QtZGlyZWN0aXZlLXNlYXJjaC1wYXRoLTY1Ij48L2E+VXNlIHRoaXMgb3B0aW9uIHRvIGFkZCBhIDx2YXI+cGF0aDwvdmFyPiB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcworPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc2VhcmNoZXMgZm9yIGZpbGVzIHNwZWNpZmllZCBpbiA8Y29kZT4uaW5jbHVkZTwvY29kZT4KK2RpcmVjdGl2ZXMgKHNlZSA8YSBocmVmPSJJbmNsdWRlLmh0bWwjSW5jbHVkZSI+PGNvZGU+LmluY2x1ZGU8L2NvZGU+PC9hPikuICBZb3UgbWF5IHVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGFzCittYW55IHRpbWVzIGFzIG5lY2Vzc2FyeSB0byBpbmNsdWRlIGEgdmFyaWV0eSBvZiBwYXRocy4gIFRoZSBjdXJyZW50Cit3b3JraW5nIGRpcmVjdG9yeSBpcyBhbHdheXMgc2VhcmNoZWQgZmlyc3Q7IGFmdGVyIHRoYXQsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+CitzZWFyY2hlcyBhbnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tSTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RvcmllcyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IHdlcmUKK3NwZWNpZmllZCAobGVmdCB0byByaWdodCkgb24gdGhlIGNvbW1hbmQgbGluZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0LU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lBXzAwMmQ2NC1PcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlYjUwZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lBXzAwMmQ2NC1PcGNvZGVzLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUEtNjQgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQuaHRtbCNJQV8wMDJkNjRfMDAyZERlcGVuZGVudCIgdGl0bGU9IklBLTY0LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklBXzAwMmQ2NC1TeW50YXguaHRtbCNJQV8wMDJkNjQtU3ludGF4IiB0aXRsZT0iSUEtNjQgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUEtNjQtT3Bjb2RlcyI+PC9hPgorPGEgbmFtZT0iSUFfMDAyZDY0LU9wY29kZXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJQV8wMDJkNjQtU3ludGF4Lmh0bWwjSUFfMDAyZDY0LVN5bnRheCI+SUEtNjQgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQuaHRtbCNJQV8wMDJkNjRfMDAyZERlcGVuZGVudCI+SUEtNjQtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xOC4zIE9wY29kZXM8L2g0PgorCis8cD5Gb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIElBLTY0IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gc2V0LCBzZWUgdGhlCis8IS0tIEF0dGVtcHQgdG8gd29yayBhcm91bmQgYSB2ZXJ5IG92ZXJmdWxsIGhib3guIC0tPgorPGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vZGVzaWduL2l0YW5pdW0vYXJjaF9zcGVjLmh0bSI+SUEtNjQgQXJjaGl0ZWN0dXJlIEhhbmRib29rPC9hPi4KKworPCEtLSBDb3B5cmlnaHQgMjAwMiwgMjAxMSAtLT4KKzwhLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjQtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0LU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTYxZmIwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDExNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUEtNjQgT3B0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQuaHRtbCNJQV8wMDJkNjRfMDAyZERlcGVuZGVudCIgdGl0bGU9IklBLTY0LURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklBXzAwMmQ2NC1TeW50YXguaHRtbCNJQV8wMDJkNjQtU3ludGF4IiB0aXRsZT0iSUEtNjQgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUEtNjQtT3B0aW9ucyI+PC9hPgorPGEgbmFtZT0iSUFfMDAyZDY0LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSUFfMDAyZDY0LVN5bnRheC5odG1sI0lBXzAwMmQ2NC1TeW50YXgiPklBLTY0IFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IklBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Lmh0bWwjSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQiPklBLTY0LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTguMSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtSUFfMDAyZDY0LW9wdGlvbnMtMTExNiI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtZm9yLUlBXzAwMmQ2NC0xMTE3Ij48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1jb25zdGFudF8wMDJkZ3BfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtSUFfMDAyZDY0LTExMTgiPjwvYT4KKzxkbD4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNvbnN0YW50LWdwPC9zcGFuPjwvc2FtcD48ZGQ+VGhpcyBvcHRpb24gaW5zdHJ1Y3RzIHRoZSBhc3NlbWJsZXIgdG8gbWFyayB0aGUgcmVzdWx0aW5nIG9iamVjdCBmaWxlCithcyB1c2luZyB0aGUgJmxkcXVvO2NvbnN0YW50IEdQJnJkcXVvOyBtb2RlbC4gIFdpdGggdGhpcyBtb2RlbCwgaXQgaXMgYXNzdW1lZAordGhhdCB0aGUgZW50aXJlIHByb2dyYW0gdXNlcyBhIHNpbmdsZSBnbG9iYWwgcG9pbnRlciAoR1ApIHZhbHVlLiAgTm90ZQordGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdCBpbiBhbnkgZmFzaGlvbiBhZmZlY3QgdGhlIG1hY2hpbmUgY29kZQorZW1pdHRlZCBieSB0aGUgYXNzZW1ibGVyLiAgQWxsIGl0IGRvZXMgaXMgdHVybiBvbiB0aGUgRUZfSUFfNjRfQ09OU19HUAorZmxhZyBpbiB0aGUgRUxGIGZpbGUgaGVhZGVyLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hdXRvLXBpYzwvc3Bhbj48L3NhbXA+PGRkPlRoaXMgb3B0aW9uIGluc3RydWN0cyB0aGUgYXNzZW1ibGVyIHRvIG1hcmsgdGhlIHJlc3VsdGluZyBvYmplY3QgZmlsZQorYXMgdXNpbmcgdGhlICZsZHF1bztjb25zdGFudCBHUCB3aXRob3V0IGZ1bmN0aW9uIGRlc2NyaXB0b3ImcmRxdW87IGRhdGEgbW9kZWwuIAorVGhpcyBtb2RlbCBpcyBsaWtlIHRoZSAmbGRxdW87Y29uc3RhbnQgR1AmcmRxdW87IG1vZGVsLCBleGNlcHQgdGhhdCBpdAorYWRkaXRpb25hbGx5IGRvZXMgYXdheSB3aXRoIGZ1bmN0aW9uIGRlc2NyaXB0b3JzLiAgV2hhdCB0aGlzIG1lYW5zIGlzCit0aGF0IHRoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gcmVmZXJzIGRpcmVjdGx5IHRvIHRoZSBmdW5jdGlvbidzIGNvZGUKK2VudHJ5LXBvaW50LiAgTm9ybWFsbHksIHN1Y2ggYW4gYWRkcmVzcyB3b3VsZCByZWZlciB0byBhIGZ1bmN0aW9uCitkZXNjcmlwdG9yLCB3aGljaCBjb250YWlucyBib3RoIHRoZSBjb2RlIGVudHJ5LXBvaW50IGFuZCB0aGUgR1AtdmFsdWUKK25lZWRlZCBieSB0aGUgZnVuY3Rpb24uICBOb3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lcyBub3QgaW4gYW55IGZhc2hpb24KK2FmZmVjdCB0aGUgbWFjaGluZSBjb2RlIGVtaXR0ZWQgYnkgdGhlIGFzc2VtYmxlci4gIEFsbCBpdCBkb2VzIGlzCit0dXJuIG9uIHRoZSBFRl9JQV82NF9OT0ZVTkNERVNDX0NPTlNfR1AgZmxhZyBpbiB0aGUgRUxGIGZpbGUgaGVhZGVyLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1pbHAzMjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taWxwNjQ8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWxwNjQ8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXA2NDwvc3Bhbj48L3NhbXA+PGRkPlRoZXNlIG9wdGlvbnMgc2VsZWN0IHRoZSBkYXRhIG1vZGVsLiAgVGhlIGFzc2VtYmxlciBkZWZhdWx0cyB0byA8Y29kZT4tbWxwNjQ8L2NvZGU+CisoTFA2NCBkYXRhIG1vZGVsKS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbGU8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWJlPC9zcGFuPjwvc2FtcD48ZGQ+VGhlc2Ugb3B0aW9ucyBzZWxlY3QgdGhlIGJ5dGUgb3JkZXIuICBUaGUgPGNvZGU+LW1sZTwvY29kZT4gb3B0aW9uIHNlbGVjdHMgbGl0dGxlLWVuZGlhbgorYnl0ZSBvcmRlciAoZGVmYXVsdCkgYW5kIDxjb2RlPi1tYmU8L2NvZGU+IHNlbGVjdHMgYmlnLWVuZGlhbiBieXRlIG9yZGVyLiAgTm90ZSB0aGF0CitJQS02NCBtYWNoaW5lIGNvZGUgYWx3YXlzIHVzZXMgbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPWl0YW5pdW0xPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPWl0YW5pdW0yPC9zcGFuPjwvc2FtcD48ZGQ+VHVuZSBmb3IgYSBwYXJ0aWN1bGFyIElBLTY0IENQVSwgPHZhcj5pdGFuaXVtMTwvdmFyPiBvciA8dmFyPml0YW5pdW0yPC92YXI+LiBUaGUKK2RlZmF1bHQgaXMgPHZhcj5pdGFuaXVtMjwvdmFyPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdW53aW5kLWNoZWNrPXdhcm5pbmc8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXVud2luZC1jaGVjaz1lcnJvcjwvc3Bhbj48L3NhbXA+PGRkPlRoZXNlIG9wdGlvbnMgY29udHJvbCB3aGF0IHRoZSBhc3NlbWJsZXIgd2lsbCBkbyB3aGVuIHBlcmZvcm1pbmcKK2NvbnNpc3RlbmN5IGNoZWNrcyBvbiB1bndpbmQgZGlyZWN0aXZlcy4gIDxjb2RlPi1tdW53aW5kLWNoZWNrPXdhcm5pbmc8L2NvZGU+Cit3aWxsIG1ha2UgdGhlIGFzc2VtYmxlciBpc3N1ZSBhIHdhcm5pbmcgd2hlbiBhbiB1bndpbmQgZGlyZWN0aXZlIGNoZWNrCitmYWlscy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuICA8Y29kZT4tbXVud2luZC1jaGVjaz1lcnJvcjwvY29kZT4gd2lsbCBtYWtlIHRoZQorYXNzZW1ibGVyIGlzc3VlIGFuIGVycm9yIHdoZW4gYW4gdW53aW5kIGRpcmVjdGl2ZSBjaGVjayBmYWlscy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taGludC5iPW9rPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1oaW50LmI9d2FybmluZzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taGludC5iPWVycm9yPC9zcGFuPjwvc2FtcD48ZGQ+VGhlc2Ugb3B0aW9ucyBjb250cm9sIHdoYXQgdGhlIGFzc2VtYmxlciB3aWxsIGRvIHdoZW4gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aGludC5iPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbnN0cnVjdGlvbiBpcyB1c2VkLiAgPGNvZGU+LW1oaW50LmI9b2s8L2NvZGU+IHdpbGwgbWFrZSB0aGUgYXNzZW1ibGVyIGFjY2VwdAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5oaW50LmI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICA8Y29kZT4tbWludC5iPXdhcm5pbmc8L2NvZGU+IHdpbGwgbWFrZSB0aGUgYXNzZW1ibGVyIGlzc3VlIGEKK3dhcm5pbmcgd2hlbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmhpbnQuYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB1c2VkLiAgPGNvZGU+LW1oaW50LmI9ZXJyb3I8L2NvZGU+IHdpbGwgbWFrZQordGhlIGFzc2VtYmxlciB0cmVhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmhpbnQuYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyBhbiBlcnJvciwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4teDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14ZXhwbGljaXQ8L3NwYW4+PC9zYW1wPjxkZD5UaGVzZSBvcHRpb25zIHR1cm4gb24gZGVwZW5kZW5jeSB2aW9sYXRpb24gY2hlY2tpbmcuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4teGF1dG88L3NwYW4+PC9zYW1wPjxkZD5UaGlzIG9wdGlvbiBpbnN0cnVjdHMgdGhlIGFzc2VtYmxlciB0byBhdXRvbWF0aWNhbGx5IGluc2VydCBzdG9wIGJpdHMgd2hlcmUgbmVjZXNzYXJ5Cit0byByZW1vdmUgZGVwZW5kZW5jeSB2aW9sYXRpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXhub25lPC9zcGFuPjwvc2FtcD48ZGQ+VGhpcyBvcHRpb24gdHVybnMgb2ZmIGRlcGVuZGVuY3kgdmlvbGF0aW9uIGNoZWNraW5nLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXhkZWJ1Zzwvc3Bhbj48L3NhbXA+PGRkPlRoaXMgdHVybnMgb24gZGVidWcgb3V0cHV0IGludGVuZGVkIHRvIGhlbHAgdHJhY2tpbmcgZG93biBidWdzIGluIHRoZSBkZXBlbmRlbmN5Cit2aW9sYXRpb24gY2hlY2tlci4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14ZGVidWduPC9zcGFuPjwvc2FtcD48ZGQ+VGhpcyBpcyBhIHNob3J0Y3V0IGZvciAteG5vbmUgLXhkZWJ1Zy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14ZGVidWd4PC9zcGFuPjwvc2FtcD48ZGQ+VGhpcyBpcyBhIHNob3J0Y3V0IGZvciAteGV4cGxpY2l0IC14ZGVidWcuCisKKyAgIDwvZGw+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUlBXzAwMmQ2NC1TeW50YXgtMTExOSI+PC9hPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjQtU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjQtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxM2ExYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lBXzAwMmQ2NC1TeW50YXguaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JQS02NCBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IklBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Lmh0bWwjSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJJQS02NC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIiB0aXRsZT0iSUEtNjQgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklBXzAwMmQ2NC1PcGNvZGVzLmh0bWwjSUFfMDAyZDY0LU9wY29kZXMiIHRpdGxlPSJJQS02NCBPcGNvZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUEtNjQtU3ludGF4Ij48L2E+Cis8YSBuYW1lPSJJQV8wMDJkNjQtU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklBXzAwMmQ2NC1PcGNvZGVzLmh0bWwjSUFfMDAyZDY0LU9wY29kZXMiPklBLTY0IE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQuaHRtbCNJQV8wMDJkNjRfMDAyZERlcGVuZGVudCI+SUEtNjQtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xOC4yIFN5bnRheDwvaDQ+CisKKzxwPlRoZSBhc3NlbWJsZXIgc3ludGF4IGNsb3NlbHkgZm9sbG93cyB0aGUgSUEtNjQgQXNzZW1ibHkgTGFuZ3VhZ2UKK1JlZmVyZW5jZSBHdWlkZS4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IklBXzAwMmQ2NF8wMDJkQ2hhcnMuaHRtbCNJQV8wMDJkNjRfMDAyZENoYXJzIj5JQS02NC1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IklBXzAwMmQ2NF8wMDJkUmVncy5odG1sI0lBXzAwMmQ2NF8wMDJkUmVncyI+SUEtNjQtUmVnczwvYT46ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgTmFtZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IklBXzAwMmQ2NF8wMDJkQml0cy5odG1sI0lBXzAwMmQ2NF8wMDJkQml0cyI+SUEtNjQtQml0czwvYT46ICAgICAgICAgICAgICAgICAgQml0IE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJJQV8wMDJkNjRfMDAyZFJlbG9jcy5odG1sI0lBXzAwMmQ2NF8wMDJkUmVsb2NzIj5JQS02NC1SZWxvY3M8L2E+OiAgICAgICAgICAgICAgICBSZWxvY2F0aW9ucworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0XzAwMmRCaXRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjRfMDAyZEJpdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGZhMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0XzAwMmRCaXRzLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUEtNjQtQml0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSUFfMDAyZDY0LVN5bnRheC5odG1sI0lBXzAwMmQ2NC1TeW50YXgiIHRpdGxlPSJJQS02NCBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJQV8wMDJkNjRfMDAyZFJlZ3MuaHRtbCNJQV8wMDJkNjRfMDAyZFJlZ3MiIHRpdGxlPSJJQS02NC1SZWdzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSUFfMDAyZDY0XzAwMmRSZWxvY3MuaHRtbCNJQV8wMDJkNjRfMDAyZFJlbG9jcyIgdGl0bGU9IklBLTY0LVJlbG9jcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklBLTY0LUJpdHMiPjwvYT4KKzxhIG5hbWU9IklBXzAwMmQ2NF8wMDJkQml0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJQV8wMDJkNjRfMDAyZFJlbG9jcy5odG1sI0lBXzAwMmQ2NF8wMDJkUmVsb2NzIj5JQS02NC1SZWxvY3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJQV8wMDJkNjRfMDAyZFJlZ3MuaHRtbCNJQV8wMDJkNjRfMDAyZFJlZ3MiPklBLTY0LVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJQV8wMDJkNjQtU3ludGF4Lmh0bWwjSUFfMDAyZDY0LVN5bnRheCI+SUEtNjQgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xOC4yLjMgSUEtNjQgUHJvY2Vzc29yLVN0YXR1cy1SZWdpc3RlciAoUFNSKSBCaXQgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1JQV8wMDJkNjQtUHJvY2Vzc29yXzAwMmRzdGF0dXNfMDAyZFJlZ2lzdGVyLWJpdC1uYW1lcy0xMTI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtUFNSLWJpdHMtMTEyOCI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdC1uYW1lc18wMDJjLUlBXzAwMmQ2NC0xMTI5Ij48L2E+CitUaGUgYXNzZW1ibGVyIGRlZmluZXMgYml0IG1hc2tzIGZvciBlYWNoIG9mIHRoZSBiaXRzIGluIHRoZSBJQS02NAorcHJvY2Vzc29yIHN0YXR1cyByZWdpc3Rlci4gIEZvciBleGFtcGxlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBzci5pYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb3JyZXNwb25kcyB0bworYSB2YWx1ZSBvZiAweDIwMDAuICBUaGVzZSBtYXNrcyBhcmUgcHJpbWFyaWx5IGludGVuZGVkIGZvciB1c2Ugd2l0aAordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3NtPC9zcGFuPjwvc2FtcD4mcnNxdW87LyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3VtPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJzbTwvc3Bhbj48L3NhbXA+JnJzcXVvOy8mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJ1bTwvc3Bhbj48L3NhbXA+JnJzcXVvOworaW5zdHJ1Y3Rpb25zLCBidXQgdGhleSBjYW4gYmUgdXNlZCBhbnl3aGVyZSBlbHNlIHdoZXJlIGFuIGludGVnZXIKK2NvbnN0YW50IGlzIGV4cGVjdGVkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjRfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjRfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwYjdlMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lBXzAwMmQ2NF8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JQS02NC1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSUFfMDAyZDY0LVN5bnRheC5odG1sI0lBXzAwMmQ2NC1TeW50YXgiIHRpdGxlPSJJQS02NCBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJQV8wMDJkNjRfMDAyZFJlZ3MuaHRtbCNJQV8wMDJkNjRfMDAyZFJlZ3MiIHRpdGxlPSJJQS02NC1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUEtNjQtQ2hhcnMiPjwvYT4KKzxhIG5hbWU9IklBXzAwMmQ2NF8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSUFfMDAyZDY0XzAwMmRSZWdzLmh0bWwjSUFfMDAyZDY0XzAwMmRSZWdzIj5JQS02NC1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSUFfMDAyZDY0LVN5bnRheC5odG1sI0lBXzAwMmQ2NC1TeW50YXgiPklBLTY0IFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMTguMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1JQV8wMDJkNjQtMTEyMCI+PC9hPjxhIG5hbWU9ImluZGV4LUlBXzAwMmQ2NC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTExMjEiPjwvYT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi8vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRoZSBsaW5lIGNvbW1lbnQgdG9rZW4uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtSUFfMDAyZDY0LTExMjIiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtSUFfMDAyZDY0LTExMjMiPjwvYT48YSBuYW1lPSJpbmRleC1JQV8wMDJkNjQtbGluZS1zZXBhcmF0b3ItMTEyNCI+PC9hPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgbmV3bGluZSB0byBzZXBhcmF0ZSBzdGF0ZW1lbnRzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjRfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjlmOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JQS02NC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imk5NjBfMDAyZERlcGVuZGVudC5odG1sI2k5NjBfMDAyZERlcGVuZGVudCIgdGl0bGU9Imk5NjAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSVAyS18wMDJkRGVwZW5kZW50Lmh0bWwjSVAyS18wMDJkRGVwZW5kZW50IiB0aXRsZT0iSVAySy1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJQS02NC1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IklBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklQMktfMDAyZERlcGVuZGVudC5odG1sI0lQMktfMDAyZERlcGVuZGVudCI+SVAySy1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpOTYwXzAwMmREZXBlbmRlbnQuaHRtbCNpOTYwXzAwMmREZXBlbmRlbnQiPmk5NjAtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjE4IElBLTY0IERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUlBXzAwMmQ2NC1zdXBwb3J0LTExMTUiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IklBXzAwMmQ2NC1TeW50YXguaHRtbCNJQV8wMDJkNjQtU3ludGF4Ij5JQS02NCBTeW50YXg8L2E+OiAgICAgICAgICAgICAgICBTeW50YXgKKzwhLS0gKiBJQS02NCBGbG9hdGluZyBQb2ludDo6ICAgICAgIEZsb2F0aW5nIFBvaW50CQkvLyB0byBiZSB3cml0dGVuIC0tPgorPCEtLSAqIElBLTY0IERpcmVjdGl2ZXM6OiAgICAgICAgICAgSUEtNjQgTWFjaGluZSBEaXJlY3RpdmVzCS8vIHRvIGJlIHdyaXR0ZW4gLS0+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJJQV8wMDJkNjQtT3Bjb2Rlcy5odG1sI0lBXzAwMmQ2NC1PcGNvZGVzIj5JQS02NCBPcGNvZGVzPC9hPjogICAgICAgICAgICAgICBPcGNvZGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjRfMDAyZFJlZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lBXzAwMmQ2NF8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZTY3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjRfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JQS02NC1SZWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJQV8wMDJkNjQtU3ludGF4Lmh0bWwjSUFfMDAyZDY0LVN5bnRheCIgdGl0bGU9IklBLTY0IFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklBXzAwMmQ2NF8wMDJkQ2hhcnMuaHRtbCNJQV8wMDJkNjRfMDAyZENoYXJzIiB0aXRsZT0iSUEtNjQtQ2hhcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJQV8wMDJkNjRfMDAyZEJpdHMuaHRtbCNJQV8wMDJkNjRfMDAyZEJpdHMiIHRpdGxlPSJJQS02NC1CaXRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUEtNjQtUmVncyI+PC9hPgorPGEgbmFtZT0iSUFfMDAyZDY0XzAwMmRSZWdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklBXzAwMmQ2NF8wMDJkQml0cy5odG1sI0lBXzAwMmQ2NF8wMDJkQml0cyI+SUEtNjQtQml0czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklBXzAwMmQ2NF8wMDJkQ2hhcnMuaHRtbCNJQV8wMDJkNjRfMDAyZENoYXJzIj5JQS02NC1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IklBXzAwMmQ2NC1TeW50YXguaHRtbCNJQV8wMDJkNjQtU3ludGF4Ij5JQS02NCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjE4LjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LUlBXzAwMmQ2NC1yZWdpc3RlcnMtMTEyNSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtSUFfMDAyZDY0LTExMjYiPjwvYT4KK1RoZSAxMjggaW50ZWdlciByZWdpc3RlcnMgYXJlIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOy4gCitUaGUgMTI4IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBhcmUgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87LiAKK1RoZSAxMjggYXBwbGljYXRpb24gcmVnaXN0ZXJzIGFyZSByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87LiAKK1RoZSAxMjggY29udHJvbCByZWdpc3RlcnMgYXJlIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3I8L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPiZyc3F1bzsuIAorVGhlIDY0IG9uZS1iaXQgcHJlZGljYXRlIHJlZ2lzdGVycyBhcmUgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87LiAKK1RoZSA4IGJyYW5jaCByZWdpc3RlcnMgYXJlIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOy4gCitJbiBhZGRpdGlvbiwgdGhlIGFzc2VtYmxlciBkZWZpbmVzIGEgbnVtYmVyIG9mIGFsaWFzZXM6CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdwPC9zcGFuPjwvc2FtcD4mcnNxdW87ICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIxPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMTI8L3NwYW4+PC9zYW1wPiZyc3F1bzspLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJwPC9zcGFuPjwvc2FtcD4mcnNxdW87ICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmIwPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmV0MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yODwvc3Bhbj48L3NhbXA+JnJzcXVvOyksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmV0MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yOTwvc3Bhbj48L3NhbXA+JnJzcXVvOyksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmV0Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMTA8L3NwYW4+PC9zYW1wPiZyc3F1bzspLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZXQzPC9zcGFuPjwvc2FtcD4mcnNxdW87ICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI5PC9zcGFuPjwvc2FtcD4mcnNxdW87KSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mYXJnPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87ICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmY4Kzwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOyksIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcmV0PC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87ICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmY4Kzwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOykuCisKKyAgIDxwPkZvciBjb252ZW5pZW5jZSwgdGhlIGFzc2VtYmxlciBhbHNvIGRlZmluZXMgYWxpYXNlcyBmb3IgYWxsIG5hbWVkIGFwcGxpY2F0aW9uCithbmQgY29udHJvbCByZWdpc3RlcnMuICBGb3IgZXhhbXBsZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hci5ic3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVmZXJzIHRvIHRoZSByZWdpc3RlcgorYmFja2luZyBzdG9yZSBwb2ludGVyICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyMTc8L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAgU2ltaWxhcmx5LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNyLmVvaTwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWZlcnMgdG8KK3RoZSBlbmQtb2YtaW50ZXJydXB0IHJlZ2lzdGVyICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNyNjc8L3NwYW4+PC9zYW1wPiZyc3F1bzspLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JQV8wMDJkNjRfMDAyZFJlbG9jcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0XzAwMmRSZWxvY3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjFmODU0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSUFfMDAyZDY0XzAwMmRSZWxvY3MuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JQS02NC1SZWxvY3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IklBXzAwMmQ2NC1TeW50YXguaHRtbCNJQV8wMDJkNjQtU3ludGF4IiB0aXRsZT0iSUEtNjQgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSUFfMDAyZDY0XzAwMmRCaXRzLmh0bWwjSUFfMDAyZDY0XzAwMmRCaXRzIiB0aXRsZT0iSUEtNjQtQml0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklBLTY0LVJlbG9jcyI+PC9hPgorPGEgbmFtZT0iSUFfMDAyZDY0XzAwMmRSZWxvY3MiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJQV8wMDJkNjRfMDAyZEJpdHMuaHRtbCNJQV8wMDJkNjRfMDAyZEJpdHMiPklBLTY0LUJpdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJQV8wMDJkNjQtU3ludGF4Lmh0bWwjSUFfMDAyZDY0LVN5bnRheCI+SUEtNjQgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xOC4yLjQgUmVsb2NhdGlvbnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1JQV8wMDJkNjQtcmVsb2NhdGlvbnMtMTEzMCI+PC9hPgorSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIElBLTY0IHJlbG9jYXRpb25zLCB0aGUgZm9sbG93aW5nIHJlbG9jYXRpb25zIGFyZQoraW1wbGVtZW50ZWQgYnkgPGNvZGU+YXM8L2NvZGU+OgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5Ac2xvdGNvdW50KDwvY29kZT48dmFyPlY8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5Db252ZXJ0IHRoZSBhZGRyZXNzIG9mZnNldCA8dmFyPlY8L3Zhcj4gaW50byBhIHNsb3QgY291bnQuICBUaGlzIHBzZXVkbworZnVuY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgb24gVk1TLiAgVGhlIGV4cHJlc3Npb24gPHZhcj5WPC92YXI+IG11c3QgYmUKK2tub3duIGF0IGFzc2VtYmx5IHRpbWU6IGl0IGNhbid0IHJlZmVyZW5jZSB1bmRlZmluZWQgc3ltYm9scyBvciBzeW1ib2xzIGluCitkaWZmZXJlbnQgc2VjdGlvbnMuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSVAyS18wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lQMktfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhM2JjMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lQMktfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SVAySy1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSVAyS18wMDJkU3ludGF4Lmh0bWwjSVAyS18wMDJkU3ludGF4IiB0aXRsZT0iSVAySy1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJUDJLLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJJUDJLXzAwMmRDaGFycyI+PC9hPgorPHA+CitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IklQMktfMDAyZFN5bnRheC5odG1sI0lQMktfMDAyZFN5bnRheCI+SVAySy1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjE5LjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtSVAySy0xMTQwIj48L2E+PGEgbmFtZT0iaW5kZXgtSVAySy1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTExNDEiPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb24gYSBsaW5lIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50Cit0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLgorCisgICA8cD5JZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lLCB0aGUgd2hvbGUgbGluZQoraXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY2FuIGFsc28gYmUgYQorbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEgcHJlcHJvY2Vzc29yCitjb250cm9sIGNvbW1hbmQgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLUlQMkstMTE0MiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1JUDJLLTExNDMiPjwvYT48YSBuYW1lPSJpbmRleC1JUDJLLWxpbmUtc2VwYXJhdG9yLTExNDQiPjwvYT5UaGUgSVAySyBhc3NlbWJsZXIgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgYSBsaW5lIHNlcGFyYXRvcgorY2hhcmFjdGVyLgorCis8IS0tIENvcHlyaWdodCAyMDA4LCAyMDExIC0tPgorPCEtLSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lQMktfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSVAyS18wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwNDg0YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lQMktfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklQMkstRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJQV8wMDJkNjRfMDAyZERlcGVuZGVudC5odG1sI0lBXzAwMmQ2NF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iSUEtNjQtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTE0zMl8wMDJkRGVwZW5kZW50Lmh0bWwjTE0zMl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTE0zMi1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJUDJLLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iSVAyS18wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxNMzJfMDAyZERlcGVuZGVudC5odG1sI0xNMzJfMDAyZERlcGVuZGVudCI+TE0zMi1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJQV8wMDJkNjRfMDAyZERlcGVuZGVudC5odG1sI0lBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Ij5JQS02NC1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMTkgSVAySyBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1JUDJLLXN1cHBvcnQtMTEzMSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iSVAyS18wMDJkT3B0cy5odG1sI0lQMktfMDAyZE9wdHMiPklQMkstT3B0czwvYT46ICAgICAgICAgICAgICAgICAgICBJUDJLIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IklQMktfMDAyZFN5bnRheC5odG1sI0lQMktfMDAyZFN5bnRheCI+SVAySy1TeW50YXg8L2E+OiAgICAgICAgICAgICAgICAgIElQMksgU3ludGF4Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JUDJLXzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JUDJLXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkYTZkYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lQMktfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JUDJLLU9wdHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IklQMktfMDAyZERlcGVuZGVudC5odG1sI0lQMktfMDAyZERlcGVuZGVudCIgdGl0bGU9IklQMkstRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSVAyS18wMDJkU3ludGF4Lmh0bWwjSVAyS18wMDJkU3ludGF4IiB0aXRsZT0iSVAySy1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJUDJLLU9wdHMiPjwvYT4KKzxhIG5hbWU9IklQMktfMDAyZE9wdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSVAyS18wMDJkU3ludGF4Lmh0bWwjSVAyS18wMDJkU3ludGF4Ij5JUDJLLVN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IklQMktfMDAyZERlcGVuZGVudC5odG1sI0lQMktfMDAyZERlcGVuZGVudCI+SVAySy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE5LjEgSVAySyBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLUlQMkstMTEzMiI+PC9hPjxhIG5hbWU9ImluZGV4LUlQMkstb3B0aW9ucy0xMTMzIj48L2E+CitUaGUgVWJpY29tIElQMksgdmVyc2lvbiBvZiA8Y29kZT5hczwvY29kZT4gaGFzIGEgZmV3IG1hY2hpbmUKK2RlcGVuZGVudCBvcHRpb25zOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWlwMjAyMmV4dDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1pcDIwMjJleHRfMDA3ZC1vcHRpb25fMDAyYy1JUDIwMjItMTEzNCI+PC9hPjxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZS1vcHRpb25zXzAwMmMtSVAyMDIyLTExMzUiPjwvYT48YSBuYW1lPSJpbmRleC1JUDJLLWFyY2hpdGVjdHVyZS1vcHRpb25zLTExMzYiPjwvYT48Y29kZT5hczwvY29kZT4gY2FuIGFzc2VtYmxlIHRoZSBleHRlbmRlZCBJUDIwMjIgaW5zdHJ1Y3Rpb25zLCBidXQKK2l0IHdpbGwgb25seSBkbyBzbyBpZiB0aGlzIGlzIHNwZWNpZmljYWxseSBhbGxvd2VkIHZpYSB0aGlzIGNvbW1hbmQKK2xpbmUgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pcDIwMjI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtaXAyMDIyXzAwN2Qtb3B0aW9uXzAwMmMtSVAySy0xMTM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJjaGl0ZWN0dXJlLW9wdGlvbnNfMDAyYy1JUDJLLTExMzgiPjwvYT48YSBuYW1lPSJpbmRleC1JUDJLLWFyY2hpdGVjdHVyZS1vcHRpb25zLTExMzkiPjwvYT5UaGlzIG9wdGlvbiByZXN0b3JlcyB0aGUgYXNzZW1ibGVyJ3MgZGVmYXVsdCBiZWhhdmlvdXIgb2Ygbm90CitwZXJtaXR0aW5nIHRoZSBleHRlbmRlZCBJUDIwMjIgaW5zdHJ1Y3Rpb25zIHRvIGJlIGFzc2VtYmxlZC4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSVAyS18wMDJkU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JUDJLXzAwMmRTeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg3M2RmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSVAyS18wMDJkU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SVAySy1TeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IklQMktfMDAyZERlcGVuZGVudC5odG1sI0lQMktfMDAyZERlcGVuZGVudCIgdGl0bGU9IklQMkstRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSVAyS18wMDJkT3B0cy5odG1sI0lQMktfMDAyZE9wdHMiIHRpdGxlPSJJUDJLLU9wdHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJUDJLLVN5bnRheCI+PC9hPgorPGEgbmFtZT0iSVAyS18wMDJkU3ludGF4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSVAyS18wMDJkT3B0cy5odG1sI0lQMktfMDAyZE9wdHMiPklQMkstT3B0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IklQMktfMDAyZERlcGVuZGVudC5odG1sI0lQMktfMDAyZERlcGVuZGVudCI+SVAySy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE5LjIgSVAySyBTeW50YXg8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iSVAyS18wMDJkQ2hhcnMuaHRtbCNJUDJLXzAwMmRDaGFycyI+SVAySy1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lkZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MGY1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JZGVudC5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklkZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJod29yZC5odG1sI2h3b3JkIiB0aXRsZT0iaHdvcmQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJZi5odG1sI0lmIiB0aXRsZT0iSWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJZi5odG1sI0lmIj5JZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Imh3b3JkLmh0bWwjaHdvcmQiPmh3b3JkPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjYxIDxjb2RlPi5pZGVudDwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlkZW50XzAwN2QtZGlyZWN0aXZlLTM1MiI+PC9hPgorVGhpcyBkaXJlY3RpdmUgaXMgdXNlZCBieSBzb21lIGFzc2VtYmxlcnMgdG8gcGxhY2UgdGFncyBpbiBvYmplY3QgZmlsZXMuICBUaGUKK2JlaGF2aW9yIG9mIHRoaXMgZGlyZWN0aXZlIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHRhcmdldC4gIFdoZW4gdXNpbmcgdGhlCithLm91dCBvYmplY3QgZmlsZSBmb3JtYXQsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHNpbXBseSBhY2NlcHRzIHRoZSBkaXJlY3RpdmUgZm9yCitzb3VyY2UtZmlsZSBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgYXNzZW1ibGVycywgYnV0IGRvZXMgbm90IGVtaXQgYW55dGhpbmcKK2ZvciBpdC4gIFdoZW4gdXNpbmcgQ09GRiwgY29tbWVudHMgYXJlIGVtaXR0ZWQgdG8gdGhlIDxjb2RlPi5jb21tZW50PC9jb2RlPiBvcgorPGNvZGU+LnJkYXRhPC9jb2RlPiBzZWN0aW9uLCBkZXBlbmRpbmcgb24gdGhlIHRhcmdldC4gIFdoZW4gdXNpbmcgRUxGLCBjb21tZW50cyBhcmUKK2VtaXR0ZWQgdG8gdGhlIDxjb2RlPi5jb21tZW50PC9jb2RlPiBzZWN0aW9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JZi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSWYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg0MmNiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSWYuaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SWYgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklkZW50Lmh0bWwjSWRlbnQiIHRpdGxlPSJJZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkluY2Jpbi5odG1sI0luY2JpbiIgdGl0bGU9IkluY2JpbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkluY2Jpbi5odG1sI0luY2JpbiI+SW5jYmluPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSWRlbnQuaHRtbCNJZGVudCI+SWRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNjIgPGNvZGU+LmlmIDwvY29kZT48dmFyPmFic29sdXRlIGV4cHJlc3Npb248L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb25kaXRpb25hbC1hc3NlbWJseS0zNTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmXzAwN2QtZGlyZWN0aXZlLTM1NCI+PC9hPjxjb2RlPi5pZjwvY29kZT4gbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIHNlY3Rpb24gb2YgY29kZSB3aGljaCBpcyBvbmx5Citjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNvdXJjZSBwcm9ncmFtIGJlaW5nIGFzc2VtYmxlZCBpZiB0aGUgYXJndW1lbnQKKyh3aGljaCBtdXN0IGJlIGFuIDx2YXI+YWJzb2x1dGUgZXhwcmVzc2lvbjwvdmFyPikgaXMgbm9uLXplcm8uICBUaGUgZW5kIG9mCit0aGUgY29uZGl0aW9uYWwgc2VjdGlvbiBvZiBjb2RlIG11c3QgYmUgbWFya2VkIGJ5IDxjb2RlPi5lbmRpZjwvY29kZT4KKyhzZWUgPGEgaHJlZj0iRW5kaWYuaHRtbCNFbmRpZiI+PGNvZGU+LmVuZGlmPC9jb2RlPjwvYT4pOyBvcHRpb25hbGx5LCB5b3UgbWF5IGluY2x1ZGUgY29kZSBmb3IgdGhlCithbHRlcm5hdGl2ZSBjb25kaXRpb24sIGZsYWdnZWQgYnkgPGNvZGU+LmVsc2U8L2NvZGU+IChzZWUgPGEgaHJlZj0iRWxzZS5odG1sI0Vsc2UiPjxjb2RlPi5lbHNlPC9jb2RlPjwvYT4pLiAKK0lmIHlvdSBoYXZlIHNldmVyYWwgY29uZGl0aW9ucyB0byBjaGVjaywgPGNvZGU+LmVsc2VpZjwvY29kZT4gbWF5IGJlIHVzZWQgdG8gYXZvaWQKK25lc3RpbmcgYmxvY2tzIGlmL2Vsc2Ugd2l0aGluIGVhY2ggc3Vic2VxdWVudCA8Y29kZT4uZWxzZTwvY29kZT4gYmxvY2suCisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgdmFyaWFudHMgb2YgPGNvZGU+LmlmPC9jb2RlPiBhcmUgYWxzbyBzdXBwb3J0ZWQ6CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZmRlZl8wMDdkLWRpcmVjdGl2ZS0zNTUiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LmlmZGVmIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxkZD5Bc3NlbWJsZXMgdGhlIGZvbGxvd2luZyBzZWN0aW9uIG9mIGNvZGUgaWYgdGhlIHNwZWNpZmllZCA8dmFyPnN5bWJvbDwvdmFyPgoraGFzIGJlZW4gZGVmaW5lZC4gIE5vdGUgYSBzeW1ib2wgd2hpY2ggaGFzIGJlZW4gcmVmZXJlbmNlZCBidXQgbm90IHlldCBkZWZpbmVkCitpcyBjb25zaWRlcmVkIHRvIGJlIHVuZGVmaW5lZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmYl8wMDdkLWRpcmVjdGl2ZS0zNTYiPjwvYT48YnI+PGR0Pjxjb2RlPi5pZmIgPC9jb2RlPjx2YXI+dGV4dDwvdmFyPjxkZD5Bc3NlbWJsZXMgdGhlIGZvbGxvd2luZyBzZWN0aW9uIG9mIGNvZGUgaWYgdGhlIG9wZXJhbmQgaXMgYmxhbmsgKGVtcHR5KS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmY18wMDdkLWRpcmVjdGl2ZS0zNTciPjwvYT48YnI+PGR0Pjxjb2RlPi5pZmMgPC9jb2RlPjx2YXI+c3RyaW5nMTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5zdHJpbmcyPC92YXI+PGRkPkFzc2VtYmxlcyB0aGUgZm9sbG93aW5nIHNlY3Rpb24gb2YgY29kZSBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIHRoZSBzYW1lLiAgVGhlCitzdHJpbmdzIG1heSBiZSBvcHRpb25hbGx5IHF1b3RlZCB3aXRoIHNpbmdsZSBxdW90ZXMuICBJZiB0aGV5IGFyZSBub3QgcXVvdGVkLAordGhlIGZpcnN0IHN0cmluZyBzdG9wcyBhdCB0aGUgZmlyc3QgY29tbWEsIGFuZCB0aGUgc2Vjb25kIHN0cmluZyBzdG9wcyBhdCB0aGUKK2VuZCBvZiB0aGUgbGluZS4gIFN0cmluZ3Mgd2hpY2ggY29udGFpbiB3aGl0ZXNwYWNlIHNob3VsZCBiZSBxdW90ZWQuICBUaGUKK3N0cmluZyBjb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZlcV8wMDdkLWRpcmVjdGl2ZS0zNTgiPjwvYT48YnI+PGR0Pjxjb2RlPi5pZmVxIDwvY29kZT48dmFyPmFic29sdXRlIGV4cHJlc3Npb248L3Zhcj48ZGQ+QXNzZW1ibGVzIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBvZiBjb2RlIGlmIHRoZSBhcmd1bWVudCBpcyB6ZXJvLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZlcXNfMDA3ZC1kaXJlY3RpdmUtMzU5Ij48L2E+PGJyPjxkdD48Y29kZT4uaWZlcXMgPC9jb2RlPjx2YXI+c3RyaW5nMTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5zdHJpbmcyPC92YXI+PGRkPkFub3RoZXIgZm9ybSBvZiA8Y29kZT4uaWZjPC9jb2RlPi4gIFRoZSBzdHJpbmdzIG11c3QgYmUgcXVvdGVkIHVzaW5nIGRvdWJsZSBxdW90ZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZmdlXzAwN2QtZGlyZWN0aXZlLTM2MCI+PC9hPjxicj48ZHQ+PGNvZGU+LmlmZ2UgPC9jb2RlPjx2YXI+YWJzb2x1dGUgZXhwcmVzc2lvbjwvdmFyPjxkZD5Bc3NlbWJsZXMgdGhlIGZvbGxvd2luZyBzZWN0aW9uIG9mIGNvZGUgaWYgdGhlIGFyZ3VtZW50IGlzIGdyZWF0ZXIgdGhhbiBvcgorZXF1YWwgdG8gemVyby4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmZ3RfMDA3ZC1kaXJlY3RpdmUtMzYxIj48L2E+PGJyPjxkdD48Y29kZT4uaWZndCA8L2NvZGU+PHZhcj5hYnNvbHV0ZSBleHByZXNzaW9uPC92YXI+PGRkPkFzc2VtYmxlcyB0aGUgZm9sbG93aW5nIHNlY3Rpb24gb2YgY29kZSBpZiB0aGUgYXJndW1lbnQgaXMgZ3JlYXRlciB0aGFuIHplcm8uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZmxlXzAwN2QtZGlyZWN0aXZlLTM2MiI+PC9hPjxicj48ZHQ+PGNvZGU+LmlmbGUgPC9jb2RlPjx2YXI+YWJzb2x1dGUgZXhwcmVzc2lvbjwvdmFyPjxkZD5Bc3NlbWJsZXMgdGhlIGZvbGxvd2luZyBzZWN0aW9uIG9mIGNvZGUgaWYgdGhlIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbAordG8gemVyby4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmbHRfMDA3ZC1kaXJlY3RpdmUtMzYzIj48L2E+PGJyPjxkdD48Y29kZT4uaWZsdCA8L2NvZGU+PHZhcj5hYnNvbHV0ZSBleHByZXNzaW9uPC92YXI+PGRkPkFzc2VtYmxlcyB0aGUgZm9sbG93aW5nIHNlY3Rpb24gb2YgY29kZSBpZiB0aGUgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHplcm8uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZm5iXzAwN2QtZGlyZWN0aXZlLTM2NCI+PC9hPjxicj48ZHQ+PGNvZGU+LmlmbmIgPC9jb2RlPjx2YXI+dGV4dDwvdmFyPjxkZD5MaWtlIDxjb2RlPi5pZmI8L2NvZGU+LCBidXQgdGhlIHNlbnNlIG9mIHRoZSB0ZXN0IGlzIHJldmVyc2VkOiB0aGlzIGFzc2VtYmxlcyB0aGUKK2ZvbGxvd2luZyBzZWN0aW9uIG9mIGNvZGUgaWYgdGhlIG9wZXJhbmQgaXMgbm9uLWJsYW5rIChub24tZW1wdHkpLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZuY18wMDdkLWRpcmVjdGl2ZS0zNjUiPjwvYT48YnI+PGR0Pjxjb2RlPi5pZm5jIDwvY29kZT48dmFyPnN0cmluZzE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+c3RyaW5nMjwvdmFyPjxjb2RlPi48L2NvZGU+PGRkPkxpa2UgPGNvZGU+LmlmYzwvY29kZT4sIGJ1dCB0aGUgc2Vuc2Ugb2YgdGhlIHRlc3QgaXMgcmV2ZXJzZWQ6IHRoaXMgYXNzZW1ibGVzIHRoZQorZm9sbG93aW5nIHNlY3Rpb24gb2YgY29kZSBpZiB0aGUgdHdvIHN0cmluZ3MgYXJlIG5vdCB0aGUgc2FtZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlmbmRlZl8wMDdkLWRpcmVjdGl2ZS0zNjYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymlmbm90ZGVmXzAwN2QtZGlyZWN0aXZlLTM2NyI+PC9hPjxicj48ZHQ+PGNvZGU+LmlmbmRlZiA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48ZHQ+PGNvZGU+Lmlmbm90ZGVmIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxkZD5Bc3NlbWJsZXMgdGhlIGZvbGxvd2luZyBzZWN0aW9uIG9mIGNvZGUgaWYgdGhlIHNwZWNpZmllZCA8dmFyPnN5bWJvbDwvdmFyPgoraGFzIG5vdCBiZWVuIGRlZmluZWQuICBCb3RoIHNwZWxsaW5nIHZhcmlhbnRzIGFyZSBlcXVpdmFsZW50LiAgTm90ZSBhIHN5bWJvbAord2hpY2ggaGFzIGJlZW4gcmVmZXJlbmNlZCBidXQgbm90IHlldCBkZWZpbmVkIGlzIGNvbnNpZGVyZWQgdG8gYmUgdW5kZWZpbmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZuZV8wMDdkLWRpcmVjdGl2ZS0zNjgiPjwvYT48YnI+PGR0Pjxjb2RlPi5pZm5lIDwvY29kZT48dmFyPmFic29sdXRlIGV4cHJlc3Npb248L3Zhcj48ZGQ+QXNzZW1ibGVzIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBvZiBjb2RlIGlmIHRoZSBhcmd1bWVudCBpcyBub3QgZXF1YWwgdG8gemVybworKGluIG90aGVyIHdvcmRzLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gPGNvZGU+LmlmPC9jb2RlPikuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZm5lc18wMDdkLWRpcmVjdGl2ZS0zNjkiPjwvYT48YnI+PGR0Pjxjb2RlPi5pZm5lcyA8L2NvZGU+PHZhcj5zdHJpbmcxPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPnN0cmluZzI8L3Zhcj48ZGQ+TGlrZSA8Y29kZT4uaWZlcXM8L2NvZGU+LCBidXQgdGhlIHNlbnNlIG9mIHRoZSB0ZXN0IGlzIHJldmVyc2VkOiB0aGlzIGFzc2VtYmxlcyB0aGUKK2ZvbGxvd2luZyBzZWN0aW9uIG9mIGNvZGUgaWYgdGhlIHR3byBzdHJpbmdzIGFyZSBub3QgdGhlIHNhbWUuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSW5jYmluLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JbmNiaW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWVkMDhhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSW5jYmluLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5jYmluIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJZi5odG1sI0lmIiB0aXRsZT0iSWYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbmNsdWRlLmh0bWwjSW5jbHVkZSIgdGl0bGU9IkluY2x1ZGUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbmNiaW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW5jbHVkZS5odG1sI0luY2x1ZGUiPkluY2x1ZGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJZi5odG1sI0lmIj5JZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny42MyA8Y29kZT4uaW5jYmluICI8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+IlssPC9jb2RlPjx2YXI+c2tpcDwvdmFyPjxjb2RlPlssPC9jb2RlPjx2YXI+Y291bnQ8L3Zhcj48Y29kZT5dXTwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmluY2Jpbl8wMDdkLWRpcmVjdGl2ZS0zNzAiPjwvYT48YSBuYW1lPSJpbmRleC1iaW5hcnktZmlsZXNfMDAyYy1pbmNsdWRpbmctMzcxIj48L2E+VGhlIDxjb2RlPmluY2JpbjwvY29kZT4gZGlyZWN0aXZlIGluY2x1ZGVzIDx2YXI+ZmlsZTwvdmFyPiB2ZXJiYXRpbSBhdCB0aGUgY3VycmVudAorbG9jYXRpb24uIFlvdSBjYW4gY29udHJvbCB0aGUgc2VhcmNoIHBhdGhzIHVzZWQgd2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tSTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kLWxpbmUKK29wdGlvbiAoc2VlIDxhIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkNvbW1hbmQtTGluZSBPcHRpb25zPC9hPikuICBRdW90YXRpb24gbWFya3MgYXJlIHJlcXVpcmVkCithcm91bmQgPHZhcj5maWxlPC92YXI+LgorCisgICA8cD5UaGUgPHZhcj5za2lwPC92YXI+IGFyZ3VtZW50IHNraXBzIGEgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZQorPHZhcj5maWxlPC92YXI+LiAgVGhlIDx2YXI+Y291bnQ8L3Zhcj4gYXJndW1lbnQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0bworcmVhZC4gIE5vdGUgdGhhdCB0aGUgZGF0YSBpcyBub3QgYWxpZ25lZCBpbiBhbnkgd2F5LCBzbyBpdCBpcyB0aGUgdXNlcidzCityZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhhdCBwcm9wZXIgYWxpZ25tZW50IGlzIHByb3ZpZGVkIGJvdGggYmVmb3JlIGFuZAorYWZ0ZXIgdGhlIDxjb2RlPmluY2JpbjwvY29kZT4gZGlyZWN0aXZlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JbmNsdWRlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JbmNsdWRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3N2E5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0luY2x1ZGUuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbmNsdWRlIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbmNiaW4uaHRtbCNJbmNiaW4iIHRpdGxlPSJJbmNiaW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnQuaHRtbCNJbnQiIHRpdGxlPSJJbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbmNsdWRlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkludC5odG1sI0ludCI+SW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5jYmluLmh0bWwjSW5jYmluIj5JbmNiaW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNjQgPGNvZGU+LmluY2x1ZGUgIjwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4iPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW5jbHVkZV8wMDdkLWRpcmVjdGl2ZS0zNzIiPjwvYT48YSBuYW1lPSJpbmRleC1zdXBwb3J0aW5nLWZpbGVzXzAwMmMtaW5jbHVkaW5nLTM3MyI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGVzXzAwMmMtaW5jbHVkaW5nLTM3NCI+PC9hPlRoaXMgZGlyZWN0aXZlIHByb3ZpZGVzIGEgd2F5IHRvIGluY2x1ZGUgc3VwcG9ydGluZyBmaWxlcyBhdCBzcGVjaWZpZWQKK3BvaW50cyBpbiB5b3VyIHNvdXJjZSBwcm9ncmFtLiAgVGhlIGNvZGUgZnJvbSA8dmFyPmZpbGU8L3Zhcj4gaXMgYXNzZW1ibGVkIGFzCitpZiBpdCBmb2xsb3dlZCB0aGUgcG9pbnQgb2YgdGhlIDxjb2RlPi5pbmNsdWRlPC9jb2RlPjsgd2hlbiB0aGUgZW5kIG9mIHRoZQoraW5jbHVkZWQgZmlsZSBpcyByZWFjaGVkLCBhc3NlbWJseSBvZiB0aGUgb3JpZ2luYWwgZmlsZSBjb250aW51ZXMuICBZb3UKK2NhbiBjb250cm9sIHRoZSBzZWFyY2ggcGF0aHMgdXNlZCB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1JPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQtbGluZSBvcHRpb24KKyhzZWUgPGEgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+Q29tbWFuZC1MaW5lIE9wdGlvbnM8L2E+KS4gIFF1b3RhdGlvbiBtYXJrcyBhcmUgcmVxdWlyZWQKK2Fyb3VuZCA8dmFyPmZpbGU8L3Zhcj4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0luZml4LU9wcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSW5maXgtT3BzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzNmE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0luZml4LU9wcy5odG1sCkBAIC0wLDAgKzEsMTMxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbmZpeCBPcHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludGVnZXItRXhwcnMuaHRtbCNJbnRlZ2VyLUV4cHJzIiB0aXRsZT0iSW50ZWdlciBFeHBycyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlByZWZpeC1PcHMuaHRtbCNQcmVmaXgtT3BzIiB0aXRsZT0iUHJlZml4IE9wcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkluZml4LU9wcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlByZWZpeC1PcHMuaHRtbCNQcmVmaXgtT3BzIj5QcmVmaXggT3BzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50ZWdlci1FeHBycy5odG1sI0ludGVnZXItRXhwcnMiPkludGVnZXIgRXhwcnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjIuNCBJbmZpeCBPcGVyYXRvcnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1pbmZpeC1vcGVyYXRvcnMtMjU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3BlcmF0b3JzXzAwMmMtcGVybWl0dGVkLWFyZ3VtZW50cy0yNTgiPjwvYT48ZGZuPkluZml4IG9wZXJhdG9yczwvZGZuPiB0YWtlIHR3byBhcmd1bWVudHMsIG9uZSBvbiBlaXRoZXIgc2lkZS4gIE9wZXJhdG9ycworaGF2ZSBwcmVjZWRlbmNlLCBidXQgb3BlcmF0aW9ucyB3aXRoIGVxdWFsIHByZWNlZGVuY2UgYXJlIHBlcmZvcm1lZCBsZWZ0Cit0byByaWdodC4gIEFwYXJ0IGZyb20gPGNvZGU+KzwvY29kZT4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LTwvc3Bhbj48L3NhbXA+LCBib3RoIGFyZ3VtZW50cyBtdXN0IGJlCithYnNvbHV0ZSwgYW5kIHRoZSByZXN1bHQgaXMgYWJzb2x1dGUuCisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGEgbmFtZT0iaW5kZXgtb3BlcmF0b3ItcHJlY2VkZW5jZS0yNTkiPjwvYT48YSBuYW1lPSJpbmRleC1wcmVjZWRlbmNlLW9mLW9wZXJhdG9ycy0yNjAiPjwvYT4KKzxsaT5IaWdoZXN0IFByZWNlZGVuY2UKKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT4qPC9jb2RlPjxkZD48ZGZuPk11bHRpcGxpY2F0aW9uPC9kZm4+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4vPC9jb2RlPjxkZD48ZGZuPkRpdmlzaW9uPC9kZm4+LiAgVHJ1bmNhdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGUgQyBvcGVyYXRvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi88L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+JTwvY29kZT48ZGQ+PGRmbj5SZW1haW5kZXI8L2Rmbj4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPiZsdDsmbHQ7PC9jb2RlPjxkZD48ZGZuPlNoaWZ0IExlZnQ8L2Rmbj4uICBTYW1lIGFzIHRoZSBDIG9wZXJhdG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0OyZsdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPiZndDsmZ3Q7PC9jb2RlPjxkZD48ZGZuPlNoaWZ0IFJpZ2h0PC9kZm4+LiAgU2FtZSBhcyB0aGUgQyBvcGVyYXRvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDsmZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzwvZGw+CisKKyAgICAgPGxpPkludGVybWVkaWF0ZSBwcmVjZWRlbmNlCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+fDwvY29kZT48ZGQ+Cis8ZGZuPkJpdHdpc2UgSW5jbHVzaXZlIE9yPC9kZm4+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4mYW1wOzwvY29kZT48ZGQ+PGRmbj5CaXR3aXNlIEFuZDwvZGZuPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+XjwvY29kZT48ZGQ+PGRmbj5CaXR3aXNlIEV4Y2x1c2l2ZSBPcjwvZGZuPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ITwvY29kZT48ZGQ+PGRmbj5CaXR3aXNlIE9yIE5vdDwvZGZuPi4gCis8L2RsPgorCisgICAgIDxsaT5Mb3cgUHJlY2VkZW5jZQorCisgICAgICAgICAgCis8YSBuYW1lPSJpbmRleC1hZGRpdGlvbl8wMDJjLXBlcm1pdHRlZC1hcmd1bWVudHMtMjYxIj48L2E+Cis8YSBuYW1lPSJpbmRleC1wbHVzXzAwMmMtcGVybWl0dGVkLWFyZ3VtZW50cy0yNjIiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWFyZ3VtZW50cy1mb3ItYWRkaXRpb24tMjYzIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPis8L2NvZGU+PGRkPjxkZm4+QWRkaXRpb248L2Rmbj4uICBJZiBlaXRoZXIgYXJndW1lbnQgaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaGFzIHRoZSBzZWN0aW9uIG9mCit0aGUgb3RoZXIgYXJndW1lbnQuICBZb3UgbWF5IG5vdCBhZGQgdG9nZXRoZXIgYXJndW1lbnRzIGZyb20gZGlmZmVyZW50CitzZWN0aW9ucy4KKworICAgICAgICAgIDxwPjxhIG5hbWU9ImluZGV4LXN1YnRyYWN0aW9uXzAwMmMtcGVybWl0dGVkLWFyZ3VtZW50cy0yNjQiPjwvYT48YSBuYW1lPSJpbmRleC1taW51c18wMDJjLXBlcm1pdHRlZC1hcmd1bWVudHMtMjY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJndW1lbnRzLWZvci1zdWJ0cmFjdGlvbi0yNjYiPjwvYT48YnI+PGR0Pjxjb2RlPi08L2NvZGU+PGRkPjxkZm4+U3VidHJhY3Rpb248L2Rmbj4uICBJZiB0aGUgcmlnaHQgYXJndW1lbnQgaXMgYWJzb2x1dGUsIHRoZQorcmVzdWx0IGhhcyB0aGUgc2VjdGlvbiBvZiB0aGUgbGVmdCBhcmd1bWVudC4gCitJZiBib3RoIGFyZ3VtZW50cyBhcmUgaW4gdGhlIHNhbWUgc2VjdGlvbiwgdGhlIHJlc3VsdCBpcyBhYnNvbHV0ZS4gCitZb3UgbWF5IG5vdCBzdWJ0cmFjdCBhcmd1bWVudHMgZnJvbSBkaWZmZXJlbnQgc2VjdGlvbnMuIAorPCEtLSBGSVhNRSBpcyB0aGVyZSBzdGlsbCBzb21ldGhpbmcgdXNlZnVsIHRvIHNheSBhYm91dCB1bmRlZmluZWQgLSB1bmRlZmluZWQgPyAtLT4KKworICAgICAgICAgIDxwPjxhIG5hbWU9ImluZGV4LWNvbXBhcmlzb24tZXhwcmVzc2lvbnMtMjY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXhwcmVzc2lvbnNfMDAyYy1jb21wYXJpc29uLTI2OCI+PC9hPjxicj48ZHQ+PGNvZGU+PT08L2NvZGU+PGRkPjxkZm4+SXMgRXF1YWwgVG88L2Rmbj4KKzxicj48ZHQ+PGNvZGU+Jmx0OyZndDs8L2NvZGU+PGR0Pjxjb2RlPiE9PC9jb2RlPjxkZD48ZGZuPklzIE5vdCBFcXVhbCBUbzwvZGZuPgorPGJyPjxkdD48Y29kZT4mbHQ7PC9jb2RlPjxkZD48ZGZuPklzIExlc3MgVGhhbjwvZGZuPgorPGJyPjxkdD48Y29kZT4mZ3Q7PC9jb2RlPjxkZD48ZGZuPklzIEdyZWF0ZXIgVGhhbjwvZGZuPgorPGJyPjxkdD48Y29kZT4mZ3Q7PTwvY29kZT48ZGQ+PGRmbj5JcyBHcmVhdGVyIFRoYW4gT3IgRXF1YWwgVG88L2Rmbj4KKzxicj48ZHQ+PGNvZGU+Jmx0Oz08L2NvZGU+PGRkPjxkZm4+SXMgTGVzcyBUaGFuIE9yIEVxdWFsIFRvPC9kZm4+CisKKyAgICAgICAgICA8cD5UaGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgY2FuIGJlIHVzZWQgYXMgaW5maXggb3BlcmF0b3JzLiAgQSB0cnVlIHJlc3VsdHMgaGFzIGEKK3ZhbHVlIG9mIC0xIHdoZXJlYXMgYSBmYWxzZSByZXN1bHQgaGFzIGEgdmFsdWUgb2YgMC4gICBOb3RlLCB0aGVzZSBvcGVyYXRvcnMKK3BlcmZvcm0gc2lnbmVkIGNvbXBhcmlzb25zLiAKKzwvZGw+CisKKyAgICAgPGxpPkxvd2VzdCBQcmVjZWRlbmNlCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JmFtcDsmYW1wOzwvY29kZT48ZGQ+PGRmbj5Mb2dpY2FsIEFuZDwvZGZuPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+fHw8L2NvZGU+PGRkPjxkZm4+TG9naWNhbCBPcjwvZGZuPi4KKworICAgICAgICAgIDxwPlRoZXNlIHR3byBsb2dpY2FsIG9wZXJhdGlvbnMgY2FuIGJlIHVzZWQgdG8gY29tYmluZSB0aGUgcmVzdWx0cyBvZiBzdWIKK2V4cHJlc3Npb25zLiAgTm90ZSwgdW5saWtlIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycyBhIHRydWUgcmVzdWx0IHJldHVybnMgYQordmFsdWUgb2YgMSBidXQgYSBmYWxzZSByZXN1bHRzIGRvZXMgc3RpbGwgcmV0dXJuIDAuICBBbHNvIG5vdGUgdGhhdCB0aGUgbG9naWNhbAorb3Igb3BlcmF0b3IgaGFzIGEgc2xpZ2h0bHkgbG93ZXIgcHJlY2VkZW5jZSB0aGFuIGxvZ2ljYWwgYW5kLgorCisgICAgIDwvZGw+CisgICAgIDwvb2w+CisKKyAgIDxwPkluIHNob3J0LCBpdCdzIG9ubHkgbWVhbmluZ2Z1bCB0byBhZGQgb3Igc3VidHJhY3QgdGhlIDxlbT5vZmZzZXRzPC9lbT4gaW4gYW4KK2FkZHJlc3M7IHlvdSBjYW4gb25seSBoYXZlIGEgZGVmaW5lZCBzZWN0aW9uIGluIG9uZSBvZiB0aGUgdHdvIGFyZ3VtZW50cy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSW5wdXQtRmlsZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lucHV0LUZpbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyNjBiNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lucHV0LUZpbGVzLmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklucHV0IEZpbGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3IiB0aXRsZT0iT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb21tYW5kLUxpbmUuaHRtbCNDb21tYW5kLUxpbmUiIHRpdGxlPSJDb21tYW5kIExpbmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPYmplY3QuaHRtbCNPYmplY3QiIHRpdGxlPSJPYmplY3QiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnB1dC1GaWxlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPYmplY3QuaHRtbCNPYmplY3QiPk9iamVjdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvbW1hbmQtTGluZS5odG1sI0NvbW1hbmQtTGluZSI+Q29tbWFuZCBMaW5lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjUgSW5wdXQgRmlsZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pbnB1dC0yOSI+PC9hPjxhIG5hbWU9ImluZGV4LXNvdXJjZS1wcm9ncmFtLTMwIj48L2E+PGEgbmFtZT0iaW5kZXgtZmlsZXNfMDAyYy1pbnB1dC0zMSI+PC9hPldlIHVzZSB0aGUgcGhyYXNlIDxkZm4+c291cmNlIHByb2dyYW08L2Rmbj4sIGFiYnJldmlhdGVkIDxkZm4+c291cmNlPC9kZm4+LCB0bworZGVzY3JpYmUgdGhlIHByb2dyYW0gaW5wdXQgdG8gb25lIHJ1biBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4gIFRoZSBwcm9ncmFtIG1heQorYmUgaW4gb25lIG9yIG1vcmUgZmlsZXM7IGhvdyB0aGUgc291cmNlIGlzIHBhcnRpdGlvbmVkIGludG8gZmlsZXMKK2RvZXNuJ3QgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBzb3VyY2UuCisKKzwhLS0gSSBhZGRlZCAiY29uIiBwcmVmaXggdG8gImNhdGVuYXRpb24iIGp1c3QgdG8gcHJvdmUgSSBjYW4gb3ZlcmNvbWUgbXkgLS0+Cis8IS0tIEFQTCB0cmFpbmluZy4uLiAgIGRvY0BjeWdudXMuY29tIC0tPgorICAgPHA+VGhlIHNvdXJjZSBwcm9ncmFtIGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgdGV4dCBpbiBhbGwgdGhlIGZpbGVzLCBpbiB0aGUKK29yZGVyIHNwZWNpZmllZC4KKworPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+CisgICA8cD5FYWNoIHRpbWUgeW91IHJ1biA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBpdCBhc3NlbWJsZXMgZXhhY3RseSBvbmUgc291cmNlCitwcm9ncmFtLiAgVGhlIHNvdXJjZSBwcm9ncmFtIGlzIG1hZGUgdXAgb2Ygb25lIG9yIG1vcmUgZmlsZXMuIAorKFRoZSBzdGFuZGFyZCBpbnB1dCBpcyBhbHNvIGEgZmlsZS4pCisKKyAgIDxwPllvdSBnaXZlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGEgY29tbWFuZCBsaW5lIHRoYXQgaGFzIHplcm8gb3IgbW9yZSBpbnB1dCBmaWxlCituYW1lcy4gIFRoZSBpbnB1dCBmaWxlcyBhcmUgcmVhZCAoZnJvbSBsZWZ0IGZpbGUgbmFtZSB0byByaWdodCkuICBBCitjb21tYW5kIGxpbmUgYXJndW1lbnQgKGluIGFueSBwb3NpdGlvbikgdGhhdCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nCitpcyB0YWtlbiB0byBiZSBhbiBpbnB1dCBmaWxlIG5hbWUuCisKKyAgIDxwPklmIHlvdSBnaXZlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IG5vIGZpbGUgbmFtZXMgaXQgYXR0ZW1wdHMgdG8gcmVhZCBvbmUgaW5wdXQgZmlsZQorZnJvbSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc3RhbmRhcmQgaW5wdXQsIHdoaWNoIGlzIG5vcm1hbGx5IHlvdXIgdGVybWluYWwuICBZb3UKK21heSBoYXZlIHRvIHR5cGUgJmx0O2N0bC1EJmd0OyB0byB0ZWxsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRoZXJlIGlzIG5vIG1vcmUgcHJvZ3JhbQordG8gYXNzZW1ibGUuCisKKyAgIDxwPlVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlmIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgbmFtZSB0aGUgc3RhbmRhcmQgaW5wdXQgZmlsZQoraW4geW91ciBjb21tYW5kIGxpbmUuCisKKyAgIDxwPklmIHRoZSBzb3VyY2UgaXMgZW1wdHksIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHByb2R1Y2VzIGEgc21hbGwsIGVtcHR5IG9iamVjdAorZmlsZS4KKworPCEtLSBtYW4gZW5kIC0tPgorPGg0IGNsYXNzPSJzdWJoZWFkaW5nIj5GaWxlbmFtZXMgYW5kIExpbmUtbnVtYmVyczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlucHV0LWZpbGUtbGluZW51bWJlcnMtMzIiPjwvYT48YSBuYW1lPSJpbmRleC1saW5lLW51bWJlcnNfMDAyYy1pbi1pbnB1dC1maWxlcy0zMyI+PC9hPlRoZXJlIGFyZSB0d28gd2F5cyBvZiBsb2NhdGluZyBhIGxpbmUgaW4gdGhlIGlucHV0IGZpbGUgKG9yIGZpbGVzKSBhbmQKK2VpdGhlciBtYXkgYmUgdXNlZCBpbiByZXBvcnRpbmcgZXJyb3IgbWVzc2FnZXMuICBPbmUgd2F5IHJlZmVycyB0byBhIGxpbmUKK251bWJlciBpbiBhIHBoeXNpY2FsIGZpbGU7IHRoZSBvdGhlciByZWZlcnMgdG8gYSBsaW5lIG51bWJlciBpbiBhCismbGRxdW87bG9naWNhbCZyZHF1bzsgZmlsZS4gIFNlZSA8YSBocmVmPSJFcnJvcnMuaHRtbCNFcnJvcnMiPkVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzPC9hPi4KKworICAgPHA+PGRmbj5QaHlzaWNhbCBmaWxlczwvZGZuPiBhcmUgdGhvc2UgZmlsZXMgbmFtZWQgaW4gdGhlIGNvbW1hbmQgbGluZSBnaXZlbgordG8gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPjxkZm4+TG9naWNhbCBmaWxlczwvZGZuPiBhcmUgc2ltcGx5IG5hbWVzIGRlY2xhcmVkIGV4cGxpY2l0bHkgYnkgYXNzZW1ibGVyCitkaXJlY3RpdmVzOyB0aGV5IGJlYXIgbm8gcmVsYXRpb24gdG8gcGh5c2ljYWwgZmlsZXMuICBMb2dpY2FsIGZpbGUgbmFtZXMgaGVscAorZXJyb3IgbWVzc2FnZXMgcmVmbGVjdCB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc291cmNlCitpcyBpdHNlbGYgc3ludGhlc2l6ZWQgZnJvbSBvdGhlciBmaWxlcy4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHVuZGVyc3RhbmRzIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZXMgZW1pdHRlZCBieSB0aGUgPGNvZGU+Z2NjPC9jb2RlPiBwcmVwcm9jZXNzb3IuICBTZWUgYWxzbworPGEgaHJlZj0iRmlsZS5odG1sI0ZpbGUiPjxjb2RlPi5maWxlPC9jb2RlPjwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0ludC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwNjFlNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0ludC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW5jbHVkZS5odG1sI0luY2x1ZGUiIHRpdGxlPSJJbmNsdWRlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW50ZXJuYWwuaHRtbCNJbnRlcm5hbCIgdGl0bGU9IkludGVybmFsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkludGVybmFsLmh0bWwjSW50ZXJuYWwiPkludGVybmFsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5jbHVkZS5odG1sI0luY2x1ZGUiPkluY2x1ZGU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNjUgPGNvZGU+LmludCA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW50XzAwN2QtZGlyZWN0aXZlLTM3NSI+PC9hPjxhIG5hbWU9ImluZGV4LWludGVnZXJzXzAwMmMtMzJfMDAyZGJpdC0zNzYiPjwvYT5FeHBlY3QgemVybyBvciBtb3JlIDx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj4sIG9mIGFueSBzZWN0aW9uLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiAKK0ZvciBlYWNoIGV4cHJlc3Npb24sIGVtaXQgYSBudW1iZXIgdGhhdCwgYXQgcnVuIHRpbWUsIGlzIHRoZSB2YWx1ZSBvZiB0aGF0CitleHByZXNzaW9uLiAgVGhlIGJ5dGUgb3JkZXIgYW5kIGJpdCBzaXplIG9mIHRoZSBudW1iZXIgZGVwZW5kcyBvbiB3aGF0IGtpbmQKK29mIHRhcmdldCB0aGUgYXNzZW1ibHkgaXMgZm9yLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JbnRlZ2VyLUV4cHJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JbnRlZ2VyLUV4cHJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4N2IwMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0ludGVnZXItRXhwcnMuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbnRlZ2VyIEV4cHJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIiB0aXRsZT0iRXhwcmVzc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFbXB0eS1FeHBycy5odG1sI0VtcHR5LUV4cHJzIiB0aXRsZT0iRW1wdHkgRXhwcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnRlZ2VyLUV4cHJzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRW1wdHktRXhwcnMuaHRtbCNFbXB0eS1FeHBycyI+RW1wdHkgRXhwcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIj5FeHByZXNzaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMiBJbnRlZ2VyIEV4cHJlc3Npb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW50ZWdlci1leHByZXNzaW9ucy0yNDYiPjwvYT48YSBuYW1lPSJpbmRleC1leHByZXNzaW9uc18wMDJjLWludGVnZXItMjQ3Ij48L2E+QW4gPGRmbj5pbnRlZ2VyIGV4cHJlc3Npb248L2Rmbj4gaXMgb25lIG9yIG1vcmUgPGVtPmFyZ3VtZW50czwvZW0+IGRlbGltaXRlZAorYnkgPGVtPm9wZXJhdG9yczwvZW0+LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQXJndW1lbnRzLmh0bWwjQXJndW1lbnRzIj5Bcmd1bWVudHM8L2E+OiAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiPk9wZXJhdG9yczwvYT46ICAgICAgICAgICAgICAgICAgICBPcGVyYXRvcnMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlByZWZpeC1PcHMuaHRtbCNQcmVmaXgtT3BzIj5QcmVmaXggT3BzPC9hPjogICAgICAgICAgICAgICAgICAgUHJlZml4IE9wZXJhdG9ycworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iSW5maXgtT3BzLmh0bWwjSW5maXgtT3BzIj5JbmZpeCBPcHM8L2E+OiAgICAgICAgICAgICAgICAgICAgSW5maXggT3BlcmF0b3JzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JbnRlZ2Vycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSW50ZWdlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDFkYWU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSW50ZWdlcnMuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbnRlZ2VycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTnVtYmVycy5odG1sI051bWJlcnMiIHRpdGxlPSJOdW1iZXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQmlnbnVtcy5odG1sI0JpZ251bXMiIHRpdGxlPSJCaWdudW1zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50ZWdlcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQmlnbnVtcy5odG1sI0JpZ251bXMiPkJpZ251bXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJOdW1iZXJzLmh0bWwjTnVtYmVycyI+TnVtYmVyczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjMuNi4yLjEgSW50ZWdlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1pbnRlZ2Vycy0xNjkiPjwvYT48YSBuYW1lPSJpbmRleC1jb25zdGFudHNfMDAyYy1pbnRlZ2VyLTE3MCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtYmluYXJ5LWludGVnZXJzLTE3MSI+PC9hPjxhIG5hbWU9ImluZGV4LWludGVnZXJzXzAwMmMtYmluYXJ5LTE3MiI+PC9hPkEgYmluYXJ5IGludGVnZXIgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjBCPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBvZgordGhlIGJpbmFyeSBkaWdpdHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wMTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtb2N0YWwtaW50ZWdlcnMtMTczIj48L2E+PGEgbmFtZT0iaW5kZXgtaW50ZWdlcnNfMDAyYy1vY3RhbC0xNzQiPjwvYT5BbiBvY3RhbCBpbnRlZ2VyIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgb2YgdGhlIG9jdGFsCitkaWdpdHMgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDEyMzQ1Njc8L3NwYW4+PC9zYW1wPiZyc3F1bzspLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1kZWNpbWFsLWludGVnZXJzLTE3NSI+PC9hPjxhIG5hbWU9ImluZGV4LWludGVnZXJzXzAwMmMtZGVjaW1hbC0xNzYiPjwvYT5BIGRlY2ltYWwgaW50ZWdlciBzdGFydHMgd2l0aCBhIG5vbi16ZXJvIGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IKK21vcmUgZGlnaXRzICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjAxMjM0NTY3ODk8L3NwYW4+PC9zYW1wPiZyc3F1bzspLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1oZXhhZGVjaW1hbC1pbnRlZ2Vycy0xNzciPjwvYT48YSBuYW1lPSJpbmRleC1pbnRlZ2Vyc18wMDJjLWhleGFkZWNpbWFsLTE3OCI+PC9hPkEgaGV4YWRlY2ltYWwgaW50ZWdlciBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MFg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9sbG93ZWQgYnkgb25lIG9yCittb3JlIGhleGFkZWNpbWFsIGRpZ2l0cyBjaG9zZW4gZnJvbSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjAxMjM0NTY3ODlhYmNkZWZBQkNERUY8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPkludGVnZXJzIGhhdmUgdGhlIHVzdWFsIHZhbHVlcy4gIFRvIGRlbm90ZSBhIG5lZ2F0aXZlIGludGVnZXIsIHVzZQordGhlIHByZWZpeCBvcGVyYXRvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi08L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlzY3Vzc2VkIHVuZGVyIGV4cHJlc3Npb25zCisoc2VlIDxhIGhyZWY9IlByZWZpeC1PcHMuaHRtbCNQcmVmaXgtT3BzIj5QcmVmaXggT3BlcmF0b3JzPC9hPikuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0ludGVybmFsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JbnRlcm5hbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YmQzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JbnRlcm5hbC5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludGVybmFsIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbnQuaHRtbCNJbnQiIHRpdGxlPSJJbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJcnAuaHRtbCNJcnAiIHRpdGxlPSJJcnAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnRlcm5hbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJcnAuaHRtbCNJcnAiPklycDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkludC5odG1sI0ludCI+SW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjY2IDxjb2RlPi5pbnRlcm5hbCA8L2NvZGU+PHZhcj5uYW1lczwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW50ZXJuYWxfMDA3ZC1kaXJlY3RpdmUtMzc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmlzaWJpbGl0eS0zNzgiPjwvYT5UaGlzIGlzIG9uZSBvZiB0aGUgRUxGIHZpc2liaWxpdHkgZGlyZWN0aXZlcy4gIFRoZSBvdGhlciB0d28gYXJlCis8Y29kZT4uaGlkZGVuPC9jb2RlPiAoc2VlIDxhIGhyZWY9IkhpZGRlbi5odG1sI0hpZGRlbiI+PGNvZGU+LmhpZGRlbjwvY29kZT48L2E+KSBhbmQKKzxjb2RlPi5wcm90ZWN0ZWQ8L2NvZGU+IChzZWUgPGEgaHJlZj0iUHJvdGVjdGVkLmh0bWwjUHJvdGVjdGVkIj48Y29kZT4ucHJvdGVjdGVkPC9jb2RlPjwvYT4pLgorCisgICA8cD5UaGlzIGRpcmVjdGl2ZSBvdmVycmlkZXMgdGhlIG5hbWVkIHN5bWJvbHMgZGVmYXVsdCB2aXNpYmlsaXR5ICh3aGljaCBpcyBzZXQgYnkKK3RoZWlyIGJpbmRpbmc6IGxvY2FsLCBnbG9iYWwgb3Igd2VhaykuICBUaGUgZGlyZWN0aXZlIHNldHMgdGhlIHZpc2liaWxpdHkgdG8KKzxjb2RlPmludGVybmFsPC9jb2RlPiB3aGljaCBtZWFucyB0aGF0IHRoZSBzeW1ib2xzIGFyZSBjb25zaWRlcmVkIHRvIGJlIDxjb2RlPmhpZGRlbjwvY29kZT4KKyhpLmUuLCBub3QgdmlzaWJsZSB0byBvdGhlciBjb21wb25lbnRzKSwgYW5kIHRoYXQgc29tZSBleHRyYSwgcHJvY2Vzc29yIHNwZWNpZmljCitwcm9jZXNzaW5nIG11c3QgYWxzbyBiZSBwZXJmb3JtZWQgdXBvbiB0aGUgIHN5bWJvbHMgYXMgd2VsbC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSW52b2tpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0ludm9raW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljNDI4MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0ludm9raW5nLmh0bWwKQEAgLTAsMCArMSw5OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW52b2tpbmcgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyIgdGl0bGU9Ik92ZXJ2aWV3Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ludGF4Lmh0bWwjU3ludGF4IiB0aXRsZT0iU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW52b2tpbmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3ludGF4Lmh0bWwjU3ludGF4Ij5TeW50YXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4yIENvbW1hbmQtTGluZSBPcHRpb25zPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLWFsbC12ZXJzaW9ucy1vZi1hc3NlbWJsZXItNDYiPjwvYT5UaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIGNvbW1hbmQtbGluZSBvcHRpb25zIGF2YWlsYWJsZSBpbiA8ZW0+YWxsPC9lbT4KK3ZlcnNpb25zIG9mIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gYXNzZW1ibGVyOyBzZWUgPGEgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+LAorZm9yIG9wdGlvbnMgc3BlY2lmaWMKK3RvIHBhcnRpY3VsYXIgbWFjaGluZSBhcmNoaXRlY3R1cmVzLgorCis8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiAtLT4KKyAgIDxwPklmIHlvdSBhcmUgaW52b2tpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gdmlhIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gQyBjb21waWxlciwKK3lvdSBjYW4gdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1XYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gcGFzcyBhcmd1bWVudHMgdGhyb3VnaCB0byB0aGUgYXNzZW1ibGVyLiAKK1RoZSBhc3NlbWJsZXIgYXJndW1lbnRzIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciAoYW5kIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1XYTwvc3Bhbj48L3NhbXA+JnJzcXVvOykKK2J5IGNvbW1hcy4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZ2NjIC1jIC1nIC1PIC1XYSwtYWxoLC1MIGZpbGUuYworPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgcGFzc2VzIHR3byBvcHRpb25zIHRvIHRoZSBhc3NlbWJsZXI6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWFsaDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoZW1pdCBhIGxpc3RpbmcgdG8KK3N0YW5kYXJkIG91dHB1dCB3aXRoIGhpZ2gtbGV2ZWwgYW5kIGFzc2VtYmx5IHNvdXJjZSkgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHJldGFpbgorbG9jYWwgc3ltYm9scyBpbiB0aGUgc3ltYm9sIHRhYmxlKS4KKworICAgPHA+VXN1YWxseSB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIHRoaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tV2E8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWVjaGFuaXNtLCBzaW5jZSBtYW55IGNvbXBpbGVyCitjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgYXV0b21hdGljYWxseSBwYXNzZWQgdG8gdGhlIGFzc2VtYmxlciBieSB0aGUgY29tcGlsZXIuIAorKFlvdSBjYW4gY2FsbCB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGNvbXBpbGVyIGRyaXZlciB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi12PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0byBzZWUKK3ByZWNpc2VseSB3aGF0IG9wdGlvbnMgaXQgcGFzc2VzIHRvIGVhY2ggY29tcGlsYXRpb24gcGFzcywgaW5jbHVkaW5nIHRoZQorYXNzZW1ibGVyLikKKworPCEtLSBtYW4gZW5kIC0tPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9ImEuaHRtbCNhIj5hPC9hPjogICAgICAgICAgICAgIC1hW2NkZ2hsbnNdIGVuYWJsZSBsaXN0aW5ncworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iYWx0ZXJuYXRlLmh0bWwjYWx0ZXJuYXRlIj5hbHRlcm5hdGU8L2E+OiAgICAgIC0tYWx0ZXJuYXRlIGVuYWJsZSBhbHRlcm5hdGUgbWFjcm8gc3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJELmh0bWwjRCI+RDwvYT46ICAgICAgICAgICAgICAtRCBmb3IgY29tcGF0aWJpbGl0eQorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iZi5odG1sI2YiPmY8L2E+OiAgICAgICAgICAgICAgLWYgdG8gd29yayBmYXN0ZXIKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkkuaHRtbCNJIj5JPC9hPjogICAgICAgICAgICAgIC1JIGZvciAuaW5jbHVkZSBzZWFyY2ggcGF0aAorCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJLLmh0bWwjSyI+SzwvYT46ICAgICAgICAgICAgICAtSyBmb3IgZGlmZmVyZW5jZSB0YWJsZXMKKworPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iTC5odG1sI0wiPkw8L2E+OiAgICAgICAgICAgICAgLUwgdG8gcmV0YWluIGxvY2FsIHN5bWJvbHMKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Imxpc3RpbmcuaHRtbCNsaXN0aW5nIj5saXN0aW5nPC9hPjogICAgICAgIC0tbGlzdGluZy1YWFggdG8gY29uZmlndXJlIGxpc3Rpbmcgb3V0cHV0Cis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJNLmh0bWwjTSI+TTwvYT46IAkJICAtTSBvciAtLW1yaSB0byBhc3NlbWJsZSBpbiBNUkkgY29tcGF0aWJpbGl0eSBtb2RlCis8bGk+PGEgaHJlZj0iTUQuaHRtbCNNRCI+TUQ8L2E+OiAgICAgICAgICAgICAtLU1EIGZvciBkZXBlbmRlbmN5IHRyYWNraW5nCis8bGk+PGEgaHJlZj0iby5odG1sI28iPm88L2E+OiAgICAgICAgICAgICAgLW8gdG8gbmFtZSB0aGUgb2JqZWN0IGZpbGUKKzxsaT48YSBocmVmPSJSLmh0bWwjUiI+UjwvYT46ICAgICAgICAgICAgICAtUiB0byBqb2luIGRhdGEgYW5kIHRleHQgc2VjdGlvbnMKKzxsaT48YSBocmVmPSJzdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcyI+c3RhdGlzdGljczwvYT46ICAgICAtLXN0YXRpc3RpY3MgdG8gc2VlIHN0YXRpc3RpY3MgYWJvdXQgYXNzZW1ibHkKKzxsaT48YSBocmVmPSJ0cmFkaXRpb25hbF8wMDJkZm9ybWF0Lmh0bWwjdHJhZGl0aW9uYWxfMDAyZGZvcm1hdCI+dHJhZGl0aW9uYWwtZm9ybWF0PC9hPjogIC0tdHJhZGl0aW9uYWwtZm9ybWF0IGZvciBjb21wYXRpYmxlIG91dHB1dAorPGxpPjxhIGhyZWY9InYuaHRtbCN2Ij52PC9hPjogICAgICAgICAgICAgIC12IHRvIGFubm91bmNlIHZlcnNpb24KKzxsaT48YSBocmVmPSJXLmh0bWwjVyI+VzwvYT46ICAgICAgICAgICAgICAtVywgLS1uby13YXJuLCAtLXdhcm4sIC0tZmF0YWwtd2FybmluZ3MgdG8gY29udHJvbCB3YXJuaW5ncworPGxpPjxhIGhyZWY9IlouaHRtbCNaIj5aPC9hPjogICAgICAgICAgICAgIC1aIHRvIG1ha2Ugb2JqZWN0IGZpbGUgZXZlbiBhZnRlciBlcnJvcnMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lycC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSXJwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxNDZjZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0lycC5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklycCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW50ZXJuYWwuaHRtbCNJbnRlcm5hbCIgdGl0bGU9IkludGVybmFsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSXJwYy5odG1sI0lycGMiIHRpdGxlPSJJcnBjIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSXJwIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklycGMuaHRtbCNJcnBjIj5JcnBjPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW50ZXJuYWwuaHRtbCNJbnRlcm5hbCI+SW50ZXJuYWw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNjcgPGNvZGU+LmlycCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+dmFsdWVzPC92YXI+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaXJwXzAwN2QtZGlyZWN0aXZlLTM3OSI+PC9hPkV2YWx1YXRlIGEgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyBhc3NpZ25pbmcgZGlmZmVyZW50IHZhbHVlcyB0byA8dmFyPnN5bWJvbDwvdmFyPi4gCitUaGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyBzdGFydHMgYXQgdGhlIDxjb2RlPi5pcnA8L2NvZGU+IGRpcmVjdGl2ZSwgYW5kIGlzCit0ZXJtaW5hdGVkIGJ5IGFuIDxjb2RlPi5lbmRyPC9jb2RlPiBkaXJlY3RpdmUuICBGb3IgZWFjaCA8dmFyPnZhbHVlPC92YXI+LCA8dmFyPnN5bWJvbDwvdmFyPiBpcworc2V0IHRvIDx2YXI+dmFsdWU8L3Zhcj4sIGFuZCB0aGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyBpcyBhc3NlbWJsZWQuICBJZiBubworPHZhcj52YWx1ZTwvdmFyPiBpcyBsaXN0ZWQsIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIGlzIGFzc2VtYmxlZCBvbmNlLCB3aXRoCis8dmFyPnN5bWJvbDwvdmFyPiBzZXQgdG8gdGhlIG51bGwgc3RyaW5nLiAgVG8gcmVmZXIgdG8gPHZhcj5zeW1ib2w8L3Zhcj4gd2l0aGluIHRoZQorc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cywgdXNlIDx2YXI+XHN5bWJvbDwvdmFyPi4KKworICAgPHA+Rm9yIGV4YW1wbGUsIGFzc2VtYmxpbmcKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICAgIC5pcnAgICAgcGFyYW0sMSwyLDMKKyAgICAgICAgICAgICBtb3ZlICAgIGRccGFyYW0sc3BALQorICAgICAgICAgICAgIC5lbmRyCis8L3ByZT4KKyAgIDxwPmlzIGVxdWl2YWxlbnQgdG8gYXNzZW1ibGluZworCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgbW92ZSAgICBkMSxzcEAtCisgICAgICAgICAgICAgbW92ZSAgICBkMixzcEAtCisgICAgICAgICAgICAgbW92ZSAgICBkMyxzcEAtCis8L3ByZT4KKyAgIDxwPkZvciBzb21lIGNhdmVhdHMgd2l0aCB0aGUgc3BlbGxpbmcgb2YgPHZhcj5zeW1ib2w8L3Zhcj4sIHNlZSBhbHNvIDxhIGhyZWY9Ik1hY3JvLmh0bWwjTWFjcm8iPk1hY3JvPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSXJwYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSXJwYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzM2RlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9JcnBjLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SXJwYyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSXJwLmh0bWwjSXJwIiB0aXRsZT0iSXJwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTGNvbW0uaHRtbCNMY29tbSIgdGl0bGU9Ikxjb21tIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSXJwYyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMY29tbS5odG1sI0xjb21tIj5MY29tbTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklycC5odG1sI0lycCI+SXJwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjY4IDxjb2RlPi5pcnBjIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj52YWx1ZXM8L3Zhcj48c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpcnBjXzAwN2QtZGlyZWN0aXZlLTM4MCI+PC9hPkV2YWx1YXRlIGEgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyBhc3NpZ25pbmcgZGlmZmVyZW50IHZhbHVlcyB0byA8dmFyPnN5bWJvbDwvdmFyPi4gCitUaGUgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyBzdGFydHMgYXQgdGhlIDxjb2RlPi5pcnBjPC9jb2RlPiBkaXJlY3RpdmUsIGFuZCBpcwordGVybWluYXRlZCBieSBhbiA8Y29kZT4uZW5kcjwvY29kZT4gZGlyZWN0aXZlLiAgRm9yIGVhY2ggY2hhcmFjdGVyIGluIDx2YXI+dmFsdWU8L3Zhcj4sCis8dmFyPnN5bWJvbDwvdmFyPiBpcyBzZXQgdG8gdGhlIGNoYXJhY3RlciwgYW5kIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIGlzCithc3NlbWJsZWQuICBJZiBubyA8dmFyPnZhbHVlPC92YXI+IGlzIGxpc3RlZCwgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgaXMKK2Fzc2VtYmxlZCBvbmNlLCB3aXRoIDx2YXI+c3ltYm9sPC92YXI+IHNldCB0byB0aGUgbnVsbCBzdHJpbmcuICBUbyByZWZlciB0bworPHZhcj5zeW1ib2w8L3Zhcj4gd2l0aGluIHRoZSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzLCB1c2UgPHZhcj5cc3ltYm9sPC92YXI+LgorCisgICA8cD5Gb3IgZXhhbXBsZSwgYXNzZW1ibGluZworCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgLmlycGMgICAgcGFyYW0sMTIzCisgICAgICAgICAgICAgbW92ZSAgICBkXHBhcmFtLHNwQC0KKyAgICAgICAgICAgICAuZW5kcgorPC9wcmU+CisgICA8cD5pcyBlcXVpdmFsZW50IHRvIGFzc2VtYmxpbmcKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICAgIG1vdmUgICAgZDEsc3BALQorICAgICAgICAgICAgIG1vdmUgICAgZDIsc3BALQorICAgICAgICAgICAgIG1vdmUgICAgZDMsc3BALQorPC9wcmU+CisgICA8cD5Gb3Igc29tZSBjYXZlYXRzIHdpdGggdGhlIHNwZWxsaW5nIG9mIDx2YXI+c3ltYm9sPC92YXI+LCBzZWUgYWxzbyB0aGUgZGlzY3Vzc2lvbgorYXQgU2VlIDxhIGhyZWY9Ik1hY3JvLmh0bWwjTWFjcm8iPk1hY3JvPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvSy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NWM3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9LLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSS5odG1sI0kiIHRpdGxlPSJJIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTC5odG1sI0wiIHRpdGxlPSJMIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMLmh0bWwjTCI+TDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkkuaHRtbCNJIj5JPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjYgRGlmZmVyZW5jZSBUYWJsZXM6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1LPC9zcGFuPjwvc2FtcD48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZEstNjYiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWRpZmZlcmVuY2UtdGFibGVzXzAwMmMtd2FybmluZy02NyI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmctZm9yLWFsdGVyZWQtZGlmZmVyZW5jZS10YWJsZXMtNjgiPjwvYT48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBzb21ldGltZXMgYWx0ZXJzIHRoZSBjb2RlIGVtaXR0ZWQgZm9yIGRpcmVjdGl2ZXMgb2YgdGhlCitmb3JtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LndvcmQgPC9zcGFuPjx2YXI+c3ltMTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4tPC9zcGFuPjx2YXI+c3ltMjwvdmFyPjwvc2FtcD4mcnNxdW87LiAgU2VlIDxhIGhyZWY9IldvcmQuaHRtbCNXb3JkIj48Y29kZT4ud29yZDwvY29kZT48L2E+LiAKK1lvdSBjYW4gdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1LPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpZiB5b3Ugd2FudCBhIHdhcm5pbmcgaXNzdWVkIHdoZW4gdGhpcworaXMgZG9uZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTMyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSy5odG1sI0siIHRpdGxlPSJLIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibGlzdGluZy5odG1sI2xpc3RpbmciIHRpdGxlPSJsaXN0aW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJsaXN0aW5nLmh0bWwjbGlzdGluZyI+bGlzdGluZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IksuaHRtbCNLIj5LPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjcgSW5jbHVkZSBMb2NhbCBTeW1ib2xzOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTDwvc3Bhbj48L3NhbXA+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRMLTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9jYWwtc3ltYm9sc18wMDJjLXJldGFpbmluZy1pbi1vdXRwdXQtNzAiPjwvYT5TeW1ib2xzIGJlZ2lubmluZyB3aXRoIHN5c3RlbS1zcGVjaWZpYyBsb2NhbCBsYWJlbCBwcmVmaXhlcywgdHlwaWNhbGx5CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBFTEYgc3lzdGVtcyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHRyYWRpdGlvbmFsIGEub3V0IHN5c3RlbXMsIGFyZQorY2FsbGVkIDxkZm4+bG9jYWwgc3ltYm9sczwvZGZuPi4gIFNlZSA8YSBocmVmPSJTeW1ib2wtTmFtZXMuaHRtbCNTeW1ib2wtTmFtZXMiPlN5bWJvbCBOYW1lczwvYT4uICBOb3JtYWxseSB5b3UgZG8gbm90IHNlZQorc3VjaCBzeW1ib2xzIHdoZW4gZGVidWdnaW5nLCBiZWNhdXNlIHRoZXkgYXJlIGludGVuZGVkIGZvciB0aGUgdXNlIG9mCitwcm9ncmFtcyAobGlrZSBjb21waWxlcnMpIHRoYXQgY29tcG9zZSBhc3NlbWJsZXIgcHJvZ3JhbXMsIG5vdCBmb3IgeW91cgorbm90aWNlLiAgTm9ybWFsbHkgYm90aCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBhbmQgPGNvZGU+bGQ8L2NvZGU+IGRpc2NhcmQKK3N1Y2ggc3ltYm9scywgc28geW91IGRvIG5vdCBub3JtYWxseSBkZWJ1ZyB3aXRoIHRoZW0uCisKKyAgIDxwPlRoaXMgb3B0aW9uIHRlbGxzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRvIHJldGFpbiB0aG9zZSBsb2NhbCBzeW1ib2xzCitpbiB0aGUgb2JqZWN0IGZpbGUuICBVc3VhbGx5IGlmIHlvdSBkbyB0aGlzIHlvdSBhbHNvIHRlbGwgdGhlIGxpbmtlcgorPGNvZGU+bGQ8L2NvZGU+IHRvIHByZXNlcnZlIHRob3NlIHN5bWJvbHMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xNMzItT3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTE0zMi1PcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDExN2NiYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xNMzItT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxNMzIgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTE0zMl8wMDJkRGVwZW5kZW50Lmh0bWwjTE0zMl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTE0zMi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMTTMyLVN5bnRheC5odG1sI0xNMzItU3ludGF4IiB0aXRsZT0iTE0zMiBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMTTMyLU9wY29kZXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMTTMyLVN5bnRheC5odG1sI0xNMzItU3ludGF4Ij5MTTMyIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkxNMzJfMDAyZERlcGVuZGVudC5odG1sI0xNMzJfMDAyZERlcGVuZGVudCI+TE0zMi1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjIwLjMgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxNMzItb3Bjb2RlLXN1bW1hcnktMTE2NyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZS1zdW1tYXJ5XzAwMmMtTE0zMi0xMTY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5lbW9uaWNzXzAwMmMtTE0zMi0xMTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW5zdHJ1Y3Rpb24tc3VtbWFyeV8wMDJjLUxNMzItMTE3MCI+PC9hPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgTE0zMiBtYWNoaW5lIGluc3RydWN0aW9uIHNldCwgc2VlCis8YSBocmVmPSJodHRwOi8vd3d3LmxhdHRpY2VzZW1pLmNvbS9wcm9kdWN0cy9pbnRlbGxlY3R1YWxwcm9wZXJ0eS9pcGNvcmVzL21pY28zMi8iPmh0dHA6Ly93d3cubGF0dGljZXNlbWkuY29tL3Byb2R1Y3RzL2ludGVsbGVjdHVhbHByb3BlcnR5L2lwY29yZXMvbWljbzMyLzwvYT4uCisKKyAgIDxwPjxjb2RlPmFzPC9jb2RlPiBpbXBsZW1lbnRzIGFsbCB0aGUgc3RhbmRhcmQgTE0zMiBvcGNvZGVzLgorCis8IS0tIENvcHlyaWdodCAyMDA1LCAyMDA4IC0tPgorPCEtLSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xNMzItT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTE0zMi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjMDIwMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xNMzItT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxNMzIgT3B0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTE0zMl8wMDJkRGVwZW5kZW50Lmh0bWwjTE0zMl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTE0zMi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMTTMyLVN5bnRheC5odG1sI0xNMzItU3ludGF4IiB0aXRsZT0iTE0zMiBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMTTMyLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTE0zMi1TeW50YXguaHRtbCNMTTMyLVN5bnRheCI+TE0zMiBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJMTTMyXzAwMmREZXBlbmRlbnQuaHRtbCNMTTMyXzAwMmREZXBlbmRlbnQiPkxNMzItRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yMC4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1MTTMyLW9wdGlvbnMtXzAwMjhub25lXzAwMjktMTE0NiI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtZm9yLUxNMzItXzAwMjhub25lXzAwMjktMTE0NyI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtbXVsdGlwbHlfMDAyZGVuYWJsZWRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTE0zMi0xMTQ4Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1tbXVsdGlwbHktZW5hYmxlZDwvY29kZT48ZGQ+RW5hYmxlIG11bHRpcGx5IGluc3RydWN0aW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWRpdmlkZV8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNDkiPjwvYT48YnI+PGR0Pjxjb2RlPi1tZGl2aWRlLWVuYWJsZWQ8L2NvZGU+PGRkPkVuYWJsZSBkaXZpZGUgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtYmFycmVsXzAwMmRzaGlmdF8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNTAiPjwvYT48YnI+PGR0Pjxjb2RlPi1tYmFycmVsLXNoaWZ0LWVuYWJsZWQ8L2NvZGU+PGRkPkVuYWJsZSBiYXJyZWwtc2hpZnQgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtc2lnbl8wMDJkZXh0ZW5kXzAwMmRlbmFibGVkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLUxNMzItMTE1MSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1zaWduLWV4dGVuZC1lbmFibGVkPC9jb2RlPjxkZD5FbmFibGUgc2lnbiBleHRlbmQgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdXNlcl8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNTIiPjwvYT48YnI+PGR0Pjxjb2RlPi1tdXNlci1lbmFibGVkPC9jb2RlPjxkZD5FbmFibGUgdXNlciBkZWZpbmVkIGluc3RydWN0aW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWljYWNoZV8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNTMiPjwvYT48YnI+PGR0Pjxjb2RlPi1taWNhY2hlLWVuYWJsZWQ8L2NvZGU+PGRkPkVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSByZWxhdGVkIENTUnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1kY2FjaGVfMDAyZGVuYWJsZWRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTE0zMi0xMTU0Ij48L2E+PGJyPjxkdD48Y29kZT4tbWRjYWNoZS1lbmFibGVkPC9jb2RlPjxkZD5FbmFibGUgZGF0YSBjYWNoZSByZWxhdGVkIENTUnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1icmVha18wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNTUiPjwvYT48YnI+PGR0Pjxjb2RlPi1tYnJlYWstZW5hYmxlZDwvY29kZT48ZGQ+RW5hYmxlIGJyZWFrIGluc3RydWN0aW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWFsbF8wMDJkZW5hYmxlZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1MTTMyLTExNTYiPjwvYT48YnI+PGR0Pjxjb2RlPi1tYWxsLWVuYWJsZWQ8L2NvZGU+PGRkPkVuYWJsZSBhbGwgaW5zdHJ1Y3Rpb25zIGFuZCBDU1JzLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MTTMyLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTE0zMi1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmE2ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTE0zMi1TeW50YXguaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MTTMyIFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTE0zMl8wMDJkRGVwZW5kZW50Lmh0bWwjTE0zMl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTE0zMi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiIHRpdGxlPSJMTTMyIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMTTMyLU9wY29kZXMuaHRtbCNMTTMyLU9wY29kZXMiIHRpdGxlPSJMTTMyIE9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMTTMyLVN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMTTMyLU9wY29kZXMuaHRtbCNMTTMyLU9wY29kZXMiPkxNMzIgT3Bjb2RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI0xNMzItT3B0aW9ucyI+TE0zMiBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTE0zMl8wMDJkRGVwZW5kZW50Lmh0bWwjTE0zMl8wMDJkRGVwZW5kZW50Ij5MTTMyLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjAuMiBTeW50YXg8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iTE0zMl8wMDJkUmVncy5odG1sI0xNMzJfMDAyZFJlZ3MiPkxNMzItUmVnczwvYT46ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgTmFtZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkxNMzJfMDAyZE1vZGlmaWVycy5odG1sI0xNMzJfMDAyZE1vZGlmaWVycyI+TE0zMi1Nb2RpZmllcnM8L2E+OiAgICAgICAgICAgICBSZWxvY2F0YWJsZSBFeHByZXNzaW9uIE1vZGlmaWVycworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iTE0zMl8wMDJkQ2hhcnMuaHRtbCNMTTMyXzAwMmRDaGFycyI+TE0zMi1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xNMzJfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MTTMyXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NWE1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MTTMyXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxNMzItQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkxNMzItU3ludGF4Lmh0bWwjTE0zMi1TeW50YXgiIHRpdGxlPSJMTTMyIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxNMzJfMDAyZE1vZGlmaWVycy5odG1sI0xNMzJfMDAyZE1vZGlmaWVycyIgdGl0bGU9IkxNMzItTW9kaWZpZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTE0zMi1DaGFycyI+PC9hPgorPGEgbmFtZT0iTE0zMl8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMTTMyXzAwMmRNb2RpZmllcnMuaHRtbCNMTTMyXzAwMmRNb2RpZmllcnMiPkxNMzItTW9kaWZpZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTE0zMi1TeW50YXguaHRtbCNMTTMyLVN5bnRheCI+TE0zMiBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjIwLjIuMyBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtTE0zMi0xMTYyIj48L2E+PGEgbmFtZT0iaW5kZXgtTE0zMi1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTExNjMiPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb24gYSBsaW5lIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50Cit0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLiAgTm90ZSB0aGF0IGlmIGEgbGluZQorc3RhcnRzIHdpdGggYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIHRoZW4gaXQgY2FuIGFsc28gYmUgYSBsb2dpY2FsIGxpbmUKK251bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEgcHJlcHJvY2Vzc29yCitjb250cm9sIGNvbW1hbmQgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLUxNMzItMTE2NCI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1MTTMyLTExNjUiPjwvYT48YSBuYW1lPSJpbmRleC1MTTMyLWxpbmUtc2VwYXJhdG9yLTExNjYiPjwvYT5BIHNlbWljb2xvbiAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj47PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIG9uCit0aGUgc2FtZSBsaW5lLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MTTMyXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xNMzJfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYWQyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MTTMyXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MTTMyLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSVAyS18wMDJkRGVwZW5kZW50Lmh0bWwjSVAyS18wMDJkRGVwZW5kZW50IiB0aXRsZT0iSVAySy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNMzJDXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJDXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNMzJDLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxNMzItRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJMTTMyXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTMyQ18wMDJkRGVwZW5kZW50Lmh0bWwjTTMyQ18wMDJkRGVwZW5kZW50Ij5NMzJDLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklQMktfMDAyZERlcGVuZGVudC5odG1sI0lQMktfMDAyZERlcGVuZGVudCI+SVAySy1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMjAgTE0zMiBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1MTTMyLXN1cHBvcnQtMTE0NSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkxNMzItU3ludGF4Lmh0bWwjTE0zMi1TeW50YXgiPkxNMzIgU3ludGF4PC9hPjogICAgICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJMTTMyLU9wY29kZXMuaHRtbCNMTTMyLU9wY29kZXMiPkxNMzIgT3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTE0zMl8wMDJkTW9kaWZpZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MTTMyXzAwMmRNb2RpZmllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWEwZjViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTE0zMl8wMDJkTW9kaWZpZXJzLmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxNMzItTW9kaWZpZXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJMTTMyLVN5bnRheC5odG1sI0xNMzItU3ludGF4IiB0aXRsZT0iTE0zMiBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMTTMyXzAwMmRSZWdzLmh0bWwjTE0zMl8wMDJkUmVncyIgdGl0bGU9IkxNMzItUmVncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxNMzJfMDAyZENoYXJzLmh0bWwjTE0zMl8wMDJkQ2hhcnMiIHRpdGxlPSJMTTMyLUNoYXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTE0zMi1Nb2RpZmllcnMiPjwvYT4KKzxhIG5hbWU9IkxNMzJfMDAyZE1vZGlmaWVycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMTTMyXzAwMmRDaGFycy5odG1sI0xNMzJfMDAyZENoYXJzIj5MTTMyLUNoYXJzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTE0zMl8wMDJkUmVncy5odG1sI0xNMzJfMDAyZFJlZ3MiPkxNMzItUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkxNMzItU3ludGF4Lmh0bWwjTE0zMi1TeW50YXgiPkxNMzIgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4yMC4yLjIgUmVsb2NhdGFibGUgRXhwcmVzc2lvbiBNb2RpZmllcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1MTTMyLW1vZGlmaWVycy0xMTU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3ludGF4XzAwMmMtTE0zMi0xMTYwIj48L2E+CitUaGUgYXNzZW1ibGVyIHN1cHBvcnRzIHNldmVyYWwgbW9kaWZpZXJzIHdoZW4gdXNpbmcgcmVsb2NhdGFibGUgYWRkcmVzc2VzCitpbiBMTTMyIGluc3RydWN0aW9uIG9wZXJhbmRzLiAgVGhlIGdlbmVyYWwgc3ludGF4IGlzIHRoZSBmb2xsb3dpbmc6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBtb2RpZmllcihyZWxvY2F0YWJsZS1leHByZXNzaW9uKQorPC9wcmU+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtc3ltYm9sLW1vZGlmaWVycy0xMTYxIj48L2E+Cis8ZGw+Cis8ZHQ+PGNvZGU+bG88L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBhbGxvd3MgeW91IHRvIHVzZSBiaXRzIDAgdGhyb3VnaCAxNSBvZgorYW4gYWRkcmVzcyBleHByZXNzaW9uIGFzIDE2IGJpdCByZWxvY2F0YWJsZSBleHByZXNzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aGk8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBhbGxvd3MgeW91IHRvIHVzZSBiaXRzIDE2IHRocm91Z2ggMjMgb2YgYW4gYWRkcmVzcyBleHByZXNzaW9uCithcyAxNiBiaXQgcmVsb2NhdGFibGUgZXhwcmVzc2lvbi4KKworICAgICA8cD5Gb3IgZXhhbXBsZQorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIG9yaSAgcjQsIHI0LCBsbyhzeW0rMTApCisgICAgICAgICAgb3JoaSByNCwgcjQsIGhpKHN5bSsxMCkKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmdwPC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZWQgY3JlYXRlcyBhIDE2LWJpdCByZWxvY2F0YWJsZSBleHByZXNzaW9uIHRoYXQgaXMKK3RoZSBvZmZzZXQgb2YgdGhlIHN5bWJvbCBmcm9tIHRoZSBnbG9iYWwgcG9pbnRlci4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBtdmEgcjQsIGdwKHN5bSkKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmdvdDwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIHBsYWNlcyBhIHN5bWJvbCBpbiB0aGUgR09UIGFuZCBjcmVhdGVzIGEgMTYtYml0CityZWxvY2F0YWJsZSBleHByZXNzaW9uIHRoYXQgaXMgdGhlIG9mZnNldCBpbnRvIHRoZSBHT1Qgb2YgdGhpcworc3ltYm9sLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGx3IHI0LCAoZ3ArZ290KHN5bSkpCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5nb3RvZmZsbzE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgYWxsb3dzIHlvdSB0byB1c2UgdGhlIGJpdHMgMCB0aHJvdWdoIDE1IG9mIGFuCithZGRyZXNzIHdoaWNoIGlzIGFuIG9mZnNldCBmcm9tIHRoZSBHT1QuCisKKyAgICAgPGJyPjxkdD48Y29kZT5nb3RvZmZoaTE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgYWxsb3dzIHlvdSB0byB1c2UgdGhlIGJpdHMgMTYgdGhyb3VnaCAzMSBvZiBhbgorYWRkcmVzcyB3aGljaCBpcyBhbiBvZmZzZXQgZnJvbSB0aGUgR09ULgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIG9yaGkgcjQsIHI0LCBnb3RvZmZoaTE2KGxzeW0pCisgICAgICAgICAgYWRkaSByNCwgcjQsIGdvdG9mZmxvMTYobHN5bSkKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MTTMyXzAwMmRSZWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MTTMyXzAwMmRSZWdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxMWI3NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xNMzJfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MTTMyLVJlZ3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkxNMzItU3ludGF4Lmh0bWwjTE0zMi1TeW50YXgiIHRpdGxlPSJMTTMyIFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxNMzJfMDAyZE1vZGlmaWVycy5odG1sI0xNMzJfMDAyZE1vZGlmaWVycyIgdGl0bGU9IkxNMzItTW9kaWZpZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTE0zMi1SZWdzIj48L2E+Cis8YSBuYW1lPSJMTTMyXzAwMmRSZWdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxNMzJfMDAyZE1vZGlmaWVycy5odG1sI0xNMzJfMDAyZE1vZGlmaWVycyI+TE0zMi1Nb2RpZmllcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJMTTMyLVN5bnRheC5odG1sI0xNMzItU3ludGF4Ij5MTTMyIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjAuMi4xIFJlZ2lzdGVyIE5hbWVzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtTE0zMi1yZWdpc3Rlci1uYW1lcy0xMTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXItbmFtZXNfMDAyYy1MTTMyLTExNTgiPjwvYT4KK0xNMzIgaGFzIDMyIHggMzItYml0IGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssIC4uLiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIzMTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+VGhlIGZvbGxvd2luZyBhbGlhc2VzIGFyZSBkZWZpbmVkOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdwPC9zcGFuPjwvc2FtcD4mcnNxdW87IC0gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMjY8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZwPC9zcGFuPjwvc2FtcD4mcnNxdW87IC0gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMjc8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgLSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIyODwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgLSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIyOTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjMwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjMxPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5MTTMyIGhhcyB0aGUgZm9sbG93aW5nIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcnMgKENTUnMpLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5JRTwvY29kZT48ZGQ+SW50ZXJydXB0IGVuYWJsZS4gCis8YnI+PGR0Pjxjb2RlPklNPC9jb2RlPjxkZD5JbnRlcnJ1cHQgbWFzay4gCis8YnI+PGR0Pjxjb2RlPklQPC9jb2RlPjxkZD5JbnRlcnJ1cHQgcGVuZGluZy4gCis8YnI+PGR0Pjxjb2RlPklDQzwvY29kZT48ZGQ+SW5zdHJ1Y3Rpb24gY2FjaGUgY29udHJvbC4gCis8YnI+PGR0Pjxjb2RlPkRDQzwvY29kZT48ZGQ+RGF0YSBjYWNoZSBjb250cm9sLiAKKzxicj48ZHQ+PGNvZGU+Q0M8L2NvZGU+PGRkPkN5Y2xlIGNvdW50ZXIuIAorPGJyPjxkdD48Y29kZT5DRkc8L2NvZGU+PGRkPkNvbmZpZ3VyYXRpb24uIAorPGJyPjxkdD48Y29kZT5FQkE8L2NvZGU+PGRkPkV4Y2VwdGlvbiBiYXNlIGFkZHJlc3MuIAorPGJyPjxkdD48Y29kZT5EQzwvY29kZT48ZGQ+RGVidWcgY29udHJvbC4gCis8YnI+PGR0Pjxjb2RlPkRFQkE8L2NvZGU+PGRkPkRlYnVnIGV4Y2VwdGlvbiBiYXNlIGFkZHJlc3MuIAorPGJyPjxkdD48Y29kZT5KVFg8L2NvZGU+PGRkPkpUQUcgdHJhbnNtaXQuIAorPGJyPjxkdD48Y29kZT5KUlg8L2NvZGU+PGRkPkpUQUcgcmVjZWl2ZS4gCis8YnI+PGR0Pjxjb2RlPkJQMDwvY29kZT48ZGQ+QnJlYWtwb2ludCAwLiAKKzxicj48ZHQ+PGNvZGU+QlAxPC9jb2RlPjxkZD5CcmVha3BvaW50IDEuIAorPGJyPjxkdD48Y29kZT5CUDI8L2NvZGU+PGRkPkJyZWFrcG9pbnQgMi4gCis8YnI+PGR0Pjxjb2RlPkJQMzwvY29kZT48ZGQ+QnJlYWtwb2ludCAzLiAKKzxicj48ZHQ+PGNvZGU+V1AwPC9jb2RlPjxkZD5XYXRjaHBvaW50IDAuIAorPGJyPjxkdD48Y29kZT5XUDE8L2NvZGU+PGRkPldhdGNocG9pbnQgMS4gCis8YnI+PGR0Pjxjb2RlPldQMjwvY29kZT48ZGQ+V2F0Y2hwb2ludCAyLiAKKzxicj48ZHQ+PGNvZGU+V1AzPC9jb2RlPjxkZD5XYXRjaHBvaW50IDMuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGFiZWxzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MYWJlbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzBhNDk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGFiZWxzLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGFiZWxzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyIgdGl0bGU9IlN5bWJvbHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTZXR0aW5nLVN5bWJvbHMuaHRtbCNTZXR0aW5nLVN5bWJvbHMiIHRpdGxlPSJTZXR0aW5nIFN5bWJvbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMYWJlbHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU2V0dGluZy1TeW1ib2xzLmh0bWwjU2V0dGluZy1TeW1ib2xzIj5TZXR0aW5nIFN5bWJvbHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyI+U3ltYm9sczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMSBMYWJlbHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1sYWJlbHMtMjEwIj48L2E+QSA8ZGZuPmxhYmVsPC9kZm4+IGlzIHdyaXR0ZW4gYXMgYSBzeW1ib2wgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBjb2xvbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIHN5bWJvbCB0aGVuIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCithY3RpdmUgbG9jYXRpb24gY291bnRlciwgYW5kIGlzLCBmb3IgZXhhbXBsZSwgYSBzdWl0YWJsZSBpbnN0cnVjdGlvbgorb3BlcmFuZC4gIFlvdSBhcmUgd2FybmVkIGlmIHlvdSB1c2UgdGhlIHNhbWUgc3ltYm9sIHRvIHJlcHJlc2VudCB0d28KK2RpZmZlcmVudCBsb2NhdGlvbnM6IHRoZSBmaXJzdCBkZWZpbml0aW9uIG92ZXJyaWRlcyBhbnkgb3RoZXIKK2RlZmluaXRpb25zLgorCisgICA8cD5PbiB0aGUgSFBQQSwgdGhlIHVzdWFsIGZvcm0gZm9yIGEgbGFiZWwgbmVlZCBub3QgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYQorY29sb24sIGJ1dCBpbnN0ZWFkIG11c3Qgc3RhcnQgaW4gY29sdW1uIHplcm8uICBPbmx5IG9uZSBsYWJlbCBtYXkgYmUgZGVmaW5lZCBvbgorYSBzaW5nbGUgbGluZS4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHRoZSBIUFBBIHZlcnNpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYWxzbworcHJvdmlkZXMgYSBzcGVjaWFsIGRpcmVjdGl2ZSA8Y29kZT4ubGFiZWw8L2NvZGU+IGZvciBkZWZpbmluZyBsYWJlbHMgbW9yZSBmbGV4aWJseS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGNvbW0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xjb21tLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxZTU2NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xjb21tLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGNvbW0gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklycGMuaHRtbCNJcnBjIiB0aXRsZT0iSXJwYyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxmbGFncy5odG1sI0xmbGFncyIgdGl0bGU9IkxmbGFncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikxjb21tIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxmbGFncy5odG1sI0xmbGFncyI+TGZsYWdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSXJwYy5odG1sI0lycGMiPklycGM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNjkgPGNvZGU+Lmxjb21tIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmxlbmd0aDwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGNvbW1fMDA3ZC1kaXJlY3RpdmUtMzgxIj48L2E+PGEgbmFtZT0iaW5kZXgtbG9jYWwtY29tbW9uLXN5bWJvbHMtMzgyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sc18wMDJjLWxvY2FsLWNvbW1vbi0zODMiPjwvYT5SZXNlcnZlIDx2YXI+bGVuZ3RoPC92YXI+IChhbiBhYnNvbHV0ZSBleHByZXNzaW9uKSBieXRlcyBmb3IgYSBsb2NhbCBjb21tb24KK2Rlbm90ZWQgYnkgPHZhcj5zeW1ib2w8L3Zhcj4uICBUaGUgc2VjdGlvbiBhbmQgdmFsdWUgb2YgPHZhcj5zeW1ib2w8L3Zhcj4gYXJlCit0aG9zZSBvZiB0aGUgbmV3IGxvY2FsIGNvbW1vbi4gIFRoZSBhZGRyZXNzZXMgYXJlIGFsbG9jYXRlZCBpbiB0aGUgYnNzCitzZWN0aW9uLCBzbyB0aGF0IGF0IHJ1bi10aW1lIHRoZSBieXRlcyBzdGFydCBvZmYgemVyb2VkLiAgPHZhcj5TeW1ib2w8L3Zhcj4KK2lzIG5vdCBkZWNsYXJlZCBnbG9iYWwgKHNlZSA8YSBocmVmPSJHbG9iYWwuaHRtbCNHbG9iYWwiPjxjb2RlPi5nbG9iYWw8L2NvZGU+PC9hPiksIHNvIGlzIG5vcm1hbGx5Citub3QgdmlzaWJsZSB0byA8Y29kZT5sZDwvY29kZT4uCisKKyAgIDxwPlNvbWUgdGFyZ2V0cyBwZXJtaXQgYSB0aGlyZCBhcmd1bWVudCB0byBiZSB1c2VkIHdpdGggPGNvZGU+Lmxjb21tPC9jb2RlPi4gIFRoaXMKK2FyZ3VtZW50IHNwZWNpZmllcyB0aGUgZGVzaXJlZCBhbGlnbm1lbnQgb2YgdGhlIHN5bWJvbCBpbiB0aGUgYnNzIHNlY3Rpb24uCisKKyAgIDxwPlRoZSBzeW50YXggZm9yIDxjb2RlPi5sY29tbTwvY29kZT4gZGlmZmVycyBzbGlnaHRseSBvbiB0aGUgSFBQQS4gIFRoZSBzeW50YXggaXMKKyZsc3F1bzs8c2FtcD48dmFyPnN5bWJvbDwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4gLmxjb21tLCA8L3NwYW4+PHZhcj5sZW5ndGg8L3Zhcj48L3NhbXA+JnJzcXVvOzsgPHZhcj5zeW1ib2w8L3Zhcj4gaXMgb3B0aW9uYWwuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xkLVNlY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MZC1TZWN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OGVjMmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MZC1TZWN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MZCBTZWN0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2VjdGlvbnMuaHRtbCNTZWN0aW9ucyIgdGl0bGU9IlNlY3Rpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2Vjcy1CYWNrZ3JvdW5kLmh0bWwjU2Vjcy1CYWNrZ3JvdW5kIiB0aXRsZT0iU2VjcyBCYWNrZ3JvdW5kIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQXMtU2VjdGlvbnMuaHRtbCNBcy1TZWN0aW9ucyIgdGl0bGU9IkFzIFNlY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTGQtU2VjdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXMtU2VjdGlvbnMuaHRtbCNBcy1TZWN0aW9ucyI+QXMgU2VjdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTZWNzLUJhY2tncm91bmQuaHRtbCNTZWNzLUJhY2tncm91bmQiPlNlY3MgQmFja2dyb3VuZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNlY3Rpb25zLmh0bWwjU2VjdGlvbnMiPlNlY3Rpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4yIExpbmtlciBTZWN0aW9uczwvaDM+CisKKzxwPjxjb2RlPmxkPC9jb2RlPiBkZWFscyB3aXRoIGp1c3QgZm91ciBraW5kcyBvZiBzZWN0aW9ucywgc3VtbWFyaXplZCBiZWxvdy4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LW5hbWVkLXNlY3Rpb25zLTE5MiI+PC9hPgorPGEgbmFtZT0iaW5kZXgtc2VjdGlvbnNfMDAyYy1uYW1lZC0xOTMiPjwvYT4KKzxkbD48ZHQ+PHN0cm9uZz5uYW1lZCBzZWN0aW9uczwvc3Ryb25nPjxkZD48YSBuYW1lPSJpbmRleC10ZXh0LXNlY3Rpb24tMTk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGF0YS1zZWN0aW9uLTE5NSI+PC9hPjxkdD48c3Ryb25nPnRleHQgc2VjdGlvbjwvc3Ryb25nPjxkdD48c3Ryb25nPmRhdGEgc2VjdGlvbjwvc3Ryb25nPjxkZD5UaGVzZSBzZWN0aW9ucyBob2xkIHlvdXIgcHJvZ3JhbS4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGFuZCA8Y29kZT5sZDwvY29kZT4gdHJlYXQgdGhlbSBhcworc2VwYXJhdGUgYnV0IGVxdWFsIHNlY3Rpb25zLiAgQW55dGhpbmcgeW91IGNhbiBzYXkgb2Ygb25lIHNlY3Rpb24gaXMKK3RydWUgb2YgYW5vdGhlci4gCis8IS0tIEBpZnNldCBhb3V0LWJvdXQgLS0+CitXaGVuIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcsIGhvd2V2ZXIsIGl0IGlzCitjdXN0b21hcnkgZm9yIHRoZSB0ZXh0IHNlY3Rpb24gdG8gYmUgdW5hbHRlcmFibGUuICBUaGUKK3RleHQgc2VjdGlvbiBpcyBvZnRlbiBzaGFyZWQgYW1vbmcgcHJvY2Vzc2VzOiBpdCBjb250YWlucworaW5zdHJ1Y3Rpb25zLCBjb25zdGFudHMgYW5kIHRoZSBsaWtlLiAgVGhlIGRhdGEgc2VjdGlvbiBvZiBhIHJ1bm5pbmcKK3Byb2dyYW0gaXMgdXN1YWxseSBhbHRlcmFibGU6IGZvciBleGFtcGxlLCBDIHZhcmlhYmxlcyB3b3VsZCBiZSBzdG9yZWQKK2luIHRoZSBkYXRhIHNlY3Rpb24uIAorPCEtLSBAZW5kIGlmc2V0IC0tPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWJzcy1zZWN0aW9uLTE5NiI+PC9hPjxicj48ZHQ+PHN0cm9uZz5ic3Mgc2VjdGlvbjwvc3Ryb25nPjxkZD5UaGlzIHNlY3Rpb24gY29udGFpbnMgemVyb2VkIGJ5dGVzIHdoZW4geW91ciBwcm9ncmFtIGJlZ2lucyBydW5uaW5nLiAgSXQKK2lzIHVzZWQgdG8gaG9sZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBjb21tb24gc3RvcmFnZS4gIFRoZSBsZW5ndGggb2YKK2VhY2ggcGFydGlhbCBwcm9ncmFtJ3MgYnNzIHNlY3Rpb24gaXMgaW1wb3J0YW50LCBidXQgYmVjYXVzZSBpdCBzdGFydHMKK291dCBjb250YWluaW5nIHplcm9lZCBieXRlcyB0aGVyZSBpcyBubyBuZWVkIHRvIHN0b3JlIGV4cGxpY2l0IHplcm8KK2J5dGVzIGluIHRoZSBvYmplY3QgZmlsZS4gIFRoZSBic3Mgc2VjdGlvbiB3YXMgaW52ZW50ZWQgdG8gZWxpbWluYXRlCit0aG9zZSBleHBsaWNpdCB6ZXJvcyBmcm9tIG9iamVjdCBmaWxlcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1hYnNvbHV0ZS1zZWN0aW9uLTE5NyI+PC9hPjxicj48ZHQ+PHN0cm9uZz5hYnNvbHV0ZSBzZWN0aW9uPC9zdHJvbmc+PGRkPkFkZHJlc3MgMCBvZiB0aGlzIHNlY3Rpb24gaXMgYWx3YXlzICZsZHF1bztyZWxvY2F0ZWQmcmRxdW87IHRvIHJ1bnRpbWUgYWRkcmVzcyAwLiAKK1RoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHJlZmVyIHRvIGFuIGFkZHJlc3MgdGhhdCA8Y29kZT5sZDwvY29kZT4gbXVzdAorbm90IGNoYW5nZSB3aGVuIHJlbG9jYXRpbmcuICBJbiB0aGlzIHNlbnNlIHdlIHNwZWFrIG9mIGFic29sdXRlCithZGRyZXNzZXMgYmVpbmcgJmxkcXVvO3VucmVsb2NhdGFibGUmcmRxdW87OiB0aGV5IGRvIG5vdCBjaGFuZ2UgZHVyaW5nIHJlbG9jYXRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtdW5kZWZpbmVkLXNlY3Rpb24tMTk4Ij48L2E+PGJyPjxkdD48c3Ryb25nPnVuZGVmaW5lZCBzZWN0aW9uPC9zdHJvbmc+PGRkPlRoaXMgJmxkcXVvO3NlY3Rpb24mcmRxdW87IGlzIGEgY2F0Y2gtYWxsIGZvciBhZGRyZXNzIHJlZmVyZW5jZXMgdG8gb2JqZWN0cyBub3QgaW4KK3RoZSBwcmVjZWRpbmcgc2VjdGlvbnMuIAorPCEtLSBGSVhNRTogcmVmIHRvIHNvbWUgb3RoZXIgZG9jIG9uIG9iai1maWxlIGZvcm1hdHMgY291bGQgZ28gaGVyZS4gLS0+Cis8L2RsPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1yZWxvY2F0aW9uLWV4YW1wbGUtMTk5Ij48L2E+QW4gaWRlYWxpemVkIGV4YW1wbGUgb2YgdGhyZWUgcmVsb2NhdGFibGUgc2VjdGlvbnMgZm9sbG93cy4gCitUaGUgZXhhbXBsZSB1c2VzIHRoZSB0cmFkaXRpb25hbCBzZWN0aW9uIG5hbWVzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorTWVtb3J5IGFkZHJlc3NlcyBhcmUgb24gdGhlIGhvcml6b250YWwgYXhpcy4KKworPCEtLSBURVhJMlJPRkYtS0lMTCAtLT4KKzwhLS0gRU5EIFRFWEkyUk9GRi1LSUxMIC0tPgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLSstLSsKKyAgICAgcGFydGlhbCBwcm9ncmFtICMgMTogIHx0dHR0dHxkZGRkfDAwfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKy0tLS0rLS0rCisgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAgIGRhdGEgYnNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWcuICAgc2VnLiBzZWcuCisgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLSstLS0rLS0tKworICAgICBwYXJ0aWFsIHByb2dyYW0gIyAyOiAgfFRUVHxERER8MDAwfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLSstLS0rLS0tKworICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSstLS0rLS0tLS0rLS0rLS0tLSstLS0rLS0tLS0rfn4KKyAgICAgbGlua2VkIHByb2dyYW06ICAgICAgIHwgIHxUVFR8dHR0dHR8ICB8ZGRkZHxERER8MDAwMDB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0rLS0tKy0tLS0tKy0tKy0tLS0rLS0tKy0tLS0tK35+CisgICAgIAorICAgICAgICAgYWRkcmVzc2VzOiAgICAgICAgMCAuLi4KKzwvcHJlPgorICAgPCEtLSBURVhJMlJPRkYtS0lMTCAtLT4KKzwhLS0gRU5EIFRFWEkyUk9GRi1LSUxMIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGZsYWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MZmxhZ3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjFiNTEzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGZsYWdzLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGZsYWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMY29tbS5odG1sI0xjb21tIiB0aXRsZT0iTGNvbW0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMaW5lLmh0bWwjTGluZSIgdGl0bGU9IkxpbmUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMZmxhZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTGluZS5odG1sI0xpbmUiPkxpbmU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMY29tbS5odG1sI0xjb21tIj5MY29tbTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny43MCA8Y29kZT4ubGZsYWdzPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGZsYWdzXzAwN2QtZGlyZWN0aXZlLV8wMDI4aWdub3JlZF8wMDI5LTM4NCI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGFjY2VwdHMgdGhpcyBkaXJlY3RpdmUsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIKK2Fzc2VtYmxlcnMsIGJ1dCBpZ25vcmVzIGl0LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MaW5lLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MaW5lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEzMmQzYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xpbmUuaHRtbApAQCAtMCwwICsxLDcwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MaW5lIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMZmxhZ3MuaHRtbCNMZmxhZ3MiIHRpdGxlPSJMZmxhZ3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMaW5rb25jZS5odG1sI0xpbmtvbmNlIiB0aXRsZT0iTGlua29uY2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMaW5lIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxpbmtvbmNlLmh0bWwjTGlua29uY2UiPkxpbmtvbmNlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTGZsYWdzLmh0bWwjTGZsYWdzIj5MZmxhZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNzEgPGNvZGU+LmxpbmUgPC9jb2RlPjx2YXI+bGluZS1udW1iZXI8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxpbmVfMDA3ZC1kaXJlY3RpdmUtMzg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9naWNhbC1saW5lLW51bWJlci0zODYiPjwvYT5DaGFuZ2UgdGhlIGxvZ2ljYWwgbGluZSBudW1iZXIuICA8dmFyPmxpbmUtbnVtYmVyPC92YXI+IG11c3QgYmUgYW4gYWJzb2x1dGUKK2V4cHJlc3Npb24uICBUaGUgbmV4dCBsaW5lIGhhcyB0aGF0IGxvZ2ljYWwgbGluZSBudW1iZXIuICBUaGVyZWZvcmUgYW55IG90aGVyCitzdGF0ZW1lbnRzIG9uIHRoZSBjdXJyZW50IGxpbmUgKGFmdGVyIGEgc3RhdGVtZW50IHNlcGFyYXRvciBjaGFyYWN0ZXIpIGFyZQorcmVwb3J0ZWQgYXMgb24gbG9naWNhbCBsaW5lIG51bWJlciA8dmFyPmxpbmUtbnVtYmVyPC92YXI+ICZtaW51czsgMS4gIE9uZSBkYXkKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHdpbGwgbm8gbG9uZ2VyIHN1cHBvcnQgdGhpcyBkaXJlY3RpdmU6IGl0IGlzIHJlY29nbml6ZWQgb25seQorZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBhc3NlbWJsZXIgcHJvZ3JhbXMuCisKKyAgIDxwPkV2ZW4gdGhvdWdoIHRoaXMgaXMgYSBkaXJlY3RpdmUgYXNzb2NpYXRlZCB3aXRoIHRoZSA8Y29kZT5hLm91dDwvY29kZT4gb3IKKzxjb2RlPmIub3V0PC9jb2RlPiBvYmplY3QtY29kZSBmb3JtYXRzLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBzdGlsbCByZWNvZ25pemVzIGl0Cit3aGVuIHByb2R1Y2luZyBDT0ZGIG91dHB1dCwgYW5kIHRyZWF0cyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5saW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIHRob3VnaCBpdAord2VyZSB0aGUgQ09GRiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5sbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8ZW0+aWY8L2VtPiBpdCBpcyBmb3VuZCBvdXRzaWRlIGEKKzxjb2RlPi5kZWY8L2NvZGU+Lzxjb2RlPi5lbmRlZjwvY29kZT4gcGFpci4KKworICAgPHA+SW5zaWRlIGEgPGNvZGU+LmRlZjwvY29kZT4sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmxpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMsIGluc3RlYWQsIG9uZSBvZiB0aGUgZGlyZWN0aXZlcwordXNlZCBieSBjb21waWxlcnMgdG8gZ2VuZXJhdGUgYXV4aWxpYXJ5IHN5bWJvbCBpbmZvcm1hdGlvbiBmb3IKK2RlYnVnZ2luZy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGlua29uY2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xpbmtvbmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkYWU2NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xpbmtvbmNlLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGlua29uY2UgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxpbmUuaHRtbCNMaW5lIiB0aXRsZT0iTGluZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ikxpc3QuaHRtbCNMaXN0IiB0aXRsZT0iTGlzdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxpbmtvbmNlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikxpc3QuaHRtbCNMaXN0Ij5MaXN0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTGluZS5odG1sI0xpbmUiPkxpbmU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNzIgPGNvZGU+LmxpbmtvbmNlIFs8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+XTwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1DT01EQVQtMzg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsaW5rb25jZV8wMDdkLWRpcmVjdGl2ZS0zODgiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tb24tc2VjdGlvbnMtMzg5Ij48L2E+TWFyayB0aGUgY3VycmVudCBzZWN0aW9uIHNvIHRoYXQgdGhlIGxpbmtlciBvbmx5IGluY2x1ZGVzIGEgc2luZ2xlIGNvcHkgb2YgaXQuIAorVGhpcyBtYXkgYmUgdXNlZCB0byBpbmNsdWRlIHRoZSBzYW1lIHNlY3Rpb24gaW4gc2V2ZXJhbCBkaWZmZXJlbnQgb2JqZWN0IGZpbGVzLAorYnV0IGVuc3VyZSB0aGF0IHRoZSBsaW5rZXIgd2lsbCBvbmx5IGluY2x1ZGUgaXQgb25jZSBpbiB0aGUgZmluYWwgb3V0cHV0IGZpbGUuIAorVGhlIDxjb2RlPi5saW5rb25jZTwvY29kZT4gcHNldWRvLW9wIG11c3QgYmUgdXNlZCBmb3IgZWFjaCBpbnN0YW5jZSBvZiB0aGUgc2VjdGlvbi4gCitEdXBsaWNhdGUgc2VjdGlvbnMgYXJlIGRldGVjdGVkIGJhc2VkIG9uIHRoZSBzZWN0aW9uIG5hbWUsIHNvIGl0IHNob3VsZCBiZQordW5pcXVlLgorCisgICA8cD5UaGlzIGRpcmVjdGl2ZSBpcyBvbmx5IHN1cHBvcnRlZCBieSBhIGZldyBvYmplY3QgZmlsZSBmb3JtYXRzOyBhcyBvZiB0aGlzCit3cml0aW5nLCB0aGUgb25seSBvYmplY3QgZmlsZSBmb3JtYXQgd2hpY2ggc3VwcG9ydHMgaXQgaXMgdGhlIFBvcnRhYmxlCitFeGVjdXRhYmxlIGZvcm1hdCB1c2VkIG9uIFdpbmRvd3MgTlQuCisKKyAgIDxwPlRoZSA8dmFyPnR5cGU8L3Zhcj4gYXJndW1lbnQgaXMgb3B0aW9uYWwuICBJZiBzcGVjaWZpZWQsIGl0IG11c3QgYmUgb25lIG9mIHRoZQorZm9sbG93aW5nIHN0cmluZ3MuICBGb3IgZXhhbXBsZToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAubGlua29uY2Ugc2FtZV9zaXplCis8L3ByZT4KKyAgIDxwPk5vdCBhbGwgdHlwZXMgbWF5IGJlIHN1cHBvcnRlZCBvbiBhbGwgb2JqZWN0IGZpbGUgZm9ybWF0cy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+ZGlzY2FyZDwvY29kZT48ZGQ+U2lsZW50bHkgZGlzY2FyZCBkdXBsaWNhdGUgc2VjdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+b25lX29ubHk8L2NvZGU+PGRkPldhcm4gaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBzZWN0aW9ucywgYnV0IHN0aWxsIGtlZXAgb25seSBvbmUgY29weS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNhbWVfc2l6ZTwvY29kZT48ZGQ+V2FybiBpZiBhbnkgb2YgdGhlIGR1cGxpY2F0ZXMgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5zYW1lX2NvbnRlbnRzPC9jb2RlPjxkZD5XYXJuIGlmIGFueSBvZiB0aGUgZHVwbGljYXRlcyBkbyBub3QgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGNvbnRlbnRzLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xpc3QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xpc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzZhNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGlzdC5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxpc3QgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxpbmtvbmNlLmh0bWwjTGlua29uY2UiIHRpdGxlPSJMaW5rb25jZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxuLmh0bWwjTG4iIHRpdGxlPSJMbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikxpc3QiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTG4uaHRtbCNMbiI+TG48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMaW5rb25jZS5odG1sI0xpbmtvbmNlIj5MaW5rb25jZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny43MyA8Y29kZT4ubGlzdDwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxpc3RfMDA3ZC1kaXJlY3RpdmUtMzkwIj48L2E+PGEgbmFtZT0iaW5kZXgtbGlzdGluZy1jb250cm9sXzAwMmMtdHVybmluZy1vbi0zOTEiPjwvYT5Db250cm9sIChpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSA8Y29kZT4ubm9saXN0PC9jb2RlPiBkaXJlY3RpdmUpIHdoZXRoZXIgb3IKK25vdCBhc3NlbWJseSBsaXN0aW5ncyBhcmUgZ2VuZXJhdGVkLiAgVGhlc2UgdHdvIGRpcmVjdGl2ZXMgbWFpbnRhaW4gYW4KK2ludGVybmFsIGNvdW50ZXIgKHdoaWNoIGlzIHplcm8gaW5pdGlhbGx5KS4gICA8Y29kZT4ubGlzdDwvY29kZT4gaW5jcmVtZW50cyB0aGUKK2NvdW50ZXIsIGFuZCA8Y29kZT4ubm9saXN0PC9jb2RlPiBkZWNyZW1lbnRzIGl0LiAgQXNzZW1ibHkgbGlzdGluZ3MgYXJlCitnZW5lcmF0ZWQgd2hlbmV2ZXIgdGhlIGNvdW50ZXIgaXMgZ3JlYXRlciB0aGFuIHplcm8uCisKKyAgIDxwPkJ5IGRlZmF1bHQsIGxpc3RpbmdzIGFyZSBkaXNhYmxlZC4gIFdoZW4geW91IGVuYWJsZSB0aGVtICh3aXRoIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uOyBzZWUgPGEgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+Q29tbWFuZC1MaW5lIE9wdGlvbnM8L2E+KSwKK3RoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBsaXN0aW5nIGNvdW50ZXIgaXMgb25lLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MaXRlcmFsLURpcmVjdGl2ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGl0ZXJhbC1EaXJlY3RpdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzUzYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGl0ZXJhbC1EaXJlY3RpdmUuaHRtbApAQCAtMCwwICsxLDEzMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGl0ZXJhbCBEaXJlY3RpdmUgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiIHRpdGxlPSJYdGVuc2EgRGlyZWN0aXZlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRyYW5zZm9ybS1EaXJlY3RpdmUuaHRtbCNUcmFuc2Zvcm0tRGlyZWN0aXZlIiB0aXRsZT0iVHJhbnNmb3JtIERpcmVjdGl2ZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxpdGVyYWwtUG9zaXRpb24tRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1Qb3NpdGlvbi1EaXJlY3RpdmUiIHRpdGxlPSJMaXRlcmFsIFBvc2l0aW9uIERpcmVjdGl2ZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxpdGVyYWwtRGlyZWN0aXZlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxpdGVyYWwtUG9zaXRpb24tRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1Qb3NpdGlvbi1EaXJlY3RpdmUiPkxpdGVyYWwgUG9zaXRpb24gRGlyZWN0aXZlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVHJhbnNmb3JtLURpcmVjdGl2ZS5odG1sI1RyYW5zZm9ybS1EaXJlY3RpdmUiPlRyYW5zZm9ybSBEaXJlY3RpdmU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYdGVuc2EtRGlyZWN0aXZlcy5odG1sI1h0ZW5zYS1EaXJlY3RpdmVzIj5YdGVuc2EgRGlyZWN0aXZlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNTAuNS40IGxpdGVyYWw8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxpdGVyYWxfMDA3ZC1kaXJlY3RpdmUtMjMyNiI+PC9hPgorVGhlIDxjb2RlPi5saXRlcmFsPC9jb2RlPiBkaXJlY3RpdmUgaXMgdXNlZCB0byBkZWZpbmUgbGl0ZXJhbCBwb29sIGRhdGEsIGkuZS4sCityZWFkLW9ubHkgMzItYml0IGRhdGEgYWNjZXNzZWQgdmlhIDxjb2RlPkwzMlI8L2NvZGU+IGluc3RydWN0aW9ucy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAubGl0ZXJhbCA8dmFyPmxhYmVsPC92YXI+LCA8dmFyPnZhbHVlPC92YXI+WywgPHZhcj52YWx1ZTwvdmFyPi4uLl0KKzwvcHJlPgorICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgc2ltaWxhciB0byB0aGUgc3RhbmRhcmQgPGNvZGU+LndvcmQ8L2NvZGU+IGRpcmVjdGl2ZSwgZXhjZXB0Cit0aGF0IHRoZSBhY3R1YWwgbG9jYXRpb24gb2YgdGhlIGxpdGVyYWwgZGF0YSBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorYXNzZW1ibGVyIGFuZCBsaW5rZXIsIG5vdCBieSB0aGUgcG9zaXRpb24gb2YgdGhlIDxjb2RlPi5saXRlcmFsPC9jb2RlPgorZGlyZWN0aXZlLiAgVXNpbmcgdGhpcyBkaXJlY3RpdmUgZ2l2ZXMgdGhlIGFzc2VtYmxlciBmcmVlZG9tIHRvIGxvY2F0ZQordGhlIGxpdGVyYWwgZGF0YSBpbiB0aGUgbW9zdCBhcHByb3ByaWF0ZSBwbGFjZSBhbmQgcG9zc2libHkgdG8gY29tYmluZQoraWRlbnRpY2FsIGxpdGVyYWxzLiAgRm9yIGV4YW1wbGUsIHRoZSBjb2RlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIGVudHJ5IHNwLCA0MAorICAgICAgICAgLmxpdGVyYWwgLkwxLCBzeW0KKyAgICAgICAgIGwzMnIgICAgYTQsIC5MMQorPC9wcmU+CisgICA8cD5jYW4gYmUgdXNlZCB0byBsb2FkIGEgcG9pbnRlciB0byB0aGUgc3ltYm9sIDxjb2RlPnN5bTwvY29kZT4gaW50byByZWdpc3RlcgorPGNvZGU+YTQ8L2NvZGU+LiAgVGhlIHZhbHVlIG9mIDxjb2RlPnN5bTwvY29kZT4gd2lsbCBub3QgYmUgcGxhY2VkIGJldHdlZW4gdGhlCis8Y29kZT5FTlRSWTwvY29kZT4gYW5kIDxjb2RlPkwzMlI8L2NvZGU+IGluc3RydWN0aW9uczsgaW5zdGVhZCwgdGhlIGFzc2VtYmxlciBwdXRzCit0aGUgZGF0YSBpbiBhIGxpdGVyYWwgcG9vbC4KKworICAgPHA+TGl0ZXJhbCBwb29scyBhcmUgcGxhY2VkIGJ5IGRlZmF1bHQgaW4gc2VwYXJhdGUgbGl0ZXJhbCBzZWN0aW9uczsKK2hvd2V2ZXIsIHdoZW4gdXNpbmcgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29wdGlvbiAoc2VlIDxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPkNvbW1hbmQgTGluZSBPcHRpb25zPC9hPiksIHRoZSBsaXRlcmFsCitwb29scyBmb3IgUEMtcmVsYXRpdmUgbW9kZSA8Y29kZT5MMzJSPC9jb2RlPiBpbnN0cnVjdGlvbnMKK2FyZSBwbGFjZWQgaW4gdGhlIGN1cnJlbnQgc2VjdGlvbi48YSByZWw9ImZvb3Rub3RlIiBocmVmPSIjZm4tMSIgbmFtZT0iZm5kLTEiPjxzdXA+MTwvc3VwPjwvYT4KK1RoZXNlIHRleHQgc2VjdGlvbiBsaXRlcmFsCitwb29scyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJlZm9yZSA8Y29kZT5FTlRSWTwvY29kZT4gaW5zdHJ1Y3Rpb25zIGFuZAorbWFudWFsbHkgYWZ0ZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubGl0ZXJhbF9wb3NpdGlvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmVzIChzZWUgPGEgaHJlZj0iTGl0ZXJhbC1Qb3NpdGlvbi1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZSI+bGl0ZXJhbF9wb3NpdGlvbjwvYT4pLiAgSWYgdGhlcmUgYXJlIG5vIHByZWNlZGluZworPGNvZGU+RU5UUlk8L2NvZGU+IGluc3RydWN0aW9ucywgZXhwbGljaXQgPGNvZGU+LmxpdGVyYWxfcG9zaXRpb248L2NvZGU+IGRpcmVjdGl2ZXMKK211c3QgYmUgdXNlZCB0byBwbGFjZSB0aGUgdGV4dCBzZWN0aW9uIGxpdGVyYWwgcG9vbHM7IG90aGVyd2lzZSwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHdpbGwgcmVwb3J0IGFuIGVycm9yLgorCisgICA8cD5XaGVuIGxpdGVyYWxzIGFyZSBwbGFjZWQgaW4gc2VwYXJhdGUgc2VjdGlvbnMsIHRoZSBsaXRlcmFsIHNlY3Rpb24gbmFtZXMKK2FyZSBkZXJpdmVkIGZyb20gdGhlIG5hbWVzIG9mIHRoZSBzZWN0aW9ucyB3aGVyZSB0aGUgbGl0ZXJhbHMgYXJlCitkZWZpbmVkLiAgVGhlIGJhc2UgbGl0ZXJhbCBzZWN0aW9uIG5hbWVzIGFyZSA8Y29kZT4ubGl0ZXJhbDwvY29kZT4gZm9yCitQQy1yZWxhdGl2ZSBtb2RlIDxjb2RlPkwzMlI8L2NvZGU+IGluc3RydWN0aW9ucyBhbmQgPGNvZGU+LmxpdDQ8L2NvZGU+IGZvciBhYnNvbHV0ZQorbW9kZSA8Y29kZT5MMzJSPC9jb2RlPiBpbnN0cnVjdGlvbnMgKHNlZSA8YSBocmVmPSJBYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUuaHRtbCNBYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUiPmFic29sdXRlLWxpdGVyYWxzPC9hPikuICBUaGVzZSBiYXNlIG5hbWVzIGFyZSB1c2VkIGZvciBsaXRlcmFscyBkZWZpbmVkIGluCit0aGUgZGVmYXVsdCA8Y29kZT4udGV4dDwvY29kZT4gc2VjdGlvbi4gIEZvciBsaXRlcmFscyBkZWZpbmVkIGluIG90aGVyCitzZWN0aW9ucyBvciB3aXRoaW4gdGhlIHNjb3BlIG9mIGEgPGNvZGU+bGl0ZXJhbF9wcmVmaXg8L2NvZGU+IGRpcmVjdGl2ZQorKHNlZSA8YSBocmVmPSJMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUiPmxpdGVyYWxfcHJlZml4PC9hPiksIHRoZSBmb2xsb3dpbmcgcnVsZXMKK2RldGVybWluZSB0aGUgbGl0ZXJhbCBzZWN0aW9uIG5hbWU6CisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPklmIHRoZSBjdXJyZW50IHNlY3Rpb24gaXMgYSBtZW1iZXIgb2YgYSBzZWN0aW9uIGdyb3VwLCB0aGUgbGl0ZXJhbAorc2VjdGlvbiBuYW1lIGluY2x1ZGVzIHRoZSBncm91cCBuYW1lIGFzIGEgc3VmZml4IHRvIHRoZSBiYXNlCis8Y29kZT4ubGl0ZXJhbDwvY29kZT4gb3IgPGNvZGU+LmxpdDQ8L2NvZGU+IG5hbWUsIHdpdGggYSBwZXJpb2QgdG8gc2VwYXJhdGUgdGhlIGJhc2UKK25hbWUgYW5kIGdyb3VwIG5hbWUuICBUaGUgbGl0ZXJhbCBzZWN0aW9uIGlzIGFsc28gbWFkZSBhIG1lbWJlciBvZiB0aGUKK2dyb3VwLgorCisgICAgIDxsaT5JZiB0aGUgY3VycmVudCBzZWN0aW9uIG5hbWUgKG9yIDxjb2RlPmxpdGVyYWxfcHJlZml4PC9jb2RlPiB2YWx1ZSkgYmVnaW5zIHdpdGgKKyZsZHF1bzs8Y29kZT4uZ251LmxpbmtvbmNlLjwvY29kZT48dmFyPmtpbmQ8L3Zhcj48Y29kZT4uPC9jb2RlPiZyZHF1bzssIHRoZSBsaXRlcmFsIHNlY3Rpb24gbmFtZSBpcyBmb3JtZWQKK2J5IHJlcGxhY2luZyAmbGRxdW87PGNvZGU+LjwvY29kZT48dmFyPmtpbmQ8L3Zhcj4mcmRxdW87IHdpdGggdGhlIGJhc2UgPGNvZGU+LmxpdGVyYWw8L2NvZGU+IG9yCis8Y29kZT4ubGl0NDwvY29kZT4gbmFtZS4gIEZvciBleGFtcGxlLCBmb3IgbGl0ZXJhbHMgZGVmaW5lZCBpbiBhIHNlY3Rpb24gbmFtZWQKKzxjb2RlPi5nbnUubGlua29uY2UudC5mdW5jPC9jb2RlPiwgdGhlIGxpdGVyYWwgc2VjdGlvbiB3aWxsIGJlCis8Y29kZT4uZ251LmxpbmtvbmNlLmxpdGVyYWwuZnVuYzwvY29kZT4gb3IgPGNvZGU+LmdudS5saW5rb25jZS5saXQ0LmZ1bmM8L2NvZGU+LgorCisgICAgIDxsaT5JZiB0aGUgY3VycmVudCBzZWN0aW9uIG5hbWUgKG9yIDxjb2RlPmxpdGVyYWxfcHJlZml4PC9jb2RlPiB2YWx1ZSkgZW5kcyB3aXRoCis8Y29kZT4udGV4dDwvY29kZT4sIHRoZSBsaXRlcmFsIHNlY3Rpb24gbmFtZSBpcyBmb3JtZWQgYnkgcmVwbGFjaW5nIHRoYXQKK3N1ZmZpeCB3aXRoIHRoZSBiYXNlIDxjb2RlPi5saXRlcmFsPC9jb2RlPiBvciA8Y29kZT4ubGl0NDwvY29kZT4gbmFtZS4gIEZvciBleGFtcGxlLAorZm9yIGxpdGVyYWxzIGRlZmluZWQgaW4gYSBzZWN0aW9uIG5hbWVkIDxjb2RlPi5pcmFtMC50ZXh0PC9jb2RlPiwgdGhlIGxpdGVyYWwKK3NlY3Rpb24gd2lsbCBiZSA8Y29kZT4uaXJhbTAubGl0ZXJhbDwvY29kZT4gb3IgPGNvZGU+LmlyYW0wLmxpdDQ8L2NvZGU+LgorCisgICAgIDxsaT5JZiBub25lIG9mIHRoZSBwcmVjZWRpbmcgY29uZGl0aW9ucyBhcHBseSwgdGhlIGxpdGVyYWwgc2VjdGlvbiBuYW1lIGlzCitmb3JtZWQgYnkgYWRkaW5nIHRoZSBiYXNlIDxjb2RlPi5saXRlcmFsPC9jb2RlPiBvciA8Y29kZT4ubGl0NDwvY29kZT4gbmFtZSBhcyBhCitzdWZmaXggdG8gdGhlIGN1cnJlbnQgc2VjdGlvbiBuYW1lIChvciA8Y29kZT5saXRlcmFsX3ByZWZpeDwvY29kZT4gdmFsdWUpLgorICAgICAgICA8L29sPgorCisgICA8ZGl2IGNsYXNzPSJmb290bm90ZSI+Cis8aHI+Cis8aDQ+Rm9vdG5vdGVzPC9oND48cCBjbGFzcz0iZm9vdG5vdGUiPjxzbWFsbD5bPGEgbmFtZT0iZm4tMSIgaHJlZj0iI2ZuZC0xIj4xPC9hPl08L3NtYWxsPiBMaXRlcmFscyBmb3IgdGhlCis8Y29kZT4uaW5pdDwvY29kZT4gYW5kIDxjb2RlPi5maW5pPC9jb2RlPiBzZWN0aW9ucyBhcmUgYWx3YXlzIHBsYWNlZCBpbiBzZXBhcmF0ZQorc2VjdGlvbnMsIGV2ZW4gd2hlbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tdGV4dC1zZWN0aW9uLWxpdGVyYWxzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGVuYWJsZWQuPC9wPgorCisgICA8aHI+PC9kaXY+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xpdGVyYWwtUG9zaXRpb24tRGlyZWN0aXZlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZGRmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZS5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxpdGVyYWwgUG9zaXRpb24gRGlyZWN0aXZlIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYdGVuc2EtRGlyZWN0aXZlcy5odG1sI1h0ZW5zYS1EaXJlY3RpdmVzIiB0aXRsZT0iWHRlbnNhIERpcmVjdGl2ZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMaXRlcmFsLURpcmVjdGl2ZS5odG1sI0xpdGVyYWwtRGlyZWN0aXZlIiB0aXRsZT0iTGl0ZXJhbCBEaXJlY3RpdmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUiIHRpdGxlPSJMaXRlcmFsIFByZWZpeCBEaXJlY3RpdmUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUiPkxpdGVyYWwgUHJlZml4IERpcmVjdGl2ZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxpdGVyYWwtRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1EaXJlY3RpdmUiPkxpdGVyYWwgRGlyZWN0aXZlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWHRlbnNhLURpcmVjdGl2ZXMuaHRtbCNYdGVuc2EtRGlyZWN0aXZlcyI+WHRlbnNhIERpcmVjdGl2ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjUwLjUuNSBsaXRlcmFsX3Bvc2l0aW9uPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsaXRlcmFsXzAwNWZwb3NpdGlvbl8wMDdkLWRpcmVjdGl2ZS0yMzI3Ij48L2E+CitXaGVuIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gcGxhY2UgbGl0ZXJhbHMgaW5saW5lCitpbiB0aGUgc2VjdGlvbiBiZWluZyBhc3NlbWJsZWQsIHRoZSA8Y29kZT4ubGl0ZXJhbF9wb3NpdGlvbjwvY29kZT4gZGlyZWN0aXZlCitjYW4gYmUgdXNlZCB0byBtYXJrIGEgcG90ZW50aWFsIGxvY2F0aW9uIGZvciBhIGxpdGVyYWwgcG9vbC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAubGl0ZXJhbF9wb3NpdGlvbgorPC9wcmU+CisgICA8cD5UaGUgPGNvZGU+LmxpdGVyYWxfcG9zaXRpb248L2NvZGU+IGRpcmVjdGl2ZSBpcyBpZ25vcmVkIHdoZW4gdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tdGV4dC1zZWN0aW9uLWxpdGVyYWxzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcyBub3QgdXNlZCBvciB3aGVuCis8Y29kZT5MMzJSPC9jb2RlPiBpbnN0cnVjdGlvbnMgdXNlIHRoZSBhYnNvbHV0ZSBhZGRyZXNzaW5nIG1vZGUuCisKKyAgIDxwPlRoZSBhc3NlbWJsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHBsYWNlIHRleHQgc2VjdGlvbiBsaXRlcmFsIHBvb2xzCitiZWZvcmUgPGNvZGU+RU5UUlk8L2NvZGU+IGluc3RydWN0aW9ucywgc28gdGhlIDxjb2RlPi5saXRlcmFsX3Bvc2l0aW9uPC9jb2RlPgorZGlyZWN0aXZlIGlzIG9ubHkgbmVlZGVkIHRvIHNwZWNpZnkgc29tZSBvdGhlciBsb2NhdGlvbiBmb3IgYSBsaXRlcmFsCitwb29sLiAgWW91IG1heSBuZWVkIHRvIGFkZCBhbiBleHBsaWNpdCBqdW1wIGluc3RydWN0aW9uIHRvIHNraXAgb3ZlciBhbgoraW5saW5lIGxpdGVyYWwgcG9vbC4KKworICAgPHA+Rm9yIGV4YW1wbGUsIGFuIGludGVycnVwdCB2ZWN0b3IgZG9lcyBub3QgYmVnaW4gd2l0aCBhbiA8Y29kZT5FTlRSWTwvY29kZT4KK2luc3RydWN0aW9uIHNvIHRoZSBhc3NlbWJsZXIgd2lsbCBiZSB1bmFibGUgdG8gYXV0b21hdGljYWxseSBmaW5kIGEgZ29vZAorcGxhY2UgdG8gcHV0IGEgbGl0ZXJhbCBwb29sLiAgTW9yZW92ZXIsIHRoZSBjb2RlIGZvciB0aGUgaW50ZXJydXB0Cit2ZWN0b3IgbXVzdCBiZSBhdCBhIHNwZWNpZmljIHN0YXJ0aW5nIGFkZHJlc3MsIHNvIHRoZSBsaXRlcmFsIHBvb2wKK2Nhbm5vdCBjb21lIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGNvZGUuICBUaGUgbGl0ZXJhbCBwb29sIGZvciB0aGUKK3ZlY3RvciBtdXN0IGJlIGV4cGxpY2l0bHkgcG9zaXRpb25lZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB2ZWN0b3IgKGJlZm9yZQorYW55IHVzZXMgb2YgdGhlIGxpdGVyYWxzLCBkdWUgdG8gdGhlIG5lZ2F0aXZlIG9mZnNldHMgdXNlZCBieQorUEMtcmVsYXRpdmUgPGNvZGU+TDMyUjwvY29kZT4gaW5zdHJ1Y3Rpb25zKS4gIFRoZSA8Y29kZT4ubGl0ZXJhbF9wb3NpdGlvbjwvY29kZT4KK2RpcmVjdGl2ZSBjYW4gYmUgdXNlZCB0byBkbyB0aGlzLiAgSW4gdGhlIGZvbGxvd2luZyBjb2RlLCB0aGUgbGl0ZXJhbAorZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWxpZ25lZCBjb3JyZWN0bHkgYW5kIGlzIHBsYWNlZCBhZnRlcgordGhlIHVuY29uZGl0aW9uYWwganVtcC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAuZ2xvYmFsIE0KKyAgICAgY29kZV9zdGFydDoKKyAgICAgICAgIGogY29udGludWUKKyAgICAgICAgIC5saXRlcmFsX3Bvc2l0aW9uCisgICAgICAgICAuYWxpZ24gNAorICAgICBjb250aW51ZToKKyAgICAgICAgIG1vdmkgICAgYTQsIE0KKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGl0ZXJhbC1QcmVmaXgtRGlyZWN0aXZlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9MaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDUzNmY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTGl0ZXJhbC1QcmVmaXgtRGlyZWN0aXZlLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGl0ZXJhbCBQcmVmaXggRGlyZWN0aXZlIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYdGVuc2EtRGlyZWN0aXZlcy5odG1sI1h0ZW5zYS1EaXJlY3RpdmVzIiB0aXRsZT0iWHRlbnNhIERpcmVjdGl2ZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZS5odG1sI0xpdGVyYWwtUG9zaXRpb24tRGlyZWN0aXZlIiB0aXRsZT0iTGl0ZXJhbCBQb3NpdGlvbiBEaXJlY3RpdmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUuaHRtbCNBYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUiIHRpdGxlPSJBYnNvbHV0ZSBMaXRlcmFscyBEaXJlY3RpdmUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQWJzb2x1dGUtTGl0ZXJhbHMtRGlyZWN0aXZlLmh0bWwjQWJzb2x1dGUtTGl0ZXJhbHMtRGlyZWN0aXZlIj5BYnNvbHV0ZSBMaXRlcmFscyBEaXJlY3RpdmU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZS5odG1sI0xpdGVyYWwtUG9zaXRpb24tRGlyZWN0aXZlIj5MaXRlcmFsIFBvc2l0aW9uIERpcmVjdGl2ZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiPlh0ZW5zYSBEaXJlY3RpdmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41MC41LjYgbGl0ZXJhbF9wcmVmaXg8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxpdGVyYWxfMDA1ZnByZWZpeF8wMDdkLWRpcmVjdGl2ZS0yMzI4Ij48L2E+CitUaGUgPGNvZGU+bGl0ZXJhbF9wcmVmaXg8L2NvZGU+IGRpcmVjdGl2ZSBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CitsaXRlcmFsIHNlY3Rpb24gbmFtZXMsIHdoaWNoIGFyZSBkZXJpdmVkIGZyb20gdGhlIG5hbWVzIG9mIHRoZSBzZWN0aW9ucword2hlcmUgdGhlIGxpdGVyYWxzIGFyZSBkZWZpbmVkLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIC5iZWdpbiBsaXRlcmFsX3ByZWZpeCBbPHZhcj5uYW1lPC92YXI+XQorICAgICAgICAgLmVuZCBsaXRlcmFsX3ByZWZpeAorPC9wcmU+CisgICA8cD5Gb3IgbGl0ZXJhbHMgZGVmaW5lZCB3aXRoaW4gdGhlIGRlbGltaXRlZCByZWdpb24sIHRoZSBsaXRlcmFsIHNlY3Rpb24KK25hbWVzIGFyZSBkZXJpdmVkIGZyb20gdGhlIDx2YXI+bmFtZTwvdmFyPiBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSBuYW1lIG9mCit0aGUgY3VycmVudCBzZWN0aW9uLiAgVGhlIHJ1bGVzIHVzZWQgdG8gZGVyaXZlIHRoZSBsaXRlcmFsIHNlY3Rpb24gbmFtZXMKK2RvIG5vdCBjaGFuZ2UuICBTZWUgPGEgaHJlZj0iTGl0ZXJhbC1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLURpcmVjdGl2ZSI+bGl0ZXJhbDwvYT4uICBJZiB0aGUgPHZhcj5uYW1lPC92YXI+Cithcmd1bWVudCBpcyBvbWl0dGVkLCB0aGUgbGl0ZXJhbCBzZWN0aW9ucyByZXZlcnQgdG8gdGhlIGRlZmF1bHRzLiAgVGhpcworZGlyZWN0aXZlIGhhcyBubyBlZmZlY3Qgd2hlbiB1c2luZyB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIChzZWUgPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+Q29tbWFuZCBMaW5lIE9wdGlvbnM8L2E+KS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTG4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwYTFhYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xuLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TG4gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikxpc3QuaHRtbCNMaXN0IiB0aXRsZT0iTGlzdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxvYy5odG1sI0xvYyIgdGl0bGU9IkxvYyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxuIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxvYy5odG1sI0xvYyI+TG9jPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTGlzdC5odG1sI0xpc3QiPkxpc3Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNzQgPGNvZGU+LmxuIDwvY29kZT48dmFyPmxpbmUtbnVtYmVyPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsbl8wMDdkLWRpcmVjdGl2ZS0zOTIiPjwvYT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5sbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBhIHN5bm9ueW0gZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmxpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xvYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTG9jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyOGZiYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xvYy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxvYyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTG4uaHRtbCNMbiIgdGl0bGU9IkxuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTG9jXzAwNWZtYXJrXzAwNWZsYWJlbHMuaHRtbCNMb2NfMDA1Zm1hcmtfMDA1ZmxhYmVscyIgdGl0bGU9IkxvY19tYXJrX2xhYmVscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxvYyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMb2NfMDA1Zm1hcmtfMDA1ZmxhYmVscy5odG1sI0xvY18wMDVmbWFya18wMDVmbGFiZWxzIj5Mb2NfbWFya19sYWJlbHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMbi5odG1sI0xuIj5MbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny43NSA8Y29kZT4ubG9jIDwvY29kZT48dmFyPmZpbGVubzwvdmFyPiA8dmFyPmxpbmVubzwvdmFyPjxjb2RlPiBbPC9jb2RlPjx2YXI+Y29sdW1uPC92YXI+PGNvZGU+XSBbPC9jb2RlPjx2YXI+b3B0aW9uczwvdmFyPjxjb2RlPl08L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb2NfMDA3ZC1kaXJlY3RpdmUtMzkzIj48L2E+V2hlbiBlbWl0dGluZyBEV0FSRjIgbGluZSBudW1iZXIgaW5mb3JtYXRpb24sCit0aGUgPGNvZGU+LmxvYzwvY29kZT4gZGlyZWN0aXZlIHdpbGwgYWRkIGEgcm93IHRvIHRoZSA8Y29kZT4uZGVidWdfbGluZTwvY29kZT4gbGluZQorbnVtYmVyIG1hdHJpeCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYXNzZW1ibHkKK2luc3RydWN0aW9uLiAgVGhlIDx2YXI+ZmlsZW5vPC92YXI+LCA8dmFyPmxpbmVubzwvdmFyPiwgYW5kIG9wdGlvbmFsIDx2YXI+Y29sdW1uPC92YXI+Cithcmd1bWVudHMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSA8Y29kZT4uZGVidWdfbGluZTwvY29kZT4gc3RhdGUgbWFjaGluZSBiZWZvcmUKK3RoZSByb3cgaXMgYWRkZWQuCisKKyAgIDxwPlRoZSA8dmFyPm9wdGlvbnM8L3Zhcj4gYXJlIGEgc2VxdWVuY2Ugb2YgdGhlIGZvbGxvd2luZyB0b2tlbnMgaW4gYW55IG9yZGVyOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5iYXNpY19ibG9jazwvY29kZT48ZGQ+VGhpcyBvcHRpb24gd2lsbCBzZXQgdGhlIDxjb2RlPmJhc2ljX2Jsb2NrPC9jb2RlPiByZWdpc3RlciBpbiB0aGUKKzxjb2RlPi5kZWJ1Z19saW5lPC9jb2RlPiBzdGF0ZSBtYWNoaW5lIHRvIDxjb2RlPnRydWU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+cHJvbG9ndWVfZW5kPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiB3aWxsIHNldCB0aGUgPGNvZGU+cHJvbG9ndWVfZW5kPC9jb2RlPiByZWdpc3RlciBpbiB0aGUKKzxjb2RlPi5kZWJ1Z19saW5lPC9jb2RlPiBzdGF0ZSBtYWNoaW5lIHRvIDxjb2RlPnRydWU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZXBpbG9ndWVfYmVnaW48L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHdpbGwgc2V0IHRoZSA8Y29kZT5lcGlsb2d1ZV9iZWdpbjwvY29kZT4gcmVnaXN0ZXIgaW4gdGhlCis8Y29kZT4uZGVidWdfbGluZTwvY29kZT4gc3RhdGUgbWFjaGluZSB0byA8Y29kZT50cnVlPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmlzX3N0bXQgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gd2lsbCBzZXQgdGhlIDxjb2RlPmlzX3N0bXQ8L2NvZGU+IHJlZ2lzdGVyIGluIHRoZQorPGNvZGU+LmRlYnVnX2xpbmU8L2NvZGU+IHN0YXRlIG1hY2hpbmUgdG8gPGNvZGU+dmFsdWU8L2NvZGU+LCB3aGljaCBtdXN0IGJlCitlaXRoZXIgMCBvciAxLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aXNhIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGRkPlRoaXMgZGlyZWN0aXZlIHdpbGwgc2V0IHRoZSA8Y29kZT5pc2E8L2NvZGU+IHJlZ2lzdGVyIGluIHRoZSA8Y29kZT4uZGVidWdfbGluZTwvY29kZT4KK3N0YXRlIG1hY2hpbmUgdG8gPHZhcj52YWx1ZTwvdmFyPiwgd2hpY2ggbXVzdCBiZSBhbiB1bnNpZ25lZCBpbnRlZ2VyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZGlzY3JpbWluYXRvciA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxkZD5UaGlzIGRpcmVjdGl2ZSB3aWxsIHNldCB0aGUgPGNvZGU+ZGlzY3JpbWluYXRvcjwvY29kZT4gcmVnaXN0ZXIgaW4gdGhlIDxjb2RlPi5kZWJ1Z19saW5lPC9jb2RlPgorc3RhdGUgbWFjaGluZSB0byA8dmFyPnZhbHVlPC92YXI+LCB3aGljaCBtdXN0IGJlIGFuIHVuc2lnbmVkIGludGVnZXIuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xvY18wMDVmbWFya18wMDVmbGFiZWxzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Mb2NfMDA1Zm1hcmtfMDA1ZmxhYmVscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYWZjODMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Mb2NfMDA1Zm1hcmtfMDA1ZmxhYmVscy5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxvY19tYXJrX2xhYmVscyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTG9jLmh0bWwjTG9jIiB0aXRsZT0iTG9jIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTG9jYWwuaHRtbCNMb2NhbCIgdGl0bGU9IkxvY2FsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTG9jX21hcmtfbGFiZWxzIj48L2E+Cis8YSBuYW1lPSJMb2NfMDA1Zm1hcmtfMDA1ZmxhYmVscyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMb2NhbC5odG1sI0xvY2FsIj5Mb2NhbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxvYy5odG1sI0xvYyI+TG9jPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43Ljc2IDxjb2RlPi5sb2NfbWFya19sYWJlbHMgPC9jb2RlPjx2YXI+ZW5hYmxlPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb2NfMDA1Zm1hcmtfMDA1ZmxhYmVsc18wMDdkLWRpcmVjdGl2ZS0zOTQiPjwvYT5XaGVuIGVtaXR0aW5nIERXQVJGMiBsaW5lIG51bWJlciBpbmZvcm1hdGlvbiwKK3RoZSA8Y29kZT4ubG9jX21hcmtfbGFiZWxzPC9jb2RlPiBkaXJlY3RpdmUgbWFrZXMgdGhlIGFzc2VtYmxlciBlbWl0IGFuIGVudHJ5Cit0byB0aGUgPGNvZGU+LmRlYnVnX2xpbmU8L2NvZGU+IGxpbmUgbnVtYmVyIG1hdHJpeCB3aXRoIHRoZSA8Y29kZT5iYXNpY19ibG9jazwvY29kZT4KK3JlZ2lzdGVyIGluIHRoZSBzdGF0ZSBtYWNoaW5lIHNldCB3aGVuZXZlciBhIGNvZGUgbGFiZWwgaXMgc2Vlbi4gCitUaGUgPHZhcj5lbmFibGU8L3Zhcj4gYXJndW1lbnQgc2hvdWxkIGJlIGVpdGhlciAxIG9yIDAsIHRvIGVuYWJsZSBvciBkaXNhYmxlCit0aGlzIGZ1bmN0aW9uIHJlc3BlY3RpdmVseS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTG9jYWwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xvY2FsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2NzI4MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xvY2FsLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TG9jYWwgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxvY18wMDVmbWFya18wMDVmbGFiZWxzLmh0bWwjTG9jXzAwNWZtYXJrXzAwNWZsYWJlbHMiIHRpdGxlPSJMb2NfbWFya19sYWJlbHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMb25nLmh0bWwjTG9uZyIgdGl0bGU9IkxvbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMb2NhbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMb25nLmh0bWwjTG9uZyI+TG9uZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxvY18wMDVmbWFya18wMDVmbGFiZWxzLmh0bWwjTG9jXzAwNWZtYXJrXzAwNWZsYWJlbHMiPkxvY19tYXJrX2xhYmVsczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny43NyA8Y29kZT4ubG9jYWwgPC9jb2RlPjx2YXI+bmFtZXM8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvY2FsXzAwN2QtZGlyZWN0aXZlLTM5NSI+PC9hPlRoaXMgZGlyZWN0aXZlLCB3aGljaCBpcyBhdmFpbGFibGUgZm9yIEVMRiB0YXJnZXRzLCBtYXJrcyBlYWNoIHN5bWJvbCBpbgordGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIDxjb2RlPm5hbWVzPC9jb2RlPiBhcyBhIGxvY2FsIHN5bWJvbCBzbyB0aGF0IGl0Cit3aWxsIG5vdCBiZSBleHRlcm5hbGx5IHZpc2libGUuICBJZiB0aGUgc3ltYm9scyBkbyBub3QgYWxyZWFkeSBleGlzdCwKK3RoZXkgd2lsbCBiZSBjcmVhdGVkLgorCisgICA8cD5Gb3IgdGFyZ2V0cyB3aGVyZSB0aGUgPGNvZGU+Lmxjb21tPC9jb2RlPiBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJMY29tbS5odG1sI0xjb21tIj5MY29tbTwvYT4pIGRvZXMgbm90CithY2NlcHQgYW4gYWxpZ25tZW50IGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgY2FzZSBmb3IgbW9zdCBFTEYgdGFyZ2V0cywKK3RoZSA8Y29kZT4ubG9jYWw8L2NvZGU+IGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIDxjb2RlPi5jb21tPC9jb2RlPgorKHNlZSA8YSBocmVmPSJDb21tLmh0bWwjQ29tbSI+Q29tbTwvYT4pIHRvIGRlZmluZSBhbGlnbmVkIGxvY2FsIGNvbW1vbiBkYXRhLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Mb25nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Mb25nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2NWYyNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL0xvbmcuaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Mb25nIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMb2NhbC5odG1sI0xvY2FsIiB0aXRsZT0iTG9jYWwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNYWNyby5odG1sI01hY3JvIiB0aXRsZT0iTWFjcm8iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMb25nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1hY3JvLmh0bWwjTWFjcm8iPk1hY3JvPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTG9jYWwuaHRtbCNMb2NhbCI+TG9jYWw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNzggPGNvZGU+LmxvbmcgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdfMDA3ZC1kaXJlY3RpdmUtMzk2Ij48L2E+PGNvZGU+Lmxvbmc8L2NvZGU+IGlzIHRoZSBzYW1lIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmludDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFNlZSA8YSBocmVmPSJJbnQuaHRtbCNJbnQiPjxjb2RlPi5pbnQ8L2NvZGU+PC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTG9uZ2NhbGxzLURpcmVjdGl2ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTG9uZ2NhbGxzLURpcmVjdGl2ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NTY5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Mb25nY2FsbHMtRGlyZWN0aXZlLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TG9uZ2NhbGxzIERpcmVjdGl2ZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWHRlbnNhLURpcmVjdGl2ZXMuaHRtbCNYdGVuc2EtRGlyZWN0aXZlcyIgdGl0bGU9Ilh0ZW5zYSBEaXJlY3RpdmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2NoZWR1bGUtRGlyZWN0aXZlLmh0bWwjU2NoZWR1bGUtRGlyZWN0aXZlIiB0aXRsZT0iU2NoZWR1bGUgRGlyZWN0aXZlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVHJhbnNmb3JtLURpcmVjdGl2ZS5odG1sI1RyYW5zZm9ybS1EaXJlY3RpdmUiIHRpdGxlPSJUcmFuc2Zvcm0gRGlyZWN0aXZlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTG9uZ2NhbGxzLURpcmVjdGl2ZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUcmFuc2Zvcm0tRGlyZWN0aXZlLmh0bWwjVHJhbnNmb3JtLURpcmVjdGl2ZSI+VHJhbnNmb3JtIERpcmVjdGl2ZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNjaGVkdWxlLURpcmVjdGl2ZS5odG1sI1NjaGVkdWxlLURpcmVjdGl2ZSI+U2NoZWR1bGUgRGlyZWN0aXZlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWHRlbnNhLURpcmVjdGl2ZXMuaHRtbCNYdGVuc2EtRGlyZWN0aXZlcyI+WHRlbnNhIERpcmVjdGl2ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjUwLjUuMiBsb25nY2FsbHM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdjYWxsc18wMDdkLWRpcmVjdGl2ZS0yMzIyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub18wMDJkbG9uZ2NhbGxzXzAwN2QtZGlyZWN0aXZlLTIzMjMiPjwvYT4KK1RoZSA8Y29kZT5sb25nY2FsbHM8L2NvZGU+IGRpcmVjdGl2ZSBlbmFibGVzIG9yIGRpc2FibGVzIGZ1bmN0aW9uIGNhbGwKK3JlbGF4YXRpb24uICBTZWUgPGEgaHJlZj0iWHRlbnNhLUNhbGwtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1DYWxsLVJlbGF4YXRpb24iPkZ1bmN0aW9uIENhbGwgUmVsYXhhdGlvbjwvYT4uCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgLmJlZ2luIFtuby1dbG9uZ2NhbGxzCisgICAgICAgICAuZW5kIFtuby1dbG9uZ2NhbGxzCis8L3ByZT4KKyAgIDxwPkNhbGwgcmVsYXhhdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IHVubGVzcyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWxvbmdjYWxsczwvc3Bhbj48L3NhbXA+JnJzcXVvOworY29tbWFuZC1saW5lIG9wdGlvbiBpcyBzcGVjaWZpZWQuICBUaGUgPGNvZGU+bG9uZ2NhbGxzPC9jb2RlPiBkaXJlY3RpdmUKK292ZXJyaWRlcyB0aGUgZGVmYXVsdCBkZXRlcm1pbmVkIGJ5IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmYwNzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NLmh0bWwKQEAgLTAsMCArMSwxNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk0gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imxpc3RpbmcuaHRtbCNsaXN0aW5nIiB0aXRsZT0ibGlzdGluZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1ELmh0bWwjTUQiIHRpdGxlPSJNRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik0iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUQuaHRtbCNNRCI+TUQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJsaXN0aW5nLmh0bWwjbGlzdGluZyI+bGlzdGluZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi45IEFzc2VtYmxlIGluIE1SSSBDb21wYXRpYmlsaXR5IE1vZGU6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NPC9zcGFuPjwvc2FtcD48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZE0tNzkiPjwvYT48YSBuYW1lPSJpbmRleC1NUkktY29tcGF0aWJpbGl0eS1tb2RlLTgwIj48L2E+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1tcmk8L3NwYW4+PC9zYW1wPiBvcHRpb24gc2VsZWN0cyBNUkkgY29tcGF0aWJpbGl0eSBtb2RlLiAgVGhpcworY2hhbmdlcyB0aGUgc3ludGF4IGFuZCBwc2V1ZG8tb3AgaGFuZGxpbmcgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gdG8gbWFrZSBpdAorY29tcGF0aWJsZSB3aXRoIHRoZSA8Y29kZT5BU002OEs8L2NvZGU+IG9yIHRoZSA8Y29kZT5BU005NjA8L2NvZGU+IChkZXBlbmRpbmcgdXBvbiB0aGUKK2NvbmZpZ3VyZWQgdGFyZ2V0KSBhc3NlbWJsZXIgZnJvbSBNaWNyb3RlYyBSZXNlYXJjaC4gIFRoZSBleGFjdCBuYXR1cmUgb2YgdGhlCitNUkkgc3ludGF4IHdpbGwgbm90IGJlIGRvY3VtZW50ZWQgaGVyZTsgc2VlIHRoZSBNUkkgbWFudWFscyBmb3IgbW9yZQoraW5mb3JtYXRpb24uICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCB0aGUgaGFuZGxpbmcgb2YgbWFjcm9zIGFuZCBtYWNybworYXJndW1lbnRzIGlzIHNvbWV3aGF0IGRpZmZlcmVudC4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIHBlcm1pdAorYXNzZW1ibGluZyBleGlzdGluZyBNUkkgYXNzZW1ibGVyIGNvZGUgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPlRoZSBNUkkgY29tcGF0aWJpbGl0eSBpcyBub3QgY29tcGxldGUuICBDZXJ0YWluIG9wZXJhdGlvbnMgb2YgdGhlIE1SSSBhc3NlbWJsZXIKK2RlcGVuZCB1cG9uIGl0cyBvYmplY3QgZmlsZSBmb3JtYXQsIGFuZCBjYW4gbm90IGJlIHN1cHBvcnRlZCB1c2luZyBvdGhlciBvYmplY3QKK2ZpbGUgZm9ybWF0cy4gIFN1cHBvcnRpbmcgdGhlc2Ugd291bGQgcmVxdWlyZSBlbmhhbmNpbmcgZWFjaCBvYmplY3QgZmlsZSBmb3JtYXQKK2luZGl2aWR1YWxseS4gIFRoZXNlIGFyZToKKworICAgICA8dWw+Cis8bGk+Z2xvYmFsIHN5bWJvbHMgaW4gY29tbW9uIHNlY3Rpb24KKworICAgICA8cD5UaGUgbTY4ayBNUkkgYXNzZW1ibGVyIHN1cHBvcnRzIGNvbW1vbiBzZWN0aW9ucyB3aGljaCBhcmUgbWVyZ2VkIGJ5IHRoZSBsaW5rZXIuIAorT3RoZXIgb2JqZWN0IGZpbGUgZm9ybWF0cyBkbyBub3Qgc3VwcG9ydCB0aGlzLiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaGFuZGxlcworY29tbW9uIHNlY3Rpb25zIGJ5IHRyZWF0aW5nIHRoZW0gYXMgYSBzaW5nbGUgY29tbW9uIHN5bWJvbC4gIEl0IHBlcm1pdHMgbG9jYWwKK3N5bWJvbHMgdG8gYmUgZGVmaW5lZCB3aXRoaW4gYSBjb21tb24gc2VjdGlvbiwgYnV0IGl0IGNhbiBub3Qgc3VwcG9ydCBnbG9iYWwKK3N5bWJvbHMsIHNpbmNlIGl0IGhhcyBubyB3YXkgdG8gZGVzY3JpYmUgdGhlbS4KKworICAgICA8bGk+Y29tcGxleCByZWxvY2F0aW9ucworCisgICAgIDxwPlRoZSBNUkkgYXNzZW1ibGVycyBzdXBwb3J0IHJlbG9jYXRpb25zIGFnYWluc3QgYSBuZWdhdGVkIHNlY3Rpb24gYWRkcmVzcywgYW5kCityZWxvY2F0aW9ucyB3aGljaCBjb21iaW5lIHRoZSBzdGFydCBhZGRyZXNzZXMgb2YgdHdvIG9yIG1vcmUgc2VjdGlvbnMuICBUaGVzZQorYXJlIG5vdCBzdXBwb3J0IGJ5IG90aGVyIG9iamVjdCBmaWxlIGZvcm1hdHMuCisKKyAgICAgPGxpPjxjb2RlPkVORDwvY29kZT4gcHNldWRvLW9wIHNwZWNpZnlpbmcgc3RhcnQgYWRkcmVzcworCisgICAgIDxwPlRoZSBNUkkgPGNvZGU+RU5EPC9jb2RlPiBwc2V1ZG8tb3AgcGVybWl0cyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhIHN0YXJ0IGFkZHJlc3MuIAorVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IG90aGVyIG9iamVjdCBmaWxlIGZvcm1hdHMuICBUaGUgc3RhcnQgYWRkcmVzcyBtYXkKK2luc3RlYWQgYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZTwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byB0aGUgbGlua2VyLCBvciBpbiBhIGxpbmtlcgorc2NyaXB0LgorCisgICAgIDxsaT48Y29kZT5JRE5UPC9jb2RlPiwgPGNvZGU+LmlkZW50PC9jb2RlPiBhbmQgPGNvZGU+TkFNRTwvY29kZT4gcHNldWRvLW9wcworCisgICAgIDxwPlRoZSBNUkkgPGNvZGU+SUROVDwvY29kZT4sIDxjb2RlPi5pZGVudDwvY29kZT4gYW5kIDxjb2RlPk5BTUU8L2NvZGU+IHBzZXVkby1vcHMgYXNzaWduIGEgbW9kdWxlCituYW1lIHRvIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSBvdGhlciBvYmplY3QgZmlsZSBmb3JtYXRzLgorCisgICAgIDxsaT48Y29kZT5PUkc8L2NvZGU+IHBzZXVkby1vcAorCisgICAgIDxwPlRoZSBtNjhrIE1SSSA8Y29kZT5PUkc8L2NvZGU+IHBzZXVkby1vcCBiZWdpbnMgYW4gYWJzb2x1dGUgc2VjdGlvbiBhdCBhIGdpdmVuCithZGRyZXNzLiAgVGhpcyBkaWZmZXJzIGZyb20gdGhlIHVzdWFsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IDxjb2RlPi5vcmc8L2NvZGU+IHBzZXVkby1vcCwKK3doaWNoIGNoYW5nZXMgdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgY3VycmVudCBzZWN0aW9uLiAgQWJzb2x1dGUgc2VjdGlvbnMgYXJlCitub3Qgc3VwcG9ydGVkIGJ5IG90aGVyIG9iamVjdCBmaWxlIGZvcm1hdHMuICBUaGUgYWRkcmVzcyBvZiBhIHNlY3Rpb24gbWF5IGJlCithc3NpZ25lZCB3aXRoaW4gYSBsaW5rZXIgc2NyaXB0LiAKKzwvdWw+CisKKyAgIDxwPlRoZXJlIGFyZSBzb21lIG90aGVyIGZlYXR1cmVzIG9mIHRoZSBNUkkgYXNzZW1ibGVyIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiwgdHlwaWNhbGx5IGVpdGhlciBiZWNhdXNlIHRoZXkgYXJlIGRpZmZpY3VsdCBvciBiZWNhdXNlIHRoZXkKK3NlZW0gb2YgbGl0dGxlIGNvbnNlcXVlbmNlLiAgU29tZSBvZiB0aGVzZSBtYXkgYmUgc3VwcG9ydGVkIGluIGZ1dHVyZSByZWxlYXNlcy4KKworICAgICA8dWw+Cis8bGk+RUJDRElDIHN0cmluZ3MKKworICAgICA8cD5FQkNESUMgc3RyaW5ncyBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgICA8bGk+cGFja2VkIGJpbmFyeSBjb2RlZCBkZWNpbWFsCisKKyAgICAgPHA+UGFja2VkIGJpbmFyeSBjb2RlZCBkZWNpbWFsIGlzIG5vdCBzdXBwb3J0ZWQuICBUaGlzIG1lYW5zIHRoYXQgdGhlIDxjb2RlPkRDLlA8L2NvZGU+CithbmQgPGNvZGU+RENCLlA8L2NvZGU+IHBzZXVkby1vcHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgPGxpPjxjb2RlPkZFUVU8L2NvZGU+IHBzZXVkby1vcAorCisgICAgIDxwPlRoZSBtNjhrIDxjb2RlPkZFUVU8L2NvZGU+IHBzZXVkby1vcCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgIDxsaT48Y29kZT5OT09CSjwvY29kZT4gcHNldWRvLW9wCisKKyAgICAgPHA+VGhlIG02OGsgPGNvZGU+Tk9PQko8L2NvZGU+IHBzZXVkby1vcCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgIDxsaT48Y29kZT5PUFQ8L2NvZGU+IGJyYW5jaCBjb250cm9sIG9wdGlvbnMKKworICAgICA8cD5UaGUgbTY4ayA8Y29kZT5PUFQ8L2NvZGU+IGJyYW5jaCBjb250cm9sIG9wdGlvbnMmbWRhc2g7PGNvZGU+QjwvY29kZT4sIDxjb2RlPkJSUzwvY29kZT4sIDxjb2RlPkJSQjwvY29kZT4sCis8Y29kZT5CUkw8L2NvZGU+LCBhbmQgPGNvZGU+QlJXPC9jb2RlPiZtZGFzaDthcmUgaWdub3JlZC4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGF1dG9tYXRpY2FsbHkKK3JlbGF4ZXMgYWxsIGJyYW5jaGVzLCB3aGV0aGVyIGZvcndhcmQgb3IgYmFja3dhcmQsIHRvIGFuIGFwcHJvcHJpYXRlIHNpemUsIHNvCit0aGVzZSBvcHRpb25zIHNlcnZlIG5vIHB1cnBvc2UuCisKKyAgICAgPGxpPjxjb2RlPk9QVDwvY29kZT4gbGlzdCBjb250cm9sIG9wdGlvbnMKKworICAgICA8cD5UaGUgZm9sbG93aW5nIG02OGsgPGNvZGU+T1BUPC9jb2RlPiBsaXN0IGNvbnRyb2wgb3B0aW9ucyBhcmUgaWdub3JlZDogPGNvZGU+QzwvY29kZT4sCis8Y29kZT5DRVg8L2NvZGU+LCA8Y29kZT5DTDwvY29kZT4sIDxjb2RlPkNSRTwvY29kZT4sIDxjb2RlPkU8L2NvZGU+LCA8Y29kZT5HPC9jb2RlPiwgPGNvZGU+STwvY29kZT4sIDxjb2RlPk08L2NvZGU+LAorPGNvZGU+TUVYPC9jb2RlPiwgPGNvZGU+TUM8L2NvZGU+LCA8Y29kZT5NRDwvY29kZT4sIDxjb2RlPlg8L2NvZGU+LgorCisgICAgIDxsaT5vdGhlciA8Y29kZT5PUFQ8L2NvZGU+IG9wdGlvbnMKKworICAgICA8cD5UaGUgZm9sbG93aW5nIG02OGsgPGNvZGU+T1BUPC9jb2RlPiBvcHRpb25zIGFyZSBpZ25vcmVkOiA8Y29kZT5ORVNUPC9jb2RlPiwgPGNvZGU+TzwvY29kZT4sCis8Y29kZT5PTEQ8L2NvZGU+LCA8Y29kZT5PUDwvY29kZT4sIDxjb2RlPlA8L2NvZGU+LCA8Y29kZT5QQ088L2NvZGU+LCA8Y29kZT5QQ1I8L2NvZGU+LCA8Y29kZT5QQ1M8L2NvZGU+LCA8Y29kZT5SPC9jb2RlPi4KKworICAgICA8bGk+PGNvZGU+T1BUPC9jb2RlPiA8Y29kZT5EPC9jb2RlPiBvcHRpb24gaXMgZGVmYXVsdAorCisgICAgIDxwPlRoZSBtNjhrIDxjb2RlPk9QVDwvY29kZT4gPGNvZGU+RDwvY29kZT4gb3B0aW9uIGlzIHRoZSBkZWZhdWx0LCB1bmxpa2UgdGhlIE1SSSBhc3NlbWJsZXIuIAorPGNvZGU+T1BUIE5PRDwvY29kZT4gbWF5IGJlIHVzZWQgdG8gdHVybiBpdCBvZmYuCisKKyAgICAgPGxpPjxjb2RlPlhSRUY8L2NvZGU+IHBzZXVkby1vcC4KKworICAgICA8cD5UaGUgbTY4ayA8Y29kZT5YUkVGPC9jb2RlPiBwc2V1ZG8tb3AgaXMgaWdub3JlZC4KKworICAgICA8bGk+PGNvZGU+LmRlYnVnPC9jb2RlPiBwc2V1ZG8tb3AKKworICAgICA8cD5UaGUgaTk2MCA8Y29kZT4uZGVidWc8L2NvZGU+IHBzZXVkby1vcCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgIDxsaT48Y29kZT4uZXh0ZW5kZWQ8L2NvZGU+IHBzZXVkby1vcAorCisgICAgIDxwPlRoZSBpOTYwIDxjb2RlPi5leHRlbmRlZDwvY29kZT4gcHNldWRvLW9wIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgPGxpPjxjb2RlPi5saXN0PC9jb2RlPiBwc2V1ZG8tb3AuCisKKyAgICAgPHA+VGhlIHZhcmlvdXMgb3B0aW9ucyBvZiB0aGUgaTk2MCA8Y29kZT4ubGlzdDwvY29kZT4gcHNldWRvLW9wIGFyZSBub3Qgc3VwcG9ydGVkLgorCisgICAgIDxsaT48Y29kZT4ub3B0aW1pemU8L2NvZGU+IHBzZXVkby1vcAorCisgICAgIDxwPlRoZSBpOTYwIDxjb2RlPi5vcHRpbWl6ZTwvY29kZT4gcHNldWRvLW9wIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgPGxpPjxjb2RlPi5vdXRwdXQ8L2NvZGU+IHBzZXVkby1vcAorCisgICAgIDxwPlRoZSBpOTYwIDxjb2RlPi5vdXRwdXQ8L2NvZGU+IHBzZXVkby1vcCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgIDxsaT48Y29kZT4uc2V0cmVhbDwvY29kZT4gcHNldWRvLW9wCisKKyAgICAgPHA+VGhlIGk5NjAgPGNvZGU+LnNldHJlYWw8L2NvZGU+IHBzZXVkby1vcCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICA8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJDXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTMyQ18wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzgzYTMzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTMyQ18wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NMzJDLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNMzJDXzAwMmRTeW50YXguaHRtbCNNMzJDXzAwMmRTeW50YXgiIHRpdGxlPSJNMzJDLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik0zMkNfMDAyZE1vZGlmaWVycy5odG1sI00zMkNfMDAyZE1vZGlmaWVycyIgdGl0bGU9Ik0zMkMtTW9kaWZpZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTMyQy1DaGFycyI+PC9hPgorPGEgbmFtZT0iTTMyQ18wMDJkQ2hhcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNMzJDXzAwMmRNb2RpZmllcnMuaHRtbCNNMzJDXzAwMmRNb2RpZmllcnMiPk0zMkMtTW9kaWZpZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTMyQ18wMDJkU3ludGF4Lmh0bWwjTTMyQ18wMDJkU3ludGF4Ij5NMzJDLVN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjEuMi4yIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1NMzJDLTExODMiPjwvYT48YSBuYW1lPSJpbmRleC1NMzJDLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMTE4NCI+PC9hPlRoZSBwcmVzZW5jZSBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgb24gYSBsaW5lIGluZGljYXRlcyB0aGUgc3RhcnQgb2YKK2EgY29tbWVudCB0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGF0IGxpbmUuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUsIHRoZSB3aG9sZSBsaW5lCitpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjYW4gYWxzbyBiZSBhCitsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYQorcHJlcHJvY2Vzc29yIGNvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtTTMyQy0xMTg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLU0zMkMtMTE4NiI+PC9hPjxhIG5hbWU9ImluZGV4LU0zMkMtbGluZS1zZXBhcmF0b3ItMTE4NyI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUKK2xpbmUuCisKKzwhLS0gQ29weXJpZ2h0IDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIC0tPgorPCEtLSAyMDAwLCAyMDAzLCAyMDA0LCAyMDA2IC0tPgorPCEtLSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL00zMkNfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTMyQ18wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjYjZhYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL00zMkNfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk0zMkMtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMTTMyXzAwMmREZXBlbmRlbnQuaHRtbCNMTTMyXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJMTTMyLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik0zMlJfMDAyZERlcGVuZGVudC5odG1sI00zMlJfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik0zMlItRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTMyQy1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9Ik0zMkNfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNMzJSXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJSXzAwMmREZXBlbmRlbnQiPk0zMlItRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTE0zMl8wMDJkRGVwZW5kZW50Lmh0bWwjTE0zMl8wMDJkRGVwZW5kZW50Ij5MTTMyLURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4yMSBNMzJDIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LU0zMkMtc3VwcG9ydC0xMTcxIj48L2E+Cis8Y29kZT5hczwvY29kZT4gY2FuIGFzc2VtYmxlIGNvZGUgZm9yIHNldmVyYWwgZGlmZmVyZW50IG1lbWJlcnMgb2YKK3RoZSBSZW5lc2FzIE0zMkMgZmFtaWx5LiAgTm9ybWFsbHkgdGhlIGRlZmF1bHQgaXMgdG8gYXNzZW1ibGUgY29kZSBmb3IKK3RoZSBNMTZDIG1pY3JvcHJvY2Vzc29yLiAgVGhlIDxjb2RlPi1tMzJjPC9jb2RlPiBvcHRpb24gbWF5IGJlIHVzZWQgdG8KK2NoYW5nZSB0aGUgZGVmYXVsdCB0byB0aGUgTTMyQyBtaWNyb3Byb2Nlc3Nvci4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik0zMkNfMDAyZE9wdHMuaHRtbCNNMzJDXzAwMmRPcHRzIj5NMzJDLU9wdHM8L2E+OiAgICAgICAgICAgICAgICAgICAgTTMyQyBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNMzJDXzAwMmRTeW50YXguaHRtbCNNMzJDXzAwMmRTeW50YXgiPk0zMkMtU3ludGF4PC9hPjogICAgICAgICAgICAgICAgICBNMzJDIFN5bnRheAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTMyQ18wMDJkTW9kaWZpZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJDXzAwMmRNb2RpZmllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQwNWZlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTMyQ18wMDJkTW9kaWZpZXJzLmh0bWwKQEAgLTAsMCArMSwxMDEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk0zMkMtTW9kaWZpZXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNMzJDXzAwMmRTeW50YXguaHRtbCNNMzJDXzAwMmRTeW50YXgiIHRpdGxlPSJNMzJDLVN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik0zMkNfMDAyZENoYXJzLmh0bWwjTTMyQ18wMDJkQ2hhcnMiIHRpdGxlPSJNMzJDLUNoYXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTMyQy1Nb2RpZmllcnMiPjwvYT4KKzxhIG5hbWU9Ik0zMkNfMDAyZE1vZGlmaWVycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNMzJDXzAwMmRDaGFycy5odG1sI00zMkNfMDAyZENoYXJzIj5NMzJDLUNoYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTMyQ18wMDJkU3ludGF4Lmh0bWwjTTMyQ18wMDJkU3ludGF4Ij5NMzJDLVN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjEuMi4xIFN5bWJvbGljIE9wZXJhbmQgTW9kaWZpZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtTTMyQy1tb2RpZmllcnMtMTE4MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZGlmaWVyc18wMDJjLU0zMkMtMTE4MSI+PC9hPgorVGhlIGFzc2VtYmxlciBzdXBwb3J0cyBzZXZlcmFsIG1vZGlmaWVycyB3aGVuIHVzaW5nIHN5bWJvbCBhZGRyZXNzZXMKK2luIE0zMkMgaW5zdHJ1Y3Rpb24gb3BlcmFuZHMuICBUaGUgZ2VuZXJhbCBzeW50YXggaXMgdGhlIGZvbGxvd2luZzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICVtb2RpZmllcihzeW1ib2wpCis8L3ByZT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1zeW1ib2wtbW9kaWZpZXJzLTExODIiPjwvYT4KKzxkbD4KKzxkdD48Y29kZT4lZHNwODwvY29kZT48ZHQ+PGNvZGU+JWRzcDE2PC9jb2RlPjxkZD4KK1RoZXNlIG1vZGlmaWVycyBvdmVycmlkZSB0aGUgYXNzZW1ibGVyJ3MgYXNzdW1wdGlvbnMgYWJvdXQgaG93IGJpZyBhCitzeW1ib2wncyBhZGRyZXNzIGlzLiAgTm9ybWFsbHksIHdoZW4gaXQgc2VlcyBhbiBvcGVyYW5kIGxpa2UKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3ltW2EwXTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpdCBhc3N1bWVzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3ltPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1heSByZXF1aXJlIHRoZSB3aWRlc3QKK2Rpc3BsYWNlbWVudCBmaWVsZCAoMTYgYml0cyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTE2Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgMjQgYml0cyBmb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW0zMmM8L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAgVGhlc2UgbW9kaWZpZXJzIHRlbGwgaXQgdG8gYXNzdW1lIHRoZSBhZGRyZXNzIHdpbGwgZml0CitpbiBhbiA4IG9yIDE2IGJpdCAocmVzcGVjdGl2ZWx5KSB1bnNpZ25lZCBkaXNwbGFjZW1lbnQuICBOb3RlIHRoYXQsIG9mCitjb3Vyc2UsIGlmIGl0IGRvZXNuJ3QgYWN0dWFsbHkgZml0IHlvdSB3aWxsIGdldCBsaW5rZXIgZXJyb3JzLiAgRXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBtb3YudyAlZHNwOChzeW0pW2EwXSxyMQorICAgICAgICAgIG1vdi5iICMwLCVkc3A4KHN5bSlbYTBdCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4laGk4PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgYWxsb3dzIHlvdSB0byBsb2FkIGJpdHMgMTYgdGhyb3VnaCAyMyBvZiBhIDI0IGJpdAorYWRkcmVzcyBpbnRvIGFuIDggYml0IHJlZ2lzdGVyLiAgVGhpcyBpcyB1c2VmdWwgd2l0aCwgZm9yIGV4YW1wbGUsIHRoZQorTTE2QyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNtb3ZmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9uLCB3aGljaCBleHBlY3RzIGEgMjAgYml0IGFkZHJlc3MgaW4KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjFoPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmEwPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgRXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBtb3YuYiAjJWhpOChzeW0pLHIxaAorICAgICAgICAgIG1vdi53ICMlbG8xNihzeW0pLGEwCisgICAgICAgICAgc21vdmYuYgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+JWxvMTY8L2NvZGU+PGRkPgorTGlrZXdpc2UsIHRoaXMgbW9kaWZpZXIgYWxsb3dzIHlvdSB0byBsb2FkIGJpdHMgMCB0aHJvdWdoIDE1IG9mIGEgMjQKK2JpdCBhZGRyZXNzIGludG8gYSAxNiBiaXQgcmVnaXN0ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4laGkxNjwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGFsbG93cyB5b3UgdG8gbG9hZCBiaXRzIDE2IHRocm91Z2ggMzEgb2YgYSAzMiBiaXQKK2FkZHJlc3MgaW50byBhIDE2IGJpdCByZWdpc3Rlci4gIFdoaWxlIHRoZSBNMzJDIGZhbWlseSBvbmx5IGhhcyAyNAorYml0cyBvZiBhZGRyZXNzIHNwYWNlLCBpdCBkb2VzIHN1cHBvcnQgYWRkcmVzc2VzIGluIHBhaXJzIG9mIDE2IGJpdAorcmVnaXN0ZXJzIChsaWtlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YTFhMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9uKS4gIFRoaXMKK21vZGlmaWVyIGlzIGZvciBsb2FkaW5nIHRoZSB1cHBlciBoYWxmIGluIHN1Y2ggY2FzZXMuICBFeGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIG1vdi53ICMlaGkxNihzeW0pLGExCisgICAgICAgICAgbW92LncgIyVsbzE2KHN5bSksYTAKKyAgICAgICAgICAuLi4KKyAgICAgICAgICBsZGUudyBbYTFhMF0scjEKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJDXzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJDXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4MjljNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL00zMkNfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NMzJDLU9wdHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik0zMkNfMDAyZERlcGVuZGVudC5odG1sI00zMkNfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik0zMkMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTTMyQ18wMDJkU3ludGF4Lmh0bWwjTTMyQ18wMDJkU3ludGF4IiB0aXRsZT0iTTMyQy1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNMzJDLU9wdHMiPjwvYT4KKzxhIG5hbWU9Ik0zMkNfMDAyZE9wdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTMyQ18wMDJkU3ludGF4Lmh0bWwjTTMyQ18wMDJkU3ludGF4Ij5NMzJDLVN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik0zMkNfMDAyZERlcGVuZGVudC5odG1sI00zMkNfMDAyZERlcGVuZGVudCI+TTMyQy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjIxLjEgTTMyQyBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLU0zMkMtMTE3MiI+PC9hPjxhIG5hbWU9ImluZGV4LU0zMkMtb3B0aW9ucy0xMTczIj48L2E+CitUaGUgUmVuZXNhcyBNMzJDIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IGhhcyB0aGVzZQorbWFjaGluZS1kZXBlbmRlbnQgb3B0aW9uczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW0zMmM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtMzJjXzAwN2Qtb3B0aW9uXzAwMmMtTTMyQy0xMTc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJjaGl0ZWN0dXJlLW9wdGlvbnNfMDAyYy1NMzJDLTExNzUiPjwvYT48YSBuYW1lPSJpbmRleC1NMzJDLWFyY2hpdGVjdHVyZS1vcHRpb24tMTE3NiI+PC9hPkFzc2VtYmxlIE0zMkMgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0xNmM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtMTZjXzAwN2Qtb3B0aW9uXzAwMmMtTTE2Qy0xMTc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJjaGl0ZWN0dXJlLW9wdGlvbnNfMDAyYy1NMTZDLTExNzgiPjwvYT48YSBuYW1lPSJpbmRleC1NMTZDLWFyY2hpdGVjdHVyZS1vcHRpb24tMTE3OSI+PC9hPkFzc2VtYmxlIE0xNkMgaW5zdHJ1Y3Rpb25zIChkZWZhdWx0KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1yZWxheDwvY29kZT48ZGQ+RW5hYmxlIHN1cHBvcnQgZm9yIGxpbmstdGltZSByZWxheGF0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1oLXRpY2staGV4PC9jb2RlPjxkZD5TdXBwb3J0IEgnMDAgc3R5bGUgaGV4IGNvbnN0YW50cyBpbiBhZGRpdGlvbiB0byAweDAwIHN0eWxlLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJDXzAwMmRTeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL00zMkNfMDAyZFN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDExMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJDXzAwMmRTeW50YXguaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NMzJDLVN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTTMyQ18wMDJkRGVwZW5kZW50Lmh0bWwjTTMyQ18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTTMyQy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjTTMyQ18wMDJkT3B0cyIgdGl0bGU9Ik0zMkMtT3B0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik0zMkMtU3ludGF4Ij48L2E+Cis8YSBuYW1lPSJNMzJDXzAwMmRTeW50YXgiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjTTMyQ18wMDJkT3B0cyI+TTMyQy1PcHRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTMyQ18wMDJkRGVwZW5kZW50Lmh0bWwjTTMyQ18wMDJkRGVwZW5kZW50Ij5NMzJDLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjEuMiBNMzJDIFN5bnRheDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJNMzJDXzAwMmRNb2RpZmllcnMuaHRtbCNNMzJDXzAwMmRNb2RpZmllcnMiPk0zMkMtTW9kaWZpZXJzPC9hPjogICAgICAgICAgICAgICBTeW1ib2xpYyBPcGVyYW5kIE1vZGlmaWVycworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iTTMyQ18wMDJkQ2hhcnMuaHRtbCNNMzJDXzAwMmRDaGFycyI+TTMyQy1DaGFyczwvYT46ICAgICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTMyUl8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJSXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWJiMGJmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTMyUl8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTMyUi1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik0zMkNfMDAyZERlcGVuZGVudC5odG1sI00zMkNfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik0zMkMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTTY4S18wMDJkRGVwZW5kZW50Lmh0bWwjTTY4S18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTTY4Sy1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNMzJSLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iTTMyUl8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik02OEtfMDAyZERlcGVuZGVudC5odG1sI002OEtfMDAyZERlcGVuZGVudCI+TTY4Sy1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNMzJDXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJDXzAwMmREZXBlbmRlbnQiPk0zMkMtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjIyIE0zMlIgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTTMyUi1zdXBwb3J0LTExODgiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik0zMlJfMDAyZE9wdHMuaHRtbCNNMzJSXzAwMmRPcHRzIj5NMzJSLU9wdHM8L2E+OiAgICAgICAgICAgICAgICAgICAgTTMyUiBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNMzJSXzAwMmREaXJlY3RpdmVzLmh0bWwjTTMyUl8wMDJkRGlyZWN0aXZlcyI+TTMyUi1EaXJlY3RpdmVzPC9hPjogICAgICAgICAgICAgIE0zMlIgRGlyZWN0aXZlcworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iTTMyUl8wMDJkV2FybmluZ3MuaHRtbCNNMzJSXzAwMmRXYXJuaW5ncyI+TTMyUi1XYXJuaW5nczwvYT46ICAgICAgICAgICAgICAgIE0zMlIgV2FybmluZ3MKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL00zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL00zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTgzOGUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsMTQwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NMzJSLURpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik0zMlJfMDAyZERlcGVuZGVudC5odG1sI00zMlJfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik0zMlItRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiIHRpdGxlPSJNMzJSLU9wdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNMzJSXzAwMmRXYXJuaW5ncy5odG1sI00zMlJfMDAyZFdhcm5pbmdzIiB0aXRsZT0iTTMyUi1XYXJuaW5ncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik0zMlItRGlyZWN0aXZlcyI+PC9hPgorPGEgbmFtZT0iTTMyUl8wMDJkRGlyZWN0aXZlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNMzJSXzAwMmRXYXJuaW5ncy5odG1sI00zMlJfMDAyZFdhcm5pbmdzIj5NMzJSLVdhcm5pbmdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPk0zMlItT3B0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik0zMlJfMDAyZERlcGVuZGVudC5odG1sI00zMlJfMDAyZERlcGVuZGVudCI+TTMyUi1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjIyLjIgTTMyUiBEaXJlY3RpdmVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZGlyZWN0aXZlc18wMDJjLU0zMlItMTIyMiI+PC9hPjxhIG5hbWU9ImluZGV4LU0zMlItZGlyZWN0aXZlcy0xMjIzIj48L2E+CitUaGUgUmVuZWFzZSBNMzJSIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IGhhcyBhIGZldyBhcmNoaXRlY3R1cmUKK3NwZWNpZmljIGRpcmVjdGl2ZXM6CisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxvd18wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlItMTIyNCI+PC9hPgorPGRsPjxkdD48Y29kZT5sb3cgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD5UaGUgPGNvZGU+bG93PC9jb2RlPiBkaXJlY3RpdmUgY29tcHV0ZXMgdGhlIHZhbHVlIG9mIGl0cyBleHByZXNzaW9uIGFuZAorcGxhY2VzIHRoZSBsb3dlciAxNi1iaXRzIG9mIHRoZSByZXN1bHQgaW50byB0aGUgaW1tZWRpYXRlLWZpZWxkIG9mIHRoZQoraW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICBvcjMgICByMCwgcjAsICNsb3coMHgxMjM0NTY3OCkgOyBjb21wdXRlIHIwID0gcjAgfCAweDU2NzgKKyAgICAgICAgICAgICBhZGQzLCByMCwgcjAsICNsb3coZnJlZCkgICA7IGNvbXB1dGUgcjAgPSByMCArIGxvdyAxNi1iaXRzIG9mIGFkZHJlc3Mgb2YgZnJlZAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+aGlnaCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaGlnaF8wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlItMTIyNSI+PC9hPlRoZSA8Y29kZT5oaWdoPC9jb2RlPiBkaXJlY3RpdmUgY29tcHV0ZXMgdGhlIHZhbHVlIG9mIGl0cyBleHByZXNzaW9uIGFuZAorcGxhY2VzIHRoZSB1cHBlciAxNi1iaXRzIG9mIHRoZSByZXN1bHQgaW50byB0aGUgaW1tZWRpYXRlLWZpZWxkIG9mIHRoZQoraW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICBzZXRoICByMCwgI2hpZ2goMHgxMjM0NTY3OCkgOyBjb21wdXRlIHIwID0gMHgxMjM0MDAwMAorICAgICAgICAgICAgIHNldGgsIHIwLCAjaGlnaChmcmVkKSAgICAgICA7IGNvbXB1dGUgcjAgPSB1cHBlciAxNi1iaXRzIG9mIGFkZHJlc3Mgb2YgZnJlZAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+c2hpZ2ggPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNoaWdoXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTMyUi0xMjI2Ij48L2E+VGhlIDxjb2RlPnNoaWdoPC9jb2RlPiBkaXJlY3RpdmUgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSA8Y29kZT5oaWdoPC9jb2RlPgorZGlyZWN0aXZlLiAgSXQgYWxzbyBjb21wdXRlcyB0aGUgdmFsdWUgb2YgaXRzIGV4cHJlc3Npb24gYW5kIHBsYWNlcwordGhlIHVwcGVyIDE2LWJpdHMgb2YgdGhlIHJlc3VsdCBpbnRvIHRoZSBpbW1lZGlhdGUtZmllbGQgb2YgdGhlCitpbnN0cnVjdGlvbi4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgPGNvZGU+c2hpZ2g8L2NvZGU+IGFsc28gY2hlY2tzIHRvIHNlZQoraWYgdGhlIGxvd2VyIDE2LWJpdHMgY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBzaWduZWQgbnVtYmVyLCBhbmQgaWYKK3NvIGl0IGFzc3VtZXMgdGhhdCBhIGJvcnJvdyB3aWxsIG9jY3VyIGZyb20gdGhlIHVwcGVyLTE2IGJpdHMuICBUbworY29tcGVuc2F0ZSBmb3IgdGhpcyB0aGUgPGNvZGU+c2hpZ2g8L2NvZGU+IGRpcmVjdGl2ZSBwcmUtYmlhc2VzIHRoZSB1cHBlcgorMTYgYml0IHZhbHVlIGJ5IGFkZGluZyBvbmUgdG8gaXQuICBGb3IgZXhhbXBsZToKKworICAgICA8cD5Gb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICBzZXRoICByMCwgI3NoaWdoKDB4MTIzNDU2NzgpIDsgY29tcHV0ZSByMCA9IDB4MTIzNDAwMDAKKyAgICAgICAgICAgICBzZXRoICByMCwgI3NoaWdoKDB4MDAwMDgwMDApIDsgY29tcHV0ZSByMCA9IDB4MDAwMTAwMDAKKzwvcHJlPgorICAgICA8cD5JbiB0aGUgc2Vjb25kIGV4YW1wbGUgdGhlIGxvd2VyIDE2LWJpdHMgYXJlIDB4ODAwMC4gIElmIHRoZXNlIGFyZQordHJlYXRlZCBhcyBhIHNpZ25lZCB2YWx1ZSBhbmQgc2lnbiBleHRlbmRlZCB0byAzMi1iaXRzIHRoZW4gdGhlIHZhbHVlCitiZWNvbWVzIDB4ZmZmZjgwMDAuICBJZiB0aGlzIHZhbHVlIGlzIHRoZW4gYWRkZWQgdG8gMHgwMDAxMDAwMCB0aGVuCit0aGUgcmVzdWx0IGlzIDB4MDAwMDgwMDAuCisKKyAgICAgPHA+VGhpcyBiZWhhdmlvdXIgaXMgdG8gYWxsb3cgZm9yIHRoZSBkaWZmZXJlbnQgc2VtYW50aWNzIG9mIHRoZQorPGNvZGU+b3IzPC9jb2RlPiBhbmQgPGNvZGU+YWRkMzwvY29kZT4gaW5zdHJ1Y3Rpb25zLiAgVGhlIDxjb2RlPm9yMzwvY29kZT4gaW5zdHJ1Y3Rpb24KK3RyZWF0cyBpdHMgMTYtYml0IGltbWVkaWF0ZSBhcmd1bWVudCBhcyB1bnNpZ25lZCB3aGVyZWFzIHRoZQorPGNvZGU+YWRkMzwvY29kZT4gdHJlYXRzIGl0cyAxNi1iaXQgaW1tZWRpYXRlIGFzIGEgc2lnbmVkIHZhbHVlLiAgU28gZm9yCitleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIHNldGggIHIwLCAjc2hpZ2goMHgwMDAwODAwMCkKKyAgICAgICAgICAgICBhZGQzICByMCwgcjAsICNsb3coMHgwMDAwODAwMCkKKzwvcHJlPgorICAgICA8cD5Qcm9kdWNlcyB0aGUgY29ycmVjdCByZXN1bHQgaW4gcjAsIHdoZXJlYXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgc2V0aCAgcjAsICNzaGlnaCgweDAwMDA4MDAwKQorICAgICAgICAgICAgIG9yMyAgIHIwLCByMCwgI2xvdygweDAwMDA4MDAwKQorPC9wcmU+CisgICAgIDxwPlN0b3JlcyAweGZmZmY4MDAwIGludG8gcjAuCisKKyAgICAgPHA+Tm90ZSAtIHRoZSA8Y29kZT5zaGlnaDwvY29kZT4gZGlyZWN0aXZlIGRvZXMgbm90IGtub3cgd2hlcmUgaW4gdGhlIGFzc2VtYmx5Citzb3VyY2UgY29kZSB0aGUgbG93ZXIgMTYtYml0cyBvZiB0aGUgdmFsdWUgYXJlIGdvaW5nIHNldCwgc28gaXQgY2Fubm90CitjaGVjayB0byBtYWtlIHN1cmUgdGhhdCBhbiA8Y29kZT5vcjM8L2NvZGU+IGluc3RydWN0aW9uIGlzIGJlaW5nIHVzZWQgcmF0aGVyCit0aGFuIGFuIDxjb2RlPmFkZDM8L2NvZGU+IGluc3RydWN0aW9uLiAgSXQgaXMgdXAgdG8gdGhlIHByb2dyYW1tZXIgdG8gbWFrZQorc3VyZSB0aGF0IGNvcnJlY3QgZGlyZWN0aXZlcyBhcmUgdXNlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbTMycl8wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlItMTIyNyI+PC9hPjxicj48ZHQ+PGNvZGU+Lm0zMnI8L2NvZGU+PGRkPlRoZSBkaXJlY3RpdmUgcGVyZm9ybXMgYSBzaW1pbGFyIHRoaW5nIGFzIHRoZSA8ZW0+LW0zMnI8L2VtPiBjb21tYW5kCitsaW5lIG9wdGlvbi4gIEl0IHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gb25seSBhY2NlcHQgTTMyUiBpbnN0cnVjdGlvbnMKK2Zyb20gbm93IG9uLiAgQW4gaW5zdHJ1Y3Rpb25zIGZyb20gbGF0ZXIgTTMyUiBhcmNoaXRlY3R1cmVzIGFyZQorcmVmdXNlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbTMycnhfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NMzJSWC0xMjI4Ij48L2E+PGJyPjxkdD48Y29kZT4ubTMycng8L2NvZGU+PGRkPlRoZSBkaXJlY3RpdmUgcGVyZm9ybXMgYSBzaW1pbGFyIHRoaW5nIGFzIHRoZSA8ZW0+LW0zMnJ4PC9lbT4gY29tbWFuZAorbGluZSBvcHRpb24uICBJdCB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIHN0YXJ0IGFjY2VwdGluZyB0aGUgZXh0cmEKK2luc3RydWN0aW9ucyBpbiB0aGUgTTMyUlggSVNBIGFzIHdlbGwgYXMgdGhlIG9yZGluYXJ5IE0zMlIgSVNBLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVtMzJyMl8wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlIyLTEyMjkiPjwvYT48YnI+PGR0Pjxjb2RlPi5tMzJyMjwvY29kZT48ZGQ+VGhlIGRpcmVjdGl2ZSBwZXJmb3JtcyBhIHNpbWlsYXIgdGhpbmcgYXMgdGhlIDxlbT4tbTMycjI8L2VtPiBjb21tYW5kCitsaW5lIG9wdGlvbi4gIEl0IHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gc3RhcnQgYWNjZXB0aW5nIHRoZSBleHRyYQoraW5zdHJ1Y3Rpb25zIGluIHRoZSBNMzJSMiBJU0EgYXMgd2VsbCBhcyB0aGUgb3JkaW5hcnkgTTMyUiBJU0EuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWxpdHRsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLU0zMlJYLTEyMzAiPjwvYT48YnI+PGR0Pjxjb2RlPi5saXR0bGU8L2NvZGU+PGRkPlRoZSBkaXJlY3RpdmUgcGVyZm9ybXMgYSBzaW1pbGFyIHRoaW5nIGFzIHRoZSA8ZW0+LWxpdHRsZTwvZW0+IGNvbW1hbmQKK2xpbmUgb3B0aW9uLiAgSXQgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBzdGFydCBwcm9kdWNpbmcgbGl0dGxlLWVuZGlhbgorY29kZSBhbmQgZGF0YS4gIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZSBhcyBwcm9kdWNpbmcKK21peGVkLWVuZGlhbiBiaW5hcnkgZmlsZXMgaXMgZnJhdWdodCB3aXRoIGRhbmdlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlYmlnXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTMyUlgtMTIzMSI+PC9hPjxicj48ZHQ+PGNvZGU+LmJpZzwvY29kZT48ZGQ+VGhlIGRpcmVjdGl2ZSBwZXJmb3JtcyBhIHNpbWlsYXIgdGhpbmcgYXMgdGhlIDxlbT4tYmlnPC9lbT4gY29tbWFuZAorbGluZSBvcHRpb24uICBJdCB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIHN0YXJ0IHByb2R1Y2luZyBiaWctZW5kaWFuCitjb2RlIGFuZCBkYXRhLiAgVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlIGFzIHByb2R1Y2luZworbWl4ZWQtZW5kaWFuIGJpbmFyeSBmaWxlcyBpcyBmcmF1Z2h0IHdpdGggZGFuZ2VyLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJSXzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJSXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzZGM4MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL00zMlJfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDE0NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTMyUi1PcHRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNMzJSXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJSXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNMzJSLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik0zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCNNMzJSXzAwMmREaXJlY3RpdmVzIiB0aXRsZT0iTTMyUi1EaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTMyUi1PcHRzIj48L2E+Cis8YSBuYW1lPSJNMzJSXzAwMmRPcHRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik0zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCNNMzJSXzAwMmREaXJlY3RpdmVzIj5NMzJSLURpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNMzJSXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJSXzAwMmREZXBlbmRlbnQiPk0zMlItRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yMi4xIE0zMlIgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1NMzJSLTExODkiPjwvYT48YSBuYW1lPSJpbmRleC1NMzJSLW9wdGlvbnMtMTE5MCI+PC9hPgorVGhlIFJlbmVhc2UgTTMyUiB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBoYXMgYSBmZXcgbWFjaGluZQorZGVwZW5kZW50IG9wdGlvbnM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tMzJyeDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG0zMnJ4XzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTE5MSI+PC9hPjxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZS1vcHRpb25zXzAwMmMtTTMyUlgtMTE5MiI+PC9hPjxhIG5hbWU9ImluZGV4LU0zMlItYXJjaGl0ZWN0dXJlLW9wdGlvbnMtMTE5MyI+PC9hPjxjb2RlPmFzPC9jb2RlPiBjYW4gYXNzZW1ibGUgY29kZSBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgbWVtYmVycyBvZiB0aGUKK1JlbmVzYXMgTTMyUiBmYW1pbHkuICBOb3JtYWxseSB0aGUgZGVmYXVsdCBpcyB0byBhc3NlbWJsZSBjb2RlIGZvcgordGhlIE0zMlIgbWljcm9wcm9jZXNzb3IuICBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQKK3RvIHRoZSBNMzJSWCBtaWNyb3Byb2Nlc3Nvciwgd2hpY2ggYWRkcyBzb21lIG1vcmUgaW5zdHJ1Y3Rpb25zIHRvIHRoZQorYmFzaWMgTTMyUiBpbnN0cnVjdGlvbiBzZXQsIGFuZCBzb21lIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBzb21lIG9mCit0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0zMnIyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbTMycnhfMDA3ZC1vcHRpb25fMDAyYy1NMzJSMi0xMTk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJjaGl0ZWN0dXJlLW9wdGlvbnNfMDAyYy1NMzJSMi0xMTk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtTTMyUi1hcmNoaXRlY3R1cmUtb3B0aW9ucy0xMTk2Ij48L2E+VGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgdGFyZ2V0IHByb2Nlc3NvciB0byB0aGUgdGhlIE0zMlIyCittaWNyb3Byb2Nlc3Nvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tMzJyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbTMycl8wMDdkLW9wdGlvbl8wMDJjLU0zMlItMTE5NyI+PC9hPjxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZS1vcHRpb25zXzAwMmMtTTMyUi0xMTk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtTTMyUi1hcmNoaXRlY3R1cmUtb3B0aW9ucy0xMTk5Ij48L2E+VGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgYXNzZW1ibGVyJ3MgZGVmYXVsdCBiZWhhdmlvdXIgb2YKK2Fzc2VtYmxpbmcgZm9yIHRoZSBNMzJSIG1pY3JvcHJvY2Vzc29yLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZQorZGVmYXVsdCBoYXMgYmVlbiBjaGFuZ2VkIGJ5IGEgcHJldmlvdXMgY29tbWFuZCBsaW5lIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1saXR0bGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRsaXR0bGVfMDA3ZC1vcHRpb25fMDAyYy1NMzJSLTEyMDAiPjwvYT5UaGlzIG9wdGlvbiB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIHByb2R1Y2UgbGl0dGxlLWVuZGlhbiBjb2RlIGFuZAorZGF0YS4gIFRoZSBkZWZhdWx0IGlzIGRlcGVuZGVudCB1cG9uIGhvdyB0aGUgdG9vbGNoYWluIHdhcworY29uZmlndXJlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1FTDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZEVMXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMjAxIj48L2E+VGhpcyBpcyBhIHN5bm9ueW0gZm9yIDxlbT4tbGl0dGxlPC9lbT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tYmlnPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkYmlnXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMjAyIj48L2E+VGhpcyBvcHRpb24gdGVsbHMgdGhlIGFzc2VtYmxlciB0byBwcm9kdWNlIGJpZy1lbmRpYW4gY29kZSBhbmQKK2RhdGEuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tRUI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRFQl8wMDdkLW9wdGlvbl8wMDJjLU0zMlItMTIwMyI+PC9hPlRoaXMgaXMgYSBzeW5vbnVtIGZvciA8ZW0+LWJpZzwvZW0+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUtQSUM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRLUElDXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMjA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtUElDLWNvZGUtZ2VuZXJhdGlvbi1mb3ItTTMyUi0xMjA1Ij48L2E+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIG91dHB1dCBvZiB0aGUgYXNzZW1ibGVyIHNob3VsZCBiZQorbWFya2VkIGFzIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgKFBJQykuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcGFyYWxsZWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRwYXJhbGxlbF8wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMDYiPjwvYT5UaGlzIG9wdGlvbiB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIGF0dGVtcHRzIHRvIGNvbWJpbmUgdHdvIHNlcXVlbnRpYWwKK2luc3RydWN0aW9ucyBpbnRvIGEgc2luZ2xlLCBwYXJhbGxlbCBpbnN0cnVjdGlvbiwgd2hlcmUgaXQgaXMgbGVnYWwgdG8KK2RvIHNvLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW5vLXBhcmFsbGVsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbm9fMDAyZHBhcmFsbGVsXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIwNyI+PC9hPlRoaXMgb3B0aW9uIGRpc2FibGVzIGEgcHJldmlvdXNseSBlbmFibGVkIDxlbT4tcGFyYWxsZWw8L2VtPiBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm8tYml0aW5zdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG5vXzAwMmRiaXRpbnN0XzAwN2RfMDAyYy1NMzJSMi0xMjA4Ij48L2E+VGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBleHRlbmRlZCBiaXQtZmllbGQKK2luc3RydWN0aW9ucyBwcm92aWRlZCBieSB0aGUgTTMyUjIuICBJZiB0aGlzIHN1cHBvcnQgbmVlZHMgdG8gYmUKK3JlLWVuYWJsZWQgdGhlIDxlbT4tYml0aW5zdDwvZW0+IHN3aXRjaCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIGl0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU88L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRPXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIwOSI+PC9hPlRoaXMgb3B0aW9uIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYXR0ZW1wdCB0byBvcHRpbWl6ZSB0aGUKK2luc3RydWN0aW9ucyB0aGF0IGl0IHByb2R1Y2VzLiAgVGhpcyBpbmNsdWRlcyBmaWxsaW5nIGRlbGF5IHNsb3RzIGFuZAorY29udmVydGluZyBzZXF1ZW50aWFsIGluc3RydWN0aW9ucyBpbnRvIHBhcmFsbGVsIG9uZXMuICBUaGlzIG9wdGlvbgoraW1wbGllcyA8ZW0+LXBhcmFsbGVsPC9lbT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4td2Fybi1leHBsaWNpdC1wYXJhbGxlbC1jb25mbGljdHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmR3YXJuXzAwMmRleHBsaWNpdF8wMDJkcGFyYWxsZWxfMDAyZGNvbmZsaWN0c18wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMTAiPjwvYT5JbnN0cnVjdHMgPGNvZGU+YXM8L2NvZGU+IHRvIHByb2R1Y2Ugd2FybmluZyBtZXNzYWdlcyB3aGVuCitxdWVzdGlvbmFibGUgcGFyYWxsZWwgaW5zdHJ1Y3Rpb25zIGFyZSBlbmNvdW50ZXJlZC4gIFRoaXMgb3B0aW9uIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCA8Y29kZT5nY2M8L2NvZGU+IGRpc2FibGVzIGl0IHdoZW4gaXQgaW52b2tlcworPGNvZGU+YXM8L2NvZGU+IGRpcmVjdGx5LiAgUXVlc3Rpb25hYmxlIGluc3RydWN0aW9ucyBhcmUgdGhvc2Ugd2hvc2UKK2JlaGF2aW91ciB3b3VsZCBiZSBkaWZmZXJlbnQgaWYgdGhleSB3ZXJlIGV4ZWN1dGVkIHNlcXVlbnRpYWxseS4gIEZvcgorZXhhbXBsZSB0aGUgY29kZSBmcmFnbWVudCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm12IHIxLCByMiB8fCBtdiByMywgcjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJvZHVjZXMgYQorZGlmZmVyZW50IHJlc3VsdCBmcm9tICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXYgcjEsIHIyIFxuIG12IHIzLCByMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzaW5jZSB0aGUgZm9ybWVyCittb3ZlcyByMSBpbnRvIHIzIGFuZCB0aGVuIHIyIGludG8gcjEsIHdoZXJlYXMgdGhlIGxhdGVyIG1vdmVzIHIyIGludG8gcjEKK2FuZCByMy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZFdwXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIxMSI+PC9hPlRoaXMgaXMgYSBzaG9ydGVyIHN5bm9ueW0gZm9yIHRoZSA8ZW0+LXdhcm4tZXhwbGljaXQtcGFyYWxsZWwtY29uZmxpY3RzPC9lbT4KK29wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1uby13YXJuLWV4cGxpY2l0LXBhcmFsbGVsLWNvbmZsaWN0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG5vXzAwMmR3YXJuXzAwMmRleHBsaWNpdF8wMDJkcGFyYWxsZWxfMDAyZGNvbmZsaWN0c18wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMTIiPjwvYT5JbnN0cnVjdHMgPGNvZGU+YXM8L2NvZGU+IG5vdCB0byBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMgd2hlbgorcXVlc3Rpb25hYmxlIHBhcmFsbGVsIGluc3RydWN0aW9ucyBhcmUgZW5jb3VudGVyZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25wPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkV25wXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIxMyI+PC9hPlRoaXMgaXMgYSBzaG9ydGVyIHN5bm9ueW0gZm9yIHRoZSA8ZW0+LW5vLXdhcm4tZXhwbGljaXQtcGFyYWxsZWwtY29uZmxpY3RzPC9lbT4KK29wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pZ25vcmUtcGFyYWxsZWwtY29uZmxpY3RzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkaWdub3JlXzAwMmRwYXJhbGxlbF8wMDJkY29uZmxpY3RzXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIxNCI+PC9hPlRoaXMgb3B0aW9uIHRlbGxzIHRoZSBhc3NlbWJsZXIncyB0byBzdG9wIGNoZWNraW5nIHBhcmFsbGVsCitpbnN0cnVjdGlvbnMgZm9yIGNvbnN0cmFpbnQgdmlvbGF0aW9ucy4gIFRoaXMgYWJpbGl0eSBpcyBwcm92aWRlZCBmb3IKK2hhcmR3YXJlIHZlbmRvcnMgdGVzdGluZyBjaGlwIGRlc2lnbnMgYW5kIHNob3VsZCBub3QgYmUgdXNlZCB1bmRlcgorbm9ybWFsIGNpcmN1bXN0YW5jZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm8taWdub3JlLXBhcmFsbGVsLWNvbmZsaWN0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG5vXzAwMmRpZ25vcmVfMDAyZHBhcmFsbGVsXzAwMmRjb25mbGljdHNfMDA3ZC1vcHRpb25fMDAyYy1NMzJSWC0xMjE1Ij48L2E+VGhpcyBvcHRpb24gcmVzdG9yZXMgdGhlIGFzc2VtYmxlcidzIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGNoZWNraW5nCitwYXJhbGxlbCBpbnN0cnVjdGlvbnMgdG8gZGV0ZWN0IGNvbnN0cmFpbnQgdmlvbGF0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1JcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZElwXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIxNiI+PC9hPlRoaXMgaXMgYSBzaG9ydGVyIHN5bm9ueW0gZm9yIHRoZSA8ZW0+LWlnbm9yZS1wYXJhbGxlbC1jb25mbGljdHM8L2VtPgorb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW5JcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG5JcF8wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMTciPjwvYT5UaGlzIGlzIGEgc2hvcnRlciBzeW5vbnltIGZvciB0aGUgPGVtPi1uby1pZ25vcmUtcGFyYWxsZWwtY29uZmxpY3RzPC9lbT4KK29wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi13YXJuLXVubWF0Y2hlZC1oaWdoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkd2Fybl8wMDJkdW5tYXRjaGVkXzAwMmRoaWdoXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMjE4Ij48L2E+VGhpcyBvcHRpb24gdGVsbHMgdGhlIGFzc2VtYmxlciB0byBwcm9kdWNlIGEgd2FybmluZyBtZXNzYWdlIGlmIGEKKzxjb2RlPi5oaWdoPC9jb2RlPiBwc2V1ZG8gb3AgaXMgZW5jb3VudGVyZWQgd2l0aG91dCBhIG1hdGNoaW5nIDxjb2RlPi5sb3c8L2NvZGU+Citwc2V1ZG8gb3AuICBUaGUgcHJlc2VuY2Ugb2Ygc3VjaCBhbiB1bm1hdGNoZWQgcHNldWRvIG9wIHVzdWFsbHkKK2luZGljYXRlcyBhIHByb2dyYW1taW5nIGVycm9yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW5vLXdhcm4tdW5tYXRjaGVkLWhpZ2g8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRub18wMDJkd2Fybl8wMDJkdW5tYXRjaGVkXzAwMmRoaWdoXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUi0xMjE5Ij48L2E+RGlzYWJsZXMgYSBwcmV2aW91c2x5IGVuYWJsZWQgPGVtPi13YXJuLXVubWF0Y2hlZC1oaWdoPC9lbT4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd1aDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZFd1aF8wMDdkLW9wdGlvbl8wMDJjLU0zMlJYLTEyMjAiPjwvYT5UaGlzIGlzIGEgc2hvcnRlciBzeW5vbnltIGZvciB0aGUgPGVtPi13YXJuLXVubWF0Y2hlZC1oaWdoPC9lbT4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdudWg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRXbnVoXzAwN2Qtb3B0aW9uXzAwMmMtTTMyUlgtMTIyMSI+PC9hPlRoaXMgaXMgYSBzaG9ydGVyIHN5bm9ueW0gZm9yIHRoZSA8ZW0+LW5vLXdhcm4tdW5tYXRjaGVkLWhpZ2g8L2VtPiBvcHRpb24uCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL00zMlJfMDAyZFdhcm5pbmdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJSXzAwMmRXYXJuaW5ncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZDlmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NMzJSXzAwMmRXYXJuaW5ncy5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NMzJSLVdhcm5pbmdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNMzJSXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJSXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNMzJSLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik0zMlJfMDAyZERpcmVjdGl2ZXMuaHRtbCNNMzJSXzAwMmREaXJlY3RpdmVzIiB0aXRsZT0iTTMyUi1EaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTMyUi1XYXJuaW5ncyI+PC9hPgorPGEgbmFtZT0iTTMyUl8wMDJkV2FybmluZ3MiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNMzJSXzAwMmREaXJlY3RpdmVzLmh0bWwjTTMyUl8wMDJkRGlyZWN0aXZlcyI+TTMyUi1EaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTMyUl8wMDJkRGVwZW5kZW50Lmh0bWwjTTMyUl8wMDJkRGVwZW5kZW50Ij5NMzJSLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjIuMyBNMzJSIFdhcm5pbmdzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy1NMzJSLTEyMzIiPjwvYT48YSBuYW1lPSJpbmRleC1NMzJSLXdhcm5pbmdzLTEyMzMiPjwvYT4KK1RoZXJlIGFyZSBzZXZlcmFsIHdhcm5pbmcgYW5kIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHByb2R1Y2VkIGJ5Cis8Y29kZT5hczwvY29kZT4gd2hpY2ggYXJlIHNwZWNpZmljIHRvIHRoZSBNMzJSOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5vdXRwdXQgb2YgMXN0IGluc3RydWN0aW9uIGlzIHRoZSBzYW1lIGFzIGFuIGlucHV0IHRvIDJuZCBpbnN0cnVjdGlvbiAtIGlzIHRoaXMgaW50ZW50aW9uYWwgPzwvY29kZT48ZGQ+VGhpcyBtZXNzYWdlIGlzIG9ubHkgcHJvZHVjZWQgaWYgd2FybmluZ3MgZm9yIGV4cGxpY2l0IHBhcmFsbGVsCitjb25mbGljdHMgaGF2ZSBiZWVuIGVuYWJsZWQuICBJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYXNzZW1ibGVyIGhhcworZW5jb3VudGVyZWQgYSBwYXJhbGxlbCBpbnN0cnVjdGlvbiBpbiB3aGljaCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb2YKK3RoZSBsZWZ0IGhhbmQgaW5zdHJ1Y3Rpb24gaXMgdXNlZCBhcyBhbiBpbnB1dCByZWdpc3RlciBpbiB0aGUgcmlnaHQgaGFuZAoraW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZSBpbiB0aGlzIGNvZGUgZnJhZ21lbnQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXYgcjEsIHIyIHx8IG5lZyByMywgcjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVnaXN0ZXIgcjEgaXMgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZQorbW92ZSBpbnN0cnVjdGlvbiBhbmQgdGhlIGlucHV0IHRvIHRoZSBuZWcgaW5zdHJ1Y3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5vdXRwdXQgb2YgMm5kIGluc3RydWN0aW9uIGlzIHRoZSBzYW1lIGFzIGFuIGlucHV0IHRvIDFzdCBpbnN0cnVjdGlvbiAtIGlzIHRoaXMgaW50ZW50aW9uYWwgPzwvY29kZT48ZGQ+VGhpcyBtZXNzYWdlIGlzIG9ubHkgcHJvZHVjZWQgaWYgd2FybmluZ3MgZm9yIGV4cGxpY2l0IHBhcmFsbGVsCitjb25mbGljdHMgaGF2ZSBiZWVuIGVuYWJsZWQuICBJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgYXNzZW1ibGVyIGhhcworZW5jb3VudGVyZWQgYSBwYXJhbGxlbCBpbnN0cnVjdGlvbiBpbiB3aGljaCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb2YKK3RoZSByaWdodCBoYW5kIGluc3RydWN0aW9uIGlzIHVzZWQgYXMgYW4gaW5wdXQgcmVnaXN0ZXIgaW4gdGhlIGxlZnQgaGFuZAoraW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZSBpbiB0aGlzIGNvZGUgZnJhZ21lbnQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXYgcjEsIHIyIHx8IG5lZyByMiwgcjM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVnaXN0ZXIgcjIgaXMgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZQorbmVnIGluc3RydWN0aW9uIGFuZCB0aGUgaW5wdXQgdG8gdGhlIG1vdmUgaW5zdHJ1Y3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5pbnN0cnVjdGlvbiAmbHNxdW87PC9jb2RlPjxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uLi48L3NwYW4+PC9zYW1wPjxjb2RlPiZyc3F1bzsgaXMgZm9yIHRoZSBNMzJSWCBvbmx5PC9jb2RlPjxkZD5UaGlzIG1lc3NhZ2UgaXMgcHJvZHVjZWQgd2hlbiB0aGUgYXNzZW1ibGVyIGVuY291bnRlcnMgYW4gaW5zdHJ1Y3Rpb24KK3doaWNoIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBNMzJSeCBwcm9jZXNzb3IsIGFuZCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTMycng8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2NvbW1hbmQgbGluZSBmbGFnIGhhcyBub3QgYmVlbiBzcGVjaWZpZWQgdG8gYWxsb3cgYXNzZW1ibHkgb2Ygc3VjaAoraW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dW5rbm93biBpbnN0cnVjdGlvbiAmbHNxdW87PC9jb2RlPjxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uLi48L3NwYW4+PC9zYW1wPjxjb2RlPiZyc3F1bzs8L2NvZGU+PGRkPlRoaXMgbWVzc2FnZSBpcyBwcm9kdWNlZCB3aGVuIHRoZSBhc3NlbWJsZXIgZW5jb3VudGVycyBhbiBpbnN0cnVjdGlvbgord2hpY2ggaXQgZG9lcyBub3QgcmVjb2duaXplLgorCisgICAgIDxicj48ZHQ+PGNvZGU+b25seSB0aGUgTk9QIGluc3RydWN0aW9uIGNhbiBiZSBpc3N1ZWQgaW4gcGFyYWxsZWwgb24gdGhlIG0zMnI8L2NvZGU+PGRkPlRoaXMgbWVzc2FnZSBpcyBwcm9kdWNlZCB3aGVuIHRoZSBhc3NlbWJsZXIgZW5jb3VudGVycyBhIHBhcmFsbGVsCitpbnN0cnVjdGlvbiB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIGEgTk9QIGluc3RydWN0aW9uIGFuZCB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW0zMnJ4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBmbGFnIGhhcyBub3QgYmVlbiBzcGVjaWZpZWQuICBPbmx5IHRoZSBNMzJSeAorcHJvY2Vzc29yIGlzIGFibGUgdG8gZXhlY3V0ZSB0d28gaW5zdHJ1Y3Rpb25zIGluIHBhcmFsbGVsLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aW5zdHJ1Y3Rpb24gJmxzcXVvOzwvY29kZT48c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Li4uPC9zcGFuPjwvc2FtcD48Y29kZT4mcnNxdW87IGNhbm5vdCBiZSBleGVjdXRlZCBpbiBwYXJhbGxlbC48L2NvZGU+PGRkPlRoaXMgbWVzc2FnZSBpcyBwcm9kdWNlZCB3aGVuIHRoZSBhc3NlbWJsZXIgZW5jb3VudGVycyBhIHBhcmFsbGVsCitpbnN0cnVjdGlvbiB3aGljaCBpcyBtYWRlIHVwIG9mIG9uZSBvciB0d28gaW5zdHJ1Y3Rpb25zIHdoaWNoIGNhbm5vdCBiZQorZXhlY3V0ZWQgaW4gcGFyYWxsZWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT5JbnN0cnVjdGlvbnMgc2hhcmUgdGhlIHNhbWUgZXhlY3V0aW9uIHBpcGVsaW5lPC9jb2RlPjxkZD5UaGlzIG1lc3NhZ2UgaXMgcHJvZHVjZWQgd2hlbiB0aGUgYXNzZW1ibGVyIGVuY291bnRlcnMgYSBwYXJhbGxlbAoraW5zdHJ1Y3Rpb24gd2hvZXMgY29tcG9uZW50cyBib3RoIHVzZSB0aGUgc2FtZSBleGVjdXRpb24gcGlwZWxpbmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5JbnN0cnVjdGlvbnMgd3JpdGUgdG8gdGhlIHNhbWUgZGVzdGluYXRpb24gcmVnaXN0ZXIuPC9jb2RlPjxkZD5UaGlzIG1lc3NhZ2UgaXMgcHJvZHVjZWQgd2hlbiB0aGUgYXNzZW1ibGVyIGVuY291bnRlcnMgYSBwYXJhbGxlbAoraW5zdHJ1Y3Rpb24gd2hlcmUgYm90aCBjb21wb25lbnRzIGF0dGVtcHQgdG8gbW9kaWZ5IHRoZSBzYW1lIHJlZ2lzdGVyLiAKK0ZvciBleGFtcGxlIHRoZXNlIGNvZGUgZnJhZ21lbnRzIHdpbGwgcHJvZHVjZSB0aGlzIG1lc3NhZ2U6CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm12IHIxLCByMiB8fCBuZWcgcjEsIHIzPC9zcGFuPjwvc2FtcD4mcnNxdW87CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpsIHIwIHx8IG12IHIxNCwgcjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3QgcjIsIEAtcjEgfHwgbXYgcjEsIHIzPC9zcGFuPjwvc2FtcD4mcnNxdW87CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm12IHIxLCByMiB8fCBsZCByMCwgQHIxKzwvc3Bhbj48L3NhbXA+JnJzcXVvOworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jbXAgcjEsIHIyIHx8IGFkZHggcjMsIHI0PC9zcGFuPjwvc2FtcD4mcnNxdW87IChCb3RoIHdyaXRlIHRvIHRoZSBjb25kaXRpb24gYml0KQorCisgICA8L2RsPgorCis8IS0tIENvcHlyaWdodCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAyMDAwLCAyMDAzLCAtLT4KKzwhLS0gMjAwNCwgMjAwNiwgMjAwNywgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEhDMTFfMDAyZEJyYW5jaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkQnJhbmNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzNjNkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEhDMTFfMDAyZEJyYW5jaC5odG1sCkBAIC0wLDAgKzEsMTA2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NNjhIQzExLUJyYW5jaCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTTY4SEMxMV8wMDJkb3Bjb2Rlcy5odG1sI002OEhDMTFfMDAyZG9wY29kZXMiIHRpdGxlPSJNNjhIQzExLW9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNNjhIQzExLUJyYW5jaCI+PC9hPgorPGEgbmFtZT0iTTY4SEMxMV8wMDJkQnJhbmNoIj48L2E+Cis8cD4KK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTY4SEMxMV8wMDJkb3Bjb2Rlcy5odG1sI002OEhDMTFfMDAyZG9wY29kZXMiPk02OEhDMTEtb3Bjb2RlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjQuNi4xIEJyYW5jaCBJbXByb3ZlbWVudDwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3Bjb2Rlc18wMDJjLU02OEhDMTEtMTM0OSI+PC9hPjxhIG5hbWU9ImluZGV4LU02OEhDMTEtcHNldWRvXzAwMmRvcGNvZGVzLTEzNTAiPjwvYT48YSBuYW1lPSJpbmRleC1icmFuY2gtaW1wcm92ZW1lbnRfMDAyYy1NNjhIQzExLTEzNTEiPjwvYT48YSBuYW1lPSJpbmRleC1NNjhIQzExLWJyYW5jaC1pbXByb3ZlbWVudC0xMzUyIj48L2E+CitDZXJ0YWluIHBzZXVkbyBvcGNvZGVzIGFyZSBwZXJtaXR0ZWQgZm9yIGJyYW5jaCBpbnN0cnVjdGlvbnMuIAorVGhleSBleHBhbmQgdG8gdGhlIHNob3J0ZXN0IGJyYW5jaCBpbnN0cnVjdGlvbiB0aGF0IHJlYWNoIHRoZQordGFyZ2V0LiBHZW5lcmFsbHkgdGhlc2UgbW5lbW9uaWNzIGFyZSBtYWRlIGJ5IHByZXBlbmRpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvCit0aGUgc3RhcnQgb2YgTW90b3JvbGEgbW5lbW9uaWMuIFRoZXNlIHBzZXVkbyBvcGNvZGVzIGFyZSBub3QgYWZmZWN0ZWQKK2J5IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tc2hvcnQtYnJhbmNoZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWZvcmNlLWxvbmctYnJhbmNoZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucy4KKworICAgPHA+VGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBwc2V1ZG8tb3BlcmF0aW9ucy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYWNlbWVudCBXaWR0aAorICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgIHwgICAgLS1zaG9ydC1icmFuY2hlcyAgICAgICAgICAgLS1mb3JjZS1sb25nLWJyYW5jaGVzICAgICAgICAgfAorICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgIE9wIHxCWVRFICAgICAgICAgICAgIFdPUkQgICAgIHwgQllURSAgICAgICAgICBXT1JEICAgICAgICAgICAgICAgfAorICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgYnNyIHwgYnNyICZsdDtwYy1yZWwmZ3Q7ICAgICZsdDtlcnJvciZndDsgIHwgICAgICAgICAgICAgICBqc3IgJmx0O2FicyZndDsgICAgICAgICAgfAorICAgICAgYnJhIHwgYnJhICZsdDtwYy1yZWwmZ3Q7ICAgICZsdDtlcnJvciZndDsgIHwgICAgICAgICAgICAgICBqbXAgJmx0O2FicyZndDsgICAgICAgICAgfAorICAgICBqYnNyIHwgYnNyICZsdDtwYy1yZWwmZ3Q7ICAganNyICZsdDthYnMmZ3Q7IHwgYnNyICZsdDtwYy1yZWwmZ3Q7ICBqc3IgJmx0O2FicyZndDsgICAgICAgICAgfAorICAgICBqYnJhIHwgYnJhICZsdDtwYy1yZWwmZ3Q7ICAgam1wICZsdDthYnMmZ3Q7IHwgYnJhICZsdDtwYy1yZWwmZ3Q7ICBqbXAgJmx0O2FicyZndDsgICAgICAgICAgfAorICAgICAgYlhYIHwgYlhYICZsdDtwYy1yZWwmZ3Q7ICAgICZsdDtlcnJvciZndDsgIHwgICAgICAgICAgICAgICBiTlggKzM7IGptcCAmbHQ7YWJzJmd0OyAgfAorICAgICBqYlhYIHwgYlhYICZsdDtwYy1yZWwmZ3Q7ICAgYk5YICszOyAgIHwgYlhYICZsdDtwYy1yZWwmZ3Q7ICBiTlggKzM7IGptcCAmbHQ7YWJzJmd0OyAgfAorICAgICAgICAgIHwgICAgICAgICAgICAgICAgam1wICZsdDthYnMmZ3Q7IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICBYWDogY29uZGl0aW9uCisgICAgIE5YOiBuZWdhdGl2ZSBvZiBjb25kaXRpb24gWFgKKyAgICAgCis8L3ByZT4KKyAgICAgPGRsPgorPGR0Pjxjb2RlPmpic3I8L2NvZGU+PGR0Pjxjb2RlPmpicmE8L2NvZGU+PGRkPlRoZXNlIGFyZSB0aGUgc2ltcGxlc3QganVtcCBwc2V1ZG8tb3BlcmF0aW9uczsgdGhleSBhbHdheXMgbWFwIHRvIG9uZQorcGFydGljdWxhciBtYWNoaW5lIGluc3RydWN0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGRpc3BsYWNlbWVudCB0byB0aGUKK2JyYW5jaCB0YXJnZXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5qYjwvY29kZT48dmFyPlhYPC92YXI+PGRkPkhlcmUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+amI8L3NwYW4+PHZhcj5YWDwvdmFyPjwvc2FtcD4mcnNxdW87IHN0YW5kcyBmb3IgYW4gZW50aXJlIGZhbWlseSBvZiBwc2V1ZG8tb3BlcmF0aW9ucywKK3doZXJlIDx2YXI+WFg8L3Zhcj4gaXMgYSBjb25kaXRpb25hbCBicmFuY2ggb3IgY29uZGl0aW9uLWNvZGUgdGVzdC4gIFRoZSBmdWxsCitsaXN0IG9mIHBzZXVkby1vcHMgaW4gdGhpcyBmYW1pbHkgaXM6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICBqYmNjICAgamJlcSAgIGpiZ2UgICBqYmd0ICAgamJoaSAgIGpidnMgICBqYnBsICBqYmxvCisgICAgICAgICAgIGpiY3MgICBqYm5lICAgamJsdCAgIGpibGUgICBqYmxzICAgamJ2YyAgIGpibWkKKzwvcHJlPgorICAgICA8cD5Gb3IgdGhlIGNhc2VzIG9mIG5vbi1QQyByZWxhdGl2ZSBkaXNwbGFjZW1lbnRzIGFuZCBsb25nIGRpc3BsYWNlbWVudHMsCis8Y29kZT5hczwvY29kZT4gaXNzdWVzIGEgbG9uZ2VyIGNvZGUgZnJhZ21lbnQgaW4gdGVybXMgb2YKKzx2YXI+Tlg8L3Zhcj4sIHRoZSBvcHBvc2l0ZSBjb25kaXRpb24gdG8gPHZhcj5YWDwvdmFyPi4gIEZvciBleGFtcGxlLCBmb3IgdGhlCitub24tUEMgcmVsYXRpdmUgY2FzZToKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgIGpiPHZhcj5YWDwvdmFyPiBmb28KKzwvcHJlPgorICAgICA8cD5naXZlcworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIGI8dmFyPk5YPC92YXI+cyBvb2YKKyAgICAgICAgICAgICAgIGptcCBmb28KKyAgICAgICAgICAgb29mOgorPC9wcmU+CisgICAgIDwvZGw+CisKKzwhLS0gQ29weXJpZ2h0IDIwMDksIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDk0NDljCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTY4SEMxMS1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik02OEtfMDAyZERlcGVuZGVudC5odG1sI002OEtfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik02OEstRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwjTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTWljcm9CbGF6ZS1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNNjhIQzExLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iTTY4SEMxMV8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1pY3JvQmxhemVfMDAyZERlcGVuZGVudC5odG1sI01pY3JvQmxhemVfMDAyZERlcGVuZGVudCI+TWljcm9CbGF6ZS1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNNjhLXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhLXzAwMmREZXBlbmRlbnQiPk02OEstRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjI0IE02OEhDMTEgYW5kIE02OEhDMTIgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTTY4SEMxMS1hbmQtTTY4SEMxMi1zdXBwb3J0LTEyOTUiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNNNjhIQzExXzAwMmRPcHRzIj5NNjhIQzExLU9wdHM8L2E+OiAgICAgICAgICAgICAgICAgICAgTTY4SEMxMSBhbmQgTTY4SEMxMiBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNNNjhIQzExXzAwMmRTeW50YXgiPk02OEhDMTEtU3ludGF4PC9hPjogICAgICAgICAgICAgICAgICBTeW50YXgKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ik02OEhDMTFfMDAyZE1vZGlmaWVycy5odG1sI002OEhDMTFfMDAyZE1vZGlmaWVycyI+TTY4SEMxMS1Nb2RpZmllcnM8L2E+OiAgICAgICAgICAgICAgIFN5bWJvbGljIE9wZXJhbmQgTW9kaWZpZXJzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4SEMxMV8wMDJkRGlyZWN0aXZlcyI+TTY4SEMxMS1EaXJlY3RpdmVzPC9hPjogICAgICAgICAgICAgIEFzc2VtYmxlciBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJNNjhIQzExXzAwMmRGbG9hdC5odG1sI002OEhDMTFfMDAyZEZsb2F0Ij5NNjhIQzExLUZsb2F0PC9hPjogICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9Ik02OEhDMTFfMDAyZG9wY29kZXMuaHRtbCNNNjhIQzExXzAwMmRvcGNvZGVzIj5NNjhIQzExLW9wY29kZXM8L2E+OiAgICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODNhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTY4SEMxMS1EaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNNjhIQzExLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik02OEhDMTFfMDAyZE1vZGlmaWVycy5odG1sI002OEhDMTFfMDAyZE1vZGlmaWVycyIgdGl0bGU9Ik02OEhDMTEtTW9kaWZpZXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCNNNjhIQzExXzAwMmRGbG9hdCIgdGl0bGU9Ik02OEhDMTEtRmxvYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNNjhIQzExLURpcmVjdGl2ZXMiPjwvYT4KKzxhIG5hbWU9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCNNNjhIQzExXzAwMmRGbG9hdCI+TTY4SEMxMS1GbG9hdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik02OEhDMTFfMDAyZE1vZGlmaWVycy5odG1sI002OEhDMTFfMDAyZE1vZGlmaWVycyI+TTY4SEMxMS1Nb2RpZmllcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiPk02OEhDMTEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yNC40IEFzc2VtYmxlciBEaXJlY3RpdmVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZXNfMDAyYy1NNjhIQzExLTEzMjYiPjwvYT48YSBuYW1lPSJpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlc18wMDJjLU02OEhDMTItMTMyNyI+PC9hPjxhIG5hbWU9ImluZGV4LU02OEhDMTEtYXNzZW1ibGVyLWRpcmVjdGl2ZXMtMTMyOCI+PC9hPjxhIG5hbWU9ImluZGV4LU02OEhDMTItYXNzZW1ibGVyLWRpcmVjdGl2ZXMtMTMyOSI+PC9hPgorVGhlIDY4SEMxMSBhbmQgNjhIQzEyIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IGhhdmUgdGhlIGZvbGxvd2luZworc3BlY2lmaWMgYXNzZW1ibGVyIGRpcmVjdGl2ZXM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi5yZWxheDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZXJlbGF4XzAwMmMtTTY4SEMxMS0xMzMwIj48L2E+PGEgbmFtZT0iaW5kZXgtTTY4SEMxMS1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlcmVsYXgtMTMzMSI+PC9hPlRoZSByZWxheCBkaXJlY3RpdmUgaXMgdXNlZCBieSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HTlUgQ29tcGlsZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gZW1pdCBhIHNwZWNpZmljCityZWxvY2F0aW9uIHRvIG1hcmsgYSBncm91cCBvZiBpbnN0cnVjdGlvbnMgZm9yIGxpbmtlciByZWxheGF0aW9uLiAKK1RoZSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBncm91cCBtdXN0IGJlIGtub3duIHRvIHRoZSBsaW5rZXIKK3NvIHRoYXQgcmVsYXhhdGlvbiBjYW4gYmUgcGVyZm9ybWVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Lm1vZGUgW21zaG9ydHxtbG9uZ3xtc2hvcnQtZG91YmxlfG1sb25nLWRvdWJsZV08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVtb2RlXzAwMmMtTTY4SEMxMS0xMzMyIj48L2E+PGEgbmFtZT0iaW5kZXgtTTY4SEMxMS1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlbW9kZS0xMzMzIj48L2E+VGhpcyBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBBQkkuICBJdCBvdmVycmlkZXMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1zaG9ydDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1sb25nPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tc2hvcnQtZG91YmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbG9uZy1kb3VibGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5mYXIgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVmYXJfMDAyYy1NNjhIQzExLTEzMzQiPjwvYT48YSBuYW1lPSJpbmRleC1NNjhIQzExLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVmYXItMTMzNSI+PC9hPlRoaXMgZGlyZWN0aXZlIG1hcmtzIHRoZSBzeW1ib2wgYXMgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZhcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzeW1ib2wgbWVhbmluZyB0aGF0IGl0Cit1c2VzIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsL3J0Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYWxsaW5nIGNvbnZlbnRpb24gYXMgb3Bwb3NlZCB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpzci9ydHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorRHVyaW5nIGEgZmluYWwgbGluaywgdGhlIGxpbmtlciB3aWxsIGlkZW50aWZ5IHJlZmVyZW5jZXMgdG8gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZmFyPC9zcGFuPjwvc2FtcD4mcnNxdW87CitzeW1ib2wgYW5kIHdpbGwgdmVyaWZ5IHRoZSBwcm9wZXIgY2FsbGluZyBjb252ZW50aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmludGVycnVwdCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZWludGVycnVwdF8wMDJjLU02OEhDMTEtMTMzNiI+PC9hPjxhIG5hbWU9ImluZGV4LU02OEhDMTEtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZWludGVycnVwdC0xMzM3Ij48L2E+VGhpcyBkaXJlY3RpdmUgbWFya3MgdGhlIHN5bWJvbCBhcyBhbiBpbnRlcnJ1cHQgZW50cnkgcG9pbnQuIAorVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuIHVzZWQgYnkgdGhlIGRlYnVnZ2VyIHRvIGNvcnJlY3RseSB1bndpbmQgdGhlCitmcmFtZSBhY3Jvc3MgaW50ZXJydXB0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi54cmVmYiA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZXhyZWZiXzAwMmMtTTY4SEMxMS0xMzM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtTTY4SEMxMS1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJleHJlZmItMTMzOSI+PC9hPlRoaXMgZGlyZWN0aXZlIGlzIGRlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U3BlY2lmaWNhdGlvbiBmb3IgTW90b3JvbGEgOCBhbmQgMTYtQml0IEFzc2VtYmx5IExhbmd1YWdlIElucHV0CitTdGFuZGFyZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgaXMgaWdub3JlZC4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkRmxvYXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEhDMTFfMDAyZEZsb2F0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhYmJjNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEhDMTFfMDAyZEZsb2F0Lmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTY4SEMxMS1GbG9hdCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTTY4SEMxMV8wMDJkRGVwZW5kZW50Lmh0bWwjTTY4SEMxMV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTTY4SEMxMS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNNjhIQzExXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4SEMxMV8wMDJkRGlyZWN0aXZlcyIgdGl0bGU9Ik02OEhDMTEtRGlyZWN0aXZlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik02OEhDMTFfMDAyZG9wY29kZXMuaHRtbCNNNjhIQzExXzAwMmRvcGNvZGVzIiB0aXRsZT0iTTY4SEMxMS1vcGNvZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTY4SEMxMS1GbG9hdCI+PC9hPgorPGEgbmFtZT0iTTY4SEMxMV8wMDJkRmxvYXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTY4SEMxMV8wMDJkb3Bjb2Rlcy5odG1sI002OEhDMTFfMDAyZG9wY29kZXMiPk02OEhDMTEtb3Bjb2RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhIQzExXzAwMmREaXJlY3RpdmVzIj5NNjhIQzExLURpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiPk02OEhDMTEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yNC41IEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1NNjhIQzExLTEzNDAiPjwvYT48YSBuYW1lPSJpbmRleC1NNjhIQzExLWZsb2F0aW5nLXBvaW50LTEzNDEiPjwvYT5QYWNrZWQgZGVjaW1hbCAoUCkgZm9ybWF0IGZsb2F0aW5nIGxpdGVyYWxzIGFyZSBub3Qgc3VwcG9ydGVkLiAKK0ZlZWwgZnJlZSB0byBhZGQgdGhlIGNvZGUhCisKKyAgIDxwPlRoZSBmbG9hdGluZyBwb2ludCBmb3JtYXRzIGdlbmVyYXRlZCBieSBkaXJlY3RpdmVzIGFyZSB0aGVzZS4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NNjhIQzExLTEzNDIiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LmZsb2F0PC9jb2RlPjxkZD48Y29kZT5TaW5nbGU8L2NvZGU+IHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jkb3VibGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NNjhIQzExLTEzNDMiPjwvYT48YnI+PGR0Pjxjb2RlPi5kb3VibGU8L2NvZGU+PGRkPjxjb2RlPkRvdWJsZTwvY29kZT4gcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmV4dGVuZF8wMDdkLWRpcmVjdGl2ZS1NNjhIQzExLTEzNDQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxkb3VibGVfMDA3ZC1kaXJlY3RpdmUtTTY4SEMxMS0xMzQ1Ij48L2E+PGJyPjxkdD48Y29kZT4uZXh0ZW5kPC9jb2RlPjxkdD48Y29kZT4ubGRvdWJsZTwvY29kZT48ZGQ+PGNvZGU+RXh0ZW5kZWQ8L2NvZGU+IHByZWNpc2lvbiAoPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+KSBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkTW9kaWZpZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhIQzExXzAwMmRNb2RpZmllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjYwNGZkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkTW9kaWZpZXJzLmh0bWwKQEAgLTAsMCArMSwxMDAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk02OEhDMTEtTW9kaWZpZXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNNjhIQzExLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI002OEhDMTFfMDAyZFN5bnRheCIgdGl0bGU9Ik02OEhDMTEtU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiIHRpdGxlPSJNNjhIQzExLURpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNNjhIQzExLU1vZGlmaWVycyI+PC9hPgorPGEgbmFtZT0iTTY4SEMxMV8wMDJkTW9kaWZpZXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik02OEhDMTFfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhIQzExXzAwMmREaXJlY3RpdmVzIj5NNjhIQzExLURpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNNNjhIQzExXzAwMmRTeW50YXgiPk02OEhDMTEtU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTY4SEMxMV8wMDJkRGVwZW5kZW50Lmh0bWwjTTY4SEMxMV8wMDJkRGVwZW5kZW50Ij5NNjhIQzExLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjQuMyBTeW1ib2xpYyBPcGVyYW5kIE1vZGlmaWVyczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LU02OEhDMTEtbW9kaWZpZXJzLTEzMjMiPjwvYT48YSBuYW1lPSJpbmRleC1zeW50YXhfMDAyYy1NNjhIQzExLTEzMjQiPjwvYT4KK1RoZSBhc3NlbWJsZXIgc3VwcG9ydHMgc2V2ZXJhbCBtb2RpZmllcnMgd2hlbiB1c2luZyBzeW1ib2wgYWRkcmVzc2VzCitpbiA2OEhDMTEgYW5kIDY4SEMxMiBpbnN0cnVjdGlvbiBvcGVyYW5kcy4gIFRoZSBnZW5lcmFsIHN5bnRheCBpcwordGhlIGZvbGxvd2luZzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICVtb2RpZmllcihzeW1ib2wpCis8L3ByZT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1zeW1ib2wtbW9kaWZpZXJzLTEzMjUiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+JWFkZHI8L2NvZGU+PGRkPlRoaXMgbW9kaWZpZXIgaW5kaWNhdGVzIHRvIHRoZSBhc3NlbWJsZXIgYW5kIGxpbmtlciB0byB1c2UKK3RoZSAxNi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzeW1ib2wuICBUaGlzIGlzIGludGVuZGVkCit0byBiZSB1c2VkIG9uIG1lbW9yeSB3aW5kb3cgc3lzdGVtcyB0byBtYXAgYSBzeW1ib2wgaW4gdGhlIG1lbW9yeSBiYW5rIHdpbmRvdy4gCitJZiB0aGUgc3ltYm9sIGlzIGluIGEgbWVtb3J5IGV4cGFuc2lvbiBwYXJ0LCB0aGUgcGh5c2ljYWwgYWRkcmVzcworY29ycmVzcG9uZHMgdG8gdGhlIHN5bWJvbCBhZGRyZXNzIHdpdGhpbiB0aGUgbWVtb3J5IGJhbmsgd2luZG93LiAKK0lmIHRoZSBzeW1ib2wgaXMgbm90IGluIGEgbWVtb3J5IGV4cGFuc2lvbiBwYXJ0LCB0aGlzIGlzIHRoZSBzeW1ib2wgYWRkcmVzcworKHVzaW5nIG9yIG5vdCB1c2luZyB0aGUgJWFkZHIgbW9kaWZpZXIgaGFzIG5vIGVmZmVjdCBpbiB0aGF0IGNhc2UpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JXBhZ2U8L2NvZGU+PGRkPlRoaXMgbW9kaWZpZXIgaW5kaWNhdGVzIHRvIHVzZSB0aGUgbWVtb3J5IHBhZ2UgbnVtYmVyIGNvcnJlc3BvbmRpbmcKK3RvIHRoZSBzeW1ib2wuICBJZiB0aGUgc3ltYm9sIGlzIGluIGEgbWVtb3J5IGV4cGFuc2lvbiBwYXJ0LCBpdHMgcGFnZQorbnVtYmVyIGlzIGNvbXB1dGVkIGJ5IHRoZSBsaW5rZXIgYXMgYSBudW1iZXIgdXNlZCB0byBtYXAgdGhlIHBhZ2UgY29udGFpbmluZwordGhlIHN5bWJvbCBpbiB0aGUgbWVtb3J5IGJhbmsgd2luZG93LiAgSWYgdGhlIHN5bWJvbCBpcyBub3QgaW4gYSBtZW1vcnkKK2V4cGFuc2lvbiBwYXJ0LCB0aGUgcGFnZSBudW1iZXIgaXMgMC4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVoaTwvY29kZT48ZGQ+VGhpcyBtb2RpZmllciBpbmRpY2F0ZXMgdG8gdXNlIHRoZSA4LWJpdCBoaWdoIHBhcnQgb2YgdGhlIHBoeXNpY2FsCithZGRyZXNzIG9mIHRoZSBzeW1ib2wuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lbG88L2NvZGU+PGRkPlRoaXMgbW9kaWZpZXIgaW5kaWNhdGVzIHRvIHVzZSB0aGUgOC1iaXQgbG93IHBhcnQgb2YgdGhlIHBoeXNpY2FsCithZGRyZXNzIG9mIHRoZSBzeW1ib2wuCisKKyAgIDwvZGw+CisKKyAgIDxwPkZvciBleGFtcGxlIGEgNjhIQzEyIGNhbGwgdG8gYSBmdW5jdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvb19leGFtcGxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN0b3JlZCBpbiBtZW1vcnkKK2V4cGFuc2lvbiBwYXJ0IGNvdWxkIGJlIHdyaXR0ZW4gYXMgZm9sbG93czoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGNhbGwgJWFkZHIoZm9vX2V4YW1wbGUpLCVwYWdlKGZvb19leGFtcGxlKQorPC9wcmU+CisgICA8cD5hbmQgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBjYWxsIGZvb19leGFtcGxlCis8L3ByZT4KKyAgIDxwPkFuZCBmb3IgNjhIQzExIGl0IGNvdWxkIGJlIHdyaXR0ZW4gYXMgZm9sbG93czoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGxkYWIgIyVwYWdlKGZvb19leGFtcGxlKQorICAgICBzdGFiIF9wYWdlX3N3aXRjaAorICAgICBqc3IgICVhZGRyKGZvb19leGFtcGxlKQorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhIQzExXzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhIQzExXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwMzFmOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEhDMTFfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDEzNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTY4SEMxMS1PcHRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNNjhIQzExLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI002OEhDMTFfMDAyZFN5bnRheCIgdGl0bGU9Ik02OEhDMTEtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTY4SEMxMS1PcHRzIj48L2E+Cis8YSBuYW1lPSJNNjhIQzExXzAwMmRPcHRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik02OEhDMTFfMDAyZFN5bnRheC5odG1sI002OEhDMTFfMDAyZFN5bnRheCI+TTY4SEMxMS1TeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiPk02OEhDMTEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yNC4xIE02OEhDMTEgYW5kIE02OEhDMTIgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1NNjhIQzExLTEyOTYiPjwvYT48YSBuYW1lPSJpbmRleC1NNjhIQzExLW9wdGlvbnMtMTI5NyI+PC9hPlRoZSBNb3Rvcm9sYSA2OEhDMTEgYW5kIDY4SEMxMiB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBoYXZlIGEgZmV3IG1hY2hpbmUKK2RlcGVuZGVudCBvcHRpb25zLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG02OGhjMTFfMDA3ZC0xMjk4Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1tNjhoYzExPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBzd2l0Y2hlcyB0aGUgYXNzZW1ibGVyIGludG8gdGhlIE02OEhDMTEgbW9kZS4gSW4gdGhpcyBtb2RlLAordGhlIGFzc2VtYmxlciBvbmx5IGFjY2VwdHMgNjhIQzExIG9wZXJhbmRzIGFuZCBtbmVtb25pY3MuIEl0IHByb2R1Y2VzCitjb2RlIGZvciB0aGUgNjhIQzExLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtNjhoYzEyXzAwN2QtMTI5OSI+PC9hPjxicj48ZHQ+PGNvZGU+LW02OGhjMTI8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHN3aXRjaGVzIHRoZSBhc3NlbWJsZXIgaW50byB0aGUgTTY4SEMxMiBtb2RlLiBJbiB0aGlzIG1vZGUsCit0aGUgYXNzZW1ibGVyIGFsc28gYWNjZXB0cyA2OEhDMTIgb3BlcmFuZHMgYW5kIG1uZW1vbmljcy4gSXQgcHJvZHVjZXMKK2NvZGUgZm9yIHRoZSA2OEhDMTIuIEEgZmV3IDY4SEMxMSBpbnN0cnVjdGlvbnMgYXJlIHJlcGxhY2VkIGJ5Citzb21lIDY4SEMxMiBpbnN0cnVjdGlvbnMgYXMgcmVjb21tZW5kZWQgYnkgTW90b3JvbGEgc3BlY2lmaWNhdGlvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG02OGhjczEyXzAwN2QtMTMwMCI+PC9hPjxicj48ZHQ+PGNvZGU+LW02OGhjczEyPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBzd2l0Y2hlcyB0aGUgYXNzZW1ibGVyIGludG8gdGhlIE02OEhDUzEyIG1vZGUuICBUaGlzIG1vZGUgaXMKK3NpbWlsYXIgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4aGMxMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBidXQgc3BlY2lmaWVzIHRvIGFzc2VtYmxlIGZvciB0aGUgNjhIQ1MxMgorc2VyaWVzLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyBvbiB0aGUgYXNzZW1ibGluZyBvZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3ZiPC9zcGFuPjwvc2FtcD4mcnNxdW87CithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3Z3PC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9uIHdoZW4gYSBQQy1yZWxhdGl2ZSBvcGVyYW5kIGlzIHVzZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1tOXMxMnhfMDA3ZC0xMzAxIj48L2E+PGJyPjxkdD48Y29kZT4tbW05czEyeDwvY29kZT48ZGQ+VGhpcyBvcHRpb24gc3dpdGNoZXMgdGhlIGFzc2VtYmxlciBpbnRvIHRoZSBNOVMxMlggbW9kZS4gIFRoaXMgbW9kZSBpcworc2ltaWxhciB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjhoYzEyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJ1dCBzcGVjaWZpZXMgdG8gYXNzZW1ibGUgZm9yIHRoZSBTMTJYCitzZXJpZXMgd2hpY2ggaXMgYSBzdXBlcnNldCBvZiB0aGUgSENTMTIuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1tOXMxMnhnXzAwN2QtMTMwMiI+PC9hPjxicj48ZHQ+PGNvZGU+LW1tOXMxMnhnPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBzd2l0Y2hlcyB0aGUgYXNzZW1ibGVyIGludG8gdGhlIFhHQVRFIG1vZGUgZm9yIHRoZSBSSVNDCitjby1wcm9jZXNzb3IgZmVhdHVyZWQgb24gc29tZSBTMTJYLWZhbWlseSBjaGlwcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmR4Z2F0ZV8wMDJkcmFtb2Zmc2V0XzAwN2QtMTMwMyI+PC9hPjxicj48ZHQ+PGNvZGU+LS14Z2F0ZS1yYW1vZmZzZXQ8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGluc3RydWN0cyB0aGUgbGlua2VyIHRvIG9mZnNldCBSQU0gYWRkcmVzc2VzIGZyb20gUzEyWCBhZGRyZXNzCitzcGFjZSBpbnRvIFhHQVRFIGFkZHJlc3Mgc3BhY2UuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zaG9ydF8wMDdkLTEzMDQiPjwvYT48YnI+PGR0Pjxjb2RlPi1tc2hvcnQ8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBBQkkgYW5kIGluZGljYXRlcyB0byB1c2UgYSAxNi1iaXQgaW50ZWdlciBBQkkuIAorSXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgYXNzZW1ibGVkIGluc3RydWN0aW9ucy4gCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbG9uZ18wMDdkLTEzMDUiPjwvYT48YnI+PGR0Pjxjb2RlPi1tbG9uZzwvY29kZT48ZGQ+VGhpcyBvcHRpb24gY29udHJvbHMgdGhlIEFCSSBhbmQgaW5kaWNhdGVzIHRvIHVzZSBhIDMyLWJpdCBpbnRlZ2VyIEFCSS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXNob3J0XzAwMmRkb3VibGVfMDA3ZC0xMzA2Ij48L2E+PGJyPjxkdD48Y29kZT4tbXNob3J0LWRvdWJsZTwvY29kZT48ZGQ+VGhpcyBvcHRpb24gY29udHJvbHMgdGhlIEFCSSBhbmQgaW5kaWNhdGVzIHRvIHVzZSBhIDMyLWJpdCBmbG9hdCBBQkkuIAorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWxvbmdfMDAyZGRvdWJsZV8wMDdkLTEzMDciPjwvYT48YnI+PGR0Pjxjb2RlPi1tbG9uZy1kb3VibGU8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBBQkkgYW5kIGluZGljYXRlcyB0byB1c2UgYSA2NC1iaXQgZmxvYXQgQUJJLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZHN0cmljdF8wMDJkZGlyZWN0XzAwMmRtb2RlXzAwN2QtMTMwOCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1zdHJpY3QtZGlyZWN0LW1vZGU8L2NvZGU+PGRkPllvdSBjYW4gdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tc3RyaWN0LWRpcmVjdC1tb2RlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0byBkaXNhYmxlCit0aGUgYXV0b21hdGljIHRyYW5zbGF0aW9uIG9mIGRpcmVjdCBwYWdlIG1vZGUgYWRkcmVzc2luZyBpbnRvCitleHRlbmRlZCBtb2RlIHdoZW4gdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IHN1cHBvcnQgZGlyZWN0IG1vZGUuIAorRm9yIGV4YW1wbGUsIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNscjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGRpcmVjdCBwYWdlCittb2RlIGFkZHJlc3NpbmcuIFdoZW4gaXQgaXMgdXNlZCB3aXRoIHRoZSBkaXJlY3QgcGFnZSBtb2RlLAorPGNvZGU+YXM8L2NvZGU+IHdpbGwgaWdub3JlIGl0IGFuZCBnZW5lcmF0ZSBhbiBhYnNvbHV0ZSBhZGRyZXNzaW5nLiAKK1RoaXMgb3B0aW9uIHByZXZlbnRzIDxjb2RlPmFzPC9jb2RlPiBmcm9tIGRvaW5nIHRoaXMsIGFuZCB0aGUgd3JvbmcKK3VzYWdlIG9mIHRoZSBkaXJlY3QgcGFnZSBtb2RlIHdpbGwgcmFpc2UgYW4gZXJyb3IuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkc2hvcnRfMDAyZGJyYW5jaGVzXzAwN2QtMTMwOSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1zaG9ydC1icmFuY2hlczwvY29kZT48ZGQ+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1zaG9ydC1icmFuY2hlczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdHVybnMgb2ZmIHRoZSB0cmFuc2xhdGlvbiBvZgorcmVsYXRpdmUgYnJhbmNoZXMgaW50byBhYnNvbHV0ZSBicmFuY2hlcyB3aGVuIHRoZSBicmFuY2ggb2Zmc2V0IGlzCitvdXQgb2YgcmFuZ2UuIEJ5IGRlZmF1bHQgPGNvZGU+YXM8L2NvZGU+IHRyYW5zZm9ybXMgdGhlIHJlbGF0aXZlCiticmFuY2ggKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnNyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJndDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZ2U8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmVxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJuZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJsdDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iaGk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmNjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJsczwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmNzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJtaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5idnM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnZzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJyYTwvc3Bhbj48L3NhbXA+JnJzcXVvOykgaW50bworYW4gYWJzb2x1dGUgYnJhbmNoIHdoZW4gdGhlIG9mZnNldCBpcyBvdXQgb2YgdGhlIC0xMjggLi4gMTI3IHJhbmdlLiAKK0luIHRoYXQgY2FzZSwgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnNyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9uIGlzIHRyYW5zbGF0ZWQgaW50byBhCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpzcjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnJhPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9uIGlzIHRyYW5zbGF0ZWQgaW50byBhCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmptcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgdGhlIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGluc3RydWN0aW9ucyBhcmUgaW52ZXJ0ZWQgYW5kCitmb2xsb3dlZCBieSBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+am1wPC9zcGFuPjwvc2FtcD4mcnNxdW87LiBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGVzZSB0cmFuc2xhdGlvbnMKK2FuZCA8Y29kZT5hczwvY29kZT4gd2lsbCBnZW5lcmF0ZSBhbiBlcnJvciBpZiBhIHJlbGF0aXZlIGJyYW5jaAoraXMgb3V0IG9mIHJhbmdlLiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIG9wdGltaXphdGlvbgorYXNzb2NpYXRlZCB0byB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qYnJhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpic3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+amJYWDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwc2V1ZG8gb3Bjb2Rlcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRmb3JjZV8wMDJkbG9uZ18wMDJkYnJhbmNoZXNfMDA3ZC0xMzEwIj48L2E+PGJyPjxkdD48Y29kZT4tLWZvcmNlLWxvbmctYnJhbmNoZXM8L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZm9yY2UtbG9uZy1icmFuY2hlczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gZm9yY2VzIHRoZSB0cmFuc2xhdGlvbiBvZgorcmVsYXRpdmUgYnJhbmNoZXMgaW50byBhYnNvbHV0ZSBicmFuY2hlcy4gVGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0Cit0aGUgb3B0aW1pemF0aW9uIGFzc29jaWF0ZWQgdG8gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+amJyYTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qYnNyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qYlhYPC9zcGFuPjwvc2FtcD4mcnNxdW87IHBzZXVkbyBvcGNvZGVzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZHByaW50XzAwMmRpbnNuXzAwMmRzeW50YXhfMDA3ZC0xMzExIj48L2E+PGJyPjxkdD48Y29kZT4tLXByaW50LWluc24tc3ludGF4PC9jb2RlPjxkZD5Zb3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXByaW50LWluc24tc3ludGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0byBvYnRhaW4gdGhlCitzeW50YXggZGVzY3JpcHRpb24gb2YgdGhlIGluc3RydWN0aW9uIHdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkcHJpbnRfMDAyZG9wY29kZXNfMDA3ZC0xMzEyIj48L2E+PGJyPjxkdD48Y29kZT4tLXByaW50LW9wY29kZXM8L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcHJpbnQtb3Bjb2Rlczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gcHJpbnRzIHRoZSBsaXN0IG9mIGFsbCB0aGUKK2luc3RydWN0aW9ucyB3aXRoIHRoZWlyIHN5bnRheC4gVGhlIGZpcnN0IGl0ZW0gb2YgZWFjaCBsaW5lCityZXByZXNlbnRzIHRoZSBpbnN0cnVjdGlvbiBuYW1lIGFuZCB0aGUgcmVzdCBvZiB0aGUgbGluZSBpbmRpY2F0ZXMKK3RoZSBwb3NzaWJsZSBvcGVyYW5kcyBmb3IgdGhhdCBpbnN0cnVjdGlvbi4gVGhlIGxpc3QgaXMgcHJpbnRlZAoraW4gYWxwaGFiZXRpY2FsIG9yZGVyLiBPbmNlIHRoZSBsaXN0IGlzIHByaW50ZWQgPGNvZGU+YXM8L2NvZGU+CitleGl0cy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRnZW5lcmF0ZV8wMDJkZXhhbXBsZV8wMDdkLTEzMTMiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZ2VuZXJhdGUtZXhhbXBsZTwvY29kZT48ZGQ+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1nZW5lcmF0ZS1leGFtcGxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcyBzaW1pbGFyIHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1wcmludC1vcGNvZGVzPC9zcGFuPjwvc2FtcD4mcnNxdW87CitidXQgaXQgZ2VuZXJhdGVzIGFuIGV4YW1wbGUgZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gaW5zdGVhZC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhIQzExXzAwMmRTeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEhDMTFfMDAyZFN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjhiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhIQzExXzAwMmRTeW50YXguaHRtbApAQCAtMCwwICsxLDE0MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTY4SEMxMS1TeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik02OEhDMTFfMDAyZERlcGVuZGVudC5odG1sI002OEhDMTFfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik02OEhDMTEtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTTY4SEMxMV8wMDJkT3B0cy5odG1sI002OEhDMTFfMDAyZE9wdHMiIHRpdGxlPSJNNjhIQzExLU9wdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNNjhIQzExXzAwMmRNb2RpZmllcnMuaHRtbCNNNjhIQzExXzAwMmRNb2RpZmllcnMiIHRpdGxlPSJNNjhIQzExLU1vZGlmaWVycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik02OEhDMTEtU3ludGF4Ij48L2E+Cis8YSBuYW1lPSJNNjhIQzExXzAwMmRTeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTY4SEMxMV8wMDJkTW9kaWZpZXJzLmh0bWwjTTY4SEMxMV8wMDJkTW9kaWZpZXJzIj5NNjhIQzExLU1vZGlmaWVyczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik02OEhDMTFfMDAyZE9wdHMuaHRtbCNNNjhIQzExXzAwMmRPcHRzIj5NNjhIQzExLU9wdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiPk02OEhDMTEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yNC4yIFN5bnRheDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LU02OEhDMTEtc3ludGF4LTEzMTQiPjwvYT48YSBuYW1lPSJpbmRleC1zeW50YXhfMDAyYy1NNjhIQzExLTEzMTUiPjwvYT4KK0luIHRoZSBNNjhIQzExIHN5bnRheCwgdGhlIGluc3RydWN0aW9uIG5hbWUgY29tZXMgZmlyc3QgYW5kIGl0IG1heQorYmUgZm9sbG93ZWQgYnkgb25lIG9yIHNldmVyYWwgb3BlcmFuZHMgKHVwIHRvIHRocmVlKS4gT3BlcmFuZHMgYXJlCitzZXBhcmF0ZWQgYnkgY29tbWEgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48L3NhbXA+JnJzcXVvOykuIEluIHRoZSBub3JtYWwgbW9kZSwKKzxjb2RlPmFzPC9jb2RlPiB3aWxsIGNvbXBsYWluIGlmIHRvbyBtYW55IG9wZXJhbmRzIGFyZSBzcGVjaWZpZWQgZm9yCithIGdpdmVuIGluc3RydWN0aW9uLiBJbiB0aGUgTVJJIG1vZGUgKHR1cm5lZCBvbiB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LU08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uKSwKK2l0IHdpbGwgdHJlYXQgdGhlbSBhcyBjb21tZW50cy4gRXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGlueAorICAgICBsZGEgICMyMworICAgICBic2V0IDIseCAjNAorICAgICBicmNsciAqYm90ICM4IGZvbworPC9wcmU+CisgICA8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtTTY4SEMxMS0xMzE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtTTY4SEMxMS1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTEzMTciPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIG9yIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBhbnl3aGVyZQorb24gYSBsaW5lIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mCit0aGF0IGxpbmUuCisKKyAgIDxwPkEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIGFsc28KK2ludHJvZHVjZXMgYSBsaW5lIGNvbW1lbnQsIGJ1dCB0aGVzZSBjaGFyYWN0ZXJzIGRvIG5vdCB3b3JrIGVsc2V3aGVyZQorb24gdGhlIGxpbmUuICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lIGlzIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRoZW4gYXMKK3dlbGwgYXMgc3RhcnRpbmcgYSBjb21tZW50LCB0aGUgbGluZSBjb3VsZCBhbHNvIGJlIGxvZ2ljYWwgbGluZSBudW1iZXIKK2RpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IgY29udHJvbCBjb21tYW5kCisoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtTTY4SEMxMS0xMzE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLU02OEhDMTEtMTMxOSI+PC9hPjxhIG5hbWU9ImluZGV4LU02OEhDMTEtbGluZS1zZXBhcmF0b3ItMTMyMCI+PC9hPlRoZSBNNjhIQzExIGFzc2VtYmxlciBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBhIGxpbmUgc2VwYXJhdG9yCitjaGFyYWN0ZXIuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LU02OEhDMTEtYWRkcmVzc2luZy1tb2Rlcy0xMzIxIj48L2E+PGEgbmFtZT0iaW5kZXgtYWRkcmVzc2luZy1tb2Rlc18wMDJjLU02OEhDMTEtMTMyMiI+PC9hPlRoZSBmb2xsb3dpbmcgYWRkcmVzc2luZyBtb2RlcyBhcmUgdW5kZXJzdG9vZCBmb3IgNjhIQzExIGFuZCA2OEhDMTI6CisgICAgIDxkbD4KKzxkdD48ZGZuPkltbWVkaWF0ZTwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5BZGRyZXNzIFJlZ2lzdGVyPC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48dmFyPm51bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sWDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjx2YXI+bnVtYmVyPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPixZPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlIDx2YXI+bnVtYmVyPC92YXI+IG1heSBiZSBvbWl0dGVkIGluIHdoaWNoIGNhc2UgMCBpcyBhc3N1bWVkLgorCisgICAgIDxicj48ZHQ+PGRmbj5EaXJlY3QgQWRkcmVzc2luZyBtb2RlPC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48dmFyPnN5bWJvbDwvdmFyPjwvc2FtcD4mcnNxdW87LCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PHZhcj5kaWdpdHM8L3Zhcj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5BYnNvbHV0ZTwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHZhcj5zeW1ib2w8L3Zhcj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjx2YXI+ZGlnaXRzPC92YXI+PC9zYW1wPiZyc3F1bzsKKzwvZGw+CisKKyAgIDxwPlRoZSBNNjhIQzEyIGhhcyBvdGhlciBtb3JlIGNvbXBsZXggYWRkcmVzc2luZyBtb2Rlcy4gQWxsIG9mIHRoZW0KK2FyZSBzdXBwb3J0ZWQgYW5kIHRoZXkgYXJlIHJlcHJlc2VudGVkIGJlbG93OgorCisgICAgIDxkbD4KKzxkdD48ZGZuPkNvbnN0YW50IE9mZnNldCBJbmRleGVkIEFkZHJlc3NpbmcgTW9kZTwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48dmFyPnJlZzwvdmFyPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlIDx2YXI+bnVtYmVyPC92YXI+IG1heSBiZSBvbWl0dGVkIGluIHdoaWNoIGNhc2UgMCBpcyBhc3N1bWVkLiAKK1RoZSByZWdpc3RlciBjYW4gYmUgZWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+WDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ZPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlNQPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlBDPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIGFzc2VtYmxlciB3aWxsIHVzZSB0aGUgc21hbGxlciBwb3N0LWJ5dGUgZGVmaW5pdGlvbgorYWNjb3JkaW5nIHRvIHRoZSBjb25zdGFudCB2YWx1ZSAoNS1iaXQgY29uc3RhbnQgb2Zmc2V0LCA5LWJpdCBjb25zdGFudAorb2Zmc2V0IG9yIDE2LWJpdCBjb25zdGFudCBvZmZzZXQpLiAgSWYgdGhlIGNvbnN0YW50IGlzIG5vdCBrbm93biBieQordGhlIGFzc2VtYmxlciBpdCB3aWxsIHVzZSB0aGUgMTYtYml0IGNvbnN0YW50IG9mZnNldCBwb3N0LWJ5dGUgYW5kIHRoZSB2YWx1ZQord2lsbCBiZSByZXNvbHZlZCBhdCBsaW5rIHRpbWUuCisKKyAgICAgPGJyPjxkdD48ZGZuPk9mZnNldCBJbmRleGVkIEluZGlyZWN0PC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Wzwvc3Bhbj48dmFyPm51bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjx2YXI+cmVnPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPl08L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8cD5UaGUgcmVnaXN0ZXIgY2FuIGJlIGVpdGhlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+WTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TUDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlBDPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGRmbj5BdXRvIFByZS1JbmNyZW1lbnQvUHJlLURlY3JlbWVudC9Qb3N0LUluY3JlbWVudC9Qb3N0LURlY3JlbWVudDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LC08L3NwYW4+PHZhcj5yZWc8L3Zhcj48L3NhbXA+JnJzcXVvOworJmxzcXVvOzxzYW1wPjx2YXI+bnVtYmVyPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiwrPC9zcGFuPjx2YXI+cmVnPC92YXI+PC9zYW1wPiZyc3F1bzsKKyZsc3F1bzs8c2FtcD48dmFyPm51bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjx2YXI+cmVnPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPi08L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyZsc3F1bzs8c2FtcD48dmFyPm51bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjx2YXI+cmVnPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPis8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8cD5UaGUgbnVtYmVyIG11c3QgYmUgaW4gdGhlIHJhbmdlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuLiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kzg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kIG11c3Qgbm90IGJlIDAuIAorVGhlIHJlZ2lzdGVyIGNhbiBiZSBlaXRoZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5YPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QQzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0PjxkZm4+QWNjdW11bGF0b3IgT2Zmc2V0PC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48dmFyPmFjYzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjx2YXI+cmVnPC92YXI+PC9zYW1wPiZyc3F1bzsKKworICAgICA8cD5UaGUgYWNjdW11bGF0b3IgcmVnaXN0ZXIgY2FuIGJlIGVpdGhlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorVGhlIHJlZ2lzdGVyIGNhbiBiZSBlaXRoZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5YPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QQzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0PjxkZm4+QWNjdW11bGF0b3IgRCBvZmZzZXQgaW5kZXhlZC1pbmRpcmVjdDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPltELDwvc3Bhbj48dmFyPnJlZzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5dPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlIHJlZ2lzdGVyIGNhbiBiZSBlaXRoZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5YPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QQzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9kbD4KKworICAgPHA+Rm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBsZGFiIDEwMjQsc3AKKyAgICAgbGRkIFsxMCx4XQorICAgICBvcmFiIDMsK3gKKyAgICAgc3RhYiAtMix5LQorICAgICBsZHggYSxwYworICAgICBzdHkgW2Qsc3BdCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEhDMTFfMDAyZG9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEhDMTFfMDAyZG9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDFmMzdlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4SEMxMV8wMDJkb3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk02OEhDMTEtb3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTTY4SEMxMV8wMDJkRGVwZW5kZW50Lmh0bWwjTTY4SEMxMV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTTY4SEMxMS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNNjhIQzExXzAwMmRGbG9hdC5odG1sI002OEhDMTFfMDAyZEZsb2F0IiB0aXRsZT0iTTY4SEMxMS1GbG9hdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik02OEhDMTEtb3Bjb2RlcyI+PC9hPgorPGEgbmFtZT0iTTY4SEMxMV8wMDJkb3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik02OEhDMTFfMDAyZEZsb2F0Lmh0bWwjTTY4SEMxMV8wMDJkRmxvYXQiPk02OEhDMTEtRmxvYXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiPk02OEhDMTEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yNC42IE9wY29kZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NNjhIQzExLW9wY29kZXMtMTM0NiI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZXNfMDAyYy1NNjhIQzExLTEzNDciPjwvYT48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1zZXRfMDAyYy1NNjhIQzExLTEzNDgiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik02OEhDMTFfMDAyZEJyYW5jaC5odG1sI002OEhDMTFfMDAyZEJyYW5jaCI+TTY4SEMxMS1CcmFuY2g8L2E+OiAgICAgICAgICAgICAgICAgIEJyYW5jaCBJbXByb3ZlbWVudAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkQnJhbmNoLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmRCcmFuY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTUyOTVjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkQnJhbmNoLmh0bWwKQEAgLTAsMCArMSwxNDYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk02OEstQnJhbmNoIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNNjhLXzAwMmRvcGNvZGVzLmh0bWwjTTY4S18wMDJkb3Bjb2RlcyIgdGl0bGU9Ik02OEstb3Bjb2RlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik02OEtfMDAyZENoYXJzLmh0bWwjTTY4S18wMDJkQ2hhcnMiIHRpdGxlPSJNNjhLLUNoYXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTY4Sy1CcmFuY2giPjwvYT4KKzxhIG5hbWU9Ik02OEtfMDAyZEJyYW5jaCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNNjhLXzAwMmRDaGFycy5odG1sI002OEtfMDAyZENoYXJzIj5NNjhLLUNoYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTY4S18wMDJkb3Bjb2Rlcy5odG1sI002OEtfMDAyZG9wY29kZXMiPk02OEstb3Bjb2RlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjMuNi4xIEJyYW5jaCBJbXByb3ZlbWVudDwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3Bjb2Rlc18wMDJjLU02ODB4MC0xMjgzIj48L2E+PGEgbmFtZT0iaW5kZXgtTTY4MHgwLXBzZXVkb18wMDJkb3Bjb2Rlcy0xMjg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtYnJhbmNoLWltcHJvdmVtZW50XzAwMmMtTTY4MHgwLTEyODUiPjwvYT48YSBuYW1lPSJpbmRleC1NNjgweDAtYnJhbmNoLWltcHJvdmVtZW50LTEyODYiPjwvYT5DZXJ0YWluIHBzZXVkbyBvcGNvZGVzIGFyZSBwZXJtaXR0ZWQgZm9yIGJyYW5jaCBpbnN0cnVjdGlvbnMuIAorVGhleSBleHBhbmQgdG8gdGhlIHNob3J0ZXN0IGJyYW5jaCBpbnN0cnVjdGlvbiB0aGF0IHJlYWNoIHRoZQordGFyZ2V0LiAgR2VuZXJhbGx5IHRoZXNlIG1uZW1vbmljcyBhcmUgbWFkZSBieSBzdWJzdGl0dXRpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iPC9zcGFuPjwvc2FtcD4mcnNxdW87IGF0IHRoZSBzdGFydCBvZiBhIE1vdG9yb2xhIG1uZW1vbmljLgorCisgICA8cD5UaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIHBzZXVkby1vcGVyYXRpb25zLiAgQSA8Y29kZT4qPC9jb2RlPiBmbGFncworY2FzZXMgdGhhdCBhcmUgbW9yZSBmdWxseSBkZXNjcmliZWQgYWZ0ZXIgdGhlIHRhYmxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIERpc3BsYWNlbWVudAorICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICA2ODAyMCAgICAgICAgICAgNjgwMDAvMTAsIG5vdCBQQy1yZWxhdGl2ZSBPSworICAgICBQc2V1ZG8tT3AgfEJZVEUgICAgV09SRCAgICBMT05HICAgICAgICAgICAgQUJTT0xVVEUgTE9ORyBKVU1QICAgICoqCisgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgamJzciB8YnNycyAgICBic3J3ICAgIGJzcmwgICAgICAgICAgICBqc3IKKyAgICAgICAgICAganJhIHxicmFzICAgIGJyYXcgICAgYnJhbCAgICAgICAgICAgIGptcAorICAgICAqICAgICBqWFggfGJYWHMgICAgYlhYdyAgICBiWFhsICAgICAgICAgICAgYk5YcztqbXAKKyAgICAgKiAgICBkYlhYIHwgTi9BICAgIGRiWFh3ICAgZGJYWDticmFzO2JyYWwgIGRiWFg7YnJhcztqbXAKKyAgICAgICAgICBmalhYIHwgTi9BICAgIGZiWFh3ICAgZmJYWGwgICAgICAgICAgICBOL0EKKyAgICAgCisgICAgIFhYOiBjb25kaXRpb24KKyAgICAgTlg6IG5lZ2F0aXZlIG9mIGNvbmRpdGlvbiBYWAorICAgICAKKzwvcHJlPgorICAgPGRpdiBhbGlnbj0iY2VudGVyIj48Y29kZT4qPC9jb2RlPiZtZGFzaDtzZWUgZnVsbCBkZXNjcmlwdGlvbiBiZWxvdzwvZGl2PgorPGRpdiBhbGlnbj0iY2VudGVyIj48Y29kZT4qKjwvY29kZT4mbWRhc2g7dGhpcyBleHBhbnNpb24gbW9kZSBpcyBkaXNhbGxvd2VkIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1wY3JlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzwvZGl2PgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5qYnNyPC9jb2RlPjxkdD48Y29kZT5qcmE8L2NvZGU+PGRkPlRoZXNlIGFyZSB0aGUgc2ltcGxlc3QganVtcCBwc2V1ZG8tb3BlcmF0aW9uczsgdGhleSBhbHdheXMgbWFwIHRvIG9uZQorcGFydGljdWxhciBtYWNoaW5lIGluc3RydWN0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGRpc3BsYWNlbWVudCB0byB0aGUKK2JyYW5jaCB0YXJnZXQuICBUaGlzIGluc3RydWN0aW9uIHdpbGwgYmUgYSBieXRlIG9yIHdvcmQgYnJhbmNoIGlzIHRoYXQKK2lzIHN1ZmZpY2llbnQuICBPdGhlcndpc2UsIGEgbG9uZyBicmFuY2ggd2lsbCBiZSBlbWl0dGVkIGlmIGF2YWlsYWJsZS4gCitJZiBubyBsb25nIGJyYW5jaGVzIGFyZSBhdmFpbGFibGUgYW5kIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcGNyZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGlzIG5vdAorZ2l2ZW4sIGFuIGFic29sdXRlIGxvbmcganVtcCB3aWxsIGJlIGVtaXR0ZWQgaW5zdGVhZC4gIElmIG5vIGxvbmcKK2JyYW5jaGVzIGFyZSBhdmFpbGFibGUsIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcGNyZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGlzIGdpdmVuLCBhbmQgYSB3b3JkCiticmFuY2ggY2Fubm90IHJlYWNoIHRoZSB0YXJnZXQsIGFuIGVycm9yIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkLgorCisgICAgIDxwPkluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIGJyYW5jaCBvcGVyYW5kcywgPGNvZGU+YXM8L2NvZGU+IGFsbG93cyB0aGVzZQorcHNldWRvLW9wZXJhdGlvbnMgdG8gaGF2ZSBhbGwgb3BlcmFuZHMgdGhhdCBhcmUgYWxsb3dlZCBmb3IganNyIGFuZCBqbXAsCitzdWJzdGl0dXRpbmcgdGhlc2UgaW5zdHJ1Y3Rpb25zIGlmIHRoZSBvcGVyYW5kIGdpdmVuIGlzIG5vdCB2YWxpZCBmb3IgYQorYnJhbmNoIGluc3RydWN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+ajwvY29kZT48dmFyPlhYPC92YXI+PGRkPkhlcmUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ajwvc3Bhbj48dmFyPlhYPC92YXI+PC9zYW1wPiZyc3F1bzsgc3RhbmRzIGZvciBhbiBlbnRpcmUgZmFtaWx5IG9mIHBzZXVkby1vcGVyYXRpb25zLAord2hlcmUgPHZhcj5YWDwvdmFyPiBpcyBhIGNvbmRpdGlvbmFsIGJyYW5jaCBvciBjb25kaXRpb24tY29kZSB0ZXN0LiAgVGhlIGZ1bGwKK2xpc3Qgb2YgcHNldWRvLW9wcyBpbiB0aGlzIGZhbWlseSBpczoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgIGpoaSAgIGpscyAgIGpjYyAgIGpjcyAgIGpuZSAgIGplcSAgIGp2YworICAgICAgICAgICBqdnMgICBqcGwgICBqbWkgICBqZ2UgICBqbHQgICBqZ3QgICBqbGUKKzwvcHJlPgorICAgICA8cD5Vc3VhbGx5LCBlYWNoIG9mIHRoZXNlIHBzZXVkby1vcGVyYXRpb25zIGV4cGFuZHMgdG8gYSBzaW5nbGUgYnJhbmNoCitpbnN0cnVjdGlvbi4gIEhvd2V2ZXIsIGlmIGEgd29yZCBicmFuY2ggaXMgbm90IHN1ZmZpY2llbnQsIG5vIGxvbmcgYnJhbmNoZXMKK2FyZSBhdmFpbGFibGUsIGFuZCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXBjcmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcyBub3QgZ2l2ZW4sIDxjb2RlPmFzPC9jb2RlPgoraXNzdWVzIGEgbG9uZ2VyIGNvZGUgZnJhZ21lbnQgaW4gdGVybXMgb2YgPHZhcj5OWDwvdmFyPiwgdGhlIG9wcG9zaXRlIGNvbmRpdGlvbgordG8gPHZhcj5YWDwvdmFyPi4gIEZvciBleGFtcGxlLCB1bmRlciB0aGVzZSBjb25kaXRpb25zOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgajx2YXI+WFg8L3Zhcj4gZm9vCis8L3ByZT4KKyAgICAgPHA+Z2l2ZXMKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICBiPHZhcj5OWDwvdmFyPnMgb29mCisgICAgICAgICAgICAgICBqbXAgZm9vCisgICAgICAgICAgIG9vZjoKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmRiPC9jb2RlPjx2YXI+WFg8L3Zhcj48ZGQ+VGhlIGZ1bGwgZmFtaWx5IG9mIHBzZXVkby1vcGVyYXRpb25zIGNvdmVyZWQgaGVyZSBpcworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgZGJoaSAgIGRibHMgICBkYmNjICAgZGJjcyAgIGRibmUgICBkYmVxICAgZGJ2YworICAgICAgICAgICBkYnZzICAgZGJwbCAgIGRibWkgICBkYmdlICAgZGJsdCAgIGRiZ3QgICBkYmxlCisgICAgICAgICAgIGRiZiAgICBkYnJhICAgZGJ0Cis8L3ByZT4KKyAgICAgPHA+TW90b3JvbGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kYjwvc3Bhbj48dmFyPlhYPC92YXI+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb25zIGFsbG93IHdvcmQgZGlzcGxhY2VtZW50cyBvbmx5LiAgV2hlbgorYSB3b3JkIGRpc3BsYWNlbWVudCBpcyBzdWZmaWNpZW50LCBlYWNoIG9mIHRoZXNlIHBzZXVkby1vcGVyYXRpb25zIGV4cGFuZHMKK3RvIHRoZSBjb3JyZXNwb25kaW5nIE1vdG9yb2xhIGluc3RydWN0aW9uLiAgV2hlbiBhIHdvcmQgZGlzcGxhY2VtZW50IGlzIG5vdAorc3VmZmljaWVudCBhbmQgbG9uZyBicmFuY2hlcyBhcmUgYXZhaWxhYmxlLCB3aGVuIHRoZSBzb3VyY2UgcmVhZHMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGI8L3NwYW4+PHZhcj5YWDwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4gZm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87LCA8Y29kZT5hczwvY29kZT4gZW1pdHMKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICBkYjx2YXI+WFg8L3Zhcj4gb28xCisgICAgICAgICAgICAgICBicmFzIG9vMgorICAgICAgICAgICBvbzE6YnJhbCBmb28KKyAgICAgICAgICAgb28yOgorPC9wcmU+CisgICAgIDxwPklmLCBob3dldmVyLCBsb25nIGJyYW5jaGVzIGFyZSBub3QgYXZhaWxhYmxlIGFuZCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXBjcmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcworbm90IGdpdmVuLCA8Y29kZT5hczwvY29kZT4gZW1pdHMKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICBkYjx2YXI+WFg8L3Zhcj4gb28xCisgICAgICAgICAgICAgICBicmFzIG9vMgorICAgICAgICAgICBvbzE6am1wIGZvbworICAgICAgICAgICBvbzI6Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5majwvY29kZT48dmFyPlhYPC92YXI+PGRkPlRoaXMgZmFtaWx5IGluY2x1ZGVzCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICBmam5lICAgZmplcSAgIGZqZ2UgICBmamx0ICAgZmpndCAgIGZqbGUgICBmamYKKyAgICAgICAgICAgZmp0ICAgIGZqZ2wgICBmamdsZSAgZmpuZ2UgIGZqbmdsICBmam5nbGUgZmpuZ3QKKyAgICAgICAgICAgZmpubGUgIGZqbmx0ICBmam9nZSAgZmpvZ2wgIGZqb2d0ICBmam9sZSAgZmpvbHQKKyAgICAgICAgICAgZmpvciAgIGZqc2VxICBmanNmICAgZmpzbmUgIGZqc3QgICBmanVlcSAgZmp1Z2UKKyAgICAgICAgICAgZmp1Z3QgIGZqdWxlICBmanVsdCAgZmp1bgorPC9wcmU+CisgICAgIDxwPkVhY2ggb2YgdGhlc2UgcHNldWRvLW9wZXJhdGlvbnMgYWx3YXlzIGV4cGFuZHMgdG8gYSBzaW5nbGUgTW90b3JvbGEKK2NvcHJvY2Vzc29yIGJyYW5jaCBpbnN0cnVjdGlvbiwgd29yZCBvciBsb25nLiAgQWxsIE1vdG9yb2xhIGNvcHJvY2Vzc29yCiticmFuY2ggaW5zdHJ1Y3Rpb25zIGFsbG93IGJvdGggd29yZCBhbmQgbG9uZyBkaXNwbGFjZW1lbnRzLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjhiNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NNjhLLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNNjhLXzAwMmRvcGNvZGVzLmh0bWwjTTY4S18wMDJkb3Bjb2RlcyIgdGl0bGU9Ik02OEstb3Bjb2RlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik02OEtfMDAyZEJyYW5jaC5odG1sI002OEtfMDAyZEJyYW5jaCIgdGl0bGU9Ik02OEstQnJhbmNoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTY4Sy1DaGFycyI+PC9hPgorPGEgbmFtZT0iTTY4S18wMDJkQ2hhcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNNjhLXzAwMmRCcmFuY2guaHRtbCNNNjhLXzAwMmRCcmFuY2giPk02OEstQnJhbmNoPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTY4S18wMDJkb3Bjb2Rlcy5odG1sI002OEtfMDAyZG9wY29kZXMiPk02OEstb3Bjb2RlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjMuNi4yIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LXNwZWNpYWwtY2hhcmFjdGVyc18wMDJjLU02ODB4MC0xMjg3Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1NNjgweDAtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xMjg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLU02ODB4MC0xMjg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29tbWVudHNfMDAyYy1NNjgweDAtMTI5MCI+PC9hPkxpbmUgY29tbWVudHMgYXJlIGludHJvZHVjZWQgYnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+fDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgYXBwZWFyaW5nCithbnl3aGVyZSBvbiBhIGxpbmUsIHVubGVzcyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1iaXR3aXNlLW9yPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbgoraGFzIGJlZW4gc3BlY2lmaWVkLgorCisgICA8cD5BbiBhc3RlcmlzayAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87KSBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIGEgbGluZSBtYXJrcyB0aGUKK3N0YXJ0IG9mIGEgbGluZSBjb21tZW50IGFzIHdlbGwuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LU02ODB4MC1pbW1lZGlhdGUtY2hhcmFjdGVyLTEyOTEiPjwvYT48YSBuYW1lPSJpbmRleC1pbW1lZGlhdGUtY2hhcmFjdGVyXzAwMmMtTTY4MHgwLTEyOTIiPjwvYT4KK0EgaGFzaCBjaGFyYWN0ZXIgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOykgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvbiBhIGxpbmUgYWxzbworbWFya3MgdGhlIHN0YXJ0IG9mIGEgbGluZSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIGl0IGNvdWxkIGFsc28gYmUgYQorbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEgcHJlcHJvY2Vzc29yCitjb250cm9sIGNvbW1hbmQgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLiAgSWYgdGhlIGhhc2ggY2hhcmFjdGVyCithcHBlYXJzIGVsc2V3aGVyZSBvbiBhIGxpbmUgaXQgaXMgdXNlZCB0byBpbnRyb2R1Y2UgYW4gaW1tZWRpYXRlCit2YWx1ZS4gIChUaGlzIGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggU3VuJ3MgYXNzZW1ibGVyKS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTTY4MHgwLWxpbmUtc2VwYXJhdG9yLTEyOTMiPjwvYT48YSBuYW1lPSJpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLU02ODB4MC0xMjk0Ij48L2E+CitNdWx0aXBsZSBzdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgY2FuIGFwcGVhciBpZiB0aGV5IGFyZSBzZXBhcmF0ZWQKK2J5IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyLgorCis8IS0tIENvcHlyaWdodCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAyMDAwLCAyMDAzLCAtLT4KKzwhLS0gMjAwNiwgMjAxMSwgMjAxMiAtLT4KKzwhLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEtfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZTIwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NNjhLLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTTMyUl8wMDJkRGVwZW5kZW50Lmh0bWwjTTMyUl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTTMyUi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNNjhIQzExLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik02OEstRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJNNjhLXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTY4SEMxMV8wMDJkRGVwZW5kZW50Lmh0bWwjTTY4SEMxMV8wMDJkRGVwZW5kZW50Ij5NNjhIQzExLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik0zMlJfMDAyZERlcGVuZGVudC5odG1sI00zMlJfMDAyZERlcGVuZGVudCI+TTMyUi1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMjMgTTY4MHgwIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LU02ODB4MC1zdXBwb3J0LTEyMzQiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+OiAgICAgICAgICAgICAgICAgICAgTTY4MHgwIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Ik02OEtfMDAyZFN5bnRheC5odG1sI002OEtfMDAyZFN5bnRheCI+TTY4Sy1TeW50YXg8L2E+OiAgICAgICAgICAgICAgICAgIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iTTY4S18wMDJkTW90b18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkTW90b18wMDJkU3ludGF4Ij5NNjhLLU1vdG8tU3ludGF4PC9hPjogICAgICAgICAgICAgTW90b3JvbGEgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0Ij5NNjhLLUZsb2F0PC9hPjogICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhLXzAwMmREaXJlY3RpdmVzIj5NNjhLLURpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgICAgNjgweDAgTWFjaGluZSBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJNNjhLXzAwMmRvcGNvZGVzLmh0bWwjTTY4S18wMDJkb3Bjb2RlcyI+TTY4Sy1vcGNvZGVzPC9hPjogICAgICAgICAgICAgICAgIE9wY29kZXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEtfMDAyZERpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTZkMGYwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk02OEstRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTTY4S18wMDJkRGVwZW5kZW50Lmh0bWwjTTY4S18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTTY4Sy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0IiB0aXRsZT0iTTY4Sy1GbG9hdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik02OEtfMDAyZG9wY29kZXMuaHRtbCNNNjhLXzAwMmRvcGNvZGVzIiB0aXRsZT0iTTY4Sy1vcGNvZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTY4Sy1EaXJlY3RpdmVzIj48L2E+Cis8YSBuYW1lPSJNNjhLXzAwMmREaXJlY3RpdmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik02OEtfMDAyZG9wY29kZXMuaHRtbCNNNjhLXzAwMmRvcGNvZGVzIj5NNjhLLW9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0Ij5NNjhLLUZsb2F0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTTY4S18wMDJkRGVwZW5kZW50Lmh0bWwjTTY4S18wMDJkRGVwZW5kZW50Ij5NNjhLLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjMuNSA2ODB4MCBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NNjgweDAtZGlyZWN0aXZlcy0xMjcyIj48L2E+PGEgbmFtZT0iaW5kZXgtZGlyZWN0aXZlc18wMDJjLU02ODB4MC0xMjczIj48L2E+SW4gb3JkZXIgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBTdW4gYXNzZW1ibGVyIHRoZSA2ODB4MCBhc3NlbWJsZXIKK3VuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlcy4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZGF0YTFfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NNjgweDAtMTI3NCI+PC9hPgorPGRsPjxkdD48Y29kZT4uZGF0YTE8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIGlzIGlkZW50aWNhbCB0byBhIDxjb2RlPi5kYXRhIDE8L2NvZGU+IGRpcmVjdGl2ZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRhdGEyXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTY4MHgwLTEyNzUiPjwvYT48YnI+PGR0Pjxjb2RlPi5kYXRhMjwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgaXMgaWRlbnRpY2FsIHRvIGEgPGNvZGU+LmRhdGEgMjwvY29kZT4gZGlyZWN0aXZlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXZlbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLU02ODB4MC0xMjc2Ij48L2E+PGJyPjxkdD48Y29kZT4uZXZlbjwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgaXMgYSBzcGVjaWFsIGNhc2Ugb2YgdGhlIDxjb2RlPi5hbGlnbjwvY29kZT4gZGlyZWN0aXZlOyBpdAorYWxpZ25zIHRoZSBvdXRwdXQgdG8gYW4gZXZlbiBieXRlIGJvdW5kYXJ5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic2tpcF8wMDdkLWRpcmVjdGl2ZV8wMDJjLU02ODB4MC0xMjc3Ij48L2E+PGJyPjxkdD48Y29kZT4uc2tpcDwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgaXMgaWRlbnRpY2FsIHRvIGEgPGNvZGU+LnNwYWNlPC9jb2RlPiBkaXJlY3RpdmUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhcmNoXzAwN2QtZGlyZWN0aXZlXzAwMmMtTTY4MHgwLTEyNzgiPjwvYT48YnI+PGR0Pjxjb2RlPi5hcmNoIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+U2VsZWN0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGFuZCBleHRlbnNpb24gZmVhdHVyZXMuICBWYWxpZCB2YWx1ZXMKK2ZvciA8dmFyPm5hbWU8L3Zhcj4gYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lCitvcHRpb24uICBUaGlzIGRpcmVjdGl2ZSBjYW5ub3QgYmUgc3BlY2lmaWVkIGFmdGVyCithbnkgaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBhc3NlbWJsZWQuICBJZiBpdCBpcyBnaXZlbiBtdWx0aXBsZSB0aW1lcywKK29yIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaDwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgYWxsIHVzZXMgbXVzdCBiZSBmb3IKK3RoZSBzYW1lIGFyY2hpdGVjdHVyZSBhbmQgZXh0ZW5zaW9uIHNldC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNwdV8wMDdkLWRpcmVjdGl2ZV8wMDJjLU02ODB4MC0xMjc5Ij48L2E+PGJyPjxkdD48Y29kZT4uY3B1IDwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+U2VsZWN0IHRoZSB0YXJnZXQgY3B1LiAgVmFsaWQgdmFsdXNlCitmb3IgPHZhcj5uYW1lPC92YXI+IGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lCitvcHRpb24uICBUaGlzIGRpcmVjdGl2ZSBjYW5ub3QgYmUgc3BlY2lmaWVkIGFmdGVyCithbnkgaW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBhc3NlbWJsZWQuICBJZiBpdCBpcyBnaXZlbiBtdWx0aXBsZSB0aW1lcywKK29yIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tb3B0PC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBhbGwgdXNlcyBtdXN0IGJlIGZvcgordGhlIHNhbWUgY3B1LgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmRGbG9hdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkRmxvYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzJkYTk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkRmxvYXQuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NNjhLLUZsb2F0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNNjhLXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhLXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNNjhLLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik02OEtfMDAyZE1vdG9fMDAyZFN5bnRheC5odG1sI002OEtfMDAyZE1vdG9fMDAyZFN5bnRheCIgdGl0bGU9Ik02OEstTW90by1TeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4S18wMDJkRGlyZWN0aXZlcyIgdGl0bGU9Ik02OEstRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik02OEstRmxvYXQiPjwvYT4KKzxhIG5hbWU9Ik02OEtfMDAyZEZsb2F0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhLXzAwMmREaXJlY3RpdmVzIj5NNjhLLURpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNNjhLXzAwMmRNb3RvXzAwMmRTeW50YXguaHRtbCNNNjhLXzAwMmRNb3RvXzAwMmRTeW50YXgiPk02OEstTW90by1TeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNNjhLXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhLXzAwMmREZXBlbmRlbnQiPk02OEstRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yMy40IEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1NNjgweDAtMTI2NiI+PC9hPjxhIG5hbWU9ImluZGV4LU02ODB4MC1mbG9hdGluZy1wb2ludC0xMjY3Ij48L2E+UGFja2VkIGRlY2ltYWwgKFApIGZvcm1hdCBmbG9hdGluZyBsaXRlcmFscyBhcmUgbm90IHN1cHBvcnRlZC4gCitGZWVsIGZyZWUgdG8gYWRkIHRoZSBjb2RlIQorCisgICA8cD5UaGUgZmxvYXRpbmcgcG9pbnQgZm9ybWF0cyBnZW5lcmF0ZWQgYnkgZGlyZWN0aXZlcyBhcmUgdGhlc2UuCisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMtTTY4MHgwLTEyNjgiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LmZsb2F0PC9jb2RlPjxkZD48Y29kZT5TaW5nbGU8L2NvZGU+IHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jkb3VibGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NNjgweDAtMTI2OSI+PC9hPjxicj48ZHQ+PGNvZGU+LmRvdWJsZTwvY29kZT48ZGQ+PGNvZGU+RG91YmxlPC9jb2RlPiBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXh0ZW5kXzAwN2QtZGlyZWN0aXZlLU02ODB4MC0xMjcwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsZG91YmxlXzAwN2QtZGlyZWN0aXZlLU02ODB4MC0xMjcxIj48L2E+PGJyPjxkdD48Y29kZT4uZXh0ZW5kPC9jb2RlPjxkdD48Y29kZT4ubGRvdWJsZTwvY29kZT48ZGQ+PGNvZGU+RXh0ZW5kZWQ8L2NvZGU+IHByZWNpc2lvbiAoPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+KSBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkTW90b18wMDJkU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmRNb3RvXzAwMmRTeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTNjNWM2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkTW90b18wMDJkU3ludGF4Lmh0bWwKQEAgLTAsMCArMSwxMTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk02OEstTW90by1TeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik02OEtfMDAyZERlcGVuZGVudC5odG1sI002OEtfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik02OEstRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTTY4S18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkU3ludGF4IiB0aXRsZT0iTTY4Sy1TeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0IiB0aXRsZT0iTTY4Sy1GbG9hdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik02OEstTW90by1TeW50YXgiPjwvYT4KKzxhIG5hbWU9Ik02OEtfMDAyZE1vdG9fMDAyZFN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNNjhLXzAwMmRGbG9hdC5odG1sI002OEtfMDAyZEZsb2F0Ij5NNjhLLUZsb2F0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTTY4S18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkU3ludGF4Ij5NNjhLLVN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik02OEtfMDAyZERlcGVuZGVudC5odG1sI002OEtfMDAyZERlcGVuZGVudCI+TTY4Sy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjIzLjMgTW90b3JvbGEgU3ludGF4PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtTW90b3JvbGEtc3ludGF4LWZvci10aGUtNjgweDAtMTI2NCI+PC9hPjxhIG5hbWU9ImluZGV4LWFsdGVybmF0ZS1zeW50YXgtZm9yLXRoZS02ODB4MC0xMjY1Ij48L2E+CitUaGUgc3RhbmRhcmQgTW90b3JvbGEgc3ludGF4IGZvciB0aGlzIGNoaXAgZGlmZmVycyBmcm9tIHRoZSBzeW50YXgKK2FscmVhZHkgZGlzY3Vzc2VkIChzZWUgPGEgaHJlZj0iTTY4S18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkU3ludGF4Ij5TeW50YXg8L2E+KS4gIDxjb2RlPmFzPC9jb2RlPiBjYW4KK2FjY2VwdCBNb3Rvcm9sYSBzeW50YXggZm9yIG9wZXJhbmRzLCBldmVuIGlmIDxzcGFuIGNsYXNzPSJzYyI+bWl0PC9zcGFuPiBzeW50YXggaXMgdXNlZCBmb3IKK290aGVyIG9wZXJhbmRzIGluIHRoZSBzYW1lIGluc3RydWN0aW9uLiAgVGhlIHR3byBraW5kcyBvZiBzeW50YXggYXJlCitmdWxseSBjb21wYXRpYmxlLgorCisgICA8cD5JbiB0aGUgZm9sbG93aW5nIHRhYmxlIDx2YXI+YXBjPC92YXI+IHN0YW5kcyBmb3IgYW55IG9mIHRoZSBhZGRyZXNzIHJlZ2lzdGVycworKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWEwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTc8L3NwYW4+PC9zYW1wPiZyc3F1bzspLCB0aGUgcHJvZ3JhbSBjb3VudGVyICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVwYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyksIHRoZQoremVyby1hZGRyZXNzIHJlbGF0aXZlIHRvIHRoZSBwcm9ncmFtIGNvdW50ZXIgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXpwYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyksIG9yIGEKK3N1cHByZXNzZWQgYWRkcmVzcyByZWdpc3RlciAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lemEwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lemE3PC9zcGFuPjwvc2FtcD4mcnNxdW87KS4gIFRoZSB1c2UKK29mIDx2YXI+c2l6ZTwvdmFyPiBtZWFucyBvbmUgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIGl0IG1heSBhbHdheXMgYmUKK29taXR0ZWQgYWxvbmcgd2l0aCB0aGUgbGVhZGluZyBkb3QuICBUaGUgdXNlIG9mIDx2YXI+c2NhbGU8L3Zhcj4gbWVhbnMgb25lIG9mCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjg8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZCBpdCBtYXkgYWx3YXlzIGJlIG9taXR0ZWQKK2Fsb25nIHdpdGggdGhlIGxlYWRpbmcgYXN0ZXJpc2suCisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBhZGRyZXNzaW5nIG1vZGVzIGFyZSB1bmRlcnN0b29kOgorCisgICAgIDxkbD4KKzxkdD48ZGZuPkFkZHJlc3MgUmVnaXN0ZXIgSW5kaXJlY3Q8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4oJWEwKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aHJvdWdoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KCVhNyk8L3NwYW4+PC9zYW1wPiZyc3F1bzs8YnI+CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVhNzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBhbHNvIGtub3duIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXNwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBpLmUuLCB0aGUgU3RhY2sgUG9pbnRlci4gIDxjb2RlPiVhNjwvY29kZT4KK2lzIGFsc28ga25vd24gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZnA8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZSBGcmFtZSBQb2ludGVyLgorCisgICAgIDxicj48ZHQ+PGRmbj5BZGRyZXNzIFJlZ2lzdGVyIFBvc3RpbmNyZW1lbnQ8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4oJWEwKSs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiglYTcpKzwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5BZGRyZXNzIFJlZ2lzdGVyIFByZWRlY3JlbWVudDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0oJWEwKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aHJvdWdoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LSglYTcpPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48ZGZuPkluZGlyZWN0IFBsdXMgT2Zmc2V0PC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48dmFyPm51bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4oPC9zcGFuPjx2YXI+JWEwPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPik8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+KDwvc3Bhbj48dmFyPiVhNzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorb3IgJmxzcXVvOzxzYW1wPjx2YXI+bnVtYmVyPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPig8L3NwYW4+PHZhcj4lcGM8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+KTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5UaGUgPHZhcj5udW1iZXI8L3Zhcj4gbWF5IGFsc28gYXBwZWFyIHdpdGhpbiB0aGUgcGFyZW50aGVzZXMsIGFzIGluCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPig8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48dmFyPiVhMDwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgV2hlbiB1c2VkIHdpdGggdGhlIDx2YXI+cGM8L3Zhcj4sIHRoZQorPHZhcj5udW1iZXI8L3Zhcj4gbWF5IGJlIG9taXR0ZWQgKHdpdGggYW4gYWRkcmVzcyByZWdpc3Rlciwgb21pdHRpbmcgdGhlCis8dmFyPm51bWJlcjwvdmFyPiBwcm9kdWNlcyBBZGRyZXNzIFJlZ2lzdGVyIEluZGlyZWN0IG1vZGUpLgorCisgICAgIDxicj48ZHQ+PGRmbj5JbmRleDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+KDwvc3Bhbj48dmFyPmFwYzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjx2YXI+cmVnaXN0ZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48dmFyPnNpemU8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48dmFyPnNjYWxlPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPik8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8cD5UaGUgPHZhcj5udW1iZXI8L3Zhcj4gbWF5IGJlIG9taXR0ZWQsIG9yIGl0IG1heSBhcHBlYXIgd2l0aGluIHRoZQorcGFyZW50aGVzZXMuICBUaGUgPHZhcj5hcGM8L3Zhcj4gbWF5IGJlIG9taXR0ZWQuICBUaGUgPHZhcj5yZWdpc3RlcjwvdmFyPiBhbmQgdGhlCis8dmFyPmFwYzwvdmFyPiBtYXkgYXBwZWFyIGluIGVpdGhlciBvcmRlci4gIElmIGJvdGggPHZhcj5hcGM8L3Zhcj4gYW5kCis8dmFyPnJlZ2lzdGVyPC92YXI+IGFyZSBhZGRyZXNzIHJlZ2lzdGVycywgYW5kIHRoZSA8dmFyPnNpemU8L3Zhcj4gYW5kIDx2YXI+c2NhbGU8L3Zhcj4KK2FyZSBvbWl0dGVkLCB0aGVuIHRoZSBmaXJzdCByZWdpc3RlciBpcyB0YWtlbiBhcyB0aGUgYmFzZSByZWdpc3RlciwgYW5kCit0aGUgc2Vjb25kIGFzIHRoZSBpbmRleCByZWdpc3Rlci4KKworICAgICA8YnI+PGR0PjxkZm4+UG9zdGluZGV4PC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KFs8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48dmFyPmFwYzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5dLDwvc3Bhbj48dmFyPnJlZ2lzdGVyPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PHZhcj5zaXplPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PHZhcj5zY2FsZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjx2YXI+b251bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlIDx2YXI+b251bWJlcjwvdmFyPiwgb3IgdGhlIDx2YXI+cmVnaXN0ZXI8L3Zhcj4sIG9yIGJvdGgsIG1heSBiZSBvbWl0dGVkLiAKK0VpdGhlciB0aGUgPHZhcj5udW1iZXI8L3Zhcj4gb3IgdGhlIDx2YXI+YXBjPC92YXI+IG1heSBiZSBvbWl0dGVkLCBidXQgbm90IGJvdGguCisKKyAgICAgPGJyPjxkdD48ZGZuPlByZWluZGV4PC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KFs8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48dmFyPmFwYzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjx2YXI+cmVnaXN0ZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48dmFyPnNpemU8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48dmFyPnNjYWxlPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPl0sPC9zcGFuPjx2YXI+b251bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlIDx2YXI+bnVtYmVyPC92YXI+LCBvciB0aGUgPHZhcj5hcGM8L3Zhcj4sIG9yIHRoZSA8dmFyPnJlZ2lzdGVyPC92YXI+LCBvciBhbnkgdHdvIG9mCit0aGVtLCBtYXkgYmUgb21pdHRlZC4gIFRoZSA8dmFyPm9udW1iZXI8L3Zhcj4gbWF5IGJlIG9taXR0ZWQuICBUaGUKKzx2YXI+cmVnaXN0ZXI8L3Zhcj4gYW5kIHRoZSA8dmFyPmFwYzwvdmFyPiBtYXkgYXBwZWFyIGluIGVpdGhlciBvcmRlci4gIElmIGJvdGgKKzx2YXI+YXBjPC92YXI+IGFuZCA8dmFyPnJlZ2lzdGVyPC92YXI+IGFyZSBhZGRyZXNzIHJlZ2lzdGVycywgYW5kIHRoZSA8dmFyPnNpemU8L3Zhcj4KK2FuZCA8dmFyPnNjYWxlPC92YXI+IGFyZSBvbWl0dGVkLCB0aGVuIHRoZSBmaXJzdCByZWdpc3RlciBpcyB0YWtlbiBhcyB0aGUKK2Jhc2UgcmVnaXN0ZXIsIGFuZCB0aGUgc2Vjb25kIGFzIHRoZSBpbmRleCByZWdpc3Rlci4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4Nzc2ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEtfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDE4OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTY4Sy1PcHRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNNjhLXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhLXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNNjhLLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik02OEtfMDAyZFN5bnRheC5odG1sI002OEtfMDAyZFN5bnRheCIgdGl0bGU9Ik02OEstU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTY4Sy1PcHRzIj48L2E+Cis8YSBuYW1lPSJNNjhLXzAwMmRPcHRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik02OEtfMDAyZFN5bnRheC5odG1sI002OEtfMDAyZFN5bnRheCI+TTY4Sy1TeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNNjhLXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhLXzAwMmREZXBlbmRlbnQiPk02OEstRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yMy4xIE02ODB4MCBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLU02ODB4MC0xMjM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtTTY4MHgwLW9wdGlvbnMtMTIzNiI+PC9hPlRoZSBNb3Rvcm9sYSA2ODB4MCB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBoYXMgYSBmZXcgbWFjaGluZQorZGVwZW5kZW50IG9wdGlvbnM6CisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWFyY2hfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NNjgweDAtMTIzNyI+PC9hPgorPGRsPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tYXJjaD08L3NwYW4+PHZhcj5hcmNoaXRlY3R1cmU8L3Zhcj48L3NhbXA+JnJzcXVvOzxkZD5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgYSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiAgVGhlIGZvbGxvd2luZworYXJjaGl0ZWN0dXJlcyBhcmUgcmVjb2duaXplZDoKKzxjb2RlPjY4MDAwPC9jb2RlPiwKKzxjb2RlPjY4MDEwPC9jb2RlPiwKKzxjb2RlPjY4MDIwPC9jb2RlPiwKKzxjb2RlPjY4MDMwPC9jb2RlPiwKKzxjb2RlPjY4MDQwPC9jb2RlPiwKKzxjb2RlPjY4MDYwPC9jb2RlPiwKKzxjb2RlPmNwdTMyPC9jb2RlPiwKKzxjb2RlPmlzYWE8L2NvZGU+LAorPGNvZGU+aXNhYXBsdXM8L2NvZGU+LAorPGNvZGU+aXNhYjwvY29kZT4sCis8Y29kZT5pc2FjPC9jb2RlPiBhbmQKKzxjb2RlPmNmdjRlPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWNwdV8wMDNkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU02ODB4MC0xMjM4Ij48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tY3B1PTwvc3Bhbj48dmFyPmNwdTwvdmFyPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyBhIHRhcmdldCBjcHUuICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaDwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgdGhlIGNwdSBtdXN0IGJlIHdpdGhpbiB0aGUgc3BlY2lmaWVkCithcmNoaXRlY3R1cmUuICBBbHNvLCB0aGUgZ2VuZXJpYyBmZWF0dXJlcyBvZiB0aGUgYXJjaGl0ZWN0dXJlIGFyZSB1c2VkCitmb3IgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgcmF0aGVyIHRoYW4gdGhvc2Ugb2YgdGhlIHNwZWNpZmljIGNoaXAuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1fMDA1Ym5vXzAwMmRfMDA1ZDY4ODUxXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU02ODB4MC0xMjM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1fMDA1Ym5vXzAwMmRfMDA1ZDY4ODgxXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU02ODB4MC0xMjQwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1fMDA1Ym5vXzAwMmRfMDA1ZGRpdl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NNjgweDAtMTI0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtXzAwNWJub18wMDJkXzAwNWR1c3BfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTTY4MHgwLTEyNDIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbV8wMDVibm9fMDAyZF8wMDVkZmxvYXRfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTTY4MHgwLTEyNDMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbV8wMDVibm9fMDAyZF8wMDVkbWFjXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU02ODB4MC0xMjQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1fMDA1Ym5vXzAwMmRfMDA1ZGVtYWNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTTY4MHgwLTEyNDUiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1bbm8tXTY4ODUxPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1bbm8tXTY4ODgxPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1bbm8tXWRpdjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tW25vLV11c3A8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbVtuby1dZmxvYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbVtuby1dbWFjPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1bbm8tXWVtYWM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+CitFbmFibGUgb3IgZGlzYWJsZSB2YXJpb3VzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmZWF0dXJlcy4gIElmIGEgY2hpcAorb3IgYXJjaGl0ZWN0dXJlIGJ5IGRlZmF1bHQgc3VwcG9ydHMgYW4gb3B0aW9uIChmb3IgaW5zdGFuY2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1pc2FhcGx1czwvc3Bhbj48L3NhbXA+IGluY2x1ZGVzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWRpdjwvc3Bhbj48L3NhbXA+IG9wdGlvbiksCitleHBsaWNpdGx5IGRpc2FibGluZyB0aGUgb3B0aW9uIHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZGxfMDA3ZC1vcHRpb25fMDAyYy1NNjgweDAtMTI0NiI+PC9hPjxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Zb3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gc2hvcnRlbiB0aGUgc2l6ZSBvZiByZWZlcmVuY2VzIHRvIHVuZGVmaW5lZAorc3ltYm9scy4gIElmIHlvdSBkbyBub3QgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1sPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgcmVmZXJlbmNlcyB0byB1bmRlZmluZWQKK3N5bWJvbHMgYXJlIHdpZGUgZW5vdWdoIGZvciBhIGZ1bGwgPGNvZGU+bG9uZzwvY29kZT4gKDMyIGJpdHMpLiAgKFNpbmNlCis8Y29kZT5hczwvY29kZT4gY2Fubm90IGtub3cgd2hlcmUgdGhlc2Ugc3ltYm9scyBlbmQgdXAsIDxjb2RlPmFzPC9jb2RlPiBjYW4KK29ubHkgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBsaW5rZXIgdG8gZmlsbCBpbiBsYXRlci4gIFNpbmNlIDxjb2RlPmFzPC9jb2RlPgorZG9lcyBub3Qga25vdyBob3cgZmFyIGF3YXkgdGhlc2Ugc3ltYm9scyBhcmUsIGl0IGFsbG9jYXRlcyBhcyBtdWNoIHNwYWNlIGFzIGl0CitjYW4uKSAgSWYgeW91IHVzZSB0aGlzIG9wdGlvbiwgdGhlIHJlZmVyZW5jZXMgYXJlIG9ubHkgb25lIHdvcmQgd2lkZSAoMTYgYml0cykuIAorVGhpcyBtYXkgYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRoZSBvYmplY3QgZmlsZSB0byBiZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSwgYW5kCit5b3Uga25vdyB0aGF0IHRoZSByZWxldmFudCBzeW1ib2xzIGFyZSBhbHdheXMgbGVzcyB0aGFuIDE3IGJpdHMgYXdheS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRyZWdpc3Rlcl8wMDJkcHJlZml4XzAwMmRvcHRpb25hbF8wMDdkLW9wdGlvbl8wMDJjLU02ODB4MC0xMjQ3Ij48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcmVnaXN0ZXItcHJlZml4LW9wdGlvbmFsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkZvciBzb21lIGNvbmZpZ3VyYXRpb25zLCBlc3BlY2lhbGx5IHRob3NlIHdoZXJlIHRoZSBjb21waWxlciBub3JtYWxseQorZG9lcyBub3QgcHJlcGVuZCBhbiB1bmRlcnNjb3JlIHRvIHRoZSBuYW1lcyBvZiB1c2VyIHZhcmlhYmxlcywgdGhlCithc3NlbWJsZXIgcmVxdWlyZXMgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYmVmb3JlIGFueSB1c2Ugb2YgYSByZWdpc3RlciBuYW1lLiAgVGhpcworaXMgaW50ZW5kZWQgdG8gbGV0IHRoZSBhc3NlbWJsZXIgZGlzdGluZ3Vpc2ggYmV0d2VlbiBDIHZhcmlhYmxlcyBhbmQKK2Z1bmN0aW9ucyBuYW1lZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmEwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hNzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIHNvIG9uLiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcworYWx3YXlzIGFjY2VwdGVkLCBidXQgaXMgbm90IHJlcXVpcmVkIGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLCBub3RhYmx5CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN1bjM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJlZ2lzdGVyLXByZWZpeC1vcHRpb25hbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gbWF5IGJlIHVzZWQKK3RvIHBlcm1pdCBvbWl0dGluZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGV2ZW4gZm9yIGNvbmZpZ3VyYXRpb25zIGZvciB3aGljaCBpdCBpcworbm9ybWFsbHkgcmVxdWlyZWQuICBJZiB0aGlzIGlzIGRvbmUsIGl0IHdpbGwgZ2VuZXJhbGx5IGJlIGltcG9zc2libGUgdG8KK3JlZmVyIHRvIEMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lcyBhcyByZWdpc3RlcgorbmFtZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkYml0d2lzZV8wMDJkb3JfMDA3ZC1vcHRpb25fMDAyYy1NNjgweDAtMTI0OCI+PC9hPjxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWJpdHdpc2Utb3I8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Tm9ybWFsbHkgdGhlIGNoYXJhY3RlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQgY2hhcmFjdGVyLCB3aGljaAorbWVhbnMgdGhhdCBpdCBjYW4gbm90IGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMuICBUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWJpdHdpc2Utb3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29wdGlvbiB0dXJucyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW50byBhIG5vcm1hbCBjaGFyYWN0ZXIuICBJbiB0aGlzIG1vZGUsIHlvdSBtdXN0CitlaXRoZXIgdXNlIEMgc3R5bGUgY29tbWVudHMsIG9yIHN0YXJ0IGNvbW1lbnRzIHdpdGggYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyCithdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRiYXNlXzAwMmRzaXplXzAwMmRkZWZhdWx0XzAwMmQxNl8wMDdkLTEyNDkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRiYXNlXzAwMmRzaXplXzAwMmRkZWZhdWx0XzAwMmQzMl8wMDdkLTEyNTAiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1iYXNlLXNpemUtZGVmYXVsdC0xNiAgLS1iYXNlLXNpemUtZGVmYXVsdC0zMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JZiB5b3UgdXNlIGFuIGFkZHJlc3NpbmcgbW9kZSB3aXRoIGEgYmFzZSByZWdpc3RlciB3aXRob3V0IHNwZWNpZnlpbmcKK3RoZSBzaXplLCA8Y29kZT5hczwvY29kZT4gd2lsbCBub3JtYWxseSB1c2UgdGhlIGZ1bGwgMzIgYml0IHZhbHVlLiAKK0ZvciBleGFtcGxlLCB0aGUgYWRkcmVzc2luZyBtb2RlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWEwQCglZDApPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGVxdWl2YWxlbnQgdG8KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWEwQCglZDA6bCk8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBZb3UgbWF5IHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWJhc2Utc2l6ZS1kZWZhdWx0LTE2PC9zcGFuPjwvc2FtcD4mcnNxdW87CitvcHRpb24gdG8gdGVsbCA8Y29kZT5hczwvY29kZT4gdG8gZGVmYXVsdCB0byB1c2luZyB0aGUgMTYgYml0IHZhbHVlLiAKK0luIHRoaXMgY2FzZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTBAKCVkMCk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgZXF1aXZhbGVudCB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVhMEAoJWQwOncpPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1lvdSBtYXkgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tYmFzZS1zaXplLWRlZmF1bHQtMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIHRvIHJlc3RvcmUgdGhlCitkZWZhdWx0IGJlaGF2aW91ci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRkaXNwXzAwMmRzaXplXzAwMmRkZWZhdWx0XzAwMmQxNl8wMDdkLTEyNTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRkaXNwXzAwMmRzaXplXzAwMmRkZWZhdWx0XzAwMmQzMl8wMDdkLTEyNTIiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1kaXNwLXNpemUtZGVmYXVsdC0xNiAgLS1kaXNwLXNpemUtZGVmYXVsdC0zMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JZiB5b3UgdXNlIGFuIGFkZHJlc3NpbmcgbW9kZSB3aXRoIGEgZGlzcGxhY2VtZW50LCBhbmQgdGhlIHZhbHVlIG9mIHRoZQorZGlzcGxhY2VtZW50IGlzIG5vdCBrbm93biwgPGNvZGU+YXM8L2NvZGU+IHdpbGwgbm9ybWFsbHkgYXNzdW1lIHRoYXQKK3RoZSB2YWx1ZSBpcyAzMiBiaXRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBzeW1ib2wgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kaXNwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGhhcyBub3QKK2JlZW4gZGVmaW5lZCwgPGNvZGU+YXM8L2NvZGU+IHdpbGwgYXNzZW1ibGUgdGhlIGFkZHJlc3NpbmcgbW9kZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTBAKGRpc3AsJWQwKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyB0aG91Z2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kaXNwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGEgMzIgYml0IHZhbHVlLiAgWW91IG1heQordXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZGlzcC1zaXplLWRlZmF1bHQtMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIHRvIHRlbGwgPGNvZGU+YXM8L2NvZGU+Cit0byBpbnN0ZWFkIGFzc3VtZSB0aGF0IHRoZSBkaXNwbGFjZW1lbnQgaXMgMTYgYml0cy4gIEluIHRoaXMgY2FzZSwKKzxjb2RlPmFzPC9jb2RlPiB3aWxsIGFzc2VtYmxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWEwQChkaXNwLCVkMCk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgdGhvdWdoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRpc3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYSAxNiBiaXQgdmFsdWUuICBZb3UgbWF5IHVzZSB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1kaXNwLXNpemUtZGVmYXVsdC0zMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkcGNyZWxfMDA3ZC0xMjUzIj48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcGNyZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QWx3YXlzIGtlZXAgYnJhbmNoZXMgUEMtcmVsYXRpdmUuICBJbiB0aGUgTTY4MHgwIGFyY2hpdGVjdHVyZSBhbGwgYnJhbmNoZXMKK2FyZSBkZWZpbmVkIGFzIFBDLXJlbGF0aXZlLiAgSG93ZXZlciwgb24gc29tZSBwcm9jZXNzb3JzIHRoZXkgYXJlIGxpbWl0ZWQKK3RvIHdvcmQgZGlzcGxhY2VtZW50cyBtYXhpbXVtLiAgV2hlbiA8Y29kZT5hczwvY29kZT4gbmVlZHMgYSBsb25nIGJyYW5jaAordGhhdCBpcyBub3QgYXZhaWxhYmxlLCBpdCBub3JtYWxseSBlbWl0cyBhbiBhYnNvbHV0ZSBqdW1wIGluc3RlYWQuICBUaGlzCitvcHRpb24gZGlzYWJsZXMgdGhpcyBzdWJzdGl0dXRpb24uICBXaGVuIHRoaXMgb3B0aW9uIGlzIGdpdmVuIGFuZCBubyBsb25nCiticmFuY2hlcyBhcmUgYXZhaWxhYmxlLCBvbmx5IHdvcmQgYnJhbmNoZXMgd2lsbCBiZSBlbWl0dGVkLiAgQW4gZXJyb3IKK21lc3NhZ2Ugd2lsbCBiZSBnZW5lcmF0ZWQgaWYgYSB3b3JkIGJyYW5jaCBjYW5ub3QgcmVhY2ggaXRzIHRhcmdldC4gIFRoaXMKK29wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIDY4MDIwIGFuZCBvdGhlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZSBsb25nIGJyYW5jaGVzLiAKK3NlZSA8YSBocmVmPSJNNjhLXzAwMmRCcmFuY2guaHRtbCNNNjhLXzAwMmRCcmFuY2giPkJyYW5jaCBJbXByb3ZlbWVudDwvYT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG02ODAwMF8wMDdkLWFuZC1yZWxhdGVkLW9wdGlvbnMtMTI1NCI+PC9hPjxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZS1vcHRpb25zXzAwMmMtTTY4MHgwLTEyNTUiPjwvYT48YSBuYW1lPSJpbmRleC1NNjgweDAtYXJjaGl0ZWN0dXJlLW9wdGlvbnMtMTI1NiI+PC9hPjxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxjb2RlPmFzPC9jb2RlPiBjYW4gYXNzZW1ibGUgY29kZSBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgbWVtYmVycyBvZiB0aGUKK01vdG9yb2xhIDY4MHgwIGZhbWlseS4gIFRoZSBkZWZhdWx0IGRlcGVuZHMgdXBvbiBob3cgPGNvZGU+YXM8L2NvZGU+Cit3YXMgY29uZmlndXJlZCB3aGVuIGl0IHdhcyBidWlsdDsgbm9ybWFsbHksIHRoZSBkZWZhdWx0IGlzIHRvIGFzc2VtYmxlCitjb2RlIGZvciB0aGUgNjgwMjAgbWljcm9wcm9jZXNzb3IuICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgbWF5IGJlIHVzZWQgdG8KK2NoYW5nZSB0aGUgZGVmYXVsdC4gIFRoZXNlIG9wdGlvbnMgY29udHJvbCB3aGljaCBpbnN0cnVjdGlvbnMgYW5kCithZGRyZXNzaW5nIG1vZGVzIGFyZSBwZXJtaXR0ZWQuICBUaGUgbWVtYmVycyBvZiB0aGUgNjgweDAgZmFtaWx5IGFyZQordmVyeSBzaW1pbGFyLiAgRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaWZmZXJlbmNlcywgc2VlIHRoZQorTW90b3JvbGEgbWFudWFscy4KKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4ZWMwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4aGMwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4aGMwMDE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MDA4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODMwMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgzMDY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MzA3PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODMyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgzNTY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QXNzZW1ibGUgZm9yIHRoZSA2ODAwMC4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MDA4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgzMDI8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZCBzbyBvbiBhcmUgc3lub255bXMKK2ZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHNpbmNlIHRoZSBjaGlwcyBhcmUgdGhlIHNhbWUgZnJvbSB0aGUgcG9pbnQgb2Ygdmlldworb2YgdGhlIGFzc2VtYmxlci4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MDEwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFzc2VtYmxlIGZvciB0aGUgNjgwMTAuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODAyMDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjhlYzAyMDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Bc3NlbWJsZSBmb3IgdGhlIDY4MDIwLiAgVGhpcyBpcyBub3JtYWxseSB0aGUgZGVmYXVsdC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MDMwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02OGVjMDMwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFzc2VtYmxlIGZvciB0aGUgNjgwMzAuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODA0MDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjhlYzA0MDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Bc3NlbWJsZSBmb3IgdGhlIDY4MDQwLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgwNjA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4ZWMwNjA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QXNzZW1ibGUgZm9yIHRoZSA2ODA2MC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWNwdTMyPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODMzMDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgzMzE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MzMyPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODMzMzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgzMzQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MzM2PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODM0MDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjgzNDE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MzQ5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODM2MDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Bc3NlbWJsZSBmb3IgdGhlIENQVTMyIGZhbWlseSBvZiBjaGlwcy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTUyMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTUyMDI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTUyMDQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTUyMDY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTUyMDZlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW01MjF4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW01MjQ5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW01Mjh4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW01MzA3PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW01NDA3PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW01NDd4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW01NDh4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1jZnY0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1jZnY0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Bc3NlbWJsZSBmb3IgdGhlIENvbGRGaXJlIGZhbWlseSBvZiBjaGlwcy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4ODgxPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODg4Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Bc3NlbWJsZSA2ODg4MSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciB0aGUKKzY4MDIwLCA2ODAzMCwgYW5kIHRoZSBDUFUzMi4gIFRoZSA2ODA0MCBhbmQgNjgwNjAgYWx3YXlzIHN1cHBvcnQKK2Zsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbW5vLTY4ODgxPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRvIG5vdCBhc3NlbWJsZSA2ODg4MSBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0Citmb3IgNjgwMDAgYW5kIHRoZSA2ODAxMC4gIFRoZSA2ODA0MCBhbmQgNjgwNjAgYWx3YXlzIHN1cHBvcnQgZmxvYXRpbmcKK3BvaW50IGluc3RydWN0aW9ucywgZXZlbiBpZiB0aGlzIG9wdGlvbiBpcyB1c2VkLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjg4NTE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QXNzZW1ibGUgNjg4NTEgTU1VIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZSA2ODAyMCwKKzY4MDMwLCBhbmQgNjgwNjAuICBUaGUgNjgwNDAgYWNjZXB0cyBhIHNvbWV3aGF0IGRpZmZlcmVudCBzZXQgb2YgTU1VCitpbnN0cnVjdGlvbnM7ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW02ODg1MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTY4MDQwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNob3VsZCBub3QgYmUgdXNlZAordG9nZXRoZXIuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1uby02ODg1MTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EbyBub3QgYXNzZW1ibGUgNjg4NTEgTU1VIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZQorNjgwMDAsIDY4MDEwLCBhbmQgdGhlIENQVTMyLiAgVGhlIDY4MDQwIGFjY2VwdHMgYSBzb21ld2hhdCBkaWZmZXJlbnQgc2V0CitvZiBNTVUgaW5zdHJ1Y3Rpb25zLiAKKzwvZGw+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEtfMDAyZFN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1YTk4OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL002OEtfMDAyZFN5bnRheC5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NNjhLLVN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTTY4S18wMDJkRGVwZW5kZW50Lmh0bWwjTTY4S18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTTY4Sy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNNjhLXzAwMmRPcHRzLmh0bWwjTTY4S18wMDJkT3B0cyIgdGl0bGU9Ik02OEstT3B0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik02OEtfMDAyZE1vdG9fMDAyZFN5bnRheC5odG1sI002OEtfMDAyZE1vdG9fMDAyZFN5bnRheCIgdGl0bGU9Ik02OEstTW90by1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNNjhLLVN5bnRheCI+PC9hPgorPGEgbmFtZT0iTTY4S18wMDJkU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik02OEtfMDAyZE1vdG9fMDAyZFN5bnRheC5odG1sI002OEtfMDAyZE1vdG9fMDAyZFN5bnRheCI+TTY4Sy1Nb3RvLVN5bnRheDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik02OEtfMDAyZE9wdHMuaHRtbCNNNjhLXzAwMmRPcHRzIj5NNjhLLU9wdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNNjhLXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhLXzAwMmREZXBlbmRlbnQiPk02OEstRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yMy4yIFN5bnRheDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2NfMDA3Ym1pdF8wMDdkLTEyNTciPjwvYT5UaGlzIHN5bnRheCBmb3IgdGhlIE1vdG9yb2xhIDY4MHgwIHdhcyBkZXZlbG9wZWQgYXQgPHNwYW4gY2xhc3M9InNjIj5taXQ8L3NwYW4+LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1NNjgweDAtc3ludGF4LTEyNTgiPjwvYT48YSBuYW1lPSJpbmRleC1zeW50YXhfMDAyYy1NNjgweDAtMTI1OSI+PC9hPjxhIG5hbWU9ImluZGV4LU02ODB4MC1zaXplLW1vZGlmaWVycy0xMjYwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2l6ZS1tb2RpZmllcnNfMDAyYy1NNjgweDAtMTI2MSI+PC9hPlRoZSA2ODB4MCB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiB1c2VzIGluc3RydWN0aW9ucyBuYW1lcyBhbmQKK3N5bnRheCBjb21wYXRpYmxlIHdpdGggdGhlIFN1biBhc3NlbWJsZXIuICBJbnRlcnZlbmluZyBwZXJpb2RzIGFyZQoraWdub3JlZDsgZm9yIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92bDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBlcXVpdmFsZW50IHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92Lmw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPkluIHRoZSBmb2xsb3dpbmcgdGFibGUgPHZhcj5hcGM8L3Zhcj4gc3RhbmRzIGZvciBhbnkgb2YgdGhlIGFkZHJlc3MgcmVnaXN0ZXJzCisoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVhNzwvc3Bhbj48L3NhbXA+JnJzcXVvOyksIHRoZSBwcm9ncmFtIGNvdW50ZXIgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXBjPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwgdGhlCit6ZXJvLWFkZHJlc3MgcmVsYXRpdmUgdG8gdGhlIHByb2dyYW0gY291bnRlciAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lenBjPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwgYSBzdXBwcmVzc2VkCithZGRyZXNzIHJlZ2lzdGVyICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV6YTA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV6YTc8L3NwYW4+PC9zYW1wPiZyc3F1bzspLCBvciBpdCBtYXkgYmUgb21pdHRlZAorZW50aXJlbHkuICBUaGUgdXNlIG9mIDx2YXI+c2l6ZTwvdmFyPiBtZWFucyBvbmUgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kCitpdCBtYXkgYmUgb21pdHRlZCwgYWxvbmcgd2l0aCB0aGUgbGVhZGluZyBjb2xvbiwgdW5sZXNzIGEgc2NhbGUgaXMgYWxzbworc3BlY2lmaWVkLiAgVGhlIHVzZSBvZiA8dmFyPnNjYWxlPC92YXI+IG1lYW5zIG9uZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj44PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgaXQgbWF5IGFsd2F5cyBiZSBvbWl0dGVkIGFsb25nIHdpdGggdGhlCitsZWFkaW5nIGNvbG9uLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1NNjgweDAtYWRkcmVzc2luZy1tb2Rlcy0xMjYyIj48L2E+PGEgbmFtZT0iaW5kZXgtYWRkcmVzc2luZy1tb2Rlc18wMDJjLU02ODB4MC0xMjYzIj48L2E+VGhlIGZvbGxvd2luZyBhZGRyZXNzaW5nIG1vZGVzIGFyZSB1bmRlcnN0b29kOgorICAgICA8ZGw+Cis8ZHQ+PGRmbj5JbW1lZGlhdGU8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjx2YXI+bnVtYmVyPC92YXI+PC9zYW1wPiZyc3F1bzsKKworICAgICA8YnI+PGR0PjxkZm4+RGF0YSBSZWdpc3RlcjwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aHJvdWdoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWQ3PC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48ZGZuPkFkZHJlc3MgUmVnaXN0ZXI8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVhNzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxicj4KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWE3PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFsc28ga25vd24gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3A8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGkuZS4sIHRoZSBTdGFjayBQb2ludGVyLiAgPGNvZGU+JWE2PC9jb2RlPgoraXMgYWxzbyBrbm93biBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVmcDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlIEZyYW1lIFBvaW50ZXIuCisKKyAgICAgPGJyPjxkdD48ZGZuPkFkZHJlc3MgUmVnaXN0ZXIgSW5kaXJlY3Q8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTBAPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTdAPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48ZGZuPkFkZHJlc3MgUmVnaXN0ZXIgUG9zdGluY3JlbWVudDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVhMEArPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTdAKzwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5BZGRyZXNzIFJlZ2lzdGVyIFByZWRlY3JlbWVudDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVhMEAtPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYTdALTwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5JbmRpcmVjdCBQbHVzIE9mZnNldDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHZhcj5hcGM8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+QCg8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+KTwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5JbmRleDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHZhcj5hcGM8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+QCg8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48dmFyPnJlZ2lzdGVyPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PHZhcj5zaXplPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PHZhcj5zY2FsZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlIDx2YXI+bnVtYmVyPC92YXI+IG1heSBiZSBvbWl0dGVkLgorCisgICAgIDxicj48ZHQ+PGRmbj5Qb3N0aW5kZXg8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjx2YXI+YXBjPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPkAoPC9zcGFuPjx2YXI+bnVtYmVyPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPilAKDwvc3Bhbj48dmFyPm9udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48dmFyPnJlZ2lzdGVyPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PHZhcj5zaXplPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PHZhcj5zY2FsZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlIDx2YXI+b251bWJlcjwvdmFyPiBvciB0aGUgPHZhcj5yZWdpc3RlcjwvdmFyPiwgYnV0IG5vdCBib3RoLCBtYXkgYmUgb21pdHRlZC4KKworICAgICA8YnI+PGR0PjxkZm4+UHJlaW5kZXg8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjx2YXI+YXBjPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPkAoPC9zcGFuPjx2YXI+bnVtYmVyPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiw8L3NwYW4+PHZhcj5yZWdpc3RlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjx2YXI+c2l6ZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjx2YXI+c2NhbGU8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+KUAoPC9zcGFuPjx2YXI+b251bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlIDx2YXI+bnVtYmVyPC92YXI+IG1heSBiZSBvbWl0dGVkLiAgT21pdHRpbmcgdGhlIDx2YXI+cmVnaXN0ZXI8L3Zhcj4gcHJvZHVjZXMKK3RoZSBQb3N0aW5kZXggYWRkcmVzc2luZyBtb2RlLgorCisgICAgIDxicj48ZHQ+PGRmbj5BYnNvbHV0ZTwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHZhcj5zeW1ib2w8L3Zhcj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjx2YXI+ZGlnaXRzPC92YXI+PC9zYW1wPiZyc3F1bzssIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+OmI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Onc8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Omw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkb3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTTY4S18wMDJkb3Bjb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTJmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NNjhLXzAwMmRvcGNvZGVzLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TTY4Sy1vcGNvZGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNNjhLXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhLXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNNjhLLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik02OEtfMDAyZERpcmVjdGl2ZXMuaHRtbCNNNjhLXzAwMmREaXJlY3RpdmVzIiB0aXRsZT0iTTY4Sy1EaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTY4Sy1vcGNvZGVzIj48L2E+Cis8YSBuYW1lPSJNNjhLXzAwMmRvcGNvZGVzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTTY4S18wMDJkRGlyZWN0aXZlcy5odG1sI002OEtfMDAyZERpcmVjdGl2ZXMiPk02OEstRGlyZWN0aXZlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik02OEtfMDAyZERlcGVuZGVudC5odG1sI002OEtfMDAyZERlcGVuZGVudCI+TTY4Sy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjIzLjYgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LU02ODB4MC1vcGNvZGVzLTEyODAiPjwvYT48YSBuYW1lPSJpbmRleC1vcGNvZGVzXzAwMmMtTTY4MHgwLTEyODEiPjwvYT48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1zZXRfMDAyYy1NNjgweDAtMTI4MiI+PC9hPjwhLS0gZG9jQGN5Z251cy5jb206IEkgZG9uJ3Qgc2VlIGFueSBwb2ludCBpbiB0aGUgZm9sbG93aW5nIC0tPgorPCEtLSBwYXJhZ3JhcGguICBCdWdzIGFyZSBidWdzOyBob3cgZG9lcyBzYXlpbmcgdGhpcyAtLT4KKzwhLS0gaGVscCBhbnlvbmU/IC0tPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iTTY4S18wMDJkQnJhbmNoLmh0bWwjTTY4S18wMDJkQnJhbmNoIj5NNjhLLUJyYW5jaDwvYT46ICAgICAgICAgICAgICAgICAgQnJhbmNoIEltcHJvdmVtZW50Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNNjhLXzAwMmRDaGFycy5odG1sI002OEtfMDAyZENoYXJzIj5NNjhLLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NRC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRhYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUQuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NRCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTS5odG1sI00iIHRpdGxlPSJNIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iby5odG1sI28iIHRpdGxlPSJvIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iby5odG1sI28iPm88L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNLmh0bWwjTSI+TTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xMCBEZXBlbmRlbmN5IFRyYWNraW5nOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLU1EPC9zcGFuPjwvc2FtcD48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkTUQtODEiPjwvYT48YSBuYW1lPSJpbmRleC1kZXBlbmRlbmN5LXRyYWNraW5nLTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtbWFrZS1ydWxlcy04MyI+PC9hPgorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gY2FuIGdlbmVyYXRlIGEgZGVwZW5kZW5jeSBmaWxlIGZvciB0aGUgZmlsZSBpdCBjcmVhdGVzLiAgVGhpcworZmlsZSBjb25zaXN0cyBvZiBhIHNpbmdsZSBydWxlIHN1aXRhYmxlIGZvciA8Y29kZT5tYWtlPC9jb2RlPiBkZXNjcmliaW5nIHRoZQorZGVwZW5kZW5jaWVzIG9mIHRoZSBtYWluIHNvdXJjZSBmaWxlLgorCisgICA8cD5UaGUgcnVsZSBpcyB3cml0dGVuIHRvIHRoZSBmaWxlIG5hbWVkIGluIGl0cyBhcmd1bWVudC4KKworICAgPHA+VGhpcyBmZWF0dXJlIGlzIHVzZWQgaW4gdGhlIGF1dG9tYXRpYyB1cGRhdGluZyBvZiBtYWtlZmlsZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Y2EyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1JUFMgQVNFIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNNSVBTXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNSVBTLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JUFMtb3B0aW9uLXN0YWNrLmh0bWwjTUlQUy1vcHRpb24tc3RhY2siIHRpdGxlPSJNSVBTIG9wdGlvbiBzdGFjayI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1JUFMtZmxvYXRpbmdfMDAyZHBvaW50Lmh0bWwjTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQiIHRpdGxlPSJNSVBTIGZsb2F0aW5nLXBvaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQuaHRtbCNNSVBTLWZsb2F0aW5nXzAwMmRwb2ludCI+TUlQUyBmbG9hdGluZy1wb2ludDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1JUFMtb3B0aW9uLXN0YWNrLmh0bWwjTUlQUy1vcHRpb24tc3RhY2siPk1JUFMgb3B0aW9uIHN0YWNrPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50Ij5NSVBTLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjYuOSBEaXJlY3RpdmVzIHRvIGNvbnRyb2wgZ2VuZXJhdGlvbiBvZiBNSVBTIEFTRSBpbnN0cnVjdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NSVBTLU1JUFNfMDAyZDNELWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGUtMTM5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbWlwczNkXzAwN2QtMTM5NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbm9taXBzM2RfMDA3ZC0xMzk2Ij48L2E+VGhlIGRpcmVjdGl2ZSA8Y29kZT4uc2V0IG1pcHMzZDwvY29kZT4gbWFrZXMgdGhlIGFzc2VtYmxlciBhY2NlcHQgaW5zdHJ1Y3Rpb25zCitmcm9tIHRoZSBNSVBTLTNEIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbiBmcm9tIHRoYXQgcG9pbnQgb24KK2luIHRoZSBhc3NlbWJseS4gIFRoZSA8Y29kZT4uc2V0IG5vbWlwczNkPC9jb2RlPiBkaXJlY3RpdmUgcHJldmVudHMgTUlQUy0zRAoraW5zdHJ1Y3Rpb25zIGZyb20gYmVpbmcgYWNjZXB0ZWQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVNtYXJ0TUlQUy1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlLTEzOTciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LXNtYXJ0bWlwc18wMDdkLTEzOTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LW5vc21hcnRtaXBzXzAwN2QtMTM5OSI+PC9hPlRoZSBkaXJlY3RpdmUgPGNvZGU+LnNldCBzbWFydG1pcHM8L2NvZGU+IG1ha2VzIHRoZSBhc3NlbWJsZXIgYWNjZXB0CitpbnN0cnVjdGlvbnMgZnJvbSB0aGUgU21hcnRNSVBTIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbiB0byB0aGUKK01JUFMzMiA8c3BhbiBjbGFzcz0ic2MiPmlzYTwvc3Bhbj4gZnJvbSB0aGF0IHBvaW50IG9uIGluIHRoZSBhc3NlbWJseS4gIFRoZQorPGNvZGU+LnNldCBub3NtYXJ0bWlwczwvY29kZT4gZGlyZWN0aXZlIHByZXZlbnRzIFNtYXJ0TUlQUyBpbnN0cnVjdGlvbnMgZnJvbQorYmVpbmcgYWNjZXB0ZWQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LU1JUFMtTURNWC1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlLTE0MDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LW1kbXhfMDA3ZC0xNDAxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1ub21kbXhfMDA3ZC0xNDAyIj48L2E+VGhlIGRpcmVjdGl2ZSA8Y29kZT4uc2V0IG1kbXg8L2NvZGU+IG1ha2VzIHRoZSBhc3NlbWJsZXIgYWNjZXB0IGluc3RydWN0aW9ucworZnJvbSB0aGUgTURNWCBBcHBsaWNhdGlvbiBTcGVjaWZpYyBFeHRlbnNpb24gZnJvbSB0aGF0IHBvaW50IG9uCitpbiB0aGUgYXNzZW1ibHkuICBUaGUgPGNvZGU+LnNldCBub21kbXg8L2NvZGU+IGRpcmVjdGl2ZSBwcmV2ZW50cyBNRE1YCitpbnN0cnVjdGlvbnMgZnJvbSBiZWluZyBhY2NlcHRlZC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTUlQUy1EU1AtUmVsZWFzZS0xLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGUtMTQwMyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtZHNwXzAwN2QtMTQwNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbm9kc3BfMDA3ZC0xNDA1Ij48L2E+VGhlIGRpcmVjdGl2ZSA8Y29kZT4uc2V0IGRzcDwvY29kZT4gbWFrZXMgdGhlIGFzc2VtYmxlciBhY2NlcHQgaW5zdHJ1Y3Rpb25zCitmcm9tIHRoZSBEU1AgUmVsZWFzZSAxIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbiBmcm9tIHRoYXQgcG9pbnQKK29uIGluIHRoZSBhc3NlbWJseS4gIFRoZSA8Y29kZT4uc2V0IG5vZHNwPC9jb2RlPiBkaXJlY3RpdmUgcHJldmVudHMgRFNQCitSZWxlYXNlIDEgaW5zdHJ1Y3Rpb25zIGZyb20gYmVpbmcgYWNjZXB0ZWQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LU1JUFMtRFNQLVJlbGVhc2UtMi1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlLTE0MDYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LWRzcHIyXzAwN2QtMTQwNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbm9kc3ByMl8wMDdkLTE0MDgiPjwvYT5UaGUgZGlyZWN0aXZlIDxjb2RlPi5zZXQgZHNwcjI8L2NvZGU+IG1ha2VzIHRoZSBhc3NlbWJsZXIgYWNjZXB0IGluc3RydWN0aW9ucworZnJvbSB0aGUgRFNQIFJlbGVhc2UgMiBBcHBsaWNhdGlvbiBTcGVjaWZpYyBFeHRlbnNpb24gZnJvbSB0aGF0IHBvaW50CitvbiBpbiB0aGUgYXNzZW1ibHkuICBUaGlzIGRpcmN0aXZlIGltcGxpZXMgPGNvZGU+LnNldCBkc3A8L2NvZGU+LiAgVGhlCis8Y29kZT4uc2V0IG5vZHNwcjI8L2NvZGU+IGRpcmVjdGl2ZSBwcmV2ZW50cyBEU1AgUmVsZWFzZSAyIGluc3RydWN0aW9ucyBmcm9tCitiZWluZyBhY2NlcHRlZC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTUlQUy1NVC1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlLTE0MDkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LW10XzAwN2QtMTQxMCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbm9tdF8wMDdkLTE0MTEiPjwvYT5UaGUgZGlyZWN0aXZlIDxjb2RlPi5zZXQgbXQ8L2NvZGU+IG1ha2VzIHRoZSBhc3NlbWJsZXIgYWNjZXB0IGluc3RydWN0aW9ucworZnJvbSB0aGUgTVQgQXBwbGljYXRpb24gU3BlY2lmaWMgRXh0ZW5zaW9uIGZyb20gdGhhdCBwb2ludCBvbgoraW4gdGhlIGFzc2VtYmx5LiAgVGhlIDxjb2RlPi5zZXQgbm9tdDwvY29kZT4gZGlyZWN0aXZlIHByZXZlbnRzIE1UCitpbnN0cnVjdGlvbnMgZnJvbSBiZWluZyBhY2NlcHRlZC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTUlQUy1NQ1UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZS0xNDEyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1tY3VfMDA3ZC0xNDEzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1ub21jdV8wMDdkLTE0MTQiPjwvYT5UaGUgZGlyZWN0aXZlIDxjb2RlPi5zZXQgbWN1PC9jb2RlPiBtYWtlcyB0aGUgYXNzZW1ibGVyIGFjY2VwdCBpbnN0cnVjdGlvbnMKK2Zyb20gdGhlIE1DVSBBcHBsaWNhdGlvbiBTcGVjaWZpYyBFeHRlbnNpb24gZnJvbSB0aGF0IHBvaW50IG9uCitpbiB0aGUgYXNzZW1ibHkuICBUaGUgPGNvZGU+LnNldCBub21jdTwvY29kZT4gZGlyZWN0aXZlIHByZXZlbnRzIE1DVQoraW5zdHJ1Y3Rpb25zIGZyb20gYmVpbmcgYWNjZXB0ZWQuCisKKyAgIDxwPlRyYWRpdGlvbmFsIDxzcGFuIGNsYXNzPSJzYyI+bWlwczwvc3Bhbj4gYXNzZW1ibGVycyBkbyBub3Qgc3VwcG9ydCB0aGVzZSBkaXJlY3RpdmVzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLUlTQS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1JU0EuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI1OGEwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1JU0EuaHRtbApAQCAtMCwwICsxLDg1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NSVBTIElTQSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTUlQUy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNSVBTLVN0YWJzLmh0bWwjTUlQUy1TdGFicyIgdGl0bGU9Ik1JUFMgU3RhYnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI01JUFMtc3ltYm9sLXNpemVzIiB0aXRsZT0iTUlQUyBzeW1ib2wgc2l6ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSVBTLUlTQSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI01JUFMtc3ltYm9sLXNpemVzIj5NSVBTIHN5bWJvbCBzaXplczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1JUFMtU3RhYnMuaHRtbCNNSVBTLVN0YWJzIj5NSVBTIFN0YWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50Ij5NSVBTLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjYuNSBEaXJlY3RpdmVzIHRvIG92ZXJyaWRlIHRoZSBJU0EgbGV2ZWw8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NSVBTLUlTQS1vdmVycmlkZS0xMzgzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1taXBzXzAwNDB2YXJfMDA3Ym5fMDA3ZF8wMDdkLTEzODQiPjwvYT48c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIGFuIGFkZGl0aW9uYWwgZGlyZWN0aXZlIHRvIGNoYW5nZQordGhlIDxzcGFuIGNsYXNzPSJzYyI+bWlwczwvc3Bhbj4gSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSBsZXZlbCBvbiB0aGUgZmx5OiA8Y29kZT4uc2V0CittaXBzPC9jb2RlPjx2YXI+bjwvdmFyPi4gIDx2YXI+bjwvdmFyPiBzaG91bGQgYmUgYSBudW1iZXIgZnJvbSAwIHRvIDUsIG9yIDMyLCAzMnIyLCA2NAorb3IgNjRyMi4gCitUaGUgdmFsdWVzIG90aGVyIHRoYW4gMCBtYWtlIHRoZSBhc3NlbWJsZXIgYWNjZXB0IGluc3RydWN0aW9ucworZm9yIHRoZSBjb3JyZXNwb25kaW5nIDxzcGFuIGNsYXNzPSJzYyI+aXNhPC9zcGFuPiBsZXZlbCwgZnJvbSB0aGF0IHBvaW50IG9uIGluIHRoZQorYXNzZW1ibHkuICA8Y29kZT4uc2V0IG1pcHM8L2NvZGU+PHZhcj5uPC92YXI+IGFmZmVjdHMgbm90IG9ubHkgd2hpY2ggaW5zdHJ1Y3Rpb25zCithcmUgcGVybWl0dGVkLCBidXQgYWxzbyBob3cgY2VydGFpbiBtYWNyb3MgYXJlIGV4cGFuZGVkLiAgPGNvZGU+LnNldAorbWlwczA8L2NvZGU+IHJlc3RvcmVzIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmlzYTwvc3Bhbj4gbGV2ZWwgdG8gaXRzIG9yaWdpbmFsIGxldmVsOiBlaXRoZXIgdGhlCitsZXZlbCB5b3Ugc2VsZWN0ZWQgd2l0aCBjb21tYW5kIGxpbmUgb3B0aW9ucywgb3IgdGhlIGRlZmF1bHQgZm9yIHlvdXIKK2NvbmZpZ3VyYXRpb24uICBZb3UgY2FuIHVzZSB0aGlzIGZlYXR1cmUgdG8gcGVybWl0IHNwZWNpZmljIDxzcGFuIGNsYXNzPSJzYyI+bWlwczM8L3NwYW4+CitpbnN0cnVjdGlvbnMgd2hpbGUgYXNzZW1ibGluZyBpbiAzMiBiaXQgbW9kZS4gIFVzZSB0aGlzIGRpcmVjdGl2ZSB3aXRoCitjYXJlIQorCisgICA8cD48YSBuYW1lPSJpbmRleC1NSVBTLUNQVS1vdmVycmlkZS0xMzg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1hcmNoXzAwM2RfMDA0MHZhcl8wMDdiY3B1XzAwN2RfMDA3ZC0xMzg2Ij48L2E+VGhlIDxjb2RlPi5zZXQgYXJjaD08L2NvZGU+PHZhcj5jcHU8L3Zhcj4gZGlyZWN0aXZlIHByb3ZpZGVzIGV2ZW4gZmluZXIgY29udHJvbC4gCitJdCBjaGFuZ2VzIHRoZSBlZmZlY3RpdmUgQ1BVIHRhcmdldCBhbmQgYWxsb3dzIHRoZSBhc3NlbWJsZXIgdG8gdXNlCitpbnN0cnVjdGlvbnMgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIENQVS4gIEFsbCBDUFVzIHN1cHBvcnRlZCBieSB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1hcmNoPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24gYXJlIGFsc28gc2VsZWN0YWJsZSBieSB0aGlzIGRpcmVjdGl2ZS4gCitUaGUgb3JpZ2luYWwgdmFsdWUgaXMgcmVzdG9yZWQgYnkgPGNvZGU+LnNldCBhcmNoPWRlZmF1bHQ8L2NvZGU+LgorCisgICA8cD5UaGUgZGlyZWN0aXZlIDxjb2RlPi5zZXQgbWlwczE2PC9jb2RlPiBwdXRzIHRoZSBhc3NlbWJsZXIgaW50byBNSVBTIDE2IG1vZGUsCitpbiB3aGljaCBpdCB3aWxsIGFzc2VtYmxlIGluc3RydWN0aW9ucyBmb3IgdGhlIE1JUFMgMTYgcHJvY2Vzc29yLiAgVXNlCis8Y29kZT4uc2V0IG5vbWlwczE2PC9jb2RlPiB0byByZXR1cm4gdG8gbm9ybWFsIDMyIGJpdCBtb2RlLgorCisgICA8cD5UcmFkaXRpb25hbCA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IGFzc2VtYmxlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBkaXJlY3RpdmUuCisKKyAgIDxwPlRoZSBkaXJlY3RpdmUgPGNvZGU+LnNldCBtaWNyb21pcHM8L2NvZGU+IHB1dHMgdGhlIGFzc2VtYmxlciBpbnRvIG1pY3JvTUlQUyBtb2RlLAoraW4gd2hpY2ggaXQgd2lsbCBhc3NlbWJsZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBtaWNyb01JUFMgcHJvY2Vzc29yLiAgVXNlCis8Y29kZT4uc2V0IG5vbWljcm9taXBzPC9jb2RlPiB0byByZXR1cm4gdG8gbm9ybWFsIDMyIGJpdCBtb2RlLgorCisgICA8cD5UcmFkaXRpb25hbCA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IGFzc2VtYmxlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBkaXJlY3RpdmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFMtT2JqZWN0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLU9iamVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYTBiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLU9iamVjdC5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1JUFMgT2JqZWN0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNNSVBTXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNSVBTLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JUFMtT3B0cy5odG1sI01JUFMtT3B0cyIgdGl0bGU9Ik1JUFMgT3B0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1JUFMtU3RhYnMuaHRtbCNNSVBTLVN0YWJzIiB0aXRsZT0iTUlQUyBTdGFicyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1JUFMtT2JqZWN0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1JUFMtU3RhYnMuaHRtbCNNSVBTLVN0YWJzIj5NSVBTIFN0YWJzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUlQUy1PcHRzLmh0bWwjTUlQUy1PcHRzIj5NSVBTIE9wdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNNSVBTXzAwMmREZXBlbmRlbnQiPk1JUFMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yNi4yIE1JUFMgRUNPRkYgb2JqZWN0IGNvZGU8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1FQ09GRi1zZWN0aW9ucy0xMzc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtTUlQUy1FQ09GRi1zZWN0aW9ucy0xMzc3Ij48L2E+QXNzZW1ibGluZyBmb3IgYSA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IDxzcGFuIGNsYXNzPSJzYyI+ZWNvZmY8L3NwYW4+IHRhcmdldCBzdXBwb3J0cyBzb21lIGFkZGl0aW9uYWwgc2VjdGlvbnMKK2Jlc2lkZXMgdGhlIHVzdWFsIDxjb2RlPi50ZXh0PC9jb2RlPiwgPGNvZGU+LmRhdGE8L2NvZGU+IGFuZCA8Y29kZT4uYnNzPC9jb2RlPi4gIFRoZQorYWRkaXRpb25hbCBzZWN0aW9ucyBhcmUgPGNvZGU+LnJkYXRhPC9jb2RlPiwgdXNlZCBmb3IgcmVhZC1vbmx5IGRhdGEsCis8Y29kZT4uc2RhdGE8L2NvZGU+LCB1c2VkIGZvciBzbWFsbCBkYXRhLCBhbmQgPGNvZGU+LnNic3M8L2NvZGU+LCB1c2VkIGZvciBzbWFsbAorY29tbW9uIG9iamVjdHMuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXNtYWxsLW9iamVjdHNfMDAyYy1NSVBTLUVDT0ZGLTEzNzgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmdwXzAwN2QtcmVnaXN0ZXJfMDAyYy1NSVBTLTEzNzkiPjwvYT5XaGVuIGFzc2VtYmxpbmcgZm9yIDxzcGFuIGNsYXNzPSJzYyI+ZWNvZmY8L3NwYW4+LCB0aGUgYXNzZW1ibGVyIHVzZXMgdGhlIDxjb2RlPiRncDwvY29kZT4gKDxjb2RlPiQyODwvY29kZT4pCityZWdpc3RlciB0byBmb3JtIHRoZSBhZGRyZXNzIG9mIGEgJmxkcXVvO3NtYWxsIG9iamVjdCZyZHF1bzsuICBBbnkgb2JqZWN0IGluIHRoZQorPGNvZGU+LnNkYXRhPC9jb2RlPiBvciA8Y29kZT4uc2JzczwvY29kZT4gc2VjdGlvbnMgaXMgY29uc2lkZXJlZCAmbGRxdW87c21hbGwmcmRxdW87IGluIHRoaXMgc2Vuc2UuIAorRm9yIGV4dGVybmFsIG9iamVjdHMsIG9yIGZvciBvYmplY3RzIGluIHRoZSA8Y29kZT4uYnNzPC9jb2RlPiBzZWN0aW9uLCB5b3UgY2FuIHVzZQordGhlIDxjb2RlPmdjYzwvY29kZT4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gY29udHJvbCB0aGUgc2l6ZSBvZiBvYmplY3RzIGFkZHJlc3NlZCB2aWEKKzxjb2RlPiRncDwvY29kZT47IHRoZSBkZWZhdWx0IHZhbHVlIGlzIDgsIG1lYW5pbmcgdGhhdCBhIHJlZmVyZW5jZSB0byBhbnkgb2JqZWN0CitlaWdodCBieXRlcyBvciBzbWFsbGVyIHVzZXMgPGNvZGU+JGdwPC9jb2RlPi4gIFBhc3NpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRyAwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvCis8Y29kZT5hczwvY29kZT4gcHJldmVudHMgaXQgZnJvbSB1c2luZyB0aGUgPGNvZGU+JGdwPC9jb2RlPiByZWdpc3RlciBvbiB0aGUgYmFzaXMKK29mIG9iamVjdCBzaXplIChidXQgdGhlIGFzc2VtYmxlciB1c2VzIDxjb2RlPiRncDwvY29kZT4gZm9yIG9iamVjdHMgaW4gPGNvZGU+LnNkYXRhPC9jb2RlPgorb3IgPGNvZGU+c2JzczwvY29kZT4gaW4gYW55IGNhc2UpLiAgVGhlIHNpemUgb2YgYW4gb2JqZWN0IGluIHRoZSA8Y29kZT4uYnNzPC9jb2RlPiBzZWN0aW9uCitpcyBzZXQgYnkgdGhlIDxjb2RlPi5jb21tPC9jb2RlPiBvciA8Y29kZT4ubGNvbW08L2NvZGU+IGRpcmVjdGl2ZSB0aGF0IGRlZmluZXMgaXQuICBUaGUKK3NpemUgb2YgYW4gZXh0ZXJuYWwgb2JqZWN0IG1heSBiZSBzZXQgd2l0aCB0aGUgPGNvZGU+LmV4dGVybjwvY29kZT4gZGlyZWN0aXZlLiAgRm9yCitleGFtcGxlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5leHRlcm4gc3ltLDQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGVjbGFyZXMgdGhhdCB0aGUgb2JqZWN0IGF0IDxjb2RlPnN5bTwvY29kZT4gaXMgNCBieXRlcworaW4gbGVuZ3RoLCB3aGllIGxlYXZpbmcgPGNvZGU+c3ltPC9jb2RlPiBvdGhlcndpc2UgdW5kZWZpbmVkLgorCisgICA8cD5Vc2luZyBzbWFsbCA8c3BhbiBjbGFzcz0ic2MiPmVjb2ZmPC9zcGFuPiBvYmplY3RzIHJlcXVpcmVzIGxpbmtlciBzdXBwb3J0LCBhbmQgYXNzdW1lcyB0aGF0IHRoZQorPGNvZGU+JGdwPC9jb2RlPiByZWdpc3RlciBpcyBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgKG5vcm1hbGx5IGRvbmUgYXV0b21hdGljYWxseSBieQordGhlIHN0YXJ0dXAgY29kZSkuICA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IDxzcGFuIGNsYXNzPSJzYyI+ZWNvZmY8L3NwYW4+IGFzc2VtYmx5IGNvZGUgbXVzdCBub3QgbW9kaWZ5IHRoZQorPGNvZGU+JGdwPC9jb2RlPiByZWdpc3Rlci4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1PcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLU9wdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGFlMTUxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1PcHRzLmh0bWwKQEAgLTAsMCArMSwzMzIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1JUFMgT3B0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTUlQUy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNSVBTLU9iamVjdC5odG1sI01JUFMtT2JqZWN0IiB0aXRsZT0iTUlQUyBPYmplY3QiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSVBTLU9wdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlQUy1PYmplY3QuaHRtbCNNSVBTLU9iamVjdCI+TUlQUyBPYmplY3Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNNSVBTXzAwMmREZXBlbmRlbnQiPk1JUFMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yNi4xIEFzc2VtYmxlciBvcHRpb25zPC9oND4KKworPHA+VGhlIDxzcGFuIGNsYXNzPSJzYyI+bWlwczwvc3Bhbj4gY29uZmlndXJhdGlvbnMgb2YgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmFzPC9jb2RlPiBzdXBwb3J0IHRoZXNlCitzcGVjaWFsIG9wdGlvbnM6CisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkR18wMDdkLW9wdGlvbi1fMDAyOE1JUFNfMDAyOS0xMzYyIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1HIDwvY29kZT48dmFyPm51bTwvdmFyPjxkZD5UaGlzIG9wdGlvbiBzZXRzIHRoZSBsYXJnZXN0IHNpemUgb2YgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQKK2ltcGxpY2l0bHkgd2l0aCB0aGUgPGNvZGU+Z3A8L2NvZGU+IHJlZ2lzdGVyLiAgSXQgaXMgb25seSBhY2NlcHRlZCBmb3IgdGFyZ2V0cwordGhhdCB1c2UgPHNwYW4gY2xhc3M9InNjIj5lY29mZjwvc3Bhbj4gZm9ybWF0LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkRUJfMDA3ZC1vcHRpb24tXzAwMjhNSVBTXzAwMjktMTM2MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRFTF8wMDdkLW9wdGlvbi1fMDAyOE1JUFNfMDAyOS0xMzY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtTUlQUy1iaWdfMDAyZGVuZGlhbi1vdXRwdXQtMTM2NSI+PC9hPjxhIG5hbWU9ImluZGV4LU1JUFMtbGl0dGxlXzAwMmRlbmRpYW4tb3V0cHV0LTEzNjYiPjwvYT48YSBuYW1lPSJpbmRleC1iaWdfMDAyZGVuZGlhbi1vdXRwdXRfMDAyYy1NSVBTLTEzNjciPjwvYT48YSBuYW1lPSJpbmRleC1saXR0bGVfMDAyZGVuZGlhbi1vdXRwdXRfMDAyYy1NSVBTLTEzNjgiPjwvYT48YnI+PGR0Pjxjb2RlPi1FQjwvY29kZT48ZHQ+PGNvZGU+LUVMPC9jb2RlPjxkZD5BbnkgPHNwYW4gY2xhc3M9InNjIj5taXBzPC9zcGFuPiBjb25maWd1cmF0aW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBjYW4gc2VsZWN0IGJpZy1lbmRpYW4gb3IKK2xpdHRsZS1lbmRpYW4gb3V0cHV0IGF0IHJ1biB0aW1lICh1bmxpa2UgdGhlIG90aGVyIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBkZXZlbG9wbWVudAordG9vbHMsIHdoaWNoIG11c3QgYmUgY29uZmlndXJlZCBmb3Igb25lIG9yIHRoZSBvdGhlcikuICBVc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRUI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3RvIHNlbGVjdCBiaWctZW5kaWFuIG91dHB1dCwgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUVMPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBsaXR0bGUtZW5kaWFuLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUtQSUM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVBJQy1zZWxlY3Rpb25fMDAyYy1NSVBTLTEzNjkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRLUElDXzAwN2Qtb3B0aW9uXzAwMmMtTUlQUy0xMzcwIj48L2E+R2VuZXJhdGUgU1ZSNC1zdHlsZSBQSUMuICBUaGlzIG9wdGlvbiB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIGdlbmVyYXRlCitTVlI0LXN0eWxlIHBvc2l0aW9uLWluZGVwZW5kZW50IG1hY3JvIGV4cGFuc2lvbnMuICBJdCBhbHNvIHRlbGxzIHRoZQorYXNzZW1ibGVyIHRvIG1hcmsgdGhlIG91dHB1dCBmaWxlIGFzIFBJQy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdnh3b3Jrcy1waWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZG12eHdvcmtzXzAwMmRwaWNfMDA3ZC1vcHRpb25fMDAyYy1NSVBTLTEzNzEiPjwvYT5HZW5lcmF0ZSBWeFdvcmtzIFBJQy4gIFRoaXMgb3B0aW9uIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gZ2VuZXJhdGUKK1Z4V29ya3Mtc3R5bGUgcG9zaXRpb24taW5kZXBlbmRlbnQgbWFjcm8gZXhwYW5zaW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1NSVBTLWFyY2hpdGVjdHVyZS1vcHRpb25zLTEzNzIiPjwvYT48YnI+PGR0Pjxjb2RlPi1taXBzMTwvY29kZT48ZHQ+PGNvZGU+LW1pcHMyPC9jb2RlPjxkdD48Y29kZT4tbWlwczM8L2NvZGU+PGR0Pjxjb2RlPi1taXBzNDwvY29kZT48ZHQ+PGNvZGU+LW1pcHM1PC9jb2RlPjxkdD48Y29kZT4tbWlwczMyPC9jb2RlPjxkdD48Y29kZT4tbWlwczMycjI8L2NvZGU+PGR0Pjxjb2RlPi1taXBzNjQ8L2NvZGU+PGR0Pjxjb2RlPi1taXBzNjRyMjwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgYSBwYXJ0aWN1bGFyIE1JUFMgSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSBsZXZlbC4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXBzMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb3JyZXNwb25kcyB0byB0aGUgPHNwYW4gY2xhc3M9InNjIj5yMjAwMDwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJzYyI+cjMwMDA8L3NwYW4+IHByb2Nlc3NvcnMsCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXBzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byB0aGUgPHNwYW4gY2xhc3M9InNjIj5yNjAwMDwvc3Bhbj4gcHJvY2Vzc29yLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXBzMzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byB0aGUKKzxzcGFuIGNsYXNzPSJzYyI+cjQwMDA8L3NwYW4+IHByb2Nlc3NvciwgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1pcHM0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHRoZSA8c3BhbiBjbGFzcz0ic2MiPnI4MDAwPC9zcGFuPiBhbmQKKzxzcGFuIGNsYXNzPSJzYyI+cjEwMDAwPC9zcGFuPiBwcm9jZXNzb3JzLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWlwczU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1pcHMzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWlwczMycjI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXBzNjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXBzNjRyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOworY29ycmVzcG9uZCB0byBnZW5lcmljCis8c3BhbiBjbGFzcz0ic2MiPk1JUFMgVjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJzYyI+TUlQUzMyPC9zcGFuPiwgPHNwYW4gY2xhc3M9InNjIj5NSVBTMzIgUmVsZWFzZSAyPC9zcGFuPiwgPHNwYW4gY2xhc3M9InNjIj5NSVBTNjQ8L3NwYW4+LAorYW5kIDxzcGFuIGNsYXNzPSJzYyI+TUlQUzY0IFJlbGVhc2UgMjwvc3Bhbj4KK0lTQSBwcm9jZXNzb3JzLCByZXNwZWN0aXZlbHkuICBZb3UgY2FuIGFsc28gc3dpdGNoCitpbnN0cnVjdGlvbiBzZXRzIGR1cmluZyB0aGUgYXNzZW1ibHk7IHNlZSA8YSBocmVmPSJNSVBTLUlTQS5odG1sI01JUFMtSVNBIj5EaXJlY3RpdmVzIHRvIG92ZXJyaWRlIHRoZSBJU0EgbGV2ZWw8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1ncDMyPC9jb2RlPjxkdD48Y29kZT4tbWZwMzI8L2NvZGU+PGRkPlNvbWUgbWFjcm9zIGhhdmUgZGlmZmVyZW50IGV4cGFuc2lvbnMgZm9yIDMyLWJpdCBhbmQgNjQtYml0IHJlZ2lzdGVycy4gCitUaGUgcmVnaXN0ZXIgc2l6ZXMgYXJlIG5vcm1hbGx5IGluZmVycmVkIGZyb20gdGhlIElTQSBhbmQgQUJJLCBidXQgdGhlc2UKK2ZsYWdzIGZvcmNlIGEgY2VydGFpbiBncm91cCBvZiByZWdpc3RlcnMgdG8gYmUgdHJlYXRlZCBhcyAzMiBiaXRzIHdpZGUgYXQKK2FsbCB0aW1lcy4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1ncDMyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbnRyb2xzIHRoZSBzaXplIG9mIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tZnAzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb250cm9scyB0aGUgc2l6ZSBvZiBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuCisKKyAgICAgPHA+VGhlIDxjb2RlPi5zZXQgZ3A9MzI8L2NvZGU+IGFuZCA8Y29kZT4uc2V0IGZwPTMyPC9jb2RlPiBkaXJlY3RpdmVzIGFsbG93IHRoZSBzaXplCitvZiByZWdpc3RlcnMgdG8gYmUgY2hhbmdlZCBmb3IgcGFydHMgb2YgYW4gb2JqZWN0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcworcmVzdG9yZWQgYnkgPGNvZGU+LnNldCBncD1kZWZhdWx0PC9jb2RlPiBhbmQgPGNvZGU+LnNldCBmcD1kZWZhdWx0PC9jb2RlPi4KKworICAgICA8cD5PbiBzb21lIE1JUFMgdmFyaWFudHMgdGhlcmUgaXMgYSAzMi1iaXQgbW9kZSBmbGFnOyB3aGVuIHRoaXMgZmxhZyBpcworc2V0LCA2NC1iaXQgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlIGEgdHJhcC4gIEFsc28sIHNvbWUgMzItYml0IE9TZXMgb25seQorc2F2ZSB0aGUgMzItYml0IHJlZ2lzdGVycyBvbiBhIGNvbnRleHQgc3dpdGNoLCBzbyBpdCBpcyBlc3NlbnRpYWwgbmV2ZXIKK3RvIHVzZSB0aGUgNjQtYml0IHJlZ2lzdGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZ3A2NDwvY29kZT48ZHQ+PGNvZGU+LW1mcDY0PC9jb2RlPjxkZD5Bc3N1bWUgdGhhdCA2NC1iaXQgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUuICBUaGlzIGlzIHByb3ZpZGVkIGluIHRoZQoraW50ZXJlc3RzIG9mIHN5bW1ldHJ5IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWdwMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1mcDMyPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPlRoZSA8Y29kZT4uc2V0IGdwPTY0PC9jb2RlPiBhbmQgPGNvZGU+LnNldCBmcD02NDwvY29kZT4gZGlyZWN0aXZlcyBhbGxvdyB0aGUgc2l6ZQorb2YgcmVnaXN0ZXJzIHRvIGJlIGNoYW5nZWQgZm9yIHBhcnRzIG9mIGFuIG9iamVjdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMKK3Jlc3RvcmVkIGJ5IDxjb2RlPi5zZXQgZ3A9ZGVmYXVsdDwvY29kZT4gYW5kIDxjb2RlPi5zZXQgZnA9ZGVmYXVsdDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlwczE2PC9jb2RlPjxkdD48Y29kZT4tbm8tbWlwczE2PC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgTUlQUyAxNiBwcm9jZXNzb3IuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gcHV0dGluZworPGNvZGU+LnNldCBtaXBzMTY8L2NvZGU+IGF0IHRoZSBzdGFydCBvZiB0aGUgYXNzZW1ibHkgZmlsZS4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW5vLW1pcHMxNjwvc3Bhbj48L3NhbXA+JnJzcXVvOwordHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1taWNyb21pcHM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbWljcm9taXBzPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgbWljcm9NSVBTIHByb2Nlc3Nvci4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBwdXR0aW5nCis8Y29kZT4uc2V0IG1pY3JvbWlwczwvY29kZT4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBhc3NlbWJseSBmaWxlLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbW5vLW1pY3JvbWlwczwvc3Bhbj48L3NhbXA+JnJzcXVvOwordHVybnMgb2ZmIHRoaXMgb3B0aW9uLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHB1dHRpbmcgPGNvZGU+LnNldCBub21pY3JvbWlwczwvY29kZT4KK2F0IHRoZSBzdGFydCBvZiB0aGUgYXNzZW1ibHkgZmlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc21hcnRtaXBzPC9jb2RlPjxkdD48Y29kZT4tbW5vLXNtYXJ0bWlwczwvY29kZT48ZGQ+RW5hYmxlcyB0aGUgU21hcnRNSVBTIGV4dGVuc2lvbnMgdG8gdGhlIE1JUFMzMiBpbnN0cnVjdGlvbiBzZXQsIHdoaWNoCitwcm92aWRlcyBhIG51bWJlciBvZiBuZXcgaW5zdHJ1Y3Rpb25zIHdoaWNoIHRhcmdldCBzbWFydGNhcmQgYW5kCitjcnlwdG9ncmFwaGljIGFwcGxpY2F0aW9ucy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBwdXR0aW5nCis8Y29kZT4uc2V0IHNtYXJ0bWlwczwvY29kZT4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBhc3NlbWJseSBmaWxlLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1uby1zbWFydG1pcHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pcHMzZDwvY29kZT48ZHQ+PGNvZGU+LW5vLW1pcHMzZDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE1JUFMtM0QgQXBwbGljYXRpb24gU3BlY2lmaWMgRXh0ZW5zaW9uLiAKK1RoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgTUlQUy0zRCBpbnN0cnVjdGlvbnMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbm8tbWlwczNkPC9zcGFuPjwvc2FtcD4mcnNxdW87IHR1cm5zIG9mZiB0aGlzIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZG14PC9jb2RlPjxkdD48Y29kZT4tbm8tbWRteDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE1ETVggQXBwbGljYXRpb24gU3BlY2lmaWMgRXh0ZW5zaW9uLiAKK1RoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgTURNWCBpbnN0cnVjdGlvbnMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbm8tbWRteDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0dXJucyBvZmYgdGhpcyBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRzcDwvY29kZT48ZHQ+PGNvZGU+LW1uby1kc3A8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBEU1AgUmVsZWFzZSAxIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4gCitUaGlzIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0IERTUCBSZWxlYXNlIDEgaW5zdHJ1Y3Rpb25zLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1uby1kc3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kc3ByMjwvY29kZT48ZHQ+PGNvZGU+LW1uby1kc3ByMjwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIERTUCBSZWxlYXNlIDIgQXBwbGljYXRpb24gU3BlY2lmaWMgRXh0ZW5zaW9uLiAKK1RoaXMgb3B0aW9uIGltcGxpZXMgLW1kc3AuIAorVGhpcyB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIGFjY2VwdCBEU1AgUmVsZWFzZSAyIGluc3RydWN0aW9ucy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbm8tZHNwcjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tdDwvY29kZT48ZHQ+PGNvZGU+LW1uby1tdDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE1UIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4gCitUaGlzIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0IE1UIGluc3RydWN0aW9ucy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbm8tbXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tY3U8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbWN1PC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgTUNVIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4gCitUaGlzIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0IE1DVSBpbnN0cnVjdGlvbnMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbW5vLW1jdTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0dXJucyBvZmYgdGhpcyBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeDcwMDA8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZml4NzAwMDwvY29kZT48ZGQ+Q2F1c2Ugbm9wcyB0byBiZSBpbnNlcnRlZCBpZiB0aGUgcmVhZCBvZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIKK29mIGFuIG1maGkgb3IgbWZsbyBpbnN0cnVjdGlvbiBvY2N1cnMgaW4gdGhlIGZvbGxvd2luZyB0d28gaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1maXgtbG9vbmdzb24yZi1qdW1wPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZpeC1sb29uZ3NvbjJmLWp1bXA8L2NvZGU+PGRkPkVsaW1pbmF0ZSBpbnN0cnVjdGlvbiBmZXRjaCBmcm9tIG91dHNpZGUgMjU2TSByZWdpb24gdG8gd29yayBhcm91bmQgdGhlCitMb29uZ3NvbjJGICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+anVtcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbnMuICBXaXRob3V0IGl0LCB1bmRlciBleHRyZW1lIGNhc2VzLAordGhlIGtlcm5lbCBtYXkgY3Jhc2guICBUaGUgaXNzdWUgaGFzIGJlZW4gc29sdmVkIGluIGxhdGVzdCBwcm9jZXNzb3IKK2JhdGNoZXMsIGJ1dCB0aGlzIGZpeCBoYXMgbm8gc2lkZSBlZmZlY3QgdG8gdGhlbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZml4LWxvb25nc29uMmYtbm9wPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZpeC1sb29uZ3NvbjJmLW5vcDwvY29kZT48ZGQ+UmVwbGFjZSBub3BzIGJ5IDxjb2RlPm9yIGF0LGF0LHplcm88L2NvZGU+IHRvIHdvcmsgYXJvdW5kIHRoZSBMb29uZ3NvbjJGCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlcnJhdGEuICBXaXRob3V0IGl0LCB1bmRlciBleHRyZW1lIGNhc2VzLCBjcHUgbWlnaHQKK2RlYWRsb2NrLiAgVGhlIGlzc3VlIGhhcyBiZWVuIHNvbHZlZCBpbiBsYXRlc3QgbG9vbmdzb24yZiBiYXRjaGVzLCBidXQKK3RoaXMgZml4IGhhcyBubyBzaWRlIGVmZmVjdCB0byB0aGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1maXgtdnI0MTIwPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZpeC12cjQxMjA8L2NvZGU+PGRkPkluc2VydCBub3BzIHRvIHdvcmsgYXJvdW5kIGNlcnRhaW4gVlI0MTIwIGVycmF0YS4gIFRoaXMgb3B0aW9uIGlzCitpbnRlbmRlZCB0byBiZSB1c2VkIG9uIEdDQy1nZW5lcmF0ZWQgY29kZTogaXQgaXMgbm90IGRlc2lnbmVkIHRvIGNhdGNoCithbGwgcHJvYmxlbXMgaW4gaGFuZC13cml0dGVuIGFzc2VtYmxlciBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1maXgtdnI0MTMwPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZpeC12cjQxMzA8L2NvZGU+PGRkPkluc2VydCBub3BzIHRvIHdvcmsgYXJvdW5kIHRoZSBWUjQxMzAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tZmxvPC9zcGFuPjwvc2FtcD4mcnNxdW87LyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWZoaTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlcnJhdGEuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeC0yNGs8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZml4LTI0azwvY29kZT48ZGQ+SW5zZXJ0IG5vcHMgdG8gd29yayBhcm91bmQgdGhlIDI0SyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmVyZXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsvJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kZXJldDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlcnJhdGEuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeC1jbjYzeHhwMTwvY29kZT48ZHQ+PGNvZGU+LW1uby1maXgtY242M3h4cDE8L2NvZGU+PGRkPlJlcGxhY2UgPGNvZGU+cHJlZjwvY29kZT4gaGludHMgMCAtIDQgYW5kIDYgLSAyNCB3aXRoIGhpbnQgMjggdG8gd29yayBhcm91bmQKK2NlcnRhaW4gQ042M1hYUDEgZXJyYXRhLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW00MDEwPC9jb2RlPjxkdD48Y29kZT4tbm8tbTQwMTA8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBMU0kgPHNwYW4gY2xhc3M9InNjIj5yNDAxMDwvc3Bhbj4gY2hpcC4gIFRoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0bworYWNjZXB0IHRoZSA8c3BhbiBjbGFzcz0ic2MiPnI0MDEwPC9zcGFuPiBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWRkY2l1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZmYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK2V0Yy4pLCBhbmQgdG8gbm90IHNjaGVkdWxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9wPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9ucyBhcm91bmQgYWNjZXNzZXMgdG8KK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkhJPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxPPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlZ2lzdGVycy4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW5vLW00MDEwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHR1cm5zIG9mZiB0aGlzCitvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTQ2NTA8L2NvZGU+PGR0Pjxjb2RlPi1uby1tNDY1MDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE1JUFMgPHNwYW4gY2xhc3M9InNjIj5yNDY1MDwvc3Bhbj4gY2hpcC4gIFRoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQKK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1hZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tYWR1PC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9uLCBhbmQgdG8gbm90IHNjaGVkdWxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9wPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbnN0cnVjdGlvbnMgYXJvdW5kIGFjY2Vzc2VzIHRvIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkhJPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxPPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlZ2lzdGVycy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1uby1tNDY1MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0dXJucyBvZmYgdGhpcyBvcHRpb24uCisKKyAgICAgPGR0Pjxjb2RlPi1tMzkwMDwvY29kZT48ZHQ+PGNvZGU+LW5vLW0zOTAwPC9jb2RlPjxkdD48Y29kZT4tbTQxMDA8L2NvZGU+PGR0Pjxjb2RlPi1uby1tNDEwMDwvY29kZT48ZGQ+Rm9yIGVhY2ggb3B0aW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PHZhcj5ubm5uPC92YXI+PC9zYW1wPiZyc3F1bzssIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBNSVBTCis8c3BhbiBjbGFzcz0ic2MiPnI8L3NwYW4+PHZhcj5ubm5uPC92YXI+IGNoaXAuICBUaGlzIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0IGluc3RydWN0aW9ucworc3BlY2lmaWMgdG8gdGhhdCBjaGlwLCBhbmQgdG8gc2NoZWR1bGUgZm9yIHRoYXQgY2hpcCdzIGhhemFyZHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFyY2g9PC9jb2RlPjx2YXI+Y3B1PC92YXI+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIGEgcGFydGljdWxhciBNSVBTIGNwdS4gIEl0IGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0bworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48dmFyPmNwdTwvdmFyPjwvc2FtcD4mcnNxdW87LCBleGNlcHQgdGhhdCB0aGVyZSBhcmUgbW9yZSB2YWx1ZSBvZiA8dmFyPmNwdTwvdmFyPgordW5kZXJzdG9vZC4gIFZhbGlkIDx2YXI+Y3B1PC92YXI+IHZhbHVlIGFyZToKKworICAgICA8YmxvY2txdW90ZT4KKzIwMDAsCiszMDAwLAorMzkwMCwKKzQwMDAsCis0MDEwLAorNDEwMCwKKzQxMTEsCit2cjQxMjAsCit2cjQxMzAsCit2cjQxODEsCis0MzAwLAorNDQwMCwKKzQ2MDAsCis0NjUwLAorNTAwMCwKK3JtNTIwMCwKK3JtNTIzMCwKK3JtNTIzMSwKK3JtNTI2MSwKK3JtNTcyMSwKK3ZyNTQwMCwKK3ZyNTUwMCwKKzYwMDAsCitybTcwMDAsCis4MDAwLAorcm05MDAwLAorMTAwMDAsCisxMjAwMCwKKzE0MDAwLAorMTYwMDAsCis0a2MsCis0a20sCis0a3AsCis0a3NjLAorNGtlYywKKzRrZW0sCis0a2VwLAorNGtzZCwKK200aywKK200a3AsCittMTRrLAorbTE0a2MsCittMTRrZSwKK20xNGtlYywKKzI0a2MsCisyNGtmMl8xLAorMjRrZiwKKzI0a2YxXzEsCisyNGtlYywKKzI0a2VmMl8xLAorMjRrZWYsCisyNGtlZjFfMSwKKzM0a2MsCiszNGtmMl8xLAorMzRrZiwKKzM0a2YxXzEsCis3NGtjLAorNzRrZjJfMSwKKzc0a2YsCis3NGtmMV8xLAorNzRrZjNfMiwKKzEwMDRrYywKKzEwMDRrZjJfMSwKKzEwMDRrZiwKKzEwMDRrZjFfMSwKKzVrYywKKzVrZiwKKzIwa2MsCisyNWtmLAorc2IxLAorc2IxYSwKK2xvb25nc29uMmUsCitsb29uZ3NvbjJmLAorbG9vbmdzb24zYSwKK29jdGVvbiwKK29jdGVvbissCitvY3Rlb24yLAoreGxyLAoreGxwCis8L2Jsb2NrcXVvdGU+CisKKyAgICAgPHA+Rm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgJmxzcXVvOzxzYW1wPjx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj54PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHZhcj5iPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPmZ4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZQorYWNjZXB0ZWQgYXMgc3lub255bXMgZm9yICZsc3F1bzs8c2FtcD48dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+ZjFfMTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZXNlIHZhbHVlcyBhcmUKK2RlcHJlY2F0ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXR1bmU9PC9jb2RlPjx2YXI+Y3B1PC92YXI+PGRkPlNjaGVkdWxlIGFuZCB0dW5lIGZvciBhIHBhcnRpY3VsYXIgTUlQUyBjcHUuICBWYWxpZCA8dmFyPmNwdTwvdmFyPiB2YWx1ZXMgYXJlCitpZGVudGljYWwgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWFyY2g9PC9zcGFuPjx2YXI+Y3B1PC92YXI+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFiaT08L2NvZGU+PHZhcj5hYmk8L3Zhcj48ZGQ+UmVjb3JkIHdoaWNoIEFCSSB0aGUgc291cmNlIGNvZGUgdXNlcy4gIFRoZSByZWNvZ25pemVkIGFyZ3VtZW50cworYXJlOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjMyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm4zMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vNjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZWFiaTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3ltMzI8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc3ltMzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbXN5bTMyLTEzNzMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1ub18wMDJkc3ltMzItMTM3NCI+PC9hPkVxdWl2YWxlbnQgdG8gYWRkaW5nIDxjb2RlPi5zZXQgc3ltMzI8L2NvZGU+IG9yIDxjb2RlPi5zZXQgbm9zeW0zMjwvY29kZT4gdG8KK3RoZSBiZWdpbm5pbmcgb2YgdGhlIGFzc2VtYmxlciBpbnB1dC4gIFNlZSA8YSBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI01JUFMtc3ltYm9sLXNpemVzIj5NSVBTIHN5bWJvbCBzaXplczwvYT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG5vY3BwXzAwN2QtaWdub3JlZC1fMDAyOE1JUFNfMDAyOS0xMzc1Ij48L2E+PGJyPjxkdD48Y29kZT4tbm9jcHA8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuICBJdCBpcyBhY2NlcHRlZCBmb3IgY29tbWFuZC1saW5lIGNvbXBhdGliaWxpdHkgd2l0aAorb3RoZXIgYXNzZW1ibGVycywgd2hpY2ggdXNlIGl0IHRvIHR1cm4gb2ZmIEMgc3R5bGUgcHJlcHJvY2Vzc2luZy4gIFdpdGgKKzxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8Y29kZT5hczwvY29kZT4sIHRoZXJlIGlzIG5vIG5lZWQgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW5vY3BwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBiZWNhdXNlIHRoZQorPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGFzc2VtYmxlciBpdHNlbGYgbmV2ZXIgcnVucyB0aGUgQyBwcmVwcm9jZXNzb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNvZnQtZmxvYXQ8L2NvZGU+PGR0Pjxjb2RlPi1taGFyZC1mbG9hdDwvY29kZT48ZGQ+RGlzYWJsZSBvciBlbmFibGUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgTm90ZSB0aGF0IGJ5IGRlZmF1bHQKK2Zsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIGFsbG93ZWQgZXZlbiB3aXRoIENQVSB0YXJnZXRzCit0aGF0IGRvbid0IGhhdmUgc3VwcG9ydCBmb3IgdGhlc2UgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zaW5nbGUtZmxvYXQ8L2NvZGU+PGR0Pjxjb2RlPi1tZG91YmxlLWZsb2F0PC9jb2RlPjxkZD5EaXNhYmxlIG9yIGVuYWJsZSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuICBOb3RlCit0aGF0IGJ5IGRlZmF1bHQgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZSBhbHdheXMKK2FsbG93ZWQgZXZlbiB3aXRoIENQVSB0YXJnZXRzIHRoYXQgZG9uJ3QgaGF2ZSBzdXBwb3J0IGZvciB0aGVzZQorb3BlcmF0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tY29uc3RydWN0LWZsb2F0czwvY29kZT48ZHQ+PGNvZGU+LS1uby1jb25zdHJ1Y3QtZmxvYXRzPC9jb2RlPjxkZD5UaGUgPGNvZGU+LS1uby1jb25zdHJ1Y3QtZmxvYXRzPC9jb2RlPiBvcHRpb24gZGlzYWJsZXMgdGhlIGNvbnN0cnVjdGlvbiBvZgorZG91YmxlIHdpZHRoIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cyBieSBsb2FkaW5nIHRoZSB0d28gaGFsdmVzIG9mIHRoZQordmFsdWUgaW50byB0aGUgdHdvIHNpbmdsZSB3aWR0aCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgdGhhdCBtYWtlIHVwCit0aGUgZG91YmxlIHdpZHRoIHJlZ2lzdGVyLiAgVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCBpZiB0aGUgcHJvY2Vzc29yCitzdXBwb3J0IHRoZSBGUiBiaXQgaW4gaXRzIHN0YXR1cyAgcmVnaXN0ZXIsIGFuZCB0aGlzIGJpdCBpcyBrbm93biAoYnkKK3RoZSBwcm9ncmFtbWVyKSB0byBiZSBzZXQuICBUaGlzIGJpdCBwcmV2ZW50cyB0aGUgYWxpYXNpbmcgb2YgdGhlIGRvdWJsZQord2lkdGggcmVnaXN0ZXIgYnkgdGhlIHNpbmdsZSB3aWR0aCByZWdpc3RlcnMuCisKKyAgICAgPHA+QnkgZGVmYXVsdCA8Y29kZT4tLWNvbnN0cnVjdC1mbG9hdHM8L2NvZGU+IGlzIHNlbGVjdGVkLCBhbGxvd2luZyBjb25zdHJ1Y3Rpb24KK29mIHRoZXNlIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tdHJhcDwvY29kZT48ZHQ+PGNvZGU+LS1uby1icmVhazwvY29kZT48ZGQ+PCEtLSBGSVhNRSEgICgxKSByZWZsZWN0IHRoZXNlIG9wdGlvbnMgKG5leHQgaXRlbSB0b28pIGluIG9wdGlvbiBzdW1tYXJpZXM7IC0tPgorPCEtLSAoMikgc3RvcCB0ZWFzaW5nLCBzYXkgX3doaWNoXyBpbnN0cnVjdGlvbnMgZXhwYW5kZWQgX2hvd18uIC0tPgorPGNvZGU+YXM8L2NvZGU+IGF1dG9tYXRpY2FsbHkgbWFjcm8gZXhwYW5kcyBjZXJ0YWluIGRpdmlzaW9uIGFuZAorbXVsdGlwbGljYXRpb24gaW5zdHJ1Y3Rpb25zIHRvIGNoZWNrIGZvciBvdmVyZmxvdyBhbmQgZGl2aXNpb24gYnkgemVyby4gIFRoaXMKK29wdGlvbiBjYXVzZXMgPGNvZGU+YXM8L2NvZGU+IHRvIGdlbmVyYXRlIGNvZGUgdG8gdGFrZSBhIHRyYXAgZXhjZXB0aW9uCityYXRoZXIgdGhhbiBhIGJyZWFrIGV4Y2VwdGlvbiB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLiAgVGhlIHRyYXAgaW5zdHJ1Y3Rpb25zCithcmUgb25seSBzdXBwb3J0ZWQgYXQgSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSBsZXZlbCAyIGFuZCBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWJyZWFrPC9jb2RlPjxkdD48Y29kZT4tLW5vLXRyYXA8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgdG8gdGFrZSBhIGJyZWFrIGV4Y2VwdGlvbiByYXRoZXIgdGhhbiBhIHRyYXAgZXhjZXB0aW9uIHdoZW4gYW4KK2Vycm9yIGlzIGRldGVjdGVkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcGRyPC9jb2RlPjxkdD48Y29kZT4tbW5vLXBkcjwvY29kZT48ZGQ+Q29udHJvbCBnZW5lcmF0aW9uIG9mIDxjb2RlPi5wZHI8L2NvZGU+IHNlY3Rpb25zLiAgT2ZmIGJ5IGRlZmF1bHQgb24gSVJJWCwgb24KK2Vsc2V3aGVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2hhcmVkPC9jb2RlPjxkdD48Y29kZT4tbW5vLXNoYXJlZDwvY29kZT48ZGQ+V2hlbiBnZW5lcmF0aW5nIGNvZGUgdXNpbmcgdGhlIFVuaXggY2FsbGluZyBjb252ZW50aW9ucyAoc2VsZWN0ZWQgYnkKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUtQSUM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWNhbGxfc2hhcmVkPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwgZ2FzIHdpbGwgbm9ybWFsbHkgZ2VuZXJhdGUgY29kZQord2hpY2ggY2FuIGdvIGludG8gYSBzaGFyZWQgbGlicmFyeS4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbm8tc2hhcmVkPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbgordGVsbHMgZ2FzIHRvIGdlbmVyYXRlIGNvZGUgd2hpY2ggdXNlcyB0aGUgY2FsbGluZyBjb252ZW50aW9uLCBidXQgY2FuCitub3QgZ28gaW50byBhIHNoYXJlZCBsaWJyYXJ5LiAgVGhlIHJlc3VsdGluZyBjb2RlIGlzIHNsaWdodGx5IG1vcmUKK2VmZmljaWVudC4gIFRoaXMgb3B0aW9uIG9ubHkgYWZmZWN0cyB0aGUgaGFuZGxpbmcgb2YgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jcGxvYWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNwc2V0dXA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHNldWRvLW9wcy4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLVN0YWJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLVN0YWJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzZGQxZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFMtU3RhYnMuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NSVBTIFN0YWJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNNSVBTXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNSVBTLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JUFMtT2JqZWN0Lmh0bWwjTUlQUy1PYmplY3QiIHRpdGxlPSJNSVBTIE9iamVjdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1JUFMtSVNBLmh0bWwjTUlQUy1JU0EiIHRpdGxlPSJNSVBTIElTQSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1JUFMtU3RhYnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlQUy1JU0EuaHRtbCNNSVBTLUlTQSI+TUlQUyBJU0E8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSVBTLU9iamVjdC5odG1sI01JUFMtT2JqZWN0Ij5NSVBTIE9iamVjdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCI+TUlQUy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI2LjMgRGlyZWN0aXZlcyBmb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtTUlQUy1kZWJ1Z2dpbmctZGlyZWN0aXZlcy0xMzgwIj48L2E+PHNwYW4gY2xhc3M9InNjIj5taXBzPC9zcGFuPiA8c3BhbiBjbGFzcz0ic2MiPmVjb2ZmPC9zcGFuPiA8Y29kZT5hczwvY29kZT4gc3VwcG9ydHMgc2V2ZXJhbCBkaXJlY3RpdmVzIHVzZWQgZm9yCitnZW5lcmF0aW5nIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB3aGljaCBhcmUgbm90IHN1cHBvcnQgYnkgdHJhZGl0aW9uYWwgPHNwYW4gY2xhc3M9InNjIj5taXBzPC9zcGFuPgorYXNzZW1ibGVycy4gIFRoZXNlIGFyZSA8Y29kZT4uZGVmPC9jb2RlPiwgPGNvZGU+LmVuZGVmPC9jb2RlPiwgPGNvZGU+LmRpbTwvY29kZT4sIDxjb2RlPi5maWxlPC9jb2RlPiwKKzxjb2RlPi5zY2w8L2NvZGU+LCA8Y29kZT4uc2l6ZTwvY29kZT4sIDxjb2RlPi50YWc8L2NvZGU+LCA8Y29kZT4udHlwZTwvY29kZT4sIDxjb2RlPi52YWw8L2NvZGU+LAorPGNvZGU+LnN0YWJkPC9jb2RlPiwgPGNvZGU+LnN0YWJuPC9jb2RlPiwgYW5kIDxjb2RlPi5zdGFiczwvY29kZT4uICBUaGUgZGVidWdnaW5nIGluZm9ybWF0aW9uCitnZW5lcmF0ZWQgYnkgdGhlIHRocmVlIDxjb2RlPi5zdGFiPC9jb2RlPiBkaXJlY3RpdmVzIGNhbiBvbmx5IGJlIHJlYWQgYnkgPHNwYW4gY2xhc3M9InNjIj5nZGI8L3NwYW4+LAorbm90IGJ5IHRyYWRpdGlvbmFsIDxzcGFuIGNsYXNzPSJzYyI+bWlwczwvc3Bhbj4gZGVidWdnZXJzICh0aGlzIGVuaGFuY2VtZW50IGlzIHJlcXVpcmVkIHRvIGZ1bGx5CitzdXBwb3J0IEMrKyBkZWJ1Z2dpbmcpLiAgVGhlc2UgZGlyZWN0aXZlcyBhcmUgcHJpbWFyaWx5IHVzZWQgYnkgY29tcGlsZXJzLCBub3QKK2Fzc2VtYmx5IGxhbmd1YWdlIHByb2dyYW1tZXJzIQorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJkZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1TeW50YXguaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NSVBTIFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTUlQUy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNSVBTLWZsb2F0aW5nXzAwMmRwb2ludC5odG1sI01JUFMtZmxvYXRpbmdfMDAyZHBvaW50IiB0aXRsZT0iTUlQUyBmbG9hdGluZy1wb2ludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1JUFMtU3ludGF4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQuaHRtbCNNSVBTLWZsb2F0aW5nXzAwMmRwb2ludCI+TUlQUyBmbG9hdGluZy1wb2ludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCI+TUlQUy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI2LjExIFN5bnRhY3RpY2FsIGNvbnNpZGVyYXRpb25zIGZvciB0aGUgTUlQUyBhc3NlbWJsZXI8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iTUlQU18wMDJkQ2hhcnMuaHRtbCNNSVBTXzAwMmRDaGFycyI+TUlQUy1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFMtYXV0b2V4dGVuZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1hdXRvZXh0ZW5kLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViZGEyYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFMtYXV0b2V4dGVuZC5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1JUFMgYXV0b2V4dGVuZCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTUlQUy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI01JUFMtc3ltYm9sLXNpemVzIiB0aXRsZT0iTUlQUyBzeW1ib2wgc2l6ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNSVBTLWluc24uaHRtbCNNSVBTLWluc24iIHRpdGxlPSJNSVBTIGluc24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSVBTLWF1dG9leHRlbmQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlQUy1pbnNuLmh0bWwjTUlQUy1pbnNuIj5NSVBTIGluc248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI01JUFMtc3ltYm9sLXNpemVzIj5NSVBTIHN5bWJvbCBzaXplczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCI+TUlQUy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI2LjYgRGlyZWN0aXZlcyBmb3IgZXh0ZW5kaW5nIE1JUFMgMTYgYml0IGluc3RydWN0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtYXV0b2V4dGVuZF8wMDdkLTEzODciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LW5vYXV0b2V4dGVuZF8wMDdkLTEzODgiPjwvYT5CeSBkZWZhdWx0LCBNSVBTIDE2IGluc3RydWN0aW9ucyBhcmUgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byAzMiBiaXRzCit3aGVuIG5lY2Vzc2FyeS4gIFRoZSBkaXJlY3RpdmUgPGNvZGU+LnNldCBub2F1dG9leHRlbmQ8L2NvZGU+IHdpbGwgdHVybiB0aGlzCitvZmYuICBXaGVuIDxjb2RlPi5zZXQgbm9hdXRvZXh0ZW5kPC9jb2RlPiBpcyBpbiBlZmZlY3QsIGFueSAzMiBiaXQgaW5zdHJ1Y3Rpb24KK211c3QgYmUgZXhwbGljaXRseSBleHRlbmRlZCB3aXRoIHRoZSA8Y29kZT4uZTwvY29kZT4gbW9kaWZpZXIgKGUuZy4sCis8Y29kZT5saS5lICQ0LDEwMDA8L2NvZGU+KS4gIFRoZSBkaXJlY3RpdmUgPGNvZGU+LnNldCBhdXRvZXh0ZW5kPC9jb2RlPiBtYXkgYmUgdXNlZAordG8gb25jZSBhZ2FpbiBhdXRvbWF0aWNhbGx5IGV4dGVuZCBpbnN0cnVjdGlvbnMgd2hlbiBuZWNlc3NhcnkuCisKKyAgIDxwPlRoaXMgZGlyZWN0aXZlIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuIGluIE1JUFMgMTYgbW9kZS4gIFRyYWRpdGlvbmFsCis8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IGFzc2VtYmxlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBkaXJlY3RpdmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFMtZmxvYXRpbmdfMDAyZHBvaW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLWZsb2F0aW5nXzAwMmRwb2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNTk2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLWZsb2F0aW5nXzAwMmRwb2ludC5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1JUFMgZmxvYXRpbmctcG9pbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik1JUFMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyIgdGl0bGU9Ik1JUFMgQVNFIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUlQUy1TeW50YXguaHRtbCNNSVBTLVN5bnRheCIgdGl0bGU9Ik1JUFMgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUlQUy1mbG9hdGluZy1wb2ludCI+PC9hPgorPGEgbmFtZT0iTUlQUy1mbG9hdGluZ18wMDJkcG9pbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlQUy1TeW50YXguaHRtbCNNSVBTLVN5bnRheCI+TUlQUyBTeW50YXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCI+TUlQUy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI2LjEwIERpcmVjdGl2ZXMgdG8gb3ZlcnJpZGUgZmxvYXRpbmctcG9pbnQgb3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LURpc2FibGUtZmxvYXRpbmdfMDAyZHBvaW50LWluc3RydWN0aW9ucy0xNDE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1zb2Z0ZmxvYXRfMDA3ZC0xNDE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1oYXJkZmxvYXRfMDA3ZC0xNDE3Ij48L2E+VGhlIGRpcmVjdGl2ZXMgPGNvZGU+LnNldCBzb2Z0ZmxvYXQ8L2NvZGU+IGFuZCA8Y29kZT4uc2V0IGhhcmRmbG9hdDwvY29kZT4gcHJvdmlkZQorZmluZXIgY29udHJvbCBvZiBkaXNhYmxpbmcgYW5kIGVuYWJsaW5nIGZsb2F0LXBvaW50IGluc3RydWN0aW9ucy4gCitUaGVzZSBkaXJlY3RpdmVzIGFsd2F5cyBvdmVycmlkZSB0aGUgZGVmYXVsdCAodGhhdCBoYXJkLWZsb2F0CitpbnN0cnVjdGlvbnMgYXJlIGFjY2VwdGVkKSBvciB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMKKygmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tc29mdC1mbG9hdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWhhcmQtZmxvYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzspLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1EaXNhYmxlLXNpbmdsZV8wMDJkcHJlY2lzaW9uLWZsb2F0aW5nXzAwMmRwb2ludC1vcGVyYXRpb25zLTE0MTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LXNpbmdsZWZsb2F0XzAwN2QtMTQxOSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtZG91YmxlZmxvYXRfMDA3ZC0xNDIwIj48L2E+VGhlIGRpcmVjdGl2ZXMgPGNvZGU+LnNldCBzaW5nbGVmbG9hdDwvY29kZT4gYW5kIDxjb2RlPi5zZXQgZG91YmxlZmxvYXQ8L2NvZGU+Citwcm92aWRlIGZpbmVyIGNvbnRyb2wgb2YgZGlzYWJsaW5nIGFuZCBlbmFibGluZyBkb3VibGUtcHJlY2lzaW9uCitmbG9hdC1wb2ludCBvcGVyYXRpb25zLiAgVGhlc2UgZGlyZWN0aXZlcyBhbHdheXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyh0aGF0IGRvdWJsZS1wcmVjaXNpb24gb3BlcmF0aW9ucyBhcmUgYWNjZXB0ZWQpIG9yIHRoZSBjb21tYW5kLWxpbmUKK29wdGlvbnMgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1zaW5nbGUtZmxvYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1kb3VibGUtZmxvYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzspLgorCisgICA8cD5UcmFkaXRpb25hbCA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IGFzc2VtYmxlcnMgZG8gbm90IHN1cHBvcnQgdGhlc2UgZGlyZWN0aXZlcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1pbnNuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLWluc24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzMxYmEzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1pbnNuLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUlQUyBpbnNuIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNNSVBTXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNSVBTLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JUFMtYXV0b2V4dGVuZC5odG1sI01JUFMtYXV0b2V4dGVuZCIgdGl0bGU9Ik1JUFMgYXV0b2V4dGVuZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1JUFMtb3B0aW9uLXN0YWNrLmh0bWwjTUlQUy1vcHRpb24tc3RhY2siIHRpdGxlPSJNSVBTIG9wdGlvbiBzdGFjayI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1JUFMtaW5zbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNSVBTLW9wdGlvbi1zdGFjay5odG1sI01JUFMtb3B0aW9uLXN0YWNrIj5NSVBTIG9wdGlvbiBzdGFjazwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1JUFMtYXV0b2V4dGVuZC5odG1sI01JUFMtYXV0b2V4dGVuZCI+TUlQUyBhdXRvZXh0ZW5kPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50Ij5NSVBTLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjYuNyBEaXJlY3RpdmUgdG8gbWFyayBkYXRhIGFzIGFuIGluc3RydWN0aW9uPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWluc25fMDA3ZC0xMzg5Ij48L2E+VGhlIDxjb2RlPi5pbnNuPC9jb2RlPiBkaXJlY3RpdmUgdGVsbHMgPGNvZGU+YXM8L2NvZGU+IHRoYXQgdGhlIGZvbGxvd2luZworZGF0YSBpcyBhY3R1YWxseSBpbnN0cnVjdGlvbnMuICBUaGlzIG1ha2VzIGEgZGlmZmVyZW5jZSBpbiBNSVBTIDE2IGFuZAorbWljcm9NSVBTIG1vZGVzOiB3aGVuIGxvYWRpbmcgdGhlIGFkZHJlc3Mgb2YgYSBsYWJlbCB3aGljaCBwcmVjZWRlcworaW5zdHJ1Y3Rpb25zLCA8Y29kZT5hczwvY29kZT4gYXV0b21hdGljYWxseSBhZGRzIDEgdG8gdGhlIHZhbHVlLCBzbwordGhhdCBqdW1waW5nIHRvIHRoZSBsb2FkZWQgYWRkcmVzcyB3aWxsIGRvIHRoZSByaWdodCB0aGluZy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWdsb2JhbF8wMDdkLTEzOTAiPjwvYT5UaGUgPGNvZGU+Lmdsb2JhbDwvY29kZT4gYW5kIDxjb2RlPi5nbG9ibDwvY29kZT4gZGlyZWN0aXZlcyBzdXBwb3J0ZWQgYnkKKzxjb2RlPmFzPC9jb2RlPiB3aWxsIGJ5IGRlZmF1bHQgbWFyayB0aGUgc3ltYm9sIGFzIHBvaW50aW5nIHRvIGEKK3JlZ2lvbiBvZiBkYXRhIG5vdCBjb2RlLiAgVGhpcyBtZWFucyB0aGF0LCBmb3IgZXhhbXBsZSwgYW55CitpbnN0cnVjdGlvbnMgZm9sbG93aW5nIHN1Y2ggYSBzeW1ib2wgd2lsbCBub3QgYmUgZGlzYXNzZW1ibGVkIGJ5Cis8Y29kZT5vYmpkdW1wPC9jb2RlPiBhcyBpdCB3aWxsIHJlZ2FyZCB0aGVtIGFzIGRhdGEuICBUbyBjaGFuZ2UgdGhpcworYmVoYXZpb3VyIGFuIG9wdGlvbmFsIHNlY3Rpb24gbmFtZSBjYW4gYmUgcGxhY2VkIGFmdGVyIHRoZSBzeW1ib2wgbmFtZQoraW4gdGhlIDxjb2RlPi5nbG9iYWw8L2NvZGU+IGRpcmVjdGl2ZS4gIElmIHRoaXMgc2VjdGlvbiBleGlzdHMgYW5kIGlzIGtub3duCit0byBiZSBhIGNvZGUgc2VjdGlvbiwgdGhlbiB0aGUgc3ltYm9sIHdpbGwgYmUgbWFya2VkIGFzIHBvaXRpbmcgYXQKK2NvZGUgbm90IGRhdGEuICBJZSB0aGUgc3ludGF4IGZvciB0aGUgZGlyZWN0aXZlIGlzOgorCisgICA8cD48Y29kZT4uZ2xvYmFsIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPlsgPC9jb2RlPjx2YXI+c2VjdGlvbjwvdmFyPjxjb2RlPl1bLCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT5bIDwvY29kZT48dmFyPnNlY3Rpb248L3Zhcj48Y29kZT5dXSAuLi48L2NvZGU+LAorCisgICA8cD5IZXJlIGlzIGEgc2hvcnQgZXhhbXBsZToKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICAgIC5nbG9iYWwgZm9vIC50ZXh0LCBiYXIsIGJheiAuZGF0YQorICAgICBmb286CisgICAgICAgICAgICAgbm9wCisgICAgIGJhcjoKKyAgICAgICAgICAgICAud29yZCAweDAKKyAgICAgYmF6OgorICAgICAgICAgICAgIC53b3JkIDB4MQorICAgICAKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1vcHRpb24tc3RhY2suaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFMtb3B0aW9uLXN0YWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2NjE2NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFMtb3B0aW9uLXN0YWNrLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUlQUyBvcHRpb24gc3RhY2sgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik1JUFMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTUlQUy1pbnNuLmh0bWwjTUlQUy1pbnNuIiB0aXRsZT0iTUlQUyBpbnNuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyIgdGl0bGU9Ik1JUFMgQVNFIGluc3RydWN0aW9uIGdlbmVyYXRpb24gb3ZlcnJpZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUlQUy1vcHRpb24tc3RhY2siPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+TUlQUyBBU0UgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBvdmVycmlkZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSVBTLWluc24uaHRtbCNNSVBTLWluc24iPk1JUFMgaW5zbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCI+TUlQUy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI2LjggRGlyZWN0aXZlcyB0byBzYXZlIGFuZCByZXN0b3JlIG9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NSVBTLW9wdGlvbi1zdGFjay0xMzkxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNldC1wdXNoXzAwN2QtMTM5MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtcG9wXzAwN2QtMTM5MyI+PC9hPlRoZSBkaXJlY3RpdmVzIDxjb2RlPi5zZXQgcHVzaDwvY29kZT4gYW5kIDxjb2RlPi5zZXQgcG9wPC9jb2RlPiBtYXkgYmUgdXNlZCB0byBzYXZlCithbmQgcmVzdG9yZSB0aGUgY3VycmVudCBzZXR0aW5ncyBmb3IgYWxsIHRoZSBvcHRpb25zIHdoaWNoIGFyZQorY29udHJvbGxlZCBieSA8Y29kZT4uc2V0PC9jb2RlPi4gIFRoZSA8Y29kZT4uc2V0IHB1c2g8L2NvZGU+IGRpcmVjdGl2ZSBzYXZlcyB0aGUKK2N1cnJlbnQgc2V0dGluZ3Mgb24gYSBzdGFjay4gIFRoZSA8Y29kZT4uc2V0IHBvcDwvY29kZT4gZGlyZWN0aXZlIHBvcHMgdGhlCitzdGFjayBhbmQgcmVzdG9yZXMgdGhlIHNldHRpbmdzLgorCisgICA8cD5UaGVzZSBkaXJlY3RpdmVzIGNhbiBiZSB1c2VmdWwgaW5zaWRlIGFuIG1hY3JvIHdoaWNoIG11c3QgY2hhbmdlIGFuCitvcHRpb24gc3VjaCBhcyB0aGUgSVNBIGxldmVsIG9yIGluc3RydWN0aW9uIHJlb3JkZXJpbmcgYnV0IGRvZXMgbm90IHdhbnQKK3RvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIGNvZGUgd2hpY2ggaW52b2tlZCB0aGUgbWFjcm8uCisKKyAgIDxwPlRyYWRpdGlvbmFsIDxzcGFuIGNsYXNzPSJzYyI+bWlwczwvc3Bhbj4gYXNzZW1ibGVycyBkbyBub3Qgc3VwcG9ydCB0aGVzZSBkaXJlY3RpdmVzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTLXN5bWJvbC1zaXplcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1zeW1ib2wtc2l6ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWE0NDJmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQUy1zeW1ib2wtc2l6ZXMuaHRtbApAQCAtMCwwICsxLDk3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NSVBTIHN5bWJvbCBzaXplcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTUlQUy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNSVBTLUlTQS5odG1sI01JUFMtSVNBIiB0aXRsZT0iTUlQUyBJU0EiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNSVBTLWF1dG9leHRlbmQuaHRtbCNNSVBTLWF1dG9leHRlbmQiIHRpdGxlPSJNSVBTIGF1dG9leHRlbmQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSVBTLXN5bWJvbC1zaXplcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNSVBTLWF1dG9leHRlbmQuaHRtbCNNSVBTLWF1dG9leHRlbmQiPk1JUFMgYXV0b2V4dGVuZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1JUFMtSVNBLmh0bWwjTUlQUy1JU0EiPk1JUFMgSVNBPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50Ij5NSVBTLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjYuNCBEaXJlY3RpdmVzIHRvIG92ZXJyaWRlIHRoZSBzaXplIG9mIHN5bWJvbHM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2V0LXN5bTMyXzAwN2QtMTM4MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVzZXQtbm9zeW0zMl8wMDdkLTEzODIiPjwvYT5UaGUgbjY0IEFCSSBhbGxvd3Mgc3ltYm9scyB0byBoYXZlIGFueSA2NC1iaXQgdmFsdWUuICBBbHRob3VnaCB0aGlzCitwcm92aWRlcyBhIGdyZWF0IGRlYWwgb2YgZmxleGliaWxpdHksIGl0IG1lYW5zIHRoYXQgc29tZSBtYWNyb3MgaGF2ZQorbXVjaCBsb25nZXIgZXhwYW5zaW9ucyB0aGFuIHRoZWlyIDMyLWJpdCBjb3VudGVycGFydHMuICBGb3IgZXhhbXBsZSwKK3RoZSBub24tUElDIGV4cGFuc2lvbiBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRsYSAkNCxzeW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdXN1YWxseToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGx1aSAgICAgJDQsJWhpZ2hlc3Qoc3ltKQorICAgICBsdWkgICAgICQxLCVoaShzeW0pCisgICAgIGRhZGRpdSAgJDQsJDQsJWhpZ2hlcihzeW0pCisgICAgIGRhZGRpdSAgJDEsJDEsJWxvKHN5bSkKKyAgICAgZHNsbDMyICAkNCwkNCwwCisgICAgIGRhZGR1ICAgJDQsJDQsJDEKKzwvcHJlPgorICAgPHA+d2hlcmVhcyB0aGUgMzItYml0IGV4cGFuc2lvbiBpcyBzaW1wbHk6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBsdWkgICAgICQ0LCVoaShzeW0pCisgICAgIGRhZGRpdSAgJDQsJDQsJWxvKHN5bSkKKzwvcHJlPgorICAgPHA+bjY0IGNvZGUgaXMgc29tZXRpbWVzIGNvbnN0cnVjdGVkIGluIHN1Y2ggYSB3YXkgdGhhdCBhbGwgc3ltYm9saWMKK2NvbnN0YW50cyBhcmUga25vd24gdG8gaGF2ZSAzMi1iaXQgdmFsdWVzLCBhbmQgaW4gc3VjaCBjYXNlcywgaXQncworcHJlZmVyYWJsZSB0byB1c2UgdGhlIDMyLWJpdCBleHBhbnNpb24gaW5zdGVhZCBvZiB0aGUgNjQtYml0CitleHBhbnNpb24uCisKKyAgIDxwPllvdSBjYW4gdXNlIHRoZSA8Y29kZT4uc2V0IHN5bTMyPC9jb2RlPiBkaXJlY3RpdmUgdG8gdGVsbCB0aGUgYXNzZW1ibGVyCit0aGF0LCBmcm9tIHRoaXMgcG9pbnQgb24sIGFsbCBleHByZXNzaW9ucyBvZiB0aGUgZm9ybQorJmxzcXVvOzxzYW1wPjx2YXI+c3ltYm9sPC92YXI+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjx2YXI+c3ltYm9sPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiArIDwvc3Bhbj48dmFyPm9mZnNldDwvdmFyPjwvc2FtcD4mcnNxdW87CitoYXZlIDMyLWJpdCB2YWx1ZXMuICBGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5zZXQgc3ltMzIKKyAgICAgZGxhICAgICAkNCxzeW0KKyAgICAgbHcgICAgICAkNCxzeW0rMTYKKyAgICAgc3cgICAgICAkNCxzeW0rMHg4MDAwKCQ0KQorPC9wcmU+CisgICA8cD53aWxsIGNhdXNlIHRoZSBhc3NlbWJsZXIgdG8gdHJlYXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zeW08L3NwYW4+PC9zYW1wPiZyc3F1bzssIDxjb2RlPnN5bSsxNjwvY29kZT4gYW5kCis8Y29kZT5zeW0rMHg4MDAwPC9jb2RlPiBhcyAzMi1iaXQgdmFsdWVzLiAgVGhlIGhhbmRsaW5nIG9mIG5vbi1zeW1ib2xpYworYWRkcmVzc2VzIGlzIG5vdCBhZmZlY3RlZC4KKworICAgPHA+VGhlIGRpcmVjdGl2ZSA8Y29kZT4uc2V0IG5vc3ltMzI8L2NvZGU+IGVuZHMgYSA8Y29kZT4uc2V0IHN5bTMyPC9jb2RlPiBibG9jayBhbmQKK3JldmVydHMgdG8gdGhlIG5vcm1hbCBiZWhhdmlvci4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hhbmdlIHRoZQorc3ltYm9sIHNpemUgdXNpbmcgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3ltMzI8L3NwYW4+PC9zYW1wPiBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tc3ltMzI8L3NwYW4+PC9zYW1wPi4KKworICAgPHA+VGhlc2Ugb3B0aW9ucyBhbmQgZGlyZWN0aXZlcyBhcmUgYWx3YXlzIGFjY2VwdGVkLCBidXQgYXQgcHJlc2VudCwKK3RoZXkgaGF2ZSBubyBlZmZlY3QgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gbjY0LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQU18wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmVkOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTUlQU18wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NSVBTLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNSVBTLVN5bnRheC5odG1sI01JUFMtU3ludGF4IiB0aXRsZT0iTUlQUyBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSVBTLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJNSVBTXzAwMmRDaGFycyI+PC9hPgorPHA+CitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1JUFMtU3ludGF4Lmh0bWwjTUlQUy1TeW50YXgiPk1JUFMgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4yNi4xMS4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1NSVBTLTE0MjEiPjwvYT48YSBuYW1lPSJpbmRleC1NSVBTLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMTQyMiI+PC9hPlRoZSBwcmVzZW5jZSBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQKK3RoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUsIHRoZSB3aG9sZSBsaW5lCitpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjYW4gYWxzbyBiZSBhCitsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYQorcHJlcHJvY2Vzc29yIGNvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtTUlQUy0xNDIzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLU1JUFMtMTQyNCI+PC9hPjxhIG5hbWU9ImluZGV4LU1JUFMtbGluZS1zZXBhcmF0b3ItMTQyNSI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUKK2xpbmUuCisKKzwhLS0gQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDMsIDIwMDYsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+Cis8IS0tIE1NSVggZGVzY3JpcHRpb24gYnkgSGFucy1QZXRlciBOaWxzc29uLCBocEBiaXRyYW5nZS5jb20gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01JUFNfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MjUwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NSVBTXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NSVBTLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwjTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTWljcm9CbGF6ZS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNTUlYXzAwMmREZXBlbmRlbnQuaHRtbCNNTUlYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNTUlYLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1JUFMtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJNSVBTXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTU1JWF8wMDJkRGVwZW5kZW50Lmh0bWwjTU1JWF8wMDJkRGVwZW5kZW50Ij5NTUlYLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1pY3JvQmxhemVfMDAyZERlcGVuZGVudC5odG1sI01pY3JvQmxhemVfMDAyZERlcGVuZGVudCI+TWljcm9CbGF6ZS1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMjYgTUlQUyBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1NSVBTLXByb2Nlc3Nvci0xMzYxIj48L2E+PHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmFzPC9jb2RlPiBmb3IgPHNwYW4gY2xhc3M9InNjIj5taXBzPC9zcGFuPiBhcmNoaXRlY3R1cmVzIHN1cHBvcnRzIHNldmVyYWwKK2RpZmZlcmVudCA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IHByb2Nlc3NvcnMsIGFuZCBNSVBTIElTQSBsZXZlbHMgSSB0aHJvdWdoIFYsIE1JUFMzMiwKK2FuZCBNSVBTNjQuICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIDxzcGFuIGNsYXNzPSJzYyI+bWlwczwvc3Bhbj4gaW5zdHJ1Y3Rpb24gc2V0LCBzZWUKKzxjaXRlPk1JUFMgUklTQyBBcmNoaXRlY3R1cmU8L2NpdGU+LCBieSBLYW5lIGFuZCBIZWluZHJpY2ggKFByZW50aWNlLUhhbGwpLiAKK0ZvciBhbiBvdmVydmlldyBvZiA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IGFzc2VtYmx5IGNvbnZlbnRpb25zLCBzZWUgJmxkcXVvO0FwcGVuZGl4IEQ6CitBc3NlbWJseSBMYW5ndWFnZSBQcm9ncmFtbWluZyZyZHF1bzsgaW4gdGhlIHNhbWUgd29yay4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik1JUFMtT3B0cy5odG1sI01JUFMtT3B0cyI+TUlQUyBPcHRzPC9hPjogICAgCUFzc2VtYmxlciBvcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNSVBTLU9iamVjdC5odG1sI01JUFMtT2JqZWN0Ij5NSVBTIE9iamVjdDwvYT46ICAJRUNPRkYgb2JqZWN0IGNvZGUKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ik1JUFMtU3RhYnMuaHRtbCNNSVBTLVN0YWJzIj5NSVBTIFN0YWJzPC9hPjogICAJRGlyZWN0aXZlcyBmb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJNSVBTLUlTQS5odG1sI01JUFMtSVNBIj5NSVBTIElTQTwvYT46ICAgICAJRGlyZWN0aXZlcyB0byBvdmVycmlkZSB0aGUgSVNBIGxldmVsCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJNSVBTLXN5bWJvbC1zaXplcy5odG1sI01JUFMtc3ltYm9sLXNpemVzIj5NSVBTIHN5bWJvbCBzaXplczwvYT46ICAgIERpcmVjdGl2ZXMgdG8gb3ZlcnJpZGUgdGhlIHNpemUgb2Ygc3ltYm9scworPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iTUlQUy1hdXRvZXh0ZW5kLmh0bWwjTUlQUy1hdXRvZXh0ZW5kIj5NSVBTIGF1dG9leHRlbmQ8L2E+OiAJRGlyZWN0aXZlcyBmb3IgZXh0ZW5kaW5nIE1JUFMgMTYgYml0IGluc3RydWN0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iTUlQUy1pbnNuLmh0bWwjTUlQUy1pbnNuIj5NSVBTIGluc248L2E+OiAJCURpcmVjdGl2ZSB0byBtYXJrIGRhdGEgYXMgYW4gaW5zdHJ1Y3Rpb24KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Ik1JUFMtb3B0aW9uLXN0YWNrLmh0bWwjTUlQUy1vcHRpb24tc3RhY2siPk1JUFMgb3B0aW9uIHN0YWNrPC9hPjogCURpcmVjdGl2ZXMgdG8gc2F2ZSBhbmQgcmVzdG9yZSBvcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcy5odG1sI01JUFMtQVNFLWluc3RydWN0aW9uLWdlbmVyYXRpb24tb3ZlcnJpZGVzIj5NSVBTIEFTRSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIG92ZXJyaWRlczwvYT46ICBEaXJlY3RpdmVzIHRvIGNvbnRyb2wKKyAgCQkJZ2VuZXJhdGlvbiBvZiBNSVBTIEFTRSBpbnN0cnVjdGlvbnMKKzxsaT48YSBocmVmPSJNSVBTLWZsb2F0aW5nXzAwMmRwb2ludC5odG1sI01JUFMtZmxvYXRpbmdfMDAyZHBvaW50Ij5NSVBTIGZsb2F0aW5nLXBvaW50PC9hPjogIERpcmVjdGl2ZXMgdG8gb3ZlcnJpZGUgZmxvYXRpbmctcG9pbnQgb3B0aW9ucworPGxpPjxhIGhyZWY9Ik1JUFMtU3ludGF4Lmh0bWwjTUlQUy1TeW50YXgiPk1JUFMgU3ludGF4PC9hPjogICAgICAgICAgTUlQUyBzcGVjaWZpYyBzeW50YWN0aWNhbCBjb25zaWRlcmF0aW9ucworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM3NDg4YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TU1JWC1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTU1JWF8wMDJkU3ludGF4Lmh0bWwjTU1JWF8wMDJkU3ludGF4IiB0aXRsZT0iTU1JWC1TeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNTUlYXzAwMmRTeW1ib2xzLmh0bWwjTU1JWF8wMDJkU3ltYm9scyIgdGl0bGU9Ik1NSVgtU3ltYm9scyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1NSVgtQ2hhcnMiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZENoYXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1NSVhfMDAyZFN5bWJvbHMuaHRtbCNNTUlYXzAwMmRTeW1ib2xzIj5NTUlYLVN5bWJvbHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNTUlYXzAwMmRTeW50YXguaHRtbCNNTUlYXzAwMmRTeW50YXgiPk1NSVgtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4yNy4zLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3RlcnNfMDAyYy1NTUlYLTE0NDEiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLWxpbmUtY29tbWVudC1jaGFyYWN0ZXJzLTE0NDIiPjwvYT4KK1RoZSBjaGFyYWN0ZXJzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyczsgZWFjaAorc3RhcnQgYSBjb21tZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLCBidXQgb25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKK2xpbmUuICBBICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmVmaXhlcyBhIGhleGFkZWNpbWFsIG51bWJlciBpZiBmb3VuZCBlbHNld2hlcmUgb24gYQorbGluZS4gIElmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSB0aGUgd2hvbGUgbGluZSBpcwordHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCB0aGUgbGluZSBjYW4gYWxzbyBhY3QgYXMgYSBsb2dpY2FsIGxpbmUKK251bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEgcHJlcHJvY2Vzc29yIGNvbnRyb2wgY29tbWFuZAorKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLgorCisgICA8cD5Ud28gb3RoZXIgY2hhcmFjdGVycywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiE8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGVhY2ggc3RhcnQgYSBjb21tZW50IGFueXdoZXJlCitvbiB0aGUgbGluZS4gIFRodXMgeW91IGNhbid0IHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb2R1bHVzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vdDwvc3Bhbj48L3NhbXA+JnJzcXVvOworb3BlcmF0b3JzIGluIGV4cHJlc3Npb25zIG5vcm1hbGx5IGFzc29jaWF0ZWQgd2l0aCB0aGVzZSB0d28gY2hhcmFjdGVycy4KKworICAgPHA+QSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYSBsaW5lIHNlcGFyYXRvciwgdHJlYXRlZCBhcyBhIG5ldy1saW5lLCBzbyBzZXBhcmF0ZQoraW5zdHJ1Y3Rpb25zIGNhbiBiZSBzcGVjaWZpZWQgb24gYSBzaW5nbGUgbGluZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWIxYWYzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TU1JWC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik1JUFMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTVNQNDMwXzAwMmREZXBlbmRlbnQuaHRtbCNNU1A0MzBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik1TUDQzMC1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNTUlYLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iTU1JWF8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiPk1TUDQzMC1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNNSVBTXzAwMmREZXBlbmRlbnQiPk1JUFMtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjI3IE1NSVggRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTU1JWC1zdXBwb3J0LTE0MjYiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik1NSVhfMDAyZE9wdHMuaHRtbCNNTUlYXzAwMmRPcHRzIj5NTUlYLU9wdHM8L2E+OiAgICAgICAgICAgICAgIENvbW1hbmQtbGluZSBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNTUlYXzAwMmRFeHBhbmQuaHRtbCNNTUlYXzAwMmRFeHBhbmQiPk1NSVgtRXhwYW5kPC9hPjogICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gZXhwYW5zaW9uCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJNTUlYXzAwMmRTeW50YXguaHRtbCNNTUlYXzAwMmRTeW50YXgiPk1NSVgtU3ludGF4PC9hPjogICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJNTUlYXzAwMmRtbWl4YWwuaHRtbCNNTUlYXzAwMmRtbWl4YWwiPk1NSVgtbW1peGFsPC9hPjogCQkgICBEaWZmZXJlbmNlcyB0byA8Y29kZT5tbWl4YWw8L2NvZGU+IHN5bnRheCBhbmQgc2VtYW50aWNzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRFeHBhbmQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZEV4cGFuZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjhlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRFeHBhbmQuaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NTUlYLUV4cGFuZCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTU1JWF8wMDJkRGVwZW5kZW50Lmh0bWwjTU1JWF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTU1JWC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNTUlYXzAwMmRPcHRzLmh0bWwjTU1JWF8wMDJkT3B0cyIgdGl0bGU9Ik1NSVgtT3B0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1NSVhfMDAyZFN5bnRheC5odG1sI01NSVhfMDAyZFN5bnRheCIgdGl0bGU9Ik1NSVgtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTU1JWC1FeHBhbmQiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZEV4cGFuZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNTUlYXzAwMmRTeW50YXguaHRtbCNNTUlYXzAwMmRTeW50YXgiPk1NSVgtU3ludGF4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPk1NSVgtT3B0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1NSVhfMDAyZERlcGVuZGVudC5odG1sI01NSVhfMDAyZERlcGVuZGVudCI+TU1JWC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI3LjIgSW5zdHJ1Y3Rpb24gZXhwYW5zaW9uPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW5zdHJ1Y3Rpb24tZXhwYW5zaW9uXzAwMmMtTU1JWC0xNDQwIj48L2E+V2hlbiA8Y29kZT5hczwvY29kZT4gZW5jb3VudGVycyBhbiBpbnN0cnVjdGlvbiB3aXRoIGFuIG9wZXJhbmQgdGhhdCBpcworZWl0aGVyIG5vdCBrbm93biBvciBkb2VzIG5vdCBmaXQgdGhlIG9wZXJhbmQgc2l6ZSBvZiB0aGUgaW5zdHJ1Y3Rpb24sCis8Y29kZT5hczwvY29kZT4gKGFuZCA8Y29kZT5sZDwvY29kZT4pIHdpbGwgZXhwYW5kIHRoZSBpbnN0cnVjdGlvbiBpbnRvCithIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byB0aGUgb3BlcmFuZCBmaXR0aW5nCit0aGUgaW5zdHJ1Y3Rpb24uICBFeHBhbnNpb24gd2lsbCB0YWtlIHBsYWNlIGZvciB0aGUgZm9sbG93aW5nCitpbnN0cnVjdGlvbnM6CisKKyAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+R0VUQTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FeHBhbmRzIHRvIGEgc2VxdWVuY2Ugb2YgZm91ciBpbnN0cnVjdGlvbnM6IDxjb2RlPlNFVEw8L2NvZGU+LCA8Y29kZT5JTkNNTDwvY29kZT4sCis8Y29kZT5JTkNNSDwvY29kZT4gYW5kIDxjb2RlPklOQ0g8L2NvZGU+LiAgVGhlIG9wZXJhbmQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGZvdXIuIAorPGJyPjxkdD5Db25kaXRpb25hbCBicmFuY2hlczxkZD5BIGJyYW5jaCBpbnN0cnVjdGlvbiBpcyB0dXJuZWQgaW50byBhIGJyYW5jaCB3aXRoIHRoZSBjb21wbGVtZW50ZWQKK2NvbmRpdGlvbiBhbmQgcHJlZGljdGlvbiBiaXQgb3ZlciBmaXZlIGluc3RydWN0aW9uczsgZm91ciBpbnN0cnVjdGlvbnMKK3NldHRpbmcgPGNvZGU+JDI1NTwvY29kZT4gdG8gdGhlIG9wZXJhbmQgdmFsdWUsIHdoaWNoIGxpa2Ugd2l0aCA8Y29kZT5HRVRBPC9jb2RlPiBtdXN0CitiZSBhIG11bHRpcGxlIG9mIGZvdXIsIGFuZCBhIGZpbmFsIDxjb2RlPkdPICQyNTUsJDI1NSwwPC9jb2RlPi4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UFVTSEo8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+U2ltaWxhciB0byBleHBhbnNpb24gZm9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzOyBmb3VyIGluc3RydWN0aW9ucyBzZXQKKzxjb2RlPiQyNTU8L2NvZGU+IHRvIHRoZSBvcGVyYW5kIHZhbHVlLCBmb2xsb3dlZCBieSBhIDxjb2RlPlBVU0hHTyAkMjU1LCQyNTUsMDwvY29kZT4uIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkpNUDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TaW1pbGFyIHRvIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGFuZCA8Y29kZT5QVVNISjwvY29kZT4uICBUaGUgZmluYWwgaW5zdHJ1Y3Rpb24KK2lzIDxjb2RlPkdPICQyNTUsJDI1NSwwPC9jb2RlPi4gCis8L2RsPgorCisgICA8cD5UaGUgbGlua2VyIDxjb2RlPmxkPC9jb2RlPiBpcyBleHBlY3RlZCB0byBzaHJpbmsgdGhlc2UgZXhwYW5zaW9ucyBmb3IKK2NvZGUgYXNzZW1ibGVkIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJlbGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87ICh0aG91Z2ggbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCkuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZE9wdHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZE9wdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE2YmFlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkT3B0cy5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NTUlYLU9wdHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1NSVhfMDAyZERlcGVuZGVudC5odG1sI01NSVhfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik1NSVgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTU1JWF8wMDJkRXhwYW5kLmh0bWwjTU1JWF8wMDJkRXhwYW5kIiB0aXRsZT0iTU1JWC1FeHBhbmQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNTUlYLU9wdHMiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZE9wdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTU1JWF8wMDJkRXhwYW5kLmh0bWwjTU1JWF8wMDJkRXhwYW5kIj5NTUlYLUV4cGFuZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1NSVhfMDAyZERlcGVuZGVudC5odG1sI01NSVhfMDAyZERlcGVuZGVudCI+TU1JWC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI3LjEgQ29tbWFuZC1saW5lIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtTU1JWC0xNDI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1vcHRpb25zLTE0MjgiPjwvYT5UaGUgTU1JWCB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBoYXMgc29tZSBtYWNoaW5lLWRlcGVuZGVudCBvcHRpb25zLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRmaXhlZF8wMDJkc3BlY2lhbF8wMDJkcmVnaXN0ZXJfMDAyZG5hbWVzXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQyOSI+PC9hPldoZW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWZpeGVkLXNwZWNpYWwtcmVnaXN0ZXItbmFtZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgc3BlY2lmaWVkLCBvbmx5IHRoZSByZWdpc3RlcgorbmFtZXMgc3BlY2lmaWVkIGluIDxhIGhyZWY9Ik1NSVhfMDAyZFJlZ3MuaHRtbCNNTUlYXzAwMmRSZWdzIj5NTUlYLVJlZ3M8L2E+IGFyZSByZWNvZ25pemVkIGluIHRoZSBpbnN0cnVjdGlvbnMKKzxjb2RlPlBVVDwvY29kZT4gYW5kIDxjb2RlPkdFVDwvY29kZT4uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZGdsb2JhbGl6ZV8wMDJkc3ltYm9sc18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NTUlYLTE0MzAiPjwvYT5Zb3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWdsb2JhbGl6ZS1zeW1ib2xzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIG1ha2UgYWxsIHN5bWJvbHMgZ2xvYmFsLiAKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHNwbGl0dGluZyB1cCBhIDxjb2RlPm1taXhhbDwvY29kZT4gcHJvZ3JhbSBpbnRvCitzZXZlcmFsIGZpbGVzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRnbnVfMDAyZHN5bnRheF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NTUlYLTE0MzEiPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWdudS1zeW50YXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIG1vc3Qgc3ludGF4IGNvbXBhdGliaWxpdHkgd2l0aAorPGNvZGU+bW1peGFsPC9jb2RlPi4gIEl0cyB1c2FiaWxpdHkgaXMgY3VycmVudGx5IGRvdWJ0ZnVsLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRyZWxheF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NTUlYLTE0MzIiPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJlbGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcyBub3QgZnVsbHkgc3VwcG9ydGVkLCBidXQgd2lsbCBldmVudHVhbGx5IG1ha2UKK3RoZSBvYmplY3QgZmlsZSBwcmVwYXJlZCBmb3IgbGlua2VyIHJlbGF4YXRpb24uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZG5vXzAwMmRwcmVkZWZpbmVkXzAwMmRzeW1zXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQzMyI+PC9hPklmIHlvdSB3YW50IHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgY2FsbGluZyBhIHByZWRlZmluZWQgc3ltYm9sIGFuZCB3b3VsZAorcmF0aGVyIGdldCBhbiBlcnJvciwgZm9yIGV4YW1wbGUgd2hlbiB1c2luZyA8Y29kZT5hczwvY29kZT4gd2l0aCBhCitjb21waWxlciBvciBvdGhlciBtYWNoaW5lLWdlbmVyYXRlZCBjb2RlLCBzcGVjaWZ5CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tcHJlZGVmaW5lZC1zeW1zPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyB0dXJucyBvZmYgYnVpbHQtaW4gcHJlZGVmaW5lZAorZGVmaW5pdGlvbnMgb2YgYWxsIHN1Y2ggc3ltYm9scywgaW5jbHVkaW5nIHJvdW5kaW5nLW1vZGUgc3ltYm9scywgc2VnbWVudAorc3ltYm9scywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5CSVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3ltYm9scywgYW5kIDxjb2RlPlRSQVA8L2NvZGU+IHN5bWJvbHMgdXNlZCBpbiA8Y29kZT5tbWl4PC9jb2RlPgorJmxkcXVvO3N5c3RlbSBjYWxscyZyZHF1bzsuICBJdCBhbHNvIHR1cm5zIG9mZiBwcmVkZWZpbmVkIHNwZWNpYWwtcmVnaXN0ZXIgbmFtZXMsCitleGNlcHQgd2hlbiB1c2VkIGluIDxjb2RlPlBVVDwvY29kZT4gYW5kIDxjb2RlPkdFVDwvY29kZT4gaW5zdHJ1Y3Rpb25zLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRub18wMDJkZXhwYW5kXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQzNCI+PC9hPkJ5IGRlZmF1bHQsIHNvbWUgaW5zdHJ1Y3Rpb25zIGFyZSBleHBhbmRlZCB0byBmaXQgdGhlIHNpemUgb2YgdGhlIG9wZXJhbmQKK29yIGFuIGV4dGVybmFsIHN5bWJvbCAoc2VlIDxhIGhyZWY9Ik1NSVhfMDAyZEV4cGFuZC5odG1sI01NSVhfMDAyZEV4cGFuZCI+TU1JWC1FeHBhbmQ8L2E+KS4gIEJ5IHBhc3NpbmcKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby1leHBhbmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG5vIHN1Y2ggZXhwYW5zaW9uIHdpbGwgYmUgZG9uZSwgaW5zdGVhZCBjYXVzaW5nIGVycm9ycworYXQgbGluayB0aW1lIGlmIHRoZSBvcGVyYW5kIGRvZXMgbm90IGZpdC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkbm9fMDAyZG1lcmdlXzAwMmRncmVnc18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1NTUlYLTE0MzUiPjwvYT5UaGUgPGNvZGU+bW1peGFsPC9jb2RlPiBkb2N1bWVudGF0aW9uIChzZWUgPGEgaHJlZj0ibW1peHNpdGUuaHRtbCNtbWl4c2l0ZSI+bW1peHNpdGU8L2E+KSBzcGVjaWZpZXMgdGhhdCBnbG9iYWwKK3JlZ2lzdGVycyBhbGxvY2F0ZWQgd2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HUkVHPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9Ik1NSVhfMDAyZGdyZWcuaHRtbCNNTUlYXzAwMmRncmVnIj5NTUlYLWdyZWc8L2E+KSBhbmQKK2luaXRpYWxpemVkIHRvIHRoZSBzYW1lIG5vbi16ZXJvIHZhbHVlLCB3aWxsIHJlZmVyIHRvIHRoZSBzYW1lIGdsb2JhbAorcmVnaXN0ZXIuICBUaGlzIGlzbid0IHN0cmljdGx5IGVuZm9yY2VhYmxlIGluIDxjb2RlPmFzPC9jb2RlPiBzaW5jZSB0aGUKK2ZpbmFsIGFkZHJlc3NlcyBhcmVuJ3Qga25vd24gdW50aWwgbGluay10aW1lLCBidXQgaXQgd2lsbCBkbyBhbiBlZmZvcnQKK3VubGVzcyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLW1lcmdlLWdyZWdzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcyBzcGVjaWZpZWQuICAoUmVnaXN0ZXIgbWVyZ2luZworaXNuJ3QgeWV0IGltcGxlbWVudGVkIGluIDxjb2RlPmxkPC9jb2RlPi4pCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmR4XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQzNiI+PC9hPjxjb2RlPmFzPC9jb2RlPiB3aWxsIHdhcm4gZXZlcnkgdGltZSBpdCBleHBhbmRzIGFuIGluc3RydWN0aW9uIHRvIGZpdCBhbgorb3BlcmFuZCB1bmxlc3MgdGhlIG9wdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi14PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHNwZWNpZmllZC4gIEl0IGlzIGJlbGlldmVkIHRoYXQKK3RoaXMgYmVoYXZpb3VyIGlzIG1vcmUgdXNlZnVsIHRoYW4ganVzdCBtaW1pY2tpbmcgPGNvZGU+bW1peGFsPC9jb2RlPidzCitiZWhhdmlvdXIsIGluIHdoaWNoIGluc3RydWN0aW9ucyBhcmUgb25seSBleHBhbmRlZCBpZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4teDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24KK2lzIHNwZWNpZmllZCwgYW5kIGFzc2VtYmx5IGZhaWxzIG90aGVyd2lzZSwgd2hlbiBhbiBpbnN0cnVjdGlvbiBuZWVkcyB0bworYmUgZXhwYW5kZWQuICBJdCBuZWVkcyB0byBiZSBrZXB0IGluIG1pbmQgdGhhdCA8Y29kZT5tbWl4YWw8L2NvZGU+IGlzIGJvdGggYW4KK2Fzc2VtYmxlciBhbmQgbGlua2VyLCB3aGlsZSA8Y29kZT5hczwvY29kZT4gd2lsbCBleHBhbmQgaW5zdHJ1Y3Rpb25zCit0aGF0IGF0IGxpbmsgc3RhZ2UgY2FuIGJlIGNvbnRyYWN0ZWQuICAoVGhvdWdoIGxpbmtlciByZWxheGF0aW9uIGlzbid0IHlldAoraW1wbGVtZW50ZWQgaW4gPGNvZGU+bGQ8L2NvZGU+LikgIFRoZSBvcHRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4teDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbHNvIGltcGxlcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWxpbmtlci1hbGxvY2F0ZWQtZ3JlZ3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZG5vXzAwMmRwdXNoal8wMDJkc3R1YnNfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTU1JWC0xNDM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkbm9fMDAyZHN0dWJzXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLU1NSVgtMTQzOCI+PC9hPklmIGluc3RydWN0aW9uIGV4cGFuc2lvbiBpcyBlbmFibGVkLCA8Y29kZT5hczwvY29kZT4gY2FuIGV4cGFuZCBhCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlBVU0hKPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9uIGludG8gYSBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb25zLiAgVGhlIHNob3J0ZXN0CitleHBhbnNpb24gaXMgdG8gbm90IGV4cGFuZCBpdCwgYnV0IGp1c3QgbWFyayB0aGUgY2FsbCBhcyByZWRpcmVjdGFibGUgdG8gYQorc3R1Yiwgd2hpY2ggPGNvZGU+bGQ8L2NvZGU+IGNyZWF0ZXMgYXQgbGluay10aW1lLCBidXQgb25seSBpZiB0aGUKK29yaWdpbmFsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UFVTSEo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb24gaXMgZm91bmQgbm90IHRvIHJlYWNoIHRoZSB0YXJnZXQuICBUaGUKK3N0dWIgY29uc2lzdHMgb2YgdGhlIG5lY2Vzc2FyeSBpbnN0cnVjdGlvbnMgdG8gZm9ybSBhIGp1bXAgdG8gdGhlIHRhcmdldC4gCitUaGlzIGhhcHBlbnMgaWYgPGNvZGU+YXM8L2NvZGU+IGNhbiBhc3NlcnQgdGhhdCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QVVNISjwvc3Bhbj48L3NhbXA+JnJzcXVvOworaW5zdHJ1Y3Rpb24gY2FuIHJlYWNoIHN1Y2ggYSBzdHViLiAgVGhlIG9wdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tcHVzaGotc3R1YnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2Rpc2FibGVzIHRoaXMgc2hvcnRlciBleHBhbnNpb24sIGFuZCB0aGUgbG9uZ2VyIHNlcmllcyBvZiBpbnN0cnVjdGlvbnMgaXMKK3RoZW4gY3JlYXRlZCBhdCBhc3NlbWJseS10aW1lLiAgVGhlIG9wdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tc3R1YnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYSBzeW5vbnltLAoraW50ZW5kZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBmdXR1cmUgcmVsZWFzZXMsIHdoZXJlIGdlbmVyYXRpb24gb2Ygc3R1YnMKK2ZvciBvdGhlciBpbnN0cnVjdGlvbnMgbWF5IGJlIGltcGxlbWVudGVkLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRsaW5rZXJfMDAyZGFsbG9jYXRlZF8wMDJkZ3JlZ3NfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtTU1JWC0xNDM5Ij48L2E+VXN1YWxseSBhIHR3by1vcGVyYW5kLWV4cHJlc3Npb24gKHNlZSA8YSBocmVmPSJHUkVHXzAwMmRiYXNlLmh0bWwjR1JFR18wMDJkYmFzZSI+R1JFRy1iYXNlPC9hPikgd2l0aG91dCBhIG1hdGNoaW5nCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkdSRUc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIGlzIHRyZWF0ZWQgYXMgYW4gZXJyb3IgYnkgPGNvZGU+YXM8L2NvZGU+LiAgV2hlbgordGhlIG9wdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbGlua2VyLWFsbG9jYXRlZC1ncmVnczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBpbiBlZmZlY3QsIHRoZXkgYXJlIGluc3RlYWQKK3Bhc3NlZCB0aHJvdWdoIHRvIHRoZSBsaW5rZXIsIHdoaWNoIHdpbGwgYWxsb2NhdGUgYXMgbWFueSBnbG9iYWwgcmVnaXN0ZXJzCithcyBpcyBuZWVkZWQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZFBzZXVkb3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZFBzZXVkb3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDVhZWQwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkUHNldWRvcy5odG1sCkBAIC0wLDAgKzEsMjE0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NTUlYLVBzZXVkb3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1NSVhfMDAyZFN5bnRheC5odG1sI01NSVhfMDAyZFN5bnRheCIgdGl0bGU9Ik1NSVgtU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTU1JWF8wMDJkUmVncy5odG1sI01NSVhfMDAyZFJlZ3MiIHRpdGxlPSJNTUlYLVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNTUlYLVBzZXVkb3MiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZFBzZXVkb3MiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNTUlYXzAwMmRSZWdzLmh0bWwjTU1JWF8wMDJkUmVncyI+TU1JWC1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTU1JWF8wMDJkU3ludGF4Lmh0bWwjTU1JWF8wMDJkU3ludGF4Ij5NTUlYLVN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjcuMy40IEFzc2VtYmxlciBEaXJlY3RpdmVzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZXNfMDAyYy1NTUlYLTE0NDUiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wc18wMDJjLU1NSVgtMTQ0NiI+PC9hPjxhIG5hbWU9ImluZGV4LU1NSVgtYXNzZW1ibGVyLWRpcmVjdGl2ZXMtMTQ0NyI+PC9hPjxhIG5hbWU9ImluZGV4LU1NSVgtcHNldWRvXzAwMmRvcHMtMTQ0OCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+TE9DPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLUxPQ18wMDJjLU1NSVgtMTQ0OSI+PC9hPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3AtTE9DXzAwMmMtTU1JWC0xNDUwIj48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUxPQy0xNDUxIj48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1wc2V1ZG9fMDAyZG9wLUxPQy0xNDUyIj48L2E+Cis8YSBuYW1lPSJNTUlYXzAwMmRsb2MiPjwvYT5UaGUgPGNvZGU+TE9DPC9jb2RlPiBkaXJlY3RpdmUgc2V0cyB0aGUgY3VycmVudCBsb2NhdGlvbiB0byB0aGUgdmFsdWUgb2YgdGhlCitvcGVyYW5kIGZpZWxkLCB3aGljaCBtYXkgaW5jbHVkZSBjaGFuZ2luZyBzZWN0aW9ucy4gIElmIHRoZSBvcGVyYW5kIGlzIGEKK2NvbnN0YW50LCB0aGUgc2VjdGlvbiBpcyBzZXQgdG8gZWl0aGVyIDxjb2RlPi5kYXRhPC9jb2RlPiBpZiB0aGUgdmFsdWUgaXMKKzxjb2RlPjB4MjAwMDAwMDAwMDAwMDAwMDwvY29kZT4gb3IgbGFyZ2VyLCBlbHNlIGl0IGlzIHNldCB0byA8Y29kZT4udGV4dDwvY29kZT4uIAorV2l0aGluIGEgc2VjdGlvbiwgdGhlIGN1cnJlbnQgbG9jYXRpb24gbWF5IG9ubHkgYmUgY2hhbmdlZCB0bworbW9ub3RvbmljYWxseSBoaWdoZXIgYWRkcmVzc2VzLiAgQSBMT0MgZXhwcmVzc2lvbiBtdXN0IGJlIGEgcHJldmlvdXNseQorZGVmaW5lZCBzeW1ib2wgb3IgYSAmbGRxdW87cHVyZSZyZHF1bzsgY29uc3RhbnQuCisKKyAgICAgPHA+QW4gZXhhbXBsZSwgd2hpY2ggc2V0cyB0aGUgbGFiZWwgPHZhcj5wcmV2PC92YXI+IHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uLCBhbmQKK3VwZGF0ZXMgdGhlIGN1cnJlbnQgbG9jYXRpb24gdG8gZWlnaHQgYnl0ZXMgZm9yd2FyZDoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJldiBMT0MgQCs4Cis8L3ByZT4KKyAgICAgPHA+V2hlbiBhIExPQyBoYXMgYSBjb25zdGFudCBhcyBpdHMgb3BlcmFuZCwgYSBzeW1ib2wKKzxjb2RlPl9fLk1NSVguc3RhcnQuLnRleHQ8L2NvZGU+IG9yIDxjb2RlPl9fLk1NSVguc3RhcnQuLmRhdGE8L2NvZGU+IGlzIGRlZmluZWQKK2RlcGVuZGluZyBvbiB0aGUgYWRkcmVzcyBhcyBtZW50aW9uZWQgYWJvdmUuICBFYWNoIHN1Y2ggc3ltYm9sIGlzCitpbnRlcnByZXRlZCBhcyBzcGVjaWFsIGJ5IHRoZSBsaW5rZXIsIGxvY2F0aW5nIHRoZSBzZWN0aW9uIGF0IHRoYXQKK2FkZHJlc3MuICBOb3RlIHRoYXQgaWYgbXVsdGlwbGUgZmlsZXMgYXJlIGxpbmtlZCwgdGhlIGZpcnN0IG9iamVjdCBmaWxlCit3aXRoIHRoYXQgc2VjdGlvbiB3aWxsIGJlIG1hcHBlZCB0byB0aGF0IGFkZHJlc3MgKG5vdCBuZWNlc3NhcmlseSB0aGUgZmlsZQord2l0aCB0aGUgTE9DIGRlZmluaXRpb24pLgorCisgICAgIDxicj48ZHQ+PGNvZGU+TE9DQUw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtTE9DQUxfMDAyYy1NTUlYLTE0NTMiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wLUxPQ0FMXzAwMmMtTU1JWC0xNDU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUxPQ0FMLTE0NTUiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLXBzZXVkb18wMDJkb3AtTE9DQUwtMTQ1NiI+PC9hPgorPGEgbmFtZT0iTU1JWF8wMDJkbG9jYWwiPjwvYT5FeGFtcGxlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgTE9DQUwgZXh0ZXJuYWxfc3ltYm9sCisgICAgICAgICAgIExPQ0FMIDQyCisgICAgICAgICAgIC5sb2NhbCBhc3ltYm9sCis8L3ByZT4KKyAgICAgPHA+VGhpcyBkaXJlY3RpdmUtb3BlcmF0aW9uIGdlbmVyYXRlcyBhIGxpbmstdGltZSBhc3NlcnRpb24gdGhhdCB0aGUgb3BlcmFuZAorZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGdsb2JhbCByZWdpc3Rlci4gIFRoZSBvcGVyYW5kIGlzIGFuIGV4cHJlc3Npb24KK3RoYXQgYXQgbGluay10aW1lIHJlc29sdmVzIHRvIGEgcmVnaXN0ZXIgc3ltYm9sIG9yIGEgbnVtYmVyLiAgQSBudW1iZXIgaXMKK3RyZWF0ZWQgYXMgdGhlIHJlZ2lzdGVyIGhhdmluZyB0aGF0IG51bWJlci4gIFRoZXJlIGlzIG9uZSByZXN0cmljdGlvbiBvbgordGhlIHVzZSBvZiB0aGlzIGRpcmVjdGl2ZTogdGhlIHBzZXVkby1kaXJlY3RpdmUgbXVzdCBiZSBwbGFjZWQgaW4gYQorc2VjdGlvbiB3aXRoIGNvbnRlbnRzLCBjb2RlIG9yIGRhdGEuCisKKyAgICAgPGJyPjxkdD48Y29kZT5JUzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1JU18wMDJjLU1NSVgtMTQ1NyI+PC9hPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3AtSVNfMDAyYy1NTUlYLTE0NTgiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLWFzc2VtYmxlci1kaXJlY3RpdmUtSVMtMTQ1OSI+PC9hPjxhIG5hbWU9ImluZGV4LU1NSVgtcHNldWRvXzAwMmRvcC1JUy0xNDYwIj48L2E+Cis8YSBuYW1lPSJNTUlYXzAwMmRpcyI+PC9hPlRoZSA8Y29kZT5JUzwvY29kZT4gZGlyZWN0aXZlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBhc3ltYm9sIElTIGFuX2V4cHJlc3Npb24KKzwvcHJlPgorICAgICA8cD5zZXRzIHRoZSBzeW1ib2wgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hc3ltYm9sPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YW5fZXhwcmVzc2lvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEEgc3ltYm9sIG1heSBub3QKK2JlIHNldCBtb3JlIHRoYW4gb25jZSB1c2luZyB0aGlzIGRpcmVjdGl2ZS4gIExvY2FsIGxhYmVscyBtYXkgYmUgc2V0IHVzaW5nCit0aGlzIGRpcmVjdGl2ZSwgZm9yIGV4YW1wbGU6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIDVIIElTIEArNAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+R1JFRzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1HUkVHXzAwMmMtTU1JWC0xNDYxIj48L2E+PGEgbmFtZT0iaW5kZXgtcHNldWRvXzAwMmRvcC1HUkVHXzAwMmMtTU1JWC0xNDYyIj48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUdSRUctMTQ2MyI+PC9hPjxhIG5hbWU9ImluZGV4LU1NSVgtcHNldWRvXzAwMmRvcC1HUkVHLTE0NjQiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZGdyZWciPjwvYT5UaGlzIGRpcmVjdGl2ZSByZXNlcnZlcyBhIGdsb2JhbCByZWdpc3RlciwgZ2l2ZXMgaXQgYW4gaW5pdGlhbCB2YWx1ZSBhbmQKK29wdGlvbmFsbHkgZ2l2ZXMgaXQgYSBzeW1ib2xpYyBuYW1lLiAgU29tZSBleGFtcGxlczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBhcmVnIEdSRUcKKyAgICAgICAgICBicmVnIEdSRUcgZGF0YV92YWx1ZQorICAgICAgICAgICAgICAgR1JFRyBkYXRhX2J1ZmZlcgorICAgICAgICAgICAgICAgLmdyZWcgY3JlZywgYW5vdGhlcl9kYXRhX3ZhbHVlCis8L3ByZT4KKyAgICAgPHA+VGhlIHN5bWJvbGljIHJlZ2lzdGVyIG5hbWUgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgYSAobm9uLXNwZWNpYWwpCityZWdpc3Rlci4gIElmIGEgdmFsdWUgaXNuJ3QgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIHplcm8uICBVbmxlc3MgdGhlCitvcHRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLW1lcmdlLWdyZWdzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHNwZWNpZmllZCwgbm9uLXplcm8gcmVnaXN0ZXJzIGFsbG9jYXRlZAord2l0aCB0aGlzIGRpcmVjdGl2ZSBtYXkgYmUgZWxpbWluYXRlZCBieSA8Y29kZT5hczwvY29kZT47IGFub3RoZXIKK3JlZ2lzdGVyIHdpdGggdGhlIHNhbWUgdmFsdWUgdXNlZCBpbiBpdHMgcGxhY2UuIAorQW55IG9mIHRoZSBpbnN0cnVjdGlvbnMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Q1NXQVA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkdPPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MREE8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxEQlU8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxEQjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TERIVDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TERPVTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TERPPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MRFNGPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MRFRVPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MRFQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxEVU5DPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MRFZUUzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TERXVTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TERXPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QUkVHTzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UFJFTEQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlBSRVNUPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QVVNIR088L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlNUQlU8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlNUQjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1RDTzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1RIVDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1RPVTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1RTRjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1RUVTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1RUPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TVFVOQzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1lOQ0Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlNZTkNJRDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK2NhbiBoYXZlIGEgdmFsdWUgbmVhcmJ5IDxhIG5hbWU9IkdSRUdfMDAyZGJhc2UiPjwvYT5hbiBpbml0aWFsIHZhbHVlIGluIHBsYWNlIG9mIGl0cworc2Vjb25kIGFuZCB0aGlyZCBvcGVyYW5kcy4gIEhlcmUsICZsZHF1bztuZWFyYnkmcmRxdW87IGlzIGRlZmluZWQgYXMgd2l0aGluIHRoZQorcmFuZ2UgMDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4yNTUgZnJvbSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBzdWNoIGFuIGFsbG9jYXRlZCByZWdpc3Rlci4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBidWZmZXIxIEJZVEUgMCwwLDAsMCwwCisgICAgICAgICAgYnVmZmVyMiBCWVRFIDAsMCwwLDAsMAorICAgICAgICAgICAuLi4KKyAgICAgICAgICAgR1JFRyBidWZmZXIxCisgICAgICAgICAgIExET1UgJDQyLGJ1ZmZlcjIKKzwvcHJlPgorICAgICA8cD5JbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+WTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmaWVsZCBvZiB0aGUgPGNvZGU+TERPVUk8L2NvZGU+IGluc3RydWN0aW9uCisoTERPVSB3aXRoIGEgY29uc3RhbnQgWikgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBnbG9iYWwgcmVnaXN0ZXIKK2FsbG9jYXRlZCBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5idWZmZXIxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Wjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmaWVsZCB3aWxsIGhhdmUgdGhlIHZhbHVlCis1LCB0aGUgb2Zmc2V0IGZyb20gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5idWZmZXIxPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnVmZmVyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSByZXN1bHQgaXMKK2VxdWl2YWxlbnQgdG8gdGhpcyBjb2RlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBidWZmZXIxIEJZVEUgMCwwLDAsMCwwCisgICAgICAgICAgYnVmZmVyMiBCWVRFIDAsMCwwLDAsMAorICAgICAgICAgICAuLi4KKyAgICAgICAgICB0bXByZWcgR1JFRyBidWZmZXIxCisgICAgICAgICAgIExET1UgJDQyLHRtcHJlZywoYnVmZmVyMi1idWZmZXIxKQorPC9wcmU+CisgICAgIDxwPkdsb2JhbCByZWdpc3RlcnMgYWxsb2NhdGVkIHdpdGggdGhpcyBkaXJlY3RpdmUgYXJlIGFsbG9jYXRlZCBpbiBvcmRlcgoraGlnaGVyLXRvLWxvd2VyIHdpdGhpbiBhIGZpbGUuICBPdGhlciB0aGFuIHRoYXQsIHRoZSBleGFjdCBvcmRlciBvZgorcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZWxpbWluYXRpb24gaXMgdW5kZWZpbmVkLiAgRm9yIGV4YW1wbGUsIHRoZSBvcmRlcgoraXMgdW5kZWZpbmVkIHdoZW4gbW9yZSB0aGFuIG9uZSBmaWxlIHdpdGggc3VjaCBkaXJlY3RpdmVzIGFyZSBsaW5rZWQKK3RvZ2V0aGVyLiAgV2l0aCB0aGUgb3B0aW9ucyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi14PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbGlua2VyLWFsbG9jYXRlZC1ncmVnczwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+R1JFRzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmVzIGZvciB0d28tb3BlcmFuZCBjYXNlcyBsaWtlIHRoZSBvbmUgbWVudGlvbmVkIGFib3ZlCitjYW4gYmUgb21pdHRlZC4gIFN1ZmZpY2llbnQgZ2xvYmFsIHJlZ2lzdGVycyB3aWxsIHRoZW4gYmUgYWxsb2NhdGVkIGJ5IHRoZQorbGlua2VyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+QllURTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1CWVRFXzAwMmMtTU1JWC0xNDY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHNldWRvXzAwMmRvcC1CWVRFXzAwMmMtTU1JWC0xNDY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUJZVEUtMTQ2NyI+PC9hPjxhIG5hbWU9ImluZGV4LU1NSVgtcHNldWRvXzAwMmRvcC1CWVRFLTE0NjgiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZGJ5dGUiPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5CWVRFPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSB0YWtlcyBhIHNlcmllcyBvZiBvcGVyYW5kcyBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gCitJZiBhbiBvcGVyYW5kIGlzIGEgc3RyaW5nIChzZWUgPGEgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+KSwgZWFjaCBjaGFyYWN0ZXIgb2YgdGhhdCBzdHJpbmcKK2lzIGVtaXR0ZWQgYXMgYSBieXRlLiAgT3RoZXIgb3BlcmFuZHMgbXVzdCBiZSBjb25zdGFudCBleHByZXNzaW9ucyB3aXRob3V0Citmb3J3YXJkIHJlZmVyZW5jZXMsIGluIHRoZSByYW5nZSAwPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPjI1NS4gIElmIHlvdSBuZWVkIG9wZXJhbmRzIGhhdmluZworZXhwcmVzc2lvbnMgd2l0aCBmb3J3YXJkIHJlZmVyZW5jZXMsIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ieXRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IChzZWUgPGEgaHJlZj0iQnl0ZS5odG1sI0J5dGUiPkJ5dGU8L2E+KS4gIEFuCitvcGVyYW5kIGNhbiBiZSBvbWl0dGVkLCBkZWZhdWx0aW5nIHRvIGEgemVybyB2YWx1ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPldZREU8L2NvZGU+PGR0Pjxjb2RlPlRFVFJBPC9jb2RlPjxkdD48Y29kZT5PQ1RBPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLVdZREVfMDAyYy1NTUlYLTE0NjkiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wLVdZREVfMDAyYy1NTUlYLTE0NzAiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLWFzc2VtYmxlci1kaXJlY3RpdmUtV1lERS0xNDcxIj48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1wc2V1ZG9fMDAyZG9wLVdZREUtMTQ3MiI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtVEVUUkFfMDAyYy1NTUlYLTE0NzMiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wLVRFVFJBXzAwMmMtTU1JWC0xNDc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLVRFVFJBLTE0NzUiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLXBzZXVkb18wMDJkb3AtVEVUUkEtMTQ3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtT0NUQV8wMDJjLU1NSVgtMTQ3NyI+PC9hPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3AtT0NUQV8wMDJjLU1NSVgtMTQ3OCI+PC9hPjxhIG5hbWU9ImluZGV4LU1NSVgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1PQ1RBLTE0NzkiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLXBzZXVkb18wMDJkb3AtT0NUQS0xNDgwIj48L2E+Cis8YSBuYW1lPSJNTUlYXzAwMmRjb25zdGFudHMiPjwvYT5UaGUgZGlyZWN0aXZlcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPldZREU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VEVUUkE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+T0NUQTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlbWl0IGNvbnN0YW50cyBvZgordHdvLCBmb3VyIGFuZCBlaWdodCBieXRlcyBzaXplIHJlc3BlY3RpdmVseS4gIEJlZm9yZSBhbnl0aGluZyBlbHNlIGhhcHBlbnMKK2ZvciB0aGUgZGlyZWN0aXZlLCB0aGUgY3VycmVudCBsb2NhdGlvbiBpcyBhbGlnbmVkIHRvIHRoZSByZXNwZWN0aXZlCitjb25zdGFudC1zaXplIGJvdW5kYXJ5LiAgSWYgYSBsYWJlbCBpcyBkZWZpbmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCitsaW5lLCBpdHMgdmFsdWUgd2lsbCBiZSB0aGF0IGFmdGVyIHRoZSBhbGlnbm1lbnQuICBBIHNpbmdsZSBvcGVyYW5kIGNhbiBiZQorb21pdHRlZCwgZGVmYXVsdGluZyB0byBhIHplcm8gdmFsdWUgZW1pdHRlZCBmb3IgdGhlIGRpcmVjdGl2ZS4gIE9wZXJhbmRzCitjYW4gYmUgZXhwcmVzc2VkIGFzIHN0cmluZ3MgKHNlZSA8YSBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4pLCBpbiB3aGljaCBjYXNlIGVhY2gKK2NoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIGVtaXR0ZWQgYXMgYSBzZXBhcmF0ZSBjb25zdGFudCBvZiB0aGUgc2l6ZQoraW5kaWNhdGVkIGJ5IHRoZSBkaXJlY3RpdmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5QUkVGSVg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtUFJFRklYXzAwMmMtTU1JWC0xNDgxIj48L2E+PGEgbmFtZT0iaW5kZXgtcHNldWRvXzAwMmRvcC1QUkVGSVhfMDAyYy1NTUlYLTE0ODIiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLWFzc2VtYmxlci1kaXJlY3RpdmUtUFJFRklYLTE0ODMiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLXBzZXVkb18wMDJkb3AtUFJFRklYLTE0ODQiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZHByZWZpeCI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlBSRUZJWDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgc2V0cyBhIHN5bWJvbCBuYW1lIHByZWZpeCB0byBiZSBwcmVwZW5kZWQgdG8KK2FsbCBzeW1ib2xzIChleGNlcHQgbG9jYWwgc3ltYm9scywgc2VlIDxhIGhyZWY9Ik1NSVhfMDAyZFN5bWJvbHMuaHRtbCNNTUlYXzAwMmRTeW1ib2xzIj5NTUlYLVN5bWJvbHM8L2E+KSwgdGhhdCBhcmUgbm90CitwcmVmaXhlZCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ojwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdW50aWwgdGhlIG5leHQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QUkVGSVg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlLiAgU3VjaAorcHJlZml4ZXMgYWNjdW11bGF0ZS4gIEZvciBleGFtcGxlLAorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgUFJFRklYIGEKKyAgICAgICAgICAgUFJFRklYIGIKKyAgICAgICAgICBjIElTIDAKKzwvcHJlPgorICAgICA8cD5kZWZpbmVzIGEgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWJjPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpdGggdGhlIHZhbHVlIDAuCisKKyAgICAgPGJyPjxkdD48Y29kZT5CU1BFQzwvY29kZT48ZHQ+PGNvZGU+RVNQRUM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtQlNQRUNfMDAyYy1NTUlYLTE0ODUiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wLUJTUEVDXzAwMmMtTU1JWC0xNDg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUJTUEVDLTE0ODciPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLXBzZXVkb18wMDJkb3AtQlNQRUMtMTQ4OCI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtRVNQRUNfMDAyYy1NTUlYLTE0ODkiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wLUVTUEVDXzAwMmMtTU1JWC0xNDkwIj48L2E+PGEgbmFtZT0iaW5kZXgtTU1JWC1hc3NlbWJsZXItZGlyZWN0aXZlLUVTUEVDLTE0OTEiPjwvYT48YSBuYW1lPSJpbmRleC1NTUlYLXBzZXVkb18wMDJkb3AtRVNQRUMtMTQ5MiI+PC9hPgorPGEgbmFtZT0iTU1JWF8wMDJkc3BlYyI+PC9hPkEgcGFpciBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkJTUEVDPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkVTUEVDPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZXMgZGVsaW1pdCBhIHNlY3Rpb24gb2YKK3NwZWNpYWwgY29udGVudHMgKHdpdGhvdXQgc3BlY2lmaWVkIHNlbWFudGljcykuICBFeGFtcGxlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgQlNQRUMgNDIKKyAgICAgICAgICAgVEVUUkEgMSwyLDMKKyAgICAgICAgICAgRVNQRUMKKzwvcHJlPgorICAgICA8cD5UaGUgc2luZ2xlIG9wZXJhbmQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5CU1BFQzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtdXN0IGJlIG51bWJlciBpbiB0aGUgcmFuZ2UKKzA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+MjU1LiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QlNQRUM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbnVtYmVyIDgwIGlzIHVzZWQgYnkgdGhlIEdOVSBiaW51dGlscworaW1wbGVtZW50YXRpb24uIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkUmVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNWZlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRSZWdzLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TU1JWC1SZWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNTUlYXzAwMmRTeW50YXguaHRtbCNNTUlYXzAwMmRTeW50YXgiIHRpdGxlPSJNTUlYLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1NSVhfMDAyZFN5bWJvbHMuaHRtbCNNTUlYXzAwMmRTeW1ib2xzIiB0aXRsZT0iTU1JWC1TeW1ib2xzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiIHRpdGxlPSJNTUlYLVBzZXVkb3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNTUlYLVJlZ3MiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZFJlZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPk1NSVgtUHNldWRvczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1NSVhfMDAyZFN5bWJvbHMuaHRtbCNNTUlYXzAwMmRTeW1ib2xzIj5NTUlYLVN5bWJvbHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNTUlYXzAwMmRTeW50YXguaHRtbCNNTUlYXzAwMmRTeW50YXgiPk1NSVgtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4yNy4zLjMgUmVnaXN0ZXIgbmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLU1NSVgtMTQ0MyI+PC9hPjxhIG5hbWU9ImluZGV4LU1NSVgtcmVnaXN0ZXItbmFtZXMtMTQ0NCI+PC9hPgorTG9jYWwgYW5kIGdsb2JhbCByZWdpc3RlcnMgYXJlIHNwZWNpZmllZCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDI1NTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitUaGUgcmVjb2duaXplZCBzcGVjaWFsIHJlZ2lzdGVyIG5hbWVzIGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJKPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJBPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJCPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yQzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yRDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yRTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yRjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yRzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ySDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ckk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cks8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ckw8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ck08L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ck48L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ck88L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJQPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJRPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJSPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJTPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJUPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJVPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yVjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yVzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yWDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yWTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yWjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yQkI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJUVDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yV1c8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+clhYPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJZWTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yWlo8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBBIGxlYWRpbmcKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ojwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBvcHRpb25hbCBmb3Igc3BlY2lhbCByZWdpc3RlciBuYW1lcy4KKworICAgPHA+TG9jYWwgYW5kIGdsb2JhbCBzeW1ib2xzIGNhbiBiZSBlcXVhdGVkIHRvIHJlZ2lzdGVyIG5hbWVzIGFuZCB1c2VkIGluCitwbGFjZSBvZiBvcmRpbmFyeSByZWdpc3RlcnMuCisKKyAgIDxwPlNpbWlsYXJseSBmb3Igc3BlY2lhbCByZWdpc3RlcnMsIGxvY2FsIGFuZCBnbG9iYWwgc3ltYm9scyBjYW4gYmUgdXNlZC4gCitBbHNvLCBzeW1ib2xzIGVxdWF0ZWQgZnJvbSBudW1iZXJzIGFuZCBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbgorcGxhY2Ugb2YgYSBzcGVjaWFsIHJlZ2lzdGVyLCBleGNlcHQgd2hlbiBlaXRoZXIgb2YgdGhlIG9wdGlvbnMKKzxjb2RlPi0tbm8tcHJlZGVmaW5lZC1zeW1zPC9jb2RlPiBhbmQgPGNvZGU+LS1maXhlZC1zcGVjaWFsLXJlZ2lzdGVyLW5hbWVzPC9jb2RlPiBhcmUKK3NwZWNpZmllZC4gIFRoZW4gb25seSB0aGUgc3BlY2lhbCByZWdpc3RlciBuYW1lcyBhYm92ZSBhcmUgYWxsb3dlZCBmb3IgdGhlCitpbnN0cnVjdGlvbnMgaGF2aW5nIGEgc3BlY2lhbCByZWdpc3RlciBvcGVyYW5kOyA8Y29kZT5HRVQ8L2NvZGU+IGFuZCA8Y29kZT5QVVQ8L2NvZGU+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRTeW1ib2xzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRTeW1ib2xzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwMzlhZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZFN5bWJvbHMuaHRtbApAQCAtMCwwICsxLDkzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NTUlYLVN5bWJvbHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1NSVhfMDAyZFN5bnRheC5odG1sI01NSVhfMDAyZFN5bnRheCIgdGl0bGU9Ik1NSVgtU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTU1JWF8wMDJkQ2hhcnMuaHRtbCNNTUlYXzAwMmRDaGFycyIgdGl0bGU9Ik1NSVgtQ2hhcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNTUlYXzAwMmRSZWdzLmh0bWwjTU1JWF8wMDJkUmVncyIgdGl0bGU9Ik1NSVgtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1NSVgtU3ltYm9scyI+PC9hPgorPGEgbmFtZT0iTU1JWF8wMDJkU3ltYm9scyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNTUlYXzAwMmRSZWdzLmh0bWwjTU1JWF8wMDJkUmVncyI+TU1JWC1SZWdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTU1JWF8wMDJkQ2hhcnMuaHRtbCNNTUlYXzAwMmRDaGFycyI+TU1JWC1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1NSVhfMDAyZFN5bnRheC5odG1sI01NSVhfMDAyZFN5bnRheCI+TU1JWC1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjI3LjMuMiBTeW1ib2xzPC9oNT4KKworPHA+VGhlIGNoYXJhY3RlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgcGVybWl0dGVkIGluIGlkZW50aWZpZXJzLiAgVGhlcmUgYXJlIHR3bworZXhjZXB0aW9ucyB0byBpdCBiZWluZyB0cmVhdGVkIGFzIGFueSBvdGhlciBzeW1ib2wgY2hhcmFjdGVyOiBpZiBhIHN5bWJvbAorYmVnaW5zIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBpdCBtZWFucyB0aGF0IHRoZSBzeW1ib2wgaXMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UKK2FuZCB0aGF0IHRoZSBjdXJyZW50IHByZWZpeCBzaG91bGQgbm90IGJlIHByZXBlbmRlZCB0byB0aGF0IHN5bWJvbAorKHNlZSA8YSBocmVmPSJNTUlYXzAwMmRwcmVmaXguaHRtbCNNTUlYXzAwMmRwcmVmaXgiPk1NSVgtcHJlZml4PC9hPikuICBUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRoZW4gbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUKK3N5bWJvbC4gIEZvciBhIHN5bWJvbCBpbiB0aGUgbGFiZWwgcG9zaXRpb24gKGZpcnN0IG9uIGEgbGluZSksIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjwvc2FtcD4mcnNxdW87CithdCB0aGUgZW5kIG9mIGEgc3ltYm9sIGlzIHNpbGVudGx5IHN0cmlwcGVkIG9mZi4gIEEgbGFiZWwgaXMgcGVybWl0dGVkLAorYnV0IG5vdCByZXF1aXJlZCwgdG8gYmUgZm9sbG93ZWQgYnkgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFzIHdpdGggbWFueSBvdGhlcgorYXNzZW1ibHkgZm9ybWF0cy4KKworICAgPHA+VGhlIGNoYXJhY3RlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gYW4gZXhwcmVzc2lvbiwgaXMgYSBzeW5vbnltIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZQorY3VycmVudCBsb2NhdGlvbi4KKworICAgPHA+SW4gYWRkaXRpb24gdG8gdGhlIGNvbW1vbiBmb3J3YXJkIGFuZCBiYWNrd2FyZCBsb2NhbCBzeW1ib2wgZm9ybWF0cworKHNlZSA8YSBocmVmPSJTeW1ib2wtTmFtZXMuaHRtbCNTeW1ib2wtTmFtZXMiPlN5bWJvbCBOYW1lczwvYT4pLCB0aGV5IGNhbiBiZSBzcGVjaWZpZWQgd2l0aCB1cHBlci1jYXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Rjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYXMgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj44Qjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj45Rjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEEgbG9jYWwgbGFiZWwgZGVmaW5lZCBmb3IgdGhlCitjdXJyZW50IHBvc2l0aW9uIGlzIHdyaXR0ZW4gd2l0aCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+SDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlbmRlZCB0byB0aGUgbnVtYmVyOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDNIIExEQiAkMCwkMSwyCis8L3ByZT4KKyAgIDxwPlRoaXMgYW5kIHRyYWRpdGlvbmFsIGxvY2FsLWxhYmVsIGZvcm1hdHMgY2Fubm90IGJlIG1peGVkOiBhIGxhYmVsIG11c3QgYmUKK2RlZmluZWQgYW5kIHJlZmVycmVkIHRvIHVzaW5nIHRoZSBzYW1lIGZvcm1hdC4KKworICAgPHA+VGhlcmUncyBhIG1pbm9yIGNhdmVhdDoganVzdCBhcyBmb3IgdGhlIG9yZGluYXJ5IGxvY2FsIHN5bWJvbHMsIHRoZSBsb2NhbAorc3ltYm9scyBhcmUgdHJhbnNsYXRlZCBpbnRvIG9yZGluYXJ5IHN5bWJvbHMgdXNpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGFyZQordG8gaGlkZSB0aGUgb3JkaW5hbCBudW1iZXIgb2YgdGhlIHN5bWJvbC4gIFVuZm9ydHVuYXRlbHksIHRoZXNlIHN5bWJvbHMKK2FyZSBub3QgdHJhbnNsYXRlZCBiYWNrIGluIGVycm9yIG1lc3NhZ2VzLiAgVGh1cyB5b3UgbWF5IHNlZSBjb25mdXNpbmcKK2Vycm9yIG1lc3NhZ2VzIHdoZW4gbG9jYWwgc3ltYm9scyBhcmUgdXNlZC4gIENvbnRyb2wgY2hhcmFjdGVycworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cMDAzPC9zcGFuPjwvc2FtcD4mcnNxdW87IChjb250cm9sLUMpIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlwwMDQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGNvbnRyb2wtRCkgYXJlIHVzZWQgZm9yIHRoZQorTU1JWC1zcGVjaWZpYyBsb2NhbC1zeW1ib2wgc3ludGF4LgorCisgICA8cD5UaGUgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TWFpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBoYW5kbGVkIHNwZWNpYWxseTsgaXQgaXMgYWx3YXlzIGdsb2JhbC4KKworICAgPHA+QnkgZGVmaW5pbmcgdGhlIHN5bWJvbHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fXy5NTUlYLnN0YXJ0Li50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fXy5NTUlYLnN0YXJ0Li5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGUgYWRkcmVzcyBvZiByZXNwZWN0aXZlbHkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlZ21lbnRzIG9mIHRoZSBmaW5hbCBwcm9ncmFtIGNhbiBiZSBkZWZpbmVkLCB0aG91Z2ggd2hlbgorbGlua2luZyBtb3JlIHRoYW4gb25lIG9iamVjdCBmaWxlLCB0aGUgY29kZSBvciBkYXRhIGluIHRoZSBvYmplY3QgZmlsZQorY29udGFpbmluZyB0aGUgc3ltYm9sIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN0YXJ0IGF0IHRoYXQgcG9zaXRpb247IGp1c3QKK3RoZSBmaW5hbCBleGVjdXRhYmxlLiAgU2VlIDxhIGhyZWY9Ik1NSVhfMDAyZGxvYy5odG1sI01NSVhfMDAyZGxvYyI+TU1JWC1sb2M8L2E+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRTeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZFN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjBmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRTeW50YXguaHRtbApAQCAtMCwwICsxLDgwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NTUlYLVN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTU1JWF8wMDJkRGVwZW5kZW50Lmh0bWwjTU1JWF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTU1JWC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNTUlYXzAwMmRFeHBhbmQuaHRtbCNNTUlYXzAwMmRFeHBhbmQiIHRpdGxlPSJNTUlYLUV4cGFuZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1NSVhfMDAyZG1taXhhbC5odG1sI01NSVhfMDAyZG1taXhhbCIgdGl0bGU9Ik1NSVgtbW1peGFsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTU1JWC1TeW50YXgiPjwvYT4KKzxhIG5hbWU9Ik1NSVhfMDAyZFN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNTUlYXzAwMmRtbWl4YWwuaHRtbCNNTUlYXzAwMmRtbWl4YWwiPk1NSVgtbW1peGFsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTU1JWF8wMDJkRXhwYW5kLmh0bWwjTU1JWF8wMDJkRXhwYW5kIj5NTUlYLUV4cGFuZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1NSVhfMDAyZERlcGVuZGVudC5odG1sI01NSVhfMDAyZERlcGVuZGVudCI+TU1JWC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI3LjMgU3ludGF4PC9oND4KKworPHA+VGhlIGFzc2VtYmx5IHN5bnRheCBpcyBzdXBwb3NlZCB0byBiZSB1cHdhcmQgY29tcGF0aWJsZSB3aXRoIHRoYXQKK2Rlc2NyaWJlZCBpbiBTZWN0aW9ucyAxLjMgYW5kIDEuNCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlRoZSBBcnQgb2YgQ29tcHV0ZXIKK1Byb2dyYW1taW5nLCBWb2x1bWUgMTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIERyYWZ0IHZlcnNpb25zIG9mIHRob3NlIGNoYXB0ZXJzIGFzIHdlbGwgYXMgb3RoZXIKK01NSVggaW5mb3JtYXRpb24gaXMgbG9jYXRlZCBhdAorPGEgbmFtZT0ibW1peHNpdGUiPjwvYT48YSBocmVmPSJodHRwOi8vd3d3LWNzLWZhY3VsdHkuc3RhbmZvcmQuZWR1L35rbnV0aC9tbWl4LW5ld3MuaHRtbCI+aHR0cDovL3d3dy1jcy1mYWN1bHR5LnN0YW5mb3JkLmVkdS9+a251dGgvbW1peC1uZXdzLmh0bWw8L2E+LiAKK01vc3QgY29kZSBleGFtcGxlcyBmcm9tIHRoZSBtbWl4YWwgcGFja2FnZSBsb2NhdGVkIHRoZXJlIHNob3VsZCB3b3JrCit1bm1vZGlmaWVkIHdoZW4gYXNzZW1ibGVkIGFuZCBsaW5rZWQgYXMgc2luZ2xlIGZpbGVzLCB3aXRoIGEgZmV3Citub3Rld29ydGh5IGV4Y2VwdGlvbnMgKHNlZSA8YSBocmVmPSJNTUlYXzAwMmRtbWl4YWwuaHRtbCNNTUlYXzAwMmRtbWl4YWwiPk1NSVgtbW1peGFsPC9hPikuCisKKyAgIDxwPkJlZm9yZSBhbiBpbnN0cnVjdGlvbiBpcyBlbWl0dGVkLCB0aGUgY3VycmVudCBsb2NhdGlvbiBpcyBhbGlnbmVkIHRvIHRoZQorbmV4dCBmb3VyLWJ5dGUgYm91bmRhcnkuICBJZiBhIGxhYmVsIGlzIGRlZmluZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKK2xpbmUsIGl0cyB2YWx1ZSB3aWxsIGJlIHRoZSBhbGlnbmVkIHZhbHVlLgorCisgICA8cD5JbiBhZGRpdGlvbiB0byB0aGUgdHJhZGl0aW9uYWwgaGV4LXByZWZpeCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhIGhleGFkZWNpbWFsIG51bWJlcgorY2FuIGFsc28gYmUgc3BlY2lmaWVkIGJ5IHRoZSBwcmVmaXggY2hhcmFjdGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+QWZ0ZXIgYWxsIG9wZXJhbmRzIHRvIGFuIE1NSVggaW5zdHJ1Y3Rpb24gb3IgZGlyZWN0aXZlIGhhdmUgYmVlbgorc3BlY2lmaWVkLCB0aGUgcmVzdCBvZiB0aGUgbGluZSBpcyBpZ25vcmVkLCB0cmVhdGVkIGFzIGEgY29tbWVudC4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik1NSVhfMDAyZENoYXJzLmh0bWwjTU1JWF8wMDJkQ2hhcnMiPk1NSVgtQ2hhcnM8L2E+OiAJCSAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNTUlYXzAwMmRTeW1ib2xzLmh0bWwjTU1JWF8wMDJkU3ltYm9scyI+TU1JWC1TeW1ib2xzPC9hPjogCQlTeW1ib2xzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJNTUlYXzAwMmRSZWdzLmh0bWwjTU1JWF8wMDJkUmVncyI+TU1JWC1SZWdzPC9hPjogCQkJUmVnaXN0ZXIgTmFtZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9Ik1NSVhfMDAyZFBzZXVkb3MuaHRtbCNNTUlYXzAwMmRQc2V1ZG9zIj5NTUlYLVBzZXVkb3M8L2E+OiAJCUFzc2VtYmxlciBEaXJlY3RpdmVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRieXRlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRieXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmMTJmNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZGJ5dGUuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9TU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVglMmRieXRlIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZGNvbnN0YW50cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkY29uc3RhbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3Njg4YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZGNvbnN0YW50cy5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1NTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWCUyZGNvbnN0YW50cyI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRncmVnLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRncmVnLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYTVjNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZGdyZWcuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9TU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVglMmRncmVnIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZGlzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRpcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyODkxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRpcy5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1NTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWCUyZGlzIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZGxvYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkbG9jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViMGFkYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZGxvYy5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1NTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWCUyZGxvYyI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRsb2NhbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkbG9jYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzlmMDkxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkbG9jYWwuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9TU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVglMmRsb2NhbCI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRtbWl4YWwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZG1taXhhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzN2M1YmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRtbWl4YWwuaHRtbApAQCAtMCwwICsxLDE0MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TU1JWC1tbWl4YWwgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1NSVhfMDAyZERlcGVuZGVudC5odG1sI01NSVhfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik1NSVgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTU1JWF8wMDJkU3ludGF4Lmh0bWwjTU1JWF8wMDJkU3ludGF4IiB0aXRsZT0iTU1JWC1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNTUlYLW1taXhhbCI+PC9hPgorPGEgbmFtZT0iTU1JWF8wMDJkbW1peGFsIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTU1JWF8wMDJkU3ludGF4Lmh0bWwjTU1JWF8wMDJkU3ludGF4Ij5NTUlYLVN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1NSVhfMDAyZERlcGVuZGVudC5odG1sI01NSVhfMDAyZERlcGVuZGVudCI+TU1JWC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI3LjQgRGlmZmVyZW5jZXMgdG8gPGNvZGU+bW1peGFsPC9jb2RlPjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1taXhhbC1kaWZmZXJlbmNlcy0xNDkzIj48L2E+PGEgbmFtZT0iaW5kZXgtZGlmZmVyZW5jZXNfMDAyYy1tbWl4YWwtMTQ5NCI+PC9hPgorVGhlIGJpbnV0aWxzIDxjb2RlPmFzPC9jb2RlPiBhbmQgPGNvZGU+bGQ8L2NvZGU+IGNvbWJpbmF0aW9uIGhhcyBhIGZldworZGlmZmVyZW5jZXMgaW4gZnVuY3Rpb24gY29tcGFyZWQgdG8gPGNvZGU+bW1peGFsPC9jb2RlPiAoc2VlIDxhIGhyZWY9Im1taXhzaXRlLmh0bWwjbW1peHNpdGUiPm1taXhzaXRlPC9hPikuCisKKyAgIDxwPlRoZSByZXBsYWNlbWVudCBvZiBhIHN5bWJvbCB3aXRoIGEgR1JFRy1hbGxvY2F0ZWQgcmVnaXN0ZXIKKyhzZWUgPGEgaHJlZj0iR1JFR18wMDJkYmFzZS5odG1sI0dSRUdfMDAyZGJhc2UiPkdSRUctYmFzZTwvYT4pIGlzIG5vdCBoYW5kbGVkIHRoZSBleGFjdGx5IHNhbWUgd2F5IGluCis8Y29kZT5hczwvY29kZT4gYXMgaW4gPGNvZGU+bW1peGFsPC9jb2RlPi4gIFRoaXMgaXMgYXBwYXJlbnQgaW4gdGhlCis8Y29kZT5tbWl4YWw8L2NvZGU+IGV4YW1wbGUgZmlsZSA8Y29kZT5pbm91dC5tbXM8L2NvZGU+LCB3aGVyZSBkaWZmZXJlbnQgcmVnaXN0ZXJzCit3aXRoIGRpZmZlcmVudCBvZmZzZXRzLCBldmVudHVhbGx5IHlpZWxkaW5nIHRoZSBzYW1lIGFkZHJlc3MsIGFyZSB1c2VkIGluCit0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24uICBUaGlzIHR5cGUgb2YgZGlmZmVyZW5jZSBzaG91bGQgaG93ZXZlciBub3QgYWZmZWN0Cit0aGUgZnVuY3Rpb24gb2YgYW55IHByb2dyYW0gdW5sZXNzIGl0IGhhcyBzcGVjaWZpYyBhc3N1bXB0aW9ucyBhYm91dCB0aGUKK2FsbG9jYXRlZCByZWdpc3RlciBudW1iZXIuCisKKyAgIDxwPkxpbmUgbnVtYmVycyAoaW4gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW1vPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9iamVjdCBmb3JtYXQpIGFyZSBjdXJyZW50bHkgbm90CitzdXBwb3J0ZWQuCisKKyAgIDxwPkV4cHJlc3Npb24gb3BlcmF0b3IgcHJlY2VkZW5jZSBpcyBub3QgdGhhdCBvZiBtbWl4YWw6IG9wZXJhdG9yIHByZWNlZGVuY2UKK2lzIHRoYXQgb2YgdGhlIEMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuICBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZQorcGFyZW50aGVzZXMgdG8gZXhwbGljaXRseSBzcGVjaWZ5IHdhbnRlZCBvcGVyYXRvciBwcmVjZWRlbmNlIHdoZW5ldmVyIG1vcmUKK3RoYW4gb25lIHR5cGUgb2Ygb3BlcmF0b3JzIGFyZSB1c2VkLgorCisgICA8cD5UaGUgc2VyaWFsaXplIHVuYXJ5IG9wZXJhdG9yIDxjb2RlPiZhbXA7PC9jb2RlPiwgdGhlIGZyYWN0aW9uYWwgZGl2aXNpb24gb3BlcmF0b3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ly88L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZSBsb2dpY2FsIG5vdCBvcGVyYXRvciA8Y29kZT4hPC9jb2RlPiBhbmQgdGhlIG1vZHVsdXMgb3BlcmF0b3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgbm90IGF2YWlsYWJsZS4KKworICAgPHA+U3ltYm9scyBhcmUgbm90IGdsb2JhbCBieSBkZWZhdWx0LCB1bmxlc3MgdGhlIG9wdGlvbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWdsb2JhbGl6ZS1zeW1ib2xzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHBhc3NlZC4gIFVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZ2xvYmFsPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSB0bworZ2xvYmFsaXplIHN5bWJvbHMgKHNlZSA8YSBocmVmPSJHbG9iYWwuaHRtbCNHbG9iYWwiPkdsb2JhbDwvYT4pLgorCisgICA8cD5PcGVyYW5kIHN5bnRheCBpcyBhIGJpdCBzdHJpY3RlciB3aXRoIDxjb2RlPmFzPC9jb2RlPiB0aGFuCis8Y29kZT5tbWl4YWw8L2NvZGU+LiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4ndCBzYXkgPGNvZGU+YWRkdSAxLDIsMzwvY29kZT4sIGluc3RlYWQgeW91CittdXN0IHdyaXRlIDxjb2RlPmFkZHUgJDEsJDIsMzwvY29kZT4uCisKKyAgIDxwPllvdSBjYW4ndCBMT0MgdG8gYSBsb3dlciBhZGRyZXNzIHRoYW4gdGhvc2UgYWxyZWFkeSB2aXNpdGVkCisoaS5lLiwgJmxkcXVvO2JhY2t3YXJkcyZyZHF1bzspLgorCisgICA8cD5BIExPQyBkaXJlY3RpdmUgbXVzdCBjb21lIGJlZm9yZSBhbnkgZW1pdHRlZCBjb2RlLgorCisgICA8cD5QcmVkZWZpbmVkIHN5bWJvbHMgYXJlIHZpc2libGUgYXMgZmlsZS1sb2NhbCBzeW1ib2xzIGFmdGVyIHVzZS4gIChJbiB0aGUKK0VMRiBmaWxlLCB0aGF0IGlzJm1kYXNoO3RoZSBsaW5rZWQgbW1vIGZpbGUgaGFzIG5vIG5vdGlvbiBvZiBhIGZpbGUtbG9jYWwKK3N5bWJvbC4pCisKKyAgIDxwPlNvbWUgbWFwcGluZyBvZiBjb25zdGFudCBleHByZXNzaW9ucyB0byBzZWN0aW9ucyBpbiBMT0MgZXhwcmVzc2lvbnMgaXMKK2F0dGVtcHRlZCwgYnV0IHRoYXQgZnVuY3Rpb25hbGl0eSBpcyBlYXNpbHkgY29uZnVzZWQgYW5kIHNob3VsZCBiZSBhdm9pZGVkCit1bmxlc3MgY29tcGF0aWJpbGl0eSB3aXRoIDxjb2RlPm1taXhhbDwvY29kZT4gaXMgcmVxdWlyZWQuICBBIExPQyBleHByZXNzaW9uIHRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4MjAwMDAwMDAwMDAwMDAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciBoaWdoZXIsIG1hcHMgdG8gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiBhbmQKK2xvd2VyIGFkZHJlc3NlcyBtYXAgdG8gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiAoc2VlIDxhIGhyZWY9Ik1NSVhfMDAyZGxvYy5odG1sI01NSVhfMDAyZGxvYyI+TU1JWC1sb2M8L2E+KS4KKworICAgPHA+VGhlIGNvZGUgYW5kIGRhdGEgYXJlYXMgYXJlIGVhY2ggY29udGlndW91cy4gIFNwYXJzZSBwcm9ncmFtcyB3aXRoCitmYXItYXdheSBMT0MgZGlyZWN0aXZlcyB3aWxsIHRha2UgdXAgdGhlIHNhbWUgYW1vdW50IG9mIHNwYWNlIGFzIGEKK2NvbnRpZ3VvdXMgcHJvZ3JhbSB3aXRoIHplcm9zIGZpbGxlZCBpbiB0aGUgZ2FwcyBiZXR3ZWVuIHRoZSBMT0MKK2RpcmVjdGl2ZXMuICBJZiB5b3UgbmVlZCBzcGFyc2UgcHJvZ3JhbXMsIHlvdSBtaWdodCB0cnkgYW5kIGdldCB0aGUgd2FudGVkCitlZmZlY3Qgd2l0aCBhIGxpbmtlciBzY3JpcHQgYW5kIHNwbGl0dGluZyB1cCB0aGUgY29kZSBwYXJ0cyBpbnRvIHNlY3Rpb25zCisoc2VlIDxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj5TZWN0aW9uPC9hPikuICBBc3NlbWJseSBjb2RlIGZvciB0aGlzLCB0byBiZSBjb21wYXRpYmxlIHdpdGgKKzxjb2RlPm1taXhhbDwvY29kZT4sIHdvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2U6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIC5pZiAwCisgICAgICBMT0MgYXdheV9leHByZXNzaW9uCisgICAgICAuZWxzZQorICAgICAgLnNlY3Rpb24gYXdheSwiYXgiCisgICAgICAuZmkKKzwvcHJlPgorICAgPHA+PGNvZGU+YXM8L2NvZGU+IHdpbGwgbm90IGV4ZWN1dGUgdGhlIExPQyBkaXJlY3RpdmUgYW5kIDxjb2RlPm1taXhhbDwvY29kZT4KK2lnbm9yZXMgdGhlIGxpbmVzIHdpdGggPGNvZGU+LjwvY29kZT4uICBUaGlzIGNvbnN0cnVjdCBjYW4gYmUgdXNlZCBnZW5lcmFsbHkgdG8KK2hlbHAgY29tcGF0aWJpbGl0eS4KKworICAgPHA+U3ltYm9scyBjYW4ndCBiZSBkZWZpbmVkIHR3aWNlJm5kYXNoO25vdCBldmVuIHRvIHRoZSBzYW1lIHZhbHVlLgorCisgICA8cD5JbnN0cnVjdGlvbiBtbmVtb25pY3MgYXJlIHJlY29nbml6ZWQgY2FzZS1pbnNlbnNpdGl2ZSwgdGhvdWdoIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5JUzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HUkVHPC9zcGFuPjwvc2FtcD4mcnNxdW87IHBzZXVkby1vcGVyYXRpb25zIG11c3QgYmUgc3BlY2lmaWVkIGluCit1cHBlci1jYXNlIGNoYXJhY3RlcnMuCisKKyAgIDxwPlRoZXJlJ3Mgbm8gdW5pY29kZSBzdXBwb3J0LgorCisgICA8cD5UaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBwcm9ncmFtcyBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1taXgudGFyLmd6PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhdmFpbGFibGUgYXQKKzxhIGhyZWY9Imh0dHA6Ly93d3ctY3MtZmFjdWx0eS5zdGFuZm9yZC5lZHUvfmtudXRoL21taXgtbmV3cy5odG1sIj5odHRwOi8vd3d3LWNzLWZhY3VsdHkuc3RhbmZvcmQuZWR1L35rbnV0aC9tbWl4LW5ld3MuaHRtbDwvYT4sIGxhc3QKK2NoZWNrZWQgd2l0aCB0aGUgdmVyc2lvbiBkYXRlZCAyMDAxLTA4LTI1IChtZDVzdW0KK2MzOTM0NzBjZmM4NmZhYzA0MDQ4N2QyMmQyYmYwMTcyKSB0aGF0IGFzc2VtYmxlIHdpdGggPGNvZGU+bW1peGFsPC9jb2RlPiBidXQgZG8KK25vdCBhc3NlbWJsZSB3aXRoIDxjb2RlPmFzPC9jb2RlPjoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+c2lsbHkubW1zPC9jb2RlPjxkZD5MT0MgdG8gYSBwcmV2aW91cyBhZGRyZXNzLiAKKzxicj48ZHQ+PGNvZGU+c2ltLm1tczwvY29kZT48ZGQ+UmVkZWZpbmVzIHN5bWJvbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkRvbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPGJyPjxkdD48Y29kZT50ZXN0Lm1tczwvY29kZT48ZGQ+VXNlcyB0aGUgc2VyaWFsIG9wZXJhdG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JmFtcDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC9kbD4KKworPCEtLSBDb3B5cmlnaHQgMjAwMiwgMjAwNCwgMjAwNSwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZHByZWZpeC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTU1JWF8wMDJkcHJlZml4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjMGJkMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZHByZWZpeC5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1NTUlYXzAwMmRQc2V1ZG9zLmh0bWwjTU1JWCUyZHByZWZpeCI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRzcGVjLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NTUlYXzAwMmRzcGVjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkZWE1MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01NSVhfMDAyZHNwZWMuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9TU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVglMmRzcGVjIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01SSS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVJJLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5NDYxYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01SSS5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1SSSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTWFjcm8uaHRtbCNNYWNybyIgdGl0bGU9Ik1hY3JvIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTm9hbHRtYWNyby5odG1sI05vYWx0bWFjcm8iIHRpdGxlPSJOb2FsdG1hY3JvIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTVJJIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik5vYWx0bWFjcm8uaHRtbCNOb2FsdG1hY3JvIj5Ob2FsdG1hY3JvPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTWFjcm8uaHRtbCNNYWNybyI+TWFjcm88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuODAgPGNvZGU+Lm1yaSA8L2NvZGU+PHZhcj52YWw8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym1yaV8wMDdkLWRpcmVjdGl2ZS00MDkiPjwvYT48YSBuYW1lPSJpbmRleC1NUkktbW9kZV8wMDJjLXRlbXBvcmFyaWx5LTQxMCI+PC9hPklmIDx2YXI+dmFsPC92YXI+IGlzIG5vbi16ZXJvLCB0aGlzIHRlbGxzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRvIGVudGVyIE1SSSBtb2RlLiAgSWYKKzx2YXI+dmFsPC92YXI+IGlzIHplcm8sIHRoaXMgdGVsbHMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gdG8gZXhpdCBNUkkgbW9kZS4gIFRoaXMgY2hhbmdlCithZmZlY3RzIGNvZGUgYXNzZW1ibGVkIHVudGlsIHRoZSBuZXh0IDxjb2RlPi5tcmk8L2NvZGU+IGRpcmVjdGl2ZSwgb3IgdW50aWwgdGhlIGVuZAorb2YgdGhlIGZpbGUuICBTZWUgPGEgaHJlZj0iTS5odG1sI00iPk1SSSBtb2RlPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwLURpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1EaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzY2JmZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TVNQNDMwIERpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNU1A0MzAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTVNQNDMwLUZsb2F0aW5nLVBvaW50Lmh0bWwjTVNQNDMwLUZsb2F0aW5nLVBvaW50IiB0aXRsZT0iTVNQNDMwIEZsb2F0aW5nIFBvaW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTVNQNDMwLU9wY29kZXMuaHRtbCNNU1A0MzAtT3Bjb2RlcyIgdGl0bGU9Ik1TUDQzMCBPcGNvZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTVNQNDMwLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTVNQNDMwLU9wY29kZXMuaHRtbCNNU1A0MzAtT3Bjb2RlcyI+TVNQNDMwIE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNU1A0MzAtRmxvYXRpbmctUG9pbnQuaHRtbCNNU1A0MzAtRmxvYXRpbmctUG9pbnQiPk1TUDQzMCBGbG9hdGluZyBQb2ludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiPk1TUDQzMC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI4LjQgTVNQIDQzMCBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1NU1AtNDMwLTE1MTQiPjwvYT48YSBuYW1lPSJpbmRleC1NU1AtNDMwLW1hY2hpbmUtZGlyZWN0aXZlcy0xNTE1Ij48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmaWxlXzAwN2QtZGlyZWN0aXZlXzAwMmMtTVNQLTQzMC0xNTE2Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi5maWxlPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBpcyBpZ25vcmVkOyBpdCBpcyBhY2NlcHRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyCitNU1AgNDMwIGFzc2VtYmxlcnMuCisKKyAgICAgPGJsb2NrcXVvdGU+Cis8ZW0+V2FybmluZzo8L2VtPiBpbiBvdGhlciB2ZXJzaW9ucyBvZiB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGFzc2VtYmxlciwgPGNvZGU+LmZpbGU8L2NvZGU+IGlzCit1c2VkIGZvciB0aGUgZGlyZWN0aXZlIGNhbGxlZCA8Y29kZT4uYXBwLWZpbGU8L2NvZGU+IGluIHRoZSBNU1AgNDMwIHN1cHBvcnQuIAorPC9ibG9ja3F1b3RlPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGluZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLU1TUC00MzAtMTUxNyI+PC9hPjxicj48ZHQ+PGNvZGU+LmxpbmU8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIGlzIGlnbm9yZWQ7IGl0IGlzIGFjY2VwdGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIKK01TUCA0MzAgYXNzZW1ibGVycy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNlY3RfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NU1AtNDMwLTE1MTgiPjwvYT48YnI+PGR0Pjxjb2RlPi5hcmNoPC9jb2RlPjxkZD5DdXJyZW50bHkgdGhpcyBkaXJlY3RpdmUgaXMgaWdub3JlZDsgaXQgaXMgYWNjZXB0ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlcgorTVNQIDQzMCBhc3NlbWJsZXJzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicHJvZmlsZXJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1NU1AtNDMwLTE1MTkiPjwvYT48YnI+PGR0Pjxjb2RlPi5wcm9maWxlcjwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgaW5zdHJ1Y3RzIGFzc2VtYmxlciB0byBhZGQgbmV3IHByb2ZpbGUgZW50cnkgdG8gdGhlIG9iamVjdCBmaWxlLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzAtRmxvYXRpbmctUG9pbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1GbG9hdGluZy1Qb2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYTg1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzAtRmxvYXRpbmctUG9pbnQuaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NU1A0MzAgRmxvYXRpbmcgUG9pbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNU1A0MzAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTVNQNDMwLVN5bnRheC5odG1sI01TUDQzMC1TeW50YXgiIHRpdGxlPSJNU1A0MzAgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTVNQNDMwLURpcmVjdGl2ZXMuaHRtbCNNU1A0MzAtRGlyZWN0aXZlcyIgdGl0bGU9Ik1TUDQzMCBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTVNQNDMwLUZsb2F0aW5nLVBvaW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1TUDQzMC1EaXJlY3RpdmVzLmh0bWwjTVNQNDMwLURpcmVjdGl2ZXMiPk1TUDQzMCBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTVNQNDMwLVN5bnRheC5odG1sI01TUDQzMC1TeW50YXgiPk1TUDQzMCBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNU1A0MzBfMDAyZERlcGVuZGVudC5odG1sI01TUDQzMF8wMDJkRGVwZW5kZW50Ij5NU1A0MzAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yOC4zIEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1NU1AtNDMwLV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktMTUxMiI+PC9hPjxhIG5hbWU9ImluZGV4LU1TUC00MzAtZmxvYXRpbmctcG9pbnQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0xNTEzIj48L2E+VGhlIE1TUCA0MzAgZmFtaWx5IHVzZXMgPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPiAzMi1iaXQgZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwLU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1PcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzNjBmOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1PcGNvZGVzLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TVNQNDMwIE9wY29kZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNU1A0MzAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTVNQNDMwLURpcmVjdGl2ZXMuaHRtbCNNU1A0MzAtRGlyZWN0aXZlcyIgdGl0bGU9Ik1TUDQzMCBEaXJlY3RpdmVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTVNQNDMwLVByb2ZpbGluZy1DYXBhYmlsaXR5Lmh0bWwjTVNQNDMwLVByb2ZpbGluZy1DYXBhYmlsaXR5IiB0aXRsZT0iTVNQNDMwIFByb2ZpbGluZyBDYXBhYmlsaXR5Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTVNQNDMwLU9wY29kZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTVNQNDMwLVByb2ZpbGluZy1DYXBhYmlsaXR5Lmh0bWwjTVNQNDMwLVByb2ZpbGluZy1DYXBhYmlsaXR5Ij5NU1A0MzAgUHJvZmlsaW5nIENhcGFiaWxpdHk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNU1A0MzAtRGlyZWN0aXZlcy5odG1sI01TUDQzMC1EaXJlY3RpdmVzIj5NU1A0MzAgRGlyZWN0aXZlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiPk1TUDQzMC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI4LjUgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1TUC00MzAtb3Bjb2Rlcy0xNTIwIj48L2E+PGEgbmFtZT0iaW5kZXgtb3Bjb2Rlcy1mb3ItTVNQLTQzMC0xNTIxIj48L2E+PGNvZGU+YXM8L2NvZGU+IGltcGxlbWVudHMgYWxsIHRoZSBzdGFuZGFyZCBNU1AgNDMwIG9wY29kZXMuICBObworYWRkaXRpb25hbCBwc2V1ZG8taW5zdHJ1Y3Rpb25zIGFyZSBuZWVkZWQgb24gdGhpcyBmYW1pbHkuCisKKyAgIDxwPkZvciBpbmZvcm1hdGlvbiBvbiB0aGUgNDMwIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gc2V0LCBzZWUgPGNpdGU+TVNQNDMwCitVc2VyJ3MgTWFudWFsLCBkb2N1bWVudCBzbGF1MDQ5ZDwvY2l0ZT4sIFRleGFzIEluc3RydW1lbnQsIEluYy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTljNTA4NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TVNQNDMwIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNU1A0MzAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTVNQNDMwLVN5bnRheC5odG1sI01TUDQzMC1TeW50YXgiIHRpdGxlPSJNU1A0MzAgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTVNQNDMwLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTVNQNDMwLVN5bnRheC5odG1sI01TUDQzMC1TeW50YXgiPk1TUDQzMCBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNU1A0MzBfMDAyZERlcGVuZGVudC5odG1sI01TUDQzMF8wMDJkRGVwZW5kZW50Ij5NU1A0MzAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yOC4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NU1AtNDMwLW9wdGlvbnMtXzAwMjhub25lXzAwMjktMTQ5NyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtZm9yLU1TUDQzMC1fMDAyOG5vbmVfMDAyOS0xNDk4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48Y29kZT4tbTwvY29kZT48ZGQ+c2VsZWN0IHRoZSBtcHUgYXJjaC4gQ3VycmVudGx5IGhhcyBubyBlZmZlY3QuIAorPGJyPjxkdD48Y29kZT4tbVA8L2NvZGU+PGRkPmVuYWJsZXMgcG9seW1vcnBoIGluc3RydWN0aW9ucyBoYW5kbGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1RPC9jb2RlPjxkZD5lbmFibGVzIHJlbGF4YXRpb24gYXQgYXNzZW1ibHkgdGltZS4gREFOR0VST1VTIQorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzAtUHJvZmlsaW5nLUNhcGFiaWxpdHkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1Qcm9maWxpbmctQ2FwYWJpbGl0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NjEyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzAtUHJvZmlsaW5nLUNhcGFiaWxpdHkuaHRtbApAQCAtMCwwICsxLDEyMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TVNQNDMwIFByb2ZpbGluZyBDYXBhYmlsaXR5IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNU1A0MzBfMDAyZERlcGVuZGVudC5odG1sI01TUDQzMF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTVNQNDMwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1TUDQzMC1PcGNvZGVzLmh0bWwjTVNQNDMwLU9wY29kZXMiIHRpdGxlPSJNU1A0MzAgT3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1TUDQzMC1Qcm9maWxpbmctQ2FwYWJpbGl0eSI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1TUDQzMC1PcGNvZGVzLmh0bWwjTVNQNDMwLU9wY29kZXMiPk1TUDQzMCBPcGNvZGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTVNQNDMwXzAwMmREZXBlbmRlbnQuaHRtbCNNU1A0MzBfMDAyZERlcGVuZGVudCI+TVNQNDMwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjguNiBQcm9maWxpbmcgQ2FwYWJpbGl0eTwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1TUC00MzAtcHJvZmlsaW5nLWNhcGFiaWxpdHktMTUyMiI+PC9hPjxhIG5hbWU9ImluZGV4LXByb2ZpbGluZy1jYXBhYmlsaXR5LWZvci1NU1AtNDMwLTE1MjMiPjwvYT5JdCBpcyBhIHBlcmZvcm1hbmNlIGhpdCB0byB1c2UgZ2NjJ3MgcHJvZmlsaW5nIGFwcHJvYWNoIGZvciB0aGlzIHRpbnkgdGFyZ2V0LiAKK0V2ZW4gbW9yZSAmbmRhc2g7IGp0YWcgaGFyZHdhcmUgZmFjaWxpdHkgZG9lcyBub3QgcGVyZm9ybSBhbnkgcHJvZmlsaW5nIGZ1bmN0aW9ucy4gCitIb3dldmVyIHdlJ3ZlIGdvdCBnZGIncyBidWlsdC1pbiBzaW11bGF0b3Igd2hlcmUgd2UgY2FuIGRvIGFueXRoaW5nLgorCisgICA8cD5XZSBkZWZpbmUgbmV3IHNlY3Rpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ucHJvZmlsZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hpY2ggaG9sZHMgYWxsIHByb2ZpbGluZyBpbmZvcm1hdGlvbi4gCitXZSBkZWZpbmUgbmV3IHBzZXVkbyBvcGVyYXRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ucHJvZmlsZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hpY2ggd2lsbCBpbnN0cnVjdCBhc3NlbWJsZXIgdG8KK2FkZCBuZXcgcHJvZmlsZSBlbnRyeSB0byB0aGUgb2JqZWN0IGZpbGUuIFByb2ZpbGUgc2hvdWxkIHRha2UgcGxhY2UgYXQgdGhlCitwcmVzZW50IGFkZHJlc3MuCisKKyAgIDxwPlBzZXVkbyBvcGVyYXRpb24gZm9ybWF0OgorCisgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5wcm9maWxlciBmbGFncyxmdW5jdGlvbl90b19wcm9maWxlIFssIGN5Y2xlX2NvcnJlY3RvciwgZXh0cmFdPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgIDxwPndoZXJlOgorCisgICAgIDxkbD4KKyAgICAgICAgICA8ZGw+CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZsYWdzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOgorCisgICAgICAgICAgPGR0Pjxjb2RlPnM8L2NvZGU+PGRkPmZ1bmN0aW9uIGVudHJ5Cis8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPmZ1bmN0aW9uIGV4aXQKKzxicj48ZHQ+PGNvZGU+aTwvY29kZT48ZGQ+ZnVuY3Rpb24gaXMgaW4gaW5pdCBzZWN0aW9uCis8YnI+PGR0Pjxjb2RlPmY8L2NvZGU+PGRkPmZ1bmN0aW9uIGlzIGluIGZpbmkgc2VjdGlvbgorPGJyPjxkdD48Y29kZT5sPC9jb2RlPjxkZD5saWJyYXJ5IGNhbGwKKzxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+bGliYyBzdGFuZGFyZCBjYWxsCis8YnI+PGR0Pjxjb2RlPmQ8L2NvZGU+PGRkPnN0YWNrIHZhbHVlIGRlbWFuZAorPGJyPjxkdD48Y29kZT5JPC9jb2RlPjxkZD5pbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCis8YnI+PGR0Pjxjb2RlPlA8L2NvZGU+PGRkPnByb2xvZ3VlIHN0YXJ0Cis8YnI+PGR0Pjxjb2RlPnA8L2NvZGU+PGRkPnByb2xvZ3VlIGVuZAorPGJyPjxkdD48Y29kZT5FPC9jb2RlPjxkZD5lcGlsb2d1ZSBzdGFydAorPGJyPjxkdD48Y29kZT5lPC9jb2RlPjxkZD5lcGlsb2d1ZSBlbmQKKzxicj48ZHQ+PGNvZGU+ajwvY29kZT48ZGQ+bG9uZyBqdW1wIC8gc2psaiB1bndpbmQKKzxicj48ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+YW4gYXJiaXRyYXJ5IGNvZGUgZnJhZ21lbnQKKzxicj48ZHQ+PGNvZGU+dDwvY29kZT48ZGQ+ZXh0cmEgcGFyYW1ldGVyIHNhdmVkIChhIGNvbnN0YW50IHZhbHVlIGxpa2UgZnJhbWUgc2l6ZSkKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT5mdW5jdGlvbl90b19wcm9maWxlPC9jb2RlPjxkZD5hIGZ1bmN0aW9uIGFkZHJlc3MKKzxicj48ZHQ+PGNvZGU+Y3ljbGVfY29ycmVjdG9yPC9jb2RlPjxkZD5hIHZhbHVlIHdoaWNoIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY3ljbGUgY291bnRlciwgemVybyBpZiBvbWl0dGVkLiAKKzxicj48ZHQ+PGNvZGU+ZXh0cmE8L2NvZGU+PGRkPmFueSBleHRyYSBwYXJhbWV0ZXIsIHplcm8gaWYgb21pdHRlZC4KKworICAgPC9kbD4KKworICAgPHA+Rm9yIGV4YW1wbGU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLmdsb2JhbCBmeHgKKyAgICAgLnR5cGUgZnh4LEBmdW5jdGlvbgorICAgICBmeHg6CisgICAgIC5MRnJhbWVPZmZzZXRfZnh4PTB4MDgKKyAgICAgLnByb2ZpbGVyICJzY2RQIiwgZnh4ICAgICA7IGZ1bmN0aW9uIGVudHJ5LgorICAgICAJCQkgIDsgd2UgYWxzbyBkZW1hbmQgc3RhY2sgdmFsdWUgdG8gYmUgc2F2ZWQKKyAgICAgICBwdXNoIHIxMQorICAgICAgIHB1c2ggcjEwCisgICAgICAgcHVzaCByOQorICAgICAgIHB1c2ggcjgKKyAgICAgLnByb2ZpbGVyICJjZHB0IixmeHgsMCwgLkxGcmFtZU9mZnNldF9meHggIDsgY2hlY2sgc3RhY2sgdmFsdWUgYXQgdGhpcyBwb2ludAorICAgICAJCQkJCSAgOyAodGhpcyBpcyBhIHByb2xvZ3VlIGVuZCkKKyAgICAgCQkJCQkgIDsgbm90ZSwgdGhhdCBzcGFyZSB2YXIgZmlsbGVkIHdpdGgKKyAgICAgCQkJCQkgIDsgdGhlIGZhcm1lIHNpemUKKyAgICAgICBtb3YgcjE1LHI4CisgICAgIC4uLgorICAgICAucHJvZmlsZXIgY2RFLGZ4eCAgICAgICAgIDsgY2hlY2sgc3RhY2sKKyAgICAgICBwb3AgcjgKKyAgICAgICBwb3AgcjkKKyAgICAgICBwb3AgcjEwCisgICAgICAgcG9wIHIxMQorICAgICAucHJvZmlsZXIgeGNkZSxmeHgsMyAgICAgIDsgZXhpdCBhZGRzIDMgdG8gdGhlIGN5Y2xlIGNvdW50ZXIKKyAgICAgICByZXQgICAgICAgICAgICAgICAgICAgICA7IGNhdXNlICdyZXQnIGluc24gdGFrZXMgMyBjeWNsZXMKKzwvcHJlPgorICAgPCEtLSBDb3B5cmlnaHQgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMjAwMiAtLT4KKzwhLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzAtU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzAtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxMTJjMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMC1TeW50YXguaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NU1A0MzAgU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNU1A0MzBfMDAyZERlcGVuZGVudC5odG1sI01TUDQzMF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTVNQNDMwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1TUDQzMC1PcHRpb25zLmh0bWwjTVNQNDMwLU9wdGlvbnMiIHRpdGxlPSJNU1A0MzAgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1TUDQzMC1GbG9hdGluZy1Qb2ludC5odG1sI01TUDQzMC1GbG9hdGluZy1Qb2ludCIgdGl0bGU9Ik1TUDQzMCBGbG9hdGluZyBQb2ludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1TUDQzMC1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTVNQNDMwLUZsb2F0aW5nLVBvaW50Lmh0bWwjTVNQNDMwLUZsb2F0aW5nLVBvaW50Ij5NU1A0MzAgRmxvYXRpbmcgUG9pbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNU1A0MzAtT3B0aW9ucy5odG1sI01TUDQzMC1PcHRpb25zIj5NU1A0MzAgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1TUDQzMF8wMDJkRGVwZW5kZW50Lmh0bWwjTVNQNDMwXzAwMmREZXBlbmRlbnQiPk1TUDQzMC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI4LjIgU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik1TUDQzMF8wMDJkTWFjcm9zLmh0bWwjTVNQNDMwXzAwMmRNYWNyb3MiPk1TUDQzMC1NYWNyb3M8L2E+OiAJCU1hY3JvcworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI01TUDQzMF8wMDJkQ2hhcnMiPk1TUDQzMC1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ik1TUDQzMF8wMDJkUmVncy5odG1sI01TUDQzMF8wMDJkUmVncyI+TVNQNDMwLVJlZ3M8L2E+OiAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJNU1A0MzBfMDAyZEV4dC5odG1sI01TUDQzMF8wMDJkRXh0Ij5NU1A0MzAtRXh0PC9hPjogCQkJQXNzZW1ibGVyIEV4dGVuc2lvbnMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMF8wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMF8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWViN2VjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1TUDQzMC1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTVNQNDMwLVN5bnRheC5odG1sI01TUDQzMC1TeW50YXgiIHRpdGxlPSJNU1A0MzAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTVNQNDMwXzAwMmRNYWNyb3MuaHRtbCNNU1A0MzBfMDAyZE1hY3JvcyIgdGl0bGU9Ik1TUDQzMC1NYWNyb3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNU1A0MzBfMDAyZFJlZ3MuaHRtbCNNU1A0MzBfMDAyZFJlZ3MiIHRpdGxlPSJNU1A0MzAtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1TUDQzMC1DaGFycyI+PC9hPgorPGEgbmFtZT0iTVNQNDMwXzAwMmRDaGFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNU1A0MzBfMDAyZFJlZ3MuaHRtbCNNU1A0MzBfMDAyZFJlZ3MiPk1TUDQzMC1SZWdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTVNQNDMwXzAwMmRNYWNyb3MuaHRtbCNNU1A0MzBfMDAyZE1hY3JvcyI+TVNQNDMwLU1hY3JvczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1TUDQzMC1TeW50YXguaHRtbCNNU1A0MzAtU3ludGF4Ij5NU1A0MzAgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4yOC4yLjIgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLU1TUC00MzAtMTUwMSI+PC9hPjxhIG5hbWU9ImluZGV4LU1TUC00MzAtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNTAyIj48L2E+QSBzZW1pY29sb24gKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOykgYXBwZWFyaW5nIGFueXdoZXJlIG9uIGEgbGluZSBzdGFydHMgYSBjb21tZW50Cit0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGF0IGxpbmUuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgdGhlbiB0aGUgd2hvbGUKK2xpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpdCBjYW4gYWxzbyBiZSBhIGxvZ2ljYWwgbGluZSBudW1iZXIKK2RpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IgY29udHJvbCBjb21tYW5kCisoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtTVNQLTQzMC0xNTAzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLU1TUC00MzAtMTUwNCI+PC9hPjxhIG5hbWU9ImluZGV4LU1TUC00MzAtbGluZS1zZXBhcmF0b3ItMTUwNSI+PC9hPk11bHRpcGxlIHN0YXRlbWVudHMgY2FuIGFwcGVhciBvbiB0aGUgc2FtZSBsaW5lIHByb3ZpZGVkIHRoYXQgdGhleSBhcmUKK3NlcGFyYXRlZCBieSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj57PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3Rlci4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtaWRlbnRpZmllcnNfMDAyYy1NU1AtNDMwLTE1MDYiPjwvYT48YSBuYW1lPSJpbmRleC1NU1AtNDMwLWlkZW50aWZpZXJzLTE1MDciPjwvYT5UaGUgY2hhcmFjdGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBqdW1wIGluc3RydWN0aW9ucyBpbmRpY2F0ZXMgY3VycmVudCBsb2NhdGlvbiBhbmQKK2ltcGxlbWVudGVkIG9ubHkgZm9yIFRJIHN5bnRheCBjb21wYXRpYmlsaXR5LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzBfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWEyNDdlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NU1A0MzAtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNTUlYXzAwMmREZXBlbmRlbnQuaHRtbCNNTUlYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJNTUlYLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik5TMzJLXzAwMmREZXBlbmRlbnQuaHRtbCNOUzMyS18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTlMzMkstRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTVNQNDMwLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iTVNQNDMwXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTlMzMktfMDAyZERlcGVuZGVudC5odG1sI05TMzJLXzAwMmREZXBlbmRlbnQiPk5TMzJLLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1NSVhfMDAyZERlcGVuZGVudC5odG1sI01NSVhfMDAyZERlcGVuZGVudCI+TU1JWC1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMjggTVNQIDQzMCBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1NU1AtNDMwLXN1cHBvcnQtMTQ5NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdDQzMC1zdXBwb3J0LTE0OTYiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik1TUDQzMC1PcHRpb25zLmh0bWwjTVNQNDMwLU9wdGlvbnMiPk1TUDQzMCBPcHRpb25zPC9hPjogICAgICAgICAgICAgICBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNU1A0MzAtU3ludGF4Lmh0bWwjTVNQNDMwLVN5bnRheCI+TVNQNDMwIFN5bnRheDwvYT46ICAgICAgICAgICAgICAgIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iTVNQNDMwLUZsb2F0aW5nLVBvaW50Lmh0bWwjTVNQNDMwLUZsb2F0aW5nLVBvaW50Ij5NU1A0MzAgRmxvYXRpbmcgUG9pbnQ8L2E+OiAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9Ik1TUDQzMC1EaXJlY3RpdmVzLmh0bWwjTVNQNDMwLURpcmVjdGl2ZXMiPk1TUDQzMCBEaXJlY3RpdmVzPC9hPjogICAgICAgICAgICBNU1AgNDMwIE1hY2hpbmUgRGlyZWN0aXZlcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iTVNQNDMwLU9wY29kZXMuaHRtbCNNU1A0MzAtT3Bjb2RlcyI+TVNQNDMwIE9wY29kZXM8L2E+OiAgICAgICAgICAgICAgIE9wY29kZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9Ik1TUDQzMC1Qcm9maWxpbmctQ2FwYWJpbGl0eS5odG1sI01TUDQzMC1Qcm9maWxpbmctQ2FwYWJpbGl0eSI+TVNQNDMwIFByb2ZpbGluZyBDYXBhYmlsaXR5PC9hPjogCVByb2ZpbGluZyBDYXBhYmlsaXR5Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzBfMDAyZEV4dC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwXzAwMmRFeHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M5MGJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwXzAwMmRFeHQuaHRtbApAQCAtMCwwICsxLDk3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NU1A0MzAtRXh0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNU1A0MzAtU3ludGF4Lmh0bWwjTVNQNDMwLVN5bnRheCIgdGl0bGU9Ik1TUDQzMCBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNU1A0MzBfMDAyZFJlZ3MuaHRtbCNNU1A0MzBfMDAyZFJlZ3MiIHRpdGxlPSJNU1A0MzAtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1TUDQzMC1FeHQiPjwvYT4KKzxhIG5hbWU9Ik1TUDQzMF8wMDJkRXh0Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTVNQNDMwXzAwMmRSZWdzLmh0bWwjTVNQNDMwXzAwMmRSZWdzIj5NU1A0MzAtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1TUDQzMC1TeW50YXguaHRtbCNNU1A0MzAtU3ludGF4Ij5NU1A0MzAgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4yOC4yLjQgQXNzZW1ibGVyIEV4dGVuc2lvbnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1NU1A0MzAtQXNzZW1ibGVyLUV4dGVuc2lvbnMtMTUxMSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+QHJOPC9jb2RlPjxkZD5BcyBkZXN0aW5hdGlvbiBvcGVyYW5kIGJlaW5nIHRyZWF0ZWQgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wKHJuKTwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGNvZGU+MChyTik8L2NvZGU+PGRkPkFzIHNvdXJjZSBvcGVyYW5kIGJlaW5nIHRyZWF0ZWQgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5Acm48L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8YnI+PGR0Pjxjb2RlPmpDT05EICtOPC9jb2RlPjxkZD5Ta2lwcyBuZXh0IE4gYnl0ZXMgZm9sbG93ZWQgYnkganVtcCBpbnN0cnVjdGlvbiBhbmQgZXF1aXZhbGVudCB0bworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qQ09ORCAkK04rMjwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICA8L2RsPgorCisgICA8cD5BbHNvLCB0aGVyZSBhcmUgc29tZSBpbnN0cnVjdGlvbnMsIHdoaWNoIGNhbm5vdCBiZSBmb3VuZCBpbiBvdGhlciBhc3NlbWJsZXJzLiAKK1RoZXNlIGFyZSBicmFuY2ggaW5zdHJ1Y3Rpb25zLCB3aGljaCBoYXMgZGlmZmVyZW50IG9wY29kZXMgdXBvbiBqdW1wIGRpc3RhbmNlLiAKK1RoZXkgYWxsIGdvdCBQQyByZWxhdGl2ZSBhZGRyZXNzaW5nIG1vZGUuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPmJlcSBsYWJlbDwvY29kZT48ZGQ+QSBwb2x5bW9ycGggaW5zdHJ1Y3Rpb24gd2hpY2ggaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qZXEgbGFiZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gY2FzZSBpZiBqdW1wIGRpc3RhbmNlCit3aXRoaW4gYWxsb3dlZCByYW5nZSBmb3IgY3B1J3MganVtcCBpbnN0cnVjdGlvbi4gSWYgbm90LCB0aGlzIHVucm9sbHMgaW50bworYSBzZXF1ZW5jZSBvZgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIGpuZSAkKzYKKyAgICAgICAgICAgIGJyICBsYWJlbAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+Ym5lIGxhYmVsPC9jb2RlPjxkZD5BIHBvbHltb3JwaCBpbnN0cnVjdGlvbiB3aGljaCBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpuZSBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmplcSArNDsgYnIgbGFiZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8YnI+PGR0Pjxjb2RlPmJsdCBsYWJlbDwvY29kZT48ZGQ+QSBwb2x5bW9ycGggaW5zdHJ1Y3Rpb24gd2hpY2ggaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qbCBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpnZSArNDsgYnIgbGFiZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8YnI+PGR0Pjxjb2RlPmJsdG4gbGFiZWw8L2NvZGU+PGRkPkEgcG9seW1vcnBoIGluc3RydWN0aW9uIHdoaWNoIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+am4gbGFiZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qbiArMjsgam1wICs0OyBiciBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGNvZGU+Ymx0dSBsYWJlbDwvY29kZT48ZGQ+QSBwb2x5bW9ycGggaW5zdHJ1Y3Rpb24gd2hpY2ggaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qbG8gbGFiZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qaHMgKzI7IGJyIGxhYmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48Y29kZT5iZ2UgbGFiZWw8L2NvZGU+PGRkPkEgcG9seW1vcnBoIGluc3RydWN0aW9uIHdoaWNoIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+amdlIGxhYmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+amwgKzQ7IGJyIGxhYmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48Y29kZT5iZ2V1IGxhYmVsPC9jb2RlPjxkZD5BIHBvbHltb3JwaCBpbnN0cnVjdGlvbiB3aGljaCBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpocyBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpsbyArNDsgYnIgbGFiZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8YnI+PGR0Pjxjb2RlPmJndCBsYWJlbDwvY29kZT48ZGQ+QSBwb2x5bW9ycGggaW5zdHJ1Y3Rpb24gd2hpY2ggaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qZXEgKzI7IGpnZSBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmplcSArNjsgamwgICs0OyBiciBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGNvZGU+Ymd0dSBsYWJlbDwvY29kZT48ZGQ+QSBwb2x5bW9ycGggaW5zdHJ1Y3Rpb24gd2hpY2ggaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qZXEgKzI7IGpocyBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmplcSArNjsgamxvICs0OyBiciBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGNvZGU+YmxldSBsYWJlbDwvY29kZT48ZGQ+QSBwb2x5bW9ycGggaW5zdHJ1Y3Rpb24gd2hpY2ggaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qZXEgbGFiZWw7IGpsbyBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmplcSArMjsgamhzICs0OyBiciBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGNvZGU+YmxlIGxhYmVsPC9jb2RlPjxkZD5BIHBvbHltb3JwaCBpbnN0cnVjdGlvbiB3aGljaCBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmplcSBsYWJlbDsgamwgIGxhYmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+amVxICsyOyBqZ2UgKzQ7IGJyIGxhYmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48Y29kZT5qdW1wIGxhYmVsPC9jb2RlPjxkZD5BIHBvbHltb3JwaCBpbnN0cnVjdGlvbiB3aGljaCBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmptcCBsYWJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJyIGxhYmVsPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzBfMDAyZE1hY3Jvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwXzAwMmRNYWNyb3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjI4ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTVNQNDMwXzAwMmRNYWNyb3MuaHRtbApAQCAtMCwwICsxLDczIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NU1A0MzAtTWFjcm9zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNU1A0MzAtU3ludGF4Lmh0bWwjTVNQNDMwLVN5bnRheCIgdGl0bGU9Ik1TUDQzMCBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNU1A0MzBfMDAyZENoYXJzLmh0bWwjTVNQNDMwXzAwMmRDaGFycyIgdGl0bGU9Ik1TUDQzMC1DaGFycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1TUDQzMC1NYWNyb3MiPjwvYT4KKzxhIG5hbWU9Ik1TUDQzMF8wMDJkTWFjcm9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1TUDQzMF8wMDJkQ2hhcnMuaHRtbCNNU1A0MzBfMDAyZENoYXJzIj5NU1A0MzAtQ2hhcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNU1A0MzAtU3ludGF4Lmh0bWwjTVNQNDMwLVN5bnRheCI+TVNQNDMwIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjguMi4xIE1hY3JvczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1hY3Jvc18wMDJjLU1TUC00MzAtMTQ5OSI+PC9hPjxhIG5hbWU9ImluZGV4LU1TUC00MzAtbWFjcm9zLTE1MDAiPjwvYT5UaGUgbWFjcm8gc3ludGF4IHVzZWQgb24gdGhlIE1TUCA0MzAgaXMgbGlrZSB0aGF0IGRlc2NyaWJlZCBpbiB0aGUgTVNQCis0MzAgRmFtaWx5IEFzc2VtYmxlciBTcGVjaWZpY2F0aW9uLiAgTm9ybWFsIDxjb2RlPmFzPC9jb2RlPgorbWFjcm9zIHNob3VsZCBzdGlsbCB3b3JrLgorCisgICA8cD5BZGRpdGlvbmFsIGJ1aWx0LWluIG1hY3JvcyBhcmU6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPmxsbyhleHApPC9jb2RlPjxkZD5FeHRyYWN0cyBsZWFzdCBzaWduaWZpY2FudCB3b3JkIGZyb20gMzItYml0IGV4cHJlc3Npb24gJ2V4cCcuCisKKyAgICAgPGJyPjxkdD48Y29kZT5saGkoZXhwKTwvY29kZT48ZGQ+RXh0cmFjdHMgbW9zdCBzaWduaWZpY2FudCB3b3JkIGZyb20gMzItYml0IGV4cHJlc3Npb24gJ2V4cCcuCisKKyAgICAgPGJyPjxkdD48Y29kZT5obG8oZXhwKTwvY29kZT48ZGQ+RXh0cmFjdHMgM3JkIHdvcmQgZnJvbSA2NC1iaXQgZXhwcmVzc2lvbiAnZXhwJy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmhoaShleHApPC9jb2RlPjxkZD5FeHRyYWN0cyA0cmQgd29yZCBmcm9tIDY0LWJpdCBleHByZXNzaW9uICdleHAnLgorCisgICA8L2RsPgorCisgICA8cD5UaGV5IG5vcm1hbGx5IGJlaW5nIHVzZWQgYXMgYW4gaW1tZWRpYXRlIHNvdXJjZSBvcGVyYW5kLgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICBtb3YJI2xsbygxKSwgcjEwCTsJPT0gbW92CSMxLCByMTAKKyAgICAgICAgIG1vdgkjbGhpKDEpLCByMTAJOwk9PSBtb3YJIzAsIHIxMAorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzBfMDAyZFJlZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01TUDQzMF8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzEyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NU1A0MzBfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NU1A0MzAtUmVncyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTVNQNDMwLVN5bnRheC5odG1sI01TUDQzMC1TeW50YXgiIHRpdGxlPSJNU1A0MzAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI01TUDQzMF8wMDJkQ2hhcnMiIHRpdGxlPSJNU1A0MzAtQ2hhcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNU1A0MzBfMDAyZEV4dC5odG1sI01TUDQzMF8wMDJkRXh0IiB0aXRsZT0iTVNQNDMwLUV4dCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1TUDQzMC1SZWdzIj48L2E+Cis8YSBuYW1lPSJNU1A0MzBfMDAyZFJlZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTVNQNDMwXzAwMmRFeHQuaHRtbCNNU1A0MzBfMDAyZEV4dCI+TVNQNDMwLUV4dDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1TUDQzMF8wMDJkQ2hhcnMuaHRtbCNNU1A0MzBfMDAyZENoYXJzIj5NU1A0MzAtQ2hhcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNU1A0MzAtU3ludGF4Lmh0bWwjTVNQNDMwLVN5bnRheCI+TVNQNDMwIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMjguMi4zIFJlZ2lzdGVyIE5hbWVzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtTVNQLTQzMC1yZWdpc3Rlci1uYW1lcy0xNTA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXItbmFtZXNfMDAyYy1NU1AtNDMwLTE1MDkiPjwvYT5HZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGFyZSByZXByZXNlbnRlZCBieSBwcmVkZWZpbmVkIHN5bWJvbHMgb2YgdGhlCitmb3JtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjwvc3Bhbj48dmFyPk48L3Zhcj48L3NhbXA+JnJzcXVvOyAoZm9yIGdsb2JhbCByZWdpc3RlcnMpLCB3aGVyZSA8dmFyPk48L3Zhcj4gcmVwcmVzZW50cworYSBudW1iZXIgYmV0d2VlbiA8Y29kZT4wPC9jb2RlPiBhbmQgPGNvZGU+MTU8L2NvZGU+LiAgVGhlIGxlYWRpbmcKK2xldHRlcnMgbWF5IGJlIGluIGVpdGhlciB1cHBlciBvciBsb3dlciBjYXNlOyBmb3IgZXhhbXBsZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMTM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlI3PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBib3RoIHZhbGlkIHJlZ2lzdGVyIG5hbWVzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zcGVjaWFsLXB1cnBvc2UtcmVnaXN0ZXJzXzAwMmMtTVNQLTQzMC0xNTEwIj48L2E+UmVnaXN0ZXIgbmFtZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QQzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TUDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TUjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW5ub3QgYmUgdXNlZCBhcyByZWdpc3RlciBuYW1lcworYW5kIHdpbGwgYmUgdHJlYXRlZCBhcyB2YXJpYWJsZXMuIFVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NYWNoaW5lLURlcGVuZGVuY2llcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU4YzQwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbApAQCAtMCwwICsxLDE3NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWFjaGluZSBEZXBlbmRlbmNpZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT2JqZWN0LUF0dHJpYnV0ZXMuaHRtbCNPYmplY3QtQXR0cmlidXRlcyIgdGl0bGU9Ik9iamVjdCBBdHRyaWJ1dGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyIgdGl0bGU9IlJlcG9ydGluZyBCdWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTWFjaGluZS1EZXBlbmRlbmNpZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyI+UmVwb3J0aW5nIEJ1Z3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPYmplY3QtQXR0cmlidXRlcy5odG1sI09iamVjdC1BdHRyaWJ1dGVzIj5PYmplY3QgQXR0cmlidXRlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj45IE1hY2hpbmUgRGVwZW5kZW50IEZlYXR1cmVzPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWFjaGluZS1kZXBlbmRlbmNpZXMtNTE0Ij48L2E+VGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gc2V0cyBhcmUgKGFsbW9zdCBieSBkZWZpbml0aW9uKSBkaWZmZXJlbnQgb24KK2VhY2ggbWFjaGluZSB3aGVyZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBydW5zLiAgRmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25zCit2YXJ5IGFzIHdlbGwsIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBvZnRlbiBzdXBwb3J0cyBhIGZldyBhZGRpdGlvbmFsCitkaXJlY3RpdmVzIG9yIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIKK2Fzc2VtYmxlcnMgb24gYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLiAgRmluYWxseSwgc29tZSB2ZXJzaW9ucyBvZgorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc3VwcG9ydCBzcGVjaWFsIHBzZXVkby1pbnN0cnVjdGlvbnMgZm9yIGJyYW5jaAorb3B0aW1pemF0aW9uLgorCisgICA8cD5UaGlzIGNoYXB0ZXIgZGlzY3Vzc2VzIG1vc3Qgb2YgdGhlc2UgZGlmZmVyZW5jZXMsIHRob3VnaCBpdCBkb2VzIG5vdAoraW5jbHVkZSBkZXRhaWxzIG9uIGFueSBtYWNoaW5lJ3MgaW5zdHJ1Y3Rpb24gc2V0LiAgRm9yIGRldGFpbHMgb24gdGhhdAorc3ViamVjdCwgc2VlIHRoZSBoYXJkd2FyZSBtYW51ZmFjdHVyZXIncyBtYW51YWwuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJBQXJjaDY0XzAwMmREZXBlbmRlbnQuaHRtbCNBQXJjaDY0XzAwMmREZXBlbmRlbnQiPkFBcmNoNjQtRGVwZW5kZW50PC9hPjogCQlBQXJjaDY0IERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBbHBoYV8wMDJkRGVwZW5kZW50Lmh0bWwjQWxwaGFfMDAyZERlcGVuZGVudCI+QWxwaGEtRGVwZW5kZW50PC9hPjogCQlBbHBoYSBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iQVJDXzAwMmREZXBlbmRlbnQuaHRtbCNBUkNfMDAyZERlcGVuZGVudCI+QVJDLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgIEFSQyBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iQVJNXzAwMmREZXBlbmRlbnQuaHRtbCNBUk1fMDAyZERlcGVuZGVudCI+QVJNLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgIEFSTSBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iQVZSXzAwMmREZXBlbmRlbnQuaHRtbCNBVlJfMDAyZERlcGVuZGVudCI+QVZSLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgIEFWUiBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iQmxhY2tmaW5fMDAyZERlcGVuZGVudC5odG1sI0JsYWNrZmluXzAwMmREZXBlbmRlbnQiPkJsYWNrZmluLURlcGVuZGVudDwvYT46IAkJQmxhY2tmaW4gRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9IkNSMTZfMDAyZERlcGVuZGVudC5odG1sI0NSMTZfMDAyZERlcGVuZGVudCI+Q1IxNi1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgIENSMTYgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI0NSSVNfMDAyZERlcGVuZGVudCI+Q1JJUy1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgIENSSVMgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCI+RDEwVi1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgIEQxMFYgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJEMzBWXzAwMmREZXBlbmRlbnQuaHRtbCNEMzBWXzAwMmREZXBlbmRlbnQiPkQzMFYtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgICBEMzBWIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iRXBpcGhhbnlfMDAyZERlcGVuZGVudC5odG1sI0VwaXBoYW55XzAwMmREZXBlbmRlbnQiPkVwaXBoYW55LURlcGVuZGVudDwvYT46ICAgICAgICAgICBFUElQSEFOWSBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZERlcGVuZGVudC5odG1sI0g4XzAwMmYzMDBfMDAyZERlcGVuZGVudCI+SDgvMzAwLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgIFJlbmVzYXMgSDgvMzAwIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50Ij5IUFBBLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgSFBQQSBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5FU0EvMzkwLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgSUJNIEVTQS8zOTAgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgICBJbnRlbCA4MDM4NiBhbmQgQU1EIHg4Ni02NCBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9Imk4NjBfMDAyZERlcGVuZGVudC5odG1sI2k4NjBfMDAyZERlcGVuZGVudCI+aTg2MC1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgIEludGVsIDgwODYwIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iaTk2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTk2MF8wMDJkRGVwZW5kZW50Ij5pOTYwLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgSW50ZWwgODA5NjAgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJJQV8wMDJkNjRfMDAyZERlcGVuZGVudC5odG1sI0lBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Ij5JQS02NC1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgSW50ZWwgSUEtNjQgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJJUDJLXzAwMmREZXBlbmRlbnQuaHRtbCNJUDJLXzAwMmREZXBlbmRlbnQiPklQMkstRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgICBJUDJLIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iTE0zMl8wMDJkRGVwZW5kZW50Lmh0bWwjTE0zMl8wMDJkRGVwZW5kZW50Ij5MTTMyLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgTE0zMiBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9Ik0zMkNfMDAyZERlcGVuZGVudC5odG1sI00zMkNfMDAyZERlcGVuZGVudCI+TTMyQy1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgIE0zMkMgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJNMzJSXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJSXzAwMmREZXBlbmRlbnQiPk0zMlItRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgICBNMzJSIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iTTY4S18wMDJkRGVwZW5kZW50Lmh0bWwjTTY4S18wMDJkRGVwZW5kZW50Ij5NNjhLLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgTTY4MHgwIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRGVwZW5kZW50Lmh0bWwjTTY4SEMxMV8wMDJkRGVwZW5kZW50Ij5NNjhIQzExLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgTTY4SEMxMSBhbmQgNjhIQzEyIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwjTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Ij5NaWNyb0JsYXplLURlcGVuZGVudDwvYT46IAlNSUNST0JMQVpFIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50Ij5NSVBTLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgTUlQUyBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZERlcGVuZGVudC5odG1sI01NSVhfMDAyZERlcGVuZGVudCI+TU1JWC1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgIE1NSVggRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJNU1A0MzBfMDAyZERlcGVuZGVudC5odG1sI01TUDQzMF8wMDJkRGVwZW5kZW50Ij5NU1A0MzAtRGVwZW5kZW50PC9hPjogCQlNU1A0MzAgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJOUzMyS18wMDJkRGVwZW5kZW50Lmh0bWwjTlMzMktfMDAyZERlcGVuZGVudCI+TlMzMkstRGVwZW5kZW50PC9hPjogCQlOUzMySyBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9IlNIXzAwMmREZXBlbmRlbnQuaHRtbCNTSF8wMDJkRGVwZW5kZW50Ij5TSC1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgICAgUmVuZXNhcyAvIFN1cGVySCBTSCBEZXBlbmRlbnQgRmVhdHVyZXMKKzxsaT48YSBocmVmPSJTSDY0XzAwMmREZXBlbmRlbnQuaHRtbCNTSDY0XzAwMmREZXBlbmRlbnQiPlNINjQtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgICBTdXBlckggU0g2NCBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCI+UERQLTExLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgIFBEUC0xMSBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9IlBKXzAwMmREZXBlbmRlbnQuaHRtbCNQSl8wMDJkRGVwZW5kZW50Ij5QSi1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgICAgcGljb0phdmEgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50Ij5QUEMtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgICAgUG93ZXJQQyBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9IlJMNzhfMDAyZERlcGVuZGVudC5odG1sI1JMNzhfMDAyZERlcGVuZGVudCI+Ukw3OC1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgIFJMNzggRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJSWF8wMDJkRGVwZW5kZW50Lmh0bWwjUlhfMDAyZERlcGVuZGVudCI+UlgtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgICAgIFJYIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iU18wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNTXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+Uy8zOTAtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgIElCTSBTLzM5MCBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9IlNDT1JFXzAwMmREZXBlbmRlbnQuaHRtbCNTQ09SRV8wMDJkRGVwZW5kZW50Ij5TQ09SRS1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgU0NPUkUgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRGVwZW5kZW50Lmh0bWwjU3BhcmNfMDAyZERlcGVuZGVudCI+U3BhcmMtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgIFNQQVJDIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgIFRJIFRNUzMyMEM1NHggRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJUSUM2WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNlhfMDAyZERlcGVuZGVudCI+VElDNlgtRGVwZW5kZW50IDwvYT46ICAgICAgICAgICAgIFRJIFRNUzMyMEM2eCBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFXzAwMmRHeF8wMDJkRGVwZW5kZW50Ij5USUxFLUd4LURlcGVuZGVudCA8L2E+OiAgICAgICAgICAgVGlsZXJhIFRJTEUtR3ggRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJUSUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFUHJvXzAwMmREZXBlbmRlbnQiPlRJTEVQcm8tRGVwZW5kZW50IDwvYT46ICAgICAgICAgICBUaWxlcmEgVElMRVBybyBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCI+Vjg1MC1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgIFY4NTAgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJYR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwjWEdBVEVfMDAyZERlcGVuZGVudCI+WEdBVEUtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgIFhHQVRFIEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJYU1RPUk1ZMTZfMDAyZERlcGVuZGVudC5odG1sI1hTVE9STVkxNl8wMDJkRGVwZW5kZW50Ij5YU1RPUk1ZMTYtRGVwZW5kZW50PC9hPjogICAgICAgICAgWFN0b3JteTE2IERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iWHRlbnNhXzAwMmREZXBlbmRlbnQuaHRtbCNYdGVuc2FfMDAyZERlcGVuZGVudCI+WHRlbnNhLURlcGVuZGVudDwvYT46ICAgICAgICAgICAgIFh0ZW5zYSBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGhyZWY9Ilo4MF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwXzAwMmREZXBlbmRlbnQiPlo4MC1EZXBlbmRlbnQ8L2E+OiAgICAgICAgICAgICAgICBaODAgRGVwZW5kZW50IEZlYXR1cmVzCisKKzxsaT48YSBocmVmPSJaODAwMF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwMDBfMDAyZERlcGVuZGVudCI+WjgwMDAtRGVwZW5kZW50PC9hPjogICAgICAgICAgICAgIFo4MDAwIERlcGVuZGVudCBGZWF0dXJlcworCis8bGk+PGEgaHJlZj0iVmF4XzAwMmREZXBlbmRlbnQuaHRtbCNWYXhfMDAyZERlcGVuZGVudCI+VmF4LURlcGVuZGVudDwvYT46ICAgICAgICAgICAgICAgIFZBWCBEZXBlbmRlbnQgRmVhdHVyZXMKKzwvdWw+CisKKzwhLS0gVGhlIGZvbGxvd2luZyBtYWpvciBub2RlcyBhcmUgKnNlY3Rpb25zKiBpbiB0aGUgR0VORVJJQyB2ZXJzaW9uLCAqY2hhcHRlcnMqIC0tPgorPCEtLSBpbiBzaW5nbGUtY3B1IHZlcnNpb25zLiAgVGhpcyBpcyBtYWlubHkgYWNoaWV2ZWQgYnkgQGxvd2Vyc2VjdGlvbnMuICBUaGVyZSBpcyBhIC0tPgorPCEtLSBwZWN1bGlhcml0eTogdG8gcHJlc2VydmUgY3Jvc3MtcmVmZXJlbmNlcywgdGhlcmUgbXVzdCBiZSBhIG5vZGUgY2FsbGVkIC0tPgorPCEtLSAiTWFjaGluZSBEZXBlbmRlbmNpZXMiLiAgSGVuY2UgdGhlIGNvbmRpdGlvbmFsIG5vZGVuYW1lcyBpbiBlYWNoIC0tPgorPCEtLSBtYWpvciBub2RlIGJlbG93LiAgTm9kZSBkZWZhdWx0aW5nIGluIG1ha2VpbmZvIHJlcXVpcmVzIGFkamFjZW5jeSBvZiAtLT4KKzwhLS0gbm9kZSBhbmQgc2VjdGlvbmluZyBjb21tYW5kczsgaGVuY2UgdGhlIHJlcGV0aXRpb24gb2YgQGNoYXB0ZXIgQkxBSCAtLT4KKzwhLS0gaW4gYm90aCBjb25kaXRpb25hbCBibG9ja3MuIC0tPgorPCEtLSBDb3B5cmlnaHQgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBDb250cmlidXRlZCBieSBBUk0gTHRkLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWFjcm8uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01hY3JvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzOWZlMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01hY3JvLmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1hY3JvIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMb25nLmh0bWwjTG9uZyIgdGl0bGU9IkxvbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNUkkuaHRtbCNNUkkiIHRpdGxlPSJNUkkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNYWNybyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxvbmcuaHRtbCNMb25nIj5Mb25nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43Ljc5IDxjb2RlPi5tYWNybzwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNyb3MtMzk3Ij48L2E+VGhlIGNvbW1hbmRzIDxjb2RlPi5tYWNybzwvY29kZT4gYW5kIDxjb2RlPi5lbmRtPC9jb2RlPiBhbGxvdyB5b3UgdG8gZGVmaW5lIG1hY3JvcyB0aGF0CitnZW5lcmF0ZSBhc3NlbWJseSBvdXRwdXQuICBGb3IgZXhhbXBsZSwgdGhpcyBkZWZpbml0aW9uIHNwZWNpZmllcyBhIG1hY3JvCis8Y29kZT5zdW08L2NvZGU+IHRoYXQgcHV0cyBhIHNlcXVlbmNlIG9mIG51bWJlcnMgaW50byBtZW1vcnk6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAgICAubWFjcm8gIHN1bSBmcm9tPTAsIHRvPTUKKyAgICAgICAgICAgICAubG9uZyAgIFxmcm9tCisgICAgICAgICAgICAgLmlmICAgICBcdG8tXGZyb20KKyAgICAgICAgICAgICBzdW0gICAgICIoXGZyb20rMSkiLFx0bworICAgICAgICAgICAgIC5lbmRpZgorICAgICAgICAgICAgIC5lbmRtCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+V2l0aCB0aGF0IGRlZmluaXRpb24sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1VNIDAsNTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBlcXVpdmFsZW50IHRvIHRoaXMgYXNzZW1ibHkgaW5wdXQ6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAgICAubG9uZyAgIDAKKyAgICAgICAgICAgICAubG9uZyAgIDEKKyAgICAgICAgICAgICAubG9uZyAgIDIKKyAgICAgICAgICAgICAubG9uZyAgIDMKKyAgICAgICAgICAgICAubG9uZyAgIDQKKyAgICAgICAgICAgICAubG9uZyAgIDUKKzwvcHJlPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+Lm1hY3JvIDwvY29kZT48dmFyPm1hY25hbWU8L3Zhcj48YSBuYW1lPSJpbmRleC1nX3RfMDAyZW1hY3JvLV8wMDQwdmFyXzAwN2JtYWNuYW1lXzAwN2QtMzk4Ij48L2E+PGR0Pjxjb2RlPi5tYWNybyA8L2NvZGU+PHZhcj5tYWNuYW1lPC92YXI+IDx2YXI+bWFjYXJnczwvdmFyPjxjb2RlPiAuLi48L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmVtYWNyby1fMDA0MHZhcl8wMDdibWFjbmFtZV8wMDdkLV8wMDQwdmFyXzAwN2JtYWNhcmdzXzAwN2QtXzAwNDBkb3RzXzAwN2JfMDA3ZC0zOTkiPjwvYT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtYWNyb18wMDdkLWRpcmVjdGl2ZS00MDAiPjwvYT5CZWdpbiB0aGUgZGVmaW5pdGlvbiBvZiBhIG1hY3JvIGNhbGxlZCA8dmFyPm1hY25hbWU8L3Zhcj4uICBJZiB5b3VyIG1hY3JvCitkZWZpbml0aW9uIHJlcXVpcmVzIGFyZ3VtZW50cywgc3BlY2lmeSB0aGVpciBuYW1lcyBhZnRlciB0aGUgbWFjcm8gbmFtZSwKK3NlcGFyYXRlZCBieSBjb21tYXMgb3Igc3BhY2VzLiAgWW91IGNhbiBxdWFsaWZ5IHRoZSBtYWNybyBhcmd1bWVudCB0bworaW5kaWNhdGUgd2hldGhlciBhbGwgaW52b2NhdGlvbnMgbXVzdCBzcGVjaWZ5IGEgbm9uLWJsYW5rIHZhbHVlICh0aHJvdWdoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PGNvZGU+cmVxPC9jb2RlPjwvc2FtcD4mcnNxdW87KSwgb3Igd2hldGhlciBpdCB0YWtlcyBhbGwgb2YgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMKKyh0aHJvdWdoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ojwvc3Bhbj48Y29kZT52YXJhcmc8L2NvZGU+PC9zYW1wPiZyc3F1bzspLiAgWW91IGNhbiBzdXBwbHkgYSBkZWZhdWx0IHZhbHVlIGZvciBhbnkKK21hY3JvIGFyZ3VtZW50IGJ5IGZvbGxvd2luZyB0aGUgbmFtZSB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+PTwvc3Bhbj48dmFyPmRlZmx0PC92YXI+PC9zYW1wPiZyc3F1bzsuICBZb3UKK2Nhbm5vdCBkZWZpbmUgdHdvIG1hY3JvcyB3aXRoIHRoZSBzYW1lIDx2YXI+bWFjbmFtZTwvdmFyPiB1bmxlc3MgaXQgaGFzIGJlZW4KK3N1YmplY3QgdG8gdGhlIDxjb2RlPi5wdXJnZW08L2NvZGU+IGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IlB1cmdlbS5odG1sI1B1cmdlbSI+UHVyZ2VtPC9hPikgYmV0d2VlbiB0aGUgdHdvCitkZWZpbml0aW9ucy4gIEZvciBleGFtcGxlLCB0aGVzZSBhcmUgYWxsIHZhbGlkIDxjb2RlPi5tYWNybzwvY29kZT4gc3RhdGVtZW50czoKKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT4ubWFjcm8gY29tbTwvY29kZT48ZGQ+QmVnaW4gdGhlIGRlZmluaXRpb24gb2YgYSBtYWNybyBjYWxsZWQgPGNvZGU+Y29tbTwvY29kZT4sIHdoaWNoIHRha2VzIG5vCithcmd1bWVudHMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi5tYWNybyBwbHVzMSBwLCBwMTwvY29kZT48ZHQ+PGNvZGU+Lm1hY3JvIHBsdXMxIHAgcDE8L2NvZGU+PGRkPkVpdGhlciBzdGF0ZW1lbnQgYmVnaW5zIHRoZSBkZWZpbml0aW9uIG9mIGEgbWFjcm8gY2FsbGVkIDxjb2RlPnBsdXMxPC9jb2RlPiwKK3doaWNoIHRha2VzIHR3byBhcmd1bWVudHM7IHdpdGhpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbiwgd3JpdGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XHA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ccDE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gZXZhbHVhdGUgdGhlIGFyZ3VtZW50cy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Lm1hY3JvIHJlc2VydmVfc3RyIHAxPTAgcDI8L2NvZGU+PGRkPkJlZ2luIHRoZSBkZWZpbml0aW9uIG9mIGEgbWFjcm8gY2FsbGVkIDxjb2RlPnJlc2VydmVfc3RyPC9jb2RlPiwgd2l0aCB0d28KK2FyZ3VtZW50cy4gIFRoZSBmaXJzdCBhcmd1bWVudCBoYXMgYSBkZWZhdWx0IHZhbHVlLCBidXQgbm90IHRoZSBzZWNvbmQuIAorQWZ0ZXIgdGhlIGRlZmluaXRpb24gaXMgY29tcGxldGUsIHlvdSBjYW4gY2FsbCB0aGUgbWFjcm8gZWl0aGVyIGFzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlc2VydmVfc3RyIDwvc3Bhbj48dmFyPmE8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48dmFyPmI8L3Zhcj48L3NhbXA+JnJzcXVvOyAod2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlxwMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBldmFsdWF0aW5nIHRvCis8dmFyPmE8L3Zhcj4gYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XHAyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGV2YWx1YXRpbmcgdG8gPHZhcj5iPC92YXI+KSwgb3IgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZXNlcnZlX3N0cgorLDwvc3Bhbj48dmFyPmI8L3Zhcj48L3NhbXA+JnJzcXVvOyAod2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlxwMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBldmFsdWF0aW5nIGFzIHRoZSBkZWZhdWx0LCBpbiB0aGlzIGNhc2UKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XHAyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGV2YWx1YXRpbmcgdG8gPHZhcj5iPC92YXI+KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Lm1hY3JvIG0gcDE6cmVxLCBwMj0wLCBwMzp2YXJhcmc8L2NvZGU+PGRkPkJlZ2luIHRoZSBkZWZpbml0aW9uIG9mIGEgbWFjcm8gY2FsbGVkIDxjb2RlPm08L2NvZGU+LCB3aXRoIGF0IGxlYXN0IHRocmVlCithcmd1bWVudHMuICBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBhbHdheXMgaGF2ZSBhIHZhbHVlIHNwZWNpZmllZCwgYnV0Citub3QgdGhlIHNlY29uZCwgd2hpY2ggaW5zdGVhZCBoYXMgYSBkZWZhdWx0IHZhbHVlLiBUaGUgdGhpcmQgZm9ybWFsCit3aWxsIGdldCBhc3NpZ25lZCBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBzcGVjaWZpZWQgYXQgaW52b2NhdGlvbiB0aW1lLgorCisgICAgICAgICAgPHA+V2hlbiB5b3UgY2FsbCBhIG1hY3JvLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGFyZ3VtZW50IHZhbHVlcyBlaXRoZXIgYnkKK3Bvc2l0aW9uLCBvciBieSBrZXl3b3JkLiAgRm9yIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3VtIDksMTc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgZXF1aXZhbGVudCB0bworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdW0gdG89MTcsIGZyb209OTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8L2RsPgorCisgICAgIDxwPk5vdGUgdGhhdCBzaW5jZSBlYWNoIG9mIHRoZSA8dmFyPm1hY2FyZ3M8L3Zhcj4gY2FuIGJlIGFuIGlkZW50aWZpZXIgZXhhY3RseQorYXMgYW55IG90aGVyIG9uZSBwZXJtaXR0ZWQgYnkgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIHRoZXJlIG1heSBiZQorb2NjYXNpb25hbCBwcm9ibGVtcyBpZiB0aGUgdGFyZ2V0IGhhbmQtY3JhZnRzIHNwZWNpYWwgbWVhbmluZ3MgdG8gY2VydGFpbgorY2hhcmFjdGVycyB3aGVuIHRoZXkgb2NjdXIgaW4gYSBzcGVjaWFsIHBvc2l0aW9uLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjb2xvbgorKDxjb2RlPjo8L2NvZGU+KSBpcyBnZW5lcmFsbHkgcGVybWl0dGVkIHRvIGJlIHBhcnQgb2YgYSBzeW1ib2wgbmFtZSwgYnV0IHRoZQorYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgc3BlY2lhbC1jYXNlcyBpdCB3aGVuIG9jY3VycmluZyBhcyB0aGUgZmluYWwKK2NoYXJhY3RlciBvZiBhIHN5bWJvbCAodG8gZGVub3RlIGEgbGFiZWwpLCB0aGVuIHRoZSBtYWNybyBwYXJhbWV0ZXIKK3JlcGxhY2VtZW50IGNvZGUgd2lsbCBoYXZlIG5vIHdheSBvZiBrbm93aW5nIHRoYXQgYW5kIGNvbnNpZGVyIHRoZSB3aG9sZQorY29uc3RydWN0IChpbmNsdWRpbmcgdGhlIGNvbG9uKSBhbiBpZGVudGlmaWVyLCBhbmQgY2hlY2sgb25seSB0aGlzCitpZGVudGlmaWVyIGZvciBiZWluZyB0aGUgc3ViamVjdCB0byBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9uLiAgU28gZm9yIGV4YW1wbGUKK3RoaXMgbWFjcm8gZGVmaW5pdGlvbjoKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgCS5tYWNybyBsYWJlbCBsCisgICAgICAgICAgXGw6CisgICAgICAgICAgCS5lbmRtCis8L3ByZT4KKyAgICAgPHA+bWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuICBJbnZva2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxhYmVsIGZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtaWdodCBub3QgY3JlYXRlIGEgbGFiZWwKK2NhbGxlZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBidXQgaW5zdGVhZCBqdXN0IGluc2VydCB0aGUgdGV4dCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlxsOjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnRvIHRoZQorYXNzZW1ibGVyIHNvdXJjZSwgcHJvYmFibHkgZ2VuZXJhdGluZyBhbiBlcnJvciBhYm91dCBhbiB1bnJlY29nbmlzZWQKK2lkZW50aWZpZXIuCisKKyAgICAgPHA+U2ltaWxhcmx5IHByb2JsZW1zIG1pZ2h0IG9jY3VyIHdpdGggdGhlIHBlcmlvZCBjaGFyYWN0ZXIgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48L3NhbXA+JnJzcXVvOykKK3doaWNoIGlzIG9mdGVuIGFsbG93ZWQgaW5zaWRlIG9wY29kZSBuYW1lcyAoYW5kIGhlbmNlIGlkZW50aWZpZXIgbmFtZXMpLiAgU28KK2ZvciBleGFtcGxlIGNvbnN0cnVjdGluZyBhIG1hY3JvIHRvIGJ1aWxkIGFuIG9wY29kZSBmcm9tIGEgYmFzZSBuYW1lIGFuZCBhCitsZW5ndGggc3BlY2lmaWVyIGxpa2UgdGhpczoKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgCS5tYWNybyBvcGNvZGUgYmFzZSBsZW5ndGgKKyAgICAgICAgICAgICAgICAgIFxiYXNlLlxsZW5ndGgKKyAgICAgICAgICAJLmVuZG0KKzwvcHJlPgorICAgICA8cD5hbmQgaW52b2tpbmcgaXQgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcGNvZGUgc3RvcmUgbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsIG5vdCBjcmVhdGUgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0b3JlLmw8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2luc3RydWN0aW9uIGJ1dCBpbnN0ZWFkIGdlbmVyYXRlIHNvbWUga2luZCBvZiBlcnJvciBhcyB0aGUgYXNzZW1ibGVyIHRyaWVzIHRvCitpbnRlcnByZXQgdGhlIHRleHQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cYmFzZS5cbGVuZ3RoPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPlRoZXJlIGFyZSBzZXZlcmFsIHBvc3NpYmxlIHdheXMgYXJvdW5kIHRoaXMgcHJvYmxlbToKKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5JbnNlcnQgd2hpdGUgc3BhY2U8L2NvZGU+PGRkPklmIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIHRoZW4gdGhpcyBpcyB0aGUgc2ltcGxlc3QKK3NvbHV0aW9uLiAgZWc6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgICAJLm1hY3JvIGxhYmVsIGwKKyAgICAgICAgICAgICAgIFxsIDoKKyAgICAgICAgICAgICAgIAkuZW5kbQorPC9wcmU+CisgICAgICAgICAgPGJyPjxkdD48Y29kZT5Vc2UgJmxzcXVvOzwvY29kZT48c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XCgpPC9zcGFuPjwvc2FtcD48Y29kZT4mcnNxdW87PC9jb2RlPjxkZD5UaGUgc3RyaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XCgpPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHRoZSBlbmQgb2YgYSBtYWNybyBhcmd1bWVudCBmcm9tCit0aGUgZm9sbG93aW5nIHRleHQuICBlZzoKKworICAgICAgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAgICAgIAkubWFjcm8gb3Bjb2RlIGJhc2UgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgIFxiYXNlXCgpLlxsZW5ndGgKKyAgICAgICAgICAgICAgIAkuZW5kbQorPC9wcmU+CisgICAgICAgICAgPGJyPjxkdD48Y29kZT5Vc2UgdGhlIGFsdGVybmF0ZSBtYWNybyBzeW50YXggbW9kZTwvY29kZT48ZGQ+SW4gdGhlIGFsdGVybmF0aXZlIG1hY3JvIHN5bnRheCBtb2RlIHRoZSBhbXBlcnNhbmQgY2hhcmFjdGVyICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZhbXA7PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBjYW4gYmUKK3VzZWQgYXMgYSBzZXBhcmF0b3IuICBlZzoKKworICAgICAgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAgICAgIAkuYWx0bWFjcm8KKyAgICAgICAgICAgICAgIAkubWFjcm8gbGFiZWwgbAorICAgICAgICAgICAgICAgbCZhbXA7OgorICAgICAgICAgICAgICAgCS5lbmRtCis8L3ByZT4KKyAgICAgICAgICA8L2RsPgorCisgICAgIDxwPk5vdGU6IHRoaXMgcHJvYmxlbSBvZiBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgc3RyaW5nIHBhcmFtZXRlcnMgdG8gcHNldWRvIG9wcworYWxzbyBhcHBsaWVzIHRvIHRoZSBpZGVudGlmaWVycyB1c2VkIGluIDxjb2RlPi5pcnA8L2NvZGU+IChzZWUgPGEgaHJlZj0iSXJwLmh0bWwjSXJwIj5JcnA8L2E+KQorYW5kIDxjb2RlPi5pcnBjPC9jb2RlPiAoc2VlIDxhIGhyZWY9IklycGMuaHRtbCNJcnBjIj5JcnBjPC9hPikgYXMgd2VsbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5lbmRtPC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJlZW5kbS00MDEiPjwvYT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlbmRtXzAwN2QtZGlyZWN0aXZlLTQwMiI+PC9hPk1hcmsgdGhlIGVuZCBvZiBhIG1hY3JvIGRlZmluaXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZXhpdG08L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmVleGl0bS00MDMiPjwvYT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JleGl0bV8wMDdkLWRpcmVjdGl2ZS00MDQiPjwvYT5FeGl0IGVhcmx5IGZyb20gdGhlIGN1cnJlbnQgbWFjcm8gZGVmaW5pdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1udW1iZXItb2YtbWFjcm9zLWV4ZWN1dGVkLTQwNSI+PC9hPjxhIG5hbWU9ImluZGV4LW1hY3Jvc18wMDJjLWNvdW50LWV4ZWN1dGVkLTQwNiI+PC9hPjxicj48ZHQ+PGNvZGU+XEA8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWNfMDA0MF8wMDQwLTQwNyI+PC9hPjxkZD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBtYWludGFpbnMgYSBjb3VudGVyIG9mIGhvdyBtYW55IG1hY3JvcyBpdCBoYXMKK2V4ZWN1dGVkIGluIHRoaXMgcHNldWRvLXZhcmlhYmxlOyB5b3UgY2FuIGNvcHkgdGhhdCBudW1iZXIgdG8geW91cgorb3V0cHV0IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cQDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYnV0IDxlbT5vbmx5IHdpdGhpbiBhIG1hY3JvIGRlZmluaXRpb248L2VtPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPkxPQ0FMIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT4gWyAsIC4uLiBdPC9jb2RlPjxhIG5hbWU9ImluZGV4LUxPQ0FMLV8wMDQwdmFyXzAwN2JuYW1lXzAwN2QtXzAwNWItXzAwMmMtXzAwNDBkb3RzXzAwN2JfMDA3ZC1fMDA1ZC00MDgiPjwvYT48ZGQ+PGVtPldhcm5pbmc6IDwvZW0+PGNvZGU+TE9DQUw8L2NvZGU+PGVtPiBpcyBvbmx5IGF2YWlsYWJsZSBpZiB5b3Ugc2VsZWN0ICZsZHF1bzthbHRlcm5hdGUKK21hY3JvIHN5bnRheCZyZHF1bzsgd2l0aCAmbHNxdW87PC9lbT48c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1hbHRlcm5hdGU8L3NwYW4+PC9zYW1wPjxlbT4mcnNxdW87IG9yIDwvZW0+PGNvZGU+LmFsdG1hY3JvPC9jb2RlPjxlbT4uPC9lbT4KK1NlZSA8YSBocmVmPSJBbHRtYWNyby5odG1sI0FsdG1hY3JvIj48Y29kZT4uYWx0bWFjcm88L2NvZGU+PC9hPi4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NYW51YWwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01hbnVhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliODdjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NYW51YWwuaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NYW51YWwgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciIHRpdGxlPSJPdmVydmlldyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdOVS1Bc3NlbWJsZXIuaHRtbCNHTlUtQXNzZW1ibGVyIiB0aXRsZT0iR05VIEFzc2VtYmxlciI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1hbnVhbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHTlUtQXNzZW1ibGVyLmh0bWwjR05VLUFzc2VtYmxlciI+R05VIEFzc2VtYmxlcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4xIFN0cnVjdHVyZSBvZiB0aGlzIE1hbnVhbDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1hbnVhbF8wMDJjLXN0cnVjdHVyZS1hbmQtcHVycG9zZS0yMSI+PC9hPlRoaXMgbWFudWFsIGlzIGludGVuZGVkIHRvIGRlc2NyaWJlIHdoYXQgeW91IG5lZWQgdG8ga25vdyB0byB1c2UKKzxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4gIFdlIGNvdmVyIHRoZSBzeW50YXggZXhwZWN0ZWQgaW4gc291cmNlIGZpbGVzLCBpbmNsdWRpbmcKK25vdGF0aW9uIGZvciBzeW1ib2xzLCBjb25zdGFudHMsIGFuZCBleHByZXNzaW9uczsgdGhlIGRpcmVjdGl2ZXMgdGhhdAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gdW5kZXJzdGFuZHM7IGFuZCBvZiBjb3Vyc2UgaG93IHRvIGludm9rZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4KKworICAgPHA+VGhpcyBtYW51YWwgYWxzbyBkZXNjcmliZXMgc29tZSBvZiB0aGUgbWFjaGluZS1kZXBlbmRlbnQgZmVhdHVyZXMgb2YKK3ZhcmlvdXMgZmxhdm9ycyBvZiB0aGUgYXNzZW1ibGVyLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWluc3RydWN0aW9ucy1fMDAyOG5vdC1jb3ZlcmVkXzAwMjktMjIiPjwvYT5PbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBtYW51YWwgaXMgPGVtPm5vdDwvZW0+IGludGVuZGVkIGFzIGFuIGludHJvZHVjdGlvbgordG8gcHJvZ3JhbW1pbmcgaW4gYXNzZW1ibHkgbGFuZ3VhZ2UmbWRhc2g7bGV0IGFsb25lIHByb2dyYW1taW5nIGluIGdlbmVyYWwhIAorSW4gYSBzaW1pbGFyIHZlaW4sIHdlIG1ha2Ugbm8gYXR0ZW1wdCB0byBpbnRyb2R1Y2UgdGhlIG1hY2hpbmUKK2FyY2hpdGVjdHVyZTsgd2UgZG8gPGVtPm5vdDwvZW0+IGRlc2NyaWJlIHRoZSBpbnN0cnVjdGlvbiBzZXQsIHN0YW5kYXJkCittbmVtb25pY3MsIHJlZ2lzdGVycyBvciBhZGRyZXNzaW5nIG1vZGVzIHRoYXQgYXJlIHN0YW5kYXJkIHRvIGEKK3BhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLiAKK1lvdSBtYXkgd2FudCB0byBjb25zdWx0IHRoZSBtYW51ZmFjdHVyZXIncworbWFjaGluZSBhcmNoaXRlY3R1cmUgbWFudWFsIGZvciB0aGlzIGluZm9ybWF0aW9uLgorCis8IS0tIEkgdGhpbmsgdGhpcyBpcyBwcmVtYXR1cmUtZG9jQGN5Z251cy5jb20sIDE3amFuMTk5MSAtLT4KKzwhLS0gVGhlcmUgdXNlZCB0byBiZSBhIHNlY3Rpb24gIlRlcm1pbm9sb2d5IiBoZXJlLCB3aGljaCBkZWZpbmVkIC0tPgorPCEtLSAiY29udGVudHMiLCAiYnl0ZSIsICJ3b3JkIiwgYW5kICJsb25nIi4gIERlZmluaW5nICJ3b3JkIiB0byBhbnkgLS0+Cis8IS0tIHBhcnRpY3VsYXIgc2l6ZSBpcyBjb25mdXNpbmcgd2hlbiB0aGUgLndvcmQgZGlyZWN0aXZlIG1heSBnZW5lcmF0ZSAxNiAtLT4KKzwhLS0gYml0cyBvbiBvbmUgbWFjaGluZSBhbmQgMzIgYml0cyBvbiBhbm90aGVyOyBpbiBnZW5lcmFsLCBmb3IgdGhlIHVzZXIgLS0+Cis8IS0tIHZlcnNpb24gb2YgdGhpcyBtYW51YWwsIG5vbmUgb2YgdGhlc2UgdGVybXMgc2VlbSBlc3NlbnRpYWwgdG8gZGVmaW5lLiAtLT4KKzwhLS0gVGhleSB3ZXJlIHVzZWQgdmVyeSBsaXR0bGUgZXZlbiBpbiB0aGUgZm9ybWVyIGRyYWZ0IG9mIHRoZSBtYW51YWw7IC0tPgorPCEtLSB0aGlzIGRyYWZ0IG1ha2VzIGFuIGVmZm9ydCB0byBhdm9pZCB0aGVtIChleGNlcHQgaW4gbmFtZXMgb2YgLS0+Cis8IS0tIGRpcmVjdGl2ZXMpLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01pY3JvQmxhemUtRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWljcm9CbGF6ZS1EaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgzZTRmMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL01pY3JvQmxhemUtRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1pY3JvQmxhemUgRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwjTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTWljcm9CbGF6ZS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNaWNyb0JsYXplLVN5bnRheC5odG1sI01pY3JvQmxhemUtU3ludGF4IiB0aXRsZT0iTWljcm9CbGF6ZSBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNaWNyb0JsYXplLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTWljcm9CbGF6ZS1TeW50YXguaHRtbCNNaWNyb0JsYXplLVN5bnRheCI+TWljcm9CbGF6ZSBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNaWNyb0JsYXplXzAwMmREZXBlbmRlbnQuaHRtbCNNaWNyb0JsYXplXzAwMmREZXBlbmRlbnQiPk1pY3JvQmxhemUtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yNS4xIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NaWNyb0JsYXplLWRpcmVjdGl2ZXMtMTM1NSI+PC9hPkEgbnVtYmVyIG9mIGFzc2VtYmxlciBkaXJlY3RpdmVzIGFyZSBhdmFpbGFibGUgZm9yIE1pY3JvQmxhemUuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi5kYXRhOCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+LC4uLjwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgaXMgYW4gYWxpYXMgZm9yIDxjb2RlPi5ieXRlPC9jb2RlPi4gRWFjaCBleHByZXNzaW9uIGlzIGFzc2VtYmxlZAoraW50byBhbiBlaWdodC1iaXQgdmFsdWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZGF0YTE2IDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4sLi4uPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBpcyBhbiBhbGlhcyBmb3IgPGNvZGU+Lmh3b3JkPC9jb2RlPi4gRWFjaCBleHByZXNzaW9uIGlzIGFzc2VtYmxlZAoraW50byBhbiAxNi1iaXQgdmFsdWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZGF0YTMyIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4sLi4uPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBpcyBhbiBhbGlhcyBmb3IgPGNvZGU+LndvcmQ8L2NvZGU+LiBFYWNoIGV4cHJlc3Npb24gaXMgYXNzZW1ibGVkCitpbnRvIGFuIDMyLWJpdCB2YWx1ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5lbnQgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPlssPC9jb2RlPjx2YXI+bGFiZWw8L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBpcyBhbiBhbGlhcyBmb3IgPGNvZGU+LmZ1bmM8L2NvZGU+IGRlbm90aW5nIHRoZSBzdGFydCBvZiBmdW5jdGlvbgorPHZhcj5uYW1lPC92YXI+IGF0IChvcHRpb25hbCkgPHZhcj5sYWJlbDwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5lbmQgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPlssPC9jb2RlPjx2YXI+bGFiZWw8L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBpcyBhbiBhbGlhcyBmb3IgPGNvZGU+LmVuZGZ1bmM8L2NvZGU+IGRlbm90aW5nIHRoZSBlbmQgb2YgZnVuY3Rpb24KKzx2YXI+bmFtZTwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5ncHdvcmQgPC9jb2RlPjx2YXI+bGFiZWw8L3Zhcj48Y29kZT4sLi4uPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBpcyBhbiBhbGlhcyBmb3IgPGNvZGU+LnJ2YTwvY29kZT4uICBUaGUgcmVzb2x2ZWQgYWRkcmVzcyBvZiA8dmFyPmxhYmVsPC92YXI+CitpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc2VjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi53ZWFrZXh0IDwvY29kZT48dmFyPmxhYmVsPC92YXI+PGRkPkRlY2xhcmUgdGhhdCA8dmFyPmxhYmVsPC92YXI+IGlzIGEgd2VhayBleHRlcm5hbCBzeW1ib2wuCisKKyAgICAgPGJyPjxkdD48Y29kZT4ucm9kYXRhPC9jb2RlPjxkZD5Td2l0Y2ggdG8gLnJvZGF0YSBzZWN0aW9uLiBFcXVpdmFsZW50IHRvIDxjb2RlPi5zZWN0aW9uIC5yb2RhdGE8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48Y29kZT4uc2RhdGEyPC9jb2RlPjxkZD5Td2l0Y2ggdG8gLnNkYXRhMiBzZWN0aW9uLiBFcXVpdmFsZW50IHRvIDxjb2RlPi5zZWN0aW9uIC5zZGF0YTI8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48Y29kZT4uc2RhdGE8L2NvZGU+PGRkPlN3aXRjaCB0byAuc2RhdGEgc2VjdGlvbi4gRXF1aXZhbGVudCB0byA8Y29kZT4uc2VjdGlvbiAuc2RhdGE8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48Y29kZT4uYnNzPC9jb2RlPjxkZD5Td2l0Y2ggdG8gLmJzcyBzZWN0aW9uLiBFcXVpdmFsZW50IHRvIDxjb2RlPi5zZWN0aW9uIC5ic3M8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48Y29kZT4uc2JzczwvY29kZT48ZGQ+U3dpdGNoIHRvIC5zYnNzIHNlY3Rpb24uIEVxdWl2YWxlbnQgdG8gPGNvZGU+LnNlY3Rpb24gLnNic3M8L2NvZGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NaWNyb0JsYXplLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWljcm9CbGF6ZS1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTI3NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWljcm9CbGF6ZS1TeW50YXguaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NaWNyb0JsYXplIFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwjTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iTWljcm9CbGF6ZS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNaWNyb0JsYXplLURpcmVjdGl2ZXMuaHRtbCNNaWNyb0JsYXplLURpcmVjdGl2ZXMiIHRpdGxlPSJNaWNyb0JsYXplIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNaWNyb0JsYXplLVN5bnRheCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1pY3JvQmxhemUtRGlyZWN0aXZlcy5odG1sI01pY3JvQmxhemUtRGlyZWN0aXZlcyI+TWljcm9CbGF6ZSBEaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwjTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Ij5NaWNyb0JsYXplLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMjUuMiBTeW50YXggZm9yIHRoZSBNaWNyb0JsYXplPC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik1pY3JvQmxhemVfMDAyZENoYXJzLmh0bWwjTWljcm9CbGF6ZV8wMDJkQ2hhcnMiPk1pY3JvQmxhemUtQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NaWNyb0JsYXplXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWljcm9CbGF6ZV8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTNkYjczCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWljcm9CbGF6ZV8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NaWNyb0JsYXplLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNaWNyb0JsYXplLVN5bnRheC5odG1sI01pY3JvQmxhemUtU3ludGF4IiB0aXRsZT0iTWljcm9CbGF6ZSBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNaWNyb0JsYXplLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJNaWNyb0JsYXplXzAwMmRDaGFycyI+PC9hPgorPHA+CitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1pY3JvQmxhemUtU3ludGF4Lmh0bWwjTWljcm9CbGF6ZS1TeW50YXgiPk1pY3JvQmxhemUgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4yNS4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLU1pY3JvQmxhemUtMTM1NiI+PC9hPjxhIG5hbWU9ImluZGV4LU1pY3JvQmxhemUtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xMzU3Ij48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIGEgbGluZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgY29tbWVudAordGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSwgdGhlIHdob2xlIGxpbmUKK2lzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNhbiBhbHNvIGJlIGEKK2xvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhCitwcmVwcm9jZXNzb3IgY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1NaWNyb0JsYXplLTEzNTgiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtTWljcm9CbGF6ZS0xMzU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtTWljcm9CbGF6ZS1saW5lLXNlcGFyYXRvci0xMzYwIj48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGUgc3RhdGVtZW50cyBvbiB0aGUgc2FtZQorbGluZS4KKworPCEtLSBDb3B5cmlnaHQgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgLS0+Cis8IS0tIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9NaWNyb0JsYXplXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQ5NDRjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWljcm9CbGF6ZS1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik02OEhDMTFfMDAyZERlcGVuZGVudC5odG1sI002OEhDMTFfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik02OEhDMTEtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUlQU18wMDJkRGVwZW5kZW50Lmh0bWwjTUlQU18wMDJkRGVwZW5kZW50IiB0aXRsZT0iTUlQUy1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNaWNyb0JsYXplLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iTWljcm9CbGF6ZV8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1JUFNfMDAyZERlcGVuZGVudC5odG1sI01JUFNfMDAyZERlcGVuZGVudCI+TUlQUy1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNNjhIQzExXzAwMmREZXBlbmRlbnQuaHRtbCNNNjhIQzExXzAwMmREZXBlbmRlbnQiPk02OEhDMTEtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjI1IE1pY3JvQmxhemUgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTWljcm9CbGF6ZS1hcmNoaXRlY3R1cmVzLTEzNTMiPjwvYT5UaGUgWGlsaW54IE1pY3JvQmxhemUgcHJvY2Vzc29yIGZhbWlseSBpbmNsdWRlcyBzZXZlcmFsIHZhcmlhbnRzLCBhbGwgdXNpbmcKK3RoZSBzYW1lIGNvcmUgaW5zdHJ1Y3Rpb24gc2V0LiAgVGhpcyBjaGFwdGVyIGNvdmVycyBmZWF0dXJlcyBvZiB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+Cithc3NlbWJsZXIgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIE1pY3JvQmxhemUgYXJjaGl0ZWN0dXJlLiAgRm9yIGRldGFpbHMgYWJvdXQKK3RoZSBNaWNyb0JsYXplIGluc3RydWN0aW9uIHNldCwgcGxlYXNlIHNlZSB0aGUgPGNpdGU+TWljcm9CbGF6ZSBQcm9jZXNzb3IKK1JlZmVyZW5jZSBHdWlkZSAoVUcwODEpPC9jaXRlPiBhdmFpbGFibGUgYXQgd3d3LnhpbGlueC5jb20uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LU1pY3JvQmxhemUtc3VwcG9ydC0xMzU0Ij48L2E+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJNaWNyb0JsYXplLURpcmVjdGl2ZXMuaHRtbCNNaWNyb0JsYXplLURpcmVjdGl2ZXMiPk1pY3JvQmxhemUgRGlyZWN0aXZlczwvYT46ICAgICAgICAgICAgRGlyZWN0aXZlcyBmb3IgTWljcm9CbGF6ZSBQcm9jZXNzb3JzLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Ik1pY3JvQmxhemUtU3ludGF4Lmh0bWwjTWljcm9CbGF6ZS1TeW50YXgiPk1pY3JvQmxhemUgU3ludGF4PC9hPjogICAgICAgICAgICAgICAgU3ludGF4IGZvciB0aGUgTWljcm9CbGF6ZQorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTlMzMkstU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9OUzMySy1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDA5YjdiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTlMzMkstU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TlMzMksgU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJOUzMyS18wMDJkRGVwZW5kZW50Lmh0bWwjTlMzMktfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik5TMzJLLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5TMzJLLVN5bnRheCI+PC9hPgorPHA+CitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik5TMzJLXzAwMmREZXBlbmRlbnQuaHRtbCNOUzMyS18wMDJkRGVwZW5kZW50Ij5OUzMySy1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjI5LjEgU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik5TMzJLXzAwMmRDaGFycy5odG1sI05TMzJLXzAwMmRDaGFycyI+TlMzMkstQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9OUzMyS18wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL05TMzJLXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NTg4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9OUzMyS18wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5OUzMySy1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTlMzMkstU3ludGF4Lmh0bWwjTlMzMkstU3ludGF4IiB0aXRsZT0iTlMzMksgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTlMzMkstQ2hhcnMiPjwvYT4KKzxhIG5hbWU9Ik5TMzJLXzAwMmRDaGFycyI+PC9hPgorPHA+CitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik5TMzJLLVN5bnRheC5odG1sI05TMzJLLVN5bnRheCI+TlMzMksgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4yOS4xLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLU5TMzJLLTE1MjUiPjwvYT48YSBuYW1lPSJpbmRleC1OUzMySy1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE1MjYiPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFyaW5nIGFueXdoZXJlIG9uIGEgbGluZSBpbmRpY2F0ZXMgdGhlCitzdGFydCBvZiBhIGNvbW1lbnQgdGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhhdCBsaW5lLgorCisgICA8cD5JZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lIHRoZW4gdGhlIHdob2xlCitsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNhbiBhbHNvIGJlIGEKK2xvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+SWYgU2VxdWVudCBjb21wYXRpYmlsaXR5IGhhcyBiZWVuIGNvbmZpZ3VyZWQgaW50byB0aGUgYXNzZW1ibGVyIHRoZW4KK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGFwcGVhcmluZyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIGEgbGluZSB3aWxsCithbHNvIGluZGljYXRlIHRoZSBzdGFydCBvZiBhIGxpbmUgY29tbWVudC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1OUzMySy0xNTI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLU5TMzJLLTE1MjgiPjwvYT48YSBuYW1lPSJpbmRleC1OUzMySy1saW5lLXNlcGFyYXRvci0xNTI5Ij48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGUgc3RhdGVtZW50cyBvbiB0aGUgc2FtZQorbGluZS4KKworPCEtLSBDb3B5cmlnaHQgMjAwMSwgMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL05TMzJLXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL05TMzJLXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTM1NzkyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTlMzMktfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk5TMzJLLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTVNQNDMwXzAwMmREZXBlbmRlbnQuaHRtbCNNU1A0MzBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ik1TUDQzMC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSF8wMDJkRGVwZW5kZW50Lmh0bWwjU0hfMDAyZERlcGVuZGVudCIgdGl0bGU9IlNILURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5TMzJLLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iTlMzMktfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSF8wMDJkRGVwZW5kZW50Lmh0bWwjU0hfMDAyZERlcGVuZGVudCI+U0gtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTVNQNDMwXzAwMmREZXBlbmRlbnQuaHRtbCNNU1A0MzBfMDAyZERlcGVuZGVudCI+TVNQNDMwLURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4yOSBOUzMySyBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1OMzJLLXN1cHBvcnQtMTUyNCI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iTlMzMkstU3ludGF4Lmh0bWwjTlMzMkstU3ludGF4Ij5OUzMySyBTeW50YXg8L2E+OiAgICAgICAgICAgICAgICBTeW50YXgKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL05vYWx0bWFjcm8uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL05vYWx0bWFjcm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjVmY2RmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTm9hbHRtYWNyby5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk5vYWx0bWFjcm8gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1SSS5odG1sI01SSSIgdGl0bGU9Ik1SSSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik5vbGlzdC5odG1sI05vbGlzdCIgdGl0bGU9Ik5vbGlzdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5vYWx0bWFjcm8iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTm9saXN0Lmh0bWwjTm9saXN0Ij5Ob2xpc3Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny44MSA8Y29kZT4ubm9hbHRtYWNybzwvY29kZT48L2gzPgorCis8cD5EaXNhYmxlIGFsdGVybmF0ZSBtYWNybyBtb2RlLiAgU2VlIDxhIGhyZWY9IkFsdG1hY3JvLmh0bWwjQWx0bWFjcm8iPkFsdG1hY3JvPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTm9saXN0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Ob2xpc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTUzMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTm9saXN0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Tm9saXN0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJOb2FsdG1hY3JvLmh0bWwjTm9hbHRtYWNybyIgdGl0bGU9Ik5vYWx0bWFjcm8iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPY3RhLmh0bWwjT2N0YSIgdGl0bGU9Ik9jdGEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJOb2xpc3QiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT2N0YS5odG1sI09jdGEiPk9jdGE8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJOb2FsdG1hY3JvLmh0bWwjTm9hbHRtYWNybyI+Tm9hbHRtYWNybzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny44MiA8Y29kZT4ubm9saXN0PC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibm9saXN0XzAwN2QtZGlyZWN0aXZlLTQxMSI+PC9hPjxhIG5hbWU9ImluZGV4LWxpc3RpbmctY29udHJvbF8wMDJjLXR1cm5pbmctb2ZmLTQxMiI+PC9hPkNvbnRyb2wgKGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIDxjb2RlPi5saXN0PC9jb2RlPiBkaXJlY3RpdmUpIHdoZXRoZXIgb3IKK25vdCBhc3NlbWJseSBsaXN0aW5ncyBhcmUgZ2VuZXJhdGVkLiAgVGhlc2UgdHdvIGRpcmVjdGl2ZXMgbWFpbnRhaW4gYW4KK2ludGVybmFsIGNvdW50ZXIgKHdoaWNoIGlzIHplcm8gaW5pdGlhbGx5KS4gICA8Y29kZT4ubGlzdDwvY29kZT4gaW5jcmVtZW50cyB0aGUKK2NvdW50ZXIsIGFuZCA8Y29kZT4ubm9saXN0PC9jb2RlPiBkZWNyZW1lbnRzIGl0LiAgQXNzZW1ibHkgbGlzdGluZ3MgYXJlCitnZW5lcmF0ZWQgd2hlbmV2ZXIgdGhlIGNvdW50ZXIgaXMgZ3JlYXRlciB0aGFuIHplcm8uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL05vdGVzXzAwMmRpODYwLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Ob3Rlc18wMDJkaTg2MC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ODgyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Ob3Rlc18wMDJkaTg2MC5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk5vdGVzLWk4NjAgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Imk4NjBfMDAyZERlcGVuZGVudC5odG1sI2k4NjBfMDAyZERlcGVuZGVudCIgdGl0bGU9Imk4NjAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3B0aW9uc18wMDJkaTg2MC5odG1sI09wdGlvbnNfMDAyZGk4NjAiIHRpdGxlPSJPcHRpb25zLWk4NjAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJOb3Rlcy1pODYwIj48L2E+Cis8YSBuYW1lPSJOb3Rlc18wMDJkaTg2MCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPcHRpb25zXzAwMmRpODYwLmh0bWwjT3B0aW9uc18wMDJkaTg2MCI+T3B0aW9ucy1pODYwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTg2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTg2MF8wMDJkRGVwZW5kZW50Ij5pODYwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTYuMSBpODYwIE5vdGVzPC9oND4KKworPHA+VGhpcyBpcyBhIGZhaXJseSBjb21wbGV0ZSBpODYwIGFzc2VtYmxlciB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggdGhlCitVTklYIFN5c3RlbSBWLzg2MCBSZWxlYXNlIDQgYXNzZW1ibGVyLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBjdXJyZW50bHkKK3N1cHBvcnQgU1ZSNCBQSUMgKGkuZS4sIDxjb2RlPkBHT1QsIEBHT1RPRkYsIEBQTFQ8L2NvZGU+KS4KKworICAgPHA+TGlrZSB0aGUgU1ZSNC84NjAgYXNzZW1ibGVyLCB0aGUgb3V0cHV0IG9iamVjdCBmb3JtYXQgaXMgRUxGMzIuIEN1cnJlbnRseSwKK3RoaXMgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIG9iamVjdCBmb3JtYXQuIElmIHRoZXJlIGlzIHN1ZmZpY2llbnQgaW50ZXJlc3QsCitvdGhlciBmb3JtYXRzIHN1Y2ggYXMgQ09GRiBtYXkgYmUgaW1wbGVtZW50ZWQuCisKKyAgIDxwPkJvdGggdGhlIEludGVsIGFuZCBBVCZhbXA7VC9TVlI0IHN5bnRheGVzIGFyZSBzdXBwb3J0ZWQsIHdpdGggdGhlIGxhdHRlcgorYmVpbmcgdGhlIGRlZmF1bHQuICBPbmUgZGlmZmVyZW5jZSBpcyB0aGF0IEFUJmFtcDtUIHN5bnRheCByZXF1aXJlcyB0aGUgJyUnCitwcmVmaXggb24gcmVnaXN0ZXIgbmFtZXMgd2hpbGUgSW50ZWwgc3ludGF4IGRvZXMgbm90LiAgQW5vdGhlciBkaWZmZXJlbmNlCitpcyBpbiB0aGUgc3BlY2lmaWNhdGlvbiBvZiByZWxvY2F0YWJsZSBleHByZXNzaW9ucy4gIFRoZSBJbnRlbCBzeW50YXgKK2lzIDxjb2RlPmhhJWV4cHJlc3Npb248L2NvZGU+IHdoZXJlYXMgdGhlIFNWUjQgc3ludGF4IGlzIDxjb2RlPltleHByZXNzaW9uXUBoYTwvY29kZT4KKyhhbmQgc2ltaWxhcmx5IGZvciB0aGUgImwiIGFuZCAiaCIgc2VsZWN0b3JzKS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTnVtYmVycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvTnVtYmVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzhiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9OdW1iZXJzLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TnVtYmVycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIiB0aXRsZT0iQ29uc3RhbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ2hhcmFjdGVycy5odG1sI0NoYXJhY3RlcnMiIHRpdGxlPSJDaGFyYWN0ZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTnVtYmVycyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNoYXJhY3RlcnMuaHRtbCNDaGFyYWN0ZXJzIj5DaGFyYWN0ZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIj5Db25zdGFudHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjYuMiBOdW1iZXIgQ29uc3RhbnRzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtY29uc3RhbnRzXzAwMmMtbnVtYmVyLTE2NyI+PC9hPjxhIG5hbWU9ImluZGV4LW51bWJlci1jb25zdGFudHMtMTY4Ij48L2E+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gZGlzdGluZ3Vpc2hlcyB0aHJlZSBraW5kcyBvZiBudW1iZXJzIGFjY29yZGluZyB0byBob3cgdGhleQorYXJlIHN0b3JlZCBpbiB0aGUgdGFyZ2V0IG1hY2hpbmUuICA8ZW0+SW50ZWdlcnM8L2VtPiBhcmUgbnVtYmVycyB0aGF0Cit3b3VsZCBmaXQgaW50byBhbiA8Y29kZT5pbnQ8L2NvZGU+IGluIHRoZSBDIGxhbmd1YWdlLiAgPGVtPkJpZ251bXM8L2VtPiBhcmUKK2ludGVnZXJzLCBidXQgdGhleSBhcmUgc3RvcmVkIGluIG1vcmUgdGhhbiAzMiBiaXRzLiAgPGVtPkZsb251bXM8L2VtPgorYXJlIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGRlc2NyaWJlZCBiZWxvdy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkludGVnZXJzLmh0bWwjSW50ZWdlcnMiPkludGVnZXJzPC9hPjogICAgICAgICAgICAgICAgICAgICBJbnRlZ2VycworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iQmlnbnVtcy5odG1sI0JpZ251bXMiPkJpZ251bXM8L2E+OiAgICAgICAgICAgICAgICAgICAgICBCaWdudW1zCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJGbG9udW1zLmh0bWwjRmxvbnVtcyI+RmxvbnVtczwvYT46ICAgICAgICAgICAgICAgICAgICAgIEZsb251bXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL09iamVjdC1BdHRyaWJ1dGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PYmplY3QtQXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGUwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PYmplY3QtQXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk9iamVjdCBBdHRyaWJ1dGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik9iamVjdC1BdHRyaWJ1dGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+OCBPYmplY3QgQXR0cmlidXRlczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9iamVjdC1hdHRyaWJ1dGVzLTUxMyI+PC9hPgorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYXNzZW1ibGVzIHNvdXJjZSBmaWxlcyB3cml0dGVuIGZvciBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZQoraW50byBvYmplY3QgZmlsZXMgZm9yIHRoYXQgYXJjaGl0ZWN0dXJlLiAgQnV0IG5vdCBhbGwgb2JqZWN0IGZpbGVzIGFyZSBhbGlrZS4gCitNYW55IGFyY2hpdGVjdHVyZXMgc3VwcG9ydCBpbmNvbXBhdGlibGUgdmFyaWF0aW9ucy4gIEZvciBpbnN0YW5jZSwgZmxvYXRpbmcKK3BvaW50IGFyZ3VtZW50cyBtaWdodCBiZSBwYXNzZWQgaW4gZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGlmIHRoZSBvYmplY3QgZmlsZQorcmVxdWlyZXMgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCZtZGFzaDtvciBmbG9hdGluZyBwb2ludCBhcmd1bWVudHMgbWlnaHQgYmUKK3Bhc3NlZCBpbiBpbnRlZ2VyIHJlZ2lzdGVycyBpZiB0aGUgb2JqZWN0IGZpbGUgc3VwcG9ydHMgcHJvY2Vzc29ycyB3aXRoIG5vCitoYXJkd2FyZSBmbG9hdGluZyBwb2ludCB1bml0LiAgT3IsIGlmIHR3byBvYmplY3RzIGFyZSBidWlsdCBmb3IgZGlmZmVyZW50CitnZW5lcmF0aW9ucyBvZiB0aGUgc2FtZSBhcmNoaXRlY3R1cmUsIHRoZSBjb21iaW5hdGlvbiBtYXkgcmVxdWlyZSB0aGUKK25ld2VyIGdlbmVyYXRpb24gYXQgcnVuLXRpbWUuCisKKyAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGR1cmluZyBhbmQgYWZ0ZXIgbGlua2luZy4gIEF0IGxpbmsgdGltZSwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGNhbiB3YXJuIGFib3V0IGluY29tcGF0aWJsZSBvYmplY3QgZmlsZXMuICBBZnRlciBsaW5rCit0aW1lLCB0b29scyBsaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZGI8L3NwYW4+PC9zYW1wPiBjYW4gdXNlIGl0IHRvIHByb2Nlc3MgdGhlIGxpbmtlZCBmaWxlCitjb3JyZWN0bHkuCisKKyAgIDxwPkNvbXBhdGliaWxpdHkgaW5mb3JtYXRpb24gaXMgcmVjb3JkZWQgYXMgYSBzZXJpZXMgb2Ygb2JqZWN0IGF0dHJpYnV0ZXMuICBFYWNoCithdHRyaWJ1dGUgaGFzIGEgPGRmbj52ZW5kb3I8L2Rmbj4sIDxkZm4+dGFnPC9kZm4+LCBhbmQgPGRmbj52YWx1ZTwvZGZuPi4gIFRoZSB2ZW5kb3IgaXMgYQorc3RyaW5nLCBhbmQgaW5kaWNhdGVzIHdobyBzZXRzIHRoZSBtZWFuaW5nIG9mIHRoZSB0YWcuICBUaGUgdGFnIGlzIGFuIGludGVnZXIsCithbmQgaW5kaWNhdGVzIHdoYXQgcHJvcGVydHkgdGhlIGF0dHJpYnV0ZSBkZXNjcmliZXMuICBUaGUgdmFsdWUgbWF5IGJlIGEgc3RyaW5nCitvciBhbiBpbnRlZ2VyLCBhbmQgaW5kaWNhdGVzIGhvdyB0aGUgcHJvcGVydHkgYWZmZWN0cyB0aGlzIG9iamVjdC4gIE1pc3NpbmcKK2F0dHJpYnV0ZXMgYXJlIHRoZSBzYW1lIGFzIGF0dHJpYnV0ZXMgd2l0aCBhIHplcm8gdmFsdWUgb3IgZW1wdHkgc3RyaW5nIHZhbHVlLgorCisgICA8cD5PYmplY3QgYXR0cmlidXRlcyB3ZXJlIGRldmVsb3BlZCBhcyBwYXJ0IG9mIHRoZSBBQkkgZm9yIHRoZSBBUk0gQXJjaGl0ZWN0dXJlLiAKK1RoZSBmaWxlIGZvcm1hdCBpcyBkb2N1bWVudGVkIGluIDxjaXRlPkVMRiBmb3IgdGhlIEFSTSBBcmNoaXRlY3R1cmU8L2NpdGU+LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iR05VLU9iamVjdC1BdHRyaWJ1dGVzLmh0bWwjR05VLU9iamVjdC1BdHRyaWJ1dGVzIj5HTlUgT2JqZWN0IEF0dHJpYnV0ZXM8L2E+OiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gT2JqZWN0IEF0dHJpYnV0ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkRlZmluaW5nLU5ldy1PYmplY3QtQXR0cmlidXRlcy5odG1sI0RlZmluaW5nLU5ldy1PYmplY3QtQXR0cmlidXRlcyI+RGVmaW5pbmcgTmV3IE9iamVjdCBBdHRyaWJ1dGVzPC9hPjogICAgICAgRGVmaW5pbmcgTmV3IE9iamVjdCBBdHRyaWJ1dGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PYmplY3QtRm9ybWF0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT2JqZWN0LUZvcm1hdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjAyMGIxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT2JqZWN0LUZvcm1hdHMuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PYmplY3QgRm9ybWF0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyIgdGl0bGU9Ik92ZXJ2aWV3Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR05VLUFzc2VtYmxlci5odG1sI0dOVS1Bc3NlbWJsZXIiIHRpdGxlPSJHTlUgQXNzZW1ibGVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29tbWFuZC1MaW5lLmh0bWwjQ29tbWFuZC1MaW5lIiB0aXRsZT0iQ29tbWFuZCBMaW5lIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT2JqZWN0LUZvcm1hdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ29tbWFuZC1MaW5lLmh0bWwjQ29tbWFuZC1MaW5lIj5Db21tYW5kIExpbmU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHTlUtQXNzZW1ibGVyLmh0bWwjR05VLUFzc2VtYmxlciI+R05VIEFzc2VtYmxlcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4zIE9iamVjdCBGaWxlIEZvcm1hdHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vYmplY3QtZmlsZS1mb3JtYXQtMjQiPjwvYT5UaGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGFzc2VtYmxlciBjYW4gYmUgY29uZmlndXJlZCB0byBwcm9kdWNlIHNldmVyYWwgYWx0ZXJuYXRpdmUKK29iamVjdCBmaWxlIGZvcm1hdHMuICBGb3IgdGhlIG1vc3QgcGFydCwgdGhpcyBkb2VzIG5vdCBhZmZlY3QgaG93IHlvdQord3JpdGUgYXNzZW1ibHkgbGFuZ3VhZ2UgcHJvZ3JhbXM7IGJ1dCBkaXJlY3RpdmVzIGZvciBkZWJ1Z2dpbmcgc3ltYm9scworYXJlIHR5cGljYWxseSBkaWZmZXJlbnQgaW4gZGlmZmVyZW50IGZpbGUgZm9ybWF0cy4gIFNlZSA8YSBocmVmPSJTeW1ib2wtQXR0cmlidXRlcy5odG1sI1N5bWJvbC1BdHRyaWJ1dGVzIj5TeW1ib2wgQXR0cmlidXRlczwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL09iamVjdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxYjNjZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL09iamVjdC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk9iamVjdCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyIgdGl0bGU9Ik92ZXJ2aWV3Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW5wdXQtRmlsZXMuaHRtbCNJbnB1dC1GaWxlcyIgdGl0bGU9IklucHV0IEZpbGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRXJyb3JzLmh0bWwjRXJyb3JzIiB0aXRsZT0iRXJyb3JzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT2JqZWN0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVycm9ycy5odG1sI0Vycm9ycyI+RXJyb3JzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5wdXQtRmlsZXMuaHRtbCNJbnB1dC1GaWxlcyI+SW5wdXQgRmlsZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNiBPdXRwdXQgKE9iamVjdCkgRmlsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9iamVjdC1maWxlLTM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3V0cHV0LWZpbGUtMzUiPjwvYT48YSBuYW1lPSJpbmRleC1hXzAwMmVvdXQtMzYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZW8tMzciPjwvYT5FdmVyeSB0aW1lIHlvdSBydW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaXQgcHJvZHVjZXMgYW4gb3V0cHV0IGZpbGUsIHdoaWNoIGlzCit5b3VyIGFzc2VtYmx5IGxhbmd1YWdlIHByb2dyYW0gdHJhbnNsYXRlZCBpbnRvIG51bWJlcnMuICBUaGlzIGZpbGUKK2lzIHRoZSBvYmplY3QgZmlsZS4gIEl0cyBkZWZhdWx0IG5hbWUgaXMKKzxjb2RlPmEub3V0PC9jb2RlPi4gCitZb3UgY2FuIGdpdmUgaXQgYW5vdGhlciBuYW1lIGJ5IHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbzwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gIENvbnZlbnRpb25hbGx5LAorb2JqZWN0IGZpbGUgbmFtZXMgZW5kIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5vPC9zcGFuPjwvc2FtcD4uICBUaGUgZGVmYXVsdCBuYW1lIGlzIHVzZWQgZm9yIGhpc3RvcmljYWwKK3JlYXNvbnM6IG9sZGVyIGFzc2VtYmxlcnMgd2VyZSBjYXBhYmxlIG9mIGFzc2VtYmxpbmcgc2VsZi1jb250YWluZWQgcHJvZ3JhbXMKK2RpcmVjdGx5IGludG8gYSBydW5uYWJsZSBwcm9ncmFtLiAgKEZvciBzb21lIGZvcm1hdHMsIHRoaXMgaXNuJ3QgY3VycmVudGx5Citwb3NzaWJsZSwgYnV0IGl0IGNhbiBiZSBkb25lIGZvciB0aGUgPGNvZGU+YS5vdXQ8L2NvZGU+IGZvcm1hdC4pCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmtlci0zOCI+PC9hPjxhIG5hbWU9ImluZGV4LWxkLTM5Ij48L2E+VGhlIG9iamVjdCBmaWxlIGlzIG1lYW50IGZvciBpbnB1dCB0byB0aGUgbGlua2VyIDxjb2RlPmxkPC9jb2RlPi4gIEl0IGNvbnRhaW5zCithc3NlbWJsZWQgcHJvZ3JhbSBjb2RlLCBpbmZvcm1hdGlvbiB0byBoZWxwIDxjb2RlPmxkPC9jb2RlPiBpbnRlZ3JhdGUKK3RoZSBhc3NlbWJsZWQgcHJvZ3JhbSBpbnRvIGEgcnVubmFibGUgZmlsZSwgYW5kIChvcHRpb25hbGx5KSBzeW1ib2xpYworaW5mb3JtYXRpb24gZm9yIHRoZSBkZWJ1Z2dlci4KKworPCEtLSBsaW5rIGFib3ZlIHRvIHNvbWUgaW5mbyBmaWxlKHMpIGxpa2UgdGhlIGRlc2NyaXB0aW9uIG9mIGEub3V0LiAtLT4KKzwhLS0gZG9uJ3QgZm9yZ2V0IHRvIGRlc2NyaWJlIEBzY3tnbnV9IGluZm8gYXMgd2VsbCBhcyBVbml4IGxvc3NhZ2UuIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT2N0YS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT2N0YS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYjA1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PY3RhLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T2N0YSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTm9saXN0Lmh0bWwjTm9saXN0IiB0aXRsZT0iTm9saXN0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT2Zmc2V0Lmh0bWwjT2Zmc2V0IiB0aXRsZT0iT2Zmc2V0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT2N0YSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPZmZzZXQuaHRtbCNPZmZzZXQiPk9mZnNldDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik5vbGlzdC5odG1sI05vbGlzdCI+Tm9saXN0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjgzIDxjb2RlPi5vY3RhIDwvY29kZT48dmFyPmJpZ251bXM8L3Zhcj48L2gzPgorCis8IS0tIEZJWE1FOiBkb3VibGUgc2l6ZSBlbWl0dGVkIGZvciAib2N0YSIgb24gaTk2MCwgb3RoZXJzPyAgT3Igd2Fybj8gLS0+Cis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym9jdGFfMDA3ZC1kaXJlY3RpdmUtNDEzIj48L2E+PGEgbmFtZT0iaW5kZXgtaW50ZWdlcl8wMDJjLTE2XzAwMmRieXRlLTQxNCI+PC9hPjxhIG5hbWU9ImluZGV4LXNpeHRlZW4tYnl0ZS1pbnRlZ2VyLTQxNSI+PC9hPlRoaXMgZGlyZWN0aXZlIGV4cGVjdHMgemVybyBvciBtb3JlIGJpZ251bXMsIHNlcGFyYXRlZCBieSBjb21tYXMuICBGb3IgZWFjaAorYmlnbnVtLCBpdCBlbWl0cyBhIDE2LWJ5dGUgaW50ZWdlci4KKworICAgPHA+VGhlIHRlcm0gJmxkcXVvO29jdGEmcmRxdW87IGNvbWVzIGZyb20gY29udGV4dHMgaW4gd2hpY2ggYSAmbGRxdW87d29yZCZyZHF1bzsgaXMgdHdvIGJ5dGVzOworaGVuY2UgPGVtPm9jdGE8L2VtPi13b3JkIGZvciAxNiBieXRlcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT2Zmc2V0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PZmZzZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUxZjAzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT2Zmc2V0Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T2Zmc2V0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPY3RhLmh0bWwjT2N0YSIgdGl0bGU9Ik9jdGEiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPcmcuaHRtbCNPcmciIHRpdGxlPSJPcmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPZmZzZXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3JnLmh0bWwjT3JnIj5Pcmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPY3RhLmh0bWwjT2N0YSI+T2N0YTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny44NCA8Y29kZT4ub2Zmc2V0IDwvY29kZT48dmFyPmxvYzwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdib2Zmc2V0XzAwN2QtZGlyZWN0aXZlLTQxNiI+PC9hPlNldCB0aGUgbG9jYXRpb24gY291bnRlciB0byA8dmFyPmxvYzwvdmFyPiBpbiB0aGUgYWJzb2x1dGUgc2VjdGlvbi4gIDx2YXI+bG9jPC92YXI+IG11c3QKK2JlIGFuIGFic29sdXRlIGV4cHJlc3Npb24uICBUaGlzIGRpcmVjdGl2ZSBtYXkgYmUgdXNlZnVsIGZvciBkZWZpbmluZworc3ltYm9scyB3aXRoIGFic29sdXRlIHZhbHVlcy4gIERvIG5vdCBjb25mdXNlIGl0IHdpdGggdGhlIDxjb2RlPi5vcmc8L2NvZGU+CitkaXJlY3RpdmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL09wY29kZXMtZm9yLWk4NjAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL09wY29kZXMtZm9yLWk4NjAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGRlOGIxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT3Bjb2Rlcy1mb3ItaTg2MC5odG1sCkBAIC0wLDAgKzEsMTAxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PcGNvZGVzIGZvciBpODYwIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpODYwXzAwMmREZXBlbmRlbnQuaHRtbCNpODYwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpODYwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk4NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpODYwIiB0aXRsZT0iRGlyZWN0aXZlcy1pODYwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ludGF4LW9mLWk4NjAuaHRtbCNTeW50YXgtb2YtaTg2MCIgdGl0bGU9IlN5bnRheCBvZiBpODYwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3Bjb2Rlcy1mb3ItaTg2MCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTeW50YXgtb2YtaTg2MC5odG1sI1N5bnRheC1vZi1pODYwIj5TeW50YXggb2YgaTg2MDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk4NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpODYwIj5EaXJlY3RpdmVzLWk4NjA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpODYwXzAwMmREZXBlbmRlbnQuaHRtbCNpODYwXzAwMmREZXBlbmRlbnQiPmk4NjAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNi40IGk4NjAgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wY29kZXNfMDAyYy1pODYwLTEwNzUiPjwvYT48YSBuYW1lPSJpbmRleC1pODYwLW9wY29kZXMtMTA3NiI+PC9hPkFsbCBvZiB0aGUgSW50ZWwgaTg2MFhSIGFuZCBpODYwWFAgbWFjaGluZSBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZC4gUGxlYXNlIHNlZQorZWl0aGVyIDxlbT5pODYwIE1pY3JvcHJvY2Vzc29yIFByb2dyYW1tZXIncyBSZWZlcmVuY2UgTWFudWFsPC9lbT4gb3IgPGVtPmk4NjAgTWljcm9wcm9jZXNzb3IgQXJjaGl0ZWN0dXJlPC9lbT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xNi40LjEgT3RoZXIgaW5zdHJ1Y3Rpb24gc3VwcG9ydCAocHNldWRvLWluc3RydWN0aW9ucyk8L2g1PgorCis8cD5Gb3IgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgb3RoZXIgaTg2MCBhc3NlbWJsZXJzLCBhIG51bWJlciBvZgorcHNldWRvLWluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkLiBXaGlsZSB0aGVzZSBhcmUgc3VwcG9ydGVkLCB0aGV5IGFyZQorYSB2ZXJ5IHVuZGVzaXJhYmxlIGZlYXR1cmUgdGhhdCBzaG91bGQgYmUgYXZvaWRlZCAmbmRhc2g7IGluIHBhcnRpY3VsYXIsIHdoZW4KK3RoZXkgcmVzdWx0IGluIGFuIGV4cGFuc2lvbiB0byBtdWx0aXBsZSBhY3R1YWwgaTg2MCBpbnN0cnVjdGlvbnMuIEJlbG93CithcmUgdGhlIHBzZXVkby1pbnN0cnVjdGlvbnMgdGhhdCByZXN1bHQgaW4gZXhwYW5zaW9ucy4KKyAgICAgPHVsPgorPGxpPkxvYWQgbGFyZ2UgaW1tZWRpYXRlIGludG8gZ2VuZXJhbCByZWdpc3RlcjoKKworICAgICA8cD5UaGUgcHNldWRvLWluc3RydWN0aW9uIDxjb2RlPm1vdiBpbW0sJXJuPC9jb2RlPiAod2hlcmUgdGhlIGltbWVkaWF0ZSBkb2VzCitub3QgZml0IHdpdGhpbiBhIHNpZ25lZCAxNi1iaXQgZmllbGQpIHdpbGwgYmUgZXhwYW5kZWQgaW50bzoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgb3JoIGxhcmdlX2ltbUBoLCVyMCwlcm4KKyAgICAgICAgICBvciBsYXJnZV9pbW1AbCwlcm4sJXJuCis8L3ByZT4KKyAgICAgPGxpPkxvYWQvc3RvcmUgd2l0aCByZWxvY2F0YWJsZSBhZGRyZXNzIGV4cHJlc3Npb246CisKKyAgICAgPHA+Rm9yIGV4YW1wbGUsIHRoZSBwc2V1ZG8taW5zdHJ1Y3Rpb24gPGNvZGU+bGQuYiBhZGRyX2V4cCglcngpLCVybjwvY29kZT4KK3dpbGwgYmUgZXhwYW5kZWQgaW50bzoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgb3JoIGFkZHJfZXhwQGhhLCVyeCwlcjMxCisgICAgICAgICAgbGQubCBhZGRyX2V4cEBsKCVyMzEpLCVybgorPC9wcmU+CisgICAgIDxwPlRoZSBhbmFsb2dvdXMgZXhwYW5zaW9ucyBhcHBseSB0byA8Y29kZT5sZC54LCBzdC54LCBmbGQueCwgcGZsZC54LCBmc3QueDwvY29kZT4sIGFuZCA8Y29kZT5wc3QueDwvY29kZT4gYXMgd2VsbC4gCis8bGk+U2lnbmVkIGxhcmdlIGltbWVkaWF0ZSB3aXRoIGFkZC9zdWJ0cmFjdDoKKworICAgICA8cD5JZiBhbnkgb2YgdGhlIGFyaXRobWV0aWMgb3BlcmF0aW9ucyA8Y29kZT5hZGRzLCBhZGR1LCBzdWJzLCBzdWJ1PC9jb2RlPiBhcmUgdXNlZAord2l0aCBhbiBpbW1lZGlhdGUgbGFyZ2VyIHRoYW4gMTYtYml0cyAoc2lnbmVkKSwgdGhlbiB0aGV5IHdpbGwgYmUgZXhwYW5kZWQuIAorRm9yIGluc3RhbmNlLCB0aGUgcHNldWRvLWluc3RydWN0aW9uIDxjb2RlPmFkZHMgbGFyZ2VfaW1tLCVyeCwlcm48L2NvZGU+IGV4cGFuZHMgdG86CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIG9yaCBsYXJnZV9pbW1AaCwlcjAsJXIzMQorICAgICAgICAgIG9yIGxhcmdlX2ltbUBsLCVyMzEsJXIzMQorICAgICAgICAgIGFkZHMgJXIzMSwlcngsJXJuCis8L3ByZT4KKyAgICAgPGxpPlVuc2lnbmVkIGxhcmdlIGltbWVkaWF0ZSB3aXRoIGxvZ2ljYWwgb3BlcmF0aW9uczoKKworICAgICA8cD5Mb2dpY2FsIG9wZXJhdGlvbnMgKDxjb2RlPm9yLCBhbmRub3QsIG9yLCB4b3I8L2NvZGU+KSBhbHNvIHJlc3VsdCBpbiBleHBhbnNpb25zLiAKK1RoZSBwc2V1ZG8taW5zdHJ1Y3Rpb24gPGNvZGU+b3IgbGFyZ2VfaW1tLCVyeCwlcm48L2NvZGU+IHJlc3VsdHMgaW46CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIG9yaCBsYXJnZV9pbW1AaCwlcngsJXIzMQorICAgICAgICAgIG9yIGxhcmdlX2ltbUBsLCVyMzEsJXJuCis8L3ByZT4KKyAgICAgPHA+U2ltaWxhcmx5IGZvciB0aGUgb3RoZXJzLCBleGNlcHQgZm9yIDxjb2RlPmFuZDwvY29kZT4gd2hpY2ggZXhwYW5kcyB0bzoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgYW5kbm90ICgtMSAtIGxhcmdlX2ltbSlAaCwlcngsJXIzMQorICAgICAgICAgIGFuZG5vdCAoLTEgLSBsYXJnZV9pbW0pQGwsJXIzMSwlcm4KKzwvcHJlPgorICAgICA8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PcGNvZGVzLWZvci1pOTYwLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PcGNvZGVzLWZvci1pOTYwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1NGY5NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL09wY29kZXMtZm9yLWk5NjAuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PcGNvZGVzIGZvciBpOTYwIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpOTYwXzAwMmREZXBlbmRlbnQuaHRtbCNpOTYwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpOTYwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk5NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpOTYwIiB0aXRsZT0iRGlyZWN0aXZlcy1pOTYwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ludGF4LW9mLWk5NjAuaHRtbCNTeW50YXgtb2YtaTk2MCIgdGl0bGU9IlN5bnRheCBvZiBpOTYwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3Bjb2Rlcy1mb3ItaTk2MCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTeW50YXgtb2YtaTk2MC5odG1sI1N5bnRheC1vZi1pOTYwIj5TeW50YXggb2YgaTk2MDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk5NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpOTYwIj5EaXJlY3RpdmVzLWk5NjA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpOTYwXzAwMmREZXBlbmRlbnQuaHRtbCNpOTYwXzAwMmREZXBlbmRlbnQiPmk5NjAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNy40IGk5NjAgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wY29kZXNfMDAyYy1pOTYwLTExMDIiPjwvYT48YSBuYW1lPSJpbmRleC1pOTYwLW9wY29kZXMtMTEwMyI+PC9hPkFsbCBJbnRlbCA5NjAgbWFjaGluZSBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZDsKK3NlZSA8YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjT3B0aW9uc18wMDJkaTk2MCI+aTk2MCBDb21tYW5kLWxpbmUgT3B0aW9uczwvYT4gZm9yIGEgZGlzY3Vzc2lvbiBvZgorc2VsZWN0aW5nIHRoZSBpbnN0cnVjdGlvbiBzdWJzZXQgZm9yIGEgcGFydGljdWxhciA5NjAKK2FyY2hpdGVjdHVyZS4KKworICAgPHA+U29tZSBvcGNvZGVzIGFyZSBwcm9jZXNzZWQgYmV5b25kIHNpbXBseSBlbWl0dGluZyBhIHNpbmdsZSBjb3JyZXNwb25kaW5nCitpbnN0cnVjdGlvbjogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsajwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIENvbXBhcmUtYW5kLUJyYW5jaCBvciBDb21wYXJlLWFuZC1KdW1wCitpbnN0cnVjdGlvbnMgd2l0aCB0YXJnZXQgZGlzcGxhY2VtZW50cyBsYXJnZXIgdGhhbiAxMyBiaXRzLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iY2FsbGpfMDAyZGk5NjAuaHRtbCNjYWxsal8wMDJkaTk2MCI+Y2FsbGotaTk2MDwvYT46ICAgICAgICAgICAgICAgICAgIDxjb2RlPmNhbGxqPC9jb2RlPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAuaHRtbCNDb21wYXJlXzAwMmRhbmRfMDAyZGJyYW5jaF8wMDJkaTk2MCI+Q29tcGFyZS1hbmQtYnJhbmNoLWk5NjA8L2E+OiAgICAgIENvbXBhcmUtYW5kLUJyYW5jaAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT3BlcmF0b3JzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PcGVyYXRvcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2FhN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT3BlcmF0b3JzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3BlcmF0b3JzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjSW50ZWdlci1FeHBycyIgdGl0bGU9IkludGVnZXIgRXhwcnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBcmd1bWVudHMuaHRtbCNBcmd1bWVudHMiIHRpdGxlPSJBcmd1bWVudHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQcmVmaXgtT3BzLmh0bWwjUHJlZml4LU9wcyIgdGl0bGU9IlByZWZpeCBPcHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPcGVyYXRvcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUHJlZml4LU9wcy5odG1sI1ByZWZpeC1PcHMiPlByZWZpeCBPcHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBcmd1bWVudHMuaHRtbCNBcmd1bWVudHMiPkFyZ3VtZW50czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludGVnZXItRXhwcnMuaHRtbCNJbnRlZ2VyLUV4cHJzIj5JbnRlZ2VyIEV4cHJzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4yLjIgT3BlcmF0b3JzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3BlcmF0b3JzXzAwMmMtaW4tZXhwcmVzc2lvbnMtMjUzIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJpdGhtZXRpYy1mdW5jdGlvbnMtMjU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25zXzAwMmMtaW4tZXhwcmVzc2lvbnMtMjU1Ij48L2E+PGRmbj5PcGVyYXRvcnM8L2Rmbj4gYXJlIGFyaXRobWV0aWMgZnVuY3Rpb25zLCBsaWtlIDxjb2RlPis8L2NvZGU+IG9yIDxjb2RlPiU8L2NvZGU+LiAgUHJlZml4CitvcGVyYXRvcnMgYXJlIGZvbGxvd2VkIGJ5IGFuIGFyZ3VtZW50LiAgSW5maXggb3BlcmF0b3JzIGFwcGVhcgorYmV0d2VlbiB0aGVpciBhcmd1bWVudHMuICBPcGVyYXRvcnMgbWF5IGJlIHByZWNlZGVkIGFuZC9vciBmb2xsb3dlZCBieQord2hpdGVzcGFjZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT3B0aW9uc18wMDJkaTg2MC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT3B0aW9uc18wMDJkaTg2MC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMWYzNWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PcHRpb25zXzAwMmRpODYwLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3B0aW9ucy1pODYwIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpODYwXzAwMmREZXBlbmRlbnQuaHRtbCNpODYwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpODYwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik5vdGVzXzAwMmRpODYwLmh0bWwjTm90ZXNfMDAyZGk4NjAiIHRpdGxlPSJOb3Rlcy1pODYwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGlyZWN0aXZlc18wMDJkaTg2MC5odG1sI0RpcmVjdGl2ZXNfMDAyZGk4NjAiIHRpdGxlPSJEaXJlY3RpdmVzLWk4NjAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPcHRpb25zLWk4NjAiPjwvYT4KKzxhIG5hbWU9Ik9wdGlvbnNfMDAyZGk4NjAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGlyZWN0aXZlc18wMDJkaTg2MC5odG1sI0RpcmVjdGl2ZXNfMDAyZGk4NjAiPkRpcmVjdGl2ZXMtaTg2MDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik5vdGVzXzAwMmRpODYwLmh0bWwjTm90ZXNfMDAyZGk4NjAiPk5vdGVzLWk4NjA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpODYwXzAwMmREZXBlbmRlbnQuaHRtbCNpODYwXzAwMmREZXBlbmRlbnQiPmk4NjAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNi4yIGk4NjAgQ29tbWFuZC1saW5lIE9wdGlvbnM8L2g0PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMTYuMi4xIFNWUjQgY29tcGF0aWJpbGl0eSBvcHRpb25zPC9oNT4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LVY8L2NvZGU+PGRkPlByaW50IGFzc2VtYmxlciB2ZXJzaW9uLiAKKzxicj48ZHQ+PGNvZGU+LVF5PC9jb2RlPjxkZD5JZ25vcmVkLiAKKzxicj48ZHQ+PGNvZGU+LVFuPC9jb2RlPjxkZD5JZ25vcmVkLiAKKzwvZGw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xNi4yLjIgT3RoZXIgb3B0aW9uczwvaDU+CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1FTDwvY29kZT48ZGQ+U2VsZWN0IGxpdHRsZSBlbmRpYW4gb3V0cHV0ICh0aGlzIGlzIHRoZSBkZWZhdWx0KS4gCis8YnI+PGR0Pjxjb2RlPi1FQjwvY29kZT48ZGQ+U2VsZWN0IGJpZyBlbmRpYW4gb3V0cHV0LiBOb3RlIHRoYXQgdGhlIGk4NjAgYWx3YXlzIHJlYWRzIGluc3RydWN0aW9ucworYXMgbGl0dGxlIGVuZGlhbiBkYXRhLCBzbyB0aGlzIG9wdGlvbiBvbmx5IGVmZmVjdHMgZGF0YSBhbmQgbm90CitpbnN0cnVjdGlvbnMuIAorPGJyPjxkdD48Y29kZT4tbXdhcm4tZXhwYW5kPC9jb2RlPjxkZD5FbWl0IGEgd2FybmluZyBtZXNzYWdlIGlmIGFueSBwc2V1ZG8taW5zdHJ1Y3Rpb24gZXhwYW5zaW9ucyBvY2N1cnJlZC4gCitGb3IgZXhhbXBsZSwgYSA8Y29kZT5vcjwvY29kZT4gaW5zdHJ1Y3Rpb24gd2l0aCBhbiBpbW1lZGlhdGUgbGFyZ2VyIHRoYW4gMTYtYml0cword2lsbCBiZSBleHBhbmRlZCBpbnRvIHR3byBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgYSB2ZXJ5IHVuZGVzaXJhYmxlIGZlYXR1cmUgdG8KK3JlbHkgb24sIHNvIHRoaXMgZmxhZyBjYW4gaGVscCBkZXRlY3QgYW55IGNvZGUgd2hlcmUgaXQgaGFwcGVucy4gT25lCit1c2Ugb2YgaXQsIGZvciBpbnN0YW5jZSwgaGFzIGJlZW4gdG8gZmluZCBhbmQgZWxpbWluYXRlIGFueSBwbGFjZQord2hlcmUgPGNvZGU+Z2NjPC9jb2RlPiBtYXkgZW1pdCB0aGVzZSBwc2V1ZG8taW5zdHJ1Y3Rpb25zLiAKKzxicj48ZHQ+PGNvZGU+LW14cDwvY29kZT48ZGQ+RW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBpODYwWFAgaW5zdHJ1Y3Rpb25zIGFuZCBjb250cm9sIHJlZ2lzdGVycy4gIEJ5IGRlZmF1bHQsCit0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBzbyB0aGF0IG9ubHkgdGhlIGJhc2UgaW5zdHJ1Y3Rpb24gc2V0IChpLmUuLCBpODYwWFIpCitpcyBzdXBwb3J0ZWQuIAorPGJyPjxkdD48Y29kZT4tbWludGVsLXN5bnRheDwvY29kZT48ZGQ+VGhlIGk4NjAgYXNzZW1ibGVyIGRlZmF1bHRzIHRvIEFUJmFtcDtUL1NWUjQgc3ludGF4LiAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUKK0ludGVsIHN5bnRheC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PcHRpb25zXzAwMmRpOTYwLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PcHRpb25zXzAwMmRpOTYwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxYTViYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL09wdGlvbnNfMDAyZGk5NjAuaHRtbApAQCAtMCwwICsxLDExOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3B0aW9ucy1pOTYwIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpOTYwXzAwMmREZXBlbmRlbnQuaHRtbCNpOTYwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpOTYwLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZsb2F0aW5nLVBvaW50XzAwMmRpOTYwLmh0bWwjRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAiIHRpdGxlPSJGbG9hdGluZyBQb2ludC1pOTYwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3B0aW9ucy1pOTYwIj48L2E+Cis8YSBuYW1lPSJPcHRpb25zXzAwMmRpOTYwIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZsb2F0aW5nLVBvaW50XzAwMmRpOTYwLmh0bWwjRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAiPkZsb2F0aW5nIFBvaW50LWk5NjA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpOTYwXzAwMmREZXBlbmRlbnQuaHRtbCNpOTYwXzAwMmREZXBlbmRlbnQiPmk5NjAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNy4xIGk5NjAgQ29tbWFuZC1saW5lIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1pOTYwLW9wdGlvbnMtMTA4MyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1pOTYwLTEwODQiPjwvYT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1pOTYwLWFyY2hpdGVjdHVyZS1vcHRpb25zLTEwODUiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZS1vcHRpb25zXzAwMmMtaTk2MC0xMDg2Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkQV8wMDdkLW9wdGlvbnNfMDAyYy1pOTYwLTEwODciPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LUFDQSB8IC1BQ0FfQSB8IC1BQ0IgfCAtQUNDIHwgLUFLQSB8IC1BS0IgfCAtQUtDIHwgLUFNQzwvY29kZT48ZGQ+U2VsZWN0IHRoZSA4MDk2MCBhcmNoaXRlY3R1cmUuICBJbnN0cnVjdGlvbnMgb3IgZmVhdHVyZXMgbm90IHN1cHBvcnRlZAorYnkgdGhlIHNlbGVjdGVkIGFyY2hpdGVjdHVyZSBjYXVzZSBmYXRhbCBlcnJvcnMuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQUNBPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGVxdWl2YWxlbnQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQUNBX0E8L3NwYW4+PC9zYW1wPiZyc3F1bzs7ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUFLQzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBlcXVpdmFsZW50IHRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BTUM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBTeW5vbnltcyBhcmUgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciB0b29scy4KKworICAgICA8cD5JZiB5b3UgZG8gbm90IHNwZWNpZnkgYW55IG9mIHRoZXNlIG9wdGlvbnMsIDxjb2RlPmFzPC9jb2RlPiBnZW5lcmF0ZXMgY29kZQorZm9yIGFueSBpbnN0cnVjdGlvbiBvciBmZWF0dXJlIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IDxlbT5zb21lPC9lbT4gdmVyc2lvbiBvZiB0aGUKKzk2MCAoZXZlbiBpZiB0aGlzIG1lYW5zIG1peGluZyBhcmNoaXRlY3R1cmVzISkuICBJbiBwcmluY2lwbGUsCis8Y29kZT5hczwvY29kZT4gYXR0ZW1wdHMgdG8gZGVkdWNlIHRoZSBtaW5pbWFsIHN1ZmZpY2llbnQgcHJvY2Vzc29yIHR5cGUgaWYKK25vbmUgaXMgc3BlY2lmaWVkOyBkZXBlbmRpbmcgb24gdGhlIG9iamVjdCBjb2RlIGZvcm1hdCwgdGhlIHByb2Nlc3NvciB0eXBlIG1heQorYmUgcmVjb3JkZWQgaW4gdGhlIG9iamVjdCBmaWxlLiAgSWYgaXQgaXMgY3JpdGljYWwgdGhhdCB0aGUgPGNvZGU+YXM8L2NvZGU+CitvdXRwdXQgbWF0Y2ggYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsIHNwZWNpZnkgdGhhdCBhcmNoaXRlY3R1cmUgZXhwbGljaXRseS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkYl8wMDdkLW9wdGlvbl8wMDJjLWk5NjAtMTA4OCI+PC9hPjxhIG5hbWU9ImluZGV4LWJyYW5jaC1yZWNvcmRpbmdfMDAyYy1pOTYwLTEwODkiPjwvYT48YSBuYW1lPSJpbmRleC1pOTYwLWJyYW5jaC1yZWNvcmRpbmctMTA5MCI+PC9hPjxicj48ZHQ+PGNvZGU+LWI8L2NvZGU+PGRkPkFkZCBjb2RlIHRvIGNvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgY29uZGl0aW9uYWwgYnJhbmNoZXMgdGFrZW4sIGZvcgorbGF0ZXIgb3B0aW1pemF0aW9uIHVzaW5nIGJyYW5jaCBwcmVkaWN0aW9uIGJpdHMuICAoVGhlIGNvbmRpdGlvbmFsIGJyYW5jaAoraW5zdHJ1Y3Rpb25zIGhhdmUgYnJhbmNoIHByZWRpY3Rpb24gYml0cyBpbiB0aGUgQ0EsIENCLCBhbmQgQ0MKK2FyY2hpdGVjdHVyZXMuKSAgSWYgPHZhcj5CUjwvdmFyPiByZXByZXNlbnRzIGEgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uLAordGhlIGZvbGxvd2luZyByZXByZXNlbnRzIHRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgYXNzZW1ibGVyIHdoZW4KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgc3BlY2lmaWVkOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgICAgY2FsbCAgICA8dmFyPmluY3JlbWVudCByb3V0aW5lPC92YXI+CisgICAgICAgICAgICAgICAgICAud29yZCAgIDAgICAgICAgIyBwcmUtY291bnRlcgorICAgICAgICAgIExhYmVsOiAgPHZhcj5CUjwvdmFyPgorICAgICAgICAgICAgICAgICAgY2FsbCAgICA8dmFyPmluY3JlbWVudCByb3V0aW5lPC92YXI+CisgICAgICAgICAgICAgICAgICAud29yZCAgIDAgICAgICAgIyBwb3N0LWNvdW50ZXIKKzwvcHJlPgorICAgICA8cD5UaGUgY291bnRlciBmb2xsb3dpbmcgYSBicmFuY2ggcmVjb3JkcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYnJhbmNoCit3YXMgPGVtPm5vdDwvZW0+IHRha2VuOyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gY291bnRlcnMgaXMgdGhlCitudW1iZXIgb2YgdGltZXMgdGhlIGJyYW5jaCA8ZW0+d2FzPC9lbT4gdGFrZW4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JnYnI5NjBfMDA3ZF8wMDJjLWk5NjAtcG9zdHByb2Nlc3Nvci0xMDkxIj48L2E+PGEgbmFtZT0iaW5kZXgtYnJhbmNoLXN0YXRpc3RpY3MtdGFibGVfMDAyYy1pOTYwLTEwOTIiPjwvYT5BIHRhYmxlIG9mIGV2ZXJ5IHN1Y2ggPGNvZGU+TGFiZWw8L2NvZGU+IGlzIGFsc28gZ2VuZXJhdGVkLCBzbyB0aGF0IHRoZQorZXh0ZXJuYWwgcG9zdHByb2Nlc3NvciA8Y29kZT5nYnI5NjA8L2NvZGU+IChzdXBwbGllZCBieSBJbnRlbCkgY2FuIGxvY2F0ZSBhbGwKK3RoZSBjb3VudGVycy4gIFRoaXMgdGFibGUgaXMgYWx3YXlzIGxhYmVsZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX0JSQU5DSF9UQUJMRV9fPC9zcGFuPjwvc2FtcD4mcnNxdW87OwordGhpcyBpcyBhIGxvY2FsIHN5bWJvbCB0byBwZXJtaXQgY29sbGVjdGluZyBzdGF0aXN0aWNzIGZvciBtYW55IHNlcGFyYXRlCitvYmplY3QgZmlsZXMuICBUaGUgdGFibGUgaXMgd29yZCBhbGlnbmVkLCBhbmQgYmVnaW5zIHdpdGggYSB0d28td29yZAoraGVhZGVyLiAgVGhlIGZpcnN0IHdvcmQsIGluaXRpYWxpemVkIHRvIDAsIGlzIHVzZWQgaW4gbWFpbnRhaW5pbmcgbGlua2VkCitsaXN0cyBvZiBicmFuY2ggdGFibGVzLiAgVGhlIHNlY29uZCB3b3JkIGlzIGEgY291bnQgb2YgdGhlIG51bWJlciBvZgorZW50cmllcyBpbiB0aGUgdGFibGUsIHdoaWNoIGZvbGxvdyBpbW1lZGlhdGVseTogZWFjaCBpcyBhIHdvcmQsIHBvaW50aW5nCit0byBvbmUgb2YgdGhlIGxhYmVscyBpbGx1c3RyYXRlZCBhYm92ZS4KKworICAgICA8IS0tIFRFWEkyUk9GRi1LSUxMIC0tPgorICAgICA8IS0tIEVORCBURVhJMlJPRkYtS0lMTCAtLT4KKyAgICAgPHA+VGhlIGZpcnN0IHdvcmQgb2YgdGhlIGhlYWRlciBpcyB1c2VkIHRvIGxvY2F0ZSBtdWx0aXBsZSBicmFuY2ggdGFibGVzLAorc2luY2UgZWFjaCBvYmplY3QgZmlsZSBtYXkgY29udGFpbiBvbmUuIE5vcm1hbGx5IHRoZSBsaW5rcyBhcmUKK21haW50YWluZWQgd2l0aCBhIGNhbGwgdG8gYW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSwgcGxhY2VkIGF0IHRoZQorYmVnaW5uaW5nIG9mIGVhY2ggZnVuY3Rpb24gaW4gdGhlIGZpbGUuICBUaGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IEMgY29tcGlsZXIKK2dlbmVyYXRlcyB0aGVzZSBjYWxscyBhdXRvbWF0aWNhbGx5IHdoZW4geW91IGdpdmUgaXQgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1iPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbi4gCitGb3IgZnVydGhlciBkZXRhaWxzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nYnI5NjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG5vXzAwMmRyZWxheF8wMDdkLW9wdGlvbl8wMDJjLWk5NjAtMTA5MyI+PC9hPjxicj48ZHQ+PGNvZGU+LW5vLXJlbGF4PC9jb2RlPjxkZD5Ob3JtYWxseSwgQ29tcGFyZS1hbmQtQnJhbmNoIGluc3RydWN0aW9ucyB3aXRoIHRhcmdldHMgdGhhdCByZXF1aXJlCitkaXNwbGFjZW1lbnRzIGdyZWF0ZXIgdGhhbiAxMyBiaXRzIChvciB0aGF0IGhhdmUgZXh0ZXJuYWwgdGFyZ2V0cykgYXJlCityZXBsYWNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBhcmUgKG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2hrYml0PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBhbmQgYnJhbmNoCitpbnN0cnVjdGlvbnMuICBZb3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbm8tcmVsYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIHRvIHNwZWNpZnkgdGhhdAorPGNvZGU+YXM8L2NvZGU+IHNob3VsZCBnZW5lcmF0ZSBlcnJvcnMgaW5zdGVhZCwgaWYgdGhlIHRhcmdldCBkaXNwbGFjZW1lbnQKK2lzIGxhcmdlciB0aGFuIDEzIGJpdHMuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBDb21wYXJlLWFuZC1KdW1wIGluc3RydWN0aW9uczsgdGhlIGNvZGUKK2VtaXR0ZWQgZm9yIHRoZW0gaXMgPGVtPmFsd2F5czwvZW0+IGFkanVzdGVkIHdoZW4gbmVjZXNzYXJ5IChkZXBlbmRpbmcgb24KK2Rpc3BsYWNlbWVudCBzaXplKSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHlvdSB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbm8tcmVsYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT3JnLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9PcmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQ0NmFmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT3JnLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3JnIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPZmZzZXQuaHRtbCNPZmZzZXQiIHRpdGxlPSJPZmZzZXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQMmFsaWduLmh0bWwjUDJhbGlnbiIgdGl0bGU9IlAyYWxpZ24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPcmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUDJhbGlnbi5odG1sI1AyYWxpZ24iPlAyYWxpZ248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPZmZzZXQuaHRtbCNPZmZzZXQiPk9mZnNldDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny44NSA8Y29kZT4ub3JnIDwvY29kZT48dmFyPm5ldy1sYzwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmZpbGw8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym9yZ18wMDdkLWRpcmVjdGl2ZS00MTciPjwvYT48YSBuYW1lPSJpbmRleC1sb2NhdGlvbi1jb3VudGVyXzAwMmMtYWR2YW5jaW5nLTQxOCI+PC9hPjxhIG5hbWU9ImluZGV4LWFkdmFuY2luZy1sb2NhdGlvbi1jb3VudGVyLTQxOSI+PC9hPjxhIG5hbWU9ImluZGV4LWN1cnJlbnQtYWRkcmVzc18wMDJjLWFkdmFuY2luZy00MjAiPjwvYT5BZHZhbmNlIHRoZSBsb2NhdGlvbiBjb3VudGVyIG9mIHRoZSBjdXJyZW50IHNlY3Rpb24gdG8KKzx2YXI+bmV3LWxjPC92YXI+LiAgPHZhcj5uZXctbGM8L3Zhcj4gaXMgZWl0aGVyIGFuIGFic29sdXRlIGV4cHJlc3Npb24gb3IgYW4KK2V4cHJlc3Npb24gd2l0aCB0aGUgc2FtZSBzZWN0aW9uIGFzIHRoZSBjdXJyZW50IHN1YnNlY3Rpb24uICBUaGF0IGlzLAoreW91IGNhbid0IHVzZSA8Y29kZT4ub3JnPC9jb2RlPiB0byBjcm9zcyBzZWN0aW9uczogaWYgPHZhcj5uZXctbGM8L3Zhcj4gaGFzIHRoZQord3Jvbmcgc2VjdGlvbiwgdGhlIDxjb2RlPi5vcmc8L2NvZGU+IGRpcmVjdGl2ZSBpcyBpZ25vcmVkLiAgVG8gYmUgY29tcGF0aWJsZQord2l0aCBmb3JtZXIgYXNzZW1ibGVycywgaWYgdGhlIHNlY3Rpb24gb2YgPHZhcj5uZXctbGM8L3Zhcj4gaXMgYWJzb2x1dGUsCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBpc3N1ZXMgYSB3YXJuaW5nLCB0aGVuIHByZXRlbmRzIHRoZSBzZWN0aW9uIG9mIDx2YXI+bmV3LWxjPC92YXI+CitpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBzdWJzZWN0aW9uLgorCisgICA8cD48Y29kZT4ub3JnPC9jb2RlPiBtYXkgb25seSBpbmNyZWFzZSB0aGUgbG9jYXRpb24gY291bnRlciwgb3IgbGVhdmUgaXQKK3VuY2hhbmdlZDsgeW91IGNhbm5vdCB1c2UgPGNvZGU+Lm9yZzwvY29kZT4gdG8gbW92ZSB0aGUgbG9jYXRpb24gY291bnRlcgorYmFja3dhcmRzLgorCis8IS0tIGRvdWJsZSBuZWdhdGl2ZSB1c2VkIGJlbG93ICJub3QgdW5kZWZpbmVkIiBiZWNhdXNlIHRoaXMgaXMgYSBzcGVjaWZpYyAtLT4KKzwhLS0gcmVmZXJlbmNlIHRvICJ1bmRlZmluZWQiIChhcyBTRUdfVU5LTk9XTiBpcyBjYWxsZWQgaW4gdGhpcyBtYW51YWwpIC0tPgorPCEtLSBzZWN0aW9uLiBkb2NAY3lnbnVzLmNvbSAxOGZlYjkxIC0tPgorICAgPHA+QmVjYXVzZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiB0cmllcyB0byBhc3NlbWJsZSBwcm9ncmFtcyBpbiBvbmUgcGFzcywgPHZhcj5uZXctbGM8L3Zhcj4KK21heSBub3QgYmUgdW5kZWZpbmVkLiAgSWYgeW91IHJlYWxseSBkZXRlc3QgdGhpcyByZXN0cmljdGlvbiB3ZSBlYWdlcmx5IGF3YWl0CithIGNoYW5jZSB0byBzaGFyZSB5b3VyIGltcHJvdmVkIGFzc2VtYmxlci4KKworICAgPHA+QmV3YXJlIHRoYXQgdGhlIG9yaWdpbiBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIG5vdAordG8gdGhlIHN0YXJ0IG9mIHRoZSBzdWJzZWN0aW9uLiAgVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggb3RoZXIKK3Blb3BsZSdzIGFzc2VtYmxlcnMuCisKKyAgIDxwPldoZW4gdGhlIGxvY2F0aW9uIGNvdW50ZXIgKG9mIHRoZSBjdXJyZW50IHN1YnNlY3Rpb24pIGlzIGFkdmFuY2VkLCB0aGUKK2ludGVydmVuaW5nIGJ5dGVzIGFyZSBmaWxsZWQgd2l0aCA8dmFyPmZpbGw8L3Zhcj4gd2hpY2ggc2hvdWxkIGJlIGFuCithYnNvbHV0ZSBleHByZXNzaW9uLiAgSWYgdGhlIGNvbW1hIGFuZCA8dmFyPmZpbGw8L3Zhcj4gYXJlIG9taXR0ZWQsCis8dmFyPmZpbGw8L3Zhcj4gZGVmYXVsdHMgdG8gemVyby4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvT3ZlcnZpZXcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL092ZXJ2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3NjlkZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL092ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSw4ODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk92ZXJ2aWV3IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIiB0aXRsZT0iVG9wIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3ZlcnZpZXciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjEgT3ZlcnZpZXc8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1pbnZvY2F0aW9uLXN1bW1hcnktMSI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbi1zdW1tYXJ5LTIiPjwvYT48YSBuYW1lPSJpbmRleC1zdW1tYXJ5LW9mLW9wdGlvbnMtMyI+PC9hPkhlcmUgaXMgYSBicmllZiBzdW1tYXJ5IG9mIGhvdyB0byBpbnZva2UgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uICBGb3IgZGV0YWlscywKK3NlZSA8YSBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5Db21tYW5kLUxpbmUgT3B0aW9uczwvYT4uCisKKzwhLS0gbWFuIHRpdGxlIEFTIHRoZSBwb3J0YWJsZSBHTlUgYXNzZW1ibGVyLiAtLT4KKzwhLS0gV2UgZG9uJ3QgdXNlIGRlZmZuIGFuZCBmcmllbmRzIGZvciB0aGUgZm9sbG93aW5nIGJlY2F1c2UgdGhleSBzZWVtIC0tPgorPCEtLSB0byBiZSBsaW1pdGVkIHRvIG9uZSBsaW5lIGZvciB0aGUgaGVhZGVyLiAtLT4KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8IS0tIG1hbiBiZWdpbiBTWU5PUFNJUyAtLT4KKyAgICAgYXMgWzxiPi1hPC9iPls8Yj5jZGdobG5zPC9iPl1bPTx2YXI+ZmlsZTwvdmFyPl1dIFs8Yj4tLWFsdGVybmF0ZTwvYj5dIFs8Yj4tRDwvYj5dCisgICAgICBbPGI+LS1jb21wcmVzcy1kZWJ1Zy1zZWN0aW9uczwvYj5dICBbPGI+LS1ub2NvbXByZXNzLWRlYnVnLXNlY3Rpb25zPC9iPl0KKyAgICAgIFs8Yj4tLWRlYnVnLXByZWZpeC1tYXA8L2I+IDx2YXI+b2xkPC92YXI+PTx2YXI+bmV3PC92YXI+XQorICAgICAgWzxiPi0tZGVmc3ltPC9iPiA8dmFyPnN5bTwvdmFyPj08dmFyPnZhbDwvdmFyPl0gWzxiPi1mPC9iPl0gWzxiPi1nPC9iPl0gWzxiPi0tZ3N0YWJzPC9iPl0KKyAgICAgIFs8Yj4tLWdzdGFicys8L2I+XSBbPGI+LS1nZHdhcmYtMjwvYj5dIFs8Yj4tLWhlbHA8L2I+XSBbPGI+LUk8L2I+IDx2YXI+ZGlyPC92YXI+XSBbPGI+LUo8L2I+XQorICAgICAgWzxiPi1LPC9iPl0gWzxiPi1MPC9iPl0gWzxiPi0tbGlzdGluZy1saHMtd2lkdGg8L2I+PTx2YXI+TlVNPC92YXI+XQorICAgICAgWzxiPi0tbGlzdGluZy1saHMtd2lkdGgyPC9iPj08dmFyPk5VTTwvdmFyPl0gWzxiPi0tbGlzdGluZy1yaHMtd2lkdGg8L2I+PTx2YXI+TlVNPC92YXI+XQorICAgICAgWzxiPi0tbGlzdGluZy1jb250LWxpbmVzPC9iPj08dmFyPk5VTTwvdmFyPl0gWzxiPi0ta2VlcC1sb2NhbHM8L2I+XSBbPGI+LW88L2I+CisgICAgICA8dmFyPm9iamZpbGU8L3Zhcj5dIFs8Yj4tUjwvYj5dIFs8Yj4tLXJlZHVjZS1tZW1vcnktb3ZlcmhlYWRzPC9iPl0gWzxiPi0tc3RhdGlzdGljczwvYj5dCisgICAgICBbPGI+LXY8L2I+XSBbPGI+LXZlcnNpb248L2I+XSBbPGI+LS12ZXJzaW9uPC9iPl0gWzxiPi1XPC9iPl0gWzxiPi0td2FybjwvYj5dCisgICAgICBbPGI+LS1mYXRhbC13YXJuaW5nczwvYj5dIFs8Yj4tdzwvYj5dIFs8Yj4teDwvYj5dIFs8Yj4tWjwvYj5dIFs8Yj5APC9iPjx2YXI+RklMRTwvdmFyPl0KKyAgICAgIFs8Yj4tLXNpemUtY2hlY2s9W2Vycm9yfHdhcm5pbmddPC9iPl0KKyAgICAgIFs8Yj4tLXRhcmdldC1oZWxwPC9iPl0gWzx2YXI+dGFyZ2V0LW9wdGlvbnM8L3Zhcj5dCisgICAgICBbPGI+LS08L2I+fDx2YXI+ZmlsZXM8L3Zhcj4gLi4uXQorICAgICA8IS0tIFRhcmdldCBkZXBlbmRlbnQgb3B0aW9ucyBhcmUgbGlzdGVkIGJlbG93LiAgS2VlcCB0aGUgbGlzdCBzb3J0ZWQuIC0tPgorICAgICA8IS0tIEFkZCBhbiBlbXB0eSBsaW5lIGZvciBzZXBhcmF0aW9uLiAtLT4KKyAgICAgCisgICAgIDxlbT5UYXJnZXQgQUFyY2g2NCBvcHRpb25zOjwvZW0+CisgICAgICAgIFs8Yj4tRUI8L2I+fDxiPi1FTDwvYj5dCisgICAgIAorICAgICA8ZW0+VGFyZ2V0IEFscGhhIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1tPC9iPjx2YXI+Y3B1PC92YXI+XQorICAgICAgICBbPGI+LW1kZWJ1ZzwvYj4gfCA8Yj4tbm8tbWRlYnVnPC9iPl0KKyAgICAgICAgWzxiPi1yZXBsYWNlPC9iPiB8IDxiPi1ub3JlcGxhY2U8L2I+XQorICAgICAgICBbPGI+LXJlbGF4PC9iPl0gWzxiPi1nPC9iPl0gWzxiPi1HPC9iPjx2YXI+c2l6ZTwvdmFyPl0KKyAgICAgICAgWzxiPi1GPC9iPl0gWzxiPi0zMmFkZHI8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBBUkMgb3B0aW9uczo8L2VtPgorICAgICAgICBbPGI+LW1hcmNbNXw2fDd8OF08L2I+XQorICAgICAgICBbPGI+LUVCPC9iPnw8Yj4tRUw8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBBUk0gb3B0aW9uczo8L2VtPgorICAgICA8IS0tIERvbid0IGRvY3VtZW50IHRoZSBkZXByZWNhdGVkIG9wdGlvbnMgLS0+CisgICAgICAgIFs8Yj4tbWNwdTwvYj49PHZhcj5wcm9jZXNzb3I8L3Zhcj5bKzx2YXI+ZXh0ZW5zaW9uPC92YXI+Li4uXV0KKyAgICAgICAgWzxiPi1tYXJjaDwvYj49PHZhcj5hcmNoaXRlY3R1cmU8L3Zhcj5bKzx2YXI+ZXh0ZW5zaW9uPC92YXI+Li4uXV0KKyAgICAgICAgWzxiPi1tZnB1PC9iPj08dmFyPmZsb2F0aW5nLXBvaW50LWZvcm1hdDwvdmFyPl0KKyAgICAgICAgWzxiPi1tZmxvYXQtYWJpPC9iPj08dmFyPmFiaTwvdmFyPl0KKyAgICAgICAgWzxiPi1tZWFiaTwvYj49PHZhcj52ZXI8L3Zhcj5dCisgICAgICAgIFs8Yj4tbXRodW1iPC9iPl0KKyAgICAgICAgWzxiPi1FQjwvYj58PGI+LUVMPC9iPl0KKyAgICAgICAgWzxiPi1tYXBjcy0zMjwvYj58PGI+LW1hcGNzLTI2PC9iPnw8Yj4tbWFwY3MtZmxvYXQ8L2I+fAorICAgICAgICAgPGI+LW1hcGNzLXJlZW50cmFudDwvYj5dCisgICAgICAgIFs8Yj4tbXRodW1iLWludGVyd29yazwvYj5dIFs8Yj4tazwvYj5dCisgICAgIAorICAgICA8ZW0+VGFyZ2V0IEJsYWNrZmluIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1tY3B1PC9iPj08dmFyPnByb2Nlc3NvcjwvdmFyPlstPHZhcj5zaXJldmlzaW9uPC92YXI+XV0KKyAgICAgICAgWzxiPi1tZmRwaWM8L2I+XQorICAgICAgICBbPGI+LW1uby1mZHBpYzwvYj5dCisgICAgICAgIFs8Yj4tbW5vcGljPC9iPl0KKyAgICAgCisgICAgIDxlbT5UYXJnZXQgQ1JJUyBvcHRpb25zOjwvZW0+CisgICAgICAgIFs8Yj4tLXVuZGVyc2NvcmU8L2I+IHwgPGI+LS1uby11bmRlcnNjb3JlPC9iPl0KKyAgICAgICAgWzxiPi0tcGljPC9iPl0gWzxiPi1OPC9iPl0KKyAgICAgICAgWzxiPi0tZW11bGF0aW9uPWNyaXNlbGY8L2I+IHwgPGI+LS1lbXVsYXRpb249Y3Jpc2FvdXQ8L2I+XQorICAgICAgICBbPGI+LS1tYXJjaD12MF92MTA8L2I+IHwgPGI+LS1tYXJjaD12MTA8L2I+IHwgPGI+LS1tYXJjaD12MzI8L2I+IHwgPGI+LS1tYXJjaD1jb21tb25fdjEwX3YzMjwvYj5dCisgICAgIDwhLS0gRGVwcmVjYXRlZCAtIGRlbGliZXJhdGVseSBub3QgZG9jdW1lbnRlZC4gLS0+CisgICAgIDwhLS0gW0Biey1ofV0gW0Biey1IfV0gLS0+CisgICAgIAorICAgICA8ZW0+VGFyZ2V0IEQxMFYgb3B0aW9uczo8L2VtPgorICAgICAgICBbPGI+LU88L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBEMzBWIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1PPC9iPnw8Yj4tbjwvYj58PGI+LU48L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBFUElQSEFOWSBvcHRpb25zOjwvZW0+CisgICAgICAgIFs8Yj4tbWVwaXBoYW55PC9iPnw8Yj4tbWVwaXBoYW55MTY8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBIOC8zMDAgb3B0aW9uczo8L2VtPgorICAgICAgICBbLWgtdGljay1oZXhdCisgICAgIDwhLS0gSFBQQSBoYXMgbm8gbWFjaGluZS1kZXBlbmRlbnQgYXNzZW1ibGVyIG9wdGlvbnMgKHlldCkuIC0tPgorICAgICAKKyAgICAgPGVtPlRhcmdldCBpMzg2IG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi0tMzI8L2I+fDxiPi0tbjMyPC9iPnw8Yj4tLTY0PC9iPl0gWzxiPi1uPC9iPl0KKyAgICAgICAgWzxiPi1tYXJjaDwvYj49PHZhcj5DUFU8L3Zhcj5bKzx2YXI+RVhURU5TSU9OPC92YXI+Li4uXV0gWzxiPi1tdHVuZTwvYj49PHZhcj5DUFU8L3Zhcj5dCisgICAgIAorICAgICA8ZW0+VGFyZ2V0IGk5NjAgb3B0aW9uczo8L2VtPgorICAgICA8IS0tIHNlZSBtZF9wYXJzZV9vcHRpb24gaW4gdGMtaTk2MC5jIC0tPgorICAgICAgICBbPGI+LUFDQTwvYj58PGI+LUFDQV9BPC9iPnw8Yj4tQUNCPC9iPnw8Yj4tQUNDPC9iPnw8Yj4tQUtBPC9iPnw8Yj4tQUtCPC9iPnwKKyAgICAgICAgIDxiPi1BS0M8L2I+fDxiPi1BTUM8L2I+XQorICAgICAgICBbPGI+LWI8L2I+XSBbPGI+LW5vLXJlbGF4PC9iPl0KKyAgICAgCisgICAgIDxlbT5UYXJnZXQgSUEtNjQgb3B0aW9uczo8L2VtPgorICAgICAgICBbPGI+LW1jb25zdGFudC1ncDwvYj58PGI+LW1hdXRvLXBpYzwvYj5dCisgICAgICAgIFs8Yj4tbWlscDMyPC9iPnw8Yj4tbWlscDY0PC9iPnw8Yj4tbWxwNjQ8L2I+fDxiPi1tcDY0PC9iPl0KKyAgICAgICAgWzxiPi1tbGU8L2I+fDxiPm1iZTwvYj5dCisgICAgICAgIFs8Yj4tbXR1bmU9aXRhbml1bTE8L2I+fDxiPi1tdHVuZT1pdGFuaXVtMjwvYj5dCisgICAgICAgIFs8Yj4tbXVud2luZC1jaGVjaz13YXJuaW5nPC9iPnw8Yj4tbXVud2luZC1jaGVjaz1lcnJvcjwvYj5dCisgICAgICAgIFs8Yj4tbWhpbnQuYj1vazwvYj58PGI+LW1oaW50LmI9d2FybmluZzwvYj58PGI+LW1oaW50LmI9ZXJyb3I8L2I+XQorICAgICAgICBbPGI+LXg8L2I+fDxiPi14ZXhwbGljaXQ8L2I+XSBbPGI+LXhhdXRvPC9iPl0gWzxiPi14ZGVidWc8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBJUDJLIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1taXAyMDIyPC9iPnw8Yj4tbWlwMjAyMmV4dDwvYj5dCisgICAgIAorICAgICA8ZW0+VGFyZ2V0IE0zMkMgb3B0aW9uczo8L2VtPgorICAgICAgICBbPGI+LW0zMmM8L2I+fDxiPi1tMTZjPC9iPl0gWy1yZWxheF0gWy1oLXRpY2staGV4XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBNMzJSIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi0tbTMycng8L2I+fDxiPi0tW25vLV13YXJuLWV4cGxpY2l0LXBhcmFsbGVsLWNvbmZsaWN0czwvYj58CisgICAgICAgIDxiPi0tV1tuXXA8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBNNjgwWDAgb3B0aW9uczo8L2VtPgorICAgICAgICBbPGI+LWw8L2I+XSBbPGI+LW02ODAwMDwvYj58PGI+LW02ODAxMDwvYj58PGI+LW02ODAyMDwvYj58Li4uXQorICAgICAKKyAgICAgPGVtPlRhcmdldCBNNjhIQzExIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1tNjhoYzExPC9iPnw8Yj4tbTY4aGMxMjwvYj58PGI+LW02OGhjczEyPC9iPnw8Yj4tbW05czEyeDwvYj58PGI+LW1tOXMxMnhnPC9iPl0KKyAgICAgICAgWzxiPi1tc2hvcnQ8L2I+fDxiPi1tbG9uZzwvYj5dCisgICAgICAgIFs8Yj4tbXNob3J0LWRvdWJsZTwvYj58PGI+LW1sb25nLWRvdWJsZTwvYj5dCisgICAgICAgIFs8Yj4tLWZvcmNlLWxvbmctYnJhbmNoZXM8L2I+XSBbPGI+LS1zaG9ydC1icmFuY2hlczwvYj5dCisgICAgICAgIFs8Yj4tLXN0cmljdC1kaXJlY3QtbW9kZTwvYj5dIFs8Yj4tLXByaW50LWluc24tc3ludGF4PC9iPl0KKyAgICAgICAgWzxiPi0tcHJpbnQtb3Bjb2RlczwvYj5dIFs8Yj4tLWdlbmVyYXRlLWV4YW1wbGU8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBNQ09SRSBvcHRpb25zOjwvZW0+CisgICAgICAgIFs8Yj4tanNyaTJic3I8L2I+XSBbPGI+LXNpZmlsdGVyPC9iPl0gWzxiPi1yZWxheDwvYj5dCisgICAgICAgIFs8Yj4tbWNwdT1bMjEwfDM0MF08L2I+XQorICAgICA8ZW0+VGFyZ2V0IE1JQ1JPQkxBWkUgb3B0aW9uczo8L2VtPgorICAgICA8IS0tIE1pY3JvQmxhemUgaGFzIG5vIG1hY2hpbmUtZGVwZW5kZW50IGFzc2VtYmxlciBvcHRpb25zLiAtLT4KKyAgICAgCisgICAgIDxlbT5UYXJnZXQgTUlQUyBvcHRpb25zOjwvZW0+CisgICAgICAgIFs8Yj4tbm9jcHA8L2I+XSBbPGI+LUVMPC9iPl0gWzxiPi1FQjwvYj5dIFs8Yj4tTzwvYj5bPHZhcj5vcHRpbWl6YXRpb24gbGV2ZWw8L3Zhcj5dXQorICAgICAgICBbPGI+LWc8L2I+Wzx2YXI+ZGVidWcgbGV2ZWw8L3Zhcj5dXSBbPGI+LUc8L2I+IDx2YXI+bnVtPC92YXI+XSBbPGI+LUtQSUM8L2I+XSBbPGI+LWNhbGxfc2hhcmVkPC9iPl0KKyAgICAgICAgWzxiPi1ub25fc2hhcmVkPC9iPl0gWzxiPi14Z290PC9iPiBbPGI+LW12eHdvcmtzLXBpYzwvYj5dCisgICAgICAgIFs8Yj4tbWFiaTwvYj49PHZhcj5BQkk8L3Zhcj5dIFs8Yj4tMzI8L2I+XSBbPGI+LW4zMjwvYj5dIFs8Yj4tNjQ8L2I+XSBbPGI+LW1mcDMyPC9iPl0gWzxiPi1tZ3AzMjwvYj5dCisgICAgICAgIFs8Yj4tbWFyY2g8L2I+PTx2YXI+Q1BVPC92YXI+XSBbPGI+LW10dW5lPC9iPj08dmFyPkNQVTwvdmFyPl0gWzxiPi1taXBzMTwvYj5dIFs8Yj4tbWlwczI8L2I+XQorICAgICAgICBbPGI+LW1pcHMzPC9iPl0gWzxiPi1taXBzNDwvYj5dIFs8Yj4tbWlwczU8L2I+XSBbPGI+LW1pcHMzMjwvYj5dIFs8Yj4tbWlwczMycjI8L2I+XQorICAgICAgICBbPGI+LW1pcHM2NDwvYj5dIFs8Yj4tbWlwczY0cjI8L2I+XQorICAgICAgICBbPGI+LWNvbnN0cnVjdC1mbG9hdHM8L2I+XSBbPGI+LW5vLWNvbnN0cnVjdC1mbG9hdHM8L2I+XQorICAgICAgICBbPGI+LXRyYXA8L2I+XSBbPGI+LW5vLWJyZWFrPC9iPl0gWzxiPi1icmVhazwvYj5dIFs8Yj4tbm8tdHJhcDwvYj5dCisgICAgICAgIFs8Yj4tbWlwczE2PC9iPl0gWzxiPi1uby1taXBzMTY8L2I+XQorICAgICAgICBbPGI+LW1taWNyb21pcHM8L2I+XSBbPGI+LW1uby1taWNyb21pcHM8L2I+XQorICAgICAgICBbPGI+LW1zbWFydG1pcHM8L2I+XSBbPGI+LW1uby1zbWFydG1pcHM8L2I+XQorICAgICAgICBbPGI+LW1pcHMzZDwvYj5dIFs8Yj4tbm8tbWlwczNkPC9iPl0KKyAgICAgICAgWzxiPi1tZG14PC9iPl0gWzxiPi1uby1tZG14PC9iPl0KKyAgICAgICAgWzxiPi1tZHNwPC9iPl0gWzxiPi1tbm8tZHNwPC9iPl0KKyAgICAgICAgWzxiPi1tZHNwcjI8L2I+XSBbPGI+LW1uby1kc3ByMjwvYj5dCisgICAgICAgIFs8Yj4tbW10PC9iPl0gWzxiPi1tbm8tbXQ8L2I+XQorICAgICAgICBbPGI+LW1tY3U8L2I+XSBbPGI+LW1uby1tY3U8L2I+XQorICAgICAgICBbPGI+LW1maXg3MDAwPC9iPl0gWzxiPi1tbm8tZml4NzAwMDwvYj5dCisgICAgICAgIFs8Yj4tbWZpeC12cjQxMjA8L2I+XSBbPGI+LW1uby1maXgtdnI0MTIwPC9iPl0KKyAgICAgICAgWzxiPi1tZml4LXZyNDEzMDwvYj5dIFs8Yj4tbW5vLWZpeC12cjQxMzA8L2I+XQorICAgICAgICBbPGI+LW1kZWJ1ZzwvYj5dIFs8Yj4tbm8tbWRlYnVnPC9iPl0KKyAgICAgICAgWzxiPi1tcGRyPC9iPl0gWzxiPi1tbm8tcGRyPC9iPl0KKyAgICAgCisgICAgIDxlbT5UYXJnZXQgTU1JWCBvcHRpb25zOjwvZW0+CisgICAgICAgIFs8Yj4tLWZpeGVkLXNwZWNpYWwtcmVnaXN0ZXItbmFtZXM8L2I+XSBbPGI+LS1nbG9iYWxpemUtc3ltYm9sczwvYj5dCisgICAgICAgIFs8Yj4tLWdudS1zeW50YXg8L2I+XSBbPGI+LS1yZWxheDwvYj5dIFs8Yj4tLW5vLXByZWRlZmluZWQtc3ltYm9sczwvYj5dCisgICAgICAgIFs8Yj4tLW5vLWV4cGFuZDwvYj5dIFs8Yj4tLW5vLW1lcmdlLWdyZWdzPC9iPl0gWzxiPi14PC9iPl0KKyAgICAgICAgWzxiPi0tbGlua2VyLWFsbG9jYXRlZC1ncmVnczwvYj5dCisgICAgIAorICAgICA8ZW0+VGFyZ2V0IFBEUDExIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1tcGljPC9iPnw8Yj4tbW5vLXBpYzwvYj5dIFs8Yj4tbWFsbDwvYj5dIFs8Yj4tbW5vLWV4dGVuc2lvbnM8L2I+XQorICAgICAgICBbPGI+LW08L2I+PHZhcj5leHRlbnNpb248L3Zhcj58PGI+LW1uby08L2I+PHZhcj5leHRlbnNpb248L3Zhcj5dCisgICAgICAgIFs8Yj4tbTwvYj48dmFyPmNwdTwvdmFyPl0gWzxiPi1tPC9iPjx2YXI+bWFjaGluZTwvdmFyPl0KKyAgICAgCisgICAgIDxlbT5UYXJnZXQgcGljb0phdmEgb3B0aW9uczo8L2VtPgorICAgICAgICBbPGI+LW1iPC9iPnw8Yj4tbWU8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBQb3dlclBDIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1hMzI8L2I+fDxiPi1hNjQ8L2I+XQorICAgICAgICBbPGI+LW1wd3J4PC9iPnw8Yj4tbXB3cjI8L2I+fDxiPi1tcHdyPC9iPnw8Yj4tbTYwMTwvYj58PGI+LW1wcGM8L2I+fDxiPi1tcHBjMzI8L2I+fDxiPi1tNjAzPC9iPnw8Yj4tbTYwNDwvYj58PGI+LW00MDM8L2I+fDxiPi1tNDA1PC9iPnwKKyAgICAgICAgIDxiPi1tNDQwPC9iPnw8Yj4tbTQ2NDwvYj58PGI+LW00NzY8L2I+fDxiPi1tNzQwMDwvYj58PGI+LW03NDEwPC9iPnw8Yj4tbTc0NTA8L2I+fDxiPi1tNzQ1NTwvYj58PGI+LW03NTBjbDwvYj58PGI+LW1wcGM2NDwvYj58CisgICAgICAgICA8Yj4tbTYyMDwvYj58PGI+LW1lNTAwPC9iPnw8Yj4tZTUwMHgyPC9iPnw8Yj4tbWU1MDBtYzwvYj58PGI+LW1lNTAwbWM2NDwvYj58PGI+LW1lNTUwMDwvYj58PGI+LW1lNjUwMDwvYj58PGI+LW1wcGM2NGJyaWRnZTwvYj58CisgICAgICAgICA8Yj4tbWJvb2tlPC9iPnw8Yj4tbXBvd2VyNDwvYj58PGI+LW1wcjQ8L2I+fDxiPi1tcG93ZXI1PC9iPnw8Yj4tbXB3cjU8L2I+fDxiPi1tcHdyNXg8L2I+fDxiPi1tcG93ZXI2PC9iPnw8Yj4tbXB3cjY8L2I+fAorICAgICAgICAgPGI+LW1wb3dlcjc8L2I+fDxiPi1tcHc3PC9iPnw8Yj4tbWEyPC9iPnw8Yj4tbWNlbGw8L2I+fDxiPi1tc3BlPC9iPnw8Yj4tbXRpdGFuPC9iPnw8Yj4tbWUzMDA8L2I+fDxiPi1tY29tPC9iPl0KKyAgICAgICAgWzxiPi1tYW55PC9iPl0gWzxiPi1tYWx0aXZlYzwvYj58PGI+LW12c3g8L2I+XQorICAgICAgICBbPGI+LW1yZWduYW1lczwvYj58PGI+LW1uby1yZWduYW1lczwvYj5dCisgICAgICAgIFs8Yj4tbXJlbG9jYXRhYmxlPC9iPnw8Yj4tbXJlbG9jYXRhYmxlLWxpYjwvYj58PGI+LUsgUElDPC9iPl0gWzxiPi1tZW1iPC9iPl0KKyAgICAgICAgWzxiPi1tbGl0dGxlPC9iPnw8Yj4tbWxpdHRsZS1lbmRpYW48L2I+fDxiPi1sZTwvYj58PGI+LW1iaWc8L2I+fDxiPi1tYmlnLWVuZGlhbjwvYj58PGI+LWJlPC9iPl0KKyAgICAgICAgWzxiPi1tc29sYXJpczwvYj58PGI+LW1uby1zb2xhcmlzPC9iPl0KKyAgICAgICAgWzxiPi1ub3BzPTwvYj48dmFyPmNvdW50PC92YXI+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBSWCBvcHRpb25zOjwvZW0+CisgICAgICAgIFs8Yj4tbWxpdHRsZS1lbmRpYW48L2I+fDxiPi1tYmlnLWVuZGlhbjwvYj5dCisgICAgICAgIFs8Yj4tbTMyYml0LWludHM8L2I+fDxiPi1tMTZiaXQtaW50czwvYj5dCisgICAgICAgIFs8Yj4tbTMyYml0LWRvdWJsZXM8L2I+fDxiPi1tNjRiaXQtZG91YmxlczwvYj5dCisgICAgIAorICAgICA8ZW0+VGFyZ2V0IHMzOTAgb3B0aW9uczo8L2VtPgorICAgICAgICBbPGI+LW0zMTwvYj58PGI+LW02NDwvYj5dIFs8Yj4tbWVzYTwvYj58PGI+LW16YXJjaDwvYj5dIFs8Yj4tbWFyY2g8L2I+PTx2YXI+Q1BVPC92YXI+XQorICAgICAgICBbPGI+LW1yZWduYW1lczwvYj58PGI+LW1uby1yZWduYW1lczwvYj5dCisgICAgICAgIFs8Yj4tbXdhcm4tYXJlZy16ZXJvPC9iPl0KKyAgICAgCisgICAgIDxlbT5UYXJnZXQgU0NPUkUgb3B0aW9uczo8L2VtPgorICAgICAgICBbPGI+LUVCPC9iPl1bPGI+LUVMPC9iPl1bPGI+LUZJWEREPC9iPl1bPGI+LU5XQVJOPC9iPl0KKyAgICAgICAgWzxiPi1TQ09SRTU8L2I+XVs8Yj4tU0NPUkU1VTwvYj5dWzxiPi1TQ09SRTc8L2I+XVs8Yj4tU0NPUkUzPC9iPl0KKyAgICAgICAgWzxiPi1tYXJjaD1zY29yZTc8L2I+XVs8Yj4tbWFyY2g9c2NvcmUzPC9iPl0KKyAgICAgICAgWzxiPi1VU0VfUjE8L2I+XVs8Yj4tS1BJQzwvYj5dWzxiPi1PMDwvYj5dWzxiPi1HPC9iPiA8dmFyPm51bTwvdmFyPl1bPGI+LVY8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBTUEFSQyBvcHRpb25zOjwvZW0+CisgICAgIDwhLS0gVGhlIG9yZGVyIGhlcmUgaXMgaW1wb3J0YW50LiAgU2VlIGMtc3BhcmMudGV4aS4gLS0+CisgICAgICAgIFs8Yj4tQXY2PC9iPnw8Yj4tQXY3PC9iPnw8Yj4tQXY4PC9iPnw8Yj4tQXNwYXJjbGV0PC9iPnw8Yj4tQXNwYXJjbGl0ZTwvYj4KKyAgICAgICAgIDxiPi1BdjhwbHVzPC9iPnw8Yj4tQXY4cGx1c2E8L2I+fDxiPi1Bdjk8L2I+fDxiPi1BdjlhPC9iPl0KKyAgICAgICAgWzxiPi14YXJjaD12OHBsdXM8L2I+fDxiPi14YXJjaD12OHBsdXNhPC9iPl0gWzxiPi1idW1wPC9iPl0KKyAgICAgICAgWzxiPi0zMjwvYj58PGI+LTY0PC9iPl0KKyAgICAgCisgICAgIDxlbT5UYXJnZXQgVElDNTRYIG9wdGlvbnM6PC9lbT4KKyAgICAgIFs8Yj4tbWNwdT01NFsxMjM1ODldPC9iPnw8Yj4tbWNwdT01NFs1Nl1scDwvYj5dIFs8Yj4tbWZhci1tb2RlPC9iPnw8Yj4tbWY8L2I+XQorICAgICAgWzxiPi1tZXJyb3JzLXRvLWZpbGU8L2I+IDx2YXI+Jmx0O2ZpbGVuYW1lJmd0OzwvdmFyPnw8Yj4tbWU8L2I+IDx2YXI+Jmx0O2ZpbGVuYW1lJmd0OzwvdmFyPl0KKyAgICAgCisgICAgIAorICAgICA8ZW0+VGFyZ2V0IFRJQzZYIG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1tYXJjaD08L2I+PHZhcj5hcmNoPC92YXI+XSBbPGI+LW1iaWctZW5kaWFuPC9iPnw8Yj4tbWxpdHRsZS1lbmRpYW48L2I+XQorICAgICAgICBbPGI+LW1kc2J0PC9iPnw8Yj4tbW5vLWRzYnQ8L2I+XSBbPGI+LW1waWQ9bm88L2I+fDxiPi1tcGlkPW5lYXI8L2I+fDxiPi1tcGlkPWZhcjwvYj5dCisgICAgICAgIFs8Yj4tbXBpYzwvYj58PGI+LW1uby1waWM8L2I+XQorICAgICAKKyAgICAgPGVtPlRhcmdldCBUSUxFLUd4IG9wdGlvbnM6PC9lbT4KKyAgICAgICAgWzxiPi1tMzI8L2I+fDxiPi1tNjQ8L2I+XVs8Yj4tRUI8L2I+XVs8Yj4tRUw8L2I+XQorICAgICA8IS0tIFRJTEVQcm8gaGFzIG5vIG1hY2hpbmUtZGVwZW5kZW50IGFzc2VtYmxlciBvcHRpb25zIC0tPgorICAgICAKKyAgICAgCisgICAgIDxlbT5UYXJnZXQgWHRlbnNhIG9wdGlvbnM6PC9lbT4KKyAgICAgIFs8Yj4tLVtuby1ddGV4dC1zZWN0aW9uLWxpdGVyYWxzPC9iPl0gWzxiPi0tW25vLV1hYnNvbHV0ZS1saXRlcmFsczwvYj5dCisgICAgICBbPGI+LS1bbm8tXXRhcmdldC1hbGlnbjwvYj5dIFs8Yj4tLVtuby1dbG9uZ2NhbGxzPC9iPl0KKyAgICAgIFs8Yj4tLVtuby1ddHJhbnNmb3JtPC9iPl0KKyAgICAgIFs8Yj4tLXJlbmFtZS1zZWN0aW9uPC9iPiA8dmFyPm9sZG5hbWU8L3Zhcj49PHZhcj5uZXduYW1lPC92YXI+XQorICAgICAKKyAgICAgCisgICAgIDxlbT5UYXJnZXQgWjgwIG9wdGlvbnM6PC9lbT4KKyAgICAgICBbPGI+LXo4MDwvYj5dIFs8Yj4tcjgwMDwvYj5dCisgICAgICAgWzxiPiAtaWdub3JlLXVuZG9jdW1lbnRlZC1pbnN0cnVjdGlvbnM8L2I+XSBbPGI+LVdudWQ8L2I+XQorICAgICAgIFs8Yj4gLWlnbm9yZS11bnBvcnRhYmxlLWluc3RydWN0aW9uczwvYj5dIFs8Yj4tV251cDwvYj5dCisgICAgICAgWzxiPiAtd2Fybi11bmRvY3VtZW50ZWQtaW5zdHJ1Y3Rpb25zPC9iPl0gWzxiPi1XdWQ8L2I+XQorICAgICAgIFs8Yj4gLXdhcm4tdW5wb3J0YWJsZS1pbnN0cnVjdGlvbnM8L2I+XSBbPGI+LVd1cDwvYj5dCisgICAgICAgWzxiPiAtZm9yYmlkLXVuZG9jdW1lbnRlZC1pbnN0cnVjdGlvbnM8L2I+XSBbPGI+LUZ1ZDwvYj5dCisgICAgICAgWzxiPiAtZm9yYmlkLXVucG9ydGFibGUtaW5zdHJ1Y3Rpb25zPC9iPl0gWzxiPi1GdXA8L2I+XQorICAgICAKKyAgICAgPCEtLSBaODAwMCBoYXMgbm8gbWFjaGluZS1kZXBlbmRlbnQgYXNzZW1ibGVyIG9wdGlvbnMgLS0+CisgICAgIAorICAgICA8IS0tIG1hbiBlbmQgLS0+Cis8L3ByZT4KKyAgIDwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+CisgICAgIDxkbD4KKzwhLS0gVGhpcyBmaWxlIGlzIGRlc2lnbmVkIHRvIGJlIGluY2x1ZGVkIGluIG1hbnVhbHMgdGhhdCB1c2UgLS0+Cis8IS0tIGV4cGFuZGFyZ3YuIC0tPgorCisgICAgIDxkdD48Y29kZT5APC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxkZD5SZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gPHZhcj5maWxlPC92YXI+LiAgVGhlIG9wdGlvbnMgcmVhZCBhcmUKK2luc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBAPHZhcj5maWxlPC92YXI+IG9wdGlvbi4gIElmIDx2YXI+ZmlsZTwvdmFyPgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKworICAgICA8cD5PcHRpb25zIGluIDx2YXI+ZmlsZTwvdmFyPiBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBBIHdoaXRlc3BhY2UKK2NoYXJhY3RlciBtYXkgYmUgaW5jbHVkZWQgaW4gYW4gb3B0aW9uIGJ5IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUKK29wdGlvbiBpbiBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMuICBBbnkgY2hhcmFjdGVyIChpbmNsdWRpbmcgYQorYmFja3NsYXNoKSBtYXkgYmUgaW5jbHVkZWQgYnkgcHJlZml4aW5nIHRoZSBjaGFyYWN0ZXIgdG8gYmUgaW5jbHVkZWQKK3dpdGggYSBiYWNrc2xhc2guICBUaGUgPHZhcj5maWxlPC92YXI+IG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAPHZhcj5maWxlPC92YXI+IG9wdGlvbnM7IGFueSBzdWNoIG9wdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgcmVjdXJzaXZlbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tYVtjZGdobG1uc108L2NvZGU+PGRkPlR1cm4gb24gbGlzdGluZ3MsIGluIGFueSBvZiBhIHZhcmlldHkgb2Ygd2F5czoKKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT4tYWM8L2NvZGU+PGRkPm9taXQgZmFsc2UgY29uZGl0aW9uYWxzCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1hZDwvY29kZT48ZGQ+b21pdCBkZWJ1Z2dpbmcgZGlyZWN0aXZlcworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tYWc8L2NvZGU+PGRkPmluY2x1ZGUgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgbGlrZSBhcyB2ZXJzaW9uIGFuZCBvcHRpb25zIHBhc3NlZAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tYWg8L2NvZGU+PGRkPmluY2x1ZGUgaGlnaC1sZXZlbCBzb3VyY2UKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWFsPC9jb2RlPjxkZD5pbmNsdWRlIGFzc2VtYmx5CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1hbTwvY29kZT48ZGQ+aW5jbHVkZSBtYWNybyBleHBhbnNpb25zCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1hbjwvY29kZT48ZGQ+b21pdCBmb3JtcyBwcm9jZXNzaW5nCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1hczwvY29kZT48ZGQ+aW5jbHVkZSBzeW1ib2xzCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPj1maWxlPC9jb2RlPjxkZD5zZXQgdGhlIG5hbWUgb2YgdGhlIGxpc3RpbmcgZmlsZQorPC9kbD4KKworICAgICA8cD5Zb3UgbWF5IGNvbWJpbmUgdGhlc2Ugb3B0aW9uczsgZm9yIGV4YW1wbGUsIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1hbG48L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGFzc2VtYmx5CitsaXN0aW5nIHdpdGhvdXQgZm9ybXMgcHJvY2Vzc2luZy4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj1maWxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgaWYgdXNlZCwgbXVzdCBiZQordGhlIGxhc3Qgb25lLiAgQnkgaXRzZWxmLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRlZmF1bHRzIHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWFobHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWFsdGVybmF0ZTwvY29kZT48ZGQ+QmVnaW4gaW4gYWx0ZXJuYXRlIG1hY3JvIG1vZGUuIAorU2VlIDxhIGhyZWY9IkFsdG1hY3JvLmh0bWwjQWx0bWFjcm8iPjxjb2RlPi5hbHRtYWNybzwvY29kZT48L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1jb21wcmVzcy1kZWJ1Zy1zZWN0aW9uczwvY29kZT48ZGQ+Q29tcHJlc3MgRFdBUkYgZGVidWcgc2VjdGlvbnMgdXNpbmcgemxpYi4gIFRoZSBkZWJ1ZyBzZWN0aW9ucyBhcmUgcmVuYW1lZAordG8gYmVnaW4gd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi56ZGVidWc8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZCB0aGUgcmVzdWx0aW5nIG9iamVjdCBmaWxlIG1heSBub3QgYmUKK2NvbXBhdGlibGUgd2l0aCBvbGRlciBsaW5rZXJzIGFuZCBvYmplY3QgZmlsZSB1dGlsaXRpZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLW5vY29tcHJlc3MtZGVidWctc2VjdGlvbnM8L2NvZGU+PGRkPkRvIG5vdCBjb21wcmVzcyBEV0FSRiBkZWJ1ZyBzZWN0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tRDwvY29kZT48ZGQ+SWdub3JlZC4gIFRoaXMgb3B0aW9uIGlzIGFjY2VwdGVkIGZvciBzY3JpcHQgY29tcGF0aWJpbGl0eSB3aXRoIGNhbGxzIHRvCitvdGhlciBhc3NlbWJsZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1kZWJ1Zy1wcmVmaXgtbWFwIDwvY29kZT48dmFyPm9sZDwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj5uZXc8L3Zhcj48ZGQ+V2hlbiBhc3NlbWJsaW5nIGZpbGVzIGluIGRpcmVjdG9yeSA8c2FtcD48dmFyPm9sZDwvdmFyPjwvc2FtcD4sIHJlY29yZCBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlbSBhcyBpbiA8c2FtcD48dmFyPm5ldzwvdmFyPjwvc2FtcD4gaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tZGVmc3ltIDwvY29kZT48dmFyPnN5bTwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxkZD5EZWZpbmUgdGhlIHN5bWJvbCA8dmFyPnN5bTwvdmFyPiB0byBiZSA8dmFyPnZhbHVlPC92YXI+IGJlZm9yZSBhc3NlbWJsaW5nIHRoZSBpbnB1dCBmaWxlLiAKKzx2YXI+dmFsdWU8L3Zhcj4gbXVzdCBiZSBhbiBpbnRlZ2VyIGNvbnN0YW50LiAgQXMgaW4gQywgYSBsZWFkaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2luZGljYXRlcyBhIGhleGFkZWNpbWFsIHZhbHVlLCBhbmQgYSBsZWFkaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbmRpY2F0ZXMgYW4gb2N0YWwKK3ZhbHVlLiAgVGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wgY2FuIGJlIG92ZXJyaWRkZW4gaW5zaWRlIGEgc291cmNlIGZpbGUgdmlhIHRoZQordXNlIG9mIGEgPGNvZGU+LnNldDwvY29kZT4gcHNldWRvLW9wLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWY8L2NvZGU+PGRkPiZsZHF1bztmYXN0JnJkcXVvOyZtZGFzaDtza2lwIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnQgcHJlcHJvY2Vzc2luZyAoYXNzdW1lIHNvdXJjZSBpcworY29tcGlsZXIgb3V0cHV0KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1nPC9jb2RlPjxkdD48Y29kZT4tLWdlbi1kZWJ1ZzwvY29kZT48ZGQ+R2VuZXJhdGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIGFzc2VtYmxlciBzb3VyY2UgbGluZSB1c2luZyB3aGljaGV2ZXIKK2RlYnVnIGZvcm1hdCBpcyBwcmVmZXJyZWQgYnkgdGhlIHRhcmdldC4gIFRoaXMgY3VycmVudGx5IG1lYW5zIGVpdGhlciBTVEFCUywKK0VDT0ZGIG9yIERXQVJGMi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tZ3N0YWJzPC9jb2RlPjxkZD5HZW5lcmF0ZSBzdGFicyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGVhY2ggYXNzZW1ibGVyIGxpbmUuICBUaGlzCittYXkgaGVscCBkZWJ1Z2dpbmcgYXNzZW1ibGVyIGNvZGUsIGlmIHRoZSBkZWJ1Z2dlciBjYW4gaGFuZGxlIGl0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1nc3RhYnMrPC9jb2RlPjxkZD5HZW5lcmF0ZSBzdGFicyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGVhY2ggYXNzZW1ibGVyIGxpbmUsIHdpdGggR05VCitleHRlbnNpb25zIHRoYXQgcHJvYmFibHkgb25seSBnZGIgY2FuIGhhbmRsZSwgYW5kIHRoYXQgY291bGQgbWFrZSBvdGhlcgorZGVidWdnZXJzIGNyYXNoIG9yIHJlZnVzZSB0byByZWFkIHlvdXIgcHJvZ3JhbS4gIFRoaXMKK21heSBoZWxwIGRlYnVnZ2luZyBhc3NlbWJsZXIgY29kZS4gIEN1cnJlbnRseSB0aGUgb25seSBHTlUgZXh0ZW5zaW9uIGlzCit0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXQgYXNzZW1ibGluZyB0aW1lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1nZHdhcmYtMjwvY29kZT48ZGQ+R2VuZXJhdGUgRFdBUkYyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgZWFjaCBhc3NlbWJsZXIgbGluZS4gIFRoaXMKK21heSBoZWxwIGRlYnVnZ2luZyBhc3NlbWJsZXIgY29kZSwgaWYgdGhlIGRlYnVnZ2VyIGNhbiBoYW5kbGUgaXQuICBOb3RlJm1kYXNoO3RoaXMKK29wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIHRhcmdldHMsIG5vdCBhbGwgb2YgdGhlbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tc2l6ZS1jaGVjaz1lcnJvcjwvY29kZT48ZHQ+PGNvZGU+LS1zaXplLWNoZWNrPXdhcm5pbmc8L2NvZGU+PGRkPklzc3VlIGFuIGVycm9yIG9yIHdhcm5pbmcgZm9yIGludmFsaWQgRUxGIC5zaXplIGRpcmVjdGl2ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0taGVscDwvY29kZT48ZGQ+UHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBhbmQgZXhpdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tdGFyZ2V0LWhlbHA8L2NvZGU+PGRkPlByaW50IGEgc3VtbWFyeSBvZiBhbGwgdGFyZ2V0IHNwZWNpZmljIG9wdGlvbnMgYW5kIGV4aXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tSSA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+QWRkIGRpcmVjdG9yeSA8dmFyPmRpcjwvdmFyPiB0byB0aGUgc2VhcmNoIGxpc3QgZm9yIDxjb2RlPi5pbmNsdWRlPC9jb2RlPiBkaXJlY3RpdmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUo8L2NvZGU+PGRkPkRvbid0IHdhcm4gYWJvdXQgc2lnbmVkIG92ZXJmbG93LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUs8L2NvZGU+PGRkPklzc3VlIHdhcm5pbmdzIHdoZW4gZGlmZmVyZW5jZSB0YWJsZXMgYWx0ZXJlZCBmb3IgbG9uZyBkaXNwbGFjZW1lbnRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUw8L2NvZGU+PGR0Pjxjb2RlPi0ta2VlcC1sb2NhbHM8L2NvZGU+PGRkPktlZXAgKGluIHRoZSBzeW1ib2wgdGFibGUpIGxvY2FsIHN5bWJvbHMuICBUaGVzZSBzeW1ib2xzIHN0YXJ0IHdpdGgKK3N5c3RlbS1zcGVjaWZpYyBsb2NhbCBsYWJlbCBwcmVmaXhlcywgdHlwaWNhbGx5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lkw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIEVMRiBzeXN0ZW1zCitvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHRyYWRpdGlvbmFsIGEub3V0IHN5c3RlbXMuIAorU2VlIDxhIGhyZWY9IlN5bWJvbC1OYW1lcy5odG1sI1N5bWJvbC1OYW1lcyI+U3ltYm9sIE5hbWVzPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tbGlzdGluZy1saHMtd2lkdGg9PC9jb2RlPjx2YXI+bnVtYmVyPC92YXI+PGRkPlNldCB0aGUgbWF4aW11bSB3aWR0aCwgaW4gd29yZHMsIG9mIHRoZSBvdXRwdXQgZGF0YSBjb2x1bW4gZm9yIGFuIGFzc2VtYmxlcgorbGlzdGluZyB0byA8dmFyPm51bWJlcjwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tbGlzdGluZy1saHMtd2lkdGgyPTwvY29kZT48dmFyPm51bWJlcjwvdmFyPjxkZD5TZXQgdGhlIG1heGltdW0gd2lkdGgsIGluIHdvcmRzLCBvZiB0aGUgb3V0cHV0IGRhdGEgY29sdW1uIGZvciBjb250aW51YXRpb24KK2xpbmVzIGluIGFuIGFzc2VtYmxlciBsaXN0aW5nIHRvIDx2YXI+bnVtYmVyPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1saXN0aW5nLXJocy13aWR0aD08L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48ZGQ+U2V0IHRoZSBtYXhpbXVtIHdpZHRoIG9mIGFuIGlucHV0IHNvdXJjZSBsaW5lLCBhcyBkaXNwbGF5ZWQgaW4gYSBsaXN0aW5nLCB0bworPHZhcj5udW1iZXI8L3Zhcj4gYnl0ZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWxpc3RpbmctY29udC1saW5lcz08L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48ZGQ+U2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBwcmludGVkIGluIGEgbGlzdGluZyBmb3IgYSBzaW5nbGUgbGluZSBvZiBpbnB1dAordG8gPHZhcj5udW1iZXI8L3Zhcj4gKyAxLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW8gPC9jb2RlPjx2YXI+b2JqZmlsZTwvdmFyPjxkZD5OYW1lIHRoZSBvYmplY3QtZmlsZSBvdXRwdXQgZnJvbSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiA8dmFyPm9iamZpbGU8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tUjwvY29kZT48ZGQ+Rm9sZCB0aGUgZGF0YSBzZWN0aW9uIGludG8gdGhlIHRleHQgc2VjdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkaGFzaF8wMDJkc2l6ZV8wMDNkXzAwNDB2YXJfMDA3Ym51bWJlcl8wMDdkLTQiPjwvYT5TZXQgdGhlIGRlZmF1bHQgc2l6ZSBvZiBHQVMncyBoYXNoIHRhYmxlcyB0byBhIHByaW1lIG51bWJlciBjbG9zZSB0bworPHZhcj5udW1iZXI8L3Zhcj4uICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgY2FuIHJlZHVjZSB0aGUgbGVuZ3RoIG9mIHRpbWUgaXQgdGFrZXMgdGhlCithc3NlbWJsZXIgdG8gcGVyZm9ybSBpdHMgdGFza3MsIGF0IHRoZSBleHBlbnNlIG9mIGluY3JlYXNpbmcgdGhlIGFzc2VtYmxlcidzCittZW1vcnkgcmVxdWlyZW1lbnRzLiAgU2ltaWxhcmx5IHJlZHVjaW5nIHRoaXMgdmFsdWUgY2FuIHJlZHVjZSB0aGUgbWVtb3J5CityZXF1aXJlbWVudHMgYXQgdGhlIGV4cGVuc2Ugb2Ygc3BlZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXJlZHVjZS1tZW1vcnktb3ZlcmhlYWRzPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiByZWR1Y2VzIEdBUydzIG1lbW9yeSByZXF1aXJlbWVudHMsIGF0IHRoZSBleHBlbnNlIG9mIG1ha2luZyB0aGUKK2Fzc2VtYmx5IHByb2Nlc3NlcyBzbG93ZXIuICBDdXJyZW50bHkgdGhpcyBzd2l0Y2ggaXMgYSBzeW5vbnltIGZvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWhhc2gtc2l6ZT00MDUxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBidXQgaW4gdGhlIGZ1dHVyZSBpdCBtYXkgaGF2ZSBvdGhlciBlZmZlY3RzIGFzIHdlbGwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXN0YXRpc3RpY3M8L2NvZGU+PGRkPlByaW50IHRoZSBtYXhpbXVtIHNwYWNlIChpbiBieXRlcykgYW5kIHRvdGFsIHRpbWUgKGluIHNlY29uZHMpIHVzZWQgYnkKK2Fzc2VtYmx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1zdHJpcC1sb2NhbC1hYnNvbHV0ZTwvY29kZT48ZGQ+UmVtb3ZlIGxvY2FsIGFic29sdXRlIHN5bWJvbHMgZnJvbSB0aGUgb3V0Z29pbmcgc3ltYm9sIHRhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXY8L2NvZGU+PGR0Pjxjb2RlPi12ZXJzaW9uPC9jb2RlPjxkZD5QcmludCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gdmVyc2lvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tdmVyc2lvbjwvY29kZT48ZGQ+UHJpbnQgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHZlcnNpb24gYW5kIGV4aXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tVzwvY29kZT48ZHQ+PGNvZGU+LS1uby13YXJuPC9jb2RlPjxkZD5TdXBwcmVzcyB3YXJuaW5nIG1lc3NhZ2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1mYXRhbC13YXJuaW5nczwvY29kZT48ZGQ+VHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS13YXJuPC9jb2RlPjxkZD5Eb24ndCBzdXBwcmVzcyB3YXJuaW5nIG1lc3NhZ2VzIG9yIHRyZWF0IHRoZW0gYXMgZXJyb3JzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXc8L2NvZGU+PGRkPklnbm9yZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4teDwvY29kZT48ZGQ+SWdub3JlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1aPC9jb2RlPjxkZD5HZW5lcmF0ZSBhbiBvYmplY3QgZmlsZSBldmVuIGFmdGVyIGVycm9ycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tIHwgPC9jb2RlPjx2YXI+ZmlsZXM8L3Zhcj48Y29kZT4gLi4uPC9jb2RlPjxkZD5TdGFuZGFyZCBpbnB1dCwgb3Igc291cmNlIGZpbGVzIHRvIGFzc2VtYmxlLgorCisgICA8L2RsPgorICAgPCEtLSBtYW4gZW5kIC0tPgorCisgICA8cD5TZWUgPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+LCBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZAorZm9yIHRoZSA2NC1iaXQgbW9kZSBvZiB0aGUgQVJNIEFyY2hpdGVjdHVyZSAoQUFyY2g2NCkuCisKKyAgIDxwPlNlZSA8YSBocmVmPSJBbHBoYS1PcHRpb25zLmh0bWwjQWxwaGEtT3B0aW9ucyI+QWxwaGEgT3B0aW9uczwvYT4sIGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkCitmb3IgYW4gQWxwaGEgcHJvY2Vzc29yLgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvcgorYW4gQVJDIHByb2Nlc3Nvci4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1hcmNbNXw2fDd8OF08L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIGNvcmUgcHJvY2Vzc29yIHZhcmlhbnQuIAorPGJyPjxkdD48Y29kZT4tRUIgfCAtRUw8L2NvZGU+PGRkPlNlbGVjdCBlaXRoZXIgYmlnLWVuZGlhbiAoLUVCKSBvciBsaXR0bGUtZW5kaWFuICgtRUwpIG91dHB1dC4gCis8L2RsPgorCisgICA8cD5UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSBBUk0KK3Byb2Nlc3NvciBmYW1pbHkuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tY3B1PTwvY29kZT48dmFyPnByb2Nlc3NvcjwvdmFyPjxjb2RlPlsrPC9jb2RlPjx2YXI+ZXh0ZW5zaW9uPC92YXI+PGNvZGU+Li4uXTwvY29kZT48ZGQ+U3BlY2lmeSB3aGljaCBBUk0gcHJvY2Vzc29yIHZhcmlhbnQgaXMgdGhlIHRhcmdldC4gCis8YnI+PGR0Pjxjb2RlPi1tYXJjaD08L2NvZGU+PHZhcj5hcmNoaXRlY3R1cmU8L3Zhcj48Y29kZT5bKzwvY29kZT48dmFyPmV4dGVuc2lvbjwvdmFyPjxjb2RlPi4uLl08L2NvZGU+PGRkPlNwZWNpZnkgd2hpY2ggQVJNIGFyY2hpdGVjdHVyZSB2YXJpYW50IGlzIHVzZWQgYnkgdGhlIHRhcmdldC4gCis8YnI+PGR0Pjxjb2RlPi1tZnB1PTwvY29kZT48dmFyPmZsb2F0aW5nLXBvaW50LWZvcm1hdDwvdmFyPjxkZD5TZWxlY3Qgd2hpY2ggRmxvYXRpbmcgUG9pbnQgYXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQuIAorPGJyPjxkdD48Y29kZT4tbWZsb2F0LWFiaT08L2NvZGU+PHZhcj5hYmk8L3Zhcj48ZGQ+U2VsZWN0IHdoaWNoIGZsb2F0aW5nIHBvaW50IEFCSSBpcyBpbiB1c2UuIAorPGJyPjxkdD48Y29kZT4tbXRodW1iPC9jb2RlPjxkZD5FbmFibGUgVGh1bWIgb25seSBpbnN0cnVjdGlvbiBkZWNvZGluZy4gCis8YnI+PGR0Pjxjb2RlPi1tYXBjcy0zMiB8IC1tYXBjcy0yNiB8IC1tYXBjcy1mbG9hdCB8IC1tYXBjcy1yZWVudHJhbnQ8L2NvZGU+PGRkPlNlbGVjdCB3aGljaCBwcm9jZWR1cmUgY2FsbGluZyBjb252ZW50aW9uIGlzIGluIHVzZS4gCis8YnI+PGR0Pjxjb2RlPi1FQiB8IC1FTDwvY29kZT48ZGQ+U2VsZWN0IGVpdGhlciBiaWctZW5kaWFuICgtRUIpIG9yIGxpdHRsZS1lbmRpYW4gKC1FTCkgb3V0cHV0LiAKKzxicj48ZHQ+PGNvZGU+LW10aHVtYi1pbnRlcndvcms8L2NvZGU+PGRkPlNwZWNpZnkgdGhhdCB0aGUgY29kZSBoYXMgYmVlbiBnZW5lcmF0ZWQgd2l0aCBpbnRlcndvcmtpbmcgYmV0d2VlbiBUaHVtYiBhbmQKK0FSTSBjb2RlIGluIG1pbmQuIAorPGJyPjxkdD48Y29kZT4tazwvY29kZT48ZGQ+U3BlY2lmeSB0aGF0IFBJQyBjb2RlIGhhcyBiZWVuIGdlbmVyYXRlZC4gCis8L2RsPgorICAgPCEtLSBtYW4gZW5kIC0tPgorCisgICA8cD5TZWUgPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+LCBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIHdoZW4gYXMgaXMKK2NvbmZpZ3VyZWQgZm9yIHRoZSBCbGFja2ZpbiBwcm9jZXNzb3IgZmFtaWx5LgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorICAgPHA+U2VlIHRoZSBpbmZvIHBhZ2VzIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBDUklTLXNwZWNpZmljIG9wdGlvbnMuCisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IKK2EgRDEwViBwcm9jZXNzb3IuCisgICAgIAorPGEgbmFtZT0iaW5kZXgtRDEwVi1vcHRpbWl6YXRpb24tNSI+PC9hPgorPGEgbmFtZT0iaW5kZXgtb3B0aW1pemF0aW9uXzAwMmMtRDEwVi02Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1PPC9jb2RlPjxkZD5PcHRpbWl6ZSBvdXRwdXQgYnkgcGFyYWxsZWxpemluZyBpbnN0cnVjdGlvbnMuIAorPC9kbD4KKworICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvciBhIEQzMFYKK3Byb2Nlc3Nvci4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1EMzBWLW9wdGltaXphdGlvbi03Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1vcHRpbWl6YXRpb25fMDAyYy1EMzBWLTgiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LU88L2NvZGU+PGRkPk9wdGltaXplIG91dHB1dCBieSBwYXJhbGxlbGl6aW5nIGluc3RydWN0aW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1EMzBWLW5vcHMtOSI+PC9hPjxicj48ZHQ+PGNvZGU+LW48L2NvZGU+PGRkPldhcm4gd2hlbiBub3BzIGFyZSBnZW5lcmF0ZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtRDMwVi1ub3BzLWFmdGVyLTMyXzAwMmRiaXQtbXVsdGlwbHktMTAiPjwvYT48YnI+PGR0Pjxjb2RlPi1OPC9jb2RlPjxkZD5XYXJuIHdoZW4gYSBub3AgYWZ0ZXIgYSAzMi1iaXQgbXVsdGlwbHkgaW5zdHJ1Y3Rpb24gaXMgZ2VuZXJhdGVkLiAKKzwvZGw+CisgICA8IS0tIG1hbiBlbmQgLS0+CisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgdGhlCitBZGFwdGV2YSBFUElQSEFOWSBzZXJpZXMuCisKKyAgIDxwPlNlZSA8YSBocmVmPSJFcGlwaGFueS1PcHRpb25zLmh0bWwjRXBpcGhhbnktT3B0aW9ucyI+RXBpcGhhbnkgT3B0aW9uczwvYT4sIGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgd2hlbiBhcyBpcworY29uZmlndXJlZCBmb3IgYW4gRXBpcGhhbnkgcHJvY2Vzc29yLgorCisgICA8cD5TZWUgPGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT4sIGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgd2hlbiBhcyBpcworY29uZmlndXJlZCBmb3IgYW4gaTM4NiBwcm9jZXNzb3IuCisKKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+CisgICA8cD5UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZQorSW50ZWwgODA5NjAgcHJvY2Vzc29yLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tQUNBIHwgLUFDQV9BIHwgLUFDQiB8IC1BQ0MgfCAtQUtBIHwgLUFLQiB8IC1BS0MgfCAtQU1DPC9jb2RlPjxkZD5TcGVjaWZ5IHdoaWNoIHZhcmlhbnQgb2YgdGhlIDk2MCBhcmNoaXRlY3R1cmUgaXMgdGhlIHRhcmdldC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1iPC9jb2RlPjxkZD5BZGQgY29kZSB0byBjb2xsZWN0IHN0YXRpc3RpY3MgYWJvdXQgYnJhbmNoZXMgdGFrZW4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm8tcmVsYXg8L2NvZGU+PGRkPkRvIG5vdCBhbHRlciBjb21wYXJlLWFuZC1icmFuY2ggaW5zdHJ1Y3Rpb25zIGZvciBsb25nIGRpc3BsYWNlbWVudHM7CitlcnJvciBpZiBuZWNlc3NhcnkuCisKKyAgIDwvZGw+CisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgdGhlCitVYmljb20gSVAySyBzZXJpZXMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1taXAyMDIyZXh0PC9jb2RlPjxkZD5TcGVjaWZpZXMgdGhhdCB0aGUgZXh0ZW5kZWQgSVAyMDIyIGluc3RydWN0aW9ucyBhcmUgYWxsb3dlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taXAyMDIyPC9jb2RlPjxkZD5SZXN0b3JlcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHdoaWNoIHJlc3RyaWN0cyB0aGUgcGVybWl0dGVkIGluc3RydWN0aW9ucyB0bworanVzdCB0aGUgYmFzaWMgSVAyMDIyIG9uZXMuCisKKyAgIDwvZGw+CisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgdGhlCitSZW5lc2FzIE0zMkMgYW5kIE0xNkMgcHJvY2Vzc29ycy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW0zMmM8L2NvZGU+PGRkPkFzc2VtYmxlIE0zMkMgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0xNmM8L2NvZGU+PGRkPkFzc2VtYmxlIE0xNkMgaW5zdHJ1Y3Rpb25zICh0aGUgZGVmYXVsdCkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcmVsYXg8L2NvZGU+PGRkPkVuYWJsZSBzdXBwb3J0IGZvciBsaW5rLXRpbWUgcmVsYXhhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4taC10aWNrLWhleDwvY29kZT48ZGQ+U3VwcG9ydCBIJzAwIHN0eWxlIGhleCBjb25zdGFudHMgaW4gYWRkaXRpb24gdG8gMHgwMCBzdHlsZS4KKworICAgPC9kbD4KKworICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvciB0aGUKK1JlbmVzYXMgTTMyUiAoZm9ybWVybHkgTWl0c3ViaXNoaSBNMzJSKSBzZXJpZXMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi0tbTMycng8L2NvZGU+PGRkPlNwZWNpZnkgd2hpY2ggcHJvY2Vzc29yIGluIHRoZSBNMzJSIGZhbWlseSBpcyB0aGUgdGFyZ2V0LiAgVGhlIGRlZmF1bHQKK2lzIG5vcm1hbGx5IHRoZSBNMzJSLCBidXQgdGhpcyBvcHRpb24gY2hhbmdlcyBpdCB0byB0aGUgTTMyUlguCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXdhcm4tZXhwbGljaXQtcGFyYWxsZWwtY29uZmxpY3RzIG9yIC0tV3A8L2NvZGU+PGRkPlByb2R1Y2Ugd2FybmluZyBtZXNzYWdlcyB3aGVuIHF1ZXN0aW9uYWJsZSBwYXJhbGxlbCBjb25zdHJ1Y3RzIGFyZQorZW5jb3VudGVyZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLW5vLXdhcm4tZXhwbGljaXQtcGFyYWxsZWwtY29uZmxpY3RzIG9yIC0tV25wPC9jb2RlPjxkZD5EbyBub3QgcHJvZHVjZSB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gcXVlc3Rpb25hYmxlIHBhcmFsbGVsIGNvbnN0cnVjdHMgYXJlCitlbmNvdW50ZXJlZC4KKworICAgPC9kbD4KKworICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvciB0aGUKK01vdG9yb2xhIDY4MDAwIHNlcmllcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWw8L2NvZGU+PGRkPlNob3J0ZW4gcmVmZXJlbmNlcyB0byB1bmRlZmluZWQgc3ltYm9scywgdG8gb25lIHdvcmQgaW5zdGVhZCBvZiB0d28uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTY4MDAwIHwgLW02ODAwOCB8IC1tNjgwMTAgfCAtbTY4MDIwIHwgLW02ODAzMDwvY29kZT48ZHQ+PGNvZGU+fCAtbTY4MDQwIHwgLW02ODA2MCB8IC1tNjgzMDIgfCAtbTY4MzMxIHwgLW02ODMzMjwvY29kZT48ZHQ+PGNvZGU+fCAtbTY4MzMzIHwgLW02ODM0MCB8IC1tY3B1MzIgfCAtbTUyMDA8L2NvZGU+PGRkPlNwZWNpZnkgd2hhdCBwcm9jZXNzb3IgaW4gdGhlIDY4MDAwIGZhbWlseSBpcyB0aGUgdGFyZ2V0LiAgVGhlIGRlZmF1bHQKK2lzIG5vcm1hbGx5IHRoZSA2ODAyMCwgYnV0IHRoaXMgY2FuIGJlIGNoYW5nZWQgYXQgY29uZmlndXJhdGlvbiB0aW1lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW02ODg4MSB8IC1tNjg4ODIgfCAtbW5vLTY4ODgxIHwgLW1uby02ODg4MjwvY29kZT48ZGQ+VGhlIHRhcmdldCBtYWNoaW5lIGRvZXMgKG9yIGRvZXMgbm90KSBoYXZlIGEgZmxvYXRpbmctcG9pbnQgY29wcm9jZXNzb3IuIAorVGhlIGRlZmF1bHQgaXMgdG8gYXNzdW1lIGEgY29wcm9jZXNzb3IgZm9yIDY4MDIwLCA2ODAzMCwgYW5kIGNwdTMyLiAgQWx0aG91Z2gKK3RoZSBiYXNpYyA2ODAwMCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSA2ODg4MSwgYSBjb21iaW5hdGlvbiBvZiB0aGUKK3R3byBjYW4gYmUgc3BlY2lmaWVkLCBzaW5jZSBpdCdzIHBvc3NpYmxlIHRvIGRvIGVtdWxhdGlvbiBvZiB0aGUKK2NvcHJvY2Vzc29yIGluc3RydWN0aW9ucyB3aXRoIHRoZSBtYWluIHByb2Nlc3Nvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tNjg4NTEgfCAtbW5vLTY4ODUxPC9jb2RlPjxkZD5UaGUgdGFyZ2V0IG1hY2hpbmUgZG9lcyAob3IgZG9lcyBub3QpIGhhdmUgYSBtZW1vcnktbWFuYWdlbWVudAordW5pdCBjb3Byb2Nlc3Nvci4gIFRoZSBkZWZhdWx0IGlzIHRvIGFzc3VtZSBhbiBNTVUgZm9yIDY4MDIwIGFuZCB1cC4KKworICAgPC9kbD4KKworICAgPHA+Rm9yIGRldGFpbHMgYWJvdXQgdGhlIFBEUC0xMSBtYWNoaW5lIGRlcGVuZGVudCBmZWF0dXJlcyBvcHRpb25zLAorc2VlIDxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT4uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tcGljIHwgLW1uby1waWM8L2NvZGU+PGRkPkdlbmVyYXRlIHBvc2l0aW9uLWluZGVwZW5kZW50IChvciBwb3NpdGlvbi1kZXBlbmRlbnQpIGNvZGUuICBUaGUKK2RlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1waWM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWxsPC9jb2RlPjxkdD48Y29kZT4tbWFsbC1leHRlbnNpb25zPC9jb2RlPjxkZD5FbmFibGUgYWxsIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tZXh0ZW5zaW9uczwvY29kZT48ZGQ+RGlzYWJsZSBhbGwgaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTwvY29kZT48dmFyPmV4dGVuc2lvbjwvdmFyPjxjb2RlPiB8IC1tbm8tPC9jb2RlPjx2YXI+ZXh0ZW5zaW9uPC92YXI+PGRkPkVuYWJsZSAob3IgZGlzYWJsZSkgYSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIHNldCBleHRlbnNpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTwvY29kZT48dmFyPmNwdTwvdmFyPjxkZD5FbmFibGUgdGhlIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zIHN1cHBvcnRlZCBieSBhIHBhcnRpY3VsYXIgQ1BVLCBhbmQKK2Rpc2FibGUgYWxsIG90aGVyIGV4dGVuc2lvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTwvY29kZT48dmFyPm1hY2hpbmU8L3Zhcj48ZGQ+RW5hYmxlIHRoZSBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgYSBwYXJ0aWN1bGFyIG1hY2hpbmUKK21vZGVsLCBhbmQgZGlzYWJsZSBhbGwgb3RoZXIgZXh0ZW5zaW9ucy4gCis8L2RsPgorCisgICA8cD5UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yCithIHBpY29KYXZhIHByb2Nlc3Nvci4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LVBKLWVuZGlhbm5lc3MtMTEiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWVuZGlhbm5lc3NfMDAyYy1QSi0xMiI+PC9hPgorPGEgbmFtZT0iaW5kZXgtYmlnLWVuZGlhbi1vdXRwdXRfMDAyYy1QSi0xMyI+PC9hPgorPGRsPjxkdD48Y29kZT4tbWI8L2NvZGU+PGRkPkdlbmVyYXRlICZsZHF1bztiaWcgZW5kaWFuJnJkcXVvOyBmb3JtYXQgb3V0cHV0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWxpdHRsZS1lbmRpYW4tb3V0cHV0XzAwMmMtUEotMTQiPjwvYT48YnI+PGR0Pjxjb2RlPi1tbDwvY29kZT48ZGQ+R2VuZXJhdGUgJmxkcXVvO2xpdHRsZSBlbmRpYW4mcmRxdW87IGZvcm1hdCBvdXRwdXQuCisKKyAgIDwvZGw+CisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgdGhlCitNb3Rvcm9sYSA2OEhDMTEgb3IgNjhIQzEyIHNlcmllcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW02OGhjMTEgfCAtbTY4aGMxMiB8IC1tNjhoY3MxMiB8IC1tbTlzMTJ4IHwgLW1tOXMxMnhnPC9jb2RlPjxkZD5TcGVjaWZ5IHdoYXQgcHJvY2Vzc29yIGlzIHRoZSB0YXJnZXQuICBUaGUgZGVmYXVsdCBpcworZGVmaW5lZCBieSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2hlbiBidWlsZGluZyB0aGUgYXNzZW1ibGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS14Z2F0ZS1yYW1vZmZzZXQ8L2NvZGU+PGRkPkluc3RydWN0IHRoZSBsaW5rZXIgdG8gb2Zmc2V0IFJBTSBhZGRyZXNzZXMgZnJvbSBTMTJYIGFkZHJlc3Mgc3BhY2UgaW50bworWEdBVEUgYWRkcmVzcyBzcGFjZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2hvcnQ8L2NvZGU+PGRkPlNwZWNpZnkgdG8gdXNlIHRoZSAxNi1iaXQgaW50ZWdlciBBQkkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmc8L2NvZGU+PGRkPlNwZWNpZnkgdG8gdXNlIHRoZSAzMi1iaXQgaW50ZWdlciBBQkkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNob3J0LWRvdWJsZTwvY29kZT48ZGQ+U3BlY2lmeSB0byB1c2UgdGhlIDMyLWJpdCBkb3VibGUgQUJJLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1sb25nLWRvdWJsZTwvY29kZT48ZGQ+U3BlY2lmeSB0byB1c2UgdGhlIDY0LWJpdCBkb3VibGUgQUJJLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1mb3JjZS1sb25nLWJyYW5jaGVzPC9jb2RlPjxkZD5SZWxhdGl2ZSBicmFuY2hlcyBhcmUgdHVybmVkIGludG8gYWJzb2x1dGUgb25lcy4gVGhpcyBjb25jZXJucworY29uZGl0aW9uYWwgYnJhbmNoZXMsIHVuY29uZGl0aW9uYWwgYnJhbmNoZXMgYW5kIGJyYW5jaGVzIHRvIGEKK3N1YiByb3V0aW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVMgfCAtLXNob3J0LWJyYW5jaGVzPC9jb2RlPjxkZD5EbyBub3QgdHVybiByZWxhdGl2ZSBicmFuY2hlcyBpbnRvIGFic29sdXRlIG9uZXMKK3doZW4gdGhlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXN0cmljdC1kaXJlY3QtbW9kZTwvY29kZT48ZGQ+RG8gbm90IHR1cm4gdGhlIGRpcmVjdCBhZGRyZXNzaW5nIG1vZGUgaW50byBleHRlbmRlZCBhZGRyZXNzaW5nIG1vZGUKK3doZW4gdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IHN1cHBvcnQgZGlyZWN0IGFkZHJlc3NpbmcgbW9kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tcHJpbnQtaW5zbi1zeW50YXg8L2NvZGU+PGRkPlByaW50IHRoZSBzeW50YXggb2YgaW5zdHJ1Y3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tcHJpbnQtb3Bjb2RlczwvY29kZT48ZGQ+UHJpbnQgdGhlIGxpc3Qgb2YgaW5zdHJ1Y3Rpb25zIHdpdGggc3ludGF4IGFuZCB0aGVuIGV4aXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWdlbmVyYXRlLWV4YW1wbGU8L2NvZGU+PGRkPlByaW50IGFuIGV4YW1wbGUgb2YgaW5zdHJ1Y3Rpb24gZm9yIGVhY2ggcG9zc2libGUgaW5zdHJ1Y3Rpb24gYW5kIHRoZW4gZXhpdC4gCitUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3IgdGVzdGluZyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4KKworICAgPC9kbD4KKworICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBpcyBjb25maWd1cmVkCitmb3IgdGhlIFNQQVJDIGFyY2hpdGVjdHVyZToKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LUF2NiB8IC1BdjcgfCAtQXY4IHwgLUFzcGFyY2xldCB8IC1Bc3BhcmNsaXRlPC9jb2RlPjxkdD48Y29kZT4tQXY4cGx1cyB8IC1BdjhwbHVzYSB8IC1BdjkgfCAtQXY5YTwvY29kZT48ZGQ+RXhwbGljaXRseSBzZWxlY3QgYSB2YXJpYW50IG9mIHRoZSBTUEFSQyBhcmNoaXRlY3R1cmUuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY4cGx1czwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY4cGx1c2E8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VsZWN0IGEgMzIgYml0IGVudmlyb25tZW50LiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUF2OTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWxlY3QgYSA2NCBiaXQgZW52aXJvbm1lbnQuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY4cGx1c2E8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUF2OWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZW5hYmxlIHRoZSBTUEFSQyBWOSBpbnN0cnVjdGlvbiBzZXQgd2l0aAorVWx0cmFTUEFSQyBleHRlbnNpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXhhcmNoPXY4cGx1cyB8IC14YXJjaD12OHBsdXNhPC9jb2RlPjxkZD5Gb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBTb2xhcmlzIHY5IGFzc2VtYmxlci4gIFRoZXNlIG9wdGlvbnMgYXJlCitlcXVpdmFsZW50IHRvIC1BdjhwbHVzIGFuZCAtQXY4cGx1c2EsIHJlc3BlY3RpdmVseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1idW1wPC9jb2RlPjxkZD5XYXJuIHdoZW4gdGhlIGFzc2VtYmxlciBzd2l0Y2hlcyB0byBhbm90aGVyIGFyY2hpdGVjdHVyZS4gCis8L2RsPgorCisgICA8cD5UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSAnYzU0eAorYXJjaGl0ZWN0dXJlLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWZhci1tb2RlPC9jb2RlPjxkZD5FbmFibGUgZXh0ZW5kZWQgYWRkcmVzc2luZyBtb2RlLiAgQWxsIGFkZHJlc3NlcyBhbmQgcmVsb2NhdGlvbnMgd2lsbCBhc3N1bWUKK2V4dGVuZGVkIGFkZHJlc3NpbmcgKHVzdWFsbHkgMjMgYml0cykuIAorPGJyPjxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5DUFVfVkVSU0lPTjwvdmFyPjxkZD5TZXRzIHRoZSBDUFUgdmVyc2lvbiBiZWluZyBjb21waWxlZCBmb3IuIAorPGJyPjxkdD48Y29kZT4tbWVycm9ycy10by1maWxlIDwvY29kZT48dmFyPkZJTEVOQU1FPC92YXI+PGRkPlJlZGlyZWN0IGVycm9yIG91dHB1dCB0byBhIGZpbGUsIGZvciBicm9rZW4gc3lzdGVtcyB3aGljaCBkb24ndCBzdXBwb3J0IHN1Y2gKK2JlaGF2aW91ciBpbiB0aGUgc2hlbGwuIAorPC9kbD4KKworICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvcgorYSA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IHByb2Nlc3Nvci4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LUcgPC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPlRoaXMgb3B0aW9uIHNldHMgdGhlIGxhcmdlc3Qgc2l6ZSBvZiBhbiBvYmplY3QgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZAoraW1wbGljaXRseSB3aXRoIHRoZSA8Y29kZT5ncDwvY29kZT4gcmVnaXN0ZXIuICBJdCBpcyBvbmx5IGFjY2VwdGVkIGZvciB0YXJnZXRzIHRoYXQKK3VzZSBFQ09GRiBmb3JtYXQsIHN1Y2ggYXMgYSBERUNzdGF0aW9uIHJ1bm5pbmcgVWx0cml4LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1NSVBTLWVuZGlhbm5lc3MtMTUiPjwvYT48YSBuYW1lPSJpbmRleC1lbmRpYW5uZXNzXzAwMmMtTUlQUy0xNiI+PC9hPjxhIG5hbWU9ImluZGV4LWJpZy1lbmRpYW4tb3V0cHV0XzAwMmMtTUlQUy0xNyI+PC9hPjxicj48ZHQ+PGNvZGU+LUVCPC9jb2RlPjxkZD5HZW5lcmF0ZSAmbGRxdW87YmlnIGVuZGlhbiZyZHF1bzsgZm9ybWF0IG91dHB1dC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1saXR0bGUtZW5kaWFuLW91dHB1dF8wMDJjLU1JUFMtMTgiPjwvYT48YnI+PGR0Pjxjb2RlPi1FTDwvY29kZT48ZGQ+R2VuZXJhdGUgJmxkcXVvO2xpdHRsZSBlbmRpYW4mcmRxdW87IGZvcm1hdCBvdXRwdXQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtTUlQUy1JU0EtMTkiPjwvYT48YnI+PGR0Pjxjb2RlPi1taXBzMTwvY29kZT48ZHQ+PGNvZGU+LW1pcHMyPC9jb2RlPjxkdD48Y29kZT4tbWlwczM8L2NvZGU+PGR0Pjxjb2RlPi1taXBzNDwvY29kZT48ZHQ+PGNvZGU+LW1pcHM1PC9jb2RlPjxkdD48Y29kZT4tbWlwczMyPC9jb2RlPjxkdD48Y29kZT4tbWlwczMycjI8L2NvZGU+PGR0Pjxjb2RlPi1taXBzNjQ8L2NvZGU+PGR0Pjxjb2RlPi1taXBzNjRyMjwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgYSBwYXJ0aWN1bGFyIDxzcGFuIGNsYXNzPSJzYyI+bWlwczwvc3Bhbj4gSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSBsZXZlbC4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXBzMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBhbiBhbGlhcyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWFyY2g9cjMwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1pcHMyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFuCithbGlhcyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWFyY2g9cjYwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1pcHMzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFuIGFsaWFzIGZvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWFyY2g9cjQwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1pcHM0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFuIGFsaWFzIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tYXJjaD1yODAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXBzNTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWlwczMyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1taXBzMzJyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWlwczY0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1pcHM2NHIyPC9zcGFuPjwvc2FtcD4mcnNxdW87Citjb3JyZXNwb25kIHRvIGdlbmVyaWMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TUlQUyBWPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk1JUFMzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5NSVBTMzIgUmVsZWFzZSAyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk1JUFM2NDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk1JUFM2NCBSZWxlYXNlIDI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK0lTQSBwcm9jZXNzb3JzLCByZXNwZWN0aXZlbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFyY2g9PC9jb2RlPjx2YXI+Q1BVPC92YXI+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIGEgcGFydGljdWxhciA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IGNwdS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdHVuZT08L2NvZGU+PHZhcj5jcHU8L3Zhcj48ZGQ+U2NoZWR1bGUgYW5kIHR1bmUgZm9yIGEgcGFydGljdWxhciA8c3BhbiBjbGFzcz0ic2MiPm1pcHM8L3NwYW4+IGNwdS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZml4NzAwMDwvY29kZT48ZHQ+PGNvZGU+LW1uby1maXg3MDAwPC9jb2RlPjxkZD5DYXVzZSBub3BzIHRvIGJlIGluc2VydGVkIGlmIHRoZSByZWFkIG9mIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlcgorb2YgYW4gbWZoaSBvciBtZmxvIGluc3RydWN0aW9uIG9jY3VycyBpbiB0aGUgZm9sbG93aW5nIHR3byBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRlYnVnPC9jb2RlPjxkdD48Y29kZT4tbm8tbWRlYnVnPC9jb2RlPjxkZD5DYXVzZSBzdGFicy1zdHlsZSBkZWJ1Z2dpbmcgb3V0cHV0IHRvIGdvIGludG8gYW4gRUNPRkYtc3R5bGUgLm1kZWJ1Zworc2VjdGlvbiBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBFTEYgLnN0YWJzIHNlY3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wZHI8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcGRyPC9jb2RlPjxkZD5Db250cm9sIGdlbmVyYXRpb24gb2YgPGNvZGU+LnBkcjwvY29kZT4gc2VjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWdwMzI8L2NvZGU+PGR0Pjxjb2RlPi1tZnAzMjwvY29kZT48ZGQ+VGhlIHJlZ2lzdGVyIHNpemVzIGFyZSBub3JtYWxseSBpbmZlcnJlZCBmcm9tIHRoZSBJU0EgYW5kIEFCSSwgYnV0IHRoZXNlCitmbGFncyBmb3JjZSBhIGNlcnRhaW4gZ3JvdXAgb2YgcmVnaXN0ZXJzIHRvIGJlIHRyZWF0ZWQgYXMgMzIgYml0cyB3aWRlIGF0CithbGwgdGltZXMuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tZ3AzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb250cm9scyB0aGUgc2l6ZSBvZiBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzCithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWZwMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29udHJvbHMgdGhlIHNpemUgb2YgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pcHMxNjwvY29kZT48ZHQ+PGNvZGU+LW5vLW1pcHMxNjwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE1JUFMgMTYgcHJvY2Vzc29yLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHB1dHRpbmcKKzxjb2RlPi5zZXQgbWlwczE2PC9jb2RlPiBhdCB0aGUgc3RhcnQgb2YgdGhlIGFzc2VtYmx5IGZpbGUuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1uby1taXBzMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3R1cm5zIG9mZiB0aGlzIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbWljcm9taXBzPC9jb2RlPjxkdD48Y29kZT4tbW5vLW1pY3JvbWlwczwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIG1pY3JvTUlQUyBwcm9jZXNzb3IuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gcHV0dGluZworPGNvZGU+LnNldCBtaWNyb21pcHM8L2NvZGU+IGF0IHRoZSBzdGFydCBvZiB0aGUgYXNzZW1ibHkgZmlsZS4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1uby1taWNyb21pcHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3R1cm5zIG9mZiB0aGlzIG9wdGlvbi4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBwdXR0aW5nIDxjb2RlPi5zZXQgbm9taWNyb21pcHM8L2NvZGU+CithdCB0aGUgc3RhcnQgb2YgdGhlIGFzc2VtYmx5IGZpbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNtYXJ0bWlwczwvY29kZT48ZHQ+PGNvZGU+LW1uby1zbWFydG1pcHM8L2NvZGU+PGRkPkVuYWJsZXMgdGhlIFNtYXJ0TUlQUyBleHRlbnNpb24gdG8gdGhlIE1JUFMzMiBpbnN0cnVjdGlvbiBzZXQuIFRoaXMgaXMKK2VxdWl2YWxlbnQgdG8gcHV0dGluZyA8Y29kZT4uc2V0IHNtYXJ0bWlwczwvY29kZT4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBhc3NlbWJseSBmaWxlLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1uby1zbWFydG1pcHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pcHMzZDwvY29kZT48ZHQ+PGNvZGU+LW5vLW1pcHMzZDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE1JUFMtM0QgQXBwbGljYXRpb24gU3BlY2lmaWMgRXh0ZW5zaW9uLiAKK1RoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgTUlQUy0zRCBpbnN0cnVjdGlvbnMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbm8tbWlwczNkPC9zcGFuPjwvc2FtcD4mcnNxdW87IHR1cm5zIG9mZiB0aGlzIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZG14PC9jb2RlPjxkdD48Y29kZT4tbm8tbWRteDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE1ETVggQXBwbGljYXRpb24gU3BlY2lmaWMgRXh0ZW5zaW9uLiAKK1RoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgTURNWCBpbnN0cnVjdGlvbnMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbm8tbWRteDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0dXJucyBvZmYgdGhpcyBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRzcDwvY29kZT48ZHQ+PGNvZGU+LW1uby1kc3A8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBEU1AgUmVsZWFzZSAxIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4gCitUaGlzIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0IERTUCBSZWxlYXNlIDEgaW5zdHJ1Y3Rpb25zLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1uby1kc3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kc3ByMjwvY29kZT48ZHQ+PGNvZGU+LW1uby1kc3ByMjwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIERTUCBSZWxlYXNlIDIgQXBwbGljYXRpb24gU3BlY2lmaWMgRXh0ZW5zaW9uLiAKK1RoaXMgb3B0aW9uIGltcGxpZXMgLW1kc3AuIAorVGhpcyB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIGFjY2VwdCBEU1AgUmVsZWFzZSAyIGluc3RydWN0aW9ucy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbm8tZHNwcjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tdDwvY29kZT48ZHQ+PGNvZGU+LW1uby1tdDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE1UIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4gCitUaGlzIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0IE1UIGluc3RydWN0aW9ucy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tbm8tbXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tY3U8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbWN1PC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgTUNVIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4gCitUaGlzIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0IE1DVSBpbnN0cnVjdGlvbnMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbW5vLW1jdTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0dXJucyBvZmYgdGhpcyBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWNvbnN0cnVjdC1mbG9hdHM8L2NvZGU+PGR0Pjxjb2RlPi0tbm8tY29uc3RydWN0LWZsb2F0czwvY29kZT48ZGQ+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby1jb25zdHJ1Y3QtZmxvYXRzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBkaXNhYmxlcyB0aGUgY29uc3RydWN0aW9uIG9mCitkb3VibGUgd2lkdGggZmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzIGJ5IGxvYWRpbmcgdGhlIHR3byBoYWx2ZXMgb2YgdGhlCit2YWx1ZSBpbnRvIHRoZSB0d28gc2luZ2xlIHdpZHRoIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyB0aGF0IG1ha2UgdXAKK3RoZSBkb3VibGUgd2lkdGggcmVnaXN0ZXIuICBCeSBkZWZhdWx0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1jb25zdHJ1Y3QtZmxvYXRzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzCitzZWxlY3RlZCwgYWxsb3dpbmcgY29uc3RydWN0aW9uIG9mIHRoZXNlIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1lbXVsYXRpb24tMjAiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZW11bGF0aW9uPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gY2F1c2VzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRvIGVtdWxhdGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gY29uZmlndXJlZAorZm9yIHNvbWUgb3RoZXIgdGFyZ2V0LCBpbiBhbGwgcmVzcGVjdHMsIGluY2x1ZGluZyBvdXRwdXQgZm9ybWF0IChjaG9vc2luZworYmV0d2VlbiBFTEYgYW5kIEVDT0ZGIG9ubHkpLCBoYW5kbGluZyBvZiBwc2V1ZG8tb3Bjb2RlcyB3aGljaCBtYXkgZ2VuZXJhdGUKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiBvciBzdG9yZSBzeW1ib2wgdGFibGUgaW5mb3JtYXRpb24sIGFuZCBkZWZhdWx0CitlbmRpYW5uZXNzLiAgVGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG5hbWVzIGFyZTogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXBzZWNvZmY8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1pcHNlbGY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlwc2xlY29mZjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXBzYmVjb2ZmPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1pcHNsZWxmPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXBzYmVsZjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSBmaXJzdCB0d28gZG8gbm90IGFsdGVyIHRoZSBkZWZhdWx0IGVuZGlhbm5lc3MgZnJvbSB0aGF0CitvZiB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBhc3NlbWJsZXIgd2FzIGNvbmZpZ3VyZWQ7IHRoZSBvdGhlcnMgY2hhbmdlCit0aGUgZGVmYXVsdCB0byBsaXR0bGUtIG9yIGJpZy1lbmRpYW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbiB0aGUgbmFtZS4gIFVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUVCPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUVMPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgb3ZlcnJpZGUgdGhlIGVuZGlhbm5lc3MKK3NlbGVjdGlvbiBpbiBhbnkgY2FzZS4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgd2hlbiB0aGUgcHJpbWFyeSB0YXJnZXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGlzIGNvbmZpZ3VyZWQgZm9yIGlzIGEgPHNwYW4gY2xhc3M9InNjIj5taXBzPC9zcGFuPiBFTEYgb3IgRUNPRkYgdGFyZ2V0LiAKK0Z1cnRoZXJtb3JlLCB0aGUgcHJpbWFyeSB0YXJnZXQgb3Igb3RoZXJzIHNwZWNpZmllZCB3aXRoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZW5hYmxlLXRhcmdldHM9Li4uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGF0IGNvbmZpZ3VyYXRpb24gdGltZSBtdXN0IGluY2x1ZGUgc3VwcG9ydCBmb3IKK3RoZSBvdGhlciBmb3JtYXQsIGlmIGJvdGggYXJlIHRvIGJlIGF2YWlsYWJsZS4gIEZvciBleGFtcGxlLCB0aGUgSXJpeCA1Citjb25maWd1cmF0aW9uIGluY2x1ZGVzIHN1cHBvcnQgZm9yIGJvdGguCisKKyAgICAgPHA+RXZlbnR1YWxseSwgdGhpcyBvcHRpb24gd2lsbCBzdXBwb3J0IG1vcmUgY29uZmlndXJhdGlvbnMsIHdpdGggbW9yZQorZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgYXNzZW1ibGVyJ3MgYmVoYXZpb3IsIGFuZCB3aWxsIGJlIHN1cHBvcnRlZCBmb3IKK21vcmUgcHJvY2Vzc29ycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub2NwcDwvY29kZT48ZGQ+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaWdub3JlcyB0aGlzIG9wdGlvbi4gIEl0IGlzIGFjY2VwdGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKK3RoZSBuYXRpdmUgdG9vbHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXRyYXA8L2NvZGU+PGR0Pjxjb2RlPi0tbm8tdHJhcDwvY29kZT48ZHQ+PGNvZGU+LS1icmVhazwvY29kZT48ZHQ+PGNvZGU+LS1uby1icmVhazwvY29kZT48ZGQ+Q29udHJvbCBob3cgdG8gZGVhbCB3aXRoIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93IGFuZCBkaXZpc2lvbiBieSB6ZXJvLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS10cmFwPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby1icmVhazwvc3Bhbj48L3NhbXA+JnJzcXVvOyAod2hpY2ggYXJlIHN5bm9ueW1zKSB0YWtlIGEgdHJhcCBleGNlcHRpb24KKyhhbmQgb25seSB3b3JrIGZvciBJbnN0cnVjdGlvbiBTZXQgQXJjaGl0ZWN0dXJlIGxldmVsIDIgYW5kIGhpZ2hlcik7CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tYnJlYWs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLXRyYXA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGFsc28gc3lub255bXMsIGFuZCB0aGUgZGVmYXVsdCkgdGFrZSBhCiticmVhayBleGNlcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbjwvY29kZT48ZGQ+V2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiB3aWxsIGlzc3VlIGEgd2FybmluZyBldmVyeQordGltZSBpdCBnZW5lcmF0ZXMgYSBub3AgaW5zdHJ1Y3Rpb24gZnJvbSBhIG1hY3JvLiAKKzwvZGw+CisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IKK2FuIE1Db3JlIHByb2Nlc3Nvci4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWpzcmkyYnNyPC9jb2RlPjxkdD48Y29kZT4tbm9qc3JpMmJzcjwvY29kZT48ZGQ+RW5hYmxlIG9yIGRpc2FibGUgdGhlIEpTUkkgdG8gQlNSIHRyYW5zZm9ybWF0aW9uLiAgQnkgZGVmYXVsdCB0aGlzIGlzIGVuYWJsZWQuIAorVGhlIGNvbW1hbmQgbGluZSBvcHRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbm9qc3JpMmJzcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIGl0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXNpZmlsdGVyPC9jb2RlPjxkdD48Y29kZT4tbm9zaWZpbHRlcjwvY29kZT48ZGQ+RW5hYmxlIG9yIGRpc2FibGUgdGhlIHNpbGljb24gZmlsdGVyIGJlaGF2aW91ci4gIEJ5IGRlZmF1bHQgdGhpcyBpcyBkaXNhYmxlZC4gCitUaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tc2lmaWx0ZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1yZWxheDwvY29kZT48ZGQ+QWx0ZXIganVtcCBpbnN0cnVjdGlvbnMgZm9yIGxvbmcgZGlzcGxhY2VtZW50cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY3B1PVsyMTB8MzQwXTwvY29kZT48ZGQ+U2VsZWN0IHRoZSBjcHUgdHlwZSBvbiB0aGUgdGFyZ2V0IGhhcmR3YXJlLiAgVGhpcyBjb250cm9scyB3aGljaCBpbnN0cnVjdGlvbnMKK2NhbiBiZSBhc3NlbWJsZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tRUI8L2NvZGU+PGRkPkFzc2VtYmxlIGZvciBhIGJpZyBlbmRpYW4gdGFyZ2V0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUVMPC9jb2RlPjxkZD5Bc3NlbWJsZSBmb3IgYSBsaXR0bGUgZW5kaWFuIHRhcmdldC4KKworICAgPC9kbD4KKworICAgPHA+U2VlIHRoZSBpbmZvIHBhZ2VzIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBNTUlYLXNwZWNpZmljIG9wdGlvbnMuCisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDxwPlNlZSA8YSBocmVmPSJQb3dlclBDXzAwMmRPcHRzLmh0bWwjUG93ZXJQQ18wMDJkT3B0cyI+UG93ZXJQQy1PcHRzPC9hPiwgZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQKK2ZvciBhIFBvd2VyUEMgcHJvY2Vzc29yLgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorICAgPHA+U2VlIHRoZSBpbmZvIHBhZ2VzIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBSWC1zcGVjaWZpYyBvcHRpb25zLgorCisgICA8cD5UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSBzMzkwCitwcm9jZXNzb3IgZmFtaWx5LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbTMxPC9jb2RlPjxkdD48Y29kZT4tbTY0PC9jb2RlPjxkZD5TZWxlY3QgdGhlIHdvcmQgc2l6ZSwgZWl0aGVyIDMxLzMyIGJpdHMgb3IgNjQgYml0cy4gCis8YnI+PGR0Pjxjb2RlPi1tZXNhPC9jb2RlPjxicj48ZHQ+PGNvZGU+LW16YXJjaDwvY29kZT48ZGQ+U2VsZWN0IHRoZSBhcmNoaXRlY3R1cmUgbW9kZSwgZWl0aGVyIHRoZSBFbnRlcnByaXNlIFN5c3RlbQorQXJjaGl0ZWN0dXJlIChlc2EpIG9yIHRoZSB6L0FyY2hpdGVjdHVyZSBtb2RlICh6YXJjaCkuIAorPGJyPjxkdD48Y29kZT4tbWFyY2g9PC9jb2RlPjx2YXI+cHJvY2Vzc29yPC92YXI+PGRkPlNwZWNpZnkgd2hpY2ggczM5MCBwcm9jZXNzb3IgdmFyaWFudCBpcyB0aGUgdGFyZ2V0LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmc2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmc2PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj56OTAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPno5OTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ejktMTA5PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPno5LWVjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnoxMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8YnI+PGR0Pjxjb2RlPi1tcmVnbmFtZXM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcmVnbmFtZXM8L2NvZGU+PGRkPkFsbG93IG9yIGRpc2FsbG93IHN5bWJvbGljIG5hbWVzIGZvciByZWdpc3RlcnMuIAorPGJyPjxkdD48Y29kZT4tbXdhcm4tYXJlZy16ZXJvPC9jb2RlPjxkZD5XYXJuIHdoZW5ldmVyIHRoZSBvcGVyYW5kIGZvciBhIGJhc2Ugb3IgaW5kZXggcmVnaXN0ZXIgaGFzIGJlZW4gc3BlY2lmaWVkCitidXQgZXZhbHVhdGVzIHRvIHplcm8uIAorPC9kbD4KKyAgIDwhLS0gbWFuIGVuZCAtLT4KKworICAgPHA+U2VlIDxhIGhyZWY9IlRJQzZYLU9wdGlvbnMuaHRtbCNUSUM2WC1PcHRpb25zIj5USUM2WCBPcHRpb25zPC9hPiwgZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQKK2ZvciBhIFRNUzMyMEM2MDAwIHByb2Nlc3Nvci4KKworICAgPHA+U2VlIDxhIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1PcHRpb25zIj5USUxFLUd4IE9wdGlvbnM8L2E+LCBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZAorZm9yIGEgVElMRS1HeCBwcm9jZXNzb3IuCisKKyAgIDxwPlNlZSA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT4sIGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkCitmb3IgYW4gWHRlbnNhIHByb2Nlc3Nvci4KKworPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKyAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IKK2EgWjgwIGZhbWlseSBwcm9jZXNzb3IuCisgICAgIDxkbD4KKzxkdD48Y29kZT4tejgwPC9jb2RlPjxkZD5Bc3NlbWJsZSBmb3IgWjgwIHByb2Nlc3Nvci4gCis8YnI+PGR0Pjxjb2RlPi1yODAwPC9jb2RlPjxkZD5Bc3NlbWJsZSBmb3IgUjgwMCBwcm9jZXNzb3IuIAorPGJyPjxkdD48Y29kZT4taWdub3JlLXVuZG9jdW1lbnRlZC1pbnN0cnVjdGlvbnM8L2NvZGU+PGR0Pjxjb2RlPi1XbnVkPC9jb2RlPjxkZD5Bc3NlbWJsZSB1bmRvY3VtZW50ZWQgWjgwIGluc3RydWN0aW9ucyB0aGF0IGFsc28gd29yayBvbiBSODAwIHdpdGhvdXQgd2FybmluZy4gCis8YnI+PGR0Pjxjb2RlPi1pZ25vcmUtdW5wb3J0YWJsZS1pbnN0cnVjdGlvbnM8L2NvZGU+PGR0Pjxjb2RlPi1XbnVwPC9jb2RlPjxkZD5Bc3NlbWJsZSBhbGwgdW5kb2N1bWVudGVkIFo4MCBpbnN0cnVjdGlvbnMgd2l0aG91dCB3YXJuaW5nLiAKKzxicj48ZHQ+PGNvZGU+LXdhcm4tdW5kb2N1bWVudGVkLWluc3RydWN0aW9uczwvY29kZT48ZHQ+PGNvZGU+LVd1ZDwvY29kZT48ZGQ+SXNzdWUgYSB3YXJuaW5nIGZvciB1bmRvY3VtZW50ZWQgWjgwIGluc3RydWN0aW9ucyB0aGF0IGFsc28gd29yayBvbiBSODAwLiAKKzxicj48ZHQ+PGNvZGU+LXdhcm4tdW5wb3J0YWJsZS1pbnN0cnVjdGlvbnM8L2NvZGU+PGR0Pjxjb2RlPi1XdXA8L2NvZGU+PGRkPklzc3VlIGEgd2FybmluZyBmb3IgdW5kb2N1bWVudGVkIFo4MCBpbnN0cnVjdGlvbnMgdGhhdCBkbyBub3Qgd29yayBvbiBSODAwLiAKKzxicj48ZHQ+PGNvZGU+LWZvcmJpZC11bmRvY3VtZW50ZWQtaW5zdHJ1Y3Rpb25zPC9jb2RlPjxkdD48Y29kZT4tRnVkPC9jb2RlPjxkZD5UcmVhdCBhbGwgdW5kb2N1bWVudGVkIGluc3RydWN0aW9ucyBhcyBlcnJvcnMuIAorPGJyPjxkdD48Y29kZT4tZm9yYmlkLXVucG9ydGFibGUtaW5zdHJ1Y3Rpb25zPC9jb2RlPjxkdD48Y29kZT4tRnVwPC9jb2RlPjxkZD5UcmVhdCB1bmRvY3VtZW50ZWQgWjgwIGluc3RydWN0aW9ucyB0aGF0IGRvIG5vdCB3b3JrIG9uIFI4MDAgYXMgZXJyb3JzLiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJNYW51YWwuaHRtbCNNYW51YWwiPk1hbnVhbDwvYT46ICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUgb2YgdGhpcyBNYW51YWwKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkdOVS1Bc3NlbWJsZXIuaHRtbCNHTlUtQXNzZW1ibGVyIj5HTlUgQXNzZW1ibGVyPC9hPjogICAgICAgICAgICAgICAgVGhlIEdOVSBBc3NlbWJsZXIKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ik9iamVjdC1Gb3JtYXRzLmh0bWwjT2JqZWN0LUZvcm1hdHMiPk9iamVjdCBGb3JtYXRzPC9hPjogICAgICAgICAgICAgICBPYmplY3QgRmlsZSBGb3JtYXRzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJDb21tYW5kLUxpbmUuaHRtbCNDb21tYW5kLUxpbmUiPkNvbW1hbmQgTGluZTwvYT46ICAgICAgICAgICAgICAgICBDb21tYW5kIExpbmUKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IklucHV0LUZpbGVzLmh0bWwjSW5wdXQtRmlsZXMiPklucHV0IEZpbGVzPC9hPjogICAgICAgICAgICAgICAgICBJbnB1dCBGaWxlcworPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iT2JqZWN0Lmh0bWwjT2JqZWN0Ij5PYmplY3Q8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IChPYmplY3QpIEZpbGUKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9IkVycm9ycy5odG1sI0Vycm9ycyI+RXJyb3JzPC9hPjogICAgICAgICAgICAgICAgICAgICAgIEVycm9yIGFuZCBXYXJuaW5nIE1lc3NhZ2VzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QMmFsaWduLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QMmFsaWduLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg0ODE1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1AyYWxpZ24uaHRtbApAQCAtMCwwICsxLDgzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QMmFsaWduIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcmcuaHRtbCNPcmciIHRpdGxlPSJPcmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQb3BTZWN0aW9uLmh0bWwjUG9wU2VjdGlvbiIgdGl0bGU9IlBvcFNlY3Rpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQMmFsaWduIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBvcFNlY3Rpb24uaHRtbCNQb3BTZWN0aW9uIj5Qb3BTZWN0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3JnLmh0bWwjT3JnIj5Pcmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuODYgPGNvZGU+LnAyYWxpZ25bd2xdIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hYnMtZXhwcjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YWJzLWV4cHI8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1wYWRkaW5nLXRoZS1sb2NhdGlvbi1jb3VudGVyLWdpdmVuLWEtcG93ZXItb2YtdHdvLTQyMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicDJhbGlnbl8wMDdkLWRpcmVjdGl2ZS00MjIiPjwvYT5QYWQgdGhlIGxvY2F0aW9uIGNvdW50ZXIgKGluIHRoZSBjdXJyZW50IHN1YnNlY3Rpb24pIHRvIGEgcGFydGljdWxhcgorc3RvcmFnZSBib3VuZGFyeS4gIFRoZSBmaXJzdCBleHByZXNzaW9uICh3aGljaCBtdXN0IGJlIGFic29sdXRlKSBpcyB0aGUKK251bWJlciBvZiBsb3ctb3JkZXIgemVybyBiaXRzIHRoZSBsb2NhdGlvbiBjb3VudGVyIG11c3QgaGF2ZSBhZnRlcgorYWR2YW5jZW1lbnQuICBGb3IgZXhhbXBsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5wMmFsaWduIDM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWR2YW5jZXMgdGhlIGxvY2F0aW9uCitjb3VudGVyIHVudGlsIGl0IGEgbXVsdGlwbGUgb2YgOC4gIElmIHRoZSBsb2NhdGlvbiBjb3VudGVyIGlzIGFscmVhZHkgYQorbXVsdGlwbGUgb2YgOCwgbm8gY2hhbmdlIGlzIG5lZWRlZC4KKworICAgPHA+VGhlIHNlY29uZCBleHByZXNzaW9uIChhbHNvIGFic29sdXRlKSBnaXZlcyB0aGUgZmlsbCB2YWx1ZSB0byBiZSBzdG9yZWQgaW4gdGhlCitwYWRkaW5nIGJ5dGVzLiAgSXQgKGFuZCB0aGUgY29tbWEpIG1heSBiZSBvbWl0dGVkLiAgSWYgaXQgaXMgb21pdHRlZCwgdGhlCitwYWRkaW5nIGJ5dGVzIGFyZSBub3JtYWxseSB6ZXJvLiAgSG93ZXZlciwgb24gc29tZSBzeXN0ZW1zLCBpZiB0aGUgc2VjdGlvbiBpcworbWFya2VkIGFzIGNvbnRhaW5pbmcgY29kZSBhbmQgdGhlIGZpbGwgdmFsdWUgaXMgb21pdHRlZCwgdGhlIHNwYWNlIGlzIGZpbGxlZAord2l0aCBuby1vcCBpbnN0cnVjdGlvbnMuCisKKyAgIDxwPlRoZSB0aGlyZCBleHByZXNzaW9uIGlzIGFsc28gYWJzb2x1dGUsIGFuZCBpcyBhbHNvIG9wdGlvbmFsLiAgSWYgaXQgaXMgcHJlc2VudCwKK2l0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHNob3VsZCBiZSBza2lwcGVkIGJ5IHRoaXMgYWxpZ25tZW50CitkaXJlY3RpdmUuICBJZiBkb2luZyB0aGUgYWxpZ25tZW50IHdvdWxkIHJlcXVpcmUgc2tpcHBpbmcgbW9yZSBieXRlcyB0aGFuIHRoZQorc3BlY2lmaWVkIG1heGltdW0sIHRoZW4gdGhlIGFsaWdubWVudCBpcyBub3QgZG9uZSBhdCBhbGwuICBZb3UgY2FuIG9taXQgdGhlCitmaWxsIHZhbHVlICh0aGUgc2Vjb25kIGFyZ3VtZW50KSBlbnRpcmVseSBieSBzaW1wbHkgdXNpbmcgdHdvIGNvbW1hcyBhZnRlciB0aGUKK3JlcXVpcmVkIGFsaWdubWVudDsgdGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRoZSBhbGlnbm1lbnQgdG8gYmUgZmlsbGVkCit3aXRoIG5vLW9wIGluc3RydWN0aW9ucyB3aGVuIGFwcHJvcHJpYXRlLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnAyYWxpZ253XzAwN2QtZGlyZWN0aXZlLTQyMyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicDJhbGlnbmxfMDA3ZC1kaXJlY3RpdmUtNDI0Ij48L2E+VGhlIDxjb2RlPi5wMmFsaWdudzwvY29kZT4gYW5kIDxjb2RlPi5wMmFsaWdubDwvY29kZT4gZGlyZWN0aXZlcyBhcmUgdmFyaWFudHMgb2YgdGhlCis8Y29kZT4ucDJhbGlnbjwvY29kZT4gZGlyZWN0aXZlLiAgVGhlIDxjb2RlPi5wMmFsaWdudzwvY29kZT4gZGlyZWN0aXZlIHRyZWF0cyB0aGUgZmlsbAorcGF0dGVybiBhcyBhIHR3byBieXRlIHdvcmQgdmFsdWUuICBUaGUgPGNvZGU+LnAyYWxpZ25sPC9jb2RlPiBkaXJlY3RpdmVzIHRyZWF0cyB0aGUKK2ZpbGwgcGF0dGVybiBhcyBhIGZvdXIgYnl0ZSBsb25nd29yZCB2YWx1ZS4gIEZvciBleGFtcGxlLCA8Y29kZT4ucDJhbGlnbncKKzIsMHgzNjhkPC9jb2RlPiB3aWxsIGFsaWduIHRvIGEgbXVsdGlwbGUgb2YgNC4gIElmIGl0IHNraXBzIHR3byBieXRlcywgdGhleSB3aWxsIGJlCitmaWxsZWQgaW4gd2l0aCB0aGUgdmFsdWUgMHgzNjhkICh0aGUgZXhhY3QgcGxhY2VtZW50IG9mIHRoZSBieXRlcyBkZXBlbmRzIHVwb24KK3RoZSBlbmRpYW5uZXNzIG9mIHRoZSBwcm9jZXNzb3IpLiAgSWYgaXQgc2tpcHMgMSBvciAzIGJ5dGVzLCB0aGUgZmlsbCB2YWx1ZSBpcwordW5kZWZpbmVkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QRFBfMDAyZDExXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzA4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QRFBfMDAyZDExXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QRFAtMTEtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSDY0XzAwMmREZXBlbmRlbnQuaHRtbCNTSDY0XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTSDY0LURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlBKXzAwMmREZXBlbmRlbnQuaHRtbCNQSl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iUEotRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUERQLTExLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iUERQXzAwMmQxMV8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBKXzAwMmREZXBlbmRlbnQuaHRtbCNQSl8wMDJkRGVwZW5kZW50Ij5QSi1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSDY0XzAwMmREZXBlbmRlbnQuaHRtbCNTSDY0XzAwMmREZXBlbmRlbnQiPlNINjQtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjMwIFBEUC0xMSBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1QRFBfMDAyZDExLXN1cHBvcnQtMTUzMCI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPlBEUC0xMS1PcHRpb25zPC9hPjogCQlPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJQRFBfMDAyZDExXzAwMmRQc2V1ZG9zLmh0bWwjUERQXzAwMmQxMV8wMDJkUHNldWRvcyI+UERQLTExLVBzZXVkb3M8L2E+OiAJCUFzc2VtYmxlciBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJQRFBfMDAyZDExXzAwMmRTeW50YXguaHRtbCNQRFBfMDAyZDExXzAwMmRTeW50YXgiPlBEUC0xMS1TeW50YXg8L2E+OiAJCURFQyBTeW50YXggdmVyc3VzIEJTRCBTeW50YXgKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE1uZW1vbmljcy5odG1sI1BEUF8wMDJkMTFfMDAyZE1uZW1vbmljcyI+UERQLTExLU1uZW1vbmljczwvYT46IAkJSW5zdHJ1Y3Rpb24gTmFtaW5nCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJQRFBfMDAyZDExXzAwMmRTeW50aGV0aWMuaHRtbCNQRFBfMDAyZDExXzAwMmRTeW50aGV0aWMiPlBEUC0xMS1TeW50aGV0aWM8L2E+OiAJCVN5bnRoZXRpYyBJbnN0cnVjdGlvbnMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BEUF8wMDJkMTFfMDAyZE1uZW1vbmljcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUERQXzAwMmQxMV8wMDJkTW5lbW9uaWNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0ZjYwZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BEUF8wMDJkMTFfMDAyZE1uZW1vbmljcy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlBEUC0xMS1NbmVtb25pY3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCIgdGl0bGU9IlBEUC0xMS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQRFBfMDAyZDExXzAwMmRTeW50YXguaHRtbCNQRFBfMDAyZDExXzAwMmRTeW50YXgiIHRpdGxlPSJQRFAtMTEtU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUERQXzAwMmQxMV8wMDJkU3ludGhldGljLmh0bWwjUERQXzAwMmQxMV8wMDJkU3ludGhldGljIiB0aXRsZT0iUERQLTExLVN5bnRoZXRpYyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBEUC0xMS1NbmVtb25pY3MiPjwvYT4KKzxhIG5hbWU9IlBEUF8wMDJkMTFfMDAyZE1uZW1vbmljcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQRFBfMDAyZDExXzAwMmRTeW50aGV0aWMuaHRtbCNQRFBfMDAyZDExXzAwMmRTeW50aGV0aWMiPlBEUC0xMS1TeW50aGV0aWM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQRFBfMDAyZDExXzAwMmRTeW50YXguaHRtbCNQRFBfMDAyZDExXzAwMmRTeW50YXgiPlBEUC0xMS1TeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQRFBfMDAyZDExXzAwMmREZXBlbmRlbnQuaHRtbCNQRFBfMDAyZDExXzAwMmREZXBlbmRlbnQiPlBEUC0xMS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjMwLjQgSW5zdHJ1Y3Rpb24gTmFtaW5nPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtUERQXzAwMmQxMS1pbnN0cnVjdGlvbi1uYW1pbmctMTYxMiI+PC9hPgorU29tZSBpbnN0cnVjdGlvbnMgaGF2ZSBhbHRlcm5hdGl2ZSBuYW1lcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+QkNDPC9jb2RlPjxkZD48Y29kZT5CSElTPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+QkNTPC9jb2RlPjxkZD48Y29kZT5CTE88L2NvZGU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5MMkRSPC9jb2RlPjxkZD48Y29kZT5MMkQ8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5MM0RSPC9jb2RlPjxkZD48Y29kZT5MM0Q8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5TWVM8L2NvZGU+PGRkPjxjb2RlPlRSQVA8L2NvZGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYzYzdkOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDIwNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UERQLTExLU9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCIgdGl0bGU9IlBEUC0xMS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQRFBfMDAyZDExXzAwMmRQc2V1ZG9zLmh0bWwjUERQXzAwMmQxMV8wMDJkUHNldWRvcyIgdGl0bGU9IlBEUC0xMS1Qc2V1ZG9zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUERQLTExLU9wdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUERQXzAwMmQxMV8wMDJkUHNldWRvcy5odG1sI1BEUF8wMDJkMTFfMDAyZFBzZXVkb3MiPlBEUC0xMS1Qc2V1ZG9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUERQXzAwMmQxMV8wMDJkRGVwZW5kZW50Lmh0bWwjUERQXzAwMmQxMV8wMDJkRGVwZW5kZW50Ij5QRFAtMTEtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zMC4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zLWZvci1QRFBfMDAyZDExLTE1MzEiPjwvYT4KK1RoZSBQRFAtMTEgdmVyc2lvbiBvZiA8Y29kZT5hczwvY29kZT4gaGFzIGEgcmljaCBzZXQgb2YgbWFjaGluZQorZGVwZW5kZW50IG9wdGlvbnMuCisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zMC4xLjEgQ29kZSBHZW5lcmF0aW9uIE9wdGlvbnM8L2g1PgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtcGljLTE1MzIiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbW5vXzAwMmRwaWMtMTUzMyI+PC9hPgorPGRsPjxkdD48Y29kZT4tbXBpYyB8IC1tbm8tcGljPC9jb2RlPjxkZD5HZW5lcmF0ZSBwb3NpdGlvbi1pbmRlcGVuZGVudCAob3IgcG9zaXRpb24tZGVwZW5kZW50KSBjb2RlLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIHRvIGdlbmVyYXRlIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUuIAorPC9kbD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjMwLjEuMiBJbnN0cnVjdGlvbiBTZXQgRXh0ZW5zaW9uIE9wdGlvbnM8L2g1PgorCis8cD5UaGVzZSBvcHRpb25zIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHVzZSBvZiBleHRlbnNpb25zIG92ZXIgdGhlIGJhc2UKK2xpbmUgaW5zdHJ1Y3Rpb24gc2V0IGFzIGludHJvZHVjZWQgYnkgdGhlIGZpcnN0IFBEUC0xMSBDUFU6IHRoZSBLQTExLiAKK01vc3Qgb3B0aW9ucyBjb21lIGluIHR3byB2YXJpYW50czogYSA8Y29kZT4tbTwvY29kZT48dmFyPmV4dGVuc2lvbjwvdmFyPiB0aGF0CitlbmFibGVzIDx2YXI+ZXh0ZW5zaW9uPC92YXI+LCBhbmQgYSA8Y29kZT4tbW5vLTwvY29kZT48dmFyPmV4dGVuc2lvbjwvdmFyPiB0aGF0IGRpc2FibGVzCis8dmFyPmV4dGVuc2lvbjwvdmFyPi4KKworICAgPHA+VGhlIGRlZmF1bHQgaXMgdG8gZW5hYmxlIGFsbCBleHRlbnNpb25zLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtYWxsLTE1MzQiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWFsbF8wMDJkZXh0ZW5zaW9ucy0xNTM1Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1tYWxsIHwgLW1hbGwtZXh0ZW5zaW9uczwvY29kZT48ZGQ+RW5hYmxlIGFsbCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1ub18wMDJkZXh0ZW5zaW9ucy0xNTM2Ij48L2E+PGJyPjxkdD48Y29kZT4tbW5vLWV4dGVuc2lvbnM8L2NvZGU+PGRkPkRpc2FibGUgYWxsIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWNpcy0xNTM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtbm9fMDAyZGNpcy0xNTM4Ij48L2E+PGJyPjxkdD48Y29kZT4tbWNpcyB8IC1tbm8tY2lzPC9jb2RlPjxkZD5FbmFibGUgKG9yIGRpc2FibGUpIHRoZSB1c2Ugb2YgdGhlIGNvbW1lcmNpYWwgaW5zdHJ1Y3Rpb24gc2V0LCB3aGljaAorY29uc2lzdHMgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zOiA8Y29kZT5BREROSTwvY29kZT4sIDxjb2RlPkFERE48L2NvZGU+LCA8Y29kZT5BRERQSTwvY29kZT4sCis8Y29kZT5BRERQPC9jb2RlPiwgPGNvZGU+QVNITkk8L2NvZGU+LCA8Y29kZT5BU0hOPC9jb2RlPiwgPGNvZGU+QVNIUEk8L2NvZGU+LCA8Y29kZT5BU0hQPC9jb2RlPiwKKzxjb2RlPkNNUENJPC9jb2RlPiwgPGNvZGU+Q01QQzwvY29kZT4sIDxjb2RlPkNNUE5JPC9jb2RlPiwgPGNvZGU+Q01QTjwvY29kZT4sIDxjb2RlPkNNUFBJPC9jb2RlPiwKKzxjb2RlPkNNUFA8L2NvZGU+LCA8Y29kZT5DVlRMTkk8L2NvZGU+LCA8Y29kZT5DVlRMTjwvY29kZT4sIDxjb2RlPkNWVExQSTwvY29kZT4sIDxjb2RlPkNWVExQPC9jb2RlPiwKKzxjb2RlPkNWVE5MSTwvY29kZT4sIDxjb2RlPkNWVE5MPC9jb2RlPiwgPGNvZGU+Q1ZUTlBJPC9jb2RlPiwgPGNvZGU+Q1ZUTlA8L2NvZGU+LCA8Y29kZT5DVlRQTEk8L2NvZGU+LAorPGNvZGU+Q1ZUUEw8L2NvZGU+LCA8Y29kZT5DVlRQTkk8L2NvZGU+LCA8Y29kZT5DVlRQTjwvY29kZT4sIDxjb2RlPkRJVlBJPC9jb2RlPiwgPGNvZGU+RElWUDwvY29kZT4sCis8Y29kZT5MMkRSPC9jb2RlPiwgPGNvZGU+TDNEUjwvY29kZT4sIDxjb2RlPkxPQ0NJPC9jb2RlPiwgPGNvZGU+TE9DQzwvY29kZT4sIDxjb2RlPk1BVENJPC9jb2RlPiwKKzxjb2RlPk1BVEM8L2NvZGU+LCA8Y29kZT5NT1ZDSTwvY29kZT4sIDxjb2RlPk1PVkM8L2NvZGU+LCA8Y29kZT5NT1ZSQ0k8L2NvZGU+LCA8Y29kZT5NT1ZSQzwvY29kZT4sCis8Y29kZT5NT1ZUQ0k8L2NvZGU+LCA8Y29kZT5NT1ZUQzwvY29kZT4sIDxjb2RlPk1VTFBJPC9jb2RlPiwgPGNvZGU+TVVMUDwvY29kZT4sIDxjb2RlPlNDQU5DSTwvY29kZT4sCis8Y29kZT5TQ0FOQzwvY29kZT4sIDxjb2RlPlNLUENJPC9jb2RlPiwgPGNvZGU+U0tQQzwvY29kZT4sIDxjb2RlPlNQQU5DSTwvY29kZT4sIDxjb2RlPlNQQU5DPC9jb2RlPiwKKzxjb2RlPlNVQk5JPC9jb2RlPiwgPGNvZGU+U1VCTjwvY29kZT4sIDxjb2RlPlNVQlBJPC9jb2RlPiwgYW5kIDxjb2RlPlNVQlA8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWNzbS0xNTM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtbm9fMDAyZGNzbS0xNTQwIj48L2E+PGJyPjxkdD48Y29kZT4tbWNzbSB8IC1tbm8tY3NtPC9jb2RlPjxkZD5FbmFibGUgKG9yIGRpc2FibGUpIHRoZSB1c2Ugb2YgdGhlIDxjb2RlPkNTTTwvY29kZT4gaW5zdHJ1Y3Rpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtZWlzLTE1NDEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1ub18wMDJkZWlzLTE1NDIiPjwvYT48YnI+PGR0Pjxjb2RlPi1tZWlzIHwgLW1uby1laXM8L2NvZGU+PGRkPkVuYWJsZSAob3IgZGlzYWJsZSkgdGhlIHVzZSBvZiB0aGUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb24gc2V0LCB3aGljaAorY29uc2lzdHMgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zOiA8Y29kZT5BU0hDPC9jb2RlPiwgPGNvZGU+QVNIPC9jb2RlPiwgPGNvZGU+RElWPC9jb2RlPiwKKzxjb2RlPk1BUks8L2NvZGU+LCA8Y29kZT5NVUw8L2NvZGU+LCA8Y29kZT5SVFQ8L2NvZGU+LCA8Y29kZT5TT0I8L2NvZGU+IDxjb2RlPlNYVDwvY29kZT4sIGFuZAorPGNvZGU+WE9SPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1maXMtMTU0MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbW5vXzAwMmRmaXMtMTU0NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWtldjExLTE1NDUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1rZXYxMS0xNTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtbm9fMDAyZGtldjExLTE1NDciPjwvYT48YnI+PGR0Pjxjb2RlPi1tZmlzIHwgLW1rZXYxMTwvY29kZT48ZHQ+PGNvZGU+LW1uby1maXMgfCAtbW5vLWtldjExPC9jb2RlPjxkZD5FbmFibGUgKG9yIGRpc2FibGUpIHRoZSB1c2Ugb2YgdGhlIEtFVjExIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uczoKKzxjb2RlPkZBREQ8L2NvZGU+LCA8Y29kZT5GRElWPC9jb2RlPiwgPGNvZGU+Rk1VTDwvY29kZT4sIGFuZCA8Y29kZT5GU1VCPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1mcHAtMTU0OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbW5vXzAwMmRmcHAtMTU0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWZwdS0xNTUwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtbm9fMDAyZGZwdS0xNTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtZnBfMDAyZDExLTE1NTIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1ub18wMDJkZnBfMDAyZDExLTE1NTMiPjwvYT48YnI+PGR0Pjxjb2RlPi1tZnBwIHwgLW1mcHUgfCAtbWZwLTExPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZwcCB8IC1tbm8tZnB1IHwgLW1uby1mcC0xMTwvY29kZT48ZGQ+RW5hYmxlIChvciBkaXNhYmxlKSB0aGUgdXNlIG9mIEZQLTExIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uczoKKzxjb2RlPkFCU0Y8L2NvZGU+LCA8Y29kZT5BRERGPC9jb2RlPiwgPGNvZGU+Q0ZDQzwvY29kZT4sIDxjb2RlPkNMUkY8L2NvZGU+LCA8Y29kZT5DTVBGPC9jb2RlPiwKKzxjb2RlPkRJVkY8L2NvZGU+LCA8Y29kZT5MRENGRjwvY29kZT4sIDxjb2RlPkxEQ0lGPC9jb2RlPiwgPGNvZGU+TERFWFA8L2NvZGU+LCA8Y29kZT5MREY8L2NvZGU+LAorPGNvZGU+TERGUFM8L2NvZGU+LCA8Y29kZT5NT0RGPC9jb2RlPiwgPGNvZGU+TVVMRjwvY29kZT4sIDxjb2RlPk5FR0Y8L2NvZGU+LCA8Y29kZT5TRVREPC9jb2RlPiwKKzxjb2RlPlNFVEY8L2NvZGU+LCA8Y29kZT5TRVRJPC9jb2RlPiwgPGNvZGU+U0VUTDwvY29kZT4sIDxjb2RlPlNUQ0ZGPC9jb2RlPiwgPGNvZGU+U1RDRkk8L2NvZGU+LAorPGNvZGU+U1RFWFA8L2NvZGU+LCA8Y29kZT5TVEY8L2NvZGU+LCA8Y29kZT5TVEZQUzwvY29kZT4sIDxjb2RlPlNUU1Q8L2NvZGU+LCA8Y29kZT5TVUJGPC9jb2RlPiwgYW5kCis8Y29kZT5UU1RGPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1saW1pdGVkXzAwMmRlaXMtMTU1NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbW5vXzAwMmRsaW1pdGVkXzAwMmRlaXMtMTU1NSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1saW1pdGVkLWVpcyB8IC1tbm8tbGltaXRlZC1laXM8L2NvZGU+PGRkPkVuYWJsZSAob3IgZGlzYWJsZSkgdGhlIHVzZSBvZiB0aGUgbGltaXRlZCBleHRlbmRlZCBpbnN0cnVjdGlvbiBzZXQ6Cis8Y29kZT5NQVJLPC9jb2RlPiwgPGNvZGU+UlRUPC9jb2RlPiwgPGNvZGU+U09CPC9jb2RlPiwgPGNvZGU+U1hUPC9jb2RlPiwgYW5kIDxjb2RlPlhPUjwvY29kZT4uCisKKyAgICAgPHA+VGhlIC1tbm8tbGltaXRlZC1laXMgb3B0aW9ucyBhbHNvIGltcGxpZXMgLW1uby1laXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtbWZwdC0xNTU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtbm9fMDAyZG1mcHQtMTU1NyI+PC9hPjxicj48ZHQ+PGNvZGU+LW1tZnB0IHwgLW1uby1tZnB0PC9jb2RlPjxkZD5FbmFibGUgKG9yIGRpc2FibGUpIHRoZSB1c2Ugb2YgdGhlIDxjb2RlPk1GUFQ8L2NvZGU+IGluc3RydWN0aW9uLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbW11dGlwcm9jLTE1NTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1ub18wMDJkbXV0aXByb2MtMTU1OSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1tdWx0aXByb2MgfCAtbW5vLW11bHRpcHJvYzwvY29kZT48ZGQ+RW5hYmxlIChvciBkaXNhYmxlKSB0aGUgdXNlIG9mIG11bHRpcHJvY2Vzc29yIGluc3RydWN0aW9uczogPGNvZGU+VFNUU0VUPC9jb2RlPiBhbmQKKzxjb2RlPldSVExDSzwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtbXhwcy0xNTYwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtbm9fMDAyZG14cHMtMTU2MSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1teHBzIHwgLW1uby1teHBzPC9jb2RlPjxkZD5FbmFibGUgKG9yIGRpc2FibGUpIHRoZSB1c2Ugb2YgdGhlIDxjb2RlPk1GUFM8L2NvZGU+IGFuZCA8Y29kZT5NVFBTPC9jb2RlPiBpbnN0cnVjdGlvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtc3BsLTE1NjIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1ub18wMDJkc3BsLTE1NjMiPjwvYT48YnI+PGR0Pjxjb2RlPi1tc3BsIHwgLW1uby1zcGw8L2NvZGU+PGRkPkVuYWJsZSAob3IgZGlzYWJsZSkgdGhlIHVzZSBvZiB0aGUgPGNvZGU+U1BMPC9jb2RlPiBpbnN0cnVjdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1taWNyb2NvZGUtMTU2NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbW5vXzAwMmRtaWNyb2NvZGUtMTU2NSI+PC9hPkVuYWJsZSAob3IgZGlzYWJsZSkgdGhlIHVzZSBvZiB0aGUgbWljcm9jb2RlIGluc3RydWN0aW9uczogPGNvZGU+TERVQjwvY29kZT4sCis8Y29kZT5NRUQ8L2NvZGU+LCBhbmQgPGNvZGU+WEZDPC9jb2RlPi4gCis8L2RsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMzAuMS4zIENQVSBNb2RlbCBPcHRpb25zPC9oNT4KKworPHA+VGhlc2Ugb3B0aW9ucyBlbmFibGUgdGhlIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zIHN1cHBvcnRlZCBieSBhCitwYXJ0aWN1bGFyIENQVSwgYW5kIGRpc2FibGVzIGFsbCBvdGhlciBleHRlbnNpb25zLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRta2ExMS0xNTY2Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1ta2ExMTwvY29kZT48ZGQ+S0ExMSBDUFUuICBCYXNlIGxpbmUgaW5zdHJ1Y3Rpb24gc2V0IG9ubHkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRta2IxMS0xNTY3Ij48L2E+PGJyPjxkdD48Y29kZT4tbWtiMTE8L2NvZGU+PGRkPktCMTEgQ1BVLiAgRW5hYmxlIGV4dGVuZGVkIGluc3RydWN0aW9uIHNldCBhbmQgPGNvZGU+U1BMPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1rZDExYS0xNTY4Ij48L2E+PGJyPjxkdD48Y29kZT4tbWtkMTFhPC9jb2RlPjxkZD5LRDExLUEgQ1BVLiAgRW5hYmxlIGxpbWl0ZWQgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb24gc2V0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWtkMTFiLTE1NjkiPjwvYT48YnI+PGR0Pjxjb2RlPi1ta2QxMWI8L2NvZGU+PGRkPktEMTEtQiBDUFUuICBCYXNlIGxpbmUgaW5zdHJ1Y3Rpb24gc2V0IG9ubHkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRta2QxMWQtMTU3MCI+PC9hPjxicj48ZHQ+PGNvZGU+LW1rZDExZDwvY29kZT48ZGQ+S0QxMS1EIENQVS4gIEJhc2UgbGluZSBpbnN0cnVjdGlvbiBzZXQgb25seS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1rZDExZS0xNTcxIj48L2E+PGJyPjxkdD48Y29kZT4tbWtkMTFlPC9jb2RlPjxkZD5LRDExLUUgQ1BVLiAgRW5hYmxlIGV4dGVuZGVkIGluc3RydWN0aW9uIHNldCwgPGNvZGU+TUZQUzwvY29kZT4sIGFuZCA8Y29kZT5NVFBTPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1rZDExZi0xNTcyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRta2QxMWgtMTU3MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWtkMTFxLTE1NzQiPjwvYT48YnI+PGR0Pjxjb2RlPi1ta2QxMWYgfCAtbWtkMTFoIHwgLW1rZDExcTwvY29kZT48ZGQ+S0QxMS1GLCBLRDExLUgsIG9yIEtEMTEtUSBDUFUuICBFbmFibGUgbGltaXRlZCBleHRlbmRlZCBpbnN0cnVjdGlvbiBzZXQsCis8Y29kZT5NRlBTPC9jb2RlPiwgYW5kIDxjb2RlPk1UUFM8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWtkMTFrLTE1NzUiPjwvYT48YnI+PGR0Pjxjb2RlPi1ta2QxMWs8L2NvZGU+PGRkPktEMTEtSyBDUFUuICBFbmFibGUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb24gc2V0LCA8Y29kZT5MRFVCPC9jb2RlPiwgPGNvZGU+TUVEPC9jb2RlPiwKKzxjb2RlPk1GUFM8L2NvZGU+LCA8Y29kZT5NRlBUPC9jb2RlPiwgPGNvZGU+TVRQUzwvY29kZT4sIGFuZCA8Y29kZT5YRkM8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWtkMTF6LTE1NzYiPjwvYT48YnI+PGR0Pjxjb2RlPi1ta2QxMXo8L2NvZGU+PGRkPktEMTEtWiBDUFUuICBFbmFibGUgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb24gc2V0LCA8Y29kZT5DU008L2NvZGU+LCA8Y29kZT5NRlBTPC9jb2RlPiwKKzxjb2RlPk1GUFQ8L2NvZGU+LCA8Y29kZT5NVFBTPC9jb2RlPiwgYW5kIDxjb2RlPlNQTDwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtZjExLTE1NzciPjwvYT48YnI+PGR0Pjxjb2RlPi1tZjExPC9jb2RlPjxkZD5GMTEgQ1BVLiAgRW5hYmxlIGV4dGVuZGVkIGluc3RydWN0aW9uIHNldCwgPGNvZGU+TUZQUzwvY29kZT4sIDxjb2RlPk1GUFQ8L2NvZGU+LCBhbmQKKzxjb2RlPk1UUFM8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbWoxMS0xNTc4Ij48L2E+PGJyPjxkdD48Y29kZT4tbWoxMTwvY29kZT48ZGQ+SjExIENQVS4gIEVuYWJsZSBleHRlbmRlZCBpbnN0cnVjdGlvbiBzZXQsIDxjb2RlPkNTTTwvY29kZT4sIDxjb2RlPk1GUFM8L2NvZGU+LAorPGNvZGU+TUZQVDwvY29kZT4sIDxjb2RlPk1UUFM8L2NvZGU+LCA8Y29kZT5TUEw8L2NvZGU+LCA8Y29kZT5UU1RTRVQ8L2NvZGU+LCBhbmQgPGNvZGU+V1JUTENLPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG10MTEtMTU3OSI+PC9hPjxicj48ZHQ+PGNvZGU+LW10MTE8L2NvZGU+PGRkPlQxMSBDUFUuICBFbmFibGUgbGltaXRlZCBleHRlbmRlZCBpbnN0cnVjdGlvbiBzZXQsIDxjb2RlPk1GUFM8L2NvZGU+LCBhbmQKKzxjb2RlPk1UUFM8L2NvZGU+LiAKKzwvZGw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zMC4xLjQgTWFjaGluZSBNb2RlbCBPcHRpb25zPC9oNT4KKworPHA+VGhlc2Ugb3B0aW9ucyBlbmFibGUgdGhlIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zIHN1cHBvcnRlZCBieSBhCitwYXJ0aWN1bGFyIG1hY2hpbmUgbW9kZWwsIGFuZCBkaXNhYmxlcyBhbGwgb3RoZXIgZXh0ZW5zaW9ucy4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbTExXzAwMmYwMy0xNTgwIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1tMTEvMDM8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1rZDExZjwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjA0LTE1ODEiPjwvYT48YnI+PGR0Pjxjb2RlPi1tMTEvMDQ8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1rZDExZDwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjA1LTE1ODIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG0xMV8wMDJmMTAtMTU4MyI+PC9hPjxicj48ZHQ+PGNvZGU+LW0xMS8wNSB8IC1tMTEvMTA8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1rZDExYjwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjE1LTE1ODQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG0xMV8wMDJmMjAtMTU4NSI+PC9hPjxicj48ZHQ+PGNvZGU+LW0xMS8xNSB8IC1tMTEvMjA8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1rYTExPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG0xMV8wMDJmMjEtMTU4NiI+PC9hPjxicj48ZHQ+PGNvZGU+LW0xMS8yMTwvY29kZT48ZGQ+U2FtZSBhcyA8Y29kZT4tbXQxMTwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjIzLTE1ODciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG0xMV8wMDJmMjQtMTU4OCI+PC9hPjxicj48ZHQ+PGNvZGU+LW0xMS8yMyB8IC1tMTEvMjQ8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1mMTE8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbTExXzAwMmYzNC0xNTg5Ij48L2E+PGJyPjxkdD48Y29kZT4tbTExLzM0PC9jb2RlPjxkZD5TYW1lIGFzIDxjb2RlPi1ta2QxMWU8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbTExXzAwMmYzNGEtMTU5MCI+PC9hPjxicj48ZHQ+PGNvZGU+LW0xMS8zNGE8L2NvZGU+PGRkPkFtZSBhcyA8Y29kZT4tbWtkMTFlPC9jb2RlPiA8Y29kZT4tbWZwcDwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjM1LTE1OTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG0xMV8wMDJmNDAtMTU5MiI+PC9hPjxicj48ZHQ+PGNvZGU+LW0xMS8zNSB8IC1tMTEvNDA8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1rZDExYTwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjQ0LTE1OTMiPjwvYT48YnI+PGR0Pjxjb2RlPi1tMTEvNDQ8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1rZDExejwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjQ1LTE1OTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG0xMV8wMDJmNTAtMTU5NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbTExXzAwMmY1NS0xNTk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjcwLTE1OTciPjwvYT48YnI+PGR0Pjxjb2RlPi1tMTEvNDUgfCAtbTExLzUwIHwgLW0xMS81NSB8IC1tMTEvNzA8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1rYjExPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG0xMV8wMDJmNTMtMTU5OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbTExXzAwMmY3My0xNTk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjgzLTE2MDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG0xMV8wMDJmODQtMTYwMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbTExXzAwMmY5My0xNjAyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjk0LTE2MDMiPjwvYT48YnI+PGR0Pjxjb2RlPi1tMTEvNTMgfCAtbTExLzczIHwgLW0xMS84MyB8IC1tMTEvODQgfCAtbTExLzkzIHwgLW0xMS85NDwvY29kZT48ZGQ+U2FtZSBhcyA8Y29kZT4tbWoxMTwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRtMTFfMDAyZjYwLTE2MDQiPjwvYT48YnI+PGR0Pjxjb2RlPi1tMTEvNjA8L2NvZGU+PGRkPlNhbWUgYXMgPGNvZGU+LW1rZDExazwvY29kZT4uIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUERQXzAwMmQxMV8wMDJkUHNldWRvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUERQXzAwMmQxMV8wMDJkUHNldWRvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OGY1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QRFBfMDAyZDExXzAwMmRQc2V1ZG9zLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UERQLTExLVBzZXVkb3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCIgdGl0bGU9IlBEUC0xMS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyIgdGl0bGU9IlBEUC0xMS1PcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUERQXzAwMmQxMV8wMDJkU3ludGF4Lmh0bWwjUERQXzAwMmQxMV8wMDJkU3ludGF4IiB0aXRsZT0iUERQLTExLVN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBEUC0xMS1Qc2V1ZG9zIj48L2E+Cis8YSBuYW1lPSJQRFBfMDAyZDExXzAwMmRQc2V1ZG9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI1BEUF8wMDJkMTFfMDAyZFN5bnRheCI+UERQLTExLVN5bnRheDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj5QRFAtMTEtT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCI+UERQLTExLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzAuMiBBc3NlbWJsZXIgRGlyZWN0aXZlczwvaDQ+CisKKzxwPlRoZSBQRFAtMTEgdmVyc2lvbiBvZiA8Y29kZT5hczwvY29kZT4gaGFzIGEgZmV3IG1hY2hpbmUKK2RlcGVuZGVudCBhc3NlbWJsZXIgZGlyZWN0aXZlcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LmJzczwvY29kZT48ZGQ+U3dpdGNoIHRvIHRoZSA8Y29kZT5ic3M8L2NvZGU+IHNlY3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZXZlbjwvY29kZT48ZGQ+QWxpZ24gdGhlIGxvY2F0aW9uIGNvdW50ZXIgdG8gYW4gZXZlbiBudW1iZXIuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUERQXzAwMmQxMV8wMDJkU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QRFBfMDAyZDExXzAwMmRTeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQ2ODhjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUERQXzAwMmQxMV8wMDJkU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UERQLTExLVN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUERQXzAwMmQxMV8wMDJkRGVwZW5kZW50Lmh0bWwjUERQXzAwMmQxMV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iUERQLTExLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFBzZXVkb3MuaHRtbCNQRFBfMDAyZDExXzAwMmRQc2V1ZG9zIiB0aXRsZT0iUERQLTExLVBzZXVkb3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQRFBfMDAyZDExXzAwMmRNbmVtb25pY3MuaHRtbCNQRFBfMDAyZDExXzAwMmRNbmVtb25pY3MiIHRpdGxlPSJQRFAtMTEtTW5lbW9uaWNzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUERQLTExLVN5bnRheCI+PC9hPgorPGEgbmFtZT0iUERQXzAwMmQxMV8wMDJkU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE1uZW1vbmljcy5odG1sI1BEUF8wMDJkMTFfMDAyZE1uZW1vbmljcyI+UERQLTExLU1uZW1vbmljczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFBzZXVkb3MuaHRtbCNQRFBfMDAyZDExXzAwMmRQc2V1ZG9zIj5QRFAtMTEtUHNldWRvczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCI+UERQLTExLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzAuMyBQRFAtMTEgQXNzZW1ibHkgTGFuZ3VhZ2UgU3ludGF4PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtUERQXzAwMmQxMS1zeW50YXgtMTYwNSI+PC9hPgorPGEgbmFtZT0iaW5kZXgtREVDLXN5bnRheC0xNjA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtQlNELXN5bnRheC0xNjA3Ij48L2E+PGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIGJvdGggREVDIHN5bnRheCBhbmQgQlNEIHN5bnRheC4gIFRoZSBvbmx5CitkaWZmZXJlbmNlIGlzIHRoYXQgaW4gREVDIHN5bnRheCwgYSA8Y29kZT4jPC9jb2RlPiBjaGFyYWN0ZXIgaXMgdXNlZCB0byBkZW5vdGUKK2FuIGltbWVkaWF0ZSBjb25zdGFudHMsIHdoaWxlIGluIEJTRCBzeW50YXggdGhlIGNoYXJhY3RlciBmb3IgdGhpcworcHVycG9zZSBpcyA8Y29kZT4kPC9jb2RlPi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtUERQXzAwMmQxMS1nZW5lcmFsXzAwMmRwdXJwb3NlLXJlZ2lzdGVyLXN5bnRheC0xNjA4Ij48L2E+Z2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBhcmUgbmFtZWQgPGNvZGU+cjA8L2NvZGU+IHRocm91Z2ggPGNvZGU+cjc8L2NvZGU+LiAKK01uZW1vbmljIGFsdGVybmF0aXZlcyBmb3IgPGNvZGU+cjY8L2NvZGU+IGFuZCA8Y29kZT5yNzwvY29kZT4gYXJlIDxjb2RlPnNwPC9jb2RlPiBhbmQKKzxjb2RlPnBjPC9jb2RlPiwgcmVzcGVjdGl2ZWx5LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1QRFBfMDAyZDExLWZsb2F0aW5nXzAwMmRwb2ludC1yZWdpc3Rlci1zeW50YXgtMTYwOSI+PC9hPkZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBhcmUgbmFtZWQgPGNvZGU+YWMwPC9jb2RlPiB0aHJvdWdoIDxjb2RlPmFjMzwvY29kZT4sIG9yCithbHRlcm5hdGl2ZWx5IDxjb2RlPmZyMDwvY29kZT4gdGhyb3VnaCA8Y29kZT5mcjM8L2NvZGU+LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1QRFBfMDAyZDExLWNvbW1lbnRzLTE2MTAiPjwvYT5Db21tZW50cyBhcmUgc3RhcnRlZCB3aXRoIGEgPGNvZGU+IzwvY29kZT4gb3IgYSA8Y29kZT4vPC9jb2RlPiBjaGFyYWN0ZXIsIGFuZCBleHRlbmQKK3RvIHRoZSBlbmQgb2YgdGhlIGxpbmUuICAoRklYTUU6IGNsYXNoIHdpdGggaW1tZWRpYXRlcz8pCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVBEUF8wMDJkMTEtbGluZS1zZXBhcmF0b3ItMTYxMSI+PC9hPk11bHRpcGxlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBjYW4gYmUgc2VwYXJhdGVkIGJ5IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QRFBfMDAyZDExXzAwMmRTeW50aGV0aWMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BEUF8wMDJkMTFfMDAyZFN5bnRoZXRpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmIxNzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QRFBfMDAyZDExXzAwMmRTeW50aGV0aWMuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QRFAtMTEtU3ludGhldGljIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQRFBfMDAyZDExXzAwMmREZXBlbmRlbnQuaHRtbCNQRFBfMDAyZDExXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJQRFAtMTEtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUERQXzAwMmQxMV8wMDJkTW5lbW9uaWNzLmh0bWwjUERQXzAwMmQxMV8wMDJkTW5lbW9uaWNzIiB0aXRsZT0iUERQLTExLU1uZW1vbmljcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBEUC0xMS1TeW50aGV0aWMiPjwvYT4KKzxhIG5hbWU9IlBEUF8wMDJkMTFfMDAyZFN5bnRoZXRpYyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE1uZW1vbmljcy5odG1sI1BEUF8wMDJkMTFfMDAyZE1uZW1vbmljcyI+UERQLTExLU1uZW1vbmljczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCI+UERQLTExLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzAuNSBTeW50aGV0aWMgSW5zdHJ1Y3Rpb25zPC9oND4KKworPHA+VGhlIDxjb2RlPkpCUjwvY29kZT4gYW5kIDxjb2RlPko8L2NvZGU+PHZhcj5DQzwvdmFyPiBzeW50aGV0aWMgaW5zdHJ1Y3Rpb25zIGFyZSBub3QKK3N1cHBvcnRlZCB5ZXQuCisKKzwhLS0gQ29weXJpZ2h0IDE5OTksIDIwMDIsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QSi1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QSi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiZjY0YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BKLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QSiBPcHRpb25zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQSl8wMDJkRGVwZW5kZW50Lmh0bWwjUEpfMDAyZERlcGVuZGVudCIgdGl0bGU9IlBKLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlBKLVN5bnRheC5odG1sI1BKLVN5bnRheCIgdGl0bGU9IlBKIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBKLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUEotU3ludGF4Lmh0bWwjUEotU3ludGF4Ij5QSiBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQSl8wMDJkRGVwZW5kZW50Lmh0bWwjUEpfMDAyZERlcGVuZGVudCI+UEotRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zMS4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1QSi1vcHRpb25zLTE2MTQiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtUEotMTYxNSI+PC9hPjxjb2RlPmFzPC9jb2RlPiBoYXMgdHdvIGFkZGl0aW9uYWwgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIHRoZSBwaWNvSmF2YQorYXJjaGl0ZWN0dXJlLgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1sPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBzZWxlY3RzIGxpdHRsZSBlbmRpYW4gZGF0YSBvdXRwdXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWI8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNlbGVjdHMgYmlnIGVuZGlhbiBkYXRhIG91dHB1dC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QSi1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BKLVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzdjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QSi1TeW50YXguaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QSiBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBKXzAwMmREZXBlbmRlbnQuaHRtbCNQSl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iUEotRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUEotT3B0aW9ucy5odG1sI1BKLU9wdGlvbnMiIHRpdGxlPSJQSiBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUEotU3ludGF4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUEotT3B0aW9ucy5odG1sI1BKLU9wdGlvbnMiPlBKIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQSl8wMDJkRGVwZW5kZW50Lmh0bWwjUEpfMDAyZERlcGVuZGVudCI+UEotRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zMS4yIFBKIFN5bnRheDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJQSl8wMDJkQ2hhcnMuaHRtbCNQSl8wMDJkQ2hhcnMiPlBKLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUEpfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QSl8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWEzYmZiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUEpfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UEotQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBKLVN5bnRheC5odG1sI1BKLVN5bnRheCIgdGl0bGU9IlBKIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBKLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJQSl8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQSi1TeW50YXguaHRtbCNQSi1TeW50YXgiPlBKIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMzEuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1QSi0xNjE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtUEotbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNjE3Ij48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZSBzdGFydAorb2YgYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgdGhlbiB0aGUgd2hvbGUKK2xpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY291bGQgYWxzbyBiZQorYSBsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtUEotMTYxOCI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1QSi0xNjE5Ij48L2E+PGEgbmFtZT0iaW5kZXgtUEotbGluZS1zZXBhcmF0b3ItMTYyMCI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUKK2xpbmUuCisKKzwhLS0gQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgLS0+Cis8IS0tIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+Cis8IS0tIG1hbiBlbmQgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QSl8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QSl8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiNTc5NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BKXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QSi1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCIgdGl0bGU9IlBEUC0xMS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50IiB0aXRsZT0iUFBDLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBKLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iUEpfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50Ij5QUEMtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUERQXzAwMmQxMV8wMDJkRGVwZW5kZW50Lmh0bWwjUERQXzAwMmQxMV8wMDJkRGVwZW5kZW50Ij5QRFAtMTEtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjMxIHBpY29KYXZhIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVBKLXN1cHBvcnQtMTYxMyI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iUEotT3B0aW9ucy5odG1sI1BKLU9wdGlvbnMiPlBKIE9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlBKLVN5bnRheC5odG1sI1BKLVN5bnRheCI+UEogU3ludGF4PC9hPjogICAgICAgICAgICAgICAgUEogU3ludGF4Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QUENfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUFBDXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzc2NDg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUFBDXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QUEMtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQSl8wMDJkRGVwZW5kZW50Lmh0bWwjUEpfMDAyZERlcGVuZGVudCIgdGl0bGU9IlBKLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJMNzhfMDAyZERlcGVuZGVudC5odG1sI1JMNzhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlJMNzgtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUFBDLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iUFBDXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUkw3OF8wMDJkRGVwZW5kZW50Lmh0bWwjUkw3OF8wMDJkRGVwZW5kZW50Ij5STDc4LURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBKXzAwMmREZXBlbmRlbnQuaHRtbCNQSl8wMDJkRGVwZW5kZW50Ij5QSi1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMzIgUG93ZXJQQyBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDLXN1cHBvcnQtMTYyMSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iUG93ZXJQQ18wMDJkT3B0cy5odG1sI1Bvd2VyUENfMDAyZE9wdHMiPlBvd2VyUEMtT3B0czwvYT46ICAgICAgICAgICAgICAgICBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJQb3dlclBDXzAwMmRQc2V1ZG8uaHRtbCNQb3dlclBDXzAwMmRQc2V1ZG8iPlBvd2VyUEMtUHNldWRvPC9hPjogICAgICAgICAgICAgICBQb3dlclBDIEFzc2VtYmxlciBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJQb3dlclBDXzAwMmRTeW50YXguaHRtbCNQb3dlclBDXzAwMmRTeW50YXgiPlBvd2VyUEMtU3ludGF4PC9hPjogICAgICAgICAgICAgICBQb3dlclBDIFN5bnRheAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUG9wU2VjdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUG9wU2VjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNDJjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qb3BTZWN0aW9uLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UG9wU2VjdGlvbiAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUDJhbGlnbi5odG1sI1AyYWxpZ24iIHRpdGxlPSJQMmFsaWduIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJldmlvdXMuaHRtbCNQcmV2aW91cyIgdGl0bGU9IlByZXZpb3VzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUG9wU2VjdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQcmV2aW91cy5odG1sI1ByZXZpb3VzIj5QcmV2aW91czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlAyYWxpZ24uaHRtbCNQMmFsaWduIj5QMmFsaWduPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43Ljg3IDxjb2RlPi5wb3BzZWN0aW9uPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicG9wc2VjdGlvbl8wMDdkLWRpcmVjdGl2ZS00MjUiPjwvYT48YSBuYW1lPSJpbmRleC1TZWN0aW9uLVN0YWNrLTQyNiI+PC9hPlRoaXMgaXMgb25lIG9mIHRoZSBFTEYgc2VjdGlvbiBzdGFjayBtYW5pcHVsYXRpb24gZGlyZWN0aXZlcy4gIFRoZSBvdGhlcnMgYXJlCis8Y29kZT4uc2VjdGlvbjwvY29kZT4gKHNlZSA8YSBocmVmPSJTZWN0aW9uLmh0bWwjU2VjdGlvbiI+U2VjdGlvbjwvYT4pLCA8Y29kZT4uc3Vic2VjdGlvbjwvY29kZT4gKHNlZSA8YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiI+U3ViU2VjdGlvbjwvYT4pLAorPGNvZGU+LnB1c2hzZWN0aW9uPC9jb2RlPiAoc2VlIDxhIGhyZWY9IlB1c2hTZWN0aW9uLmh0bWwjUHVzaFNlY3Rpb24iPlB1c2hTZWN0aW9uPC9hPiksIGFuZCA8Y29kZT4ucHJldmlvdXM8L2NvZGU+Cisoc2VlIDxhIGhyZWY9IlByZXZpb3VzLmh0bWwjUHJldmlvdXMiPlByZXZpb3VzPC9hPikuCisKKyAgIDxwPlRoaXMgZGlyZWN0aXZlIHJlcGxhY2VzIHRoZSBjdXJyZW50IHNlY3Rpb24gKGFuZCBzdWJzZWN0aW9uKSB3aXRoIHRoZSB0b3AKK3NlY3Rpb24gKGFuZCBzdWJzZWN0aW9uKSBvbiB0aGUgc2VjdGlvbiBzdGFjay4gIFRoaXMgc2VjdGlvbiBpcyBwb3BwZWQgb2ZmIHRoZQorc3RhY2suCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Bvd2VyUENfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qb3dlclBDXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3N2VkODkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qb3dlclBDXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlBvd2VyUEMtQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBvd2VyUENfMDAyZFN5bnRheC5odG1sI1Bvd2VyUENfMDAyZFN5bnRheCIgdGl0bGU9IlBvd2VyUEMtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUG93ZXJQQy1DaGFycyI+PC9hPgorPGEgbmFtZT0iUG93ZXJQQ18wMDJkQ2hhcnMiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQb3dlclBDXzAwMmRTeW50YXguaHRtbCNQb3dlclBDXzAwMmRTeW50YXgiPlBvd2VyUEMtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zMi4zLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVBvd2VyUEMtMTYyOCI+PC9hPjxhIG5hbWU9ImluZGV4LVBvd2VyUEMtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNjI5Ij48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIGEgbGluZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgY29tbWVudAordGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSB0aGVuIHRoZSB3aG9sZQorbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjb3VsZCBhbHNvIGJlCithIGxvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+SWYgdGhlIGFzc2VtYmxlciBoYXMgYmVlbiBjb25maWd1cmVkIGZvciB0aGUgcHBjLSotc29sYXJpcyogdGFyZ2V0Cit0aGVuIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGFsc28gYWN0cyBhcyBhIGxpbmUgY29tbWVudCBjaGFyYWN0ZXIuIAorVGhpcyBjYW4gYmUgZGlzYWJsZWQgdmlhIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXNvbGFyaXM8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUKK29wdGlvbi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1Qb3dlclBDLTE2MzAiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtUG93ZXJQQy0xNjMxIj48L2E+PGEgbmFtZT0iaW5kZXgtUG93ZXJQQy1saW5lLXNlcGFyYXRvci0xNjMyIj48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGUgc3RhdGVtZW50cyBvbiB0aGUgc2FtZQorbGluZS4KKworPCEtLSBDb3B5cmlnaHQgMjAxMSAtLT4KKzwhLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qb3dlclBDXzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qb3dlclBDXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxNTlhZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Bvd2VyUENfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDE1MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UG93ZXJQQy1PcHRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50IiB0aXRsZT0iUFBDLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlBvd2VyUENfMDAyZFBzZXVkby5odG1sI1Bvd2VyUENfMDAyZFBzZXVkbyIgdGl0bGU9IlBvd2VyUEMtUHNldWRvIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUG93ZXJQQy1PcHRzIj48L2E+Cis8YSBuYW1lPSJQb3dlclBDXzAwMmRPcHRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBvd2VyUENfMDAyZFBzZXVkby5odG1sI1Bvd2VyUENfMDAyZFBzZXVkbyI+UG93ZXJQQy1Qc2V1ZG88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50Ij5QUEMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zMi4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zLWZvci1Qb3dlclBDLTE2MjIiPjwvYT48YSBuYW1lPSJpbmRleC1Qb3dlclBDLW9wdGlvbnMtMTYyMyI+PC9hPjxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZXNfMDAyYy1Qb3dlclBDLTE2MjQiPjwvYT48YSBuYW1lPSJpbmRleC1Qb3dlclBDLWFyY2hpdGVjdHVyZXMtMTYyNSI+PC9hPlRoZSBQb3dlclBDIGNoaXAgZmFtaWx5IGluY2x1ZGVzIHNldmVyYWwgc3VjY2Vzc2l2ZSBsZXZlbHMsIHVzaW5nIHRoZSBzYW1lCitjb3JlIGluc3RydWN0aW9uIHNldCwgYnV0IGluY2x1ZGluZyBhIGZldyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBhdAorZWFjaCBsZXZlbC4gIFRoZXJlIGFyZSBleGNlcHRpb25zIHRvIHRoaXMgaG93ZXZlci4gIEZvciBkZXRhaWxzIG9uIHdoYXQKK2luc3RydWN0aW9ucyBlYWNoIHZhcmlhbnQgc3VwcG9ydHMsIHBsZWFzZSBzZWUgdGhlIGNoaXAncyBhcmNoaXRlY3R1cmUKK3JlZmVyZW5jZSBtYW51YWwuCisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgYWxsIGF2YWlsYWJsZSBQb3dlclBDIG9wdGlvbnMuCisKKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+CisgICAgIDxkbD4KKzxkdD48Y29kZT4tYTMyPC9jb2RlPjxkZD5HZW5lcmF0ZSBFTEYzMiBvciBYQ09GRjMyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWE2NDwvY29kZT48ZGQ+R2VuZXJhdGUgRUxGNjQgb3IgWENPRkY2NC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1LIFBJQzwvY29kZT48ZGQ+U2V0IEVGX1BQQ19SRUxPQ0FUQUJMRV9MSUIgaW4gRUxGIGZsYWdzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wd3J4IHwgLW1wd3IyPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBQT1dFUi8yIChSSU9TMikuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXB3cjwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgUE9XRVIgKFJJT1MxKQorCisgICAgIDxicj48ZHQ+PGNvZGU+LW02MDE8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNjAxLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wcGMsIC1tcHBjMzIsIC1tNjAzLCAtbTYwNDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgUG93ZXJQQyA2MDMvNjA0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW00MDMsIC1tNDA1PC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBQb3dlclBDIDQwMy80MDUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTQ0MDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgUG93ZXJQQyA0NDAuICBCb29rRSBhbmQgc29tZSA0MDUgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW00NjQ8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNDY0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW00NzY8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNDc2LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW03NDAwLCAtbTc0MTAsIC1tNzQ1MCwgLW03NDU1PC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBQb3dlclBDIDc0MDAvNzQxMC83NDUwLzc0NTUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTc1MGNsPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBQb3dlclBDIDc1MENMLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wcGM2NCwgLW02MjA8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNjIwLzYyNS82MzAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWU1MDAsIC1tZTUwMHgyPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBNb3Rvcm9sYSBlNTAwIGNvcmUgY29tcGxleC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZTUwMG1jPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBGcmVlc2NhbGUgZTUwMG1jIGNvcmUgY29tcGxleC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZTUwMG1jNjQ8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIEZyZWVzY2FsZSBlNTAwbWM2NCBjb3JlIGNvbXBsZXguCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWU1NTAwPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBGcmVlc2NhbGUgZTU1MDAgY29yZSBjb21wbGV4LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1lNjUwMDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgRnJlZXNjYWxlIGU2NTAwIGNvcmUgY29tcGxleC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3BlPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBNb3Rvcm9sYSBTUEUgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10aXRhbjwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgQXBwbGllZE1pY3JvIFRpdGFuIGNvcmUgY29tcGxleC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcHBjNjRicmlkZ2U8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNjQsIGluY2x1ZGluZyBicmlkZ2UgaW5zbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJvb2tlPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciAzMi1iaXQgQm9va0UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWEyPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBBMiBhcmNoaXRlY3R1cmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWUzMDA8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgZTMwMCBmYW1pbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFsdGl2ZWM8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIHByb2Nlc3NvcnMgd2l0aCBBbHRpVmVjIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdnN4PC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBwcm9jZXNzb3JzIHdpdGggVmVjdG9yLVNjYWxhciAoVlNYKSBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBvd2VyNCwgLW1wd3I0PC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBQb3dlcjQgYXJjaGl0ZWN0dXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wb3dlcjUsIC1tcHdyNSwgLW1wd3I1eDwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgUG93ZXI1IGFyY2hpdGVjdHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcG93ZXI2LCAtbXB3cjY8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIFBvd2VyNiBhcmNoaXRlY3R1cmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBvd2VyNywgLW1wd3I3PC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBQb3dlcjcgYXJjaGl0ZWN0dXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jZWxsPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgYXJjaGl0ZWN0dXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jb208L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgUG93ZXIvUG93ZXJQQyBjb21tb24gaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hbnk8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIGFueSBhcmNoaXRlY3R1cmUgKFBXUi9QV1JYL1BQQykuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlZ25hbWVzPC9jb2RlPjxkZD5BbGxvdyBzeW1ib2xpYyBuYW1lcyBmb3IgcmVnaXN0ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1yZWduYW1lczwvY29kZT48ZGQ+RG8gbm90IGFsbG93IHN5bWJvbGljIG5hbWVzIGZvciByZWdpc3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlbG9jYXRhYmxlPC9jb2RlPjxkZD5TdXBwb3J0IGZvciBHQ0MncyAtbXJlbG9jYXRhYmxlIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmVsb2NhdGFibGUtbGliPC9jb2RlPjxkZD5TdXBwb3J0IGZvciBHQ0MncyAtbXJlbG9jYXRhYmxlLWxpYiBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWVtYjwvY29kZT48ZGQ+U2V0IFBQQ19FTUIgYml0IGluIEVMRiBmbGFncy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbGl0dGxlLCAtbWxpdHRsZS1lbmRpYW4sIC1sZTwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgYSBsaXR0bGUgZW5kaWFuIG1hY2hpbmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJpZywgLW1iaWctZW5kaWFuLCAtYmU8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIGEgYmlnIGVuZGlhbiBtYWNoaW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zb2xhcmlzPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciBTb2xhcmlzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1zb2xhcmlzPC9jb2RlPjxkZD5EbyBub3QgZ2VuZXJhdGUgY29kZSBmb3IgU29sYXJpcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub3BzPTwvY29kZT48dmFyPmNvdW50PC92YXI+PGRkPklmIGFuIGFsaWdubWVudCBkaXJlY3RpdmUgaW5zZXJ0cyBtb3JlIHRoYW4gPHZhcj5jb3VudDwvdmFyPiBub3BzLCBwdXQgYQorYnJhbmNoIGF0IHRoZSBiZWdpbm5pbmcgdG8gc2tpcCBleGVjdXRpb24gb2YgdGhlIG5vcHMuIAorPC9kbD4KKyAgIDwhLS0gbWFuIGVuZCAtLT4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUG93ZXJQQ18wMDJkUHNldWRvLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qb3dlclBDXzAwMmRQc2V1ZG8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzk4YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUG93ZXJQQ18wMDJkUHNldWRvLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UG93ZXJQQy1Qc2V1ZG8gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBQQ18wMDJkRGVwZW5kZW50Lmh0bWwjUFBDXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJQUEMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUG93ZXJQQ18wMDJkT3B0cy5odG1sI1Bvd2VyUENfMDAyZE9wdHMiIHRpdGxlPSJQb3dlclBDLU9wdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQb3dlclBDXzAwMmRTeW50YXguaHRtbCNQb3dlclBDXzAwMmRTeW50YXgiIHRpdGxlPSJQb3dlclBDLVN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBvd2VyUEMtUHNldWRvIj48L2E+Cis8YSBuYW1lPSJQb3dlclBDXzAwMmRQc2V1ZG8iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUG93ZXJQQ18wMDJkU3ludGF4Lmh0bWwjUG93ZXJQQ18wMDJkU3ludGF4Ij5Qb3dlclBDLVN5bnRheDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBvd2VyUENfMDAyZE9wdHMuaHRtbCNQb3dlclBDXzAwMmRPcHRzIj5Qb3dlclBDLU9wdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50Ij5QUEMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zMi4yIFBvd2VyUEMgQXNzZW1ibGVyIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1kaXJlY3RpdmVzLWZvci1Qb3dlclBDLTE2MjYiPjwvYT48YSBuYW1lPSJpbmRleC1Qb3dlclBDLWRpcmVjdGl2ZXMtMTYyNyI+PC9hPkEgbnVtYmVyIG9mIGFzc2VtYmxlciBkaXJlY3RpdmVzIGFyZSBhdmFpbGFibGUgZm9yIFBvd2VyUEMuICBUaGUKK2ZvbGxvd2luZyB0YWJsZSBpcyBmYXIgZnJvbSBjb21wbGV0ZS4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+Lm1hY2hpbmUgInN0cmluZyI8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBtYWNoaW5lIGZvciB3aGljaCBjb2RlIGlzCitnZW5lcmF0ZWQuICA8Y29kZT4ic3RyaW5nIjwvY29kZT4gbWF5IGJlIGFueSBvZiB0aGUgLW0gY3B1IHNlbGVjdGlvbiBvcHRpb25zCisod2l0aG91dCB0aGUgLW0pIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMsIDxjb2RlPiJwdXNoIjwvY29kZT4sIG9yCis8Y29kZT4icG9wIjwvY29kZT4uICA8Y29kZT4ubWFjaGluZSAicHVzaCI8L2NvZGU+IHNhdmVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKK2NwdSwgd2hpY2ggbWF5IGJlIHJlc3RvcmVkIHdpdGggPGNvZGU+Lm1hY2hpbmUgInBvcCI8L2NvZGU+LiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Bvd2VyUENfMDAyZFN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUG93ZXJQQ18wMDJkU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjM2QzMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Bvd2VyUENfMDAyZFN5bnRheC5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlBvd2VyUEMtU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50IiB0aXRsZT0iUFBDLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBvd2VyUENfMDAyZFBzZXVkby5odG1sI1Bvd2VyUENfMDAyZFBzZXVkbyIgdGl0bGU9IlBvd2VyUEMtUHNldWRvIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUG93ZXJQQy1TeW50YXgiPjwvYT4KKzxhIG5hbWU9IlBvd2VyUENfMDAyZFN5bnRheCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBvd2VyUENfMDAyZFBzZXVkby5odG1sI1Bvd2VyUENfMDAyZFBzZXVkbyI+UG93ZXJQQy1Qc2V1ZG88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50Ij5QUEMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zMi4zIFBvd2VyUEMgU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlBvd2VyUENfMDAyZENoYXJzLmh0bWwjUG93ZXJQQ18wMDJkQ2hhcnMiPlBvd2VyUEMtQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QcmVmaXgtT3BzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QcmVmaXgtT3BzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzMzkzOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ByZWZpeC1PcHMuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QcmVmaXggT3BzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjSW50ZWdlci1FeHBycyIgdGl0bGU9IkludGVnZXIgRXhwcnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiIHRpdGxlPSJPcGVyYXRvcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbmZpeC1PcHMuaHRtbCNJbmZpeC1PcHMiIHRpdGxlPSJJbmZpeCBPcHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQcmVmaXgtT3BzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkluZml4LU9wcy5odG1sI0luZml4LU9wcyI+SW5maXggT3BzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3BlcmF0b3JzLmh0bWwjT3BlcmF0b3JzIj5PcGVyYXRvcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRlZ2VyLUV4cHJzLmh0bWwjSW50ZWdlci1FeHBycyI+SW50ZWdlciBFeHByczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMi4zIFByZWZpeCBPcGVyYXRvcjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXByZWZpeC1vcGVyYXRvcnMtMjU2Ij48L2E+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaGFzIHRoZSBmb2xsb3dpbmcgPGRmbj5wcmVmaXggb3BlcmF0b3JzPC9kZm4+LiAgVGhleSBlYWNoIHRha2UKK29uZSBhcmd1bWVudCwgd2hpY2ggbXVzdCBiZSBhYnNvbHV0ZS4KKworPCEtLSB0aGUgdGV4L2VuZCB0ZXggc3R1ZmYgc3Vycm91bmRpbmcgdGhpcyBzbWFsbCB0YWJsZSBpcyBtZWFudCB0byBtYWtlIC0tPgorPCEtLSBpdCBhbGlnbiwgb24gdGhlIHByaW50ZWQgcGFnZSwgd2l0aCB0aGUgc2ltaWxhciB0YWJsZSBpbiB0aGUgbmV4dCAtLT4KKzwhLS0gc2VjdGlvbiAod2hpY2ggaXMgaW5zaWRlIGFuIGVudW1lcmF0ZSkuIC0tPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LTwvY29kZT48ZGQ+PGRmbj5OZWdhdGlvbjwvZGZuPi4gIFR3bydzIGNvbXBsZW1lbnQgbmVnYXRpb24uIAorPGJyPjxkdD48Y29kZT5+PC9jb2RlPjxkZD48ZGZuPkNvbXBsZW1lbnRhdGlvbjwvZGZuPi4gIEJpdHdpc2Ugbm90LiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ByZXByb2Nlc3NpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ByZXByb2Nlc3NpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTkwZDFkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUHJlcHJvY2Vzc2luZy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByZXByb2Nlc3NpbmcgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN5bnRheC5odG1sI1N5bnRheCIgdGl0bGU9IlN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IldoaXRlc3BhY2UuaHRtbCNXaGl0ZXNwYWNlIiB0aXRsZT0iV2hpdGVzcGFjZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlByZXByb2Nlc3NpbmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iV2hpdGVzcGFjZS5odG1sI1doaXRlc3BhY2UiPldoaXRlc3BhY2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTeW50YXguaHRtbCNTeW50YXgiPlN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMSBQcmVwcm9jZXNzaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZy0xMTQiPjwvYT5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gaW50ZXJuYWwgcHJlcHJvY2Vzc29yOgorICAgICAKKzxhIG5hbWU9ImluZGV4LXdoaXRlc3BhY2VfMDAyYy1yZW1vdmVkLWJ5LXByZXByb2Nlc3Nvci0xMTUiPjwvYT4KKzx1bD48bGk+YWRqdXN0cyBhbmQgcmVtb3ZlcyBleHRyYSB3aGl0ZXNwYWNlLiAgSXQgbGVhdmVzIG9uZSBzcGFjZSBvciB0YWIgYmVmb3JlCit0aGUga2V5d29yZHMgb24gYSBsaW5lLCBhbmQgdHVybnMgYW55IG90aGVyIHdoaXRlc3BhY2Ugb24gdGhlIGxpbmUgaW50bworYSBzaW5nbGUgc3BhY2UuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtY29tbWVudHNfMDAyYy1yZW1vdmVkLWJ5LXByZXByb2Nlc3Nvci0xMTYiPjwvYT48bGk+cmVtb3ZlcyBhbGwgY29tbWVudHMsIHJlcGxhY2luZyB0aGVtIHdpdGggYSBzaW5nbGUgc3BhY2UsIG9yIGFuCithcHByb3ByaWF0ZSBudW1iZXIgb2YgbmV3bGluZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtY29uc3RhbnRzXzAwMmMtY29udmVydGVkLWJ5LXByZXByb2Nlc3Nvci0xMTciPjwvYT48bGk+Y29udmVydHMgY2hhcmFjdGVyIGNvbnN0YW50cyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBudW1lcmljIHZhbHVlcy4gCis8L3VsPgorCisgICA8cD5JdCBkb2VzIG5vdCBkbyBtYWNybyBwcm9jZXNzaW5nLCBpbmNsdWRlIGZpbGUgaGFuZGxpbmcsIG9yCithbnl0aGluZyBlbHNlIHlvdSBtYXkgZ2V0IGZyb20geW91ciBDIGNvbXBpbGVyJ3MgcHJlcHJvY2Vzc29yLiAgWW91IGNhbgorZG8gaW5jbHVkZSBmaWxlIHByb2Nlc3Npbmcgd2l0aCB0aGUgPGNvZGU+LmluY2x1ZGU8L2NvZGU+IGRpcmVjdGl2ZQorKHNlZSA8YSBocmVmPSJJbmNsdWRlLmh0bWwjSW5jbHVkZSI+PGNvZGU+LmluY2x1ZGU8L2NvZGU+PC9hPikuICBZb3UgY2FuIHVzZSB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IEMgY29tcGlsZXIgZHJpdmVyCit0byBnZXQgb3RoZXIgJmxkcXVvO0NQUCZyZHF1bzsgc3R5bGUgcHJlcHJvY2Vzc2luZyBieSBnaXZpbmcgdGhlIGlucHV0IGZpbGUgYQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uUzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdWZmaXguICBTZWUgPGEgaHJlZj0iLi4vZ2NjL092ZXJhbGwtT3B0aW9ucy5odG1sI092ZXJhbGwtT3B0aW9ucyI+T3B0aW9ucyBDb250cm9sbGluZyB0aGUgS2luZCBvZiBPdXRwdXQ8L2E+LgorCisgICA8cD5FeGNlc3Mgd2hpdGVzcGFjZSwgY29tbWVudHMsIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzCitjYW5ub3QgYmUgdXNlZCBpbiB0aGUgcG9ydGlvbnMgb2YgdGhlIGlucHV0IHRleHQgdGhhdCBhcmUgbm90CitwcmVwcm9jZXNzZWQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXR1cm5pbmctcHJlcHJvY2Vzc2luZy1vbi1hbmQtb2ZmLTExOCI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXByb2Nlc3NpbmdfMDAyYy10dXJuaW5nLW9uLWFuZC1vZmYtMTE5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNOT18wMDVmQVBQLTEyMCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzQVBQLTEyMSI+PC9hPklmIHRoZSBmaXJzdCBsaW5lIG9mIGFuIGlucHV0IGZpbGUgaXMgPGNvZGU+I05PX0FQUDwvY29kZT4gb3IgaWYgeW91IHVzZSB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUgaW5wdXQgZmlsZS4gCitXaXRoaW4gYW4gaW5wdXQgZmlsZSwgeW91IGNhbiBhc2sgZm9yIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnQgcmVtb3ZhbCBpbgorc3BlY2lmaWMgcG9ydGlvbnMgb2YgdGhlIGJ5IHB1dHRpbmcgYSBsaW5lIHRoYXQgc2F5cyA8Y29kZT4jQVBQPC9jb2RlPiBiZWZvcmUgdGhlCit0ZXh0IHRoYXQgbWF5IGNvbnRhaW4gd2hpdGVzcGFjZSBvciBjb21tZW50cywgYW5kIHB1dHRpbmcgYSBsaW5lIHRoYXQgc2F5cworPGNvZGU+I05PX0FQUDwvY29kZT4gYWZ0ZXIgdGhpcyB0ZXh0LiAgVGhpcyBmZWF0dXJlIGlzIG1haW5seSBpbnRlbmQgdG8gc3VwcG9ydAorPGNvZGU+YXNtPC9jb2RlPiBzdGF0ZW1lbnRzIGluIGNvbXBpbGVycyB3aG9zZSBvdXRwdXQgaXMgb3RoZXJ3aXNlIGZyZWUgb2YgY29tbWVudHMKK2FuZCB3aGl0ZXNwYWNlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QcmV2aW91cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUHJldmlvdXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDM5ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUHJldmlvdXMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QcmV2aW91cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUG9wU2VjdGlvbi5odG1sI1BvcFNlY3Rpb24iIHRpdGxlPSJQb3BTZWN0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJpbnQuaHRtbCNQcmludCIgdGl0bGU9IlByaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUHJldmlvdXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUHJpbnQuaHRtbCNQcmludCI+UHJpbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQb3BTZWN0aW9uLmh0bWwjUG9wU2VjdGlvbiI+UG9wU2VjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny44OCA8Y29kZT4ucHJldmlvdXM8L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwcmV2aW91c18wMDdkLWRpcmVjdGl2ZS00MjciPjwvYT48YSBuYW1lPSJpbmRleC1TZWN0aW9uLVN0YWNrLTQyOCI+PC9hPlRoaXMgaXMgb25lIG9mIHRoZSBFTEYgc2VjdGlvbiBzdGFjayBtYW5pcHVsYXRpb24gZGlyZWN0aXZlcy4gIFRoZSBvdGhlcnMgYXJlCis8Y29kZT4uc2VjdGlvbjwvY29kZT4gKHNlZSA8YSBocmVmPSJTZWN0aW9uLmh0bWwjU2VjdGlvbiI+U2VjdGlvbjwvYT4pLCA8Y29kZT4uc3Vic2VjdGlvbjwvY29kZT4gKHNlZSA8YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiI+U3ViU2VjdGlvbjwvYT4pLAorPGNvZGU+LnB1c2hzZWN0aW9uPC9jb2RlPiAoc2VlIDxhIGhyZWY9IlB1c2hTZWN0aW9uLmh0bWwjUHVzaFNlY3Rpb24iPlB1c2hTZWN0aW9uPC9hPiksIGFuZCA8Y29kZT4ucG9wc2VjdGlvbjwvY29kZT4KKyhzZWUgPGEgaHJlZj0iUG9wU2VjdGlvbi5odG1sI1BvcFNlY3Rpb24iPlBvcFNlY3Rpb248L2E+KS4KKworICAgPHA+VGhpcyBkaXJlY3RpdmUgc3dhcHMgdGhlIGN1cnJlbnQgc2VjdGlvbiAoYW5kIHN1YnNlY3Rpb24pIHdpdGggbW9zdCByZWNlbnRseQorcmVmZXJlbmNlZCBzZWN0aW9uL3N1YnNlY3Rpb24gcGFpciBwcmlvciB0byB0aGlzIG9uZS4gIE11bHRpcGxlCis8Y29kZT4ucHJldmlvdXM8L2NvZGU+IGRpcmVjdGl2ZXMgaW4gYSByb3cgd2lsbCBmbGlwIGJldHdlZW4gdHdvIHNlY3Rpb25zIChhbmQgdGhlaXIKK3N1YnNlY3Rpb25zKS4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLnNlY3Rpb24gQQorICAgICAgLnN1YnNlY3Rpb24gMQorICAgICAgIC53b3JkIDB4MTIzNAorICAgICAgLnN1YnNlY3Rpb24gMgorICAgICAgIC53b3JkIDB4NTY3OAorICAgICAucHJldmlvdXMKKyAgICAgIC53b3JkIDB4OWFiYworPC9wcmU+CisgICA8cD5XaWxsIHBsYWNlIDB4MTIzNCBhbmQgMHg5YWJjIGludG8gc3Vic2VjdGlvbiAxIGFuZCAweDU2NzggaW50byBzdWJzZWN0aW9uIDIgb2YKK3NlY3Rpb24gQS4gIFdoaWxzdDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5zZWN0aW9uIEEKKyAgICAgLnN1YnNlY3Rpb24gMQorICAgICAgICMgTm93IGluIHNlY3Rpb24gQSBzdWJzZWN0aW9uIDEKKyAgICAgICAud29yZCAweDEyMzQKKyAgICAgLnNlY3Rpb24gQgorICAgICAuc3Vic2VjdGlvbiAwCisgICAgICAgIyBOb3cgaW4gc2VjdGlvbiBCIHN1YnNlY3Rpb24gMAorICAgICAgIC53b3JkIDB4NTY3OAorICAgICAuc3Vic2VjdGlvbiAxCisgICAgICAgIyBOb3cgaW4gc2VjdGlvbiBCIHN1YnNlY3Rpb24gMQorICAgICAgIC53b3JkIDB4OWFiYworICAgICAucHJldmlvdXMKKyAgICAgICAjIE5vdyBpbiBzZWN0aW9uIEIgc3Vic2VjdGlvbiAwCisgICAgICAgLndvcmQgMHhkZWYwCis8L3ByZT4KKyAgIDxwPldpbGwgcGxhY2UgMHgxMjM0IGludG8gc2VjdGlvbiBBLCAweDU2NzggYW5kIDB4ZGVmMCBpbnRvIHN1YnNlY3Rpb24gMCBvZgorc2VjdGlvbiBCIGFuZCAweDlhYmMgaW50byBzdWJzZWN0aW9uIDEgb2Ygc2VjdGlvbiBCLgorCisgICA8cD5JbiB0ZXJtcyBvZiB0aGUgc2VjdGlvbiBzdGFjaywgdGhpcyBkaXJlY3RpdmUgc3dhcHMgdGhlIGN1cnJlbnQgc2VjdGlvbiB3aXRoCit0aGUgdG9wIHNlY3Rpb24gb24gdGhlIHNlY3Rpb24gc3RhY2suCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ByaW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QcmludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNWY0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9QcmludC5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByaW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQcmV2aW91cy5odG1sI1ByZXZpb3VzIiB0aXRsZT0iUHJldmlvdXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQcm90ZWN0ZWQuaHRtbCNQcm90ZWN0ZWQiIHRpdGxlPSJQcm90ZWN0ZWQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQcmludCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQcm90ZWN0ZWQuaHRtbCNQcm90ZWN0ZWQiPlByb3RlY3RlZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlByZXZpb3VzLmh0bWwjUHJldmlvdXMiPlByZXZpb3VzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43Ljg5IDxjb2RlPi5wcmludCA8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnByaW50XzAwN2QtZGlyZWN0aXZlLTQyOSI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHdpbGwgcHJpbnQgPHZhcj5zdHJpbmc8L3Zhcj4gb24gdGhlIHN0YW5kYXJkIG91dHB1dCBkdXJpbmcKK2Fzc2VtYmx5LiAgWW91IG11c3QgcHV0IDx2YXI+c3RyaW5nPC92YXI+IGluIGRvdWJsZSBxdW90ZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Byb3RlY3RlZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUHJvdGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3YTI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Byb3RlY3RlZC5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByb3RlY3RlZCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUHJpbnQuaHRtbCNQcmludCIgdGl0bGU9IlByaW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHNpemUuaHRtbCNQc2l6ZSIgdGl0bGU9IlBzaXplIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUHJvdGVjdGVkIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBzaXplLmh0bWwjUHNpemUiPlBzaXplPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHJpbnQuaHRtbCNQcmludCI+UHJpbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuOTAgPGNvZGU+LnByb3RlY3RlZCA8L2NvZGU+PHZhcj5uYW1lczwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicHJvdGVjdGVkXzAwN2QtZGlyZWN0aXZlLTQzMCI+PC9hPjxhIG5hbWU9ImluZGV4LXZpc2liaWxpdHktNDMxIj48L2E+VGhpcyBpcyBvbmUgb2YgdGhlIEVMRiB2aXNpYmlsaXR5IGRpcmVjdGl2ZXMuICBUaGUgb3RoZXIgdHdvIGFyZQorPGNvZGU+LmhpZGRlbjwvY29kZT4gKHNlZSA8YSBocmVmPSJIaWRkZW4uaHRtbCNIaWRkZW4iPkhpZGRlbjwvYT4pIGFuZCA8Y29kZT4uaW50ZXJuYWw8L2NvZGU+IChzZWUgPGEgaHJlZj0iSW50ZXJuYWwuaHRtbCNJbnRlcm5hbCI+SW50ZXJuYWw8L2E+KS4KKworICAgPHA+VGhpcyBkaXJlY3RpdmUgb3ZlcnJpZGVzIHRoZSBuYW1lZCBzeW1ib2xzIGRlZmF1bHQgdmlzaWJpbGl0eSAod2hpY2ggaXMgc2V0IGJ5Cit0aGVpciBiaW5kaW5nOiBsb2NhbCwgZ2xvYmFsIG9yIHdlYWspLiAgVGhlIGRpcmVjdGl2ZSBzZXRzIHRoZSB2aXNpYmlsaXR5IHRvCis8Y29kZT5wcm90ZWN0ZWQ8L2NvZGU+IHdoaWNoIG1lYW5zIHRoYXQgYW55IHJlZmVyZW5jZXMgdG8gdGhlIHN5bWJvbHMgZnJvbSB3aXRoaW4gdGhlCitjb21wb25lbnRzIHRoYXQgZGVmaW5lcyB0aGVtIG11c3QgYmUgcmVzb2x2ZWQgdG8gdGhlIGRlZmluaXRpb24gaW4gdGhhdAorY29tcG9uZW50LCBldmVuIGlmIGEgZGVmaW5pdGlvbiBpbiBhbm90aGVyIGNvbXBvbmVudCB3b3VsZCBub3JtYWxseSBwcmVlbXB0Cit0aGlzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qc2V1ZG8tT3BzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qc2V1ZG8tT3BzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y5YTdlNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1BzZXVkby1PcHMuaHRtbApAQCAtMCwwICsxLDIwNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UHNldWRvIE9wcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIiB0aXRsZT0iRXhwcmVzc2lvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPYmplY3QtQXR0cmlidXRlcy5odG1sI09iamVjdC1BdHRyaWJ1dGVzIiB0aXRsZT0iT2JqZWN0IEF0dHJpYnV0ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQc2V1ZG8tT3BzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9iamVjdC1BdHRyaWJ1dGVzLmh0bWwjT2JqZWN0LUF0dHJpYnV0ZXMiPk9iamVjdCBBdHRyaWJ1dGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NyBBc3NlbWJsZXIgRGlyZWN0aXZlczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRpcmVjdGl2ZXNfMDAyYy1tYWNoaW5lLWluZGVwZW5kZW50LTI2OSI+PC9hPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3BzXzAwMmMtbWFjaGluZS1pbmRlcGVuZGVudC0yNzAiPjwvYT48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWluZGVwZW5kZW50LWRpcmVjdGl2ZXMtMjcxIj48L2E+QWxsIGFzc2VtYmxlciBkaXJlY3RpdmVzIGhhdmUgbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgcGVyaW9kICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAKK1RoZSByZXN0IG9mIHRoZSBuYW1lIGlzIGxldHRlcnMsIHVzdWFsbHkgaW4gbG93ZXIgY2FzZS4KKworICAgPHA+VGhpcyBjaGFwdGVyIGRpc2N1c3NlcyBkaXJlY3RpdmVzIHRoYXQgYXJlIGF2YWlsYWJsZSByZWdhcmRsZXNzIG9mIHRoZQordGFyZ2V0IG1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgdGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBhc3NlbWJsZXIuIAorU29tZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zIHByb3ZpZGUgYWRkaXRpb25hbCBkaXJlY3RpdmVzLiAKK1NlZSA8YSBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJBYm9ydC5odG1sI0Fib3J0Ij5BYm9ydDwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmFib3J0PC9jb2RlPgorCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBQk9SVC1fMDAyOENPRkZfMDAyOS5odG1sI0FCT1JULV8wMDI4Q09GRl8wMDI5Ij5BQk9SVCAoQ09GRik8L2E+OiAgICAgICAgICAgICAgICAgPGNvZGU+LkFCT1JUPC9jb2RlPgorCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJBbGlnbi5odG1sI0FsaWduIj5BbGlnbjwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmFsaWduIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+YWJzLWV4cHI8L3Zhcj4KKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkFsdG1hY3JvLmh0bWwjQWx0bWFjcm8iPkFsdG1hY3JvPC9hPjogICAgICAgICAgICAgICAgICAgICA8Y29kZT4uYWx0bWFjcm88L2NvZGU+Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJBc2NpaS5odG1sI0FzY2lpIj5Bc2NpaTwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmFzY2lpICI8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48Y29kZT4iPC9jb2RlPi4uLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkFzY2l6Lmh0bWwjQXNjaXoiPkFzY2l6PC9hPjogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uYXNjaXogIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiI8L2NvZGU+Li4uIAorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iQmFsaWduLmh0bWwjQmFsaWduIj5CYWxpZ248L2E+OiAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmJhbGlnbiA8L2NvZGU+PHZhcj5hYnMtZXhwcjwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+Cis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJCdW5kbGUtZGlyZWN0aXZlcy5odG1sI0J1bmRsZS1kaXJlY3RpdmVzIj5CdW5kbGUgZGlyZWN0aXZlczwvYT46ICAgICAgICAgICAgPGNvZGU+LmJ1bmRsZV9hbGlnbl9tb2RlIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+LCA8Y29kZT4uYnVuZGxlX2xvY2s8L2NvZGU+LCA8Y29kZT4uYnVuZGxlX3VubG9jazwvY29kZT4KKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkJ5dGUuaHRtbCNCeXRlIj5CeXRlPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmJ5dGUgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj4KKzxsaT48YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj5DRkkgZGlyZWN0aXZlczwvYT46IAkJPGNvZGU+LmNmaV9zdGFydHByb2MgW3NpbXBsZV08L2NvZGU+LCA8Y29kZT4uY2ZpX2VuZHByb2M8L2NvZGU+LCBldGMuIAorPGxpPjxhIGhyZWY9IkNvbW0uaHRtbCNDb21tIj5Db21tPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmNvbW0gPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+bGVuZ3RoPC92YXI+IAorPGxpPjxhIGhyZWY9IkRhdGEuaHRtbCNEYXRhIj5EYXRhPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmRhdGEgPC9jb2RlPjx2YXI+c3Vic2VjdGlvbjwvdmFyPgorCis8bGk+PGEgaHJlZj0iRGVmLmh0bWwjRGVmIj5EZWY8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmRlZiA8L2NvZGU+PHZhcj5uYW1lPC92YXI+CisKKzxsaT48YSBocmVmPSJEZXNjLmh0bWwjRGVzYyI+RGVzYzwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5kZXNjIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YWJzLWV4cHJlc3Npb248L3Zhcj4KKworPGxpPjxhIGhyZWY9IkRpbS5odG1sI0RpbSI+RGltPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5kaW08L2NvZGU+CisKKzxsaT48YSBocmVmPSJEb3VibGUuaHRtbCNEb3VibGUiPkRvdWJsZTwvYT46ICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uZG91YmxlIDwvY29kZT48dmFyPmZsb251bXM8L3Zhcj4KKzxsaT48YSBocmVmPSJFamVjdC5odG1sI0VqZWN0Ij5FamVjdDwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmVqZWN0PC9jb2RlPgorPGxpPjxhIGhyZWY9IkVsc2UuaHRtbCNFbHNlIj5FbHNlPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmVsc2U8L2NvZGU+Cis8bGk+PGEgaHJlZj0iRWxzZWlmLmh0bWwjRWxzZWlmIj5FbHNlaWY8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmVsc2VpZjwvY29kZT4KKzxsaT48YSBocmVmPSJFbmQuaHRtbCNFbmQiPkVuZDwvYT46IAkJCQk8Y29kZT4uZW5kPC9jb2RlPgorCis8bGk+PGEgaHJlZj0iRW5kZWYuaHRtbCNFbmRlZiI+RW5kZWY8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5lbmRlZjwvY29kZT4KKworPGxpPjxhIGhyZWY9IkVuZGZ1bmMuaHRtbCNFbmRmdW5jIj5FbmRmdW5jPC9hPjogICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmVuZGZ1bmM8L2NvZGU+Cis8bGk+PGEgaHJlZj0iRW5kaWYuaHRtbCNFbmRpZiI+RW5kaWY8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5lbmRpZjwvY29kZT4KKzxsaT48YSBocmVmPSJFcXUuaHRtbCNFcXUiPkVxdTwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uZXF1IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPgorPGxpPjxhIGhyZWY9IkVxdWl2Lmh0bWwjRXF1aXYiPkVxdWl2PC9hPjogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uZXF1aXYgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+Cis8bGk+PGEgaHJlZj0iRXF2Lmh0bWwjRXF2Ij5FcXY8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmVxdiA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj4KKzxsaT48YSBocmVmPSJFcnIuaHRtbCNFcnIiPkVycjwvYT46IAkJCQk8Y29kZT4uZXJyPC9jb2RlPgorPGxpPjxhIGhyZWY9IkVycm9yLmh0bWwjRXJyb3IiPkVycm9yPC9hPjogCQkJPGNvZGU+LmVycm9yIDwvY29kZT48dmFyPnN0cmluZzwvdmFyPgorPGxpPjxhIGhyZWY9IkV4aXRtLmh0bWwjRXhpdG0iPkV4aXRtPC9hPjogCQkJPGNvZGU+LmV4aXRtPC9jb2RlPgorPGxpPjxhIGhyZWY9IkV4dGVybi5odG1sI0V4dGVybiI+RXh0ZXJuPC9hPjogICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5leHRlcm48L2NvZGU+Cis8bGk+PGEgaHJlZj0iRmFpbC5odG1sI0ZhaWwiPkZhaWw8L2E+OiAJCQk8Y29kZT4uZmFpbDwvY29kZT4KKzxsaT48YSBocmVmPSJGaWxlLmh0bWwjRmlsZSI+RmlsZTwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5maWxlPC9jb2RlPgorPGxpPjxhIGhyZWY9IkZpbGwuaHRtbCNGaWxsIj5GaWxsPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmZpbGwgPC9jb2RlPjx2YXI+cmVwZWF0PC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPnZhbHVlPC92YXI+Cis8bGk+PGEgaHJlZj0iRmxvYXQuaHRtbCNGbG9hdCI+RmxvYXQ8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5mbG9hdCA8L2NvZGU+PHZhcj5mbG9udW1zPC92YXI+Cis8bGk+PGEgaHJlZj0iRnVuYy5odG1sI0Z1bmMiPkZ1bmM8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uZnVuYzwvY29kZT4KKzxsaT48YSBocmVmPSJHbG9iYWwuaHRtbCNHbG9iYWwiPkdsb2JhbDwvYT46ICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uZ2xvYmFsIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPiwgPGNvZGU+Lmdsb2JsIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPgorCis8bGk+PGEgaHJlZj0iR251XzAwNWZhdHRyaWJ1dGUuaHRtbCNHbnVfMDA1ZmF0dHJpYnV0ZSI+R251X2F0dHJpYnV0ZTwvYT46ICAgICAgICAgICAgICAgIDxjb2RlPi5nbnVfYXR0cmlidXRlIDwvY29kZT48dmFyPnRhZzwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPgorPGxpPjxhIGhyZWY9IkhpZGRlbi5odG1sI0hpZGRlbiI+SGlkZGVuPC9hPjogICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5oaWRkZW4gPC9jb2RlPjx2YXI+bmFtZXM8L3Zhcj4KKworPGxpPjxhIGhyZWY9Imh3b3JkLmh0bWwjaHdvcmQiPmh3b3JkPC9hPjogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uaHdvcmQgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj4KKzxsaT48YSBocmVmPSJJZGVudC5odG1sI0lkZW50Ij5JZGVudDwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmlkZW50PC9jb2RlPgorPGxpPjxhIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uaWYgPC9jb2RlPjx2YXI+YWJzb2x1dGUgZXhwcmVzc2lvbjwvdmFyPgorPGxpPjxhIGhyZWY9IkluY2Jpbi5odG1sI0luY2JpbiI+SW5jYmluPC9hPjogICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5pbmNiaW4gIjwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4iWyw8L2NvZGU+PHZhcj5za2lwPC92YXI+PGNvZGU+Wyw8L2NvZGU+PHZhcj5jb3VudDwvdmFyPjxjb2RlPl1dPC9jb2RlPgorPGxpPjxhIGhyZWY9IkluY2x1ZGUuaHRtbCNJbmNsdWRlIj5JbmNsdWRlPC9hPjogICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmluY2x1ZGUgIjwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4iPC9jb2RlPgorPGxpPjxhIGhyZWY9IkludC5odG1sI0ludCI+SW50PC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5pbnQgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj4KKworPGxpPjxhIGhyZWY9IkludGVybmFsLmh0bWwjSW50ZXJuYWwiPkludGVybmFsPC9hPjogICAgICAgICAgICAgICAgICAgICA8Y29kZT4uaW50ZXJuYWwgPC9jb2RlPjx2YXI+bmFtZXM8L3Zhcj4KKworPGxpPjxhIGhyZWY9IklycC5odG1sI0lycCI+SXJwPC9hPjogCQkJCTxjb2RlPi5pcnAgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPnZhbHVlczwvdmFyPi4uLiAKKzxsaT48YSBocmVmPSJJcnBjLmh0bWwjSXJwYyI+SXJwYzwvYT46IAkJCTxjb2RlPi5pcnBjIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj52YWx1ZXM8L3Zhcj4uLi4gCis8bGk+PGEgaHJlZj0iTGNvbW0uaHRtbCNMY29tbSI+TGNvbW08L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5sY29tbSA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gLCA8L2NvZGU+PHZhcj5sZW5ndGg8L3Zhcj4KKzxsaT48YSBocmVmPSJMZmxhZ3MuaHRtbCNMZmxhZ3MiPkxmbGFnczwvYT46ICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4ubGZsYWdzPC9jb2RlPgorCis8bGk+PGEgaHJlZj0iTGluZS5odG1sI0xpbmUiPkxpbmU8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4ubGluZSA8L2NvZGU+PHZhcj5saW5lLW51bWJlcjwvdmFyPgorCis8bGk+PGEgaHJlZj0iTGlua29uY2UuaHRtbCNMaW5rb25jZSI+TGlua29uY2U8L2E+OiAJCQk8Y29kZT4ubGlua29uY2UgWzwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT5dPC9jb2RlPgorPGxpPjxhIGhyZWY9Ikxpc3QuaHRtbCNMaXN0Ij5MaXN0PC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Lmxpc3Q8L2NvZGU+Cis8bGk+PGEgaHJlZj0iTG4uaHRtbCNMbiI+TG48L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5sbiA8L2NvZGU+PHZhcj5saW5lLW51bWJlcjwvdmFyPgorPGxpPjxhIGhyZWY9IkxvYy5odG1sI0xvYyI+TG9jPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5sb2MgPC9jb2RlPjx2YXI+ZmlsZW5vPC92YXI+IDx2YXI+bGluZW5vPC92YXI+Cis8bGk+PGEgaHJlZj0iTG9jXzAwNWZtYXJrXzAwNWZsYWJlbHMuaHRtbCNMb2NfMDA1Zm1hcmtfMDA1ZmxhYmVscyI+TG9jX21hcmtfbGFiZWxzPC9hPjogICAgICAgICAgICAgIDxjb2RlPi5sb2NfbWFya19sYWJlbHMgPC9jb2RlPjx2YXI+ZW5hYmxlPC92YXI+CisKKzxsaT48YSBocmVmPSJMb2NhbC5odG1sI0xvY2FsIj5Mb2NhbDwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LmxvY2FsIDwvY29kZT48dmFyPm5hbWVzPC92YXI+CisKKzxsaT48YSBocmVmPSJMb25nLmh0bWwjTG9uZyI+TG9uZzwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5sb25nIDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+CisKKzxsaT48YSBocmVmPSJNYWNyby5odG1sI01hY3JvIj5NYWNybzwvYT46IAkJCTxjb2RlPi5tYWNybyA8L2NvZGU+PHZhcj5uYW1lPC92YXI+IDx2YXI+YXJnczwvdmFyPi4uLiAKKzxsaT48YSBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT46IAkJCQk8Y29kZT4ubXJpIDwvY29kZT48dmFyPnZhbDwvdmFyPgorPGxpPjxhIGhyZWY9Ik5vYWx0bWFjcm8uaHRtbCNOb2FsdG1hY3JvIj5Ob2FsdG1hY3JvPC9hPjogICAgICAgICAgICAgICAgICAgPGNvZGU+Lm5vYWx0bWFjcm88L2NvZGU+Cis8bGk+PGEgaHJlZj0iTm9saXN0Lmh0bWwjTm9saXN0Ij5Ob2xpc3Q8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Lm5vbGlzdDwvY29kZT4KKzxsaT48YSBocmVmPSJPY3RhLmh0bWwjT2N0YSI+T2N0YTwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5vY3RhIDwvY29kZT48dmFyPmJpZ251bXM8L3Zhcj4KKzxsaT48YSBocmVmPSJPZmZzZXQuaHRtbCNPZmZzZXQiPk9mZnNldDwvYT46IAkJCTxjb2RlPi5vZmZzZXQgPC9jb2RlPjx2YXI+bG9jPC92YXI+Cis8bGk+PGEgaHJlZj0iT3JnLmh0bWwjT3JnIj5Pcmc8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+Lm9yZyA8L2NvZGU+PHZhcj5uZXctbGM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmZpbGw8L3Zhcj4KKzxsaT48YSBocmVmPSJQMmFsaWduLmh0bWwjUDJhbGlnbiI+UDJhbGlnbjwvYT46ICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5wMmFsaWduIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hYnMtZXhwcjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YWJzLWV4cHI8L3Zhcj4KKworPGxpPjxhIGhyZWY9IlBvcFNlY3Rpb24uaHRtbCNQb3BTZWN0aW9uIj5Qb3BTZWN0aW9uPC9hPjogICAgICAgICAgICAgICAgICAgPGNvZGU+LnBvcHNlY3Rpb248L2NvZGU+Cis8bGk+PGEgaHJlZj0iUHJldmlvdXMuaHRtbCNQcmV2aW91cyI+UHJldmlvdXM8L2E+OiAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5wcmV2aW91czwvY29kZT4KKworPGxpPjxhIGhyZWY9IlByaW50Lmh0bWwjUHJpbnQiPlByaW50PC9hPjogCQkJPGNvZGU+LnByaW50IDwvY29kZT48dmFyPnN0cmluZzwvdmFyPgorCis8bGk+PGEgaHJlZj0iUHJvdGVjdGVkLmh0bWwjUHJvdGVjdGVkIj5Qcm90ZWN0ZWQ8L2E+OiAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnByb3RlY3RlZCA8L2NvZGU+PHZhcj5uYW1lczwvdmFyPgorCis8bGk+PGEgaHJlZj0iUHNpemUuaHRtbCNQc2l6ZSI+UHNpemU8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5wc2l6ZSA8L2NvZGU+PHZhcj5saW5lczwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+Y29sdW1uczwvdmFyPgorPGxpPjxhIGhyZWY9IlB1cmdlbS5odG1sI1B1cmdlbSI+UHVyZ2VtPC9hPjogCQkJPGNvZGU+LnB1cmdlbSA8L2NvZGU+PHZhcj5uYW1lPC92YXI+CisKKzxsaT48YSBocmVmPSJQdXNoU2VjdGlvbi5odG1sI1B1c2hTZWN0aW9uIj5QdXNoU2VjdGlvbjwvYT46ICAgICAgICAgICAgICAgICAgPGNvZGU+LnB1c2hzZWN0aW9uIDwvY29kZT48dmFyPm5hbWU8L3Zhcj4KKworPGxpPjxhIGhyZWY9IlF1YWQuaHRtbCNRdWFkIj5RdWFkPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnF1YWQgPC9jb2RlPjx2YXI+YmlnbnVtczwvdmFyPgorPGxpPjxhIGhyZWY9IlJlbG9jLmh0bWwjUmVsb2MiPlJlbG9jPC9hPjogCQkJPGNvZGU+LnJlbG9jIDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cmVsb2NfbmFtZTwvdmFyPjxjb2RlPlssIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5dPC9jb2RlPgorPGxpPjxhIGhyZWY9IlJlcHQuaHRtbCNSZXB0Ij5SZXB0PC9hPjogCQkJPGNvZGU+LnJlcHQgPC9jb2RlPjx2YXI+Y291bnQ8L3Zhcj4KKzxsaT48YSBocmVmPSJTYnR0bC5odG1sI1NidHRsIj5TYnR0bDwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnNidHRsICI8L2NvZGU+PHZhcj5zdWJoZWFkaW5nPC92YXI+PGNvZGU+IjwvY29kZT4KKworPGxpPjxhIGhyZWY9IlNjbC5odG1sI1NjbCI+U2NsPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5zY2wgPC9jb2RlPjx2YXI+Y2xhc3M8L3Zhcj4KKworPGxpPjxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj5TZWN0aW9uPC9hPjogICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnNlY3Rpb24gPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPlssIDwvY29kZT48dmFyPmZsYWdzPC92YXI+PGNvZGU+XTwvY29kZT4KKworPGxpPjxhIGhyZWY9IlNldC5odG1sI1NldCI+U2V0PC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5zZXQgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+Cis8bGk+PGEgaHJlZj0iU2hvcnQuaHRtbCNTaG9ydCI+U2hvcnQ8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5zaG9ydCA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPgorPGxpPjxhIGhyZWY9IlNpbmdsZS5odG1sI1NpbmdsZSI+U2luZ2xlPC9hPjogICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5zaW5nbGUgPC9jb2RlPjx2YXI+ZmxvbnVtczwvdmFyPgorCis8bGk+PGEgaHJlZj0iU2l6ZS5odG1sI1NpemUiPlNpemU8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uc2l6ZSBbPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5dPC9jb2RlPgorCis8bGk+PGEgaHJlZj0iU2tpcC5odG1sI1NraXAiPlNraXA8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uc2tpcCA8L2NvZGU+PHZhcj5zaXplPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+ZmlsbDwvdmFyPgorCis8bGk+PGEgaHJlZj0iU2xlYjEyOC5odG1sI1NsZWIxMjgiPlNsZWIxMjg8L2E+OiAJCQk8Y29kZT4uc2xlYjEyOCA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPgorCis8bGk+PGEgaHJlZj0iU3BhY2UuaHRtbCNTcGFjZSI+U3BhY2U8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5zcGFjZSA8L2NvZGU+PHZhcj5zaXplPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+ZmlsbDwvdmFyPgorCis8bGk+PGEgaHJlZj0iU3RhYi5odG1sI1N0YWIiPlN0YWI8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4uc3RhYmQsIC5zdGFibiwgLnN0YWJzPC9jb2RlPgorCis8bGk+PGEgaHJlZj0iU3RyaW5nLmh0bWwjU3RyaW5nIj5TdHJpbmc8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnN0cmluZyAiPC9jb2RlPjx2YXI+c3RyPC92YXI+PGNvZGU+IjwvY29kZT4sIDxjb2RlPi5zdHJpbmc4ICI8L2NvZGU+PHZhcj5zdHI8L3Zhcj48Y29kZT4iPC9jb2RlPiwgPGNvZGU+LnN0cmluZzE2ICI8L2NvZGU+PHZhcj5zdHI8L3Zhcj48Y29kZT4iPC9jb2RlPiwgPGNvZGU+LnN0cmluZzMyICI8L2NvZGU+PHZhcj5zdHI8L3Zhcj48Y29kZT4iPC9jb2RlPiwgPGNvZGU+LnN0cmluZzY0ICI8L2NvZGU+PHZhcj5zdHI8L3Zhcj48Y29kZT4iPC9jb2RlPgorPGxpPjxhIGhyZWY9IlN0cnVjdC5odG1sI1N0cnVjdCI+U3RydWN0PC9hPjogCQkJPGNvZGU+LnN0cnVjdCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+CisKKzxsaT48YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiI+U3ViU2VjdGlvbjwvYT46ICAgICAgICAgICAgICAgICAgIDxjb2RlPi5zdWJzZWN0aW9uPC9jb2RlPgorPGxpPjxhIGhyZWY9IlN5bXZlci5odG1sI1N5bXZlciI+U3ltdmVyPC9hPjogICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi5zeW12ZXIgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5uYW1lMkBub2RlbmFtZTwvdmFyPgorCis8bGk+PGEgaHJlZj0iVGFnLmh0bWwjVGFnIj5UYWc8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnRhZyA8L2NvZGU+PHZhcj5zdHJ1Y3RuYW1lPC92YXI+CisKKzxsaT48YSBocmVmPSJUZXh0Lmh0bWwjVGV4dCI+VGV4dDwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi50ZXh0IDwvY29kZT48dmFyPnN1YnNlY3Rpb248L3Zhcj4KKzxsaT48YSBocmVmPSJUaXRsZS5odG1sI1RpdGxlIj5UaXRsZTwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnRpdGxlICI8L2NvZGU+PHZhcj5oZWFkaW5nPC92YXI+PGNvZGU+IjwvY29kZT4KKworPGxpPjxhIGhyZWY9IlR5cGUuaHRtbCNUeXBlIj5UeXBlPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnR5cGUgJmx0OzwvY29kZT48dmFyPmludDwvdmFyPjxjb2RlPiB8IDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT4gLCA8L2NvZGU+PHZhcj50eXBlIGRlc2NyaXB0aW9uPC92YXI+PGNvZGU+Jmd0OzwvY29kZT4KKworPGxpPjxhIGhyZWY9IlVsZWIxMjguaHRtbCNVbGViMTI4Ij5VbGViMTI4PC9hPjogICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LnVsZWIxMjggPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj4KKworPGxpPjxhIGhyZWY9IlZhbC5odG1sI1ZhbCI+VmFsPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi52YWwgPC9jb2RlPjx2YXI+YWRkcjwvdmFyPgorCis8bGk+PGEgaHJlZj0iVmVyc2lvbi5odG1sI1ZlcnNpb24iPlZlcnNpb248L2E+OiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4udmVyc2lvbiAiPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGNvZGU+IjwvY29kZT4KKzxsaT48YSBocmVmPSJWVGFibGVFbnRyeS5odG1sI1ZUYWJsZUVudHJ5Ij5WVGFibGVFbnRyeTwvYT46ICAgICAgICAgICAgICAgICAgPGNvZGU+LnZ0YWJsZV9lbnRyeSA8L2NvZGU+PHZhcj50YWJsZTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+b2Zmc2V0PC92YXI+Cis8bGk+PGEgaHJlZj0iVlRhYmxlSW5oZXJpdC5odG1sI1ZUYWJsZUluaGVyaXQiPlZUYWJsZUluaGVyaXQ8L2E+OiAgICAgICAgICAgICAgICA8Y29kZT4udnRhYmxlX2luaGVyaXQgPC9jb2RlPjx2YXI+Y2hpbGQ8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnBhcmVudDwvdmFyPgorCis8bGk+PGEgaHJlZj0iV2FybmluZy5odG1sI1dhcm5pbmciPldhcm5pbmc8L2E+OiAJCQk8Y29kZT4ud2FybmluZyA8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj4KKzxsaT48YSBocmVmPSJXZWFrLmh0bWwjV2VhayI+V2VhazwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPi53ZWFrIDwvY29kZT48dmFyPm5hbWVzPC92YXI+Cis8bGk+PGEgaHJlZj0iV2Vha3JlZi5odG1sI1dlYWtyZWYiPldlYWtyZWY8L2E+OiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4ud2Vha3JlZiA8L2NvZGU+PHZhcj5hbGlhczwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+Cis8bGk+PGEgaHJlZj0iV29yZC5odG1sI1dvcmQiPldvcmQ8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4ud29yZCA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPgorPGxpPjxhIGhyZWY9IkRlcHJlY2F0ZWQuaHRtbCNEZXByZWNhdGVkIj5EZXByZWNhdGVkPC9hPjogICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZCBEaXJlY3RpdmVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Qc2l6ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUHNpemUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGY3ZGU1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUHNpemUuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Qc2l6ZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUHJvdGVjdGVkLmh0bWwjUHJvdGVjdGVkIiB0aXRsZT0iUHJvdGVjdGVkIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHVyZ2VtLmh0bWwjUHVyZ2VtIiB0aXRsZT0iUHVyZ2VtIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUHNpemUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUHVyZ2VtLmh0bWwjUHVyZ2VtIj5QdXJnZW08L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQcm90ZWN0ZWQuaHRtbCNQcm90ZWN0ZWQiPlByb3RlY3RlZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny45MSA8Y29kZT4ucHNpemUgPC9jb2RlPjx2YXI+bGluZXM8L3Zhcj48Y29kZT4gLCA8L2NvZGU+PHZhcj5jb2x1bW5zPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jwc2l6ZV8wMDdkLWRpcmVjdGl2ZS00MzIiPjwvYT48YSBuYW1lPSJpbmRleC1saXN0aW5nLWNvbnRyb2xfMDAzYS1wYXBlci1zaXplLTQzMyI+PC9hPjxhIG5hbWU9ImluZGV4LXBhcGVyLXNpemVfMDAyYy1mb3ItbGlzdGluZ3MtNDM0Ij48L2E+VXNlIHRoaXMgZGlyZWN0aXZlIHRvIGRlY2xhcmUgdGhlIG51bWJlciBvZiBsaW5lcyZtZGFzaDthbmQsIG9wdGlvbmFsbHksIHRoZQorbnVtYmVyIG9mIGNvbHVtbnMmbWRhc2g7dG8gdXNlIGZvciBlYWNoIHBhZ2UsIHdoZW4gZ2VuZXJhdGluZyBsaXN0aW5ncy4KKworICAgPHA+SWYgeW91IGRvIG5vdCB1c2UgPGNvZGU+LnBzaXplPC9jb2RlPiwgbGlzdGluZ3MgdXNlIGEgZGVmYXVsdCBsaW5lLWNvdW50CitvZiA2MC4gIFlvdSBtYXkgb21pdCB0aGUgY29tbWEgYW5kIDx2YXI+Y29sdW1uczwvdmFyPiBzcGVjaWZpY2F0aW9uOyB0aGUKK2RlZmF1bHQgd2lkdGggaXMgMjAwIGNvbHVtbnMuCisKKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGdlbmVyYXRlcyBmb3JtZmVlZHMgd2hlbmV2ZXIgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YKK2xpbmVzIGlzIGV4Y2VlZGVkIChvciB3aGVuZXZlciB5b3UgZXhwbGljaXRseSByZXF1ZXN0IG9uZSwgdXNpbmcKKzxjb2RlPi5lamVjdDwvY29kZT4pLgorCisgICA8cD5JZiB5b3Ugc3BlY2lmeSA8dmFyPmxpbmVzPC92YXI+IGFzIDxjb2RlPjA8L2NvZGU+LCBubyBmb3JtZmVlZHMgYXJlIGdlbmVyYXRlZCBzYXZlCit0aG9zZSBleHBsaWNpdGx5IHNwZWNpZmllZCB3aXRoIDxjb2RlPi5lamVjdDwvY29kZT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1B1cmdlbS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUHVyZ2VtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4OWE2MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1B1cmdlbS5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlB1cmdlbSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUHNpemUuaHRtbCNQc2l6ZSIgdGl0bGU9IlBzaXplIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHVzaFNlY3Rpb24uaHRtbCNQdXNoU2VjdGlvbiIgdGl0bGU9IlB1c2hTZWN0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUHVyZ2VtIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlB1c2hTZWN0aW9uLmh0bWwjUHVzaFNlY3Rpb24iPlB1c2hTZWN0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHNpemUuaHRtbCNQc2l6ZSI+UHNpemU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuOTIgPGNvZGU+LnB1cmdlbSA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwdXJnZW1fMDA3ZC1kaXJlY3RpdmUtNDM1Ij48L2E+VW5kZWZpbmUgdGhlIG1hY3JvIDx2YXI+bmFtZTwvdmFyPiwgc28gdGhhdCBsYXRlciB1c2VzIG9mIHRoZSBzdHJpbmcgd2lsbCBub3QgYmUKK2V4cGFuZGVkLiAgU2VlIDxhIGhyZWY9Ik1hY3JvLmh0bWwjTWFjcm8iPk1hY3JvPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUHVzaFNlY3Rpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1B1c2hTZWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmMTk1YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1B1c2hTZWN0aW9uLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UHVzaFNlY3Rpb24gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlB1cmdlbS5odG1sI1B1cmdlbSIgdGl0bGU9IlB1cmdlbSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlF1YWQuaHRtbCNRdWFkIiB0aXRsZT0iUXVhZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlB1c2hTZWN0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlF1YWQuaHRtbCNRdWFkIj5RdWFkPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHVyZ2VtLmh0bWwjUHVyZ2VtIj5QdXJnZW08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuOTMgPGNvZGU+LnB1c2hzZWN0aW9uIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT4gWywgPC9jb2RlPjx2YXI+c3Vic2VjdGlvbjwvdmFyPjxjb2RlPl0gWywgIjwvY29kZT48dmFyPmZsYWdzPC92YXI+PGNvZGU+IlssIEA8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+Wyw8L2NvZGU+PHZhcj5hcmd1bWVudHM8L3Zhcj48Y29kZT5dXV08L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwdXNoc2VjdGlvbl8wMDdkLWRpcmVjdGl2ZS00MzYiPjwvYT48YSBuYW1lPSJpbmRleC1TZWN0aW9uLVN0YWNrLTQzNyI+PC9hPlRoaXMgaXMgb25lIG9mIHRoZSBFTEYgc2VjdGlvbiBzdGFjayBtYW5pcHVsYXRpb24gZGlyZWN0aXZlcy4gIFRoZSBvdGhlcnMgYXJlCis8Y29kZT4uc2VjdGlvbjwvY29kZT4gKHNlZSA8YSBocmVmPSJTZWN0aW9uLmh0bWwjU2VjdGlvbiI+U2VjdGlvbjwvYT4pLCA8Y29kZT4uc3Vic2VjdGlvbjwvY29kZT4gKHNlZSA8YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiI+U3ViU2VjdGlvbjwvYT4pLAorPGNvZGU+LnBvcHNlY3Rpb248L2NvZGU+IChzZWUgPGEgaHJlZj0iUG9wU2VjdGlvbi5odG1sI1BvcFNlY3Rpb24iPlBvcFNlY3Rpb248L2E+KSwgYW5kIDxjb2RlPi5wcmV2aW91czwvY29kZT4KKyhzZWUgPGEgaHJlZj0iUHJldmlvdXMuaHRtbCNQcmV2aW91cyI+UHJldmlvdXM8L2E+KS4KKworICAgPHA+VGhpcyBkaXJlY3RpdmUgcHVzaGVzIHRoZSBjdXJyZW50IHNlY3Rpb24gKGFuZCBzdWJzZWN0aW9uKSBvbnRvIHRoZQordG9wIG9mIHRoZSBzZWN0aW9uIHN0YWNrLCBhbmQgdGhlbiByZXBsYWNlcyB0aGUgY3VycmVudCBzZWN0aW9uIGFuZAorc3Vic2VjdGlvbiB3aXRoIDxjb2RlPm5hbWU8L2NvZGU+IGFuZCA8Y29kZT5zdWJzZWN0aW9uPC9jb2RlPi4gVGhlIG9wdGlvbmFsCis8Y29kZT5mbGFnczwvY29kZT4sIDxjb2RlPnR5cGU8L2NvZGU+IGFuZCA8Y29kZT5hcmd1bWVudHM8L2NvZGU+IGFyZSB0cmVhdGVkIHRoZSBzYW1lCithcyBpbiB0aGUgPGNvZGU+LnNlY3Rpb248L2NvZGU+IChzZWUgPGEgaHJlZj0iU2VjdGlvbi5odG1sI1NlY3Rpb24iPlNlY3Rpb248L2E+KSBkaXJlY3RpdmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1F1YWQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1F1YWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGY4ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUXVhZC5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlF1YWQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlB1c2hTZWN0aW9uLmh0bWwjUHVzaFNlY3Rpb24iIHRpdGxlPSJQdXNoU2VjdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJlbG9jLmh0bWwjUmVsb2MiIHRpdGxlPSJSZWxvYyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlF1YWQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUmVsb2MuaHRtbCNSZWxvYyI+UmVsb2M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQdXNoU2VjdGlvbi5odG1sI1B1c2hTZWN0aW9uIj5QdXNoU2VjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny45NCA8Y29kZT4ucXVhZCA8L2NvZGU+PHZhcj5iaWdudW1zPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JxdWFkXzAwN2QtZGlyZWN0aXZlLTQzOCI+PC9hPjxjb2RlPi5xdWFkPC9jb2RlPiBleHBlY3RzIHplcm8gb3IgbW9yZSBiaWdudW1zLCBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgRm9yCitlYWNoIGJpZ251bSwgaXQgZW1pdHMKK2FuIDgtYnl0ZSBpbnRlZ2VyLiAgSWYgdGhlIGJpZ251bSB3b24ndCBmaXQgaW4gOCBieXRlcywgaXQgcHJpbnRzIGEKK3dhcm5pbmcgbWVzc2FnZTsgYW5kIGp1c3QgdGFrZXMgdGhlIGxvd2VzdCBvcmRlciA4IGJ5dGVzIG9mIHRoZSBiaWdudW0uIAorPGEgbmFtZT0iaW5kZXgtZWlnaHRfMDAyZGJ5dGUtaW50ZWdlci00MzkiPjwvYT48YSBuYW1lPSJpbmRleC1pbnRlZ2VyXzAwMmMtOF8wMDJkYnl0ZS00NDAiPjwvYT4KK1RoZSB0ZXJtICZsZHF1bztxdWFkJnJkcXVvOyBjb21lcyBmcm9tIGNvbnRleHRzIGluIHdoaWNoIGEgJmxkcXVvO3dvcmQmcmRxdW87IGlzIHR3byBieXRlczsKK2hlbmNlIDxlbT5xdWFkPC9lbT4td29yZCBmb3IgOCBieXRlcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDJhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UiAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iby5odG1sI28iIHRpdGxlPSJvIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MiIHRpdGxlPSJzdGF0aXN0aWNzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcyI+c3RhdGlzdGljczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im8uaHRtbCNvIj5vPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjEyIEpvaW4gRGF0YSBhbmQgVGV4dCBTZWN0aW9uczogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVI8L3NwYW4+PC9zYW1wPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkUi04NyI+PC9hPjxhIG5hbWU9ImluZGV4LWRhdGEtYW5kLXRleHQtc2VjdGlvbnNfMDAyYy1qb2luaW5nLTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtdGV4dC1hbmQtZGF0YS1zZWN0aW9uc18wMDJjLWpvaW5pbmctODkiPjwvYT48YSBuYW1lPSJpbmRleC1qb2luaW5nLXRleHQtYW5kLWRhdGEtc2VjdGlvbnMtOTAiPjwvYT48YSBuYW1lPSJpbmRleC1tZXJnaW5nLXRleHQtYW5kLWRhdGEtc2VjdGlvbnMtOTEiPjwvYT48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUjwvc3Bhbj48L3NhbXA+IHRlbGxzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRvIHdyaXRlIHRoZSBvYmplY3QgZmlsZSBhcyBpZiBhbGwKK2RhdGEtc2VjdGlvbiBkYXRhIGxpdmVzIGluIHRoZSB0ZXh0IHNlY3Rpb24uICBUaGlzIGlzIG9ubHkgZG9uZSBhdAordGhlIHZlcnkgbGFzdCBtb21lbnQ6ICB5b3VyIGJpbmFyeSBkYXRhIGFyZSB0aGUgc2FtZSwgYnV0IGRhdGEKK3NlY3Rpb24gcGFydHMgYXJlIHJlbG9jYXRlZCBkaWZmZXJlbnRseS4gIFRoZSBkYXRhIHNlY3Rpb24gcGFydCBvZgoreW91ciBvYmplY3QgZmlsZSBpcyB6ZXJvIGJ5dGVzIGxvbmcgYmVjYXVzZSBhbGwgaXRzIGJ5dGVzIGFyZQorYXBwZW5kZWQgdG8gdGhlIHRleHQgc2VjdGlvbi4gIChTZWUgPGEgaHJlZj0iU2VjdGlvbnMuaHRtbCNTZWN0aW9ucyI+U2VjdGlvbnMgYW5kIFJlbG9jYXRpb248L2E+LikKKworICAgPHA+V2hlbiB5b3Ugc3BlY2lmeSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUjwvc3Bhbj48L3NhbXA+IGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGdlbmVyYXRlIHNob3J0ZXIKK2FkZHJlc3MgZGlzcGxhY2VtZW50cyAoYmVjYXVzZSB3ZSBkbyBub3QgaGF2ZSB0byBjcm9zcyBiZXR3ZWVuIHRleHQgYW5kCitkYXRhIHNlY3Rpb24pLiAgV2UgcmVmcmFpbiBmcm9tIGRvaW5nIHRoaXMgc2ltcGx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGgKK29sZGVyIHZlcnNpb25zIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+LiAgSW4gZnV0dXJlLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUjwvc3Bhbj48L3NhbXA+IG1heSB3b3JrIHRoaXMgd2F5LgorCisgICA8cD5XaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGlzIGNvbmZpZ3VyZWQgZm9yIENPRkYgb3IgRUxGIG91dHB1dCwKK3RoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGlmIHlvdSB1c2Ugc2VjdGlvbnMgbmFtZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1SPC9zcGFuPjwvc2FtcD4gaXMgbm90IHN1cHBvcnRlZCBmb3IgYW55IG9mIHRoZSBIUFBBIHRhcmdldHMuICBVc2luZworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVI8L3NwYW4+PC9zYW1wPiBnZW5lcmF0ZXMgYSB3YXJuaW5nIGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JMNzhfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9STDc4XzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzBiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9STDc4XzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJMNzgtQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJMNzhfMDAyZFN5bnRheC5odG1sI1JMNzhfMDAyZFN5bnRheCIgdGl0bGU9IlJMNzgtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUkw3OC1DaGFycyI+PC9hPgorPGEgbmFtZT0iUkw3OF8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSTDc4XzAwMmRTeW50YXguaHRtbCNSTDc4XzAwMmRTeW50YXgiPlJMNzgtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zMy40LjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVJMNzgtMTY0MCI+PC9hPjxhIG5hbWU9ImluZGV4LVJMNzgtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNjQxIj48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj47PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcmluZyBhbnl3aGVyZSBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZQorc3RhcnQgb2YgYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoYXQgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSB0aGVuIHRoZSB3aG9sZQorbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjYW4gYWxzbyBiZSBhCitsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtUkw3OC0xNjQyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVJMNzgtMTY0MyI+PC9hPjxhIG5hbWU9ImluZGV4LVJMNzgtbGluZS1zZXBhcmF0b3ItMTY0NCI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUKK2xpbmUuCisKKzwhLS0gQ29weXJpZ2h0IDIwMDgsIDIwMDksIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUkw3OF8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9STDc4XzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDFlNGFhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUkw3OF8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Ukw3OC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBQQ18wMDJkRGVwZW5kZW50Lmh0bWwjUFBDXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJQUEMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI1JYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJSWC1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSTDc4LURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iUkw3OF8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJYXzAwMmREZXBlbmRlbnQuaHRtbCNSWF8wMDJkRGVwZW5kZW50Ij5SWC1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQUENfMDAyZERlcGVuZGVudC5odG1sI1BQQ18wMDJkRGVwZW5kZW50Ij5QUEMtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjMzIFJMNzggRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtUkw3OC1zdXBwb3J0LTE2MzMiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlJMNzhfMDAyZE9wdHMuaHRtbCNSTDc4XzAwMmRPcHRzIj5STDc4LU9wdHM8L2E+OiAgICAgICAgICAgICAgICAgICAgUkw3OCBBc3NlbWJsZXIgQ29tbWFuZCBMaW5lIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlJMNzhfMDAyZE1vZGlmaWVycy5odG1sI1JMNzhfMDAyZE1vZGlmaWVycyI+Ukw3OC1Nb2RpZmllcnM8L2E+OiAgICAgICAgICAgICAgIFN5bWJvbGljIE9wZXJhbmQgTW9kaWZpZXJzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJSTDc4XzAwMmREaXJlY3RpdmVzLmh0bWwjUkw3OF8wMDJkRGlyZWN0aXZlcyI+Ukw3OC1EaXJlY3RpdmVzPC9hPjogICAgICAgICAgICAgIEFzc2VtYmxlciBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJSTDc4XzAwMmRTeW50YXguaHRtbCNSTDc4XzAwMmRTeW50YXgiPlJMNzgtU3ludGF4PC9hPjogICAgICAgICAgICAgICAgICBTeW50YXgKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JMNzhfMDAyZERpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JMNzhfMDAyZERpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGMxNGRiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUkw3OF8wMDJkRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJMNzgtRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUkw3OF8wMDJkRGVwZW5kZW50Lmh0bWwjUkw3OF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iUkw3OC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSTDc4XzAwMmRNb2RpZmllcnMuaHRtbCNSTDc4XzAwMmRNb2RpZmllcnMiIHRpdGxlPSJSTDc4LU1vZGlmaWVycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJMNzhfMDAyZFN5bnRheC5odG1sI1JMNzhfMDAyZFN5bnRheCIgdGl0bGU9IlJMNzgtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUkw3OC1EaXJlY3RpdmVzIj48L2E+Cis8YSBuYW1lPSJSTDc4XzAwMmREaXJlY3RpdmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJMNzhfMDAyZFN5bnRheC5odG1sI1JMNzhfMDAyZFN5bnRheCI+Ukw3OC1TeW50YXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSTDc4XzAwMmRNb2RpZmllcnMuaHRtbCNSTDc4XzAwMmRNb2RpZmllcnMiPlJMNzgtTW9kaWZpZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUkw3OF8wMDJkRGVwZW5kZW50Lmh0bWwjUkw3OF8wMDJkRGVwZW5kZW50Ij5STDc4LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzMuMyBBc3NlbWJsZXIgRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmVzXzAwMmMtUkw3OC0xNjM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtUkw3OC1hc3NlbWJsZXItZGlyZWN0aXZlcy0xNjM5Ij48L2E+CitJbiBhZGRpdGlvbiB0byB0aGUgY29tbW9uIGRpcmVjdGl2ZXMsIHRoZSBSTDc4IGFkZHMgdGhlc2U6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi5kb3VibGU8L2NvZGU+PGRkPk91dHB1dCBhIGNvbnN0YW50IGluICZsZHF1bztkb3VibGUmcmRxdW87IGZvcm1hdCwgd2hpY2ggaXMgYSAzMi1iaXQgZmxvYXRpbmcKK3BvaW50IHZhbHVlIG9uIFJMNzguCisKKyAgICAgPGJyPjxkdD48Y29kZT4uYnNzPC9jb2RlPjxkZD5TZWxlY3QgdGhlIEJTUyBzZWN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LjNieXRlPC9jb2RlPjxkZD5PdXRwdXQgYSBjb25zdGFudCB2YWx1ZSBpbiBhIHRocmVlIGJ5dGUgZm9ybWF0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmludDwvY29kZT48ZHQ+PGNvZGU+LndvcmQ8L2NvZGU+PGRkPk91dHB1dCBhIGNvbnN0YW50IHZhbHVlIGluIGEgZm91ciBieXRlIGZvcm1hdC4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUkw3OF8wMDJkTW9kaWZpZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9STDc4XzAwMmRNb2RpZmllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDU5YTBkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUkw3OF8wMDJkTW9kaWZpZXJzLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Ukw3OC1Nb2RpZmllcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJMNzhfMDAyZERlcGVuZGVudC5odG1sI1JMNzhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlJMNzgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUkw3OF8wMDJkT3B0cy5odG1sI1JMNzhfMDAyZE9wdHMiIHRpdGxlPSJSTDc4LU9wdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSTDc4XzAwMmREaXJlY3RpdmVzLmh0bWwjUkw3OF8wMDJkRGlyZWN0aXZlcyIgdGl0bGU9IlJMNzgtRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJMNzgtTW9kaWZpZXJzIj48L2E+Cis8YSBuYW1lPSJSTDc4XzAwMmRNb2RpZmllcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUkw3OF8wMDJkRGlyZWN0aXZlcy5odG1sI1JMNzhfMDAyZERpcmVjdGl2ZXMiPlJMNzgtRGlyZWN0aXZlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJMNzhfMDAyZE9wdHMuaHRtbCNSTDc4XzAwMmRPcHRzIj5STDc4LU9wdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSTDc4XzAwMmREZXBlbmRlbnQuaHRtbCNSTDc4XzAwMmREZXBlbmRlbnQiPlJMNzgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zMy4yIFN5bWJvbGljIE9wZXJhbmQgTW9kaWZpZXJzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtUkw3OC1tb2RpZmllcnMtMTYzNiI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bnRheF8wMDJjLVJMNzgtMTYzNyI+PC9hPgorVGhlIFJMNzggaGFzIHRocmVlIG1vZGlmaWVycyB0aGF0IGFkanVzdCB0aGUgcmVsb2NhdGlvbnMgdXNlZCBieSB0aGUKK2xpbmtlcjoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JWxvMTYoKTwvY29kZT48ZGQ+CitXaGVuIGxvYWRpbmcgYSAyMC1iaXQgKG9yIHdpZGVyKSBhZGRyZXNzIGludG8gcmVnaXN0ZXJzLCB0aGlzIG1vZGlmaWVyCitzZWxlY3RzIHRoZSAxNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgbW92dyBheCwjJWxvMTYoX3N5bSkKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPiVoaTE2KCk8L2NvZGU+PGRkPgorV2hlbiBsb2FkaW5nIGEgMjAtYml0IChvciB3aWRlcikgYWRkcmVzcyBpbnRvIHJlZ2lzdGVycywgdGhpcyBtb2RpZmllcgorc2VsZWN0cyB0aGUgMTYgbW9zdCBzaWduaWZpY2FudCBiaXRzLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgbW92dyBheCwjJWhpMTYoX3N5bSkKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPiVoaTgoKTwvY29kZT48ZGQ+CitXaGVuIGxvYWRpbmcgYSAyMC1iaXQgKG9yIHdpZGVyKSBhZGRyZXNzIGludG8gcmVnaXN0ZXJzLCB0aGlzIG1vZGlmaWVyCitzZWxlY3RzIHRoZSA4IGJpdHMgdGhhdCB3b3VsZCBnbyBpbnRvIENTIG9yIEVTIChpLmUuIGJpdHMgMjMuLjE2KS4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIG1vdiBlcywgIyVoaTgoX3N5bSkKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9STDc4XzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9STDc4XzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkN2ZiOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JMNzhfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5STDc4LU9wdHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJMNzhfMDAyZERlcGVuZGVudC5odG1sI1JMNzhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlJMNzgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUkw3OF8wMDJkTW9kaWZpZXJzLmh0bWwjUkw3OF8wMDJkTW9kaWZpZXJzIiB0aXRsZT0iUkw3OC1Nb2RpZmllcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSTDc4LU9wdHMiPjwvYT4KKzxhIG5hbWU9IlJMNzhfMDAyZE9wdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUkw3OF8wMDJkTW9kaWZpZXJzLmh0bWwjUkw3OF8wMDJkTW9kaWZpZXJzIj5STDc4LU1vZGlmaWVyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJMNzhfMDAyZERlcGVuZGVudC5odG1sI1JMNzhfMDAyZERlcGVuZGVudCI+Ukw3OC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjMzLjEgUkw3OCBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLVJMNzgtMTYzNCI+PC9hPjxhIG5hbWU9ImluZGV4LVJMNzgtb3B0aW9ucy0xNjM1Ij48L2E+CitUaGUgUmVuZXNhcyBSTDc4IHBvcnQgb2YgPGNvZGU+YXM8L2NvZGU+IGhhcyBubyB0YXJnZXQtc3BlY2lmaWMKK29wdGlvbnMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JMNzhfMDAyZFN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUkw3OF8wMDJkU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1MmI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JMNzhfMDAyZFN5bnRheC5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJMNzgtU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSTDc4XzAwMmREZXBlbmRlbnQuaHRtbCNSTDc4XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJSTDc4LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJMNzhfMDAyZERpcmVjdGl2ZXMuaHRtbCNSTDc4XzAwMmREaXJlY3RpdmVzIiB0aXRsZT0iUkw3OC1EaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUkw3OC1TeW50YXgiPjwvYT4KKzxhIG5hbWU9IlJMNzhfMDAyZFN5bnRheCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJMNzhfMDAyZERpcmVjdGl2ZXMuaHRtbCNSTDc4XzAwMmREaXJlY3RpdmVzIj5STDc4LURpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSTDc4XzAwMmREZXBlbmRlbnQuaHRtbCNSTDc4XzAwMmREZXBlbmRlbnQiPlJMNzgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zMy40IFN5bnRheCBmb3IgdGhlIFJMNzg8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iUkw3OF8wMDJkQ2hhcnMuaHRtbCNSTDc4XzAwMmRDaGFycyI+Ukw3OC1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JYXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ZWQzMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JYXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJYLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSWF8wMDJkU3ludGF4Lmh0bWwjUlhfMDAyZFN5bnRheCIgdGl0bGU9IlJYLVN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJYLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJSWF8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSWF8wMDJkU3ludGF4Lmh0bWwjUlhfMDAyZFN5bnRheCI+UlgtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zNC41LjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVJYLTE2NzIiPjwvYT48YSBuYW1lPSJpbmRleC1SWC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE2NzMiPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFyaW5nIGFueXdoZXJlIG9uIGEgbGluZSBpbmRpY2F0ZXMgdGhlCitzdGFydCBvZiBhIGNvbW1lbnQgdGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhhdCBsaW5lLgorCisgICA8cD5JZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lIHRoZW4gdGhlIHdob2xlCitsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNhbiBhbHNvIGJlIGEKK2xvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1SWC0xNjc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVJYLTE2NzUiPjwvYT48YSBuYW1lPSJpbmRleC1SWC1saW5lLXNlcGFyYXRvci0xNjc2Ij48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ITwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGUgc3RhdGVtZW50cyBvbiB0aGUgc2FtZQorbGluZS4KKworPCEtLSBDb3B5cmlnaHQgMjAwOSwgMjAxMSAtLT4KKzwhLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SWF8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SWF8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkNWYwYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JYXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SWC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJMNzhfMDAyZERlcGVuZGVudC5odG1sI1JMNzhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlJMNzgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU18wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNTXzAwMmYzOTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IlMvMzkwLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJYLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iUlhfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5TLzM5MC1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSTDc4XzAwMmREZXBlbmRlbnQuaHRtbCNSTDc4XzAwMmREZXBlbmRlbnQiPlJMNzgtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjM0IFJYIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVJYLXN1cHBvcnQtMTY0NSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iUlhfMDAyZE9wdHMuaHRtbCNSWF8wMDJkT3B0cyI+UlgtT3B0czwvYT46ICAgICAgICAgICAgICAgICAgICBSWCBBc3NlbWJsZXIgQ29tbWFuZCBMaW5lIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlJYXzAwMmRNb2RpZmllcnMuaHRtbCNSWF8wMDJkTW9kaWZpZXJzIj5SWC1Nb2RpZmllcnM8L2E+OiAgICAgICAgICAgICAgIFN5bWJvbGljIE9wZXJhbmQgTW9kaWZpZXJzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJSWF8wMDJkRGlyZWN0aXZlcy5odG1sI1JYXzAwMmREaXJlY3RpdmVzIj5SWC1EaXJlY3RpdmVzPC9hPjogICAgICAgICAgICAgIEFzc2VtYmxlciBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJSWF8wMDJkRmxvYXQuaHRtbCNSWF8wMDJkRmxvYXQiPlJYLUZsb2F0PC9hPjogICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IlJYXzAwMmRTeW50YXguaHRtbCNSWF8wMDJkU3ludGF4Ij5SWC1TeW50YXg8L2E+OiAgICAgICAgICAgICAgICAgIFN5bnRheAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZERpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JYXzAwMmREaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1YWI1MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JYXzAwMmREaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UlgtRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI1JYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJSWC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSWF8wMDJkTW9kaWZpZXJzLmh0bWwjUlhfMDAyZE1vZGlmaWVycyIgdGl0bGU9IlJYLU1vZGlmaWVycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJYXzAwMmRGbG9hdC5odG1sI1JYXzAwMmRGbG9hdCIgdGl0bGU9IlJYLUZsb2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUlgtRGlyZWN0aXZlcyI+PC9hPgorPGEgbmFtZT0iUlhfMDAyZERpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUlhfMDAyZEZsb2F0Lmh0bWwjUlhfMDAyZEZsb2F0Ij5SWC1GbG9hdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJYXzAwMmRNb2RpZmllcnMuaHRtbCNSWF8wMDJkTW9kaWZpZXJzIj5SWC1Nb2RpZmllcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSWF8wMDJkRGVwZW5kZW50Lmh0bWwjUlhfMDAyZERlcGVuZGVudCI+UlgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zNC4zIEFzc2VtYmxlciBEaXJlY3RpdmVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLWRpcmVjdGl2ZXNfMDAyYy1SWC0xNjYyIj48L2E+PGEgbmFtZT0iaW5kZXgtUlgtYXNzZW1ibGVyLWRpcmVjdGl2ZXMtMTY2MyI+PC9hPgorVGhlIFJYIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IGhhcyB0aGUgZm9sbG93aW5nIHNwZWNpZmljCithc3NlbWJsZXIgZGlyZWN0aXZlczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LjNieXRlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlLV8wMDJlM2J5dGVfMDAyYy1SWC0xNjY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtUlgtYXNzZW1ibGVyLWRpcmVjdGl2ZS1fMDAyZTNieXRlLTE2NjUiPjwvYT5JbnNlcnRzIGEgMy1ieXRlIHZhbHVlIGludG8gdGhlIG91dHB1dCBmaWxlIGF0IHRoZSBjdXJyZW50IGxvY2F0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmZldGNoYWxpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVmZXRjaGFsaWduXzAwMmMtUlgtMTY2NiI+PC9hPjxhIG5hbWU9ImluZGV4LVJYLWFzc2VtYmxlci1kaXJlY3RpdmUtXzAwMmVmZXRjaGFsaWduLTE2NjciPjwvYT5JZiB0aGUgbmV4dCBvcGNvZGUgZm9sbG93aW5nIHRoaXMgZGlyZWN0aXZlIHNwYW5zIGEgZmV0Y2ggbGluZQorYm91bmRhcnkgKDggYnl0ZSBib3VuZGFyeSksIHRoZSBvcGNvZGUgaXMgYWxpZ25lZCB0byB0aGF0IGJvdW5kYXJ5LiAKK0lmIHRoZSBuZXh0IG9wY29kZSBkb2VzIG5vdCBzcGFuIGEgZmV0Y2ggbGluZSwgdGhpcyBkaXJlY3RpdmUgaGFzIG5vCitlZmZlY3QuICBOb3RlIHRoYXQgb25lIG9yIG1vcmUgbGFiZWxzIG1heSBiZSBiZXR3ZWVuIHRoaXMgZGlyZWN0aXZlCithbmQgdGhlIG9wY29kZTsgdGhvc2UgbGFiZWxzIGFyZSBhbGlnbmVkIGFzIHdlbGwuICBBbnkgaW5zZXJ0ZWQgYnl0ZXMKK2R1ZSB0byBhbGlnbm1lbnQgd2lsbCBmb3JtIGEgTk9QIG9wY29kZS4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZEZsb2F0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SWF8wMDJkRmxvYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjBjMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZEZsb2F0Lmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UlgtRmxvYXQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJYXzAwMmREZXBlbmRlbnQuaHRtbCNSWF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iUlgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUlhfMDAyZERpcmVjdGl2ZXMuaHRtbCNSWF8wMDJkRGlyZWN0aXZlcyIgdGl0bGU9IlJYLURpcmVjdGl2ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSWF8wMDJkU3ludGF4Lmh0bWwjUlhfMDAyZFN5bnRheCIgdGl0bGU9IlJYLVN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJYLUZsb2F0Ij48L2E+Cis8YSBuYW1lPSJSWF8wMDJkRmxvYXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUlhfMDAyZFN5bnRheC5odG1sI1JYXzAwMmRTeW50YXgiPlJYLVN5bnRheDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJYXzAwMmREaXJlY3RpdmVzLmh0bWwjUlhfMDAyZERpcmVjdGl2ZXMiPlJYLURpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSWF8wMDJkRGVwZW5kZW50Lmh0bWwjUlhfMDAyZERlcGVuZGVudCI+UlgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zNC40IEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1SWC0xNjY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtUlgtZmxvYXRpbmctcG9pbnQtMTY2OSI+PC9hPgorVGhlIGZsb2F0aW5nIHBvaW50IGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IGRpcmVjdGl2ZXMgYXJlIHRoZXNlLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbG9hdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVJYLTE2NzAiPjwvYT4KKzxkbD4KKzxkdD48Y29kZT4uZmxvYXQ8L2NvZGU+PGRkPjxjb2RlPlNpbmdsZTwvY29kZT4gcHJlY2lzaW9uICgzMi1iaXQpIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRvdWJsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVJYLTE2NzEiPjwvYT48YnI+PGR0Pjxjb2RlPi5kb3VibGU8L2NvZGU+PGRkPklmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTY0Yml0LWRvdWJsZXM8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZAordGhlbiB0aGVuIDxjb2RlPmRvdWJsZTwvY29kZT4gZGlyZWN0aXZlIGdlbmVyYXRlcyA8Y29kZT5kb3VibGU8L2NvZGU+IHByZWNpc2lvbgorKDY0LWJpdCkgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzLCBvdGhlcndpc2UgaXQgZ2VuZXJhdGVzCis8Y29kZT5zaW5nbGU8L2NvZGU+IHByZWNpc2lvbiAoMzItYml0KSBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuICBUbyBmb3JjZQordGhlIGdlbmVyYXRpb24gb2YgNjQtYml0IGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cyB1c2VkIHRoZSA8Y29kZT5kYy5kPC9jb2RlPgorZGlyZWN0aXZlIGluc3RlYWQuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JYXzAwMmRNb2RpZmllcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JYXzAwMmRNb2RpZmllcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2NjZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZE1vZGlmaWVycy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJYLU1vZGlmaWVycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI1JYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJSWC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSWF8wMDJkT3B0cy5odG1sI1JYXzAwMmRPcHRzIiB0aXRsZT0iUlgtT3B0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJYXzAwMmREaXJlY3RpdmVzLmh0bWwjUlhfMDAyZERpcmVjdGl2ZXMiIHRpdGxlPSJSWC1EaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUlgtTW9kaWZpZXJzIj48L2E+Cis8YSBuYW1lPSJSWF8wMDJkTW9kaWZpZXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJYXzAwMmREaXJlY3RpdmVzLmh0bWwjUlhfMDAyZERpcmVjdGl2ZXMiPlJYLURpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSWF8wMDJkT3B0cy5odG1sI1JYXzAwMmRPcHRzIj5SWC1PcHRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI1JYXzAwMmREZXBlbmRlbnQiPlJYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzQuMiBTeW1ib2xpYyBPcGVyYW5kIE1vZGlmaWVyczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJYLW1vZGlmaWVycy0xNjU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3ludGF4XzAwMmMtUlgtMTY1OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDI1Z3AtMTY1OSI+PC9hPgorVGhlIGFzc2VtYmxlciBzdXBwb3J0cyBvbmUgbW9kaWZpZXIgd2hlbiB1c2luZyBzeW1ib2wgYWRkcmVzc2VzCitpbiBSWCBpbnN0cnVjdGlvbiBvcGVyYW5kcy4gIFRoZSBnZW5lcmFsIHN5bnRheCBpcyB0aGUgZm9sbG93aW5nOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgJWdwKHN5bWJvbCkKKzwvcHJlPgorICAgPHA+VGhlIG1vZGlmaWVyIHJldHVybnMgdGhlIG9mZnNldCBmcm9tIHRoZSA8dmFyPl9fZ3A8L3Zhcj4gc3ltYm9sIHRvIHRoZQorc3BlY2lmaWVkIHN5bWJvbCBhcyBhIDE2LWJpdCB2YWx1ZS4gIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGlzIG9mZnNldAorc2hvdWxkIGJlIHVzZWQgaW4gYSByZWdpc3RlcitvZmZzZXQgbW92ZSBpbnN0cnVjdGlvbiB3aGVuIGdlbmVyYXRpbmcKK3JlZmVyZW5jZXMgdG8gc21hbGwgZGF0YS4gIEllLCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIG1vdi5XCSAlZ3AoX2ZvbylbJWdwcmVnXSwgcjEKKzwvcHJlPgorICAgPHA+VGhlIGFzc2VtYmxlciBhbHNvIHN1cHBvcnRzIHR3byBtZXRhIHJlZ2lzdGVyIG5hbWVzIHdoaWNoIGNhbiBiZSB1c2VkCit0byByZWZlciB0byByZWdpc3RlcnMgd2hvc2UgdmFsdWVzIG1heSBub3QgYmUga25vd24gdG8gdGhlCitwcm9ncmFtbWVyLiAgVGhlc2UgbWV0YSByZWdpc3RlciBuYW1lcyBhcmU6CisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDI1Z3ByZWdfMDA3ZC0xNjYwIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPiVncHJlZzwvY29kZT48ZGQ+VGhlIHNtYWxsIGRhdGEgYWRkcmVzcyByZWdpc3Rlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDI1cGlkcmVnXzAwN2QtMTY2MSI+PC9hPjxicj48ZHQ+PGNvZGU+JXBpZHJlZzwvY29kZT48ZGQ+VGhlIFBJRCBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIuCisKKyAgIDwvZGw+CisKKyAgIDxwPkJvdGggcmVnaXN0ZXJzIG5vcm1hbGx5IGhhdmUgdGhlIHZhbHVlIHIxMywgYnV0IHRoaXMgY2FuIGNoYW5nZSBpZgorc29tZSByZWdpc3RlcnMgaGF2ZSBiZWVuIHJlc2VydmVkIGZvciB1c2UgYnkgaW50ZXJydXB0IGhhbmRsZXJzIG9yIGlmCitib3RoIHRoZSBzbWFsbCBkYXRhIGxpbWl0IGFuZCBwb3NpdGlvbiBpbmRlcGVuZGVudCBkYXRhIGZlYXR1cmVzIGFyZQorYmVpbmcgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SWF8wMDJkT3B0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZE9wdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzI1MDE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UlgtT3B0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI1JYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJSWC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSWF8wMDJkTW9kaWZpZXJzLmh0bWwjUlhfMDAyZE1vZGlmaWVycyIgdGl0bGU9IlJYLU1vZGlmaWVycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJYLU9wdHMiPjwvYT4KKzxhIG5hbWU9IlJYXzAwMmRPcHRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJYXzAwMmRNb2RpZmllcnMuaHRtbCNSWF8wMDJkTW9kaWZpZXJzIj5SWC1Nb2RpZmllcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSWF8wMDJkRGVwZW5kZW50Lmh0bWwjUlhfMDAyZERlcGVuZGVudCI+UlgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zNC4xIFJYIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtUlgtMTY0NiI+PC9hPjxhIG5hbWU9ImluZGV4LVJYLW9wdGlvbnMtMTY0NyI+PC9hPgorVGhlIFJlbmVzYXMgUlggcG9ydCBvZiA8Y29kZT5hczwvY29kZT4gaGFzIGEgZmV3IHRhcmdldCBzcGVjZmljCitjb21tYW5kIGxpbmUgb3B0aW9uczoKKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtMzJiaXRfMDAyZGRvdWJsZXNfMDA3ZC0xNjQ4Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1tMzJiaXQtZG91YmxlczwvY29kZT48ZGQ+VGhpcyBvcHRpb24gY29udHJvbHMgdGhlIEFCSSBhbmQgaW5kaWNhdGVzIHRvIHVzZSBhIDMyLWJpdCBmbG9hdCBBQkkuIAorSXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgYXNzZW1ibGVkIGluc3RydWN0aW9ucywgYnV0IGl0IGRvZXMgaW5mbHVlbmNlCit0aGUgYmVoYXZpb3VyIG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kb3VibGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHNldWRvLW9wLiAKK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG02NGJpdF8wMDJkZG91Ymxlc18wMDdkLTE2NDkiPjwvYT48YnI+PGR0Pjxjb2RlPi1tNjRiaXQtZG91YmxlczwvY29kZT48ZGQ+VGhpcyBvcHRpb24gY29udHJvbHMgdGhlIEFCSSBhbmQgaW5kaWNhdGVzIHRvIHVzZSBhIDY0LWJpdCBmbG9hdCBBQkkuIAorSXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgYXNzZW1ibGVkIGluc3RydWN0aW9ucywgYnV0IGl0IGRvZXMgaW5mbHVlbmNlCit0aGUgYmVoYXZpb3VyIG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kb3VibGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHNldWRvLW9wLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtYmlnXzAwMmRlbmRpYW5fMDA3ZC0xNjUwIj48L2E+PGJyPjxkdD48Y29kZT4tbWJpZy1lbmRpYW48L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBBQkkgYW5kIGluZGljYXRlcyB0byB1c2UgYSBiaWctZW5kaWFuIGRhdGEKK0FCSS4gIEl0IGhhcyBubyBlZmZlY3Qgb24gdGhlIGFzc2VtYmxlZCBpbnN0cnVjdGlvbnMsIGJ1dCBpdCBkb2VzCitpbmZsdWVuY2UgdGhlIGJlaGF2aW91ciBvZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2hvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmh3b3JkPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5pbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi53b3JkPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5sb25nPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5xdWFkPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5vY3RhPC9zcGFuPjwvc2FtcD4mcnNxdW87IHBzZXVkby1vcHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1saXR0bGVfMDAyZGVuZGlhbl8wMDdkLTE2NTEiPjwvYT48YnI+PGR0Pjxjb2RlPi1tbGl0dGxlLWVuZGlhbjwvY29kZT48ZGQ+VGhpcyBvcHRpb24gY29udHJvbHMgdGhlIEFCSSBhbmQgaW5kaWNhdGVzIHRvIHVzZSBhIGxpdHRsZS1lbmRpYW4gZGF0YQorQUJJLiAgSXQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgYXNzZW1ibGVkIGluc3RydWN0aW9ucywgYnV0IGl0IGRvZXMKK2luZmx1ZW5jZSB0aGUgYmVoYXZpb3VyIG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zaG9ydDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaHdvcmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmludDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LndvcmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmxvbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnF1YWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lm9jdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHNldWRvLW9wcy4gCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtdXNlXzAwMmRjb252ZW50aW9uYWxfMDAyZHNlY3Rpb25fMDAyZG5hbWVzXzAwN2QtMTY1MiI+PC9hPjxicj48ZHQ+PGNvZGU+LW11c2UtY29udmVudGlvbmFsLXNlY3Rpb24tbmFtZXM8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBkZWZhdWx0IG5hbWVzIGdpdmVuIHRvIHRoZSBjb2RlICgudGV4dCksCitpbml0aWFsaXNlZCBkYXRhICguZGF0YSkgYW5kIHVuaW5pdGlhbGlzZWQgZGF0YSBzZWN0aW9ucyAoLmJzcykuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG11c2VfMDAyZHJlbmVzYXNfMDAyZHNlY3Rpb25fMDAyZG5hbWVzXzAwN2QtMTY1MyI+PC9hPjxicj48ZHQ+PGNvZGU+LW11c2UtcmVuZXNhcy1zZWN0aW9uLW5hbWVzPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBjb250cm9scyB0aGUgZGVmYXVsdCBuYW1lcyBnaXZlbiB0byB0aGUgY29kZSAoLlApLAoraW5pdGlhbGlzZWQgZGF0YSAoLkRfMSkgYW5kIHVuaW5pdGlhbGlzZWQgZGF0YSBzZWN0aW9ucyAoLkJfMSkuIAorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXNtYWxsXzAwMmRkYXRhXzAwMmRsaW1pdF8wMDdkLTE2NTQiPjwvYT48YnI+PGR0Pjxjb2RlPi1tc21hbGwtZGF0YS1saW1pdDwvY29kZT48ZGQ+VGhpcyBvcHRpb24gdGVsbHMgdGhlIGFzc2VtYmxlciB0aGF0IHRoZSBzbWFsbCBkYXRhIGxpbWl0IGZlYXR1cmUgb2YKK3RoZSBSWCBwb3J0IG9mIEdDQyBpcyBiZWluZyB1c2VkLiAgVGhpcyByZXN1bHRzIGluIHRoZSBhc3NlbWJsZXIKK2dlbmVyYXRpbmcgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBhIHN5bWJvbCBjYWxsZWQgPGNvZGU+X19ncDwvY29kZT4gZm9yCit1c2UgYnkgdGhlIHJlbG9jYXRpb25zIHRoYXQgYXJlIG5lZWRlZCB0byBzdXBwb3J0IHRoZSBzbWFsbCBkYXRhIGxpbWl0CitmZWF0dXJlLiAgIFRoaXMgb3B0aW9uIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgaXQgd291bGQgb3RoZXJ3aXNlCitwb2xsdXRlIHRoZSBzeW1ib2wgdGFibGUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1waWRfMDA3ZC0xNjU1Ij48L2E+PGJyPjxkdD48Y29kZT4tbXBpZDwvY29kZT48ZGQ+VGhpcyBvcHRpb24gdGVsbHMgdGhlIGFzc2VtYmxlciB0aGF0IHRoZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBkYXRhIG9mIHRoZQorUlggcG9ydCBvZiBHQ0MgaXMgYmVpbmcgdXNlZC4gIFRoaXMgcmVzdWx0cyBpbiB0aGUgYXNzZW1ibGVyCitnZW5lcmF0aW5nIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYSBzeW1ib2wgY2FsbGVkIDxjb2RlPl9fcGlkX2Jhc2U8L2NvZGU+LAorYW5kIGFsc28gc2V0dGluZyB0aGUgUlhfUElEIGZsYWcgYml0IGluIHRoZSBlX2ZsYWdzIGZpZWxkIG9mIHRoZSBFTEYKK2hlYWRlciBvZiB0aGUgb2JqZWN0IGZpbGUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1pbnRfMDAyZHJlZ2lzdGVyXzAwN2QtMTY1NiI+PC9hPjxicj48ZHQ+PGNvZGU+LW1pbnQtcmVnaXN0ZXI9PC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPlRoaXMgb3B0aW9uIHRlbGxzIHRoZSBhc3NlbWJsZXIgaG93IG1hbnkgcmVnaXN0ZXJzIGhhdmUgYmVlbiByZXNlcnZlZAorZm9yIHVzZSBieSBpbnRlcnJ1cHQgaGFuZGxlcnMuICBUaGlzIGlzIG5lZWRlZCBpbiBvcmRlciB0byBjb21wdXRlIHRoZQorY29ycmVjdCB2YWx1ZXMgZm9yIHRoZSA8Y29kZT4lZ3ByZWc8L2NvZGU+IGFuZCA8Y29kZT4lcGlkcmVnPC9jb2RlPiBtZXRhIHJlZ2lzdGVycy4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZFN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUlhfMDAyZFN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNWRlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SWF8wMDJkU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UlgtU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSWF8wMDJkRGVwZW5kZW50Lmh0bWwjUlhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlJYLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJYXzAwMmRGbG9hdC5odG1sI1JYXzAwMmRGbG9hdCIgdGl0bGU9IlJYLUZsb2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUlgtU3ludGF4Ij48L2E+Cis8YSBuYW1lPSJSWF8wMDJkU3ludGF4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUlhfMDAyZEZsb2F0Lmh0bWwjUlhfMDAyZEZsb2F0Ij5SWC1GbG9hdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJYXzAwMmREZXBlbmRlbnQuaHRtbCNSWF8wMDJkRGVwZW5kZW50Ij5SWC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM0LjUgU3ludGF4IGZvciB0aGUgUlg8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iUlhfMDAyZENoYXJzLmh0bWwjUlhfMDAyZENoYXJzIj5SWC1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JlbG9jLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SZWxvYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Mzc5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SZWxvYy5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJlbG9jIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJRdWFkLmh0bWwjUXVhZCIgdGl0bGU9IlF1YWQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSZXB0Lmh0bWwjUmVwdCIgdGl0bGU9IlJlcHQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSZWxvYyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSZXB0Lmh0bWwjUmVwdCI+UmVwdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlF1YWQuaHRtbCNRdWFkIj5RdWFkPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43Ljk1IDxjb2RlPi5yZWxvYyA8L2NvZGU+PHZhcj5vZmZzZXQ8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnJlbG9jX25hbWU8L3Zhcj48Y29kZT5bLCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+XTwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnJlbG9jXzAwN2QtZGlyZWN0aXZlLTQ0MSI+PC9hPkdlbmVyYXRlIGEgcmVsb2NhdGlvbiBhdCA8dmFyPm9mZnNldDwvdmFyPiBvZiB0eXBlIDx2YXI+cmVsb2NfbmFtZTwvdmFyPiB3aXRoIHZhbHVlCis8dmFyPmV4cHJlc3Npb248L3Zhcj4uICBJZiA8dmFyPm9mZnNldDwvdmFyPiBpcyBhIG51bWJlciwgdGhlIHJlbG9jYXRpb24gaXMgZ2VuZXJhdGVkIGluCit0aGUgY3VycmVudCBzZWN0aW9uLiAgSWYgPHZhcj5vZmZzZXQ8L3Zhcj4gaXMgYW4gZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIGEKK3N5bWJvbCBwbHVzIG9mZnNldCwgdGhlIHJlbG9jYXRpb24gaXMgZ2VuZXJhdGVkIGluIHRoZSBnaXZlbiBzeW1ib2wncyBzZWN0aW9uLiAKKzx2YXI+ZXhwcmVzc2lvbjwvdmFyPiwgaWYgcHJlc2VudCwgbXVzdCByZXNvbHZlIHRvIGEgc3ltYm9sIHBsdXMgYWRkZW5kIG9yIHRvIGFuCithYnNvbHV0ZSB2YWx1ZSwgYnV0IG5vdGUgdGhhdCBub3QgYWxsIHRhcmdldHMgc3VwcG9ydCBhbiBhZGRlbmQuICBlLmcuIEVMRiBSRUwKK3RhcmdldHMgc3VjaCBhcyBpMzg2IHN0b3JlIGFuIGFkZGVuZCBpbiB0aGUgc2VjdGlvbiBjb250ZW50cyByYXRoZXIgdGhhbiBpbiB0aGUKK3JlbG9jYXRpb24uICBUaGlzIGxvdyBsZXZlbCBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBhZGRlbmRzIHN0b3JlZCBpbiB0aGUKK3NlY3Rpb24uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1JlcG9ydGluZy1CdWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SZXBvcnRpbmctQnVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMmI2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SZXBvcnRpbmctQnVncy5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJlcG9ydGluZyBCdWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFja25vd2xlZGdlbWVudHMuaHRtbCNBY2tub3dsZWRnZW1lbnRzIiB0aXRsZT0iQWNrbm93bGVkZ2VtZW50cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJlcG9ydGluZy1CdWdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFja25vd2xlZGdlbWVudHMuaHRtbCNBY2tub3dsZWRnZW1lbnRzIj5BY2tub3dsZWRnZW1lbnRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MTAgUmVwb3J0aW5nIEJ1Z3M8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1idWdzLWluLWFzc2VtYmxlci0yMzMxIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVwb3J0aW5nLWJ1Z3MtaW4tYXNzZW1ibGVyLTIzMzIiPjwvYT4KK1lvdXIgYnVnIHJlcG9ydHMgcGxheSBhbiBlc3NlbnRpYWwgcm9sZSBpbiBtYWtpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gcmVsaWFibGUuCisKKyAgIDxwPlJlcG9ydGluZyBhIGJ1ZyBtYXkgaGVscCB5b3UgYnkgYnJpbmdpbmcgYSBzb2x1dGlvbiB0byB5b3VyIHByb2JsZW0sIG9yIGl0IG1heQorbm90LiAgQnV0IGluIGFueSBjYXNlIHRoZSBwcmluY2lwYWwgZnVuY3Rpb24gb2YgYSBidWcgcmVwb3J0IGlzIHRvIGhlbHAgdGhlCitlbnRpcmUgY29tbXVuaXR5IGJ5IG1ha2luZyB0aGUgbmV4dCB2ZXJzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHdvcmsgYmV0dGVyLiAKK0J1ZyByZXBvcnRzIGFyZSB5b3VyIGNvbnRyaWJ1dGlvbiB0byB0aGUgbWFpbnRlbmFuY2Ugb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPkluIG9yZGVyIGZvciBhIGJ1ZyByZXBvcnQgdG8gc2VydmUgaXRzIHB1cnBvc2UsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitpbmZvcm1hdGlvbiB0aGF0IGVuYWJsZXMgdXMgdG8gZml4IHRoZSBidWcuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT46ICAgICAgICAgICAgICAgICBIYXZlIHlvdSBmb3VuZCBhIGJ1Zz8gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjQnVnLVJlcG9ydGluZyI+QnVnIFJlcG9ydGluZzwvYT46ICAgICAgICAgICAgICAgIEhvdyB0byByZXBvcnQgYnVncworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUmVwdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvUmVwdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzQxZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9SZXB0Lmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UmVwdCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUmVsb2MuaHRtbCNSZWxvYyIgdGl0bGU9IlJlbG9jIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU2J0dGwuaHRtbCNTYnR0bCIgdGl0bGU9IlNidHRsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUmVwdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTYnR0bC5odG1sI1NidHRsIj5TYnR0bDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJlbG9jLmh0bWwjUmVsb2MiPlJlbG9jPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43Ljk2IDxjb2RlPi5yZXB0IDwvY29kZT48dmFyPmNvdW50PC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZXB0XzAwN2QtZGlyZWN0aXZlLTQ0MiI+PC9hPlJlcGVhdCB0aGUgc2VxdWVuY2Ugb2YgbGluZXMgYmV0d2VlbiB0aGUgPGNvZGU+LnJlcHQ8L2NvZGU+IGRpcmVjdGl2ZSBhbmQgdGhlIG5leHQKKzxjb2RlPi5lbmRyPC9jb2RlPiBkaXJlY3RpdmUgPHZhcj5jb3VudDwvdmFyPiB0aW1lcy4KKworICAgPHA+Rm9yIGV4YW1wbGUsIGFzc2VtYmxpbmcKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICAgIC5yZXB0ICAgMworICAgICAgICAgICAgIC5sb25nICAgMAorICAgICAgICAgICAgIC5lbmRyCis8L3ByZT4KKyAgIDxwPmlzIGVxdWl2YWxlbnQgdG8gYXNzZW1ibGluZworCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgLmxvbmcgICAwCisgICAgICAgICAgICAgLmxvbmcgICAwCisgICAgICAgICAgICAgLmxvbmcgICAwCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NDT1JFXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0NPUkVfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzNmNlZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NDT1JFXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNDT1JFLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTQ09SRV8wMDJkU3ludGF4Lmh0bWwjU0NPUkVfMDAyZFN5bnRheCIgdGl0bGU9IlNDT1JFLVN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNDT1JFLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJTQ09SRV8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTQ09SRV8wMDJkU3ludGF4Lmh0bWwjU0NPUkVfMDAyZFN5bnRheCI+U0NPUkUtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zNi4zLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVNDT1JFLTE3MjYiPjwvYT48YSBuYW1lPSJpbmRleC1TQ09SRS1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE3MjciPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFyaW5nIGFueXdoZXJlIG9uIGEgbGluZSBpbmRpY2F0ZXMgdGhlCitzdGFydCBvZiBhIGNvbW1lbnQgdGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhhdCBsaW5lLgorCisgICA8cD5JZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lIHRoZW4gdGhlIHdob2xlCitsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNhbiBhbHNvIGJlIGEKK2xvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1TQ09SRS0xNzI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVNDT1JFLTE3MjkiPjwvYT48YSBuYW1lPSJpbmRleC1TQ09SRS1saW5lLXNlcGFyYXRvci0xNzMwIj48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGUgc3RhdGVtZW50cyBvbiB0aGUgc2FtZQorbGluZS4KKworPCEtLSBDb3B5cmlnaHQgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NywgMjAwMSwgMjAwMywgMjAwNCwgLS0+Cis8IS0tIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTEsIDIwMTIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0NPUkVfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0NPUkVfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjE1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TQ09SRV8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0NPUkUtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iUy8zOTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI1NwYXJjXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTcGFyYy1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTQ09SRS1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IlNDT1JFXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI1NwYXJjXzAwMmREZXBlbmRlbnQiPlNwYXJjLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjU18wMDJmMzkwXzAwMmREZXBlbmRlbnQiPlMvMzkwLURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4zNiBTQ09SRSBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1TQ09SRS1wcm9jZXNzb3ItMTcxOSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU0NPUkVfMDAyZE9wdHMuaHRtbCNTQ09SRV8wMDJkT3B0cyI+U0NPUkUtT3B0czwvYT46ICAgIAlBc3NlbWJsZXIgb3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iU0NPUkVfMDAyZFBzZXVkby5odG1sI1NDT1JFXzAwMmRQc2V1ZG8iPlNDT1JFLVBzZXVkbzwvYT46ICAgICAgICAgU0NPUkUgQXNzZW1ibGVyIERpcmVjdGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlNDT1JFXzAwMmRTeW50YXguaHRtbCNTQ09SRV8wMDJkU3ludGF4Ij5TQ09SRS1TeW50YXg8L2E+OiAgICAgICAgIFN5bnRheAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0NPUkVfMDAyZE9wdHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NDT1JFXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3ODFkNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NDT1JFXzAwMmRPcHRzLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0NPUkUtT3B0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0NPUkVfMDAyZERlcGVuZGVudC5odG1sI1NDT1JFXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTQ09SRS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTQ09SRV8wMDJkUHNldWRvLmh0bWwjU0NPUkVfMDAyZFBzZXVkbyIgdGl0bGU9IlNDT1JFLVBzZXVkbyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNDT1JFLU9wdHMiPjwvYT4KKzxhIG5hbWU9IlNDT1JFXzAwMmRPcHRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNDT1JFXzAwMmRQc2V1ZG8uaHRtbCNTQ09SRV8wMDJkUHNldWRvIj5TQ09SRS1Qc2V1ZG88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTQ09SRV8wMDJkRGVwZW5kZW50Lmh0bWwjU0NPUkVfMDAyZERlcGVuZGVudCI+U0NPUkUtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zNi4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zLWZvci1TQ09SRS0xNzIwIj48L2E+PGEgbmFtZT0iaW5kZXgtU0NPUkUtb3B0aW9ucy0xNzIxIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJjaGl0ZWN0dXJlc18wMDJjLVNDT1JFLTE3MjIiPjwvYT48YSBuYW1lPSJpbmRleC1TQ09SRS1hcmNoaXRlY3R1cmVzLTE3MjMiPjwvYT4KK1RoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgYWxsIGF2YWlsYWJsZSBTQ09SRSBvcHRpb25zLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tRyA8L2NvZGU+PHZhcj5udW08L3Zhcj48ZGQ+VGhpcyBvcHRpb24gc2V0cyB0aGUgbGFyZ2VzdCBzaXplIG9mIGFuIG9iamVjdCB0aGF0IGNhbiBiZSByZWZlcmVuY2VkCitpbXBsaWNpdGx5IHdpdGggdGhlIDxjb2RlPmdwPC9jb2RlPiByZWdpc3Rlci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1FQjwvY29kZT48ZGQ+QXNzZW1ibGUgY29kZSBmb3IgYSBiaWctZW5kaWFuIGNwdQorCisgICAgIDxkdD48Y29kZT4tRUw8L2NvZGU+PGRkPkFzc2VtYmxlIGNvZGUgZm9yIGEgbGl0dGxlLWVuZGlhbiBjcHUKKworICAgICA8YnI+PGR0Pjxjb2RlPi1GSVhERDwvY29kZT48ZGQ+QXNzZW1ibGUgY29kZSBmb3IgZml4IGRhdGEgZGVwZW5kZW5jeQorCisgICAgIDxicj48ZHQ+PGNvZGU+LU5XQVJOPC9jb2RlPjxkZD5Bc3NlbWJsZSBjb2RlIGZvciBubyB3YXJuaW5nIG1lc3NhZ2UgZm9yIGZpeCBkYXRhIGRlcGVuZGVuY3kKKworICAgICA8YnI+PGR0Pjxjb2RlPi1TQ09SRTU8L2NvZGU+PGRkPkFzc2VtYmxlIGNvZGUgZm9yIHRhcmdldCBpcyBTQ09SRTUKKworICAgICA8ZHQ+PGNvZGU+LVNDT1JFNVU8L2NvZGU+PGRkPkFzc2VtYmxlIGNvZGUgZm9yIHRhcmdldCBpcyBTQ09SRTVVCisKKyAgICAgPGR0Pjxjb2RlPi1TQ09SRTc8L2NvZGU+PGRkPkFzc2VtYmxlIGNvZGUgZm9yIHRhcmdldCBpcyBTQ09SRTcsIHRoaXMgaXMgZGVmYXVsdCBzZXR0aW5nCisKKyAgICAgPGR0Pjxjb2RlPi1TQ09SRTM8L2NvZGU+PGRkPkFzc2VtYmxlIGNvZGUgZm9yIHRhcmdldCBpcyBTQ09SRTMKKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYXJjaD1zY29yZTc8L2NvZGU+PGRkPkFzc2VtYmxlIGNvZGUgZm9yIHRhcmdldCBpcyBTQ09SRTcsIHRoaXMgaXMgZGVmYXVsdCBzZXR0aW5nCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFyY2g9c2NvcmUzPC9jb2RlPjxkZD5Bc3NlbWJsZSBjb2RlIGZvciB0YXJnZXQgaXMgU0NPUkUzCisKKyAgICAgPGJyPjxkdD48Y29kZT4tVVNFX1IxPC9jb2RlPjxkZD5Bc3NlbWJsZSBjb2RlIGZvciBubyB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiB1c2luZyB0ZW1wIHJlZ2lzdGVyIHIxCisKKyAgICAgPGJyPjxkdD48Y29kZT4tS1BJQzwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgUElDLiAgVGhpcyBvcHRpb24gdGVsbHMgdGhlIGFzc2VtYmxlciB0byBnZW5lcmF0ZQorc2NvcmUgcG9zaXRpb24taW5kZXBlbmRlbnQgbWFjcm8gZXhwYW5zaW9ucy4gIEl0IGFsc28gdGVsbHMgdGhlCithc3NlbWJsZXIgdG8gbWFyayB0aGUgb3V0cHV0IGZpbGUgYXMgUElDLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU8wPC9jb2RlPjxkZD5Bc3NlbWJsZXIgd2lsbCBub3QgcGVyZm9ybSBhbnkgb3B0aW1pemF0aW9ucworCisgICAgIDxicj48ZHQ+PGNvZGU+LVY8L2NvZGU+PGRkPlN1bnBsdXMgcmVsZWFzZSB2ZXJzaW9uCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NDT1JFXzAwMmRQc2V1ZG8uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NDT1JFXzAwMmRQc2V1ZG8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2U3MmM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0NPUkVfMDAyZFBzZXVkby5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNDT1JFLVBzZXVkbyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0NPUkVfMDAyZERlcGVuZGVudC5odG1sI1NDT1JFXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTQ09SRS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTQ09SRV8wMDJkT3B0cy5odG1sI1NDT1JFXzAwMmRPcHRzIiB0aXRsZT0iU0NPUkUtT3B0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNDT1JFXzAwMmRTeW50YXguaHRtbCNTQ09SRV8wMDJkU3ludGF4IiB0aXRsZT0iU0NPUkUtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0NPUkUtUHNldWRvIj48L2E+Cis8YSBuYW1lPSJTQ09SRV8wMDJkUHNldWRvIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNDT1JFXzAwMmRTeW50YXguaHRtbCNTQ09SRV8wMDJkU3ludGF4Ij5TQ09SRS1TeW50YXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTQ09SRV8wMDJkT3B0cy5odG1sI1NDT1JFXzAwMmRPcHRzIj5TQ09SRS1PcHRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0NPUkVfMDAyZERlcGVuZGVudC5odG1sI1NDT1JFXzAwMmREZXBlbmRlbnQiPlNDT1JFLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzYuMiBTQ09SRSBBc3NlbWJsZXIgRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRpcmVjdGl2ZXMtZm9yLVNDT1JFLTE3MjQiPjwvYT48YSBuYW1lPSJpbmRleC1TQ09SRS1kaXJlY3RpdmVzLTE3MjUiPjwvYT5BIG51bWJlciBvZiBhc3NlbWJsZXIgZGlyZWN0aXZlcyBhcmUgYXZhaWxhYmxlIGZvciBTQ09SRS4gIFRoZQorZm9sbG93aW5nIHRhYmxlIGlzIGZhciBmcm9tIGNvbXBsZXRlLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4uc2V0IG53YXJuPC9jb2RlPjxkZD5MZXQgdGhlIGFzc2VtYmxlciBub3QgdG8gZ2VuZXJhdGUgd2FybmluZ3MgaWYgdGhlIHNvdXJjZSBtYWNoaW5lCitsYW5ndWFnZSBpbnN0cnVjdGlvbnMgaGFwcGVuIGRhdGEgZGVwZW5kZW5jeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5zZXQgZml4ZGQ8L2NvZGU+PGRkPkxldCB0aGUgYXNzZW1ibGVyIHRvIGluc2VydCBidWJibGVzICgzMiBiaXQgbm9wIGluc3RydWN0aW9uIC8KKzE2IGJpdCBub3AhIEluc3RydWN0aW9uKSBpZiB0aGUgc291cmNlIG1hY2hpbmUgbGFuZ3VhZ2UgaW5zdHJ1Y3Rpb25zCitoYXBwZW4gZGF0YSBkZXBlbmRlbmN5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LnNldCBub2ZpeGRkPC9jb2RlPjxkZD5MZXQgdGhlIGFzc2VtYmxlciB0byBnZW5lcmF0ZSB3YXJuaW5ncyBpZiB0aGUgc291cmNlIG1hY2hpbmUKK2xhbmd1YWdlIGluc3RydWN0aW9ucyBoYXBwZW4gZGF0YSBkZXBlbmRlbmN5LiAoRGVmYXVsdCkKKworICAgICA8YnI+PGR0Pjxjb2RlPi5zZXQgcjE8L2NvZGU+PGRkPkxldCB0aGUgYXNzZW1ibGVyIG5vdCB0byBnZW5lcmF0ZSB3YXJuaW5ncyBpZiB0aGUgc291cmNlIHByb2dyYW0KK3VzZXMgcjEuIGFsbG93IHVzZXIgdG8gdXNlIHIxCisKKyAgICAgPGJyPjxkdD48Y29kZT5zZXQgbm9yMTwvY29kZT48ZGQ+TGV0IHRoZSBhc3NlbWJsZXIgdG8gZ2VuZXJhdGUgd2FybmluZ3MgaWYgdGhlIHNvdXJjZSBwcm9ncmFtIHVzZXMKK3IxLiAoRGVmYXVsdCkKKworICAgICA8YnI+PGR0Pjxjb2RlPi5zZGF0YTwvY29kZT48ZGQ+VGVsbCB0aGUgYXNzZW1ibGVyIHRvIGFkZCBzdWJzZXF1ZW50IGRhdGEgaW50byB0aGUgc2RhdGEgc2VjdGlvbgorCisgICAgIDxicj48ZHQ+PGNvZGU+LnJkYXRhPC9jb2RlPjxkZD5UZWxsIHRoZSBhc3NlbWJsZXIgdG8gYWRkIHN1YnNlcXVlbnQgZGF0YSBpbnRvIHRoZSByZGF0YSBzZWN0aW9uCisKKyAgICAgPGJyPjxkdD48Y29kZT4uZnJhbWUgImZyYW1lLXJlZ2lzdGVyIiwgIm9mZnNldCIsICJyZXR1cm4tcGMtcmVnaXN0ZXIiPC9jb2RlPjxkZD5EZXNjcmliZSBhIHN0YWNrIGZyYW1lLiAiZnJhbWUtcmVnaXN0ZXIiIGlzIHRoZSBmcmFtZSByZWdpc3RlciwKKyJvZmZzZXQiIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBmcmFtZSByZWdpc3RlciB0byB0aGUgdmlydHVhbAorZnJhbWUgcG9pbnRlciwgInJldHVybi1wYy1yZWdpc3RlciIgaXMgdGhlIHJldHVybiBwcm9ncmFtIHJlZ2lzdGVyLiAKK1lvdSBtdXN0IHVzZSAiLmVudCIgYmVmb3JlICIuZnJhbWUiIGFuZCBvbmx5IG9uZSAiLmZyYW1lIiBjYW4gYmUKK3VzZWQgcGVyICIuZW50Ii4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5tYXNrICJiaXRtYXNrIiwgImZyYW1lb2Zmc2V0IjwvY29kZT48ZGQ+SW5kaWNhdGUgd2hpY2ggb2YgdGhlIGludGVnZXIgcmVnaXN0ZXJzIGFyZSBzYXZlZCBpbiB0aGUgY3VycmVudAorZnVuY3Rpb24ncyBzdGFjayBmcmFtZSwgdGhpcyBpcyBmb3IgdGhlIGRlYnVnZ2VyIHRvIGV4cGxhaW4gdGhlCitmcmFtZSBjaGFpbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5lbnQgInByb2MtbmFtZSI8L2NvZGU+PGRkPlNldCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcm9jZWR1cmUgInByb2NfbmFtZSIuIFVzZSB0aGlzIGRpcmVjdGl2ZQord2hlbiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGRlYnVnZ2VyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LmVuZCBwcm9jLW5hbWU8L2NvZGU+PGRkPlNldCB0aGUgZW5kIG9mIGEgcHJvY2VkdXJlLiBVc2UgdGhpcyBkaXJlY3RpdmUgdG8gZ2VuZXJhdGUgaW5mb3JtYXRpb24KK2ZvciB0aGUgZGVidWdnZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4uYnNzPC9jb2RlPjxkZD5Td2l0Y2ggdGhlIGRlc3RpbmF0aW9uIG9mIGZvbGxvd2luZyBzdGF0ZW1lbnRzIGludG8gdGhlIGJzcyBzZWN0aW9uLAord2hpY2ggaXMgdXNlZCBmb3IgZGF0YSB0aGF0IGlzIHVuaW5pdGlhbGl6ZWQgYW55d2hlcmUuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NDT1JFXzAwMmRTeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NDT1JFXzAwMmRTeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODA0MGRmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0NPUkVfMDAyZFN5bnRheC5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNDT1JFLVN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0NPUkVfMDAyZERlcGVuZGVudC5odG1sI1NDT1JFXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTQ09SRS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTQ09SRV8wMDJkUHNldWRvLmh0bWwjU0NPUkVfMDAyZFBzZXVkbyIgdGl0bGU9IlNDT1JFLVBzZXVkbyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNDT1JFLVN5bnRheCI+PC9hPgorPGEgbmFtZT0iU0NPUkVfMDAyZFN5bnRheCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNDT1JFXzAwMmRQc2V1ZG8uaHRtbCNTQ09SRV8wMDJkUHNldWRvIj5TQ09SRS1Qc2V1ZG88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTQ09SRV8wMDJkRGVwZW5kZW50Lmh0bWwjU0NPUkVfMDAyZERlcGVuZGVudCI+U0NPUkUtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zNi4zIFNDT1JFIFN5bnRheDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJTQ09SRV8wMDJkQ2hhcnMuaHRtbCNTQ09SRV8wMDJkQ2hhcnMiPlNDT1JFLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0gtRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0gtRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTEwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSC1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0ggRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0hfMDAyZERlcGVuZGVudC5odG1sI1NIXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTSC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSC1GbG9hdGluZy1Qb2ludC5odG1sI1NILUZsb2F0aW5nLVBvaW50IiB0aXRsZT0iU0ggRmxvYXRpbmcgUG9pbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSC1PcGNvZGVzLmh0bWwjU0gtT3Bjb2RlcyIgdGl0bGU9IlNIIE9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSC1EaXJlY3RpdmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNILU9wY29kZXMuaHRtbCNTSC1PcGNvZGVzIj5TSCBPcGNvZGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0gtRmxvYXRpbmctUG9pbnQuaHRtbCNTSC1GbG9hdGluZy1Qb2ludCI+U0ggRmxvYXRpbmcgUG9pbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTSF8wMDJkRGVwZW5kZW50Lmh0bWwjU0hfMDAyZERlcGVuZGVudCI+U0gtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zNy40IFNIIE1hY2hpbmUgRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNILW1hY2hpbmUtZGlyZWN0aXZlcy0xNzU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtU0gtMTc1NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidWF3b3JkXzAwN2QtZGlyZWN0aXZlXzAwMmMtU0gtMTc1NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidWFsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtU0gtMTc1OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidWFxdWFkXzAwN2QtZGlyZWN0aXZlXzAwMmMtU0gtMTc1OSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+dWF3b3JkPC9jb2RlPjxkdD48Y29kZT51YWxvbmc8L2NvZGU+PGR0Pjxjb2RlPnVhcXVhZDwvY29kZT48ZGQ+PGNvZGU+YXM8L2NvZGU+IHdpbGwgaXNzdWUgYSB3YXJuaW5nIHdoZW4gYSBtaXNhbGlnbmVkIDxjb2RlPi53b3JkPC9jb2RlPiwKKzxjb2RlPi5sb25nPC9jb2RlPiwgb3IgPGNvZGU+LnF1YWQ8L2NvZGU+IGRpcmVjdGl2ZSBpcyB1c2VkLiAgWW91IG1heSB1c2UKKzxjb2RlPi51YXdvcmQ8L2NvZGU+LCA8Y29kZT4udWFsb25nPC9jb2RlPiwgb3IgPGNvZGU+LnVhcXVhZDwvY29kZT4gdG8gaW5kaWNhdGUgdGhhdCB0aGUKK3ZhbHVlIGlzIGludGVudGlvbmFsbHkgbWlzYWxpZ25lZC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSC1GbG9hdGluZy1Qb2ludC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0gtRmxvYXRpbmctUG9pbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJlMzI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0gtRmxvYXRpbmctUG9pbnQuaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TSCBGbG9hdGluZyBQb2ludCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0hfMDAyZERlcGVuZGVudC5odG1sI1NIXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTSC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSC1TeW50YXguaHRtbCNTSC1TeW50YXgiIHRpdGxlPSJTSCBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSC1EaXJlY3RpdmVzLmh0bWwjU0gtRGlyZWN0aXZlcyIgdGl0bGU9IlNIIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSC1GbG9hdGluZy1Qb2ludCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSC1EaXJlY3RpdmVzLmh0bWwjU0gtRGlyZWN0aXZlcyI+U0ggRGlyZWN0aXZlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNILVN5bnRheC5odG1sI1NILVN5bnRheCI+U0ggU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0hfMDAyZERlcGVuZGVudC5odG1sI1NIXzAwMmREZXBlbmRlbnQiPlNILURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzcuMyBGbG9hdGluZyBQb2ludDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtU0gtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0xNzUzIj48L2E+PGEgbmFtZT0iaW5kZXgtU0gtZmxvYXRpbmctcG9pbnQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0xNzU0Ij48L2E+U0gyRSwgU0gzRSBhbmQgU0g0IGdyb3VwcyBoYXZlIG9uLWNoaXAgZmxvYXRpbmctcG9pbnQgdW5pdCAoRlBVKS4gT3RoZXIKK1NIIGdyb3VwcyBjYW4gdXNlIDxjb2RlPi5mbG9hdDwvY29kZT4gZGlyZWN0aXZlIHRvIGdlbmVyYXRlIDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4KK2Zsb2F0aW5nLXBvaW50IG51bWJlcnMuCisKKyAgIDxwPlNIMkUgYW5kIFNIM0Ugc3VwcG9ydCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IGNhbGN1bGF0aW9ucyBhcword2VsbCBhcyBlbnRpcmVseSBQQ0FQSSBjb21wYXRpYmxlIGVtdWxhdGlvbiBvZiBkb3VibGUtcHJlY2lzaW9uCitmbG9hdGluZyBwb2ludCBjYWxjdWxhdGlvbnMuIFNIMkUgYW5kIFNIM0UgaW5zdHJ1Y3Rpb25zIGFyZSBhIHN1YnNldCBvZgordGhlIGZsb2F0aW5nIHBvaW50IGNhbGN1bGF0aW9ucyBjb25mb3JtaW5nIHRvIHRoZSBJRUVFNzU0IHN0YW5kYXJkLgorCisgICA8cD5JbiBhZGRpdGlvbiB0byBzaW5nbGUtcHJlY2lzaW9uIGFuZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50CitvcGVyYXRpb24gY2FwYWJpbGl0eSwgdGhlIG9uLWNoaXAgRlBVIG9mIFNINCBoYXMgYSAxMjgtYml0IGdyYXBoaWMKK2VuZ2luZSB0aGF0IGVuYWJsZXMgMzItYml0IGZsb2F0aW5nLXBvaW50IGRhdGEgdG8gYmUgcHJvY2Vzc2VkIDEyOAorYml0cyBhdCBhIHRpbWUuIEl0IGFsc28gc3VwcG9ydHMgNCAqIDQgYXJyYXkgb3BlcmF0aW9ucyBhbmQgaW5uZXIKK3Byb2R1Y3Qgb3BlcmF0aW9ucy4gQWxzbywgYSBzdXBlcnNjYWxhciBhcmNoaXRlY3R1cmUgaXMgZW1wbG95ZWQgdGhhdAorZW5hYmxlcyBzaW11bHRhbmVvdXMgZXhlY3V0aW9uIG9mIHR3byBpbnN0cnVjdGlvbnMgKGluY2x1ZGluZyBGUFUKK2luc3RydWN0aW9ucyksIHByb3ZpZGluZyBwZXJmb3JtYW5jZSBvZiB1cCB0byB0d2ljZSB0aGF0IG9mCitjb252ZW50aW9uYWwgYXJjaGl0ZWN0dXJlcyBhdCB0aGUgc2FtZSBmcmVxdWVuY3kuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NILU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NILU9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjA1YmYyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0gtT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNIIE9wY29kZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNIXzAwMmREZXBlbmRlbnQuaHRtbCNTSF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iU0gtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU0gtRGlyZWN0aXZlcy5odG1sI1NILURpcmVjdGl2ZXMiIHRpdGxlPSJTSCBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0gtT3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNILURpcmVjdGl2ZXMuaHRtbCNTSC1EaXJlY3RpdmVzIj5TSCBEaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0hfMDAyZERlcGVuZGVudC5odG1sI1NIXzAwMmREZXBlbmRlbnQiPlNILURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzcuNSBPcGNvZGVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0gtb3Bjb2RlLXN1bW1hcnktMTc2MCI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZS1zdW1tYXJ5XzAwMmMtU0gtMTc2MSI+PC9hPjxhIG5hbWU9ImluZGV4LW1uZW1vbmljc18wMDJjLVNILTE3NjIiPjwvYT48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1zdW1tYXJ5XzAwMmMtU0gtMTc2MyI+PC9hPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgU0ggbWFjaGluZSBpbnN0cnVjdGlvbiBzZXQsIHNlZQorPGNpdGU+U0gtTWljcm9jb21wdXRlciBVc2VyJ3MgTWFudWFsPC9jaXRlPiAoUmVuZXNhcykgb3IKKzxjaXRlPlNILTQgMzItYml0IENQVSBDb3JlIEFyY2hpdGVjdHVyZTwvY2l0ZT4gKFN1cGVySCkgYW5kCis8Y2l0ZT5TdXBlckggKFNIKSA2NC1CaXQgUklTQyBTZXJpZXM8L2NpdGU+IChTdXBlckgpLgorCisgICA8cD48Y29kZT5hczwvY29kZT4gaW1wbGVtZW50cyBhbGwgdGhlIHN0YW5kYXJkIFNIIG9wY29kZXMuICBObyBhZGRpdGlvbmFsCitwc2V1ZG8taW5zdHJ1Y3Rpb25zIGFyZSBuZWVkZWQgb24gdGhpcyBmYW1pbHkuICBOb3RlLCBob3dldmVyLCB0aGF0CitiZWNhdXNlIDxjb2RlPmFzPC9jb2RlPiBzdXBwb3J0cyBhIHNpbXBsZXIgZm9ybSBvZiBQQy1yZWxhdGl2ZQorYWRkcmVzc2luZywgeW91IG1heSBzaW1wbHkgd3JpdGUgKGZvciBleGFtcGxlKQorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIG1vdi5sICBiYXIscjAKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aGVyZSBvdGhlciBhc3NlbWJsZXJzIG1pZ2h0IHJlcXVpcmUgYW4gZXhwbGljaXQgZGlzcGxhY2VtZW50IHRvCis8Y29kZT5iYXI8L2NvZGU+IGZyb20gdGhlIHByb2dyYW0gY291bnRlcjoKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBtb3YubCAgQCg8dmFyPmRpc3A8L3Zhcj4sIFBDKQorPC9wcmU+CisgICA8IS0tIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwOCwgMjAxMSwgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NILU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NILU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmUzNzkzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0gtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNIIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNIXzAwMmREZXBlbmRlbnQuaHRtbCNTSF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iU0gtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0gtU3ludGF4Lmh0bWwjU0gtU3ludGF4IiB0aXRsZT0iU0ggU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0gtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSC1TeW50YXguaHRtbCNTSC1TeW50YXgiPlNIIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNIXzAwMmREZXBlbmRlbnQuaHRtbCNTSF8wMDJkRGVwZW5kZW50Ij5TSC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM3LjEgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNILW9wdGlvbnMtMTczMiI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1TSC0xNzMzIj48L2E+PGNvZGU+YXM8L2NvZGU+IGhhcyBmb2xsb3dpbmcgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIHRoZSBSZW5lc2FzCisoZm9ybWVybHkgSGl0YWNoaSkgLyBTdXBlckggU0ggZmFtaWx5LgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGxpdHRsZS0xNzM0Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkYmlnLTE3MzUiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRyZWxheC0xNzM2Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkc21hbGwtMTczNyI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGRzcC0xNzM4Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkcmVuZXNhcy0xNzM5Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkYWxsb3dfMDAyZHJlZ18wMDJkcHJlZml4LTE3NDAiPjwvYT4KKzxkbD4KKzxkdD48Y29kZT4tLWxpdHRsZTwvY29kZT48ZGQ+R2VuZXJhdGUgbGl0dGxlIGVuZGlhbiBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1iaWc8L2NvZGU+PGRkPkdlbmVyYXRlIGJpZyBlbmRpYW4gY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tcmVsYXg8L2NvZGU+PGRkPkFsdGVyIGp1bXAgaW5zdHJ1Y3Rpb25zIGZvciBsb25nIGRpc3BsYWNlbWVudHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXNtYWxsPC9jb2RlPjxkZD5BbGlnbiBzZWN0aW9ucyB0byA0IGJ5dGUgYm91bmRhcmllcywgbm90IDE2LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1kc3A8L2NvZGU+PGRkPkVuYWJsZSBzaC1kc3AgaW5zbnMsIGFuZCBkaXNhYmxlIHNoM2UgLyBzaDQgaW5zbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXJlbmVzYXM8L2NvZGU+PGRkPkRpc2FibGUgb3B0aW1pemF0aW9uIHdpdGggc2VjdGlvbiBzeW1ib2wgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorUmVuZXNhcyBhc3NlbWJsZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWFsbG93LXJlZy1wcmVmaXg8L2NvZGU+PGRkPkFsbG93ICckJyBhcyBhIHJlZ2lzdGVyIG5hbWUgcHJlZml4LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRmZHBpYy0xNzQxIj48L2E+PGJyPjxkdD48Y29kZT4tLWZkcGljPC9jb2RlPjxkZD5HZW5lcmF0ZSBhbiBGRFBJQyBvYmplY3QgZmlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0taXNhPXNoNCB8IHNoNGE8L2NvZGU+PGRkPlNwZWNpZnkgdGhlIHNoNCBvciBzaDRhIGluc3RydWN0aW9uIHNldC4gCis8YnI+PGR0Pjxjb2RlPi0taXNhPWRzcDwvY29kZT48ZGQ+RW5hYmxlIHNoLWRzcCBpbnNucywgYW5kIGRpc2FibGUgc2gzZSAvIHNoNCBpbnNucy4gCis8YnI+PGR0Pjxjb2RlPi0taXNhPWZwPC9jb2RlPjxkZD5FbmFibGUgc2gyZSwgc2gzZSwgc2g0LCBhbmQgc2g0YSBpbnNuIHNldHMuIAorPGJyPjxkdD48Y29kZT4tLWlzYT1hbGw8L2NvZGU+PGRkPkVuYWJsZSBzaDEsIHNoMiwgc2gyZSwgc2gzLCBzaDNlLCBzaDQsIHNoNGEsIGFuZCBzaC1kc3AgaW5zbiBzZXRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWgtdGljay1oZXg8L2NvZGU+PGRkPlN1cHBvcnQgSCcwMCBzdHlsZSBoZXggY29uc3RhbnRzIGluIGFkZGl0aW9uIHRvIDB4MDAgc3R5bGUuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NILVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0gtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4MzE3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NILVN5bnRheC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNIIFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0hfMDAyZERlcGVuZGVudC5odG1sI1NIXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTSC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyIgdGl0bGU9IlNIIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSC1GbG9hdGluZy1Qb2ludC5odG1sI1NILUZsb2F0aW5nLVBvaW50IiB0aXRsZT0iU0ggRmxvYXRpbmcgUG9pbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSC1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU0gtRmxvYXRpbmctUG9pbnQuaHRtbCNTSC1GbG9hdGluZy1Qb2ludCI+U0ggRmxvYXRpbmcgUG9pbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNIXzAwMmREZXBlbmRlbnQuaHRtbCNTSF8wMDJkRGVwZW5kZW50Ij5TSC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM3LjIgU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlNIXzAwMmRDaGFycy5odG1sI1NIXzAwMmRDaGFycyI+U0gtQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJTSF8wMDJkUmVncy5odG1sI1NIXzAwMmRSZWdzIj5TSC1SZWdzPC9hPjogICAgICAgICAgICAgICAgICBSZWdpc3RlciBOYW1lcworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iU0hfMDAyZEFkZHJlc3NpbmcuaHRtbCNTSF8wMDJkQWRkcmVzc2luZyI+U0gtQWRkcmVzc2luZzwvYT46ICAgICAgICAgICAgQWRkcmVzc2luZyBNb2RlcworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NC1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSDY0LURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjEyZTBmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NC1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0g2NCBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTSDY0XzAwMmREZXBlbmRlbnQuaHRtbCNTSDY0XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTSDY0LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNINjQtU3ludGF4Lmh0bWwjU0g2NC1TeW50YXgiIHRpdGxlPSJTSDY0IFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNINjQtT3Bjb2Rlcy5odG1sI1NINjQtT3Bjb2RlcyIgdGl0bGU9IlNINjQgT3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNINjQtRGlyZWN0aXZlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSDY0LU9wY29kZXMuaHRtbCNTSDY0LU9wY29kZXMiPlNINjQgT3Bjb2RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNINjQtU3ludGF4Lmh0bWwjU0g2NC1TeW50YXgiPlNINjQgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjU0g2NF8wMDJkRGVwZW5kZW50Ij5TSDY0LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzguMyBTSDY0IE1hY2hpbmUgRGlyZWN0aXZlczwvaDQ+CisKKzxwPkluIGFkZGl0aW9uIHRvIHRoZSBTSCBkaXJlY3RpdmVzLCB0aGUgU0g2NCBwcm92aWRlcyB0aGUgZm9sbG93aW5nCitkaXJlY3RpdmVzOgorCisgICA8cD48YSBuYW1lPSJpbmRleC1TSDY0LW1hY2hpbmUtZGlyZWN0aXZlcy0xNzgzIj48L2E+PGEgbmFtZT0iaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtU0g2NC0xNzg0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48Y29kZT4ubW9kZSBbc2htZWRpYXxzaGNvbXBhY3RdPC9jb2RlPjxkdD48Y29kZT4uaXNhIFtzaG1lZGlhfHNoY29tcGFjdF08L2NvZGU+PGRkPlNwZWNpZnkgdGhlIElTQSBmb3IgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgKHRoZSB0d28gZGlyZWN0aXZlcyBhcmUKK2VxdWl2YWxlbnQpLiAgTm90ZSB0aGF0IHByb2dyYW1zIHN1Y2ggYXMgPGNvZGU+b2JqZHVtcDwvY29kZT4gcmVseSBvbiBzeW1ib2xpYworbGFiZWxzIHRvIGRldGVybWluZSB3aGVuIHN1Y2ggbW9kZSBzd2l0Y2hlcyBvY2N1ciAoYnkgY2hlY2tpbmcgdGhlIGxlYXN0CitzaWduaWZpY2FudCBiaXQgb2YgdGhlIGxhYmVsJ3MgYWRkcmVzcyksIHNvIHN1Y2ggbW9kZS9pc2EgY2hhbmdlcyBzaG91bGQKK2Fsd2F5cyBiZSBmb2xsb3dlZCBieSBhIGxhYmVsIChpbiBwcmFjdGljZSwgdGhpcyBpcyB0cnVlIGFueXdheSkuICBOb3RlCit0aGF0IHlvdSBjYW5ub3QgdXNlIHRoZXNlIGRpcmVjdGl2ZXMgaWYgeW91IGRpZG4ndCBzcGVjaWZ5IGFuIElTQSBvbiB0aGUKK2NvbW1hbmQgbGluZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5hYmkgWzMyfDY0XTwvY29kZT48ZGQ+U3BlY2lmeSB0aGUgQUJJIGZvciB0aGUgZm9sbG93aW5nIGluc3RydWN0aW9ucy4gIE5vdGUgdGhhdCB5b3UgY2Fubm90IHVzZQordGhpcyBkaXJlY3RpdmUgdW5sZXNzIHlvdSBzcGVjaWZpZWQgYW4gQUJJIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUKK0FCSXMgc3BlY2lmaWVkIG11c3QgbWF0Y2guCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NINjQtT3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NC1PcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwOGNlOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NINjQtT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNINjQgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjU0g2NF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iU0g2NC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSDY0LURpcmVjdGl2ZXMuaHRtbCNTSDY0LURpcmVjdGl2ZXMiIHRpdGxlPSJTSDY0IERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSDY0LU9wY29kZXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSDY0LURpcmVjdGl2ZXMuaHRtbCNTSDY0LURpcmVjdGl2ZXMiPlNINjQgRGlyZWN0aXZlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNINjRfMDAyZERlcGVuZGVudC5odG1sI1NINjRfMDAyZERlcGVuZGVudCI+U0g2NC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM4LjQgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNINjQtb3Bjb2RlLXN1bW1hcnktMTc4NSI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZS1zdW1tYXJ5XzAwMmMtU0g2NC0xNzg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5lbW9uaWNzXzAwMmMtU0g2NC0xNzg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW5zdHJ1Y3Rpb24tc3VtbWFyeV8wMDJjLVNINjQtMTc4OCI+PC9hPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgU0g2NCBtYWNoaW5lIGluc3RydWN0aW9uIHNldCwgc2VlCis8Y2l0ZT5TdXBlckggNjQgYml0IFJJU0MgU2VyaWVzIEFyY2hpdGVjdHVyZSBNYW51YWw8L2NpdGU+IChTdXBlckgsIEluYy4pLgorCisgICA8cD48Y29kZT5hczwvY29kZT4gaW1wbGVtZW50cyBhbGwgdGhlIHN0YW5kYXJkIFNINjQgb3Bjb2Rlcy4gIEluCithZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBwc2V1ZG8tb3Bjb2RlcyBtYXkgYmUgZXhwYW5kZWQgaW50byBvbmUgb3IgbW9yZQorYWx0ZXJuYXRlIG9wY29kZXM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPm1vdmk8L2NvZGU+PGRkPklmIHRoZSB2YWx1ZSBkb2Vzbid0IGZpdCBpbnRvIGEgc3RhbmRhcmQgPGNvZGU+bW92aTwvY29kZT4gb3Bjb2RlLAorPGNvZGU+YXM8L2NvZGU+IHdpbGwgcmVwbGFjZSB0aGUgPGNvZGU+bW92aTwvY29kZT4gd2l0aCBhIHNlcXVlbmNlIG9mCis8Y29kZT5tb3ZpPC9jb2RlPiBhbmQgPGNvZGU+c2hvcmk8L2NvZGU+IG9wY29kZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5wdDwvY29kZT48ZGQ+VGhpcyBleHBhbmRzIHRvIGEgc2VxdWVuY2Ugb2YgPGNvZGU+bW92aTwvY29kZT4gYW5kIDxjb2RlPnNob3JpPC9jb2RlPiBvcGNvZGUsCitmb2xsb3dlZCBieSBhIDxjb2RlPnB0cmVsPC9jb2RlPiBvcGNvZGUsIG9yIHRvIGEgPGNvZGU+cHRhPC9jb2RlPiBvciA8Y29kZT5wdGI8L2NvZGU+CitvcGNvZGUsIGRlcGVuZGluZyBvbiB0aGUgbGFiZWwgcmVmZXJlbmNlZC4KKworICAgPC9kbD4KKworPCEtLSBDb3B5cmlnaHQgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NywgMTk5OSwgMjAwMiwgMjAwOCwgLS0+Cis8IS0tIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSDY0LU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDFhNjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0g2NCBPcHRpb25zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTSDY0XzAwMmREZXBlbmRlbnQuaHRtbCNTSDY0XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTSDY0LURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNINjQtU3ludGF4Lmh0bWwjU0g2NC1TeW50YXgiIHRpdGxlPSJTSDY0IFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNINjQtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSDY0LVN5bnRheC5odG1sI1NINjQtU3ludGF4Ij5TSDY0IFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNINjRfMDAyZERlcGVuZGVudC5odG1sI1NINjRfMDAyZERlcGVuZGVudCI+U0g2NC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM4LjEgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNINjQtb3B0aW9ucy0xNzY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLVNINjQtMTc2NiI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LVNINjQtSVNBLW9wdGlvbnMtMTc2NyI+PC9hPgorPGEgbmFtZT0iaW5kZXgtSVNBLW9wdGlvbnNfMDAyYy1TSDY0LTE3NjgiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LWlzYT1zaDQgfCBzaDRhPC9jb2RlPjxkZD5TcGVjaWZ5IHRoZSBzaDQgb3Igc2g0YSBpbnN0cnVjdGlvbiBzZXQuIAorPGJyPjxkdD48Y29kZT4taXNhPWRzcDwvY29kZT48ZGQ+RW5hYmxlIHNoLWRzcCBpbnNucywgYW5kIGRpc2FibGUgc2gzZSAvIHNoNCBpbnNucy4gCis8YnI+PGR0Pjxjb2RlPi1pc2E9ZnA8L2NvZGU+PGRkPkVuYWJsZSBzaDJlLCBzaDNlLCBzaDQsIGFuZCBzaDRhIGluc24gc2V0cy4gCis8YnI+PGR0Pjxjb2RlPi1pc2E9YWxsPC9jb2RlPjxkZD5FbmFibGUgc2gxLCBzaDIsIHNoMmUsIHNoMywgc2gzZSwgc2g0LCBzaDRhLCBhbmQgc2gtZHNwIGluc24gc2V0cy4gCis8YnI+PGR0Pjxjb2RlPi1pc2E9c2htZWRpYSB8IC1pc2E9c2hjb21wYWN0PC9jb2RlPjxkZD5TcGVjaWZ5IHRoZSBkZWZhdWx0IGluc3RydWN0aW9uIHNldC4gIDxjb2RlPlNIbWVkaWE8L2NvZGU+IHNwZWNpZmllcyB0aGUKKzMyLWJpdCBvcGNvZGVzLCBhbmQgPGNvZGU+U0hjb21wYWN0PC9jb2RlPiBzcGVjaWZpZXMgdGhlIDE2LWJpdCBvcGNvZGVzCitjb21wYXRpYmxlIHdpdGggcHJldmlvdXMgU0ggZmFtaWxpZXMuICBUaGUgZGVmYXVsdCBkZXBlbmRzIG9uIHRoZSBBQkkKK3NlbGVjdGVkOyB0aGUgZGVmYXVsdCBmb3IgdGhlIDY0LWJpdCBBQkkgaXMgU0htZWRpYSwgYW5kIHRoZSBkZWZhdWx0IGZvcgordGhlIDMyLWJpdCBBQkkgaXMgU0hjb21wYWN0LiAgSWYgbmVpdGhlciB0aGUgQUJJIG5vciB0aGUgSVNBIGlzCitzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIDMyLWJpdCBTSGNvbXBhY3QuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSA8Y29kZT4ubW9kZTwvY29kZT4gcHNldWRvLW9wIGlzIG5vdCBwZXJtaXR0ZWQgaWYgdGhlIElTQSBpcyBub3QKK3NwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LVNINjQtQUJJLW9wdGlvbnMtMTc2OSI+PC9hPjxhIG5hbWU9ImluZGV4LUFCSS1vcHRpb25zXzAwMmMtU0g2NC0xNzcwIj48L2E+PGJyPjxkdD48Y29kZT4tYWJpPTMyIHwgLWFiaT02NDwvY29kZT48ZGQ+U3BlY2lmeSB0aGUgZGVmYXVsdCBBQkkuICBJZiB0aGUgSVNBIGlzIHNwZWNpZmllZCBhbmQgdGhlIEFCSSBpcyBub3QsCit0aGUgZGVmYXVsdCBBQkkgZGVwZW5kcyBvbiB0aGUgSVNBLCB3aXRoIFNIbWVkaWEgZGVmYXVsdGluZyB0byA2NC1iaXQKK2FuZCBTSGNvbXBhY3QgZGVmYXVsdGluZyB0byAzMi1iaXQuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSA8Y29kZT4uYWJpPC9jb2RlPiBwc2V1ZG8tb3AgaXMgbm90IHBlcm1pdHRlZCBpZiB0aGUgQUJJIGlzIG5vdAorc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBXaGVuIHRoZSBBQkkgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kCitsaW5lLCBhbnkgPGNvZGU+LmFiaTwvY29kZT4gcHNldWRvLW9wcyBpbiB0aGUgc291cmNlIG11c3QgbWF0Y2ggaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tc2hjb21wYWN0LWNvbnN0LWNyYW5nZTwvY29kZT48ZGQ+RW1pdCBjb2RlLXJhbmdlIGRlc2NyaXB0b3JzIGZvciBjb25zdGFudHMgaW4gU0hjb21wYWN0IGNvZGUgc2VjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm8tbWl4PC9jb2RlPjxkZD5EaXNhbGxvdyBTSG1lZGlhIGNvZGUgaW4gdGhlIHNhbWUgc2VjdGlvbiBhcyBjb25zdGFudHMgYW5kIFNIY29tcGFjdAorY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1uby1leHBhbmQ8L2NvZGU+PGRkPkRvIG5vdCBleHBhbmQgTU9WSSwgUFQsIFBUQSBvciBQVEIgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWV4cGFuZC1wdDMyPC9jb2RlPjxkZD5XaXRoIC1hYmk9NjQsIGV4cGFuZCBQVCwgUFRBIGFuZCBQVEIgaW5zdHJ1Y3Rpb25zIHRvIDMyIGJpdHMgb25seS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1oLXRpY2staGV4PC9jb2RlPjxkZD5TdXBwb3J0IEgnMDAgc3R5bGUgaGV4IGNvbnN0YW50cyBpbiBhZGRpdGlvbiB0byAweDAwIHN0eWxlLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSDY0LVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NC1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTRiMmNjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NC1TeW50YXguaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TSDY0IFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjU0g2NF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iU0g2NC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSDY0LU9wdGlvbnMuaHRtbCNTSDY0LU9wdGlvbnMiIHRpdGxlPSJTSDY0IE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSDY0LURpcmVjdGl2ZXMuaHRtbCNTSDY0LURpcmVjdGl2ZXMiIHRpdGxlPSJTSDY0IERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSDY0LVN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSDY0LURpcmVjdGl2ZXMuaHRtbCNTSDY0LURpcmVjdGl2ZXMiPlNINjQgRGlyZWN0aXZlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNINjQtT3B0aW9ucy5odG1sI1NINjQtT3B0aW9ucyI+U0g2NCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjU0g2NF8wMDJkRGVwZW5kZW50Ij5TSDY0LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzguMiBTeW50YXg8L2g0PgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU0g2NF8wMDJkQ2hhcnMuaHRtbCNTSDY0XzAwMmRDaGFycyI+U0g2NC1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlNINjRfMDAyZFJlZ3MuaHRtbCNTSDY0XzAwMmRSZWdzIj5TSDY0LVJlZ3M8L2E+OiAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJTSDY0XzAwMmRBZGRyZXNzaW5nLmh0bWwjU0g2NF8wMDJkQWRkcmVzc2luZyI+U0g2NC1BZGRyZXNzaW5nPC9hPjogICAgICAgICAgICBBZGRyZXNzaW5nIE1vZGVzCis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSDY0XzAwMmRBZGRyZXNzaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSDY0XzAwMmRBZGRyZXNzaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VhNDY5OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NINjRfMDAyZEFkZHJlc3NpbmcuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TSDY0LUFkZHJlc3NpbmcgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNINjQtU3ludGF4Lmh0bWwjU0g2NC1TeW50YXgiIHRpdGxlPSJTSDY0IFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNINjRfMDAyZFJlZ3MuaHRtbCNTSDY0XzAwMmRSZWdzIiB0aXRsZT0iU0g2NC1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0g2NC1BZGRyZXNzaW5nIj48L2E+Cis8YSBuYW1lPSJTSDY0XzAwMmRBZGRyZXNzaW5nIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0g2NF8wMDJkUmVncy5odG1sI1NINjRfMDAyZFJlZ3MiPlNINjQtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNINjQtU3ludGF4Lmh0bWwjU0g2NC1TeW50YXgiPlNINjQgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zOC4yLjMgQWRkcmVzc2luZyBNb2RlczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFkZHJlc3NpbmctbW9kZXNfMDAyYy1TSDY0LTE3ODAiPjwvYT48YSBuYW1lPSJpbmRleC1TSDY0LWFkZHJlc3NpbmctbW9kZXMtMTc4MSI+PC9hPgorU0g2NCBvcGVyYW5kcyBjb25zaXN0IG9mIGVpdGhlciBhIHJlZ2lzdGVyIG9yIGltbWVkaWF0ZSB2YWx1ZS4gIFRoZQoraW1tZWRpYXRlIHZhbHVlIGNhbiBiZSBhIGNvbnN0YW50IG9yIGxhYmVsIHJlZmVyZW5jZSAob3IgcG9ydGlvbiBvZiBhCitsYWJlbCByZWZlcmVuY2UpLCBhcyBpbiB0aGlzIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgCW1vdmkJNCxyMgorICAgICAJcHQJZnVuY3Rpb24sIHRyNAorICAgICAJbW92aQkoZnVuY3Rpb24gJmd0OyZndDsgMTYpICZhbXA7IDY1NTM1LHIwCisgICAgIAlzaG9yaQlmdW5jdGlvbiAmYW1wOyA2NTUzNSwgcjAKKyAgICAgCWxkLmwJcjAsNCxyMAorPC9wcmU+CisgICA8cD48YSBuYW1lPSJpbmRleC1kYXRhbGFiZWxfMDAyYy1TSDY0LTE3ODIiPjwvYT5JbnN0cnVjdGlvbiBsYWJlbCByZWZlcmVuY2VzIGNhbiByZWZlcmVuY2UgbGFiZWxzIGluIGVpdGhlciBTSG1lZGlhIG9yCitTSGNvbXBhY3QuICBUbyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIHR3bywgbGFiZWxzIGluIFNIbWVkaWEgc2VjdGlvbnMKK3dpbGwgYWx3YXlzIGhhdmUgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBzZXQgKGkuZS4gdGhleSB3aWxsIGJlIG9kZCksCit3aGljaCBTSGNvbXBhY3QgbGFiZWxzIHdpbGwgaGF2ZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IHJlc2V0CisoaS5lLiB0aGV5IHdpbGwgYmUgZXZlbikuICBJZiB5b3UgbmVlZCB0byByZWZlcmVuY2UgdGhlIGFjdHVhbCBhZGRyZXNzCitvZiBhIGxhYmVsLCB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+ZGF0YWxhYmVsPC9jb2RlPiBtb2RpZmllciwgYXMgaW4gdGhpcworZXhhbXBsZToKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAJLmxvbmcJZnVuY3Rpb24KKyAgICAgCS5sb25nCWRhdGFsYWJlbCBmdW5jdGlvbgorPC9wcmU+CisgICA8cD5JbiB0aGF0IGV4YW1wbGUsIHRoZSBmaXJzdCBsb25nd29yZCBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZSBsZWFzdAorc2lnbmlmaWNhbnQgYml0IHNldCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbGFiZWwgaXMgYW4gU0htZWRpYSBsYWJlbAorb3IgYW4gU0hjb21wYWN0IGxhYmVsLiAgVGhlIHNlY29uZCBsb25nd29yZCB3aWxsIGJlIHRoZSBhY3R1YWwgYWRkcmVzcworb2YgdGhlIGxhYmVsLCByZWdhcmRsZXNzIG9mIHdoYXQgdHlwZSBvZiBsYWJlbCBpdCBpcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NF8wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NINjRfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmOTc2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NINjRfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0g2NC1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0g2NC1TeW50YXguaHRtbCNTSDY0LVN5bnRheCIgdGl0bGU9IlNINjQgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0g2NF8wMDJkUmVncy5odG1sI1NINjRfMDAyZFJlZ3MiIHRpdGxlPSJTSDY0LVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSDY0LUNoYXJzIj48L2E+Cis8YSBuYW1lPSJTSDY0XzAwMmRDaGFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSDY0XzAwMmRSZWdzLmh0bWwjU0g2NF8wMDJkUmVncyI+U0g2NC1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0g2NC1TeW50YXguaHRtbCNTSDY0LVN5bnRheCI+U0g2NCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjM4LjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtU0g2NC0xNzcxIj48L2E+PGEgbmFtZT0iaW5kZXgtU0g2NC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE3NzIiPjwvYT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIGxpbmUgY29tbWVudCBjaGFyYWN0ZXIuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgdGhlbiB0aGUgd2hvbGUKK2xpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY291bGQgYWxzbyBiZQorYSBsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtU0g2NC0xNzczIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVNINjQtMTc3NCI+PC9hPjxhIG5hbWU9ImluZGV4LVNINjQtbGluZS1zZXBhcmF0b3ItMTc3NSI+PC9hPllvdSBjYW4gdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkIG9mIGEgbmV3bGluZSB0byBzZXBhcmF0ZSBzdGF0ZW1lbnRzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy1fMDA0MHNhbXBfMDA3Yl8wMDI0XzAwN2QtaW4tMTc3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRfMDA3ZC1pbi1zeW1ib2wtbmFtZXMtMTc3NyI+PC9hPlNpbmNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nLCB5b3UgbWF5IHVzZSBpdCBpbiBzeW1ib2wgbmFtZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NINjRfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NF8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwN2ZhZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NINjRfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNINjQtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSF8wMDJkRGVwZW5kZW50Lmh0bWwjU0hfMDAyZERlcGVuZGVudCIgdGl0bGU9IlNILURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCIgdGl0bGU9IlBEUC0xMS1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSDY0LURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iU0g2NF8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCI+UERQLTExLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNIXzAwMmREZXBlbmRlbnQuaHRtbCNTSF8wMDJkRGVwZW5kZW50Ij5TSC1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMzggU3VwZXJIIFNINjQgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0g2NC1zdXBwb3J0LTE3NjQiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlNINjQtT3B0aW9ucy5odG1sI1NINjQtT3B0aW9ucyI+U0g2NCBPcHRpb25zPC9hPjogICAgICAgICAgICAgICBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJTSDY0LVN5bnRheC5odG1sI1NINjQtU3ludGF4Ij5TSDY0IFN5bnRheDwvYT46ICAgICAgICAgICAgICAgIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iU0g2NC1EaXJlY3RpdmVzLmh0bWwjU0g2NC1EaXJlY3RpdmVzIj5TSDY0IERpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgIFNINjQgTWFjaGluZSBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJTSDY0LU9wY29kZXMuaHRtbCNTSDY0LU9wY29kZXMiPlNINjQgT3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NF8wMDJkUmVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0g2NF8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Nzc4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSDY0XzAwMmRSZWdzLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0g2NC1SZWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTSDY0LVN5bnRheC5odG1sI1NINjQtU3ludGF4IiB0aXRsZT0iU0g2NCBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSDY0XzAwMmRDaGFycy5odG1sI1NINjRfMDAyZENoYXJzIiB0aXRsZT0iU0g2NC1DaGFycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNINjRfMDAyZEFkZHJlc3NpbmcuaHRtbCNTSDY0XzAwMmRBZGRyZXNzaW5nIiB0aXRsZT0iU0g2NC1BZGRyZXNzaW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0g2NC1SZWdzIj48L2E+Cis8YSBuYW1lPSJTSDY0XzAwMmRSZWdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNINjRfMDAyZEFkZHJlc3NpbmcuaHRtbCNTSDY0XzAwMmRBZGRyZXNzaW5nIj5TSDY0LUFkZHJlc3Npbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSDY0XzAwMmRDaGFycy5odG1sI1NINjRfMDAyZENoYXJzIj5TSDY0LUNoYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0g2NC1TeW50YXguaHRtbCNTSDY0LVN5bnRheCI+U0g2NCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjM4LjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNINjQtcmVnaXN0ZXJzLTE3NzgiPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3RlcnNfMDAyYy1TSDY0LTE3NzkiPjwvYT5Zb3UgY2FuIHVzZSB0aGUgcHJlZGVmaW5lZCBzeW1ib2xzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI2Mzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byByZWZlcgordG8gdGhlIFNINjQgZ2VuZXJhbCByZWdpc3RlcnMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3IwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2ggPGNvZGU+Y3I2MzwvY29kZT4gZm9yCitjb250cm9sIHJlZ2lzdGVycywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50cjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnRyNzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgdGFyZ2V0IGFkZHJlc3MKK3JlZ2lzdGVycywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZyNjM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcKK3BvaW50IHJlZ2lzdGVycywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kcjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRyNjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGV2ZW4gbnVtYmVyZWQgcmVnaXN0ZXJzCitvbmx5KSBmb3IgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnYwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2gKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnY2MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAobXVsdGlwbGVzIG9mIGZvdXIgb25seSkgZm9yIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQKK3ZlY3RvcnMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnAwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRocm91Z2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcDYyPC9zcGFuPjwvc2FtcD4mcnNxdW87IChldmVuIG51bWJlcmVkIHJlZ2lzdGVycyBvbmx5KQorZm9yIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgcGFpcnMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXRyeDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tdHJ4NDg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKG11bHRpcGxlcyBvZiAxNiBvbmx5KSBmb3IgNHg0IG1hdHJpY2VzIG9mCitzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgdGhlIHByb2dyYW0KK2NvdW50ZXIsIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZwc2NyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdHVzIGFuZCBjb250cm9sCityZWdpc3Rlci4KKworICAgPHA+WW91IGNhbiBhbHNvIHJlZmVyIHRvIHRoZSBjb250cm9sIHJlZ2lzdGVycyBieSB0aGUgbW5lbW9uaWNzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3I8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNzcjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wc3NyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludGV2dDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5leHBldnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cGV4cGV2dDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dHJhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNwYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wc3BjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlc3ZlYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52YnI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnRlYTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kY3I8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+a2NyMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5rY3IxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmN0Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVzcjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0hfMDAyZEFkZHJlc3NpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NIXzAwMmRBZGRyZXNzaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4YTg3ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NIXzAwMmRBZGRyZXNzaW5nLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0gtQWRkcmVzc2luZyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0gtU3ludGF4Lmh0bWwjU0gtU3ludGF4IiB0aXRsZT0iU0ggU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU0hfMDAyZFJlZ3MuaHRtbCNTSF8wMDJkUmVncyIgdGl0bGU9IlNILVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSC1BZGRyZXNzaW5nIj48L2E+Cis8YSBuYW1lPSJTSF8wMDJkQWRkcmVzc2luZyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNIXzAwMmRSZWdzLmh0bWwjU0hfMDAyZFJlZ3MiPlNILVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTSC1TeW50YXguaHRtbCNTSC1TeW50YXgiPlNIIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMzcuMi4zIEFkZHJlc3NpbmcgTW9kZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1hZGRyZXNzaW5nLW1vZGVzXzAwMmMtU0gtMTc1MSI+PC9hPjxhIG5hbWU9ImluZGV4LVNILWFkZHJlc3NpbmctbW9kZXMtMTc1MiI+PC9hPjxjb2RlPmFzPC9jb2RlPiB1bmRlcnN0YW5kcyB0aGUgZm9sbG93aW5nIGFkZHJlc3NpbmcgbW9kZXMgZm9yIHRoZSBTSC4gCis8Y29kZT5SPC9jb2RlPjx2YXI+bjwvdmFyPiBpbiB0aGUgZm9sbG93aW5nIHJlZmVycyB0byBhbnkgb2YgdGhlIG51bWJlcmVkCityZWdpc3RlcnMsIGJ1dCA8ZW0+bm90PC9lbT4gdGhlIGNvbnRyb2wgcmVnaXN0ZXJzLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5SPC9jb2RlPjx2YXI+bjwvdmFyPjxkZD5SZWdpc3RlciBkaXJlY3QKKworICAgICA8YnI+PGR0Pjxjb2RlPkBSPC9jb2RlPjx2YXI+bjwvdmFyPjxkZD5SZWdpc3RlciBpbmRpcmVjdAorCisgICAgIDxicj48ZHQ+PGNvZGU+QC1SPC9jb2RlPjx2YXI+bjwvdmFyPjxkZD5SZWdpc3RlciBpbmRpcmVjdCB3aXRoIHByZS1kZWNyZW1lbnQKKworICAgICA8YnI+PGR0Pjxjb2RlPkBSPC9jb2RlPjx2YXI+bjwvdmFyPjxjb2RlPis8L2NvZGU+PGRkPlJlZ2lzdGVyIGluZGlyZWN0IHdpdGggcG9zdC1pbmNyZW1lbnQKKworICAgICA8YnI+PGR0Pjxjb2RlPkAoPC9jb2RlPjx2YXI+ZGlzcDwvdmFyPjxjb2RlPiwgUjwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZWdpc3RlciBpbmRpcmVjdCB3aXRoIGRpc3BsYWNlbWVudAorCisgICAgIDxicj48ZHQ+PGNvZGU+QChSMCwgUjwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZWdpc3RlciBpbmRleGVkCisKKyAgICAgPGJyPjxkdD48Y29kZT5AKDwvY29kZT48dmFyPmRpc3A8L3Zhcj48Y29kZT4sIEdCUik8L2NvZGU+PGRkPjxjb2RlPkdCUjwvY29kZT4gb2Zmc2V0CisKKyAgICAgPGJyPjxkdD48Y29kZT5AKFIwLCBHQlIpPC9jb2RlPjxkZD5HQlIgaW5kZXhlZAorCisgICAgIDxicj48ZHQ+PHZhcj5hZGRyPC92YXI+PGR0Pjxjb2RlPkAoPC9jb2RlPjx2YXI+ZGlzcDwvdmFyPjxjb2RlPiwgUEMpPC9jb2RlPjxkZD5QQyByZWxhdGl2ZSBhZGRyZXNzIChmb3IgYnJhbmNoIG9yIGZvciBhZGRyZXNzaW5nIG1lbW9yeSkuICBUaGUKKzxjb2RlPmFzPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgeW91IHRvIHVzZSB0aGUgc2ltcGxlciBmb3JtCis8dmFyPmFkZHI8L3Zhcj4gYW55d2hlcmUgYSBQQyByZWxhdGl2ZSBhZGRyZXNzIGlzIGNhbGxlZCBmb3I7IHRoZSBhbHRlcm5hdGUKK2Zvcm0gaXMgc3VwcG9ydGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgYXNzZW1ibGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPiM8L2NvZGU+PHZhcj5pbW08L3Zhcj48ZGQ+SW1tZWRpYXRlIGRhdGEKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NIXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0hfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjN2UxYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NIXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNILUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTSC1TeW50YXguaHRtbCNTSC1TeW50YXgiIHRpdGxlPSJTSCBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSF8wMDJkUmVncy5odG1sI1NIXzAwMmRSZWdzIiB0aXRsZT0iU0gtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNILUNoYXJzIj48L2E+Cis8YSBuYW1lPSJTSF8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU0hfMDAyZFJlZ3MuaHRtbCNTSF8wMDJkUmVncyI+U0gtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNILVN5bnRheC5odG1sI1NILVN5bnRheCI+U0ggU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zNy4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVNILTE3NDIiPjwvYT48YSBuYW1lPSJpbmRleC1TSC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTE3NDMiPjwvYT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIGxpbmUgY29tbWVudCBjaGFyYWN0ZXIuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtU0gtMTc0NCI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1TSC0xNzQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtU0gtbGluZS1zZXBhcmF0b3ItMTc0NiI+PC9hPllvdSBjYW4gdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkIG9mIGEgbmV3bGluZSB0byBzZXBhcmF0ZSBzdGF0ZW1lbnRzLgorCisgICA8cD5JZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lIHRoZW4gdGhlIHdob2xlCitsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNvdWxkIGFsc28gYmUKK2EgbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEgcHJlcHJvY2Vzc29yCitjb250cm9sIGNvbW1hbmQgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy1fMDA0MHNhbXBfMDA3Yl8wMDI0XzAwN2QtaW4tMTc0NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRfMDA3ZC1pbi1zeW1ib2wtbmFtZXMtMTc0OCI+PC9hPlNpbmNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nLCB5b3UgbWF5IHVzZSBpdCBpbiBzeW1ib2wgbmFtZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NIXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NIXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWMyMTVmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU0hfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNILURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTlMzMktfMDAyZERlcGVuZGVudC5odG1sI05TMzJLXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJOUzMySy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSDY0XzAwMmREZXBlbmRlbnQuaHRtbCNTSDY0XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTSDY0LURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNILURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iU0hfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSDY0XzAwMmREZXBlbmRlbnQuaHRtbCNTSDY0XzAwMmREZXBlbmRlbnQiPlNINjQtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTlMzMktfMDAyZERlcGVuZGVudC5odG1sI05TMzJLXzAwMmREZXBlbmRlbnQiPk5TMzJLLURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4zNyBSZW5lc2FzIC8gU3VwZXJIIFNIIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNILXN1cHBvcnQtMTczMSI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlNILVN5bnRheC5odG1sI1NILVN5bnRheCI+U0ggU3ludGF4PC9hPjogICAgICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJTSC1GbG9hdGluZy1Qb2ludC5odG1sI1NILUZsb2F0aW5nLVBvaW50Ij5TSCBGbG9hdGluZyBQb2ludDwvYT46ICAgICAgICBGbG9hdGluZyBQb2ludAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iU0gtRGlyZWN0aXZlcy5odG1sI1NILURpcmVjdGl2ZXMiPlNIIERpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgIFNIIE1hY2hpbmUgRGlyZWN0aXZlcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iU0gtT3Bjb2Rlcy5odG1sI1NILU9wY29kZXMiPlNIIE9wY29kZXM8L2E+OiAgICAgICAgICAgICAgIE9wY29kZXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NIXzAwMmRSZWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSF8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjA5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TSF8wMDJkUmVncy5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNILVJlZ3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNILVN5bnRheC5odG1sI1NILVN5bnRheCIgdGl0bGU9IlNIIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNIXzAwMmRDaGFycy5odG1sI1NIXzAwMmRDaGFycyIgdGl0bGU9IlNILUNoYXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0hfMDAyZEFkZHJlc3NpbmcuaHRtbCNTSF8wMDJkQWRkcmVzc2luZyIgdGl0bGU9IlNILUFkZHJlc3NpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSC1SZWdzIj48L2E+Cis8YSBuYW1lPSJTSF8wMDJkUmVncyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSF8wMDJkQWRkcmVzc2luZy5odG1sI1NIXzAwMmRBZGRyZXNzaW5nIj5TSC1BZGRyZXNzaW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0hfMDAyZENoYXJzLmh0bWwjU0hfMDAyZENoYXJzIj5TSC1DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNILVN5bnRheC5odG1sI1NILVN5bnRheCI+U0ggU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zNy4yLjIgUmVnaXN0ZXIgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1TSC1yZWdpc3RlcnMtMTc0OSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyc18wMDJjLVNILTE3NTAiPjwvYT5Zb3UgY2FuIHVzZSB0aGUgcHJlZGVmaW5lZCBzeW1ib2xzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI3PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI4PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yOTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjExPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIxMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMTM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjE0PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjE1PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHJlZmVyIHRvIHRoZSBTSCByZWdpc3RlcnMuCisKKyAgIDxwPlRoZSBTSCBhbHNvIGhhcyB0aGVzZSBjb250cm9sIHJlZ2lzdGVyczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+cHI8L2NvZGU+PGRkPnByb2NlZHVyZSByZWdpc3RlciAoaG9sZHMgcmV0dXJuIGFkZHJlc3MpCisKKyAgICAgPGJyPjxkdD48Y29kZT5wYzwvY29kZT48ZGQ+cHJvZ3JhbSBjb3VudGVyCisKKyAgICAgPGJyPjxkdD48Y29kZT5tYWNoPC9jb2RlPjxkdD48Y29kZT5tYWNsPC9jb2RlPjxkZD5oaWdoIGFuZCBsb3cgbXVsdGlwbHkgYWNjdW11bGF0b3IgcmVnaXN0ZXJzCisKKyAgICAgPGJyPjxkdD48Y29kZT5zcjwvY29kZT48ZGQ+c3RhdHVzIHJlZ2lzdGVyCisKKyAgICAgPGJyPjxkdD48Y29kZT5nYnI8L2NvZGU+PGRkPmdsb2JhbCBiYXNlIHJlZ2lzdGVyCisKKyAgICAgPGJyPjxkdD48Y29kZT52YnI8L2NvZGU+PGRkPnZlY3RvciBiYXNlIHJlZ2lzdGVyIChmb3IgaW50ZXJydXB0IHZlY3RvcnMpCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TT00tU3ltYm9scy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU09NLVN5bWJvbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2RlNTdhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU09NLVN5bWJvbHMuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TT00gU3ltYm9scyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3ltYm9sLUF0dHJpYnV0ZXMuaHRtbCNTeW1ib2wtQXR0cmlidXRlcyIgdGl0bGU9IlN5bWJvbCBBdHRyaWJ1dGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ09GRi1TeW1ib2xzLmh0bWwjQ09GRi1TeW1ib2xzIiB0aXRsZT0iQ09GRiBTeW1ib2xzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU09NLVN5bWJvbHMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDT0ZGLVN5bWJvbHMuaHRtbCNDT0ZGLVN5bWJvbHMiPkNPRkYgU3ltYm9sczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN5bWJvbC1BdHRyaWJ1dGVzLmh0bWwjU3ltYm9sLUF0dHJpYnV0ZXMiPlN5bWJvbCBBdHRyaWJ1dGVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+NS41LjUgU3ltYm9sIEF0dHJpYnV0ZXMgZm9yIFNPTTwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNPTS1zeW1ib2wtYXR0cmlidXRlcy0yMzkiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtYXR0cmlidXRlc18wMDJjLVNPTS0yNDAiPjwvYT4KK1RoZSBTT00gZm9ybWF0IGZvciB0aGUgSFBQQSBzdXBwb3J0cyBhIG11bHRpdHVkZSBvZiBzeW1ib2wgYXR0cmlidXRlcyBzZXQgd2l0aAordGhlIDxjb2RlPi5FWFBPUlQ8L2NvZGU+IGFuZCA8Y29kZT4uSU1QT1JUPC9jb2RlPiBkaXJlY3RpdmVzLgorCisgICA8cD5UaGUgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGluIDxjaXRlPkhQOTAwMCBTZXJpZXMgODAwIEFzc2VtYmx5CitMYW5ndWFnZSBSZWZlcmVuY2UgTWFudWFsPC9jaXRlPiAoSFAgOTI0MzItOTAwMDEpIHVuZGVyIHRoZSA8Y29kZT5JTVBPUlQ8L2NvZGU+IGFuZAorPGNvZGU+RVhQT1JUPC9jb2RlPiBhc3NlbWJsZXIgZGlyZWN0aXZlIGRvY3VtZW50YXRpb24uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGEyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlMvMzkwLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI1JYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJSWC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTQ09SRV8wMDJkRGVwZW5kZW50Lmh0bWwjU0NPUkVfMDAyZERlcGVuZGVudCIgdGl0bGU9IlNDT1JFLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlMlMmYzOTAtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTQ09SRV8wMDJkRGVwZW5kZW50Lmh0bWwjU0NPUkVfMDAyZERlcGVuZGVudCI+U0NPUkUtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI1JYXzAwMmREZXBlbmRlbnQiPlJYLURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4zNSBJQk0gUy8zOTAgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtczM5MC1zdXBwb3J0LTE2NzciPjwvYT4KK1RoZSBzMzkwIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIHR3byBhcmNoaXRlY3R1cmVzIG1vZGVzCithbmQgc2V2ZW4gY2hpcCBsZXZlbHMuIFRoZSBhcmNoaXRlY3R1cmUgbW9kZXMgYXJlIHRoZSBFbnRlcnByaXNlIFN5c3RlbQorQXJjaGl0ZWN0dXJlIChFU0EpIGFuZCB0aGUgbmV3ZXIgei9BcmNoaXRlY3R1cmUgbW9kZS4gVGhlIGNoaXAgbGV2ZWxzCithcmUgZzUsIGc2LCB6OTAwLCB6OTkwLCB6OS0xMDksIHo5LWVjLCB6MTAgYW5kIHoxOTYuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJzMzkwLU9wdGlvbnMuaHRtbCNzMzkwLU9wdGlvbnMiPnMzOTAgT3B0aW9uczwvYT46ICAgICAgICAgICAgICAgICBDb21tYW5kLWxpbmUgT3B0aW9ucy4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJzMzkwLUNoYXJhY3RlcnMuaHRtbCNzMzkwLUNoYXJhY3RlcnMiPnMzOTAgQ2hhcmFjdGVyczwvYT46IAkJU3BlY2lhbCBDaGFyYWN0ZXJzLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiPnMzOTAgU3ludGF4PC9hPjogICAgICAgICAgICAgICAgICBBc3NlbWJsZXIgSW5zdHJ1Y3Rpb24gc3ludGF4LiAKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9InMzOTAtRGlyZWN0aXZlcy5odG1sI3MzOTAtRGlyZWN0aXZlcyI+czM5MCBEaXJlY3RpdmVzPC9hPjogICAgICAgICAgICAgIEFzc2VtYmxlciBEaXJlY3RpdmVzLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9InMzOTAtRmxvYXRpbmctUG9pbnQuaHRtbCNzMzkwLUZsb2F0aW5nLVBvaW50Ij5zMzkwIEZsb2F0aW5nIFBvaW50PC9hPjogICAgICAgICAgRmxvYXRpbmcgUG9pbnQuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2J0dGwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NidHRsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2MzdhZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NidHRsLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2J0dGwgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJlcHQuaHRtbCNSZXB0IiB0aXRsZT0iUmVwdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNjbC5odG1sI1NjbCIgdGl0bGU9IlNjbCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNidHRsIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNjbC5odG1sI1NjbCI+U2NsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUmVwdC5odG1sI1JlcHQiPlJlcHQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuOTcgPGNvZGU+LnNidHRsICI8L2NvZGU+PHZhcj5zdWJoZWFkaW5nPC92YXI+PGNvZGU+IjwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNidHRsXzAwN2QtZGlyZWN0aXZlLTQ0MyI+PC9hPjxhIG5hbWU9ImluZGV4LXN1YnRpdGxlcy1mb3ItbGlzdGluZ3MtNDQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGlzdGluZy1jb250cm9sXzAwM2Etc3VidGl0bGUtNDQ1Ij48L2E+VXNlIDx2YXI+c3ViaGVhZGluZzwvdmFyPiBhcyB0aGUgdGl0bGUgKHRoaXJkIGxpbmUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZQordGl0bGUgbGluZSkgd2hlbiBnZW5lcmF0aW5nIGFzc2VtYmx5IGxpc3RpbmdzLgorCisgICA8cD5UaGlzIGRpcmVjdGl2ZSBhZmZlY3RzIHN1YnNlcXVlbnQgcGFnZXMsIGFzIHdlbGwgYXMgdGhlIGN1cnJlbnQgcGFnZSBpZgoraXQgYXBwZWFycyB3aXRoaW4gdGVuIGxpbmVzIG9mIHRoZSB0b3Agb2YgYSBwYWdlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TY2hlZHVsZS1EaXJlY3RpdmUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NjaGVkdWxlLURpcmVjdGl2ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYzc2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TY2hlZHVsZS1EaXJlY3RpdmUuaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TY2hlZHVsZSBEaXJlY3RpdmUgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiIHRpdGxlPSJYdGVuc2EgRGlyZWN0aXZlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxvbmdjYWxscy1EaXJlY3RpdmUuaHRtbCNMb25nY2FsbHMtRGlyZWN0aXZlIiB0aXRsZT0iTG9uZ2NhbGxzIERpcmVjdGl2ZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNjaGVkdWxlLURpcmVjdGl2ZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMb25nY2FsbHMtRGlyZWN0aXZlLmh0bWwjTG9uZ2NhbGxzLURpcmVjdGl2ZSI+TG9uZ2NhbGxzIERpcmVjdGl2ZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiPlh0ZW5zYSBEaXJlY3RpdmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41MC41LjEgc2NoZWR1bGU8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNjaGVkdWxlXzAwN2QtZGlyZWN0aXZlLTIzMjAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vXzAwMmRzY2hlZHVsZV8wMDdkLWRpcmVjdGl2ZS0yMzIxIj48L2E+CitUaGUgPGNvZGU+c2NoZWR1bGU8L2NvZGU+IGRpcmVjdGl2ZSBpcyByZWNvZ25pemVkIG9ubHkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorVGVuc2lsaWNhJ3MgYXNzZW1ibGVyLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIC5iZWdpbiBbbm8tXXNjaGVkdWxlCisgICAgICAgICAuZW5kIFtuby1dc2NoZWR1bGUKKzwvcHJlPgorICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgaWdub3JlZCBhbmQgaGFzIG5vIGVmZmVjdCBvbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2NsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TY2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIwZjJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2NsLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2NsIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTYnR0bC5odG1sI1NidHRsIiB0aXRsZT0iU2J0dGwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTZWN0aW9uLmh0bWwjU2VjdGlvbiIgdGl0bGU9IlNlY3Rpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTY2wiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU2VjdGlvbi5odG1sI1NlY3Rpb24iPlNlY3Rpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTYnR0bC5odG1sI1NidHRsIj5TYnR0bDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny45OCA8Y29kZT4uc2NsIDwvY29kZT48dmFyPmNsYXNzPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzY2xfMDA3ZC1kaXJlY3RpdmUtNDQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLXN0b3JhZ2UtY2xhc3MtXzAwMjhDT0ZGXzAwMjktNDQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ09GRi1zeW1ib2wtc3RvcmFnZS1jbGFzcy00NDgiPjwvYT5TZXQgdGhlIHN0b3JhZ2UtY2xhc3MgdmFsdWUgZm9yIGEgc3ltYm9sLiAgVGhpcyBkaXJlY3RpdmUgbWF5IG9ubHkgYmUKK3VzZWQgaW5zaWRlIGEgPGNvZGU+LmRlZjwvY29kZT4vPGNvZGU+LmVuZGVmPC9jb2RlPiBwYWlyLiAgU3RvcmFnZSBjbGFzcyBtYXkgZmxhZword2hldGhlciBhIHN5bWJvbCBpcyBzdGF0aWMgb3IgZXh0ZXJuYWwsIG9yIGl0IG1heSByZWNvcmQgZnVydGhlcgorc3ltYm9saWMgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TZWNzLUJhY2tncm91bmQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NlY3MtQmFja2dyb3VuZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMjI4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TZWNzLUJhY2tncm91bmQuaHRtbApAQCAtMCwwICsxLDE1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2VjcyBCYWNrZ3JvdW5kIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIiB0aXRsZT0iU2VjdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMZC1TZWN0aW9ucy5odG1sI0xkLVNlY3Rpb25zIiB0aXRsZT0iTGQgU2VjdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTZWNzLUJhY2tncm91bmQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTGQtU2VjdGlvbnMuaHRtbCNMZC1TZWN0aW9ucyI+TGQgU2VjdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIj5TZWN0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMSBCYWNrZ3JvdW5kPC9oMz4KKworPHA+Um91Z2hseSwgYSBzZWN0aW9uIGlzIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzLCB3aXRoIG5vIGdhcHM7IGFsbCBkYXRhCismbGRxdW87aW4mcmRxdW87IHRob3NlIGFkZHJlc3NlcyBpcyB0cmVhdGVkIHRoZSBzYW1lIGZvciBzb21lIHBhcnRpY3VsYXIgcHVycG9zZS4gCitGb3IgZXhhbXBsZSB0aGVyZSBtYXkgYmUgYSAmbGRxdW87cmVhZCBvbmx5JnJkcXVvOyBzZWN0aW9uLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1saW5rZXJfMDAyYy1hbmQtYXNzZW1ibGVyLTE4NyI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlcl8wMDJjLWFuZC1saW5rZXItMTg4Ij48L2E+VGhlIGxpbmtlciA8Y29kZT5sZDwvY29kZT4gcmVhZHMgbWFueSBvYmplY3QgZmlsZXMgKHBhcnRpYWwgcHJvZ3JhbXMpIGFuZAorY29tYmluZXMgdGhlaXIgY29udGVudHMgdG8gZm9ybSBhIHJ1bm5hYmxlIHByb2dyYW0uICBXaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+CitlbWl0cyBhbiBvYmplY3QgZmlsZSwgdGhlIHBhcnRpYWwgcHJvZ3JhbSBpcyBhc3N1bWVkIHRvIHN0YXJ0IGF0IGFkZHJlc3MgMC4gCis8Y29kZT5sZDwvY29kZT4gYXNzaWducyB0aGUgZmluYWwgYWRkcmVzc2VzIGZvciB0aGUgcGFydGlhbCBwcm9ncmFtLCBzbyB0aGF0CitkaWZmZXJlbnQgcGFydGlhbCBwcm9ncmFtcyBkbyBub3Qgb3ZlcmxhcC4gIFRoaXMgaXMgYWN0dWFsbHkgYW4KK292ZXJzaW1wbGlmaWNhdGlvbiwgYnV0IGl0IHN1ZmZpY2VzIHRvIGV4cGxhaW4gaG93IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHVzZXMKK3NlY3Rpb25zLgorCisgICA8cD48Y29kZT5sZDwvY29kZT4gbW92ZXMgYmxvY2tzIG9mIGJ5dGVzIG9mIHlvdXIgcHJvZ3JhbSB0byB0aGVpciBydW4tdGltZQorYWRkcmVzc2VzLiAgVGhlc2UgYmxvY2tzIHNsaWRlIHRvIHRoZWlyIHJ1bi10aW1lIGFkZHJlc3NlcyBhcyByaWdpZAordW5pdHM7IHRoZWlyIGxlbmd0aCBkb2VzIG5vdCBjaGFuZ2UgYW5kIG5laXRoZXIgZG9lcyB0aGUgb3JkZXIgb2YgYnl0ZXMKK3dpdGhpbiB0aGVtLiAgU3VjaCBhIHJpZ2lkIHVuaXQgaXMgY2FsbGVkIGEgPGVtPnNlY3Rpb248L2VtPi4gIEFzc2lnbmluZworcnVuLXRpbWUgYWRkcmVzc2VzIHRvIHNlY3Rpb25zIGlzIGNhbGxlZCA8ZGZuPnJlbG9jYXRpb248L2Rmbj4uICBJdCBpbmNsdWRlcwordGhlIHRhc2sgb2YgYWRqdXN0aW5nIG1lbnRpb25zIG9mIG9iamVjdC1maWxlIGFkZHJlc3NlcyBzbyB0aGV5IHJlZmVyIHRvCit0aGUgcHJvcGVyIHJ1bi10aW1lIGFkZHJlc3Nlcy4gCitGb3IgdGhlIEg4LzMwMCwgYW5kIGZvciB0aGUgUmVuZXNhcyAvIFN1cGVySCBTSCwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHBhZHMgc2VjdGlvbnMgaWYgbmVlZGVkIHRvCitlbnN1cmUgdGhleSBlbmQgb24gYSB3b3JkIChzaXh0ZWVuIGJpdCkgYm91bmRhcnkuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXN0YW5kYXJkLWFzc2VtYmxlci1zZWN0aW9ucy0xODkiPjwvYT5BbiBvYmplY3QgZmlsZSB3cml0dGVuIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGhhcyBhdCBsZWFzdCB0aHJlZSBzZWN0aW9ucywgYW55CitvZiB3aGljaCBtYXkgYmUgZW1wdHkuICBUaGVzZSBhcmUgbmFtZWQgPGRmbj50ZXh0PC9kZm4+LCA8ZGZuPmRhdGE8L2Rmbj4gYW5kCis8ZGZuPmJzczwvZGZuPiBzZWN0aW9ucy4KKworICAgPHA+V2hlbiBpdCBnZW5lcmF0ZXMgQ09GRiBvciBFTEYgb3V0cHV0LAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gY2FuIGFsc28gZ2VuZXJhdGUgd2hhdGV2ZXIgb3RoZXIgbmFtZWQgc2VjdGlvbnMgeW91IHNwZWNpZnkKK3VzaW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zZWN0aW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj48Y29kZT4uc2VjdGlvbjwvY29kZT48L2E+KS4gCitJZiB5b3UgZG8gbm90IHVzZSBhbnkgZGlyZWN0aXZlcyB0aGF0IHBsYWNlIG91dHB1dCBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOworb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9ucywgdGhlc2Ugc2VjdGlvbnMgc3RpbGwgZXhpc3QsIGJ1dCBhcmUgZW1wdHkuCisKKyAgIDxwPldoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gZ2VuZXJhdGVzIFNPTSBvciBFTEYgb3V0cHV0IGZvciB0aGUgSFBQQSwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGNhbiBhbHNvIGdlbmVyYXRlIHdoYXRldmVyIG90aGVyIG5hbWVkIHNlY3Rpb25zIHlvdQorc3BlY2lmeSB1c2luZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3BhY2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnN1YnNwYWNlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZXMuICBTZWUKKzxjaXRlPkhQOTAwMCBTZXJpZXMgODAwIEFzc2VtYmx5IExhbmd1YWdlIFJlZmVyZW5jZSBNYW51YWw8L2NpdGU+CisoSFAgOTI0MzItOTAwMDEpIGZvciBkZXRhaWxzIG9uIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zcGFjZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3Vic3BhY2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2Fzc2VtYmxlciBkaXJlY3RpdmVzLgorCisgICA8cD5BZGRpdGlvbmFsbHksIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHVzZXMgZGlmZmVyZW50IG5hbWVzIGZvciB0aGUgc3RhbmRhcmQKK3RleHQsIGRhdGEsIGFuZCBic3Mgc2VjdGlvbnMgd2hlbiBnZW5lcmF0aW5nIFNPTSBvdXRwdXQuICBQcm9ncmFtIHRleHQKK2lzIHBsYWNlZCBpbnRvIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiRDT0RFJDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLCBkYXRhIGludG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kREFUQSQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZAorQlNTIGludG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kQlNTJDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+V2l0aGluIHRoZSBvYmplY3QgZmlsZSwgdGhlIHRleHQgc2VjdGlvbiBzdGFydHMgYXQgYWRkcmVzcyA8Y29kZT4wPC9jb2RlPiwgdGhlCitkYXRhIHNlY3Rpb24gZm9sbG93cywgYW5kIHRoZSBic3Mgc2VjdGlvbiBmb2xsb3dzIHRoZSBkYXRhIHNlY3Rpb24uCisKKyAgIDxwPldoZW4gZ2VuZXJhdGluZyBlaXRoZXIgU09NIG9yIEVMRiBvdXRwdXQgZmlsZXMgb24gdGhlIEhQUEEsIHRoZSB0ZXh0CitzZWN0aW9uIHN0YXJ0cyBhdCBhZGRyZXNzIDxjb2RlPjA8L2NvZGU+LCB0aGUgZGF0YSBzZWN0aW9uIGF0IGFkZHJlc3MKKzxjb2RlPjB4NDAwMDAwMDwvY29kZT4sIGFuZCB0aGUgYnNzIHNlY3Rpb24gZm9sbG93cyB0aGUgZGF0YSBzZWN0aW9uLgorCisgICA8cD5UbyBsZXQgPGNvZGU+bGQ8L2NvZGU+IGtub3cgd2hpY2ggZGF0YSBjaGFuZ2VzIHdoZW4gdGhlIHNlY3Rpb25zIGFyZQorcmVsb2NhdGVkLCBhbmQgaG93IHRvIGNoYW5nZSB0aGF0IGRhdGEsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGFsc28gd3JpdGVzIHRvIHRoZQorb2JqZWN0IGZpbGUgZGV0YWlscyBvZiB0aGUgcmVsb2NhdGlvbiBuZWVkZWQuICBUbyBwZXJmb3JtIHJlbG9jYXRpb24KKzxjb2RlPmxkPC9jb2RlPiBtdXN0IGtub3csIGVhY2ggdGltZSBhbiBhZGRyZXNzIGluIHRoZSBvYmplY3QKK2ZpbGUgaXMgbWVudGlvbmVkOgorICAgICA8dWw+Cis8bGk+V2hlcmUgaW4gdGhlIG9iamVjdCBmaWxlIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyByZWZlcmVuY2UgdG8KK2FuIGFkZHJlc3M/IAorPGxpPkhvdyBsb25nIChpbiBieXRlcykgaXMgdGhpcyByZWZlcmVuY2U/IAorPGxpPldoaWNoIHNlY3Rpb24gZG9lcyB0aGUgYWRkcmVzcyByZWZlciB0bz8gIFdoYXQgaXMgdGhlIG51bWVyaWMgdmFsdWUgb2YKKyAgICAgPHByZSBjbGFzcz0iZGlzcGxheSI+ICAgICAgICAgICg8dmFyPmFkZHJlc3M8L3Zhcj4pICZtaW51czsgKDx2YXI+c3RhcnQtYWRkcmVzcyBvZiBzZWN0aW9uPC92YXI+KT8KKzwvcHJlPgorICAgICA8bGk+SXMgdGhlIHJlZmVyZW5jZSB0byBhbiBhZGRyZXNzICZsZHF1bztQcm9ncmFtLUNvdW50ZXIgcmVsYXRpdmUmcmRxdW87PyAKKzwvdWw+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWFkZHJlc3Nlc18wMDJjLWZvcm1hdC1vZi0xOTAiPjwvYT48YSBuYW1lPSJpbmRleC1zZWN0aW9uXzAwMmRyZWxhdGl2ZS1hZGRyZXNzaW5nLTE5MSI+PC9hPkluIGZhY3QsIGV2ZXJ5IGFkZHJlc3MgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gZXZlciB1c2VzIGlzIGV4cHJlc3NlZCBhcworPHByZSBjbGFzcz0iZGlzcGxheSI+ICAgICAoPHZhcj5zZWN0aW9uPC92YXI+KSArICg8dmFyPm9mZnNldCBpbnRvIHNlY3Rpb248L3Zhcj4pCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+RnVydGhlciwgbW9zdCBleHByZXNzaW9ucyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBjb21wdXRlcyBoYXZlIHRoaXMgc2VjdGlvbi1yZWxhdGl2ZQorbmF0dXJlLiAKKyhGb3Igc29tZSBvYmplY3QgZm9ybWF0cywgc3VjaCBhcyBTT00gZm9yIHRoZSBIUFBBLCBzb21lIGV4cHJlc3Npb25zIGFyZQorc3ltYm9sLXJlbGF0aXZlIGluc3RlYWQuKQorCisgICA8cD5JbiB0aGlzIG1hbnVhbCB3ZSB1c2UgdGhlIG5vdGF0aW9uIHs8dmFyPnNlY25hbWU8L3Zhcj4gPHZhcj5OPC92YXI+fSB0byBtZWFuICZsZHF1bztvZmZzZXQKKzx2YXI+TjwvdmFyPiBpbnRvIHNlY3Rpb24gPHZhcj5zZWNuYW1lPC92YXI+LiZyZHF1bzsKKworICAgPHA+QXBhcnQgZnJvbSB0ZXh0LCBkYXRhIGFuZCBic3Mgc2VjdGlvbnMgeW91IG5lZWQgdG8ga25vdyBhYm91dCB0aGUKKzxkZm4+YWJzb2x1dGU8L2Rmbj4gc2VjdGlvbi4gIFdoZW4gPGNvZGU+bGQ8L2NvZGU+IG1peGVzIHBhcnRpYWwgcHJvZ3JhbXMsCithZGRyZXNzZXMgaW4gdGhlIGFic29sdXRlIHNlY3Rpb24gcmVtYWluIHVuY2hhbmdlZC4gIEZvciBleGFtcGxlLCBhZGRyZXNzCis8Y29kZT57YWJzb2x1dGUgMH08L2NvZGU+IGlzICZsZHF1bztyZWxvY2F0ZWQmcmRxdW87IHRvIHJ1bi10aW1lIGFkZHJlc3MgMCBieQorPGNvZGU+bGQ8L2NvZGU+LiAgQWx0aG91Z2ggdGhlIGxpbmtlciBuZXZlciBhcnJhbmdlcyB0d28gcGFydGlhbCBwcm9ncmFtcycKK2RhdGEgc2VjdGlvbnMgd2l0aCBvdmVybGFwcGluZyBhZGRyZXNzZXMgYWZ0ZXIgbGlua2luZywgPGVtPmJ5IGRlZmluaXRpb248L2VtPgordGhlaXIgYWJzb2x1dGUgc2VjdGlvbnMgbXVzdCBvdmVybGFwLiAgQWRkcmVzcyA8Y29kZT57YWJzb2x1dGUgMjM5fTwvY29kZT4gaW4gb25lCitwYXJ0IG9mIGEgcHJvZ3JhbSBpcyBhbHdheXMgdGhlIHNhbWUgYWRkcmVzcyB3aGVuIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgYXMKK2FkZHJlc3MgPGNvZGU+e2Fic29sdXRlIDIzOX08L2NvZGU+IGluIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBwcm9ncmFtLgorCisgICA8cD5UaGUgaWRlYSBvZiBzZWN0aW9ucyBpcyBleHRlbmRlZCB0byB0aGUgPGRmbj51bmRlZmluZWQ8L2Rmbj4gc2VjdGlvbi4gIEFueQorYWRkcmVzcyB3aG9zZSBzZWN0aW9uIGlzIHVua25vd24gYXQgYXNzZW1ibHkgdGltZSBpcyBieSBkZWZpbml0aW9uCityZW5kZXJlZCB7dW5kZWZpbmVkIDx2YXI+VTwvdmFyPn0mbWRhc2g7d2hlcmUgPHZhcj5VPC92YXI+IGlzIGZpbGxlZCBpbiBsYXRlci4gCitTaW5jZSBudW1iZXJzIGFyZSBhbHdheXMgZGVmaW5lZCwgdGhlIG9ubHkgd2F5IHRvIGdlbmVyYXRlIGFuIHVuZGVmaW5lZAorYWRkcmVzcyBpcyB0byBtZW50aW9uIGFuIHVuZGVmaW5lZCBzeW1ib2wuICBBIHJlZmVyZW5jZSB0byBhIG5hbWVkCitjb21tb24gYmxvY2sgd291bGQgYmUgc3VjaCBhIHN5bWJvbDogaXRzIHZhbHVlIGlzIHVua25vd24gYXQgYXNzZW1ibHkKK3RpbWUgc28gaXQgaGFzIHNlY3Rpb24gPGVtPnVuZGVmaW5lZDwvZW0+LgorCisgICA8cD5CeSBhbmFsb2d5IHRoZSB3b3JkIDxlbT5zZWN0aW9uPC9lbT4gaXMgdXNlZCB0byBkZXNjcmliZSBncm91cHMgb2Ygc2VjdGlvbnMgaW4KK3RoZSBsaW5rZWQgcHJvZ3JhbS4gIDxjb2RlPmxkPC9jb2RlPiBwdXRzIGFsbCBwYXJ0aWFsIHByb2dyYW1zJyB0ZXh0CitzZWN0aW9ucyBpbiBjb250aWd1b3VzIGFkZHJlc3NlcyBpbiB0aGUgbGlua2VkIHByb2dyYW0uICBJdCBpcworY3VzdG9tYXJ5IHRvIHJlZmVyIHRvIHRoZSA8ZW0+dGV4dCBzZWN0aW9uPC9lbT4gb2YgYSBwcm9ncmFtLCBtZWFuaW5nIGFsbAordGhlIGFkZHJlc3NlcyBvZiBhbGwgcGFydGlhbCBwcm9ncmFtcycgdGV4dCBzZWN0aW9ucy4gIExpa2V3aXNlIGZvcgorZGF0YSBhbmQgYnNzIHNlY3Rpb25zLgorCisgICA8cD5Tb21lIHNlY3Rpb25zIGFyZSBtYW5pcHVsYXRlZCBieSA8Y29kZT5sZDwvY29kZT47IG90aGVycyBhcmUgaW52ZW50ZWQgZm9yCit1c2Ugb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYW5kIGhhdmUgbm8gbWVhbmluZyBleGNlcHQgZHVyaW5nIGFzc2VtYmx5LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TZWN0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TZWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwYWU0ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NlY3Rpb24uaHRtbApAQCAtMCwwICsxLDE5OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2VjdGlvbiAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2NsLmh0bWwjU2NsIiB0aXRsZT0iU2NsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU2V0Lmh0bWwjU2V0IiB0aXRsZT0iU2V0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2VjdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTZXQuaHRtbCNTZXQiPlNldDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNjbC5odG1sI1NjbCI+U2NsPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43Ljk5IDxjb2RlPi5zZWN0aW9uIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1uYW1lZC1zZWN0aW9uLTQ0OSI+PC9hPlVzZSB0aGUgPGNvZGU+LnNlY3Rpb248L2NvZGU+IGRpcmVjdGl2ZSB0byBhc3NlbWJsZSB0aGUgZm9sbG93aW5nIGNvZGUgaW50byBhIHNlY3Rpb24KK25hbWVkIDx2YXI+bmFtZTwvdmFyPi4KKworICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRhcmdldHMgdGhhdCBhY3R1YWxseSBzdXBwb3J0IGFyYml0cmFyaWx5CituYW1lZCBzZWN0aW9uczsgb24gPGNvZGU+YS5vdXQ8L2NvZGU+IHRhcmdldHMsIGZvciBleGFtcGxlLCBpdCBpcyBub3QgYWNjZXB0ZWQsIGV2ZW4KK3dpdGggYSBzdGFuZGFyZCA8Y29kZT5hLm91dDwvY29kZT4gc2VjdGlvbiBuYW1lLgorCis8IS0tIG9ubHkgcHJpbnQgdGhlIGV4dHJhIGhlYWRpbmcgaWYgYm90aCBDT0ZGIGFuZCBFTEYgYXJlIHNldCAtLT4KKzxoNCBjbGFzcz0ic3ViaGVhZGluZyI+Q09GRiBWZXJzaW9uPC9oND4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZWN0aW9uXzAwN2QtZGlyZWN0aXZlLV8wMDI4Q09GRi12ZXJzaW9uXzAwMjktNDUwIj48L2E+Rm9yIENPRkYgdGFyZ2V0cywgdGhlIDxjb2RlPi5zZWN0aW9uPC9jb2RlPiBkaXJlY3RpdmUgaXMgdXNlZCBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZword2F5czoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5zZWN0aW9uIDx2YXI+bmFtZTwvdmFyPlssICI8dmFyPmZsYWdzPC92YXI+Il0KKyAgICAgLnNlY3Rpb24gPHZhcj5uYW1lPC92YXI+WywgPHZhcj5zdWJzZWN0aW9uPC92YXI+XQorPC9wcmU+CisgICA8cD5JZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgaXMgcXVvdGVkLCBpdCBpcyB0YWtlbiBhcyBmbGFncyB0byB1c2UgZm9yIHRoZQorc2VjdGlvbi4gIEVhY2ggZmxhZyBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIuICBUaGUgZm9sbG93aW5nIGZsYWdzIGFyZSByZWNvZ25pemVkOgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YjwvY29kZT48ZGQ+YnNzIHNlY3Rpb24gKHVuaW5pdGlhbGl6ZWQgZGF0YSkKKzxicj48ZHQ+PGNvZGU+bjwvY29kZT48ZGQ+c2VjdGlvbiBpcyBub3QgbG9hZGVkCis8YnI+PGR0Pjxjb2RlPnc8L2NvZGU+PGRkPndyaXRhYmxlIHNlY3Rpb24KKzxicj48ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+ZGF0YSBzZWN0aW9uCis8YnI+PGR0Pjxjb2RlPnI8L2NvZGU+PGRkPnJlYWQtb25seSBzZWN0aW9uCis8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPmV4ZWN1dGFibGUgc2VjdGlvbgorPGJyPjxkdD48Y29kZT5zPC9jb2RlPjxkZD5zaGFyZWQgc2VjdGlvbiAobWVhbmluZ2Z1bCBmb3IgUEUgdGFyZ2V0cykKKzxicj48ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+aWdub3JlZC4gIChGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBFTEYgdmVyc2lvbikKKzxicj48ZHQ+PGNvZGU+eTwvY29kZT48ZGQ+c2VjdGlvbiBpcyBub3QgcmVhZGFibGUgKG1lYW5pbmdmdWwgZm9yIFBFIHRhcmdldHMpCis8YnI+PGR0Pjxjb2RlPjAtOTwvY29kZT48ZGQ+c2luZ2xlLWRpZ2l0IHBvd2VyLW9mLXR3byBzZWN0aW9uIGFsaWdubWVudCAoR05VIGV4dGVuc2lvbikKKzwvZGw+CisKKyAgIDxwPklmIG5vIGZsYWdzIGFyZSBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGZsYWdzIGRlcGVuZCB1cG9uIHRoZSBzZWN0aW9uIG5hbWUuICBJZgordGhlIHNlY3Rpb24gbmFtZSBpcyBub3QgcmVjb2duaXplZCwgdGhlIGRlZmF1bHQgd2lsbCBiZSBmb3IgdGhlIHNlY3Rpb24gdG8gYmUKK2xvYWRlZCBhbmQgd3JpdGFibGUuICBOb3RlIHRoZSA8Y29kZT5uPC9jb2RlPiBhbmQgPGNvZGU+dzwvY29kZT4gZmxhZ3MgcmVtb3ZlIGF0dHJpYnV0ZXMKK2Zyb20gdGhlIHNlY3Rpb24sIHJhdGhlciB0aGFuIGFkZGluZyB0aGVtLCBzbyBpZiB0aGV5IGFyZSB1c2VkIG9uIHRoZWlyIG93biBpdAord2lsbCBiZSBhcyBpZiBubyBmbGFncyBoYWQgYmVlbiBzcGVjaWZpZWQgYXQgYWxsLgorCisgICA8cD5JZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgdG8gdGhlIDxjb2RlPi5zZWN0aW9uPC9jb2RlPiBkaXJlY3RpdmUgaXMgbm90IHF1b3RlZCwgaXQgaXMKK3Rha2VuIGFzIGEgc3Vic2VjdGlvbiBudW1iZXIgKHNlZSA8YSBocmVmPSJTdWJfMDAyZFNlY3Rpb25zLmh0bWwjU3ViXzAwMmRTZWN0aW9ucyI+U3ViLVNlY3Rpb25zPC9hPikuCisKKzwhLS0gb25seSBwcmludCB0aGUgZXh0cmEgaGVhZGluZyBpZiBib3RoIENPRkYgYW5kIEVMRiBhcmUgc2V0IC0tPgorPGg0IGNsYXNzPSJzdWJoZWFkaW5nIj5FTEYgVmVyc2lvbjwvaDQ+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVNlY3Rpb24tU3RhY2stNDUxIj48L2E+VGhpcyBpcyBvbmUgb2YgdGhlIEVMRiBzZWN0aW9uIHN0YWNrIG1hbmlwdWxhdGlvbiBkaXJlY3RpdmVzLiAgVGhlIG90aGVycyBhcmUKKzxjb2RlPi5zdWJzZWN0aW9uPC9jb2RlPiAoc2VlIDxhIGhyZWY9IlN1YlNlY3Rpb24uaHRtbCNTdWJTZWN0aW9uIj5TdWJTZWN0aW9uPC9hPiksIDxjb2RlPi5wdXNoc2VjdGlvbjwvY29kZT4KKyhzZWUgPGEgaHJlZj0iUHVzaFNlY3Rpb24uaHRtbCNQdXNoU2VjdGlvbiI+UHVzaFNlY3Rpb248L2E+KSwgPGNvZGU+LnBvcHNlY3Rpb248L2NvZGU+IChzZWUgPGEgaHJlZj0iUG9wU2VjdGlvbi5odG1sI1BvcFNlY3Rpb24iPlBvcFNlY3Rpb248L2E+KSwgYW5kCis8Y29kZT4ucHJldmlvdXM8L2NvZGU+IChzZWUgPGEgaHJlZj0iUHJldmlvdXMuaHRtbCNQcmV2aW91cyI+UHJldmlvdXM8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZWN0aW9uXzAwN2QtZGlyZWN0aXZlLV8wMDI4RUxGLXZlcnNpb25fMDAyOS00NTIiPjwvYT5Gb3IgRUxGIHRhcmdldHMsIHRoZSA8Y29kZT4uc2VjdGlvbjwvY29kZT4gZGlyZWN0aXZlIGlzIHVzZWQgbGlrZSB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLnNlY3Rpb24gPHZhcj5uYW1lPC92YXI+IFssICI8dmFyPmZsYWdzPC92YXI+IlssIEA8dmFyPnR5cGU8L3Zhcj5bLDx2YXI+ZmxhZ19zcGVjaWZpY19hcmd1bWVudHM8L3Zhcj5dXV0KKzwvcHJlPgorICAgPHA+VGhlIG9wdGlvbmFsIDx2YXI+ZmxhZ3M8L3Zhcj4gYXJndW1lbnQgaXMgYSBxdW90ZWQgc3RyaW5nIHdoaWNoIG1heSBjb250YWluIGFueQorY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+c2VjdGlvbiBpcyBhbGxvY2F0YWJsZQorPGJyPjxkdD48Y29kZT5lPC9jb2RlPjxkZD5zZWN0aW9uIGlzIGV4Y2x1ZGVkIGZyb20gZXhlY3V0YWJsZSBhbmQgc2hhcmVkIGxpYnJhcnkuIAorPGJyPjxkdD48Y29kZT53PC9jb2RlPjxkZD5zZWN0aW9uIGlzIHdyaXRhYmxlCis8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPnNlY3Rpb24gaXMgZXhlY3V0YWJsZQorPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5zZWN0aW9uIGlzIG1lcmdlYWJsZQorPGJyPjxkdD48Y29kZT5TPC9jb2RlPjxkZD5zZWN0aW9uIGNvbnRhaW5zIHplcm8gdGVybWluYXRlZCBzdHJpbmdzCis8YnI+PGR0Pjxjb2RlPkc8L2NvZGU+PGRkPnNlY3Rpb24gaXMgYSBtZW1iZXIgb2YgYSBzZWN0aW9uIGdyb3VwCis8YnI+PGR0Pjxjb2RlPlQ8L2NvZGU+PGRkPnNlY3Rpb24gaXMgdXNlZCBmb3IgdGhyZWFkLWxvY2FsLXN0b3JhZ2UKKzxicj48ZHQ+PGNvZGU+PzwvY29kZT48ZGQ+c2VjdGlvbiBpcyBhIG1lbWJlciBvZiB0aGUgcHJldmlvdXNseS1jdXJyZW50IHNlY3Rpb24ncyBncm91cCwgaWYgYW55Cis8L2RsPgorCisgICA8cD5UaGUgb3B0aW9uYWwgPHZhcj50eXBlPC92YXI+IGFyZ3VtZW50IG1heSBjb250YWluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKKyAgICAgPGRsPgorPGR0Pjxjb2RlPkBwcm9nYml0czwvY29kZT48ZGQ+c2VjdGlvbiBjb250YWlucyBkYXRhCis8YnI+PGR0Pjxjb2RlPkBub2JpdHM8L2NvZGU+PGRkPnNlY3Rpb24gZG9lcyBub3QgY29udGFpbiBkYXRhIChpLmUuLCBzZWN0aW9uIG9ubHkgb2NjdXBpZXMgc3BhY2UpCis8YnI+PGR0Pjxjb2RlPkBub3RlPC9jb2RlPjxkZD5zZWN0aW9uIGNvbnRhaW5zIGRhdGEgd2hpY2ggaXMgdXNlZCBieSB0aGluZ3Mgb3RoZXIgdGhhbiB0aGUgcHJvZ3JhbQorPGJyPjxkdD48Y29kZT5AaW5pdF9hcnJheTwvY29kZT48ZGQ+c2VjdGlvbiBjb250YWlucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBpbml0IGZ1bmN0aW9ucworPGJyPjxkdD48Y29kZT5AZmluaV9hcnJheTwvY29kZT48ZGQ+c2VjdGlvbiBjb250YWlucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBmaW5pc2ggZnVuY3Rpb25zCis8YnI+PGR0Pjxjb2RlPkBwcmVpbml0X2FycmF5PC9jb2RlPjxkZD5zZWN0aW9uIGNvbnRhaW5zIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHByZS1pbml0IGZ1bmN0aW9ucworPC9kbD4KKworICAgPHA+TWFueSB0YXJnZXRzIG9ubHkgc3VwcG9ydCB0aGUgZmlyc3QgdGhyZWUgc2VjdGlvbiB0eXBlcy4KKworICAgPHA+Tm90ZSBvbiB0YXJnZXRzIHdoZXJlIHRoZSA8Y29kZT5APC9jb2RlPiBjaGFyYWN0ZXIgaXMgdGhlIHN0YXJ0IG9mIGEgY29tbWVudCAoZWcKK0FSTSkgdGhlbiBhbm90aGVyIGNoYXJhY3RlciBpcyB1c2VkIGluc3RlYWQuICBGb3IgZXhhbXBsZSB0aGUgQVJNIHBvcnQgdXNlcyB0aGUKKzxjb2RlPiU8L2NvZGU+IGNoYXJhY3Rlci4KKworICAgPHA+SWYgPHZhcj5mbGFnczwvdmFyPiBjb250YWlucyB0aGUgPGNvZGU+TTwvY29kZT4gc3ltYm9sIHRoZW4gdGhlIDx2YXI+dHlwZTwvdmFyPiBhcmd1bWVudCBtdXN0CitiZSBzcGVjaWZpZWQgYXMgd2VsbCBhcyBhbiBleHRyYSBhcmd1bWVudCZtZGFzaDs8dmFyPmVudHNpemU8L3Zhcj4mbWRhc2g7bGlrZSB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLnNlY3Rpb24gPHZhcj5uYW1lPC92YXI+ICwgIjx2YXI+ZmxhZ3M8L3Zhcj4iTSwgQDx2YXI+dHlwZTwvdmFyPiwgPHZhcj5lbnRzaXplPC92YXI+Cis8L3ByZT4KKyAgIDxwPlNlY3Rpb25zIHdpdGggdGhlIDxjb2RlPk08L2NvZGU+IGZsYWcgYnV0IG5vdCA8Y29kZT5TPC9jb2RlPiBmbGFnIG11c3QgY29udGFpbiBmaXhlZCBzaXplCitjb25zdGFudHMsIGVhY2ggPHZhcj5lbnRzaXplPC92YXI+IG9jdGV0cyBsb25nLiBTZWN0aW9ucyB3aXRoIGJvdGggPGNvZGU+TTwvY29kZT4gYW5kCis8Y29kZT5TPC9jb2RlPiBtdXN0IGNvbnRhaW4gemVybyB0ZXJtaW5hdGVkIHN0cmluZ3Mgd2hlcmUgZWFjaCBjaGFyYWN0ZXIgaXMKKzx2YXI+ZW50c2l6ZTwvdmFyPiBieXRlcyBsb25nLiBUaGUgbGlua2VyIG1heSByZW1vdmUgZHVwbGljYXRlcyB3aXRoaW4gc2VjdGlvbnMgd2l0aAordGhlIHNhbWUgbmFtZSwgc2FtZSBlbnRpdHkgc2l6ZSBhbmQgc2FtZSBmbGFncy4gIDx2YXI+ZW50c2l6ZTwvdmFyPiBtdXN0IGJlIGFuCithYnNvbHV0ZSBleHByZXNzaW9uLiAgRm9yIHNlY3Rpb25zIHdpdGggYm90aCA8Y29kZT5NPC9jb2RlPiBhbmQgPGNvZGU+UzwvY29kZT4sIGEgc3RyaW5nCit3aGljaCBpcyBhIHN1ZmZpeCBvZiBhIGxhcmdlciBzdHJpbmcgaXMgY29uc2lkZXJlZCBhIGR1cGxpY2F0ZS4gIFRodXMKKzxjb2RlPiJkZWYiPC9jb2RlPiB3aWxsIGJlIG1lcmdlZCB3aXRoIDxjb2RlPiJhYmNkZWYiPC9jb2RlPjsgIEEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdAorPGNvZGU+ImRlZiI8L2NvZGU+IHdpbGwgYmUgY2hhbmdlZCB0byBhIHJlZmVyZW5jZSB0byA8Y29kZT4iYWJjZGVmIiszPC9jb2RlPi4KKworICAgPHA+SWYgPHZhcj5mbGFnczwvdmFyPiBjb250YWlucyB0aGUgPGNvZGU+RzwvY29kZT4gc3ltYm9sIHRoZW4gdGhlIDx2YXI+dHlwZTwvdmFyPiBhcmd1bWVudCBtdXN0CitiZSBwcmVzZW50IGFsb25nIHdpdGggYW4gYWRkaXRpb25hbCBmaWVsZCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAuc2VjdGlvbiA8dmFyPm5hbWU8L3Zhcj4gLCAiPHZhcj5mbGFnczwvdmFyPiJHLCBAPHZhcj50eXBlPC92YXI+LCA8dmFyPkdyb3VwTmFtZTwvdmFyPlssIDx2YXI+bGlua2FnZTwvdmFyPl0KKzwvcHJlPgorICAgPHA+VGhlIDx2YXI+R3JvdXBOYW1lPC92YXI+IGZpZWxkIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBncm91cCB0byB3aGljaCB0aGlzCitwYXJ0aWN1bGFyIHNlY3Rpb24gYmVsb25ncy4gIFRoZSBvcHRpb25hbCBsaW5rYWdlIGZpZWxkIGNhbiBjb250YWluOgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+Y29tZGF0PC9jb2RlPjxkZD5pbmRpY2F0ZXMgdGhhdCBvbmx5IG9uZSBjb3B5IG9mIHRoaXMgc2VjdGlvbiBzaG91bGQgYmUgcmV0YWluZWQKKzxicj48ZHQ+PGNvZGU+LmdudS5saW5rb25jZTwvY29kZT48ZGQ+YW4gYWxpYXMgZm9yIGNvbWRhdAorPC9kbD4KKworICAgPHA+Tm90ZTogaWYgYm90aCB0aGUgPHZhcj5NPC92YXI+IGFuZCA8dmFyPkc8L3Zhcj4gZmxhZ3MgYXJlIHByZXNlbnQgdGhlbiB0aGUgZmllbGRzIGZvcgordGhlIE1lcmdlIGZsYWcgc2hvdWxkIGNvbWUgZmlyc3QsIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5zZWN0aW9uIDx2YXI+bmFtZTwvdmFyPiAsICI8dmFyPmZsYWdzPC92YXI+Ik1HLCBAPHZhcj50eXBlPC92YXI+LCA8dmFyPmVudHNpemU8L3Zhcj4sIDx2YXI+R3JvdXBOYW1lPC92YXI+WywgPHZhcj5saW5rYWdlPC92YXI+XQorPC9wcmU+CisgICA8cD5JZiA8dmFyPmZsYWdzPC92YXI+IGNvbnRhaW5zIHRoZSA8Y29kZT4/PC9jb2RlPiBzeW1ib2wgdGhlbiBpdCBtYXkgbm90IGFsc28gY29udGFpbiB0aGUKKzxjb2RlPkc8L2NvZGU+IHN5bWJvbCBhbmQgdGhlIDx2YXI+R3JvdXBOYW1lPC92YXI+IG9yIDx2YXI+bGlua2FnZTwvdmFyPiBmaWVsZHMgc2hvdWxkIG5vdCBiZQorcHJlc2VudC4gIEluc3RlYWQsIDxjb2RlPj88L2NvZGU+IHNheXMgdG8gY29uc2lkZXIgdGhlIHNlY3Rpb24gdGhhdCdzIGN1cnJlbnQgYmVmb3JlCit0aGlzIGRpcmVjdGl2ZS4gIElmIHRoYXQgc2VjdGlvbiB1c2VkIDxjb2RlPkc8L2NvZGU+LCB0aGVuIHRoZSBuZXcgc2VjdGlvbiB3aWxsIHVzZQorPGNvZGU+RzwvY29kZT4gd2l0aCB0aG9zZSBzYW1lIDx2YXI+R3JvdXBOYW1lPC92YXI+IGFuZCA8dmFyPmxpbmthZ2U8L3Zhcj4gZmllbGRzIGltcGxpY2l0bHkuIAorSWYgbm90LCB0aGVuIHRoZSA8Y29kZT4/PC9jb2RlPiBzeW1ib2wgaGFzIG5vIGVmZmVjdC4KKworICAgPHA+SWYgbm8gZmxhZ3MgYXJlIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgZmxhZ3MgZGVwZW5kIHVwb24gdGhlIHNlY3Rpb24gbmFtZS4gIElmCit0aGUgc2VjdGlvbiBuYW1lIGlzIG5vdCByZWNvZ25pemVkLCB0aGUgZGVmYXVsdCB3aWxsIGJlIGZvciB0aGUgc2VjdGlvbiB0byBoYXZlCitub25lIG9mIHRoZSBhYm92ZSBmbGFnczogaXQgd2lsbCBub3QgYmUgYWxsb2NhdGVkIGluIG1lbW9yeSwgbm9yIHdyaXRhYmxlLCBub3IKK2V4ZWN1dGFibGUuICBUaGUgc2VjdGlvbiB3aWxsIGNvbnRhaW4gZGF0YS4KKworICAgPHA+Rm9yIEVMRiB0YXJnZXRzLCB0aGUgYXNzZW1ibGVyIHN1cHBvcnRzIGFub3RoZXIgdHlwZSBvZiA8Y29kZT4uc2VjdGlvbjwvY29kZT4KK2RpcmVjdGl2ZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBTb2xhcmlzIGFzc2VtYmxlcjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5zZWN0aW9uICI8dmFyPm5hbWU8L3Zhcj4iWywgPHZhcj5mbGFnczwvdmFyPi4uLl0KKzwvcHJlPgorICAgPHA+Tm90ZSB0aGF0IHRoZSBzZWN0aW9uIG5hbWUgaXMgcXVvdGVkLiAgVGhlcmUgbWF5IGJlIGEgc2VxdWVuY2Ugb2YgY29tbWEKK3NlcGFyYXRlZCBmbGFnczoKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNhbGxvYzwvY29kZT48ZGQ+c2VjdGlvbiBpcyBhbGxvY2F0YWJsZQorPGJyPjxkdD48Y29kZT4jd3JpdGU8L2NvZGU+PGRkPnNlY3Rpb24gaXMgd3JpdGFibGUKKzxicj48ZHQ+PGNvZGU+I2V4ZWNpbnN0cjwvY29kZT48ZGQ+c2VjdGlvbiBpcyBleGVjdXRhYmxlCis8YnI+PGR0Pjxjb2RlPiNleGNsdWRlPC9jb2RlPjxkZD5zZWN0aW9uIGlzIGV4Y2x1ZGVkIGZyb20gZXhlY3V0YWJsZSBhbmQgc2hhcmVkIGxpYnJhcnkuIAorPGJyPjxkdD48Y29kZT4jdGxzPC9jb2RlPjxkZD5zZWN0aW9uIGlzIHVzZWQgZm9yIHRocmVhZCBsb2NhbCBzdG9yYWdlCis8L2RsPgorCisgICA8cD5UaGlzIGRpcmVjdGl2ZSByZXBsYWNlcyB0aGUgY3VycmVudCBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uLiAgU2VlIHRoZQorY29udGVudHMgb2YgdGhlIGdhcyB0ZXN0c3VpdGUgZGlyZWN0b3J5IDxjb2RlPmdhcy90ZXN0c3VpdGUvZ2FzL2VsZjwvY29kZT4gZm9yCitzb21lIGV4YW1wbGVzIG9mIGhvdyB0aGlzIGRpcmVjdGl2ZSBhbmQgdGhlIG90aGVyIHNlY3Rpb24gc3RhY2sgZGlyZWN0aXZlcword29yay4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2VjdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NlY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0YjAyYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NlY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2VjdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3ludGF4Lmh0bWwjU3ludGF4IiB0aXRsZT0iU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiIHRpdGxlPSJTeW1ib2xzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2VjdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiPlN5bWJvbHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTeW50YXguaHRtbCNTeW50YXgiPlN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj40IFNlY3Rpb25zIGFuZCBSZWxvY2F0aW9uPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbnMtMTg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVsb2NhdGlvbi0xODYiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlNlY3MtQmFja2dyb3VuZC5odG1sI1NlY3MtQmFja2dyb3VuZCI+U2VjcyBCYWNrZ3JvdW5kPC9hPjogICAgICAgICAgICAgIEJhY2tncm91bmQKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkxkLVNlY3Rpb25zLmh0bWwjTGQtU2VjdGlvbnMiPkxkIFNlY3Rpb25zPC9hPjogICAgICAgICAgICAgICAgICBMaW5rZXIgU2VjdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkFzLVNlY3Rpb25zLmh0bWwjQXMtU2VjdGlvbnMiPkFzIFNlY3Rpb25zPC9hPjogICAgICAgICAgICAgICAgICBBc3NlbWJsZXIgSW50ZXJuYWwgU2VjdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IlN1Yl8wMDJkU2VjdGlvbnMuaHRtbCNTdWJfMDAyZFNlY3Rpb25zIj5TdWItU2VjdGlvbnM8L2E+OiAgICAgICAgICAgICAgICAgU3ViLVNlY3Rpb25zCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJic3MuaHRtbCNic3MiPmJzczwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgICBic3MgU2VjdGlvbgorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2V0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTU2MzcwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2V0Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2V0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTZWN0aW9uLmh0bWwjU2VjdGlvbiIgdGl0bGU9IlNlY3Rpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTaG9ydC5odG1sI1Nob3J0IiB0aXRsZT0iU2hvcnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTZXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU2hvcnQuaHRtbCNTaG9ydCI+U2hvcnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTZWN0aW9uLmh0bWwjU2VjdGlvbiI+U2VjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMDAgPGNvZGU+LnNldCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNldF8wMDdkLWRpcmVjdGl2ZS00NTMiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtdmFsdWVfMDAyYy1zZXR0aW5nLTQ1NCI+PC9hPlNldCB0aGUgdmFsdWUgb2YgPHZhcj5zeW1ib2w8L3Zhcj4gdG8gPHZhcj5leHByZXNzaW9uPC92YXI+LiAgVGhpcworY2hhbmdlcyA8dmFyPnN5bWJvbDwvdmFyPidzIHZhbHVlIGFuZCB0eXBlIHRvIGNvbmZvcm0gdG8KKzx2YXI+ZXhwcmVzc2lvbjwvdmFyPi4gIElmIDx2YXI+c3ltYm9sPC92YXI+IHdhcyBmbGFnZ2VkIGFzIGV4dGVybmFsLCBpdCByZW1haW5zCitmbGFnZ2VkIChzZWUgPGEgaHJlZj0iU3ltYm9sLUF0dHJpYnV0ZXMuaHRtbCNTeW1ib2wtQXR0cmlidXRlcyI+U3ltYm9sIEF0dHJpYnV0ZXM8L2E+KS4KKworICAgPHA+WW91IG1heSA8Y29kZT4uc2V0PC9jb2RlPiBhIHN5bWJvbCBtYW55IHRpbWVzIGluIHRoZSBzYW1lIGFzc2VtYmx5LgorCisgICA8cD5JZiB5b3UgPGNvZGU+LnNldDwvY29kZT4gYSBnbG9iYWwgc3ltYm9sLCB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBvYmplY3QKK2ZpbGUgaXMgdGhlIGxhc3QgdmFsdWUgc3RvcmVkIGludG8gaXQuCisKKyAgIDxwPk9uIFo4MCA8Y29kZT5zZXQ8L2NvZGU+IGlzIGEgcmVhbCBpbnN0cnVjdGlvbiwgdXNlCismbHNxdW87PHNhbXA+PHZhcj5zeW1ib2w8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+IGRlZmwgPC9zcGFuPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvc2FtcD4mcnNxdW87IGluc3RlYWQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NldHRpbmctU3ltYm9scy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2V0dGluZy1TeW1ib2xzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjZmVlZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NldHRpbmctU3ltYm9scy5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNldHRpbmcgU3ltYm9scyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiIHRpdGxlPSJTeW1ib2xzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTGFiZWxzLmh0bWwjTGFiZWxzIiB0aXRsZT0iTGFiZWxzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjU3ltYm9sLU5hbWVzIiB0aXRsZT0iU3ltYm9sIE5hbWVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2V0dGluZy1TeW1ib2xzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN5bWJvbC1OYW1lcy5odG1sI1N5bWJvbC1OYW1lcyI+U3ltYm9sIE5hbWVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTGFiZWxzLmh0bWwjTGFiZWxzIj5MYWJlbHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyI+U3ltYm9sczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMiBHaXZpbmcgU3ltYm9scyBPdGhlciBWYWx1ZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hc3NpZ25pbmctdmFsdWVzLXRvLXN5bWJvbHMtMjExIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLXZhbHVlc18wMDJjLWFzc2lnbmluZy0yMTIiPjwvYT5BIHN5bWJvbCBjYW4gYmUgZ2l2ZW4gYW4gYXJiaXRyYXJ5IHZhbHVlIGJ5IHdyaXRpbmcgYSBzeW1ib2wsIGZvbGxvd2VkCitieSBhbiBlcXVhbHMgc2lnbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj08L3NwYW4+PC9zYW1wPiZyc3F1bzssIGZvbGxvd2VkIGJ5IGFuIGV4cHJlc3Npb24KKyhzZWUgPGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+KS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB1c2luZyB0aGUgPGNvZGU+LnNldDwvY29kZT4KK2RpcmVjdGl2ZS4gIFNlZSA8YSBocmVmPSJTZXQuaHRtbCNTZXQiPjxjb2RlPi5zZXQ8L2NvZGU+PC9hPi4gIEluIHRoZSBzYW1lIHdheSwgdXNpbmcgYSBkb3VibGUKK2VxdWFscyBzaWduICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+PTwvc3Bhbj48L3NhbXA+JnJzcXVvOyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+PTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoZXJlIHJlcHJlc2VudHMgYW4gZXF1aXZhbGVudCBvZiB0aGUKKzxjb2RlPi5lcXY8L2NvZGU+IGRpcmVjdGl2ZS4gIFNlZSA8YSBocmVmPSJFcXYuaHRtbCNFcXYiPjxjb2RlPi5lcXY8L2NvZGU+PC9hPi4KKworICAgPHA+QmxhY2tmaW4gZG9lcyBub3Qgc3VwcG9ydCBzeW1ib2wgYXNzaWdubWVudCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+PTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2hvcnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Nob3J0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4MWViNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Nob3J0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2hvcnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNldC5odG1sI1NldCIgdGl0bGU9IlNldCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNpbmdsZS5odG1sI1NpbmdsZSIgdGl0bGU9IlNpbmdsZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNob3J0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNpbmdsZS5odG1sI1NpbmdsZSI+U2luZ2xlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU2V0Lmh0bWwjU2V0Ij5TZXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTAxIDxjb2RlPi5zaG9ydCA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic2hvcnRfMDA3ZC1kaXJlY3RpdmUtNDU1Ij48L2E+PGNvZGU+LnNob3J0PC9jb2RlPiBpcyBub3JtYWxseSB0aGUgc2FtZSBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi53b3JkPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1NlZSA8YSBocmVmPSJXb3JkLmh0bWwjV29yZCI+PGNvZGU+LndvcmQ8L2NvZGU+PC9hPi4KKworICAgPHA+SW4gc29tZSBjb25maWd1cmF0aW9ucywgaG93ZXZlciwgPGNvZGU+LnNob3J0PC9jb2RlPiBhbmQgPGNvZGU+LndvcmQ8L2NvZGU+IGdlbmVyYXRlCitudW1iZXJzIG9mIGRpZmZlcmVudCBsZW5ndGhzLiAgU2VlIDxhIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2luZ2xlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TaW5nbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY4ZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2luZ2xlLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2luZ2xlIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTaG9ydC5odG1sI1Nob3J0IiB0aXRsZT0iU2hvcnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTaXplLmh0bWwjU2l6ZSIgdGl0bGU9IlNpemUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTaW5nbGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU2l6ZS5odG1sI1NpemUiPlNpemU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTaG9ydC5odG1sI1Nob3J0Ij5TaG9ydDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMDIgPGNvZGU+LnNpbmdsZSA8L2NvZGU+PHZhcj5mbG9udW1zPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzaW5nbGVfMDA3ZC1kaXJlY3RpdmUtNDU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnQtbnVtYmVycy1fMDAyOHNpbmdsZV8wMDI5LTQ1NyI+PC9hPlRoaXMgZGlyZWN0aXZlIGFzc2VtYmxlcyB6ZXJvIG9yIG1vcmUgZmxvbnVtcywgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIEl0CitoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIDxjb2RlPi5mbG9hdDwvY29kZT4uIAorVGhlIGV4YWN0IGtpbmQgb2YgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBlbWl0dGVkIGRlcGVuZHMgb24gaG93Cis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBpcyBjb25maWd1cmVkLiAgU2VlIDxhIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2l6ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2l6ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YThhMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TaXplLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2l6ZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2luZ2xlLmh0bWwjU2luZ2xlIiB0aXRsZT0iU2luZ2xlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU2tpcC5odG1sI1NraXAiIHRpdGxlPSJTa2lwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2l6ZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTa2lwLmh0bWwjU2tpcCI+U2tpcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNpbmdsZS5odG1sI1NpbmdsZSI+U2luZ2xlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjEwMyA8Y29kZT4uc2l6ZTwvY29kZT48L2gzPgorCis8cD5UaGlzIGRpcmVjdGl2ZSBpcyB1c2VkIHRvIHNldCB0aGUgc2l6ZSBhc3NvY2lhdGVkIHdpdGggYSBzeW1ib2wuCisKKzwhLS0gb25seSBwcmludCB0aGUgZXh0cmEgaGVhZGluZyBpZiBib3RoIENPRkYgYW5kIEVMRiBhcmUgc2V0IC0tPgorPGg0IGNsYXNzPSJzdWJoZWFkaW5nIj5DT0ZGIFZlcnNpb248L2g0PgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNpemVfMDA3ZC1kaXJlY3RpdmUtXzAwMjhDT0ZGLXZlcnNpb25fMDAyOS00NTgiPjwvYT5Gb3IgQ09GRiB0YXJnZXRzLCB0aGUgPGNvZGU+LnNpemU8L2NvZGU+IGRpcmVjdGl2ZSBpcyBvbmx5IHBlcm1pdHRlZCBpbnNpZGUKKzxjb2RlPi5kZWY8L2NvZGU+Lzxjb2RlPi5lbmRlZjwvY29kZT4gcGFpcnMuICBJdCBpcyB1c2VkIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5zaXplIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPgorPC9wcmU+CisgICA8IS0tIG9ubHkgcHJpbnQgdGhlIGV4dHJhIGhlYWRpbmcgaWYgYm90aCBDT0ZGIGFuZCBFTEYgYXJlIHNldCAtLT4KKzxoNCBjbGFzcz0ic3ViaGVhZGluZyI+RUxGIFZlcnNpb248L2g0PgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNpemVfMDA3ZC1kaXJlY3RpdmUtXzAwMjhFTEYtdmVyc2lvbl8wMDI5LTQ1OSI+PC9hPkZvciBFTEYgdGFyZ2V0cywgdGhlIDxjb2RlPi5zaXplPC9jb2RlPiBkaXJlY3RpdmUgaXMgdXNlZCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAuc2l6ZSA8dmFyPm5hbWU8L3Zhcj4gLCA8dmFyPmV4cHJlc3Npb248L3Zhcj4KKzwvcHJlPgorICAgPHA+VGhpcyBkaXJlY3RpdmUgc2V0cyB0aGUgc2l6ZSBhc3NvY2lhdGVkIHdpdGggYSBzeW1ib2wgPHZhcj5uYW1lPC92YXI+LiAKK1RoZSBzaXplIGluIGJ5dGVzIGlzIGNvbXB1dGVkIGZyb20gPHZhcj5leHByZXNzaW9uPC92YXI+IHdoaWNoIGNhbiBtYWtlIHVzZSBvZiBsYWJlbAorYXJpdGhtZXRpYy4gIFRoaXMgZGlyZWN0aXZlIGlzIHR5cGljYWxseSB1c2VkIHRvIHNldCB0aGUgc2l6ZSBvZiBmdW5jdGlvbgorc3ltYm9scy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2tpcC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2tpcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTdiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9Ta2lwLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2tpcCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2l6ZS5odG1sI1NpemUiIHRpdGxlPSJTaXplIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU2xlYjEyOC5odG1sI1NsZWIxMjgiIHRpdGxlPSJTbGViMTI4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2tpcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTbGViMTI4Lmh0bWwjU2xlYjEyOCI+U2xlYjEyODwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNpemUuaHRtbCNTaXplIj5TaXplPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjEwNCA8Y29kZT4uc2tpcCA8L2NvZGU+PHZhcj5zaXplPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+ZmlsbDwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic2tpcF8wMDdkLWRpcmVjdGl2ZS00NjAiPjwvYT48YSBuYW1lPSJpbmRleC1maWxsaW5nLW1lbW9yeS00NjEiPjwvYT5UaGlzIGRpcmVjdGl2ZSBlbWl0cyA8dmFyPnNpemU8L3Zhcj4gYnl0ZXMsIGVhY2ggb2YgdmFsdWUgPHZhcj5maWxsPC92YXI+LiAgQm90aAorPHZhcj5zaXplPC92YXI+IGFuZCA8dmFyPmZpbGw8L3Zhcj4gYXJlIGFic29sdXRlIGV4cHJlc3Npb25zLiAgSWYgdGhlIGNvbW1hIGFuZAorPHZhcj5maWxsPC92YXI+IGFyZSBvbWl0dGVkLCA8dmFyPmZpbGw8L3Zhcj4gaXMgYXNzdW1lZCB0byBiZSB6ZXJvLiAgVGhpcyBpcyB0aGUgc2FtZSBhcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3BhY2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NsZWIxMjguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NsZWIxMjguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDk1M2RjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU2xlYjEyOC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNsZWIxMjggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNraXAuaHRtbCNTa2lwIiB0aXRsZT0iU2tpcCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNwYWNlLmh0bWwjU3BhY2UiIHRpdGxlPSJTcGFjZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNsZWIxMjgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3BhY2UuaHRtbCNTcGFjZSI+U3BhY2U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTa2lwLmh0bWwjU2tpcCI+U2tpcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMDUgPGNvZGU+LnNsZWIxMjggPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNsZWIxMjhfMDA3ZC1kaXJlY3RpdmUtNDYyIj48L2E+PHZhcj5zbGViMTI4PC92YXI+IHN0YW5kcyBmb3IgJmxkcXVvO3NpZ25lZCBsaXR0bGUgZW5kaWFuIGJhc2UgMTI4LiZyZHF1bzsgIFRoaXMgaXMgYQorY29tcGFjdCwgdmFyaWFibGUgbGVuZ3RoIHJlcHJlc2VudGF0aW9uIG9mIG51bWJlcnMgdXNlZCBieSB0aGUgRFdBUkYKK3N5bWJvbGljIGRlYnVnZ2luZyBmb3JtYXQuICBTZWUgPGEgaHJlZj0iVWxlYjEyOC5odG1sI1VsZWIxMjgiPjxjb2RlPi51bGViMTI4PC9jb2RlPjwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYWNlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMmY2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFjZS5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNwYWNlIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTbGViMTI4Lmh0bWwjU2xlYjEyOCIgdGl0bGU9IlNsZWIxMjgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdGFiLmh0bWwjU3RhYiIgdGl0bGU9IlN0YWIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTcGFjZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTdGFiLmh0bWwjU3RhYiI+U3RhYjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNsZWIxMjguaHRtbCNTbGViMTI4Ij5TbGViMTI4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjEwNiA8Y29kZT4uc3BhY2UgPC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmZpbGw8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNwYWNlXzAwN2QtZGlyZWN0aXZlLTQ2MyI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGxpbmctbWVtb3J5LTQ2NCI+PC9hPlRoaXMgZGlyZWN0aXZlIGVtaXRzIDx2YXI+c2l6ZTwvdmFyPiBieXRlcywgZWFjaCBvZiB2YWx1ZSA8dmFyPmZpbGw8L3Zhcj4uICBCb3RoCis8dmFyPnNpemU8L3Zhcj4gYW5kIDx2YXI+ZmlsbDwvdmFyPiBhcmUgYWJzb2x1dGUgZXhwcmVzc2lvbnMuICBJZiB0aGUgY29tbWEKK2FuZCA8dmFyPmZpbGw8L3Zhcj4gYXJlIG9taXR0ZWQsIDx2YXI+ZmlsbDwvdmFyPiBpcyBhc3N1bWVkIHRvIGJlIHplcm8uICBUaGlzIGlzIHRoZSBzYW1lCithcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5za2lwPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8YmxvY2txdW90ZT4KKzxlbT5XYXJuaW5nOjwvZW0+IDxjb2RlPi5zcGFjZTwvY29kZT4gaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbWVhbmluZyBmb3IgSFBQQQordGFyZ2V0czsgdXNlIDxjb2RlPi5ibG9jazwvY29kZT4gYXMgYSBzdWJzdGl0dXRlLiAgU2VlIDxjaXRlPkhQOTAwMCBTZXJpZXMgODAwCitBc3NlbWJseSBMYW5ndWFnZSBSZWZlcmVuY2UgTWFudWFsPC9jaXRlPiAoSFAgOTI0MzItOTAwMDEpIGZvciB0aGUgbWVhbmluZyBvZiB0aGUKKzxjb2RlPi5zcGFjZTwvY29kZT4gZGlyZWN0aXZlLiAgU2VlIDxhIGhyZWY9IkhQUEEtRGlyZWN0aXZlcy5odG1sI0hQUEEtRGlyZWN0aXZlcyI+SFBQQSBBc3NlbWJsZXIgRGlyZWN0aXZlczwvYT4sCitmb3IgYSBzdW1tYXJ5LiAKKzwvYmxvY2txdW90ZT4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyMjc3OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhLmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3BhcmMtQWxpZ25lZC1EYXRhIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTcGFyY18wMDJkRGVwZW5kZW50Lmh0bWwjU3BhcmNfMDAyZERlcGVuZGVudCIgdGl0bGU9IlNwYXJjLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjU3BhcmNfMDAyZE9wdHMiIHRpdGxlPSJTcGFyYy1PcHRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3BhcmNfMDAyZFN5bnRheC5odG1sI1NwYXJjXzAwMmRTeW50YXgiIHRpdGxlPSJTcGFyYy1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTcGFyYy1BbGlnbmVkLURhdGEiPjwvYT4KKzxhIG5hbWU9IlNwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNwYXJjXzAwMmRTeW50YXguaHRtbCNTcGFyY18wMDJkU3ludGF4Ij5TcGFyYy1TeW50YXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI1NwYXJjXzAwMmREZXBlbmRlbnQiPlNwYXJjLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzkuMiBFbmZvcmNpbmcgYWxpZ25lZCBkYXRhPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZGF0YS1hbGlnbm1lbnQtb24tU1BBUkMtMTgxMiI+PC9hPjxhIG5hbWU9ImluZGV4LVNQQVJDLWRhdGEtYWxpZ25tZW50LTE4MTMiPjwvYT5TUEFSQyBHQVMgbm9ybWFsbHkgcGVybWl0cyBkYXRhIHRvIGJlIG1pc2FsaWduZWQuICBGb3IgZXhhbXBsZSwgaXQKK3Blcm1pdHMgdGhlIDxjb2RlPi5sb25nPC9jb2RlPiBwc2V1ZG8tb3AgdG8gYmUgdXNlZCBvbiBhIGJ5dGUgYm91bmRhcnkuIAorSG93ZXZlciwgdGhlIG5hdGl2ZSBTdW5PUyBhc3NlbWJsZXJzIGlzc3VlIGFuIGVycm9yIHdoZW4gdGhleSBzZWUKK21pc2FsaWduZWQgZGF0YS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGVuZm9yY2VfMDAyZGFsaWduZWRfMDAyZGRhdGEtMTgxNCI+PC9hPllvdSBjYW4gdXNlIHRoZSA8Y29kZT4tLWVuZm9yY2UtYWxpZ25lZC1kYXRhPC9jb2RlPiBvcHRpb24gdG8gbWFrZSBTUEFSQyBHQVMKK2Fsc28gaXNzdWUgYW4gZXJyb3IgYWJvdXQgbWlzYWxpZ25lZCBkYXRhLCBqdXN0IGFzIHRoZSBTdW5PUworYXNzZW1ibGVycyBkby4KKworICAgPHA+VGhlIDxjb2RlPi0tZW5mb3JjZS1hbGlnbmVkLWRhdGE8L2NvZGU+IG9wdGlvbiBpcyBub3QgdGhlIGRlZmF1bHQgYmVjYXVzZSBnY2MKK2lzc3VlcyBtaXNhbGlnbmVkIGRhdGEgcHNldWRvLW9wcyB3aGVuIGl0IGluaXRpYWxpemVzIGNlcnRhaW4gcGFja2VkCitkYXRhIHN0cnVjdHVyZXMgKHN0cnVjdHVyZXMgZGVmaW5lZCB1c2luZyB0aGUgPGNvZGU+cGFja2VkPC9jb2RlPiBhdHRyaWJ1dGUpLiAKK1lvdSBtYXkgaGF2ZSB0byBhc3NlbWJsZSB3aXRoIEdBUyBpbiBvcmRlciB0byBpbml0aWFsaXplIHBhY2tlZCBkYXRhCitzdHJ1Y3R1cmVzIGluIHlvdXIgb3duIGNvZGUuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVNQQVJDLXN5bnRheC0xODE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3ludGF4XzAwMmMtU1BBUkMtMTgxNiI+PC9hPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MGE4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TcGFyYy1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3BhcmNfMDAyZFN5bnRheC5odG1sI1NwYXJjXzAwMmRTeW50YXgiIHRpdGxlPSJTcGFyYy1TeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTcGFyY18wMDJkUmVncy5odG1sI1NwYXJjXzAwMmRSZWdzIiB0aXRsZT0iU3BhcmMtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNwYXJjLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJTcGFyY18wMDJkQ2hhcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3BhcmNfMDAyZFJlZ3MuaHRtbCNTcGFyY18wMDJkUmVncyI+U3BhcmMtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNwYXJjXzAwMmRTeW50YXguaHRtbCNTcGFyY18wMDJkU3ludGF4Ij5TcGFyYy1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjM5LjMuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtU3BhcmMtMTgxNyI+PC9hPjxhIG5hbWU9ImluZGV4LVNwYXJjLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMTgxOCI+PC9hPkEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBhcHBlYXJpbmcgYW55d2hlcmUgb24gYSBsaW5lIGluZGljYXRlcyB0aGUgc3RhcnQKK29mIGEgY29tbWVudCB0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGF0IGxpbmUuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgdGhlbiB0aGUgd2hvbGUKK2xpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY291bGQgYWxzbyBiZQorYSBsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtU3BhcmMtMTgxOSI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1TcGFyYy0xODIwIj48L2E+PGEgbmFtZT0iaW5kZXgtU3BhcmMtbGluZS1zZXBhcmF0b3ItMTgyMSI+PC9hPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgbmV3bGluZSB0byBzZXBhcmF0ZSBzdGF0ZW1lbnRzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkQ29uc3RhbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkQ29uc3RhbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjOWE4MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRDb25zdGFudHMuaHRtbApAQCAtMCwwICsxLDE2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3BhcmMtQ29uc3RhbnRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTcGFyY18wMDJkU3ludGF4Lmh0bWwjU3BhcmNfMDAyZFN5bnRheCIgdGl0bGU9IlNwYXJjLVN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNwYXJjXzAwMmRSZWdzLmh0bWwjU3BhcmNfMDAyZFJlZ3MiIHRpdGxlPSJTcGFyYy1SZWdzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3BhcmNfMDAyZFJlbG9jcy5odG1sI1NwYXJjXzAwMmRSZWxvY3MiIHRpdGxlPSJTcGFyYy1SZWxvY3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTcGFyYy1Db25zdGFudHMiPjwvYT4KKzxhIG5hbWU9IlNwYXJjXzAwMmRDb25zdGFudHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3BhcmNfMDAyZFJlbG9jcy5odG1sI1NwYXJjXzAwMmRSZWxvY3MiPlNwYXJjLVJlbG9jczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNwYXJjXzAwMmRSZWdzLmh0bWwjU3BhcmNfMDAyZFJlZ3MiPlNwYXJjLVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTcGFyY18wMDJkU3ludGF4Lmh0bWwjU3BhcmNfMDAyZFN5bnRheCI+U3BhcmMtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zOS4zLjMgQ29uc3RhbnRzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtU3BhcmMtY29uc3RhbnRzLTE4MjQiPjwvYT48YSBuYW1lPSJpbmRleC1jb25zdGFudHNfMDAyYy1TcGFyYy0xODI1Ij48L2E+CitTZXZlcmFsIFNwYXJjIGluc3RydWN0aW9ucyB0YWtlIGFuIGltbWVkaWF0ZSBvcGVyYW5kIGZpZWxkIGZvcgord2hpY2ggbW5lbW9uaWMgbmFtZXMgZXhpc3QuICBUd28gc3VjaCBleGFtcGxlcyBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tZW1iYXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByZWZldGNoPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgQW5vdGhlciBleGFtcGxlIGFyZSB0aGUgc2V0IG9mIFY5CittZW1vcnkgYWNjZXNzIGluc3RydWN0aW9uIHRoYXQgYWxsb3cgc3BlY2lmaWNhdGlvbiBvZiBhbgorYWRkcmVzcyBzcGFjZSBpZGVudGlmaWVyLgorCisgICA8cD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tZW1iYXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb24gc3BlY2lmaWVzIGEgbWVtb3J5IGJhcnJpZXIgdGhhdCBpcwordGhlIGRlZmluZWQgYnkgdGhlIG9wZXJhbmQgd2hpY2ggaXMgYSBiaXRtYXNrLiAgVGhlIHN1cHBvcnRlZAorbWFzayBtbmVtb25pY3MgYXJlOgorCisgICAgIDx1bD4KKzxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNTeW5jPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlcXVlc3RzIHRoYXQgYWxsIG9wZXJhdGlvbnMgKGluY2x1ZGluZyBub25tZW1vcnkKK3JlZmVyZW5jZSBvcGVyYXRpb25zKSBhcHBlYXJpbmcgcHJpb3IgdG8gdGhlIDxjb2RlPm1lbWJhcjwvY29kZT4gbXVzdCBoYXZlCitiZWVuIHBlcmZvcm1lZCBhbmQgdGhlIGVmZmVjdHMgb2YgYW55IGV4Y2VwdGlvbnMgYmVjb21lIHZpc2libGUgYmVmb3JlCithbnkgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoZSA8Y29kZT5tZW1iYXI8L2NvZGU+IG1heSBiZSBpbml0aWF0ZWQuICBUaGlzCitjb3JyZXNwb25kcyB0byA8Y29kZT5tZW1iYXI8L2NvZGU+IGNtYXNrIGZpZWxkIGJpdCAyLgorCisgICAgIDxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNNZW1Jc3N1ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXF1ZXN0cyB0aGF0IGFsbCBtZW1vcnkgcmVmZXJlbmNlIG9wZXJhdGlvbnMKK2FwcGVhcmluZyBwcmlvciB0byB0aGUgPGNvZGU+bWVtYmFyPC9jb2RlPiBtdXN0IGhhdmUgYmVlbiBwZXJmb3JtZWQgYmVmb3JlCithbnkgbWVtb3J5IG9wZXJhdGlvbiBhZnRlciB0aGUgPGNvZGU+bWVtYmFyPC9jb2RlPiBtYXkgYmUgaW5pdGlhdGVkLiAgVGhpcworY29ycmVzcG9uZHMgdG8gPGNvZGU+bWVtYmFyPC9jb2RlPiBjbWFzayBmaWVsZCBiaXQgMS4KKworICAgICA8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jTG9va2FzaWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlcXVlc3RzIHRoYXQgYSBzdG9yZSBhcHBlYXJpbmcgcHJpb3IgdG8gdGhlCis8Y29kZT5tZW1iYXI8L2NvZGU+IG11c3QgY29tcGxldGUgYmVmb3JlIGFueSBsb2FkIGZvbGxvd2luZyB0aGUKKzxjb2RlPm1lbWJhcjwvY29kZT4gcmVmZXJlbmNpbmcgdGhlIHNhbWUgYWRkcmVzcyBjYW4gYmUgaW5pdGlhdGVkLiAgVGhpcworY29ycmVzcG9uZHMgdG8gPGNvZGU+bWVtYmFyPC9jb2RlPiBjbWFzayBmaWVsZCBiaXQgMC4KKworICAgICA8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jU3RvcmVTdG9yZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkZWZpbmVzIHRoYXQgdGhlIGVmZmVjdHMgb2YgYWxsIHN0b3JlcyBhcHBlYXJpbmcKK3ByaW9yIHRvIHRoZSA8Y29kZT5tZW1iYXI8L2NvZGU+IGluc3RydWN0aW9uIG11c3QgYmUgdmlzaWJsZSB0byBhbGwKK3Byb2Nlc3NvcnMgYmVmb3JlIHRoZSBlZmZlY3Qgb2YgYW55IHN0b3JlcyBmb2xsb3dpbmcgdGhlCis8Y29kZT5tZW1iYXI8L2NvZGU+LiAgRXF1aXZhbGVudCB0byB0aGUgZGVwcmVjYXRlZCA8Y29kZT5zdGJhcjwvY29kZT4gaW5zdHJ1Y3Rpb24uIAorVGhpcyBjb3JyZXNwb25kcyB0byA8Y29kZT5tZW1iYXI8L2NvZGU+IG1tYXNrIGZpZWxkIGJpdCAzLgorCisgICAgIDxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNMb2FkU3RvcmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGVmaW5lcyBhbGwgbG9hZHMgYXBwZWFyaW5nIHByaW9yIHRvIHRoZQorPGNvZGU+bWVtYmFyPC9jb2RlPiBpbnN0cnVjdGlvbiBtdXN0IGhhdmUgYmVlbiBwZXJmb3JtZWQgYmVmb3JlIHRoZSBlZmZlY3QKK29mIGFueSBzdG9yZXMgZm9sbG93aW5nIHRoZSA8Y29kZT5tZW1iYXI8L2NvZGU+IGlzIHZpc2libGUgdG8gYW55IG90aGVyCitwcm9jZXNzb3IuICBUaGlzIGNvcnJlc3BvbmRzIHRvIDxjb2RlPm1lbWJhcjwvY29kZT4gbW1hc2sgZmllbGQgYml0IDIuCisKKyAgICAgPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I1N0b3JlTG9hZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkZWZpbmVzIHRoYXQgdGhlIGVmZmVjdHMgb2YgYWxsIHN0b3JlcyBhcHBlYXJpbmcKK3ByaW9yIHRvIHRoZSA8Y29kZT5tZW1iYXI8L2NvZGU+IGluc3RydWN0aW9uIG11c3QgYmUgdmlzaWJsZSB0byBhbGwKK3Byb2Nlc3NvcnMgYmVmb3JlIGxvYWRzIGZvbGxvd2luZyB0aGUgPGNvZGU+bWVtYmFyPC9jb2RlPiBtYXkgYmUgcGVyZm9ybWVkLiAKK1RoaXMgY29ycmVzcG9uZHMgdG8gPGNvZGU+bWVtYmFyPC9jb2RlPiBtbWFzayBmaWVsZCBiaXQgMS4KKworICAgICA8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jTG9hZExvYWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGVmaW5lcyB0aGF0IGFsbCBsb2FkcyBhcHBlYXJpbmcgcHJpb3IgdG8gdGhlCis8Y29kZT5tZW1iYXI8L2NvZGU+IGluc3RydWN0aW9uIG11c3QgaGF2ZSBiZWVuIHBlcmZvcm1lZCBiZWZvcmUgYW55IGxvYWRzCitmb2xsb3dpbmcgdGhlIDxjb2RlPm1lbWJhcjwvY29kZT4gbWF5IGJlIHBlcmZvcm1lZC4gIFRoaXMgY29ycmVzcG9uZHMgdG8KKzxjb2RlPm1lbWJhcjwvY29kZT4gbW1hc2sgZmllbGQgYml0IDAuCisKKyAgIDwvdWw+CisKKyAgIDxwPlRoZXNlIHZhbHVlcyBjYW4gYmUgb3JlZCB0b2dldGhlciwgZm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgbWVtYmFyICNTeW5jCisgICAgIG1lbWJhciAjU3RvcmVMb2FkIHwgI0xvYWRMb2FkCisgICAgIG1lbWJhciAjU3RvcmVMb2FkIHwgI1N0b3JlU3RvcmUKKzwvcHJlPgorICAgPHA+VGhlIDxjb2RlPnByZWZldGNoPC9jb2RlPiBhbmQgPGNvZGU+cHJlZmV0Y2hhPC9jb2RlPiBpbnN0cnVjdGlvbnMgdGFrZSBhIHByZWZldGNoCitmdW5jdGlvbiBjb2RlLiAgVGhlIGZvbGxvd2luZyBwcmVmZXRjaCBmdW5jdGlvbiBjb2RlIGNvbnN0YW50CittbmVtb25pY3MgYXJlIGF2YWlsYWJsZToKKworICAgICA8dWw+Cis8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jbl9yZWFkczwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXF1ZXN0cyBhIHByZWZldGNoIGZvciBzZXZlcmFsIHJlYWRzLCBhbmQgY29ycmVzcG9uZHMKK3RvIGEgcHJlZmV0Y2ggZnVuY3Rpb24gY29kZSBvZiAwLgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I29uZV9yZWFkPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlcXVlc3RzIGEgcHJlZmV0Y2ggZm9yIG9uZSByZWFkLCBhbmQgY29ycmVzcG9uZHMKK3RvIGEgcHJlZmV0Y2ggZnVuY3Rpb24gY29kZSBvZiAxLgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I25fd3JpdGVzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlcXVlc3RzIGEgcHJlZmV0Y2ggZm9yIHNldmVyYWwgd3JpdGVzIChhbmQgcG9zc2libHkKK3JlYWRzKSwgYW5kIGNvcnJlc3BvbmRzIHRvIGEgcHJlZmV0Y2ggZnVuY3Rpb24gY29kZSBvZiAyLgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I29uZV93cml0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXF1ZXN0cyBhIHByZWZldGNoIGZvciBvbmUgd3JpdGUsIGFuZCBjb3JyZXNwb25kcwordG8gYSBwcmVmZXRjaCBmdW5jdGlvbiBjb2RlIG9mIDMuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcGFnZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXF1ZXN0cyBhIHByZWZldGNoIHBhZ2UsIGFuZCBjb3JyZXNwb25kcyB0byBhIHByZWZldGNoCitmdW5jdGlvbiBjb2RlIG9mIDQuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW52YWxpZGF0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXF1ZXN0cyBhIHByZWZldGNoIGludmFsaWRhdGUsIGFuZCBjb3JyZXNwb25kcyB0bworYSBwcmVmZXRjaCBmdW5jdGlvbiBjb2RlIG9mIDE2LgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3VuaWZpZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVxdWVzdHMgYSBwcmVmZXRjaCB0byB0aGUgbmVhcmVzdCB1bmlmaWVkIGNhY2hlLCBhbmQKK2NvcnJlc3BvbmRzIHRvIGEgcHJlZmV0Y2ggZnVuY3Rpb24gY29kZSBvZiAxNy4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNuX3JlYWRzX3N0cm9uZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXF1ZXN0cyBhIHN0cm9uZyBwcmVmZXRjaCBmb3Igc2V2ZXJhbCByZWFkcywKK2FuZCBjb3JyZXNwb25kcyB0byBhIHByZWZldGNoIGZ1bmN0aW9uIGNvZGUgb2YgMjAuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jb25lX3JlYWRfc3Ryb25nPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlcXVlc3RzIGEgc3Ryb25nIHByZWZldGNoIGZvciBvbmUgcmVhZCwKK2FuZCBjb3JyZXNwb25kcyB0byBhIHByZWZldGNoIGZ1bmN0aW9uIGNvZGUgb2YgMjEuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jbl93cml0ZXNfc3Ryb25nPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlcXVlc3RzIGEgc3Ryb25nIHByZWZldGNoIGZvciBzZXZlcmFsIHdyaXRlcywKK2FuZCBjb3JyZXNwb25kcyB0byBhIHByZWZldGNoIGZ1bmN0aW9uIGNvZGUgb2YgMjIuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jb25lX3dyaXRlX3N0cm9uZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXF1ZXN0cyBhIHN0cm9uZyBwcmVmZXRjaCBmb3Igb25lIHdyaXRlLAorYW5kIGNvcnJlc3BvbmRzIHRvIGEgcHJlZmV0Y2ggZnVuY3Rpb24gY29kZSBvZiAyMy4KKworICAgICA8cD5PbmxlIG9uZSBwcmVmZXRjaCBjb2RlIG1heSBiZSBzcGVjaWZpZWQuICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBwcmVmZXRjaCAgWyVsMCArICVsMl0sICNvbmVfcmVhZAorICAgICAgICAgIHByZWZldGNoICBbJWcyICsgOF0sICNuX3dyaXRlcworICAgICAgICAgIHByZWZldGNoYSBbJWcxXSAweDgsICN1bmlmaWVkCisgICAgICAgICAgcHJlZmV0Y2hhIFslbzAgKyAweDEwXSAlYXNpLCAjbl9yZWFkcworPC9wcmU+CisgICAgIDxwPlRoZSBhY3R1YWwgYmVoYXZpb3Igb2YgYSBnaXZlbiBwcmVmZXRjaCBmdW5jdGlvbiBjb2RlIGlzIHByb2Nlc3Nvcgorc3BlY2lmaWMuICBJZiBhIHByb2Nlc3NvciBkb2VzIG5vdCBpbXBsZW1lbnQgYSBnaXZlbiBwcmVmZXRjaAorZnVuY3Rpb24gY29kZSwgaXQgd2lsbCB0cmVhdCB0aGUgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb24gYXMgYSBub3AuCisKKyAgICAgPHA+Rm9yIGluc3RydWN0aW9ucyB0aGF0IGFjY2VwdCBhbiBpbW1lZGlhdGUgYWRkcmVzcyBzcGFjZSBpZGVudGlmaWVyLAorPGNvZGU+YXM8L2NvZGU+IHByb3ZpZGVzIG1hbnkgbW5lbW9uaWNzIGNvcnJlc3BvbmRpbmcgdG8KK1Y5IGRlZmluZWQgYXMgd2VsbCBhcyBVbHRyYVNQQVJDIGFuZCBOaWFnYXJhIGV4dGVuZGVkIHZhbHVlcy4gCitGb3IgZXhhbXBsZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jQVNJX1A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I0FTSV9CTEtfSU5JVF9RVUFEX0xERF9BSVVTPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1NlZSB0aGUgVjkgYW5kIHByb2Nlc3NvciBzcGVjaWZpYyBtYW51YWxzIGZvciBkZXRhaWxzLgorCisgICA8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmMjVkNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TcGFyYy1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNDT1JFXzAwMmREZXBlbmRlbnQuaHRtbCNTQ09SRV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iU0NPUkUtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJQzU0WC1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTcGFyYy1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IlNwYXJjXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNDT1JFXzAwMmREZXBlbmRlbnQuaHRtbCNTQ09SRV8wMDJkRGVwZW5kZW50Ij5TQ09SRS1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMzkgU1BBUkMgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtU1BBUkMtc3VwcG9ydC0xNzg5Ij48L2E+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJTcGFyY18wMDJkT3B0cy5odG1sI1NwYXJjXzAwMmRPcHRzIj5TcGFyYy1PcHRzPC9hPjogICAgICAgICAgICAgICAgICAgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEuaHRtbCNTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YSI+U3BhcmMtQWxpZ25lZC1EYXRhPC9hPjogCQlPcHRpb24gdG8gZW5mb3JjZSBhbGlnbmVkIGRhdGEKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlNwYXJjXzAwMmRTeW50YXguaHRtbCNTcGFyY18wMDJkU3ludGF4Ij5TcGFyYy1TeW50YXg8L2E+OiAJCVN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iU3BhcmNfMDAyZEZsb2F0Lmh0bWwjU3BhcmNfMDAyZEZsb2F0Ij5TcGFyYy1GbG9hdDwvYT46ICAgICAgICAgICAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjU3BhcmNfMDAyZERpcmVjdGl2ZXMiPlNwYXJjLURpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgICBTcGFyYyBNYWNoaW5lIERpcmVjdGl2ZXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZTc2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsMTAxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TcGFyYy1EaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTcGFyY18wMDJkRGVwZW5kZW50Lmh0bWwjU3BhcmNfMDAyZERlcGVuZGVudCIgdGl0bGU9IlNwYXJjLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNwYXJjXzAwMmRGbG9hdC5odG1sI1NwYXJjXzAwMmRGbG9hdCIgdGl0bGU9IlNwYXJjLUZsb2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3BhcmMtRGlyZWN0aXZlcyI+PC9hPgorPGEgbmFtZT0iU3BhcmNfMDAyZERpcmVjdGl2ZXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTcGFyY18wMDJkRmxvYXQuaHRtbCNTcGFyY18wMDJkRmxvYXQiPlNwYXJjLUZsb2F0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI1NwYXJjXzAwMmREZXBlbmRlbnQiPlNwYXJjLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzkuNSBTcGFyYyBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1TUEFSQy1tYWNoaW5lLWRpcmVjdGl2ZXMtMTgzMiI+PC9hPjxhIG5hbWU9ImluZGV4LW1hY2hpbmUtZGlyZWN0aXZlc18wMDJjLVNQQVJDLTE4MzMiPjwvYT5UaGUgU3BhcmMgdmVyc2lvbiBvZiA8Y29kZT5hczwvY29kZT4gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCittYWNoaW5lIGRpcmVjdGl2ZXM6CisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFsaWduXzAwN2QtZGlyZWN0aXZlXzAwMmMtU1BBUkMtMTgzNCI+PC9hPgorPGRsPjxkdD48Y29kZT4uYWxpZ248L2NvZGU+PGRkPlRoaXMgbXVzdCBiZSBmb2xsb3dlZCBieSB0aGUgZGVzaXJlZCBhbGlnbm1lbnQgaW4gYnl0ZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb21tb25fMDA3ZC1kaXJlY3RpdmVfMDAyYy1TUEFSQy0xODM1Ij48L2E+PGJyPjxkdD48Y29kZT4uY29tbW9uPC9jb2RlPjxkZD5UaGlzIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzeW1ib2wgbmFtZSwgYSBwb3NpdGl2ZSBudW1iZXIsIGFuZAorPGNvZGU+ImJzcyI8L2NvZGU+LiAgVGhpcyBiZWhhdmVzIHNvbWV3aGF0IGxpa2UgPGNvZGU+LmNvbW08L2NvZGU+LCBidXQgdGhlCitzeW50YXggaXMgZGlmZmVyZW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaGFsZl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVNQQVJDLTE4MzYiPjwvYT48YnI+PGR0Pjxjb2RlPi5oYWxmPC9jb2RlPjxkZD5UaGlzIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gPGNvZGU+LnNob3J0PC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym53b3JkXzAwN2QtZGlyZWN0aXZlXzAwMmMtU1BBUkMtMTgzNyI+PC9hPjxicj48ZHQ+PGNvZGU+Lm53b3JkPC9jb2RlPjxkZD5PbiB0aGUgU3BhcmMsIHRoZSA8Y29kZT4ubndvcmQ8L2NvZGU+IGRpcmVjdGl2ZSBwcm9kdWNlcyBuYXRpdmUgd29yZCBzaXplZCB2YWx1ZSwKK2llLiBpZiBhc3NlbWJsaW5nIHdpdGggLTMyIGl0IGlzIGVxdWl2YWxlbnQgdG8gPGNvZGU+LndvcmQ8L2NvZGU+LCBpZiBhc3NlbWJsaW5nCit3aXRoIC02NCBpdCBpcyBlcXVpdmFsZW50IHRvIDxjb2RlPi54d29yZDwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jwcm9jXzAwN2QtZGlyZWN0aXZlXzAwMmMtU1BBUkMtMTgzOCI+PC9hPjxicj48ZHQ+PGNvZGU+LnByb2M8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIGlzIGlnbm9yZWQuICBBbnkgdGV4dCBmb2xsb3dpbmcgaXQgb24gdGhlIHNhbWUKK2xpbmUgaXMgYWxzbyBpZ25vcmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicmVnaXN0ZXJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1TUEFSQy0xODM5Ij48L2E+PGJyPjxkdD48Y29kZT4ucmVnaXN0ZXI8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIGRlY2xhcmVzIHVzZSBvZiBhIGdsb2JhbCBhcHBsaWNhdGlvbiBvciBzeXN0ZW0gcmVnaXN0ZXIuIAorSXQgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHJlZ2lzdGVyIG5hbWUgJWcyLCAlZzMsICVnNiBvciAlZzcsIGNvbW1hIGFuZAordGhlIHN5bWJvbCBuYW1lIGZvciB0aGF0IHJlZ2lzdGVyLiAgSWYgc3ltYm9sIG5hbWUgaXMgPGNvZGU+I3NjcmF0Y2g8L2NvZGU+LAoraXQgaXMgYSBzY3JhdGNoIHJlZ2lzdGVyLCBpZiBpdCBpcyA8Y29kZT4jaWdub3JlPC9jb2RlPiwgaXQganVzdCBzdXBwcmVzc2VzIGFueQorZXJyb3JzIGFib3V0IHVzaW5nIHVuZGVjbGFyZWQgZ2xvYmFsIHJlZ2lzdGVyLCBidXQgZG9lcyBub3QgZW1pdCBhbnkKK2luZm9ybWF0aW9uIGFib3V0IGl0IGludG8gdGhlIG9iamVjdCBmaWxlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGUuZy4gaWYgeW91CitzYXZlIHRoZSByZWdpc3RlciBiZWZvcmUgdXNlIGFuZCByZXN0b3JlIGl0IGFmdGVyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicmVzZXJ2ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVNQQVJDLTE4NDAiPjwvYT48YnI+PGR0Pjxjb2RlPi5yZXNlcnZlPC9jb2RlPjxkZD5UaGlzIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzeW1ib2wgbmFtZSwgYSBwb3NpdGl2ZSBudW1iZXIsIGFuZAorPGNvZGU+ImJzcyI8L2NvZGU+LiAgVGhpcyBiZWhhdmVzIHNvbWV3aGF0IGxpa2UgPGNvZGU+Lmxjb21tPC9jb2RlPiwgYnV0IHRoZQorc3ludGF4IGlzIGRpZmZlcmVudC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNlZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLVNQQVJDLTE4NDEiPjwvYT48YnI+PGR0Pjxjb2RlPi5zZWc8L2NvZGU+PGRkPlRoaXMgbXVzdCBiZSBmb2xsb3dlZCBieSA8Y29kZT4idGV4dCI8L2NvZGU+LCA8Y29kZT4iZGF0YSI8L2NvZGU+LCBvcgorPGNvZGU+ImRhdGExIjwvY29kZT4uICBJdCBiZWhhdmVzIGxpa2UgPGNvZGU+LnRleHQ8L2NvZGU+LCA8Y29kZT4uZGF0YTwvY29kZT4sIG9yCis8Y29kZT4uZGF0YSAxPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNraXBfMDA3ZC1kaXJlY3RpdmVfMDAyYy1TUEFSQy0xODQyIj48L2E+PGJyPjxkdD48Y29kZT4uc2tpcDwvY29kZT48ZGQ+VGhpcyBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIHRoZSA8Y29kZT4uc3BhY2U8L2NvZGU+IGRpcmVjdGl2ZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndvcmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1TUEFSQy0xODQzIj48L2E+PGJyPjxkdD48Y29kZT4ud29yZDwvY29kZT48ZGQ+T24gdGhlIFNwYXJjLCB0aGUgPGNvZGU+LndvcmQ8L2NvZGU+IGRpcmVjdGl2ZSBwcm9kdWNlcyAzMiBiaXQgdmFsdWVzLAoraW5zdGVhZCBvZiB0aGUgMTYgYml0IHZhbHVlcyBpdCBwcm9kdWNlcyBvbiBtYW55IG90aGVyIG1hY2hpbmVzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdieHdvcmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1TUEFSQy0xODQ0Ij48L2E+PGJyPjxkdD48Y29kZT4ueHdvcmQ8L2NvZGU+PGRkPk9uIHRoZSBTcGFyYyBWOSBwcm9jZXNzb3IsIHRoZSA8Y29kZT4ueHdvcmQ8L2NvZGU+IGRpcmVjdGl2ZSBwcm9kdWNlcworNjQgYml0IHZhbHVlcy4gCis8L2RsPgorCis8IS0tIENvcHlyaWdodCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA2LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorPCEtLSBUSSBUTVMzMjBDNTRYIGRlc2NyaXB0aW9uIGJ5IFRpbW90aHkgV2FsbCwgdHdhbGxAY3lnbnVzLmNvbSAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRGbG9hdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3BhcmNfMDAyZEZsb2F0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3MzY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRGbG9hdC5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNwYXJjLUZsb2F0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTcGFyY18wMDJkRGVwZW5kZW50Lmh0bWwjU3BhcmNfMDAyZERlcGVuZGVudCIgdGl0bGU9IlNwYXJjLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNwYXJjXzAwMmRTeW50YXguaHRtbCNTcGFyY18wMDJkU3ludGF4IiB0aXRsZT0iU3BhcmMtU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3BhcmNfMDAyZERpcmVjdGl2ZXMuaHRtbCNTcGFyY18wMDJkRGlyZWN0aXZlcyIgdGl0bGU9IlNwYXJjLURpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTcGFyYy1GbG9hdCI+PC9hPgorPGEgbmFtZT0iU3BhcmNfMDAyZEZsb2F0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNwYXJjXzAwMmREaXJlY3RpdmVzLmh0bWwjU3BhcmNfMDAyZERpcmVjdGl2ZXMiPlNwYXJjLURpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTcGFyY18wMDJkU3ludGF4Lmh0bWwjU3BhcmNfMDAyZFN5bnRheCI+U3BhcmMtU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI1NwYXJjXzAwMmREZXBlbmRlbnQiPlNwYXJjLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzkuNCBGbG9hdGluZyBQb2ludDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtU1BBUkMtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0xODMwIj48L2E+PGEgbmFtZT0iaW5kZXgtU1BBUkMtZmxvYXRpbmctcG9pbnQtXzAwMjhfMDA0MHNjXzAwN2JpZWVlXzAwN2RfMDAyOS0xODMxIj48L2E+VGhlIFNwYXJjIHVzZXMgPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPiBmbG9hdGluZy1wb2ludCBudW1iZXJzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkT3B0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3BhcmNfMDAyZE9wdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjI0YzhiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3BhcmNfMDAyZE9wdHMuaHRtbApAQCAtMCwwICsxLDE1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3BhcmMtT3B0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI1NwYXJjXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTcGFyYy1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YS5odG1sI1NwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhIiB0aXRsZT0iU3BhcmMtQWxpZ25lZC1EYXRhIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3BhcmMtT3B0cyI+PC9hPgorPGEgbmFtZT0iU3BhcmNfMDAyZE9wdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEuaHRtbCNTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YSI+U3BhcmMtQWxpZ25lZC1EYXRhPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI1NwYXJjXzAwMmREZXBlbmRlbnQiPlNwYXJjLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMzkuMSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3B0aW9ucy1mb3ItU1BBUkMtMTc5MCI+PC9hPjxhIG5hbWU9ImluZGV4LVNQQVJDLW9wdGlvbnMtMTc5MSI+PC9hPjxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZXNfMDAyYy1TUEFSQy0xNzkyIj48L2E+PGEgbmFtZT0iaW5kZXgtU1BBUkMtYXJjaGl0ZWN0dXJlcy0xNzkzIj48L2E+VGhlIFNQQVJDIGNoaXAgZmFtaWx5IGluY2x1ZGVzIHNldmVyYWwgc3VjY2Vzc2l2ZSB2ZXJzaW9ucywgdXNpbmcgdGhlIHNhbWUKK2NvcmUgaW5zdHJ1Y3Rpb24gc2V0LCBidXQgaW5jbHVkaW5nIGEgZmV3IGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGF0CitlYWNoIHZlcnNpb24uICBUaGVyZSBhcmUgZXhjZXB0aW9ucyB0byB0aGlzIGhvd2V2ZXIuICBGb3IgZGV0YWlscyBvbiB3aGF0CitpbnN0cnVjdGlvbnMgZWFjaCB2YXJpYW50IHN1cHBvcnRzLCBwbGVhc2Ugc2VlIHRoZSBjaGlwJ3MgYXJjaGl0ZWN0dXJlCityZWZlcmVuY2UgbWFudWFsLgorCisgICA8cD5CeSBkZWZhdWx0LCA8Y29kZT5hczwvY29kZT4gYXNzdW1lcyB0aGUgY29yZSBpbnN0cnVjdGlvbiBzZXQgKFNQQVJDCit2NiksIGJ1dCAmbGRxdW87YnVtcHMmcmRxdW87IHRoZSBhcmNoaXRlY3R1cmUgbGV2ZWwgYXMgbmVlZGVkOiBpdCBzd2l0Y2hlcyB0bworc3VjY2Vzc2l2ZWx5IGhpZ2hlciBhcmNoaXRlY3R1cmVzIGFzIGl0IGVuY291bnRlcnMgaW5zdHJ1Y3Rpb25zIHRoYXQKK29ubHkgZXhpc3QgaW4gdGhlIGhpZ2hlciBsZXZlbHMuCisKKyAgIDxwPklmIG5vdCBjb25maWd1cmVkIGZvciBTUEFSQyB2OSAoPGNvZGU+c3BhcmM2NC0qLSo8L2NvZGU+KSBHQVMgd2lsbCBub3QgYnVtcAorcGFzdCBzcGFyY2xpdGUgYnkgZGVmYXVsdCwgYW4gb3B0aW9uIG11c3QgYmUgcGFzc2VkIHRvIGVuYWJsZSB0aGUKK3Y5IGluc3RydWN0aW9ucy4KKworICAgPHA+R0FTIHRyZWF0cyBzcGFyY2xpdGUgYXMgYmVpbmcgY29tcGF0aWJsZSB3aXRoIHY4LCB1bmxlc3MgYW4gYXJjaGl0ZWN0dXJlCitpcyBleHBsaWNpdGx5IHJlcXVlc3RlZC4gIFNQQVJDIHY5IGlzIGFsd2F5cyBpbmNvbXBhdGlibGUgd2l0aCBzcGFyY2xpdGUuCisKKzwhLS0gVGhlIG9yZGVyIGhlcmUgaXMgdGhlIHNhbWUgYXMgdGhlIG9yZGVyIG9mIGVudW0gc3BhcmNfb3Bjb2RlX2FyY2hfdmFsIC0tPgorPCEtLSB0byBnaXZlIHRoZSB1c2VyIGEgc2Vuc2Ugb2YgdGhlIG9yZGVyIG9mIHRoZSAiYnVtcGluZyIuIC0tPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXY2LTE3OTQiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXY3LTE3OTUiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXY4LTE3OTYiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXNwYXJjbGV0LTE3OTciPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXNwYXJjbGl0ZS0xNzk4Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZEF2OS0xNzk5Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZEF2OWEtMTgwMCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRBdjliLTE4MDEiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXY5Yy0xODAyIj48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZEF2OWQtMTgwMyI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRBdjl2LTE4MDQiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXNwYXJjLTE4MDUiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXNwYXJjdmlzLTE4MDYiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXNwYXJjdmlzMi0xODA3Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZEFzcGFyY2ZtYWYtMTgwOCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRBc3BhcmNpbWEtMTgwOSI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRBc3BhcmN2aXMzLTE4MTAiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQXNwYXJjdmlzM3ItMTgxMSI+PC9hPgorPGRsPjxkdD48Y29kZT4tQXY2IHwgLUF2NyB8IC1BdjggfCAtQXNwYXJjbGV0IHwgLUFzcGFyY2xpdGU8L2NvZGU+PGR0Pjxjb2RlPi1BdjhwbHVzIHwgLUF2OHBsdXNhIHwgLUF2OHBsdXNiIHwgLUF2OHBsdXNjIHwgLUF2OHBsdXNkIHwgLUF2OHBsdXN2PC9jb2RlPjxkdD48Y29kZT4tQXY5IHwgLUF2OWEgfCAtQXY5YiB8IC1BdjljIHwgLUF2OWQgfCAtQXY5djwvY29kZT48ZHQ+PGNvZGU+LUFzcGFyYyB8IC1Bc3BhcmN2aXMgfCAtQXNwYXJjdmlzMiB8IC1Bc3BhcmNmbWFmIHwgLUFzcGFyY2ltYTwvY29kZT48ZHQ+PGNvZGU+LUFzcGFyY3ZpczMgfCAtQXNwYXJjdmlzM3I8L2NvZGU+PGRkPlVzZSBvbmUgb2YgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucyB0byBzZWxlY3Qgb25lIG9mIHRoZSBTUEFSQworYXJjaGl0ZWN0dXJlcyBleHBsaWNpdGx5LiAgSWYgeW91IHNlbGVjdCBhbiBhcmNoaXRlY3R1cmUgZXhwbGljaXRseSwKKzxjb2RlPmFzPC9jb2RlPiByZXBvcnRzIGEgZmF0YWwgZXJyb3IgaWYgaXQgZW5jb3VudGVycyBhbiBpbnN0cnVjdGlvbgorb3IgZmVhdHVyZSByZXF1aXJpbmcgYW4gaW5jb21wYXRpYmxlIG9yIGhpZ2hlciBsZXZlbC4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzYTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY4cGx1c2I8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUF2OHBsdXNjPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY4cGx1c2Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzdjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWxlY3QgYSAzMiBiaXQgZW52aXJvbm1lbnQuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjlhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjliPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjljPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjlkPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUF2OXY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VsZWN0IGEgNjQgYml0IGVudmlyb25tZW50IGFuZCBhcmUgbm90IGF2YWlsYWJsZSB1bmxlc3MgR0FTCitpcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgd2l0aCA2NCBiaXQgZW52aXJvbm1lbnQgc3VwcG9ydC4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlbmFibGUgdGhlIFNQQVJDIFY5IGluc3RydWN0aW9uIHNldCB3aXRoCitVbHRyYVNQQVJDIFZJUyAxLjAgZXh0ZW5zaW9ucy4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlbmFibGUgdGhlIFVsdHJhU1BBUkMgVklTIDIuMCBpbnN0cnVjdGlvbnMsCithcyB3ZWxsIGFzIHRoZSBpbnN0cnVjdGlvbnMgZW5hYmxlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5YTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlbmFibGUgdGhlIFVsdHJhU1BBUkMgTmlhZ2FyYSBpbnN0cnVjdGlvbnMsCithcyB3ZWxsIGFzIHRoZSBpbnN0cnVjdGlvbnMgZW5hYmxlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5ZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlbmFibGUgdGhlIGZsb2F0aW5nIHBvaW50IGZ1c2VkCittdWx0aXBseS1hZGQsIFZJUyAzLjAsIGFuZCBIUEMgZXh0ZW5zaW9uIGluc3RydWN0aW9ucywgYXMgd2VsbCBhcyB0aGUKK2luc3RydWN0aW9ucyBlbmFibGVkIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUF2OHBsdXNjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjljPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUF2OHBsdXN2PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1Bdjl2PC9zcGFuPjwvc2FtcD4mcnNxdW87IGVuYWJsZSB0aGUgJ3JhbmRvbScsIHRyYW5zYWN0aW9uYWwKK21lbW9yeSwgZmxvYXRpbmcgcG9pbnQgdW5mdXNlZCBtdWx0aXBseS1hZGQsIGludGVnZXIgbXVsdGlwbHktYWRkLCBhbmQKK2NhY2hlIHNwYXJpbmcgc3RvcmUgaW5zdHJ1Y3Rpb25zLCBhcyB3ZWxsIGFzIHRoZSBpbnN0cnVjdGlvbnMgZW5hYmxlZAorYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY4cGx1c2Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUF2OWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXNwYXJjPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNwZWNpZmllcyBhIHY5IGVudmlyb25tZW50LiAgSXQgaXMgZXF1aXZhbGVudCB0bworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY5PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlmIHRoZSB3b3JkIHNpemUgaXMgNjQtYml0LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY4cGx1czwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvdGhlcndpc2UuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXNwYXJjdmlzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNwZWNpZmllcyBhIHY5YSBlbnZpcm9ubWVudC4gIEl0IGlzIGVxdWl2YWxlbnQgdG8KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUF2OWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaWYgdGhlIHdvcmQgc2l6ZSBpcyA2NC1iaXQsIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjhwbHVzYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvdGhlcndpc2UuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXNwYXJjdmlzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzcGVjaWZpZXMgYSB2OWIgZW52aXJvbm1lbnQuICBJdCBpcyBlcXVpdmFsZW50IHRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BdjliPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlmIHRoZSB3b3JkIHNpemUgaXMgNjQtYml0LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXY4cGx1c2I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3RoZXJ3aXNlLgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUFzcGFyY2ZtYWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3BlY2lmaWVzIGEgdjliIGVudmlyb25tZW50IHdpdGggdGhlIGZsb2F0aW5nIHBvaW50CitmdXNlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb25zIGVuYWJsZWQuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXNwYXJjaW1hPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNwZWNpZmllcyBhIHY5YiBlbnZpcm9ubWVudCB3aXRoIHRoZSBpbnRlZ2VyCittdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb25zIGVuYWJsZWQuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXNwYXJjdmlzMzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzcGVjaWZpZXMgYSB2OWIgZW52aXJvbm1lbnQgd2l0aCB0aGUgVklTIDMuMCwKK0hQQyAsIGFuZCBmbG9hdGluZyBwb2ludCBmdXNlZCBtdWx0aXBseS1hZGQgaW5zdHJ1Y3Rpb25zIGVuYWJsZWQuCisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQXNwYXJjdmlzM3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3BlY2lmaWVzIGEgdjliIGVudmlyb25tZW50IHdpdGggdGhlIFZJUyAzLjAsCitIUEMsIHRyYW5zYWN0aW9uYWwgbWVtb3J5LCByYW5kb20sIGFuZCBmbG9hdGluZyBwb2ludCB1bmZ1c2VkIG11bHRpcGx5LWFkZAoraW5zdHJ1Y3Rpb25zIGVuYWJsZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4teGFyY2g9djhwbHVzIHwgLXhhcmNoPXY4cGx1c2EgfCAteGFyY2g9djhwbHVzYiB8IC14YXJjaD12OHBsdXNjPC9jb2RlPjxkdD48Y29kZT4teGFyY2g9djhwbHVzZCB8IC14YXJjaD12OHBsdXN2IHwgLXhhcmNoPXY5IHwgLXhhcmNoPXY5YTwvY29kZT48ZHQ+PGNvZGU+LXhhcmNoPXY5YiB8IC14YXJjaD12OWMgfCAteGFyY2g9djlkIHwgLXhhcmNoPXY5djwvY29kZT48ZHQ+PGNvZGU+LXhhcmNoPXNwYXJjIHwgLXhhcmNoPXNwYXJjdmlzIHwgLXhhcmNoPXNwYXJjdmlzMjwvY29kZT48ZHQ+PGNvZGU+LXhhcmNoPXNwYXJjZm1hZiB8IC14YXJjaD1zcGFyY2ltYSB8IC14YXJjaD1zcGFyY3ZpczM8L2NvZGU+PGR0Pjxjb2RlPi14YXJjaD1zcGFyY3ZpczNyPC9jb2RlPjxkZD5Gb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBTdW5PUyB2OSBhc3NlbWJsZXIuICBUaGVzZSBvcHRpb25zIGFyZQorZXF1aXZhbGVudCB0byAtQXY4cGx1cywgLUF2OHBsdXNhLCAtQXY4cGx1c2IsIC1BdjhwbHVzYywgLUF2OHBsdXNkLAorLUF2OHBsdXN2LCAtQXY5LCAtQXY5YSwgLUF2OWIsIC1BdjljLCAtQXY5ZCwgLUF2OXYsIC1Bc3BhcmMsIC1Bc3BhcmN2aXMsCistQXNwYXJjdmlzMiwgLUFzcGFyY2ZtYWYsIC1Bc3BhcmNpbWEsIC1Bc3BhcmN2aXMzLCBhbmQgLUFzcGFyY3ZpczNyLAorcmVzcGVjdGl2ZWx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWJ1bXA8L2NvZGU+PGRkPldhcm4gd2hlbmV2ZXIgaXQgaXMgbmVjZXNzYXJ5IHRvIHN3aXRjaCB0byBhbm90aGVyIGxldmVsLiAKK0lmIGFuIGFyY2hpdGVjdHVyZSBsZXZlbCBpcyBleHBsaWNpdGx5IHJlcXVlc3RlZCwgR0FTIHdpbGwgbm90IGlzc3VlCit3YXJuaW5ncyB1bnRpbCB0aGF0IGxldmVsIGlzIHJlYWNoZWQsIGFuZCB3aWxsIHRoZW4gYnVtcCB0aGUgbGV2ZWwKK2FzIHJlcXVpcmVkIChleGNlcHQgYmV0d2VlbiBpbmNvbXBhdGlibGUgbGV2ZWxzKS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0zMiB8IC02NDwvY29kZT48ZGQ+U2VsZWN0IHRoZSB3b3JkIHNpemUsIGVpdGhlciAzMiBiaXRzIG9yIDY0IGJpdHMuIAorVGhlc2Ugb3B0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgd2l0aCB0aGUgRUxGIG9iamVjdCBmaWxlIGZvcm1hdCwKK2FuZCByZXF1aXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBCRkQgc3VwcG9ydCBoYXMgYmVlbiBpbmNsdWRlZC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkUmVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3BhcmNfMDAyZFJlZ3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWQ3YTgyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3BhcmNfMDAyZFJlZ3MuaHRtbApAQCAtMCwwICsxLDIwOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3BhcmMtUmVncyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3BhcmNfMDAyZFN5bnRheC5odG1sI1NwYXJjXzAwMmRTeW50YXgiIHRpdGxlPSJTcGFyYy1TeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTcGFyY18wMDJkQ2hhcnMuaHRtbCNTcGFyY18wMDJkQ2hhcnMiIHRpdGxlPSJTcGFyYy1DaGFycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNwYXJjXzAwMmRDb25zdGFudHMuaHRtbCNTcGFyY18wMDJkQ29uc3RhbnRzIiB0aXRsZT0iU3BhcmMtQ29uc3RhbnRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3BhcmMtUmVncyI+PC9hPgorPGEgbmFtZT0iU3BhcmNfMDAyZFJlZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3BhcmNfMDAyZENvbnN0YW50cy5odG1sI1NwYXJjXzAwMmRDb25zdGFudHMiPlNwYXJjLUNvbnN0YW50czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNwYXJjXzAwMmRDaGFycy5odG1sI1NwYXJjXzAwMmRDaGFycyI+U3BhcmMtQ2hhcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTcGFyY18wMDJkU3ludGF4Lmh0bWwjU3BhcmNfMDAyZFN5bnRheCI+U3BhcmMtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zOS4zLjIgUmVnaXN0ZXIgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1TcGFyYy1yZWdpc3RlcnMtMTgyMiI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtU3BhcmMtMTgyMyI+PC9hPgorVGhlIFNwYXJjIGludGVnZXIgcmVnaXN0ZXIgZmlsZSBpcyBicm9rZW4gZG93biBpbnRvIGdsb2JhbCwKK291dGdvaW5nLCBsb2NhbCwgYW5kIGluY29taW5nLgorCisgICAgIDx1bD4KKzxsaT5UaGUgOCBnbG9iYWwgcmVnaXN0ZXJzIGFyZSByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVnPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgOCBvdXRnb2luZyByZWdpc3RlcnMgYXJlIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JW88L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSA4IGxvY2FsIHJlZ2lzdGVycyBhcmUgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lbDwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIDggaW5jb21pbmcgcmVnaXN0ZXJzIGFyZSByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVpPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgZnJhbWUgcG9pbnRlciByZWdpc3RlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVpNjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW4gYmUgcmVmZXJlbmNlZCB1c2luZwordGhlIGFsaWFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWZwPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgc3RhY2sgcG9pbnRlciByZWdpc3RlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVvNjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW4gYmUgcmVmZXJlbmNlZCB1c2luZwordGhlIGFsaWFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXNwPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzwvdWw+CisKKyAgIDxwPkZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhcmUgc2ltcGx5IHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWY8L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPiZyc3F1bzsuIAorV2hlbiBhc3NlbWJsaW5nIGZvciBwcmUtVjksIG9ubHkgMzIgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzCithcmUgYXZhaWxhYmxlLiAgRm9yIFY5IGFuZCBsYXRlciB0aGVyZSBhcmUgNjQsIGJ1dCB0aGVyZSBhcmUKK3Jlc3RyaWN0aW9ucyB3aGVuIHJlZmVyZW5jaW5nIHRoZSB1cHBlciAzMiByZWdpc3RlcnMuICBUaGV5CitjYW4gb25seSBiZSBhY2Nlc3NlZCBhcyBkb3VibGUgb3IgcXVhZCwgYW5kIHRodXMgb25seSBldmVuCitvciBxdWFkIG51bWJlcmVkIGFjY2Vzc2VzIGFyZSBhbGxvd2VkLiAgRm9yIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWYzNDwvc3Bhbj48L3NhbXA+JnJzcXVvOworaXMgYSBsZWdhbCBmbG9hdGluZyBwb2ludCByZWdpc3RlciwgYnV0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWYzNTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBub3QuCisKKyAgIDxwPkNlcnRhaW4gVjkgaW5zdHJ1Y3Rpb25zIGFsbG93IGFjY2VzcyB0byBhbmNpbGxhcnkgc3RhdGUgcmVnaXN0ZXJzLiAKK01vc3Qgc2ltcGx5IHRoZXkgY2FuIGJlIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWFzcjwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOyB3aGVyZQorPHZhcj5uPC92YXI+IGNhbiBiZSBmcm9tIDE2IHRvIDMxLiAgSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgYWxpYXNlcworZGVmaW5lZCB0byByZWZlcmVuY2UgQVNSIHJlZ2lzdGVycyBkZWZpbmVkIGZvciB2YXJpb3VzIFVsdHJhU1BBUkMKK3Byb2Nlc3NvcnM6CisKKyAgICAgPHVsPgorPGxpPlRoZSB0aWNrIGNvbXBhcmUgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGlja19jbXByPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgc3lzdGVtIHRpY2sgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3RpY2s8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBBbiBhbGlhcywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXN5c190aWNrPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBleGlzdHMgYnV0IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZAorYnkgbmV3IHNvZnR3YXJlLgorCisgICAgIDxsaT5UaGUgc3lzdGVtIHRpY2sgY29tcGFyZSByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzdGlja19jbXByPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK0FuIGFsaWFzLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzeXNfdGlja19jbXByPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBleGlzdHMgYnV0IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZAorbm90IGJlIHVzZWQgYnkgbmV3IHNvZnR3YXJlLgorCisgICAgIDxsaT5UaGUgc29mdHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXNvZnRpbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBzZXQgc29mdHdhcmUgaW50ZXJydXB0IHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXNldF9zb2Z0aW50PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1RoZSBtbmVtb25pYyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzb2Z0aW50X3NldDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBwcm92aWRlZCBhcyBhbiBhbGlhcy4KKworICAgICA8bGk+VGhlIGNsZWFyIHNvZnR3YXJlIGludGVycnVwdCByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lY2xlYXJfc29mdGludDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSBtbmVtb25pYyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzb2Z0aW50X2NsZWFyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHByb3ZpZGVkCithcyBhbiBhbGlhcy4KKworICAgICA8bGk+VGhlIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbiBjb3VudGVycyByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lcGljPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgcGVyZm9ybWFuY2UgY29udHJvbCByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVwY3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBncmFwaGljcyBzdGF0dXMgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZ3NyPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgVjkgZGlzcGF0Y2ggY29udHJvbCByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkY3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC91bD4KKworICAgPHA+VmFyaW91cyBWOSBicmFuY2ggYW5kIGNvbmRpdGlvbmFsIG1vdmUgaW5zdHJ1Y3Rpb25zIGFsbG93CitzcGVjaWZpY2F0aW9uIG9mIHdoaWNoIHNldCBvZiBpbnRlZ2VyIGNvbmRpdGlvbiBjb2RlcyB0bwordGVzdC4gIFRoZXNlIGFyZSByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV4Y2M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWljYzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+SW4gVjksIHRoZXJlIGFyZSA0IHNldHMgb2YgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9uIGNvZGVzCit3aGljaCBhcmUgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZmNjPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5TZXZlcmFsIHNwZWNpYWwgcHJpdmlsZWdlZCBhbmQgbm9uLXByaXZpbGVnZWQgcmVnaXN0ZXJzCitleGlzdDoKKworICAgICA8dWw+Cis8bGk+VGhlIFY5IGFkZHJlc3Mgc3BhY2UgaWRlbnRpZmllciByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVhc2k8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBWOSByZXN0b3JhYmxlIHdpbmRvd3MgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lY2FucmVzdG9yZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IHNhdmFibGUgd2luZG93cyByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVjYW5zYXZlPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgVjkgY2xlYW4gd2luZG93cyByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVjbGVhbndpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IGN1cnJlbnQgd2luZG93IHBvaW50ZXIgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lY3dwPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgZmxvYXRpbmctcG9pbnQgcXVldWUgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZnE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBWOCBjby1wcm9jZXNzb3IgcXVldWUgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lY3E8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBmbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZnNyPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgb3RoZXIgd2luZG93cyByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVvdGhlcndpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IHByb2dyYW0gY291bnRlciByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVwYzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IG5leHQgcHJvZ3JhbSBjb3VudGVyIHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JW5wYzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IHByb2Nlc3NvciBpbnRlcnJ1cHQgbGV2ZWwgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lcGlsPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgVjkgcHJvY2Vzc29yIHN0YXRlIHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXBzdGF0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIHRyYXAgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRiYTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IHRpY2sgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGljazwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IHRyYXAgbGV2ZWwgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBWOSB0cmFwIHByb2dyYW0gY291bnRlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV0cGM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBWOSB0cmFwIG5leHQgcHJvZ3JhbSBjb3VudGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRucGM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBWOSB0cmFwIHN0YXRlIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRzdGF0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IHRyYXAgdHlwZSBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV0dDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IGNvbmRpdGlvbiBjb2RlcyBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVjY3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBWOSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgc3RhdGUgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZnByczwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IHZlcnNpb24gcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldmVyPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgVjkgd2luZG93IHN0YXRlIHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXdzdGF0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFkgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4leTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY4IHdpbmRvdyBpbnZhbGlkIG1hc2sgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ld2ltPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgVjggcHJvY2Vzc29yIHN0YXRlIHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXBzcjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIFY5IGdsb2JhbCByZWdpc3RlciBsZXZlbCByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVnbDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8L3VsPgorCisgICA8cD5TZXZlcmFsIHNwZWNpYWwgcmVnaXN0ZXIgbmFtZXMgZXhpc3QgZm9yIGh5cGVydmlzb3IgbW9kZSBjb2RlOgorCisgICAgIDx1bD4KKzxsaT5UaGUgaHlwZXJwcml2aWxlZ2VkIHByb2Nlc3NvciBzdGF0ZSByZWdpc3RlciBpcyByZWZlcnJlZCB0byBhcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4laHBzdGF0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+VGhlIGh5cGVycHJpdmlsZWdlZCB0cmFwIHN0YXRlIHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWh0c3RhdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBoeXBlcnByaXZpbGVnZWQgaW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIgaXMgcmVmZXJyZWQgdG8gYXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWhpbnRwPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgaHlwZXJwcml2aWxlZ2VkIHRyYXAgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyIGlzIHJlZmVycmVkIHRvIGFzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVodGJhPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5UaGUgaHlwZXJwcml2aWxlZ2VkIGltcGxlbWVudGF0aW9uIHZlcnNpb24gcmVnaXN0ZXIgaXMgcmVmZXJyZWQKK3RvIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWh2ZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPlRoZSBoeXBlcnByaXZpbGVnZWQgc3lzdGVtIHRpY2sgY29tcGFyZSByZWdpc3RlciBpcyByZWZlcnJlZAordG8gYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4laHN0aWNrX2NtcHI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4laHN0aWNrPC9zcGFuPjwvc2FtcD4mcnNxdW87CityZWdpc3RlciwgdGhlIG5vcm1hbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzdGljazwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB1c2VkLiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRSZWxvY3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRSZWxvY3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDI1ZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3BhcmNfMDAyZFJlbG9jcy5odG1sCkBAIC0wLDAgKzEsMTk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TcGFyYy1SZWxvY3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNwYXJjXzAwMmRTeW50YXguaHRtbCNTcGFyY18wMDJkU3ludGF4IiB0aXRsZT0iU3BhcmMtU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3BhcmNfMDAyZENvbnN0YW50cy5odG1sI1NwYXJjXzAwMmRDb25zdGFudHMiIHRpdGxlPSJTcGFyYy1Db25zdGFudHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTcGFyY18wMDJkU2l6ZV8wMDJkVHJhbnNsYXRpb25zLmh0bWwjU3BhcmNfMDAyZFNpemVfMDAyZFRyYW5zbGF0aW9ucyIgdGl0bGU9IlNwYXJjLVNpemUtVHJhbnNsYXRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3BhcmMtUmVsb2NzIj48L2E+Cis8YSBuYW1lPSJTcGFyY18wMDJkUmVsb2NzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNwYXJjXzAwMmRTaXplXzAwMmRUcmFuc2xhdGlvbnMuaHRtbCNTcGFyY18wMDJkU2l6ZV8wMDJkVHJhbnNsYXRpb25zIj5TcGFyYy1TaXplLVRyYW5zbGF0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNwYXJjXzAwMmRDb25zdGFudHMuaHRtbCNTcGFyY18wMDJkQ29uc3RhbnRzIj5TcGFyYy1Db25zdGFudHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTcGFyY18wMDJkU3ludGF4Lmh0bWwjU3BhcmNfMDAyZFN5bnRheCI+U3BhcmMtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zOS4zLjQgUmVsb2NhdGlvbnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1TcGFyYy1yZWxvY2F0aW9ucy0xODI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVsb2NhdGlvbnNfMDAyYy1TcGFyYy0xODI3Ij48L2E+CitFTEYgcmVsb2NhdGlvbnMgYXJlIGF2YWlsYWJsZSBhcyBkZWZpbmVkIGluIHRoZSAzMi1iaXQgYW5kIDY0LWJpdAorU3BhcmMgRUxGIHNwZWNpZmljYXRpb25zLgorCisgICA8cD48Y29kZT5SX1NQQVJDX0hJMjI8L2NvZGU+IGlzIG9idGFpbmVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWhpPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCA8Y29kZT5SX1NQQVJDX0xPMTA8L2NvZGU+CitpcyBvYnRhaW5lZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVsbzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIExpa2V3aXNlIDxjb2RlPlJfU1BBUkNfSElYMjI8L2NvZGU+IGlzCitvYnRhaW5lZCBmcm9tICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWhpeDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgPGNvZGU+Ul9TUEFSQ19MT1gxMDwvY29kZT4gaXMgb2J0YWluZWQKK3VzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWxveDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIHNldGhpICVoaShzeW1ib2wpLCAlZzEKKyAgICAgb3IgICAgJWcxLCAlbG8oc3ltYm9sKSwgJWcxCisgICAgIAorICAgICBzZXRoaSAlaGl4KHN5bWJvbCksICVnMQorICAgICB4b3IgICAlZzEsICVsb3goc3ltYm9sKSwgJWcxCis8L3ByZT4KKyAgIDxwPlRoZXNlICZsZHF1bztoaWdoJnJkcXVvOyBtbmVtb25pY3MgZXh0cmFjdCBiaXRzIDMxOjEwIG9mIHRoZWlyIG9wZXJhbmQsCithbmQgdGhlICZsZHF1bztsb3cmcmRxdW87IG1uZW1vbmljcyBleHRyYWN0IGJpdHMgOTowIG9mIHRoZWlyIG9wZXJhbmQuCisKKyAgIDxwPlY5IGNvZGUgbW9kZWwgcmVsb2NhdGlvbnMgY2FuIGJlIHJlcXVlc3RlZCBhcyBmb2xsb3dzOgorCisgICAgIDx1bD4KKzxsaT48Y29kZT5SX1NQQVJDX0hIMjI8L2NvZGU+IGlzIHJlcXVlc3RlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVoaDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEl0IGNhbgorYWxzbyBiZSBnZW5lcmF0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldWhpPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzxsaT48Y29kZT5SX1NQQVJDX0hNMTA8L2NvZGU+IGlzIHJlcXVlc3RlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVobTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEl0IGNhbgorYWxzbyBiZSBnZW5lcmF0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldWxvPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzxsaT48Y29kZT5SX1NQQVJDX0xNMjI8L2NvZGU+IGlzIHJlcXVlc3RlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVsbTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+PGNvZGU+Ul9TUEFSQ19INDQ8L2NvZGU+IGlzIHJlcXVlc3RlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVoNDQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPGxpPjxjb2RlPlJfU1BBUkNfTTQ0PC9jb2RlPiBpcyByZXF1ZXN0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lbTQ0PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzxsaT48Y29kZT5SX1NQQVJDX0w0NDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWw0NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVsMzQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPGxpPjxjb2RlPlJfU1BBUkNfSDM0PC9jb2RlPiBpcyByZXF1ZXN0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4laDM0PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzwvdWw+CisKKyAgIDxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVsMzQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZ2VuZXJhdGVzIGEgPGNvZGU+Ul9TUEFSQ19MNDQ8L2NvZGU+IHJlbG9jYXRpb24gYmVjYXVzZSBpdAorY2FsY3VsYXRlcyB0aGUgbmVjZXNzYXJ5IHZhbHVlLCBhbmQgdGhlcmVmb3JlIG5vIGV4cGxpY2l0Cis8Y29kZT5SX1NQQVJDX0wzNDwvY29kZT4gcmVsb2NhdGlvbiBuZWVkZWQgdG8gYmUgY3JlYXRlZCBmb3IgdGhpcyBwdXJwb3NlLgorCisgICA8cD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4laDM0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVsMzQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVsb2NhdGlvbnMgYXJlIHVzZWQgZm9yIHRoZSBhYnMzNCBjb2RlCittb2RlbC4gIEhlcmUgaXMgYW4gZXhhbXBsZSBhYnMzNCBhZGRyZXNzIGdlbmVyYXRpb24gc2VxdWVuY2U6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgc2V0aGkgJWgzNChzeW1ib2wpLCAlZzEKKyAgICAgc2xseCAgJWcxLCAyLCAlZzEKKyAgICAgb3IgICAgJWcxLCAlbDM0KHN5bWJvbCksICVnMQorPC9wcmU+CisgICA8cD5UaGUgUEMgcmVsYXRpdmUgcmVsb2NhdGlvbiA8Y29kZT5SX1NQQVJDX1BDMjI8L2NvZGU+IGNhbiBiZSBvYnRhaW5lZCBieQorZW5jbG9zaW5nIGFuIG9wZXJhbmQgaW5zaWRlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXBjMjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBMaWtld2lzZSwgdGhlCis8Y29kZT5SX1NQQVJDX1BDMTA8L2NvZGU+IHJlbG9jYXRpb24gY2FuIGJlIG9idGFpbmVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXBjMTA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorVGhlc2UgYXJlIG1vc3RseSB1c2VkIHdoZW4gYXNzZW1ibGluZyBQSUMgY29kZS4gIEZvciBleGFtcGxlLCB0aGUKK3N0YW5kYXJkIFBJQyBzZXF1ZW5jZSBvbiBTcGFyYyB0byBnZXQgdGhlIGJhc2Ugb2YgdGhlIGdsb2JhbCBvZmZzZXQKK3RhYmxlLCBQQyByZWxhdGl2ZSwgaW50byBhIHJlZ2lzdGVyLCBjYW4gYmUgcGVyZm9ybWVkIGFzOgorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIHNldGhpICVwYzIyKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXy00KSwgJWw3CisgICAgIGFkZCAgICVsNywgJXBjMTAoX0dMT0JBTF9PRkZTRVRfVEFCTEVfKzQpLCAlbDcKKzwvcHJlPgorICAgPHA+U2V2ZXJhbCByZWxvY2F0aW9ucyBleGlzdCB0byBhbGxvdyB0aGUgbGluayBlZGl0b3IgdG8gcG90ZW50aWFsbHkKK29wdGltaXplIEdPVCBkYXRhIHJlZmVyZW5jZXMuICBUaGUgPGNvZGU+Ul9TUEFSQ19HT1REQVRBX09QX0hJWDIyPC9jb2RlPgorcmVsb2NhdGlvbiBjYW4gb2J0YWluZWQgYnkgZW5jbG9zaW5nIGFuIG9wZXJhbmQgaW5zaWRlIG9mCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVnZG9wX2hpeDIyPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIDxjb2RlPlJfU1BBUkNfR09UREFUQV9PUF9MT1gxMDwvY29kZT4KK3JlbG9jYXRpb24gY2FuIG9idGFpbmVkIGJ5IGVuY2xvc2luZyBhbiBvcGVyYW5kIGluc2lkZSBvZgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZ2RvcF9sb3gxMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIExpa2V3aXNlLCA8Y29kZT5SX1NQQVJDX0dPVERBVEFfT1A8L2NvZGU+IGNhbiBiZQorb2J0YWluZWQgYnkgZW5jbG9zaW5nIGFuIG9wZXJhbmQgaW5zaWRlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWdkb3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorRm9yIGV4YW1wbGUsIGFzc3VtaW5nIHRoZSBHT1QgYmFzZSBpcyBpbiByZWdpc3RlciA8Y29kZT4lbDc8L2NvZGU+OgorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIHNldGhpICVnZG9wX2hpeDIyKHN5bWJvbCksICVsMQorICAgICB4b3IgICAlbDEsICVnZG9wX2xveDEwKHN5bWJvbCksICVsMQorICAgICBsZCAgICBbJWw3ICsgJWwxXSwgJWwyLCAlZ2RvcChzeW1ib2wpCis8L3ByZT4KKyAgIDxwPlRoZXJlIGFyZSBtYW55IHJlbG9jYXRpb25zIHRoYXQgY2FuIGJlIHJlcXVlc3RlZCBmb3IgYWNjZXNzIHRvCit0aHJlYWQgbG9jYWwgc3RvcmFnZSB2YXJpYWJsZXMuICBBbGwgb2YgdGhlIFNwYXJjIFRMUyBtbmVtb25pY3MKK2FyZSBzdXBwb3J0ZWQ6CisKKyAgICAgPHVsPgorPGxpPjxjb2RlPlJfU1BBUkNfVExTX0dEX0hJMjI8L2NvZGU+IGlzIHJlcXVlc3RlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV0Z2RfaGkyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8bGk+PGNvZGU+Ul9TUEFSQ19UTFNfR0RfTE8xMDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRnZF9sbzEwPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzxsaT48Y29kZT5SX1NQQVJDX1RMU19HRF9BREQ8L2NvZGU+IGlzIHJlcXVlc3RlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV0Z2RfYWRkPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzxsaT48Y29kZT5SX1NQQVJDX1RMU19HRF9DQUxMPC9jb2RlPiBpcyByZXF1ZXN0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGdkX2NhbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPjxjb2RlPlJfU1BBUkNfVExTX0xETV9ISTIyPC9jb2RlPiBpcyByZXF1ZXN0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGxkbV9oaTIyPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzxsaT48Y29kZT5SX1NQQVJDX1RMU19MRE1fTE8xMDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRsZG1fbG8xMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8bGk+PGNvZGU+Ul9TUEFSQ19UTFNfTERNX0FERDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRsZG1fYWRkPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzxsaT48Y29kZT5SX1NQQVJDX1RMU19MRE1fQ0FMTDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRsZG1fY2FsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+PGNvZGU+Ul9TUEFSQ19UTFNfTERPX0hJWDIyPC9jb2RlPiBpcyByZXF1ZXN0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGxkb19oaXgyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8bGk+PGNvZGU+Ul9TUEFSQ19UTFNfTERPX0xPWDEwPC9jb2RlPiBpcyByZXF1ZXN0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGxkb19sb3gxMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8bGk+PGNvZGU+Ul9TUEFSQ19UTFNfTERPX0FERDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRsZG9fYWRkPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT48Y29kZT5SX1NQQVJDX1RMU19JRV9ISTIyPC9jb2RlPiBpcyByZXF1ZXN0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGllX2hpMjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPGxpPjxjb2RlPlJfU1BBUkNfVExTX0lFX0xPMTA8L2NvZGU+IGlzIHJlcXVlc3RlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV0aWVfbG8xMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8bGk+PGNvZGU+Ul9TUEFSQ19UTFNfSUVfTEQ8L2NvZGU+IGlzIHJlcXVlc3RlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV0aWVfbGQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPGxpPjxjb2RlPlJfU1BBUkNfVExTX0lFX0xEWDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRpZV9sZHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPGxpPjxjb2RlPlJfU1BBUkNfVExTX0lFX0FERDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRpZV9hZGQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPjxjb2RlPlJfU1BBUkNfVExTX0xFX0hJWDIyPC9jb2RlPiBpcyByZXF1ZXN0ZWQgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldGxlX2hpeDIyPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzxsaT48Y29kZT5SX1NQQVJDX1RMU19MRV9MT1gxMDwvY29kZT4gaXMgcmVxdWVzdGVkIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXRsZV9sb3gxMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8L3VsPgorCisgICA8cD5IZXJlIGFyZSBzb21lIGV4YW1wbGUgVExTIG1vZGVsIHNlcXVlbmNlcy4KKworICAgPHA+Rmlyc3QsIEdlbmVyYWwgRHluYW1pYzoKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBzZXRoaSAgJXRnZF9oaTIyKHN5bWJvbCksICVsMQorICAgICBhZGQgICAgJWwxLCAldGdkX2xvMTAoc3ltYm9sKSwgJWwxCisgICAgIGFkZCAgICAlbDcsICVsMSwgJW8wLCAldGdkX2FkZChzeW1ib2wpCisgICAgIGNhbGwgICBfX3Rsc19nZXRfYWRkciwgJXRnZF9jYWxsKHN5bWJvbCkKKyAgICAgbm9wCis8L3ByZT4KKyAgIDxwPkxvY2FsIER5bmFtaWM6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgc2V0aGkgICV0bGRtX2hpMjIoc3ltYm9sKSwgJWwxCisgICAgIGFkZCAgICAlbDEsICV0bGRtX2xvMTAoc3ltYm9sKSwgJWwxCisgICAgIGFkZCAgICAlbDcsICVsMSwgJW8wLCAldGxkbV9hZGQoc3ltYm9sKQorICAgICBjYWxsICAgX190bHNfZ2V0X2FkZHIsICV0bGRtX2NhbGwoc3ltYm9sKQorICAgICBub3AKKyAgICAgCisgICAgIHNldGhpICAldGxkb19oaXgyMihzeW1ib2wpLCAlbDEKKyAgICAgeG9yICAgICVsMSwgJXRsZG9fbG94MTAoc3ltYm9sKSwgJWwxCisgICAgIGFkZCAgICAlbzAsICVsMSwgJWwxLCAldGxkb19hZGQoc3ltYm9sKQorPC9wcmU+CisgICA8cD5Jbml0aWFsIEV4ZWM6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgc2V0aGkgICV0aWVfaGkyMihzeW1ib2wpLCAlbDEKKyAgICAgYWRkICAgICVsMSwgJXRpZV9sbzEwKHN5bWJvbCksICVsMQorICAgICBsZCAgICAgWyVsNyArICVsMV0sICVvMCwgJXRpZV9sZChzeW1ib2wpCisgICAgIGFkZCAgICAlZzcsICVvMCwgJW8wLCAldGllX2FkZChzeW1ib2wpCisgICAgIAorICAgICBzZXRoaSAgJXRpZV9oaTIyKHN5bWJvbCksICVsMQorICAgICBhZGQgICAgJWwxLCAldGllX2xvMTAoc3ltYm9sKSwgJWwxCisgICAgIGxkeCAgICBbJWw3ICsgJWwxXSwgJW8wLCAldGllX2xkeChzeW1ib2wpCisgICAgIGFkZCAgICAlZzcsICVvMCwgJW8wLCAldGllX2FkZChzeW1ib2wpCis8L3ByZT4KKyAgIDxwPkFuZCBmaW5hbGx5LCBMb2NhbCBFeGVjOgorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIHNldGhpICAldGxlX2hpeDIyKHN5bWJvbCksICVsMQorICAgICBhZGQgICAgJWwxLCAldGxlX2xveDEwKHN5bWJvbCksICVsMQorICAgICBhZGQgICAgJWc3LCAlbDEsICVsMQorPC9wcmU+CisgICA8cD5XaGVuIGFzc2VtYmxpbmcgZm9yIDY0LWJpdCwgYW5kIGEgc2Vjb25kYXJ5IGNvbnN0YW50IGFkZGVuZCBpcworc3BlY2lmaWVkIGluIGFuIGFkZHJlc3MgZXhwcmVzc2lvbiB0aGF0IHdvdWxkIG5vcm1hbGx5IGdlbmVyYXRlCithbiA8Y29kZT5SX1NQQVJDX0xPMTA8L2NvZGU+IHJlbG9jYXRpb24sIHRoZSBhc3NlbWJsZXIgd2lsbCBlbWl0IGFuCis8Y29kZT5SX1NQQVJDX09MTzEwPC9jb2RlPiBpbnN0ZWFkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkU2l6ZV8wMDJkVHJhbnNsYXRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkU2l6ZV8wMDJkVHJhbnNsYXRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzMzBlMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRTaXplXzAwMmRUcmFuc2xhdGlvbnMuaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3BhcmMtU2l6ZS1UcmFuc2xhdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNwYXJjXzAwMmRTeW50YXguaHRtbCNTcGFyY18wMDJkU3ludGF4IiB0aXRsZT0iU3BhcmMtU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3BhcmNfMDAyZFJlbG9jcy5odG1sI1NwYXJjXzAwMmRSZWxvY3MiIHRpdGxlPSJTcGFyYy1SZWxvY3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTcGFyYy1TaXplLVRyYW5zbGF0aW9ucyI+PC9hPgorPGEgbmFtZT0iU3BhcmNfMDAyZFNpemVfMDAyZFRyYW5zbGF0aW9ucyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNwYXJjXzAwMmRSZWxvY3MuaHRtbCNTcGFyY18wMDJkUmVsb2NzIj5TcGFyYy1SZWxvY3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTcGFyY18wMDJkU3ludGF4Lmh0bWwjU3BhcmNfMDAyZFN5bnRheCI+U3BhcmMtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zOS4zLjUgU2l6ZSBUcmFuc2xhdGlvbnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1TcGFyYy1zaXplLXRyYW5zbGF0aW9ucy0xODI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2l6ZV8wMDJjLXRyYW5zbGF0aW9uc18wMDJjLVNwYXJjLTE4MjkiPjwvYT4KK09mdGVuIGl0IGlzIGRlc2lyYWJsZSB0byB3cml0ZSBjb2RlIGluIGFuIG9wZXJhbmQgc2l6ZSBhZ25vc3RpYworbWFubmVyLiAgPGNvZGU+YXM8L2NvZGU+IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoaXMgdmlhCitvcGVyYW5kIHNpemUgb3Bjb2RlIHRyYW5zbGF0aW9ucy4gIFRyYW5zbGF0aW9ucyBhcmUgc3VwcG9ydGVkCitmb3IgbG9hZHMsIHN0b3Jlcywgc2hpZnRzLCBjb21wYXJlLWFuZC1zd2FwIGF0b21pY3MsIGFuZCB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2xyPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN5bnRoZXRpYyBpbnN0cnVjdGlvbi4KKworICAgPHA+SWYgZ2VuZXJhdGluZyAzMi1iaXQgY29kZSwgPGNvZGU+YXM8L2NvZGU+IHdpbGwgZ2VuZXJhdGUgdGhlCiszMi1iaXQgb3Bjb2RlLiAgV2hlcmVhcyBpZiA2NC1iaXQgY29kZSBpcyBiZWluZyBnZW5lcmF0ZWQsCit0aGUgNjQtYml0IG9wY29kZSB3aWxsIGJlIGVtaXR0ZWQuICBGb3IgZXhhbXBsZSA8Y29kZT5sZG48L2NvZGU+Cit3aWxsIGJlIHRyYW5zZm9ybWVkIGludG8gPGNvZGU+bGQ8L2NvZGU+IGZvciAzMi1iaXQgY29kZSBhbmQKKzxjb2RlPmxkeDwvY29kZT4gZm9yIDY0LWJpdCBjb2RlLgorCisgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgbWVhbnQgdG8gZGVtb25zdHJhdGUgYWxsIHRoZSBzdXBwb3J0ZWQKK29wY29kZSB0cmFuc2xhdGlvbnM6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgbGRuICAgWyVvMF0sICVvMQorICAgICBsZG5hICBbJW8wXSAlYXNpLCAlbzIKKyAgICAgc3RuICAgJW8xLCBbJW8wXQorICAgICBzdG5hICAlbzIsIFslbzBdICVhc2kKKyAgICAgc2xsbiAgJW8zLCAzLCAlbzMKKyAgICAgc3JsbiAgJW80LCA4LCAlbzQKKyAgICAgc3JhbiAgJW81LCAxMiwgJW81CisgICAgIGNhc24gIFslbzBdLCAlbzEsICVvMgorICAgICBjYXNuYSBbJW8wXSAlYXNpLCAlbzEsICVvMgorICAgICBjbHJuICAlZzEKKzwvcHJlPgorICAgPHA+SW4gMzItYml0IG1vZGUgPGNvZGU+YXM8L2NvZGU+IHdpbGwgZW1pdDoKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBsZCAgIFslbzBdLCAlbzEKKyAgICAgbGRhICBbJW8wXSAlYXNpLCAlbzIKKyAgICAgc3QgICAlbzEsIFslbzBdCisgICAgIHN0YSAgJW8yLCBbJW8wXSAlYXNpCisgICAgIHNsbCAgJW8zLCAzLCAlbzMKKyAgICAgc3JsICAlbzQsIDgsICVvNAorICAgICBzcmEgICVvNSwgMTIsICVvNQorICAgICBjYXMgIFslbzBdLCAlbzEsICVvMgorICAgICBjYXNhIFslbzBdICVhc2ksICVvMSwgJW8yCisgICAgIGNsciAgJWcxCis8L3ByZT4KKyAgIDxwPkFuZCBpbiA2NC1iaXQgbW9kZSA8Y29kZT5hczwvY29kZT4gd2lsbCBlbWl0OgorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIGxkeCAgIFslbzBdLCAlbzEKKyAgICAgbGR4YSAgWyVvMF0gJWFzaSwgJW8yCisgICAgIHN0eCAgICVvMSwgWyVvMF0KKyAgICAgc3R4YSAgJW8yLCBbJW8wXSAlYXNpCisgICAgIHNsbHggICVvMywgMywgJW8zCisgICAgIHNybHggICVvNCwgOCwgJW80CisgICAgIHNyYXggICVvNSwgMTIsICVvNQorICAgICBjYXN4ICBbJW8wXSwgJW8xLCAlbzIKKyAgICAgY2FzeGEgWyVvMF0gJWFzaSwgJW8xLCAlbzIKKyAgICAgY2xyeCAgJWcxCis8L3ByZT4KKyAgIDxwPkZpbmFsbHksIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ud29yZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0cmFuc2xhdGluZyBkaXJlY3RpdmUgaXMgc3VwcG9ydGVkCithcyB3ZWxsLiAgSXQgaXMgZG9jdW1lbnRlZCBpbiB0aGUgc2VjdGlvbiBvbiBTcGFyYyBtYWNoaW5lCitkaXJlY3RpdmVzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TcGFyY18wMDJkU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUyOTk3YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1NwYXJjXzAwMmRTeW50YXguaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TcGFyYy1TeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNwYXJjXzAwMmREZXBlbmRlbnQuaHRtbCNTcGFyY18wMDJkRGVwZW5kZW50IiB0aXRsZT0iU3BhcmMtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEuaHRtbCNTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YSIgdGl0bGU9IlNwYXJjLUFsaWduZWQtRGF0YSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNwYXJjXzAwMmRGbG9hdC5odG1sI1NwYXJjXzAwMmRGbG9hdCIgdGl0bGU9IlNwYXJjLUZsb2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3BhcmMtU3ludGF4Ij48L2E+Cis8YSBuYW1lPSJTcGFyY18wMDJkU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNwYXJjXzAwMmRGbG9hdC5odG1sI1NwYXJjXzAwMmRGbG9hdCI+U3BhcmMtRmxvYXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTcGFyY18wMDJkQWxpZ25lZF8wMDJkRGF0YS5odG1sI1NwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhIj5TcGFyYy1BbGlnbmVkLURhdGE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTcGFyY18wMDJkRGVwZW5kZW50Lmh0bWwjU3BhcmNfMDAyZERlcGVuZGVudCI+U3BhcmMtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4zOS4zIFNwYXJjIFN5bnRheDwvaDQ+CisKKzxwPlRoZSBhc3NlbWJsZXIgc3ludGF4IGNsb3NlbHkgZm9sbG93cyBUaGUgU3BhcmMgQXJjaGl0ZWN0dXJlIE1hbnVhbCwKK3ZlcnNpb25zIDggYW5kIDksIGFzIHdlbGwgYXMgbW9zdCBleHRlbnNpb25zIGRlZmluZWQgYnkgU3VuCitmb3IgdGhlaXIgVWx0cmFTUEFSQyBhbmQgTmlhZ2FyYSBsaW5lIG9mIHByb2Nlc3NvcnMuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJTcGFyY18wMDJkQ2hhcnMuaHRtbCNTcGFyY18wMDJkQ2hhcnMiPlNwYXJjLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iU3BhcmNfMDAyZFJlZ3MuaHRtbCNTcGFyY18wMDJkUmVncyI+U3BhcmMtUmVnczwvYT46ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgTmFtZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlNwYXJjXzAwMmRDb25zdGFudHMuaHRtbCNTcGFyY18wMDJkQ29uc3RhbnRzIj5TcGFyYy1Db25zdGFudHM8L2E+OiAgICAgICAgICAgICBDb25zdGFudCBOYW1lcworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iU3BhcmNfMDAyZFJlbG9jcy5odG1sI1NwYXJjXzAwMmRSZWxvY3MiPlNwYXJjLVJlbG9jczwvYT46ICAgICAgICAgICAgICAgIFJlbG9jYXRpb25zCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJTcGFyY18wMDJkU2l6ZV8wMDJkVHJhbnNsYXRpb25zLmh0bWwjU3BhcmNfMDAyZFNpemVfMDAyZFRyYW5zbGF0aW9ucyI+U3BhcmMtU2l6ZS1UcmFuc2xhdGlvbnM8L2E+OiAgICAgU2l6ZSBUcmFuc2xhdGlvbnMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N0YWIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N0YWIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzEwNzRmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3RhYi5odG1sCkBAIC0wLDAgKzEsMTAyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdGFiIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTcGFjZS5odG1sI1NwYWNlIiB0aXRsZT0iU3BhY2UiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdHJpbmcuaHRtbCNTdHJpbmciIHRpdGxlPSJTdHJpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdGFiIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN0cmluZy5odG1sI1N0cmluZyI+U3RyaW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3BhY2UuaHRtbCNTcGFjZSI+U3BhY2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTA3IDxjb2RlPi5zdGFiZCwgLnN0YWJuLCAuc3RhYnM8L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3ltYm9saWMtZGVidWdnZXJzXzAwMmMtaW5mb3JtYXRpb24tZm9yLTQ2NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic3RhYl8wMDQwdmFyXzAwN2J4XzAwN2RfMDA3ZC1kaXJlY3RpdmVzLTQ2NiI+PC9hPlRoZXJlIGFyZSB0aHJlZSBkaXJlY3RpdmVzIHRoYXQgYmVnaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3RhYjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitBbGwgZW1pdCBzeW1ib2xzIChzZWUgPGEgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiPlN5bWJvbHM8L2E+KSwgZm9yIHVzZSBieSBzeW1ib2xpYyBkZWJ1Z2dlcnMuIAorVGhlIHN5bWJvbHMgYXJlIG5vdCBlbnRlcmVkIGluIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBoYXNoIHRhYmxlOiB0aGV5CitjYW5ub3QgYmUgcmVmZXJlbmNlZCBlbHNld2hlcmUgaW4gdGhlIHNvdXJjZSBmaWxlLiAKK1VwIHRvIGZpdmUgZmllbGRzIGFyZSByZXF1aXJlZDoKKworICAgICA8ZGw+Cis8ZHQ+PHZhcj5zdHJpbmc8L3Zhcj48ZGQ+VGhpcyBpcyB0aGUgc3ltYm9sJ3MgbmFtZS4gIEl0IG1heSBjb250YWluIGFueSBjaGFyYWN0ZXIgZXhjZXB0CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlwwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHNvIGlzIG1vcmUgZ2VuZXJhbCB0aGFuIG9yZGluYXJ5IHN5bWJvbCBuYW1lcy4gIFNvbWUKK2RlYnVnZ2VycyB1c2VkIHRvIGNvZGUgYXJiaXRyYXJpbHkgY29tcGxleCBzdHJ1Y3R1cmVzIGludG8gc3ltYm9sIG5hbWVzCit1c2luZyB0aGlzIGZpZWxkLgorCisgICAgIDxicj48ZHQ+PHZhcj50eXBlPC92YXI+PGRkPkFuIGFic29sdXRlIGV4cHJlc3Npb24uICBUaGUgc3ltYm9sJ3MgdHlwZSBpcyBzZXQgdG8gdGhlIGxvdyA4IGJpdHMgb2YKK3RoaXMgZXhwcmVzc2lvbi4gIEFueSBiaXQgcGF0dGVybiBpcyBwZXJtaXR0ZWQsIGJ1dCA8Y29kZT5sZDwvY29kZT4KK2FuZCBkZWJ1Z2dlcnMgY2hva2Ugb24gc2lsbHkgYml0IHBhdHRlcm5zLgorCisgICAgIDxicj48ZHQ+PHZhcj5vdGhlcjwvdmFyPjxkZD5BbiBhYnNvbHV0ZSBleHByZXNzaW9uLiAgVGhlIHN5bWJvbCdzICZsZHF1bztvdGhlciZyZHF1bzsgYXR0cmlidXRlIGlzIHNldCB0byB0aGUKK2xvdyA4IGJpdHMgb2YgdGhpcyBleHByZXNzaW9uLgorCisgICAgIDxicj48ZHQ+PHZhcj5kZXNjPC92YXI+PGRkPkFuIGFic29sdXRlIGV4cHJlc3Npb24uICBUaGUgc3ltYm9sJ3MgZGVzY3JpcHRvciBpcyBzZXQgdG8gdGhlIGxvdyAxNgorYml0cyBvZiB0aGlzIGV4cHJlc3Npb24uCisKKyAgICAgPGJyPjxkdD48dmFyPnZhbHVlPC92YXI+PGRkPkFuIGFic29sdXRlIGV4cHJlc3Npb24gd2hpY2ggYmVjb21lcyB0aGUgc3ltYm9sJ3MgdmFsdWUuIAorPC9kbD4KKworICAgPHA+SWYgYSB3YXJuaW5nIGlzIGRldGVjdGVkIHdoaWxlIHJlYWRpbmcgYSA8Y29kZT4uc3RhYmQ8L2NvZGU+LCA8Y29kZT4uc3RhYm48L2NvZGU+LAorb3IgPGNvZGU+LnN0YWJzPC9jb2RlPiBzdGF0ZW1lbnQsIHRoZSBzeW1ib2wgaGFzIHByb2JhYmx5IGFscmVhZHkgYmVlbiBjcmVhdGVkOworeW91IGdldCBhIGhhbGYtZm9ybWVkIHN5bWJvbCBpbiB5b3VyIG9iamVjdCBmaWxlLiAgVGhpcyBpcworY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgYXNzZW1ibGVycyEKKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic3RhYmRfMDA3ZC1kaXJlY3RpdmUtNDY3Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi5zdGFiZCA8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+b3RoZXI8L3Zhcj48Y29kZT4gLCA8L2NvZGU+PHZhcj5kZXNjPC92YXI+PGRkPgorVGhlICZsZHF1bztuYW1lJnJkcXVvOyBvZiB0aGUgc3ltYm9sIGdlbmVyYXRlZCBpcyBub3QgZXZlbiBhbiBlbXB0eSBzdHJpbmcuIAorSXQgaXMgYSBudWxsIHBvaW50ZXIsIGZvciBjb21wYXRpYmlsaXR5LiAgT2xkZXIgYXNzZW1ibGVycyB1c2VkIGEKK251bGwgcG9pbnRlciBzbyB0aGV5IGRpZG4ndCB3YXN0ZSBzcGFjZSBpbiBvYmplY3QgZmlsZXMgd2l0aCBlbXB0eQorc3RyaW5ncy4KKworICAgICA8cD5UaGUgc3ltYm9sJ3MgdmFsdWUgaXMgc2V0IHRvIHRoZSBsb2NhdGlvbiBjb3VudGVyLAorcmVsb2NhdGFibHkuICBXaGVuIHlvdXIgcHJvZ3JhbSBpcyBsaW5rZWQsIHRoZSB2YWx1ZSBvZiB0aGlzIHN5bWJvbAoraXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uIGNvdW50ZXIgd2hlbiB0aGUgPGNvZGU+LnN0YWJkPC9jb2RlPiB3YXMKK2Fzc2VtYmxlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0YWJuXzAwN2QtZGlyZWN0aXZlLTQ2OCI+PC9hPjxicj48ZHQ+PGNvZGU+LnN0YWJuIDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gLCA8L2NvZGU+PHZhcj5vdGhlcjwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmRlc2M8L3Zhcj48Y29kZT4gLCA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxkZD5UaGUgbmFtZSBvZiB0aGUgc3ltYm9sIGlzIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIDxjb2RlPiIiPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0YWJzXzAwN2QtZGlyZWN0aXZlLTQ2OSI+PC9hPjxicj48ZHQ+PGNvZGU+LnN0YWJzIDwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiAsICA8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+b3RoZXI8L3Zhcj48Y29kZT4gLCA8L2NvZGU+PHZhcj5kZXNjPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+QWxsIGZpdmUgZmllbGRzIGFyZSBzcGVjaWZpZWQuIAorPC9kbD4KKyAgIDwhLS0gZW5kICAgICBoYXZlLXN0YWJzIC0tPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdGF0ZW1lbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdGF0ZW1lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2NzRhMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N0YXRlbWVudHMuaHRtbApAQCAtMCwwICsxLDk0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdGF0ZW1lbnRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTeW50YXguaHRtbCNTeW50YXgiIHRpdGxlPSJTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTeW1ib2wtSW50cm8uaHRtbCNTeW1ib2wtSW50cm8iIHRpdGxlPSJTeW1ib2wgSW50cm8iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb25zdGFudHMuaHRtbCNDb25zdGFudHMiIHRpdGxlPSJDb25zdGFudHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdGF0ZW1lbnRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvbnN0YW50cy5odG1sI0NvbnN0YW50cyI+Q29uc3RhbnRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3ltYm9sLUludHJvLmh0bWwjU3ltYm9sLUludHJvIj5TeW1ib2wgSW50cm88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTeW50YXguaHRtbCNTeW50YXgiPlN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNSBTdGF0ZW1lbnRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50c18wMDJjLXN0cnVjdHVyZS1vZi0xMzAiPjwvYT48YSBuYW1lPSJpbmRleC1saW5lLXNlcGFyYXRvci1jaGFyYWN0ZXItMTMxIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvci1jaGFyYWN0ZXItMTMyIj48L2E+CitBIDxkZm4+c3RhdGVtZW50PC9kZm4+IGVuZHMgYXQgYSBuZXdsaW5lIGNoYXJhY3RlciAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cbjwvc3Bhbj48L3NhbXA+JnJzcXVvOykgb3IgYQorPGRmbj5saW5lIHNlcGFyYXRvciBjaGFyYWN0ZXI8L2Rmbj4uICBUaGUgbGluZSBzZXBhcmF0b3IgY2hhcmFjdGVyIGlzIHRhcmdldAorc3BlY2lmaWMgYW5kIGRlc2NyaWJlZCBpbiB0aGUgPGVtPlN5bnRheDwvZW0+IHNlY3Rpb24gb2YgZWFjaAordGFyZ2V0J3MgZG9jdW1lbnRhdGlvbi4gIE5vdCBhbGwgdGFyZ2V0cyBzdXBwb3J0IGEgbGluZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAKK1RoZSBuZXdsaW5lIG9yIGxpbmUgc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBjb25zaWRlcmVkIHRvIGJlIHBhcnQgb2YgdGhlCitwcmVjZWRpbmcgc3RhdGVtZW50LiAgTmV3bGluZXMgYW5kIHNlcGFyYXRvcnMgd2l0aGluIGNoYXJhY3RlciBjb25zdGFudHMgYXJlIGFuCitleGNlcHRpb246IHRoZXkgZG8gbm90IGVuZCBzdGF0ZW1lbnRzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1uZXdsaW5lXzAwMmMtcmVxdWlyZWQtYXQtZmlsZS1lbmQtMTMzIj48L2E+PGEgbmFtZT0iaW5kZXgtRU9GXzAwMmMtbmV3bGluZS1tdXN0LXByZWNlZGUtMTM0Ij48L2E+SXQgaXMgYW4gZXJyb3IgdG8gZW5kIGFueSBzdGF0ZW1lbnQgd2l0aCBlbmQtb2YtZmlsZTogIHRoZSBsYXN0CitjaGFyYWN0ZXIgb2YgYW55IGlucHV0IGZpbGUgc2hvdWxkIGJlIGEgbmV3bGluZS4KKworICAgPHA+QW4gZW1wdHkgc3RhdGVtZW50IGlzIGFsbG93ZWQsIGFuZCBtYXkgaW5jbHVkZSB3aGl0ZXNwYWNlLiAgSXQgaXMgaWdub3JlZC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtaW5zdHJ1Y3Rpb25zLWFuZC1kaXJlY3RpdmVzLTEzNSI+PC9hPjxhIG5hbWU9ImluZGV4LWRpcmVjdGl2ZXMtYW5kLWluc3RydWN0aW9ucy0xMzYiPjwvYT48IS0tICJrZXkgc3ltYm9sIiBpcyBub3QgdXNlZCBlbHNld2hlcmUgaW4gdGhlIGRvY3VtZW50OyBzZWVtcyBwZWRhbnRpYyB0byAtLT4KKzwhLS0gQGRlZm57fSBpdCBpbiB0aGF0IGNhc2UsIGFzIHdhcyBkb25lIHByZXZpb3VzbHkuLi4gIGRvY0BjeWdudXMuY29tLCAtLT4KKzwhLS0gMTNmZWI5MS4gLS0+CitBIHN0YXRlbWVudCBiZWdpbnMgd2l0aCB6ZXJvIG9yIG1vcmUgbGFiZWxzLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEKK2tleSBzeW1ib2wgd2hpY2ggZGV0ZXJtaW5lcyB3aGF0IGtpbmQgb2Ygc3RhdGVtZW50IGl0IGlzLiAgVGhlIGtleQorc3ltYm9sIGRldGVybWluZXMgdGhlIHN5bnRheCBvZiB0aGUgcmVzdCBvZiB0aGUgc3RhdGVtZW50LiAgSWYgdGhlCitzeW1ib2wgYmVnaW5zIHdpdGggYSBkb3QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRoZW4gdGhlIHN0YXRlbWVudCBpcyBhbiBhc3NlbWJsZXIKK2RpcmVjdGl2ZTogdHlwaWNhbGx5IHZhbGlkIGZvciBhbnkgY29tcHV0ZXIuICBJZiB0aGUgc3ltYm9sIGJlZ2lucyB3aXRoCithIGxldHRlciB0aGUgc3RhdGVtZW50IGlzIGFuIGFzc2VtYmx5IGxhbmd1YWdlIDxkZm4+aW5zdHJ1Y3Rpb248L2Rmbj46IGl0Cithc3NlbWJsZXMgaW50byBhIG1hY2hpbmUgbGFuZ3VhZ2UgaW5zdHJ1Y3Rpb24uIAorRGlmZmVyZW50IHZlcnNpb25zIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGZvciBkaWZmZXJlbnQgY29tcHV0ZXJzCityZWNvZ25pemUgZGlmZmVyZW50IGluc3RydWN0aW9ucy4gIEluIGZhY3QsIHRoZSBzYW1lIHN5bWJvbCBtYXkKK3JlcHJlc2VudCBhIGRpZmZlcmVudCBpbnN0cnVjdGlvbiBpbiBhIGRpZmZlcmVudCBjb21wdXRlcidzIGFzc2VtYmx5CitsYW5ndWFnZS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAzYV8wMDdkLV8wMDI4bGFiZWxfMDAyOS0xMzciPjwvYT48YSBuYW1lPSJpbmRleC1sYWJlbC1fMDAyOF8wMDQwY29kZV8wMDdiXzAwM2FfMDA3ZF8wMDI5LTEzOCI+PC9hPkEgbGFiZWwgaXMgYSBzeW1ib2wgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBjb2xvbiAoPGNvZGU+OjwvY29kZT4pLiAKK1doaXRlc3BhY2UgYmVmb3JlIGEgbGFiZWwgb3IgYWZ0ZXIgYSBjb2xvbiBpcyBwZXJtaXR0ZWQsIGJ1dCB5b3UgbWF5IG5vdAoraGF2ZSB3aGl0ZXNwYWNlIGJldHdlZW4gYSBsYWJlbCdzIHN5bWJvbCBhbmQgaXRzIGNvbG9uLiBTZWUgPGEgaHJlZj0iTGFiZWxzLmh0bWwjTGFiZWxzIj5MYWJlbHM8L2E+LgorCisgICA8cD5Gb3IgSFBQQSB0YXJnZXRzLCBsYWJlbHMgbmVlZCBub3QgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBjb2xvbiwgYnV0Cit0aGUgZGVmaW5pdGlvbiBvZiBhIGxhYmVsIG11c3QgYmVnaW4gaW4gY29sdW1uIHplcm8uICBUaGlzIGFsc28gaW1wbGllcyB0aGF0Citvbmx5IG9uZSBsYWJlbCBtYXkgYmUgZGVmaW5lZCBvbiBlYWNoIGxpbmUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBsYWJlbDogICAgIC5kaXJlY3RpdmUgICAgZm9sbG93ZWQgYnkgc29tZXRoaW5nCisgICAgIGFub3RoZXJfbGFiZWw6ICAgICAgICAgICAjIFRoaXMgaXMgYW4gZW1wdHkgc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uICAgb3BlcmFuZF8xLCBvcGVyYW5kXzIsIC4uLgorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdHJpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N0cmluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZDA0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdHJpbmcuaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdHJpbmcgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlN0YWIuaHRtbCNTdGFiIiB0aXRsZT0iU3RhYiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlN0cnVjdC5odG1sI1N0cnVjdCIgdGl0bGU9IlN0cnVjdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlN0cmluZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTdHJ1Y3QuaHRtbCNTdHJ1Y3QiPlN0cnVjdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN0YWIuaHRtbCNTdGFiIj5TdGFiPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjEwOCA8Y29kZT4uc3RyaW5nPC9jb2RlPiAiPHZhcj5zdHI8L3Zhcj4iLCA8Y29kZT4uc3RyaW5nODwvY29kZT4gIjx2YXI+c3RyPC92YXI+IiwgPGNvZGU+LnN0cmluZzE2PC9jb2RlPjwvaDM+CisKKzxwPiI8dmFyPnN0cjwvdmFyPiIsIDxjb2RlPi5zdHJpbmczMjwvY29kZT4gIjx2YXI+c3RyPC92YXI+IiwgPGNvZGU+LnN0cmluZzY0PC9jb2RlPiAiPHZhcj5zdHI8L3Zhcj4iCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXN0cmluZ18wMDJjLWNvcHlpbmctdG8tb2JqZWN0LWZpbGUtNDcwIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nOF8wMDJjLWNvcHlpbmctdG8tb2JqZWN0LWZpbGUtNDcxIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nMTZfMDAyYy1jb3B5aW5nLXRvLW9iamVjdC1maWxlLTQ3MiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmluZzMyXzAwMmMtY29weWluZy10by1vYmplY3QtZmlsZS00NzMiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmc2NF8wMDJjLWNvcHlpbmctdG8tb2JqZWN0LWZpbGUtNDc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJpbmdfMDA3ZC1kaXJlY3RpdmUtNDc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJpbmc4XzAwN2QtZGlyZWN0aXZlLTQ3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic3RyaW5nMTZfMDA3ZC1kaXJlY3RpdmUtNDc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJpbmczMl8wMDdkLWRpcmVjdGl2ZS00NzgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0cmluZzY0XzAwN2QtZGlyZWN0aXZlLTQ3OSI+PC9hPgorQ29weSB0aGUgY2hhcmFjdGVycyBpbiA8dmFyPnN0cjwvdmFyPiB0byB0aGUgb2JqZWN0IGZpbGUuICBZb3UgbWF5IHNwZWNpZnkgbW9yZSB0aGFuCitvbmUgc3RyaW5nIHRvIGNvcHksIHNlcGFyYXRlZCBieSBjb21tYXMuICBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBmb3IgYQorcGFydGljdWxhciBtYWNoaW5lLCB0aGUgYXNzZW1ibGVyIG1hcmtzIHRoZSBlbmQgb2YgZWFjaCBzdHJpbmcgd2l0aCBhIDAgYnl0ZS4gCitZb3UgY2FuIHVzZSBhbnkgb2YgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPi4KKworICAgPHA+VGhlIHZhcmlhbnRzIDxjb2RlPnN0cmluZzE2PC9jb2RlPiwgPGNvZGU+c3RyaW5nMzI8L2NvZGU+IGFuZCA8Y29kZT5zdHJpbmc2NDwvY29kZT4gZGlmZmVyIGZyb20KK3RoZSA8Y29kZT5zdHJpbmc8L2NvZGU+IHBzZXVkbyBvcGNvZGUgaW4gdGhhdCBlYWNoIDgtYml0IGNoYXJhY3RlciBmcm9tIDx2YXI+c3RyPC92YXI+IGlzCitjb3BpZWQgYW5kIGV4cGFuZGVkIHRvIDE2LCAzMiBvciA2NCBiaXRzIHJlc3BlY3RpdmVseS4gIFRoZSBleHBhbmRlZCBjaGFyYWN0ZXJzCithcmUgc3RvcmVkIGluIHRhcmdldCBlbmRpYW5uZXNzIGJ5dGUgb3JkZXIuCisKKyAgIDxwPkV4YW1wbGU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgCS5zdHJpbmczMiAiQllFIgorICAgICBleHBhbmRzIHRvOgorICAgICAJLnN0cmluZyAgICJCXDBcMFwwWVwwXDBcMEVcMFwwXDAiICAvKiBPbiBsaXR0bGUgZW5kaWFuIHRhcmdldHMuICAqLworICAgICAJLnN0cmluZyAgICJcMFwwXDBCXDBcMFwwWVwwXDBcMEUiICAvKiBPbiBiaWcgZW5kaWFuIHRhcmdldHMuICAqLworPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdHJpbmdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdHJpbmdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ1NDcyNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N0cmluZ3MuaHRtbApAQCAtMCwwICsxLDExNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3RyaW5ncyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ2hhcmFjdGVycy5odG1sI0NoYXJhY3RlcnMiIHRpdGxlPSJDaGFyYWN0ZXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ2hhcnMuaHRtbCNDaGFycyIgdGl0bGU9IkNoYXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3RyaW5ncyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDaGFycy5odG1sI0NoYXJzIj5DaGFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNoYXJhY3RlcnMuaHRtbCNDaGFyYWN0ZXJzIj5DaGFyYWN0ZXJzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+My42LjEuMSBTdHJpbmdzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RyaW5nLWNvbnN0YW50cy0xNDIiPjwvYT48YSBuYW1lPSJpbmRleC1jb25zdGFudHNfMDAyYy1zdHJpbmctMTQzIj48L2E+QSA8ZGZuPnN0cmluZzwvZGZuPiBpcyB3cml0dGVuIGJldHdlZW4gZG91YmxlLXF1b3Rlcy4gIEl0IG1heSBjb250YWluCitkb3VibGUtcXVvdGVzIG9yIG51bGwgY2hhcmFjdGVycy4gIFRoZSB3YXkgdG8gZ2V0IHNwZWNpYWwgY2hhcmFjdGVycworaW50byBhIHN0cmluZyBpcyB0byA8ZGZuPmVzY2FwZTwvZGZuPiB0aGVzZSBjaGFyYWN0ZXJzOiBwcmVjZWRlIHRoZW0gd2l0aAorYSBiYWNrc2xhc2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3Rlci4gIEZvciBleGFtcGxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XFw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVwcmVzZW50cworb25lIGJhY2tzbGFzaDogIHRoZSBmaXJzdCA8Y29kZT5cPC9jb2RlPiBpcyBhbiBlc2NhcGUgd2hpY2ggdGVsbHMKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRvIGludGVycHJldCB0aGUgc2Vjb25kIGNoYXJhY3RlciBsaXRlcmFsbHkgYXMgYSBiYWNrc2xhc2gKKyh3aGljaCBwcmV2ZW50cyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBmcm9tIHJlY29nbml6aW5nIHRoZSBzZWNvbmQgPGNvZGU+XDwvY29kZT4gYXMgYW4KK2VzY2FwZSBjaGFyYWN0ZXIpLiAgVGhlIGNvbXBsZXRlIGxpc3Qgb2YgZXNjYXBlcyBmb2xsb3dzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1lc2NhcGUtY29kZXNfMDAyYy1jaGFyYWN0ZXItMTQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2hhcmFjdGVyLWVzY2FwZS1jb2Rlcy0xNDUiPjwvYT4KKyAgICAgPGRsPgorPCEtLSBAaXRlbSBcYSAtLT4KKzwhLS0gTW5lbW9uaWMgZm9yIEFDS25vd2xlZGdlOyBmb3IgQVNDSUkgdGhpcyBpcyBvY3RhbCBjb2RlIDAwNy4gLS0+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVjYl8wMDdkLV8wMDI4YmFja3NwYWNlLWNoYXJhY3Rlcl8wMDI5LTE0NiI+PC9hPjxhIG5hbWU9ImluZGV4LWJhY2tzcGFjZS1fMDAyOF8wMDQwY29kZV8wMDdiXzAwNWNiXzAwN2RfMDAyOS0xNDciPjwvYT48ZHQ+PGtiZD5cYjwva2JkPjxkZD5NbmVtb25pYyBmb3IgYmFja3NwYWNlOyBmb3IgQVNDSUkgdGhpcyBpcyBvY3RhbCBjb2RlIDAxMC4KKworICAgICA8IS0tIEBpdGVtIFxlIC0tPgorICAgICA8IS0tIE1uZW1vbmljIGZvciBFT1RleHQ7IGZvciBBU0NJSSB0aGlzIGlzIG9jdGFsIGNvZGUgMDA0LiAtLT4KKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y2ZfMDA3ZC1fMDAyOGZvcm1mZWVkLWNoYXJhY3Rlcl8wMDI5LTE0OCI+PC9hPjxhIG5hbWU9ImluZGV4LWZvcm1mZWVkLV8wMDI4XzAwNDBjb2RlXzAwN2JfMDA1Y2ZfMDA3ZF8wMDI5LTE0OSI+PC9hPjxicj48ZHQ+PGtiZD5cZjwva2JkPjxkZD5NbmVtb25pYyBmb3IgRm9ybUZlZWQ7IGZvciBBU0NJSSB0aGlzIGlzIG9jdGFsIGNvZGUgMDE0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWNuXzAwN2QtXzAwMjhuZXdsaW5lLWNoYXJhY3Rlcl8wMDI5LTE1MCI+PC9hPjxhIG5hbWU9ImluZGV4LW5ld2xpbmUtXzAwMjhfMDA0MGNvZGVfMDA3Yl8wMDVjbl8wMDdkXzAwMjktMTUxIj48L2E+PGJyPjxkdD48a2JkPlxuPC9rYmQ+PGRkPk1uZW1vbmljIGZvciBuZXdsaW5lOyBmb3IgQVNDSUkgdGhpcyBpcyBvY3RhbCBjb2RlIDAxMi4KKworICAgICA8IS0tIEBpdGVtIFxwIC0tPgorICAgICA8IS0tIE1uZW1vbmljIGZvciBwcmVmaXg7IGZvciBBU0NJSSB0aGlzIGlzIG9jdGFsIGNvZGUgMDMzLCB1c3VhbGx5IGtub3duIGFzIEBjb2Rle2VzY2FwZX0uIC0tPgorICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVjcl8wMDdkLV8wMDI4Y2FycmlhZ2UtcmV0dXJuLWNoYXJhY3Rlcl8wMDI5LTE1MiI+PC9hPjxhIG5hbWU9ImluZGV4LWNhcnJpYWdlLXJldHVybi1fMDAyOF8wMDQwY29kZV8wMDdiXzAwNWNyXzAwN2RfMDAyOS0xNTMiPjwvYT48YnI+PGR0PjxrYmQ+XHI8L2tiZD48ZGQ+TW5lbW9uaWMgZm9yIGNhcnJpYWdlLVJldHVybjsgZm9yIEFTQ0lJIHRoaXMgaXMgb2N0YWwgY29kZSAwMTUuCisKKyAgICAgPCEtLSBAaXRlbSBccyAtLT4KKyAgICAgPCEtLSBNbmVtb25pYyBmb3Igc3BhY2U7IGZvciBBU0NJSSB0aGlzIGlzIG9jdGFsIGNvZGUgMDQwLiAgSW5jbHVkZWQgZm9yIGNvbXBsaWFuY2Ugd2l0aCAtLT4KKyAgICAgPCEtLSBvdGhlciBhc3NlbWJsZXJzLiAtLT4KKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y3RfMDA3ZC1fMDAyOHRhYl8wMDI5LTE1NCI+PC9hPjxhIG5hbWU9ImluZGV4LXRhYi1fMDAyOF8wMDQwY29kZV8wMDdiXzAwNWN0XzAwN2RfMDAyOS0xNTUiPjwvYT48YnI+PGR0PjxrYmQ+XHQ8L2tiZD48ZGQ+TW5lbW9uaWMgZm9yIGhvcml6b250YWwgVGFiOyBmb3IgQVNDSUkgdGhpcyBpcyBvY3RhbCBjb2RlIDAxMS4KKworICAgICA8IS0tIEBpdGVtIFx2IC0tPgorICAgICA8IS0tIE1uZW1vbmljIGZvciBWZXJ0aWNhbCB0YWI7IGZvciBBU0NJSSB0aGlzIGlzIG9jdGFsIGNvZGUgMDEzLiAtLT4KKyAgICAgPCEtLSBAaXRlbSBceCBAdmFye2RpZ2l0fSBAdmFye2RpZ2l0fSBAdmFye2RpZ2l0fSAtLT4KKyAgICAgPCEtLSBBIGhleGFkZWNpbWFsIGNoYXJhY3RlciBjb2RlLiAgVGhlIG51bWVyaWMgY29kZSBpcyAzIGhleGFkZWNpbWFsIGRpZ2l0cy4gLS0+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWNfMDA0MHZhcl8wMDdiZGRkXzAwN2RfMDA3ZC1fMDAyOG9jdGFsLWNoYXJhY3Rlci1jb2RlXzAwMjktMTU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtb2N0YWwtY2hhcmFjdGVyLWNvZGUtXzAwMjhfMDA0MGNvZGVfMDA3Yl8wMDVjXzAwNDB2YXJfMDA3YmRkZF8wMDdkXzAwN2RfMDAyOS0xNTciPjwvYT48YnI+PGR0PjxrYmQ+XCA8L2tiZD48dmFyPmRpZ2l0PC92YXI+IDx2YXI+ZGlnaXQ8L3Zhcj4gPHZhcj5kaWdpdDwvdmFyPjxkZD5BbiBvY3RhbCBjaGFyYWN0ZXIgY29kZS4gIFRoZSBudW1lcmljIGNvZGUgaXMgMyBvY3RhbCBkaWdpdHMuIAorRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBVbml4IHN5c3RlbXMsIDggYW5kIDkgYXJlIGFjY2VwdGVkIGFzIGRpZ2l0czoKK2ZvciBleGFtcGxlLCA8Y29kZT5cMDA4PC9jb2RlPiBoYXMgdGhlIHZhbHVlIDAxMCwgYW5kIDxjb2RlPlwwMDk8L2NvZGU+IHRoZSB2YWx1ZSAwMTEuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Y18wMDQwdmFyXzAwN2J4ZF8wMDJlXzAwMmVfMDAyZV8wMDdkXzAwN2QtXzAwMjhoZXgtY2hhcmFjdGVyLWNvZGVfMDAyOS0xNTgiPjwvYT48YSBuYW1lPSJpbmRleC1oZXgtY2hhcmFjdGVyLWNvZGUtXzAwMjhfMDA0MGNvZGVfMDA3Yl8wMDVjXzAwNDB2YXJfMDA3YnhkXzAwMmVfMDAyZV8wMDJlXzAwN2RfMDA3ZF8wMDI5LTE1OSI+PC9hPjxicj48ZHQ+PGtiZD5cPC9rYmQ+PGNvZGU+eDwvY29kZT4gPHZhcj5oZXgtZGlnaXRzLi4uPC92YXI+PGRkPkEgaGV4IGNoYXJhY3RlciBjb2RlLiAgQWxsIHRyYWlsaW5nIGhleCBkaWdpdHMgYXJlIGNvbWJpbmVkLiAgRWl0aGVyIHVwcGVyIG9yCitsb3dlciBjYXNlIDxjb2RlPng8L2NvZGU+IHdvcmtzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWNfMDA1Y18wMDdkLV8wMDI4XzAwNDBzYW1wXzAwN2JfMDA1Y18wMDdkLWNoYXJhY3Rlcl8wMDI5LTE2MCI+PC9hPjxhIG5hbWU9ImluZGV4LWJhY2tzbGFzaC1fMDAyOF8wMDQwY29kZV8wMDdiXzAwNWNfMDA1Y18wMDdkXzAwMjktMTYxIj48L2E+PGJyPjxkdD48a2JkPlxcPC9rYmQ+PGRkPlJlcHJlc2VudHMgb25lICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIuCisKKyAgICAgPCEtLSBAaXRlbSBcJyAtLT4KKyAgICAgPCEtLSBSZXByZXNlbnRzIG9uZSBAc2FtcHsnfSAoYWNjZW50IGFjdXRlKSBjaGFyYWN0ZXIuIC0tPgorICAgICA8IS0tIFRoaXMgaXMgbmVlZGVkIGluIHNpbmdsZSBjaGFyYWN0ZXIgbGl0ZXJhbHMgLS0+CisgICAgIDwhLS0gKEB4cmVme0NoYXJhY3RlcnMsLENoYXJhY3RlciBDb25zdGFudHN9LikgdG8gcmVwcmVzZW50IC0tPgorICAgICA8IS0tIGEgQHNhbXB7J30uIC0tPgorICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVjXzAwMjJfMDA3ZC1fMDAyOGRvdWJsZXF1b3RlLWNoYXJhY3Rlcl8wMDI5LTE2MiI+PC9hPjxhIG5hbWU9ImluZGV4LWRvdWJsZXF1b3RlLV8wMDI4XzAwNDBjb2RlXzAwN2JfMDA1Y18wMDIyXzAwN2RfMDAyOS0xNjMiPjwvYT48YnI+PGR0PjxrYmQ+XCI8L2tiZD48ZGQ+UmVwcmVzZW50cyBvbmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4iPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3Rlci4gIE5lZWRlZCBpbiBzdHJpbmdzIHRvIHJlcHJlc2VudAordGhpcyBjaGFyYWN0ZXIsIGJlY2F1c2UgYW4gdW5lc2NhcGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ijwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3b3VsZCBlbmQgdGhlIHN0cmluZy4KKworICAgICA8YnI+PGR0PjxrYmQ+XCA8L2tiZD48dmFyPmFueXRoaW5nLWVsc2U8L3Zhcj48ZGQ+QW55IG90aGVyIGNoYXJhY3RlciB3aGVuIGVzY2FwZWQgYnkgPGtiZD5cPC9rYmQ+IGdpdmVzIGEgd2FybmluZywgYnV0Cithc3NlbWJsZXMgYXMgaWYgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3YXMgbm90IHByZXNlbnQuICBUaGUgaWRlYSBpcyB0aGF0IGlmCit5b3UgdXNlZCBhbiBlc2NhcGUgc2VxdWVuY2UgeW91IGNsZWFybHkgZGlkbid0IHdhbnQgdGhlIGxpdGVyYWwKK2ludGVycHJldGF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyLiAgSG93ZXZlciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBoYXMgbm8KK290aGVyIGludGVycHJldGF0aW9uLCBzbyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBrbm93cyBpdCBpcyBnaXZpbmcgeW91IHRoZSB3cm9uZworY29kZSBhbmQgd2FybnMgeW91IG9mIHRoZSBmYWN0LiAKKzwvZGw+CisKKyAgIDxwPldoaWNoIGNoYXJhY3RlcnMgYXJlIGVzY2FwYWJsZSwgYW5kIHdoYXQgdGhvc2UgZXNjYXBlcyByZXByZXNlbnQsCit2YXJpZXMgd2lkZWx5IGFtb25nIGFzc2VtYmxlcnMuICBUaGUgY3VycmVudCBzZXQgaXMgd2hhdCB3ZSB0aGluawordGhlIEJTRCA0LjIgYXNzZW1ibGVyIHJlY29nbml6ZXMsIGFuZCBpcyBhIHN1YnNldCBvZiB3aGF0IG1vc3QgQworY29tcGlsZXJzIHJlY29nbml6ZS4gIElmIHlvdSBhcmUgaW4gZG91YnQsIGRvIG5vdCB1c2UgYW4gZXNjYXBlCitzZXF1ZW5jZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3RydWN0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdHJ1Y3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjZiMWQwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3RydWN0Lmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3RydWN0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdHJpbmcuaHRtbCNTdHJpbmciIHRpdGxlPSJTdHJpbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiIgdGl0bGU9IlN1YlNlY3Rpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdHJ1Y3QiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3ViU2VjdGlvbi5odG1sI1N1YlNlY3Rpb24iPlN1YlNlY3Rpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTdHJpbmcuaHRtbCNTdHJpbmciPlN0cmluZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMDkgPGNvZGU+LnN0cnVjdCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJ1Y3RfMDA3ZC1kaXJlY3RpdmUtNDgwIj48L2E+U3dpdGNoIHRvIHRoZSBhYnNvbHV0ZSBzZWN0aW9uLCBhbmQgc2V0IHRoZSBzZWN0aW9uIG9mZnNldCB0byA8dmFyPmV4cHJlc3Npb248L3Zhcj4sCit3aGljaCBtdXN0IGJlIGFuIGFic29sdXRlIGV4cHJlc3Npb24uICBZb3UgbWlnaHQgdXNlIHRoaXMgYXMgZm9sbG93czoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIC5zdHJ1Y3QgMAorICAgICBmaWVsZDE6CisgICAgICAgICAgICAgLnN0cnVjdCBmaWVsZDEgKyA0CisgICAgIGZpZWxkMjoKKyAgICAgICAgICAgICAuc3RydWN0IGZpZWxkMiArIDQKKyAgICAgZmllbGQzOgorPC9wcmU+CisgICA8cD5UaGlzIHdvdWxkIGRlZmluZSB0aGUgc3ltYm9sIDxjb2RlPmZpZWxkMTwvY29kZT4gdG8gaGF2ZSB0aGUgdmFsdWUgMCwgdGhlIHN5bWJvbAorPGNvZGU+ZmllbGQyPC9jb2RlPiB0byBoYXZlIHRoZSB2YWx1ZSA0LCBhbmQgdGhlIHN5bWJvbCA8Y29kZT5maWVsZDM8L2NvZGU+IHRvIGhhdmUgdGhlCit2YWx1ZSA4LiAgQXNzZW1ibHkgd291bGQgYmUgbGVmdCBpbiB0aGUgYWJzb2x1dGUgc2VjdGlvbiwgYW5kIHlvdSB3b3VsZCBuZWVkIHRvCit1c2UgYSA8Y29kZT4uc2VjdGlvbjwvY29kZT4gZGlyZWN0aXZlIG9mIHNvbWUgc29ydCB0byBjaGFuZ2UgdG8gc29tZSBvdGhlciBzZWN0aW9uCitiZWZvcmUgZnVydGhlciBhc3NlbWJseS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ViU2VjdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ViU2VjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOTY5NGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdWJTZWN0aW9uLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3ViU2VjdGlvbiAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3RydWN0Lmh0bWwjU3RydWN0IiB0aXRsZT0iU3RydWN0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltdmVyLmh0bWwjU3ltdmVyIiB0aXRsZT0iU3ltdmVyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ViU2VjdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTeW12ZXIuaHRtbCNTeW12ZXIiPlN5bXZlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN0cnVjdC5odG1sI1N0cnVjdCI+U3RydWN0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjExMCA8Y29kZT4uc3Vic2VjdGlvbiA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdWJzZWN0aW9uXzAwN2QtZGlyZWN0aXZlLTQ4MSI+PC9hPjxhIG5hbWU9ImluZGV4LVNlY3Rpb24tU3RhY2stNDgyIj48L2E+VGhpcyBpcyBvbmUgb2YgdGhlIEVMRiBzZWN0aW9uIHN0YWNrIG1hbmlwdWxhdGlvbiBkaXJlY3RpdmVzLiAgVGhlIG90aGVycyBhcmUKKzxjb2RlPi5zZWN0aW9uPC9jb2RlPiAoc2VlIDxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj5TZWN0aW9uPC9hPiksIDxjb2RlPi5wdXNoc2VjdGlvbjwvY29kZT4gKHNlZSA8YSBocmVmPSJQdXNoU2VjdGlvbi5odG1sI1B1c2hTZWN0aW9uIj5QdXNoU2VjdGlvbjwvYT4pLAorPGNvZGU+LnBvcHNlY3Rpb248L2NvZGU+IChzZWUgPGEgaHJlZj0iUG9wU2VjdGlvbi5odG1sI1BvcFNlY3Rpb24iPlBvcFNlY3Rpb248L2E+KSwgYW5kIDxjb2RlPi5wcmV2aW91czwvY29kZT4KKyhzZWUgPGEgaHJlZj0iUHJldmlvdXMuaHRtbCNQcmV2aW91cyI+UHJldmlvdXM8L2E+KS4KKworICAgPHA+VGhpcyBkaXJlY3RpdmUgcmVwbGFjZXMgdGhlIGN1cnJlbnQgc3Vic2VjdGlvbiB3aXRoIDxjb2RlPm5hbWU8L2NvZGU+LiAgVGhlIGN1cnJlbnQKK3NlY3Rpb24gaXMgbm90IGNoYW5nZWQuICBUaGUgcmVwbGFjZWQgc3Vic2VjdGlvbiBpcyBwdXQgb250byB0aGUgc2VjdGlvbiBzdGFjaworaW4gcGxhY2Ugb2YgdGhlIHRoZW4gY3VycmVudCB0b3Agb2Ygc3RhY2sgc3Vic2VjdGlvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ViXzAwMmRTZWN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ViXzAwMmRTZWN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNzIzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TdWJfMDAyZFNlY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwxMTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN1Yi1TZWN0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2VjdGlvbnMuaHRtbCNTZWN0aW9ucyIgdGl0bGU9IlNlY3Rpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQXMtU2VjdGlvbnMuaHRtbCNBcy1TZWN0aW9ucyIgdGl0bGU9IkFzIFNlY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYnNzLmh0bWwjYnNzIiB0aXRsZT0iYnNzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ViLVNlY3Rpb25zIj48L2E+Cis8YSBuYW1lPSJTdWJfMDAyZFNlY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImJzcy5odG1sI2JzcyI+YnNzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQXMtU2VjdGlvbnMuaHRtbCNBcy1TZWN0aW9ucyI+QXMgU2VjdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIj5TZWN0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNCBTdWItU2VjdGlvbnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1udW1iZXJlZC1zdWJzZWN0aW9ucy0yMDQiPjwvYT48YSBuYW1lPSJpbmRleC1ncm91cGluZy1kYXRhLTIwNSI+PC9hPkFzc2VtYmxlZCBieXRlcworY29udmVudGlvbmFsbHkKK2ZhbGwgaW50byB0d28gc2VjdGlvbnM6IHRleHQgYW5kIGRhdGEuIAorWW91IG1heSBoYXZlIHNlcGFyYXRlIGdyb3VwcyBvZgorZGF0YSBpbiBuYW1lZCBzZWN0aW9ucwordGhhdCB5b3Ugd2FudCB0byBlbmQgdXAgbmVhciB0byBlYWNoIG90aGVyIGluIHRoZSBvYmplY3QgZmlsZSwgZXZlbiB0aG91Z2ggdGhleQorYXJlIG5vdCBjb250aWd1b3VzIGluIHRoZSBhc3NlbWJsZXIgc291cmNlLiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYWxsb3dzIHlvdSB0bwordXNlIDxkZm4+c3Vic2VjdGlvbnM8L2Rmbj4gZm9yIHRoaXMgcHVycG9zZS4gIFdpdGhpbiBlYWNoIHNlY3Rpb24sIHRoZXJlIGNhbiBiZQorbnVtYmVyZWQgc3Vic2VjdGlvbnMgd2l0aCB2YWx1ZXMgZnJvbSAwIHRvIDgxOTIuICBPYmplY3RzIGFzc2VtYmxlZCBpbnRvIHRoZQorc2FtZSBzdWJzZWN0aW9uIGdvIGludG8gdGhlIG9iamVjdCBmaWxlIHRvZ2V0aGVyIHdpdGggb3RoZXIgb2JqZWN0cyBpbiB0aGUgc2FtZQorc3Vic2VjdGlvbi4gIEZvciBleGFtcGxlLCBhIGNvbXBpbGVyIG1pZ2h0IHdhbnQgdG8gc3RvcmUgY29uc3RhbnRzIGluIHRoZSB0ZXh0CitzZWN0aW9uLCBidXQgbWlnaHQgbm90IHdhbnQgdG8gaGF2ZSB0aGVtIGludGVyc3BlcnNlZCB3aXRoIHRoZSBwcm9ncmFtIGJlaW5nCithc3NlbWJsZWQuICBJbiB0aGlzIGNhc2UsIHRoZSBjb21waWxlciBjb3VsZCBpc3N1ZSBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQgMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBiZWZvcmUgZWFjaAorc2VjdGlvbiBvZiBjb2RlIGJlaW5nIG91dHB1dCwgYW5kIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dCAxPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJlZm9yZSBlYWNoIGdyb3VwIG9mCitjb25zdGFudHMgYmVpbmcgb3V0cHV0LgorCisgICA8cD5TdWJzZWN0aW9ucyBhcmUgb3B0aW9uYWwuICBJZiB5b3UgZG8gbm90IHVzZSBzdWJzZWN0aW9ucywgZXZlcnl0aGluZworZ29lcyBpbiBzdWJzZWN0aW9uIG51bWJlciB6ZXJvLgorCisgICA8cD5FYWNoIHN1YnNlY3Rpb24gaXMgemVyby1wYWRkZWQgdXAgdG8gYSBtdWx0aXBsZSBvZiBmb3VyIGJ5dGVzLiAKKyhTdWJzZWN0aW9ucyBtYXkgYmUgcGFkZGVkIGEgZGlmZmVyZW50IGFtb3VudCBvbiBkaWZmZXJlbnQgZmxhdm9ycworb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uKQorCisgICA8cD5TdWJzZWN0aW9ucyBhcHBlYXIgaW4geW91ciBvYmplY3QgZmlsZSBpbiBudW1lcmljIG9yZGVyLCBsb3dlc3QgbnVtYmVyZWQKK3RvIGhpZ2hlc3QuICAoQWxsIHRoaXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIG90aGVyIHBlb3BsZSdzIGFzc2VtYmxlcnMuKSAKK1RoZSBvYmplY3QgZmlsZSBjb250YWlucyBubyByZXByZXNlbnRhdGlvbiBvZiBzdWJzZWN0aW9uczsgPGNvZGU+bGQ8L2NvZGU+IGFuZAorb3RoZXIgcHJvZ3JhbXMgdGhhdCBtYW5pcHVsYXRlIG9iamVjdCBmaWxlcyBzZWUgbm8gdHJhY2Ugb2YgdGhlbS4gCitUaGV5IGp1c3Qgc2VlIGFsbCB5b3VyIHRleHQgc3Vic2VjdGlvbnMgYXMgYSB0ZXh0IHNlY3Rpb24sIGFuZCBhbGwgeW91cgorZGF0YSBzdWJzZWN0aW9ucyBhcyBhIGRhdGEgc2VjdGlvbi4KKworICAgPHA+VG8gc3BlY2lmeSB3aGljaCBzdWJzZWN0aW9uIHlvdSB3YW50IHN1YnNlcXVlbnQgc3RhdGVtZW50cyBhc3NlbWJsZWQKK2ludG8sIHVzZSBhIG51bWVyaWMgYXJndW1lbnQgdG8gc3BlY2lmeSBpdCwgaW4gYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0Cis8L3NwYW4+PHZhcj5leHByZXNzaW9uPC92YXI+PC9zYW1wPiZyc3F1bzsgb3IgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhIDwvc3Bhbj48dmFyPmV4cHJlc3Npb248L3Zhcj48L3NhbXA+JnJzcXVvOyBzdGF0ZW1lbnQuIAorV2hlbiBnZW5lcmF0aW5nIENPRkYgb3V0cHV0LCB5b3UKK2NhbiBhbHNvIHVzZSBhbiBleHRyYSBzdWJzZWN0aW9uCithcmd1bWVudCB3aXRoIGFyYml0cmFyeSBuYW1lZCBzZWN0aW9uczogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2VjdGlvbiA8L3NwYW4+PHZhcj5uYW1lPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiwKKzwvc3Bhbj48dmFyPmV4cHJlc3Npb248L3Zhcj48L3NhbXA+JnJzcXVvOy4gCitXaGVuIGdlbmVyYXRpbmcgRUxGIG91dHB1dCwgeW91CitjYW4gYWxzbyB1c2UgdGhlIDxjb2RlPi5zdWJzZWN0aW9uPC9jb2RlPiBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiI+U3ViU2VjdGlvbjwvYT4pCit0byBzcGVjaWZ5IGEgc3Vic2VjdGlvbjogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3Vic2VjdGlvbiA8L3NwYW4+PHZhcj5leHByZXNzaW9uPC92YXI+PC9zYW1wPiZyc3F1bzsuIAorPHZhcj5FeHByZXNzaW9uPC92YXI+IHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBleHByZXNzaW9uCisoc2VlIDxhIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPikuICBJZiB5b3UganVzdCBzYXkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aGVuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQgMDwvc3Bhbj48L3NhbXA+JnJzcXVvOworaXMgYXNzdW1lZC4gIExpa2V3aXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWVhbnMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZGF0YSAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgQXNzZW1ibHkKK2JlZ2lucyBpbiA8Y29kZT50ZXh0IDA8L2NvZGU+LiAgRm9yIGluc3RhbmNlOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC50ZXh0IDAgICAgICMgVGhlIGRlZmF1bHQgc3Vic2VjdGlvbiBpcyB0ZXh0IDAgYW55d2F5LgorICAgICAuYXNjaWkgIlRoaXMgbGl2ZXMgaW4gdGhlIGZpcnN0IHRleHQgc3Vic2VjdGlvbi4gKiIKKyAgICAgLnRleHQgMQorICAgICAuYXNjaWkgIkJ1dCB0aGlzIGxpdmVzIGluIHRoZSBzZWNvbmQgdGV4dCBzdWJzZWN0aW9uLiIKKyAgICAgLmRhdGEgMAorICAgICAuYXNjaWkgIlRoaXMgbGl2ZXMgaW4gdGhlIGRhdGEgc2VjdGlvbiwiCisgICAgIC5hc2NpaSAiaW4gdGhlIGZpcnN0IGRhdGEgc3Vic2VjdGlvbi4iCisgICAgIC50ZXh0IDAKKyAgICAgLmFzY2lpICJUaGlzIGxpdmVzIGluIHRoZSBmaXJzdCB0ZXh0IHNlY3Rpb24sIgorICAgICAuYXNjaWkgImltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgYXN0ZXJpc2sgKCopLiIKKzwvcHJlPgorICAgPHA+RWFjaCBzZWN0aW9uIGhhcyBhIDxkZm4+bG9jYXRpb24gY291bnRlcjwvZGZuPiBpbmNyZW1lbnRlZCBieSBvbmUgZm9yIGV2ZXJ5IGJ5dGUKK2Fzc2VtYmxlZCBpbnRvIHRoYXQgc2VjdGlvbi4gIEJlY2F1c2Ugc3Vic2VjdGlvbnMgYXJlIG1lcmVseSBhIGNvbnZlbmllbmNlCityZXN0cmljdGVkIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRoZXJlIGlzIG5vIGNvbmNlcHQgb2YgYSBzdWJzZWN0aW9uIGxvY2F0aW9uCitjb3VudGVyLiAgVGhlcmUgaXMgbm8gd2F5IHRvIGRpcmVjdGx5IG1hbmlwdWxhdGUgYSBsb2NhdGlvbiBjb3VudGVyJm1kYXNoO2J1dCB0aGUKKzxjb2RlPi5hbGlnbjwvY29kZT4gZGlyZWN0aXZlIGNoYW5nZXMgaXQsIGFuZCBhbnkgbGFiZWwgZGVmaW5pdGlvbiBjYXB0dXJlcyBpdHMKK2N1cnJlbnQgdmFsdWUuICBUaGUgbG9jYXRpb24gY291bnRlciBvZiB0aGUgc2VjdGlvbiB3aGVyZSBzdGF0ZW1lbnRzIGFyZSBiZWluZworYXNzZW1ibGVkIGlzIHNhaWQgdG8gYmUgdGhlIDxkZm4+YWN0aXZlPC9kZm4+IGxvY2F0aW9uIGNvdW50ZXIuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1BdHRyaWJ1dGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TeW1ib2wtQXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNWJmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TeW1ib2wtQXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN5bWJvbCBBdHRyaWJ1dGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyIgdGl0bGU9IlN5bWJvbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEb3QuaHRtbCNEb3QiIHRpdGxlPSJEb3QiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTeW1ib2wtQXR0cmlidXRlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRvdC5odG1sI0RvdCI+RG90PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiPlN5bWJvbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjUgU3ltYm9sIEF0dHJpYnV0ZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zeW1ib2wtYXR0cmlidXRlcy0yMjUiPjwvYT48YSBuYW1lPSJpbmRleC1hdHRyaWJ1dGVzXzAwMmMtc3ltYm9sLTIyNiI+PC9hPkV2ZXJ5IHN5bWJvbCBoYXMsIGFzIHdlbGwgYXMgaXRzIG5hbWUsIHRoZSBhdHRyaWJ1dGVzICZsZHF1bztWYWx1ZSZyZHF1bzsgYW5kCismbGRxdW87VHlwZSZyZHF1bzsuICBEZXBlbmRpbmcgb24gb3V0cHV0IGZvcm1hdCwgc3ltYm9scyBjYW4gYWxzbyBoYXZlIGF1eGlsaWFyeQorYXR0cmlidXRlcy4KKworICAgPHA+SWYgeW91IHVzZSBhIHN5bWJvbCB3aXRob3V0IGRlZmluaW5nIGl0LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBhc3N1bWVzIHplcm8gZm9yCithbGwgdGhlc2UgYXR0cmlidXRlcywgYW5kIHByb2JhYmx5IHdvbid0IHdhcm4geW91LiAgVGhpcyBtYWtlcyB0aGUKK3N5bWJvbCBhbiBleHRlcm5hbGx5IGRlZmluZWQgc3ltYm9sLCB3aGljaCBpcyBnZW5lcmFsbHkgd2hhdCB5b3UKK3dvdWxkIHdhbnQuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJTeW1ib2wtVmFsdWUuaHRtbCNTeW1ib2wtVmFsdWUiPlN5bWJvbCBWYWx1ZTwvYT46ICAgICAgICAgICAgICAgICBWYWx1ZQorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iU3ltYm9sLVR5cGUuaHRtbCNTeW1ib2wtVHlwZSI+U3ltYm9sIFR5cGU8L2E+OiAgICAgICAgICAgICAgICAgIFR5cGUKKworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iYV8wMDJlb3V0LVN5bWJvbHMuaHRtbCNhXzAwMmVvdXQtU3ltYm9scyI+YS5vdXQgU3ltYm9sczwvYT46ICAgICAgICAgICAgICAgIFN5bWJvbCBBdHRyaWJ1dGVzOiA8Y29kZT5hLm91dDwvY29kZT4KKworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iQ09GRi1TeW1ib2xzLmh0bWwjQ09GRi1TeW1ib2xzIj5DT0ZGIFN5bWJvbHM8L2E+OiAgICAgICAgICAgICAgICAgU3ltYm9sIEF0dHJpYnV0ZXMgZm9yIENPRkYKKworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iU09NLVN5bWJvbHMuaHRtbCNTT00tU3ltYm9scyI+U09NIFN5bWJvbHM8L2E+OiAgICAgICAgICAgICAgICAgU3ltYm9sIEF0dHJpYnV0ZXMgZm9yIFNPTQorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ltYm9sLURlc2MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1EZXNjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4YzA3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1EZXNjLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3ltYm9sIERlc2MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImFfMDAyZW91dC1TeW1ib2xzLmh0bWwjYV8wMDJlb3V0LVN5bWJvbHMiIHRpdGxlPSJhLm91dCBTeW1ib2xzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltYm9sLU90aGVyLmh0bWwjU3ltYm9sLU90aGVyIiB0aXRsZT0iU3ltYm9sIE90aGVyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltYm9sLURlc2MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3ltYm9sLU90aGVyLmh0bWwjU3ltYm9sLU90aGVyIj5TeW1ib2wgT3RoZXI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJhXzAwMmVvdXQtU3ltYm9scy5odG1sI2FfMDAyZW91dC1TeW1ib2xzIj5hLm91dCBTeW1ib2xzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+NS41LjMuMSBEZXNjcmlwdG9yPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtZGVzY3JpcHRvcl8wMDJjLW9mLV8wMDQwY29kZV8wMDdiYV8wMDJlb3V0XzAwN2Qtc3ltYm9sLTIzMyI+PC9hPlRoaXMgaXMgYW4gYXJiaXRyYXJ5IDE2LWJpdCB2YWx1ZS4gIFlvdSBtYXkgZXN0YWJsaXNoIGEgc3ltYm9sJ3MKK2Rlc2NyaXB0b3IgdmFsdWUgYnkgdXNpbmcgYSA8Y29kZT4uZGVzYzwvY29kZT4gc3RhdGVtZW50Cisoc2VlIDxhIGhyZWY9IkRlc2MuaHRtbCNEZXNjIj48Y29kZT4uZGVzYzwvY29kZT48L2E+KS4gIEEgZGVzY3JpcHRvciB2YWx1ZSBtZWFucyBub3RoaW5nIHRvCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ltYm9sLUludHJvLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TeW1ib2wtSW50cm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjBmNGMxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ltYm9sLUludHJvLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3ltYm9sIEludHJvIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTeW50YXguaHRtbCNTeW50YXgiIHRpdGxlPSJTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIiB0aXRsZT0iQ29tbWVudHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjU3RhdGVtZW50cyIgdGl0bGU9IlN0YXRlbWVudHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTeW1ib2wtSW50cm8iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3RhdGVtZW50cy5odG1sI1N0YXRlbWVudHMiPlN0YXRlbWVudHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN5bnRheC5odG1sI1N5bnRheCI+U3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My40IFN5bWJvbHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jaGFyYWN0ZXJzLXVzZWQtaW4tc3ltYm9scy0xMjgiPjwvYT5BIDxkZm4+c3ltYm9sPC9kZm4+IGlzIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgY2hvc2VuIGZyb20gdGhlIHNldCBvZiBhbGwKK2xldHRlcnMgKGJvdGggdXBwZXIgYW5kIGxvd2VyIGNhc2UpLCBkaWdpdHMgYW5kIHRoZSB0aHJlZSBjaGFyYWN0ZXJzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl8uJDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitPbiBtb3N0IG1hY2hpbmVzLCB5b3UgY2FuIGFsc28gdXNlIDxjb2RlPiQ8L2NvZGU+IGluIHN5bWJvbCBuYW1lczsgZXhjZXB0aW9ucworYXJlIG5vdGVkIGluIDxhIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPi4gCitObyBzeW1ib2wgbWF5IGJlZ2luIHdpdGggYSBkaWdpdC4gIENhc2UgaXMgc2lnbmlmaWNhbnQuIAorVGhlcmUgaXMgbm8gbGVuZ3RoIGxpbWl0OiBhbGwgY2hhcmFjdGVycyBhcmUgc2lnbmlmaWNhbnQuICBNdWx0aWJ5dGUgY2hhcmFjdGVycworYXJlIHN1cHBvcnRlZC4gIFN5bWJvbHMgYXJlIGRlbGltaXRlZCBieSBjaGFyYWN0ZXJzIG5vdCBpbiB0aGF0IHNldCwgb3IgYnkgdGhlCitiZWdpbm5pbmcgb2YgYSBmaWxlIChzaW5jZSB0aGUgc291cmNlIHByb2dyYW0gbXVzdCBlbmQgd2l0aCBhIG5ld2xpbmUsIHRoZSBlbmQKK29mIGEgZmlsZSBpcyBub3QgYSBwb3NzaWJsZSBzeW1ib2wgZGVsaW1pdGVyKS4gIFNlZSA8YSBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyI+U3ltYm9sczwvYT4uIAorPGEgbmFtZT0iaW5kZXgtbGVuZ3RoLW9mLXN5bWJvbHMtMTI5Ij48L2E+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1OYW1lcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ltYm9sLU5hbWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4MDc3YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1OYW1lcy5odG1sCkBAIC0wLDAgKzEsMTY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TeW1ib2wgTmFtZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN5bWJvbHMuaHRtbCNTeW1ib2xzIiB0aXRsZT0iU3ltYm9scyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNldHRpbmctU3ltYm9scy5odG1sI1NldHRpbmctU3ltYm9scyIgdGl0bGU9IlNldHRpbmcgU3ltYm9scyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRvdC5odG1sI0RvdCIgdGl0bGU9IkRvdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlN5bWJvbC1OYW1lcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEb3QuaHRtbCNEb3QiPkRvdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNldHRpbmctU3ltYm9scy5odG1sI1NldHRpbmctU3ltYm9scyI+U2V0dGluZyBTeW1ib2xzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiPlN5bWJvbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjMgU3ltYm9sIE5hbWVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLW5hbWVzLTIxMyI+PC9hPjxhIG5hbWU9ImluZGV4LW5hbWVzXzAwMmMtc3ltYm9sLTIxNCI+PC9hPlN5bWJvbCBuYW1lcyBiZWdpbiB3aXRoIGEgbGV0dGVyIG9yIHdpdGggb25lIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ll88L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBPbiBtb3N0CittYWNoaW5lcywgeW91IGNhbiBhbHNvIHVzZSA8Y29kZT4kPC9jb2RlPiBpbiBzeW1ib2wgbmFtZXM7IGV4Y2VwdGlvbnMgYXJlCitub3RlZCBpbiA8YSBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4uICBUaGF0IGNoYXJhY3RlciBtYXkgYmUgZm9sbG93ZWQgYnkgYW55CitzdHJpbmcgb2YgZGlnaXRzLCBsZXR0ZXJzLCBkb2xsYXIgc2lnbnMgKHVubGVzcyBvdGhlcndpc2Ugbm90ZWQgZm9yIGEKK3BhcnRpY3VsYXIgdGFyZ2V0IG1hY2hpbmUpLCBhbmQgdW5kZXJzY29yZXMuCisKKyAgIDxwPkNhc2Ugb2YgbGV0dGVycyBpcyBzaWduaWZpY2FudDogPGNvZGU+Zm9vPC9jb2RlPiBpcyBhIGRpZmZlcmVudCBzeW1ib2wgbmFtZQordGhhbiA8Y29kZT5Gb288L2NvZGU+LgorCisgICA8cD5NdWx0aWJ5dGUgY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkLiAgVG8gZ2VuZXJhdGUgYSBzeW1ib2wgbmFtZSBjb250YWluaW5nCittdWx0aWJ5dGUgY2hhcmFjdGVycyBlbmNsb3NlIGl0IHdpdGhpbiBkb3VibGUgcXVvdGVzIGFuZCB1c2UgZXNjYXBlIGNvZGVzLiBjZgorU2VlIDxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPi4gIEdlbmVyYXRpbmcgYSBtdWx0aWJ5dGUgc3ltYm9sIG5hbWUgZnJvbSBhIGxhYmVsIGlzIG5vdAorY3VycmVudGx5IHN1cHBvcnRlZC4KKworICAgPHA+RWFjaCBzeW1ib2wgaGFzIGV4YWN0bHkgb25lIG5hbWUuICBFYWNoIG5hbWUgaW4gYW4gYXNzZW1ibHkgbGFuZ3VhZ2UgcHJvZ3JhbQorcmVmZXJzIHRvIGV4YWN0bHkgb25lIHN5bWJvbC4gIFlvdSBtYXkgdXNlIHRoYXQgc3ltYm9sIG5hbWUgYW55IG51bWJlciBvZiB0aW1lcworaW4gYSBwcm9ncmFtLgorCis8aDQgY2xhc3M9InN1YmhlYWRpbmciPkxvY2FsIFN5bWJvbCBOYW1lczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxvY2FsLXN5bWJvbC1uYW1lcy0yMTUiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy1sb2NhbC0yMTYiPjwvYT5BIGxvY2FsIHN5bWJvbCBpcyBhbnkgc3ltYm9sIGJlZ2lubmluZyB3aXRoIGNlcnRhaW4gbG9jYWwgbGFiZWwgcHJlZml4ZXMuIAorQnkgZGVmYXVsdCwgdGhlIGxvY2FsIGxhYmVsIHByZWZpeCBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBFTEYgc3lzdGVtcyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciB0cmFkaXRpb25hbCBhLm91dCBzeXN0ZW1zLCBidXQgZWFjaCB0YXJnZXQgbWF5IGhhdmUgaXRzIG93bgorc2V0IG9mIGxvY2FsIGxhYmVsIHByZWZpeGVzLiAKK09uIHRoZSBIUFBBIGxvY2FsIHN5bWJvbHMgYmVnaW4gd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkwkPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5Mb2NhbCBzeW1ib2xzIGFyZSBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgYXNzZW1ibGVyLCBidXQgdGhleSBhcmUKK25vcm1hbGx5IG5vdCBzYXZlZCBpbiBvYmplY3QgZmlsZXMuICBUaHVzLCB0aGV5IGFyZSBub3QgdmlzaWJsZSB3aGVuIGRlYnVnZ2luZy4gCitZb3UgbWF5IHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tTDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gKHNlZSA8YSBocmVmPSJMLmh0bWwjTCI+SW5jbHVkZSBMb2NhbCBTeW1ib2xzOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTDwvc3Bhbj48L3NhbXA+PC9hPikgdG8gcmV0YWluIHRoZSBsb2NhbCBzeW1ib2xzIGluIHRoZSBvYmplY3QgZmlsZXMuCisKKzxoNCBjbGFzcz0ic3ViaGVhZGluZyI+TG9jYWwgTGFiZWxzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbG9jYWwtbGFiZWxzLTIxNyI+PC9hPjxhIG5hbWU9ImluZGV4LXRlbXBvcmFyeS1zeW1ib2wtbmFtZXMtMjE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLW5hbWVzXzAwMmMtdGVtcG9yYXJ5LTIxOSI+PC9hPkxvY2FsIGxhYmVscyBoZWxwIGNvbXBpbGVycyBhbmQgcHJvZ3JhbW1lcnMgdXNlIG5hbWVzIHRlbXBvcmFyaWx5LiAKK1RoZXkgY3JlYXRlIHN5bWJvbHMgd2hpY2ggYXJlIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIG92ZXIgdGhlIGVudGlyZSBzY29wZSBvZgordGhlIGlucHV0IHNvdXJjZSBjb2RlIGFuZCB3aGljaCBjYW4gYmUgcmVmZXJyZWQgdG8gYnkgYSBzaW1wbGUgbm90YXRpb24uIAorVG8gZGVmaW5lIGEgbG9jYWwgbGFiZWwsIHdyaXRlIGEgbGFiZWwgb2YgdGhlIGZvcm0gJmxzcXVvOzxzYW1wPjxiPk48L2I+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHdoZXJlIDxiPk48L2I+CityZXByZXNlbnRzIGFueSBwb3NpdGl2ZSBpbnRlZ2VyKS4gIFRvIHJlZmVyIHRvIHRoZSBtb3N0IHJlY2VudCBwcmV2aW91cworZGVmaW5pdGlvbiBvZiB0aGF0IGxhYmVsIHdyaXRlICZsc3F1bzs8c2FtcD48Yj5OPC9iPjxzcGFuIGNsYXNzPSJzYW1wIj5iPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB1c2luZyB0aGUgc2FtZSBudW1iZXIgYXMgd2hlbgoreW91IGRlZmluZWQgdGhlIGxhYmVsLiAgVG8gcmVmZXIgdG8gdGhlIG5leHQgZGVmaW5pdGlvbiBvZiBhIGxvY2FsIGxhYmVsLCB3cml0ZQorJmxzcXVvOzxzYW1wPjxiPk48L2I+PHNwYW4gY2xhc3M9InNhbXAiPmY8L3NwYW4+PC9zYW1wPiZyc3F1bzsmbWRhc2g7dGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdGFuZHMgZm9yICZsZHF1bztiYWNrd2FyZHMmcmRxdW87IGFuZCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN0YW5kcworZm9yICZsZHF1bztmb3J3YXJkcyZyZHF1bzsuCisKKyAgIDxwPlRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIG9uIGhvdyB5b3UgY2FuIHVzZSB0aGVzZSBsYWJlbHMsIGFuZCB5b3UgY2FuIHJldXNlIHRoZW0KK3Rvby4gIFNvIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gcmVwZWF0ZWRseSBkZWZpbmUgdGhlIHNhbWUgbG9jYWwgbGFiZWwgKHVzaW5nCit0aGUgc2FtZSBudW1iZXIgJmxzcXVvOzxzYW1wPjxiPk48L2I+PC9zYW1wPiZyc3F1bzspLCBhbHRob3VnaCB5b3UgY2FuIG9ubHkgcmVmZXIgdG8gdGhlIG1vc3QgcmVjZW50bHkKK2RlZmluZWQgbG9jYWwgbGFiZWwgb2YgdGhhdCBudW1iZXIgKGZvciBhIGJhY2t3YXJkcyByZWZlcmVuY2UpIG9yIHRoZSBuZXh0CitkZWZpbml0aW9uIG9mIGEgc3BlY2lmaWMgbG9jYWwgbGFiZWwgZm9yIGEgZm9yd2FyZCByZWZlcmVuY2UuICBJdCBpcyBhbHNvIHdvcnRoCitub3RpbmcgdGhhdCB0aGUgZmlyc3QgMTAgbG9jYWwgbGFiZWxzICgmbHNxdW87PHNhbXA+PGI+MDo8L2I+PC9zYW1wPiZyc3F1bzs8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+JmxzcXVvOzxzYW1wPjxiPjk6PC9iPjwvc2FtcD4mcnNxdW87KSBhcmUKK2ltcGxlbWVudGVkIGluIGEgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgbWFubmVyIHRoYW4gdGhlIG90aGVycy4KKworICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgMTogICAgICAgIGJyYW5jaCAxZgorICAgICAyOiAgICAgICAgYnJhbmNoIDFiCisgICAgIDE6ICAgICAgICBicmFuY2ggMmYKKyAgICAgMjogICAgICAgIGJyYW5jaCAxYgorPC9wcmU+CisgICA8cD5XaGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGxhYmVsXzE6ICBicmFuY2ggbGFiZWxfMworICAgICBsYWJlbF8yOiAgYnJhbmNoIGxhYmVsXzEKKyAgICAgbGFiZWxfMzogIGJyYW5jaCBsYWJlbF80CisgICAgIGxhYmVsXzQ6ICBicmFuY2ggbGFiZWxfMworPC9wcmU+CisgICA8cD5Mb2NhbCBsYWJlbCBuYW1lcyBhcmUgb25seSBhIG5vdGF0aW9uYWwgZGV2aWNlLiAgVGhleSBhcmUgaW1tZWRpYXRlbHkKK3RyYW5zZm9ybWVkIGludG8gbW9yZSBjb252ZW50aW9uYWwgc3ltYm9sIG5hbWVzIGJlZm9yZSB0aGUgYXNzZW1ibGVyIHVzZXMgdGhlbS4gCitUaGUgc3ltYm9sIG5hbWVzIGFyZSBzdG9yZWQgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYXBwZWFyIGluIGVycm9yIG1lc3NhZ2VzLCBhbmQKK2FyZSBvcHRpb25hbGx5IGVtaXR0ZWQgdG8gdGhlIG9iamVjdCBmaWxlLiAgVGhlIG5hbWVzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZwordGhlc2UgcGFydHM6CisKKyAgICAgPGRsPgorPGR0PjxlbT5sb2NhbCBsYWJlbCBwcmVmaXg8L2VtPjxkZD5BbGwgbG9jYWwgc3ltYm9scyBiZWdpbiB3aXRoIHRoZSBzeXN0ZW0tc3BlY2lmaWMgbG9jYWwgbGFiZWwgcHJlZml4LiAKK05vcm1hbGx5IGJvdGggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYW5kIDxjb2RlPmxkPC9jb2RlPiBmb3JnZXQgc3ltYm9scwordGhhdCBzdGFydCB3aXRoIHRoZSBsb2NhbCBsYWJlbCBwcmVmaXguICBUaGVzZSBsYWJlbHMgYXJlCit1c2VkIGZvciBzeW1ib2xzIHlvdSBhcmUgbmV2ZXIgaW50ZW5kZWQgdG8gc2VlLiAgSWYgeW91IHVzZSB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIHRoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gcmV0YWlucyB0aGVzZSBzeW1ib2xzIGluIHRoZQorb2JqZWN0IGZpbGUuIElmIHlvdSBhbHNvIGluc3RydWN0IDxjb2RlPmxkPC9jb2RlPiB0byByZXRhaW4gdGhlc2Ugc3ltYm9scywKK3lvdSBtYXkgdXNlIHRoZW0gaW4gZGVidWdnaW5nLgorCisgICAgIDxicj48ZHQ+PHZhcj5udW1iZXI8L3Zhcj48ZGQ+VGhpcyBpcyB0aGUgbnVtYmVyIHRoYXQgd2FzIHVzZWQgaW4gdGhlIGxvY2FsIGxhYmVsIGRlZmluaXRpb24uICBTbyBpZiB0aGUKK2xhYmVsIGlzIHdyaXR0ZW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41NTo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhlbiB0aGUgbnVtYmVyIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTU8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48a2JkPkMtQjwva2JkPjxkZD5UaGlzIHVudXN1YWwgY2hhcmFjdGVyIGlzIGluY2x1ZGVkIHNvIHlvdSBkbyBub3QgYWNjaWRlbnRhbGx5IGludmVudCBhIHN5bWJvbAorb2YgdGhlIHNhbWUgbmFtZS4gIFRoZSBjaGFyYWN0ZXIgaGFzIEFTQ0lJIHZhbHVlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDAwMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoY29udHJvbC1CKS4KKworICAgICA8YnI+PGR0PjxlbT5vcmRpbmFsIG51bWJlcjwvZW0+PGRkPlRoaXMgaXMgYSBzZXJpYWwgbnVtYmVyIHRvIGtlZXAgdGhlIGxhYmVscyBkaXN0aW5jdC4gIFRoZSBmaXJzdCBkZWZpbml0aW9uIG9mCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjA6PC9zcGFuPjwvc2FtcD4mcnNxdW87IGdldHMgdGhlIG51bWJlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUgMTV0aCBkZWZpbml0aW9uIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZ2V0cyB0aGUKK251bWJlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgc28gb24uICBMaWtld2lzZSB0aGUgZmlyc3QgZGVmaW5pdGlvbiBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE6PC9zcGFuPjwvc2FtcD4mcnNxdW87IGdldHMKK3RoZSBudW1iZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4xPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBpdHMgMTV0aCBkZWZpbml0aW9uIGdldHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4xNTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyB3ZWxsLiAKKzwvZGw+CisKKyAgIDxwPlNvIGZvciBleGFtcGxlLCB0aGUgZmlyc3QgPGNvZGU+MTo8L2NvZGU+IG1heSBiZSBuYW1lZCA8Y29kZT4uTDE8L2NvZGU+PGtiZD5DLUI8L2tiZD48Y29kZT4xPC9jb2RlPiwgYW5kCit0aGUgNDR0aCA8Y29kZT4zOjwvY29kZT4gbWF5IGJlIG5hbWVkIDxjb2RlPi5MMzwvY29kZT48a2JkPkMtQjwva2JkPjxjb2RlPjQ0PC9jb2RlPi4KKworPGg0IGNsYXNzPSJzdWJoZWFkaW5nIj5Eb2xsYXIgTG9jYWwgTGFiZWxzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZG9sbGFyLWxvY2FsLXN5bWJvbHMtMjIwIj48L2E+Cis8Y29kZT5hczwvY29kZT4gYWxzbyBzdXBwb3J0cyBhbiBldmVuIG1vcmUgbG9jYWwgZm9ybSBvZiBsb2NhbCBsYWJlbHMgY2FsbGVkCitkb2xsYXIgbGFiZWxzLiAgVGhlc2UgbGFiZWxzIGdvIG91dCBvZiBzY29wZSAoaS5lLiwgdGhleSBiZWNvbWUgdW5kZWZpbmVkKSBhcworc29vbiBhcyBhIG5vbi1sb2NhbCBsYWJlbCBpcyBkZWZpbmVkLiAgVGh1cyB0aGV5IHJlbWFpbiB2YWxpZCBmb3Igb25seSBhIHNtYWxsCityZWdpb24gb2YgdGhlIGlucHV0IHNvdXJjZSBjb2RlLiAgTm9ybWFsIGxvY2FsIGxhYmVscywgYnkgY29udHJhc3QsIHJlbWFpbiBpbgorc2NvcGUgZm9yIHRoZSBlbnRpcmUgZmlsZSwgb3IgdW50aWwgdGhleSBhcmUgcmVkZWZpbmVkIGJ5IGFub3RoZXIgb2NjdXJyZW5jZSBvZgordGhlIHNhbWUgbG9jYWwgbGFiZWwuCisKKyAgIDxwPkRvbGxhciBsYWJlbHMgYXJlIGRlZmluZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgb3JkaW5hcnkgbG9jYWwgbGFiZWxzLAorZXhjZXB0IHRoYXQgdGhleSBoYXZlIGEgZG9sbGFyIHNpZ24gc3VmZml4IHRvIHRoZWlyIG51bWVyaWMgdmFsdWUsIGUuZy4sCismbHNxdW87PHNhbXA+PGI+NTUkOjwvYj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+VGhleSBjYW4gYWxzbyBiZSBkaXN0aW5ndWlzaGVkIGZyb20gb3JkaW5hcnkgbG9jYWwgbGFiZWxzIGJ5IHRoZWlyIHRyYW5zZm9ybWVkCituYW1lcyB3aGljaCB1c2UgQVNDSUkgY2hhcmFjdGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDAwMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoY29udHJvbC1BKSBhcyB0aGUgbWFnaWMgY2hhcmFjdGVyCit0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gb3JkaW5hcnkgbGFiZWxzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWZ0aCBkZWZpbml0aW9uIG9mCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjYkPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1heSBiZSBuYW1lZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5MNjwvc3Bhbj48a2JkPkMtQTwva2JkPjxzcGFuIGNsYXNzPSJzYW1wIj41PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TeW1ib2wtT3RoZXIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1PdGhlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNWEyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TeW1ib2wtT3RoZXIuaHRtbApAQCAtMCwwICsxLDUzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TeW1ib2wgT3RoZXIgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImFfMDAyZW91dC1TeW1ib2xzLmh0bWwjYV8wMDJlb3V0LVN5bWJvbHMiIHRpdGxlPSJhLm91dCBTeW1ib2xzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3ltYm9sLURlc2MuaHRtbCNTeW1ib2wtRGVzYyIgdGl0bGU9IlN5bWJvbCBEZXNjIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltYm9sLU90aGVyIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3ltYm9sLURlc2MuaHRtbCNTeW1ib2wtRGVzYyI+U3ltYm9sIERlc2M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJhXzAwMmVvdXQtU3ltYm9scy5odG1sI2FfMDAyZW91dC1TeW1ib2xzIj5hLm91dCBTeW1ib2xzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+NS41LjMuMiBPdGhlcjwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LW90aGVyLWF0dHJpYnV0ZV8wMDJjLW9mLV8wMDQwY29kZV8wMDdiYV8wMDJlb3V0XzAwN2Qtc3ltYm9sLTIzNCI+PC9hPlRoaXMgaXMgYW4gYXJiaXRyYXJ5IDgtYml0IHZhbHVlLiAgSXQgbWVhbnMgbm90aGluZyB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ltYm9sLVR5cGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1UeXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNlNzQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1UeXBlLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3ltYm9sIFR5cGUgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN5bWJvbC1BdHRyaWJ1dGVzLmh0bWwjU3ltYm9sLUF0dHJpYnV0ZXMiIHRpdGxlPSJTeW1ib2wgQXR0cmlidXRlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlN5bWJvbC1WYWx1ZS5odG1sI1N5bWJvbC1WYWx1ZSIgdGl0bGU9IlN5bWJvbCBWYWx1ZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImFfMDAyZW91dC1TeW1ib2xzLmh0bWwjYV8wMDJlb3V0LVN5bWJvbHMiIHRpdGxlPSJhLm91dCBTeW1ib2xzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltYm9sLVR5cGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iYV8wMDJlb3V0LVN5bWJvbHMuaHRtbCNhXzAwMmVvdXQtU3ltYm9scyI+YS5vdXQgU3ltYm9sczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN5bWJvbC1WYWx1ZS5odG1sI1N5bWJvbC1WYWx1ZSI+U3ltYm9sIFZhbHVlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3ltYm9sLUF0dHJpYnV0ZXMuaHRtbCNTeW1ib2wtQXR0cmlidXRlcyI+U3ltYm9sIEF0dHJpYnV0ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj41LjUuMiBUeXBlPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtdHlwZS1vZi1hLXN5bWJvbC0yMjkiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtdHlwZS0yMzAiPjwvYT5UaGUgdHlwZSBhdHRyaWJ1dGUgb2YgYSBzeW1ib2wgY29udGFpbnMgcmVsb2NhdGlvbiAoc2VjdGlvbikKK2luZm9ybWF0aW9uLCBhbnkgZmxhZyBzZXR0aW5ncyBpbmRpY2F0aW5nIHRoYXQgYSBzeW1ib2wgaXMgZXh0ZXJuYWwsIGFuZAorKG9wdGlvbmFsbHkpLCBvdGhlciBpbmZvcm1hdGlvbiBmb3IgbGlua2VycyBhbmQgZGVidWdnZXJzLiAgVGhlIGV4YWN0Citmb3JtYXQgZGVwZW5kcyBvbiB0aGUgb2JqZWN0LWNvZGUgb3V0cHV0IGZvcm1hdCBpbiB1c2UuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1WYWx1ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ltYm9sLVZhbHVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MzM1NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbC1WYWx1ZS5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN5bWJvbCBWYWx1ZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3ltYm9sLUF0dHJpYnV0ZXMuaHRtbCNTeW1ib2wtQXR0cmlidXRlcyIgdGl0bGU9IlN5bWJvbCBBdHRyaWJ1dGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltYm9sLVR5cGUuaHRtbCNTeW1ib2wtVHlwZSIgdGl0bGU9IlN5bWJvbCBUeXBlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltYm9sLVZhbHVlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN5bWJvbC1UeXBlLmh0bWwjU3ltYm9sLVR5cGUiPlN5bWJvbCBUeXBlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3ltYm9sLUF0dHJpYnV0ZXMuaHRtbCNTeW1ib2wtQXR0cmlidXRlcyI+U3ltYm9sIEF0dHJpYnV0ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj41LjUuMSBWYWx1ZTwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXZhbHVlLW9mLWEtc3ltYm9sLTIyNyI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bWJvbC12YWx1ZS0yMjgiPjwvYT5UaGUgdmFsdWUgb2YgYSBzeW1ib2wgaXMgKHVzdWFsbHkpIDMyIGJpdHMuICBGb3IgYSBzeW1ib2wgd2hpY2ggbGFiZWxzIGEKK2xvY2F0aW9uIGluIHRoZSB0ZXh0LCBkYXRhLCBic3Mgb3IgYWJzb2x1dGUgc2VjdGlvbnMgdGhlIHZhbHVlIGlzIHRoZQorbnVtYmVyIG9mIGFkZHJlc3NlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGF0IHNlY3Rpb24gdG8gdGhlIGxhYmVsLiAKK05hdHVyYWxseSBmb3IgdGV4dCwgZGF0YSBhbmQgYnNzIHNlY3Rpb25zIHRoZSB2YWx1ZSBvZiBhIHN5bWJvbCBjaGFuZ2VzCithcyA8Y29kZT5sZDwvY29kZT4gY2hhbmdlcyBzZWN0aW9uIGJhc2UgYWRkcmVzc2VzIGR1cmluZyBsaW5raW5nLiAgQWJzb2x1dGUKK3N5bWJvbHMnIHZhbHVlcyBkbyBub3QgY2hhbmdlIGR1cmluZyBsaW5raW5nOiB0aGF0IGlzIHdoeSB0aGV5IGFyZQorY2FsbGVkIGFic29sdXRlLgorCisgICA8cD5UaGUgdmFsdWUgb2YgYW4gdW5kZWZpbmVkIHN5bWJvbCBpcyB0cmVhdGVkIGluIGEgc3BlY2lhbCB3YXkuICBJZiBpdCBpcworMCB0aGVuIHRoZSBzeW1ib2wgaXMgbm90IGRlZmluZWQgaW4gdGhpcyBhc3NlbWJsZXIgc291cmNlIGZpbGUsIGFuZAorPGNvZGU+bGQ8L2NvZGU+IHRyaWVzIHRvIGRldGVybWluZSBpdHMgdmFsdWUgZnJvbSBvdGhlciBmaWxlcyBsaW5rZWQgaW50byB0aGUKK3NhbWUgcHJvZ3JhbS4gIFlvdSBtYWtlIHRoaXMga2luZCBvZiBzeW1ib2wgc2ltcGx5IGJ5IG1lbnRpb25pbmcgYSBzeW1ib2wKK25hbWUgd2l0aG91dCBkZWZpbmluZyBpdC4gIEEgbm9uLXplcm8gdmFsdWUgcmVwcmVzZW50cyBhIDxjb2RlPi5jb21tPC9jb2RlPgorY29tbW9uIGRlY2xhcmF0aW9uLiAgVGhlIHZhbHVlIGlzIGhvdyBtdWNoIGNvbW1vbiBzdG9yYWdlIHRvIHJlc2VydmUsIGluCitieXRlcyAoYWRkcmVzc2VzKS4gIFRoZSBzeW1ib2wgcmVmZXJzIHRvIHRoZSBmaXJzdCBhZGRyZXNzIG9mIHRoZQorYWxsb2NhdGVkIHN0b3JhZ2UuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bWJvbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTZhOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ltYm9scy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN5bWJvbHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2VjdGlvbnMuaHRtbCNTZWN0aW9ucyIgdGl0bGU9IlNlY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyIgdGl0bGU9IkV4cHJlc3Npb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltYm9scyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIj5FeHByZXNzaW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNlY3Rpb25zLmh0bWwjU2VjdGlvbnMiPlNlY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjUgU3ltYm9sczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN5bWJvbHMtMjA4Ij48L2E+U3ltYm9scyBhcmUgYSBjZW50cmFsIGNvbmNlcHQ6IHRoZSBwcm9ncmFtbWVyIHVzZXMgc3ltYm9scyB0byBuYW1lCit0aGluZ3MsIHRoZSBsaW5rZXIgdXNlcyBzeW1ib2xzIHRvIGxpbmssIGFuZCB0aGUgZGVidWdnZXIgdXNlcyBzeW1ib2xzCit0byBkZWJ1Zy4KKworICAgPGJsb2NrcXVvdGU+Cis8YSBuYW1lPSJpbmRleC1kZWJ1Z2dlcnNfMDAyYy1hbmQtc3ltYm9sLW9yZGVyLTIwOSI+PC9hPjxlbT5XYXJuaW5nOjwvZW0+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGRvZXMgbm90IHBsYWNlIHN5bWJvbHMgaW4gdGhlIG9iamVjdCBmaWxlIGluCit0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgZGVjbGFyZWQuICBUaGlzIG1heSBicmVhayBzb21lIGRlYnVnZ2Vycy4gCis8L2Jsb2NrcXVvdGU+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJMYWJlbHMuaHRtbCNMYWJlbHMiPkxhYmVsczwvYT46ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbHMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlNldHRpbmctU3ltYm9scy5odG1sI1NldHRpbmctU3ltYm9scyI+U2V0dGluZyBTeW1ib2xzPC9hPjogICAgICAgICAgICAgIEdpdmluZyBTeW1ib2xzIE90aGVyIFZhbHVlcworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iU3ltYm9sLU5hbWVzLmh0bWwjU3ltYm9sLU5hbWVzIj5TeW1ib2wgTmFtZXM8L2E+OiAgICAgICAgICAgICAgICAgU3ltYm9sIE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJEb3QuaHRtbCNEb3QiPkRvdDwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgU3BlY2lhbCBEb3QgU3ltYm9sCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJTeW1ib2wtQXR0cmlidXRlcy5odG1sI1N5bWJvbC1BdHRyaWJ1dGVzIj5TeW1ib2wgQXR0cmlidXRlczwvYT46ICAgICAgICAgICAgU3ltYm9sIEF0dHJpYnV0ZXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bXZlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ltdmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmNzNlZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bXZlci5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN5bXZlciAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3ViU2VjdGlvbi5odG1sI1N1YlNlY3Rpb24iIHRpdGxlPSJTdWJTZWN0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVGFnLmh0bWwjVGFnIiB0aXRsZT0iVGFnIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltdmVyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRhZy5odG1sI1RhZyI+VGFnPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3ViU2VjdGlvbi5odG1sI1N1YlNlY3Rpb24iPlN1YlNlY3Rpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTExIDxjb2RlPi5zeW12ZXI8L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzeW12ZXJfMDA3ZC1kaXJlY3RpdmUtNDgzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLXZlcnNpb25pbmctNDg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmVyc2lvbnMtb2Ytc3ltYm9scy00ODUiPjwvYT5Vc2UgdGhlIDxjb2RlPi5zeW12ZXI8L2NvZGU+IGRpcmVjdGl2ZSB0byBiaW5kIHN5bWJvbHMgdG8gc3BlY2lmaWMgdmVyc2lvbiBub2Rlcword2l0aGluIGEgc291cmNlIGZpbGUuICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIG9uIEVMRiBwbGF0Zm9ybXMsIGFuZCBpcwordHlwaWNhbGx5IHVzZWQgd2hlbiBhc3NlbWJsaW5nIGZpbGVzIHRvIGJlIGxpbmtlZCBpbnRvIGEgc2hhcmVkIGxpYnJhcnkuIAorVGhlcmUgYXJlIGNhc2VzIHdoZXJlIGl0IG1heSBtYWtlIHNlbnNlIHRvIHVzZSB0aGlzIGluIG9iamVjdHMgdG8gYmUgYm91bmQKK2ludG8gYW4gYXBwbGljYXRpb24gaXRzZWxmIHNvIGFzIHRvIG92ZXJyaWRlIGEgdmVyc2lvbmVkIHN5bWJvbCBmcm9tIGEKK3NoYXJlZCBsaWJyYXJ5LgorCisgICA8cD5Gb3IgRUxGIHRhcmdldHMsIHRoZSA8Y29kZT4uc3ltdmVyPC9jb2RlPiBkaXJlY3RpdmUgY2FuIGJlIHVzZWQgbGlrZSB0aGlzOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5zeW12ZXIgPHZhcj5uYW1lPC92YXI+LCA8dmFyPm5hbWUyQG5vZGVuYW1lPC92YXI+Cis8L3ByZT4KKyAgIDxwPklmIHRoZSBzeW1ib2wgPHZhcj5uYW1lPC92YXI+IGlzIGRlZmluZWQgd2l0aGluIHRoZSBmaWxlCitiZWluZyBhc3NlbWJsZWQsIHRoZSA8Y29kZT4uc3ltdmVyPC9jb2RlPiBkaXJlY3RpdmUgZWZmZWN0aXZlbHkgY3JlYXRlcyBhIHN5bWJvbAorYWxpYXMgd2l0aCB0aGUgbmFtZSA8dmFyPm5hbWUyQG5vZGVuYW1lPC92YXI+LCBhbmQgaW4gZmFjdCB0aGUgbWFpbiByZWFzb24gdGhhdCB3ZQoranVzdCBkb24ndCB0cnkgYW5kIGNyZWF0ZSBhIHJlZ3VsYXIgYWxpYXMgaXMgdGhhdCB0aGUgPHZhcj5APC92YXI+IGNoYXJhY3RlciBpc24ndAorcGVybWl0dGVkIGluIHN5bWJvbCBuYW1lcy4gIFRoZSA8dmFyPm5hbWUyPC92YXI+IHBhcnQgb2YgdGhlIG5hbWUgaXMgdGhlIGFjdHVhbCBuYW1lCitvZiB0aGUgc3ltYm9sIGJ5IHdoaWNoIGl0IHdpbGwgYmUgZXh0ZXJuYWxseSByZWZlcmVuY2VkLiAgVGhlIG5hbWUgPHZhcj5uYW1lPC92YXI+CitpdHNlbGYgaXMgbWVyZWx5IGEgbmFtZSBvZiBjb252ZW5pZW5jZSB0aGF0IGlzIHVzZWQgc28gdGhhdCBpdCBpcyBwb3NzaWJsZSB0bworaGF2ZSBkZWZpbml0aW9ucyBmb3IgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSBmdW5jdGlvbiB3aXRoaW4gYSBzaW5nbGUgc291cmNlCitmaWxlLCBhbmQgc28gdGhhdCB0aGUgY29tcGlsZXIgY2FuIHVuYW1iaWd1b3VzbHkga25vdyB3aGljaCB2ZXJzaW9uIG9mIGEKK2Z1bmN0aW9uIGlzIGJlaW5nIG1lbnRpb25lZC4gIFRoZSA8dmFyPm5vZGVuYW1lPC92YXI+IHBvcnRpb24gb2YgdGhlIGFsaWFzIHNob3VsZCBiZQordGhlIG5hbWUgb2YgYSBub2RlIHNwZWNpZmllZCBpbiB0aGUgdmVyc2lvbiBzY3JpcHQgc3VwcGxpZWQgdG8gdGhlIGxpbmtlciB3aGVuCitidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5LiAgSWYgeW91IGFyZSBhdHRlbXB0aW5nIHRvIG92ZXJyaWRlIGEgdmVyc2lvbmVkCitzeW1ib2wgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCB0aGVuIDx2YXI+bm9kZW5hbWU8L3Zhcj4gc2hvdWxkIGNvcnJlc3BvbmQgdG8gdGhlCitub2RlbmFtZSBvZiB0aGUgc3ltYm9sIHlvdSBhcmUgdHJ5aW5nIHRvIG92ZXJyaWRlLgorCisgICA8cD5JZiB0aGUgc3ltYm9sIDx2YXI+bmFtZTwvdmFyPiBpcyBub3QgZGVmaW5lZCB3aXRoaW4gdGhlIGZpbGUgYmVpbmcgYXNzZW1ibGVkLCBhbGwKK3JlZmVyZW5jZXMgdG8gPHZhcj5uYW1lPC92YXI+IHdpbGwgYmUgY2hhbmdlZCB0byA8dmFyPm5hbWUyQG5vZGVuYW1lPC92YXI+LiAgSWYgbm8KK3JlZmVyZW5jZSB0byA8dmFyPm5hbWU8L3Zhcj4gaXMgbWFkZSwgPHZhcj5uYW1lMkBub2RlbmFtZTwvdmFyPiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUKK3N5bWJvbCB0YWJsZS4KKworICAgPHA+QW5vdGhlciB1c2FnZSBvZiB0aGUgPGNvZGU+LnN5bXZlcjwvY29kZT4gZGlyZWN0aXZlIGlzOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5zeW12ZXIgPHZhcj5uYW1lPC92YXI+LCA8dmFyPm5hbWUyQEBub2RlbmFtZTwvdmFyPgorPC9wcmU+CisgICA8cD5JbiB0aGlzIGNhc2UsIHRoZSBzeW1ib2wgPHZhcj5uYW1lPC92YXI+IG11c3QgZXhpc3QgYW5kIGJlIGRlZmluZWQgd2l0aGluCit0aGUgZmlsZSBiZWluZyBhc3NlbWJsZWQuIEl0IGlzIHNpbWlsYXIgdG8gPHZhcj5uYW1lMkBub2RlbmFtZTwvdmFyPi4gVGhlCitkaWZmZXJlbmNlIGlzIDx2YXI+bmFtZTJAQG5vZGVuYW1lPC92YXI+IHdpbGwgYWxzbyBiZSB1c2VkIHRvIHJlc29sdmUKK3JlZmVyZW5jZXMgdG8gPHZhcj5uYW1lMjwvdmFyPiBieSB0aGUgbGlua2VyLgorCisgICA8cD5UaGUgdGhpcmQgdXNhZ2Ugb2YgdGhlIDxjb2RlPi5zeW12ZXI8L2NvZGU+IGRpcmVjdGl2ZSBpczoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAuc3ltdmVyIDx2YXI+bmFtZTwvdmFyPiwgPHZhcj5uYW1lMkBAQG5vZGVuYW1lPC92YXI+Cis8L3ByZT4KKyAgIDxwPldoZW4gPHZhcj5uYW1lPC92YXI+IGlzIG5vdCBkZWZpbmVkIHdpdGhpbiB0aGUKK2ZpbGUgYmVpbmcgYXNzZW1ibGVkLCBpdCBpcyB0cmVhdGVkIGFzIDx2YXI+bmFtZTJAbm9kZW5hbWU8L3Zhcj4uIFdoZW4KKzx2YXI+bmFtZTwvdmFyPiBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgZmlsZSBiZWluZyBhc3NlbWJsZWQsIHRoZSBzeW1ib2wKK25hbWUsIDx2YXI+bmFtZTwvdmFyPiwgd2lsbCBiZSBjaGFuZ2VkIHRvIDx2YXI+bmFtZTJAQG5vZGVuYW1lPC92YXI+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TeW50YXgtb2YtaTg2MC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ludGF4LW9mLWk4NjAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzNjN2VkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ludGF4LW9mLWk4NjAuaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TeW50YXggb2YgaTg2MCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTg2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTg2MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTg2MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcGNvZGVzLWZvci1pODYwLmh0bWwjT3Bjb2Rlcy1mb3ItaTg2MCIgdGl0bGU9Ik9wY29kZXMgZm9yIGk4NjAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTeW50YXgtb2YtaTg2MCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9wY29kZXMtZm9yLWk4NjAuaHRtbCNPcGNvZGVzLWZvci1pODYwIj5PcGNvZGVzIGZvciBpODYwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTg2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTg2MF8wMDJkRGVwZW5kZW50Ij5pODYwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTYuNSBpODYwIFN5bnRheDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJpODYwXzAwMmRDaGFycy5odG1sI2k4NjBfMDAyZENoYXJzIj5pODYwLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ludGF4LW9mLWk5NjAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bnRheC1vZi1pOTYwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwYzc5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1N5bnRheC1vZi1pOTYwLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3ludGF4IG9mIGk5NjAgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Imk5NjBfMDAyZERlcGVuZGVudC5odG1sI2k5NjBfMDAyZERlcGVuZGVudCIgdGl0bGU9Imk5NjAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3Bjb2Rlcy1mb3ItaTk2MC5odG1sI09wY29kZXMtZm9yLWk5NjAiIHRpdGxlPSJPcGNvZGVzIGZvciBpOTYwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ludGF4LW9mLWk5NjAiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPcGNvZGVzLWZvci1pOTYwLmh0bWwjT3Bjb2Rlcy1mb3ItaTk2MCI+T3Bjb2RlcyBmb3IgaTk2MDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Imk5NjBfMDAyZERlcGVuZGVudC5odG1sI2k5NjBfMDAyZERlcGVuZGVudCI+aTk2MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE3LjUgU3ludGF4IGZvciB0aGUgaTk2MDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJpOTYwXzAwMmRDaGFycy5odG1sI2k5NjBfMDAyZENoYXJzIj5pOTYwLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjc1OTRlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNlY3Rpb25zLmh0bWwjU2VjdGlvbnMiIHRpdGxlPSJTZWN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIj5TZWN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjMgU3ludGF4PC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWFjaGluZV8wMDJkaW5kZXBlbmRlbnQtc3ludGF4LTExMiI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bnRheF8wMDJjLW1hY2hpbmVfMDAyZGluZGVwZW5kZW50LTExMyI+PC9hPlRoaXMgY2hhcHRlciBkZXNjcmliZXMgdGhlIG1hY2hpbmUtaW5kZXBlbmRlbnQgc3ludGF4IGFsbG93ZWQgaW4gYQorc291cmNlIGZpbGUuICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBzeW50YXggaXMgc2ltaWxhciB0byB3aGF0IG1hbnkgb3RoZXIKK2Fzc2VtYmxlcnMgdXNlOyBpdCBpcyBpbnNwaXJlZCBieSB0aGUgQlNEIDQuMgorYXNzZW1ibGVyLCBleGNlcHQgdGhhdCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBkb2VzIG5vdCBhc3NlbWJsZSBWYXggYml0LWZpZWxkcy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPjogICAgICAgICAgICAgICAgUHJlcHJvY2Vzc2luZworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iV2hpdGVzcGFjZS5odG1sI1doaXRlc3BhY2UiPldoaXRlc3BhY2U8L2E+OiAgICAgICAgICAgICAgICAgICBXaGl0ZXNwYWNlCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT46ICAgICAgICAgICAgICAgICAgICAgQ29tbWVudHMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IlN5bWJvbC1JbnRyby5odG1sI1N5bWJvbC1JbnRybyI+U3ltYm9sIEludHJvPC9hPjogICAgICAgICAgICAgICAgIFN5bWJvbHMKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IlN0YXRlbWVudHMuaHRtbCNTdGF0ZW1lbnRzIj5TdGF0ZW1lbnRzPC9hPjogICAgICAgICAgICAgICAgICAgU3RhdGVtZW50cworPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIj5Db25zdGFudHM8L2E+OiAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZEJsb2NrLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZEJsb2NrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiNjNmYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkQmxvY2suaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUM1NFgtQmxvY2sgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUM1NFgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElDNTRYXzAwMmRPcHRzLmh0bWwjVElDNTRYXzAwMmRPcHRzIiB0aXRsZT0iVElDNTRYLU9wdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUM1NFhfMDAyZEVudi5odG1sI1RJQzU0WF8wMDJkRW52IiB0aXRsZT0iVElDNTRYLUVudiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJQzU0WC1CbG9jayI+PC9hPgorPGEgbmFtZT0iVElDNTRYXzAwMmRCbG9jayI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUM1NFhfMDAyZEVudi5odG1sI1RJQzU0WF8wMDJkRW52Ij5USUM1NFgtRW52PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElDNTRYXzAwMmRPcHRzLmh0bWwjVElDNTRYXzAwMmRPcHRzIj5USUM1NFgtT3B0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiPlRJQzU0WC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQwLjIgQmxvY2tpbmc8L2g0PgorCis8cD5BIGJsb2NrZWQgc2VjdGlvbiBvciBtZW1vcnkgYmxvY2sgaXMgZ3VhcmFudGVlZCBub3QgdG8gY3Jvc3MgdGhlIGJsb2NraW5nCitib3VuZGFyeSAodXN1YWxseSBhIHBhZ2UsIG9yIDEyOCB3b3JkcykgaWYgaXQgaXMgc21hbGxlciB0aGFuIHRoZQorYmxvY2tpbmcgc2l6ZSwgb3IgdG8gc3RhcnQgb24gYSBwYWdlIGJvdW5kYXJ5IGlmIGl0IGlzIGxhcmdlciB0aGFuIHRoZQorYmxvY2tpbmcgc2l6ZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRCdWlsdGlucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRCdWlsdGlucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZWEwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwKQEAgLTAsMCArMSwxMjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJQzU0WC1CdWlsdGlucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJQzU0WC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSUM1NFhfMDAyZExvY2Fscy5odG1sI1RJQzU0WF8wMDJkTG9jYWxzIiB0aXRsZT0iVElDNTRYLUxvY2FscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJQzU0WF8wMDJkRXh0Lmh0bWwjVElDNTRYXzAwMmRFeHQiIHRpdGxlPSJUSUM1NFgtRXh0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNTRYLUJ1aWx0aW5zIj48L2E+Cis8YSBuYW1lPSJUSUM1NFhfMDAyZEJ1aWx0aW5zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJQzU0WF8wMDJkRXh0Lmh0bWwjVElDNTRYXzAwMmRFeHQiPlRJQzU0WC1FeHQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSUM1NFhfMDAyZExvY2Fscy5odG1sI1RJQzU0WF8wMDJkTG9jYWxzIj5USUM1NFgtTG9jYWxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDAuNyBNYXRoIEJ1aWx0aW5zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWF0aC1idWlsdGluc18wMDJjLVRJQzU0WC0xODU4Ij48L2E+PGEgbmFtZT0iaW5kZXgtVElDNTRYLWJ1aWx0aW4tbWF0aC1mdW5jdGlvbnMtMTg1OSI+PC9hPjxhIG5hbWU9ImluZGV4LWJ1aWx0aW4tbWF0aC1mdW5jdGlvbnNfMDAyYy1USUM1NFgtMTg2MCI+PC9hPgorVGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHVzZWQgdG8gZ2VuZXJhdGUgYQorZmxvYXRpbmctcG9pbnQgdmFsdWUuICBBbGwgcmV0dXJuIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgZXhjZXB0CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiRjdmk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JGludDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JHNnbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgd2hpY2ggcmV0dXJuIGFuIGludGVnZXIKK3ZhbHVlLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGFjb3NfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg2MSI+PC9hPgorPGRsPjxkdD48Y29kZT4kYWNvcyg8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgYXJjY29zaW5lIG9mIDx2YXI+ZXhwcjwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0YXNpbl8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODYyIj48L2E+PGJyPjxkdD48Y29kZT4kYXNpbig8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgYXJjc2luZSBvZiA8dmFyPmV4cHI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGF0YW5fMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg2MyI+PC9hPjxicj48ZHQ+PGNvZGU+JGF0YW4oPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IGFyY3RhbmdlbnQgb2YgPHZhcj5leHByPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRhdGFuMl8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODY0Ij48L2E+PGJyPjxkdD48Y29kZT4kYXRhbjIoPC9jb2RlPjx2YXI+ZXhwcjE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+ZXhwcjI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBmbG9hdGluZyBwb2ludCBhcmN0YW5nZW50IG9mIDx2YXI+ZXhwcjE8L3Zhcj4gLyA8dmFyPmV4cHIyPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRjZWlsXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NjUiPjwvYT48YnI+PGR0Pjxjb2RlPiRjZWlsKDwvY29kZT48dmFyPmV4cHI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIG5vdCBsZXNzIHRoYW4gPHZhcj5leHByPC92YXI+IGFzIGZsb2F0aW5nIHBvaW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRjb3NoXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NjYiPjwvYT48YnI+PGR0Pjxjb2RlPiRjb3NoKDwvY29kZT48dmFyPmV4cHI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBmbG9hdGluZyBwb2ludCBoeXBlcmJvbGljIGNvc2luZSBvZiA8dmFyPmV4cHI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGNvc18wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODY3Ij48L2E+PGJyPjxkdD48Y29kZT4kY29zKDwvY29kZT48dmFyPmV4cHI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBmbG9hdGluZyBwb2ludCBjb3NpbmUgb2YgPHZhcj5leHByPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRjdmZfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg2OCI+PC9hPjxicj48ZHQ+PGNvZGU+JGN2Zig8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgaW50ZWdlciB2YWx1ZSA8dmFyPmV4cHI8L3Zhcj4gY29udmVydGVkIHRvIGZsb2F0aW5nLXBvaW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRjdmlfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg2OSI+PC9hPjxicj48ZHQ+PGNvZGU+JGN2aSg8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgPHZhcj5leHByPC92YXI+IGNvbnZlcnRlZCB0byBpbnRlZ2VyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRleHBfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg3MCI+PC9hPjxicj48ZHQ+PGNvZGU+JGV4cCg8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgZSBeIDx2YXI+ZXhwcjwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0ZmFic18wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODcxIj48L2E+PGJyPjxkdD48Y29kZT4kZmFicyg8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgYWJzb2x1dGUgdmFsdWUgb2YgPHZhcj5leHByPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRmbG9vcl8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODcyIj48L2E+PGJyPjxkdD48Y29kZT4kZmxvb3IoPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgdGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGlzIG5vdCBncmVhdGVyIHRoYW4gPHZhcj5leHByPC92YXI+IGFzCitmbG9hdGluZyBwb2ludC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0Zm1vZF8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODczIj48L2E+PGJyPjxkdD48Y29kZT4kZm1vZCg8L2NvZGU+PHZhcj5leHByMTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5leHByMjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IHJlbWFpbmRlciBvZiA8dmFyPmV4cHIxPC92YXI+IC8gPHZhcj5leHByMjwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0aW50XzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NzQiPjwvYT48YnI+PGR0Pjxjb2RlPiRpbnQoPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgMSBpZiA8dmFyPmV4cHI8L3Zhcj4gZXZhbHVhdGVzIHRvIGFuIGludGVnZXIsIHplcm8gb3RoZXJ3aXNlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRsZGV4cF8wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODc1Ij48L2E+PGJyPjxkdD48Y29kZT4kbGRleHAoPC9jb2RlPjx2YXI+ZXhwcjE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+ZXhwcjI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZSA8dmFyPmV4cHIxPC92YXI+ICogMiBeIDx2YXI+ZXhwcjI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGxvZzEwXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NzYiPjwvYT48YnI+PGR0Pjxjb2RlPiRsb2cxMCg8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgYmFzZSAxMCBsb2dhcml0aG0gb2YgPHZhcj5leHByPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRsb2dfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg3NyI+PC9hPjxicj48ZHQ+PGNvZGU+JGxvZyg8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgPHZhcj5leHByPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRtYXhfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg3OCI+PC9hPjxicj48ZHQ+PGNvZGU+JG1heCg8L2NvZGU+PHZhcj5leHByMTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5leHByMjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IG1heGltdW0gb2YgPHZhcj5leHByMTwvdmFyPiBhbmQgPHZhcj5leHByMjwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0bWluXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4NzkiPjwvYT48YnI+PGR0Pjxjb2RlPiRtaW4oPC9jb2RlPjx2YXI+ZXhwcjE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+ZXhwcjI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBmbG9hdGluZyBwb2ludCBtaW5pbXVtIG9mIDx2YXI+ZXhwcjE8L3Zhcj4gYW5kIDx2YXI+ZXhwcjI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHBvd18wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODgwIj48L2E+PGJyPjxkdD48Y29kZT4kcG93KDwvY29kZT48dmFyPmV4cHIxPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmV4cHIyPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgPHZhcj5leHByMTwvdmFyPiBeIDx2YXI+ZXhwcjI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHJvdW5kXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4ODEiPjwvYT48YnI+PGR0Pjxjb2RlPiRyb3VuZCg8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgbmVhcmVzdCBpbnRlZ2VyIHRvIDx2YXI+ZXhwcjwvdmFyPiBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0c2duXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4ODIiPjwvYT48YnI+PGR0Pjxjb2RlPiRzZ24oPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgLTEsIDAsIG9yIDEgYmFzZWQgb24gdGhlIHNpZ24gb2YgPHZhcj5leHByPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRzaW5fMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg4MyI+PC9hPjxicj48ZHQ+PGNvZGU+JHNpbig8L2NvZGU+PHZhcj5leHByPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgc2luZSBvZiA8dmFyPmV4cHI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHNpbmhfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg4NCI+PC9hPjxicj48ZHQ+PGNvZGU+JHNpbmgoPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IGh5cGVyYm9saWMgc2luZSBvZiA8dmFyPmV4cHI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHNxcnRfMDA3ZC1tYXRoLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTg4NSI+PC9hPjxicj48ZHQ+PGNvZGU+JHNxcnQoPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IHNxdWFyZSByb290IG9mIDx2YXI+ZXhwcjwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0dGFuXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4ODYiPjwvYT48YnI+PGR0Pjxjb2RlPiR0YW4oPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IHRhbmdlbnQgb2YgPHZhcj5leHByPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjR0YW5oXzAwN2QtbWF0aC1idWlsdGluXzAwMmMtVElDNTRYLTE4ODciPjwvYT48YnI+PGR0Pjxjb2RlPiR0YW5oKDwvY29kZT48dmFyPmV4cHI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBmbG9hdGluZyBwb2ludCBoeXBlcmJvbGljIHRhbmdlbnQgb2YgPHZhcj5leHByPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjR0cnVuY18wMDdkLW1hdGgtYnVpbHRpbl8wMDJjLVRJQzU0WC0xODg4Ij48L2E+PGJyPjxkdD48Y29kZT4kdHJ1bmMoPC9jb2RlPjx2YXI+ZXhwcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgdGhlIGludGVnZXIgdmFsdWUgb2YgPHZhcj5leHByPC92YXI+IHRydW5jYXRlZCB0b3dhcmRzIHplcm8gYXMKK2Zsb2F0aW5nIHBvaW50LgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlMWZhNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUM1NFgtQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRJQzU0WF8wMDJkU3ludGF4Lmh0bWwjVElDNTRYXzAwMmRTeW50YXgiIHRpdGxlPSJUSUM1NFgtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNTRYLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJUSUM1NFhfMDAyZENoYXJzIj48L2E+Cis8cD4KK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNTRYXzAwMmRTeW50YXguaHRtbCNUSUM1NFhfMDAyZFN5bnRheCI+VElDNTRYLVN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNDAuMTIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtVElDNTRYLTE5ODYiPjwvYT48YSBuYW1lPSJpbmRleC1USUM1NFgtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xOTg3Ij48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj47PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcmluZyBhbnl3aGVyZSBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZQorc3RhcnQgb2YgYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoYXQgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSB0aGVuIHRoZSB3aG9sZQorbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjYW4gYWxzbyBiZSBhCitsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPlRoZSBwcmVzZW5jZSBvZiBhbiBhc3RlcmlzayAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87KSBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIGFsc28KK2luZGljYXRlcyBhIGNvbW1lbnQgdGhhdCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhhdCBsaW5lLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLVRJQzU0WC0xOTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVRJQzU0WC0xOTg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtVElDNTRYLWxpbmUtc2VwYXJhdG9yLTE5OTAiPjwvYT5UaGUgVElDNTRYIGFzc2VtYmxlciBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBhIGxpbmUgc2VwYXJhdG9yCitjaGFyYWN0ZXIuCisKKzwhLS0gQ29weXJpZ2h0IDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+Cis8IS0tIG1hbiBlbmQgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZENvbnN0YW50cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRDb25zdGFudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTFlMTU1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRDb25zdGFudHMuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUM1NFgtQ29uc3RhbnRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUM1NFhfMDAyZERlcGVuZGVudC5odG1sI1RJQzU0WF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElDNTRYLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJQzU0WF8wMDJkRW52Lmh0bWwjVElDNTRYXzAwMmRFbnYiIHRpdGxlPSJUSUM1NFgtRW52Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVElDNTRYXzAwMmRTdWJzeW1zLmh0bWwjVElDNTRYXzAwMmRTdWJzeW1zIiB0aXRsZT0iVElDNTRYLVN1YnN5bXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUM1NFgtQ29uc3RhbnRzIj48L2E+Cis8YSBuYW1lPSJUSUM1NFhfMDAyZENvbnN0YW50cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUM1NFhfMDAyZFN1YnN5bXMuaHRtbCNUSUM1NFhfMDAyZFN1YnN5bXMiPlRJQzU0WC1TdWJzeW1zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElDNTRYXzAwMmRFbnYuaHRtbCNUSUM1NFhfMDAyZEVudiI+VElDNTRYLUVudjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiPlRJQzU0WC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQwLjQgQ29uc3RhbnRzIFN5bnRheDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNvbnN0YW50c18wMDJjLVRJQzU0WC0xODU2Ij48L2E+VGhlIFRJQzU0WCB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBhbGxvd3MgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCitjb25zdGFudCBmb3JtYXRzLCB1c2luZyBhIHN1ZmZpeCB0byBpbmRpY2F0ZSB0aGUgcmFkaXg6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPGEgbmFtZT0iaW5kZXgtYmluYXJ5LWNvbnN0YW50c18wMDJjLVRJQzU0WC0xODU3Ij48L2E+CisgICAgIEJpbmFyeSAgICAgICAgICAgICAgICAgIDxjb2RlPjAwMDAwMEIsIDAxMTAwMGI8L2NvZGU+CisgICAgIE9jdGFsICAgICAgICAgICAgICAgICAgIDxjb2RlPjEwUSwgMjI0cTwvY29kZT4KKyAgICAgSGV4YWRlY2ltYWwgICAgICAgICAgICAgPGNvZGU+NDVoLCAwRkg8L2NvZGU+CisgICAgIAorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGZlYjVhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUM1NFgtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTcGFyY18wMDJkRGVwZW5kZW50Lmh0bWwjU3BhcmNfMDAyZERlcGVuZGVudCIgdGl0bGU9IlNwYXJjLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJQzZYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM2WF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElDNlgtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNTRYLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iVElDNTRYXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI1RJQzZYXzAwMmREZXBlbmRlbnQiPlRJQzZYLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNwYXJjXzAwMmREZXBlbmRlbnQuaHRtbCNTcGFyY18wMDJkRGVwZW5kZW50Ij5TcGFyYy1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuNDAgVElDNTRYIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVRJQzU0WC1zdXBwb3J0LTE4NDUiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlRJQzU0WF8wMDJkT3B0cy5odG1sI1RJQzU0WF8wMDJkT3B0cyI+VElDNTRYLU9wdHM8L2E+OiAgICAgICAgICAgICAgIENvbW1hbmQtbGluZSBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJUSUM1NFhfMDAyZEJsb2NrLmh0bWwjVElDNTRYXzAwMmRCbG9jayI+VElDNTRYLUJsb2NrPC9hPjogICAgICAgICAgICAgIEJsb2NraW5nCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJUSUM1NFhfMDAyZEVudi5odG1sI1RJQzU0WF8wMDJkRW52Ij5USUM1NFgtRW52PC9hPjogICAgICAgICAgICAgICAgRW52aXJvbm1lbnQgU2V0dGluZ3MKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IlRJQzU0WF8wMDJkQ29uc3RhbnRzLmh0bWwjVElDNTRYXzAwMmRDb25zdGFudHMiPlRJQzU0WC1Db25zdGFudHM8L2E+OiAgICAgICAgICBDb25zdGFudHMgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJUSUM1NFhfMDAyZFN1YnN5bXMuaHRtbCNUSUM1NFhfMDAyZFN1YnN5bXMiPlRJQzU0WC1TdWJzeW1zPC9hPjogICAgICAgICAgICBTdHJpbmcgU3Vic3RpdHV0aW9uCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJUSUM1NFhfMDAyZExvY2Fscy5odG1sI1RJQzU0WF8wMDJkTG9jYWxzIj5USUM1NFgtTG9jYWxzPC9hPjogICAgICAgICAgICAgTG9jYWwgTGFiZWwgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPjogICAgICAgICAgIEJ1aWx0aW4gQXNzZW1ibGVyIE1hdGggRnVuY3Rpb25zCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJUSUM1NFhfMDAyZEV4dC5odG1sI1RJQzU0WF8wMDJkRXh0Ij5USUM1NFgtRXh0PC9hPjogICAgICAgICAgICAgICAgRXh0ZW5kZWQgQWRkcmVzc2luZyBTdXBwb3J0Cis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPjogICAgICAgICBEaXJlY3RpdmVzCis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT46ICAgICAgICAgICAgIE1hY3JvIEZlYXR1cmVzCis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRNTVJlZ3MuaHRtbCNUSUM1NFhfMDAyZE1NUmVncyI+VElDNTRYLU1NUmVnczwvYT46ICAgICAgICAgICAgIE1lbW9yeS1tYXBwZWQgUmVnaXN0ZXJzCis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRTeW50YXguaHRtbCNUSUM1NFhfMDAyZFN5bnRheCI+VElDNTRYLVN5bnRheDwvYT46ICAgICAgICAgICAgIFN5bnRheAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWZiYjUxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSwyNDEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJQzU0WC1EaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUM1NFhfMDAyZERlcGVuZGVudC5odG1sI1RJQzU0WF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElDNTRYLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJQzU0WF8wMDJkRXh0Lmh0bWwjVElDNTRYXzAwMmRFeHQiIHRpdGxlPSJUSUM1NFgtRXh0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyIgdGl0bGU9IlRJQzU0WC1NYWNyb3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUM1NFgtRGlyZWN0aXZlcyI+PC9hPgorPGEgbmFtZT0iVElDNTRYXzAwMmREaXJlY3RpdmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjVElDNTRYXzAwMmRNYWNyb3MiPlRJQzU0WC1NYWNyb3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSUM1NFhfMDAyZEV4dC5odG1sI1RJQzU0WF8wMDJkRXh0Ij5USUM1NFgtRXh0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDAuOSBEaXJlY3RpdmVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtVElDNTRYLTE4ODkiPjwvYT48YSBuYW1lPSJpbmRleC1USUM1NFgtbWFjaGluZS1kaXJlY3RpdmVzLTE4OTAiPjwvYT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFsaWduXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTEiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXZlbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xODkyIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPi5hbGlnbiBbPC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi5ldmVuPC9jb2RlPjxkZD5BbGlnbiB0aGUgc2VjdGlvbiBwcm9ncmFtIGNvdW50ZXIgb24gdGhlIG5leHQgYm91bmRhcnksIGJhc2VkIG9uCis8dmFyPnNpemU8L3Zhcj4uICA8dmFyPnNpemU8L3Zhcj4gbWF5IGJlIGFueSBwb3dlciBvZiAyLiAgPGNvZGU+LmV2ZW48L2NvZGU+IGlzCitlcXVpdmFsZW50IHRvIDxjb2RlPi5hbGlnbjwvY29kZT4gd2l0aCBhIDx2YXI+c2l6ZTwvdmFyPiBvZiAyLgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT4xPC9jb2RlPjxkZD5BbGlnbiBTUEMgdG8gd29yZCBib3VuZGFyeQorPGJyPjxkdD48Y29kZT4yPC9jb2RlPjxkZD5BbGlnbiBTUEMgdG8gbG9uZ3dvcmQgYm91bmRhcnkgKHNhbWUgYXMgLmV2ZW4pCis8YnI+PGR0Pjxjb2RlPjEyODwvY29kZT48ZGQ+QWxpZ24gU1BDIHRvIHBhZ2UgYm91bmRhcnkKKzwvZGw+CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jhc2dfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTg5MyI+PC9hPjxicj48ZHQ+PGNvZGU+LmFzZyA8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+QXNzaWduIDx2YXI+bmFtZTwvdmFyPiB0aGUgc3RyaW5nIDx2YXI+c3RyaW5nPC92YXI+LiAgU3RyaW5nIHJlcGxhY2VtZW50IGlzCitwZXJmb3JtZWQgb24gPHZhcj5zdHJpbmc8L3Zhcj4gYmVmb3JlIGFzc2lnbm1lbnQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JldmFsXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTQiPjwvYT48ZHQ+PGNvZGU+LmV2YWwgPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPkV2YWx1YXRlIHRoZSBjb250ZW50cyBvZiBzdHJpbmcgPHZhcj5zdHJpbmc8L3Zhcj4gYW5kIGFzc2lnbiB0aGUgcmVzdWx0IGFzIGEKK3N0cmluZyB0byB0aGUgc3Vic3ltIDx2YXI+bmFtZTwvdmFyPi4gIFN0cmluZyByZXBsYWNlbWVudCBpcyBwZXJmb3JtZWQgb24KKzx2YXI+c3RyaW5nPC92YXI+IGJlZm9yZSBhc3NpZ25tZW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYnNzXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTUiPjwvYT48YnI+PGR0Pjxjb2RlPi5ic3MgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5zaXplPC92YXI+PGNvZGU+IFssIFs8L2NvZGU+PHZhcj5ibG9ja2luZ19mbGFnPC92YXI+PGNvZGU+XSBbLDwvY29kZT48dmFyPmFsaWdubWVudF9mbGFnPC92YXI+PGNvZGU+XV08L2NvZGU+PGRkPlJlc2VydmUgc3BhY2UgZm9yIDx2YXI+c3ltYm9sPC92YXI+IGluIHRoZSAuYnNzIHNlY3Rpb24uICA8dmFyPnNpemU8L3Zhcj4gaXMgaW4KK3dvcmRzLiAgSWYgcHJlc2VudCwgPHZhcj5ibG9ja2luZ19mbGFnPC92YXI+IGluZGljYXRlcyB0aGUgYWxsb2NhdGVkIHNwYWNlCitzaG91bGQgYmUgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRhcnkgaWYgaXQgd291bGQgb3RoZXJ3aXNlIGNyb3NzIGEgcGFnZQorYm91bmRhcnkuICBJZiBwcmVzZW50LCA8dmFyPmFsaWdubWVudF9mbGFnPC92YXI+IGNhdXNlcyB0aGUgYXNzZW1ibGVyIHRvCithbGxvY2F0ZSA8dmFyPnNpemU8L3Zhcj4gb24gYSBsb25nIHdvcmQgYm91bmRhcnkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JieXRlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVieXRlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE4OTciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNoYXJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTg5OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidWNoYXJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTg5OSI+PC9hPjxicj48ZHQ+PGNvZGU+LmJ5dGUgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48Y29kZT4gWywuLi4sPC9jb2RlPjx2YXI+dmFsdWVfbjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi51Ynl0ZSA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxjb2RlPiBbLC4uLiw8L2NvZGU+PHZhcj52YWx1ZV9uPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+LmNoYXIgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48Y29kZT4gWywuLi4sPC9jb2RlPjx2YXI+dmFsdWVfbjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi51Y2hhciA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxjb2RlPiBbLC4uLiw8L2NvZGU+PHZhcj52YWx1ZV9uPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+UGxhY2Ugb25lIG9yIG1vcmUgYnl0ZXMgaW50byBjb25zZWN1dGl2ZSB3b3JkcyBvZiB0aGUgY3VycmVudCBzZWN0aW9uLiAKK1RoZSB1cHBlciA4IGJpdHMgb2YgZWFjaCB3b3JkIGlzIHplcm8tZmlsbGVkLiAgSWYgYSBsYWJlbCBpcyB1c2VkLCBpdAorcG9pbnRzIHRvIHRoZSB3b3JkIGFsbG9jYXRlZCBmb3IgdGhlIGZpcnN0IGJ5dGUgZW5jb3VudGVyZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjbGlua18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTAwIj48L2E+PGJyPjxkdD48Y29kZT4uY2xpbmsgWyI8L2NvZGU+PHZhcj5zZWN0aW9uX25hbWU8L3Zhcj48Y29kZT4iXTwvY29kZT48ZGQ+U2V0IFNUWVBfQ0xJTksgZmxhZyBmb3IgdGhpcyBzZWN0aW9uLCB3aGljaCBpbmRpY2F0ZXMgdG8gdGhlIGxpbmtlciB0aGF0CitpZiBubyBzeW1ib2xzIGZyb20gdGhpcyBzZWN0aW9uIGFyZSByZWZlcmVuY2VkLCB0aGUgc2VjdGlvbiBzaG91bGQgbm90CitiZSBpbmNsdWRlZCBpbiB0aGUgbGluay4gIElmIDx2YXI+c2VjdGlvbl9uYW1lPC92YXI+IGlzIG9taXR0ZWQsIHRoZSBjdXJyZW50CitzZWN0aW9uIGlzIHVzZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjXzAwNWZtb2RlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDEiPjwvYT48YnI+PGR0Pjxjb2RlPi5jX21vZGU8L2NvZGU+PGRkPlRCRC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNvcHlfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkwMiI+PC9hPjxicj48ZHQ+PGNvZGU+LmNvcHkgIjwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGNvZGU+IiB8IDwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGR0Pjxjb2RlPi5pbmNsdWRlICI8L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxjb2RlPiIgfCA8L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxkZD5SZWFkIHNvdXJjZSBzdGF0ZW1lbnRzIGZyb20gPHZhcj5maWxlbmFtZTwvdmFyPi4gIFRoZSBub3JtYWwgaW5jbHVkZSBzZWFyY2gKK3BhdGggaXMgdXNlZC4gIE5vcm1hbGx5IC5jb3B5IHdpbGwgY2F1c2Ugc3RhdGVtZW50cyBmcm9tIHRoZSBpbmNsdWRlZAorZmlsZSB0byBiZSBwcmludGVkIGluIHRoZSBhc3NlbWJseSBsaXN0aW5nIGFuZCAuaW5jbHVkZSB3aWxsIG5vdCwgYnV0Cit0aGlzIGRpc3RpbmN0aW9uIGlzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkYXRhXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDMiPjwvYT48YnI+PGR0Pjxjb2RlPi5kYXRhPC9jb2RlPjxkZD5CZWdpbiBhc3NlbWJsaW5nIGNvZGUgaW50byB0aGUgLmRhdGEgc2VjdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRvdWJsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsZG91YmxlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnhmbG9hdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTA3Ij48L2E+PGJyPjxkdD48Y29kZT4uZG91YmxlIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+IFssLi4uLDwvY29kZT48dmFyPnZhbHVlX248L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4ubGRvdWJsZSA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxjb2RlPiBbLC4uLiw8L2NvZGU+PHZhcj52YWx1ZV9uPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+LmZsb2F0IDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+IFssLi4uLDwvY29kZT48dmFyPnZhbHVlX248L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4ueGZsb2F0IDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+IFssLi4uLDwvY29kZT48dmFyPnZhbHVlX248L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5QbGFjZSBhbiBJRUVFIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gb2Ygb25lIG9yCittb3JlIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBpbnRvIHRoZSBjdXJyZW50IHNlY3Rpb24uICBBbGwgYnV0Cis8Y29kZT4ueGZsb2F0PC9jb2RlPiBhbGlnbiB0aGUgcmVzdWx0IG9uIGEgbG9uZ3dvcmQgYm91bmRhcnkuICBWYWx1ZXMgYXJlCitzdG9yZWQgbW9zdC1zaWduaWZpY2FudCB3b3JkIGZpcnN0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZHJsaXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRybm9saXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MDkiPjwvYT48YnI+PGR0Pjxjb2RlPi5kcmxpc3Q8L2NvZGU+PGR0Pjxjb2RlPi5kcm5vbGlzdDwvY29kZT48ZGQ+Q29udHJvbCBwcmludGluZyBvZiBkaXJlY3RpdmVzIHRvIHRoZSBsaXN0aW5nIGZpbGUuICBJZ25vcmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZW1zZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTEwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtbXNnXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yndtc2dfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkxMiI+PC9hPjxicj48ZHQ+PGNvZGU+LmVtc2cgPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGR0Pjxjb2RlPi5tbXNnIDwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxkdD48Y29kZT4ud21zZyA8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48ZGQ+RW1pdCBhIHVzZXItZGVmaW5lZCBlcnJvciwgbWVzc2FnZSwgb3Igd2FybmluZywgcmVzcGVjdGl2ZWx5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmFyXzAwNWZtb2RlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MTMiPjwvYT48YnI+PGR0Pjxjb2RlPi5mYXJfbW9kZTwvY29kZT48ZGQ+VXNlIGV4dGVuZGVkIGFkZHJlc3Npbmcgd2hlbiBhc3NlbWJsaW5nIHN0YXRlbWVudHMuICBUaGlzIHNob3VsZCBhcHBlYXIKK29ubHkgb25jZSBwZXIgZmlsZSwgYW5kIGlzIGVxdWl2YWxlbnQgdG8gdGhlIC1tZmFyLW1vZGUgb3B0aW9uIHNlZSA8YSBocmVmPSJUSUM1NFhfMDAyZE9wdHMuaHRtbCNUSUM1NFhfMDAyZE9wdHMiPjxjb2RlPi1tZmFyLW1vZGU8L2NvZGU+PC9hPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZjbGlzdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmY25vbGlzdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTE1Ij48L2E+PGJyPjxkdD48Y29kZT4uZmNsaXN0PC9jb2RlPjxkdD48Y29kZT4uZmNub2xpc3Q8L2NvZGU+PGRkPkNvbnRyb2wgcHJpbnRpbmcgb2YgZmFsc2UgY29uZGl0aW9uYWwgYmxvY2tzIHRvIHRoZSBsaXN0aW5nIGZpbGUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmaWVsZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTE2Ij48L2E+PGJyPjxkdD48Y29kZT4uZmllbGQgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48Y29kZT4gWyw8L2NvZGU+PHZhcj5zaXplPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+SW5pdGlhbGl6ZSBhIGJpdGZpZWxkIG9mIDx2YXI+c2l6ZTwvdmFyPiBiaXRzIGluIHRoZSBjdXJyZW50IHNlY3Rpb24uICBJZgorPHZhcj52YWx1ZTwvdmFyPiBpcyByZWxvY2F0YWJsZSwgdGhlbiA8dmFyPnNpemU8L3Zhcj4gbXVzdCBiZSAxNi4gIDx2YXI+c2l6ZTwvdmFyPgorZGVmYXVsdHMgdG8gMTYgYml0cy4gIElmIDx2YXI+dmFsdWU8L3Zhcj4gZG9lcyBub3QgZml0IGludG8gPHZhcj5zaXplPC92YXI+IGJpdHMsCit0aGUgdmFsdWUgd2lsbCBiZSB0cnVuY2F0ZWQuICBTdWNjZXNzaXZlIDxjb2RlPi5maWVsZDwvY29kZT4gZGlyZWN0aXZlcyB3aWxsCitwYWNrIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IHdvcmQsIGZpbGxpbmcgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cworZmlyc3QsIGFuZCBhbGlnbmluZyB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgd29yZCBpZiB0aGUgZmllbGQgc2l6ZSBkb2VzCitub3QgZml0IGludG8gdGhlIHNwYWNlIHJlbWFpbmluZyBpbiB0aGUgY3VycmVudCB3b3JkLiAgQSA8Y29kZT4uYWxpZ248L2NvZGU+CitkaXJlY3RpdmUgd2l0aCBhbiBvcGVyYW5kIG9mIDEgd2lsbCBmb3JjZSB0aGUgbmV4dCA8Y29kZT4uZmllbGQ8L2NvZGU+CitkaXJlY3RpdmUgdG8gYmVnaW4gcGFja2luZyBpbnRvIGEgbmV3IHdvcmQuICBJZiBhIGxhYmVsIGlzIHVzZWQsIGl0Citwb2ludHMgdG8gdGhlIHdvcmQgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGZpZWxkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZ2xvYmFsXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MTciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRlZl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZWZfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkxOSI+PC9hPjxicj48ZHQ+PGNvZGU+Lmdsb2JhbCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gWywuLi4sPC9jb2RlPjx2YXI+c3ltYm9sX248L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4uZGVmIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiBbLC4uLiw8L2NvZGU+PHZhcj5zeW1ib2xfbjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi5yZWYgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+IFssLi4uLDwvY29kZT48dmFyPnN5bWJvbF9uPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+PGNvZGU+LmRlZjwvY29kZT4gbm9taW5hbGx5IGlkZW50aWZpZXMgYSBzeW1ib2wgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBmaWxlCithbmQgYXZhaWxhYmxlIHRvIG90aGVyIGZpbGVzLiAgPGNvZGU+LnJlZjwvY29kZT4gaWRlbnRpZmllcyBhIHN5bWJvbCB1c2VkIGluCit0aGUgY3VycmVudCBmaWxlIGJ1dCBkZWZpbmVkIGVsc2V3aGVyZS4gIEJvdGggbWFwIHRvIHRoZSBzdGFuZGFyZAorPGNvZGU+Lmdsb2JhbDwvY29kZT4gZGlyZWN0aXZlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaGFsZl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTIwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1aGFsZl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTIxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzaG9ydF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTIyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1c2hvcnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkyMyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW50XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MjQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVpbnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkyNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdid29yZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1d29yZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTI3Ij48L2E+PGJyPjxkdD48Y29kZT4uaGFsZiA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxjb2RlPiBbLC4uLiw8L2NvZGU+PHZhcj52YWx1ZV9uPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+LnVoYWxmIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+IFssLi4uLDwvY29kZT48dmFyPnZhbHVlX248L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4uc2hvcnQgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48Y29kZT4gWywuLi4sPC9jb2RlPjx2YXI+dmFsdWVfbjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi51c2hvcnQgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48Y29kZT4gWywuLi4sPC9jb2RlPjx2YXI+dmFsdWVfbjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi5pbnQgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48Y29kZT4gWywuLi4sPC9jb2RlPjx2YXI+dmFsdWVfbjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi51aW50IDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+IFssLi4uLDwvY29kZT48dmFyPnZhbHVlX248L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4ud29yZCA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxjb2RlPiBbLC4uLiw8L2NvZGU+PHZhcj52YWx1ZV9uPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+LnV3b3JkIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+IFssLi4uLDwvY29kZT48dmFyPnZhbHVlX248L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5QbGFjZSBvbmUgb3IgbW9yZSB2YWx1ZXMgaW50byBjb25zZWN1dGl2ZSB3b3JkcyBvZiB0aGUgY3VycmVudCBzZWN0aW9uLiAKK0lmIGEgbGFiZWwgaXMgdXNlZCwgaXQgcG9pbnRzIHRvIHRoZSB3b3JkIGFsbG9jYXRlZCBmb3IgdGhlIGZpcnN0IHZhbHVlCitlbmNvdW50ZXJlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxhYmVsXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MjgiPjwvYT48YnI+PGR0Pjxjb2RlPi5sYWJlbCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48ZGQ+RGVmaW5lIGEgc3BlY2lhbCA8dmFyPnN5bWJvbDwvdmFyPiB0byByZWZlciB0byB0aGUgbG9hZCB0aW1lIGFkZHJlc3Mgb2YgdGhlCitjdXJyZW50IHNlY3Rpb24gcHJvZ3JhbSBjb3VudGVyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGVuZ3RoXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MjkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndpZHRoXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MzAiPjwvYT48YnI+PGR0Pjxjb2RlPi5sZW5ndGg8L2NvZGU+PGR0Pjxjb2RlPi53aWR0aDwvY29kZT48ZGQ+U2V0IHRoZSBwYWdlIGxlbmd0aCBhbmQgd2lkdGggb2YgdGhlIG91dHB1dCBsaXN0aW5nIGZpbGUuICBJZ25vcmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGlzdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTMxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub2xpc3RfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkzMiI+PC9hPjxicj48ZHQ+PGNvZGU+Lmxpc3Q8L2NvZGU+PGR0Pjxjb2RlPi5ub2xpc3Q8L2NvZGU+PGRkPkNvbnRyb2wgd2hldGhlciB0aGUgc291cmNlIGxpc3RpbmcgaXMgcHJpbnRlZC4gIElnbm9yZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MzMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MzQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ynhsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5MzUiPjwvYT48YnI+PGR0Pjxjb2RlPi5sb25nIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+IFssLi4uLDwvY29kZT48dmFyPnZhbHVlX248L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4udWxvbmcgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48Y29kZT4gWywuLi4sPC9jb2RlPjx2YXI+dmFsdWVfbjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi54bG9uZyA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxjb2RlPiBbLC4uLiw8L2NvZGU+PHZhcj52YWx1ZV9uPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+UGxhY2Ugb25lIG9yIG1vcmUgMzItYml0IHZhbHVlcyBpbnRvIGNvbnNlY3V0aXZlIHdvcmRzIGluIHRoZSBjdXJyZW50CitzZWN0aW9uLiAgVGhlIG1vc3Qgc2lnbmlmaWNhbnQgd29yZCBpcyBzdG9yZWQgZmlyc3QuICA8Y29kZT4ubG9uZzwvY29kZT4gYW5kCis8Y29kZT4udWxvbmc8L2NvZGU+IGFsaWduIHRoZSByZXN1bHQgb24gYSBsb25nd29yZCBib3VuZGFyeTsgPGNvZGU+eGxvbmc8L2NvZGU+IGRvZXMKK25vdC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxvb3BfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYnJlYWtfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkzNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kbG9vcF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTM4Ij48L2E+PGJyPjxkdD48Y29kZT4ubG9vcCBbPC9jb2RlPjx2YXI+Y291bnQ8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4uYnJlYWsgWzwvY29kZT48dmFyPmNvbmRpdGlvbjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi5lbmRsb29wPC9jb2RlPjxkZD5SZXBlYXRlZGx5IGFzc2VtYmxlIGEgYmxvY2sgb2YgY29kZS4gIDxjb2RlPi5sb29wPC9jb2RlPiBiZWdpbnMgdGhlIGJsb2NrLCBhbmQKKzxjb2RlPi5lbmRsb29wPC9jb2RlPiBtYXJrcyBpdHMgdGVybWluYXRpb24uICA8dmFyPmNvdW50PC92YXI+IGRlZmF1bHRzIHRvIDEwMjQsCithbmQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGJsb2NrIHNob3VsZCBiZSByZXBlYXRlZC4gCis8Y29kZT4uYnJlYWs8L2NvZGU+IHRlcm1pbmF0ZXMgdGhlIGxvb3Agc28gdGhhdCBhc3NlbWJseSBiZWdpbnMgYWZ0ZXIgdGhlCis8Y29kZT4uZW5kbG9vcDwvY29kZT4gZGlyZWN0aXZlLiAgVGhlIG9wdGlvbmFsIDx2YXI+Y29uZGl0aW9uPC92YXI+IHdpbGwgY2F1c2UgdGhlCitsb29wIHRvIHRlcm1pbmF0ZSBvbmx5IGlmIGl0IGV2YWx1YXRlcyB0byB6ZXJvLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibWFjcm9fMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTkzOSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kbV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTQwIj48L2E+PGJyPjxkdD48dmFyPm1hY3JvX25hbWU8L3Zhcj48Y29kZT4gLm1hY3JvIFs8L2NvZGU+PHZhcj5wYXJhbTE8L3Zhcj48Y29kZT5dWywuLi48L2NvZGU+PHZhcj5wYXJhbV9uPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+Wy5tZXhpdF08L2NvZGU+PGR0Pjxjb2RlPi5lbmRtPC9jb2RlPjxkZD5TZWUgdGhlIHNlY3Rpb24gb24gbWFjcm9zIGZvciBtb3JlIGV4cGxhbmF0aW9uIChTZWUgPGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtbGliXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NDEiPjwvYT48YnI+PGR0Pjxjb2RlPi5tbGliICI8L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxjb2RlPiIgfCA8L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxkZD5Mb2FkIHRoZSBtYWNybyBsaWJyYXJ5IDx2YXI+ZmlsZW5hbWU8L3Zhcj4uICA8dmFyPmZpbGVuYW1lPC92YXI+IG11c3QgYmUgYW4KK2FyY2hpdmVkIGxpYnJhcnkgKEJGRCBhci1jb21wYXRpYmxlKSBvZiB0ZXh0IGZpbGVzLCBleHBlY3RlZCB0byBjb250YWluCitvbmx5IG1hY3JvIGRlZmluaXRpb25zLiAgIFRoZSBzdGFuZGFyZCBpbmNsdWRlIHNlYXJjaCBwYXRoIGlzIHVzZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtbGlzdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTQyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jtbm9saXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NDMiPjwvYT48YnI+PGR0Pjxjb2RlPi5tbGlzdDwvY29kZT48ZHQ+PGNvZGU+Lm1ub2xpc3Q8L2NvZGU+PGRkPkNvbnRyb2wgd2hldGhlciB0byBpbmNsdWRlIG1hY3JvIGFuZCBsb29wIGJsb2NrIGV4cGFuc2lvbnMgaW4gdGhlCitsaXN0aW5nIG91dHB1dC4gIElnbm9yZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtbXJlZ3NfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk0NCI+PC9hPjxicj48ZHQ+PGNvZGU+Lm1tcmVnczwvY29kZT48ZGQ+RGVmaW5lIGdsb2JhbCBzeW1ib2xpYyBuYW1lcyBmb3IgdGhlICdjNTR4IHJlZ2lzdGVycy4gIFN1cHBvc2VkbHkKK2VxdWl2YWxlbnQgdG8gZXhlY3V0aW5nIDxjb2RlPi5zZXQ8L2NvZGU+IGRpcmVjdGl2ZXMgZm9yIGVhY2ggcmVnaXN0ZXIgd2l0aAoraXRzIG1lbW9yeS1tYXBwZWQgdmFsdWUsIGJ1dCBpbiByZWFsaXR5IGlzIHByb3ZpZGVkIG9ubHkgZm9yCitjb21wYXRpYmlsaXR5IGFuZCBkb2VzIG5vdGhpbmcuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JuZXdibG9ja18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTQ1Ij48L2E+PGJyPjxkdD48Y29kZT4ubmV3YmxvY2s8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIHJlc2V0cyBhbnkgVElDNTRYIGxvY2FsIGxhYmVscyBjdXJyZW50bHkgZGVmaW5lZC4gIE5vcm1hbAorPGNvZGU+YXM8L2NvZGU+IGxvY2FsIGxhYmVscyBhcmUgdW5hZmZlY3RlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym9wdGlvbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTQ2Ij48L2E+PGJyPjxkdD48Y29kZT4ub3B0aW9uIDwvY29kZT48dmFyPm9wdGlvbl9saXN0PC92YXI+PGRkPlNldCBsaXN0aW5nIG9wdGlvbnMuICBJZ25vcmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic2Jsb2NrXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NDciPjwvYT48YnI+PGR0Pjxjb2RlPi5zYmxvY2sgIjwvY29kZT48dmFyPnNlY3Rpb25fbmFtZTwvdmFyPjxjb2RlPiIgfCA8L2NvZGU+PHZhcj5zZWN0aW9uX25hbWU8L3Zhcj48Y29kZT4gWywiPC9jb2RlPjx2YXI+bmFtZV9uPC92YXI+PGNvZGU+IiB8IDwvY29kZT48dmFyPm5hbWVfbjwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPkRlc2lnbmF0ZSA8dmFyPnNlY3Rpb25fbmFtZTwvdmFyPiBmb3IgYmxvY2tpbmcuICBCbG9ja2luZyBndWFyYW50ZWVzIHRoYXQgYQorc2VjdGlvbiB3aWxsIHN0YXJ0IG9uIGEgcGFnZSBib3VuZGFyeSAoMTI4IHdvcmRzKSBpZiBpdCB3b3VsZCBvdGhlcndpc2UKK2Nyb3NzIGEgcGFnZSBib3VuZGFyeS4gIE9ubHkgaW5pdGlhbGl6ZWQgc2VjdGlvbnMgbWF5IGJlIGRlc2lnbmF0ZWQgd2l0aAordGhpcyBkaXJlY3RpdmUuICBTZWUgYWxzbyBTZWUgPGEgaHJlZj0iVElDNTRYXzAwMmRCbG9jay5odG1sI1RJQzU0WF8wMDJkQmxvY2siPlRJQzU0WC1CbG9jazwvYT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZWN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NDgiPjwvYT48YnI+PGR0Pjxjb2RlPi5zZWN0ICI8L2NvZGU+PHZhcj5zZWN0aW9uX25hbWU8L3Zhcj48Y29kZT4iPC9jb2RlPjxkZD5EZWZpbmUgYSBuYW1lZCBpbml0aWFsaXplZCBzZWN0aW9uIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50IHNlY3Rpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZXF1XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NTAiPjwvYT48YnI+PGR0Pjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+IC5zZXQgIjwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+IjwvY29kZT48ZHQ+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gLmVxdSAiPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48Y29kZT4iPC9jb2RlPjxkZD5FcXVhdGUgYSBjb25zdGFudCA8dmFyPnZhbHVlPC92YXI+IHRvIGEgPHZhcj5zeW1ib2w8L3Zhcj4sIHdoaWNoIGlzIHBsYWNlZCBpbiB0aGUKK3N5bWJvbCB0YWJsZS4gIDx2YXI+c3ltYm9sPC92YXI+IG1heSBub3QgYmUgcHJldmlvdXNseSBkZWZpbmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic3BhY2VfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk1MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYmVzXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NTIiPjwvYT48YnI+PGR0Pjxjb2RlPi5zcGFjZSA8L2NvZGU+PHZhcj5zaXplX2luX2JpdHM8L3Zhcj48ZHQ+PGNvZGU+LmJlcyA8L2NvZGU+PHZhcj5zaXplX2luX2JpdHM8L3Zhcj48ZGQ+UmVzZXJ2ZSB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGN1cnJlbnQgc2VjdGlvbiBhbmQgemVyby1maWxsCit0aGVtLiAgSWYgYSBsYWJlbCBpcyB1c2VkIHdpdGggPGNvZGU+LnNwYWNlPC9jb2RlPiwgaXQgcG9pbnRzIHRvIHRoZQorPHN0cm9uZz5maXJzdDwvc3Ryb25nPiB3b3JkIHJlc2VydmVkLiAgV2l0aCA8Y29kZT4uYmVzPC9jb2RlPiwgdGhlIGxhYmVsIHBvaW50cyB0byB0aGUKKzxzdHJvbmc+bGFzdDwvc3Ryb25nPiB3b3JkIHJlc2VydmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic3NsaXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNzbm9saXN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NTQiPjwvYT48YnI+PGR0Pjxjb2RlPi5zc2xpc3Q8L2NvZGU+PGR0Pjxjb2RlPi5zc25vbGlzdDwvY29kZT48ZGQ+Q29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiBzdWJzeW0gcmVwbGFjZW1lbnQgaW4gdGhlIGxpc3Rpbmcgb3V0cHV0LiAgSWdub3JlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0cmluZ18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jwc3RyaW5nXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NTYiPjwvYT48YnI+PGR0Pjxjb2RlPi5zdHJpbmcgIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiIgWywuLi4sIjwvY29kZT48dmFyPnN0cmluZ19uPC92YXI+PGNvZGU+Il08L2NvZGU+PGR0Pjxjb2RlPi5wc3RyaW5nICI8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48Y29kZT4iIFssLi4uLCI8L2NvZGU+PHZhcj5zdHJpbmdfbjwvdmFyPjxjb2RlPiJdPC9jb2RlPjxkZD5QbGFjZSA4LWJpdCBjaGFyYWN0ZXJzIGZyb20gPHZhcj5zdHJpbmc8L3Zhcj4gaW50byB0aGUgY3VycmVudCBzZWN0aW9uLiAKKzxjb2RlPi5zdHJpbmc8L2NvZGU+IHplcm8tZmlsbHMgdGhlIHVwcGVyIDggYml0cyBvZiBlYWNoIHdvcmQsIHdoaWxlCis8Y29kZT4ucHN0cmluZzwvY29kZT4gcHV0cyB0d28gY2hhcmFjdGVycyBpbnRvIGVhY2ggd29yZCwgZmlsbGluZyB0aGUKK21vc3Qtc2lnbmlmaWNhbnQgYml0cyBmaXJzdC4gIFVudXNlZCBzcGFjZSBpcyB6ZXJvLWZpbGxlZC4gIElmIGEgbGFiZWwKK2lzIHVzZWQsIGl0IHBvaW50cyB0byB0aGUgZmlyc3Qgd29yZCBpbml0aWFsaXplZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0cnVjdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YWdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk1OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZW5kc3RydWN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NTkiPjwvYT48YnI+PGR0Pjxjb2RlPls8L2NvZGU+PHZhcj5zdGFnPC92YXI+PGNvZGU+XSAuc3RydWN0IFs8L2NvZGU+PHZhcj5vZmZzZXQ8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT5bPC9jb2RlPjx2YXI+bmFtZV8xPC92YXI+PGNvZGU+XSBlbGVtZW50IFs8L2NvZGU+PHZhcj5jb3VudF8xPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+WzwvY29kZT48dmFyPm5hbWVfMjwvdmFyPjxjb2RlPl0gZWxlbWVudCBbPC9jb2RlPjx2YXI+Y291bnRfMjwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPls8L2NvZGU+PHZhcj50bmFtZTwvdmFyPjxjb2RlPl0gLnRhZyA8L2NvZGU+PHZhcj5zdGFneDwvdmFyPjxjb2RlPiBbPC9jb2RlPjx2YXI+dGNvdW50PC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+Li4uPC9jb2RlPjxkdD48Y29kZT5bPC9jb2RlPjx2YXI+bmFtZV9uPC92YXI+PGNvZGU+XSBlbGVtZW50IFs8L2NvZGU+PHZhcj5jb3VudF9uPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+WzwvY29kZT48dmFyPnNzaXplPC92YXI+PGNvZGU+XSAuZW5kc3RydWN0PC9jb2RlPjxkdD48dmFyPmxhYmVsPC92YXI+PGNvZGU+IC50YWcgWzwvY29kZT48dmFyPnN0YWc8L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5Bc3NpZ24gc3ltYm9saWMgb2Zmc2V0cyB0byB0aGUgZWxlbWVudHMgb2YgYSBzdHJ1Y3R1cmUuICA8dmFyPnN0YWc8L3Zhcj4KK2RlZmluZXMgYSBzeW1ib2wgdG8gdXNlIHRvIHJlZmVyZW5jZSB0aGUgc3RydWN0dXJlLiAgPHZhcj5vZmZzZXQ8L3Zhcj4KK2luZGljYXRlcyBhIHN0YXJ0aW5nIHZhbHVlIHRvIHVzZSBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgZW5jb3VudGVyZWQ7CitvdGhlcndpc2UgaXQgZGVmYXVsdHMgdG8gemVyby4gIEVhY2ggZWxlbWVudCBjYW4gaGF2ZSBhIG5hbWVkIG9mZnNldCwKKzx2YXI+bmFtZTwvdmFyPiwgd2hpY2ggaXMgYSBzeW1ib2wgYXNzaWduZWQgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50J3Mgb2Zmc2V0CitpbnRvIHRoZSBzdHJ1Y3R1cmUuICBJZiA8dmFyPnN0YWc8L3Zhcj4gaXMgbWlzc2luZywgdGhlc2UgYmVjb21lIGdsb2JhbAorc3ltYm9scy4gIDx2YXI+Y291bnQ8L3Zhcj4gYWRqdXN0cyB0aGUgb2Zmc2V0IHRoYXQgbWFueSB0aW1lcywgYXMgaWYKKzxjb2RlPmVsZW1lbnQ8L2NvZGU+IHdlcmUgYW4gYXJyYXkuICA8Y29kZT5lbGVtZW50PC9jb2RlPiBtYXkgYmUgb25lIG9mCis8Y29kZT4uYnl0ZTwvY29kZT4sIDxjb2RlPi53b3JkPC9jb2RlPiwgPGNvZGU+Lmxvbmc8L2NvZGU+LCA8Y29kZT4uZmxvYXQ8L2NvZGU+LCBvciBhbnkKK2VxdWl2YWxlbnQgb2YgdGhvc2UsIGFuZCB0aGUgc3RydWN0dXJlIG9mZnNldCBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4gCis8Y29kZT4uZmllbGQ8L2NvZGU+IGFuZCA8Y29kZT4uc3RyaW5nPC9jb2RlPiBhcmUgYWxzbyBhbGxvd2VkOyB0aGUgc2l6ZSBvZgorPGNvZGU+LmZpZWxkPC9jb2RlPiBpcyBvbmUgYml0LCBhbmQgPGNvZGU+LnN0cmluZzwvY29kZT4gaXMgY29uc2lkZXJlZCB0byBiZSBvbmUKK3dvcmQgaW4gc2l6ZS4gIE9ubHkgZWxlbWVudCBkZXNjcmlwdG9ycywgc3RydWN0dXJlL3VuaW9uIHRhZ3MsCis8Y29kZT4uYWxpZ248L2NvZGU+IGFuZCBjb25kaXRpb25hbCBhc3NlbWJseSBkaXJlY3RpdmVzIGFyZSBhbGxvd2VkIHdpdGhpbgorPGNvZGU+LnN0cnVjdDwvY29kZT4vPGNvZGU+LmVuZHN0cnVjdDwvY29kZT4uICA8Y29kZT4uYWxpZ248L2NvZGU+IGFsaWducyBtZW1iZXIgb2Zmc2V0cwordG8gd29yZCBib3VuZGFyaWVzIG9ubHkuICA8dmFyPnNzaXplPC92YXI+LCBpZiBwcm92aWRlZCwgd2lsbCBhbHdheXMgYmUKK2Fzc2lnbmVkIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUuCisKKyAgICAgPHA+VGhlIDxjb2RlPi50YWc8L2NvZGU+IGRpcmVjdGl2ZSwgaW4gYWRkaXRpb24gdG8gYmVpbmcgdXNlZCB0byBkZWZpbmUgYQorc3RydWN0dXJlL3VuaW9uIGVsZW1lbnQgd2l0aGluIGEgc3RydWN0dXJlLCBtYXkgYmUgdXNlZCB0byBhcHBseSBhCitzdHJ1Y3R1cmUgdG8gYSBzeW1ib2wuICBPbmNlIGFwcGxpZWQgdG8gPHZhcj5sYWJlbDwvdmFyPiwgdGhlIGluZGl2aWR1YWwKK3N0cnVjdHVyZSBlbGVtZW50cyBtYXkgYmUgYXBwbGllZCB0byA8dmFyPmxhYmVsPC92YXI+IHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQKK29mZnNldHMgdXNpbmcgPHZhcj5sYWJlbDwvdmFyPiBhcyB0aGUgc3RydWN0dXJlIGJhc2UuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YWJfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk2MCI+PC9hPjxicj48ZHQ+PGNvZGU+LnRhYjwvY29kZT48ZGQ+U2V0IHRoZSB0YWIgc2l6ZSBpbiB0aGUgb3V0cHV0IGxpc3RpbmcuICBJZ25vcmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidW5pb25fMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM1NFgtMTk2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFnXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NjIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVuZHVuaW9uXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NjMiPjwvYT48YnI+PGR0Pjxjb2RlPls8L2NvZGU+PHZhcj51dGFnPC92YXI+PGNvZGU+XSAudW5pb248L2NvZGU+PGR0Pjxjb2RlPls8L2NvZGU+PHZhcj5uYW1lXzE8L3Zhcj48Y29kZT5dIGVsZW1lbnQgWzwvY29kZT48dmFyPmNvdW50XzE8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT5bPC9jb2RlPjx2YXI+bmFtZV8yPC92YXI+PGNvZGU+XSBlbGVtZW50IFs8L2NvZGU+PHZhcj5jb3VudF8yPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+WzwvY29kZT48dmFyPnRuYW1lPC92YXI+PGNvZGU+XSAudGFnIDwvY29kZT48dmFyPnV0YWd4PC92YXI+PGNvZGU+Wyw8L2NvZGU+PHZhcj50Y291bnQ8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4uLi48L2NvZGU+PGR0Pjxjb2RlPls8L2NvZGU+PHZhcj5uYW1lX248L3Zhcj48Y29kZT5dIGVsZW1lbnQgWzwvY29kZT48dmFyPmNvdW50X248L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT5bPC9jb2RlPjx2YXI+dXNpemU8L3Zhcj48Y29kZT5dIC5lbmRzdHJ1Y3Q8L2NvZGU+PGR0Pjx2YXI+bGFiZWw8L3Zhcj48Y29kZT4gLnRhZyBbPC9jb2RlPjx2YXI+dXRhZzwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPlNpbWlsYXIgdG8gPGNvZGU+LnN0cnVjdDwvY29kZT4sIGJ1dCB0aGUgb2Zmc2V0IGFmdGVyIGVhY2ggZWxlbWVudCBpcyByZXNldCB0bworemVybywgYW5kIHRoZSA8dmFyPnVzaXplPC92YXI+IGlzIHNldCB0byB0aGUgbWF4aW11bSBvZiBhbGwgZGVmaW5lZCBlbGVtZW50cy4gCitTdGFydGluZyBvZmZzZXQgZm9yIHRoZSB1bmlvbiBpcyBhbHdheXMgemVyby4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVzZWN0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NjQiPjwvYT48YnI+PGR0Pjxjb2RlPls8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT5dIC51c2VjdCAiPC9jb2RlPjx2YXI+c2VjdGlvbl9uYW1lPC92YXI+PGNvZGU+IiwgPC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxjb2RlPiwgWyxbPC9jb2RlPjx2YXI+YmxvY2tpbmdfZmxhZzwvdmFyPjxjb2RlPl0gWyw8L2NvZGU+PHZhcj5hbGlnbm1lbnRfZmxhZzwvdmFyPjxjb2RlPl1dPC9jb2RlPjxkZD5SZXNlcnZlIHNwYWNlIGZvciB2YXJpYWJsZXMgaW4gYSBuYW1lZCwgdW5pbml0aWFsaXplZCBzZWN0aW9uIChzaW1pbGFyIHRvCisuYnNzKS4gIDxjb2RlPi51c2VjdDwvY29kZT4gYWxsb3dzIGRlZmluaXRpb25zIHNlY3Rpb25zIGluZGVwZW5kZW50IG9mIC5ic3MuIAorPHZhcj5zeW1ib2w8L3Zhcj4gcG9pbnRzIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiByZXNlcnZlZCBieSB0aGlzIGFsbG9jYXRpb24uIAorVGhlIHN5bWJvbCBtYXkgYmUgdXNlZCBhcyBhIHZhcmlhYmxlIG5hbWUuICA8dmFyPnNpemU8L3Zhcj4gaXMgdGhlIGFsbG9jYXRlZAorc2l6ZSBpbiB3b3Jkcy4gIDx2YXI+YmxvY2tpbmdfZmxhZzwvdmFyPiBpbmRpY2F0ZXMgd2hldGhlciB0byBibG9jayB0aGlzCitzZWN0aW9uIG9uIGEgcGFnZSBib3VuZGFyeSAoMTI4IHdvcmRzKSAoc2VlIDxhIGhyZWY9IlRJQzU0WF8wMDJkQmxvY2suaHRtbCNUSUM1NFhfMDAyZEJsb2NrIj5USUM1NFgtQmxvY2s8L2E+KS4gCis8dmFyPmFsaWdubWVudCBmbGFnPC92YXI+IGluZGljYXRlcyB3aGV0aGVyIHRoZSBzZWN0aW9uIHNob3VsZCBiZQorbG9uZ3dvcmQtYWxpZ25lZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnZhcl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzU0WC0xOTY1Ij48L2E+PGJyPjxkdD48Y29kZT4udmFyIDwvY29kZT48dmFyPnN5bTwvdmFyPjxjb2RlPlssLi4uLCA8L2NvZGU+PHZhcj5zeW1fbjwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPkRlZmluZSBhIHN1YnN5bSB0byBiZSBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbiBhIG1hY3JvLiAgU2VlCitTZWUgPGEgaHJlZj0iVElDNTRYXzAwMmRNYWNyb3MuaHRtbCNUSUM1NFhfMDAyZE1hY3JvcyI+VElDNTRYLU1hY3JvczwvYT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J2ZXJzaW9uXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNTRYLTE5NjYiPjwvYT48YnI+PGR0Pjxjb2RlPi52ZXJzaW9uIDwvY29kZT48dmFyPnZlcnNpb248L3Zhcj48ZGQ+U2V0IHdoaWNoIHByb2Nlc3NvciB0byBidWlsZCBpbnN0cnVjdGlvbnMgZm9yLiAgVGhvdWdoIHRoZSBmb2xsb3dpbmcKK3ZhbHVlcyBhcmUgYWNjZXB0ZWQsIHRoZSBvcCBpcyBpZ25vcmVkLgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT41NDE8L2NvZGU+PGR0Pjxjb2RlPjU0MjwvY29kZT48ZHQ+PGNvZGU+NTQzPC9jb2RlPjxkdD48Y29kZT41NDU8L2NvZGU+PGR0Pjxjb2RlPjU0NUxQPC9jb2RlPjxkdD48Y29kZT41NDZMUDwvY29kZT48ZHQ+PGNvZGU+NTQ4PC9jb2RlPjxkdD48Y29kZT41NDk8L2NvZGU+PGRkPjwvZGw+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkRW52Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZEVudi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NmUxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZEVudi5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJQzU0WC1FbnYgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUM1NFgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElDNTRYXzAwMmRCbG9jay5odG1sI1RJQzU0WF8wMDJkQmxvY2siIHRpdGxlPSJUSUM1NFgtQmxvY2siPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUM1NFhfMDAyZENvbnN0YW50cy5odG1sI1RJQzU0WF8wMDJkQ29uc3RhbnRzIiB0aXRsZT0iVElDNTRYLUNvbnN0YW50cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJQzU0WC1FbnYiPjwvYT4KKzxhIG5hbWU9IlRJQzU0WF8wMDJkRW52Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJQzU0WF8wMDJkQ29uc3RhbnRzLmh0bWwjVElDNTRYXzAwMmRDb25zdGFudHMiPlRJQzU0WC1Db25zdGFudHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSUM1NFhfMDAyZEJsb2NrLmh0bWwjVElDNTRYXzAwMmRCbG9jayI+VElDNTRYLUJsb2NrPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDAuMyBFbnZpcm9ubWVudCBTZXR0aW5nczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWVudmlyb25tZW50LXNldHRpbmdzXzAwMmMtVElDNTRYLTE4NTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3YkFfMDA1ZkRJUl8wMDdkLWVudmlyb25tZW50LXZhcmlhYmxlXzAwMmMtVElDNTRYLTE4NTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3YkM1NFhEU1BfMDA1ZkRJUl8wMDdkLWVudmlyb25tZW50LXZhcmlhYmxlXzAwMmMtVElDNTRYLTE4NTUiPjwvYT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkM1NFhEU1BfRElSPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkFfRElSPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBzZW1pY29sb24tc2VwYXJhdGVkCitwYXRocyB3aGljaCBhcmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgbm9ybWFsbHkgc2VhcmNoZWQgZm9yCitzb3VyY2UgYW5kIGluY2x1ZGUgZmlsZXMuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkM1NFhEU1BfRElSPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgb3ZlcnJpZGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5BX0RJUjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRFeHQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkRXh0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyZmJjMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkRXh0Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElDNTRYLUV4dCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJQzU0WC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyIgdGl0bGU9IlRJQzU0WC1CdWlsdGlucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyIgdGl0bGU9IlRJQzU0WC1EaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNTRYLUV4dCI+PC9hPgorPGEgbmFtZT0iVElDNTRYXzAwMmRFeHQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj5USUM1NFgtRGlyZWN0aXZlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJQzU0WF8wMDJkQnVpbHRpbnMuaHRtbCNUSUM1NFhfMDAyZEJ1aWx0aW5zIj5USUM1NFgtQnVpbHRpbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUSUM1NFhfMDAyZERlcGVuZGVudC5odG1sI1RJQzU0WF8wMDJkRGVwZW5kZW50Ij5USUM1NFgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40MC44IEV4dGVuZGVkIEFkZHJlc3Npbmc8L2g0PgorCis8cD5UaGUgPGNvZGU+TERYPC9jb2RlPiBwc2V1ZG8tb3AgaXMgcHJvdmlkZWQgZm9yIGxvYWRpbmcgdGhlIGV4dGVuZGVkIGFkZHJlc3NpbmcgYml0cworb2YgYSBsYWJlbCBvciBhZGRyZXNzLiAgRm9yIGV4YW1wbGUsIGlmIGFuIGFkZHJlc3MgPGNvZGU+X2xhYmVsPC9jb2RlPiByZXNpZGVzCitpbiBleHRlbmRlZCBwcm9ncmFtIG1lbW9yeSwgdGhlIHZhbHVlIG9mIDxjb2RlPl9sYWJlbDwvY29kZT4gbWF5IGJlIGxvYWRlZCBhcworZm9sbG93czoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgbGR4ICAgICAjX2xhYmVsLDE2LGEgICAgOyBsb2FkcyBleHRlbmRlZCBiaXRzIG9mIF9sYWJlbAorICAgICAgb3IgICAgICAjX2xhYmVsLGEgICAgICAgOyBsb2FkcyBsb3dlciAxNiBiaXRzIG9mIF9sYWJlbAorICAgICAgYmFjYyAgICBhICAgICAgICAgICAgICAgOyBmdWxsIGFkZHJlc3MgaXMgaW4gYWNjdW11bGF0b3IgQQorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZExvY2Fscy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRMb2NhbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjAxNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRMb2NhbHMuaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUM1NFgtTG9jYWxzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUM1NFhfMDAyZERlcGVuZGVudC5odG1sI1RJQzU0WF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElDNTRYLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJQzU0WF8wMDJkU3Vic3ltcy5odG1sI1RJQzU0WF8wMDJkU3Vic3ltcyIgdGl0bGU9IlRJQzU0WC1TdWJzeW1zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVElDNTRYXzAwMmRCdWlsdGlucy5odG1sI1RJQzU0WF8wMDJkQnVpbHRpbnMiIHRpdGxlPSJUSUM1NFgtQnVpbHRpbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUM1NFgtTG9jYWxzIj48L2E+Cis8YSBuYW1lPSJUSUM1NFhfMDAyZExvY2FscyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+VElDNTRYLUJ1aWx0aW5zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElDNTRYXzAwMmRTdWJzeW1zLmh0bWwjVElDNTRYXzAwMmRTdWJzeW1zIj5USUM1NFgtU3Vic3ltczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiPlRJQzU0WC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQwLjYgTG9jYWwgTGFiZWxzPC9oND4KKworPHA+TG9jYWwgbGFiZWxzIG1heSBiZSBkZWZpbmVkIGluIHR3byB3YXlzOgorCisgICAgIDx1bD4KKzxsaT4kTiwgd2hlcmUgTiBpcyBhIGRlY2ltYWwgbnVtYmVyIGJldHdlZW4gMCBhbmQgOQorPGxpPkxBQkVMPywgd2hlcmUgTEFCRUwgaXMgYW55IGxlZ2FsIHN5bWJvbCBuYW1lLiAKKzwvdWw+CisKKyAgIDxwPkxvY2FsIGxhYmVscyB0aHVzIGRlZmluZWQgbWF5IGJlIHJlZGVmaW5lZCBvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gCitUaGUgc2NvcGUgb2YgYSBsb2NhbCBsYWJlbCBpcyBiYXNlZCBvbiB3aGVuIGl0IG1heSBiZSB1bmRlZmluZWQgb3IgcmVzZXQuIAorVGhpcyBoYXBwZW5zIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9ucyBpcyBlbmNvdW50ZXJlZDoKKworICAgICA8dWw+Cis8bGk+Lm5ld2Jsb2NrIGRpcmVjdGl2ZSBzZWUgPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj48Y29kZT4ubmV3YmxvY2s8L2NvZGU+PC9hPgorPGxpPlRoZSBjdXJyZW50IHNlY3Rpb24gaXMgY2hhbmdlZCAoLnNlY3QsIC50ZXh0LCBvciAuZGF0YSkKKzxsaT5FbnRlcmluZyBvciBsZWF2aW5nIGFuIGluY2x1ZGVkIGZpbGUKKzxsaT5UaGUgbWFjcm8gc2NvcGUgd2hlcmUgdGhlIGxhYmVsIHdhcyBkZWZpbmVkIGlzIGV4aXRlZAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRNTVJlZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkTU1SZWdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzZWUxZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkTU1SZWdzLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElDNTRYLU1NUmVncyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJQzU0WC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI1RJQzU0WF8wMDJkTWFjcm9zIiB0aXRsZT0iVElDNTRYLU1hY3JvcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJQzU0WF8wMDJkU3ludGF4Lmh0bWwjVElDNTRYXzAwMmRTeW50YXgiIHRpdGxlPSJUSUM1NFgtU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNTRYLU1NUmVncyI+PC9hPgorPGEgbmFtZT0iVElDNTRYXzAwMmRNTVJlZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElDNTRYXzAwMmRTeW50YXguaHRtbCNUSUM1NFhfMDAyZFN5bnRheCI+VElDNTRYLVN5bnRheDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJQzU0WF8wMDJkTWFjcm9zLmh0bWwjVElDNTRYXzAwMmRNYWNyb3MiPlRJQzU0WC1NYWNyb3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUSUM1NFhfMDAyZERlcGVuZGVudC5odG1sI1RJQzU0WF8wMDJkRGVwZW5kZW50Ij5USUM1NFgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40MC4xMSBNZW1vcnktbWFwcGVkIFJlZ2lzdGVyczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJQzU0WC1tZW1vcnlfMDAyZG1hcHBlZC1yZWdpc3RlcnMtMTk4MyI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyc18wMDJjLVRJQzU0WC1tZW1vcnlfMDAyZG1hcHBlZC0xOTg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWVtb3J5XzAwMmRtYXBwZWQtcmVnaXN0ZXJzXzAwMmMtVElDNTRYLTE5ODUiPjwvYT5UaGUgZm9sbG93aW5nIHN5bWJvbHMgYXJlIHJlY29nbml6ZWQgYXMgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnM6CisKKyAgICAgPGRsPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRNYWNyb3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkTWFjcm9zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwOWZkNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkTWFjcm9zLmh0bWwKQEAgLTAsMCArMSwxMDAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJQzU0WC1NYWNyb3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUM1NFgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIiB0aXRsZT0iVElDNTRYLURpcmVjdGl2ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUM1NFhfMDAyZE1NUmVncy5odG1sI1RJQzU0WF8wMDJkTU1SZWdzIiB0aXRsZT0iVElDNTRYLU1NUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJQzU0WC1NYWNyb3MiPjwvYT4KKzxhIG5hbWU9IlRJQzU0WF8wMDJkTWFjcm9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJQzU0WF8wMDJkTU1SZWdzLmh0bWwjVElDNTRYXzAwMmRNTVJlZ3MiPlRJQzU0WC1NTVJlZ3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSUM1NFhfMDAyZERpcmVjdGl2ZXMuaHRtbCNUSUM1NFhfMDAyZERpcmVjdGl2ZXMiPlRJQzU0WC1EaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDAuMTAgTWFjcm9zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtVElDNTRYXzAwMmRzcGVjaWZpYy1tYWNyb3MtMTk2NyI+PC9hPjxhIG5hbWU9ImluZGV4LW1hY3Jvc18wMDJjLVRJQzU0WC0xOTY4Ij48L2E+TWFjcm9zIGRvIG5vdCByZXF1aXJlIGV4cGxpY2l0IGRlcmVmZXJlbmNpbmcgb2YgYXJndW1lbnRzIChpLmUuLCBcQVJHKS4KKworICAgPHA+RHVyaW5nIG1hY3JvIGV4cGFuc2lvbiwgdGhlIG1hY3JvIHBhcmFtZXRlcnMgYXJlIGNvbnZlcnRlZCB0byBzdWJzeW1zLiAKK0lmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0aGUgbWFjcm8gaW52b2NhdGlvbiBleGNlZWRzIHRoZQorbnVtYmVyIG9mIHBhcmFtZXRlcnMgZGVmaW5lZCwgdGhlIGxhc3QgcGFyYW1ldGVyIGlzIGFzc2lnbmVkIHRoZSBzdHJpbmcKK2VxdWl2YWxlbnQgb2YgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMuICBJZiBmZXdlciBhcmd1bWVudHMgYXJlIGdpdmVuCit0aGFuIHBhcmFtZXRlcnMsIHRoZSBtaXNzaW5nIHBhcmFtZXRlcnMgYXJlIGFzc2lnbmVkIGVtcHR5IHN0cmluZ3MuICBUbworaW5jbHVkZSBhIGNvbW1hIGluIGFuIGFyZ3VtZW50LCB5b3UgbXVzdCBlbmNsb3NlIHRoZSBhcmd1bWVudCBpbiBxdW90ZXMuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXN1YnN5bS1idWlsdGluc18wMDJjLVRJQzU0WC0xOTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtVElDNTRYLXN1YnN5bS1idWlsdGlucy0xOTcwIj48L2E+PGEgbmFtZT0iaW5kZXgtYnVpbHRpbi1zdWJzeW0tZnVuY3Rpb25zXzAwMmMtVElDNTRYLTE5NzEiPjwvYT5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIHN1YnN5bSBmdW5jdGlvbnMgYWxsb3cgZXhhbWluYXRpb24gb2YgdGhlIHN0cmluZwordmFsdWUgb2Ygc3Vic3ltcyAob3Igb3JkaW5hcnkgc3RyaW5ncykuICBUaGUgYXJndW1lbnRzIGFyZSBzdHJpbmdzCit1bmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCAoc3Vic3ltcyBwYXNzZWQgYXMgYXJncyB3aWxsIGJlIHJlcGxhY2VkIGJ5Cit0aGUgc3RyaW5ncyB0aGV5IHJlcHJlc2VudCkuCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHN5bWxlbl8wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5NzIiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+JHN5bWxlbig8L2NvZGU+PHZhcj5zdHI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBsZW5ndGggb2YgPHZhcj5zdHI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHN5bWNtcF8wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5NzMiPjwvYT48YnI+PGR0Pjxjb2RlPiRzeW1jbXAoPC9jb2RlPjx2YXI+c3RyMTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5zdHIyPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyAwIGlmIDx2YXI+c3RyMTwvdmFyPiA9PSA8dmFyPnN0cjI8L3Zhcj4sIG5vbi16ZXJvIG90aGVyd2lzZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0Zmlyc3RjaF8wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5NzQiPjwvYT48YnI+PGR0Pjxjb2RlPiRmaXJzdGNoKDwvY29kZT48dmFyPnN0cjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jaDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgY2hhcmFjdGVyIGNvbnN0YW50IDx2YXI+Y2g8L3Zhcj4gaW4KKzx2YXI+c3RyPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRsYXN0Y2hfMDA3ZC1zdWJzeW0tYnVpbHRpbl8wMDJjLVRJQzU0WC0xOTc1Ij48L2E+PGJyPjxkdD48Y29kZT4kbGFzdGNoKDwvY29kZT48dmFyPnN0cjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jaDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlJldHVybnMgaW5kZXggb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBjaGFyYWN0ZXIgY29uc3RhbnQgPHZhcj5jaDwvdmFyPiBpbgorPHZhcj5zdHI8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNGlzZGVmZWRfMDA3ZC1zdWJzeW0tYnVpbHRpbl8wMDJjLVRJQzU0WC0xOTc2Ij48L2E+PGJyPjxkdD48Y29kZT4kaXNkZWZlZCg8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHplcm8gaWYgdGhlIHN5bWJvbCA8dmFyPnN5bWJvbDwvdmFyPiBpcyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKK25vbi16ZXJvIG90aGVyd2lzZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0aXNtZW1iZXJfMDA3ZC1zdWJzeW0tYnVpbHRpbl8wMDJjLVRJQzU0WC0xOTc3Ij48L2E+PGJyPjxkdD48Y29kZT4kaXNtZW1iZXIoPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmxpc3Q8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5Bc3NpZ24gdGhlIGZpcnN0IG1lbWJlciBvZiBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIDx2YXI+bGlzdDwvdmFyPiB0bworPHZhcj5zeW1ib2w8L3Zhcj47IDx2YXI+bGlzdDwvdmFyPiBpcyByZWFzc2lnbmVkIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpc3QuICBSZXR1cm5zCit6ZXJvIGlmIDx2YXI+bGlzdDwvdmFyPiBpcyBhIG51bGwgc3RyaW5nLiAgQm90aCBhcmd1bWVudHMgbXVzdCBiZSBzdWJzeW1zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRpc2NvbnNfMDA3ZC1zdWJzeW0tYnVpbHRpbl8wMDJjLVRJQzU0WC0xOTc4Ij48L2E+PGJyPjxkdD48Y29kZT4kaXNjb25zKDwvY29kZT48dmFyPmV4cHI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIDEgaWYgc3RyaW5nIDx2YXI+ZXhwcjwvdmFyPiBpcyBiaW5hcnksIDIgaWYgb2N0YWwsIDMgaWYgaGV4YWRlY2ltYWwsCis0IGlmIGEgY2hhcmFjdGVyLCA1IGlmIGRlY2ltYWwsIGFuZCB6ZXJvIGlmIG5vdCBhbiBpbnRlZ2VyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRpc25hbWVfMDA3ZC1zdWJzeW0tYnVpbHRpbl8wMDJjLVRJQzU0WC0xOTc5Ij48L2E+PGJyPjxkdD48Y29kZT4kaXNuYW1lKDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIDEgaWYgPHZhcj5uYW1lPC92YXI+IGlzIGEgdmFsaWQgc3ltYm9sIG5hbWUsIHplcm8gb3RoZXJ3aXNlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRpc3JlZ18wMDdkLXN1YnN5bS1idWlsdGluXzAwMmMtVElDNTRYLTE5ODAiPjwvYT48YnI+PGR0Pjxjb2RlPiRpc3JlZyg8L2NvZGU+PHZhcj5yZWc8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIDEgaWYgPHZhcj5yZWc8L3Zhcj4gaXMgYSB2YWxpZCBwcmVkZWZpbmVkIHJlZ2lzdGVyIG5hbWUgKEFSMC1BUjcgb25seSkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNHN0cnVjdHN6XzAwN2Qtc3Vic3ltLWJ1aWx0aW5fMDAyYy1USUM1NFgtMTk4MSI+PC9hPjxicj48ZHQ+PGNvZGU+JHN0cnVjdHN6KDwvY29kZT48dmFyPnN0YWc8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgb3IgdW5pb24gcmVwcmVzZW50ZWQgYnkgPHZhcj5zdGFnPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRzdHJ1Y3RhY2NfMDA3ZC1zdWJzeW0tYnVpbHRpbl8wMDJjLVRJQzU0WC0xOTgyIj48L2E+PGJyPjxkdD48Y29kZT4kc3RydWN0YWNjKDwvY29kZT48dmFyPnN0YWc8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSByZWZlcmVuY2UgcG9pbnQgb2YgdGhlIHN0cnVjdHVyZSBvciB1bmlvbiByZXByZXNlbnRlZCBieQorPHZhcj5zdGFnPC92YXI+LiAgIEFsd2F5cyByZXR1cm5zIHplcm8uCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkT3B0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiZjM1NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkT3B0cy5odG1sCkBAIC0wLDAgKzEsNzIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJQzU0WC1PcHRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUM1NFhfMDAyZERlcGVuZGVudC5odG1sI1RJQzU0WF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElDNTRYLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJQzU0WF8wMDJkQmxvY2suaHRtbCNUSUM1NFhfMDAyZEJsb2NrIiB0aXRsZT0iVElDNTRYLUJsb2NrIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNTRYLU9wdHMiPjwvYT4KKzxhIG5hbWU9IlRJQzU0WF8wMDJkT3B0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUM1NFhfMDAyZEJsb2NrLmh0bWwjVElDNTRYXzAwMmRCbG9jayI+VElDNTRYLUJsb2NrPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDAuMSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLVRJQzU0WC0xODQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtVElDNTRYLW9wdGlvbnMtMTg0NyI+PC9hPlRoZSBUTVMzMjBDNTRYIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IGhhcyBhIGZldyBtYWNoaW5lLWRlcGVuZGVudCBvcHRpb25zLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWZhcl8wMDJkbW9kZV8wMDdkLW9wdGlvbl8wMDJjLWZhcl8wMDJkbW9kZS0xODQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1mXzAwN2Qtb3B0aW9uXzAwMmMtZmFyXzAwMmRtb2RlLTE4NDkiPjwvYT5Zb3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWZhci1tb2RlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0byBlbmFibGUgZXh0ZW5kZWQgYWRkcmVzc2luZyBtb2RlLiAKK0FsbCBhZGRyZXNzZXMgd2lsbCBiZSBhc3N1bWVkIHRvIGJlICZndDsgMTYgYml0cywgYW5kIHRoZSBhcHByb3ByaWF0ZQorcmVsb2NhdGlvbiB0eXBlcyB3aWxsIGJlIHVzZWQuICBUaGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZmFyX21vZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIGluIHRoZSBhc3NlbWJseSBjb2RlLiAgSWYgeW91IGRvIG5vdCB1c2UgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tZmFyLW1vZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBhbGwgcmVmZXJlbmNlcyB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgMTYgYml0cy4gCitUaGlzIG9wdGlvbiBtYXkgYmUgYWJicmV2aWF0ZWQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtY3B1XzAwN2Qtb3B0aW9uXzAwMmMtY3B1LTE4NTAiPjwvYT5Zb3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWNwdTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgQ1BVLiAKK1RoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdXNpbmcgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnZlcnNpb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIGluIHRoZQorYXNzZW1ibHkgY29kZS4gIEZvciByZWNvZ25pemVkIENQVSBjb2Rlcywgc2VlCitTZWUgPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj48Y29kZT4udmVyc2lvbjwvY29kZT48L2E+LiAgVGhlIGRlZmF1bHQgQ1BVIHZlcnNpb24gaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTQyPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWVycm9yc18wMDJkdG9fMDAyZGZpbGVfMDA3ZC1vcHRpb25fMDAyYy1zdGRlcnItcmVkaXJlY3QtMTg1MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtZV8wMDdkLW9wdGlvbl8wMDJjLXN0ZGVyci1yZWRpcmVjdC0xODUyIj48L2E+WW91IGNhbiB1c2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1lcnJvcnMtdG8tZmlsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gcmVkaXJlY3QgZXJyb3Igb3V0cHV0Cit0byBhIGZpbGUgKHRoaXMgcHJvdmlkZWQgZm9yIHRob3NlIGRlZmljaWVudCBlbnZpcm9ubWVudHMgd2hpY2ggZG9uJ3QKK3Byb3ZpZGUgYWRlcXVhdGUgb3V0cHV0IHJlZGlyZWN0aW9uKS4gIFRoaXMgb3B0aW9uIG1heSBiZSBhYmJyZXZpYXRlZCB0bworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbWU8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkU3Vic3ltcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRTdWJzeW1zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2ZmQ1YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzU0WF8wMDJkU3Vic3ltcy5odG1sCkBAIC0wLDAgKzEsMTAyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUM1NFgtU3Vic3ltcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJQzU0WC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSUM1NFhfMDAyZENvbnN0YW50cy5odG1sI1RJQzU0WF8wMDJkQ29uc3RhbnRzIiB0aXRsZT0iVElDNTRYLUNvbnN0YW50cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJQzU0WF8wMDJkTG9jYWxzLmh0bWwjVElDNTRYXzAwMmRMb2NhbHMiIHRpdGxlPSJUSUM1NFgtTG9jYWxzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNTRYLVN1YnN5bXMiPjwvYT4KKzxhIG5hbWU9IlRJQzU0WF8wMDJkU3Vic3ltcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUM1NFhfMDAyZExvY2Fscy5odG1sI1RJQzU0WF8wMDJkTG9jYWxzIj5USUM1NFgtTG9jYWxzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElDNTRYXzAwMmRDb25zdGFudHMuaHRtbCNUSUM1NFhfMDAyZENvbnN0YW50cyI+VElDNTRYLUNvbnN0YW50czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiPlRJQzU0WC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQwLjUgU3RyaW5nIFN1YnN0aXR1dGlvbjwvaDQ+CisKKzxwPkEgc3Vic2V0IG9mIGFsbG93YWJsZSBzeW1ib2xzICh3aGljaCB3ZSdsbCBjYWxsIHN1YnN5bXMpIG1heSBiZSBhc3NpZ25lZAorYXJiaXRyYXJ5IHN0cmluZyB2YWx1ZXMuICBUaGlzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBDIHByZXByb2Nlc3NvcgorI2RlZmluZSBtYWNyb3MuICBXaGVuIDxjb2RlPmFzPC9jb2RlPiBlbmNvdW50ZXJzIG9uZSBvZiB0aGVzZQorc3ltYm9scywgdGhlIHN5bWJvbCBpcyByZXBsYWNlZCBpbiB0aGUgaW5wdXQgc3RyZWFtIGJ5IGl0cyBzdHJpbmcgdmFsdWUuIAorU3Vic3ltIG5hbWVzIDxzdHJvbmc+bXVzdDwvc3Ryb25nPiBiZWdpbiB3aXRoIGEgbGV0dGVyLgorCisgICA8cD5TdWJzeW1zIG1heSBiZSBkZWZpbmVkIHVzaW5nIHRoZSA8Y29kZT4uYXNnPC9jb2RlPiBhbmQgPGNvZGU+LmV2YWw8L2NvZGU+IGRpcmVjdGl2ZXMKKyhTZWUgPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj48Y29kZT4uYXNnPC9jb2RlPjwvYT4sCitTZWUgPGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj48Y29kZT4uZXZhbDwvY29kZT48L2E+LgorCisgICA8cD5FeHBhbnNpb24gaXMgcmVjdXJzaXZlIHVudGlsIGEgcHJldmlvdXNseSBlbmNvdW50ZXJlZCBzeW1ib2wgaXMgc2VlbiwgYXQKK3doaWNoIHBvaW50IHN1YnN0aXR1dGlvbiBzdG9wcy4KKworICAgPHA+SW4gdGhpcyBleGFtcGxlLCB4IGlzIHJlcGxhY2VkIHdpdGggU1lNMjsgU1lNMiBpcyByZXBsYWNlZCB3aXRoIFNZTTEsIGFuZCBTWU0xCitpcyByZXBsYWNlZCB3aXRoIHguICBBdCB0aGlzIHBvaW50LCB4IGhhcyBhbHJlYWR5IGJlZW4gZW5jb3VudGVyZWQKK2FuZCB0aGUgc3Vic3RpdHV0aW9uIHN0b3BzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIC5hc2cgICAieCIsU1lNMQorICAgICAgLmFzZyAgICJTWU0xIixTWU0yCisgICAgICAuYXNnICAgIlNZTTIiLHgKKyAgICAgIGFkZCAgICB4LGEgICAgICAgICAgICAgOyBmaW5hbCBjb2RlIGFzc2VtYmxlZCBpcyAiYWRkICB4LCBhIgorPC9wcmU+CisgICA8cD5NYWNybyBwYXJhbWV0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gc3Vic3ltczsgYSBzaWRlIGVmZmVjdCBvZiB0aGlzIGlzIHRoZSBub3JtYWwKKzxjb2RlPmFzPC9jb2RlPiAnXEFSRycgZGVyZWZlcmVuY2luZyBzeW50YXggaXMgdW5uZWNlc3NhcnkuICBTdWJzeW1zCitkZWZpbmVkIHdpdGhpbiBhIG1hY3JvIHdpbGwgaGF2ZSBnbG9iYWwgc2NvcGUsIHVubGVzcyB0aGUgPGNvZGU+LnZhcjwvY29kZT4KK2RpcmVjdGl2ZSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzdWJzeW0gYXMgYSBsb2NhbCBtYWNybyB2YXJpYWJsZQorc2VlIDxhIGhyZWY9IlRJQzU0WF8wMDJkRGlyZWN0aXZlcy5odG1sI1RJQzU0WF8wMDJkRGlyZWN0aXZlcyI+PGNvZGU+LnZhcjwvY29kZT48L2E+LgorCisgICA8cD5TdWJzdGl0dXRpb24gbWF5IGJlIGZvcmNlZCBpbiBzaXR1YXRpb25zIHdoZXJlIHJlcGxhY2VtZW50IG1pZ2h0IGJlCithbWJpZ3VvdXMgYnkgcGxhY2luZyBjb2xvbnMgb24gZWl0aGVyIHNpZGUgb2YgdGhlIHN1YnN5bS4gIFRoZSBmb2xsb3dpbmcKK2NvZGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgLmV2YWwgICIxMCIseAorICAgICBMQUI6WDogIGFkZCAgICAgI3gsIGEKKzwvcHJlPgorICAgPHA+V2hlbiBhc3NlbWJsZWQgYmVjb21lczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIExBQjEwICBhZGQgICAgICMxMCwgYQorPC9wcmU+CisgICA8cD5TbWFsbGVyIHBhcnRzIG9mIHRoZSBzdHJpbmcgYXNzaWduZWQgdG8gYSBzdWJzeW0gbWF5IGJlIGFjY2Vzc2VkIHdpdGgKK3RoZSBmb2xsb3dpbmcgc3ludGF4OgorCisgICAgIDxkbD4KKzxkdD48Y29kZT46PC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+KDwvY29kZT48dmFyPmNoYXJfaW5kZXg8L3Zhcj48Y29kZT4pOjwvY29kZT48ZGQ+RXZhbHVhdGVzIHRvIGEgc2luZ2xlLWNoYXJhY3RlciBzdHJpbmcsIHRoZSBjaGFyYWN0ZXIgYXQgPHZhcj5jaGFyX2luZGV4PC92YXI+LiAKKzxicj48ZHQ+PGNvZGU+OjwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPig8L2NvZGU+PHZhcj5zdGFydDwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5sZW5ndGg8L3Zhcj48Y29kZT4pOjwvY29kZT48ZGQ+RXZhbHVhdGVzIHRvIGEgc3Vic3RyaW5nIG9mIDx2YXI+c3ltYm9sPC92YXI+IGJlZ2lubmluZyBhdCA8dmFyPnN0YXJ0PC92YXI+IHdpdGgKK2xlbmd0aCA8dmFyPmxlbmd0aDwvdmFyPi4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM1NFhfMDAyZFN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRTeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmQ4YzcwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNTRYXzAwMmRTeW50YXguaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUM1NFgtU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUM1NFhfMDAyZERlcGVuZGVudC5odG1sI1RJQzU0WF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElDNTRYLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJQzU0WF8wMDJkTU1SZWdzLmh0bWwjVElDNTRYXzAwMmRNTVJlZ3MiIHRpdGxlPSJUSUM1NFgtTU1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNTRYLVN5bnRheCI+PC9hPgorPGEgbmFtZT0iVElDNTRYXzAwMmRTeW50YXgiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSUM1NFhfMDAyZE1NUmVncy5odG1sI1RJQzU0WF8wMDJkTU1SZWdzIj5USUM1NFgtTU1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCI+VElDNTRYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDAuMTIgVElDNTRYIFN5bnRheDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJUSUM1NFhfMDAyZENoYXJzLmh0bWwjVElDNTRYXzAwMmRDaGFycyI+VElDNTRYLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNlgtRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNlgtRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNGM4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM2WC1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSwxMTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJQzZYIERpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRJQzZYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM2WF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElDNlgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElDNlgtU3ludGF4Lmh0bWwjVElDNlgtU3ludGF4IiB0aXRsZT0iVElDNlggU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNlgtRGlyZWN0aXZlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJQzZYLVN5bnRheC5odG1sI1RJQzZYLVN5bnRheCI+VElDNlggU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI1RJQzZYXzAwMmREZXBlbmRlbnQiPlRJQzZYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDEuMyBUSUM2WCBEaXJlY3RpdmVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWFjaGluZS1kaXJlY3RpdmVzXzAwMmMtVElDNlgtMjAxMCI+PC9hPjxhIG5hbWU9ImluZGV4LVRJQzZYLW1hY2hpbmUtZGlyZWN0aXZlcy0yMDExIj48L2E+CitEaXJlY3RpdmVzIGNvbnRyb2xsaW5nIHRoZSBzZXQgb2YgaW5zdHJ1Y3Rpb25zIGFjY2VwdGVkIGJ5IHRoZQorYXNzZW1ibGVyIGhhdmUgZWZmZWN0IGZvciBpbnN0cnVjdGlvbnMgYmV0d2VlbiB0aGUgZGlyZWN0aXZlIGFuZCBhbnkKK3N1YnNlcXVlbnQgZGlyZWN0aXZlIG92ZXJyaWRpbmcgaXQuCisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlYXJjaF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzZYLTIwMTIiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LmFyY2ggPC9jb2RlPjx2YXI+YXJjaDwvdmFyPjxkZD5UaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPTwvc3Bhbj48dmFyPmFyY2g8L3Zhcj48L3NhbXA+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVjYW50dW53aW5kXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNlgtMjAxMyI+PC9hPjxicj48ZHQ+PGNvZGU+LmNhbnR1bndpbmQ8L2NvZGU+PGRkPlByZXZlbnRzIHVud2luZGluZyB0aHJvdWdoIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgTm8gcGVyc29uYWxpdHkgcm91dGluZQorb3IgZXhjZXB0aW9uIHRhYmxlIGRhdGEgaXMgcmVxdWlyZWQgb3IgcGVybWl0dGVkLgorCisgICAgIDxwPklmIHRoaXMgaXMgbm90IHNwZWNpZmllZCB0aGVuIGZyYW1lIHVud2luZGluZyBpbmZvcm1hdGlvbiB3aWxsIGJlCitjb25zdHJ1Y3RlZCBmcm9tIENGSSBkaXJlY3RpdmVzLiBzZWUgPGEgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Q0ZJIGRpcmVjdGl2ZXM8L2E+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVjNnhhYmlfMDA1ZmF0dHJpYnV0ZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzZYLTIwMTQiPjwvYT48YnI+PGR0Pjxjb2RlPi5jNnhhYmlfYXR0cmlidXRlIDwvY29kZT48dmFyPnRhZzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+U2V0IHRoZSBDNjAwMCBFQUJJIGJ1aWxkIGF0dHJpYnV0ZSA8dmFyPnRhZzwvdmFyPiB0byA8dmFyPnZhbHVlPC92YXI+LgorCisgICAgIDxwPlRoZSA8dmFyPnRhZzwvdmFyPiBpcyBlaXRoZXIgYW4gYXR0cmlidXRlIG51bWJlciBvciBvbmUgb2YKKzxjb2RlPlRhZ19JU0E8L2NvZGU+LCA8Y29kZT5UYWdfQUJJX3djaGFyX3Q8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9zdGFja19hbGlnbl9uZWVkZWQ8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9zdGFja19hbGlnbl9wcmVzZXJ2ZWQ8L2NvZGU+LCA8Y29kZT5UYWdfQUJJX0RTQlQ8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9QSUQ8L2NvZGU+LCA8Y29kZT5UYWdfQUJJX1BJQzwvY29kZT4sCis8Y29kZT5UQUdfQUJJX2FycmF5X29iamVjdF9hbGlnbm1lbnQ8L2NvZGU+LAorPGNvZGU+VEFHX0FCSV9hcnJheV9vYmplY3RfYWxpZ25fZXhwZWN0ZWQ8L2NvZGU+LAorPGNvZGU+VGFnX0FCSV9jb21wYXRpYmlsaXR5PC9jb2RlPiBhbmQgPGNvZGU+VGFnX0FCSV9jb25mb3JtYW5jZTwvY29kZT4uICBUaGUKKzx2YXI+dmFsdWU8L3Zhcj4gaXMgZWl0aGVyIGEgPGNvZGU+bnVtYmVyPC9jb2RlPiwgPGNvZGU+InN0cmluZyI8L2NvZGU+LCBvcgorPGNvZGU+bnVtYmVyLCAic3RyaW5nIjwvY29kZT4gZGVwZW5kaW5nIG9uIHRoZSB0YWcuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWVodHlwZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzZYLTIwMTUiPjwvYT48YnI+PGR0Pjxjb2RlPi5laHR5cGUgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGRkPk91dHB1dCBhbiBleGNlcHRpb24gdHlwZSB0YWJsZSByZWZlcmVuY2UgdG8gPHZhcj5zeW1ib2w8L3Zhcj4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWVuZHBfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM2WC0yMDE2Ij48L2E+PGJyPjxkdD48Y29kZT4uZW5kcDwvY29kZT48ZGQ+TWFya3MgdGhlIGVuZCBvZiBhbmQgZXhjZXB0aW9uIHRhYmxlIG9yIGZ1bmN0aW9uLiAgSWYgcHJlY2VlZGVkIGJ5IGEKKzxjb2RlPi5oYW5kbGVyZGF0YTwvY29kZT4gZGlyZWN0aXZlIHRoZW4gdGhpcyBhbHNvIHN3aXRjaGVkIGJhY2sgdG8gdGhlIHByZXZpb3VzCit0ZXh0IHNlY3Rpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWhhbmRsZXJkYXRhXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNlgtMjAxNyI+PC9hPjxicj48ZHQ+PGNvZGU+LmhhbmRsZXJkYXRhPC9jb2RlPjxkZD5NYXJrcyB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBleGNlcHRpb24gdGFibGUKK2VudHJ5IGZvciB0aGF0IGZ1bmN0aW9uLiAgQW55dGhpbmcgYmV0d2VlbiB0aGlzIGRpcmVjdGl2ZSBhbmQgdGhlCis8Y29kZT4uZW5kcDwvY29kZT4gZGlyZWN0aXZlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeS4KKworICAgICA8cD5NdXN0IGJlIHByZWNlZGVkIGJ5IGEgQ0ZJIGJsb2NrIGNvbnRhaW5pbmcgYSA8Y29kZT4uY2ZpX2xzZGE8L2NvZGU+IGRpcmVjdGl2ZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbm9jbXBfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM2WC0yMDE4Ij48L2E+PGJyPjxkdD48Y29kZT4ubm9jbXA8L2NvZGU+PGRkPkRpc2FsbG93IHVzZSBvZiBDNjR4KyBjb21wYWN0IGluc3RydWN0aW9ucyBpbiB0aGUgY3VycmVudCB0ZXh0CitzZWN0aW9uLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVwZXJzb25hbGl0eWluZGV4XzAwN2QtZGlyZWN0aXZlXzAwMmMtVElDNlgtMjAxOSI+PC9hPjxicj48ZHQ+PGNvZGU+LnBlcnNvbmFsaXR5aW5kZXggPC9jb2RlPjx2YXI+aW5kZXg8L3Zhcj48ZGQ+U2V0cyB0aGUgcGVyc29uYWxpdHkgcm91dGluZSBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb24gdG8gdGhlIEFCSSBzcGVjaWZpZWQKK2NvbXBhY3Qgcm91dGluZSBudW1iZXIgPHZhcj5pbmRleDwvdmFyPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVwZXJzb25hbGl0eV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJQzZYLTIwMjAiPjwvYT48YnI+PGR0Pjxjb2RlPi5wZXJzb25hbGl0eSA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPlNldHMgdGhlIHBlcnNvbmFsaXR5IHJvdXRpbmUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHRvIDx2YXI+bmFtZTwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlc2NvbW1fMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUM2WC0yMDIxIj48L2E+PGJyPjxkdD48Y29kZT4uc2NvbW0gPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5zaXplPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hbGlnbjwvdmFyPjxkZD5MaWtlIDxjb2RlPi5jb21tPC9jb2RlPiwgY3JlYXRpbmcgYSBjb21tb24gc3ltYm9sIDx2YXI+c3ltYm9sPC92YXI+IHdpdGggc2l6ZSA8dmFyPnNpemU8L3Zhcj4KK2FuZCBhbGlnbm1lbnQgPHZhcj5hbGlnbjwvdmFyPiwgYnV0IHVubGlrZSB3aGVuIHVzaW5nIDxjb2RlPi5jb21tPC9jb2RlPiwgdGhpcyBzeW1ib2wKK3dpbGwgYmUgcGxhY2VkIGludG8gdGhlIHNtYWxsIEJTUyBzZWN0aW9uIGJ5IHRoZSBsaW5rZXIuCisKKyAgIDwvZGw+CisKKzwhLS0gQ29weXJpZ2h0IDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNlgtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNlgtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNWIxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUM2WC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElDNlggT3B0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI1RJQzZYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUM2WC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUM2WC1TeW50YXguaHRtbCNUSUM2WC1TeW50YXgiIHRpdGxlPSJUSUM2WCBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUM2WC1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJQzZYLVN5bnRheC5odG1sI1RJQzZYLVN5bnRheCI+VElDNlggU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI1RJQzZYXzAwMmREZXBlbmRlbnQiPlRJQzZYLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDEuMSBUSUM2WCBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtVElDNlgtb3B0aW9ucy0xOTkzIj48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9ucy1mb3ItVElDNlgtMTk5NCI+PC9hPgorPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbWFyY2hfMDAzZF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1USUM2WC0xOTk1Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi1tYXJjaD08L2NvZGU+PHZhcj5hcmNoPC92YXI+PGRkPkVuYWJsZSAob25seSkgaW5zdHJ1Y3Rpb25zIGZyb20gYXJjaGl0ZWN0dXJlIDx2YXI+YXJjaDwvdmFyPi4gIEJ5IGRlZmF1bHQsCithbGwgaW5zdHJ1Y3Rpb25zIGFyZSBwZXJtaXR0ZWQuCisKKyAgICAgPHA+VGhlIGZvbGxvd2luZyB2YWx1ZXMgb2YgPHZhcj5hcmNoPC92YXI+IGFyZSBhY2NlcHRlZDogPGNvZGU+YzYyeDwvY29kZT4sCis8Y29kZT5jNjR4PC9jb2RlPiwgPGNvZGU+YzY0eCs8L2NvZGU+LCA8Y29kZT5jNjd4PC9jb2RlPiwgPGNvZGU+YzY3eCs8L2NvZGU+LCA8Y29kZT5jNjc0eDwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1kc2J0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVRJQzZYLTE5OTYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbW5vXzAwMmRkc2J0XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVRJQzZYLTE5OTciPjwvYT48YnI+PGR0Pjxjb2RlPi1tZHNidDwvY29kZT48ZHQ+PGNvZGU+LW1uby1kc2J0PC9jb2RlPjxkZD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1kc2J0PC9zcGFuPjwvc2FtcD4gb3B0aW9uIGNhdXNlcyB0aGUgYXNzZW1ibGVyIHRvIGdlbmVyYXRlIHRoZQorPGNvZGU+VGFnX0FCSV9EU0JUPC9jb2RlPiBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlIG9mIDEsIGluZGljYXRpbmcgdGhhdCB0aGUKK2NvZGUgaXMgdXNpbmcgRFNCVCBhZGRyZXNzaW5nLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tZHNidDwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgdGhlCitkZWZhdWx0LCBjYXVzZXMgdGhlIHRhZyB0byBoYXZlIGEgdmFsdWUgb2YgMCwgaW5kaWNhdGluZyB0aGF0IHRoZSBjb2RlCitkb2VzIG5vdCB1c2UgRFNCVCBhZGRyZXNzaW5nLiAgVGhlIGxpbmtlciB3aWxsIGVtaXQgYSB3YXJuaW5nIGlmCitvYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlIChEU0JUIGFuZCBub24tRFNCVCkgYXJlIGxpbmtlZCB0b2dldGhlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXBpZF8wMDNkXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVRJQzZYLTE5OTgiPjwvYT48YnI+PGR0Pjxjb2RlPi1tcGlkPW5vPC9jb2RlPjxkdD48Y29kZT4tbXBpZD1uZWFyPC9jb2RlPjxkdD48Y29kZT4tbXBpZD1mYXI8L2NvZGU+PGRkPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXBpZD08L3NwYW4+PC9zYW1wPiBvcHRpb24gY2F1c2VzIHRoZSBhc3NlbWJsZXIgdG8gZ2VuZXJhdGUgdGhlCis8Y29kZT5UYWdfQUJJX1BJRDwvY29kZT4gYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBmb3JtIG9mIGRhdGEKK2FkZHJlc3NpbmcgdXNlZCBieSB0aGUgY29kZS4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGlkPW5vPC9zcGFuPjwvc2FtcD4sIHRoZSBkZWZhdWx0LAoraW5kaWNhdGVzIHBvc2l0aW9uLWRlcGVuZGVudCBkYXRhIGFkZHJlc3NpbmcsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGlkPW5lYXI8L3NwYW4+PC9zYW1wPgoraW5kaWNhdGVzIHBvc2l0aW9uLWluZGVwZW5kZW50IGFkZHJlc3Npbmcgd2l0aCBHT1QgYWNjZXNzZXMgdXNpbmcgbmVhcgorRFAgYWRkcmVzc2luZywgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGlkPWZhcjwvc3Bhbj48L3NhbXA+IGluZGljYXRlcyBwb3NpdGlvbi1pbmRlcGVuZGVudAorYWRkcmVzc2luZyB3aXRoIEdPVCBhY2Nlc3NlcyB1c2luZyBmYXIgRFAgYWRkcmVzc2luZy4gIFRoZSBsaW5rZXIgd2lsbAorZW1pdCBhIHdhcm5pbmcgaWYgb2JqZWN0cyBidWlsdCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyBvZiB0aGlzIG9wdGlvbgorYXJlIGxpbmtlZCB0b2dldGhlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXBpY18wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1USUM2WC0xOTk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZG1ub18wMDJkcGljXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVRJQzZYLTIwMDAiPjwvYT48YnI+PGR0Pjxjb2RlPi1tcGljPC9jb2RlPjxkdD48Y29kZT4tbW5vLXBpYzwvY29kZT48ZGQ+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGljPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGNhdXNlcyB0aGUgYXNzZW1ibGVyIHRvIGdlbmVyYXRlIHRoZQorPGNvZGU+VGFnX0FCSV9QSUM8L2NvZGU+IGF0dHJpYnV0ZSB3aXRoIGEgdmFsdWUgb2YgMSwgaW5kaWNhdGluZyB0aGF0IHRoZQorY29kZSBpcyB1c2luZyBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIGFkZHJlc3NpbmcsICBUaGUKKzxjb2RlPi1tbm8tcGljPC9jb2RlPiBvcHRpb24sIHRoZSBkZWZhdWx0LCBjYXVzZXMgdGhlIHRhZyB0byBoYXZlIGEgdmFsdWUgb2YKKzAsIGluZGljYXRpbmcgcG9zaXRpb24tZGVwZW5kZW50IGNvZGUgYWRkcmVzc2luZy4gIFRoZSBsaW5rZXIgd2lsbAorZW1pdCBhIHdhcm5pbmcgaWYgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZSAocG9zaXRpb24tZGVwZW5kZW50IGFuZAorcG9zaXRpb24taW5kZXBlbmRlbnQpIGFyZSBsaW5rZWQgdG9nZXRoZXIuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtVElDNlgtYmlnXzAwMmRlbmRpYW4tb3V0cHV0LTIwMDEiPjwvYT48YSBuYW1lPSJpbmRleC1USUM2WC1saXR0bGVfMDAyZGVuZGlhbi1vdXRwdXQtMjAwMiI+PC9hPjxhIG5hbWU9ImluZGV4LWJpZ18wMDJkZW5kaWFuLW91dHB1dF8wMDJjLVRJQzZYLTIwMDMiPjwvYT48YSBuYW1lPSJpbmRleC1saXR0bGVfMDAyZGVuZGlhbi1vdXRwdXRfMDAyYy1USUM2WC0yMDA0Ij48L2E+PGJyPjxkdD48Y29kZT4tbWJpZy1lbmRpYW48L2NvZGU+PGR0Pjxjb2RlPi1tbGl0dGxlLWVuZGlhbjwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBlbmRpYW5uZXNzLiAgVGhlIGRlZmF1bHQgaXMKK2xpdHRsZS1lbmRpYW4uCisKKyAgIDwvZGw+CisgICA8IS0tIG1hbiBlbmQgLS0+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzZYLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNlgtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3ODc0ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzZYLVN5bnRheC5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJQzZYIFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI1RJQzZYXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUM2WC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjVElDNlgtT3B0aW9ucyIgdGl0bGU9IlRJQzZYIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjVElDNlgtRGlyZWN0aXZlcyIgdGl0bGU9IlRJQzZYIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUM2WC1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElDNlgtRGlyZWN0aXZlcy5odG1sI1RJQzZYLURpcmVjdGl2ZXMiPlRJQzZYIERpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSUM2WC1PcHRpb25zLmh0bWwjVElDNlgtT3B0aW9ucyI+VElDNlggT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJQzZYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM2WF8wMDJkRGVwZW5kZW50Ij5USUM2WC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQxLjIgVElDNlggU3ludGF4PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVRJQzZYLTIwMDUiPjwvYT48YSBuYW1lPSJpbmRleC1USUM2WC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIwMDYiPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb24gYSBsaW5lIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50Cit0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLiAgSWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lLCB0aGUgd2hvbGUgbGluZSBpcwordHJlYXRlZCBhcyBhIGNvbW1lbnQuICBOb3RlIHRoYXQgaWYgYSBsaW5lIHN0YXJ0cyB3aXRoIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87CitjaGFyYWN0ZXIgdGhlbiBpdCBjYW4gYWxzbyBiZSBhIGxvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlCisoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IgY29udHJvbCBjb21tYW5kCisoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtVElDNlgtMjAwNyI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1USUM2WC0yMDA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtVElDNlgtbGluZS1zZXBhcmF0b3ItMjAwOSI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBuZXdsaW5lIHRvIHNlcGFyYXRlCitzdGF0ZW1lbnRzLgorCisgICA8cD5JbnN0cnVjdGlvbiwgcmVnaXN0ZXIgYW5kIGZ1bmN0aW9uYWwgdW5pdCBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4gCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiByZXF1aXJlcyBmdWxseS1zcGVjaWZpZWQgZnVuY3Rpb25hbCB1bml0IG5hbWVzLAorc3VjaCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5TMTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uTDFYPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LkQxVDI8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9uIGFsbCBpbnN0cnVjdGlvbnMKK3VzaW5nIGEgZnVuY3Rpb25hbCB1bml0LgorCisgICA8cD5Gb3Igc29tZSBpbnN0cnVjdGlvbnMsIHRoZXJlIG1heSBiZSBzeW50YWN0aWMgYW1iaWd1aXR5IGJldHdlZW4KK3JlZ2lzdGVyIG9yIGZ1bmN0aW9uYWwgdW5pdCBuYW1lcyBhbmQgdGhlIG5hbWVzIG9mIGxhYmVscyBvciBvdGhlcgorc3ltYm9scy4gIFRvIGF2b2lkIHRoaXMsIGVuY2xvc2UgdGhlIGFtYmlndW91cyBzeW1ib2wgbmFtZSBpbgorcGFyZW50aGVzZXM7IHJlZ2lzdGVyIGFuZCBmdW5jdGlvbmFsIHVuaXQgbmFtZXMgbWF5IG5vdCBiZSBlbmNsb3NlZCBpbgorcGFyZW50aGVzZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzZYXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJQzZYXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2VjNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElDNlhfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJQzZYLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElDNTRYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM1NFhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJQzU0WC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUxFXzAwMmRHeF8wMDJkRGVwZW5kZW50Lmh0bWwjVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJTEUtR3gtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElDNlgtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJUSUM2WF8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFXzAwMmRHeF8wMDJkRGVwZW5kZW50Ij5USUxFLUd4LURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiPlRJQzU0WC1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuNDEgVElDNlggRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtVElDNlgtc3VwcG9ydC0xOTkxIj48L2E+PGEgbmFtZT0iaW5kZXgtVE1TMzIwQzZYLXN1cHBvcnQtMTk5MiI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI1RJQzZYLU9wdGlvbnMiPlRJQzZYIE9wdGlvbnM8L2E+OiAgICAgICAgICAgICBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJUSUM2WC1TeW50YXguaHRtbCNUSUM2WC1TeW50YXgiPlRJQzZYIFN5bnRheDwvYT46ICAgICAgICAgICAgICBTeW50YXgKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlRJQzZYLURpcmVjdGl2ZXMuaHRtbCNUSUM2WC1EaXJlY3RpdmVzIj5USUM2WCBEaXJlY3RpdmVzPC9hPjogICAgICAgICAgRGlyZWN0aXZlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFUHJvLURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjBjMWYzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElMRVBybyBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFUHJvXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUxFUHJvLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJTEVQcm8tU3ludGF4Lmh0bWwjVElMRVByby1TeW50YXgiIHRpdGxlPSJUSUxFUHJvIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJTEVQcm8tRGlyZWN0aXZlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTEVQcm8tU3ludGF4Lmh0bWwjVElMRVByby1TeW50YXgiPlRJTEVQcm8gU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElMRVByb18wMDJkRGVwZW5kZW50Lmh0bWwjVElMRVByb18wMDJkRGVwZW5kZW50Ij5USUxFUHJvLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDMuMyBUSUxFUHJvIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1USUxFUHJvLTIwNDkiPjwvYT48YSBuYW1lPSJpbmRleC1USUxFUHJvLW1hY2hpbmUtZGlyZWN0aXZlcy0yMDUwIj48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWFsaWduXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElMRVByby0yMDUxIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPi5hbGlnbiA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSBnZW5lcmljIDx2YXI+LmFsaWduPC92YXI+IGRpcmVjdGl2ZS4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUKK3JlcXVlc3RlZCBhbGlnbm1lbnQgaW4gYnl0ZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWFsbG93XzAwNWZzdXNwaWNpb3VzXzAwNWZidW5kbGVzXzAwN2QtZGlyZWN0aXZlXzAwMmMtVElMRVByby0yMDUyIj48L2E+PGJyPjxkdD48Y29kZT4uYWxsb3dfc3VzcGljaW91c19idW5kbGVzPC9jb2RlPjxkZD5UdXJucyBvbiBlcnJvciBjaGVja2luZyBmb3IgY29tYmluYXRpb25zIG9mIGluc3RydWN0aW9ucyBpbiBhIGJ1bmRsZQordGhhdCBwcm9iYWJseSBpbmRpY2F0ZSBhIHByb2dyYW1taW5nIGVycm9yLiAgVGhpcyBpcyBvbiBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Lm5vX2FsbG93X3N1c3BpY2lvdXNfYnVuZGxlczwvY29kZT48ZGQ+VHVybnMgb2ZmIGVycm9yIGNoZWNraW5nIGZvciBjb21iaW5hdGlvbnMgb2YgaW5zdHJ1Y3Rpb25zIGluIGEgYnVuZGxlCit0aGF0IHByb2JhYmx5IGluZGljYXRlIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXJlcXVpcmVfMDA1ZmNhbm9uaWNhbF8wMDVmcmVnXzAwNWZuYW1lc18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJTEVQcm8tMjA1MyI+PC9hPjxicj48ZHQ+PGNvZGU+LnJlcXVpcmVfY2Fub25pY2FsX3JlZ19uYW1lczwvY29kZT48ZGQ+UmVxdWlyZSB0aGF0IGNhbm9uaWNhbCByZWdpc3RlciBuYW1lcyBiZSB1c2VkLCBhbmQgZW1pdCBhIHdhcm5pbmcgaWYKK3RoZSBudW1lcmljIG5hbWVzIGFyZSB1c2VkLiAgVGhpcyBpcyBvbiBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Lm5vX3JlcXVpcmVfY2Fub25pY2FsX3JlZ19uYW1lczwvY29kZT48ZGQ+UGVybWl0IHRoZSB1c2Ugb2YgbnVtZXJpYyBuYW1lcyBmb3IgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBjYW5vbmljYWwKK25hbWVzLgorCisgICA8L2RsPgorCis8IS0tIENvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1Nb2RpZmllcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVQcm8tTW9kaWZpZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5N2I2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVQcm8tTW9kaWZpZXJzLmh0bWwKQEAgLTAsMCArMSwxNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJTEVQcm8gTW9kaWZpZXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUxFUHJvLVN5bnRheC5odG1sI1RJTEVQcm8tU3ludGF4IiB0aXRsZT0iVElMRVBybyBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSUxFUHJvLVJlZ2lzdGVycy5odG1sI1RJTEVQcm8tUmVnaXN0ZXJzIiB0aXRsZT0iVElMRVBybyBSZWdpc3RlcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUxFUHJvLU1vZGlmaWVycyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTEVQcm8tUmVnaXN0ZXJzLmh0bWwjVElMRVByby1SZWdpc3RlcnMiPlRJTEVQcm8gUmVnaXN0ZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElMRVByby1TeW50YXguaHRtbCNUSUxFUHJvLVN5bnRheCI+VElMRVBybyBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQzLjIuMyBTeW1ib2xpYyBPcGVyYW5kIE1vZGlmaWVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTEVQcm8tbW9kaWZpZXJzLTIwNDciPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtbW9kaWZpZXJzXzAwMmMtVElMRVByby0yMDQ4Ij48L2E+CitUaGUgYXNzZW1ibGVyIHN1cHBvcnRzIHNldmVyYWwgbW9kaWZpZXJzIHdoZW4gdXNpbmcgc3ltYm9sIGFkZHJlc3NlcworaW4gVElMRVBybyBpbnN0cnVjdGlvbiBvcGVyYW5kcy4gIFRoZSBnZW5lcmFsIHN5bnRheCBpcyB0aGUgZm9sbG93aW5nOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgbW9kaWZpZXIoc3ltYm9sKQorPC9wcmU+CisgICA8cD5UaGUgZm9sbG93aW5nIG1vZGlmaWVycyBhcmUgc3VwcG9ydGVkOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5sbzE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIHRoZSBsb3cgMTYgYml0cyBvZiB0aGUgc3ltYm9sJ3MgYWRkcmVzcywKK3NpZ24tZXh0ZW5kZWQgdG8gYSAzMi1iaXQgdmFsdWUgKHNpZ24tZXh0ZW5zaW9uIGFsbG93cyBpdCB0byBiZQorcmFuZ2UtY2hlY2tlZCBhZ2FpbnN0IHNpZ25lZCAxNiBiaXQgaW1tZWRpYXRlIG9wZXJhbmRzIHdpdGhvdXQKK2NvbXBsYWludCkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5oaTE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIHRoZSBoaWdoIDE2IGJpdHMgb2YgdGhlIHN5bWJvbCdzCithZGRyZXNzLCBhbHNvIHNpZ24tZXh0ZW5kZWQgdG8gYSAzMi1iaXQgdmFsdWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5oYTE2PC9jb2RlPjxkZD4KKzxjb2RlPmhhMTYoTik8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5oaTE2KE4pPC9jb2RlPiwgZXhjZXB0IGlmCis8Y29kZT5sbzE2KE4pPC9jb2RlPiBpcyBuZWdhdGl2ZSBpdCBhZGRzIG9uZSB0byB0aGUgPGNvZGU+aGkxNihOKTwvY29kZT4KK3ZhbHVlLiBUaGlzIHdheSA8Y29kZT5sbzE2PC9jb2RlPiBhbmQgPGNvZGU+aGExNjwvY29kZT4gY2FuIGJlIGFkZGVkIHRvIGNyZWF0ZSBhbnkKKzMyLWJpdCB2YWx1ZSB1c2luZyA8Y29kZT5hdWxpPC9jb2RlPi4gIEZvciBleGFtcGxlLCBoZXJlIGlzIGhvdyB5b3UgbW92ZSBhbgorYXJiaXRyYXJ5IDMyLWJpdCBhZGRyZXNzIGludG8gcjM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgbW92ZWxpIHIzLCBsbzE2KHN5bSkKKyAgICAgICAgICBhdWxpIHIzLCByMywgaGExNihzeW0pCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5nb3Q8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIGxvYWQgdGhlIG9mZnNldCBvZiB0aGUgR09UIGVudHJ5Citjb3JyZXNwb25kaW5nIHRvIHRoZSBzeW1ib2wuCisKKyAgICAgPGJyPjxkdD48Y29kZT5nb3RfbG8xNjwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gbG9hZCB0aGUgc2lnbi1leHRlbmRlZCBsb3cgMTYgYml0cyBvZiB0aGUKK29mZnNldCBvZiB0aGUgR09UIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5bWJvbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmdvdF9oaTE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIHRoZSBzaWduLWV4dGVuZGVkIGhpZ2ggMTYgYml0cyBvZiB0aGUKK29mZnNldCBvZiB0aGUgR09UIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5bWJvbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmdvdF9oYTE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgbGlrZSA8Y29kZT5nb3RfaGkxNjwvY29kZT4sIGJ1dCBpdCBhZGRzIG9uZSBpZgorPGNvZGU+Z290X2xvMTY8L2NvZGU+IG9mIHRoZSBpbnB1dCB2YWx1ZSBpcyBuZWdhdGl2ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnBsdDwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgZm9yIGZ1bmN0aW9uIHN5bWJvbHMuICBJdCBjYXVzZXMgYQorPGVtPnByb2NlZHVyZSBsaW5rYWdlIHRhYmxlPC9lbT4sIGFuIGFycmF5IG9mIGNvZGUgc3R1YnMsIHRvIGJlIGNyZWF0ZWQKK2F0IHRoZSB0aW1lIHRoZSBzaGFyZWQgb2JqZWN0IGlzIGNyZWF0ZWQgb3IgbGlua2VkIGFnYWluc3QsIHRvZ2V0aGVyCit3aXRoIGEgZ2xvYmFsIG9mZnNldCB0YWJsZSBlbnRyeS4gIFRoZSB2YWx1ZSBpcyBhIHBjLXJlbGF0aXZlIG9mZnNldAordG8gdGhlIGNvcnJlc3BvbmRpbmcgc3R1YiBjb2RlIGluIHRoZSBwcm9jZWR1cmUgbGlua2FnZSB0YWJsZS4gIFRoaXMKK2FycmFuZ2VtZW50IGNhdXNlcyB0aGUgcnVuLXRpbWUgc3ltYm9sIHJlc29sdmVyIHRvIGJlIGNhbGxlZCB0byBsb29rCit1cCBhbmQgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIHRoZSBmaXJzdCB0aW1lIHRoZSBmdW5jdGlvbiBpcworY2FsbGVkIChhdCBsYXRlc3Q7IGRlcGVuZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMpLiAgSXQgaXMgb25seSBzYWZlCit0byBsZWF2ZSB0aGUgc3ltYm9sIHVucmVzb2x2ZWQgdGhpcyB3YXkgaWYgYWxsIHJlZmVyZW5jZXMgYXJlIGZ1bmN0aW9uCitjYWxscy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19nZDwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gbG9hZCB0aGUgb2Zmc2V0IG9mIHRoZSBHT1QgZW50cnkgb2YgdGhlCitzeW1ib2wncyBUTFMgZGVzY3JpcHRvciwgdG8gYmUgdXNlZCBmb3IgZ2VuZXJhbC1keW5hbWljIFRMUyBhY2Nlc3Nlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19nZF9sbzE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIHRoZSBzaWduLWV4dGVuZGVkIGxvdyAxNiBiaXRzIG9mIHRoZQorb2Zmc2V0IG9mIHRoZSBHT1QgZW50cnkgb2YgdGhlIHN5bWJvbCdzIFRMUyBkZXNjcmlwdG9yLCB0byBiZSB1c2VkIGZvcgorZ2VuZXJhbCBkeW5hbWljIFRMUyBhY2Nlc3Nlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19nZF9oaTE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIHRoZSBzaWduLWV4dGVuZGVkIGhpZ2ggMTYgYml0cyBvZiB0aGUKK29mZnNldCBvZiB0aGUgR09UIGVudHJ5IG9mIHRoZSBzeW1ib2wncyBUTFMgZGVzY3JpcHRvciwgdG8gYmUgdXNlZCBmb3IKK2dlbmVyYWwgZHluYW1pYyBUTFMgYWNjZXNzZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT50bHNfZ2RfaGExNjwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIGxpa2UgPGNvZGU+dGxzX2dkX2hpMTY8L2NvZGU+LCBidXQgaXQgYWRkcyBvbmUgdG8gdGhlIHZhbHVlCitpZiA8Y29kZT50bHNfZ2RfbG8xNjwvY29kZT4gb2YgdGhlIGlucHV0IHZhbHVlIGlzIG5lZ2F0aXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dGxzX2llPC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIHRoZSBvZmZzZXQgb2YgdGhlIEdPVCBlbnRyeSBjb250YWluaW5nCit0aGUgb2Zmc2V0IG9mIHRoZSBzeW1ib2wncyBhZGRyZXNzIGZyb20gdGhlIFRDQiwgdG8gYmUgdXNlZCBmb3IKK2luaXRpYWwtZXhlYyBUTFMgYWNjZXNzZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT50bHNfaWVfbG8xNjwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gbG9hZCB0aGUgbG93IDE2IGJpdHMgb2YgdGhlIG9mZnNldCBvZiB0aGUgR09UCitlbnRyeSBjb250YWluaW5nIHRoZSBvZmZzZXQgb2YgdGhlIHN5bWJvbCdzIGFkZHJlc3MgZnJvbSB0aGUgVENCLCB0bworYmUgdXNlZCBmb3IgaW5pdGlhbC1leGVjIFRMUyBhY2Nlc3Nlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19pZV9oaTE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIHRoZSBoaWdoIDE2IGJpdHMgb2YgdGhlIG9mZnNldCBvZiB0aGUKK0dPVCBlbnRyeSBjb250YWluaW5nIHRoZSBvZmZzZXQgb2YgdGhlIHN5bWJvbCdzIGFkZHJlc3MgZnJvbSB0aGUgVENCLAordG8gYmUgdXNlZCBmb3IgaW5pdGlhbC1leGVjIFRMUyBhY2Nlc3Nlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19pZV9oYTE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgbGlrZSA8Y29kZT50bHNfaWVfaGkxNjwvY29kZT4sIGJ1dCBpdCBhZGRzIG9uZSB0byB0aGUgdmFsdWUKK2lmIDxjb2RlPnRsc19pZV9sbzE2PC9jb2RlPiBvZiB0aGUgaW5wdXQgdmFsdWUgaXMgbmVnYXRpdmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT50bHNfbGU8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIGxvYWQgdGhlIG9mZnNldCBvZiB0aGUgc3ltYm9sJ3MgYWRkcmVzcyBmcm9tCit0aGUgVENCLCB0byBiZSB1c2VkIGZvciBsb2NhbC1leGVjIFRMUyBhY2Nlc3Nlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19sZV9sbzE2PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIHRoZSBsb3cgMTYgYml0cyBvZiB0aGUgb2Zmc2V0IG9mIHRoZQorc3ltYm9sJ3MgYWRkcmVzcyBmcm9tIHRoZSBUQ0IsIHRvIGJlIHVzZWQgZm9yIGxvY2FsLWV4ZWMgVExTIGFjY2Vzc2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dGxzX2xlX2hpMTY8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIGxvYWQgdGhlIGhpZ2ggMTYgYml0cyBvZiB0aGUgb2Zmc2V0IG9mIHRoZQorc3ltYm9sJ3MgYWRkcmVzcyBmcm9tIHRoZSBUQ0IsIHRvIGJlIHVzZWQgZm9yIGxvY2FsLWV4ZWMgVExTIGFjY2Vzc2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dGxzX2xlX2hhMTY8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyBsaWtlIDxjb2RlPnRsc19sZV9oaTE2PC9jb2RlPiwgYnV0IGl0IGFkZHMgb25lIHRvIHRoZSB2YWx1ZQoraWYgPGNvZGU+dGxzX2xlX2xvMTY8L2NvZGU+IG9mIHRoZSBpbnB1dCB2YWx1ZSBpcyBuZWdhdGl2ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19nZF9jYWxsPC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byB0YWcgYW4gaW5zdHJ1dGlvbiBhcyB0aGUgJmxkcXVvO2NhbGwmcmRxdW87IHBhcnQgb2YgYQorY2FsbGluZyBzZXF1ZW5jZSBmb3IgYSBUTFMgR0QgcmVmZXJlbmNlIG9mIGl0cyBvcGVyYW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dGxzX2dkX2FkZDwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gdGFnIGFuIGluc3RydWN0aW9uIGFzIHRoZSAmbGRxdW87YWRkJnJkcXVvOyBwYXJ0IG9mIGEKK2NhbGxpbmcgc2VxdWVuY2UgZm9yIGEgVExTIEdEIHJlZmVyZW5jZSBvZiBpdHMgb3BlcmFuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19pZV9sb2FkPC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byB0YWcgYW4gaW5zdHJ1Y3Rpb24gYXMgdGhlICZsZHF1bztsb2FkJnJkcXVvOyBwYXJ0IG9mIGEKK2NhbGxpbmcgc2VxdWVuY2UgZm9yIGEgVExTIElFIHJlZmVyZW5jZSBvZiBpdHMgb3BlcmFuZC4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1PcGNvZGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFUHJvLU9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTg5YTI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1PcGNvZGVzLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElMRVBybyBPcGNvZGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUxFUHJvLVN5bnRheC5odG1sI1RJTEVQcm8tU3ludGF4IiB0aXRsZT0iVElMRVBybyBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUxFUHJvLVJlZ2lzdGVycy5odG1sI1RJTEVQcm8tUmVnaXN0ZXJzIiB0aXRsZT0iVElMRVBybyBSZWdpc3RlcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUxFUHJvLU9wY29kZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElMRVByby1SZWdpc3RlcnMuaHRtbCNUSUxFUHJvLVJlZ2lzdGVycyI+VElMRVBybyBSZWdpc3RlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUSUxFUHJvLVN5bnRheC5odG1sI1RJTEVQcm8tU3ludGF4Ij5USUxFUHJvIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNDMuMi4xIE9wY29kZSBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTEVQcm8tb3Bjb2RlLW5hbWVzLTIwNDMiPjwvYT48YSBuYW1lPSJpbmRleC1vcGNvZGUtbmFtZXNfMDAyYy1USUxFUHJvLTIwNDQiPjwvYT4KK0ZvciBhIGNvbXBsZXRlIGxpc3Qgb2Ygb3Bjb2RlcyBhbmQgZGVzY3JpcHRpb25zIG9mIHRoZWlyIHNlbWFudGljcywKK3NlZSA8Y2l0ZT5USUxFIFByb2Nlc3NvciBVc2VyIEFyY2hpdGVjdHVyZSBNYW51YWw8L2NpdGU+LCBhdmFpbGFibGUgdXBvbgorcmVxdWVzdCBhdCB3d3cudGlsZXJhLmNvbS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFUHJvLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmEwNjAxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElMRVBybyBPcHRpb25zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFUHJvXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUxFUHJvLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJTEVQcm8tU3ludGF4Lmh0bWwjVElMRVByby1TeW50YXgiIHRpdGxlPSJUSUxFUHJvIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJTEVQcm8tT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUxFUHJvLVN5bnRheC5odG1sI1RJTEVQcm8tU3ludGF4Ij5USUxFUHJvIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJTEVQcm9fMDAyZERlcGVuZGVudC5odG1sI1RJTEVQcm9fMDAyZERlcGVuZGVudCI+VElMRVByby1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQzLjEgT3B0aW9uczwvaDQ+CisKKzxwPjxjb2RlPmFzPC9jb2RlPiBoYXMgbm8gbWFjaGluZS1kZXBlbmRlbnQgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yCitUSUxFUHJvLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFUHJvLVJlZ2lzdGVycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1SZWdpc3RlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjE0Y2M3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1SZWdpc3RlcnMuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUxFUHJvIFJlZ2lzdGVycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElMRVByby1TeW50YXguaHRtbCNUSUxFUHJvLVN5bnRheCIgdGl0bGU9IlRJTEVQcm8gU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElMRVByby1PcGNvZGVzLmh0bWwjVElMRVByby1PcGNvZGVzIiB0aXRsZT0iVElMRVBybyBPcGNvZGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVElMRVByby1Nb2RpZmllcnMuaHRtbCNUSUxFUHJvLU1vZGlmaWVycyIgdGl0bGU9IlRJTEVQcm8gTW9kaWZpZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElMRVByby1SZWdpc3RlcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElMRVByby1Nb2RpZmllcnMuaHRtbCNUSUxFUHJvLU1vZGlmaWVycyI+VElMRVBybyBNb2RpZmllcnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSUxFUHJvLU9wY29kZXMuaHRtbCNUSUxFUHJvLU9wY29kZXMiPlRJTEVQcm8gT3Bjb2RlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJTEVQcm8tU3ludGF4Lmh0bWwjVElMRVByby1TeW50YXgiPlRJTEVQcm8gU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS40My4yLjIgUmVnaXN0ZXIgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1USUxFUHJvLXJlZ2lzdGVyLW5hbWVzLTIwNDUiPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLVRJTEVQcm8tMjA0NiI+PC9hPgorR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBhcmUgcmVwcmVzZW50ZWQgYnkgcHJlZGVmaW5lZCBzeW1ib2xzIG9mIHRoZQorZm9ybSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI8L3NwYW4+PHZhcj5OPC92YXI+PC9zYW1wPiZyc3F1bzssIHdoZXJlIDx2YXI+TjwvdmFyPiByZXByZXNlbnRzIGEgbnVtYmVyIGJldHdlZW4KKzxjb2RlPjA8L2NvZGU+IGFuZCA8Y29kZT42MzwvY29kZT4uICBIb3dldmVyLCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBoYXZlCitjYW5vbmljYWwgbmFtZXMgdGhhdCBtdXN0IGJlIHVzZWQgaW5zdGVhZDoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+cjU0PC9jb2RlPjxkZD5zcAorCisgICAgIDxicj48ZHQ+PGNvZGU+cjU1PC9jb2RlPjxkZD5scgorCisgICAgIDxicj48ZHQ+PGNvZGU+cjU2PC9jb2RlPjxkZD5zbgorCisgICAgIDxicj48ZHQ+PGNvZGU+cjU3PC9jb2RlPjxkZD5pZG4wCisKKyAgICAgPGJyPjxkdD48Y29kZT5yNTg8L2NvZGU+PGRkPmlkbjEKKworICAgICA8YnI+PGR0Pjxjb2RlPnI1OTwvY29kZT48ZGQ+dWRuMAorCisgICAgIDxicj48ZHQ+PGNvZGU+cjYwPC9jb2RlPjxkZD51ZG4xCisKKyAgICAgPGJyPjxkdD48Y29kZT5yNjE8L2NvZGU+PGRkPnVkbjIKKworICAgICA8YnI+PGR0Pjxjb2RlPnI2MjwvY29kZT48ZGQ+dWRuMworCisgICAgIDxicj48ZHQ+PGNvZGU+cjYzPC9jb2RlPjxkZD56ZXJvCisKKyAgIDwvZGw+CisKKyAgIDxwPlRoZSBhc3NlbWJsZXIgd2lsbCBlbWl0IGEgd2FybmluZyBpZiBhIG51bWVyaWMgbmFtZSBpcyB1c2VkIGluc3RlYWQgb2YKK3RoZSBjYW5vbmljYWwgbmFtZS4gIFRoZSA8Y29kZT4ubm9fcmVxdWlyZV9jYW5vbmljYWxfcmVnX25hbWVzPC9jb2RlPgorYXNzZW1ibGVyIHBzZXVkby1vcCB0dXJucyBvZmYgdGhpcword2FybmluZy4gPGNvZGU+LnJlcXVpcmVfY2Fub25pY2FsX3JlZ19uYW1lczwvY29kZT4gdHVybnMgaXQgYmFjayBvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRVByby1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVQcm8tU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5NTVhOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVQcm8tU3ludGF4Lmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJTEVQcm8gU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFUHJvXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUxFUHJvLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJTEVQcm8tT3B0aW9ucy5odG1sI1RJTEVQcm8tT3B0aW9ucyIgdGl0bGU9IlRJTEVQcm8gT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJTEVQcm8tRGlyZWN0aXZlcy5odG1sI1RJTEVQcm8tRGlyZWN0aXZlcyIgdGl0bGU9IlRJTEVQcm8gRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJTEVQcm8tU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJTEVQcm8tRGlyZWN0aXZlcy5odG1sI1RJTEVQcm8tRGlyZWN0aXZlcyI+VElMRVBybyBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElMRVByby1PcHRpb25zLmh0bWwjVElMRVByby1PcHRpb25zIj5USUxFUHJvIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUSUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFUHJvXzAwMmREZXBlbmRlbnQiPlRJTEVQcm8tRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40My4yIFN5bnRheDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTEVQcm8tc3ludGF4LTIwNDEiPjwvYT48YSBuYW1lPSJpbmRleC1zeW50YXhfMDAyYy1USUxFUHJvLTIwNDIiPjwvYT4KK0Jsb2NrIGNvbW1lbnRzIGFyZSBkZWxpbWl0ZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vKjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qLzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEVuZCBvZiBsaW5lCitjb21tZW50cyBtYXkgYmUgaW50cm9kdWNlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPkluc3RydWN0aW9ucyBjb25zaXN0IG9mIGEgbGVhZGluZyBvcGNvZGUgb3IgbWFjcm8gbmFtZSBmb2xsb3dlZCBieQord2hpdGVzcGFjZSBhbmQgYW4gb3B0aW9uYWwgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb3BlcmFuZHM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8dmFyPm9wY29kZTwvdmFyPiBbPHZhcj5vcGVyYW5kPC92YXI+LCAuLi5dCis8L3ByZT4KKyAgIDxwPkluc3RydWN0aW9ucyBtdXN0IGJlIHNlcGFyYXRlZCBieSBhIG5ld2xpbmUgb3Igc2VtaWNvbG9uLgorCisgICA8cD5UaGVyZSBhcmUgdHdvIHdheXMgdG8gd3JpdGUgY29kZTogZWl0aGVyIHdyaXRlIG5ha2VkIGluc3RydWN0aW9ucywKK3doaWNoIHRoZSBhc3NlbWJsZXIgaXMgZnJlZSB0byBjb21iaW5lIGludG8gVkxJVyBidW5kbGVzLCBvciBzcGVjaWZ5Cit0aGUgVkxJVyBidW5kbGVzIGV4cGxpY2l0bHkuCisKKyAgIDxwPkJ1bmRsZXMgYXJlIHNwZWNpZmllZCB1c2luZyBjdXJseSBicmFjZXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB7IDx2YXI+YWRkPC92YXI+IHIzLHI0LHI1IDsgPHZhcj5hZGQ8L3Zhcj4gcjcscjgscjkgOyA8dmFyPmx3PC92YXI+IHIxMCxyMTEgfQorPC9wcmU+CisgICA8cD5BIGJ1bmRsZSBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcy4gSWYgeW91IHdhbnQgdG8gcHV0IG11bHRpcGxlCitpbnN0cnVjdGlvbnMgb24gYSBsaW5lLCB3aGV0aGVyIGluIGEgYnVuZGxlIG9yIG5vdCwgeW91IG5lZWQgdG8KK3NlcGFyYXRlIHRoZW0gd2l0aCBzZW1pY29sb25zIGFzIGluIHRoaXMgZXhhbXBsZS4KKworICAgPHA+QSBidW5kbGUgbWF5IGNvbnRhaW4gb25lIG9yIG1vcmUgaW5zdHJ1Y3Rpb25zLCB1cCB0byB0aGUgbGltaXQKK3NwZWNpZmllZCBieSB0aGUgSVNBIChjdXJyZW50bHkgdGhyZWUpLiBJZiBmZXdlciBpbnN0cnVjdGlvbnMgYXJlCitzcGVjaWZpZWQgdGhhbiB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgaW4gYSBidW5kbGUsIHRoZSBhc3NlbWJsZXIKK2luc2VydHMgPGNvZGU+Zm5vcDwvY29kZT4gaW5zdHJ1Y3Rpb25zIGF1dG9tYXRpY2FsbHkuCisKKyAgIDxwPlRoZSBhc3NlbWJsZXIgd2lsbCBwcmVmZXIgdG8gcHJlc2VydmUgdGhlIG9yZGVyaW5nIG9mIGluc3RydWN0aW9ucword2l0aGluIHRoZSBidW5kbGUsIHB1dHRpbmcgdGhlIGZpcnN0IGluc3RydWN0aW9uIGluIGEgbG93ZXItbnVtYmVyZWQKK3BpcGVsaW5lIHRoYW4gdGhlIG5leHQgb25lLCBldGMuICBUaGlzIGZhY3QsIGNvbWJpbmVkIHdpdGggdGhlCitvcHRpb25hbCB1c2Ugb2YgZXhwbGljaXQgPGNvZGU+Zm5vcDwvY29kZT4gb3IgPGNvZGU+bm9wPC9jb2RlPiBpbnN0cnVjdGlvbnMsCithbGxvd3MgcHJlY2lzZSBjb250cm9sIG92ZXIgd2hpY2ggcGlwZWxpbmUgZXhlY3V0ZXMgZWFjaCBpbnN0cnVjdGlvbi4KKworICAgPHA+SWYgdGhlIGluc3RydWN0aW9ucyBjYW5ub3QgYmUgYnVuZGxlZCBpbiB0aGUgbGlzdGVkIG9yZGVyLCB0aGUKK2Fzc2VtYmxlciB3aWxsIGF1dG9tYXRpY2FsbHkgdHJ5IHRvIGZpbmQgYSB2YWxpZCBwaXBlbGluZQorYXNzaWdubWVudC4gSWYgdGhlcmUgaXMgbm8gd2F5IHRvIGJ1bmRsZSB0aGUgaW5zdHJ1Y3Rpb25zIHRvZ2V0aGVyLAordGhlIGFzc2VtYmxlciByZXBvcnRzIGFuIGVycm9yLgorCisgICA8cD5UaGUgYXNzZW1ibGVyIGRvZXMgbm90IHlldCBhdXRvLWJ1bmRsZSAoYXV0b21hdGljYWxseSBjb21iaW5lIG11bHRpcGxlCitpbnN0cnVjdGlvbnMgaW50byBvbmUgYnVuZGxlKSwgYnV0IGl0IHJlc2VydmVzIHRoZSByaWdodCB0byBkbyBzbyBpbgordGhlIGZ1dHVyZS4gIElmIHlvdSB3YW50IHRvIGZvcmNlIGFuIGluc3RydWN0aW9uIHRvIHJ1biBieSBpdHNlbGYsIHB1dAoraXQgaW4gYSBidW5kbGUgZXhwbGljaXRseSB3aXRoIGN1cmx5IGJyYWNlcyBhbmQgdXNlIDxjb2RlPm5vcDwvY29kZT4KK2luc3RydWN0aW9ucyAobm90IDxjb2RlPmZub3A8L2NvZGU+KSB0byBmaWxsIHRoZSByZW1haW5pbmcgcGlwZWxpbmUgc2xvdHMgaW4KK3RoYXQgYnVuZGxlLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iVElMRVByby1PcGNvZGVzLmh0bWwjVElMRVByby1PcGNvZGVzIj5USUxFUHJvIE9wY29kZXM8L2E+OiAgICAgICAgICAgICAgIE9wY29kZSBOYW1pbmcgQ29udmVudGlvbnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iVElMRVByby1SZWdpc3RlcnMuaHRtbCNUSUxFUHJvLVJlZ2lzdGVycyI+VElMRVBybyBSZWdpc3RlcnM8L2E+OiAgICAgICAgICAgICBSZWdpc3RlciBOYW1pbmcuIAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVElMRVByby1Nb2RpZmllcnMuaHRtbCNUSUxFUHJvLU1vZGlmaWVycyI+VElMRVBybyBNb2RpZmllcnM8L2E+OiAgICAgICAgICAgICBTeW1ib2xpYyBPcGVyYW5kIE1vZGlmaWVycy4gCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVQcm9fMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMGU4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUxFUHJvLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sI1RJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJUSUxFLUd4LURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IlY4NTAtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElMRVByby1EZXBlbmRlbnQiPjwvYT4KKzxhIG5hbWU9IlRJTEVQcm9fMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWODUwXzAwMmREZXBlbmRlbnQuaHRtbCNWODUwXzAwMmREZXBlbmRlbnQiPlY4NTAtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sI1RJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQiPlRJTEUtR3gtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjQzIFRJTEVQcm8gRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtVElMRVByby1zdXBwb3J0LTIwNDAiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlRJTEVQcm8tT3B0aW9ucy5odG1sI1RJTEVQcm8tT3B0aW9ucyI+VElMRVBybyBPcHRpb25zPC9hPjogCQlUSUxFUHJvIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlRJTEVQcm8tU3ludGF4Lmh0bWwjVElMRVByby1TeW50YXgiPlRJTEVQcm8gU3ludGF4PC9hPjogCQlUSUxFUHJvIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVElMRVByby1EaXJlY3RpdmVzLmh0bWwjVElMRVByby1EaXJlY3RpdmVzIj5USUxFUHJvIERpcmVjdGl2ZXM8L2E+OiAJCVRJTEVQcm8gRGlyZWN0aXZlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRV8wMDJkR3gtRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRV8wMDJkR3gtRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDkwODAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeC1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElMRS1HeCBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUxFXzAwMmRHeF8wMDJkRGVwZW5kZW50Lmh0bWwjVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJTEUtR3gtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwjVElMRV8wMDJkR3gtU3ludGF4IiB0aXRsZT0iVElMRS1HeCBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUxFLUd4LURpcmVjdGl2ZXMiPjwvYT4KKzxhIG5hbWU9IlRJTEVfMDAyZEd4LURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSUxFXzAwMmRHeC1TeW50YXguaHRtbCNUSUxFXzAwMmRHeC1TeW50YXgiPlRJTEUtR3ggU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sI1RJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQiPlRJTEUtR3gtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40Mi4zIFRJTEUtR3ggRGlyZWN0aXZlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1hY2hpbmUtZGlyZWN0aXZlc18wMDJjLVRJTEVfMDAyZEd4LTIwMzUiPjwvYT48YSBuYW1lPSJpbmRleC1USUxFXzAwMmRHeC1tYWNoaW5lLWRpcmVjdGl2ZXMtMjAzNiI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVhbGlnbl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJTEVfMDAyZEd4LTIwMzciPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LmFsaWduIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4gWywgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPlRoaXMgaXMgdGhlIGdlbmVyaWMgPHZhcj4uYWxpZ248L3Zhcj4gZGlyZWN0aXZlLiAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZQorcmVxdWVzdGVkIGFsaWdubWVudCBpbiBieXRlcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlYWxsb3dfMDA1ZnN1c3BpY2lvdXNfMDA1ZmJ1bmRsZXNfMDA3ZC1kaXJlY3RpdmVfMDAyYy1USUxFXzAwMmRHeC0yMDM4Ij48L2E+PGJyPjxkdD48Y29kZT4uYWxsb3dfc3VzcGljaW91c19idW5kbGVzPC9jb2RlPjxkZD5UdXJucyBvbiBlcnJvciBjaGVja2luZyBmb3IgY29tYmluYXRpb25zIG9mIGluc3RydWN0aW9ucyBpbiBhIGJ1bmRsZQordGhhdCBwcm9iYWJseSBpbmRpY2F0ZSBhIHByb2dyYW1taW5nIGVycm9yLiAgVGhpcyBpcyBvbiBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Lm5vX2FsbG93X3N1c3BpY2lvdXNfYnVuZGxlczwvY29kZT48ZGQ+VHVybnMgb2ZmIGVycm9yIGNoZWNraW5nIGZvciBjb21iaW5hdGlvbnMgb2YgaW5zdHJ1Y3Rpb25zIGluIGEgYnVuZGxlCit0aGF0IHByb2JhYmx5IGluZGljYXRlIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXJlcXVpcmVfMDA1ZmNhbm9uaWNhbF8wMDVmcmVnXzAwNWZuYW1lc18wMDdkLWRpcmVjdGl2ZV8wMDJjLVRJTEVfMDAyZEd4LTIwMzkiPjwvYT48YnI+PGR0Pjxjb2RlPi5yZXF1aXJlX2Nhbm9uaWNhbF9yZWdfbmFtZXM8L2NvZGU+PGRkPlJlcXVpcmUgdGhhdCBjYW5vbmljYWwgcmVnaXN0ZXIgbmFtZXMgYmUgdXNlZCwgYW5kIGVtaXQgYSB3YXJuaW5nIGlmCit0aGUgbnVtZXJpYyBuYW1lcyBhcmUgdXNlZC4gIFRoaXMgaXMgb24gYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi5ub19yZXF1aXJlX2Nhbm9uaWNhbF9yZWdfbmFtZXM8L2NvZGU+PGRkPlBlcm1pdCB0aGUgdXNlIG9mIG51bWVyaWMgbmFtZXMgZm9yIHJlZ2lzdGVycyB0aGF0IGhhdmUgY2Fub25pY2FsCituYW1lcy4KKworICAgPC9kbD4KKworPCEtLSBDb3B5cmlnaHQgMjAxMSAtLT4KKzwhLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeC1Nb2RpZmllcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVfMDAyZEd4LU1vZGlmaWVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MmEwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeC1Nb2RpZmllcnMuaHRtbApAQCAtMCwwICsxLDE3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElMRS1HeCBNb2RpZmllcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRJTEVfMDAyZEd4LVN5bnRheC5odG1sI1RJTEVfMDAyZEd4LVN5bnRheCIgdGl0bGU9IlRJTEUtR3ggU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElMRV8wMDJkR3gtUmVnaXN0ZXJzLmh0bWwjVElMRV8wMDJkR3gtUmVnaXN0ZXJzIiB0aXRsZT0iVElMRS1HeCBSZWdpc3RlcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUxFLUd4LU1vZGlmaWVycyI+PC9hPgorPGEgbmFtZT0iVElMRV8wMDJkR3gtTW9kaWZpZXJzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElMRV8wMDJkR3gtUmVnaXN0ZXJzLmh0bWwjVElMRV8wMDJkR3gtUmVnaXN0ZXJzIj5USUxFLUd4IFJlZ2lzdGVyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJTEVfMDAyZEd4LVN5bnRheC5odG1sI1RJTEVfMDAyZEd4LVN5bnRheCI+VElMRS1HeCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQyLjIuMyBTeW1ib2xpYyBPcGVyYW5kIE1vZGlmaWVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTEVfMDAyZEd4LW1vZGlmaWVycy0yMDMzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLW1vZGlmaWVyc18wMDJjLVRJTEVfMDAyZEd4LTIwMzQiPjwvYT4KK1RoZSBhc3NlbWJsZXIgc3VwcG9ydHMgc2V2ZXJhbCBtb2RpZmllcnMgd2hlbiB1c2luZyBzeW1ib2wgYWRkcmVzc2VzCitpbiBUSUxFLUd4IGluc3RydWN0aW9uIG9wZXJhbmRzLiAgVGhlIGdlbmVyYWwgc3ludGF4IGlzIHRoZSBmb2xsb3dpbmc6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBtb2RpZmllcihzeW1ib2wpCis8L3ByZT4KKyAgIDxwPlRoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPmh3MDwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gbG9hZCBiaXRzIDAtMTUgb2YgdGhlIHN5bWJvbCdzIGFkZHJlc3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT5odzE8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIGxvYWQgYml0cyAxNi0zMSBvZiB0aGUgc3ltYm9sJ3MgYWRkcmVzcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmh3MjwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gbG9hZCBiaXRzIDMyLTQ3IG9mIHRoZSBzeW1ib2wncyBhZGRyZXNzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aHczPC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIGJpdHMgNDgtNjMgb2YgdGhlIHN5bWJvbCdzIGFkZHJlc3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT5odzBfbGFzdDwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIHlpZWxkcyB0aGUgc2FtZSB2YWx1ZSBhcyA8Y29kZT5odzA8L2NvZGU+LCBidXQgaXQgYWxzbyBjaGVja3MKK3RoYXQgdGhlIHZhbHVlIGRvZXMgbm90IG92ZXJmbG93LgorCisgICAgIDxicj48ZHQ+PGNvZGU+aHcxX2xhc3Q8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciB5aWVsZHMgdGhlIHNhbWUgdmFsdWUgYXMgPGNvZGU+aHcxPC9jb2RlPiwgYnV0IGl0IGFsc28gY2hlY2tzCit0aGF0IHRoZSB2YWx1ZSBkb2VzIG5vdCBvdmVyZmxvdy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmh3Ml9sYXN0PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgeWllbGRzIHRoZSBzYW1lIHZhbHVlIGFzIDxjb2RlPmh3MjwvY29kZT4sIGJ1dCBpdCBhbHNvIGNoZWNrcwordGhhdCB0aGUgdmFsdWUgZG9lcyBub3Qgb3ZlcmZsb3cuCisKKyAgICAgPHA+QSA0OC1iaXQgc3ltYm9saWMgdmFsdWUgaXMgY29uc3RydWN0ZWQgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBpZGlvbToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBtb3ZlbGkgcjAsIGh3Ml9sYXN0KHN5bSkKKyAgICAgICAgICBzaGwxNmluc2xpIHIwLCByMCwgaHcxKHN5bSkKKyAgICAgICAgICBzaGwxNmluc2xpIHIwLCByMCwgaHcwKHN5bSkKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmh3MF9nb3Q8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIGxvYWQgYml0cyAwLTE1IG9mIHRoZSBzeW1ib2wncyBvZmZzZXQgaW4gdGhlCitHT1QgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgc3ltYm9sLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aHcwX2xhc3RfZ290PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgeWllbGRzIHRoZSBzYW1lIHZhbHVlIGFzIDxjb2RlPmh3MF9nb3Q8L2NvZGU+LCBidXQgaXQgYWxzbworY2hlY2tzIHRoYXQgdGhlIHZhbHVlIGRvZXMgbm90IG92ZXJmbG93LgorCisgICAgIDxicj48ZHQ+PGNvZGU+aHcxX2xhc3RfZ290PC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIGJpdHMgMTYtMzEgb2YgdGhlIHN5bWJvbCdzIG9mZnNldCBpbiB0aGUKK0dPVCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzeW1ib2wsIGFuZCBpdCBhbHNvIGNoZWNrcyB0aGF0IHRoZQordmFsdWUgZG9lcyBub3Qgb3ZlcmZsb3cuCisKKyAgICAgPGJyPjxkdD48Y29kZT5wbHQ8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIGZvciBmdW5jdGlvbiBzeW1ib2xzLiAgSXQgY2F1c2VzIGEKKzxlbT5wcm9jZWR1cmUgbGlua2FnZSB0YWJsZTwvZW0+LCBhbiBhcnJheSBvZiBjb2RlIHN0dWJzLCB0byBiZSBjcmVhdGVkCithdCB0aGUgdGltZSB0aGUgc2hhcmVkIG9iamVjdCBpcyBjcmVhdGVkIG9yIGxpbmtlZCBhZ2FpbnN0LCB0b2dldGhlcgord2l0aCBhIGdsb2JhbCBvZmZzZXQgdGFibGUgZW50cnkuICBUaGUgdmFsdWUgaXMgYSBwYy1yZWxhdGl2ZSBvZmZzZXQKK3RvIHRoZSBjb3JyZXNwb25kaW5nIHN0dWIgY29kZSBpbiB0aGUgcHJvY2VkdXJlIGxpbmthZ2UgdGFibGUuICBUaGlzCithcnJhbmdlbWVudCBjYXVzZXMgdGhlIHJ1bi10aW1lIHN5bWJvbCByZXNvbHZlciB0byBiZSBjYWxsZWQgdG8gbG9vawordXAgYW5kIHNldCB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbCB0aGUgZmlyc3QgdGltZSB0aGUgZnVuY3Rpb24gaXMKK2NhbGxlZCAoYXQgbGF0ZXN0OyBkZXBlbmRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzKS4gIEl0IGlzIG9ubHkgc2FmZQordG8gbGVhdmUgdGhlIHN5bWJvbCB1bnJlc29sdmVkIHRoaXMgd2F5IGlmIGFsbCByZWZlcmVuY2VzIGFyZSBmdW5jdGlvbgorY2FsbHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5odzBfdGxzX2dkPC9jb2RlPjxkZD4KK1RoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBsb2FkIGJpdHMgMC0xNSBvZiB0aGUgb2Zmc2V0IG9mIHRoZSBHT1QgZW50cnkKK29mIHRoZSBzeW1ib2wncyBUTFMgZGVzY3JpcHRvciwgdG8gYmUgdXNlZCBmb3IgZ2VuZXJhbC1keW5hbWljIFRMUworYWNjZXNzZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5odzBfbGFzdF90bHNfZ2Q8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciB5aWVsZHMgdGhlIHNhbWUgdmFsdWUgYXMgPGNvZGU+aHcwX3Rsc19nZDwvY29kZT4sIGJ1dCBpdCBhbHNvCitjaGVja3MgdGhhdCB0aGUgdmFsdWUgZG9lcyBub3Qgb3ZlcmZsb3cuCisKKyAgICAgPGJyPjxkdD48Y29kZT5odzFfbGFzdF90bHNfZ2Q8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIGxvYWQgYml0cyAxNi0zMSBvZiB0aGUgb2Zmc2V0IG9mIHRoZSBHT1QKK2VudHJ5IG9mIHRoZSBzeW1ib2wncyBUTFMgZGVzY3JpcHRvciwgdG8gYmUgdXNlZCBmb3IgZ2VuZXJhbC1keW5hbWljCitUTFMgYWNjZXNzZXMuICBJdCBhbHNvIGNoZWNrcyB0aGF0IHRoZSB2YWx1ZSBkb2VzIG5vdCBvdmVyZmxvdy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmh3MF90bHNfaWU8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIGxvYWQgYml0cyAwLTE1IG9mIHRoZSBvZmZzZXQgb2YgdGhlIEdPVCBlbnRyeQorY29udGFpbmluZyB0aGUgb2Zmc2V0IG9mIHRoZSBzeW1ib2wncyBhZGRyZXNzIGZyb20gdGhlIFRDQiwgdG8gYmUgdXNlZAorZm9yIGluaXRpYWwtZXhlYyBUTFMgYWNjZXNzZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5odzBfbGFzdF90bHNfaWU8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciB5aWVsZHMgdGhlIHNhbWUgdmFsdWUgYXMgPGNvZGU+aHcwX3Rsc19pZTwvY29kZT4sIGJ1dCBpdCBhbHNvCitjaGVja3MgdGhhdCB0aGUgdmFsdWUgZG9lcyBub3Qgb3ZlcmZsb3cuCisKKyAgICAgPGJyPjxkdD48Y29kZT5odzFfbGFzdF90bHNfaWU8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIGxvYWQgYml0cyAxNi0zMSBvZiB0aGUgb2Zmc2V0IG9mIHRoZSBHT1QKK2VudHJ5IGNvbnRhaW5pbmcgdGhlIG9mZnNldCBvZiB0aGUgc3ltYm9sJ3MgYWRkcmVzcyBmcm9tIHRoZSBUQ0IsIHRvCitiZSB1c2VkIGZvciBpbml0aWFsLWV4ZWMgVExTIGFjY2Vzc2VzLiAgSXQgYWxzbyBjaGVja3MgdGhhdCB0aGUgdmFsdWUKK2RvZXMgbm90IG92ZXJmbG93LgorCisgICAgIDxicj48ZHQ+PGNvZGU+aHcwX3Rsc19sZTwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gbG9hZCBiaXRzIDAtMTUgb2YgdGhlIG9mZnNldCBvZiB0aGUgc3ltYm9sJ3MKK2FkZHJlc3MgZnJvbSB0aGUgVENCLCB0byBiZSB1c2VkIGZvciBsb2NhbC1leGVjIFRMUyBhY2Nlc3Nlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmh3MF9sYXN0X3Rsc19sZTwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIHlpZWxkcyB0aGUgc2FtZSB2YWx1ZSBhcyA8Y29kZT5odzBfdGxzX2xlPC9jb2RlPiwgYnV0IGl0IGFsc28KK2NoZWNrcyB0aGF0IHRoZSB2YWx1ZSBkb2VzIG5vdCBvdmVyZmxvdy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmh3MV9sYXN0X3Rsc19sZTwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gbG9hZCBiaXRzIDE2LTMxIG9mIHRoZSBvZmZzZXQgb2YgdGhlIHN5bWJvbCdzCithZGRyZXNzIGZyb20gdGhlIFRDQiwgdG8gYmUgdXNlZCBmb3IgbG9jYWwtZXhlYyBUTFMgYWNjZXNzZXMuICBJdAorYWxzbyBjaGVja3MgdGhhdCB0aGUgdmFsdWUgZG9lcyBub3Qgb3ZlcmZsb3cuCisKKyAgICAgPGJyPjxkdD48Y29kZT50bHNfZ2RfY2FsbDwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gdGFnIGFuIGluc3RydXRpb24gYXMgdGhlICZsZHF1bztjYWxsJnJkcXVvOyBwYXJ0IG9mIGEKK2NhbGxpbmcgc2VxdWVuY2UgZm9yIGEgVExTIEdEIHJlZmVyZW5jZSBvZiBpdHMgb3BlcmFuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRsc19nZF9hZGQ8L2NvZGU+PGRkPgorVGhpcyBtb2RpZmllciBpcyB1c2VkIHRvIHRhZyBhbiBpbnN0cnVjdGlvbiBhcyB0aGUgJmxkcXVvO2FkZCZyZHF1bzsgcGFydCBvZiBhCitjYWxsaW5nIHNlcXVlbmNlIGZvciBhIFRMUyBHRCByZWZlcmVuY2Ugb2YgaXRzIG9wZXJhbmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT50bHNfaWVfbG9hZDwvY29kZT48ZGQ+CitUaGlzIG1vZGlmaWVyIGlzIHVzZWQgdG8gdGFnIGFuIGluc3RydWN0aW9uIGFzIHRoZSAmbGRxdW87bG9hZCZyZHF1bzsgcGFydCBvZiBhCitjYWxsaW5nIHNlcXVlbmNlIGZvciBhIFRMUyBJRSByZWZlcmVuY2Ugb2YgaXRzIG9wZXJhbmQuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVfMDAyZEd4LU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVfMDAyZEd4LU9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2E2ZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRV8wMDJkR3gtT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJTEUtR3ggT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwjVElMRV8wMDJkR3gtU3ludGF4IiB0aXRsZT0iVElMRS1HeCBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUxFXzAwMmRHeC1SZWdpc3RlcnMuaHRtbCNUSUxFXzAwMmRHeC1SZWdpc3RlcnMiIHRpdGxlPSJUSUxFLUd4IFJlZ2lzdGVycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJTEUtR3gtT3Bjb2RlcyI+PC9hPgorPGEgbmFtZT0iVElMRV8wMDJkR3gtT3Bjb2RlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUxFXzAwMmRHeC1SZWdpc3RlcnMuaHRtbCNUSUxFXzAwMmRHeC1SZWdpc3RlcnMiPlRJTEUtR3ggUmVnaXN0ZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwjVElMRV8wMDJkR3gtU3ludGF4Ij5USUxFLUd4IFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNDIuMi4xIE9wY29kZSBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTEVfMDAyZEd4LW9wY29kZS1uYW1lcy0yMDI5Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3Bjb2RlLW5hbWVzXzAwMmMtVElMRV8wMDJkR3gtMjAzMCI+PC9hPgorRm9yIGEgY29tcGxldGUgbGlzdCBvZiBvcGNvZGVzIGFuZCBkZXNjcmlwdGlvbnMgb2YgdGhlaXIgc2VtYW50aWNzLAorc2VlIDxjaXRlPlRJTEUtR3ggSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZTwvY2l0ZT4sIGF2YWlsYWJsZSB1cG9uCityZXF1ZXN0IGF0IHd3dy50aWxlcmEuY29tLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIxMzQzMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUxFLUd4IE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFXzAwMmRHeF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElMRS1HeC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUxFXzAwMmRHeC1TeW50YXguaHRtbCNUSUxFXzAwMmRHeC1TeW50YXgiIHRpdGxlPSJUSUxFLUd4IFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJTEUtR3gtT3B0aW9ucyI+PC9hPgorPGEgbmFtZT0iVElMRV8wMDJkR3gtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUxFXzAwMmRHeC1TeW50YXguaHRtbCNUSUxFXzAwMmRHeC1TeW50YXgiPlRJTEUtR3ggU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sI1RJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQiPlRJTEUtR3gtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40Mi4xIE9wdGlvbnM8L2g0PgorCis8cD5UaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIGFsbCBhdmFpbGFibGUgVElMRS1HeCBzcGVjaWZpYyBvcHRpb25zOgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtMzJfMDA3ZC1vcHRpb25fMDAyYy1USUxFXzAwMmRHeC0yMDIzIj48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbTY0XzAwN2Qtb3B0aW9uXzAwMmMtVElMRV8wMDJkR3gtMjAyNCI+PC9hPgorPGRsPjxkdD48Y29kZT4tbTMyIHwgLW02NDwvY29kZT48ZGQ+U2VsZWN0IHRoZSB3b3JkIHNpemUsIGVpdGhlciAzMiBiaXRzIG9yIDY0IGJpdHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZEVCXzAwN2Qtb3B0aW9uXzAwMmMtVElMRV8wMDJkR3gtMjAyNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRFTF8wMDdkLW9wdGlvbl8wMDJjLVRJTEVfMDAyZEd4LTIwMjYiPjwvYT48YnI+PGR0Pjxjb2RlPi1FQiB8IC1FTDwvY29kZT48ZGQ+U2VsZWN0IHRoZSBlbmRpYW5uZXNzLCBlaXRoZXIgYmlnLWVuZGlhbiAoLUVCKSBvciBsaXR0bGUtZW5kaWFuICgtRUwpLgorCisgICA8L2RsPgorICAgPCEtLSBtYW4gZW5kIC0tPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeC1SZWdpc3RlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RJTEVfMDAyZEd4LVJlZ2lzdGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjgwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeC1SZWdpc3RlcnMuaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUxFLUd4IFJlZ2lzdGVycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwjVElMRV8wMDJkR3gtU3ludGF4IiB0aXRsZT0iVElMRS1HeCBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSUxFXzAwMmRHeC1PcGNvZGVzLmh0bWwjVElMRV8wMDJkR3gtT3Bjb2RlcyIgdGl0bGU9IlRJTEUtR3ggT3Bjb2RlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJTEVfMDAyZEd4LU1vZGlmaWVycy5odG1sI1RJTEVfMDAyZEd4LU1vZGlmaWVycyIgdGl0bGU9IlRJTEUtR3ggTW9kaWZpZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElMRS1HeC1SZWdpc3RlcnMiPjwvYT4KKzxhIG5hbWU9IlRJTEVfMDAyZEd4LVJlZ2lzdGVycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUxFXzAwMmRHeC1Nb2RpZmllcnMuaHRtbCNUSUxFXzAwMmRHeC1Nb2RpZmllcnMiPlRJTEUtR3ggTW9kaWZpZXJzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElMRV8wMDJkR3gtT3Bjb2Rlcy5odG1sI1RJTEVfMDAyZEd4LU9wY29kZXMiPlRJTEUtR3ggT3Bjb2RlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRJTEVfMDAyZEd4LVN5bnRheC5odG1sI1RJTEVfMDAyZEd4LVN5bnRheCI+VElMRS1HeCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQyLjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTEVfMDAyZEd4LXJlZ2lzdGVyLW5hbWVzLTIwMzEiPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3Rlci1uYW1lc18wMDJjLVRJTEVfMDAyZEd4LTIwMzIiPjwvYT4KK0dlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgYXJlIHJlcHJlc2VudGVkIGJ5IHByZWRlZmluZWQgc3ltYm9scyBvZiB0aGUKK2Zvcm0gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yPC9zcGFuPjx2YXI+TjwvdmFyPjwvc2FtcD4mcnNxdW87LCB3aGVyZSA8dmFyPk48L3Zhcj4gcmVwcmVzZW50cyBhIG51bWJlciBiZXR3ZWVuCis8Y29kZT4wPC9jb2RlPiBhbmQgPGNvZGU+NjM8L2NvZGU+LiAgSG93ZXZlciwgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgaGF2ZQorY2Fub25pY2FsIG5hbWVzIHRoYXQgbXVzdCBiZSB1c2VkIGluc3RlYWQ6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnI1NDwvY29kZT48ZGQ+c3AKKworICAgICA8YnI+PGR0Pjxjb2RlPnI1NTwvY29kZT48ZGQ+bHIKKworICAgICA8YnI+PGR0Pjxjb2RlPnI1NjwvY29kZT48ZGQ+c24KKworICAgICA8YnI+PGR0Pjxjb2RlPnI1NzwvY29kZT48ZGQ+aWRuMAorCisgICAgIDxicj48ZHQ+PGNvZGU+cjU4PC9jb2RlPjxkZD5pZG4xCisKKyAgICAgPGJyPjxkdD48Y29kZT5yNTk8L2NvZGU+PGRkPnVkbjAKKworICAgICA8YnI+PGR0Pjxjb2RlPnI2MDwvY29kZT48ZGQ+dWRuMQorCisgICAgIDxicj48ZHQ+PGNvZGU+cjYxPC9jb2RlPjxkZD51ZG4yCisKKyAgICAgPGJyPjxkdD48Y29kZT5yNjI8L2NvZGU+PGRkPnVkbjMKKworICAgICA8YnI+PGR0Pjxjb2RlPnI2MzwvY29kZT48ZGQ+emVybworCisgICA8L2RsPgorCisgICA8cD5UaGUgYXNzZW1ibGVyIHdpbGwgZW1pdCBhIHdhcm5pbmcgaWYgYSBudW1lcmljIG5hbWUgaXMgdXNlZCBpbnN0ZWFkIG9mCit0aGUgbm9uLW51bWVyaWMgbmFtZS4gIFRoZSA8Y29kZT4ubm9fcmVxdWlyZV9jYW5vbmljYWxfcmVnX25hbWVzPC9jb2RlPgorYXNzZW1ibGVyIHBzZXVkby1vcCB0dXJucyBvZmYgdGhpcword2FybmluZy4gPGNvZGU+LnJlcXVpcmVfY2Fub25pY2FsX3JlZ19uYW1lczwvY29kZT4gdHVybnMgaXQgYmFjayBvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeC1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJiZTYyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRV8wMDJkR3gtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSwxMDYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJTEUtR3ggU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUSUxFXzAwMmRHeF8wMDJkRGVwZW5kZW50Lmh0bWwjVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudCIgdGl0bGU9IlRJTEUtR3gtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI1RJTEVfMDAyZEd4LU9wdGlvbnMiIHRpdGxlPSJUSUxFLUd4IE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUxFXzAwMmRHeC1EaXJlY3RpdmVzLmh0bWwjVElMRV8wMDJkR3gtRGlyZWN0aXZlcyIgdGl0bGU9IlRJTEUtR3ggRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJTEUtR3gtU3ludGF4Ij48L2E+Cis8YSBuYW1lPSJUSUxFXzAwMmRHeC1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElMRV8wMDJkR3gtRGlyZWN0aXZlcy5odG1sI1RJTEVfMDAyZEd4LURpcmVjdGl2ZXMiPlRJTEUtR3ggRGlyZWN0aXZlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1PcHRpb25zIj5USUxFLUd4IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUSUxFXzAwMmRHeF8wMDJkRGVwZW5kZW50Lmh0bWwjVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudCI+VElMRS1HeC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQyLjIgU3ludGF4PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtVElMRV8wMDJkR3gtc3ludGF4LTIwMjciPjwvYT48YSBuYW1lPSJpbmRleC1zeW50YXhfMDAyYy1USUxFXzAwMmRHeC0yMDI4Ij48L2E+CitCbG9jayBjb21tZW50cyBhcmUgZGVsaW1pdGVkIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lyo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ki88L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBFbmQgb2YgbGluZQorY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5JbnN0cnVjdGlvbnMgY29uc2lzdCBvZiBhIGxlYWRpbmcgb3Bjb2RlIG9yIG1hY3JvIG5hbWUgZm9sbG93ZWQgYnkKK3doaXRlc3BhY2UgYW5kIGFuIG9wdGlvbmFsIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9wZXJhbmRzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPHZhcj5vcGNvZGU8L3Zhcj4gWzx2YXI+b3BlcmFuZDwvdmFyPiwgLi4uXQorPC9wcmU+CisgICA8cD5JbnN0cnVjdGlvbnMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lIG9yIHNlbWljb2xvbi4KKworICAgPHA+VGhlcmUgYXJlIHR3byB3YXlzIHRvIHdyaXRlIGNvZGU6IGVpdGhlciB3cml0ZSBuYWtlZCBpbnN0cnVjdGlvbnMsCit3aGljaCB0aGUgYXNzZW1ibGVyIGlzIGZyZWUgdG8gY29tYmluZSBpbnRvIFZMSVcgYnVuZGxlcywgb3Igc3BlY2lmeQordGhlIFZMSVcgYnVuZGxlcyBleHBsaWNpdGx5LgorCisgICA8cD5CdW5kbGVzIGFyZSBzcGVjaWZpZWQgdXNpbmcgY3VybHkgYnJhY2VzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgeyA8dmFyPmFkZDwvdmFyPiByMyxyNCxyNSA7IDx2YXI+YWRkPC92YXI+IHI3LHI4LHI5IDsgPHZhcj5sdzwvdmFyPiByMTAscjExIH0KKzwvcHJlPgorICAgPHA+QSBidW5kbGUgY2FuIHNwYW4gbXVsdGlwbGUgbGluZXMuIElmIHlvdSB3YW50IHRvIHB1dCBtdWx0aXBsZQoraW5zdHJ1Y3Rpb25zIG9uIGEgbGluZSwgd2hldGhlciBpbiBhIGJ1bmRsZSBvciBub3QsIHlvdSBuZWVkIHRvCitzZXBhcmF0ZSB0aGVtIHdpdGggc2VtaWNvbG9ucyBhcyBpbiB0aGlzIGV4YW1wbGUuCisKKyAgIDxwPkEgYnVuZGxlIG1heSBjb250YWluIG9uZSBvciBtb3JlIGluc3RydWN0aW9ucywgdXAgdG8gdGhlIGxpbWl0CitzcGVjaWZpZWQgYnkgdGhlIElTQSAoY3VycmVudGx5IHRocmVlKS4gSWYgZmV3ZXIgaW5zdHJ1Y3Rpb25zIGFyZQorc3BlY2lmaWVkIHRoYW4gdGhlIGhhcmR3YXJlIHN1cHBvcnRzIGluIGEgYnVuZGxlLCB0aGUgYXNzZW1ibGVyCitpbnNlcnRzIDxjb2RlPmZub3A8L2NvZGU+IGluc3RydWN0aW9ucyBhdXRvbWF0aWNhbGx5LgorCisgICA8cD5UaGUgYXNzZW1ibGVyIHdpbGwgcHJlZmVyIHRvIHByZXNlcnZlIHRoZSBvcmRlcmluZyBvZiBpbnN0cnVjdGlvbnMKK3dpdGhpbiB0aGUgYnVuZGxlLCBwdXR0aW5nIHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBpbiBhIGxvd2VyLW51bWJlcmVkCitwaXBlbGluZSB0aGFuIHRoZSBuZXh0IG9uZSwgZXRjLiAgVGhpcyBmYWN0LCBjb21iaW5lZCB3aXRoIHRoZQorb3B0aW9uYWwgdXNlIG9mIGV4cGxpY2l0IDxjb2RlPmZub3A8L2NvZGU+IG9yIDxjb2RlPm5vcDwvY29kZT4gaW5zdHJ1Y3Rpb25zLAorYWxsb3dzIHByZWNpc2UgY29udHJvbCBvdmVyIHdoaWNoIHBpcGVsaW5lIGV4ZWN1dGVzIGVhY2ggaW5zdHJ1Y3Rpb24uCisKKyAgIDxwPklmIHRoZSBpbnN0cnVjdGlvbnMgY2Fubm90IGJlIGJ1bmRsZWQgaW4gdGhlIGxpc3RlZCBvcmRlciwgdGhlCithc3NlbWJsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSB0byBmaW5kIGEgdmFsaWQgcGlwZWxpbmUKK2Fzc2lnbm1lbnQuIElmIHRoZXJlIGlzIG5vIHdheSB0byBidW5kbGUgdGhlIGluc3RydWN0aW9ucyB0b2dldGhlciwKK3RoZSBhc3NlbWJsZXIgcmVwb3J0cyBhbiBlcnJvci4KKworICAgPHA+VGhlIGFzc2VtYmxlciBkb2VzIG5vdCB5ZXQgYXV0by1idW5kbGUgKGF1dG9tYXRpY2FsbHkgY29tYmluZSBtdWx0aXBsZQoraW5zdHJ1Y3Rpb25zIGludG8gb25lIGJ1bmRsZSksIGJ1dCBpdCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gZG8gc28gaW4KK3RoZSBmdXR1cmUuICBJZiB5b3Ugd2FudCB0byBmb3JjZSBhbiBpbnN0cnVjdGlvbiB0byBydW4gYnkgaXRzZWxmLCBwdXQKK2l0IGluIGEgYnVuZGxlIGV4cGxpY2l0bHkgd2l0aCBjdXJseSBicmFjZXMgYW5kIHVzZSA8Y29kZT5ub3A8L2NvZGU+CitpbnN0cnVjdGlvbnMgKG5vdCA8Y29kZT5mbm9wPC9jb2RlPikgdG8gZmlsbCB0aGUgcmVtYWluaW5nIHBpcGVsaW5lIHNsb3RzIGluCit0aGF0IGJ1bmRsZS4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlRJTEVfMDAyZEd4LU9wY29kZXMuaHRtbCNUSUxFXzAwMmRHeC1PcGNvZGVzIj5USUxFLUd4IE9wY29kZXM8L2E+OiAgICAgICAgICAgICAgIE9wY29kZSBOYW1pbmcgQ29udmVudGlvbnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iVElMRV8wMDJkR3gtUmVnaXN0ZXJzLmh0bWwjVElMRV8wMDJkR3gtUmVnaXN0ZXJzIj5USUxFLUd4IFJlZ2lzdGVyczwvYT46ICAgICAgICAgICAgIFJlZ2lzdGVyIE5hbWluZy4gCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJUSUxFXzAwMmRHeC1Nb2RpZmllcnMuaHRtbCNUSUxFXzAwMmRHeC1Nb2RpZmllcnMiPlRJTEUtR3ggTW9kaWZpZXJzPC9hPjogICAgICAgICAgICAgU3ltYm9saWMgT3BlcmFuZCBNb2RpZmllcnMuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTdmODgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9USUxFXzAwMmRHeF8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElMRS1HeC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJQzZYXzAwMmREZXBlbmRlbnQuaHRtbCNUSUM2WF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElDNlgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVElMRVByb18wMDJkRGVwZW5kZW50Lmh0bWwjVElMRVByb18wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElMRVByby1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUxFLUd4LURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFUHJvXzAwMmREZXBlbmRlbnQiPlRJTEVQcm8tRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVElDNlhfMDAyZERlcGVuZGVudC5odG1sI1RJQzZYXzAwMmREZXBlbmRlbnQiPlRJQzZYLURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS40MiBUSUxFLUd4IERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVRJTEVfMDAyZEd4LXN1cHBvcnQtMjAyMiI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI1RJTEVfMDAyZEd4LU9wdGlvbnMiPlRJTEUtR3ggT3B0aW9uczwvYT46IAkJVElMRS1HeCBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJUSUxFXzAwMmRHeC1TeW50YXguaHRtbCNUSUxFXzAwMmRHeC1TeW50YXgiPlRJTEUtR3ggU3ludGF4PC9hPjogCQlUSUxFLUd4IFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVElMRV8wMDJkR3gtRGlyZWN0aXZlcy5odG1sI1RJTEVfMDAyZEd4LURpcmVjdGl2ZXMiPlRJTEUtR3ggRGlyZWN0aXZlczwvYT46IAkJVElMRS1HeCBEaXJlY3RpdmVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9UYWcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RhZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YjcxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9UYWcuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UYWcgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlN5bXZlci5odG1sI1N5bXZlciIgdGl0bGU9IlN5bXZlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRleHQuaHRtbCNUZXh0IiB0aXRsZT0iVGV4dCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRhZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUZXh0Lmh0bWwjVGV4dCI+VGV4dDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN5bXZlci5odG1sI1N5bXZlciI+U3ltdmVyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjExMiA8Y29kZT4udGFnIDwvY29kZT48dmFyPnN0cnVjdG5hbWU8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1DT0ZGLXN0cnVjdHVyZS1kZWJ1Z2dpbmctNDg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RydWN0dXJlLWRlYnVnZ2luZ18wMDJjLUNPRkYtNDg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YWdfMDA3ZC1kaXJlY3RpdmUtNDg4Ij48L2E+VGhpcyBkaXJlY3RpdmUgaXMgZ2VuZXJhdGVkIGJ5IGNvbXBpbGVycyB0byBpbmNsdWRlIGF1eGlsaWFyeSBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGluIHRoZSBzeW1ib2wgdGFibGUuICBJdCBpcyBvbmx5IHBlcm1pdHRlZCBpbnNpZGUKKzxjb2RlPi5kZWY8L2NvZGU+Lzxjb2RlPi5lbmRlZjwvY29kZT4gcGFpcnMuICBUYWdzIGFyZSB1c2VkIHRvIGxpbmsgc3RydWN0dXJlCitkZWZpbml0aW9ucyBpbiB0aGUgc3ltYm9sIHRhYmxlIHdpdGggaW5zdGFuY2VzIG9mIHRob3NlIHN0cnVjdHVyZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RleHQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RleHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQ1ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVGV4dC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRleHQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRhZy5odG1sI1RhZyIgdGl0bGU9IlRhZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRpdGxlLmh0bWwjVGl0bGUiIHRpdGxlPSJUaXRsZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRleHQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVGl0bGUuaHRtbCNUaXRsZSI+VGl0bGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUYWcuaHRtbCNUYWciPlRhZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMTMgPGNvZGU+LnRleHQgPC9jb2RlPjx2YXI+c3Vic2VjdGlvbjwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGV4dF8wMDdkLWRpcmVjdGl2ZS00ODkiPjwvYT5UZWxscyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiB0byBhc3NlbWJsZSB0aGUgZm9sbG93aW5nIHN0YXRlbWVudHMgb250byB0aGUgZW5kIG9mCit0aGUgdGV4dCBzdWJzZWN0aW9uIG51bWJlcmVkIDx2YXI+c3Vic2VjdGlvbjwvdmFyPiwgd2hpY2ggaXMgYW4gYWJzb2x1dGUKK2V4cHJlc3Npb24uICBJZiA8dmFyPnN1YnNlY3Rpb248L3Zhcj4gaXMgb21pdHRlZCwgc3Vic2VjdGlvbiBudW1iZXIgemVybworaXMgdXNlZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVGl0bGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RpdGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzZTllZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RpdGxlLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VGl0bGUgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRleHQuaHRtbCNUZXh0IiB0aXRsZT0iVGV4dCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlR5cGUuaHRtbCNUeXBlIiB0aXRsZT0iVHlwZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRpdGxlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlR5cGUuaHRtbCNUeXBlIj5UeXBlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVGV4dC5odG1sI1RleHQiPlRleHQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTE0IDxjb2RlPi50aXRsZSAiPC9jb2RlPjx2YXI+aGVhZGluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0aXRsZV8wMDdkLWRpcmVjdGl2ZS00OTAiPjwvYT48YSBuYW1lPSJpbmRleC1saXN0aW5nLWNvbnRyb2xfMDAzYS10aXRsZS1saW5lLTQ5MSI+PC9hPlVzZSA8dmFyPmhlYWRpbmc8L3Zhcj4gYXMgdGhlIHRpdGxlIChzZWNvbmQgbGluZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCitzb3VyY2UgZmlsZSBuYW1lIGFuZCBwYWdlbnVtYmVyKSB3aGVuIGdlbmVyYXRpbmcgYXNzZW1ibHkgbGlzdGluZ3MuCisKKyAgIDxwPlRoaXMgZGlyZWN0aXZlIGFmZmVjdHMgc3Vic2VxdWVudCBwYWdlcywgYXMgd2VsbCBhcyB0aGUgY3VycmVudCBwYWdlIGlmCitpdCBhcHBlYXJzIHdpdGhpbiB0ZW4gbGluZXMgb2YgdGhlIHRvcCBvZiBhIHBhZ2UuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RyYW5zZm9ybS1EaXJlY3RpdmUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1RyYW5zZm9ybS1EaXJlY3RpdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc5M2ZjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVHJhbnNmb3JtLURpcmVjdGl2ZS5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRyYW5zZm9ybSBEaXJlY3RpdmUgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiIHRpdGxlPSJYdGVuc2EgRGlyZWN0aXZlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxvbmdjYWxscy1EaXJlY3RpdmUuaHRtbCNMb25nY2FsbHMtRGlyZWN0aXZlIiB0aXRsZT0iTG9uZ2NhbGxzIERpcmVjdGl2ZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxpdGVyYWwtRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1EaXJlY3RpdmUiIHRpdGxlPSJMaXRlcmFsIERpcmVjdGl2ZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRyYW5zZm9ybS1EaXJlY3RpdmUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTGl0ZXJhbC1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLURpcmVjdGl2ZSI+TGl0ZXJhbCBEaXJlY3RpdmU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMb25nY2FsbHMtRGlyZWN0aXZlLmh0bWwjTG9uZ2NhbGxzLURpcmVjdGl2ZSI+TG9uZ2NhbGxzIERpcmVjdGl2ZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiPlh0ZW5zYSBEaXJlY3RpdmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41MC41LjMgdHJhbnNmb3JtPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0cmFuc2Zvcm1fMDA3ZC1kaXJlY3RpdmUtMjMyNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibm9fMDAyZHRyYW5zZm9ybV8wMDdkLWRpcmVjdGl2ZS0yMzI1Ij48L2E+CitUaGlzIGRpcmVjdGl2ZSBlbmFibGVzIG9yIGRpc2FibGVzIGFsbCBhc3NlbWJsZXIgdHJhbnNmb3JtYXRpb24sCitpbmNsdWRpbmcgcmVsYXhhdGlvbiAoc2VlIDxhIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iPlh0ZW5zYSBSZWxheGF0aW9uPC9hPikgYW5kCitvcHRpbWl6YXRpb24gKHNlZSA8YSBocmVmPSJYdGVuc2EtT3B0aW1pemF0aW9ucy5odG1sI1h0ZW5zYS1PcHRpbWl6YXRpb25zIj5YdGVuc2EgT3B0aW1pemF0aW9uczwvYT4pLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIC5iZWdpbiBbbm8tXXRyYW5zZm9ybQorICAgICAgICAgLmVuZCBbbm8tXXRyYW5zZm9ybQorPC9wcmU+CisgICA8cD5UcmFuc2Zvcm1hdGlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCB1bmxlc3MgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby10cmFuc2Zvcm08L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29wdGlvbiBpcyB1c2VkLiAgVGhlIDxjb2RlPnRyYW5zZm9ybTwvY29kZT4gZGlyZWN0aXZlIG92ZXJyaWRlcyB0aGUgZGVmYXVsdAorZGV0ZXJtaW5lZCBieSB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMuICBBbiB1bmRlcnNjb3JlIG9wY29kZSBwcmVmaXgsCitkaXNhYmxpbmcgdHJhbnNmb3JtYXRpb24gb2YgdGhhdCBvcGNvZGUsIGFsd2F5cyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKK2JvdGggZGlyZWN0aXZlcyBhbmQgY29tbWFuZC1saW5lIGZsYWdzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9UeXBlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9UeXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzZGZjMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1R5cGUuaHRtbApAQCAtMCwwICsxLDExOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VHlwZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVGl0bGUuaHRtbCNUaXRsZSIgdGl0bGU9IlRpdGxlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVWxlYjEyOC5odG1sI1VsZWIxMjgiIHRpdGxlPSJVbGViMTI4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVHlwZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJVbGViMTI4Lmh0bWwjVWxlYjEyOCI+VWxlYjEyODwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRpdGxlLmh0bWwjVGl0bGUiPlRpdGxlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjExNSA8Y29kZT4udHlwZTwvY29kZT48L2gzPgorCis8cD5UaGlzIGRpcmVjdGl2ZSBpcyB1c2VkIHRvIHNldCB0aGUgdHlwZSBvZiBhIHN5bWJvbC4KKworPCEtLSBvbmx5IHByaW50IHRoZSBleHRyYSBoZWFkaW5nIGlmIGJvdGggQ09GRiBhbmQgRUxGIGFyZSBzZXQgLS0+Cis8aDQgY2xhc3M9InN1YmhlYWRpbmciPkNPRkYgVmVyc2lvbjwvaDQ+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUNPRkYtc3ltYm9sLXR5cGUtNDkyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLXR5cGVfMDAyYy1DT0ZGLTQ5MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidHlwZV8wMDdkLWRpcmVjdGl2ZS1fMDAyOENPRkYtdmVyc2lvbl8wMDI5LTQ5NCI+PC9hPkZvciBDT0ZGIHRhcmdldHMsIHRoaXMgZGlyZWN0aXZlIGlzIHBlcm1pdHRlZCBvbmx5IHdpdGhpbgorPGNvZGU+LmRlZjwvY29kZT4vPGNvZGU+LmVuZGVmPC9jb2RlPiBwYWlycy4gIEl0IGlzIHVzZWQgbGlrZSB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLnR5cGUgPHZhcj5pbnQ8L3Zhcj4KKzwvcHJlPgorICAgPHA+VGhpcyByZWNvcmRzIHRoZSBpbnRlZ2VyIDx2YXI+aW50PC92YXI+IGFzIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBhIHN5bWJvbCB0YWJsZQorZW50cnkuCisKKzwhLS0gb25seSBwcmludCB0aGUgZXh0cmEgaGVhZGluZyBpZiBib3RoIENPRkYgYW5kIEVMRiBhcmUgc2V0IC0tPgorPGg0IGNsYXNzPSJzdWJoZWFkaW5nIj5FTEYgVmVyc2lvbjwvaDQ+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUVMRi1zeW1ib2wtdHlwZS00OTUiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtdHlwZV8wMDJjLUVMRi00OTYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnR5cGVfMDA3ZC1kaXJlY3RpdmUtXzAwMjhFTEYtdmVyc2lvbl8wMDI5LTQ5NyI+PC9hPkZvciBFTEYgdGFyZ2V0cywgdGhlIDxjb2RlPi50eXBlPC9jb2RlPiBkaXJlY3RpdmUgaXMgdXNlZCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAudHlwZSA8dmFyPm5hbWU8L3Zhcj4gLCA8dmFyPnR5cGUgZGVzY3JpcHRpb248L3Zhcj4KKzwvcHJlPgorICAgPHA+VGhpcyBzZXRzIHRoZSB0eXBlIG9mIHN5bWJvbCA8dmFyPm5hbWU8L3Zhcj4gdG8gYmUgZWl0aGVyIGEKK2Z1bmN0aW9uIHN5bWJvbCBvciBhbiBvYmplY3Qgc3ltYm9sLiAgVGhlcmUgYXJlIGZpdmUgZGlmZmVyZW50IHN5bnRheGVzCitzdXBwb3J0ZWQgZm9yIHRoZSA8dmFyPnR5cGUgZGVzY3JpcHRpb248L3Zhcj4gZmllbGQsIGluIG9yZGVyIHRvIHByb3ZpZGUKK2NvbXBhdGliaWxpdHkgd2l0aCB2YXJpb3VzIG90aGVyIGFzc2VtYmxlcnMuCisKKyAgIDxwPkJlY2F1c2Ugc29tZSBvZiB0aGUgY2hhcmFjdGVycyB1c2VkIGluIHRoZXNlIHN5bnRheGVzIChzdWNoIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOykgYXJlIGNvbW1lbnQgY2hhcmFjdGVycyBmb3Igc29tZSBhcmNoaXRlY3R1cmVzLCBzb21lIG9mIHRoZSBzeW50YXhlcworYmVsb3cgZG8gbm90IHdvcmsgb24gYWxsIGFyY2hpdGVjdHVyZXMuICBUaGUgZmlyc3QgdmFyaWFudCB3aWxsIGJlIGFjY2VwdGVkIGJ5Cit0aGUgR05VIGFzc2VtYmxlciBvbiBhbGwgYXJjaGl0ZWN0dXJlcyBzbyB0aGF0IHZhcmlhbnQgc2hvdWxkIGJlIHVzZWQgZm9yCittYXhpbXVtIHBvcnRhYmlsaXR5LCBpZiB5b3UgZG8gbm90IG5lZWQgdG8gYXNzZW1ibGUgeW91ciBjb2RlIHdpdGggb3RoZXIKK2Fzc2VtYmxlcnMuCisKKyAgIDxwPlRoZSBzeW50YXhlcyBzdXBwb3J0ZWQgYXJlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAudHlwZSAmbHQ7bmFtZSZndDsgU1RUXyZsdDtUWVBFX0lOX1VQUEVSX0NBU0UmZ3Q7CisgICAgICAgLnR5cGUgJmx0O25hbWUmZ3Q7LCMmbHQ7dHlwZSZndDsKKyAgICAgICAudHlwZSAmbHQ7bmFtZSZndDssQCZsdDt0eXBlJmd0OworICAgICAgIC50eXBlICZsdDtuYW1lJmd0OywlJmx0O3R5cGUmZ3Q7CisgICAgICAgLnR5cGUgJmx0O25hbWUmZ3Q7LCImbHQ7dHlwZSZndDsiCis8L3ByZT4KKyAgIDxwPlRoZSB0eXBlcyBzdXBwb3J0ZWQgYXJlOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5TVFRfRlVOQzwvY29kZT48ZHQ+PGNvZGU+ZnVuY3Rpb248L2NvZGU+PGRkPk1hcmsgdGhlIHN5bWJvbCBhcyBiZWluZyBhIGZ1bmN0aW9uIG5hbWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5TVFRfR05VX0lGVU5DPC9jb2RlPjxkdD48Y29kZT5nbnVfaW5kaXJlY3RfZnVuY3Rpb248L2NvZGU+PGRkPk1hcmsgdGhlIHN5bWJvbCBhcyBhbiBpbmRpcmVjdCBmdW5jdGlvbiB3aGVuIGV2YWx1YXRlZCBkdXJpbmcgcmVsb2MKK3Byb2Nlc3NpbmcuICAoVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBhc3NlbWJsZXJzIHRhcmdldGluZyBHTlUgc3lzdGVtcykuCisKKyAgICAgPGJyPjxkdD48Y29kZT5TVFRfT0JKRUNUPC9jb2RlPjxkdD48Y29kZT5vYmplY3Q8L2NvZGU+PGRkPk1hcmsgdGhlIHN5bWJvbCBhcyBiZWluZyBhIGRhdGEgb2JqZWN0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+U1RUX1RMUzwvY29kZT48ZHQ+PGNvZGU+dGxzX29iamVjdDwvY29kZT48ZGQ+TWFyayB0aGUgc3ltYm9sIGFzIGJlaW5nIGEgdGhlYWQtbG9jYWwgZGF0YSBvYmplY3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT5TVFRfQ09NTU9OPC9jb2RlPjxkdD48Y29kZT5jb21tb248L2NvZGU+PGRkPk1hcmsgdGhlIHN5bWJvbCBhcyBiZWluZyBhIGNvbW1vbiBkYXRhIG9iamVjdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPlNUVF9OT1RZUEU8L2NvZGU+PGR0Pjxjb2RlPm5vdHlwZTwvY29kZT48ZGQ+RG9lcyBub3QgbWFyayB0aGUgc3ltYm9sIGluIGFueSB3YXkuICBJdCBpcyBzdXBwb3J0ZWQganVzdCBmb3IgY29tcGxldGVuZXNzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Z251X3VuaXF1ZV9vYmplY3Q8L2NvZGU+PGRkPk1hcmtzIHRoZSBzeW1ib2wgYXMgYmVpbmcgYSBnbG9iYWxseSB1bmlxdWUgZGF0YSBvYmplY3QuICBUaGUgZHluYW1pYyBsaW5rZXIKK3dpbGwgbWFrZSBzdXJlIHRoYXQgaW4gdGhlIGVudGlyZSBwcm9jZXNzIHRoZXJlIGlzIGp1c3Qgb25lIHN5bWJvbCB3aXRoIHRoaXMKK25hbWUgYW5kIHR5cGUgaW4gdXNlLiAgKFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgb24gYXNzZW1ibGVycyB0YXJnZXRpbmcgR05VCitzeXN0ZW1zKS4KKworICAgPC9kbD4KKworICAgPHA+Tm90ZTogU29tZSB0YXJnZXRzIHN1cHBvcnQgZXh0cmEgdHlwZXMgaW4gYWRkaXRpb24gdG8gdGhvc2UgbGlzdGVkIGFib3ZlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9VbGViMTI4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9VbGViMTI4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1NDFmOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1VsZWIxMjguaHRtbApAQCAtMCwwICsxLDU3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5VbGViMTI4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUeXBlLmh0bWwjVHlwZSIgdGl0bGU9IlR5cGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJWYWwuaHRtbCNWYWwiIHRpdGxlPSJWYWwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJVbGViMTI4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZhbC5odG1sI1ZhbCI+VmFsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVHlwZS5odG1sI1R5cGUiPlR5cGU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTE2IDxjb2RlPi51bGViMTI4IDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bGViMTI4XzAwN2QtZGlyZWN0aXZlLTQ5OCI+PC9hPjx2YXI+dWxlYjEyODwvdmFyPiBzdGFuZHMgZm9yICZsZHF1bzt1bnNpZ25lZCBsaXR0bGUgZW5kaWFuIGJhc2UgMTI4LiZyZHF1bzsgIFRoaXMgaXMgYQorY29tcGFjdCwgdmFyaWFibGUgbGVuZ3RoIHJlcHJlc2VudGF0aW9uIG9mIG51bWJlcnMgdXNlZCBieSB0aGUgRFdBUkYKK3N5bWJvbGljIGRlYnVnZ2luZyBmb3JtYXQuICBTZWUgPGEgaHJlZj0iU2xlYjEyOC5odG1sI1NsZWIxMjgiPjxjb2RlPi5zbGViMTI4PC9jb2RlPjwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTAtRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVjg1MC1EaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI5YWE4MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTAtRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlY4NTAgRGlyZWN0aXZlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVjg1MF8wMDJkRGVwZW5kZW50Lmh0bWwjVjg1MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVjg1MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWODUwLUZsb2F0aW5nLVBvaW50Lmh0bWwjVjg1MC1GbG9hdGluZy1Qb2ludCIgdGl0bGU9IlY4NTAgRmxvYXRpbmcgUG9pbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNWODUwLU9wY29kZXMiIHRpdGxlPSJWODUwIE9wY29kZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWODUwLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVjg1MC1PcGNvZGVzLmh0bWwjVjg1MC1PcGNvZGVzIj5WODUwIE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWODUwLUZsb2F0aW5nLVBvaW50Lmh0bWwjVjg1MC1GbG9hdGluZy1Qb2ludCI+Vjg1MCBGbG9hdGluZyBQb2ludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCI+Vjg1MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ3LjQgVjg1MCBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1WODUwLTIyMDYiPjwvYT48YSBuYW1lPSJpbmRleC1WODUwLW1hY2hpbmUtZGlyZWN0aXZlcy0yMjA3Ij48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JvZmZzZXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WODUwLTIyMDgiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+Lm9mZnNldCA8L2NvZGU+PHZhcj4mbHQ7ZXhwcmVzc2lvbiZndDs8L3Zhcj48ZGQ+TW92ZXMgdGhlIG9mZnNldCBpbnRvIHRoZSBjdXJyZW50IHNlY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBhbW91bnQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZWN0aW9uXzAwN2QtZGlyZWN0aXZlXzAwMmMtVjg1MC0yMjA5Ij48L2E+PGJyPjxkdD48Y29kZT4uc2VjdGlvbiAibmFtZSIsICZsdDt0eXBlJmd0OzwvY29kZT48ZGQ+VGhpcyBpcyBhbiBleHRlbnNpb24gdG8gdGhlIHN0YW5kYXJkIC5zZWN0aW9uIGRpcmVjdGl2ZS4gIEl0IHNldHMgdGhlCitjdXJyZW50IHNlY3Rpb24gdG8gYmUgJmx0O3R5cGUmZ3Q7IGFuZCBjcmVhdGVzIGFuIGFsaWFzIGZvciB0aGlzIHNlY3Rpb24KK2NhbGxlZCAibmFtZSIuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXY4NTBfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WODUwLTIyMTAiPjwvYT48YnI+PGR0Pjxjb2RlPi52ODUwPC9jb2RlPjxkZD5TcGVjaWZpZXMgdGhhdCB0aGUgYXNzZW1ibGVkIGNvZGUgc2hvdWxkIGJlIG1hcmtlZCBhcyBiZWluZyB0YXJnZXRlZCBhdAordGhlIFY4NTAgcHJvY2Vzc29yLiAgVGhpcyBhbGxvd3MgdGhlIGxpbmtlciB0byBkZXRlY3QgYXR0ZW1wdHMgdG8gbGluaworc3VjaCBjb2RlIHdpdGggY29kZSBhc3NlbWJsZWQgZm9yIG90aGVyIHByb2Nlc3NvcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXY4NTBlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVjg1MC0yMjExIj48L2E+PGJyPjxkdD48Y29kZT4udjg1MGU8L2NvZGU+PGRkPlNwZWNpZmllcyB0aGF0IHRoZSBhc3NlbWJsZWQgY29kZSBzaG91bGQgYmUgbWFya2VkIGFzIGJlaW5nIHRhcmdldGVkIGF0Cit0aGUgVjg1MEUgcHJvY2Vzc29yLiAgVGhpcyBhbGxvd3MgdGhlIGxpbmtlciB0byBkZXRlY3QgYXR0ZW1wdHMgdG8gbGluaworc3VjaCBjb2RlIHdpdGggY29kZSBhc3NlbWJsZWQgZm9yIG90aGVyIHByb2Nlc3NvcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXY4NTBlMV8wMDdkLWRpcmVjdGl2ZV8wMDJjLVY4NTAtMjIxMiI+PC9hPjxicj48ZHQ+PGNvZGU+LnY4NTBlMTwvY29kZT48ZGQ+U3BlY2lmaWVzIHRoYXQgdGhlIGFzc2VtYmxlZCBjb2RlIHNob3VsZCBiZSBtYXJrZWQgYXMgYmVpbmcgdGFyZ2V0ZWQgYXQKK3RoZSBWODUwRTEgcHJvY2Vzc29yLiAgVGhpcyBhbGxvd3MgdGhlIGxpbmtlciB0byBkZXRlY3QgYXR0ZW1wdHMgdG8gbGluaworc3VjaCBjb2RlIHdpdGggY29kZSBhc3NlbWJsZWQgZm9yIG90aGVyIHByb2Nlc3NvcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXY4NTBlMl8wMDdkLWRpcmVjdGl2ZV8wMDJjLVY4NTAtMjIxMyI+PC9hPjxicj48ZHQ+PGNvZGU+LnY4NTBlMjwvY29kZT48ZGQ+U3BlY2lmaWVzIHRoYXQgdGhlIGFzc2VtYmxlZCBjb2RlIHNob3VsZCBiZSBtYXJrZWQgYXMgYmVpbmcgdGFyZ2V0ZWQgYXQKK3RoZSBWODUwRTIgcHJvY2Vzc29yLiAgVGhpcyBhbGxvd3MgdGhlIGxpbmtlciB0byBkZXRlY3QgYXR0ZW1wdHMgdG8gbGluaworc3VjaCBjb2RlIHdpdGggY29kZSBhc3NlbWJsZWQgZm9yIG90aGVyIHByb2Nlc3NvcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXY4NTBlMnYzXzAwN2QtZGlyZWN0aXZlXzAwMmMtVjg1MC0yMjE0Ij48L2E+PGJyPjxkdD48Y29kZT4udjg1MGUydjM8L2NvZGU+PGRkPlNwZWNpZmllcyB0aGF0IHRoZSBhc3NlbWJsZWQgY29kZSBzaG91bGQgYmUgbWFya2VkIGFzIGJlaW5nIHRhcmdldGVkIGF0Cit0aGUgVjg1MEUyVjMgcHJvY2Vzc29yLiAgVGhpcyBhbGxvd3MgdGhlIGxpbmtlciB0byBkZXRlY3QgYXR0ZW1wdHMgdG8gbGluaworc3VjaCBjb2RlIHdpdGggY29kZSBhc3NlbWJsZWQgZm9yIG90aGVyIHByb2Nlc3NvcnMuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTAtRmxvYXRpbmctUG9pbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTAtRmxvYXRpbmctUG9pbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE0ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVjg1MC1GbG9hdGluZy1Qb2ludC5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlY4NTAgRmxvYXRpbmcgUG9pbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IlY4NTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVjg1MC1TeW50YXguaHRtbCNWODUwLVN5bnRheCIgdGl0bGU9IlY4NTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjVjg1MC1EaXJlY3RpdmVzIiB0aXRsZT0iVjg1MCBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVjg1MC1GbG9hdGluZy1Qb2ludCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNWODUwLURpcmVjdGl2ZXMiPlY4NTAgRGlyZWN0aXZlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlY4NTAtU3ludGF4Lmh0bWwjVjg1MC1TeW50YXgiPlY4NTAgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVjg1MF8wMDJkRGVwZW5kZW50Lmh0bWwjVjg1MF8wMDJkRGVwZW5kZW50Ij5WODUwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDcuMyBGbG9hdGluZyBQb2ludDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtVjg1MC1fMDAyOF8wMDQwc2NfMDA3YmllZWVfMDA3ZF8wMDI5LTIyMDQiPjwvYT48YSBuYW1lPSJpbmRleC1WODUwLWZsb2F0aW5nLXBvaW50LV8wMDI4XzAwNDBzY18wMDdiaWVlZV8wMDdkXzAwMjktMjIwNSI+PC9hPlRoZSBWODUwIGZhbWlseSB1c2VzIDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4gZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVjg1MC1PcGNvZGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WODUwLU9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThkNmFkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVjg1MC1PcGNvZGVzLmh0bWwKQEAgLTAsMCArMSwxNzcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlY4NTAgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVjg1MF8wMDJkRGVwZW5kZW50Lmh0bWwjVjg1MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVjg1MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNWODUwLURpcmVjdGl2ZXMiIHRpdGxlPSJWODUwIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWODUwLU9wY29kZXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWODUwLURpcmVjdGl2ZXMuaHRtbCNWODUwLURpcmVjdGl2ZXMiPlY4NTAgRGlyZWN0aXZlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCI+Vjg1MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ3LjUgT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVY4NTAtb3Bjb2Rlcy0yMjE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3Bjb2Rlcy1mb3ItVjg1MC0yMjE2Ij48L2E+PGNvZGU+YXM8L2NvZGU+IGltcGxlbWVudHMgYWxsIHRoZSBzdGFuZGFyZCBWODUwIG9wY29kZXMuCisKKyAgIDxwPjxjb2RlPmFzPC9jb2RlPiBhbHNvIGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBwc2V1ZG8gb3BzOgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JoaTBfMDA3ZC1wc2V1ZG9fMDAyZG9wXzAwMmMtVjg1MC0yMjE3Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPmhpMCgpPC9jb2RlPjxkZD5Db21wdXRlcyB0aGUgaGlnaGVyIDE2IGJpdHMgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24gYW5kIHN0b3JlcyBpdCBpbnRvCit0aGUgaW1tZWRpYXRlIG9wZXJhbmQgZmllbGQgb2YgdGhlIGdpdmVuIGluc3RydWN0aW9uLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tdWxoaSBoaTAoaGVyZSAtIHRoZXJlKSwgcjUsIHI2PC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+Y29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYWRkcmVzcyBvZiBsYWJlbHMgJ2hlcmUnIGFuZAorJ3RoZXJlJywgdGFrZXMgdGhlIHVwcGVyIDE2IGJpdHMgb2YgdGhpcyBkaWZmZXJlbmNlLCBzaGlmdHMgaXQgZG93biAxNgorYml0cyBhbmQgdGhlbiBtdWx0aXBsaWVzIGl0IGJ5IHRoZSBsb3dlciAxNiBiaXRzIGluIHJlZ2lzdGVyIDUsIHB1dHRpbmcKK3RoZSByZXN1bHQgaW50byByZWdpc3RlciA2LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibG9fMDA3ZC1wc2V1ZG9fMDAyZG9wXzAwMmMtVjg1MC0yMjE4Ij48L2E+PGJyPjxkdD48Y29kZT5sbygpPC9jb2RlPjxkZD5Db21wdXRlcyB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgc3RvcmVzIGl0IGludG8KK3RoZSBpbW1lZGlhdGUgb3BlcmFuZCBmaWVsZCBvZiB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZToKKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFkZGkgbG8oaGVyZSAtIHRoZXJlKSwgcjUsIHI2PC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+Y29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYWRkcmVzcyBvZiBsYWJlbHMgJ2hlcmUnIGFuZAorJ3RoZXJlJywgdGFrZXMgdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhpcyBkaWZmZXJlbmNlIGFuZCBhZGRzIGl0IHRvCityZWdpc3RlciA1LCBwdXR0aW5nIHRoZSByZXN1bHQgaW50byByZWdpc3RlciA2LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaGlfMDA3ZC1wc2V1ZG9fMDAyZG9wXzAwMmMtVjg1MC0yMjE5Ij48L2E+PGJyPjxkdD48Y29kZT5oaSgpPC9jb2RlPjxkZD5Db21wdXRlcyB0aGUgaGlnaGVyIDE2IGJpdHMgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24gYW5kIHRoZW4gYWRkcyB0aGUKK3ZhbHVlIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgZXhwcmVzc2lvbgorYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGludG8gdGhlIGltbWVkaWF0ZSBvcGVyYW5kIGZpZWxkIG9mIHRoZSBnaXZlbgoraW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIGNvZGUgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUKK2FkZHJlc3Mgb2YgdGhlIGxhYmVsICdoZXJlJyBhbmQgc3RvcmUgaXQgaW50byByZWdpc3RlciA2OgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92aGkgaGkoaGVyZSksIHIwLCByNjwvc3Bhbj48L3NhbXA+JnJzcXVvOworICAgICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92ZWEgbG8oaGVyZSksIHI2LCByNjwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxwPlRoZSByZWFzb24gZm9yIHRoaXMgc3BlY2lhbCBiZWhhdmlvdXIgaXMgdGhhdCBtb3ZlYSBwZXJmb3JtcyBhIHNpZ24KK2V4dGVuc2lvbiBvbiBpdHMgaW1tZWRpYXRlIG9wZXJhbmQuICBTbyBmb3IgZXhhbXBsZSBpZiB0aGUgYWRkcmVzcyBvZgorJ2hlcmUnIHdhcyAweEZGRkZGRkZGIHRoZW4gd2l0aG91dCB0aGUgc3BlY2lhbCBiZWhhdmlvdXIgb2YgdGhlIGhpKCkKK3BzZXVkby1vcCB0aGUgbW92aGkgaW5zdHJ1Y3Rpb24gd291bGQgcHV0IDB4RkZGRjAwMDAgaW50byByNiwgdGhlbiB0aGUKK21vdmVhIGluc3RydWN0aW9uIHdvdWxkIHRha2VzIGl0cyBpbW1lZGlhdGUgb3BlcmFuZCwgMHhGRkZGLCBzaWduIGV4dGVuZAoraXQgdG8gMzIgYml0cywgMHhGRkZGRkZGRiwgYW5kIHRoZW4gYWRkIGl0IGludG8gcjYgZ2l2aW5nIDB4RkZGRUZGRkYKK3doaWNoIGlzIHdyb25nICh0aGUgZmlmdGggbmliYmxlIGlzIEUpLiAgV2l0aCB0aGUgaGkoKSBwc2V1ZG8gb3AgYWRkaW5nCitpbiB0aGUgdG9wIGJpdCBvZiB0aGUgbG8oKSBwc2V1ZG8gb3AsIHRoZSBtb3ZoaSBpbnN0cnVjdGlvbiBhY3R1YWxseQorc3RvcmVzIDAgaW50byByNiAoMHhGRkZGICsgMSA9IDB4MDAwMCksIHNvIHRoYXQgdGhlIG1vdmVhIGluc3RydWN0aW9uCitzdG9yZXMgMHhGRkZGRkZGRiBpbnRvIHI2IC0gdGhlIHJpZ2h0IHZhbHVlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaGlsb18wMDdkLXBzZXVkb18wMDJkb3BfMDAyYy1WODUwLTIyMjAiPjwvYT48YnI+PGR0Pjxjb2RlPmhpbG8oKTwvY29kZT48ZGQ+Q29tcHV0ZXMgdGhlIDMyIGJpdCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgc3RvcmVzIGl0IGludG8KK3RoZSBpbW1lZGlhdGUgb3BlcmFuZCBmaWVsZCBvZiB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb24gKHdoaWNoIG11c3QgYmUgYQorbW92IGluc3RydWN0aW9uKS4gIEZvciBleGFtcGxlOgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92IGhpbG8oaGVyZSksIHI2PC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+Y29tcHV0ZXMgdGhlIGFic29sdXRlIGFkZHJlc3Mgb2YgbGFiZWwgJ2hlcmUnIGFuZCBwdXRzIHRoZSByZXN1bHQgaW50bworcmVnaXN0ZXIgNi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNkYW9mZl8wMDdkLXBzZXVkb18wMDJkb3BfMDAyYy1WODUwLTIyMjEiPjwvYT48YnI+PGR0Pjxjb2RlPnNkYW9mZigpPC9jb2RlPjxkZD5Db21wdXRlcyB0aGUgb2Zmc2V0IG9mIHRoZSBuYW1lZCB2YXJpYWJsZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgU21hbGwKK0RhdGEgQXJlYSAod2hvZXMgYWRkcmVzcyBpcyBoZWxkIGluIHJlZ2lzdGVyIDQsIHRoZSBHUCByZWdpc3RlcikgYW5kCitzdG9yZXMgdGhlIHJlc3VsdCBhcyBhIDE2IGJpdCBzaWduZWQgdmFsdWUgaW4gdGhlIGltbWVkaWF0ZSBvcGVyYW5kCitmaWVsZCBvZiB0aGUgZ2l2ZW4gaW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZToKKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxkLncgc2Rhb2ZmKF9hX3ZhcmlhYmxlKVtncF0scjY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8cD5sb2FkcyB0aGUgY29udGVudHMgb2YgdGhlIGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgdGhlIGxhYmVsICdfYV92YXJpYWJsZScKK2ludG8gcmVnaXN0ZXIgNiwgcHJvdmlkZWQgdGhhdCB0aGUgbGFiZWwgaXMgbG9jYXRlZCBzb21ld2hlcmUgd2l0aGluICsvLQorMzJLIG9mIHRoZSBhZGRyZXNzIGhlbGQgaW4gdGhlIEdQIHJlZ2lzdGVyLiAgW05vdGUgdGhlIGxpbmtlciBhc3N1bWVzCit0aGF0IHRoZSBHUCByZWdpc3RlciBjb250YWlucyBhIGZpeGVkIGFkZHJlc3Mgc2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZQorbGFiZWwgY2FsbGVkICdfX2dwJy4gIFRoaXMgY2FuIGVpdGhlciBiZSBzZXQgdXAgYXV0b21hdGljYWxseSBieSB0aGUKK2xpbmtlciwgb3Igc3BlY2lmaWNhbGx5IHNldCBieSB1c2luZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWRlZnN5bSBfX2dwPSZsdDt2YWx1ZSZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2NvbW1hbmQgbGluZSBvcHRpb25dLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGRhb2ZmXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVY4NTAtMjIyMiI+PC9hPjxicj48ZHQ+PGNvZGU+dGRhb2ZmKCk8L2NvZGU+PGRkPkNvbXB1dGVzIHRoZSBvZmZzZXQgb2YgdGhlIG5hbWVkIHZhcmlhYmxlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBUaW55CitEYXRhIEFyZWEgKHdob2VzIGFkZHJlc3MgaXMgaGVsZCBpbiByZWdpc3RlciAzMCwgdGhlIEVQIHJlZ2lzdGVyKSBhbmQKK3N0b3JlcyB0aGUgcmVzdWx0IGFzIGEgNCw1LCA3IG9yIDggYml0IHVuc2lnbmVkIHZhbHVlIGluIHRoZSBpbW1lZGlhdGUKK29wZXJhbmQgZmllbGQgb2YgdGhlIGdpdmVuIGluc3RydWN0aW9uLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zbGQudyB0ZGFvZmYoX2FfdmFyaWFibGUpW2VwXSxyNjwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxwPmxvYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSB0aGUgbGFiZWwgJ19hX3ZhcmlhYmxlJworaW50byByZWdpc3RlciA2LCBwcm92aWRlZCB0aGF0IHRoZSBsYWJlbCBpcyBsb2NhdGVkIHNvbWV3aGVyZSB3aXRoaW4gKzI1NgorYnl0ZXMgb2YgdGhlIGFkZHJlc3MgaGVsZCBpbiB0aGUgRVAgcmVnaXN0ZXIuICBbTm90ZSB0aGUgbGlua2VyIGFzc3VtZXMKK3RoYXQgdGhlIEVQIHJlZ2lzdGVyIGNvbnRhaW5zIGEgZml4ZWQgYWRkcmVzcyBzZXQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlCitsYWJlbCBjYWxsZWQgJ19fZXAnLiAgVGhpcyBjYW4gZWl0aGVyIGJlIHNldCB1cCBhdXRvbWF0aWNhbGx5IGJ5IHRoZQorbGlua2VyLCBvciBzcGVjaWZpY2FsbHkgc2V0IGJ5IHVzaW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZGVmc3ltIF9fZXA9Jmx0O3ZhbHVlJmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOworY29tbWFuZCBsaW5lIG9wdGlvbl0uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J6ZGFvZmZfMDA3ZC1wc2V1ZG9fMDAyZG9wXzAwMmMtVjg1MC0yMjIzIj48L2E+PGJyPjxkdD48Y29kZT56ZGFvZmYoKTwvY29kZT48ZGQ+Q29tcHV0ZXMgdGhlIG9mZnNldCBvZiB0aGUgbmFtZWQgdmFyaWFibGUgZnJvbSBhZGRyZXNzIDAgYW5kIHN0b3JlcyB0aGUKK3Jlc3VsdCBhcyBhIDE2IGJpdCBzaWduZWQgdmFsdWUgaW4gdGhlIGltbWVkaWF0ZSBvcGVyYW5kIGZpZWxkIG9mIHRoZQorZ2l2ZW4gaW5zdHJ1Y3Rpb24uICBGb3IgZXhhbXBsZToKKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1vdmVhIHpkYW9mZihfYV92YXJpYWJsZSksemVybyxyNjwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxwPnB1dHMgdGhlIGFkZHJlc3Mgb2YgdGhlIGxhYmVsICdfYV92YXJpYWJsZScgaW50byByZWdpc3RlciA2LCBhc3N1bWluZwordGhhdCB0aGUgbGFiZWwgaXMgc29tZXdoZXJlIHdpdGhpbiB0aGUgZmlyc3QgMzJLIG9mIG1lbW9yeS4gIChTdHJpY3RseQorc3BlYWtpbmcgaXQgYWxzbyBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIGxhc3QgMzJLIG9mIG1lbW9yeSBhcyB3ZWxsLCBhcwordGhlIG9mZnNldHMgYXJlIHNpZ25lZCkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjdG9mZl8wMDdkLXBzZXVkb18wMDJkb3BfMDAyYy1WODUwLTIyMjQiPjwvYT48YnI+PGR0Pjxjb2RlPmN0b2ZmKCk8L2NvZGU+PGRkPkNvbXB1dGVzIHRoZSBvZmZzZXQgb2YgdGhlIG5hbWVkIHZhcmlhYmxlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBDYWxsCitUYWJsZSBBcmVhICh3aG9lcyBhZGRyZXNzIGlzIGhlbGcgaW4gc3lzdGVtIHJlZ2lzdGVyIDIwLCB0aGUgQ1RCUAorcmVnaXN0ZXIpIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBhIDYgb3IgMTYgYml0IHVuc2lnbmVkIHZhbHVlIGluIHRoZQoraW1tZWRpYXRlIGZpZWxkIG9mIHRoZW4gZ2l2ZW4gaW5zdHJ1Y3Rpb24gb3IgcGllY2Ugb2YgZGF0YS4gIEZvcgorZXhhbXBsZToKKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNhbGx0IGN0b2ZmKHRhYmxlX2Z1bmMxKTwvc3Bhbj48L3NhbXA+JnJzcXVvOworCisgICAgIDxwPndpbGwgcHV0IHRoZSBjYWxsIHRoZSBmdW5jdGlvbiB3aG9lcyBhZGRyZXNzIGlzIGhlbGQgaW4gdGhlIGNhbGwgdGFibGUKK2F0IHRoZSBsb2NhdGlvbiBsYWJlbGVkICd0YWJsZV9mdW5jMScuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nY2FsbF8wMDdkLXBzZXVkb18wMDJkb3BfMDAyYy1WODUwLTIyMjUiPjwvYT48YnI+PGR0Pjxjb2RlPi5sb25nY2FsbCBuYW1lPC9jb2RlPjxkZD5JbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucyBpcyBhIGxvbmcgY2FsbAordG8gZnVuY3Rpb24gPGNvZGU+bmFtZTwvY29kZT4uICBUaGUgbGlua2VyIHdpbGwgYXR0ZW1wdCB0byBzaG9ydGVuIHRoaXMgY2FsbAorc2VxdWVuY2UgaWYgPGNvZGU+bmFtZTwvY29kZT4gaXMgd2l0aGluIGEgMjJiaXQgb2Zmc2V0IG9mIHRoZSBjYWxsLiAgT25seQordmFsaWQgaWYgdGhlIDxjb2RlPi1tcmVsYXg8L2NvZGU+IGNvbW1hbmQgbGluZSBzd2l0Y2ggaGFzIGJlZW4gZW5hYmxlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdqdW1wXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVY4NTAtMjIyNiI+PC9hPjxicj48ZHQ+PGNvZGU+LmxvbmdqdW1wIG5hbWU8L2NvZGU+PGRkPkluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zIGlzIGEgbG9uZyBqdW1wCit0byBsYWJlbCA8Y29kZT5uYW1lPC9jb2RlPi4gIFRoZSBsaW5rZXIgd2lsbCBhdHRlbXB0IHRvIHNob3J0ZW4gdGhpcyBjb2RlCitzZXF1ZW5jZSBpZiA8Y29kZT5uYW1lPC9jb2RlPiBpcyB3aXRoaW4gYSAyMmJpdCBvZmZzZXQgb2YgdGhlIGp1bXAuICBPbmx5Cit2YWxpZCBpZiB0aGUgPGNvZGU+LW1yZWxheDwvY29kZT4gY29tbWFuZCBsaW5lIHN3aXRjaCBoYXMgYmVlbiBlbmFibGVkLgorCisgICA8L2RsPgorCisgICA8cD5Gb3IgaW5mb3JtYXRpb24gb24gdGhlIFY4NTAgaW5zdHJ1Y3Rpb24gc2V0LCBzZWUgPGNpdGU+Vjg1MAorRmFtaWx5IDMyLS8xNi1CaXQgc2luZ2xlLUNoaXAgTWljcm9jb250cm9sbGVyIEFyY2hpdGVjdHVyZSBNYW51YWw8L2NpdGU+IGZyb20gTkVDLiAKK0x0ZC4KKworPCEtLSBDb3B5cmlnaHQgMjAxMiAtLT4KKzwhLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WODUwLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTAtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjJmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WODUwLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Vjg1MCBPcHRpb25zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJWODUwXzAwMmREZXBlbmRlbnQuaHRtbCNWODUwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJWODUwLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlY4NTAtU3ludGF4Lmh0bWwjVjg1MC1TeW50YXgiIHRpdGxlPSJWODUwIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlY4NTAtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWODUwLVN5bnRheC5odG1sI1Y4NTAtU3ludGF4Ij5WODUwIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCI+Vjg1MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ3LjEgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVY4NTAtb3B0aW9ucy1fMDAyOG5vbmVfMDAyOS0yMTY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9ucy1mb3ItVjg1MC1fMDAyOG5vbmVfMDAyOS0yMTY4Ij48L2E+PGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBjb21tYW5kLWxpbmUgb3B0aW9ucworZm9yIHRoZSBWODUwIHByb2Nlc3NvciBmYW1pbHk6CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWNvbW1hbmQtbGluZS1vcHRpb25zXzAwMmMtVjg1MC0yMTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtVjg1MC1jb21tYW5kLWxpbmUtb3B0aW9ucy0yMTcwIj48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHdzaWduZWRfMDA1Zm92ZXJmbG93XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVY4NTAtMjE3MSI+PC9hPgorPGRsPjxkdD48Y29kZT4td3NpZ25lZF9vdmVyZmxvdzwvY29kZT48ZGQ+Q2F1c2VzIHdhcm5pbmdzIHRvIGJlIHByb2R1Y2VkIHdoZW4gc2lnbmVkIGltbWVkaWF0ZSB2YWx1ZXMgb3ZlcmZsb3cgdGhlCitzcGFjZSBhdmFpbGFibGUgZm9yIHRoZW4gd2l0aGluIHRoZWlyIG9wY29kZXMuICBCeSBkZWZhdWx0IHRoaXMgb3B0aW9uCitpcyBkaXNhYmxlZCBhcyBpdCBpcyBwb3NzaWJsZSB0byByZWNlaXZlIHNwdXJpb3VzIHdhcm5pbmdzIGR1ZSB0byB1c2luZworZXhhY3QgYml0IHBhdHRlcm5zIGFzIGltbWVkaWF0ZSBjb25zdGFudHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHd1bnNpZ25lZF8wMDVmb3ZlcmZsb3dfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtVjg1MC0yMTcyIj48L2E+PGJyPjxkdD48Y29kZT4td3Vuc2lnbmVkX292ZXJmbG93PC9jb2RlPjxkZD5DYXVzZXMgd2FybmluZ3MgdG8gYmUgcHJvZHVjZWQgd2hlbiB1bnNpZ25lZCBpbW1lZGlhdGUgdmFsdWVzIG92ZXJmbG93Cit0aGUgc3BhY2UgYXZhaWxhYmxlIGZvciB0aGVuIHdpdGhpbiB0aGVpciBvcGNvZGVzLiAgQnkgZGVmYXVsdCB0aGlzCitvcHRpb24gaXMgZGlzYWJsZWQgYXMgaXQgaXMgcG9zc2libGUgdG8gcmVjZWl2ZSBzcHVyaW91cyB3YXJuaW5ncyBkdWUgdG8KK3VzaW5nIGV4YWN0IGJpdCBwYXR0ZXJucyBhcyBpbW1lZGlhdGUgY29uc3RhbnRzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdjg1MF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1WODUwLTIxNzMiPjwvYT48YnI+PGR0Pjxjb2RlPi1tdjg1MDwvY29kZT48ZGQ+U3BlY2lmaWVzIHRoYXQgdGhlIGFzc2VtYmxlZCBjb2RlIHNob3VsZCBiZSBtYXJrZWQgYXMgYmVpbmcgdGFyZ2V0ZWQgYXQKK3RoZSBWODUwIHByb2Nlc3Nvci4gIFRoaXMgYWxsb3dzIHRoZSBsaW5rZXIgdG8gZGV0ZWN0IGF0dGVtcHRzIHRvIGxpbmsKK3N1Y2ggY29kZSB3aXRoIGNvZGUgYXNzZW1ibGVkIGZvciBvdGhlciBwcm9jZXNzb3JzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdjg1MGVfMDA3ZC1jb21tYW5kLWxpbmUtb3B0aW9uXzAwMmMtVjg1MC0yMTc0Ij48L2E+PGJyPjxkdD48Y29kZT4tbXY4NTBlPC9jb2RlPjxkZD5TcGVjaWZpZXMgdGhhdCB0aGUgYXNzZW1ibGVkIGNvZGUgc2hvdWxkIGJlIG1hcmtlZCBhcyBiZWluZyB0YXJnZXRlZCBhdAordGhlIFY4NTBFIHByb2Nlc3Nvci4gIFRoaXMgYWxsb3dzIHRoZSBsaW5rZXIgdG8gZGV0ZWN0IGF0dGVtcHRzIHRvIGxpbmsKK3N1Y2ggY29kZSB3aXRoIGNvZGUgYXNzZW1ibGVkIGZvciBvdGhlciBwcm9jZXNzb3JzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdjg1MGUxXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVY4NTAtMjE3NSI+PC9hPjxicj48ZHQ+PGNvZGU+LW12ODUwZTE8L2NvZGU+PGRkPlNwZWNpZmllcyB0aGF0IHRoZSBhc3NlbWJsZWQgY29kZSBzaG91bGQgYmUgbWFya2VkIGFzIGJlaW5nIHRhcmdldGVkIGF0Cit0aGUgVjg1MEUxIHByb2Nlc3Nvci4gIFRoaXMgYWxsb3dzIHRoZSBsaW5rZXIgdG8gZGV0ZWN0IGF0dGVtcHRzIHRvIGxpbmsKK3N1Y2ggY29kZSB3aXRoIGNvZGUgYXNzZW1ibGVkIGZvciBvdGhlciBwcm9jZXNzb3JzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmRtdjg1MGFueV8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1WODUwLTIxNzYiPjwvYT48YnI+PGR0Pjxjb2RlPi1tdjg1MGFueTwvY29kZT48ZGQ+U3BlY2lmaWVzIHRoYXQgdGhlIGFzc2VtYmxlZCBjb2RlIHNob3VsZCBiZSBtYXJrZWQgYXMgYmVpbmcgdGFyZ2V0ZWQgYXQKK3RoZSBWODUwIHByb2Nlc3NvciBidXQgc3VwcG9ydCBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlCitleHRlbmRlZCB2YXJpYW50cyBvZiB0aGUgcHJvY2Vzcy4gIFRoaXMgYWxsb3dzIHRoZSBwcm9kdWN0aW9uIG9mCitiaW5hcmllcyB0aGF0IGNvbnRhaW4gdGFyZ2V0IHNwZWNpZmljIGNvZGUsIGJ1dCB3aGljaCBhcmUgYWxzbyBpbnRlbmRlZAordG8gYmUgdXNlZCBpbiBhIGdlbmVyaWMgZmFzaGlvbi4gIEZvciBleGFtcGxlIGxpYmdjYy5hIGNvbnRhaW5zIGdlbmVyaWMKK3JvdXRpbmVzIHVzZWQgYnkgdGhlIGNvZGUgcHJvZHVjZWQgYnkgR0NDIGZvciBhbGwgdmVyc2lvbnMgb2YgdGhlIHY4NTAKK2FyY2hpdGVjdHVyZSwgdG9nZXRoZXIgd2l0aCBzdXBwb3J0IHJvdXRpbmVzIG9ubHkgdXNlZCBieSB0aGUgVjg1MEUKK2FyY2hpdGVjdHVyZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXY4NTBlMl8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1WODUwLTIxNzciPjwvYT48YnI+PGR0Pjxjb2RlPi1tdjg1MGUyPC9jb2RlPjxkZD5TcGVjaWZpZXMgdGhhdCB0aGUgYXNzZW1ibGVkIGNvZGUgc2hvdWxkIGJlIG1hcmtlZCBhcyBiZWluZyB0YXJnZXRlZCBhdAordGhlIFY4NTBFMiBwcm9jZXNzb3IuICBUaGlzIGFsbG93cyB0aGUgbGlua2VyIHRvIGRldGVjdCBhdHRlbXB0cyB0byBsaW5rCitzdWNoIGNvZGUgd2l0aCBjb2RlIGFzc2VtYmxlZCBmb3Igb3RoZXIgcHJvY2Vzc29ycy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXY4NTBlMnYzXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVY4NTAtMjE3OCI+PC9hPjxicj48ZHQ+PGNvZGU+LW12ODUwZTJ2MzwvY29kZT48ZGQ+U3BlY2lmaWVzIHRoYXQgdGhlIGFzc2VtYmxlZCBjb2RlIHNob3VsZCBiZSBtYXJrZWQgYXMgYmVpbmcgdGFyZ2V0ZWQgYXQKK3RoZSBWODUwRTJWMyBwcm9jZXNzb3IuICBUaGlzIGFsbG93cyB0aGUgbGlua2VyIHRvIGRldGVjdCBhdHRlbXB0cyB0byBsaW5rCitzdWNoIGNvZGUgd2l0aCBjb2RlIGFzc2VtYmxlZCBmb3Igb3RoZXIgcHJvY2Vzc29ycy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkbXJlbGF4XzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVY4NTAtMjE3OSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1yZWxheDwvY29kZT48ZGQ+RW5hYmxlcyByZWxheGF0aW9uLiAgVGhpcyBhbGxvd3MgdGhlIC5sb25nY2FsbCBhbmQgLmxvbmdqdW1wIHBzZXVkbworb3BzIHRvIGJlIHVzZWQgaW4gdGhlIGFzc2VtYmxlciBzb3VyY2UgY29kZS4gIFRoZXNlIG9wcyBsYWJlbCBzZWN0aW9ucworb2YgY29kZSB3aGljaCBhcmUgZWl0aGVyIGEgbG9uZyBmdW5jdGlvbiBjYWxsIG9yIGEgbG9uZyBicmFuY2guICBUaGUKK2Fzc2VtYmxlciB3aWxsIHRoZW4gZmxhZyB0aGVzZSBzZWN0aW9ucyBvZiBjb2RlIGFuZCB0aGUgbGlua2VyIHdpbGwKK2F0dGVtcHQgdG8gcmVsYXggdGhlbS4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVjg1MC1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTAtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkNDUwMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTAtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Vjg1MCBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IlY4NTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIiB0aXRsZT0iVjg1MCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVjg1MC1GbG9hdGluZy1Qb2ludC5odG1sI1Y4NTAtRmxvYXRpbmctUG9pbnQiIHRpdGxlPSJWODUwIEZsb2F0aW5nIFBvaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVjg1MC1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVjg1MC1GbG9hdGluZy1Qb2ludC5odG1sI1Y4NTAtRmxvYXRpbmctUG9pbnQiPlY4NTAgRmxvYXRpbmcgUG9pbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCI+Vjg1MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ3LjIgU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlY4NTBfMDAyZENoYXJzLmh0bWwjVjg1MF8wMDJkQ2hhcnMiPlY4NTAtQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPjogICAgICAgICAgICAgICAgICBSZWdpc3RlciBOYW1lcworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVjg1MF8wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTBfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5N2VhYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTBfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Vjg1MC1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVjg1MC1TeW50YXguaHRtbCNWODUwLVN5bnRheCIgdGl0bGU9IlY4NTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVjg1MF8wMDJkUmVncy5odG1sI1Y4NTBfMDAyZFJlZ3MiIHRpdGxlPSJWODUwLVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWODUwLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJWODUwXzAwMmRDaGFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWODUwXzAwMmRSZWdzLmh0bWwjVjg1MF8wMDJkUmVncyI+Vjg1MC1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVjg1MC1TeW50YXguaHRtbCNWODUwLVN5bnRheCI+Vjg1MCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQ3LjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtVjg1MC0yMTgwIj48L2E+PGEgbmFtZT0iaW5kZXgtVjg1MC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIxODEiPjwvYT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIGxpbmUgY29tbWVudCBjaGFyYWN0ZXIuICBJZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZQorZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSwgdGhlIHdob2xlIGxpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dAoraW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNhbiBhbHNvIGJlIGEgbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUKKyhzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvciBjb250cm9sIGNvbW1hbmQKKyhzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+VHdvIGRhc2hlcyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLTwvc3Bhbj48L3NhbXA+JnJzcXVvOykgY2FuIGFsc28gYmUgdXNlZCB0byBzdGFydCBhIGxpbmUgY29tbWVudC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1zZXBhcmF0b3JfMDAyYy1WODUwLTIxODIiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtVjg1MC0yMTgzIj48L2E+PGEgbmFtZT0iaW5kZXgtVjg1MC1saW5lLXNlcGFyYXRvci0yMTg0Ij48L2E+CitUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj47PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZSBzdGF0ZW1lbnRzIG9uIHRoZSBzYW1lCitsaW5lLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WODUwXzAwMmREZXBlbmRlbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1Y4NTBfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YmM4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WODUwXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WODUwLURlcGVuZGVudCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW5jaWVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElMRVByb18wMDJkRGVwZW5kZW50Lmh0bWwjVElMRVByb18wMDJkRGVwZW5kZW50IiB0aXRsZT0iVElMRVByby1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJYR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwjWEdBVEVfMDAyZERlcGVuZGVudCIgdGl0bGU9IlhHQVRFLURlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlY4NTAtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJWODUwXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWEdBVEVfMDAyZERlcGVuZGVudC5odG1sI1hHQVRFXzAwMmREZXBlbmRlbnQiPlhHQVRFLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTEVQcm9fMDAyZERlcGVuZGVudC5odG1sI1RJTEVQcm9fMDAyZERlcGVuZGVudCI+VElMRVByby1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuNDcgdjg1MCBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1WODUwLXN1cHBvcnQtMjE2NiI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlY4NTAtU3ludGF4Lmh0bWwjVjg1MC1TeW50YXgiPlY4NTAgU3ludGF4PC9hPjogICAgICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJWODUwLUZsb2F0aW5nLVBvaW50Lmh0bWwjVjg1MC1GbG9hdGluZy1Qb2ludCI+Vjg1MCBGbG9hdGluZyBQb2ludDwvYT46ICAgICAgICBGbG9hdGluZyBQb2ludAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iVjg1MC1EaXJlY3RpdmVzLmh0bWwjVjg1MC1EaXJlY3RpdmVzIj5WODUwIERpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgIFY4NTAgTWFjaGluZSBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJWODUwLU9wY29kZXMuaHRtbCNWODUwLU9wY29kZXMiPlY4NTAgT3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVjg1MF8wMDJkUmVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVjg1MF8wMDJkUmVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYmQzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WODUwXzAwMmRSZWdzLmh0bWwKQEAgLTAsMCArMSwxMDAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlY4NTAtUmVncyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVjg1MC1TeW50YXguaHRtbCNWODUwLVN5bnRheCIgdGl0bGU9IlY4NTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVjg1MF8wMDJkQ2hhcnMuaHRtbCNWODUwXzAwMmRDaGFycyIgdGl0bGU9IlY4NTAtQ2hhcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWODUwLVJlZ3MiPjwvYT4KKzxhIG5hbWU9IlY4NTBfMDAyZFJlZ3MiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWODUwXzAwMmRDaGFycy5odG1sI1Y4NTBfMDAyZENoYXJzIj5WODUwLUNoYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVjg1MC1TeW50YXguaHRtbCNWODUwLVN5bnRheCI+Vjg1MCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQ3LjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVY4NTAtcmVnaXN0ZXItbmFtZXMtMjE4NSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtVjg1MC0yMTg2Ij48L2E+PGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgbmFtZXMgZm9yIHJlZ2lzdGVyczoKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ynplcm9fMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE4NyI+PC9hPgorPGRsPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDA8L2NvZGU+PGRkPnIwLCB6ZXJvCis8YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgMTwvY29kZT48ZGQ+cjEKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAyPC9jb2RlPjxkZD5yMiwgaHAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic3BfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE4OCI+PC9hPjxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAzPC9jb2RlPjxkZD5yMywgc3AKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZ3BfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE4OSI+PC9hPjxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciA0PC9jb2RlPjxkZD5yNCwgZ3AKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidHBfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE5MCI+PC9hPjxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciA1PC9jb2RlPjxkZD5yNSwgdHAKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciA2PC9jb2RlPjxkZD5yNgorPGJyPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDc8L2NvZGU+PGRkPnI3Cis8YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgODwvY29kZT48ZGQ+cjgKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciA5PC9jb2RlPjxkZD5yOQorPGJyPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDEwPC9jb2RlPjxkZD5yMTAKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAxMTwvY29kZT48ZGQ+cjExCis8YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgMTI8L2NvZGU+PGRkPnIxMgorPGJyPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDEzPC9jb2RlPjxkZD5yMTMKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAxNDwvY29kZT48ZGQ+cjE0Cis8YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgMTU8L2NvZGU+PGRkPnIxNQorPGJyPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDE2PC9jb2RlPjxkZD5yMTYKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAxNzwvY29kZT48ZGQ+cjE3Cis8YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgMTg8L2NvZGU+PGRkPnIxOAorPGJyPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDE5PC9jb2RlPjxkZD5yMTkKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAyMDwvY29kZT48ZGQ+cjIwCis8YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgMjE8L2NvZGU+PGRkPnIyMQorPGJyPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDIyPC9jb2RlPjxkZD5yMjIKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAyMzwvY29kZT48ZGQ+cjIzCis8YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgMjQ8L2NvZGU+PGRkPnIyNAorPGJyPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDI1PC9jb2RlPjxkZD5yMjUKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAyNjwvY29kZT48ZGQ+cjI2Cis8YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgMjc8L2NvZGU+PGRkPnIyNworPGJyPjxkdD48Y29kZT5nZW5lcmFsIHJlZ2lzdGVyIDI4PC9jb2RlPjxkZD5yMjgKKzxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAyOTwvY29kZT48ZGQ+cjI5Cis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVwXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTEiPjwvYT48YnI+PGR0Pjxjb2RlPmdlbmVyYWwgcmVnaXN0ZXIgMzA8L2NvZGU+PGRkPnIzMCwgZXAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibHBfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE5MiI+PC9hPjxicj48ZHQ+PGNvZGU+Z2VuZXJhbCByZWdpc3RlciAzMTwvY29kZT48ZGQ+cjMxLCBscAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlaXBjXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTMiPjwvYT48YnI+PGR0Pjxjb2RlPnN5c3RlbSByZWdpc3RlciAwPC9jb2RlPjxkZD5laXBjCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVpcHN3XzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTQiPjwvYT48YnI+PGR0Pjxjb2RlPnN5c3RlbSByZWdpc3RlciAxPC9jb2RlPjxkZD5laXBzdworPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmZXBjXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTUiPjwvYT48YnI+PGR0Pjxjb2RlPnN5c3RlbSByZWdpc3RlciAyPC9jb2RlPjxkZD5mZXBjCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZlcHN3XzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTYiPjwvYT48YnI+PGR0Pjxjb2RlPnN5c3RlbSByZWdpc3RlciAzPC9jb2RlPjxkZD5mZXBzdworPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlY3JfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE5NyI+PC9hPjxicj48ZHQ+PGNvZGU+c3lzdGVtIHJlZ2lzdGVyIDQ8L2NvZGU+PGRkPmVjcgorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jwc3dfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjE5OCI+PC9hPjxicj48ZHQ+PGNvZGU+c3lzdGVtIHJlZ2lzdGVyIDU8L2NvZGU+PGRkPnBzdworPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjdHBjXzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIxOTkiPjwvYT48YnI+PGR0Pjxjb2RlPnN5c3RlbSByZWdpc3RlciAxNjwvY29kZT48ZGQ+Y3RwYworPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjdHBzd18wMDdkLXJlZ2lzdGVyXzAwMmMtVjg1MC0yMjAwIj48L2E+PGJyPjxkdD48Y29kZT5zeXN0ZW0gcmVnaXN0ZXIgMTc8L2NvZGU+PGRkPmN0cHN3Cis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRicGNfMDA3ZC1yZWdpc3Rlcl8wMDJjLVY4NTAtMjIwMSI+PC9hPjxicj48ZHQ+PGNvZGU+c3lzdGVtIHJlZ2lzdGVyIDE4PC9jb2RlPjxkZD5kYnBjCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRicHN3XzAwN2QtcmVnaXN0ZXJfMDAyYy1WODUwLTIyMDIiPjwvYT48YnI+PGR0Pjxjb2RlPnN5c3RlbSByZWdpc3RlciAxOTwvY29kZT48ZGQ+ZGJwc3cKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiY3RicF8wMDdkLXJlZ2lzdGVyXzAwMmMtVjg1MC0yMjAzIj48L2E+PGJyPjxkdD48Y29kZT5zeXN0ZW0gcmVnaXN0ZXIgMjA8L2NvZGU+PGRkPmN0YnAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZBWF8wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZBWF8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDgyN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZBWC1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVkFYXzAwMmRTeW50YXguaHRtbCNWQVhfMDAyZFN5bnRheCIgdGl0bGU9IlZBWC1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWQVgtQ2hhcnMiPjwvYT4KKzxhIG5hbWU9IlZBWF8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJWQVhfMDAyZFN5bnRheC5odG1sI1ZBWF8wMDJkU3ludGF4Ij5WQVgtU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS40Ni44LjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVZBWC0yMTYxIj48L2E+PGEgbmFtZT0iaW5kZXgtVkFYLWxpbmUtY29tbWVudC1jaGFyYWN0ZXItMjE2MiI+PC9hPlRoZSBwcmVzZW5jZSBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJpbmcgYW55d2hlcmUgb24gYSBsaW5lIGluZGljYXRlcyB0aGUKK3N0YXJ0IG9mIGEgY29tbWVudCB0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGF0IGxpbmUuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgdGhlbiB0aGUgd2hvbGUKK2xpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY2FuIGFsc28gYmUgYQorbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEgcHJlcHJvY2Vzc29yCitjb250cm9sIGNvbW1hbmQgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLVZBWC0yMTYzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLVZBWC0yMTY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtVkFYLWxpbmUtc2VwYXJhdG9yLTIxNjUiPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj47PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZSBzdGF0ZW1lbnRzIG9uIHRoZSBzYW1lCitsaW5lLgorCis8IS0tIENvcHlyaWdodCAxOTk3LCAyMDAyLCAyMDAzLCAyMDA2LCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRPcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WQVhfMDAyZE9wdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWM5NWFmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRPcHRzLmh0bWwKQEAgLTAsMCArMSwxMjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZBWC1PcHRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVmF4LURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZBWF8wMDJkZmxvYXQuaHRtbCNWQVhfMDAyZGZsb2F0IiB0aXRsZT0iVkFYLWZsb2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVkFYLU9wdHMiPjwvYT4KKzxhIG5hbWU9IlZBWF8wMDJkT3B0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWQVhfMDAyZGZsb2F0Lmh0bWwjVkFYXzAwMmRmbG9hdCI+VkFYLWZsb2F0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVmF4XzAwMmREZXBlbmRlbnQuaHRtbCNWYXhfMDAyZERlcGVuZGVudCI+VmF4LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDYuMSBWQVggQ29tbWFuZC1MaW5lIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1jb21tYW5kXzAwMmRsaW5lLW9wdGlvbnMtaWdub3JlZF8wMDJjLVZBWC0yMTE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtVkFYLWNvbW1hbmRfMDAyZGxpbmUtb3B0aW9ucy1pZ25vcmVkLTIxMTUiPjwvYT5UaGUgVmF4IHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IGFjY2VwdHMgYW55IG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucywKK2dpdmVzIGEgd2FybmluZyBtZXNzYWdlIHRoYXQgdGhlIG9wdGlvbiB3YXMgaWdub3JlZCBhbmQgcHJvY2VlZHMuIAorVGhlc2Ugb3B0aW9ucyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBzY3JpcHRzIGRlc2lnbmVkIGZvciBvdGhlcgorcGVvcGxlJ3MgYXNzZW1ibGVycy4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmREXzAwN2RfMDAyYy1pZ25vcmVkLW9uLVZBWC0yMTE2Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkU18wMDdkXzAwMmMtaWdub3JlZC1vbi1WQVgtMjExNyI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZFRfMDA3ZF8wMDJjLWlnbm9yZWQtb24tVkFYLTIxMTgiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LUQgKERlYnVnKTwvY29kZT48ZHQ+PGNvZGU+LVMgKFN5bWJvbCBUYWJsZSk8L2NvZGU+PGR0Pjxjb2RlPi1UIChUb2tlbiBUcmFjZSk8L2NvZGU+PGRkPlRoZXNlIGFyZSBvYnNvbGV0ZSBvcHRpb25zIHVzZWQgdG8gZGVidWcgb2xkIGFzc2VtYmxlcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZGRfMDA3ZF8wMDJjLVZBWC1vcHRpb24tMjExOSI+PC9hPjxicj48ZHQ+PGNvZGU+LWQgKERpc3BsYWNlbWVudCBzaXplIGZvciBKVU1Qcyk8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGV4cGVjdHMgYSBudW1iZXIgZm9sbG93aW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1kPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgTGlrZSBvcHRpb25zCit0aGF0IGV4cGVjdCBmaWxlbmFtZXMsIHRoZSBudW1iZXIgbWF5IGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKG9sZCBzdGFuZGFyZCkgb3IgY29uc3RpdHV0ZSB0aGUgd2hvbGUgb2YgdGhlIGNvbW1hbmQgbGluZQorYXJndW1lbnQgdGhhdCBmb2xsb3dzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBzdGFuZGFyZCkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZFZfMDA3ZF8wMDJjLXJlZHVuZGFudC1vbi1WQVgtMjEyMCI+PC9hPjxicj48ZHQ+PGNvZGU+LVYgKFZpcnR1YWxpemUgSW50ZXJwYXNzIFRlbXBvcmFyeSBGaWxlKTwvY29kZT48ZGQ+U29tZSBvdGhlciBhc3NlbWJsZXJzIHVzZSBhIHRlbXBvcmFyeSBmaWxlLiAgVGhpcyBvcHRpb24KK2NvbW1hbmRlZCB0aGVtIHRvIGtlZXAgdGhlIGluZm9ybWF0aW9uIGluIGFjdGl2ZSBtZW1vcnkgcmF0aGVyCit0aGFuIGluIGEgZGlzayBmaWxlLiAgPGNvZGU+YXM8L2NvZGU+IGFsd2F5cyBkb2VzIHRoaXMsIHNvIHRoaXMKK29wdGlvbiBpcyByZWR1bmRhbnQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZEpfMDA3ZF8wMDJjLWlnbm9yZWQtb24tVkFYLTIxMjEiPjwvYT48YnI+PGR0Pjxjb2RlPi1KIChKVU1QaWZ5IExvbmdlciBCcmFuY2hlcyk8L2NvZGU+PGRkPk1hbnkgMzItYml0IGNvbXB1dGVycyBwZXJtaXQgYSB2YXJpZXR5IG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMKK3RvIGRvIHRoZSBzYW1lIGpvYi4gIFNvbWUgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBzaG9ydCAoYW5kCitmYXN0KSBidXQgaGF2ZSBhIGxpbWl0ZWQgcmFuZ2U7IG90aGVycyBhcmUgbG9uZyAoYW5kIHNsb3cpIGJ1dAorY2FuIGJyYW5jaCBhbnl3aGVyZSBpbiB2aXJ0dWFsIG1lbW9yeS4gIE9mdGVuIHRoZXJlIGFyZSAzCitmbGF2b3JzIG9mIGJyYW5jaDogc2hvcnQsIG1lZGl1bSBhbmQgbG9uZy4gIFNvbWUgb3RoZXIKK2Fzc2VtYmxlcnMgd291bGQgZW1pdCBzaG9ydCBhbmQgbWVkaXVtIGJyYW5jaGVzLCB1bmxlc3MgdG9sZCBieQordGhpcyBvcHRpb24gdG8gZW1pdCBzaG9ydCBhbmQgbG9uZyBicmFuY2hlcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkdF8wMDdkXzAwMmMtaWdub3JlZC1vbi1WQVgtMjEyMiI+PC9hPjxicj48ZHQ+PGNvZGU+LXQgKFRlbXBvcmFyeSBGaWxlIERpcmVjdG9yeSk8L2NvZGU+PGRkPlNvbWUgb3RoZXIgYXNzZW1ibGVycyBtYXkgdXNlIGEgdGVtcG9yYXJ5IGZpbGUsIGFuZCB0aGlzIG9wdGlvbgordGFrZXMgYSBmaWxlbmFtZSBiZWluZyB0aGUgZGlyZWN0b3J5IHRvIHNpdGUgdGhlIHRlbXBvcmFyeQorZmlsZS4gIFNpbmNlIDxjb2RlPmFzPC9jb2RlPiBkb2VzIG5vdCB1c2UgYSB0ZW1wb3JhcnkgZGlzayBmaWxlLCB0aGlzCitvcHRpb24gbWFrZXMgbm8gZGlmZmVyZW5jZS4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbmVlZHMgZXhhY3RseSBvbmUKK2ZpbGVuYW1lLiAKKzwvZGw+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVZNUy1fMDAyOFZBWF8wMDI5LW9wdGlvbnMtMjEyMyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtZm9yLVZBWF8wMDJmVk1TLTIxMjQiPjwvYT48YSBuYW1lPSJpbmRleC1WQVhfMDAyZlZNUy1vcHRpb25zLTIxMjUiPjwvYT48YSBuYW1lPSJpbmRleC1WYXhfMDAyZDExLUMtY29tcGF0aWJpbGl0eS0yMTI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9scy13aXRoLXVwcGVyY2FzZV8wMDJjLVZBWF8wMDJmVk1TLTIxMjciPjwvYT5UaGUgVmF4IHZlcnNpb24gb2YgdGhlIGFzc2VtYmxlciBhY2NlcHRzIGFkZGl0aW9uYWwgb3B0aW9ucyB3aGVuCitjb21waWxlZCBmb3IgVk1TOgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZGhfMDA3ZC1vcHRpb25fMDAyYy1WQVhfMDAyZlZNUy0yMTI4Ij48L2E+Cis8ZGw+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWggPC9zcGFuPjx2YXI+bjwvdmFyPjwvc2FtcD4mcnNxdW87PGRkPkV4dGVybmFsIHN5bWJvbCBvciBzZWN0aW9uICh1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzKSBuYW1lcyBhcmUgbm90CitjYXNlIHNlbnNpdGl2ZSBvbiBWQVgvVk1TIGFuZCBhbHdheXMgbWFwcGVkIHRvIHVwcGVyIGNhc2UuICBUaGlzIGlzCitjb250cmFyeSB0byB0aGUgQyBsYW5ndWFnZSBkZWZpbml0aW9uIHdoaWNoIGV4cGxpY2l0bHkgZGlzdGluZ3Vpc2hlcwordXBwZXIgYW5kIGxvd2VyIGNhc2UuICBUbyBpbXBsZW1lbnQgYSBzdGFuZGFyZCBjb25mb3JtaW5nIEMgY29tcGlsZXIsCituYW1lcyBtdXN0IGJlIGNoYW5nZWQgKG1hcHBlZCkgdG8gcHJlc2VydmUgdGhlIGNhc2UgaW5mb3JtYXRpb24uICBUaGUKK2RlZmF1bHQgbWFwcGluZyBpcyB0byBjb252ZXJ0IGFsbCBsb3dlciBjYXNlIGNoYXJhY3RlcnMgdG8gdXBwZXJjYXNlIGFuZAorYWRkaW5nIGFuIHVuZGVyc2NvcmUgZm9sbG93ZWQgYnkgYSA2IGRpZ2l0IGhleCB2YWx1ZSwgcmVwcmVzZW50aW5nIGEgMjQKK2RpZ2l0IGJpbmFyeSB2YWx1ZS4gIFRoZSBvbmUgZGlnaXRzIGluIHRoZSBiaW5hcnkgdmFsdWUgcmVwcmVzZW50IHdoaWNoCitjaGFyYWN0ZXJzIGFyZSB1cHBlcmNhc2UgaW4gdGhlIG9yaWdpbmFsIHN5bWJvbCBuYW1lLgorCisgICAgIDxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1oIDwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOyBvcHRpb24gZGV0ZXJtaW5lcyBob3cgd2UgbWFwIG5hbWVzLiAgVGhpcyB0YWtlcworc2V2ZXJhbCB2YWx1ZXMuICBObyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1oPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN3aXRjaCBhdCBhbGwgYWxsb3dzIGNhc2UgaGFja2luZyBhcworZGVzY3JpYmVkIGFib3ZlLiAgQSB2YWx1ZSBvZiB6ZXJvICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1oMDwvc3Bhbj48L3NhbXA+JnJzcXVvOykgaW1wbGllcyBuYW1lcyBzaG91bGQgYmUKK3VwcGVyIGNhc2UsIGFuZCBpbmhpYml0cyB0aGUgY2FzZSBoYWNrLiAgQSB2YWx1ZSBvZiAyICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1oMjwvc3Bhbj48L3NhbXA+JnJzcXVvOykKK2ltcGxpZXMgbmFtZXMgc2hvdWxkIGJlIGFsbCBsb3dlciBjYXNlLCB3aXRoIG5vIGNhc2UgaGFjay4gIEEgdmFsdWUgb2YgMworKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWgzPC9zcGFuPjwvc2FtcD4mcnNxdW87KSBpbXBsaWVzIHRoYXQgY2FzZSBzaG91bGQgYmUgcHJlc2VydmVkLiAgVGhlIHZhbHVlIDEgaXMKK3VudXNlZC4gIFRoZSA8Y29kZT4tSDwvY29kZT4gb3B0aW9uIGRpcmVjdHMgPGNvZGU+YXM8L2NvZGU+IHRvIGRpc3BsYXkKK2V2ZXJ5IG1hcHBlZCBzeW1ib2wgZHVyaW5nIGFzc2VtYmx5LgorCisgICAgIDxwPlN5bWJvbHMgd2hvc2UgbmFtZXMgaW5jbHVkZSBhIGRvbGxhciBzaWduICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgZXhjZXB0aW9ucyB0byB0aGUKK2dlbmVyYWwgbmFtZSBtYXBwaW5nLiAgVGhlc2Ugc3ltYm9scyBhcmUgbm9ybWFsbHkgb25seSB1c2VkIHRvIHJlZmVyZW5jZQorVk1TIGxpYnJhcnkgbmFtZXMuICBTdWNoIHN5bWJvbHMgYXJlIGFsd2F5cyBtYXBwZWQgdG8gdXBwZXIgY2FzZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmJfMDA3ZC1vcHRpb25fMDAyYy1WQVhfMDAyZlZNUy0yMTI5Ij48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0rPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0rPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYXVzZXMgPGNvZGU+YXM8L2NvZGU+IHRvIHRydW5jYXRlIGFueSBzeW1ib2wKK25hbWUgbGFyZ2VyIHRoYW4gMzEgY2hhcmFjdGVycy4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0rPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBhbHNvIHByZXZlbnRzIHNvbWUKK2NvZGUgZm9sbG93aW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9tYWluPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN5bWJvbCBub3JtYWxseSBhZGRlZCB0byBtYWtlIHRoZSBvYmplY3QKK2ZpbGUgY29tcGF0aWJsZSB3aXRoIFZheC0xMSAiQyIuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZDFfMDA3ZC1vcHRpb25fMDAyYy1WQVhfMDAyZlZNUy0yMTMwIj48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0xPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCA8Y29kZT5hczwvY29kZT4KK3ZlcnNpb24gMS54LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRIXzAwN2Qtb3B0aW9uXzAwMmMtVkFYXzAwMmZWTVMtMjEzMSI+PC9hPjxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tSDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tSDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gY2F1c2VzIDxjb2RlPmFzPC9jb2RlPiB0byBwcmludCBldmVyeSBzeW1ib2wKK3doaWNoIHdhcyBjaGFuZ2VkIGJ5IGNhc2UgbWFwcGluZy4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WQVhfMDAyZFN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRTeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRiYTNmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRTeW50YXguaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WQVgtU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVmF4LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZBWF8wMDJkbm8uaHRtbCNWQVhfMDAyZG5vIiB0aXRsZT0iVkFYLW5vIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVkFYLVN5bnRheCI+PC9hPgorPGEgbmFtZT0iVkFYXzAwMmRTeW50YXgiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWQVhfMDAyZG5vLmh0bWwjVkFYXzAwMmRubyI+VkFYLW5vPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVmF4XzAwMmREZXBlbmRlbnQuaHRtbCNWYXhfMDAyZERlcGVuZGVudCI+VmF4LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDYuOCBWQVggU3ludGF4PC9oND4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlZBWF8wMDJkQ2hhcnMuaHRtbCNWQVhfMDAyZENoYXJzIj5WQVgtQ2hhcnM8L2E+OiAgICAgICAgICAgICAgICAgU3BlY2lhbCBDaGFyYWN0ZXJzCis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WQVhfMDAyZGJyYW5jaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRicmFuY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGVmMThhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRicmFuY2guaHRtbApAQCAtMCwwICsxLDEzMyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VkFYLWJyYW5jaCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVmF4XzAwMmREZXBlbmRlbnQuaHRtbCNWYXhfMDAyZERlcGVuZGVudCIgdGl0bGU9IlZheC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWQVhfMDAyZG9wY29kZXMuaHRtbCNWQVhfMDAyZG9wY29kZXMiIHRpdGxlPSJWQVgtb3Bjb2RlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZBWF8wMDJkb3BlcmFuZHMuaHRtbCNWQVhfMDAyZG9wZXJhbmRzIiB0aXRsZT0iVkFYLW9wZXJhbmRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVkFYLWJyYW5jaCI+PC9hPgorPGEgbmFtZT0iVkFYXzAwMmRicmFuY2giPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI1ZBWF8wMDJkb3BlcmFuZHMiPlZBWC1vcGVyYW5kczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZBWF8wMDJkb3Bjb2Rlcy5odG1sI1ZBWF8wMDJkb3Bjb2RlcyI+VkFYLW9wY29kZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50Ij5WYXgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40Ni41IFZBWCBCcmFuY2ggSW1wcm92ZW1lbnQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1WQVgtYnJhbmNoLWltcHJvdmVtZW50LTIxNDYiPjwvYT48YSBuYW1lPSJpbmRleC1icmFuY2gtaW1wcm92ZW1lbnRfMDAyYy1WQVgtMjE0NyI+PC9hPjxhIG5hbWU9ImluZGV4LXBzZXVkb18wMDJkb3BzLWZvci1icmFuY2hfMDAyYy1WQVgtMjE0OCI+PC9hPkNlcnRhaW4gcHNldWRvIG9wY29kZXMgYXJlIHBlcm1pdHRlZC4gIFRoZXkgYXJlIGZvciBicmFuY2gKK2luc3RydWN0aW9ucy4gIFRoZXkgZXhwYW5kIHRvIHRoZSBzaG9ydGVzdCBicmFuY2ggaW5zdHJ1Y3Rpb24gdGhhdAorcmVhY2hlcyB0aGUgdGFyZ2V0LiAgR2VuZXJhbGx5IHRoZXNlIG1uZW1vbmljcyBhcmUgbWFkZSBieQorc3Vic3RpdHV0aW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ajwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iPC9zcGFuPjwvc2FtcD4mcnNxdW87IGF0IHRoZSBzdGFydCBvZiBhIERFQyBtbmVtb25pYy4gCitUaGlzIGZlYXR1cmUgaXMgaW5jbHVkZWQgYm90aCBmb3IgY29tcGF0aWJpbGl0eSBhbmQgdG8gaGVscAorY29tcGlsZXJzLiAgSWYgeW91IGRvIG5vdCBuZWVkIHRoaXMgZmVhdHVyZSwgYXZvaWQgdGhlc2UKK29wY29kZXMuICBIZXJlIGFyZSB0aGUgbW5lbW9uaWNzLCBhbmQgdGhlIGNvZGUgdGhleSBjYW4gZXhwYW5kIGludG8uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPmpic2I8L2NvZGU+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+SnNiPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFscmVhZHkgYW4gaW5zdHJ1Y3Rpb24gbW5lbW9uaWMsIHNvIHdlIGNob3NlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+amJzYjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+KGJ5dGUgZGlzcGxhY2VtZW50KTxkZD48a2JkPmJzYmIgLi4uPC9rYmQ+Cis8YnI+PGR0Pih3b3JkIGRpc3BsYWNlbWVudCk8ZGQ+PGtiZD5ic2J3IC4uLjwva2JkPgorPGJyPjxkdD4obG9uZyBkaXNwbGFjZW1lbnQpPGRkPjxrYmQ+anNiIC4uLjwva2JkPgorPC9kbD4KKyAgICAgPGJyPjxkdD48Y29kZT5qYnI8L2NvZGU+PGR0Pjxjb2RlPmpyPC9jb2RlPjxkZD5VbmNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+KGJ5dGUgZGlzcGxhY2VtZW50KTxkZD48a2JkPmJyYiAuLi48L2tiZD4KKzxicj48ZHQ+KHdvcmQgZGlzcGxhY2VtZW50KTxkZD48a2JkPmJydyAuLi48L2tiZD4KKzxicj48ZHQ+KGxvbmcgZGlzcGxhY2VtZW50KTxkZD48a2JkPmptcCAuLi48L2tiZD4KKzwvZGw+CisgICAgIDxicj48ZHQ+PGNvZGU+ajwvY29kZT48dmFyPkNPTkQ8L3Zhcj48ZGQ+PHZhcj5DT05EPC92YXI+IG1heSBiZSBhbnkgb25lIG9mIHRoZSBjb25kaXRpb25hbCBicmFuY2hlcworPGNvZGU+bmVxPC9jb2RlPiwgPGNvZGU+bmVxdTwvY29kZT4sIDxjb2RlPmVxbDwvY29kZT4sIDxjb2RlPmVxbHU8L2NvZGU+LCA8Y29kZT5ndHI8L2NvZGU+LAorPGNvZGU+Z2VxPC9jb2RlPiwgPGNvZGU+bHNzPC9jb2RlPiwgPGNvZGU+Z3RydTwvY29kZT4sIDxjb2RlPmxlcXU8L2NvZGU+LCA8Y29kZT52YzwvY29kZT4sIDxjb2RlPnZzPC9jb2RlPiwKKzxjb2RlPmdlcXU8L2NvZGU+LCA8Y29kZT5jYzwvY29kZT4sIDxjb2RlPmxzc3U8L2NvZGU+LCA8Y29kZT5jczwvY29kZT4uIAorPHZhcj5DT05EPC92YXI+IG1heSBhbHNvIGJlIG9uZSBvZiB0aGUgYml0IHRlc3RzCis8Y29kZT5iczwvY29kZT4sIDxjb2RlPmJjPC9jb2RlPiwgPGNvZGU+YnNzPC9jb2RlPiwgPGNvZGU+YmNzPC9jb2RlPiwgPGNvZGU+YnNjPC9jb2RlPiwgPGNvZGU+YmNjPC9jb2RlPiwKKzxjb2RlPmJzc2k8L2NvZGU+LCA8Y29kZT5iY2NpPC9jb2RlPiwgPGNvZGU+bGJzPC9jb2RlPiwgPGNvZGU+bGJjPC9jb2RlPi4gCis8dmFyPk5PVENPTkQ8L3Zhcj4gaXMgdGhlIG9wcG9zaXRlIGNvbmRpdGlvbiB0byA8dmFyPkNPTkQ8L3Zhcj4uCisgICAgICAgICAgPGRsPgorPGR0PihieXRlIGRpc3BsYWNlbWVudCk8ZGQ+PGtiZD5iPC9rYmQ+PHZhcj5DT05EPC92YXI+PGtiZD4gLi4uPC9rYmQ+Cis8YnI+PGR0Pih3b3JkIGRpc3BsYWNlbWVudCk8ZGQ+PGtiZD5iPC9rYmQ+PHZhcj5OT1RDT05EPC92YXI+PGtiZD4gZm9vIDsgYnJ3IC4uLiA7IGZvbzo8L2tiZD4KKzxicj48ZHQ+KGxvbmcgZGlzcGxhY2VtZW50KTxkZD48a2JkPmI8L2tiZD48dmFyPk5PVENPTkQ8L3Zhcj48a2JkPiBmb28gOyBqbXAgLi4uIDsgZm9vOjwva2JkPgorPC9kbD4KKyAgICAgPGJyPjxkdD48Y29kZT5qYWNiPC9jb2RlPjx2YXI+WDwvdmFyPjxkZD48dmFyPlg8L3Zhcj4gbWF5IGJlIG9uZSBvZiA8Y29kZT5iIGQgZiBnIGggbCB3PC9jb2RlPi4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+KHdvcmQgZGlzcGxhY2VtZW50KTxkZD48dmFyPk9QQ09ERTwvdmFyPjxrYmQ+IC4uLjwva2JkPgorPGJyPjxkdD4obG9uZyBkaXNwbGFjZW1lbnQpPGRkPgorICAgICAgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAgICAgIDx2YXI+T1BDT0RFPC92YXI+IC4uLiwgZm9vIDsKKyAgICAgICAgICAgICAgIGJyYiBiYXIgOworICAgICAgICAgICAgICAgZm9vOiBqbXAgLi4uIDsKKyAgICAgICAgICAgICAgIGJhcjoKKzwvcHJlPgorICAgICAgICAgIDwvZGw+CisgICAgIDxicj48ZHQ+PGNvZGU+amFvYjwvY29kZT48dmFyPllZWTwvdmFyPjxkZD48dmFyPllZWTwvdmFyPiBtYXkgYmUgb25lIG9mIDxjb2RlPmxzcyBsZXE8L2NvZGU+LiAKKzxicj48ZHQ+PGNvZGU+anNvYjwvY29kZT48dmFyPlpaWjwvdmFyPjxkZD48dmFyPlpaWjwvdmFyPiBtYXkgYmUgb25lIG9mIDxjb2RlPmdlcSBndHI8L2NvZGU+LgorICAgICAgICAgIDxkbD4KKzxkdD4oYnl0ZSBkaXNwbGFjZW1lbnQpPGRkPjx2YXI+T1BDT0RFPC92YXI+PGtiZD4gLi4uPC9rYmQ+Cis8YnI+PGR0Pih3b3JkIGRpc3BsYWNlbWVudCk8ZGQ+CisgICAgICAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICAgICAgPHZhcj5PUENPREU8L3Zhcj4gLi4uLCBmb28gOworICAgICAgICAgICAgICAgYnJiIGJhciA7CisgICAgICAgICAgICAgICBmb286IGJydyA8dmFyPmRlc3RpbmF0aW9uPC92YXI+IDsKKyAgICAgICAgICAgICAgIGJhcjoKKzwvcHJlPgorICAgICAgICAgIDxicj48ZHQ+KGxvbmcgZGlzcGxhY2VtZW50KTxkZD4KKyAgICAgICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgICA8dmFyPk9QQ09ERTwvdmFyPiAuLi4sIGZvbyA7CisgICAgICAgICAgICAgICBicmIgYmFyIDsKKyAgICAgICAgICAgICAgIGZvbzogam1wIDx2YXI+ZGVzdGluYXRpb248L3Zhcj4gOworICAgICAgICAgICAgICAgYmFyOgorPC9wcmU+CisgICAgICAgICAgPC9kbD4KKyAgICAgPGJyPjxkdD48Y29kZT5hb2JsZXE8L2NvZGU+PGR0Pjxjb2RlPmFvYmxzczwvY29kZT48ZHQ+PGNvZGU+c29iZ2VxPC9jb2RlPjxkdD48Y29kZT5zb2JndHI8L2NvZGU+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD4oYnl0ZSBkaXNwbGFjZW1lbnQpPGRkPjx2YXI+T1BDT0RFPC92YXI+PGtiZD4gLi4uPC9rYmQ+Cis8YnI+PGR0Pih3b3JkIGRpc3BsYWNlbWVudCk8ZGQ+CisgICAgICAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICAgICAgPHZhcj5PUENPREU8L3Zhcj4gLi4uLCBmb28gOworICAgICAgICAgICAgICAgYnJiIGJhciA7CisgICAgICAgICAgICAgICBmb286IGJydyA8dmFyPmRlc3RpbmF0aW9uPC92YXI+IDsKKyAgICAgICAgICAgICAgIGJhcjoKKzwvcHJlPgorICAgICAgICAgIDxicj48ZHQ+KGxvbmcgZGlzcGxhY2VtZW50KTxkZD4KKyAgICAgICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgICA8dmFyPk9QQ09ERTwvdmFyPiAuLi4sIGZvbyA7CisgICAgICAgICAgICAgICBicmIgYmFyIDsKKyAgICAgICAgICAgICAgIGZvbzogam1wIDx2YXI+ZGVzdGluYXRpb248L3Zhcj4gOworICAgICAgICAgICAgICAgYmFyOgorPC9wcmU+CisgICAgICAgICAgPC9kbD4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRkaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WQVhfMDAyZGRpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTc0ODAwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRkaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VkFYLWRpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlZheF8wMDJkRGVwZW5kZW50Lmh0bWwjVmF4XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJWYXgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVkFYXzAwMmRmbG9hdC5odG1sI1ZBWF8wMDJkZmxvYXQiIHRpdGxlPSJWQVgtZmxvYXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJWQVhfMDAyZG9wY29kZXMuaHRtbCNWQVhfMDAyZG9wY29kZXMiIHRpdGxlPSJWQVgtb3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlZBWC1kaXJlY3RpdmVzIj48L2E+Cis8YSBuYW1lPSJWQVhfMDAyZGRpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVkFYXzAwMmRvcGNvZGVzLmh0bWwjVkFYXzAwMmRvcGNvZGVzIj5WQVgtb3Bjb2RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZBWF8wMDJkZmxvYXQuaHRtbCNWQVhfMDAyZGZsb2F0Ij5WQVgtZmxvYXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50Ij5WYXgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40Ni4zIFZheCBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1WQVgtMjEzNiI+PC9hPjxhIG5hbWU9ImluZGV4LVZBWC1tYWNoaW5lLWRpcmVjdGl2ZXMtMjEzNyI+PC9hPlRoZSBWYXggdmVyc2lvbiBvZiB0aGUgYXNzZW1ibGVyIHN1cHBvcnRzIGZvdXIgZGlyZWN0aXZlcyBmb3IKK2dlbmVyYXRpbmcgVmF4IGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cy4gIFRoZXkgYXJlIGRlc2NyaWJlZCBpbiB0aGUKK3RhYmxlIGJlbG93LgorCisgICA8cD48YSBuYW1lPSJpbmRleC13aWRlLWZsb2F0aW5nLXBvaW50LWRpcmVjdGl2ZXNfMDAyYy1WQVgtMjEzOCI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZGZsb2F0XzAwN2QtZGlyZWN0aXZlXzAwMmMtVkFYLTIxMzkiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LmRmbG9hdDwvY29kZT48ZGQ+VGhpcyBleHBlY3RzIHplcm8gb3IgbW9yZSBmbG9udW1zLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQKK2Fzc2VtYmxlcyBWYXggPGNvZGU+ZDwvY29kZT4gZm9ybWF0IDY0LWJpdCBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjE0MCI+PC9hPjxicj48ZHQ+PGNvZGU+LmZmbG9hdDwvY29kZT48ZGQ+VGhpcyBleHBlY3RzIHplcm8gb3IgbW9yZSBmbG9udW1zLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQKK2Fzc2VtYmxlcyBWYXggPGNvZGU+ZjwvY29kZT4gZm9ybWF0IDMyLWJpdCBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JnZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjE0MSI+PC9hPjxicj48ZHQ+PGNvZGU+LmdmbG9hdDwvY29kZT48ZGQ+VGhpcyBleHBlY3RzIHplcm8gb3IgbW9yZSBmbG9udW1zLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQKK2Fzc2VtYmxlcyBWYXggPGNvZGU+ZzwvY29kZT4gZm9ybWF0IDY0LWJpdCBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JoZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjE0MiI+PC9hPjxicj48ZHQ+PGNvZGU+LmhmbG9hdDwvY29kZT48ZGQ+VGhpcyBleHBlY3RzIHplcm8gb3IgbW9yZSBmbG9udW1zLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCBhbmQKK2Fzc2VtYmxlcyBWYXggPGNvZGU+aDwvY29kZT4gZm9ybWF0IDEyOC1iaXQgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WQVhfMDAyZGZsb2F0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WQVhfMDAyZGZsb2F0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0NzQyZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZBWF8wMDJkZmxvYXQuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WQVgtZmxvYXQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlZheF8wMDJkRGVwZW5kZW50Lmh0bWwjVmF4XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJWYXgtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIiB0aXRsZT0iVkFYLU9wdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJWQVhfMDAyZGRpcmVjdGl2ZXMuaHRtbCNWQVhfMDAyZGRpcmVjdGl2ZXMiIHRpdGxlPSJWQVgtZGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlZBWC1mbG9hdCI+PC9hPgorPGEgbmFtZT0iVkFYXzAwMmRmbG9hdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWQVhfMDAyZGRpcmVjdGl2ZXMuaHRtbCNWQVhfMDAyZGRpcmVjdGl2ZXMiPlZBWC1kaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj5WQVgtT3B0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlZheF8wMDJkRGVwZW5kZW50Lmh0bWwjVmF4XzAwMmREZXBlbmRlbnQiPlZheC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ2LjIgVkFYIEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtVkFYLWZsb2F0aW5nLXBvaW50LTIxMzIiPjwvYT48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLVZBWC0yMTMzIj48L2E+Q29udmVyc2lvbiBvZiBmbG9udW1zIHRvIGZsb2F0aW5nIHBvaW50IGlzIGNvcnJlY3QsIGFuZAorY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIGFzc2VtYmxlcnMuICBSb3VuZGluZyBpcwordG93YXJkcyB6ZXJvIGlmIHRoZSByZW1haW5kZXIgaXMgZXhhY3RseSBoYWxmIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuCisKKyAgIDxwPjxjb2RlPkQ8L2NvZGU+LCA8Y29kZT5GPC9jb2RlPiwgPGNvZGU+RzwvY29kZT4gYW5kIDxjb2RlPkg8L2NvZGU+IGZsb2F0aW5nIHBvaW50IGZvcm1hdHMKK2FyZSB1bmRlcnN0b29kLgorCisgICA8cD5JbW1lZGlhdGUgZmxvYXRpbmcgbGl0ZXJhbHMgKDxlbT5lLmcuPC9lbT4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TYCQ2Ljk8L3NwYW4+PC9zYW1wPiZyc3F1bzspCithcmUgcmVuZGVyZWQgY29ycmVjdGx5LiAgQWdhaW4sIHJvdW5kaW5nIGlzIHRvd2FyZHMgemVybyBpbiB0aGUKK2JvdW5kYXJ5IGNhc2UuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1WQVgtMjEzNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZG91YmxlXzAwN2QtZGlyZWN0aXZlXzAwMmMtVkFYLTIxMzUiPjwvYT5UaGUgPGNvZGU+LmZsb2F0PC9jb2RlPiBkaXJlY3RpdmUgcHJvZHVjZXMgPGNvZGU+ZjwvY29kZT4gZm9ybWF0IG51bWJlcnMuIAorVGhlIDxjb2RlPi5kb3VibGU8L2NvZGU+IGRpcmVjdGl2ZSBwcm9kdWNlcyA8Y29kZT5kPC9jb2RlPiBmb3JtYXQgbnVtYmVycy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRuby5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRuby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDlmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WQVhfMDAyZG5vLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VkFYLW5vIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVmF4LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZBWF8wMDJkb3BlcmFuZHMuaHRtbCNWQVhfMDAyZG9wZXJhbmRzIiB0aXRsZT0iVkFYLW9wZXJhbmRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVkFYXzAwMmRTeW50YXguaHRtbCNWQVhfMDAyZFN5bnRheCIgdGl0bGU9IlZBWC1TeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWQVgtbm8iPjwvYT4KKzxhIG5hbWU9IlZBWF8wMDJkbm8iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVkFYXzAwMmRTeW50YXguaHRtbCNWQVhfMDAyZFN5bnRheCI+VkFYLVN5bnRheDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZBWF8wMDJkb3BlcmFuZHMuaHRtbCNWQVhfMDAyZG9wZXJhbmRzIj5WQVgtb3BlcmFuZHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50Ij5WYXgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40Ni43IE5vdCBTdXBwb3J0ZWQgb24gVkFYPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtVkFYLWJpdGZpZWxkcy1ub3Qtc3VwcG9ydGVkLTIxNTkiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRmaWVsZHNfMDAyYy1ub3Qtc3VwcG9ydGVkLW9uLVZBWC0yMTYwIj48L2E+VmF4IGJpdCBmaWVsZHMgY2FuIG5vdCBiZSBhc3NlbWJsZWQgd2l0aCA8Y29kZT5hczwvY29kZT4uICBTb21lb25lCitjYW4gYWRkIHRoZSByZXF1aXJlZCBjb2RlIGlmIHRoZXkgcmVhbGx5IG5lZWQgaXQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZBWF8wMDJkb3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRvcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiODVkNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZBWF8wMDJkb3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZBWC1vcGNvZGVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVmF4LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI1ZBWF8wMDJkZGlyZWN0aXZlcyIgdGl0bGU9IlZBWC1kaXJlY3RpdmVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVkFYXzAwMmRicmFuY2guaHRtbCNWQVhfMDAyZGJyYW5jaCIgdGl0bGU9IlZBWC1icmFuY2giPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWQVgtb3Bjb2RlcyI+PC9hPgorPGEgbmFtZT0iVkFYXzAwMmRvcGNvZGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZBWF8wMDJkYnJhbmNoLmh0bWwjVkFYXzAwMmRicmFuY2giPlZBWC1icmFuY2g8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWQVhfMDAyZGRpcmVjdGl2ZXMuaHRtbCNWQVhfMDAyZGRpcmVjdGl2ZXMiPlZBWC1kaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVmF4XzAwMmREZXBlbmRlbnQuaHRtbCNWYXhfMDAyZERlcGVuZGVudCI+VmF4LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDYuNCBWQVggT3Bjb2RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVZBWC1vcGNvZGUtbW5lbW9uaWNzLTIxNDMiPjwvYT48YSBuYW1lPSJpbmRleC1vcGNvZGUtbW5lbW9uaWNzXzAwMmMtVkFYLTIxNDQiPjwvYT48YSBuYW1lPSJpbmRleC1tbmVtb25pY3MtZm9yLW9wY29kZXNfMDAyYy1WQVgtMjE0NSI+PC9hPkFsbCBERUMgbW5lbW9uaWNzIGFyZSBzdXBwb3J0ZWQuICBCZXdhcmUgdGhhdCA8Y29kZT5jYXNlLi4uPC9jb2RlPgoraW5zdHJ1Y3Rpb25zIGhhdmUgZXhhY3RseSAzIG9wZXJhbmRzLiAgVGhlIGRpc3BhdGNoIHRhYmxlIHRoYXQKK2ZvbGxvd3MgdGhlIDxjb2RlPmNhc2UuLi48L2NvZGU+IGluc3RydWN0aW9uIHNob3VsZCBiZSBtYWRlIHdpdGgKKzxjb2RlPi53b3JkPC9jb2RlPiBzdGF0ZW1lbnRzLiAgVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggYWxsIHVuaXgKK2Fzc2VtYmxlcnMgd2Uga25vdyBvZi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRvcGVyYW5kcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVkFYXzAwMmRvcGVyYW5kcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMTkxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WQVhfMDAyZG9wZXJhbmRzLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VkFYLW9wZXJhbmRzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iVmF4LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZBWF8wMDJkYnJhbmNoLmh0bWwjVkFYXzAwMmRicmFuY2giIHRpdGxlPSJWQVgtYnJhbmNoIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVkFYXzAwMmRuby5odG1sI1ZBWF8wMDJkbm8iIHRpdGxlPSJWQVgtbm8iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWQVgtb3BlcmFuZHMiPjwvYT4KKzxhIG5hbWU9IlZBWF8wMDJkb3BlcmFuZHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVkFYXzAwMmRuby5odG1sI1ZBWF8wMDJkbm8iPlZBWC1ubzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZBWF8wMDJkYnJhbmNoLmh0bWwjVkFYXzAwMmRicmFuY2giPlZBWC1icmFuY2g8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50Ij5WYXgtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40Ni42IFZBWCBPcGVyYW5kczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVZBWC1vcGVyYW5kLW5vdGF0aW9uLTIxNDkiPjwvYT48YSBuYW1lPSJpbmRleC1vcGVyYW5kLW5vdGF0aW9uXzAwMmMtVkFYLTIxNTAiPjwvYT48YSBuYW1lPSJpbmRleC1pbW1lZGlhdGUtY2hhcmFjdGVyXzAwMmMtVkFYLTIxNTEiPjwvYT48YSBuYW1lPSJpbmRleC1WQVgtaW1tZWRpYXRlLWNoYXJhY3Rlci0yMTUyIj48L2E+VGhlIGltbWVkaWF0ZSBjaGFyYWN0ZXIgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBVbml4IGNvbXBhdGliaWxpdHksIG5vdAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIERFQyB3cml0ZXMgaXQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWluZGlyZWN0LWNoYXJhY3Rlcl8wMDJjLVZBWC0yMTUzIj48L2E+PGEgbmFtZT0iaW5kZXgtVkFYLWluZGlyZWN0LWNoYXJhY3Rlci0yMTU0Ij48L2E+VGhlIGluZGlyZWN0IGNoYXJhY3RlciBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIFVuaXggY29tcGF0aWJpbGl0eSwgbm90CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgREVDIHdyaXRlcyBpdC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZGlzcGxhY2VtZW50LXNpemluZy1jaGFyYWN0ZXJfMDAyYy1WQVgtMjE1NSI+PC9hPjxhIG5hbWU9ImluZGV4LVZBWC1kaXNwbGFjZW1lbnQtc2l6aW5nLWNoYXJhY3Rlci0yMTU2Ij48L2E+VGhlIGRpc3BsYWNlbWVudCBzaXppbmcgY2hhcmFjdGVyIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoYW4gYWNjZW50IGdyYXZlKSBmb3IKK1VuaXggY29tcGF0aWJpbGl0eSwgbm90ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Xjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyBERUMgd3JpdGVzIGl0LiAgVGhlIGxldHRlcgorcHJlY2VkaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtYXkgaGF2ZSBlaXRoZXIgY2FzZS4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Rzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBub3QKK3VuZGVyc3Rvb2QsIGJ1dCBhbGwgb3RoZXIgbGV0dGVycyAoPGNvZGU+YiBpIGwgcyB3PC9jb2RlPikgYXJlIHVuZGVyc3Rvb2QuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtVkFYLTIxNTciPjwvYT48YSBuYW1lPSJpbmRleC1WQVgtcmVnaXN0ZXItbmFtZXMtMjE1OCI+PC9hPlJlZ2lzdGVyIG5hbWVzIHVuZGVyc3Rvb2QgYXJlIDxjb2RlPnIwIHIxIHIyIC4uLiByMTUgYXAgZnAgc3AKK3BjPC9jb2RlPi4gIFVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMgYXJlIGVxdWl2YWxlbnQuCisKKyAgIDxwPkZvciBpbnN0YW5jZQorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHRzdGIgKndgJDQocjUpCis8L3ByZT4KKyAgIDxwPkFueSBleHByZXNzaW9uIGlzIHBlcm1pdHRlZCBpbiBhbiBvcGVyYW5kLiAgT3BlcmFuZHMgYXJlIGNvbW1hCitzZXBhcmF0ZWQuCisKKzwhLS0gVGhlcmUgaXMgc29tZSBidWcgdG8gZG8gd2l0aCByZWNvZ25pemluZyBleHByZXNzaW9ucyAtLT4KKzwhLS0gaW4gb3BlcmFuZHMsIGJ1dCBJIGZvcmdldCB3aGF0IGl0IGlzLiAgSXQgaXMgLS0+Cis8IS0tIGEgc3ludGF4IGNsYXNoIGJlY2F1c2UgKCkgaXMgdXNlZCBhcyBhbiBhZGRyZXNzIG1vZGUgLS0+Cis8IS0tIGFuZCB0byBlbmNhcHN1bGF0ZSBzdWItZXhwcmVzc2lvbnMuIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVlRhYmxlRW50cnkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZUYWJsZUVudHJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiMTlhMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZUYWJsZUVudHJ5Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VlRhYmxlRW50cnkgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZlcnNpb24uaHRtbCNWZXJzaW9uIiB0aXRsZT0iVmVyc2lvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZUYWJsZUluaGVyaXQuaHRtbCNWVGFibGVJbmhlcml0IiB0aXRsZT0iVlRhYmxlSW5oZXJpdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlZUYWJsZUVudHJ5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZUYWJsZUluaGVyaXQuaHRtbCNWVGFibGVJbmhlcml0Ij5WVGFibGVJbmhlcml0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVmVyc2lvbi5odG1sI1ZlcnNpb24iPlZlcnNpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTE5IDxjb2RlPi52dGFibGVfZW50cnkgPC9jb2RlPjx2YXI+dGFibGU8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidnRhYmxlXzAwNWZlbnRyeV8wMDdkLWRpcmVjdGl2ZS01MDMiPjwvYT5UaGlzIGRpcmVjdGl2ZSBmaW5kcyBvciBjcmVhdGVzIGEgc3ltYm9sIDxjb2RlPnRhYmxlPC9jb2RlPiBhbmQgY3JlYXRlcyBhCis8Y29kZT5WVEFCTEVfRU5UUlk8L2NvZGU+IHJlbG9jYXRpb24gZm9yIGl0IHdpdGggYW4gYWRkZW5kIG9mIDxjb2RlPm9mZnNldDwvY29kZT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZUYWJsZUluaGVyaXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZUYWJsZUluaGVyaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTQwNzA5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVlRhYmxlSW5oZXJpdC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZUYWJsZUluaGVyaXQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZUYWJsZUVudHJ5Lmh0bWwjVlRhYmxlRW50cnkiIHRpdGxlPSJWVGFibGVFbnRyeSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ildhcm5pbmcuaHRtbCNXYXJuaW5nIiB0aXRsZT0iV2FybmluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlZUYWJsZUluaGVyaXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iV2FybmluZy5odG1sI1dhcm5pbmciPldhcm5pbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWVGFibGVFbnRyeS5odG1sI1ZUYWJsZUVudHJ5Ij5WVGFibGVFbnRyeTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMjAgPGNvZGU+LnZ0YWJsZV9pbmhlcml0IDwvY29kZT48dmFyPmNoaWxkPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5wYXJlbnQ8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnZ0YWJsZV8wMDVmaW5oZXJpdF8wMDdkLWRpcmVjdGl2ZS01MDQiPjwvYT5UaGlzIGRpcmVjdGl2ZSBmaW5kcyB0aGUgc3ltYm9sIDxjb2RlPmNoaWxkPC9jb2RlPiBhbmQgZmluZHMgb3IgY3JlYXRlcyB0aGUgc3ltYm9sCis8Y29kZT5wYXJlbnQ8L2NvZGU+IGFuZCB0aGVuIGNyZWF0ZXMgYSA8Y29kZT5WVEFCTEVfSU5IRVJJVDwvY29kZT4gcmVsb2NhdGlvbiBmb3IgdGhlCitwYXJlbnQgd2hvc2UgYWRkZW5kIGlzIHRoZSB2YWx1ZSBvZiB0aGUgY2hpbGQgc3ltYm9sLiAgQXMgYSBzcGVjaWFsIGNhc2UgdGhlCitwYXJlbnQgbmFtZSBvZiA8Y29kZT4wPC9jb2RlPiBpcyB0cmVhdGVkIGFzIHJlZmVycmluZyB0byB0aGUgPGNvZGU+KkFCUyo8L2NvZGU+IHNlY3Rpb24uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZhbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVmFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhOTg5MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZhbC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZhbCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVWxlYjEyOC5odG1sI1VsZWIxMjgiIHRpdGxlPSJVbGViMTI4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVmVyc2lvbi5odG1sI1ZlcnNpb24iIHRpdGxlPSJWZXJzaW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVmFsIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZlcnNpb24uaHRtbCNWZXJzaW9uIj5WZXJzaW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVWxlYjEyOC5odG1sI1VsZWIxMjgiPlVsZWIxMjg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTE3IDxjb2RlPi52YWwgPC9jb2RlPjx2YXI+YWRkcjwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidmFsXzAwN2QtZGlyZWN0aXZlLTQ5OSI+PC9hPjxhIG5hbWU9ImluZGV4LUNPRkYtdmFsdWUtYXR0cmlidXRlLTUwMCI+PC9hPjxhIG5hbWU9ImluZGV4LXZhbHVlLWF0dHJpYnV0ZV8wMDJjLUNPRkYtNTAxIj48L2E+VGhpcyBkaXJlY3RpdmUsIHBlcm1pdHRlZCBvbmx5IHdpdGhpbiA8Y29kZT4uZGVmPC9jb2RlPi88Y29kZT4uZW5kZWY8L2NvZGU+IHBhaXJzLAorcmVjb3JkcyB0aGUgYWRkcmVzcyA8dmFyPmFkZHI8L3Zhcj4gYXMgdGhlIHZhbHVlIGF0dHJpYnV0ZSBvZiBhIHN5bWJvbCB0YWJsZQorZW50cnkuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ZheF8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WYXhfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ODI4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WYXhfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZheC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilo4MDAwXzAwMmREZXBlbmRlbnQuaHRtbCNaODAwMF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWjgwMDAtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVmF4LURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iVmF4XzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODAwMF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwMDBfMDAyZERlcGVuZGVudCI+WjgwMDAtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjQ2IFZBWCBEZXBlbmRlbnQgRmVhdHVyZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1WQVgtc3VwcG9ydC0yMTEzIj48L2E+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJWQVhfMDAyZE9wdHMuaHRtbCNWQVhfMDAyZE9wdHMiPlZBWC1PcHRzPC9hPjogICAgICAgICAgICAgICAgICAgICBWQVggQ29tbWFuZC1MaW5lIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlZBWF8wMDJkZmxvYXQuaHRtbCNWQVhfMDAyZGZsb2F0Ij5WQVgtZmxvYXQ8L2E+OiAgICAgICAgICAgICAgICAgICAgVkFYIEZsb2F0aW5nIFBvaW50Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJWQVhfMDAyZGRpcmVjdGl2ZXMuaHRtbCNWQVhfMDAyZGRpcmVjdGl2ZXMiPlZBWC1kaXJlY3RpdmVzPC9hPjogICAgICAgICAgICAgICBWYXggTWFjaGluZSBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJWQVhfMDAyZG9wY29kZXMuaHRtbCNWQVhfMDAyZG9wY29kZXMiPlZBWC1vcGNvZGVzPC9hPjogICAgICAgICAgICAgICAgICBWQVggT3Bjb2RlcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iVkFYXzAwMmRicmFuY2guaHRtbCNWQVhfMDAyZGJyYW5jaCI+VkFYLWJyYW5jaDwvYT46ICAgICAgICAgICAgICAgICAgIFZBWCBCcmFuY2ggSW1wcm92ZW1lbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IlZBWF8wMDJkb3BlcmFuZHMuaHRtbCNWQVhfMDAyZG9wZXJhbmRzIj5WQVgtb3BlcmFuZHM8L2E+OiAgICAgICAgICAgICAgICAgVkFYIE9wZXJhbmRzCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJWQVhfMDAyZG5vLmh0bWwjVkFYXzAwMmRubyI+VkFYLW5vPC9hPjogICAgICAgICAgICAgICAgICAgICAgIE5vdCBTdXBwb3J0ZWQgb24gVkFYCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJWQVhfMDAyZFN5bnRheC5odG1sI1ZBWF8wMDJkU3ludGF4Ij5WQVgtU3ludGF4PC9hPjogICAgICAgICAgICAgICAgICAgVkFYIFN5bnRheAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVmVyc2lvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVmVyc2lvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYWIxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9WZXJzaW9uLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VmVyc2lvbiAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiIHRpdGxlPSJQc2V1ZG8gT3BzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVmFsLmh0bWwjVmFsIiB0aXRsZT0iVmFsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVlRhYmxlRW50cnkuaHRtbCNWVGFibGVFbnRyeSIgdGl0bGU9IlZUYWJsZUVudHJ5Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVmVyc2lvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWVGFibGVFbnRyeS5odG1sI1ZUYWJsZUVudHJ5Ij5WVGFibGVFbnRyeTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZhbC5odG1sI1ZhbCI+VmFsPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHNldWRvLU9wcy5odG1sI1BzZXVkby1PcHMiPlBzZXVkbyBPcHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjExOCA8Y29kZT4udmVyc2lvbiAiPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGNvZGU+IjwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnZlcnNpb25fMDA3ZC1kaXJlY3RpdmUtNTAyIj48L2E+VGhpcyBkaXJlY3RpdmUgY3JlYXRlcyBhIDxjb2RlPi5ub3RlPC9jb2RlPiBzZWN0aW9uIGFuZCBwbGFjZXMgaW50byBpdCBhbiBFTEYKK2Zvcm1hdHRlZCBub3RlIG9mIHR5cGUgTlRfVkVSU0lPTi4gIFRoZSBub3RlJ3MgbmFtZSBpcyBzZXQgdG8gPGNvZGU+c3RyaW5nPC9jb2RlPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvVy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzM0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9XLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idi5odG1sI3YiIHRpdGxlPSJ2Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWi5odG1sI1oiIHRpdGxlPSJaIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJaLmh0bWwjWiI+WjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InYuaHRtbCN2Ij52PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjE2IENvbnRyb2wgV2FybmluZ3M6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2Fybjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLXdhcm48L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1mYXRhbC13YXJuaW5nczwvc3Bhbj48L3NhbXA+PC9oMz4KKworPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gc2hvdWxkIG5ldmVyIGdpdmUgYSB3YXJuaW5nIG9yIGVycm9yIG1lc3NhZ2Ugd2hlbgorYXNzZW1ibGluZyBjb21waWxlciBvdXRwdXQuICBCdXQgcHJvZ3JhbXMgd3JpdHRlbiBieSBwZW9wbGUgb2Z0ZW4KK2NhdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHRvIGdpdmUgYSB3YXJuaW5nIHRoYXQgYSBwYXJ0aWN1bGFyIGFzc3VtcHRpb24gd2FzCittYWRlLiAgQWxsIHN1Y2ggd2FybmluZ3MgYXJlIGRpcmVjdGVkIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBmaWxlLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZFctMTAxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR3YXJuLTEwMiI+PC9hPjxhIG5hbWU9ImluZGV4LXN1cHByZXNzaW5nLXdhcm5pbmdzLTEwMyI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtc3VwcHJlc3NpbmctMTA0Ij48L2E+SWYgeW91IHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVc8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby13YXJuPC9zcGFuPjwvc2FtcD4gb3B0aW9ucywgbm8gd2FybmluZ3MgYXJlIGlzc3VlZC4gCitUaGlzIG9ubHkgYWZmZWN0cyB0aGUgd2FybmluZyBtZXNzYWdlczogaXQgZG9lcyBub3QgY2hhbmdlIGFueSBwYXJ0aWN1bGFyIG9mCitob3cgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYXNzZW1ibGVzIHlvdXIgZmlsZS4gIEVycm9ycywgd2hpY2ggc3RvcCB0aGUgYXNzZW1ibHksCithcmUgc3RpbGwgcmVwb3J0ZWQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRmYXRhbF8wMDJkd2FybmluZ3MtMTA1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXJyb3JzXzAwMmMtY2F1c2VkLWJ5LXdhcm5pbmdzLTEwNiI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtY2F1c2luZy1lcnJvci0xMDciPjwvYT5JZiB5b3UgdXNlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZhdGFsLXdhcm5pbmdzPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBjb25zaWRlcnMKK2ZpbGVzIHRoYXQgZ2VuZXJhdGUgd2FybmluZ3MgdG8gYmUgaW4gZXJyb3IuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR3YXJuLTEwOCI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtc3dpdGNoaW5nLW9uLTEwOSI+PC9hPllvdSBjYW4gc3dpdGNoIHRoZXNlIG9wdGlvbnMgb2ZmIGFnYWluIGJ5IHNwZWNpZnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13YXJuPC9zcGFuPjwvc2FtcD4sIHdoaWNoCitjYXVzZXMgd2FybmluZ3MgdG8gYmUgb3V0cHV0IGFzIHVzdWFsLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9XYXJuaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9XYXJuaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2NDJmNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1dhcm5pbmcuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5XYXJuaW5nIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWVGFibGVJbmhlcml0Lmh0bWwjVlRhYmxlSW5oZXJpdCIgdGl0bGU9IlZUYWJsZUluaGVyaXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJXZWFrLmh0bWwjV2VhayIgdGl0bGU9IldlYWsiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJXYXJuaW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IldlYWsuaHRtbCNXZWFrIj5XZWFrPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVlRhYmxlSW5oZXJpdC5odG1sI1ZUYWJsZUluaGVyaXQiPlZUYWJsZUluaGVyaXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTIxIDxjb2RlPi53YXJuaW5nICI8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48Y29kZT4iPC9jb2RlPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdhcm5pbmctZGlyZWN0aXZlLTUwNSI+PC9hPlNpbWlsYXIgdG8gdGhlIGRpcmVjdGl2ZSA8Y29kZT4uZXJyb3I8L2NvZGU+Cisoc2VlIDxhIGhyZWY9IkVycm9yLmh0bWwjRXJyb3IiPjxjb2RlPi5lcnJvciAiPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGNvZGU+IjwvY29kZT48L2E+KSwgYnV0IGp1c3QgZW1pdHMgYSB3YXJuaW5nLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9XZWFrLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9XZWFrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2NGM2MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1dlYWsuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5XZWFrIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJXYXJuaW5nLmh0bWwjV2FybmluZyIgdGl0bGU9Ildhcm5pbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJXZWFrcmVmLmh0bWwjV2Vha3JlZiIgdGl0bGU9IldlYWtyZWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJXZWFrIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IldlYWtyZWYuaHRtbCNXZWFrcmVmIj5XZWFrcmVmPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iV2FybmluZy5odG1sI1dhcm5pbmciPldhcm5pbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTIyIDxjb2RlPi53ZWFrIDwvY29kZT48dmFyPm5hbWVzPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3ZWFrXzAwN2QtZGlyZWN0aXZlLTUwNiI+PC9hPlRoaXMgZGlyZWN0aXZlIHNldHMgdGhlIHdlYWsgYXR0cmlidXRlIG9uIHRoZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzeW1ib2wKKzxjb2RlPm5hbWVzPC9jb2RlPi4gIElmIHRoZSBzeW1ib2xzIGRvIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGV5IHdpbGwgYmUgY3JlYXRlZC4KKworICAgPHA+T24gQ09GRiB0YXJnZXRzIG90aGVyIHRoYW4gUEUsIHdlYWsgc3ltYm9scyBhcmUgYSBHTlUgZXh0ZW5zaW9uLiAgVGhpcworZGlyZWN0aXZlIHNldHMgdGhlIHdlYWsgYXR0cmlidXRlIG9uIHRoZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzeW1ib2wKKzxjb2RlPm5hbWVzPC9jb2RlPi4gIElmIHRoZSBzeW1ib2xzIGRvIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGV5IHdpbGwgYmUgY3JlYXRlZC4KKworICAgPHA+T24gdGhlIFBFIHRhcmdldCwgd2VhayBzeW1ib2xzIGFyZSBzdXBwb3J0ZWQgbmF0aXZlbHkgYXMgd2VhayBhbGlhc2VzLiAKK1doZW4gYSB3ZWFrIHN5bWJvbCBpcyBjcmVhdGVkIHRoYXQgaXMgbm90IGFuIGFsaWFzLCBHQVMgY3JlYXRlcyBhbgorYWx0ZXJuYXRlIHN5bWJvbCB0byBob2xkIHRoZSBkZWZhdWx0IHZhbHVlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9XZWFrcmVmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9XZWFrcmVmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyZGY5MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1dlYWtyZWYuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5XZWFrcmVmIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyIgdGl0bGU9IlBzZXVkbyBPcHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJXZWFrLmh0bWwjV2VhayIgdGl0bGU9IldlYWsiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJXb3JkLmh0bWwjV29yZCIgdGl0bGU9IldvcmQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJXZWFrcmVmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IldvcmQuaHRtbCNXb3JkIj5Xb3JkPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iV2Vhay5odG1sI1dlYWsiPldlYWs8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMTIzIDxjb2RlPi53ZWFrcmVmIDwvY29kZT48dmFyPmFsaWFzPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj50YXJnZXQ8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndlYWtyZWZfMDA3ZC1kaXJlY3RpdmUtNTA3Ij48L2E+VGhpcyBkaXJlY3RpdmUgY3JlYXRlcyBhbiBhbGlhcyB0byB0aGUgdGFyZ2V0IHN5bWJvbCB0aGF0IGVuYWJsZXMgdGhlIHN5bWJvbCB0bworYmUgcmVmZXJlbmNlZCB3aXRoIHdlYWstc3ltYm9sIHNlbWFudGljcywgYnV0IHdpdGhvdXQgYWN0dWFsbHkgbWFraW5nIGl0IHdlYWsuIAorSWYgZGlyZWN0IHJlZmVyZW5jZXMgb3IgZGVmaW5pdGlvbnMgb2YgdGhlIHN5bWJvbCBhcmUgcHJlc2VudCwgdGhlbiB0aGUgc3ltYm9sCit3aWxsIG5vdCBiZSB3ZWFrLCBidXQgaWYgYWxsIHJlZmVyZW5jZXMgdG8gaXQgYXJlIHRocm91Z2ggd2VhayByZWZlcmVuY2VzLCB0aGUKK3N5bWJvbCB3aWxsIGJlIG1hcmtlZCBhcyB3ZWFrIGluIHRoZSBzeW1ib2wgdGFibGUuCisKKyAgIDxwPlRoZSBlZmZlY3QgaXMgZXF1aXZhbGVudCB0byBtb3ZpbmcgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGFsaWFzIHRvIGEgc2VwYXJhdGUKK2Fzc2VtYmx5IHNvdXJjZSBmaWxlLCByZW5hbWluZyB0aGUgYWxpYXMgdG8gdGhlIHN5bWJvbCBpbiBpdCwgZGVjbGFyaW5nIHRoZQorc3ltYm9sIGFzIHdlYWsgdGhlcmUsIGFuZCBydW5uaW5nIGEgcmVsb2FkYWJsZSBsaW5rIHRvIG1lcmdlIHRoZSBvYmplY3QgZmlsZXMKK3Jlc3VsdGluZyBmcm9tIHRoZSBhc3NlbWJseSBvZiB0aGUgbmV3IHNvdXJjZSBmaWxlIGFuZCB0aGUgb2xkIHNvdXJjZSBmaWxlIHRoYXQKK2hhZCB0aGUgcmVmZXJlbmNlcyB0byB0aGUgYWxpYXMgcmVtb3ZlZC4KKworICAgPHA+VGhlIGFsaWFzIGl0c2VsZiBuZXZlciBtYWtlcyB0byB0aGUgc3ltYm9sIHRhYmxlLCBhbmQgaXMgZW50aXJlbHkgaGFuZGxlZAord2l0aGluIHRoZSBhc3NlbWJsZXIuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1doaXRlc3BhY2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1doaXRlc3BhY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYwMWQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvV2hpdGVzcGFjZS5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPldoaXRlc3BhY2UgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN5bnRheC5odG1sI1N5bnRheCIgdGl0bGU9IlN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIiB0aXRsZT0iUHJlcHJvY2Vzc2luZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiIHRpdGxlPSJDb21tZW50cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IldoaXRlc3BhY2UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN5bnRheC5odG1sI1N5bnRheCI+U3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yIFdoaXRlc3BhY2U8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13aGl0ZXNwYWNlLTEyMiI+PC9hPjxkZm4+V2hpdGVzcGFjZTwvZGZuPiBpcyBvbmUgb3IgbW9yZSBibGFua3Mgb3IgdGFicywgaW4gYW55IG9yZGVyLiAKK1doaXRlc3BhY2UgaXMgdXNlZCB0byBzZXBhcmF0ZSBzeW1ib2xzLCBhbmQgdG8gbWFrZSBwcm9ncmFtcyBuZWF0ZXIgZm9yCitwZW9wbGUgdG8gcmVhZC4gIFVubGVzcyB3aXRoaW4gY2hhcmFjdGVyIGNvbnN0YW50cworKHNlZSA8YSBocmVmPSJDaGFyYWN0ZXJzLmh0bWwjQ2hhcmFjdGVycyI+Q2hhcmFjdGVyIENvbnN0YW50czwvYT4pLCBhbnkgd2hpdGVzcGFjZSBtZWFucyB0aGUgc2FtZQorYXMgZXhhY3RseSBvbmUgc3BhY2UuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1dvcmQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1dvcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjU4M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvV29yZC5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPldvcmQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IldlYWtyZWYuaHRtbCNXZWFrcmVmIiB0aXRsZT0iV2Vha3JlZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRlcHJlY2F0ZWQuaHRtbCNEZXByZWNhdGVkIiB0aXRsZT0iRGVwcmVjYXRlZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IldvcmQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGVwcmVjYXRlZC5odG1sI0RlcHJlY2F0ZWQiPkRlcHJlY2F0ZWQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJXZWFrcmVmLmh0bWwjV2Vha3JlZiI+V2Vha3JlZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIj5Qc2V1ZG8gT3BzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMjQgPGNvZGU+LndvcmQgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndvcmRfMDA3ZC1kaXJlY3RpdmUtNTA4Ij48L2E+VGhpcyBkaXJlY3RpdmUgZXhwZWN0cyB6ZXJvIG9yIG1vcmUgPHZhcj5leHByZXNzaW9uczwvdmFyPiwgb2YgYW55IHNlY3Rpb24sCitzZXBhcmF0ZWQgYnkgY29tbWFzLgorCisgICA8cD5UaGUgc2l6ZSBvZiB0aGUgbnVtYmVyIGVtaXR0ZWQsIGFuZCBpdHMgYnl0ZSBvcmRlciwKK2RlcGVuZCBvbiB3aGF0IHRhcmdldCBjb21wdXRlciB0aGUgYXNzZW1ibHkgaXMgZm9yLgorCis8IS0tIG9uIGFtZDI5aywgaTk2MCwgc3BhcmMgdGhlICJzcGVjaWFsIHRyZWF0bWVudCB0byBzdXBwb3J0IGNvbXBpbGVycyIgZG9lc24ndCAtLT4KKzwhLS0gaGFwcGVuLTMyLWJpdCBhZGRyZXNzYWJpbGl0eSwgcGVyaW9kOyBubyBsb25nL3Nob3J0IGp1bXBzLiAtLT4KKyAgIDxwPjxhIG5hbWU9ImluZGV4LWRpZmZlcmVuY2UtdGFibGVzLWFsdGVyZWQtNTA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWx0ZXJlZC1kaWZmZXJlbmNlLXRhYmxlcy01MTAiPjwvYT48YmxvY2txdW90ZT4KKzxlbT5XYXJuaW5nOiBTcGVjaWFsIFRyZWF0bWVudCB0byBzdXBwb3J0IENvbXBpbGVyczwvZW0+Cis8L2Jsb2NrcXVvdGU+CisKKyAgIDxwPk1hY2hpbmVzIHdpdGggYSAzMi1iaXQgYWRkcmVzcyBzcGFjZSwgYnV0IHRoYXQgZG8gbGVzcyB0aGFuIDMyLWJpdAorYWRkcmVzc2luZywgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgdHJlYXRtZW50LiAgSWYgdGhlIG1hY2hpbmUgb2YKK2ludGVyZXN0IHRvIHlvdSBkb2VzIDMyLWJpdCBhZGRyZXNzaW5nIChvciBkb2Vzbid0IHJlcXVpcmUgaXQ7CitzZWUgPGEgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+KSwgeW91IGNhbiBpZ25vcmUgdGhpcyBpc3N1ZS4KKworICAgPHA+SW4gb3JkZXIgdG8gYXNzZW1ibGUgY29tcGlsZXIgb3V0cHV0IGludG8gc29tZXRoaW5nIHRoYXQgd29ya3MsCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBvY2Nhc2lvbmFsbHkgZG9lcyBzdHJhbmdlIHRoaW5ncyB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi53b3JkPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZXMuIAorRGlyZWN0aXZlcyBvZiB0aGUgZm9ybSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi53b3JkIHN5bTEtc3ltMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgb2Z0ZW4gZW1pdHRlZCBieQorY29tcGlsZXJzIGFzIHBhcnQgb2YganVtcCB0YWJsZXMuICBUaGVyZWZvcmUsIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYXNzZW1ibGVzIGEKK2RpcmVjdGl2ZSBvZiB0aGUgZm9ybSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi53b3JkIHN5bTEtc3ltMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKzxjb2RlPnN5bTE8L2NvZGU+IGFuZCA8Y29kZT5zeW0yPC9jb2RlPiBkb2VzIG5vdCBmaXQgaW4gMTYgYml0cywgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4KK2NyZWF0ZXMgYSA8ZGZuPnNlY29uZGFyeSBqdW1wIHRhYmxlPC9kZm4+LCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIG5leHQgbGFiZWwuIAorVGhpcyBzZWNvbmRhcnkganVtcCB0YWJsZSBpcyBwcmVjZWRlZCBieSBhIHNob3J0LWp1bXAgdG8gdGhlCitmaXJzdCBieXRlIGFmdGVyIHRoZSBzZWNvbmRhcnkgdGFibGUuICBUaGlzIHNob3J0LWp1bXAgcHJldmVudHMgdGhlIGZsb3cKK29mIGNvbnRyb2wgZnJvbSBhY2NpZGVudGFsbHkgZmFsbGluZyBpbnRvIHRoZSBuZXcgdGFibGUuICBJbnNpZGUgdGhlCit0YWJsZSBpcyBhIGxvbmctanVtcCB0byA8Y29kZT5zeW0yPC9jb2RlPi4gIFRoZSBvcmlnaW5hbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi53b3JkPC9zcGFuPjwvc2FtcD4mcnNxdW87Citjb250YWlucyA8Y29kZT5zeW0xPC9jb2RlPiBtaW51cyB0aGUgYWRkcmVzcyBvZiB0aGUgbG9uZy1qdW1wIHRvCis8Y29kZT5zeW0yPC9jb2RlPi4KKworICAgPHA+SWYgdGhlcmUgd2VyZSBzZXZlcmFsIG9jY3VycmVuY2VzIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LndvcmQgc3ltMS1zeW0yPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJlZm9yZSB0aGUKK3NlY29uZGFyeSBqdW1wIHRhYmxlLCBhbGwgb2YgdGhlbSBhcmUgYWRqdXN0ZWQuICBJZiB0aGVyZSB3YXMgYQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ud29yZCBzeW0zLXN5bTQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoYXQgYWxzbyBkaWQgbm90IGZpdCBpbiBzaXh0ZWVuIGJpdHMsIGEKK2xvbmctanVtcCB0byA8Y29kZT5zeW00PC9jb2RlPiBpcyBpbmNsdWRlZCBpbiB0aGUgc2Vjb25kYXJ5IGp1bXAgdGFibGUsCithbmQgdGhlIDxjb2RlPi53b3JkPC9jb2RlPiBkaXJlY3RpdmVzIGFyZSBhZGp1c3RlZCB0byBjb250YWluIDxjb2RlPnN5bTM8L2NvZGU+CittaW51cyB0aGUgYWRkcmVzcyBvZiB0aGUgbG9uZy1qdW1wIHRvIDxjb2RlPnN5bTQ8L2NvZGU+OyBhbmQgc28gb24sIGZvciBhcyBtYW55CitlbnRyaWVzIGluIHRoZSBvcmlnaW5hbCBqdW1wIHRhYmxlIGFzIG5lY2Vzc2FyeS4KKworPCEtLSBlbmQgICAgIERJRkYtVEJMLUtMVUdFIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MzEyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WEdBVEUtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWODUwXzAwMmREZXBlbmRlbnQuaHRtbCNWODUwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJWODUwLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlhTVE9STVkxNl8wMDJkRGVwZW5kZW50Lmh0bWwjWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJYU1RPUk1ZMTYtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWEdBVEUtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJYR0FURV8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlhTVE9STVkxNl8wMDJkRGVwZW5kZW50Lmh0bWwjWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQiPlhTVE9STVkxNi1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWODUwXzAwMmREZXBlbmRlbnQuaHRtbCNWODUwXzAwMmREZXBlbmRlbnQiPlY4NTAtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjQ4IFhHQVRFIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVhHQVRFLXN1cHBvcnQtMjIyNyI+PC9hPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iWEdBVEVfMDAyZE9wdHMuaHRtbCNYR0FURV8wMDJkT3B0cyI+WEdBVEUtT3B0czwvYT46ICAgICAgICAgICAgICAgICAgICBYR0FURSBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJYR0FURV8wMDJkU3ludGF4Lmh0bWwjWEdBVEVfMDAyZFN5bnRheCI+WEdBVEUtU3ludGF4PC9hPjogICAgICAgICAgICAgICAgICBTeW50YXgKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlhHQVRFXzAwMmREaXJlY3RpdmVzLmh0bWwjWEdBVEVfMDAyZERpcmVjdGl2ZXMiPlhHQVRFLURpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgICAgQXNzZW1ibGVyIERpcmVjdGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IlhHQVRFXzAwMmRGbG9hdC5odG1sI1hHQVRFXzAwMmRGbG9hdCI+WEdBVEUtRmxvYXQ8L2E+OiAgICAgICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludAorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iWEdBVEVfMDAyZG9wY29kZXMuaHRtbCNYR0FURV8wMDJkb3Bjb2RlcyI+WEdBVEUtb3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgICBPcGNvZGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YR0FURV8wMDJkRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZERpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2ZiMzcwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZERpcmVjdGl2ZXMuaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5YR0FURS1EaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwjWEdBVEVfMDAyZERlcGVuZGVudCIgdGl0bGU9IlhHQVRFLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlhHQVRFXzAwMmRTeW50YXguaHRtbCNYR0FURV8wMDJkU3ludGF4IiB0aXRsZT0iWEdBVEUtU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjWEdBVEVfMDAyZEZsb2F0IiB0aXRsZT0iWEdBVEUtRmxvYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYR0FURS1EaXJlY3RpdmVzIj48L2E+Cis8YSBuYW1lPSJYR0FURV8wMDJkRGlyZWN0aXZlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJYR0FURV8wMDJkRmxvYXQuaHRtbCNYR0FURV8wMDJkRmxvYXQiPlhHQVRFLUZsb2F0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWEdBVEVfMDAyZFN5bnRheC5odG1sI1hHQVRFXzAwMmRTeW50YXgiPlhHQVRFLVN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlhHQVRFXzAwMmREZXBlbmRlbnQuaHRtbCNYR0FURV8wMDJkRGVwZW5kZW50Ij5YR0FURS1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ4LjMgQXNzZW1ibGVyIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1hc3NlbWJsZXItZGlyZWN0aXZlc18wMDJjLVhHQVRFLTIyNDUiPjwvYT48YSBuYW1lPSJpbmRleC1YR0FURS1hc3NlbWJsZXItZGlyZWN0aXZlcy0yMjQ2Ij48L2E+CitUaGUgWEdBVEUgdmVyc2lvbiBvZiA8Y29kZT5hczwvY29kZT4gaGF2ZSB0aGUgZm9sbG93aW5nCitzcGVjaWZpYyBhc3NlbWJsZXIgZGlyZWN0aXZlczoKKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZEZsb2F0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YR0FURV8wMDJkRmxvYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjI3ZTdhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZEZsb2F0Lmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WEdBVEUtRmxvYXQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlhHQVRFXzAwMmREZXBlbmRlbnQuaHRtbCNYR0FURV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWEdBVEUtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iWEdBVEVfMDAyZERpcmVjdGl2ZXMuaHRtbCNYR0FURV8wMDJkRGlyZWN0aXZlcyIgdGl0bGU9IlhHQVRFLURpcmVjdGl2ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJYR0FURV8wMDJkb3Bjb2Rlcy5odG1sI1hHQVRFXzAwMmRvcGNvZGVzIiB0aXRsZT0iWEdBVEUtb3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlhHQVRFLUZsb2F0Ij48L2E+Cis8YSBuYW1lPSJYR0FURV8wMDJkRmxvYXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWEdBVEVfMDAyZG9wY29kZXMuaHRtbCNYR0FURV8wMDJkb3Bjb2RlcyI+WEdBVEUtb3Bjb2RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlhHQVRFXzAwMmREaXJlY3RpdmVzLmh0bWwjWEdBVEVfMDAyZERpcmVjdGl2ZXMiPlhHQVRFLURpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwjWEdBVEVfMDAyZERlcGVuZGVudCI+WEdBVEUtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40OC40IEZsb2F0aW5nIFBvaW50PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1YR0FURS0yMjQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtWEdBVEUtZmxvYXRpbmctcG9pbnQtMjI0OCI+PC9hPlBhY2tlZCBkZWNpbWFsIChQKSBmb3JtYXQgZmxvYXRpbmcgbGl0ZXJhbHMgYXJlIG5vdCBzdXBwb3J0ZWQoeWV0KS4KKworICAgPHA+VGhlIGZsb2F0aW5nIHBvaW50IGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IGRpcmVjdGl2ZXMgYXJlIHRoZXNlLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbG9hdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLVhHQVRFLTIyNDkiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LmZsb2F0PC9jb2RlPjxkZD48Y29kZT5TaW5nbGU8L2NvZGU+IHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jkb3VibGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1YR0FURS0yMjUwIj48L2E+PGJyPjxkdD48Y29kZT4uZG91YmxlPC9jb2RlPjxkZD48Y29kZT5Eb3VibGU8L2NvZGU+IHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JleHRlbmRfMDA3ZC1kaXJlY3RpdmUtWEdBVEUtMjI1MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGRvdWJsZV8wMDdkLWRpcmVjdGl2ZS1YR0FURS0yMjUyIj48L2E+PGJyPjxkdD48Y29kZT4uZXh0ZW5kPC9jb2RlPjxkdD48Y29kZT4ubGRvdWJsZTwvY29kZT48ZGQ+PGNvZGU+RXh0ZW5kZWQ8L2NvZGU+IHByZWNpc2lvbiAoPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+KSBmbG9hdGluZyBwb2ludCBjb25zdGFudHMuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZE9wdHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1hHQVRFXzAwMmRPcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjNmZmZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1hHQVRFXzAwMmRPcHRzLmh0bWwKQEAgLTAsMCArMSw3NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WEdBVEUtT3B0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWEdBVEVfMDAyZERlcGVuZGVudC5odG1sI1hHQVRFXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJYR0FURS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJYR0FURV8wMDJkU3ludGF4Lmh0bWwjWEdBVEVfMDAyZFN5bnRheCIgdGl0bGU9IlhHQVRFLVN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlhHQVRFLU9wdHMiPjwvYT4KKzxhIG5hbWU9IlhHQVRFXzAwMmRPcHRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlhHQVRFXzAwMmRTeW50YXguaHRtbCNYR0FURV8wMDJkU3ludGF4Ij5YR0FURS1TeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwjWEdBVEVfMDAyZERlcGVuZGVudCI+WEdBVEUtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40OC4xIFhHQVRFIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtWEdBVEUtMjIyOCI+PC9hPjxhIG5hbWU9ImluZGV4LVhHQVRFLW9wdGlvbnMtMjIyOSI+PC9hPlRoZSBGcmVlc2NhbGUgWEdBVEUgdmVyc2lvbiBvZiA8Y29kZT5hczwvY29kZT4gaGFzIGEgZmV3IG1hY2hpbmUKK2RlcGVuZGVudCBvcHRpb25zLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zaG9ydF8wMDdkLTIyMzAiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LW1zaG9ydDwvY29kZT48ZGQ+VGhpcyBvcHRpb24gY29udHJvbHMgdGhlIEFCSSBhbmQgaW5kaWNhdGVzIHRvIHVzZSBhIDE2LWJpdCBpbnRlZ2VyIEFCSS4gCitJdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLiAKK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1sb25nXzAwN2QtMjIzMSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1sb25nPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBjb250cm9scyB0aGUgQUJJIGFuZCBpbmRpY2F0ZXMgdG8gdXNlIGEgMzItYml0IGludGVnZXIgQUJJLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtc2hvcnRfMDAyZGRvdWJsZV8wMDdkLTIyMzIiPjwvYT48YnI+PGR0Pjxjb2RlPi1tc2hvcnQtZG91YmxlPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBjb250cm9scyB0aGUgQUJJIGFuZCBpbmRpY2F0ZXMgdG8gdXNlIGEgMzItYml0IGZsb2F0IEFCSS4gCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbG9uZ18wMDJkZG91YmxlXzAwN2QtMjIzMyI+PC9hPjxicj48ZHQ+PGNvZGU+LW1sb25nLWRvdWJsZTwvY29kZT48ZGQ+VGhpcyBvcHRpb24gY29udHJvbHMgdGhlIEFCSSBhbmQgaW5kaWNhdGVzIHRvIHVzZSBhIDY0LWJpdCBmbG9hdCBBQkkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkcHJpbnRfMDAyZGluc25fMDAyZHN5bnRheF8wMDdkLTIyMzQiPjwvYT48YnI+PGR0Pjxjb2RlPi0tcHJpbnQtaW5zbi1zeW50YXg8L2NvZGU+PGRkPllvdSBjYW4gdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcHJpbnQtaW5zbi1zeW50YXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIHRvIG9idGFpbiB0aGUKK3N5bnRheCBkZXNjcmlwdGlvbiBvZiB0aGUgaW5zdHJ1Y3Rpb24gd2hlbiBhbiBlcnJvciBpcyBkZXRlY3RlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRwcmludF8wMDJkb3Bjb2Rlc18wMDdkLTIyMzUiPjwvYT48YnI+PGR0Pjxjb2RlPi0tcHJpbnQtb3Bjb2RlczwvY29kZT48ZGQ+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1wcmludC1vcGNvZGVzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBwcmludHMgdGhlIGxpc3Qgb2YgYWxsIHRoZQoraW5zdHJ1Y3Rpb25zIHdpdGggdGhlaXIgc3ludGF4LiBPbmNlIHRoZSBsaXN0IGlzIHByaW50ZWQKKzxjb2RlPmFzPC9jb2RlPiBleGl0cy4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZFN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWEdBVEVfMDAyZFN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDhmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YR0FURV8wMDJkU3ludGF4Lmh0bWwKQEAgLTAsMCArMSwxMjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlhHQVRFLVN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWEdBVEVfMDAyZERlcGVuZGVudC5odG1sI1hHQVRFXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJYR0FURS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJYR0FURV8wMDJkT3B0cy5odG1sI1hHQVRFXzAwMmRPcHRzIiB0aXRsZT0iWEdBVEUtT3B0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlhHQVRFXzAwMmREaXJlY3RpdmVzLmh0bWwjWEdBVEVfMDAyZERpcmVjdGl2ZXMiIHRpdGxlPSJYR0FURS1EaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWEdBVEUtU3ludGF4Ij48L2E+Cis8YSBuYW1lPSJYR0FURV8wMDJkU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlhHQVRFXzAwMmREaXJlY3RpdmVzLmh0bWwjWEdBVEVfMDAyZERpcmVjdGl2ZXMiPlhHQVRFLURpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJYR0FURV8wMDJkT3B0cy5odG1sI1hHQVRFXzAwMmRPcHRzIj5YR0FURS1PcHRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWEdBVEVfMDAyZERlcGVuZGVudC5odG1sI1hHQVRFXzAwMmREZXBlbmRlbnQiPlhHQVRFLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDguMiBTeW50YXg8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1YR0FURS1zeW50YXgtMjIzNiI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bnRheF8wMDJjLVhHQVRFLTIyMzciPjwvYT4KK0luIFhHQVRFIFJJU0Mgc3ludGF4LCB0aGUgaW5zdHJ1Y3Rpb24gbmFtZSBjb21lcyBmaXJzdCBhbmQgaXQgbWF5CitiZSBmb2xsb3dlZCBieSB1cCB0byB0aHJlZSBvcGVyYW5kcy4gT3BlcmFuZHMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMKKygmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiw8L3NwYW4+PC9zYW1wPiZyc3F1bzspLiA8Y29kZT5hczwvY29kZT4gd2lsbCBjb21wbGFpbiBpZiB0b28gbWFueSBvcGVyYW5kcyBhcmUgc3BlY2lmaWVkCitmb3IgYSBnaXZlbiBpbnN0cnVjdGlvbi4gVGhlIHNhbWUgd2lsbCBoYXBwZW4gaWYgeW91IHNwZWNpZmllZCB0b28gZmV3Cisgb3BlcmFuZHMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBub3AKKyAgICAgbGRsICAjMjMKKyAgICAgQ01QICBSMSwgUjIKKzwvcHJlPgorICAgPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLVhHQVRFLTIyMzgiPjwvYT48YSBuYW1lPSJpbmRleC1YR0FURS1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIyMzkiPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIG9yIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBhbnl3aGVyZQorb24gYSBsaW5lIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mCit0aGF0IGxpbmUuCisKKyAgIDxwPkEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIGFsc28KK2ludHJvZHVjZXMgYSBsaW5lIGNvbW1lbnQsIGJ1dCB0aGVzZSBjaGFyYWN0ZXJzIGRvIG5vdCB3b3JrIGVsc2V3aGVyZQorb24gdGhlIGxpbmUuICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsaW5lIGlzIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRoZW4gYXMKK3dlbGwgYXMgc3RhcnRpbmcgYSBjb21tZW50LCB0aGUgbGluZSBjb3VsZCBhbHNvIGJlIGxvZ2ljYWwgbGluZSBudW1iZXIKK2RpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IgY29udHJvbCBjb21tYW5kCisoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtWEdBVEUtMjI0MCI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1YR0FURS0yMjQxIj48L2E+PGEgbmFtZT0iaW5kZXgtWEdBVEUtbGluZS1zZXBhcmF0b3ItMjI0MiI+PC9hPlRoZSBYR0FURSBhc3NlbWJsZXIgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgYSBsaW5lIHNlcGFyYXRvcgorY2hhcmFjdGVyLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1YR0FURS1hZGRyZXNzaW5nLW1vZGVzLTIyNDMiPjwvYT48YSBuYW1lPSJpbmRleC1hZGRyZXNzaW5nLW1vZGVzXzAwMmMtWEdBVEUtMjI0NCI+PC9hPlRoZSBmb2xsb3dpbmcgYWRkcmVzc2luZyBtb2RlcyBhcmUgdW5kZXJzdG9vZCBmb3IgWEdBVEU6CisgICAgIDxkbD4KKzxkdD48ZGZuPkluaGVyZW50PC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5JbW1lZGlhdGUgMyBCaXQgV2lkZTwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5JbW1lZGlhdGUgNCBCaXQgV2lkZTwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5JbW1lZGlhdGUgOCBCaXQgV2lkZTwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5Nb25hZGljIEFkZHJlc3Npbmc8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjx2YXI+cmVnPC92YXI+PC9zYW1wPiZyc3F1bzsKKworICAgICA8YnI+PGR0PjxkZm4+RHlhZGljIEFkZHJlc3Npbmc8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjx2YXI+cmVnPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiwgPC9zcGFuPjx2YXI+cmVnPC92YXI+PC9zYW1wPiZyc3F1bzsKKworICAgICA8YnI+PGR0PjxkZm4+VHJpYWRpYyBBZGRyZXNzaW5nPC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48dmFyPnJlZzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sIDwvc3Bhbj48dmFyPnJlZzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sIDwvc3Bhbj48dmFyPnJlZzwvdmFyPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48ZGZuPlJlbGF0aXZlIEFkZHJlc3NpbmcgOSBCaXQgV2lkZTwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PHZhcj5zeW1ib2w8L3Zhcj48L3NhbXA+JnJzcXVvOworCisgICAgIDxicj48ZHQ+PGRmbj5SZWxhdGl2ZSBBZGRyZXNzaW5nIDEwIEJpdCBXaWRlPC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48dmFyPnN5bWJvbDwvdmFyPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48ZGZuPkluZGV4IFJlZ2lzdGVyIHBsdXMgSW1tZWRpYXRlIE9mZnNldDwvZGZuPjxkZD4mbHNxdW87PHNhbXA+PHZhcj5yZWc8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LCAoPC9zcGFuPjx2YXI+cmVnPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiwgIzwvc3Bhbj48dmFyPm51bWJlcjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48ZGZuPkluZGV4IFJlZ2lzdGVyIHBsdXMgUmVnaXN0ZXIgT2Zmc2V0PC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48dmFyPnJlZzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sIDwvc3Bhbj48dmFyPnJlZzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sIDwvc3Bhbj48dmFyPnJlZzwvdmFyPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGJyPjxkdD48ZGZuPkluZGV4IFJlZ2lzdGVyIHBsdXMgUmVnaXN0ZXIgT2Zmc2V0IHdpdGggUG9zdC1pbmNyZW1lbnQ8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjx2YXI+cmVnPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiwgPC9zcGFuPjx2YXI+cmVnPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiwgPC9zcGFuPjx2YXI+cmVnPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPis8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8YnI+PGR0PjxkZm4+SW5kZXggUmVnaXN0ZXIgcGx1cyBSZWdpc3RlciBPZmZzZXQgd2l0aCBQcmUtZGVjcmVtZW50PC9kZm4+PGRkPiZsc3F1bzs8c2FtcD48dmFyPnJlZzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sIDwvc3Bhbj48dmFyPnJlZzwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sIC08L3NwYW4+PHZhcj5yZWc8L3Zhcj48L3NhbXA+JnJzcXVvOworCisgICAgIDxwPlRoZSByZWdpc3RlciBjYW4gYmUgZWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UjI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UjM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlI0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlI1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlI2PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ujc8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDwvZGw+CisKKyAgIDxwPkNvbnZpZW5jZSBtYWNybyBvcGNvZGVzIHRvIGRlYWwgd2l0aCAxNi1iaXQgdmFsdWVzIGhhdmUgYmVlbiBhZGRlZC4KKworICAgICA8ZGw+Cis8ZHQ+PGRmbj5JbW1lZGlhdGUgMTYgQml0IFdpZGU8L2Rmbj48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjx2YXI+bnVtYmVyPC92YXI+PC9zYW1wPiZyc3F1bzssIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48dmFyPnN5bWJvbDwvdmFyPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+Rm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgbGR3IFIxLCAjMTAyNAorICAgICAgICAgIGxkdyBSMywgdGltZXIKKyAgICAgICAgICBsZHcgUjEsIChSMSwgIzApCisgICAgICAgICAgQ09NIFIxCisgICAgICAgICAgc3R3IFIyLCAoUjEsICMwKQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1hHQVRFXzAwMmRvcGNvZGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YR0FURV8wMDJkb3Bjb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTdkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YR0FURV8wMDJkb3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlhHQVRFLW9wY29kZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlhHQVRFXzAwMmREZXBlbmRlbnQuaHRtbCNYR0FURV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWEdBVEUtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iWEdBVEVfMDAyZEZsb2F0Lmh0bWwjWEdBVEVfMDAyZEZsb2F0IiB0aXRsZT0iWEdBVEUtRmxvYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYR0FURS1vcGNvZGVzIj48L2E+Cis8YSBuYW1lPSJYR0FURV8wMDJkb3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlhHQVRFXzAwMmRGbG9hdC5odG1sI1hHQVRFXzAwMmRGbG9hdCI+WEdBVEUtRmxvYXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwjWEdBVEVfMDAyZERlcGVuZGVudCI+WEdBVEUtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40OC41IE9wY29kZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1YR0FURS1vcGNvZGVzLTIyNTMiPjwvYT48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1zZXRfMDAyYy1YR0FURS0yMjU0Ij48L2E+CisKKzwhLS0gQ29weXJpZ2h0IDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YU1RPUk1ZMTZfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWUzYWJjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5YU1RPUk1ZMTYtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJYR0FURV8wMDJkRGVwZW5kZW50Lmh0bWwjWEdBVEVfMDAyZERlcGVuZGVudCIgdGl0bGU9IlhHQVRFLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilh0ZW5zYV8wMDJkRGVwZW5kZW50Lmh0bWwjWHRlbnNhXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJYdGVuc2EtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWFNUT1JNWTE2LURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWHRlbnNhXzAwMmREZXBlbmRlbnQuaHRtbCNYdGVuc2FfMDAyZERlcGVuZGVudCI+WHRlbnNhLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlhHQVRFXzAwMmREZXBlbmRlbnQuaHRtbCNYR0FURV8wMDJkRGVwZW5kZW50Ij5YR0FURS1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuNDkgWFN0b3JteTE2IERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVhTdG9ybXkxNi1zdXBwb3J0LTIyNTUiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlhTdG9ybXkxNi1TeW50YXguaHRtbCNYU3Rvcm15MTYtU3ludGF4Ij5YU3Rvcm15MTYgU3ludGF4PC9hPjogICAgICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJYU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sI1hTdG9ybXkxNi1EaXJlY3RpdmVzIj5YU3Rvcm15MTYgRGlyZWN0aXZlczwvYT46ICAgICAgICAgICAgTWFjaGluZSBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJYU3Rvcm15MTYtT3Bjb2Rlcy5odG1sI1hTdG9ybXkxNi1PcGNvZGVzIj5YU3Rvcm15MTYgT3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgUHNldWRvLU9wY29kZXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1hTdG9ybXkxNi1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmZiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlhTdG9ybXkxNiBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYU1RPUk1ZMTZfMDAyZERlcGVuZGVudC5odG1sI1hTVE9STVkxNl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWFNUT1JNWTE2LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlhTdG9ybXkxNi1TeW50YXguaHRtbCNYU3Rvcm15MTYtU3ludGF4IiB0aXRsZT0iWFN0b3JteTE2IFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlhTdG9ybXkxNi1PcGNvZGVzLmh0bWwjWFN0b3JteTE2LU9wY29kZXMiIHRpdGxlPSJYU3Rvcm15MTYgT3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlhTdG9ybXkxNi1EaXJlY3RpdmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlhTdG9ybXkxNi1PcGNvZGVzLmh0bWwjWFN0b3JteTE2LU9wY29kZXMiPlhTdG9ybXkxNiBPcGNvZGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWFN0b3JteTE2LVN5bnRheC5odG1sI1hTdG9ybXkxNi1TeW50YXgiPlhTdG9ybXkxNiBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYU1RPUk1ZMTZfMDAyZERlcGVuZGVudC5odG1sI1hTVE9STVkxNl8wMDJkRGVwZW5kZW50Ij5YU1RPUk1ZMTYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40OS4yIFhTdG9ybXkxNiBNYWNoaW5lIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy1YU3Rvcm15MTYtMjI2MyI+PC9hPjxhIG5hbWU9ImluZGV4LVhTdG9ybXkxNi1tYWNoaW5lLWRpcmVjdGl2ZXMtMjI2NCI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiMTZiaXRfMDA1ZnBvaW50ZXJzXzAwN2QtZGlyZWN0aXZlXzAwMmMtWFN0b3JteTE2LTIyNjUiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LjE2Yml0X3BvaW50ZXJzPC9jb2RlPjxkZD5MaWtlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLTE2Yml0LXBvaW50ZXJzPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbiB0aGlzIGRpcmVjdGl2ZQoraW5kaWNhdGVzIHRoYXQgdGhlIGFzc2VtYmx5IGNvZGUgbWFrZXMgdXNlIG9mIDE2LWJpdCBwb2ludGVycy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YjMyYml0XzAwNWZwb2ludGVyc18wMDdkLWRpcmVjdGl2ZV8wMDJjLVhTdG9ybXkxNi0yMjY2Ij48L2E+PGJyPjxkdD48Y29kZT4uMzJiaXRfcG9pbnRlcnM8L2NvZGU+PGRkPkxpa2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tMzJiaXQtcG9pbnRlcnM8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uIHRoaXMgZGlyZWN0aXZlCitpbmRpY2F0ZXMgdGhhdCB0aGUgYXNzZW1ibHkgY29kZSBtYWtlcyB1c2Ugb2YgMzItYml0IHBvaW50ZXJzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVub18wMDVmcG9pbnRlcnNfMDA3ZC1kaXJlY3RpdmVfMDAyYy1YU3Rvcm15MTYtMjI2NyI+PC9hPjxicj48ZHQ+PGNvZGU+Lm5vX3BvaW50ZXJzPC9jb2RlPjxkZD5MaWtlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLXBvaW50ZXJzPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbiB0aGlzIGRpcmVjdGl2ZQoraW5kaWNhdGVzIHRoYXQgdGhlIGFzc2VtYmx5IGNvZGUgZG9lcyBub3QgbWFrZXMgdXNlIHBvaW50ZXJzLgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YU3Rvcm15MTYtT3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWFN0b3JteTE2LU9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzY0OGRiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWFN0b3JteTE2LU9wY29kZXMuaHRtbApAQCAtMCwwICsxLDgzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5YU3Rvcm15MTYgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQuaHRtbCNYU1RPUk1ZMTZfMDAyZERlcGVuZGVudCIgdGl0bGU9IlhTVE9STVkxNi1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJYU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sI1hTdG9ybXkxNi1EaXJlY3RpdmVzIiB0aXRsZT0iWFN0b3JteTE2IERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYU3Rvcm15MTYtT3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlhTdG9ybXkxNi1EaXJlY3RpdmVzLmh0bWwjWFN0b3JteTE2LURpcmVjdGl2ZXMiPlhTdG9ybXkxNiBEaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQuaHRtbCNYU1RPUk1ZMTZfMDAyZERlcGVuZGVudCI+WFNUT1JNWTE2LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDkuMyBYU3Rvcm15MTYgUHNldWRvLU9wY29kZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1YU3Rvcm15MTYtcHNldWRvXzAwMmRvcGNvZGVzLTIyNjgiPjwvYT48YSBuYW1lPSJpbmRleC1wc2V1ZG9fMDAyZG9wY29kZXMtZm9yLVhTdG9ybXkxNi0yMjY5Ij48L2E+PGNvZGU+YXM8L2NvZGU+IGltcGxlbWVudHMgYWxsIHRoZSBzdGFuZGFyZCBYU3Rvcm15MTYgb3Bjb2Rlcy4KKworICAgPHA+PGNvZGU+YXM8L2NvZGU+IGFsc28gaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIHBzZXVkbyBvcHM6CisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDQwXzAwNDBsb18wMDdkLXBzZXVkb18wMDJkb3BfMDAyYy1YU3Rvcm15MTYtMjI3MCI+PC9hPgorPGRsPjxkdD48Y29kZT5AbG8oKTwvY29kZT48ZGQ+Q29tcHV0ZXMgdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24gYW5kIHN0b3JlcyBpdCBpbnRvCit0aGUgaW1tZWRpYXRlIG9wZXJhbmQgZmllbGQgb2YgdGhlIGdpdmVuIGluc3RydWN0aW9uLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hZGQgcjYsIEBsbyhoZXJlIC0gdGhlcmUpPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+Y29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYWRkcmVzcyBvZiBsYWJlbHMgJ2hlcmUnIGFuZAorJ3RoZXJlJywgdGFrZXMgdGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhpcyBkaWZmZXJlbmNlIGFuZCBhZGRzIGl0IHRvCityZWdpc3RlciA2LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNDBfMDA0MGhpXzAwN2QtcHNldWRvXzAwMmRvcF8wMDJjLVhTdG9ybXkxNi0yMjcxIj48L2E+PGJyPjxkdD48Y29kZT5AaGkoKTwvY29kZT48ZGQ+Q29tcHV0ZXMgdGhlIGhpZ2hlciAxNiBiaXRzIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uIGFuZCBzdG9yZXMgaXQgaW50bwordGhlIGltbWVkaWF0ZSBvcGVyYW5kIGZpZWxkIG9mIHRoZSBnaXZlbiBpbnN0cnVjdGlvbi4gIEZvciBleGFtcGxlOgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWRkYyByNywgQGhpKGhlcmUgLSB0aGVyZSk8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8cD5jb21wdXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBhZGRyZXNzIG9mIGxhYmVscyAnaGVyZScgYW5kCisndGhlcmUnLCB0YWtlcyB0aGUgdXBwZXIgMTYgYml0cyBvZiB0aGlzIGRpZmZlcmVuY2UsIHNoaWZ0cyBpdCBkb3duIDE2CitiaXRzIGFuZCB0aGVuIGFkZHMgaXQsIGFsb25nIHdpdGggdGhlIGNhcnJ5IGJpdCwgdG8gdGhlIHZhbHVlIGluCityZWdpc3RlciA3LgorCisgICA8L2RsPgorCis8IS0tIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSAtLT4KKzwhLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdBUyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgYXMudGV4aW5mby4gLS0+Cis8IS0tIG1hbiBlbmQgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YU3Rvcm15MTYtU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YU3Rvcm15MTYtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4OGU4NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1hTdG9ybXkxNi1TeW50YXguaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5YU3Rvcm15MTYgU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYU1RPUk1ZMTZfMDAyZERlcGVuZGVudC5odG1sI1hTVE9STVkxNl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWFNUT1JNWTE2LURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlhTdG9ybXkxNi1EaXJlY3RpdmVzLmh0bWwjWFN0b3JteTE2LURpcmVjdGl2ZXMiIHRpdGxlPSJYU3Rvcm15MTYgRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlhTdG9ybXkxNi1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWFN0b3JteTE2LURpcmVjdGl2ZXMuaHRtbCNYU3Rvcm15MTYtRGlyZWN0aXZlcyI+WFN0b3JteTE2IERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYU1RPUk1ZMTZfMDAyZERlcGVuZGVudC5odG1sI1hTVE9STVkxNl8wMDJkRGVwZW5kZW50Ij5YU1RPUk1ZMTYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40OS4xIFN5bnRheDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJYU3Rvcm15MTZfMDAyZENoYXJzLmh0bWwjWFN0b3JteTE2XzAwMmRDaGFycyI+WFN0b3JteTE2LUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWFN0b3JteTE2XzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWFN0b3JteTE2XzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMTg2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YU3Rvcm15MTZfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WFN0b3JteTE2LUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYU3Rvcm15MTYtU3ludGF4Lmh0bWwjWFN0b3JteTE2LVN5bnRheCIgdGl0bGU9IlhTdG9ybXkxNiBTeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYU3Rvcm15MTYtQ2hhcnMiPjwvYT4KKzxhIG5hbWU9IlhTdG9ybXkxNl8wMDJkQ2hhcnMiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYU3Rvcm15MTYtU3ludGF4Lmh0bWwjWFN0b3JteTE2LVN5bnRheCI+WFN0b3JteTE2IFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNDkuMS4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1YU3Rvcm15MTYtMjI1NiI+PC9hPjxhIG5hbWU9ImluZGV4LVhTdG9ybXkxNi1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTIyNTciPjwvYT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIGxpbmUgY29tbWVudCBjaGFyYWN0ZXIuICBJZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZQorZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSwgdGhlIHdob2xlIGxpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dAoraW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNhbiBhbHNvIGJlIGEgbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUKKyhzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvciBjb250cm9sIGNvbW1hbmQKKyhzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1YU3Rvcm15MTYtMjI1OCI+PC9hPjxhIG5hbWU9ImluZGV4LVhTdG9ybXkxNi1jb21tZW50LWNoYXJhY3Rlci0yMjU5Ij48L2E+QSBzZW1pY29sb24gKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOykgY2FuIGJlIHVzZWQgdG8gc3RhcnQgYSBjb21tZW50IHRoYXQgZXh0ZW5kcworZnJvbSB3aGVyZXZlciB0aGUgY2hhcmFjdGVyIGFwcGVhcnMgb24gdGhlIGxpbmUgdXAgdG8gdGhlIGVuZCBvZiB0aGUKK2xpbmUuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtWFN0b3JteTE2LTIyNjAiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtWFN0b3JteTE2LTIyNjEiPjwvYT48YSBuYW1lPSJpbmRleC1YU3Rvcm15MTYtbGluZS1zZXBhcmF0b3ItMjI2MiI+PC9hPgorVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+fDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgY2FuIGJlIHVzZWQgdG8gc2VwYXJhdGUgc3RhdGVtZW50cyBvbiB0aGUgc2FtZQorbGluZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLUF1dG9tYXRpYy1BbGlnbm1lbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5ZDVjOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Lmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WHRlbnNhIEF1dG9tYXRpYyBBbGlnbm1lbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1PcHRpbWl6YXRpb25zLmh0bWwjWHRlbnNhLU9wdGltaXphdGlvbnMiIHRpdGxlPSJYdGVuc2EgT3B0aW1pemF0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRlbnNpdHktSW5zdHJ1Y3Rpb25zLmh0bWwjRGVuc2l0eS1JbnN0cnVjdGlvbnMiIHRpdGxlPSJEZW5zaXR5IEluc3RydWN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilh0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRGVuc2l0eS1JbnN0cnVjdGlvbnMuaHRtbCNEZW5zaXR5LUluc3RydWN0aW9ucyI+RGVuc2l0eSBJbnN0cnVjdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYdGVuc2EtT3B0aW1pemF0aW9ucy5odG1sI1h0ZW5zYS1PcHRpbWl6YXRpb25zIj5YdGVuc2EgT3B0aW1pemF0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNTAuMy4yIEF1dG9tYXRpYyBJbnN0cnVjdGlvbiBBbGlnbm1lbnQ8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1hbGlnbm1lbnQtb2YtXzAwNDBjb2RlXzAwN2JMT09QXzAwN2QtaW5zdHJ1Y3Rpb25zLTIyOTUiPjwvYT48YSBuYW1lPSJpbmRleC1hbGlnbm1lbnQtb2YtYnJhbmNoLXRhcmdldHMtMjI5NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiTE9PUF8wMDdkLWluc3RydWN0aW9uc18wMDJjLWFsaWdubWVudC0yMjk3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYnJhbmNoLXRhcmdldC1hbGlnbm1lbnQtMjI5OCI+PC9hPgorVGhlIFh0ZW5zYSBhc3NlbWJsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGFsaWduIGNlcnRhaW4gaW5zdHJ1Y3Rpb25zLCBib3RoCit0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBhbmQgdG8gc2F0aXNmeSBhcmNoaXRlY3R1cmFsIHJlcXVpcmVtZW50cy4KKworICAgPHA+QXMgYW4gb3B0aW1pemF0aW9uIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIHRoZSBhc3NlbWJsZXIgYXR0ZW1wdHMgdG8KK2FsaWduIGJyYW5jaCB0YXJnZXRzIHNvIHRoZXkgZG8gbm90IGNyb3NzIGluc3RydWN0aW9uIGZldGNoIGJvdW5kYXJpZXMuIAorKFh0ZW5zYSBwcm9jZXNzb3JzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQKK2luc3RydWN0aW9uIGZldGNoIHdpZHRocy4pICBBbgoraW5zdHJ1Y3Rpb24gaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgY2FsbCBpcyB0cmVhdGVkIGFzIGEgYnJhbmNoIHRhcmdldAoraW4gdGhpcyBjb250ZXh0LCBiZWNhdXNlIGl0IHdpbGwgYmUgdGhlIHRhcmdldCBvZiBhIHJldHVybiBmcm9tIHRoZQorY2FsbC4gIFRoaXMgYWxpZ25tZW50IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJlZHVjZSBicmFuY2ggcGVuYWx0aWVzIGF0Citzb21lIGV4cGVuc2UgaW4gY29kZSBzaXplLiAKK1RoaXMgb3B0aW1pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIFlvdSBjYW4gZGlzYWJsZSBpdCB3aXRoIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLXRhcmdldC1hbGlnbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kLWxpbmUgb3B0aW9uIChzZWUgPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+Q29tbWFuZCBMaW5lIE9wdGlvbnM8L2E+KS4KKworICAgPHA+VGhlIHRhcmdldCBhbGlnbm1lbnQgb3B0aW1pemF0aW9uIGlzIGRvbmUgd2l0aG91dCBhZGRpbmcgaW5zdHJ1Y3Rpb25zCit0aGF0IGNvdWxkIGluY3JlYXNlIHRoZSBleGVjdXRpb24gdGltZSBvZiB0aGUgcHJvZ3JhbS4gIElmIHRoZXJlIGFyZQorZGVuc2l0eSBpbnN0cnVjdGlvbnMgaW4gdGhlIGNvZGUgcHJlY2VkaW5nIGEgdGFyZ2V0LCB0aGUgYXNzZW1ibGVyIGNhbgorY2hhbmdlIHRoZSB0YXJnZXQgYWxpZ25tZW50IGJ5IHdpZGVuaW5nIHNvbWUgb2YgdGhvc2UgaW5zdHJ1Y3Rpb25zIHRvCit0aGUgZXF1aXZhbGVudCAyNC1iaXQgaW5zdHJ1Y3Rpb25zLiAgRXh0cmEgYnl0ZXMgb2YgcGFkZGluZyBjYW4gYmUKK2luc2VydGVkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB1bmNvbmRpdGlvbmFsIGp1bXAgYW5kIHJldHVybgoraW5zdHJ1Y3Rpb25zLiAKK1RoaXMgYXBwcm9hY2ggaXMgdXN1YWxseSBzdWNjZXNzZnVsIGluIGFsaWduaW5nIG1hbnksIGJ1dCBub3QgYWxsLAorYnJhbmNoIHRhcmdldHMuCisKKyAgIDxwPlRoZSA8Y29kZT5MT09QPC9jb2RlPiBmYW1pbHkgb2YgaW5zdHJ1Y3Rpb25zIG11c3QgYmUgYWxpZ25lZCBzdWNoIHRoYXQgdGhlCitmaXJzdCBpbnN0cnVjdGlvbiBpbiB0aGUgbG9vcCBib2R5IGRvZXMgbm90IGNyb3NzIGFuIGluc3RydWN0aW9uIGZldGNoCitib3VuZGFyeSAoZS5nLiwgd2l0aCBhIDMyLWJpdCBmZXRjaCB3aWR0aCwgYSA8Y29kZT5MT09QPC9jb2RlPiBpbnN0cnVjdGlvbgorbXVzdCBiZSBvbiBlaXRoZXIgYSAxIG9yIDIgbW9kIDQgYnl0ZSBib3VuZGFyeSkuICBUaGUgYXNzZW1ibGVyIGtub3dzCithYm91dCB0aGlzIHJlc3RyaWN0aW9uIGFuZCBpbnNlcnRzIHRoZSBtaW5pbWFsIG51bWJlciBvZiAyIG9yIDMgYnl0ZQorbm8tb3AgaW5zdHJ1Y3Rpb25zIHRvIHNhdGlzZnkgaXQuICBXaGVuIG5vLW9wIGluc3RydWN0aW9ucyBhcmUgYWRkZWQsCithbnkgbGFiZWwgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBvcmlnaW5hbCBsb29wIHdpbGwgYmUgbW92ZWQgaW4gb3JkZXIKK3RvIHJlZmVyIHRvIHRoZSBsb29wIGluc3RydWN0aW9uLCBub3QgdGhlIG5ld2x5IGdlbmVyYXRlZCBuby1vcAoraW5zdHJ1Y3Rpb24uICBUbyBwcmVzZXJ2ZSBiaW5hcnkgY29tcGF0aWJpbGl0eSBhY3Jvc3MgcHJvY2Vzc29ycyB3aXRoCitkaWZmZXJlbnQgZmV0Y2ggd2lkdGhzLCB0aGUgYXNzZW1ibGVyIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZXMgYSAzMi1iaXQKK2ZldGNoIHdpZHRoIHdoZW4gYWxpZ25pbmcgPGNvZGU+TE9PUDwvY29kZT4gaW5zdHJ1Y3Rpb25zIChleGNlcHQgaWYgdGhlIGZpcnN0CitpbnN0cnVjdGlvbiBpbiB0aGUgbG9vcCBpcyBhIDY0LWJpdCBpbnN0cnVjdGlvbikuCisKKyAgIDxwPlByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBhc3NlbWJsZXIgYXV0b21hdGljYWxseSBhbGlnbmVkIDxjb2RlPkVOVFJZPC9jb2RlPgoraW5zdHJ1Y3Rpb25zIHRvIDQtYnl0ZSBib3VuZGFyaWVzLCBidXQgdGhhdCBhbGlnbm1lbnQgaXMgbm93IHRoZQorcHJvZ3JhbW1lcidzIHJlc3BvbnNpYmlsaXR5LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1CcmFuY2gtUmVsYXhhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTIzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24uaHRtbApAQCAtMCwwICsxLDgwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5YdGVuc2EgQnJhbmNoIFJlbGF4YXRpb24gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iIHRpdGxlPSJYdGVuc2EgUmVsYXhhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilh0ZW5zYS1DYWxsLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtQ2FsbC1SZWxheGF0aW9uIiB0aXRsZT0iWHRlbnNhIENhbGwgUmVsYXhhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilh0ZW5zYS1CcmFuY2gtUmVsYXhhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJYdGVuc2EtQ2FsbC1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUNhbGwtUmVsYXhhdGlvbiI+WHRlbnNhIENhbGwgUmVsYXhhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iPlh0ZW5zYSBSZWxheGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41MC40LjEgQ29uZGl0aW9uYWwgQnJhbmNoIFJlbGF4YXRpb248L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1yZWxheGF0aW9uLW9mLWJyYW5jaC1pbnN0cnVjdGlvbnMtMjMwMCI+PC9hPjxhIG5hbWU9ImluZGV4LWJyYW5jaC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMDEiPjwvYT4KK1doZW4gdGhlIHRhcmdldCBvZiBhIGJyYW5jaCBpcyB0b28gZmFyIGF3YXkgZnJvbSB0aGUgYnJhbmNoIGl0c2VsZiwKK2kuZS4sIHdoZW4gdGhlIG9mZnNldCBmcm9tIHRoZSBicmFuY2ggdG8gdGhlIHRhcmdldCBpcyB0b28gbGFyZ2UgdG8gZml0CitpbiB0aGUgaW1tZWRpYXRlIGZpZWxkIG9mIHRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24sIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8KK3JlcGxhY2UgdGhlIGJyYW5jaCB3aXRoIGEgYnJhbmNoIGFyb3VuZCBhIGp1bXAuICBGb3IgZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICBiZXF6ICAgIGEyLCBMCis8L3ByZT4KKyAgIDxwPm1heSByZXN1bHQgaW46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgYm5lei5uICBhMiwgTQorICAgICAgICAgaiBMCisgICAgIE06Cis8L3ByZT4KKyAgIDxwPihUaGUgPGNvZGU+Qk5FWi5OPC9jb2RlPiBpbnN0cnVjdGlvbiB3b3VsZCBiZSB1c2VkIGluIHRoaXMgZXhhbXBsZSBvbmx5IGlmIHRoZQorZGVuc2l0eSBvcHRpb24gaXMgYXZhaWxhYmxlLiAgT3RoZXJ3aXNlLCA8Y29kZT5CTkVaPC9jb2RlPiB3b3VsZCBiZSB1c2VkLikKKworICAgPHA+VGhpcyByZWxheGF0aW9uIHdvcmtzIHdlbGwgYmVjYXVzZSB0aGUgdW5jb25kaXRpb25hbCBqdW1wIGluc3RydWN0aW9uCitoYXMgYSBtdWNoIGxhcmdlciBvZmZzZXQgcmFuZ2UgdGhhbiB0aGUgdmFyaW91cyBjb25kaXRpb25hbCBicmFuY2hlcy4gCitIb3dldmVyLCBhbiBlcnJvciB3aWxsIG9jY3VyIGlmIGEgYnJhbmNoIHRhcmdldCBpcyBiZXlvbmQgdGhlIHJhbmdlIG9mIGEKK2p1bXAgaW5zdHJ1Y3Rpb24uICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBjYW5ub3QgcmVsYXggdW5jb25kaXRpb25hbCBqdW1wcy4gCitTaW1pbGFybHksIGFuIGVycm9yIHdpbGwgb2NjdXIgaWYgdGhlIG9yaWdpbmFsIGlucHV0IGNvbnRhaW5zIGFuCit1bmNvbmRpdGlvbmFsIGp1bXAgdG8gYSB0YXJnZXQgdGhhdCBpcyBvdXQgb2YgcmFuZ2UuCisKKyAgIDxwPkJyYW5jaCByZWxheGF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIEl0IGNhbiBiZSBkaXNhYmxlZCBieSB1c2luZwordW5kZXJzY29yZSBwcmVmaXhlcyAoc2VlIDxhIGhyZWY9Ilh0ZW5zYS1PcGNvZGVzLmh0bWwjWHRlbnNhLU9wY29kZXMiPk9wY29kZSBOYW1lczwvYT4pLCB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby10cmFuc2Zvcm08L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZC1saW5lIG9wdGlvbiAoc2VlIDxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPkNvbW1hbmQgTGluZSBPcHRpb25zPC9hPiksIG9yIHRoZSA8Y29kZT5uby10cmFuc2Zvcm08L2NvZGU+IGRpcmVjdGl2ZQorKHNlZSA8YSBocmVmPSJUcmFuc2Zvcm0tRGlyZWN0aXZlLmh0bWwjVHJhbnNmb3JtLURpcmVjdGl2ZSI+dHJhbnNmb3JtPC9hPikuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1DYWxsLVJlbGF4YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1DYWxsLVJlbGF4YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2Y1YTRiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLUNhbGwtUmVsYXhhdGlvbi5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlh0ZW5zYSBDYWxsIFJlbGF4YXRpb24gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iIHRpdGxlPSJYdGVuc2EgUmVsYXhhdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilh0ZW5zYS1CcmFuY2gtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1CcmFuY2gtUmVsYXhhdGlvbiIgdGl0bGU9Ilh0ZW5zYSBCcmFuY2ggUmVsYXhhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbiIgdGl0bGU9Ilh0ZW5zYSBJbW1lZGlhdGUgUmVsYXhhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilh0ZW5zYS1DYWxsLVJlbGF4YXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUltbWVkaWF0ZS1SZWxheGF0aW9uIj5YdGVuc2EgSW1tZWRpYXRlIFJlbGF4YXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJYdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24iPlh0ZW5zYSBCcmFuY2ggUmVsYXhhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iPlh0ZW5zYSBSZWxheGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41MC40LjIgRnVuY3Rpb24gQ2FsbCBSZWxheGF0aW9uPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmVsYXhhdGlvbi1vZi1jYWxsLWluc3RydWN0aW9ucy0yMzAyIj48L2E+PGEgbmFtZT0iaW5kZXgtY2FsbC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMDMiPjwvYT4KK0Z1bmN0aW9uIGNhbGxzIG1heSByZXF1aXJlIHJlbGF4YXRpb24gYmVjYXVzZSB0aGUgWHRlbnNhIGltbWVkaWF0ZSBjYWxsCitpbnN0cnVjdGlvbnMgKDxjb2RlPkNBTEwwPC9jb2RlPiwgPGNvZGU+Q0FMTDQ8L2NvZGU+LCA8Y29kZT5DQUxMODwvY29kZT4gYW5kCis8Y29kZT5DQUxMMTI8L2NvZGU+KSBwcm92aWRlIGEgUEMtcmVsYXRpdmUgb2Zmc2V0IG9mIG9ubHkgNTEyIEtieXRlcyBpbiBlaXRoZXIKK2RpcmVjdGlvbi4gIEZvciBsYXJnZXIgcHJvZ3JhbXMsIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlIGluZGlyZWN0CitjYWxscyAoPGNvZGU+Q0FMTFgwPC9jb2RlPiwgPGNvZGU+Q0FMTFg0PC9jb2RlPiwgPGNvZGU+Q0FMTFg4PC9jb2RlPiBhbmQgPGNvZGU+Q0FMTFgxMjwvY29kZT4pCit3aGVyZSB0aGUgdGFyZ2V0IGFkZHJlc3MgaXMgc3BlY2lmaWVkIGluIGEgcmVnaXN0ZXIuICBUaGUgWHRlbnNhCithc3NlbWJsZXIgY2FuIGF1dG9tYXRpY2FsbHkgcmVsYXggaW1tZWRpYXRlIGNhbGwgaW5zdHJ1Y3Rpb25zIGludG8KK2luZGlyZWN0IGNhbGwgaW5zdHJ1Y3Rpb25zLiAgVGhpcyByZWxheGF0aW9uIGlzIGRvbmUgYnkgbG9hZGluZyB0aGUKK2FkZHJlc3Mgb2YgdGhlIGNhbGxlZCBmdW5jdGlvbiBpbnRvIHRoZSBjYWxsZWUncyByZXR1cm4gYWRkcmVzcyByZWdpc3RlcgorYW5kIHRoZW4gdXNpbmcgYSA8Y29kZT5DQUxMWDwvY29kZT4gaW5zdHJ1Y3Rpb24uICBTbywgZm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgY2FsbDggZnVuYworPC9wcmU+CisgICA8cD5taWdodCBiZSByZWxheGVkIHRvOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIC5saXRlcmFsIC5MMSwgZnVuYworICAgICAgICAgbDMyciAgICBhOCwgLkwxCisgICAgICAgICBjYWxseDggIGE4Cis8L3ByZT4KKyAgIDxwPkJlY2F1c2UgdGhlIGFkZHJlc3NlcyBvZiB0YXJnZXRzIG9mIGZ1bmN0aW9uIGNhbGxzIGFyZSBub3QgZ2VuZXJhbGx5Citrbm93biB1bnRpbCBsaW5rLXRpbWUsIHRoZSBhc3NlbWJsZXIgbXVzdCBhc3N1bWUgdGhlIHdvcnN0IGFuZCByZWxheCBhbGwKK3RoZSBjYWxscyB0byBmdW5jdGlvbnMgaW4gb3RoZXIgc291cmNlIGZpbGVzLCBub3QganVzdCB0aG9zZSB0aGF0IHJlYWxseQord2lsbCBiZSBvdXQgb2YgcmFuZ2UuICBUaGUgbGlua2VyIGNhbiByZWNvZ25pemUgY2FsbHMgdGhhdCB3ZXJlCit1bm5lY2Vzc2FyaWx5IHJlbGF4ZWQsIGFuZCBpdCB3aWxsIHJlbW92ZSB0aGUgb3ZlcmhlYWQgaW50cm9kdWNlZCBieSB0aGUKK2Fzc2VtYmxlciBmb3IgdGhvc2UgY2FzZXMgd2hlcmUgZGlyZWN0IGNhbGxzIGFyZSBzdWZmaWNpZW50LgorCisgICA8cD5DYWxsIHJlbGF4YXRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIGl0IGNhbiBoYXZlIGEgbmVnYXRpdmUKK2VmZmVjdCBvbiBib3RoIGNvZGUgc2l6ZSBhbmQgcGVyZm9ybWFuY2UsIGFsdGhvdWdoIHRoZSBsaW5rZXIgY2FuCit1c3VhbGx5IGVsaW1pbmF0ZSB0aGUgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuICBJZiBhIHByb2dyYW0gaXMgdG9vIGxhcmdlCithbmQgc29tZSBvZiB0aGUgY2FsbHMgYXJlIG91dCBvZiByYW5nZSwgZnVuY3Rpb24gY2FsbCByZWxheGF0aW9uIGNhbiBiZQorZW5hYmxlZCB1c2luZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWxvbmdjYWxsczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kLWxpbmUgb3B0aW9uIG9yIHRoZQorPGNvZGU+bG9uZ2NhbGxzPC9jb2RlPiBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJMb25nY2FsbHMtRGlyZWN0aXZlLmh0bWwjTG9uZ2NhbGxzLURpcmVjdGl2ZSI+bG9uZ2NhbGxzPC9hPikuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMjc1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsOTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlh0ZW5zYSBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYdGVuc2FfMDAyZERlcGVuZGVudC5odG1sI1h0ZW5zYV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWHRlbnNhLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iIHRpdGxlPSJYdGVuc2EgUmVsYXhhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilh0ZW5zYS1EaXJlY3RpdmVzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWHRlbnNhLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtUmVsYXhhdGlvbiI+WHRlbnNhIFJlbGF4YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYdGVuc2FfMDAyZERlcGVuZGVudC5odG1sI1h0ZW5zYV8wMDJkRGVwZW5kZW50Ij5YdGVuc2EtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS41MC41IERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1YdGVuc2EtZGlyZWN0aXZlcy0yMzE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGlyZWN0aXZlc18wMDJjLVh0ZW5zYS0yMzE5Ij48L2E+CitUaGUgWHRlbnNhIGFzc2VtYmxlciBzdXBwb3J0cyBhIHJlZ2lvbi1iYXNlZCBkaXJlY3RpdmUgc3ludGF4OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIC5iZWdpbiA8dmFyPmRpcmVjdGl2ZTwvdmFyPiBbPHZhcj5vcHRpb25zPC92YXI+XQorICAgICAgICAgLi4uCisgICAgICAgICAuZW5kIDx2YXI+ZGlyZWN0aXZlPC92YXI+Cis8L3ByZT4KKyAgIDxwPkFsbCB0aGUgWHRlbnNhLXNwZWNpZmljIGRpcmVjdGl2ZXMgdGhhdCBhcHBseSB0byBhIHJlZ2lvbiBvZiBjb2RlIHVzZQordGhpcyBzeW50YXguCisKKyAgIDxwPlRoZSBkaXJlY3RpdmUgYXBwbGllcyB0byBjb2RlIGJldHdlZW4gdGhlIDxjb2RlPi5iZWdpbjwvY29kZT4gYW5kIHRoZQorPGNvZGU+LmVuZDwvY29kZT4uICBUaGUgc3RhdGUgb2YgdGhlIG9wdGlvbiBhZnRlciB0aGUgPGNvZGU+LmVuZDwvY29kZT4gcmV2ZXJ0cyB0bword2hhdCBpdCB3YXMgYmVmb3JlIHRoZSA8Y29kZT4uYmVnaW48L2NvZGU+LiAKK0EgbmVzdGVkIDxjb2RlPi5iZWdpbjwvY29kZT4vPGNvZGU+LmVuZDwvY29kZT4gcmVnaW9uIGNhbiBmdXJ0aGVyCitjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBkaXJlY3RpdmUgd2l0aG91dCBoYXZpbmcgdG8gYmUgYXdhcmUgb2YgaXRzCitvdXRlciBzdGF0ZS4gIEZvciBleGFtcGxlLCBjb25zaWRlcjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAuYmVnaW4gbm8tdHJhbnNmb3JtCisgICAgIEw6ICBhZGQgYTAsIGExLCBhMgorICAgICAgICAgLmJlZ2luIHRyYW5zZm9ybQorICAgICBNOiAgYWRkIGEwLCBhMSwgYTIKKyAgICAgICAgIC5lbmQgdHJhbnNmb3JtCisgICAgIE46ICBhZGQgYTAsIGExLCBhMgorICAgICAgICAgLmVuZCBuby10cmFuc2Zvcm0KKzwvcHJlPgorICAgPHA+VGhlIDxjb2RlPkFERDwvY29kZT4gb3Bjb2RlcyBhdCA8Y29kZT5MPC9jb2RlPiBhbmQgPGNvZGU+TjwvY29kZT4gaW4gdGhlIG91dGVyCis8Y29kZT5uby10cmFuc2Zvcm08L2NvZGU+IHJlZ2lvbiBib3RoIHJlc3VsdCBpbiA8Y29kZT5BREQ8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb25zLAorYnV0IHRoZSBhc3NlbWJsZXIgc2VsZWN0cyBhbiA8Y29kZT5BREQuTjwvY29kZT4gaW5zdHJ1Y3Rpb24gZm9yIHRoZQorPGNvZGU+QUREPC9jb2RlPiBhdCA8Y29kZT5NPC9jb2RlPiBpbiB0aGUgaW5uZXIgPGNvZGU+dHJhbnNmb3JtPC9jb2RlPiByZWdpb24uCisKKyAgIDxwPlRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBzdHlsZSBpcyB0aGF0IGl0IHdvcmtzIHdlbGwgaW5zaWRlIG1hY3JvcyB3aGljaCBjYW4KK3ByZXNlcnZlIHRoZSBjb250ZXh0IG9mIHRoZWlyIGNhbGxlcnMuCisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlcyBhcmUgYXZhaWxhYmxlOgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU2NoZWR1bGUtRGlyZWN0aXZlLmh0bWwjU2NoZWR1bGUtRGlyZWN0aXZlIj5TY2hlZHVsZSBEaXJlY3RpdmU8L2E+OiAgICAgICAgICBFbmFibGUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZy4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJMb25nY2FsbHMtRGlyZWN0aXZlLmh0bWwjTG9uZ2NhbGxzLURpcmVjdGl2ZSI+TG9uZ2NhbGxzIERpcmVjdGl2ZTwvYT46ICAgICAgICAgVXNlIEluZGlyZWN0IENhbGxzIGZvciBHcmVhdGVyIFJhbmdlLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlRyYW5zZm9ybS1EaXJlY3RpdmUuaHRtbCNUcmFuc2Zvcm0tRGlyZWN0aXZlIj5UcmFuc2Zvcm0gRGlyZWN0aXZlPC9hPjogICAgICAgICBEaXNhYmxlIEFsbCBBc3NlbWJsZXIgVHJhbnNmb3JtYXRpb25zLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkxpdGVyYWwtRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1EaXJlY3RpdmUiPkxpdGVyYWwgRGlyZWN0aXZlPC9hPjogICAgICAgICAgIEludGVybWl4IExpdGVyYWxzIHdpdGggSW5zdHJ1Y3Rpb25zLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkxpdGVyYWwtUG9zaXRpb24tRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1Qb3NpdGlvbi1EaXJlY3RpdmUiPkxpdGVyYWwgUG9zaXRpb24gRGlyZWN0aXZlPC9hPjogIFNwZWNpZnkgSW5saW5lIExpdGVyYWwgUG9vbCBMb2NhdGlvbnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iTGl0ZXJhbC1QcmVmaXgtRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1QcmVmaXgtRGlyZWN0aXZlIj5MaXRlcmFsIFByZWZpeCBEaXJlY3RpdmU8L2E+OiAgICBTcGVjaWZ5IExpdGVyYWwgU2VjdGlvbiBOYW1lIFByZWZpeC4gCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJBYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUuaHRtbCNBYnNvbHV0ZS1MaXRlcmFscy1EaXJlY3RpdmUiPkFic29sdXRlIExpdGVyYWxzIERpcmVjdGl2ZTwvYT46ICBDb250cm9sIFBDLVJlbGF0aXZlIHZzLiBBYnNvbHV0ZSBMaXRlcmFscy4gCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzM1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbApAQCAtMCwwICsxLDExNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WHRlbnNhIEltbWVkaWF0ZSBSZWxheGF0aW9uIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYdGVuc2EtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1SZWxheGF0aW9uIiB0aXRsZT0iWHRlbnNhIFJlbGF4YXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJYdGVuc2EtQ2FsbC1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUNhbGwtUmVsYXhhdGlvbiIgdGl0bGU9Ilh0ZW5zYSBDYWxsIFJlbGF4YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJYdGVuc2EtQ2FsbC1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUNhbGwtUmVsYXhhdGlvbiI+WHRlbnNhIENhbGwgUmVsYXhhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iPlh0ZW5zYSBSZWxheGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41MC40LjMgT3RoZXIgSW1tZWRpYXRlIEZpZWxkIFJlbGF4YXRpb248L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1pbW1lZGlhdGUtZmllbGRzXzAwMmMtcmVsYXhhdGlvbi0yMzA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVsYXhhdGlvbi1vZi1pbW1lZGlhdGUtZmllbGRzLTIzMDUiPjwvYT4KK1RoZSBhc3NlbWJsZXIgbm9ybWFsbHkgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBvdGhlciByZWxheGF0aW9ucy4gIFRoZXkKK2NhbiBiZSBkaXNhYmxlZCBieSB1c2luZyB1bmRlcnNjb3JlIHByZWZpeGVzIChzZWUgPGEgaHJlZj0iWHRlbnNhLU9wY29kZXMuaHRtbCNYdGVuc2EtT3Bjb2RlcyI+T3Bjb2RlIE5hbWVzPC9hPiksIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tdHJhbnNmb3JtPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQtbGluZSBvcHRpb24KKyhzZWUgPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+Q29tbWFuZCBMaW5lIE9wdGlvbnM8L2E+KSwgb3IgdGhlCis8Y29kZT5uby10cmFuc2Zvcm08L2NvZGU+IGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IlRyYW5zZm9ybS1EaXJlY3RpdmUuaHRtbCNUcmFuc2Zvcm0tRGlyZWN0aXZlIj50cmFuc2Zvcm08L2E+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JNT1ZJXzAwN2QtaW5zdHJ1Y3Rpb25zXzAwMmMtcmVsYXhhdGlvbi0yMzA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVsYXhhdGlvbi1vZi1fMDA0MGNvZGVfMDA3Yk1PVklfMDA3ZC1pbnN0cnVjdGlvbnMtMjMwNyI+PC9hPlRoZSA8Y29kZT5NT1ZJPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIGNhbiBvbmx5IG1hdGVyaWFsaXplIHZhbHVlcyBpbiB0aGUKK3JhbmdlIGZyb20gLTIwNDggdG8gMjA0Ny4gIFZhbHVlcyBvdXRzaWRlIHRoaXMgcmFuZ2UgYXJlIGJlc3QKK21hdGVyaWFsaXplZCB3aXRoIDxjb2RlPkwzMlI8L2NvZGU+IGluc3RydWN0aW9ucy4gIFRodXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgbW92aSBhMCwgMTAwMDAwCis8L3ByZT4KKyAgIDxwPmlzIGFzc2VtYmxlZCBpbnRvIHRoZSBmb2xsb3dpbmcgbWFjaGluZSBjb2RlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIC5saXRlcmFsIC5MMSwgMTAwMDAwCisgICAgICAgICBsMzJyIGEwLCAuTDEKKzwvcHJlPgorICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMOFVJXzAwN2QtaW5zdHJ1Y3Rpb25zXzAwMmMtcmVsYXhhdGlvbi0yMzA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMMTZTSV8wMDdkLWluc3RydWN0aW9uc18wMDJjLXJlbGF4YXRpb24tMjMwOSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiTDE2VUlfMDA3ZC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkwzMklfMDA3ZC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMTEiPjwvYT48YSBuYW1lPSJpbmRleC1yZWxheGF0aW9uLW9mLV8wMDQwY29kZV8wMDdiTDhVSV8wMDdkLWluc3RydWN0aW9ucy0yMzEyIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVsYXhhdGlvbi1vZi1fMDA0MGNvZGVfMDA3YkwxNlNJXzAwN2QtaW5zdHJ1Y3Rpb25zLTIzMTMiPjwvYT48YSBuYW1lPSJpbmRleC1yZWxheGF0aW9uLW9mLV8wMDQwY29kZV8wMDdiTDE2VUlfMDA3ZC1pbnN0cnVjdGlvbnMtMjMxNCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbGF4YXRpb24tb2YtXzAwNDBjb2RlXzAwN2JMMzJJXzAwN2QtaW5zdHJ1Y3Rpb25zLTIzMTUiPjwvYT5UaGUgPGNvZGU+TDhVSTwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggaW1tZWRpYXRlCitvZmZzZXRzIGluIHRoZSByYW5nZSBmcm9tIDAgdG8gMjU1LiBUaGUgPGNvZGU+TDE2U0k8L2NvZGU+IGFuZCA8Y29kZT5MMTZVSTwvY29kZT4KK21hY2hpbmUgaW5zdHJ1Y3Rpb25zIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBvZmZzZXRzIGZyb20gMCB0byA1MTAuICBUaGUKKzxjb2RlPkwzMkk8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIG9mZnNldHMgZnJvbSAwIHRvCisxMDIwLiAgQSBsb2FkIG9mZnNldCBvdXRzaWRlIHRoZXNlIHJhbmdlcyBjYW4gYmUgbWF0ZXJpYWxpemVkIHdpdGgKK2FuIDxjb2RlPkwzMlI8L2NvZGU+IGluc3RydWN0aW9uIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBvZiB0aGUgbG9hZAoraXMgZGlmZmVyZW50IHRoYW4gdGhlIHNvdXJjZSBhZGRyZXNzIHJlZ2lzdGVyLiAgRm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgbDMyaSBhMSwgYTAsIDIwNDAKKzwvcHJlPgorICAgPHA+aXMgdHJhbnNsYXRlZCB0bzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAubGl0ZXJhbCAuTDEsIDIwNDAKKyAgICAgICAgIGwzMnIgYTEsIC5MMQorICAgICAgICAgYWRkIGExLCBhMCwgYTEKKyAgICAgICAgIGwzMmkgYTEsIGExLCAwCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+SWYgdGhlIGxvYWQgZGVzdGluYXRpb24gYW5kIHNvdXJjZSBhZGRyZXNzIHJlZ2lzdGVyIGFyZSB0aGUgc2FtZSwgYW4KK291dC1vZi1yYW5nZSBvZmZzZXQgY2F1c2VzIGFuIGVycm9yLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkFERElfMDA3ZC1pbnN0cnVjdGlvbnNfMDAyYy1yZWxheGF0aW9uLTIzMTYiPjwvYT48YSBuYW1lPSJpbmRleC1yZWxheGF0aW9uLW9mLV8wMDQwY29kZV8wMDdiQURESV8wMDdkLWluc3RydWN0aW9ucy0yMzE3Ij48L2E+VGhlIFh0ZW5zYSA8Y29kZT5BRERJPC9jb2RlPiBpbnN0cnVjdGlvbiBvbmx5IGFsbG93cyBpbW1lZGlhdGUgb3BlcmFuZHMgaW4gdGhlCityYW5nZSBmcm9tIC0xMjggdG8gMTI3LiAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGFsdGVybmF0ZSBpbnN0cnVjdGlvbgorc2VxdWVuY2VzIGZvciB0aGUgPGNvZGU+QURESTwvY29kZT4gb3BlcmF0aW9uLiAgRmlyc3QsIGlmIHRoZQoraW1tZWRpYXRlIGlzIDAsIHRoZSA8Y29kZT5BRERJPC9jb2RlPiB3aWxsIGJlIHR1cm5lZCBpbnRvIGEgPGNvZGU+TU9WLk48L2NvZGU+CitpbnN0cnVjdGlvbiAob3IgdGhlIGVxdWl2YWxlbnQgPGNvZGU+T1I8L2NvZGU+IGluc3RydWN0aW9uIGlmIHRoZSBjb2RlIGRlbnNpdHkKK29wdGlvbiBpcyBub3QgYXZhaWxhYmxlKS4gIElmIHRoZSA8Y29kZT5BRERJPC9jb2RlPiBpbW1lZGlhdGUgaXMgb3V0c2lkZSBvZgordGhlIHJhbmdlIC0xMjggdG8gMTI3LCBidXQgaW5zaWRlIHRoZSByYW5nZSAtMzI4OTYgdG8gMzI2MzksIGFuCis8Y29kZT5BRERNSTwvY29kZT4gaW5zdHJ1Y3Rpb24gb3IgPGNvZGU+QURETUk8L2NvZGU+Lzxjb2RlPkFEREk8L2NvZGU+IHNlcXVlbmNlIHdpbGwgYmUKK3VzZWQuICBGaW5hbGx5LCBpZiB0aGUgaW1tZWRpYXRlIGlzIG91dHNpZGUgb2YgdGhpcyByYW5nZSBhbmQgYSBmcmVlCityZWdpc3RlciBpcyBhdmFpbGFibGUsIGFuIDxjb2RlPkwzMlI8L2NvZGU+Lzxjb2RlPkFERDwvY29kZT4gc2VxdWVuY2Ugd2lsbCBiZSB1c2VkCit3aXRoIGEgbGl0ZXJhbCBhbGxvY2F0ZWQgZnJvbSB0aGUgbGl0ZXJhbCBwb29sLgorCisgICA8cD5Gb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICBhZGRpICAgIGE1LCBhNiwgMAorICAgICAgICAgYWRkaSAgICBhNSwgYTYsIDUxMgorICAgICAgICAgYWRkaSAgICBhNSwgYTYsIDUxMworICAgICAgICAgYWRkaSAgICBhNSwgYTYsIDUwMDAwCis8L3ByZT4KKyAgIDxwPmlzIGFzc2VtYmxlZCBpbnRvIHRoZSBmb2xsb3dpbmc6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgLmxpdGVyYWwgLkwxLCA1MDAwMAorICAgICAgICAgbW92Lm4gICBhNSwgYTYKKyAgICAgICAgIGFkZG1pICAgYTUsIGE2LCAweDIwMAorICAgICAgICAgYWRkbWkgICBhNSwgYTYsIDB4MjAwCisgICAgICAgICBhZGRpICAgIGE1LCBhNSwgMQorICAgICAgICAgbDMyciAgICBhNSwgLkwxCisgICAgICAgICBhZGQgICAgIGE1LCBhNiwgYTUKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1PcGNvZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1NDdmYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1PcGNvZGVzLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WHRlbnNhIE9wY29kZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNYdGVuc2EtU3ludGF4IiB0aXRsZT0iWHRlbnNhIFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilh0ZW5zYS1SZWdpc3RlcnMuaHRtbCNYdGVuc2EtUmVnaXN0ZXJzIiB0aXRsZT0iWHRlbnNhIFJlZ2lzdGVycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilh0ZW5zYS1PcGNvZGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ilh0ZW5zYS1SZWdpc3RlcnMuaHRtbCNYdGVuc2EtUmVnaXN0ZXJzIj5YdGVuc2EgUmVnaXN0ZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWHRlbnNhLVN5bnRheC5odG1sI1h0ZW5zYS1TeW50YXgiPlh0ZW5zYSBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjUwLjIuMSBPcGNvZGUgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1YdGVuc2Etb3Bjb2RlLW5hbWVzLTIyODciPjwvYT48YSBuYW1lPSJpbmRleC1vcGNvZGUtbmFtZXNfMDAyYy1YdGVuc2EtMjI4OCI+PC9hPgorU2VlIHRoZSA8Y2l0ZT5YdGVuc2EgSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSAoSVNBKSBSZWZlcmVuY2UKK01hbnVhbDwvY2l0ZT4gZm9yIGEgY29tcGxldGUgbGlzdCBvZiBvcGNvZGVzIGFuZCBkZXNjcmlwdGlvbnMgb2YgdGhlaXIKK3NlbWFudGljcy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWYtb3Bjb2RlLXByZWZpeC0yMjg5Ij48L2E+SWYgYW4gb3Bjb2RlIG5hbWUgaXMgcHJlZml4ZWQgd2l0aCBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHdpbGwgbm90IHRyYW5zZm9ybSB0aGF0IGluc3RydWN0aW9uIGluIGFueSB3YXkuICBUaGUKK3VuZGVyc2NvcmUgcHJlZml4IGRpc2FibGVzIGJvdGggb3B0aW1pemF0aW9uIChzZWUgPGEgaHJlZj0iWHRlbnNhLU9wdGltaXphdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW1pemF0aW9ucyI+WHRlbnNhIE9wdGltaXphdGlvbnM8L2E+KSBhbmQgcmVsYXhhdGlvbiAoc2VlIDxhIGhyZWY9Ilh0ZW5zYS1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLVJlbGF4YXRpb24iPlh0ZW5zYSBSZWxheGF0aW9uPC9hPikgZm9yIHRoYXQgcGFydGljdWxhciBpbnN0cnVjdGlvbi4gIE9ubHkKK3VzZSB0aGUgdW5kZXJzY29yZSBwcmVmaXggd2hlbiBpdCBpcyBlc3NlbnRpYWwgdG8gc2VsZWN0IHRoZSBleGFjdAorb3Bjb2RlIHByb2R1Y2VkIGJ5IHRoZSBhc3NlbWJsZXIuICBVc2luZyB0aGlzIGZlYXR1cmUgdW5uZWNlc3NhcmlseQorbWFrZXMgdGhlIGNvZGUgbGVzcyBlZmZpY2llbnQgYnkgZGlzYWJsaW5nIGFzc2VtYmxlciBvcHRpbWl6YXRpb24gYW5kCitsZXNzIGZsZXhpYmxlIGJ5IGRpc2FibGluZyByZWxheGF0aW9uLgorCisgICA8cD5Ob3RlIHRoYXQgdGhpcyBzcGVjaWFsIGhhbmRsaW5nIG9mIHVuZGVyc2NvcmUgcHJlZml4ZXMgb25seSBhcHBsaWVzIHRvCitYdGVuc2Egb3Bjb2Rlcywgbm90IHRvIGVpdGhlciBidWlsdC1pbiBtYWNyb3Mgb3IgdXNlci1kZWZpbmVkIG1hY3Jvcy4gCitXaGVuIGFuIHVuZGVyc2NvcmUgcHJlZml4IGlzIHVzZWQgd2l0aCBhIG1hY3JvIChlLmcuLCA8Y29kZT5fTU9WPC9jb2RlPiksIGl0CityZWZlcnMgdG8gYSBkaWZmZXJlbnQgbWFjcm8uICBUaGUgYXNzZW1ibGVyIGdlbmVyYWxseSBwcm92aWRlcyBidWlsdC1pbgorbWFjcm9zIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgdW5kZXJzY29yZSBwcmVmaXgsIHdoZXJlIHRoZSB1bmRlcnNjb3JlCit2ZXJzaW9ucyBiZWhhdmUgYXMgaWYgdGhlIHVuZGVyc2NvcmUgY2FycmllcyB0aHJvdWdoIHRvIHRoZSBpbnN0cnVjdGlvbnMKK2luIHRoZSBtYWNyb3MuICBGb3IgZXhhbXBsZSwgPGNvZGU+X01PVjwvY29kZT4gbWF5IGV4cGFuZCB0byA8Y29kZT5fTU9WLk48L2NvZGU+LgorCisgICA8cD5UaGUgdW5kZXJzY29yZSBwcmVmaXggb25seSBhcHBsaWVzIHRvIGluZGl2aWR1YWwgaW5zdHJ1Y3Rpb25zLCBub3QgdG8KK3NlcmllcyBvZiBpbnN0cnVjdGlvbnMuICBGb3IgZXhhbXBsZSwgaWYgYSBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb25zIGhhdmUKK3VuZGVyc2NvcmUgcHJlZml4ZXMsIHRoZSBhc3NlbWJsZXIgd2lsbCBub3QgdHJhbnNmb3JtIHRoZSBpbmRpdmlkdWFsCitpbnN0cnVjdGlvbnMsIGJ1dCBpdCBtYXkgaW5zZXJ0IG90aGVyIGluc3RydWN0aW9ucyBiZXR3ZWVuIHRoZW0gKGUuZy4sCit0byBhbGlnbiBhIDxjb2RlPkxPT1A8L2NvZGU+IGluc3RydWN0aW9uKS4gIFRvIHByZXZlbnQgdGhlIGFzc2VtYmxlciBmcm9tCittb2RpZnlpbmcgYSBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb25zIGFzIGEgd2hvbGUsIHVzZSB0aGUKKzxjb2RlPm5vLXRyYW5zZm9ybTwvY29kZT4gZGlyZWN0aXZlLiAgU2VlIDxhIGhyZWY9IlRyYW5zZm9ybS1EaXJlY3RpdmUuaHRtbCNUcmFuc2Zvcm0tRGlyZWN0aXZlIj50cmFuc2Zvcm08L2E+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtT3B0aW1pemF0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLU9wdGltaXphdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU4NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLU9wdGltaXphdGlvbnMuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5YdGVuc2EgT3B0aW1pemF0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWHRlbnNhXzAwMmREZXBlbmRlbnQuaHRtbCNYdGVuc2FfMDAyZERlcGVuZGVudCIgdGl0bGU9Ilh0ZW5zYS1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJYdGVuc2EtU3ludGF4Lmh0bWwjWHRlbnNhLVN5bnRheCIgdGl0bGU9Ilh0ZW5zYSBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJYdGVuc2EtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1SZWxheGF0aW9uIiB0aXRsZT0iWHRlbnNhIFJlbGF4YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYdGVuc2EtT3B0aW1pemF0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJYdGVuc2EtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1SZWxheGF0aW9uIj5YdGVuc2EgUmVsYXhhdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNYdGVuc2EtU3ludGF4Ij5YdGVuc2EgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWHRlbnNhXzAwMmREZXBlbmRlbnQuaHRtbCNYdGVuc2FfMDAyZERlcGVuZGVudCI+WHRlbnNhLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNTAuMyBYdGVuc2EgT3B0aW1pemF0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wdGltaXphdGlvbnMtMjI5MyI+PC9hPgorVGhlIG9wdGltaXphdGlvbnMgY3VycmVudGx5IHN1cHBvcnRlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBhcmUKK2dlbmVyYXRpb24gb2YgZGVuc2l0eSBpbnN0cnVjdGlvbnMgd2hlcmUgYXBwcm9wcmlhdGUgYW5kIGF1dG9tYXRpYworYnJhbmNoIHRhcmdldCBhbGlnbm1lbnQuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJEZW5zaXR5LUluc3RydWN0aW9ucy5odG1sI0RlbnNpdHktSW5zdHJ1Y3Rpb25zIj5EZW5zaXR5IEluc3RydWN0aW9uczwvYT46ICAgICAgICAgVXNpbmcgRGVuc2l0eSBJbnN0cnVjdGlvbnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iWHRlbnNhLUF1dG9tYXRpYy1BbGlnbm1lbnQuaHRtbCNYdGVuc2EtQXV0b21hdGljLUFsaWdubWVudCI+WHRlbnNhIEF1dG9tYXRpYyBBbGlnbm1lbnQ8L2E+OiAgIEF1dG9tYXRpYyBJbnN0cnVjdGlvbiBBbGlnbm1lbnQuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmZTFhYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WHRlbnNhIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYV8wMDJkRGVwZW5kZW50Lmh0bWwjWHRlbnNhXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJYdGVuc2EtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWHRlbnNhLVN5bnRheC5odG1sI1h0ZW5zYS1TeW50YXgiIHRpdGxlPSJYdGVuc2EgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWHRlbnNhLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWHRlbnNhLVN5bnRheC5odG1sI1h0ZW5zYS1TeW50YXgiPlh0ZW5zYSBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYdGVuc2FfMDAyZERlcGVuZGVudC5odG1sI1h0ZW5zYV8wMDJkRGVwZW5kZW50Ij5YdGVuc2EtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS41MC4xIENvbW1hbmQgTGluZSBPcHRpb25zPC9oND4KKworPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKyAgICAgPGRsPgorPGR0Pjxjb2RlPi0tdGV4dC1zZWN0aW9uLWxpdGVyYWxzIHwgLS1uby10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR0ZXh0XzAwMmRzZWN0aW9uXzAwMmRsaXRlcmFscy0yMjczIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR0ZXh0XzAwMmRzZWN0aW9uXzAwMmRsaXRlcmFscy0yMjc0Ij48L2E+Q29udHJvbCB0aGUgdHJlYXRtZW50IG9mIGxpdGVyYWwgcG9vbHMuICBUaGUgZGVmYXVsdCBpcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLXRleHQtc2VjdGlvbi1saXRlcmFsczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgd2hpY2ggcGxhY2VzIGxpdGVyYWxzIGluCitzZXBhcmF0ZSBzZWN0aW9ucyBpbiB0aGUgb3V0cHV0IGZpbGUuICBUaGlzIGFsbG93cyB0aGUgbGl0ZXJhbCBwb29sIHRvIGJlCitwbGFjZWQgaW4gYSBkYXRhIFJBTS9ST00uICBXaXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZQorbGl0ZXJhbHMgYXJlIGludGVyc3BlcnNlZCBpbiB0aGUgdGV4dCBzZWN0aW9uIGluIG9yZGVyIHRvIGtlZXAgdGhlbSBhcworY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlaXIgcmVmZXJlbmNlcy4gIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgbGFyZ2UKK2Fzc2VtYmx5IGZpbGVzLCB3aGVyZSB0aGUgbGl0ZXJhbHMgd291bGQgb3RoZXJ3aXNlIGJlIG91dCBvZiByYW5nZSBvZiB0aGUKKzxjb2RlPkwzMlI8L2NvZGU+IGluc3RydWN0aW9ucyBpbiB0aGUgdGV4dCBzZWN0aW9uLiAgVGhlc2Ugb3B0aW9ucyBvbmx5IGFmZmVjdAorbGl0ZXJhbHMgcmVmZXJlbmNlZCB2aWEgUEMtcmVsYXRpdmUgPGNvZGU+TDMyUjwvY29kZT4gaW5zdHJ1Y3Rpb25zOyBsaXRlcmFscworZm9yIGFic29sdXRlIG1vZGUgPGNvZGU+TDMyUjwvY29kZT4gaW5zdHJ1Y3Rpb25zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuIAorU2VlIDxhIGhyZWY9IkxpdGVyYWwtRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1EaXJlY3RpdmUiPmxpdGVyYWw8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1hYnNvbHV0ZS1saXRlcmFscyB8IC0tbm8tYWJzb2x1dGUtbGl0ZXJhbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRhYnNvbHV0ZV8wMDJkbGl0ZXJhbHMtMjI3NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkYWJzb2x1dGVfMDAyZGxpdGVyYWxzLTIyNzYiPjwvYT5JbmRpY2F0ZSB0byB0aGUgYXNzZW1ibGVyIHdoZXRoZXIgPGNvZGU+TDMyUjwvY29kZT4gaW5zdHJ1Y3Rpb25zIHVzZSBhYnNvbHV0ZQorb3IgUEMtcmVsYXRpdmUgYWRkcmVzc2luZy4gIElmIHRoZSBwcm9jZXNzb3IgaW5jbHVkZXMgdGhlIGFic29sdXRlCithZGRyZXNzaW5nIG9wdGlvbiwgdGhlIGRlZmF1bHQgaXMgdG8gdXNlIGFic29sdXRlIDxjb2RlPkwzMlI8L2NvZGU+CityZWxvY2F0aW9ucy4gIE90aGVyd2lzZSwgb25seSB0aGUgUEMtcmVsYXRpdmUgPGNvZGU+TDMyUjwvY29kZT4gcmVsb2NhdGlvbnMKK2NhbiBiZSB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS10YXJnZXQtYWxpZ24gfCAtLW5vLXRhcmdldC1hbGlnbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHRhcmdldF8wMDJkYWxpZ24tMjI3NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkdGFyZ2V0XzAwMmRhbGlnbi0yMjc4Ij48L2E+RW5hYmxlIG9yIGRpc2FibGUgYXV0b21hdGljIGFsaWdubWVudCB0byByZWR1Y2UgYnJhbmNoIHBlbmFsdGllcyBhdCBzb21lCitleHBlbnNlIGluIGNvZGUgc2l6ZS4gIFNlZSA8YSBocmVmPSJYdGVuc2EtQXV0b21hdGljLUFsaWdubWVudC5odG1sI1h0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Ij5BdXRvbWF0aWMgSW5zdHJ1Y3Rpb24gQWxpZ25tZW50PC9hPi4gIFRoaXMgb3B0aW1pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIE5vdGUKK3RoYXQgdGhlIGFzc2VtYmxlciB3aWxsIGFsd2F5cyBhbGlnbiBpbnN0cnVjdGlvbnMgbGlrZSA8Y29kZT5MT09QPC9jb2RlPiB0aGF0CitoYXZlIGZpeGVkIGFsaWdubWVudCByZXF1aXJlbWVudHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWxvbmdjYWxscyB8IC0tbm8tbG9uZ2NhbGxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbG9uZ2NhbGxzLTIyNzkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGxvbmdjYWxscy0yMjgwIj48L2E+RW5hYmxlIG9yIGRpc2FibGUgdHJhbnNmb3JtYXRpb24gb2YgY2FsbCBpbnN0cnVjdGlvbnMgdG8gYWxsb3cgY2FsbHMKK2Fjcm9zcyBhIGdyZWF0ZXIgcmFuZ2Ugb2YgYWRkcmVzc2VzLiAgU2VlIDxhIGhyZWY9Ilh0ZW5zYS1DYWxsLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtQ2FsbC1SZWxheGF0aW9uIj5GdW5jdGlvbiBDYWxsIFJlbGF4YXRpb248L2E+LiAgVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2hlbiBjYWxsCit0YXJnZXRzIGNhbiBwb3RlbnRpYWxseSBiZSBvdXQgb2YgcmFuZ2UuICBJdCBtYXkgZGVncmFkZSBib3RoIGNvZGUgc2l6ZQorYW5kIHBlcmZvcm1hbmNlLCBidXQgdGhlIGxpbmtlciBjYW4gZ2VuZXJhbGx5IG9wdGltaXplIGF3YXkgdGhlCit1bm5lY2Vzc2FyeSBvdmVyaGVhZCB3aGVuIGEgY2FsbCBlbmRzIHVwIHdpdGhpbiByYW5nZS4gIFRoZSBkZWZhdWx0IGlzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tbG9uZ2NhbGxzPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS10cmFuc2Zvcm0gfCAtLW5vLXRyYW5zZm9ybTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHRyYW5zZm9ybS0yMjgxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR0cmFuc2Zvcm0tMjI4MiI+PC9hPkVuYWJsZSBvciBkaXNhYmxlIGFsbCBhc3NlbWJsZXIgdHJhbnNmb3JtYXRpb25zIG9mIFh0ZW5zYSBpbnN0cnVjdGlvbnMsCitpbmNsdWRpbmcgYm90aCByZWxheGF0aW9uIGFuZCBvcHRpbWl6YXRpb24uICBUaGUgZGVmYXVsdCBpcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXRyYW5zZm9ybTwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLXRyYW5zZm9ybTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRoZQorcmFyZSBjYXNlcyB3aGVuIHRoZSBpbnN0cnVjdGlvbnMgbXVzdCBiZSBleGFjdGx5IGFzIHNwZWNpZmllZCBpbiB0aGUKK2Fzc2VtYmx5IHNvdXJjZS4gIFVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby10cmFuc2Zvcm08L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2F1c2VzIG91dCBvZiByYW5nZQoraW5zdHJ1Y3Rpb24gb3BlcmFuZHMgdG8gYmUgZXJyb3JzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS1yZW5hbWUtc2VjdGlvbiA8L2NvZGU+PHZhcj5vbGRuYW1lPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPm5ld25hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHJlbmFtZV8wMDJkc2VjdGlvbi0yMjgzIj48L2E+UmVuYW1lIHRoZSA8dmFyPm9sZG5hbWU8L3Zhcj4gc2VjdGlvbiB0byA8dmFyPm5ld25hbWU8L3Zhcj4uICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZAorbXVsdGlwbGUgdGltZXMgdG8gcmVuYW1lIG11bHRpcGxlIHNlY3Rpb25zLiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1SZWdpc3RlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1SZWdpc3RlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjllNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLVJlZ2lzdGVycy5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlh0ZW5zYSBSZWdpc3RlcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNYdGVuc2EtU3ludGF4IiB0aXRsZT0iWHRlbnNhIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilh0ZW5zYS1PcGNvZGVzLmh0bWwjWHRlbnNhLU9wY29kZXMiIHRpdGxlPSJYdGVuc2EgT3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilh0ZW5zYS1SZWdpc3RlcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJYdGVuc2EtT3Bjb2Rlcy5odG1sI1h0ZW5zYS1PcGNvZGVzIj5YdGVuc2EgT3Bjb2RlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilh0ZW5zYS1TeW50YXguaHRtbCNYdGVuc2EtU3ludGF4Ij5YdGVuc2EgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS41MC4yLjIgUmVnaXN0ZXIgTmFtZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1YdGVuc2EtcmVnaXN0ZXItbmFtZXMtMjI5MCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtWHRlbnNhLTIyOTEiPjwvYT48YSBuYW1lPSJpbmRleC1zcC1yZWdpc3Rlci0yMjkyIj48L2E+CitUaGUgYXNzZW1ibHkgc3ludGF4IGZvciBhIHJlZ2lzdGVyIGZpbGUgZW50cnkgaXMgdGhlICZsZHF1bztzaG9ydCZyZHF1bzsgbmFtZSBmb3IKK2EgVElFIHJlZ2lzdGVyIGZpbGUgZm9sbG93ZWQgYnkgdGhlIGluZGV4IGludG8gdGhhdCByZWdpc3RlciBmaWxlLiAgRm9yCitleGFtcGxlLCB0aGUgZ2VuZXJhbC1wdXJwb3NlIDxjb2RlPkFSPC9jb2RlPiByZWdpc3RlciBmaWxlIGhhcyBhIHNob3J0IG5hbWUgb2YKKzxjb2RlPmE8L2NvZGU+LCBzbyB0aGVzZSByZWdpc3RlcnMgYXJlIG5hbWVkIDxjb2RlPmEwPC9jb2RlPjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD48Y29kZT5hMTU8L2NvZGU+LiAKK0FzIGEgc3BlY2lhbCBmZWF0dXJlLCA8Y29kZT5zcDwvY29kZT4gaXMgYWxzbyBzdXBwb3J0ZWQgYXMgYSBzeW5vbnltIGZvcgorPGNvZGU+YTE8L2NvZGU+LiAgQWRkaXRpb25hbCByZWdpc3RlcnMgbWF5IGJlIGFkZGVkIGJ5IHByb2Nlc3NvciBjb25maWd1cmF0aW9uCitvcHRpb25zIGFuZCBieSBkZXNpZ25lci1kZWZpbmVkIFRJRSBleHRlbnNpb25zLiAgQW4gaW5pdGlhbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2NoYXJhY3RlciBpcyBvcHRpb25hbCBpbiBhbGwgcmVnaXN0ZXIgbmFtZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYS1SZWxheGF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtUmVsYXhhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OWY5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtUmVsYXhhdGlvbi5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlh0ZW5zYSBSZWxheGF0aW9uIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJYdGVuc2FfMDAyZERlcGVuZGVudC5odG1sI1h0ZW5zYV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWHRlbnNhLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilh0ZW5zYS1PcHRpbWl6YXRpb25zLmh0bWwjWHRlbnNhLU9wdGltaXphdGlvbnMiIHRpdGxlPSJYdGVuc2EgT3B0aW1pemF0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiIHRpdGxlPSJYdGVuc2EgRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilh0ZW5zYS1SZWxheGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiPlh0ZW5zYSBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWHRlbnNhLU9wdGltaXphdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW1pemF0aW9ucyI+WHRlbnNhIE9wdGltaXphdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJYdGVuc2FfMDAyZERlcGVuZGVudC5odG1sI1h0ZW5zYV8wMDJkRGVwZW5kZW50Ij5YdGVuc2EtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS41MC40IFh0ZW5zYSBSZWxheGF0aW9uPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmVsYXhhdGlvbi0yMjk5Ij48L2E+CitXaGVuIGFuIGluc3RydWN0aW9uIG9wZXJhbmQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgYWxsb3dlZCBmb3IgdGhhdAorcGFydGljdWxhciBpbnN0cnVjdGlvbiBmaWVsZCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gY2FuIHRyYW5zZm9ybSB0aGUgY29kZQordG8gdXNlIGEgZnVuY3Rpb25hbGx5LWVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb24gb3Igc2VxdWVuY2Ugb2YKK2luc3RydWN0aW9ucy4gIFRoaXMgcHJvY2VzcyBpcyBrbm93biBhcyA8ZGZuPnJlbGF4YXRpb248L2Rmbj4uICBUaGlzIGlzCit0eXBpY2FsbHkgZG9uZSBmb3IgYnJhbmNoIGluc3RydWN0aW9ucyBiZWNhdXNlIHRoZSBkaXN0YW5jZSBvZiB0aGUKK2JyYW5jaCB0YXJnZXRzIGlzIG5vdCBrbm93biB1bnRpbCBhc3NlbWJseS10aW1lLiAgVGhlIFh0ZW5zYSBhc3NlbWJsZXIKK29mZmVycyBicmFuY2ggcmVsYXhhdGlvbiBhbmQgYWxzbyBleHRlbmRzIHRoaXMgY29uY2VwdCB0byBmdW5jdGlvbgorY2FsbHMsIDxjb2RlPk1PVkk8L2NvZGU+IGluc3RydWN0aW9ucyBhbmQgb3RoZXIgaW5zdHJ1Y3Rpb25zIHdpdGggaW1tZWRpYXRlCitmaWVsZHMuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJYdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtQnJhbmNoLVJlbGF4YXRpb24iPlh0ZW5zYSBCcmFuY2ggUmVsYXhhdGlvbjwvYT46ICAgICAgICAgUmVsYXhhdGlvbiBvZiBCcmFuY2hlcy4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJYdGVuc2EtQ2FsbC1SZWxheGF0aW9uLmh0bWwjWHRlbnNhLUNhbGwtUmVsYXhhdGlvbiI+WHRlbnNhIENhbGwgUmVsYXhhdGlvbjwvYT46ICAgICAgICAgICBSZWxheGF0aW9uIG9mIEZ1bmN0aW9uIENhbGxzLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ilh0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1JbW1lZGlhdGUtUmVsYXhhdGlvbiI+WHRlbnNhIEltbWVkaWF0ZSBSZWxheGF0aW9uPC9hPjogICAgICBSZWxheGF0aW9uIG9mIG90aGVyIEltbWVkaWF0ZSBGaWVsZHMuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWHRlbnNhLVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZjgwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2EtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSwxMDQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlh0ZW5zYSBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilh0ZW5zYV8wMDJkRGVwZW5kZW50Lmh0bWwjWHRlbnNhXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJYdGVuc2EtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyIgdGl0bGU9Ilh0ZW5zYSBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWHRlbnNhLU9wdGltaXphdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW1pemF0aW9ucyIgdGl0bGU9Ilh0ZW5zYSBPcHRpbWl6YXRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWHRlbnNhLVN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJYdGVuc2EtT3B0aW1pemF0aW9ucy5odG1sI1h0ZW5zYS1PcHRpbWl6YXRpb25zIj5YdGVuc2EgT3B0aW1pemF0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPlh0ZW5zYSBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWHRlbnNhXzAwMmREZXBlbmRlbnQuaHRtbCNYdGVuc2FfMDAyZERlcGVuZGVudCI+WHRlbnNhLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNTAuMiBBc3NlbWJsZXIgU3ludGF4PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3ludGF4XzAwMmMtWHRlbnNhLWFzc2VtYmxlci0yMjg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtWHRlbnNhLWFzc2VtYmxlci1zeW50YXgtMjI4NSI+PC9hPjxhIG5hbWU9ImluZGV4LUZMSVgtc3ludGF4LTIyODYiPjwvYT4KK0Jsb2NrIGNvbW1lbnRzIGFyZSBkZWxpbWl0ZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vKjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qLzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEVuZCBvZiBsaW5lCitjb21tZW50cyBtYXkgYmUgaW50cm9kdWNlZCB3aXRoIGVpdGhlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vLzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSB0aGVuIHRoZSB3aG9sZQorbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjb3VsZCBhbHNvIGJlCithIGxvZ2ljYWwgbGluZSBudW1iZXIgZGlyZWN0aXZlIChzZWUgPGEgaHJlZj0iQ29tbWVudHMuaHRtbCNDb21tZW50cyI+Q29tbWVudHM8L2E+KSBvciBhIHByZXByb2Nlc3NvcgorY29udHJvbCBjb21tYW5kIChzZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPlByZXByb2Nlc3Npbmc8L2E+KS4KKworICAgPHA+SW5zdHJ1Y3Rpb25zIGNvbnNpc3Qgb2YgYSBsZWFkaW5nIG9wY29kZSBvciBtYWNybyBuYW1lIGZvbGxvd2VkIGJ5Cit3aGl0ZXNwYWNlIGFuZCBhbiBvcHRpb25hbCBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcGVyYW5kczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDx2YXI+b3Bjb2RlPC92YXI+IFs8dmFyPm9wZXJhbmQ8L3Zhcj4sIC4uLl0KKzwvcHJlPgorICAgPHA+SW5zdHJ1Y3Rpb25zIG11c3QgYmUgc2VwYXJhdGVkIGJ5IGEgbmV3bGluZSBvciBzZW1pY29sb24gKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOykuCisKKyAgIDxwPkZMSVggaW5zdHJ1Y3Rpb25zLCB3aGljaCBidW5kbGUgbXVsdGlwbGUgb3Bjb2RlcyB0b2dldGhlciBpbiBhIHNpbmdsZQoraW5zdHJ1Y3Rpb24sIGFyZSBzcGVjaWZpZWQgYnkgZW5jbG9zaW5nIHRoZSBidW5kbGVkIG9wY29kZXMgaW5zaWRlCiticmFjZXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB7CisgICAgIFs8dmFyPmZvcm1hdDwvdmFyPl0KKyAgICAgPHZhcj5vcGNvZGUwPC92YXI+IFs8dmFyPm9wZXJhbmRzPC92YXI+XQorICAgICA8dmFyPm9wY29kZTE8L3Zhcj4gWzx2YXI+b3BlcmFuZHM8L3Zhcj5dCisgICAgIDx2YXI+b3Bjb2RlMjwvdmFyPiBbPHZhcj5vcGVyYW5kczwvdmFyPl0KKyAgICAgLi4uCisgICAgIH0KKzwvcHJlPgorICAgPHA+VGhlIG9wY29kZXMgaW4gYSBGTElYIGluc3RydWN0aW9uIGFyZSBsaXN0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCitjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIHNsb3RzIGluIHRoZSBUSUUgZm9ybWF0IGRlY2xhcmF0aW9uLiAKK0RpcmVjdGl2ZXMgYW5kIGxhYmVscyBhcmUgbm90IGFsbG93ZWQgaW5zaWRlIHRoZSBicmFjZXMgb2YgYSBGTElYCitpbnN0cnVjdGlvbi4gIEEgcGFydGljdWxhciBUSUUgZm9ybWF0IG5hbWUgY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkCitpbW1lZGlhdGVseSBhZnRlciB0aGUgb3BlbmluZyBicmFjZSwgYnV0IHRoaXMgaXMgdXN1YWxseSB1bm5lY2Vzc2FyeS4gCitUaGUgYXNzZW1ibGVyIHdpbGwgYXV0b21hdGljYWxseSBzZWFyY2ggZm9yIGEgZm9ybWF0IHRoYXQgY2FuIGVuY29kZSB0aGUKK3NwZWNpZmllZCBvcGNvZGVzLCBzbyB0aGUgZm9ybWF0IG5hbWUgbmVlZCBvbmx5IGJlIHNwZWNpZmllZCBpbiByYXJlCitjYXNlcyB3aGVyZSB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGFwcGxpY2FibGUgZm9ybWF0IGFuZCB3aGVyZSBpdAorbWF0dGVycyB3aGljaCBvZiB0aG9zZSBmb3JtYXRzIGlzIHVzZWQuICBBIEZMSVggaW5zdHJ1Y3Rpb24gY2FuIGFsc28gYmUKK3NwZWNpZmllZCBvbiBhIHNpbmdsZSBsaW5lIGJ5IHNlcGFyYXRpbmcgdGhlIG9wY29kZXMgd2l0aCBzZW1pY29sb25zOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgeyBbPHZhcj5mb3JtYXQ8L3Zhcj47XSA8dmFyPm9wY29kZTA8L3Zhcj4gWzx2YXI+b3BlcmFuZHM8L3Zhcj5dOyA8dmFyPm9wY29kZTE8L3Zhcj4gWzx2YXI+b3BlcmFuZHM8L3Zhcj5dOyA8dmFyPm9wY29kZTI8L3Zhcj4gWzx2YXI+b3BlcmFuZHM8L3Zhcj5dOyAuLi4gfQorPC9wcmU+CisgICA8cD5JZiBhbiBvcGNvZGUgY2FuIG9ubHkgYmUgZW5jb2RlZCBpbiBhIEZMSVggaW5zdHJ1Y3Rpb24gYnV0IGlzIG5vdAorc3BlY2lmaWVkIGFzIHBhcnQgb2YgYSBGTElYIGJ1bmRsZSwgdGhlIGFzc2VtYmxlciB3aWxsIGNob29zZSB0aGUKK3NtYWxsZXN0IGZvcm1hdCB3aGVyZSB0aGUgb3Bjb2RlIGNhbiBiZSBlbmNvZGVkIGFuZAord2lsbCBmaWxsIHVudXNlZCBpbnN0cnVjdGlvbiBzbG90cyB3aXRoIG5vLW9wcy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ilh0ZW5zYS1PcGNvZGVzLmh0bWwjWHRlbnNhLU9wY29kZXMiPlh0ZW5zYSBPcGNvZGVzPC9hPjogICAgICAgICAgICAgICBPcGNvZGUgTmFtaW5nIENvbnZlbnRpb25zLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Ilh0ZW5zYS1SZWdpc3RlcnMuaHRtbCNYdGVuc2EtUmVnaXN0ZXJzIj5YdGVuc2EgUmVnaXN0ZXJzPC9hPjogICAgICAgICAgICAgUmVnaXN0ZXIgTmFtaW5nLiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1h0ZW5zYV8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2FfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMmNjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9YdGVuc2FfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlh0ZW5zYS1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlhTVE9STVkxNl8wMDJkRGVwZW5kZW50Lmh0bWwjWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJYU1RPUk1ZMTYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWjgwXzAwMmREZXBlbmRlbnQuaHRtbCNaODBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ilo4MC1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYdGVuc2EtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJYdGVuc2FfMDAyZERlcGVuZGVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJaODBfMDAyZERlcGVuZGVudC5odG1sI1o4MF8wMDJkRGVwZW5kZW50Ij5aODAtRGVwZW5kZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWFNUT1JNWTE2XzAwMmREZXBlbmRlbnQuaHRtbCNYU1RPUk1ZMTZfMDAyZERlcGVuZGVudCI+WFNUT1JNWTE2LURlcGVuZGVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPk1hY2hpbmUgRGVwZW5kZW5jaWVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS41MCBYdGVuc2EgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtWHRlbnNhLWFyY2hpdGVjdHVyZS0yMjcyIj48L2E+VGhpcyBjaGFwdGVyIGNvdmVycyBmZWF0dXJlcyBvZiB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGFzc2VtYmxlciB0aGF0IGFyZSBzcGVjaWZpYwordG8gdGhlIFh0ZW5zYSBhcmNoaXRlY3R1cmUuICBGb3IgZGV0YWlscyBhYm91dCB0aGUgWHRlbnNhIGluc3RydWN0aW9uCitzZXQsIHBsZWFzZSBjb25zdWx0IHRoZSA8Y2l0ZT5YdGVuc2EgSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSAoSVNBKQorUmVmZXJlbmNlIE1hbnVhbDwvY2l0ZT4uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT46ICAgICAgICAgICAgICAgQ29tbWFuZC1saW5lIE9wdGlvbnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iWHRlbnNhLVN5bnRheC5odG1sI1h0ZW5zYS1TeW50YXgiPlh0ZW5zYSBTeW50YXg8L2E+OiAgICAgICAgICAgICAgICBBc3NlbWJsZXIgU3ludGF4IGZvciBYdGVuc2EgUHJvY2Vzc29ycy4gCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJYdGVuc2EtT3B0aW1pemF0aW9ucy5odG1sI1h0ZW5zYS1PcHRpbWl6YXRpb25zIj5YdGVuc2EgT3B0aW1pemF0aW9uczwvYT46ICAgICAgICAgQXNzZW1ibGVyIE9wdGltaXphdGlvbnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iWHRlbnNhLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtUmVsYXhhdGlvbiI+WHRlbnNhIFJlbGF4YXRpb248L2E+OiAgICAgICAgICAgIE90aGVyIEF1dG9tYXRpYyBUcmFuc2Zvcm1hdGlvbnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iWHRlbnNhLURpcmVjdGl2ZXMuaHRtbCNYdGVuc2EtRGlyZWN0aXZlcyI+WHRlbnNhIERpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgIERpcmVjdGl2ZXMgZm9yIFh0ZW5zYSBQcm9jZXNzb3JzLiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ouaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1ouaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzVkNjhiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWi5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlogLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlcuaHRtbCNXIiB0aXRsZT0iVyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IloiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJXLmh0bWwjVyI+VzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xNyBHZW5lcmF0ZSBPYmplY3QgRmlsZSBpbiBTcGl0ZSBvZiBFcnJvcnM6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1aPC9zcGFuPjwvc2FtcD48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vYmplY3QtZmlsZV8wMDJjLWFmdGVyLWVycm9ycy0xMTAiPjwvYT48YSBuYW1lPSJpbmRleC1lcnJvcnNfMDAyYy1jb250aW51aW5nLWFmdGVyLTExMSI+PC9hPkFmdGVyIGFuIGVycm9yIG1lc3NhZ2UsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IG5vcm1hbGx5IHByb2R1Y2VzIG5vIG91dHB1dC4gIElmIGZvcgorc29tZSByZWFzb24geW91IGFyZSBpbnRlcmVzdGVkIGluIG9iamVjdCBmaWxlIG91dHB1dCBldmVuIGFmdGVyCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIG9uIHlvdXIgcHJvZ3JhbSwgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1aPC9zcGFuPjwvc2FtcD4mcnNxdW87CitvcHRpb24uICBJZiB0aGVyZSBhcmUgYW55IGVycm9ycywgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gY29udGludWVzIGFueXdheXMsIGFuZAord3JpdGVzIGFuIG9iamVjdCBmaWxlIGFmdGVyIGEgZmluYWwgd2FybmluZyBtZXNzYWdlIG9mIHRoZSBmb3JtICZsc3F1bzs8c2FtcD48dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+CitlcnJvcnMsIDwvc3Bhbj48dmFyPm08L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+IHdhcm5pbmdzLCBnZW5lcmF0aW5nIGJhZCBvYmplY3QgZmlsZS48L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwLURpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MC1EaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhN2M3MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MC1EaXJlY3RpdmVzLmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WjgwIERpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilo4MF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJaODAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iWjgwLUZsb2F0aW5nLVBvaW50Lmh0bWwjWjgwLUZsb2F0aW5nLVBvaW50IiB0aXRsZT0iWjgwIEZsb2F0aW5nIFBvaW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWjgwLU9wY29kZXMuaHRtbCNaODAtT3Bjb2RlcyIgdGl0bGU9Ilo4MCBPcGNvZGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWjgwLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWjgwLU9wY29kZXMuaHRtbCNaODAtT3Bjb2RlcyI+WjgwIE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODAtRmxvYXRpbmctUG9pbnQuaHRtbCNaODAtRmxvYXRpbmctUG9pbnQiPlo4MCBGbG9hdGluZyBQb2ludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilo4MF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwXzAwMmREZXBlbmRlbnQiPlo4MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ0LjQgWjgwIEFzc2VtYmxlciBEaXJlY3RpdmVzPC9oND4KKworPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gZm9yIHRoZSBaODAgc3VwcG9ydHMgc29tZSBhZGRpdGlvbmFsIGRpcmVjdGl2ZXMgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgYXNzZW1ibGVycy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtWjgwXzAwMmRvbmx5LWRpcmVjdGl2ZXMtMjA3OSI+PC9hPlRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBkaXJlY3RpdmVzIGluIDxjb2RlPmFzPC9jb2RlPiBmb3IgdGhlIFo4MDoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+ZGIgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPnw8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48Y29kZT5bLDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT58PC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGNvZGU+Li4uXTwvY29kZT48ZHQ+PGNvZGU+ZGVmYiA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+fDwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPlssPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPnw8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48Y29kZT4uLi5dPC9jb2RlPjxkZD5Gb3IgZWFjaCA8dmFyPnN0cmluZzwvdmFyPiB0aGUgY2hhcmFjdGVycyBhcmUgY29waWVkIHRvIHRoZSBvYmplY3QgZmlsZSwgZm9yCitlYWNoIG90aGVyIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPiB0aGUgdmFsdWUgaXMgc3RvcmVkIGluIG9uZSBieXRlLiAKK0Egd2FybmluZyBpcyBpc3N1ZWQgaW4gY2FzZSBvZiBhbiBvdmVyZmxvdy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmR3IDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5bLDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4uLi5dPC9jb2RlPjxkdD48Y29kZT5kZWZ3IDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5bLDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4uLi5dPC9jb2RlPjxkZD5Gb3IgZWFjaCA8dmFyPmV4cHJlc3Npb248L3Zhcj4gdGhlIHZhbHVlIGlzIHN0b3JlZCBpbiB0d28gYnl0ZXMsIGlnbm9yaW5nCitvdmVyZmxvdy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmQyNCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+Wyw8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+Li4uXTwvY29kZT48ZHQ+PGNvZGU+ZGVmMjQgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPlssPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPi4uLl08L2NvZGU+PGRkPkZvciBlYWNoIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPiB0aGUgdmFsdWUgaXMgc3RvcmVkIGluIHRocmVlIGJ5dGVzLCBpZ25vcmluZworb3ZlcmZsb3cuCisKKyAgICAgPGJyPjxkdD48Y29kZT5kMzIgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPlssPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPi4uLl08L2NvZGU+PGR0Pjxjb2RlPmRlZjMyIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5bLDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4uLi5dPC9jb2RlPjxkZD5Gb3IgZWFjaCA8dmFyPmV4cHJlc3Npb248L3Zhcj4gdGhlIHZhbHVlIGlzIHN0b3JlZCBpbiBmb3VyIGJ5dGVzLCBpZ25vcmluZworb3ZlcmZsb3cuCisKKyAgICAgPGJyPjxkdD48Y29kZT5kcyA8L2NvZGU+PHZhcj5jb3VudDwvdmFyPjxjb2RlPlssIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+ZGVmcyA8L2NvZGU+PHZhcj5jb3VudDwvdmFyPjxjb2RlPlssIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+PCEtLSBTeW5vbnltcyBmb3IgQGNvZGV7ZHMuYn0sIC0tPgorPCEtLSB3aGljaCBzaG91bGQgaGF2ZSBiZWVuIGRlc2NyaWJlZCBlbHNld2hlcmUgLS0+CitGaWxsIDx2YXI+Y291bnQ8L3Zhcj4gYnl0ZXMgaW4gdGhlIG9iamVjdCBmaWxlIHdpdGggPHZhcj52YWx1ZTwvdmFyPiwgaWYKKzx2YXI+dmFsdWU8L3Zhcj4gaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0byB6ZXJvLgorCisgICAgIDxicj48ZHQ+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gZXF1IDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48ZHQ+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gZGVmbCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGRkPlRoZXNlIGRpcmVjdGl2ZXMgc2V0IHRoZSB2YWx1ZSBvZiA8dmFyPnN5bWJvbDwvdmFyPiB0byA8dmFyPmV4cHJlc3Npb248L3Zhcj4uIElmCis8Y29kZT5lcXU8L2NvZGU+IGlzIHVzZWQsIGl0IGlzIGFuIGVycm9yIGlmIDx2YXI+c3ltYm9sPC92YXI+IGlzIGFscmVhZHkgZGVmaW5lZC4gCitTeW1ib2xzIGRlZmluZWQgd2l0aCA8Y29kZT5lcXU8L2NvZGU+IGFyZSBub3QgcHJvdGVjdGVkIGZyb20gcmVkZWZpbml0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+c2V0PC9jb2RlPjxkZD5UaGlzIGlzIGEgbm9ybWFsIGluc3RydWN0aW9uIG9uIFo4MCwgYW5kIG5vdCBhbiBhc3NlbWJsZXIgZGlyZWN0aXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+cHNlY3QgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD5BIHN5bm9ueW0gZm9yIFNlZSA8YSBocmVmPSJTZWN0aW9uLmh0bWwjU2VjdGlvbiI+U2VjdGlvbjwvYT4sIG5vIHNlY29uZCBhcmd1bWVudCBzaG91bGQgYmUgZ2l2ZW4uCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MC1GbG9hdGluZy1Qb2ludC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwLUZsb2F0aW5nLVBvaW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2NmZkMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MC1GbG9hdGluZy1Qb2ludC5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlo4MCBGbG9hdGluZyBQb2ludCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWjgwXzAwMmREZXBlbmRlbnQuaHRtbCNaODBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ilo4MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJaODAtU3ludGF4Lmh0bWwjWjgwLVN5bnRheCIgdGl0bGU9Ilo4MCBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJaODAtRGlyZWN0aXZlcy5odG1sI1o4MC1EaXJlY3RpdmVzIiB0aXRsZT0iWjgwIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJaODAtRmxvYXRpbmctUG9pbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWjgwLURpcmVjdGl2ZXMuaHRtbCNaODAtRGlyZWN0aXZlcyI+WjgwIERpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODAtU3ludGF4Lmh0bWwjWjgwLVN5bnRheCI+WjgwIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilo4MF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwXzAwMmREZXBlbmRlbnQiPlo4MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ0LjMgRmxvYXRpbmcgUG9pbnQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLVo4MC0yMDc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtWjgwLWZsb2F0aW5nLXBvaW50LTIwNzgiPjwvYT5GbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBub3Qgc3VwcG9ydGVkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAtT3Bjb2Rlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwLU9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2M4MmJmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwLU9wY29kZXMuaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5aODAgT3Bjb2RlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWjgwXzAwMmREZXBlbmRlbnQuaHRtbCNaODBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ilo4MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJaODAtRGlyZWN0aXZlcy5odG1sI1o4MC1EaXJlY3RpdmVzIiB0aXRsZT0iWjgwIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJaODAtT3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ilo4MC1EaXJlY3RpdmVzLmh0bWwjWjgwLURpcmVjdGl2ZXMiPlo4MCBEaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWjgwXzAwMmREZXBlbmRlbnQuaHRtbCNaODBfMDAyZERlcGVuZGVudCI+WjgwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDQuNSBPcGNvZGVzPC9oND4KKworPHA+SW4gbGluZSB3aXRoIGNvbW1vbiBwcmFjdGljZSwgWjgwIG1uZW1vbmljcyBhcmUgdXNlZCBmb3IgYm90aCB0aGUgWjgwIGFuZAordGhlIFI4MDAuCisKKyAgIDxwPkluIG1hbnkgaW5zdHJ1Y3Rpb25zIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSBvbmUgb2YgdGhlIGhhbGYgaW5kZXgKK3JlZ2lzdGVycyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5peGw8L3NwYW4+PC9zYW1wPiZyc3F1bzssJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5peGg8L3NwYW4+PC9zYW1wPiZyc3F1bzssJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5peWw8L3NwYW4+PC9zYW1wPiZyc3F1bzssJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5peWg8L3NwYW4+PC9zYW1wPiZyc3F1bzspIGluIHN0ZWFkIG9mIGFuCis4LWJpdCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIuIFRoaXMgeWllbGRzIGluc3RydWN0aW9ucyB0aGF0IGFyZQorZG9jdW1lbnRlZCBvbiB0aGUgUjgwMCBhbmQgdW5kb2N1bWVudGVkIG9uIHRoZSBaODAuIAorU2ltaWxhcmx5IDxjb2RlPmluIGYsKGMpPC9jb2RlPiBpcyBkb2N1bWVudGVkIG9uIHRoZSBSODAwIGFuZCB1bmRvY3VtZW50ZWQgb24KK3RoZSBaODAuCisKKyAgIDxwPlRoZSBhc3NlbWJsZXIgYWxzbyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHVuZG9jdW1lbnRlZCBaODAtaW5zdHJ1Y3Rpb25zLAordGhhdCBoYXZlIG5vdCBiZWVuIGFkb3B0ZWQgaW4gdGhlIFI4MDAgaW5zdHJ1Y3Rpb24gc2V0OgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+b3V0IChjKSwwPC9jb2RlPjxkZD5TZW5kcyB6ZXJvIHRvIHRoZSBwb3J0IHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIgYy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNsaSA8L2NvZGU+PHZhcj5tPC92YXI+PGRkPkVxdWl2YWxlbnQgdG8gPHZhcj5tPC92YXI+PGNvZGU+ID0gKDwvY29kZT48dmFyPm08L3Zhcj48Y29kZT4mbHQ7Jmx0OzEpKzE8L2NvZGU+LCB0aGUgb3BlcmFuZCA8dmFyPm08L3Zhcj4gY2FuCitiZSBhbnkgb3BlcmFuZCB0aGF0IGlzIHZhbGlkIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNsYTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gT25lIGNhbiB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgYQorc3lub255bSBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zbGk8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48dmFyPm9wPC92YXI+PGNvZGU+IChpeCs8L2NvZGU+PHZhcj5kPC92YXI+PGNvZGU+KSwgPC9jb2RlPjx2YXI+cjwvdmFyPjxkZD5UaGlzIGlzIGVxdWl2YWxlbnQgdG8KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgbGQgPHZhcj5yPC92YXI+LCAoaXgrPHZhcj5kPC92YXI+KQorICAgICAgICAgIDx2YXI+b3BjPC92YXI+IDx2YXI+cjwvdmFyPgorICAgICAgICAgIGxkIChpeCs8dmFyPmQ8L3Zhcj4pLCA8dmFyPnI8L3Zhcj4KKzwvcHJlPgorICAgICA8cD5UaGUgb3BlcmF0aW9uICZsc3F1bzs8c2FtcD48dmFyPm9wYzwvdmFyPjwvc2FtcD4mcnNxdW87IG1heSBiZSBhbnkgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZXMgPC9zcGFuPjx2YXI+YjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zZXQgPC9zcGFuPjx2YXI+YjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJsYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ycjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ycmM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNsYTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zbGk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3JhPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNybDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIHRoZSByZWdpc3RlcgorJmxzcXVvOzxzYW1wPjx2YXI+cjwvdmFyPjwvc2FtcD4mcnNxdW87IG1heSBiZSBhbnkgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjx2YXI+b3BjPC92YXI+PGNvZGU+IChpeSs8L2NvZGU+PHZhcj5kPC92YXI+PGNvZGU+KSwgPC9jb2RlPjx2YXI+cjwvdmFyPjxkZD5BcyBhYm92ZSwgYnV0IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5peTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC9kbD4KKworICAgPHA+VGhlIHdlYiBzaXRlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuejgwLmluZm8iPmh0dHA6Ly93d3cuejgwLmluZm88L2E+IGlzIGEgZ29vZCBzdGFydGluZyBwbGFjZSB0bworZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIHByb2dyYW1taW5nIHRoZSBaODAuCisKKzwhLS0gQ29weXJpZ2h0IDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDIwMDMsIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3ZGYzMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WjgwIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilo4MF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJaODAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWjgwLVN5bnRheC5odG1sI1o4MC1TeW50YXgiIHRpdGxlPSJaODAgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWjgwLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWjgwLVN5bnRheC5odG1sI1o4MC1TeW50YXgiPlo4MCBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJaODBfMDAyZERlcGVuZGVudC5odG1sI1o4MF8wMDJkRGVwZW5kZW50Ij5aODAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40NC4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1aODAtb3B0aW9ucy0yMDU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9ucy1mb3ItWjgwLTIwNTYiPjwvYT5UaGUgWmlsb2cgWjgwIGFuZCBBc2NpaSBSODAwIHZlcnNpb24gb2YgPGNvZGU+YXM8L2NvZGU+IGhhdmUgYSBmZXcgbWFjaGluZQorZGVwZW5kZW50IG9wdGlvbnMuCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHo4MF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1aODAtMjA1NyI+PC9hPgorPGRsPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tejgwPC9zcGFuPjwvc2FtcD48ZGQ+UHJvZHVjZSBjb2RlIGZvciB0aGUgWjgwIHByb2Nlc3Nvci4gVGhlcmUgYXJlIGFkZGl0aW9uYWwgb3B0aW9ucyB0bworcmVxdWVzdCB3YXJuaW5ncyBhbmQgZXJyb3IgbWVzc2FnZXMgZm9yIHVuZG9jdW1lbnRlZCBpbnN0cnVjdGlvbnMuIAorPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taWdub3JlLXVuZG9jdW1lbnRlZC1pbnN0cnVjdGlvbnM8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV251ZDwvc3Bhbj48L3NhbXA+PGRkPlNpbGVudGx5IGFzc2VtYmxlIHVuZG9jdW1lbnRlZCBaODAtaW5zdHJ1Y3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkb3B0ZWQKK2FzIGRvY3VtZW50ZWQgUjgwMC1pbnN0cnVjdGlvbnMuIAorPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taWdub3JlLXVucG9ydGFibGUtaW5zdHJ1Y3Rpb25zPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdudXA8L3NwYW4+PC9zYW1wPjxkZD5TaWxlbnRseSBhc3NlbWJsZSBhbGwgdW5kb2N1bWVudGVkIFo4MC1pbnN0cnVjdGlvbnMuIAorPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4td2Fybi11bmRvY3VtZW50ZWQtaW5zdHJ1Y3Rpb25zPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1ZDwvc3Bhbj48L3NhbXA+PGRkPklzc3VlIHdhcm5pbmdzIGZvciB1bmRvY3VtZW50ZWQgWjgwLWluc3RydWN0aW9ucyB0aGF0IHdvcmsgb24gUjgwMCwgZG8KK25vdCBhc3NlbWJsZSBvdGhlciB1bmRvY3VtZW50ZWQgaW5zdHJ1Y3Rpb25zIHdpdGhvdXQgd2FybmluZy4gCis8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi13YXJuLXVucG9ydGFibGUtaW5zdHJ1Y3Rpb25zPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1cDwvc3Bhbj48L3NhbXA+PGRkPklzc3VlIHdhcm5pbmdzIGZvciBvdGhlciB1bmRvY3VtZW50ZWQgWjgwLWluc3RydWN0aW9ucywgZG8gbm90IHRyZWF0IGFueQordW5kb2N1bWVudGVkIGluc3RydWN0aW9ucyBhcyBlcnJvcnMuIAorPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9yYmlkLXVuZG9jdW1lbnRlZC1pbnN0cnVjdGlvbnM8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRnVkPC9zcGFuPjwvc2FtcD48ZGQ+VHJlYXQgYWxsIHVuZG9jdW1lbnRlZCB6ODAtaW5zdHJ1Y3Rpb25zIGFzIGVycm9ycy4gCis8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mb3JiaWQtdW5wb3J0YWJsZS1pbnN0cnVjdGlvbnM8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRnVwPC9zcGFuPjwvc2FtcD48ZGQ+VHJlYXQgdW5kb2N1bWVudGVkIHo4MC1pbnN0cnVjdGlvbnMgdGhhdCBkbyBub3Qgd29yayBvbiBSODAwIGFzIGVycm9ycy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJkcjgwMF8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1aODAtMjA1OCI+PC9hPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXI4MDA8L3NwYW4+PC9zYW1wPjxkZD5Qcm9kdWNlIGNvZGUgZm9yIHRoZSBSODAwIHByb2Nlc3Nvci4gVGhlIGFzc2VtYmxlciBkb2VzIG5vdCBzdXBwb3J0Cit1bmRvY3VtZW50ZWQgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgUjgwMC4gCitJbiBsaW5lIHdpdGggY29tbW9uIHByYWN0aWNlLCA8Y29kZT5hczwvY29kZT4gdXNlcyBaODAgaW5zdHJ1Y3Rpb24gbmFtZXMKK2ZvciB0aGUgUjgwMCBwcm9jZXNzb3IsIGFzIGZhciBhcyB0aGV5IGV4aXN0LiAKKzwvZGw+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVo4MC1TeW50YXgtMjA1OSI+PC9hPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAtU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxM2JmOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MC1TeW50YXguaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5aODAgU3ludGF4IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJaODBfMDAyZERlcGVuZGVudC5odG1sI1o4MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWjgwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilo4MC1PcHRpb25zLmh0bWwjWjgwLU9wdGlvbnMiIHRpdGxlPSJaODAgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilo4MC1GbG9hdGluZy1Qb2ludC5odG1sI1o4MC1GbG9hdGluZy1Qb2ludCIgdGl0bGU9Ilo4MCBGbG9hdGluZyBQb2ludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilo4MC1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWjgwLUZsb2F0aW5nLVBvaW50Lmh0bWwjWjgwLUZsb2F0aW5nLVBvaW50Ij5aODAgRmxvYXRpbmcgUG9pbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODAtT3B0aW9ucy5odG1sI1o4MC1PcHRpb25zIj5aODAgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilo4MF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwXzAwMmREZXBlbmRlbnQiPlo4MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ0LjIgU3ludGF4PC9oND4KKworPHA+VGhlIGFzc2VtYmxlciBzeW50YXggY2xvc2VseSBmb2xsb3dzIHRoZSAnWjgwIGZhbWlseSBDUFUgVXNlciBNYW51YWwnIGJ5CitaaWxvZy4gCitJbiBleHByZXNzaW9ucyBhIHNpbmdsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj08L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWF5IGJlIHVzZWQgYXMgJmxkcXVvO2lzIGVxdWFsIHRvJnJkcXVvOworY29tcGFyaXNvbiBvcGVyYXRvci4KKworICAgPHA+U3VmZmljZXMgY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHJhZGl4IG9mIGludGVnZXIgY29uc3RhbnRzOworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5IPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgaGV4YWRlY2ltYWwsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGRlY2ltYWwsCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5xPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3Igb2N0YWwsIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yCitiaW5hcnkuCisKKyAgIDxwPlRoZSBzdWZmaXggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRlbm90ZXMgYSBiYWNrcmVmZXJlbmNlIHRvIGxvY2FsIGxhYmVsLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPlo4MC1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Ilo4MF8wMDJkUmVncy5odG1sI1o4MF8wMDJkUmVncyI+WjgwLVJlZ3M8L2E+OiAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJaODBfMDAyZENhc2UuaHRtbCNaODBfMDAyZENhc2UiPlo4MC1DYXNlPC9hPjogICAgICAgICAgICAgICAgICBDYXNlIFNlbnNpdGl2aXR5Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMC1EaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMC1EaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3NjhkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwLURpcmVjdGl2ZXMuaHRtbApAQCAtMCwwICsxLDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5aODAwMCBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJaODAwMF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwMDBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ilo4MDAwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilo4MDAwLVN5bnRheC5odG1sI1o4MDAwLVN5bnRheCIgdGl0bGU9Ilo4MDAwIFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilo4MDAwLU9wY29kZXMuaHRtbCNaODAwMC1PcGNvZGVzIiB0aXRsZT0iWjgwMDAgT3Bjb2RlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilo4MDAwLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWjgwMDAtT3Bjb2Rlcy5odG1sI1o4MDAwLU9wY29kZXMiPlo4MDAwIE9wY29kZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODAwMC1TeW50YXguaHRtbCNaODAwMC1TeW50YXgiPlo4MDAwIFN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilo4MDAwXzAwMmREZXBlbmRlbnQuaHRtbCNaODAwMF8wMDJkRGVwZW5kZW50Ij5aODAwMC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjQ1LjMgQXNzZW1ibGVyIERpcmVjdGl2ZXMgZm9yIHRoZSBaODAwMDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVo4MDAwLWRpcmVjdGl2ZXMtMjA5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWRpcmVjdGl2ZXNfMDAyYy1aODAwMC0yMDk1Ij48L2E+VGhlIFo4MDAwIHBvcnQgb2YgYXMgaW5jbHVkZXMgYWRkaXRpb25hbCBhc3NlbWJsZXIgZGlyZWN0aXZlcywKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgWjgwMDAgYXNzZW1ibGVycy4gIFRoZXNlIGRvIG5vdCBiZWdpbiB3aXRoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHVubGlrZSB0aGUgb3JkaW5hcnkgYXMgZGlyZWN0aXZlcykuCisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1zZWdtLTIwOTYiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+c2VnbTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmV6ODAwMS0yMDk3Ij48L2E+PGR0Pjxjb2RlPi56ODAwMTwvY29kZT48ZGQ+R2VuZXJhdGUgY29kZSBmb3IgdGhlIHNlZ21lbnRlZCBaODAwMS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC11bnNlZ20tMjA5OCI+PC9hPjxicj48ZHQ+PGNvZGU+dW5zZWdtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZXo4MDAyLTIwOTkiPjwvYT48ZHQ+PGNvZGU+Lno4MDAyPC9jb2RlPjxkZD5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgdW5zZWdtZW50ZWQgWjgwMDIuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtbmFtZS0yMTAwIj48L2E+PGJyPjxkdD48Y29kZT5uYW1lPC9jb2RlPjxkZD5TeW5vbnltIGZvciA8Y29kZT4uZmlsZTwvY29kZT4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nbG9iYWwtMjEwMSI+PC9hPjxicj48ZHQ+PGNvZGU+Z2xvYmFsPC9jb2RlPjxkZD5TeW5vbnltIGZvciA8Y29kZT4uZ2xvYmFsPC9jb2RlPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXd2YWwtMjEwMiI+PC9hPjxicj48ZHQ+PGNvZGU+d3ZhbDwvY29kZT48ZGQ+U3lub255bSBmb3IgPGNvZGU+LndvcmQ8L2NvZGU+CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtbHZhbC0yMTAzIj48L2E+PGJyPjxkdD48Y29kZT5sdmFsPC9jb2RlPjxkZD5TeW5vbnltIGZvciA8Y29kZT4ubG9uZzwvY29kZT4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1idmFsLTIxMDQiPjwvYT48YnI+PGR0Pjxjb2RlPmJ2YWw8L2NvZGU+PGRkPlN5bm9ueW0gZm9yIDxjb2RlPi5ieXRlPC9jb2RlPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXN2YWwtMjEwNSI+PC9hPjxicj48ZHQ+PGNvZGU+c3ZhbDwvY29kZT48ZGQ+QXNzZW1ibGUgYSBzdHJpbmcuICA8Y29kZT5zdmFsPC9jb2RlPiBleHBlY3RzIG9uZSBzdHJpbmcgbGl0ZXJhbCwgZGVsaW1pdGVkIGJ5CitzaW5nbGUgcXVvdGVzLiAgSXQgYXNzZW1ibGVzIGVhY2ggYnl0ZSBvZiB0aGUgc3RyaW5nIGludG8gY29uc2VjdXRpdmUKK2FkZHJlc3Nlcy4gIFlvdSBjYW4gdXNlIHRoZSBlc2NhcGUgc2VxdWVuY2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lPC9zcGFuPjx2YXI+eHg8L3Zhcj48L3NhbXA+JnJzcXVvOyAod2hlcmUKKzx2YXI+eHg8L3Zhcj4gcmVwcmVzZW50cyBhIHR3by1kaWdpdCBoZXhhZGVjaW1hbCBudW1iZXIpIHRvIHJlcHJlc2VudCB0aGUKK2NoYXJhY3RlciB3aG9zZSA8c3BhbiBjbGFzcz0ic2MiPmFzY2lpPC9zcGFuPiB2YWx1ZSBpcyA8dmFyPnh4PC92YXI+LiAgVXNlIHRoaXMgZmVhdHVyZSB0bworZGVzY3JpYmUgc2luZ2xlIHF1b3RlIGFuZCBvdGhlciBjaGFyYWN0ZXJzIHRoYXQgbWF5IG5vdCBhcHBlYXIgaW4gc3RyaW5nCitsaXRlcmFscyBhcyB0aGVtc2VsdmVzLiAgRm9yIGV4YW1wbGUsIHRoZSBDIHN0YXRlbWVudCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNoYXImbmJzcDsqYSZuYnNwOz0mbmJzcDsiaGUmbmJzcDtzYWlkJm5ic3A7XCJpdCdzJm5ic3A7NTAlJm5ic3A7b2ZmXCIiOzwvc3Bhbj48L3NhbXA+JnJzcXVvOzwhLS0gL0B3IC0tPiBpcyByZXByZXNlbnRlZCBpbiBaODAwMCBhc3NlbWJseSBsYW5ndWFnZQorKHNob3duIHdpdGggdGhlIGFzc2VtYmxlciBvdXRwdXQgaW4gaGV4IGF0IHRoZSBsZWZ0KSBhcworCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIDY4NjUyMDczICAgIHN2YWwgICAgJ2hlIHNhaWQgJTIyaXQlMjdzIDUwJTI1IG9mZiUyMiUwMCcKKyAgICAgICAgICA2MTY5NjQyMAorICAgICAgICAgIDIyNjk3NDI3CisgICAgICAgICAgNzMyMDM1MzAKKyAgICAgICAgICAyNTIwNkY2NgorICAgICAgICAgIDY2MjIwMAorPC9wcmU+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXJzZWN0LTIxMDYiPjwvYT48YnI+PGR0Pjxjb2RlPnJzZWN0PC9jb2RlPjxkZD5zeW5vbnltIGZvciA8Y29kZT4uc2VjdGlvbjwvY29kZT4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1ibG9jay0yMTA3Ij48L2E+PGJyPjxkdD48Y29kZT5ibG9jazwvY29kZT48ZGQ+c3lub255bSBmb3IgPGNvZGU+LnNwYWNlPC9jb2RlPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWV2ZW4tMjEwOCI+PC9hPjxicj48ZHQ+PGNvZGU+ZXZlbjwvY29kZT48ZGQ+c3BlY2lhbCBjYXNlIG9mIDxjb2RlPi5hbGlnbjwvY29kZT47IGFsaWducyBvdXRwdXQgdG8gZXZlbiBieXRlIGJvdW5kYXJ5LiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwLU9wY29kZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwLU9wY29kZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU3ZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwMDAtT3Bjb2Rlcy5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlo4MDAwIE9wY29kZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilo4MDAwXzAwMmREZXBlbmRlbnQuaHRtbCNaODAwMF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWjgwMDAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiIHRpdGxlPSJaODAwMCBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWjgwMDAtT3Bjb2RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNaODAwMC1EaXJlY3RpdmVzIj5aODAwMCBEaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWjgwMDBfMDAyZERlcGVuZGVudC5odG1sI1o4MDAwXzAwMmREZXBlbmRlbnQiPlo4MDAwLURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuNDUuNCBPcGNvZGVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtWjgwMDAtb3Bjb2RlLXN1bW1hcnktMjEwOSI+PC9hPjxhIG5hbWU9ImluZGV4LW9wY29kZS1zdW1tYXJ5XzAwMmMtWjgwMDAtMjExMCI+PC9hPjxhIG5hbWU9ImluZGV4LW1uZW1vbmljc18wMDJjLVo4MDAwLTIxMTEiPjwvYT48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1zdW1tYXJ5XzAwMmMtWjgwMDAtMjExMiI+PC9hPkZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgWjgwMDAgbWFjaGluZSBpbnN0cnVjdGlvbiBzZXQsIHNlZQorPGNpdGU+WjgwMDAgVGVjaG5pY2FsIE1hbnVhbDwvY2l0ZT4uCisKKzwhLS0gQ29weXJpZ2h0IDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDIwMDIsIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorPCEtLSBWQVgvVk1TIGRlc2NyaXB0aW9uIGVuaGFuY2VkIGFuZCBjb3JyZWN0ZWQgYnkgS2xhdXMgSyJhZW1wZiwga2thZW1wZkBwcm9naXMuZGUgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2ZmMxZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5aODAwMCBPcHRpb25zIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJaODAwMF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwMDBfMDAyZERlcGVuZGVudCIgdGl0bGU9Ilo4MDAwLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilo4MDAwLVN5bnRheC5odG1sI1o4MDAwLVN5bnRheCIgdGl0bGU9Ilo4MDAwIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilo4MDAwLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWjgwMDAtU3ludGF4Lmh0bWwjWjgwMDAtU3ludGF4Ij5aODAwMCBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJaODAwMF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwMDBfMDAyZERlcGVuZGVudCI+WjgwMDAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40NS4xIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1aODAwMC1vcHRpb25zLTIwODEiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtWjgwMDAtMjA4MiI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmR6ODAwMV8wMDdkLWNvbW1hbmQtbGluZS1vcHRpb25fMDAyYy1aODAwMC0yMDgzIj48L2E+Cis8ZGw+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi16ODAwMTwvc3Bhbj48L3NhbXA+PGRkPkdlbmVyYXRlIHNlZ21lbnRlZCBjb2RlIGJ5IGRlZmF1bHQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZHo4MDAyXzAwN2QtY29tbWFuZC1saW5lLW9wdGlvbl8wMDJjLVo4MDAwLTIwODQiPjwvYT48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi16ODAwMjwvc3Bhbj48L3NhbXA+PGRkPkdlbmVyYXRlIHVuc2VnbWVudGVkIGNvZGUgYnkgZGVmYXVsdC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMC1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwLVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MzkzNmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMC1TeW50YXguaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5aODAwMCBTeW50YXggLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilo4MDAwXzAwMmREZXBlbmRlbnQuaHRtbCNaODAwMF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWjgwMDAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iWjgwMDAtT3B0aW9ucy5odG1sI1o4MDAwLU9wdGlvbnMiIHRpdGxlPSJaODAwMCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiIHRpdGxlPSJaODAwMCBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWjgwMDAtU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNaODAwMC1EaXJlY3RpdmVzIj5aODAwMCBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWjgwMDAtT3B0aW9ucy5odG1sI1o4MDAwLU9wdGlvbnMiPlo4MDAwIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJaODAwMF8wMDJkRGVwZW5kZW50Lmh0bWwjWjgwMDBfMDAyZERlcGVuZGVudCI+WjgwMDAtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS40NS4yIFN5bnRheDwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJaODAwMF8wMDJkQ2hhcnMuaHRtbCNaODAwMF8wMDJkQ2hhcnMiPlo4MDAwLUNoYXJzPC9hPjogICAgICAgICAgICAgICAgIFNwZWNpYWwgQ2hhcmFjdGVycworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iWjgwMDBfMDAyZFJlZ3MuaHRtbCNaODAwMF8wMDJkUmVncyI+WjgwMDAtUmVnczwvYT46ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgTmFtZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ilo4MDAwXzAwMmRBZGRyZXNzaW5nLmh0bWwjWjgwMDBfMDAyZEFkZHJlc3NpbmciPlo4MDAwLUFkZHJlc3Npbmc8L2E+OiAgICAgICAgICAgIEFkZHJlc3NpbmcgTW9kZXMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwXzAwMmRBZGRyZXNzaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMF8wMDJkQWRkcmVzc2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlN2M0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMF8wMDJkQWRkcmVzc2luZy5odG1sCkBAIC0wLDAgKzEsNzcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlo4MDAwLUFkZHJlc3NpbmcgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilo4MDAwLVN5bnRheC5odG1sI1o4MDAwLVN5bnRheCIgdGl0bGU9Ilo4MDAwIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilo4MDAwXzAwMmRSZWdzLmh0bWwjWjgwMDBfMDAyZFJlZ3MiIHRpdGxlPSJaODAwMC1SZWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWjgwMDAtQWRkcmVzc2luZyI+PC9hPgorPGEgbmFtZT0iWjgwMDBfMDAyZEFkZHJlc3NpbmciPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODAwMF8wMDJkUmVncy5odG1sI1o4MDAwXzAwMmRSZWdzIj5aODAwMC1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWjgwMDAtU3ludGF4Lmh0bWwjWjgwMDAtU3ludGF4Ij5aODAwMCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQ1LjIuMyBBZGRyZXNzaW5nIE1vZGVzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtYWRkcmVzc2luZy1tb2Rlc18wMDJjLVo4MDAwLTIwOTIiPjwvYT48YSBuYW1lPSJpbmRleC1aODAwLWFkZHJlc3NpbmctbW9kZXMtMjA5MyI+PC9hPmFzIHVuZGVyc3RhbmRzIHRoZSBmb2xsb3dpbmcgYWRkcmVzc2luZyBtb2RlcyBmb3IgdGhlIFo4MDAwOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5ybDwvY29kZT48dmFyPm48L3Zhcj48ZHQ+PGNvZGU+cmg8L2NvZGU+PHZhcj5uPC92YXI+PGR0Pjxjb2RlPnI8L2NvZGU+PHZhcj5uPC92YXI+PGR0Pjxjb2RlPnJyPC9jb2RlPjx2YXI+bjwvdmFyPjxkdD48Y29kZT5ycTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+UmVnaXN0ZXIgZGlyZWN0OiAgOGJpdCwgMTZiaXQsIDMyYml0LCBhbmQgNjRiaXQgcmVnaXN0ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+QHI8L2NvZGU+PHZhcj5uPC92YXI+PGR0Pjxjb2RlPkBycjwvY29kZT48dmFyPm48L3Zhcj48ZGQ+SW5kaXJlY3QgcmVnaXN0ZXI6ICBAcnI8dmFyPm48L3Zhcj4gaW4gc2VnbWVudGVkIG1vZGUsIEByPHZhcj5uPC92YXI+IGluIHVuc2VnbWVudGVkCittb2RlLgorCisgICAgIDxicj48ZHQ+PHZhcj5hZGRyPC92YXI+PGRkPkRpcmVjdDogdGhlIDE2IGJpdCBvciAyNCBiaXQgYWRkcmVzcyAoZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGFzc2VtYmxlcgoraXMgaW4gc2VnbWVudGVkIG9yIHVuc2VnbWVudGVkIG1vZGUpIG9mIHRoZSBvcGVyYW5kIGlzIGluIHRoZSBpbnN0cnVjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmFkZHJlc3MocjwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5JbmRleGVkOiB0aGUgMTYgb3IgMjQgYml0IGFkZHJlc3MgaXMgYWRkZWQgdG8gdGhlIDE2IGJpdCByZWdpc3RlciB0byBwcm9kdWNlCit0aGUgZmluYWwgYWRkcmVzcyBpbiBtZW1vcnkgb2YgdGhlIG9wZXJhbmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5yPC9jb2RlPjx2YXI+bjwvdmFyPjxjb2RlPigjPC9jb2RlPjx2YXI+aW1tPC92YXI+PGNvZGU+KTwvY29kZT48ZHQ+PGNvZGU+cnI8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+KCM8L2NvZGU+PHZhcj5pbW08L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5CYXNlIEFkZHJlc3M6IHRoZSAxNiBvciAyNCBiaXQgcmVnaXN0ZXIgaXMgYWRkZWQgdG8gdGhlIDE2IGJpdCBzaWduCitleHRlbmRlZCBpbW1lZGlhdGUgZGlzcGxhY2VtZW50IHRvIHByb2R1Y2UgdGhlIGZpbmFsIGFkZHJlc3MgaW4gbWVtb3J5CitvZiB0aGUgb3BlcmFuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnI8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+KHI8L2NvZGU+PHZhcj5tPC92YXI+PGNvZGU+KTwvY29kZT48ZHQ+PGNvZGU+cnI8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+KHI8L2NvZGU+PHZhcj5tPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+QmFzZSBJbmRleDogdGhlIDE2IG9yIDI0IGJpdCByZWdpc3RlciByPHZhcj5uPC92YXI+IG9yIHJyPHZhcj5uPC92YXI+IGlzIGFkZGVkIHRvCit0aGUgc2lnbiBleHRlbmRlZCAxNiBiaXQgaW5kZXggcmVnaXN0ZXIgcjx2YXI+bTwvdmFyPiB0byBwcm9kdWNlIHRoZSBmaW5hbAorYWRkcmVzcyBpbiBtZW1vcnkgb2YgdGhlIG9wZXJhbmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4jPC9jb2RlPjx2YXI+eHg8L3Zhcj48ZGQ+SW1tZWRpYXRlIGRhdGEgPHZhcj54eDwvdmFyPi4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMF8wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjRlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMF8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5aODAwMC1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWjgwMDAtU3ludGF4Lmh0bWwjWjgwMDAtU3ludGF4IiB0aXRsZT0iWjgwMDAgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWjgwMDBfMDAyZFJlZ3MuaHRtbCNaODAwMF8wMDJkUmVncyIgdGl0bGU9Ilo4MDAwLVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJaODAwMC1DaGFycyI+PC9hPgorPGEgbmFtZT0iWjgwMDBfMDAyZENoYXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ilo4MDAwXzAwMmRSZWdzLmh0bWwjWjgwMDBfMDAyZFJlZ3MiPlo4MDAwLVJlZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJaODAwMC1TeW50YXguaHRtbCNaODAwMC1TeW50YXgiPlo4MDAwIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuNDUuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpbmUtY29tbWVudC1jaGFyYWN0ZXJfMDAyYy1aODAwMC0yMDg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtWjgwMDAtbGluZS1jb21tZW50LWNoYXJhY3Rlci0yMDg2Ij48L2E+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRoZSBsaW5lIGNvbW1lbnQgY2hhcmFjdGVyLgorCisgICA8cD5JZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lIHRoZW4gdGhlIHdob2xlCitsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LCBidXQgaW4gdGhpcyBjYXNlIHRoZSBsaW5lIGNvdWxkIGFsc28gYmUKK2EgbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEgcHJlcHJvY2Vzc29yCitjb250cm9sIGNvbW1hbmQgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLVo4MDAwLTIwODciPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtWjgwMDAtMjA4OCI+PC9hPjxhIG5hbWU9ImluZGV4LVo4MDAwLWxpbmUtc2VwYXJhdG9yLTIwODkiPjwvYT5Zb3UgY2FuIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdGVhZCBvZiBhIG5ld2xpbmUgdG8gc2VwYXJhdGUgc3RhdGVtZW50cy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwMDBfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwMDBfMDAyZERlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNmNiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODAwMF8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WjgwMDAtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJaODBfMDAyZERlcGVuZGVudC5odG1sI1o4MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWjgwLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZheF8wMDJkRGVwZW5kZW50Lmh0bWwjVmF4XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJWYXgtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWjgwMDAtRGVwZW5kZW50Ij48L2E+Cis8YSBuYW1lPSJaODAwMF8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZheF8wMDJkRGVwZW5kZW50Lmh0bWwjVmF4XzAwMmREZXBlbmRlbnQiPlZheC1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODBfMDAyZERlcGVuZGVudC5odG1sI1o4MF8wMDJkRGVwZW5kZW50Ij5aODAtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjQ1IFo4MDAwIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVo4MDAwLXN1cHBvcnQtMjA4MCI+PC9hPlRoZSBaODAwMCBhcyBzdXBwb3J0cyBib3RoIG1lbWJlcnMgb2YgdGhlIFo4MDAwIGZhbWlseTogdGhlCit1bnNlZ21lbnRlZCBaODAwMiwgd2l0aCAxNiBiaXQgYWRkcmVzc2VzLCBhbmQgdGhlIHNlZ21lbnRlZCBaODAwMSB3aXRoCisyNCBiaXQgYWRkcmVzc2VzLgorCisgICA8cD5XaGVuIHRoZSBhc3NlbWJsZXIgaXMgaW4gdW5zZWdtZW50ZWQgbW9kZSAoc3BlY2lmaWVkIHdpdGggdGhlCis8Y29kZT51bnNlZ208L2NvZGU+IGRpcmVjdGl2ZSksIGFuIGFkZHJlc3MgdGFrZXMgdXAgb25lIHdvcmQgKDE2IGJpdCkKK3NpemVkIHJlZ2lzdGVyLiAgV2hlbiB0aGUgYXNzZW1ibGVyIGlzIGluIHNlZ21lbnRlZCBtb2RlIChzcGVjaWZpZWQgd2l0aAordGhlIDxjb2RlPnNlZ208L2NvZGU+IGRpcmVjdGl2ZSksIGEgMjQtYml0IGFkZHJlc3MgdGFrZXMgdXAgYSBsb25nICgzMiBiaXQpCityZWdpc3Rlci4gIFNlZSA8YSBocmVmPSJaODAwMC1EaXJlY3RpdmVzLmh0bWwjWjgwMDAtRGlyZWN0aXZlcyI+QXNzZW1ibGVyIERpcmVjdGl2ZXMgZm9yIHRoZSBaODAwMDwvYT4sCitmb3IgYSBsaXN0IG9mIG90aGVyIFo4MDAwIHNwZWNpZmljIGFzc2VtYmxlciBkaXJlY3RpdmVzLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iWjgwMDAtT3B0aW9ucy5odG1sI1o4MDAwLU9wdGlvbnMiPlo4MDAwIE9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgICBDb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgdGhlIFo4MDAwCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJaODAwMC1TeW50YXguaHRtbCNaODAwMC1TeW50YXgiPlo4MDAwIFN5bnRheDwvYT46ICAgICAgICAgICAgICAgICBBc3NlbWJsZXIgc3ludGF4IGZvciB0aGUgWjgwMDAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ilo4MDAwLURpcmVjdGl2ZXMuaHRtbCNaODAwMC1EaXJlY3RpdmVzIj5aODAwMCBEaXJlY3RpdmVzPC9hPjogICAgICAgICAgICAgU3BlY2lhbCBkaXJlY3RpdmVzIGZvciB0aGUgWjgwMDAKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9Ilo4MDAwLU9wY29kZXMuaHRtbCNaODAwMC1PcGNvZGVzIj5aODAwMCBPcGNvZGVzPC9hPjogICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwMDBfMDAyZFJlZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwXzAwMmRSZWdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE2MDI5YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MDAwXzAwMmRSZWdzLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WjgwMDAtUmVncyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWjgwMDAtU3ludGF4Lmh0bWwjWjgwMDAtU3ludGF4IiB0aXRsZT0iWjgwMDAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iWjgwMDBfMDAyZENoYXJzLmh0bWwjWjgwMDBfMDAyZENoYXJzIiB0aXRsZT0iWjgwMDAtQ2hhcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJaODAwMF8wMDJkQWRkcmVzc2luZy5odG1sI1o4MDAwXzAwMmRBZGRyZXNzaW5nIiB0aXRsZT0iWjgwMDAtQWRkcmVzc2luZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilo4MDAwLVJlZ3MiPjwvYT4KKzxhIG5hbWU9Ilo4MDAwXzAwMmRSZWdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ilo4MDAwXzAwMmRBZGRyZXNzaW5nLmh0bWwjWjgwMDBfMDAyZEFkZHJlc3NpbmciPlo4MDAwLUFkZHJlc3Npbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODAwMF8wMDJkQ2hhcnMuaHRtbCNaODAwMF8wMDJkQ2hhcnMiPlo4MDAwLUNoYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWjgwMDAtU3ludGF4Lmh0bWwjWjgwMDAtU3ludGF4Ij5aODAwMCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQ1LjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVo4MDAwLXJlZ2lzdGVycy0yMDkwIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXJzXzAwMmMtWjgwMDAtMjA5MSI+PC9hPlRoZSBaODAwMCBoYXMgc2l4dGVlbiAxNiBiaXQgcmVnaXN0ZXJzLCBudW1iZXJlZCAwIHRvIDE1LiAgWW91IGNhbiByZWZlcgordG8gZGlmZmVyZW50IHNpemVkIGdyb3VwcyBvZiByZWdpc3RlcnMgYnkgcmVnaXN0ZXIgbnVtYmVyLCB3aXRoIHRoZQorcHJlZml4ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgMTYgYml0IHJlZ2lzdGVycywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ycjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgMzIgYml0IHJlZ2lzdGVycyBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cnE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDY0IGJpdCByZWdpc3RlcnMuICBZb3UgY2FuIGFsc28gcmVmZXIgdG8gdGhlIGNvbnRlbnRzIG9mCit0aGUgZmlyc3QgZWlnaHQgKG9mIHRoZSBzaXh0ZWVuIDE2IGJpdCByZWdpc3RlcnMpIGJ5IGJ5dGVzLiAgVGhleSBhcmUKK25hbWVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmw8L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmg8L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPiZyc3F1bzsuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+PGJyPjxlbT5ieXRlIHJlZ2lzdGVyczwvZW0+PGJyPgorICAgICBybDAgcmgwIHJsMSByaDEgcmwyIHJoMiBybDMgcmgzCisgICAgIHJsNCByaDQgcmw1IHJoNSBybDYgcmg2IHJsNyByaDcKKyAgICAgCis8YnI+PGVtPndvcmQgcmVnaXN0ZXJzPC9lbT48YnI+CisgICAgIHIwIHIxIHIyIHIzIHI0IHI1IHI2IHI3IHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1CisgICAgIAorPGJyPjxlbT5sb25nIHdvcmQgcmVnaXN0ZXJzPC9lbT48YnI+CisgICAgIHJyMCBycjIgcnI0IHJyNiBycjggcnIxMCBycjEyIHJyMTQKKyAgICAgCis8YnI+PGVtPnF1YWQgd29yZCByZWdpc3RlcnM8L2VtPjxicj4KKyAgICAgcnEwIHJxNCBycTggcnExMgorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODBfMDAyZENhc2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL1o4MF8wMDJkQ2FzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODRkODIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODBfMDAyZENhc2UuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5aODAtQ2FzZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iWjgwLVN5bnRheC5odG1sI1o4MC1TeW50YXgiIHRpdGxlPSJaODAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iWjgwXzAwMmRSZWdzLmh0bWwjWjgwXzAwMmRSZWdzIiB0aXRsZT0iWjgwLVJlZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJaODAtQ2FzZSI+PC9hPgorPGEgbmFtZT0iWjgwXzAwMmRDYXNlIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWjgwXzAwMmRSZWdzLmh0bWwjWjgwXzAwMmRSZWdzIj5aODAtUmVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ilo4MC1TeW50YXguaHRtbCNaODAtU3ludGF4Ij5aODAgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS40NC4yLjMgQ2FzZSBTZW5zaXRpdml0eTwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVo4MF8wMDJjLWNhc2Utc2Vuc2l0aXZpdHktMjA3NSI+PC9hPjxhIG5hbWU9ImluZGV4LWNhc2Utc2Vuc2l0aXZpdHlfMDAyYy1aODAtMjA3NiI+PC9hPgorVXBwZXIgYW5kIGxvd2VyIGNhc2UgYXJlIGVxdWl2YWxlbnQgaW4gcmVnaXN0ZXIgbmFtZXMsIG9wY29kZXMsCitjb25kaXRpb24gY29kZXMgIGFuZCBhc3NlbWJsZXIgZGlyZWN0aXZlcy4gCitUaGUgY2FzZSBvZiBsZXR0ZXJzIGlzIHNpZ25pZmljYW50IGluIGxhYmVscyBhbmQgc3ltYm9sIG5hbWVzLiBUaGUgY2FzZQoraXMgYWxzbyBpbXBvcnRhbnQgdG8gZGlzdGluZ3Vpc2ggdGhlIHN1ZmZpeCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGEgYmFja3dhcmQgcmVmZXJlbmNlCit0byBhIGxvY2FsIGxhYmVsIGZyb20gdGhlIHN1ZmZpeCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGEgbnVtYmVyIGluIGJpbmFyeSBub3RhdGlvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjUwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODBfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WjgwLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJaODAtU3ludGF4Lmh0bWwjWjgwLVN5bnRheCIgdGl0bGU9Ilo4MCBTeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJaODBfMDAyZFJlZ3MuaHRtbCNaODBfMDAyZFJlZ3MiIHRpdGxlPSJaODAtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilo4MC1DaGFycyI+PC9hPgorPGEgbmFtZT0iWjgwXzAwMmRDaGFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJaODBfMDAyZFJlZ3MuaHRtbCNaODBfMDAyZFJlZ3MiPlo4MC1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWjgwLVN5bnRheC5odG1sI1o4MC1TeW50YXgiPlo4MCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQ0LjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtWjgwLTIwNjAiPjwvYT48YSBuYW1lPSJpbmRleC1aODAtbGluZS1jb21tZW50LWNoYXJhY3Rlci0yMDYxIj48L2E+VGhlIHNlbWljb2xvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIGxpbmUgY29tbWVudCBjaGFyYWN0ZXI7CisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgdGhlbiB0aGUgd2hvbGUKK2xpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY291bGQgYWxzbyBiZQorYSBsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtWjgwLTIwNjIiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtWjgwLTIwNjMiPjwvYT48YSBuYW1lPSJpbmRleC1aODAtbGluZS1zZXBhcmF0b3ItMjA2NCI+PC9hPlRoZSBaODAgYXNzZW1ibGVyIGRvZXMgbm90IHN1cHBvcnQgYSBsaW5lIHNlcGFyYXRvciBjaGFyYWN0ZXIuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxvY2F0aW9uLWNvdW50ZXJfMDAyYy1aODAtMjA2NSI+PC9hPjxhIG5hbWU9ImluZGV4LWhleGFkZWNpbWFsLXByZWZpeF8wMDJjLVo4MC0yMDY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtWjgwLV8wMDI0LTIwNjciPjwvYT5UaGUgZG9sbGFyIHNpZ24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhbiBiZSB1c2VkIGFzIGEgcHJlZml4IGZvciBoZXhhZGVjaW1hbCBudW1iZXJzCithbmQgYXMgYSBzeW1ib2wgZGVub3RpbmcgdGhlIGN1cnJlbnQgbG9jYXRpb24gY291bnRlci4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtY2hhcmFjdGVyLWVzY2FwZXNfMDAyYy1aODAtMjA2OCI+PC9hPjxhIG5hbWU9ImluZGV4LVo4MF8wMDJjLV8wMDVjLTIwNjkiPjwvYT5BIGJhY2tzbGFzaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYW4gb3JkaW5hcnkgY2hhcmFjdGVyIGZvciB0aGUgWjgwIGFzc2VtYmxlci4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtY2hhcmFjdGVyLWNvbnN0YW50XzAwMmMtWjgwLTIwNzAiPjwvYT48YSBuYW1lPSJpbmRleC1zaW5nbGUtcXVvdGVfMDAyYy1aODAtMjA3MSI+PC9hPjxhIG5hbWU9ImluZGV4LVo4MC1fMDAyNy0yMDcyIj48L2E+VGhlIHNpbmdsZSBxdW90ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPic8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGNsb3NpbmcgcXVvdGUuIElmIHRoZXJlCitpcyBvbmUgY2hhcmFjdGVyIGluIGJldHdlZW4sIGl0IGlzIGEgY2hhcmFjdGVyIGNvbnN0YW50LCBvdGhlcndpc2UgaXQgaXMKK2Egc3RyaW5nIGNvbnN0YW50LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODBfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDM1ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwXzAwMmREZXBlbmRlbnQuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5aODAtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJYdGVuc2FfMDAyZERlcGVuZGVudC5odG1sI1h0ZW5zYV8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWHRlbnNhLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilo4MDAwXzAwMmREZXBlbmRlbnQuaHRtbCNaODAwMF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iWjgwMDAtRGVwZW5kZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWjgwLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iWjgwXzAwMmREZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWjgwMDBfMDAyZERlcGVuZGVudC5odG1sI1o4MDAwXzAwMmREZXBlbmRlbnQiPlo4MDAwLURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ilh0ZW5zYV8wMDJkRGVwZW5kZW50Lmh0bWwjWHRlbnNhXzAwMmREZXBlbmRlbnQiPlh0ZW5zYS1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuNDQgWjgwIERlcGVuZGVudCBGZWF0dXJlczwvaDM+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVo4MC1zdXBwb3J0LTIwNTQiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ilo4MC1PcHRpb25zLmh0bWwjWjgwLU9wdGlvbnMiPlo4MCBPcHRpb25zPC9hPjogICAgICAgICAgICAgICBPcHRpb25zCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJaODAtU3ludGF4Lmh0bWwjWjgwLVN5bnRheCI+WjgwIFN5bnRheDwvYT46ICAgICAgICAgICAgICAgIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iWjgwLUZsb2F0aW5nLVBvaW50Lmh0bWwjWjgwLUZsb2F0aW5nLVBvaW50Ij5aODAgRmxvYXRpbmcgUG9pbnQ8L2E+OiAgICAgICAgRmxvYXRpbmcgUG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9Ilo4MC1EaXJlY3RpdmVzLmh0bWwjWjgwLURpcmVjdGl2ZXMiPlo4MCBEaXJlY3RpdmVzPC9hPjogICAgICAgICAgICBaODAgTWFjaGluZSBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJaODAtT3Bjb2Rlcy5odG1sI1o4MC1PcGNvZGVzIj5aODAgT3Bjb2RlczwvYT46ICAgICAgICAgICAgICAgT3Bjb2RlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwXzAwMmRSZWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9aODBfMDAyZFJlZ3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzdjZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvWjgwXzAwMmRSZWdzLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WjgwLVJlZ3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ilo4MC1TeW50YXguaHRtbCNaODAtU3ludGF4IiB0aXRsZT0iWjgwIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilo4MF8wMDJkQ2hhcnMuaHRtbCNaODBfMDAyZENoYXJzIiB0aXRsZT0iWjgwLUNoYXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWjgwXzAwMmRDYXNlLmh0bWwjWjgwXzAwMmRDYXNlIiB0aXRsZT0iWjgwLUNhc2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJaODAtUmVncyI+PC9hPgorPGEgbmFtZT0iWjgwXzAwMmRSZWdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ilo4MF8wMDJkQ2FzZS5odG1sI1o4MF8wMDJkQ2FzZSI+WjgwLUNhc2U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJaODBfMDAyZENoYXJzLmh0bWwjWjgwXzAwMmRDaGFycyI+WjgwLUNoYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iWjgwLVN5bnRheC5odG1sI1o4MC1TeW50YXgiPlo4MCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjQ0LjIuMiBSZWdpc3RlciBOYW1lczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LVo4MC1yZWdpc3RlcnMtMjA3MyI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW5hbWVzXzAwMmMtWjgwLTIwNzQiPjwvYT4KK1RoZSByZWdpc3RlcnMgYXJlIHJlZmVycmVkIHRvIHdpdGggdGhlIGxldHRlcnMgYXNzaWduZWQgdG8gdGhlbSBieQorWmlsb2cuIEluIGFkZGl0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IHJlY29nbml6ZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5peGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPml4aDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyB0aGUgbGVhc3QgYW5kIG1vc3Qgc2lnbmlmaWNhbnQgb2N0ZXQgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5peDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kCitzaW1pbGFybHkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5peWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPml5aDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyBwYXJ0cyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPml5PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCis8IS0tIFRoZSBAc2FtcHsnfSBpbiBAc2FtcHtleCBhZixhZid9IG1heSBiZSBvbWl0dGVkLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2EuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2EuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2MwZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYS5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmEgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImFsdGVybmF0ZS5odG1sI2FsdGVybmF0ZSIgdGl0bGU9ImFsdGVybmF0ZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImEiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iYWx0ZXJuYXRlLmh0bWwjYWx0ZXJuYXRlIj5hbHRlcm5hdGU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMSBFbmFibGUgTGlzdGluZ3M6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hW2NkZ2hsbnNdPC9zcGFuPjwvc2FtcD48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGEtNDciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGFjLTQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRhZC00OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkYWctNTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGFoLTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRhbC01MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkYW4tNTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGFzLTU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGlzdGluZ3NfMDAyYy1lbmFibGluZy01NSI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VtYmx5LWxpc3RpbmdzXzAwMmMtZW5hYmxpbmctNTYiPjwvYT4KK1RoZXNlIG9wdGlvbnMgZW5hYmxlIGxpc3Rpbmcgb3V0cHV0IGZyb20gdGhlIGFzc2VtYmxlci4gIEJ5IGl0c2VsZiwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVxdWVzdHMgaGlnaC1sZXZlbCwgYXNzZW1ibHksIGFuZCBzeW1ib2xzIGxpc3RpbmcuIAorWW91IGNhbiB1c2Ugb3RoZXIgbGV0dGVycyB0byBzZWxlY3Qgc3BlY2lmaWMgb3B0aW9ucyBmb3IgdGhlIGxpc3Q6CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1haDwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXF1ZXN0cyBhIGhpZ2gtbGV2ZWwgbGFuZ3VhZ2UgbGlzdGluZywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWFsPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlcXVlc3RzIGFuIG91dHB1dC1wcm9ncmFtIGFzc2VtYmx5IGxpc3RpbmcsIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVxdWVzdHMgYSBzeW1ib2wgdGFibGUgbGlzdGluZy4gCitIaWdoLWxldmVsIGxpc3RpbmdzIHJlcXVpcmUgdGhhdCBhIGNvbXBpbGVyIGRlYnVnZ2luZyBvcHRpb24gbGlrZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBiZSB1c2VkLCBhbmQgdGhhdCBhc3NlbWJseSBsaXN0aW5ncyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYWw8L3NwYW4+PC9zYW1wPiZyc3F1bzspIGJlIHJlcXVlc3RlZAorYWxzby4KKworICAgPHA+VXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1hZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gcHJpbnQgYSBmaXJzdCBzZWN0aW9uIHdpdGggZ2VuZXJhbCBhc3NlbWJseQoraW5mb3JtYXRpb24sIGxpa2UgYXMgdmVyc2lvbiwgc3dpdGNoZXMgcGFzc2VkLCBvciB0aW1lIHN0YW1wLgorCisgICA8cD5Vc2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWFjPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0byBvbWl0IGZhbHNlIGNvbmRpdGlvbmFscyBmcm9tIGEgbGlzdGluZy4gIEFueSBsaW5lcword2hpY2ggYXJlIG5vdCBhc3NlbWJsZWQgYmVjYXVzZSBvZiBhIGZhbHNlIDxjb2RlPi5pZjwvY29kZT4gKG9yIDxjb2RlPi5pZmRlZjwvY29kZT4sIG9yIGFueQorb3RoZXIgY29uZGl0aW9uYWwpLCBvciBhIHRydWUgPGNvZGU+LmlmPC9jb2RlPiBmb2xsb3dlZCBieSBhbiA8Y29kZT4uZWxzZTwvY29kZT4sIHdpbGwgYmUKK29taXR0ZWQgZnJvbSB0aGUgbGlzdGluZy4KKworICAgPHA+VXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1hZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gb21pdCBkZWJ1Z2dpbmcgZGlyZWN0aXZlcyBmcm9tIHRoZQorbGlzdGluZy4KKworICAgPHA+T25jZSB5b3UgaGF2ZSBzcGVjaWZpZWQgb25lIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gZnVydGhlciBjb250cm9sCitsaXN0aW5nIG91dHB1dCBhbmQgaXRzIGFwcGVhcmFuY2UgdXNpbmcgdGhlIGRpcmVjdGl2ZXMgPGNvZGU+Lmxpc3Q8L2NvZGU+LAorPGNvZGU+Lm5vbGlzdDwvY29kZT4sIDxjb2RlPi5wc2l6ZTwvY29kZT4sIDxjb2RlPi5lamVjdDwvY29kZT4sIDxjb2RlPi50aXRsZTwvY29kZT4sIGFuZAorPGNvZGU+LnNidHRsPC9jb2RlPi4gCitUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYW48L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIHR1cm5zIG9mZiBhbGwgZm9ybXMgcHJvY2Vzc2luZy4gCitJZiB5b3UgZG8gbm90IHJlcXVlc3QgbGlzdGluZyBvdXRwdXQgd2l0aCBvbmUgb2YgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucywgdGhlCitsaXN0aW5nLWNvbnRyb2wgZGlyZWN0aXZlcyBoYXZlIG5vIGVmZmVjdC4KKworICAgPHA+VGhlIGxldHRlcnMgYWZ0ZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtYXkgYmUgY29tYmluZWQgaW50byBvbmUgb3B0aW9uLAorPGVtPmUuZy48L2VtPiwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYWxuPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5Ob3RlIGlmIHRoZSBhc3NlbWJsZXIgc291cmNlIGlzIGNvbWluZyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCAoZS5nLiwKK2JlY2F1c2UgaXQKK2lzIGJlaW5nIGNyZWF0ZWQgYnkgPGNvZGU+Z2NjPC9jb2RlPiBhbmQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXBpcGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lIHN3aXRjaAoraXMgYmVpbmcgdXNlZCkgdGhlbiB0aGUgbGlzdGluZyB3aWxsIG5vdCBjb250YWluIGFueSBjb21tZW50cyBvciBwcmVwcm9jZXNzb3IKK2RpcmVjdGl2ZXMuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGxpc3RpbmcgY29kZSBidWZmZXJzIGlucHV0IHNvdXJjZSBsaW5lcyBmcm9tCitzdGRpbiBvbmx5IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIHByZXByb2Nlc3NlZCBieSB0aGUgYXNzZW1ibGVyLiAgVGhpcyByZWR1Y2VzCittZW1vcnkgdXNhZ2UgYW5kIG1ha2VzIHRoZSBjb2RlIG1vcmUgZWZmaWNpZW50LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9hXzAwMmVvdXQtU3ltYm9scy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYV8wMDJlb3V0LVN5bWJvbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGIxYmZjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYV8wMDJlb3V0LVN5bWJvbHMuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hLm91dCBTeW1ib2xzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTeW1ib2wtQXR0cmlidXRlcy5odG1sI1N5bWJvbC1BdHRyaWJ1dGVzIiB0aXRsZT0iU3ltYm9sIEF0dHJpYnV0ZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTeW1ib2wtVHlwZS5odG1sI1N5bWJvbC1UeXBlIiB0aXRsZT0iU3ltYm9sIFR5cGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDT0ZGLVN5bWJvbHMuaHRtbCNDT0ZGLVN5bWJvbHMiIHRpdGxlPSJDT0ZGIFN5bWJvbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJhLm91dC1TeW1ib2xzIj48L2E+Cis8YSBuYW1lPSJhXzAwMmVvdXQtU3ltYm9scyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDT0ZGLVN5bWJvbHMuaHRtbCNDT0ZGLVN5bWJvbHMiPkNPRkYgU3ltYm9sczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN5bWJvbC1UeXBlLmh0bWwjU3ltYm9sLVR5cGUiPlN5bWJvbCBUeXBlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3ltYm9sLUF0dHJpYnV0ZXMuaHRtbCNTeW1ib2wtQXR0cmlidXRlcyI+U3ltYm9sIEF0dHJpYnV0ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj41LjUuMyBTeW1ib2wgQXR0cmlidXRlczogPGNvZGU+YS5vdXQ8L2NvZGU+PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhXzAwMmVvdXRfMDA3ZC1zeW1ib2wtYXR0cmlidXRlcy0yMzEiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtYXR0cmlidXRlc18wMDJjLV8wMDQwY29kZV8wMDdiYV8wMDJlb3V0XzAwN2QtMjMyIj48L2E+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJTeW1ib2wtRGVzYy5odG1sI1N5bWJvbC1EZXNjIj5TeW1ib2wgRGVzYzwvYT46ICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvcgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iU3ltYm9sLU90aGVyLmh0bWwjU3ltYm9sLU90aGVyIj5TeW1ib2wgT3RoZXI8L2E+OiAgICAgICAgICAgICAgICAgT3RoZXIKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FsdGVybmF0ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYWx0ZXJuYXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyNjE3YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FsdGVybmF0ZS5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmFsdGVybmF0ZSAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iYS5odG1sI2EiIHRpdGxlPSJhIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRC5odG1sI0QiIHRpdGxlPSJEIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYWx0ZXJuYXRlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkQuaHRtbCNEIj5EPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iYS5odG1sI2EiPmE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFsdGVybmF0ZTwvc3Bhbj48L3NhbXA+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGFsdGVybmF0ZS01NyI+PC9hPkJlZ2luIGluIGFsdGVybmF0ZSBtYWNybyBtb2RlLCBzZWUgPGEgaHJlZj0iQWx0bWFjcm8uaHRtbCNBbHRtYWNybyI+PGNvZGU+LmFsdG1hY3JvPC9jb2RlPjwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FybV8wMDVmZm5lbmQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FybV8wMDVmZm5lbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmFhZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYXJtXzAwNWZmbmVuZC5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1BUk0tRGlyZWN0aXZlcy5odG1sI2FybSU1ZmZuZW5kIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FybV8wMDVmZm5zdGFydC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYXJtXzAwNWZmbnN0YXJ0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI3MWVhZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FybV8wMDVmZm5zdGFydC5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1BUk0tRGlyZWN0aXZlcy5odG1sI2FybSU1ZmZuc3RhcnQiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYXJtXzAwNWZwYWQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FybV8wMDVmcGFkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1Y2FmYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FybV8wMDVmcGFkLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPUFSTS1EaXJlY3RpdmVzLmh0bWwjYXJtJTVmcGFkIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FybV8wMDVmc2F2ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYXJtXzAwNWZzYXZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlNThjNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2FybV8wMDVmc2F2ZS5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1BUk0tRGlyZWN0aXZlcy5odG1sI2FybSU1ZnNhdmUiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYXJtXzAwNWZzZXRmcC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYXJtXzAwNWZzZXRmcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYTIzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9hcm1fMDA1ZnNldGZwLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPUFSTS1EaXJlY3RpdmVzLmh0bWwjYXJtJTVmc2V0ZnAiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYnNzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9ic3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTUyODgyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvYnNzLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+YnNzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIiB0aXRsZT0iU2VjdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdWJfMDAyZFNlY3Rpb25zLmh0bWwjU3ViXzAwMmRTZWN0aW9ucyIgdGl0bGU9IlN1Yi1TZWN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImJzcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN1Yl8wMDJkU2VjdGlvbnMuaHRtbCNTdWJfMDAyZFNlY3Rpb25zIj5TdWItU2VjdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIj5TZWN0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNSBic3MgU2VjdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWJzcy1zZWN0aW9uLTIwNiI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbW1vbi12YXJpYWJsZS1zdG9yYWdlLTIwNyI+PC9hPlRoZSBic3Mgc2VjdGlvbiBpcyB1c2VkIGZvciBsb2NhbCBjb21tb24gdmFyaWFibGUgc3RvcmFnZS4gCitZb3UgbWF5IGFsbG9jYXRlIGFkZHJlc3Mgc3BhY2UgaW4gdGhlIGJzcyBzZWN0aW9uLCBidXQgeW91IG1heQorbm90IGRpY3RhdGUgZGF0YSB0byBsb2FkIGludG8gaXQgYmVmb3JlIHlvdXIgcHJvZ3JhbSBleGVjdXRlcy4gIFdoZW4KK3lvdXIgcHJvZ3JhbSBzdGFydHMgcnVubmluZywgYWxsIHRoZSBjb250ZW50cyBvZiB0aGUgYnNzCitzZWN0aW9uIGFyZSB6ZXJvZWQgYnl0ZXMuCisKKyAgIDxwPlRoZSA8Y29kZT4ubGNvbW08L2NvZGU+IHBzZXVkby1vcCBkZWZpbmVzIGEgc3ltYm9sIGluIHRoZSBic3Mgc2VjdGlvbjsgc2VlCis8YSBocmVmPSJMY29tbS5odG1sI0xjb21tIj48Y29kZT4ubGNvbW08L2NvZGU+PC9hPi4KKworICAgPHA+VGhlIDxjb2RlPi5jb21tPC9jb2RlPiBwc2V1ZG8tb3AgbWF5IGJlIHVzZWQgdG8gZGVjbGFyZSBhIGNvbW1vbiBzeW1ib2wsIHdoaWNoIGlzCithbm90aGVyIGZvcm0gb2YgdW5pbml0aWFsaXplZCBzeW1ib2w7IHNlZSA8YSBocmVmPSJDb21tLmh0bWwjQ29tbSI+PGNvZGU+LmNvbW08L2NvZGU+PC9hPi4KKworICAgPHA+V2hlbiBhc3NlbWJsaW5nIGZvciBhIHRhcmdldCB3aGljaCBzdXBwb3J0cyBtdWx0aXBsZSBzZWN0aW9ucywgc3VjaCBhcyBFTEYgb3IKK0NPRkYsIHlvdSBtYXkgc3dpdGNoIGludG8gdGhlIDxjb2RlPi5ic3M8L2NvZGU+IHNlY3Rpb24gYW5kIGRlZmluZSBzeW1ib2xzIGFzIHVzdWFsOworc2VlIDxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj48Y29kZT4uc2VjdGlvbjwvY29kZT48L2E+LiAgWW91IG1heSBvbmx5IGFzc2VtYmxlIHplcm8gdmFsdWVzIGludG8gdGhlCitzZWN0aW9uLiAgVHlwaWNhbGx5IHRoZSBzZWN0aW9uIHdpbGwgb25seSBjb250YWluIHN5bWJvbCBkZWZpbml0aW9ucyBhbmQKKzxjb2RlPi5za2lwPC9jb2RlPiBkaXJlY3RpdmVzIChzZWUgPGEgaHJlZj0iU2tpcC5odG1sI1NraXAiPjxjb2RlPi5za2lwPC9jb2RlPjwvYT4pLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9jYWxsal8wMDJkaTk2MC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvY2FsbGpfMDAyZGk5NjAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmFhZjRjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvY2FsbGpfMDAyZGk5NjAuaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jYWxsai1pOTYwIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPcGNvZGVzLWZvci1pOTYwLmh0bWwjT3Bjb2Rlcy1mb3ItaTk2MCIgdGl0bGU9Ik9wY29kZXMgZm9yIGk5NjAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb21wYXJlXzAwMmRhbmRfMDAyZGJyYW5jaF8wMDJkaTk2MC5odG1sI0NvbXBhcmVfMDAyZGFuZF8wMDJkYnJhbmNoXzAwMmRpOTYwIiB0aXRsZT0iQ29tcGFyZS1hbmQtYnJhbmNoLWk5NjAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjYWxsai1pOTYwIj48L2E+Cis8YSBuYW1lPSJjYWxsal8wMDJkaTk2MCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb21wYXJlXzAwMmRhbmRfMDAyZGJyYW5jaF8wMDJkaTk2MC5odG1sI0NvbXBhcmVfMDAyZGFuZF8wMDJkYnJhbmNoXzAwMmRpOTYwIj5Db21wYXJlLWFuZC1icmFuY2gtaTk2MDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik9wY29kZXMtZm9yLWk5NjAuaHRtbCNPcGNvZGVzLWZvci1pOTYwIj5PcGNvZGVzIGZvciBpOTYwPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xNy40LjEgPGNvZGU+Y2FsbGo8L2NvZGU+PC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JjYWxsal8wMDdkXzAwMmMtaTk2MC1wc2V1ZG9fMDAyZG9wY29kZS0xMTA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtaTk2MC1fMDA0MGNvZGVfMDA3YmNhbGxqXzAwN2QtcHNldWRvXzAwMmRvcGNvZGUtMTEwNSI+PC9hPllvdSBjYW4gd3JpdGUgPGNvZGU+Y2FsbGo8L2NvZGU+IHRvIGhhdmUgdGhlIGFzc2VtYmxlciBvciB0aGUgbGlua2VyIGRldGVybWluZQordGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9ybSBvZiBzdWJyb3V0aW5lIGNhbGw6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmFsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNhbGxzPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSWYgdGhlIGFzc2VtYmx5IHNvdXJjZSBjb250YWlucworZW5vdWdoIGluZm9ybWF0aW9uJm1kYXNoO2EgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubGVhZnByb2M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3lzcHJvYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUKK2RlZmluaW5nIHRoZSBvcGVyYW5kJm1kYXNoO3RoZW4gPGNvZGU+YXM8L2NvZGU+IHRyYW5zbGF0ZXMgdGhlCis8Y29kZT5jYWxsajwvY29kZT47IGlmIG5vdCwgaXQgc2ltcGx5IGVtaXRzIHRoZSA8Y29kZT5jYWxsajwvY29kZT4sIGxlYXZpbmcgaXQKK2ZvciB0aGUgbGlua2VyIHRvIHJlc29sdmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2NyaXNub3VzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9jcmlzbm91cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YWJmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9jcmlzbm91cy5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1DUklTXzAwMmRQc2V1ZG9zLmh0bWwjY3Jpc25vdXMiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvY3Jpc3BpYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvY3Jpc3BpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDY3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9jcmlzcGljLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPUNSSVNfMDAyZFBpYy5odG1sI2NyaXNwaWMiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvZi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZjYxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9mLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZiAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRC5odG1sI0QiIHRpdGxlPSJEIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSS5odG1sI0kiIHRpdGxlPSJJIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJLmh0bWwjSSI+STwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkQuaHRtbCNEIj5EPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjQgV29yayBGYXN0ZXI6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mPC9zcGFuPjwvc2FtcD48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGYtNTkiPjwvYT48YSBuYW1lPSJpbmRleC10cnVzdGVkLWNvbXBpbGVyLTYwIj48L2E+PGEgbmFtZT0iaW5kZXgtZmFzdGVyLXByb2Nlc3NpbmctXzAwMjhfMDA0MG9wdGlvbl8wMDdiXzAwMmRmXzAwN2RfMDAyOS02MSI+PC9hPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGFzc2VtYmxpbmcgcHJvZ3JhbXMgd3JpdHRlbiBieSBhCisodHJ1c3RlZCkgY29tcGlsZXIuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1mPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN0b3BzIHRoZSBhc3NlbWJsZXIgZnJvbSBkb2luZyB3aGl0ZXNwYWNlCithbmQgY29tbWVudCBwcmVwcm9jZXNzaW5nIG9uCit0aGUgaW5wdXQgZmlsZShzKSBiZWZvcmUgYXNzZW1ibGluZyB0aGVtLiAgU2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPi4KKworICAgPGJsb2NrcXVvdGU+Cis8ZW0+V2FybmluZzo8L2VtPiBpZiB5b3UgdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hlbiB0aGUgZmlsZXMgYWN0dWFsbHkgbmVlZCB0byBiZQorcHJlcHJvY2Vzc2VkIChpZiB0aGV5IGNvbnRhaW4gY29tbWVudHMsIGZvciBleGFtcGxlKSwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gZG9lcworbm90IHdvcmsgY29ycmVjdGx5LiAKKzwvYmxvY2txdW90ZT4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaHdvcmQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2h3b3JkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1MTZkYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2h3b3JkLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aHdvcmQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlBzZXVkby1PcHMuaHRtbCNQc2V1ZG8tT3BzIiB0aXRsZT0iUHNldWRvIE9wcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkhpZGRlbi5odG1sI0hpZGRlbiIgdGl0bGU9IkhpZGRlbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklkZW50Lmh0bWwjSWRlbnQiIHRpdGxlPSJJZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imh3b3JkIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklkZW50Lmh0bWwjSWRlbnQiPklkZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSGlkZGVuLmh0bWwjSGlkZGVuIj5IaWRkZW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNjAgPGNvZGU+Lmh3b3JkIDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jod29yZF8wMDdkLWRpcmVjdGl2ZS0zNDgiPjwvYT48YSBuYW1lPSJpbmRleC1pbnRlZ2Vyc18wMDJjLTE2XzAwMmRiaXQtMzQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbnVtYmVyc18wMDJjLTE2XzAwMmRiaXQtMzUwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2l4dGVlbi1iaXQtaW50ZWdlcnMtMzUxIj48L2E+VGhpcyBleHBlY3RzIHplcm8gb3IgbW9yZSA8dmFyPmV4cHJlc3Npb25zPC92YXI+LCBhbmQgZW1pdHMKK2EgMTYgYml0IG51bWJlciBmb3IgZWFjaC4KKworICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgYSBzeW5vbnltIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zaG9ydDwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQKK2FyY2hpdGVjdHVyZSwgaXQgbWF5IGFsc28gYmUgYSBzeW5vbnltIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi53b3JkPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmQxNmJpdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkMTZiaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTRlZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkMTZiaXQuaHRtbApAQCAtMCwwICsxLDkzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pMzg2LTE2Yml0IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpMzg2LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImkzODZfMDAyZFRCTS5odG1sI2kzODZfMDAyZFRCTSIgdGl0bGU9ImkzODYtVEJNIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaTM4Nl8wMDJkQXJjaC5odG1sI2kzODZfMDAyZEFyY2giIHRpdGxlPSJpMzg2LUFyY2giPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpMzg2LTE2Yml0Ij48L2E+Cis8YSBuYW1lPSJpMzg2XzAwMmQxNmJpdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpMzg2XzAwMmRBcmNoLmh0bWwjaTM4Nl8wMDJkQXJjaCI+aTM4Ni1BcmNoPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaTM4Nl8wMDJkVEJNLmh0bWwjaTM4Nl8wMDJkVEJNIj5pMzg2LVRCTTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCI+aTM4Ni1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE1LjE1IFdyaXRpbmcgMTYtYml0IENvZGU8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1pMzg2LTE2XzAwMmRiaXQtY29kZS0xMDUyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190MTZfMDAyZGJpdC1jb2RlXzAwMmMtaTM4Ni0xMDUzIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVhbF8wMDJkbW9kZS1jb2RlXzAwMmMtaTM4Ni0xMDU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb2RlMTZnY2NfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwNTUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNvZGUxNl8wMDdkLWRpcmVjdGl2ZV8wMDJjLWkzODYtMTA1NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiY29kZTMyXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb2RlNjRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwNTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNvZGU2NF8wMDdkLWRpcmVjdGl2ZV8wMDJjLXg4Nl8wMDJkNjQtMTA1OSI+PC9hPldoaWxlIDxjb2RlPmFzPC9jb2RlPiBub3JtYWxseSB3cml0ZXMgb25seSAmbGRxdW87cHVyZSZyZHF1bzsgMzItYml0IGkzODYgY29kZQorb3IgNjQtYml0IHg4Ni02NCBjb2RlIGRlcGVuZGluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLAoraXQgYWxzbyBzdXBwb3J0cyB3cml0aW5nIGNvZGUgdG8gcnVuIGluIHJlYWwgbW9kZSBvciBpbiAxNi1iaXQgcHJvdGVjdGVkCittb2RlIGNvZGUgc2VnbWVudHMuICBUbyBkbyB0aGlzLCBwdXQgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jb2RlMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNvZGUxNmdjYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgYmVmb3JlIHRoZSBhc3NlbWJseSBsYW5ndWFnZSBpbnN0cnVjdGlvbnMgdG8KK2JlIHJ1biBpbiAxNi1iaXQgbW9kZS4gIFlvdSBjYW4gc3dpdGNoIDxjb2RlPmFzPC9jb2RlPiB0byB3cml0aW5nCiszMi1iaXQgY29kZSB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jb2RlMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIG9yIDY0LWJpdCBjb2RlIHdpdGggdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jb2RlNjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlLgorCisgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jb2RlMTZnY2M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJvdmlkZXMgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgMTYtYml0Citjb2RlIGZyb20gZ2NjLCBhbmQgZGlmZmVycyBmcm9tICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNvZGUxNjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiB0aGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmV0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmVudGVyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxlYXZlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnB1c2g8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cG9wPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wdXNoYTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3BhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnB1c2hmPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3BmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9ucworZGVmYXVsdCB0byAzMi1iaXQgc2l6ZS4gIFRoaXMgaXMgc28gdGhhdCB0aGUgc3RhY2sgcG9pbnRlciBpcworbWFuaXB1bGF0ZWQgaW4gdGhlIHNhbWUgd2F5IG92ZXIgZnVuY3Rpb24gY2FsbHMsIGFsbG93aW5nIGFjY2VzcyB0bworZnVuY3Rpb24gcGFyYW1ldGVycyBhdCB0aGUgc2FtZSBzdGFjayBvZmZzZXRzIGFzIGluIDMyLWJpdCBtb2RlLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNvZGUxNmdjYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbHNvIGF1dG9tYXRpY2FsbHkgYWRkcyBhZGRyZXNzIHNpemUgcHJlZml4ZXMgd2hlcmUKK25lY2Vzc2FyeSB0byB1c2UgdGhlIDMyLWJpdCBhZGRyZXNzaW5nIG1vZGVzIHRoYXQgZ2NjIGdlbmVyYXRlcy4KKworICAgPHA+VGhlIGNvZGUgd2hpY2ggPGNvZGU+YXM8L2NvZGU+IGdlbmVyYXRlcyBpbiAxNi1iaXQgbW9kZSB3aWxsIG5vdAorbmVjZXNzYXJpbHkgcnVuIG9uIGEgMTYtYml0IHByZS04MDM4NiBwcm9jZXNzb3IuICBUbyB3cml0ZSBjb2RlIHRoYXQKK3J1bnMgb24gc3VjaCBhIHByb2Nlc3NvciwgeW91IG11c3QgcmVmcmFpbiBmcm9tIHVzaW5nIDxlbT5hbnk8L2VtPiAzMi1iaXQKK2NvbnN0cnVjdHMgd2hpY2ggcmVxdWlyZSA8Y29kZT5hczwvY29kZT4gdG8gb3V0cHV0IGFkZHJlc3Mgb3Igb3BlcmFuZAorc2l6ZSBwcmVmaXhlcy4KKworICAgPHA+Tm90ZSB0aGF0IHdyaXRpbmcgMTYtYml0IGNvZGUgaW5zdHJ1Y3Rpb25zIGJ5IGV4cGxpY2l0bHkgc3BlY2lmeWluZyBhCitwcmVmaXggb3IgYW4gaW5zdHJ1Y3Rpb24gbW5lbW9uaWMgc3VmZml4IHdpdGhpbiBhIDMyLWJpdCBjb2RlIHNlY3Rpb24KK2dlbmVyYXRlcyBkaWZmZXJlbnQgbWFjaGluZSBpbnN0cnVjdGlvbnMgdGhhbiB0aG9zZSBnZW5lcmF0ZWQgZm9yIGEKKzE2LWJpdCBjb2RlIHNlZ21lbnQuICBJbiBhIDMyLWJpdCBjb2RlIHNlY3Rpb24sIHRoZSBmb2xsb3dpbmcgY29kZQorZ2VuZXJhdGVzIHRoZSBtYWNoaW5lIG9wY29kZSBieXRlcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY2IDZhIDA0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCB3aGljaCBwdXNoZXMgdGhlCit2YWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb250byB0aGUgc3RhY2ssIGRlY3JlbWVudGluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVlc3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYnkgMi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgcHVzaHcgJDQKKzwvcHJlPgorICAgPHA+VGhlIHNhbWUgY29kZSBpbiBhIDE2LWJpdCBjb2RlIHNlY3Rpb24gd291bGQgZ2VuZXJhdGUgdGhlIG1hY2hpbmUKK29wY29kZSBieXRlcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjZhIDA0PC9zcGFuPjwvc2FtcD4mcnNxdW87IChpLmUuLCB3aXRob3V0IHRoZSBvcGVyYW5kIHNpemUgcHJlZml4KSwgd2hpY2gKK2lzIGNvcnJlY3Qgc2luY2UgdGhlIHByb2Nlc3NvciBkZWZhdWx0IG9wZXJhbmQgc2l6ZSBpcyBhc3N1bWVkIHRvIGJlIDE2CitiaXRzIGluIGEgMTYtYml0IGNvZGUgc2VjdGlvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkQXJjaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkQXJjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjk5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRBcmNoLmh0bWwKQEAgLTAsMCArMSwxMTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtQXJjaCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTM4Ni1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpMzg2XzAwMmQxNmJpdC5odG1sI2kzODZfMDAyZDE2Yml0IiB0aXRsZT0iaTM4Ni0xNmJpdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImkzODZfMDAyZEJ1Z3MuaHRtbCNpMzg2XzAwMmRCdWdzIiB0aXRsZT0iaTM4Ni1CdWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaTM4Ni1BcmNoIj48L2E+Cis8YSBuYW1lPSJpMzg2XzAwMmRBcmNoIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImkzODZfMDAyZEJ1Z3MuaHRtbCNpMzg2XzAwMmRCdWdzIj5pMzg2LUJ1Z3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpMzg2XzAwMmQxNmJpdC5odG1sI2kzODZfMDAyZDE2Yml0Ij5pMzg2LTE2Yml0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTUuMTcgU3BlY2lmeWluZyBDUFUgQXJjaGl0ZWN0dXJlPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXJjaC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwNjAiPjwvYT48YSBuYW1lPSJpbmRleC1pMzg2LWFyY2gtZGlyZWN0aXZlLTEwNjEiPjwvYT48YSBuYW1lPSJpbmRleC1hcmNoLWRpcmVjdGl2ZV8wMDJjLXg4Nl8wMDJkNjQtMTA2MiI+PC9hPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtYXJjaC1kaXJlY3RpdmUtMTA2MyI+PC9hPgorPGNvZGU+YXM8L2NvZGU+IG1heSBiZSB0b2xkIHRvIGFzc2VtYmxlIGZvciBhIHBhcnRpY3VsYXIgQ1BVCisoc3ViLSlhcmNoaXRlY3R1cmUgd2l0aCB0aGUgPGNvZGU+LmFyY2ggPC9jb2RlPjx2YXI+Y3B1X3R5cGU8L3Zhcj4gZGlyZWN0aXZlLiAgVGhpcworZGlyZWN0aXZlIGVuYWJsZXMgYSB3YXJuaW5nIHdoZW4gZ2FzIGRldGVjdHMgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBpcyBub3QKK3N1cHBvcnRlZCBvbiB0aGUgQ1BVIHNwZWNpZmllZC4gIFRoZSBjaG9pY2VzIGZvciA8dmFyPmNwdV90eXBlPC92YXI+IGFyZToKKworICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTgwODY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTE4Njwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pMjg2PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmkzODY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTQ4Njwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pNTg2PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmk2ODY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cGVudGl1bTwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wZW50aXVtcHJvPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBlbnRpdW1paTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wZW50aXVtaWlpPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBlbnRpdW00PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByZXNjb3R0PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vY29uYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3JlPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcmUyPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcmVpNzwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sMW9tPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmsxb208L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+azY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+azZfMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hdGhsb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+azg8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YW1kZmFtMTA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmR2ZXIxPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJkdmVyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZHZlcjM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnR2ZXIxPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJ0dmVyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nZW5lcmljMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2VuZXJpYzY0PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5tbXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3NlMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3NlMzwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3NzZTM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNzZTQuMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3NlNC4yPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zc2U0PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5hdng8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnZteDwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc214PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5lcHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNsZmx1c2g8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lm1vdmJlPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi54c2F2ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ueHNhdmVvcHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmFlczwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ucGNsbXVsPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5mbWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmZzZ3NiYXNlPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5yZHJuZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZjE2Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYXZ4Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYm1pMjwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubHpjbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmludnBjaWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnZtZnVuYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaGxlPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ydG08L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmFkeDwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ucmRzZWVkPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5wcmZjaHc8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LjNkbm93PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi4zZG5vd2E8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNzZTRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zc2U1PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zeXNjYWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5yZHRzY3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnN2bWU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmFibTwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubHdwPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5mbWE0PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi54b3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnBhZGxvY2s8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgPHA+QXBhcnQgZnJvbSB0aGUgd2FybmluZywgdGhlcmUgYXJlIG9ubHkgdHdvIG90aGVyIGVmZmVjdHMgb24KKzxjb2RlPmFzPC9jb2RlPiBvcGVyYXRpb247ICBGaXJzdGx5LCBpZiB5b3Ugc3BlY2lmeSBhIENQVSBvdGhlciB0aGFuCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmk0ODY8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZW4gc2hpZnQgYnkgb25lIGluc3RydWN0aW9ucyBzdWNoIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2FybCAkMSwgJWVheDwvc3Bhbj48L3NhbXA+JnJzcXVvOword2lsbCBhdXRvbWF0aWNhbGx5IHVzZSBhIHR3byBieXRlIG9wY29kZSBzZXF1ZW5jZS4gIFRoZSBsYXJnZXIgdGhyZWUKK2J5dGUgb3Bjb2RlIHNlcXVlbmNlIGlzIHVzZWQgb24gdGhlIDQ4NiAoYW5kIHdoZW4gbm8gYXJjaGl0ZWN0dXJlIGlzCitzcGVjaWZpZWQpIGJlY2F1c2UgaXQgZXhlY3V0ZXMgZmFzdGVyIG9uIHRoZSA0ODYuICBOb3RlIHRoYXQgeW91IGNhbgorZXhwbGljaXRseSByZXF1ZXN0IHRoZSB0d28gYnl0ZSBvcGNvZGUgYnkgd3JpdGluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNhcmwgJWVheDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitTZWNvbmRseSwgaWYgeW91IHNwZWNpZnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pODA4Njwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pMTg2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmkyODY8L3NwYW4+PC9zYW1wPiZyc3F1bzssCis8ZW0+YW5kPC9lbT4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uY29kZTE2PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNvZGUxNmdjYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aGVuIGJ5dGUgb2Zmc2V0Citjb25kaXRpb25hbCBqdW1wcyB3aWxsIGJlIHByb21vdGVkIHdoZW4gbmVjZXNzYXJ5IHRvIGEgdHdvIGluc3RydWN0aW9uCitzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIGEgY29uZGl0aW9uYWwganVtcCBvZiB0aGUgb3Bwb3NpdGUgc2Vuc2UgYXJvdW5kCithbiB1bmNvbmRpdGlvbmFsIGp1bXAgdG8gdGhlIHRhcmdldC4KKworICAgPHA+Rm9sbG93aW5nIHRoZSBDUFUgYXJjaGl0ZWN0dXJlIChidXQgbm90IGEgc3ViLWFyY2hpdGVjdHVyZSwgd2hpY2ggYXJlIHRob3NlCitzdGFydGluZyB3aXRoIGEgZG90KSwgeW91IG1heSBzcGVjaWZ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+anVtcHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub2p1bXBzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvCitjb250cm9sIGF1dG9tYXRpYyBwcm9tb3Rpb24gb2YgY29uZGl0aW9uYWwganVtcHMuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+anVtcHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlCitkZWZhdWx0LCBhbmQgZW5hYmxlcyBqdW1wIHByb21vdGlvbjsgIEFsbCBleHRlcm5hbCBqdW1wcyB3aWxsIGJlIG9mIHRoZSBsb25nCit2YXJpZXR5LCBhbmQgZmlsZS1sb2NhbCBqdW1wcyB3aWxsIGJlIHByb21vdGVkIGFzIG5lY2Vzc2FyeS4gCisoc2VlIDxhIGhyZWY9ImkzODZfMDAyZEp1bXBzLmh0bWwjaTM4Nl8wMDJkSnVtcHMiPmkzODYtSnVtcHM8L2E+KSAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub2p1bXBzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGxlYXZlcyBleHRlcm5hbCBjb25kaXRpb25hbCBqdW1wcyBhcworYnl0ZSBvZmZzZXQganVtcHMsIGFuZCB3YXJucyBhYm91dCBmaWxlLWxvY2FsIGNvbmRpdGlvbmFsIGp1bXBzIHRoYXQKKzxjb2RlPmFzPC9jb2RlPiBwcm9tb3Rlcy4gCitVbmNvbmRpdGlvbmFsIGp1bXBzIGFyZSB0cmVhdGVkIGFzIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmp1bXBzPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5Gb3IgZXhhbXBsZQorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIC5hcmNoIGk4MDg2LG5vanVtcHMKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkQk1JLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRCTUkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmY0YTIzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkQk1JLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTM4Ni1CTUkgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkTFdQLmh0bWwjaTM4Nl8wMDJkTFdQIiB0aXRsZT0iaTM4Ni1MV1AiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRUQk0uaHRtbCNpMzg2XzAwMmRUQk0iIHRpdGxlPSJpMzg2LVRCTSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtQk1JIj48L2E+Cis8YSBuYW1lPSJpMzg2XzAwMmRCTUkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTM4Nl8wMDJkVEJNLmh0bWwjaTM4Nl8wMDJkVEJNIj5pMzg2LVRCTTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImkzODZfMDAyZExXUC5odG1sI2kzODZfMDAyZExXUCI+aTM4Ni1MV1A8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNS4xMyBCaXQgTWFuaXB1bGF0aW9uIEluc3RydWN0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUJNSV8wMDJjLWkzODYtMTA0OCI+PC9hPjxhIG5hbWU9ImluZGV4LUJNSV8wMDJjLXg4Nl8wMDJkNjQtMTA0OSI+PC9hPgorPGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIHRoZSBCaXQgTWFuaXB1bGF0aW9uIChCTUkpIGluc3RydWN0aW9uIHNldC4KKworICAgPHA+Qk1JIGluc3RydWN0aW9ucyBwcm92aWRlIHNldmVyYWwgaW5zdHJ1Y3Rpb25zIGltcGxlbWVudGluZyBpbmRpdmlkdWFsCitiaXQgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbnMgc3VjaCBhcyBpc29sYXRpb24sIG1hc2tpbmcsIHNldHRpbmcsIG9yCityZXNldHRpbmcuCisKKzwhLS0gTmVlZCB0byBhZGQgYSBzcGVjaWZpY2F0aW9uIGNpdGF0aW9uIGhlcmUgd2hlbiBhdmFpbGFibGUuIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkQnVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkQnVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MjI2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRCdWdzLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTM4Ni1CdWdzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpMzg2LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImkzODZfMDAyZEFyY2guaHRtbCNpMzg2XzAwMmRBcmNoIiB0aXRsZT0iaTM4Ni1BcmNoIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaTM4Nl8wMDJkTm90ZXMuaHRtbCNpMzg2XzAwMmROb3RlcyIgdGl0bGU9ImkzODYtTm90ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpMzg2LUJ1Z3MiPjwvYT4KKzxhIG5hbWU9ImkzODZfMDAyZEJ1Z3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTM4Nl8wMDJkTm90ZXMuaHRtbCNpMzg2XzAwMmROb3RlcyI+aTM4Ni1Ob3RlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImkzODZfMDAyZEFyY2guaHRtbCNpMzg2XzAwMmRBcmNoIj5pMzg2LUFyY2g8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNS4xNiBBVCZhbXA7VCBTeW50YXggYnVnczwvaDQ+CisKKzxwPlRoZSBVbml4V2FyZSBhc3NlbWJsZXIsIGFuZCBwcm9iYWJseSBvdGhlciBBVCZhbXA7VCBkZXJpdmVkIGl4ODYgVW5peAorYXNzZW1ibGVycywgZ2VuZXJhdGUgZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zIHdpdGggcmV2ZXJzZWQgc291cmNlCithbmQgZGVzdGluYXRpb24gcmVnaXN0ZXJzIGluIGNlcnRhaW4gY2FzZXMuICBVbmZvcnR1bmF0ZWx5LCBnY2MgYW5kCitwb3NzaWJseSBtYW55IG90aGVyIHByb2dyYW1zIHVzZSB0aGlzIHJldmVyc2VkIHN5bnRheCwgc28gd2UncmUgc3R1Y2sKK3dpdGggaXQuCisKKyAgIDxwPkZvciBleGFtcGxlCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIGZzdWIgJXN0LCVzdCgzKQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPnJlc3VsdHMgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3QoMyk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYmVpbmcgdXBkYXRlZCB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzdCAtICVzdCgzKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyByYXRoZXIKK3RoYW4gdGhlIGV4cGVjdGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXN0KDMpIC0gJXN0PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBoYXBwZW5zIHdpdGggYWxsIHRoZQorbm9uLWNvbW11dGF0aXZlIGFyaXRobWV0aWMgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyB3aXRoIHR3byByZWdpc3Rlcgorb3BlcmFuZHMgd2hlcmUgdGhlIHNvdXJjZSByZWdpc3RlciBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgdGhlIGRlc3RpbmF0aW9uCityZWdpc3RlciBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzdChpKTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkQ2hhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZENoYXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiMTEyNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZENoYXJzLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTM4Ni1DaGFycyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTM4Nl8wMDJkU3ludGF4Lmh0bWwjaTM4Nl8wMDJkU3ludGF4IiB0aXRsZT0iaTM4Ni1TeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyIgdGl0bGU9ImkzODYtVmFyaWF0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtQ2hhcnMiPjwvYT4KKzxhIG5hbWU9ImkzODZfMDAyZENoYXJzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sI2kzODZfMDAyZFZhcmlhdGlvbnMiPmkzODYtVmFyaWF0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImkzODZfMDAyZFN5bnRheC5odG1sI2kzODZfMDAyZFN5bnRheCI+aTM4Ni1TeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjE1LjMuMiBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtaTM4Ni05NzciPjwvYT48YSBuYW1lPSJpbmRleC1pMzg2LWxpbmUtY29tbWVudC1jaGFyYWN0ZXItOTc4Ij48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcmluZyBhbnl3aGVyZSBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZQorc3RhcnQgb2YgYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoYXQgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSB0aGVuIHRoZSB3aG9sZQorbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjYW4gYWxzbyBiZSBhCitsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPklmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRpdmlkZTwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24gaGFzIG5vdCBiZWVuIHNwZWNpZmllZAordGhlbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBhcHBlYXJpbmcgYW55d2hlcmUgb24gYSBsaW5lIGFsc28KK2ludHJvZHVjZXMgYSBsaW5lIGNvbW1lbnQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtaTM4Ni05NzkiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnQtc2VwYXJhdG9yXzAwMmMtaTM4Ni05ODAiPjwvYT48YSBuYW1lPSJpbmRleC1pMzg2LWxpbmUtc2VwYXJhdG9yLTk4MSI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUKK2xpbmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1ZjZiMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IkVTQS8zOTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaTg2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTg2MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTg2MC1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpMzg2LURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iaTM4Nl8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Imk4NjBfMDAyZERlcGVuZGVudC5odG1sI2k4NjBfMDAyZERlcGVuZGVudCI+aTg2MC1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjRVNBXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+RVNBLzM5MC1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMTUgODAzODYgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtaTM4Ni1zdXBwb3J0LTkwMCI+PC9hPjxhIG5hbWU9ImluZGV4LWk4MDM4Ni1zdXBwb3J0LTkwMSI+PC9hPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtc3VwcG9ydC05MDIiPjwvYT4KK1RoZSBpMzg2IHZlcnNpb24gPGNvZGU+YXM8L2NvZGU+IHN1cHBvcnRzIGJvdGggdGhlIG9yaWdpbmFsIEludGVsIDM4NgorYXJjaGl0ZWN0dXJlIGluIGJvdGggMTYgYW5kIDMyLWJpdCBtb2RlIGFzIHdlbGwgYXMgQU1EIHg4Ni02NCBhcmNoaXRlY3R1cmUKK2V4dGVuZGluZyB0aGUgSW50ZWwgYXJjaGl0ZWN0dXJlIHRvIDY0LWJpdHMuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJpMzg2XzAwMmRPcHRpb25zLmh0bWwjaTM4Nl8wMDJkT3B0aW9ucyI+aTM4Ni1PcHRpb25zPC9hPjogICAgICAgICAgICAgICAgIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9ImkzODZfMDAyZERpcmVjdGl2ZXMuaHRtbCNpMzg2XzAwMmREaXJlY3RpdmVzIj5pMzg2LURpcmVjdGl2ZXM8L2E+OiAgICAgICAgICAgICAgWDg2IHNwZWNpZmljIGRpcmVjdGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9ImkzODZfMDAyZFN5bnRheC5odG1sI2kzODZfMDAyZFN5bnRheCI+aTM4Ni1TeW50YXg8L2E+OiAgICAgICAgICAgICAgICAgIFN5bnRhY3RpY2FsIGNvbnNpZGVyYXRpb25zCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpMzg2XzAwMmRNbmVtb25pY3MiPmkzODYtTW5lbW9uaWNzPC9hPjogICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBOYW1pbmcKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9ImkzODZfMDAyZFJlZ3MuaHRtbCNpMzg2XzAwMmRSZWdzIj5pMzg2LVJlZ3M8L2E+OiAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgTmFtaW5nCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2kzODZfMDAyZFByZWZpeGVzIj5pMzg2LVByZWZpeGVzPC9hPjogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gUHJlZml4ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2kzODZfMDAyZE1lbW9yeSI+aTM4Ni1NZW1vcnk8L2E+OiAgICAgICAgICAgICAgICAgIE1lbW9yeSBSZWZlcmVuY2VzCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJpMzg2XzAwMmRKdW1wcy5odG1sI2kzODZfMDAyZEp1bXBzIj5pMzg2LUp1bXBzPC9hPjogICAgICAgICAgICAgICAgICAgSGFuZGxpbmcgb2YgSnVtcCBJbnN0cnVjdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaTM4Nl8wMDJkRmxvYXQiPmkzODYtRmxvYXQ8L2E+OiAgICAgICAgICAgICAgICAgICBGbG9hdGluZyBQb2ludAorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFNJTUQuaHRtbCNpMzg2XzAwMmRTSU1EIj5pMzg2LVNJTUQ8L2E+OiAgICAgICAgICAgICAgICAgICAgSW50ZWwncyBNTVggYW5kIEFNRCdzIDNETm93ISBTSU1EIE9wZXJhdGlvbnMKKzxsaT48YSBocmVmPSJpMzg2XzAwMmRMV1AuaHRtbCNpMzg2XzAwMmRMV1AiPmkzODYtTFdQPC9hPjogICAgICAgICAgICAgICAgICAgICBBTUQncyBMaWdodHdlaWdodCBQcm9maWxpbmcgSW5zdHJ1Y3Rpb25zCis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkQk1JLmh0bWwjaTM4Nl8wMDJkQk1JIj5pMzg2LUJNSTwvYT46ICAgICAgICAgICAgICAgICAgICAgQml0IE1hbmlwdWxhdGlvbiBJbnN0cnVjdGlvbgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFRCTS5odG1sI2kzODZfMDAyZFRCTSI+aTM4Ni1UQk08L2E+OiAgICAgICAgICAgICAgICAgICAgIEFNRCdzIFRyYWlsaW5nIEJpdCBNYW5pcHVsYXRpb24gSW5zdHJ1Y3Rpb25zCis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkMTZiaXQuaHRtbCNpMzg2XzAwMmQxNmJpdCI+aTM4Ni0xNmJpdDwvYT46ICAgICAgICAgICAgICAgICAgIFdyaXRpbmcgMTYtYml0IENvZGUKKzxsaT48YSBocmVmPSJpMzg2XzAwMmRBcmNoLmh0bWwjaTM4Nl8wMDJkQXJjaCI+aTM4Ni1BcmNoPC9hPjogICAgICAgICAgICAgICAgICAgIFNwZWNpZnlpbmcgYW4geDg2IENQVSBhcmNoaXRlY3R1cmUKKzxsaT48YSBocmVmPSJpMzg2XzAwMmRCdWdzLmh0bWwjaTM4Nl8wMDJkQnVncyI+aTM4Ni1CdWdzPC9hPjogICAgICAgICAgICAgICAgICAgIEFUJmFtcDtUIFN5bnRheCBidWdzCis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkTm90ZXMuaHRtbCNpMzg2XzAwMmROb3RlcyI+aTM4Ni1Ob3RlczwvYT46ICAgICAgICAgICAgICAgICAgIE5vdGVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmREaXJlY3RpdmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmREaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0MGY5NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZERpcmVjdGl2ZXMuaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pMzg2LURpcmVjdGl2ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiIHRpdGxlPSJpMzg2LU9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRTeW50YXguaHRtbCNpMzg2XzAwMmRTeW50YXgiIHRpdGxlPSJpMzg2LVN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtRGlyZWN0aXZlcyI+PC9hPgorPGEgbmFtZT0iaTM4Nl8wMDJkRGlyZWN0aXZlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpMzg2XzAwMmRTeW50YXguaHRtbCNpMzg2XzAwMmRTeW50YXgiPmkzODYtU3ludGF4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPmkzODYtT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCI+aTM4Ni1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE1LjIgeDg2IHNwZWNpZmljIERpcmVjdGl2ZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRpcmVjdGl2ZXNfMDAyYy14ODYtOTMwIj48L2E+PGEgbmFtZT0iaW5kZXgteDg2LW1hY2hpbmUtZGlyZWN0aXZlcy05MzEiPjwvYT4KKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxjb21tXzAwN2QtZGlyZWN0aXZlXzAwMmMtQ09GRi05MzIiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+Lmxjb21tIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmxlbmd0aDwvdmFyPjxjb2RlPlssIDwvY29kZT48dmFyPmFsaWdubWVudDwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPlJlc2VydmUgPHZhcj5sZW5ndGg8L3Zhcj4gKGFuIGFic29sdXRlIGV4cHJlc3Npb24pIGJ5dGVzIGZvciBhIGxvY2FsIGNvbW1vbgorZGVub3RlZCBieSA8dmFyPnN5bWJvbDwvdmFyPi4gIFRoZSBzZWN0aW9uIGFuZCB2YWx1ZSBvZiA8dmFyPnN5bWJvbDwvdmFyPiBhcmUKK3Rob3NlIG9mIHRoZSBuZXcgbG9jYWwgY29tbW9uLiAgVGhlIGFkZHJlc3NlcyBhcmUgYWxsb2NhdGVkIGluIHRoZSBic3MKK3NlY3Rpb24sIHNvIHRoYXQgYXQgcnVuLXRpbWUgdGhlIGJ5dGVzIHN0YXJ0IG9mZiB6ZXJvZWQuICBTaW5jZQorPHZhcj5zeW1ib2w8L3Zhcj4gaXMgbm90IGRlY2xhcmVkIGdsb2JhbCwgaXQgaXMgbm9ybWFsbHkgbm90IHZpc2libGUgdG8KKzxjb2RlPmxkPC9jb2RlPi4gIFRoZSBvcHRpb25hbCB0aGlyZCBwYXJhbWV0ZXIsIDx2YXI+YWxpZ25tZW50PC92YXI+LAorc3BlY2lmaWVzIHRoZSBkZXNpcmVkIGFsaWdubWVudCBvZiB0aGUgc3ltYm9sIGluIHRoZSBic3Mgc2VjdGlvbi4KKworICAgICA8cD5UaGlzIGRpcmVjdGl2ZSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgQ09GRiBiYXNlZCB4ODYgdGFyZ2V0cy4KKworICAgICA8IS0tIEZJWE1FOiBEb2N1bWVudCBvdGhlciB4ODYgc3BlY2lmaWMgZGlyZWN0aXZlcyA/ICBFZzogLmNvZGUxNmdjYywgLS0+CisgICAgIDwhLS0gLmxhcmdlY29tbSAtLT4KKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZEZsb2F0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRGbG9hdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDdiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRGbG9hdC5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtRmxvYXQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkSnVtcHMuaHRtbCNpMzg2XzAwMmRKdW1wcyIgdGl0bGU9ImkzODYtSnVtcHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRTSU1ELmh0bWwjaTM4Nl8wMDJkU0lNRCIgdGl0bGU9ImkzODYtU0lNRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtRmxvYXQiPjwvYT4KKzxhIG5hbWU9ImkzODZfMDAyZEZsb2F0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImkzODZfMDAyZFNJTUQuaHRtbCNpMzg2XzAwMmRTSU1EIj5pMzg2LVNJTUQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpMzg2XzAwMmRKdW1wcy5odG1sI2kzODZfMDAyZEp1bXBzIj5pMzg2LUp1bXBzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTUuMTAgRmxvYXRpbmcgUG9pbnQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1pMzg2LWZsb2F0aW5nLXBvaW50LTEwMjAiPjwvYT48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLWkzODYtMTAyMSI+PC9hPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtZmxvYXRpbmctcG9pbnQtMTAyMiI+PC9hPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMteDg2XzAwMmQ2NC0xMDIzIj48L2E+QWxsIDgwMzg3IGZsb2F0aW5nIHBvaW50IHR5cGVzIGV4Y2VwdCBwYWNrZWQgQkNEIGFyZSBzdXBwb3J0ZWQuIAorKEJDRCBzdXBwb3J0IG1heSBiZSBhZGRlZCB3aXRob3V0IG11Y2ggZGlmZmljdWx0eSkuICBUaGVzZSBkYXRhCit0eXBlcyBhcmUgMTYtLCAzMi0sIGFuZCA2NC0gYml0IGludGVnZXJzLCBhbmQgc2luZ2xlICgzMi1iaXQpLAorZG91YmxlICg2NC1iaXQpLCBhbmQgZXh0ZW5kZWQgKDgwLWJpdCkgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50LiAKK0VhY2ggc3VwcG9ydGVkIHR5cGUgaGFzIGFuIGluc3RydWN0aW9uIG1uZW1vbmljIHN1ZmZpeCBhbmQgYSBjb25zdHJ1Y3RvcgorYXNzb2NpYXRlZCB3aXRoIGl0LiAgSW5zdHJ1Y3Rpb24gbW5lbW9uaWMgc3VmZml4ZXMgc3BlY2lmeSB0aGUgb3BlcmFuZCdzCitkYXRhIHR5cGUuICBDb25zdHJ1Y3RvcnMgYnVpbGQgdGhlc2UgZGF0YSB0eXBlcyBpbnRvIG1lbW9yeS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbG9hdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLWkzODYtMTAyNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic2luZ2xlXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jkb3VibGVfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwMjYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRmbG9hdF8wMDdkLWRpcmVjdGl2ZV8wMDJjLWkzODYtMTAyNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy14ODZfMDAyZDY0LTEwMjgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNpbmdsZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLXg4Nl8wMDJkNjQtMTAyOSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZG91YmxlXzAwN2QtZGlyZWN0aXZlXzAwMmMteDg2XzAwMmQ2NC0xMDMwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0ZmxvYXRfMDA3ZC1kaXJlY3RpdmVfMDAyYy14ODZfMDAyZDY0LTEwMzEiPjwvYT4KKyAgICAgPHVsPgorPGxpPkZsb2F0aW5nIHBvaW50IGNvbnN0cnVjdG9ycyBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZmxvYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2luZ2xlPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZG91YmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGZsb2F0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciAzMi0sIDY0LSwgYW5kIDgwLWJpdCBmb3JtYXRzLiAKK1RoZXNlIGNvcnJlc3BvbmQgdG8gaW5zdHJ1Y3Rpb24gbW5lbW9uaWMgc3VmZml4ZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmw8L3NwYW4+PC9zYW1wPiZyc3F1bzssCithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3RhbmRzIGZvciA4MC1iaXQgKHRlbiBieXRlKSByZWFsLiAgVGhlIDgwMzg3Citvbmx5IHN1cHBvcnRzIHRoaXMgZm9ybWF0IHZpYSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mbGR0PC9zcGFuPjwvc2FtcD4mcnNxdW87IChsb2FkIDgwLWJpdCByZWFsIHRvIHN0YWNrCit0b3ApIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZzdHB0PC9zcGFuPjwvc2FtcD4mcnNxdW87IChzdG9yZSA4MC1iaXQgcmVhbCBhbmQgcG9wIHN0YWNrKSBpbnN0cnVjdGlvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3b3JkXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDMyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nXzAwN2QtZGlyZWN0aXZlXzAwMmMtaTM4Ni0xMDMzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpbnRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwMzQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnF1YWRfMDA3ZC1kaXJlY3RpdmVfMDAyYy1pMzg2LTEwMzUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndvcmRfMDA3ZC1kaXJlY3RpdmVfMDAyYy14ODZfMDAyZDY0LTEwMzYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdfMDA3ZC1kaXJlY3RpdmVfMDAyYy14ODZfMDAyZDY0LTEwMzciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmludF8wMDdkLWRpcmVjdGl2ZV8wMDJjLXg4Nl8wMDJkNjQtMTAzOCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicXVhZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLXg4Nl8wMDJkNjQtMTAzOSI+PC9hPjxsaT5JbnRlZ2VyIGNvbnN0cnVjdG9ycyBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ud29yZDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubG9uZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5pbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ucXVhZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgdGhlIDE2LSwgMzItLCBhbmQgNjQtYml0IGludGVnZXIgZm9ybWF0cy4gIFRoZQorY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBtbmVtb25pYyBzdWZmaXhlcyBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zPC9zcGFuPjwvc2FtcD4mcnNxdW87IChzaW5nbGUpLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sPC9zcGFuPjwvc2FtcD4mcnNxdW87IChsb25nKSwgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAocXVhZCkuICBBcyB3aXRoIHRoZSA4MC1iaXQgcmVhbCBmb3JtYXQsCit0aGUgNjQtYml0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3JtYXQgaXMgb25seSBwcmVzZW50IGluIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZpbGRxPC9zcGFuPjwvc2FtcD4mcnNxdW87IChsb2FkCitxdWFkIGludGVnZXIgdG8gc3RhY2sgdG9wKSBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5maXN0cHE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHN0b3JlIHF1YWQgaW50ZWdlciBhbmQgcG9wCitzdGFjaykgaW5zdHJ1Y3Rpb25zLiAKKzwvdWw+CisKKyAgIDxwPlJlZ2lzdGVyIHRvIHJlZ2lzdGVyIG9wZXJhdGlvbnMgc2hvdWxkIG5vdCB1c2UgaW5zdHJ1Y3Rpb24gbW5lbW9uaWMgc3VmZml4ZXMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mc3RsICVzdCwgJXN0KDEpPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgZ2l2ZSBhIHdhcm5pbmcsIGFuZCBiZSBhc3NlbWJsZWQgYXMgaWYgeW91Cit3cm90ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZzdCAlc3QsICVzdCgxKTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgc2luY2UgYWxsIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyIG9wZXJhdGlvbnMKK3VzZSA4MC1iaXQgZmxvYXRpbmcgcG9pbnQgb3BlcmFuZHMuIChDb250cmFzdCB0aGlzIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mc3RsICVzdCwgbWVtPC9zcGFuPjwvc2FtcD4mcnNxdW87LAord2hpY2ggY29udmVydHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZnJvbSA4MC1iaXQgdG8gNjQtYml0IGZsb2F0aW5nIHBvaW50IGZvcm1hdCwKK3RoZW4gc3RvcmVzIHRoZSByZXN1bHQgaW4gdGhlIDQgYnl0ZSBsb2NhdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1lbTwvc3Bhbj48L3NhbXA+JnJzcXVvOykKKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkSnVtcHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZEp1bXBzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlNDE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZEp1bXBzLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTM4Ni1KdW1wcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTM4Ni1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpMzg2XzAwMmRNZW1vcnkuaHRtbCNpMzg2XzAwMmRNZW1vcnkiIHRpdGxlPSJpMzg2LU1lbW9yeSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImkzODZfMDAyZEZsb2F0Lmh0bWwjaTM4Nl8wMDJkRmxvYXQiIHRpdGxlPSJpMzg2LUZsb2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaTM4Ni1KdW1wcyI+PC9hPgorPGEgbmFtZT0iaTM4Nl8wMDJkSnVtcHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTM4Nl8wMDJkRmxvYXQuaHRtbCNpMzg2XzAwMmRGbG9hdCI+aTM4Ni1GbG9hdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2kzODZfMDAyZE1lbW9yeSI+aTM4Ni1NZW1vcnk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNS45IEhhbmRsaW5nIG9mIEp1bXAgSW5zdHJ1Y3Rpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtanVtcC1vcHRpbWl6YXRpb25fMDAyYy1pMzg2LTEwMTYiPjwvYT48YSBuYW1lPSJpbmRleC1pMzg2LWp1bXAtb3B0aW1pemF0aW9uLTEwMTciPjwvYT48YSBuYW1lPSJpbmRleC1qdW1wLW9wdGltaXphdGlvbl8wMDJjLXg4Nl8wMDJkNjQtMTAxOCI+PC9hPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtanVtcC1vcHRpbWl6YXRpb24tMTAxOSI+PC9hPkp1bXAgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgb3B0aW1pemVkIHRvIHVzZSB0aGUgc21hbGxlc3QgcG9zc2libGUKK2Rpc3BsYWNlbWVudHMuICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZyBieXRlICg4LWJpdCkgZGlzcGxhY2VtZW50CitqdW1wcyB3aGVuZXZlciB0aGUgdGFyZ2V0IGlzIHN1ZmZpY2llbnRseSBjbG9zZS4gIElmIGEgYnl0ZSBkaXNwbGFjZW1lbnQKK2lzIGluc3VmZmljaWVudCBhIGxvbmcgZGlzcGxhY2VtZW50IGlzIHVzZWQuICBXZSBkbyBub3Qgc3VwcG9ydAord29yZCAoMTYtYml0KSBkaXNwbGFjZW1lbnQganVtcHMgaW4gMzItYml0IG1vZGUgKGkuZS4gcHJlZml4aW5nIHRoZSBqdW1wCitpbnN0cnVjdGlvbiB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRhdGExNjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbiBwcmVmaXgpLCBzaW5jZSB0aGUgODAzODYKK2luc2lzdHMgdXBvbiBtYXNraW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVpcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byAxNiBiaXRzIGFmdGVyIHRoZSB3b3JkIGRpc3BsYWNlbWVudAoraXMgYWRkZWQuIChTZWUgYWxzbyBzZWUgPGEgaHJlZj0iaTM4Nl8wMDJkQXJjaC5odG1sI2kzODZfMDAyZEFyY2giPmkzODYtQXJjaDwvYT4pCisKKyAgIDxwPk5vdGUgdGhhdCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qY3h6PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmplY3h6PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvb3A8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9vcHo8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvb3BlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvb3Buejwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb29wbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb25zIG9ubHkgY29tZSBpbiBieXRlCitkaXNwbGFjZW1lbnRzLCBzbyB0aGF0IGlmIHlvdSB1c2UgdGhlc2UgaW5zdHJ1Y3Rpb25zICg8Y29kZT5nY2M8L2NvZGU+IGRvZXMKK25vdCB1c2UgdGhlbSkgeW91IG1heSBnZXQgYW4gZXJyb3IgbWVzc2FnZSAoYW5kIGluY29ycmVjdCBjb2RlKS4gIFRoZSBBVCZhbXA7VAorODAzODYgYXNzZW1ibGVyIHRyaWVzIHRvIGdldCBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IGV4cGFuZGluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmpjeHogZm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87Cit0bworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgamN4eiBjeF96ZXJvCisgICAgICAgICAgICAgIGptcCBjeF9ub256ZXJvCisgICAgIGN4X3plcm86IGptcCBmb28KKyAgICAgY3hfbm9uemVybzoKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkTFdQLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRMV1AuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQ1ODk5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkTFdQLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTM4Ni1MV1AgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkU0lNRC5odG1sI2kzODZfMDAyZFNJTUQiIHRpdGxlPSJpMzg2LVNJTUQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRCTUkuaHRtbCNpMzg2XzAwMmRCTUkiIHRpdGxlPSJpMzg2LUJNSSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtTFdQIj48L2E+Cis8YSBuYW1lPSJpMzg2XzAwMmRMV1AiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTM4Nl8wMDJkQk1JLmh0bWwjaTM4Nl8wMDJkQk1JIj5pMzg2LUJNSTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImkzODZfMDAyZFNJTUQuaHRtbCNpMzg2XzAwMmRTSU1EIj5pMzg2LVNJTUQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNS4xMiBBTUQncyBMaWdodHdlaWdodCBQcm9maWxpbmcgSW5zdHJ1Y3Rpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtTFdQXzAwMmMtaTM4Ni0xMDQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtTFdQXzAwMmMteDg2XzAwMmQ2NC0xMDQ3Ij48L2E+Cis8Y29kZT5hczwvY29kZT4gc3VwcG9ydHMgQU1EJ3MgTGlnaHR3ZWlnaHQgUHJvZmlsaW5nIChMV1ApCitpbnN0cnVjdGlvbiBzZXQsIGF2YWlsYWJsZSBvbiBBTUQncyBGYW1pbHkgMTVoIChPcm9jaGkpIHByb2Nlc3NvcnMuCisKKyAgIDxwPkxXUCBlbmFibGVzIGFwcGxpY2F0aW9ucyB0byBjb2xsZWN0IGFuZCBtYW5hZ2UgcGVyZm9ybWFuY2UgZGF0YSwgYW5kCityZWFjdCB0byBwZXJmb3JtYW5jZSBldmVudHMuICBUaGUgY29sbGVjdGlvbiBvZiBwZXJmb3JtYW5jZSBkYXRhCityZXF1aXJlcyBubyBjb250ZXh0IHN3aXRjaGVzLiAgTFdQIHJ1bnMgaW4gdGhlIGNvbnRleHQgb2YgYSB0aHJlYWQgYW5kCitzbyBzZXZlcmFsIGNvdW50ZXJzIGNhbiBiZSB1c2VkIGluZGVwZW5kZW50bHkgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuIAorTFdQIGNhbiBiZSB1c2VkIGluIGJvdGggNjQtYml0IGFuZCBsZWdhY3kgMzItYml0IG1vZGVzLgorCisgICA8cD5Gb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIExXUCBpbnN0cnVjdGlvbiBzZXQsIHNlZSB0aGUKKzxjaXRlPkFNRCBMaWdodHdlaWdodCBQcm9maWxpbmcgU3BlY2lmaWNhdGlvbjwvY2l0ZT4gYXZhaWxhYmxlIGF0Cis8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmFtZC5jb20vY3B1L0xXUCI+TGlnaHR3ZWlnaHQgUHJvZmlsaW5nIFNwZWNpZmljYXRpb248L2E+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRNZW1vcnkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZE1lbW9yeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwM2FlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRNZW1vcnkuaHRtbApAQCAtMCwwICsxLDExOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTM4Ni1NZW1vcnkgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkUHJlZml4ZXMuaHRtbCNpMzg2XzAwMmRQcmVmaXhlcyIgdGl0bGU9ImkzODYtUHJlZml4ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRKdW1wcy5odG1sI2kzODZfMDAyZEp1bXBzIiB0aXRsZT0iaTM4Ni1KdW1wcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtTWVtb3J5Ij48L2E+Cis8YSBuYW1lPSJpMzg2XzAwMmRNZW1vcnkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTM4Nl8wMDJkSnVtcHMuaHRtbCNpMzg2XzAwMmRKdW1wcyI+aTM4Ni1KdW1wczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImkzODZfMDAyZFByZWZpeGVzLmh0bWwjaTM4Nl8wMDJkUHJlZml4ZXMiPmkzODYtUHJlZml4ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNS44IE1lbW9yeSBSZWZlcmVuY2VzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtaTM4Ni1tZW1vcnktcmVmZXJlbmNlcy0xMDEyIj48L2E+PGEgbmFtZT0iaW5kZXgtbWVtb3J5LXJlZmVyZW5jZXNfMDAyYy1pMzg2LTEwMTMiPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LW1lbW9yeS1yZWZlcmVuY2VzLTEwMTQiPjwvYT48YSBuYW1lPSJpbmRleC1tZW1vcnktcmVmZXJlbmNlc18wMDJjLXg4Nl8wMDJkNjQtMTAxNSI+PC9hPkFuIEludGVsIHN5bnRheCBpbmRpcmVjdCBtZW1vcnkgcmVmZXJlbmNlIG9mIHRoZSBmb3JtCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8dmFyPnNlY3Rpb248L3Zhcj46Wzx2YXI+YmFzZTwvdmFyPiArIDx2YXI+aW5kZXg8L3Zhcj4qPHZhcj5zY2FsZTwvdmFyPiArIDx2YXI+ZGlzcDwvdmFyPl0KKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5pcyB0cmFuc2xhdGVkIGludG8gdGhlIEFUJmFtcDtUIHN5bnRheAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPHZhcj5zZWN0aW9uPC92YXI+Ojx2YXI+ZGlzcDwvdmFyPig8dmFyPmJhc2U8L3Zhcj4sIDx2YXI+aW5kZXg8L3Zhcj4sIDx2YXI+c2NhbGU8L3Zhcj4pCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+d2hlcmUgPHZhcj5iYXNlPC92YXI+IGFuZCA8dmFyPmluZGV4PC92YXI+IGFyZSB0aGUgb3B0aW9uYWwgMzItYml0IGJhc2UgYW5kCitpbmRleCByZWdpc3RlcnMsIDx2YXI+ZGlzcDwvdmFyPiBpcyB0aGUgb3B0aW9uYWwgZGlzcGxhY2VtZW50LCBhbmQKKzx2YXI+c2NhbGU8L3Zhcj4sIHRha2luZyB0aGUgdmFsdWVzIDEsIDIsIDQsIGFuZCA4LCBtdWx0aXBsaWVzIDx2YXI+aW5kZXg8L3Zhcj4KK3RvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgb3BlcmFuZC4gIElmIG5vIDx2YXI+c2NhbGU8L3Zhcj4gaXMKK3NwZWNpZmllZCwgPHZhcj5zY2FsZTwvdmFyPiBpcyB0YWtlbiB0byBiZSAxLiAgPHZhcj5zZWN0aW9uPC92YXI+IHNwZWNpZmllcyB0aGUKK29wdGlvbmFsIHNlY3Rpb24gcmVnaXN0ZXIgZm9yIHRoZSBtZW1vcnkgb3BlcmFuZCwgYW5kIG1heSBvdmVycmlkZSB0aGUKK2RlZmF1bHQgc2VjdGlvbiByZWdpc3RlciAoc2VlIGEgODAzODYgbWFudWFsIGZvciBzZWN0aW9uIHJlZ2lzdGVyCitkZWZhdWx0cykuIE5vdGUgdGhhdCBzZWN0aW9uIG92ZXJyaWRlcyBpbiBBVCZhbXA7VCBzeW50YXggPGVtPm11c3Q8L2VtPgorYmUgcHJlY2VkZWQgYnkgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiU8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJZiB5b3Ugc3BlY2lmeSBhIHNlY3Rpb24gb3ZlcnJpZGUgd2hpY2gKK2NvaW5jaWRlcyB3aXRoIHRoZSBkZWZhdWx0IHNlY3Rpb24gcmVnaXN0ZXIsIDxjb2RlPmFzPC9jb2RlPiBkb2VzIDxlbT5ub3Q8L2VtPgorb3V0cHV0IGFueSBzZWN0aW9uIHJlZ2lzdGVyIG92ZXJyaWRlIHByZWZpeGVzIHRvIGFzc2VtYmxlIHRoZSBnaXZlbgoraW5zdHJ1Y3Rpb24uICBUaHVzLCBzZWN0aW9uIG92ZXJyaWRlcyBjYW4gYmUgc3BlY2lmaWVkIHRvIGVtcGhhc2l6ZSB3aGljaAorc2VjdGlvbiByZWdpc3RlciBpcyB1c2VkIGZvciBhIGdpdmVuIG1lbW9yeSBvcGVyYW5kLgorCisgICA8cD5IZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIEludGVsIGFuZCBBVCZhbXA7VCBzdHlsZSBtZW1vcnkgcmVmZXJlbmNlczoKKworICAgICA8ZGw+Cis8ZHQ+QVQmYW1wO1Q6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTQoJWVicCk8L3NwYW4+PC9zYW1wPiZyc3F1bzssIEludGVsOiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5bZWJwIC0gNF08L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PHZhcj5iYXNlPC92YXI+IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVicDwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgPHZhcj5kaXNwPC92YXI+IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIDx2YXI+c2VjdGlvbjwvdmFyPiBpcworbWlzc2luZywgYW5kIHRoZSBkZWZhdWx0IHNlY3Rpb24gaXMgdXNlZCAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGFkZHJlc3Npbmcgd2l0aAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZWJwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIHRoZSBiYXNlIHJlZ2lzdGVyKS4gIDx2YXI+aW5kZXg8L3Zhcj4sIDx2YXI+c2NhbGU8L3Zhcj4gYXJlIGJvdGggbWlzc2luZy4KKworICAgICA8YnI+PGR0PkFUJmFtcDtUOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbygsJWVheCw0KTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgSW50ZWw6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+W2ZvbyArIGVheCo0XTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48dmFyPmluZGV4PC92YXI+IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoc2NhbGVkIGJ5IGEgPHZhcj5zY2FsZTwvdmFyPiA0KTsgPHZhcj5kaXNwPC92YXI+IGlzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEFsbCBvdGhlciBmaWVsZHMgYXJlIG1pc3NpbmcuICBUaGUgc2VjdGlvbiByZWdpc3RlciBoZXJlCitkZWZhdWx0cyB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkczwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0PkFUJmFtcDtUOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbygsMSk8L3NwYW4+PC9zYW1wPiZyc3F1bzs7IEludGVsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+W2Zvb108L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VGhpcyB1c2VzIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGEgbWVtb3J5IG9wZXJhbmQuIAorTm90ZSB0aGF0IDx2YXI+YmFzZTwvdmFyPiBhbmQgPHZhcj5pbmRleDwvdmFyPiBhcmUgYm90aCBtaXNzaW5nLCBidXQgdGhlcmUgaXMgb25seQorPGVtPm9uZTwvZW0+ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoaXMgaXMgYSBzeW50YWN0aWMgZXhjZXB0aW9uLgorCisgICAgIDxicj48ZHQ+QVQmYW1wO1Q6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWdzOmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgSW50ZWwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nczpmb288L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VGhpcyBzZWxlY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgdmFyaWFibGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2l0aCBzZWN0aW9uCityZWdpc3RlciA8dmFyPnNlY3Rpb248L3Zhcj4gYmVpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZ3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC9kbD4KKworICAgPHA+QWJzb2x1dGUgKGFzIG9wcG9zZWQgdG8gUEMgcmVsYXRpdmUpIGNhbGwgYW5kIGp1bXAgb3BlcmFuZHMgbXVzdCBiZQorcHJlZml4ZWQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJZiBubyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgc3BlY2lmaWVkLCA8Y29kZT5hczwvY29kZT4KK2Fsd2F5cyBjaG9vc2VzIFBDIHJlbGF0aXZlIGFkZHJlc3NpbmcgZm9yIGp1bXAvY2FsbCBsYWJlbHMuCisKKyAgIDxwPkFueSBpbnN0cnVjdGlvbiB0aGF0IGhhcyBhIG1lbW9yeSBvcGVyYW5kLCBidXQgbm8gcmVnaXN0ZXIgb3BlcmFuZCwKKzxlbT5tdXN0PC9lbT4gc3BlY2lmeSBpdHMgc2l6ZSAoYnl0ZSwgd29yZCwgbG9uZywgb3IgcXVhZHJ1cGxlKSB3aXRoIGFuCitpbnN0cnVjdGlvbiBtbmVtb25pYyBzdWZmaXggKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5xPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorcmVzcGVjdGl2ZWx5KS4KKworICAgPHA+VGhlIHg4Ni02NCBhcmNoaXRlY3R1cmUgYWRkcyBhbiBSSVAgKGluc3RydWN0aW9uIHBvaW50ZXIgcmVsYXRpdmUpCithZGRyZXNzaW5nLiAgVGhpcyBhZGRyZXNzaW5nIG1vZGUgaXMgc3BlY2lmaWVkIGJ5IHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmlwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGEKK2Jhc2UgcmVnaXN0ZXIuICBPbmx5IGNvbnN0YW50IG9mZnNldHMgYXJlIHZhbGlkLiBGb3IgZXhhbXBsZToKKworICAgICA8ZGw+Cis8ZHQ+QVQmYW1wO1Q6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTIzNCglcmlwKTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgSW50ZWw6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+W3JpcCArIDEyMzRdPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlBvaW50cyB0byB0aGUgYWRkcmVzcyAxMjM0IGJ5dGVzIHBhc3QgdGhlIGVuZCBvZiB0aGUgY3VycmVudAoraW5zdHJ1Y3Rpb24uCisKKyAgICAgPGJyPjxkdD5BVCZhbXA7VDogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zeW1ib2woJXJpcCk8L3NwYW4+PC9zYW1wPiZyc3F1bzssIEludGVsOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPltyaXAgKyBzeW1ib2xdPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlBvaW50cyB0byB0aGUgPGNvZGU+c3ltYm9sPC9jb2RlPiBpbiBSSVAgcmVsYXRpdmUgd2F5LCB0aGlzIGlzIHNob3J0ZXIgdGhhbgordGhlIGRlZmF1bHQgYWJzb2x1dGUgYWRkcmVzc2luZy4gCis8L2RsPgorCisgICA8cD5PdGhlciBhZGRyZXNzaW5nIG1vZGVzIHJlbWFpbiB1bmNoYW5nZWQgaW4geDg2LTY0IGFyY2hpdGVjdHVyZSwgZXhjZXB0CityZWdpc3RlcnMgdXNlZCBhcmUgNjQtYml0IGluc3RlYWQgb2YgMzItYml0LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRNbmVtb25pY3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZE1uZW1vbmljcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYTg2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRNbmVtb25pY3MuaHRtbApAQCAtMCwwICsxLDEyOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTM4Ni1NbmVtb25pY3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkU3ludGF4Lmh0bWwjaTM4Nl8wMDJkU3ludGF4IiB0aXRsZT0iaTM4Ni1TeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRSZWdzLmh0bWwjaTM4Nl8wMDJkUmVncyIgdGl0bGU9ImkzODYtUmVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtTW5lbW9uaWNzIj48L2E+Cis8YSBuYW1lPSJpMzg2XzAwMmRNbmVtb25pY3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTM4Nl8wMDJkUmVncy5odG1sI2kzODZfMDAyZFJlZ3MiPmkzODYtUmVnczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImkzODZfMDAyZFN5bnRheC5odG1sI2kzODZfMDAyZFN5bnRheCI+aTM4Ni1TeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNS40IEluc3RydWN0aW9uIE5hbWluZzwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWkzODYtaW5zdHJ1Y3Rpb24tbmFtaW5nLTk4MiI+PC9hPjxhIG5hbWU9ImluZGV4LWluc3RydWN0aW9uLW5hbWluZ18wMDJjLWkzODYtOTgzIj48L2E+PGEgbmFtZT0iaW5kZXgteDg2XzAwMmQ2NC1pbnN0cnVjdGlvbi1uYW1pbmctOTg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW5zdHJ1Y3Rpb24tbmFtaW5nXzAwMmMteDg2XzAwMmQ2NC05ODUiPjwvYT4KK0luc3RydWN0aW9uIG1uZW1vbmljcyBhcmUgc3VmZml4ZWQgd2l0aCBvbmUgY2hhcmFjdGVyIG1vZGlmaWVycyB3aGljaAorc3BlY2lmeSB0aGUgc2l6ZSBvZiBvcGVyYW5kcy4gIFRoZSBsZXR0ZXJzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmw8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3BlY2lmeSBieXRlLCB3b3JkLCBsb25nIGFuZCBxdWFkcnVwbGUgd29yZCBvcGVyYW5kcy4gIElmCitubyBzdWZmaXggaXMgc3BlY2lmaWVkIGJ5IGFuIGluc3RydWN0aW9uIHRoZW4gPGNvZGU+YXM8L2NvZGU+IHRyaWVzIHRvCitmaWxsIGluIHRoZSBtaXNzaW5nIHN1ZmZpeCBiYXNlZCBvbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgb3BlcmFuZAorKHRoZSBsYXN0IG9uZSBieSBjb252ZW50aW9uKS4gIFRodXMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92ICVheCwgJWJ4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGVxdWl2YWxlbnQKK3RvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92dyAlYXgsICVieDwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgYWxzbywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3YgJDEsICVieDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBlcXVpdmFsZW50IHRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1vdncgJDEsIGJ4PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgTm90ZSB0aGF0IHRoaXMgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIEFUJmFtcDtUIFVuaXgKK2Fzc2VtYmxlciB3aGljaCBhc3N1bWVzIHRoYXQgYSBtaXNzaW5nIG1uZW1vbmljIHN1ZmZpeCBpbXBsaWVzIGxvbmcKK29wZXJhbmQgc2l6ZS4gIChUaGlzIGluY29tcGF0aWJpbGl0eSBkb2VzIG5vdCBhZmZlY3QgY29tcGlsZXIgb3V0cHV0CitzaW5jZSBjb21waWxlcnMgYWx3YXlzIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgbW5lbW9uaWMgc3VmZml4LikKKworICAgPHA+QWxtb3N0IGFsbCBpbnN0cnVjdGlvbnMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBpbiBBVCZhbXA7VCBhbmQgSW50ZWwgZm9ybWF0LiAKK1RoZXJlIGFyZSBhIGZldyBleGNlcHRpb25zLiAgVGhlIHNpZ24gZXh0ZW5kIGFuZCB6ZXJvIGV4dGVuZAoraW5zdHJ1Y3Rpb25zIG5lZWQgdHdvIHNpemVzIHRvIHNwZWNpZnkgdGhlbS4gIFRoZXkgbmVlZCBhIHNpemUgdG8KK3NpZ24vemVybyBleHRlbmQgPGVtPmZyb208L2VtPiBhbmQgYSBzaXplIHRvIHplcm8gZXh0ZW5kIDxlbT50bzwvZW0+LiAgVGhpcworaXMgYWNjb21wbGlzaGVkIGJ5IHVzaW5nIHR3byBpbnN0cnVjdGlvbiBtbmVtb25pYyBzdWZmaXhlcyBpbiBBVCZhbXA7VAorc3ludGF4LiAgQmFzZSBuYW1lcyBmb3Igc2lnbiBleHRlbmQgYW5kIHplcm8gZXh0ZW5kIGFyZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3ZzLi4uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1vdnouLi48L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gQVQmYW1wO1Qgc3ludGF4ICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1vdnN4PC9zcGFuPjwvc2FtcD4mcnNxdW87CithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3Z6eDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBJbnRlbCBzeW50YXgpLiAgVGhlIGluc3RydWN0aW9uIG1uZW1vbmljIHN1ZmZpeGVzCithcmUgdGFja2VkIG9uIHRvIHRoaXMgYmFzZSBuYW1lLCB0aGUgPGVtPmZyb208L2VtPiBzdWZmaXggYmVmb3JlIHRoZQorPGVtPnRvPC9lbT4gc3VmZml4LiAgVGh1cywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3ZzYmwgJWFsLCAlZWR4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIEFUJmFtcDtUIHN5bnRheCBmb3IKKyZsZHF1bzttb3ZlIHNpZ24gZXh0ZW5kIDxlbT5mcm9tPC9lbT4gJWFsIDxlbT50bzwvZW0+ICVlZHguJnJkcXVvOyAgUG9zc2libGUgc3VmZml4ZXMsCit0aHVzLCBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ibDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoZnJvbSBieXRlIHRvIGxvbmcpLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJ3PC9zcGFuPjwvc2FtcD4mcnNxdW87IChmcm9tIGJ5dGUgdG8gd29yZCksCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPndsPC9zcGFuPjwvc2FtcD4mcnNxdW87IChmcm9tIHdvcmQgdG8gbG9uZyksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGZyb20gYnl0ZSB0byBxdWFkcnVwbGUgd29yZCksCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPndxPC9zcGFuPjwvc2FtcD4mcnNxdW87IChmcm9tIHdvcmQgdG8gcXVhZHJ1cGxlIHdvcmQpLCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5scTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoZnJvbSBsb25nIHRvCitxdWFkcnVwbGUgd29yZCkuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWVuY29kaW5nLW9wdGlvbnNfMDAyYy1pMzg2LTk4NiI+PC9hPjxhIG5hbWU9ImluZGV4LWVuY29kaW5nLW9wdGlvbnNfMDAyYy14ODZfMDAyZDY0LTk4NyI+PC9hPgorRGlmZmVyZW50IGVuY29kaW5nIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCB2aWEgb3B0aW9uYWwgbW5lbW9uaWMKK3N1ZmZpeC4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3VmZml4IHN3YXBzIDIgcmVnaXN0ZXIgb3BlcmFuZHMgaW4gZW5jb2Rpbmcgd2hlbgorbW92aW5nIGZyb20gb25lIHJlZ2lzdGVyIHRvIGFub3RoZXIuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kODwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3VmZml4CitwcmVmZXJzIDhiaXQgb3IgMzJiaXQgZGlzcGxhY2VtZW50IGluIGVuY29kaW5nLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uLWluc3RydWN0aW9uc18wMDJjLWkzODYtOTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtaTM4Ni1jb252ZXJzaW9uLWluc3RydWN0aW9ucy05ODkiPjwvYT48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uLWluc3RydWN0aW9uc18wMDJjLXg4Nl8wMDJkNjQtOTkwIj48L2E+PGEgbmFtZT0iaW5kZXgteDg2XzAwMmQ2NC1jb252ZXJzaW9uLWluc3RydWN0aW9ucy05OTEiPjwvYT5UaGUgSW50ZWwtc3ludGF4IGNvbnZlcnNpb24gaW5zdHJ1Y3Rpb25zCisKKyAgICAgPHVsPgorPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2J3PC9zcGFuPjwvc2FtcD4mcnNxdW87ICZtZGFzaDsgc2lnbi1leHRlbmQgYnl0ZSBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVhbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byB3b3JkIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWF4PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorCisgICAgIDxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmN3ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJm1kYXNoOyBzaWduLWV4dGVuZCB3b3JkIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGxvbmcgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZWF4PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorCisgICAgIDxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmN3ZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbWRhc2g7IHNpZ24tZXh0ZW5kIHdvcmQgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gbG9uZyBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkeDolYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzssCisKKyAgICAgPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2RxPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZtZGFzaDsgc2lnbi1leHRlbmQgZHdvcmQgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZWF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHF1YWQgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZWR4OiVlYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzssCisKKyAgICAgPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2RxZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbWRhc2g7IHNpZ24tZXh0ZW5kIGR3b3JkIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBxdWFkIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXJheDwvc3Bhbj48L3NhbXA+JnJzcXVvOworKHg4Ni02NCBvbmx5KSwKKworICAgICA8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jcW88L3NwYW4+PC9zYW1wPiZyc3F1bzsgJm1kYXNoOyBzaWduLWV4dGVuZCBxdWFkIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXJheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBvY3R1cGxlIGluCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVyZHg6JXJheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoeDg2LTY0IG9ubHkpLAorPC91bD4KKworPHAgY2xhc3M9Im5vaW5kZW50Ij5hcmUgY2FsbGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2J0dzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jd3RsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmN3dGQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2x0ZDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jbHRxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3F0bzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBBVCZhbXA7VCBuYW1pbmcuICA8Y29kZT5hczwvY29kZT4gYWNjZXB0cyBlaXRoZXIgbmFtaW5nIGZvciB0aGVzZQoraW5zdHJ1Y3Rpb25zLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1qdW1wLWluc3RydWN0aW9uc18wMDJjLWkzODYtOTkyIj48L2E+PGEgbmFtZT0iaW5kZXgtY2FsbC1pbnN0cnVjdGlvbnNfMDAyYy1pMzg2LTk5MyI+PC9hPjxhIG5hbWU9ImluZGV4LWp1bXAtaW5zdHJ1Y3Rpb25zXzAwMmMteDg2XzAwMmQ2NC05OTQiPjwvYT48YSBuYW1lPSJpbmRleC1jYWxsLWluc3RydWN0aW9uc18wMDJjLXg4Nl8wMDJkNjQtOTk1Ij48L2E+RmFyIGNhbGwvanVtcCBpbnN0cnVjdGlvbnMgYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGNhbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGptcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbgorQVQmYW1wO1Qgc3ludGF4LCBidXQgYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbCBmYXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+anVtcCBmYXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gSW50ZWwKK2NvbnZlbnRpb24uCisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNS41IEFUJmFtcDtUIE1uZW1vbmljIHZlcnN1cyBJbnRlbCBNbmVtb25pYzwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWkzODYtbW5lbW9uaWMtY29tcGF0aWJpbGl0eS05OTYiPjwvYT48YSBuYW1lPSJpbmRleC1tbmVtb25pYy1jb21wYXRpYmlsaXR5XzAwMmMtaTM4Ni05OTciPjwvYT4KKzxjb2RlPmFzPC9jb2RlPiBzdXBwb3J0cyBhc3NlbWJseSB1c2luZyBJbnRlbCBtbmVtb25pYy4gCis8Y29kZT4uaW50ZWxfbW5lbW9uaWM8L2NvZGU+IHNlbGVjdHMgSW50ZWwgbW5lbW9uaWMgd2l0aCBJbnRlbCBzeW50YXgsIGFuZAorPGNvZGU+LmF0dF9tbmVtb25pYzwvY29kZT4gc3dpdGNoZXMgYmFjayB0byB0aGUgdXN1YWwgQVQmYW1wO1QgbW5lbW9uaWMgd2l0aCBBVCZhbXA7VAorc3ludGF4IGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG91dHB1dCBvZiA8Y29kZT5nY2M8L2NvZGU+LiAKK1NldmVyYWwgeDg3IGluc3RydWN0aW9ucywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mYWRkPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZkaXY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZmRpdnA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZkaXZyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZkaXZycDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mbXVsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZzdWI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnN1YnA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZzdWJyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZzdWJycDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgIGFyZSBpbXBsZW1lbnRlZCBpbiBBVCZhbXA7VCBTeXN0ZW0gVi8zODYKK2Fzc2VtYmxlciB3aXRoIGRpZmZlcmVudCBtbmVtb25pY3MgZnJvbSB0aG9zZSBpbiBJbnRlbCBJQTMyIHNwZWNpZmljYXRpb24uIAorPGNvZGU+Z2NjPC9jb2RlPiBnZW5lcmF0ZXMgdGhvc2UgaW5zdHJ1Y3Rpb25zIHdpdGggQVQmYW1wO1QgbW5lbW9uaWMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZE5vdGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmROb3Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZDhhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmROb3Rlcy5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtTm90ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkQnVncy5odG1sI2kzODZfMDAyZEJ1Z3MiIHRpdGxlPSJpMzg2LUJ1Z3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpMzg2LU5vdGVzIj48L2E+Cis8YSBuYW1lPSJpMzg2XzAwMmROb3RlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImkzODZfMDAyZEJ1Z3MuaHRtbCNpMzg2XzAwMmRCdWdzIj5pMzg2LUJ1Z3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4xNS4xOCBOb3RlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWkzODYtXzAwNDBjb2RlXzAwN2JtdWxfMDA3ZF8wMDJjLV8wMDQwY29kZV8wMDdiaW11bF8wMDdkLWluc3RydWN0aW9ucy0xMDY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtdWxfMDA3ZC1pbnN0cnVjdGlvbl8wMDJjLWkzODYtMTA2NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW11bF8wMDdkLWluc3RydWN0aW9uXzAwMmMtaTM4Ni0xMDY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtdWxfMDA3ZC1pbnN0cnVjdGlvbl8wMDJjLXg4Nl8wMDJkNjQtMTA2NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW11bF8wMDdkLWluc3RydWN0aW9uXzAwMmMteDg2XzAwMmQ2NC0xMDY4Ij48L2E+VGhlcmUgaXMgc29tZSB0cmlja2VyeSBjb25jZXJuaW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11bDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbXVsPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbnN0cnVjdGlvbnMgdGhhdCBkZXNlcnZlcyBtZW50aW9uLiAgVGhlIDE2LSwgMzItLCA2NC0gYW5kIDEyOC1iaXQgZXhwYW5kaW5nCittdWx0aXBsaWVzIChiYXNlIG9wY29kZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4ZjY8L3NwYW4+PC9zYW1wPiZyc3F1bzs7IGV4dGVuc2lvbiA0IGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11bDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgNQorZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW11bDwvc3Bhbj48L3NhbXA+JnJzcXVvOykgY2FuIGJlIG91dHB1dCBvbmx5IGluIHRoZSBvbmUgb3BlcmFuZCBmb3JtLiAgVGh1cywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW11bCAlZWJ4LCAlZWF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGRvZXMgPGVtPm5vdDwvZW0+IHNlbGVjdCB0aGUgZXhwYW5kaW5nIG11bHRpcGx5OwordGhlIGV4cGFuZGluZyBtdWx0aXBseSB3b3VsZCBjbG9iYmVyIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVlZHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVnaXN0ZXIsIGFuZCB0aGlzCit3b3VsZCBjb25mdXNlIDxjb2RlPmdjYzwvY29kZT4gb3V0cHV0LiAgVXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW11bCAlZWJ4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGdldCB0aGUKKzY0LWJpdCBwcm9kdWN0IGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVkeDolZWF4PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5XZSBoYXZlIGFkZGVkIGEgdHdvIG9wZXJhbmQgZm9ybSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmltdWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hlbiB0aGUgZmlyc3Qgb3BlcmFuZAoraXMgYW4gaW1tZWRpYXRlIG1vZGUgZXhwcmVzc2lvbiBhbmQgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGEgcmVnaXN0ZXIuIAorVGhpcyBpcyBqdXN0IGEgc2hvcnRoYW5kLCBzbyB0aGF0LCBtdWx0aXBseWluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVlYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYnkgNjksIGZvcgorZXhhbXBsZSwgY2FuIGJlIGRvbmUgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmltdWwgJDY5LCAlZWF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHJhdGhlciB0aGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW11bAorJDY5LCAlZWF4LCAlZWF4PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCis8IS0tIENvcHlyaWdodCAyMDAwLCAyMDAzLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OGYxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRPcHRpb25zLmh0bWwKQEAgLTAsMCArMSwyMjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtT3B0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTM4Ni1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmREaXJlY3RpdmVzLmh0bWwjaTM4Nl8wMDJkRGlyZWN0aXZlcyIgdGl0bGU9ImkzODYtRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtT3B0aW9ucyI+PC9hPgorPGEgbmFtZT0iaTM4Nl8wMDJkT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpMzg2XzAwMmREaXJlY3RpdmVzLmh0bWwjaTM4Nl8wMDJkRGlyZWN0aXZlcyI+aTM4Ni1EaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTUuMSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3B0aW9ucy1mb3ItaTM4Ni05MDMiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zLWZvci14ODZfMDAyZDY0LTkwNCI+PC9hPjxhIG5hbWU9ImluZGV4LWkzODYtb3B0aW9ucy05MDUiPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LW9wdGlvbnMtOTA2Ij48L2E+CitUaGUgaTM4NiB2ZXJzaW9uIG9mIDxjb2RlPmFzPC9jb2RlPiBoYXMgYSBmZXcgbWFjaGluZQorZGVwZW5kZW50IG9wdGlvbnM6CisKKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkMzJfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkwNyI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkMzJfMDA3ZC1vcHRpb25fMDAyYy14ODZfMDAyZDY0LTkwOCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZF8wMDJkeDMyXzAwN2Qtb3B0aW9uXzAwMmMtaTM4Ni05MDkiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRfMDAyZHgzMl8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTEwIj48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmQ2NF8wMDdkLW9wdGlvbl8wMDJjLWkzODYtOTExIj48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmQ2NF8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTEyIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPi0tMzIgfCAtLXgzMiB8IC0tNjQ8L2NvZGU+PGRkPlNlbGVjdCB0aGUgd29yZCBzaXplLCBlaXRoZXIgMzIgYml0cyBvciA2NCBiaXRzLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLTMyPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbXBsaWVzIEludGVsIGkzODYgYXJjaGl0ZWN0dXJlLCB3aGlsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0teDMyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tNjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2ltcGx5IEFNRCB4ODYtNjQgYXJjaGl0ZWN0dXJlIHdpdGggMzItYml0IG9yIDY0LWJpdCB3b3JkLXNpemUKK3Jlc3BlY3RpdmVseS4KKworICAgICA8cD5UaGVzZSBvcHRpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIHRoZSBFTEYgb2JqZWN0IGZpbGUgZm9ybWF0LCBhbmQKK3JlcXVpcmUgdGhhdCB0aGUgbmVjZXNzYXJ5IEJGRCBzdXBwb3J0IGhhcyBiZWVuIGluY2x1ZGVkIChvbiBhIDMyLWJpdAorcGxhdGZvcm0geW91IGhhdmUgdG8gYWRkICZuZGFzaDtlbmFibGUtNjQtYml0LWJmZCB0byBjb25maWd1cmUgZW5hYmxlIDY0LWJpdAordXNhZ2UgYW5kIHVzZSB4ODYtNjQgYXMgdGFyZ2V0IHBsYXRmb3JtKS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1uPC9jb2RlPjxkZD5CeSBkZWZhdWx0LCB4ODYgR0FTIHJlcGxhY2VzIG11bHRpcGxlIG5vcCBpbnN0cnVjdGlvbnMgdXNlZCBmb3IKK2FsaWdubWVudCB3aXRoaW4gY29kZSBzZWN0aW9ucyB3aXRoIG11bHRpLWJ5dGUgbm9wIGluc3RydWN0aW9ucyBzdWNoCithcyBsZWFsIDAoJWVzaSwxKSwlZXNpLiAgVGhpcyBzd2l0Y2ggZGlzYWJsZXMgdGhlIG9wdGltaXphdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkXzAwMmRkaXZpZGVfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkxMyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1kaXZpZGU8L2NvZGU+PGRkPk9uIFNWUjQtZGVyaXZlZCBwbGF0Zm9ybXMsIHRoZSBjaGFyYWN0ZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50CitjaGFyYWN0ZXIsIHdoaWNoIG1lYW5zIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMuICBUaGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1kaXZpZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIHR1cm5zICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnRvIGEgbm9ybWFsIGNoYXJhY3Rlci4gIFRoaXMgZG9lcworbm90IGRpc2FibGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIHN0YXJ0aW5nIGEgY29tbWVudCwgb3IKK2FmZmVjdCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHN0YXJ0aW5nIGEgY29tbWVudC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWFyY2hfMDAzZF8wMDdkLW9wdGlvbl8wMDJjLWkzODYtOTE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1hcmNoXzAwM2RfMDA3ZC1vcHRpb25fMDAyYy14ODZfMDAyZDY0LTkxNSI+PC9hPjxicj48ZHQ+PGNvZGU+LW1hcmNoPTwvY29kZT48dmFyPkNQVTwvdmFyPjxjb2RlPlsrPC9jb2RlPjx2YXI+RVhURU5TSU9OPC92YXI+PGNvZGU+Li4uXTwvY29kZT48ZGQ+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiAgVGhlIGFzc2VtYmxlciB3aWxsCitpc3N1ZSBhbiBlcnJvciBtZXNzYWdlIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhc3NlbWJsZSBhbiBpbnN0cnVjdGlvbgord2hpY2ggd2lsbCBub3QgZXhlY3V0ZSBvbiB0aGUgdGFyZ2V0IHByb2Nlc3Nvci4gIFRoZSBmb2xsb3dpbmcKK3Byb2Nlc3NvciBuYW1lcyBhcmUgcmVjb2duaXplZDoKKzxjb2RlPmk4MDg2PC9jb2RlPiwKKzxjb2RlPmkxODY8L2NvZGU+LAorPGNvZGU+aTI4NjwvY29kZT4sCis8Y29kZT5pMzg2PC9jb2RlPiwKKzxjb2RlPmk0ODY8L2NvZGU+LAorPGNvZGU+aTU4NjwvY29kZT4sCis8Y29kZT5pNjg2PC9jb2RlPiwKKzxjb2RlPnBlbnRpdW08L2NvZGU+LAorPGNvZGU+cGVudGl1bXBybzwvY29kZT4sCis8Y29kZT5wZW50aXVtaWk8L2NvZGU+LAorPGNvZGU+cGVudGl1bWlpaTwvY29kZT4sCis8Y29kZT5wZW50aXVtNDwvY29kZT4sCis8Y29kZT5wcmVzY290dDwvY29kZT4sCis8Y29kZT5ub2NvbmE8L2NvZGU+LAorPGNvZGU+Y29yZTwvY29kZT4sCis8Y29kZT5jb3JlMjwvY29kZT4sCis8Y29kZT5jb3JlaTc8L2NvZGU+LAorPGNvZGU+bDFvbTwvY29kZT4sCis8Y29kZT5rMW9tPC9jb2RlPiwKKzxjb2RlPms2PC9jb2RlPiwKKzxjb2RlPms2XzI8L2NvZGU+LAorPGNvZGU+YXRobG9uPC9jb2RlPiwKKzxjb2RlPm9wdGVyb248L2NvZGU+LAorPGNvZGU+azg8L2NvZGU+LAorPGNvZGU+YW1kZmFtMTA8L2NvZGU+LAorPGNvZGU+YmR2ZXIxPC9jb2RlPiwKKzxjb2RlPmJkdmVyMjwvY29kZT4sCis8Y29kZT5iZHZlcjM8L2NvZGU+LAorPGNvZGU+YnR2ZXIxPC9jb2RlPiwKKzxjb2RlPmJ0dmVyMjwvY29kZT4sCis8Y29kZT5nZW5lcmljMzI8L2NvZGU+IGFuZAorPGNvZGU+Z2VuZXJpYzY0PC9jb2RlPi4KKworICAgICA8cD5JbiBhZGRpdGlvbiB0byB0aGUgYmFzaWMgaW5zdHJ1Y3Rpb24gc2V0LCB0aGUgYXNzZW1ibGVyIGNhbiBiZSB0b2xkIHRvCithY2NlcHQgdmFyaW91cyBleHRlbnNpb24gbW5lbW9uaWNzLiAgRm9yIGV4YW1wbGUsCis8Y29kZT4tbWFyY2g9aTY4Nitzc2U0K3ZteDwvY29kZT4gZXh0ZW5kcyA8dmFyPmk2ODY8L3Zhcj4gd2l0aCA8dmFyPnNzZTQ8L3Zhcj4gYW5kCis8dmFyPnZteDwvdmFyPi4gIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKKzxjb2RlPjgwODc8L2NvZGU+LAorPGNvZGU+Mjg3PC9jb2RlPiwKKzxjb2RlPjM4NzwvY29kZT4sCis8Y29kZT5ubzg3PC9jb2RlPiwKKzxjb2RlPm1teDwvY29kZT4sCis8Y29kZT5ub21teDwvY29kZT4sCis8Y29kZT5zc2U8L2NvZGU+LAorPGNvZGU+c3NlMjwvY29kZT4sCis8Y29kZT5zc2UzPC9jb2RlPiwKKzxjb2RlPnNzc2UzPC9jb2RlPiwKKzxjb2RlPnNzZTQuMTwvY29kZT4sCis8Y29kZT5zc2U0LjI8L2NvZGU+LAorPGNvZGU+c3NlNDwvY29kZT4sCis8Y29kZT5ub3NzZTwvY29kZT4sCis8Y29kZT5hdng8L2NvZGU+LAorPGNvZGU+YXZ4MjwvY29kZT4sCis8Y29kZT5hZHg8L2NvZGU+LAorPGNvZGU+cmRzZWVkPC9jb2RlPiwKKzxjb2RlPnByZmNodzwvY29kZT4sCis8Y29kZT5ub2F2eDwvY29kZT4sCis8Y29kZT52bXg8L2NvZGU+LAorPGNvZGU+dm1mdW5jPC9jb2RlPiwKKzxjb2RlPnNteDwvY29kZT4sCis8Y29kZT54c2F2ZTwvY29kZT4sCis8Y29kZT54c2F2ZW9wdDwvY29kZT4sCis8Y29kZT5hZXM8L2NvZGU+LAorPGNvZGU+cGNsbXVsPC9jb2RlPiwKKzxjb2RlPmZzZ3NiYXNlPC9jb2RlPiwKKzxjb2RlPnJkcm5kPC9jb2RlPiwKKzxjb2RlPmYxNmM8L2NvZGU+LAorPGNvZGU+Ym1pMjwvY29kZT4sCis8Y29kZT5mbWE8L2NvZGU+LAorPGNvZGU+bW92YmU8L2NvZGU+LAorPGNvZGU+ZXB0PC9jb2RlPiwKKzxjb2RlPmx6Y250PC9jb2RlPiwKKzxjb2RlPmhsZTwvY29kZT4sCis8Y29kZT5ydG08L2NvZGU+LAorPGNvZGU+aW52cGNpZDwvY29kZT4sCis8Y29kZT5jbGZsdXNoPC9jb2RlPiwKKzxjb2RlPmx3cDwvY29kZT4sCis8Y29kZT5mbWE0PC9jb2RlPiwKKzxjb2RlPnhvcDwvY29kZT4sCis8Y29kZT5zeXNjYWxsPC9jb2RlPiwKKzxjb2RlPnJkdHNjcDwvY29kZT4sCis8Y29kZT4zZG5vdzwvY29kZT4sCis8Y29kZT4zZG5vd2E8L2NvZGU+LAorPGNvZGU+c3NlNGE8L2NvZGU+LAorPGNvZGU+c3NlNTwvY29kZT4sCis8Y29kZT5zdm1lPC9jb2RlPiwKKzxjb2RlPmFibTwvY29kZT4gYW5kCis8Y29kZT5wYWRsb2NrPC9jb2RlPi4gCitOb3RlIHRoYXQgcmF0aGVyIHRoYW4gZXh0ZW5kaW5nIGEgYmFzaWMgaW5zdHJ1Y3Rpb24gc2V0LCB0aGUgZXh0ZW5zaW9uCittbmVtb25pY3Mgc3RhcnRpbmcgd2l0aCA8Y29kZT5ubzwvY29kZT4gcmV2b2tlIHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgPHA+V2hlbiB0aGUgPGNvZGU+LmFyY2g8L2NvZGU+IGRpcmVjdGl2ZSBpcyB1c2VkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4sIHRoZQorPGNvZGU+LmFyY2g8L2NvZGU+IGRpcmVjdGl2ZSB3aWxsIHRha2UgcHJlY2VkZW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtdHVuZV8wMDNkXzAwN2Qtb3B0aW9uXzAwMmMtaTM4Ni05MTYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXR1bmVfMDAzZF8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTE3Ij48L2E+PGJyPjxkdD48Y29kZT4tbXR1bmU9PC9jb2RlPjx2YXI+Q1BVPC92YXI+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyBhIHByb2Nlc3NvciB0byBvcHRpbWl6ZSBmb3IuIFdoZW4gdXNlZCBpbgorY29uanVuY3Rpb24gd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBvbmx5IGluc3RydWN0aW9ucworb2YgdGhlIHByb2Nlc3NvciBzcGVjaWZpZWQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB3aWxsIGJlCitnZW5lcmF0ZWQuCisKKyAgICAgPHA+VmFsaWQgPHZhcj5DUFU8L3Zhcj4gdmFsdWVzIGFyZSBpZGVudGljYWwgdG8gdGhlIHByb2Nlc3NvciBsaXN0IG9mCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9PC9zcGFuPjx2YXI+Q1BVPC92YXI+PC9zYW1wPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXNzZTJhdnhfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkxOCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtc3NlMmF2eF8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTE5Ij48L2E+PGJyPjxkdD48Y29kZT4tbXNzZTJhdng8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBhc3NlbWJsZXIgc2hvdWxkIGVuY29kZSBTU0UgaW5zdHJ1Y3Rpb25zCit3aXRoIFZFWCBwcmVmaXguCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1zc2VfMDAyZGNoZWNrXzAwM2RfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkyMCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtc3NlXzAwMmRjaGVja18wMDNkXzAwN2Qtb3B0aW9uXzAwMmMteDg2XzAwMmQ2NC05MjEiPjwvYT48YnI+PGR0Pjxjb2RlPi1tc3NlLWNoZWNrPTwvY29kZT48dmFyPm5vbmU8L3Zhcj48ZHQ+PGNvZGU+LW1zc2UtY2hlY2s9PC9jb2RlPjx2YXI+d2FybmluZzwvdmFyPjxkdD48Y29kZT4tbXNzZS1jaGVjaz08L2NvZGU+PHZhcj5lcnJvcjwvdmFyPjxkZD5UaGVzZSBvcHRpb25zIGNvbnRyb2wgaWYgdGhlIGFzc2VtYmxlciBzaG91bGQgY2hlY2sgU1NFIGludHJ1Y3Rpb25zLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3NlLWNoZWNrPTwvc3Bhbj48dmFyPm5vbmU8L3Zhcj48L3NhbXA+IHdpbGwgbWFrZSB0aGUgYXNzZW1ibGVyIG5vdCB0byBjaGVjayBTU0UKK2luc3RydWN0aW9ucywgIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc2UtY2hlY2s9PC9zcGFuPjx2YXI+d2FybmluZzwvdmFyPjwvc2FtcD4KK3dpbGwgbWFrZSB0aGUgYXNzZW1ibGVyIGlzc3VlIGEgd2FybmluZyBmb3IgYW55IFNTRSBpbnRydWN0aW9uLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3NlLWNoZWNrPTwvc3Bhbj48dmFyPmVycm9yPC92YXI+PC9zYW1wPiB3aWxsIG1ha2UgdGhlIGFzc2VtYmxlciBpc3N1ZSBhbiBlcnJvcgorZm9yIGFueSBTU0UgaW50cnVjdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWF2eHNjYWxhcl8wMDNkXzAwN2Qtb3B0aW9uXzAwMmMtaTM4Ni05MjIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbWF2eHNjYWxhcl8wMDNkXzAwN2Qtb3B0aW9uXzAwMmMteDg2XzAwMmQ2NC05MjMiPjwvYT48YnI+PGR0Pjxjb2RlPi1tYXZ4c2NhbGFyPTwvY29kZT48dmFyPjEyODwvdmFyPjxkdD48Y29kZT4tbWF2eHNjYWxhcj08L2NvZGU+PHZhcj4yNTY8L3Zhcj48ZGQ+VGhlc2Ugb3B0aW9ucyBjb250cm9sIGhvdyB0aGUgYXNzZW1ibGVyIHNob3VsZCBlbmNvZGUgc2NhbGFyIEFWWAoraW5zdHJ1Y3Rpb25zLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hdnhzY2FsYXI9PC9zcGFuPjx2YXI+MTI4PC92YXI+PC9zYW1wPiB3aWxsIGVuY29kZSBzY2FsYXIKK0FWWCBpbnN0cnVjdGlvbnMgd2l0aCAxMjhiaXQgdmVjdG9yIGxlbmd0aCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hdnhzY2FsYXI9PC9zcGFuPjx2YXI+MjU2PC92YXI+PC9zYW1wPiB3aWxsIGVuY29kZSBzY2FsYXIgQVZYIGluc3RydWN0aW9ucword2l0aCAyNTZiaXQgdmVjdG9yIGxlbmd0aC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbW1uZW1vbmljXzAwM2RfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkyNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbW5lbW9uaWNfMDAzZF8wMDdkLW9wdGlvbl8wMDJjLXg4Nl8wMDJkNjQtOTI1Ij48L2E+PGJyPjxkdD48Y29kZT4tbW1uZW1vbmljPTwvY29kZT48dmFyPmF0dDwvdmFyPjxkdD48Y29kZT4tbW1uZW1vbmljPTwvY29kZT48dmFyPmludGVsPC92YXI+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyBpbnN0cnVjdGlvbiBtbmVtb25pYyBmb3IgbWF0Y2hpbmcgaW5zdHJ1Y3Rpb25zLiAKK1RoZSA8Y29kZT4uYXR0X21uZW1vbmljPC9jb2RlPiBhbmQgPGNvZGU+LmludGVsX21uZW1vbmljPC9jb2RlPiBkaXJlY3RpdmVzIHdpbGwKK3Rha2UgcHJlY2VkZW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtc3ludGF4XzAwM2RfMDA3ZC1vcHRpb25fMDAyYy1pMzg2LTkyNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtc3ludGF4XzAwM2RfMDA3ZC1vcHRpb25fMDAyYy14ODZfMDAyZDY0LTkyNyI+PC9hPjxicj48ZHQ+PGNvZGU+LW1zeW50YXg9PC9jb2RlPjx2YXI+YXR0PC92YXI+PGR0Pjxjb2RlPi1tc3ludGF4PTwvY29kZT48dmFyPmludGVsPC92YXI+PGRkPlRoaXMgb3B0aW9uIHNwZWNpZmllcyBpbnN0cnVjdGlvbiBzeW50YXggd2hlbiBwcm9jZXNzaW5nIGluc3RydWN0aW9ucy4gCitUaGUgPGNvZGU+LmF0dF9zeW50YXg8L2NvZGU+IGFuZCA8Y29kZT4uaW50ZWxfc3ludGF4PC9jb2RlPiBkaXJlY3RpdmVzIHdpbGwKK3Rha2UgcHJlY2VkZW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbmFrZWRfMDAyZHJlZ18wMDdkLW9wdGlvbl8wMDJjLWkzODYtOTI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1uYWtlZF8wMDJkcmVnXzAwN2Qtb3B0aW9uXzAwMmMteDg2XzAwMmQ2NC05MjkiPjwvYT48YnI+PGR0Pjxjb2RlPi1tbmFrZWQtcmVnPC9jb2RlPjxkZD5UaGlzIG9wZXRpb24gc3BlY2lmaWVzIHRoYXQgcmVnaXN0ZXJzIGRvbid0IHJlcXVpcmUgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJlZml4LiAKK1RoZSA8Y29kZT4uYXR0X3N5bnRheDwvY29kZT4gYW5kIDxjb2RlPi5pbnRlbF9zeW50YXg8L2NvZGU+IGRpcmVjdGl2ZXMgd2lsbCB0YWtlIHByZWNlZGVudC4KKworICAgPC9kbD4KKyAgIDwhLS0gbWFuIGVuZCAtLT4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkUHJlZml4ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFByZWZpeGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiMDY3YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFByZWZpeGVzLmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtUHJlZml4ZXMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkUmVncy5odG1sI2kzODZfMDAyZFJlZ3MiIHRpdGxlPSJpMzg2LVJlZ3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRNZW1vcnkuaHRtbCNpMzg2XzAwMmRNZW1vcnkiIHRpdGxlPSJpMzg2LU1lbW9yeSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtUHJlZml4ZXMiPjwvYT4KKzxhIG5hbWU9ImkzODZfMDAyZFByZWZpeGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2kzODZfMDAyZE1lbW9yeSI+aTM4Ni1NZW1vcnk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpMzg2XzAwMmRSZWdzLmh0bWwjaTM4Nl8wMDJkUmVncyI+aTM4Ni1SZWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTUuNyBJbnN0cnVjdGlvbiBQcmVmaXhlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWkzODYtaW5zdHJ1Y3Rpb24tcHJlZml4ZXMtMTAwMiI+PC9hPjxhIG5hbWU9ImluZGV4LWluc3RydWN0aW9uLXByZWZpeGVzXzAwMmMtaTM4Ni0xMDAzIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJlZml4ZXNfMDAyYy1pMzg2LTEwMDQiPjwvYT5JbnN0cnVjdGlvbiBwcmVmaXhlcyBhcmUgdXNlZCB0byBtb2RpZnkgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbi4gIFRoZXkKK2FyZSB1c2VkIHRvIHJlcGVhdCBzdHJpbmcgaW5zdHJ1Y3Rpb25zLCB0byBwcm92aWRlIHNlY3Rpb24gb3ZlcnJpZGVzLCB0bworcGVyZm9ybSBidXMgbG9jayBvcGVyYXRpb25zLCBhbmQgdG8gY2hhbmdlIG9wZXJhbmQgYW5kIGFkZHJlc3Mgc2l6ZXMuIAorKE1vc3QgaW5zdHJ1Y3Rpb25zIHRoYXQgbm9ybWFsbHkgb3BlcmF0ZSBvbiAzMi1iaXQgb3BlcmFuZHMgd2lsbCB1c2UKKzE2LWJpdCBvcGVyYW5kcyBpZiB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGFuICZsZHF1bztvcGVyYW5kIHNpemUmcmRxdW87IHByZWZpeC4pIAorSW5zdHJ1Y3Rpb24gcHJlZml4ZXMgYXJlIGJlc3Qgd3JpdHRlbiBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBpbnN0cnVjdGlvbgordGhleSBhY3QgdXBvbi4gRm9yIGV4YW1wbGUsIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNjYXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHNjYW4gc3RyaW5nKSBpbnN0cnVjdGlvbiBpcworcmVwZWF0ZWQgd2l0aDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgcmVwbmUgc2NhcyAlZXM6KCVlZGkpLCVhbAorPC9wcmU+CisgICA8cD5Zb3UgbWF5IGFsc28gcGxhY2UgcHJlZml4ZXMgb24gdGhlIGxpbmVzIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUKK2luc3RydWN0aW9uLCBidXQgdGhpcyBjaXJjdW12ZW50cyBjaGVja3MgdGhhdCA8Y29kZT5hczwvY29kZT4gZG9lcword2l0aCBwcmVmaXhlcywgYW5kIHdpbGwgbm90IHdvcmsgd2l0aCBhbGwgcHJlZml4ZXMuCisKKyAgIDxwPkhlcmUgaXMgYSBsaXN0IG9mIGluc3RydWN0aW9uIHByZWZpeGVzOgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zZWN0aW9uLW92ZXJyaWRlLXByZWZpeGVzXzAwMmMtaTM4Ni0xMDA1Ij48L2E+CisgICAgIDx1bD4KKzxsaT5TZWN0aW9uIG92ZXJyaWRlIHByZWZpeGVzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3M8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZHM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3M8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdzPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlc2UgYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgc3BlY2lmeWluZwordXNpbmcgdGhlIDx2YXI+c2VjdGlvbjwvdmFyPjo8dmFyPm1lbW9yeS1vcGVyYW5kPC92YXI+IGZvcm0gZm9yIG1lbW9yeSByZWZlcmVuY2VzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXNpemUtcHJlZml4ZXNfMDAyYy1pMzg2LTEwMDYiPjwvYT48bGk+T3BlcmFuZC9BZGRyZXNzIHNpemUgcHJlZml4ZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kYXRhMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWRkcjE2PC9zcGFuPjwvc2FtcD4mcnNxdW87CitjaGFuZ2UgMzItYml0IG9wZXJhbmRzL2FkZHJlc3NlcyBpbnRvIDE2LWJpdCBvcGVyYW5kcy9hZGRyZXNzZXMsCit3aGlsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRhdGEzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hZGRyMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhbmdlIDE2LWJpdCBvbmVzIChpbiBhCis8Y29kZT4uY29kZTE2PC9jb2RlPiBzZWN0aW9uKSBpbnRvIDMyLWJpdCBvcGVyYW5kcy9hZGRyZXNzZXMuICBUaGVzZSBwcmVmaXhlcworPGVtPm11c3Q8L2VtPiBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBvZiBjb2RlIGFzIHRoZSBpbnN0cnVjdGlvbiB0aGV5Cittb2RpZnkuIEZvciBleGFtcGxlLCBpbiBhIDE2LWJpdCA8Y29kZT4uY29kZTE2PC9jb2RlPiBzZWN0aW9uLCB5b3UgbWlnaHQKK3dyaXRlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgICAgYWRkcjMyIGptcGwgKiglZWJ4KQorPC9wcmU+CisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWJ1cy1sb2NrLXByZWZpeGVzXzAwMmMtaTM4Ni0xMDA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW5oaWJpdGluZy1pbnRlcnJ1cHRzXzAwMmMtaTM4Ni0xMDA4Ij48L2E+PGxpPlRoZSBidXMgbG9jayBwcmVmaXggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb2NrPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluaGliaXRzIGludGVycnVwdHMgZHVyaW5nIGV4ZWN1dGlvbiBvZgordGhlIGluc3RydWN0aW9uIGl0IHByZWNlZGVzLiAgKFRoaXMgaXMgb25seSB2YWxpZCB3aXRoIGNlcnRhaW4KK2luc3RydWN0aW9uczsgc2VlIGEgODAzODYgbWFudWFsIGZvciBkZXRhaWxzKS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1jb3Byb2Nlc3Nvci13YWl0XzAwMmMtaTM4Ni0xMDA5Ij48L2E+PGxpPlRoZSB3YWl0IGZvciBjb3Byb2Nlc3NvciBwcmVmaXggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53YWl0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHdhaXRzIGZvciB0aGUgY29wcm9jZXNzb3IgdG8KK2NvbXBsZXRlIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLiAgVGhpcyBzaG91bGQgbmV2ZXIgYmUgbmVlZGVkIGZvciB0aGUKKzgwMzg2LzgwMzg3IGNvbWJpbmF0aW9uLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXJlcGVhdC1wcmVmaXhlc18wMDJjLWkzODYtMTAxMCI+PC9hPjxsaT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZXA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVwZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVwbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJlZml4ZXMgYXJlIGFkZGVkCit0byBzdHJpbmcgaW5zdHJ1Y3Rpb25zIHRvIG1ha2UgdGhlbSByZXBlYXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZWN4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRpbWVzICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVjeDwvc3Bhbj48L3NhbXA+JnJzcXVvOwordGltZXMgaWYgdGhlIGN1cnJlbnQgYWRkcmVzcyBzaXplIGlzIDE2LWJpdHMpLiAKKzxhIG5hbWU9ImluZGV4LVJFWC1wcmVmaXhlc18wMDJjLWkzODYtMTAxMSI+PC9hPjxsaT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZmFtaWx5IG9mIHByZWZpeGVzIGlzIHVzZWQgYnkgeDg2LTY0IHRvIGVuY29kZQorZXh0ZW5zaW9ucyB0byBpMzg2IGluc3RydWN0aW9uIHNldC4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJleDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmVmaXggaGFzIGZvdXIKK2JpdHMgJm1kYXNoOyBhbiBvcGVyYW5kIHNpemUgb3ZlcndyaXRlICg8Y29kZT42NDwvY29kZT4pIHVzZWQgdG8gY2hhbmdlIG9wZXJhbmQgc2l6ZQorZnJvbSAzMi1iaXQgdG8gNjQtYml0IGFuZCBYLCBZIGFuZCBaIGV4dGVuc2lvbnMgYml0cyB1c2VkIHRvIGV4dGVuZCB0aGUKK3JlZ2lzdGVyIHNldC4KKworICAgICA8cD5Zb3UgbWF5IHdyaXRlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJleDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmVmaXhlcyBkaXJlY3RseS4gVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmV4NjR4eXo8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2luc3RydWN0aW9uIGVtaXRzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmV4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHByZWZpeCB3aXRoIGFsbCB0aGUgYml0cyBzZXQuICBCeSBvbWl0dGluZwordGhlIDxjb2RlPjY0PC9jb2RlPiwgPGNvZGU+eDwvY29kZT4sIDxjb2RlPnk8L2NvZGU+IG9yIDxjb2RlPno8L2NvZGU+IHlvdSBtYXkgd3JpdGUgb3RoZXIKK3ByZWZpeGVzIGFzIHdlbGwuICBOb3JtYWxseSwgdGhlcmUgaXMgbm8gbmVlZCB0byB3cml0ZSB0aGUgcHJlZml4ZXMKK2V4cGxpY2l0bHksIHNpbmNlIGdhcyB3aWxsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlbSBiYXNlZCBvbiB0aGUKK2luc3RydWN0aW9uIG9wZXJhbmRzLiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFJlZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFJlZ3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDEwNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkUmVncy5odG1sCkBAIC0wLDAgKzEsMTE2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pMzg2LVJlZ3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaTM4Nl8wMDJkTW5lbW9uaWNzIiB0aXRsZT0iaTM4Ni1NbmVtb25pY3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2kzODZfMDAyZFByZWZpeGVzIiB0aXRsZT0iaTM4Ni1QcmVmaXhlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtUmVncyI+PC9hPgorPGEgbmFtZT0iaTM4Nl8wMDJkUmVncyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpMzg2XzAwMmRQcmVmaXhlcy5odG1sI2kzODZfMDAyZFByZWZpeGVzIj5pMzg2LVByZWZpeGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaTM4Nl8wMDJkTW5lbW9uaWNzLmh0bWwjaTM4Nl8wMDJkTW5lbW9uaWNzIj5pMzg2LU1uZW1vbmljczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCI+aTM4Ni1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE1LjYgUmVnaXN0ZXIgTmFtaW5nPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtaTM4Ni1yZWdpc3RlcnMtOTk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXJzXzAwMmMtaTM4Ni05OTkiPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LXJlZ2lzdGVycy0xMDAwIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXJzXzAwMmMteDg2XzAwMmQ2NC0xMDAxIj48L2E+UmVnaXN0ZXIgb3BlcmFuZHMgYXJlIGFsd2F5cyBwcmVmaXhlZCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSA4MDM4NiByZWdpc3RlcnMKK2NvbnNpc3Qgb2YKKworICAgICA8dWw+Cis8bGk+dGhlIDggMzItYml0IHJlZ2lzdGVycyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVlYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHRoZSBhY2N1bXVsYXRvciksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVieDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVjeDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZWR4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVlZGk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVzaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZWJwPC9zcGFuPjwvc2FtcD4mcnNxdW87ICh0aGUKK2ZyYW1lIHBvaW50ZXIpLCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZXNwPC9zcGFuPjwvc2FtcD4mcnNxdW87ICh0aGUgc3RhY2sgcG9pbnRlcikuCisKKyAgICAgPGxpPnRoZSA4IDE2LWJpdCBsb3ctZW5kcyBvZiB0aGVzZTogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWJ4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVjeDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWR4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc2k8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWJwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPnRoZSA4IDgtYml0IHJlZ2lzdGVyczogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYWg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWFsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiViaDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWJsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVjaDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lY2w8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWRoPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKFRoZXNlCithcmUgdGhlIGhpZ2gtYnl0ZXMgYW5kIGxvdy1ieXRlcyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVheDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lYng8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVjeDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWR4PC9zcGFuPjwvc2FtcD4mcnNxdW87KQorCisgICAgIDxsaT50aGUgNiBzZWN0aW9uIHJlZ2lzdGVycyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVjczwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoY29kZSBzZWN0aW9uKSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyhkYXRhIHNlY3Rpb24pLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzczwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoc3RhY2sgc2VjdGlvbiksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWVzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVmczwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVnczwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+dGhlIDMgcHJvY2Vzc29yIGNvbnRyb2wgcmVnaXN0ZXJzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWNyMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lY3IyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWNyMzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+dGhlIDYgZGVidWcgcmVnaXN0ZXJzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWRiMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZGIxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkYjI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkYjM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWRiNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWRiNzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+dGhlIDIgdGVzdCByZWdpc3RlcnMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldHI2PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV0cjc8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGxpPnRoZSA4IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIHN0YWNrICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXN0PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yIGVxdWl2YWxlbnRseQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3QoMCk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXN0KDEpPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzdCgyKTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3QoMyk8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVzdCg0KTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3QoNSk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXN0KDYpPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3QoNyk8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorVGhlc2UgcmVnaXN0ZXJzIGFyZSBvdmVybG9hZGVkIGJ5IDggTU1YIHJlZ2lzdGVycyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVtbTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVtbTE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JW1tMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lbW0zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVtbTQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JW1tNTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JW1tNjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lbW03PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT50aGUgOCBTU0UgcmVnaXN0ZXJzIHJlZ2lzdGVycyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV4bW0wPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV4bW0xPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV4bW0yPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4leG1tMzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4leG1tNDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4leG1tNTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4leG1tNjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4leG1tNzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8L3VsPgorCisgICA8cD5UaGUgQU1EIHg4Ni02NCBhcmNoaXRlY3R1cmUgZXh0ZW5kcyB0aGUgcmVnaXN0ZXIgc2V0IGJ5OgorCisgICAgIDx1bD4KKzxsaT5lbmhhbmNpbmcgdGhlIDggMzItYml0IHJlZ2lzdGVycyB0byA2NC1iaXQ6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXJheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAodGhlCithY2N1bXVsYXRvciksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXJieDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lcmN4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVyZHg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXJkaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXJzaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lcmJwPC9zcGFuPjwvc2FtcD4mcnNxdW87ICh0aGUgZnJhbWUgcG9pbnRlciksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXJzcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAodGhlIHN0YWNrCitwb2ludGVyKQorCisgICAgIDxsaT50aGUgOCBleHRlbmRlZCByZWdpc3RlcnMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lcjg8L3NwYW4+PC9zYW1wPiZyc3F1bzsmbmRhc2g7JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lcjE1PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT50aGUgOCAzMi1iaXQgbG93IGVuZHMgb2YgdGhlIGV4dGVuZGVkIHJlZ2lzdGVyczogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lcjhkPC9zcGFuPjwvc2FtcD4mcnNxdW87Jm5kYXNoOyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXIxNWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICA8bGk+dGhlIDggMTYtYml0IGxvdyBlbmRzIG9mIHRoZSBleHRlbmRlZCByZWdpc3RlcnM6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXI4dzwvc3Bhbj48L3NhbXA+JnJzcXVvOyZuZGFzaDsmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVyMTV3PC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGxpPnRoZSA4IDgtYml0IGxvdyBlbmRzIG9mIHRoZSBleHRlbmRlZCByZWdpc3RlcnM6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXI4Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOyZuZGFzaDsmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVyMTViPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPGxpPnRoZSA0IDgtYml0IHJlZ2lzdGVyczogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc2lsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkaWw8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWJwbDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lc3BsPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT50aGUgOCBkZWJ1ZyByZWdpc3RlcnM6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWRiODwvc3Bhbj48L3NhbXA+JnJzcXVvOyZuZGFzaDsmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkYjE1PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT50aGUgOCBTU0UgcmVnaXN0ZXJzOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV4bW04PC9zcGFuPjwvc2FtcD4mcnNxdW87Jm5kYXNoOyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXhtbTE1PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFNJTUQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFNJTUQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGFiNWE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkU0lNRC5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtU0lNRCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTM4Ni1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0IiB0aXRsZT0iaTM4Ni1GbG9hdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImkzODZfMDAyZExXUC5odG1sI2kzODZfMDAyZExXUCIgdGl0bGU9ImkzODYtTFdQIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaTM4Ni1TSU1EIj48L2E+Cis8YSBuYW1lPSJpMzg2XzAwMmRTSU1EIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImkzODZfMDAyZExXUC5odG1sI2kzODZfMDAyZExXUCI+aTM4Ni1MV1A8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij5pMzg2LUZsb2F0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTUuMTEgSW50ZWwncyBNTVggYW5kIEFNRCdzIDNETm93ISBTSU1EIE9wZXJhdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NTVhfMDAyYy1pMzg2LTEwNDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3QzRE5vd18wMDIxXzAwMmMtaTM4Ni0xMDQxIj48L2E+PGEgbmFtZT0iaW5kZXgtU0lNRF8wMDJjLWkzODYtMTA0MiI+PC9hPjxhIG5hbWU9ImluZGV4LU1NWF8wMDJjLXg4Nl8wMDJkNjQtMTA0MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdDNETm93XzAwMjFfMDAyYy14ODZfMDAyZDY0LTEwNDQiPjwvYT48YSBuYW1lPSJpbmRleC1TSU1EXzAwMmMteDg2XzAwMmQ2NC0xMDQ1Ij48L2E+Cis8Y29kZT5hczwvY29kZT4gc3VwcG9ydHMgSW50ZWwncyBNTVggaW5zdHJ1Y3Rpb24gc2V0IChTSU1ECitpbnN0cnVjdGlvbnMgZm9yIGludGVnZXIgZGF0YSksIGF2YWlsYWJsZSBvbiBJbnRlbCdzIFBlbnRpdW0gTU1YCitwcm9jZXNzb3JzIGFuZCBQZW50aXVtIElJIHByb2Nlc3NvcnMsIEFNRCdzIEs2IGFuZCBLNi0yIHByb2Nlc3NvcnMsCitDeXJpeCcgTTIgcHJvY2Vzc29yLCBhbmQgcHJvYmFibHkgb3RoZXJzLiAgSXQgYWxzbyBzdXBwb3J0cyBBTUQncyAzRE5vdyEgCitpbnN0cnVjdGlvbiBzZXQgKFNJTUQgaW5zdHJ1Y3Rpb25zIGZvciAzMi1iaXQgZmxvYXRpbmcgcG9pbnQgZGF0YSkKK2F2YWlsYWJsZSBvbiBBTUQncyBLNi0yIHByb2Nlc3NvciBhbmQgcG9zc2libHkgb3RoZXJzIGluIHRoZSBmdXR1cmUuCisKKyAgIDxwPkN1cnJlbnRseSwgPGNvZGU+YXM8L2NvZGU+IGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBmbG9hdGluZyBwb2ludAorU0lNRCwgS2F0bWFpIChLTkkpLgorCisgICA8cD5UaGUgZWlnaHQgNjQtYml0IE1NWCBvcGVyYW5kcywgYWxzbyB1c2VkIGJ5IDNETm93ISwgYXJlIGNhbGxlZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVtbTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVtbTE8L3NwYW4+PC9zYW1wPiZyc3F1bzssIC4uLiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVtbTc8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGV5IGNvbnRhaW4gZWlnaHQgOC1iaXQgaW50ZWdlcnMsIGZvdXIKKzE2LWJpdCBpbnRlZ2VycywgdHdvIDMyLWJpdCBpbnRlZ2Vycywgb25lIDY0LWJpdCBpbnRlZ2VyLCBvciB0d28gMzItYml0CitmbG9hdGluZyBwb2ludCB2YWx1ZXMuICBUaGUgTU1YIHJlZ2lzdGVycyBjYW5ub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lCithcyB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhY2suCisKKyAgIDxwPlNlZSBJbnRlbCBhbmQgQU1EIGRvY3VtZW50YXRpb24sIGtlZXBpbmcgaW4gbWluZCB0aGF0IHRoZSBvcGVyYW5kIG9yZGVyIGluCitpbnN0cnVjdGlvbnMgaXMgcmV2ZXJzZWQgZnJvbSB0aGUgSW50ZWwgc3ludGF4LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRTeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDNjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRTeW50YXguaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pMzg2LVN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTM4Ni1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpMzg2XzAwMmREaXJlY3RpdmVzLmh0bWwjaTM4Nl8wMDJkRGlyZWN0aXZlcyIgdGl0bGU9ImkzODYtRGlyZWN0aXZlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyIgdGl0bGU9ImkzODYtTW5lbW9uaWNzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaTM4Ni1TeW50YXgiPjwvYT4KKzxhIG5hbWU9ImkzODZfMDAyZFN5bnRheCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpMzg2XzAwMmRNbmVtb25pY3MiPmkzODYtTW5lbW9uaWNzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaTM4Nl8wMDJkRGlyZWN0aXZlcy5odG1sI2kzODZfMDAyZERpcmVjdGl2ZXMiPmkzODYtRGlyZWN0aXZlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCI+aTM4Ni1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjE1LjMgaTM4NiBTeW50YWN0aWNhbCBDb25zaWRlcmF0aW9uczwvaDQ+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+aTM4Ni1WYXJpYXRpb25zPC9hPjogICAgICAgICAgICBBVCZhbXA7VCBTeW50YXggdmVyc3VzIEludGVsIFN5bnRheAorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iaTM4Nl8wMDJkQ2hhcnMuaHRtbCNpMzg2XzAwMmRDaGFycyI+aTM4Ni1DaGFyczwvYT46ICAgICAgICAgICAgICAgICBTcGVjaWFsIENoYXJhY3RlcnMKKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFRCTS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkVEJNLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4MmJlZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2kzODZfMDAyZFRCTS5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtVEJNIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpMzg2LURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImkzODZfMDAyZEJNSS5odG1sI2kzODZfMDAyZEJNSSIgdGl0bGU9ImkzODYtQk1JIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaTM4Nl8wMDJkMTZiaXQuaHRtbCNpMzg2XzAwMmQxNmJpdCIgdGl0bGU9ImkzODYtMTZiaXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpMzg2LVRCTSI+PC9hPgorPGEgbmFtZT0iaTM4Nl8wMDJkVEJNIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImkzODZfMDAyZDE2Yml0Lmh0bWwjaTM4Nl8wMDJkMTZiaXQiPmkzODYtMTZiaXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpMzg2XzAwMmRCTUkuaHRtbCNpMzg2XzAwMmRCTUkiPmkzODYtQk1JPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTM4Nl8wMDJkRGVwZW5kZW50Lmh0bWwjaTM4Nl8wMDJkRGVwZW5kZW50Ij5pMzg2LURlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMTUuMTQgQU1EJ3MgVHJhaWxpbmcgQml0IE1hbmlwdWxhdGlvbiBJbnN0cnVjdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1UQk1fMDAyYy1pMzg2LTEwNTAiPjwvYT48YSBuYW1lPSJpbmRleC1UQk1fMDAyYy14ODZfMDAyZDY0LTEwNTEiPjwvYT4KKzxjb2RlPmFzPC9jb2RlPiBzdXBwb3J0cyBBTUQncyBUcmFpbGluZyBCaXQgTWFuaXB1bGF0aW9uIChUQk0pCitpbnN0cnVjdGlvbiBzZXQsIGF2YWlsYWJsZSBvbiBBTUQncyBCRFZFUjIgcHJvY2Vzc29ycyAoVHJpbml0eSBhbmQKK1ZpcGVyZmlzaCkuCisKKyAgIDxwPlRCTSBpbnN0cnVjdGlvbnMgcHJvdmlkZSBpbnN0cnVjdGlvbnMgaW1wbGVtZW50aW5nIGluZGl2aWR1YWwgYml0CittYW5pcHVsYXRpb24gb3BlcmF0aW9ucyBzdWNoIGFzIGlzb2xhdGluZywgbWFza2luZywgc2V0dGluZywgcmVzZXR0aW5nLAorY29tcGxlbWVudGluZywgYW5kIG9wZXJhdGlvbnMgb24gdHJhaWxpbmcgemVyb3MgYW5kIG9uZXMuCisKKzwhLS0gTmVlZCB0byBhZGQgYSBzcGVjaWZpY2F0aW9uIGNpdGF0aW9uIGhlcmUgd2hlbiBhdmFpbGFibGUuIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTM4Nl8wMDJkVmFyaWF0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NjU3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYtVmFyaWF0aW9ucyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iaTM4Nl8wMDJkU3ludGF4Lmh0bWwjaTM4Nl8wMDJkU3ludGF4IiB0aXRsZT0iaTM4Ni1TeW50YXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2XzAwMmRDaGFycy5odG1sI2kzODZfMDAyZENoYXJzIiB0aXRsZT0iaTM4Ni1DaGFycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtVmFyaWF0aW9ucyI+PC9hPgorPGEgbmFtZT0iaTM4Nl8wMDJkVmFyaWF0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpMzg2XzAwMmRDaGFycy5odG1sI2kzODZfMDAyZENoYXJzIj5pMzg2LUNoYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaTM4Nl8wMDJkU3ludGF4Lmh0bWwjaTM4Nl8wMDJkU3ludGF4Ij5pMzg2LVN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMTUuMy4xIEFUJmFtcDtUIFN5bnRheCB2ZXJzdXMgSW50ZWwgU3ludGF4PC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtaTM4Ni1pbnRlbF8wMDVmc3ludGF4LXBzZXVkby1vcC05MzMiPjwvYT48YSBuYW1lPSJpbmRleC1pbnRlbF8wMDVmc3ludGF4LXBzZXVkby1vcF8wMDJjLWkzODYtOTM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtaTM4Ni1hdHRfMDA1ZnN5bnRheC1wc2V1ZG8tb3AtOTM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXR0XzAwNWZzeW50YXgtcHNldWRvLW9wXzAwMmMtaTM4Ni05MzYiPjwvYT48YSBuYW1lPSJpbmRleC1pMzg2LXN5bnRheC1jb21wYXRpYmlsaXR5LTkzNyI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bnRheC1jb21wYXRpYmlsaXR5XzAwMmMtaTM4Ni05MzgiPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LWludGVsXzAwNWZzeW50YXgtcHNldWRvLW9wLTkzOSI+PC9hPjxhIG5hbWU9ImluZGV4LWludGVsXzAwNWZzeW50YXgtcHNldWRvLW9wXzAwMmMteDg2XzAwMmQ2NC05NDAiPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LWF0dF8wMDVmc3ludGF4LXBzZXVkby1vcC05NDEiPjwvYT48YSBuYW1lPSJpbmRleC1hdHRfMDA1ZnN5bnRheC1wc2V1ZG8tb3BfMDAyYy14ODZfMDAyZDY0LTk0MiI+PC9hPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtc3ludGF4LWNvbXBhdGliaWxpdHktOTQzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ludGF4LWNvbXBhdGliaWxpdHlfMDAyYy14ODZfMDAyZDY0LTk0NCI+PC9hPgorPGNvZGU+YXM8L2NvZGU+IG5vdyBzdXBwb3J0cyBhc3NlbWJseSB1c2luZyBJbnRlbCBhc3NlbWJsZXIgc3ludGF4LiAKKzxjb2RlPi5pbnRlbF9zeW50YXg8L2NvZGU+IHNlbGVjdHMgSW50ZWwgbW9kZSwgYW5kIDxjb2RlPi5hdHRfc3ludGF4PC9jb2RlPiBzd2l0Y2hlcworYmFjayB0byB0aGUgdXN1YWwgQVQmYW1wO1QgbW9kZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvdXRwdXQgb2YKKzxjb2RlPmdjYzwvY29kZT4uICBFaXRoZXIgb2YgdGhlc2UgZGlyZWN0aXZlcyBtYXkgaGF2ZSBhbiBvcHRpb25hbAorYXJndW1lbnQsIDxjb2RlPnByZWZpeDwvY29kZT4sIG9yIDxjb2RlPm5vcHJlZml4PC9jb2RlPiBzcGVjaWZ5aW5nIHdoZXRoZXIgcmVnaXN0ZXJzCityZXF1aXJlIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lPC9zcGFuPjwvc2FtcD4mcnNxdW87IHByZWZpeC4gIEFUJmFtcDtUIFN5c3RlbSBWLzM4NiBhc3NlbWJsZXIgc3ludGF4IGlzIHF1aXRlCitkaWZmZXJlbnQgZnJvbSBJbnRlbCBzeW50YXguICBXZSBtZW50aW9uIHRoZXNlIGRpZmZlcmVuY2VzIGJlY2F1c2UKK2FsbW9zdCBhbGwgODAzODYgZG9jdW1lbnRzIHVzZSBJbnRlbCBzeW50YXguICBOb3RhYmxlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSB0d28gc3ludGF4ZXMgYXJlOgorCisgICA8cD48YSBuYW1lPSJpbmRleC1pbW1lZGlhdGUtb3BlcmFuZHNfMDAyYy1pMzg2LTk0NSI+PC9hPjxhIG5hbWU9ImluZGV4LWkzODYtaW1tZWRpYXRlLW9wZXJhbmRzLTk0NiI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVyLW9wZXJhbmRzXzAwMmMtaTM4Ni05NDciPjwvYT48YSBuYW1lPSJpbmRleC1pMzg2LXJlZ2lzdGVyLW9wZXJhbmRzLTk0OCI+PC9hPjxhIG5hbWU9ImluZGV4LWp1bXBfMDAyZmNhbGwtb3BlcmFuZHNfMDAyYy1pMzg2LTk0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWkzODYtanVtcF8wMDJmY2FsbC1vcGVyYW5kcy05NTAiPjwvYT48YSBuYW1lPSJpbmRleC1vcGVyYW5kLWRlbGltaXRlcnNfMDAyYy1pMzg2LTk1MSI+PC9hPgorPGEgbmFtZT0iaW5kZXgtaW1tZWRpYXRlLW9wZXJhbmRzXzAwMmMteDg2XzAwMmQ2NC05NTIiPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LWltbWVkaWF0ZS1vcGVyYW5kcy05NTMiPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3Rlci1vcGVyYW5kc18wMDJjLXg4Nl8wMDJkNjQtOTU0Ij48L2E+PGEgbmFtZT0iaW5kZXgteDg2XzAwMmQ2NC1yZWdpc3Rlci1vcGVyYW5kcy05NTUiPjwvYT48YSBuYW1lPSJpbmRleC1qdW1wXzAwMmZjYWxsLW9wZXJhbmRzXzAwMmMteDg2XzAwMmQ2NC05NTYiPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LWp1bXBfMDAyZmNhbGwtb3BlcmFuZHMtOTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3BlcmFuZC1kZWxpbWl0ZXJzXzAwMmMteDg2XzAwMmQ2NC05NTgiPjwvYT4KKyAgICAgPHVsPgorPGxpPkFUJmFtcDtUIGltbWVkaWF0ZSBvcGVyYW5kcyBhcmUgcHJlY2VkZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87OyBJbnRlbCBpbW1lZGlhdGUKK29wZXJhbmRzIGFyZSB1bmRlbGltaXRlZCAoSW50ZWwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wdXNoIDQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgQVQmYW1wO1QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wdXNobCAkNDwvc3Bhbj48L3NhbXA+JnJzcXVvOykuIAorQVQmYW1wO1QgcmVnaXN0ZXIgb3BlcmFuZHMgYXJlIHByZWNlZGVkIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgSW50ZWwgcmVnaXN0ZXIgb3BlcmFuZHMKK2FyZSB1bmRlbGltaXRlZC4gIEFUJmFtcDtUIGFic29sdXRlIChhcyBvcHBvc2VkIHRvIFBDIHJlbGF0aXZlKSBqdW1wL2NhbGwKK29wZXJhbmRzIGFyZSBwcmVmaXhlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzs7IHRoZXkgYXJlIHVuZGVsaW1pdGVkIGluIEludGVsIHN5bnRheC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1pMzg2LXNvdXJjZV8wMDJjLWRlc3RpbmF0aW9uLW9wZXJhbmRzLTk1OSI+PC9hPjxhIG5hbWU9ImluZGV4LXNvdXJjZV8wMDJjLWRlc3RpbmF0aW9uLW9wZXJhbmRzXzAwM2ItaTM4Ni05NjAiPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LXNvdXJjZV8wMDJjLWRlc3RpbmF0aW9uLW9wZXJhbmRzLTk2MSI+PC9hPjxhIG5hbWU9ImluZGV4LXNvdXJjZV8wMDJjLWRlc3RpbmF0aW9uLW9wZXJhbmRzXzAwM2IteDg2XzAwMmQ2NC05NjIiPjwvYT48bGk+QVQmYW1wO1QgYW5kIEludGVsIHN5bnRheCB1c2UgdGhlIG9wcG9zaXRlIG9yZGVyIGZvciBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCitvcGVyYW5kcy4gIEludGVsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWRkIGVheCwgNDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFkZGwgJDQsICVlYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c291cmNlLCBkZXN0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbnZlbnRpb24gaXMgbWFpbnRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCitwcmV2aW91cyBVbml4IGFzc2VtYmxlcnMuICBOb3RlIHRoYXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ib3VuZDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnZscGdhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKK2luc3RydWN0aW9ucyB3aXRoIDIgaW1tZWRpYXRlIG9wZXJhbmRzLCBzdWNoIGFzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmVudGVyPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbnN0cnVjdGlvbiwgZG8gPGVtPm5vdDwvZW0+IGhhdmUgcmV2ZXJzZWQgb3JkZXIuICA8YSBocmVmPSJpMzg2XzAwMmRCdWdzLmh0bWwjaTM4Nl8wMDJkQnVncyI+aTM4Ni1CdWdzPC9hPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1tbmVtb25pYy1zdWZmaXhlc18wMDJjLWkzODYtOTYzIj48L2E+PGEgbmFtZT0iaW5kZXgtc2l6ZXMtb3BlcmFuZHNfMDAyYy1pMzg2LTk2NCI+PC9hPjxhIG5hbWU9ImluZGV4LWkzODYtc2l6ZS1zdWZmaXhlcy05NjUiPjwvYT48YSBuYW1lPSJpbmRleC1tbmVtb25pYy1zdWZmaXhlc18wMDJjLXg4Nl8wMDJkNjQtOTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2l6ZXMtb3BlcmFuZHNfMDAyYy14ODZfMDAyZDY0LTk2NyI+PC9hPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtc2l6ZS1zdWZmaXhlcy05NjgiPjwvYT48bGk+SW4gQVQmYW1wO1Qgc3ludGF4IHRoZSBzaXplIG9mIG1lbW9yeSBvcGVyYW5kcyBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIGxhc3QKK2NoYXJhY3RlciBvZiB0aGUgaW5zdHJ1Y3Rpb24gbW5lbW9uaWMuICBNbmVtb25pYyBzdWZmaXhlcyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnc8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5xPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNwZWNpZnkgYnl0ZSAoOC1iaXQpLCB3b3JkICgxNi1iaXQpLCBsb25nCisoMzItYml0KSBhbmQgcXVhZHJ1cGxlIHdvcmQgKDY0LWJpdCkgbWVtb3J5IHJlZmVyZW5jZXMuICBJbnRlbCBzeW50YXggYWNjb21wbGlzaGVzCit0aGlzIGJ5IHByZWZpeGluZyBtZW1vcnkgb3BlcmFuZHMgKDxlbT5ub3Q8L2VtPiB0aGUgaW5zdHJ1Y3Rpb24gbW5lbW9uaWNzKSB3aXRoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJ5dGUgcHRyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPndvcmQgcHRyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmR3b3JkIHB0cjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5xd29yZCBwdHI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaHVzLAorSW50ZWwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3YgYWwsIGJ5dGUgcHRyIDwvc3Bhbj48dmFyPmZvbzwvdmFyPjwvc2FtcD4mcnNxdW87IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92YiA8L3NwYW4+PHZhcj5mb288L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+LCAlYWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gQVQmYW1wO1QKK3N5bnRheC4KKworICAgICA8cD5JbiA2NC1iaXQgY29kZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3ZhYnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FuIGJlIHVzZWQgdG8gZW5jb2RlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1vdjwvc3Bhbj48L3NhbXA+JnJzcXVvOworaW5zdHJ1Y3Rpb24gd2l0aCB0aGUgNjQtYml0IGRpc3BsYWNlbWVudCBvciBpbW1lZGlhdGUgb3BlcmFuZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1yZXR1cm4taW5zdHJ1Y3Rpb25zXzAwMmMtaTM4Ni05NjkiPjwvYT48YSBuYW1lPSJpbmRleC1pMzg2LWp1bXBfMDAyYy1jYWxsXzAwMmMtcmV0dXJuLTk3MCI+PC9hPjxhIG5hbWU9ImluZGV4LXJldHVybi1pbnN0cnVjdGlvbnNfMDAyYy14ODZfMDAyZDY0LTk3MSI+PC9hPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtanVtcF8wMDJjLWNhbGxfMDAyYy1yZXR1cm4tOTcyIj48L2E+PGxpPkltbWVkaWF0ZSBmb3JtIGxvbmcganVtcHMgYW5kIGNhbGxzIGFyZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sY2FsbC9sam1wICQ8L3NwYW4+PHZhcj5zZWN0aW9uPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiwgJDwvc3Bhbj48dmFyPm9mZnNldDwvdmFyPjwvc2FtcD4mcnNxdW87IGluIEFUJmFtcDtUIHN5bnRheDsgdGhlCitJbnRlbCBzeW50YXggaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbC9qbXAgZmFyIDwvc3Bhbj48dmFyPnNlY3Rpb248L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Ojwvc3Bhbj48dmFyPm9mZnNldDwvdmFyPjwvc2FtcD4mcnNxdW87LiAgQWxzbywgdGhlIGZhciByZXR1cm4KK2luc3RydWN0aW9uCitpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxyZXQgJDwvc3Bhbj48dmFyPnN0YWNrLWFkanVzdDwvdmFyPjwvc2FtcD4mcnNxdW87IGluIEFUJmFtcDtUIHN5bnRheDsgSW50ZWwgc3ludGF4IGlzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJldCBmYXIgPC9zcGFuPjx2YXI+c3RhY2stYWRqdXN0PC92YXI+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbnNfMDAyYy1pMzg2LTk3MyI+PC9hPjxhIG5hbWU9ImluZGV4LWkzODYtc2VjdGlvbnMtOTc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbnNfMDAyYy14ODZfMDAyZDY0LTk3NSI+PC9hPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtc2VjdGlvbnMtOTc2Ij48L2E+PGxpPlRoZSBBVCZhbXA7VCBhc3NlbWJsZXIgZG9lcyBub3QgcHJvdmlkZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBzZWN0aW9uCitwcm9ncmFtcy4gIFVuaXggc3R5bGUgc3lzdGVtcyBleHBlY3QgYWxsIHByb2dyYW1zIHRvIGJlIHNpbmdsZSBzZWN0aW9ucy4gCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pODYwXzAwMmRDaGFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTg2MF8wMDJkQ2hhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDlkZWQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTg2MF8wMDJkQ2hhcnMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pODYwLUNoYXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTeW50YXgtb2YtaTg2MC5odG1sI1N5bnRheC1vZi1pODYwIiB0aXRsZT0iU3ludGF4IG9mIGk4NjAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpODYwLUNoYXJzIj48L2E+Cis8YSBuYW1lPSJpODYwXzAwMmRDaGFycyI+PC9hPgorPHA+CitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN5bnRheC1vZi1pODYwLmh0bWwjU3ludGF4LW9mLWk4NjAiPlN5bnRheCBvZiBpODYwPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4xNi41LjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLWk4NjAtMTA3NyI+PC9hPjxhIG5hbWU9ImluZGV4LWk4NjAtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xMDc4Ij48L2E+VGhlIHByZXNlbmNlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcmluZyBhbnl3aGVyZSBvbiBhIGxpbmUgaW5kaWNhdGVzIHRoZQorc3RhcnQgb2YgYSBjb21tZW50IHRoYXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoYXQgbGluZS4KKworICAgPHA+SWYgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgbGluZSB0aGVuIHRoZSB3aG9sZQorbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgbGluZSBjYW4gYWxzbyBiZSBhCitsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtaTg2MC0xMDc5Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLWk4NjAtMTA4MCI+PC9hPjxhIG5hbWU9ImluZGV4LWk4NjAtbGluZS1zZXBhcmF0b3ItMTA4MSI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHN0YXRlbWVudHMgb24gdGhlIHNhbWUKK2xpbmUuCisKKzwhLS0gQ29weXJpZ2h0IDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDIwMDIsIDIwMDYsIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTg2MF8wMDJkRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pODYwXzAwMmREZXBlbmRlbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE5M2E5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTg2MF8wMDJkRGVwZW5kZW50Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTg2MC1EZXBlbmRlbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVuY2llcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCIgdGl0bGU9ImkzODYtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaTk2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTk2MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iaTk2MC1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpODYwLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iaTg2MF8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Imk5NjBfMDAyZERlcGVuZGVudC5odG1sI2k5NjBfMDAyZERlcGVuZGVudCI+aTk2MC1EZXBlbmRlbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpMzg2XzAwMmREZXBlbmRlbnQuaHRtbCNpMzg2XzAwMmREZXBlbmRlbnQiPmkzODYtRGVwZW5kZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjE2IEludGVsIGk4NjAgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtaTg2MC1zdXBwb3J0LTEwNjkiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik5vdGVzXzAwMmRpODYwLmh0bWwjTm90ZXNfMDAyZGk4NjAiPk5vdGVzLWk4NjA8L2E+OiAgICAgICAgICAgICAgICAgICBpODYwIE5vdGVzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJPcHRpb25zXzAwMmRpODYwLmh0bWwjT3B0aW9uc18wMDJkaTg2MCI+T3B0aW9ucy1pODYwPC9hPjogICAgICAgICAgICAgICAgIGk4NjAgQ29tbWFuZC1saW5lIE9wdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk4NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpODYwIj5EaXJlY3RpdmVzLWk4NjA8L2E+OiAgICAgICAgICAgICAgaTg2MCBNYWNoaW5lIERpcmVjdGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9Ik9wY29kZXMtZm9yLWk4NjAuaHRtbCNPcGNvZGVzLWZvci1pODYwIj5PcGNvZGVzIGZvciBpODYwPC9hPjogICAgICAgICAgICAgaTg2MCBPcGNvZGVzCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJTeW50YXgtb2YtaTg2MC5odG1sI1N5bnRheC1vZi1pODYwIj5TeW50YXggb2YgaTg2MDwvYT46ICAgICAgICAgICAgICAgaTg2MCBTeW50YXgKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2k5NjBfMDAyZENoYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pOTYwXzAwMmRDaGFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YmQ3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9pOTYwXzAwMmRDaGFycy5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmk5NjAtQ2hhcnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN5bnRheC1vZi1pOTYwLmh0bWwjU3ludGF4LW9mLWk5NjAiIHRpdGxlPSJTeW50YXggb2YgaTk2MCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imk5NjAtQ2hhcnMiPjwvYT4KKzxhIG5hbWU9Imk5NjBfMDAyZENoYXJzIj48L2E+Cis8cD4KK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3ludGF4LW9mLWk5NjAuaHRtbCNTeW50YXgtb2YtaTk2MCI+U3ludGF4IG9mIGk5NjA8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjE3LjUuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyXzAwMmMtaTk2MC0xMTEwIj48L2E+PGEgbmFtZT0iaW5kZXgtaTk2MC1saW5lLWNvbW1lbnQtY2hhcmFjdGVyLTExMTEiPjwvYT5UaGUgcHJlc2VuY2Ugb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb24gYSBsaW5lIGluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50Cit0aGF0IGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLgorCisgICA8cD5JZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lLCB0aGUgd2hvbGUgbGluZQoraXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY2FuIGFsc28gYmUgYQorbG9naWNhbCBsaW5lIG51bWJlciBkaXJlY3RpdmUgKHNlZSA8YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj5Db21tZW50czwvYT4pIG9yIGEKK3ByZXByb2Nlc3NvciBjb250cm9sIGNvbW1hbmQgKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLmh0bWwjUHJlcHJvY2Vzc2luZyI+UHJlcHJvY2Vzc2luZzwvYT4pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1saW5lLXNlcGFyYXRvcl8wMDJjLWk5NjAtMTExMiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudC1zZXBhcmF0b3JfMDAyYy1pOTYwLTExMTMiPjwvYT48YSBuYW1lPSJpbmRleC1pOTYwLWxpbmUtc2VwYXJhdG9yLTExMTQiPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj47PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3RlciBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZSBzdGF0ZW1lbnRzIG9uIHRoZSBzYW1lCitsaW5lLgorCis8IS0tIENvcHlyaWdodCAyMDAyLCAyMDAzLCAyMDA1IC0tPgorPCEtLSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIENvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0FTIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBhcy50ZXhpbmZvLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2k5NjBfMDAyZERlcGVuZGVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaTk2MF8wMDJkRGVwZW5kZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRlOGIyMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2k5NjBfMDAyZERlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmk5NjAtRGVwZW5kZW50IC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbmNpZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpODYwXzAwMmREZXBlbmRlbnQuaHRtbCNpODYwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJpODYwLURlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Lmh0bWwjSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQiIHRpdGxlPSJJQS02NC1EZXBlbmRlbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpOTYwLURlcGVuZGVudCI+PC9hPgorPGEgbmFtZT0iaTk2MF8wMDJkRGVwZW5kZW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklBXzAwMmQ2NF8wMDJkRGVwZW5kZW50Lmh0bWwjSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQiPklBLTY0LURlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Imk4NjBfMDAyZERlcGVuZGVudC5odG1sI2k4NjBfMDAyZERlcGVuZGVudCI+aTg2MC1EZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVuY2llcy5odG1sI01hY2hpbmUtRGVwZW5kZW5jaWVzIj5NYWNoaW5lIERlcGVuZGVuY2llczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMTcgSW50ZWwgODA5NjAgRGVwZW5kZW50IEZlYXR1cmVzPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtaTk2MC1zdXBwb3J0LTEwODIiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik9wdGlvbnNfMDAyZGk5NjAuaHRtbCNPcHRpb25zXzAwMmRpOTYwIj5PcHRpb25zLWk5NjA8L2E+OiAgICAgICAgICAgICAgICAgaTk2MCBDb21tYW5kLWxpbmUgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAuaHRtbCNGbG9hdGluZy1Qb2ludF8wMDJkaTk2MCI+RmxvYXRpbmcgUG9pbnQtaTk2MDwvYT46ICAgICAgICAgIEZsb2F0aW5nIFBvaW50Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJEaXJlY3RpdmVzXzAwMmRpOTYwLmh0bWwjRGlyZWN0aXZlc18wMDJkaTk2MCI+RGlyZWN0aXZlcy1pOTYwPC9hPjogICAgICAgICAgICAgIGk5NjAgTWFjaGluZSBEaXJlY3RpdmVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJPcGNvZGVzLWZvci1pOTYwLmh0bWwjT3Bjb2Rlcy1mb3ItaTk2MCI+T3Bjb2RlcyBmb3IgaTk2MDwvYT46ICAgICAgICAgICAgIGk5NjAgT3Bjb2RlcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iU3ludGF4LW9mLWk5NjAuaHRtbCNTeW50YXgtb2YtaTk2MCI+U3ludGF4IG9mIGk5NjA8L2E+OiAgICAgICAgICAgICAgIGk5NjAgU3ludGF4Cis8L3VsPgorCis8IS0tIEZJWE1FISBBZGQgU3ludGF4IHNlYyB3aXRoIGRpc2N1c3Npb24gb2YgYml0ZmllbGRzIGhlcmUsIGF0IGxlYXN0IHNvIC0tPgorPCEtLSBsb25nIGFzIHRoZXkncmUgbm90IHR1cm5lZCBvbiBmb3Igb3RoZXIgbWFjaGluZXMgdGhhbiA5NjAuIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvaW5kZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzNDc0OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw5NDUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iI1RvcCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgIkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxIGNsYXNzPSJzZXR0aXRsZSI+VXNpbmcgYXM8L2gxPgorPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGgyPlRhYmxlIG9mIENvbnRlbnRzPC9oMj4KKzx1bD4KKzxsaT48YSBuYW1lPSJ0b2NfVG9wIiBocmVmPSJpbmRleC5odG1sI1RvcCI+VXNpbmcgYXM8L2E+Cis8bGk+PGEgbmFtZT0idG9jX092ZXJ2aWV3IiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij4xIE92ZXJ2aWV3PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik1hbnVhbC5odG1sI01hbnVhbCI+MS4xIFN0cnVjdHVyZSBvZiB0aGlzIE1hbnVhbDwvYT4KKzxsaT48YSBocmVmPSJHTlUtQXNzZW1ibGVyLmh0bWwjR05VLUFzc2VtYmxlciI+MS4yIFRoZSBHTlUgQXNzZW1ibGVyPC9hPgorPGxpPjxhIGhyZWY9Ik9iamVjdC1Gb3JtYXRzLmh0bWwjT2JqZWN0LUZvcm1hdHMiPjEuMyBPYmplY3QgRmlsZSBGb3JtYXRzPC9hPgorPGxpPjxhIGhyZWY9IkNvbW1hbmQtTGluZS5odG1sI0NvbW1hbmQtTGluZSI+MS40IENvbW1hbmQgTGluZTwvYT4KKzxsaT48YSBocmVmPSJJbnB1dC1GaWxlcy5odG1sI0lucHV0LUZpbGVzIj4xLjUgSW5wdXQgRmlsZXM8L2E+Cis8bGk+PGEgaHJlZj0iT2JqZWN0Lmh0bWwjT2JqZWN0Ij4xLjYgT3V0cHV0IChPYmplY3QpIEZpbGU8L2E+Cis8bGk+PGEgaHJlZj0iRXJyb3JzLmh0bWwjRXJyb3JzIj4xLjcgRXJyb3IgYW5kIFdhcm5pbmcgTWVzc2FnZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0ludm9raW5nIiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj4yIENvbW1hbmQtTGluZSBPcHRpb25zPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9ImEuaHRtbCNhIj4yLjEgRW5hYmxlIExpc3RpbmdzOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYVtjZGdobG5zXTwvc3Bhbj48L3NhbXA+PC9hPgorPGxpPjxhIGhyZWY9ImFsdGVybmF0ZS5odG1sI2FsdGVybmF0ZSI+Mi4yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYWx0ZXJuYXRlPC9zcGFuPjwvc2FtcD48L2E+Cis8bGk+PGEgaHJlZj0iRC5odG1sI0QiPjIuMyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+PC9hPgorPGxpPjxhIGhyZWY9ImYuaHRtbCNmIj4yLjQgV29yayBGYXN0ZXI6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mPC9zcGFuPjwvc2FtcD48L2E+Cis8bGk+PGEgaHJlZj0iSS5odG1sI0kiPjIuNSA8Y29kZT4uaW5jbHVkZTwvY29kZT4gU2VhcmNoIFBhdGg6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gPHZhcj5wYXRoPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IksuaHRtbCNLIj4yLjYgRGlmZmVyZW5jZSBUYWJsZXM6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1LPC9zcGFuPjwvc2FtcD48L2E+Cis8bGk+PGEgaHJlZj0iTC5odG1sI0wiPjIuNyBJbmNsdWRlIExvY2FsIFN5bWJvbHM6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1MPC9zcGFuPjwvc2FtcD48L2E+Cis8bGk+PGEgaHJlZj0ibGlzdGluZy5odG1sI2xpc3RpbmciPjIuOCBDb25maWd1cmluZyBsaXN0aW5nIG91dHB1dDogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1saXN0aW5nPC9zcGFuPjwvc2FtcD48L2E+Cis8bGk+PGEgaHJlZj0iTS5odG1sI00iPjIuOSBBc3NlbWJsZSBpbiBNUkkgQ29tcGF0aWJpbGl0eSBNb2RlOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+PC9hPgorPGxpPjxhIGhyZWY9Ik1ELmh0bWwjTUQiPjIuMTAgRGVwZW5kZW5jeSBUcmFja2luZzogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1NRDwvc3Bhbj48L3NhbXA+PC9hPgorPGxpPjxhIGhyZWY9Im8uaHRtbCNvIj4yLjExIE5hbWUgdGhlIE9iamVjdCBGaWxlOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbzwvc3Bhbj48L3NhbXA+PC9hPgorPGxpPjxhIGhyZWY9IlIuaHRtbCNSIj4yLjEyIEpvaW4gRGF0YSBhbmQgVGV4dCBTZWN0aW9uczogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVI8L3NwYW4+PC9zYW1wPjwvYT4KKzxsaT48YSBocmVmPSJzdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcyI+Mi4xMyBEaXNwbGF5IEFzc2VtYmx5IFN0YXRpc3RpY3M6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RhdGlzdGljczwvc3Bhbj48L3NhbXA+PC9hPgorPGxpPjxhIGhyZWY9InRyYWRpdGlvbmFsXzAwMmRmb3JtYXQuaHRtbCN0cmFkaXRpb25hbF8wMDJkZm9ybWF0Ij4yLjE0IENvbXBhdGlibGUgT3V0cHV0OiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRyYWRpdGlvbmFsLWZvcm1hdDwvc3Bhbj48L3NhbXA+PC9hPgorPGxpPjxhIGhyZWY9InYuaHRtbCN2Ij4yLjE1IEFubm91bmNlIFZlcnNpb246IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi12PC9zcGFuPjwvc2FtcD48L2E+Cis8bGk+PGEgaHJlZj0iVy5odG1sI1ciPjIuMTYgQ29udHJvbCBXYXJuaW5nczogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVc8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13YXJuPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8td2Fybjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZhdGFsLXdhcm5pbmdzPC9zcGFuPjwvc2FtcD48L2E+Cis8bGk+PGEgaHJlZj0iWi5odG1sI1oiPjIuMTcgR2VuZXJhdGUgT2JqZWN0IEZpbGUgaW4gU3BpdGUgb2YgRXJyb3JzOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tWjwvc3Bhbj48L3NhbXA+PC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19TeW50YXgiIGhyZWY9IlN5bnRheC5odG1sI1N5bnRheCI+MyBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy5odG1sI1ByZXByb2Nlc3NpbmciPjMuMSBQcmVwcm9jZXNzaW5nPC9hPgorPGxpPjxhIGhyZWY9IldoaXRlc3BhY2UuaHRtbCNXaGl0ZXNwYWNlIj4zLjIgV2hpdGVzcGFjZTwvYT4KKzxsaT48YSBocmVmPSJDb21tZW50cy5odG1sI0NvbW1lbnRzIj4zLjMgQ29tbWVudHM8L2E+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLUludHJvLmh0bWwjU3ltYm9sLUludHJvIj4zLjQgU3ltYm9sczwvYT4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnRzLmh0bWwjU3RhdGVtZW50cyI+My41IFN0YXRlbWVudHM8L2E+Cis8bGk+PGEgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIj4zLjYgQ29uc3RhbnRzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkNoYXJhY3RlcnMuaHRtbCNDaGFyYWN0ZXJzIj4zLjYuMSBDaGFyYWN0ZXIgQ29uc3RhbnRzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj4zLjYuMS4xIFN0cmluZ3M8L2E+Cis8bGk+PGEgaHJlZj0iQ2hhcnMuaHRtbCNDaGFycyI+My42LjEuMiBDaGFyYWN0ZXJzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik51bWJlcnMuaHRtbCNOdW1iZXJzIj4zLjYuMiBOdW1iZXIgQ29uc3RhbnRzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkludGVnZXJzLmh0bWwjSW50ZWdlcnMiPjMuNi4yLjEgSW50ZWdlcnM8L2E+Cis8bGk+PGEgaHJlZj0iQmlnbnVtcy5odG1sI0JpZ251bXMiPjMuNi4yLjIgQmlnbnVtczwvYT4KKzxsaT48YSBocmVmPSJGbG9udW1zLmh0bWwjRmxvbnVtcyI+My42LjIuMyBGbG9udW1zPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19TZWN0aW9ucyIgaHJlZj0iU2VjdGlvbnMuaHRtbCNTZWN0aW9ucyI+NCBTZWN0aW9ucyBhbmQgUmVsb2NhdGlvbjwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTZWNzLUJhY2tncm91bmQuaHRtbCNTZWNzLUJhY2tncm91bmQiPjQuMSBCYWNrZ3JvdW5kPC9hPgorPGxpPjxhIGhyZWY9IkxkLVNlY3Rpb25zLmh0bWwjTGQtU2VjdGlvbnMiPjQuMiBMaW5rZXIgU2VjdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iQXMtU2VjdGlvbnMuaHRtbCNBcy1TZWN0aW9ucyI+NC4zIEFzc2VtYmxlciBJbnRlcm5hbCBTZWN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJTdWJfMDAyZFNlY3Rpb25zLmh0bWwjU3ViXzAwMmRTZWN0aW9ucyI+NC40IFN1Yi1TZWN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJic3MuaHRtbCNic3MiPjQuNSBic3MgU2VjdGlvbjwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfU3ltYm9scyIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiPjUgU3ltYm9sczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJMYWJlbHMuaHRtbCNMYWJlbHMiPjUuMSBMYWJlbHM8L2E+Cis8bGk+PGEgaHJlZj0iU2V0dGluZy1TeW1ib2xzLmh0bWwjU2V0dGluZy1TeW1ib2xzIj41LjIgR2l2aW5nIFN5bWJvbHMgT3RoZXIgVmFsdWVzPC9hPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1OYW1lcy5odG1sI1N5bWJvbC1OYW1lcyI+NS4zIFN5bWJvbCBOYW1lczwvYT4KKzxsaT48YSBocmVmPSJEb3QuaHRtbCNEb3QiPjUuNCBUaGUgU3BlY2lhbCBEb3QgU3ltYm9sPC9hPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1BdHRyaWJ1dGVzLmh0bWwjU3ltYm9sLUF0dHJpYnV0ZXMiPjUuNSBTeW1ib2wgQXR0cmlidXRlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTeW1ib2wtVmFsdWUuaHRtbCNTeW1ib2wtVmFsdWUiPjUuNS4xIFZhbHVlPC9hPgorPGxpPjxhIGhyZWY9IlN5bWJvbC1UeXBlLmh0bWwjU3ltYm9sLVR5cGUiPjUuNS4yIFR5cGU8L2E+Cis8bGk+PGEgaHJlZj0iYV8wMDJlb3V0LVN5bWJvbHMuaHRtbCNhXzAwMmVvdXQtU3ltYm9scyI+NS41LjMgU3ltYm9sIEF0dHJpYnV0ZXM6IDxjb2RlPmEub3V0PC9jb2RlPjwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTeW1ib2wtRGVzYy5odG1sI1N5bWJvbC1EZXNjIj41LjUuMy4xIERlc2NyaXB0b3I8L2E+Cis8bGk+PGEgaHJlZj0iU3ltYm9sLU90aGVyLmh0bWwjU3ltYm9sLU90aGVyIj41LjUuMy4yIE90aGVyPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkNPRkYtU3ltYm9scy5odG1sI0NPRkYtU3ltYm9scyI+NS41LjQgU3ltYm9sIEF0dHJpYnV0ZXMgZm9yIENPRkY8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQ09GRi1TeW1ib2xzLmh0bWwjQ09GRi1TeW1ib2xzIj41LjUuNC4xIFByaW1hcnkgQXR0cmlidXRlczwvYT4KKzxsaT48YSBocmVmPSJDT0ZGLVN5bWJvbHMuaHRtbCNDT0ZGLVN5bWJvbHMiPjUuNS40LjIgQXV4aWxpYXJ5IEF0dHJpYnV0ZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iU09NLVN5bWJvbHMuaHRtbCNTT00tU3ltYm9scyI+NS41LjUgU3ltYm9sIEF0dHJpYnV0ZXMgZm9yIFNPTTwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfRXhwcmVzc2lvbnMiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPjYgRXhwcmVzc2lvbnM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iRW1wdHktRXhwcnMuaHRtbCNFbXB0eS1FeHBycyI+Ni4xIEVtcHR5IEV4cHJlc3Npb25zPC9hPgorPGxpPjxhIGhyZWY9IkludGVnZXItRXhwcnMuaHRtbCNJbnRlZ2VyLUV4cHJzIj42LjIgSW50ZWdlciBFeHByZXNzaW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBcmd1bWVudHMuaHRtbCNBcmd1bWVudHMiPjYuMi4xIEFyZ3VtZW50czwvYT4KKzxsaT48YSBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiPjYuMi4yIE9wZXJhdG9yczwvYT4KKzxsaT48YSBocmVmPSJQcmVmaXgtT3BzLmh0bWwjUHJlZml4LU9wcyI+Ni4yLjMgUHJlZml4IE9wZXJhdG9yPC9hPgorPGxpPjxhIGhyZWY9IkluZml4LU9wcy5odG1sI0luZml4LU9wcyI+Ni4yLjQgSW5maXggT3BlcmF0b3JzPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19Qc2V1ZG8tT3BzIiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+NyBBc3NlbWJsZXIgRGlyZWN0aXZlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBYm9ydC5odG1sI0Fib3J0Ij43LjEgPGNvZGU+LmFib3J0PC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJBQk9SVC1fMDAyOENPRkZfMDAyOS5odG1sI0FCT1JULV8wMDI4Q09GRl8wMDI5Ij43LjIgPGNvZGU+LkFCT1JUPC9jb2RlPiAoQ09GRik8L2E+Cis8bGk+PGEgaHJlZj0iQWxpZ24uaHRtbCNBbGlnbiI+Ny4zIDxjb2RlPi5hbGlnbiA8L2NvZGU+PHZhcj5hYnMtZXhwcjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YWJzLWV4cHI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkFsdG1hY3JvLmh0bWwjQWx0bWFjcm8iPjcuNCA8Y29kZT4uYWx0bWFjcm88L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkFzY2lpLmh0bWwjQXNjaWkiPjcuNSA8Y29kZT4uYXNjaWkgIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPjwvYT4KKzxsaT48YSBocmVmPSJBc2Npei5odG1sI0FzY2l6Ij43LjYgPGNvZGU+LmFzY2l6ICI8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48Y29kZT4iPC9jb2RlPjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD48L2E+Cis8bGk+PGEgaHJlZj0iQmFsaWduLmh0bWwjQmFsaWduIj43LjcgPGNvZGU+LmJhbGlnblt3bF0gPC9jb2RlPjx2YXI+YWJzLWV4cHI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hYnMtZXhwcjwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJCdW5kbGUtZGlyZWN0aXZlcy5odG1sI0J1bmRsZS1kaXJlY3RpdmVzIj43LjggPGNvZGU+LmJ1bmRsZV9hbGlnbl9tb2RlIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkJ1bmRsZS1kaXJlY3RpdmVzLmh0bWwjQnVuZGxlLWRpcmVjdGl2ZXMiPjcuOSA8Y29kZT4uYnVuZGxlX2xvY2s8L2NvZGU+IGFuZCA8Y29kZT4uYnVuZGxlX3VubG9jazwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iQnl0ZS5odG1sI0J5dGUiPjcuMTAgPGNvZGU+LmJ5dGUgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Ny4xMSA8Y29kZT4uY2ZpX3NlY3Rpb25zIDwvY29kZT48dmFyPnNlY3Rpb25fbGlzdDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj43LjEyIDxjb2RlPi5jZmlfc3RhcnRwcm9jIFtzaW1wbGVdPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj43LjEzIDxjb2RlPi5jZmlfZW5kcHJvYzwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Ny4xNCA8Y29kZT4uY2ZpX3BlcnNvbmFsaXR5IDwvY29kZT48dmFyPmVuY29kaW5nPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPmV4cDwvdmFyPjxjb2RlPl08L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMTUgPGNvZGU+LmNmaV9sc2RhIDwvY29kZT48dmFyPmVuY29kaW5nPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPmV4cDwvdmFyPjxjb2RlPl08L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMTYgPGNvZGU+LmNmaV9kZWZfY2ZhIDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5vZmZzZXQ8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Ny4xNyA8Y29kZT4uY2ZpX2RlZl9jZmFfcmVnaXN0ZXIgPC9jb2RlPjx2YXI+cmVnaXN0ZXI8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Ny4xOCA8Y29kZT4uY2ZpX2RlZl9jZmFfb2Zmc2V0IDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj43LjE5IDxjb2RlPi5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgPC9jb2RlPjx2YXI+b2Zmc2V0PC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMjAgPGNvZGU+LmNmaV9vZmZzZXQgPC9jb2RlPjx2YXI+cmVnaXN0ZXI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj43LjIxIDxjb2RlPi5jZmlfcmVsX29mZnNldCA8L2NvZGU+PHZhcj5yZWdpc3RlcjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+b2Zmc2V0PC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMjIgPGNvZGU+LmNmaV9yZWdpc3RlciA8L2NvZGU+PHZhcj5yZWdpc3RlcjE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnJlZ2lzdGVyMjwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj43LjIzIDxjb2RlPi5jZmlfcmVzdG9yZSA8L2NvZGU+PHZhcj5yZWdpc3RlcjwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJDRkktZGlyZWN0aXZlcy5odG1sI0NGSS1kaXJlY3RpdmVzIj43LjI0IDxjb2RlPi5jZmlfdW5kZWZpbmVkIDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMjUgPGNvZGU+LmNmaV9zYW1lX3ZhbHVlIDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMjYgPGNvZGU+LmNmaV9yZW1lbWJlcl9zdGF0ZTwvY29kZT4sPC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMjcgPGNvZGU+LmNmaV9yZXR1cm5fY29sdW1uIDwvY29kZT48dmFyPnJlZ2lzdGVyPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMjggPGNvZGU+LmNmaV9zaWduYWxfZnJhbWU8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkNGSS1kaXJlY3RpdmVzLmh0bWwjQ0ZJLWRpcmVjdGl2ZXMiPjcuMjkgPGNvZGU+LmNmaV93aW5kb3dfc2F2ZTwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Ny4zMCA8Y29kZT4uY2ZpX2VzY2FwZTwvY29kZT4gPHZhcj5leHByZXNzaW9uPC92YXI+WywgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPl08L2E+Cis8bGk+PGEgaHJlZj0iQ0ZJLWRpcmVjdGl2ZXMuaHRtbCNDRkktZGlyZWN0aXZlcyI+Ny4zMSA8Y29kZT4uY2ZpX3ZhbF9lbmNvZGVkX2FkZHIgPC9jb2RlPjx2YXI+cmVnaXN0ZXI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmVuY29kaW5nPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5sYWJlbDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJDb21tLmh0bWwjQ29tbSI+Ny4zMiA8Y29kZT4uY29tbSA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gLCA8L2NvZGU+PHZhcj5sZW5ndGg8L3Zhcj4gPC9hPgorPGxpPjxhIGhyZWY9IkRhdGEuaHRtbCNEYXRhIj43LjMzIDxjb2RlPi5kYXRhIDwvY29kZT48dmFyPnN1YnNlY3Rpb248L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iRGVmLmh0bWwjRGVmIj43LjM0IDxjb2RlPi5kZWYgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJEZXNjLmh0bWwjRGVzYyI+Ny4zNSA8Y29kZT4uZGVzYyA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmFicy1leHByZXNzaW9uPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkRpbS5odG1sI0RpbSI+Ny4zNiA8Y29kZT4uZGltPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJEb3VibGUuaHRtbCNEb3VibGUiPjcuMzcgPGNvZGU+LmRvdWJsZSA8L2NvZGU+PHZhcj5mbG9udW1zPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkVqZWN0Lmh0bWwjRWplY3QiPjcuMzggPGNvZGU+LmVqZWN0PC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJFbHNlLmh0bWwjRWxzZSI+Ny4zOSA8Y29kZT4uZWxzZTwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iRWxzZWlmLmh0bWwjRWxzZWlmIj43LjQwIDxjb2RlPi5lbHNlaWY8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkVuZC5odG1sI0VuZCI+Ny40MSA8Y29kZT4uZW5kPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJFbmRlZi5odG1sI0VuZGVmIj43LjQyIDxjb2RlPi5lbmRlZjwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iRW5kZnVuYy5odG1sI0VuZGZ1bmMiPjcuNDMgPGNvZGU+LmVuZGZ1bmM8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkVuZGlmLmh0bWwjRW5kaWYiPjcuNDQgPGNvZGU+LmVuZGlmPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJFcXUuaHRtbCNFcXUiPjcuNDUgPGNvZGU+LmVxdSA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iRXF1aXYuaHRtbCNFcXVpdiI+Ny40NiA8Y29kZT4uZXF1aXYgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkVxdi5odG1sI0VxdiI+Ny40NyA8Y29kZT4uZXF2IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJFcnIuaHRtbCNFcnIiPjcuNDggPGNvZGU+LmVycjwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iRXJyb3IuaHRtbCNFcnJvciI+Ny40OSA8Y29kZT4uZXJyb3IgIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkV4aXRtLmh0bWwjRXhpdG0iPjcuNTAgPGNvZGU+LmV4aXRtPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJFeHRlcm4uaHRtbCNFeHRlcm4iPjcuNTEgPGNvZGU+LmV4dGVybjwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iRmFpbC5odG1sI0ZhaWwiPjcuNTIgPGNvZGU+LmZhaWwgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJGaWxlLmh0bWwjRmlsZSI+Ny41MyA8Y29kZT4uZmlsZTwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iRmlsbC5odG1sI0ZpbGwiPjcuNTQgPGNvZGU+LmZpbGwgPC9jb2RlPjx2YXI+cmVwZWF0PC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkZsb2F0Lmh0bWwjRmxvYXQiPjcuNTUgPGNvZGU+LmZsb2F0IDwvY29kZT48dmFyPmZsb251bXM8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iRnVuYy5odG1sI0Z1bmMiPjcuNTYgPGNvZGU+LmZ1bmMgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPlssPC9jb2RlPjx2YXI+bGFiZWw8L3Zhcj48Y29kZT5dPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJHbG9iYWwuaHRtbCNHbG9iYWwiPjcuNTcgPGNvZGU+Lmdsb2JhbCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj4sIDxjb2RlPi5nbG9ibCA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iR251XzAwNWZhdHRyaWJ1dGUuaHRtbCNHbnVfMDA1ZmF0dHJpYnV0ZSI+Ny41OCA8Y29kZT4uZ251X2F0dHJpYnV0ZSA8L2NvZGU+PHZhcj50YWc8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iSGlkZGVuLmh0bWwjSGlkZGVuIj43LjU5IDxjb2RlPi5oaWRkZW4gPC9jb2RlPjx2YXI+bmFtZXM8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iaHdvcmQuaHRtbCNod29yZCI+Ny42MCA8Y29kZT4uaHdvcmQgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iSWRlbnQuaHRtbCNJZGVudCI+Ny42MSA8Y29kZT4uaWRlbnQ8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IklmLmh0bWwjSWYiPjcuNjIgPGNvZGU+LmlmIDwvY29kZT48dmFyPmFic29sdXRlIGV4cHJlc3Npb248L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iSW5jYmluLmh0bWwjSW5jYmluIj43LjYzIDxjb2RlPi5pbmNiaW4gIjwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4iWyw8L2NvZGU+PHZhcj5za2lwPC92YXI+PGNvZGU+Wyw8L2NvZGU+PHZhcj5jb3VudDwvdmFyPjxjb2RlPl1dPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJJbmNsdWRlLmh0bWwjSW5jbHVkZSI+Ny42NCA8Y29kZT4uaW5jbHVkZSAiPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiI8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkludC5odG1sI0ludCI+Ny42NSA8Y29kZT4uaW50IDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IkludGVybmFsLmh0bWwjSW50ZXJuYWwiPjcuNjYgPGNvZGU+LmludGVybmFsIDwvY29kZT48dmFyPm5hbWVzPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IklycC5odG1sI0lycCI+Ny42NyA8Y29kZT4uaXJwIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj52YWx1ZXM8L3Zhcj48c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+PC9hPgorPGxpPjxhIGhyZWY9IklycGMuaHRtbCNJcnBjIj43LjY4IDxjb2RlPi5pcnBjIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj52YWx1ZXM8L3Zhcj48c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+PC9hPgorPGxpPjxhIGhyZWY9Ikxjb21tLmh0bWwjTGNvbW0iPjcuNjkgPGNvZGU+Lmxjb21tIDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmxlbmd0aDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJMZmxhZ3MuaHRtbCNMZmxhZ3MiPjcuNzAgPGNvZGU+LmxmbGFnczwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iTGluZS5odG1sI0xpbmUiPjcuNzEgPGNvZGU+LmxpbmUgPC9jb2RlPjx2YXI+bGluZS1udW1iZXI8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iTGlua29uY2UuaHRtbCNMaW5rb25jZSI+Ny43MiA8Y29kZT4ubGlua29uY2UgWzwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT5dPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJMaXN0Lmh0bWwjTGlzdCI+Ny43MyA8Y29kZT4ubGlzdDwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iTG4uaHRtbCNMbiI+Ny43NCA8Y29kZT4ubG4gPC9jb2RlPjx2YXI+bGluZS1udW1iZXI8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iTG9jLmh0bWwjTG9jIj43Ljc1IDxjb2RlPi5sb2MgPC9jb2RlPjx2YXI+ZmlsZW5vPC92YXI+IDx2YXI+bGluZW5vPC92YXI+PGNvZGU+IFs8L2NvZGU+PHZhcj5jb2x1bW48L3Zhcj48Y29kZT5dIFs8L2NvZGU+PHZhcj5vcHRpb25zPC92YXI+PGNvZGU+XTwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iTG9jXzAwNWZtYXJrXzAwNWZsYWJlbHMuaHRtbCNMb2NfMDA1Zm1hcmtfMDA1ZmxhYmVscyI+Ny43NiA8Y29kZT4ubG9jX21hcmtfbGFiZWxzIDwvY29kZT48dmFyPmVuYWJsZTwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJMb2NhbC5odG1sI0xvY2FsIj43Ljc3IDxjb2RlPi5sb2NhbCA8L2NvZGU+PHZhcj5uYW1lczwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJMb25nLmh0bWwjTG9uZyI+Ny43OCA8Y29kZT4ubG9uZyA8L2NvZGU+PHZhcj5leHByZXNzaW9uczwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJNYWNyby5odG1sI01hY3JvIj43Ljc5IDxjb2RlPi5tYWNybzwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjTVJJIj43LjgwIDxjb2RlPi5tcmkgPC9jb2RlPjx2YXI+dmFsPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9Ik5vYWx0bWFjcm8uaHRtbCNOb2FsdG1hY3JvIj43LjgxIDxjb2RlPi5ub2FsdG1hY3JvPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJOb2xpc3QuaHRtbCNOb2xpc3QiPjcuODIgPGNvZGU+Lm5vbGlzdDwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iT2N0YS5odG1sI09jdGEiPjcuODMgPGNvZGU+Lm9jdGEgPC9jb2RlPjx2YXI+YmlnbnVtczwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJPZmZzZXQuaHRtbCNPZmZzZXQiPjcuODQgPGNvZGU+Lm9mZnNldCA8L2NvZGU+PHZhcj5sb2M8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iT3JnLmh0bWwjT3JnIj43Ljg1IDxjb2RlPi5vcmcgPC9jb2RlPjx2YXI+bmV3LWxjPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+ZmlsbDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJQMmFsaWduLmh0bWwjUDJhbGlnbiI+Ny44NiA8Y29kZT4ucDJhbGlnblt3bF0gPC9jb2RlPjx2YXI+YWJzLWV4cHI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmFicy1leHByPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hYnMtZXhwcjwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJQb3BTZWN0aW9uLmh0bWwjUG9wU2VjdGlvbiI+Ny44NyA8Y29kZT4ucG9wc2VjdGlvbjwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iUHJldmlvdXMuaHRtbCNQcmV2aW91cyI+Ny44OCA8Y29kZT4ucHJldmlvdXM8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IlByaW50Lmh0bWwjUHJpbnQiPjcuODkgPGNvZGU+LnByaW50IDwvY29kZT48dmFyPnN0cmluZzwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJQcm90ZWN0ZWQuaHRtbCNQcm90ZWN0ZWQiPjcuOTAgPGNvZGU+LnByb3RlY3RlZCA8L2NvZGU+PHZhcj5uYW1lczwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJQc2l6ZS5odG1sI1BzaXplIj43LjkxIDxjb2RlPi5wc2l6ZSA8L2NvZGU+PHZhcj5saW5lczwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmNvbHVtbnM8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iUHVyZ2VtLmh0bWwjUHVyZ2VtIj43LjkyIDxjb2RlPi5wdXJnZW0gPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJQdXNoU2VjdGlvbi5odG1sI1B1c2hTZWN0aW9uIj43LjkzIDxjb2RlPi5wdXNoc2VjdGlvbiA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPnN1YnNlY3Rpb248L3Zhcj48Y29kZT5dIFssICI8L2NvZGU+PHZhcj5mbGFnczwvdmFyPjxjb2RlPiJbLCBAPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPlssPC9jb2RlPjx2YXI+YXJndW1lbnRzPC92YXI+PGNvZGU+XV1dPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJRdWFkLmh0bWwjUXVhZCI+Ny45NCA8Y29kZT4ucXVhZCA8L2NvZGU+PHZhcj5iaWdudW1zPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IlJlbG9jLmh0bWwjUmVsb2MiPjcuOTUgPGNvZGU+LnJlbG9jIDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cmVsb2NfbmFtZTwvdmFyPjxjb2RlPlssIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT5dPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJSZXB0Lmh0bWwjUmVwdCI+Ny45NiA8Y29kZT4ucmVwdCA8L2NvZGU+PHZhcj5jb3VudDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJTYnR0bC5odG1sI1NidHRsIj43Ljk3IDxjb2RlPi5zYnR0bCAiPC9jb2RlPjx2YXI+c3ViaGVhZGluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IlNjbC5odG1sI1NjbCI+Ny45OCA8Y29kZT4uc2NsIDwvY29kZT48dmFyPmNsYXNzPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IlNlY3Rpb24uaHRtbCNTZWN0aW9uIj43Ljk5IDxjb2RlPi5zZWN0aW9uIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iU2V0Lmh0bWwjU2V0Ij43LjEwMCA8Y29kZT4uc2V0IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJTaG9ydC5odG1sI1Nob3J0Ij43LjEwMSA8Y29kZT4uc2hvcnQgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iU2luZ2xlLmh0bWwjU2luZ2xlIj43LjEwMiA8Y29kZT4uc2luZ2xlIDwvY29kZT48dmFyPmZsb251bXM8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iU2l6ZS5odG1sI1NpemUiPjcuMTAzIDxjb2RlPi5zaXplPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJTa2lwLmh0bWwjU2tpcCI+Ny4xMDQgPGNvZGU+LnNraXAgPC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPmZpbGw8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iU2xlYjEyOC5odG1sI1NsZWIxMjgiPjcuMTA1IDxjb2RlPi5zbGViMTI4IDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IlNwYWNlLmh0bWwjU3BhY2UiPjcuMTA2IDxjb2RlPi5zcGFjZSA8L2NvZGU+PHZhcj5zaXplPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+ZmlsbDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJTdGFiLmh0bWwjU3RhYiI+Ny4xMDcgPGNvZGU+LnN0YWJkLCAuc3RhYm4sIC5zdGFiczwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iU3RyaW5nLmh0bWwjU3RyaW5nIj43LjEwOCA8Y29kZT4uc3RyaW5nPC9jb2RlPiAiPHZhcj5zdHI8L3Zhcj4iLCA8Y29kZT4uc3RyaW5nODwvY29kZT4gIjx2YXI+c3RyPC92YXI+IiwgPGNvZGU+LnN0cmluZzE2PC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJTdHJ1Y3QuaHRtbCNTdHJ1Y3QiPjcuMTA5IDxjb2RlPi5zdHJ1Y3QgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJTdWJTZWN0aW9uLmh0bWwjU3ViU2VjdGlvbiI+Ny4xMTAgPGNvZGU+LnN1YnNlY3Rpb24gPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJTeW12ZXIuaHRtbCNTeW12ZXIiPjcuMTExIDxjb2RlPi5zeW12ZXI8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IlRhZy5odG1sI1RhZyI+Ny4xMTIgPGNvZGU+LnRhZyA8L2NvZGU+PHZhcj5zdHJ1Y3RuYW1lPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IlRleHQuaHRtbCNUZXh0Ij43LjExMyA8Y29kZT4udGV4dCA8L2NvZGU+PHZhcj5zdWJzZWN0aW9uPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IlRpdGxlLmh0bWwjVGl0bGUiPjcuMTE0IDxjb2RlPi50aXRsZSAiPC9jb2RlPjx2YXI+aGVhZGluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IlR5cGUuaHRtbCNUeXBlIj43LjExNSA8Y29kZT4udHlwZTwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iVWxlYjEyOC5odG1sI1VsZWIxMjgiPjcuMTE2IDxjb2RlPi51bGViMTI4IDwvY29kZT48dmFyPmV4cHJlc3Npb25zPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IlZhbC5odG1sI1ZhbCI+Ny4xMTcgPGNvZGU+LnZhbCA8L2NvZGU+PHZhcj5hZGRyPC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IlZlcnNpb24uaHRtbCNWZXJzaW9uIj43LjExOCA8Y29kZT4udmVyc2lvbiAiPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGNvZGU+IjwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iVlRhYmxlRW50cnkuaHRtbCNWVGFibGVFbnRyeSI+Ny4xMTkgPGNvZGU+LnZ0YWJsZV9lbnRyeSA8L2NvZGU+PHZhcj50YWJsZTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+b2Zmc2V0PC92YXI+PC9hPgorPGxpPjxhIGhyZWY9IlZUYWJsZUluaGVyaXQuaHRtbCNWVGFibGVJbmhlcml0Ij43LjEyMCA8Y29kZT4udnRhYmxlX2luaGVyaXQgPC9jb2RlPjx2YXI+Y2hpbGQ8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnBhcmVudDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLmh0bWwjV2FybmluZyI+Ny4xMjEgPGNvZGU+Lndhcm5pbmcgIjwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPiI8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IldlYWsuaHRtbCNXZWFrIj43LjEyMiA8Y29kZT4ud2VhayA8L2NvZGU+PHZhcj5uYW1lczwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJXZWFrcmVmLmh0bWwjV2Vha3JlZiI+Ny4xMjMgPGNvZGU+LndlYWtyZWYgPC9jb2RlPjx2YXI+YWxpYXM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnRhcmdldDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJXb3JkLmh0bWwjV29yZCI+Ny4xMjQgPGNvZGU+LndvcmQgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbnM8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0iRGVwcmVjYXRlZC5odG1sI0RlcHJlY2F0ZWQiPjcuMTI1IERlcHJlY2F0ZWQgRGlyZWN0aXZlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfT2JqZWN0LUF0dHJpYnV0ZXMiIGhyZWY9Ik9iamVjdC1BdHRyaWJ1dGVzLmh0bWwjT2JqZWN0LUF0dHJpYnV0ZXMiPjggT2JqZWN0IEF0dHJpYnV0ZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iR05VLU9iamVjdC1BdHRyaWJ1dGVzLmh0bWwjR05VLU9iamVjdC1BdHRyaWJ1dGVzIj44LjEgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IE9iamVjdCBBdHRyaWJ1dGVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkdOVS1PYmplY3QtQXR0cmlidXRlcy5odG1sI0dOVS1PYmplY3QtQXR0cmlidXRlcyI+OC4xLjEgQ29tbW9uIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBhdHRyaWJ1dGVzPC9hPgorPGxpPjxhIGhyZWY9IkdOVS1PYmplY3QtQXR0cmlidXRlcy5odG1sI0dOVS1PYmplY3QtQXR0cmlidXRlcyI+OC4xLjIgTUlQUyBBdHRyaWJ1dGVzPC9hPgorPGxpPjxhIGhyZWY9IkdOVS1PYmplY3QtQXR0cmlidXRlcy5odG1sI0dOVS1PYmplY3QtQXR0cmlidXRlcyI+OC4xLjMgUG93ZXJQQyBBdHRyaWJ1dGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkRlZmluaW5nLU5ldy1PYmplY3QtQXR0cmlidXRlcy5odG1sI0RlZmluaW5nLU5ldy1PYmplY3QtQXR0cmlidXRlcyI+OC4yIERlZmluaW5nIE5ldyBPYmplY3QgQXR0cmlidXRlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfTWFjaGluZS1EZXBlbmRlbmNpZXMiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW5jaWVzLmh0bWwjTWFjaGluZS1EZXBlbmRlbmNpZXMiPjkgTWFjaGluZSBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NF8wMDJkRGVwZW5kZW50Lmh0bWwjQUFyY2g2NF8wMDJkRGVwZW5kZW50Ij45LjEgQUFyY2g2NCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj45LjEuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtU3ludGF4Lmh0bWwjQUFyY2g2NC1TeW50YXgiPjkuMS4yIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBQXJjaDY0XzAwMmRDaGFycy5odG1sI0FBcmNoNjRfMDAyZENoYXJzIj45LjEuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJBQXJjaDY0XzAwMmRSZWdzLmh0bWwjQUFyY2g2NF8wMDJkUmVncyI+OS4xLjIuMiBSZWdpc3RlciBOYW1lczwvYT4KKzxsaT48YSBocmVmPSJBQXJjaDY0XzAwMmRSZWxvY2F0aW9ucy5odG1sI0FBcmNoNjRfMDAyZFJlbG9jYXRpb25zIj45LjEuMi4zIFJlbG9jYXRpb25zPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtRmxvYXRpbmctUG9pbnQuaHRtbCNBQXJjaDY0LUZsb2F0aW5nLVBvaW50Ij45LjEuMyBGbG9hdGluZyBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LURpcmVjdGl2ZXMuaHRtbCNBQXJjaDY0LURpcmVjdGl2ZXMiPjkuMS40IEFBcmNoNjQgTWFjaGluZSBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3Bjb2Rlcy5odG1sI0FBcmNoNjQtT3Bjb2RlcyI+OS4xLjUgT3Bjb2RlczwvYT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU1hcHBpbmctU3ltYm9scy5odG1sI0FBcmNoNjQtTWFwcGluZy1TeW1ib2xzIj45LjEuNiBNYXBwaW5nIFN5bWJvbHM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iQWxwaGFfMDAyZERlcGVuZGVudC5odG1sI0FscGhhXzAwMmREZXBlbmRlbnQiPjkuMiBBbHBoYSBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQWxwaGEtTm90ZXMuaHRtbCNBbHBoYS1Ob3RlcyI+OS4yLjEgTm90ZXM8L2E+Cis8bGk+PGEgaHJlZj0iQWxwaGEtT3B0aW9ucy5odG1sI0FscGhhLU9wdGlvbnMiPjkuMi4yIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iQWxwaGEtU3ludGF4Lmh0bWwjQWxwaGEtU3ludGF4Ij45LjIuMyBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQWxwaGFfMDAyZENoYXJzLmh0bWwjQWxwaGFfMDAyZENoYXJzIj45LjIuMy4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJBbHBoYV8wMDJkUmVncy5odG1sI0FscGhhXzAwMmRSZWdzIj45LjIuMy4yIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IkFscGhhXzAwMmRSZWxvY3MuaHRtbCNBbHBoYV8wMDJkUmVsb2NzIj45LjIuMy4zIFJlbG9jYXRpb25zPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkFscGhhLUZsb2F0aW5nLVBvaW50Lmh0bWwjQWxwaGEtRmxvYXRpbmctUG9pbnQiPjkuMi40IEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9IkFscGhhLURpcmVjdGl2ZXMuaHRtbCNBbHBoYS1EaXJlY3RpdmVzIj45LjIuNSBBbHBoYSBBc3NlbWJsZXIgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJBbHBoYS1PcGNvZGVzLmh0bWwjQWxwaGEtT3Bjb2RlcyI+OS4yLjYgT3Bjb2RlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBUkNfMDAyZERlcGVuZGVudC5odG1sI0FSQ18wMDJkRGVwZW5kZW50Ij45LjMgQVJDIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBUkMtT3B0aW9ucy5odG1sI0FSQy1PcHRpb25zIj45LjMuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkFSQy1TeW50YXguaHRtbCNBUkMtU3ludGF4Ij45LjMuMiBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQVJDXzAwMmRDaGFycy5odG1sI0FSQ18wMDJkQ2hhcnMiPjkuMy4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9IkFSQ18wMDJkUmVncy5odG1sI0FSQ18wMDJkUmVncyI+OS4zLjIuMiBSZWdpc3RlciBOYW1lczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBUkMtRmxvYXRpbmctUG9pbnQuaHRtbCNBUkMtRmxvYXRpbmctUG9pbnQiPjkuMy4zIEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9IkFSQy1EaXJlY3RpdmVzLmh0bWwjQVJDLURpcmVjdGl2ZXMiPjkuMy40IEFSQyBNYWNoaW5lIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iQVJDLU9wY29kZXMuaHRtbCNBUkMtT3Bjb2RlcyI+OS4zLjUgT3Bjb2RlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBUk1fMDAyZERlcGVuZGVudC5odG1sI0FSTV8wMDJkRGVwZW5kZW50Ij45LjQgQVJNIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj45LjQuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1TeW50YXguaHRtbCNBUk0tU3ludGF4Ij45LjQuMiBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmRJbnN0cnVjdGlvbl8wMDJkU2V0Lmh0bWwjQVJNXzAwMmRJbnN0cnVjdGlvbl8wMDJkU2V0Ij45LjQuMi4xIEluc3RydWN0aW9uIFNldCBTeW50YXg8L2E+Cis8bGk+PGEgaHJlZj0iQVJNXzAwMmRDaGFycy5odG1sI0FSTV8wMDJkQ2hhcnMiPjkuNC4yLjIgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9IkFSTV8wMDJkUmVncy5odG1sI0FSTV8wMDJkUmVncyI+OS40LjIuMyBSZWdpc3RlciBOYW1lczwvYT4KKzxsaT48YSBocmVmPSJBUk1fMDAyZE5lb25fMDAyZEFsaWdubWVudC5odG1sI0FSTV8wMDJkTmVvbl8wMDJkQWxpZ25tZW50Ij45LjQuMi40IE5FT04gQWxpZ25tZW50IFNwZWNpZmllcnM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iQVJNLUZsb2F0aW5nLVBvaW50Lmh0bWwjQVJNLUZsb2F0aW5nLVBvaW50Ij45LjQuMyBGbG9hdGluZyBQb2ludDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBUk1fMDAyZFJlbG9jYXRpb25zLmh0bWwjQVJNXzAwMmRSZWxvY2F0aW9ucyI+OS40LjMuMSBBUk0gcmVsb2NhdGlvbiBnZW5lcmF0aW9uPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkFSTS1EaXJlY3RpdmVzLmh0bWwjQVJNLURpcmVjdGl2ZXMiPjkuNC40IEFSTSBNYWNoaW5lIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU9wY29kZXMuaHRtbCNBUk0tT3Bjb2RlcyI+OS40LjUgT3Bjb2RlczwvYT4KKzxsaT48YSBocmVmPSJBUk0tTWFwcGluZy1TeW1ib2xzLmh0bWwjQVJNLU1hcHBpbmctU3ltYm9scyI+OS40LjYgTWFwcGluZyBTeW1ib2xzPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1VbndpbmRpbmctVHV0b3JpYWwuaHRtbCNBUk0tVW53aW5kaW5nLVR1dG9yaWFsIj45LjQuNyBVbndpbmRpbmc8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iQVZSXzAwMmREZXBlbmRlbnQuaHRtbCNBVlJfMDAyZERlcGVuZGVudCI+OS41IEFWUiBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+OS41LjEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJBVlItU3ludGF4Lmh0bWwjQVZSLVN5bnRheCI+OS41LjIgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkFWUl8wMDJkQ2hhcnMuaHRtbCNBVlJfMDAyZENoYXJzIj45LjUuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJBVlJfMDAyZFJlZ3MuaHRtbCNBVlJfMDAyZFJlZ3MiPjkuNS4yLjIgUmVnaXN0ZXIgTmFtZXM8L2E+Cis8bGk+PGEgaHJlZj0iQVZSXzAwMmRNb2RpZmllcnMuaHRtbCNBVlJfMDAyZE1vZGlmaWVycyI+OS41LjIuMyBSZWxvY2F0YWJsZSBFeHByZXNzaW9uIE1vZGlmaWVyczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBVlItT3Bjb2Rlcy5odG1sI0FWUi1PcGNvZGVzIj45LjUuMyBPcGNvZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluXzAwMmREZXBlbmRlbnQuaHRtbCNCbGFja2Zpbl8wMDJkRGVwZW5kZW50Ij45LjYgQmxhY2tmaW4gRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj45LjYuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLVN5bnRheC5odG1sI0JsYWNrZmluLVN5bnRheCI+OS42LjIgU3ludGF4PC9hPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLURpcmVjdGl2ZXMuaHRtbCNCbGFja2Zpbi1EaXJlY3RpdmVzIj45LjYuMyBEaXJlY3RpdmVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkNSMTZfMDAyZERlcGVuZGVudC5odG1sI0NSMTZfMDAyZERlcGVuZGVudCI+OS43IENSMTYgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkNSMTYtT3BlcmFuZC1RdWFsaWZpZXJzLmh0bWwjQ1IxNi1PcGVyYW5kLVF1YWxpZmllcnMiPjkuNy4xIENSMTYgT3BlcmFuZCBRdWFsaWZpZXJzPC9hPgorPGxpPjxhIGhyZWY9IkNSMTYtU3ludGF4Lmh0bWwjQ1IxNi1TeW50YXgiPjkuNy4yIENSMTYgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkNSMTZfMDAyZENoYXJzLmh0bWwjQ1IxNl8wMDJkQ2hhcnMiPjkuNy4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZERlcGVuZGVudC5odG1sI0NSSVNfMDAyZERlcGVuZGVudCI+OS44IENSSVMgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZE9wdHMuaHRtbCNDUklTXzAwMmRPcHRzIj45LjguMSBDb21tYW5kLWxpbmUgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRFeHBhbmQuaHRtbCNDUklTXzAwMmRFeHBhbmQiPjkuOC4yIEluc3RydWN0aW9uIGV4cGFuc2lvbjwvYT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRTeW1ib2xzLmh0bWwjQ1JJU18wMDJkU3ltYm9scyI+OS44LjMgU3ltYm9sczwvYT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRTeW50YXguaHRtbCNDUklTXzAwMmRTeW50YXgiPjkuOC40IFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRDaGFycy5odG1sI0NSSVNfMDAyZENoYXJzIj45LjguNC4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJDUklTXzAwMmRQaWMuaHRtbCNDUklTXzAwMmRQaWMiPjkuOC40LjIgU3ltYm9scyBpbiBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlPC9hPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZFJlZ3MuaHRtbCNDUklTXzAwMmRSZWdzIj45LjguNC4zIFJlZ2lzdGVyIG5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IkNSSVNfMDAyZFBzZXVkb3MuaHRtbCNDUklTXzAwMmRQc2V1ZG9zIj45LjguNC40IEFzc2VtYmxlciBEaXJlY3RpdmVzPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZERlcGVuZGVudC5odG1sI0QxMFZfMDAyZERlcGVuZGVudCI+OS45IEQxMFYgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZE9wdHMuaHRtbCNEMTBWXzAwMmRPcHRzIj45LjkuMSBEMTBWIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkU3ludGF4Lmh0bWwjRDEwVl8wMDJkU3ludGF4Ij45LjkuMiBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkU2l6ZS5odG1sI0QxMFZfMDAyZFNpemUiPjkuOS4yLjEgU2l6ZSBNb2RpZmllcnM8L2E+Cis8bGk+PGEgaHJlZj0iRDEwVl8wMDJkU3Vicy5odG1sI0QxMFZfMDAyZFN1YnMiPjkuOS4yLjIgU3ViLUluc3RydWN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRDaGFycy5odG1sI0QxMFZfMDAyZENoYXJzIj45LjkuMi4zIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRSZWdzLmh0bWwjRDEwVl8wMDJkUmVncyI+OS45LjIuNCBSZWdpc3RlciBOYW1lczwvYT4KKzxsaT48YSBocmVmPSJEMTBWXzAwMmRBZGRyZXNzaW5nLmh0bWwjRDEwVl8wMDJkQWRkcmVzc2luZyI+OS45LjIuNSBBZGRyZXNzaW5nIE1vZGVzPC9hPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZFdvcmQuaHRtbCNEMTBWXzAwMmRXb3JkIj45LjkuMi42IEBXT1JEIE1vZGlmaWVyPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZEZsb2F0Lmh0bWwjRDEwVl8wMDJkRmxvYXQiPjkuOS4zIEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9IkQxMFZfMDAyZE9wY29kZXMuaHRtbCNEMTBWXzAwMmRPcGNvZGVzIj45LjkuNCBPcGNvZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZERlcGVuZGVudC5odG1sI0QzMFZfMDAyZERlcGVuZGVudCI+OS4xMCBEMzBWIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRPcHRzLmh0bWwjRDMwVl8wMDJkT3B0cyI+OS4xMC4xIEQzMFYgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRTeW50YXguaHRtbCNEMzBWXzAwMmRTeW50YXgiPjkuMTAuMiBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkU2l6ZS5odG1sI0QzMFZfMDAyZFNpemUiPjkuMTAuMi4xIFNpemUgTW9kaWZpZXJzPC9hPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZFN1YnMuaHRtbCNEMzBWXzAwMmRTdWJzIj45LjEwLjIuMiBTdWItSW5zdHJ1Y3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZENoYXJzLmh0bWwjRDMwVl8wMDJkQ2hhcnMiPjkuMTAuMi4zIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRHdWFyZGVkLmh0bWwjRDMwVl8wMDJkR3VhcmRlZCI+OS4xMC4yLjQgR3VhcmRlZCBFeGVjdXRpb248L2E+Cis8bGk+PGEgaHJlZj0iRDMwVl8wMDJkUmVncy5odG1sI0QzMFZfMDAyZFJlZ3MiPjkuMTAuMi41IFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZEFkZHJlc3NpbmcuaHRtbCNEMzBWXzAwMmRBZGRyZXNzaW5nIj45LjEwLjIuNiBBZGRyZXNzaW5nIE1vZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkQzMFZfMDAyZEZsb2F0Lmh0bWwjRDMwVl8wMDJkRmxvYXQiPjkuMTAuMyBGbG9hdGluZyBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJEMzBWXzAwMmRPcGNvZGVzLmh0bWwjRDMwVl8wMDJkT3Bjb2RlcyI+OS4xMC40IE9wY29kZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iRXBpcGhhbnlfMDAyZERlcGVuZGVudC5odG1sI0VwaXBoYW55XzAwMmREZXBlbmRlbnQiPjkuMTEgRXBpcGhhbnkgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkVwaXBoYW55LU9wdGlvbnMuaHRtbCNFcGlwaGFueS1PcHRpb25zIj45LjExLjEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJFcGlwaGFueS1TeW50YXguaHRtbCNFcGlwaGFueS1TeW50YXgiPjkuMTEuMiBFcGlwaGFueSBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iRXBpcGhhbnlfMDAyZENoYXJzLmh0bWwjRXBpcGhhbnlfMDAyZENoYXJzIj45LjExLjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2E+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Lmh0bWwjSDhfMDAyZjMwMF8wMDJkRGVwZW5kZW50Ij45LjEyIEg4LzMwMCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIj45LjEyLjEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLVN5bnRheC5odG1sI0g4XzAwMmYzMDAtU3ludGF4Ij45LjEyLjIgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDBfMDAyZENoYXJzLmh0bWwjSDhfMDAyZjMwMF8wMDJkQ2hhcnMiPjkuMTIuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwXzAwMmRSZWdzLmh0bWwjSDhfMDAyZjMwMF8wMDJkUmVncyI+OS4xMi4yLjIgUmVnaXN0ZXIgTmFtZXM8L2E+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMF8wMDJkQWRkcmVzc2luZy5odG1sI0g4XzAwMmYzMDBfMDAyZEFkZHJlc3NpbmciPjkuMTIuMi4zIEFkZHJlc3NpbmcgTW9kZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC1GbG9hdGluZy1Qb2ludC5odG1sI0g4XzAwMmYzMDAtRmxvYXRpbmctUG9pbnQiPjkuMTIuMyBGbG9hdGluZyBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLURpcmVjdGl2ZXMuaHRtbCNIOF8wMDJmMzAwLURpcmVjdGl2ZXMiPjkuMTIuNCBIOC8zMDAgTWFjaGluZSBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtT3Bjb2Rlcy5odG1sI0g4XzAwMmYzMDAtT3Bjb2RlcyI+OS4xMi41IE9wY29kZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iSFBQQV8wMDJkRGVwZW5kZW50Lmh0bWwjSFBQQV8wMDJkRGVwZW5kZW50Ij45LjEzIEhQUEEgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkhQUEEtTm90ZXMuaHRtbCNIUFBBLU5vdGVzIj45LjEzLjEgTm90ZXM8L2E+Cis8bGk+PGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj45LjEzLjIgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJIUFBBLVN5bnRheC5odG1sI0hQUEEtU3ludGF4Ij45LjEzLjMgU3ludGF4PC9hPgorPGxpPjxhIGhyZWY9IkhQUEEtRmxvYXRpbmctUG9pbnQuaHRtbCNIUFBBLUZsb2F0aW5nLVBvaW50Ij45LjEzLjQgRmxvYXRpbmcgUG9pbnQ8L2E+Cis8bGk+PGEgaHJlZj0iSFBQQS1EaXJlY3RpdmVzLmh0bWwjSFBQQS1EaXJlY3RpdmVzIj45LjEzLjUgSFBQQSBBc3NlbWJsZXIgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJIUFBBLU9wY29kZXMuaHRtbCNIUFBBLU9wY29kZXMiPjkuMTMuNiBPcGNvZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkVTQV8wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNFU0FfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij45LjE0IEVTQS8zOTAgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkVTQV8wMDJmMzkwLU5vdGVzLmh0bWwjRVNBXzAwMmYzOTAtTm90ZXMiPjkuMTQuMSBOb3RlczwvYT4KKzxsaT48YSBocmVmPSJFU0FfMDAyZjM5MC1PcHRpb25zLmh0bWwjRVNBXzAwMmYzOTAtT3B0aW9ucyI+OS4xNC4yIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iRVNBXzAwMmYzOTAtU3ludGF4Lmh0bWwjRVNBXzAwMmYzOTAtU3ludGF4Ij45LjE0LjMgU3ludGF4PC9hPgorPGxpPjxhIGhyZWY9IkVTQV8wMDJmMzkwLUZsb2F0aW5nLVBvaW50Lmh0bWwjRVNBXzAwMmYzOTAtRmxvYXRpbmctUG9pbnQiPjkuMTQuNCBGbG9hdGluZyBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJFU0FfMDAyZjM5MC1EaXJlY3RpdmVzLmh0bWwjRVNBXzAwMmYzOTAtRGlyZWN0aXZlcyI+OS4xNC41IEVTQS8zOTAgQXNzZW1ibGVyIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iRVNBXzAwMmYzOTAtT3Bjb2Rlcy5odG1sI0VTQV8wMDJmMzkwLU9wY29kZXMiPjkuMTQuNiBPcGNvZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZERlcGVuZGVudC5odG1sI2kzODZfMDAyZERlcGVuZGVudCI+OS4xNSA4MDM4NiBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkT3B0aW9ucy5odG1sI2kzODZfMDAyZE9wdGlvbnMiPjkuMTUuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZERpcmVjdGl2ZXMuaHRtbCNpMzg2XzAwMmREaXJlY3RpdmVzIj45LjE1LjIgeDg2IHNwZWNpZmljIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkU3ludGF4Lmh0bWwjaTM4Nl8wMDJkU3ludGF4Ij45LjE1LjMgaTM4NiBTeW50YWN0aWNhbCBDb25zaWRlcmF0aW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRWYXJpYXRpb25zLmh0bWwjaTM4Nl8wMDJkVmFyaWF0aW9ucyI+OS4xNS4zLjEgQVQmYW1wO1QgU3ludGF4IHZlcnN1cyBJbnRlbCBTeW50YXg8L2E+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkQ2hhcnMuaHRtbCNpMzg2XzAwMmRDaGFycyI+OS4xNS4zLjIgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE1uZW1vbmljcy5odG1sI2kzODZfMDAyZE1uZW1vbmljcyI+OS4xNS40IEluc3RydWN0aW9uIE5hbWluZzwvYT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRNbmVtb25pY3MuaHRtbCNpMzg2XzAwMmRNbmVtb25pY3MiPjkuMTUuNSBBVCZhbXA7VCBNbmVtb25pYyB2ZXJzdXMgSW50ZWwgTW5lbW9uaWM8L2E+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkUmVncy5odG1sI2kzODZfMDAyZFJlZ3MiPjkuMTUuNiBSZWdpc3RlciBOYW1pbmc8L2E+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkUHJlZml4ZXMuaHRtbCNpMzg2XzAwMmRQcmVmaXhlcyI+OS4xNS43IEluc3RydWN0aW9uIFByZWZpeGVzPC9hPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZE1lbW9yeS5odG1sI2kzODZfMDAyZE1lbW9yeSI+OS4xNS44IE1lbW9yeSBSZWZlcmVuY2VzPC9hPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEp1bXBzLmh0bWwjaTM4Nl8wMDJkSnVtcHMiPjkuMTUuOSBIYW5kbGluZyBvZiBKdW1wIEluc3RydWN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRGbG9hdC5odG1sI2kzODZfMDAyZEZsb2F0Ij45LjE1LjEwIEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZFNJTUQuaHRtbCNpMzg2XzAwMmRTSU1EIj45LjE1LjExIEludGVsJ3MgTU1YIGFuZCBBTUQncyAzRE5vdyEgU0lNRCBPcGVyYXRpb25zPC9hPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZExXUC5odG1sI2kzODZfMDAyZExXUCI+OS4xNS4xMiBBTUQncyBMaWdodHdlaWdodCBQcm9maWxpbmcgSW5zdHJ1Y3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEJNSS5odG1sI2kzODZfMDAyZEJNSSI+OS4xNS4xMyBCaXQgTWFuaXB1bGF0aW9uIEluc3RydWN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmRUQk0uaHRtbCNpMzg2XzAwMmRUQk0iPjkuMTUuMTQgQU1EJ3MgVHJhaWxpbmcgQml0IE1hbmlwdWxhdGlvbiBJbnN0cnVjdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iaTM4Nl8wMDJkMTZiaXQuaHRtbCNpMzg2XzAwMmQxNmJpdCI+OS4xNS4xNSBXcml0aW5nIDE2LWJpdCBDb2RlPC9hPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEJ1Z3MuaHRtbCNpMzg2XzAwMmRCdWdzIj45LjE1LjE2IEFUJmFtcDtUIFN5bnRheCBidWdzPC9hPgorPGxpPjxhIGhyZWY9ImkzODZfMDAyZEFyY2guaHRtbCNpMzg2XzAwMmRBcmNoIj45LjE1LjE3IFNwZWNpZnlpbmcgQ1BVIEFyY2hpdGVjdHVyZTwvYT4KKzxsaT48YSBocmVmPSJpMzg2XzAwMmROb3Rlcy5odG1sI2kzODZfMDAyZE5vdGVzIj45LjE1LjE4IE5vdGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Imk4NjBfMDAyZERlcGVuZGVudC5odG1sI2k4NjBfMDAyZERlcGVuZGVudCI+OS4xNiBJbnRlbCBpODYwIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJOb3Rlc18wMDJkaTg2MC5odG1sI05vdGVzXzAwMmRpODYwIj45LjE2LjEgaTg2MCBOb3RlczwvYT4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpODYwLmh0bWwjT3B0aW9uc18wMDJkaTg2MCI+OS4xNi4yIGk4NjAgQ29tbWFuZC1saW5lIE9wdGlvbnM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT3B0aW9uc18wMDJkaTg2MC5odG1sI09wdGlvbnNfMDAyZGk4NjAiPjkuMTYuMi4xIFNWUjQgY29tcGF0aWJpbGl0eSBvcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnNfMDAyZGk4NjAuaHRtbCNPcHRpb25zXzAwMmRpODYwIj45LjE2LjIuMiBPdGhlciBvcHRpb25zPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk4NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpODYwIj45LjE2LjMgaTg2MCBNYWNoaW5lIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iT3Bjb2Rlcy1mb3ItaTg2MC5odG1sI09wY29kZXMtZm9yLWk4NjAiPjkuMTYuNCBpODYwIE9wY29kZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT3Bjb2Rlcy1mb3ItaTg2MC5odG1sI09wY29kZXMtZm9yLWk4NjAiPjkuMTYuNC4xIE90aGVyIGluc3RydWN0aW9uIHN1cHBvcnQgKHBzZXVkby1pbnN0cnVjdGlvbnMpPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IlN5bnRheC1vZi1pODYwLmh0bWwjU3ludGF4LW9mLWk4NjAiPjkuMTYuNSBpODYwIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJpODYwXzAwMmRDaGFycy5odG1sI2k4NjBfMDAyZENoYXJzIj45LjE2LjUuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2E+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iaTk2MF8wMDJkRGVwZW5kZW50Lmh0bWwjaTk2MF8wMDJkRGVwZW5kZW50Ij45LjE3IEludGVsIDgwOTYwIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJPcHRpb25zXzAwMmRpOTYwLmh0bWwjT3B0aW9uc18wMDJkaTk2MCI+OS4xNy4xIGk5NjAgQ29tbWFuZC1saW5lIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iRmxvYXRpbmctUG9pbnRfMDAyZGk5NjAuaHRtbCNGbG9hdGluZy1Qb2ludF8wMDJkaTk2MCI+OS4xNy4yIEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9IkRpcmVjdGl2ZXNfMDAyZGk5NjAuaHRtbCNEaXJlY3RpdmVzXzAwMmRpOTYwIj45LjE3LjMgaTk2MCBNYWNoaW5lIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iT3Bjb2Rlcy1mb3ItaTk2MC5odG1sI09wY29kZXMtZm9yLWk5NjAiPjkuMTcuNCBpOTYwIE9wY29kZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iY2FsbGpfMDAyZGk5NjAuaHRtbCNjYWxsal8wMDJkaTk2MCI+OS4xNy40LjEgPGNvZGU+Y2FsbGo8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkNvbXBhcmVfMDAyZGFuZF8wMDJkYnJhbmNoXzAwMmRpOTYwLmh0bWwjQ29tcGFyZV8wMDJkYW5kXzAwMmRicmFuY2hfMDAyZGk5NjAiPjkuMTcuNC4yIENvbXBhcmUtYW5kLUJyYW5jaDwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJTeW50YXgtb2YtaTk2MC5odG1sI1N5bnRheC1vZi1pOTYwIj45LjE3LjUgU3ludGF4IGZvciB0aGUgaTk2MDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJpOTYwXzAwMmRDaGFycy5odG1sI2k5NjBfMDAyZENoYXJzIj45LjE3LjUuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2E+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmREZXBlbmRlbnQuaHRtbCNJQV8wMDJkNjRfMDAyZERlcGVuZGVudCI+OS4xOCBJQS02NCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+OS4xOC4xIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LVN5bnRheC5odG1sI0lBXzAwMmQ2NC1TeW50YXgiPjkuMTguMiBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRDaGFycy5odG1sI0lBXzAwMmQ2NF8wMDJkQ2hhcnMiPjkuMTguMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjRfMDAyZFJlZ3MuaHRtbCNJQV8wMDJkNjRfMDAyZFJlZ3MiPjkuMTguMi4yIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NF8wMDJkQml0cy5odG1sI0lBXzAwMmQ2NF8wMDJkQml0cyI+OS4xOC4yLjMgSUEtNjQgUHJvY2Vzc29yLVN0YXR1cy1SZWdpc3RlciAoUFNSKSBCaXQgTmFtZXM8L2E+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0XzAwMmRSZWxvY3MuaHRtbCNJQV8wMDJkNjRfMDAyZFJlbG9jcyI+OS4xOC4yLjQgUmVsb2NhdGlvbnM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wY29kZXMuaHRtbCNJQV8wMDJkNjQtT3Bjb2RlcyI+OS4xOC4zIE9wY29kZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iSVAyS18wMDJkRGVwZW5kZW50Lmh0bWwjSVAyS18wMDJkRGVwZW5kZW50Ij45LjE5IElQMksgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZE9wdHMuaHRtbCNJUDJLXzAwMmRPcHRzIj45LjE5LjEgSVAySyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZFN5bnRheC5odG1sI0lQMktfMDAyZFN5bnRheCI+OS4xOS4yIElQMksgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IklQMktfMDAyZENoYXJzLmh0bWwjSVAyS18wMDJkQ2hhcnMiPjkuMTkuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJMTTMyXzAwMmREZXBlbmRlbnQuaHRtbCNMTTMyXzAwMmREZXBlbmRlbnQiPjkuMjAgTE0zMiBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj45LjIwLjEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJMTTMyLVN5bnRheC5odG1sI0xNMzItU3ludGF4Ij45LjIwLjIgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkxNMzJfMDAyZFJlZ3MuaHRtbCNMTTMyXzAwMmRSZWdzIj45LjIwLjIuMSBSZWdpc3RlciBOYW1lczwvYT4KKzxsaT48YSBocmVmPSJMTTMyXzAwMmRNb2RpZmllcnMuaHRtbCNMTTMyXzAwMmRNb2RpZmllcnMiPjkuMjAuMi4yIFJlbG9jYXRhYmxlIEV4cHJlc3Npb24gTW9kaWZpZXJzPC9hPgorPGxpPjxhIGhyZWY9IkxNMzJfMDAyZENoYXJzLmh0bWwjTE0zMl8wMDJkQ2hhcnMiPjkuMjAuMi4zIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJMTTMyLU9wY29kZXMuaHRtbCNMTTMyLU9wY29kZXMiPjkuMjAuMyBPcGNvZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik0zMkNfMDAyZERlcGVuZGVudC5odG1sI00zMkNfMDAyZERlcGVuZGVudCI+OS4yMSBNMzJDIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJNMzJDXzAwMmRPcHRzLmh0bWwjTTMyQ18wMDJkT3B0cyI+OS4yMS4xIE0zMkMgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNMzJDXzAwMmRTeW50YXguaHRtbCNNMzJDXzAwMmRTeW50YXgiPjkuMjEuMiBNMzJDIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJNMzJDXzAwMmRNb2RpZmllcnMuaHRtbCNNMzJDXzAwMmRNb2RpZmllcnMiPjkuMjEuMi4xIFN5bWJvbGljIE9wZXJhbmQgTW9kaWZpZXJzPC9hPgorPGxpPjxhIGhyZWY9Ik0zMkNfMDAyZENoYXJzLmh0bWwjTTMyQ18wMDJkQ2hhcnMiPjkuMjEuMi4yIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmREZXBlbmRlbnQuaHRtbCNNMzJSXzAwMmREZXBlbmRlbnQiPjkuMjIgTTMyUiBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkT3B0cy5odG1sI00zMlJfMDAyZE9wdHMiPjkuMjIuMSBNMzJSIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkRGlyZWN0aXZlcy5odG1sI00zMlJfMDAyZERpcmVjdGl2ZXMiPjkuMjIuMiBNMzJSIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJkV2FybmluZ3MuaHRtbCNNMzJSXzAwMmRXYXJuaW5ncyI+OS4yMi4zIE0zMlIgV2FybmluZ3M8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkRGVwZW5kZW50Lmh0bWwjTTY4S18wMDJkRGVwZW5kZW50Ij45LjIzIE02ODB4MCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkT3B0cy5odG1sI002OEtfMDAyZE9wdHMiPjkuMjMuMSBNNjgweDAgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRTeW50YXguaHRtbCNNNjhLXzAwMmRTeW50YXgiPjkuMjMuMiBTeW50YXg8L2E+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkTW90b18wMDJkU3ludGF4Lmh0bWwjTTY4S18wMDJkTW90b18wMDJkU3ludGF4Ij45LjIzLjMgTW90b3JvbGEgU3ludGF4PC9hPgorPGxpPjxhIGhyZWY9Ik02OEtfMDAyZEZsb2F0Lmh0bWwjTTY4S18wMDJkRmxvYXQiPjkuMjMuNCBGbG9hdGluZyBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmREaXJlY3RpdmVzLmh0bWwjTTY4S18wMDJkRGlyZWN0aXZlcyI+OS4yMy41IDY4MHgwIE1hY2hpbmUgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJNNjhLXzAwMmRvcGNvZGVzLmh0bWwjTTY4S18wMDJkb3Bjb2RlcyI+OS4yMy42IE9wY29kZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkQnJhbmNoLmh0bWwjTTY4S18wMDJkQnJhbmNoIj45LjIzLjYuMSBCcmFuY2ggSW1wcm92ZW1lbnQ8L2E+Cis8bGk+PGEgaHJlZj0iTTY4S18wMDJkQ2hhcnMuaHRtbCNNNjhLXzAwMmRDaGFycyI+OS4yMy42LjIgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZERlcGVuZGVudC5odG1sI002OEhDMTFfMDAyZERlcGVuZGVudCI+OS4yNCBNNjhIQzExIGFuZCBNNjhIQzEyIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRPcHRzLmh0bWwjTTY4SEMxMV8wMDJkT3B0cyI+OS4yNC4xIE02OEhDMTEgYW5kIE02OEhDMTIgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRTeW50YXguaHRtbCNNNjhIQzExXzAwMmRTeW50YXgiPjkuMjQuMiBTeW50YXg8L2E+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkTW9kaWZpZXJzLmh0bWwjTTY4SEMxMV8wMDJkTW9kaWZpZXJzIj45LjI0LjMgU3ltYm9saWMgT3BlcmFuZCBNb2RpZmllcnM8L2E+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkRGlyZWN0aXZlcy5odG1sI002OEhDMTFfMDAyZERpcmVjdGl2ZXMiPjkuMjQuNCBBc3NlbWJsZXIgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmRGbG9hdC5odG1sI002OEhDMTFfMDAyZEZsb2F0Ij45LjI0LjUgRmxvYXRpbmcgUG9pbnQ8L2E+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJkb3Bjb2Rlcy5odG1sI002OEhDMTFfMDAyZG9wY29kZXMiPjkuMjQuNiBPcGNvZGVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZEJyYW5jaC5odG1sI002OEhDMTFfMDAyZEJyYW5jaCI+OS4yNC42LjEgQnJhbmNoIEltcHJvdmVtZW50PC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemVfMDAyZERlcGVuZGVudC5odG1sI01pY3JvQmxhemVfMDAyZERlcGVuZGVudCI+OS4yNSBNaWNyb0JsYXplIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplLURpcmVjdGl2ZXMuaHRtbCNNaWNyb0JsYXplLURpcmVjdGl2ZXMiPjkuMjUuMSBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemUtU3ludGF4Lmh0bWwjTWljcm9CbGF6ZS1TeW50YXgiPjkuMjUuMiBTeW50YXggZm9yIHRoZSBNaWNyb0JsYXplPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemVfMDAyZENoYXJzLmh0bWwjTWljcm9CbGF6ZV8wMDJkQ2hhcnMiPjkuMjUuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJNSVBTXzAwMmREZXBlbmRlbnQuaHRtbCNNSVBTXzAwMmREZXBlbmRlbnQiPjkuMjYgTUlQUyBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRzLmh0bWwjTUlQUy1PcHRzIj45LjI2LjEgQXNzZW1ibGVyIG9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTUlQUy1PYmplY3QuaHRtbCNNSVBTLU9iamVjdCI+OS4yNi4yIE1JUFMgRUNPRkYgb2JqZWN0IGNvZGU8L2E+Cis8bGk+PGEgaHJlZj0iTUlQUy1TdGFicy5odG1sI01JUFMtU3RhYnMiPjkuMjYuMyBEaXJlY3RpdmVzIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb248L2E+Cis8bGk+PGEgaHJlZj0iTUlQUy1zeW1ib2wtc2l6ZXMuaHRtbCNNSVBTLXN5bWJvbC1zaXplcyI+OS4yNi40IERpcmVjdGl2ZXMgdG8gb3ZlcnJpZGUgdGhlIHNpemUgb2Ygc3ltYm9sczwvYT4KKzxsaT48YSBocmVmPSJNSVBTLUlTQS5odG1sI01JUFMtSVNBIj45LjI2LjUgRGlyZWN0aXZlcyB0byBvdmVycmlkZSB0aGUgSVNBIGxldmVsPC9hPgorPGxpPjxhIGhyZWY9Ik1JUFMtYXV0b2V4dGVuZC5odG1sI01JUFMtYXV0b2V4dGVuZCI+OS4yNi42IERpcmVjdGl2ZXMgZm9yIGV4dGVuZGluZyBNSVBTIDE2IGJpdCBpbnN0cnVjdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTUlQUy1pbnNuLmh0bWwjTUlQUy1pbnNuIj45LjI2LjcgRGlyZWN0aXZlIHRvIG1hcmsgZGF0YSBhcyBhbiBpbnN0cnVjdGlvbjwvYT4KKzxsaT48YSBocmVmPSJNSVBTLW9wdGlvbi1zdGFjay5odG1sI01JUFMtb3B0aW9uLXN0YWNrIj45LjI2LjggRGlyZWN0aXZlcyB0byBzYXZlIGFuZCByZXN0b3JlIG9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTUlQUy1BU0UtaW5zdHJ1Y3Rpb24tZ2VuZXJhdGlvbi1vdmVycmlkZXMuaHRtbCNNSVBTLUFTRS1pbnN0cnVjdGlvbi1nZW5lcmF0aW9uLW92ZXJyaWRlcyI+OS4yNi45IERpcmVjdGl2ZXMgdG8gY29udHJvbCBnZW5lcmF0aW9uIG9mIE1JUFMgQVNFIGluc3RydWN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNSVBTLWZsb2F0aW5nXzAwMmRwb2ludC5odG1sI01JUFMtZmxvYXRpbmdfMDAyZHBvaW50Ij45LjI2LjEwIERpcmVjdGl2ZXMgdG8gb3ZlcnJpZGUgZmxvYXRpbmctcG9pbnQgb3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNSVBTLVN5bnRheC5odG1sI01JUFMtU3ludGF4Ij45LjI2LjExIFN5bnRhY3RpY2FsIGNvbnNpZGVyYXRpb25zIGZvciB0aGUgTUlQUyBhc3NlbWJsZXI8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iTUlQU18wMDJkQ2hhcnMuaHRtbCNNSVBTXzAwMmRDaGFycyI+OS4yNi4xMS4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmREZXBlbmRlbnQuaHRtbCNNTUlYXzAwMmREZXBlbmRlbnQiPjkuMjcgTU1JWCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkT3B0cy5odG1sI01NSVhfMDAyZE9wdHMiPjkuMjcuMSBDb21tYW5kLWxpbmUgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRFeHBhbmQuaHRtbCNNTUlYXzAwMmRFeHBhbmQiPjkuMjcuMiBJbnN0cnVjdGlvbiBleHBhbnNpb248L2E+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkU3ludGF4Lmh0bWwjTU1JWF8wMDJkU3ludGF4Ij45LjI3LjMgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZENoYXJzLmh0bWwjTU1JWF8wMDJkQ2hhcnMiPjkuMjcuMy4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRTeW1ib2xzLmh0bWwjTU1JWF8wMDJkU3ltYm9scyI+OS4yNy4zLjIgU3ltYm9sczwvYT4KKzxsaT48YSBocmVmPSJNTUlYXzAwMmRSZWdzLmh0bWwjTU1JWF8wMDJkUmVncyI+OS4yNy4zLjMgUmVnaXN0ZXIgbmFtZXM8L2E+Cis8bGk+PGEgaHJlZj0iTU1JWF8wMDJkUHNldWRvcy5odG1sI01NSVhfMDAyZFBzZXVkb3MiPjkuMjcuMy40IEFzc2VtYmxlciBEaXJlY3RpdmVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik1NSVhfMDAyZG1taXhhbC5odG1sI01NSVhfMDAyZG1taXhhbCI+OS4yNy40IERpZmZlcmVuY2VzIHRvIDxjb2RlPm1taXhhbDwvY29kZT48L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iTVNQNDMwXzAwMmREZXBlbmRlbnQuaHRtbCNNU1A0MzBfMDAyZERlcGVuZGVudCI+OS4yOCBNU1AgNDMwIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJNU1A0MzAtT3B0aW9ucy5odG1sI01TUDQzMC1PcHRpb25zIj45LjI4LjEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNU1A0MzAtU3ludGF4Lmh0bWwjTVNQNDMwLVN5bnRheCI+OS4yOC4yIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJNU1A0MzBfMDAyZE1hY3Jvcy5odG1sI01TUDQzMF8wMDJkTWFjcm9zIj45LjI4LjIuMSBNYWNyb3M8L2E+Cis8bGk+PGEgaHJlZj0iTVNQNDMwXzAwMmRDaGFycy5odG1sI01TUDQzMF8wMDJkQ2hhcnMiPjkuMjguMi4yIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJNU1A0MzBfMDAyZFJlZ3MuaHRtbCNNU1A0MzBfMDAyZFJlZ3MiPjkuMjguMi4zIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9Ik1TUDQzMF8wMDJkRXh0Lmh0bWwjTVNQNDMwXzAwMmRFeHQiPjkuMjguMi40IEFzc2VtYmxlciBFeHRlbnNpb25zPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC1GbG9hdGluZy1Qb2ludC5odG1sI01TUDQzMC1GbG9hdGluZy1Qb2ludCI+OS4yOC4zIEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC1EaXJlY3RpdmVzLmh0bWwjTVNQNDMwLURpcmVjdGl2ZXMiPjkuMjguNCBNU1AgNDMwIE1hY2hpbmUgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJNU1A0MzAtT3Bjb2Rlcy5odG1sI01TUDQzMC1PcGNvZGVzIj45LjI4LjUgT3Bjb2RlczwvYT4KKzxsaT48YSBocmVmPSJNU1A0MzAtUHJvZmlsaW5nLUNhcGFiaWxpdHkuaHRtbCNNU1A0MzAtUHJvZmlsaW5nLUNhcGFiaWxpdHkiPjkuMjguNiBQcm9maWxpbmcgQ2FwYWJpbGl0eTwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJOUzMyS18wMDJkRGVwZW5kZW50Lmh0bWwjTlMzMktfMDAyZERlcGVuZGVudCI+OS4yOSBOUzMySyBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iTlMzMkstU3ludGF4Lmh0bWwjTlMzMkstU3ludGF4Ij45LjI5LjEgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik5TMzJLXzAwMmRDaGFycy5odG1sI05TMzJLXzAwMmRDaGFycyI+OS4yOS4xLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZERlcGVuZGVudC5odG1sI1BEUF8wMDJkMTFfMDAyZERlcGVuZGVudCI+OS4zMCBQRFAtMTEgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZE9wdGlvbnMuaHRtbCNQRFBfMDAyZDExXzAwMmRPcHRpb25zIj45LjMwLjEgT3B0aW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+OS4zMC4xLjEgQ29kZSBHZW5lcmF0aW9uIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPjkuMzAuMS4yIEluc3RydWN0aW9uIFNldCBFeHRlbnNpb24gT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRPcHRpb25zLmh0bWwjUERQXzAwMmQxMV8wMDJkT3B0aW9ucyI+OS4zMC4xLjMgQ1BVIE1vZGVsIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkT3B0aW9ucy5odG1sI1BEUF8wMDJkMTFfMDAyZE9wdGlvbnMiPjkuMzAuMS40IE1hY2hpbmUgTW9kZWwgT3B0aW9uczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExXzAwMmRQc2V1ZG9zLmh0bWwjUERQXzAwMmQxMV8wMDJkUHNldWRvcyI+OS4zMC4yIEFzc2VtYmxlciBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRheC5odG1sI1BEUF8wMDJkMTFfMDAyZFN5bnRheCI+OS4zMC4zIFBEUC0xMSBBc3NlbWJseSBMYW5ndWFnZSBTeW50YXg8L2E+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMV8wMDJkTW5lbW9uaWNzLmh0bWwjUERQXzAwMmQxMV8wMDJkTW5lbW9uaWNzIj45LjMwLjQgSW5zdHJ1Y3Rpb24gTmFtaW5nPC9hPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTFfMDAyZFN5bnRoZXRpYy5odG1sI1BEUF8wMDJkMTFfMDAyZFN5bnRoZXRpYyI+OS4zMC41IFN5bnRoZXRpYyBJbnN0cnVjdGlvbnM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iUEpfMDAyZERlcGVuZGVudC5odG1sI1BKXzAwMmREZXBlbmRlbnQiPjkuMzEgcGljb0phdmEgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlBKLU9wdGlvbnMuaHRtbCNQSi1PcHRpb25zIj45LjMxLjEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJQSi1TeW50YXguaHRtbCNQSi1TeW50YXgiPjkuMzEuMiBQSiBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iUEpfMDAyZENoYXJzLmh0bWwjUEpfMDAyZENoYXJzIj45LjMxLjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2E+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iUFBDXzAwMmREZXBlbmRlbnQuaHRtbCNQUENfMDAyZERlcGVuZGVudCI+OS4zMiBQb3dlclBDIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJQb3dlclBDXzAwMmRPcHRzLmh0bWwjUG93ZXJQQ18wMDJkT3B0cyI+OS4zMi4xIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQ18wMDJkUHNldWRvLmh0bWwjUG93ZXJQQ18wMDJkUHNldWRvIj45LjMyLjIgUG93ZXJQQyBBc3NlbWJsZXIgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJQb3dlclBDXzAwMmRTeW50YXguaHRtbCNQb3dlclBDXzAwMmRTeW50YXgiPjkuMzIuMyBQb3dlclBDIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJQb3dlclBDXzAwMmRDaGFycy5odG1sI1Bvd2VyUENfMDAyZENoYXJzIj45LjMyLjMuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2E+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkRGVwZW5kZW50Lmh0bWwjUkw3OF8wMDJkRGVwZW5kZW50Ij45LjMzIFJMNzggRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlJMNzhfMDAyZE9wdHMuaHRtbCNSTDc4XzAwMmRPcHRzIj45LjMzLjEgUkw3OCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlJMNzhfMDAyZE1vZGlmaWVycy5odG1sI1JMNzhfMDAyZE1vZGlmaWVycyI+OS4zMy4yIFN5bWJvbGljIE9wZXJhbmQgTW9kaWZpZXJzPC9hPgorPGxpPjxhIGhyZWY9IlJMNzhfMDAyZERpcmVjdGl2ZXMuaHRtbCNSTDc4XzAwMmREaXJlY3RpdmVzIj45LjMzLjMgQXNzZW1ibGVyIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iUkw3OF8wMDJkU3ludGF4Lmh0bWwjUkw3OF8wMDJkU3ludGF4Ij45LjMzLjQgU3ludGF4IGZvciB0aGUgUkw3ODwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJSTDc4XzAwMmRDaGFycy5odG1sI1JMNzhfMDAyZENoYXJzIj45LjMzLjQuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2E+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZERlcGVuZGVudC5odG1sI1JYXzAwMmREZXBlbmRlbnQiPjkuMzQgUlggRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRPcHRzLmh0bWwjUlhfMDAyZE9wdHMiPjkuMzQuMSBSWCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRNb2RpZmllcnMuaHRtbCNSWF8wMDJkTW9kaWZpZXJzIj45LjM0LjIgU3ltYm9saWMgT3BlcmFuZCBNb2RpZmllcnM8L2E+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZERpcmVjdGl2ZXMuaHRtbCNSWF8wMDJkRGlyZWN0aXZlcyI+OS4zNC4zIEFzc2VtYmxlciBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRGbG9hdC5odG1sI1JYXzAwMmRGbG9hdCI+OS4zNC40IEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9IlJYXzAwMmRTeW50YXguaHRtbCNSWF8wMDJkU3ludGF4Ij45LjM0LjUgU3ludGF4IGZvciB0aGUgUlg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iUlhfMDAyZENoYXJzLmh0bWwjUlhfMDAyZENoYXJzIj45LjM0LjUuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2E+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNTXzAwMmYzOTBfMDAyZERlcGVuZGVudCI+OS4zNSBJQk0gUy8zOTAgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9InMzOTAtT3B0aW9ucy5odG1sI3MzOTAtT3B0aW9ucyI+OS4zNS4xIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iczM5MC1DaGFyYWN0ZXJzLmh0bWwjczM5MC1DaGFyYWN0ZXJzIj45LjM1LjIgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiPjkuMzUuMyBJbnN0cnVjdGlvbiBzeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iczM5MC1SZWdpc3Rlci5odG1sI3MzOTAtUmVnaXN0ZXIiPjkuMzUuMy4xIFJlZ2lzdGVyIG5hbWluZzwvYT4KKzxsaT48YSBocmVmPSJzMzkwLU1uZW1vbmljcy5odG1sI3MzOTAtTW5lbW9uaWNzIj45LjM1LjMuMiBJbnN0cnVjdGlvbiBNbmVtb25pY3M8L2E+Cis8bGk+PGEgaHJlZj0iczM5MC1PcGVyYW5kcy5odG1sI3MzOTAtT3BlcmFuZHMiPjkuMzUuMy4zIEluc3RydWN0aW9uIE9wZXJhbmRzPC9hPgorPGxpPjxhIGhyZWY9InMzOTAtRm9ybWF0cy5odG1sI3MzOTAtRm9ybWF0cyI+OS4zNS4zLjQgSW5zdHJ1Y3Rpb24gRm9ybWF0czwvYT4KKzxsaT48YSBocmVmPSJzMzkwLUFsaWFzZXMuaHRtbCNzMzkwLUFsaWFzZXMiPjkuMzUuMy41IEluc3RydWN0aW9uIEFsaWFzZXM8L2E+Cis8bGk+PGEgaHJlZj0iczM5MC1PcGVyYW5kLU1vZGlmaWVyLmh0bWwjczM5MC1PcGVyYW5kLU1vZGlmaWVyIj45LjM1LjMuNiBJbnN0cnVjdGlvbiBPcGVyYW5kIE1vZGlmaWVyPC9hPgorPGxpPjxhIGhyZWY9InMzOTAtSW5zdHJ1Y3Rpb24tTWFya2VyLmh0bWwjczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIiPjkuMzUuMy43IEluc3RydWN0aW9uIE1hcmtlcjwvYT4KKzxsaT48YSBocmVmPSJzMzkwLUxpdGVyYWwtUG9vbC1FbnRyaWVzLmh0bWwjczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcyI+OS4zNS4zLjggTGl0ZXJhbCBQb29sIEVudHJpZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iczM5MC1EaXJlY3RpdmVzLmh0bWwjczM5MC1EaXJlY3RpdmVzIj45LjM1LjQgQXNzZW1ibGVyIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iczM5MC1GbG9hdGluZy1Qb2ludC5odG1sI3MzOTAtRmxvYXRpbmctUG9pbnQiPjkuMzUuNSBGbG9hdGluZyBQb2ludDwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJTQ09SRV8wMDJkRGVwZW5kZW50Lmh0bWwjU0NPUkVfMDAyZERlcGVuZGVudCI+OS4zNiBTQ09SRSBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iU0NPUkVfMDAyZE9wdHMuaHRtbCNTQ09SRV8wMDJkT3B0cyI+OS4zNi4xIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU0NPUkVfMDAyZFBzZXVkby5odG1sI1NDT1JFXzAwMmRQc2V1ZG8iPjkuMzYuMiBTQ09SRSBBc3NlbWJsZXIgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJTQ09SRV8wMDJkU3ludGF4Lmh0bWwjU0NPUkVfMDAyZFN5bnRheCI+OS4zNi4zIFNDT1JFIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTQ09SRV8wMDJkQ2hhcnMuaHRtbCNTQ09SRV8wMDJkQ2hhcnMiPjkuMzYuMy4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJTSF8wMDJkRGVwZW5kZW50Lmh0bWwjU0hfMDAyZERlcGVuZGVudCI+OS4zNyBSZW5lc2FzIC8gU3VwZXJIIFNIIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+OS4zNy4xIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU0gtU3ludGF4Lmh0bWwjU0gtU3ludGF4Ij45LjM3LjIgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlNIXzAwMmRDaGFycy5odG1sI1NIXzAwMmRDaGFycyI+OS4zNy4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9IlNIXzAwMmRSZWdzLmh0bWwjU0hfMDAyZFJlZ3MiPjkuMzcuMi4yIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IlNIXzAwMmRBZGRyZXNzaW5nLmh0bWwjU0hfMDAyZEFkZHJlc3NpbmciPjkuMzcuMi4zIEFkZHJlc3NpbmcgTW9kZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iU0gtRmxvYXRpbmctUG9pbnQuaHRtbCNTSC1GbG9hdGluZy1Qb2ludCI+OS4zNy4zIEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9IlNILURpcmVjdGl2ZXMuaHRtbCNTSC1EaXJlY3RpdmVzIj45LjM3LjQgU0ggTWFjaGluZSBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9IlNILU9wY29kZXMuaHRtbCNTSC1PcGNvZGVzIj45LjM3LjUgT3Bjb2RlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJTSDY0XzAwMmREZXBlbmRlbnQuaHRtbCNTSDY0XzAwMmREZXBlbmRlbnQiPjkuMzggU3VwZXJIIFNINjQgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlNINjQtT3B0aW9ucy5odG1sI1NINjQtT3B0aW9ucyI+OS4zOC4xIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU0g2NC1TeW50YXguaHRtbCNTSDY0LVN5bnRheCI+OS4zOC4yIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTSDY0XzAwMmRDaGFycy5odG1sI1NINjRfMDAyZENoYXJzIj45LjM4LjIuMSBTcGVjaWFsIENoYXJhY3RlcnM8L2E+Cis8bGk+PGEgaHJlZj0iU0g2NF8wMDJkUmVncy5odG1sI1NINjRfMDAyZFJlZ3MiPjkuMzguMi4yIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IlNINjRfMDAyZEFkZHJlc3NpbmcuaHRtbCNTSDY0XzAwMmRBZGRyZXNzaW5nIj45LjM4LjIuMyBBZGRyZXNzaW5nIE1vZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IlNINjQtRGlyZWN0aXZlcy5odG1sI1NINjQtRGlyZWN0aXZlcyI+OS4zOC4zIFNINjQgTWFjaGluZSBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9IlNINjQtT3Bjb2Rlcy5odG1sI1NINjQtT3Bjb2RlcyI+OS4zOC40IE9wY29kZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZERlcGVuZGVudC5odG1sI1NwYXJjXzAwMmREZXBlbmRlbnQiPjkuMzkgU1BBUkMgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRPcHRzLmh0bWwjU3BhcmNfMDAyZE9wdHMiPjkuMzkuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRBbGlnbmVkXzAwMmREYXRhLmh0bWwjU3BhcmNfMDAyZEFsaWduZWRfMDAyZERhdGEiPjkuMzkuMiBFbmZvcmNpbmcgYWxpZ25lZCBkYXRhPC9hPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRTeW50YXguaHRtbCNTcGFyY18wMDJkU3ludGF4Ij45LjM5LjMgU3BhcmMgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRDaGFycy5odG1sI1NwYXJjXzAwMmRDaGFycyI+OS4zOS4zLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRSZWdzLmh0bWwjU3BhcmNfMDAyZFJlZ3MiPjkuMzkuMy4yIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRDb25zdGFudHMuaHRtbCNTcGFyY18wMDJkQ29uc3RhbnRzIj45LjM5LjMuMyBDb25zdGFudHM8L2E+Cis8bGk+PGEgaHJlZj0iU3BhcmNfMDAyZFJlbG9jcy5odG1sI1NwYXJjXzAwMmRSZWxvY3MiPjkuMzkuMy40IFJlbG9jYXRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNwYXJjXzAwMmRTaXplXzAwMmRUcmFuc2xhdGlvbnMuaHRtbCNTcGFyY18wMDJkU2l6ZV8wMDJkVHJhbnNsYXRpb25zIj45LjM5LjMuNSBTaXplIFRyYW5zbGF0aW9uczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRmxvYXQuaHRtbCNTcGFyY18wMDJkRmxvYXQiPjkuMzkuNCBGbG9hdGluZyBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJTcGFyY18wMDJkRGlyZWN0aXZlcy5odG1sI1NwYXJjXzAwMmREaXJlY3RpdmVzIj45LjM5LjUgU3BhcmMgTWFjaGluZSBEaXJlY3RpdmVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNTRYXzAwMmREZXBlbmRlbnQiPjkuNDAgVElDNTRYIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE9wdHMuaHRtbCNUSUM1NFhfMDAyZE9wdHMiPjkuNDAuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQmxvY2suaHRtbCNUSUM1NFhfMDAyZEJsb2NrIj45LjQwLjIgQmxvY2tpbmc8L2E+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRFbnYuaHRtbCNUSUM1NFhfMDAyZEVudiI+OS40MC4zIEVudmlyb25tZW50IFNldHRpbmdzPC9hPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkQ29uc3RhbnRzLmh0bWwjVElDNTRYXzAwMmRDb25zdGFudHMiPjkuNDAuNCBDb25zdGFudHMgU3ludGF4PC9hPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkU3Vic3ltcy5odG1sI1RJQzU0WF8wMDJkU3Vic3ltcyI+OS40MC41IFN0cmluZyBTdWJzdGl0dXRpb248L2E+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRMb2NhbHMuaHRtbCNUSUM1NFhfMDAyZExvY2FscyI+OS40MC42IExvY2FsIExhYmVsczwvYT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZEJ1aWx0aW5zLmh0bWwjVElDNTRYXzAwMmRCdWlsdGlucyI+OS40MC43IE1hdGggQnVpbHRpbnM8L2E+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmRFeHQuaHRtbCNUSUM1NFhfMDAyZEV4dCI+OS40MC44IEV4dGVuZGVkIEFkZHJlc3Npbmc8L2E+Cis8bGk+PGEgaHJlZj0iVElDNTRYXzAwMmREaXJlY3RpdmVzLmh0bWwjVElDNTRYXzAwMmREaXJlY3RpdmVzIj45LjQwLjkgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE1hY3Jvcy5odG1sI1RJQzU0WF8wMDJkTWFjcm9zIj45LjQwLjEwIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZE1NUmVncy5odG1sI1RJQzU0WF8wMDJkTU1SZWdzIj45LjQwLjExIE1lbW9yeS1tYXBwZWQgUmVnaXN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9IlRJQzU0WF8wMDJkU3ludGF4Lmh0bWwjVElDNTRYXzAwMmRTeW50YXgiPjkuNDAuMTIgVElDNTRYIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJUSUM1NFhfMDAyZENoYXJzLmh0bWwjVElDNTRYXzAwMmRDaGFycyI+OS40MC4xMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJUSUM2WF8wMDJkRGVwZW5kZW50Lmh0bWwjVElDNlhfMDAyZERlcGVuZGVudCI+OS40MSBUSUM2WCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iVElDNlgtT3B0aW9ucy5odG1sI1RJQzZYLU9wdGlvbnMiPjkuNDEuMSBUSUM2WCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlRJQzZYLVN5bnRheC5odG1sI1RJQzZYLVN5bnRheCI+OS40MS4yIFRJQzZYIFN5bnRheDwvYT4KKzxsaT48YSBocmVmPSJUSUM2WC1EaXJlY3RpdmVzLmh0bWwjVElDNlgtRGlyZWN0aXZlcyI+OS40MS4zIFRJQzZYIERpcmVjdGl2ZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3hfMDAyZERlcGVuZGVudC5odG1sI1RJTEVfMDAyZEd4XzAwMmREZXBlbmRlbnQiPjkuNDIgVElMRS1HeCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI1RJTEVfMDAyZEd4LU9wdGlvbnMiPjkuNDIuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LVN5bnRheC5odG1sI1RJTEVfMDAyZEd4LVN5bnRheCI+OS40Mi4yIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1PcGNvZGVzLmh0bWwjVElMRV8wMDJkR3gtT3Bjb2RlcyI+OS40Mi4yLjEgT3Bjb2RlIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LVJlZ2lzdGVycy5odG1sI1RJTEVfMDAyZEd4LVJlZ2lzdGVycyI+OS40Mi4yLjIgUmVnaXN0ZXIgTmFtZXM8L2E+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtTW9kaWZpZXJzLmh0bWwjVElMRV8wMDJkR3gtTW9kaWZpZXJzIj45LjQyLjIuMyBTeW1ib2xpYyBPcGVyYW5kIE1vZGlmaWVyczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1EaXJlY3RpdmVzLmh0bWwjVElMRV8wMDJkR3gtRGlyZWN0aXZlcyI+OS40Mi4zIFRJTEUtR3ggRGlyZWN0aXZlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJUSUxFUHJvXzAwMmREZXBlbmRlbnQuaHRtbCNUSUxFUHJvXzAwMmREZXBlbmRlbnQiPjkuNDMgVElMRVBybyBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iVElMRVByby1PcHRpb25zLmh0bWwjVElMRVByby1PcHRpb25zIj45LjQzLjEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJUSUxFUHJvLVN5bnRheC5odG1sI1RJTEVQcm8tU3ludGF4Ij45LjQzLjIgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tT3Bjb2Rlcy5odG1sI1RJTEVQcm8tT3Bjb2RlcyI+OS40My4yLjEgT3Bjb2RlIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tUmVnaXN0ZXJzLmh0bWwjVElMRVByby1SZWdpc3RlcnMiPjkuNDMuMi4yIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tTW9kaWZpZXJzLmh0bWwjVElMRVByby1Nb2RpZmllcnMiPjkuNDMuMi4zIFN5bWJvbGljIE9wZXJhbmQgTW9kaWZpZXJzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tRGlyZWN0aXZlcy5odG1sI1RJTEVQcm8tRGlyZWN0aXZlcyI+OS40My4zIFRJTEVQcm8gRGlyZWN0aXZlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJaODBfMDAyZERlcGVuZGVudC5odG1sI1o4MF8wMDJkRGVwZW5kZW50Ij45LjQ0IFo4MCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iWjgwLU9wdGlvbnMuaHRtbCNaODAtT3B0aW9ucyI+OS40NC4xIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iWjgwLVN5bnRheC5odG1sI1o4MC1TeW50YXgiPjkuNDQuMiBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iWjgwXzAwMmRDaGFycy5odG1sI1o4MF8wMDJkQ2hhcnMiPjkuNDQuMi4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJaODBfMDAyZFJlZ3MuaHRtbCNaODBfMDAyZFJlZ3MiPjkuNDQuMi4yIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9Ilo4MF8wMDJkQ2FzZS5odG1sI1o4MF8wMDJkQ2FzZSI+OS40NC4yLjMgQ2FzZSBTZW5zaXRpdml0eTwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJaODAtRmxvYXRpbmctUG9pbnQuaHRtbCNaODAtRmxvYXRpbmctUG9pbnQiPjkuNDQuMyBGbG9hdGluZyBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJaODAtRGlyZWN0aXZlcy5odG1sI1o4MC1EaXJlY3RpdmVzIj45LjQ0LjQgWjgwIEFzc2VtYmxlciBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9Ilo4MC1PcGNvZGVzLmh0bWwjWjgwLU9wY29kZXMiPjkuNDQuNSBPcGNvZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ilo4MDAwXzAwMmREZXBlbmRlbnQuaHRtbCNaODAwMF8wMDJkRGVwZW5kZW50Ij45LjQ1IFo4MDAwIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJaODAwMC1PcHRpb25zLmh0bWwjWjgwMDAtT3B0aW9ucyI+OS40NS4xIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iWjgwMDAtU3ludGF4Lmh0bWwjWjgwMDAtU3ludGF4Ij45LjQ1LjIgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ilo4MDAwXzAwMmRDaGFycy5odG1sI1o4MDAwXzAwMmRDaGFycyI+OS40NS4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9Ilo4MDAwXzAwMmRSZWdzLmh0bWwjWjgwMDBfMDAyZFJlZ3MiPjkuNDUuMi4yIFJlZ2lzdGVyIE5hbWVzPC9hPgorPGxpPjxhIGhyZWY9Ilo4MDAwXzAwMmRBZGRyZXNzaW5nLmh0bWwjWjgwMDBfMDAyZEFkZHJlc3NpbmciPjkuNDUuMi4zIEFkZHJlc3NpbmcgTW9kZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iWjgwMDAtRGlyZWN0aXZlcy5odG1sI1o4MDAwLURpcmVjdGl2ZXMiPjkuNDUuMyBBc3NlbWJsZXIgRGlyZWN0aXZlcyBmb3IgdGhlIFo4MDAwPC9hPgorPGxpPjxhIGhyZWY9Ilo4MDAwLU9wY29kZXMuaHRtbCNaODAwMC1PcGNvZGVzIj45LjQ1LjQgT3Bjb2RlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJWYXhfMDAyZERlcGVuZGVudC5odG1sI1ZheF8wMDJkRGVwZW5kZW50Ij45LjQ2IFZBWCBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRPcHRzLmh0bWwjVkFYXzAwMmRPcHRzIj45LjQ2LjEgVkFYIENvbW1hbmQtTGluZSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkZmxvYXQuaHRtbCNWQVhfMDAyZGZsb2F0Ij45LjQ2LjIgVkFYIEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9IlZBWF8wMDJkZGlyZWN0aXZlcy5odG1sI1ZBWF8wMDJkZGlyZWN0aXZlcyI+OS40Ni4zIFZheCBNYWNoaW5lIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGNvZGVzLmh0bWwjVkFYXzAwMmRvcGNvZGVzIj45LjQ2LjQgVkFYIE9wY29kZXM8L2E+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRicmFuY2guaHRtbCNWQVhfMDAyZGJyYW5jaCI+OS40Ni41IFZBWCBCcmFuY2ggSW1wcm92ZW1lbnQ8L2E+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRvcGVyYW5kcy5odG1sI1ZBWF8wMDJkb3BlcmFuZHMiPjkuNDYuNiBWQVggT3BlcmFuZHM8L2E+Cis8bGk+PGEgaHJlZj0iVkFYXzAwMmRuby5odG1sI1ZBWF8wMDJkbm8iPjkuNDYuNyBOb3QgU3VwcG9ydGVkIG9uIFZBWDwvYT4KKzxsaT48YSBocmVmPSJWQVhfMDAyZFN5bnRheC5odG1sI1ZBWF8wMDJkU3ludGF4Ij45LjQ2LjggVkFYIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJWQVhfMDAyZENoYXJzLmh0bWwjVkFYXzAwMmRDaGFycyI+OS40Ni44LjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZERlcGVuZGVudC5odG1sI1Y4NTBfMDAyZERlcGVuZGVudCI+OS40NyB2ODUwIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPjkuNDcuMSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlY4NTAtU3ludGF4Lmh0bWwjVjg1MC1TeW50YXgiPjkuNDcuMiBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iVjg1MF8wMDJkQ2hhcnMuaHRtbCNWODUwXzAwMmRDaGFycyI+OS40Ny4yLjEgU3BlY2lhbCBDaGFyYWN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9IlY4NTBfMDAyZFJlZ3MuaHRtbCNWODUwXzAwMmRSZWdzIj45LjQ3LjIuMiBSZWdpc3RlciBOYW1lczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJWODUwLUZsb2F0aW5nLVBvaW50Lmh0bWwjVjg1MC1GbG9hdGluZy1Qb2ludCI+OS40Ny4zIEZsb2F0aW5nIFBvaW50PC9hPgorPGxpPjxhIGhyZWY9IlY4NTAtRGlyZWN0aXZlcy5odG1sI1Y4NTAtRGlyZWN0aXZlcyI+OS40Ny40IFY4NTAgTWFjaGluZSBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9IlY4NTAtT3Bjb2Rlcy5odG1sI1Y4NTAtT3Bjb2RlcyI+OS40Ny41IE9wY29kZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iWEdBVEVfMDAyZERlcGVuZGVudC5odG1sI1hHQVRFXzAwMmREZXBlbmRlbnQiPjkuNDggWEdBVEUgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRPcHRzLmh0bWwjWEdBVEVfMDAyZE9wdHMiPjkuNDguMSBYR0FURSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmRTeW50YXguaHRtbCNYR0FURV8wMDJkU3ludGF4Ij45LjQ4LjIgU3ludGF4PC9hPgorPGxpPjxhIGhyZWY9IlhHQVRFXzAwMmREaXJlY3RpdmVzLmh0bWwjWEdBVEVfMDAyZERpcmVjdGl2ZXMiPjkuNDguMyBBc3NlbWJsZXIgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJYR0FURV8wMDJkRmxvYXQuaHRtbCNYR0FURV8wMDJkRmxvYXQiPjkuNDguNCBGbG9hdGluZyBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJYR0FURV8wMDJkb3Bjb2Rlcy5odG1sI1hHQVRFXzAwMmRvcGNvZGVzIj45LjQ4LjUgT3Bjb2RlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJYU1RPUk1ZMTZfMDAyZERlcGVuZGVudC5odG1sI1hTVE9STVkxNl8wMDJkRGVwZW5kZW50Ij45LjQ5IFhTdG9ybXkxNiBEZXBlbmRlbnQgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2LVN5bnRheC5odG1sI1hTdG9ybXkxNi1TeW50YXgiPjkuNDkuMSBTeW50YXg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iWFN0b3JteTE2XzAwMmRDaGFycy5odG1sI1hTdG9ybXkxNl8wMDJkQ2hhcnMiPjkuNDkuMS4xIFNwZWNpYWwgQ2hhcmFjdGVyczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJYU3Rvcm15MTYtRGlyZWN0aXZlcy5odG1sI1hTdG9ybXkxNi1EaXJlY3RpdmVzIj45LjQ5LjIgWFN0b3JteTE2IE1hY2hpbmUgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBocmVmPSJYU3Rvcm15MTYtT3Bjb2Rlcy5odG1sI1hTdG9ybXkxNi1PcGNvZGVzIj45LjQ5LjMgWFN0b3JteTE2IFBzZXVkby1PcGNvZGVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYV8wMDJkRGVwZW5kZW50Lmh0bWwjWHRlbnNhXzAwMmREZXBlbmRlbnQiPjkuNTAgWHRlbnNhIERlcGVuZGVudCBGZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj45LjUwLjEgQ29tbWFuZCBMaW5lIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLVN5bnRheC5odG1sI1h0ZW5zYS1TeW50YXgiPjkuNTAuMiBBc3NlbWJsZXIgU3ludGF4PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcGNvZGVzLmh0bWwjWHRlbnNhLU9wY29kZXMiPjkuNTAuMi4xIE9wY29kZSBOYW1lczwvYT4KKzxsaT48YSBocmVmPSJYdGVuc2EtUmVnaXN0ZXJzLmh0bWwjWHRlbnNhLVJlZ2lzdGVycyI+OS41MC4yLjIgUmVnaXN0ZXIgTmFtZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wdGltaXphdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW1pemF0aW9ucyI+OS41MC4zIFh0ZW5zYSBPcHRpbWl6YXRpb25zPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkRlbnNpdHktSW5zdHJ1Y3Rpb25zLmh0bWwjRGVuc2l0eS1JbnN0cnVjdGlvbnMiPjkuNTAuMy4xIFVzaW5nIERlbnNpdHkgSW5zdHJ1Y3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1BdXRvbWF0aWMtQWxpZ25tZW50Lmh0bWwjWHRlbnNhLUF1dG9tYXRpYy1BbGlnbm1lbnQiPjkuNTAuMy4yIEF1dG9tYXRpYyBJbnN0cnVjdGlvbiBBbGlnbm1lbnQ8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtUmVsYXhhdGlvbiI+OS41MC40IFh0ZW5zYSBSZWxheGF0aW9uPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1CcmFuY2gtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1CcmFuY2gtUmVsYXhhdGlvbiI+OS41MC40LjEgQ29uZGl0aW9uYWwgQnJhbmNoIFJlbGF4YXRpb248L2E+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLUNhbGwtUmVsYXhhdGlvbi5odG1sI1h0ZW5zYS1DYWxsLVJlbGF4YXRpb24iPjkuNTAuNC4yIEZ1bmN0aW9uIENhbGwgUmVsYXhhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24uaHRtbCNYdGVuc2EtSW1tZWRpYXRlLVJlbGF4YXRpb24iPjkuNTAuNC4zIE90aGVyIEltbWVkaWF0ZSBGaWVsZCBSZWxheGF0aW9uPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1EaXJlY3RpdmVzLmh0bWwjWHRlbnNhLURpcmVjdGl2ZXMiPjkuNTAuNSBEaXJlY3RpdmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlNjaGVkdWxlLURpcmVjdGl2ZS5odG1sI1NjaGVkdWxlLURpcmVjdGl2ZSI+OS41MC41LjEgc2NoZWR1bGU8L2E+Cis8bGk+PGEgaHJlZj0iTG9uZ2NhbGxzLURpcmVjdGl2ZS5odG1sI0xvbmdjYWxscy1EaXJlY3RpdmUiPjkuNTAuNS4yIGxvbmdjYWxsczwvYT4KKzxsaT48YSBocmVmPSJUcmFuc2Zvcm0tRGlyZWN0aXZlLmh0bWwjVHJhbnNmb3JtLURpcmVjdGl2ZSI+OS41MC41LjMgdHJhbnNmb3JtPC9hPgorPGxpPjxhIGhyZWY9IkxpdGVyYWwtRGlyZWN0aXZlLmh0bWwjTGl0ZXJhbC1EaXJlY3RpdmUiPjkuNTAuNS40IGxpdGVyYWw8L2E+Cis8bGk+PGEgaHJlZj0iTGl0ZXJhbC1Qb3NpdGlvbi1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLVBvc2l0aW9uLURpcmVjdGl2ZSI+OS41MC41LjUgbGl0ZXJhbF9wb3NpdGlvbjwvYT4KKzxsaT48YSBocmVmPSJMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUuaHRtbCNMaXRlcmFsLVByZWZpeC1EaXJlY3RpdmUiPjkuNTAuNS42IGxpdGVyYWxfcHJlZml4PC9hPgorPGxpPjxhIGhyZWY9IkFic29sdXRlLUxpdGVyYWxzLURpcmVjdGl2ZS5odG1sI0Fic29sdXRlLUxpdGVyYWxzLURpcmVjdGl2ZSI+OS41MC41LjcgYWJzb2x1dGUtbGl0ZXJhbHM8L2E+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1JlcG9ydGluZy1CdWdzIiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj4xMCBSZXBvcnRpbmcgQnVnczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPjEwLjEgSGF2ZSBZb3UgRm91bmQgYSBCdWc/PC9hPgorPGxpPjxhIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIj4xMC4yIEhvdyB0byBSZXBvcnQgQnVnczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQWNrbm93bGVkZ2VtZW50cyIgaHJlZj0iQWNrbm93bGVkZ2VtZW50cy5odG1sI0Fja25vd2xlZGdlbWVudHMiPjExIEFja25vd2xlZGdlbWVudHM8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5BcHBlbmRpeCBBIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfQVMtSW5kZXgiIGhyZWY9IkFTLUluZGV4Lmh0bWwjQVMtSW5kZXgiPkFTIEluZGV4PC9hPgorPC9saT48L3VsPgorPC9kaXY+CisKKworCis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRvcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwjZGlyIj4oZGlyKTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPlVzaW5nIGFzPC9oMj4KKworPHA+VGhpcyBmaWxlIGlzIGEgdXNlciBndWlkZSB0byB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGFzc2VtYmxlciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPgorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCisgICA8cD5UaGlzIGRvY3VtZW50IGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUKK0RvY3VtZW50YXRpb24gTGljZW5zZS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgJmxkcXVvO0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSZyZHF1bzsuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT46ICAgICAgICAgICAgICAgICAgICAgT3ZlcnZpZXcKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPjogICAgICAgICAgICAgICAgICAgICBDb21tYW5kLUxpbmUgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iU3ludGF4Lmh0bWwjU3ludGF4Ij5TeW50YXg8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJTZWN0aW9ucy5odG1sI1NlY3Rpb25zIj5TZWN0aW9uczwvYT46ICAgICAgICAgICAgICAgICAgICAgU2VjdGlvbnMgYW5kIFJlbG9jYXRpb24KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IlN5bWJvbHMuaHRtbCNTeW1ib2xzIj5TeW1ib2xzPC9hPjogICAgICAgICAgICAgICAgICAgICAgU3ltYm9scworPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+OiAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25zCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJQc2V1ZG8tT3BzLmh0bWwjUHNldWRvLU9wcyI+UHNldWRvIE9wczwvYT46ICAgICAgICAgICAgICAgICAgIEFzc2VtYmxlciBEaXJlY3RpdmVzCisKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Ik9iamVjdC1BdHRyaWJ1dGVzLmh0bWwjT2JqZWN0LUF0dHJpYnV0ZXMiPk9iamVjdCBBdHRyaWJ1dGVzPC9hPjogICAgICAgICAgICBPYmplY3QgQXR0cmlidXRlcworPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbmNpZXMuaHRtbCNNYWNoaW5lLURlcGVuZGVuY2llcyI+TWFjaGluZSBEZXBlbmRlbmNpZXM8L2E+OiAgICAgICAgIE1hY2hpbmUgRGVwZW5kZW50IEZlYXR1cmVzCis8bGk+PGEgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyI+UmVwb3J0aW5nIEJ1Z3M8L2E+OiAgICAgICAgICAgICAgIFJlcG9ydGluZyBCdWdzCis8bGk+PGEgaHJlZj0iQWNrbm93bGVkZ2VtZW50cy5odG1sI0Fja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+OiAgICAgICAgICAgICBXaG8gRGlkIFdoYXQKKzxsaT48YSBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT46ICAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCis8bGk+PGEgaHJlZj0iQVMtSW5kZXguaHRtbCNBUy1JbmRleCI+QVMgSW5kZXg8L2E+OiAgICAgICAgICAgICAgICAgICAgIEFTIEluZGV4Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9saXN0aW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9saXN0aW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkZTUwNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL2xpc3RpbmcuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5saXN0aW5nIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIiB0aXRsZT0iSW52b2tpbmciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMLmh0bWwjTCIgdGl0bGU9IkwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNLmh0bWwjTSIgdGl0bGU9Ik0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJsaXN0aW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik0uaHRtbCNNIj5NPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTC5odG1sI0wiPkw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuOCBDb25maWd1cmluZyBsaXN0aW5nIG91dHB1dDogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1saXN0aW5nPC9zcGFuPjwvc2FtcD48L2gzPgorCis8cD5UaGUgbGlzdGluZyBmZWF0dXJlIG9mIHRoZSBhc3NlbWJsZXIgY2FuIGJlIGVuYWJsZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUgc3dpdGNoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1hPC9zcGFuPjwvc2FtcD4mcnNxdW87IChzZWUgPGEgaHJlZj0iYS5odG1sI2EiPmE8L2E+KS4gIFRoaXMgZmVhdHVyZSBjb21iaW5lcyB0aGUgaW5wdXQgc291cmNlIGZpbGUocykgd2l0aCBhCitoZXggZHVtcCBvZiB0aGUgY29ycmVzcG9uZGluZyBsb2NhdGlvbnMgaW4gdGhlIG91dHB1dCBvYmplY3QgZmlsZSwgYW5kIGRpc3BsYXlzCit0aGVtIGFzIGEgbGlzdGluZyBmaWxlLiAgVGhlIGZvcm1hdCBvZiB0aGlzIGxpc3RpbmcgY2FuIGJlIGNvbnRyb2xsZWQgYnkKK2RpcmVjdGl2ZXMgaW5zaWRlIHRoZSBhc3NlbWJsZXIgc291cmNlIChpLmUuLCA8Y29kZT4ubGlzdDwvY29kZT4gKHNlZSA8YSBocmVmPSJMaXN0Lmh0bWwjTGlzdCI+TGlzdDwvYT4pLAorPGNvZGU+LnRpdGxlPC9jb2RlPiAoc2VlIDxhIGhyZWY9IlRpdGxlLmh0bWwjVGl0bGUiPlRpdGxlPC9hPiksIDxjb2RlPi5zYnR0bDwvY29kZT4gKHNlZSA8YSBocmVmPSJTYnR0bC5odG1sI1NidHRsIj5TYnR0bDwvYT4pLAorPGNvZGU+LnBzaXplPC9jb2RlPiAoc2VlIDxhIGhyZWY9IlBzaXplLmh0bWwjUHNpemUiPlBzaXplPC9hPiksIGFuZAorPGNvZGU+LmVqZWN0PC9jb2RlPiAoc2VlIDxhIGhyZWY9IkVqZWN0Lmh0bWwjRWplY3QiPkVqZWN0PC9hPikgYW5kIGFsc28gYnkgdGhlIGZvbGxvd2luZyBzd2l0Y2hlczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LS1saXN0aW5nLWxocy13aWR0aD0mbHNxdW87PC9jb2RlPjxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5udW1iZXI8L3NwYW4+PC9zYW1wPjxjb2RlPiZyc3F1bzs8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRsaXN0aW5nXzAwMmRsaHNfMDAyZHdpZHRoLTcxIj48L2E+PGEgbmFtZT0iaW5kZXgtV2lkdGgtb2YtZmlyc3QtbGluZS1kaXNhc3NlbWJseS1vdXRwdXQtNzIiPjwvYT5TZXRzIHRoZSBtYXhpbXVtIHdpZHRoLCBpbiB3b3Jkcywgb2YgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGhleCBieXRlIGR1bXAuICBUaGlzCitkdW1wIGFwcGVhcnMgb24gdGhlIGxlZnQgaGFuZCBzaWRlIG9mIHRoZSBsaXN0aW5nIG91dHB1dC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tbGlzdGluZy1saHMtd2lkdGgyPSZsc3F1bzs8L2NvZGU+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm51bWJlcjwvc3Bhbj48L3NhbXA+PGNvZGU+JnJzcXVvOzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGxpc3RpbmdfMDAyZGxoc18wMDJkd2lkdGgyLTczIj48L2E+PGEgbmFtZT0iaW5kZXgtV2lkdGgtb2YtY29udGludWF0aW9uLWxpbmVzLW9mLWRpc2Fzc2VtYmx5LW91dHB1dC03NCI+PC9hPlNldHMgdGhlIG1heGltdW0gd2lkdGgsIGluIHdvcmRzLCBvZiBhbnkgZnVydGhlciBsaW5lcyBvZiB0aGUgaGV4IGJ5dGUgZHVtcCBmb3IKK2EgZ2l2ZW4gaW5wdXQgc291cmNlIGxpbmUuICBJZiB0aGlzIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGJlaW5nCit0aGUgc2FtZSBhcyB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbGlzdGluZy1saHMtd2lkdGg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJZiBuZWl0aGVyCitzd2l0Y2ggaXMgdXNlZCB0aGUgZGVmYXVsdCBpcyB0byBvbmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWxpc3RpbmctcmhzLXdpZHRoPSZsc3F1bzs8L2NvZGU+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm51bWJlcjwvc3Bhbj48L3NhbXA+PGNvZGU+JnJzcXVvOzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGxpc3RpbmdfMDAyZHJoc18wMDJkd2lkdGgtNzUiPjwvYT48YSBuYW1lPSJpbmRleC1XaWR0aC1vZi1zb3VyY2UtbGluZS1vdXRwdXQtNzYiPjwvYT5TZXRzIHRoZSBtYXhpbXVtIHdpZHRoLCBpbiBjaGFyYWN0ZXJzLCBvZiB0aGUgc291cmNlIGxpbmUgdGhhdCBpcyBkaXNwbGF5ZWQKK2Fsb25nc2lkZSB0aGUgaGV4IGR1bXAuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgMTAwLiAgVGhlCitzb3VyY2UgbGluZSBpcyBkaXNwbGF5ZWQgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgbGlzdGluZyBvdXRwdXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWxpc3RpbmctY29udC1saW5lcz0mbHNxdW87PC9jb2RlPjxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5udW1iZXI8L3NwYW4+PC9zYW1wPjxjb2RlPiZyc3F1bzs8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRsaXN0aW5nXzAwMmRjb250XzAwMmRsaW5lcy03NyI+PC9hPjxhIG5hbWU9ImluZGV4LU1heGltdW0tbnVtYmVyLW9mLWNvbnRpbnVhdGlvbi1saW5lcy03OCI+PC9hPlNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnRpbnVhdGlvbiBsaW5lcyBvZiBoZXggZHVtcCB0aGF0IHdpbGwgYmUKK2Rpc3BsYXllZCBmb3IgYSBnaXZlbiBzaW5nbGUgbGluZSBvZiBzb3VyY2UgaW5wdXQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0LiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL21hcmNoXzAwMmRvcHRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL21hcmNoXzAwMmRvcHRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2QxMzA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvbWFyY2hfMDAyZG9wdGlvbi5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1DUklTXzAwMmRPcHRzLmh0bWwjbWFyY2glMmRvcHRpb24iPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvbW1peHNpdGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL21taXhzaXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMzMmViYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL21taXhzaXRlLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPU1NSVhfMDAyZFN5bnRheC5odG1sI21taXhzaXRlIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL28uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL28uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE1ZDcyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvby5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm8gLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1ELmh0bWwjTUQiIHRpdGxlPSJNRCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlIuaHRtbCNSIiB0aXRsZT0iUiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Im8iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUi5odG1sI1IiPlI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNRC5odG1sI01EIj5NRDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xMSBOYW1lIHRoZSBPYmplY3QgRmlsZTogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW88L3NwYW4+PC9zYW1wPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkby04NCI+PC9hPjxhIG5hbWU9ImluZGV4LW5hbWluZy1vYmplY3QtZmlsZS04NSI+PC9hPjxhIG5hbWU9ImluZGV4LW9iamVjdC1maWxlLW5hbWUtODYiPjwvYT5UaGVyZSBpcyBhbHdheXMgb25lIG9iamVjdCBmaWxlIG91dHB1dCB3aGVuIHlvdSBydW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4uICBCeQorZGVmYXVsdCBpdCBoYXMgdGhlIG5hbWUKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hLm91dDwvc3Bhbj48L3NhbXA+IChvciA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Yi5vdXQ8L3NwYW4+PC9zYW1wPiwgZm9yIEludGVsIDk2MCB0YXJnZXRzIG9ubHkpLiAKK1lvdSB1c2UgdGhpcyBvcHRpb24gKHdoaWNoIHRha2VzIGV4YWN0bHkgb25lIGZpbGVuYW1lKSB0byBnaXZlIHRoZQorb2JqZWN0IGZpbGUgYSBkaWZmZXJlbnQgbmFtZS4KKworICAgPHA+V2hhdGV2ZXIgdGhlIG9iamVjdCBmaWxlIGlzIGNhbGxlZCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gb3ZlcndyaXRlcyBhbnkKK2V4aXN0aW5nIGZpbGUgb2YgdGhlIHNhbWUgbmFtZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1BbGlhc2VzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLUFsaWFzZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGU5OGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1BbGlhc2VzLmh0bWwKQEAgLTAsMCArMSwxNTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnMzOTAgQWxpYXNlcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCIgdGl0bGU9InMzOTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iczM5MC1Gb3JtYXRzLmh0bWwjczM5MC1Gb3JtYXRzIiB0aXRsZT0iczM5MCBGb3JtYXRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iczM5MC1PcGVyYW5kLU1vZGlmaWVyLmh0bWwjczM5MC1PcGVyYW5kLU1vZGlmaWVyIiB0aXRsZT0iczM5MCBPcGVyYW5kIE1vZGlmaWVyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iczM5MC1BbGlhc2VzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InMzOTAtT3BlcmFuZC1Nb2RpZmllci5odG1sI3MzOTAtT3BlcmFuZC1Nb2RpZmllciI+czM5MCBPcGVyYW5kIE1vZGlmaWVyPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iczM5MC1Gb3JtYXRzLmh0bWwjczM5MC1Gb3JtYXRzIj5zMzkwIEZvcm1hdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJzMzkwLVN5bnRheC5odG1sI3MzOTAtU3ludGF4Ij5zMzkwIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMzUuMy41IEluc3RydWN0aW9uIEFsaWFzZXM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1hbGlhc2VzXzAwMmMtczM5MC0xNzAzIj48L2E+PGEgbmFtZT0iaW5kZXgtczM5MC1pbnN0cnVjdGlvbi1hbGlhc2VzLTE3MDQiPjwvYT4KK0Egc3BlY2lmaWMgYml0IHBhdHRlcm4gY2FuIGhhdmUgbXVsdGlwbGUgbW5lbW9uaWNzLCBmb3IgZXhhbXBsZQordGhlIGJpdCBwYXR0ZXJuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MHhhNzAwMDAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXMgdGhlIG1uZW1vbmljcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnRtaDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dG1saDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gSW4gYWRkaXRpb24sIHRoZXJlIGFyZSBhIG51bWJlciBvZiBtbmVtb25pY3MgcmVjb2duaXplZCBieQorPGNvZGU+YXM8L2NvZGU+IHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbi4gCitUaGVzZSBhcmUgdGhlIHNob3J0IGZvcm1zIG9mIHRoZSBicmFuY2ggaW5zdHJ1Y3Rpb25zLCB3aGVyZSB0aGUgY29uZGl0aW9uCitjb2RlIG1hc2sgb3BlcmFuZCBpcyBlbmNvZGVkIGluIHRoZSBtbmVtb25pYy4gVGhpcyBpcyByZWxldmFudCBmb3IgdGhlCiticmFuY2ggaW5zdHJ1Y3Rpb25zLCB0aGUgY29tcGFyZSBhbmQgYnJhbmNoIGluc3RydWN0aW9ucywgYW5kIHRoZQorY29tcGFyZSBhbmQgdHJhcCBpbnN0cnVjdGlvbnMuCisKKyAgIDxwPkZvciB0aGUgYnJhbmNoIGluc3RydWN0aW9ucyB0aGVyZSBhcmUgMjAgY29uZGl0aW9uIGNvZGUgc3RyaW5ncyB0aGF0IGNhbgorYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBtbmVtb25pYyBpbiBwbGFjZSBvZiBhIG1hc2sgb3BlcmFuZCBpbiB0aGUgaW5zdHJ1Y3Rpb24KK2Zvcm1hdDoKKworPHByZSBjbGFzcz0iZGlzcGxheSI+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRoIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj5pbnN0cnVjdGlvbiA8L3RoPjx0aCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+c2hvcnQgZm9ybQorICAgICA8YnI+PC90aD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj5iY3IgICBNMSxSMiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPmImbHQ7bSZndDtyICBSMgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj5iYyAgICBNMSxEMihYMixCMikgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPmImbHQ7bSZndDsgICBEMihYMixCMikKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+YnJjICAgTTEsSTIgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPmombHQ7bSZndDsgICBJMgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj5icmNsICBNMSxJMiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+amcmbHQ7bSZndDsgIEkyCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKzwvcHJlPgorICAgPHA+SW4gdGhlIG1uZW1vbmljIGZvciBhIGJyYW5jaCBpbnN0cnVjdGlvbiB0aGUgY29uZGl0aW9uIGNvZGUgc3RyaW5nICZsdDttJmd0OworY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm8gPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gb3ZlcmZsb3cgLyBpZiBvbmVzCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmggPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gQSBoaWdoCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPnAgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gcGx1cworICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5ubGUgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gbm90IGxvdyBvciBlcXVhbAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5sIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIEEgbG93CisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm0gPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gbWludXMKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+bmhlIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIG5vdCBoaWdoIG9yIGVxdWFsCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmxoIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIGxvdyBvciBoaWdoCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm5lIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIEEgbm90IGVxdWFsIEIKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+bnogPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gbm90IHplcm8gLyBpZiBub3QgemVyb3MKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+ZSA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiBBIGVxdWFsIEIKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+eiA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiB6ZXJvIC8gaWYgemVyb2VzCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm5saCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiBub3QgbG93IG9yIGhpZ2gKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+aGUgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gaGlnaCBvciBlcXVhbAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5ubCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiBBIG5vdCBsb3cKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+bm0gPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gbm90IG1pbnVzIC8gaWYgbm90IG1peGVkCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmxlIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIGxvdyBvciBlcXVhbAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5uaCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiBBIG5vdCBoaWdoCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm5wIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIG5vdCBwbHVzCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm5vIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIG5vdCBvdmVyZmxvdyAvIGlmIG5vdCBvbmVzCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKzwvcHJlPgorICAgPHA+Rm9yIHRoZSBjb21wYXJlIGFuZCBicmFuY2gsIGFuZCBjb21wYXJlIGFuZCB0cmFwIGluc3RydWN0aW9ucyB0aGVyZQorYXJlIDEyIGNvbmRpdGlvbiBjb2RlIHN0cmluZ3MgdGhhdCBjYW4gYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBtbmVtb25pYyBpbgorcGxhY2Ugb2YgYSBtYXNrIG9wZXJhbmQgaW4gdGhlIGluc3RydWN0aW9uIGZvcm1hdDoKKworPHByZSBjbGFzcz0iZGlzcGxheSI+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRoIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5pbnN0cnVjdGlvbiA8L3RoPjx0aCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+c2hvcnQgZm9ybQorICAgICA8YnI+PC90aD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jcmIgICAgUjEsUjIsTTMsRDQoQjQpICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y3JiJmx0O20mZ3Q7ICAgIFIxLFIyLEQ0KEI0KQorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jZ3JiICAgUjEsUjIsTTMsRDQoQjQpICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2dyYiZsdDttJmd0OyAgIFIxLFIyLEQ0KEI0KQorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jcmogICAgUjEsUjIsTTMsSTQgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jcmombHQ7bSZndDsgICAgUjEsUjIsSTQKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2dyaiAgIFIxLFIyLE0zLEk0ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2dyaiZsdDttJmd0OyAgIFIxLFIyLEk0CisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNpYiAgICBSMSxJMixNMyxENChCNCkgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jaWImbHQ7bSZndDsgICAgUjEsSTIsRDQoQjQpCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNnaWIgICBSMSxJMixNMyxENChCNCkgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jZ2liJmx0O20mZ3Q7ICAgUjEsSTIsRDQoQjQpCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNpaiAgICBSMSxJMixNMyxJNCAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNpaiZsdDttJmd0OyAgICBSMSxJMixJNAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jZ2lqICAgUjEsSTIsTTMsSTQgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jZ2lqJmx0O20mZ3Q7ICAgUjEsSTIsSTQKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y3J0ICAgIFIxLFIyLE0zICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y3J0Jmx0O20mZ3Q7ICAgIFIxLFIyCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNncnQgICBSMSxSMixNMyAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNncnQmbHQ7bSZndDsgICBSMSxSMgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jaXQgICAgUjEsSTIsTTMgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jaXQmbHQ7bSZndDsgICAgUjEsSTIKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2dpdCAgIFIxLEkyLE0zICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2dpdCZsdDttJmd0OyAgIFIxLEkyCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNscmIgICBSMSxSMixNMyxENChCNCkgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jbHJiJmx0O20mZ3Q7ICAgUjEsUjIsRDQoQjQpCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNsZ3JiICBSMSxSMixNMyxENChCNCkgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jbGdyYiZsdDttJmd0OyAgUjEsUjIsRDQoQjQpCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNscmogICBSMSxSMixNMyxJNCAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNscmombHQ7bSZndDsgICBSMSxSMixJNAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jbGdyaiAgUjEsUjIsTTMsSTQgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jbGdyaiZsdDttJmd0OyAgUjEsUjIsSTQKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2xpYiAgIFIxLEkyLE0zLEQ0KEI0KSAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNsaWImbHQ7bSZndDsgICBSMSxJMixENChCNCkKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2xnaWIgIFIxLEkyLE0zLEQ0KEI0KSAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNsZ2liJmx0O20mZ3Q7ICBSMSxJMixENChCNCkKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2xpaiAgIFIxLEkyLE0zLEk0ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2xpaiZsdDttJmd0OyAgIFIxLEkyLEk0CisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNsZ2lqICBSMSxJMixNMyxJNCAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNsZ2lqJmx0O20mZ3Q7ICBSMSxJMixJNAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jbHJ0ICAgUjEsUjIsTTMgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jbHJ0Jmx0O20mZ3Q7ICAgUjEsUjIKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2xncnQgIFIxLFIyLE0zICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+Y2xncnQmbHQ7bSZndDsgIFIxLFIyCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNsZml0ICBSMSxJMixNMyAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPmNsZml0Jmx0O20mZ3Q7ICBSMSxJMgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jbGdpdCAgUjEsSTIsTTMgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5jbGdpdCZsdDttJmd0OyAgUjEsSTIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9wcmU+CisgICA8cD5JbiB0aGUgbW5lbW9uaWMgZm9yIGEgY29tcGFyZSBhbmQgYnJhbmNoIGFuZCBjb21wYXJlIGFuZCB0cmFwIGluc3RydWN0aW9uCit0aGUgY29uZGl0aW9uIGNvZGUgc3RyaW5nICZsdDttJmd0OyBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKKzxwcmUgY2xhc3M9ImRpc3BsYXkiPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+aCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiBBIGhpZ2gKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+bmxlIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIG5vdCBsb3cgb3IgZXF1YWwKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+bCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiBBIGxvdworICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5uaGUgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gbm90IGhpZ2ggb3IgZXF1YWwKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+bmUgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gQSBub3QgZXF1YWwgQgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5saCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiBsb3cgb3IgaGlnaAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5lIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIEEgZXF1YWwgQgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5ubGggPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gbm90IGxvdyBvciBoaWdoCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm5sIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIEEgbm90IGxvdworICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5oZSA8L3RkPjx0ZCB2YWxpZ249InRvcCI+anVtcCBvbiBoaWdoIG9yIGVxdWFsCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm5oIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5qdW1wIG9uIEEgbm90IGhpZ2gKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+bGUgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmp1bXAgb24gbG93IG9yIGVxdWFsCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1DaGFyYWN0ZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLUNoYXJhY3RlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmQ4NGJjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1DaGFyYWN0ZXJzLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+czM5MCBDaGFyYWN0ZXJzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iUy8zOTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iczM5MC1PcHRpb25zLmh0bWwjczM5MC1PcHRpb25zIiB0aXRsZT0iczM5MCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCIgdGl0bGU9InMzOTAgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iczM5MC1DaGFyYWN0ZXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiPnMzOTAgU3ludGF4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iczM5MC1PcHRpb25zLmh0bWwjczM5MC1PcHRpb25zIj5zMzkwIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5TLzM5MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM1LjIgU3BlY2lhbCBDaGFyYWN0ZXJzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb21tZW50LWNoYXJhY3Rlcl8wMDJjLXMzOTAtMTY4OCI+PC9hPjxhIG5hbWU9ImluZGV4LXMzOTAtbGluZS1jb21tZW50LWNoYXJhY3Rlci0xNjg5Ij48L2E+CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIGxpbmUgY29tbWVudCBjaGFyYWN0ZXIuCisKKyAgIDxwPklmIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGxpbmUgdGhlbiB0aGUgd2hvbGUKK2xpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGxpbmUgY291bGQgYWxzbyBiZQorYSBsb2dpY2FsIGxpbmUgbnVtYmVyIGRpcmVjdGl2ZSAoc2VlIDxhIGhyZWY9IkNvbW1lbnRzLmh0bWwjQ29tbWVudHMiPkNvbW1lbnRzPC9hPikgb3IgYSBwcmVwcm9jZXNzb3IKK2NvbnRyb2wgY29tbWFuZCAoc2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmcuaHRtbCNQcmVwcm9jZXNzaW5nIj5QcmVwcm9jZXNzaW5nPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmUtc2VwYXJhdG9yXzAwMmMtczM5MC0xNjkwIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50LXNlcGFyYXRvcl8wMDJjLXMzOTAtMTY5MSI+PC9hPjxhIG5hbWU9ImluZGV4LXMzOTAtbGluZS1zZXBhcmF0b3ItMTY5MiI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBuZXdsaW5lIHRvIHNlcGFyYXRlCitzdGF0ZW1lbnRzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLURpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3MzOTAtRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMjQ3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLURpcmVjdGl2ZXMuaHRtbApAQCAtMCwwICsxLDEyMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+czM5MCBEaXJlY3RpdmVzIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50IiB0aXRsZT0iUy8zOTAtRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCIgdGl0bGU9InMzOTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iczM5MC1GbG9hdGluZy1Qb2ludC5odG1sI3MzOTAtRmxvYXRpbmctUG9pbnQiIHRpdGxlPSJzMzkwIEZsb2F0aW5nIFBvaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iczM5MC1EaXJlY3RpdmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InMzOTAtRmxvYXRpbmctUG9pbnQuaHRtbCNzMzkwLUZsb2F0aW5nLVBvaW50Ij5zMzkwIEZsb2F0aW5nIFBvaW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCI+czM5MCBTeW50YXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5TLzM5MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM1LjQgQXNzZW1ibGVyIERpcmVjdGl2ZXM8L2g0PgorCis8cD48Y29kZT5hczwvY29kZT4gZm9yIHMzOTAgc3VwcG9ydHMgYWxsIG9mIHRoZSBzdGFuZGFyZCBFTEYKK2Fzc2VtYmxlciBkaXJlY3RpdmVzIGFzIG91dGxpbmVkIGluIHRoZSBtYWluIHBhcnQgb2YgdGhpcyBkb2N1bWVudC4gCitTb21lIGRpcmVjdGl2ZXMgaGF2ZSBiZWVuIGV4dGVuZGVkIGFuZCB0aGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsCitkaXJlY3RpdmVzLCB3aGljaCBhcmUgb25seSBhdmFpbGFibGUgZm9yIHRoZSBzMzkwIDxjb2RlPmFzPC9jb2RlPi4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmVpbnNuXzAwN2QtZGlyZWN0aXZlXzAwMmMtczM5MC0xNzExIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPi5pbnNuPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBwZXJtaXRzIHRoZSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGFuIGluc3RydWN0aW9ucworYW5kIG1ha2VzIHRoZSBhc3NlbWJsZXIgaW5zZXJ0IHRoZSBvcGVyYW5kcyBhY2NvcmRpbmcgdG8gb25lIG9mIHRoZQoraW5zdHJ1Y3Rpb25zIGZvcm1hdHMgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmluc248L3NwYW4+PC9zYW1wPiZyc3F1bzsgKDxhIGhyZWY9InMzOTAtRm9ybWF0cy5odG1sI3MzOTAtRm9ybWF0cyI+czM5MCBGb3JtYXRzPC9hPikuIAorRm9yIGV4YW1wbGUsIHRoZSBpbnN0cnVjdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmwgJXIxLDI0KCVyMTUpPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvdWxkIGJlIHdyaXR0ZW4gYXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmluc24gcngsMHg1ODAwMDAwMCwlcjEsMjQoJXIxNSk8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZXNob3J0XzAwN2QtZGlyZWN0aXZlXzAwMmMtczM5MC0xNzEyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyZWxvbmdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1zMzkwLTE3MTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlcXVhZF8wMDdkLWRpcmVjdGl2ZV8wMDJjLXMzOTAtMTcxNCI+PC9hPjxicj48ZHQ+PGNvZGU+LnNob3J0PC9jb2RlPjxkdD48Y29kZT4ubG9uZzwvY29kZT48ZHQ+PGNvZGU+LnF1YWQ8L2NvZGU+PGRkPlRoaXMgZGlyZWN0aXZlIHBsYWNlcyBvbmUgb3IgbW9yZSAxNi1iaXQgKC5zaG9ydCksIDMyLWJpdCAoLmxvbmcpLCBvcgorNjQtYml0ICgucXVhZCkgdmFsdWVzIGludG8gdGhlIGN1cnJlbnQgc2VjdGlvbi4gSWYgYW4gRUxGIG9yIFRMUyBtb2RpZmllcgoraXMgdXNlZCBvbmx5IHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQ6CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN5bWJvbEBtb2RpZmllciArIGNvbnN0YW50PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zeW1ib2xAbW9kaWZpZXIgKyBsYWJlbCArIGNvbnN0YW50PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3ltYm9sQG1vZGlmaWVyIC0gbGFiZWwgKyBjb25zdGFudDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBhcmUgYXZhaWxhYmxlOgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5AZ290PC9jb2RlPjxkdD48Y29kZT5AZ290MTI8L2NvZGU+PGRkPlRoZSBAZ290IG1vZGlmaWVyIGNhbiBiZSB1c2VkIGZvciAuc2hvcnQsIC5sb25nIGFuZCAucXVhZC4gVGhlIEBnb3QxMgorbW9kaWZpZXIgaXMgc3lub255bSB0byBAZ290LiBUaGUgc3ltYm9sIGlzIGFkZGVkIHRvIHRoZSBHT1QuIFRoZSBzeW1ib2wKK3Rlcm0gaXMgcmVwbGFjZWQgd2l0aCBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIEdPVCB0byB0aGUgR09UIHNsb3QgZm9yCit0aGUgc3ltYm9sLiAKKzxicj48ZHQ+PGNvZGU+QGdvdG9mZjwvY29kZT48ZGQ+VGhlIEBnb3RvZmYgbW9kaWZpZXIgY2FuIGJlIHVzZWQgZm9yIC5zaG9ydCwgLmxvbmcgYW5kIC5xdWFkLiBUaGUgc3ltYm9sCit0ZXJtIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgR09UIHRvIHRoZSBhZGRyZXNzCitvZiB0aGUgc3ltYm9sLiAKKzxicj48ZHQ+PGNvZGU+QGdvdHBsdDwvY29kZT48ZGQ+VGhlIEBnb3RwbHQgbW9kaWZpZXIgY2FuIGJlIHVzZWQgZm9yIC5sb25nIGFuZCAucXVhZC4gQSBwcm9jZWR1cmUgbGlua2FnZQordGFibGUgZW50cnkgaXMgZ2VuZXJhdGVkIGZvciB0aGUgc3ltYm9sIGFuZCBhIGp1bXAgc2xvdCBmb3IgdGhlIHN5bWJvbAoraXMgYWRkZWQgdG8gdGhlIEdPVC4gVGhlIHN5bWJvbCB0ZXJtIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9mZnNldCBmcm9tIHRoZQorc3RhcnQgb2YgdGhlIEdPVCB0byB0aGUganVtcCBzbG90IGZvciB0aGUgc3ltYm9sLiAKKzxicj48ZHQ+PGNvZGU+QHBsdDwvY29kZT48ZGQ+VGhlIEBwbHQgbW9kaWZpZXIgY2FuIGJlIHVzZWQgZm9yIC5sb25nIGFuZCAucXVhZC4gQSBwcm9jZWR1cmUgbGlua2FnZQordGFibGUgZW50cnkgdXMgZ2VuZXJhdGVkIGZvciB0aGUgc3ltYm9sLiBUaGUgc3ltYm9sIHRlcm0gaXMgcmVwbGFjZWQgd2l0aAordGhlIGFkZHJlc3Mgb2YgdGhlIFBMVCBlbnRyeSBmb3IgdGhlIHN5bWJvbC4gCis8YnI+PGR0Pjxjb2RlPkBwbHRvZmY8L2NvZGU+PGRkPlRoZSBAcGx0b2ZmIG1vZGlmaWVyIGNhbiBiZSB1c2VkIGZvciAuc2hvcnQsIC5sb25nIGFuZCAucXVhZC4gVGhlIHN5bWJvbAordGVybSBpcyByZXBsYWNlZCB3aXRoIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIFBMVCB0byB0aGUgYWRkcmVzcworb2YgdGhlIHN5bWJvbC4gCis8YnI+PGR0Pjxjb2RlPkB0bHNnZDwvY29kZT48ZHQ+PGNvZGU+QHRsc2xkbTwvY29kZT48ZGQ+VGhlIEB0bHNnZCBhbmQgQHRsc2xkbSBtb2RpZmllciBjYW4gYmUgdXNlZCBmb3IgLmxvbmcgYW5kIC5xdWFkLiBBCit0bHNfaW5kZXggc3RydWN0dXJlIGZvciB0aGUgc3ltYm9sIGlzIGFkZGVkIHRvIHRoZSBHT1QuIFRoZSBzeW1ib2wgdGVybSBpcworcmVwbGFjZWQgd2l0aCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBHT1QgdG8gdGhlIHRsc19pbmRleCBzdHJ1Y3R1cmUuIAorPGJyPjxkdD48Y29kZT5AZ290bnRwb2ZmPC9jb2RlPjxkdD48Y29kZT5AaW5kbnRwb2ZmPC9jb2RlPjxkZD5UaGUgQGdvdG50cG9mZiBhbmQgQGluZG50cG9mZiBtb2RpZmllciBjYW4gYmUgdXNlZCBmb3IgLmxvbmcgYW5kIC5xdWFkLiAKK1RoZSBzeW1ib2wgaXMgYWRkZWQgdG8gdGhlIHN0YXRpYyBUTFMgYmxvY2sgYW5kIHRoZSBuZWdhdGVkIG9mZnNldCB0byB0aGUKK3N5bWJvbCBpbiB0aGUgc3RhdGljIFRMUyBibG9jayBpcyBhZGRlZCB0byB0aGUgR09ULiBGb3IgQGdvdG50cG9mZiB0aGUKK3N5bWJvbCB0ZXJtIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgR09UIHRvIHRoZQorR09UIHNsb3QsIGZvciBAaW5kbnRwb2ZmIHRoZSBzeW1ib2wgdGVybSBpcyByZXBsYWNlZCB3aXRoIHRoZSBhZGRyZXNzCitvZiB0aGUgR09UIHNsb3QuIAorPGJyPjxkdD48Y29kZT5AZHRwb2ZmPC9jb2RlPjxkZD5UaGUgQGR0cG9mZiBtb2RpZmllciBjYW4gYmUgdXNlZCBmb3IgLmxvbmcgYW5kIC5xdWFkLiBUaGUgc3ltYm9sIHRlcm0KK2lzIHJlcGxhY2VkIHdpdGggdGhlIG9mZnNldCBvZiB0aGUgc3ltYm9sIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUKK1RMUyBibG9jayBpdCBpcyBjb250YWluZWQgaW4uIAorPGJyPjxkdD48Y29kZT5AbnRwb2ZmPC9jb2RlPjxkZD5UaGUgQG50cG9mZiBtb2RpZmllciBjYW4gYmUgdXNlZCBmb3IgLmxvbmcgYW5kIC5xdWFkLiBUaGUgc3ltYm9sIHRlcm0KK2lzIHJlcGxhY2VkIHdpdGggdGhlIG9mZnNldCBvZiB0aGUgc3ltYm9sIHJlbGF0aXZlIHRvIHRoZSBUQ0IgcG9pbnRlci4gCis8L2RsPgorCisgICAgIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSBtb2RpZmllcnMgc2VlIHRoZQorRUxGIGV4dGVuc2lvbiBkb2N1bWVudGF0aW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RUxGIEhhbmRsaW5nIEZvciBUaHJlYWQtTG9jYWwgU3RvcmFnZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbHRvcmdfMDA3ZC1kaXJlY3RpdmVfMDAyYy1zMzkwLTE3MTUiPjwvYT48YnI+PGR0Pjxjb2RlPi5sdG9yZzwvY29kZT48ZGQ+VGhpcyBkaXJlY3RpdmUgY2F1c2VzIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBsaXRlcmFsIHBvb2wgdG8gYmUKK2R1bXBlZCB0byB0aGUgY3VycmVudCBsb2NhdGlvbiAoPGEgaHJlZj0iczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcy5odG1sI3MzOTAtTGl0ZXJhbC1Qb29sLUVudHJpZXMiPnMzOTAgTGl0ZXJhbCBQb29sIEVudHJpZXM8L2E+KS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDJlbWFjaGluZV8wMDdkLWRpcmVjdGl2ZV8wMDJjLXMzOTAtMTcxNiI+PC9hPjxicj48ZHQ+PGNvZGU+Lm1hY2hpbmUgc3RyaW5nPC9jb2RlPjxkZD5UaGlzIGRpcmVjdGl2ZSBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgbWFjaGluZSBmb3Igd2hpY2ggY29kZSBpcworZ2VuZXJhdGVkLiAgPGNvZGU+c3RyaW5nPC9jb2RlPiBtYXkgYmUgYW55IG9mIHRoZSA8Y29kZT4tbWFyY2g9PC9jb2RlPiBzZWxlY3Rpb24KK29wdGlvbnMgKHdpdGhvdXQgdGhlIC1tYXJjaD0pLCA8Y29kZT5wdXNoPC9jb2RlPiwgb3IgPGNvZGU+cG9wPC9jb2RlPi4gCis8Y29kZT4ubWFjaGluZSBwdXNoPC9jb2RlPiBzYXZlcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNwdSwgd2hpY2ggbWF5IGJlCityZXN0b3JlZCB3aXRoIDxjb2RlPi5tYWNoaW5lIHBvcDwvY29kZT4uICBCZSBhd2FyZSB0aGF0IHRoZSBjcHUgc3RyaW5nIGhhcwordG8gYmUgcHV0IGludG8gZG91YmxlIHF1b3RlcyBpbiBjYXNlIGl0IGNvbnRhaW5zIGNoYXJhY3RlcnMgbm90CithcHByb3ByaWF0ZSBmb3IgaWRlbnRpZmllcnMuICBTbyB5b3UgaGF2ZSB0byB3cml0ZSA8Y29kZT4iejktMTA5IjwvY29kZT4KK2luc3RlYWQgb2YganVzdCA8Y29kZT56OS0xMDk8L2NvZGU+LiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3MzOTAtRmxvYXRpbmctUG9pbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3MzOTAtRmxvYXRpbmctUG9pbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzRlNjJhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1GbG9hdGluZy1Qb2ludC5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnMzOTAgRmxvYXRpbmcgUG9pbnQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjU18wMDJmMzkwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTLzM5MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzMzkwLURpcmVjdGl2ZXMuaHRtbCNzMzkwLURpcmVjdGl2ZXMiIHRpdGxlPSJzMzkwIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzMzkwLUZsb2F0aW5nLVBvaW50Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iczM5MC1EaXJlY3RpdmVzLmh0bWwjczM5MC1EaXJlY3RpdmVzIj5zMzkwIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5TLzM5MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM1LjUgRmxvYXRpbmcgUG9pbnQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLXMzOTAtMTcxNyI+PC9hPjxhIG5hbWU9ImluZGV4LXMzOTAtZmxvYXRpbmctcG9pbnQtMTcxOCI+PC9hPgorVGhlIGFzc2VtYmxlciByZWNvZ25pemVzIGJvdGggdGhlIDxzcGFuIGNsYXNzPSJzYyI+aWVlZTwvc3Bhbj4gZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb24gYW5kCit0aGUgaGV4YWRlY2ltYWwgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiBUaGUgZmxvYXRpbmctcG9pbnQgY29uc3RydWN0b3JzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5mbG9hdDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2luZ2xlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZG91YmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFsd2F5cyBlbWl0IHRoZQorPHNwYW4gY2xhc3M9InNjIj5pZWVlPC9zcGFuPiBmb3JtYXQuIFRvIGFzc2VtYmxlIGhleGFkZWNpbWFsIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cyB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmxvbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnF1YWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlcyBtdXN0IGJlIHVzZWQuCisKKzwhLS0gQ29weXJpZ2h0IDIwMDksIDIwMTEgLS0+Cis8IS0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQVMgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGFzLnRleGluZm8uIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1Gb3JtYXRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLUZvcm1hdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGE2Y2M2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1Gb3JtYXRzLmh0bWwKQEAgLTAsMCArMSwyMzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnMzOTAgRm9ybWF0cyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCIgdGl0bGU9InMzOTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iczM5MC1PcGVyYW5kcy5odG1sI3MzOTAtT3BlcmFuZHMiIHRpdGxlPSJzMzkwIE9wZXJhbmRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iczM5MC1BbGlhc2VzLmh0bWwjczM5MC1BbGlhc2VzIiB0aXRsZT0iczM5MCBBbGlhc2VzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iczM5MC1Gb3JtYXRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InMzOTAtQWxpYXNlcy5odG1sI3MzOTAtQWxpYXNlcyI+czM5MCBBbGlhc2VzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iczM5MC1PcGVyYW5kcy5odG1sI3MzOTAtT3BlcmFuZHMiPnMzOTAgT3BlcmFuZHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJzMzkwLVN5bnRheC5odG1sI3MzOTAtU3ludGF4Ij5zMzkwIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMzUuMy40IEluc3RydWN0aW9uIEZvcm1hdHM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1mb3JtYXRzXzAwMmMtczM5MC0xNzAxIj48L2E+PGEgbmFtZT0iaW5kZXgtczM5MC1pbnN0cnVjdGlvbi1mb3JtYXRzLTE3MDIiPjwvYT4KK1RoZSBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBtYW51YWxzIGxpc3RzIDI2IGluc3RydWN0aW9uIGZvcm1hdHMgd2hlcmUKK3NvbWUgb2YgdGhlIGZvcm1hdHMgaGF2ZSBtdWx0aXBsZSB2YXJpYW50cy4gRm9yIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5pbnNuPC9zcGFuPjwvc2FtcD4mcnNxdW87Citwc2V1ZG8gZGlyZWN0aXZlIHRoZSBhc3NlbWJsZXIgcmVjb2duaXplcyBzb21lIG9mIHRoZSBmb3JtYXRzLiAKK1R5cGljYWxseSwgdGhlIG1vc3QgZ2VuZXJhbCB2YXJpYW50IG9mIHRoZSBpbnN0cnVjdGlvbiBmb3JtYXQgaXMgdXNlZAorYnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmluc248L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlLgorCisgICA8cD5UaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBhYmJyZXZpYXRpb25zIHVzZWQgaW4gdGhlIHRhYmxlIG9mCitpbnN0cnVjdGlvbiBmb3JtYXRzOgorCis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPk9wQ29kZSAvIE9wQ2QgPC90ZD48dGQgdmFsaWduPSJ0b3AiPlBhcnQgb2YgdGhlIG9wIGNvZGUuCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPkJ4IDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5CYXNlIHJlZ2lzdGVyIG51bWJlciBmb3Igb3BlcmFuZCB4LgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5EeCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+RGlzcGxhY2VtZW50IGZvciBvcGVyYW5kIHguCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPkRMeCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+RGlzcGxhY2VtZW50IGxvd2VyIDEyIGJpdHMgZm9yIG9wZXJhbmQgeC4KKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+REh4IDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5EaXNwbGFjZW1lbnQgaGlnaGVyIDgtYml0cyBmb3Igb3BlcmFuZCB4LgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5SeCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+UmVnaXN0ZXIgbnVtYmVyIGZvciBvcGVyYW5kIHguCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPlh4IDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5JbmRleCByZWdpc3RlciBudW1iZXIgZm9yIG9wZXJhbmQgeC4KKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+SXggPC90ZD48dGQgdmFsaWduPSJ0b3AiPlNpZ25lZCBpbW1lZGlhdGUgZm9yIG9wZXJhbmQgeC4KKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+VXggPC90ZD48dGQgdmFsaWduPSJ0b3AiPlVuc2lnbmVkIGltbWVkaWF0ZSBmb3Igb3BlcmFuZCB4LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L3ByZT4KKyAgIDxwPkFuIGluc3RydWN0aW9uIGlzIHR3bywgZm91ciwgb3Igc2l4IGJ5dGVzIGluIGxlbmd0aCBhbmQgbXVzdCBiZSBhbGlnbmVkCitvbiBhIDIgYnl0ZSBib3VuZGFyeS4gVGhlIGZpcnN0IHR3byBiaXRzIG9mIHRoZSBpbnN0cnVjdGlvbiBzcGVjaWZ5IHRoZQorbGVuZ3RoIG9mIHRoZSBpbnN0cnVjdGlvbiwgMDAgaW5kaWNhdGVzIGEgdHdvIGJ5dGUgaW5zdHJ1Y3Rpb24sIDAxIGFuZCAxMAoraW5kaWNhdGVzIGEgZm91ciBieXRlIGluc3RydWN0aW9uLCBhbmQgMTEgaW5kaWNhdGVzIGEgc2l4IGJ5dGUgaW5zdHJ1Y3Rpb24uCisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgdGhlIHMzOTAgaW5zdHJ1Y3Rpb24gZm9ybWF0cyB0aGF0IGFyZSBhdmFpbGFibGUKK3dpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmluc248L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHNldWRvIGRpcmVjdGl2ZToKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+RSBmb3JtYXQ8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLS0tLS0tKworICAgICB8ICAgIE9wQ29kZSAgIHwKKyAgICAgKy0tLS0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgICAgICAxNQorPC9wcmU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5SSSBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBSMSxJMjwvY29kZT48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPiAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgT3BDb2RlIHwgUjEgfE9wQ2R8ICAgICAgICBJMiAgICAgICAgfAorICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgMCAgICAgICAgOCAgICAxMiAgIDE2ICAgICAgICAgICAgICAgIDMxCis8L3ByZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlJJRSBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBSMSxSMyxJMjwvY29kZT48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPiAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgIHwgT3BDb2RlIHwgUjEgfCBSMyB8ICAgICAgICBJMiAgICAgICAgfC8vLy8vLy8vfCBPcENvZGUgfAorICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgMCAgICAgICAgOCAgICAxMiAgIDE2ICAgICAgICAgICAgICAgICAzMiAgICAgICA0MCAgICAgIDQ3Cis8L3ByZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlJJTCBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBSMSxJMjwvY29kZT48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPiAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgT3BDb2RlIHwgUjEgfE9wQ2R8ICAgICAgICAgICAgICAgICAgSTIgICAgICAgICAgICAgICAgfAorICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgMCAgICAgICAgOCAgICAxMiAgIDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3Cis8L3ByZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlJJTFUgZm9ybWF0OiAmbHQ7aW5zbiZndDsgUjEsVTI8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICB8IE9wQ29kZSB8IFIxIHxPcENkfCAgICAgICAgICAgICAgICAgIFUyICAgICAgICAgICAgICAgIHwKKyAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgIDggICAgMTIgICAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NworPC9wcmU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5SSVMgZm9ybWF0OiAmbHQ7aW5zbiZndDsgUjEsSTIsTTMsRDQoQjQpPC9jb2RlPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+ICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgfCBPcENvZGUgfCBSMSB8IE0zIHwgQjQgfCAgICAgRDQgICAgICB8ICAgSTIgICB8IE9wY29kZSB8CisgICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICAgICAwICAgICAgICA4ICAgIDEyICAgMTYgICAyMCAgICAgICAgICAgIDMyICAgICAgIDM2ICAgICAgNDcKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+UlIgZm9ybWF0OiAmbHQ7aW5zbiZndDsgUjEsUjI8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLSstLS0tKy0tLS0rCisgICAgIHwgT3BDb2RlIHwgUjEgfCBSMiB8CisgICAgICstLS0tLS0tLSstLS0tKy0tLS0rCisgICAgIDAgICAgICAgIDggICAgMTIgIDE1ICAKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+UlJFIGZvcm1hdDogJmx0O2luc24mZ3Q7IFIxLFIyPC9jb2RlPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0rLS0tLSsKKyAgICAgfCAgICAgIE9wQ29kZSAgICAgIHwvLy8vLy8vL3wgUjEgfCBSMiB8CisgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLSstLS0tKworICAgICAwICAgICAgICAgICAgICAgICAgMTYgICAgICAgMjQgICAyOCAgMzEKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+UlJGIGZvcm1hdDogJmx0O2luc24mZ3Q7IFIxLFIyLFIzLE00PC9jb2RlPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+ICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rCisgICAgIHwgICAgICBPcENvZGUgICAgICB8IFIzIHwgTTQgfCBSMSB8IFIyIHwKKyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tKworICAgICAwICAgICAgICAgICAgICAgICAgMTYgICAyMCAgIDI0ICAgMjggIDMxCis8L3ByZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlJSUyBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBSMSxSMixNMyxENChCNCk8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0rLS0tLSstLS0tLS0tLSsKKyAgICAgfCBPcENvZGUgfCBSMSB8IFIzIHwgQjQgfCAgICAgRDQgICAgICB8IE0zIHwvLy8vfCBPcENvZGUgfAorICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0rCisgICAgIDAgICAgICAgIDggICAgMTIgICAxNiAgIDIwICAgICAgICAgICAgMzIgICAzNiAgIDQwICAgICAgNDcKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+UlMgZm9ybWF0OiAmbHQ7aW5zbiZndDsgUjEsUjMsRDIoQjIpPC9jb2RlPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+ICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSsKKyAgICAgfCBPcENvZGUgfCBSMSB8IFIzIHwgQjIgfCAgICAgRDIgICAgICB8CisgICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKworICAgICAwICAgICAgICA4ICAgIDEyICAgMTYgICAyMCAgICAgICAgICAgMzEKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+UlNFIGZvcm1hdDogJmx0O2luc24mZ3Q7IFIxLFIzLEQyKEIyKTwvY29kZT48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPiAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgIHwgT3BDb2RlIHwgUjEgfCBSMyB8IEIyIHwgICAgIEQyICAgICAgfC8vLy8vLy8vfCBPcENvZGUgfAorICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgMCAgICAgICAgOCAgICAxMiAgIDE2ICAgMjAgICAgICAgICAgICAzMiAgICAgICA0MCAgICAgIDQ3Cis8L3ByZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlJTSSBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBSMSxSMyxJMjwvY29kZT48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPiAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIHwgT3BDb2RlIHwgUjEgfCBSMyB8ICAgICAgICAgICAgICAgICAgSTIgICAgICAgICAgICAgICAgfAorICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgMCAgICAgICAgOCAgICAxMiAgIDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3Cis8L3ByZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlJTWSBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBSMSxSMyxEMihCMik8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICAgICB8IE9wQ29kZSB8IFIxIHwgUjMgfCBCMiB8ICAgIERMMiAgICAgIHwgIERIMiAgIHwgT3BDb2RlIHwKKyAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgIDAgICAgICAgIDggICAgMTIgICAxNiAgIDIwICAgICAgICAgICAgMzIgICAgICAgNDAgICAgICA0NworPC9wcmU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5SWCBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBSMSxEMihYMixCMik8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKworICAgICB8IE9wQ29kZSB8IFIxIHwgWDIgfCBCMiB8ICAgICBEMiAgICAgIHwKKyAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgIDggICAgMTIgICAxNiAgIDIwICAgICAgICAgICAzMQorPC9wcmU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5SWEUgZm9ybWF0OiAmbHQ7aW5zbiZndDsgUjEsRDIoWDIsQjIpPC9jb2RlPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+ICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgfCBPcENvZGUgfCBSMSB8IFgyIHwgQjIgfCAgICAgRDIgICAgICB8Ly8vLy8vLy98IE9wQ29kZSB8CisgICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICAgICAwICAgICAgICA4ICAgIDEyICAgMTYgICAyMCAgICAgICAgICAgIDMyICAgICAgIDQwICAgICAgNDcKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+UlhGIGZvcm1hdDogJmx0O2luc24mZ3Q7IFIxLFIzLEQyKFgyLEIyKTwvY29kZT48ZGQ+PHByZSBjbGFzcz0idmVyYmF0aW0iPiAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0rLS0tLS0tLS0rCisgICAgIHwgT3BDb2RlIHwgUjMgfCBYMiB8IEIyIHwgICAgIEQyICAgICAgfCBSMSB8Ly8vfCBPcENvZGUgfAorICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tKy0tLSstLS0tLS0tLSsKKyAgICAgMCAgICAgICAgOCAgICAxMiAgIDE2ICAgMjAgICAgICAgICAgICAzMiAgIDM2ICA0MCAgICAgIDQ3Cis8L3ByZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlJYWSBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBSMSxEMihYMixCMik8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICAgICB8IE9wQ29kZSB8IFIxIHwgWDIgfCBCMiB8ICAgICBETDIgICAgIHwgICBESDIgIHwgT3BDb2RlIHwKKyAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgICAgIDAgICAgICAgIDggICAgMTIgICAxNiAgIDIwICAgICAgICAgICAgMzIgICAzNiAgIDQwICAgICAgNDcKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+UyBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBEMihCMik8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKworICAgICB8ICAgICAgT3BDb2RlICAgICAgfCBCMiB8ICAgICBEMiAgICAgIHwKKyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgICAgICAgICAgICAxNiAgIDIwICAgICAgICAgICAzMQorPC9wcmU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5TSSBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBEMShCMSksSTI8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLSstLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKworICAgICB8IE9wQ29kZSB8ICAgSTIgICAgfCBCMSB8ICAgICBEMSAgICAgIHwKKyAgICAgKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgIDggICAgICAgICAxNiAgIDIwICAgICAgICAgICAzMQorPC9wcmU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5TSVkgZm9ybWF0OiAmbHQ7aW5zbiZndDsgRDEoQjEpLFUyPC9jb2RlPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+ICAgICArLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSsKKyAgICAgfCBPcENvZGUgfCAgIEkyICAgIHwgQjEgfCAgICAgREwxICAgICB8ICBESDEgICB8IE9wQ29kZSB8CisgICAgICstLS0tLS0tLSstLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICAgICAwICAgICAgICA4ICAgICAgICAgMTYgICAyMCAgICAgICAgICAgIDMyICAgMzYgICA0MCAgICAgIDQ3Cis8L3ByZT4KKworICAgICA8YnI+PGR0Pjxjb2RlPlNJTCBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBEMShCMSksSTI8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworICAgICB8ICAgICAgT3BDb2RlICAgICAgfCBCMSB8ICAgICAgRDEgICAgIHwgICAgICAgSTIgICAgICAgIHwKKyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgICAgICAgICAgICAxNiAgIDIwICAgICAgICAgICAgMzIgICAgICAgICAgICAgICA0NworPC9wcmU+CisKKyAgICAgPGJyPjxkdD48Y29kZT5TUyBmb3JtYXQ6ICZsdDtpbnNuJmd0OyBEMShSMSxCMSksRDIoQjMpLFIzPC9jb2RlPjxkZD48cHJlIGNsYXNzPSJ2ZXJiYXRpbSI+ICAgICArLS0tLS0tLS0rLS0tLSstLS0tKy0tLS0rLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLSsKKyAgICAgfCBPcENvZGUgfCBSMSB8IFIzIHwgQjEgfCAgICAgRDEgICAgICB8IEIyIHwgICAgIEQyICAgICB8CisgICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tKworICAgICAwICAgICAgICA4ICAgIDEyICAgMTYgICAyMCAgICAgICAgICAgIDMyICAgMzYgICAgICAgICAgNDcKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+U1NFIGZvcm1hdDogJmx0O2luc24mZ3Q7IEQxKEIxKSxEMihCMik8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tKworICAgICB8ICAgICAgT3BDb2RlICAgICAgfCBCMSB8ICAgICBEMSAgICAgIHwgQjIgfCAgICAgRDIgICAgIHwKKyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgIDggICAgMTIgICAxNiAgIDIwICAgICAgICAgICAgMzIgICAzNiAgICAgICAgICAgNDcKKzwvcHJlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+U1NGIGZvcm1hdDogJmx0O2luc24mZ3Q7IEQxKEIxKSxEMihCMiksUjM8L2NvZGU+PGRkPjxwcmUgY2xhc3M9InZlcmJhdGltIj4gICAgICstLS0tLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tKworICAgICB8IE9wQ29kZSB8IFIzIHxPcENkfCBCMSB8ICAgICBEMSAgICAgIHwgQjIgfCAgICAgRDIgICAgIHwKKyAgICAgKy0tLS0tLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rCisgICAgIDAgICAgICAgIDggICAgMTIgICAxNiAgIDIwICAgICAgICAgICAgMzIgICAzNiAgICAgICAgICAgNDcKKzwvcHJlPgorCisgICA8L2RsPgorCisgICA8cD5Gb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgYWxsIGluc3RydWN0aW9uIGZvcm1hdCB2YXJpYW50cyBzZWUgdGhlCitQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBtYW51YWxzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLUluc3RydWN0aW9uLU1hcmtlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzBjN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIuaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zMzkwIEluc3RydWN0aW9uIE1hcmtlciAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCIgdGl0bGU9InMzOTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iczM5MC1PcGVyYW5kLU1vZGlmaWVyLmh0bWwjczM5MC1PcGVyYW5kLU1vZGlmaWVyIiB0aXRsZT0iczM5MCBPcGVyYW5kIE1vZGlmaWVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcy5odG1sI3MzOTAtTGl0ZXJhbC1Qb29sLUVudHJpZXMiIHRpdGxlPSJzMzkwIExpdGVyYWwgUG9vbCBFbnRyaWVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcy5odG1sI3MzOTAtTGl0ZXJhbC1Qb29sLUVudHJpZXMiPnMzOTAgTGl0ZXJhbCBQb29sIEVudHJpZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzMzkwLU9wZXJhbmQtTW9kaWZpZXIuaHRtbCNzMzkwLU9wZXJhbmQtTW9kaWZpZXIiPnMzOTAgT3BlcmFuZCBNb2RpZmllcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiPnMzOTAgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zNS4zLjcgSW5zdHJ1Y3Rpb24gTWFya2VyPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW5zdHJ1Y3Rpb24tbWFya2VyXzAwMmMtczM5MC0xNzA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtczM5MC1pbnN0cnVjdGlvbi1tYXJrZXItMTcwOCI+PC9hPgorVGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIGluc3RydWN0aW9uIG1hcmtlcnMgYXJlIHVzZWQgYnkgdGhlIGxpbmtlciB0bworcGVyZm9ybSBjb2RlIG9wdGltaXphdGlvbi4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+OnRsc19sb2FkPC9jb2RlPjxkZD5UaGUgOnRsc19sb2FkIG1hcmtlciBpcyB1c2VkIHRvIGZsYWcgdGhlIGxvYWQgaW5zdHJ1Y3Rpb24gaW4gdGhlIGluaXRpYWwKK2V4ZWMgVExTIG1vZGVsIHRoYXQgcmV0cmlldmVzIHRoZSBvZmZzZXQgZnJvbSB0aGUgdGhyZWFkIHBvaW50ZXIgdG8gYQordGhyZWFkIGxvY2FsIHN0b3JhZ2UgdmFyaWFibGUgZnJvbSB0aGUgR09ULiAKKzxicj48ZHQ+PGNvZGU+OnRsc19nZGNhbGw8L2NvZGU+PGRkPlRoZSA6dGxzX2dkY2FsbCBtYXJrZXIgaXMgdXNlZCB0byBmbGFnIHRoZSBicmFuY2gtYW5kLXNhdmUgaW5zdHJ1Y3Rpb24gdG8KK3RoZSBfX3Rsc19nZXRfb2Zmc2V0IGZ1bmN0aW9uIGluIHRoZSBnbG9iYWwgZHluYW1pYyBUTFMgbW9kZWwuIAorPGJyPjxkdD48Y29kZT46dGxzX2xkY2FsbDwvY29kZT48ZGQ+VGhlIDp0bHNfbGRjYWxsIG1hcmtlciBpcyB1c2VkIHRvIGZsYWcgdGhlIGJyYW5jaC1hbmQtc2F2ZSBpbnN0cnVjdGlvbiB0bwordGhlIF9fdGxzX2dldF9vZmZzZXQgZnVuY3Rpb24gaW4gdGhlIGxvY2FsIGR5bmFtaWMgVExTIG1vZGVsLiAKKzwvZGw+CisKKyAgIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSBpbnN0cnVjdGlvbiBtYXJrZXIKK2FuZCB0aGUgbGlua2VyIG9wdGltaXphdGlvbnMgc2VlIHRoZSBFTEYgZXh0ZW5zaW9uIGRvY3VtZW50YXRpb24KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RUxGIEhhbmRsaW5nIEZvciBUaHJlYWQtTG9jYWwgU3RvcmFnZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDNlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLUxpdGVyYWwtUG9vbC1FbnRyaWVzLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+czM5MCBMaXRlcmFsIFBvb2wgRW50cmllcyAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCIgdGl0bGU9InMzOTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIuaHRtbCNzMzkwLUluc3RydWN0aW9uLU1hcmtlciIgdGl0bGU9InMzOTAgSW5zdHJ1Y3Rpb24gTWFya2VyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iczM5MC1MaXRlcmFsLVBvb2wtRW50cmllcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InMzOTAtSW5zdHJ1Y3Rpb24tTWFya2VyLmh0bWwjczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIiPnMzOTAgSW5zdHJ1Y3Rpb24gTWFya2VyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCI+czM5MCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj45LjM1LjMuOCBMaXRlcmFsIFBvb2wgRW50cmllczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxpdGVyYWwtcG9vbC1lbnRyaWVzXzAwMmMtczM5MC0xNzA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtczM5MC1saXRlcmFsLXBvb2wtZW50cmllcy0xNzEwIj48L2E+CitBIGxpdGVyYWwgcG9vbCBpcyBhIGNvbGxlY3Rpb24gb2YgdmFsdWVzLiBUbyBhY2Nlc3MgdGhlIHZhbHVlcyBhIHBvaW50ZXIKK3RvIHRoZSBsaXRlcmFsIHBvb2wgaXMgbG9hZGVkIHRvIGEgcmVnaXN0ZXIsIHRoZSBsaXRlcmFsIHBvb2wgcmVnaXN0ZXIuIAorVXN1YWxseSwgcmVnaXN0ZXIgJXIxMyBpcyB1c2VkIGFzIHRoZSBsaXRlcmFsIHBvb2wgcmVnaXN0ZXIKKyg8YSBocmVmPSJzMzkwLVJlZ2lzdGVyLmh0bWwjczM5MC1SZWdpc3RlciI+czM5MCBSZWdpc3RlcjwvYT4pLiBMaXRlcmFsIHBvb2wgZW50cmllcyBhcmUgY3JlYXRlZCBieSBhZGRpbmcgdGhlCitzdWZmaXggOmxpdDEsIDpsaXQyLCA6bGl0NCwgb3IgOmxpdDggdG8gdGhlIGVuZCBvZiBhbiBleHByZXNzaW9uIGZvciBhbgoraW5zdHJ1Y3Rpb24gb3BlcmFuZC4gVGhlIGV4cHJlc3Npb24gaXMgYWRkZWQgdG8gdGhlIGxpdGVyYWwgcG9vbCBhbmQgdGhlCitvcGVyYW5kIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9mZnNldCB0byB0aGUgbGl0ZXJhbCBpbiB0aGUgbGl0ZXJhbCBwb29sLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT46bGl0MTwvY29kZT48ZGQ+VGhlIGxpdGVyYWwgcG9vbCBlbnRyeSBpcyBjcmVhdGVkIGFzIGFuIDgtYml0IHZhbHVlLiBBbiBvcGVyYW5kIG1vZGlmaWVyCittdXN0IG5vdCBiZSB1c2VkIGZvciB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4gCis8YnI+PGR0Pjxjb2RlPjpsaXQyPC9jb2RlPjxkZD5UaGUgbGl0ZXJhbCBwb29sIGVudHJ5IGlzIGNyZWF0ZWQgYXMgYSAxNiBiaXQgdmFsdWUuIFRoZSBvcGVyYW5kIG1vZGlmaWVyCitAZ290IG1heSBiZSB1c2VkIGluIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uLiBUaGUgdGVybSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnhAZ290OmxpdDI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3dpbGwgcHV0IHRoZSBnb3Qgb2Zmc2V0IGZvciB0aGUgZ2xvYmFsIHN5bWJvbCB4IHRvIHRoZSBsaXRlcmFsIHBvb2wgYXMKKzE2IGJpdCB2YWx1ZS4gCis8YnI+PGR0Pjxjb2RlPjpsaXQ0PC9jb2RlPjxkZD5UaGUgbGl0ZXJhbCBwb29sIGVudHJ5IGlzIGNyZWF0ZWQgYXMgYSAzMi1iaXQgdmFsdWUuIFRoZSBvcGVyYW5kIG1vZGlmaWVyCitAZ290IGFuZCBAcGx0IG1heSBiZSB1c2VkIGluIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uLiBUaGUgdGVybQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54QGdvdDpsaXQ0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgcHV0IHRoZSBnb3Qgb2Zmc2V0IGZvciB0aGUgZ2xvYmFsIHN5bWJvbCB4IHRvIHRoZQorbGl0ZXJhbCBwb29sIGFzIGEgMzItYml0IHZhbHVlLiBUaGUgdGVybSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnhAcGx0OmxpdDQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2lsbCBwdXQgdGhlCitwbHQgb2Zmc2V0IGZvciB0aGUgZ2xvYmFsIHN5bWJvbCB4IHRvIHRoZSBsaXRlcmFsIHBvb2wgYXMgYSAzMi1iaXQgdmFsdWUuIAorPGJyPjxkdD48Y29kZT46bGl0ODwvY29kZT48ZGQ+VGhlIGxpdGVyYWwgcG9vbCBlbnRyeSBpcyBjcmVhdGVkIGFzIGEgNjQtYml0IHZhbHVlLiBUaGUgb3BlcmFuZCBtb2RpZmllcgorQGdvdCBhbmQgQHBsdCBtYXkgYmUgdXNlZCBpbiB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbi4gVGhlIHRlcm0KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+eEBnb3Q6bGl0ODwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsIHB1dCB0aGUgZ290IG9mZnNldCBmb3IgdGhlIGdsb2JhbCBzeW1ib2wgeCB0byB0aGUKK2xpdGVyYWwgcG9vbCBhcyBhIDY0LWJpdCB2YWx1ZS4gVGhlIHRlcm0gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54QHBsdDpsaXQ4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgcHV0IHRoZQorcGx0IG9mZnNldCBmb3IgdGhlIGdsb2JhbCBzeW1ib2wgeCB0byB0aGUgbGl0ZXJhbCBwb29sIGFzIGEgNjQtYml0IHZhbHVlLiAKKzwvZGw+CisKKyAgIDxwPlRoZSBhc3NlbWJsZXIgZGlyZWN0aXZlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmx0b3JnPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHVzZWQgdG8gZW1pdCBhbGwgbGl0ZXJhbCBwb29sCitlbnRyaWVzIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLU1uZW1vbmljcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1NbmVtb25pY3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQ1YWFiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1NbmVtb25pY3MuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+czM5MCBNbmVtb25pY3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiIHRpdGxlPSJzMzkwIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InMzOTAtUmVnaXN0ZXIuaHRtbCNzMzkwLVJlZ2lzdGVyIiB0aXRsZT0iczM5MCBSZWdpc3RlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InMzOTAtT3BlcmFuZHMuaHRtbCNzMzkwLU9wZXJhbmRzIiB0aXRsZT0iczM5MCBPcGVyYW5kcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InMzOTAtTW5lbW9uaWNzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InMzOTAtT3BlcmFuZHMuaHRtbCNzMzkwLU9wZXJhbmRzIj5zMzkwIE9wZXJhbmRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iczM5MC1SZWdpc3Rlci5odG1sI3MzOTAtUmVnaXN0ZXIiPnMzOTAgUmVnaXN0ZXI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJzMzkwLVN5bnRheC5odG1sI3MzOTAtU3ludGF4Ij5zMzkwIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjkuMzUuMy4yIEluc3RydWN0aW9uIE1uZW1vbmljczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWluc3RydWN0aW9uLW1uZW1vbmljc18wMDJjLXMzOTAtMTY5NyI+PC9hPjxhIG5hbWU9ImluZGV4LXMzOTAtaW5zdHJ1Y3Rpb24tbW5lbW9uaWNzLTE2OTgiPjwvYT4KK0FsbCBpbnN0cnVjdGlvbnMgZG9jdW1lbnRlZCBpbiB0aGUgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24gYXJlIHN1cHBvcnRlZAord2l0aCB0aGUgbW5lbW9uaWMgYW5kIG9yZGVyIG9mIG9wZXJhbmRzIGFzIGRlc2NyaWJlZC4gCitUaGUgaW5zdHJ1Y3Rpb24gbW5lbW9uaWMgaWRlbnRpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gZm9ybWF0CisoPGEgaHJlZj0iczM5MC1Gb3JtYXRzLmh0bWwjczM5MC1Gb3JtYXRzIj5zMzkwIEZvcm1hdHM8L2E+KSBhbmQgdGhlIHNwZWNpZmljIG9wZXJhdGlvbiBjb2RlIGZvciB0aGUgaW5zdHJ1Y3Rpb24uIAorRm9yIGV4YW1wbGUsIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1uZW1vbmljIGRlbm90ZXMgdGhlIGluc3RydWN0aW9uIGZvcm1hdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJSPC9zcGFuPjwvc2FtcD4mcnNxdW87Cit3aXRoIHRoZSBvcGVyYXRpb24gY29kZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4MTg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPlRoZSBkZWZpbml0aW9uIG9mIHRoZSB2YXJpb3VzIG1uZW1vbmljcyBmb2xsb3dzIGEgc2NoZW1lLCB3aGVyZSB0aGUgZmlyc3QKK2NoYXJhY3RlciB1c3VhbGx5IGhpbnQgYXQgdGhlIHR5cGUgb2YgdGhlIGluc3RydWN0aW9uOgorCis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmEgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmFkZCBpbnN0cnVjdGlvbiwgZm9yIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgYWRkIGxvZ2ljYWwgMzItYml0CisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmIgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmJyYW5jaCBpbnN0cnVjdGlvbiwgZm9yIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgYnJhbmNoIG9uIGNvbmRpdGlvbgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5jIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5jb21wYXJlIG9yIGNvbnZlcnQgaW5zdHJ1Y3Rpb24sIGZvciBleGFtcGxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGNvbXBhcmUKKyAgICAgcmVnaXN0ZXIgMzItYml0CisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmQgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmRpdmlkZSBpbnN0cnVjdGlvbiwgZm9yIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kbHI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGV2aWRlIGxvZ2ljYWwgcmVnaXN0ZXIKKyAgICAgNjQtYml0IHRvIDMyLWJpdAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5pIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5pbnNlcnQgaW5zdHJ1Y3Rpb24sIGZvciBleGFtcGxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aWM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zZXJ0IGNoYXJhY3RlcgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5sIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5sb2FkIGluc3RydWN0aW9uLCBmb3IgZXhhbXBsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmx0cjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBsb2FkIGFuZCB0ZXN0IHJlZ2lzdGVyCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPm12IDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5tb3ZlIGluc3RydWN0aW9uLCBmb3IgZXhhbXBsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm12Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtb3ZlIGNoYXJhY3RlcgorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5tIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5tdWx0aXBseSBpbnN0cnVjdGlvbiwgZm9yIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtdWx0aXBseSBoYWxmd29yZAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5uIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5hbmQgaW5zdHJ1Y3Rpb24sIGZvciBleGFtcGxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kIGltbWVkaWF0ZQorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5vIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5vciBpbnN0cnVjdGlvbiwgZm9yIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciBjaGFyYWN0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+c2xhLCBzbGwgPC90ZD48dGQgdmFsaWduPSJ0b3AiPnNoaWZ0IGxlZnQgc2luZ2xlIGluc3RydWN0aW9uCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPnNyYSwgc3JsIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5zaGlmdCByaWdodCBzaW5nbGUgaW5zdHJ1Y3Rpb24KKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+c3QgPC90ZD48dGQgdmFsaWduPSJ0b3AiPnN0b3JlIGluc3RydWN0aW9uLCBmb3IgZXhhbXBsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0bTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdG9yZSBtdWx0aXBsZQorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5zIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj5zdWJ0cmFjdCBpbnN0cnVjdGlvbiwgZm9yIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zbHI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3VidHJhY3QKKyAgICAgbG9naWNhbCAzMi1iaXQKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+dCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+dGVzdCBvciB0cmFuc2xhdGUgaW5zdHJ1Y3Rpb24sIG9mIGV4YW1wbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50bTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0ZXN0IHVuZGVyIG1hc2sKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+eCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+ZXhjbHVzaXZlIG9yIGluc3RydWN0aW9uLCBmb3IgZXhhbXBsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnhjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGV4Y2x1c2l2ZSBvcgorICAgICBjaGFyYWN0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9wcmU+CisgICA8cD5DZXJ0YWluIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiB0aGUgbW5lbW9uaWMgbWF5IGRlc2NyaWJlIGEgcHJvcGVydHkKK29mIHRoZSBpbnN0cnVjdGlvbjoKKworPHByZSBjbGFzcz0iZGlzcGxheSI+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5jIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj50aGUgaW5zdHJ1Y3Rpb24gdXNlcyBhIDgtYml0IGNoYXJhY3RlciBvcGVyYW5kCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmYgPC90ZD48dGQgdmFsaWduPSJ0b3AiPnRoZSBpbnN0cnVjdGlvbiBleHRlbmRzIGEgMzItYml0IG9wZXJhbmQgdG8gNjQgYml0CisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmcgPC90ZD48dGQgdmFsaWduPSJ0b3AiPnRoZSBvcGVyYW5kcyBhcmUgdHJlYXRlZCBhcyA2NC1iaXQgdmFsdWVzCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPmggPC90ZD48dGQgdmFsaWduPSJ0b3AiPnRoZSBvcGVyYW5kIHVzZXMgYSAxNi1iaXQgaGFsZndvcmQgb3BlcmFuZAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5pIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj50aGUgaW5zdHJ1Y3Rpb24gdXNlcyBhbiBpbW1lZGlhdGUgb3BlcmFuZAorICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5sIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj50aGUgaW5zdHJ1Y3Rpb24gdXNlcyB1bnNpZ25lZCwgbG9naWNhbCBvcGVyYW5kcworICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5tIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj50aGUgaW5zdHJ1Y3Rpb24gdXNlcyBhIG1hc2sgb3Igb3BlcmF0ZXMgb24gbXVsdGlwbGUgdmFsdWVzCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPnIgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmlmIHIgaXMgdGhlIGxhc3QgY2hhcmFjdGVyLCB0aGUgaW5zdHJ1Y3Rpb24gb3BlcmF0ZXMgb24gcmVnaXN0ZXJzCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPnkgPC90ZD48dGQgdmFsaWduPSJ0b3AiPnRoZSBpbnN0cnVjdGlvbiB1c2VzIDIwLWJpdCBkaXNwbGFjZW1lbnRzCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKzwvcHJlPgorICAgPHA+VGhlcmUgYXJlIG1hbnkgZXhjZXB0aW9ucyB0byB0aGUgc2NoZW1lIG91dGxpbmVkIGluIHRoZSBhYm92ZSBsaXN0cywgaW4KK3BhcnRpY3VsYXIgZm9yIHRoZSBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbnMuIEZvciBub24tcHJpdmlsZWRnZWQKK2luc3RydWN0aW9uIGl0IHdvcmtzIHF1aXRlIHdlbGwsIGZvciBleGFtcGxlIHRoZSBpbnN0cnVjdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNsZ2ZyPC9zcGFuPjwvc2FtcD4mcnNxdW87CitjOiBjb21wYXJlIGluc3RydWN0aW9uLCBsOiB1bnNpZ25lZCBvcGVyYW5kcywgZzogNjQtYml0IG9wZXJhbmRzLAorZjogMzItIHRvIDY0LWJpdCBleHRlbnNpb24sIHI6IHJlZ2lzdGVyIG9wZXJhbmRzLiBUaGUgaW5zdHJ1Y3Rpb24gY29tcGFyZXMKK2FuIDY0LWJpdCB2YWx1ZSBpbiBhIHJlZ2lzdGVyIHdpdGggdGhlIHplcm8gZXh0ZW5kZWQgMzItYml0IHZhbHVlIGZyb20KK2Egc2Vjb25kIHJlZ2lzdGVyLiAKK0ZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgYWxsIG1uZW1vbmljcyBzZWUgYXBwZW5kaXggQiBpbiB0aGUgUHJpbmNpcGxlcworb2YgT3BlcmF0aW9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLU9wZXJhbmQtTW9kaWZpZXIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3MzOTAtT3BlcmFuZC1Nb2RpZmllci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMWI1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLU9wZXJhbmQtTW9kaWZpZXIuaHRtbApAQCAtMCwwICsxLDExNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+czM5MCBPcGVyYW5kIE1vZGlmaWVyIC0gVXNpbmcgYXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIGFzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJzMzkwLVN5bnRheC5odG1sI3MzOTAtU3ludGF4IiB0aXRsZT0iczM5MCBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzMzkwLUFsaWFzZXMuaHRtbCNzMzkwLUFsaWFzZXMiIHRpdGxlPSJzMzkwIEFsaWFzZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzMzkwLUluc3RydWN0aW9uLU1hcmtlci5odG1sI3MzOTAtSW5zdHJ1Y3Rpb24tTWFya2VyIiB0aXRsZT0iczM5MCBJbnN0cnVjdGlvbiBNYXJrZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzMzkwLU9wZXJhbmQtTW9kaWZpZXIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIuaHRtbCNzMzkwLUluc3RydWN0aW9uLU1hcmtlciI+czM5MCBJbnN0cnVjdGlvbiBNYXJrZXI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzMzkwLUFsaWFzZXMuaHRtbCNzMzkwLUFsaWFzZXMiPnMzOTAgQWxpYXNlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiPnMzOTAgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zNS4zLjYgSW5zdHJ1Y3Rpb24gT3BlcmFuZCBNb2RpZmllcjwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWluc3RydWN0aW9uLW9wZXJhbmQtbW9kaWZpZXJfMDAyYy1zMzkwLTE3MDUiPjwvYT48YSBuYW1lPSJpbmRleC1zMzkwLWluc3RydWN0aW9uLW9wZXJhbmQtbW9kaWZpZXItMTcwNiI+PC9hPgorSWYgYSBzeW1ib2wgbW9kaWZpZXIgaXMgYXR0YWNoZWQgdG8gYSBzeW1ib2wgaW4gYW4gZXhwcmVzc2lvbiBmb3IgYW4KK2luc3RydWN0aW9uIG9wZXJhbmQgZmllbGQsIHRoZSBzeW1ib2wgdGVybSBpcyByZXBsYWNlZCB3aXRoIGEgcmVmZXJlbmNlCit0byBhbiBvYmplY3QgaW4gdGhlIGdsb2JhbCBvZmZzZXQgdGFibGUgKEdPVCkgb3IgdGhlIHByb2NlZHVyZSBsaW5rYWdlCit0YWJsZSAoUExUKS4gVGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBhcmUgYWxsb3dlZDoKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3ltYm9sQG1vZGlmaWVyICsgY29uc3RhbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN5bWJvbEBtb2RpZmllciArIGxhYmVsICsgY29uc3RhbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zeW1ib2xAbW9kaWZpZXIgLSBsYWJlbCArIGNvbnN0YW50PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1RoZSB0ZXJtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3ltYm9sPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRoZSBzeW1ib2wgdGhhdCB3aWxsIGJlIGVudGVyZWQgaW50byB0aGUgR09UIG9yCitQTFQsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGFiZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYSBsb2NhbCBsYWJlbCwgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29uc3RhbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYW4gYXJiaXRyYXJ5CitleHByZXNzaW9uIHRoYXQgdGhlIGFzc2VtYmxlciBjYW4gZXZhbHVhdGUgdG8gYSBjb25zdGFudCB2YWx1ZS4KKworICAgPHA+VGhlIHRlcm0gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4oc3ltYm9sICsgY29uc3RhbnQxKUBtb2RpZmllciArLy0gbGFiZWwgKyBjb25zdGFudDI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2lzIGFsc28gYWNjZXB0ZWQgYnV0IGEgd2FybmluZyBtZXNzYWdlIGlzIHByaW50ZWQgYW5kIHRoZSB0ZXJtIGlzCitjb252ZXJ0ZWQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zeW1ib2xAbW9kaWZpZXIgKy8tIGxhYmVsICsgY29uc3RhbnQxICsgY29uc3RhbnQyPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5AZ290PC9jb2RlPjxkdD48Y29kZT5AZ290MTI8L2NvZGU+PGRkPlRoZSBAZ290IG1vZGlmaWVyIGNhbiBiZSB1c2VkIGZvciBkaXNwbGFjZW1lbnQgZmllbGRzLCAxNi1iaXQgaW1tZWRpYXRlCitmaWVsZHMgYW5kIDMyLWJpdCBwYy1yZWxhdGl2ZSBpbW1lZGlhdGUgZmllbGRzLiBUaGUgQGdvdDEyIG1vZGlmaWVyIGlzCitzeW5vbnltIHRvIEBnb3QuIFRoZSBzeW1ib2wgaXMgYWRkZWQgdG8gdGhlIEdPVC4gRm9yIGRpc3BsYWNlbWVudAorZmllbGRzIGFuZCAxNi1iaXQgaW1tZWRpYXRlIGZpZWxkcyB0aGUgc3ltYm9sIHRlcm0gaXMgcmVwbGFjZWQgd2l0aAordGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgR09UIHRvIHRoZSBHT1Qgc2xvdCBmb3IgdGhlIHN5bWJvbC4gCitGb3IgYSAzMi1iaXQgcGMtcmVsYXRpdmUgZmllbGQgdGhlIHBjLXJlbGF0aXZlIG9mZnNldCB0byB0aGUgR09UCitzbG90IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gYWRkcmVzcyBpcyB1c2VkLiAKKzxicj48ZHQ+PGNvZGU+QGdvdGVudDwvY29kZT48ZGQ+VGhlIEBnb3RlbnQgbW9kaWZpZXIgY2FuIGJlIHVzZWQgZm9yIDMyLWJpdCBwYy1yZWxhdGl2ZSBpbW1lZGlhdGUgZmllbGRzLiAKK1RoZSBzeW1ib2wgaXMgYWRkZWQgdG8gdGhlIEdPVCBhbmQgdGhlIHN5bWJvbCB0ZXJtIGlzIHJlcGxhY2VkIHdpdGgKK3RoZSBwYy1yZWxhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiB0byB0aGUgR09UIHNsb3QgZm9yIHRoZQorc3ltYm9sLiAKKzxicj48ZHQ+PGNvZGU+QGdvdG9mZjwvY29kZT48ZGQ+VGhlIEBnb3RvZmYgbW9kaWZpZXIgY2FuIGJlIHVzZWQgZm9yIDE2LWJpdCBpbW1lZGlhdGUgZmllbGRzLiBUaGUgc3ltYm9sCit0ZXJtIGlzIHJlcGxhY2VkIHdpdGggdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgR09UIHRvIHRoZQorYWRkcmVzcyBvZiB0aGUgc3ltYm9sLiAKKzxicj48ZHQ+PGNvZGU+QGdvdHBsdDwvY29kZT48ZGQ+VGhlIEBnb3RwbHQgbW9kaWZpZXIgY2FuIGJlIHVzZWQgZm9yIGRpc3BsYWNlbWVudCBmaWVsZHMsIDE2LWJpdCBpbW1lZGlhdGUKK2ZpZWxkcywgYW5kIDMyLWJpdCBwYy1yZWxhdGl2ZSBpbW1lZGlhdGUgZmllbGRzLiBBIHByb2NlZHVyZSBsaW5rYWdlCit0YWJsZSBlbnRyeSBpcyBnZW5lcmF0ZWQgZm9yIHRoZSBzeW1ib2wgYW5kIGEganVtcCBzbG90IGZvciB0aGUgc3ltYm9sCitpcyBhZGRlZCB0byB0aGUgR09ULiBGb3IgZGlzcGxhY2VtZW50IGZpZWxkcyBhbmQgMTYtYml0IGltbWVkaWF0ZQorZmllbGRzIHRoZSBzeW1ib2wgdGVybSBpcyByZXBsYWNlZCB3aXRoIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCitHT1QgdG8gdGhlIGp1bXAgc2xvdCBmb3IgdGhlIHN5bWJvbC4gRm9yIGEgMzItYml0IHBjLXJlbGF0aXZlIGZpZWxkCit0aGUgcGMtcmVsYXRpdmUgb2Zmc2V0IHRvIHRoZSBqdW1wIHNsb3QgZnJvbSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbgorYWRkcmVzcyBpcyB1c2VkLiAKKzxicj48ZHQ+PGNvZGU+QHBsdDwvY29kZT48ZGQ+VGhlIEBwbHQgbW9kaWZpZXIgY2FuIGJlIHVzZWQgZm9yIDE2LWJpdCBhbmQgMzItYml0IHBjLXJlbGF0aXZlIGltbWVkaWF0ZQorZmllbGRzLiBBIHByb2NlZHVyZSBsaW5rYWdlIHRhYmxlIGVudHJ5IGlzIGdlbmVyYXRlZCBmb3IgdGhlIHN5bWJvbC4gCitUaGUgc3ltYm9sIHRlcm0gaXMgcmVwbGFjZWQgd2l0aCB0aGUgcmVsYXRpdmUgb2Zmc2V0IGZyb20gdGhlIGN1cnJlbnQKK2luc3RydWN0aW9uIHRvIHRoZSBQTFQgZW50cnkgZm9yIHRoZSBzeW1ib2wuIAorPGJyPjxkdD48Y29kZT5AcGx0b2ZmPC9jb2RlPjxkZD5UaGUgQHBsdG9mZiBtb2RpZmllciBjYW4gYmUgdXNlZCBmb3IgMTYtYml0IGltbWVkaWF0ZSBmaWVsZHMuIFRoZSBzeW1ib2wKK3Rlcm0gaXMgcmVwbGFjZWQgd2l0aCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBQTFQgdG8gdGhlIGFkZHJlc3MKK29mIHRoZSBzeW1ib2wuIAorPGJyPjxkdD48Y29kZT5AZ290bnRwb2ZmPC9jb2RlPjxkZD5UaGUgQGdvdG50cG9mZiBtb2RpZmllciBjYW4gYmUgdXNlZCBmb3IgZGlzcGxhY2VtZW50IGZpZWxkcy4gVGhlIHN5bWJvbAoraXMgYWRkZWQgdG8gdGhlIHN0YXRpYyBUTFMgYmxvY2sgYW5kIHRoZSBuZWdhdGVkIG9mZnNldCB0byB0aGUgc3ltYm9sCitpbiB0aGUgc3RhdGljIFRMUyBibG9jayBpcyBhZGRlZCB0byB0aGUgR09ULiBUaGUgc3ltYm9sIHRlcm0gaXMgcmVwbGFjZWQKK3dpdGggdGhlIG9mZnNldCB0byB0aGUgR09UIHNsb3QgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIEdPVC4gCis8YnI+PGR0Pjxjb2RlPkBpbmRudHBvZmY8L2NvZGU+PGRkPlRoZSBAaW5kbnRwb2ZmIG1vZGlmaWVyIGNhbiBiZSB1c2VkIGZvciAzMi1iaXQgcGMtcmVsYXRpdmUgaW1tZWRpYXRlCitmaWVsZHMuIFRoZSBzeW1ib2wgaXMgYWRkZWQgdG8gdGhlIHN0YXRpYyBUTFMgYmxvY2sgYW5kIHRoZSBuZWdhdGVkIG9mZnNldAordG8gdGhlIHN5bWJvbCBpbiB0aGUgc3RhdGljIFRMUyBibG9jayBpcyBhZGRlZCB0byB0aGUgR09ULiBUaGUgc3ltYm9sIHRlcm0KK2lzIHJlcGxhY2VkIHdpdGggdGhlIHBjLXJlbGF0aXZlIG9mZnNldCB0byB0aGUgR09UIHNsb3QgZnJvbSB0aGUgY3VycmVudAoraW5zdHJ1Y3Rpb24gYWRkcmVzcy4gCis8L2RsPgorCisgICA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgbW9kaWZpZXJzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdvdG50cG9mZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbmRudHBvZmY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VlIHRoZSBFTEYgZXh0ZW5zaW9uIGRvY3VtZW50YXRpb24KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RUxGIEhhbmRsaW5nIEZvciBUaHJlYWQtTG9jYWwgU3RvcmFnZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1PcGVyYW5kcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1PcGVyYW5kcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTZiODkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLU9wZXJhbmRzLmh0bWwKQEAgLTAsMCArMSwxMTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnMzOTAgT3BlcmFuZHMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiIHRpdGxlPSJzMzkwIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InMzOTAtTW5lbW9uaWNzLmh0bWwjczM5MC1NbmVtb25pY3MiIHRpdGxlPSJzMzkwIE1uZW1vbmljcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InMzOTAtRm9ybWF0cy5odG1sI3MzOTAtRm9ybWF0cyIgdGl0bGU9InMzOTAgRm9ybWF0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InMzOTAtT3BlcmFuZHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iczM5MC1Gb3JtYXRzLmh0bWwjczM5MC1Gb3JtYXRzIj5zMzkwIEZvcm1hdHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzMzkwLU1uZW1vbmljcy5odG1sI3MzOTAtTW5lbW9uaWNzIj5zMzkwIE1uZW1vbmljczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiPnMzOTAgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zNS4zLjMgSW5zdHJ1Y3Rpb24gT3BlcmFuZHM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1pbnN0cnVjdGlvbi1vcGVyYW5kc18wMDJjLXMzOTAtMTY5OSI+PC9hPjxhIG5hbWU9ImluZGV4LXMzOTAtaW5zdHJ1Y3Rpb24tb3BlcmFuZHMtMTcwMCI+PC9hPgorSW5zdHJ1Y3Rpb24gb3BlcmFuZHMgY2FuIGJlIGdyb3VwZWQgaW50byB0aHJlZSBjbGFzc2VzLCBvcGVyYW5kcyBsb2NhdGVkCitpbiByZWdpc3RlcnMsIGltbWVkaWF0ZSBvcGVyYW5kcywgYW5kIG9wZXJhbmRzIGluIHN0b3JhZ2UuCisKKyAgIDxwPkEgcmVnaXN0ZXIgb3BlcmFuZCBjYW4gYmUgbG9jYXRlZCBpbiBnZW5lcmFsLCBmbG9hdGluZy1wb2ludCwgYWNjZXNzLAorb3IgY29udHJvbCByZWdpc3Rlci4gVGhlIHJlZ2lzdGVyIGlzIGlkZW50aWZpZWQgYnkgYSBmb3VyLWJpdCBmaWVsZC4gCitUaGUgZmllbGQgY29udGFpbmluZyB0aGUgcmVnaXN0ZXIgb3BlcmFuZCBpcyBjYWxsZWQgdGhlIFIgZmllbGQuCisKKyAgIDxwPkltbWVkaWF0ZSBvcGVyYW5kcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgaW5zdHJ1Y3Rpb24gYW5kIGNhbiBoYXZlCis4LCAxNiBvciAzMiBiaXRzLiBUaGUgZmllbGQgY29udGFpbmluZyB0aGUgaW1tZWRpYXRlIG9wZXJhbmQgaXMgY2FsbGVkCit0aGUgSSBmaWVsZC4gRGVwZW5kZW50IG9uIHRoZSBpbnN0cnVjdGlvbiB0aGUgSSBmaWVsZCBpcyBlaXRoZXIgc2lnbmVkCitvciB1bnNpZ25lZC4KKworICAgPHA+QSBzdG9yYWdlIG9wZXJhbmQgY29uc2lzdHMgb2YgYW4gYWRkcmVzcyBhbmQgYSBsZW5ndGguIFRoZSBhZGRyZXNzIG9mIGEKK3N0b3JhZ2Ugb3BlcmFuZHMgY2FuIGJlIHNwZWNpZmllZCBpbiBhbnkgb2YgdGhlc2Ugd2F5czoKKworICAgICA8dWw+Cis8bGk+VGhlIGNvbnRlbnQgb2YgYSBzaW5nbGUgZ2VuZXJhbCBSCis8bGk+VGhlIHN1bSBvZiB0aGUgY29udGVudCBvZiBhIGdlbmVyYWwgcmVnaXN0ZXIgY2FsbGVkIHRoZSBiYXNlCityZWdpc3RlciBCIHBsdXMgdGhlIGNvbnRlbnQgb2YgYSBkaXNwbGFjZW1lbnQgZmllbGQgRAorPGxpPlRoZSBzdW0gb2YgdGhlIGNvbnRlbnRzIG9mIHR3byBnZW5lcmFsIHJlZ2lzdGVycyBjYWxsZWQgdGhlCitpbmRleCByZWdpc3RlciBYIGFuZCB0aGUgYmFzZSByZWdpc3RlciBCIHBsdXMgdGhlIGNvbnRlbnQgb2YgYQorZGlzcGxhY2VtZW50IGZpZWxkCis8bGk+VGhlIHN1bSBvZiB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBhZGRyZXNzIGFuZCBhIDMyLWJpdCBzaWduZWQKK2ltbWVkaWF0ZSBmaWVsZCBtdWx0aXBsaWVkIGJ5IHR3by4gCis8L3VsPgorCisgICA8cD5UaGUgbGVuZ3RoIG9mIGEgc3RvcmFnZSBvcGVyYW5kIGNhbiBiZToKKworICAgICA8dWw+Cis8bGk+SW1wbGllZCBieSB0aGUgaW5zdHJ1Y3Rpb24KKzxsaT5TcGVjaWZpZWQgYnkgYSBiaXRtYXNrCis8bGk+U3BlY2lmaWVkIGJ5IGEgZm91ci1iaXQgb3IgZWlnaHQtYml0IGxlbmd0aCBmaWVsZCBMCis8bGk+U3BlY2lmaWVkIGJ5IHRoZSBjb250ZW50IG9mIGEgZ2VuZXJhbCByZWdpc3RlcgorPC91bD4KKworICAgPHA+VGhlIG5vdGF0aW9uIGZvciBzdG9yYWdlIG9wZXJhbmQgYWRkcmVzc2VzIGZvcm1lZCBmcm9tIG11bHRpcGxlIGZpZWxkcyBpcworYXMgZm9sbG93czoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+RG4oQm4pPC9jb2RlPjxkZD50aGUgYWRkcmVzcyBmb3Igb3BlcmFuZCBudW1iZXIgbiBpcyBmb3JtZWQgZnJvbSB0aGUgY29udGVudCBvZiBnZW5lcmFsCityZWdpc3RlciBCbiBjYWxsZWQgdGhlIGJhc2UgcmVnaXN0ZXIgYW5kIHRoZSBkaXNwbGFjZW1lbnQgZmllbGQgRG4uIAorPGJyPjxkdD48Y29kZT5EbihYbixCbik8L2NvZGU+PGRkPnRoZSBhZGRyZXNzIGZvciBvcGVyYW5kIG51bWJlciBuIGlzIGZvcm1lZCBmcm9tIHRoZSBjb250ZW50IG9mIGdlbmVyYWwKK3JlZ2lzdGVyIFhuIGNhbGxlZCB0aGUgaW5kZXggcmVnaXN0ZXIsIGdlbmVyYWwgcmVnaXN0ZXIgQm4gY2FsbGVkIHRoZQorYmFzZSByZWdpc3RlciBhbmQgdGhlIGRpc3BsYWNlbWVudCBmaWVsZCBEbi4gCis8YnI+PGR0Pjxjb2RlPkRuKExuLEJuKTwvY29kZT48ZGQ+dGhlIGFkZHJlc3MgZm9yIG9wZXJhbmQgbnVtYmVyIG4gaXMgZm9ybWVkIGZyb20gdGhlIGNvbnRlbnQgb2YgZ2VuZXJhbAorcmVnaXNlciBCbiBjYWxsZWQgdGhlIGJhc2UgcmVnaXN0ZXIgYW5kIHRoZSBkaXNwbGFjZW1lbnQgZmllbGQgRG4uIAorVGhlIGxlbmd0aCBvZiB0aGUgb3BlcmFuZCBuIGlzIHNwZWNpZmllZCBieSB0aGUgZmllbGQgTG4uIAorPC9kbD4KKworICAgPHA+VGhlIGJhc2UgcmVnaXN0ZXJzIEJuIGFuZCB0aGUgaW5kZXggcmVnaXN0ZXJzIFhuIG9mIGEgc3RvcmFnZSBvcGVyYW5kIGNhbgorYmUgc2tpcHBlZC4gSWYgQm4gYW5kIFhuIGFyZSBza2lwcGVkLCBhIHplcm8gd2lsbCBiZSBzdG9yZWQgdG8gdGhlIG9wZXJhbmQKK2ZpZWxkLiBUaGUgbm90YXRpb24gY2hhbmdlcyBhcyBmb2xsb3dzOgorCis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGggdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPmZ1bGwgbm90YXRpb24gPC90aD48dGggdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPnNob3J0IG5vdGF0aW9uCisgICAgIDxicj48L3RoPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPkRuKDAsQm4pIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj5EbihCbikKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+RG4oMCwwKSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+RG4KKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+RG4oMCkgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPkRuCisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPkRuKExuLDApIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj5EbihMbikKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3MzOTAtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MjVmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zMzkwIE9wdGlvbnMgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNfMDAyZjM5MF8wMDJkRGVwZW5kZW50Lmh0bWwjU18wMDJmMzkwXzAwMmREZXBlbmRlbnQiIHRpdGxlPSJTLzM5MC1EZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzMzkwLUNoYXJhY3RlcnMuaHRtbCNzMzkwLUNoYXJhY3RlcnMiIHRpdGxlPSJzMzkwIENoYXJhY3RlcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgQXNzZW1ibGVyICJhcyIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzMzkwLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iczM5MC1DaGFyYWN0ZXJzLmh0bWwjczM5MC1DaGFyYWN0ZXJzIj5zMzkwIENoYXJhY3RlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5TLzM5MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM1LjEgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtZm9yLXMzOTAtMTY3OCI+PC9hPjxhIG5hbWU9ImluZGV4LXMzOTAtb3B0aW9ucy0xNjc5Ij48L2E+CitUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIGFsbCBhdmFpbGFibGUgczM5MCBzcGVjaWZpYyBvcHRpb25zOgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG0zMV8wMDdkLW9wdGlvbl8wMDJjLXMzOTAtMTY4MCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG02NF8wMDdkLW9wdGlvbl8wMDJjLXMzOTAtMTY4MSI+PC9hPgorPGRsPjxkdD48Y29kZT4tbTMxIHwgLW02NDwvY29kZT48ZGQ+U2VsZWN0IDMxLSBvciA2NC1iaXQgQUJJIGltcGx5aW5nIGEgd29yZCBzaXplIG9mIDMyLSBvciA2NC1iaXQuCisKKyAgICAgPHA+VGhlc2Ugb3B0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgd2l0aCB0aGUgRUxGIG9iamVjdCBmaWxlIGZvcm1hdCwgYW5kCityZXF1aXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBCRkQgc3VwcG9ydCBoYXMgYmVlbiBpbmNsdWRlZCAob24gYSAzMS1iaXQKK3BsYXRmb3JtIHlvdSBtdXN0IGFkZCAmbmRhc2g7ZW5hYmxlLTY0LWJpdC1iZmQgb24gdGhlIGNhbGwgdG8gdGhlIGNvbmZpZ3VyZQorc2NyaXB0IHRvIGVuYWJsZSA2NC1iaXQgdXNhZ2UgYW5kIHVzZSBzMzkweCBhcyB0YXJnZXQgcGxhdGZvcm0pLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtZXNhXzAwN2Qtb3B0aW9uXzAwMmMtczM5MC0xNjgyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG16YXJjaF8wMDdkLW9wdGlvbl8wMDJjLXMzOTAtMTY4MyI+PC9hPjxicj48ZHQ+PGNvZGU+LW1lc2EgfCAtbXphcmNoPC9jb2RlPjxkZD5TZWxlY3QgdGhlIGFyY2hpdGVjdHVyZSBtb2RlLCBlaXRoZXIgdGhlIEVudGVycHJpc2UgU3lzdGVtIEFyY2hpdGVjdHVyZQorKGVzYSkgbW9kZSBvciB0aGUgei9BcmNoaXRlY3R1cmUgbW9kZSAoemFyY2gpLgorCisgICAgIDxwPlRoZSA2NC1iaXQgaW5zdHJ1Y3Rpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIHRoZSB6L0FyY2hpdGVjdHVyZSBtb2RlLiAKK1RoZSBjb21iaW5hdGlvbiBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tNjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1lc2E8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVzdWx0cyBpbiBhIHdhcm5pbmcKK21lc3NhZ2UuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyZG1hcmNoXzAwM2RfMDA3ZC1vcHRpb25fMDAyYy1zMzkwLTE2ODQiPjwvYT48YnI+PGR0Pjxjb2RlPi1tYXJjaD08L2NvZGU+PHZhcj5DUFU8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiBUaGUgZm9sbG93aW5nIHByb2Nlc3NvciBuYW1lcworYXJlIHJlY29nbml6ZWQ6Cis8Y29kZT5nNTwvY29kZT4sCis8Y29kZT5nNjwvY29kZT4sCis8Y29kZT56OTAwPC9jb2RlPiwKKzxjb2RlPno5OTA8L2NvZGU+LAorPGNvZGU+ejktMTA5PC9jb2RlPiwKKzxjb2RlPno5LWVjPC9jb2RlPiwKKzxjb2RlPnoxMDwvY29kZT4gYW5kCis8Y29kZT56MTk2PC9jb2RlPi4gCitBc3NlbWJsaW5nIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgdGFyZ2V0IHByb2Nlc3NvcgorcmVzdWx0cyBpbiBhbiBlcnJvciBtZXNzYWdlLiBEbyBub3Qgc3BlY2lmeSA8Y29kZT5nNTwvY29kZT4gb3IgPGNvZGU+ZzY8L2NvZGU+Cit3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW16YXJjaDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXJlZ25hbWVzXzAwN2Qtb3B0aW9uXzAwMmMtczM5MC0xNjg1Ij48L2E+PGJyPjxkdD48Y29kZT4tbXJlZ25hbWVzPC9jb2RlPjxkZD5BbGxvdyBzeW1ib2xpYyBuYW1lcyBmb3IgcmVnaXN0ZXJzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMmRtbm9fMDAyZHJlZ25hbWVzXzAwN2Qtb3B0aW9uXzAwMmMtczM5MC0xNjg2Ij48L2E+PGJyPjxkdD48Y29kZT4tbW5vLXJlZ25hbWVzPC9jb2RlPjxkZD5EbyBub3QgYWxsb3cgc3ltYm9saWMgbmFtZXMgZm9yIHJlZ2lzdGVycy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJkbXdhcm5fMDAyZGFyZWdfMDAyZHplcm9fMDA3ZC1vcHRpb25fMDAyYy1zMzkwLTE2ODciPjwvYT48YnI+PGR0Pjxjb2RlPi1td2Fybi1hcmVnLXplcm88L2NvZGU+PGRkPldhcm4gd2hlbmV2ZXIgdGhlIG9wZXJhbmQgZm9yIGEgYmFzZSBvciBpbmRleCByZWdpc3RlciBoYXMgYmVlbiBzcGVjaWZpZWQKK2J1dCBldmFsdWF0ZXMgdG8gemVyby4gVGhpcyBjYW4gaW5kaWNhdGUgdGhlIG1pc3VzZSBvZiBnZW5lcmFsIHB1cnBvc2UKK3JlZ2lzdGVyIDAgYXMgYW4gYWRkcmVzcyByZWdpc3Rlci4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1SZWdpc3Rlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1SZWdpc3Rlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MWNiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLVJlZ2lzdGVyLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+czM5MCBSZWdpc3RlciAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iczM5MC1TeW50YXguaHRtbCNzMzkwLVN5bnRheCIgdGl0bGU9InMzOTAgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iczM5MC1NbmVtb25pY3MuaHRtbCNzMzkwLU1uZW1vbmljcyIgdGl0bGU9InMzOTAgTW5lbW9uaWNzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iczM5MC1SZWdpc3RlciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzMzkwLU1uZW1vbmljcy5odG1sI3MzOTAtTW5lbW9uaWNzIj5zMzkwIE1uZW1vbmljczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9InMzOTAtU3ludGF4Lmh0bWwjczM5MC1TeW50YXgiPnMzOTAgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+OS4zNS4zLjEgUmVnaXN0ZXIgbmFtaW5nPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXItbmFtaW5nXzAwMmMtczM5MC0xNjk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtczM5MC1yZWdpc3Rlci1uYW1pbmctMTY5NiI+PC9hPgorVGhlIDxjb2RlPmFzPC9jb2RlPiByZWNvZ25pemVzIGEgbnVtYmVyIG9mIHByZWRlZmluZWQgc3ltYm9scyBmb3IgdGhlCit2YXJpb3VzIHByb2Nlc3NvciByZWdpc3RlcnMuIEEgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbiBpbiBvbmUgb2YgdGhlCitpbnN0cnVjdGlvbiBmb3JtYXRzIGlzIGFuIHVuc2lnbmVkIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxNS4gVGhlIHNwZWNpZmljCitpbnN0cnVjdGlvbiBhbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSByZWdpc3RlciBpbiB0aGUgaW5zdHJ1Y3Rpb24gZm9ybWF0CitkZW5vdGVzIHRoZSB0eXBlIG9mIHRoZSByZWdpc3Rlci4gVGhlIHJlZ2lzdGVyIHN5bWJvbHMgYXJlIHByZWZpeGVkIHdpdGgKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOzoKKworPHByZSBjbGFzcz0iZGlzcGxheSI+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj4lck4gPC90ZD48dGQgdmFsaWduPSJ0b3AiPnRoZSAxNiBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLCAwICZsdDs9IE4gJmx0Oz0gMTUKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+JWZOIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj50aGUgMTYgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLCAwICZsdDs9IE4gJmx0Oz0gMTUKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+JWFOIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj50aGUgMTYgYWNjZXNzIHJlZ2lzdGVycywgMCAmbHQ7PSBOICZsdDs9IDE1CisgICAgIDxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPiVjTiA8L3RkPjx0ZCB2YWxpZ249InRvcCI+dGhlIDE2IGNvbnRyb2wgcmVnaXN0ZXJzLCAwICZsdDs9IE4gJmx0Oz0gMTUKKyAgICAgPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+JWxpdCA8L3RkPjx0ZCB2YWxpZ249InRvcCI+YW4gYWxpYXMgZm9yIHRoZSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXIgJXIxMworICAgICA8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj4lc3AgPC90ZD48dGQgdmFsaWduPSJ0b3AiPmFuIGFsaWFzIGZvciB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyICVyMTUKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC9zMzkwLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM1NWYxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvczM5MC1TeW50YXguaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zMzkwIFN5bnRheCAtIFVzaW5nIGFzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyBhcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU18wMDJmMzkwXzAwMmREZXBlbmRlbnQuaHRtbCNTXzAwMmYzOTBfMDAyZERlcGVuZGVudCIgdGl0bGU9IlMvMzkwLURlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InMzOTAtQ2hhcmFjdGVycy5odG1sI3MzOTAtQ2hhcmFjdGVycyIgdGl0bGU9InMzOTAgQ2hhcmFjdGVycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InMzOTAtRGlyZWN0aXZlcy5odG1sI3MzOTAtRGlyZWN0aXZlcyIgdGl0bGU9InMzOTAgRGlyZWN0aXZlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InMzOTAtU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InMzOTAtRGlyZWN0aXZlcy5odG1sI3MzOTAtRGlyZWN0aXZlcyI+czM5MCBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iczM5MC1DaGFyYWN0ZXJzLmh0bWwjczM5MC1DaGFyYWN0ZXJzIj5zMzkwIENoYXJhY3RlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTXzAwMmYzOTBfMDAyZERlcGVuZGVudC5odG1sI1NfMDAyZjM5MF8wMDJkRGVwZW5kZW50Ij5TLzM5MC1EZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjM1LjMgSW5zdHJ1Y3Rpb24gc3ludGF4PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW5zdHJ1Y3Rpb24tc3ludGF4XzAwMmMtczM5MC0xNjkzIj48L2E+PGEgbmFtZT0iaW5kZXgtczM5MC1pbnN0cnVjdGlvbi1zeW50YXgtMTY5NCI+PC9hPgorVGhlIGFzc2VtYmxlciBzeW50YXggY2xvc2VseSBmb2xsb3dzIHRoZSBzeW50YXggb3V0bGluZWQgaW4KK0VudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIChTQTIyLTcyMDEpCithbmQgdGhlIHovQXJjaGl0ZWN0dXJlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIChTQTIyLTc4MzIpLgorCisgICA8cD5FYWNoIGluc3RydWN0aW9uIGhhcyB0d28gbWFqb3IgcGFydHMsIHRoZSBpbnN0cnVjdGlvbiBtbmVtb25pYworYW5kIHRoZSBpbnN0cnVjdGlvbiBvcGVyYW5kcy4gVGhlIGluc3RydWN0aW9uIGZvcm1hdCB2YXJpZXMuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJzMzkwLVJlZ2lzdGVyLmh0bWwjczM5MC1SZWdpc3RlciI+czM5MCBSZWdpc3RlcjwvYT46ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIE5hbWluZworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iczM5MC1NbmVtb25pY3MuaHRtbCNzMzkwLU1uZW1vbmljcyI+czM5MCBNbmVtb25pY3M8L2E+OiAgICAgICAgICAgICAgIEluc3RydWN0aW9uIE1uZW1vbmljcworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iczM5MC1PcGVyYW5kcy5odG1sI3MzOTAtT3BlcmFuZHMiPnMzOTAgT3BlcmFuZHM8L2E+OiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBPcGVyYW5kcworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iczM5MC1Gb3JtYXRzLmh0bWwjczM5MC1Gb3JtYXRzIj5zMzkwIEZvcm1hdHM8L2E+OiAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gRm9ybWF0cworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iczM5MC1BbGlhc2VzLmh0bWwjczM5MC1BbGlhc2VzIj5zMzkwIEFsaWFzZXM8L2E+OiAJCUluc3RydWN0aW9uIEFsaWFzZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9InMzOTAtT3BlcmFuZC1Nb2RpZmllci5odG1sI3MzOTAtT3BlcmFuZC1Nb2RpZmllciI+czM5MCBPcGVyYW5kIE1vZGlmaWVyPC9hPjogICAgICAgIEluc3RydWN0aW9uIE9wZXJhbmQgTW9kaWZpZXIKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9InMzOTAtSW5zdHJ1Y3Rpb24tTWFya2VyLmh0bWwjczM5MC1JbnN0cnVjdGlvbi1NYXJrZXIiPnMzOTAgSW5zdHJ1Y3Rpb24gTWFya2VyPC9hPjogICAgICBJbnN0cnVjdGlvbiBNYXJrZXIKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9InMzOTAtTGl0ZXJhbC1Qb29sLUVudHJpZXMuaHRtbCNzMzkwLUxpdGVyYWwtUG9vbC1FbnRyaWVzIj5zMzkwIExpdGVyYWwgUG9vbCBFbnRyaWVzPC9hPjogICAgTGl0ZXJhbCBQb29sIEVudHJpZXMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3N0YXRpc3RpY3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3N0YXRpc3RpY3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJjY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvc3RhdGlzdGljcy5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0YXRpc3RpY3MgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlIuaHRtbCNSIiB0aXRsZT0iUiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InRyYWRpdGlvbmFsXzAwMmRmb3JtYXQuaHRtbCN0cmFkaXRpb25hbF8wMDJkZm9ybWF0IiB0aXRsZT0idHJhZGl0aW9uYWwtZm9ybWF0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RhdGlzdGljcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0cmFkaXRpb25hbF8wMDJkZm9ybWF0Lmh0bWwjdHJhZGl0aW9uYWxfMDAyZGZvcm1hdCI+dHJhZGl0aW9uYWwtZm9ybWF0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUi5odG1sI1IiPlI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMTMgRGlzcGxheSBBc3NlbWJseSBTdGF0aXN0aWNzOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0YXRpc3RpY3M8L3NwYW4+PC9zYW1wPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRzdGF0aXN0aWNzLTkyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGlzdGljc18wMDJjLWFib3V0LWFzc2VtYmx5LTkzIj48L2E+PGEgbmFtZT0iaW5kZXgtdGltZV8wMDJjLXRvdGFsLWZvci1hc3NlbWJseS05NCI+PC9hPjxhIG5hbWU9ImluZGV4LXNwYWNlLXVzZWRfMDAyYy1tYXhpbXVtLWZvci1hc3NlbWJseS05NSI+PC9hPlVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tc3RhdGlzdGljczwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBkaXNwbGF5IHR3byBzdGF0aXN0aWNzIGFib3V0IHRoZSByZXNvdXJjZXMgdXNlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD46IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBzcGFjZSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBhc3NlbWJseQorKGluIGJ5dGVzKSwgYW5kIHRoZSB0b3RhbCBleGVjdXRpb24gdGltZSB0YWtlbiBmb3IgdGhlIGFzc2VtYmx5IChpbiA8c3BhbiBjbGFzcz0ic2MiPmNwdTwvc3Bhbj4KK3NlY29uZHMpLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC90cmFkaXRpb25hbF8wMDJkZm9ybWF0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYXMuaHRtbC90cmFkaXRpb25hbF8wMDJkZm9ybWF0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyZDlhZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3RyYWRpdGlvbmFsXzAwMmRmb3JtYXQuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT50cmFkaXRpb25hbC1mb3JtYXQgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzIiB0aXRsZT0ic3RhdGlzdGljcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InYuaHRtbCN2IiB0aXRsZT0idiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBBc3NlbWJsZXIgImFzIi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAorMjAwMCwgMjAwMSwgMjAwMiwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InRyYWRpdGlvbmFsLWZvcm1hdCI+PC9hPgorPGEgbmFtZT0idHJhZGl0aW9uYWxfMDAyZGZvcm1hdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ2Lmh0bWwjdiI+djwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzIj5zdGF0aXN0aWNzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjE0IENvbXBhdGlibGUgT3V0cHV0OiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRyYWRpdGlvbmFsLWZvcm1hdDwvc3Bhbj48L3NhbXA+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHRyYWRpdGlvbmFsXzAwMmRmb3JtYXQtOTYiPjwvYT5Gb3Igc29tZSB0YXJnZXRzLCB0aGUgb3V0cHV0IG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hczwvc3Bhbj48L3NhbXA+IGlzIGRpZmZlcmVudCBpbiBzb21lIHdheXMKK2Zyb20gdGhlIG91dHB1dCBvZiBzb21lIGV4aXN0aW5nIGFzc2VtYmxlci4gIFRoaXMgc3dpdGNoIHJlcXVlc3RzCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiB0byB1c2UgdGhlIHRyYWRpdGlvbmFsIGZvcm1hdCBpbnN0ZWFkLgorCisgICA8cD5Gb3IgZXhhbXBsZSwgaXQgZGlzYWJsZXMgdGhlIGV4Y2VwdGlvbiBmcmFtZSBvcHRpbWl6YXRpb25zIHdoaWNoCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiBub3JtYWxseSBkb2VzIGJ5IGRlZmF1bHQgb24gPGNvZGU+Z2NjPC9jb2RlPiBvdXRwdXQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3YuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9hcy5odG1sL3YuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDEyMWNlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2FzLmh0bWwvdi5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnYgLSBVc2luZyBhczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgYXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InRyYWRpdGlvbmFsXzAwMmRmb3JtYXQuaHRtbCN0cmFkaXRpb25hbF8wMDJkZm9ybWF0IiB0aXRsZT0idHJhZGl0aW9uYWwtZm9ybWF0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVy5odG1sI1ciIHRpdGxlPSJXIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIEFzc2VtYmxlciAiYXMiLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisyMDAwLCAyMDAxLCAyMDAyLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK0luYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJXLmh0bWwjVyI+VzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InRyYWRpdGlvbmFsXzAwMmRmb3JtYXQuaHRtbCN0cmFkaXRpb25hbF8wMDJkZm9ybWF0Ij50cmFkaXRpb25hbC1mb3JtYXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMTUgQW5ub3VuY2UgVmVyc2lvbjogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXY8L3NwYW4+PC9zYW1wPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkdi05NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkdmVyc2lvbi05OCI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VtYmxlci12ZXJzaW9uLTk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmVyc2lvbi1vZi1hc3NlbWJsZXItMTAwIj48L2E+WW91IGNhbiBmaW5kIG91dCB3aGF0IHZlcnNpb24gb2YgYXMgaXMgcnVubmluZyBieSBpbmNsdWRpbmcgdGhlCitvcHRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tdjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAod2hpY2ggeW91IGNhbiBhbHNvIHNwZWxsIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXZlcnNpb248L3NwYW4+PC9zYW1wPiZyc3F1bzspIG9uIHRoZQorY29tbWFuZCBsaW5lLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9BcmNoaXRlY3R1cmUtU2VsZWN0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9BcmNoaXRlY3R1cmUtU2VsZWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0Yzg0NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0FyY2hpdGVjdHVyZS1TZWxlY3Rpb24uaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BcmNoaXRlY3R1cmUgU2VsZWN0aW9uIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0uaHRtbCNTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0iIHRpdGxlPSJTZWxlY3RpbmcgdGhlIFRhcmdldCBTeXN0ZW0iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUYXJnZXQtU2VsZWN0aW9uLmh0bWwjVGFyZ2V0LVNlbGVjdGlvbiIgdGl0bGU9IlRhcmdldCBTZWxlY3Rpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFyY2hpdGVjdHVyZS1TZWxlY3Rpb24iPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUYXJnZXQtU2VsZWN0aW9uLmh0bWwjVGFyZ2V0LVNlbGVjdGlvbiI+VGFyZ2V0IFNlbGVjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNlbGVjdGluZy10aGUtVGFyZ2V0LVN5c3RlbS5odG1sI1NlbGVjdGluZy10aGUtVGFyZ2V0LVN5c3RlbSI+U2VsZWN0aW5nIHRoZSBUYXJnZXQgU3lzdGVtPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTguMiBBcmNoaXRlY3R1cmUgU2VsZWN0aW9uPC9oMz4KKworPHA+QW4gPGRmbj5hcmNoaXRlY3R1cmU8L2Rmbj4gaXMgYSB0eXBlIG9mIDxzcGFuIGNsYXNzPSJzYyI+Y3B1PC9zcGFuPiBvbiB3aGljaCBhbiBvYmplY3QgZmlsZSBpcwordG8gcnVuLiAgSXRzIG5hbWUgbWF5IGNvbnRhaW4gYSBjb2xvbiwgc2VwYXJhdGluZyB0aGUgbmFtZSBvZiB0aGUKK3Byb2Nlc3NvciBmYW1pbHkgZnJvbSB0aGUgbmFtZSBvZiB0aGUgcGFydGljdWxhciA8c3BhbiBjbGFzcz0ic2MiPmNwdTwvc3Bhbj4uCisKKyAgIDxwPlRoZSBjb21tYW5kIHRvIGxpc3QgdmFsaWQgYXJjaGl0ZWN0dXJlIHZhbHVlcyBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9iamR1bXAgLWk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHRoZQorc2Vjb25kIGNvbHVtbiBjb250YWlucyB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24pLgorCisgICA8cD5TYW1wbGUgdmFsdWVzOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm02OGs6NjgwMjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlwczozMDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNwYXJjPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCis8aDQgY2xhc3M9InN1YmhlYWRpbmciPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpkdW1wPC9zcGFuPjwvc2FtcD4gQXJjaGl0ZWN0dXJlPC9oND4KKworPHA+V2F5cyB0byBzcGVjaWZ5OgorCisgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5jb21tYW5kIGxpbmUgb3B0aW9uOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYXJjaGl0ZWN0dXJlPC9zcGFuPjwvc2FtcD4KKworICAgICA8bGk+ZGVkdWNlZCBmcm9tIHRoZSBpbnB1dCBmaWxlCisgICAgICAgIDwvb2w+CisKKzxoNCBjbGFzcz0ic3ViaGVhZGluZyI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamNvcHk8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5tPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zaXplPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zdHJpbmdzPC9zcGFuPjwvc2FtcD4gQXJjaGl0ZWN0dXJlPC9oND4KKworPHA+V2F5cyB0byBzcGVjaWZ5OgorCisgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5kZWR1Y2VkIGZyb20gdGhlIGlucHV0IGZpbGUKKyAgICAgICAgPC9vbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvQmludXRpbHMtSW5kZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0JpbnV0aWxzLUluZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEzN2UyYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0JpbnV0aWxzLUluZGV4Lmh0bWwKQEAgLTAsMCArMSwyMDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJpbnV0aWxzIEluZGV4IC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgdGl0bGU9IkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQmludXRpbHMtSW5kZXgiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJ1bm51bWJlcmVkIj5CaW51dGlscyBJbmRleDwvaDI+CisKKzx1bCBjbGFzcz0iaW5kZXgtY3AiIGNvbXBhY3Q+Cis8bGk+PGEgaHJlZj0ic3RyaXAuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRkZXRlcm1pbmlzdGljXzAwMmRhcmNoaXZlcy0xMzMiPjxjb2RlPi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RyaXAuaHRtbCNzdHJpcCI+c3RyaXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyYW5saWIuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRkZXRlcm1pbmlzdGljXzAwMmRhcmNoaXZlcy0xMTQiPjxjb2RlPi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0icmFubGliLmh0bWwjcmFubGliIj5yYW5saWI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpjb3B5Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkZGV0ZXJtaW5pc3RpY18wMDJkYXJjaGl2ZXMtNTkiPjxjb2RlPi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0ib2JqY29weS5odG1sI29iamNvcHkiPm9iamNvcHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkZGV0ZXJtaW5pc3RpY18wMDJkYXJjaGl2ZXMtMjYiPjxjb2RlPi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPmFyIGNtZGxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtZ190XzAwMmVzdGFiLTEwMCI+LnN0YWI8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1BZGQtcHJlZml4LXRvLWFic29sdXRlLXBhdGhzLTk0Ij5BZGQgcHJlZml4IHRvIGFic29sdXRlIHBhdGhzPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhZGRyMmxpbmUuaHRtbCNpbmRleC1hZGRyMmxpbmUtMTM5Ij48Y29kZT5hZGRyMmxpbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iYWRkcjJsaW5lLmh0bWwjYWRkcjJsaW5lIj5hZGRyMmxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhZGRyMmxpbmUuaHRtbCNpbmRleC1hZGRyZXNzLXRvLWZpbGUtbmFtZS1hbmQtbGluZS1udW1iZXItMTQwIj5hZGRyZXNzIHRvIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXI8L2E+OiA8YSBocmVmPSJhZGRyMmxpbmUuaHRtbCNhZGRyMmxpbmUiPmFkZHIybGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1hbGwtaGVhZGVyLWluZm9ybWF0aW9uXzAwMmMtb2JqZWN0LWZpbGUtMTA3Ij5hbGwgaGVhZGVyIGluZm9ybWF0aW9uLCBvYmplY3QgZmlsZTwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXIuaHRtbCNpbmRleC1hci0yIj48Y29kZT5hcjwvY29kZT48L2E+OiA8YSBocmVmPSJhci5odG1sI2FyIj5hcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLmh0bWwjaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2Jhcl8wMDdkLWNvbXBhdGliaWxpdHktMTAiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGNvbXBhdGliaWxpdHk8L2E+OiA8YSBocmVmPSJhci5odG1sI2FyIj5hcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1hcmNoaXRlY3R1cmUtODYiPmFyY2hpdGVjdHVyZTwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LWFyY2hpdGVjdHVyZXMtYXZhaWxhYmxlLTgyIj5hcmNoaXRlY3R1cmVzIGF2YWlsYWJsZTwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmFubGliLmh0bWwjaW5kZXgtYXJjaGl2ZS1jb250ZW50cy0xMTEiPmFyY2hpdmUgY29udGVudHM8L2E+OiA8YSBocmVmPSJyYW5saWIuaHRtbCNyYW5saWIiPnJhbmxpYjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1BcmNoaXZlLWZpbGUtc3ltYm9sLWluZGV4LWluZm9ybWF0aW9uLTE2MiI+QXJjaGl2ZSBmaWxlIHN5bWJvbCBpbmRleCBpbmZvcm1hdGlvbjwvYT46IDxhIGhyZWY9InJlYWRlbGYuaHRtbCNyZWFkZWxmIj5yZWFkZWxmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LWFyY2hpdmUtaGVhZGVycy02OSI+YXJjaGl2ZSBoZWFkZXJzPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci5odG1sI2luZGV4LWFyY2hpdmVzLTMiPmFyY2hpdmVzPC9hPjogPGEgaHJlZj0iYXIuaHRtbCNhciI+YXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJkbGx0b29sLmh0bWwjaW5kZXgtYmFzZS1maWxlcy0xNDYiPmJhc2UgZmlsZXM8L2E+OiA8YSBocmVmPSJkbGx0b29sLmh0bWwjZGxsdG9vbCI+ZGxsdG9vbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWJ1Zy1jcml0ZXJpYS0xNjciPmJ1ZyBjcml0ZXJpYTwvYT46IDxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI0J1Zy1Dcml0ZXJpYSI+QnVnIENyaXRlcmlhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLVJlcG9ydGluZy5odG1sI2luZGV4LWJ1Zy1yZXBvcnRzLTE3MSI+YnVnIHJlcG9ydHM8L2E+OiA8YSBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjQnVnLVJlcG9ydGluZyI+QnVnIFJlcG9ydGluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjaW5kZXgtYnVncy0xNjUiPmJ1Z3M8L2E+OiA8YSBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNpbmRleC1idWdzXzAwMmMtcmVwb3J0aW5nLTE3MiI+YnVncywgcmVwb3J0aW5nPC9hPjogPGEgaHJlZj0iQnVnLVJlcG9ydGluZy5odG1sI0J1Zy1SZXBvcnRpbmciPkJ1ZyBSZXBvcnRpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjXzAwMmJfMDAyYmZpbHQuaHRtbCNpbmRleC1jXzAwMmJfMDAyYmZpbHQtMTM2Ij48Y29kZT5jKytmaWx0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCI+YysrZmlsdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamNvcHkuaHRtbCNpbmRleC1jaGFuZ2luZy1vYmplY3QtYWRkcmVzc2VzLTYzIj5jaGFuZ2luZyBvYmplY3QgYWRkcmVzc2VzPC9hPjogPGEgaHJlZj0ib2JqY29weS5odG1sI29iamNvcHkiPm9iamNvcHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpjb3B5Lmh0bWwjaW5kZXgtY2hhbmdpbmctc2VjdGlvbi1hZGRyZXNzLTY0Ij5jaGFuZ2luZyBzZWN0aW9uIGFkZHJlc3M8L2E+OiA8YSBocmVmPSJvYmpjb3B5Lmh0bWwjb2JqY29weSI+b2JqY29weTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamNvcHkuaHRtbCNpbmRleC1jaGFuZ2luZy1zZWN0aW9uLUxNQS02NSI+Y2hhbmdpbmcgc2VjdGlvbiBMTUE8L2E+OiA8YSBocmVmPSJvYmpjb3B5Lmh0bWwjb2JqY29weSI+b2JqY29weTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamNvcHkuaHRtbCNpbmRleC1jaGFuZ2luZy1zZWN0aW9uLVZNQS02NiI+Y2hhbmdpbmcgc2VjdGlvbiBWTUE8L2E+OiA8YSBocmVmPSJvYmpjb3B5Lmh0bWwjb2JqY29weSI+b2JqY29weTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamNvcHkuaHRtbCNpbmRleC1jaGFuZ2luZy1zdGFydC1hZGRyZXNzLTYyIj5jaGFuZ2luZyBzdGFydCBhZGRyZXNzPC9hPjogPGEgaHJlZj0ib2JqY29weS5odG1sI29iamNvcHkiPm9iamNvcHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci5odG1sI2luZGV4LWNvbGxlY3Rpb25zLW9mLWZpbGVzLTQiPmNvbGxlY3Rpb25zIG9mIGZpbGVzPC9hPjogPGEgaHJlZj0iYXIuaHRtbCNhciI+YXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci5odG1sI2luZGV4LWNvbXBhdGliaWxpdHlfMDAyYy1fMDA0MGNvbW1hbmRfMDA3YmFyXzAwN2QtOSI+Y29tcGF0aWJpbGl0eSwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD48L2E+OiA8YSBocmVmPSJhci5odG1sI2FyIj5hcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1jb250ZW50cy1vZi1hcmNoaXZlLTE5Ij5jb250ZW50cyBvZiBhcmNoaXZlPC9hPjogPGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPmFyIGNtZGxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNpbmRleC1jcmFzaC0xNjkiPmNyYXNoPC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjaW5kZXgtY3JlYXRpbmctYXJjaGl2ZXMtMjQiPmNyZWF0aW5nIGFyY2hpdmVzPC9hPjogPGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPmFyIGNtZGxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjaW5kZXgtY3JlYXRpbmctdGhpbi1hcmNoaXZlLTMwIj5jcmVhdGluZyB0aGluIGFyY2hpdmU8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2luZGV4LWN4eGZpbHQtMTM4Ij48Y29kZT5jeHhmaWx0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCI+YysrZmlsdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1kYXRlcy1pbi1hcmNoaXZlLTI3Ij5kYXRlcyBpbiBhcmNoaXZlPC9hPjogPGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPmFyIGNtZGxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtZGVidWctc3ltYm9scy05OCI+ZGVidWcgc3ltYm9sczwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibm0uaHRtbCNpbmRleC1kZWJ1Z2dpbmctc3ltYm9scy00MSI+ZGVidWdnaW5nIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJubS5odG1sI25tIj5ubTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1kZWxldGluZy1mcm9tLWFyY2hpdmUtMTMiPmRlbGV0aW5nIGZyb20gYXJjaGl2ZTwvYT46IDxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNhci1jbWRsaW5lIj5hciBjbWRsaW5lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY18wMDJiXzAwMmJmaWx0Lmh0bWwjaW5kZXgtZGVtYW5nbGluZy1DXzAwMmJfMDAyYi1zeW1ib2xzLTEzNyI+ZGVtYW5nbGluZyBDKysgc3ltYm9sczwvYT46IDxhIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCI+YysrZmlsdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im5tLmh0bWwjaW5kZXgtZGVtYW5nbGluZy1pbi1ubS00NCI+ZGVtYW5nbGluZyBpbiBubTwvYT46IDxhIGhyZWY9Im5tLmh0bWwjbm0iPm5tPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYWRkcjJsaW5lLmh0bWwjaW5kZXgtZGVtYW5nbGluZy1pbi1vYmpkdW1wLTE0MiI+ZGVtYW5nbGluZyBpbiBvYmpkdW1wPC9hPjogPGEgaHJlZj0iYWRkcjJsaW5lLmh0bWwjYWRkcjJsaW5lIj5hZGRyMmxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtZGVtYW5nbGluZy1pbi1vYmpkdW1wLTczIj5kZW1hbmdsaW5nIGluIG9iamR1bXA8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmlwLmh0bWwjaW5kZXgtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlcy0xMzIiPmRldGVybWluaXN0aWMgYXJjaGl2ZXM8L2E+OiA8YSBocmVmPSJzdHJpcC5odG1sI3N0cmlwIj5zdHJpcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJhbmxpYi5odG1sI2luZGV4LWRldGVybWluaXN0aWMtYXJjaGl2ZXMtMTEzIj5kZXRlcm1pbmlzdGljIGFyY2hpdmVzPC9hPjogPGEgaHJlZj0icmFubGliLmh0bWwjcmFubGliIj5yYW5saWI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpjb3B5Lmh0bWwjaW5kZXgtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlcy01OCI+ZGV0ZXJtaW5pc3RpYyBhcmNoaXZlczwvYT46IDxhIGhyZWY9Im9iamNvcHkuaHRtbCNvYmpjb3B5Ij5vYmpjb3B5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXItY21kbGluZS5odG1sI2luZGV4LWRldGVybWluaXN0aWMtYXJjaGl2ZXMtMjUiPmRldGVybWluaXN0aWMgYXJjaGl2ZXM8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1kaXNhc3NlbWJsaW5nLW9iamVjdC1jb2RlLTc0Ij5kaXNhc3NlbWJsaW5nIG9iamVjdCBjb2RlPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtZGlzYXNzZW1ibHktYXJjaGl0ZWN0dXJlLTg3Ij5kaXNhc3NlbWJseSBhcmNoaXRlY3R1cmU8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1kaXNhc3NlbWJseS1lbmRpYW5uZXNzLTc3Ij5kaXNhc3NlbWJseSBlbmRpYW5uZXNzPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtZGlzYXNzZW1ibHlfMDAyYy13aXRoLXNvdXJjZS05MyI+ZGlzYXNzZW1ibHksIHdpdGggc291cmNlPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJpcC5odG1sI2luZGV4LWRpc2NhcmRpbmctc3ltYm9scy0xMzAiPmRpc2NhcmRpbmcgc3ltYm9sczwvYT46IDxhIGhyZWY9InN0cmlwLmh0bWwjc3RyaXAiPnN0cmlwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZGxsdG9vbC5odG1sI2luZGV4LURMTC0xNDMiPkRMTDwvYT46IDxhIGhyZWY9ImRsbHRvb2wuaHRtbCNkbGx0b29sIj5kbGx0b29sPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZGxsdG9vbC5odG1sI2luZGV4LWRsbHRvb2wtMTQ0Ij48Y29kZT5kbGx0b29sPC9jb2RlPjwvYT46IDxhIGhyZWY9ImRsbHRvb2wuaHRtbCNkbGx0b29sIj5kbGx0b29sPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LURXQVJGLTk3Ij5EV0FSRjwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LWR5bmFtaWMtcmVsb2NhdGlvbi1lbnRyaWVzXzAwMmMtaW4tb2JqZWN0LWZpbGUtODkiPmR5bmFtaWMgcmVsb2NhdGlvbiBlbnRyaWVzLCBpbiBvYmplY3QgZmlsZTwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LWR5bmFtaWMtc3ltYm9sLXRhYmxlLWVudHJpZXNfMDAyYy1wcmludGluZy0xMDYiPmR5bmFtaWMgc3ltYm9sIHRhYmxlIGVudHJpZXMsIHByaW50aW5nPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJubS5odG1sI2luZGV4LWR5bmFtaWMtc3ltYm9scy00NSI+ZHluYW1pYyBzeW1ib2xzPC9hPjogPGEgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZWFkZWxmLmh0bWwjaW5kZXgtRUxGLWR5bmFtaWMtc2VjdGlvbi1pbmZvcm1hdGlvbi0xNjAiPkVMRiBkeW5hbWljIHNlY3Rpb24gaW5mb3JtYXRpb248L2E+OiA8YSBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1FTEYtZHluYW1pYy1zeW1ib2wtdGFibGUtaW5mb3JtYXRpb24tMTU2Ij5FTEYgZHluYW1pYyBzeW1ib2wgdGFibGUgaW5mb3JtYXRpb248L2E+OiA8YSBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1FTEYtZmlsZS1oZWFkZXItaW5mb3JtYXRpb24tMTQ5Ij5FTEYgZmlsZSBoZWFkZXIgaW5mb3JtYXRpb248L2E+OiA8YSBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1FTEYtZmlsZS1pbmZvcm1hdGlvbi0xNDciPkVMRiBmaWxlIGluZm9ybWF0aW9uPC9hPjogPGEgaHJlZj0icmVhZGVsZi5odG1sI3JlYWRlbGYiPnJlYWRlbGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZWFkZWxmLmh0bWwjaW5kZXgtRUxGLW5vdGVzLTE1NyI+RUxGIG5vdGVzPC9hPjogPGEgaHJlZj0icmVhZGVsZi5odG1sI3JlYWRlbGYiPnJlYWRlbGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtRUxGLW9iamVjdC1maWxlLWZvcm1hdC0xMDIiPkVMRiBvYmplY3QgZmlsZSBmb3JtYXQ8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1FTEYtcHJvZ3JhbS1oZWFkZXItaW5mb3JtYXRpb24tMTUwIj5FTEYgcHJvZ3JhbSBoZWFkZXIgaW5mb3JtYXRpb248L2E+OiA8YSBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1FTEYtcmVsb2MtaW5mb3JtYXRpb24tMTU4Ij5FTEYgcmVsb2MgaW5mb3JtYXRpb248L2E+OiA8YSBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1FTEYtc2VjdGlvbi1ncm91cC1pbmZvcm1hdGlvbi0xNTMiPkVMRiBzZWN0aW9uIGdyb3VwIGluZm9ybWF0aW9uPC9hPjogPGEgaHJlZj0icmVhZGVsZi5odG1sI3JlYWRlbGYiPnJlYWRlbGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZWFkZWxmLmh0bWwjaW5kZXgtRUxGLXNlY3Rpb24taW5mb3JtYXRpb24tMTUyIj5FTEYgc2VjdGlvbiBpbmZvcm1hdGlvbjwvYT46IDxhIGhyZWY9InJlYWRlbGYuaHRtbCNyZWFkZWxmIj5yZWFkZWxmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmVhZGVsZi5odG1sI2luZGV4LUVMRi1zZWdtZW50LWluZm9ybWF0aW9uLTE1MSI+RUxGIHNlZ21lbnQgaW5mb3JtYXRpb248L2E+OiA8YSBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1FTEYtc3ltYm9sLXRhYmxlLWluZm9ybWF0aW9uLTE1NSI+RUxGIHN5bWJvbCB0YWJsZSBpbmZvcm1hdGlvbjwvYT46IDxhIGhyZWY9InJlYWRlbGYuaHRtbCNyZWFkZWxmIj5yZWFkZWxmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmVhZGVsZi5odG1sI2luZGV4LUVMRi12ZXJzaW9uLXNlY3Rpb25zLWluZm9ybWF0aW9ucy0xNjEiPkVMRiB2ZXJzaW9uIHNlY3Rpb25zIGluZm9ybWF0aW9uczwvYT46IDxhIGhyZWY9InJlYWRlbGYuaHRtbCNyZWFkZWxmIj5yZWFkZWxmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZWxmZWRpdC5odG1sI2luZGV4LWVsZmVkaXQtMTY0Ij48Y29kZT5lbGZlZGl0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImVsZmVkaXQuaHRtbCNlbGZlZGl0Ij5lbGZlZGl0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LWVuZGlhbm5lc3MtNzYiPmVuZGlhbm5lc3M8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWVycm9yLW9uLXZhbGlkLWlucHV0LTE3MCI+ZXJyb3Igb24gdmFsaWQgaW5wdXQ8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im5tLmh0bWwjaW5kZXgtZXh0ZXJuYWwtc3ltYm9scy00OCI+ZXh0ZXJuYWwgc3ltYm9sczwvYT46IDxhIGhyZWY9Im5tLmh0bWwjbm0iPm5tPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXItY21kbGluZS5odG1sI2luZGV4LWV4dHJhY3QtZnJvbS1hcmNoaXZlLTIyIj5leHRyYWN0IGZyb20gYXJjaGl2ZTwvYT46IDxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNhci1jbWRsaW5lIj5hciBjbWRsaW5lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjaW5kZXgtZmF0YWwtc2lnbmFsLTE2OCI+ZmF0YWwgc2lnbmFsPC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJubS5odG1sI2luZGV4LWZpbGUtbmFtZS0zOSI+ZmlsZSBuYW1lPC9hPjogPGEgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtaGVhZGVyLWluZm9ybWF0aW9uXzAwMmMtYWxsLTEwOCI+aGVhZGVyIGluZm9ybWF0aW9uLCBhbGw8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImRsbHRvb2wuaHRtbCNpbmRleC1pbnB1dC1fMDAyZWRlZi1maWxlLTE0NSI+aW5wdXQgLmRlZiBmaWxlPC9hPjogPGEgaHJlZj0iZGxsdG9vbC5odG1sI2RsbHRvb2wiPmRsbHRvb2w8L2E+PC9saT4KKzxsaT48YSBocmVmPSJubS5odG1sI2luZGV4LWlucHV0LWZpbGUtbmFtZS0zOCI+aW5wdXQgZmlsZSBuYW1lPC9hPjogPGEgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtSW5zdHJ1Y3Rpb24td2lkdGgtOTYiPkluc3RydWN0aW9uIHdpZHRoPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci5odG1sI2luZGV4LWxpYnJhcmllcy02Ij5saWJyYXJpZXM8L2E+OiA8YSBocmVmPSJhci5odG1sI2FyIj5hcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmluZ3MuaHRtbCNpbmRleC1saXN0aW5ncy1zdHJpbmdzLTEyNCI+bGlzdGluZ3Mgc3RyaW5nczwvYT46IDxhIGhyZWY9InN0cmluZ3MuaHRtbCNzdHJpbmdzIj5zdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibm0uaHRtbCNpbmRleC1sb2FkLXBsdWdpbi00OSI+bG9hZCBwbHVnaW48L2E+OiA8YSBocmVmPSJubS5odG1sI25tIj5ubTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1tYWNoaW5lLWluc3RydWN0aW9ucy03NSI+bWFjaGluZSBpbnN0cnVjdGlvbnM8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1tb3ZpbmctaW4tYXJjaGl2ZS0xNCI+bW92aW5nIGluIGFyY2hpdmU8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLXNjcmlwdHMuaHRtbCNpbmRleC1NUkktY29tcGF0aWJpbGl0eV8wMDJjLV8wMDQwY29tbWFuZF8wMDdiYXJfMDA3ZC0zNCI+TVJJIGNvbXBhdGliaWxpdHksIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iYXItc2NyaXB0cy5odG1sI2FyLXNjcmlwdHMiPmFyIHNjcmlwdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjaW5kZXgtbmFtZS1kdXBsaWNhdGlvbi1pbi1hcmNoaXZlLTIxIj5uYW1lIGR1cGxpY2F0aW9uIGluIGFyY2hpdmU8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLmh0bWwjaW5kZXgtbmFtZS1sZW5ndGgtNSI+bmFtZSBsZW5ndGg8L2E+OiA8YSBocmVmPSJhci5odG1sI2FyIj5hcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im5tLmh0bWwjaW5kZXgtbm0tMzciPjxjb2RlPm5tPC9jb2RlPjwvYT46IDxhIGhyZWY9Im5tLmh0bWwjbm0iPm5tPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibm0uaHRtbCNpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ym5tXzAwN2QtY29tcGF0aWJpbGl0eS00MyI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5tPC9zcGFuPjwvc2FtcD4gY29tcGF0aWJpbGl0eTwvYT46IDxhIGhyZWY9Im5tLmh0bWwjbm0iPm5tPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibm0uaHRtbCNpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ym5tXzAwN2QtZm9ybWF0LTQyIj48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bm08L3NwYW4+PC9zYW1wPiBmb3JtYXQ8L2E+OiA8YSBocmVmPSJubS5odG1sI25tIj5ubTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1ub3Qtd3JpdGluZy1hcmNoaXZlLWluZGV4LTI5Ij5ub3Qgd3JpdGluZyBhcmNoaXZlIGluZGV4PC9hPjogPGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPmFyIGNtZGxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtb2JqZHVtcC02OCI+PGNvZGU+b2JqZHVtcDwvY29kZT48L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFkZHIybGluZS5odG1sI2luZGV4LW9iamVjdC1jb2RlLWZvcm1hdC0xNDEiPm9iamVjdCBjb2RlIGZvcm1hdDwvYT46IDxhIGhyZWY9ImFkZHIybGluZS5odG1sI2FkZHIybGluZSI+YWRkcjJsaW5lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RyaW5ncy5odG1sI2luZGV4LW9iamVjdC1jb2RlLWZvcm1hdC0xMjciPm9iamVjdCBjb2RlIGZvcm1hdDwvYT46IDxhIGhyZWY9InN0cmluZ3MuaHRtbCNzdHJpbmdzIj5zdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2l6ZS5odG1sI2luZGV4LW9iamVjdC1jb2RlLWZvcm1hdC0xMjIiPm9iamVjdCBjb2RlIGZvcm1hdDwvYT46IDxhIGhyZWY9InNpemUuaHRtbCNzaXplIj5zaXplPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LW9iamVjdC1jb2RlLWZvcm1hdC03MiI+b2JqZWN0IGNvZGUgZm9ybWF0PC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJubS5odG1sI2luZGV4LW9iamVjdC1jb2RlLWZvcm1hdC01MyI+b2JqZWN0IGNvZGUgZm9ybWF0PC9hPjogPGEgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtb2JqZWN0LWZpbGUtaGVhZGVyLTc4Ij5vYmplY3QgZmlsZSBoZWFkZXI8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1vYmplY3QtZmlsZS1pbmZvcm1hdGlvbi02NyI+b2JqZWN0IGZpbGUgaW5mb3JtYXRpb248L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1vYmplY3QtZmlsZS1vZmZzZXRzLTc5Ij5vYmplY3QgZmlsZSBvZmZzZXRzPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtb2JqZWN0LWZpbGUtc2VjdGlvbnMtOTEiPm9iamVjdCBmaWxlIHNlY3Rpb25zPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtb2JqZWN0LWZvcm1hdHMtYXZhaWxhYmxlLTgzIj5vYmplY3QgZm9ybWF0cyBhdmFpbGFibGU8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1vcGVyYXRpb25zLW9uLWFyY2hpdmUtMTIiPm9wZXJhdGlvbnMgb24gYXJjaGl2ZTwvYT46IDxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNhci1jbWRsaW5lIj5hciBjbWRsaW5lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXItY21kbGluZS5odG1sI2luZGV4LXByaW50aW5nLWZyb20tYXJjaGl2ZS0xNSI+cHJpbnRpbmcgZnJvbSBhcmNoaXZlPC9hPjogPGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPmFyIGNtZGxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJpbmdzLmh0bWwjaW5kZXgtcHJpbnRpbmctc3RyaW5ncy0xMjUiPnByaW50aW5nIHN0cmluZ3M8L2E+OiA8YSBocmVmPSJzdHJpbmdzLmh0bWwjc3RyaW5ncyI+c3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1xdWljay1hcHBlbmQtdG8tYXJjaGl2ZS0xNiI+cXVpY2sgYXBwZW5kIHRvIGFyY2hpdmU8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpemUuaHRtbCNpbmRleC1yYWRpeC1mb3Itc2VjdGlvbi1zaXplcy0xMjEiPnJhZGl4IGZvciBzZWN0aW9uIHNpemVzPC9hPjogPGEgaHJlZj0ic2l6ZS5odG1sI3NpemUiPnNpemU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyYW5saWIuaHRtbCNpbmRleC1yYW5saWItMTEwIj48Y29kZT5yYW5saWI8L2NvZGU+PC9hPjogPGEgaHJlZj0icmFubGliLmh0bWwjcmFubGliIj5yYW5saWI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjaW5kZXgtcmFubGliLTE4Ij5yYW5saWI8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNpbmRleC1yZWFkZWxmLTE0OCI+PGNvZGU+cmVhZGVsZjwvY29kZT48L2E+OiA8YSBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1yZWxhdGl2ZS1wbGFjZW1lbnQtaW4tYXJjaGl2ZS0yMyI+cmVsYXRpdmUgcGxhY2VtZW50IGluIGFyY2hpdmU8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1yZWxvY2F0aW9uLWVudHJpZXNfMDAyYy1pbi1vYmplY3QtZmlsZS04OCI+cmVsb2NhdGlvbiBlbnRyaWVzLCBpbiBvYmplY3QgZmlsZTwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RyaXAuaHRtbCNpbmRleC1yZW1vdmluZy1zeW1ib2xzLTEyOSI+cmVtb3Zpbmcgc3ltYm9sczwvYT46IDxhIGhyZWY9InN0cmlwLmh0bWwjc3RyaXAiPnN0cmlwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXItY21kbGluZS5odG1sI2luZGV4LXJlcGVhdGVkLW5hbWVzLWluLWFyY2hpdmUtMjAiPnJlcGVhdGVkIG5hbWVzIGluIGFyY2hpdmU8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNpbmRleC1yZXBsYWNlbWVudC1pbi1hcmNoaXZlLTE3Ij5yZXBsYWNlbWVudCBpbiBhcmNoaXZlPC9hPjogPGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPmFyIGNtZGxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI2luZGV4LXJlcG9ydGluZy1idWdzLTE2NiI+cmVwb3J0aW5nIGJ1Z3M8L2E+OiA8YSBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFyLXNjcmlwdHMuaHRtbCNpbmRleC1zY3JpcHRzXzAwMmMtXzAwNDBjb21tYW5kXzAwN2Jhcl8wMDdkLTM1Ij5zY3JpcHRzLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPjwvYT46IDxhIGhyZWY9ImFyLXNjcmlwdHMuaHRtbCNhci1zY3JpcHRzIj5hciBzY3JpcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LXNlY3Rpb24tYWRkcmVzc2VzLWluLW9iamR1bXAtNzAiPnNlY3Rpb24gYWRkcmVzc2VzIGluIG9iamR1bXA8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1zZWN0aW9uLWhlYWRlcnMtODEiPnNlY3Rpb24gaGVhZGVyczwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LXNlY3Rpb24taW5mb3JtYXRpb24tODQiPnNlY3Rpb24gaW5mb3JtYXRpb248L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpemUuaHRtbCNpbmRleC1zZWN0aW9uLXNpemVzLTExOCI+c2VjdGlvbiBzaXplczwvYT46IDxhIGhyZWY9InNpemUuaHRtbCNzaXplIj5zaXplPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LXNlY3Rpb25zXzAwMmMtZnVsbC1jb250ZW50cy05MCI+c2VjdGlvbnMsIGZ1bGwgY29udGVudHM8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpemUuaHRtbCNpbmRleC1zaXplLTExNyI+PGNvZGU+c2l6ZTwvY29kZT48L2E+OiA8YSBocmVmPSJzaXplLmh0bWwjc2l6ZSI+c2l6ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpemUuaHRtbCNpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3YnNpemVfMDA3ZC1kaXNwbGF5LWZvcm1hdC0xMTkiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zaXplPC9zcGFuPjwvc2FtcD4gZGlzcGxheSBmb3JtYXQ8L2E+OiA8YSBocmVmPSJzaXplLmh0bWwjc2l6ZSI+c2l6ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpemUuaHRtbCNpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3YnNpemVfMDA3ZC1udW1iZXItZm9ybWF0LTEyMCI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnNpemU8L3NwYW4+PC9zYW1wPiBudW1iZXIgZm9ybWF0PC9hPjogPGEgaHJlZj0ic2l6ZS5odG1sI3NpemUiPnNpemU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJubS5odG1sI2luZGV4LXNvcnRpbmctc3ltYm9scy01MSI+c29ydGluZyBzeW1ib2xzPC9hPjogPGEgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtc291cmNlLWNvZGUtY29udGV4dC04MCI+c291cmNlIGNvZGUgY29udGV4dDwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LXNvdXJjZS1kaXNhc3NlbWJseS05MiI+c291cmNlIGRpc2Fzc2VtYmx5PC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJubS5odG1sI2luZGV4LXNvdXJjZS1maWxlLW5hbWUtNDAiPnNvdXJjZSBmaWxlIG5hbWU8L2E+OiA8YSBocmVmPSJubS5odG1sI25tIj5ubTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1zb3VyY2UtZmlsZW5hbWVzLWZvci1vYmplY3QtZmlsZXMtODUiPnNvdXJjZSBmaWxlbmFtZXMgZm9yIG9iamVjdCBmaWxlczwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib2JqZHVtcC5odG1sI2luZGV4LXN0YWItOTkiPnN0YWI8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1zdGFydF8wMDJkYWRkcmVzcy0xMDMiPnN0YXJ0LWFkZHJlc3M8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1zdG9wXzAwMmRhZGRyZXNzLTEwNCI+c3RvcC1hZGRyZXNzPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJpbmdzLmh0bWwjaW5kZXgtc3RyaW5ncy0xMjMiPjxjb2RlPnN0cmluZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RyaW5ncy5odG1sI3N0cmluZ3MiPnN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJpbmdzLmh0bWwjaW5kZXgtc3RyaW5nc18wMDJjLXByaW50aW5nLTEyNiI+c3RyaW5ncywgcHJpbnRpbmc8L2E+OiA8YSBocmVmPSJzdHJpbmdzLmh0bWwjc3RyaW5ncyI+c3RyaW5nczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmlwLmh0bWwjaW5kZXgtc3RyaXAtMTI4Ij48Y29kZT5zdHJpcDwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJpcC5odG1sI3N0cmlwIj5zdHJpcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1TdHJpcC1hYnNvbHV0ZS1wYXRocy05NSI+U3RyaXAgYWJzb2x1dGUgcGF0aHM8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJhbmxpYi5odG1sI2luZGV4LXN5bWJvbC1pbmRleC0xMTIiPnN5bWJvbCBpbmRleDwvYT46IDxhIGhyZWY9InJhbmxpYi5odG1sI3JhbmxpYiI+cmFubGliPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXIuaHRtbCNpbmRleC1zeW1ib2wtaW5kZXgtNyI+c3ltYm9sIGluZGV4PC9hPjogPGEgaHJlZj0iYXIuaHRtbCNhciI+YXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJubS5odG1sI2luZGV4LXN5bWJvbC1pbmRleF8wMDJjLWxpc3RpbmctNTIiPnN5bWJvbCBpbmRleCwgbGlzdGluZzwvYT46IDxhIGhyZWY9Im5tLmh0bWwjbm0iPm5tPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibm0uaHRtbCNpbmRleC1zeW1ib2wtbGluZS1udW1iZXJzLTUwIj5zeW1ib2wgbGluZSBudW1iZXJzPC9hPjogPGEgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJvYmpkdW1wLmh0bWwjaW5kZXgtc3ltYm9sLXRhYmxlLWVudHJpZXNfMDAyYy1wcmludGluZy0xMDUiPnN5bWJvbCB0YWJsZSBlbnRyaWVzLCBwcmludGluZzwvYT46IDxhIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibm0uaHRtbCNpbmRleC1zeW1ib2xzLTM2Ij5zeW1ib2xzPC9hPjogPGEgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJpcC5odG1sI2luZGV4LXN5bWJvbHNfMDAyYy1kaXNjYXJkaW5nLTEzMSI+c3ltYm9scywgZGlzY2FyZGluZzwvYT46IDxhIGhyZWY9InN0cmlwLmh0bWwjc3RyaXAiPnN0cmlwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXIuaHRtbCNpbmRleC10aGluLWFyY2hpdmVzLTgiPnRoaW4gYXJjaGl2ZXM8L2E+OiA8YSBocmVmPSJhci5odG1sI2FyIj5hcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im5tLmh0bWwjaW5kZXgtdW5kZWZpbmVkLXN5bWJvbHMtNTUiPnVuZGVmaW5lZCBzeW1ib2xzPC9hPjogPGEgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjaW5kZXgtVW5peC1jb21wYXRpYmlsaXR5XzAwMmMtXzAwNDBjb21tYW5kXzAwN2Jhcl8wMDdkLTExIj5Vbml4IGNvbXBhdGliaWxpdHksIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPmFyIGNtZGxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZWFkZWxmLmh0bWwjaW5kZXgtdW53aW5kLWluZm9ybWF0aW9uLTE1OSI+dW53aW5kIGluZm9ybWF0aW9uPC9hPjogPGEgaHJlZj0icmVhZGVsZi5odG1sI3JlYWRlbGYiPnJlYWRlbGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJlbGZlZGl0Lmh0bWwjaW5kZXgtVXBkYXRlLUVMRi1oZWFkZXItMTYzIj5VcGRhdGUgRUxGIGhlYWRlcjwvYT46IDxhIGhyZWY9ImVsZmVkaXQuaHRtbCNlbGZlZGl0Ij5lbGZlZGl0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXItY21kbGluZS5odG1sI2luZGV4LXVwZGF0aW5nLWFuLWFyY2hpdmUtMzEiPnVwZGF0aW5nIGFuIGFyY2hpdmU8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjaW5kZXgtdmVyc2lvbi0xIj52ZXJzaW9uPC9hPjogPGEgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC1WTUEtaW4tb2JqZHVtcC03MSI+Vk1BIGluIG9iamR1bXA8L2E+OiA8YSBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCI+b2JqZHVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9iamR1bXAuaHRtbCNpbmRleC13aWRlLW91dHB1dF8wMDJjLXByaW50aW5nLTEwOSI+d2lkZSBvdXRwdXQsIHByaW50aW5nPC9hPjogPGEgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjaW5kZXgtd3JpdGluZy1hcmNoaXZlLWluZGV4LTI4Ij53cml0aW5nIGFyY2hpdmUgaW5kZXg8L2E+OiA8YSBocmVmPSJhci1jbWRsaW5lLmh0bWwjYXItY21kbGluZSI+YXIgY21kbGluZTwvYT48L2xpPgorICAgPC91bD48L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9CdWctQ3JpdGVyaWEuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0J1Zy1Dcml0ZXJpYS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTIwODAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9CdWctQ3JpdGVyaWEuaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CdWcgQ3JpdGVyaWEgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiIHRpdGxlPSJSZXBvcnRpbmcgQnVncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIiB0aXRsZT0iQnVnIFJlcG9ydGluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQnVnLUNyaXRlcmlhIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIj5CdWcgUmVwb3J0aW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyI+UmVwb3J0aW5nIEJ1Z3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xOS4xIEhhdmUgWW91IEZvdW5kIGEgQnVnPzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWJ1Zy1jcml0ZXJpYS0xNjciPjwvYT4KK0lmIHlvdSBhcmUgbm90IHN1cmUgd2hldGhlciB5b3UgaGF2ZSBmb3VuZCBhIGJ1ZywgaGVyZSBhcmUgc29tZSBndWlkZWxpbmVzOgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZmF0YWwtc2lnbmFsLTE2OCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtY3Jhc2gtMTY5Ij48L2E+Cis8dWw+PGxpPklmIGEgYmluYXJ5IHV0aWxpdHkgZ2V0cyBhIGZhdGFsIHNpZ25hbCwgZm9yIGFueSBpbnB1dCB3aGF0ZXZlciwgdGhhdCBpcworYSBidWcuICBSZWxpYWJsZSB1dGlsaXRpZXMgbmV2ZXIgY3Jhc2guCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZXJyb3Itb24tdmFsaWQtaW5wdXQtMTcwIj48L2E+PGxpPklmIGEgYmluYXJ5IHV0aWxpdHkgcHJvZHVjZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdmFsaWQgaW5wdXQsIHRoYXQgaXMgYQorYnVnLgorCisgICAgIDxsaT5JZiB5b3UgYXJlIGFuIGV4cGVyaWVuY2VkIHVzZXIgb2YgYmluYXJ5IHV0aWxpdGllcywgeW91ciBzdWdnZXN0aW9ucyBmb3IKK2ltcHJvdmVtZW50IGFyZSB3ZWxjb21lIGluIGFueSBjYXNlLiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0J1Zy1SZXBvcnRpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0J1Zy1SZXBvcnRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTJlN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvQnVnLVJlcG9ydGluZy5odG1sCkBAIC0wLDAgKzEsMTk0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CdWcgUmVwb3J0aW5nIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIiB0aXRsZT0iUmVwb3J0aW5nIEJ1Z3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiIHRpdGxlPSJCdWcgQ3JpdGVyaWEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJ1Zy1SZXBvcnRpbmciPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiPlJlcG9ydGluZyBCdWdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTkuMiBIb3cgdG8gUmVwb3J0IEJ1Z3M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1idWctcmVwb3J0cy0xNzEiPjwvYT48YSBuYW1lPSJpbmRleC1idWdzXzAwMmMtcmVwb3J0aW5nLTE3MiI+PC9hPgorQSBudW1iZXIgb2YgY29tcGFuaWVzIGFuZCBpbmRpdmlkdWFscyBvZmZlciBzdXBwb3J0IGZvciA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4KK3Byb2R1Y3RzLiAgSWYgeW91IG9idGFpbmVkIHRoZSBiaW5hcnkgdXRpbGl0aWVzIGZyb20gYSBzdXBwb3J0Citvcmdhbml6YXRpb24sIHdlIHJlY29tbWVuZCB5b3UgY29udGFjdCB0aGF0IG9yZ2FuaXphdGlvbiBmaXJzdC4KKworICAgPHA+WW91IGNhbiBmaW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gZm9yIG1hbnkgc3VwcG9ydCBjb21wYW5pZXMgYW5kCitpbmRpdmlkdWFscyBpbiB0aGUgZmlsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZXRjL1NFUlZJQ0U8L3NwYW4+PC9zYW1wPiBpbiB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IEVtYWNzCitkaXN0cmlidXRpb24uCisKKyAgIDxwPkluIGFueSBldmVudCwgd2UgYWxzbyByZWNvbW1lbmQgdGhhdCB5b3Ugc2VuZCBidWcgcmVwb3J0cyBmb3IgdGhlIGJpbmFyeQordXRpbGl0aWVzIHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cuc291cmNld2FyZS5vcmcvYnVnemlsbGEvIj5odHRwOi8vd3d3LnNvdXJjZXdhcmUub3JnL2J1Z3ppbGxhLzwvYT4uCisKKyAgIDxwPlRoZSBmdW5kYW1lbnRhbCBwcmluY2lwbGUgb2YgcmVwb3J0aW5nIGJ1Z3MgdXNlZnVsbHkgaXMgdGhpczoKKzxzdHJvbmc+cmVwb3J0IGFsbCB0aGUgZmFjdHM8L3N0cm9uZz4uICBJZiB5b3UgYXJlIG5vdCBzdXJlIHdoZXRoZXIgdG8gc3RhdGUgYQorZmFjdCBvciBsZWF2ZSBpdCBvdXQsIHN0YXRlIGl0IQorCisgICA8cD5PZnRlbiBwZW9wbGUgb21pdCBmYWN0cyBiZWNhdXNlIHRoZXkgdGhpbmsgdGhleSBrbm93IHdoYXQgY2F1c2VzIHRoZQorcHJvYmxlbSBhbmQgYXNzdW1lIHRoYXQgc29tZSBkZXRhaWxzIGRvIG5vdCBtYXR0ZXIuICBUaHVzLCB5b3UgbWlnaHQKK2Fzc3VtZSB0aGF0IHRoZSBuYW1lIG9mIGEgZmlsZSB5b3UgdXNlIGluIGFuIGV4YW1wbGUgZG9lcyBub3QgbWF0dGVyLiAKK1dlbGwsIHByb2JhYmx5IGl0IGRvZXMgbm90LCBidXQgb25lIGNhbm5vdCBiZSBzdXJlLiAgUGVyaGFwcyB0aGUgYnVnIGlzCithIHN0cmF5IG1lbW9yeSByZWZlcmVuY2Ugd2hpY2ggaGFwcGVucyB0byBmZXRjaCBmcm9tIHRoZSBsb2NhdGlvbiB3aGVyZQordGhhdCBwYXRobmFtZSBpcyBzdG9yZWQgaW4gbWVtb3J5OyBwZXJoYXBzLCBpZiB0aGUgcGF0aG5hbWUgd2VyZQorZGlmZmVyZW50LCB0aGUgY29udGVudHMgb2YgdGhhdCBsb2NhdGlvbiB3b3VsZCBmb29sIHRoZSB1dGlsaXR5IGludG8KK2RvaW5nIHRoZSByaWdodCB0aGluZyBkZXNwaXRlIHRoZSBidWcuICBQbGF5IGl0IHNhZmUgYW5kIGdpdmUgYQorc3BlY2lmaWMsIGNvbXBsZXRlIGV4YW1wbGUuICBUaGF0IGlzIHRoZSBlYXNpZXN0IHRoaW5nIGZvciB5b3UgdG8gZG8sCithbmQgdGhlIG1vc3QgaGVscGZ1bC4KKworICAgPHA+S2VlcCBpbiBtaW5kIHRoYXQgdGhlIHB1cnBvc2Ugb2YgYSBidWcgcmVwb3J0IGlzIHRvIGVuYWJsZSB1cyB0byBmaXggdGhlIGJ1ZyBpZgoraXQgaXMgbmV3IHRvIHVzLiAgVGhlcmVmb3JlLCBhbHdheXMgd3JpdGUgeW91ciBidWcgcmVwb3J0cyBvbiB0aGUgYXNzdW1wdGlvbgordGhhdCB0aGUgYnVnIGhhcyBub3QgYmVlbiByZXBvcnRlZCBwcmV2aW91c2x5LgorCisgICA8cD5Tb21ldGltZXMgcGVvcGxlIGdpdmUgYSBmZXcgc2tldGNoeSBmYWN0cyBhbmQgYXNrLCAmbGRxdW87RG9lcyB0aGlzIHJpbmcgYQorYmVsbD8mcmRxdW87ICBUaGlzIGNhbm5vdCBoZWxwIHVzIGZpeCBhIGJ1Zywgc28gaXQgaXMgYmFzaWNhbGx5IHVzZWxlc3MuICBXZQorcmVzcG9uZCBieSBhc2tpbmcgZm9yIGVub3VnaCBkZXRhaWxzIHRvIGVuYWJsZSB1cyB0byBpbnZlc3RpZ2F0ZS4gCitZb3UgbWlnaHQgYXMgd2VsbCBleHBlZGl0ZSBtYXR0ZXJzIGJ5IHNlbmRpbmcgdGhlbSB0byBiZWdpbiB3aXRoLgorCisgICA8cD5UbyBlbmFibGUgdXMgdG8gZml4IHRoZSBidWcsIHlvdSBzaG91bGQgaW5jbHVkZSBhbGwgdGhlc2UgdGhpbmdzOgorCisgICAgIDx1bD4KKzxsaT5UaGUgdmVyc2lvbiBvZiB0aGUgdXRpbGl0eS4gIEVhY2ggdXRpbGl0eSBhbm5vdW5jZXMgaXQgaWYgeW91IHN0YXJ0IGl0Cit3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb248L3NwYW4+PC9zYW1wPiBhcmd1bWVudC4KKworICAgICA8cD5XaXRob3V0IHRoaXMsIHdlIHdpbGwgbm90IGtub3cgd2hldGhlciB0aGVyZSBpcyBhbnkgcG9pbnQgaW4gbG9va2luZyBmb3IKK3RoZSBidWcgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYmluYXJ5IHV0aWxpdGllcy4KKworICAgICA8bGk+QW55IHBhdGNoZXMgeW91IG1heSBoYXZlIGFwcGxpZWQgdG8gdGhlIHNvdXJjZSwgaW5jbHVkaW5nIGFueSBwYXRjaGVzCittYWRlIHRvIHRoZSA8Y29kZT5CRkQ8L2NvZGU+IGxpYnJhcnkuCisKKyAgICAgPGxpPlRoZSB0eXBlIG9mIG1hY2hpbmUgeW91IGFyZSB1c2luZywgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgYW5kCit2ZXJzaW9uIG51bWJlci4KKworICAgICA8bGk+V2hhdCBjb21waWxlciAoYW5kIGl0cyB2ZXJzaW9uKSB3YXMgdXNlZCB0byBjb21waWxlIHRoZSB1dGlsaXRpZXMmbWRhc2g7ZS5nLiAKKyZsZHF1bzs8Y29kZT5nY2MtMi43PC9jb2RlPiZyZHF1bzsuCisKKyAgICAgPGxpPlRoZSBjb21tYW5kIGFyZ3VtZW50cyB5b3UgZ2F2ZSB0aGUgdXRpbGl0eSB0byBvYnNlcnZlIHRoZSBidWcuICBUbworZ3VhcmFudGVlIHlvdSB3aWxsIG5vdCBvbWl0IHNvbWV0aGluZyBpbXBvcnRhbnQsIGxpc3QgdGhlbSBhbGwuICBBIGNvcHkKK29mIHRoZSBNYWtlZmlsZSAob3IgdGhlIG91dHB1dCBmcm9tIG1ha2UpIGlzIHN1ZmZpY2llbnQuCisKKyAgICAgPHA+SWYgd2Ugd2VyZSB0byB0cnkgdG8gZ3Vlc3MgdGhlIGFyZ3VtZW50cywgd2Ugd291bGQgcHJvYmFibHkgZ3Vlc3Mgd3JvbmcKK2FuZCB0aGVuIHdlIG1pZ2h0IG5vdCBlbmNvdW50ZXIgdGhlIGJ1Zy4KKworICAgICA8bGk+QSBjb21wbGV0ZSBpbnB1dCBmaWxlLCBvciBzZXQgb2YgaW5wdXQgZmlsZXMsIHRoYXQgd2lsbCByZXByb2R1Y2UgdGhlCitidWcuICBJZiB0aGUgdXRpbGl0eSBpcyByZWFkaW5nIGFuIG9iamVjdCBmaWxlIG9yIGZpbGVzLCB0aGVuIGl0IGlzCitnZW5lcmFsbHkgbW9zdCBoZWxwZnVsIHRvIHNlbmQgdGhlIGFjdHVhbCBvYmplY3QgZmlsZXMuCisKKyAgICAgPHA+SWYgdGhlIHNvdXJjZSBmaWxlcyB3ZXJlIHByb2R1Y2VkIGV4Y2x1c2l2ZWx5IHVzaW5nIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBwcm9ncmFtcworKGUuZy4sIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdhczwvc3Bhbj48L3NhbXA+LCBhbmQvb3IgdGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiksIHRoZW4gaXQKK21heSBiZSBPSyB0byBzZW5kIHRoZSBzb3VyY2UgZmlsZXMgcmF0aGVyIHRoYW4gdGhlIG9iamVjdCBmaWxlcy4gIEluCit0aGlzIGNhc2UsIGJlIHN1cmUgdG8gc2F5IGV4YWN0bHkgd2hhdCB2ZXJzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiwgb3IKK3doYXRldmVyLCB3YXMgdXNlZCB0byBwcm9kdWNlIHRoZSBvYmplY3QgZmlsZXMuICBBbHNvIHNheSBob3cKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiwgb3Igd2hhdGV2ZXIsIHdhcyBjb25maWd1cmVkLgorCisgICAgIDxsaT5BIGRlc2NyaXB0aW9uIG9mIHdoYXQgYmVoYXZpb3IgeW91IG9ic2VydmUgdGhhdCB5b3UgYmVsaWV2ZSBpcworaW5jb3JyZWN0LiAgRm9yIGV4YW1wbGUsICZsZHF1bztJdCBnZXRzIGEgZmF0YWwgc2lnbmFsLiZyZHF1bzsKKworICAgICA8cD5PZiBjb3Vyc2UsIGlmIHRoZSBidWcgaXMgdGhhdCB0aGUgdXRpbGl0eSBnZXRzIGEgZmF0YWwgc2lnbmFsLCB0aGVuIHdlCit3aWxsIGNlcnRhaW5seSBub3RpY2UgaXQuICBCdXQgaWYgdGhlIGJ1ZyBpcyBpbmNvcnJlY3Qgb3V0cHV0LCB3ZSBtaWdodAorbm90IG5vdGljZSB1bmxlc3MgaXQgaXMgZ2xhcmluZ2x5IHdyb25nLiAgWW91IG1pZ2h0IGFzIHdlbGwgbm90IGdpdmUgdXMKK2EgY2hhbmNlIHRvIG1ha2UgYSBtaXN0YWtlLgorCisgICAgIDxwPkV2ZW4gaWYgdGhlIHByb2JsZW0geW91IGV4cGVyaWVuY2UgaXMgYSBmYXRhbCBzaWduYWwsIHlvdSBzaG91bGQgc3RpbGwKK3NheSBzbyBleHBsaWNpdGx5LiAgU3VwcG9zZSBzb21ldGhpbmcgc3RyYW5nZSBpcyBnb2luZyBvbiwgc3VjaCBhcyB5b3VyCitjb3B5IG9mIHRoZSB1dGlsaXR5IGlzIG91dCBvZiBzeW5jLCBvciB5b3UgaGF2ZSBlbmNvdW50ZXJlZCBhIGJ1ZyBpbgordGhlIEMgbGlicmFyeSBvbiB5b3VyIHN5c3RlbS4gIChUaGlzIGhhcyBoYXBwZW5lZCEpICBZb3VyIGNvcHkgbWlnaHQKK2NyYXNoIGFuZCBvdXJzIHdvdWxkIG5vdC4gIElmIHlvdSB0b2xkIHVzIHRvIGV4cGVjdCBhIGNyYXNoLCB0aGVuIHdoZW4KK291cnMgZmFpbHMgdG8gY3Jhc2gsIHdlIHdvdWxkIGtub3cgdGhhdCB0aGUgYnVnIHdhcyBub3QgaGFwcGVuaW5nIGZvcgordXMuICBJZiB5b3UgaGFkIG5vdCB0b2xkIHVzIHRvIGV4cGVjdCBhIGNyYXNoLCB0aGVuIHdlIHdvdWxkIG5vdCBiZSBhYmxlCit0byBkcmF3IGFueSBjb25jbHVzaW9uIGZyb20gb3VyIG9ic2VydmF0aW9ucy4KKworICAgICA8bGk+SWYgeW91IHdpc2ggdG8gc3VnZ2VzdCBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UsIHNlbmQgdXMgY29udGV4dCBkaWZmcywgYXMKK2dlbmVyYXRlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZGlmZjwvc3Bhbj48L3NhbXA+IHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi11PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1jPC9zcGFuPjwvc2FtcD4sIG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wPC9zcGFuPjwvc2FtcD4KK29wdGlvbi4gIEFsd2F5cyBzZW5kIGRpZmZzIGZyb20gdGhlIG9sZCBmaWxlIHRvIHRoZSBuZXcgZmlsZS4gIElmIHlvdQord2lzaCB0byBkaXNjdXNzIHNvbWV0aGluZyBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gc291cmNlLCByZWZlciB0byBpdCBieQorY29udGV4dCwgbm90IGJ5IGxpbmUgbnVtYmVyLgorCisgICAgIDxwPlRoZSBsaW5lIG51bWJlcnMgaW4gb3VyIGRldmVsb3BtZW50IHNvdXJjZXMgd2lsbCBub3QgbWF0Y2ggdGhvc2UgaW4geW91cgorc291cmNlcy4gIFlvdXIgbGluZSBudW1iZXJzIHdvdWxkIGNvbnZleSBubyB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdXMuIAorPC91bD4KKworICAgPHA+SGVyZSBhcmUgc29tZSB0aGluZ3MgdGhhdCBhcmUgbm90IG5lY2Vzc2FyeToKKworICAgICA8dWw+Cis8bGk+QSBkZXNjcmlwdGlvbiBvZiB0aGUgZW52ZWxvcGUgb2YgdGhlIGJ1Zy4KKworICAgICA8cD5PZnRlbiBwZW9wbGUgd2hvIGVuY291bnRlciBhIGJ1ZyBzcGVuZCBhIGxvdCBvZiB0aW1lIGludmVzdGlnYXRpbmcKK3doaWNoIGNoYW5nZXMgdG8gdGhlIGlucHV0IGZpbGUgd2lsbCBtYWtlIHRoZSBidWcgZ28gYXdheSBhbmQgd2hpY2gKK2NoYW5nZXMgd2lsbCBub3QgYWZmZWN0IGl0LgorCisgICAgIDxwPlRoaXMgaXMgb2Z0ZW4gdGltZSBjb25zdW1pbmcgYW5kIG5vdCB2ZXJ5IHVzZWZ1bCwgYmVjYXVzZSB0aGUgd2F5IHdlCit3aWxsIGZpbmQgdGhlIGJ1ZyBpcyBieSBydW5uaW5nIGEgc2luZ2xlIGV4YW1wbGUgdW5kZXIgdGhlIGRlYnVnZ2VyCit3aXRoIGJyZWFrcG9pbnRzLCBub3QgYnkgcHVyZSBkZWR1Y3Rpb24gZnJvbSBhIHNlcmllcyBvZiBleGFtcGxlcy4gCitXZSByZWNvbW1lbmQgdGhhdCB5b3Ugc2F2ZSB5b3VyIHRpbWUgZm9yIHNvbWV0aGluZyBlbHNlLgorCisgICAgIDxwPk9mIGNvdXJzZSwgaWYgeW91IGNhbiBmaW5kIGEgc2ltcGxlciBleGFtcGxlIHRvIHJlcG9ydCA8ZW0+aW5zdGVhZDwvZW0+CitvZiB0aGUgb3JpZ2luYWwgb25lLCB0aGF0IGlzIGEgY29udmVuaWVuY2UgZm9yIHVzLiAgRXJyb3JzIGluIHRoZQorb3V0cHV0IHdpbGwgYmUgZWFzaWVyIHRvIHNwb3QsIHJ1bm5pbmcgdW5kZXIgdGhlIGRlYnVnZ2VyIHdpbGwgdGFrZQorbGVzcyB0aW1lLCBhbmQgc28gb24uCisKKyAgICAgPHA+SG93ZXZlciwgc2ltcGxpZmljYXRpb24gaXMgbm90IHZpdGFsOyBpZiB5b3UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcywKK3JlcG9ydCB0aGUgYnVnIGFueXdheSBhbmQgc2VuZCB1cyB0aGUgZW50aXJlIHRlc3QgY2FzZSB5b3UgdXNlZC4KKworICAgICA8bGk+QSBwYXRjaCBmb3IgdGhlIGJ1Zy4KKworICAgICA8cD5BIHBhdGNoIGZvciB0aGUgYnVnIGRvZXMgaGVscCB1cyBpZiBpdCBpcyBhIGdvb2Qgb25lLiAgQnV0IGRvIG5vdCBvbWl0Cit0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSB0ZXN0IGNhc2UsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQKK2EgcGF0Y2ggaXMgYWxsIHdlIG5lZWQuICBXZSBtaWdodCBzZWUgcHJvYmxlbXMgd2l0aCB5b3VyIHBhdGNoIGFuZCBkZWNpZGUKK3RvIGZpeCB0aGUgcHJvYmxlbSBhbm90aGVyIHdheSwgb3Igd2UgbWlnaHQgbm90IHVuZGVyc3RhbmQgaXQgYXQgYWxsLgorCisgICAgIDxwPlNvbWV0aW1lcyB3aXRoIHByb2dyYW1zIGFzIGNvbXBsaWNhdGVkIGFzIHRoZSBiaW5hcnkgdXRpbGl0aWVzIGl0IGlzCit2ZXJ5IGhhcmQgdG8gY29uc3RydWN0IGFuIGV4YW1wbGUgdGhhdCB3aWxsIG1ha2UgdGhlIHByb2dyYW0gZm9sbG93IGEKK2NlcnRhaW4gcGF0aCB0aHJvdWdoIHRoZSBjb2RlLiAgSWYgeW91IGRvIG5vdCBzZW5kIHVzIHRoZSBleGFtcGxlLCB3ZQord2lsbCBub3QgYmUgYWJsZSB0byBjb25zdHJ1Y3Qgb25lLCBzbyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIHZlcmlmeSB0aGF0Cit0aGUgYnVnIGlzIGZpeGVkLgorCisgICAgIDxwPkFuZCBpZiB3ZSBjYW5ub3QgdW5kZXJzdGFuZCB3aGF0IGJ1ZyB5b3UgYXJlIHRyeWluZyB0byBmaXgsIG9yIHdoeSB5b3VyCitwYXRjaCBzaG91bGQgYmUgYW4gaW1wcm92ZW1lbnQsIHdlIHdpbGwgbm90IGluc3RhbGwgaXQuICBBIHRlc3QgY2FzZSB3aWxsCitoZWxwIHVzIHRvIHVuZGVyc3RhbmQuCisKKyAgICAgPGxpPkEgZ3Vlc3MgYWJvdXQgd2hhdCB0aGUgYnVnIGlzIG9yIHdoYXQgaXQgZGVwZW5kcyBvbi4KKworICAgICA8cD5TdWNoIGd1ZXNzZXMgYXJlIHVzdWFsbHkgd3JvbmcuICBFdmVuIHdlIGNhbm5vdCBndWVzcyByaWdodCBhYm91dCBzdWNoCit0aGluZ3Mgd2l0aG91dCBmaXJzdCB1c2luZyB0aGUgZGVidWdnZXIgdG8gZmluZCB0aGUgZmFjdHMuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvQ29tbW9uLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0NvbW1vbi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2NTRkMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0NvbW1vbi1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29tbW9uIE9wdGlvbnMgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZWxmZWRpdC5odG1sI2VsZmVkaXQiIHRpdGxlPSJlbGZlZGl0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU2VsZWN0aW5nLXRoZS1UYXJnZXQtU3lzdGVtLmh0bWwjU2VsZWN0aW5nLXRoZS1UYXJnZXQtU3lzdGVtIiB0aXRsZT0iU2VsZWN0aW5nIHRoZSBUYXJnZXQgU3lzdGVtIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb21tb24tT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0uaHRtbCNTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0iPlNlbGVjdGluZyB0aGUgVGFyZ2V0IFN5c3RlbTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImVsZmVkaXQuaHRtbCNlbGZlZGl0Ij5lbGZlZGl0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjE3IENvbW1vbiBPcHRpb25zPC9oMj4KKworPHA+VGhlIGZvbGxvd2luZyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBvZiB0aGUKK3Byb2dyYW1zIGRlc2NyaWJlZCBpbiB0aGlzIG1hbnVhbC4KKworPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKyAgICAgPGRsPgorPCEtLSBUaGlzIGZpbGUgaXMgZGVzaWduZWQgdG8gYmUgaW5jbHVkZWQgaW4gbWFudWFscyB0aGF0IHVzZSAtLT4KKzwhLS0gZXhwYW5kYXJndi4gLS0+CisKKyAgICAgPGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkA8L3NwYW4+PHZhcj5maWxlPC92YXI+PC9zYW1wPjxkZD5SZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gPHZhcj5maWxlPC92YXI+LiAgVGhlIG9wdGlvbnMgcmVhZCBhcmUKK2luc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBAPHZhcj5maWxlPC92YXI+IG9wdGlvbi4gIElmIDx2YXI+ZmlsZTwvdmFyPgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKworICAgICA8cD5PcHRpb25zIGluIDx2YXI+ZmlsZTwvdmFyPiBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBBIHdoaXRlc3BhY2UKK2NoYXJhY3RlciBtYXkgYmUgaW5jbHVkZWQgaW4gYW4gb3B0aW9uIGJ5IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUKK29wdGlvbiBpbiBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMuICBBbnkgY2hhcmFjdGVyIChpbmNsdWRpbmcgYQorYmFja3NsYXNoKSBtYXkgYmUgaW5jbHVkZWQgYnkgcHJlZml4aW5nIHRoZSBjaGFyYWN0ZXIgdG8gYmUgaW5jbHVkZWQKK3dpdGggYSBiYWNrc2xhc2guICBUaGUgPHZhcj5maWxlPC92YXI+IG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAPHZhcj5maWxlPC92YXI+IG9wdGlvbnM7IGFueSBzdWNoIG9wdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgcmVjdXJzaXZlbHkuIAorPCEtLSBtYW4gZW5kIC0tPgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBwcm9ncmFtLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIHByb2dyYW0uCisKKyAgICAgPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKyAgIDwvZGw+CisgICA8IS0tIG1hbiBlbmQgLS0+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjYzUxMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sCkBAIC0wLDAgKzEsNTE3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyIgdGl0bGU9IlJlcG9ydGluZyBCdWdzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQmludXRpbHMtSW5kZXguaHRtbCNCaW51dGlscy1JbmRleCIgdGl0bGU9IkJpbnV0aWxzIEluZGV4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQmludXRpbHMtSW5kZXguaHRtbCNCaW51dGlscy1JbmRleCI+QmludXRpbHMgSW5kZXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJhcHBlbmRpeCI+QXBwZW5kaXggQSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2gyPgorCis8IS0tIFRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UuIC0tPgorPGRpdiBhbGlnbj0iY2VudGVyIj5WZXJzaW9uIDEuMywgMyBOb3ZlbWJlciAyMDA4PC9kaXY+CisKKzwhLS0gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIHdpdGhpbiBhbm90aGVyIGRvY3VtZW50LCAtLT4KKzwhLS0gaGVuY2Ugbm8gc2VjdGlvbmluZyBjb21tYW5kIG9yIEBub2RlLiAtLT4KKzxwcmUgY2xhc3M9ImRpc3BsYXkiPiAgICAgQ29weXJpZ2h0ICZjb3B5OyAyMDAwLCAyMDAxLCAyMDAyLCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA8YSBocmVmPSJodHRwOi8vZnNmLm9yZy8iPmh0dHA6Ly9mc2Yub3JnLzwvYT4KKyAgICAgCisgICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICAgICBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKzwvcHJlPgorICAgICA8b2wgdHlwZT0xIHN0YXJ0PTA+Cis8bGk+UFJFQU1CTEUKKworICAgICA8cD5UaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgPGRmbj5mcmVlPC9kZm4+IGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4gCitTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5Cit0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZQorZm9yIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuCisKKyAgICAgPHA+VGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAmbGRxdW87Y29weWxlZnQmcmRxdW87LCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKKyAgICAgPHA+V2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKyAgICAgPGxpPkFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKKyAgICAgPHA+VGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgJmxkcXVvO0RvY3VtZW50JnJkcXVvOywgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgJmxkcXVvO3lvdSZyZHF1bzsuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKKyAgICAgPHA+QSAmbGRxdW87TW9kaWZpZWQgVmVyc2lvbiZyZHF1bzsgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCisgICAgIDxwPkEgJmxkcXVvO1NlY29uZGFyeSBTZWN0aW9uJnJkcXVvOyBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24KK29mIHRoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbAorc3ViamVjdCAob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwKK2RpcmVjdGx5IHdpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4KK3BhcnQgYSB0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4KK2FueSBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKKyAgICAgPHA+VGhlICZsZHF1bztJbnZhcmlhbnQgU2VjdGlvbnMmcmRxdW87IGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKKyAgICAgPHA+VGhlICZsZHF1bztDb3ZlciBUZXh0cyZyZHF1bzsgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQSBGcm9udC1Db3ZlciBUZXh0IG1heQorYmUgYXQgbW9zdCA1IHdvcmRzLCBhbmQgYSBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgMjUgd29yZHMuCisKKyAgICAgPHA+QSAmbGRxdW87VHJhbnNwYXJlbnQmcmRxdW87IGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LiAKK0FuIGltYWdlIGZvcm1hdCBpcyBub3QgVHJhbnNwYXJlbnQgaWYgdXNlZCBmb3IgYW55IHN1YnN0YW50aWFsIGFtb3VudAorb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdCAmbGRxdW87VHJhbnNwYXJlbnQmcmRxdW87IGlzIGNhbGxlZCAmbGRxdW87T3BhcXVlJnJkcXVvOy4KKworICAgICA8cD5FeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorPHNwYW4gY2xhc3M9InNjIj5hc2NpaTwvc3Bhbj4gd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dAorZm9ybWF0LCA8YWNyb255bT5TR01MPC9hY3JvbnltPiBvciA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlCis8YWNyb255bT5EVEQ8L2Fjcm9ueW0+LCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4sCitQb3N0U2NyaXB0IG9yIDxhY3JvbnltPlBERjwvYWNyb255bT4gZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzCitvZiB0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgPGFjcm9ueW0+UE5HPC9hY3JvbnltPiwgPGFjcm9ueW0+WENGPC9hY3JvbnltPiBhbmQKKzxhY3JvbnltPkpQRzwvYWNyb255bT4uICBPcGFxdWUgZm9ybWF0cyBpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUKK3JlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5IHByb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgPGFjcm9ueW0+U0dNTDwvYWNyb255bT4gb3IKKzxhY3JvbnltPlhNTDwvYWNyb255bT4gZm9yIHdoaWNoIHRoZSA8YWNyb255bT5EVEQ8L2Fjcm9ueW0+IGFuZC9vciBwcm9jZXNzaW5nIHRvb2xzIGFyZQorbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUgbWFjaGluZS1nZW5lcmF0ZWQgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4sCitQb3N0U2NyaXB0IG9yIDxhY3JvbnltPlBERjwvYWNyb255bT4gcHJvZHVjZWQgYnkgc29tZSB3b3JkIHByb2Nlc3NvcnMgZm9yCitvdXRwdXQgcHVycG9zZXMgb25seS4KKworICAgICA8cD5UaGUgJmxkcXVvO1RpdGxlIFBhZ2UmcmRxdW87IG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgJmxkcXVvO1RpdGxlIFBhZ2UmcmRxdW87IG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworICAgICA8cD5UaGUgJmxkcXVvO3B1Ymxpc2hlciZyZHF1bzsgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyBjb3BpZXMKK29mIHRoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLgorCisgICAgIDxwPkEgc2VjdGlvbiAmbGRxdW87RW50aXRsZWQgWFlaJnJkcXVvOyBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgJmxkcXVvO0Fja25vd2xlZGdlbWVudHMmcmRxdW87LAorJmxkcXVvO0RlZGljYXRpb25zJnJkcXVvOywgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzssIG9yICZsZHF1bztIaXN0b3J5JnJkcXVvOy4pICBUbyAmbGRxdW87UHJlc2VydmUgdGhlIFRpdGxlJnJkcXVvOworb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAmbGRxdW87RW50aXRsZWQgWFlaJnJkcXVvOyBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCisgICAgIDxwPlRoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgIDxsaT5WRVJCQVRJTSBDT1BZSU5HCisKKyAgICAgPHA+WW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCisgICAgIDxwPllvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZAoreW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKworICAgICA8bGk+Q09QWUlORyBJTiBRVUFOVElUWQorCisgICAgIDxwPklmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIChvciBjb3BpZXMgaW4gbWVkaWEgdGhhdCBjb21tb25seSBoYXZlCitwcmludGVkIGNvdmVycykgb2YgdGhlIERvY3VtZW50LCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kIHRoZQorRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUKK2NvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsIHRoZXNlIENvdmVyCitUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbgordGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseSBhbmQgbGVnaWJseSBpZGVudGlmeQoreW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudAordGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZAordmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uIAorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKKyAgICAgPHA+SWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAorbGVnaWJseSwgeW91IHNob3VsZCBwdXQgdGhlIGZpcnN0IG9uZXMgbGlzdGVkIChhcyBtYW55IGFzIGZpdAorcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8gYWRqYWNlbnQKK3BhZ2VzLgorCisgICAgIDxwPklmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4gCitJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywKK3doZW4geW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUKK3RoYXQgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkCitsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuCitPcGFxdWUgY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQKK2VkaXRpb24gdG8gdGhlIHB1YmxpYy4KKworICAgICA8cD5JdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8gZ2l2ZQordGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisKKyAgICAgPGxpPk1PRElGSUNBVElPTlMKKworICAgICA8cD5Zb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworICAgICAgICAgIDxvbCB0eXBlPUEgc3RhcnQ9MT4KKzxsaT5Vc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKK2Zyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KK29mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KK2lmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCisKKyAgICAgICAgICA8bGk+TGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCitWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAordW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorCisgICAgICAgICAgPGxpPlN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCitNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorCisgICAgICAgICAgPGxpPkFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKK2FkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KKworICAgICAgICAgIDxsaT5JbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKK2dpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKK2FuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZS4KKworICAgICAgICAgIDxsaT5JbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87SGlzdG9yeSZyZHF1bzssIFByZXNlcnZlIGl0cyBUaXRsZSwgYW5kIGFkZAordG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKK3RoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87IGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCitnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKK3B1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCit0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgJmxkcXVvO0hpc3RvcnkmcmRxdW87IHNlY3Rpb24uIAorWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCitwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCisKKyAgICAgICAgICA8bGk+Rm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOyBvciAmbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LCBQcmVzZXJ2ZQordGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsIHRoZQorc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMgYW5kL29yCitkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKK3VuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKK29yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KKworICAgICAgICAgIDxsaT5EZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzsuICBTdWNoIGEgc2VjdGlvbgorbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KKworICAgICAgICAgIDxsaT5EbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCAmbGRxdW87RW5kb3JzZW1lbnRzJnJkcXVvOyBvcgordG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorICAgICAgICAgIDwvb2w+CisKKyAgICAgPHA+SWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24ncyBsaWNlbnNlIG5vdGljZS4gCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworICAgICA8cD5Zb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzssIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMmbWRhc2g7Zm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKKyAgICAgPHA+WW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKKyAgICAgPHA+VGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKyAgICAgPGxpPkNPTUJJTklORyBET0NVTUVOVFMKKworICAgICA8cD5Zb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKKyAgICAgPHA+VGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLiAKK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKKyAgICAgPHA+SW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87SGlzdG9yeSZyZHF1bzsKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorJmxkcXVvO0hpc3RvcnkmcmRxdW87OyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzssCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzsuICBZb3UgbXVzdCBkZWxldGUgYWxsCitzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87RW5kb3JzZW1lbnRzLiZyZHF1bzsKKworICAgICA8bGk+Q09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKKyAgICAgPHA+WW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzCityZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGlzCitMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbgordGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgordmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgorCisgICAgIDxwPllvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQgZGlzdHJpYnV0ZQoraXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydCBhIGNvcHkgb2YgdGhpcworTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbAorb3RoZXIgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdCBkb2N1bWVudC4KKworICAgICA8bGk+QUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCisgICAgIDxwPkEgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlCithbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiAmbGRxdW87YWdncmVnYXRlJnJkcXVvOyBpZiB0aGUgY29weXJpZ2h0CityZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlIGxlZ2FsIHJpZ2h0cworb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAKK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCisgICAgIDxwPklmIHRoZSBDb3ZlciBUZXh0IHJlcXVpcmVtZW50IG9mIHNlY3Rpb24gMyBpcyBhcHBsaWNhYmxlIHRvIHRoZXNlCitjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YKK3RoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uCitjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSBEb2N1bWVudCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZSwgb3IgdGhlCitlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uIAorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisgICAgIDxsaT5UUkFOU0xBVElPTgorCisgICAgIDxwPlRyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuIAorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworICAgICA8cD5JZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOywKKyZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzssIG9yICZsZHF1bztIaXN0b3J5JnJkcXVvOywgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworICAgICA8bGk+VEVSTUlOQVRJT04KKworICAgICA8cD5Zb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50CitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIGl0IGlzIHZvaWQsIGFuZAord2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgICAgPHA+SG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgbGljZW5zZQorZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LAordW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5Cit0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIKK2ZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8KKzYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICAgICA8cD5Nb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICAgICA8cD5UZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCByZWNlaXB0IG9mIGEgY29weSBvZiBzb21lIG9yIGFsbCBvZiB0aGUgc2FtZSBtYXRlcmlhbCBkb2VzCitub3QgZ2l2ZSB5b3UgYW55IHJpZ2h0cyB0byB1c2UgaXQuCisKKyAgICAgPGxpPkZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKKyAgICAgPHA+VGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMKK29mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldwordmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgU2VlCis8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvIj5odHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvPC9hPi4KKworICAgICA8cD5FYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAmbGRxdW87b3IgYW55IGxhdGVyIHZlcnNpb24mcmRxdW87IGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQKK3NwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcworTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhCit2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZQorRG9jdW1lbnQuCisKKyAgICAgPGxpPlJFTElDRU5TSU5HCisKKyAgICAgPHA+JmxkcXVvO01hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiBTaXRlJnJkcXVvOyAob3IgJmxkcXVvO01NQyBTaXRlJnJkcXVvOykgbWVhbnMgYW55CitXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIgdGhhdCBwdWJsaXNoZXMgY29weXJpZ2h0YWJsZSB3b3JrcyBhbmQgYWxzbworcHJvdmlkZXMgcHJvbWluZW50IGZhY2lsaXRpZXMgZm9yIGFueWJvZHkgdG8gZWRpdCB0aG9zZSB3b3Jrcy4gIEEKK3B1YmxpYyB3aWtpIHRoYXQgYW55Ym9keSBjYW4gZWRpdCBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBzZXJ2ZXIuICBBCismbGRxdW87TWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uJnJkcXVvOyAob3IgJmxkcXVvO01NQyZyZHF1bzspIGNvbnRhaW5lZCBpbiB0aGUKK3NpdGUgbWVhbnMgYW55IHNldCBvZiBjb3B5cmlnaHRhYmxlIHdvcmtzIHRodXMgcHVibGlzaGVkIG9uIHRoZSBNTUMKK3NpdGUuCisKKyAgICAgPHA+JmxkcXVvO0NDLUJZLVNBJnJkcXVvOyBtZWFucyB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAKK2xpY2Vuc2UgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMgQ29ycG9yYXRpb24sIGEgbm90LWZvci1wcm9maXQKK2NvcnBvcmF0aW9uIHdpdGggYSBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgaW4gU2FuIEZyYW5jaXNjbywKK0NhbGlmb3JuaWEsIGFzIHdlbGwgYXMgZnV0dXJlIGNvcHlsZWZ0IHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZQorcHVibGlzaGVkIGJ5IHRoYXQgc2FtZSBvcmdhbml6YXRpb24uCisKKyAgICAgPHA+JmxkcXVvO0luY29ycG9yYXRlJnJkcXVvOyBtZWFucyB0byBwdWJsaXNoIG9yIHJlcHVibGlzaCBhIERvY3VtZW50LCBpbiB3aG9sZSBvcgoraW4gcGFydCwgYXMgcGFydCBvZiBhbm90aGVyIERvY3VtZW50LgorCisgICAgIDxwPkFuIE1NQyBpcyAmbGRxdW87ZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nJnJkcXVvOyBpZiBpdCBpcyBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCBhbmQgaWYgYWxsIHdvcmtzIHRoYXQgd2VyZSBmaXJzdCBwdWJsaXNoZWQgdW5kZXIgdGhpcyBMaWNlbnNlCitzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUKK29yIGluIHBhcnQgaW50byB0aGUgTU1DLCAoMSkgaGFkIG5vIGNvdmVyIHRleHRzIG9yIGludmFyaWFudCBzZWN0aW9ucywKK2FuZCAoMikgd2VyZSB0aHVzIGluY29ycG9yYXRlZCBwcmlvciB0byBOb3ZlbWJlciAxLCAyMDA4LgorCisgICAgIDxwPlRoZSBvcGVyYXRvciBvZiBhbiBNTUMgU2l0ZSBtYXkgcmVwdWJsaXNoIGFuIE1NQyBjb250YWluZWQgaW4gdGhlIHNpdGUKK3VuZGVyIENDLUJZLVNBIG9uIHRoZSBzYW1lIHNpdGUgYXQgYW55IHRpbWUgYmVmb3JlIEF1Z3VzdCAxLCAyMDA5LAorcHJvdmlkZWQgdGhlIE1NQyBpcyBlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmcuCisKKyAgICAgICAgPC9vbD4KKworPGgzIGNsYXNzPSJoZWFkaW5nIj5BRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzPC9oMz4KKworPHA+VG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBDb3B5cmlnaHQgKEMpICA8dmFyPnllYXI8L3Zhcj4gIDx2YXI+eW91ciBuYW1lPC92YXI+LgorICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworICAgICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIKKyAgICAgICBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVQorICAgICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCis8L3ByZT4KKyAgIDxwPklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAmbGRxdW87d2l0aDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD5UZXh0cy4mcmRxdW87IGxpbmUgd2l0aCB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyA8dmFyPmxpc3QgdGhlaXIgdGl0bGVzPC92YXI+LCB3aXRoCisgICAgICAgICB0aGUgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgPHZhcj5saXN0PC92YXI+LCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cworICAgICAgICAgYmVpbmcgPHZhcj5saXN0PC92YXI+LgorPC9wcmU+CisgICA8cD5JZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKKyAgIDxwPklmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCis8IS0tIExvY2FsIFZhcmlhYmxlczogLS0+Cis8IS0tIGlzcGVsbC1sb2NhbC1wZGljdDogImlzcGVsbC1kaWN0IiAtLT4KKzwhLS0gRW5kOiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL1JlcG9ydGluZy1CdWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9SZXBvcnRpbmctQnVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZGY2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9SZXBvcnRpbmctQnVncy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJlcG9ydGluZyBCdWdzIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNlbGVjdGluZy10aGUtVGFyZ2V0LVN5c3RlbS5odG1sI1NlbGVjdGluZy10aGUtVGFyZ2V0LVN5c3RlbSIgdGl0bGU9IlNlbGVjdGluZyB0aGUgVGFyZ2V0IFN5c3RlbSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgdGl0bGU9IkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUmVwb3J0aW5nLUJ1Z3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0uaHRtbCNTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0iPlNlbGVjdGluZyB0aGUgVGFyZ2V0IFN5c3RlbTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xOSBSZXBvcnRpbmcgQnVnczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWJ1Z3MtMTY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVwb3J0aW5nLWJ1Z3MtMTY2Ij48L2E+CitZb3VyIGJ1ZyByZXBvcnRzIHBsYXkgYW4gZXNzZW50aWFsIHJvbGUgaW4gbWFraW5nIHRoZSBiaW5hcnkgdXRpbGl0aWVzCityZWxpYWJsZS4KKworICAgPHA+UmVwb3J0aW5nIGEgYnVnIG1heSBoZWxwIHlvdSBieSBicmluZ2luZyBhIHNvbHV0aW9uIHRvIHlvdXIgcHJvYmxlbSwgb3IKK2l0IG1heSBub3QuICBCdXQgaW4gYW55IGNhc2UgdGhlIHByaW5jaXBhbCBmdW5jdGlvbiBvZiBhIGJ1ZyByZXBvcnQgaXMKK3RvIGhlbHAgdGhlIGVudGlyZSBjb21tdW5pdHkgYnkgbWFraW5nIHRoZSBuZXh0IHZlcnNpb24gb2YgdGhlIGJpbmFyeQordXRpbGl0aWVzIHdvcmsgYmV0dGVyLiAgQnVnIHJlcG9ydHMgYXJlIHlvdXIgY29udHJpYnV0aW9uIHRvIHRoZWlyCittYWludGVuYW5jZS4KKworICAgPHA+SW4gb3JkZXIgZm9yIGEgYnVnIHJlcG9ydCB0byBzZXJ2ZSBpdHMgcHVycG9zZSwgeW91IG11c3QgaW5jbHVkZSB0aGUKK2luZm9ybWF0aW9uIHRoYXQgZW5hYmxlcyB1cyB0byBmaXggdGhlIGJ1Zy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI0J1Zy1Dcml0ZXJpYSI+QnVnIENyaXRlcmlhPC9hPjogICAgICAgICAgICAgICAgIEhhdmUgeW91IGZvdW5kIGEgYnVnPyAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIj5CdWcgUmVwb3J0aW5nPC9hPjogICAgICAgICAgICAgICAgSG93IHRvIHJlcG9ydCBidWdzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9TZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL1NlbGVjdGluZy10aGUtVGFyZ2V0LVN5c3RlbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTU5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9TZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0uaHRtbApAQCAtMCwwICsxLDc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TZWxlY3RpbmcgdGhlIFRhcmdldCBTeXN0ZW0gLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29tbW9uLU9wdGlvbnMuaHRtbCNDb21tb24tT3B0aW9ucyIgdGl0bGU9IkNvbW1vbiBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyIgdGl0bGU9IlJlcG9ydGluZyBCdWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyI+UmVwb3J0aW5nIEJ1Z3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb21tb24tT3B0aW9ucy5odG1sI0NvbW1vbi1PcHRpb25zIj5Db21tb24gT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xOCBTZWxlY3RpbmcgdGhlIFRhcmdldCBTeXN0ZW08L2gyPgorCis8cD5Zb3UgY2FuIHNwZWNpZnkgdHdvIGFzcGVjdHMgb2YgdGhlIHRhcmdldCBzeXN0ZW0gdG8gdGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPgorYmluYXJ5IGZpbGUgdXRpbGl0aWVzLCBlYWNoIGluIHNldmVyYWwgd2F5czoKKworICAgICA8dWw+Cis8bGk+dGhlIHRhcmdldAorCisgICAgIDxsaT50aGUgYXJjaGl0ZWN0dXJlCis8L3VsPgorCisgICA8cD5JbiB0aGUgZm9sbG93aW5nIHN1bW1hcmllcywgdGhlIGxpc3RzIG9mIHdheXMgdG8gc3BlY2lmeSB2YWx1ZXMgYXJlIGluCitvcmRlciBvZiBkZWNyZWFzaW5nIHByZWNlZGVuY2UuICBUaGUgd2F5cyBsaXN0ZWQgZmlyc3Qgb3ZlcnJpZGUgdGhvc2UKK2xpc3RlZCBsYXRlci4KKworICAgPHA+VGhlIGNvbW1hbmRzIHRvIGxpc3QgdmFsaWQgdmFsdWVzIG9ubHkgbGlzdCB0aGUgdmFsdWVzIGZvciB3aGljaCB0aGUKK3Byb2dyYW1zIHlvdSBhcmUgcnVubmluZyB3ZXJlIGNvbmZpZ3VyZWQuICBJZiB0aGV5IHdlcmUgY29uZmlndXJlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS10YXJnZXRzPWFsbDwvc3Bhbj48L3NhbXA+LCB0aGUgY29tbWFuZHMgbGlzdCBtb3N0IG9mIHRoZSBhdmFpbGFibGUKK3ZhbHVlcywgYnV0IGEgZmV3IGFyZSBsZWZ0IG91dDsgbm90IGFsbCB0YXJnZXRzIGNhbiBiZSBjb25maWd1cmVkIGluIGF0CitvbmNlIGJlY2F1c2Ugc29tZSBvZiB0aGVtIGNhbiBvbmx5IGJlIGNvbmZpZ3VyZWQgPGRmbj5uYXRpdmU8L2Rmbj4gKG9uIGhvc3RzCit3aXRoIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHRhcmdldCBzeXN0ZW0pLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iVGFyZ2V0LVNlbGVjdGlvbi5odG1sI1RhcmdldC1TZWxlY3Rpb24iPlRhcmdldCBTZWxlY3Rpb248L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBcmNoaXRlY3R1cmUtU2VsZWN0aW9uLmh0bWwjQXJjaGl0ZWN0dXJlLVNlbGVjdGlvbiI+QXJjaGl0ZWN0dXJlIFNlbGVjdGlvbjwvYT4KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL1RhcmdldC1TZWxlY3Rpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL1RhcmdldC1TZWxlY3Rpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWZlYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvVGFyZ2V0LVNlbGVjdGlvbi5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UYXJnZXQgU2VsZWN0aW9uIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0uaHRtbCNTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0iIHRpdGxlPSJTZWxlY3RpbmcgdGhlIFRhcmdldCBTeXN0ZW0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBcmNoaXRlY3R1cmUtU2VsZWN0aW9uLmh0bWwjQXJjaGl0ZWN0dXJlLVNlbGVjdGlvbiIgdGl0bGU9IkFyY2hpdGVjdHVyZSBTZWxlY3Rpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRhcmdldC1TZWxlY3Rpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXJjaGl0ZWN0dXJlLVNlbGVjdGlvbi5odG1sI0FyY2hpdGVjdHVyZS1TZWxlY3Rpb24iPkFyY2hpdGVjdHVyZSBTZWxlY3Rpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0uaHRtbCNTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0iPlNlbGVjdGluZyB0aGUgVGFyZ2V0IFN5c3RlbTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjE4LjEgVGFyZ2V0IFNlbGVjdGlvbjwvaDM+CisKKzxwPkEgPGRmbj50YXJnZXQ8L2Rmbj4gaXMgYW4gb2JqZWN0IGZpbGUgZm9ybWF0LiAgQSBnaXZlbiB0YXJnZXQgbWF5IGJlCitzdXBwb3J0ZWQgZm9yIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKHNlZSA8YSBocmVmPSJBcmNoaXRlY3R1cmUtU2VsZWN0aW9uLmh0bWwjQXJjaGl0ZWN0dXJlLVNlbGVjdGlvbiI+QXJjaGl0ZWN0dXJlIFNlbGVjdGlvbjwvYT4pLiAKK0EgdGFyZ2V0IHNlbGVjdGlvbiBtYXkgYWxzbyBoYXZlIHZhcmlhdGlvbnMgZm9yIGRpZmZlcmVudCBvcGVyYXRpbmcKK3N5c3RlbXMgb3IgYXJjaGl0ZWN0dXJlcy4KKworICAgPHA+VGhlIGNvbW1hbmQgdG8gbGlzdCB2YWxpZCB0YXJnZXQgdmFsdWVzIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b2JqZHVtcCAtaTwvc3Bhbj48L3NhbXA+JnJzcXVvOworKHRoZSBmaXJzdCBjb2x1bW4gb2Ygb3V0cHV0IGNvbnRhaW5zIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbikuCisKKyAgIDxwPlNvbWUgc2FtcGxlIHZhbHVlcyBhcmU6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YS5vdXQtaHAzMDBic2Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZWNvZmYtbGl0dGxlbWlwczwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YS5vdXQtc3Vub3MtYmlnPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5Zb3UgY2FuIGFsc28gc3BlY2lmeSBhIHRhcmdldCB1c2luZyBhIGNvbmZpZ3VyYXRpb24gdHJpcGxldC4gIFRoaXMgaXMKK3RoZSBzYW1lIHNvcnQgb2YgbmFtZSB0aGF0IGlzIHBhc3NlZCB0byA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlndXJlPC9zcGFuPjwvc2FtcD4gdG8gc3BlY2lmeSBhCit0YXJnZXQuICBXaGVuIHlvdSB1c2UgYSBjb25maWd1cmF0aW9uIHRyaXBsZXQgYXMgYW4gYXJndW1lbnQsIGl0IG11c3QgYmUKK2Z1bGx5IGNhbm9uaWNhbGl6ZWQuICBZb3UgY2FuIHNlZSB0aGUgY2Fub25pY2FsIHZlcnNpb24gb2YgYSB0cmlwbGV0IGJ5CitydW5uaW5nIHRoZSBzaGVsbCBzY3JpcHQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy5zdWI8L3NwYW4+PC9zYW1wPiB3aGljaCBpcyBpbmNsdWRlZCB3aXRoIHRoZQorc291cmNlcy4KKworICAgPHA+U29tZSBzYW1wbGUgY29uZmlndXJhdGlvbiB0cmlwbGV0cyBhcmU6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bTY4ay1ocC1ic2Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1pcHMtZGVjLXVsdHJpeDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zcGFyYy1zdW4tc3Vub3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKzxoNCBjbGFzcz0ic3ViaGVhZGluZyI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamR1bXA8L3NwYW4+PC9zYW1wPiBUYXJnZXQ8L2g0PgorCis8cD5XYXlzIHRvIHNwZWNpZnk6CisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPmNvbW1hbmQgbGluZSBvcHRpb246IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1iPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS10YXJnZXQ8L3NwYW4+PC9zYW1wPgorCisgICAgIDxsaT5lbnZpcm9ubWVudCB2YXJpYWJsZSA8Y29kZT5HTlVUQVJHRVQ8L2NvZGU+CisKKyAgICAgPGxpPmRlZHVjZWQgZnJvbSB0aGUgaW5wdXQgZmlsZQorICAgICAgICA8L29sPgorCis8aDQgY2xhc3M9InN1YmhlYWRpbmciPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zdHJpcDwvc3Bhbj48L3NhbXA+IElucHV0IFRhcmdldDwvaDQ+CisKKzxwPldheXMgdG8gc3BlY2lmeToKKworICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+Y29tbWFuZCBsaW5lIG9wdGlvbnM6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1pbnB1dC10YXJnZXQ8L3NwYW4+PC9zYW1wPiwgb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUY8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRhcmdldDwvc3Bhbj48L3NhbXA+CisKKyAgICAgPGxpPmVudmlyb25tZW50IHZhcmlhYmxlIDxjb2RlPkdOVVRBUkdFVDwvY29kZT4KKworICAgICA8bGk+ZGVkdWNlZCBmcm9tIHRoZSBpbnB1dCBmaWxlCisgICAgICAgIDwvb2w+CisKKzxoNCBjbGFzcz0ic3ViaGVhZGluZyI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamNvcHk8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnN0cmlwPC9zcGFuPjwvc2FtcD4gT3V0cHV0IFRhcmdldDwvaDQ+CisKKzxwPldheXMgdG8gc3BlY2lmeToKKworICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+Y29tbWFuZCBsaW5lIG9wdGlvbnM6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQtdGFyZ2V0PC9zcGFuPjwvc2FtcD4sIG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1GPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS10YXJnZXQ8L3NwYW4+PC9zYW1wPgorCisgICAgIDxsaT50aGUgaW5wdXQgdGFyZ2V0IChzZWUgJmxkcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zdHJpcDwvc3Bhbj48L3NhbXA+IElucHV0IFRhcmdldCZyZHF1bzsgYWJvdmUpCisKKyAgICAgPGxpPmVudmlyb25tZW50IHZhcmlhYmxlIDxjb2RlPkdOVVRBUkdFVDwvY29kZT4KKworICAgICA8bGk+ZGVkdWNlZCBmcm9tIHRoZSBpbnB1dCBmaWxlCisgICAgICAgIDwvb2w+CisKKzxoNCBjbGFzcz0ic3ViaGVhZGluZyI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5tPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zaXplPC9zcGFuPjwvc2FtcD4sIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+c3RyaW5nczwvc3Bhbj48L3NhbXA+IFRhcmdldDwvaDQ+CisKKzxwPldheXMgdG8gc3BlY2lmeToKKworICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+Y29tbWFuZCBsaW5lIG9wdGlvbjogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS10YXJnZXQ8L3NwYW4+PC9zYW1wPgorCisgICAgIDxsaT5lbnZpcm9ubWVudCB2YXJpYWJsZSA8Y29kZT5HTlVUQVJHRVQ8L2NvZGU+CisKKyAgICAgPGxpPmRlZHVjZWQgZnJvbSB0aGUgaW5wdXQgZmlsZQorICAgICAgICA8L29sPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9hZGRyMmxpbmUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2FkZHIybGluZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjYwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9hZGRyMmxpbmUuaHRtbApAQCAtMCwwICsxLDE1NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+YWRkcjJsaW5lIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCIgdGl0bGU9ImMrK2ZpbHQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJubG1jb252Lmh0bWwjbmxtY29udiIgdGl0bGU9Im5sbWNvbnYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImFkZHIybGluZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJubG1jb252Lmh0bWwjbmxtY29udiI+bmxtY29udjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCI+YysrZmlsdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMCBhZGRyMmxpbmU8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1hZGRyMmxpbmUtMTM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWRkcmVzcy10by1maWxlLW5hbWUtYW5kLWxpbmUtbnVtYmVyLTE0MCI+PC9hPgorPCEtLSBtYW4gdGl0bGUgYWRkcjJsaW5lIGNvbnZlcnQgYWRkcmVzc2VzIGludG8gZmlsZSBuYW1lcyBhbmQgbGluZSBudW1iZXJzLiAtLT4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDwhLS0gbWFuIGJlZ2luIFNZTk9QU0lTIGFkZHIybGluZSAtLT4KKyAgICAgYWRkcjJsaW5lIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYWRkcmVzc2VzPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWI8L3NwYW4+PC9zYW1wPiA8dmFyPmJmZG5hbWU8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS10YXJnZXQ9PC9zcGFuPjwvc2FtcD48dmFyPmJmZG5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUM8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRlbWFuZ2xlPC9zcGFuPjwvc2FtcD5bPTx2YXI+c3R5bGU8L3Zhcj5dXQorICAgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1lPC9zcGFuPjwvc2FtcD4gPHZhcj5maWxlbmFtZTwvdmFyPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWV4ZT08L3NwYW4+PC9zYW1wPjx2YXI+ZmlsZW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZ1bmN0aW9uczwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXM8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWJhc2VuYW1lPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWk8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlubGluZXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcHJldHR5LXByaW50PC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWo8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXNlY3Rpb249PC9zcGFuPjwvc2FtcD48dmFyPm5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUg8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1WPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgICBbYWRkciBhZGRyIC4uLl0KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiBhZGRyMmxpbmUgLS0+CisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YWRkcjJsaW5lPC9zcGFuPjwvc2FtcD4gdHJhbnNsYXRlcyBhZGRyZXNzZXMgaW50byBmaWxlIG5hbWVzIGFuZCBsaW5lIG51bWJlcnMuIAorR2l2ZW4gYW4gYWRkcmVzcyBpbiBhbiBleGVjdXRhYmxlIG9yIGFuIG9mZnNldCBpbiBhIHNlY3Rpb24gb2YgYSByZWxvY2F0YWJsZQorb2JqZWN0LCBpdCB1c2VzIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gZmlndXJlIG91dCB3aGljaCBmaWxlIG5hbWUgYW5kCitsaW5lIG51bWJlciBhcmUgYXNzb2NpYXRlZCB3aXRoIGl0LgorCisgICA8cD5UaGUgZXhlY3V0YWJsZSBvciByZWxvY2F0YWJsZSBvYmplY3QgdG8gdXNlIGlzIHNwZWNpZmllZCB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZTwvc3Bhbj48L3NhbXA+CitvcHRpb24uICBUaGUgZGVmYXVsdCBpcyB0aGUgZmlsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YS5vdXQ8L3NwYW4+PC9zYW1wPi4gIFRoZSBzZWN0aW9uIGluIHRoZSByZWxvY2F0YWJsZQorb2JqZWN0IHRvIHVzZSBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWo8L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hZGRyMmxpbmU8L3NwYW4+PC9zYW1wPiBoYXMgdHdvIG1vZGVzIG9mIG9wZXJhdGlvbi4KKworICAgPHA+SW4gdGhlIGZpcnN0LCBoZXhhZGVjaW1hbCBhZGRyZXNzZXMgYXJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAorYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hZGRyMmxpbmU8L3NwYW4+PC9zYW1wPiBkaXNwbGF5cyB0aGUgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlciBmb3IgZWFjaAorYWRkcmVzcy4KKworICAgPHA+SW4gdGhlIHNlY29uZCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFkZHIybGluZTwvc3Bhbj48L3NhbXA+IHJlYWRzIGhleGFkZWNpbWFsIGFkZHJlc3NlcyBmcm9tCitzdGFuZGFyZCBpbnB1dCwgYW5kIHByaW50cyB0aGUgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlciBmb3IgZWFjaAorYWRkcmVzcyBvbiBzdGFuZGFyZCBvdXRwdXQuICBJbiB0aGlzIG1vZGUsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hZGRyMmxpbmU8L3NwYW4+PC9zYW1wPiBtYXkgYmUgdXNlZAoraW4gYSBwaXBlIHRvIGNvbnZlcnQgZHluYW1pY2FsbHkgY2hvc2VuIGFkZHJlc3Nlcy4KKworICAgPHA+VGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RklMRU5BTUU6TElORU5PPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIGZpbGUgbmFtZSBhbmQKK2xpbmUgbnVtYmVyIGZvciBlYWNoIGlucHV0IGFkZHJlc3MgaXMgcHJpbnRlZCBvbiBzZXBhcmF0ZSBsaW5lcy4KKworICAgPHA+SWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHVzZWQsIHRoZW4gZWFjaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkZJTEVOQU1FOkxJTkVOTzwvc3Bhbj48L3NhbXA+JnJzcXVvOworbGluZSBpcyBwcmVjZWRlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkZVTkNUSU9OTkFNRTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUKK2Z1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3MuCisKKyAgIDxwPklmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyB1c2VkIGFuZCB0aGUgY29kZSBhdCB0aGUgZ2l2ZW4gYWRkcmVzcyBpcworcHJlc2VudCB0aGVyZSBiZWNhdXNlIG9mIGlubGluaW5nIGJ5IHRoZSBjb21waWxlciB0aGVuIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj57RlVOQ1RJT05OQU1FfSBGSUxFTkFNRTpMSU5FTk88L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5mb3JtYXRpb24gZm9yIHRoZSBpbmxpbmluZworZnVuY3Rpb24gd2lsbCBiZSBkaXNwbGF5ZWQgYWZ0ZXJ3YXJkcy4gIFRoaXMgY29udGludWVzIHJlY3Vyc2l2ZWx5Cit1bnRpbCB0aGVyZSBpcyBubyBtb3JlIGlubGluaW5nIHRvIHJlcG9ydC4KKworICAgPHA+SWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHVzZWQgdGhlbiB0aGUgb3V0cHV0IGlzIHByZWZpeGVkIGJ5IHRoZQoraW5wdXQgYWRkcmVzcy4KKworICAgPHA+SWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHVzZWQgdGhlbiB0aGUgb3V0cHV0IGZvciBlYWNoIGlucHV0CithZGRyZXNzIGlzIGRpc3BsYXllZCBvbiBvbmUsIHBvc3NpYmx5IHF1aXRlIGxvbmcsIGxpbmUuICBJZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXA8L3NwYW4+PC9zYW1wPiBpcyBub3QgdXNlZCB0aGVuIHRoZSBvdXRwdXQgaXMgYnJva2VuIHVwIGludG8gbXVsdGlwbGUKK2xpbmVzLCBiYXNlZCBvbiB0aGUgcGFyYWdyYXBocyBhYm92ZS4KKworICAgPHA+SWYgdGhlIGZpbGUgbmFtZSBvciBmdW5jdGlvbiBuYW1lIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hZGRyMmxpbmU8L3NwYW4+PC9zYW1wPiB3aWxsIHByaW50IHR3byBxdWVzdGlvbiBtYXJrcyBpbiB0aGVpciBwbGFjZS4gIElmIHRoZQorbGluZSBudW1iZXIgY2FuIG5vdCBiZSBkZXRlcm1pbmVkLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YWRkcjJsaW5lPC9zcGFuPjwvc2FtcD4gd2lsbCBwcmludCAwLgorCis8IS0tIG1hbiBlbmQgLS0+Cis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIGFkZHIybGluZSAtLT4KKyAgIDxwPlRoZSBsb25nIGFuZCBzaG9ydCBmb3JtcyBvZiBvcHRpb25zLCBzaG93biBoZXJlIGFzIGFsdGVybmF0aXZlcywgYXJlCitlcXVpdmFsZW50LgorCisgICAgIDxkbD4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tYTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYWRkcmVzc2VzPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSB0aGUgYWRkcmVzcyBiZWZvcmUgdGhlIGZ1bmN0aW9uIG5hbWUsIGZpbGUgYW5kIGxpbmUgbnVtYmVyCitpbmZvcm1hdGlvbi4gIFRoZSBhZGRyZXNzIGlzIHByaW50ZWQgd2l0aCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJlZml4IHRvIGVhc2lseQoraWRlbnRpZnkgaXQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tYiA8L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXRhcmdldD08L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1vYmplY3QtY29kZS1mb3JtYXQtMTQxIj48L2E+U3BlY2lmeSB0aGF0IHRoZSBvYmplY3QtY29kZSBmb3JtYXQgZm9yIHRoZSBvYmplY3QgZmlsZXMgaXMKKzx2YXI+YmZkbmFtZTwvdmFyPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1DPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kZW1hbmdsZVs9PC9zcGFuPjx2YXI+c3R5bGU8L3Zhcj48c3BhbiBjbGFzcz0iZW52Ij5dPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtZGVtYW5nbGluZy1pbi1vYmpkdW1wLTE0MiI+PC9hPkRlY29kZSAoPGRmbj5kZW1hbmdsZTwvZGZuPikgbG93LWxldmVsIHN5bWJvbCBuYW1lcyBpbnRvIHVzZXItbGV2ZWwgbmFtZXMuIAorQmVzaWRlcyByZW1vdmluZyBhbnkgaW5pdGlhbCB1bmRlcnNjb3JlIHByZXBlbmRlZCBieSB0aGUgc3lzdGVtLCB0aGlzCittYWtlcyBDKysgZnVuY3Rpb24gbmFtZXMgcmVhZGFibGUuICBEaWZmZXJlbnQgY29tcGlsZXJzIGhhdmUgZGlmZmVyZW50CittYW5nbGluZyBzdHlsZXMuIFRoZSBvcHRpb25hbCBkZW1hbmdsaW5nIHN0eWxlIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvCitjaG9vc2UgYW4gYXBwcm9wcmlhdGUgZGVtYW5nbGluZyBzdHlsZSBmb3IgeW91ciBjb21waWxlci4gU2VlIDxhIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCI+YysrZmlsdDwvYT4sCitmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBkZW1hbmdsaW5nLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWUgPC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZXhlPTwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkZD5TcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlIGZvciB3aGljaCBhZGRyZXNzZXMgc2hvdWxkIGJlCit0cmFuc2xhdGVkLiAgVGhlIGRlZmF1bHQgZmlsZSBpcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YS5vdXQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1mPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPjxkZD5EaXNwbGF5IGZ1bmN0aW9uIG5hbWVzIGFzIHdlbGwgYXMgZmlsZSBhbmQgbGluZSBudW1iZXIgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tczwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYmFzZW5hbWVzPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSBvbmx5IHRoZSBiYXNlIG9mIGVhY2ggZmlsZSBuYW1lLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWk8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWlubGluZXM8L3NwYW4+PC9zYW1wPjxkZD5JZiB0aGUgYWRkcmVzcyBiZWxvbmdzIHRvIGEgZnVuY3Rpb24gdGhhdCB3YXMgaW5saW5lZCwgdGhlIHNvdXJjZQoraW5mb3JtYXRpb24gZm9yIGFsbCBlbmNsb3Npbmcgc2NvcGVzIGJhY2sgdG8gdGhlIGZpcnN0IG5vbi1pbmxpbmVkCitmdW5jdGlvbiB3aWxsIGFsc28gYmUgcHJpbnRlZC4gIEZvciBleGFtcGxlLCBpZiA8Y29kZT5tYWluPC9jb2RlPiBpbmxpbmVzCis8Y29kZT5jYWxsZWUxPC9jb2RlPiB3aGljaCBpbmxpbmVzIDxjb2RlPmNhbGxlZTI8L2NvZGU+LCBhbmQgYWRkcmVzcyBpcyBmcm9tCis8Y29kZT5jYWxsZWUyPC9jb2RlPiwgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgPGNvZGU+Y2FsbGVlMTwvY29kZT4gYW5kIDxjb2RlPm1haW48L2NvZGU+Cit3aWxsIGFsc28gYmUgcHJpbnRlZC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1qPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zZWN0aW9uPC9zcGFuPjwvc2FtcD48ZGQ+UmVhZCBvZmZzZXRzIHJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBpbnN0ZWFkIG9mIGFic29sdXRlIGFkZHJlc3Nlcy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1wPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wcmV0dHktcHJpbnQ8L3NwYW4+PC9zYW1wPjxkZD5NYWtlIHRoZSBvdXRwdXQgbW9yZSBodW1hbiBmcmllbmRseTogZWFjaCBsb2NhdGlvbiBhcmUgcHJpbnRlZCBvbiBvbmUgbGluZS4gCitJZiBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWk8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQsIGxpbmVzIGZvciBhbGwgZW5jbG9zaW5nIHNjb3BlcyBhcmUKK3ByZWZpeGVkIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4oaW5saW5lZCBieSk8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC9kbD4KKworPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvYXItY21kbGluZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvYXItY21kbGluZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjI4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9hci1jbWRsaW5lLmh0bWwKQEAgLTAsMCArMSwyODIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmFyIGNtZGxpbmUgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImFyLmh0bWwjYXIiIHRpdGxlPSJhciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImFyLXNjcmlwdHMuaHRtbCNhci1zY3JpcHRzIiB0aXRsZT0iYXIgc2NyaXB0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYXItY21kbGluZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhci1zY3JpcHRzLmh0bWwjYXItc2NyaXB0cyI+YXIgc2NyaXB0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImFyLmh0bWwjYXIiPmFyPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4xIENvbnRyb2xsaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IG9uIHRoZSBDb21tYW5kIExpbmU8L2gzPgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPCEtLSBtYW4gYmVnaW4gU1lOT1BTSVMgYXIgLS0+CisgICAgIGFyIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBsdWdpbjwvc3Bhbj48L3NhbXA+IDx2YXI+bmFtZTwvdmFyPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1YMzJfNjQ8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi08L3NwYW4+PC9zYW1wPl08dmFyPnA8L3Zhcj5bPHZhcj5tb2Q8L3Zhcj4gWzx2YXI+cmVscG9zPC92YXI+XSBbPHZhcj5jb3VudDwvdmFyPl1dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRhcmdldDwvc3Bhbj48L3NhbXA+IDx2YXI+YmZkbmFtZTwvdmFyPl0gPHZhcj5hcmNoaXZlPC92YXI+IFs8dmFyPm1lbWJlcjwvdmFyPi4uLl0KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8cD48YSBuYW1lPSJpbmRleC1Vbml4LWNvbXBhdGliaWxpdHlfMDAyYy1fMDA0MGNvbW1hbmRfMDA3YmFyXzAwN2QtMTEiPjwvYT5XaGVuIHlvdSB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gaW4gdGhlIFVuaXggc3R5bGUsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGluc2lzdHMgb24gYXQgbGVhc3QgdHdvCithcmd1bWVudHMgdG8gZXhlY3V0ZTogb25lIGtleWxldHRlciBzcGVjaWZ5aW5nIHRoZSA8ZW0+b3BlcmF0aW9uPC9lbT4KKyhvcHRpb25hbGx5IGFjY29tcGFuaWVkIGJ5IG90aGVyIGtleWxldHRlcnMgc3BlY2lmeWluZworPGVtPm1vZGlmaWVyczwvZW0+KSwgYW5kIHRoZSBhcmNoaXZlIG5hbWUgdG8gYWN0IG9uLgorCisgICA8cD5Nb3N0IG9wZXJhdGlvbnMgY2FuIGFsc28gYWNjZXB0IGZ1cnRoZXIgPHZhcj5tZW1iZXI8L3Zhcj4gYXJndW1lbnRzLAorc3BlY2lmeWluZyBwYXJ0aWN1bGFyIGZpbGVzIHRvIG9wZXJhdGUgb24uCisKKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgYXIgLS0+CisgICA8cD48c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gYWxsb3dzIHlvdSB0byBtaXggdGhlIG9wZXJhdGlvbiBjb2RlIDx2YXI+cDwvdmFyPiBhbmQgbW9kaWZpZXIKK2ZsYWdzIDx2YXI+bW9kPC92YXI+IGluIGFueSBvcmRlciwgd2l0aGluIHRoZSBmaXJzdCBjb21tYW5kLWxpbmUgYXJndW1lbnQuCisKKyAgIDxwPklmIHlvdSB3aXNoLCB5b3UgbWF5IGJlZ2luIHRoZSBmaXJzdCBjb21tYW5kLWxpbmUgYXJndW1lbnQgd2l0aCBhCitkYXNoLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1vcGVyYXRpb25zLW9uLWFyY2hpdmUtMTIiPjwvYT5UaGUgPHZhcj5wPC92YXI+IGtleWxldHRlciBzcGVjaWZpZXMgd2hhdCBvcGVyYXRpb24gdG8gZXhlY3V0ZTsgaXQgbWF5IGJlCithbnkgb2YgdGhlIGZvbGxvd2luZywgYnV0IHlvdSBtdXN0IHNwZWNpZnkgb25seSBvbmUgb2YgdGhlbToKKworICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWRlbGV0aW5nLWZyb20tYXJjaGl2ZS0xMyI+PC9hPjxlbT5EZWxldGU8L2VtPiBtb2R1bGVzIGZyb20gdGhlIGFyY2hpdmUuICBTcGVjaWZ5IHRoZSBuYW1lcyBvZiBtb2R1bGVzIHRvCitiZSBkZWxldGVkIGFzIDx2YXI+bWVtYmVyPC92YXI+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPjsgdGhlIGFyY2hpdmUgaXMgdW50b3VjaGVkIGlmIHlvdQorc3BlY2lmeSBubyBmaWxlcyB0byBkZWxldGUuCisKKyAgICAgPHA+SWYgeW91IHNwZWNpZnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+djwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtb2RpZmllciwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gbGlzdHMgZWFjaCBtb2R1bGUKK2FzIGl0IGlzIGRlbGV0ZWQuCisKKyAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm08L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtbW92aW5nLWluLWFyY2hpdmUtMTQiPjwvYT5Vc2UgdGhpcyBvcGVyYXRpb24gdG8gPGVtPm1vdmU8L2VtPiBtZW1iZXJzIGluIGFuIGFyY2hpdmUuCisKKyAgICAgPHA+VGhlIG9yZGVyaW5nIG9mIG1lbWJlcnMgaW4gYW4gYXJjaGl2ZSBjYW4gbWFrZSBhIGRpZmZlcmVuY2UgaW4gaG93Citwcm9ncmFtcyBhcmUgbGlua2VkIHVzaW5nIHRoZSBsaWJyYXJ5LCBpZiBhIHN5bWJvbCBpcyBkZWZpbmVkIGluIG1vcmUKK3RoYW4gb25lIG1lbWJlci4KKworICAgICA8cD5JZiBubyBtb2RpZmllcnMgYXJlIHVzZWQgd2l0aCA8Y29kZT5tPC9jb2RlPiwgYW55IG1lbWJlcnMgeW91IG5hbWUgaW4gdGhlCis8dmFyPm1lbWJlcjwvdmFyPiBhcmd1bWVudHMgYXJlIG1vdmVkIHRvIHRoZSA8ZW0+ZW5kPC9lbT4gb2YgdGhlIGFyY2hpdmU7Cit5b3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtb2RpZmllcnMgdG8gbW92ZSB0aGVtIHRvIGEKK3NwZWNpZmllZCBwbGFjZSBpbnN0ZWFkLgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LXByaW50aW5nLWZyb20tYXJjaGl2ZS0xNSI+PC9hPjxlbT5QcmludDwvZW0+IHRoZSBzcGVjaWZpZWQgbWVtYmVycyBvZiB0aGUgYXJjaGl2ZSwgdG8gdGhlIHN0YW5kYXJkCitvdXRwdXQgZmlsZS4gIElmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbW9kaWZpZXIgaXMgc3BlY2lmaWVkLCBzaG93IHRoZSBtZW1iZXIKK25hbWUgYmVmb3JlIGNvcHlpbmcgaXRzIGNvbnRlbnRzIHRvIHN0YW5kYXJkIG91dHB1dC4KKworICAgICA8cD5JZiB5b3Ugc3BlY2lmeSBubyA8dmFyPm1lbWJlcjwvdmFyPiBhcmd1bWVudHMsIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGFyY2hpdmUgYXJlCitwcmludGVkLgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5xPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LXF1aWNrLWFwcGVuZC10by1hcmNoaXZlLTE2Ij48L2E+PGVtPlF1aWNrIGFwcGVuZDwvZW0+OyBIaXN0b3JpY2FsbHksIGFkZCB0aGUgZmlsZXMgPHZhcj5tZW1iZXI8L3Zhcj48c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IHRvIHRoZSBlbmQgb2YKKzx2YXI+YXJjaGl2ZTwvdmFyPiwgd2l0aG91dCBjaGVja2luZyBmb3IgcmVwbGFjZW1lbnQuCisKKyAgICAgPHA+VGhlIG1vZGlmaWVycyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkbyA8ZW0+bm90PC9lbT4gYWZmZWN0IHRoaXMKK29wZXJhdGlvbjsgbmV3IG1lbWJlcnMgYXJlIGFsd2F5cyBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgYXJjaGl2ZS4KKworICAgICA8cD5UaGUgbW9kaWZpZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52PC9zcGFuPjwvc2FtcD4mcnNxdW87IG1ha2VzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGxpc3QgZWFjaCBmaWxlIGFzIGl0IGlzIGFwcGVuZGVkLgorCisgICAgIDxwPlNpbmNlIHRoZSBwb2ludCBvZiB0aGlzIG9wZXJhdGlvbiBpcyBzcGVlZCwgdGhlIGFyY2hpdmUncyBzeW1ib2wgdGFibGUKK2luZGV4IGlzIG5vdCB1cGRhdGVkLCBldmVuIGlmIGl0IGFscmVhZHkgZXhpc3RlZDsgeW91IGNhbiB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hciBzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+cmFubGliPC9zcGFuPjwvc2FtcD4gZXhwbGljaXRseSB0byB1cGRhdGUgdGhlIHN5bWJvbCB0YWJsZSBpbmRleC4KKworICAgICA8cD5Ib3dldmVyLCB0b28gbWFueSBkaWZmZXJlbnQgc3lzdGVtcyBhc3N1bWUgcXVpY2sgYXBwZW5kIHJlYnVpbGRzIHRoZQoraW5kZXgsIHNvIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBpbXBsZW1lbnRzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyBhIHN5bm9ueW0gZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1yZXBsYWNlbWVudC1pbi1hcmNoaXZlLTE3Ij48L2E+SW5zZXJ0IHRoZSBmaWxlcyA8dmFyPm1lbWJlcjwvdmFyPjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gaW50byA8dmFyPmFyY2hpdmU8L3Zhcj4gKHdpdGgKKzxlbT5yZXBsYWNlbWVudDwvZW0+KS4gVGhpcyBvcGVyYXRpb24gZGlmZmVycyBmcm9tICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiB0aGF0IGFueQorcHJldmlvdXNseSBleGlzdGluZyBtZW1iZXJzIGFyZSBkZWxldGVkIGlmIHRoZWlyIG5hbWVzIG1hdGNoIHRob3NlIGJlaW5nCithZGRlZC4KKworICAgICA8cD5JZiBvbmUgb2YgdGhlIGZpbGVzIG5hbWVkIGluIDx2YXI+bWVtYmVyPC92YXI+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiBkb2VzIG5vdCBleGlzdCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4KK2Rpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2UsIGFuZCBsZWF2ZXMgdW5kaXN0dXJiZWQgYW55IGV4aXN0aW5nIG1lbWJlcnMKK29mIHRoZSBhcmNoaXZlIG1hdGNoaW5nIHRoYXQgbmFtZS4KKworICAgICA8cD5CeSBkZWZhdWx0LCBuZXcgbWVtYmVycyBhcmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZTsgYnV0IHlvdSBtYXkKK3VzZSBvbmUgb2YgdGhlIG1vZGlmaWVycyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHJlcXVlc3QKK3BsYWNlbWVudCByZWxhdGl2ZSB0byBzb21lIGV4aXN0aW5nIG1lbWJlci4KKworICAgICA8cD5UaGUgbW9kaWZpZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52PC9zcGFuPjwvc2FtcD4mcnNxdW87IHVzZWQgd2l0aCB0aGlzIG9wZXJhdGlvbiBlbGljaXRzIGEgbGluZSBvZgorb3V0cHV0IGZvciBlYWNoIGZpbGUgaW5zZXJ0ZWQsIGFsb25nIHdpdGggb25lIG9mIHRoZSBsZXR0ZXJzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGZpbGUgd2FzIGFwcGVuZGVkIChubyBvbGQgbWVtYmVyCitkZWxldGVkKSBvciByZXBsYWNlZC4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+czwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1yYW5saWItMTgiPjwvYT5BZGQgYW4gaW5kZXggdG8gdGhlIGFyY2hpdmUsIG9yIHVwZGF0ZSBpdCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gIE5vdGUKK3RoaXMgY29tbWFuZCBpcyBhbiBleGNlcHRpb24gdG8gdGhlIHJ1bGUgdGhhdCB0aGVyZSBjYW4gb25seSBiZSBvbmUKK2NvbW1hbmQgbGV0dGVyLCBhcyBpdCBpcyBwb3NzaWJsZSB0byB1c2UgaXQgYXMgZWl0aGVyIGEgY29tbWFuZCBvciBhCittb2RpZmllci4gIEluIGVpdGhlciBjYXNlIGl0IGRvZXMgdGhlIHNhbWUgdGhpbmcuCisKKyAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtY29udGVudHMtb2YtYXJjaGl2ZS0xOSI+PC9hPkRpc3BsYXkgYSA8ZW0+dGFibGU8L2VtPiBsaXN0aW5nIHRoZSBjb250ZW50cyBvZiA8dmFyPmFyY2hpdmU8L3Zhcj4sIG9yIHRob3NlCitvZiB0aGUgZmlsZXMgbGlzdGVkIGluIDx2YXI+bWVtYmVyPC92YXI+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiB0aGF0IGFyZSBwcmVzZW50IGluIHRoZQorYXJjaGl2ZS4gIE5vcm1hbGx5IG9ubHkgdGhlIG1lbWJlciBuYW1lIGlzIHNob3duOyBpZiB5b3UgYWxzbyB3YW50IHRvCitzZWUgdGhlIG1vZGVzIChwZXJtaXNzaW9ucyksIHRpbWVzdGFtcCwgb3duZXIsIGdyb3VwLCBhbmQgc2l6ZSwgeW91IGNhbgorcmVxdWVzdCB0aGF0IGJ5IGFsc28gc3BlY2lmeWluZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52PC9zcGFuPjwvc2FtcD4mcnNxdW87IG1vZGlmaWVyLgorCisgICAgIDxwPklmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIDx2YXI+bWVtYmVyPC92YXI+LCBhbGwgZmlsZXMgaW4gdGhlIGFyY2hpdmUKK2FyZSBsaXN0ZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtcmVwZWF0ZWQtbmFtZXMtaW4tYXJjaGl2ZS0yMCI+PC9hPjxhIG5hbWU9ImluZGV4LW5hbWUtZHVwbGljYXRpb24taW4tYXJjaGl2ZS0yMSI+PC9hPklmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgKHNheSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5maWU8L3NwYW4+PC9zYW1wPiZyc3F1bzspIGluCithbiBhcmNoaXZlIChzYXkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iLmE8L3NwYW4+PC9zYW1wPiZyc3F1bzspLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyIHQgYi5hIGZpZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBsaXN0cyBvbmx5IHRoZQorZmlyc3QgaW5zdGFuY2U7IHRvIHNlZSB0aGVtIGFsbCwgeW91IG11c3QgYXNrIGZvciBhIGNvbXBsZXRlCitsaXN0aW5nJm1kYXNoO2luIG91ciBleGFtcGxlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyIHQgYi5hPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKKzwhLS0gV1JTIG9ubHk7IHBlciBHdW1ieSwgdGhpcyBpcyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQsIGFuZCBpbiBhIG1vcmUgLS0+Cis8IS0tIHJlY2VudCBjYXNlIGluIGZhY3Qgd29ya3MgdGhlIG90aGVyIHdheS4gLS0+CisKKyAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPng8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZXh0cmFjdC1mcm9tLWFyY2hpdmUtMjIiPjwvYT48ZW0+RXh0cmFjdDwvZW0+IG1lbWJlcnMgKG5hbWVkIDx2YXI+bWVtYmVyPC92YXI+KSBmcm9tIHRoZSBhcmNoaXZlLiAgWW91IGNhbgordXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbW9kaWZpZXIgd2l0aCB0aGlzIG9wZXJhdGlvbiwgdG8gcmVxdWVzdCB0aGF0Cis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBsaXN0IGVhY2ggbmFtZSBhcyBpdCBleHRyYWN0cyBpdC4KKworICAgICA8cD5JZiB5b3UgZG8gbm90IHNwZWNpZnkgYSA8dmFyPm1lbWJlcjwvdmFyPiwgYWxsIGZpbGVzIGluIHRoZSBhcmNoaXZlCithcmUgZXh0cmFjdGVkLgorCisgICAgIDxwPkZpbGVzIGNhbm5vdCBiZSBleHRyYWN0ZWQgZnJvbSBhIHRoaW4gYXJjaGl2ZS4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1oZWxwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRpc3BsYXlzIHRoZSBsaXN0IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIHN1cHBvcnRlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPgorYW5kIHRoZW4gZXhpdHMuCisKKyAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tdmVyc2lvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EaXNwbGF5cyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBhbmQgdGhlbiBleGl0cy4KKworICAgPC9kbD4KKworICAgPHA+QSBudW1iZXIgb2YgbW9kaWZpZXJzICg8dmFyPm1vZDwvdmFyPikgbWF5IGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUgPHZhcj5wPC92YXI+CitrZXlsZXR0ZXIsIHRvIHNwZWNpZnkgdmFyaWF0aW9ucyBvbiBhbiBvcGVyYXRpb24ncyBiZWhhdmlvcjoKKworICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LXJlbGF0aXZlLXBsYWNlbWVudC1pbi1hcmNoaXZlLTIzIj48L2E+QWRkIG5ldyBmaWxlcyA8ZW0+YWZ0ZXI8L2VtPiBhbiBleGlzdGluZyBtZW1iZXIgb2YgdGhlCithcmNoaXZlLiAgSWYgeW91IHVzZSB0aGUgbW9kaWZpZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBhcmNoaXZlCittZW1iZXIgbXVzdCBiZSBwcmVzZW50IGFzIHRoZSA8dmFyPnJlbHBvczwvdmFyPiBhcmd1bWVudCwgYmVmb3JlIHRoZQorPHZhcj5hcmNoaXZlPC92YXI+IHNwZWNpZmljYXRpb24uCisKKyAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QWRkIG5ldyBmaWxlcyA8ZW0+YmVmb3JlPC9lbT4gYW4gZXhpc3RpbmcgbWVtYmVyIG9mIHRoZQorYXJjaGl2ZS4gIElmIHlvdSB1c2UgdGhlIG1vZGlmaWVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYXJjaGl2ZQorbWVtYmVyIG11c3QgYmUgcHJlc2VudCBhcyB0aGUgPHZhcj5yZWxwb3M8L3Zhcj4gYXJndW1lbnQsIGJlZm9yZSB0aGUKKzx2YXI+YXJjaGl2ZTwvdmFyPiBzcGVjaWZpY2F0aW9uLiAgKHNhbWUgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pPC9zcGFuPjwvc2FtcD4mcnNxdW87KS4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1jcmVhdGluZy1hcmNoaXZlcy0yNCI+PC9hPjxlbT5DcmVhdGU8L2VtPiB0aGUgYXJjaGl2ZS4gIFRoZSBzcGVjaWZpZWQgPHZhcj5hcmNoaXZlPC92YXI+IGlzIGFsd2F5cworY3JlYXRlZCBpZiBpdCBkaWQgbm90IGV4aXN0LCB3aGVuIHlvdSByZXF1ZXN0IGFuIHVwZGF0ZS4gIEJ1dCBhIHdhcm5pbmcgaXMKK2lzc3VlZCB1bmxlc3MgeW91IHNwZWNpZnkgaW4gYWR2YW5jZSB0aGF0IHlvdSBleHBlY3QgdG8gY3JlYXRlIGl0LCBieQordXNpbmcgdGhpcyBtb2RpZmllci4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1kZXRlcm1pbmlzdGljLWFyY2hpdmVzLTI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkZGV0ZXJtaW5pc3RpY18wMDJkYXJjaGl2ZXMtMjYiPjwvYT5PcGVyYXRlIGluIDxlbT5kZXRlcm1pbmlzdGljPC9lbT4gbW9kZS4gIFdoZW4gYWRkaW5nIGZpbGVzIGFuZCB0aGUgYXJjaGl2ZQoraW5kZXggdXNlIHplcm8gZm9yIFVJRHMsIEdJRHMsIHRpbWVzdGFtcHMsIGFuZCB1c2UgY29uc2lzdGVudCBmaWxlIG1vZGVzCitmb3IgYWxsIGZpbGVzLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBpZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBpcyB1c2VkIHdpdGgKK2lkZW50aWNhbCBvcHRpb25zIGFuZCBpZGVudGljYWwgaW5wdXQgZmlsZXMsIG11bHRpcGxlIHJ1bnMgd2lsbCBjcmVhdGUKK2lkZW50aWNhbCBvdXRwdXQgZmlsZXMgcmVnYXJkbGVzcyBvZiB0aGUgaW5wdXQgZmlsZXMnIG93bmVycywgZ3JvdXBzLAorZmlsZSBtb2Rlcywgb3IgbW9kaWZpY2F0aW9uIHRpbWVzLgorCisgICAgIDxwPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5iaW51dGlsczwvc3Bhbj48L3NhbXA+IHdhcyBjb25maWd1cmVkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L3NwYW4+PC9zYW1wPiwgdGhlbiB0aGlzIG1vZGUgaXMgb24gYnkgZGVmYXVsdC4gCitJdCBjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5VPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1vZGlmaWVyLCBiZWxvdy4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5UcnVuY2F0ZSBuYW1lcyBpbiB0aGUgYXJjaGl2ZS4gIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiB3aWxsIG5vcm1hbGx5IHBlcm1pdCBmaWxlCituYW1lcyBvZiBhbnkgbGVuZ3RoLiAgVGhpcyB3aWxsIGNhdXNlIGl0IHRvIGNyZWF0ZSBhcmNoaXZlcyB3aGljaCBhcmUKK25vdCBjb21wYXRpYmxlIHdpdGggdGhlIG5hdGl2ZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBwcm9ncmFtIG9uIHNvbWUgc3lzdGVtcy4gIElmCit0aGlzIGlzIGEgY29uY2VybiwgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtb2RpZmllciBtYXkgYmUgdXNlZCB0byB0cnVuY2F0ZSBmaWxlCituYW1lcyB3aGVuIHB1dHRpbmcgdGhlbSBpbiB0aGUgYXJjaGl2ZS4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnNlcnQgbmV3IGZpbGVzIDxlbT5iZWZvcmU8L2VtPiBhbiBleGlzdGluZyBtZW1iZXIgb2YgdGhlCithcmNoaXZlLiAgSWYgeW91IHVzZSB0aGUgbW9kaWZpZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBhcmNoaXZlCittZW1iZXIgbXVzdCBiZSBwcmVzZW50IGFzIHRoZSA8dmFyPnJlbHBvczwvdmFyPiBhcmd1bWVudCwgYmVmb3JlIHRoZQorPHZhcj5hcmNoaXZlPC92YXI+IHNwZWNpZmljYXRpb24uICAoc2FtZSBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzspLgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgbW9kaWZpZXIgaXMgYWNjZXB0ZWQgYnV0IG5vdCB1c2VkLiAKKzwhLS0gd2hhZmZvciBhciBsIG1vZGlmaWVyPz8/IHByZXN1bWFibHkgY29tcGF0OyB3aXRoIC0tPgorPCEtLSB3aGF0Pz8/LWRvY0BAY3lnbnVzLmNvbSwgMjVqYW45MSAtLT4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Vc2VzIHRoZSA8dmFyPmNvdW50PC92YXI+IHBhcmFtZXRlci4gIFRoaXMgaXMgdXNlZCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUKK2VudHJpZXMgaW4gdGhlIGFyY2hpdmUgd2l0aCB0aGUgc2FtZSBuYW1lLiAgRXh0cmFjdCBvciBkZWxldGUgaW5zdGFuY2UKKzx2YXI+Y291bnQ8L3Zhcj4gb2YgdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGUgYXJjaGl2ZS4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1kYXRlcy1pbi1hcmNoaXZlLTI3Ij48L2E+UHJlc2VydmUgdGhlIDxlbT5vcmlnaW5hbDwvZW0+IGRhdGVzIG9mIG1lbWJlcnMgd2hlbiBleHRyYWN0aW5nIHRoZW0uICBJZgoreW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgbW9kaWZpZXIsIGZpbGVzIGV4dHJhY3RlZCBmcm9tIHRoZSBhcmNoaXZlCithcmUgc3RhbXBlZCB3aXRoIHRoZSB0aW1lIG9mIGV4dHJhY3Rpb24uCisKKyAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VXNlIHRoZSBmdWxsIHBhdGggbmFtZSB3aGVuIG1hdGNoaW5nIG5hbWVzIGluIHRoZSBhcmNoaXZlLiAgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+Cis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBjYW4gbm90IGNyZWF0ZSBhbiBhcmNoaXZlIHdpdGggYSBmdWxsIHBhdGggbmFtZSAoc3VjaCBhcmNoaXZlcworYXJlIG5vdCBQT1NJWCBjb21wbGFpbnQpLCBidXQgb3RoZXIgYXJjaGl2ZSBjcmVhdG9ycyBjYW4uICBUaGlzIG9wdGlvbgord2lsbCBjYXVzZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gdG8gbWF0Y2ggZmlsZSBuYW1lcyB1c2luZyBhIGNvbXBsZXRlIHBhdGgKK25hbWUsIHdoaWNoIGNhbiBiZSBjb252ZW5pZW50IHdoZW4gZXh0cmFjdGluZyBhIHNpbmdsZSBmaWxlIGZyb20gYW4KK2FyY2hpdmUgY3JlYXRlZCBieSBhbm90aGVyIHRvb2wuCisKKyAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtd3JpdGluZy1hcmNoaXZlLWluZGV4LTI4Ij48L2E+V3JpdGUgYW4gb2JqZWN0LWZpbGUgaW5kZXggaW50byB0aGUgYXJjaGl2ZSwgb3IgdXBkYXRlIGFuIGV4aXN0aW5nIG9uZSwKK2V2ZW4gaWYgbm8gb3RoZXIgY2hhbmdlIGlzIG1hZGUgdG8gdGhlIGFyY2hpdmUuICBZb3UgbWF5IHVzZSB0aGlzIG1vZGlmaWVyCitmbGFnIGVpdGhlciB3aXRoIGFueSBvcGVyYXRpb24sIG9yIGFsb25lLiAgUnVubmluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyIHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb24gYW4KK2FyY2hpdmUgaXMgZXF1aXZhbGVudCB0byBydW5uaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmFubGliPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIGl0LgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LW5vdC13cml0aW5nLWFyY2hpdmUtaW5kZXgtMjkiPjwvYT5EbyBub3QgZ2VuZXJhdGUgYW4gYXJjaGl2ZSBzeW1ib2wgdGFibGUuICBUaGlzIGNhbiBzcGVlZCB1cCBidWlsZGluZyBhCitsYXJnZSBsaWJyYXJ5IGluIHNldmVyYWwgc3RlcHMuICBUaGUgcmVzdWx0aW5nIGFyY2hpdmUgY2FuIG5vdCBiZSB1c2VkCit3aXRoIHRoZSBsaW5rZXIuICBJbiBvcmRlciB0byBidWlsZCBhIHN5bWJvbCB0YWJsZSwgeW91IG11c3Qgb21pdCB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Uzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtb2RpZmllciBvbiB0aGUgbGFzdCBleGVjdXRpb24gb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgeW91IG11c3QgcnVuCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJhbmxpYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvbiB0aGUgYXJjaGl2ZS4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1jcmVhdGluZy10aGluLWFyY2hpdmUtMzAiPjwvYT5NYWtlIHRoZSBzcGVjaWZpZWQgPHZhcj5hcmNoaXZlPC92YXI+IGEgPGVtPnRoaW48L2VtPiBhcmNoaXZlLiAgSWYgaXQgYWxyZWFkeQorZXhpc3RzIGFuZCBpcyBhIHJlZ3VsYXIgYXJjaGl2ZSwgdGhlIGV4aXN0aW5nIG1lbWJlcnMgbXVzdCBiZSBwcmVzZW50CitpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgPHZhcj5hcmNoaXZlPC92YXI+LgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj51PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LXVwZGF0aW5nLWFuLWFyY2hpdmUtMzEiPjwvYT5Ob3JtYWxseSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hciByPC9zcGFuPjwvc2FtcD4mcnNxdW87PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiBpbnNlcnRzIGFsbCBmaWxlcworbGlzdGVkIGludG8gdGhlIGFyY2hpdmUuICBJZiB5b3Ugd291bGQgbGlrZSB0byBpbnNlcnQgPGVtPm9ubHk8L2VtPiB0aG9zZQorb2YgdGhlIGZpbGVzIHlvdSBsaXN0IHRoYXQgYXJlIG5ld2VyIHRoYW4gZXhpc3RpbmcgbWVtYmVycyBvZiB0aGUgc2FtZQorbmFtZXMsIHVzZSB0aGlzIG1vZGlmaWVyLiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtb2RpZmllciBpcyBhbGxvd2VkIG9ubHkgZm9yIHRoZQorb3BlcmF0aW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAocmVwbGFjZSkuICBJbiBwYXJ0aWN1bGFyLCB0aGUgY29tYmluYXRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5xdTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcworbm90IGFsbG93ZWQsIHNpbmNlIGNoZWNraW5nIHRoZSB0aW1lc3RhbXBzIHdvdWxkIGxvc2UgYW55IHNwZWVkCithZHZhbnRhZ2UgZnJvbSB0aGUgb3BlcmF0aW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1kZXRlcm1pbmlzdGljLWFyY2hpdmVzLTMyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkZGV0ZXJtaW5pc3RpY18wMDJkYXJjaGl2ZXMtMzMiPjwvYT5EbyA8ZW0+bm90PC9lbT4gb3BlcmF0ZSBpbiA8ZW0+ZGV0ZXJtaW5pc3RpYzwvZW0+IG1vZGUuICBUaGlzIGlzIHRoZSBpbnZlcnNlCitvZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5EPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1vZGlmaWVyLCBhYm92ZTogYWRkZWQgZmlsZXMgYW5kIHRoZSBhcmNoaXZlIGluZGV4IHdpbGwKK2dldCB0aGVpciBhY3R1YWwgVUlELCBHSUQsIHRpbWVzdGFtcCwgYW5kIGZpbGUgbW9kZSB2YWx1ZXMuCisKKyAgICAgPHA+VGhpcyBpcyB0aGUgZGVmYXVsdCB1bmxlc3MgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmJpbnV0aWxzPC9zcGFuPjwvc2FtcD4gd2FzIGNvbmZpZ3VyZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1lbmFibGUtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgbW9kaWZpZXIgcmVxdWVzdHMgdGhlIDxlbT52ZXJib3NlPC9lbT4gdmVyc2lvbiBvZiBhbiBvcGVyYXRpb24uICBNYW55CitvcGVyYXRpb25zIGRpc3BsYXkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgc3VjaCBhcyBmaWxlbmFtZXMgcHJvY2Vzc2VkLAord2hlbiB0aGUgbW9kaWZpZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFwcGVuZGVkLgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5WPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgbW9kaWZpZXIgc2hvd3MgdGhlIHZlcnNpb24gbnVtYmVyIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+LiAKKzwvZGw+CisKKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGlnbm9yZXMgYW4gaW5pdGlhbCBvcHRpb24gc3BlbHQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tWDMyXzY0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBmb3IKK2NvbXBhdGliaWxpdHkgd2l0aCBBSVguICBUaGUgYmVoYXZpb3VyIHByb2R1Y2VkIGJ5IHRoaXMgb3B0aW9uIGlzIHRoZQorZGVmYXVsdCBmb3IgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+LiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gZG9lcyBub3Qgc3VwcG9ydCBhbnkgb2YgdGhlIG90aGVyCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1YPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnM7IGluIHBhcnRpY3VsYXIsIGl0IGRvZXMgbm90IHN1cHBvcnQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVgzMjwvc3Bhbj48L3NhbXA+Cit3aGljaCBpcyB0aGUgZGVmYXVsdCBmb3IgQUlYIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+LgorCisgICA8cD5UaGUgb3B0aW9uYWwgY29tbWFuZCBsaW5lIHN3aXRjaCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBsdWdpbjwvc3Bhbj48L3NhbXA+IDx2YXI+bmFtZTwvdmFyPiBjYXVzZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IHRvIGxvYWQgdGhlIHBsdWdpbiBjYWxsZWQgPHZhcj5uYW1lPC92YXI+IHdoaWNoIGFkZHMgc3VwcG9ydAorZm9yIG1vcmUgZmlsZSBmb3JtYXRzLiAgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIHRvb2xjaGFpbgoraGFzIGJlZW4gYnVpbHQgd2l0aCBwbHVnaW4gc3VwcG9ydCBlbmFibGVkLgorCisgICA8cD5UaGUgb3B0aW9uYWwgY29tbWFuZCBsaW5lIHN3aXRjaCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRhcmdldDwvc3Bhbj48L3NhbXA+IDx2YXI+YmZkbmFtZTwvdmFyPgorc3BlY2lmaWVzIHRoYXQgdGhlIGFyY2hpdmUgbWVtYmVycyBhcmUgaW4gYW4gb2JqZWN0IGNvZGUgZm9ybWF0CitkaWZmZXJlbnQgZnJvbSB5b3VyIHN5c3RlbSdzIGRlZmF1bHQgZm9ybWF0LiAgU2VlCitTZWUgPGEgaHJlZj0iVGFyZ2V0LVNlbGVjdGlvbi5odG1sI1RhcmdldC1TZWxlY3Rpb24iPlRhcmdldCBTZWxlY3Rpb248L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvYXItc2NyaXB0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvYXItc2NyaXB0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZTYwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9hci1zY3JpcHRzLmh0bWwKQEAgLTAsMCArMSwxNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmFyIHNjcmlwdHMgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImFyLmh0bWwjYXIiIHRpdGxlPSJhciI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNhci1jbWRsaW5lIiB0aXRsZT0iYXIgY21kbGluZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYXItc2NyaXB0cyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNhci1jbWRsaW5lIj5hciBjbWRsaW5lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iYXIuaHRtbCNhciI+YXI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjIgQ29udHJvbGxpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gd2l0aCBhIFNjcmlwdDwvaDM+CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhciAtTSBbICZsdDs8dmFyPnNjcmlwdDwvdmFyPiBdCis8L3ByZT4KKyAgIDxwPjxhIG5hbWU9ImluZGV4LU1SSS1jb21wYXRpYmlsaXR5XzAwMmMtXzAwNDBjb21tYW5kXzAwN2Jhcl8wMDdkLTM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2NyaXB0c18wMDJjLV8wMDQwY29tbWFuZF8wMDdiYXJfMDA3ZC0zNSI+PC9hPklmIHlvdSB1c2UgdGhlIHNpbmdsZSBjb21tYW5kLWxpbmUgb3B0aW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LU08L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiwgeW91CitjYW4gY29udHJvbCBpdHMgb3BlcmF0aW9uIHdpdGggYSBydWRpbWVudGFyeSBjb21tYW5kIGxhbmd1YWdlLiAgVGhpcworZm9ybSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBvcGVyYXRlcyBpbnRlcmFjdGl2ZWx5IGlmIHN0YW5kYXJkIGlucHV0IGlzIGNvbWluZworZGlyZWN0bHkgZnJvbSBhIHRlcm1pbmFsLiAgRHVyaW5nIGludGVyYWN0aXZlIHVzZSwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gcHJvbXB0cyBmb3IKK2lucHV0ICh0aGUgcHJvbXB0IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QVIgJmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyksIGFuZCBjb250aW51ZXMgZXhlY3V0aW5nIGV2ZW4gYWZ0ZXIKK2Vycm9ycy4gIElmIHlvdSByZWRpcmVjdCBzdGFuZGFyZCBpbnB1dCB0byBhIHNjcmlwdCBmaWxlLCBubyBwcm9tcHRzIGFyZQoraXNzdWVkLCBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gYWJhbmRvbnMgZXhlY3V0aW9uICh3aXRoIGEgbm9uemVybyBleGl0IGNvZGUpCitvbiBhbnkgZXJyb3IuCisKKyAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxhbmd1YWdlIGlzIDxlbT5ub3Q8L2VtPiBkZXNpZ25lZCB0byBiZSBlcXVpdmFsZW50Cit0byB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnM7IGluIGZhY3QsIGl0IHByb3ZpZGVzIHNvbWV3aGF0IGxlc3MgY29udHJvbAorb3ZlciBhcmNoaXZlcy4gIFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhlIGNvbW1hbmQgbGFuZ3VhZ2UgaXMgdG8gZWFzZSB0aGUKK3RyYW5zaXRpb24gdG8gPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGZvciBkZXZlbG9wZXJzIHdobyBhbHJlYWR5IGhhdmUgc2NyaXB0cword3JpdHRlbiBmb3IgdGhlIE1SSSAmbGRxdW87bGlicmFyaWFuJnJkcXVvOyBwcm9ncmFtLgorCisgICA8cD5UaGUgc3ludGF4IGZvciB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsYW5ndWFnZSBpcyBzdHJhaWdodGZvcndhcmQ6CisgICAgIDx1bD4KKzxsaT5jb21tYW5kcyBhcmUgcmVjb2duaXplZCBpbiB1cHBlciBvciBsb3dlciBjYXNlOyBmb3IgZXhhbXBsZSwgPGNvZGU+TElTVDwvY29kZT4KK2lzIHRoZSBzYW1lIGFzIDxjb2RlPmxpc3Q8L2NvZGU+LiAgSW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbnMsIGNvbW1hbmRzIGFyZQorc2hvd24gaW4gdXBwZXIgY2FzZSBmb3IgY2xhcml0eS4KKworICAgICA8bGk+YSBzaW5nbGUgY29tbWFuZCBtYXkgYXBwZWFyIG9uIGVhY2ggbGluZTsgaXQgaXMgdGhlIGZpcnN0IHdvcmQgb24gdGhlCitsaW5lLgorCisgICAgIDxsaT5lbXB0eSBsaW5lcyBhcmUgYWxsb3dlZCwgYW5kIGhhdmUgbm8gZWZmZWN0LgorCisgICAgIDxsaT5jb21tZW50cyBhcmUgYWxsb3dlZDsgdGV4dCBhZnRlciBlaXRoZXIgb2YgdGhlIGNoYXJhY3RlcnMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87CitvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgaWdub3JlZC4KKworICAgICA8bGk+V2hlbmV2ZXIgeW91IHVzZSBhIGxpc3Qgb2YgbmFtZXMgYXMgcGFydCBvZiB0aGUgYXJndW1lbnQgdG8gYW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4KK2NvbW1hbmQsIHlvdSBjYW4gc2VwYXJhdGUgdGhlIGluZGl2aWR1YWwgbmFtZXMgd2l0aCBlaXRoZXIgY29tbWFzIG9yCitibGFua3MuICBDb21tYXMgYXJlIHNob3duIGluIHRoZSBleHBsYW5hdGlvbnMgYmVsb3csIGZvciBjbGFyaXR5LgorCisgICAgIDxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPis8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdXNlZCBhcyBhIGxpbmUgY29udGludWF0aW9uIGNoYXJhY3RlcjsgaWYgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4rPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMKK2F0IHRoZSBlbmQgb2YgYSBsaW5lLCB0aGUgdGV4dCBvbiB0aGUgZm9sbG93aW5nIGxpbmUgaXMgY29uc2lkZXJlZCBwYXJ0CitvZiB0aGUgY3VycmVudCBjb21tYW5kLiAKKzwvdWw+CisKKyAgIDxwPkhlcmUgYXJlIHRoZSBjb21tYW5kcyB5b3UgY2FuIHVzZSBpbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBzY3JpcHRzLCBvciB3aGVuIHVzaW5nCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBpbnRlcmFjdGl2ZWx5LiAgVGhyZWUgb2YgdGhlbSBoYXZlIHNwZWNpYWwgc2lnbmlmaWNhbmNlOgorCisgICA8cD48Y29kZT5PUEVOPC9jb2RlPiBvciA8Y29kZT5DUkVBVEU8L2NvZGU+IHNwZWNpZnkgYSA8ZGZuPmN1cnJlbnQgYXJjaGl2ZTwvZGZuPiwgd2hpY2ggaXMKK2EgdGVtcG9yYXJ5IGZpbGUgcmVxdWlyZWQgZm9yIG1vc3Qgb2YgdGhlIG90aGVyIGNvbW1hbmRzLgorCisgICA8cD48Y29kZT5TQVZFPC9jb2RlPiBjb21taXRzIHRoZSBjaGFuZ2VzIHNvIGZhciBzcGVjaWZpZWQgYnkgdGhlIHNjcmlwdC4gIFByaW9yCit0byA8Y29kZT5TQVZFPC9jb2RlPiwgY29tbWFuZHMgYWZmZWN0IG9ubHkgdGhlIHRlbXBvcmFyeSBjb3B5IG9mIHRoZSBjdXJyZW50CithcmNoaXZlLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5BRERMSUIgPC9jb2RlPjx2YXI+YXJjaGl2ZTwvdmFyPjxkdD48Y29kZT5BRERMSUIgPC9jb2RlPjx2YXI+YXJjaGl2ZTwvdmFyPjxjb2RlPiAoPC9jb2RlPjx2YXI+bW9kdWxlPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5tb2R1bGU8L3Zhcj48Y29kZT4sIC4uLiA8L2NvZGU+PHZhcj5tb2R1bGU8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5BZGQgYWxsIHRoZSBjb250ZW50cyBvZiA8dmFyPmFyY2hpdmU8L3Zhcj4gKG9yLCBpZiBzcGVjaWZpZWQsIGVhY2ggbmFtZWQKKzx2YXI+bW9kdWxlPC92YXI+IGZyb20gPHZhcj5hcmNoaXZlPC92YXI+KSB0byB0aGUgY3VycmVudCBhcmNoaXZlLgorCisgICAgIDxwPlJlcXVpcmVzIHByaW9yIHVzZSBvZiA8Y29kZT5PUEVOPC9jb2RlPiBvciA8Y29kZT5DUkVBVEU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+QURETU9EIDwvY29kZT48dmFyPm1lbWJlcjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+bWVtYmVyPC92YXI+PGNvZGU+LCAuLi4gPC9jb2RlPjx2YXI+bWVtYmVyPC92YXI+PGRkPjwhLS0gRklYTUUhIHcvUmVwbGFjZW1lbnQ/PyAgSWYgc28sIGxpa2UgImFyIHIgQHZhcnthcmNoaXZlfSBAdmFye25hbWVzfSIgLS0+Cis8IS0tIGVsc2UgbGlrZSAiYXIgcS4uLiIgLS0+CitBZGQgZWFjaCBuYW1lZCA8dmFyPm1lbWJlcjwvdmFyPiBhcyBhIG1vZHVsZSBpbiB0aGUgY3VycmVudCBhcmNoaXZlLgorCisgICAgIDxwPlJlcXVpcmVzIHByaW9yIHVzZSBvZiA8Y29kZT5PUEVOPC9jb2RlPiBvciA8Y29kZT5DUkVBVEU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Q0xFQVI8L2NvZGU+PGRkPkRpc2NhcmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGFyY2hpdmUsIGNhbmNlbGluZyB0aGUgZWZmZWN0IG9mCithbnkgb3BlcmF0aW9ucyBzaW5jZSB0aGUgbGFzdCA8Y29kZT5TQVZFPC9jb2RlPi4gIE1heSBiZSBleGVjdXRlZCAod2l0aCBubworZWZmZWN0KSBldmVuIGlmICBubyBjdXJyZW50IGFyY2hpdmUgaXMgc3BlY2lmaWVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Q1JFQVRFIDwvY29kZT48dmFyPmFyY2hpdmU8L3Zhcj48ZGQ+Q3JlYXRlcyBhbiBhcmNoaXZlLCBhbmQgbWFrZXMgaXQgdGhlIGN1cnJlbnQgYXJjaGl2ZSAocmVxdWlyZWQgZm9yIG1hbnkKK290aGVyIGNvbW1hbmRzKS4gIFRoZSBuZXcgYXJjaGl2ZSBpcyBjcmVhdGVkIHdpdGggYSB0ZW1wb3JhcnkgbmFtZTsgaXQKK2lzIG5vdCBhY3R1YWxseSBzYXZlZCBhcyA8dmFyPmFyY2hpdmU8L3Zhcj4gdW50aWwgeW91IHVzZSA8Y29kZT5TQVZFPC9jb2RlPi4gCitZb3UgY2FuIG92ZXJ3cml0ZSBleGlzdGluZyBhcmNoaXZlczsgc2ltaWxhcmx5LCB0aGUgY29udGVudHMgb2YgYW55CitleGlzdGluZyBmaWxlIG5hbWVkIDx2YXI+YXJjaGl2ZTwvdmFyPiB3aWxsIG5vdCBiZSBkZXN0cm95ZWQgdW50aWwgPGNvZGU+U0FWRTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5ERUxFVEUgPC9jb2RlPjx2YXI+bW9kdWxlPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5tb2R1bGU8L3Zhcj48Y29kZT4sIC4uLiA8L2NvZGU+PHZhcj5tb2R1bGU8L3Zhcj48ZGQ+RGVsZXRlIGVhY2ggbGlzdGVkIDx2YXI+bW9kdWxlPC92YXI+IGZyb20gdGhlIGN1cnJlbnQgYXJjaGl2ZTsgZXF1aXZhbGVudCB0bworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hciAtZCA8L3NwYW4+PHZhcj5hcmNoaXZlPC92YXI+IDx2YXI+bW9kdWxlPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiAuLi4gPC9zcGFuPjx2YXI+bW9kdWxlPC92YXI+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+UmVxdWlyZXMgcHJpb3IgdXNlIG9mIDxjb2RlPk9QRU48L2NvZGU+IG9yIDxjb2RlPkNSRUFURTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5ESVJFQ1RPUlkgPC9jb2RlPjx2YXI+YXJjaGl2ZTwvdmFyPjxjb2RlPiAoPC9jb2RlPjx2YXI+bW9kdWxlPC92YXI+PGNvZGU+LCAuLi4gPC9jb2RlPjx2YXI+bW9kdWxlPC92YXI+PGNvZGU+KTwvY29kZT48ZHQ+PGNvZGU+RElSRUNUT1JZIDwvY29kZT48dmFyPmFyY2hpdmU8L3Zhcj48Y29kZT4gKDwvY29kZT48dmFyPm1vZHVsZTwvdmFyPjxjb2RlPiwgLi4uIDwvY29kZT48dmFyPm1vZHVsZTwvdmFyPjxjb2RlPikgPC9jb2RlPjx2YXI+b3V0cHV0ZmlsZTwvdmFyPjxkZD5MaXN0IGVhY2ggbmFtZWQgPHZhcj5tb2R1bGU8L3Zhcj4gcHJlc2VudCBpbiA8dmFyPmFyY2hpdmU8L3Zhcj4uICBUaGUgc2VwYXJhdGUKK2NvbW1hbmQgPGNvZGU+VkVSQk9TRTwvY29kZT4gc3BlY2lmaWVzIHRoZSBmb3JtIG9mIHRoZSBvdXRwdXQ6IHdoZW4gdmVyYm9zZQorb3V0cHV0IGlzIG9mZiwgb3V0cHV0IGlzIGxpa2UgdGhhdCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyIC10IDwvc3Bhbj48dmFyPmFyY2hpdmU8L3Zhcj4KKzx2YXI+bW9kdWxlPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPi4uLjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFdoZW4gdmVyYm9zZSBvdXRwdXQgaXMgb24sIHRoZSBsaXN0aW5nIGlzIGxpa2UKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXIgLXR2IDwvc3Bhbj48dmFyPmFyY2hpdmU8L3Zhcj4gPHZhcj5tb2R1bGU8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Li4uPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPk91dHB1dCBub3JtYWxseSBnb2VzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtOyBob3dldmVyLCBpZiB5b3UKK3NwZWNpZnkgPHZhcj5vdXRwdXRmaWxlPC92YXI+IGFzIGEgZmluYWwgYXJndW1lbnQsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGRpcmVjdHMgdGhlCitvdXRwdXQgdG8gdGhhdCBmaWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5EPC9jb2RlPjxkZD5FeGl0IGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4sIHdpdGggYSA8Y29kZT4wPC9jb2RlPiBleGl0IGNvZGUgdG8gaW5kaWNhdGUgc3VjY2Vzc2Z1bAorY29tcGxldGlvbi4gIFRoaXMgY29tbWFuZCBkb2VzIG5vdCBzYXZlIHRoZSBvdXRwdXQgZmlsZTsgaWYgeW91IGhhdmUKK2NoYW5nZWQgdGhlIGN1cnJlbnQgYXJjaGl2ZSBzaW5jZSB0aGUgbGFzdCA8Y29kZT5TQVZFPC9jb2RlPiBjb21tYW5kLCB0aG9zZQorY2hhbmdlcyBhcmUgbG9zdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPkVYVFJBQ1QgPC9jb2RlPjx2YXI+bW9kdWxlPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5tb2R1bGU8L3Zhcj48Y29kZT4sIC4uLiA8L2NvZGU+PHZhcj5tb2R1bGU8L3Zhcj48ZGQ+RXh0cmFjdCBlYWNoIG5hbWVkIDx2YXI+bW9kdWxlPC92YXI+IGZyb20gdGhlIGN1cnJlbnQgYXJjaGl2ZSwgd3JpdGluZyB0aGVtCitpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhcyBzZXBhcmF0ZSBmaWxlcy4gIEVxdWl2YWxlbnQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hciAteAorPC9zcGFuPjx2YXI+YXJjaGl2ZTwvdmFyPiA8dmFyPm1vZHVsZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4uLi48L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+UmVxdWlyZXMgcHJpb3IgdXNlIG9mIDxjb2RlPk9QRU48L2NvZGU+IG9yIDxjb2RlPkNSRUFURTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5MSVNUPC9jb2RlPjxkZD5EaXNwbGF5IGZ1bGwgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgYXJjaGl2ZSwgaW4gJmxkcXVvO3ZlcmJvc2UmcmRxdW87IHN0eWxlCityZWdhcmRsZXNzIG9mIHRoZSBzdGF0ZSBvZiA8Y29kZT5WRVJCT1NFPC9jb2RlPi4gIFRoZSBlZmZlY3QgaXMgbGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyCit0diA8L3NwYW4+PHZhcj5hcmNoaXZlPC92YXI+PC9zYW1wPiZyc3F1bzsuICAoVGhpcyBzaW5nbGUgY29tbWFuZCBpcyBhIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPgorZW5oYW5jZW1lbnQsIHJhdGhlciB0aGFuIHByZXNlbnQgZm9yIE1SSSBjb21wYXRpYmlsaXR5LikKKworICAgICA8cD5SZXF1aXJlcyBwcmlvciB1c2Ugb2YgPGNvZGU+T1BFTjwvY29kZT4gb3IgPGNvZGU+Q1JFQVRFPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPk9QRU4gPC9jb2RlPjx2YXI+YXJjaGl2ZTwvdmFyPjxkZD5PcGVucyBhbiBleGlzdGluZyBhcmNoaXZlIGZvciB1c2UgYXMgdGhlIGN1cnJlbnQgYXJjaGl2ZSAocmVxdWlyZWQgZm9yCittYW55IG90aGVyIGNvbW1hbmRzKS4gIEFueSBjaGFuZ2VzIGFzIHRoZSByZXN1bHQgb2Ygc3Vic2VxdWVudCBjb21tYW5kcword2lsbCBub3QgYWN0dWFsbHkgYWZmZWN0IDx2YXI+YXJjaGl2ZTwvdmFyPiB1bnRpbCB5b3UgbmV4dCB1c2UgPGNvZGU+U0FWRTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5SRVBMQUNFIDwvY29kZT48dmFyPm1vZHVsZTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+bW9kdWxlPC92YXI+PGNvZGU+LCAuLi4gPC9jb2RlPjx2YXI+bW9kdWxlPC92YXI+PGRkPkluIHRoZSBjdXJyZW50IGFyY2hpdmUsIHJlcGxhY2UgZWFjaCBleGlzdGluZyA8dmFyPm1vZHVsZTwvdmFyPiAobmFtZWQgaW4KK3RoZSA8Y29kZT5SRVBMQUNFPC9jb2RlPiBhcmd1bWVudHMpIGZyb20gZmlsZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIAorVG8gZXhlY3V0ZSB0aGlzIGNvbW1hbmQgd2l0aG91dCBlcnJvcnMsIGJvdGggdGhlIGZpbGUsIGFuZCB0aGUgbW9kdWxlIGluCit0aGUgY3VycmVudCBhcmNoaXZlLCBtdXN0IGV4aXN0LgorCisgICAgIDxwPlJlcXVpcmVzIHByaW9yIHVzZSBvZiA8Y29kZT5PUEVOPC9jb2RlPiBvciA8Y29kZT5DUkVBVEU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+VkVSQk9TRTwvY29kZT48ZGQ+VG9nZ2xlIGFuIGludGVybmFsIGZsYWcgZ292ZXJuaW5nIHRoZSBvdXRwdXQgZnJvbSA8Y29kZT5ESVJFQ1RPUlk8L2NvZGU+LiAKK1doZW4gdGhlIGZsYWcgaXMgb24sIDxjb2RlPkRJUkVDVE9SWTwvY29kZT4gb3V0cHV0IG1hdGNoZXMgb3V0cHV0IGZyb20KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXIgLXR2IDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5TQVZFPC9jb2RlPjxkZD5Db21taXQgeW91ciBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGFyY2hpdmUsIGFuZCBhY3R1YWxseSBzYXZlIGl0IGFzIGEKK2ZpbGUgd2l0aCB0aGUgbmFtZSBzcGVjaWZpZWQgaW4gdGhlIGxhc3QgPGNvZGU+Q1JFQVRFPC9jb2RlPiBvciA8Y29kZT5PUEVOPC9jb2RlPgorY29tbWFuZC4KKworICAgICA8cD5SZXF1aXJlcyBwcmlvciB1c2Ugb2YgPGNvZGU+T1BFTjwvY29kZT4gb3IgPGNvZGU+Q1JFQVRFPC9jb2RlPi4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvYXIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2FyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhNTViNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2FyLmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmFyIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIiB0aXRsZT0iVG9wIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibm0uaHRtbCNubSIgdGl0bGU9Im5tIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJhciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJubS5odG1sI25tIj5ubTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MSBhcjwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFyLTIiPjwvYT48YSBuYW1lPSJpbmRleC1hcmNoaXZlcy0zIj48L2E+PGEgbmFtZT0iaW5kZXgtY29sbGVjdGlvbnMtb2YtZmlsZXMtNCI+PC9hPgorPCEtLSBtYW4gdGl0bGUgYXIgY3JlYXRlLCBtb2RpZnksIGFuZCBleHRyYWN0IGZyb20gYXJjaGl2ZXMgLS0+CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhciBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wbHVnaW48L3NwYW4+PC9zYW1wPiA8dmFyPm5hbWU8L3Zhcj5dIFstXTx2YXI+cDwvdmFyPls8dmFyPm1vZDwvdmFyPiBbPHZhcj5yZWxwb3M8L3Zhcj5dIFs8dmFyPmNvdW50PC92YXI+XV0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdGFyZ2V0PC9zcGFuPjwvc2FtcD4gPHZhcj5iZmRuYW1lPC92YXI+XSA8dmFyPmFyY2hpdmU8L3Zhcj4gWzx2YXI+bWVtYmVyPC92YXI+Li4uXQorICAgICBhciAtTSBbICZsdDttcmktc2NyaXB0IF0KKzwvcHJlPgorICAgPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gYXIgLS0+CisgICA8cD5UaGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IHByb2dyYW0gY3JlYXRlcywgbW9kaWZpZXMsIGFuZCBleHRyYWN0cyBmcm9tCithcmNoaXZlcy4gIEFuIDxkZm4+YXJjaGl2ZTwvZGZuPiBpcyBhIHNpbmdsZSBmaWxlIGhvbGRpbmcgYSBjb2xsZWN0aW9uIG9mCitvdGhlciBmaWxlcyBpbiBhIHN0cnVjdHVyZSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJldHJpZXZlCit0aGUgb3JpZ2luYWwgaW5kaXZpZHVhbCBmaWxlcyAoY2FsbGVkIDxkZm4+bWVtYmVyczwvZGZuPiBvZiB0aGUgYXJjaGl2ZSkuCisKKyAgIDxwPlRoZSBvcmlnaW5hbCBmaWxlcycgY29udGVudHMsIG1vZGUgKHBlcm1pc3Npb25zKSwgdGltZXN0YW1wLCBvd25lciwgYW5kCitncm91cCBhcmUgcHJlc2VydmVkIGluIHRoZSBhcmNoaXZlLCBhbmQgY2FuIGJlIHJlc3RvcmVkIG9uCitleHRyYWN0aW9uLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1uYW1lLWxlbmd0aC01Ij48L2E+PHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGNhbiBtYWludGFpbiBhcmNoaXZlcyB3aG9zZSBtZW1iZXJzIGhhdmUgbmFtZXMgb2YgYW55CitsZW5ndGg7IGhvd2V2ZXIsIGRlcGVuZGluZyBvbiBob3cgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gaXMgY29uZmlndXJlZCBvbiB5b3VyCitzeXN0ZW0sIGEgbGltaXQgb24gbWVtYmVyLW5hbWUgbGVuZ3RoIG1heSBiZSBpbXBvc2VkIGZvciBjb21wYXRpYmlsaXR5Cit3aXRoIGFyY2hpdmUgZm9ybWF0cyBtYWludGFpbmVkIHdpdGggb3RoZXIgdG9vbHMuICBJZiBpdCBleGlzdHMsIHRoZQorbGltaXQgaXMgb2Z0ZW4gMTUgY2hhcmFjdGVycyAodHlwaWNhbCBvZiBmb3JtYXRzIHJlbGF0ZWQgdG8gYS5vdXQpIG9yIDE2CitjaGFyYWN0ZXJzICh0eXBpY2FsIG9mIGZvcm1hdHMgcmVsYXRlZCB0byBjb2ZmKS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbGlicmFyaWVzLTYiPjwvYT48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBpcyBjb25zaWRlcmVkIGEgYmluYXJ5IHV0aWxpdHkgYmVjYXVzZSBhcmNoaXZlcyBvZiB0aGlzIHNvcnQKK2FyZSBtb3N0IG9mdGVuIHVzZWQgYXMgPGRmbj5saWJyYXJpZXM8L2Rmbj4gaG9sZGluZyBjb21tb25seSBuZWVkZWQKK3N1YnJvdXRpbmVzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zeW1ib2wtaW5kZXgtNyI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGNyZWF0ZXMgYW4gaW5kZXggdG8gdGhlIHN5bWJvbHMgZGVmaW5lZCBpbiByZWxvY2F0YWJsZQorb2JqZWN0IG1vZHVsZXMgaW4gdGhlIGFyY2hpdmUgd2hlbiB5b3Ugc3BlY2lmeSB0aGUgbW9kaWZpZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK09uY2UgY3JlYXRlZCwgdGhpcyBpbmRleCBpcyB1cGRhdGVkIGluIHRoZSBhcmNoaXZlIHdoZW5ldmVyIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+CittYWtlcyBhIGNoYW5nZSB0byBpdHMgY29udGVudHMgKHNhdmUgZm9yIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdXBkYXRlIG9wZXJhdGlvbikuIAorQW4gYXJjaGl2ZSB3aXRoIHN1Y2ggYW4gaW5kZXggc3BlZWRzIHVwIGxpbmtpbmcgdG8gdGhlIGxpYnJhcnksIGFuZAorYWxsb3dzIHJvdXRpbmVzIGluIHRoZSBsaWJyYXJ5IHRvIGNhbGwgZWFjaCBvdGhlciB3aXRob3V0IHJlZ2FyZCB0bwordGhlaXIgcGxhY2VtZW50IGluIHRoZSBhcmNoaXZlLgorCisgICA8cD5Zb3UgbWF5IHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5tIC1zPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm0gLS1wcmludC1hcm1hcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBsaXN0IHRoaXMgaW5kZXgKK3RhYmxlLiAgSWYgYW4gYXJjaGl2ZSBsYWNrcyB0aGUgdGFibGUsIGFub3RoZXIgZm9ybSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBjYWxsZWQKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5yYW5saWI8L3NwYW4+PC9zYW1wPiBjYW4gYmUgdXNlZCB0byBhZGQganVzdCB0aGUgdGFibGUuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXRoaW4tYXJjaGl2ZXMtOCI+PC9hPjxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBjYW4gb3B0aW9uYWxseSBjcmVhdGUgYSA8ZW0+dGhpbjwvZW0+IGFyY2hpdmUsCit3aGljaCBjb250YWlucyBhIHN5bWJvbCBpbmRleCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgb3JpZ2luYWwgY29waWVzCitvZiB0aGUgbWVtYmVyIGZpbGVzIG9mIHRoZSBhcmNoaXZlcy4gIFN1Y2ggYW4gYXJjaGl2ZSBpcyB1c2VmdWwKK2ZvciBidWlsZGluZyBsaWJyYXJpZXMgZm9yIHVzZSB3aXRoaW4gYSBsb2NhbCBidWlsZCwgd2hlcmUgdGhlCityZWxvY2F0YWJsZSBvYmplY3RzIGFyZSBleHBlY3RlZCB0byByZW1haW4gYXZhaWxhYmxlLCBhbmQgY29weWluZyB0aGUKK2NvbnRlbnRzIG9mIGVhY2ggb2JqZWN0IHdvdWxkIG9ubHkgd2FzdGUgdGltZSBhbmQgc3BhY2UuICBUaGluIGFyY2hpdmVzCithcmUgYWxzbyA8ZW0+ZmxhdHRlbmVkPC9lbT4sIHNvIHRoYXQgYWRkaW5nIG9uZSBvciBtb3JlIGFyY2hpdmVzIHRvIGEKK3RoaW4gYXJjaGl2ZSB3aWxsIGFkZCB0aGUgZWxlbWVudHMgb2YgdGhlIG5lc3RlZCBhcmNoaXZlIGluZGl2aWR1YWxseS4gCitUaGUgcGF0aHMgdG8gdGhlIGVsZW1lbnRzIG9mIHRoZSBhcmNoaXZlIGFyZSBzdG9yZWQgcmVsYXRpdmUgdG8gdGhlCithcmNoaXZlIGl0c2VsZi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtY29tcGF0aWJpbGl0eV8wMDJjLV8wMDQwY29tbWFuZF8wMDdiYXJfMDA3ZC05Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2Jhcl8wMDdkLWNvbXBhdGliaWxpdHktMTAiPjwvYT48c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gaXMgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHR3byBkaWZmZXJlbnQKK2ZhY2lsaXRpZXMuICBZb3UgY2FuIGNvbnRyb2wgaXRzIGFjdGl2aXR5IHVzaW5nIGNvbW1hbmQtbGluZSBvcHRpb25zLAorbGlrZSB0aGUgZGlmZmVyZW50IHZhcmlldGllcyBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBvbiBVbml4IHN5c3RlbXM7IG9yLCBpZiB5b3UKK3NwZWNpZnkgdGhlIHNpbmdsZSBjb21tYW5kLWxpbmUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NPC9zcGFuPjwvc2FtcD4sIHlvdSBjYW4gY29udHJvbCBpdAord2l0aCBhIHNjcmlwdCBzdXBwbGllZCB2aWEgc3RhbmRhcmQgaW5wdXQsIGxpa2UgdGhlIE1SSSAmbGRxdW87bGlicmFyaWFuJnJkcXVvOworcHJvZ3JhbS4KKworPCEtLSBtYW4gZW5kIC0tPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9ImFyLWNtZGxpbmUuaHRtbCNhci1jbWRsaW5lIj5hciBjbWRsaW5lPC9hPjogICAgICAgICAgICAgICAgICAgQ29udHJvbGxpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gb24gdGhlIGNvbW1hbmQgbGluZQorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iYXItc2NyaXB0cy5odG1sI2FyLXNjcmlwdHMiPmFyIHNjcmlwdHM8L2E+OiAgICAgICAgICAgICAgICAgICBDb250cm9sbGluZyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiB3aXRoIGEgc2NyaXB0Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9jXzAwMmJfMDAyYmZpbHQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2NfMDAyYl8wMDJiZmlsdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOTczNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9jXzAwMmJfMDAyYmZpbHQuaHRtbApAQCAtMCwwICsxLDE4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+YysrZmlsdCAtIEdOVSBCaW5hcnkgVXRpbGl0aWVzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgQmluYXJ5IFV0aWxpdGllcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJpcC5odG1sI3N0cmlwIiB0aXRsZT0ic3RyaXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhZGRyMmxpbmUuaHRtbCNhZGRyMmxpbmUiIHRpdGxlPSJhZGRyMmxpbmUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImMrK2ZpbHQiPjwvYT4KKzxhIG5hbWU9ImNfMDAyYl8wMDJiZmlsdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhZGRyMmxpbmUuaHRtbCNhZGRyMmxpbmUiPmFkZHIybGluZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cmlwLmh0bWwjc3RyaXAiPnN0cmlwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjkgYysrZmlsdDwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNfMDAyYl8wMDJiZmlsdC0xMzYiPjwvYT48YSBuYW1lPSJpbmRleC1kZW1hbmdsaW5nLUNfMDAyYl8wMDJiLXN5bWJvbHMtMTM3Ij48L2E+Cis8IS0tIG1hbiB0aXRsZSBjeHhmaWx0IERlbWFuZ2xlIEMrKyBhbmQgSmF2YSBzeW1ib2xzLiAtLT4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDwhLS0gbWFuIGJlZ2luIFNZTk9QU0lTIGN4eGZpbHQgLS0+CisgICAgIGMrK2ZpbHQgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1fPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpcC11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1uPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1zdHJpcC11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1wYXJhbXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXQ8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXR5cGVzPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby12ZXJib3NlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zPC9zcGFuPjwvc2FtcD4gPHZhcj5mb3JtYXQ8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1mb3JtYXQ9PC9zcGFuPjwvc2FtcD48dmFyPmZvcm1hdDwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9zcGFuPjwvc2FtcD5dICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD5dICBbPHZhcj5zeW1ib2w8L3Zhcj4uLi5dCisgICAgIDwhLS0gbWFuIGVuZCAtLT4KKzwvcHJlPgorICAgPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gY3h4ZmlsdCAtLT4KKyAgIDxwPjxhIG5hbWU9ImluZGV4LWN4eGZpbHQtMTM4Ij48L2E+VGhlIEMrKyBhbmQgSmF2YSBsYW5ndWFnZXMgcHJvdmlkZSBmdW5jdGlvbiBvdmVybG9hZGluZywgd2hpY2ggbWVhbnMKK3RoYXQgeW91IGNhbiB3cml0ZSBtYW55IGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIHByb3ZpZGluZyB0aGF0CitlYWNoIGZ1bmN0aW9uIHRha2VzIHBhcmFtZXRlcnMgb2YgZGlmZmVyZW50IHR5cGVzLiAgSW4gb3JkZXIgdG8gYmUKK2FibGUgdG8gZGlzdGluZ3Vpc2ggdGhlc2Ugc2ltaWxhcmx5IG5hbWVkIGZ1bmN0aW9ucyBDKysgYW5kIEphdmEKK2VuY29kZSB0aGVtIGludG8gYSBsb3ctbGV2ZWwgYXNzZW1ibGVyIG5hbWUgd2hpY2ggdW5pcXVlbHkgaWRlbnRpZmllcworZWFjaCBkaWZmZXJlbnQgdmVyc2lvbi4gIFRoaXMgcHJvY2VzcyBpcyBrbm93biBhcyA8ZGZuPm1hbmdsaW5nPC9kZm4+LiBUaGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jKytmaWx0PC9zcGFuPjwvc2FtcD4KKzxhIHJlbD0iZm9vdG5vdGUiIGhyZWY9IiNmbi0xIiBuYW1lPSJmbmQtMSI+PHN1cD4xPC9zdXA+PC9hPgorcHJvZ3JhbSBkb2VzIHRoZSBpbnZlcnNlIG1hcHBpbmc6IGl0IGRlY29kZXMgKDxkZm4+ZGVtYW5nbGVzPC9kZm4+KSBsb3ctbGV2ZWwKK25hbWVzIGludG8gdXNlci1sZXZlbCBuYW1lcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlYWQuCisKKyAgIDxwPkV2ZXJ5IGFscGhhbnVtZXJpYyB3b3JkIChjb25zaXN0aW5nIG9mIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZXMsCitkb2xsYXJzLCBvciBwZXJpb2RzKSBzZWVuIGluIHRoZSBpbnB1dCBpcyBhIHBvdGVudGlhbCBtYW5nbGVkIG5hbWUuIAorSWYgdGhlIG5hbWUgZGVjb2RlcyBpbnRvIGEgQysrIG5hbWUsIHRoZSBDKysgbmFtZSByZXBsYWNlcyB0aGUKK2xvdy1sZXZlbCBuYW1lIGluIHRoZSBvdXRwdXQsIG90aGVyd2lzZSB0aGUgb3JpZ2luYWwgd29yZCBpcyBvdXRwdXQuIAorSW4gdGhpcyB3YXkgeW91IGNhbiBwYXNzIGFuIGVudGlyZSBhc3NlbWJsZXIgc291cmNlIGZpbGUsIGNvbnRhaW5pbmcKK21hbmdsZWQgbmFtZXMsIHRocm91Z2ggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmMrK2ZpbHQ8L3NwYW4+PC9zYW1wPiBhbmQgc2VlIHRoZSBzYW1lIHNvdXJjZSBmaWxlCitjb250YWluaW5nIGRlbWFuZ2xlZCBuYW1lcy4KKworICAgPHA+WW91IGNhbiBhbHNvIHVzZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YysrZmlsdDwvc3Bhbj48L3NhbXA+IHRvIGRlY2lwaGVyIGluZGl2aWR1YWwgc3ltYm9scyBieQorcGFzc2luZyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmU6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgYysrZmlsdCA8dmFyPnN5bWJvbDwvdmFyPgorPC9wcmU+CisgICA8cD5JZiBubyA8dmFyPnN5bWJvbDwvdmFyPiBhcmd1bWVudHMgYXJlIGdpdmVuLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YysrZmlsdDwvc3Bhbj48L3NhbXA+IHJlYWRzIHN5bWJvbAorbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgaW5zdGVhZC4gIEFsbCB0aGUgcmVzdWx0cyBhcmUgcHJpbnRlZCBvbgordGhlIHN0YW5kYXJkIG91dHB1dC4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcmVhZGluZyBuYW1lcyBmcm9tIHRoZQorY29tbWFuZCBsaW5lIHZlcnN1cyByZWFkaW5nIG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGlzIHRoYXQKK2NvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIGV4cGVjdGVkIHRvIGJlIGp1c3QgbWFuZ2xlZCBuYW1lcyBhbmQgbm8KK2NoZWNraW5nIGlzIHBlcmZvcm1lZCB0byBzZXBhcmF0ZSB0aGVtIGZyb20gc3Vycm91bmRpbmcgdGV4dC4gIFRodXMKK2ZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYysrZmlsdCAtbiBfWjFmdgorPC9wcmU+CisgICA8cD53aWxsIHdvcmsgYW5kIGRlbWFuZ2xlIHRoZSBuYW1lIHRvICZsZHF1bztmKCkmcmRxdW87IHdoZXJlYXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBjKytmaWx0IC1uIF9aMWZ2LAorPC9wcmU+CisgICA8cD53aWxsIG5vdCB3b3JrLiAgKE5vdGUgdGhlIGV4dHJhIGNvbW1hIGF0IHRoZSBlbmQgb2YgdGhlIG1hbmdsZWQKK25hbWUgd2hpY2ggbWFrZXMgaXQgaW52YWxpZCkuICBUaGlzIGNvbW1hbmQgaG93ZXZlciB3aWxsIHdvcms6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBlY2hvIF9aMWZ2LCB8IGMrK2ZpbHQgLW4KKzwvcHJlPgorICAgPHA+YW5kIHdpbGwgZGlzcGxheSAmbGRxdW87ZigpLCZyZHF1bzssIGkuZS4sIHRoZSBkZW1hbmdsZWQgbmFtZSBmb2xsb3dlZCBieSBhCit0cmFpbGluZyBjb21tYS4gIFRoaXMgYmVoYXZpb3VyIGlzIGJlY2F1c2Ugd2hlbiB0aGUgbmFtZXMgYXJlIHJlYWQKK2Zyb20gdGhlIHN0YW5kYXJkIGlucHV0IGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhleSBtaWdodCBiZSBwYXJ0IG9mIGFuCithc3NlbWJsZXIgc291cmNlIGZpbGUgd2hlcmUgdGhlcmUgbWlnaHQgYmUgZXh0cmEsIGV4dHJhbmVvdXMKK2NoYXJhY3RlcnMgdHJhaWxpbmcgYWZ0ZXIgYSBtYW5nbGVkIG5hbWUuICBGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAudHlwZSAgIF9aMWZ2LCBAZnVuY3Rpb24KKzwvcHJlPgorICAgPCEtLSBtYW4gZW5kIC0tPgorPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyBjeHhmaWx0IC0tPgorICAgICA8ZGw+Cis8ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LV88L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0cmlwLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPjxkZD5PbiBzb21lIHN5c3RlbXMsIGJvdGggdGhlIEMgYW5kIEMrKyBjb21waWxlcnMgcHV0IGFuIHVuZGVyc2NvcmUgaW4gZnJvbnQKK29mIGV2ZXJ5IG5hbWUuICBGb3IgZXhhbXBsZSwgdGhlIEMgbmFtZSA8Y29kZT5mb288L2NvZGU+IGdldHMgdGhlIGxvdy1sZXZlbAorbmFtZSA8Y29kZT5fZm9vPC9jb2RlPi4gIFRoaXMgb3B0aW9uIHJlbW92ZXMgdGhlIGluaXRpYWwgdW5kZXJzY29yZS4gIFdoZXRoZXIKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jKytmaWx0PC9zcGFuPjwvc2FtcD4gcmVtb3ZlcyB0aGUgdW5kZXJzY29yZSBieSBkZWZhdWx0IGlzIHRhcmdldCBkZXBlbmRlbnQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tbjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbm8tc3RyaXAtdW5kZXJzY29yZTwvc3Bhbj48L3NhbXA+PGRkPkRvIG5vdCByZW1vdmUgdGhlIGluaXRpYWwgdW5kZXJzY29yZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1wPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1uby1wYXJhbXM8L3NwYW4+PC9zYW1wPjxkZD5XaGVuIGRlbWFuZ2xpbmcgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiwgZG8gbm90IGRpc3BsYXkgdGhlIHR5cGVzIG9mCit0aGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXQ8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXR5cGVzPC9zcGFuPjwvc2FtcD48ZGQ+QXR0ZW1wdCB0byBkZW1hbmdsZSB0eXBlcyBhcyB3ZWxsIGFzIGZ1bmN0aW9uIG5hbWVzLiAgVGhpcyBpcyBkaXNhYmxlZAorYnkgZGVmYXVsdCBzaW5jZSBtYW5nbGVkIHR5cGVzIGFyZSBub3JtYWxseSBvbmx5IHVzZWQgaW50ZXJuYWxseSBpbgordGhlIGNvbXBpbGVyLCBhbmQgdGhleSBjYW4gYmUgY29uZnVzZWQgd2l0aCBub24tbWFuZ2xlZCBuYW1lcy4gIEZvciBleGFtcGxlLAorYSBmdW5jdGlvbiBjYWxsZWQgJmxkcXVvO2EmcmRxdW87IHRyZWF0ZWQgYXMgYSBtYW5nbGVkIHR5cGUgbmFtZSB3b3VsZCBiZQorZGVtYW5nbGVkIHRvICZsZHF1bztzaWduZWQgY2hhciZyZHF1bzsuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4taTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbm8tdmVyYm9zZTwvc3Bhbj48L3NhbXA+PGRkPkRvIG5vdCBpbmNsdWRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgKGlmIGFueSkgaW4gdGhlIGRlbWFuZ2xlZAorb3V0cHV0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXMgPC9zcGFuPjx2YXI+Zm9ybWF0PC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWZvcm1hdD08L3NwYW4+PHZhcj5mb3JtYXQ8L3Zhcj48L3NhbXA+PGRkPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jKytmaWx0PC9zcGFuPjwvc2FtcD4gY2FuIGRlY29kZSB2YXJpb3VzIG1ldGhvZHMgb2YgbWFuZ2xpbmcsIHVzZWQgYnkKK2RpZmZlcmVudCBjb21waWxlcnMuICBUaGUgYXJndW1lbnQgdG8gdGhpcyBvcHRpb24gc2VsZWN0cyB3aGljaAorbWV0aG9kIGl0IHVzZXM6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YXV0bzwvY29kZT48ZGQ+QXV0b21hdGljIHNlbGVjdGlvbiBiYXNlZCBvbiBleGVjdXRhYmxlICh0aGUgZGVmYXVsdCBtZXRob2QpCis8YnI+PGR0Pjxjb2RlPmdudTwvY29kZT48ZGQ+dGhlIG9uZSB1c2VkIGJ5IHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gQysrIGNvbXBpbGVyIChnKyspCis8YnI+PGR0Pjxjb2RlPmx1Y2lkPC9jb2RlPjxkZD50aGUgb25lIHVzZWQgYnkgdGhlIEx1Y2lkIGNvbXBpbGVyIChsY2MpCis8YnI+PGR0Pjxjb2RlPmFybTwvY29kZT48ZGQ+dGhlIG9uZSBzcGVjaWZpZWQgYnkgdGhlIEMrKyBBbm5vdGF0ZWQgUmVmZXJlbmNlIE1hbnVhbAorPGJyPjxkdD48Y29kZT5ocDwvY29kZT48ZGQ+dGhlIG9uZSB1c2VkIGJ5IHRoZSBIUCBjb21waWxlciAoYUNDKQorPGJyPjxkdD48Y29kZT5lZGc8L2NvZGU+PGRkPnRoZSBvbmUgdXNlZCBieSB0aGUgRURHIGNvbXBpbGVyCis8YnI+PGR0Pjxjb2RlPmdudS12MzwvY29kZT48ZGQ+dGhlIG9uZSB1c2VkIGJ5IHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gQysrIGNvbXBpbGVyIChnKyspIHdpdGggdGhlIFYzIEFCSS4gCis8YnI+PGR0Pjxjb2RlPmphdmE8L2NvZGU+PGRkPnRoZSBvbmUgdXNlZCBieSB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IEphdmEgY29tcGlsZXIgKGdjaikKKzxicj48ZHQ+PGNvZGU+Z25hdDwvY29kZT48ZGQ+dGhlIG9uZSB1c2VkIGJ5IHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gQWRhIGNvbXBpbGVyIChHTkFUKS4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jKytmaWx0PC9zcGFuPjwvc2FtcD4gYW5kIGV4aXQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcnNpb248L3NwYW4+PC9zYW1wPjxkZD5QcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmMrK2ZpbHQ8L3NwYW4+PC9zYW1wPiBhbmQgZXhpdC4gCis8L2RsPgorCis8IS0tIG1hbiBlbmQgLS0+CisgICA8YmxvY2txdW90ZT4KKzxlbT5XYXJuaW5nOjwvZW0+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jKytmaWx0PC9zcGFuPjwvc2FtcD4gaXMgYSBuZXcgdXRpbGl0eSwgYW5kIHRoZSBkZXRhaWxzIG9mIGl0cwordXNlciBpbnRlcmZhY2UgYXJlIHN1YmplY3QgdG8gY2hhbmdlIGluIGZ1dHVyZSByZWxlYXNlcy4gIEluIHBhcnRpY3VsYXIsCithIGNvbW1hbmQtbGluZSBvcHRpb24gbWF5IGJlIHJlcXVpcmVkIGluIHRoZSBmdXR1cmUgdG8gZGVjb2RlIGEgbmFtZQorcGFzc2VkIGFzIGFuIGFyZ3VtZW50IG9uIHRoZSBjb21tYW5kIGxpbmU7IGluIG90aGVyIHdvcmRzLAorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIGMrK2ZpbHQgPHZhcj5zeW1ib2w8L3Zhcj4KKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5tYXkgaW4gYSBmdXR1cmUgcmVsZWFzZSBiZWNvbWUKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBjKytmaWx0IDx2YXI+b3B0aW9uPC92YXI+IDx2YXI+c3ltYm9sPC92YXI+Cis8L3ByZT4KKyAgIDwvYmxvY2txdW90ZT4KKworICAgPGRpdiBjbGFzcz0iZm9vdG5vdGUiPgorPGhyPgorPGg0PkZvb3Rub3RlczwvaDQ+PHAgY2xhc3M9ImZvb3Rub3RlIj48c21hbGw+WzxhIG5hbWU9ImZuLTEiIGhyZWY9IiNmbmQtMSI+MTwvYT5dPC9zbWFsbD4gTVMtRE9TIGRvZXMgbm90IGFsbG93IDxrYmQ+Kzwva2JkPiBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMsIHNvIG9uCitNUy1ET1MgdGhpcyBwcm9ncmFtIGlzIG5hbWVkIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5DWFhGSUxUPC9zcGFuPjwvc2FtcD4uPC9wPgorCisgICA8aHI+PC9kaXY+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2RlZi1maWxlLWZvcm1hdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvZGVmLWZpbGUtZm9ybWF0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1N2U2NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2RlZi1maWxlLWZvcm1hdC5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmRlZiBmaWxlIGZvcm1hdCAtIEdOVSBCaW5hcnkgVXRpbGl0aWVzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgQmluYXJ5IFV0aWxpdGllcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iZGxsdG9vbC5odG1sI2RsbHRvb2wiIHRpdGxlPSJkbGx0b29sIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJkZWYtZmlsZS1mb3JtYXQiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJkbGx0b29sLmh0bWwjZGxsdG9vbCI+ZGxsdG9vbDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjE0LjEgVGhlIGZvcm1hdCBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmRsbHRvb2w8L3NwYW4+PC9zYW1wPiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmRlZjwvc3Bhbj48L3NhbXA+IGZpbGU8L2gzPgorCis8cD5BIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZGVmPC9zcGFuPjwvc2FtcD4gZmlsZSBjb250YWlucyBhbnkgbnVtYmVyIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPk5BTUU8L2NvZGU+IDx2YXI+bmFtZTwvdmFyPiA8Y29kZT5bICw8L2NvZGU+IDx2YXI+YmFzZTwvdmFyPiA8Y29kZT5dPC9jb2RlPjxkZD5UaGUgcmVzdWx0IGlzIGdvaW5nIHRvIGJlIG5hbWVkIDx2YXI+bmFtZTwvdmFyPjxjb2RlPi5leGU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+TElCUkFSWTwvY29kZT4gPHZhcj5uYW1lPC92YXI+IDxjb2RlPlsgLDwvY29kZT4gPHZhcj5iYXNlPC92YXI+IDxjb2RlPl08L2NvZGU+PGRkPlRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgbmFtZWQgPHZhcj5uYW1lPC92YXI+PGNvZGU+LmRsbDwvY29kZT4uIAorTm90ZTogSWYgeW91IHdhbnQgdG8gdXNlIExJQlJBUlkgYXMgbmFtZSB0aGVuIHlvdSBuZWVkIHRvIHF1b3RlLiAgT3RoZXJ3aXNlCit0aGlzIHdpbGwgZmFpbCBkdWUgYSBuZWNlc3NhcnkgaGFjayBmb3IgbGlidG9vbCAoc2VlIFBSIGJpbnV0aWxzLzEzNzEwIGZvciBtb3JlCitkZXRhaWxzKS4KKworICAgICA8YnI+PGR0Pjxjb2RlPkVYUE9SVFMgKCAoICg8L2NvZGU+IDx2YXI+bmFtZTE8L3Zhcj4gPGNvZGU+WyA9IDwvY29kZT4gPHZhcj5uYW1lMjwvdmFyPiA8Y29kZT5dICkgfCAoIDwvY29kZT4gPHZhcj5uYW1lMTwvdmFyPiA8Y29kZT49PC9jb2RlPiA8dmFyPm1vZHVsZS1uYW1lPC92YXI+IDxjb2RlPi48L2NvZGU+IDx2YXI+ZXh0ZXJuYWwtbmFtZTwvdmFyPiA8Y29kZT4pICkgWyA9PSA8L2NvZGU+IDx2YXI+aXRzX25hbWU8L3Zhcj4gPGNvZGU+XTwvY29kZT48YnI+PGR0Pjxjb2RlPls8L2NvZGU+IDx2YXI+aW50ZWdlcjwvdmFyPiA8Y29kZT5dIFsgTk9OQU1FIF0gWyBDT05TVEFOVCBdIFsgREFUQSBdIFsgUFJJVkFURSBdICkgKjwvY29kZT48ZGQ+RGVjbGFyZXMgPHZhcj5uYW1lMTwvdmFyPiBhcyBhbiBleHBvcnRlZCBzeW1ib2wgZnJvbSB0aGUgRExMLCB3aXRoIG9wdGlvbmFsCitvcmRpbmFsIG51bWJlciA8dmFyPmludGVnZXI8L3Zhcj4sIG9yIGRlY2xhcmVzIDx2YXI+bmFtZTE8L3Zhcj4gYXMgYW4gYWxpYXMKKyhmb3J3YXJkKSBvZiB0aGUgZnVuY3Rpb24gPHZhcj5leHRlcm5hbC1uYW1lPC92YXI+IGluIHRoZSBETEwuIAorSWYgPHZhcj5pdHNfbmFtZTwvdmFyPiBpcyBzcGVjaWZpZWQsIHRoaXMgbmFtZSBpcyB1c2VkIGFzIHN0cmluZyBpbiBleHBvcnQgdGFibGUuIAorPHZhcj5tb2R1bGUtbmFtZTwvdmFyPi4gCitOb3RlOiBUaGUgPGNvZGU+RVhQT1JUUzwvY29kZT4gaGFzIHRvIGJlIHRoZSBsYXN0IGNvbW1hbmQgaW4gLmRlZiBmaWxlLCBhcyBrZXl3b3JkcworYXJlIHRyZWF0ZWQgLSBiZXNpZGUgPGNvZGU+TElCUkFSWTwvY29kZT4gLSBhcyBzaW1wbGUgbmFtZS1pZGVudGlmaWVycy4gCitJZiB5b3Ugd2FudCB0byB1c2UgTElCUkFSWSBhcyBuYW1lIHRoZW4geW91IG5lZWQgdG8gcXVvdGUgaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5JTVBPUlRTICggKDwvY29kZT4gPHZhcj5pbnRlcm5hbC1uYW1lPC92YXI+IDxjb2RlPj08L2NvZGU+IDx2YXI+bW9kdWxlLW5hbWU8L3Zhcj4gPGNvZGU+LjwvY29kZT4gPHZhcj5pbnRlZ2VyPC92YXI+IDxjb2RlPikgfCBbPC9jb2RlPiA8dmFyPmludGVybmFsLW5hbWU8L3Zhcj4gPGNvZGU+PSBdPC9jb2RlPiA8dmFyPm1vZHVsZS1uYW1lPC92YXI+IDxjb2RlPi48L2NvZGU+IDx2YXI+ZXh0ZXJuYWwtbmFtZTwvdmFyPiA8Y29kZT4pIFsgPT0gKSA8L2NvZGU+PHZhcj5pdHNfbmFtZTwvdmFyPjxjb2RlPiBdICo8L2NvZGU+PGRkPkRlY2xhcmVzIHRoYXQgPHZhcj5leHRlcm5hbC1uYW1lPC92YXI+IG9yIHRoZSBleHBvcnRlZCBmdW5jdGlvbiB3aG9zZQorb3JkaW5hbCBudW1iZXIgaXMgPHZhcj5pbnRlZ2VyPC92YXI+IGlzIHRvIGJlIGltcG9ydGVkIGZyb20gdGhlIGZpbGUKKzx2YXI+bW9kdWxlLW5hbWU8L3Zhcj4uICBJZiA8dmFyPmludGVybmFsLW5hbWU8L3Zhcj4gaXMgc3BlY2lmaWVkIHRoZW4gdGhpcyBpcwordGhlIG5hbWUgdGhhdCB0aGUgaW1wb3J0ZWQgZnVuY3Rpb24gd2lsbCBiZSByZWZlcnJlZCB0byBpbiB0aGUgYm9keSBvZgordGhlIERMTC4gCitJZiA8dmFyPml0c19uYW1lPC92YXI+IGlzIHNwZWNpZmllZCwgdGhpcyBuYW1lIGlzIHVzZWQgYXMgc3RyaW5nIGluIGltcG9ydCB0YWJsZS4gCitOb3RlOiBUaGUgPGNvZGU+SU1QT1JUUzwvY29kZT4gaGFzIHRvIGJlIHRoZSBsYXN0IGNvbW1hbmQgaW4gLmRlZiBmaWxlLCBhcyBrZXl3b3JkcworYXJlIHRyZWF0ZWQgLSBiZXNpZGUgPGNvZGU+TElCUkFSWTwvY29kZT4gLSBhcyBzaW1wbGUgbmFtZS1pZGVudGlmaWVycy4gCitJZiB5b3Ugd2FudCB0byB1c2UgTElCUkFSWSBhcyBuYW1lIHRoZW4geW91IG5lZWQgdG8gcXVvdGUgaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5ERVNDUklQVElPTjwvY29kZT4gPHZhcj5zdHJpbmc8L3Zhcj48ZGQ+UHV0cyA8dmFyPnN0cmluZzwvdmFyPiBpbnRvIHRoZSBvdXRwdXQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5leHA8L3NwYW4+PC9zYW1wPiBmaWxlIGluIHRoZQorPGNvZGU+LnJkYXRhPC9jb2RlPiBzZWN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+U1RBQ0tTSVpFPC9jb2RlPiA8dmFyPm51bWJlci1yZXNlcnZlPC92YXI+IDxjb2RlPlssIDwvY29kZT4gPHZhcj5udW1iZXItY29tbWl0PC92YXI+IDxjb2RlPl08L2NvZGU+PGJyPjxkdD48Y29kZT5IRUFQU0laRTwvY29kZT4gPHZhcj5udW1iZXItcmVzZXJ2ZTwvdmFyPiA8Y29kZT5bLCA8L2NvZGU+IDx2YXI+bnVtYmVyLWNvbW1pdDwvdmFyPiA8Y29kZT5dPC9jb2RlPjxkZD5HZW5lcmF0ZXMgPGNvZGU+LS1zdGFjazwvY29kZT4gb3IgPGNvZGU+LS1oZWFwPC9jb2RlPgorPHZhcj5udW1iZXItcmVzZXJ2ZTwvdmFyPiw8dmFyPm51bWJlci1jb21taXQ8L3Zhcj4gaW4gdGhlIG91dHB1dCA8Y29kZT4uZHJlY3R2ZTwvY29kZT4KK3NlY3Rpb24uICBUaGUgbGlua2VyIHdpbGwgc2VlIHRoaXMgYW5kIGFjdCB1cG9uIGl0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Q09ERTwvY29kZT4gPHZhcj5hdHRyPC92YXI+IDxjb2RlPis8L2NvZGU+PGJyPjxkdD48Y29kZT5EQVRBPC9jb2RlPiA8dmFyPmF0dHI8L3Zhcj4gPGNvZGU+KzwvY29kZT48YnI+PGR0Pjxjb2RlPlNFQ1RJT05TICg8L2NvZGU+IDx2YXI+c2VjdGlvbi1uYW1lPC92YXI+IDx2YXI+YXR0cjwvdmFyPjxjb2RlPiArICkgKjwvY29kZT48ZGQ+R2VuZXJhdGVzIDxjb2RlPi0tYXR0cjwvY29kZT4gPHZhcj5zZWN0aW9uLW5hbWU8L3Zhcj4gPHZhcj5hdHRyPC92YXI+IGluIHRoZSBvdXRwdXQKKzxjb2RlPi5kcmVjdHZlPC9jb2RlPiBzZWN0aW9uLCB3aGVyZSA8dmFyPmF0dHI8L3Zhcj4gaXMgb25lIG9mIDxjb2RlPlJFQUQ8L2NvZGU+LAorPGNvZGU+V1JJVEU8L2NvZGU+LCA8Y29kZT5FWEVDVVRFPC9jb2RlPiBvciA8Y29kZT5TSEFSRUQ8L2NvZGU+LiAgVGhlIGxpbmtlciB3aWxsIHNlZQordGhpcyBhbmQgYWN0IHVwb24gaXQuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2RsbHRvb2wuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2RsbHRvb2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmJmYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvZGxsdG9vbC5odG1sCkBAIC0wLDAgKzEsMzE0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5kbGx0b29sIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IndpbmRyZXMuaHRtbCN3aW5kcmVzIiB0aXRsZT0id2luZHJlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InJlYWRlbGYuaHRtbCNyZWFkZWxmIiB0aXRsZT0icmVhZGVsZiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZGxsdG9vbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IndpbmRyZXMuaHRtbCN3aW5kcmVzIj53aW5kcmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjE0IGRsbHRvb2w8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1ETEwtMTQzIj48L2E+PGEgbmFtZT0iaW5kZXgtZGxsdG9vbC0xNDQiPjwvYT4KKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gaXMgdXNlZCB0byBjcmVhdGUgdGhlIGZpbGVzIG5lZWRlZCB0byBjcmVhdGUgZHluYW1pYworbGluayBsaWJyYXJpZXMgKERMTHMpIG9uIHN5c3RlbXMgd2hpY2ggdW5kZXJzdGFuZCBQRSBmb3JtYXQgaW1hZ2UKK2ZpbGVzIHN1Y2ggYXMgV2luZG93cy4gIEEgRExMIGNvbnRhaW5zIGFuIGV4cG9ydCB0YWJsZSB3aGljaCBjb250YWlucworaW5mb3JtYXRpb24gdGhhdCB0aGUgcnVudGltZSBsb2FkZXIgbmVlZHMgdG8gcmVzb2x2ZSByZWZlcmVuY2VzIGZyb20gYQorcmVmZXJlbmNpbmcgcHJvZ3JhbS4KKworICAgPHA+VGhlIGV4cG9ydCB0YWJsZSBpcyBnZW5lcmF0ZWQgYnkgdGhpcyBwcm9ncmFtIGJ5IHJlYWRpbmcgaW4gYQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWY8L3NwYW4+PC9zYW1wPiBmaWxlIG9yIHNjYW5uaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmE8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5vPC9zcGFuPjwvc2FtcD4gZmlsZXMgd2hpY2gKK3dpbGwgYmUgaW4gdGhlIERMTC4gIEEgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5vPC9zcGFuPjwvc2FtcD4gZmlsZSBjYW4gY29udGFpbiBpbmZvcm1hdGlvbiBpbgorc3BlY2lhbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kcmVjdHZlPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb25zIHdpdGggZXhwb3J0IGluZm9ybWF0aW9uLgorCisgICA8YmxvY2txdW90ZT4KKzxlbT5Ob3RlOjwvZW0+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gaXMgbm90IGFsd2F5cyBidWlsdCBhcyBwYXJ0IG9mIHRoZQorYmluYXJ5IHV0aWxpdGllcywgc2luY2UgaXQgaXMgb25seSB1c2VmdWwgZm9yIHRob3NlIHRhcmdldHMgd2hpY2gKK3N1cHBvcnQgRExMcy4gCis8L2Jsb2NrcXVvdGU+CisKKzwhLS0gbWFuIHRpdGxlIGRsbHRvb2wgQ3JlYXRlIGZpbGVzIG5lZWRlZCB0byBidWlsZCBhbmQgdXNlIERMTHMuIC0tPgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDwhLS0gbWFuIGJlZ2luIFNZTk9QU0lTIGRsbHRvb2wgLS0+CisgICAgIGRsbHRvb2wgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1pbnB1dC1kZWY8L3NwYW4+PC9zYW1wPiA8dmFyPmRlZi1maWxlLW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1iPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1iYXNlLWZpbGU8L3NwYW4+PC9zYW1wPiA8dmFyPmJhc2UtZmlsZS1uYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWV4cDwvc3Bhbj48L3NhbXA+IDx2YXI+ZXhwb3J0cy1maWxlLW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi16PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQtZGVmPC9zcGFuPjwvc2FtcD4gPHZhcj5kZWYtZmlsZS1uYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LWxpYjwvc3Bhbj48L3NhbXA+IDx2YXI+bGlicmFyeS1maWxlLW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi15PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQtZGVsYXlsaWI8L3NwYW4+PC9zYW1wPiA8dmFyPmxpYnJhcnktZmlsZS1uYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWV4cG9ydC1hbGwtc3ltYm9sczwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1leHBvcnQtYWxsLXN5bWJvbHM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1leGNsdWRlLXN5bWJvbHM8L3NwYW4+PC9zYW1wPiA8dmFyPmxpc3Q8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tZGVmYXVsdC1leGNsdWRlczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYXM8L3NwYW4+PC9zYW1wPiA8dmFyPnBhdGgtdG8tYXNzZW1ibGVyPC92YXI+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFzLWZsYWdzPC9zcGFuPjwvc2FtcD4gPHZhcj5vcHRpb25zPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZGxsbmFtZTwvc3Bhbj48L3NhbXA+IDx2YXI+bmFtZTwvdmFyPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1tYWNoaW5lPC9zcGFuPjwvc2FtcD4gPHZhcj5tYWNoaW5lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYWRkLWluZGlyZWN0PC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1VPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hZGQtdW5kZXJzY29yZTwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hZGQtc3RkY2FsbC11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1rPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1raWxsLWF0PC9zcGFuPjwvc2FtcD5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYWRkLXN0ZGNhbGwtYWxpYXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXA8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWV4dC1wcmVmaXgtYWxpYXM8L3NwYW4+PC9zYW1wPiA8dmFyPnByZWZpeDwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXg8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLWlkYXRhNDwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWM8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLWlkYXRhNTwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXVzZS1udWwtcHJlZml4ZWQtaW1wb3J0LXRhYmxlczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taWRlbnRpZnk8L3NwYW4+PC9zYW1wPiA8dmFyPmxpYnJhcnktZmlsZS1uYW1lPC92YXI+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1pZGVudGlmeS1zdHJpY3Q8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWk8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWludGVyd29yazwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbjwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm9kZWxldGU8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi10PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS10ZW1wLXByZWZpeDwvc3Bhbj48L3NhbXA+IDx2YXI+cHJlZml4PC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdjwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdmVyYm9zZTwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGVscDwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb248L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1sZWFkaW5nLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbGVhZGluZy11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgW29iamVjdC1maWxlIC4uLl0KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiBkbGx0b29sIC0tPgorICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmRsbHRvb2w8L3NwYW4+PC9zYW1wPiByZWFkcyBpdHMgaW5wdXRzLCB3aGljaCBjYW4gY29tZSBmcm9tIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZDwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWI8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFzIHdlbGwgYXMgb2JqZWN0IGZpbGVzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZAorbGluZS4gIEl0IHRoZW4gcHJvY2Vzc2VzIHRoZXNlIGlucHV0cyBhbmQgaWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1lPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGhhcworYmVlbiBzcGVjaWZpZWQgaXQgY3JlYXRlcyBhIGV4cG9ydHMgZmlsZS4gIElmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+IG9wdGlvbgoraGFzIGJlZW4gc3BlY2lmaWVkIGl0IGNyZWF0ZXMgYSBsaWJyYXJ5IGZpbGUgYW5kIGlmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tejwvc3Bhbj48L3NhbXA+IG9wdGlvbgoraGFzIGJlZW4gc3BlY2lmaWVkIGl0IGNyZWF0ZXMgYSBkZWYgZmlsZS4gIEFueSBvciBhbGwgb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1lPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tejwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgY2FuIGJlIHByZXNlbnQgaW4gb25lIGludm9jYXRpb24gb2YKK2RsbHRvb2wuCisKKyAgIDxwPldoZW4gY3JlYXRpbmcgYSBETEwsIGFsb25nIHdpdGggdGhlIHNvdXJjZSBmb3IgdGhlIERMTCwgaXQgaXMgbmVjZXNzYXJ5Cit0byBoYXZlIHRocmVlIG90aGVyIGZpbGVzLiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmRsbHRvb2w8L3NwYW4+PC9zYW1wPiBjYW4gaGVscCB3aXRoIHRoZSBjcmVhdGlvbiBvZgordGhlc2UgZmlsZXMuCisKKyAgIDxwPlRoZSBmaXJzdCBmaWxlIGlzIGEgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWY8L3NwYW4+PC9zYW1wPiBmaWxlIHdoaWNoIHNwZWNpZmllcyB3aGljaCBmdW5jdGlvbnMgYXJlCitleHBvcnRlZCBmcm9tIHRoZSBETEwsIHdoaWNoIGZ1bmN0aW9ucyB0aGUgRExMIGltcG9ydHMsIGFuZCBzbyBvbi4gIFRoaXMKK2lzIGEgdGV4dCBmaWxlIGFuZCBjYW4gYmUgY3JlYXRlZCBieSBoYW5kLCBvciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZGxsdG9vbDwvc3Bhbj48L3NhbXA+IGNhbiBiZSB1c2VkCit0byBjcmVhdGUgaXQgdXNpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi16PC9zcGFuPjwvc2FtcD4gb3B0aW9uLiAgSW4gdGhpcyBjYXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4KK3dpbGwgc2NhbiB0aGUgb2JqZWN0IGZpbGVzIHNwZWNpZmllZCBvbiBpdHMgY29tbWFuZCBsaW5lIGxvb2tpbmcgZm9yCit0aG9zZSBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBiZWVuIHNwZWNpYWxseSBtYXJrZWQgYXMgYmVpbmcgZXhwb3J0ZWQgYW5kCitwdXQgZW50cmllcyBmb3IgdGhlbSBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWY8L3NwYW4+PC9zYW1wPiBmaWxlIGl0IGNyZWF0ZXMuCisKKyAgIDxwPkluIG9yZGVyIHRvIG1hcmsgYSBmdW5jdGlvbiBhcyBiZWluZyBleHBvcnRlZCBmcm9tIGEgRExMLCBpdCBuZWVkcyB0bworaGF2ZSBhbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZXhwb3J0OiZsdDtuYW1lX29mX2Z1bmN0aW9uJmd0Ozwvc3Bhbj48L3NhbXA+IGVudHJ5IGluIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kcmVjdHZlPC9zcGFuPjwvc2FtcD4mcnNxdW87CitzZWN0aW9uIG9mIHRoZSBvYmplY3QgZmlsZS4gIFRoaXMgY2FuIGJlIGRvbmUgaW4gQyBieSB1c2luZyB0aGUKK2FzbSgpIG9wZXJhdG9yOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBhc20gKCIuc2VjdGlvbiAuZHJlY3R2ZSIpOworICAgICAgIGFzbSAoIi5hc2NpaSBcIi1leHBvcnQ6bXlfZnVuY1wiIik7CisgICAgIAorICAgICAgIGludCBteV9mdW5jICh2b2lkKSB7IC4uLiB9Cis8L3ByZT4KKyAgIDxwPlRoZSBzZWNvbmQgZmlsZSBuZWVkZWQgZm9yIERMTCBjcmVhdGlvbiBpcyBhbiBleHBvcnRzIGZpbGUuICBUaGlzIGZpbGUKK2lzIGxpbmtlZCB3aXRoIHRoZSBvYmplY3QgZmlsZXMgdGhhdCBtYWtlIHVwIHRoZSBib2R5IG9mIHRoZSBETEwgYW5kIGl0CitoYW5kbGVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgRExMIGFuZCB0aGUgb3V0c2lkZSB3b3JsZC4gIFRoaXMgaXMgYQorYmluYXJ5IGZpbGUgYW5kIGl0IGNhbiBiZSBjcmVhdGVkIGJ5IGdpdmluZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWU8L3NwYW4+PC9zYW1wPiBvcHRpb24gdG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gd2hlbiBpdCBpcyBjcmVhdGluZyBvciByZWFkaW5nIGluIGEgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWY8L3NwYW4+PC9zYW1wPiBmaWxlLgorCisgICA8cD5UaGUgdGhpcmQgZmlsZSBuZWVkZWQgZm9yIERMTCBjcmVhdGlvbiBpcyB0aGUgbGlicmFyeSBmaWxlIHRoYXQgcHJvZ3JhbXMKK3dpbGwgbGluayB3aXRoIGluIG9yZGVyIHRvIGFjY2VzcyB0aGUgZnVuY3Rpb25zIGluIHRoZSBETEwgKGFuIGBpbXBvcnQKK2xpYnJhcnknKS4gIFRoaXMgZmlsZSBjYW4gYmUgY3JlYXRlZCBieSBnaXZpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHRvCitkbGx0b29sIHdoZW4gaXQgaXMgY3JlYXRpbmcgb3IgcmVhZGluZyBpbiBhIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZGVmPC9zcGFuPjwvc2FtcD4gZmlsZS4KKworICAgPHA+SWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi15PC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHNwZWNpZmllZCwgZGxsdG9vbCBnZW5lcmF0ZXMgYSBkZWxheS1pbXBvcnQKK2xpYnJhcnkgdGhhdCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgaW1wb3J0IGxpYnJhcnkgdG8gYWxsb3cKK2EgcHJvZ3JhbSB0byBsaW5rIHRvIHRoZSBkbGwgb25seSBhcyBzb29uIGFzIGFuIGltcG9ydGVkIGZ1bmN0aW9uIGlzCitjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLiBUaGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgd2lsbCBuZWVkIHRvIGJlCitsaW5rZWQgdG8gdGhlIHN0YXRpYyBkZWxheWltcCBsaWJyYXJ5IGNvbnRhaW5pbmcgX19kZWxheUxvYWRIZWxwZXIyKCksCit3aGljaCBpbiB0dXJuIHdpbGwgaW1wb3J0IExvYWRMaWJyYXJ5QSBhbmQgR2V0UHJvY0FkZHJlc3MgZnJvbSBrZXJuZWwzMi4KKworICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmRsbHRvb2w8L3NwYW4+PC9zYW1wPiBidWlsZHMgdGhlIGxpYnJhcnkgZmlsZSBieSBoYW5kLCBidXQgaXQgYnVpbGRzIHRoZQorZXhwb3J0cyBmaWxlIGJ5IGNyZWF0aW5nIHRlbXBvcmFyeSBmaWxlcyBjb250YWluaW5nIGFzc2VtYmxlciBzdGF0ZW1lbnRzCithbmQgdGhlbiBhc3NlbWJsaW5nIHRoZXNlLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1TPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbiBjYW4gYmUKK3VzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgYXNzZW1ibGVyIHRoYXQgZGxsdG9vbCB3aWxsIHVzZSwKK2FuZCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWY8L3NwYW4+PC9zYW1wPiBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcGFzcyBzcGVjaWZpYyBmbGFncyB0byB0aGF0Cithc3NlbWJsZXIuICBUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW48L3NwYW4+PC9zYW1wPiBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IGRsbHRvb2wgZnJvbSBkZWxldGluZwordGhlc2UgdGVtcG9yYXJ5IGFzc2VtYmxlciBmaWxlcyB3aGVuIGl0IGlzIGRvbmUsIGFuZCBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbjwvc3Bhbj48L3NhbXA+IGlzCitzcGVjaWZpZWQgdHdpY2UgdGhlbiB0aGlzIHdpbGwgcHJldmVudCBkbGx0b29sIGZyb20gZGVsZXRpbmcgdGhlCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGVzIGl0IHVzZWQgdG8gYnVpbGQgdGhlIGxpYnJhcnkuCisKKyAgIDxwPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBjcmVhdGluZyBhIERMTCBmcm9tIGEgc291cmNlIGZpbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kbGwuYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQKK2Fsc28gY3JlYXRpbmcgYSBwcm9ncmFtIChmcm9tIGFuIG9iamVjdCBmaWxlIGNhbGxlZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByb2dyYW0ubzwvc3Bhbj48L3NhbXA+JnJzcXVvOykKK3RoYXQgdXNlcyB0aGF0IERMTDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgZ2NjIC1jIGRsbC5jCisgICAgICAgZGxsdG9vbCAtZSBleHBvcnRzLm8gLWwgZGxsLmxpYiBkbGwubworICAgICAgIGdjYyBkbGwubyBleHBvcnRzLm8gLW8gZGxsLmRsbAorICAgICAgIGdjYyBwcm9ncmFtLm8gZGxsLmxpYiAtbyBwcm9ncmFtCis8L3ByZT4KKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gbWF5IGFsc28gYmUgdXNlZCB0byBxdWVyeSBhbiBleGlzdGluZyBpbXBvcnQgbGlicmFyeQordG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBETEwgdG8gd2hpY2ggaXQgaXMgYXNzb2NpYXRlZC4gIFNlZSB0aGUKK2Rlc2NyaXB0aW9uIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taWRlbnRpZnk8L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKzwhLS0gbWFuIGVuZCAtLT4KKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgZGxsdG9vbCAtLT4KKyAgIDxwPlRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisKKyAgICAgPGRsPgorPGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1kIDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWlucHV0LWRlZiA8L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtaW5wdXQtXzAwMmVkZWYtZmlsZS0xNDUiPjwvYT5TcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmRlZjwvc3Bhbj48L3NhbXA+IGZpbGUgdG8gYmUgcmVhZCBpbiBhbmQgcHJvY2Vzc2VkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWIgPC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYmFzZS1maWxlIDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1iYXNlLWZpbGVzLTE0NiI+PC9hPlNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGJhc2UgZmlsZSB0byBiZSByZWFkIGluIGFuZCBwcm9jZXNzZWQuICBUaGUKK2NvbnRlbnRzIG9mIHRoaXMgZmlsZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWxvY2F0aW9uIHNlY3Rpb24gaW4gdGhlCitleHBvcnRzIGZpbGUgZ2VuZXJhdGVkIGJ5IGRsbHRvb2wuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZSA8L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1vdXRwdXQtZXhwIDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGV4cG9ydCBmaWxlIHRvIGJlIGNyZWF0ZWQgYnkgZGxsdG9vbC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi16IDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW91dHB1dC1kZWYgPC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGRkPlNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWY8L3NwYW4+PC9zYW1wPiBmaWxlIHRvIGJlIGNyZWF0ZWQgYnkgZGxsdG9vbC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1sIDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW91dHB1dC1saWIgPC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGRkPlNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBmaWxlIHRvIGJlIGNyZWF0ZWQgYnkgZGxsdG9vbC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi15IDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW91dHB1dC1kZWxheWxpYiA8L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZGQ+U3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBkZWxheS1pbXBvcnQgbGlicmFyeSBmaWxlIHRvIGJlIGNyZWF0ZWQgYnkgZGxsdG9vbC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZXhwb3J0LWFsbC1zeW1ib2xzPC9zcGFuPjwvc2FtcD48ZGQ+VHJlYXQgYWxsIGdsb2JhbCBhbmQgd2VhayBkZWZpbmVkIHN5bWJvbHMgZm91bmQgaW4gdGhlIGlucHV0IG9iamVjdAorZmlsZXMgYXMgc3ltYm9scyB0byBiZSBleHBvcnRlZC4gIFRoZXJlIGlzIGEgc21hbGwgbGlzdCBvZiBzeW1ib2xzIHdoaWNoCithcmUgbm90IGV4cG9ydGVkIGJ5IGRlZmF1bHQ7IHNlZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1kZWZhdWx0LWV4Y2x1ZGVzPC9zcGFuPjwvc2FtcD4KK29wdGlvbi4gIFlvdSBtYXkgYWRkIHRvIHRoZSBsaXN0IG9mIHN5bWJvbHMgdG8gbm90IGV4cG9ydCBieSB1c2luZyB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZXhjbHVkZS1zeW1ib2xzPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1uby1leHBvcnQtYWxsLXN5bWJvbHM8L3NwYW4+PC9zYW1wPjxkZD5Pbmx5IGV4cG9ydCBzeW1ib2xzIGV4cGxpY2l0bHkgbGlzdGVkIGluIGFuIGlucHV0IDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZGVmPC9zcGFuPjwvc2FtcD4gZmlsZSBvciBpbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZHJlY3R2ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9ucyBpbiB0aGUgaW5wdXQgb2JqZWN0IGZpbGVzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorYmVoYXZpb3VyLiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRyZWN0dmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbnMgYXJlIGNyZWF0ZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kbGxleHBvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2F0dHJpYnV0ZXMgaW4gdGhlIHNvdXJjZSBjb2RlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1leGNsdWRlLXN5bWJvbHMgPC9zcGFuPjx2YXI+bGlzdDwvdmFyPjwvc2FtcD48ZGQ+RG8gbm90IGV4cG9ydCB0aGUgc3ltYm9scyBpbiA8dmFyPmxpc3Q8L3Zhcj4uICBUaGlzIGlzIGEgbGlzdCBvZiBzeW1ib2wgbmFtZXMKK3NlcGFyYXRlZCBieSBjb21tYSBvciBjb2xvbiBjaGFyYWN0ZXJzLiAgVGhlIHN5bWJvbCBuYW1lcyBzaG91bGQgbm90Citjb250YWluIGEgbGVhZGluZyB1bmRlcnNjb3JlLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1leHBvcnQtYWxsLXN5bWJvbHM8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1uby1kZWZhdWx0LWV4Y2x1ZGVzPC9zcGFuPjwvc2FtcD48ZGQ+V2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWV4cG9ydC1hbGwtc3ltYm9sczwvc3Bhbj48L3NhbXA+IGlzIHVzZWQsIGl0IHdpbGwgYnkgZGVmYXVsdCBhdm9pZAorZXhwb3J0aW5nIGNlcnRhaW4gc3BlY2lhbCBzeW1ib2xzLiAgVGhlIGN1cnJlbnQgbGlzdCBvZiBzeW1ib2xzIHRvIGF2b2lkCitleHBvcnRpbmcgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5EbGxNYWluQDEyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkRsbEVudHJ5UG9pbnRAMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW1wdXJlX3B0cjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFlvdSBtYXkgdXNlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLWRlZmF1bHQtZXhjbHVkZXM8L3NwYW4+PC9zYW1wPiBvcHRpb24KK3RvIGdvIGFoZWFkIGFuZCBleHBvcnQgdGhlc2Ugc3BlY2lhbCBzeW1ib2xzLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwKK3doZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1leHBvcnQtYWxsLXN5bWJvbHM8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVMgPC9zcGFuPjx2YXI+cGF0aDwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1hcyA8L3NwYW4+PHZhcj5wYXRoPC92YXI+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhlIHBhdGgsIGluY2x1ZGluZyB0aGUgZmlsZW5hbWUsIG9mIHRoZSBhc3NlbWJsZXIgdG8gYmUgdXNlZAordG8gY3JlYXRlIHRoZSBleHBvcnRzIGZpbGUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZiA8L3NwYW4+PHZhcj5vcHRpb25zPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWFzLWZsYWdzIDwvc3Bhbj48dmFyPm9wdGlvbnM8L3Zhcj48L3NhbXA+PGRkPlNwZWNpZmllcyBhbnkgc3BlY2lmaWMgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHRoZQorYXNzZW1ibGVyIHdoZW4gYnVpbGRpbmcgdGhlIGV4cG9ydHMgZmlsZS4gIFRoaXMgb3B0aW9uIHdpbGwgd29yayBldmVuIGlmCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVM8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgbm90IHVzZWQuICBUaGlzIG9wdGlvbiBvbmx5IHRha2VzIG9uZSBhcmd1bWVudCwKK2FuZCBpZiBpdCBvY2N1cnMgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlbiBsYXRlcgorb2NjdXJyZW5jZXMgd2lsbCBvdmVycmlkZSBlYXJsaWVyIG9jY3VycmVuY2VzLiAgU28gaWYgaXQgaXMgbmVjZXNzYXJ5IHRvCitwYXNzIG11bHRpcGxlIG9wdGlvbnMgdG8gdGhlIGFzc2VtYmxlciB0aGV5IHNob3VsZCBiZSBlbmNsb3NlZCBpbgorZG91YmxlIHF1b3Rlcy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1EIDwvc3Bhbj48dmFyPm5hbWU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZGxsLW5hbWUgPC9zcGFuPjx2YXI+bmFtZTwvdmFyPjwvc2FtcD48ZGQ+U3BlY2lmaWVzIHRoZSBuYW1lIHRvIGJlIHN0b3JlZCBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWY8L3NwYW4+PC9zYW1wPiBmaWxlIGFzIHRoZSBuYW1lIG9mCit0aGUgRExMIHdoZW4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1lPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHVzZWQuICBJZiB0aGlzIG9wdGlvbiBpcyBub3QKK3ByZXNlbnQsIHRoZW4gdGhlIGZpbGVuYW1lIGdpdmVuIHRvIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZTwvc3Bhbj48L3NhbXA+IG9wdGlvbiB3aWxsIGJlCit1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBETEwuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tbSA8L3NwYW4+PHZhcj5tYWNoaW5lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tbWFjaGluZSA8L3NwYW4+PHZhcj5tYWNoaW5lPC92YXI+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhlIHR5cGUgb2YgbWFjaGluZSBmb3Igd2hpY2ggdGhlIGxpYnJhcnkgZmlsZSBzaG91bGQgYmUKK2J1aWx0LiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmRsbHRvb2w8L3NwYW4+PC9zYW1wPiBoYXMgYSBidWlsdCBpbiBkZWZhdWx0IHR5cGUsIGRlcGVuZGluZyB1cG9uIGhvdworaXQgd2FzIGNyZWF0ZWQsIGJ1dCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGF0LiAgVGhpcyBpcworbm9ybWFsbHkgb25seSB1c2VmdWwgd2hlbiBjcmVhdGluZyBETExzIGZvciBhbiBBUk0gcHJvY2Vzc29yLCB3aGVuIHRoZQorY29udGVudHMgb2YgdGhlIERMTCBhcmUgYWN0dWFsbHkgZW5jb2RlIHVzaW5nIFRodW1iIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1hPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1hZGQtaW5kaXJlY3Q8L3NwYW4+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhhdCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgZmlsZSBpdAorc2hvdWxkIGFkZCBhIHNlY3Rpb24gd2hpY2ggYWxsb3dzIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgdG8gYmUKK3JlZmVyZW5jZWQgd2l0aG91dCB1c2luZyB0aGUgaW1wb3J0IGxpYnJhcnkuICBXaGF0ZXZlciB0aGUgaGVsbCB0aGF0CittZWFucyEKKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1VPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1hZGQtdW5kZXJzY29yZTwvc3Bhbj48L3NhbXA+PGRkPlNwZWNpZmllcyB0aGF0IHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmRsbHRvb2w8L3NwYW4+PC9zYW1wPiBpcyBjcmVhdGluZyB0aGUgZXhwb3J0cyBmaWxlIGl0CitzaG91bGQgcHJlcGVuZCBhbiB1bmRlcnNjb3JlIHRvIHRoZSBuYW1lcyBvZiA8ZW0+YWxsPC9lbT4gZXhwb3J0ZWQgc3ltYm9scy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbm8tbGVhZGluZy11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbGVhZGluZy11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD48ZGQ+U3BlY2lmaWVzIHdoZXRoZXIgc3RhbmRhcmQgc3ltYm9sIHNob3VsZCBiZSBmb3JjZWQgdG8gYmUgcHJlZml4ZWQsIG9yCitub3QuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWFkZC1zdGRjYWxsLXVuZGVyc2NvcmU8L3NwYW4+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhhdCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgZmlsZSBpdAorc2hvdWxkIHByZXBlbmQgYW4gdW5kZXJzY29yZSB0byB0aGUgbmFtZXMgb2YgZXhwb3J0ZWQgPGVtPnN0ZGNhbGw8L2VtPgorZnVuY3Rpb25zLiBWYXJpYWJsZSBuYW1lcyBhbmQgbm9uLXN0ZGNhbGwgZnVuY3Rpb24gbmFtZXMgYXJlIG5vdCBtb2RpZmllZC4gCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBjcmVhdGluZyBHTlUtY29tcGF0aWJsZSBpbXBvcnQgbGlicyBmb3IgdGhpcmQKK3BhcnR5IERMTHMgdGhhdCB3ZXJlIGJ1aWx0IHdpdGggTVMtV2luZG93cyB0b29scy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1rPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1raWxsLWF0PC9zcGFuPjwvc2FtcD48ZGQ+U3BlY2lmaWVzIHRoYXQgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZGxsdG9vbDwvc3Bhbj48L3NhbXA+IGlzIGNyZWF0aW5nIHRoZSBleHBvcnRzIGZpbGUgaXQKK3Nob3VsZCBub3QgYXBwZW5kIHRoZSBzdHJpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5AICZsdDtudW1iZXImZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlc2UgbnVtYmVycyBhcmUKK2NhbGxlZCBvcmRpbmFsIG51bWJlcnMgYW5kIHRoZXkgcmVwcmVzZW50IGFub3RoZXIgd2F5IG9mIGFjY2Vzc2luZyB0aGUKK2Z1bmN0aW9uIGluIGEgRExMLCBvdGhlciB0aGFuIGJ5IG5hbWUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tQTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYWRkLXN0ZGNhbGwtYWxpYXM8L3NwYW4+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhhdCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgZmlsZSBpdAorc2hvdWxkIGFkZCBhbGlhc2VzIGZvciBzdGRjYWxsIHN5bWJvbHMgd2l0aG91dCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkAgJmx0O251bWJlciZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2luIGFkZGl0aW9uIHRvIHRoZSBzeW1ib2xzIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5AICZsdDtudW1iZXImZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXA8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWV4dC1wcmVmaXgtYWxpYXMgPC9zcGFuPjx2YXI+cHJlZml4PC92YXI+PC9zYW1wPjxkZD5DYXVzZXMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmRsbHRvb2w8L3NwYW4+PC9zYW1wPiB0byBjcmVhdGUgZXh0ZXJuYWwgYWxpYXNlcyBmb3IgYWxsIERMTAoraW1wb3J0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LiAgVGhlIGFsaWFzZXMgYXJlIGNyZWF0ZWQgZm9yIGJvdGgKK2V4dGVybmFsIGFuZCBpbXBvcnQgc3ltYm9scyB3aXRoIG5vIGxlYWRpbmcgdW5kZXJzY29yZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi14PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1uby1pZGF0YTQ8L3NwYW4+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhhdCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgYW5kIGxpYnJhcnkKK2ZpbGVzIGl0IHNob3VsZCBvbWl0IHRoZSA8Y29kZT4uaWRhdGE0PC9jb2RlPiBzZWN0aW9uLiAgVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eQord2l0aCBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS11c2UtbnVsLXByZWZpeGVkLWltcG9ydC10YWJsZXM8L3NwYW4+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhhdCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgYW5kIGxpYnJhcnkKK2ZpbGVzIGl0IHNob3VsZCBwcmVmaXggdGhlIDxjb2RlPi5pZGF0YTQ8L2NvZGU+IGFuZCA8Y29kZT4uaWRhdGE1PC9jb2RlPiBieSB6ZXJvIGFuCitlbGVtZW50LiBUaGlzIGVtdWxhdGVzIG9sZCBnbnUgaW1wb3J0IGxpYnJhcnkgZ2VuZXJhdGlvbiBvZgorPGNvZGU+ZGxsdG9vbDwvY29kZT4uIEJ5IGRlZmF1bHQgdGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1jPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1uby1pZGF0YTU8L3NwYW4+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhhdCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgYW5kIGxpYnJhcnkKK2ZpbGVzIGl0IHNob3VsZCBvbWl0IHRoZSA8Y29kZT4uaWRhdGE1PC9jb2RlPiBzZWN0aW9uLiAgVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eQord2l0aCBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUkgPC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taWRlbnRpZnkgPC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGRkPlNwZWNpZmllcyB0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gc2hvdWxkIGluc3BlY3QgdGhlIGltcG9ydCBsaWJyYXJ5CitpbmRpY2F0ZWQgYnkgPHZhcj5maWxlbmFtZTwvdmFyPiBhbmQgcmVwb3J0LCBvbiA8Y29kZT5zdGRvdXQ8L2NvZGU+LCB0aGUgbmFtZShzKQorb2YgdGhlIGFzc29jaWF0ZWQgRExMKHMpLiAgVGhpcyBjYW4gYmUgcGVyZm9ybWVkIGluIGFkZGl0aW9uIHRvIGFueQorb3RoZXIgb3BlcmF0aW9ucyBpbmRpY2F0ZWQgYnkgdGhlIG90aGVyIG9wdGlvbnMgYW5kIGFyZ3VtZW50cy4gCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZGxsdG9vbDwvc3Bhbj48L3NhbXA+IGZhaWxzIGlmIHRoZSBpbXBvcnQgbGlicmFyeSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QKK2FjdHVhbGx5IGFuIGltcG9ydCBsaWJyYXJ5LiBTZWUgYWxzbyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlkZW50aWZ5LXN0cmljdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1pZGVudGlmeS1zdHJpY3Q8L3NwYW4+PC9zYW1wPjxkZD5Nb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taWRlbnRpZnk8L3NwYW4+PC9zYW1wPiBvcHRpb24sIHN1Y2gKK3RoYXQgYW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgPHZhcj5maWxlbmFtZTwvdmFyPiBpcyBhc3NvY2lhdGVkIHdpdGgKK21vcmUgdGhhbiBvbmUgRExMLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWk8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWludGVyd29yazwvc3Bhbj48L3NhbXA+PGRkPlNwZWNpZmllcyB0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gc2hvdWxkIG1hcmsgdGhlIG9iamVjdHMgaW4gdGhlIGxpYnJhcnkKK2ZpbGUgYW5kIGV4cG9ydHMgZmlsZSB0aGF0IGl0IHByb2R1Y2VzIGFzIHN1cHBvcnRpbmcgaW50ZXJ3b3JraW5nCitiZXR3ZWVuIEFSTSBhbmQgVGh1bWIgY29kZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1uPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1ub2RlbGV0ZTwvc3Bhbj48L3NhbXA+PGRkPk1ha2VzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gcHJlc2VydmUgdGhlIHRlbXBvcmFyeSBhc3NlbWJsZXIgZmlsZXMgaXQgdXNlZCB0bworY3JlYXRlIHRoZSBleHBvcnRzIGZpbGUuICBJZiB0aGlzIG9wdGlvbiBpcyByZXBlYXRlZCB0aGVuIGRsbHRvb2wgd2lsbAorYWxzbyBwcmVzZXJ2ZSB0aGUgdGVtcG9yYXJ5IG9iamVjdCBmaWxlcyBpdCB1c2VzIHRvIGNyZWF0ZSB0aGUgbGlicmFyeQorZmlsZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi10IDwvc3Bhbj48dmFyPnByZWZpeDwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS10ZW1wLXByZWZpeCA8L3NwYW4+PHZhcj5wcmVmaXg8L3Zhcj48L3NhbXA+PGRkPk1ha2VzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gdXNlIDx2YXI+cHJlZml4PC92YXI+IHdoZW4gY29uc3RydWN0aW5nIHRoZSBuYW1lcyBvZgordGVtcG9yYXJ5IGFzc2VtYmxlciBhbmQgb2JqZWN0IGZpbGVzLiAgQnkgZGVmYXVsdCwgdGhlIHRlbXAgZmlsZSBwcmVmaXgKK2lzIGdlbmVyYXRlZCBmcm9tIHRoZSBwaWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tdjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdmVyYm9zZTwvc3Bhbj48L3NhbXA+PGRkPk1ha2UgZGxsdG9vbCBkZXNjcmliZSB3aGF0IGl0IGlzIGRvaW5nLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWg8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWhlbHA8L3NwYW4+PC9zYW1wPjxkZD5EaXNwbGF5cyBhIGxpc3Qgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMgYW5kIHRoZW4gZXhpdHMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdmVyc2lvbjwvc3Bhbj48L3NhbXA+PGRkPkRpc3BsYXlzIGRsbHRvb2wncyB2ZXJzaW9uIG51bWJlciBhbmQgdGhlbiBleGl0cy4KKworICAgPC9kbD4KKworPCEtLSBtYW4gZW5kIC0tPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9ImRlZi1maWxlLWZvcm1hdC5odG1sI2RlZi1maWxlLWZvcm1hdCI+ZGVmIGZpbGUgZm9ybWF0PC9hPjogICAgICAgICAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIGRsbHRvb2wgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWY8L3NwYW4+PC9zYW1wPiBmaWxlCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9lbGZlZGl0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9lbGZlZGl0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiZWE2OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL2VsZmVkaXQuaHRtbApAQCAtMCwwICsxLDExOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZWxmZWRpdCAtIEdOVSBCaW5hcnkgVXRpbGl0aWVzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgQmluYXJ5IFV0aWxpdGllcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiIgdGl0bGU9InJlYWRlbGYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb21tb24tT3B0aW9ucy5odG1sI0NvbW1vbi1PcHRpb25zIiB0aXRsZT0iQ29tbW9uIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImVsZmVkaXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ29tbW9uLU9wdGlvbnMuaHRtbCNDb21tb24tT3B0aW9ucyI+Q29tbW9uIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+cmVhZGVsZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xNiBlbGZlZGl0PC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtVXBkYXRlLUVMRi1oZWFkZXItMTYzIj48L2E+PGEgbmFtZT0iaW5kZXgtZWxmZWRpdC0xNjQiPjwvYT4KKzwhLS0gbWFuIHRpdGxlIGVsZmVkaXQgVXBkYXRlIHRoZSBFTEYgaGVhZGVyIG9mIEVMRiBmaWxlcy4gLS0+CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8IS0tIG1hbiBiZWdpbiBTWU5PUFNJUyBlbGZlZGl0IC0tPgorICAgICBlbGZlZGl0IFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlucHV0LW1hY2g9PC9zcGFuPjwvc2FtcD48dmFyPm1hY2hpbmU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taW5wdXQtdHlwZT08L3NwYW4+PC9zYW1wPjx2YXI+dHlwZTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1pbnB1dC1vc2FiaT08L3NwYW4+PC9zYW1wPjx2YXI+b3NhYmk8L3Zhcj5dCisgICAgICAgICAgICAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQtbWFjaD08L3NwYW4+PC9zYW1wPjx2YXI+bWFjaGluZTwvdmFyPgorICAgICAgICAgICAgIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LXR5cGU9PC9zcGFuPjwvc2FtcD48dmFyPnR5cGU8L3Zhcj4KKyAgICAgICAgICAgICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW91dHB1dC1vc2FiaT08L3NwYW4+PC9zYW1wPjx2YXI+b3NhYmk8L3Zhcj4KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb248L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWg8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICA8dmFyPmVsZmZpbGU8L3Zhcj4uLi4KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiBlbGZlZGl0IC0tPgorICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmVsZmVkaXQ8L3NwYW4+PC9zYW1wPiB1cGRhdGVzIHRoZSBFTEYgaGVhZGVyIG9mIEVMRiBmaWxlcyB3aGljaCBoYXZlCit0aGUgbWF0Y2hpbmcgRUxGIG1hY2hpbmUgYW5kIGZpbGUgdHlwZXMuICBUaGUgb3B0aW9ucyBjb250cm9sIGhvdyBhbmQKK3doaWNoIGZpZWxkcyBpbiB0aGUgRUxGIGhlYWRlciBzaG91bGQgYmUgdXBkYXRlZC4KKworICAgPHA+PHZhcj5lbGZmaWxlPC92YXI+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiBhcmUgdGhlIEVMRiBmaWxlcyB0byBiZSB1cGRhdGVkLiAgMzItYml0IGFuZAorNjQtYml0IEVMRiBmaWxlcyBhcmUgc3VwcG9ydGVkLCBhcyBhcmUgYXJjaGl2ZXMgY29udGFpbmluZyBFTEYgZmlsZXMuIAorPCEtLSBtYW4gZW5kIC0tPgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIGVsZmVkaXQgLS0+CisgICA8cD5UaGUgbG9uZyBhbmQgc2hvcnQgZm9ybXMgb2Ygb3B0aW9ucywgc2hvd24gaGVyZSBhcyBhbHRlcm5hdGl2ZXMsIGFyZQorZXF1aXZhbGVudC4gQXQgbGVhc3Qgb25lIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW91dHB1dC1tYWNoPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW91dHB1dC10eXBlPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tb3V0cHV0LW9zYWJpPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBtdXN0IGJlIGdpdmVuLgorCisgICAgIDxkbD4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWlucHV0LW1hY2g9PC9zcGFuPjx2YXI+bWFjaGluZTwvdmFyPjwvc2FtcD48ZGQ+U2V0IHRoZSBtYXRjaGluZyBpbnB1dCBFTEYgbWFjaGluZSB0eXBlIHRvIDx2YXI+bWFjaGluZTwvdmFyPi4gIElmCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlucHV0LW1hY2g8L3NwYW4+PC9zYW1wPiBpc24ndCBzcGVjaWZpZWQsIGl0IHdpbGwgbWF0Y2ggYW55IEVMRgorbWFjaGluZSB0eXBlcy4KKworICAgICA8cD5UaGUgc3VwcG9ydGVkIEVMRiBtYWNoaW5lIHR5cGVzIGFyZSwgPHZhcj5MMU9NPC92YXI+LCA8dmFyPksxT008L3Zhcj4gYW5kCis8dmFyPng4Ni02NDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tb3V0cHV0LW1hY2g9PC9zcGFuPjx2YXI+bWFjaGluZTwvdmFyPjwvc2FtcD48ZGQ+Q2hhbmdlIHRoZSBFTEYgbWFjaGluZSB0eXBlIGluIHRoZSBFTEYgaGVhZGVyIHRvIDx2YXI+bWFjaGluZTwvdmFyPi4gIFRoZQorc3VwcG9ydGVkIEVMRiBtYWNoaW5lIHR5cGVzIGFyZSB0aGUgc2FtZSBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlucHV0LW1hY2g8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taW5wdXQtdHlwZT08L3NwYW4+PHZhcj50eXBlPC92YXI+PC9zYW1wPjxkZD5TZXQgdGhlIG1hdGNoaW5nIGlucHV0IEVMRiBmaWxlIHR5cGUgdG8gPHZhcj50eXBlPC92YXI+LiAgSWYKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taW5wdXQtdHlwZTwvc3Bhbj48L3NhbXA+IGlzbid0IHNwZWNpZmllZCwgaXQgd2lsbCBtYXRjaCBhbnkgRUxGIGZpbGUgdHlwZXMuCisKKyAgICAgPHA+VGhlIHN1cHBvcnRlZCBFTEYgZmlsZSB0eXBlcyBhcmUsIDx2YXI+cmVsPC92YXI+LCA8dmFyPmV4ZWM8L3Zhcj4gYW5kIDx2YXI+ZHluPC92YXI+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1vdXRwdXQtdHlwZT08L3NwYW4+PHZhcj50eXBlPC92YXI+PC9zYW1wPjxkZD5DaGFuZ2UgdGhlIEVMRiBmaWxlIHR5cGUgaW4gdGhlIEVMRiBoZWFkZXIgdG8gPHZhcj50eXBlPC92YXI+LiAgVGhlCitzdXBwb3J0ZWQgRUxGIHR5cGVzIGFyZSB0aGUgc2FtZSBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlucHV0LXR5cGU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taW5wdXQtb3NhYmk9PC9zcGFuPjx2YXI+b3NhYmk8L3Zhcj48L3NhbXA+PGRkPlNldCB0aGUgbWF0Y2hpbmcgaW5wdXQgRUxGIGZpbGUgT1NBQkkgdG8gPHZhcj5vc2FiaTwvdmFyPi4gIElmCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlucHV0LW9zYWJpPC9zcGFuPjwvc2FtcD4gaXNuJ3Qgc3BlY2lmaWVkLCBpdCB3aWxsIG1hdGNoIGFueSBFTEYgT1NBQklzLgorCisgICAgIDxwPlRoZSBzdXBwb3J0ZWQgRUxGIE9TQUJJcyBhcmUsIDx2YXI+bm9uZTwvdmFyPiwgPHZhcj5IUFVYPC92YXI+LCA8dmFyPk5ldEJTRDwvdmFyPiwKKzx2YXI+R05VPC92YXI+LCA8dmFyPkxpbnV4PC92YXI+IChhbGlhcyBmb3IgPHZhcj5HTlU8L3Zhcj4pLAorPHZhcj5Tb2xhcmlzPC92YXI+LCA8dmFyPkFJWDwvdmFyPiwgPHZhcj5Jcml4PC92YXI+LAorPHZhcj5GcmVlQlNEPC92YXI+LCA8dmFyPlRSVTY0PC92YXI+LCA8dmFyPk1vZGVzdG88L3Zhcj4sIDx2YXI+T3BlbkJTRDwvdmFyPiwgPHZhcj5PcGVuVk1TPC92YXI+LAorPHZhcj5OU0s8L3Zhcj4sIDx2YXI+QVJPUzwvdmFyPiBhbmQgPHZhcj5GZW5peE9TPC92YXI+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1vdXRwdXQtb3NhYmk9PC9zcGFuPjx2YXI+b3NhYmk8L3Zhcj48L3NhbXA+PGRkPkNoYW5nZSB0aGUgRUxGIE9TQUJJIGluIHRoZSBFTEYgaGVhZGVyIHRvIDx2YXI+b3NhYmk8L3Zhcj4uICBUaGUKK3N1cHBvcnRlZCBFTEYgT1NBQkkgYXJlIHRoZSBzYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taW5wdXQtb3NhYmk8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi12PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmVsZmVkaXQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1oPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgdW5kZXJzdG9vZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZWxmZWRpdDwvc3Bhbj48L3NhbXA+LgorCisgICA8L2RsPgorCis8IS0tIG1hbiBlbmQgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9pbmRleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjE3MDVhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDEyOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSIjVG9wIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkICJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMSBjbGFzcz0ic2V0dGl0bGUiPkdOVSBCaW5hcnkgVXRpbGl0aWVzPC9oMT4KKzxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKzxoMj5UYWJsZSBvZiBDb250ZW50czwvaDI+Cis8dWw+Cis8bGk+PGEgbmFtZT0idG9jX1RvcCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPkludHJvZHVjdGlvbjwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfYXIiIGhyZWY9ImFyLmh0bWwjYXIiPjEgYXI8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iYXItY21kbGluZS5odG1sI2FyLWNtZGxpbmUiPjEuMSBDb250cm9sbGluZyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBvbiB0aGUgQ29tbWFuZCBMaW5lPC9hPgorPGxpPjxhIGhyZWY9ImFyLXNjcmlwdHMuaHRtbCNhci1zY3JpcHRzIj4xLjIgQ29udHJvbGxpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD4gd2l0aCBhIFNjcmlwdDwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2Nfbm0iIGhyZWY9Im5tLmh0bWwjbm0iPjIgbm08L2E+Cis8bGk+PGEgbmFtZT0idG9jX29iamNvcHkiIGhyZWY9Im9iamNvcHkuaHRtbCNvYmpjb3B5Ij4zIG9iamNvcHk8L2E+Cis8bGk+PGEgbmFtZT0idG9jX29iamR1bXAiIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj40IG9iamR1bXA8L2E+Cis8bGk+PGEgbmFtZT0idG9jX3JhbmxpYiIgaHJlZj0icmFubGliLmh0bWwjcmFubGliIj41IHJhbmxpYjwvYT4KKzxsaT48YSBuYW1lPSJ0b2Nfc2l6ZSIgaHJlZj0ic2l6ZS5odG1sI3NpemUiPjYgc2l6ZTwvYT4KKzxsaT48YSBuYW1lPSJ0b2Nfc3RyaW5ncyIgaHJlZj0ic3RyaW5ncy5odG1sI3N0cmluZ3MiPjcgc3RyaW5nczwvYT4KKzxsaT48YSBuYW1lPSJ0b2Nfc3RyaXAiIGhyZWY9InN0cmlwLmh0bWwjc3RyaXAiPjggc3RyaXA8L2E+Cis8bGk+PGEgbmFtZT0idG9jX2NfMDAyYl8wMDJiZmlsdCIgaHJlZj0iY18wMDJiXzAwMmJmaWx0Lmh0bWwjY18wMDJiXzAwMmJmaWx0Ij45IGMrK2ZpbHQ8L2E+Cis8bGk+PGEgbmFtZT0idG9jX2FkZHIybGluZSIgaHJlZj0iYWRkcjJsaW5lLmh0bWwjYWRkcjJsaW5lIj4xMCBhZGRyMmxpbmU8L2E+Cis8bGk+PGEgbmFtZT0idG9jX25sbWNvbnYiIGhyZWY9Im5sbWNvbnYuaHRtbCNubG1jb252Ij4xMSBubG1jb252PC9hPgorPGxpPjxhIG5hbWU9InRvY193aW5kbWMiIGhyZWY9IndpbmRtYy5odG1sI3dpbmRtYyI+MTIgd2luZG1jPC9hPgorPGxpPjxhIG5hbWU9InRvY193aW5kcmVzIiBocmVmPSJ3aW5kcmVzLmh0bWwjd2luZHJlcyI+MTMgd2luZHJlczwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfZGxsdG9vbCIgaHJlZj0iZGxsdG9vbC5odG1sI2RsbHRvb2wiPjE0IGRsbHRvb2w8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iZGVmLWZpbGUtZm9ybWF0Lmh0bWwjZGVmLWZpbGUtZm9ybWF0Ij4xNC4xIFRoZSBmb3JtYXQgb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWY8L3NwYW4+PC9zYW1wPiBmaWxlPC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19yZWFkZWxmIiBocmVmPSJyZWFkZWxmLmh0bWwjcmVhZGVsZiI+MTUgcmVhZGVsZjwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfZWxmZWRpdCIgaHJlZj0iZWxmZWRpdC5odG1sI2VsZmVkaXQiPjE2IGVsZmVkaXQ8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0NvbW1vbi1PcHRpb25zIiBocmVmPSJDb21tb24tT3B0aW9ucy5odG1sI0NvbW1vbi1PcHRpb25zIj4xNyBDb21tb24gT3B0aW9uczwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfU2VsZWN0aW5nLXRoZS1UYXJnZXQtU3lzdGVtIiBocmVmPSJTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0uaHRtbCNTZWxlY3RpbmctdGhlLVRhcmdldC1TeXN0ZW0iPjE4IFNlbGVjdGluZyB0aGUgVGFyZ2V0IFN5c3RlbTwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJUYXJnZXQtU2VsZWN0aW9uLmh0bWwjVGFyZ2V0LVNlbGVjdGlvbiI+MTguMSBUYXJnZXQgU2VsZWN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkFyY2hpdGVjdHVyZS1TZWxlY3Rpb24uaHRtbCNBcmNoaXRlY3R1cmUtU2VsZWN0aW9uIj4xOC4yIEFyY2hpdGVjdHVyZSBTZWxlY3Rpb248L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1JlcG9ydGluZy1CdWdzIiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj4xOSBSZXBvcnRpbmcgQnVnczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPjE5LjEgSGF2ZSBZb3UgRm91bmQgYSBCdWc/PC9hPgorPGxpPjxhIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIj4xOS4yIEhvdyB0byBSZXBvcnQgQnVnczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkFwcGVuZGl4IEEgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPgorPGxpPjxhIG5hbWU9InRvY19CaW51dGlscy1JbmRleCIgaHJlZj0iQmludXRpbHMtSW5kZXguaHRtbCNCaW51dGlscy1JbmRleCI+QmludXRpbHMgSW5kZXg8L2E+Cis8L2xpPjwvdWw+Cis8L2Rpdj4KKworCisKKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVG9wIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFyLmh0bWwjYXIiPmFyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCNkaXIiPihkaXIpPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+SW50cm9kdWN0aW9uPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtdmVyc2lvbi0xIj48L2E+VGhpcyBicmllZiBtYW51YWwgY29udGFpbnMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBiaW5hcnkKK3V0aWxpdGllcworKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yOgorCisgICA8cD5UaGlzIGRvY3VtZW50IGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUKK0RvY3VtZW50YXRpb24gTGljZW5zZSB2ZXJzaW9uIDEuMy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZAoraW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgJmxkcXVvO0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSZyZHF1bzsuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJhci5odG1sI2FyIj5hcjwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlLCBtb2RpZnksIGFuZCBleHRyYWN0IGZyb20gYXJjaGl2ZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Im5tLmh0bWwjbm0iPm5tPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IHN5bWJvbHMgZnJvbSBvYmplY3QgZmlsZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Im9iamNvcHkuaHRtbCNvYmpjb3B5Ij5vYmpjb3B5PC9hPjogCQkJQ29weSBhbmQgdHJhbnNsYXRlIG9iamVjdCBmaWxlcworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+OiAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5IGluZm9ybWF0aW9uIGZyb20gb2JqZWN0IGZpbGVzCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJyYW5saWIuaHRtbCNyYW5saWIiPnJhbmxpYjwvYT46ICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZSBpbmRleCB0byBhcmNoaXZlIGNvbnRlbnRzCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJzaXplLmh0bWwjc2l6ZSI+c2l6ZTwvYT46ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgc2VjdGlvbiBzaXplcyBhbmQgdG90YWwgc2l6ZQorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0ic3RyaW5ncy5odG1sI3N0cmluZ3MiPnN0cmluZ3M8L2E+OiAgICAgICAgICAgICAgICAgICAgICBMaXN0IHByaW50YWJsZSBzdHJpbmdzIGZyb20gZmlsZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9InN0cmlwLmh0bWwjc3RyaXAiPnN0cmlwPC9hPjogICAgICAgICAgICAgICAgICAgICAgICBEaXNjYXJkIHN5bWJvbHMKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCI+YysrZmlsdDwvYT46IAkJCUZpbHRlciB0byBkZW1hbmdsZSBlbmNvZGVkIEMrKyBzeW1ib2xzCis8bGk+PGEgaHJlZj0iY18wMDJiXzAwMmJmaWx0Lmh0bWwjY18wMDJiXzAwMmJmaWx0Ij5jeHhmaWx0PC9hPjogICAgICAgICAgICAgIE1TLURPUyBuYW1lIGZvciBjKytmaWx0Cis8bGk+PGEgaHJlZj0iYWRkcjJsaW5lLmh0bWwjYWRkcjJsaW5lIj5hZGRyMmxpbmU8L2E+OiAJCQlDb252ZXJ0IGFkZHJlc3NlcyB0byBmaWxlIGFuZCBsaW5lCis8bGk+PGEgaHJlZj0ibmxtY29udi5odG1sI25sbWNvbnYiPm5sbWNvbnY8L2E+OiAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0cyBvYmplY3QgY29kZSBpbnRvIGFuIE5MTQorPGxpPjxhIGhyZWY9IndpbmRtYy5odG1sI3dpbmRtYyI+d2luZG1jPC9hPjogCQkJR2VuZXJhdG9yIGZvciBXaW5kb3dzIG1lc3NhZ2UgcmVzb3VyY2VzCis8bGk+PGEgaHJlZj0id2luZHJlcy5odG1sI3dpbmRyZXMiPndpbmRyZXM8L2E+OiAJCQlNYW5pcHVsYXRlIFdpbmRvd3MgcmVzb3VyY2VzCis8bGk+PGEgaHJlZj0iZGxsdG9vbC5odG1sI2RsbHRvb2wiPmRsbHRvb2w8L2E+OiAJCQlDcmVhdGUgZmlsZXMgbmVlZGVkIHRvIGJ1aWxkIGFuZCB1c2UgRExMcworPGxpPjxhIGhyZWY9InJlYWRlbGYuaHRtbCNyZWFkZWxmIj5yZWFkZWxmPC9hPjogICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSB0aGUgY29udGVudHMgb2YgRUxGIGZvcm1hdCBmaWxlcworPGxpPjxhIGhyZWY9ImVsZmVkaXQuaHRtbCNlbGZlZGl0Ij5lbGZlZGl0PC9hPjogICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIHRoZSBFTEYgaGVhZGVyIG9mIEVMRiBmaWxlcworPGxpPjxhIGhyZWY9IkNvbW1vbi1PcHRpb25zLmh0bWwjQ29tbW9uLU9wdGlvbnMiPkNvbW1vbiBPcHRpb25zPC9hPjogICAgICAgICAgICAgICBDb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IgYWxsIHV0aWxpdGllcworPGxpPjxhIGhyZWY9IlNlbGVjdGluZy10aGUtVGFyZ2V0LVN5c3RlbS5odG1sI1NlbGVjdGluZy10aGUtVGFyZ2V0LVN5c3RlbSI+U2VsZWN0aW5nIHRoZSBUYXJnZXQgU3lzdGVtPC9hPjogIEhvdyB0aGVzZSB1dGlsaXRpZXMgZGV0ZXJtaW5lIHRoZSB0YXJnZXQKKzxsaT48YSBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT46ICAgICAgICAgICAgICAgUmVwb3J0aW5nIEJ1Z3MKKzxsaT48YSBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT46ICAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCis8bGk+PGEgaHJlZj0iQmludXRpbHMtSW5kZXguaHRtbCNCaW51dGlscy1JbmRleCI+QmludXRpbHMgSW5kZXg8L2E+OiAgICAgICAgICAgICAgIEJpbnV0aWxzIEluZGV4Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9ubG1jb252Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9ubG1jb252Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiZmM0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL25sbWNvbnYuaHRtbApAQCAtMCwwICsxLDExNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bmxtY29udiAtIEdOVSBCaW5hcnkgVXRpbGl0aWVzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgQmluYXJ5IFV0aWxpdGllcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhZGRyMmxpbmUuaHRtbCNhZGRyMmxpbmUiIHRpdGxlPSJhZGRyMmxpbmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3aW5kbWMuaHRtbCN3aW5kbWMiIHRpdGxlPSJ3aW5kbWMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Im5sbWNvbnYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2luZG1jLmh0bWwjd2luZG1jIj53aW5kbWM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJhZGRyMmxpbmUuaHRtbCNhZGRyMmxpbmUiPmFkZHIybGluZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMSBubG1jb252PC9oMj4KKworPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5sbWNvbnY8L3NwYW4+PC9zYW1wPiBjb252ZXJ0cyBhIHJlbG9jYXRhYmxlIG9iamVjdCBmaWxlIGludG8gYSBOZXRXYXJlCitMb2FkYWJsZSBNb2R1bGUuCisKKyAgIDxibG9ja3F1b3RlPgorPGVtPldhcm5pbmc6PC9lbT4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5sbWNvbnY8L3NwYW4+PC9zYW1wPiBpcyBub3QgYWx3YXlzIGJ1aWx0IGFzIHBhcnQgb2YgdGhlIGJpbmFyeQordXRpbGl0aWVzLCBzaW5jZSBpdCBpcyBvbmx5IHVzZWZ1bCBmb3IgTkxNIHRhcmdldHMuIAorPC9ibG9ja3F1b3RlPgorCis8IS0tIG1hbiB0aXRsZSBubG1jb252IGNvbnZlcnRzIG9iamVjdCBjb2RlIGludG8gYW4gTkxNLiAtLT4KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8IS0tIG1hbiBiZWdpbiBTWU5PUFNJUyBubG1jb252IC0tPgorICAgICBubG1jb252IFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IDx2YXI+YmZkbmFtZTwvdmFyPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlucHV0LXRhcmdldD08L3NwYW4+PC9zYW1wPjx2YXI+YmZkbmFtZTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiA8dmFyPmJmZG5hbWU8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQtdGFyZ2V0PTwvc3Bhbj48L3NhbXA+PHZhcj5iZmRuYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVDwvc3Bhbj48L3NhbXA+IDx2YXI+aGVhZGVyZmlsZTwvdmFyPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlYWRlci1maWxlPTwvc3Bhbj48L3NhbXA+PHZhcj5oZWFkZXJmaWxlPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZGVidWc8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4gPHZhcj5saW5rZXI8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1saW5rZXI9PC9zcGFuPjwvc2FtcD48dmFyPmxpbmtlcjwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWg8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1WPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgPHZhcj5pbmZpbGU8L3Zhcj4gPHZhcj5vdXRmaWxlPC92YXI+CisgICAgIDwhLS0gbWFuIGVuZCAtLT4KKzwvcHJlPgorICAgPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gbmxtY29udiAtLT4KKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ubG1jb252PC9zcGFuPjwvc2FtcD4gY29udmVydHMgdGhlIHJlbG9jYXRhYmxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTM4Njwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvYmplY3QgZmlsZQorPHZhcj5pbmZpbGU8L3Zhcj4gaW50byB0aGUgTmV0V2FyZSBMb2FkYWJsZSBNb2R1bGUgPHZhcj5vdXRmaWxlPC92YXI+LCBvcHRpb25hbGx5CityZWFkaW5nIDx2YXI+aGVhZGVyZmlsZTwvdmFyPiBmb3IgTkxNIGhlYWRlciBpbmZvcm1hdGlvbi4gIEZvciBpbnN0cnVjdGlvbnMKK29uIHdyaXRpbmcgdGhlIE5MTSBjb21tYW5kIGZpbGUgbGFuZ3VhZ2UgdXNlZCBpbiBoZWFkZXIgZmlsZXMsIHNlZSB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGlua2Vyczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk5MTUxJTks8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gcGFydGljdWxhciwgb2YgdGhlIDxjaXRlPk5MTQorRGV2ZWxvcG1lbnQgYW5kIFRvb2xzIE92ZXJ2aWV3PC9jaXRlPiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgTkxNIFNvZnR3YXJlCitEZXZlbG9wZXIncyBLaXQgKCZsZHF1bztOTE0gU0RLJnJkcXVvOyksIGF2YWlsYWJsZSBmcm9tIE5vdmVsbCwgSW5jLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ubG1jb252PC9zcGFuPjwvc2FtcD4gdXNlcyB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IEJpbmFyeSBGaWxlIERlc2NyaXB0b3IgbGlicmFyeSB0byByZWFkCis8dmFyPmluZmlsZTwvdmFyPjsKK3NlZSA8YSBocmVmPSIuLi9sZC9CRkQuaHRtbCNCRkQiPkJGRDwvYT4sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bmxtY29udjwvc3Bhbj48L3NhbXA+IGNhbiBwZXJmb3JtIGEgbGluayBzdGVwLiAgSW4gb3RoZXIgd29yZHMsIHlvdSBjYW4gbGlzdAorbW9yZSB0aGFuIG9uZSBvYmplY3QgZmlsZSBmb3IgaW5wdXQgaWYgeW91IGxpc3QgdGhlbSBpbiB0aGUgZGVmaW5pdGlvbnMKK2ZpbGUgKHJhdGhlciB0aGFuIHNpbXBseSBzcGVjaWZ5aW5nIG9uZSBpbnB1dCBmaWxlIG9uIHRoZSBjb21tYW5kIGxpbmUpLiAKK0luIHRoaXMgY2FzZSwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5sbWNvbnY8L3NwYW4+PC9zYW1wPiBjYWxscyB0aGUgbGlua2VyIGZvciB5b3UuCisKKzwhLS0gbWFuIGVuZCAtLT4KKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgbmxtY29udiAtLT4KKyAgICAgPGRsPgorPGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1JIDwvc3Bhbj48dmFyPmJmZG5hbWU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taW5wdXQtdGFyZ2V0PTwvc3Bhbj48dmFyPmJmZG5hbWU8L3Zhcj48L3NhbXA+PGRkPk9iamVjdCBmb3JtYXQgb2YgdGhlIGlucHV0IGZpbGUuICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bmxtY29udjwvc3Bhbj48L3NhbXA+IGNhbiB1c3VhbGx5IGRldGVybWluZQordGhlIGZvcm1hdCBvZiBhIGdpdmVuIGZpbGUgKHNvIG5vIGRlZmF1bHQgaXMgbmVjZXNzYXJ5KS4gCitTZWUgPGEgaHJlZj0iVGFyZ2V0LVNlbGVjdGlvbi5odG1sI1RhcmdldC1TZWxlY3Rpb24iPlRhcmdldCBTZWxlY3Rpb248L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1PIDwvc3Bhbj48dmFyPmJmZG5hbWU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tb3V0cHV0LXRhcmdldD08L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkZD5PYmplY3QgZm9ybWF0IG9mIHRoZSBvdXRwdXQgZmlsZS4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ubG1jb252PC9zcGFuPjwvc2FtcD4gaW5mZXJzIHRoZSBvdXRwdXQKK2Zvcm1hdCBiYXNlZCBvbiB0aGUgaW5wdXQgZm9ybWF0LCBlLmcuIGZvciBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTM4Njwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnB1dCBmaWxlIHRoZQorb3V0cHV0IGZvcm1hdCBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5sbTMyLWkzODY8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorU2VlIDxhIGhyZWY9IlRhcmdldC1TZWxlY3Rpb24uaHRtbCNUYXJnZXQtU2VsZWN0aW9uIj5UYXJnZXQgU2VsZWN0aW9uPC9hPiwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVCA8L3NwYW4+PHZhcj5oZWFkZXJmaWxlPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWhlYWRlci1maWxlPTwvc3Bhbj48dmFyPmhlYWRlcmZpbGU8L3Zhcj48L3NhbXA+PGRkPlJlYWRzIDx2YXI+aGVhZGVyZmlsZTwvdmFyPiBmb3IgTkxNIGhlYWRlciBpbmZvcm1hdGlvbi4gIEZvciBpbnN0cnVjdGlvbnMgb24KK3dyaXRpbmcgdGhlIE5MTSBjb21tYW5kIGZpbGUgbGFuZ3VhZ2UgdXNlZCBpbiBoZWFkZXIgZmlsZXMsIHNlZSBzZWUgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxpbmtlcnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiwgb2YgdGhlIDxjaXRlPk5MTSBEZXZlbG9wbWVudCBhbmQgVG9vbHMKK092ZXJ2aWV3PC9jaXRlPiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgTkxNIFNvZnR3YXJlIERldmVsb3BlcidzIEtpdCwgYXZhaWxhYmxlCitmcm9tIE5vdmVsbCwgSW5jLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWQ8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWRlYnVnPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheXMgKG9uIHN0YW5kYXJkIGVycm9yKSB0aGUgbGlua2VyIGNvbW1hbmQgbGluZSB1c2VkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ubG1jb252PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tbCA8L3NwYW4+PHZhcj5saW5rZXI8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbGlua2VyPTwvc3Bhbj48dmFyPmxpbmtlcjwvdmFyPjwvc2FtcD48ZGQ+VXNlIDx2YXI+bGlua2VyPC92YXI+IGZvciBhbnkgbGlua2luZy4gIDx2YXI+bGlua2VyPC92YXI+IGNhbiBiZSBhbiBhYnNvbHV0ZSBvciBhCityZWxhdGl2ZSBwYXRobmFtZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1oPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnRzIGEgdXNhZ2Ugc3VtbWFyeS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1WPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnRzIHRoZSB2ZXJzaW9uIG51bWJlciBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5sbWNvbnY8L3NwYW4+PC9zYW1wPi4gCis8L2RsPgorCis8IS0tIG1hbiBlbmQgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9ubS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvbm0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDhhMmVlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvbm0uaHRtbApAQCAtMCwwICsxLDI1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bm0gLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iYXIuaHRtbCNhciIgdGl0bGU9ImFyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ib2JqY29weS5odG1sI29iamNvcHkiIHRpdGxlPSJvYmpjb3B5Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJubSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJvYmpjb3B5Lmh0bWwjb2JqY29weSI+b2JqY29weTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImFyLmh0bWwjYXIiPmFyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjIgbm08L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1zeW1ib2xzLTM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbm0tMzciPjwvYT4KKzwhLS0gbWFuIHRpdGxlIG5tIGxpc3Qgc3ltYm9scyBmcm9tIG9iamVjdCBmaWxlcyAtLT4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDwhLS0gbWFuIGJlZ2luIFNZTk9QU0lTIG5tIC0tPgorICAgICBubSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWE8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRlYnVnLXN5bXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1leHRlcm4tb25seTwvc3Bhbj48L3NhbXA+XVs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBsdWdpbjwvc3Bhbj48L3NhbXA+IDx2YXI+bmFtZTwvdmFyPl0KKyAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1CPC9zcGFuPjwvc2FtcD5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZGVtYW5nbGU8L3NwYW4+PC9zYW1wPls9PHZhcj5zdHlsZTwvdmFyPl1dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHluYW1pYzwvc3Bhbj48L3NhbXA+XQorICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVM8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXByaW50LXNpemU8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wcmludC1hcm1hcDwvc3Bhbj48L3NhbXA+XQorICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUE8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcHJpbnQtZmlsZS1uYW1lPC9zcGFuPjwvc2FtcD5dWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3BlY2lhbC1zeW1zPC9zcGFuPjwvc2FtcD5dCisgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbjwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi12PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1udW1lcmljLXNvcnQ8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1zb3J0PC9zcGFuPjwvc2FtcD5dCisgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcjwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcmV2ZXJzZS1zb3J0PC9zcGFuPjwvc2FtcD5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXNpemUtc29ydDwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXU8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXVuZGVmaW5lZC1vbmx5PC9zcGFuPjwvc2FtcD5dCisgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdDwvc3Bhbj48L3NhbXA+IDx2YXI+cmFkaXg8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1yYWRpeD08L3NwYW4+PC9zYW1wPjx2YXI+cmFkaXg8L3Zhcj5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcG9ydGFiaWxpdHk8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdGFyZ2V0PTwvc3Bhbj48L3NhbXA+PHZhcj5iZmRuYW1lPC92YXI+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWY8L3NwYW4+PC9zYW1wPjx2YXI+Zm9ybWF0PC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZm9ybWF0PTwvc3Bhbj48L3NhbXA+PHZhcj5mb3JtYXQ8L3Zhcj5dCisgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRlZmluZWQtb25seTwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWw8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWxpbmUtbnVtYmVyczwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1kZW1hbmdsZTwvc3Bhbj48L3NhbXA+XQorICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb248L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1YIDMyXzY0PC9zcGFuPjwvc2FtcD5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L3NwYW4+PC9zYW1wPl0gIFs8dmFyPm9iamZpbGU8L3Zhcj4uLi5dCisgICAgIDwhLS0gbWFuIGVuZCAtLT4KKzwvcHJlPgorICAgPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gbm0gLS0+CisgICA8cD48c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5tPC9zcGFuPjwvc2FtcD4gbGlzdHMgdGhlIHN5bWJvbHMgZnJvbSBvYmplY3QgZmlsZXMgPHZhcj5vYmpmaWxlPC92YXI+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPi4gCitJZiBubyBvYmplY3QgZmlsZXMgYXJlIGxpc3RlZCBhcyBhcmd1bWVudHMsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ubTwvc3Bhbj48L3NhbXA+IGFzc3VtZXMgdGhlIGZpbGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hLm91dDwvc3Bhbj48L3NhbXA+LgorCisgICA8cD5Gb3IgZWFjaCBzeW1ib2wsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ubTwvc3Bhbj48L3NhbXA+IHNob3dzOgorCisgICAgIDx1bD4KKzxsaT5UaGUgc3ltYm9sIHZhbHVlLCBpbiB0aGUgcmFkaXggc2VsZWN0ZWQgYnkgb3B0aW9ucyAoc2VlIGJlbG93KSwgb3IKK2hleGFkZWNpbWFsIGJ5IGRlZmF1bHQuCisKKyAgICAgPGxpPlRoZSBzeW1ib2wgdHlwZS4gIEF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIHVzZWQ7IG90aGVycyBhcmUsIGFzCit3ZWxsLCBkZXBlbmRpbmcgb24gdGhlIG9iamVjdCBmaWxlIGZvcm1hdC4gIElmIGxvd2VyY2FzZSwgdGhlIHN5bWJvbCBpcwordXN1YWxseSBsb2NhbDsgaWYgdXBwZXJjYXNlLCB0aGUgc3ltYm9sIGlzIGdsb2JhbCAoZXh0ZXJuYWwpLiAgVGhlcmUKK2FyZSBob3dldmVyIGEgZmV3IGxvd2VyY2FzZSBzeW1ib2xzIHRoYXQgYXJlIHNob3duIGZvciBzcGVjaWFsIGdsb2JhbAorc3ltYm9scyAoPGNvZGU+dTwvY29kZT4sIDxjb2RlPnY8L2NvZGU+IGFuZCA8Y29kZT53PC9jb2RlPikuCisKKyAgICAgPCEtLSBTb21lIG1vcmUgZGV0YWlsIG9uIGV4YWN0bHkgd2hhdCB0aGVzZSBzeW1ib2wgdHlwZXMgYXJlIHVzZWQgZm9yIC0tPgorICAgICA8IS0tIHdvdWxkIGJlIG5pY2UuIC0tPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5BPC9jb2RlPjxkZD5UaGUgc3ltYm9sJ3MgdmFsdWUgaXMgYWJzb2x1dGUsIGFuZCB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IGZ1cnRoZXIKK2xpbmtpbmcuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkI8L2NvZGU+PGR0Pjxjb2RlPmI8L2NvZGU+PGRkPlRoZSBzeW1ib2wgaXMgaW4gdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uIChrbm93biBhcyBCU1MpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5DPC9jb2RlPjxkZD5UaGUgc3ltYm9sIGlzIGNvbW1vbi4gIENvbW1vbiBzeW1ib2xzIGFyZSB1bmluaXRpYWxpemVkIGRhdGEuICBXaGVuCitsaW5raW5nLCBtdWx0aXBsZSBjb21tb24gc3ltYm9scyBtYXkgYXBwZWFyIHdpdGggdGhlIHNhbWUgbmFtZS4gIElmIHRoZQorc3ltYm9sIGlzIGRlZmluZWQgYW55d2hlcmUsIHRoZSBjb21tb24gc3ltYm9scyBhcmUgdHJlYXRlZCBhcyB1bmRlZmluZWQKK3JlZmVyZW5jZXMuIAorRm9yIG1vcmUgZGV0YWlscyBvbiBjb21tb24gc3ltYm9scywgc2VlIHRoZSBkaXNjdXNzaW9uIG9mCismbmRhc2g7d2Fybi1jb21tb24gaW4gPGEgaHJlZj0iLi4vbGQvT3B0aW9ucy5odG1sI09wdGlvbnMiPkxpbmtlciBvcHRpb25zPC9hPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+RDwvY29kZT48ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyBpbiB0aGUgaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5HPC9jb2RlPjxkdD48Y29kZT5nPC9jb2RlPjxkZD5UaGUgc3ltYm9sIGlzIGluIGFuIGluaXRpYWxpemVkIGRhdGEgc2VjdGlvbiBmb3Igc21hbGwgb2JqZWN0cy4gIFNvbWUKK29iamVjdCBmaWxlIGZvcm1hdHMgcGVybWl0IG1vcmUgZWZmaWNpZW50IGFjY2VzcyB0byBzbWFsbCBkYXRhIG9iamVjdHMsCitzdWNoIGFzIGEgZ2xvYmFsIGludCB2YXJpYWJsZSBhcyBvcHBvc2VkIHRvIGEgbGFyZ2UgZ2xvYmFsIGFycmF5LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pPC9jb2RlPjxkZD5Gb3IgUEUgZm9ybWF0IGZpbGVzIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHN5bWJvbCBpcyBpbiBhIHNlY3Rpb24KK3NwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBETExzLiAgRm9yIEVMRiBmb3JtYXQgZmlsZXMgdGhpcworaW5kaWNhdGVzIHRoYXQgdGhlIHN5bWJvbCBpcyBhbiBpbmRpcmVjdCBmdW5jdGlvbi4gIFRoaXMgaXMgYSBHTlUKK2V4dGVuc2lvbiB0byB0aGUgc3RhbmRhcmQgc2V0IG9mIEVMRiBzeW1ib2wgdHlwZXMuICBJdCBpbmRpY2F0ZXMgYQorc3ltYm9sIHdoaWNoIGlmIHJlZmVyZW5jZWQgYnkgYSByZWxvY2F0aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvIGl0cworYWRkcmVzcywgYnV0IGluc3RlYWQgbXVzdCBiZSBpbnZva2VkIGF0IHJ1bnRpbWUuICBUaGUgcnVudGltZQorZXhlY3V0aW9uIHdpbGwgdGhlbiByZXR1cm4gdGhlIHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIHJlbG9jYXRpb24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPlRoZSBzeW1ib2wgaXMgYSBkZWJ1Z2dpbmcgc3ltYm9sLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5wPC9jb2RlPjxkZD5UaGUgc3ltYm9scyBpcyBpbiBhIHN0YWNrIHVud2luZCBzZWN0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SPC9jb2RlPjxkdD48Y29kZT5yPC9jb2RlPjxkZD5UaGUgc3ltYm9sIGlzIGluIGEgcmVhZCBvbmx5IGRhdGEgc2VjdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UzwvY29kZT48ZHQ+PGNvZGU+czwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyBpbiBhbiB1bmluaXRpYWxpemVkIGRhdGEgc2VjdGlvbiBmb3Igc21hbGwgb2JqZWN0cy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VDwvY29kZT48ZHQ+PGNvZGU+dDwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyBpbiB0aGUgdGV4dCAoY29kZSkgc2VjdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VTwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyB1bmRlZmluZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnU8L2NvZGU+PGRkPlRoZSBzeW1ib2wgaXMgYSB1bmlxdWUgZ2xvYmFsIHN5bWJvbC4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uIHRvIHRoZQorc3RhbmRhcmQgc2V0IG9mIEVMRiBzeW1ib2wgYmluZGluZ3MuICBGb3Igc3VjaCBhIHN5bWJvbCB0aGUgZHluYW1pYyBsaW5rZXIKK3dpbGwgbWFrZSBzdXJlIHRoYXQgaW4gdGhlIGVudGlyZSBwcm9jZXNzIHRoZXJlIGlzIGp1c3Qgb25lIHN5bWJvbCB3aXRoCit0aGlzIG5hbWUgYW5kIHR5cGUgaW4gdXNlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5WPC9jb2RlPjxkdD48Y29kZT52PC9jb2RlPjxkZD5UaGUgc3ltYm9sIGlzIGEgd2VhayBvYmplY3QuICBXaGVuIGEgd2VhayBkZWZpbmVkIHN5bWJvbCBpcyBsaW5rZWQgd2l0aAorYSBub3JtYWwgZGVmaW5lZCBzeW1ib2wsIHRoZSBub3JtYWwgZGVmaW5lZCBzeW1ib2wgaXMgdXNlZCB3aXRoIG5vIGVycm9yLiAKK1doZW4gYSB3ZWFrIHVuZGVmaW5lZCBzeW1ib2wgaXMgbGlua2VkIGFuZCB0aGUgc3ltYm9sIGlzIG5vdCBkZWZpbmVkLAordGhlIHZhbHVlIG9mIHRoZSB3ZWFrIHN5bWJvbCBiZWNvbWVzIHplcm8gd2l0aCBubyBlcnJvci4gIE9uIHNvbWUKK3N5c3RlbXMsIHVwcGVyY2FzZSBpbmRpY2F0ZXMgdGhhdCBhIGRlZmF1bHQgdmFsdWUgaGFzIGJlZW4gc3BlY2lmaWVkLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5XPC9jb2RlPjxkdD48Y29kZT53PC9jb2RlPjxkZD5UaGUgc3ltYm9sIGlzIGEgd2VhayBzeW1ib2wgdGhhdCBoYXMgbm90IGJlZW4gc3BlY2lmaWNhbGx5IHRhZ2dlZCBhcyBhCit3ZWFrIG9iamVjdCBzeW1ib2wuICBXaGVuIGEgd2VhayBkZWZpbmVkIHN5bWJvbCBpcyBsaW5rZWQgd2l0aCBhIG5vcm1hbAorZGVmaW5lZCBzeW1ib2wsIHRoZSBub3JtYWwgZGVmaW5lZCBzeW1ib2wgaXMgdXNlZCB3aXRoIG5vIGVycm9yLiAKK1doZW4gYSB3ZWFrIHVuZGVmaW5lZCBzeW1ib2wgaXMgbGlua2VkIGFuZCB0aGUgc3ltYm9sIGlzIG5vdCBkZWZpbmVkLAordGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wgaXMgZGV0ZXJtaW5lZCBpbiBhIHN5c3RlbS1zcGVjaWZpYyBtYW5uZXIgd2l0aG91dAorZXJyb3IuICBPbiBzb21lIHN5c3RlbXMsIHVwcGVyY2FzZSBpbmRpY2F0ZXMgdGhhdCBhIGRlZmF1bHQgdmFsdWUgaGFzIGJlZW4KK3NwZWNpZmllZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LTwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyBhIHN0YWJzIHN5bWJvbCBpbiBhbiBhLm91dCBvYmplY3QgZmlsZS4gIEluIHRoaXMgY2FzZSwgdGhlCituZXh0IHZhbHVlcyBwcmludGVkIGFyZSB0aGUgc3RhYnMgb3RoZXIgZmllbGQsIHRoZSBzdGFicyBkZXNjIGZpZWxkLCBhbmQKK3RoZSBzdGFiIHR5cGUuICBTdGFicyBzeW1ib2xzIGFyZSB1c2VkIHRvIGhvbGQgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj0iLi4vc3RhYnMvaW5kZXguaHRtbCNUb3AiPlN0YWJzPC9hPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+PzwvY29kZT48ZGQ+VGhlIHN5bWJvbCB0eXBlIGlzIHVua25vd24sIG9yIG9iamVjdCBmaWxlIGZvcm1hdCBzcGVjaWZpYy4gCis8L2RsPgorCisgICAgIDxsaT5UaGUgc3ltYm9sIG5hbWUuIAorPC91bD4KKworPCEtLSBtYW4gZW5kIC0tPgorPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyBubSAtLT4KKyAgIDxwPlRoZSBsb25nIGFuZCBzaG9ydCBmb3JtcyBvZiBvcHRpb25zLCBzaG93biBoZXJlIGFzIGFsdGVybmF0aXZlcywgYXJlCitlcXVpdmFsZW50LgorCisgICAgIDxkbD4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tQTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1vPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wcmludC1maWxlLW5hbWU8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1pbnB1dC1maWxlLW5hbWUtMzgiPjwvYT48YSBuYW1lPSJpbmRleC1maWxlLW5hbWUtMzkiPjwvYT48YSBuYW1lPSJpbmRleC1zb3VyY2UtZmlsZS1uYW1lLTQwIj48L2E+UHJlY2VkZSBlYWNoIHN5bWJvbCBieSB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgZmlsZSAob3IgYXJjaGl2ZSBtZW1iZXIpCitpbiB3aGljaCBpdCB3YXMgZm91bmQsIHJhdGhlciB0aGFuIGlkZW50aWZ5aW5nIHRoZSBpbnB1dCBmaWxlIG9uY2Ugb25seSwKK2JlZm9yZSBhbGwgb2YgaXRzIHN5bWJvbHMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tYTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZGVidWctc3ltczwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWRlYnVnZ2luZy1zeW1ib2xzLTQxIj48L2E+RGlzcGxheSBhbGwgc3ltYm9scywgZXZlbiBkZWJ1Z2dlci1vbmx5IHN5bWJvbHM7IG5vcm1hbGx5IHRoZXNlIGFyZSBub3QKK2xpc3RlZC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1CPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2JubV8wMDdkLWZvcm1hdC00MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29tbWFuZF8wMDdibm1fMDA3ZC1jb21wYXRpYmlsaXR5LTQzIj48L2E+VGhlIHNhbWUgYXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1mb3JtYXQ9YnNkPC9zcGFuPjwvc2FtcD4gKGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE1JUFMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5tPC9zcGFuPjwvc2FtcD4pLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUM8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWRlbWFuZ2xlWz08L3NwYW4+PHZhcj5zdHlsZTwvdmFyPjxzcGFuIGNsYXNzPSJlbnYiPl08L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1kZW1hbmdsaW5nLWluLW5tLTQ0Ij48L2E+RGVjb2RlICg8ZGZuPmRlbWFuZ2xlPC9kZm4+KSBsb3ctbGV2ZWwgc3ltYm9sIG5hbWVzIGludG8gdXNlci1sZXZlbCBuYW1lcy4gCitCZXNpZGVzIHJlbW92aW5nIGFueSBpbml0aWFsIHVuZGVyc2NvcmUgcHJlcGVuZGVkIGJ5IHRoZSBzeXN0ZW0sIHRoaXMKK21ha2VzIEMrKyBmdW5jdGlvbiBuYW1lcyByZWFkYWJsZS4gRGlmZmVyZW50IGNvbXBpbGVycyBoYXZlIGRpZmZlcmVudAorbWFuZ2xpbmcgc3R5bGVzLiBUaGUgb3B0aW9uYWwgZGVtYW5nbGluZyBzdHlsZSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0bworY2hvb3NlIGFuIGFwcHJvcHJpYXRlIGRlbWFuZ2xpbmcgc3R5bGUgZm9yIHlvdXIgY29tcGlsZXIuIFNlZSA8YSBocmVmPSJjXzAwMmJfMDAyYmZpbHQuaHRtbCNjXzAwMmJfMDAyYmZpbHQiPmMrK2ZpbHQ8L2E+LAorZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZGVtYW5nbGluZy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbm8tZGVtYW5nbGU8L3NwYW4+PC9zYW1wPjxkZD5EbyBub3QgZGVtYW5nbGUgbG93LWxldmVsIHN5bWJvbCBuYW1lcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZHluYW1pYzwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWR5bmFtaWMtc3ltYm9scy00NSI+PC9hPkRpc3BsYXkgdGhlIGR5bmFtaWMgc3ltYm9scyByYXRoZXIgdGhhbiB0aGUgbm9ybWFsIHN5bWJvbHMuICBUaGlzIGlzCitvbmx5IG1lYW5pbmdmdWwgZm9yIGR5bmFtaWMgb2JqZWN0cywgc3VjaCBhcyBjZXJ0YWluIHR5cGVzIG9mIHNoYXJlZAorbGlicmFyaWVzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWYgPC9zcGFuPjx2YXI+Zm9ybWF0PC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWZvcm1hdD08L3NwYW4+PHZhcj5mb3JtYXQ8L3Zhcj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29tbWFuZF8wMDdibm1fMDA3ZC1mb3JtYXQtNDYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ym5tXzAwN2QtY29tcGF0aWJpbGl0eS00NyI+PC9hPlVzZSB0aGUgb3V0cHV0IGZvcm1hdCA8dmFyPmZvcm1hdDwvdmFyPiwgd2hpY2ggY2FuIGJlIDxjb2RlPmJzZDwvY29kZT4sCis8Y29kZT5zeXN2PC9jb2RlPiwgb3IgPGNvZGU+cG9zaXg8L2NvZGU+LiAgVGhlIGRlZmF1bHQgaXMgPGNvZGU+YnNkPC9jb2RlPi4gCitPbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgPHZhcj5mb3JtYXQ8L3Zhcj4gaXMgc2lnbmlmaWNhbnQ7IGl0IGNhbiBiZQorZWl0aGVyIHVwcGVyIG9yIGxvd2VyIGNhc2UuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZXh0ZXJuLW9ubHk8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1leHRlcm5hbC1zeW1ib2xzLTQ4Ij48L2E+RGlzcGxheSBvbmx5IGV4dGVybmFsIHN5bWJvbHMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXBsdWdpbiA8L3NwYW4+PHZhcj5uYW1lPC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1sb2FkLXBsdWdpbi00OSI+PC9hPkxvYWQgdGhlIHBsdWdpbiBjYWxsZWQgPHZhcj5uYW1lPC92YXI+IHRvIGFkZCBzdXBwb3J0IGZvciBleHRyYSB0YXJnZXQKK3R5cGVzLiAgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIHRvb2xjaGFpbiBoYXMgYmVlbiBidWlsdAord2l0aCBwbHVnaW4gc3VwcG9ydCBlbmFibGVkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWw8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWxpbmUtbnVtYmVyczwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LXN5bWJvbC1saW5lLW51bWJlcnMtNTAiPjwvYT5Gb3IgZWFjaCBzeW1ib2wsIHVzZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gdHJ5IHRvIGZpbmQgYSBmaWxlbmFtZSBhbmQKK2xpbmUgbnVtYmVyLiAgRm9yIGEgZGVmaW5lZCBzeW1ib2wsIGxvb2sgZm9yIHRoZSBsaW5lIG51bWJlciBvZiB0aGUKK2FkZHJlc3Mgb2YgdGhlIHN5bWJvbC4gIEZvciBhbiB1bmRlZmluZWQgc3ltYm9sLCBsb29rIGZvciB0aGUgbGluZQorbnVtYmVyIG9mIGEgcmVsb2NhdGlvbiBlbnRyeSB3aGljaCByZWZlcnMgdG8gdGhlIHN5bWJvbC4gIElmIGxpbmUgbnVtYmVyCitpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQsIHByaW50IGl0IGFmdGVyIHRoZSBvdGhlciBzeW1ib2wgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tbjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi12PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1udW1lcmljLXNvcnQ8L3NwYW4+PC9zYW1wPjxkZD5Tb3J0IHN5bWJvbHMgbnVtZXJpY2FsbHkgYnkgdGhlaXIgYWRkcmVzc2VzLCByYXRoZXIgdGhhbiBhbHBoYWJldGljYWxseQorYnkgdGhlaXIgbmFtZXMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tcDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbm8tc29ydDwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LXNvcnRpbmctc3ltYm9scy01MSI+PC9hPkRvIG5vdCBib3RoZXIgdG8gc29ydCB0aGUgc3ltYm9scyBpbiBhbnkgb3JkZXI7IHByaW50IHRoZW0gaW4gdGhlIG9yZGVyCitlbmNvdW50ZXJlZC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1QPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wb3J0YWJpbGl0eTwvc3Bhbj48L3NhbXA+PGRkPlVzZSB0aGUgUE9TSVguMiBzdGFuZGFyZCBvdXRwdXQgZm9ybWF0IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9ybWF0LiAKK0VxdWl2YWxlbnQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZiBwb3NpeDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1TPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wcmludC1zaXplPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnQgYm90aCB2YWx1ZSBhbmQgc2l6ZSBvZiBkZWZpbmVkIHN5bWJvbHMgZm9yIHRoZSA8Y29kZT5ic2Q8L2NvZGU+IG91dHB1dCBzdHlsZS4gCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGZvciBvYmplY3QgZm9ybWF0cyB0aGF0IGRvIG5vdCByZWNvcmQgc3ltYm9sCitzaXplcywgdW5sZXNzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1zaXplLXNvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYWxzbyB1c2VkIGluIHdoaWNoIGNhc2UgYQorY2FsY3VsYXRlZCBzaXplIGlzIGRpc3BsYXllZC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1zPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wcmludC1hcm1hcDwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LXN5bWJvbC1pbmRleF8wMDJjLWxpc3RpbmctNTIiPjwvYT5XaGVuIGxpc3Rpbmcgc3ltYm9scyBmcm9tIGFyY2hpdmUgbWVtYmVycywgaW5jbHVkZSB0aGUgaW5kZXg6IGEgbWFwcGluZworKHN0b3JlZCBpbiB0aGUgYXJjaGl2ZSBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+cmFubGliPC9zcGFuPjwvc2FtcD4pIG9mIHdoaWNoIG1vZHVsZXMKK2NvbnRhaW4gZGVmaW5pdGlvbnMgZm9yIHdoaWNoIG5hbWVzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXI8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXJldmVyc2Utc29ydDwvc3Bhbj48L3NhbXA+PGRkPlJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSBzb3J0ICh3aGV0aGVyIG51bWVyaWMgb3IgYWxwaGFiZXRpYyk7IGxldCB0aGUKK2xhc3QgY29tZSBmaXJzdC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc2l6ZS1zb3J0PC9zcGFuPjwvc2FtcD48ZGQ+U29ydCBzeW1ib2xzIGJ5IHNpemUuICBUaGUgc2l6ZSBpcyBjb21wdXRlZCBhcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCit0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wgd2l0aCB0aGUgbmV4dCBoaWdoZXIKK3ZhbHVlLiAgSWYgdGhlIDxjb2RlPmJzZDwvY29kZT4gb3V0cHV0IGZvcm1hdCBpcyB1c2VkIHRoZSBzaXplIG9mIHRoZSBzeW1ib2wKK2lzIHByaW50ZWQsIHJhdGhlciB0aGFuIHRoZSB2YWx1ZSwgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbXVzdCBiZSB1c2VkIGluIG9yZGVyCitib3RoIHNpemUgYW5kIHZhbHVlIHRvIGJlIHByaW50ZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXNwZWNpYWwtc3ltczwvc3Bhbj48L3NhbXA+PGRkPkRpc3BsYXkgc3ltYm9scyB3aGljaCBoYXZlIGEgdGFyZ2V0LXNwZWNpZmljIHNwZWNpYWwgbWVhbmluZy4gIFRoZXNlCitzeW1ib2xzIGFyZSB1c3VhbGx5IHVzZWQgYnkgdGhlIHRhcmdldCBmb3Igc29tZSBzcGVjaWFsIHByb2Nlc3NpbmcgYW5kCithcmUgbm90IG5vcm1hbGx5IGhlbHBmdWwgd2hlbiBpbmNsdWRlZCBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIHN5bWJvbAorbGlzdHMuICBGb3IgZXhhbXBsZSBmb3IgQVJNIHRhcmdldHMgdGhpcyBvcHRpb24gd291bGQgc2tpcCB0aGUgbWFwcGluZworc3ltYm9scyB1c2VkIHRvIG1hcmsgdHJhbnNpdGlvbnMgYmV0d2VlbiBBUk0gY29kZSwgVEhVTUIgY29kZSBhbmQKK2RhdGEuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tdCA8L3NwYW4+PHZhcj5yYWRpeDwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1yYWRpeD08L3NwYW4+PHZhcj5yYWRpeDwvdmFyPjwvc2FtcD48ZGQ+VXNlIDx2YXI+cmFkaXg8L3Zhcj4gYXMgdGhlIHJhZGl4IGZvciBwcmludGluZyB0aGUgc3ltYm9sIHZhbHVlcy4gIEl0IG11c3QgYmUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgZGVjaW1hbCwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBvY3RhbCwgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54PC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBoZXhhZGVjaW1hbC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdGFyZ2V0PTwvc3Bhbj48dmFyPmJmZG5hbWU8L3Zhcj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LW9iamVjdC1jb2RlLWZvcm1hdC01MyI+PC9hPlNwZWNpZnkgYW4gb2JqZWN0IGNvZGUgZm9ybWF0IG90aGVyIHRoYW4geW91ciBzeXN0ZW0ncyBkZWZhdWx0IGZvcm1hdC4gCitTZWUgPGEgaHJlZj0iVGFyZ2V0LVNlbGVjdGlvbi5odG1sI1RhcmdldC1TZWxlY3Rpb24iPlRhcmdldCBTZWxlY3Rpb248L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi11PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS11bmRlZmluZWQtb25seTwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWV4dGVybmFsLXN5bWJvbHMtNTQiPjwvYT48YSBuYW1lPSJpbmRleC11bmRlZmluZWQtc3ltYm9scy01NSI+PC9hPkRpc3BsYXkgb25seSB1bmRlZmluZWQgc3ltYm9scyAodGhvc2UgZXh0ZXJuYWwgdG8gZWFjaCBvYmplY3QgZmlsZSkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWRlZmluZWQtb25seTwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWV4dGVybmFsLXN5bWJvbHMtNTYiPjwvYT48YSBuYW1lPSJpbmRleC11bmRlZmluZWQtc3ltYm9scy01NyI+PC9hPkRpc3BsYXkgb25seSBkZWZpbmVkIHN5bWJvbHMgZm9yIGVhY2ggb2JqZWN0IGZpbGUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdmVyc2lvbjwvc3Bhbj48L3NhbXA+PGRkPlNob3cgdGhlIHZlcnNpb24gbnVtYmVyIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ubTwvc3Bhbj48L3NhbXA+IGFuZCBleGl0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVg8L3NwYW4+PC9zYW1wPjxkZD5UaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIEFJWCB2ZXJzaW9uIG9mCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bm08L3NwYW4+PC9zYW1wPi4gIEl0IHRha2VzIG9uZSBwYXJhbWV0ZXIgd2hpY2ggbXVzdCBiZSB0aGUgc3RyaW5nCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4zMl82NDwvc3Bhbj48L3NhbXA+LiAgVGhlIGRlZmF1bHQgbW9kZSBvZiBBSVggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5tPC9zcGFuPjwvc2FtcD4gY29ycmVzcG9uZHMKK3RvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1YIDMyPC9zcGFuPjwvc2FtcD4sIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ubTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+U2hvdyBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5tPC9zcGFuPjwvc2FtcD4gYW5kIGV4aXQuIAorPC9kbD4KKworPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvb2JqY29weS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvb2JqY29weS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Y2U0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9vYmpjb3B5Lmh0bWwKQEAgLTAsMCArMSw2NjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm9iamNvcHkgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibm0uaHRtbCNubSIgdGl0bGU9Im5tIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ib2JqZHVtcC5odG1sI29iamR1bXAiIHRpdGxlPSJvYmpkdW1wIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJvYmpjb3B5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibm0uaHRtbCNubSI+bm08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MyBvYmpjb3B5PC9oMj4KKworPCEtLSBtYW4gdGl0bGUgb2JqY29weSBjb3B5IGFuZCB0cmFuc2xhdGUgb2JqZWN0IGZpbGVzIC0tPgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDwhLS0gbWFuIGJlZ2luIFNZTk9QU0lTIG9iamNvcHkgLS0+CisgICAgIG9iamNvcHkgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1GPC9zcGFuPjwvc2FtcD4gPHZhcj5iZmRuYW1lPC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdGFyZ2V0PTwvc3Bhbj48L3NhbXA+PHZhcj5iZmRuYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IDx2YXI+YmZkbmFtZTwvdmFyPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlucHV0LXRhcmdldD08L3NwYW4+PC9zYW1wPjx2YXI+YmZkbmFtZTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiA8dmFyPmJmZG5hbWU8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vdXRwdXQtdGFyZ2V0PTwvc3Bhbj48L3NhbXA+PHZhcj5iZmRuYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQjwvc3Bhbj48L3NhbXA+IDx2YXI+YmZkYXJjaDwvdmFyPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWJpbmFyeS1hcmNoaXRlY3R1cmU9PC9zcGFuPjwvc2FtcD48dmFyPmJmZGFyY2g8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1TPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpcC1hbGw8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWc8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0cmlwLWRlYnVnPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1LPC9zcGFuPjwvc2FtcD4gPHZhcj5zeW1ib2xuYW1lPC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0ta2VlcC1zeW1ib2w9PC9zcGFuPjwvc2FtcD48dmFyPnN5bWJvbG5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1OPC9zcGFuPjwvc2FtcD4gPHZhcj5zeW1ib2xuYW1lPC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RyaXAtc3ltYm9sPTwvc3Bhbj48L3NhbXA+PHZhcj5zeW1ib2xuYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0cmlwLXVubmVlZGVkLXN5bWJvbD08L3NwYW4+PC9zYW1wPjx2YXI+c3ltYm9sbmFtZTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUc8L3NwYW4+PC9zYW1wPiA8dmFyPnN5bWJvbG5hbWU8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1rZWVwLWdsb2JhbC1zeW1ib2w9PC9zcGFuPjwvc2FtcD48dmFyPnN5bWJvbG5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbG9jYWxpemUtaGlkZGVuPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1MPC9zcGFuPjwvc2FtcD4gPHZhcj5zeW1ib2xuYW1lPC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbG9jYWxpemUtc3ltYm9sPTwvc3Bhbj48L3NhbXA+PHZhcj5zeW1ib2xuYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWdsb2JhbGl6ZS1zeW1ib2w9PC9zcGFuPjwvc2FtcD48dmFyPnN5bWJvbG5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XPC9zcGFuPjwvc2FtcD4gPHZhcj5zeW1ib2xuYW1lPC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2Vha2VuLXN5bWJvbD08L3NwYW4+PC9zYW1wPjx2YXI+c3ltYm9sbmFtZTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXc8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdpbGRjYXJkPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kaXNjYXJkLWFsbDwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tWDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZGlzY2FyZC1sb2NhbHM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWI8L3NwYW4+PC9zYW1wPiA8dmFyPmJ5dGU8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1ieXRlPTwvc3Bhbj48L3NhbXA+PHZhcj5ieXRlPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taTwvc3Bhbj48L3NhbXA+IFs8dmFyPmJyZWFkdGg8L3Zhcj5dfDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taW50ZXJsZWF2ZTwvc3Bhbj48L3NhbXA+Wz08dmFyPmJyZWFkdGg8L3Zhcj5dXQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWludGVybGVhdmUtd2lkdGg9PC9zcGFuPjwvc2FtcD48dmFyPndpZHRoPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tajwvc3Bhbj48L3NhbXA+IDx2YXI+c2VjdGlvbm5hbWU8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vbmx5LXNlY3Rpb249PC9zcGFuPjwvc2FtcD48dmFyPnNlY3Rpb25uYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUjwvc3Bhbj48L3NhbXA+IDx2YXI+c2VjdGlvbm5hbWU8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1yZW1vdmUtc2VjdGlvbj08L3NwYW4+PC9zYW1wPjx2YXI+c2VjdGlvbm5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wcmVzZXJ2ZS1kYXRlczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVU8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRpc2FibGUtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRlYnVnZ2luZzwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWdhcC1maWxsPTwvc3Bhbj48L3NhbXA+PHZhcj52YWw8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGFkLXRvPTwvc3Bhbj48L3NhbXA+PHZhcj5hZGRyZXNzPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXNldC1zdGFydD08L3NwYW4+PC9zYW1wPjx2YXI+dmFsPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFkanVzdC1zdGFydD08L3NwYW4+PC9zYW1wPjx2YXI+aW5jcjwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGFuZ2UtYWRkcmVzc2VzPTwvc3Bhbj48L3NhbXA+PHZhcj5pbmNyPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWNoYW5nZS1zZWN0aW9uLWFkZHJlc3M8L3NwYW4+PC9zYW1wPiA8dmFyPnNlY3Rpb248L3Zhcj57PSwrLC19PHZhcj52YWw8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tY2hhbmdlLXNlY3Rpb24tbG1hPC9zcGFuPjwvc2FtcD4gPHZhcj5zZWN0aW9uPC92YXI+ez0sKywtfTx2YXI+dmFsPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWNoYW5nZS1zZWN0aW9uLXZtYTwvc3Bhbj48L3NhbXA+IDx2YXI+c2VjdGlvbjwvdmFyPns9LCssLX08dmFyPnZhbDwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGFuZ2Utd2FybmluZ3M8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tY2hhbmdlLXdhcm5pbmdzPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2V0LXNlY3Rpb24tZmxhZ3M8L3NwYW4+PC9zYW1wPiA8dmFyPnNlY3Rpb248L3Zhcj49PHZhcj5mbGFnczwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hZGQtc2VjdGlvbjwvc3Bhbj48L3NhbXA+IDx2YXI+c2VjdGlvbm5hbWU8L3Zhcj49PHZhcj5maWxlbmFtZTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1yZW5hbWUtc2VjdGlvbjwvc3Bhbj48L3NhbXA+IDx2YXI+b2xkbmFtZTwvdmFyPj08dmFyPm5ld25hbWU8L3Zhcj5bLDx2YXI+ZmxhZ3M8L3Zhcj5dXQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWxvbmctc2VjdGlvbi1uYW1lczwvc3Bhbj48L3NhbXA+IHtlbmFibGUsZGlzYWJsZSxrZWVwfV0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGFuZ2UtbGVhZGluZy1jaGFyPC9zcGFuPjwvc2FtcD5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlbW92ZS1sZWFkaW5nLWNoYXI8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1yZXZlcnNlLWJ5dGVzPTwvc3Bhbj48L3NhbXA+PHZhcj5udW08L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3JlYy1sZW49PC9zcGFuPjwvc2FtcD48dmFyPml2YWw8L3Zhcj5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXNyZWMtZm9yY2VTMzwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlZGVmaW5lLXN5bTwvc3Bhbj48L3NhbXA+IDx2YXI+b2xkPC92YXI+PTx2YXI+bmV3PC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlZGVmaW5lLXN5bXM9PC9zcGFuPjwvc2FtcD48dmFyPmZpbGVuYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdlYWtlbjwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWtlZXAtc3ltYm9scz08L3NwYW4+PC9zYW1wPjx2YXI+ZmlsZW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RyaXAtc3ltYm9scz08L3NwYW4+PC9zYW1wPjx2YXI+ZmlsZW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RyaXAtdW5uZWVkZWQtc3ltYm9scz08L3NwYW4+PC9zYW1wPjx2YXI+ZmlsZW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0ta2VlcC1nbG9iYWwtc3ltYm9scz08L3NwYW4+PC9zYW1wPjx2YXI+ZmlsZW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbG9jYWxpemUtc3ltYm9scz08L3NwYW4+PC9zYW1wPjx2YXI+ZmlsZW5hbWU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZ2xvYmFsaXplLXN5bWJvbHM9PC9zcGFuPjwvc2FtcD48dmFyPmZpbGVuYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdlYWtlbi1zeW1ib2xzPTwvc3Bhbj48L3NhbXA+PHZhcj5maWxlbmFtZTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hbHQtbWFjaGluZS1jb2RlPTwvc3Bhbj48L3NhbXA+PHZhcj5pbmRleDwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wcmVmaXgtc3ltYm9scz08L3NwYW4+PC9zYW1wPjx2YXI+c3RyaW5nPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXByZWZpeC1zZWN0aW9ucz08L3NwYW4+PC9zYW1wPjx2YXI+c3RyaW5nPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXByZWZpeC1hbGxvYy1zZWN0aW9ucz08L3NwYW4+PC9zYW1wPjx2YXI+c3RyaW5nPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFkZC1nbnUtZGVidWdsaW5rPTwvc3Bhbj48L3NhbXA+PHZhcj5wYXRoLXRvLWZpbGU8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0ta2VlcC1maWxlLXN5bWJvbHM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vbmx5LWtlZXAtZGVidWc8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpcC1kd288L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1leHRyYWN0LWR3bzwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWV4dHJhY3Qtc3ltYm9sPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td3JpdGFibGUtdGV4dDwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlYWRvbmx5LXRleHQ8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wdXJlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taW1wdXJlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZmlsZS1hbGlnbm1lbnQ9PC9zcGFuPjwvc2FtcD48dmFyPm51bTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWFwPTwvc3Bhbj48L3NhbXA+PHZhcj5zaXplPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWltYWdlLWJhc2U9PC9zcGFuPjwvc2FtcD48dmFyPmFkZHJlc3M8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2VjdGlvbi1hbGlnbm1lbnQ9PC9zcGFuPjwvc2FtcD48dmFyPm51bTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdGFjaz08L3NwYW4+PC9zYW1wPjx2YXI+c2l6ZTwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdWJzeXN0ZW09PC9zcGFuPjwvc2FtcD48dmFyPndoaWNoPC92YXI+Ojx2YXI+bWFqb3I8L3Zhcj4uPHZhcj5taW5vcjwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jb21wcmVzcy1kZWJ1Zy1zZWN0aW9uczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRlY29tcHJlc3MtZGVidWctc2VjdGlvbnM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kd2FyZi1kZXB0aD08L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kd2FyZi1zdGFydD08L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2U8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb248L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9zcGFuPjwvc2FtcD5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWluZm88L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICA8dmFyPmluZmlsZTwvdmFyPiBbPHZhcj5vdXRmaWxlPC92YXI+XQorICAgICA8IS0tIG1hbiBlbmQgLS0+Cis8L3ByZT4KKzwhLS0gbWFuIGJlZ2luIERFU0NSSVBUSU9OIG9iamNvcHkgLS0+CisgICA8cD5UaGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gdXRpbGl0eSBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIGFuIG9iamVjdAorZmlsZSB0byBhbm90aGVyLiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamNvcHk8L3NwYW4+PC9zYW1wPiB1c2VzIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNjIj5iZmQ8L3NwYW4+IExpYnJhcnkgdG8KK3JlYWQgYW5kIHdyaXRlIHRoZSBvYmplY3QgZmlsZXMuICBJdCBjYW4gd3JpdGUgdGhlIGRlc3RpbmF0aW9uIG9iamVjdAorZmlsZSBpbiBhIGZvcm1hdCBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mIHRoZSBzb3VyY2Ugb2JqZWN0IGZpbGUuICBUaGUKK2V4YWN0IGJlaGF2aW9yIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gaXMgY29udHJvbGxlZCBieSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gCitOb3RlIHRoYXQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamNvcHk8L3NwYW4+PC9zYW1wPiBzaG91bGQgYmUgYWJsZSB0byBjb3B5IGEgZnVsbHkgbGlua2VkIGZpbGUKK2JldHdlZW4gYW55IHR3byBmb3JtYXRzLiBIb3dldmVyLCBjb3B5aW5nIGEgcmVsb2NhdGFibGUgb2JqZWN0IGZpbGUKK2JldHdlZW4gYW55IHR3byBmb3JtYXRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4KKworICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamNvcHk8L3NwYW4+PC9zYW1wPiBjcmVhdGVzIHRlbXBvcmFyeSBmaWxlcyB0byBkbyBpdHMgdHJhbnNsYXRpb25zIGFuZAorZGVsZXRlcyB0aGVtIGFmdGVyd2FyZC4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gdXNlcyA8c3BhbiBjbGFzcz0ic2MiPmJmZDwvc3Bhbj4gdG8gZG8gYWxsIGl0cwordHJhbnNsYXRpb24gd29yazsgaXQgaGFzIGFjY2VzcyB0byBhbGwgdGhlIGZvcm1hdHMgZGVzY3JpYmVkIGluIDxzcGFuIGNsYXNzPSJzYyI+YmZkPC9zcGFuPgorYW5kIHRodXMgaXMgYWJsZSB0byByZWNvZ25pemUgbW9zdCBmb3JtYXRzIHdpdGhvdXQgYmVpbmcgdG9sZAorZXhwbGljaXRseS4gIFNlZSA8YSBocmVmPSIuLi9sZC9CRkQuaHRtbCNCRkQiPkJGRDwvYT4uCisKKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgUy1yZWNvcmRzIGJ5IHVzaW5nIGFuIG91dHB1dAordGFyZ2V0IG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3JlYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoZS5nLiwgdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LU8gc3JlYzwvc3Bhbj48L3NhbXA+JnJzcXVvOykuCisKKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSByYXcgYmluYXJ5IGZpbGUgYnkgdXNpbmcgYW4KK291dHB1dCB0YXJnZXQgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iaW5hcnk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGUuZy4sIHVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTyBiaW5hcnk8L3NwYW4+PC9zYW1wPikuICBXaGVuCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+b2JqY29weTwvc3Bhbj48L3NhbXA+IGdlbmVyYXRlcyBhIHJhdyBiaW5hcnkgZmlsZSwgaXQgd2lsbCBlc3NlbnRpYWxseSBwcm9kdWNlCithIG1lbW9yeSBkdW1wIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgaW5wdXQgb2JqZWN0IGZpbGUuICBBbGwgc3ltYm9scyBhbmQKK3JlbG9jYXRpb24gaW5mb3JtYXRpb24gd2lsbCBiZSBkaXNjYXJkZWQuICBUaGUgbWVtb3J5IGR1bXAgd2lsbCBzdGFydCBhdAordGhlIGxvYWQgYWRkcmVzcyBvZiB0aGUgbG93ZXN0IHNlY3Rpb24gY29waWVkIGludG8gdGhlIG91dHB1dCBmaWxlLgorCisgICA8cD5XaGVuIGdlbmVyYXRpbmcgYW4gUy1yZWNvcmQgb3IgYSByYXcgYmluYXJ5IGZpbGUsIGl0IG1heSBiZSBoZWxwZnVsIHRvCit1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVM8L3NwYW4+PC9zYW1wPiB0byByZW1vdmUgc2VjdGlvbnMgY29udGFpbmluZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBJbgorc29tZSBjYXNlcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUjwvc3Bhbj48L3NhbXA+IHdpbGwgYmUgdXNlZnVsIHRvIHJlbW92ZSBzZWN0aW9ucyB3aGljaCBjb250YWluCitpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBuZWVkZWQgYnkgdGhlIGJpbmFyeSBmaWxlLgorCisgICA8cD5Ob3RlJm1kYXNoOzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gaXMgbm90IGFibGUgdG8gY2hhbmdlIHRoZSBlbmRpYW5uZXNzIG9mIGl0cyBpbnB1dAorZmlsZXMuICBJZiB0aGUgaW5wdXQgZm9ybWF0IGhhcyBhbiBlbmRpYW5uZXNzIChzb21lIGZvcm1hdHMgZG8gbm90KSwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4gY2FuIG9ubHkgY29weSB0aGUgaW5wdXRzIGludG8gZmlsZSBmb3JtYXRzIHRoYXQgaGF2ZSB0aGUKK3NhbWUgZW5kaWFubmVzcyBvciB3aGljaCBoYXZlIG5vIGVuZGlhbm5lc3MgKGUuZy4sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3JlYzwvc3Bhbj48L3NhbXA+JnJzcXVvOykuIAorKEhvd2V2ZXIsIHNlZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1yZXZlcnNlLWJ5dGVzPC9zcGFuPjwvc2FtcD4gb3B0aW9uLikKKworPCEtLSBtYW4gZW5kIC0tPgorPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyBvYmpjb3B5IC0tPgorICAgICA8ZGw+Cis8ZHQ+PHNhbXA+PHZhcj5pbmZpbGU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjx2YXI+b3V0ZmlsZTwvdmFyPjwvc2FtcD48ZGQ+VGhlIGlucHV0IGFuZCBvdXRwdXQgZmlsZXMsIHJlc3BlY3RpdmVseS4gCitJZiB5b3UgZG8gbm90IHNwZWNpZnkgPHZhcj5vdXRmaWxlPC92YXI+LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+b2JqY29weTwvc3Bhbj48L3NhbXA+IGNyZWF0ZXMgYQordGVtcG9yYXJ5IGZpbGUgYW5kIGRlc3RydWN0aXZlbHkgcmVuYW1lcyB0aGUgcmVzdWx0IHdpdGgKK3RoZSBuYW1lIG9mIDx2YXI+aW5maWxlPC92YXI+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUkgPC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1pbnB1dC10YXJnZXQ9PC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZGQ+Q29uc2lkZXIgdGhlIHNvdXJjZSBmaWxlJ3Mgb2JqZWN0IGZvcm1hdCB0byBiZSA8dmFyPmJmZG5hbWU8L3Zhcj4sIHJhdGhlciB0aGFuCithdHRlbXB0aW5nIHRvIGRlZHVjZSBpdC4gIFNlZSA8YSBocmVmPSJUYXJnZXQtU2VsZWN0aW9uLmh0bWwjVGFyZ2V0LVNlbGVjdGlvbiI+VGFyZ2V0IFNlbGVjdGlvbjwvYT4sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LU8gPC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1vdXRwdXQtdGFyZ2V0PTwvc3Bhbj48dmFyPmJmZG5hbWU8L3Zhcj48L3NhbXA+PGRkPldyaXRlIHRoZSBvdXRwdXQgZmlsZSB1c2luZyB0aGUgb2JqZWN0IGZvcm1hdCA8dmFyPmJmZG5hbWU8L3Zhcj4uIAorU2VlIDxhIGhyZWY9IlRhcmdldC1TZWxlY3Rpb24uaHRtbCNUYXJnZXQtU2VsZWN0aW9uIj5UYXJnZXQgU2VsZWN0aW9uPC9hPiwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRiA8L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXRhcmdldD08L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkZD5Vc2UgPHZhcj5iZmRuYW1lPC92YXI+IGFzIHRoZSBvYmplY3QgZm9ybWF0IGZvciBib3RoIHRoZSBpbnB1dCBhbmQgdGhlIG91dHB1dAorZmlsZTsgaS5lLiwgc2ltcGx5IHRyYW5zZmVyIGRhdGEgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gd2l0aCBubwordHJhbnNsYXRpb24uICBTZWUgPGEgaHJlZj0iVGFyZ2V0LVNlbGVjdGlvbi5odG1sI1RhcmdldC1TZWxlY3Rpb24iPlRhcmdldCBTZWxlY3Rpb248L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1CIDwvc3Bhbj48dmFyPmJmZGFyY2g8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYmluYXJ5LWFyY2hpdGVjdHVyZT08L3NwYW4+PHZhcj5iZmRhcmNoPC92YXI+PC9zYW1wPjxkZD5Vc2VmdWwgd2hlbiB0cmFuc2Zvcm1pbmcgYSBhcmNoaXRlY3R1cmUtbGVzcyBpbnB1dCBmaWxlIGludG8gYW4gb2JqZWN0IGZpbGUuIAorSW4gdGhpcyBjYXNlIHRoZSBvdXRwdXQgYXJjaGl0ZWN0dXJlIGNhbiBiZSBzZXQgdG8gPHZhcj5iZmRhcmNoPC92YXI+LiAgVGhpcworb3B0aW9uIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUgaW5wdXQgZmlsZSBoYXMgYSBrbm93biA8dmFyPmJmZGFyY2g8L3Zhcj4uICBZb3UKK2NhbiBhY2Nlc3MgdGhpcyBiaW5hcnkgZGF0YSBpbnNpZGUgYSBwcm9ncmFtIGJ5IHJlZmVyZW5jaW5nIHRoZSBzcGVjaWFsCitzeW1ib2xzIHRoYXQgYXJlIGNyZWF0ZWQgYnkgdGhlIGNvbnZlcnNpb24gcHJvY2Vzcy4gIFRoZXNlIHN5bWJvbHMgYXJlCitjYWxsZWQgX2JpbmFyeV88dmFyPm9iamZpbGU8L3Zhcj5fc3RhcnQsIF9iaW5hcnlfPHZhcj5vYmpmaWxlPC92YXI+X2VuZCBhbmQKK19iaW5hcnlfPHZhcj5vYmpmaWxlPC92YXI+X3NpemUuICBlLmcuIHlvdSBjYW4gdHJhbnNmb3JtIGEgcGljdHVyZSBmaWxlIGludG8KK2FuIG9iamVjdCBmaWxlIGFuZCB0aGVuIGFjY2VzcyBpdCBpbiB5b3VyIGNvZGUgdXNpbmcgdGhlc2Ugc3ltYm9scy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1qIDwvc3Bhbj48dmFyPnNlY3Rpb25uYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW9ubHktc2VjdGlvbj08L3NwYW4+PHZhcj5zZWN0aW9ubmFtZTwvdmFyPjwvc2FtcD48ZGQ+Q29weSBvbmx5IHRoZSBuYW1lZCBzZWN0aW9uIGZyb20gdGhlIGlucHV0IGZpbGUgdG8gdGhlIG91dHB1dCBmaWxlLiAKK1RoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4gIE5vdGUgdGhhdCB1c2luZyB0aGlzIG9wdGlvbgoraW5hcHByb3ByaWF0ZWx5IG1heSBtYWtlIHRoZSBvdXRwdXQgZmlsZSB1bnVzYWJsZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1SIDwvc3Bhbj48dmFyPnNlY3Rpb25uYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXJlbW92ZS1zZWN0aW9uPTwvc3Bhbj48dmFyPnNlY3Rpb25uYW1lPC92YXI+PC9zYW1wPjxkZD5SZW1vdmUgYW55IHNlY3Rpb24gbmFtZWQgPHZhcj5zZWN0aW9ubmFtZTwvdmFyPiBmcm9tIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMKK29wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuICBOb3RlIHRoYXQgdXNpbmcgdGhpcyBvcHRpb24KK2luYXBwcm9wcmlhdGVseSBtYXkgbWFrZSB0aGUgb3V0cHV0IGZpbGUgdW51c2FibGUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tUzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3RyaXAtYWxsPC9zcGFuPjwvc2FtcD48ZGQ+RG8gbm90IGNvcHkgcmVsb2NhdGlvbiBhbmQgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvdXJjZSBmaWxlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWc8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0cmlwLWRlYnVnPC9zcGFuPjwvc2FtcD48ZGQ+RG8gbm90IGNvcHkgZGVidWdnaW5nIHN5bWJvbHMgb3Igc2VjdGlvbnMgZnJvbSB0aGUgc291cmNlIGZpbGUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0cmlwLXVubmVlZGVkPC9zcGFuPjwvc2FtcD48ZGQ+U3RyaXAgYWxsIHN5bWJvbHMgdGhhdCBhcmUgbm90IG5lZWRlZCBmb3IgcmVsb2NhdGlvbiBwcm9jZXNzaW5nLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUsgPC9zcGFuPjx2YXI+c3ltYm9sbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1rZWVwLXN5bWJvbD08L3NwYW4+PHZhcj5zeW1ib2xuYW1lPC92YXI+PC9zYW1wPjxkZD5XaGVuIHN0cmlwcGluZyBzeW1ib2xzLCBrZWVwIHN5bWJvbCA8dmFyPnN5bWJvbG5hbWU8L3Zhcj4gZXZlbiBpZiBpdCB3b3VsZAorbm9ybWFsbHkgYmUgc3RyaXBwZWQuICBUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tTiA8L3NwYW4+PHZhcj5zeW1ib2xuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0cmlwLXN5bWJvbD08L3NwYW4+PHZhcj5zeW1ib2xuYW1lPC92YXI+PC9zYW1wPjxkZD5EbyBub3QgY29weSBzeW1ib2wgPHZhcj5zeW1ib2xuYW1lPC92YXI+IGZyb20gdGhlIHNvdXJjZSBmaWxlLiAgVGhpcyBvcHRpb24KK21heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3RyaXAtdW5uZWVkZWQtc3ltYm9sPTwvc3Bhbj48dmFyPnN5bWJvbG5hbWU8L3Zhcj48L3NhbXA+PGRkPkRvIG5vdCBjb3B5IHN5bWJvbCA8dmFyPnN5bWJvbG5hbWU8L3Zhcj4gZnJvbSB0aGUgc291cmNlIGZpbGUgdW5sZXNzIGl0IGlzIG5lZWRlZAorYnkgYSByZWxvY2F0aW9uLiAgVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUcgPC9zcGFuPjx2YXI+c3ltYm9sbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1rZWVwLWdsb2JhbC1zeW1ib2w9PC9zcGFuPjx2YXI+c3ltYm9sbmFtZTwvdmFyPjwvc2FtcD48ZGQ+S2VlcCBvbmx5IHN5bWJvbCA8dmFyPnN5bWJvbG5hbWU8L3Zhcj4gZ2xvYmFsLiAgTWFrZSBhbGwgb3RoZXIgc3ltYm9scyBsb2NhbAordG8gdGhlIGZpbGUsIHNvIHRoYXQgdGhleSBhcmUgbm90IHZpc2libGUgZXh0ZXJuYWxseS4gIFRoaXMgb3B0aW9uIG1heQorYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWxvY2FsaXplLWhpZGRlbjwvc3Bhbj48L3NhbXA+PGRkPkluIGFuIEVMRiBvYmplY3QsIG1hcmsgYWxsIHN5bWJvbHMgdGhhdCBoYXZlIGhpZGRlbiBvciBpbnRlcm5hbCB2aXNpYmlsaXR5CithcyBsb2NhbC4gIFRoaXMgb3B0aW9uIGFwcGxpZXMgb24gdG9wIG9mIHN5bWJvbC1zcGVjaWZpYyBsb2NhbGl6YXRpb24gb3B0aW9ucworc3VjaCBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUwgPC9zcGFuPjx2YXI+c3ltYm9sbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1sb2NhbGl6ZS1zeW1ib2w9PC9zcGFuPjx2YXI+c3ltYm9sbmFtZTwvdmFyPjwvc2FtcD48ZGQ+TWFrZSBzeW1ib2wgPHZhcj5zeW1ib2xuYW1lPC92YXI+IGxvY2FsIHRvIHRoZSBmaWxlLCBzbyB0aGF0IGl0IGlzIG5vdAordmlzaWJsZSBleHRlcm5hbGx5LiAgVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVcgPC9zcGFuPjx2YXI+c3ltYm9sbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS13ZWFrZW4tc3ltYm9sPTwvc3Bhbj48dmFyPnN5bWJvbG5hbWU8L3Zhcj48L3NhbXA+PGRkPk1ha2Ugc3ltYm9sIDx2YXI+c3ltYm9sbmFtZTwvdmFyPiB3ZWFrLiBUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWdsb2JhbGl6ZS1zeW1ib2w9PC9zcGFuPjx2YXI+c3ltYm9sbmFtZTwvdmFyPjwvc2FtcD48ZGQ+R2l2ZSBzeW1ib2wgPHZhcj5zeW1ib2xuYW1lPC92YXI+IGdsb2JhbCBzY29waW5nIHNvIHRoYXQgaXQgaXMgdmlzaWJsZQorb3V0c2lkZSBvZiB0aGUgZmlsZSBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLiAgVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuCittb3JlIHRoYW4gb25jZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi13PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS13aWxkY2FyZDwvc3Bhbj48L3NhbXA+PGRkPlBlcm1pdCByZWd1bGFyIGV4cHJlc3Npb25zIGluIDx2YXI+c3ltYm9sbmFtZTwvdmFyPnMgdXNlZCBpbiBvdGhlciBjb21tYW5kCitsaW5lIG9wdGlvbnMuICBUaGUgcXVlc3Rpb24gbWFyayAoPyksIGFzdGVyaXNrICgqKSwgYmFja3NsYXNoIChcKSBhbmQKK3NxdWFyZSBicmFja2V0cyAoW10pIG9wZXJhdG9ycyBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgc3ltYm9sCituYW1lLiAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3ltYm9sIG5hbWUgaXMgdGhlIGV4Y2xhbWF0aW9uCitwb2ludCAoISkgdGhlbiB0aGUgc2Vuc2Ugb2YgdGhlIHN3aXRjaCBpcyByZXZlcnNlZCBmb3IgdGhhdCBzeW1ib2wuIAorRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAtdyAtVyAhZm9vIC1XIGZvKgorPC9wcmU+CisgICAgIDxwPndvdWxkIGNhdXNlIG9iamNvcHkgdG8gd2Vha2VuIGFsbCBzeW1ib2xzIHRoYXQgc3RhcnQgd2l0aCAmbGRxdW87Zm8mcmRxdW87CitleGNlcHQgZm9yIHRoZSBzeW1ib2wgJmxkcXVvO2ZvbyZyZHF1bzsuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4teDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZGlzY2FyZC1hbGw8L3NwYW4+PC9zYW1wPjxkZD5EbyBub3QgY29weSBub24tZ2xvYmFsIHN5bWJvbHMgZnJvbSB0aGUgc291cmNlIGZpbGUuIAorPCEtLSBGSVhNRSBhbnkgcmVhc29uIHRvIHByZWZlciAibm9uLWdsb2JhbCIgdG8gImxvY2FsIiBoZXJlPyAtLT4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1YPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kaXNjYXJkLWxvY2Fsczwvc3Bhbj48L3NhbXA+PGRkPkRvIG5vdCBjb3B5IGNvbXBpbGVyLWdlbmVyYXRlZCBsb2NhbCBzeW1ib2xzLiAKKyhUaGVzZSB1c3VhbGx5IHN0YXJ0IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48L3NhbXA+JnJzcXVvOy4pCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tYiA8L3NwYW4+PHZhcj5ieXRlPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWJ5dGU9PC9zcGFuPjx2YXI+Ynl0ZTwvdmFyPjwvc2FtcD48ZGQ+SWYgaW50ZXJsZWF2aW5nIGhhcyBiZWVuIGVuYWJsZWQgdmlhIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWludGVybGVhdmU8L3NwYW4+PC9zYW1wPiBvcHRpb24KK3RoZW4gc3RhcnQgdGhlIHJhbmdlIG9mIGJ5dGVzIHRvIGtlZXAgYXQgdGhlIDx2YXI+Ynl0ZTwvdmFyPnRoIGJ5dGUuIAorPHZhcj5ieXRlPC92YXI+IGNhbiBiZSBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIDx2YXI+YnJlYWR0aDwvdmFyPi0xLCB3aGVyZQorPHZhcj5icmVhZHRoPC92YXI+IGlzIHRoZSB2YWx1ZSBnaXZlbiBieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1pbnRlcmxlYXZlPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWkgWzwvc3Bhbj48dmFyPmJyZWFkdGg8L3Zhcj48c3BhbiBjbGFzcz0iZW52Ij5dPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1pbnRlcmxlYXZlWz08L3NwYW4+PHZhcj5icmVhZHRoPC92YXI+PHNwYW4gY2xhc3M9ImVudiI+XTwvc3Bhbj48L3NhbXA+PGRkPk9ubHkgY29weSBhIHJhbmdlIG91dCBvZiBldmVyeSA8dmFyPmJyZWFkdGg8L3Zhcj4gYnl0ZXMuICAoSGVhZGVyIGRhdGEgaXMKK25vdCBhZmZlY3RlZCkuICBTZWxlY3Qgd2hpY2ggYnl0ZSBpbiB0aGUgcmFuZ2UgYmVnaW5zIHRoZSBjb3B5IHdpdGgKK3RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWJ5dGU8L3NwYW4+PC9zYW1wPiBvcHRpb24uICBTZWxlY3QgdGhlIHdpZHRoIG9mIHRoZSByYW5nZSB3aXRoIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1pbnRlcmxlYXZlLXdpZHRoPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgZmlsZXMgdG8gcHJvZ3JhbSA8c3BhbiBjbGFzcz0ic2MiPnJvbTwvc3Bhbj4uICBJdCBpcwordHlwaWNhbGx5IHVzZWQgd2l0aCBhbiA8Y29kZT5zcmVjPC9jb2RlPiBvdXRwdXQgdGFyZ2V0LiAgTm90ZSB0aGF0Cis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+b2JqY29weTwvc3Bhbj48L3NhbXA+IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvIG5vdCBzcGVjaWZ5IHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1ieXRlPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFzIHdlbGwuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaW50ZXJsZWF2ZSBicmVhZHRoIGlzIDQsIHNvIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1ieXRlPC9zcGFuPjwvc2FtcD4gc2V0IHRvIDAsCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+b2JqY29weTwvc3Bhbj48L3NhbXA+IHdvdWxkIGNvcHkgdGhlIGZpcnN0IGJ5dGUgb3V0IG9mIGV2ZXJ5IGZvdXIgYnl0ZXMKK2Zyb20gdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWludGVybGVhdmUtd2lkdGg9PC9zcGFuPjx2YXI+d2lkdGg8L3Zhcj48L3NhbXA+PGRkPldoZW4gdXNlZCB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWludGVybGVhdmU8L3NwYW4+PC9zYW1wPiBvcHRpb24sIGNvcHkgPHZhcj53aWR0aDwvdmFyPgorYnl0ZXMgYXQgYSB0aW1lLiAgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBvZiBieXRlcyB0byBiZSBjb3BpZWQgaXMgc2V0CitieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1ieXRlPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBhbmQgdGhlIGV4dGVudCBvZiB0aGUgcmFuZ2UgaXMgc2V0IHdpdGgKK3RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWludGVybGVhdmU8L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgb3B0aW9uIGlzIDEuICBUaGUgdmFsdWUgb2YgPHZhcj53aWR0aDwvdmFyPiBwbHVzCit0aGUgPHZhcj5ieXRlPC92YXI+IHZhbHVlIHNldCBieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1ieXRlPC9zcGFuPjwvc2FtcD4gb3B0aW9uIG11c3Qgbm90IGV4Y2VlZAordGhlIGludGVybGVhdmUgYnJlYWR0aCBzZXQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taW50ZXJsZWF2ZTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8cD5UaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW1hZ2VzIGZvciB0d28gMTYtYml0IGZsYXNoZXMgaW50ZXJsZWF2ZWQKK2luIGEgMzItYml0IGJ1cyBieSBwYXNzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1iIDAgLWkgNCAtLWludGVybGVhdmUtd2lkdGg9Mjwvc3Bhbj48L3NhbXA+CithbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWIgMiAtaSA0IC0taW50ZXJsZWF2ZS13aWR0aD0yPC9zcGFuPjwvc2FtcD4gdG8gdHdvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpjb3B5PC9zcGFuPjwvc2FtcD4KK2NvbW1hbmRzLiAgSWYgdGhlIGlucHV0IHdhcyAnMTIzNDU2NzgnIHRoZW4gdGhlIG91dHB1dHMgd291bGQgYmUKKycxMjU2JyBhbmQgJzM0NzgnIHJlc3BlY3RpdmVseS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1wPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wcmVzZXJ2ZS1kYXRlczwvc3Bhbj48L3NhbXA+PGRkPlNldCB0aGUgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gZGF0ZXMgb2YgdGhlIG91dHB1dCBmaWxlIHRvIGJlIHRoZSBzYW1lCithcyB0aG9zZSBvZiB0aGUgaW5wdXQgZmlsZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1EPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1lbmFibGUtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlczwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWRldGVybWluaXN0aWMtYXJjaGl2ZXMtNTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRkZXRlcm1pbmlzdGljXzAwMmRhcmNoaXZlcy01OSI+PC9hPk9wZXJhdGUgaW4gPGVtPmRldGVybWluaXN0aWM8L2VtPiBtb2RlLiAgV2hlbiBjb3B5aW5nIGFyY2hpdmUgbWVtYmVycworYW5kIHdyaXRpbmcgdGhlIGFyY2hpdmUgaW5kZXgsIHVzZSB6ZXJvIGZvciBVSURzLCBHSURzLCB0aW1lc3RhbXBzLAorYW5kIHVzZSBjb25zaXN0ZW50IGZpbGUgbW9kZXMgZm9yIGFsbCBmaWxlcy4KKworICAgICA8cD5JZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmludXRpbHM8L3NwYW4+PC9zYW1wPiB3YXMgY29uZmlndXJlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1kZXRlcm1pbmlzdGljLWFyY2hpdmVzPC9zcGFuPjwvc2FtcD4sIHRoZW4gdGhpcyBtb2RlIGlzIG9uIGJ5IGRlZmF1bHQuIAorSXQgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBiZWxvdy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1VPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kaXNhYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1kZXRlcm1pbmlzdGljLWFyY2hpdmVzLTYwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkZGV0ZXJtaW5pc3RpY18wMDJkYXJjaGl2ZXMtNjEiPjwvYT5EbyA8ZW0+bm90PC9lbT4gb3BlcmF0ZSBpbiA8ZW0+ZGV0ZXJtaW5pc3RpYzwvZW0+IG1vZGUuICBUaGlzIGlzIHRoZQoraW52ZXJzZSBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUQ8L3NwYW4+PC9zYW1wPiBvcHRpb24sIGFib3ZlOiB3aGVuIGNvcHlpbmcgYXJjaGl2ZSBtZW1iZXJzCithbmQgd3JpdGluZyB0aGUgYXJjaGl2ZSBpbmRleCwgdXNlIHRoZWlyIGFjdHVhbCBVSUQsIEdJRCwgdGltZXN0YW1wLAorYW5kIGZpbGUgbW9kZSB2YWx1ZXMuCisKKyAgICAgPHA+VGhpcyBpcyB0aGUgZGVmYXVsdCB1bmxlc3MgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmJpbnV0aWxzPC9zcGFuPjwvc2FtcD4gd2FzIGNvbmZpZ3VyZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1lbmFibGUtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kZWJ1Z2dpbmc8L3NwYW4+PC9zYW1wPjxkZD5Db252ZXJ0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiwgaWYgcG9zc2libGUuICBUaGlzIGlzIG5vdCB0aGUgZGVmYXVsdAorYmVjYXVzZSBvbmx5IGNlcnRhaW4gZGVidWdnaW5nIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCwgYW5kIHRoZQorY29udmVyc2lvbiBwcm9jZXNzIGNhbiBiZSB0aW1lIGNvbnN1bWluZy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZ2FwLWZpbGwgPC9zcGFuPjx2YXI+dmFsPC92YXI+PC9zYW1wPjxkZD5GaWxsIGdhcHMgYmV0d2VlbiBzZWN0aW9ucyB3aXRoIDx2YXI+dmFsPC92YXI+LiAgVGhpcyBvcGVyYXRpb24gYXBwbGllcyB0bwordGhlIDxlbT5sb2FkIGFkZHJlc3M8L2VtPiAoTE1BKSBvZiB0aGUgc2VjdGlvbnMuICBJdCBpcyBkb25lIGJ5IGluY3JlYXNpbmcKK3RoZSBzaXplIG9mIHRoZSBzZWN0aW9uIHdpdGggdGhlIGxvd2VyIGFkZHJlc3MsIGFuZCBmaWxsaW5nIGluIHRoZSBleHRyYQorc3BhY2UgY3JlYXRlZCB3aXRoIDx2YXI+dmFsPC92YXI+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wYWQtdG8gPC9zcGFuPjx2YXI+YWRkcmVzczwvdmFyPjwvc2FtcD48ZGQ+UGFkIHRoZSBvdXRwdXQgZmlsZSB1cCB0byB0aGUgbG9hZCBhZGRyZXNzIDx2YXI+YWRkcmVzczwvdmFyPi4gIFRoaXMgaXMKK2RvbmUgYnkgaW5jcmVhc2luZyB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBzZWN0aW9uLiAgVGhlIGV4dHJhIHNwYWNlIGlzCitmaWxsZWQgaW4gd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZ2FwLWZpbGw8L3NwYW4+PC9zYW1wPiAoZGVmYXVsdCB6ZXJvKS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc2V0LXN0YXJ0IDwvc3Bhbj48dmFyPnZhbDwvdmFyPjwvc2FtcD48ZGQ+U2V0IHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBuZXcgZmlsZSB0byA8dmFyPnZhbDwvdmFyPi4gIE5vdCBhbGwgb2JqZWN0IGZpbGUKK2Zvcm1hdHMgc3VwcG9ydCBzZXR0aW5nIHRoZSBzdGFydCBhZGRyZXNzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1jaGFuZ2Utc3RhcnQgPC9zcGFuPjx2YXI+aW5jcjwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1hZGp1c3Qtc3RhcnQgPC9zcGFuPjx2YXI+aW5jcjwvdmFyPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtY2hhbmdpbmctc3RhcnQtYWRkcmVzcy02MiI+PC9hPkNoYW5nZSB0aGUgc3RhcnQgYWRkcmVzcyBieSBhZGRpbmcgPHZhcj5pbmNyPC92YXI+LiAgTm90IGFsbCBvYmplY3QgZmlsZQorZm9ybWF0cyBzdXBwb3J0IHNldHRpbmcgdGhlIHN0YXJ0IGFkZHJlc3MuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWNoYW5nZS1hZGRyZXNzZXMgPC9zcGFuPjx2YXI+aW5jcjwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1hZGp1c3Qtdm1hIDwvc3Bhbj48dmFyPmluY3I8L3Zhcj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWNoYW5naW5nLW9iamVjdC1hZGRyZXNzZXMtNjMiPjwvYT5DaGFuZ2UgdGhlIFZNQSBhbmQgTE1BIGFkZHJlc3NlcyBvZiBhbGwgc2VjdGlvbnMsIGFzIHdlbGwgYXMgdGhlIHN0YXJ0CithZGRyZXNzLCBieSBhZGRpbmcgPHZhcj5pbmNyPC92YXI+LiAgU29tZSBvYmplY3QgZmlsZSBmb3JtYXRzIGRvIG5vdCBwZXJtaXQKK3NlY3Rpb24gYWRkcmVzc2VzIHRvIGJlIGNoYW5nZWQgYXJiaXRyYXJpbHkuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAorcmVsb2NhdGUgdGhlIHNlY3Rpb25zOyBpZiB0aGUgcHJvZ3JhbSBleHBlY3RzIHNlY3Rpb25zIHRvIGJlIGxvYWRlZCBhdCBhCitjZXJ0YWluIGFkZHJlc3MsIGFuZCB0aGlzIG9wdGlvbiBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgc2VjdGlvbnMgc3VjaAordGhhdCB0aGV5IGFyZSBsb2FkZWQgYXQgYSBkaWZmZXJlbnQgYWRkcmVzcywgdGhlIHByb2dyYW0gbWF5IGZhaWwuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWNoYW5nZS1zZWN0aW9uLWFkZHJlc3MgPC9zcGFuPjx2YXI+c2VjdGlvbjwvdmFyPjxzcGFuIGNsYXNzPSJlbnYiPns9LCssLX08L3NwYW4+PHZhcj52YWw8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYWRqdXN0LXNlY3Rpb24tdm1hIDwvc3Bhbj48dmFyPnNlY3Rpb248L3Zhcj48c3BhbiBjbGFzcz0iZW52Ij57PSwrLC19PC9zcGFuPjx2YXI+dmFsPC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1jaGFuZ2luZy1zZWN0aW9uLWFkZHJlc3MtNjQiPjwvYT5TZXQgb3IgY2hhbmdlIGJvdGggdGhlIFZNQSBhZGRyZXNzIGFuZCB0aGUgTE1BIGFkZHJlc3Mgb2YgdGhlIG5hbWVkCis8dmFyPnNlY3Rpb248L3Zhcj4uICBJZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj08L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdXNlZCwgdGhlIHNlY3Rpb24gYWRkcmVzcyBpcyBzZXQgdG8KKzx2YXI+dmFsPC92YXI+LiAgT3RoZXJ3aXNlLCA8dmFyPnZhbDwvdmFyPiBpcyBhZGRlZCB0byBvciBzdWJ0cmFjdGVkIGZyb20gdGhlCitzZWN0aW9uIGFkZHJlc3MuICBTZWUgdGhlIGNvbW1lbnRzIHVuZGVyIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tY2hhbmdlLWFkZHJlc3Nlczwvc3Bhbj48L3NhbXA+LAorYWJvdmUuIElmIDx2YXI+c2VjdGlvbjwvdmFyPiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5wdXQgZmlsZSwgYSB3YXJuaW5nIHdpbGwKK2JlIGlzc3VlZCwgdW5sZXNzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tY2hhbmdlLXdhcm5pbmdzPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tY2hhbmdlLXNlY3Rpb24tbG1hIDwvc3Bhbj48dmFyPnNlY3Rpb248L3Zhcj48c3BhbiBjbGFzcz0iZW52Ij57PSwrLC19PC9zcGFuPjx2YXI+dmFsPC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1jaGFuZ2luZy1zZWN0aW9uLUxNQS02NSI+PC9hPlNldCBvciBjaGFuZ2UgdGhlIExNQSBhZGRyZXNzIG9mIHRoZSBuYW1lZCA8dmFyPnNlY3Rpb248L3Zhcj4uICBUaGUgTE1BCithZGRyZXNzIGlzIHRoZSBhZGRyZXNzIHdoZXJlIHRoZSBzZWN0aW9uIHdpbGwgYmUgbG9hZGVkIGludG8gbWVtb3J5IGF0Citwcm9ncmFtIGxvYWQgdGltZS4gIE5vcm1hbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIFZNQSBhZGRyZXNzLCB3aGljaAoraXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHNlY3Rpb24gYXQgcHJvZ3JhbSBydW4gdGltZSwgYnV0IG9uIHNvbWUgc3lzdGVtcywKK2VzcGVjaWFsbHkgdGhvc2Ugd2hlcmUgYSBwcm9ncmFtIGlzIGhlbGQgaW4gUk9NLCB0aGUgdHdvIGNhbiBiZQorZGlmZmVyZW50LiAgSWYgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHVzZWQsIHRoZSBzZWN0aW9uIGFkZHJlc3MgaXMgc2V0IHRvCis8dmFyPnZhbDwvdmFyPi4gIE90aGVyd2lzZSwgPHZhcj52YWw8L3Zhcj4gaXMgYWRkZWQgdG8gb3Igc3VidHJhY3RlZCBmcm9tIHRoZQorc2VjdGlvbiBhZGRyZXNzLiAgU2VlIHRoZSBjb21tZW50cyB1bmRlciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWNoYW5nZS1hZGRyZXNzZXM8L3NwYW4+PC9zYW1wPiwKK2Fib3ZlLiAgSWYgPHZhcj5zZWN0aW9uPC92YXI+IGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbnB1dCBmaWxlLCBhIHdhcm5pbmcKK3dpbGwgYmUgaXNzdWVkLCB1bmxlc3MgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1jaGFuZ2Utd2FybmluZ3M8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1jaGFuZ2Utc2VjdGlvbi12bWEgPC9zcGFuPjx2YXI+c2VjdGlvbjwvdmFyPjxzcGFuIGNsYXNzPSJlbnYiPns9LCssLX08L3NwYW4+PHZhcj52YWw8L3Zhcj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWNoYW5naW5nLXNlY3Rpb24tVk1BLTY2Ij48L2E+U2V0IG9yIGNoYW5nZSB0aGUgVk1BIGFkZHJlc3Mgb2YgdGhlIG5hbWVkIDx2YXI+c2VjdGlvbjwvdmFyPi4gIFRoZSBWTUEKK2FkZHJlc3MgaXMgdGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHNlY3Rpb24gd2lsbCBiZSBsb2NhdGVkIG9uY2UgdGhlCitwcm9ncmFtIGhhcyBzdGFydGVkIGV4ZWN1dGluZy4gIE5vcm1hbGx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIExNQQorYWRkcmVzcywgd2hpY2ggaXMgdGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHNlY3Rpb24gd2lsbCBiZSBsb2FkZWQgaW50bworbWVtb3J5LCBidXQgb24gc29tZSBzeXN0ZW1zLCBlc3BlY2lhbGx5IHRob3NlIHdoZXJlIGEgcHJvZ3JhbSBpcyBoZWxkIGluCitST00sIHRoZSB0d28gY2FuIGJlIGRpZmZlcmVudC4gIElmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+PTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB1c2VkLCB0aGUgc2VjdGlvbiBhZGRyZXNzCitpcyBzZXQgdG8gPHZhcj52YWw8L3Zhcj4uICBPdGhlcndpc2UsIDx2YXI+dmFsPC92YXI+IGlzIGFkZGVkIHRvIG9yIHN1YnRyYWN0ZWQKK2Zyb20gdGhlIHNlY3Rpb24gYWRkcmVzcy4gIFNlZSB0aGUgY29tbWVudHMgdW5kZXIKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tY2hhbmdlLWFkZHJlc3Nlczwvc3Bhbj48L3NhbXA+LCBhYm92ZS4gIElmIDx2YXI+c2VjdGlvbjwvdmFyPiBkb2VzIG5vdCBleGlzdCBpbgordGhlIGlucHV0IGZpbGUsIGEgd2FybmluZyB3aWxsIGJlIGlzc3VlZCwgdW5sZXNzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLWNoYW5nZS13YXJuaW5nczwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWNoYW5nZS13YXJuaW5nczwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYWRqdXN0LXdhcm5pbmdzPC9zcGFuPjwvc2FtcD48ZGQ+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGFuZ2Utc2VjdGlvbi1hZGRyZXNzPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGFuZ2Utc2VjdGlvbi1sbWE8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGFuZ2Utc2VjdGlvbi12bWE8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLCBhbmQgdGhlIG5hbWVkIHNlY3Rpb24gZG9lcyBub3QKK2V4aXN0LCBpc3N1ZSBhIHdhcm5pbmcuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1uby1jaGFuZ2Utd2FybmluZ3M8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW5vLWFkanVzdC13YXJuaW5nczwvc3Bhbj48L3NhbXA+PGRkPkRvIG5vdCBpc3N1ZSBhIHdhcm5pbmcgaWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGFuZ2Utc2VjdGlvbi1hZGRyZXNzPC9zcGFuPjwvc2FtcD4gb3IKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYWRqdXN0LXNlY3Rpb24tbG1hPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hZGp1c3Qtc2VjdGlvbi12bWE8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLCBldmVuCitpZiB0aGUgbmFtZWQgc2VjdGlvbiBkb2VzIG5vdCBleGlzdC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc2V0LXNlY3Rpb24tZmxhZ3MgPC9zcGFuPjx2YXI+c2VjdGlvbjwvdmFyPjxzcGFuIGNsYXNzPSJlbnYiPj08L3NwYW4+PHZhcj5mbGFnczwvdmFyPjwvc2FtcD48ZGQ+U2V0IHRoZSBmbGFncyBmb3IgdGhlIG5hbWVkIHNlY3Rpb24uICBUaGUgPHZhcj5mbGFnczwvdmFyPiBhcmd1bWVudCBpcyBhCitjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGZsYWcgbmFtZXMuICBUaGUgcmVjb2duaXplZCBuYW1lcyBhcmUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWxsb2M8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29udGVudHM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9hZDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub2xvYWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlYWRvbmx5PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yb208L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2hhcmU8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kZWJ1Zzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFlvdSBjYW4gc2V0IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvbnRlbnRzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZsYWcgZm9yIGEgc2VjdGlvbiB3aGljaAorZG9lcyBub3QgaGF2ZSBjb250ZW50cywgYnV0IGl0IGlzIG5vdCBtZWFuaW5nZnVsIHRvIGNsZWFyIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb250ZW50czwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmbGFnIG9mIGEgc2VjdGlvbiB3aGljaCBkb2VzIGhhdmUgY29udGVudHMmbmRhc2g7anVzdCByZW1vdmUKK3RoZSBzZWN0aW9uIGluc3RlYWQuICBOb3QgYWxsIGZsYWdzIGFyZSBtZWFuaW5nZnVsIGZvciBhbGwgb2JqZWN0IGZpbGUKK2Zvcm1hdHMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWFkZC1zZWN0aW9uIDwvc3Bhbj48dmFyPnNlY3Rpb25uYW1lPC92YXI+PHNwYW4gY2xhc3M9ImVudiI+PTwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkZD5BZGQgYSBuZXcgc2VjdGlvbiBuYW1lZCA8dmFyPnNlY3Rpb25uYW1lPC92YXI+IHdoaWxlIGNvcHlpbmcgdGhlIGZpbGUuICBUaGUKK2NvbnRlbnRzIG9mIHRoZSBuZXcgc2VjdGlvbiBhcmUgdGFrZW4gZnJvbSB0aGUgZmlsZSA8dmFyPmZpbGVuYW1lPC92YXI+LiAgVGhlCitzaXplIG9mIHRoZSBzZWN0aW9uIHdpbGwgYmUgdGhlIHNpemUgb2YgdGhlIGZpbGUuICBUaGlzIG9wdGlvbiBvbmx5Cit3b3JrcyBvbiBmaWxlIGZvcm1hdHMgd2hpY2ggY2FuIHN1cHBvcnQgc2VjdGlvbnMgd2l0aCBhcmJpdHJhcnkgbmFtZXMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXJlbmFtZS1zZWN0aW9uIDwvc3Bhbj48dmFyPm9sZG5hbWU8L3Zhcj48c3BhbiBjbGFzcz0iZW52Ij49PC9zcGFuPjx2YXI+bmV3bmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJlbnYiPlssPC9zcGFuPjx2YXI+ZmxhZ3M8L3Zhcj48c3BhbiBjbGFzcz0iZW52Ij5dPC9zcGFuPjwvc2FtcD48ZGQ+UmVuYW1lIGEgc2VjdGlvbiBmcm9tIDx2YXI+b2xkbmFtZTwvdmFyPiB0byA8dmFyPm5ld25hbWU8L3Zhcj4sIG9wdGlvbmFsbHkKK2NoYW5naW5nIHRoZSBzZWN0aW9uJ3MgZmxhZ3MgdG8gPHZhcj5mbGFnczwvdmFyPiBpbiB0aGUgcHJvY2Vzcy4gIFRoaXMgaGFzCit0aGUgYWR2YW50YWdlIG92ZXIgdXNuZyBhIGxpbmtlciBzY3JpcHQgdG8gcGVyZm9ybSB0aGUgcmVuYW1lIGluIHRoYXQKK3RoZSBvdXRwdXQgc3RheXMgYXMgYW4gb2JqZWN0IGZpbGUgYW5kIGRvZXMgbm90IGJlY29tZSBhIGxpbmtlZAorZXhlY3V0YWJsZS4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyBwYXJ0aWN1bGFybHkgaGVscGZ1bCB3aGVuIHRoZSBpbnB1dCBmb3JtYXQgaXMgYmluYXJ5LAorc2luY2UgdGhpcyB3aWxsIGFsd2F5cyBjcmVhdGUgYSBzZWN0aW9uIGNhbGxlZCAuZGF0YS4gIElmIGZvciBleGFtcGxlLAoreW91IHdhbnRlZCBpbnN0ZWFkIHRvIGNyZWF0ZSBhIHNlY3Rpb24gY2FsbGVkIC5yb2RhdGEgY29udGFpbmluZyBiaW5hcnkKK2RhdGEgeW91IGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZSB0byBhY2hpZXZlIGl0OgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgb2JqY29weSAtSSBiaW5hcnkgLU8gJmx0O291dHB1dF9mb3JtYXQmZ3Q7IC1CICZsdDthcmNoaXRlY3R1cmUmZ3Q7IFwKKyAgICAgICAgICAgICAtLXJlbmFtZS1zZWN0aW9uIC5kYXRhPS5yb2RhdGEsYWxsb2MsbG9hZCxyZWFkb25seSxkYXRhLGNvbnRlbnRzIFwKKyAgICAgICAgICAgICAmbHQ7aW5wdXRfYmluYXJ5X2ZpbGUmZ3Q7ICZsdDtvdXRwdXRfb2JqZWN0X2ZpbGUmZ3Q7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWxvbmctc2VjdGlvbi1uYW1lcyB7ZW5hYmxlLGRpc2FibGUsa2VlcH08L3NwYW4+PC9zYW1wPjxkZD5Db250cm9scyB0aGUgaGFuZGxpbmcgb2YgbG9uZyBzZWN0aW9uIG5hbWVzIHdoZW4gcHJvY2Vzc2luZyA8Y29kZT5DT0ZGPC9jb2RlPgorYW5kIDxjb2RlPlBFLUNPRkY8L2NvZGU+IG9iamVjdCBmb3JtYXRzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmtlZXA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCitpcyB0byBwcmVzZXJ2ZSBsb25nIHNlY3Rpb24gbmFtZXMgaWYgYW55IGFyZSBwcmVzZW50IGluIHRoZSBpbnB1dCBmaWxlLiAKK1RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmVuYWJsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kaXNhYmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMgZm9yY2libHkgZW5hYmxlIG9yIGRpc2FibGUKK3RoZSB1c2Ugb2YgbG9uZyBzZWN0aW9uIG5hbWVzIGluIHRoZSBvdXRwdXQgb2JqZWN0OyB3aGVuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGlzYWJsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOworaXMgaW4gZWZmZWN0LCBhbnkgbG9uZyBzZWN0aW9uIG5hbWVzIGluIHRoZSBpbnB1dCBvYmplY3Qgd2lsbCBiZSB0cnVuY2F0ZWQuIAorVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZW5hYmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB3aWxsIG9ubHkgZW1pdCBsb25nIHNlY3Rpb24gbmFtZXMgaWYgYW55IGFyZQorcHJlc2VudCBpbiB0aGUgaW5wdXRzOyB0aGlzIGlzIG1vc3RseSB0aGUgc2FtZSBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmtlZXA8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGJ1dCBpdAoraXMgbGVmdCB1bmRlZmluZWQgd2hldGhlciB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lbmFibGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIG1pZ2h0IGZvcmNlIHRoZQorY3JlYXRpb24gb2YgYW4gZW1wdHkgc3RyaW5nIHRhYmxlIGluIHRoZSBvdXRwdXQgZmlsZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tY2hhbmdlLWxlYWRpbmctY2hhcjwvc3Bhbj48L3NhbXA+PGRkPlNvbWUgb2JqZWN0IGZpbGUgZm9ybWF0cyB1c2Ugc3BlY2lhbCBjaGFyYWN0ZXJzIGF0IHRoZSBzdGFydCBvZgorc3ltYm9scy4gIFRoZSBtb3N0IGNvbW1vbiBzdWNoIGNoYXJhY3RlciBpcyB1bmRlcnNjb3JlLCB3aGljaCBjb21waWxlcnMKK29mdGVuIGFkZCBiZWZvcmUgZXZlcnkgc3ltYm9sLiAgVGhpcyBvcHRpb24gdGVsbHMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamNvcHk8L3NwYW4+PC9zYW1wPiB0bworY2hhbmdlIHRoZSBsZWFkaW5nIGNoYXJhY3RlciBvZiBldmVyeSBzeW1ib2wgd2hlbiBpdCBjb252ZXJ0cyBiZXR3ZWVuCitvYmplY3QgZmlsZSBmb3JtYXRzLiAgSWYgdGhlIG9iamVjdCBmaWxlIGZvcm1hdHMgdXNlIHRoZSBzYW1lIGxlYWRpbmcKK2NoYXJhY3RlciwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4gIE90aGVyd2lzZSwgaXQgd2lsbCBhZGQgYQorY2hhcmFjdGVyLCBvciByZW1vdmUgYSBjaGFyYWN0ZXIsIG9yIGNoYW5nZSBhIGNoYXJhY3RlciwgYXMKK2FwcHJvcHJpYXRlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1yZW1vdmUtbGVhZGluZy1jaGFyPC9zcGFuPjwvc2FtcD48ZGQ+SWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGdsb2JhbCBzeW1ib2wgaXMgYSBzcGVjaWFsIHN5bWJvbCBsZWFkaW5nCitjaGFyYWN0ZXIgdXNlZCBieSB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0LCByZW1vdmUgdGhlIGNoYXJhY3Rlci4gIFRoZQorbW9zdCBjb21tb24gc3ltYm9sIGxlYWRpbmcgY2hhcmFjdGVyIGlzIHVuZGVyc2NvcmUuICBUaGlzIG9wdGlvbiB3aWxsCityZW1vdmUgYSBsZWFkaW5nIHVuZGVyc2NvcmUgZnJvbSBhbGwgZ2xvYmFsIHN5bWJvbHMuICBUaGlzIGNhbiBiZSB1c2VmdWwKK2lmIHlvdSB3YW50IHRvIGxpbmsgdG9nZXRoZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnQgZmlsZSBmb3JtYXRzIHdpdGgKK2RpZmZlcmVudCBjb252ZW50aW9ucyBmb3Igc3ltYm9sIG5hbWVzLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGFuZ2UtbGVhZGluZy1jaGFyPC9zcGFuPjwvc2FtcD4gYmVjYXVzZSBpdCBhbHdheXMgY2hhbmdlcyB0aGUgc3ltYm9sIG5hbWUKK3doZW4gYXBwcm9wcmlhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIG9iamVjdCBmaWxlIGZvcm1hdCBvZiB0aGUgb3V0cHV0CitmaWxlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1yZXZlcnNlLWJ5dGVzPTwvc3Bhbj48dmFyPm51bTwvdmFyPjwvc2FtcD48ZGQ+UmV2ZXJzZSB0aGUgYnl0ZXMgaW4gYSBzZWN0aW9uIHdpdGggb3V0cHV0IGNvbnRlbnRzLiAgQSBzZWN0aW9uIGxlbmd0aCBtdXN0CitiZSBldmVubHkgZGl2aXNpYmxlIGJ5IHRoZSB2YWx1ZSBnaXZlbiBpbiBvcmRlciBmb3IgdGhlIHN3YXAgdG8gYmUgYWJsZSB0bwordGFrZSBwbGFjZS4gUmV2ZXJzaW5nIHRha2VzIHBsYWNlIGJlZm9yZSB0aGUgaW50ZXJsZWF2aW5nIGlzIHBlcmZvcm1lZC4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyB1c2VkIHR5cGljYWxseSBpbiBnZW5lcmF0aW5nIFJPTSBpbWFnZXMgZm9yIHByb2JsZW1hdGljCit0YXJnZXQgc3lzdGVtcy4gIEZvciBleGFtcGxlLCBvbiBzb21lIHRhcmdldCBib2FyZHMsIHRoZSAzMi1iaXQgd29yZHMKK2ZldGNoZWQgZnJvbSA4LWJpdCBST01zIGFyZSByZS1hc3NlbWJsZWQgaW4gbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyCityZWdhcmRsZXNzIG9mIHRoZSBDUFUgYnl0ZSBvcmRlci4gIERlcGVuZGluZyBvbiB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwsIHRoZQorZW5kaWFubmVzcyBvZiB0aGUgUk9NIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVkLgorCisgICAgIDxwPkNvbnNpZGVyIGEgc2ltcGxlIGZpbGUgd2l0aCBhIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGVpZ2h0CitieXRlczogIDxjb2RlPjEyMzQ1Njc4PC9jb2RlPi4KKworICAgICA8cD5Vc2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcmV2ZXJzZS1ieXRlcz0yPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGJ5dGVzIGluIHRoZQorb3V0cHV0IGZpbGUgd291bGQgYmUgb3JkZXJlZCA8Y29kZT4yMTQzNjU4NzwvY29kZT4uCisKKyAgICAgPHA+VXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJldmVyc2UtYnl0ZXM9NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBieXRlcyBpbiB0aGUKK291dHB1dCBmaWxlIHdvdWxkIGJlIG9yZGVyZWQgPGNvZGU+NDMyMTg3NjU8L2NvZGU+LgorCisgICAgIDxwPkJ5IHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1yZXZlcnNlLWJ5dGVzPTI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHRoZSBhYm92ZSBleGFtcGxlLCBmb2xsb3dlZCBieQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJldmVyc2UtYnl0ZXM9NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvbiB0aGUgb3V0cHV0IGZpbGUsIHRoZSBieXRlcyBpbiB0aGUgc2Vjb25kCitvdXRwdXQgZmlsZSB3b3VsZCBiZSBvcmRlcmVkIDxjb2RlPjM0MTI3ODU2PC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3JlYy1sZW49PC9zcGFuPjx2YXI+aXZhbDwvdmFyPjwvc2FtcD48ZGQ+TWVhbmluZ2Z1bCBvbmx5IGZvciBzcmVjIG91dHB1dC4gIFNldCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIFNyZWNvcmRzCitiZWluZyBwcm9kdWNlZCB0byA8dmFyPml2YWw8L3Zhcj4uICBUaGlzIGxlbmd0aCBjb3ZlcnMgYm90aCBhZGRyZXNzLCBkYXRhIGFuZAorY3JjIGZpZWxkcy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3JlYy1mb3JjZVMzPC9zcGFuPjwvc2FtcD48ZGQ+TWVhbmluZ2Z1bCBvbmx5IGZvciBzcmVjIG91dHB1dC4gIEF2b2lkIGdlbmVyYXRpb24gb2YgUzEvUzIgcmVjb3JkcywKK2NyZWF0aW5nIFMzLW9ubHkgcmVjb3JkIGZvcm1hdC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tcmVkZWZpbmUtc3ltIDwvc3Bhbj48dmFyPm9sZDwvdmFyPjxzcGFuIGNsYXNzPSJlbnYiPj08L3NwYW4+PHZhcj5uZXc8L3Zhcj48L3NhbXA+PGRkPkNoYW5nZSB0aGUgbmFtZSBvZiBhIHN5bWJvbCA8dmFyPm9sZDwvdmFyPiwgdG8gPHZhcj5uZXc8L3Zhcj4uICBUaGlzIGNhbiBiZSB1c2VmdWwKK3doZW4gb25lIGlzIHRyeWluZyBsaW5rIHR3byB0aGluZ3MgdG9nZXRoZXIgZm9yIHdoaWNoIHlvdSBoYXZlIG5vCitzb3VyY2UsIGFuZCB0aGVyZSBhcmUgbmFtZSBjb2xsaXNpb25zLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1yZWRlZmluZS1zeW1zPTwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkZD5BcHBseSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlZGVmaW5lLXN5bTwvc3Bhbj48L3NhbXA+IHRvIGVhY2ggc3ltYm9sIHBhaXIgIjx2YXI+b2xkPC92YXI+IDx2YXI+bmV3PC92YXI+IgorbGlzdGVkIGluIHRoZSBmaWxlIDx2YXI+ZmlsZW5hbWU8L3Zhcj4uICA8dmFyPmZpbGVuYW1lPC92YXI+IGlzIHNpbXBseSBhIGZsYXQgZmlsZSwKK3dpdGggb25lIHN5bWJvbCBwYWlyIHBlciBsaW5lLiAgTGluZSBjb21tZW50cyBtYXkgYmUgaW50cm9kdWNlZCBieSB0aGUgaGFzaAorY2hhcmFjdGVyLiAgVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS13ZWFrZW48L3NwYW4+PC9zYW1wPjxkZD5DaGFuZ2UgYWxsIGdsb2JhbCBzeW1ib2xzIGluIHRoZSBmaWxlIHRvIGJlIHdlYWsuICBUaGlzIGNhbiBiZSB1c2VmdWwKK3doZW4gYnVpbGRpbmcgYW4gb2JqZWN0IHdoaWNoIHdpbGwgYmUgbGlua2VkIGFnYWluc3Qgb3RoZXIgb2JqZWN0cyB1c2luZwordGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1SPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHRvIHRoZSBsaW5rZXIuICBUaGlzIG9wdGlvbiBpcyBvbmx5IGVmZmVjdGl2ZSB3aGVuCit1c2luZyBhbiBvYmplY3QgZmlsZSBmb3JtYXQgd2hpY2ggc3VwcG9ydHMgd2VhayBzeW1ib2xzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1rZWVwLXN5bWJvbHM9PC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGRkPkFwcGx5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0ta2VlcC1zeW1ib2w8L3NwYW4+PC9zYW1wPiBvcHRpb24gdG8gZWFjaCBzeW1ib2wgbGlzdGVkIGluIHRoZSBmaWxlCis8dmFyPmZpbGVuYW1lPC92YXI+LiAgPHZhcj5maWxlbmFtZTwvdmFyPiBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGggb25lIHN5bWJvbAorbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2ggY2hhcmFjdGVyLiAKK1RoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3RyaXAtc3ltYm9scz08L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZGQ+QXBwbHkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpcC1zeW1ib2w8L3NwYW4+PC9zYW1wPiBvcHRpb24gdG8gZWFjaCBzeW1ib2wgbGlzdGVkIGluIHRoZSBmaWxlCis8dmFyPmZpbGVuYW1lPC92YXI+LiAgPHZhcj5maWxlbmFtZTwvdmFyPiBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGggb25lIHN5bWJvbAorbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2ggY2hhcmFjdGVyLiAKK1RoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3RyaXAtdW5uZWVkZWQtc3ltYm9scz08L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZGQ+QXBwbHkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpcC11bm5lZWRlZC1zeW1ib2w8L3NwYW4+PC9zYW1wPiBvcHRpb24gdG8gZWFjaCBzeW1ib2wgbGlzdGVkIGluCit0aGUgZmlsZSA8dmFyPmZpbGVuYW1lPC92YXI+LiAgPHZhcj5maWxlbmFtZTwvdmFyPiBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGggb25lCitzeW1ib2wgbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2gKK2NoYXJhY3Rlci4gIFRoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0ta2VlcC1nbG9iYWwtc3ltYm9scz08L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZGQ+QXBwbHkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1rZWVwLWdsb2JhbC1zeW1ib2w8L3NwYW4+PC9zYW1wPiBvcHRpb24gdG8gZWFjaCBzeW1ib2wgbGlzdGVkIGluIHRoZQorZmlsZSA8dmFyPmZpbGVuYW1lPC92YXI+LiAgPHZhcj5maWxlbmFtZTwvdmFyPiBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGggb25lCitzeW1ib2wgbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2gKK2NoYXJhY3Rlci4gIFRoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbG9jYWxpemUtc3ltYm9scz08L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZGQ+QXBwbHkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1sb2NhbGl6ZS1zeW1ib2w8L3NwYW4+PC9zYW1wPiBvcHRpb24gdG8gZWFjaCBzeW1ib2wgbGlzdGVkIGluIHRoZSBmaWxlCis8dmFyPmZpbGVuYW1lPC92YXI+LiAgPHZhcj5maWxlbmFtZTwvdmFyPiBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGggb25lIHN5bWJvbAorbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2ggY2hhcmFjdGVyLiAKK1RoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZ2xvYmFsaXplLXN5bWJvbHM9PC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGRkPkFwcGx5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZ2xvYmFsaXplLXN5bWJvbDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byBlYWNoIHN5bWJvbCBsaXN0ZWQgaW4gdGhlIGZpbGUKKzx2YXI+ZmlsZW5hbWU8L3Zhcj4uICA8dmFyPmZpbGVuYW1lPC92YXI+IGlzIHNpbXBseSBhIGZsYXQgZmlsZSwgd2l0aCBvbmUgc3ltYm9sCituYW1lIHBlciBsaW5lLiAgTGluZSBjb21tZW50cyBtYXkgYmUgaW50cm9kdWNlZCBieSB0aGUgaGFzaCBjaGFyYWN0ZXIuIAorVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS13ZWFrZW4tc3ltYm9scz08L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZGQ+QXBwbHkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13ZWFrZW4tc3ltYm9sPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHRvIGVhY2ggc3ltYm9sIGxpc3RlZCBpbiB0aGUgZmlsZQorPHZhcj5maWxlbmFtZTwvdmFyPi4gIDx2YXI+ZmlsZW5hbWU8L3Zhcj4gaXMgc2ltcGx5IGEgZmxhdCBmaWxlLCB3aXRoIG9uZSBzeW1ib2wKK25hbWUgcGVyIGxpbmUuICBMaW5lIGNvbW1lbnRzIG1heSBiZSBpbnRyb2R1Y2VkIGJ5IHRoZSBoYXNoIGNoYXJhY3Rlci4gCitUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWFsdC1tYWNoaW5lLWNvZGU9PC9zcGFuPjx2YXI+aW5kZXg8L3Zhcj48L3NhbXA+PGRkPklmIHRoZSBvdXRwdXQgYXJjaGl0ZWN0dXJlIGhhcyBhbHRlcm5hdGUgbWFjaGluZSBjb2RlcywgdXNlIHRoZQorPHZhcj5pbmRleDwvdmFyPnRoIGNvZGUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmUuICBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlCithIG1hY2hpbmUgaXMgYXNzaWduZWQgYW4gb2ZmaWNpYWwgY29kZSBhbmQgdGhlIHRvb2wtY2hhaW4gYWRvcHRzIHRoZQorbmV3IGNvZGUsIGJ1dCBvdGhlciBhcHBsaWNhdGlvbnMgc3RpbGwgZGVwZW5kIG9uIHRoZSBvcmlnaW5hbCBjb2RlCitiZWluZyB1c2VkLiAgRm9yIEVMRiBiYXNlZCBhcmNoaXRlY3R1cmVzIGlmIHRoZSA8dmFyPmluZGV4PC92YXI+CithbHRlcm5hdGl2ZSBkb2VzIG5vdCBleGlzdCB0aGVuIHRoZSB2YWx1ZSBpcyB0cmVhdGVkIGFzIGFuIGFic29sdXRlCitudW1iZXIgdG8gYmUgc3RvcmVkIGluIHRoZSBlX21hY2hpbmUgZmllbGQgb2YgdGhlIEVMRiBoZWFkZXIuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXdyaXRhYmxlLXRleHQ8L3NwYW4+PC9zYW1wPjxkZD5NYXJrIHRoZSBvdXRwdXQgdGV4dCBhcyB3cml0YWJsZS4gIFRoaXMgb3B0aW9uIGlzbid0IG1lYW5pbmdmdWwgZm9yIGFsbAorb2JqZWN0IGZpbGUgZm9ybWF0cy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tcmVhZG9ubHktdGV4dDwvc3Bhbj48L3NhbXA+PGRkPk1ha2UgdGhlIG91dHB1dCB0ZXh0IHdyaXRlIHByb3RlY3RlZC4gIFRoaXMgb3B0aW9uIGlzbid0IG1lYW5pbmdmdWwgZm9yIGFsbAorb2JqZWN0IGZpbGUgZm9ybWF0cy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tcHVyZTwvc3Bhbj48L3NhbXA+PGRkPk1hcmsgdGhlIG91dHB1dCBmaWxlIGFzIGRlbWFuZCBwYWdlZC4gIFRoaXMgb3B0aW9uIGlzbid0IG1lYW5pbmdmdWwgZm9yIGFsbAorb2JqZWN0IGZpbGUgZm9ybWF0cy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taW1wdXJlPC9zcGFuPjwvc2FtcD48ZGQ+TWFyayB0aGUgb3V0cHV0IGZpbGUgYXMgaW1wdXJlLiAgVGhpcyBvcHRpb24gaXNuJ3QgbWVhbmluZ2Z1bCBmb3IgYWxsCitvYmplY3QgZmlsZSBmb3JtYXRzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wcmVmaXgtc3ltYm9scz08L3NwYW4+PHZhcj5zdHJpbmc8L3Zhcj48L3NhbXA+PGRkPlByZWZpeCBhbGwgc3ltYm9scyBpbiB0aGUgb3V0cHV0IGZpbGUgd2l0aCA8dmFyPnN0cmluZzwvdmFyPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tcHJlZml4LXNlY3Rpb25zPTwvc3Bhbj48dmFyPnN0cmluZzwvdmFyPjwvc2FtcD48ZGQ+UHJlZml4IGFsbCBzZWN0aW9uIG5hbWVzIGluIHRoZSBvdXRwdXQgZmlsZSB3aXRoIDx2YXI+c3RyaW5nPC92YXI+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wcmVmaXgtYWxsb2Mtc2VjdGlvbnM9PC9zcGFuPjx2YXI+c3RyaW5nPC92YXI+PC9zYW1wPjxkZD5QcmVmaXggYWxsIHRoZSBuYW1lcyBvZiBhbGwgYWxsb2NhdGVkIHNlY3Rpb25zIGluIHRoZSBvdXRwdXQgZmlsZSB3aXRoCis8dmFyPnN0cmluZzwvdmFyPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYWRkLWdudS1kZWJ1Z2xpbms9PC9zcGFuPjx2YXI+cGF0aC10by1maWxlPC92YXI+PC9zYW1wPjxkZD5DcmVhdGVzIGEgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbiB3aGljaCBjb250YWlucyBhIHJlZmVyZW5jZSB0byA8dmFyPnBhdGgtdG8tZmlsZTwvdmFyPgorYW5kIGFkZHMgaXQgdG8gdGhlIG91dHB1dCBmaWxlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1rZWVwLWZpbGUtc3ltYm9sczwvc3Bhbj48L3NhbXA+PGRkPldoZW4gc3RyaXBwaW5nIGEgZmlsZSwgcGVyaGFwcyB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RyaXAtZGVidWc8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpcC11bm5lZWRlZDwvc3Bhbj48L3NhbXA+LCByZXRhaW4gYW55IHN5bWJvbHMgc3BlY2lmeWluZyBzb3VyY2UgZmlsZSBuYW1lcywKK3doaWNoIHdvdWxkIG90aGVyd2lzZSBnZXQgc3RyaXBwZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW9ubHkta2VlcC1kZWJ1Zzwvc3Bhbj48L3NhbXA+PGRkPlN0cmlwIGEgZmlsZSwgcmVtb3ZpbmcgY29udGVudHMgb2YgYW55IHNlY3Rpb25zIHRoYXQgd291bGQgbm90IGJlCitzdHJpcHBlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0cmlwLWRlYnVnPC9zcGFuPjwvc2FtcD4gYW5kIGxlYXZpbmcgdGhlIGRlYnVnZ2luZyBzZWN0aW9ucworaW50YWN0LiAgSW4gRUxGIGZpbGVzLCB0aGlzIHByZXNlcnZlcyBhbGwgbm90ZSBzZWN0aW9ucyBpbiB0aGUgb3V0cHV0LgorCisgICAgIDxwPlRoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGlzIG9wdGlvbiB3aWxsIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hZGQtZ251LWRlYnVnbGluazwvc3Bhbj48L3NhbXA+IHRvIGNyZWF0ZSBhIHR3byBwYXJ0IGV4ZWN1dGFibGUuICBPbmUgYQorc3RyaXBwZWQgYmluYXJ5IHdoaWNoIHdpbGwgb2NjdXB5IGxlc3Mgc3BhY2UgaW4gUkFNIGFuZCBpbiBhCitkaXN0cmlidXRpb24gYW5kIHRoZSBzZWNvbmQgYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZSB3aGljaCBpcyBvbmx5CituZWVkZWQgaWYgZGVidWdnaW5nIGFiaWxpdGllcyBhcmUgcmVxdWlyZWQuICBUaGUgc3VnZ2VzdGVkIHByb2NlZHVyZQordG8gY3JlYXRlIHRoZXNlIGZpbGVzIGlzIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+TGluayB0aGUgZXhlY3V0YWJsZSBhcyBub3JtYWwuICBBc3N1bWluZyB0aGF0IGlzIGlzIGNhbGxlZAorPGNvZGU+Zm9vPC9jb2RlPiB0aGVuLi4uIAorPGxpPlJ1biA8Y29kZT5vYmpjb3B5IC0tb25seS1rZWVwLWRlYnVnIGZvbyBmb28uZGJnPC9jb2RlPiB0bworY3JlYXRlIGEgZmlsZSBjb250YWluaW5nIHRoZSBkZWJ1Z2dpbmcgaW5mby4gCis8bGk+UnVuIDxjb2RlPm9iamNvcHkgLS1zdHJpcC1kZWJ1ZyBmb288L2NvZGU+IHRvIGNyZWF0ZSBhCitzdHJpcHBlZCBleGVjdXRhYmxlLiAKKzxsaT5SdW4gPGNvZGU+b2JqY29weSAtLWFkZC1nbnUtZGVidWdsaW5rPWZvby5kYmcgZm9vPC9jb2RlPgordG8gYWRkIGEgbGluayB0byB0aGUgZGVidWdnaW5nIGluZm8gaW50byB0aGUgc3RyaXBwZWQgZXhlY3V0YWJsZS4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPk5vdGUmbWRhc2g7dGhlIGNob2ljZSBvZiA8Y29kZT4uZGJnPC9jb2RlPiBhcyBhbiBleHRlbnNpb24gZm9yIHRoZSBkZWJ1ZyBpbmZvCitmaWxlIGlzIGFyYml0cmFyeS4gIEFsc28gdGhlIDxjb2RlPi0tb25seS1rZWVwLWRlYnVnPC9jb2RlPiBzdGVwIGlzCitvcHRpb25hbC4gIFlvdSBjb3VsZCBpbnN0ZWFkIGRvIHRoaXM6CisKKyAgICAgICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+TGluayB0aGUgZXhlY3V0YWJsZSBhcyBub3JtYWwuIAorPGxpPkNvcHkgPGNvZGU+Zm9vPC9jb2RlPiB0byAgPGNvZGU+Zm9vLmZ1bGw8L2NvZGU+Cis8bGk+UnVuIDxjb2RlPm9iamNvcHkgLS1zdHJpcC1kZWJ1ZyBmb288L2NvZGU+Cis8bGk+UnVuIDxjb2RlPm9iamNvcHkgLS1hZGQtZ251LWRlYnVnbGluaz1mb28uZnVsbCBmb288L2NvZGU+CisgICAgICAgICAgPC9vbD4KKworICAgICA8cD5pLmUuLCB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFkZC1nbnUtZGVidWdsaW5rPC9zcGFuPjwvc2FtcD4gY2FuIGJlIHRoZQorZnVsbCBleGVjdXRhYmxlLiAgSXQgZG9lcyBub3QgaGF2ZSB0byBiZSBhIGZpbGUgY3JlYXRlZCBieSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tb25seS1rZWVwLWRlYnVnPC9zcGFuPjwvc2FtcD4gc3dpdGNoLgorCisgICAgIDxwPk5vdGUmbWRhc2g7dGhpcyBzd2l0Y2ggaXMgb25seSBpbnRlbmRlZCBmb3IgdXNlIG9uIGZ1bGx5IGxpbmtlZCBmaWxlcy4gIEl0Citkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHVzZSBpdCBvbiBvYmplY3QgZmlsZXMgd2hlcmUgdGhlIGRlYnVnZ2luZworaW5mb3JtYXRpb24gbWF5IGJlIGluY29tcGxldGUuICBCZXNpZGVzIHRoZSBnbnVfZGVidWdsaW5rIGZlYXR1cmUKK2N1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHRoZSBwcmVzZW5jZSBvZiBvbmUgZmlsZW5hbWUgY29udGFpbmluZworZGVidWdnaW5nIGluZm9ybWF0aW9uLCBub3QgbXVsdGlwbGUgZmlsZW5hbWVzIG9uIGEgb25lLXBlci1vYmplY3QtZmlsZQorYmFzaXMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0cmlwLWR3bzwvc3Bhbj48L3NhbXA+PGRkPlJlbW92ZSB0aGUgY29udGVudHMgb2YgYWxsIERXQVJGIC5kd28gc2VjdGlvbnMsIGxlYXZpbmcgdGhlCityZW1haW5pbmcgZGVidWdnaW5nIHNlY3Rpb25zIGFuZCBhbGwgc3ltYm9scyBpbnRhY3QuIAorVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB0aGUgY29tcGlsZXIgYXMgcGFydCBvZgordGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nc3BsaXQtZHdhcmY8L3NwYW4+PC9zYW1wPiBvcHRpb24sIHdoaWNoIHNwbGl0cyBkZWJ1ZyBpbmZvcm1hdGlvbgorYmV0d2VlbiB0aGUgLm8gZmlsZSBhbmQgYSBzZXBhcmF0ZSAuZHdvIGZpbGUuICBUaGUgY29tcGlsZXIKK2dlbmVyYXRlcyBhbGwgZGVidWcgaW5mb3JtYXRpb24gaW4gdGhlIHNhbWUgZmlsZSwgdGhlbiB1c2VzCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1leHRyYWN0LWR3bzwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byBjb3B5IHRoZSAuZHdvIHNlY3Rpb25zIHRvCit0aGUgLmR3byBmaWxlLCB0aGVuIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0cmlwLWR3bzwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byByZW1vdmUKK3Rob3NlIHNlY3Rpb25zIGZyb20gdGhlIG9yaWdpbmFsIC5vIGZpbGUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWV4dHJhY3QtZHdvPC9zcGFuPjwvc2FtcD48ZGQ+RXh0cmFjdCB0aGUgY29udGVudHMgb2YgYWxsIERXQVJGIC5kd28gc2VjdGlvbnMuICBTZWUgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0cmlwLWR3bzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZmlsZS1hbGlnbm1lbnQgPC9zcGFuPjx2YXI+bnVtPC92YXI+PC9zYW1wPjxkZD5TcGVjaWZ5IHRoZSBmaWxlIGFsaWdubWVudC4gIFNlY3Rpb25zIGluIHRoZSBmaWxlIHdpbGwgYWx3YXlzIGJlZ2luIGF0CitmaWxlIG9mZnNldHMgd2hpY2ggYXJlIG11bHRpcGxlcyBvZiB0aGlzIG51bWJlci4gIFRoaXMgZGVmYXVsdHMgdG8KKzUxMi4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gUEUgdGFyZ2V0cy5dCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWhlYXAgPC9zcGFuPjx2YXI+cmVzZXJ2ZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWFwIDwvc3Bhbj48dmFyPnJlc2VydmU8L3Zhcj48c3BhbiBjbGFzcz0iZW52Ij4sPC9zcGFuPjx2YXI+Y29tbWl0PC92YXI+PC9zYW1wPjxkZD5TcGVjaWZ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgbWVtb3J5IHRvIHJlc2VydmUgKGFuZCBvcHRpb25hbGx5IGNvbW1pdCkKK3RvIGJlIHVzZWQgYXMgaGVhcCBmb3IgdGhpcyBwcm9ncmFtLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBQRSB0YXJnZXRzLl0KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taW1hZ2UtYmFzZSA8L3NwYW4+PHZhcj52YWx1ZTwvdmFyPjwvc2FtcD48ZGQ+VXNlIDx2YXI+dmFsdWU8L3Zhcj4gYXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB5b3VyIHByb2dyYW0gb3IgZGxsLiAgVGhpcyBpcwordGhlIGxvd2VzdCBtZW1vcnkgbG9jYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiB5b3VyIHByb2dyYW0gb3IgZGxsCitpcyBsb2FkZWQuICBUbyByZWR1Y2UgdGhlIG5lZWQgdG8gcmVsb2NhdGUgYW5kIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2YKK3lvdXIgZGxscywgZWFjaCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBiYXNlIGFkZHJlc3MgYW5kIG5vdCBvdmVybGFwIGFueQorb3RoZXIgZGxscy4gIFRoZSBkZWZhdWx0IGlzIDB4NDAwMDAwIGZvciBleGVjdXRhYmxlcywgYW5kIDB4MTAwMDAwMDAKK2ZvciBkbGxzLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBQRSB0YXJnZXRzLl0KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc2VjdGlvbi1hbGlnbm1lbnQgPC9zcGFuPjx2YXI+bnVtPC92YXI+PC9zYW1wPjxkZD5TZXRzIHRoZSBzZWN0aW9uIGFsaWdubWVudC4gIFNlY3Rpb25zIGluIG1lbW9yeSB3aWxsIGFsd2F5cyBiZWdpbiBhdAorYWRkcmVzc2VzIHdoaWNoIGFyZSBhIG11bHRpcGxlIG9mIHRoaXMgbnVtYmVyLiAgRGVmYXVsdHMgdG8gMHgxMDAwLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBQRSB0YXJnZXRzLl0KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3RhY2sgPC9zcGFuPjx2YXI+cmVzZXJ2ZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zdGFjayA8L3NwYW4+PHZhcj5yZXNlcnZlPC92YXI+PHNwYW4gY2xhc3M9ImVudiI+LDwvc3Bhbj48dmFyPmNvbW1pdDwvdmFyPjwvc2FtcD48ZGQ+U3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIG1lbW9yeSB0byByZXNlcnZlIChhbmQgb3B0aW9uYWxseSBjb21taXQpCit0byBiZSB1c2VkIGFzIHN0YWNrIGZvciB0aGlzIHByb2dyYW0uIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIFBFIHRhcmdldHMuXQorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zdWJzeXN0ZW0gPC9zcGFuPjx2YXI+d2hpY2g8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3Vic3lzdGVtIDwvc3Bhbj48dmFyPndoaWNoPC92YXI+PHNwYW4gY2xhc3M9ImVudiI+Ojwvc3Bhbj48dmFyPm1ham9yPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN1YnN5c3RlbSA8L3NwYW4+PHZhcj53aGljaDwvdmFyPjxzcGFuIGNsYXNzPSJlbnYiPjo8L3NwYW4+PHZhcj5tYWpvcjwvdmFyPjxzcGFuIGNsYXNzPSJlbnYiPi48L3NwYW4+PHZhcj5taW5vcjwvdmFyPjwvc2FtcD48ZGQ+U3BlY2lmaWVzIHRoZSBzdWJzeXN0ZW0gdW5kZXIgd2hpY2ggeW91ciBwcm9ncmFtIHdpbGwgZXhlY3V0ZS4gIFRoZQorbGVnYWwgdmFsdWVzIGZvciA8dmFyPndoaWNoPC92YXI+IGFyZSA8Y29kZT5uYXRpdmU8L2NvZGU+LCA8Y29kZT53aW5kb3dzPC9jb2RlPiwKKzxjb2RlPmNvbnNvbGU8L2NvZGU+LCA8Y29kZT5wb3NpeDwvY29kZT4sIDxjb2RlPmVmaS1hcHA8L2NvZGU+LCA8Y29kZT5lZmktYnNkPC9jb2RlPiwKKzxjb2RlPmVmaS1ydGQ8L2NvZGU+LCA8Y29kZT5zYWwtcnRkPC9jb2RlPiwgYW5kIDxjb2RlPnhib3g8L2NvZGU+LiAgWW91IG1heSBvcHRpb25hbGx5IHNldAordGhlIHN1YnN5c3RlbSB2ZXJzaW9uIGFsc28uICBOdW1lcmljIHZhbHVlcyBhcmUgYWxzbyBhY2NlcHRlZCBmb3IKKzx2YXI+d2hpY2g8L3Zhcj4uIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIFBFIHRhcmdldHMuXQorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1leHRyYWN0LXN5bWJvbDwvc3Bhbj48L3NhbXA+PGRkPktlZXAgdGhlIGZpbGUncyBzZWN0aW9uIGZsYWdzIGFuZCBzeW1ib2xzIGJ1dCByZW1vdmUgYWxsIHNlY3Rpb24gZGF0YS4gCitTcGVjaWZpY2FsbHksIHRoZSBvcHRpb246CisKKyAgICAgICAgICA8dWw+Cis8bGk+cmVtb3ZlcyB0aGUgY29udGVudHMgb2YgYWxsIHNlY3Rpb25zOworPGxpPnNldHMgdGhlIHNpemUgb2YgZXZlcnkgc2VjdGlvbiB0byB6ZXJvOyBhbmQKKzxsaT5zZXRzIHRoZSBmaWxlJ3Mgc3RhcnQgYWRkcmVzcyB0byB6ZXJvLiAKKzwvdWw+CisKKyAgICAgPHA+VGhpcyBvcHRpb24gaXMgdXNlZCB0byBidWlsZCBhIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uc3ltPC9zcGFuPjwvc2FtcD4gZmlsZSBmb3IgYSBWeFdvcmtzIGtlcm5lbC4gCitJdCBjYW4gYWxzbyBiZSBhIHVzZWZ1bCB3YXkgb2YgcmVkdWNpbmcgdGhlIHNpemUgb2YgYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWp1c3Qtc3ltYm9sczwvc3Bhbj48L3NhbXA+CitsaW5rZXIgaW5wdXQgZmlsZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tY29tcHJlc3MtZGVidWctc2VjdGlvbnM8L3NwYW4+PC9zYW1wPjxkZD5Db21wcmVzcyBEV0FSRiBkZWJ1ZyBzZWN0aW9ucyB1c2luZyB6bGliLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kZWNvbXByZXNzLWRlYnVnLXNlY3Rpb25zPC9zcGFuPjwvc2FtcD48ZGQ+RGVjb21wcmVzcyBEV0FSRiBkZWJ1ZyBzZWN0aW9ucyB1c2luZyB6bGliLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVY8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcnNpb248L3NwYW4+PC9zYW1wPjxkZD5TaG93IHRoZSB2ZXJzaW9uIG51bWJlciBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+b2JqY29weTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXY8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcmJvc2U8L3NwYW4+PC9zYW1wPjxkZD5WZXJib3NlIG91dHB1dDogbGlzdCBhbGwgb2JqZWN0IGZpbGVzIG1vZGlmaWVkLiAgSW4gdGhlIGNhc2Ugb2YKK2FyY2hpdmVzLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9iamNvcHkgLVY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbGlzdHMgYWxsIG1lbWJlcnMgb2YgdGhlIGFyY2hpdmUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWhlbHA8L3NwYW4+PC9zYW1wPjxkZD5TaG93IGEgc3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+b2JqY29weTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1pbmZvPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSBhIGxpc3Qgc2hvd2luZyBhbGwgYXJjaGl0ZWN0dXJlcyBhbmQgb2JqZWN0IGZvcm1hdHMgYXZhaWxhYmxlLiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL29iamR1bXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL29iamR1bXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdkYjk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvb2JqZHVtcC5odG1sCkBAIC0wLDAgKzEsNDk5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5vYmpkdW1wIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im9iamNvcHkuaHRtbCNvYmpjb3B5IiB0aXRsZT0ib2JqY29weSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InJhbmxpYi5odG1sI3JhbmxpYiIgdGl0bGU9InJhbmxpYiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ib2JqZHVtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyYW5saWIuaHRtbCNyYW5saWIiPnJhbmxpYjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im9iamNvcHkuaHRtbCNvYmpjb3B5Ij5vYmpjb3B5PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjQgb2JqZHVtcDwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9iamVjdC1maWxlLWluZm9ybWF0aW9uLTY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtb2JqZHVtcC02OCI+PC9hPgorPCEtLSBtYW4gdGl0bGUgb2JqZHVtcCBkaXNwbGF5IGluZm9ybWF0aW9uIGZyb20gb2JqZWN0IGZpbGVzLiAtLT4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDwhLS0gbWFuIGJlZ2luIFNZTk9QU0lTIG9iamR1bXAgLS0+CisgICAgIG9iamR1bXAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hcmNoaXZlLWhlYWRlcnM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWI8L3NwYW4+PC9zYW1wPiA8dmFyPmJmZG5hbWU8L3Zhcj58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS10YXJnZXQ9PC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1DPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kZW1hbmdsZTwvc3Bhbj48L3NhbXA+Wz08dmFyPnN0eWxlPC92YXI+XSBdCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kaXNhc3NlbWJsZTwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZGlzYXNzZW1ibGUtYWxsPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi16PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kaXNhc3NlbWJsZS16ZXJvZXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUVCPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUVMPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1lbmRpYW49PC9zcGFuPjwvc2FtcD57YmlnIHwgbGl0dGxlIH1dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1maWxlLWhlYWRlcnM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZpbGUtb2Zmc2V0czwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZpbGUtc3RhcnQtY29udGV4dDwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZGVidWdnaW5nPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1lPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kZWJ1Z2dpbmctdGFnczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2VjdGlvbi1oZWFkZXJzPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWFkZXJzPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1pbmZvPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1qPC9zcGFuPjwvc2FtcD4gPHZhcj5zZWN0aW9uPC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2VjdGlvbj08L3NwYW4+PC9zYW1wPjx2YXI+c2VjdGlvbjwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWw8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWxpbmUtbnVtYmVyczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc291cmNlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tPC9zcGFuPjwvc2FtcD4gPHZhcj5tYWNoaW5lPC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYXJjaGl0ZWN0dXJlPTwvc3Bhbj48L3NhbXA+PHZhcj5tYWNoaW5lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+IDx2YXI+b3B0aW9uczwvdmFyPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRpc2Fzc2VtYmxlci1vcHRpb25zPTwvc3Bhbj48L3NhbXA+PHZhcj5vcHRpb25zPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcHJpdmF0ZS1oZWFkZXJzPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1QPC9zcGFuPjwvc2FtcD4gPHZhcj5vcHRpb25zPC92YXI+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcHJpdmF0ZT08L3NwYW4+PC9zYW1wPjx2YXI+b3B0aW9uczwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXI8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlbG9jPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1SPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1keW5hbWljLXJlbG9jPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1mdWxsLWNvbnRlbnRzPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XW2xMaWFwcm1mRnNvUnRdPC9zcGFuPjwvc2FtcD58CisgICAgICAgICAgICAgIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHdhcmY8L3NwYW4+PC9zYW1wPls9cmF3bGluZSw9ZGVjb2RlZGxpbmUsPWluZm8sPWFiYnJldiw9cHVibmFtZXMsPWFyYW5nZXMsPW1hY3JvLD1mcmFtZXMsPWZyYW1lcy1pbnRlcnAsPXN0ciw9bG9jLD1SYW5nZXMsPXB1YnR5cGVzLD10cmFjZV9pbmZvLD10cmFjZV9hYmJyZXYsPXRyYWNlX2FyYW5nZXMsPWdkYl9pbmRleF1dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1HPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdGFiczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3ltczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHluYW1pYy1zeW1zPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hbGwtaGVhZGVyczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2lkZTwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0YXJ0LWFkZHJlc3M9PC9zcGFuPjwvc2FtcD48dmFyPmFkZHJlc3M8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RvcC1hZGRyZXNzPTwvc3Bhbj48L3NhbXA+PHZhcj5hZGRyZXNzPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXByZWZpeC1hZGRyZXNzZXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1bbm8tXXNob3ctcmF3LWluc248L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hZGp1c3Qtdm1hPTwvc3Bhbj48L3NhbXA+PHZhcj5vZmZzZXQ8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3BlY2lhbC1zeW1zPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcHJlZml4PTwvc3Bhbj48L3NhbXA+PHZhcj5wcmVmaXg8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcHJlZml4LXN0cmlwPTwvc3Bhbj48L3NhbXA+PHZhcj5sZXZlbDwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1pbnNuLXdpZHRoPTwvc3Bhbj48L3NhbXA+PHZhcj53aWR0aDwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb248L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUg8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICA8dmFyPm9iamZpbGU8L3Zhcj4uLi4KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiBvYmpkdW1wIC0tPgorICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamR1bXA8L3NwYW4+PC9zYW1wPiBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCBvbmUgb3IgbW9yZSBvYmplY3QgZmlsZXMuIAorVGhlIG9wdGlvbnMgY29udHJvbCB3aGF0IHBhcnRpY3VsYXIgaW5mb3JtYXRpb24gdG8gZGlzcGxheS4gIFRoaXMKK2luZm9ybWF0aW9uIGlzIG1vc3RseSB1c2VmdWwgdG8gcHJvZ3JhbW1lcnMgd2hvIGFyZSB3b3JraW5nIG9uIHRoZQorY29tcGlsYXRpb24gdG9vbHMsIGFzIG9wcG9zZWQgdG8gcHJvZ3JhbW1lcnMgd2hvIGp1c3Qgd2FudCB0aGVpcgorcHJvZ3JhbSB0byBjb21waWxlIGFuZCB3b3JrLgorCisgICA8cD48dmFyPm9iamZpbGU8L3Zhcj48c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IGFyZSB0aGUgb2JqZWN0IGZpbGVzIHRvIGJlIGV4YW1pbmVkLiAgV2hlbiB5b3UKK3NwZWNpZnkgYXJjaGl2ZXMsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpkdW1wPC9zcGFuPjwvc2FtcD4gc2hvd3MgaW5mb3JtYXRpb24gb24gZWFjaCBvZiB0aGUgbWVtYmVyCitvYmplY3QgZmlsZXMuCisKKzwhLS0gbWFuIGVuZCAtLT4KKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgb2JqZHVtcCAtLT4KKyAgIDxwPlRoZSBsb25nIGFuZCBzaG9ydCBmb3JtcyBvZiBvcHRpb25zLCBzaG93biBoZXJlIGFzIGFsdGVybmF0aXZlcywgYXJlCitlcXVpdmFsZW50LiAgQXQgbGVhc3Qgb25lIG9wdGlvbiBmcm9tIHRoZSBsaXN0Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYSwtZCwtRCwtZSwtZiwtZywtRywtaCwtSCwtcCwtUCwtciwtUiwtcywtUywtdCwtVCwtViwteDwvc3Bhbj48L3NhbXA+IG11c3QgYmUgZ2l2ZW4uCisKKyAgICAgPGRsPgorPGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1hPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1hcmNoaXZlLWhlYWRlcjwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWFyY2hpdmUtaGVhZGVycy02OSI+PC9hPklmIGFueSBvZiB0aGUgPHZhcj5vYmpmaWxlPC92YXI+IGZpbGVzIGFyZSBhcmNoaXZlcywgZGlzcGxheSB0aGUgYXJjaGl2ZQoraGVhZGVyIGluZm9ybWF0aW9uIChpbiBhIGZvcm1hdCBzaW1pbGFyIHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bHMgLWw8L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAgQmVzaWRlcyB0aGUKK2luZm9ybWF0aW9uIHlvdSBjb3VsZCBsaXN0IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hciB0djwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vYmpkdW1wIC1hPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNob3dzCit0aGUgb2JqZWN0IGZpbGUgZm9ybWF0IG9mIGVhY2ggYXJjaGl2ZSBtZW1iZXIuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWFkanVzdC12bWE9PC9zcGFuPjx2YXI+b2Zmc2V0PC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1zZWN0aW9uLWFkZHJlc3Nlcy1pbi1vYmpkdW1wLTcwIj48L2E+PGEgbmFtZT0iaW5kZXgtVk1BLWluLW9iamR1bXAtNzEiPjwvYT5XaGVuIGR1bXBpbmcgaW5mb3JtYXRpb24sIGZpcnN0IGFkZCA8dmFyPm9mZnNldDwvdmFyPiB0byBhbGwgdGhlIHNlY3Rpb24KK2FkZHJlc3Nlcy4gIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBzZWN0aW9uIGFkZHJlc3NlcyBkbyBub3QgY29ycmVzcG9uZCB0bwordGhlIHN5bWJvbCB0YWJsZSwgd2hpY2ggY2FuIGhhcHBlbiB3aGVuIHB1dHRpbmcgc2VjdGlvbnMgYXQgcGFydGljdWxhcgorYWRkcmVzc2VzIHdoZW4gdXNpbmcgYSBmb3JtYXQgd2hpY2ggY2FuIG5vdCByZXByZXNlbnQgc2VjdGlvbiBhZGRyZXNzZXMsCitzdWNoIGFzIGEub3V0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWIgPC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS10YXJnZXQ9PC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtb2JqZWN0LWNvZGUtZm9ybWF0LTcyIj48L2E+U3BlY2lmeSB0aGF0IHRoZSBvYmplY3QtY29kZSBmb3JtYXQgZm9yIHRoZSBvYmplY3QgZmlsZXMgaXMKKzx2YXI+YmZkbmFtZTwvdmFyPi4gIFRoaXMgb3B0aW9uIG1heSBub3QgYmUgbmVjZXNzYXJ5OyA8dmFyPm9iamR1bXA8L3Zhcj4gY2FuCithdXRvbWF0aWNhbGx5IHJlY29nbml6ZSBtYW55IGZvcm1hdHMuCisKKyAgICAgPHA+Rm9yIGV4YW1wbGUsCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBvYmpkdW1wIC1iIG9hc3lzIC1tIHZheCAtaCBmdS5vCis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5kaXNwbGF5cyBzdW1tYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIHNlY3Rpb24gaGVhZGVycyAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWg8L3NwYW4+PC9zYW1wPikgb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5mdS5vPC9zcGFuPjwvc2FtcD4sIHdoaWNoIGlzIGV4cGxpY2l0bHkgaWRlbnRpZmllZCAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW08L3NwYW4+PC9zYW1wPikgYXMgYSBWQVggb2JqZWN0CitmaWxlIGluIHRoZSBmb3JtYXQgcHJvZHVjZWQgYnkgT2FzeXMgY29tcGlsZXJzLiAgWW91IGNhbiBsaXN0IHRoZQorZm9ybWF0cyBhdmFpbGFibGUgd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWk8L3NwYW4+PC9zYW1wPiBvcHRpb24uIAorU2VlIDxhIGhyZWY9IlRhcmdldC1TZWxlY3Rpb24uaHRtbCNUYXJnZXQtU2VsZWN0aW9uIj5UYXJnZXQgU2VsZWN0aW9uPC9hPiwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tQzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZGVtYW5nbGVbPTwvc3Bhbj48dmFyPnN0eWxlPC92YXI+PHNwYW4gY2xhc3M9ImVudiI+XTwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWRlbWFuZ2xpbmctaW4tb2JqZHVtcC03MyI+PC9hPkRlY29kZSAoPGRmbj5kZW1hbmdsZTwvZGZuPikgbG93LWxldmVsIHN5bWJvbCBuYW1lcyBpbnRvIHVzZXItbGV2ZWwgbmFtZXMuIAorQmVzaWRlcyByZW1vdmluZyBhbnkgaW5pdGlhbCB1bmRlcnNjb3JlIHByZXBlbmRlZCBieSB0aGUgc3lzdGVtLCB0aGlzCittYWtlcyBDKysgZnVuY3Rpb24gbmFtZXMgcmVhZGFibGUuICBEaWZmZXJlbnQgY29tcGlsZXJzIGhhdmUgZGlmZmVyZW50CittYW5nbGluZyBzdHlsZXMuIFRoZSBvcHRpb25hbCBkZW1hbmdsaW5nIHN0eWxlIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvCitjaG9vc2UgYW4gYXBwcm9wcmlhdGUgZGVtYW5nbGluZyBzdHlsZSBmb3IgeW91ciBjb21waWxlci4gU2VlIDxhIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCI+YysrZmlsdDwvYT4sCitmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBkZW1hbmdsaW5nLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWc8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWRlYnVnZ2luZzwvc3Bhbj48L3NhbXA+PGRkPkRpc3BsYXkgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgVGhpcyBhdHRlbXB0cyB0byBwYXJzZSBTVEFCUyBhbmQgSUVFRQorZGVidWdnaW5nIGZvcm1hdCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdGhlIGZpbGUgYW5kIHByaW50IGl0IG91dCB1c2luZworYSBDIGxpa2Ugc3ludGF4LiAgSWYgbmVpdGhlciBvZiB0aGVzZSBmb3JtYXRzIGFyZSBmb3VuZCB0aGlzIG9wdGlvbgorZmFsbHMgYmFjayBvbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVc8L3NwYW4+PC9zYW1wPiBvcHRpb24gdG8gcHJpbnQgYW55IERXQVJGIGluZm9ybWF0aW9uIGluCit0aGUgZmlsZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1lPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kZWJ1Z2dpbmctdGFnczwvc3Bhbj48L3NhbXA+PGRkPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWc8L3NwYW4+PC9zYW1wPiwgYnV0IHRoZSBpbmZvcm1hdGlvbiBpcyBnZW5lcmF0ZWQgaW4gYSBmb3JtYXQgY29tcGF0aWJsZQord2l0aCBjdGFncyB0b29sLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWQ8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWRpc2Fzc2VtYmxlPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtZGlzYXNzZW1ibGluZy1vYmplY3QtY29kZS03NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1hY2hpbmUtaW5zdHJ1Y3Rpb25zLTc1Ij48L2E+RGlzcGxheSB0aGUgYXNzZW1ibGVyIG1uZW1vbmljcyBmb3IgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb25zIGZyb20KKzx2YXI+b2JqZmlsZTwvdmFyPi4gIFRoaXMgb3B0aW9uIG9ubHkgZGlzYXNzZW1ibGVzIHRob3NlIHNlY3Rpb25zIHdoaWNoIGFyZQorZXhwZWN0ZWQgdG8gY29udGFpbiBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZGlzYXNzZW1ibGUtYWxsPC9zcGFuPjwvc2FtcD48ZGQ+TGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZDwvc3Bhbj48L3NhbXA+LCBidXQgZGlzYXNzZW1ibGUgdGhlIGNvbnRlbnRzIG9mIGFsbCBzZWN0aW9ucywgbm90IGp1c3QKK3Rob3NlIGV4cGVjdGVkIHRvIGNvbnRhaW4gaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPklmIHRoZSB0YXJnZXQgaXMgYW4gQVJNIGFyY2hpdGVjdHVyZSB0aGlzIHN3aXRjaCBhbHNvIGhhcyB0aGUgZWZmZWN0CitvZiBmb3JjaW5nIHRoZSBkaXNhc3NlbWJsZXIgdG8gZGVjb2RlIHBpZWNlcyBvZiBkYXRhIGZvdW5kIGluIGNvZGUKK3NlY3Rpb25zIGFzIGlmIHRoZXkgd2VyZSBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXByZWZpeC1hZGRyZXNzZXM8L3NwYW4+PC9zYW1wPjxkZD5XaGVuIGRpc2Fzc2VtYmxpbmcsIHByaW50IHRoZSBjb21wbGV0ZSBhZGRyZXNzIG9uIGVhY2ggbGluZS4gIFRoaXMgaXMKK3RoZSBvbGRlciBkaXNhc3NlbWJseSBmb3JtYXQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRUI8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRUw8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWVuZGlhbj17YmlnfGxpdHRsZX08L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1lbmRpYW5uZXNzLTc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGlzYXNzZW1ibHktZW5kaWFubmVzcy03NyI+PC9hPlNwZWNpZnkgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIG9iamVjdCBmaWxlcy4gIFRoaXMgb25seSBhZmZlY3RzCitkaXNhc3NlbWJseS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGRpc2Fzc2VtYmxpbmcgYSBmaWxlIGZvcm1hdCB3aGljaAorZG9lcyBub3QgZGVzY3JpYmUgZW5kaWFubmVzcyBpbmZvcm1hdGlvbiwgc3VjaCBhcyBTLXJlY29yZHMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZmlsZS1oZWFkZXJzPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtb2JqZWN0LWZpbGUtaGVhZGVyLTc4Ij48L2E+RGlzcGxheSBzdW1tYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIG92ZXJhbGwgaGVhZGVyIG9mCitlYWNoIG9mIHRoZSA8dmFyPm9iamZpbGU8L3Zhcj4gZmlsZXMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZmlsZS1vZmZzZXRzPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtb2JqZWN0LWZpbGUtb2Zmc2V0cy03OSI+PC9hPldoZW4gZGlzYXNzZW1ibGluZyBzZWN0aW9ucywgd2hlbmV2ZXIgYSBzeW1ib2wgaXMgZGlzcGxheWVkLCBhbHNvCitkaXNwbGF5IHRoZSBmaWxlIG9mZnNldCBvZiB0aGUgcmVnaW9uIG9mIGRhdGEgdGhhdCBpcyBhYm91dCB0byBiZQorZHVtcGVkLiAgSWYgemVyb2VzIGFyZSBiZWluZyBza2lwcGVkLCB0aGVuIHdoZW4gZGlzYXNzZW1ibHkgcmVzdW1lcywKK3RlbGwgdGhlIHVzZXIgaG93IG1hbnkgemVyb2VzIHdlcmUgc2tpcHBlZCBhbmQgdGhlIGZpbGUgb2Zmc2V0IG9mIHRoZQorbG9jYXRpb24gZnJvbSB3aGVyZSB0aGUgZGlzYXNzZW1ibHkgcmVzdW1lcy4gIFdoZW4gZHVtcGluZyBzZWN0aW9ucywKK2Rpc3BsYXkgdGhlIGZpbGUgb2Zmc2V0IG9mIHRoZSBsb2NhdGlvbiBmcm9tIHdoZXJlIHRoZSBkdW1wIHN0YXJ0cy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZmlsZS1zdGFydC1jb250ZXh0PC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtc291cmNlLWNvZGUtY29udGV4dC04MCI+PC9hPlNwZWNpZnkgdGhhdCB3aGVuIGRpc3BsYXlpbmcgaW50ZXJsaXN0ZWQgc291cmNlIGNvZGUvZGlzYXNzZW1ibHkKKyhhc3N1bWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1TPC9zcGFuPjwvc2FtcD4pIGZyb20gYSBmaWxlIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBkaXNwbGF5ZWQsIGV4dGVuZCB0aGUKK2NvbnRleHQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWg8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXNlY3Rpb24taGVhZGVyczwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taGVhZGVyczwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LXNlY3Rpb24taGVhZGVycy04MSI+PC9hPkRpc3BsYXkgc3VtbWFyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZWN0aW9uIGhlYWRlcnMgb2YgdGhlCitvYmplY3QgZmlsZS4KKworICAgICA8cD5GaWxlIHNlZ21lbnRzIG1heSBiZSByZWxvY2F0ZWQgdG8gbm9uc3RhbmRhcmQgYWRkcmVzc2VzLCBmb3IgZXhhbXBsZSBieQordXNpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1UdGV4dDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVGRhdGE8L3NwYW4+PC9zYW1wPiwgb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVRic3M8L3NwYW4+PC9zYW1wPiBvcHRpb25zIHRvCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPi4gIEhvd2V2ZXIsIHNvbWUgb2JqZWN0IGZpbGUgZm9ybWF0cywgc3VjaCBhcyBhLm91dCwgZG8gbm90CitzdG9yZSB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgZmlsZSBzZWdtZW50cy4gIEluIHRob3NlIHNpdHVhdGlvbnMsCithbHRob3VnaCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiByZWxvY2F0ZXMgdGhlIHNlY3Rpb25zIGNvcnJlY3RseSwgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vYmpkdW1wCistaDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBsaXN0IHRoZSBmaWxlIHNlY3Rpb24gaGVhZGVycyBjYW5ub3Qgc2hvdyB0aGUgY29ycmVjdCBhZGRyZXNzZXMuIAorSW5zdGVhZCwgaXQgc2hvd3MgdGhlIHVzdWFsIGFkZHJlc3Nlcywgd2hpY2ggYXJlIGltcGxpY2l0IGZvciB0aGUKK3RhcmdldC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1IPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpkdW1wPC9zcGFuPjwvc2FtcD4gYW5kIGV4aXQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4taTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taW5mbzwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZXMtYXZhaWxhYmxlLTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtb2JqZWN0LWZvcm1hdHMtYXZhaWxhYmxlLTgzIj48L2E+RGlzcGxheSBhIGxpc3Qgc2hvd2luZyBhbGwgYXJjaGl0ZWN0dXJlcyBhbmQgb2JqZWN0IGZvcm1hdHMgYXZhaWxhYmxlCitmb3Igc3BlY2lmaWNhdGlvbiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1iPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW08L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1qIDwvc3Bhbj48dmFyPm5hbWU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc2VjdGlvbj08L3NwYW4+PHZhcj5uYW1lPC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1zZWN0aW9uLWluZm9ybWF0aW9uLTg0Ij48L2E+RGlzcGxheSBpbmZvcm1hdGlvbiBvbmx5IGZvciBzZWN0aW9uIDx2YXI+bmFtZTwvdmFyPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1sPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1saW5lLW51bWJlcnM8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1zb3VyY2UtZmlsZW5hbWVzLWZvci1vYmplY3QtZmlsZXMtODUiPjwvYT5MYWJlbCB0aGUgZGlzcGxheSAodXNpbmcgZGVidWdnaW5nIGluZm9ybWF0aW9uKSB3aXRoIHRoZSBmaWxlbmFtZSBhbmQKK3NvdXJjZSBsaW5lIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byB0aGUgb2JqZWN0IGNvZGUgb3IgcmVsb2NzIHNob3duLiAKK09ubHkgdXNlZnVsIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWQ8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUQ8L3NwYW4+PC9zYW1wPiwgb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1tIDwvc3Bhbj48dmFyPm1hY2hpbmU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYXJjaGl0ZWN0dXJlPTwvc3Bhbj48dmFyPm1hY2hpbmU8L3Zhcj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWFyY2hpdGVjdHVyZS04NiI+PC9hPjxhIG5hbWU9ImluZGV4LWRpc2Fzc2VtYmx5LWFyY2hpdGVjdHVyZS04NyI+PC9hPlNwZWNpZnkgdGhlIGFyY2hpdGVjdHVyZSB0byB1c2Ugd2hlbiBkaXNhc3NlbWJsaW5nIG9iamVjdCBmaWxlcy4gIFRoaXMKK2NhbiBiZSB1c2VmdWwgd2hlbiBkaXNhc3NlbWJsaW5nIG9iamVjdCBmaWxlcyB3aGljaCBkbyBub3QgZGVzY3JpYmUKK2FyY2hpdGVjdHVyZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyBTLXJlY29yZHMuICBZb3UgY2FuIGxpc3QgdGhlIGF2YWlsYWJsZQorYXJjaGl0ZWN0dXJlcyB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8cD5JZiB0aGUgdGFyZ2V0IGlzIGFuIEFSTSBhcmNoaXRlY3R1cmUgdGhlbiB0aGlzIHN3aXRjaCBoYXMgYW4KK2FkZGl0aW9uYWwgZWZmZWN0LiAgSXQgcmVzdHJpY3RzIHRoZSBkaXNhc3NlbWJseSB0byBvbmx5IHRob3NlCitpbnN0cnVjdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWVkIGJ5IDx2YXI+bWFjaGluZTwvdmFyPi4gCitJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIHRoaXMgc3dpdGNoIGJlY2F1c2UgdGhlIGlucHV0IGZpbGUgZG9lcyBub3QKK2NvbnRhaW4gYW55IGFyY2hpdGVjdHVyZSBpbmZvcm1hdGlvbiwgYnV0IGl0IGlzIGFsc28gZGVzaXJlZCB0bworZGlzYXNzZW1ibGUgYWxsIHRoZSBpbnN0cnVjdGlvbnMgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJtPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tTSA8L3NwYW4+PHZhcj5vcHRpb25zPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWRpc2Fzc2VtYmxlci1vcHRpb25zPTwvc3Bhbj48dmFyPm9wdGlvbnM8L3Zhcj48L3NhbXA+PGRkPlBhc3MgdGFyZ2V0IHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHRoZSBkaXNhc3NlbWJsZXIuICBPbmx5IHN1cHBvcnRlZCBvbgorc29tZSB0YXJnZXRzLiAgSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgbW9yZSB0aGFuIG9uZQorZGlzYXNzZW1ibGVyIG9wdGlvbiB0aGVuIG11bHRpcGxlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBjYW4gYmUgdXNlZCBvcgorY2FuIGJlIHBsYWNlZCB0b2dldGhlciBpbnRvIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuCisKKyAgICAgPHA+SWYgdGhlIHRhcmdldCBpcyBhbiBBUk0gYXJjaGl0ZWN0dXJlIHRoZW4gdGhpcyBzd2l0Y2ggY2FuIGJlIHVzZWQgdG8KK3NlbGVjdCB3aGljaCByZWdpc3RlciBuYW1lIHNldCBpcyB1c2VkIGR1cmluZyBkaXNhc3NlbWJsZXIuICBTcGVjaWZ5aW5nCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTSByZWctbmFtZXMtc3RkPC9zcGFuPjwvc2FtcD4gKHRoZSBkZWZhdWx0KSB3aWxsIHNlbGVjdCB0aGUgcmVnaXN0ZXIgbmFtZXMgYXMKK3VzZWQgaW4gQVJNJ3MgaW5zdHJ1Y3Rpb24gc2V0IGRvY3VtZW50YXRpb24sIGJ1dCB3aXRoIHJlZ2lzdGVyIDEzIGNhbGxlZAorJ3NwJywgcmVnaXN0ZXIgMTQgY2FsbGVkICdscicgYW5kIHJlZ2lzdGVyIDE1IGNhbGxlZCAncGMnLiAgU3BlY2lmeWluZworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU0gcmVnLW5hbWVzLWFwY3M8L3NwYW4+PC9zYW1wPiB3aWxsIHNlbGVjdCB0aGUgbmFtZSBzZXQgdXNlZCBieSB0aGUgQVJNCitQcm9jZWR1cmUgQ2FsbCBTdGFuZGFyZCwgd2hpbHN0IHNwZWNpZnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU0gcmVnLW5hbWVzLXJhdzwvc3Bhbj48L3NhbXA+IHdpbGwKK2p1c3QgdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb2xsb3dlZCBieSB0aGUgcmVnaXN0ZXIgbnVtYmVyLgorCisgICAgIDxwPlRoZXJlIGFyZSBhbHNvIHR3byB2YXJpYW50cyBvbiB0aGUgQVBDUyByZWdpc3RlciBuYW1pbmcgc2NoZW1lIGVuYWJsZWQKK2J5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NIHJlZy1uYW1lcy1hdHBjczwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTSByZWctbmFtZXMtc3BlY2lhbC1hdHBjczwvc3Bhbj48L3NhbXA+IHdoaWNoCit1c2UgdGhlIEFSTS9UaHVtYiBQcm9jZWR1cmUgQ2FsbCBTdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbnMuICAoRWl0aGVyCit3aXRoIHRoZSBub3JtYWwgcmVnaXN0ZXIgbmFtZXMgb3IgdGhlIHNwZWNpYWwgcmVnaXN0ZXIgbmFtZXMpLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHVzZWQgZm9yIEFSTSBhcmNoaXRlY3R1cmVzIHRvIGZvcmNlIHRoZQorZGlzYXNzZW1ibGVyIHRvIGludGVycHJldCBhbGwgaW5zdHJ1Y3Rpb25zIGFzIFRodW1iIGluc3RydWN0aW9ucyBieQordXNpbmcgdGhlIHN3aXRjaCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRpc2Fzc2VtYmxlci1vcHRpb25zPWZvcmNlLXRodW1iPC9zcGFuPjwvc2FtcD4uICBUaGlzIGNhbiBiZQordXNlZnVsIHdoZW4gYXR0ZW1wdGluZyB0byBkaXNhc3NlbWJsZSB0aHVtYiBjb2RlIHByb2R1Y2VkIGJ5IG90aGVyCitjb21waWxlcnMuCisKKyAgICAgPHA+Rm9yIHRoZSB4ODYsIHNvbWUgb2YgdGhlIG9wdGlvbnMgZHVwbGljYXRlIGZ1bmN0aW9ucyBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW08L3NwYW4+PC9zYW1wPgorc3dpdGNoLCBidXQgYWxsb3cgZmluZXIgZ3JhaW5lZCBjb250cm9sLiAgTXVsdGlwbGUgc2VsZWN0aW9ucyBmcm9tIHRoZQorZm9sbG93aW5nIG1heSBiZSBzcGVjaWZpZWQgYXMgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPng4Ni02NDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5pMzg2PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmk4MDg2PC9zcGFuPjwvc2FtcD4gc2VsZWN0IGRpc2Fzc2VtYmx5IGZvcgordGhlIGdpdmVuIGFyY2hpdGVjdHVyZS4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmludGVsPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmF0dDwvc3Bhbj48L3NhbXA+IHNlbGVjdCBiZXR3ZWVuCitpbnRlbCBzeW50YXggbW9kZSBhbmQgQVQmYW1wO1Qgc3ludGF4IG1vZGUuIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+aW50ZWwtbW5lbW9uaWM8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+YXR0LW1uZW1vbmljPC9zcGFuPjwvc2FtcD4gc2VsZWN0IGJldHdlZW4KK2ludGVsIG1uZW1vbmljIG1vZGUgYW5kIEFUJmFtcDtUIG1uZW1vbmljIG1vZGUuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmludGVsLW1uZW1vbmljPC9zcGFuPjwvc2FtcD4KK2ltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+aW50ZWw8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+YXR0LW1uZW1vbmljPC9zcGFuPjwvc2FtcD4gaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5hdHQ8L3NwYW4+PC9zYW1wPi4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5hZGRyNjQ8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+YWRkcjMyPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5hZGRyMTY8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+ZGF0YTMyPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmRhdGExNjwvc3Bhbj48L3NhbXA+IHNwZWNpZnkgdGhlIGRlZmF1bHQKK2FkZHJlc3Mgc2l6ZSBhbmQgb3BlcmFuZCBzaXplLiAgVGhlc2UgZm91ciBvcHRpb25zIHdpbGwgYmUgb3ZlcnJpZGRlbiBpZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+eDg2LTY0PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmkzODY8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5pODA4Njwvc3Bhbj48L3NhbXA+IGFwcGVhciBsYXRlciBpbiB0aGUKK29wdGlvbiBzdHJpbmcuICBMYXN0bHksIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPnN1ZmZpeDwvc3Bhbj48L3NhbXA+LCB3aGVuIGluIEFUJmFtcDtUIG1vZGUsCitpbnN0cnVjdHMgdGhlIGRpc2Fzc2VtYmxlciB0byBwcmludCBhIG1uZW1vbmljIHN1ZmZpeCBldmVuIHdoZW4gdGhlCitzdWZmaXggY291bGQgYmUgaW5mZXJyZWQgYnkgdGhlIG9wZXJhbmRzLgorCisgICAgIDxwPkZvciBQb3dlclBDLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5ib29rZTwvc3Bhbj48L3NhbXA+IGNvbnRyb2xzIHRoZSBkaXNhc3NlbWJseSBvZiBCb29rRQoraW5zdHJ1Y3Rpb25zLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+MzI8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+NjQ8L3NwYW4+PC9zYW1wPiBzZWxlY3QgUG93ZXJQQyBhbmQKK1Bvd2VyUEM2NCBkaXNhc3NlbWJseSwgcmVzcGVjdGl2ZWx5LiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+ZTMwMDwvc3Bhbj48L3NhbXA+IHNlbGVjdHMKK2Rpc2Fzc2VtYmx5IGZvciB0aGUgZTMwMCBmYW1pbHkuICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj40NDA8L3NwYW4+PC9zYW1wPiBzZWxlY3RzIGRpc2Fzc2VtYmx5IGZvcgordGhlIFBvd2VyUEMgNDQwLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+cHBjcHM8L3NwYW4+PC9zYW1wPiBzZWxlY3RzIGRpc2Fzc2VtYmx5IGZvciB0aGUgcGFpcmVkCitzaW5nbGUgaW5zdHJ1Y3Rpb25zIG9mIHRoZSBQUEM3NTBDTC4KKworICAgICA8cD5Gb3IgTUlQUywgdGhpcyBvcHRpb24gY29udHJvbHMgdGhlIHByaW50aW5nIG9mIGluc3RydWN0aW9uIG1uZW1vbmljCituYW1lcyBhbmQgcmVnaXN0ZXIgbmFtZXMgaW4gZGlzYXNzZW1ibGVkIGluc3RydWN0aW9ucy4gIE11bHRpcGxlCitzZWxlY3Rpb25zIGZyb20gdGhlIGZvbGxvd2luZyBtYXkgYmUgc3BlY2lmaWVkIGFzIGEgY29tbWEgc2VwYXJhdGVkCitzdHJpbmcsIGFuZCBpbnZhbGlkIG9wdGlvbnMgYXJlIGlnbm9yZWQ6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+bm8tYWxpYXNlczwvY29kZT48ZGQ+UHJpbnQgdGhlICdyYXcnIGluc3RydWN0aW9uIG1uZW1vbmljIGluc3RlYWQgb2Ygc29tZSBwc2V1ZG8KK2luc3RydWN0aW9uIG1uZW1vbmljLiAgSS5lLiwgcHJpbnQgJ2RhZGR1JyBvciAnb3InIGluc3RlYWQgb2YgJ21vdmUnLAorJ3NsbCcgaW5zdGVhZCBvZiAnbm9wJywgZXRjLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ncHItbmFtZXM9PC9jb2RlPjx2YXI+QUJJPC92YXI+PGRkPlByaW50IEdQUiAoZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyKSBuYW1lcyBhcyBhcHByb3ByaWF0ZQorZm9yIHRoZSBzcGVjaWZpZWQgQUJJLiAgQnkgZGVmYXVsdCwgR1BSIG5hbWVzIGFyZSBzZWxlY3RlZCBhY2NvcmRpbmcgdG8KK3RoZSBBQkkgb2YgdGhlIGJpbmFyeSBiZWluZyBkaXNhc3NlbWJsZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmZwci1uYW1lcz08L2NvZGU+PHZhcj5BQkk8L3Zhcj48ZGQ+UHJpbnQgRlBSIChmbG9hdGluZy1wb2ludCByZWdpc3RlcikgbmFtZXMgYXMKK2FwcHJvcHJpYXRlIGZvciB0aGUgc3BlY2lmaWVkIEFCSS4gIEJ5IGRlZmF1bHQsIEZQUiBudW1iZXJzIGFyZSBwcmludGVkCityYXRoZXIgdGhhbiBuYW1lcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Y3AwLW5hbWVzPTwvY29kZT48dmFyPkFSQ0g8L3Zhcj48ZGQ+UHJpbnQgQ1AwIChzeXN0ZW0gY29udHJvbCBjb3Byb2Nlc3NvcjsgY29wcm9jZXNzb3IgMCkgcmVnaXN0ZXIgbmFtZXMKK2FzIGFwcHJvcHJpYXRlIGZvciB0aGUgQ1BVIG9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpZWQgYnkKKzx2YXI+QVJDSDwvdmFyPi4gIEJ5IGRlZmF1bHQsIENQMCByZWdpc3RlciBuYW1lcyBhcmUgc2VsZWN0ZWQgYWNjb3JkaW5nIHRvCit0aGUgYXJjaGl0ZWN0dXJlIGFuZCBDUFUgb2YgdGhlIGJpbmFyeSBiZWluZyBkaXNhc3NlbWJsZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmh3ci1uYW1lcz08L2NvZGU+PHZhcj5BUkNIPC92YXI+PGRkPlByaW50IEhXUiAoaGFyZHdhcmUgcmVnaXN0ZXIsIHVzZWQgYnkgdGhlIDxjb2RlPnJkaHdyPC9jb2RlPiBpbnN0cnVjdGlvbikgbmFtZXMKK2FzIGFwcHJvcHJpYXRlIGZvciB0aGUgQ1BVIG9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpZWQgYnkKKzx2YXI+QVJDSDwvdmFyPi4gIEJ5IGRlZmF1bHQsIEhXUiBuYW1lcyBhcmUgc2VsZWN0ZWQgYWNjb3JkaW5nIHRvCit0aGUgYXJjaGl0ZWN0dXJlIGFuZCBDUFUgb2YgdGhlIGJpbmFyeSBiZWluZyBkaXNhc3NlbWJsZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnJlZy1uYW1lcz08L2NvZGU+PHZhcj5BQkk8L3Zhcj48ZGQ+UHJpbnQgR1BSIGFuZCBGUFIgbmFtZXMgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBzZWxlY3RlZCBBQkkuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnJlZy1uYW1lcz08L2NvZGU+PHZhcj5BUkNIPC92YXI+PGRkPlByaW50IENQVS1zcGVjaWZpYyByZWdpc3RlciBuYW1lcyAoQ1AwIHJlZ2lzdGVyIGFuZCBIV1IgbmFtZXMpCithcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHNlbGVjdGVkIENQVSBvciBhcmNoaXRlY3R1cmUuIAorPC9kbD4KKworICAgICA8cD5Gb3IgYW55IG9mIHRoZSBvcHRpb25zIGxpc3RlZCBhYm92ZSwgPHZhcj5BQkk8L3Zhcj4gb3IKKzx2YXI+QVJDSDwvdmFyPiBtYXkgYmUgc3BlY2lmaWVkIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bnVtZXJpYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBoYXZlIG51bWJlcnMgcHJpbnRlZAorcmF0aGVyIHRoYW4gbmFtZXMsIGZvciB0aGUgc2VsZWN0ZWQgdHlwZXMgb2YgcmVnaXN0ZXJzLiAKK1lvdSBjYW4gbGlzdCB0aGUgYXZhaWxhYmxlIHZhbHVlcyBvZiA8dmFyPkFCSTwvdmFyPiBhbmQgPHZhcj5BUkNIPC92YXI+IHVzaW5nCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxwPkZvciBWQVgsIHlvdSBjYW4gc3BlY2lmeSBmdW5jdGlvbiBlbnRyeSBhZGRyZXNzZXMgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTQorZW50cnk6MHhmMDBiYTwvc3Bhbj48L3NhbXA+LiAgWW91IGNhbiB1c2UgdGhpcyBtdWx0aXBsZSB0aW1lcyB0byBwcm9wZXJseQorZGlzYXNzZW1ibGUgVkFYIGJpbmFyeSBmaWxlcyB0aGF0IGRvbid0IGNvbnRhaW4gc3ltYm9sIHRhYmxlcyAobGlrZQorUk9NIGR1bXBzKS4gIEluIHRoZXNlIGNhc2VzLCB0aGUgZnVuY3Rpb24gZW50cnkgbWFzayB3b3VsZCBvdGhlcndpc2UKK2JlIGRlY29kZWQgYXMgVkFYIGluc3RydWN0aW9ucywgd2hpY2ggd291bGQgcHJvYmFibHkgbGVhZCB0aGUgcmVzdAorb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIHdyb25nbHkgZGlzYXNzZW1ibGVkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXA8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXByaXZhdGUtaGVhZGVyczwvc3Bhbj48L3NhbXA+PGRkPlByaW50IGluZm9ybWF0aW9uIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoZSBleGFjdAoraW5mb3JtYXRpb24gcHJpbnRlZCBkZXBlbmRzIHVwb24gdGhlIG9iamVjdCBmaWxlIGZvcm1hdC4gIEZvciBzb21lCitvYmplY3QgZmlsZSBmb3JtYXRzLCBubyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGlzIHByaW50ZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tUCA8L3NwYW4+PHZhcj5vcHRpb25zPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXByaXZhdGU9PC9zcGFuPjx2YXI+b3B0aW9uczwvdmFyPjwvc2FtcD48ZGQ+UHJpbnQgaW5mb3JtYXRpb24gdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhlCithcmd1bWVudCA8dmFyPm9wdGlvbnM8L3Zhcj4gaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCB0aGF0IGRlcGVuZHMgb24gdGhlCitmb3JtYXQgKHRoZSBsaXN0cyBvZiBvcHRpb25zIGlzIGRpc3BsYXllZCB3aXRoIHRoZSBoZWxwKS4KKworICAgICA8cD5Gb3IgWENPRkYsIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmhlYWRlcjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5hb3V0PC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5zZWN0aW9uczwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5zeW1zPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPnJlbG9jczwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5saW5lbm88L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmxvYWRlcjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5leGNlcHQ8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+dHlwY2hrPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPnRyYWNlYmFjazwvc3Bhbj48L3NhbXA+CithbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+dG9jPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tcjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tcmVsb2M8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1yZWxvY2F0aW9uLWVudHJpZXNfMDAyYy1pbi1vYmplY3QtZmlsZS04OCI+PC9hPlByaW50IHRoZSByZWxvY2F0aW9uIGVudHJpZXMgb2YgdGhlIGZpbGUuICBJZiB1c2VkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWQ8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUQ8L3NwYW4+PC9zYW1wPiwgdGhlIHJlbG9jYXRpb25zIGFyZSBwcmludGVkIGludGVyc3BlcnNlZCB3aXRoIHRoZQorZGlzYXNzZW1ibHkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tUjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZHluYW1pYy1yZWxvYzwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWR5bmFtaWMtcmVsb2NhdGlvbi1lbnRyaWVzXzAwMmMtaW4tb2JqZWN0LWZpbGUtODkiPjwvYT5QcmludCB0aGUgZHluYW1pYyByZWxvY2F0aW9uIGVudHJpZXMgb2YgdGhlIGZpbGUuICBUaGlzIGlzIG9ubHkKK21lYW5pbmdmdWwgZm9yIGR5bmFtaWMgb2JqZWN0cywgc3VjaCBhcyBjZXJ0YWluIHR5cGVzIG9mIHNoYXJlZAorbGlicmFyaWVzLiAgQXMgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1yPC9zcGFuPjwvc2FtcD4sIGlmIHVzZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZDwvc3Bhbj48L3NhbXA+IG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+LCB0aGUgcmVsb2NhdGlvbnMgYXJlIHByaW50ZWQgaW50ZXJzcGVyc2VkIHdpdGggdGhlCitkaXNhc3NlbWJseS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1zPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1mdWxsLWNvbnRlbnRzPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbnNfMDAyYy1mdWxsLWNvbnRlbnRzLTkwIj48L2E+PGEgbmFtZT0iaW5kZXgtb2JqZWN0LWZpbGUtc2VjdGlvbnMtOTEiPjwvYT5EaXNwbGF5IHRoZSBmdWxsIGNvbnRlbnRzIG9mIGFueSBzZWN0aW9ucyByZXF1ZXN0ZWQuICBCeSBkZWZhdWx0IGFsbAorbm9uLWVtcHR5IHNlY3Rpb25zIGFyZSBkaXNwbGF5ZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tUzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc291cmNlPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtc291cmNlLWRpc2Fzc2VtYmx5LTkyIj48L2E+PGEgbmFtZT0iaW5kZXgtZGlzYXNzZW1ibHlfMDAyYy13aXRoLXNvdXJjZS05MyI+PC9hPkRpc3BsYXkgc291cmNlIGNvZGUgaW50ZXJtaXhlZCB3aXRoIGRpc2Fzc2VtYmx5LCBpZiBwb3NzaWJsZS4gIEltcGxpZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXByZWZpeD08L3NwYW4+PHZhcj5wcmVmaXg8L3Zhcj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LUFkZC1wcmVmaXgtdG8tYWJzb2x1dGUtcGF0aHMtOTQiPjwvYT5TcGVjaWZ5IDx2YXI+cHJlZml4PC92YXI+IHRvIGFkZCB0byB0aGUgYWJzb2x1dGUgcGF0aHMgd2hlbiB1c2VkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1TPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXByZWZpeC1zdHJpcD08L3NwYW4+PHZhcj5sZXZlbDwvdmFyPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtU3RyaXAtYWJzb2x1dGUtcGF0aHMtOTUiPjwvYT5JbmRpY2F0ZSBob3cgbWFueSBpbml0aWFsIGRpcmVjdG9yeSBuYW1lcyB0byBzdHJpcCBvZmYgdGhlIGhhcmR3aXJlZAorYWJzb2x1dGUgcGF0aHMuIEl0IGhhcyBubyBlZmZlY3Qgd2l0aG91dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXByZWZpeD08L3NwYW4+PC9zYW1wPjx2YXI+cHJlZml4PC92YXI+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zaG93LXJhdy1pbnNuPC9zcGFuPjwvc2FtcD48ZGQ+V2hlbiBkaXNhc3NlbWJsaW5nIGluc3RydWN0aW9ucywgcHJpbnQgdGhlIGluc3RydWN0aW9uIGluIGhleCBhcyB3ZWxsIGFzCitpbiBzeW1ib2xpYyBmb3JtLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBleGNlcHQgd2hlbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wcmVmaXgtYWRkcmVzc2VzPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbm8tc2hvdy1yYXctaW5zbjwvc3Bhbj48L3NhbXA+PGRkPldoZW4gZGlzYXNzZW1ibGluZyBpbnN0cnVjdGlvbnMsIGRvIG5vdCBwcmludCB0aGUgaW5zdHJ1Y3Rpb24gYnl0ZXMuIAorVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcHJlZml4LWFkZHJlc3Nlczwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWluc24td2lkdGg9PC9zcGFuPjx2YXI+d2lkdGg8L3Zhcj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LUluc3RydWN0aW9uLXdpZHRoLTk2Ij48L2E+RGlzcGxheSA8dmFyPndpZHRoPC92YXI+IGJ5dGVzIG9uIGEgc2luZ2xlIGxpbmUgd2hlbiBkaXNhc3NlbWJsaW5nCitpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tV1tsTGlhcHJtZkZzb1J0XTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZHdhcmZbPXJhd2xpbmUsPWRlY29kZWRsaW5lLD1pbmZvLD1hYmJyZXYsPXB1Ym5hbWVzLD1hcmFuZ2VzLD1tYWNybyw9ZnJhbWVzLD1mcmFtZXMtaW50ZXJwLD1zdHIsPWxvYyw9UmFuZ2VzLD1wdWJ0eXBlcyw9dHJhY2VfaW5mbyw9dHJhY2VfYWJicmV2LD10cmFjZV9hcmFuZ2VzLD1nZGJfaW5kZXhdPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtRFdBUkYtOTciPjwvYT48YSBuYW1lPSJpbmRleC1kZWJ1Zy1zeW1ib2xzLTk4Ij48L2E+RGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBkZWJ1ZyBzZWN0aW9ucyBpbiB0aGUgZmlsZSwgaWYgYW55IGFyZQorcHJlc2VudC4gIElmIG9uZSBvZiB0aGUgb3B0aW9uYWwgbGV0dGVycyBvciB3b3JkcyBmb2xsb3dzIHRoZSBzd2l0Y2gKK3RoZW4gb25seSBkYXRhIGZvdW5kIGluIHRob3NlIHNwZWNpZmljIHNlY3Rpb25zIHdpbGwgYmUgZHVtcGVkLgorCisgICAgIDxwPk5vdGUgdGhhdCB0aGVyZSBpcyBubyBzaW5nbGUgbGV0dGVyIG9wdGlvbiB0byBkaXNwbGF5IHRoZSBjb250ZW50IG9mCit0cmFjZSBzZWN0aW9ucyBvciAuZ2RiX2luZGV4LgorCisgICAgIDxwPk5vdGU6IHRoZSBvdXRwdXQgZnJvbSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+PWluZm88L3NwYW4+PC9zYW1wPiBvcHRpb24gY2FuIGFsc28gYmUgYWZmZWN0ZWQKK2J5IHRoZSBvcHRpb25zIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHdhcmYtZGVwdGg8L3NwYW4+PC9zYW1wPiwgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHdhcmYtc3RhcnQ8L3NwYW4+PC9zYW1wPiBhbmQKK3RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWR3YXJmLWNoZWNrPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWR3YXJmLWRlcHRoPTwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+PGRkPkxpbWl0IHRoZSBkdW1wIG9mIHRoZSA8Y29kZT4uZGVidWdfaW5mbzwvY29kZT4gc2VjdGlvbiB0byA8dmFyPm48L3Zhcj4gY2hpbGRyZW4uIAorVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHdhcmY9aW5mbzwvc3Bhbj48L3NhbXA+LiAgVGhlIGRlZmF1bHQgaXMKK3RvIHByaW50IGFsbCBESUVzOyB0aGUgc3BlY2lhbCB2YWx1ZSAwIGZvciA8dmFyPm48L3Zhcj4gd2lsbCBhbHNvIGhhdmUgdGhpcworZWZmZWN0LgorCisgICAgIDxwPldpdGggYSBub24temVybyB2YWx1ZSBmb3IgPHZhcj5uPC92YXI+LCBESUVzIGF0IG9yIGRlZXBlciB0aGFuIDx2YXI+bjwvdmFyPgorbGV2ZWxzIHdpbGwgbm90IGJlIHByaW50ZWQuICBUaGUgcmFuZ2UgZm9yIDx2YXI+bjwvdmFyPiBpcyB6ZXJvLWJhc2VkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kd2FyZi1zdGFydD08L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPjxkZD5QcmludCBvbmx5IERJRXMgYmVnaW5uaW5nIHdpdGggdGhlIERJRSBudW1iZXJlZCA8dmFyPm48L3Zhcj4uICBUaGlzIGlzIG9ubHkKK3VzZWZ1bCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHdhcmY9aW5mbzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPklmIHNwZWNpZmllZCwgdGhpcyBvcHRpb24gd2lsbCBzdXBwcmVzcyBwcmludGluZyBvZiBhbnkgaGVhZGVyCitpbmZvcm1hdGlvbiBhbmQgYWxsIERJRXMgYmVmb3JlIHRoZSBESUUgbnVtYmVyZWQgPHZhcj5uPC92YXI+LiAgT25seQorc2libGluZ3MgYW5kIGNoaWxkcmVuIG9mIHRoZSBzcGVjaWZpZWQgRElFIHdpbGwgYmUgcHJpbnRlZC4KKworICAgICA8cD5UaGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kd2FyZi1kZXB0aDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kd2FyZi1jaGVjazwvc3Bhbj48L3NhbXA+PGRkPkVuYWJsZSBhZGRpdGlvbmFsIGNoZWNrcyBmb3IgY29uc2lzdGVuY3kgb2YgRHdhcmYgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3RhYnM8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1zdGFiLTk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmVzdGFiLTEwMCI+PC9hPjxhIG5hbWU9ImluZGV4LWRlYnVnLXN5bWJvbHMtMTAxIj48L2E+PGEgbmFtZT0iaW5kZXgtRUxGLW9iamVjdC1maWxlLWZvcm1hdC0xMDIiPjwvYT5EaXNwbGF5IHRoZSBmdWxsIGNvbnRlbnRzIG9mIGFueSBzZWN0aW9ucyByZXF1ZXN0ZWQuICBEaXNwbGF5IHRoZQorY29udGVudHMgb2YgdGhlIC5zdGFiIGFuZCAuc3RhYi5pbmRleCBhbmQgLnN0YWIuZXhjbCBzZWN0aW9ucyBmcm9tIGFuCitFTEYgZmlsZS4gIFRoaXMgaXMgb25seSB1c2VmdWwgb24gc3lzdGVtcyAoc3VjaCBhcyBTb2xhcmlzIDIuMCkgaW4gd2hpY2gKKzxjb2RlPi5zdGFiPC9jb2RlPiBkZWJ1Z2dpbmcgc3ltYm9sLXRhYmxlIGVudHJpZXMgYXJlIGNhcnJpZWQgaW4gYW4gRUxGCitzZWN0aW9uLiAgSW4gbW9zdCBvdGhlciBmaWxlIGZvcm1hdHMsIGRlYnVnZ2luZyBzeW1ib2wtdGFibGUgZW50cmllcyBhcmUKK2ludGVybGVhdmVkIHdpdGggbGlua2FnZSBzeW1ib2xzLCBhbmQgYXJlIHZpc2libGUgaW4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3ltczwvc3Bhbj48L3NhbXA+CitvdXRwdXQuIAorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3RhYnMgc3ltYm9scywgc2VlIDxhIGhyZWY9Ii4uL3N0YWJzL2luZGV4Lmh0bWwjVG9wIj5TdGFiczwvYT4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0YXJ0LWFkZHJlc3M9PC9zcGFuPjx2YXI+YWRkcmVzczwvdmFyPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtc3RhcnRfMDAyZGFkZHJlc3MtMTAzIj48L2E+U3RhcnQgZGlzcGxheWluZyBkYXRhIGF0IHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4gIFRoaXMgYWZmZWN0cyB0aGUgb3V0cHV0CitvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWQ8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXI8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXM8L3NwYW4+PC9zYW1wPiBvcHRpb25zLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zdG9wLWFkZHJlc3M9PC9zcGFuPjx2YXI+YWRkcmVzczwvdmFyPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtc3RvcF8wMDJkYWRkcmVzcy0xMDQiPjwvYT5TdG9wIGRpc3BsYXlpbmcgZGF0YSBhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuICBUaGlzIGFmZmVjdHMgdGhlIG91dHB1dAorb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1yPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi10PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zeW1zPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLXRhYmxlLWVudHJpZXNfMDAyYy1wcmludGluZy0xMDUiPjwvYT5QcmludCB0aGUgc3ltYm9sIHRhYmxlIGVudHJpZXMgb2YgdGhlIGZpbGUuIAorVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ubTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcm9ncmFtLAorYWx0aG91Z2ggdGhlIGRpc3BsYXkgZm9ybWF0IGlzIGRpZmZlcmVudC4gIFRoZSBmb3JtYXQgb2YgdGhlIG91dHB1dAorZGVwZW5kcyB1cG9uIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgYmVpbmcgZHVtcGVkLCBidXQgdGhlcmUgYXJlIHR3byBtYWluCit0eXBlcy4gIE9uZSBsb29rcyBsaWtlIHRoaXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgWyAgNF0oc2VjICAzKShmbCAweDAwKSh0eSAgIDApKHNjbCAgIDMpIChueCAxKSAweDAwMDAwMDAwIC5ic3MKKyAgICAgICAgICBbICA2XShzZWMgIDEpKGZsIDB4MDApKHR5ICAgMCkoc2NsICAgMikgKG54IDApIDB4MDAwMDAwMDAgZnJlZAorPC9wcmU+CisgICAgIDxwPndoZXJlIHRoZSBudW1iZXIgaW5zaWRlIHRoZSBzcXVhcmUgYnJhY2tldHMgaXMgdGhlIG51bWJlciBvZiB0aGUgZW50cnkKK2luIHRoZSBzeW1ib2wgdGFibGUsIHRoZSA8dmFyPnNlYzwvdmFyPiBudW1iZXIgaXMgdGhlIHNlY3Rpb24gbnVtYmVyLCB0aGUKKzx2YXI+Zmw8L3Zhcj4gdmFsdWUgYXJlIHRoZSBzeW1ib2wncyBmbGFnIGJpdHMsIHRoZSA8dmFyPnR5PC92YXI+IG51bWJlciBpcyB0aGUKK3N5bWJvbCdzIHR5cGUsIHRoZSA8dmFyPnNjbDwvdmFyPiBudW1iZXIgaXMgdGhlIHN5bWJvbCdzIHN0b3JhZ2UgY2xhc3MgYW5kCit0aGUgPHZhcj5ueDwvdmFyPiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGF1eGlsYXJ5IGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoCit0aGUgc3ltYm9sLiAgVGhlIGxhc3QgdHdvIGZpZWxkcyBhcmUgdGhlIHN5bWJvbCdzIHZhbHVlIGFuZCBpdHMgbmFtZS4KKworICAgICA8cD5UaGUgb3RoZXIgY29tbW9uIG91dHB1dCBmb3JtYXQsIHVzdWFsbHkgc2VlbiB3aXRoIEVMRiBiYXNlZCBmaWxlcywKK2xvb2tzIGxpa2UgdGhpczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAwMDAwMDAwMCBsICAgIGQgIC5ic3MgICAwMDAwMDAwMCAuYnNzCisgICAgICAgICAgMDAwMDAwMDAgZyAgICAgICAudGV4dCAgMDAwMDAwMDAgZnJlZAorPC9wcmU+CisgICAgIDxwPkhlcmUgdGhlIGZpcnN0IG51bWJlciBpcyB0aGUgc3ltYm9sJ3MgdmFsdWUgKHNvbWV0aW1lcyByZWZlcmVkIHRvIGFzCitpdHMgYWRkcmVzcykuICBUaGUgbmV4dCBmaWVsZCBpcyBhY3R1YWxseSBhIHNldCBvZiBjaGFyYWN0ZXJzIGFuZAorc3BhY2VzIGluZGljYXRpbmcgdGhlIGZsYWcgYml0cyB0aGF0IGFyZSBzZXQgb24gdGhlIHN5bWJvbC4gIFRoZXNlCitjaGFyYWN0ZXJzIGFyZSBkZXNjcmliZWQgYmVsb3cuICBOZXh0IGlzIHRoZSBzZWN0aW9uIHdpdGggd2hpY2ggdGhlCitzeW1ib2wgaXMgYXNzb2NpYXRlZCBvciA8ZW0+KkFCUyo8L2VtPiBpZiB0aGUgc2VjdGlvbiBpcyBhYnNvbHV0ZSAoaWUKK25vdCBjb25uZWN0ZWQgd2l0aCBhbnkgc2VjdGlvbiksIG9yIDxlbT4qVU5EKjwvZW0+IGlmIHRoZSBzZWN0aW9uIGlzCityZWZlcmVuY2VkIGluIHRoZSBmaWxlIGJlaW5nIGR1bXBlZCwgYnV0IG5vdCBkZWZpbmVkIHRoZXJlLgorCisgICAgIDxwPkFmdGVyIHRoZSBzZWN0aW9uIG5hbWUgY29tZXMgYW5vdGhlciBmaWVsZCwgYSBudW1iZXIsIHdoaWNoIGZvciBjb21tb24KK3N5bWJvbHMgaXMgdGhlIGFsaWdubWVudCBhbmQgZm9yIG90aGVyIHN5bWJvbCBpcyB0aGUgc2l6ZS4gIEZpbmFsbHkKK3RoZSBzeW1ib2wncyBuYW1lIGlzIGRpc3BsYXllZC4KKworICAgICA8cD5UaGUgZmxhZyBjaGFyYWN0ZXJzIGFyZSBkaXZpZGVkIGludG8gNyBncm91cHMgYXMgZm9sbG93czoKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+bDwvY29kZT48ZHQ+PGNvZGU+ZzwvY29kZT48ZHQ+PGNvZGU+dTwvY29kZT48ZHQ+PGNvZGU+ITwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyBhIGxvY2FsIChsKSwgZ2xvYmFsIChnKSwgdW5pcXVlIGdsb2JhbCAodSksIG5laXRoZXIKK2dsb2JhbCBub3IgbG9jYWwgKGEgc3BhY2UpIG9yIGJvdGggZ2xvYmFsIGFuZCBsb2NhbCAoISkuICBBCitzeW1ib2wgY2FuIGJlIG5laXRoZXIgbG9jYWwgb3IgZ2xvYmFsIGZvciBhIHZhcmlldHkgb2YgcmVhc29ucywgZS5nLiwKK2JlY2F1c2UgaXQgaXMgdXNlZCBmb3IgZGVidWdnaW5nLCBidXQgaXQgaXMgcHJvYmFibHkgYW4gaW5kaWNhdGlvbiBvZgorYSBidWcgaWYgaXQgaXMgZXZlciBib3RoIGxvY2FsIGFuZCBnbG9iYWwuICBVbmlxdWUgZ2xvYmFsIHN5bWJvbHMgYXJlCithIEdOVSBleHRlbnNpb24gdG8gdGhlIHN0YW5kYXJkIHNldCBvZiBFTEYgc3ltYm9sIGJpbmRpbmdzLiAgRm9yIHN1Y2gKK2Egc3ltYm9sIHRoZSBkeW5hbWljIGxpbmtlciB3aWxsIG1ha2Ugc3VyZSB0aGF0IGluIHRoZSBlbnRpcmUgcHJvY2VzcwordGhlcmUgaXMganVzdCBvbmUgc3ltYm9sIHdpdGggdGhpcyBuYW1lIGFuZCB0eXBlIGluIHVzZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dzwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyB3ZWFrICh3KSBvciBzdHJvbmcgKGEgc3BhY2UpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5DPC9jb2RlPjxkZD5UaGUgc3ltYm9sIGRlbm90ZXMgYSBjb25zdHJ1Y3RvciAoQykgb3IgYW4gb3JkaW5hcnkgc3ltYm9sIChhIHNwYWNlKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VzwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyBhIHdhcm5pbmcgKFcpIG9yIGEgbm9ybWFsIHN5bWJvbCAoYSBzcGFjZSkuICBBIHdhcm5pbmcKK3N5bWJvbCdzIG5hbWUgaXMgYSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCBpZiB0aGUgc3ltYm9sIGZvbGxvd2luZyB0aGUKK3dhcm5pbmcgc3ltYm9sIGlzIGV2ZXIgcmVmZXJlbmNlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+STwvY29kZT48YnI+PGR0Pjxjb2RlPmk8L2NvZGU+PGRkPlRoZSBzeW1ib2wgaXMgYW4gaW5kaXJlY3QgcmVmZXJlbmNlIHRvIGFub3RoZXIgc3ltYm9sIChJKSwgYSBmdW5jdGlvbgordG8gYmUgZXZhbHVhdGVkIGR1cmluZyByZWxvYyBwcm9jZXNzaW5nIChpKSBvciBhIG5vcm1hbCBzeW1ib2wgKGEKK3NwYWNlKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZDwvY29kZT48ZHQ+PGNvZGU+RDwvY29kZT48ZGQ+VGhlIHN5bWJvbCBpcyBhIGRlYnVnZ2luZyBzeW1ib2wgKGQpIG9yIGEgZHluYW1pYyBzeW1ib2wgKEQpIG9yIGEKK25vcm1hbCBzeW1ib2wgKGEgc3BhY2UpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5GPC9jb2RlPjxicj48ZHQ+PGNvZGU+ZjwvY29kZT48YnI+PGR0Pjxjb2RlPk88L2NvZGU+PGRkPlRoZSBzeW1ib2wgaXMgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiAoRikgb3IgYSBmaWxlIChmKSBvciBhbiBvYmplY3QKKyhPKSBvciBqdXN0IGEgbm9ybWFsIHN5bWJvbCAoYSBzcGFjZSkuIAorPC9kbD4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1UPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1keW5hbWljLXN5bXM8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1keW5hbWljLXN5bWJvbC10YWJsZS1lbnRyaWVzXzAwMmMtcHJpbnRpbmctMTA2Ij48L2E+UHJpbnQgdGhlIGR5bmFtaWMgc3ltYm9sIHRhYmxlIGVudHJpZXMgb2YgdGhlIGZpbGUuICBUaGlzIGlzIG9ubHkKK21lYW5pbmdmdWwgZm9yIGR5bmFtaWMgb2JqZWN0cywgc3VjaCBhcyBjZXJ0YWluIHR5cGVzIG9mIHNoYXJlZAorbGlicmFyaWVzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ubTwvc3Bhbj48L3NhbXA+JnJzcXVvOworcHJvZ3JhbSB3aGVuIGdpdmVuIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+ICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWR5bmFtaWM8L3NwYW4+PC9zYW1wPikgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zcGVjaWFsLXN5bXM8L3NwYW4+PC9zYW1wPjxkZD5XaGVuIGRpc3BsYXlpbmcgc3ltYm9scyBpbmNsdWRlIHRob3NlIHdoaWNoIHRoZSB0YXJnZXQgY29uc2lkZXJzIHRvIGJlCitzcGVjaWFsIGluIHNvbWUgd2F5IGFuZCB3aGljaCB3b3VsZCBub3Qgbm9ybWFsbHkgYmUgb2YgaW50ZXJlc3QgdG8gdGhlCit1c2VyLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVY8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcnNpb248L3NwYW4+PC9zYW1wPjxkZD5QcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamR1bXA8L3NwYW4+PC9zYW1wPiBhbmQgZXhpdC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi14PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1hbGwtaGVhZGVyczwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWFsbC1oZWFkZXItaW5mb3JtYXRpb25fMDAyYy1vYmplY3QtZmlsZS0xMDciPjwvYT48YSBuYW1lPSJpbmRleC1oZWFkZXItaW5mb3JtYXRpb25fMDAyYy1hbGwtMTA4Ij48L2E+RGlzcGxheSBhbGwgYXZhaWxhYmxlIGhlYWRlciBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIHRoZSBzeW1ib2wgdGFibGUgYW5kCityZWxvY2F0aW9uIGVudHJpZXMuICBVc2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4teDwvc3Bhbj48L3NhbXA+IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyBhbGwgb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hIC1mIC1oIC1wIC1yIC10PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tdzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0td2lkZTwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LXdpZGUtb3V0cHV0XzAwMmMtcHJpbnRpbmctMTA5Ij48L2E+Rm9ybWF0IHNvbWUgbGluZXMgZm9yIG91dHB1dCBkZXZpY2VzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gODAgY29sdW1ucy4gCitBbHNvIGRvIG5vdCB0cnVuY2F0ZSBzeW1ib2wgbmFtZXMgd2hlbiB0aGV5IGFyZSBkaXNwbGF5ZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tejwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZGlzYXNzZW1ibGUtemVyb2VzPC9zcGFuPjwvc2FtcD48ZGQ+Tm9ybWFsbHkgdGhlIGRpc2Fzc2VtYmx5IG91dHB1dCB3aWxsIHNraXAgYmxvY2tzIG9mIHplcm9lcy4gIFRoaXMKK29wdGlvbiBkaXJlY3RzIHRoZSBkaXNhc3NlbWJsZXIgdG8gZGlzYXNzZW1ibGUgdGhvc2UgYmxvY2tzLCBqdXN0IGxpa2UKK2FueSBvdGhlciBkYXRhLiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3JhbmxpYi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvcmFubGliLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmNjNkNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3JhbmxpYi5odG1sCkBAIC0wLDAgKzEsOTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnJhbmxpYiAtIEdOVSBCaW5hcnkgVXRpbGl0aWVzPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgQmluYXJ5IFV0aWxpdGllcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJvYmpkdW1wLmh0bWwjb2JqZHVtcCIgdGl0bGU9Im9iamR1bXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzaXplLmh0bWwjc2l6ZSIgdGl0bGU9InNpemUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InJhbmxpYiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzaXplLmh0bWwjc2l6ZSI+c2l6ZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im9iamR1bXAuaHRtbCNvYmpkdW1wIj5vYmpkdW1wPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjUgcmFubGliPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmFubGliLTExMCI+PC9hPjxhIG5hbWU9ImluZGV4LWFyY2hpdmUtY29udGVudHMtMTExIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLWluZGV4LTExMiI+PC9hPgorPCEtLSBtYW4gdGl0bGUgcmFubGliIGdlbmVyYXRlIGluZGV4IHRvIGFyY2hpdmUuIC0tPgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPCEtLSBtYW4gYmVnaW4gU1lOT1BTSVMgcmFubGliIC0tPgorICAgICByYW5saWIgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGx1Z2luPC9zcGFuPjwvc2FtcD4gPHZhcj5uYW1lPC92YXI+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LURoSHZWdDwvc3Bhbj48L3NhbXA+XSA8dmFyPmFyY2hpdmU8L3Zhcj4KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiByYW5saWIgLS0+CisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+cmFubGliPC9zcGFuPjwvc2FtcD4gZ2VuZXJhdGVzIGFuIGluZGV4IHRvIHRoZSBjb250ZW50cyBvZiBhbiBhcmNoaXZlIGFuZAorc3RvcmVzIGl0IGluIHRoZSBhcmNoaXZlLiAgVGhlIGluZGV4IGxpc3RzIGVhY2ggc3ltYm9sIGRlZmluZWQgYnkgYQorbWVtYmVyIG9mIGFuIGFyY2hpdmUgdGhhdCBpcyBhIHJlbG9jYXRhYmxlIG9iamVjdCBmaWxlLgorCisgICA8cD5Zb3UgbWF5IHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5tIC1zPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm0gLS1wcmludC1hcm1hcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBsaXN0IHRoaXMgaW5kZXguCisKKyAgIDxwPkFuIGFyY2hpdmUgd2l0aCBzdWNoIGFuIGluZGV4IHNwZWVkcyB1cCBsaW5raW5nIHRvIHRoZSBsaWJyYXJ5IGFuZAorYWxsb3dzIHJvdXRpbmVzIGluIHRoZSBsaWJyYXJ5IHRvIGNhbGwgZWFjaCBvdGhlciB3aXRob3V0IHJlZ2FyZCB0bwordGhlaXIgcGxhY2VtZW50IGluIHRoZSBhcmNoaXZlLgorCisgICA8cD5UaGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5yYW5saWI8L3NwYW4+PC9zYW1wPiBwcm9ncmFtIGlzIGFub3RoZXIgZm9ybSBvZiA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFyPC9zcGFuPjwvc2FtcD47IHJ1bm5pbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5yYW5saWI8L3NwYW4+PC9zYW1wPiBpcyBjb21wbGV0ZWx5IGVxdWl2YWxlbnQgdG8gZXhlY3V0aW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXIgLXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorU2VlIDxhIGhyZWY9ImFyLmh0bWwjYXIiPmFyPC9hPi4KKworPCEtLSBtYW4gZW5kIC0tPgorPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyByYW5saWIgLS0+CisgICAgIDxkbD4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4taDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1IPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+U2hvdyB1c2FnZSBpbmZvcm1hdGlvbiBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnJhbmxpYjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXY8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdmVyc2lvbjwvc3Bhbj48L3NhbXA+PGRkPlNob3cgdGhlIHZlcnNpb24gbnVtYmVyIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5yYW5saWI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1EPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlcy0xMTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRkZXRlcm1pbmlzdGljXzAwMmRhcmNoaXZlcy0xMTQiPjwvYT5PcGVyYXRlIGluIDxlbT5kZXRlcm1pbmlzdGljPC9lbT4gbW9kZS4gIFRoZSBzeW1ib2wgbWFwIGFyY2hpdmUgbWVtYmVyJ3MKK2hlYWRlciB3aWxsIHNob3cgemVybyBmb3IgdGhlIFVJRCwgR0lELCBhbmQgdGltZXN0YW1wLiAgV2hlbiB0aGlzCitvcHRpb24gaXMgdXNlZCwgbXVsdGlwbGUgcnVucyB3aWxsIHByb2R1Y2UgaWRlbnRpY2FsIG91dHB1dCBmaWxlcy4KKworICAgICA8cD5UaGlzIGlzIHRoZSBkZWZhdWx0IHVubGVzcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmludXRpbHM8L3NwYW4+PC9zYW1wPiB3YXMgY29uZmlndXJlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1kZXRlcm1pbmlzdGljLWFyY2hpdmVzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tdDwvc3Bhbj48L3NhbXA+PGRkPlVwZGF0ZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBzeW1ib2wgbWFwIG9mIGFuIGFyY2hpdmUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVTwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LWRldGVybWluaXN0aWMtYXJjaGl2ZXMtMTE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkZGV0ZXJtaW5pc3RpY18wMDJkYXJjaGl2ZXMtMTE2Ij48L2E+RG8gPGVtPm5vdDwvZW0+IG9wZXJhdGUgaW4gPGVtPmRldGVybWluaXN0aWM8L2VtPiBtb2RlLiAgVGhpcyBpcyB0aGUKK2ludmVyc2Ugb2YgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBhYm92ZTogdGhlIGFyY2hpdmUgaW5kZXggd2lsbCBnZXQKK2FjdHVhbCBVSUQsIEdJRCwgdGltZXN0YW1wLCBhbmQgZmlsZSBtb2RlIHZhbHVlcy4KKworICAgICA8cD5UaGlzIGlzIHRoZSBkZWZhdWx0IHVubGVzcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmludXRpbHM8L3NwYW4+PC9zYW1wPiB3YXMgY29uZmlndXJlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1kZXRlcm1pbmlzdGljLWFyY2hpdmVzPC9zcGFuPjwvc2FtcD4uIAorPC9kbD4KKworPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvcmVhZGVsZi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvcmVhZGVsZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzM4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9yZWFkZWxmLmh0bWwKQEAgLTAsMCArMSwyMjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnJlYWRlbGYgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZGxsdG9vbC5odG1sI2RsbHRvb2wiIHRpdGxlPSJkbGx0b29sIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZWxmZWRpdC5odG1sI2VsZmVkaXQiIHRpdGxlPSJlbGZlZGl0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJyZWFkZWxmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImVsZmVkaXQuaHRtbCNlbGZlZGl0Ij5lbGZlZGl0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZGxsdG9vbC5odG1sI2RsbHRvb2wiPmRsbHRvb2w8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MTUgcmVhZGVsZjwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LUVMRi1maWxlLWluZm9ybWF0aW9uLTE0NyI+PC9hPjxhIG5hbWU9ImluZGV4LXJlYWRlbGYtMTQ4Ij48L2E+Cis8IS0tIG1hbiB0aXRsZSByZWFkZWxmIERpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IEVMRiBmaWxlcy4gLS0+CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8IS0tIG1hbiBiZWdpbiBTWU5PUFNJUyByZWFkZWxmIC0tPgorICAgICByZWFkZWxmIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYWxsPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1oPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1maWxlLWhlYWRlcjwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcHJvZ3JhbS1oZWFkZXJzPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zZWdtZW50czwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2VjdGlvbi1oZWFkZXJzPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zZWN0aW9uczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2VjdGlvbi1ncm91cHM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXQ8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXNlY3Rpb24tZGV0YWlsczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGVhZGVyczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tczwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3ltczwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3ltYm9sczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWR5bi1zeW1zPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1uPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1ub3Rlczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcjwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcmVsb2NzPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi11PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS11bndpbmQ8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWQ8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWR5bmFtaWM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVY8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb24taW5mbzwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYXJjaC1zcGVjaWZpYzwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdXNlLWR5bmFtaWM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXg8L3NwYW4+PC9zYW1wPiAmbHQ7bnVtYmVyIG9yIG5hbWUmZ3Q7fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGV4LWR1bXA9PC9zcGFuPjwvc2FtcD4mbHQ7bnVtYmVyIG9yIG5hbWUmZ3Q7XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcDwvc3Bhbj48L3NhbXA+ICZsdDtudW1iZXIgb3IgbmFtZSZndDt8PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpbmctZHVtcD08L3NwYW4+PC9zYW1wPiZsdDtudW1iZXIgb3IgbmFtZSZndDtdCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1SPC9zcGFuPjwvc2FtcD4gJmx0O251bWJlciBvciBuYW1lJmd0O3w8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlbG9jYXRlZC1kdW1wPTwvc3Bhbj48L3NhbXA+Jmx0O251bWJlciBvciBuYW1lJmd0O10KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWM8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFyY2hpdmUtaW5kZXg8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXdbbExpYXBybWZGc29SdF08L3NwYW4+PC9zYW1wPnwKKyAgICAgICAgICAgICAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kZWJ1Zy1kdW1wPC9zcGFuPjwvc2FtcD5bPXJhd2xpbmUsPWRlY29kZWRsaW5lLD1pbmZvLD1hYmJyZXYsPXB1Ym5hbWVzLD1hcmFuZ2VzLD1tYWNybyw9ZnJhbWVzLD1mcmFtZXMtaW50ZXJwLD1zdHIsPWxvYyw9UmFuZ2VzLD1wdWJ0eXBlcyw9dHJhY2VfaW5mbyw9dHJhY2VfYWJicmV2LD10cmFjZV9hcmFuZ2VzLD1nZGJfaW5kZXhdXQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWR3YXJmLWRlcHRoPTwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWR3YXJmLXN0YXJ0PTwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGlzdG9ncmFtPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi12PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aWRlPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1IPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgICAgPHZhcj5lbGZmaWxlPC92YXI+Li4uCisgICAgIDwhLS0gbWFuIGVuZCAtLT4KKzwvcHJlPgorICAgPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gcmVhZGVsZiAtLT4KKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5yZWFkZWxmPC9zcGFuPjwvc2FtcD4gZGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQgb25lIG9yIG1vcmUgRUxGIGZvcm1hdCBvYmplY3QKK2ZpbGVzLiAgVGhlIG9wdGlvbnMgY29udHJvbCB3aGF0IHBhcnRpY3VsYXIgaW5mb3JtYXRpb24gdG8gZGlzcGxheS4KKworICAgPHA+PHZhcj5lbGZmaWxlPC92YXI+PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiBhcmUgdGhlIG9iamVjdCBmaWxlcyB0byBiZSBleGFtaW5lZC4gIDMyLWJpdCBhbmQKKzY0LWJpdCBFTEYgZmlsZXMgYXJlIHN1cHBvcnRlZCwgYXMgYXJlIGFyY2hpdmVzIGNvbnRhaW5pbmcgRUxGIGZpbGVzLgorCisgICA8cD5UaGlzIHByb2dyYW0gcGVyZm9ybXMgYSBzaW1pbGFyIGZ1bmN0aW9uIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5vYmpkdW1wPC9zcGFuPjwvc2FtcD4gYnV0IGl0Citnb2VzIGludG8gbW9yZSBkZXRhaWwgYW5kIGl0IGV4aXN0cyBpbmRlcGVuZGVudGx5IG9mIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmJmZDwvc3Bhbj4KK2xpYnJhcnksIHNvIGlmIHRoZXJlIGlzIGEgYnVnIGluIDxzcGFuIGNsYXNzPSJzYyI+YmZkPC9zcGFuPiB0aGVuIHJlYWRlbGYgd2lsbCBub3QgYmUKK2FmZmVjdGVkLgorCis8IS0tIG1hbiBlbmQgLS0+Cis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIHJlYWRlbGYgLS0+CisgICA8cD5UaGUgbG9uZyBhbmQgc2hvcnQgZm9ybXMgb2Ygb3B0aW9ucywgc2hvd24gaGVyZSBhcyBhbHRlcm5hdGl2ZXMsIGFyZQorZXF1aXZhbGVudC4gIEF0IGxlYXN0IG9uZSBvcHRpb24gYmVzaWRlcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi12PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbXVzdCBiZQorZ2l2ZW4uCisKKyAgICAgPGRsPgorPGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1hPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1hbGw8L3NwYW4+PC9zYW1wPjxkZD5FcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1maWxlLWhlYWRlcjwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wcm9ncmFtLWhlYWRlcnM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zZWN0aW9uczwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5bWJvbHM8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcmVsb2NzPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHluYW1pYzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vdGVzPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcnNpb24taW5mbzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWg8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWZpbGUtaGVhZGVyPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtRUxGLWZpbGUtaGVhZGVyLWluZm9ybWF0aW9uLTE0OSI+PC9hPkRpc3BsYXlzIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIEVMRiBoZWFkZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZQorZmlsZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1sPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1wcm9ncmFtLWhlYWRlcnM8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXNlZ21lbnRzPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtRUxGLXByb2dyYW0taGVhZGVyLWluZm9ybWF0aW9uLTE1MCI+PC9hPjxhIG5hbWU9ImluZGV4LUVMRi1zZWdtZW50LWluZm9ybWF0aW9uLTE1MSI+PC9hPkRpc3BsYXlzIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGZpbGUncyBzZWdtZW50IGhlYWRlcnMsIGlmIGl0CitoYXMgYW55LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVM8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXNlY3Rpb25zPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zZWN0aW9uLWhlYWRlcnM8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1FTEYtc2VjdGlvbi1pbmZvcm1hdGlvbi0xNTIiPjwvYT5EaXNwbGF5cyB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBmaWxlJ3Mgc2VjdGlvbiBoZWFkZXJzLCBpZiBpdAoraGFzIGFueS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1nPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zZWN0aW9uLWdyb3Vwczwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LUVMRi1zZWN0aW9uLWdyb3VwLWluZm9ybWF0aW9uLTE1MyI+PC9hPkRpc3BsYXlzIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGZpbGUncyBzZWN0aW9uIGdyb3VwcywgaWYgaXQKK2hhcyBhbnkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tdDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc2VjdGlvbi1kZXRhaWxzPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtRUxGLXNlY3Rpb24taW5mb3JtYXRpb24tMTU0Ij48L2E+RGlzcGxheXMgdGhlIGRldGFpbGVkIHNlY3Rpb24gaW5mb3JtYXRpb24uIEltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1zPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zeW1ib2xzPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zeW1zPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtRUxGLXN5bWJvbC10YWJsZS1pbmZvcm1hdGlvbi0xNTUiPjwvYT5EaXNwbGF5cyB0aGUgZW50cmllcyBpbiBzeW1ib2wgdGFibGUgc2VjdGlvbiBvZiB0aGUgZmlsZSwgaWYgaXQgaGFzIG9uZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZHluLXN5bXM8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1FTEYtZHluYW1pYy1zeW1ib2wtdGFibGUtaW5mb3JtYXRpb24tMTU2Ij48L2E+RGlzcGxheXMgdGhlIGVudHJpZXMgaW4gZHluYW1pYyBzeW1ib2wgdGFibGUgc2VjdGlvbiBvZiB0aGUgZmlsZSwgaWYgaXQKK2hhcyBvbmUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taGVhZGVyczwvc3Bhbj48L3NhbXA+PGRkPkRpc3BsYXkgYWxsIHRoZSBoZWFkZXJzIGluIHRoZSBmaWxlLiAgRXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taCAtbCAtUzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LW48L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW5vdGVzPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtRUxGLW5vdGVzLTE1NyI+PC9hPkRpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUgTk9URSBzZWdtZW50cyBhbmQvb3Igc2VjdGlvbnMsIGlmIGFueS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1yPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1yZWxvY3M8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1FTEYtcmVsb2MtaW5mb3JtYXRpb24tMTU4Ij48L2E+RGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlJ3MgcmVsb2NhdGlvbiBzZWN0aW9uLCBpZiBpdCBoYXMgb25lLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXU8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXVud2luZDwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LXVud2luZC1pbmZvcm1hdGlvbi0xNTkiPjwvYT5EaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUncyB1bndpbmQgc2VjdGlvbiwgaWYgaXQgaGFzIG9uZS4gIE9ubHkKK3RoZSB1bndpbmQgc2VjdGlvbnMgZm9yIElBNjQgRUxGIGZpbGVzLCBhcyB3ZWxsIGFzIEFSTSB1bndpbmQgdGFibGVzCisoPGNvZGU+LkFSTS5leGlkeDwvY29kZT4gLyA8Y29kZT4uQVJNLmV4dGFiPC9jb2RlPikgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZHluYW1pYzwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LUVMRi1keW5hbWljLXNlY3Rpb24taW5mb3JtYXRpb24tMTYwIj48L2E+RGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlJ3MgZHluYW1pYyBzZWN0aW9uLCBpZiBpdCBoYXMgb25lLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVY8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcnNpb24taW5mbzwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LUVMRi12ZXJzaW9uLXNlY3Rpb25zLWluZm9ybWF0aW9ucy0xNjEiPjwvYT5EaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIHZlcnNpb24gc2VjdGlvbnMgaW4gdGhlIGZpbGUsIGl0IHRoZXkKK2V4aXN0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUE8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWFyY2gtc3BlY2lmaWM8L3NwYW4+PC9zYW1wPjxkZD5EaXNwbGF5cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW5mb3JtYXRpb24gaW4gdGhlIGZpbGUsIGlmIHRoZXJlCitpcyBhbnkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdXNlLWR5bmFtaWM8L3NwYW4+PC9zYW1wPjxkZD5XaGVuIGRpc3BsYXlpbmcgc3ltYm9scywgdGhpcyBvcHRpb24gbWFrZXMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnJlYWRlbGY8L3NwYW4+PC9zYW1wPiB1c2UgdGhlCitzeW1ib2wgaGFzaCB0YWJsZXMgaW4gdGhlIGZpbGUncyBkeW5hbWljIHNlY3Rpb24sIHJhdGhlciB0aGFuIHRoZQorc3ltYm9sIHRhYmxlIHNlY3Rpb25zLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXggJmx0O251bWJlciBvciBuYW1lJmd0Ozwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taGV4LWR1bXA9Jmx0O251bWJlciBvciBuYW1lJmd0Ozwvc3Bhbj48L3NhbXA+PGRkPkRpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUgaW5kaWNhdGVkIHNlY3Rpb24gYXMgYSBoZXhhZGVjaW1hbCBieXRlcy4gCitBIG51bWJlciBpZGVudGlmaWVzIGEgcGFydGljdWxhciBzZWN0aW9uIGJ5IGluZGV4IGluIHRoZSBzZWN0aW9uIHRhYmxlOworYW55IG90aGVyIHN0cmluZyBpZGVudGlmaWVzIGFsbCBzZWN0aW9ucyB3aXRoIHRoYXQgbmFtZSBpbiB0aGUgb2JqZWN0IGZpbGUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tUiAmbHQ7bnVtYmVyIG9yIG5hbWUmZ3Q7PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1yZWxvY2F0ZWQtZHVtcD0mbHQ7bnVtYmVyIG9yIG5hbWUmZ3Q7PC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmRpY2F0ZWQgc2VjdGlvbiBhcyBhIGhleGFkZWNpbWFsCitieXRlcy4gIEEgbnVtYmVyIGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyIHNlY3Rpb24gYnkgaW5kZXggaW4gdGhlCitzZWN0aW9uIHRhYmxlOyBhbnkgb3RoZXIgc3RyaW5nIGlkZW50aWZpZXMgYWxsIHNlY3Rpb25zIHdpdGggdGhhdCBuYW1lCitpbiB0aGUgb2JqZWN0IGZpbGUuICBUaGUgY29udGVudHMgb2YgdGhlIHNlY3Rpb24gd2lsbCBiZSByZWxvY2F0ZWQKK2JlZm9yZSB0aGV5IGFyZSBkaXNwbGF5ZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tcCAmbHQ7bnVtYmVyIG9yIG5hbWUmZ3Q7PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zdHJpbmctZHVtcD0mbHQ7bnVtYmVyIG9yIG5hbWUmZ3Q7PC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmRpY2F0ZWQgc2VjdGlvbiBhcyBwcmludGFibGUgc3RyaW5ncy4gCitBIG51bWJlciBpZGVudGlmaWVzIGEgcGFydGljdWxhciBzZWN0aW9uIGJ5IGluZGV4IGluIHRoZSBzZWN0aW9uIHRhYmxlOworYW55IG90aGVyIHN0cmluZyBpZGVudGlmaWVzIGFsbCBzZWN0aW9ucyB3aXRoIHRoYXQgbmFtZSBpbiB0aGUgb2JqZWN0IGZpbGUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tYzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYXJjaGl2ZS1pbmRleDwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LUFyY2hpdmUtZmlsZS1zeW1ib2wtaW5kZXgtaW5mb3JtYXRpb24tMTYyIj48L2E+RGlzcGxheXMgdGhlIGZpbGUgc3ltYm9sIGluZGV4IGluZm9tYXRpb24gY29udGFpbmVkIGluIHRoZSBoZWFkZXIgcGFydAorb2YgYmluYXJ5IGFyY2hpdmVzLiAgUGVyZm9ybXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPnQ8L3NwYW4+PC9zYW1wPgorY29tbWFuZCB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXI8L3NwYW4+PC9zYW1wPiwgYnV0IHdpdGhvdXQgdXNpbmcgdGhlIEJGRCBsaWJyYXJ5LiAgU2VlIDxhIGhyZWY9ImFyLmh0bWwjYXIiPmFyPC9hPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi13W2xMaWFwcm1mRnNvUnRdPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kZWJ1Zy1kdW1wWz1yYXdsaW5lLD1kZWNvZGVkbGluZSw9aW5mbyw9YWJicmV2LD1wdWJuYW1lcyw9YXJhbmdlcyw9bWFjcm8sPWZyYW1lcyw9ZnJhbWVzLWludGVycCw9c3RyLD1sb2MsPVJhbmdlcyw9cHVidHlwZXMsPXRyYWNlX2luZm8sPXRyYWNlX2FiYnJldiw9dHJhY2VfYXJhbmdlcyw9Z2RiX2luZGV4XTwvc3Bhbj48L3NhbXA+PGRkPkRpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUgZGVidWcgc2VjdGlvbnMgaW4gdGhlIGZpbGUsIGlmIGFueSBhcmUKK3ByZXNlbnQuICBJZiBvbmUgb2YgdGhlIG9wdGlvbmFsIGxldHRlcnMgb3Igd29yZHMgZm9sbG93cyB0aGUgc3dpdGNoCit0aGVuIG9ubHkgZGF0YSBmb3VuZCBpbiB0aG9zZSBzcGVjaWZpYyBzZWN0aW9ucyB3aWxsIGJlIGR1bXBlZC4KKworICAgICA8cD5Ob3RlIHRoYXQgdGhlcmUgaXMgbm8gc2luZ2xlIGxldHRlciBvcHRpb24gdG8gZGlzcGxheSB0aGUgY29udGVudCBvZgordHJhY2Ugc2VjdGlvbnMgb3IgLmdkYl9pbmRleC4KKworICAgICA8cD5Ob3RlOiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+PWRlY29kZWRsaW5lPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHdpbGwgZGlzcGxheSB0aGUgaW50ZXJwcmV0ZWQKK2NvbnRlbnRzIG9mIGEgLmRlYnVnX2xpbmUgc2VjdGlvbiB3aGVyZWFzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj49cmF3bGluZTwvc3Bhbj48L3NhbXA+IG9wdGlvbgorZHVtcHMgdGhlIGNvbnRlbnRzIGluIGEgcmF3IGZvcm1hdC4KKworICAgICA8cD5Ob3RlOiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+PWZyYW1lcy1pbnRlcnA8L3NwYW4+PC9zYW1wPiBvcHRpb24gd2lsbCBkaXNwbGF5IHRoZSBpbnRlcnByZXRlZAorY29udGVudHMgb2YgYSAuZGVidWdfZnJhbWUgc2VjdGlvbiB3aGVyZWFzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj49ZnJhbWVzPC9zcGFuPjwvc2FtcD4gb3B0aW9uCitkdW1wcyB0aGUgY29udGVudHMgaW4gYSByYXcgZm9ybWF0LgorCisgICAgIDxwPk5vdGU6IHRoZSBvdXRwdXQgZnJvbSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+PWluZm88L3NwYW4+PC9zYW1wPiBvcHRpb24gY2FuIGFsc28gYmUgYWZmZWN0ZWQKK2J5IHRoZSBvcHRpb25zIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZHdhcmYtZGVwdGg8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kd2FyZi1zdGFydDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kd2FyZi1kZXB0aD08L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPjxkZD5MaW1pdCB0aGUgZHVtcCBvZiB0aGUgPGNvZGU+LmRlYnVnX2luZm88L2NvZGU+IHNlY3Rpb24gdG8gPHZhcj5uPC92YXI+IGNoaWxkcmVuLiAKK1RoaXMgaXMgb25seSB1c2VmdWwgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRlYnVnLWR1bXA9aW5mbzwvc3Bhbj48L3NhbXA+LiAgVGhlIGRlZmF1bHQgaXMKK3RvIHByaW50IGFsbCBESUVzOyB0aGUgc3BlY2lhbCB2YWx1ZSAwIGZvciA8dmFyPm48L3Zhcj4gd2lsbCBhbHNvIGhhdmUgdGhpcworZWZmZWN0LgorCisgICAgIDxwPldpdGggYSBub24temVybyB2YWx1ZSBmb3IgPHZhcj5uPC92YXI+LCBESUVzIGF0IG9yIGRlZXBlciB0aGFuIDx2YXI+bjwvdmFyPgorbGV2ZWxzIHdpbGwgbm90IGJlIHByaW50ZWQuICBUaGUgcmFuZ2UgZm9yIDx2YXI+bjwvdmFyPiBpcyB6ZXJvLWJhc2VkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kd2FyZi1zdGFydD08L3NwYW4+PHZhcj5uPC92YXI+PC9zYW1wPjxkZD5QcmludCBvbmx5IERJRXMgYmVnaW5uaW5nIHdpdGggdGhlIERJRSBudW1iZXJlZCA8dmFyPm48L3Zhcj4uICBUaGlzIGlzIG9ubHkKK3VzZWZ1bCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZGVidWctZHVtcD1pbmZvPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+SWYgc3BlY2lmaWVkLCB0aGlzIG9wdGlvbiB3aWxsIHN1cHByZXNzIHByaW50aW5nIG9mIGFueSBoZWFkZXIKK2luZm9ybWF0aW9uIGFuZCBhbGwgRElFcyBiZWZvcmUgdGhlIERJRSBudW1iZXJlZCA8dmFyPm48L3Zhcj4uICBPbmx5CitzaWJsaW5ncyBhbmQgY2hpbGRyZW4gb2YgdGhlIHNwZWNpZmllZCBESUUgd2lsbCBiZSBwcmludGVkLgorCisgICAgIDxwPlRoaXMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWR3YXJmLWRlcHRoPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tSTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taGlzdG9ncmFtPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSBhIGhpc3RvZ3JhbSBvZiBidWNrZXQgbGlzdCBsZW5ndGhzIHdoZW4gZGlzcGxheWluZyB0aGUgY29udGVudHMKK29mIHRoZSBzeW1ib2wgdGFibGVzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXY8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcnNpb248L3NwYW4+PC9zYW1wPjxkZD5EaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBvZiByZWFkZWxmLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVc8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXdpZGU8L3NwYW4+PC9zYW1wPjxkZD5Eb24ndCBicmVhayBvdXRwdXQgbGluZXMgdG8gZml0IGludG8gODAgY29sdW1ucy4gQnkgZGVmYXVsdAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnJlYWRlbGY8L3NwYW4+PC9zYW1wPiBicmVha3Mgc2VjdGlvbiBoZWFkZXIgYW5kIHNlZ21lbnQgbGlzdGluZyBsaW5lcyBmb3IKKzY0LWJpdCBFTEYgZmlsZXMsIHNvIHRoYXQgdGhleSBmaXQgaW50byA4MCBjb2x1bW5zLiBUaGlzIG9wdGlvbiBjYXVzZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5yZWFkZWxmPC9zcGFuPjwvc2FtcD4gdG8gcHJpbnQgZWFjaCBzZWN0aW9uIGhlYWRlciByZXNwLiBlYWNoIHNlZ21lbnQgb25lIGEKK3NpbmdsZSBsaW5lLCB3aGljaCBpcyBmYXIgbW9yZSByZWFkYWJsZSBvbiB0ZXJtaW5hbHMgd2lkZXIgdGhhbiA4MCBjb2x1bW5zLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUg8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWhlbHA8L3NwYW4+PC9zYW1wPjxkZD5EaXNwbGF5IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyB1bmRlcnN0b29kIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5yZWFkZWxmPC9zcGFuPjwvc2FtcD4uCisKKyAgIDwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3NpemUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3NpemUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWI1ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvc2l6ZS5odG1sCkBAIC0wLDAgKzEsMTM2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zaXplIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InJhbmxpYi5odG1sI3JhbmxpYiIgdGl0bGU9InJhbmxpYiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cmluZ3MuaHRtbCNzdHJpbmdzIiB0aXRsZT0ic3RyaW5ncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic2l6ZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJpbmdzLmh0bWwjc3RyaW5ncyI+c3RyaW5nczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InJhbmxpYi5odG1sI3JhbmxpYiI+cmFubGliPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjYgc2l6ZTwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LXNpemUtMTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbi1zaXplcy0xMTgiPjwvYT4KKzwhLS0gbWFuIHRpdGxlIHNpemUgbGlzdCBzZWN0aW9uIHNpemVzIGFuZCB0b3RhbCBzaXplLiAtLT4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDwhLS0gbWFuIGJlZ2luIFNZTk9QU0lTIHNpemUgLS0+CisgICAgIHNpemUgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1BPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUI8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZvcm1hdD08L3NwYW4+PC9zYW1wPjx2YXI+Y29tcGF0aWJpbGl0eTwvdmFyPl0KKyAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW88L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4teDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcmFkaXg9PC9zcGFuPjwvc2FtcD48dmFyPm51bWJlcjwvdmFyPl0KKyAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jb21tb248L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXQ8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRvdGFsczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRhcmdldD08L3NwYW4+PC9zYW1wPjx2YXI+YmZkbmFtZTwvdmFyPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1WPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgWzx2YXI+b2JqZmlsZTwvdmFyPi4uLl0KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiBzaXplIC0tPgorICAgPHA+VGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+c2l6ZTwvc3Bhbj48L3NhbXA+IHV0aWxpdHkgbGlzdHMgdGhlIHNlY3Rpb24gc2l6ZXMmbWRhc2g7YW5kIHRoZSB0b3RhbAorc2l6ZSZtZGFzaDtmb3IgZWFjaCBvZiB0aGUgb2JqZWN0IG9yIGFyY2hpdmUgZmlsZXMgPHZhcj5vYmpmaWxlPC92YXI+IGluIGl0cworYXJndW1lbnQgbGlzdC4gIEJ5IGRlZmF1bHQsIG9uZSBsaW5lIG9mIG91dHB1dCBpcyBnZW5lcmF0ZWQgZm9yIGVhY2gKK29iamVjdCBmaWxlIG9yIGVhY2ggbW9kdWxlIGluIGFuIGFyY2hpdmUuCisKKyAgIDxwPjx2YXI+b2JqZmlsZTwvdmFyPjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gYXJlIHRoZSBvYmplY3QgZmlsZXMgdG8gYmUgZXhhbWluZWQuIAorSWYgbm9uZSBhcmUgc3BlY2lmaWVkLCB0aGUgZmlsZSA8Y29kZT5hLm91dDwvY29kZT4gd2lsbCBiZSB1c2VkLgorCis8IS0tIG1hbiBlbmQgLS0+Cis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIHNpemUgLS0+CisgICA8cD5UaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCisgICAgIDxkbD4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tQTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1CPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1mb3JtYXQ9PC9zcGFuPjx2YXI+Y29tcGF0aWJpbGl0eTwvdmFyPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2JzaXplXzAwN2QtZGlzcGxheS1mb3JtYXQtMTE5Ij48L2E+VXNpbmcgb25lIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gY2hvb3NlIHdoZXRoZXIgdGhlIG91dHB1dCBmcm9tIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPgorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnNpemU8L3NwYW4+PC9zYW1wPiByZXNlbWJsZXMgb3V0cHV0IGZyb20gU3lzdGVtIFYgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnNpemU8L3NwYW4+PC9zYW1wPiAodXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUE8L3NwYW4+PC9zYW1wPiwKK29yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZm9ybWF0PXN5c3Y8L3NwYW4+PC9zYW1wPiksIG9yIEJlcmtlbGV5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zaXplPC9zcGFuPjwvc2FtcD4gKHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1CPC9zcGFuPjwvc2FtcD4sIG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZvcm1hdD1iZXJrZWxleTwvc3Bhbj48L3NhbXA+KS4gIFRoZSBkZWZhdWx0IGlzIHRoZSBvbmUtbGluZSBmb3JtYXQgc2ltaWxhciB0bworQmVya2VsZXkncy4gCis8IS0tIEJvbnVzIGZvciBkb2Mtc291cmNlIHJlYWRlcnM6IHlvdSBjYW4gYWxzbyBzYXkgLWZvcm1hdD1zdHJhbmdlIChvciAtLT4KKzwhLS0gYW55dGhpbmcgZWxzZSB0aGF0IHN0YXJ0cyB3aXRoICdzJykgZm9yIHN5c3YsIGFuZCAtZm9ybWF0PWJvcmluZyAob3IgLS0+Cis8IS0tIGFueXRoaW5nIGVsc2UgdGhhdCBzdGFydHMgd2l0aCAnYicpIGZvciBCZXJrZWxleS4gLS0+CisKKyAgICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoZSBCZXJrZWxleSAoZGVmYXVsdCkgZm9ybWF0IG9mIG91dHB1dCBmcm9tCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+c2l6ZTwvc3Bhbj48L3NhbXA+OgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAkIHNpemUgLS1mb3JtYXQ9QmVya2VsZXkgcmFubGliIHNpemUKKyAgICAgICAgICB0ZXh0ICAgIGRhdGEgICAgYnNzICAgICBkZWMgICAgIGhleCAgICAgZmlsZW5hbWUKKyAgICAgICAgICAyOTQ4ODAgIDgxOTIwICAgMTE1OTIgICAzODgzOTIgIDVlZDI4ICAgcmFubGliCisgICAgICAgICAgMjk0ODgwICA4MTkyMCAgIDExODg4ICAgMzg4Njg4ICA1ZWU1MCAgIHNpemUKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgaXMgdGhlIHNhbWUgZGF0YSwgYnV0IGRpc3BsYXllZCBjbG9zZXIgdG8gU3lzdGVtIFYgY29udmVudGlvbnM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgJCBzaXplIC0tZm9ybWF0PVN5c1YgcmFubGliIHNpemUKKyAgICAgICAgICByYW5saWIgIDoKKyAgICAgICAgICBzZWN0aW9uICAgICAgICAgc2l6ZSAgICAgICAgIGFkZHIKKyAgICAgICAgICAudGV4dCAgICAgICAgIDI5NDg4MCAgICAgICAgIDgxOTIKKyAgICAgICAgICAuZGF0YSAgICAgICAgICA4MTkyMCAgICAgICAzMDMxMDQKKyAgICAgICAgICAuYnNzICAgICAgICAgICAxMTU5MiAgICAgICAzODUwMjQKKyAgICAgICAgICBUb3RhbCAgICAgICAgIDM4ODM5MgorICAgICAgICAgIAorICAgICAgICAgIAorICAgICAgICAgIHNpemUgIDoKKyAgICAgICAgICBzZWN0aW9uICAgICAgICAgc2l6ZSAgICAgICAgIGFkZHIKKyAgICAgICAgICAudGV4dCAgICAgICAgIDI5NDg4MCAgICAgICAgIDgxOTIKKyAgICAgICAgICAuZGF0YSAgICAgICAgICA4MTkyMCAgICAgICAzMDMxMDQKKyAgICAgICAgICAuYnNzICAgICAgICAgICAxMTg4OCAgICAgICAzODUwMjQKKyAgICAgICAgICBUb3RhbCAgICAgICAgIDM4ODY4OAorPC9wcmU+CisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+U2hvdyBhIHN1bW1hcnkgb2YgYWNjZXB0YWJsZSBhcmd1bWVudHMgYW5kIG9wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1vPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXg8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXJhZGl4PTwvc3Bhbj48dmFyPm51bWJlcjwvdmFyPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2JzaXplXzAwN2QtbnVtYmVyLWZvcm1hdC0xMjAiPjwvYT48YSBuYW1lPSJpbmRleC1yYWRpeC1mb3Itc2VjdGlvbi1zaXplcy0xMjEiPjwvYT5Vc2luZyBvbmUgb2YgdGhlc2Ugb3B0aW9ucywgeW91IGNhbiBjb250cm9sIHdoZXRoZXIgdGhlIHNpemUgb2YgZWFjaAorc2VjdGlvbiBpcyBnaXZlbiBpbiBkZWNpbWFsICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZDwvc3Bhbj48L3NhbXA+LCBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJhZGl4PTEwPC9zcGFuPjwvc2FtcD4pOyBvY3RhbAorKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vPC9zcGFuPjwvc2FtcD4sIG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcmFkaXg9ODwvc3Bhbj48L3NhbXA+KTsgb3IgaGV4YWRlY2ltYWwgKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14PC9zcGFuPjwvc2FtcD4sIG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJhZGl4PTE2PC9zcGFuPjwvc2FtcD4pLiAgSW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1yYWRpeD08L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48L3NhbXA+LCBvbmx5IHRoZSB0aHJlZQordmFsdWVzICg4LCAxMCwgMTYpIGFyZSBzdXBwb3J0ZWQuICBUaGUgdG90YWwgc2l6ZSBpcyBhbHdheXMgZ2l2ZW4gaW4gdHdvCityYWRpY2VzOyBkZWNpbWFsIGFuZCBoZXhhZGVjaW1hbCBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWQ8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4teDwvc3Bhbj48L3NhbXA+IG91dHB1dCwgb3IKK29jdGFsIGFuZCBoZXhhZGVjaW1hbCBpZiB5b3UncmUgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW88L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tY29tbW9uPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnQgdG90YWwgc2l6ZSBvZiBjb21tb24gc3ltYm9scyBpbiBlYWNoIGZpbGUuICBXaGVuIHVzaW5nIEJlcmtlbGV5Citmb3JtYXQgdGhlc2UgYXJlIGluY2x1ZGVkIGluIHRoZSBic3Mgc2l6ZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi10PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS10b3RhbHM8L3NwYW4+PC9zYW1wPjxkZD5TaG93IHRvdGFscyBvZiBhbGwgb2JqZWN0cyBsaXN0ZWQgKEJlcmtlbGV5IGZvcm1hdCBsaXN0aW5nIG1vZGUgb25seSkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXRhcmdldD08L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1vYmplY3QtY29kZS1mb3JtYXQtMTIyIj48L2E+U3BlY2lmeSB0aGF0IHRoZSBvYmplY3QtY29kZSBmb3JtYXQgZm9yIDx2YXI+b2JqZmlsZTwvdmFyPiBpcworPHZhcj5iZmRuYW1lPC92YXI+LiAgVGhpcyBvcHRpb24gbWF5IG5vdCBiZSBuZWNlc3Nhcnk7IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zaXplPC9zcGFuPjwvc2FtcD4gY2FuCithdXRvbWF0aWNhbGx5IHJlY29nbml6ZSBtYW55IGZvcm1hdHMuIAorU2VlIDxhIGhyZWY9IlRhcmdldC1TZWxlY3Rpb24uaHRtbCNUYXJnZXQtU2VsZWN0aW9uIj5UYXJnZXQgU2VsZWN0aW9uPC9hPiwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdmVyc2lvbjwvc3Bhbj48L3NhbXA+PGRkPkRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zaXplPC9zcGFuPjwvc2FtcD4uIAorPC9kbD4KKworPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvc3RyaW5ncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvc3RyaW5ncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMGY3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvYmludXRpbHMuaHRtbC9zdHJpbmdzLmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cmluZ3MgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic2l6ZS5odG1sI3NpemUiIHRpdGxlPSJzaXplIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RyaXAuaHRtbCNzdHJpcCIgdGl0bGU9InN0cmlwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJpbmdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cmlwLmh0bWwjc3RyaXAiPnN0cmlwPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic2l6ZS5odG1sI3NpemUiPnNpemU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NyBzdHJpbmdzPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RyaW5ncy0xMjMiPjwvYT48YSBuYW1lPSJpbmRleC1saXN0aW5ncy1zdHJpbmdzLTEyNCI+PC9hPjxhIG5hbWU9ImluZGV4LXByaW50aW5nLXN0cmluZ3MtMTI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nc18wMDJjLXByaW50aW5nLTEyNiI+PC9hPgorPCEtLSBtYW4gdGl0bGUgc3RyaW5ncyBwcmludCB0aGUgc3RyaW5ncyBvZiBwcmludGFibGUgY2hhcmFjdGVycyBpbiBmaWxlcy4gLS0+CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8IS0tIG1hbiBiZWdpbiBTWU5PUFNJUyBzdHJpbmdzIC0tPgorICAgICBzdHJpbmdzIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYWZvdlY8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi08L3NwYW4+PC9zYW1wPjx2YXI+bWluLWxlbjwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW48L3NwYW4+PC9zYW1wPiA8dmFyPm1pbi1sZW48L3Zhcj5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWJ5dGVzPTwvc3Bhbj48L3NhbXA+PHZhcj5taW4tbGVuPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdDwvc3Bhbj48L3NhbXA+IDx2YXI+cmFkaXg8L3Zhcj5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJhZGl4PTwvc3Bhbj48L3NhbXA+PHZhcj5yYWRpeDwvdmFyPl0KKyAgICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWU8L3NwYW4+PC9zYW1wPiA8dmFyPmVuY29kaW5nPC92YXI+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1lbmNvZGluZz08L3NwYW4+PC9zYW1wPjx2YXI+ZW5jb2Rpbmc8L3Zhcj5dCisgICAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi08L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYWxsPC9zcGFuPjwvc2FtcD5dIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXByaW50LWZpbGUtbmFtZTwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVDwvc3Bhbj48L3NhbXA+IDx2YXI+YmZkbmFtZTwvdmFyPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdGFyZ2V0PTwvc3Bhbj48L3NhbXA+PHZhcj5iZmRuYW1lPC92YXI+XQorICAgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdmVyc2lvbjwvc3Bhbj48L3NhbXA+XSA8dmFyPmZpbGU8L3Zhcj4uLi4KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiBzdHJpbmdzIC0tPgorICAgPHA+Rm9yIGVhY2ggPHZhcj5maWxlPC92YXI+IGdpdmVuLCA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnN0cmluZ3M8L3NwYW4+PC9zYW1wPiBwcmludHMgdGhlIHByaW50YWJsZQorY2hhcmFjdGVyIHNlcXVlbmNlcyB0aGF0IGFyZSBhdCBsZWFzdCA0IGNoYXJhY3RlcnMgbG9uZyAob3IgdGhlIG51bWJlcgorZ2l2ZW4gd2l0aCB0aGUgb3B0aW9ucyBiZWxvdykgYW5kIGFyZSBmb2xsb3dlZCBieSBhbiB1bnByaW50YWJsZQorY2hhcmFjdGVyLiAgQnkgZGVmYXVsdCwgaXQgb25seSBwcmludHMgdGhlIHN0cmluZ3MgZnJvbSB0aGUgaW5pdGlhbGl6ZWQKK2FuZCBsb2FkZWQgc2VjdGlvbnMgb2Ygb2JqZWN0IGZpbGVzOyBmb3Igb3RoZXIgdHlwZXMgb2YgZmlsZXMsIGl0IHByaW50cwordGhlIHN0cmluZ3MgZnJvbSB0aGUgd2hvbGUgZmlsZS4KKworICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnN0cmluZ3M8L3NwYW4+PC9zYW1wPiBpcyBtYWlubHkgdXNlZnVsIGZvciBkZXRlcm1pbmluZyB0aGUgY29udGVudHMgb2Ygbm9uLXRleHQKK2ZpbGVzLgorCis8IS0tIG1hbiBlbmQgLS0+Cis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIHN0cmluZ3MgLS0+CisgICAgIDxkbD4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tYTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYWxsPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LTwvc3Bhbj48L3NhbXA+PGRkPkRvIG5vdCBzY2FuIG9ubHkgdGhlIGluaXRpYWxpemVkIGFuZCBsb2FkZWQgc2VjdGlvbnMgb2Ygb2JqZWN0IGZpbGVzOworc2NhbiB0aGUgd2hvbGUgZmlsZXMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tcHJpbnQtZmlsZS1uYW1lPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnQgdGhlIG5hbWUgb2YgdGhlIGZpbGUgYmVmb3JlIGVhY2ggc3RyaW5nLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBwcm9ncmFtIHVzYWdlIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tPC9zcGFuPjx2YXI+bWluLWxlbjwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LW4gPC9zcGFuPjx2YXI+bWluLWxlbjwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1ieXRlcz08L3NwYW4+PHZhcj5taW4tbGVuPC92YXI+PC9zYW1wPjxkZD5QcmludCBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCBsZWFzdCA8dmFyPm1pbi1sZW48L3Zhcj4gY2hhcmFjdGVycworbG9uZywgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCA0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LW88L3NwYW4+PC9zYW1wPjxkZD5MaWtlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXQgbzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFNvbWUgb3RoZXIgdmVyc2lvbnMgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnN0cmluZ3M8L3NwYW4+PC9zYW1wPiBoYXZlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vPC9zcGFuPjwvc2FtcD4KK2FjdCBsaWtlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXQgZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkLiAgU2luY2Ugd2UgY2FuIG5vdCBiZSBjb21wYXRpYmxlIHdpdGggYm90aAord2F5cywgd2Ugc2ltcGx5IGNob3NlIG9uZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi10IDwvc3Bhbj48dmFyPnJhZGl4PC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXJhZGl4PTwvc3Bhbj48dmFyPnJhZGl4PC92YXI+PC9zYW1wPjxkZD5QcmludCB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZSBiZWZvcmUgZWFjaCBzdHJpbmcuICBUaGUgc2luZ2xlCitjaGFyYWN0ZXIgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSByYWRpeCBvZiB0aGUgb2Zmc2V0Jm1kYXNoOyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IKK29jdGFsLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPng8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGhleGFkZWNpbWFsLCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGRlY2ltYWwuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZSA8L3NwYW4+PHZhcj5lbmNvZGluZzwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1lbmNvZGluZz08L3NwYW4+PHZhcj5lbmNvZGluZzwvdmFyPjwvc2FtcD48ZGQ+U2VsZWN0IHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIHN0cmluZ3MgdGhhdCBhcmUgdG8gYmUgZm91bmQuIAorUG9zc2libGUgdmFsdWVzIGZvciA8dmFyPmVuY29kaW5nPC92YXI+IGFyZTogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zPC9zcGFuPjwvc2FtcD4mcnNxdW87ID0gc2luZ2xlLTctYml0LWJ5dGUKK2NoYXJhY3RlcnMgKEFTQ0lJLCBJU08gODg1OSwgZXRjLiwgZGVmYXVsdCksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Uzwvc3Bhbj48L3NhbXA+JnJzcXVvOyA9CitzaW5nbGUtOC1iaXQtYnl0ZSBjaGFyYWN0ZXJzLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPSAxNi1iaXQgYmlnZW5kaWFuLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPQorMTYtYml0IGxpdHRsZWVuZGlhbiwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5CPC9zcGFuPjwvc2FtcD4mcnNxdW87ID0gMzItYml0IGJpZ2VuZGlhbiwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87ID0gMzItYml0CitsaXR0bGVlbmRpYW4uICBVc2VmdWwgZm9yIGZpbmRpbmcgd2lkZSBjaGFyYWN0ZXIgc3RyaW5ncy4gKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bDwvc3Bhbj48L3NhbXA+JnJzcXVvOworYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBseSB0bywgZm9yIGV4YW1wbGUsIFVuaWNvZGUgVVRGLTE2L1VDUy0yIGVuY29kaW5ncykuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVCA8L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXRhcmdldD08L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1vYmplY3QtY29kZS1mb3JtYXQtMTI3Ij48L2E+U3BlY2lmeSBhbiBvYmplY3QgY29kZSBmb3JtYXQgb3RoZXIgdGhhbiB5b3VyIHN5c3RlbSdzIGRlZmF1bHQgZm9ybWF0LiAKK1NlZSA8YSBocmVmPSJUYXJnZXQtU2VsZWN0aW9uLmh0bWwjVGFyZ2V0LVNlbGVjdGlvbiI+VGFyZ2V0IFNlbGVjdGlvbjwvYT4sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXY8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdmVyc2lvbjwvc3Bhbj48L3NhbXA+PGRkPlByaW50IHRoZSBwcm9ncmFtIHZlcnNpb24gbnVtYmVyIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuIAorPC9kbD4KKworPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvc3RyaXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3N0cmlwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyODAwOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3N0cmlwLmh0bWwKQEAgLTAsMCArMSwyMTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cmlwIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cmluZ3MuaHRtbCNzdHJpbmdzIiB0aXRsZT0ic3RyaW5ncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCIgdGl0bGU9ImMrK2ZpbHQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cmlwIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImNfMDAyYl8wMDJiZmlsdC5odG1sI2NfMDAyYl8wMDJiZmlsdCI+YysrZmlsdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cmluZ3MuaHRtbCNzdHJpbmdzIj5zdHJpbmdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjggc3RyaXA8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJpcC0xMjgiPjwvYT48YSBuYW1lPSJpbmRleC1yZW1vdmluZy1zeW1ib2xzLTEyOSI+PC9hPjxhIG5hbWU9ImluZGV4LWRpc2NhcmRpbmctc3ltYm9scy0xMzAiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2xzXzAwMmMtZGlzY2FyZGluZy0xMzEiPjwvYT4KKzwhLS0gbWFuIHRpdGxlIHN0cmlwIERpc2NhcmQgc3ltYm9scyBmcm9tIG9iamVjdCBmaWxlcy4gLS0+CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8IS0tIG1hbiBiZWdpbiBTWU5PUFNJUyBzdHJpcCAtLT4KKyAgICAgc3RyaXAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1GPC9zcGFuPjwvc2FtcD4gPHZhcj5iZmRuYW1lPC92YXI+IHw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRhcmdldD08L3NwYW4+PC9zYW1wPjx2YXI+YmZkbmFtZTwvdmFyPl0KKyAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gPHZhcj5iZmRuYW1lPC92YXI+IHw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWlucHV0LXRhcmdldD08L3NwYW4+PC9zYW1wPjx2YXI+YmZkbmFtZTwvdmFyPl0KKyAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gPHZhcj5iZmRuYW1lPC92YXI+IHw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW91dHB1dC10YXJnZXQ9PC9zcGFuPjwvc2FtcD48dmFyPmJmZG5hbWU8L3Zhcj5dCisgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tczwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RyaXAtYWxsPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWQ8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0cmlwLWRlYnVnPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0cmlwLWR3bzwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUs8L3NwYW4+PC9zYW1wPiA8dmFyPnN5bWJvbG5hbWU8L3Zhcj4gfDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0ta2VlcC1zeW1ib2w9PC9zcGFuPjwvc2FtcD48dmFyPnN5bWJvbG5hbWU8L3Zhcj5dCisgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTjwvc3Bhbj48L3NhbXA+IDx2YXI+c3ltYm9sbmFtZTwvdmFyPiB8PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpcC1zeW1ib2w9PC9zcGFuPjwvc2FtcD48dmFyPnN5bWJvbG5hbWU8L3Zhcj5dCisgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdzwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2lsZGNhcmQ8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14PC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kaXNjYXJkLWFsbDwvc3Bhbj48L3NhbXA+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVg8L3NwYW4+PC9zYW1wPiB8PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kaXNjYXJkLWxvY2Fsczwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVI8L3NwYW4+PC9zYW1wPiA8dmFyPnNlY3Rpb25uYW1lPC92YXI+IHw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlbW92ZS1zZWN0aW9uPTwvc3Bhbj48L3NhbXA+PHZhcj5zZWN0aW9ubmFtZTwvdmFyPl0KKyAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vPC9zcGFuPjwvc2FtcD4gPHZhcj5maWxlPC92YXI+XSBbPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXA8L3NwYW4+PC9zYW1wPnw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXByZXNlcnZlLWRhdGVzPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+fDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1VPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kaXNhYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0ta2VlcC1maWxlLXN5bWJvbHM8L3NwYW4+PC9zYW1wPl0KKyAgICAgICAgICAgWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tb25seS1rZWVwLWRlYnVnPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdjwvc3Bhbj48L3NhbXA+IHw8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXZlcmJvc2U8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1WPC9zcGFuPjwvc2FtcD58PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD5dCisgICAgICAgICAgIFs8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L3NwYW4+PC9zYW1wPl0gWzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taW5mbzwvc3Bhbj48L3NhbXA+XQorICAgICAgICAgICA8dmFyPm9iamZpbGU8L3Zhcj4uLi4KKyAgICAgPCEtLSBtYW4gZW5kIC0tPgorPC9wcmU+CisgICA8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiBzdHJpcCAtLT4KKyAgIDxwPjxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+c3RyaXA8L3NwYW4+PC9zYW1wPiBkaXNjYXJkcyBhbGwgc3ltYm9scyBmcm9tIG9iamVjdCBmaWxlcworPHZhcj5vYmpmaWxlPC92YXI+LiAgVGhlIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIG1heSBpbmNsdWRlIGFyY2hpdmVzLiAKK0F0IGxlYXN0IG9uZSBvYmplY3QgZmlsZSBtdXN0IGJlIGdpdmVuLgorCisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+c3RyaXA8L3NwYW4+PC9zYW1wPiBtb2RpZmllcyB0aGUgZmlsZXMgbmFtZWQgaW4gaXRzIGFyZ3VtZW50LAorcmF0aGVyIHRoYW4gd3JpdGluZyBtb2RpZmllZCBjb3BpZXMgdW5kZXIgZGlmZmVyZW50IG5hbWVzLgorCis8IS0tIG1hbiBlbmQgLS0+Cis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIHN0cmlwIC0tPgorICAgICA8ZGw+Cis8ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUYgPC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS10YXJnZXQ9PC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZGQ+VHJlYXQgdGhlIG9yaWdpbmFsIDx2YXI+b2JqZmlsZTwvdmFyPiBhcyBhIGZpbGUgd2l0aCB0aGUgb2JqZWN0Citjb2RlIGZvcm1hdCA8dmFyPmJmZG5hbWU8L3Zhcj4sIGFuZCByZXdyaXRlIGl0IGluIHRoZSBzYW1lIGZvcm1hdC4gCitTZWUgPGEgaHJlZj0iVGFyZ2V0LVNlbGVjdGlvbi5odG1sI1RhcmdldC1TZWxlY3Rpb24iPlRhcmdldCBTZWxlY3Rpb248L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taGVscDwvc3Bhbj48L3NhbXA+PGRkPlNob3cgYSBzdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zdHJpcDwvc3Bhbj48L3NhbXA+IGFuZCBleGl0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1pbmZvPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheSBhIGxpc3Qgc2hvd2luZyBhbGwgYXJjaGl0ZWN0dXJlcyBhbmQgb2JqZWN0IGZvcm1hdHMgYXZhaWxhYmxlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUkgPC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1pbnB1dC10YXJnZXQ9PC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZGQ+VHJlYXQgdGhlIG9yaWdpbmFsIDx2YXI+b2JqZmlsZTwvdmFyPiBhcyBhIGZpbGUgd2l0aCB0aGUgb2JqZWN0Citjb2RlIGZvcm1hdCA8dmFyPmJmZG5hbWU8L3Zhcj4uIAorU2VlIDxhIGhyZWY9IlRhcmdldC1TZWxlY3Rpb24uaHRtbCNUYXJnZXQtU2VsZWN0aW9uIj5UYXJnZXQgU2VsZWN0aW9uPC9hPiwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tTyA8L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW91dHB1dC10YXJnZXQ9PC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD48ZGQ+UmVwbGFjZSA8dmFyPm9iamZpbGU8L3Zhcj4gd2l0aCBhIGZpbGUgaW4gdGhlIG91dHB1dCBmb3JtYXQgPHZhcj5iZmRuYW1lPC92YXI+LiAKK1NlZSA8YSBocmVmPSJUYXJnZXQtU2VsZWN0aW9uLmh0bWwjVGFyZ2V0LVNlbGVjdGlvbiI+VGFyZ2V0IFNlbGVjdGlvbjwvYT4sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVIgPC9zcGFuPjx2YXI+c2VjdGlvbm5hbWU8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tcmVtb3ZlLXNlY3Rpb249PC9zcGFuPjx2YXI+c2VjdGlvbm5hbWU8L3Zhcj48L3NhbXA+PGRkPlJlbW92ZSBhbnkgc2VjdGlvbiBuYW1lZCA8dmFyPnNlY3Rpb25uYW1lPC92YXI+IGZyb20gdGhlIG91dHB1dCBmaWxlLiAgVGhpcworb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4gIE5vdGUgdGhhdCB1c2luZyB0aGlzIG9wdGlvbgoraW5hcHByb3ByaWF0ZWx5IG1heSBtYWtlIHRoZSBvdXRwdXQgZmlsZSB1bnVzYWJsZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1zPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1zdHJpcC1hbGw8L3NwYW4+PC9zYW1wPjxkZD5SZW1vdmUgYWxsIHN5bWJvbHMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tZzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1TPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWQ8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0cmlwLWRlYnVnPC9zcGFuPjwvc2FtcD48ZGQ+UmVtb3ZlIGRlYnVnZ2luZyBzeW1ib2xzIG9ubHkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0cmlwLWR3bzwvc3Bhbj48L3NhbXA+PGRkPlJlbW92ZSB0aGUgY29udGVudHMgb2YgYWxsIERXQVJGIC5kd28gc2VjdGlvbnMsIGxlYXZpbmcgdGhlCityZW1haW5pbmcgZGVidWdnaW5nIHNlY3Rpb25zIGFuZCBhbGwgc3ltYm9scyBpbnRhY3QuIAorU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIG9wdGlvbiBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm9iamNvcHk8L3NwYW4+PC9zYW1wPiBzZWN0aW9uCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tc3RyaXAtdW5uZWVkZWQ8L3NwYW4+PC9zYW1wPjxkZD5SZW1vdmUgYWxsIHN5bWJvbHMgdGhhdCBhcmUgbm90IG5lZWRlZCBmb3IgcmVsb2NhdGlvbiBwcm9jZXNzaW5nLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUsgPC9zcGFuPjx2YXI+c3ltYm9sbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1rZWVwLXN5bWJvbD08L3NwYW4+PHZhcj5zeW1ib2xuYW1lPC92YXI+PC9zYW1wPjxkZD5XaGVuIHN0cmlwcGluZyBzeW1ib2xzLCBrZWVwIHN5bWJvbCA8dmFyPnN5bWJvbG5hbWU8L3Zhcj4gZXZlbiBpZiBpdCB3b3VsZAorbm9ybWFsbHkgYmUgc3RyaXBwZWQuICBUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tTiA8L3NwYW4+PHZhcj5zeW1ib2xuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXN0cmlwLXN5bWJvbD08L3NwYW4+PHZhcj5zeW1ib2xuYW1lPC92YXI+PC9zYW1wPjxkZD5SZW1vdmUgc3ltYm9sIDx2YXI+c3ltYm9sbmFtZTwvdmFyPiBmcm9tIHRoZSBzb3VyY2UgZmlsZS4gVGhpcyBvcHRpb24gbWF5IGJlCitnaXZlbiBtb3JlIHRoYW4gb25jZSwgYW5kIG1heSBiZSBjb21iaW5lZCB3aXRoIHN0cmlwIG9wdGlvbnMgb3RoZXIgdGhhbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUs8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1vIDwvc3Bhbj48dmFyPmZpbGU8L3Zhcj48L3NhbXA+PGRkPlB1dCB0aGUgc3RyaXBwZWQgb3V0cHV0IGluIDx2YXI+ZmlsZTwvdmFyPiwgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIHRoZQorZXhpc3RpbmcgZmlsZS4gIFdoZW4gdGhpcyBhcmd1bWVudCBpcyB1c2VkLCBvbmx5IG9uZSA8dmFyPm9iamZpbGU8L3Zhcj4KK2FyZ3VtZW50IG1heSBiZSBzcGVjaWZpZWQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tcDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tcHJlc2VydmUtZGF0ZXM8L3NwYW4+PC9zYW1wPjxkZD5QcmVzZXJ2ZSB0aGUgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gZGF0ZXMgb2YgdGhlIGZpbGUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tRDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1kZXRlcm1pbmlzdGljLWFyY2hpdmVzLTEzMiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbmFibGVfMDAyZGRldGVybWluaXN0aWNfMDAyZGFyY2hpdmVzLTEzMyI+PC9hPk9wZXJhdGUgaW4gPGVtPmRldGVybWluaXN0aWM8L2VtPiBtb2RlLiAgV2hlbiBjb3B5aW5nIGFyY2hpdmUgbWVtYmVycworYW5kIHdyaXRpbmcgdGhlIGFyY2hpdmUgaW5kZXgsIHVzZSB6ZXJvIGZvciBVSURzLCBHSURzLCB0aW1lc3RhbXBzLAorYW5kIHVzZSBjb25zaXN0ZW50IGZpbGUgbW9kZXMgZm9yIGFsbCBmaWxlcy4KKworICAgICA8cD5JZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmludXRpbHM8L3NwYW4+PC9zYW1wPiB3YXMgY29uZmlndXJlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1kZXRlcm1pbmlzdGljLWFyY2hpdmVzPC9zcGFuPjwvc2FtcD4sIHRoZW4gdGhpcyBtb2RlIGlzIG9uIGJ5IGRlZmF1bHQuIAorSXQgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBiZWxvdy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1VPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kaXNhYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXM8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1kZXRlcm1pbmlzdGljLWFyY2hpdmVzLTEzNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbmFibGVfMDAyZGRldGVybWluaXN0aWNfMDAyZGFyY2hpdmVzLTEzNSI+PC9hPkRvIDxlbT5ub3Q8L2VtPiBvcGVyYXRlIGluIDxlbT5kZXRlcm1pbmlzdGljPC9lbT4gbW9kZS4gIFRoaXMgaXMgdGhlCitpbnZlcnNlIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgYWJvdmU6IHdoZW4gY29weWluZyBhcmNoaXZlIG1lbWJlcnMKK2FuZCB3cml0aW5nIHRoZSBhcmNoaXZlIGluZGV4LCB1c2UgdGhlaXIgYWN0dWFsIFVJRCwgR0lELCB0aW1lc3RhbXAsCithbmQgZmlsZSBtb2RlIHZhbHVlcy4KKworICAgICA8cD5UaGlzIGlzIHRoZSBkZWZhdWx0IHVubGVzcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmludXRpbHM8L3NwYW4+PC9zYW1wPiB3YXMgY29uZmlndXJlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1kZXRlcm1pbmlzdGljLWFyY2hpdmVzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tdzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0td2lsZGNhcmQ8L3NwYW4+PC9zYW1wPjxkZD5QZXJtaXQgcmVndWxhciBleHByZXNzaW9ucyBpbiA8dmFyPnN5bWJvbG5hbWU8L3Zhcj5zIHVzZWQgaW4gb3RoZXIgY29tbWFuZAorbGluZSBvcHRpb25zLiAgVGhlIHF1ZXN0aW9uIG1hcmsgKD8pLCBhc3RlcmlzayAoKiksIGJhY2tzbGFzaCAoXCkgYW5kCitzcXVhcmUgYnJhY2tldHMgKFtdKSBvcGVyYXRvcnMgY2FuIGJlIHVzZWQgYW55d2hlcmUgaW4gdGhlIHN5bWJvbAorbmFtZS4gIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN5bWJvbCBuYW1lIGlzIHRoZSBleGNsYW1hdGlvbgorcG9pbnQgKCEpIHRoZW4gdGhlIHNlbnNlIG9mIHRoZSBzd2l0Y2ggaXMgcmV2ZXJzZWQgZm9yIHRoYXQgc3ltYm9sLiAKK0ZvciBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgLXcgLUsgIWZvbyAtSyBmbyoKKzwvcHJlPgorICAgICA8cD53b3VsZCBjYXVzZSBzdHJpcCB0byBvbmx5IGtlZXAgc3ltYm9scyB0aGF0IHN0YXJ0IHdpdGggdGhlIGxldHRlcnMKKyZsZHF1bztmbyZyZHF1bzssIGJ1dCB0byBkaXNjYXJkIHRoZSBzeW1ib2wgJmxkcXVvO2ZvbyZyZHF1bzsuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4teDwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tZGlzY2FyZC1hbGw8L3NwYW4+PC9zYW1wPjxkZD5SZW1vdmUgbm9uLWdsb2JhbCBzeW1ib2xzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVg8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWRpc2NhcmQtbG9jYWxzPC9zcGFuPjwvc2FtcD48ZGQ+UmVtb3ZlIGNvbXBpbGVyLWdlbmVyYXRlZCBsb2NhbCBzeW1ib2xzLiAKKyhUaGVzZSB1c3VhbGx5IHN0YXJ0IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48L3NhbXA+JnJzcXVvOy4pCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWtlZXAtZmlsZS1zeW1ib2xzPC9zcGFuPjwvc2FtcD48ZGQ+V2hlbiBzdHJpcHBpbmcgYSBmaWxlLCBwZXJoYXBzIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zdHJpcC1kZWJ1Zzwvc3Bhbj48L3NhbXA+IG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0cmlwLXVubmVlZGVkPC9zcGFuPjwvc2FtcD4sIHJldGFpbiBhbnkgc3ltYm9scyBzcGVjaWZ5aW5nIHNvdXJjZSBmaWxlIG5hbWVzLAord2hpY2ggd291bGQgb3RoZXJ3aXNlIGdldCBzdHJpcHBlZC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tb25seS1rZWVwLWRlYnVnPC9zcGFuPjwvc2FtcD48ZGQ+U3RyaXAgYSBmaWxlLCByZW1vdmluZyBjb250ZW50cyBvZiBhbnkgc2VjdGlvbnMgdGhhdCB3b3VsZCBub3QgYmUKK3N0cmlwcGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RyaXAtZGVidWc8L3NwYW4+PC9zYW1wPiBhbmQgbGVhdmluZyB0aGUgZGVidWdnaW5nIHNlY3Rpb25zCitpbnRhY3QuICBJbiBFTEYgZmlsZXMsIHRoaXMgcHJlc2VydmVzIGFsbCBub3RlIHNlY3Rpb25zIGluIHRoZSBvdXRwdXQuCisKKyAgICAgPHA+VGhlIGludGVudGlvbiBpcyB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFkZC1nbnUtZGVidWdsaW5rPC9zcGFuPjwvc2FtcD4gdG8gY3JlYXRlIGEgdHdvIHBhcnQgZXhlY3V0YWJsZS4gIE9uZSBhCitzdHJpcHBlZCBiaW5hcnkgd2hpY2ggd2lsbCBvY2N1cHkgbGVzcyBzcGFjZSBpbiBSQU0gYW5kIGluIGEKK2Rpc3RyaWJ1dGlvbiBhbmQgdGhlIHNlY29uZCBhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmaWxlIHdoaWNoIGlzIG9ubHkKK25lZWRlZCBpZiBkZWJ1Z2dpbmcgYWJpbGl0aWVzIGFyZSByZXF1aXJlZC4gIFRoZSBzdWdnZXN0ZWQgcHJvY2VkdXJlCit0byBjcmVhdGUgdGhlc2UgZmlsZXMgaXMgYXMgZm9sbG93czoKKworICAgICAgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5MaW5rIHRoZSBleGVjdXRhYmxlIGFzIG5vcm1hbC4gIEFzc3VtaW5nIHRoYXQgaXMgaXMgY2FsbGVkCis8Y29kZT5mb288L2NvZGU+IHRoZW4uLi4gCis8bGk+UnVuIDxjb2RlPm9iamNvcHkgLS1vbmx5LWtlZXAtZGVidWcgZm9vIGZvby5kYmc8L2NvZGU+IHRvCitjcmVhdGUgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlYnVnZ2luZyBpbmZvLiAKKzxsaT5SdW4gPGNvZGU+b2JqY29weSAtLXN0cmlwLWRlYnVnIGZvbzwvY29kZT4gdG8gY3JlYXRlIGEKK3N0cmlwcGVkIGV4ZWN1dGFibGUuIAorPGxpPlJ1biA8Y29kZT5vYmpjb3B5IC0tYWRkLWdudS1kZWJ1Z2xpbms9Zm9vLmRiZyBmb288L2NvZGU+Cit0byBhZGQgYSBsaW5rIHRvIHRoZSBkZWJ1Z2dpbmcgaW5mbyBpbnRvIHRoZSBzdHJpcHBlZCBleGVjdXRhYmxlLgorICAgICAgICAgIDwvb2w+CisKKyAgICAgPHA+Tm90ZSZtZGFzaDt0aGUgY2hvaWNlIG9mIDxjb2RlPi5kYmc8L2NvZGU+IGFzIGFuIGV4dGVuc2lvbiBmb3IgdGhlIGRlYnVnIGluZm8KK2ZpbGUgaXMgYXJiaXRyYXJ5LiAgQWxzbyB0aGUgPGNvZGU+LS1vbmx5LWtlZXAtZGVidWc8L2NvZGU+IHN0ZXAgaXMKK29wdGlvbmFsLiAgWW91IGNvdWxkIGluc3RlYWQgZG8gdGhpczoKKworICAgICAgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5MaW5rIHRoZSBleGVjdXRhYmxlIGFzIG5vcm1hbC4gCis8bGk+Q29weSA8Y29kZT5mb288L2NvZGU+IHRvIDxjb2RlPmZvby5mdWxsPC9jb2RlPgorPGxpPlJ1biA8Y29kZT5zdHJpcCAtLXN0cmlwLWRlYnVnIGZvbzwvY29kZT4KKzxsaT5SdW4gPGNvZGU+b2JqY29weSAtLWFkZC1nbnUtZGVidWdsaW5rPWZvby5mdWxsIGZvbzwvY29kZT4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPmkuZS4sIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYWRkLWdudS1kZWJ1Z2xpbms8L3NwYW4+PC9zYW1wPiBjYW4gYmUgdGhlCitmdWxsIGV4ZWN1dGFibGUuICBJdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgZmlsZSBjcmVhdGVkIGJ5IHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1vbmx5LWtlZXAtZGVidWc8L3NwYW4+PC9zYW1wPiBzd2l0Y2guCisKKyAgICAgPHA+Tm90ZSZtZGFzaDt0aGlzIHN3aXRjaCBpcyBvbmx5IGludGVuZGVkIGZvciB1c2Ugb24gZnVsbHkgbGlua2VkIGZpbGVzLiAgSXQKK2RvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gdXNlIGl0IG9uIG9iamVjdCBmaWxlcyB3aGVyZSB0aGUgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBtYXkgYmUgaW5jb21wbGV0ZS4gIEJlc2lkZXMgdGhlIGdudV9kZWJ1Z2xpbmsgZmVhdHVyZQorY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdGhlIHByZXNlbmNlIG9mIG9uZSBmaWxlbmFtZSBjb250YWluaW5nCitkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIG5vdCBtdWx0aXBsZSBmaWxlbmFtZXMgb24gYSBvbmUtcGVyLW9iamVjdC1maWxlCitiYXNpcy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1WPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD48ZGQ+U2hvdyB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zdHJpcDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXY8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcmJvc2U8L3NwYW4+PC9zYW1wPjxkZD5WZXJib3NlIG91dHB1dDogbGlzdCBhbGwgb2JqZWN0IGZpbGVzIG1vZGlmaWVkLiAgSW4gdGhlIGNhc2Ugb2YKK2FyY2hpdmVzLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0cmlwIC12PC9zcGFuPjwvc2FtcD4mcnNxdW87IGxpc3RzIGFsbCBtZW1iZXJzIG9mIHRoZSBhcmNoaXZlLiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3dpbmRtYy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvd2luZG1jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViNjAwNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3dpbmRtYy5odG1sCkBAIC0wLDAgKzEsMTUwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53aW5kbWMgLSBHTlUgQmluYXJ5IFV0aWxpdGllczwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIEJpbmFyeSBVdGlsaXRpZXMiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibmxtY29udi5odG1sI25sbWNvbnYiIHRpdGxlPSJubG1jb252Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2luZHJlcy5odG1sI3dpbmRyZXMiIHRpdGxlPSJ3aW5kcmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3aW5kbWMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2luZHJlcy5odG1sI3dpbmRyZXMiPndpbmRyZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJubG1jb252Lmh0bWwjbmxtY29udiI+bmxtY29udjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMiB3aW5kbWM8L2gyPgorCis8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZG1jPC9zcGFuPjwvc2FtcD4gbWF5IGJlIHVzZWQgdG8gZ2VuZXJhdG9yIFdpbmRvd3MgbWVzc2FnZSByZXNvdXJjZXMuCisKKyAgIDxibG9ja3F1b3RlPgorPGVtPldhcm5pbmc6PC9lbT4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRtYzwvc3Bhbj48L3NhbXA+IGlzIG5vdCBhbHdheXMgYnVpbHQgYXMgcGFydCBvZiB0aGUgYmluYXJ5Cit1dGlsaXRpZXMsIHNpbmNlIGl0IGlzIG9ubHkgdXNlZnVsIGZvciBXaW5kb3dzIHRhcmdldHMuIAorPC9ibG9ja3F1b3RlPgorCis8IS0tIG1hbiB0aXRsZSB3aW5kbWMgZ2VuZXJhdGVzIFdpbmRvd3MgbWVzc2FnZSByZXNvdXJjZXMuIC0tPgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDwhLS0gbWFuIGJlZ2luIFNZTk9QU0lTIHdpbmRtYyAtLT4KKyAgICAgd2luZG1jIFtvcHRpb25zXSBpbnB1dC1maWxlCisgICAgIDwhLS0gbWFuIGVuZCAtLT4KKzwvcHJlPgorICAgPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gd2luZG1jIC0tPgorICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRtYzwvc3Bhbj48L3NhbXA+IHJlYWRzIG1lc3NhZ2UgZGVmaW5pdGlvbnMgZnJvbSBhbiBpbnB1dCBmaWxlICgubWMpIGFuZAordHJhbnNsYXRlIHRoZW0gaW50byBhIHNldCBvZiBvdXRwdXQgZmlsZXMuICBUaGUgb3V0cHV0IGZpbGVzIG1heSBiZSBvZgorZm91ciBraW5kczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+aDwvY29kZT48ZGQ+QSBDIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UgZGVmaW5pdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5yYzwvY29kZT48ZGQ+QSByZXNvdXJjZSBmaWxlIGNvbXBpbGFibGUgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gdG9vbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmJpbjwvY29kZT48ZGQ+T25lIG9yIG1vcmUgYmluYXJ5IGZpbGVzIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlIGRhdGEgZm9yIGEgc3BlY2lmaWMKK21lc3NhZ2UgbGFuZ3VhZ2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT5kYmc8L2NvZGU+PGRkPkEgQyBpbmNsdWRlIGZpbGUgdGhhdCBtYXBzIG1lc3NhZ2UgaWQncyB0byB0aGVpciBzeW1ib2xpYyBuYW1lLiAKKzwvZGw+CisKKyAgIDxwPlRoZSBleGFjdCBkZXNjcmlwdGlvbiBvZiB0aGVzZSBkaWZmZXJlbnQgZm9ybWF0cyBpcyBhdmFpbGFibGUgaW4KK2RvY3VtZW50YXRpb24gZnJvbSBNaWNyb3NvZnQuCisKKyAgIDxwPldoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRtYzwvc3Bhbj48L3NhbXA+IGNvbnZlcnRzIGZyb20gdGhlIDxjb2RlPm1jPC9jb2RlPiBmb3JtYXQgdG8gdGhlIDxjb2RlPmJpbjwvY29kZT4KK2Zvcm1hdCwgPGNvZGU+cmM8L2NvZGU+LCA8Y29kZT5oPC9jb2RlPiwgYW5kIG9wdGlvbmFsIDxjb2RlPmRiZzwvY29kZT4gaXQgaXMgYWN0aW5nIGxpa2UgdGhlCitXaW5kb3dzIE1lc3NhZ2UgQ29tcGlsZXIuCisKKzwhLS0gbWFuIGVuZCAtLT4KKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgd2luZG1jIC0tPgorICAgICA8ZGw+Cis8ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWE8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWFzY2lpX2luPC9zcGFuPjwvc2FtcD48ZGQ+U3BlY2lmaWVzIHRoYXQgdGhlIGlucHV0IGZpbGUgc3BlY2lmaWVkIGlzIEFTQ0lJLiBUaGlzIGlzIHRoZSBkZWZhdWx0CitiZWhhdmlvdXIuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tQTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tYXNjaWlfb3V0PC9zcGFuPjwvc2FtcD48ZGQ+U3BlY2lmaWVzIHRoYXQgbWVzc2FnZXMgaW4gdGhlIG91dHB1dCA8Y29kZT5iaW48L2NvZGU+IGZpbGVzIHNob3VsZCBiZSBpbiBBU0NJSQorZm9ybWF0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWI8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWJpbnByZWZpeDwvc3Bhbj48L3NhbXA+PGRkPlNwZWNpZmllcyB0aGF0IDxjb2RlPmJpbjwvY29kZT4gZmlsZW5hbWVzIHNob3VsZCBoYXZlIHRvIGJlIHByZWZpeGVkIGJ5IHRoZQorYmFzZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWM8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWN1c3RvbWZsYWc8L3NwYW4+PC9zYW1wPjxkZD5TZXRzIHRoZSBjdXN0b21lciBiaXQgaW4gYWxsIG1lc3NhZ2UgaWQncy4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1DIDwvc3Bhbj48dmFyPmNvZGVwYWdlPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWNvZGVwYWdlX2luIDwvc3Bhbj48dmFyPmNvZGVwYWdlPC92YXI+PC9zYW1wPjxkZD5TZXRzIHRoZSBkZWZhdWx0IGNvZGVwYWdlIHRvIGJlIHVzZWQgdG8gY29udmVydCBpbnB1dCBmaWxlIHRvIFVURjE2LiBUaGUKK2RlZmF1bHQgaXMgb2NkZXBhZ2UgMTI1Mi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1kPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kZWNpbWFsX3ZhbHVlczwvc3Bhbj48L3NhbXA+PGRkPk91dHB1dHMgdGhlIGNvbnN0YW50cyBpbiB0aGUgaGVhZGVyIGZpbGUgaW4gZGVjaW1hbC4gRGVmYXVsdCBpcyB1c2luZworaGV4YWRlY2ltYWwgb3V0cHV0LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWUgPC9zcGFuPjx2YXI+ZXh0PC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWV4dGVuc2lvbiA8L3NwYW4+PHZhcj5leHQ8L3Zhcj48L3NhbXA+PGRkPlRoZSBleHRlbnNpb24gZm9yIHRoZSBoZWFkZXIgZmlsZS4gVGhlIGRlZmF1bHQgaXMgLmggZXh0ZW5zaW9uLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUYgPC9zcGFuPjx2YXI+dGFyZ2V0PC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXRhcmdldCA8L3NwYW4+PHZhcj50YXJnZXQ8L3Zhcj48L3NhbXA+PGRkPlNwZWNpZnkgdGhlIEJGRCBmb3JtYXQgdG8gdXNlIGZvciBhIGJpbiBmaWxlIGFzIG91dHB1dC4gIFRoaXMKK2lzIGEgQkZEIHRhcmdldCBuYW1lOyB5b3UgY2FuIHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHRvIHNlZSBhIGxpc3QKK29mIHN1cHBvcnRlZCB0YXJnZXRzLiAgTm9ybWFsbHkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRtYzwvc3Bhbj48L3NhbXA+IHdpbGwgdXNlIHRoZSBkZWZhdWx0Citmb3JtYXQsIHdoaWNoIGlzIHRoZSBmaXJzdCBvbmUgbGlzdGVkIGJ5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA8L3NwYW4+PC9zYW1wPiBvcHRpb24uIAorPGEgaHJlZj0iVGFyZ2V0LVNlbGVjdGlvbi5odG1sI1RhcmdldC1TZWxlY3Rpb24iPlRhcmdldCBTZWxlY3Rpb248L2E+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LWggPC9zcGFuPjx2YXI+cGF0aDwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWFkZXJkaXIgPC9zcGFuPjx2YXI+cGF0aDwvdmFyPjwvc2FtcD48ZGQ+VGhlIHRhcmdldCBkaXJlY3Rvcnkgb2YgdGhlIGdlbmVyYXRlZCBoZWFkZXIgZmlsZS4gVGhlIGRlZmF1bHQgaXMgdGhlCitjdXJyZW50IGRpcmVjdG9yeS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1IPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1oZWxwPC9zcGFuPjwvc2FtcD48ZGQ+RGlzcGxheXMgYSBsaXN0IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCB0aGVuIGV4aXRzLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LW0gPC9zcGFuPjx2YXI+Y2hhcmFjdGVyczwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1tYXhsZW5ndGggPC9zcGFuPjx2YXI+Y2hhcmFjdGVyczwvdmFyPjwvc2FtcD48ZGQ+SW5zdHJ1Y3RzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kbWM8L3NwYW4+PC9zYW1wPiB0byBnZW5lcmF0ZSBhIHdhcm5pbmcgaWYgdGhlIGxlbmd0aAorb2YgYW55IG1lc3NhZ2UgZXhjZWVkcyB0aGUgbnVtYmVyIHNwZWNpZmllZC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1uPC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1udWxsdGVybWluYXRlPC9zcGFuPjwvc2FtcD48ZGQ+VGVybWluYXRlIG1lc3NhZ2UgdGV4dCBpbiA8Y29kZT5iaW48L2NvZGU+IGZpbGVzIGJ5IHplcm8uIEJ5IGRlZmF1bHQgdGhleSBhcmUKK3Rlcm1pbmF0ZWQgYnkgQ1IvTEYuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tbzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taHJlc3VsdF91c2U8L3NwYW4+PC9zYW1wPjxkZD5Ob3QgeWV0IGltcGxlbWVudGVkLiBJbnN0cnVjdHMgPGNvZGU+d2luZG1jPC9jb2RlPiB0byBnZW5lcmF0ZSBhbiBPTEUyIGhlYWRlcgorZmlsZSwgdXNpbmcgSFJFU1VMVCBkZWZpbml0aW9ucy4gU3RhdHVzIGNvZGVzIGFyZSB1c2VkIGlmIHRoZSBmbGFnIGlzIG5vdAorc3BlY2lmaWVkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LU8gPC9zcGFuPjx2YXI+Y29kZXBhZ2U8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tY29kZXBhZ2Vfb3V0IDwvc3Bhbj48dmFyPmNvZGVwYWdlPC92YXI+PC9zYW1wPjxkZD5TZXRzIHRoZSBkZWZhdWx0IGNvZGVwYWdlIHRvIGJlIHVzZWQgdG8gb3V0cHV0IHRleHQgZmlsZXMuIFRoZSBkZWZhdWx0CitpcyBvY2RlcGFnZSAxMjUyLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXIgPC9zcGFuPjx2YXI+cGF0aDwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1yY2RpciA8L3NwYW4+PHZhcj5wYXRoPC92YXI+PC9zYW1wPjxkZD5UaGUgdGFyZ2V0IGRpcmVjdG9yeSBmb3IgdGhlIGdlbmVyYXRlZCA8Y29kZT5yYzwvY29kZT4gc2NyaXB0IGFuZCB0aGUgZ2VuZXJhdGVkCis8Y29kZT5iaW48L2NvZGU+IGZpbGVzIHRoYXQgdGhlIHJlc291cmNlIGNvbXBpbGVyIHNjcmlwdCBpbmNsdWRlcy4gVGhlIGRlZmF1bHQKK2lzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi11PC9zcGFuPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS11bmljb2RlX2luPC9zcGFuPjwvc2FtcD48ZGQ+U3BlY2lmaWVzIHRoYXQgdGhlIGlucHV0IGZpbGUgaXMgVVRGMTYuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVTwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdW5pY29kZV9vdXQ8L3NwYW4+PC9zYW1wPjxkZD5TcGVjaWZpZXMgdGhhdCBtZXNzYWdlcyBpbiB0aGUgb3V0cHV0IDxjb2RlPmJpbjwvY29kZT4gZmlsZSBzaG91bGQgYmUgaW4gVVRGMTYKK2Zvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tdjwvc3Bhbj48L3NhbXA+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcmJvc2U8L3NwYW4+PC9zYW1wPjxkZD5FbmFibGUgdmVyYm9zZSBtb2RlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVY8L3NwYW4+PC9zYW1wPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD48ZGQ+UHJpbnRzIHRoZSB2ZXJzaW9uIG51bWJlciBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRtYzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXggPC9zcGFuPjx2YXI+cGF0aDwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS14ZGdiIDwvc3Bhbj48dmFyPnBhdGg8L3Zhcj48L3NhbXA+PGRkPlRoZSBwYXRoIG9mIHRoZSA8Y29kZT5kYmc8L2NvZGU+IEMgaW5jbHVkZSBmaWxlIHRoYXQgbWFwcyBtZXNzYWdlIGlkJ3MgdG8gdGhlCitzeW1ib2xpYyBuYW1lLiBObyBzdWNoIGZpbGUgaXMgZ2VuZXJhdGVkIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgc3dpdGNoLiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3dpbmRyZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9iaW51dGlscy5odG1sL3dpbmRyZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2IxOWExCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2JpbnV0aWxzLmh0bWwvd2luZHJlcy5odG1sCkBAIC0wLDAgKzEsMTkzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53aW5kcmVzIC0gR05VIEJpbmFyeSBVdGlsaXRpZXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBCaW5hcnkgVXRpbGl0aWVzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IndpbmRtYy5odG1sI3dpbmRtYyIgdGl0bGU9IndpbmRtYyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImRsbHRvb2wuaHRtbCNkbGx0b29sIiB0aXRsZT0iZGxsdG9vbCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2luZHJlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJkbGx0b29sLmh0bWwjZGxsdG9vbCI+ZGxsdG9vbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IndpbmRtYy5odG1sI3dpbmRtYyI+d2luZG1jPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjEzIHdpbmRyZXM8L2gyPgorCis8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+IG1heSBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgV2luZG93cyByZXNvdXJjZXMuCisKKyAgIDxibG9ja3F1b3RlPgorPGVtPldhcm5pbmc6PC9lbT4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRyZXM8L3NwYW4+PC9zYW1wPiBpcyBub3QgYWx3YXlzIGJ1aWx0IGFzIHBhcnQgb2YgdGhlIGJpbmFyeQordXRpbGl0aWVzLCBzaW5jZSBpdCBpcyBvbmx5IHVzZWZ1bCBmb3IgV2luZG93cyB0YXJnZXRzLiAKKzwvYmxvY2txdW90ZT4KKworPCEtLSBtYW4gdGl0bGUgd2luZHJlcyBtYW5pcHVsYXRlIFdpbmRvd3MgcmVzb3VyY2VzLiAtLT4KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8IS0tIG1hbiBiZWdpbiBTWU5PUFNJUyB3aW5kcmVzIC0tPgorICAgICB3aW5kcmVzIFtvcHRpb25zXSBbaW5wdXQtZmlsZV0gW291dHB1dC1maWxlXQorICAgICA8IS0tIG1hbiBlbmQgLS0+Cis8L3ByZT4KKyAgIDwhLS0gbWFuIGJlZ2luIERFU0NSSVBUSU9OIHdpbmRyZXMgLS0+CisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+IHJlYWRzIHJlc291cmNlcyBmcm9tIGFuIGlucHV0IGZpbGUgYW5kIGNvcGllcyB0aGVtIGludG8KK2FuIG91dHB1dCBmaWxlLiAgRWl0aGVyIGZpbGUgbWF5IGJlIGluIG9uZSBvZiB0aHJlZSBmb3JtYXRzOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5yYzwvY29kZT48ZGQ+QSB0ZXh0IGZvcm1hdCByZWFkIGJ5IHRoZSBSZXNvdXJjZSBDb21waWxlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPnJlczwvY29kZT48ZGQ+QSBiaW5hcnkgZm9ybWF0IGdlbmVyYXRlZCBieSB0aGUgUmVzb3VyY2UgQ29tcGlsZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT5jb2ZmPC9jb2RlPjxkZD5BIENPRkYgb2JqZWN0IG9yIGV4ZWN1dGFibGUuIAorPC9kbD4KKworICAgPHA+VGhlIGV4YWN0IGRlc2NyaXB0aW9uIG9mIHRoZXNlIGRpZmZlcmVudCBmb3JtYXRzIGlzIGF2YWlsYWJsZSBpbgorZG9jdW1lbnRhdGlvbiBmcm9tIE1pY3Jvc29mdC4KKworICAgPHA+V2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+IGNvbnZlcnRzIGZyb20gdGhlIDxjb2RlPnJjPC9jb2RlPiBmb3JtYXQgdG8gdGhlIDxjb2RlPnJlczwvY29kZT4KK2Zvcm1hdCwgaXQgaXMgYWN0aW5nIGxpa2UgdGhlIFdpbmRvd3MgUmVzb3VyY2UgQ29tcGlsZXIuICBXaGVuCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+IGNvbnZlcnRzIGZyb20gdGhlIDxjb2RlPnJlczwvY29kZT4gZm9ybWF0IHRvIHRoZSA8Y29kZT5jb2ZmPC9jb2RlPgorZm9ybWF0LCBpdCBpcyBhY3RpbmcgbGlrZSB0aGUgV2luZG93cyA8Y29kZT5DVlRSRVM8L2NvZGU+IHByb2dyYW0uCisKKyAgIDxwPldoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRyZXM8L3NwYW4+PC9zYW1wPiBnZW5lcmF0ZXMgYW4gPGNvZGU+cmM8L2NvZGU+IGZpbGUsIHRoZSBvdXRwdXQgaXMgc2ltaWxhcgorYnV0IG5vdCBpZGVudGljYWwgdG8gdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIGlucHV0LiAgV2hlbiBhbiBpbnB1dAorPGNvZGU+cmM8L2NvZGU+IGZpbGUgcmVmZXJzIHRvIGFuIGV4dGVybmFsIGZpbGVuYW1lLCBhbiBvdXRwdXQgPGNvZGU+cmM8L2NvZGU+IGZpbGUKK3dpbGwgaW5zdGVhZCBpbmNsdWRlIHRoZSBmaWxlIGNvbnRlbnRzLgorCisgICA8cD5JZiB0aGUgaW5wdXQgb3Igb3V0cHV0IGZvcm1hdCBpcyBub3Qgc3BlY2lmaWVkLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+IHdpbGwKK2d1ZXNzIGJhc2VkIG9uIHRoZSBmaWxlIG5hbWUsIG9yLCBmb3IgdGhlIGlucHV0IGZpbGUsIHRoZSBmaWxlIGNvbnRlbnRzLiAKK0EgZmlsZSB3aXRoIGFuIGV4dGVuc2lvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LnJjPC9zcGFuPjwvc2FtcD4gd2lsbCBiZSB0cmVhdGVkIGFzIGFuIDxjb2RlPnJjPC9jb2RlPgorZmlsZSwgYSBmaWxlIHdpdGggYW4gZXh0ZW5zaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4ucmVzPC9zcGFuPjwvc2FtcD4gd2lsbCBiZSB0cmVhdGVkIGFzIGEKKzxjb2RlPnJlczwvY29kZT4gZmlsZSwgYW5kIGEgZmlsZSB3aXRoIGFuIGV4dGVuc2lvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Lm88L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5leGU8L3NwYW4+PC9zYW1wPiB3aWxsIGJlIHRyZWF0ZWQgYXMgYSA8Y29kZT5jb2ZmPC9jb2RlPiBmaWxlLgorCisgICA8cD5JZiBubyBvdXRwdXQgZmlsZSBpcyBzcGVjaWZpZWQsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gd2lsbCBwcmludCB0aGUgcmVzb3VyY2VzCitpbiA8Y29kZT5yYzwvY29kZT4gZm9ybWF0IHRvIHN0YW5kYXJkIG91dHB1dC4KKworICAgPHA+VGhlIG5vcm1hbCB1c2UgaXMgZm9yIHlvdSB0byB3cml0ZSBhbiA8Y29kZT5yYzwvY29kZT4gZmlsZSwgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4KK3RvIGNvbnZlcnQgaXQgdG8gYSBDT0ZGIG9iamVjdCBmaWxlLCBhbmQgdGhlbiBsaW5rIHRoZSBDT0ZGIGZpbGUgaW50bworeW91ciBhcHBsaWNhdGlvbi4gIFRoaXMgd2lsbCBtYWtlIHRoZSByZXNvdXJjZXMgZGVzY3JpYmVkIGluIHRoZQorPGNvZGU+cmM8L2NvZGU+IGZpbGUgYXZhaWxhYmxlIHRvIFdpbmRvd3MuCisKKzwhLS0gbWFuIGVuZCAtLT4KKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgd2luZHJlcyAtLT4KKyAgICAgPGRsPgorPGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1pIDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWlucHV0IDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPjxkZD5UaGUgbmFtZSBvZiB0aGUgaW5wdXQgZmlsZS4gIElmIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGVuCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+IHdpbGwgdXNlIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IGFzIHRoZSBpbnB1dCBmaWxlCituYW1lLiAgSWYgdGhlcmUgYXJlIG5vIG5vbi1vcHRpb24gYXJndW1lbnRzLCB0aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gd2lsbAorcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0LiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRyZXM8L3NwYW4+PC9zYW1wPiBjYW4gbm90IHJlYWQgYSBDT0ZGIGZpbGUgZnJvbQorc3RhbmRhcmQgaW5wdXQuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tbyA8L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1vdXRwdXQgPC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+PGRkPlRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZmlsZS4gIElmIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGVuCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+IHdpbGwgdXNlIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50LCBhZnRlciBhbnkgdXNlZAorZm9yIHRoZSBpbnB1dCBmaWxlIG5hbWUsIGFzIHRoZSBvdXRwdXQgZmlsZSBuYW1lLiAgSWYgdGhlcmUgaXMgbm8KK25vbi1vcHRpb24gYXJndW1lbnQsIHRoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRyZXM8L3NwYW4+PC9zYW1wPiB3aWxsIHdyaXRlIHRvIHN0YW5kYXJkIG91dHB1dC4gCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+IGNhbiBub3Qgd3JpdGUgYSBDT0ZGIGZpbGUgdG8gc3RhbmRhcmQgb3V0cHV0LiAgTm90ZSwKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnJjPC9zcGFuPjwvc2FtcD4gdGhlIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm88L3NwYW4+PC9zYW1wPiBpcyBhbHNvCithY2NlcHRlZCwgYnV0IGl0cyB1c2UgaXMgbm90IHJlY29tbWVuZGVkLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUogPC9zcGFuPjx2YXI+Zm9ybWF0PC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWlucHV0LWZvcm1hdCA8L3NwYW4+PHZhcj5mb3JtYXQ8L3Zhcj48L3NhbXA+PGRkPlRoZSBpbnB1dCBmb3JtYXQgdG8gcmVhZC4gIDx2YXI+Zm9ybWF0PC92YXI+IG1heSBiZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29mZjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIElmIG5vIGlucHV0IGZvcm1hdCBpcyBzcGVjaWZpZWQsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gd2lsbAorZ3Vlc3MsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1PIDwvc3Bhbj48dmFyPmZvcm1hdDwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1vdXRwdXQtZm9ybWF0IDwvc3Bhbj48dmFyPmZvcm1hdDwvdmFyPjwvc2FtcD48ZGQ+VGhlIG91dHB1dCBmb3JtYXQgdG8gZ2VuZXJhdGUuICA8dmFyPmZvcm1hdDwvdmFyPiBtYXkgYmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvZmY8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJZiBubyBvdXRwdXQgZm9ybWF0IGlzIHNwZWNpZmllZCwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gd2lsbCBndWVzcywgYXMgZGVzY3JpYmVkIGFib3ZlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LUYgPC9zcGFuPjx2YXI+dGFyZ2V0PC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXRhcmdldCA8L3NwYW4+PHZhcj50YXJnZXQ8L3Zhcj48L3NhbXA+PGRkPlNwZWNpZnkgdGhlIEJGRCBmb3JtYXQgdG8gdXNlIGZvciBhIENPRkYgZmlsZSBhcyBpbnB1dCBvciBvdXRwdXQuICBUaGlzCitpcyBhIEJGRCB0YXJnZXQgbmFtZTsgeW91IGNhbiB1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGVscDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byBzZWUgYSBsaXN0CitvZiBzdXBwb3J0ZWQgdGFyZ2V0cy4gIE5vcm1hbGx5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gd2lsbCB1c2UgdGhlIGRlZmF1bHQKK2Zvcm1hdCwgd2hpY2ggaXMgdGhlIGZpcnN0IG9uZSBsaXN0ZWQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGVscDwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gCis8YSBocmVmPSJUYXJnZXQtU2VsZWN0aW9uLmh0bWwjVGFyZ2V0LVNlbGVjdGlvbiI+VGFyZ2V0IFNlbGVjdGlvbjwvYT4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXByZXByb2Nlc3NvciA8L3NwYW4+PHZhcj5wcm9ncmFtPC92YXI+PC9zYW1wPjxkZD5XaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gcmVhZHMgYW4gPGNvZGU+cmM8L2NvZGU+IGZpbGUsIGl0IHJ1bnMgaXQgdGhyb3VnaCB0aGUgQworcHJlcHJvY2Vzc29yIGZpcnN0LiAgVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcHJlcHJvY2Vzc29yCit0byB1c2UsIGluY2x1ZGluZyBhbnkgbGVhZGluZyBhcmd1bWVudHMuICBUaGUgZGVmYXVsdCBwcmVwcm9jZXNzb3IKK2FyZ3VtZW50IGlzIDxjb2RlPmdjYyAtRSAteGMtaGVhZGVyIC1EUkNfSU5WT0tFRDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXByZXByb2Nlc3Nvci1hcmcgPC9zcGFuPjx2YXI+b3B0aW9uPC92YXI+PC9zYW1wPjxkZD5XaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gcmVhZHMgYW4gPGNvZGU+cmM8L2NvZGU+IGZpbGUsIGl0IHJ1bnMgaXQgdGhyb3VnaAordGhlIEMgcHJlcHJvY2Vzc29yIGZpcnN0LiAgVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsCit0ZXh0IHRvIGJlIHBhc3NlZCB0byBwcmVwcm9jZXNzb3Igb24gaXRzIGNvbW1hbmQgbGluZS4gCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyB0byBhZGQgbXVsdGlwbGUgb3B0aW9ucyB0byB0aGUKK3ByZXByb2Nlc3NvciBjb21tYW5kIGxpbmUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tSSA8L3NwYW4+PHZhcj5kaXJlY3Rvcnk8L3Zhcj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taW5jbHVkZS1kaXIgPC9zcGFuPjx2YXI+ZGlyZWN0b3J5PC92YXI+PC9zYW1wPjxkZD5TcGVjaWZ5IGFuIGluY2x1ZGUgZGlyZWN0b3J5IHRvIHVzZSB3aGVuIHJlYWRpbmcgYW4gPGNvZGU+cmM8L2NvZGU+IGZpbGUuIAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRyZXM8L3NwYW4+PC9zYW1wPiB3aWxsIHBhc3MgdGhpcyB0byB0aGUgcHJlcHJvY2Vzc29yIGFzIGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4KK29wdGlvbi4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj53aW5kcmVzPC9zcGFuPjwvc2FtcD4gd2lsbCBhbHNvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSB3aGVuIGxvb2tpbmcgZm9yCitmaWxlcyBuYW1lZCBpbiB0aGUgPGNvZGU+cmM8L2NvZGU+IGZpbGUuICBJZiB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgY29tbWFuZAorbWF0Y2hlcyBhbnkgb2YgdGhlIHN1cHBvcnRlZCA8dmFyPmZvcm1hdHM8L3Zhcj4gKGFzIGRlc2NyaWJlZCBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUo8L3NwYW4+PC9zYW1wPgorb3B0aW9uKSwgaXQgd2lsbCBpc3N1ZSBhIGRlcHJlY2F0aW9uIHdhcm5pbmcsIGFuZCBiZWhhdmUganVzdCBsaWtlIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUo8L3NwYW4+PC9zYW1wPiBvcHRpb24uICBOZXcgcHJvZ3JhbXMgc2hvdWxkIG5vdCB1c2UgdGhpcyBiZWhhdmlvdXIuICBJZiBhCitkaXJlY3RvcnkgaGFwcGVucyB0byBtYXRjaCBhIDx2YXI+Zm9ybWF0PC92YXI+LCBzaW1wbGUgcHJlZml4IGl0IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uLzwvc3Bhbj48L3NhbXA+JnJzcXVvOwordG8gZGlzYWJsZSB0aGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1EIDwvc3Bhbj48dmFyPnRhcmdldDwvdmFyPjwvc2FtcD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS1kZWZpbmUgPC9zcGFuPjx2YXI+c3ltPC92YXI+PHNwYW4gY2xhc3M9ImVudiI+Wz08L3NwYW4+PHZhcj52YWw8L3Zhcj48c3BhbiBjbGFzcz0iZW52Ij5dPC9zcGFuPjwvc2FtcD48ZGQ+U3BlY2lmeSBhIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1EPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHRvIHBhc3MgdG8gdGhlIHByZXByb2Nlc3NvciB3aGVuIHJlYWRpbmcgYW4KKzxjb2RlPnJjPC9jb2RlPiBmaWxlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LVUgPC9zcGFuPjx2YXI+dGFyZ2V0PC92YXI+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXVuZGVmaW5lIDwvc3Bhbj48dmFyPnN5bTwvdmFyPjwvc2FtcD48ZGQ+U3BlY2lmeSBhIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1VPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHRvIHBhc3MgdG8gdGhlIHByZXByb2Nlc3NvciB3aGVuIHJlYWRpbmcgYW4KKzxjb2RlPnJjPC9jb2RlPiBmaWxlLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LXI8L3NwYW4+PC9zYW1wPjxkZD5JZ25vcmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggcmMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tdjwvc3Bhbj48L3NhbXA+PGRkPkVuYWJsZSB2ZXJib3NlIG1vZGUuICBUaGlzIHRlbGxzIHlvdSB3aGF0IHRoZSBwcmVwcm9jZXNzb3IgaXMgaWYgeW91CitkaWRuJ3Qgc3BlY2lmeSBvbmUuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tYyA8L3NwYW4+PHZhcj52YWw8L3Zhcj48L3NhbXA+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLWNvZGVwYWdlIDwvc3Bhbj48dmFyPnZhbDwvdmFyPjwvc2FtcD48ZGQ+U3BlY2lmeSB0aGUgZGVmYXVsdCBjb2RlcGFnZSB0byB1c2Ugd2hlbiByZWFkaW5nIGFuIDxjb2RlPnJjPC9jb2RlPiBmaWxlLiAKKzx2YXI+dmFsPC92YXI+IHNob3VsZCBiZSBhIGhleGFkZWNpbWFsIHByZWZpeGVkIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgZGVjaW1hbAorY29kZXBhZ2UgY29kZS4gVGhlIHZhbGlkIHJhbmdlIGlzIGZyb20gemVybyB1cCB0byAweGZmZmYsIGJ1dCB0aGUKK3ZhbGlkaXR5IG9mIHRoZSBjb2RlcGFnZSBpcyBob3N0IGFuZCBjb25maWd1cmF0aW9uIGRlcGVuZGVudC4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1sIDwvc3Bhbj48dmFyPnZhbDwvdmFyPjwvc2FtcD48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tbGFuZ3VhZ2UgPC9zcGFuPjx2YXI+dmFsPC92YXI+PC9zYW1wPjxkZD5TcGVjaWZ5IHRoZSBkZWZhdWx0IGxhbmd1YWdlIHRvIHVzZSB3aGVuIHJlYWRpbmcgYW4gPGNvZGU+cmM8L2NvZGU+IGZpbGUuIAorPHZhcj52YWw8L3Zhcj4gc2hvdWxkIGJlIGEgaGV4YWRlY2ltYWwgbGFuZ3VhZ2UgY29kZS4gIFRoZSBsb3cgZWlnaHQgYml0cyBhcmUKK3RoZSBsYW5ndWFnZSwgYW5kIHRoZSBoaWdoIGVpZ2h0IGJpdHMgYXJlIHRoZSBzdWJsYW5ndWFnZS4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0tdXNlLXRlbXAtZmlsZTwvc3Bhbj48L3NhbXA+PGRkPlVzZSBhIHRlbXBvcmFyeSBmaWxlIHRvIGluc3RlYWQgb2YgdXNpbmcgcG9wZW4gdG8gcmVhZCB0aGUgb3V0cHV0IG9mCit0aGUgcHJlcHJvY2Vzc29yLiBVc2UgdGhpcyBvcHRpb24gaWYgdGhlIHBvcGVuIGltcGxlbWVudGF0aW9uIGlzIGJ1Z2d5CitvbiB0aGUgaG9zdCAoZWcuLCBjZXJ0YWluIG5vbi1FbmdsaXNoIGxhbmd1YWdlIHZlcnNpb25zIG9mIFdpbmRvd3MgOTUgYW5kCitXaW5kb3dzIDk4IGFyZSBrbm93biB0byBoYXZlIGJ1Z2d5IHBvcGVuIHdoZXJlIHRoZSBvdXRwdXQgd2lsbCBpbnN0ZWFkCitnbyB0aGUgY29uc29sZSkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLW5vLXVzZS10ZW1wLWZpbGU8L3NwYW4+PC9zYW1wPjxkZD5Vc2UgcG9wZW4sIG5vdCBhIHRlbXBvcmFyeSBmaWxlLCB0byByZWFkIHRoZSBvdXRwdXQgb2YgdGhlIHByZXByb2Nlc3Nvci4gCitUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi1oPC9zcGFuPjwvc2FtcD48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPi0taGVscDwvc3Bhbj48L3NhbXA+PGRkPlByaW50cyBhIHVzYWdlIHN1bW1hcnkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tVjwvc3Bhbj48L3NhbXA+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij4tLXZlcnNpb248L3NwYW4+PC9zYW1wPjxkZD5QcmludHMgdGhlIHZlcnNpb24gbnVtYmVyIGZvciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+d2luZHJlczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+LS15eWRlYnVnPC9zcGFuPjwvc2FtcD48ZGQ+SWYgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPndpbmRyZXM8L3NwYW4+PC9zYW1wPiBpcyBjb21waWxlZCB3aXRoIDxjb2RlPllZREVCVUc8L2NvZGU+IGRlZmluZWQgYXMgPGNvZGU+MTwvY29kZT4sCit0aGlzIHdpbGwgdHVybiBvbiBwYXJzZXIgZGVidWdnaW5nLiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQWx0ZXJuYXRpdmVzLXRvLVdyYXBwZXItXzAwMjNpZm5kZWYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQWx0ZXJuYXRpdmVzLXRvLVdyYXBwZXItXzAwMjNpZm5kZWYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTYxOThkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9BbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZi5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFsdGVybmF0aXZlcyB0byBXcmFwcGVyICNpZm5kZWYgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIiB0aXRsZT0iSGVhZGVyIEZpbGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwjT25jZV8wMDJkT25seS1IZWFkZXJzIiB0aXRsZT0iT25jZS1Pbmx5IEhlYWRlcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb21wdXRlZC1JbmNsdWRlcy5odG1sI0NvbXB1dGVkLUluY2x1ZGVzIiB0aXRsZT0iQ29tcHV0ZWQgSW5jbHVkZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQWx0ZXJuYXRpdmVzLXRvLVdyYXBwZXItJTIzaWZuZGVmIj48L2E+Cis8YSBuYW1lPSJBbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb21wdXRlZC1JbmNsdWRlcy5odG1sI0NvbXB1dGVkLUluY2x1ZGVzIj5Db21wdXRlZCBJbmNsdWRlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9uY2VfMDAyZE9ubHktSGVhZGVycy5odG1sI09uY2VfMDAyZE9ubHktSGVhZGVycyI+T25jZS1Pbmx5IEhlYWRlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJIZWFkZXItRmlsZXMuaHRtbCNIZWFkZXItRmlsZXMiPkhlYWRlciBGaWxlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuNSBBbHRlcm5hdGl2ZXMgdG8gV3JhcHBlciAjaWZuZGVmPC9oMz4KKworPHA+Q1BQIHN1cHBvcnRzIHR3byBtb3JlIHdheXMgb2YgaW5kaWNhdGluZyB0aGF0IGEgaGVhZGVyIGZpbGUgc2hvdWxkIGJlCityZWFkIG9ubHkgb25jZS4gIE5laXRoZXIgb25lIGlzIGFzIHBvcnRhYmxlIGFzIGEgd3JhcHBlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZm5kZWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCB3ZSByZWNvbW1lbmQgeW91IGRvIG5vdCB1c2UgdGhlbSBpbiBuZXcgcHJvZ3JhbXMsIHdpdGggdGhlIGNhdmVhdAordGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbXBvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgc3RhbmRhcmQgcHJhY3RpY2UgaW4gT2JqZWN0aXZlLUMuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzaW1wb3J0LTMzIj48L2E+Q1BQIHN1cHBvcnRzIGEgdmFyaWFudCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhbGxlZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbXBvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hpY2gKK2luY2x1ZGVzIGEgZmlsZSwgYnV0IGRvZXMgc28gYXQgbW9zdCBvbmNlLiAgSWYgeW91IHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbXBvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2luc3RlYWQgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0aGUgY29uZGl0aW9uYWxzCitpbnNpZGUgdGhlIGhlYWRlciBmaWxlIHRvIHByZXZlbnQgbXVsdGlwbGUgaW5jbHVzaW9uIG9mIHRoZSBjb250ZW50cy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbXBvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgc3RhbmRhcmQgaW4gT2JqZWN0aXZlLUMsIGJ1dCBpcyBjb25zaWRlcmVkIGEKK2RlcHJlY2F0ZWQgZXh0ZW5zaW9uIGluIEMgYW5kIEMrKy4KKworICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW1wb3J0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIG5vdCBhIHdlbGwgZGVzaWduZWQgZmVhdHVyZS4gIEl0IHJlcXVpcmVzIHRoZSB1c2VycyBvZgorYSBoZWFkZXIgZmlsZSB0byBrbm93IHRoYXQgaXQgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgb25jZS4gIEl0IGlzIG11Y2gKK2JldHRlciBmb3IgdGhlIGhlYWRlciBmaWxlJ3MgaW1wbGVtZW50b3IgdG8gd3JpdGUgdGhlIGZpbGUgc28gdGhhdCB1c2VycworZG9uJ3QgbmVlZCB0byBrbm93IHRoaXMuICBVc2luZyBhIHdyYXBwZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWZuZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFjY29tcGxpc2hlcwordGhpcyBnb2FsLgorCisgICA8cD5JbiB0aGUgcHJlc2VudCBpbXBsZW1lbnRhdGlvbiwgYSBzaW5nbGUgdXNlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2ltcG9ydDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsCitwcmV2ZW50IHRoZSBmaWxlIGZyb20gZXZlciBiZWluZyByZWFkIGFnYWluLCBieSBlaXRoZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW1wb3J0PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgWW91IHNob3VsZCBub3QgcmVseSBvbiB0aGlzOyBkbyBub3QgdXNlIGJvdGgKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2ltcG9ydDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byByZWZlciB0byB0aGUgc2FtZSBoZWFkZXIgZmlsZS4KKworICAgPHA+QW5vdGhlciB3YXkgdG8gcHJldmVudCBhIGhlYWRlciBmaWxlIGZyb20gYmVpbmcgaW5jbHVkZWQgbW9yZSB0aGFuIG9uY2UKK2lzIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBvbmNlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZS4gIElmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBvbmNlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzCitzZWVuIHdoZW4gc2Nhbm5pbmcgYSBoZWFkZXIgZmlsZSwgdGhhdCBmaWxlIHdpbGwgbmV2ZXIgYmUgcmVhZCBhZ2Fpbiwgbm8KK21hdHRlciB3aGF0LgorCisgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgb25jZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkb2VzIG5vdCBoYXZlIHRoZSBwcm9ibGVtcyB0aGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2ltcG9ydDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkb2VzLAorYnV0IGl0IGlzIG5vdCByZWNvZ25pemVkIGJ5IGFsbCBwcmVwcm9jZXNzb3JzLCBzbyB5b3UgY2Fubm90IHJlbHkgb24gaXQKK2luIGEgcG9ydGFibGUgcHJvZ3JhbS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Bcmd1bWVudC1QcmVzY2FuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0FyZ3VtZW50LVByZXNjYW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTA5ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Bcmd1bWVudC1QcmVzY2FuLmh0bWwKQEAgLTAsMCArMSwxNDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFyZ3VtZW50IFByZXNjYW4gLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjcm8tUGl0ZmFsbHMuaHRtbCNNYWNyby1QaXRmYWxscyIgdGl0bGU9Ik1hY3JvIFBpdGZhbGxzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2VsZl8wMDJkUmVmZXJlbnRpYWwtTWFjcm9zLmh0bWwjU2VsZl8wMDJkUmVmZXJlbnRpYWwtTWFjcm9zIiB0aXRsZT0iU2VsZi1SZWZlcmVudGlhbCBNYWNyb3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJOZXdsaW5lcy1pbi1Bcmd1bWVudHMuaHRtbCNOZXdsaW5lcy1pbi1Bcmd1bWVudHMiIHRpdGxlPSJOZXdsaW5lcyBpbiBBcmd1bWVudHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQXJndW1lbnQtUHJlc2NhbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJOZXdsaW5lcy1pbi1Bcmd1bWVudHMuaHRtbCNOZXdsaW5lcy1pbi1Bcmd1bWVudHMiPk5ld2xpbmVzIGluIEFyZ3VtZW50czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNlbGZfMDAyZFJlZmVyZW50aWFsLU1hY3Jvcy5odG1sI1NlbGZfMDAyZFJlZmVyZW50aWFsLU1hY3JvcyI+U2VsZi1SZWZlcmVudGlhbCBNYWNyb3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIj5NYWNybyBQaXRmYWxsczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTAuNiBBcmd1bWVudCBQcmVzY2FuPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXhwYW5zaW9uLW9mLWFyZ3VtZW50cy03OSI+PC9hPjxhIG5hbWU9ImluZGV4LW1hY3JvLWFyZ3VtZW50LWV4cGFuc2lvbi04MCI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXNjYW4tb2YtbWFjcm8tYXJndW1lbnRzLTgxIj48L2E+CitNYWNybyBhcmd1bWVudHMgYXJlIGNvbXBsZXRlbHkgbWFjcm8tZXhwYW5kZWQgYmVmb3JlIHRoZXkgYXJlCitzdWJzdGl0dXRlZCBpbnRvIGEgbWFjcm8gYm9keSwgdW5sZXNzIHRoZXkgYXJlIHN0cmluZ2lmaWVkIG9yIHBhc3RlZAord2l0aCBvdGhlciB0b2tlbnMuICBBZnRlciBzdWJzdGl0dXRpb24sIHRoZSBlbnRpcmUgbWFjcm8gYm9keSwgaW5jbHVkaW5nCit0aGUgc3Vic3RpdHV0ZWQgYXJndW1lbnRzLCBpcyBzY2FubmVkIGFnYWluIGZvciBtYWNyb3MgdG8gYmUgZXhwYW5kZWQuIAorVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIHNjYW5uZWQgPGVtPnR3aWNlPC9lbT4gdG8gZXhwYW5kCittYWNybyBjYWxscyBpbiB0aGVtLgorCisgICA8cD5Nb3N0IG9mIHRoZSB0aW1lLCB0aGlzIGhhcyBubyBlZmZlY3QuICBJZiB0aGUgYXJndW1lbnQgY29udGFpbmVkIGFueQorbWFjcm8gY2FsbHMsIHRoZXkgYXJlIGV4cGFuZGVkIGR1cmluZyB0aGUgZmlyc3Qgc2Nhbi4gIFRoZSByZXN1bHQKK3RoZXJlZm9yZSBjb250YWlucyBubyBtYWNybyBjYWxscywgc28gdGhlIHNlY29uZCBzY2FuIGRvZXMgbm90IGNoYW5nZQoraXQuICBJZiB0aGUgYXJndW1lbnQgd2VyZSBzdWJzdGl0dXRlZCBhcyBnaXZlbiwgd2l0aCBubyBwcmVzY2FuLCB0aGUKK3NpbmdsZSByZW1haW5pbmcgc2NhbiB3b3VsZCBmaW5kIHRoZSBzYW1lIG1hY3JvIGNhbGxzIGFuZCBwcm9kdWNlIHRoZQorc2FtZSByZXN1bHRzLgorCisgICA8cD5Zb3UgbWlnaHQgZXhwZWN0IHRoZSBkb3VibGUgc2NhbiB0byBjaGFuZ2UgdGhlIHJlc3VsdHMgd2hlbiBhCitzZWxmLXJlZmVyZW50aWFsIG1hY3JvIGlzIHVzZWQgaW4gYW4gYXJndW1lbnQgb2YgYW5vdGhlciBtYWNybworKHNlZSA8YSBocmVmPSJTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbCNTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MiPlNlbGYtUmVmZXJlbnRpYWwgTWFjcm9zPC9hPik6IHRoZSBzZWxmLXJlZmVyZW50aWFsIG1hY3JvIHdvdWxkIGJlCitleHBhbmRlZCBvbmNlIGluIHRoZSBmaXJzdCBzY2FuLCBhbmQgYSBzZWNvbmQgdGltZSBpbiB0aGUgc2Vjb25kIHNjYW4uIAorSG93ZXZlciwgdGhpcyBpcyBub3Qgd2hhdCBoYXBwZW5zLiAgVGhlIHNlbGYtcmVmZXJlbmNlcyB0aGF0IGRvIG5vdAorZXhwYW5kIGluIHRoZSBmaXJzdCBzY2FuIGFyZSBtYXJrZWQgc28gdGhhdCB0aGV5IHdpbGwgbm90IGV4cGFuZCBpbiB0aGUKK3NlY29uZCBzY2FuIGVpdGhlci4KKworICAgPHA+WW91IG1pZ2h0IHdvbmRlciwgJmxkcXVvO1doeSBtZW50aW9uIHRoZSBwcmVzY2FuLCBpZiBpdCBtYWtlcyBubyBkaWZmZXJlbmNlPyAKK0FuZCB3aHkgbm90IHNraXAgaXQgYW5kIG1ha2UgdGhlIHByZXByb2Nlc3NvciBmYXN0ZXI/JnJkcXVvOyAgVGhlIGFuc3dlciBpcwordGhhdCB0aGUgcHJlc2NhbiBkb2VzIG1ha2UgYSBkaWZmZXJlbmNlIGluIHRocmVlIHNwZWNpYWwgY2FzZXM6CisKKyAgICAgPHVsPgorPGxpPk5lc3RlZCBjYWxscyB0byBhIG1hY3JvLgorCisgICAgIDxwPldlIHNheSB0aGF0IDxkZm4+bmVzdGVkPC9kZm4+IGNhbGxzIHRvIGEgbWFjcm8gb2NjdXIgd2hlbiBhIG1hY3JvJ3MgYXJndW1lbnQKK2NvbnRhaW5zIGEgY2FsbCB0byB0aGF0IHZlcnkgbWFjcm8uICBGb3IgZXhhbXBsZSwgaWYgPGNvZGU+ZjwvY29kZT4gaXMgYSBtYWNybwordGhhdCBleHBlY3RzIG9uZSBhcmd1bWVudCwgPGNvZGU+ZiAoZiAoMSkpPC9jb2RlPiBpcyBhIG5lc3RlZCBwYWlyIG9mIGNhbGxzIHRvCis8Y29kZT5mPC9jb2RlPi4gIFRoZSBkZXNpcmVkIGV4cGFuc2lvbiBpcyBtYWRlIGJ5IGV4cGFuZGluZyA8Y29kZT5mICgxKTwvY29kZT4gYW5kCitzdWJzdGl0dXRpbmcgdGhhdCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIDxjb2RlPmY8L2NvZGU+LiAgVGhlIHByZXNjYW4gY2F1c2VzCit0aGUgZXhwZWN0ZWQgcmVzdWx0IHRvIGhhcHBlbi4gIFdpdGhvdXQgdGhlIHByZXNjYW4sIDxjb2RlPmYgKDEpPC9jb2RlPiBpdHNlbGYKK3dvdWxkIGJlIHN1YnN0aXR1dGVkIGFzIGFuIGFyZ3VtZW50LCBhbmQgdGhlIGlubmVyIHVzZSBvZiA8Y29kZT5mPC9jb2RlPiB3b3VsZAorYXBwZWFyIGR1cmluZyB0aGUgbWFpbiBzY2FuIGFzIGFuIGluZGlyZWN0IHNlbGYtcmVmZXJlbmNlIGFuZCB3b3VsZCBub3QKK2JlIGV4cGFuZGVkLgorCisgICAgIDxsaT5NYWNyb3MgdGhhdCBjYWxsIG90aGVyIG1hY3JvcyB0aGF0IHN0cmluZ2lmeSBvciBjb25jYXRlbmF0ZS4KKworICAgICA8cD5JZiBhbiBhcmd1bWVudCBpcyBzdHJpbmdpZmllZCBvciBjb25jYXRlbmF0ZWQsIHRoZSBwcmVzY2FuIGRvZXMgbm90CitvY2N1ci4gIElmIHlvdSA8ZW0+d2FudDwvZW0+IHRvIGV4cGFuZCBhIG1hY3JvLCB0aGVuIHN0cmluZ2lmeSBvcgorY29uY2F0ZW5hdGUgaXRzIGV4cGFuc2lvbiwgeW91IGNhbiBkbyB0aGF0IGJ5IGNhdXNpbmcgb25lIG1hY3JvIHRvIGNhbGwKK2Fub3RoZXIgbWFjcm8gdGhhdCBkb2VzIHRoZSBzdHJpbmdpZmljYXRpb24gb3IgY29uY2F0ZW5hdGlvbi4gIEZvcgoraW5zdGFuY2UsIGlmIHlvdSBoYXZlCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2RlZmluZSBBRlRFUlgoeCkgWF8gIyMgeAorICAgICAgICAgICNkZWZpbmUgWEFGVEVSWCh4KSBBRlRFUlgoeCkKKyAgICAgICAgICAjZGVmaW5lIFRBQkxFU0laRSAxMDI0CisgICAgICAgICAgI2RlZmluZSBCVUZTSVpFIFRBQkxFU0laRQorPC9wcmU+CisgICAgIDxwPnRoZW4gPGNvZGU+QUZURVJYKEJVRlNJWkUpPC9jb2RlPiBleHBhbmRzIHRvIDxjb2RlPlhfQlVGU0laRTwvY29kZT4sIGFuZAorPGNvZGU+WEFGVEVSWChCVUZTSVpFKTwvY29kZT4gZXhwYW5kcyB0byA8Y29kZT5YXzEwMjQ8L2NvZGU+LiAgKE5vdCB0bworPGNvZGU+WF9UQUJMRVNJWkU8L2NvZGU+LiAgUHJlc2NhbiBhbHdheXMgZG9lcyBhIGNvbXBsZXRlIGV4cGFuc2lvbi4pCisKKyAgICAgPGxpPk1hY3JvcyB1c2VkIGluIGFyZ3VtZW50cywgd2hvc2UgZXhwYW5zaW9ucyBjb250YWluIHVuc2hpZWxkZWQgY29tbWFzLgorCisgICAgIDxwPlRoaXMgY2FuIGNhdXNlIGEgbWFjcm8gZXhwYW5kZWQgb24gdGhlIHNlY29uZCBzY2FuIHRvIGJlIGNhbGxlZCB3aXRoIHRoZQord3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIEhlcmUgaXMgYW4gZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjZGVmaW5lIGZvbyAgYSxiCisgICAgICAgICAgI2RlZmluZSBiYXIoeCkgbG9zZSh4KQorICAgICAgICAgICNkZWZpbmUgbG9zZSh4KSAoMSArICh4KSkKKzwvcHJlPgorICAgICA8cD5XZSB3b3VsZCBsaWtlIDxjb2RlPmJhcihmb28pPC9jb2RlPiB0byB0dXJuIGludG8gPGNvZGU+KDEgKyAoZm9vKSk8L2NvZGU+LCB3aGljaAord291bGQgdGhlbiB0dXJuIGludG8gPGNvZGU+KDEgKyAoYSxiKSk8L2NvZGU+LiAgSW5zdGVhZCwgPGNvZGU+YmFyKGZvbyk8L2NvZGU+CitleHBhbmRzIGludG8gPGNvZGU+bG9zZShhLGIpPC9jb2RlPiwgYW5kIHlvdSBnZXQgYW4gZXJyb3IgYmVjYXVzZSA8Y29kZT5sb3NlPC9jb2RlPgorcmVxdWlyZXMgYSBzaW5nbGUgYXJndW1lbnQuICBJbiB0aGlzIGNhc2UsIHRoZSBwcm9ibGVtIGlzIGVhc2lseSBzb2x2ZWQKK2J5IHRoZSBzYW1lIHBhcmVudGhlc2VzIHRoYXQgb3VnaHQgdG8gYmUgdXNlZCB0byBwcmV2ZW50IG1pc25lc3Rpbmcgb2YKK2FyaXRobWV0aWMgb3BlcmF0aW9uczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjZGVmaW5lIGZvbyAoYSxiKQorICAgICA8YnI+b3I8YnI+CisgICAgICAgICAgI2RlZmluZSBiYXIoeCkgbG9zZSgoeCkpCis8L3ByZT4KKyAgICAgPHA+VGhlIGV4dHJhIHBhaXIgb2YgcGFyZW50aGVzZXMgcHJldmVudHMgdGhlIGNvbW1hIGluIDxjb2RlPmZvbzwvY29kZT4ncworZGVmaW5pdGlvbiBmcm9tIGJlaW5nIGludGVycHJldGVkIGFzIGFuIGFyZ3VtZW50IHNlcGFyYXRvci4KKworICAgPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9DXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ18wMDJiXzAwMmItTmFtZWQtT3BlcmF0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyYjM5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ18wMDJiXzAwMmItTmFtZWQtT3BlcmF0b3JzLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QysrIE5hbWVkIE9wZXJhdG9ycyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1ByZWRlZmluZWQtTWFjcm9zIiB0aXRsZT0iUHJlZGVmaW5lZCBNYWNyb3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3JvcyIgdGl0bGU9IlN5c3RlbS1zcGVjaWZpYyBQcmVkZWZpbmVkIE1hY3JvcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDKystTmFtZWQtT3BlcmF0b3JzIj48L2E+Cis8YSBuYW1lPSJDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3JvcyI+U3lzdGVtLXNwZWNpZmljIFByZWRlZmluZWQgTWFjcm9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNQcmVkZWZpbmVkLU1hY3JvcyI+UHJlZGVmaW5lZCBNYWNyb3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjcuNCBDKysgTmFtZWQgT3BlcmF0b3JzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbmFtZWQtb3BlcmF0b3JzLTY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ18wMDJiXzAwMmItbmFtZWQtb3BlcmF0b3JzLTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBmaWxlXzAwN2Jpc282NDZfMDAyZWhfMDA3ZC02NyI+PC9hPgorSW4gQysrLCB0aGVyZSBhcmUgZWxldmVuIGtleXdvcmRzIHdoaWNoIGFyZSBzaW1wbHkgYWx0ZXJuYXRlIHNwZWxsaW5ncworb2Ygb3BlcmF0b3JzIG5vcm1hbGx5IHdyaXR0ZW4gd2l0aCBwdW5jdHVhdGlvbi4gIFRoZXNlIGtleXdvcmRzIGFyZQordHJlYXRlZCBhcyBzdWNoIGV2ZW4gaW4gdGhlIHByZXByb2Nlc3Nvci4gIFRoZXkgZnVuY3Rpb24gYXMgb3BlcmF0b3JzIGluCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIHRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgbWFjcm9zIG9yIHBvaXNvbmVkLiAgSW4gQywgeW91CitjYW4gcmVxdWVzdCB0aGF0IHRob3NlIGtleXdvcmRzIHRha2UgdGhlaXIgQysrIG1lYW5pbmcgYnkgaW5jbHVkaW5nCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+aXNvNjQ2Lmg8L3NwYW4+PC9zYW1wPi4gIFRoYXQgaGVhZGVyIGRlZmluZXMgZWFjaCBvbmUgYXMgYSBub3JtYWwgb2JqZWN0LWxpa2UKK21hY3JvIGV4cGFuZGluZyB0byB0aGUgYXBwcm9wcmlhdGUgcHVuY3R1YXRvci4KKworICAgPHA+VGhlc2UgYXJlIHRoZSBuYW1lZCBvcGVyYXRvcnMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgcHVuY3R1YXRvcnM6CisKKyAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj5OYW1lZCBPcGVyYXRvciA8L3RkPjx0ZCB2YWxpZ249InRvcCI+UHVuY3R1YXRvcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+PGNvZGU+YW5kPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCI+PGNvZGU+JmFtcDsmYW1wOzwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPmFuZF9lcTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPiZhbXA7PTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPmJpdGFuZDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPiZhbXA7PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+PGNvZGU+Yml0b3I8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCI+PGNvZGU+fDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPmNvbXBsPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPn48L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj48Y29kZT5ub3Q8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj48Y29kZT4hPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+PGNvZGU+bm90X2VxPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCI+PGNvZGU+IT08L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIj48Y29kZT5vcjwvY29kZT4gICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIj48Y29kZT58fDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPm9yX2VxPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPnw9PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCI+PGNvZGU+eG9yPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCI+PGNvZGU+XjwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPnhvcl9lcTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiPjxjb2RlPl49PC9jb2RlPgorICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NoYXJhY3Rlci1zZXRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NoYXJhY3Rlci1zZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0ZmZiYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ2hhcmFjdGVyLXNldHMuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q2hhcmFjdGVyIHNldHMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyIgdGl0bGU9Ik92ZXJ2aWV3Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjSW5pdGlhbC1wcm9jZXNzaW5nIiB0aXRsZT0iSW5pdGlhbCBwcm9jZXNzaW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNoYXJhY3Rlci1zZXRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkluaXRpYWwtcHJvY2Vzc2luZy5odG1sI0luaXRpYWwtcHJvY2Vzc2luZyI+SW5pdGlhbCBwcm9jZXNzaW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjEgQ2hhcmFjdGVyIHNldHM8L2gzPgorCis8cD5Tb3VyY2UgY29kZSBjaGFyYWN0ZXIgc2V0IHByb2Nlc3NpbmcgaW4gQyBhbmQgcmVsYXRlZCBsYW5ndWFnZXMgaXMKK3JhdGhlciBjb21wbGljYXRlZC4gIFRoZSBDIHN0YW5kYXJkIGRpc2N1c3NlcyB0d28gY2hhcmFjdGVyIHNldHMsIGJ1dAordGhlcmUgYXJlIHJlYWxseSBhdCBsZWFzdCBmb3VyLgorCisgICA8cD5UaGUgZmlsZXMgaW5wdXQgdG8gQ1BQIG1pZ2h0IGJlIGluIGFueSBjaGFyYWN0ZXIgc2V0IGF0IGFsbC4gIENQUCdzCit2ZXJ5IGZpcnN0IGFjdGlvbiwgYmVmb3JlIGl0IGV2ZW4gbG9va3MgZm9yIGxpbmUgYm91bmRhcmllcywgaXMgdG8KK2NvbnZlcnQgdGhlIGZpbGUgaW50byB0aGUgY2hhcmFjdGVyIHNldCBpdCB1c2VzIGZvciBpbnRlcm5hbAorcHJvY2Vzc2luZy4gIFRoYXQgc2V0IGlzIHdoYXQgdGhlIEMgc3RhbmRhcmQgY2FsbHMgdGhlIDxkZm4+c291cmNlPC9kZm4+CitjaGFyYWN0ZXIgc2V0LiAgSXQgbXVzdCBiZSBpc29tb3JwaGljIHdpdGggSVNPIDEwNjQ2LCBhbHNvIGtub3duIGFzCitVbmljb2RlLiAgQ1BQIHVzZXMgdGhlIFVURi04IGVuY29kaW5nIG9mIFVuaWNvZGUuCisKKyAgIDxwPlRoZSBjaGFyYWN0ZXIgc2V0cyBvZiB0aGUgaW5wdXQgZmlsZXMgYXJlIHNwZWNpZmllZCB1c2luZyB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1maW5wdXQtY2hhcnNldD08L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgIDxwPkFsbCBwcmVwcm9jZXNzaW5nIHdvcmsgKHRoZSBzdWJqZWN0IG9mIHRoZSByZXN0IG9mIHRoaXMgbWFudWFsKSBpcworY2FycmllZCBvdXQgaW4gdGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0LiAgSWYgeW91IHJlcXVlc3QgdGV4dHVhbAorb3V0cHV0IGZyb20gdGhlIHByZXByb2Nlc3NvciB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRTwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgaXQgd2lsbCBiZQoraW4gVVRGLTguCisKKyAgIDxwPkFmdGVyIHByZXByb2Nlc3NpbmcgaXMgY29tcGxldGUsIHN0cmluZyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cyBhcmUKK2NvbnZlcnRlZCBhZ2FpbiwgaW50byB0aGUgPGRmbj5leGVjdXRpb248L2Rmbj4gY2hhcmFjdGVyIHNldC4gIFRoaXMKK2NoYXJhY3RlciBzZXQgaXMgdW5kZXIgY29udHJvbCBvZiB0aGUgdXNlcjsgdGhlIGRlZmF1bHQgaXMgVVRGLTgsCittYXRjaGluZyB0aGUgc291cmNlIGNoYXJhY3RlciBzZXQuICBXaWRlIHN0cmluZyBhbmQgY2hhcmFjdGVyCitjb25zdGFudHMgaGF2ZSB0aGVpciBvd24gY2hhcmFjdGVyIHNldCwgd2hpY2ggaXMgbm90IGNhbGxlZCBvdXQKK3NwZWNpZmljYWxseSBpbiB0aGUgc3RhbmRhcmQuICBBZ2FpbiwgaXQgaXMgdW5kZXIgY29udHJvbCBvZiB0aGUgdXNlci4gCitUaGUgZGVmYXVsdCBpcyBVVEYtMTYgb3IgVVRGLTMyLCB3aGljaGV2ZXIgZml0cyBpbiB0aGUgdGFyZ2V0J3MKKzxjb2RlPndjaGFyX3Q8L2NvZGU+IHR5cGUsIGluIHRoZSB0YXJnZXQgbWFjaGluZSdzIGJ5dGUKK29yZGVyLjxhIHJlbD0iZm9vdG5vdGUiIGhyZWY9IiNmbi0xIiBuYW1lPSJmbmQtMSI+PHN1cD4xPC9zdXA+PC9hPiAgT2N0YWwgYW5kIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZXMgZG8gbm90IHVuZGVyZ28KK2NvbnZlcnNpb247IDx0dD4nXHgxMic8L3R0PiBoYXMgdGhlIHZhbHVlIDB4MTIgcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudGx5CitzZWxlY3RlZCBleGVjdXRpb24gY2hhcmFjdGVyIHNldC4gIEFsbCBvdGhlciBlc2NhcGVzIGFyZSByZXBsYWNlZCBieQordGhlIGNoYXJhY3RlciBpbiB0aGUgc291cmNlIGNoYXJhY3RlciBzZXQgdGhhdCB0aGV5IHJlcHJlc2VudCwgdGhlbgorY29udmVydGVkIHRvIHRoZSBleGVjdXRpb24gY2hhcmFjdGVyIHNldCwganVzdCBsaWtlIHVuZXNjYXBlZAorY2hhcmFjdGVycy4KKworICAgPHA+VW5sZXNzIHRoZSBleHBlcmltZW50YWwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZleHRlbmRlZC1pZGVudGlmaWVyczwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyB1c2VkLAorR0NDIGRvZXMgbm90IHBlcm1pdCB0aGUgdXNlIG9mIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgQVNDSUkgcmFuZ2UsIG5vcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cdTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cVTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlc2NhcGVzLCBpbiBpZGVudGlmaWVycy4gIEV2ZW4gd2l0aCB0aGF0CitvcHRpb24sIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgQVNDSUkgcmFuZ2UgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIHdpdGgKK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlx1PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlxVPC9zcGFuPjwvc2FtcD4mcnNxdW87IGVzY2FwZXMsIG5vdCB1c2VkIGRpcmVjdGx5IGluIGlkZW50aWZpZXJzLgorCisgICA8ZGl2IGNsYXNzPSJmb290bm90ZSI+Cis8aHI+Cis8aDQ+Rm9vdG5vdGVzPC9oND48cCBjbGFzcz0iZm9vdG5vdGUiPjxzbWFsbD5bPGEgbmFtZT0iZm4tMSIgaHJlZj0iI2ZuZC0xIj4xPC9hPl08L3NtYWxsPiBVVEYtMTYgZG9lcyBub3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBDCitzdGFuZGFyZCBmb3IgYSB3aWRlIGNoYXJhY3RlciBzZXQsIGJ1dCB0aGUgY2hvaWNlIG9mIDE2LWJpdAorPGNvZGU+d2NoYXJfdDwvY29kZT4gaXMgZW5zaHJpbmVkIGluIHNvbWUgc3lzdGVtIEFCSXMgc28gd2UgY2Fubm90IGZpeAordGhpcy48L3A+CisKKyAgIDxocj48L2Rpdj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Db21tb24tUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ29tbW9uLVByZWRlZmluZWQtTWFjcm9zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZiYzM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ29tbW9uLVByZWRlZmluZWQtTWFjcm9zLmh0bWwKQEAgLTAsMCArMSwzNDggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbW1vbiBQcmVkZWZpbmVkIE1hY3JvcyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1ByZWRlZmluZWQtTWFjcm9zIiB0aXRsZT0iUHJlZGVmaW5lZCBNYWNyb3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1N0YW5kYXJkLVByZWRlZmluZWQtTWFjcm9zIiB0aXRsZT0iU3RhbmRhcmQgUHJlZGVmaW5lZCBNYWNyb3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3JvcyIgdGl0bGU9IlN5c3RlbS1zcGVjaWZpYyBQcmVkZWZpbmVkIE1hY3JvcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb21tb24tUHJlZGVmaW5lZC1NYWNyb3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1N5c3RlbV8wMDJkc3BlY2lmaWMtUHJlZGVmaW5lZC1NYWNyb3MiPlN5c3RlbS1zcGVjaWZpYyBQcmVkZWZpbmVkIE1hY3JvczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN0YW5kYXJkLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjU3RhbmRhcmQtUHJlZGVmaW5lZC1NYWNyb3MiPlN0YW5kYXJkIFByZWRlZmluZWQgTWFjcm9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNQcmVkZWZpbmVkLU1hY3JvcyI+UHJlZGVmaW5lZCBNYWNyb3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjcuMiBDb21tb24gUHJlZGVmaW5lZCBNYWNyb3M8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1jb21tb24tcHJlZGVmaW5lZC1tYWNyb3MtNjEiPjwvYT4KK1RoZSBjb21tb24gcHJlZGVmaW5lZCBtYWNyb3MgYXJlIEdOVSBDIGV4dGVuc2lvbnMuICBUaGV5IGFyZSBhdmFpbGFibGUKK3dpdGggdGhlIHNhbWUgbWVhbmluZ3MgcmVnYXJkbGVzcyBvZiB0aGUgbWFjaGluZSBvciBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB5b3UgYXJlIHVzaW5nIEdOVSBDIG9yIEdOVSBGb3J0cmFuLiAgVGhlaXIgbmFtZXMgYWxsIHN0YXJ0IHdpdGgKK2RvdWJsZSB1bmRlcnNjb3Jlcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+X19DT1VOVEVSX188L2NvZGU+PGRkPlRoaXMgbWFjcm8gZXhwYW5kcyB0byBzZXF1ZW50aWFsIGludGVncmFsIHZhbHVlcyBzdGFydGluZyBmcm9tIDAuICBJbgorY29uanVuY3Rpb24gd2l0aCB0aGUgPGNvZGU+IyM8L2NvZGU+IG9wZXJhdG9yLCB0aGlzIHByb3ZpZGVzIGEgY29udmVuaWVudCBtZWFucyB0bworZ2VuZXJhdGUgdW5pcXVlIGlkZW50aWZpZXJzLiAgQ2FyZSBtdXN0IGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0Cis8Y29kZT5fX0NPVU5URVJfXzwvY29kZT4gaXMgbm90IGV4cGFuZGVkIHByaW9yIHRvIGluY2x1c2lvbiBvZiBwcmVjb21waWxlZCBoZWFkZXJzCit3aGljaCB1c2UgaXQuICBPdGhlcndpc2UsIHRoZSBwcmVjb21waWxlZCBoZWFkZXJzIHdpbGwgbm90IGJlIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0dGT1JUUkFOX188L2NvZGU+PGRkPlRoZSBHTlUgRm9ydHJhbiBjb21waWxlciBkZWZpbmVzIHRoaXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0dOVUNfXzwvY29kZT48ZHQ+PGNvZGU+X19HTlVDX01JTk9SX188L2NvZGU+PGR0Pjxjb2RlPl9fR05VQ19QQVRDSExFVkVMX188L2NvZGU+PGRkPlRoZXNlIG1hY3JvcyBhcmUgZGVmaW5lZCBieSBhbGwgR05VIGNvbXBpbGVycyB0aGF0IHVzZSB0aGUgQworcHJlcHJvY2Vzc29yOiBDLCBDKyssIE9iamVjdGl2ZS1DIGFuZCBGb3J0cmFuLiAgVGhlaXIgdmFsdWVzIGFyZSB0aGUgbWFqb3IKK3ZlcnNpb24sIG1pbm9yIHZlcnNpb24sIGFuZCBwYXRjaCBsZXZlbCBvZiB0aGUgY29tcGlsZXIsIGFzIGludGVnZXIKK2NvbnN0YW50cy4gIEZvciBleGFtcGxlLCBHQ0MgMy4yLjEgd2lsbCBkZWZpbmUgPGNvZGU+X19HTlVDX188L2NvZGU+IHRvIDMsCis8Y29kZT5fX0dOVUNfTUlOT1JfXzwvY29kZT4gdG8gMiwgYW5kIDxjb2RlPl9fR05VQ19QQVRDSExFVkVMX188L2NvZGU+IHRvIDEuICBUaGVzZQorbWFjcm9zIGFyZSBhbHNvIGRlZmluZWQgaWYgeW91IGludm9rZSB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGx5LgorCisgICAgIDxwPjxjb2RlPl9fR05VQ19QQVRDSExFVkVMX188L2NvZGU+IGlzIG5ldyB0byBHQ0MgMy4wOyBpdCBpcyBhbHNvIHByZXNlbnQgaW4gdGhlCit3aWRlbHktdXNlZCBkZXZlbG9wbWVudCBzbmFwc2hvdHMgbGVhZGluZyB1cCB0byAzLjAgKHdoaWNoIGlkZW50aWZ5Cit0aGVtc2VsdmVzIGFzIEdDQyAyLjk2IG9yIDIuOTcsIGRlcGVuZGluZyBvbiB3aGljaCBzbmFwc2hvdCB5b3UgaGF2ZSkuCisKKyAgICAgPHA+SWYgYWxsIHlvdSBuZWVkIHRvIGtub3cgaXMgd2hldGhlciBvciBub3QgeW91ciBwcm9ncmFtIGlzIGJlaW5nIGNvbXBpbGVkCitieSBHQ0MsIG9yIGEgbm9uLUdDQyBjb21waWxlciB0aGF0IGNsYWltcyB0byBhY2NlcHQgdGhlIEdOVSBDIGRpYWxlY3RzLAoreW91IGNhbiBzaW1wbHkgdGVzdCA8Y29kZT5fX0dOVUNfXzwvY29kZT4uICBJZiB5b3UgbmVlZCB0byB3cml0ZSBjb2RlCit3aGljaCBkZXBlbmRzIG9uIGEgc3BlY2lmaWMgdmVyc2lvbiwgeW91IG11c3QgYmUgbW9yZSBjYXJlZnVsLiAgRWFjaAordGltZSB0aGUgbWlub3IgdmVyc2lvbiBpcyBpbmNyZWFzZWQsIHRoZSBwYXRjaCBsZXZlbCBpcyByZXNldCB0byB6ZXJvOworZWFjaCB0aW1lIHRoZSBtYWpvciB2ZXJzaW9uIGlzIGluY3JlYXNlZCAod2hpY2ggaGFwcGVucyByYXJlbHkpLCB0aGUKK21pbm9yIHZlcnNpb24gYW5kIHBhdGNoIGxldmVsIGFyZSByZXNldC4gIElmIHlvdSB3aXNoIHRvIHVzZSB0aGUKK3ByZWRlZmluZWQgbWFjcm9zIGRpcmVjdGx5IGluIHRoZSBjb25kaXRpb25hbCwgeW91IHdpbGwgbmVlZCB0byB3cml0ZSBpdAorbGlrZSB0aGlzOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+VGVzdCBmb3IgR0NDICZndDsgMy4yLjA8L3NwYW4+ICovCisgICAgICAgICAgI2lmIF9fR05VQ19fICZndDsgMyB8fCBcCisgICAgICAgICAgICAgIChfX0dOVUNfXyA9PSAzICZhbXA7JmFtcDsgKF9fR05VQ19NSU5PUl9fICZndDsgMiB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19HTlVDX01JTk9SX18gPT0gMiAmYW1wOyZhbXA7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0dOVUNfUEFUQ0hMRVZFTF9fICZndDsgMCkpCis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5Bbm90aGVyIGFwcHJvYWNoIGlzIHRvIHVzZSB0aGUgcHJlZGVmaW5lZCBtYWNyb3MgdG8KK2NhbGN1bGF0ZSBhIHNpbmdsZSBudW1iZXIsIHRoZW4gY29tcGFyZSB0aGF0IGFnYWluc3QgYSB0aHJlc2hvbGQ6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2RlZmluZSBHQ0NfVkVSU0lPTiAoX19HTlVDX18gKiAxMDAwMCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX0dOVUNfTUlOT1JfXyAqIDEwMCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorICAgICAgICAgIC4uLgorICAgICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+VGVzdCBmb3IgR0NDICZndDsgMy4yLjA8L3NwYW4+ICovCisgICAgICAgICAgI2lmIEdDQ19WRVJTSU9OICZndDsgMzAyMDAKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPk1hbnkgcGVvcGxlIGZpbmQgdGhpcyBmb3JtIGVhc2llciB0byB1bmRlcnN0YW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19HTlVHX188L2NvZGU+PGRkPlRoZSBHTlUgQysrIGNvbXBpbGVyIGRlZmluZXMgdGhpcy4gIFRlc3RpbmcgaXQgaXMgZXF1aXZhbGVudCB0bwordGVzdGluZyA8Y29kZT4oX19HTlVDX18mbmJzcDsmYW1wOyZhbXA7Jm5ic3A7X19jcGx1c3BsdXMpPCEtLSAvQHcgLS0+PC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fU1RSSUNUX0FOU0lfXzwvY29kZT48ZGQ+R0NDIGRlZmluZXMgdGhpcyBtYWNybyBpZiBhbmQgb25seSBpZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPiBzd2l0Y2gsIG9yIGEKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ8L3NwYW4+PC9zYW1wPiBzd2l0Y2ggc3BlY2lmeWluZyBzdHJpY3QgY29uZm9ybWFuY2UgdG8gc29tZSB2ZXJzaW9uIG9mIElTTyBDCitvciBJU08gQysrLCB3YXMgc3BlY2lmaWVkIHdoZW4gR0NDIHdhcyBpbnZva2VkLiAgSXQgaXMgZGVmaW5lZCB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorVGhpcyBtYWNybyBleGlzdHMgcHJpbWFyaWx5IHRvIGRpcmVjdCBHTlUgbGliYydzIGhlYWRlciBmaWxlcyB0bworcmVzdHJpY3QgdGhlaXIgZGVmaW5pdGlvbnMgdG8gdGhlIG1pbmltYWwgc2V0IGZvdW5kIGluIHRoZSAxOTg5IEMKK3N0YW5kYXJkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19CQVNFX0ZJTEVfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBleHBhbmRzIHRvIHRoZSBuYW1lIG9mIHRoZSBtYWluIGlucHV0IGZpbGUsIGluIHRoZSBmb3JtCitvZiBhIEMgc3RyaW5nIGNvbnN0YW50LiAgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUgdGhhdCB3YXMgc3BlY2lmaWVkCitvbiB0aGUgY29tbWFuZCBsaW5lIG9mIHRoZSBwcmVwcm9jZXNzb3Igb3IgQyBjb21waWxlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fSU5DTFVERV9MRVZFTF9fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGV4cGFuZHMgdG8gYSBkZWNpbWFsIGludGVnZXIgY29uc3RhbnQgdGhhdCByZXByZXNlbnRzIHRoZQorZGVwdGggb2YgbmVzdGluZyBpbiBpbmNsdWRlIGZpbGVzLiAgVGhlIHZhbHVlIG9mIHRoaXMgbWFjcm8gaXMKK2luY3JlbWVudGVkIG9uIGV2ZXJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIGFuZCBkZWNyZW1lbnRlZCBhdCB0aGUKK2VuZCBvZiBldmVyeSBpbmNsdWRlZCBmaWxlLiAgSXQgc3RhcnRzIG91dCBhdCAwLCBpdHMgdmFsdWUgd2l0aGluIHRoZQorYmFzZSBmaWxlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19FTEZfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkIGlmIHRoZSB0YXJnZXQgdXNlcyB0aGUgRUxGIG9iamVjdCBmb3JtYXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX1ZFUlNJT05fXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBleHBhbmRzIHRvIGEgc3RyaW5nIGNvbnN0YW50IHdoaWNoIGRlc2NyaWJlcyB0aGUgdmVyc2lvbiBvZgordGhlIGNvbXBpbGVyIGluIHVzZS4gIFlvdSBzaG91bGQgbm90IHJlbHkgb24gaXRzIGNvbnRlbnRzIGhhdmluZyBhbnkKK3BhcnRpY3VsYXIgZm9ybSwgYnV0IGl0IGNhbiBiZSBjb3VudGVkIG9uIHRvIGNvbnRhaW4gYXQgbGVhc3QgdGhlCityZWxlYXNlIG51bWJlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fT1BUSU1JWkVfXzwvY29kZT48ZHQ+PGNvZGU+X19PUFRJTUlaRV9TSVpFX188L2NvZGU+PGR0Pjxjb2RlPl9fTk9fSU5MSU5FX188L2NvZGU+PGRkPlRoZXNlIG1hY3JvcyBkZXNjcmliZSB0aGUgY29tcGlsYXRpb24gbW9kZS4gIDxjb2RlPl9fT1BUSU1JWkVfXzwvY29kZT4gaXMKK2RlZmluZWQgaW4gYWxsIG9wdGltaXppbmcgY29tcGlsYXRpb25zLiAgPGNvZGU+X19PUFRJTUlaRV9TSVpFX188L2NvZGU+IGlzCitkZWZpbmVkIGlmIHRoZSBjb21waWxlciBpcyBvcHRpbWl6aW5nIGZvciBzaXplLCBub3Qgc3BlZWQuIAorPGNvZGU+X19OT19JTkxJTkVfXzwvY29kZT4gaXMgZGVmaW5lZCBpZiBubyBmdW5jdGlvbnMgd2lsbCBiZSBpbmxpbmVkIGludG8KK3RoZWlyIGNhbGxlcnMgKHdoZW4gbm90IG9wdGltaXppbmcsIG9yIHdoZW4gaW5saW5pbmcgaGFzIGJlZW4KK3NwZWNpZmljYWxseSBkaXNhYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWlubGluZTwvc3Bhbj48L3NhbXA+KS4KKworICAgICA8cD5UaGVzZSBtYWNyb3MgY2F1c2UgY2VydGFpbiBHTlUgaGVhZGVyIGZpbGVzIHRvIHByb3ZpZGUgb3B0aW1pemVkCitkZWZpbml0aW9ucywgdXNpbmcgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMsIG9mIHN5c3RlbSBsaWJyYXJ5CitmdW5jdGlvbnMuICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhlc2UgbWFjcm9zIGluIGFueSB3YXkgdW5sZXNzIHlvdSBtYWtlCitzdXJlIHRoYXQgcHJvZ3JhbXMgd2lsbCBleGVjdXRlIHdpdGggdGhlIHNhbWUgZWZmZWN0IHdoZXRoZXIgb3Igbm90IHRoZXkKK2FyZSBkZWZpbmVkLiAgSWYgdGhleSBhcmUgZGVmaW5lZCwgdGhlaXIgdmFsdWUgaXMgMS4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fR05VQ19HTlVfSU5MSU5FX188L2NvZGU+PGRkPkdDQyBkZWZpbmVzIHRoaXMgbWFjcm8gaWYgZnVuY3Rpb25zIGRlY2xhcmVkIDxjb2RlPmlubGluZTwvY29kZT4gd2lsbCBiZQoraGFuZGxlZCBpbiBHQ0MncyB0cmFkaXRpb25hbCBnbnU5MCBtb2RlLiAgT2JqZWN0IGZpbGVzIHdpbGwgY29udGFpbgorZXh0ZXJuYWxseSB2aXNpYmxlIGRlZmluaXRpb25zIG9mIGFsbCBmdW5jdGlvbnMgZGVjbGFyZWQgPGNvZGU+aW5saW5lPC9jb2RlPgord2l0aG91dCA8Y29kZT5leHRlcm48L2NvZGU+IG9yIDxjb2RlPnN0YXRpYzwvY29kZT4uICBUaGV5IHdpbGwgbm90IGNvbnRhaW4gYW55CitkZWZpbml0aW9ucyBvZiBhbnkgZnVuY3Rpb25zIGRlY2xhcmVkIDxjb2RlPmV4dGVybiBpbmxpbmU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19HTlVDX1NURENfSU5MSU5FX188L2NvZGU+PGRkPkdDQyBkZWZpbmVzIHRoaXMgbWFjcm8gaWYgZnVuY3Rpb25zIGRlY2xhcmVkIDxjb2RlPmlubGluZTwvY29kZT4gd2lsbCBiZQoraGFuZGxlZCBhY2NvcmRpbmcgdG8gdGhlIElTTyBDOTkgc3RhbmRhcmQuICBPYmplY3QgZmlsZXMgd2lsbCBjb250YWluCitleHRlcm5hbGx5IHZpc2libGUgZGVmaW5pdGlvbnMgb2YgYWxsIGZ1bmN0aW9ucyBkZWNsYXJlZCA8Y29kZT5leHRlcm4KK2lubGluZTwvY29kZT4uICBUaGV5IHdpbGwgbm90IGNvbnRhaW4gZGVmaW5pdGlvbnMgb2YgYW55IGZ1bmN0aW9ucyBkZWNsYXJlZAorPGNvZGU+aW5saW5lPC9jb2RlPiB3aXRob3V0IDxjb2RlPmV4dGVybjwvY29kZT4uCisKKyAgICAgPHA+SWYgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBHQ0Mgc3VwcG9ydHMgdGhlIDxjb2RlPmdudV9pbmxpbmU8L2NvZGU+IGZ1bmN0aW9uCithdHRyaWJ1dGUgYXMgYSB3YXkgdG8gYWx3YXlzIGdldCB0aGUgZ251OTAgYmVoYXZpb3IuICBTdXBwb3J0IGZvcgordGhpcyBhbmQgPGNvZGU+X19HTlVDX0dOVV9JTkxJTkVfXzwvY29kZT4gd2FzIGFkZGVkIGluIEdDQyA0LjEuMy4gIElmCituZWl0aGVyIG1hY3JvIGlzIGRlZmluZWQsIGFuIG9sZGVyIHZlcnNpb24gb2YgR0NDIGlzIGJlaW5nIHVzZWQ6Cis8Y29kZT5pbmxpbmU8L2NvZGU+IGZ1bmN0aW9ucyB3aWxsIGJlIGNvbXBpbGVkIGluIGdudTkwIG1vZGUsIGFuZCB0aGUKKzxjb2RlPmdudV9pbmxpbmU8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZSB3aWxsIG5vdCBiZSByZWNvZ25pemVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19DSEFSX1VOU0lHTkVEX188L2NvZGU+PGRkPkdDQyBkZWZpbmVzIHRoaXMgbWFjcm8gaWYgYW5kIG9ubHkgaWYgdGhlIGRhdGEgdHlwZSA8Y29kZT5jaGFyPC9jb2RlPiBpcwordW5zaWduZWQgb24gdGhlIHRhcmdldCBtYWNoaW5lLiAgSXQgZXhpc3RzIHRvIGNhdXNlIHRoZSBzdGFuZGFyZCBoZWFkZXIKK2ZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpbWl0cy5oPC9zcGFuPjwvc2FtcD4gdG8gd29yayBjb3JyZWN0bHkuICBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBtYWNybworeW91cnNlbGY7IGluc3RlYWQsIHJlZmVyIHRvIHRoZSBzdGFuZGFyZCBtYWNyb3MgZGVmaW5lZCBpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGltaXRzLmg8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fV0NIQVJfVU5TSUdORURfXzwvY29kZT48ZGQ+TGlrZSA8Y29kZT5fX0NIQVJfVU5TSUdORURfXzwvY29kZT4sIHRoaXMgbWFjcm8gaXMgZGVmaW5lZCBpZiBhbmQgb25seSBpZiB0aGUKK2RhdGEgdHlwZSA8Y29kZT53Y2hhcl90PC9jb2RlPiBpcyB1bnNpZ25lZCBhbmQgdGhlIGZyb250LWVuZCBpcyBpbiBDKysgbW9kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fUkVHSVNURVJfUFJFRklYX188L2NvZGU+PGRkPlRoaXMgbWFjcm8gZXhwYW5kcyB0byBhIHNpbmdsZSB0b2tlbiAobm90IGEgc3RyaW5nIGNvbnN0YW50KSB3aGljaCBpcwordGhlIHByZWZpeCBhcHBsaWVkIHRvIENQVSByZWdpc3RlciBuYW1lcyBpbiBhc3NlbWJseSBsYW5ndWFnZSBmb3IgdGhpcwordGFyZ2V0LiAgWW91IGNhbiB1c2UgaXQgdG8gd3JpdGUgYXNzZW1ibHkgdGhhdCBpcyB1c2FibGUgaW4gbXVsdGlwbGUKK2Vudmlyb25tZW50cy4gIEZvciBleGFtcGxlLCBpbiB0aGUgPGNvZGU+bTY4ay1hb3V0PC9jb2RlPiBlbnZpcm9ubWVudCBpdAorZXhwYW5kcyB0byBub3RoaW5nLCBidXQgaW4gdGhlIDxjb2RlPm02OGstY29mZjwvY29kZT4gZW52aXJvbm1lbnQgaXQgZXhwYW5kcwordG8gYSBzaW5nbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19VU0VSX0xBQkVMX1BSRUZJWF9fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGV4cGFuZHMgdG8gYSBzaW5nbGUgdG9rZW4gd2hpY2ggaXMgdGhlIHByZWZpeCBhcHBsaWVkIHRvCit1c2VyIGxhYmVscyAoc3ltYm9scyB2aXNpYmxlIHRvIEMgY29kZSkgaW4gYXNzZW1ibHkuICBGb3IgZXhhbXBsZSwgaW4KK3RoZSA8Y29kZT5tNjhrLWFvdXQ8L2NvZGU+IGVudmlyb25tZW50IGl0IGV4cGFuZHMgdG8gYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBidXQgaW4gdGhlCis8Y29kZT5tNjhrLWNvZmY8L2NvZGU+IGVudmlyb25tZW50IGl0IGV4cGFuZHMgdG8gbm90aGluZy4KKworICAgICA8cD5UaGlzIG1hY3JvIHdpbGwgaGF2ZSB0aGUgY29ycmVjdCBkZWZpbml0aW9uIGV2ZW4gaWYKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mKG5vLSl1bmRlcnNjb3Jlczwvc3Bhbj48L3NhbXA+IGlzIGluIHVzZSwgYnV0IGl0IHdpbGwgbm90IGJlIGNvcnJlY3QgaWYKK3RhcmdldC1zcGVjaWZpYyBvcHRpb25zIHRoYXQgYWRqdXN0IHRoaXMgcHJlZml4IGFyZSB1c2VkIChlLmcuIHRoZQorT1NGL3Jvc2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby11bmRlcnNjb3Jlczwvc3Bhbj48L3NhbXA+IG9wdGlvbikuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX1NJWkVfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1BUUkRJRkZfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1dDSEFSX1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19XSU5UX1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRNQVhfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlRNQVhfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1NJR19BVE9NSUNfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX0lOVDhfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX0lOVDE2X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlQzMl9UWVBFX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UNjRfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlQ4X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19VSU5UMTZfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlQzMl9UWVBFX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVDY0X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRfTEVBU1Q4X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRfTEVBU1QxNl9UWVBFX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UX0xFQVNUMzJfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX0lOVF9MRUFTVDY0X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19VSU5UX0xFQVNUOF9UWVBFX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVF9MRUFTVDE2X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19VSU5UX0xFQVNUMzJfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlRfTEVBU1Q2NF9UWVBFX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UX0ZBU1Q4X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRfRkFTVDE2X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRfRkFTVDMyX1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRfRkFTVDY0X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19VSU5UX0ZBU1Q4X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19VSU5UX0ZBU1QxNl9UWVBFX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVF9GQVNUMzJfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlRfRkFTVDY0X1RZUEVfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRQVFJfVFlQRV9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlRQVFJfVFlQRV9fPC9jb2RlPjxkZD5UaGVzZSBtYWNyb3MgYXJlIGRlZmluZWQgdG8gdGhlIGNvcnJlY3QgdW5kZXJseWluZyB0eXBlcyBmb3IgdGhlCis8Y29kZT5zaXplX3Q8L2NvZGU+LCA8Y29kZT5wdHJkaWZmX3Q8L2NvZGU+LCA8Y29kZT53Y2hhcl90PC9jb2RlPiwgPGNvZGU+d2ludF90PC9jb2RlPiwKKzxjb2RlPmludG1heF90PC9jb2RlPiwgPGNvZGU+dWludG1heF90PC9jb2RlPiwgPGNvZGU+c2lnX2F0b21pY190PC9jb2RlPiwgPGNvZGU+aW50OF90PC9jb2RlPiwKKzxjb2RlPmludDE2X3Q8L2NvZGU+LCA8Y29kZT5pbnQzMl90PC9jb2RlPiwgPGNvZGU+aW50NjRfdDwvY29kZT4sIDxjb2RlPnVpbnQ4X3Q8L2NvZGU+LAorPGNvZGU+dWludDE2X3Q8L2NvZGU+LCA8Y29kZT51aW50MzJfdDwvY29kZT4sIDxjb2RlPnVpbnQ2NF90PC9jb2RlPiwKKzxjb2RlPmludF9sZWFzdDhfdDwvY29kZT4sIDxjb2RlPmludF9sZWFzdDE2X3Q8L2NvZGU+LCA8Y29kZT5pbnRfbGVhc3QzMl90PC9jb2RlPiwKKzxjb2RlPmludF9sZWFzdDY0X3Q8L2NvZGU+LCA8Y29kZT51aW50X2xlYXN0OF90PC9jb2RlPiwgPGNvZGU+dWludF9sZWFzdDE2X3Q8L2NvZGU+LAorPGNvZGU+dWludF9sZWFzdDMyX3Q8L2NvZGU+LCA8Y29kZT51aW50X2xlYXN0NjRfdDwvY29kZT4sIDxjb2RlPmludF9mYXN0OF90PC9jb2RlPiwKKzxjb2RlPmludF9mYXN0MTZfdDwvY29kZT4sIDxjb2RlPmludF9mYXN0MzJfdDwvY29kZT4sIDxjb2RlPmludF9mYXN0NjRfdDwvY29kZT4sCis8Y29kZT51aW50X2Zhc3Q4X3Q8L2NvZGU+LCA8Y29kZT51aW50X2Zhc3QxNl90PC9jb2RlPiwgPGNvZGU+dWludF9mYXN0MzJfdDwvY29kZT4sCis8Y29kZT51aW50X2Zhc3Q2NF90PC9jb2RlPiwgPGNvZGU+aW50cHRyX3Q8L2NvZGU+LCBhbmQgPGNvZGU+dWludHB0cl90PC9jb2RlPiB0eXBlZGVmcywKK3Jlc3BlY3RpdmVseS4gIFRoZXkgZXhpc3QgdG8gbWFrZSB0aGUgc3RhbmRhcmQgaGVhZGVyIGZpbGVzCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkZGVmLmg8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGludC5oPC9zcGFuPjwvc2FtcD4sIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+d2NoYXIuaDwvc3Bhbj48L3NhbXA+IHdvcmsgY29ycmVjdGx5LiAKK1lvdSBzaG91bGQgbm90IHVzZSB0aGVzZSBtYWNyb3MgZGlyZWN0bHk7IGluc3RlYWQsIGluY2x1ZGUgdGhlCithcHByb3ByaWF0ZSBoZWFkZXJzIGFuZCB1c2UgdGhlIHR5cGVkZWZzLiAgU29tZSBvZiB0aGVzZSBtYWNyb3MgbWF5Citub3QgYmUgZGVmaW5lZCBvbiBwYXJ0aWN1bGFyIHN5c3RlbXMgaWYgR0NDIGRvZXMgbm90IHByb3ZpZGUgYQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGludC5oPC9zcGFuPjwvc2FtcD4gaGVhZGVyIG9uIHRob3NlIHN5c3RlbXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0NIQVJfQklUX188L2NvZGU+PGRkPkRlZmluZWQgdG8gdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgaW4gdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorPGNvZGU+Y2hhcjwvY29kZT4gZGF0YSB0eXBlLiAgSXQgZXhpc3RzIHRvIG1ha2UgdGhlIHN0YW5kYXJkIGhlYWRlciBnaXZlbgorbnVtZXJpY2FsIGxpbWl0cyB3b3JrIGNvcnJlY3RseS4gIFlvdSBzaG91bGQgbm90IHVzZQordGhpcyBtYWNybyBkaXJlY3RseTsgaW5zdGVhZCwgaW5jbHVkZSB0aGUgYXBwcm9wcmlhdGUgaGVhZGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fU0NIQVJfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fV0NIQVJfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fU0hSVF9NQVhfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fTE9OR19NQVhfXzwvY29kZT48ZHQ+PGNvZGU+X19MT05HX0xPTkdfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fV0lOVF9NQVhfXzwvY29kZT48ZHQ+PGNvZGU+X19TSVpFX01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX1BUUkRJRkZfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UTUFYX01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlRNQVhfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fU0lHX0FUT01JQ19NQVhfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlQ4X01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX0lOVDE2X01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX0lOVDMyX01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX0lOVDY0X01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlQ4X01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlQxNl9NQVhfXzwvY29kZT48ZHQ+PGNvZGU+X19VSU5UMzJfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVDY0X01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX0lOVF9MRUFTVDhfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UX0xFQVNUMTZfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UX0xFQVNUMzJfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UX0xFQVNUNjRfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVF9MRUFTVDhfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVF9MRUFTVDE2X01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlRfTEVBU1QzMl9NQVhfXzwvY29kZT48ZHQ+PGNvZGU+X19VSU5UX0xFQVNUNjRfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UX0ZBU1Q4X01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX0lOVF9GQVNUMTZfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UX0ZBU1QzMl9NQVhfXzwvY29kZT48ZHQ+PGNvZGU+X19JTlRfRkFTVDY0X01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlRfRkFTVDhfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVF9GQVNUMTZfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVF9GQVNUMzJfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVF9GQVNUNjRfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fSU5UUFRSX01BWF9fPC9jb2RlPjxkdD48Y29kZT5fX1VJTlRQVFJfTUFYX188L2NvZGU+PGR0Pjxjb2RlPl9fV0NIQVJfTUlOX188L2NvZGU+PGR0Pjxjb2RlPl9fV0lOVF9NSU5fXzwvY29kZT48ZHQ+PGNvZGU+X19TSUdfQVRPTUlDX01JTl9fPC9jb2RlPjxkZD5EZWZpbmVkIHRvIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSA8Y29kZT5zaWduZWQgY2hhcjwvY29kZT4sIDxjb2RlPndjaGFyX3Q8L2NvZGU+LAorPGNvZGU+c2lnbmVkIHNob3J0PC9jb2RlPiwKKzxjb2RlPnNpZ25lZCBpbnQ8L2NvZGU+LCA8Y29kZT5zaWduZWQgbG9uZzwvY29kZT4sIDxjb2RlPnNpZ25lZCBsb25nIGxvbmc8L2NvZGU+LAorPGNvZGU+d2ludF90PC9jb2RlPiwgPGNvZGU+c2l6ZV90PC9jb2RlPiwgPGNvZGU+cHRyZGlmZl90PC9jb2RlPiwKKzxjb2RlPmludG1heF90PC9jb2RlPiwgPGNvZGU+dWludG1heF90PC9jb2RlPiwgPGNvZGU+c2lnX2F0b21pY190PC9jb2RlPiwgPGNvZGU+aW50OF90PC9jb2RlPiwKKzxjb2RlPmludDE2X3Q8L2NvZGU+LCA8Y29kZT5pbnQzMl90PC9jb2RlPiwgPGNvZGU+aW50NjRfdDwvY29kZT4sIDxjb2RlPnVpbnQ4X3Q8L2NvZGU+LAorPGNvZGU+dWludDE2X3Q8L2NvZGU+LCA8Y29kZT51aW50MzJfdDwvY29kZT4sIDxjb2RlPnVpbnQ2NF90PC9jb2RlPiwKKzxjb2RlPmludF9sZWFzdDhfdDwvY29kZT4sIDxjb2RlPmludF9sZWFzdDE2X3Q8L2NvZGU+LCA8Y29kZT5pbnRfbGVhc3QzMl90PC9jb2RlPiwKKzxjb2RlPmludF9sZWFzdDY0X3Q8L2NvZGU+LCA8Y29kZT51aW50X2xlYXN0OF90PC9jb2RlPiwgPGNvZGU+dWludF9sZWFzdDE2X3Q8L2NvZGU+LAorPGNvZGU+dWludF9sZWFzdDMyX3Q8L2NvZGU+LCA8Y29kZT51aW50X2xlYXN0NjRfdDwvY29kZT4sIDxjb2RlPmludF9mYXN0OF90PC9jb2RlPiwKKzxjb2RlPmludF9mYXN0MTZfdDwvY29kZT4sIDxjb2RlPmludF9mYXN0MzJfdDwvY29kZT4sIDxjb2RlPmludF9mYXN0NjRfdDwvY29kZT4sCis8Y29kZT51aW50X2Zhc3Q4X3Q8L2NvZGU+LCA8Y29kZT51aW50X2Zhc3QxNl90PC9jb2RlPiwgPGNvZGU+dWludF9mYXN0MzJfdDwvY29kZT4sCis8Y29kZT51aW50X2Zhc3Q2NF90PC9jb2RlPiwgPGNvZGU+aW50cHRyX3Q8L2NvZGU+LCBhbmQgPGNvZGU+dWludHB0cl90PC9jb2RlPiB0eXBlcyBhbmQKK3RvIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSA8Y29kZT53Y2hhcl90PC9jb2RlPiwgPGNvZGU+d2ludF90PC9jb2RlPiwgYW5kCis8Y29kZT5zaWdfYXRvbWljX3Q8L2NvZGU+IHR5cGVzIHJlc3BlY3RpdmVseS4gIFRoZXkgZXhpc3QgdG8gbWFrZSB0aGUKK3N0YW5kYXJkIGhlYWRlciBnaXZlbiBudW1lcmljYWwgbGltaXRzIHdvcmsgY29ycmVjdGx5LiAgWW91IHNob3VsZCBub3QKK3VzZSB0aGVzZSBtYWNyb3MgZGlyZWN0bHk7IGluc3RlYWQsIGluY2x1ZGUgdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMuIAorU29tZSBvZiB0aGVzZSBtYWNyb3MgbWF5IG5vdCBiZSBkZWZpbmVkIG9uIHBhcnRpY3VsYXIgc3lzdGVtcyBpZiBHQ0MKK2RvZXMgbm90IHByb3ZpZGUgYSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkaW50Lmg8L3NwYW4+PC9zYW1wPiBoZWFkZXIgb24gdGhvc2Ugc3lzdGVtcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fSU5UOF9DPC9jb2RlPjxkdD48Y29kZT5fX0lOVDE2X0M8L2NvZGU+PGR0Pjxjb2RlPl9fSU5UMzJfQzwvY29kZT48ZHQ+PGNvZGU+X19JTlQ2NF9DPC9jb2RlPjxkdD48Y29kZT5fX1VJTlQ4X0M8L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVDE2X0M8L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVDMyX0M8L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVDY0X0M8L2NvZGU+PGR0Pjxjb2RlPl9fSU5UTUFYX0M8L2NvZGU+PGR0Pjxjb2RlPl9fVUlOVE1BWF9DPC9jb2RlPjxkZD5EZWZpbmVkIHRvIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgc3RhbmRhcmQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGludC5oPC9zcGFuPjwvc2FtcD4gbWFjcm9zIHdpdGgKK3RoZSBzYW1lIG5hbWVzIHdpdGhvdXQgdGhlIGxlYWRpbmcgPGNvZGU+X188L2NvZGU+LiAgVGhleSBleGlzdCB0aGUgbWFrZSB0aGUKK2ltcGxlbWVudGF0aW9uIG9mIHRoYXQgaGVhZGVyIHdvcmsgY29ycmVjdGx5LiAgWW91IHNob3VsZCBub3QgdXNlCit0aGVzZSBtYWNyb3MgZGlyZWN0bHk7IGluc3RlYWQsIGluY2x1ZGUgdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMuICBTb21lCitvZiB0aGVzZSBtYWNyb3MgbWF5IG5vdCBiZSBkZWZpbmVkIG9uIHBhcnRpY3VsYXIgc3lzdGVtcyBpZiBHQ0MgZG9lcworbm90IHByb3ZpZGUgYSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkaW50Lmg8L3NwYW4+PC9zYW1wPiBoZWFkZXIgb24gdGhvc2Ugc3lzdGVtcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fU0laRU9GX0lOVF9fPC9jb2RlPjxkdD48Y29kZT5fX1NJWkVPRl9MT05HX188L2NvZGU+PGR0Pjxjb2RlPl9fU0laRU9GX0xPTkdfTE9OR19fPC9jb2RlPjxkdD48Y29kZT5fX1NJWkVPRl9TSE9SVF9fPC9jb2RlPjxkdD48Y29kZT5fX1NJWkVPRl9QT0lOVEVSX188L2NvZGU+PGR0Pjxjb2RlPl9fU0laRU9GX0ZMT0FUX188L2NvZGU+PGR0Pjxjb2RlPl9fU0laRU9GX0RPVUJMRV9fPC9jb2RlPjxkdD48Y29kZT5fX1NJWkVPRl9MT05HX0RPVUJMRV9fPC9jb2RlPjxkdD48Y29kZT5fX1NJWkVPRl9TSVpFX1RfXzwvY29kZT48ZHQ+PGNvZGU+X19TSVpFT0ZfV0NIQVJfVF9fPC9jb2RlPjxkdD48Y29kZT5fX1NJWkVPRl9XSU5UX1RfXzwvY29kZT48ZHQ+PGNvZGU+X19TSVpFT0ZfUFRSRElGRl9UX188L2NvZGU+PGRkPkRlZmluZWQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBvZiB0aGUgQyBzdGFuZGFyZCBkYXRhIHR5cGVzOiA8Y29kZT5pbnQ8L2NvZGU+LAorPGNvZGU+bG9uZzwvY29kZT4sIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4sIDxjb2RlPnNob3J0PC9jb2RlPiwgPGNvZGU+dm9pZCAqPC9jb2RlPiwgPGNvZGU+ZmxvYXQ8L2NvZGU+LAorPGNvZGU+ZG91YmxlPC9jb2RlPiwgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+LCA8Y29kZT5zaXplX3Q8L2NvZGU+LCA8Y29kZT53Y2hhcl90PC9jb2RlPiwgPGNvZGU+d2ludF90PC9jb2RlPgorYW5kIDxjb2RlPnB0cmRpZmZfdDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0JZVEVfT1JERVJfXzwvY29kZT48ZHQ+PGNvZGU+X19PUkRFUl9MSVRUTEVfRU5ESUFOX188L2NvZGU+PGR0Pjxjb2RlPl9fT1JERVJfQklHX0VORElBTl9fPC9jb2RlPjxkdD48Y29kZT5fX09SREVSX1BEUF9FTkRJQU5fXzwvY29kZT48ZGQ+PGNvZGU+X19CWVRFX09SREVSX188L2NvZGU+IGlzIGRlZmluZWQgdG8gb25lIG9mIHRoZSB2YWx1ZXMKKzxjb2RlPl9fT1JERVJfTElUVExFX0VORElBTl9fPC9jb2RlPiwgPGNvZGU+X19PUkRFUl9CSUdfRU5ESUFOX188L2NvZGU+LCBvcgorPGNvZGU+X19PUkRFUl9QRFBfRU5ESUFOX188L2NvZGU+IHRvIHJlZmxlY3QgdGhlIGxheW91dCBvZiBtdWx0aS1ieXRlIGFuZAorbXVsdGktd29yZCBxdWFudGl0aWVzIGluIG1lbW9yeS4gIElmIDxjb2RlPl9fQllURV9PUkRFUl9fPC9jb2RlPiBpcyBlcXVhbCB0bworPGNvZGU+X19PUkRFUl9MSVRUTEVfRU5ESUFOX188L2NvZGU+IG9yIDxjb2RlPl9fT1JERVJfQklHX0VORElBTl9fPC9jb2RlPiwgdGhlbgorbXVsdGktYnl0ZSBhbmQgbXVsdGktd29yZCBxdWFudGl0aWVzIGFyZSBsYWlkIG91dCBpZGVudGljYWxseTogdGhlCitieXRlICh3b3JkKSBhdCB0aGUgbG93ZXN0IGFkZHJlc3MgaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IG9yIG1vc3QKK3NpZ25pZmljYW50IGJ5dGUgKHdvcmQpIG9mIHRoZSBxdWFudGl0eSwgcmVzcGVjdGl2ZWx5LiAgSWYKKzxjb2RlPl9fQllURV9PUkRFUl9fPC9jb2RlPiBpcyBlcXVhbCB0byA8Y29kZT5fX09SREVSX1BEUF9FTkRJQU5fXzwvY29kZT4sIHRoZW4KK2J5dGVzIGluIDE2LWJpdCB3b3JkcyBhcmUgbGFpZCBvdXQgaW4gYSBsaXR0bGUtZW5kaWFuIGZhc2hpb24sIHdoZXJlYXMKK3RoZSAxNi1iaXQgc3Vid29yZHMgb2YgYSAzMi1iaXQgcXVhbnRpdHkgYXJlIGxhaWQgb3V0IGluIGJpZy1lbmRpYW4KK2Zhc2hpb24uCisKKyAgICAgPHA+WW91IHNob3VsZCB1c2UgdGhlc2UgbWFjcm9zIGZvciB0ZXN0aW5nIGxpa2UgdGhpczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPlRlc3QgZm9yIGEgbGl0dGxlLWVuZGlhbiBtYWNoaW5lPC9zcGFuPiAqLworICAgICAgICAgICNpZiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+X19GTE9BVF9XT1JEX09SREVSX188L2NvZGU+PGRkPjxjb2RlPl9fRkxPQVRfV09SRF9PUkRFUl9fPC9jb2RlPiBpcyBkZWZpbmVkIHRvIG9uZSBvZiB0aGUgdmFsdWVzCis8Y29kZT5fX09SREVSX0xJVFRMRV9FTkRJQU5fXzwvY29kZT4gb3IgPGNvZGU+X19PUkRFUl9CSUdfRU5ESUFOX188L2NvZGU+IHRvIHJlZmxlY3QKK3RoZSBsYXlvdXQgb2YgdGhlIHdvcmRzIG9mIG11bHRpLXdvcmQgZmxvYXRpbmctcG9pbnQgcXVhbnRpdGllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fREVQUkVDQVRFRDwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkLCB3aXRoIHZhbHVlIDEsIHdoZW4gY29tcGlsaW5nIGEgQysrIHNvdXJjZSBmaWxlCit3aXRoIHdhcm5pbmdzIGFib3V0IGRlcHJlY2F0ZWQgY29uc3RydWN0cyBlbmFibGVkLiAgVGhlc2Ugd2FybmluZ3MgYXJlCitlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLWRlcHJlY2F0ZWQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fRVhDRVBUSU9OUzwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkLCB3aXRoIHZhbHVlIDEsIHdoZW4gY29tcGlsaW5nIGEgQysrIHNvdXJjZSBmaWxlCit3aXRoIGV4Y2VwdGlvbnMgZW5hYmxlZC4gIElmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZXhjZXB0aW9uczwvc3Bhbj48L3NhbXA+IGlzIHVzZWQgd2hlbgorY29tcGlsaW5nIHRoZSBmaWxlLCB0aGVuIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0dYWF9SVFRJPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGlzIGRlZmluZWQsIHdpdGggdmFsdWUgMSwgd2hlbiBjb21waWxpbmcgYSBDKysgc291cmNlIGZpbGUKK3dpdGggcnVudGltZSB0eXBlIGlkZW50aWZpY2F0aW9uIGVuYWJsZWQuICBJZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXJ0dGk8L3NwYW4+PC9zYW1wPiBpcwordXNlZCB3aGVuIGNvbXBpbGluZyB0aGUgZmlsZSwgdGhlbiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19VU0lOR19TSkxKX0VYQ0VQVElPTlNfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkLCB3aXRoIHZhbHVlIDEsIGlmIHRoZSBjb21waWxlciB1c2VzIHRoZSBvbGQKK21lY2hhbmlzbSBiYXNlZCBvbiA8Y29kZT5zZXRqbXA8L2NvZGU+IGFuZCA8Y29kZT5sb25nam1wPC9jb2RlPiBmb3IgZXhjZXB0aW9uCitoYW5kbGluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fR1hYX0VYUEVSSU1FTlRBTF9DWFgwWF9fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGlzIGRlZmluZWQgd2hlbiBjb21waWxpbmcgYSBDKysgc291cmNlIGZpbGUgd2l0aCB0aGUgb3B0aW9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWMrKzB4PC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnUrKzB4PC9zcGFuPjwvc2FtcD4uIEl0IGluZGljYXRlcyB0aGF0IHNvbWUKK2ZlYXR1cmVzIGxpa2VseSB0byBiZSBpbmNsdWRlZCBpbiBDKysweCBhcmUgYXZhaWxhYmxlLiBOb3RlIHRoYXQgdGhlc2UKK2ZlYXR1cmVzIGFyZSBleHBlcmltZW50YWwsIGFuZCBtYXkgY2hhbmdlIG9yIGJlIHJlbW92ZWQgaW4gZnV0dXJlCit2ZXJzaW9ucyBvZiBHQ0MuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0dYWF9XRUFLX188L2NvZGU+PGRkPlRoaXMgbWFjcm8gaXMgZGVmaW5lZCB3aGVuIGNvbXBpbGluZyBhIEMrKyBzb3VyY2UgZmlsZS4gIEl0IGhhcyB0aGUKK3ZhbHVlIDEgaWYgdGhlIGNvbXBpbGVyIHdpbGwgdXNlIHdlYWsgc3ltYm9scywgQ09NREFUIHNlY3Rpb25zLCBvcgorb3RoZXIgc2ltaWxhciB0ZWNobmlxdWVzIHRvIGNvbGxhcHNlIHN5bWJvbHMgd2l0aCAmbGRxdW87dmFndWUgbGlua2FnZSZyZHF1bzsKK3RoYXQgYXJlIGRlZmluZWQgaW4gbXVsdGlwbGUgdHJhbnNsYXRpb24gdW5pdHMuICBJZiB0aGUgY29tcGlsZXIgd2lsbAorbm90IGNvbGxhcHNlIHN1Y2ggc3ltYm9scywgdGhpcyBtYWNybyBpcyBkZWZpbmVkIHdpdGggdmFsdWUgMC4gIEluCitnZW5lcmFsLCB1c2VyIGNvZGUgc2hvdWxkIG5vdCBuZWVkIHRvIG1ha2UgdXNlIG9mIHRoaXMgbWFjcm87IHRoZQorcHVycG9zZSBvZiB0aGlzIG1hY3JvIGlzIHRvIGVhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIEMrKyBydW50aW1lCitsaWJyYXJ5IHByb3ZpZGVkIHdpdGggRysrLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19ORVhUX1JVTlRJTUVfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkLCB3aXRoIHZhbHVlIDEsIGlmIChhbmQgb25seSBpZikgdGhlIE5lWFQgcnVudGltZQorKGFzIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbmV4dC1ydW50aW1lPC9zcGFuPjwvc2FtcD4pIGlzIGluIHVzZSBmb3IgT2JqZWN0aXZlLUMuICBJZiB0aGUgR05VCitydW50aW1lIGlzIHVzZWQsIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQsIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcworbWFjcm8gdG8gZGV0ZXJtaW5lIHdoaWNoIHJ1bnRpbWUgKE5lWFQgb3IgR05VKSBpcyBiZWluZyB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19MUDY0X188L2NvZGU+PGR0Pjxjb2RlPl9MUDY0PC9jb2RlPjxkZD5UaGVzZSBtYWNyb3MgYXJlIGRlZmluZWQsIHdpdGggdmFsdWUgMSwgaWYgKGFuZCBvbmx5IGlmKSB0aGUgY29tcGlsYXRpb24KK2lzIGZvciBhIHRhcmdldCB3aGVyZSA8Y29kZT5sb25nIGludDwvY29kZT4gYW5kIHBvaW50ZXIgYm90aCB1c2UgNjQtYml0cyBhbmQKKzxjb2RlPmludDwvY29kZT4gdXNlcyAzMi1iaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX1NTUF9fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGlzIGRlZmluZWQsIHdpdGggdmFsdWUgMSwgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0YWNrLXByb3RlY3Rvcjwvc3Bhbj48L3NhbXA+IGlzIGluCit1c2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX1NTUF9BTExfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkLCB3aXRoIHZhbHVlIDIsIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzdGFjay1wcm90ZWN0b3ItYWxsPC9zcGFuPjwvc2FtcD4gaXMKK2luIHVzZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fU0FOSVRJWkVfQUREUkVTU19fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGlzIGRlZmluZWQsIHdpdGggdmFsdWUgMSwgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNhbml0aXplPWFkZHJlc3M8L3NwYW4+PC9zYW1wPiBpcworaW4gdXNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19USU1FU1RBTVBfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBleHBhbmRzIHRvIGEgc3RyaW5nIGNvbnN0YW50IHRoYXQgZGVzY3JpYmVzIHRoZSBkYXRlIGFuZCB0aW1lCitvZiB0aGUgbGFzdCBtb2RpZmljYXRpb24gb2YgdGhlIGN1cnJlbnQgc291cmNlIGZpbGUuIFRoZSBzdHJpbmcgY29uc3RhbnQKK2NvbnRhaW5zIGFiYnJldmlhdGVkIGRheSBvZiB0aGUgd2VlaywgbW9udGgsIGRheSBvZiB0aGUgbW9udGgsIHRpbWUgaW4KK2hoOm1tOnNzIGZvcm0sIHllYXIgYW5kIGxvb2tzIGxpa2UgPGNvZGU+IlN1biZuYnNwO1NlcCZuYnNwOzE2Jm5ic3A7MDE6MDM6NTImbmJzcDsxOTczIjwhLS0gL0B3IC0tPjwvY29kZT4uIAorSWYgdGhlIGRheSBvZiB0aGUgbW9udGggaXMgbGVzcyB0aGFuIDEwLCBpdCBpcyBwYWRkZWQgd2l0aCBhIHNwYWNlIG9uIHRoZSBsZWZ0LgorCisgICAgIDxwPklmIEdDQyBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IGRhdGUsIGl0IHdpbGwgZW1pdCBhIHdhcm5pbmcgbWVzc2FnZQorKG9uY2UgcGVyIGNvbXBpbGF0aW9uKSBhbmQgPGNvZGU+X19USU1FU1RBTVBfXzwvY29kZT4gd2lsbCBleHBhbmQgdG8KKzxjb2RlPiI/Pz8mbmJzcDs/Pz8mbmJzcDs/PyZuYnNwOz8/Oj8/Oj8/Jm5ic3A7Pz8/PyI8IS0tIC9AdyAtLT48L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMTwvY29kZT48ZHQ+PGNvZGU+X19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMjwvY29kZT48ZHQ+PGNvZGU+X19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfNDwvY29kZT48ZHQ+PGNvZGU+X19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfODwvY29kZT48ZHQ+PGNvZGU+X19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMTY8L2NvZGU+PGRkPlRoZXNlIG1hY3JvcyBhcmUgZGVmaW5lZCB3aGVuIHRoZSB0YXJnZXQgcHJvY2Vzc29yIHN1cHBvcnRzIGF0b21pYyBjb21wYXJlCithbmQgc3dhcCBvcGVyYXRpb25zIG9uIG9wZXJhbmRzIDEsIDIsIDQsIDggb3IgMTYgYnl0ZXMgaW4gbGVuZ3RoLCByZXNwZWN0aXZlbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0dDQ19IQVZFX0RXQVJGMl9DRklfQVNNPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGlzIGRlZmluZWQgd2hlbiB0aGUgY29tcGlsZXIgaXMgZW1pdHRpbmcgRHdhcmYyIENGSSBkaXJlY3RpdmVzCit0byB0aGUgYXNzZW1ibGVyLiAgV2hlbiB0aGlzIGlzIGRlZmluZWQsIGl0IGlzIHBvc3NpYmxlIHRvIGVtaXQgdGhvc2Ugc2FtZQorZGlyZWN0aXZlcyBpbiBpbmxpbmUgYXNzZW1ibHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0ZQX0ZBU1RfRk1BPC9jb2RlPjxkdD48Y29kZT5fX0ZQX0ZBU1RfRk1BRjwvY29kZT48ZHQ+PGNvZGU+X19GUF9GQVNUX0ZNQUw8L2NvZGU+PGRkPlRoZXNlIG1hY3JvcyBhcmUgZGVmaW5lZCB3aXRoIHZhbHVlIDEgaWYgdGhlIGJhY2tlbmQgc3VwcG9ydHMgdGhlCis8Y29kZT5mbWE8L2NvZGU+LCA8Y29kZT5mbWFmPC9jb2RlPiwgYW5kIDxjb2RlPmZtYWw8L2NvZGU+IGJ1aWx0aW4gZnVuY3Rpb25zLCBzbyB0aGF0Cit0aGUgaW5jbHVkZSBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5tYXRoLmg8L3NwYW4+PC9zYW1wPiBjYW4gZGVmaW5lIHRoZSBtYWNyb3MKKzxjb2RlPkZQX0ZBU1RfRk1BPC9jb2RlPiwgPGNvZGU+RlBfRkFTVF9GTUFGPC9jb2RlPiwgYW5kIDxjb2RlPkZQX0ZBU1RfRk1BTDwvY29kZT4KK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIDE5OTkgQyBzdGFuZGFyZC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NvbXB1dGVkLUluY2x1ZGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NvbXB1dGVkLUluY2x1ZGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNzE1OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ29tcHV0ZWQtSW5jbHVkZXMuaHRtbApAQCAtMCwwICsxLDEzMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29tcHV0ZWQgSW5jbHVkZXMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIiB0aXRsZT0iSGVhZGVyIEZpbGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWx0ZXJuYXRpdmVzLXRvLVdyYXBwZXItXzAwMjNpZm5kZWYuaHRtbCNBbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZiIgdGl0bGU9IkFsdGVybmF0aXZlcyB0byBXcmFwcGVyICNpZm5kZWYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJXcmFwcGVyLUhlYWRlcnMuaHRtbCNXcmFwcGVyLUhlYWRlcnMiIHRpdGxlPSJXcmFwcGVyIEhlYWRlcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29tcHV0ZWQtSW5jbHVkZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iV3JhcHBlci1IZWFkZXJzLmh0bWwjV3JhcHBlci1IZWFkZXJzIj5XcmFwcGVyIEhlYWRlcnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZi5odG1sI0FsdGVybmF0aXZlcy10by1XcmFwcGVyLV8wMDIzaWZuZGVmIj5BbHRlcm5hdGl2ZXMgdG8gV3JhcHBlciAjaWZuZGVmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIj5IZWFkZXIgRmlsZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjYgQ29tcHV0ZWQgSW5jbHVkZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb21wdXRlZC1pbmNsdWRlcy0zNCI+PC9hPjxhIG5hbWU9ImluZGV4LW1hY3Jvcy1pbi1pbmNsdWRlLTM1Ij48L2E+CitTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIHNlbGVjdCBvbmUgb2Ygc2V2ZXJhbCBkaWZmZXJlbnQgaGVhZGVyCitmaWxlcyB0byBiZSBpbmNsdWRlZCBpbnRvIHlvdXIgcHJvZ3JhbS4gIFRoZXkgbWlnaHQgc3BlY2lmeQorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGJlIHVzZWQgb24gZGlmZmVyZW50IHNvcnRzIG9mIG9wZXJhdGluZworc3lzdGVtcywgZm9yIGluc3RhbmNlLiAgWW91IGNvdWxkIGRvIHRoaXMgd2l0aCBhIHNlcmllcyBvZiBjb25kaXRpb25hbHMsCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjaWYgU1lTVEVNXzEKKyAgICAgIyBpbmNsdWRlICJzeXN0ZW1fMS5oIgorICAgICAjZWxpZiBTWVNURU1fMgorICAgICAjIGluY2x1ZGUgInN5c3RlbV8yLmgiCisgICAgICNlbGlmIFNZU1RFTV8zCisgICAgIC4uLgorICAgICAjZW5kaWYKKzwvcHJlPgorICAgPHA+VGhhdCByYXBpZGx5IGJlY29tZXMgdGVkaW91cy4gIEluc3RlYWQsIHRoZSBwcmVwcm9jZXNzb3Igb2ZmZXJzIHRoZQorYWJpbGl0eSB0byB1c2UgYSBtYWNybyBmb3IgdGhlIGhlYWRlciBuYW1lLiAgVGhpcyBpcyBjYWxsZWQgYQorPGRmbj5jb21wdXRlZCBpbmNsdWRlPC9kZm4+LiAgSW5zdGVhZCBvZiB3cml0aW5nIGEgaGVhZGVyIG5hbWUgYXMgdGhlIGRpcmVjdAorYXJndW1lbnQgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgeW91IHNpbXBseSBwdXQgYSBtYWNybyBuYW1lIHRoZXJlIGluc3RlYWQ6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIFNZU1RFTV9IICJzeXN0ZW1fMS5oIgorICAgICAuLi4KKyAgICAgI2luY2x1ZGUgU1lTVEVNX0gKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij48Y29kZT5TWVNURU1fSDwvY29kZT4gd2lsbCBiZSBleHBhbmRlZCwgYW5kIHRoZSBwcmVwcm9jZXNzb3Igd2lsbCBsb29rIGZvcgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN5c3RlbV8xLmg8L3NwYW4+PC9zYW1wPiBhcyBpZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYWQgYmVlbiB3cml0dGVuIHRoYXQgd2F5CitvcmlnaW5hbGx5LiAgPGNvZGU+U1lTVEVNX0g8L2NvZGU+IGNvdWxkIGJlIGRlZmluZWQgYnkgeW91ciBNYWtlZmlsZSB3aXRoIGEKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1EPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICA8cD5Zb3UgbXVzdCBiZSBjYXJlZnVsIHdoZW4geW91IGRlZmluZSB0aGUgbWFjcm8uICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNkZWZpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2F2ZXMKK3Rva2Vucywgbm90IHRleHQuICBUaGUgcHJlcHJvY2Vzc29yIGhhcyBubyB3YXkgb2Yga25vd2luZyB0aGF0IHRoZSBtYWNybword2lsbCBiZSB1c2VkIGFzIHRoZSBhcmd1bWVudCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBzbyBpdCBnZW5lcmF0ZXMKK29yZGluYXJ5IHRva2Vucywgbm90IGEgaGVhZGVyIG5hbWUuICBUaGlzIGlzIHVubGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zCitpZiB5b3UgdXNlIGRvdWJsZS1xdW90ZSBpbmNsdWRlcywgd2hpY2ggYXJlIGNsb3NlIGVub3VnaCB0byBzdHJpbmcKK2NvbnN0YW50cy4gIElmIHlvdSB1c2UgYW5nbGUgYnJhY2tldHMsIGhvd2V2ZXIsIHlvdSBtYXkgaGF2ZSB0cm91YmxlLgorCisgICA8cD5UaGUgc3ludGF4IG9mIGEgY29tcHV0ZWQgaW5jbHVkZSBpcyBhY3R1YWxseSBhIGJpdCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUKK2Fib3ZlLiAgSWYgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBhZnRlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzCitub3QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4iPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlbiB0aGUgZW50aXJlIGxpbmUgaXMgbWFjcm8tZXhwYW5kZWQKK2xpa2UgcnVubmluZyB0ZXh0IHdvdWxkIGJlLgorCisgICA8cD5JZiB0aGUgbGluZSBleHBhbmRzIHRvIGEgc2luZ2xlIHN0cmluZyBjb25zdGFudCwgdGhlIGNvbnRlbnRzIG9mIHRoYXQKK3N0cmluZyBjb25zdGFudCBhcmUgdGhlIGZpbGUgdG8gYmUgaW5jbHVkZWQuICBDUFAgZG9lcyBub3QgcmUtZXhhbWluZSB0aGUKK3N0cmluZyBmb3IgZW1iZWRkZWQgcXVvdGVzLCBidXQgbmVpdGhlciBkb2VzIGl0IHByb2Nlc3MgYmFja3NsYXNoCitlc2NhcGVzIGluIHRoZSBzdHJpbmcuICBUaGVyZWZvcmUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgSEVBREVSICJhXCJiIgorICAgICAjaW5jbHVkZSBIRUFERVIKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5sb29rcyBmb3IgYSBmaWxlIG5hbWVkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hXCJiPC9zcGFuPjwvc2FtcD4uICBDUFAgc2VhcmNoZXMgZm9yIHRoZSBmaWxlIGFjY29yZGluZwordG8gdGhlIHJ1bGVzIGZvciBkb3VibGUtcXVvdGVkIGluY2x1ZGVzLgorCisgICA8cD5JZiB0aGUgbGluZSBleHBhbmRzIHRvIGEgdG9rZW4gc3RyZWFtIGJlZ2lubmluZyB3aXRoIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRva2VuCithbmQgaW5jbHVkaW5nIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRva2VuLCB0aGVuIHRoZSB0b2tlbnMgYmV0d2VlbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZAordGhlIGZpcnN0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgY29tYmluZWQgdG8gZm9ybSB0aGUgZmlsZW5hbWUgdG8gYmUgaW5jbHVkZWQuIAorQW55IHdoaXRlc3BhY2UgYmV0d2VlbiB0b2tlbnMgaXMgcmVkdWNlZCB0byBhIHNpbmdsZSBzcGFjZTsgdGhlbiBhbnkKK3NwYWNlIGFmdGVyIHRoZSBpbml0aWFsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyByZXRhaW5lZCwgYnV0IGEgdHJhaWxpbmcgc3BhY2UKK2JlZm9yZSB0aGUgY2xvc2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgaWdub3JlZC4gIENQUCBzZWFyY2hlcyBmb3IgdGhlIGZpbGUKK2FjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIGFuZ2xlLWJyYWNrZXQgaW5jbHVkZXMuCisKKyAgIDxwPkluIGVpdGhlciBjYXNlLCBpZiB0aGVyZSBhcmUgYW55IHRva2VucyBvbiB0aGUgbGluZSBhZnRlciB0aGUgZmlsZSBuYW1lLAorYW4gZXJyb3Igb2NjdXJzIGFuZCB0aGUgZGlyZWN0aXZlIGlzIG5vdCBwcm9jZXNzZWQuICBJdCBpcyBhbHNvIGFuIGVycm9yCitpZiB0aGUgcmVzdWx0IG9mIGV4cGFuc2lvbiBkb2VzIG5vdCBtYXRjaCBlaXRoZXIgb2YgdGhlIHR3byBleHBlY3RlZAorZm9ybXMuCisKKyAgIDxwPlRoZXNlIHJ1bGVzIGFyZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yIGFjY29yZGluZyB0byB0aGUgQworc3RhbmRhcmQuICBUbyBtaW5pbWl6ZSB0aGUgcmlzayBvZiBkaWZmZXJlbnQgY29tcGlsZXJzIGludGVycHJldGluZyB5b3VyCitjb21wdXRlZCBpbmNsdWRlcyBkaWZmZXJlbnRseSwgd2UgcmVjb21tZW5kIHlvdSB1c2Ugb25seSBhIHNpbmdsZQorb2JqZWN0LWxpa2UgbWFjcm8gd2hpY2ggZXhwYW5kcyB0byBhIHN0cmluZyBjb25zdGFudC4gIFRoaXMgd2lsbCBhbHNvCittaW5pbWl6ZSBjb25mdXNpb24gZm9yIHBlb3BsZSByZWFkaW5nIHlvdXIgcHJvZ3JhbS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Db25jYXRlbmF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NvbmNhdGVuYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTk1ODFkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Db25jYXRlbmF0aW9uLmh0bWwKQEAgLTAsMCArMSwxMzEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbmNhdGVuYXRpb24gLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIiB0aXRsZT0iTWFjcm9zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3RyaW5naWZpY2F0aW9uLmh0bWwjU3RyaW5naWZpY2F0aW9uIiB0aXRsZT0iU3RyaW5naWZpY2F0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIiB0aXRsZT0iVmFyaWFkaWMgTWFjcm9zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvbmNhdGVuYXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIj5WYXJpYWRpYyBNYWNyb3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTdHJpbmdpZmljYXRpb24uaHRtbCNTdHJpbmdpZmljYXRpb24iPlN0cmluZ2lmaWNhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY3Jvcy5odG1sI01hY3JvcyI+TWFjcm9zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My41IENvbmNhdGVuYXRpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb25jYXRlbmF0aW9uLTUyIj48L2E+PGEgbmFtZT0iaW5kZXgtdG9rZW4tcGFzdGluZy01MyI+PC9hPjxhIG5hbWU9ImluZGV4LXRva2VuLWNvbmNhdGVuYXRpb24tNTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDIzXzAwMjNfMDA3ZC1vcGVyYXRvci01NSI+PC9hPgorSXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIG1lcmdlIHR3byB0b2tlbnMgaW50byBvbmUgd2hpbGUgZXhwYW5kaW5nIG1hY3Jvcy4gCitUaGlzIGlzIGNhbGxlZCA8ZGZuPnRva2VuIHBhc3Rpbmc8L2Rmbj4gb3IgPGRmbj50b2tlbiBjb25jYXRlbmF0aW9uPC9kZm4+LiAgVGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87IHByZXByb2Nlc3Npbmcgb3BlcmF0b3IgcGVyZm9ybXMgdG9rZW4gcGFzdGluZy4gIFdoZW4gYSBtYWNybworaXMgZXhwYW5kZWQsIHRoZSB0d28gdG9rZW5zIG9uIGVpdGhlciBzaWRlIG9mIGVhY2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcGVyYXRvcgorYXJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgdG9rZW4sIHdoaWNoIHRoZW4gcmVwbGFjZXMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IyM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCit0aGUgdHdvIG9yaWdpbmFsIHRva2VucyBpbiB0aGUgbWFjcm8gZXhwYW5zaW9uLiAgVXN1YWxseSBib3RoIHdpbGwgYmUKK2lkZW50aWZpZXJzLCBvciBvbmUgd2lsbCBiZSBhbiBpZGVudGlmaWVyIGFuZCB0aGUgb3RoZXIgYSBwcmVwcm9jZXNzaW5nCitudW1iZXIuICBXaGVuIHBhc3RlZCwgdGhleSBtYWtlIGEgbG9uZ2VyIGlkZW50aWZpZXIuICBUaGlzIGlzbid0IHRoZQorb25seSB2YWxpZCBjYXNlLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjb25jYXRlbmF0ZSB0d28gbnVtYmVycyAob3IgYQorbnVtYmVyIGFuZCBhIG5hbWUsIHN1Y2ggYXMgPGNvZGU+MS41PC9jb2RlPiBhbmQgPGNvZGU+ZTM8L2NvZGU+KSBpbnRvIGEgbnVtYmVyLiAKK0Fsc28sIG11bHRpLWNoYXJhY3RlciBvcGVyYXRvcnMgc3VjaCBhcyA8Y29kZT4rPTwvY29kZT4gY2FuIGJlIGZvcm1lZCBieQordG9rZW4gcGFzdGluZy4KKworICAgPHA+SG93ZXZlciwgdHdvIHRva2VucyB0aGF0IGRvbid0IHRvZ2V0aGVyIGZvcm0gYSB2YWxpZCB0b2tlbiBjYW5ub3QgYmUKK3Bhc3RlZCB0b2dldGhlci4gIEZvciBleGFtcGxlLCB5b3UgY2Fubm90IGNvbmNhdGVuYXRlIDxjb2RlPng8L2NvZGU+IHdpdGgKKzxjb2RlPis8L2NvZGU+IGluIGVpdGhlciBvcmRlci4gIElmIHlvdSB0cnksIHRoZSBwcmVwcm9jZXNzb3IgaXNzdWVzIGEgd2FybmluZworYW5kIGVtaXRzIHRoZSB0d28gdG9rZW5zLiAgV2hldGhlciBpdCBwdXRzIHdoaXRlIHNwYWNlIGJldHdlZW4gdGhlCit0b2tlbnMgaXMgdW5kZWZpbmVkLiAgSXQgaXMgY29tbW9uIHRvIGZpbmQgdW5uZWNlc3NhcnkgdXNlcyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbiBjb21wbGV4IG1hY3Jvcy4gIElmIHlvdSBnZXQgdGhpcyB3YXJuaW5nLCBpdCBpcyBsaWtlbHkgdGhhdCB5b3UgY2FuCitzaW1wbHkgcmVtb3ZlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5Cb3RoIHRoZSB0b2tlbnMgY29tYmluZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb3VsZCBjb21lIGZyb20gdGhlIG1hY3JvIGJvZHksCitidXQgeW91IGNvdWxkIGp1c3QgYXMgd2VsbCB3cml0ZSB0aGVtIGFzIG9uZSB0b2tlbiBpbiB0aGUgZmlyc3QgcGxhY2UuIAorVG9rZW4gcGFzdGluZyBpcyBtb3N0IHVzZWZ1bCB3aGVuIG9uZSBvciBib3RoIG9mIHRoZSB0b2tlbnMgY29tZXMgZnJvbSBhCittYWNybyBhcmd1bWVudC4gIElmIGVpdGhlciBvZiB0aGUgdG9rZW5zIG5leHQgdG8gYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBhCitwYXJhbWV0ZXIgbmFtZSwgaXQgaXMgcmVwbGFjZWQgYnkgaXRzIGFjdHVhbCBhcmd1bWVudCBiZWZvcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOworZXhlY3V0ZXMuICBBcyB3aXRoIHN0cmluZ2lmaWNhdGlvbiwgdGhlIGFjdHVhbCBhcmd1bWVudCBpcyBub3QKK21hY3JvLWV4cGFuZGVkIGZpcnN0LiAgSWYgdGhlIGFyZ3VtZW50IGlzIGVtcHR5LCB0aGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IyM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaGFzIG5vCitlZmZlY3QuCisKKyAgIDxwPktlZXAgaW4gbWluZCB0aGF0IHRoZSBDIHByZXByb2Nlc3NvciBjb252ZXJ0cyBjb21tZW50cyB0byB3aGl0ZXNwYWNlCitiZWZvcmUgbWFjcm9zIGFyZSBldmVuIGNvbnNpZGVyZWQuICBUaGVyZWZvcmUsIHlvdSBjYW5ub3QgY3JlYXRlIGEKK2NvbW1lbnQgYnkgY29uY2F0ZW5hdGluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi88L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFlvdSBjYW4gcHV0IGFzIG11Y2gKK3doaXRlc3BhY2UgYmV0d2VlbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBpdHMgb3BlcmFuZHMgYXMgeW91IGxpa2UsIGluY2x1ZGluZworY29tbWVudHMsIGFuZCB5b3UgY2FuIHB1dCBjb21tZW50cyBpbiBhcmd1bWVudHMgdGhhdCB3aWxsIGJlCitjb25jYXRlbmF0ZWQuICBIb3dldmVyLCBpdCBpcyBhbiBlcnJvciBpZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYXQgZWl0aGVyCitlbmQgb2YgYSBtYWNybyBib2R5LgorCisgICA8cD5Db25zaWRlciBhIEMgcHJvZ3JhbSB0aGF0IGludGVycHJldHMgbmFtZWQgY29tbWFuZHMuICBUaGVyZSBwcm9iYWJseQorbmVlZHMgdG8gYmUgYSB0YWJsZSBvZiBjb21tYW5kcywgcGVyaGFwcyBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzIGRlY2xhcmVkCithcyBmb2xsb3dzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RydWN0IGNvbW1hbmQKKyAgICAgeworICAgICAgIGNoYXIgKm5hbWU7CisgICAgICAgdm9pZCAoKmZ1bmN0aW9uKSAodm9pZCk7CisgICAgIH07CisgICAgIAorICAgICBzdHJ1Y3QgY29tbWFuZCBjb21tYW5kc1tdID0KKyAgICAgeworICAgICAgIHsgInF1aXQiLCBxdWl0X2NvbW1hbmQgfSwKKyAgICAgICB7ICJoZWxwIiwgaGVscF9jb21tYW5kIH0sCisgICAgICAgLi4uCisgICAgIH07Cis8L3ByZT4KKyAgIDxwPkl0IHdvdWxkIGJlIGNsZWFuZXIgbm90IHRvIGhhdmUgdG8gZ2l2ZSBlYWNoIGNvbW1hbmQgbmFtZSB0d2ljZSwgb25jZSBpbgordGhlIHN0cmluZyBjb25zdGFudCBhbmQgb25jZSBpbiB0aGUgZnVuY3Rpb24gbmFtZS4gIEEgbWFjcm8gd2hpY2ggdGFrZXMgdGhlCituYW1lIG9mIGEgY29tbWFuZCBhcyBhbiBhcmd1bWVudCBjYW4gbWFrZSB0aGlzIHVubmVjZXNzYXJ5LiAgVGhlIHN0cmluZworY29uc3RhbnQgY2FuIGJlIGNyZWF0ZWQgd2l0aCBzdHJpbmdpZmljYXRpb24sIGFuZCB0aGUgZnVuY3Rpb24gbmFtZSBieQorY29uY2F0ZW5hdGluZyB0aGUgYXJndW1lbnQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9jb21tYW5kPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSGVyZSBpcyBob3cgaXQgaXMgZG9uZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgQ09NTUFORChOQU1FKSAgeyAjTkFNRSwgTkFNRSAjIyBfY29tbWFuZCB9CisgICAgIAorICAgICBzdHJ1Y3QgY29tbWFuZCBjb21tYW5kc1tdID0KKyAgICAgeworICAgICAgIENPTU1BTkQgKHF1aXQpLAorICAgICAgIENPTU1BTkQgKGhlbHApLAorICAgICAgIC4uLgorICAgICB9OworPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NvbmNlcHQtSW5kZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ29uY2VwdC1JbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NDQwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NvbmNlcHQtSW5kZXguaHRtbApAQCAtMCwwICsxLDE2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29uY2VwdCBJbmRleCAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik9wdGlvbi1JbmRleC5odG1sI09wdGlvbi1JbmRleCIgdGl0bGU9Ik9wdGlvbiBJbmRleCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb25jZXB0LUluZGV4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4Ij5PcHRpb24gSW5kZXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+Q29uY2VwdCBJbmRleDwvaDI+CisKKworCis8dWwgY2xhc3M9ImluZGV4LWNwIiBjb21wYWN0PgorPGxpPjxhIGhyZWY9IlN0cmluZ2lmaWNhdGlvbi5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMjNfMDA3ZC1vcGVyYXRvci01MSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wZXJhdG9yPC9hPjogPGEgaHJlZj0iU3RyaW5naWZpY2F0aW9uLmh0bWwjU3RyaW5naWZpY2F0aW9uIj5TdHJpbmdpZmljYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25jYXRlbmF0aW9uLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyM18wMDIzXzAwN2Qtb3BlcmF0b3ItNTUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IyM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3BlcmF0b3I8L2E+OiA8YSBocmVmPSJDb25jYXRlbmF0aW9uLmh0bWwjQ29uY2F0ZW5hdGlvbiI+Q29uY2F0ZW5hdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByYWdtYXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmUHJhZ21hXzAwN2QtMTAwIj48Y29kZT5fUHJhZ21hPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjaW5kZXgtYWx0ZXJuYXRpdmUtdG9rZW5zLTE5Ij5hbHRlcm5hdGl2ZSB0b2tlbnM8L2E+OiA8YSBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNUb2tlbml6YXRpb24iPlRva2VuaXphdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hY3JvLUFyZ3VtZW50cy5odG1sI2luZGV4LWFyZ3VtZW50cy00NiI+YXJndW1lbnRzPC9hPjogPGEgaHJlZj0iTWFjcm8tQXJndW1lbnRzLmh0bWwjTWFjcm8tQXJndW1lbnRzIj5NYWNybyBBcmd1bWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNYWNyby1Bcmd1bWVudHMuaHRtbCNpbmRleC1hcmd1bWVudHMtaW4tbWFjcm8tZGVmaW5pdGlvbnMtNDgiPmFyZ3VtZW50cyBpbiBtYWNybyBkZWZpbml0aW9uczwvYT46IDxhIGhyZWY9Ik1hY3JvLUFyZ3VtZW50cy5odG1sI01hY3JvLUFyZ3VtZW50cyI+TWFjcm8gQXJndW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2Jzb2xldGUtRmVhdHVyZXMuaHRtbCNpbmRleC1hc3NlcnRpb25zLTExMyI+YXNzZXJ0aW9uczwvYT46IDxhIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjT2Jzb2xldGUtRmVhdHVyZXMiPk9ic29sZXRlIEZlYXR1cmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2Jzb2xldGUtRmVhdHVyZXMuaHRtbCNpbmRleC1hc3NlcnRpb25zXzAwMmMtY2FuY2VsaW5nLTExNyI+YXNzZXJ0aW9ucywgY2FuY2VsaW5nPC9hPjogPGEgaHJlZj0iT2Jzb2xldGUtRmVhdHVyZXMuaHRtbCNPYnNvbGV0ZS1GZWF0dXJlcyI+T2Jzb2xldGUgRmVhdHVyZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbml0aWFsLXByb2Nlc3NpbmcuaHRtbCNpbmRleC1iYWNrc2xhc2hfMDAyZG5ld2xpbmUtNCI+YmFja3NsYXNoLW5ld2xpbmU8L2E+OiA8YSBocmVmPSJJbml0aWFsLXByb2Nlc3NpbmcuaHRtbCNJbml0aWFsLXByb2Nlc3NpbmciPkluaXRpYWwgcHJvY2Vzc2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluaXRpYWwtcHJvY2Vzc2luZy5odG1sI2luZGV4LWJsb2NrLWNvbW1lbnRzLTciPmJsb2NrIGNvbW1lbnRzPC9hPjogPGEgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjSW5pdGlhbC1wcm9jZXNzaW5nIj5Jbml0aWFsIHByb2Nlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMuaHRtbCNpbmRleC1DXzAwMmJfMDAyYi1uYW1lZC1vcGVyYXRvcnMtNjYiPkMrKyBuYW1lZCBvcGVyYXRvcnM8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMuaHRtbCNDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMiPkMrKyBOYW1lZCBPcGVyYXRvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNpbmRleC1jaGFyYWN0ZXItY29uc3RhbnRzLTE1Ij5jaGFyYWN0ZXIgY29uc3RhbnRzPC9hPjogPGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIj5Ub2tlbml6YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtY2hhcmFjdGVyLXNldF8wMDJjLWV4ZWN1dGlvbi0xNzkiPmNoYXJhY3RlciBzZXQsIGV4ZWN1dGlvbjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWNoYXJhY3Rlci1zZXRfMDAyYy1pbnB1dC0xODMiPmNoYXJhY3RlciBzZXQsIGlucHV0PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtY2hhcmFjdGVyLXNldF8wMDJjLXdpZGUtZXhlY3V0aW9uLTE4MSI+Y2hhcmFjdGVyIHNldCwgd2lkZSBleGVjdXRpb248L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1jb21tYW5kLWxpbmUtMTIxIj5jb21tYW5kIGxpbmU8L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlbGV0ZWQtQ29kZS5odG1sI2luZGV4LWNvbW1lbnRpbmctb3V0LWNvZGUtOTIiPmNvbW1lbnRpbmcgb3V0IGNvZGU8L2E+OiA8YSBocmVmPSJEZWxldGVkLUNvZGUuaHRtbCNEZWxldGVkLUNvZGUiPkRlbGV0ZWQgQ29kZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluaXRpYWwtcHJvY2Vzc2luZy5odG1sI2luZGV4LWNvbW1lbnRzLTUiPmNvbW1lbnRzPC9hPjogPGEgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjSW5pdGlhbC1wcm9jZXNzaW5nIj5Jbml0aWFsIHByb2Nlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21tb24tUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNpbmRleC1jb21tb24tcHJlZGVmaW5lZC1tYWNyb3MtNjEiPmNvbW1vbiBwcmVkZWZpbmVkIG1hY3JvczwvYT46IDxhIGhyZWY9IkNvbW1vbi1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI0NvbW1vbi1QcmVkZWZpbmVkLU1hY3JvcyI+Q29tbW9uIFByZWRlZmluZWQgTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tcHV0ZWQtSW5jbHVkZXMuaHRtbCNpbmRleC1jb21wdXRlZC1pbmNsdWRlcy0zNCI+Y29tcHV0ZWQgaW5jbHVkZXM8L2E+OiA8YSBocmVmPSJDb21wdXRlZC1JbmNsdWRlcy5odG1sI0NvbXB1dGVkLUluY2x1ZGVzIj5Db21wdXRlZCBJbmNsdWRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbmNhdGVuYXRpb24uaHRtbCNpbmRleC1jb25jYXRlbmF0aW9uLTUyIj5jb25jYXRlbmF0aW9uPC9hPjogPGEgaHJlZj0iQ29uY2F0ZW5hdGlvbi5odG1sI0NvbmNhdGVuYXRpb24iPkNvbmNhdGVuYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJZmRlZi5odG1sI2luZGV4LWNvbmRpdGlvbmFsLWdyb3VwLTg3Ij5jb25kaXRpb25hbCBncm91cDwvYT46IDxhIGhyZWY9IklmZGVmLmh0bWwjSWZkZWYiPklmZGVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjaW5kZXgtY29uZGl0aW9uYWxzLTgzIj5jb25kaXRpb25hbHM8L2E+OiA8YSBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiPkNvbmRpdGlvbmFsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluaXRpYWwtcHJvY2Vzc2luZy5odG1sI2luZGV4LWNvbnRpbnVlZC1saW5lcy0zIj5jb250aW51ZWQgbGluZXM8L2E+OiA8YSBocmVmPSJJbml0aWFsLXByb2Nlc3NpbmcuaHRtbCNJbml0aWFsLXByb2Nlc3NpbmciPkluaXRpYWwgcHJvY2Vzc2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9uY2VfMDAyZE9ubHktSGVhZGVycy5odG1sI2luZGV4LWNvbnRyb2xsaW5nLW1hY3JvLTMxIj5jb250cm9sbGluZyBtYWNybzwvYT46IDxhIGhyZWY9Ik9uY2VfMDAyZE9ubHktSGVhZGVycy5odG1sI09uY2VfMDAyZE9ubHktSGVhZGVycyI+T25jZS1Pbmx5IEhlYWRlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWZpbmVkLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkZWZpbmVkXzAwN2QtODkiPjxjb2RlPmRlZmluZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVmaW5lZC5odG1sI0RlZmluZWQiPkRlZmluZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1kZXBlbmRlbmNpZXMtZm9yLW1ha2UtYXMtb3V0cHV0LTIwOSI+ZGVwZW5kZW5jaWVzIGZvciBtYWtlIGFzIG91dHB1dDwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWRlcGVuZGVuY2llc18wMDJjLV8wMDQwY29tbWFuZF8wMDdibWFrZV8wMDdkLTE0NSI+ZGVwZW5kZW5jaWVzLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bWFrZTwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaWFnbm9zdGljcy5odG1sI2luZGV4LWRpYWdub3N0aWMtOTMiPmRpYWdub3N0aWM8L2E+OiA8YSBocmVmPSJEaWFnbm9zdGljcy5odG1sI0RpYWdub3N0aWNzIj5EaWFnbm9zdGljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMuaHRtbCNpbmRleC1kaWZmZXJlbmNlcy1mcm9tLXByZXZpb3VzLXZlcnNpb25zLTExOSI+ZGlmZmVyZW5jZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9uczwvYT46IDxhIGhyZWY9IkRpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMuaHRtbCNEaWZmZXJlbmNlcy1mcm9tLXByZXZpb3VzLXZlcnNpb25zIj5EaWZmZXJlbmNlcyBmcm9tIHByZXZpb3VzIHZlcnNpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjaW5kZXgtZGlncmFwaHMtMTgiPmRpZ3JhcGhzPC9hPjogPGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIj5Ub2tlbml6YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJUaGUtcHJlcHJvY2Vzc2luZy1sYW5ndWFnZS5odG1sI2luZGV4LWRpcmVjdGl2ZS1saW5lLTIzIj5kaXJlY3RpdmUgbGluZTwvYT46IDxhIGhyZWY9IlRoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlLmh0bWwjVGhlLXByZXByb2Nlc3NpbmctbGFuZ3VhZ2UiPlRoZSBwcmVwcm9jZXNzaW5nIGxhbmd1YWdlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVGhlLXByZXByb2Nlc3NpbmctbGFuZ3VhZ2UuaHRtbCNpbmRleC1kaXJlY3RpdmUtbmFtZS0yNCI+ZGlyZWN0aXZlIG5hbWU8L2E+OiA8YSBocmVmPSJUaGUtcHJlcHJvY2Vzc2luZy1sYW5ndWFnZS5odG1sI1RoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlIj5UaGUgcHJlcHJvY2Vzc2luZyBsYW5ndWFnZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlLmh0bWwjaW5kZXgtZGlyZWN0aXZlcy0yMSI+ZGlyZWN0aXZlczwvYT46IDxhIGhyZWY9IlRoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlLmh0bWwjVGhlLXByZXByb2Nlc3NpbmctbGFuZ3VhZ2UiPlRoZSBwcmVwcm9jZXNzaW5nIGxhbmd1YWdlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWFjcm8tQXJndW1lbnRzLmh0bWwjaW5kZXgtZW1wdHktbWFjcm8tYXJndW1lbnRzLTQ5Ij5lbXB0eSBtYWNybyBhcmd1bWVudHM8L2E+OiA8YSBocmVmPSJNYWNyby1Bcmd1bWVudHMuaHRtbCNNYWNyby1Bcmd1bWVudHMiPk1hY3JvIEFyZ3VtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LWVudmlyb25tZW50LXZhcmlhYmxlcy0yMDMiPmVudmlyb25tZW50IHZhcmlhYmxlczwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXJndW1lbnQtUHJlc2Nhbi5odG1sI2luZGV4LWV4cGFuc2lvbi1vZi1hcmd1bWVudHMtNzkiPmV4cGFuc2lvbiBvZiBhcmd1bWVudHM8L2E+OiA8YSBocmVmPSJBcmd1bWVudC1QcmVzY2FuLmh0bWwjQXJndW1lbnQtUHJlc2NhbiI+QXJndW1lbnQgUHJlc2NhbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI2luZGV4LUZETF8wMDJjLUdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS0yMTIiPkZETCwgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPjogPGEgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MuaHRtbCNpbmRleC1mdW5jdGlvbl8wMDJkbGlrZS1tYWNyb3MtNDUiPmZ1bmN0aW9uLWxpa2UgbWFjcm9zPC9hPjogPGEgaHJlZj0iRnVuY3Rpb25fMDAyZGxpa2UtTWFjcm9zLmh0bWwjRnVuY3Rpb25fMDAyZGxpa2UtTWFjcm9zIj5GdW5jdGlvbi1saWtlIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1ncm91cGluZy1vcHRpb25zLTEyMiI+Z3JvdXBpbmcgb3B0aW9uczwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwjaW5kZXgtZ3VhcmQtbWFjcm8tMzIiPmd1YXJkIG1hY3JvPC9hPjogPGEgaHJlZj0iT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwjT25jZV8wMDJkT25seS1IZWFkZXJzIj5PbmNlLU9ubHkgSGVhZGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhlYWRlci1GaWxlcy5odG1sI2luZGV4LWhlYWRlci1maWxlLTI1Ij5oZWFkZXIgZmlsZTwvYT46IDxhIGhyZWY9IkhlYWRlci1GaWxlcy5odG1sI0hlYWRlci1GaWxlcyI+SGVhZGVyIEZpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjaW5kZXgtaGVhZGVyLWZpbGUtbmFtZXMtMTYiPmhlYWRlciBmaWxlIG5hbWVzPC9hPjogPGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIj5Ub2tlbml6YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNpbmRleC1pZGVudGlmaWVycy0xMCI+aWRlbnRpZmllcnM8L2E+OiA8YSBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNUb2tlbml6YXRpb24iPlRva2VuaXphdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkltcGxlbWVudGF0aW9uLWxpbWl0cy5odG1sI2luZGV4LWltcGxlbWVudGF0aW9uLWxpbWl0cy0xMTIiPmltcGxlbWVudGF0aW9uIGxpbWl0czwvYT46IDxhIGhyZWY9IkltcGxlbWVudGF0aW9uLWxpbWl0cy5odG1sI0ltcGxlbWVudGF0aW9uLWxpbWl0cyI+SW1wbGVtZW50YXRpb24gbGltaXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IuaHRtbCNpbmRleC1pbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci0xMTEiPmltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+OiA8YSBocmVmPSJJbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci5odG1sI0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yIj5JbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwjaW5kZXgtaW5jbHVkaW5nLWp1c3Qtb25jZS0yOSI+aW5jbHVkaW5nIGp1c3Qgb25jZTwvYT46IDxhIGhyZWY9Ik9uY2VfMDAyZE9ubHktSGVhZGVycy5odG1sI09uY2VfMDAyZE9ubHktSGVhZGVycyI+T25jZS1Pbmx5IEhlYWRlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtaW52b2NhdGlvbi0xMjAiPmludm9jYXRpb248L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycy5odG1sI2luZGV4LWdfdF8wMDQwZmlsZV8wMDdiaXNvNjQ2XzAwMmVoXzAwN2QtNjciPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5pc282NDYuaDwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItTmFtZWQtT3BlcmF0b3JzLmh0bWwjQ18wMDJiXzAwMmItTmFtZWQtT3BlcmF0b3JzIj5DKysgTmFtZWQgT3BlcmF0b3JzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjaW5kZXgtbGluZS1jb21tZW50cy02Ij5saW5lIGNvbW1lbnRzPC9hPjogPGEgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjSW5pdGlhbC1wcm9jZXNzaW5nIj5Jbml0aWFsIHByb2Nlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5lLUNvbnRyb2wuaHRtbCNpbmRleC1saW5lLWNvbnRyb2wtOTgiPmxpbmUgY29udHJvbDwvYT46IDxhIGhyZWY9IkxpbmUtQ29udHJvbC5odG1sI0xpbmUtQ29udHJvbCI+TGluZSBDb250cm9sPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjaW5kZXgtbGluZS1lbmRpbmdzLTEiPmxpbmUgZW5kaW5nczwvYT46IDxhIGhyZWY9IkluaXRpYWwtcHJvY2Vzc2luZy5odG1sI0luaXRpYWwtcHJvY2Vzc2luZyI+SW5pdGlhbCBwcm9jZXNzaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU91dHB1dC5odG1sI2luZGV4LWxpbmVtYXJrZXJzLTExMCI+bGluZW1hcmtlcnM8L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3V0cHV0Lmh0bWwjUHJlcHJvY2Vzc29yLU91dHB1dCI+UHJlcHJvY2Vzc29yIE91dHB1dDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50LVByZXNjYW4uaHRtbCNpbmRleC1tYWNyby1hcmd1bWVudC1leHBhbnNpb24tODAiPm1hY3JvIGFyZ3VtZW50IGV4cGFuc2lvbjwvYT46IDxhIGhyZWY9IkFyZ3VtZW50LVByZXNjYW4uaHRtbCNBcmd1bWVudC1QcmVzY2FuIj5Bcmd1bWVudCBQcmVzY2FuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzLmh0bWwjaW5kZXgtbWFjcm8tYXJndW1lbnRzLWFuZC1kaXJlY3RpdmVzLTcxIj5tYWNybyBhcmd1bWVudHMgYW5kIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJEaXJlY3RpdmVzLVdpdGhpbi1NYWNyby1Bcmd1bWVudHMuaHRtbCNEaXJlY3RpdmVzLVdpdGhpbi1NYWNyby1Bcmd1bWVudHMiPkRpcmVjdGl2ZXMgV2l0aGluIE1hY3JvIEFyZ3VtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbXB1dGVkLUluY2x1ZGVzLmh0bWwjaW5kZXgtbWFjcm9zLWluLWluY2x1ZGUtMzUiPm1hY3JvcyBpbiBpbmNsdWRlPC9hPjogPGEgaHJlZj0iQ29tcHV0ZWQtSW5jbHVkZXMuaHRtbCNDb21wdXRlZC1JbmNsdWRlcyI+Q29tcHV0ZWQgSW5jbHVkZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNYWNyby1Bcmd1bWVudHMuaHRtbCNpbmRleC1tYWNyb3Mtd2l0aC1hcmd1bWVudHMtNDciPm1hY3JvcyB3aXRoIGFyZ3VtZW50czwvYT46IDxhIGhyZWY9Ik1hY3JvLUFyZ3VtZW50cy5odG1sI01hY3JvLUFyZ3VtZW50cyI+TWFjcm8gQXJndW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjaW5kZXgtbWFjcm9zLXdpdGgtdmFyaWFibGUtYXJndW1lbnRzLTU3Ij5tYWNyb3Mgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHM8L2E+OiA8YSBocmVmPSJWYXJpYWRpYy1NYWNyb3MuaHRtbCNWYXJpYWRpYy1NYWNyb3MiPlZhcmlhZGljIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ym1ha2VfMDA3ZC0xNDQiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5tYWtlPC9zcGFuPjwvc2FtcD48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdF8wMDJkbGlrZS1NYWNyb3MuaHRtbCNpbmRleC1tYW5pZmVzdC1jb25zdGFudHMtNDMiPm1hbmlmZXN0IGNvbnN0YW50czwvYT46IDxhIGhyZWY9Ik9iamVjdF8wMDJkbGlrZS1NYWNyb3MuaHRtbCNPYmplY3RfMDAyZGxpa2UtTWFjcm9zIj5PYmplY3QtbGlrZSBNYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMuaHRtbCNpbmRleC1uYW1lZC1vcGVyYXRvcnMtNjUiPm5hbWVkIG9wZXJhdG9yczwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycy5odG1sI0NfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycyI+QysrIE5hbWVkIE9wZXJhdG9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5ld2xpbmVzLWluLUFyZ3VtZW50cy5odG1sI2luZGV4LW5ld2xpbmVzLWluLW1hY3JvLWFyZ3VtZW50cy04MiI+bmV3bGluZXMgaW4gbWFjcm8gYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iTmV3bGluZXMtaW4tQXJndW1lbnRzLmh0bWwjTmV3bGluZXMtaW4tQXJndW1lbnRzIj5OZXdsaW5lcyBpbiBBcmd1bWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtbnVsbC1kaXJlY3RpdmUtMTA4Ij5udWxsIGRpcmVjdGl2ZTwvYT46IDxhIGhyZWY9Ik90aGVyLURpcmVjdGl2ZXMuaHRtbCNPdGhlci1EaXJlY3RpdmVzIj5PdGhlciBEaXJlY3RpdmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjaW5kZXgtbnVtYmVycy0xMSI+bnVtYmVyczwvYT46IDxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI1Rva2VuaXphdGlvbiI+VG9rZW5pemF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0XzAwMmRsaWtlLU1hY3Jvcy5odG1sI2luZGV4LW9iamVjdF8wMDJkbGlrZS1tYWNyby00MSI+b2JqZWN0LWxpa2UgbWFjcm88L2E+OiA8YSBocmVmPSJPYmplY3RfMDAyZGxpa2UtTWFjcm9zLmh0bWwjT2JqZWN0XzAwMmRsaWtlLU1hY3JvcyI+T2JqZWN0LWxpa2UgTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LW9wdGlvbnMtMTI0Ij5vcHRpb25zPC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLWdyb3VwaW5nLTEyMyI+b3B0aW9ucywgZ3JvdXBpbmc8L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI2luZGV4LW90aGVyLXRva2Vucy0yMCI+b3RoZXIgdG9rZW5zPC9hPjogPGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIj5Ub2tlbml6YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3V0cHV0Lmh0bWwjaW5kZXgtb3V0cHV0LWZvcm1hdC0xMDkiPm91dHB1dCBmb3JtYXQ8L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3V0cHV0Lmh0bWwjUHJlcHJvY2Vzc29yLU91dHB1dCI+UHJlcHJvY2Vzc29yIE91dHB1dDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldyYXBwZXItSGVhZGVycy5odG1sI2luZGV4LW92ZXJyaWRpbmctYS1oZWFkZXItZmlsZS0zNyI+b3ZlcnJpZGluZyBhIGhlYWRlciBmaWxlPC9hPjogPGEgaHJlZj0iV3JhcHBlci1IZWFkZXJzLmh0bWwjV3JhcHBlci1IZWFkZXJzIj5XcmFwcGVyIEhlYWRlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcGVyYXRvci1QcmVjZWRlbmNlLVByb2JsZW1zLmh0bWwjaW5kZXgtcGFyZW50aGVzZXMtaW4tbWFjcm8tYm9kaWVzLTc0Ij5wYXJlbnRoZXNlcyBpbiBtYWNybyBib2RpZXM8L2E+OiA8YSBocmVmPSJPcGVyYXRvci1QcmVjZWRlbmNlLVByb2JsZW1zLmh0bWwjT3BlcmF0b3ItUHJlY2VkZW5jZS1Qcm9ibGVtcyI+T3BlcmF0b3IgUHJlY2VkZW5jZSBQcm9ibGVtczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hY3JvLVBpdGZhbGxzLmh0bWwjaW5kZXgtcGl0ZmFsbHMtb2YtbWFjcm9zLTczIj5waXRmYWxscyBvZiBtYWNyb3M8L2E+OiA8YSBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIj5NYWNybyBQaXRmYWxsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZWRlZmluZWQtTWFjcm9zLmh0bWwjaW5kZXgtcHJlZGVmaW5lZC1tYWNyb3MtNTkiPnByZWRlZmluZWQgbWFjcm9zPC9hPjogPGEgaHJlZj0iUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNQcmVkZWZpbmVkLU1hY3JvcyI+UHJlZGVmaW5lZCBNYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjaW5kZXgtcHJlZGVmaW5lZC1tYWNyb3NfMDAyYy1zeXN0ZW1fMDAyZHNwZWNpZmljLTYzIj5wcmVkZWZpbmVkIG1hY3Jvcywgc3lzdGVtLXNwZWNpZmljPC9hPjogPGEgaHJlZj0iU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1N5c3RlbV8wMDJkc3BlY2lmaWMtUHJlZGVmaW5lZC1NYWNyb3MiPlN5c3RlbS1zcGVjaWZpYyBQcmVkZWZpbmVkIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjaW5kZXgtcHJlZGljYXRlcy0xMTQiPnByZWRpY2F0ZXM8L2E+OiA8YSBocmVmPSJPYnNvbGV0ZS1GZWF0dXJlcy5odG1sI09ic29sZXRlLUZlYXR1cmVzIj5PYnNvbGV0ZSBGZWF0dXJlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlLmh0bWwjaW5kZXgtcHJlcHJvY2Vzc2luZy1kaXJlY3RpdmVzLTIyIj5wcmVwcm9jZXNzaW5nIGRpcmVjdGl2ZXM8L2E+OiA8YSBocmVmPSJUaGUtcHJlcHJvY2Vzc2luZy1sYW5ndWFnZS5odG1sI1RoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlIj5UaGUgcHJlcHJvY2Vzc2luZyBsYW5ndWFnZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI2luZGV4LXByZXByb2Nlc3NpbmctbnVtYmVycy0xMiI+cHJlcHJvY2Vzc2luZyBudW1iZXJzPC9hPjogPGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIj5Ub2tlbml6YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNpbmRleC1wcmVwcm9jZXNzaW5nLXRva2Vucy05Ij5wcmVwcm9jZXNzaW5nIHRva2VuczwvYT46IDxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI1Rva2VuaXphdGlvbiI+VG9rZW5pemF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXJndW1lbnQtUHJlc2Nhbi5odG1sI2luZGV4LXByZXNjYW4tb2YtbWFjcm8tYXJndW1lbnRzLTgxIj5wcmVzY2FuIG9mIG1hY3JvIGFyZ3VtZW50czwvYT46IDxhIGhyZWY9IkFyZ3VtZW50LVByZXNjYW4uaHRtbCNBcmd1bWVudC1QcmVzY2FuIj5Bcmd1bWVudCBQcmVzY2FuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWFjcm8tUGl0ZmFsbHMuaHRtbCNpbmRleC1wcm9ibGVtcy13aXRoLW1hY3Jvcy03MiI+cHJvYmxlbXMgd2l0aCBtYWNyb3M8L2E+OiA8YSBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIj5NYWNybyBQaXRmYWxsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI2luZGV4LXB1bmN0dWF0b3JzLTE3Ij5wdW5jdHVhdG9yczwvYT46IDxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI1Rva2VuaXphdGlvbiI+VG9rZW5pemF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MuaHRtbCNpbmRleC1yZWRlZmluaW5nLW1hY3Jvcy02OSI+cmVkZWZpbmluZyBtYWNyb3M8L2E+OiA8YSBocmVmPSJVbmRlZmluaW5nLWFuZC1SZWRlZmluaW5nLU1hY3Jvcy5odG1sI1VuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zIj5VbmRlZmluaW5nIGFuZCBSZWRlZmluaW5nIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9uY2VfMDAyZE9ubHktSGVhZGVycy5odG1sI2luZGV4LXJlcGVhdGVkLWluY2x1c2lvbi0yOCI+cmVwZWF0ZWQgaW5jbHVzaW9uPC9hPjogPGEgaHJlZj0iT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwjT25jZV8wMDJkT25seS1IZWFkZXJzIj5PbmNlLU9ubHkgSGVhZGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpYWdub3N0aWNzLmh0bWwjaW5kZXgtcmVwb3J0aW5nLWVycm9ycy05NCI+cmVwb3J0aW5nIGVycm9yczwvYT46IDxhIGhyZWY9IkRpYWdub3N0aWNzLmh0bWwjRGlhZ25vc3RpY3MiPkRpYWdub3N0aWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlhZ25vc3RpY3MuaHRtbCNpbmRleC1yZXBvcnRpbmctd2FybmluZ3MtOTUiPnJlcG9ydGluZyB3YXJuaW5nczwvYT46IDxhIGhyZWY9IkRpYWdub3N0aWNzLmh0bWwjRGlhZ25vc3RpY3MiPkRpYWdub3N0aWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI2luZGV4LXJlc2VydmVkLW5hbWVzcGFjZS02NCI+cmVzZXJ2ZWQgbmFtZXNwYWNlPC9hPjogPGEgaHJlZj0iU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1N5c3RlbV8wMDJkc3BlY2lmaWMtUHJlZGVmaW5lZC1NYWNyb3MiPlN5c3RlbS1zcGVjaWZpYyBQcmVkZWZpbmVkIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNlbGZfMDAyZFJlZmVyZW50aWFsLU1hY3Jvcy5odG1sI2luZGV4LXNlbGZfMDAyZHJlZmVyZW5jZS03OCI+c2VsZi1yZWZlcmVuY2U8L2E+OiA8YSBocmVmPSJTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbCNTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MiPlNlbGYtUmVmZXJlbnRpYWwgTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3dhbGxvd2luZy10aGUtU2VtaWNvbG9uLmh0bWwjaW5kZXgtc2VtaWNvbG9ucy1fMDAyOGFmdGVyLW1hY3JvLWNhbGxzXzAwMjktNzUiPnNlbWljb2xvbnMgKGFmdGVyIG1hY3JvIGNhbGxzKTwvYT46IDxhIGhyZWY9IlN3YWxsb3dpbmctdGhlLVNlbWljb2xvbi5odG1sI1N3YWxsb3dpbmctdGhlLVNlbWljb2xvbiI+U3dhbGxvd2luZyB0aGUgU2VtaWNvbG9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRHVwbGljYXRpb24tb2YtU2lkZS1FZmZlY3RzLmh0bWwjaW5kZXgtc2lkZS1lZmZlY3RzLV8wMDI4aW4tbWFjcm8tYXJndW1lbnRzXzAwMjktNzYiPnNpZGUgZWZmZWN0cyAoaW4gbWFjcm8gYXJndW1lbnRzKTwvYT46IDxhIGhyZWY9IkR1cGxpY2F0aW9uLW9mLVNpZGUtRWZmZWN0cy5odG1sI0R1cGxpY2F0aW9uLW9mLVNpZGUtRWZmZWN0cyI+RHVwbGljYXRpb24gb2YgU2lkZSBFZmZlY3RzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmQtUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNpbmRleC1zdGFuZGFyZC1wcmVkZWZpbmVkLW1hY3Jvc18wMDJlLTYwIj5zdGFuZGFyZCBwcmVkZWZpbmVkIG1hY3Jvcy48L2E+OiA8YSBocmVmPSJTdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1N0YW5kYXJkLVByZWRlZmluZWQtTWFjcm9zIj5TdGFuZGFyZCBQcmVkZWZpbmVkIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI2luZGV4LXN0cmluZy1jb25zdGFudHMtMTQiPnN0cmluZyBjb25zdGFudHM8L2E+OiA8YSBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNUb2tlbml6YXRpb24iPlRva2VuaXphdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI2luZGV4LXN0cmluZy1saXRlcmFscy0xMyI+c3RyaW5nIGxpdGVyYWxzPC9hPjogPGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIj5Ub2tlbml6YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHJpbmdpZmljYXRpb24uaHRtbCNpbmRleC1zdHJpbmdpZmljYXRpb24tNTAiPnN0cmluZ2lmaWNhdGlvbjwvYT46IDxhIGhyZWY9IlN0cmluZ2lmaWNhdGlvbi5odG1sI1N0cmluZ2lmaWNhdGlvbiI+U3RyaW5naWZpY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0XzAwMmRsaWtlLU1hY3Jvcy5odG1sI2luZGV4LXN5bWJvbGljLWNvbnN0YW50cy00MiI+c3ltYm9saWMgY29uc3RhbnRzPC9hPjogPGEgaHJlZj0iT2JqZWN0XzAwMmRsaWtlLU1hY3Jvcy5odG1sI09iamVjdF8wMDJkbGlrZS1NYWNyb3MiPk9iamVjdC1saWtlIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5c3RlbS1IZWFkZXJzLmh0bWwjaW5kZXgtc3lzdGVtLWhlYWRlci1maWxlcy0zOSI+c3lzdGVtIGhlYWRlciBmaWxlczwvYT46IDxhIGhyZWY9IlN5c3RlbS1IZWFkZXJzLmh0bWwjU3lzdGVtLUhlYWRlcnMiPlN5c3RlbSBIZWFkZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjaW5kZXgtc3lzdGVtLWhlYWRlci1maWxlcy0yNiI+c3lzdGVtIGhlYWRlciBmaWxlczwvYT46IDxhIGhyZWY9IkhlYWRlci1GaWxlcy5odG1sI0hlYWRlci1GaWxlcyI+SGVhZGVyIEZpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI2luZGV4LXN5c3RlbV8wMDJkc3BlY2lmaWMtcHJlZGVmaW5lZC1tYWNyb3MtNjIiPnN5c3RlbS1zcGVjaWZpYyBwcmVkZWZpbmVkIG1hY3JvczwvYT46IDxhIGhyZWY9IlN5c3RlbV8wMDJkc3BlY2lmaWMtUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zIj5TeXN0ZW0tc3BlY2lmaWMgUHJlZGVmaW5lZCBNYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYnNvbGV0ZS1GZWF0dXJlcy5odG1sI2luZGV4LXRlc3RpbmctcHJlZGljYXRlcy0xMTUiPnRlc3RpbmcgcHJlZGljYXRlczwvYT46IDxhIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjT2Jzb2xldGUtRmVhdHVyZXMiPk9ic29sZXRlIEZlYXR1cmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uY2F0ZW5hdGlvbi5odG1sI2luZGV4LXRva2VuLWNvbmNhdGVuYXRpb24tNTQiPnRva2VuIGNvbmNhdGVuYXRpb248L2E+OiA8YSBocmVmPSJDb25jYXRlbmF0aW9uLmh0bWwjQ29uY2F0ZW5hdGlvbiI+Q29uY2F0ZW5hdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbmNhdGVuYXRpb24uaHRtbCNpbmRleC10b2tlbi1wYXN0aW5nLTUzIj50b2tlbiBwYXN0aW5nPC9hPjogPGEgaHJlZj0iQ29uY2F0ZW5hdGlvbi5odG1sI0NvbmNhdGVuYXRpb24iPkNvbmNhdGVuYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNpbmRleC10b2tlbnMtOCI+dG9rZW5zPC9hPjogPGEgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIj5Ub2tlbml6YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbml0aWFsLXByb2Nlc3NpbmcuaHRtbCNpbmRleC10cmlncmFwaHMtMiI+dHJpZ3JhcGhzPC9hPjogPGEgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjSW5pdGlhbC1wcm9jZXNzaW5nIj5Jbml0aWFsIHByb2Nlc3Npbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJVbmRlZmluaW5nLWFuZC1SZWRlZmluaW5nLU1hY3Jvcy5odG1sI2luZGV4LXVuZGVmaW5pbmctbWFjcm9zLTY4Ij51bmRlZmluaW5nIG1hY3JvczwvYT46IDxhIGhyZWY9IlVuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zLmh0bWwjVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MiPlVuZGVmaW5pbmcgYW5kIFJlZGVmaW5pbmcgTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRHVwbGljYXRpb24tb2YtU2lkZS1FZmZlY3RzLmh0bWwjaW5kZXgtdW5zYWZlLW1hY3Jvcy03NyI+dW5zYWZlIG1hY3JvczwvYT46IDxhIGhyZWY9IkR1cGxpY2F0aW9uLW9mLVNpZGUtRWZmZWN0cy5odG1sI0R1cGxpY2F0aW9uLW9mLVNpZGUtRWZmZWN0cyI+RHVwbGljYXRpb24gb2YgU2lkZSBFZmZlY3RzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjaW5kZXgtdmFyaWFibGUtbnVtYmVyLW9mLWFyZ3VtZW50cy01NiI+dmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50czwvYT46IDxhIGhyZWY9IlZhcmlhZGljLU1hY3Jvcy5odG1sI1ZhcmlhZGljLU1hY3JvcyI+VmFyaWFkaWMgTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjaW5kZXgtdmFyaWFkaWMtbWFjcm9zLTU4Ij52YXJpYWRpYyBtYWNyb3M8L2E+OiA8YSBocmVmPSJWYXJpYWRpYy1NYWNyb3MuaHRtbCNWYXJpYWRpYy1NYWNyb3MiPlZhcmlhZGljIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9uY2VfMDAyZE9ubHktSGVhZGVycy5odG1sI2luZGV4LXdyYXBwZXItXzAwNDBjb2RlXzAwN2JfMDAyM2lmbmRlZl8wMDdkLTMwIj53cmFwcGVyIDxjb2RlPiNpZm5kZWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwjT25jZV8wMDJkT25seS1IZWFkZXJzIj5PbmNlLU9ubHkgSGVhZGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldyYXBwZXItSGVhZGVycy5odG1sI2luZGV4LXdyYXBwZXItaGVhZGVycy0zNiI+d3JhcHBlciBoZWFkZXJzPC9hPjogPGEgaHJlZj0iV3JhcHBlci1IZWFkZXJzLmh0bWwjV3JhcHBlci1IZWFkZXJzIj5XcmFwcGVyIEhlYWRlcnM8L2E+PC9saT4KKyAgIDwvdWw+PC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Db25kaXRpb25hbC1TeW50YXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ29uZGl0aW9uYWwtU3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4YjE3MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ29uZGl0aW9uYWwtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29uZGl0aW9uYWwgU3ludGF4IC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyIgdGl0bGU9IkNvbmRpdGlvbmFscyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNvbmRpdGlvbmFsLVVzZXMuaHRtbCNDb25kaXRpb25hbC1Vc2VzIiB0aXRsZT0iQ29uZGl0aW9uYWwgVXNlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRlbGV0ZWQtQ29kZS5odG1sI0RlbGV0ZWQtQ29kZSIgdGl0bGU9IkRlbGV0ZWQgQ29kZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb25kaXRpb25hbC1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGVsZXRlZC1Db2RlLmh0bWwjRGVsZXRlZC1Db2RlIj5EZWxldGVkIENvZGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb25kaXRpb25hbC1Vc2VzLmh0bWwjQ29uZGl0aW9uYWwtVXNlcyI+Q29uZGl0aW9uYWwgVXNlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyI+Q29uZGl0aW9uYWxzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4yIENvbmRpdGlvbmFsIFN5bnRheDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzaWYtODQiPjwvYT5BIGNvbmRpdGlvbmFsIGluIHRoZSBDIHByZXByb2Nlc3NvciBiZWdpbnMgd2l0aCBhIDxkZm4+Y29uZGl0aW9uYWwKK2RpcmVjdGl2ZTwvZGZuPjogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmbmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IklmZGVmLmh0bWwjSWZkZWYiPklmZGVmPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iSWYuaHRtbCNJZiI+SWY8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJEZWZpbmVkLmh0bWwjRGVmaW5lZCI+RGVmaW5lZDwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkVsc2UuaHRtbCNFbHNlIj5FbHNlPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iRWxpZi5odG1sI0VsaWYiPkVsaWY8L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NvbmRpdGlvbmFsLVVzZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvQ29uZGl0aW9uYWwtVXNlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDI0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NvbmRpdGlvbmFsLVVzZXMuaHRtbApAQCAtMCwwICsxLDgzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db25kaXRpb25hbCBVc2VzIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyIgdGl0bGU9IkNvbmRpdGlvbmFscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI0NvbmRpdGlvbmFsLVN5bnRheCIgdGl0bGU9IkNvbmRpdGlvbmFsIFN5bnRheCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb25kaXRpb25hbC1Vc2VzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI0NvbmRpdGlvbmFsLVN5bnRheCI+Q29uZGl0aW9uYWwgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjQ29uZGl0aW9uYWxzIj5Db25kaXRpb25hbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjEgQ29uZGl0aW9uYWwgVXNlczwvaDM+CisKKzxwPlRoZXJlIGFyZSB0aHJlZSBnZW5lcmFsIHJlYXNvbnMgdG8gdXNlIGEgY29uZGl0aW9uYWwuCisKKyAgICAgPHVsPgorPGxpPkEgcHJvZ3JhbSBtYXkgbmVlZCB0byB1c2UgZGlmZmVyZW50IGNvZGUgZGVwZW5kaW5nIG9uIHRoZSBtYWNoaW5lIG9yCitvcGVyYXRpbmcgc3lzdGVtIGl0IGlzIHRvIHJ1biBvbi4gIEluIHNvbWUgY2FzZXMgdGhlIGNvZGUgZm9yIG9uZQorb3BlcmF0aW5nIHN5c3RlbSBtYXkgYmUgZXJyb25lb3VzIG9uIGFub3RoZXIgb3BlcmF0aW5nIHN5c3RlbTsgZm9yCitleGFtcGxlLCBpdCBtaWdodCByZWZlciB0byBkYXRhIHR5cGVzIG9yIGNvbnN0YW50cyB0aGF0IGRvIG5vdCBleGlzdCBvbgordGhlIG90aGVyIHN5c3RlbS4gIFdoZW4gdGhpcyBoYXBwZW5zLCBpdCBpcyBub3QgZW5vdWdoIHRvIGF2b2lkCitleGVjdXRpbmcgdGhlIGludmFsaWQgY29kZS4gIEl0cyBtZXJlIHByZXNlbmNlIHdpbGwgY2F1c2UgdGhlIGNvbXBpbGVyCit0byByZWplY3QgdGhlIHByb2dyYW0uICBXaXRoIGEgcHJlcHJvY2Vzc2luZyBjb25kaXRpb25hbCwgdGhlIG9mZmVuZGluZworY29kZSBjYW4gYmUgZWZmZWN0aXZlbHkgZXhjaXNlZCBmcm9tIHRoZSBwcm9ncmFtIHdoZW4gaXQgaXMgbm90IHZhbGlkLgorCisgICAgIDxsaT5Zb3UgbWF5IHdhbnQgdG8gYmUgYWJsZSB0byBjb21waWxlIHRoZSBzYW1lIHNvdXJjZSBmaWxlIGludG8gdHdvCitkaWZmZXJlbnQgcHJvZ3JhbXMuICBPbmUgdmVyc2lvbiBtaWdodCBtYWtlIGZyZXF1ZW50IHRpbWUtY29uc3VtaW5nCitjb25zaXN0ZW5jeSBjaGVja3Mgb24gaXRzIGludGVybWVkaWF0ZSBkYXRhLCBvciBwcmludCB0aGUgdmFsdWVzIG9mCit0aG9zZSBkYXRhIGZvciBkZWJ1Z2dpbmcsIGFuZCB0aGUgb3RoZXIgbm90LgorCisgICAgIDxsaT5BIGNvbmRpdGlvbmFsIHdob3NlIGNvbmRpdGlvbiBpcyBhbHdheXMgZmFsc2UgaXMgb25lIHdheSB0byBleGNsdWRlIGNvZGUKK2Zyb20gdGhlIHByb2dyYW0gYnV0IGtlZXAgaXQgYXMgYSBzb3J0IG9mIGNvbW1lbnQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuIAorPC91bD4KKworICAgPHA+U2ltcGxlIHByb2dyYW1zIHRoYXQgZG8gbm90IG5lZWQgc3lzdGVtLXNwZWNpZmljIGxvZ2ljIG9yIGNvbXBsZXgKK2RlYnVnZ2luZyBob29rcyBnZW5lcmFsbHkgd2lsbCBub3QgbmVlZCB0byB1c2UgcHJlcHJvY2Vzc2luZworY29uZGl0aW9uYWxzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0NvbmRpdGlvbmFscy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Db25kaXRpb25hbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDkwZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Db25kaXRpb25hbHMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db25kaXRpb25hbHMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiIHRpdGxlPSJNYWNyb3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEaWFnbm9zdGljcy5odG1sI0RpYWdub3N0aWNzIiB0aXRsZT0iRGlhZ25vc3RpY3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29uZGl0aW9uYWxzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRpYWdub3N0aWNzLmh0bWwjRGlhZ25vc3RpY3MiPkRpYWdub3N0aWNzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIj5NYWNyb3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NCBDb25kaXRpb25hbHM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1jb25kaXRpb25hbHMtODMiPjwvYT4KK0EgPGRmbj5jb25kaXRpb25hbDwvZGZuPiBpcyBhIGRpcmVjdGl2ZSB0aGF0IGluc3RydWN0cyB0aGUgcHJlcHJvY2Vzc29yIHRvCitzZWxlY3Qgd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBhIGNodW5rIG9mIGNvZGUgaW4gdGhlIGZpbmFsIHRva2VuCitzdHJlYW0gcGFzc2VkIHRvIHRoZSBjb21waWxlci4gIFByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgY2FuIHRlc3QKK2FyaXRobWV0aWMgZXhwcmVzc2lvbnMsIG9yIHdoZXRoZXIgYSBuYW1lIGlzIGRlZmluZWQgYXMgYSBtYWNybywgb3IgYm90aAorc2ltdWx0YW5lb3VzbHkgdXNpbmcgdGhlIHNwZWNpYWwgPGNvZGU+ZGVmaW5lZDwvY29kZT4gb3BlcmF0b3IuCisKKyAgIDxwPkEgY29uZGl0aW9uYWwgaW4gdGhlIEMgcHJlcHJvY2Vzc29yIHJlc2VtYmxlcyBpbiBzb21lIHdheXMgYW4gPGNvZGU+aWY8L2NvZGU+CitzdGF0ZW1lbnQgaW4gQywgYnV0IGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KK3RoZW0uICBUaGUgY29uZGl0aW9uIGluIGFuIDxjb2RlPmlmPC9jb2RlPiBzdGF0ZW1lbnQgaXMgdGVzdGVkIGR1cmluZyB0aGUKK2V4ZWN1dGlvbiBvZiB5b3VyIHByb2dyYW0uICBJdHMgcHVycG9zZSBpcyB0byBhbGxvdyB5b3VyIHByb2dyYW0gdG8KK2JlaGF2ZSBkaWZmZXJlbnRseSBmcm9tIHJ1biB0byBydW4sIGRlcGVuZGluZyBvbiB0aGUgZGF0YSBpdCBpcworb3BlcmF0aW5nIG9uLiAgVGhlIGNvbmRpdGlvbiBpbiBhIHByZXByb2Nlc3NpbmcgY29uZGl0aW9uYWwgZGlyZWN0aXZlIGlzCit0ZXN0ZWQgd2hlbiB5b3VyIHByb2dyYW0gaXMgY29tcGlsZWQuICBJdHMgcHVycG9zZSBpcyB0byBhbGxvdyBkaWZmZXJlbnQKK2NvZGUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHByb2dyYW0gZGVwZW5kaW5nIG9uIHRoZSBzaXR1YXRpb24gYXQgdGhlCit0aW1lIG9mIGNvbXBpbGF0aW9uLgorCisgICA8cD5Ib3dldmVyLCB0aGUgZGlzdGluY3Rpb24gaXMgYmVjb21pbmcgbGVzcyBjbGVhci4gIE1vZGVybiBjb21waWxlcnMgb2Z0ZW4KK2RvIHRlc3QgPGNvZGU+aWY8L2NvZGU+IHN0YXRlbWVudHMgd2hlbiBhIHByb2dyYW0gaXMgY29tcGlsZWQsIGlmIHRoZWlyCitjb25kaXRpb25zIGFyZSBrbm93biBub3QgdG8gdmFyeSBhdCBydW4gdGltZSwgYW5kIGVsaW1pbmF0ZSBjb2RlIHdoaWNoCitjYW4gbmV2ZXIgYmUgZXhlY3V0ZWQuICBJZiB5b3UgY2FuIGNvdW50IG9uIHlvdXIgY29tcGlsZXIgdG8gZG8gdGhpcywKK3lvdSBtYXkgZmluZCB0aGF0IHlvdXIgcHJvZ3JhbSBpcyBtb3JlIHJlYWRhYmxlIGlmIHlvdSB1c2UgPGNvZGU+aWY8L2NvZGU+CitzdGF0ZW1lbnRzIHdpdGggY29uc3RhbnQgY29uZGl0aW9ucyAocGVyaGFwcyBkZXRlcm1pbmVkIGJ5IG1hY3JvcykuICBPZgorY291cnNlLCB5b3UgY2FuIG9ubHkgdXNlIHRoaXMgdG8gZXhjbHVkZSBjb2RlLCBub3QgdHlwZSBkZWZpbml0aW9ucyBvcgorb3RoZXIgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzLCBhbmQgeW91IGNhbiBvbmx5IGRvIGl0IGlmIHRoZSBjb2RlCityZW1haW5zIHN5bnRhY3RpY2FsbHkgdmFsaWQgd2hlbiBpdCBpcyBub3QgdG8gYmUgdXNlZC4KKworICAgPHA+R0NDIHZlcnNpb24gMyBlbGltaW5hdGVzIHRoaXMga2luZCBvZiBuZXZlci1leGVjdXRlZCBjb2RlIGV2ZW4gd2hlbgorbm90IG9wdGltaXppbmcuICBPbGRlciB2ZXJzaW9ucyBkaWQgaXQgb25seSB3aGVuIG9wdGltaXppbmcuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJDb25kaXRpb25hbC1Vc2VzLmh0bWwjQ29uZGl0aW9uYWwtVXNlcyI+Q29uZGl0aW9uYWwgVXNlczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI0NvbmRpdGlvbmFsLVN5bnRheCI+Q29uZGl0aW9uYWwgU3ludGF4PC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iRGVsZXRlZC1Db2RlLmh0bWwjRGVsZXRlZC1Db2RlIj5EZWxldGVkIENvZGU8L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RlZmluZWQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRGVmaW5lZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOWZkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RlZmluZWQuaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EZWZpbmVkIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI0NvbmRpdGlvbmFsLVN5bnRheCIgdGl0bGU9IkNvbmRpdGlvbmFsIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklmLmh0bWwjSWYiIHRpdGxlPSJJZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVsc2UuaHRtbCNFbHNlIiB0aXRsZT0iRWxzZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZWZpbmVkIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVsc2UuaHRtbCNFbHNlIj5FbHNlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSWYuaHRtbCNJZiI+SWY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb25kaXRpb25hbC1TeW50YXguaHRtbCNDb25kaXRpb25hbC1TeW50YXgiPkNvbmRpdGlvbmFsIFN5bnRheDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjQuMi4zIERlZmluZWQ8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRlZmluZWRfMDA3ZC04OSI+PC9hPlRoZSBzcGVjaWFsIG9wZXJhdG9yIDxjb2RlPmRlZmluZWQ8L2NvZGU+IGlzIHVzZWQgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGV4cHJlc3Npb25zIHRvIHRlc3Qgd2hldGhlciBhIGNlcnRhaW4gbmFtZSBpcyBkZWZpbmVkIGFzIGEKK21hY3JvLiAgPGNvZGU+ZGVmaW5lZCA8L2NvZGU+PHZhcj5uYW1lPC92YXI+IGFuZCA8Y29kZT5kZWZpbmVkICg8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+KTwvY29kZT4gYXJlCitib3RoIGV4cHJlc3Npb25zIHdob3NlIHZhbHVlIGlzIDEgaWYgPHZhcj5uYW1lPC92YXI+IGlzIGRlZmluZWQgYXMgYSBtYWNybyBhdAordGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlIHByb2dyYW0sIGFuZCAwIG90aGVyd2lzZS4gIFRodXMsICA8Y29kZT4jaWYmbmJzcDtkZWZpbmVkJm5ic3A7TUFDUk88IS0tIC9AdyAtLT48L2NvZGU+IGlzIHByZWNpc2VseSBlcXVpdmFsZW50IHRvIDxjb2RlPiNpZmRlZiZuYnNwO01BQ1JPPCEtLSAvQHcgLS0+PC9jb2RlPi4KKworICAgPHA+PGNvZGU+ZGVmaW5lZDwvY29kZT4gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gdGVzdCBtb3JlIHRoYW4gb25lIG1hY3JvIGZvcgorZXhpc3RlbmNlIGF0IG9uY2UuICBGb3IgZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNpZiBkZWZpbmVkIChfX3ZheF9fKSB8fCBkZWZpbmVkIChfX25zMTYwMDBfXykKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53b3VsZCBzdWNjZWVkIGlmIGVpdGhlciBvZiB0aGUgbmFtZXMgPGNvZGU+X192YXhfXzwvY29kZT4gb3IKKzxjb2RlPl9fbnMxNjAwMF9fPC9jb2RlPiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8uCisKKyAgIDxwPkNvbmRpdGlvbmFscyB3cml0dGVuIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNpZiBkZWZpbmVkIEJVRlNJWkUgJmFtcDsmYW1wOyBCVUZTSVpFICZndDs9IDEwMjQKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5jYW4gZ2VuZXJhbGx5IGJlIHNpbXBsaWZpZWQgdG8ganVzdCA8Y29kZT4jaWYmbmJzcDtCVUZTSVpFJm5ic3A7Jmd0Oz0mbmJzcDsxMDI0PCEtLSAvQHcgLS0+PC9jb2RlPiwKK3NpbmNlIGlmIDxjb2RlPkJVRlNJWkU8L2NvZGU+IGlzIG5vdCBkZWZpbmVkLCBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzIGhhdmluZwordGhlIHZhbHVlIHplcm8uCisKKyAgIDxwPklmIHRoZSA8Y29kZT5kZWZpbmVkPC9jb2RlPiBvcGVyYXRvciBhcHBlYXJzIGFzIGEgcmVzdWx0IG9mIGEgbWFjcm8gZXhwYW5zaW9uLAordGhlIEMgc3RhbmRhcmQgc2F5cyB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiAgR05VIGNwcCB0cmVhdHMgaXQgYXMgYQorZ2VudWluZSA8Y29kZT5kZWZpbmVkPC9jb2RlPiBvcGVyYXRvciBhbmQgZXZhbHVhdGVzIGl0IG5vcm1hbGx5LiAgSXQgd2lsbCB3YXJuCit3aGVyZXZlciB5b3VyIGNvZGUgdXNlcyB0aGlzIGZlYXR1cmUgaWYgeW91IHVzZSB0aGUgY29tbWFuZC1saW5lIG9wdGlvbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXBlZGFudGljPC9zcGFuPjwvc2FtcD4sIHNpbmNlIG90aGVyIGNvbXBpbGVycyBtYXkgaGFuZGxlIGl0IGRpZmZlcmVudGx5LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RlbGV0ZWQtQ29kZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9EZWxldGVkLUNvZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjdiZmMwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9EZWxldGVkLUNvZGUuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EZWxldGVkIENvZGUgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjQ29uZGl0aW9uYWxzIiB0aXRsZT0iQ29uZGl0aW9uYWxzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29uZGl0aW9uYWwtU3ludGF4Lmh0bWwjQ29uZGl0aW9uYWwtU3ludGF4IiB0aXRsZT0iQ29uZGl0aW9uYWwgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRlbGV0ZWQtQ29kZSI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI0NvbmRpdGlvbmFsLVN5bnRheCI+Q29uZGl0aW9uYWwgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjQ29uZGl0aW9uYWxzIj5Db25kaXRpb25hbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjMgRGVsZXRlZCBDb2RlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY29tbWVudGluZy1vdXQtY29kZS05MiI+PC9hPgorSWYgeW91IHJlcGxhY2Ugb3IgZGVsZXRlIGEgcGFydCBvZiB0aGUgcHJvZ3JhbSBidXQgd2FudCB0byBrZWVwIHRoZSBvbGQKK2NvZGUgYXJvdW5kIGZvciBmdXR1cmUgcmVmZXJlbmNlLCB5b3Ugb2Z0ZW4gY2Fubm90IHNpbXBseSBjb21tZW50IGl0CitvdXQuICBCbG9jayBjb21tZW50cyBkbyBub3QgbmVzdCwgc28gdGhlIGZpcnN0IGNvbW1lbnQgaW5zaWRlIHRoZSBvbGQKK2NvZGUgd2lsbCBlbmQgdGhlIGNvbW1lbnRpbmctb3V0LiAgVGhlIHByb2JhYmxlIHJlc3VsdCBpcyBhIGZsb29kIG9mCitzeW50YXggZXJyb3JzLgorCisgICA8cD5PbmUgd2F5IHRvIGF2b2lkIHRoaXMgcHJvYmxlbSBpcyB0byB1c2UgYW4gYWx3YXlzLWZhbHNlIGNvbmRpdGlvbmFsCitpbnN0ZWFkLiAgRm9yIGluc3RhbmNlLCBwdXQgPGNvZGU+I2lmIDA8L2NvZGU+IGJlZm9yZSB0aGUgZGVsZXRlZCBjb2RlIGFuZAorPGNvZGU+I2VuZGlmPC9jb2RlPiBhZnRlciBpdC4gIFRoaXMgd29ya3MgZXZlbiBpZiB0aGUgY29kZSBiZWluZyB0dXJuZWQKK29mZiBjb250YWlucyBjb25kaXRpb25hbHMsIGJ1dCB0aGV5IG11c3QgYmUgZW50aXJlIGNvbmRpdGlvbmFscworKGJhbGFuY2VkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbmRpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOykuCisKKyAgIDxwPlNvbWUgcGVvcGxlIHVzZSA8Y29kZT4jaWZkZWYgbm90ZGVmPC9jb2RlPiBpbnN0ZWFkLiAgVGhpcyBpcyByaXNreSwgYmVjYXVzZQorPGNvZGU+bm90ZGVmPC9jb2RlPiBtaWdodCBiZSBhY2NpZGVudGFsbHkgZGVmaW5lZCBhcyBhIG1hY3JvLCBhbmQgdGhlbiB0aGUKK2NvbmRpdGlvbmFsIHdvdWxkIHN1Y2NlZWQuICA8Y29kZT4jaWYgMDwvY29kZT4gY2FuIGJlIGNvdW50ZWQgb24gdG8gZmFpbC4KKworICAgPHA+RG8gbm90IHVzZSA8Y29kZT4jaWYgMDwvY29kZT4gZm9yIGNvbW1lbnRzIHdoaWNoIGFyZSBub3QgQyBjb2RlLiAgVXNlIGEgcmVhbAorY29tbWVudCwgaW5zdGVhZC4gIFRoZSBpbnRlcmlvciBvZiA8Y29kZT4jaWYgMDwvY29kZT4gbXVzdCBjb25zaXN0IG9mIGNvbXBsZXRlCit0b2tlbnM7IGluIHBhcnRpY3VsYXIsIHNpbmdsZS1xdW90ZSBjaGFyYWN0ZXJzIG11c3QgYmFsYW5jZS4gIENvbW1lbnRzCitvZnRlbiBjb250YWluIHVuYmFsYW5jZWQgc2luZ2xlLXF1b3RlIGNoYXJhY3RlcnMgKGtub3duIGluIEVuZ2xpc2ggYXMKK2Fwb3N0cm9waGVzKS4gIFRoZXNlIGNvbmZ1c2UgPGNvZGU+I2lmIDA8L2NvZGU+LiAgVGhleSBkb24ndCBjb25mdXNlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi8qPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RpYWdub3N0aWNzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RpYWdub3N0aWNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3NDQ0OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRGlhZ25vc3RpY3MuaHRtbApAQCAtMCwwICsxLDk0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EaWFnbm9zdGljcyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyIgdGl0bGU9IkNvbmRpdGlvbmFscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxpbmUtQ29udHJvbC5odG1sI0xpbmUtQ29udHJvbCIgdGl0bGU9IkxpbmUgQ29udHJvbCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEaWFnbm9zdGljcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMaW5lLUNvbnRyb2wuaHRtbCNMaW5lLUNvbnRyb2wiPkxpbmUgQ29udHJvbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyI+Q29uZGl0aW9uYWxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjUgRGlhZ25vc3RpY3M8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1kaWFnbm9zdGljLTkzIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVwb3J0aW5nLWVycm9ycy05NCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlcG9ydGluZy13YXJuaW5ncy05NSI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwMjNlcnJvci05NiI+PC9hPlRoZSBkaXJlY3RpdmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZXJyb3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgdG8gcmVwb3J0IGEgZmF0YWwKK2Vycm9yLiAgVGhlIHRva2VucyBmb3JtaW5nIHRoZSByZXN0IG9mIHRoZSBsaW5lIGZvbGxvd2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlcnJvcjwvc3Bhbj48L3NhbXA+JnJzcXVvOworYXJlIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2UuCisKKyAgIDxwPllvdSB3b3VsZCB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZXJyb3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zaWRlIG9mIGEgY29uZGl0aW9uYWwgdGhhdCBkZXRlY3RzIGEKK2NvbWJpbmF0aW9uIG9mIHBhcmFtZXRlcnMgd2hpY2ggeW91IGtub3cgdGhlIHByb2dyYW0gZG9lcyBub3QgcHJvcGVybHkKK3N1cHBvcnQuICBGb3IgZXhhbXBsZSwgaWYgeW91IGtub3cgdGhhdCB0aGUgcHJvZ3JhbSB3aWxsIG5vdCBydW4KK3Byb3Blcmx5IG9uIGEgVkFYLCB5b3UgbWlnaHQgd3JpdGUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNpZmRlZiBfX3ZheF9fCisgICAgICNlcnJvciAiV29uJ3Qgd29yayBvbiBWQVhlbi4gIFNlZSBjb21tZW50cyBhdCBnZXRfbGFzdF9vYmplY3QuIgorICAgICAjZW5kaWYKKzwvcHJlPgorICAgPHA+SWYgeW91IGhhdmUgc2V2ZXJhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGhhdCBtdXN0IGJlIHNldCB1cCBieQordGhlIGluc3RhbGxhdGlvbiBpbiBhIGNvbnNpc3RlbnQgd2F5LCB5b3UgY2FuIHVzZSBjb25kaXRpb25hbHMgdG8gZGV0ZWN0CithbiBpbmNvbnNpc3RlbmN5IGFuZCByZXBvcnQgaXQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlcnJvcjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2lmICFkZWZpbmVkKEZPTykgJmFtcDsmYW1wOyBkZWZpbmVkKEJBUikKKyAgICAgI2Vycm9yICJCQVIgcmVxdWlyZXMgRk9PLiIKKyAgICAgI2VuZGlmCis8L3ByZT4KKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzd2FybmluZy05NyI+PC9hPlRoZSBkaXJlY3RpdmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jd2FybmluZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBsaWtlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2Vycm9yPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBidXQgY2F1c2VzIHRoZQorcHJlcHJvY2Vzc29yIHRvIGlzc3VlIGEgd2FybmluZyBhbmQgY29udGludWUgcHJlcHJvY2Vzc2luZy4gIFRoZSB0b2tlbnMKK2ZvbGxvd2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiN3YXJuaW5nPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSB1c2VkIGFzIHRoZSB3YXJuaW5nIG1lc3NhZ2UuCisKKyAgIDxwPllvdSBtaWdodCB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jd2FybmluZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBvYnNvbGV0ZSBoZWFkZXIgZmlsZXMsIHdpdGggYSBtZXNzYWdlCitkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGhlYWRlciBmaWxlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisKKyAgIDxwPk5laXRoZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZXJyb3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3dhcm5pbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWFjcm8tZXhwYW5kcyBpdHMgYXJndW1lbnQuIAorSW50ZXJuYWwgd2hpdGVzcGFjZSBzZXF1ZW5jZXMgYXJlIGVhY2ggcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4gCitUaGUgbGluZSBtdXN0IGNvbnNpc3Qgb2YgY29tcGxldGUgdG9rZW5zLiAgSXQgaXMgd2lzZXN0IHRvIG1ha2UgdGhlCithcmd1bWVudCBvZiB0aGVzZSBkaXJlY3RpdmVzIGJlIGEgc2luZ2xlIHN0cmluZyBjb25zdGFudDsgdGhpcyBhdm9pZHMKK3Byb2JsZW1zIHdpdGggYXBvc3Ryb3BoZXMgYW5kIHRoZSBsaWtlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRGlmZmVyZW5jZXMtZnJvbS1wcmV2aW91cy12ZXJzaW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZGIwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMuaHRtbApAQCAtMCwwICsxLDE0NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGlmZmVyZW5jZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbXBsZW1lbnRhdGlvbi1EZXRhaWxzLmh0bWwjSW1wbGVtZW50YXRpb24tRGV0YWlscyIgdGl0bGU9IkltcGxlbWVudGF0aW9uIERldGFpbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPYnNvbGV0ZS1GZWF0dXJlcy5odG1sI09ic29sZXRlLUZlYXR1cmVzIiB0aXRsZT0iT2Jzb2xldGUgRmVhdHVyZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGlmZmVyZW5jZXMtZnJvbS1wcmV2aW91cy12ZXJzaW9ucyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjT2Jzb2xldGUtRmVhdHVyZXMiPk9ic29sZXRlIEZlYXR1cmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW1wbGVtZW50YXRpb24tRGV0YWlscy5odG1sI0ltcGxlbWVudGF0aW9uLURldGFpbHMiPkltcGxlbWVudGF0aW9uIERldGFpbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMS40IERpZmZlcmVuY2VzIGZyb20gcHJldmlvdXMgdmVyc2lvbnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1kaWZmZXJlbmNlcy1mcm9tLXByZXZpb3VzLXZlcnNpb25zLTExOSI+PC9hPgorVGhpcyBzZWN0aW9uIGRldGFpbHMgYmVoYXZpb3Igd2hpY2ggaGFzIGNoYW5nZWQgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucworb2YgQ1BQLiAgV2UgZG8gbm90IHBsYW4gdG8gY2hhbmdlIGl0IGFnYWluIGluIHRoZSBuZWFyIGZ1dHVyZSwgYnV0Cit3ZSBkbyBub3QgcHJvbWlzZSBub3QgdG8sIGVpdGhlci4KKworICAgPHA+VGhlICZsZHF1bztwcmV2aW91cyB2ZXJzaW9ucyZyZHF1bzsgZGlzY3Vzc2VkIGhlcmUgYXJlIDIuOTUgYW5kIGJlZm9yZS4gIFRoZQorYmVoYXZpb3Igb2YgR0NDIDMuMCBpcyBtb3N0bHkgdGhlIHNhbWUgYXMgdGhlIGJlaGF2aW9yIG9mIHRoZSB3aWRlbHkKK3VzZWQgMi45NiBhbmQgMi45NyBkZXZlbG9wbWVudCBzbmFwc2hvdHMuICBXaGVyZSB0aGVyZSBhcmUgZGlmZmVyZW5jZXMsCit0aGV5IGdlbmVyYWxseSByZXByZXNlbnQgYnVncyBpbiB0aGUgc25hcHNob3RzLgorCisgICAgIDx1bD4KKzxsaT4tSS0gZGVwcmVjYXRlZAorCisgICAgIDxwPlRoaXMgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gNC4wLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlxdW90ZTwvc3Bhbj48L3NhbXA+IGlzIG1lYW50IHRvCityZXBsYWNlIHRoZSBuZWVkIGZvciB0aGlzIG9wdGlvbi4KKworICAgICA8bGk+T3JkZXIgb2YgZXZhbHVhdGlvbiBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IyM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3BlcmF0b3JzCisKKyAgICAgPHA+VGhlIHN0YW5kYXJkIGRvZXMgbm90IHNwZWNpZnkgdGhlIG9yZGVyIG9mIGV2YWx1YXRpb24gb2YgYSBjaGFpbiBvZgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcGVyYXRvcnMsIG5vciB3aGV0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBldmFsdWF0ZWQgYmVmb3JlLCBhZnRlciwgb3IKK2F0IHRoZSBzYW1lIHRpbWUgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFlvdSBzaG91bGQgdGhlcmVmb3JlIG5vdCB3cml0ZSBhbnkgY29kZQord2hpY2ggZGVwZW5kcyBvbiBhbnkgc3BlY2lmaWMgb3JkZXJpbmcuICBJdCBpcyBwb3NzaWJsZSB0byBndWFyYW50ZWUgYW4KK29yZGVyaW5nLCBpZiB5b3UgbmVlZCBvbmUsIGJ5IHN1aXRhYmxlIHVzZSBvZiBuZXN0ZWQgbWFjcm9zLgorCisgICAgIDxwPkFuIGV4YW1wbGUgb2Ygd2hlcmUgdGhpcyBtaWdodCBtYXR0ZXIgaXMgcGFzdGluZyB0aGUgYXJndW1lbnRzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tMjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoaXMgd291bGQgYmUgZmluZSBmb3IgbGVmdC10by1yaWdodCBwYXN0aW5nLAorYnV0IHJpZ2h0LXRvLWxlZnQgcGFzdGluZyB3b3VsZCBwcm9kdWNlIGFuIGludmFsaWQgdG9rZW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lLTI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+R0NDIDMuMCBldmFsdWF0ZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGF0IHRoZSBzYW1lIHRpbWUgYW5kIHN0cmljdGx5CitsZWZ0IHRvIHJpZ2h0LiAgT2xkZXIgdmVyc2lvbnMgZXZhbHVhdGVkIGFsbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3BlcmF0b3JzIGZpcnN0LAordGhlbiBhbGwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcGVyYXRvcnMsIGluIGFuIHVucmVsaWFibGUgb3JkZXIuCisKKyAgICAgPGxpPlRoZSBmb3JtIG9mIHdoaXRlc3BhY2UgYmV0d2VlbiB0b2tlbnMgaW4gcHJlcHJvY2Vzc29yIG91dHB1dAorCisgICAgIDxwPlNlZSA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3V0cHV0Lmh0bWwjUHJlcHJvY2Vzc29yLU91dHB1dCI+UHJlcHJvY2Vzc29yIE91dHB1dDwvYT4sIGZvciB0aGUgY3VycmVudCB0ZXh0dWFsIGZvcm1hdC4gIFRoaXMgaXMKK2Fsc28gdGhlIGZvcm1hdCB1c2VkIGJ5IHN0cmluZ2lmaWNhdGlvbi4gIE5vcm1hbGx5LCB0aGUgcHJlcHJvY2Vzc29yCitjb21tdW5pY2F0ZXMgdG9rZW5zIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcidzIHBhcnNlciwgYW5kIHdoaXRlc3BhY2UKK2RvZXMgbm90IGNvbWUgdXAgYXQgYWxsLgorCisgICAgIDxwPk9sZGVyIHZlcnNpb25zIG9mIEdDQyBwcmVzZXJ2ZWQgYWxsIHdoaXRlc3BhY2UgcHJvdmlkZWQgYnkgdGhlIHVzZXIgYW5kCitpbnNlcnRlZCBsb3RzIG1vcmUgd2hpdGVzcGFjZSBvZiB0aGVpciBvd24sIGJlY2F1c2UgdGhleSBjb3VsZCBub3QKK2FjY3VyYXRlbHkgcHJlZGljdCB3aGVuIGV4dHJhIHNwYWNlcyB3ZXJlIG5lZWRlZCB0byBwcmV2ZW50IGFjY2lkZW50YWwKK3Rva2VuIHBhc3RpbmcuCisKKyAgICAgPGxpPk9wdGlvbmFsIGFyZ3VtZW50IHdoZW4gaW52b2tpbmcgcmVzdCBhcmd1bWVudCBtYWNyb3MKKworICAgICA8cD5BcyBhbiBleHRlbnNpb24sIEdDQyBwZXJtaXRzIHlvdSB0byBvbWl0IHRoZSB2YXJpYWJsZSBhcmd1bWVudHMgZW50aXJlbHkKK3doZW4geW91IHVzZSBhIHZhcmlhYmxlIGFyZ3VtZW50IG1hY3JvLiAgVGhpcyBpcyBmb3JiaWRkZW4gYnkgdGhlIDE5OTkgQworc3RhbmRhcmQsIGFuZCB3aWxsIHByb3Zva2UgYSBwZWRhbnRpYyB3YXJuaW5nIHdpdGggR0NDIDMuMC4gIFByZXZpb3VzCit2ZXJzaW9ucyBhY2NlcHRlZCBpdCBzaWxlbnRseS4KKworICAgICA8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzd2FsbG93aW5nIHByZWNlZGluZyB0ZXh0IGluIHJlc3QgYXJndW1lbnQgbWFjcm9zCisKKyAgICAgPHA+Rm9ybWVybHksIGluIGEgbWFjcm8gZXhwYW5zaW9uLCBpZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcmVkIGJlZm9yZSBhIHZhcmlhYmxlCithcmd1bWVudHMgcGFyYW1ldGVyLCBhbmQgdGhlIHNldCBvZiB0b2tlbnMgc3BlY2lmaWVkIGZvciB0aGF0IGFyZ3VtZW50CitpbiB0aGUgbWFjcm8gaW52b2NhdGlvbiB3YXMgZW1wdHksIHByZXZpb3VzIHZlcnNpb25zIG9mIENQUCB3b3VsZAorYmFjayB1cCBhbmQgcmVtb3ZlIHRoZSBwcmVjZWRpbmcgc2VxdWVuY2Ugb2Ygbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycworKDxzdHJvbmc+bm90PC9zdHJvbmc+IHRoZSBwcmVjZWRpbmcgdG9rZW4pLiAgVGhpcyBleHRlbnNpb24gaXMgaW4gZGlyZWN0Citjb25mbGljdCB3aXRoIHRoZSAxOTk5IEMgc3RhbmRhcmQgYW5kIGhhcyBiZWVuIGRyYXN0aWNhbGx5IHBhcmVkIGJhY2suCisKKyAgICAgPHA+SW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcHJlcHJvY2Vzc29yLCBpZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgYmV0d2VlbgorYSBjb21tYSBhbmQgYSB2YXJpYWJsZSBhcmd1bWVudHMgcGFyYW1ldGVyLCBhbmQgdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGlzCitvbWl0dGVkIGVudGlyZWx5LCB0aGUgY29tbWEgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGV4cGFuc2lvbi4gIElmIHRoZQordmFyaWFibGUgYXJndW1lbnQgaXMgZW1wdHksIG9yIHRoZSB0b2tlbiBiZWZvcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBub3QgYQorY29tbWEsIHRoZW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBiZWhhdmVzIGFzIGEgbm9ybWFsIHRva2VuIHBhc3RlLgorCisgICAgIDxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNsaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2xpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIHVzZWQgdG8gY2hhbmdlIEdDQydzIG5vdGlvbiBvZiB0aGUKKyZsZHF1bztkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY3VycmVudCBmaWxlJnJkcXVvOywgdXNlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpdGgKK2EgZG91YmxlLXF1b3RlZCBoZWFkZXIgZmlsZSBuYW1lLiAgSW4gMy4wIGFuZCBsYXRlciwgaXQgZG9lcyBub3QuIAorU2VlIDxhIGhyZWY9IkxpbmUtQ29udHJvbC5odG1sI0xpbmUtQ29udHJvbCI+TGluZSBDb250cm9sPC9hPiwgZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb24uCisKKyAgICAgPGxpPlN5bnRheCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNsaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgPHA+SW4gR0NDIDIuOTUgYW5kIHByZXZpb3VzLCB0aGUgc3RyaW5nIGNvbnN0YW50IGFyZ3VtZW50IHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2xpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3dhcyB0cmVhdGVkIHRoZSBzYW1lIHdheSBhcyB0aGUgYXJndW1lbnQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzogYmFja3NsYXNoCitlc2NhcGVzIHdlcmUgbm90IGhvbm9yZWQsIGFuZCB0aGUgc3RyaW5nIGVuZGVkIGF0IHRoZSBzZWNvbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4iPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1RoaXMgaXMgbm90IGNvbXBsaWFudCB3aXRoIHRoZSBDIHN0YW5kYXJkLiAgSW4gR0NDIDMuMCwgYW4gYXR0ZW1wdCB3YXMKK21hZGUgdG8gY29ycmVjdCB0aGUgYmVoYXZpb3IsIHNvIHRoYXQgdGhlIHN0cmluZyB3YXMgdHJlYXRlZCBhcyBhIHJlYWwKK3N0cmluZyBjb25zdGFudCwgYnV0IGl0IHR1cm5lZCBvdXQgdG8gYmUgYnVnZ3kuICBJbiAzLjEsIHRoZSBidWdzIGhhdmUKK2JlZW4gZml4ZWQuICAoV2UgYXJlIG5vdCBmaXhpbmcgdGhlIGJ1Z3MgaW4gMy4wIGJlY2F1c2UgdGhleSBhZmZlY3QKK3JlbGF0aXZlbHkgZmV3IHBlb3BsZSBhbmQgdGhlIGZpeCBpcyBxdWl0ZSBpbnZhc2l2ZS4pCisKKyAgIDwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RpcmVjdGl2ZXMtV2l0aGluLU1hY3JvLUFyZ3VtZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YWYyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0RpcmVjdGl2ZXMtV2l0aGluLU1hY3JvLUFyZ3VtZW50cy5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRpcmVjdGl2ZXMgV2l0aGluIE1hY3JvIEFyZ3VtZW50cyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiIHRpdGxlPSJNYWNyb3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJVbmRlZmluaW5nLWFuZC1SZWRlZmluaW5nLU1hY3Jvcy5odG1sI1VuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zIiB0aXRsZT0iVW5kZWZpbmluZyBhbmQgUmVkZWZpbmluZyBNYWNyb3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIiB0aXRsZT0iTWFjcm8gUGl0ZmFsbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1hY3JvLVBpdGZhbGxzLmh0bWwjTWFjcm8tUGl0ZmFsbHMiPk1hY3JvIFBpdGZhbGxzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MuaHRtbCNVbmRlZmluaW5nLWFuZC1SZWRlZmluaW5nLU1hY3JvcyI+VW5kZWZpbmluZyBhbmQgUmVkZWZpbmluZyBNYWNyb3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiPk1hY3JvczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuOSBEaXJlY3RpdmVzIFdpdGhpbiBNYWNybyBBcmd1bWVudHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNyby1hcmd1bWVudHMtYW5kLWRpcmVjdGl2ZXMtNzEiPjwvYT4KK09jY2FzaW9uYWxseSBpdCBpcyBjb252ZW5pZW50IHRvIHVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB3aXRoaW4KK3RoZSBhcmd1bWVudHMgb2YgYSBtYWNyby4gIFRoZSBDIGFuZCBDKysgc3RhbmRhcmRzIGRlY2xhcmUgdGhhdAorYmVoYXZpb3IgaW4gdGhlc2UgY2FzZXMgaXMgdW5kZWZpbmVkLgorCisgICA8cD5WZXJzaW9ucyBvZiBDUFAgcHJpb3IgdG8gMy4yIHdvdWxkIHJlamVjdCBzdWNoIGNvbnN0cnVjdHMgd2l0aCBhbgorZXJyb3IgbWVzc2FnZS4gIFRoaXMgd2FzIHRoZSBvbmx5IHN5bnRhY3RpYyBkaWZmZXJlbmNlIGJldHdlZW4gbm9ybWFsCitmdW5jdGlvbnMgYW5kIGZ1bmN0aW9uLWxpa2UgbWFjcm9zLCBzbyBpdCBzZWVtZWQgYXR0cmFjdGl2ZSB0byByZW1vdmUKK3RoaXMgbGltaXRhdGlvbiwgYW5kIHBlb3BsZSB3b3VsZCBvZnRlbiBiZSBzdXJwcmlzZWQgdGhhdCB0aGV5IGNvdWxkCitub3QgdXNlIG1hY3JvcyBpbiB0aGlzIHdheS4gIE1vcmVvdmVyLCBzb21ldGltZXMgcGVvcGxlIHdvdWxkIHVzZQorY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW4gdGhlIGFyZ3VtZW50IGxpc3QgdG8gYSBub3JtYWwgbGlicmFyeQorZnVuY3Rpb24gbGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByaW50Zjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb25seSB0byBmaW5kIHRoYXQgYWZ0ZXIgYSBsaWJyYXJ5IHVwZ3JhZGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cHJpbnRmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGhhZCBjaGFuZ2VkIHRvIGJlIGEgZnVuY3Rpb24tbGlrZSBtYWNybywgYW5kIHRoZWlyIGNvZGUKK3dvdWxkIG5vIGxvbmdlciBjb21waWxlLiAgU28gZnJvbSB2ZXJzaW9uIDMuMiB3ZSBjaGFuZ2VkIENQUCB0bworc3VjY2Vzc2Z1bGx5IHByb2Nlc3MgYXJiaXRyYXJ5IGRpcmVjdGl2ZXMgd2l0aGluIG1hY3JvIGFyZ3VtZW50cyBpbgorZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgaXQgd291bGQgaGF2ZSBwcm9jZXNzZWQgdGhlIGRpcmVjdGl2ZSB3ZXJlIHRoZQorZnVuY3Rpb24tbGlrZSBtYWNybyBpbnZvY2F0aW9uIG5vdCBwcmVzZW50LgorCisgICA8cD5JZiwgd2l0aGluIGEgbWFjcm8gaW52b2NhdGlvbiwgdGhhdCBtYWNybyBpcyByZWRlZmluZWQsIHRoZW4gdGhlIG5ldworZGVmaW5pdGlvbiB0YWtlcyBlZmZlY3QgaW4gdGltZSBmb3IgYXJndW1lbnQgcHJlLWV4cGFuc2lvbiwgYnV0IHRoZQorb3JpZ2luYWwgZGVmaW5pdGlvbiBpcyBzdGlsbCB1c2VkIGZvciBhcmd1bWVudCByZXBsYWNlbWVudC4gIEhlcmUgaXMgYQorcGF0aG9sb2dpY2FsIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIGYoeCkgeCB4CisgICAgIGYgKDEKKyAgICAgI3VuZGVmIGYKKyAgICAgI2RlZmluZSBmIDIKKyAgICAgZikKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aGljaCBleHBhbmRzIHRvCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAxIDIgMSAyCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+d2l0aCB0aGUgc2VtYW50aWNzIGRlc2NyaWJlZCBhYm92ZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9EdXBsaWNhdGlvbi1vZi1TaWRlLUVmZmVjdHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRHVwbGljYXRpb24tb2YtU2lkZS1FZmZlY3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4NjM5OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRHVwbGljYXRpb24tb2YtU2lkZS1FZmZlY3RzLmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkR1cGxpY2F0aW9uIG9mIFNpZGUgRWZmZWN0cyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIiB0aXRsZT0iTWFjcm8gUGl0ZmFsbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTd2FsbG93aW5nLXRoZS1TZW1pY29sb24uaHRtbCNTd2FsbG93aW5nLXRoZS1TZW1pY29sb24iIHRpdGxlPSJTd2FsbG93aW5nIHRoZSBTZW1pY29sb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbCNTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MiIHRpdGxlPSJTZWxmLVJlZmVyZW50aWFsIE1hY3JvcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEdXBsaWNhdGlvbi1vZi1TaWRlLUVmZmVjdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU2VsZl8wMDJkUmVmZXJlbnRpYWwtTWFjcm9zLmh0bWwjU2VsZl8wMDJkUmVmZXJlbnRpYWwtTWFjcm9zIj5TZWxmLVJlZmVyZW50aWFsIE1hY3JvczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN3YWxsb3dpbmctdGhlLVNlbWljb2xvbi5odG1sI1N3YWxsb3dpbmctdGhlLVNlbWljb2xvbiI+U3dhbGxvd2luZyB0aGUgU2VtaWNvbG9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjcm8tUGl0ZmFsbHMuaHRtbCNNYWNyby1QaXRmYWxscyI+TWFjcm8gUGl0ZmFsbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjEwLjQgRHVwbGljYXRpb24gb2YgU2lkZSBFZmZlY3RzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtc2lkZS1lZmZlY3RzLV8wMDI4aW4tbWFjcm8tYXJndW1lbnRzXzAwMjktNzYiPjwvYT48YSBuYW1lPSJpbmRleC11bnNhZmUtbWFjcm9zLTc3Ij48L2E+TWFueSBDIHByb2dyYW1zIGRlZmluZSBhIG1hY3JvIDxjb2RlPm1pbjwvY29kZT4sIGZvciAmbGRxdW87bWluaW11bSZyZHF1bzssIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgbWluKFgsIFkpICAoKFgpICZsdDsgKFkpID8gKFgpIDogKFkpKQorPC9wcmU+CisgICA8cD5XaGVuIHlvdSB1c2UgdGhpcyBtYWNybyB3aXRoIGFuIGFyZ3VtZW50IGNvbnRhaW5pbmcgYSBzaWRlIGVmZmVjdCwKK2FzIHNob3duIGhlcmUsCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBuZXh0ID0gbWluICh4ICsgeSwgZm9vICh6KSk7Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+aXQgZXhwYW5kcyBhcyBmb2xsb3dzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgbmV4dCA9ICgoeCArIHkpICZsdDsgKGZvbyAoeikpID8gKHggKyB5KSA6IChmb28gKHopKSk7Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+d2hlcmUgPGNvZGU+eCArIHk8L2NvZGU+IGhhcyBiZWVuIHN1YnN0aXR1dGVkIGZvciA8Y29kZT5YPC9jb2RlPiBhbmQgPGNvZGU+Zm9vICh6KTwvY29kZT4KK2ZvciA8Y29kZT5ZPC9jb2RlPi4KKworICAgPHA+VGhlIGZ1bmN0aW9uIDxjb2RlPmZvbzwvY29kZT4gaXMgdXNlZCBvbmx5IG9uY2UgaW4gdGhlIHN0YXRlbWVudCBhcyBpdCBhcHBlYXJzCitpbiB0aGUgcHJvZ3JhbSwgYnV0IHRoZSBleHByZXNzaW9uIDxjb2RlPmZvbyAoeik8L2NvZGU+IGhhcyBiZWVuIHN1YnN0aXR1dGVkCit0d2ljZSBpbnRvIHRoZSBtYWNybyBleHBhbnNpb24uICBBcyBhIHJlc3VsdCwgPGNvZGU+Zm9vPC9jb2RlPiBtaWdodCBiZSBjYWxsZWQKK3R3byB0aW1lcyB3aGVuIHRoZSBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQuICBJZiBpdCBoYXMgc2lkZSBlZmZlY3RzIG9yIGlmCitpdCB0YWtlcyBhIGxvbmcgdGltZSB0byBjb21wdXRlLCB0aGUgcmVzdWx0cyBtaWdodCBub3QgYmUgd2hhdCB5b3UKK2ludGVuZGVkLiAgV2Ugc2F5IHRoYXQgPGNvZGU+bWluPC9jb2RlPiBpcyBhbiA8ZGZuPnVuc2FmZTwvZGZuPiBtYWNyby4KKworICAgPHA+VGhlIGJlc3Qgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIGRlZmluZSA8Y29kZT5taW48L2NvZGU+IGluIGEgd2F5IHRoYXQKK2NvbXB1dGVzIHRoZSB2YWx1ZSBvZiA8Y29kZT5mb28gKHopPC9jb2RlPiBvbmx5IG9uY2UuICBUaGUgQyBsYW5ndWFnZSBvZmZlcnMKK25vIHN0YW5kYXJkIHdheSB0byBkbyB0aGlzLCBidXQgaXQgY2FuIGJlIGRvbmUgd2l0aCBHTlUgZXh0ZW5zaW9ucyBhcworZm9sbG93czoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgbWluKFgsIFkpICAgICAgICAgICAgICAgIFwKKyAgICAgKHsgdHlwZW9mIChYKSB4XyA9IChYKTsgICAgICAgICAgXAorICAgICAgICB0eXBlb2YgKFkpIHlfID0gKFkpOyAgICAgICAgICBcCisgICAgICAgICh4XyAmbHQ7IHlfKSA/IHhfIDogeV87IH0pCis8L3ByZT4KKyAgIDxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPih7IC4uLiB9KTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBub3RhdGlvbiBwcm9kdWNlcyBhIGNvbXBvdW5kIHN0YXRlbWVudCB0aGF0CithY3RzIGFzIGFuIGV4cHJlc3Npb24uICBJdHMgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIGl0cyBsYXN0IHN0YXRlbWVudC4gCitUaGlzIHBlcm1pdHMgdXMgdG8gZGVmaW5lIGxvY2FsIHZhcmlhYmxlcyBhbmQgYXNzaWduIGVhY2ggYXJndW1lbnQgdG8KK29uZS4gIFRoZSBsb2NhbCB2YXJpYWJsZXMgaGF2ZSB1bmRlcnNjb3JlcyBhZnRlciB0aGVpciBuYW1lcyB0byByZWR1Y2UKK3RoZSByaXNrIG9mIGNvbmZsaWN0IHdpdGggYW4gaWRlbnRpZmllciBvZiB3aWRlciBzY29wZSAoaXQgaXMgaW1wb3NzaWJsZQordG8gYXZvaWQgdGhpcyBlbnRpcmVseSkuICBOb3cgZWFjaCBhcmd1bWVudCBpcyBldmFsdWF0ZWQgZXhhY3RseSBvbmNlLgorCisgICA8cD5JZiB5b3UgZG8gbm90IHdpc2ggdG8gdXNlIEdOVSBDIGV4dGVuc2lvbnMsIHRoZSBvbmx5IHNvbHV0aW9uIGlzIHRvIGJlCitjYXJlZnVsIHdoZW4gPGVtPnVzaW5nPC9lbT4gdGhlIG1hY3JvIDxjb2RlPm1pbjwvY29kZT4uICBGb3IgZXhhbXBsZSwgeW91IGNhbgorY2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiA8Y29kZT5mb28gKHopPC9jb2RlPiwgc2F2ZSBpdCBpbiBhIHZhcmlhYmxlLCBhbmQgdXNlCit0aGF0IHZhcmlhYmxlIGluIDxjb2RlPm1pbjwvY29kZT46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIG1pbihYLCBZKSAgKChYKSAmbHQ7IChZKSA/IChYKSA6IChZKSkKKyAgICAgLi4uCisgICAgIHsKKyAgICAgICBpbnQgdGVtID0gZm9vICh6KTsKKyAgICAgICBuZXh0ID0gbWluICh4ICsgeSwgdGVtKTsKKyAgICAgfQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPih3aGVyZSB3ZSBhc3N1bWUgdGhhdCA8Y29kZT5mb288L2NvZGU+IHJldHVybnMgdHlwZSA8Y29kZT5pbnQ8L2NvZGU+KS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9FbGlmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0VsaWYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTFiZTlhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9FbGlmLmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RWxpZiAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb25kaXRpb25hbC1TeW50YXguaHRtbCNDb25kaXRpb25hbC1TeW50YXgiIHRpdGxlPSJDb25kaXRpb25hbCBTeW50YXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFbHNlLmh0bWwjRWxzZSIgdGl0bGU9IkVsc2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRWxpZiI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVsc2UuaHRtbCNFbHNlIj5FbHNlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29uZGl0aW9uYWwtU3ludGF4Lmh0bWwjQ29uZGl0aW9uYWwtU3ludGF4Ij5Db25kaXRpb25hbCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj40LjIuNSBFbGlmPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNlbGlmLTkxIj48L2E+T25lIGNvbW1vbiBjYXNlIG9mIG5lc3RlZCBjb25kaXRpb25hbHMgaXMgdXNlZCB0byBjaGVjayBmb3IgbW9yZSB0aGFuIHR3bworcG9zc2libGUgYWx0ZXJuYXRpdmVzLiAgRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBoYXZlCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjaWYgWCA9PSAxCisgICAgIC4uLgorICAgICAjZWxzZSAvKiBYICE9IDEgKi8KKyAgICAgI2lmIFggPT0gMgorICAgICAuLi4KKyAgICAgI2Vsc2UgLyogWCAhPSAyICovCisgICAgIC4uLgorICAgICAjZW5kaWYgLyogWCAhPSAyICovCisgICAgICNlbmRpZiAvKiBYICE9IDEgKi8KKzwvcHJlPgorICAgPHA+QW5vdGhlciBjb25kaXRpb25hbCBkaXJlY3RpdmUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2VsaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFsbG93cyB0aGlzIHRvIGJlCithYmJyZXZpYXRlZCBhcyBmb2xsb3dzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2lmIFggPT0gMQorICAgICAuLi4KKyAgICAgI2VsaWYgWCA9PSAyCisgICAgIC4uLgorICAgICAjZWxzZSAvKiBYICE9IDIgYW5kIFggIT0gMSovCisgICAgIC4uLgorICAgICAjZW5kaWYgLyogWCAhPSAyIGFuZCBYICE9IDEqLworPC9wcmU+CisgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN0YW5kcyBmb3IgJmxkcXVvO2Vsc2UgaWYmcmRxdW87LiAgTGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbHNlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBpdCBnb2VzIGluIHRoZQorbWlkZGxlIG9mIGEgY29uZGl0aW9uYWwgZ3JvdXAgYW5kIHN1YmRpdmlkZXMgaXQ7IGl0IGRvZXMgbm90IHJlcXVpcmUgYQorbWF0Y2hpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZW5kaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb2YgaXRzIG93bi4gIExpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87CitkaXJlY3RpdmUgaW5jbHVkZXMgYW4gZXhwcmVzc2lvbiB0byBiZSB0ZXN0ZWQuICBUaGUgdGV4dCBmb2xsb3dpbmcgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHByb2Nlc3NlZCBvbmx5IGlmIHRoZSBvcmlnaW5hbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOy1jb25kaXRpb24KK2ZhaWxlZCBhbmQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2VsaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29uZGl0aW9uIHN1Y2NlZWRzLgorCisgICA8cD5Nb3JlIHRoYW4gb25lICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2VsaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FuIGdvIGluIHRoZSBzYW1lIGNvbmRpdGlvbmFsIGdyb3VwLiAgVGhlbgordGhlIHRleHQgYWZ0ZXIgZWFjaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHByb2Nlc3NlZCBvbmx5IGlmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87Citjb25kaXRpb24gc3VjY2VlZHMgYWZ0ZXIgdGhlIG9yaWdpbmFsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBhbGwgcHJldmlvdXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2VsaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlcyB3aXRoaW4gaXQgaGF2ZSBmYWlsZWQuCisKKyAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2Vsc2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYWxsb3dlZCBhZnRlciBhbnkgbnVtYmVyIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2VsaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlcywgYnV0CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1heSBub3QgZm9sbG93ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2Vsc2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRWxzZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9FbHNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkMmEyNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRWxzZS5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVsc2UgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29uZGl0aW9uYWwtU3ludGF4Lmh0bWwjQ29uZGl0aW9uYWwtU3ludGF4IiB0aXRsZT0iQ29uZGl0aW9uYWwgU3ludGF4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGVmaW5lZC5odG1sI0RlZmluZWQiIHRpdGxlPSJEZWZpbmVkIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRWxpZi5odG1sI0VsaWYiIHRpdGxlPSJFbGlmIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVsc2UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRWxpZi5odG1sI0VsaWYiPkVsaWY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEZWZpbmVkLmh0bWwjRGVmaW5lZCI+RGVmaW5lZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI0NvbmRpdGlvbmFsLVN5bnRheCI+Q29uZGl0aW9uYWwgU3ludGF4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+NC4yLjQgRWxzZTwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzZWxzZS05MCI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbHNlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSBjYW4gYmUgYWRkZWQgdG8gYSBjb25kaXRpb25hbCB0byBwcm92aWRlCithbHRlcm5hdGl2ZSB0ZXh0IHRvIGJlIHVzZWQgaWYgdGhlIGNvbmRpdGlvbiBmYWlscy4gIFRoaXMgaXMgd2hhdCBpdAorbG9va3MgbGlrZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNpZiA8dmFyPmV4cHJlc3Npb248L3Zhcj4KKyAgICAgPHZhcj50ZXh0LWlmLXRydWU8L3Zhcj4KKyAgICAgI2Vsc2UgLyogTm90IDx2YXI+ZXhwcmVzc2lvbjwvdmFyPiAqLworICAgICA8dmFyPnRleHQtaWYtZmFsc2U8L3Zhcj4KKyAgICAgI2VuZGlmIC8qIE5vdCA8dmFyPmV4cHJlc3Npb248L3Zhcj4gKi8KKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5JZiA8dmFyPmV4cHJlc3Npb248L3Zhcj4gaXMgbm9uemVybywgdGhlIDx2YXI+dGV4dC1pZi10cnVlPC92YXI+IGlzIGluY2x1ZGVkIGFuZAordGhlIDx2YXI+dGV4dC1pZi1mYWxzZTwvdmFyPiBpcyBza2lwcGVkLiAgSWYgPHZhcj5leHByZXNzaW9uPC92YXI+IGlzIHplcm8sIHRoZQorb3Bwb3NpdGUgaGFwcGVucy4KKworICAgPHA+WW91IGNhbiB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZWxzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZm5kZWY8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRvby4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9FbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkM2VhMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwKQEAgLTAsMCArMSwxMzQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVudmlyb25tZW50IFZhcmlhYmxlcyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIiB0aXRsZT0iSW52b2NhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgdGl0bGU9IkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMyBFbnZpcm9ubWVudCBWYXJpYWJsZXM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1lbnZpcm9ubWVudC12YXJpYWJsZXMtMjAzIj48L2E+PCEtLSBtYW4gYmVnaW4gRU5WSVJPTk1FTlQgLS0+CisKKyAgIDxwPlRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFmZmVjdCBob3cgQ1BQCitvcGVyYXRlcy4gIFlvdSBjYW4gdXNlIHRoZW0gdG8gc3BlY2lmeSBkaXJlY3RvcmllcyBvciBwcmVmaXhlcyB0byB1c2UKK3doZW4gc2VhcmNoaW5nIGZvciBpbmNsdWRlIGZpbGVzLCBvciB0byBjb250cm9sIGRlcGVuZGVuY3kgb3V0cHV0LgorCisgICA8cD5Ob3RlIHRoYXQgeW91IGNhbiBhbHNvIHNwZWNpZnkgcGxhY2VzIHRvIHNlYXJjaCB1c2luZyBvcHRpb25zIHN1Y2ggYXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4sIGFuZCBjb250cm9sIGRlcGVuZGVuY3kgb3V0cHV0IHdpdGggb3B0aW9ucyBsaWtlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+IChzZWUgPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+KS4gIFRoZXNlIHRha2UgcHJlY2VkZW5jZSBvdmVyCitlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIGluIHR1cm4gdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlCitjb25maWd1cmF0aW9uIG9mIEdDQy4KKworPCEtLSBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgQ1BQIGFuZCBHQ0MgbWFudWFscy4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBnY2MudGV4aS4gLS0+Cis8IS0tICAtLT4KKzwhLS0gRW52aXJvbm1lbnQgdmFyaWFibGVzIGFmZmVjdGluZyB0aGUgcHJlcHJvY2Vzc29yIC0tPgorPCEtLSAgLS0+Cis8IS0tIElmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBmbGFnIGBgY3BwbWFudWFsJycgc2V0LCBpdCBpcyAtLT4KKzwhLS0gZm9ybWF0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIENQUCBtYW51YWw7IG90aGVyd2lzZSB0aGUgbWFpbiBHQ0MgbWFudWFsLiAtLT4KKyAgICAgPGRsPgorPGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkNQQVRIPC9zcGFuPjwvc2FtcD48YSBuYW1lPSJpbmRleC1DUEFUSC0yMDQiPjwvYT48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+Q19JTkNMVURFX1BBVEg8L3NwYW4+PC9zYW1wPjxhIG5hbWU9ImluZGV4LUNfMDA1ZklOQ0xVREVfMDA1ZlBBVEgtMjA1Ij48L2E+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkNQTFVTX0lOQ0xVREVfUEFUSDwvc3Bhbj48L3NhbXA+PGEgbmFtZT0iaW5kZXgtQ1BMVVNfMDA1ZklOQ0xVREVfMDA1ZlBBVEgtMjA2Ij48L2E+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPk9CSkNfSU5DTFVERV9QQVRIPC9zcGFuPjwvc2FtcD48YSBuYW1lPSJpbmRleC1PQkpDXzAwNWZJTkNMVURFXzAwNWZQQVRILTIwNyI+PC9hPjxkZD48IS0tIENvbW1lbnRlZCBvdXQgdW50aWwgT2JqQysrIGlzIHBhcnQgb2YgR0NDOiAtLT4KKzwhLS0gQGl0ZW14IE9CSkNQTFVTX0lOQ0xVREVfUEFUSCAtLT4KK0VhY2ggdmFyaWFibGUncyB2YWx1ZSBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IGEgc3BlY2lhbAorY2hhcmFjdGVyLCBtdWNoIGxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+UEFUSDwvc3Bhbj48L3NhbXA+LCBpbiB3aGljaCB0byBsb29rIGZvciBoZWFkZXIgZmlsZXMuIAorVGhlIHNwZWNpYWwgY2hhcmFjdGVyLCA8Y29kZT5QQVRIX1NFUEFSQVRPUjwvY29kZT4sIGlzIHRhcmdldC1kZXBlbmRlbnQgYW5kCitkZXRlcm1pbmVkIGF0IEdDQyBidWlsZCB0aW1lLiAgRm9yIE1pY3Jvc29mdCBXaW5kb3dzLWJhc2VkIHRhcmdldHMgaXQgaXMgYQorc2VtaWNvbG9uLCBhbmQgZm9yIGFsbW9zdCBhbGwgb3RoZXIgdGFyZ2V0cyBpdCBpcyBhIGNvbG9uLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkNQQVRIPC9zcGFuPjwvc2FtcD4gc3BlY2lmaWVzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCBhcyBpZgorc3BlY2lmaWVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiwgYnV0IGFmdGVyIGFueSBwYXRocyBnaXZlbiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4KK29wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdXNlZAorcmVnYXJkbGVzcyBvZiB3aGljaCBsYW5ndWFnZSBpcyBiZWluZyBwcmVwcm9jZXNzZWQuCisKKyAgICAgPHA+VGhlIHJlbWFpbmluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXBwbHkgb25seSB3aGVuIHByZXByb2Nlc3NpbmcgdGhlCitwYXJ0aWN1bGFyIGxhbmd1YWdlIGluZGljYXRlZC4gIEVhY2ggc3BlY2lmaWVzIGEgbGlzdCBvZiBkaXJlY3RvcmllcwordG8gYmUgc2VhcmNoZWQgYXMgaWYgc3BlY2lmaWVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlzeXN0ZW08L3NwYW4+PC9zYW1wPiwgYnV0IGFmdGVyIGFueQorcGF0aHMgZ2l2ZW4gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3RlbTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4KKworICAgICA8cD5JbiBhbGwgdGhlc2UgdmFyaWFibGVzLCBhbiBlbXB0eSBlbGVtZW50IGluc3RydWN0cyB0aGUgY29tcGlsZXIgdG8KK3NlYXJjaCBpdHMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIEVtcHR5IGVsZW1lbnRzIGNhbiBhcHBlYXIgYXQgdGhlCitiZWdpbm5pbmcgb3IgZW5kIG9mIGEgcGF0aC4gIEZvciBpbnN0YW5jZSwgaWYgdGhlIHZhbHVlIG9mCis8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5DUEFUSDwvc3Bhbj48L3NhbXA+IGlzIDxjb2RlPjovc3BlY2lhbC9pbmNsdWRlPC9jb2RlPiwgdGhhdCBoYXMgdGhlIHNhbWUKK2VmZmVjdCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1JLiZuYnNwOy1JL3NwZWNpYWwvaW5jbHVkZTwhLS0gL0B3IC0tPjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8IS0tIG1hbiBlbmQgLS0+CisgICAgIDxwPlNlZSBhbHNvIDxhIGhyZWY9IlNlYXJjaC1QYXRoLmh0bWwjU2VhcmNoLVBhdGgiPlNlYXJjaCBQYXRoPC9hPi4gCis8IS0tIG1hbiBiZWdpbiBFTlZJUk9OTUVOVCAtLT4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkRFUEVOREVOQ0lFU19PVVRQVVQ8L3NwYW4+PC9zYW1wPjxhIG5hbWU9ImluZGV4LURFUEVOREVOQ0lFU18wMDVmT1VUUFVULTIwOCI+PC9hPjxkZD48YSBuYW1lPSJpbmRleC1kZXBlbmRlbmNpZXMtZm9yLW1ha2UtYXMtb3V0cHV0LTIwOSI+PC9hPklmIHRoaXMgdmFyaWFibGUgaXMgc2V0LCBpdHMgdmFsdWUgc3BlY2lmaWVzIGhvdyB0byBvdXRwdXQKK2RlcGVuZGVuY2llcyBmb3IgTWFrZSBiYXNlZCBvbiB0aGUgbm9uLXN5c3RlbSBoZWFkZXIgZmlsZXMgcHJvY2Vzc2VkCitieSB0aGUgY29tcGlsZXIuICBTeXN0ZW0gaGVhZGVyIGZpbGVzIGFyZSBpZ25vcmVkIGluIHRoZSBkZXBlbmRlbmN5CitvdXRwdXQuCisKKyAgICAgPHA+VGhlIHZhbHVlIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkRFUEVOREVOQ0lFU19PVVRQVVQ8L3NwYW4+PC9zYW1wPiBjYW4gYmUganVzdCBhIGZpbGUgbmFtZSwgaW4KK3doaWNoIGNhc2UgdGhlIE1ha2UgcnVsZXMgYXJlIHdyaXR0ZW4gdG8gdGhhdCBmaWxlLCBndWVzc2luZyB0aGUgdGFyZ2V0CituYW1lIGZyb20gdGhlIHNvdXJjZSBmaWxlIG5hbWUuICBPciB0aGUgdmFsdWUgY2FuIGhhdmUgdGhlIGZvcm0KKyZsc3F1bzs8c2FtcD48dmFyPmZpbGU8L3Zhcj4gPHZhcj50YXJnZXQ8L3Zhcj48L3NhbXA+JnJzcXVvOywgaW4gd2hpY2ggY2FzZSB0aGUgcnVsZXMgYXJlIHdyaXR0ZW4gdG8KK2ZpbGUgPHZhcj5maWxlPC92YXI+IHVzaW5nIDx2YXI+dGFyZ2V0PC92YXI+IGFzIHRoZSB0YXJnZXQgbmFtZS4KKworICAgICA8cD5JbiBvdGhlciB3b3JkcywgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBlcXVpdmFsZW50IHRvIGNvbWJpbmluZwordGhlIG9wdGlvbnMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1NPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRjwvc3Bhbj48L3NhbXA+Cisoc2VlIDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPiksCit3aXRoIGFuIG9wdGlvbmFsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NVDwvc3Bhbj48L3NhbXA+IHN3aXRjaCB0b28uCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5TVU5QUk9fREVQRU5ERU5DSUVTPC9zcGFuPjwvc2FtcD48YSBuYW1lPSJpbmRleC1TVU5QUk9fMDA1ZkRFUEVOREVOQ0lFUy0yMTAiPjwvYT48ZGQ+PGEgbmFtZT0iaW5kZXgtZGVwZW5kZW5jaWVzLWZvci1tYWtlLWFzLW91dHB1dC0yMTEiPjwvYT5UaGlzIHZhcmlhYmxlIGlzIHRoZSBzYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkRFUEVOREVOQ0lFU19PVVRQVVQ8L3NwYW4+PC9zYW1wPiAoc2VlIGFib3ZlKSwKK2V4Y2VwdCB0aGF0IHN5c3RlbSBoZWFkZXIgZmlsZXMgYXJlIG5vdCBpZ25vcmVkLCBzbyBpdCBpbXBsaWVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+IHJhdGhlciB0aGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NTTwvc3Bhbj48L3NhbXA+LiAgSG93ZXZlciwgdGhlIGRlcGVuZGVuY2Ugb24gdGhlCittYWluIGlucHV0IGZpbGUgaXMgb21pdHRlZC4gCitTZWUgPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+LiAKKzwvZGw+CisgICA8IS0tIG1hbiBlbmQgLS0+CisKKzwhLS0gU3BlY2lhbCBoYW5kbGluZyBmb3IgaW5jbHVzaW9uIGluIHRoZSBpbnN0YWxsIG1hbnVhbC4gLS0+Cis8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvRnVuY3Rpb25fMDAyZGxpa2UtTWFjcm9zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0Z1bmN0aW9uXzAwMmRsaWtlLU1hY3Jvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZWFkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0Z1bmN0aW9uXzAwMmRsaWtlLU1hY3Jvcy5odG1sCkBAIC0wLDAgKzEsMTAwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GdW5jdGlvbi1saWtlIE1hY3JvcyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiIHRpdGxlPSJNYWNyb3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPYmplY3RfMDAyZGxpa2UtTWFjcm9zLmh0bWwjT2JqZWN0XzAwMmRsaWtlLU1hY3JvcyIgdGl0bGU9Ik9iamVjdC1saWtlIE1hY3JvcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1hY3JvLUFyZ3VtZW50cy5odG1sI01hY3JvLUFyZ3VtZW50cyIgdGl0bGU9Ik1hY3JvIEFyZ3VtZW50cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGdW5jdGlvbi1saWtlLU1hY3JvcyI+PC9hPgorPGEgbmFtZT0iRnVuY3Rpb25fMDAyZGxpa2UtTWFjcm9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1hY3JvLUFyZ3VtZW50cy5odG1sI01hY3JvLUFyZ3VtZW50cyI+TWFjcm8gQXJndW1lbnRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT2JqZWN0XzAwMmRsaWtlLU1hY3Jvcy5odG1sI09iamVjdF8wMDJkbGlrZS1NYWNyb3MiPk9iamVjdC1saWtlIE1hY3JvczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY3Jvcy5odG1sI01hY3JvcyI+TWFjcm9zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yIEZ1bmN0aW9uLWxpa2UgTWFjcm9zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25fMDAyZGxpa2UtbWFjcm9zLTQ1Ij48L2E+CitZb3UgY2FuIGFsc28gZGVmaW5lIG1hY3JvcyB3aG9zZSB1c2UgbG9va3MgbGlrZSBhIGZ1bmN0aW9uIGNhbGwuICBUaGVzZQorYXJlIGNhbGxlZCA8ZGZuPmZ1bmN0aW9uLWxpa2UgbWFjcm9zPC9kZm4+LiAgVG8gZGVmaW5lIGEgZnVuY3Rpb24tbGlrZSBtYWNybywKK3lvdSB1c2UgdGhlIHNhbWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZGVmaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSwgYnV0IHlvdSBwdXQgYSBwYWlyIG9mCitwYXJlbnRoZXNlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFjcm8gbmFtZS4gIEZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBsYW5nX2luaXQoKSAgY19pbml0KCkKKyAgICAgbGFuZ19pbml0KCkKKyAgICAgICAgICA9PSZndDsgY19pbml0KCkKKzwvcHJlPgorICAgPHA+QSBmdW5jdGlvbi1saWtlIG1hY3JvIGlzIG9ubHkgZXhwYW5kZWQgaWYgaXRzIG5hbWUgYXBwZWFycyB3aXRoIGEgcGFpcgorb2YgcGFyZW50aGVzZXMgYWZ0ZXIgaXQuICBJZiB5b3Ugd3JpdGUganVzdCB0aGUgbmFtZSwgaXQgaXMgbGVmdCBhbG9uZS4gCitUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBhIG1hY3JvIG9mIHRoZSBzYW1lCituYW1lLCBhbmQgeW91IHdpc2ggdG8gdXNlIHRoZSBmdW5jdGlvbiBzb21ldGltZXMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBleHRlcm4gdm9pZCBmb28odm9pZCk7CisgICAgICNkZWZpbmUgZm9vKCkgLyogPHNwYW4gY2xhc3M9InJvbWFuIj5vcHRpbWl6ZWQgaW5saW5lIHZlcnNpb248L3NwYW4+ICovCisgICAgIC4uLgorICAgICAgIGZvbygpOworICAgICAgIGZ1bmNwdHIgPSBmb287Cis8L3ByZT4KKyAgIDxwPkhlcmUgdGhlIGNhbGwgdG8gPGNvZGU+Zm9vKCk8L2NvZGU+IHdpbGwgdXNlIHRoZSBtYWNybywgYnV0IHRoZSBmdW5jdGlvbgorcG9pbnRlciB3aWxsIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgcmVhbCBmdW5jdGlvbi4gIElmIHRoZSBtYWNybyB3ZXJlIHRvCitiZSBleHBhbmRlZCwgaXQgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuCisKKyAgIDxwPklmIHlvdSBwdXQgc3BhY2VzIGJldHdlZW4gdGhlIG1hY3JvIG5hbWUgYW5kIHRoZSBwYXJlbnRoZXNlcyBpbiB0aGUKK21hY3JvIGRlZmluaXRpb24sIHRoYXQgZG9lcyBub3QgZGVmaW5lIGEgZnVuY3Rpb24tbGlrZSBtYWNybywgaXQgZGVmaW5lcworYW4gb2JqZWN0LWxpa2UgbWFjcm8gd2hvc2UgZXhwYW5zaW9uIGhhcHBlbnMgdG8gYmVnaW4gd2l0aCBhIHBhaXIgb2YKK3BhcmVudGhlc2VzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBsYW5nX2luaXQgKCkgICAgY19pbml0KCkKKyAgICAgbGFuZ19pbml0KCkKKyAgICAgICAgICA9PSZndDsgKCkgY19pbml0KCkoKQorPC9wcmU+CisgICA8cD5UaGUgZmlyc3QgdHdvIHBhaXJzIG9mIHBhcmVudGhlc2VzIGluIHRoaXMgZXhwYW5zaW9uIGNvbWUgZnJvbSB0aGUKK21hY3JvLiAgVGhlIHRoaXJkIGlzIHRoZSBwYWlyIHRoYXQgd2FzIG9yaWdpbmFsbHkgYWZ0ZXIgdGhlIG1hY3JvCitpbnZvY2F0aW9uLiAgU2luY2UgPGNvZGU+bGFuZ19pbml0PC9jb2RlPiBpcyBhbiBvYmplY3QtbGlrZSBtYWNybywgaXQgZG9lcyBub3QKK2NvbnN1bWUgdGhvc2UgcGFyZW50aGVzZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMzkxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sCkBAIC0wLDAgKzEsNTIzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiIHRpdGxlPSJFbnZpcm9ubWVudCBWYXJpYWJsZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbmRleC1vZi1EaXJlY3RpdmVzLmh0bWwjSW5kZXgtb2YtRGlyZWN0aXZlcyIgdGl0bGU9IkluZGV4IG9mIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkluZGV4LW9mLURpcmVjdGl2ZXMuaHRtbCNJbmRleC1vZi1EaXJlY3RpdmVzIj5JbmRleCBvZiBEaXJlY3RpdmVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9oMj4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtRkRMXzAwMmMtR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLTIxMiI+PC9hPjxkaXYgYWxpZ249ImNlbnRlciI+VmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwODwvZGl2PgorCis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4gICAgIENvcHlyaWdodCAmY29weTsgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgPGEgaHJlZj0iaHR0cDovL2ZzZi5vcmcvIj5odHRwOi8vZnNmLm9yZy88L2E+CisgICAgIAorICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCis8L3ByZT4KKyAgICAgPG9sIHR5cGU9MSBzdGFydD0wPgorPGxpPlBSRUFNQkxFCisKKyAgICAgPHA+VGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50IDxkZm4+ZnJlZTwvZGZuPiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuIAorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCisgICAgIDxwPlRoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgJmxkcXVvO2NvcHlsZWZ0JnJkcXVvOywgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCisgICAgIDxwPldlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisgICAgIDxsaT5BUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCisgICAgIDxwPlRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICZsZHF1bztEb2N1bWVudCZyZHF1bzssIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICZsZHF1bzt5b3UmcmRxdW87LiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCisgICAgIDxwPkEgJmxkcXVvO01vZGlmaWVkIFZlcnNpb24mcmRxdW87IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworICAgICA8cD5BICZsZHF1bztTZWNvbmRhcnkgU2VjdGlvbiZyZHF1bzsgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uCitvZiB0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudCdzIG92ZXJhbGwKK3N1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsCitkaXJlY3RseSB3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluCitwYXJ0IGEgdGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluCithbnkgbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCisgICAgIDxwPlRoZSAmbGRxdW87SW52YXJpYW50IFNlY3Rpb25zJnJkcXVvOyBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCisgICAgIDxwPlRoZSAmbGRxdW87Q292ZXIgVGV4dHMmcmRxdW87IGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCisgICAgIDxwPkEgJmxkcXVvO1RyYW5zcGFyZW50JnJkcXVvOyBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgJmxkcXVvO1RyYW5zcGFyZW50JnJkcXVvOyBpcyBjYWxsZWQgJmxkcXVvO09wYXF1ZSZyZHF1bzsuCisKKyAgICAgPHA+RXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KKzxzcGFuIGNsYXNzPSJzYyI+YXNjaWk8L3NwYW4+IHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQKK2Zvcm1hdCwgPGFjcm9ueW0+U0dNTDwvYWNyb255bT4gb3IgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZQorPGFjcm9ueW0+RFREPC9hY3JvbnltPiwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+LAorUG9zdFNjcmlwdCBvciA8YWNyb255bT5QREY8L2Fjcm9ueW0+IGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcworb2YgdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIDxhY3JvbnltPlBORzwvYWNyb255bT4sIDxhY3JvbnltPlhDRjwvYWNyb255bT4gYW5kCis8YWNyb255bT5KUEc8L2Fjcm9ueW0+LiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlCityZWFkIGFuZCBlZGl0ZWQgb25seSBieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IG9yCis8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGZvciB3aGljaCB0aGUgPGFjcm9ueW0+RFREPC9hY3JvbnltPiBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUKK25vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+LAorUG9zdFNjcmlwdCBvciA8YWNyb255bT5QREY8L2Fjcm9ueW0+IHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvcgorb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKKyAgICAgPHA+VGhlICZsZHF1bztUaXRsZSBQYWdlJnJkcXVvOyBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICZsZHF1bztUaXRsZSBQYWdlJnJkcXVvOyBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKKyAgICAgPHA+VGhlICZsZHF1bztwdWJsaXNoZXImcmRxdW87IG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzCitvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIHB1YmxpYy4KKworICAgICA8cD5BIHNlY3Rpb24gJmxkcXVvO0VudGl0bGVkIFhZWiZyZHF1bzsgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOywKKyZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzssICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LCBvciAmbGRxdW87SGlzdG9yeSZyZHF1bzsuKSAgVG8gJmxkcXVvO1ByZXNlcnZlIHRoZSBUaXRsZSZyZHF1bzsKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gJmxkcXVvO0VudGl0bGVkIFhZWiZyZHF1bzsgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworICAgICA8cD5UaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworICAgICA8bGk+VkVSQkFUSU0gQ09QWUlORworCisgICAgIDxwPllvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworICAgICA8cD5Zb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKyAgICAgPGxpPkNPUFlJTkcgSU4gUVVBTlRJVFkKKworICAgICA8cD5JZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50J3MgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLiAKK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCisgICAgIDxwPklmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworICAgICA8cD5JZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuIAorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKKyAgICAgPHA+SXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUKK3RoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisgICAgIDxsaT5NT0RJRklDQVRJT05TCisKKyAgICAgPHA+WW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKKyAgICAgICAgICA8b2wgdHlwZT1BIHN0YXJ0PTE+Cis8bGk+VXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0Citmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCitvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCitpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgICAgPGxpPkxpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKK3Jlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKK3VubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KKworICAgICAgICAgIDxsaT5TdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICAgICAgIDxsaT5BZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCithZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCisKKyAgICAgICAgICA8bGk+SW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCitnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCithbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCisKKyAgICAgICAgICA8bGk+SW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87LCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKK3RvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKK3B1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCit0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztIaXN0b3J5JnJkcXVvOyBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKK3N0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCitwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQordGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKK2l0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICZsZHF1bztIaXN0b3J5JnJkcXVvOyBzZWN0aW9uLiAKK1lvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKK2xlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgICAgPGxpPkZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzsgb3IgJmxkcXVvO0RlZGljYXRpb25zJnJkcXVvOywgUHJlc2VydmUKK3RoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUKK3N1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzIGFuZC9vcgorZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCit1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCitvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCisKKyAgICAgICAgICA8bGk+RGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LiAgU3VjaCBhIHNlY3Rpb24KK21heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCisKKyAgICAgICAgICA8bGk+RG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzsgb3IKK3RvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPklmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuIAorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKKyAgICAgPHA+WW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzJm1kYXNoO2ZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCisgICAgIDxwPllvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCisgICAgIDxwPlRoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisgICAgIDxsaT5DT01CSU5JTkcgRE9DVU1FTlRTCisKKyAgICAgPHA+WW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCisgICAgIDxwPlRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4gCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCisgICAgIDxwPkluIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87CitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyZsZHF1bztIaXN0b3J5JnJkcXVvOzsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0Fja25vd2xlZGdlbWVudHMmcmRxdW87LAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LiAgWW91IG11c3QgZGVsZXRlIGFsbAorc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cy4mcmRxdW87CisKKyAgICAgPGxpPkNPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCisgICAgIDxwPllvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworICAgICA8cD5Zb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKyAgICAgPGxpPkFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworICAgICA8cD5BIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gJmxkcXVvO2FnZ3JlZ2F0ZSZyZHF1bzsgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICA8cD5JZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50J3MgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLiAKK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworICAgICA8bGk+VFJBTlNMQVRJT04KKworICAgICA8cD5UcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LiAKK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKKyAgICAgPHA+SWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzssCismbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LCBvciAmbGRxdW87SGlzdG9yeSZyZHF1bzssIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKyAgICAgPGxpPlRFUk1JTkFUSU9OCisKKyAgICAgPHA+WW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgIDxwPkhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UKK2Zyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwKK3VubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseQordGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvCis2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKKyAgICAgPHA+TW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKyAgICAgPHA+VGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcworbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgorCisgICAgIDxsaT5GVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCisgICAgIDxwPlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQorPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LyI+aHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LzwvYT4uCisKKyAgICAgPHA+RWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgJmxkcXVvO29yIGFueSBsYXRlciB2ZXJzaW9uJnJkcXVvOyBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50CitzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMKK0xpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYQordmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0RvY3VtZW50LgorCisgICAgIDxsaT5SRUxJQ0VOU0lORworCisgICAgIDxwPiZsZHF1bztNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24gU2l0ZSZyZHF1bzsgKG9yICZsZHF1bztNTUMgU2l0ZSZyZHF1bzspIG1lYW5zIGFueQorV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28KK3Byb3ZpZGVzIHByb21pbmVudCBmYWNpbGl0aWVzIGZvciBhbnlib2R5IHRvIGVkaXQgdGhvc2Ugd29ya3MuICBBCitwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLiAgQQorJmxkcXVvO01hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiZyZHF1bzsgKG9yICZsZHF1bztNTUMmcmRxdW87KSBjb250YWluZWQgaW4gdGhlCitzaXRlIG1lYW5zIGFueSBzZXQgb2YgY29weXJpZ2h0YWJsZSB3b3JrcyB0aHVzIHB1Ymxpc2hlZCBvbiB0aGUgTU1DCitzaXRlLgorCisgICAgIDxwPiZsZHF1bztDQy1CWS1TQSZyZHF1bzsgbWVhbnMgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMy4wCitsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0Citjb3Jwb3JhdGlvbiB3aXRoIGEgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGluIFNhbiBGcmFuY2lzY28sCitDYWxpZm9ybmlhLCBhcyB3ZWxsIGFzIGZ1dHVyZSBjb3B5bGVmdCB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UKK3B1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgorCisgICAgIDxwPiZsZHF1bztJbmNvcnBvcmF0ZSZyZHF1bzsgbWVhbnMgdG8gcHVibGlzaCBvciByZXB1Ymxpc2ggYSBEb2N1bWVudCwgaW4gd2hvbGUgb3IKK2luIHBhcnQsIGFzIHBhcnQgb2YgYW5vdGhlciBEb2N1bWVudC4KKworICAgICA8cD5BbiBNTUMgaXMgJmxkcXVvO2VsaWdpYmxlIGZvciByZWxpY2Vuc2luZyZyZHF1bzsgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZSwgYW5kIGlmIGFsbCB3b3JrcyB0aGF0IHdlcmUgZmlyc3QgcHVibGlzaGVkIHVuZGVyIHRoaXMgTGljZW5zZQorc29tZXdoZXJlIG90aGVyIHRoYW4gdGhpcyBNTUMsIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIGluIHdob2xlCitvciBpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlciB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsCithbmQgKDIpIHdlcmUgdGh1cyBpbmNvcnBvcmF0ZWQgcHJpb3IgdG8gTm92ZW1iZXIgMSwgMjAwOC4KKworICAgICA8cD5UaGUgb3BlcmF0b3Igb2YgYW4gTU1DIFNpdGUgbWF5IHJlcHVibGlzaCBhbiBNTUMgY29udGFpbmVkIGluIHRoZSBzaXRlCit1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwKK3Byb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgorCisgICAgICAgIDwvb2w+CisKKzxoMyBjbGFzcz0idW5udW1iZXJlZHNlYyI+QURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50czwvaDM+CisKKzxwPlRvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgQ29weXJpZ2h0IChDKSAgPHZhcj55ZWFyPC92YXI+ICA8dmFyPnlvdXIgbmFtZTwvdmFyPi4KKyAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKKyAgICAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKKyAgICAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyCisgICAgICAgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgYGBHTlUKKyAgICAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorPC9wcmU+CisgICA8cD5JZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgJmxkcXVvO3dpdGguLi5UZXh0cy4mcmRxdW87IGxpbmUgd2l0aCB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyA8dmFyPmxpc3QgdGhlaXIgdGl0bGVzPC92YXI+LCB3aXRoCisgICAgICAgICB0aGUgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgPHZhcj5saXN0PC92YXI+LCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cworICAgICAgICAgYmVpbmcgPHZhcj5saXN0PC92YXI+LgorPC9wcmU+CisgICA8cD5JZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKKyAgIDxwPklmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCis8IS0tIExvY2FsIFZhcmlhYmxlczogLS0+Cis8IS0tIGlzcGVsbC1sb2NhbC1wZGljdDogImlzcGVsbC1kaWN0IiAtLT4KKzwhLS0gRW5kOiAtLT4KKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSGVhZGVyLUZpbGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0hlYWRlci1GaWxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTU1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0hlYWRlci1GaWxlcy5odG1sCkBAIC0wLDAgKzEsMTAzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IZWFkZXIgRmlsZXMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3IiB0aXRsZT0iT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiIHRpdGxlPSJNYWNyb3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSGVhZGVyLUZpbGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1hY3Jvcy5odG1sI01hY3JvcyI+TWFjcm9zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MiBIZWFkZXIgRmlsZXM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1oZWFkZXItZmlsZS0yNSI+PC9hPkEgaGVhZGVyIGZpbGUgaXMgYSBmaWxlIGNvbnRhaW5pbmcgQyBkZWNsYXJhdGlvbnMgYW5kIG1hY3JvIGRlZmluaXRpb25zCisoc2VlIDxhIGhyZWY9Ik1hY3Jvcy5odG1sI01hY3JvcyI+TWFjcm9zPC9hPikgdG8gYmUgc2hhcmVkIGJldHdlZW4gc2V2ZXJhbCBzb3VyY2UgZmlsZXMuICBZb3UgcmVxdWVzdAordGhlIHVzZSBvZiBhIGhlYWRlciBmaWxlIGluIHlvdXIgcHJvZ3JhbSBieSA8ZGZuPmluY2x1ZGluZzwvZGZuPiBpdCwgd2l0aCB0aGUKK0MgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+SGVhZGVyIGZpbGVzIHNlcnZlIHR3byBwdXJwb3Nlcy4KKworICAgICA8dWw+Cis8bGk+PGEgbmFtZT0iaW5kZXgtc3lzdGVtLWhlYWRlci1maWxlcy0yNiI+PC9hPlN5c3RlbSBoZWFkZXIgZmlsZXMgZGVjbGFyZSB0aGUgaW50ZXJmYWNlcyB0byBwYXJ0cyBvZiB0aGUgb3BlcmF0aW5nCitzeXN0ZW0uICBZb3UgaW5jbHVkZSB0aGVtIGluIHlvdXIgcHJvZ3JhbSB0byBzdXBwbHkgdGhlIGRlZmluaXRpb25zIGFuZAorZGVjbGFyYXRpb25zIHlvdSBuZWVkIHRvIGludm9rZSBzeXN0ZW0gY2FsbHMgYW5kIGxpYnJhcmllcy4KKworICAgICA8bGk+WW91ciBvd24gaGVhZGVyIGZpbGVzIGNvbnRhaW4gZGVjbGFyYXRpb25zIGZvciBpbnRlcmZhY2VzIGJldHdlZW4gdGhlCitzb3VyY2UgZmlsZXMgb2YgeW91ciBwcm9ncmFtLiAgRWFjaCB0aW1lIHlvdSBoYXZlIGEgZ3JvdXAgb2YgcmVsYXRlZAorZGVjbGFyYXRpb25zIGFuZCBtYWNybyBkZWZpbml0aW9ucyBhbGwgb3IgbW9zdCBvZiB3aGljaCBhcmUgbmVlZGVkIGluCitzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2UgZmlsZXMsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGNyZWF0ZSBhIGhlYWRlcgorZmlsZSBmb3IgdGhlbS4gCis8L3VsPgorCisgICA8cD5JbmNsdWRpbmcgYSBoZWFkZXIgZmlsZSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHRzIGFzIGNvcHlpbmcgdGhlIGhlYWRlcgorZmlsZSBpbnRvIGVhY2ggc291cmNlIGZpbGUgdGhhdCBuZWVkcyBpdC4gIFN1Y2ggY29weWluZyB3b3VsZCBiZQordGltZS1jb25zdW1pbmcgYW5kIGVycm9yLXByb25lLiAgV2l0aCBhIGhlYWRlciBmaWxlLCB0aGUgcmVsYXRlZAorZGVjbGFyYXRpb25zIGFwcGVhciBpbiBvbmx5IG9uZSBwbGFjZS4gIElmIHRoZXkgbmVlZCB0byBiZSBjaGFuZ2VkLCB0aGV5CitjYW4gYmUgY2hhbmdlZCBpbiBvbmUgcGxhY2UsIGFuZCBwcm9ncmFtcyB0aGF0IGluY2x1ZGUgdGhlIGhlYWRlciBmaWxlCit3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBuZXcgdmVyc2lvbiB3aGVuIG5leHQgcmVjb21waWxlZC4gIFRoZSBoZWFkZXIKK2ZpbGUgZWxpbWluYXRlcyB0aGUgbGFib3Igb2YgZmluZGluZyBhbmQgY2hhbmdpbmcgYWxsIHRoZSBjb3BpZXMgYXMgd2VsbAorYXMgdGhlIHJpc2sgdGhhdCBhIGZhaWx1cmUgdG8gZmluZCBvbmUgY29weSB3aWxsIHJlc3VsdCBpbgoraW5jb25zaXN0ZW5jaWVzIHdpdGhpbiBhIHByb2dyYW0uCisKKyAgIDxwPkluIEMsIHRoZSB1c3VhbCBjb252ZW50aW9uIGlzIHRvIGdpdmUgaGVhZGVyIGZpbGVzIG5hbWVzIHRoYXQgZW5kIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uaDwvc3Bhbj48L3NhbXA+LiAgSXQgaXMgbW9zdCBwb3J0YWJsZSB0byB1c2Ugb25seSBsZXR0ZXJzLCBkaWdpdHMsIGRhc2hlcywgYW5kCit1bmRlcnNjb3JlcyBpbiBoZWFkZXIgZmlsZSBuYW1lcywgYW5kIGF0IG1vc3Qgb25lIGRvdC4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkluY2x1ZGUtU3ludGF4Lmh0bWwjSW5jbHVkZS1TeW50YXgiPkluY2x1ZGUgU3ludGF4PC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iSW5jbHVkZS1PcGVyYXRpb24uaHRtbCNJbmNsdWRlLU9wZXJhdGlvbiI+SW5jbHVkZSBPcGVyYXRpb248L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJTZWFyY2gtUGF0aC5odG1sI1NlYXJjaC1QYXRoIj5TZWFyY2ggUGF0aDwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9Ik9uY2VfMDAyZE9ubHktSGVhZGVycy5odG1sI09uY2VfMDAyZE9ubHktSGVhZGVycyI+T25jZS1Pbmx5IEhlYWRlcnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJBbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZi5odG1sI0FsdGVybmF0aXZlcy10by1XcmFwcGVyLV8wMDIzaWZuZGVmIj5BbHRlcm5hdGl2ZXMgdG8gV3JhcHBlciAjaWZuZGVmPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iQ29tcHV0ZWQtSW5jbHVkZXMuaHRtbCNDb21wdXRlZC1JbmNsdWRlcyI+Q29tcHV0ZWQgSW5jbHVkZXM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJXcmFwcGVyLUhlYWRlcnMuaHRtbCNXcmFwcGVyLUhlYWRlcnMiPldyYXBwZXIgSGVhZGVyczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9IlN5c3RlbS1IZWFkZXJzLmh0bWwjU3lzdGVtLUhlYWRlcnMiPlN5c3RlbSBIZWFkZXJzPC9hPgorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JZGVudGlmaWVyLWNoYXJhY3RlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSWRlbnRpZmllci1jaGFyYWN0ZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhYmU3MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSWRlbnRpZmllci1jaGFyYWN0ZXJzLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPUltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSWRlbnRpZmllciUyMGNoYXJhY3RlcnMiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JZi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMTlkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0lmLmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklmIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI0NvbmRpdGlvbmFsLVN5bnRheCIgdGl0bGU9IkNvbmRpdGlvbmFsIFN5bnRheCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklmZGVmLmh0bWwjSWZkZWYiIHRpdGxlPSJJZmRlZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRlZmluZWQuaHRtbCNEZWZpbmVkIiB0aXRsZT0iRGVmaW5lZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEZWZpbmVkLmh0bWwjRGVmaW5lZCI+RGVmaW5lZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklmZGVmLmh0bWwjSWZkZWYiPklmZGVmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29uZGl0aW9uYWwtU3ludGF4Lmh0bWwjQ29uZGl0aW9uYWwtU3ludGF4Ij5Db25kaXRpb25hbCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj40LjIuMiBJZjwvaDQ+CisKKzxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgYWxsb3dzIHlvdSB0byB0ZXN0IHRoZSB2YWx1ZSBvZiBhbiBhcml0aG1ldGljCitleHByZXNzaW9uLCByYXRoZXIgdGhhbiB0aGUgbWVyZSBleGlzdGVuY2Ugb2Ygb25lIG1hY3JvLiAgSXRzIHN5bnRheCBpcworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2lmIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPgorICAgICAKKyAgICAgPHZhcj5jb250cm9sbGVkIHRleHQ8L3Zhcj4KKyAgICAgCisgICAgICNlbmRpZiAvKiA8dmFyPmV4cHJlc3Npb248L3Zhcj4gKi8KKzwvcHJlPgorICAgPHA+PHZhcj5leHByZXNzaW9uPC92YXI+IGlzIGEgQyBleHByZXNzaW9uIG9mIGludGVnZXIgdHlwZSwgc3ViamVjdCB0byBzdHJpbmdlbnQKK3Jlc3RyaWN0aW9ucy4gIEl0IG1heSBjb250YWluCisKKyAgICAgPHVsPgorPGxpPkludGVnZXIgY29uc3RhbnRzLgorCisgICAgIDxsaT5DaGFyYWN0ZXIgY29uc3RhbnRzLCB3aGljaCBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhleSB3b3VsZCBiZSBpbiBub3JtYWwKK2NvZGUuCisKKyAgICAgPGxpPkFyaXRobWV0aWMgb3BlcmF0b3JzIGZvciBhZGRpdGlvbiwgc3VidHJhY3Rpb24sIG11bHRpcGxpY2F0aW9uLAorZGl2aXNpb24sIGJpdHdpc2Ugb3BlcmF0aW9ucywgc2hpZnRzLCBjb21wYXJpc29ucywgYW5kIGxvZ2ljYWwKK29wZXJhdGlvbnMgKDxjb2RlPiZhbXA7JmFtcDs8L2NvZGU+IGFuZCA8Y29kZT58fDwvY29kZT4pLiAgVGhlIGxhdHRlciB0d28gb2JleSB0aGUgdXN1YWwKK3Nob3J0LWNpcmN1aXRpbmcgcnVsZXMgb2Ygc3RhbmRhcmQgQy4KKworICAgICA8bGk+TWFjcm9zLiAgQWxsIG1hY3JvcyBpbiB0aGUgZXhwcmVzc2lvbiBhcmUgZXhwYW5kZWQgYmVmb3JlIGFjdHVhbAorY29tcHV0YXRpb24gb2YgdGhlIGV4cHJlc3Npb24ncyB2YWx1ZSBiZWdpbnMuCisKKyAgICAgPGxpPlVzZXMgb2YgdGhlIDxjb2RlPmRlZmluZWQ8L2NvZGU+IG9wZXJhdG9yLCB3aGljaCBsZXRzIHlvdSBjaGVjayB3aGV0aGVyIG1hY3JvcworYXJlIGRlZmluZWQgaW4gdGhlIG1pZGRsZSBvZiBhbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+SWRlbnRpZmllcnMgdGhhdCBhcmUgbm90IG1hY3Jvcywgd2hpY2ggYXJlIGFsbCBjb25zaWRlcmVkIHRvIGJlIHRoZQorbnVtYmVyIHplcm8uICBUaGlzIGFsbG93cyB5b3UgdG8gd3JpdGUgPGNvZGU+I2lmJm5ic3A7TUFDUk88IS0tIC9AdyAtLT48L2NvZGU+IGluc3RlYWQgb2YKKzxjb2RlPiNpZmRlZiZuYnNwO01BQ1JPPCEtLSAvQHcgLS0+PC9jb2RlPiwgaWYgeW91IGtub3cgdGhhdCBNQUNSTywgd2hlbiBkZWZpbmVkLCB3aWxsCithbHdheXMgaGF2ZSBhIG5vbnplcm8gdmFsdWUuICBGdW5jdGlvbi1saWtlIG1hY3JvcyB1c2VkIHdpdGhvdXQgdGhlaXIKK2Z1bmN0aW9uIGNhbGwgcGFyZW50aGVzZXMgYXJlIGFsc28gdHJlYXRlZCBhcyB6ZXJvLgorCisgICAgIDxwPkluIHNvbWUgY29udGV4dHMgdGhpcyBzaG9ydGN1dCBpcyB1bmRlc2lyYWJsZS4gIFRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3VuZGVmPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBjYXVzZXMgR0NDIHRvIHdhcm4gd2hlbmV2ZXIgaXQgZW5jb3VudGVycyBhbiBpZGVudGlmaWVyIHdoaWNoIGlzCitub3QgYSBtYWNybyBpbiBhbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8L3VsPgorCisgICA8cD5UaGUgcHJlcHJvY2Vzc29yIGRvZXMgbm90IGtub3cgYW55dGhpbmcgYWJvdXQgdHlwZXMgaW4gdGhlIGxhbmd1YWdlLiAKK1RoZXJlZm9yZSwgPGNvZGU+c2l6ZW9mPC9jb2RlPiBvcGVyYXRvcnMgYXJlIG5vdCByZWNvZ25pemVkIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKK25laXRoZXIgYXJlIDxjb2RlPmVudW08L2NvZGU+IGNvbnN0YW50cy4gIFRoZXkgd2lsbCBiZSB0YWtlbiBhcyBpZGVudGlmaWVycword2hpY2ggYXJlIG5vdCBtYWNyb3MsIGFuZCByZXBsYWNlZCBieSB6ZXJvLiAgSW4gdGhlIGNhc2Ugb2YKKzxjb2RlPnNpemVvZjwvY29kZT4sIHRoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIHRoZSBleHByZXNzaW9uIHRvIGJlIGludmFsaWQuCisKKyAgIDxwPlRoZSBwcmVwcm9jZXNzb3IgY2FsY3VsYXRlcyB0aGUgdmFsdWUgb2YgPHZhcj5leHByZXNzaW9uPC92YXI+LiAgSXQgY2Fycmllcworb3V0IGFsbCBjYWxjdWxhdGlvbnMgaW4gdGhlIHdpZGVzdCBpbnRlZ2VyIHR5cGUga25vd24gdG8gdGhlIGNvbXBpbGVyOworb24gbW9zdCBtYWNoaW5lcyBzdXBwb3J0ZWQgYnkgR0NDIHRoaXMgaXMgNjQgYml0cy4gIFRoaXMgaXMgbm90IHRoZSBzYW1lCitydWxlIGFzIHRoZSBjb21waWxlciB1c2VzIHRvIGNhbGN1bGF0ZSB0aGUgdmFsdWUgb2YgYSBjb25zdGFudAorZXhwcmVzc2lvbiwgYW5kIG1heSBnaXZlIGRpZmZlcmVudCByZXN1bHRzIGluIHNvbWUgY2FzZXMuICBJZiB0aGUgdmFsdWUKK2NvbWVzIG91dCB0byBiZSBub256ZXJvLCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3VjY2VlZHMgYW5kIHRoZSA8dmFyPmNvbnRyb2xsZWQKK3RleHQ8L3Zhcj4gaXMgaW5jbHVkZWQ7IG90aGVyd2lzZSBpdCBpcyBza2lwcGVkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0lmZGVmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0lmZGVmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhMjBhNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSWZkZWYuaHRtbApAQCAtMCwwICsxLDEyNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SWZkZWYgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29uZGl0aW9uYWwtU3ludGF4Lmh0bWwjQ29uZGl0aW9uYWwtU3ludGF4IiB0aXRsZT0iQ29uZGl0aW9uYWwgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSWYuaHRtbCNJZiIgdGl0bGU9IklmIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklmZGVmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklmLmh0bWwjSWYiPklmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29uZGl0aW9uYWwtU3ludGF4Lmh0bWwjQ29uZGl0aW9uYWwtU3ludGF4Ij5Db25kaXRpb25hbCBTeW50YXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj40LjIuMSBJZmRlZjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzaWZkZWYtODUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyM2VuZGlmLTg2Ij48L2E+CitUaGUgc2ltcGxlc3Qgc29ydCBvZiBjb25kaXRpb25hbCBpcworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2lmZGVmIDx2YXI+TUFDUk88L3Zhcj4KKyAgICAgCisgICAgIDx2YXI+Y29udHJvbGxlZCB0ZXh0PC92YXI+CisgICAgIAorICAgICAjZW5kaWYgLyogPHZhcj5NQUNSTzwvdmFyPiAqLworPC9wcmU+CisgICA8cD48YSBuYW1lPSJpbmRleC1jb25kaXRpb25hbC1ncm91cC04NyI+PC9hPlRoaXMgYmxvY2sgaXMgY2FsbGVkIGEgPGRmbj5jb25kaXRpb25hbCBncm91cDwvZGZuPi4gIDx2YXI+Y29udHJvbGxlZCB0ZXh0PC92YXI+Cit3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgb2YgdGhlIHByZXByb2Nlc3NvciBpZiBhbmQgb25seSBpZgorPHZhcj5NQUNSTzwvdmFyPiBpcyBkZWZpbmVkLiAgV2Ugc2F5IHRoYXQgdGhlIGNvbmRpdGlvbmFsIDxkZm4+c3VjY2VlZHM8L2Rmbj4gaWYKKzx2YXI+TUFDUk88L3Zhcj4gaXMgZGVmaW5lZCwgPGRmbj5mYWlsczwvZGZuPiBpZiBpdCBpcyBub3QuCisKKyAgIDxwPlRoZSA8dmFyPmNvbnRyb2xsZWQgdGV4dDwvdmFyPiBpbnNpZGUgb2YgYSBjb25kaXRpb25hbCBjYW4gaW5jbHVkZQorcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzLiAgVGhleSBhcmUgZXhlY3V0ZWQgb25seSBpZiB0aGUgY29uZGl0aW9uYWwKK3N1Y2NlZWRzLiAgWW91IGNhbiBuZXN0IGNvbmRpdGlvbmFsIGdyb3VwcyBpbnNpZGUgb3RoZXIgY29uZGl0aW9uYWwKK2dyb3VwcywgYnV0IHRoZXkgbXVzdCBiZSBjb21wbGV0ZWx5IG5lc3RlZC4gIEluIG90aGVyIHdvcmRzLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZW5kaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWx3YXlzIG1hdGNoZXMgdGhlIG5lYXJlc3QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWZkZWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKG9yCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZm5kZWY8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87KS4gIEFsc28sIHlvdSBjYW5ub3Qgc3RhcnQgYSBjb25kaXRpb25hbAorZ3JvdXAgaW4gb25lIGZpbGUgYW5kIGVuZCBpdCBpbiBhbm90aGVyLgorCisgICA8cD5FdmVuIGlmIGEgY29uZGl0aW9uYWwgZmFpbHMsIHRoZSA8dmFyPmNvbnRyb2xsZWQgdGV4dDwvdmFyPiBpbnNpZGUgaXQgaXMKK3N0aWxsIHJ1biB0aHJvdWdoIGluaXRpYWwgdHJhbnNmb3JtYXRpb25zIGFuZCB0b2tlbml6YXRpb24uICBUaGVyZWZvcmUsCitpdCBtdXN0IGFsbCBiZSBsZXhpY2FsbHkgdmFsaWQgQy4gIE5vcm1hbGx5IHRoZSBvbmx5IHdheSB0aGlzIG1hdHRlcnMgaXMKK3RoYXQgYWxsIGNvbW1lbnRzIGFuZCBzdHJpbmcgbGl0ZXJhbHMgaW5zaWRlIGEgZmFpbGluZyBjb25kaXRpb25hbCBncm91cAorbXVzdCBzdGlsbCBiZSBwcm9wZXJseSBlbmRlZC4KKworICAgPHA+VGhlIGNvbW1lbnQgZm9sbG93aW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbmRpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBub3QgcmVxdWlyZWQsIGJ1dCBpdCBpcyBhCitnb29kIHByYWN0aWNlIGlmIHRoZXJlIGlzIGEgbG90IG9mIDx2YXI+Y29udHJvbGxlZCB0ZXh0PC92YXI+LCBiZWNhdXNlIGl0CitoZWxwcyBwZW9wbGUgbWF0Y2ggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2VuZGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHRoZSBjb3JyZXNwb25kaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK09sZGVyIHByb2dyYW1zIHNvbWV0aW1lcyBwdXQgPHZhcj5NQUNSTzwvdmFyPiBkaXJlY3RseSBhZnRlciB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2VuZGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpdGhvdXQgZW5jbG9zaW5nIGl0IGluIGEgY29tbWVudC4gIFRoaXMgaXMgaW52YWxpZCBjb2RlCithY2NvcmRpbmcgdG8gdGhlIEMgc3RhbmRhcmQuICBDUFAgYWNjZXB0cyBpdCB3aXRoIGEgd2FybmluZy4gIEl0CituZXZlciBhZmZlY3RzIHdoaWNoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmbmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZW5kaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWF0Y2hlcy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNpZm5kZWYtODgiPjwvYT5Tb21ldGltZXMgeW91IHdpc2ggdG8gdXNlIHNvbWUgY29kZSBpZiBhIG1hY3JvIGlzIDxlbT5ub3Q8L2VtPiBkZWZpbmVkLiAKK1lvdSBjYW4gZG8gdGhpcyBieSB3cml0aW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmbmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK09uZSBjb21tb24gdXNlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmbmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB0byBpbmNsdWRlIGNvZGUgb25seSB0aGUgZmlyc3QKK3RpbWUgYSBoZWFkZXIgZmlsZSBpcyBpbmNsdWRlZC4gIFNlZSA8YSBocmVmPSJPbmNlXzAwMmRPbmx5LUhlYWRlcnMuaHRtbCNPbmNlXzAwMmRPbmx5LUhlYWRlcnMiPk9uY2UtT25seSBIZWFkZXJzPC9hPi4KKworICAgPHA+TWFjcm8gZGVmaW5pdGlvbnMgY2FuIHZhcnkgYmV0d2VlbiBjb21waWxhdGlvbnMgZm9yIHNldmVyYWwgcmVhc29ucy4gCitIZXJlIGFyZSBzb21lIHNhbXBsZXMuCisKKyAgICAgPHVsPgorPGxpPlNvbWUgbWFjcm9zIGFyZSBwcmVkZWZpbmVkIG9uIGVhY2gga2luZCBvZiBtYWNoaW5lCisoc2VlIDxhIGhyZWY9IlN5c3RlbV8wMDJkc3BlY2lmaWMtUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zIj5TeXN0ZW0tc3BlY2lmaWMgUHJlZGVmaW5lZCBNYWNyb3M8L2E+KS4gIFRoaXMgYWxsb3dzIHlvdSB0byBwcm92aWRlCitjb2RlIHNwZWNpYWxseSB0dW5lZCBmb3IgYSBwYXJ0aWN1bGFyIG1hY2hpbmUuCisKKyAgICAgPGxpPlN5c3RlbSBoZWFkZXIgZmlsZXMgZGVmaW5lIG1vcmUgbWFjcm9zLCBhc3NvY2lhdGVkIHdpdGggdGhlIGZlYXR1cmVzCit0aGV5IGltcGxlbWVudC4gIFlvdSBjYW4gdGVzdCB0aGVzZSBtYWNyb3Mgd2l0aCBjb25kaXRpb25hbHMgdG8gYXZvaWQKK3VzaW5nIGEgc3lzdGVtIGZlYXR1cmUgb24gYSBtYWNoaW5lIHdoZXJlIGl0IGlzIG5vdCBpbXBsZW1lbnRlZC4KKworICAgICA8bGk+TWFjcm9zIGNhbiBiZSBkZWZpbmVkIG9yIHVuZGVmaW5lZCB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVTwvc3Bhbj48L3NhbXA+Citjb21tYW5kIGxpbmUgb3B0aW9ucyB3aGVuIHlvdSBjb21waWxlIHRoZSBwcm9ncmFtLiAgWW91IGNhbiBhcnJhbmdlIHRvCitjb21waWxlIHRoZSBzYW1lIHNvdXJjZSBmaWxlIGludG8gdHdvIGRpZmZlcmVudCBwcm9ncmFtcyBieSBjaG9vc2luZyBhCittYWNybyBuYW1lIHRvIHNwZWNpZnkgd2hpY2ggcHJvZ3JhbSB5b3Ugd2FudCwgd3JpdGluZyBjb25kaXRpb25hbHMgdG8KK3Rlc3Qgd2hldGhlciBvciBob3cgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBhbmQgdGhlbiBjb250cm9sbGluZyB0aGUKK3N0YXRlIG9mIHRoZSBtYWNybyB3aXRoIGNvbW1hbmQgbGluZSBvcHRpb25zLCBwZXJoYXBzIHNldCBpbiB0aGUKK01ha2VmaWxlLiAgU2VlIDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPi4KKworICAgICA8bGk+WW91ciBwcm9ncmFtIG1pZ2h0IGhhdmUgYSBzcGVjaWFsIGhlYWRlciBmaWxlIChvZnRlbiBjYWxsZWQKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcuaDwvc3Bhbj48L3NhbXA+KSB0aGF0IGlzIGFkanVzdGVkIHdoZW4gdGhlIHByb2dyYW0gaXMgY29tcGlsZWQuICBJdCBjYW4KK2RlZmluZSBvciBub3QgZGVmaW5lIG1hY3JvcyBkZXBlbmRpbmcgb24gdGhlIGZlYXR1cmVzIG9mIHRoZSBzeXN0ZW0gYW5kCit0aGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgb2YgdGhlIHByb2dyYW0uICBUaGUgYWRqdXN0bWVudCBjYW4gYmUKK2F1dG9tYXRlZCBieSBhIHRvb2wgc3VjaCBhcyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXV0b2NvbmY8L3NwYW4+PC9zYW1wPiwgb3IgZG9uZSBieSBoYW5kLiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSW1wbGVtZW50YXRpb24tRGV0YWlscy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbXBsZW1lbnRhdGlvbi1EZXRhaWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5ZDQ5NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSW1wbGVtZW50YXRpb24tRGV0YWlscy5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkltcGxlbWVudGF0aW9uIERldGFpbHMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUcmFkaXRpb25hbC1Nb2RlLmh0bWwjVHJhZGl0aW9uYWwtTW9kZSIgdGl0bGU9IlRyYWRpdGlvbmFsIE1vZGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiIgdGl0bGU9Ikludm9jYXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW1wbGVtZW50YXRpb24tRGV0YWlscyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRyYWRpdGlvbmFsLU1vZGUuaHRtbCNUcmFkaXRpb25hbC1Nb2RlIj5UcmFkaXRpb25hbCBNb2RlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjExIEltcGxlbWVudGF0aW9uIERldGFpbHM8L2gyPgorCis8cD5IZXJlIHdlIGRvY3VtZW50IGRldGFpbHMgb2YgaG93IHRoZSBwcmVwcm9jZXNzb3IncyBpbXBsZW1lbnRhdGlvbgorYWZmZWN0cyBpdHMgdXNlci12aXNpYmxlIGJlaGF2aW9yLiAgWW91IHNob3VsZCB0cnkgdG8gYXZvaWQgdW5kdWUKK3JlbGlhbmNlIG9uIGJlaGF2aW9yIGRlc2NyaWJlZCBoZXJlLCBhcyBpdCBpcyBwb3NzaWJsZSB0aGF0IGl0IHdpbGwKK2NoYW5nZSBzdWJ0bHkgaW4gZnV0dXJlIGltcGxlbWVudGF0aW9ucy4KKworICAgPHA+QWxzbyBkb2N1bWVudGVkIGhlcmUgYXJlIG9ic29sZXRlIGZlYXR1cmVzIGFuZCBjaGFuZ2VzIGZyb20gcHJldmlvdXMKK3ZlcnNpb25zIG9mIENQUC4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IiPkltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJJbXBsZW1lbnRhdGlvbi1saW1pdHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1saW1pdHMiPkltcGxlbWVudGF0aW9uIGxpbWl0czwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjT2Jzb2xldGUtRmVhdHVyZXMiPk9ic29sZXRlIEZlYXR1cmVzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iRGlmZmVyZW5jZXMtZnJvbS1wcmV2aW91cy12ZXJzaW9ucy5odG1sI0RpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMiPkRpZmZlcmVuY2VzIGZyb20gcHJldmlvdXMgdmVyc2lvbnM8L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0ltcGxlbWVudGF0aW9uLWxpbWl0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbXBsZW1lbnRhdGlvbi1saW1pdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJmZGRmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbXBsZW1lbnRhdGlvbi1saW1pdHMuaHRtbApAQCAtMCwwICsxLDEyMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW1wbGVtZW50YXRpb24gbGltaXRzIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkltcGxlbWVudGF0aW9uLURldGFpbHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1EZXRhaWxzIiB0aXRsZT0iSW1wbGVtZW50YXRpb24gRGV0YWlscyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IiIHRpdGxlPSJJbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT2Jzb2xldGUtRmVhdHVyZXMuaHRtbCNPYnNvbGV0ZS1GZWF0dXJlcyIgdGl0bGU9Ik9ic29sZXRlIEZlYXR1cmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkltcGxlbWVudGF0aW9uLWxpbWl0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPYnNvbGV0ZS1GZWF0dXJlcy5odG1sI09ic29sZXRlLUZlYXR1cmVzIj5PYnNvbGV0ZSBGZWF0dXJlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IiPkltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbXBsZW1lbnRhdGlvbi1EZXRhaWxzLmh0bWwjSW1wbGVtZW50YXRpb24tRGV0YWlscyI+SW1wbGVtZW50YXRpb24gRGV0YWlsczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjExLjIgSW1wbGVtZW50YXRpb24gbGltaXRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW1wbGVtZW50YXRpb24tbGltaXRzLTExMiI+PC9hPgorQ1BQIGhhcyBhIHNtYWxsIG51bWJlciBvZiBpbnRlcm5hbCBsaW1pdHMuICBUaGlzIHNlY3Rpb24gbGlzdHMgdGhlCitsaW1pdHMgd2hpY2ggdGhlIEMgc3RhbmRhcmQgcmVxdWlyZXMgdG8gYmUgbm8gbG93ZXIgdGhhbiBzb21lIG1pbmltdW0sCithbmQgYWxsIHRoZSBvdGhlcnMga25vd24uICBJdCBpcyBpbnRlbmRlZCB0aGF0IHRoZXJlIHNob3VsZCBiZSBhcyBmZXcgbGltaXRzCithcyBwb3NzaWJsZS4gIElmIHlvdSBlbmNvdW50ZXIgYW4gdW5kb2N1bWVudGVkIG9yIGluY29udmVuaWVudCBsaW1pdCwKK3BsZWFzZSByZXBvcnQgdGhhdCBhcyBhIGJ1Zy4gIFNlZSA8YSBocmVmPSIuLi9nY2MvQnVncy5odG1sI0J1Z3MiPlJlcG9ydGluZyBCdWdzPC9hPi4KKworICAgPHA+V2hlcmUgd2Ugc2F5IHNvbWV0aGluZyBpcyBsaW1pdGVkIDxkZm4+b25seSBieSBhdmFpbGFibGUgbWVtb3J5PC9kZm4+LCB0aGF0CittZWFucyB0aGF0IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBpbXBvc2Ugbm8gaW50cmluc2ljIGxpbWl0LCBhbmQgc3BhY2UKK2lzIGFsbG9jYXRlZCB3aXRoIDxjb2RlPm1hbGxvYzwvY29kZT4gb3IgZXF1aXZhbGVudC4gIFRoZSBhY3R1YWwgbGltaXQgd2lsbAordGhlcmVmb3JlIGRlcGVuZCBvbiBtYW55IHRoaW5ncywgc3VjaCBhcyB0aGUgc2l6ZSBvZiBvdGhlciB0aGluZ3MKK2FsbG9jYXRlZCBieSB0aGUgY29tcGlsZXIgYXQgdGhlIHNhbWUgdGltZSwgdGhlIGFtb3VudCBvZiBtZW1vcnkKK2NvbnN1bWVkIGJ5IG90aGVyIHByb2Nlc3NlcyBvbiB0aGUgc2FtZSBjb21wdXRlciwgZXRjLgorCisgICAgIDx1bD4KKzxsaT5OZXN0aW5nIGxldmVscyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZpbGVzLgorCisgICAgIDxwPldlIGltcG9zZSBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMjAwIGxldmVscywgdG8gYXZvaWQgcnVuYXdheSByZWN1cnNpb24uIAorVGhlIHN0YW5kYXJkIHJlcXVpcmVzIGF0IGxlYXN0IDE1IGxldmVscy4KKworICAgICA8bGk+TmVzdGluZyBsZXZlbHMgb2YgY29uZGl0aW9uYWwgaW5jbHVzaW9uLgorCisgICAgIDxwPlRoZSBDIHN0YW5kYXJkIG1hbmRhdGVzIHRoaXMgYmUgYXQgbGVhc3QgNjMuICBDUFAgaXMgbGltaXRlZCBvbmx5IGJ5CithdmFpbGFibGUgbWVtb3J5LgorCisgICAgIDxsaT5MZXZlbHMgb2YgcGFyZW50aGVzaXplZCBleHByZXNzaW9ucyB3aXRoaW4gYSBmdWxsIGV4cHJlc3Npb24uCisKKyAgICAgPHA+VGhlIEMgc3RhbmRhcmQgcmVxdWlyZXMgdGhpcyB0byBiZSBhdCBsZWFzdCA2My4gIEluIHByZXByb2Nlc3NvcgorY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMsIGl0IGlzIGxpbWl0ZWQgb25seSBieSBhdmFpbGFibGUgbWVtb3J5LgorCisgICAgIDxsaT5TaWduaWZpY2FudCBpbml0aWFsIGNoYXJhY3RlcnMgaW4gYW4gaWRlbnRpZmllciBvciBtYWNybyBuYW1lLgorCisgICAgIDxwPlRoZSBwcmVwcm9jZXNzb3IgdHJlYXRzIGFsbCBjaGFyYWN0ZXJzIGFzIHNpZ25pZmljYW50LiAgVGhlIEMgc3RhbmRhcmQKK3JlcXVpcmVzIG9ubHkgdGhhdCB0aGUgZmlyc3QgNjMgYmUgc2lnbmlmaWNhbnQuCisKKyAgICAgPGxpPk51bWJlciBvZiBtYWNyb3Mgc2ltdWx0YW5lb3VzbHkgZGVmaW5lZCBpbiBhIHNpbmdsZSB0cmFuc2xhdGlvbiB1bml0LgorCisgICAgIDxwPlRoZSBzdGFuZGFyZCByZXF1aXJlcyBhdCBsZWFzdCA0MDk1IGJlIHBvc3NpYmxlLiAgQ1BQIGlzIGxpbWl0ZWQgb25seQorYnkgYXZhaWxhYmxlIG1lbW9yeS4KKworICAgICA8bGk+TnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gYSBtYWNybyBkZWZpbml0aW9uIGFuZCBhcmd1bWVudHMgaW4gYSBtYWNybyBjYWxsLgorCisgICAgIDxwPldlIGFsbG93IDxjb2RlPlVTSFJUX01BWDwvY29kZT4sIHdoaWNoIGlzIG5vIHNtYWxsZXIgdGhhbiA2NSw1MzUuICBUaGUgbWluaW11bQorcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGlzIDEyNy4KKworICAgICA8bGk+TnVtYmVyIG9mIGNoYXJhY3RlcnMgb24gYSBsb2dpY2FsIHNvdXJjZSBsaW5lLgorCisgICAgIDxwPlRoZSBDIHN0YW5kYXJkIHJlcXVpcmVzIGEgbWluaW11bSBvZiA0MDk2IGJlIHBlcm1pdHRlZC4gIENQUCBwbGFjZXMKK25vIGxpbWl0cyBvbiB0aGlzLCBidXQgeW91IG1heSBnZXQgaW5jb3JyZWN0IGNvbHVtbiBudW1iZXJzIHJlcG9ydGVkIGluCitkaWFnbm9zdGljcyBmb3IgbGluZXMgbG9uZ2VyIHRoYW4gNjUsNTM1IGNoYXJhY3RlcnMuCisKKyAgICAgPGxpPk1heGltdW0gc2l6ZSBvZiBhIHNvdXJjZSBmaWxlLgorCisgICAgIDxwPlRoZSBzdGFuZGFyZCBkb2VzIG5vdCBzcGVjaWZ5IGFueSBsb3dlciBsaW1pdCBvbiB0aGUgbWF4aW11bSBzaXplIG9mIGEKK3NvdXJjZSBmaWxlLiAgR05VIGNwcCBtYXBzIGZpbGVzIGludG8gbWVtb3J5LCBzbyBpdCBpcyBsaW1pdGVkIGJ5IHRoZQorYXZhaWxhYmxlIGFkZHJlc3Mgc3BhY2UuICBUaGlzIGlzIGdlbmVyYWxseSBhdCBsZWFzdCB0d28gZ2lnYWJ5dGVzLiAKK0RlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgdGhlIHNpemUgb2YgcGh5c2ljYWwgbWVtb3J5IG1heSBvcgorbWF5IG5vdCBiZSBhIGxpbWl0YXRpb24uCisKKyAgIDwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGFkYzhlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci5odG1sCkBAIC0wLDAgKzEsMTQ0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkltcGxlbWVudGF0aW9uLURldGFpbHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1EZXRhaWxzIiB0aXRsZT0iSW1wbGVtZW50YXRpb24gRGV0YWlscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkltcGxlbWVudGF0aW9uLWxpbWl0cy5odG1sI0ltcGxlbWVudGF0aW9uLWxpbWl0cyIgdGl0bGU9IkltcGxlbWVudGF0aW9uIGxpbWl0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbXBsZW1lbnRhdGlvbi1kZWZpbmVkLWJlaGF2aW9yIj48L2E+Cis8YSBuYW1lPSJJbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbXBsZW1lbnRhdGlvbi1saW1pdHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1saW1pdHMiPkltcGxlbWVudGF0aW9uIGxpbWl0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkltcGxlbWVudGF0aW9uLURldGFpbHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1EZXRhaWxzIj5JbXBsZW1lbnRhdGlvbiBEZXRhaWxzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTEuMSBJbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3ItMTExIj48L2E+CitUaGlzIGlzIGhvdyBDUFAgYmVoYXZlcyBpbiBhbGwgdGhlIGNhc2VzIHdoaWNoIHRoZSBDIHN0YW5kYXJkCitkZXNjcmliZXMgYXMgPGRmbj5pbXBsZW1lbnRhdGlvbi1kZWZpbmVkPC9kZm4+LiAgVGhpcyB0ZXJtIG1lYW5zIHRoYXQgdGhlCitpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHRvIGRvIHdoYXQgaXQgbGlrZXMsIGJ1dCBtdXN0IGRvY3VtZW50IGl0cyBjaG9pY2UKK2FuZCBzdGljayB0byBpdC4gCis8IS0tIEZJWE1FOiBDaGVjayB0aGUgQysrIHN0YW5kYXJkIGZvciBtb3JlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgc3R1ZmYuIC0tPgorCisgICAgIDx1bD4KKzxsaT5UaGUgbWFwcGluZyBvZiBwaHlzaWNhbCBzb3VyY2UgZmlsZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgdG8gdGhlCitleGVjdXRpb24gY2hhcmFjdGVyIHNldC4KKworICAgICA8cD5UaGUgaW5wdXQgY2hhcmFjdGVyIHNldCBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbnB1dC1jaGFyc2V0PC9zcGFuPjwvc2FtcD4gb3B0aW9uLCB3aGlsZSB0aGUgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQgbWF5CitiZSBjb250cm9sbGVkIHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmV4ZWMtY2hhcnNldDwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ3aWRlLWV4ZWMtY2hhcnNldDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuCisKKyAgICAgPGxpPklkZW50aWZpZXIgY2hhcmFjdGVycy4gCis8YSBuYW1lPSJJZGVudGlmaWVyLWNoYXJhY3RlcnMiPjwvYT5UaGUgQyBhbmQgQysrIHN0YW5kYXJkcyBhbGxvdyBpZGVudGlmaWVycyB0byBiZSBjb21wb3NlZCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl88L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCB0aGUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICBDKysgYW5kIEM5OSBhbHNvIGFsbG93IHVuaXZlcnNhbAorY2hhcmFjdGVyIG5hbWVzLCBhbmQgQzk5IGZ1cnRoZXIgcGVybWl0cyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkCitjaGFyYWN0ZXJzLiAgR0NDIGN1cnJlbnRseSBvbmx5IHBlcm1pdHMgdW5pdmVyc2FsIGNoYXJhY3RlciBuYW1lcyBpZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZleHRlbmRlZC1pZGVudGlmaWVyczwvc3Bhbj48L3NhbXA+IGlzIHVzZWQsIGJlY2F1c2UgdGhlIGltcGxlbWVudGF0aW9uIG9mCit1bml2ZXJzYWwgY2hhcmFjdGVyIG5hbWVzIGluIGlkZW50aWZpZXJzIGlzIGV4cGVyaW1lbnRhbC4KKworICAgICA8cD5HQ0MgYWxsb3dzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGluIGlkZW50aWZpZXJzIGFzIGFuIGV4dGVuc2lvbiBmb3IKK21vc3QgdGFyZ2V0cy4gIFRoaXMgaXMgdHJ1ZSByZWdhcmRsZXNzIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5zdGQ9PC9zcGFuPjwvc2FtcD4gc3dpdGNoLAorc2luY2UgdGhpcyBleHRlbnNpb24gY2Fubm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmRzLWNvbmZvcm1pbmcKK3Byb2dyYW1zLiAgV2hlbiBwcmVwcm9jZXNzaW5nIGFzc2VtYmxlciwgaG93ZXZlciwgZG9sbGFycyBhcmUgbm90CitpZGVudGlmaWVyIGNoYXJhY3RlcnMgYnkgZGVmYXVsdC4KKworICAgICA8cD5DdXJyZW50bHkgdGhlIHRhcmdldHMgdGhhdCBieSBkZWZhdWx0IGRvIG5vdCBwZXJtaXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBBVlIsCitJUDJLLCBNTUlYLCBNSVBTIElyaXggMywgQVJNIGFvdXQsIGFuZCBQb3dlclBDIHRhcmdldHMgZm9yIHRoZSBBSVgKK29wZXJhdGluZyBzeXN0ZW0uCisKKyAgICAgPHA+WW91IGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZG9sbGFycy1pbi1pZGVudGlmaWVyczwvc3Bhbj48L3NhbXA+IG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5mbm8tZG9sbGFycy1pbi1pZGVudGlmaWVyczwvc3Bhbj48L3NhbXA+LiAgU2VlIDxhIGhyZWY9ImZkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMuaHRtbCNmZG9sbGFyc18wMDJkaW5fMDAyZGlkZW50aWZpZXJzIj5mZG9sbGFycy1pbi1pZGVudGlmaWVyczwvYT4uCisKKyAgICAgPGxpPk5vbi1lbXB0eSBzZXF1ZW5jZXMgb2Ygd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgorCisgICAgIDxwPkluIHRleHR1YWwgb3V0cHV0LCBlYWNoIHdoaXRlc3BhY2Ugc2VxdWVuY2UgaXMgY29sbGFwc2VkIHRvIGEgc2luZ2xlCitzcGFjZS4gIEZvciBhZXN0aGV0aWMgcmVhc29ucywgdGhlIGZpcnN0IHRva2VuIG9uIGVhY2ggbm9uLWRpcmVjdGl2ZQorbGluZSBvZiBvdXRwdXQgaXMgcHJlY2VkZWQgd2l0aCBzdWZmaWNpZW50IHNwYWNlcyB0aGF0IGl0IGFwcGVhcnMgaW4gdGhlCitzYW1lIGNvbHVtbiBhcyBpdCBkaWQgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLgorCisgICAgIDxsaT5UaGUgbnVtZXJpYyB2YWx1ZSBvZiBjaGFyYWN0ZXIgY29uc3RhbnRzIGluIHByZXByb2Nlc3NvciBleHByZXNzaW9ucy4KKworICAgICA8cD5UaGUgcHJlcHJvY2Vzc29yIGFuZCBjb21waWxlciBpbnRlcnByZXQgY2hhcmFjdGVyIGNvbnN0YW50cyBpbiB0aGUKK3NhbWUgd2F5OyBpLmUuIGVzY2FwZSBzZXF1ZW5jZXMgc3VjaCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlxhPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBnaXZlbiB0aGUKK3ZhbHVlcyB0aGV5IHdvdWxkIGhhdmUgb24gdGhlIHRhcmdldCBtYWNoaW5lLgorCisgICAgIDxwPlRoZSBjb21waWxlciBldmFsdWF0ZXMgYSBtdWx0aS1jaGFyYWN0ZXIgY2hhcmFjdGVyIGNvbnN0YW50IGEgY2hhcmFjdGVyCithdCBhIHRpbWUsIHNoaWZ0aW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBsZWZ0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBwZXIKK3RhcmdldCBjaGFyYWN0ZXIsIGFuZCB0aGVuIG9yLWluZyBpbiB0aGUgYml0LXBhdHRlcm4gb2YgdGhlIG5ldworY2hhcmFjdGVyIHRydW5jYXRlZCB0byB0aGUgd2lkdGggb2YgYSB0YXJnZXQgY2hhcmFjdGVyLiAgVGhlIGZpbmFsCitiaXQtcGF0dGVybiBpcyBnaXZlbiB0eXBlIDxjb2RlPmludDwvY29kZT4sIGFuZCBpcyB0aGVyZWZvcmUgc2lnbmVkLAorcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHNpbmdsZSBjaGFyYWN0ZXJzIGFyZSBzaWduZWQgb3Igbm90IChhIHNsaWdodAorY2hhbmdlIGZyb20gdmVyc2lvbnMgMy4xIGFuZCBlYXJsaWVyIG9mIEdDQykuICBJZiB0aGVyZSBhcmUgbW9yZQorY2hhcmFjdGVycyBpbiB0aGUgY29uc3RhbnQgdGhhbiB3b3VsZCBmaXQgaW4gdGhlIHRhcmdldCA8Y29kZT5pbnQ8L2NvZGU+IHRoZQorY29tcGlsZXIgaXNzdWVzIGEgd2FybmluZywgYW5kIHRoZSBleGNlc3MgbGVhZGluZyBjaGFyYWN0ZXJzIGFyZQoraWdub3JlZC4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwgPGNvZGU+J2FiJzwvY29kZT4gZm9yIGEgdGFyZ2V0IHdpdGggYW4gOC1iaXQgPGNvZGU+Y2hhcjwvY29kZT4gd291bGQgYmUKK2ludGVycHJldGVkIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KGludCkmbmJzcDsoKHVuc2lnbmVkJm5ic3A7Y2hhcikmbmJzcDsnYScmbmJzcDsqJm5ic3A7MjU2Jm5ic3A7KyZuYnNwOyh1bnNpZ25lZCZuYnNwO2NoYXIpJm5ic3A7J2InKTwvc3Bhbj48L3NhbXA+JnJzcXVvOzwhLS0gL0B3IC0tPiwgYW5kIDxjb2RlPidcMjM0YSc8L2NvZGU+IGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KGludCkmbmJzcDsoKHVuc2lnbmVkJm5ic3A7Y2hhcikmbmJzcDsnXDIzNCcmbmJzcDsqJm5ic3A7MjU2Jm5ic3A7KyZuYnNwOyh1bnNpZ25lZCZuYnNwO2NoYXIpJm5ic3A7J2EnKTwvc3Bhbj48L3NhbXA+JnJzcXVvOzwhLS0gL0B3IC0tPi4KKworICAgICA8bGk+U291cmNlIGZpbGUgaW5jbHVzaW9uLgorCisgICAgIDxwPkZvciBhIGRpc2N1c3Npb24gb24gaG93IHRoZSBwcmVwcm9jZXNzb3IgbG9jYXRlcyBoZWFkZXIgZmlsZXMsCis8YSBocmVmPSJJbmNsdWRlLU9wZXJhdGlvbi5odG1sI0luY2x1ZGUtT3BlcmF0aW9uIj5JbmNsdWRlIE9wZXJhdGlvbjwvYT4uCisKKyAgICAgPGxpPkludGVycHJldGF0aW9uIG9mIHRoZSBmaWxlbmFtZSByZXN1bHRpbmcgZnJvbSBhIG1hY3JvLWV4cGFuZGVkCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZS4KKworICAgICA8cD5TZWUgPGEgaHJlZj0iQ29tcHV0ZWQtSW5jbHVkZXMuaHRtbCNDb21wdXRlZC1JbmNsdWRlcyI+Q29tcHV0ZWQgSW5jbHVkZXM8L2E+LgorCisgICAgIDxsaT5UcmVhdG1lbnQgb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIHRoYXQgYWZ0ZXIgbWFjcm8tZXhwYW5zaW9uCityZXN1bHRzIGluIGEgc3RhbmRhcmQgcHJhZ21hLgorCisgICAgIDxwPk5vIG1hY3JvIGV4cGFuc2lvbiBvY2N1cnMgb24gYW55ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgbGluZSwgc28gdGhlCitxdWVzdGlvbiBkb2VzIG5vdCBhcmlzZS4KKworICAgICA8cD5Ob3RlIHRoYXQgR0NDIGRvZXMgbm90IHlldCBpbXBsZW1lbnQgYW55IG9mIHRoZSBzdGFuZGFyZAorcHJhZ21hcy4KKworICAgPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbmNsdWRlLU9wZXJhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbmNsdWRlLU9wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMjNiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0luY2x1ZGUtT3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkluY2x1ZGUgT3BlcmF0aW9uIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkhlYWRlci1GaWxlcy5odG1sI0hlYWRlci1GaWxlcyIgdGl0bGU9IkhlYWRlciBGaWxlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkluY2x1ZGUtU3ludGF4Lmh0bWwjSW5jbHVkZS1TeW50YXgiIHRpdGxlPSJJbmNsdWRlIFN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNlYXJjaC1QYXRoLmh0bWwjU2VhcmNoLVBhdGgiIHRpdGxlPSJTZWFyY2ggUGF0aCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbmNsdWRlLU9wZXJhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTZWFyY2gtUGF0aC5odG1sI1NlYXJjaC1QYXRoIj5TZWFyY2ggUGF0aDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkluY2x1ZGUtU3ludGF4Lmh0bWwjSW5jbHVkZS1TeW50YXgiPkluY2x1ZGUgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIj5IZWFkZXIgRmlsZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjIgSW5jbHVkZSBPcGVyYXRpb248L2gzPgorCis8cD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgd29ya3MgYnkgZGlyZWN0aW5nIHRoZSBDIHByZXByb2Nlc3NvciB0bworc2NhbiB0aGUgc3BlY2lmaWVkIGZpbGUgYXMgaW5wdXQgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUKK2N1cnJlbnQgZmlsZS4gIFRoZSBvdXRwdXQgZnJvbSB0aGUgcHJlcHJvY2Vzc29yIGNvbnRhaW5zIHRoZSBvdXRwdXQKK2FscmVhZHkgZ2VuZXJhdGVkLCBmb2xsb3dlZCBieSB0aGUgb3V0cHV0IHJlc3VsdGluZyBmcm9tIHRoZSBpbmNsdWRlZAorZmlsZSwgZm9sbG93ZWQgYnkgdGhlIG91dHB1dCB0aGF0IGNvbWVzIGZyb20gdGhlIHRleHQgYWZ0ZXIgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZS4gIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGhlYWRlciBmaWxlCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+aGVhZGVyLmg8L3NwYW4+PC9zYW1wPiBhcyBmb2xsb3dzLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgY2hhciAqdGVzdCAodm9pZCk7Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+YW5kIGEgbWFpbiBwcm9ncmFtIGNhbGxlZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+cHJvZ3JhbS5jPC9zcGFuPjwvc2FtcD4gdGhhdCB1c2VzIHRoZSBoZWFkZXIgZmlsZSwKK2xpa2UgdGhpcywKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCB4OworICAgICAjaW5jbHVkZSAiaGVhZGVyLmgiCisgICAgIAorICAgICBpbnQKKyAgICAgbWFpbiAodm9pZCkKKyAgICAgeworICAgICAgIHB1dHMgKHRlc3QgKCkpOworICAgICB9Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+dGhlIGNvbXBpbGVyIHdpbGwgc2VlIHRoZSBzYW1lIHRva2VuIHN0cmVhbSBhcyBpdCB3b3VsZCBpZgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnByb2dyYW0uYzwvc3Bhbj48L3NhbXA+IHJlYWQKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCB4OworICAgICBjaGFyICp0ZXN0ICh2b2lkKTsKKyAgICAgCisgICAgIGludAorICAgICBtYWluICh2b2lkKQorICAgICB7CisgICAgICAgcHV0cyAodGVzdCAoKSk7CisgICAgIH0KKzwvcHJlPgorICAgPHA+SW5jbHVkZWQgZmlsZXMgYXJlIG5vdCBsaW1pdGVkIHRvIGRlY2xhcmF0aW9ucyBhbmQgbWFjcm8gZGVmaW5pdGlvbnM7Cit0aG9zZSBhcmUgbWVyZWx5IHRoZSB0eXBpY2FsIHVzZXMuICBBbnkgZnJhZ21lbnQgb2YgYSBDIHByb2dyYW0gY2FuIGJlCitpbmNsdWRlZCBmcm9tIGFub3RoZXIgZmlsZS4gIFRoZSBpbmNsdWRlIGZpbGUgY291bGQgZXZlbiBjb250YWluIHRoZQorYmVnaW5uaW5nIG9mIGEgc3RhdGVtZW50IHRoYXQgaXMgY29uY2x1ZGVkIGluIHRoZSBjb250YWluaW5nIGZpbGUsIG9yCit0aGUgZW5kIG9mIGEgc3RhdGVtZW50IHRoYXQgd2FzIHN0YXJ0ZWQgaW4gdGhlIGluY2x1ZGluZyBmaWxlLiAgSG93ZXZlciwKK2FuIGluY2x1ZGVkIGZpbGUgbXVzdCBjb25zaXN0IG9mIGNvbXBsZXRlIHRva2Vucy4gIENvbW1lbnRzIGFuZCBzdHJpbmcKK2xpdGVyYWxzIHdoaWNoIGhhdmUgbm90IGJlZW4gY2xvc2VkIGJ5IHRoZSBlbmQgb2YgYW4gaW5jbHVkZWQgZmlsZSBhcmUKK2ludmFsaWQuICBGb3IgZXJyb3IgcmVjb3ZlcnksIHRoZXkgYXJlIGNvbnNpZGVyZWQgdG8gZW5kIGF0IHRoZSBlbmQgb2YKK3RoZSBmaWxlLgorCisgICA8cD5UbyBhdm9pZCBjb25mdXNpb24sIGl0IGlzIGJlc3QgaWYgaGVhZGVyIGZpbGVzIGNvbnRhaW4gb25seSBjb21wbGV0ZQorc3ludGFjdGljIHVuaXRzJm1kYXNoO2Z1bmN0aW9uIGRlY2xhcmF0aW9ucyBvciBkZWZpbml0aW9ucywgdHlwZQorZGVjbGFyYXRpb25zLCBldGMuCisKKyAgIDxwPlRoZSBsaW5lIGZvbGxvd2luZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgYQorc2VwYXJhdGUgbGluZSBieSB0aGUgQyBwcmVwcm9jZXNzb3IsIGV2ZW4gaWYgdGhlIGluY2x1ZGVkIGZpbGUgbGFja3MgYQorZmluYWwgbmV3bGluZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbmNsdWRlLVN5bnRheC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbmNsdWRlLVN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ODE2OTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0luY2x1ZGUtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSw4OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5jbHVkZSBTeW50YXggLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIiB0aXRsZT0iSGVhZGVyIEZpbGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW5jbHVkZS1PcGVyYXRpb24uaHRtbCNJbmNsdWRlLU9wZXJhdGlvbiIgdGl0bGU9IkluY2x1ZGUgT3BlcmF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkluY2x1ZGUtU3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkluY2x1ZGUtT3BlcmF0aW9uLmh0bWwjSW5jbHVkZS1PcGVyYXRpb24iPkluY2x1ZGUgT3BlcmF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIj5IZWFkZXIgRmlsZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjEgSW5jbHVkZSBTeW50YXg8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyM2luY2x1ZGUtMjciPjwvYT5Cb3RoIHVzZXIgYW5kIHN5c3RlbSBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkIHVzaW5nIHRoZSBwcmVwcm9jZXNzaW5nCitkaXJlY3RpdmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEl0IGhhcyB0d28gdmFyaWFudHM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNpbmNsdWRlICZsdDs8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+Jmd0OzwvY29kZT48ZGQ+VGhpcyB2YXJpYW50IGlzIHVzZWQgZm9yIHN5c3RlbSBoZWFkZXIgZmlsZXMuICBJdCBzZWFyY2hlcyBmb3IgYSBmaWxlCituYW1lZCA8dmFyPmZpbGU8L3Zhcj4gaW4gYSBzdGFuZGFyZCBsaXN0IG9mIHN5c3RlbSBkaXJlY3Rvcmllcy4gIFlvdSBjYW4gcHJlcGVuZAorZGlyZWN0b3JpZXMgdG8gdGhpcyBsaXN0IHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gb3B0aW9uIChzZWUgPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPiNpbmNsdWRlICI8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+IjwvY29kZT48ZGQ+VGhpcyB2YXJpYW50IGlzIHVzZWQgZm9yIGhlYWRlciBmaWxlcyBvZiB5b3VyIG93biBwcm9ncmFtLiAgSXQKK3NlYXJjaGVzIGZvciBhIGZpbGUgbmFtZWQgPHZhcj5maWxlPC92YXI+IGZpcnN0IGluIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZwordGhlIGN1cnJlbnQgZmlsZSwgdGhlbiBpbiB0aGUgcXVvdGUgZGlyZWN0b3JpZXMgYW5kIHRoZW4gdGhlIHNhbWUKK2RpcmVjdG9yaWVzIHVzZWQgZm9yIDxjb2RlPiZsdDs8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+Jmd0OzwvY29kZT4uICBZb3UgY2FuIHByZXBlbmQgZGlyZWN0b3JpZXMKK3RvIHRoZSBsaXN0IG9mIHF1b3RlIGRpcmVjdG9yaWVzIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pcXVvdGU8L3NwYW4+PC9zYW1wPiBvcHRpb24uIAorPC9kbD4KKworICAgPHA+VGhlIGFyZ3VtZW50IG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdoZXRoZXIgZGVsaW1pdGVkIHdpdGggcXVvdGUgbWFya3Mgb3IKK2FuZ2xlIGJyYWNrZXRzLCBiZWhhdmVzIGxpa2UgYSBzdHJpbmcgY29uc3RhbnQgaW4gdGhhdCBjb21tZW50cyBhcmUgbm90CityZWNvZ25pemVkLCBhbmQgbWFjcm8gbmFtZXMgYXJlIG5vdCBleHBhbmRlZC4gIFRodXMsIDxjb2RlPiNpbmNsdWRlJm5ic3A7Jmx0O3gvKnkmZ3Q7PCEtLSAvQHcgLS0+PC9jb2RlPiBzcGVjaWZpZXMgaW5jbHVzaW9uIG9mIGEgc3lzdGVtIGhlYWRlciBmaWxlIG5hbWVkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj54Lyp5PC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPkhvd2V2ZXIsIGlmIGJhY2tzbGFzaGVzIG9jY3VyIHdpdGhpbiA8dmFyPmZpbGU8L3Zhcj4sIHRoZXkgYXJlIGNvbnNpZGVyZWQKK29yZGluYXJ5IHRleHQgY2hhcmFjdGVycywgbm90IGVzY2FwZSBjaGFyYWN0ZXJzLiAgTm9uZSBvZiB0aGUgY2hhcmFjdGVyCitlc2NhcGUgc2VxdWVuY2VzIGFwcHJvcHJpYXRlIHRvIHN0cmluZyBjb25zdGFudHMgaW4gQyBhcmUgcHJvY2Vzc2VkLiAKK1RodXMsIDxjb2RlPiNpbmNsdWRlJm5ic3A7InhcblxceSI8IS0tIC9AdyAtLT48L2NvZGU+IHNwZWNpZmllcyBhIGZpbGVuYW1lIGNvbnRhaW5pbmcgdGhyZWUKK2JhY2tzbGFzaGVzLiAgKFNvbWUgc3lzdGVtcyBpbnRlcnByZXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGEgcGF0aG5hbWUgc2VwYXJhdG9yLiAKK0FsbCBvZiB0aGVzZSBhbHNvIGludGVycHJldCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi88L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhlIHNhbWUgd2F5LiAgSXQgaXMgbW9zdCBwb3J0YWJsZQordG8gdXNlIG9ubHkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vPC9zcGFuPjwvc2FtcD4mcnNxdW87LikKKworICAgPHA+SXQgaXMgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYW55dGhpbmcgKG90aGVyIHRoYW4gY29tbWVudHMpIG9uIHRoZSBsaW5lCithZnRlciB0aGUgZmlsZSBuYW1lLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0luZGV4LW9mLURpcmVjdGl2ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSW5kZXgtb2YtRGlyZWN0aXZlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTY0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0luZGV4LW9mLURpcmVjdGl2ZXMuaHRtbApAQCAtMCwwICsxLDg0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbmRleCBvZiBEaXJlY3RpdmVzIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIiB0aXRsZT0iR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4IiB0aXRsZT0iT3B0aW9uIEluZGV4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkluZGV4LW9mLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4Ij5PcHRpb24gSW5kZXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJ1bm51bWJlcmVkIj5JbmRleCBvZiBEaXJlY3RpdmVzPC9oMj4KKworPHVsIGNsYXNzPSJpbmRleC1mbiIgY29tcGFjdD4KKzxsaT48YSBocmVmPSJPYnNvbGV0ZS1GZWF0dXJlcy5odG1sI2luZGV4LWdfdF8wMDIzYXNzZXJ0LTExNiI+PGNvZGU+I2Fzc2VydDwvY29kZT48L2E+OiA8YSBocmVmPSJPYnNvbGV0ZS1GZWF0dXJlcy5odG1sI09ic29sZXRlLUZlYXR1cmVzIj5PYnNvbGV0ZSBGZWF0dXJlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdF8wMDJkbGlrZS1NYWNyb3MuaHRtbCNpbmRleC1nX3RfMDAyM2RlZmluZS00NCI+PGNvZGU+I2RlZmluZTwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3RfMDAyZGxpa2UtTWFjcm9zLmh0bWwjT2JqZWN0XzAwMmRsaWtlLU1hY3JvcyI+T2JqZWN0LWxpa2UgTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRWxpZi5odG1sI2luZGV4LWdfdF8wMDIzZWxpZi05MSI+PGNvZGU+I2VsaWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iRWxpZi5odG1sI0VsaWYiPkVsaWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbHNlLmh0bWwjaW5kZXgtZ190XzAwMjNlbHNlLTkwIj48Y29kZT4jZWxzZTwvY29kZT48L2E+OiA8YSBocmVmPSJFbHNlLmh0bWwjRWxzZSI+RWxzZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklmZGVmLmh0bWwjaW5kZXgtZ190XzAwMjNlbmRpZi04NiI+PGNvZGU+I2VuZGlmPC9jb2RlPjwvYT46IDxhIGhyZWY9IklmZGVmLmh0bWwjSWZkZWYiPklmZGVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlhZ25vc3RpY3MuaHRtbCNpbmRleC1nX3RfMDAyM2Vycm9yLTk2Ij48Y29kZT4jZXJyb3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGlhZ25vc3RpY3MuaHRtbCNEaWFnbm9zdGljcyI+RGlhZ25vc3RpY3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1EaXJlY3RpdmVzLmh0bWwjaW5kZXgtZ190XzAwMjNpZGVudC0xMDYiPjxjb2RlPiNpZGVudDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1EaXJlY3RpdmVzLmh0bWwjT3RoZXItRGlyZWN0aXZlcyI+T3RoZXIgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI2luZGV4LWdfdF8wMDIzaWYtODQiPjxjb2RlPiNpZjwvY29kZT48L2E+OiA8YSBocmVmPSJDb25kaXRpb25hbC1TeW50YXguaHRtbCNDb25kaXRpb25hbC1TeW50YXgiPkNvbmRpdGlvbmFsIFN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklmZGVmLmh0bWwjaW5kZXgtZ190XzAwMjNpZmRlZi04NSI+PGNvZGU+I2lmZGVmPC9jb2RlPjwvYT46IDxhIGhyZWY9IklmZGVmLmh0bWwjSWZkZWYiPklmZGVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSWZkZWYuaHRtbCNpbmRleC1nX3RfMDAyM2lmbmRlZi04OCI+PGNvZGU+I2lmbmRlZjwvY29kZT48L2E+OiA8YSBocmVmPSJJZmRlZi5odG1sI0lmZGVmIj5JZmRlZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFsdGVybmF0aXZlcy10by1XcmFwcGVyLV8wMDIzaWZuZGVmLmh0bWwjaW5kZXgtZ190XzAwMjNpbXBvcnQtMzMiPjxjb2RlPiNpbXBvcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWx0ZXJuYXRpdmVzLXRvLVdyYXBwZXItXzAwMjNpZm5kZWYuaHRtbCNBbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZiI+QWx0ZXJuYXRpdmVzIHRvIFdyYXBwZXIgI2lmbmRlZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY2x1ZGUtU3ludGF4Lmh0bWwjaW5kZXgtZ190XzAwMjNpbmNsdWRlLTI3Ij48Y29kZT4jaW5jbHVkZTwvY29kZT48L2E+OiA8YSBocmVmPSJJbmNsdWRlLVN5bnRheC5odG1sI0luY2x1ZGUtU3ludGF4Ij5JbmNsdWRlIFN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldyYXBwZXItSGVhZGVycy5odG1sI2luZGV4LWdfdF8wMDIzaW5jbHVkZV8wMDVmbmV4dC0zOCI+PGNvZGU+I2luY2x1ZGVfbmV4dDwvY29kZT48L2E+OiA8YSBocmVmPSJXcmFwcGVyLUhlYWRlcnMuaHRtbCNXcmFwcGVyLUhlYWRlcnMiPldyYXBwZXIgSGVhZGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmUtQ29udHJvbC5odG1sI2luZGV4LWdfdF8wMDIzbGluZS05OSI+PGNvZGU+I2xpbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGluZS1Db250cm9sLmh0bWwjTGluZS1Db250cm9sIj5MaW5lIENvbnRyb2w8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmFnbWFzLmh0bWwjaW5kZXgtZ190XzAwMjNwcmFnbWEtR0NDLWRlcGVuZGVuY3ktMTAxIj48Y29kZT4jcHJhZ21hIEdDQyBkZXBlbmRlbmN5PC9jb2RlPjwvYT46IDxhIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJhZ21hcy5odG1sI2luZGV4LWdfdF8wMDIzcHJhZ21hLUdDQy1lcnJvci0xMDUiPjxjb2RlPiNwcmFnbWEgR0NDIGVycm9yPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJhZ21hcy5odG1sI2luZGV4LWdfdF8wMDIzcHJhZ21hLUdDQy1wb2lzb24tMTAyIj48Y29kZT4jcHJhZ21hIEdDQyBwb2lzb248L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmFnbWFzLmh0bWwjaW5kZXgtZ190XzAwMjNwcmFnbWEtR0NDLXN5c3RlbV8wMDVmaGVhZGVyLTEwMyI+PGNvZGU+I3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5c3RlbS1IZWFkZXJzLmh0bWwjaW5kZXgtZ190XzAwMjNwcmFnbWEtR0NDLXN5c3RlbV8wMDVmaGVhZGVyLTQwIj48Y29kZT4jcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN5c3RlbS1IZWFkZXJzLmh0bWwjU3lzdGVtLUhlYWRlcnMiPlN5c3RlbSBIZWFkZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJhZ21hcy5odG1sI2luZGV4LWdfdF8wMDIzcHJhZ21hLUdDQy13YXJuaW5nLTEwNCI+PGNvZGU+I3ByYWdtYSBHQ0Mgd2FybmluZzwvY29kZT48L2E+OiA8YSBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLURpcmVjdGl2ZXMuaHRtbCNpbmRleC1nX3RfMDAyM3NjY3MtMTA3Ij48Y29kZT4jc2NjczwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1EaXJlY3RpdmVzLmh0bWwjT3RoZXItRGlyZWN0aXZlcyI+T3RoZXIgRGlyZWN0aXZlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjaW5kZXgtZ190XzAwMjN1bmFzc2VydC0xMTgiPjxjb2RlPiN1bmFzc2VydDwvY29kZT48L2E+OiA8YSBocmVmPSJPYnNvbGV0ZS1GZWF0dXJlcy5odG1sI09ic29sZXRlLUZlYXR1cmVzIj5PYnNvbGV0ZSBGZWF0dXJlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlVuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zLmh0bWwjaW5kZXgtZ190XzAwMjN1bmRlZi03MCI+PGNvZGU+I3VuZGVmPC9jb2RlPjwvYT46IDxhIGhyZWY9IlVuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zLmh0bWwjVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MiPlVuZGVmaW5pbmcgYW5kIFJlZGVmaW5pbmcgTWFjcm9zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlhZ25vc3RpY3MuaHRtbCNpbmRleC1nX3RfMDAyM3dhcm5pbmctOTciPjxjb2RlPiN3YXJuaW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRpYWdub3N0aWNzLmh0bWwjRGlhZ25vc3RpY3MiPkRpYWdub3N0aWNzPC9hPjwvbGk+CisgICA8L3VsPjwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0luaXRpYWwtcHJvY2Vzc2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYjY4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0luaXRpYWwtcHJvY2Vzc2luZy5odG1sCkBAIC0wLDAgKzEsMTk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Jbml0aWFsIHByb2Nlc3NpbmcgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyIgdGl0bGU9Ik92ZXJ2aWV3Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ2hhcmFjdGVyLXNldHMuaHRtbCNDaGFyYWN0ZXItc2V0cyIgdGl0bGU9IkNoYXJhY3RlciBzZXRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIiB0aXRsZT0iVG9rZW5pemF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkluaXRpYWwtcHJvY2Vzc2luZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNUb2tlbml6YXRpb24iPlRva2VuaXphdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNoYXJhY3Rlci1zZXRzLmh0bWwjQ2hhcmFjdGVyLXNldHMiPkNoYXJhY3RlciBzZXRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjIgSW5pdGlhbCBwcm9jZXNzaW5nPC9oMz4KKworPHA+VGhlIHByZXByb2Nlc3NvciBwZXJmb3JtcyBhIHNlcmllcyBvZiB0ZXh0dWFsIHRyYW5zZm9ybWF0aW9ucyBvbiBpdHMKK2lucHV0LiAgVGhlc2UgaGFwcGVuIGJlZm9yZSBhbGwgb3RoZXIgcHJvY2Vzc2luZy4gIENvbmNlcHR1YWxseSwgdGhleQoraGFwcGVuIGluIGEgcmlnaWQgb3JkZXIsIGFuZCB0aGUgZW50aXJlIGZpbGUgaXMgcnVuIHRocm91Z2ggZWFjaAordHJhbnNmb3JtYXRpb24gYmVmb3JlIHRoZSBuZXh0IG9uZSBiZWdpbnMuICBDUFAgYWN0dWFsbHkgZG9lcyB0aGVtCithbGwgYXQgb25jZSwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBUaGVzZSB0cmFuc2Zvcm1hdGlvbnMgY29ycmVzcG9uZAorcm91Z2hseSB0byB0aGUgZmlyc3QgdGhyZWUgJmxkcXVvO3BoYXNlcyBvZiB0cmFuc2xhdGlvbiZyZHF1bzsgZGVzY3JpYmVkIGluIHRoZSBDCitzdGFuZGFyZC4KKworICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+PGEgbmFtZT0iaW5kZXgtbGluZS1lbmRpbmdzLTEiPjwvYT5UaGUgaW5wdXQgZmlsZSBpcyByZWFkIGludG8gbWVtb3J5IGFuZCBicm9rZW4gaW50byBsaW5lcy4KKworICAgICA8cD5EaWZmZXJlbnQgc3lzdGVtcyB1c2UgZGlmZmVyZW50IGNvbnZlbnRpb25zIHRvIGluZGljYXRlIHRoZSBlbmQgb2YgYQorbGluZS4gIEdDQyBhY2NlcHRzIHRoZSBBU0NJSSBjb250cm9sIHNlcXVlbmNlcyA8a2JkPkxGPC9rYmQ+LCA8a2JkPkNSJm5ic3A7TEY8IS0tIC9AdyAtLT48L2tiZD4gYW5kIDxrYmQ+Q1I8L2tiZD4gYXMgZW5kLW9mLWxpbmUgbWFya2Vycy4gIFRoZXNlIGFyZSB0aGUgY2Fub25pY2FsCitzZXF1ZW5jZXMgdXNlZCBieSBVbml4LCBET1MgYW5kIFZNUywgYW5kIHRoZSBjbGFzc2ljIE1hYyBPUyAoYmVmb3JlCitPU1gpIHJlc3BlY3RpdmVseS4gIFlvdSBtYXkgdGhlcmVmb3JlIHNhZmVseSBjb3B5IHNvdXJjZSBjb2RlIHdyaXR0ZW4KK29uIGFueSBvZiB0aG9zZSBzeXN0ZW1zIHRvIGEgZGlmZmVyZW50IG9uZSBhbmQgdXNlIGl0IHdpdGhvdXQKK2NvbnZlcnNpb24uICAoR0NDIG1heSBsb3NlIHRyYWNrIG9mIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIGlmIGEgZmlsZQorZG9lc24ndCBjb25zaXN0ZW50bHkgdXNlIG9uZSBjb252ZW50aW9uLCBhcyBzb21ldGltZXMgaGFwcGVucyB3aGVuIGl0CitpcyBlZGl0ZWQgb24gY29tcHV0ZXJzIHdpdGggZGlmZmVyZW50IGNvbnZlbnRpb25zIHRoYXQgc2hhcmUgYSBuZXR3b3JrCitmaWxlIHN5c3RlbS4pCisKKyAgICAgPHA+SWYgdGhlIGxhc3QgbGluZSBvZiBhbnkgaW5wdXQgZmlsZSBsYWNrcyBhbiBlbmQtb2YtbGluZSBtYXJrZXIsIHRoZSBlbmQKK29mIHRoZSBmaWxlIGlzIGNvbnNpZGVyZWQgdG8gaW1wbGljaXRseSBzdXBwbHkgb25lLiAgVGhlIEMgc3RhbmRhcmQgc2F5cwordGhhdCB0aGlzIGNvbmRpdGlvbiBwcm92b2tlcyB1bmRlZmluZWQgYmVoYXZpb3IsIHNvIEdDQyB3aWxsIGVtaXQgYQord2FybmluZyBtZXNzYWdlLgorCisgICAgIDxsaT48YSBuYW1lPSJpbmRleC10cmlncmFwaHMtMiI+PC9hPjxhIG5hbWU9InRyaWdyYXBocyI+PC9hPklmIHRyaWdyYXBocyBhcmUgZW5hYmxlZCwgdGhleSBhcmUgcmVwbGFjZWQgYnkgdGhlaXIKK2NvcnJlc3BvbmRpbmcgc2luZ2xlIGNoYXJhY3RlcnMuICBCeSBkZWZhdWx0IEdDQyBpZ25vcmVzIHRyaWdyYXBocywKK2J1dCBpZiB5b3UgcmVxdWVzdCBhIHN0cmljdGx5IGNvbmZvcm1pbmcgbW9kZSB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPC9zcGFuPjwvc2FtcD4KK29wdGlvbiwgb3IgeW91IHNwZWNpZnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi10cmlncmFwaHM8L3NwYW4+PC9zYW1wPiBvcHRpb24sIHRoZW4gaXQKK2NvbnZlcnRzIHRoZW0uCisKKyAgICAgPHA+VGhlc2UgYXJlIG5pbmUgdGhyZWUtY2hhcmFjdGVyIHNlcXVlbmNlcywgYWxsIHN0YXJ0aW5nIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4/Pzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK3RoYXQgYXJlIGRlZmluZWQgYnkgSVNPIEMgdG8gc3RhbmQgZm9yIHNpbmdsZSBjaGFyYWN0ZXJzLiAgVGhleSBwZXJtaXQKK29ic29sZXRlIHN5c3RlbXMgdGhhdCBsYWNrIHNvbWUgb2YgQydzIHB1bmN0dWF0aW9uIHRvIHVzZSBDLiAgRm9yCitleGFtcGxlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj8/Lzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdGFuZHMgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgc28gPHR0Pic/Py9uJzwvdHQ+IGlzIGEgY2hhcmFjdGVyCitjb25zdGFudCBmb3IgYSBuZXdsaW5lLgorCisgICAgIDxwPlRyaWdyYXBocyBhcmUgbm90IHBvcHVsYXIgYW5kIG1hbnkgY29tcGlsZXJzIGltcGxlbWVudCB0aGVtCitpbmNvcnJlY3RseS4gIFBvcnRhYmxlIGNvZGUgc2hvdWxkIG5vdCByZWx5IG9uIHRyaWdyYXBocyBiZWluZyBlaXRoZXIKK2NvbnZlcnRlZCBvciBpZ25vcmVkLiAgV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3RyaWdyYXBoczwvc3Bhbj48L3NhbXA+IEdDQyB3aWxsIHdhcm4geW91Cit3aGVuIGEgdHJpZ3JhcGggbWF5IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB5b3VyIHByb2dyYW0gaWYgaXQgd2VyZQorY29udmVydGVkLiAgU2VlIDxhIGhyZWY9Ild0cmlncmFwaHMuaHRtbCNXdHJpZ3JhcGhzIj5XdHJpZ3JhcGhzPC9hPi4KKworICAgICA8cD5JbiBhIHN0cmluZyBjb25zdGFudCwgeW91IGNhbiBwcmV2ZW50IGEgc2VxdWVuY2Ugb2YgcXVlc3Rpb24gbWFya3MKK2Zyb20gYmVpbmcgY29uZnVzZWQgd2l0aCBhIHRyaWdyYXBoIGJ5IGluc2VydGluZyBhIGJhY2tzbGFzaCBiZXR3ZWVuCit0aGUgcXVlc3Rpb24gbWFya3MsIG9yIGJ5IHNlcGFyYXRpbmcgdGhlIHN0cmluZyBsaXRlcmFsIGF0IHRoZQordHJpZ3JhcGggYW5kIG1ha2luZyB1c2Ugb2Ygc3RyaW5nIGxpdGVyYWwgY29uY2F0ZW5hdGlvbi4gIDx0dD4iKD8/XD8pIjwvdHQ+CitpcyB0aGUgc3RyaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KD8/Pyk8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG5vdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPig/XTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRyYWRpdGlvbmFsIEMgY29tcGlsZXJzCitkbyBub3QgcmVjb2duaXplIHRoZXNlIGlkaW9tcy4KKworICAgICA8cD5UaGUgbmluZSB0cmlncmFwaHMgYW5kIHRoZWlyIHJlcGxhY2VtZW50cyBhcmUKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBUcmlncmFwaDogICAgICAgPz8oICA/PykgID8/Jmx0OyAgPz8mZ3Q7ICA/Pz0gID8/LyAgPz8nICA/PyEgID8/LQorICAgICAgICAgIFJlcGxhY2VtZW50OiAgICAgIFsgICAgXSAgICB7ICAgIH0gICAgIyAgICBcICAgIF4gICAgfCAgICB+Cis8L3ByZT4KKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWNvbnRpbnVlZC1saW5lcy0zIj48L2E+PGEgbmFtZT0iaW5kZXgtYmFja3NsYXNoXzAwMmRuZXdsaW5lLTQiPjwvYT5Db250aW51ZWQgbGluZXMgYXJlIG1lcmdlZCBpbnRvIG9uZSBsb25nIGxpbmUuCisKKyAgICAgPHA+QSBjb250aW51ZWQgbGluZSBpcyBhIGxpbmUgd2hpY2ggZW5kcyB3aXRoIGEgYmFja3NsYXNoLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUKK2JhY2tzbGFzaCBpcyByZW1vdmVkIGFuZCB0aGUgZm9sbG93aW5nIGxpbmUgaXMgam9pbmVkIHdpdGggdGhlIGN1cnJlbnQKK29uZS4gIE5vIHNwYWNlIGlzIGluc2VydGVkLCBzbyB5b3UgbWF5IHNwbGl0IGEgbGluZSBhbnl3aGVyZSwgZXZlbiBpbgordGhlIG1pZGRsZSBvZiBhIHdvcmQuICAoSXQgaXMgZ2VuZXJhbGx5IG1vcmUgcmVhZGFibGUgdG8gc3BsaXQgbGluZXMKK29ubHkgYXQgd2hpdGUgc3BhY2UuKQorCisgICAgIDxwPlRoZSB0cmFpbGluZyBiYWNrc2xhc2ggb24gYSBjb250aW51ZWQgbGluZSBpcyBjb21tb25seSByZWZlcnJlZCB0byBhcyBhCis8ZGZuPmJhY2tzbGFzaC1uZXdsaW5lPC9kZm4+LgorCisgICAgIDxwPklmIHRoZXJlIGlzIHdoaXRlIHNwYWNlIGJldHdlZW4gYSBiYWNrc2xhc2ggYW5kIHRoZSBlbmQgb2YgYSBsaW5lLCB0aGF0CitpcyBzdGlsbCBhIGNvbnRpbnVlZCBsaW5lLiAgSG93ZXZlciwgYXMgdGhpcyBpcyB1c3VhbGx5IHRoZSByZXN1bHQgb2YgYW4KK2VkaXRpbmcgbWlzdGFrZSwgYW5kIG1hbnkgY29tcGlsZXJzIHdpbGwgbm90IGFjY2VwdCBpdCBhcyBhIGNvbnRpbnVlZAorbGluZSwgR0NDIHdpbGwgd2FybiB5b3UgYWJvdXQgaXQuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWNvbW1lbnRzLTUiPjwvYT48YSBuYW1lPSJpbmRleC1saW5lLWNvbW1lbnRzLTYiPjwvYT48YSBuYW1lPSJpbmRleC1ibG9jay1jb21tZW50cy03Ij48L2E+QWxsIGNvbW1lbnRzIGFyZSByZXBsYWNlZCB3aXRoIHNpbmdsZSBzcGFjZXMuCisKKyAgICAgPHA+VGhlcmUgYXJlIHR3byBraW5kcyBvZiBjb21tZW50cy4gIDxkZm4+QmxvY2sgY29tbWVudHM8L2Rmbj4gYmVnaW4gd2l0aAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vKjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgY29udGludWUgdW50aWwgdGhlIG5leHQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qLzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEJsb2NrIGNvbW1lbnRzIGRvIG5vdAorbmVzdDoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPnRoaXMgaXM8L3NwYW4+IC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+b25lIGNvbW1lbnQ8L3NwYW4+ICovIDxzcGFuIGNsYXNzPSJyb21hbiI+dGV4dCBvdXRzaWRlIGNvbW1lbnQ8L3NwYW4+Cis8L3ByZT4KKyAgICAgPHA+PGRmbj5MaW5lIGNvbW1lbnRzPC9kZm4+IGJlZ2luIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vLzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgY29udGludWUgdG8gdGhlIGVuZCBvZiB0aGUKK2N1cnJlbnQgbGluZS4gIExpbmUgY29tbWVudHMgZG8gbm90IG5lc3QgZWl0aGVyLCBidXQgaXQgZG9lcyBub3QgbWF0dGVyLAorYmVjYXVzZSB0aGV5IHdvdWxkIGVuZCBpbiB0aGUgc2FtZSBwbGFjZSBhbnl3YXkuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLy8gPHNwYW4gY2xhc3M9InJvbWFuIj50aGlzIGlzPC9zcGFuPiAvLyA8c3BhbiBjbGFzcz0icm9tYW4iPm9uZSBjb21tZW50PC9zcGFuPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJyb21hbiI+dGV4dCBvdXRzaWRlIGNvbW1lbnQ8L3NwYW4+Cis8L3ByZT4KKyAgICAgPC9vbD4KKworICAgPHA+SXQgaXMgc2FmZSB0byBwdXQgbGluZSBjb21tZW50cyBpbnNpZGUgYmxvY2sgY29tbWVudHMsIG9yIHZpY2UgdmVyc2EuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPmJsb2NrIGNvbW1lbnQ8L3NwYW4+CisgICAgICAgIC8vIDxzcGFuIGNsYXNzPSJyb21hbiI+Y29udGFpbnMgbGluZSBjb21tZW50PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0icm9tYW4iPnlldCBtb3JlIGNvbW1lbnQ8L3NwYW4+CisgICAgICAqLyA8c3BhbiBjbGFzcz0icm9tYW4iPm91dHNpZGUgY29tbWVudDwvc3Bhbj4KKyAgICAgCisgICAgIC8vIDxzcGFuIGNsYXNzPSJyb21hbiI+bGluZSBjb21tZW50PC9zcGFuPiAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPmNvbnRhaW5zIGJsb2NrIGNvbW1lbnQ8L3NwYW4+ICovCis8L3ByZT4KKyAgIDxwPkJ1dCBiZXdhcmUgb2YgY29tbWVudGluZyBvdXQgb25lIGVuZCBvZiBhIGJsb2NrIGNvbW1lbnQgd2l0aCBhIGxpbmUKK2NvbW1lbnQuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgLy8gPHNwYW4gY2xhc3M9InJvbWFuIj5sLmMuPC9zcGFuPiAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj5ibG9jayBjb21tZW50IGJlZ2luczwvc3Bhbj4KKyAgICAgICAgIDxzcGFuIGNsYXNzPSJyb21hbiI+b29wcyEgdGhpcyBpc24ndCBhIGNvbW1lbnQgYW55bW9yZTwvc3Bhbj4gKi8KKzwvcHJlPgorICAgPHA+Q29tbWVudHMgYXJlIG5vdCByZWNvZ25pemVkIHdpdGhpbiBzdHJpbmcgbGl0ZXJhbHMuIAorPHR0PiIvKiZuYnNwO2JsYWgmbmJzcDsqLyI8IS0tIC9AdyAtLT48L3R0PiBpcyB0aGUgc3RyaW5nIGNvbnN0YW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LyombmJzcDtibGFoJm5ic3A7Ki88IS0tIC9AdyAtLT48L3NwYW4+PC9zYW1wPiZyc3F1bzssIG5vdAorYW4gZW1wdHkgc3RyaW5nLgorCisgICA8cD5MaW5lIGNvbW1lbnRzIGFyZSBub3QgaW4gdGhlIDE5ODkgZWRpdGlvbiBvZiB0aGUgQyBzdGFuZGFyZCwgYnV0IHRoZXkKK2FyZSByZWNvZ25pemVkIGJ5IEdDQyBhcyBhbiBleHRlbnNpb24uICBJbiBDKysgYW5kIGluIHRoZSAxOTk5IGVkaXRpb24KK29mIHRoZSBDIHN0YW5kYXJkLCB0aGV5IGFyZSBhbiBvZmZpY2lhbCBwYXJ0IG9mIHRoZSBsYW5ndWFnZS4KKworICAgPHA+U2luY2UgdGhlc2UgdHJhbnNmb3JtYXRpb25zIGhhcHBlbiBiZWZvcmUgYWxsIG90aGVyIHByb2Nlc3NpbmcsIHlvdSBjYW4KK3NwbGl0IGEgbGluZSBtZWNoYW5pY2FsbHkgd2l0aCBiYWNrc2xhc2gtbmV3bGluZSBhbnl3aGVyZS4gIFlvdSBjYW4KK2NvbW1lbnQgb3V0IHRoZSBlbmQgb2YgYSBsaW5lLiAgWW91IGNhbiBjb250aW51ZSBhIGxpbmUgY29tbWVudCBvbnRvIHRoZQorbmV4dCBsaW5lIHdpdGggYmFja3NsYXNoLW5ld2xpbmUuICBZb3UgY2FuIGV2ZW4gc3BsaXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vKjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ki88L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi8vPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9udG8gbXVsdGlwbGUgbGluZXMgd2l0aCBiYWNrc2xhc2gtbmV3bGluZS4gCitGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC9cCisgICAgICoKKyAgICAgKi8gIyAvKgorICAgICAqLyBkZWZpXAorICAgICBuZSBGT1wKKyAgICAgTyAxMFwKKyAgICAgMjAKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5pcyBlcXVpdmFsZW50IHRvIDxjb2RlPiNkZWZpbmUmbmJzcDtGT08mbmJzcDsxMDIwPCEtLSAvQHcgLS0+PC9jb2RlPi4gIEFsbCB0aGVzZSB0cmlja3MgYXJlCitleHRyZW1lbHkgY29uZnVzaW5nIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gY29kZSBpbnRlbmRlZCB0byBiZQorcmVhZGFibGUuCisKKyAgIDxwPlRoZXJlIGlzIG5vIHdheSB0byBwcmV2ZW50IGEgYmFja3NsYXNoIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGZyb20gYmVpbmcKK2ludGVycHJldGVkIGFzIGEgYmFja3NsYXNoLW5ld2xpbmUuICBUaGlzIGNhbm5vdCBhZmZlY3QgYW55IGNvcnJlY3QKK3Byb2dyYW0sIGhvd2V2ZXIuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSW52b2NhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9JbnZvY2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxOTBkZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvSW52b2NhdGlvbi5odG1sCkBAIC0wLDAgKzEsNjY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbnZvY2F0aW9uIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW1wbGVtZW50YXRpb24tRGV0YWlscy5odG1sI0ltcGxlbWVudGF0aW9uLURldGFpbHMiIHRpdGxlPSJJbXBsZW1lbnRhdGlvbiBEZXRhaWxzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIiB0aXRsZT0iRW52aXJvbm1lbnQgVmFyaWFibGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikludm9jYXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbXBsZW1lbnRhdGlvbi1EZXRhaWxzLmh0bWwjSW1wbGVtZW50YXRpb24tRGV0YWlscyI+SW1wbGVtZW50YXRpb24gRGV0YWlsczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMiBJbnZvY2F0aW9uPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW52b2NhdGlvbi0xMjAiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tYW5kLWxpbmUtMTIxIj48L2E+CitNb3N0IG9mdGVuIHdoZW4geW91IHVzZSB0aGUgQyBwcmVwcm9jZXNzb3IgeW91IHdpbGwgbm90IGhhdmUgdG8gaW52b2tlIGl0CitleHBsaWNpdGx5OiB0aGUgQyBjb21waWxlciB3aWxsIGRvIHNvIGF1dG9tYXRpY2FsbHkuICBIb3dldmVyLCB0aGUKK3ByZXByb2Nlc3NvciBpcyBzb21ldGltZXMgdXNlZnVsIG9uIGl0cyBvd24uICBBbGwgdGhlIG9wdGlvbnMgbGlzdGVkCitoZXJlIGFyZSBhbHNvIGFjY2VwdGFibGUgdG8gdGhlIEMgY29tcGlsZXIgYW5kIGhhdmUgdGhlIHNhbWUgbWVhbmluZywKK2V4Y2VwdCB0aGF0IHRoZSBDIGNvbXBpbGVyIGhhcyBkaWZmZXJlbnQgcnVsZXMgZm9yIHNwZWNpZnlpbmcgdGhlIG91dHB1dAorZmlsZS4KKworICAgPHA+PGVtPk5vdGU6PC9lbT4gV2hldGhlciB5b3UgdXNlIHRoZSBwcmVwcm9jZXNzb3IgYnkgd2F5IG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPgorb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmNwcDwvc3Bhbj48L3NhbXA+LCB0aGUgPGRmbj5jb21waWxlciBkcml2ZXI8L2Rmbj4gaXMgcnVuIGZpcnN0LiAgVGhpcworcHJvZ3JhbSdzIHB1cnBvc2UgaXMgdG8gdHJhbnNsYXRlIHlvdXIgY29tbWFuZCBpbnRvIGludm9jYXRpb25zIG9mIHRoZQorcHJvZ3JhbXMgdGhhdCBkbyB0aGUgYWN0dWFsIHdvcmsuICBUaGVpciBjb21tYW5kIGxpbmUgaW50ZXJmYWNlcyBhcmUKK3NpbWlsYXIgYnV0IG5vdCBpZGVudGljYWwgdG8gdGhlIGRvY3VtZW50ZWQgaW50ZXJmYWNlLCBhbmQgbWF5IGNoYW5nZQord2l0aG91dCBub3RpY2UuCisKKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+CisgICA8cD5UaGUgQyBwcmVwcm9jZXNzb3IgZXhwZWN0cyB0d28gZmlsZSBuYW1lcyBhcyBhcmd1bWVudHMsIDx2YXI+aW5maWxlPC92YXI+IGFuZAorPHZhcj5vdXRmaWxlPC92YXI+LiAgVGhlIHByZXByb2Nlc3NvciByZWFkcyA8dmFyPmluZmlsZTwvdmFyPiB0b2dldGhlciB3aXRoIGFueQorb3RoZXIgZmlsZXMgaXQgc3BlY2lmaWVzIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEFsbCB0aGUgb3V0cHV0IGdlbmVyYXRlZAorYnkgdGhlIGNvbWJpbmVkIGlucHV0IGZpbGVzIGlzIHdyaXR0ZW4gaW4gPHZhcj5vdXRmaWxlPC92YXI+LgorCisgICA8cD5FaXRoZXIgPHZhcj5pbmZpbGU8L3Zhcj4gb3IgPHZhcj5vdXRmaWxlPC92YXI+IG1heSBiZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tPC9zcGFuPjwvc2FtcD4sIHdoaWNoIGFzCis8dmFyPmluZmlsZTwvdmFyPiBtZWFucyB0byByZWFkIGZyb20gc3RhbmRhcmQgaW5wdXQgYW5kIGFzIDx2YXI+b3V0ZmlsZTwvdmFyPgorbWVhbnMgdG8gd3JpdGUgdG8gc3RhbmRhcmQgb3V0cHV0LiAgQWxzbywgaWYgZWl0aGVyIGZpbGUgaXMgb21pdHRlZCwgaXQKK21lYW5zIHRoZSBzYW1lIGFzIGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi08L3NwYW4+PC9zYW1wPiBoYWQgYmVlbiBzcGVjaWZpZWQgZm9yIHRoYXQgZmlsZS4KKworICAgPHA+VW5sZXNzIG90aGVyd2lzZSBub3RlZCwgb3IgdGhlIG9wdGlvbiBlbmRzIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+PTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYWxsIG9wdGlvbnMKK3doaWNoIHRha2UgYW4gYXJndW1lbnQgbWF5IGhhdmUgdGhhdCBhcmd1bWVudCBhcHBlYXIgZWl0aGVyIGltbWVkaWF0ZWx5CithZnRlciB0aGUgb3B0aW9uLCBvciB3aXRoIGEgc3BhY2UgYmV0d2VlbiBvcHRpb24gYW5kIGFyZ3VtZW50OgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUlmb288L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUkgZm9vPC9zcGFuPjwvc2FtcD4gaGF2ZSB0aGUgc2FtZSBlZmZlY3QuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdyb3VwaW5nLW9wdGlvbnMtMTIyIj48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLWdyb3VwaW5nLTEyMyI+PC9hPk1hbnkgb3B0aW9ucyBoYXZlIG11bHRpLWxldHRlciBuYW1lczsgdGhlcmVmb3JlIG11bHRpcGxlIHNpbmdsZS1sZXR0ZXIKK29wdGlvbnMgbWF5IDxlbT5ub3Q8L2VtPiBiZSBncm91cGVkOiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZE08L3NwYW4+PC9zYW1wPiBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1kJm5ic3A7LU08L3NwYW4+PC9zYW1wPiZyc3F1bzs8IS0tIC9AdyAtLT4uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtMTI0Ij48L2E+CisKKzwhLS0gQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIENQUCBhbmQgR0NDIG1hbnVhbHMuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgZ2NjLnRleGkuIC0tPgorPCEtLSAgLS0+Cis8IS0tIE9wdGlvbnMgYWZmZWN0aW5nIHRoZSBwcmVwcm9jZXNzb3IgLS0+Cis8IS0tICAtLT4KKzwhLS0gSWYgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIHdpdGggdGhlIGZsYWcgYGBjcHBtYW51YWwnJyBzZXQsIGl0IGlzIC0tPgorPCEtLSBmb3JtYXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgQ1BQIG1hbnVhbDsgb3RoZXJ3aXNlIHRoZSBtYWluIEdDQyBtYW51YWwuIC0tPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LUQgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1ELTEyNSI+PC9hPlByZWRlZmluZSA8dmFyPm5hbWU8L3Zhcj4gYXMgYSBtYWNybywgd2l0aCBkZWZpbml0aW9uIDxjb2RlPjE8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUQgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj5kZWZpbml0aW9uPC92YXI+PGRkPlRoZSBjb250ZW50cyBvZiA8dmFyPmRlZmluaXRpb248L3Zhcj4gYXJlIHRva2VuaXplZCBhbmQgcHJvY2Vzc2VkIGFzIGlmCit0aGV5IGFwcGVhcmVkIGR1cmluZyB0cmFuc2xhdGlvbiBwaGFzZSB0aHJlZSBpbiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2RlZmluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOworZGlyZWN0aXZlLiAgSW4gcGFydGljdWxhciwgdGhlIGRlZmluaXRpb24gd2lsbCBiZSB0cnVuY2F0ZWQgYnkKK2VtYmVkZGVkIG5ld2xpbmUgY2hhcmFjdGVycy4KKworICAgICA8cD5JZiB5b3UgYXJlIGludm9raW5nIHRoZSBwcmVwcm9jZXNzb3IgZnJvbSBhIHNoZWxsIG9yIHNoZWxsLWxpa2UKK3Byb2dyYW0geW91IG1heSBuZWVkIHRvIHVzZSB0aGUgc2hlbGwncyBxdW90aW5nIHN5bnRheCB0byBwcm90ZWN0CitjaGFyYWN0ZXJzIHN1Y2ggYXMgc3BhY2VzIHRoYXQgaGF2ZSBhIG1lYW5pbmcgaW4gdGhlIHNoZWxsIHN5bnRheC4KKworICAgICA8cD5JZiB5b3Ugd2lzaCB0byBkZWZpbmUgYSBmdW5jdGlvbi1saWtlIG1hY3JvIG9uIHRoZSBjb21tYW5kIGxpbmUsIHdyaXRlCitpdHMgYXJndW1lbnQgbGlzdCB3aXRoIHN1cnJvdW5kaW5nIHBhcmVudGhlc2VzIGJlZm9yZSB0aGUgZXF1YWxzIHNpZ24KKyhpZiBhbnkpLiAgUGFyZW50aGVzZXMgYXJlIG1lYW5pbmdmdWwgdG8gbW9zdCBzaGVsbHMsIHNvIHlvdSB3aWxsIG5lZWQKK3RvIHF1b3RlIHRoZSBvcHRpb24uICBXaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zaDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y3NoPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRCc8L3NwYW4+PHZhcj5uYW1lPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+KDwvc3Bhbj48dmFyPmFyZ3M8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+PC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+KT08L3NwYW4+PHZhcj5kZWZpbml0aW9uPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+Jzwvc3Bhbj48L3NhbXA+IHdvcmtzLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1EPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1VPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlciB0aGV5CithcmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIEFsbCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW1hY3JvcyA8L3NwYW4+PHZhcj5maWxlPC92YXI+PC9zYW1wPiBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pbmNsdWRlIDwvc3Bhbj48dmFyPmZpbGU8L3Zhcj48L3NhbXA+IG9wdGlvbnMgYXJlIHByb2Nlc3NlZCBhZnRlciBhbGwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1EPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1VPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1VIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtVS0xMjYiPjwvYT5DYW5jZWwgYW55IHByZXZpb3VzIGRlZmluaXRpb24gb2YgPHZhcj5uYW1lPC92YXI+LCBlaXRoZXIgYnVpbHQgaW4gb3IKK3Byb3ZpZGVkIHdpdGggYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi11bmRlZjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdW5kZWYtMTI3Ij48L2E+RG8gbm90IHByZWRlZmluZSBhbnkgc3lzdGVtLXNwZWNpZmljIG9yIEdDQy1zcGVjaWZpYyBtYWNyb3MuICBUaGUKK3N0YW5kYXJkIHByZWRlZmluZWQgbWFjcm9zIHJlbWFpbiBkZWZpbmVkLiAKK1NlZSA8YSBocmVmPSJTdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1N0YW5kYXJkLVByZWRlZmluZWQtTWFjcm9zIj5TdGFuZGFyZCBQcmVkZWZpbmVkIE1hY3JvczwvYT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tSSA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtSS0xMjgiPjwvYT5BZGQgdGhlIGRpcmVjdG9yeSA8dmFyPmRpcjwvdmFyPiB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZAorZm9yIGhlYWRlciBmaWxlcy4gCitTZWUgPGEgaHJlZj0iU2VhcmNoLVBhdGguaHRtbCNTZWFyY2gtUGF0aCI+U2VhcmNoIFBhdGg8L2E+LiAKK0RpcmVjdG9yaWVzIG5hbWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgc3RhbmRhcmQKK3N5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzLiAgSWYgdGhlIGRpcmVjdG9yeSA8dmFyPmRpcjwvdmFyPiBpcyBhIHN0YW5kYXJkCitzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnksIHRoZSBvcHRpb24gaXMgaWdub3JlZCB0byBlbnN1cmUgdGhhdCB0aGUKK2RlZmF1bHQgc2VhcmNoIG9yZGVyIGZvciBzeXN0ZW0gZGlyZWN0b3JpZXMgYW5kIHRoZSBzcGVjaWFsIHRyZWF0bWVudAorb2Ygc3lzdGVtIGhlYWRlcnMgYXJlIG5vdCBkZWZlYXRlZAorKHNlZSA8YSBocmVmPSJTeXN0ZW0tSGVhZGVycy5odG1sI1N5c3RlbS1IZWFkZXJzIj5TeXN0ZW0gSGVhZGVyczwvYT4pCisuIAorSWYgPHZhcj5kaXI8L3Zhcj4gYmVnaW5zIHdpdGggPGNvZGU+PTwvY29kZT4sIHRoZW4gdGhlIDxjb2RlPj08L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQKK2J5IHRoZSBzeXNyb290IHByZWZpeDsgc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3lzcm9vdDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1vIDwvY29kZT48dmFyPmZpbGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtby0xMjkiPjwvYT5Xcml0ZSBvdXRwdXQgdG8gPHZhcj5maWxlPC92YXI+LiAgVGhpcyBpcyB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIDx2YXI+ZmlsZTwvdmFyPgorYXMgdGhlIHNlY29uZCBub24tb3B0aW9uIGFyZ3VtZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jcHA8L3NwYW4+PC9zYW1wPi4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiBoYXMgYQorZGlmZmVyZW50IGludGVycHJldGF0aW9uIG9mIGEgc2Vjb25kIG5vbi1vcHRpb24gYXJndW1lbnQsIHNvIHlvdSBtdXN0Cit1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW88L3NwYW4+PC9zYW1wPiB0byBzcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XYWxsLTEzMCI+PC9hPlR1cm5zIG9uIGFsbCBvcHRpb25hbCB3YXJuaW5ncyB3aGljaCBhcmUgZGVzaXJhYmxlIGZvciBub3JtYWwgY29kZS4gCitBdCBwcmVzZW50IHRoaXMgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdjb21tZW50PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdHJpZ3JhcGhzPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV211bHRpY2hhcjwvc3Bhbj48L3NhbXA+IGFuZCBhIHdhcm5pbmcgYWJvdXQgaW50ZWdlciBwcm9tb3Rpb24gY2F1c2luZyBhCitjaGFuZ2Ugb2Ygc2lnbiBpbiA8Y29kZT4jaWY8L2NvZGU+IGV4cHJlc3Npb25zLiAgTm90ZSB0aGF0IG1hbnkgb2YgdGhlCitwcmVwcm9jZXNzb3IncyB3YXJuaW5ncyBhcmUgb24gYnkgZGVmYXVsdCBhbmQgaGF2ZSBubyBvcHRpb25zIHRvCitjb250cm9sIHRoZW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2NvbW1lbnQ8L2NvZGU+PGR0Pjxjb2RlPi1XY29tbWVudHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdjb21tZW50LTEzMSI+PC9hPjxhIG5hbWU9ImluZGV4LVdjb21tZW50cy0xMzIiPjwvYT5XYXJuIHdoZW5ldmVyIGEgY29tbWVudC1zdGFydCBzZXF1ZW5jZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi8qPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgaW4gYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi8qPC9zcGFuPjwvc2FtcD4mcnNxdW87Citjb21tZW50LCBvciB3aGVuZXZlciBhIGJhY2tzbGFzaC1uZXdsaW5lIGFwcGVhcnMgaW4gYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi8vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1lbnQuIAorKEJvdGggZm9ybXMgaGF2ZSB0aGUgc2FtZSBlZmZlY3QuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd0cmlncmFwaHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd0cmlncmFwaHMtMTMzIj48L2E+PGEgbmFtZT0iV3RyaWdyYXBocyI+PC9hPk1vc3QgdHJpZ3JhcGhzIGluIGNvbW1lbnRzIGNhbm5vdCBhZmZlY3QgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uIAorSG93ZXZlciwgYSB0cmlncmFwaCB0aGF0IHdvdWxkIGZvcm0gYW4gZXNjYXBlZCBuZXdsaW5lICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj8/Lzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdAordGhlIGVuZCBvZiBhIGxpbmUpIGNhbiwgYnkgY2hhbmdpbmcgd2hlcmUgdGhlIGNvbW1lbnQgYmVnaW5zIG9yIGVuZHMuIAorVGhlcmVmb3JlLCBvbmx5IHRyaWdyYXBocyB0aGF0IHdvdWxkIGZvcm0gZXNjYXBlZCBuZXdsaW5lcyBwcm9kdWNlCit3YXJuaW5ncyBpbnNpZGUgYSBjb21tZW50LgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGltcGxpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4gIElmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4gaXMgbm90CitnaXZlbiwgdGhpcyBvcHRpb24gaXMgc3RpbGwgZW5hYmxlZCB1bmxlc3MgdHJpZ3JhcGhzIGFyZSBlbmFibGVkLiAgVG8KK2dldCB0cmlncmFwaCBjb252ZXJzaW9uIHdpdGhvdXQgd2FybmluZ3MsIGJ1dCBnZXQgdGhlIG90aGVyCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+IHdhcm5pbmdzLCB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tdHJpZ3JhcGhzIC1XYWxsIC1Xbm8tdHJpZ3JhcGhzPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd0cmFkaXRpb25hbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3RyYWRpdGlvbmFsLTEzNCI+PC9hPldhcm4gYWJvdXQgY2VydGFpbiBjb25zdHJ1Y3RzIHRoYXQgYmVoYXZlIGRpZmZlcmVudGx5IGluIHRyYWRpdGlvbmFsIGFuZAorSVNPIEMuICBBbHNvIHdhcm4gYWJvdXQgSVNPIEMgY29uc3RydWN0cyB0aGF0IGhhdmUgbm8gdHJhZGl0aW9uYWwgQworZXF1aXZhbGVudCwgYW5kIHByb2JsZW1hdGljIGNvbnN0cnVjdHMgd2hpY2ggc2hvdWxkIGJlIGF2b2lkZWQuIAorU2VlIDxhIGhyZWY9IlRyYWRpdGlvbmFsLU1vZGUuaHRtbCNUcmFkaXRpb25hbC1Nb2RlIj5UcmFkaXRpb25hbCBNb2RlPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdW5kZWY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd1bmRlZi0xMzUiPjwvYT5XYXJuIHdoZW5ldmVyIGFuIGlkZW50aWZpZXIgd2hpY2ggaXMgbm90IGEgbWFjcm8gaXMgZW5jb3VudGVyZWQgaW4gYW4KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSwgb3V0c2lkZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRlZmluZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBTdWNoIGlkZW50aWZpZXJzIGFyZQorcmVwbGFjZWQgd2l0aCB6ZXJvLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd1bnVzZWQtbWFjcm9zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XdW51c2VkXzAwMmRtYWNyb3MtMTM2Ij48L2E+V2FybiBhYm91dCBtYWNyb3MgZGVmaW5lZCBpbiB0aGUgbWFpbiBmaWxlIHRoYXQgYXJlIHVudXNlZC4gIEEgbWFjcm8KK2lzIDxkZm4+dXNlZDwvZGZuPiBpZiBpdCBpcyBleHBhbmRlZCBvciB0ZXN0ZWQgZm9yIGV4aXN0ZW5jZSBhdCBsZWFzdCBvbmNlLiAKK1RoZSBwcmVwcm9jZXNzb3Igd2lsbCBhbHNvIHdhcm4gaWYgdGhlIG1hY3JvIGhhcyBub3QgYmVlbiB1c2VkIGF0IHRoZQordGltZSBpdCBpcyByZWRlZmluZWQgb3IgdW5kZWZpbmVkLgorCisgICAgIDxwPkJ1aWx0LWluIG1hY3JvcywgbWFjcm9zIGRlZmluZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIG1hY3JvcworZGVmaW5lZCBpbiBpbmNsdWRlIGZpbGVzIGFyZSBub3Qgd2FybmVkIGFib3V0LgorCisgICAgIDxwPjxlbT5Ob3RlOjwvZW0+IElmIGEgbWFjcm8gaXMgYWN0dWFsbHkgdXNlZCwgYnV0IG9ubHkgdXNlZCBpbiBza2lwcGVkCitjb25kaXRpb25hbCBibG9ja3MsIHRoZW4gQ1BQIHdpbGwgcmVwb3J0IGl0IGFzIHVudXNlZC4gIFRvIGF2b2lkIHRoZQord2FybmluZyBpbiBzdWNoIGEgY2FzZSwgeW91IG1pZ2h0IGltcHJvdmUgdGhlIHNjb3BlIG9mIHRoZSBtYWNybydzCitkZWZpbml0aW9uIGJ5LCBmb3IgZXhhbXBsZSwgbW92aW5nIGl0IGludG8gdGhlIGZpcnN0IHNraXBwZWQgYmxvY2suIAorQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHByb3ZpZGUgYSBkdW1teSB1c2Ugd2l0aCBzb21ldGhpbmcgbGlrZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjaWYgZGVmaW5lZCB0aGVfbWFjcm9fY2F1c2luZ190aGVfd2FybmluZworICAgICAgICAgICNlbmRpZgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+LVdlbmRpZi1sYWJlbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdlbmRpZl8wMDJkbGFiZWxzLTEzNyI+PC9hPldhcm4gd2hlbmV2ZXIgYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZWxzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciBhbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbmRpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgZm9sbG93ZWQgYnkgdGV4dC4gCitUaGlzIHVzdWFsbHkgaGFwcGVucyBpbiBjb2RlIG9mIHRoZSBmb3JtCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2lmIEZPTworICAgICAgICAgIC4uLgorICAgICAgICAgICNlbHNlIEZPTworICAgICAgICAgIC4uLgorICAgICAgICAgICNlbmRpZiBGT08KKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZSBzZWNvbmQgYW5kIHRoaXJkIDxjb2RlPkZPTzwvY29kZT4gc2hvdWxkIGJlIGluIGNvbW1lbnRzLCBidXQgb2Z0ZW4gYXJlIG5vdAoraW4gb2xkZXIgcHJvZ3JhbXMuICBUaGlzIHdhcm5pbmcgaXMgb24gYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XZXJyb3I8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdlcnJvci0xMzgiPjwvYT5NYWtlIGFsbCB3YXJuaW5ncyBpbnRvIGhhcmQgZXJyb3JzLiAgU291cmNlIGNvZGUgd2hpY2ggdHJpZ2dlcnMgd2FybmluZ3MKK3dpbGwgYmUgcmVqZWN0ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N5c3RlbS1oZWFkZXJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc3lzdGVtXzAwMmRoZWFkZXJzLTEzOSI+PC9hPklzc3VlIHdhcm5pbmdzIGZvciBjb2RlIGluIHN5c3RlbSBoZWFkZXJzLiAgVGhlc2UgYXJlIG5vcm1hbGx5IHVuaGVscGZ1bAoraW4gZmluZGluZyBidWdzIGluIHlvdXIgb3duIGNvZGUsIHRoZXJlZm9yZSBzdXBwcmVzc2VkLiAgSWYgeW91IGFyZQorcmVzcG9uc2libGUgZm9yIHRoZSBzeXN0ZW0gbGlicmFyeSwgeW91IG1heSB3YW50IHRvIHNlZSB0aGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXctMTQwIj48L2E+U3VwcHJlc3MgYWxsIHdhcm5pbmdzLCBpbmNsdWRpbmcgdGhvc2Ugd2hpY2ggR05VIENQUCBpc3N1ZXMgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1wZWRhbnRpYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcGVkYW50aWMtMTQxIj48L2E+SXNzdWUgYWxsIHRoZSBtYW5kYXRvcnkgZGlhZ25vc3RpY3MgbGlzdGVkIGluIHRoZSBDIHN0YW5kYXJkLiAgU29tZSBvZgordGhlbSBhcmUgbGVmdCBvdXQgYnkgZGVmYXVsdCwgc2luY2UgdGhleSB0cmlnZ2VyIGZyZXF1ZW50bHkgb24gaGFybWxlc3MKK2NvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcGVkYW50aWMtZXJyb3JzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wZWRhbnRpY18wMDJkZXJyb3JzLTE0MiI+PC9hPklzc3VlIGFsbCB0aGUgbWFuZGF0b3J5IGRpYWdub3N0aWNzLCBhbmQgbWFrZSBhbGwgbWFuZGF0b3J5IGRpYWdub3N0aWNzCitpbnRvIGVycm9ycy4gIFRoaXMgaW5jbHVkZXMgbWFuZGF0b3J5IGRpYWdub3N0aWNzIHRoYXQgR0NDIGlzc3Vlcword2l0aG91dCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBidXQgdHJlYXRzIGFzIHdhcm5pbmdzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LU0tMTQzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2JtYWtlXzAwN2QtMTQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGVwZW5kZW5jaWVzXzAwMmMtXzAwNDBjb21tYW5kXzAwN2JtYWtlXzAwN2QtMTQ1Ij48L2E+SW5zdGVhZCBvZiBvdXRwdXR0aW5nIHRoZSByZXN1bHQgb2YgcHJlcHJvY2Vzc2luZywgb3V0cHV0IGEgcnVsZQorc3VpdGFibGUgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5tYWtlPC9zcGFuPjwvc2FtcD4gZGVzY3JpYmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBtYWluCitzb3VyY2UgZmlsZS4gIFRoZSBwcmVwcm9jZXNzb3Igb3V0cHV0cyBvbmUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm1ha2U8L3NwYW4+PC9zYW1wPiBydWxlIGNvbnRhaW5pbmcKK3RoZSBvYmplY3QgZmlsZSBuYW1lIGZvciB0aGF0IHNvdXJjZSBmaWxlLCBhIGNvbG9uLCBhbmQgdGhlIG5hbWVzIG9mIGFsbAordGhlIGluY2x1ZGVkIGZpbGVzLCBpbmNsdWRpbmcgdGhvc2UgY29taW5nIGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWluY2x1ZGU8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWltYWNyb3M8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKworICAgICA8cD5Vbmxlc3Mgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1UPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1RPC9zcGFuPjwvc2FtcD4pLCB0aGUKK29iamVjdCBmaWxlIG5hbWUgY29uc2lzdHMgb2YgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHdpdGggYW55CitzdWZmaXggcmVwbGFjZWQgd2l0aCBvYmplY3QgZmlsZSBzdWZmaXggYW5kIHdpdGggYW55IGxlYWRpbmcgZGlyZWN0b3J5CitwYXJ0cyByZW1vdmVkLiAgSWYgdGhlcmUgYXJlIG1hbnkgaW5jbHVkZWQgZmlsZXMgdGhlbiB0aGUgcnVsZSBpcworc3BsaXQgaW50byBzZXZlcmFsIGxpbmVzIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDwvc3Bhbj48L3NhbXA+JnJzcXVvOy1uZXdsaW5lLiAgVGhlIHJ1bGUgaGFzIG5vCitjb21tYW5kcy4KKworICAgICA8cD5UaGlzIG9wdGlvbiBkb2VzIG5vdCBzdXBwcmVzcyB0aGUgcHJlcHJvY2Vzc29yJ3MgZGVidWcgb3V0cHV0LCBzdWNoIGFzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZE08L3NwYW4+PC9zYW1wPi4gIFRvIGF2b2lkIG1peGluZyBzdWNoIGRlYnVnIG91dHB1dCB3aXRoIHRoZSBkZXBlbmRlbmN5CitydWxlcyB5b3Ugc2hvdWxkIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZSB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTUY8L3NwYW4+PC9zYW1wPiwgb3IgdXNlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGxpa2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkRFUEVOREVOQ0lFU19PVVRQVVQ8L3NwYW4+PC9zYW1wPiAoc2VlIDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPikuICBEZWJ1ZyBvdXRwdXQKK3dpbGwgc3RpbGwgYmUgc2VudCB0byB0aGUgcmVndWxhciBvdXRwdXQgc3RyZWFtIGFzIG5vcm1hbC4KKworICAgICA8cD5QYXNzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NPC9zcGFuPjwvc2FtcD4gdG8gdGhlIGRyaXZlciBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4sIGFuZCBzdXBwcmVzc2VzCit3YXJuaW5ncyB3aXRoIGFuIGltcGxpY2l0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi13PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tTU08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LU1NLTE0NiI+PC9hPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU08L3NwYW4+PC9zYW1wPiBidXQgZG8gbm90IG1lbnRpb24gaGVhZGVyIGZpbGVzIHRoYXQgYXJlIGZvdW5kIGluCitzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzLCBub3IgaGVhZGVyIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkLAorZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBzdWNoIGEgaGVhZGVyLgorCisgICAgIDxwPlRoaXMgaW1wbGllcyB0aGF0IHRoZSBjaG9pY2Ugb2YgYW5nbGUgYnJhY2tldHMgb3IgZG91YmxlIHF1b3RlcyBpbiBhbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgZG9lcyBub3QgaW4gaXRzZWxmIGRldGVybWluZSB3aGV0aGVyIHRoYXQKK2hlYWRlciB3aWxsIGFwcGVhciBpbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTU08L3NwYW4+PC9zYW1wPiBkZXBlbmRlbmN5IG91dHB1dC4gIFRoaXMgaXMgYQorc2xpZ2h0IGNoYW5nZSBpbiBzZW1hbnRpY3MgZnJvbSBHQ0MgdmVyc2lvbnMgMy4wIGFuZCBlYXJsaWVyLgorCisgICAgIDxwPjxhIG5hbWU9ImRhc2hNRiI+PC9hPjxicj48ZHQ+PGNvZGU+LU1GIDwvY29kZT48dmFyPmZpbGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtTUYtMTQ3Ij48L2E+V2hlbiB1c2VkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU08L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTU08L3NwYW4+PC9zYW1wPiwgc3BlY2lmaWVzIGEKK2ZpbGUgdG8gd3JpdGUgdGhlIGRlcGVuZGVuY2llcyB0by4gIElmIG5vIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRjwvc3Bhbj48L3NhbXA+IHN3aXRjaCBpcyBnaXZlbgordGhlIHByZXByb2Nlc3NvciBzZW5kcyB0aGUgcnVsZXMgdG8gdGhlIHNhbWUgcGxhY2UgaXQgd291bGQgaGF2ZSBzZW50CitwcmVwcm9jZXNzZWQgb3V0cHV0LgorCisgICAgIDxwPldoZW4gdXNlZCB3aXRoIHRoZSBkcml2ZXIgb3B0aW9ucyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTUQ8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTU1EPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTUY8L3NwYW4+PC9zYW1wPiBvdmVycmlkZXMgdGhlIGRlZmF1bHQgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1NRzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTUctMTQ4Ij48L2E+SW4gY29uanVuY3Rpb24gd2l0aCBhbiBvcHRpb24gc3VjaCBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+IHJlcXVlc3RpbmcKK2RlcGVuZGVuY3kgZ2VuZXJhdGlvbiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1HPC9zcGFuPjwvc2FtcD4gYXNzdW1lcyBtaXNzaW5nIGhlYWRlciBmaWxlcyBhcmUKK2dlbmVyYXRlZCBmaWxlcyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBkZXBlbmRlbmN5IGxpc3Qgd2l0aG91dCByYWlzaW5nCithbiBlcnJvci4gIFRoZSBkZXBlbmRlbmN5IGZpbGVuYW1lIGlzIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlCis8Y29kZT4jaW5jbHVkZTwvY29kZT4gZGlyZWN0aXZlIHdpdGhvdXQgcHJlcGVuZGluZyBhbnkgcGF0aC4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRzwvc3Bhbj48L3NhbXA+CithbHNvIHN1cHByZXNzZXMgcHJlcHJvY2Vzc2VkIG91dHB1dCwgYXMgYSBtaXNzaW5nIGhlYWRlciBmaWxlIHJlbmRlcnMKK3RoaXMgdXNlbGVzcy4KKworICAgICA8cD5UaGlzIGZlYXR1cmUgaXMgdXNlZCBpbiBhdXRvbWF0aWMgdXBkYXRpbmcgb2YgbWFrZWZpbGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU1QPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1NUC0xNDkiPjwvYT5UaGlzIG9wdGlvbiBpbnN0cnVjdHMgQ1BQIHRvIGFkZCBhIHBob255IHRhcmdldCBmb3IgZWFjaCBkZXBlbmRlbmN5CitvdGhlciB0aGFuIHRoZSBtYWluIGZpbGUsIGNhdXNpbmcgZWFjaCB0byBkZXBlbmQgb24gbm90aGluZy4gIFRoZXNlCitkdW1teSBydWxlcyB3b3JrIGFyb3VuZCBlcnJvcnMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm1ha2U8L3NwYW4+PC9zYW1wPiBnaXZlcyBpZiB5b3UgcmVtb3ZlIGhlYWRlcgorZmlsZXMgd2l0aG91dCB1cGRhdGluZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPk1ha2VmaWxlPC9zcGFuPjwvc2FtcD4gdG8gbWF0Y2guCisKKyAgICAgPHA+VGhpcyBpcyB0eXBpY2FsIG91dHB1dDoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB0ZXN0Lm86IHRlc3QuYyB0ZXN0LmgKKyAgICAgICAgICAKKyAgICAgICAgICB0ZXN0Lmg6Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4tTVQgPC9jb2RlPjx2YXI+dGFyZ2V0PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LU1ULTE1MCI+PC9hPgorQ2hhbmdlIHRoZSB0YXJnZXQgb2YgdGhlIHJ1bGUgZW1pdHRlZCBieSBkZXBlbmRlbmN5IGdlbmVyYXRpb24uICBCeQorZGVmYXVsdCBDUFAgdGFrZXMgdGhlIG5hbWUgb2YgdGhlIG1haW4gaW5wdXQgZmlsZSwgZGVsZXRlcyBhbnkKK2RpcmVjdG9yeSBjb21wb25lbnRzIGFuZCBhbnkgZmlsZSBzdWZmaXggc3VjaCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKK2FwcGVuZHMgdGhlIHBsYXRmb3JtJ3MgdXN1YWwgb2JqZWN0IHN1ZmZpeC4gIFRoZSByZXN1bHQgaXMgdGhlIHRhcmdldC4KKworICAgICA8cD5BbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTVQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gd2lsbCBzZXQgdGhlIHRhcmdldCB0byBiZSBleGFjdGx5IHRoZSBzdHJpbmcgeW91CitzcGVjaWZ5LiAgSWYgeW91IHdhbnQgbXVsdGlwbGUgdGFyZ2V0cywgeW91IGNhbiBzcGVjaWZ5IHRoZW0gYXMgYSBzaW5nbGUKK2FyZ3VtZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NVDwvc3Bhbj48L3NhbXA+LCBvciB1c2UgbXVsdGlwbGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1UPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1UJm5ic3A7JyQob2JqcGZ4KWZvby5vJzwhLS0gL0B3IC0tPjwvc3Bhbj48L3NhbXA+IG1pZ2h0IGdpdmUKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAkKG9ianBmeClmb28ubzogZm9vLmMKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPi1NUSA8L2NvZGU+PHZhcj50YXJnZXQ8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtTVEtMTUxIj48L2E+CitTYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NVDwvc3Bhbj48L3NhbXA+LCBidXQgaXQgcXVvdGVzIGFueSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBzcGVjaWFsIHRvCitNYWtlLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1RJm5ic3A7JyQob2JqcGZ4KWZvby5vJzwhLS0gL0B3IC0tPjwvc3Bhbj48L3NhbXA+IGdpdmVzCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgJCQob2JqcGZ4KWZvby5vOiBmb28uYworPC9wcmU+CisgICAgIDxwPlRoZSBkZWZhdWx0IHRhcmdldCBpcyBhdXRvbWF0aWNhbGx5IHF1b3RlZCwgYXMgaWYgaXQgd2VyZSBnaXZlbiB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTVE8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1NRDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTUQtMTUyIj48L2E+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1EPC9zcGFuPjwvc2FtcD4gaXMgZXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTSAtTUYgPC9zcGFuPjx2YXI+ZmlsZTwvdmFyPjwvc2FtcD4sIGV4Y2VwdCB0aGF0Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRTwvc3Bhbj48L3NhbXA+IGlzIG5vdCBpbXBsaWVkLiAgVGhlIGRyaXZlciBkZXRlcm1pbmVzIDx2YXI+ZmlsZTwvdmFyPiBiYXNlZCBvbgord2hldGhlciBhbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBnaXZlbi4gIElmIGl0IGlzLCB0aGUgZHJpdmVyIHVzZXMgaXRzCithcmd1bWVudCBidXQgd2l0aCBhIHN1ZmZpeCBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmQ8L3NwYW4+PC9zYW1wPiwgb3RoZXJ3aXNlIGl0IHRha2VzIHRoZSBuYW1lCitvZiB0aGUgaW5wdXQgZmlsZSwgcmVtb3ZlcyBhbnkgZGlyZWN0b3J5IGNvbXBvbmVudHMgYW5kIHN1ZmZpeCwgYW5kCithcHBsaWVzIGEgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kPC9zcGFuPjwvc2FtcD4gc3VmZml4LgorCisgICAgIDxwPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRDwvc3Bhbj48L3NhbXA+IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRTwvc3Bhbj48L3NhbXA+LCBhbnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGlzIHVuZGVyc3Rvb2QgdG8gc3BlY2lmeSB0aGUgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZQorKHNlZSA8YSBocmVmPSJkYXNoTUYuaHRtbCNkYXNoTUYiPi1NRjwvYT4pLCBidXQgaWYgdXNlZCB3aXRob3V0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4sIGVhY2ggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW88L3NwYW4+PC9zYW1wPgoraXMgdW5kZXJzdG9vZCB0byBzcGVjaWZ5IGEgdGFyZ2V0IG9iamVjdCBmaWxlLgorCisgICAgIDxwPlNpbmNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4gaXMgbm90IGltcGxpZWQsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRDwvc3Bhbj48L3NhbXA+IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlCithIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGUgYXMgYSBzaWRlLWVmZmVjdCBvZiB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1NTUQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LU1NRC0xNTMiPjwvYT5MaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRDwvc3Bhbj48L3NhbXA+IGV4Y2VwdCBtZW50aW9uIG9ubHkgdXNlciBoZWFkZXIgZmlsZXMsIG5vdCBzeXN0ZW0KK2hlYWRlciBmaWxlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi14IGM8L2NvZGU+PGR0Pjxjb2RlPi14IGMrKzwvY29kZT48ZHQ+PGNvZGU+LXggb2JqZWN0aXZlLWM8L2NvZGU+PGR0Pjxjb2RlPi14IGFzc2VtYmxlci13aXRoLWNwcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgteC0xNTQiPjwvYT5TcGVjaWZ5IHRoZSBzb3VyY2UgbGFuZ3VhZ2U6IEMsIEMrKywgT2JqZWN0aXZlLUMsIG9yIGFzc2VtYmx5LiAgVGhpcyBoYXMKK25vdGhpbmcgdG8gZG8gd2l0aCBzdGFuZGFyZHMgY29uZm9ybWFuY2Ugb3IgZXh0ZW5zaW9uczsgaXQgbWVyZWx5CitzZWxlY3RzIHdoaWNoIGJhc2Ugc3ludGF4IHRvIGV4cGVjdC4gIElmIHlvdSBnaXZlIG5vbmUgb2YgdGhlc2Ugb3B0aW9ucywKK2NwcCB3aWxsIGRlZHVjZSB0aGUgbGFuZ3VhZ2UgZnJvbSB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBzb3VyY2UgZmlsZToKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5tPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5TPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgU29tZSBvdGhlciBjb21tb24KK2V4dGVuc2lvbnMgZm9yIEMrKyBhbmQgYXNzZW1ibHkgYXJlIGFsc28gcmVjb2duaXplZC4gIElmIGNwcCBkb2VzIG5vdAorcmVjb2duaXplIHRoZSBleHRlbnNpb24sIGl0IHdpbGwgdHJlYXQgdGhlIGZpbGUgYXMgQzsgdGhpcyBpcyB0aGUgbW9zdAorZ2VuZXJpYyBtb2RlLgorCisgICAgIDxwPjxlbT5Ob3RlOjwvZW0+IFByZXZpb3VzIHZlcnNpb25zIG9mIGNwcCBhY2NlcHRlZCBhIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sYW5nPC9zcGFuPjwvc2FtcD4gb3B0aW9uCit3aGljaCBzZWxlY3RlZCBib3RoIHRoZSBsYW5ndWFnZSBhbmQgdGhlIHN0YW5kYXJkcyBjb25mb3JtYW5jZSBsZXZlbC4gCitUaGlzIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLCBiZWNhdXNlIGl0IGNvbmZsaWN0cyB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+CitvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tc3RkPTwvY29kZT48dmFyPnN0YW5kYXJkPC92YXI+PGR0Pjxjb2RlPi1hbnNpPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1hbnNpLTE1NSI+PC9hPjxhIG5hbWU9ImluZGV4LXN0ZF8wMDNkLTE1NiI+PC9hPlNwZWNpZnkgdGhlIHN0YW5kYXJkIHRvIHdoaWNoIHRoZSBjb2RlIHNob3VsZCBjb25mb3JtLiAgQ3VycmVudGx5IENQUAora25vd3MgYWJvdXQgQyBhbmQgQysrIHN0YW5kYXJkczsgb3RoZXJzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorCisgICAgIDxwPjx2YXI+c3RhbmRhcmQ8L3Zhcj4KK21heSBiZSBvbmUgb2Y6CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmM5MDwvY29kZT48ZHQ+PGNvZGU+Yzg5PC9jb2RlPjxkdD48Y29kZT5pc285ODk5OjE5OTA8L2NvZGU+PGRkPlRoZSBJU08gQyBzdGFuZGFyZCBmcm9tIDE5OTAuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmM5MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB0aGUgY3VzdG9tYXJ5IHNob3J0aGFuZCBmb3IKK3RoaXMgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQuCisKKyAgICAgICAgICA8cD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgZXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWM5MDwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pc285ODk5OjE5OTQwOTwvY29kZT48ZGQ+VGhlIDE5OTAgQyBzdGFuZGFyZCwgYXMgYW1lbmRlZCBpbiAxOTk0LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pc285ODk5OjE5OTk8L2NvZGU+PGR0Pjxjb2RlPmM5OTwvY29kZT48ZHQ+PGNvZGU+aXNvOTg5OToxOTl4PC9jb2RlPjxkdD48Y29kZT5jOXg8L2NvZGU+PGRkPlRoZSByZXZpc2VkIElTTyBDIHN0YW5kYXJkLCBwdWJsaXNoZWQgaW4gRGVjZW1iZXIgMTk5OS4gIEJlZm9yZQorcHVibGljYXRpb24sIHRoaXMgd2FzIGtub3duIGFzIEM5WC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+aXNvOTg5OToyMDExPC9jb2RlPjxkdD48Y29kZT5jMTE8L2NvZGU+PGR0Pjxjb2RlPmMxeDwvY29kZT48ZGQ+VGhlIHJldmlzZWQgSVNPIEMgc3RhbmRhcmQsIHB1Ymxpc2hlZCBpbiBEZWNlbWJlciAyMDExLiAgQmVmb3JlCitwdWJsaWNhdGlvbiwgdGhpcyB3YXMga25vd24gYXMgQzFYLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5nbnU5MDwvY29kZT48ZHQ+PGNvZGU+Z251ODk8L2NvZGU+PGRkPlRoZSAxOTkwIEMgc3RhbmRhcmQgcGx1cyBHTlUgZXh0ZW5zaW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmdudTk5PC9jb2RlPjxkdD48Y29kZT5nbnU5eDwvY29kZT48ZGQ+VGhlIDE5OTkgQyBzdGFuZGFyZCBwbHVzIEdOVSBleHRlbnNpb25zLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5nbnUxMTwvY29kZT48ZHQ+PGNvZGU+Z251MXg8L2NvZGU+PGRkPlRoZSAyMDExIEMgc3RhbmRhcmQgcGx1cyBHTlUgZXh0ZW5zaW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YysrOTg8L2NvZGU+PGRkPlRoZSAxOTk4IElTTyBDKysgc3RhbmRhcmQgcGx1cyBhbWVuZG1lbnRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5nbnUrKzk4PC9jb2RlPjxkZD5UaGUgc2FtZSBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWMrKzk4PC9zcGFuPjwvc2FtcD4gcGx1cyBHTlUgZXh0ZW5zaW9ucy4gIFRoaXMgaXMgdGhlCitkZWZhdWx0IGZvciBDKysgY29kZS4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUktPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1JXzAwMmQtMTU3Ij48L2E+U3BsaXQgdGhlIGluY2x1ZGUgcGF0aC4gIEFueSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+CitvcHRpb25zIGJlZm9yZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSS08L3NwYW4+PC9zYW1wPiBhcmUgc2VhcmNoZWQgb25seSBmb3IgaGVhZGVycyByZXF1ZXN0ZWQgd2l0aAorPGNvZGU+I2luY2x1ZGUmbmJzcDsiPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiI8IS0tIC9AdyAtLT48L2NvZGU+OyB0aGV5IGFyZSBub3Qgc2VhcmNoZWQgZm9yCis8Y29kZT4jaW5jbHVkZSZuYnNwOyZsdDs8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+Jmd0OzwhLS0gL0B3IC0tPjwvY29kZT4uICBJZiBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGFyZQorc3BlY2lmaWVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFmdGVyIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSS08L3NwYW4+PC9zYW1wPiwgdGhvc2UKK2RpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBmb3IgYWxsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlcy4KKworICAgICA8cD5JbiBhZGRpdGlvbiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUktPC9zcGFuPjwvc2FtcD4gaW5oaWJpdHMgdGhlIHVzZSBvZiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50CitmaWxlIGRpcmVjdG9yeSBhcyB0aGUgZmlyc3Qgc2VhcmNoIGRpcmVjdG9yeSBmb3IgPGNvZGU+I2luY2x1ZGUmbmJzcDsiPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiI8IS0tIC9AdyAtLT48L2NvZGU+LiAKK1NlZSA8YSBocmVmPSJTZWFyY2gtUGF0aC5odG1sI1NlYXJjaC1QYXRoIj5TZWFyY2ggUGF0aDwvYT4uIAorVGhpcyBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub3N0ZGluYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbm9zdGRpbmMtMTU4Ij48L2E+RG8gbm90IHNlYXJjaCB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzIGZvciBoZWFkZXIgZmlsZXMuIAorT25seSB0aGUgZGlyZWN0b3JpZXMgeW91IGhhdmUgc3BlY2lmaWVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBvcHRpb25zCisoYW5kIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZSwgaWYgYXBwcm9wcmlhdGUpIGFyZSBzZWFyY2hlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub3N0ZGluYysrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ub3N0ZGluY18wMDJiXzAwMmItMTU5Ij48L2E+RG8gbm90IHNlYXJjaCBmb3IgaGVhZGVyIGZpbGVzIGluIHRoZSBDKystc3BlY2lmaWMgc3RhbmRhcmQgZGlyZWN0b3JpZXMsCitidXQgZG8gc3RpbGwgc2VhcmNoIHRoZSBvdGhlciBzdGFuZGFyZCBkaXJlY3Rvcmllcy4gIChUaGlzIG9wdGlvbiBpcwordXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBDKysgbGlicmFyeS4pCisKKyAgICAgPGJyPjxkdD48Y29kZT4taW5jbHVkZSA8L2NvZGU+PHZhcj5maWxlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWluY2x1ZGUtMTYwIj48L2E+UHJvY2VzcyA8dmFyPmZpbGU8L3Zhcj4gYXMgaWYgPGNvZGU+I2luY2x1ZGUgImZpbGUiPC9jb2RlPiBhcHBlYXJlZCBhcyB0aGUgZmlyc3QKK2xpbmUgb2YgdGhlIHByaW1hcnkgc291cmNlIGZpbGUuICBIb3dldmVyLCB0aGUgZmlyc3QgZGlyZWN0b3J5IHNlYXJjaGVkCitmb3IgPHZhcj5maWxlPC92YXI+IGlzIHRoZSBwcmVwcm9jZXNzb3IncyB3b3JraW5nIGRpcmVjdG9yeSA8ZW0+aW5zdGVhZCBvZjwvZW0+Cit0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG1haW4gc291cmNlIGZpbGUuICBJZiBub3QgZm91bmQgdGhlcmUsIGl0CitpcyBzZWFyY2hlZCBmb3IgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgPGNvZGU+I2luY2x1ZGUgIi4uLiI8L2NvZGU+IHNlYXJjaAorY2hhaW4gYXMgbm9ybWFsLgorCisgICAgIDxwPklmIG11bHRpcGxlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pbmNsdWRlPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBhcmUgZ2l2ZW4sIHRoZSBmaWxlcyBhcmUgaW5jbHVkZWQKK2luIHRoZSBvcmRlciB0aGV5IGFwcGVhciBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWltYWNyb3MgPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1pbWFjcm9zLTE2MSI+PC9hPkV4YWN0bHkgbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW5jbHVkZTwvc3Bhbj48L3NhbXA+LCBleGNlcHQgdGhhdCBhbnkgb3V0cHV0IHByb2R1Y2VkIGJ5CitzY2FubmluZyA8dmFyPmZpbGU8L3Zhcj4gaXMgdGhyb3duIGF3YXkuICBNYWNyb3MgaXQgZGVmaW5lcyByZW1haW4gZGVmaW5lZC4gCitUaGlzIGFsbG93cyB5b3UgdG8gYWNxdWlyZSBhbGwgdGhlIG1hY3JvcyBmcm9tIGEgaGVhZGVyIHdpdGhvdXQgYWxzbworcHJvY2Vzc2luZyBpdHMgZGVjbGFyYXRpb25zLgorCisgICAgIDxwPkFsbCBmaWxlcyBzcGVjaWZpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWltYWNyb3M8L3NwYW4+PC9zYW1wPiBhcmUgcHJvY2Vzc2VkIGJlZm9yZSBhbGwgZmlsZXMKK3NwZWNpZmllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW5jbHVkZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWlkaXJhZnRlciA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaWRpcmFmdGVyLTE2MiI+PC9hPlNlYXJjaCA8dmFyPmRpcjwvdmFyPiBmb3IgaGVhZGVyIGZpbGVzLCBidXQgZG8gaXQgPGVtPmFmdGVyPC9lbT4gYWxsCitkaXJlY3RvcmllcyBzcGVjaWZpZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzCitoYXZlIGJlZW4gZXhoYXVzdGVkLiAgPHZhcj5kaXI8L3Zhcj4gaXMgdHJlYXRlZCBhcyBhIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yeS4gCitJZiA8dmFyPmRpcjwvdmFyPiBiZWdpbnMgd2l0aCA8Y29kZT49PC9jb2RlPiwgdGhlbiB0aGUgPGNvZGU+PTwvY29kZT4gd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zeXNyb290PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pc3lzcm9vdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWlwcmVmaXggPC9jb2RlPjx2YXI+cHJlZml4PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWlwcmVmaXgtMTYzIj48L2E+U3BlY2lmeSA8dmFyPnByZWZpeDwvdmFyPiBhcyB0aGUgcHJlZml4IGZvciBzdWJzZXF1ZW50IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pd2l0aHByZWZpeDwvc3Bhbj48L3NhbXA+CitvcHRpb25zLiAgSWYgdGhlIHByZWZpeCByZXByZXNlbnRzIGEgZGlyZWN0b3J5LCB5b3Ugc2hvdWxkIGluY2x1ZGUgdGhlCitmaW5hbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi88L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4taXdpdGhwcmVmaXggPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGR0Pjxjb2RlPi1pd2l0aHByZWZpeGJlZm9yZSA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaXdpdGhwcmVmaXgtMTY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXdpdGhwcmVmaXhiZWZvcmUtMTY1Ij48L2E+QXBwZW5kIDx2YXI+ZGlyPC92YXI+IHRvIHRoZSBwcmVmaXggc3BlY2lmaWVkIHByZXZpb3VzbHkgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlwcmVmaXg8L3NwYW4+PC9zYW1wPiwgYW5kIGFkZCB0aGUgcmVzdWx0aW5nIGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBzZWFyY2gKK3BhdGguICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXdpdGhwcmVmaXhiZWZvcmU8L3NwYW4+PC9zYW1wPiBwdXRzIGl0IGluIHRoZSBzYW1lIHBsYWNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4KK3dvdWxkOyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXdpdGhwcmVmaXg8L3NwYW4+PC9zYW1wPiBwdXRzIGl0IHdoZXJlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pZGlyYWZ0ZXI8L3NwYW4+PC9zYW1wPiB3b3VsZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pc3lzcm9vdCA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaXN5c3Jvb3QtMTY2Ij48L2E+VGhpcyBvcHRpb24gaXMgbGlrZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zeXNyb290PC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBidXQgYXBwbGllcyBvbmx5IHRvCitoZWFkZXIgZmlsZXMgKGV4Y2VwdCBmb3IgRGFyd2luIHRhcmdldHMsIHdoZXJlIGl0IGFwcGxpZXMgdG8gYm90aCBoZWFkZXIKK2ZpbGVzIGFuZCBsaWJyYXJpZXMpLiAgU2VlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBvcHRpb24gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWltdWx0aWxpYiA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaW11bHRpbGliLTE2NyI+PC9hPlVzZSA8dmFyPmRpcjwvdmFyPiBhcyBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcKK3RhcmdldC1zcGVjaWZpYyBDKysgaGVhZGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pc3lzdGVtIDwvY29kZT48dmFyPmRpcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1pc3lzdGVtLTE2OCI+PC9hPlNlYXJjaCA8dmFyPmRpcjwvdmFyPiBmb3IgaGVhZGVyIGZpbGVzLCBhZnRlciBhbGwgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGJ1dCBiZWZvcmUgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4gIE1hcmsgaXQKK2FzIGEgc3lzdGVtIGRpcmVjdG9yeSwgc28gdGhhdCBpdCBnZXRzIHRoZSBzYW1lIHNwZWNpYWwgdHJlYXRtZW50IGFzCitpcyBhcHBsaWVkIHRvIHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMuIAorU2VlIDxhIGhyZWY9IlN5c3RlbS1IZWFkZXJzLmh0bWwjU3lzdGVtLUhlYWRlcnMiPlN5c3RlbSBIZWFkZXJzPC9hPi4gCitJZiA8dmFyPmRpcjwvdmFyPiBiZWdpbnMgd2l0aCA8Y29kZT49PC9jb2RlPiwgdGhlbiB0aGUgPGNvZGU+PTwvY29kZT4gd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zeXNyb290PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pc3lzcm9vdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWlxdW90ZSA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaXF1b3RlLTE2OSI+PC9hPlNlYXJjaCA8dmFyPmRpcjwvdmFyPiBvbmx5IGZvciBoZWFkZXIgZmlsZXMgcmVxdWVzdGVkIHdpdGgKKzxjb2RlPiNpbmNsdWRlJm5ic3A7IjwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4iPCEtLSAvQHcgLS0+PC9jb2RlPjsgdGhleSBhcmUgbm90IHNlYXJjaGVkIGZvcgorPGNvZGU+I2luY2x1ZGUmbmJzcDsmbHQ7PC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiZndDs8IS0tIC9AdyAtLT48L2NvZGU+LCBiZWZvcmUgYWxsIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBhbmQgYmVmb3JlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMuIAorU2VlIDxhIGhyZWY9IlNlYXJjaC1QYXRoLmh0bWwjU2VhcmNoLVBhdGgiPlNlYXJjaCBQYXRoPC9hPi4gCitJZiA8dmFyPmRpcjwvdmFyPiBiZWdpbnMgd2l0aCA8Y29kZT49PC9jb2RlPiwgdGhlbiB0aGUgPGNvZGU+PTwvY29kZT4gd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zeXNyb290PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pc3lzcm9vdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkaXJlY3RpdmVzLW9ubHk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkaXJlY3RpdmVzXzAwMmRvbmx5LTE3MCI+PC9hPldoZW4gcHJlcHJvY2Vzc2luZywgaGFuZGxlIGRpcmVjdGl2ZXMsIGJ1dCBkbyBub3QgZXhwYW5kIG1hY3Jvcy4KKworICAgICA8cD5UaGUgb3B0aW9uJ3MgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcmVwcm9jZXNzZWQ8L3NwYW4+PC9zYW1wPgorb3B0aW9ucy4KKworICAgICA8cD5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4sIHByZXByb2Nlc3NpbmcgaXMgbGltaXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgZGlyZWN0aXZlcworc3VjaCBhcyA8Y29kZT4jZGVmaW5lPC9jb2RlPiwgPGNvZGU+I2lmZGVmPC9jb2RlPiwgYW5kIDxjb2RlPiNlcnJvcjwvY29kZT4uICBPdGhlcgorcHJlcHJvY2Vzc29yIG9wZXJhdGlvbnMsIHN1Y2ggYXMgbWFjcm8gZXhwYW5zaW9uIGFuZCB0cmlncmFwaAorY29udmVyc2lvbiBhcmUgbm90IHBlcmZvcm1lZC4gIEluIGFkZGl0aW9uLCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWREPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzCitpbXBsaWNpdGx5IGVuYWJsZWQuCisKKyAgICAgPHA+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByZXByb2Nlc3NlZDwvc3Bhbj48L3NhbXA+LCBwcmVkZWZpbml0aW9uIG9mIGNvbW1hbmQgbGluZSBhbmQgbW9zdAorYnVpbHRpbiBtYWNyb3MgaXMgZGlzYWJsZWQuICBNYWNyb3Mgc3VjaCBhcyA8Y29kZT5fX0xJTkVfXzwvY29kZT4sIHdoaWNoIGFyZQorY29udGV4dHVhbGx5IGRlcGVuZGVudCwgYXJlIGhhbmRsZWQgbm9ybWFsbHkuICBUaGlzIGVuYWJsZXMgY29tcGlsYXRpb24gb2YKK2ZpbGVzIHByZXZpb3VzbHkgcHJlcHJvY2Vzc2VkIHdpdGggPGNvZGU+LUUgLWZkaXJlY3RpdmVzLW9ubHk8L2NvZGU+LgorCisgICAgIDxwPldpdGggYm90aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByZXByb2Nlc3NlZDwvc3Bhbj48L3NhbXA+LCB0aGUgcnVsZXMgZm9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByZXByb2Nlc3NlZDwvc3Bhbj48L3NhbXA+IHRha2UgcHJlY2VkZW5jZS4gIFRoaXMgZW5hYmxlcyBmdWxsIHByZXByb2Nlc3Npbmcgb2YKK2ZpbGVzIHByZXZpb3VzbHkgcHJlcHJvY2Vzc2VkIHdpdGggPGNvZGU+LUUgLWZkaXJlY3RpdmVzLW9ubHk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkb2xsYXJzLWluLWlkZW50aWZpZXJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZG9sbGFyc18wMDJkaW5fMDAyZGlkZW50aWZpZXJzLTE3MSI+PC9hPjxhIG5hbWU9ImZkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMiPjwvYT5BY2NlcHQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGlkZW50aWZpZXJzLiAKK1NlZSA8YSBocmVmPSJJZGVudGlmaWVyLWNoYXJhY3RlcnMuaHRtbCNJZGVudGlmaWVyLWNoYXJhY3RlcnMiPklkZW50aWZpZXIgY2hhcmFjdGVyczwvYT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmV4dGVuZGVkLWlkZW50aWZpZXJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZXh0ZW5kZWRfMDAyZGlkZW50aWZpZXJzLTE3MiI+PC9hPkFjY2VwdCB1bml2ZXJzYWwgY2hhcmFjdGVyIG5hbWVzIGluIGlkZW50aWZpZXJzLiAgVGhpcyBvcHRpb24gaXMKK2V4cGVyaW1lbnRhbDsgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBHQ0MsIGl0IHdpbGwgYmUgZW5hYmxlZCBieQorZGVmYXVsdCBmb3IgQzk5IGFuZCBDKysuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWNhbm9uaWNhbC1zeXN0ZW0taGVhZGVyczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRjYW5vbmljYWxfMDAyZHN5c3RlbV8wMDJkaGVhZGVycy0xNzMiPjwvYT5XaGVuIHByZXByb2Nlc3NpbmcsIGRvIG5vdCBzaG9ydGVuIHN5c3RlbSBoZWFkZXIgcGF0aHMgd2l0aCBjYW5vbmljYWxpemF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwcmVwcm9jZXNzZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZwcmVwcm9jZXNzZWQtMTc0Ij48L2E+SW5kaWNhdGUgdG8gdGhlIHByZXByb2Nlc3NvciB0aGF0IHRoZSBpbnB1dCBmaWxlIGhhcyBhbHJlYWR5IGJlZW4KK3ByZXByb2Nlc3NlZC4gIFRoaXMgc3VwcHJlc3NlcyB0aGluZ3MgbGlrZSBtYWNybyBleHBhbnNpb24sIHRyaWdyYXBoCitjb252ZXJzaW9uLCBlc2NhcGVkIG5ld2xpbmUgc3BsaWNpbmcsIGFuZCBwcm9jZXNzaW5nIG9mIG1vc3QgZGlyZWN0aXZlcy4gCitUaGUgcHJlcHJvY2Vzc29yIHN0aWxsIHJlY29nbml6ZXMgYW5kIHJlbW92ZXMgY29tbWVudHMsIHNvIHRoYXQgeW91IGNhbgorcGFzcyBhIGZpbGUgcHJlcHJvY2Vzc2VkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUM8L3NwYW4+PC9zYW1wPiB0byB0aGUgY29tcGlsZXIgd2l0aG91dAorcHJvYmxlbXMuICBJbiB0aGlzIG1vZGUgdGhlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29yIGlzIGxpdHRsZSBtb3JlIHRoYW4KK2EgdG9rZW5pemVyIGZvciB0aGUgZnJvbnQgZW5kcy4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByZXByb2Nlc3NlZDwvc3Bhbj48L3NhbXA+IGlzIGltcGxpY2l0IGlmIHRoZSBpbnB1dCBmaWxlIGhhcyBvbmUgb2YgdGhlCitleHRlbnNpb25zICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmlpPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lm1pPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlc2UgYXJlIHRoZQorZXh0ZW5zaW9ucyB0aGF0IEdDQyB1c2VzIGZvciBwcmVwcm9jZXNzZWQgZmlsZXMgY3JlYXRlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXNhdmUtdGVtcHM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdGFic3RvcD08L2NvZGU+PHZhcj53aWR0aDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mdGFic3RvcC0xNzUiPjwvYT5TZXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGFiIHN0b3BzLiAgVGhpcyBoZWxwcyB0aGUgcHJlcHJvY2Vzc29yIHJlcG9ydAorY29ycmVjdCBjb2x1bW4gbnVtYmVycyBpbiB3YXJuaW5ncyBvciBlcnJvcnMsIGV2ZW4gaWYgdGFicyBhcHBlYXIgb24gdGhlCitsaW5lLiAgSWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiAxMDAsIHRoZSBvcHRpb24gaXMKK2lnbm9yZWQuICBUaGUgZGVmYXVsdCBpcyA4LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkZWJ1Zy1jcHA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkZWJ1Z18wMDJkY3BwLTE3NiI+PC9hPlRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgR0NDLiAgV2hlbiB1c2VkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4sIGR1bXBzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCBsb2NhdGlvbiBtYXBzLiAgRXZlcnkKK3Rva2VuIGluIHRoZSBvdXRwdXQgaXMgcHJlY2VkZWQgYnkgdGhlIGR1bXAgb2YgdGhlIG1hcCBpdHMgbG9jYXRpb24KK2JlbG9uZ3MgdG8uICBUaGUgZHVtcCBvZiB0aGUgbWFwIGhvbGRpbmcgdGhlIGxvY2F0aW9uIG9mIGEgdG9rZW4gd291bGQKK2JlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB7JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QPC9zcGFuPjwvc2FtcD4mcnNxdW87OjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vZmlsZS9wYXRoPC9zcGFuPjwvc2FtcD47JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5GPC9zcGFuPjwvc2FtcD4mcnNxdW87OjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vaW5jbHVkZXIvcGF0aDwvc3Bhbj48L3NhbXA+OyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TDwvc3Bhbj48L3NhbXA+JnJzcXVvOzo8dmFyPmxpbmVfbnVtPC92YXI+OyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qzwvc3Bhbj48L3NhbXA+JnJzcXVvOzo8dmFyPmNvbF9udW08L3Zhcj47JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TPC9zcGFuPjwvc2FtcD4mcnNxdW87Ojx2YXI+c3lzdGVtX2hlYWRlcl9wPC92YXI+OyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TTwvc3Bhbj48L3NhbXA+JnJzcXVvOzo8dmFyPm1hcF9hZGRyZXNzPC92YXI+OyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RTwvc3Bhbj48L3NhbXA+JnJzcXVvOzo8dmFyPm1hY3JvX2V4cGFuc2lvbl9wPC92YXI+LCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9jPC9zcGFuPjwvc2FtcD4mcnNxdW87Ojx2YXI+bG9jYXRpb248L3Zhcj59Cis8L3ByZT4KKyAgICAgPHA+V2hlbiB1c2VkIHdpdGhvdXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJhY2stbWFjcm8tZXhwYW5zaW9uPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj48Y29kZT49PC9jb2RlPjx2YXI+bGV2ZWw8L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmFja18wMDJkbWFjcm9fMDAyZGV4cGFuc2lvbi0xNzciPjwvYT5UcmFjayBsb2NhdGlvbnMgb2YgdG9rZW5zIGFjcm9zcyBtYWNybyBleHBhbnNpb25zLiBUaGlzIGFsbG93cyB0aGUKK2NvbXBpbGVyIHRvIGVtaXQgZGlhZ25vc3RpYyBhYm91dCB0aGUgY3VycmVudCBtYWNybyBleHBhbnNpb24gc3RhY2sKK3doZW4gYSBjb21waWxhdGlvbiBlcnJvciBvY2N1cnMgaW4gYSBtYWNybyBleHBhbnNpb24uIFVzaW5nIHRoaXMKK29wdGlvbiBtYWtlcyB0aGUgcHJlcHJvY2Vzc29yIGFuZCB0aGUgY29tcGlsZXIgY29uc3VtZSBtb3JlCittZW1vcnkuIFRoZSA8dmFyPmxldmVsPC92YXI+IHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBjaG9vc2UgdGhlIGxldmVsIG9mCitwcmVjaXNpb24gb2YgdG9rZW4gbG9jYXRpb24gdHJhY2tpbmcgdGh1cyBkZWNyZWFzaW5nIHRoZSBtZW1vcnkKK2NvbnN1bXB0aW9uIGlmIG5lY2Vzc2FyeS4gVmFsdWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9mIDx2YXI+bGV2ZWw8L3Zhcj4gZGUtYWN0aXZhdGVzCit0aGlzIG9wdGlvbiBqdXN0IGFzIGlmIG5vIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJhY2stbWFjcm8tZXhwYW5zaW9uPC9zcGFuPjwvc2FtcD4gd2FzIHByZXNlbnQKK29uIHRoZSBjb21tYW5kIGxpbmUuIFZhbHVlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0cmFja3MgdG9rZW5zIGxvY2F0aW9ucyBpbiBhCitkZWdyYWRlZCBtb2RlIGZvciB0aGUgc2FrZSBvZiBtaW5pbWFsIG1lbW9yeSBvdmVyaGVhZC4gSW4gdGhpcyBtb2RlCithbGwgdG9rZW5zIHJlc3VsdGluZyBmcm9tIHRoZSBleHBhbnNpb24gb2YgYW4gYXJndW1lbnQgb2YgYQorZnVuY3Rpb24tbGlrZSBtYWNybyBoYXZlIHRoZSBzYW1lIGxvY2F0aW9uLiBWYWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHJhY2tzCit0b2tlbnMgbG9jYXRpb25zIGNvbXBsZXRlbHkuIFRoaXMgdmFsdWUgaXMgdGhlIG1vc3QgbWVtb3J5IGh1bmdyeS4gCitXaGVuIHRoaXMgb3B0aW9uIGlzIGdpdmVuIG5vIGFyZ3VtZW50LCB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUgaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5Ob3RlIHRoYXQgLWZ0cmFjay1tYWNyby1leHBhbnNpb249MiBpcyBhY3RpdmF0ZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZXhlYy1jaGFyc2V0PTwvY29kZT48dmFyPmNoYXJzZXQ8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmV4ZWNfMDAyZGNoYXJzZXQtMTc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2hhcmFjdGVyLXNldF8wMDJjLWV4ZWN1dGlvbi0xNzkiPjwvYT5TZXQgdGhlIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0LCB1c2VkIGZvciBzdHJpbmcgYW5kIGNoYXJhY3RlcgorY29uc3RhbnRzLiAgVGhlIGRlZmF1bHQgaXMgVVRGLTguICA8dmFyPmNoYXJzZXQ8L3Zhcj4gY2FuIGJlIGFueSBlbmNvZGluZworc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0ncyA8Y29kZT5pY29udjwvY29kZT4gbGlicmFyeSByb3V0aW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ3aWRlLWV4ZWMtY2hhcnNldD08L2NvZGU+PHZhcj5jaGFyc2V0PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZ3aWRlXzAwMmRleGVjXzAwMmRjaGFyc2V0LTE4MCI+PC9hPjxhIG5hbWU9ImluZGV4LWNoYXJhY3Rlci1zZXRfMDAyYy13aWRlLWV4ZWN1dGlvbi0xODEiPjwvYT5TZXQgdGhlIHdpZGUgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQsIHVzZWQgZm9yIHdpZGUgc3RyaW5nIGFuZAorY2hhcmFjdGVyIGNvbnN0YW50cy4gIFRoZSBkZWZhdWx0IGlzIFVURi0zMiBvciBVVEYtMTYsIHdoaWNoZXZlcgorY29ycmVzcG9uZHMgdG8gdGhlIHdpZHRoIG9mIDxjb2RlPndjaGFyX3Q8L2NvZGU+LiAgQXMgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZleGVjLWNoYXJzZXQ8L3NwYW4+PC9zYW1wPiwgPHZhcj5jaGFyc2V0PC92YXI+IGNhbiBiZSBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkCitieSB0aGUgc3lzdGVtJ3MgPGNvZGU+aWNvbnY8L2NvZGU+IGxpYnJhcnkgcm91dGluZTsgaG93ZXZlciwgeW91IHdpbGwgaGF2ZQorcHJvYmxlbXMgd2l0aCBlbmNvZGluZ3MgdGhhdCBkbyBub3QgZml0IGV4YWN0bHkgaW4gPGNvZGU+d2NoYXJfdDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmlucHV0LWNoYXJzZXQ9PC9jb2RlPjx2YXI+Y2hhcnNldDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1maW5wdXRfMDAyZGNoYXJzZXQtMTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtY2hhcmFjdGVyLXNldF8wMDJjLWlucHV0LTE4MyI+PC9hPlNldCB0aGUgaW5wdXQgY2hhcmFjdGVyIHNldCwgdXNlZCBmb3IgdHJhbnNsYXRpb24gZnJvbSB0aGUgY2hhcmFjdGVyCitzZXQgb2YgdGhlIGlucHV0IGZpbGUgdG8gdGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgR0NDLiAgSWYgdGhlCitsb2NhbGUgZG9lcyBub3Qgc3BlY2lmeSwgb3IgR0NDIGNhbm5vdCBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZQorbG9jYWxlLCB0aGUgZGVmYXVsdCBpcyBVVEYtOC4gIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZWl0aGVyIHRoZSBsb2NhbGUKK29yIHRoaXMgY29tbWFuZCBsaW5lIG9wdGlvbi4gIEN1cnJlbnRseSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiB0YWtlcworcHJlY2VkZW5jZSBpZiB0aGVyZSdzIGEgY29uZmxpY3QuICA8dmFyPmNoYXJzZXQ8L3Zhcj4gY2FuIGJlIGFueSBlbmNvZGluZworc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0ncyA8Y29kZT5pY29udjwvY29kZT4gbGlicmFyeSByb3V0aW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ3b3JraW5nLWRpcmVjdG9yeTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZndvcmtpbmdfMDAyZGRpcmVjdG9yeS0xODQiPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZHdvcmtpbmdfMDAyZGRpcmVjdG9yeS0xODUiPjwvYT5FbmFibGUgZ2VuZXJhdGlvbiBvZiBsaW5lbWFya2VycyBpbiB0aGUgcHJlcHJvY2Vzc29yIG91dHB1dCB0aGF0IHdpbGwKK2xldCB0aGUgY29tcGlsZXIga25vdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhdCB0aGUgdGltZSBvZgorcHJlcHJvY2Vzc2luZy4gIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIHByZXByb2Nlc3NvciB3aWxsCitlbWl0LCBhZnRlciB0aGUgaW5pdGlhbCBsaW5lbWFya2VyLCBhIHNlY29uZCBsaW5lbWFya2VyIHdpdGggdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvbGxvd2VkIGJ5IHR3byBzbGFzaGVzLiAgR0NDIHdpbGwgdXNlIHRoaXMKK2RpcmVjdG9yeSwgd2hlbiBpdCdzIHByZXNlbnQgaW4gdGhlIHByZXByb2Nlc3NlZCBpbnB1dCwgYXMgdGhlCitkaXJlY3RvcnkgZW1pdHRlZCBhcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpbiBzb21lIGRlYnVnZ2luZworaW5mb3JtYXRpb24gZm9ybWF0cy4gIFRoaXMgb3B0aW9uIGlzIGltcGxpY2l0bHkgZW5hYmxlZCBpZiBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGlzIGVuYWJsZWQsIGJ1dCB0aGlzIGNhbiBiZSBpbmhpYml0ZWQgd2l0aCB0aGUgbmVnYXRlZAorZm9ybSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXdvcmtpbmctZGlyZWN0b3J5PC9zcGFuPjwvc2FtcD4uICBJZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVA8L3NwYW4+PC9zYW1wPiBmbGFnIGlzCitwcmVzZW50IGluIHRoZSBjb21tYW5kIGxpbmUsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QsIHNpbmNlIG5vCis8Y29kZT4jbGluZTwvY29kZT4gZGlyZWN0aXZlcyBhcmUgZW1pdHRlZCB3aGF0c29ldmVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1zaG93LWNvbHVtbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRzaG93XzAwMmRjb2x1bW4tMTg2Ij48L2E+RG8gbm90IHByaW50IGNvbHVtbiBudW1iZXJzIGluIGRpYWdub3N0aWNzLiAgVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IGlmCitkaWFnbm9zdGljcyBhcmUgYmVpbmcgc2Nhbm5lZCBieSBhIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZQorY29sdW1uIG51bWJlcnMsIHN1Y2ggYXMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmRlamFnbnU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1BIDwvY29kZT48dmFyPnByZWRpY2F0ZTwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj5hbnN3ZXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtQS0xODciPjwvYT5NYWtlIGFuIGFzc2VydGlvbiB3aXRoIHRoZSBwcmVkaWNhdGUgPHZhcj5wcmVkaWNhdGU8L3Zhcj4gYW5kIGFuc3dlcgorPHZhcj5hbnN3ZXI8L3Zhcj4uICBUaGlzIGZvcm0gaXMgcHJlZmVycmVkIHRvIHRoZSBvbGRlciBmb3JtIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1BCis8L3NwYW4+PHZhcj5wcmVkaWNhdGU8L3Zhcj48c3BhbiBjbGFzcz0ib3B0aW9uIj4oPC9zcGFuPjx2YXI+YW5zd2VyPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+KTwvc3Bhbj48L3NhbXA+LCB3aGljaCBpcyBzdGlsbCBzdXBwb3J0ZWQsIGJlY2F1c2UKK2l0IGRvZXMgbm90IHVzZSBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIAorU2VlIDxhIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjT2Jzb2xldGUtRmVhdHVyZXMiPk9ic29sZXRlIEZlYXR1cmVzPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1BIC08L2NvZGU+PHZhcj5wcmVkaWNhdGU8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+YW5zd2VyPC92YXI+PGRkPkNhbmNlbCBhbiBhc3NlcnRpb24gd2l0aCB0aGUgcHJlZGljYXRlIDx2YXI+cHJlZGljYXRlPC92YXI+IGFuZCBhbnN3ZXIKKzx2YXI+YW5zd2VyPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWRDSEFSUzwvY29kZT48ZGQ+PHZhcj5DSEFSUzwvdmFyPiBpcyBhIHNlcXVlbmNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycywKK2FuZCBtdXN0IG5vdCBiZSBwcmVjZWRlZCBieSBhIHNwYWNlLiAgT3RoZXIgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQKK2J5IHRoZSBjb21waWxlciBwcm9wZXIsIG9yIHJlc2VydmVkIGZvciBmdXR1cmUgdmVyc2lvbnMgb2YgR0NDLCBhbmQgc28KK2FyZSBzaWxlbnRseSBpZ25vcmVkLiAgSWYgeW91IHNwZWNpZnkgY2hhcmFjdGVycyB3aG9zZSBiZWhhdmlvcgorY29uZmxpY3RzLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk08L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZE0tMTg4Ij48L2E+SW5zdGVhZCBvZiB0aGUgbm9ybWFsIG91dHB1dCwgZ2VuZXJhdGUgYSBsaXN0IG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2RlZmluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOworZGlyZWN0aXZlcyBmb3IgYWxsIHRoZSBtYWNyb3MgZGVmaW5lZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKK3ByZXByb2Nlc3NvciwgaW5jbHVkaW5nIHByZWRlZmluZWQgbWFjcm9zLiAgVGhpcyBnaXZlcyB5b3UgYSB3YXkgb2YKK2ZpbmRpbmcgb3V0IHdoYXQgaXMgcHJlZGVmaW5lZCBpbiB5b3VyIHZlcnNpb24gb2YgdGhlIHByZXByb2Nlc3Nvci4gCitBc3N1bWluZyB5b3UgaGF2ZSBubyBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5mb28uaDwvc3Bhbj48L3NhbXA+LCB0aGUgY29tbWFuZAorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICB0b3VjaCBmb28uaDsgY3BwIC1kTSBmb28uaAorPC9wcmU+CisgICAgICAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aWxsIHNob3cgYWxsIHRoZSBwcmVkZWZpbmVkIG1hY3Jvcy4KKworICAgICAgICAgIDxwPklmIHlvdSB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWRNPC9zcGFuPjwvc2FtcD4gd2l0aG91dCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiBvcHRpb24sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kTTwvc3Bhbj48L3NhbXA+IGlzCitpbnRlcnByZXRlZCBhcyBhIHN5bm9ueW0gZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtbWFjaDwvc3Bhbj48L3NhbXA+LiAKK1NlZSA8YSBocmVmPSIuLi9nY2MvRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZEQtMTg5Ij48L2E+TGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk08L3NwYW4+PC9zYW1wPiZyc3F1bzsgZXhjZXB0IGluIHR3byByZXNwZWN0czogaXQgZG9lcyA8ZW0+bm90PC9lbT4gaW5jbHVkZSB0aGUKK3ByZWRlZmluZWQgbWFjcm9zLCBhbmQgaXQgb3V0cHV0cyA8ZW0+Ym90aDwvZW0+IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNkZWZpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2RpcmVjdGl2ZXMgYW5kIHRoZSByZXN1bHQgb2YgcHJlcHJvY2Vzc2luZy4gIEJvdGgga2luZHMgb2Ygb3V0cHV0IGdvIHRvCit0aGUgc3RhbmRhcmQgb3V0cHV0IGZpbGUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1kTi0xOTAiPjwvYT5MaWtlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYnV0IGVtaXQgb25seSB0aGUgbWFjcm8gbmFtZXMsIG5vdCB0aGVpciBleHBhbnNpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkk8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZEktMTkxIj48L2E+T3V0cHV0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlcyBpbiBhZGRpdGlvbiB0byB0aGUgcmVzdWx0IG9mCitwcmVwcm9jZXNzaW5nLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZFUtMTkyIj48L2E+TGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZXhjZXB0IHRoYXQgb25seSBtYWNyb3MgdGhhdCBhcmUgZXhwYW5kZWQsIG9yIHdob3NlCitkZWZpbmVkbmVzcyBpcyB0ZXN0ZWQgaW4gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFyZSBvdXRwdXQ7IHRoZQorb3V0cHV0IGlzIGRlbGF5ZWQgdW50aWwgdGhlIHVzZSBvciB0ZXN0IG9mIHRoZSBtYWNybzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiN1bmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmVzIGFyZSBhbHNvIG91dHB1dCBmb3IgbWFjcm9zIHRlc3RlZCBidXQKK3VuZGVmaW5lZCBhdCB0aGUgdGltZS4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVAtMTkzIj48L2E+SW5oaWJpdCBnZW5lcmF0aW9uIG9mIGxpbmVtYXJrZXJzIGluIHRoZSBvdXRwdXQgZnJvbSB0aGUgcHJlcHJvY2Vzc29yLiAKK1RoaXMgbWlnaHQgYmUgdXNlZnVsIHdoZW4gcnVubmluZyB0aGUgcHJlcHJvY2Vzc29yIG9uIHNvbWV0aGluZyB0aGF0IGlzCitub3QgQyBjb2RlLCBhbmQgd2lsbCBiZSBzZW50IHRvIGEgcHJvZ3JhbSB3aGljaCBtaWdodCBiZSBjb25mdXNlZCBieSB0aGUKK2xpbmVtYXJrZXJzLiAKK1NlZSA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3V0cHV0Lmh0bWwjUHJlcHJvY2Vzc29yLU91dHB1dCI+UHJlcHJvY2Vzc29yIE91dHB1dDwvYT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tQzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtQy0xOTQiPjwvYT5EbyBub3QgZGlzY2FyZCBjb21tZW50cy4gIEFsbCBjb21tZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dAorZmlsZSwgZXhjZXB0IGZvciBjb21tZW50cyBpbiBwcm9jZXNzZWQgZGlyZWN0aXZlcywgd2hpY2ggYXJlIGRlbGV0ZWQKK2Fsb25nIHdpdGggdGhlIGRpcmVjdGl2ZS4KKworICAgICA8cD5Zb3Ugc2hvdWxkIGJlIHByZXBhcmVkIGZvciBzaWRlIGVmZmVjdHMgd2hlbiB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQzwvc3Bhbj48L3NhbXA+OyBpdAorY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgdG8gdHJlYXQgY29tbWVudHMgYXMgdG9rZW5zIGluIHRoZWlyIG93biByaWdodC4gCitGb3IgZXhhbXBsZSwgY29tbWVudHMgYXBwZWFyaW5nIGF0IHRoZSBzdGFydCBvZiB3aGF0IHdvdWxkIGJlIGEKK2RpcmVjdGl2ZSBsaW5lIGhhdmUgdGhlIGVmZmVjdCBvZiB0dXJuaW5nIHRoYXQgbGluZSBpbnRvIGFuIG9yZGluYXJ5Citzb3VyY2UgbGluZSwgc2luY2UgdGhlIGZpcnN0IHRva2VuIG9uIHRoZSBsaW5lIGlzIG5vIGxvbmdlciBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1DQzwvY29kZT48ZGQ+RG8gbm90IGRpc2NhcmQgY29tbWVudHMsIGluY2x1ZGluZyBkdXJpbmcgbWFjcm8gZXhwYW5zaW9uLiAgVGhpcyBpcworbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQzwvc3Bhbj48L3NhbXA+LCBleGNlcHQgdGhhdCBjb21tZW50cyBjb250YWluZWQgd2l0aGluIG1hY3JvcyBhcmUKK2Fsc28gcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dCBmaWxlIHdoZXJlIHRoZSBtYWNybyBpcyBleHBhbmRlZC4KKworICAgICA8cD5JbiBhZGRpdGlvbiB0byB0aGUgc2lkZS1lZmZlY3RzIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQzwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQ0M8L3NwYW4+PC9zYW1wPiBvcHRpb24gY2F1c2VzIGFsbCBDKystc3R5bGUgY29tbWVudHMgaW5zaWRlIGEgbWFjcm8KK3RvIGJlIGNvbnZlcnRlZCB0byBDLXN0eWxlIGNvbW1lbnRzLiAgVGhpcyBpcyB0byBwcmV2ZW50IGxhdGVyIHVzZQorb2YgdGhhdCBtYWNybyBmcm9tIGluYWR2ZXJ0ZW50bHkgY29tbWVudGluZyBvdXQgdGhlIHJlbWFpbmRlciBvZgordGhlIHNvdXJjZSBsaW5lLgorCisgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQ0M8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgZ2VuZXJhbGx5IHVzZWQgdG8gc3VwcG9ydCBsaW50IGNvbW1lbnRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXRyYWRpdGlvbmFsLWNwcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdHJhZGl0aW9uYWxfMDAyZGNwcC0xOTUiPjwvYT5UcnkgdG8gaW1pdGF0ZSB0aGUgYmVoYXZpb3Igb2Ygb2xkLWZhc2hpb25lZCBDIHByZXByb2Nlc3NvcnMsIGFzCitvcHBvc2VkIHRvIElTTyBDIHByZXByb2Nlc3NvcnMuIAorU2VlIDxhIGhyZWY9IlRyYWRpdGlvbmFsLU1vZGUuaHRtbCNUcmFkaXRpb25hbC1Nb2RlIj5UcmFkaXRpb25hbCBNb2RlPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi10cmlncmFwaHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXRyaWdyYXBocy0xOTYiPjwvYT5Qcm9jZXNzIHRyaWdyYXBoIHNlcXVlbmNlcy4gCitTZWUgPGEgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjSW5pdGlhbC1wcm9jZXNzaW5nIj5Jbml0aWFsIHByb2Nlc3Npbmc8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXJlbWFwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1yZW1hcC0xOTciPjwvYT5FbmFibGUgc3BlY2lhbCBjb2RlIHRvIHdvcmsgYXJvdW5kIGZpbGUgc3lzdGVtcyB3aGljaCBvbmx5IHBlcm1pdCB2ZXJ5CitzaG9ydCBmaWxlIG5hbWVzLCBzdWNoIGFzIE1TLURPUy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0taGVscDwvY29kZT48ZHQ+PGNvZGU+LS10YXJnZXQtaGVscDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtaGVscC0xOTgiPjwvYT48YSBuYW1lPSJpbmRleC10YXJnZXRfMDAyZGhlbHAtMTk5Ij48L2E+UHJpbnQgdGV4dCBkZXNjcmliaW5nIGFsbCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgaW5zdGVhZCBvZgorcHJlcHJvY2Vzc2luZyBhbnl0aGluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi12PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC12LTIwMCI+PC9hPlZlcmJvc2UgbW9kZS4gIFByaW50IG91dCBHTlUgQ1BQJ3MgdmVyc2lvbiBudW1iZXIgYXQgdGhlIGJlZ2lubmluZyBvZgorZXhlY3V0aW9uLCBhbmQgcmVwb3J0IHRoZSBmaW5hbCBmb3JtIG9mIHRoZSBpbmNsdWRlIHBhdGguCisKKyAgICAgPGJyPjxkdD48Y29kZT4tSDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtSC0yMDEiPjwvYT5QcmludCB0aGUgbmFtZSBvZiBlYWNoIGhlYWRlciBmaWxlIHVzZWQsIGluIGFkZGl0aW9uIHRvIG90aGVyIG5vcm1hbAorYWN0aXZpdGllcy4gIEVhY2ggbmFtZSBpcyBpbmRlbnRlZCB0byBzaG93IGhvdyBkZWVwIGluIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdGFjayBpdCBpcy4gIFByZWNvbXBpbGVkIGhlYWRlciBmaWxlcyBhcmUgYWxzbworcHJpbnRlZCwgZXZlbiBpZiB0aGV5IGFyZSBmb3VuZCB0byBiZSBpbnZhbGlkOyBhbiBpbnZhbGlkIHByZWNvbXBpbGVkCitoZWFkZXIgZmlsZSBpcyBwcmludGVkIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uLi54PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBhIHZhbGlkIG9uZSB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Li4uITwvc3Bhbj48L3NhbXA+JnJzcXVvOyAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tdmVyc2lvbjwvY29kZT48ZHQ+PGNvZGU+LS12ZXJzaW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC12ZXJzaW9uLTIwMiI+PC9hPlByaW50IG91dCBHTlUgQ1BQJ3MgdmVyc2lvbiBudW1iZXIuICBXaXRoIG9uZSBkYXNoLCBwcm9jZWVkIHRvCitwcmVwcm9jZXNzIGFzIG5vcm1hbC4gIFdpdGggdHdvIGRhc2hlcywgZXhpdCBpbW1lZGlhdGVseS4gCis8L2RsPgorICAgPCEtLSBtYW4gZW5kIC0tPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL0xpbmUtQ29udHJvbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9MaW5lLUNvbnRyb2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODZkMDZiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9MaW5lLUNvbnRyb2wuaHRtbApAQCAtMCwwICsxLDEzMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGluZSBDb250cm9sIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGlhZ25vc3RpY3MuaHRtbCNEaWFnbm9zdGljcyIgdGl0bGU9IkRpYWdub3N0aWNzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiIHRpdGxlPSJQcmFnbWFzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxpbmUtQ29udHJvbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRpYWdub3N0aWNzLmh0bWwjRGlhZ25vc3RpY3MiPkRpYWdub3N0aWNzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjYgTGluZSBDb250cm9sPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGluZS1jb250cm9sLTk4Ij48L2E+CitUaGUgQyBwcmVwcm9jZXNzb3IgaW5mb3JtcyB0aGUgQyBjb21waWxlciBvZiB0aGUgbG9jYXRpb24gaW4geW91ciBzb3VyY2UKK2NvZGUgd2hlcmUgZWFjaCB0b2tlbiBjYW1lIGZyb20uICBQcmVzZW50bHksIHRoaXMgaXMganVzdCB0aGUgZmlsZSBuYW1lCithbmQgbGluZSBudW1iZXIuICBBbGwgdGhlIHRva2VucyByZXN1bHRpbmcgZnJvbSBtYWNybyBleHBhbnNpb24gYXJlCityZXBvcnRlZCBhcyBoYXZpbmcgYXBwZWFyZWQgb24gdGhlIGxpbmUgb2YgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIHRoZQorb3V0ZXJtb3N0IG1hY3JvIHdhcyB1c2VkLiAgV2UgaW50ZW5kIHRvIGJlIG1vcmUgYWNjdXJhdGUgaW4gdGhlIGZ1dHVyZS4KKworICAgPHA+SWYgeW91IHdyaXRlIGEgcHJvZ3JhbSB3aGljaCBnZW5lcmF0ZXMgc291cmNlIGNvZGUsIHN1Y2ggYXMgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Ymlzb248L3NwYW4+PC9zYW1wPiBwYXJzZXIgZ2VuZXJhdG9yLCB5b3UgbWF5IHdhbnQgdG8gYWRqdXN0IHRoZSBwcmVwcm9jZXNzb3Incworbm90aW9uIG9mIHRoZSBjdXJyZW50IGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgYnkgaGFuZC4gIFBhcnRzIG9mIHRoZQorb3V0cHV0IGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmJpc29uPC9zcGFuPjwvc2FtcD4gYXJlIGdlbmVyYXRlZCBmcm9tIHNjcmF0Y2gsIG90aGVyIHBhcnRzIGNvbWUKK2Zyb20gYSBzdGFuZGFyZCBwYXJzZXIgZmlsZS4gIFRoZSByZXN0IGFyZSBjb3BpZWQgdmVyYmF0aW0gZnJvbQorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmJpc29uPC9zcGFuPjwvc2FtcD4ncyBpbnB1dC4gIFlvdSB3b3VsZCBsaWtlIGNvbXBpbGVyIGVycm9yIG1lc3NhZ2VzIGFuZAorc3ltYm9saWMgZGVidWdnZXJzIHRvIGJlIGFibGUgdG8gcmVmZXIgdG8gPGNvZGU+Ymlzb248L2NvZGU+J3MgaW5wdXQgZmlsZS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNsaW5lLTk5Ij48L2E+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmJpc29uPC9zcGFuPjwvc2FtcD4gb3IgYW55IHN1Y2ggcHJvZ3JhbSBjYW4gYXJyYW5nZSB0aGlzIGJ5IHdyaXRpbmcKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2xpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlcyBpbnRvIHRoZSBvdXRwdXQgZmlsZS4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2xpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYQorZGlyZWN0aXZlIHRoYXQgc3BlY2lmaWVzIHRoZSBvcmlnaW5hbCBsaW5lIG51bWJlciBhbmQgc291cmNlIGZpbGUgbmFtZQorZm9yIHN1YnNlcXVlbnQgaW5wdXQgaW4gdGhlIGN1cnJlbnQgcHJlcHJvY2Vzc29yIGlucHV0IGZpbGUuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jbGluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXMgdGhyZWUgdmFyaWFudHM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNsaW5lIDwvY29kZT48dmFyPmxpbmVudW08L3Zhcj48ZGQ+PHZhcj5saW5lbnVtPC92YXI+IGlzIGEgbm9uLW5lZ2F0aXZlIGRlY2ltYWwgaW50ZWdlciBjb25zdGFudC4gIEl0IHNwZWNpZmllcwordGhlIGxpbmUgbnVtYmVyIHdoaWNoIHNob3VsZCBiZSByZXBvcnRlZCBmb3IgdGhlIGZvbGxvd2luZyBsaW5lIG9mCitpbnB1dC4gIFN1YnNlcXVlbnQgbGluZXMgYXJlIGNvdW50ZWQgZnJvbSA8dmFyPmxpbmVudW08L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4jbGluZSA8L2NvZGU+PHZhcj5saW5lbnVtPC92YXI+IDx2YXI+ZmlsZW5hbWU8L3Zhcj48ZGQ+PHZhcj5saW5lbnVtPC92YXI+IGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgZmlyc3QgZm9ybSwgYW5kIGhhcyB0aGUgc2FtZQorZWZmZWN0LiAgSW4gYWRkaXRpb24sIDx2YXI+ZmlsZW5hbWU8L3Zhcj4gaXMgYSBzdHJpbmcgY29uc3RhbnQuICBUaGUKK2ZvbGxvd2luZyBsaW5lIGFuZCBhbGwgc3Vic2VxdWVudCBsaW5lcyBhcmUgcmVwb3J0ZWQgdG8gY29tZSBmcm9tIHRoZQorZmlsZSBpdCBzcGVjaWZpZXMsIHVudGlsIHNvbWV0aGluZyBlbHNlIGhhcHBlbnMgdG8gY2hhbmdlIHRoYXQuIAorPHZhcj5maWxlbmFtZTwvdmFyPiBpcyBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIG5vcm1hbCBydWxlcyBmb3IgYSBzdHJpbmcKK2NvbnN0YW50OiBiYWNrc2xhc2ggZXNjYXBlcyBhcmUgaW50ZXJwcmV0ZWQuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPlByZXZpb3VzIHZlcnNpb25zIG9mIENQUCBkaWQgbm90IGludGVycHJldCBlc2NhcGVzIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2xpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzs7Cit3ZSBoYXZlIGNoYW5nZWQgaXQgYmVjYXVzZSB0aGUgc3RhbmRhcmQgcmVxdWlyZXMgdGhleSBiZSBpbnRlcnByZXRlZCwKK2FuZCBtb3N0IG90aGVyIGNvbXBpbGVycyBkby4KKworICAgICA8YnI+PGR0Pjxjb2RlPiNsaW5lIDwvY29kZT48dmFyPmFueXRoaW5nIGVsc2U8L3Zhcj48ZGQ+PHZhcj5hbnl0aGluZyBlbHNlPC92YXI+IGlzIGNoZWNrZWQgZm9yIG1hY3JvIGNhbGxzLCB3aGljaCBhcmUgZXhwYW5kZWQuIAorVGhlIHJlc3VsdCBzaG91bGQgbWF0Y2ggb25lIG9mIHRoZSBhYm92ZSB0d28gZm9ybXMuIAorPC9kbD4KKworICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jbGluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmVzIGFsdGVyIHRoZSByZXN1bHRzIG9mIHRoZSA8Y29kZT5fX0ZJTEVfXzwvY29kZT4gYW5kCis8Y29kZT5fX0xJTkVfXzwvY29kZT4gcHJlZGVmaW5lZCBtYWNyb3MgZnJvbSB0aGF0IHBvaW50IG9uLiAgU2VlIDxhIGhyZWY9IlN0YW5kYXJkLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjU3RhbmRhcmQtUHJlZGVmaW5lZC1NYWNyb3MiPlN0YW5kYXJkIFByZWRlZmluZWQgTWFjcm9zPC9hPi4gIFRoZXkgZG8gbm90IGhhdmUgYW55IGVmZmVjdCBvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87J3MKK2lkZWEgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBjdXJyZW50IGZpbGUuICBUaGlzIGlzIGEgY2hhbmdlCitmcm9tIEdDQyAyLjk1LiAgUHJldmlvdXNseSwgYSBmaWxlIHJlYWRpbmcKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNsaW5lIDEgIi4uL3NyYy9ncmFtLnkiCisgICAgICNpbmNsdWRlICJncmFtLmgiCis8L3ByZT4KKyAgIDxwPndvdWxkIHNlYXJjaCBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdyYW0uaDwvc3Bhbj48L3NhbXA+IGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uLi9zcmM8L3NwYW4+PC9zYW1wPiwgdGhlbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPgorY2hhaW47IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGh5c2ljYWwgc291cmNlIGZpbGUgd291bGQgbm90IGJlCitzZWFyY2hlZC4gIEluIEdDQyAzLjAgYW5kIGxhdGVyLCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBub3QgYWZmZWN0ZWQgYnkKK3RoZSBwcmVzZW5jZSBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2xpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVmZXJyaW5nIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4KKworICAgPHA+V2UgbWFkZSB0aGlzIGNoYW5nZSBiZWNhdXNlIHRoZSBvbGQgYmVoYXZpb3IgY2F1c2VkIHByb2JsZW1zIHdoZW4KK2dlbmVyYXRlZCBzb3VyY2UgZmlsZXMgd2VyZSB0cmFuc3BvcnRlZCBiZXR3ZWVuIG1hY2hpbmVzLiAgRm9yIGluc3RhbmNlLAoraXQgaXMgY29tbW9uIHByYWN0aWNlIHRvIHNoaXAgZ2VuZXJhdGVkIHBhcnNlcnMgd2l0aCBhIHNvdXJjZSByZWxlYXNlLAorc28gdGhhdCBwZW9wbGUgYnVpbGRpbmcgdGhlIGRpc3RyaWJ1dGlvbiBkbyBub3QgbmVlZCB0byBoYXZlIHlhY2Mgb3IKK0Jpc29uIGluc3RhbGxlZC4gIFRoZXNlIGZpbGVzIGZyZXF1ZW50bHkgaGF2ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNsaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZXMKK3JlZmVycmluZyB0byB0aGUgZGlyZWN0b3J5IHRyZWUgb2YgdGhlIHN5c3RlbSB3aGVyZSB0aGUgZGlzdHJpYnV0aW9uIHdhcworY3JlYXRlZC4gIElmIEdDQyB0cmllcyB0byBzZWFyY2ggZm9yIGhlYWRlcnMgaW4gdGhvc2UgZGlyZWN0b3JpZXMsIHRoZQorYnVpbGQgaXMgbGlrZWx5IHRvIGZhaWwuCisKKyAgIDxwPlRoZSBuZXcgYmVoYXZpb3IgY2FuIGNhdXNlIGZhaWx1cmVzIHRvbywgaWYgdGhlIGdlbmVyYXRlZCBmaWxlIGlzIG5vdAoraW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGl0cyBzb3VyY2UgYW5kIGl0IGF0dGVtcHRzIHRvIGluY2x1ZGUgYSBoZWFkZXIKK3doaWNoIHdvdWxkIGJlIHZpc2libGUgc2VhcmNoaW5nIGZyb20gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorc291cmNlIGZpbGUuICBIb3dldmVyLCB0aGlzIHByb2JsZW0gaXMgZWFzaWx5IHNvbHZlZCB3aXRoIGFuIGFkZGl0aW9uYWwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gc3dpdGNoIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgZmFpbHVyZXMgY2F1c2VkIGJ5IHRoZSBvbGQKK3NlbWFudGljcyBjb3VsZCBzb21ldGltZXMgYmUgY29ycmVjdGVkIG9ubHkgYnkgZWRpdGluZyB0aGUgZ2VuZXJhdGVkCitmaWxlcywgd2hpY2ggaXMgZGlmZmljdWx0IGFuZCBlcnJvci1wcm9uZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9NYWNyby1Bcmd1bWVudHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvTWFjcm8tQXJndW1lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxYjY3OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvTWFjcm8tQXJndW1lbnRzLmh0bWwKQEAgLTAsMCArMSwxNDggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1hY3JvIEFyZ3VtZW50cyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiIHRpdGxlPSJNYWNyb3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MuaHRtbCNGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MiIHRpdGxlPSJGdW5jdGlvbi1saWtlIE1hY3JvcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlN0cmluZ2lmaWNhdGlvbi5odG1sI1N0cmluZ2lmaWNhdGlvbiIgdGl0bGU9IlN0cmluZ2lmaWNhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNYWNyby1Bcmd1bWVudHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3RyaW5naWZpY2F0aW9uLmh0bWwjU3RyaW5naWZpY2F0aW9uIj5TdHJpbmdpZmljYXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MuaHRtbCNGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MiPkZ1bmN0aW9uLWxpa2UgTWFjcm9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIj5NYWNyb3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjMgTWFjcm8gQXJndW1lbnRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXJndW1lbnRzLTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWFjcm9zLXdpdGgtYXJndW1lbnRzLTQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJndW1lbnRzLWluLW1hY3JvLWRlZmluaXRpb25zLTQ4Ij48L2E+CitGdW5jdGlvbi1saWtlIG1hY3JvcyBjYW4gdGFrZSA8ZGZuPmFyZ3VtZW50czwvZGZuPiwganVzdCBsaWtlIHRydWUgZnVuY3Rpb25zLiAKK1RvIGRlZmluZSBhIG1hY3JvIHRoYXQgdXNlcyBhcmd1bWVudHMsIHlvdSBpbnNlcnQgPGRmbj5wYXJhbWV0ZXJzPC9kZm4+CitiZXR3ZWVuIHRoZSBwYWlyIG9mIHBhcmVudGhlc2VzIGluIHRoZSBtYWNybyBkZWZpbml0aW9uIHRoYXQgbWFrZSB0aGUKK21hY3JvIGZ1bmN0aW9uLWxpa2UuICBUaGUgcGFyYW1ldGVycyBtdXN0IGJlIHZhbGlkIEMgaWRlbnRpZmllcnMsCitzZXBhcmF0ZWQgYnkgY29tbWFzIGFuZCBvcHRpb25hbGx5IHdoaXRlc3BhY2UuCisKKyAgIDxwPlRvIGludm9rZSBhIG1hY3JvIHRoYXQgdGFrZXMgYXJndW1lbnRzLCB5b3Ugd3JpdGUgdGhlIG5hbWUgb2YgdGhlIG1hY3JvCitmb2xsb3dlZCBieSBhIGxpc3Qgb2YgPGRmbj5hY3R1YWwgYXJndW1lbnRzPC9kZm4+IGluIHBhcmVudGhlc2VzLCBzZXBhcmF0ZWQKK2J5IGNvbW1hcy4gIFRoZSBpbnZvY2F0aW9uIG9mIHRoZSBtYWNybyBuZWVkIG5vdCBiZSByZXN0cmljdGVkIHRvIGEKK3NpbmdsZSBsb2dpY2FsIGxpbmUmbWRhc2g7aXQgY2FuIGNyb3NzIGFzIG1hbnkgbGluZXMgaW4gdGhlIHNvdXJjZSBmaWxlIGFzCit5b3Ugd2lzaC4gIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHlvdSBnaXZlIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZgorcGFyYW1ldGVycyBpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gIFdoZW4gdGhlIG1hY3JvIGlzIGV4cGFuZGVkLCBlYWNoCit1c2Ugb2YgYSBwYXJhbWV0ZXIgaW4gaXRzIGJvZHkgaXMgcmVwbGFjZWQgYnkgdGhlIHRva2VucyBvZiB0aGUKK2NvcnJlc3BvbmRpbmcgYXJndW1lbnQuICAoWW91IG5lZWQgbm90IHVzZSBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgaW4gdGhlCittYWNybyBib2R5LikKKworICAgPHA+QXMgYW4gZXhhbXBsZSwgaGVyZSBpcyBhIG1hY3JvIHRoYXQgY29tcHV0ZXMgdGhlIG1pbmltdW0gb2YgdHdvIG51bWVyaWMKK3ZhbHVlcywgYXMgaXQgaXMgZGVmaW5lZCBpbiBtYW55IEMgcHJvZ3JhbXMsIGFuZCBzb21lIHVzZXMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIG1pbihYLCBZKSAgKChYKSAmbHQ7IChZKSA/IChYKSA6IChZKSkKKyAgICAgICB4ID0gbWluKGEsIGIpOyAgICAgICAgICA9PSZndDsgIHggPSAoKGEpICZsdDsgKGIpID8gKGEpIDogKGIpKTsKKyAgICAgICB5ID0gbWluKDEsIDIpOyAgICAgICAgICA9PSZndDsgIHkgPSAoKDEpICZsdDsgKDIpID8gKDEpIDogKDIpKTsKKyAgICAgICB6ID0gbWluKGEgKyAyOCwgKnApOyAgICA9PSZndDsgIHogPSAoKGEgKyAyOCkgJmx0OyAoKnApID8gKGEgKyAyOCkgOiAoKnApKTsKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij4oSW4gdGhpcyBzbWFsbCBleGFtcGxlIHlvdSBjYW4gYWxyZWFkeSBzZWUgc2V2ZXJhbCBvZiB0aGUgZGFuZ2VycyBvZgorbWFjcm8gYXJndW1lbnRzLiAgU2VlIDxhIGhyZWY9Ik1hY3JvLVBpdGZhbGxzLmh0bWwjTWFjcm8tUGl0ZmFsbHMiPk1hY3JvIFBpdGZhbGxzPC9hPiwgZm9yIGRldGFpbGVkIGV4cGxhbmF0aW9ucy4pCisKKyAgIDxwPkxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gZWFjaCBhcmd1bWVudCBpcyBkcm9wcGVkLCBhbmQgYWxsCit3aGl0ZXNwYWNlIGJldHdlZW4gdGhlIHRva2VucyBvZiBhbiBhcmd1bWVudCBpcyByZWR1Y2VkIHRvIGEgc2luZ2xlCitzcGFjZS4gIFBhcmVudGhlc2VzIHdpdGhpbiBlYWNoIGFyZ3VtZW50IG11c3QgYmFsYW5jZTsgYSBjb21tYSB3aXRoaW4KK3N1Y2ggcGFyZW50aGVzZXMgZG9lcyBub3QgZW5kIHRoZSBhcmd1bWVudC4gIEhvd2V2ZXIsIHRoZXJlIGlzIG5vCityZXF1aXJlbWVudCBmb3Igc3F1YXJlIGJyYWNrZXRzIG9yIGJyYWNlcyB0byBiYWxhbmNlLCBhbmQgdGhleSBkbyBub3QKK3ByZXZlbnQgYSBjb21tYSBmcm9tIHNlcGFyYXRpbmcgYXJndW1lbnRzLiAgVGh1cywKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIG1hY3JvIChhcnJheVt4ID0geSwgeCArIDFdKQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPnBhc3NlcyB0d28gYXJndW1lbnRzIHRvIDxjb2RlPm1hY3JvPC9jb2RlPjogPGNvZGU+YXJyYXlbeCA9IHk8L2NvZGU+IGFuZCA8Y29kZT54ICsKKzFdPC9jb2RlPi4gIElmIHlvdSB3YW50IHRvIHN1cHBseSA8Y29kZT5hcnJheVt4ID0geSwgeCArIDFdPC9jb2RlPiBhcyBhbiBhcmd1bWVudCwKK3lvdSBjYW4gd3JpdGUgaXQgYXMgPGNvZGU+YXJyYXlbKHggPSB5LCB4ICsgMSldPC9jb2RlPiwgd2hpY2ggaXMgZXF1aXZhbGVudCBDCitjb2RlLgorCisgICA8cD5BbGwgYXJndW1lbnRzIHRvIGEgbWFjcm8gYXJlIGNvbXBsZXRlbHkgbWFjcm8tZXhwYW5kZWQgYmVmb3JlIHRoZXkgYXJlCitzdWJzdGl0dXRlZCBpbnRvIHRoZSBtYWNybyBib2R5LiAgQWZ0ZXIgc3Vic3RpdHV0aW9uLCB0aGUgY29tcGxldGUgdGV4dAoraXMgc2Nhbm5lZCBhZ2FpbiBmb3IgbWFjcm9zIHRvIGV4cGFuZCwgaW5jbHVkaW5nIHRoZSBhcmd1bWVudHMuICBUaGlzIHJ1bGUKK21heSBzZWVtIHN0cmFuZ2UsIGJ1dCBpdCBpcyBjYXJlZnVsbHkgZGVzaWduZWQgc28geW91IG5lZWQgbm90IHdvcnJ5CithYm91dCB3aGV0aGVyIGFueSBmdW5jdGlvbiBjYWxsIGlzIGFjdHVhbGx5IGEgbWFjcm8gaW52b2NhdGlvbi4gIFlvdSBjYW4KK3J1biBpbnRvIHRyb3VibGUgaWYgeW91IHRyeSB0byBiZSB0b28gY2xldmVyLCB0aG91Z2guICBTZWUgPGEgaHJlZj0iQXJndW1lbnQtUHJlc2Nhbi5odG1sI0FyZ3VtZW50LVByZXNjYW4iPkFyZ3VtZW50IFByZXNjYW48L2E+LCBmb3IgZGV0YWlsZWQgZGlzY3Vzc2lvbi4KKworICAgPHA+Rm9yIGV4YW1wbGUsIDxjb2RlPm1pbiAobWluIChhLCBiKSwgYyk8L2NvZGU+IGlzIGZpcnN0IGV4cGFuZGVkIHRvCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIG1pbiAoKChhKSAmbHQ7IChiKSA/IChhKSA6IChiKSksIChjKSkKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5hbmQgdGhlbiB0bworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgKCgoKGEpICZsdDsgKGIpID8gKGEpIDogKGIpKSkgJmx0OyAoYykKKyAgICAgID8gKCgoYSkgJmx0OyAoYikgPyAoYSkgOiAoYikpKQorICAgICAgOiAoYykpCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+KExpbmUgYnJlYWtzIHNob3duIGhlcmUgZm9yIGNsYXJpdHkgd291bGQgbm90IGFjdHVhbGx5IGJlIGdlbmVyYXRlZC4pCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWVtcHR5LW1hY3JvLWFyZ3VtZW50cy00OSI+PC9hPllvdSBjYW4gbGVhdmUgbWFjcm8gYXJndW1lbnRzIGVtcHR5OyB0aGlzIGlzIG5vdCBhbiBlcnJvciB0byB0aGUKK3ByZXByb2Nlc3NvciAoYnV0IG1hbnkgbWFjcm9zIHdpbGwgdGhlbiBleHBhbmQgdG8gaW52YWxpZCBjb2RlKS4gCitZb3UgY2Fubm90IGxlYXZlIG91dCBhcmd1bWVudHMgZW50aXJlbHk7IGlmIGEgbWFjcm8gdGFrZXMgdHdvIGFyZ3VtZW50cywKK3RoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgY29tbWEgYXQgdGhlIHRvcCBsZXZlbCBvZiBpdHMgYXJndW1lbnQgbGlzdC4gCitIZXJlIGFyZSBzb21lIHNpbGx5IGV4YW1wbGVzIHVzaW5nIDxjb2RlPm1pbjwvY29kZT46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBtaW4oLCBiKSAgICAgICAgPT0mZ3Q7ICgoICAgKSAmbHQ7IChiKSA/ICggICApIDogKGIpKQorICAgICBtaW4oYSwgKSAgICAgICAgPT0mZ3Q7ICgoYSAgKSAmbHQ7ICggKSA/IChhICApIDogKCApKQorICAgICBtaW4oLCkgICAgICAgICAgPT0mZ3Q7ICgoICAgKSAmbHQ7ICggKSA/ICggICApIDogKCApKQorICAgICBtaW4oKCwpLCkgICAgICAgPT0mZ3Q7ICgoKCwpKSAmbHQ7ICggKSA/ICgoLCkpIDogKCApKQorICAgICAKKyAgICAgbWluKCkgICAgICBlcnJvci0tJmd0OyBtYWNybyAibWluIiByZXF1aXJlcyAyIGFyZ3VtZW50cywgYnV0IG9ubHkgMSBnaXZlbgorICAgICBtaW4oLCwpICAgIGVycm9yLS0mZ3Q7IG1hY3JvICJtaW4iIHBhc3NlZCAzIGFyZ3VtZW50cywgYnV0IHRha2VzIGp1c3QgMgorPC9wcmU+CisgICA8cD5XaGl0ZXNwYWNlIGlzIG5vdCBhIHByZXByb2Nlc3NpbmcgdG9rZW4sIHNvIGlmIGEgbWFjcm8gPGNvZGU+Zm9vPC9jb2RlPiB0YWtlcworb25lIGFyZ3VtZW50LCA8Y29kZT5mb28mbmJzcDsoKTwhLS0gL0B3IC0tPjwvY29kZT4gYW5kIDxjb2RlPmZvbyZuYnNwOygmbmJzcDspPCEtLSAvQHcgLS0+PC9jb2RlPiBib3RoIHN1cHBseSBpdCBhbgorZW1wdHkgYXJndW1lbnQuICBQcmV2aW91cyBHTlUgcHJlcHJvY2Vzc29yIGltcGxlbWVudGF0aW9ucyBhbmQKK2RvY3VtZW50YXRpb24gd2VyZSBpbmNvcnJlY3Qgb24gdGhpcyBwb2ludCwgaW5zaXN0aW5nIHRoYXQgYQorZnVuY3Rpb24tbGlrZSBtYWNybyB0aGF0IHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IGJlIHBhc3NlZCBhIHNwYWNlIGlmIGFuCitlbXB0eSBhcmd1bWVudCB3YXMgcmVxdWlyZWQuCisKKyAgIDxwPk1hY3JvIHBhcmFtZXRlcnMgYXBwZWFyaW5nIGluc2lkZSBzdHJpbmcgbGl0ZXJhbHMgYXJlIG5vdCByZXBsYWNlZCBieQordGhlaXIgY29ycmVzcG9uZGluZyBhY3R1YWwgYXJndW1lbnRzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBmb28oeCkgeCwgIngiCisgICAgIGZvbyhiYXIpICAgICAgICA9PSZndDsgYmFyLCAieCIKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9NYWNyby1QaXRmYWxscy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9NYWNyby1QaXRmYWxscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNDQwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL01hY3JvLVBpdGZhbGxzLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWFjcm8gUGl0ZmFsbHMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIiB0aXRsZT0iTWFjcm9zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzLmh0bWwjRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzIiB0aXRsZT0iRGlyZWN0aXZlcyBXaXRoaW4gTWFjcm8gQXJndW1lbnRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1hY3JvLVBpdGZhbGxzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzLmh0bWwjRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzIj5EaXJlY3RpdmVzIFdpdGhpbiBNYWNybyBBcmd1bWVudHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiPk1hY3JvczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMTAgTWFjcm8gUGl0ZmFsbHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1wcm9ibGVtcy13aXRoLW1hY3Jvcy03MiI+PC9hPjxhIG5hbWU9ImluZGV4LXBpdGZhbGxzLW9mLW1hY3Jvcy03MyI+PC9hPgorSW4gdGhpcyBzZWN0aW9uIHdlIGRlc2NyaWJlIHNvbWUgc3BlY2lhbCBydWxlcyB0aGF0IGFwcGx5IHRvIG1hY3JvcyBhbmQKK21hY3JvIGV4cGFuc2lvbiwgYW5kIHBvaW50IG91dCBjZXJ0YWluIGNhc2VzIGluIHdoaWNoIHRoZSBydWxlcyBoYXZlCitjb3VudGVyLWludHVpdGl2ZSBjb25zZXF1ZW5jZXMgdGhhdCB5b3UgbXVzdCB3YXRjaCBvdXQgZm9yLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iTWlzbmVzdGluZy5odG1sI01pc25lc3RpbmciPk1pc25lc3Rpbmc8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJPcGVyYXRvci1QcmVjZWRlbmNlLVByb2JsZW1zLmh0bWwjT3BlcmF0b3ItUHJlY2VkZW5jZS1Qcm9ibGVtcyI+T3BlcmF0b3IgUHJlY2VkZW5jZSBQcm9ibGVtczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlN3YWxsb3dpbmctdGhlLVNlbWljb2xvbi5odG1sI1N3YWxsb3dpbmctdGhlLVNlbWljb2xvbiI+U3dhbGxvd2luZyB0aGUgU2VtaWNvbG9uPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iRHVwbGljYXRpb24tb2YtU2lkZS1FZmZlY3RzLmh0bWwjRHVwbGljYXRpb24tb2YtU2lkZS1FZmZlY3RzIj5EdXBsaWNhdGlvbiBvZiBTaWRlIEVmZmVjdHM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbCNTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MiPlNlbGYtUmVmZXJlbnRpYWwgTWFjcm9zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iQXJndW1lbnQtUHJlc2Nhbi5odG1sI0FyZ3VtZW50LVByZXNjYW4iPkFyZ3VtZW50IFByZXNjYW48L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJOZXdsaW5lcy1pbi1Bcmd1bWVudHMuaHRtbCNOZXdsaW5lcy1pbi1Bcmd1bWVudHMiPk5ld2xpbmVzIGluIEFyZ3VtZW50czwvYT4KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvTWFjcm9zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL01hY3Jvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YzFhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL01hY3Jvcy5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1hY3JvcyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkhlYWRlci1GaWxlcy5odG1sI0hlYWRlci1GaWxlcyIgdGl0bGU9IkhlYWRlciBGaWxlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyIgdGl0bGU9IkNvbmRpdGlvbmFscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNYWNyb3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjQ29uZGl0aW9uYWxzIj5Db25kaXRpb25hbHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJIZWFkZXItRmlsZXMuaHRtbCNIZWFkZXItRmlsZXMiPkhlYWRlciBGaWxlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4zIE1hY3JvczwvaDI+CisKKzxwPkEgPGRmbj5tYWNybzwvZGZuPiBpcyBhIGZyYWdtZW50IG9mIGNvZGUgd2hpY2ggaGFzIGJlZW4gZ2l2ZW4gYSBuYW1lLiAKK1doZW5ldmVyIHRoZSBuYW1lIGlzIHVzZWQsIGl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgbWFjcm8uIAorVGhlcmUgYXJlIHR3byBraW5kcyBvZiBtYWNyb3MuICBUaGV5IGRpZmZlciBtb3N0bHkgaW4gd2hhdCB0aGV5IGxvb2sKK2xpa2Ugd2hlbiB0aGV5IGFyZSB1c2VkLiAgPGRmbj5PYmplY3QtbGlrZTwvZGZuPiBtYWNyb3MgcmVzZW1ibGUgZGF0YSBvYmplY3RzCit3aGVuIHVzZWQsIDxkZm4+ZnVuY3Rpb24tbGlrZTwvZGZuPiBtYWNyb3MgcmVzZW1ibGUgZnVuY3Rpb24gY2FsbHMuCisKKyAgIDxwPllvdSBtYXkgZGVmaW5lIGFueSB2YWxpZCBpZGVudGlmaWVyIGFzIGEgbWFjcm8sIGV2ZW4gaWYgaXQgaXMgYSBDCitrZXl3b3JkLiAgVGhlIHByZXByb2Nlc3NvciBkb2VzIG5vdCBrbm93IGFueXRoaW5nIGFib3V0IGtleXdvcmRzLiAgVGhpcworY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugd2lzaCB0byBoaWRlIGEga2V5d29yZCBzdWNoIGFzIDxjb2RlPmNvbnN0PC9jb2RlPiBmcm9tIGFuCitvbGRlciBjb21waWxlciB0aGF0IGRvZXMgbm90IHVuZGVyc3RhbmQgaXQuICBIb3dldmVyLCB0aGUgcHJlcHJvY2Vzc29yCitvcGVyYXRvciA8Y29kZT5kZWZpbmVkPC9jb2RlPiAoc2VlIDxhIGhyZWY9IkRlZmluZWQuaHRtbCNEZWZpbmVkIj5EZWZpbmVkPC9hPikgY2FuIG5ldmVyIGJlIGRlZmluZWQgYXMgYQorbWFjcm8sIGFuZCBDKysncyBuYW1lZCBvcGVyYXRvcnMgKHNlZSA8YSBocmVmPSJDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMuaHRtbCNDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMiPkMrKyBOYW1lZCBPcGVyYXRvcnM8L2E+KSBjYW5ub3QgYmUKK21hY3JvcyB3aGVuIHlvdSBhcmUgY29tcGlsaW5nIEMrKy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik9iamVjdF8wMDJkbGlrZS1NYWNyb3MuaHRtbCNPYmplY3RfMDAyZGxpa2UtTWFjcm9zIj5PYmplY3QtbGlrZSBNYWNyb3M8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MuaHRtbCNGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MiPkZ1bmN0aW9uLWxpa2UgTWFjcm9zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iTWFjcm8tQXJndW1lbnRzLmh0bWwjTWFjcm8tQXJndW1lbnRzIj5NYWNybyBBcmd1bWVudHM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJTdHJpbmdpZmljYXRpb24uaHRtbCNTdHJpbmdpZmljYXRpb24iPlN0cmluZ2lmaWNhdGlvbjwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkNvbmNhdGVuYXRpb24uaHRtbCNDb25jYXRlbmF0aW9uIj5Db25jYXRlbmF0aW9uPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIj5WYXJpYWRpYyBNYWNyb3M8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJQcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1ByZWRlZmluZWQtTWFjcm9zIj5QcmVkZWZpbmVkIE1hY3JvczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9IlVuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zLmh0bWwjVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MiPlVuZGVmaW5pbmcgYW5kIFJlZGVmaW5pbmcgTWFjcm9zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzLmh0bWwjRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzIj5EaXJlY3RpdmVzIFdpdGhpbiBNYWNybyBBcmd1bWVudHM8L2E+Cis8bGk+PGEgaHJlZj0iTWFjcm8tUGl0ZmFsbHMuaHRtbCNNYWNyby1QaXRmYWxscyI+TWFjcm8gUGl0ZmFsbHM8L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL01pc25lc3RpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvTWlzbmVzdGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWNmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL01pc25lc3RpbmcuaHRtbApAQCAtMCwwICsxLDg0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NaXNuZXN0aW5nIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY3JvLVBpdGZhbGxzLmh0bWwjTWFjcm8tUGl0ZmFsbHMiIHRpdGxlPSJNYWNybyBQaXRmYWxscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik9wZXJhdG9yLVByZWNlZGVuY2UtUHJvYmxlbXMuaHRtbCNPcGVyYXRvci1QcmVjZWRlbmNlLVByb2JsZW1zIiB0aXRsZT0iT3BlcmF0b3IgUHJlY2VkZW5jZSBQcm9ibGVtcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNaXNuZXN0aW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9wZXJhdG9yLVByZWNlZGVuY2UtUHJvYmxlbXMuaHRtbCNPcGVyYXRvci1QcmVjZWRlbmNlLVByb2JsZW1zIj5PcGVyYXRvciBQcmVjZWRlbmNlIFByb2JsZW1zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjcm8tUGl0ZmFsbHMuaHRtbCNNYWNyby1QaXRmYWxscyI+TWFjcm8gUGl0ZmFsbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjEwLjEgTWlzbmVzdGluZzwvaDQ+CisKKzxwPldoZW4gYSBtYWNybyBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudHMsIHRoZSBhcmd1bWVudHMgYXJlIHN1YnN0aXR1dGVkCitpbnRvIHRoZSBtYWNybyBib2R5IGFuZCB0aGUgcmVzdWx0IGlzIGNoZWNrZWQsIHRvZ2V0aGVyIHdpdGggdGhlIHJlc3Qgb2YKK3RoZSBpbnB1dCBmaWxlLCBmb3IgbW9yZSBtYWNybyBjYWxscy4gIEl0IGlzIHBvc3NpYmxlIHRvIHBpZWNlIHRvZ2V0aGVyCithIG1hY3JvIGNhbGwgY29taW5nIHBhcnRpYWxseSBmcm9tIHRoZSBtYWNybyBib2R5IGFuZCBwYXJ0aWFsbHkgZnJvbSB0aGUKK2FyZ3VtZW50cy4gIEZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSB0d2ljZSh4KSAoMiooeCkpCisgICAgICNkZWZpbmUgY2FsbF93aXRoXzEoeCkgeCgxKQorICAgICBjYWxsX3dpdGhfMSAodHdpY2UpCisgICAgICAgICAgPT0mZ3Q7IHR3aWNlKDEpCisgICAgICAgICAgPT0mZ3Q7ICgyKigxKSkKKzwvcHJlPgorICAgPHA+TWFjcm8gZGVmaW5pdGlvbnMgZG8gbm90IGhhdmUgdG8gaGF2ZSBiYWxhbmNlZCBwYXJlbnRoZXNlcy4gIEJ5IHdyaXRpbmcKK2FuIHVuYmFsYW5jZWQgb3BlbiBwYXJlbnRoZXNpcyBpbiBhIG1hY3JvIGJvZHksIGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZQorYSBtYWNybyBjYWxsIHRoYXQgYmVnaW5zIGluc2lkZSB0aGUgbWFjcm8gYm9keSBidXQgZW5kcyBvdXRzaWRlIG9mIGl0LiAKK0ZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBzdHJhbmdlKGZpbGUpIGZwcmludGYgKGZpbGUsICIlcyAlZCIsCisgICAgIC4uLgorICAgICBzdHJhbmdlKHN0ZGVycikgcCwgMzUpCisgICAgICAgICAgPT0mZ3Q7IGZwcmludGYgKHN0ZGVyciwgIiVzICVkIiwgcCwgMzUpCis8L3ByZT4KKyAgIDxwPlRoZSBhYmlsaXR5IHRvIHBpZWNlIHRvZ2V0aGVyIGEgbWFjcm8gY2FsbCBjYW4gYmUgdXNlZnVsLCBidXQgdGhlIHVzZSBvZgordW5iYWxhbmNlZCBvcGVuIHBhcmVudGhlc2VzIGluIGEgbWFjcm8gYm9keSBpcyBqdXN0IGNvbmZ1c2luZywgYW5kCitzaG91bGQgYmUgYXZvaWRlZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9OZXdsaW5lcy1pbi1Bcmd1bWVudHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvTmV3bGluZXMtaW4tQXJndW1lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiMGI5YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvTmV3bGluZXMtaW4tQXJndW1lbnRzLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TmV3bGluZXMgaW4gQXJndW1lbnRzIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY3JvLVBpdGZhbGxzLmh0bWwjTWFjcm8tUGl0ZmFsbHMiIHRpdGxlPSJNYWNybyBQaXRmYWxscyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFyZ3VtZW50LVByZXNjYW4uaHRtbCNBcmd1bWVudC1QcmVzY2FuIiB0aXRsZT0iQXJndW1lbnQgUHJlc2NhbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJOZXdsaW5lcy1pbi1Bcmd1bWVudHMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBcmd1bWVudC1QcmVzY2FuLmh0bWwjQXJndW1lbnQtUHJlc2NhbiI+QXJndW1lbnQgUHJlc2NhbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY3JvLVBpdGZhbGxzLmh0bWwjTWFjcm8tUGl0ZmFsbHMiPk1hY3JvIFBpdGZhbGxzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xMC43IE5ld2xpbmVzIGluIEFyZ3VtZW50czwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW5ld2xpbmVzLWluLW1hY3JvLWFyZ3VtZW50cy04MiI+PC9hPgorVGhlIGludm9jYXRpb24gb2YgYSBmdW5jdGlvbi1saWtlIG1hY3JvIGNhbiBleHRlbmQgb3ZlciBtYW55IGxvZ2ljYWwKK2xpbmVzLiAgSG93ZXZlciwgaW4gdGhlIHByZXNlbnQgaW1wbGVtZW50YXRpb24sIHRoZSBlbnRpcmUgZXhwYW5zaW9uCitjb21lcyBvdXQgb24gb25lIGxpbmUuICBUaHVzIGxpbmUgbnVtYmVycyBlbWl0dGVkIGJ5IHRoZSBjb21waWxlciBvcgorZGVidWdnZXIgcmVmZXIgdG8gdGhlIGxpbmUgdGhlIGludm9jYXRpb24gc3RhcnRlZCBvbiwgd2hpY2ggbWlnaHQgYmUKK2RpZmZlcmVudCB0byB0aGUgbGluZSBjb250YWluaW5nIHRoZSBhcmd1bWVudCBjYXVzaW5nIHRoZSBwcm9ibGVtLgorCisgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgaWxsdXN0cmF0aW5nIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIGlnbm9yZV9zZWNvbmRfYXJnKGEsYixjKSBhOyBjCisgICAgIAorICAgICBpZ25vcmVfc2Vjb25kX2FyZyAoZm9vICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCBlcnJvcik7Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIHN5bnRheCBlcnJvciB0cmlnZ2VyZWQgYnkgdGhlIHRva2VucyA8Y29kZT5zeW50YXggZXJyb3I8L2NvZGU+IHJlc3VsdHMgaW4KK2FuIGVycm9yIG1lc3NhZ2UgY2l0aW5nIGxpbmUgdGhyZWUmbWRhc2g7dGhlIGxpbmUgb2YgaWdub3JlX3NlY29uZF9hcmcmbWRhc2g7CitldmVuIHRob3VnaCB0aGUgcHJvYmxlbWF0aWMgY29kZSBjb21lcyBmcm9tIGxpbmUgZml2ZS4KKworICAgPHA+V2UgY29uc2lkZXIgdGhpcyBhIGJ1ZywgYW5kIGludGVuZCB0byBmaXggaXQgaW4gdGhlIG5lYXIgZnV0dXJlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL09iamVjdF8wMDJkbGlrZS1NYWNyb3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT2JqZWN0XzAwMmRsaWtlLU1hY3Jvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNmMzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL09iamVjdF8wMDJkbGlrZS1NYWNyb3MuaHRtbApAQCAtMCwwICsxLDE1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T2JqZWN0LWxpa2UgTWFjcm9zIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY3Jvcy5odG1sI01hY3JvcyIgdGl0bGU9Ik1hY3JvcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZ1bmN0aW9uXzAwMmRsaWtlLU1hY3Jvcy5odG1sI0Z1bmN0aW9uXzAwMmRsaWtlLU1hY3JvcyIgdGl0bGU9IkZ1bmN0aW9uLWxpa2UgTWFjcm9zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik9iamVjdC1saWtlLU1hY3JvcyI+PC9hPgorPGEgbmFtZT0iT2JqZWN0XzAwMmRsaWtlLU1hY3JvcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MuaHRtbCNGdW5jdGlvbl8wMDJkbGlrZS1NYWNyb3MiPkZ1bmN0aW9uLWxpa2UgTWFjcm9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIj5NYWNyb3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjEgT2JqZWN0LWxpa2UgTWFjcm9zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtb2JqZWN0XzAwMmRsaWtlLW1hY3JvLTQxIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9saWMtY29uc3RhbnRzLTQyIj48L2E+PGEgbmFtZT0iaW5kZXgtbWFuaWZlc3QtY29uc3RhbnRzLTQzIj48L2E+CitBbiA8ZGZuPm9iamVjdC1saWtlIG1hY3JvPC9kZm4+IGlzIGEgc2ltcGxlIGlkZW50aWZpZXIgd2hpY2ggd2lsbCBiZSByZXBsYWNlZAorYnkgYSBjb2RlIGZyYWdtZW50LiAgSXQgaXMgY2FsbGVkIG9iamVjdC1saWtlIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBhCitkYXRhIG9iamVjdCBpbiBjb2RlIHRoYXQgdXNlcyBpdC4gIFRoZXkgYXJlIG1vc3QgY29tbW9ubHkgdXNlZCB0byBnaXZlCitzeW1ib2xpYyBuYW1lcyB0byBudW1lcmljIGNvbnN0YW50cy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNkZWZpbmUtNDQiPjwvYT5Zb3UgY3JlYXRlIG1hY3JvcyB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNkZWZpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZGVmaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzCitmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUgbWFjcm8gYW5kIHRoZW4gdGhlIHRva2VuIHNlcXVlbmNlIGl0IHNob3VsZAorYmUgYW4gYWJicmV2aWF0aW9uIGZvciwgd2hpY2ggaXMgdmFyaW91c2x5IHJlZmVycmVkIHRvIGFzIHRoZSBtYWNybydzCis8ZGZuPmJvZHk8L2Rmbj4sIDxkZm4+ZXhwYW5zaW9uPC9kZm4+IG9yIDxkZm4+cmVwbGFjZW1lbnQgbGlzdDwvZGZuPi4gIEZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBCVUZGRVJfU0laRSAxMDI0Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+ZGVmaW5lcyBhIG1hY3JvIG5hbWVkIDxjb2RlPkJVRkZFUl9TSVpFPC9jb2RlPiBhcyBhbiBhYmJyZXZpYXRpb24gZm9yIHRoZQordG9rZW4gPGNvZGU+MTAyNDwvY29kZT4uICBJZiBzb21ld2hlcmUgYWZ0ZXIgdGhpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNkZWZpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlCit0aGVyZSBjb21lcyBhIEMgc3RhdGVtZW50IG9mIHRoZSBmb3JtCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBmb28gPSAoY2hhciAqKSBtYWxsb2MgKEJVRkZFUl9TSVpFKTsKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij50aGVuIHRoZSBDIHByZXByb2Nlc3NvciB3aWxsIHJlY29nbml6ZSBhbmQgPGRmbj5leHBhbmQ8L2Rmbj4gdGhlIG1hY3JvCis8Y29kZT5CVUZGRVJfU0laRTwvY29kZT4uICBUaGUgQyBjb21waWxlciB3aWxsIHNlZSB0aGUgc2FtZSB0b2tlbnMgYXMgaXQgd291bGQKK2lmIHlvdSBoYWQgd3JpdHRlbgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZm9vID0gKGNoYXIgKikgbWFsbG9jICgxMDI0KTsKKzwvcHJlPgorICAgPHA+QnkgY29udmVudGlvbiwgbWFjcm8gbmFtZXMgYXJlIHdyaXR0ZW4gaW4gdXBwZXJjYXNlLiAgUHJvZ3JhbXMgYXJlCitlYXNpZXIgdG8gcmVhZCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHRlbGwgYXQgYSBnbGFuY2Ugd2hpY2ggbmFtZXMgYXJlCittYWNyb3MuCisKKyAgIDxwPlRoZSBtYWNybydzIGJvZHkgZW5kcyBhdCB0aGUgZW5kIG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNkZWZpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbGluZS4gIFlvdSBtYXkKK2NvbnRpbnVlIHRoZSBkZWZpbml0aW9uIG9udG8gbXVsdGlwbGUgbGluZXMsIGlmIG5lY2Vzc2FyeSwgdXNpbmcKK2JhY2tzbGFzaC1uZXdsaW5lLiAgV2hlbiB0aGUgbWFjcm8gaXMgZXhwYW5kZWQsIGhvd2V2ZXIsIGl0IHdpbGwgYWxsCitjb21lIG91dCBvbiBvbmUgbGluZS4gIEZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBOVU1CRVJTIDEsIFwKKyAgICAgICAgICAgICAgICAgICAgIDIsIFwKKyAgICAgICAgICAgICAgICAgICAgIDMKKyAgICAgaW50IHhbXSA9IHsgTlVNQkVSUyB9OworICAgICAgICAgID09Jmd0OyBpbnQgeFtdID0geyAxLCAyLCAzIH07Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIG1vc3QgY29tbW9uIHZpc2libGUgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyBzdXJwcmlzaW5nIGxpbmUgbnVtYmVycworaW4gZXJyb3IgbWVzc2FnZXMuCisKKyAgIDxwPlRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIG9uIHdoYXQgY2FuIGdvIGluIGEgbWFjcm8gYm9keSBwcm92aWRlZCBpdAorZGVjb21wb3NlcyBpbnRvIHZhbGlkIHByZXByb2Nlc3NpbmcgdG9rZW5zLiAgUGFyZW50aGVzZXMgbmVlZCBub3QKK2JhbGFuY2UsIGFuZCB0aGUgYm9keSBuZWVkIG5vdCByZXNlbWJsZSB2YWxpZCBDIGNvZGUuICAoSWYgaXQgZG9lcyBub3QsCit5b3UgbWF5IGdldCBlcnJvciBtZXNzYWdlcyBmcm9tIHRoZSBDIGNvbXBpbGVyIHdoZW4geW91IHVzZSB0aGUgbWFjcm8uKQorCisgICA8cD5UaGUgQyBwcmVwcm9jZXNzb3Igc2NhbnMgeW91ciBwcm9ncmFtIHNlcXVlbnRpYWxseS4gIE1hY3JvIGRlZmluaXRpb25zCit0YWtlIGVmZmVjdCBhdCB0aGUgcGxhY2UgeW91IHdyaXRlIHRoZW0uICBUaGVyZWZvcmUsIHRoZSBmb2xsb3dpbmcgaW5wdXQKK3RvIHRoZSBDIHByZXByb2Nlc3NvcgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZm9vID0gWDsKKyAgICAgI2RlZmluZSBYIDQKKyAgICAgYmFyID0gWDsKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5wcm9kdWNlcworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZm9vID0gWDsKKyAgICAgYmFyID0gNDsKKzwvcHJlPgorICAgPHA+V2hlbiB0aGUgcHJlcHJvY2Vzc29yIGV4cGFuZHMgYSBtYWNybyBuYW1lLCB0aGUgbWFjcm8ncyBleHBhbnNpb24KK3JlcGxhY2VzIHRoZSBtYWNybyBpbnZvY2F0aW9uLCB0aGVuIHRoZSBleHBhbnNpb24gaXMgZXhhbWluZWQgZm9yIG1vcmUKK21hY3JvcyB0byBleHBhbmQuICBGb3IgZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgVEFCTEVTSVpFIEJVRlNJWkUKKyAgICAgI2RlZmluZSBCVUZTSVpFIDEwMjQKKyAgICAgVEFCTEVTSVpFCisgICAgICAgICAgPT0mZ3Q7IEJVRlNJWkUKKyAgICAgICAgICA9PSZndDsgMTAyNAorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPjxjb2RlPlRBQkxFU0laRTwvY29kZT4gaXMgZXhwYW5kZWQgZmlyc3QgdG8gcHJvZHVjZSA8Y29kZT5CVUZTSVpFPC9jb2RlPiwgdGhlbiB0aGF0CittYWNybyBpcyBleHBhbmRlZCB0byBwcm9kdWNlIHRoZSBmaW5hbCByZXN1bHQsIDxjb2RlPjEwMjQ8L2NvZGU+LgorCisgICA8cD5Ob3RpY2UgdGhhdCA8Y29kZT5CVUZTSVpFPC9jb2RlPiB3YXMgbm90IGRlZmluZWQgd2hlbiA8Y29kZT5UQUJMRVNJWkU8L2NvZGU+IHdhcworZGVmaW5lZC4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNkZWZpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDxjb2RlPlRBQkxFU0laRTwvY29kZT4gdXNlcyBleGFjdGx5IHRoZQorZXhwYW5zaW9uIHlvdSBzcGVjaWZ5Jm1kYXNoO2luIHRoaXMgY2FzZSwgPGNvZGU+QlVGU0laRTwvY29kZT4mbWRhc2g7YW5kIGRvZXMgbm90CitjaGVjayB0byBzZWUgd2hldGhlciBpdCB0b28gY29udGFpbnMgbWFjcm8gbmFtZXMuICBPbmx5IHdoZW4geW91Cis8ZW0+dXNlPC9lbT4gPGNvZGU+VEFCTEVTSVpFPC9jb2RlPiBpcyB0aGUgcmVzdWx0IG9mIGl0cyBleHBhbnNpb24gc2Nhbm5lZCBmb3IKK21vcmUgbWFjcm8gbmFtZXMuCisKKyAgIDxwPlRoaXMgbWFrZXMgYSBkaWZmZXJlbmNlIGlmIHlvdSBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgPGNvZGU+QlVGU0laRTwvY29kZT4KK2F0IHNvbWUgcG9pbnQgaW4gdGhlIHNvdXJjZSBmaWxlLiAgPGNvZGU+VEFCTEVTSVpFPC9jb2RlPiwgZGVmaW5lZCBhcyBzaG93biwKK3dpbGwgYWx3YXlzIGV4cGFuZCB1c2luZyB0aGUgZGVmaW5pdGlvbiBvZiA8Y29kZT5CVUZTSVpFPC9jb2RlPiB0aGF0IGlzCitjdXJyZW50bHkgaW4gZWZmZWN0OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBCVUZTSVpFIDEwMjAKKyAgICAgI2RlZmluZSBUQUJMRVNJWkUgQlVGU0laRQorICAgICAjdW5kZWYgQlVGU0laRQorICAgICAjZGVmaW5lIEJVRlNJWkUgMzcKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5Ob3cgPGNvZGU+VEFCTEVTSVpFPC9jb2RlPiBleHBhbmRzIChpbiB0d28gc3RhZ2VzKSB0byA8Y29kZT4zNzwvY29kZT4uCisKKyAgIDxwPklmIHRoZSBleHBhbnNpb24gb2YgYSBtYWNybyBjb250YWlucyBpdHMgb3duIG5hbWUsIGVpdGhlciBkaXJlY3RseSBvcgordmlhIGludGVybWVkaWF0ZSBtYWNyb3MsIGl0IGlzIG5vdCBleHBhbmRlZCBhZ2FpbiB3aGVuIHRoZSBleHBhbnNpb24gaXMKK2V4YW1pbmVkIGZvciBtb3JlIG1hY3Jvcy4gIFRoaXMgcHJldmVudHMgaW5maW5pdGUgcmVjdXJzaW9uLiAKK1NlZSA8YSBocmVmPSJTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbCNTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MiPlNlbGYtUmVmZXJlbnRpYWwgTWFjcm9zPC9hPiwgZm9yIHRoZSBwcmVjaXNlIGRldGFpbHMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT2Jzb2xldGUtRmVhdHVyZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT2Jzb2xldGUtRmVhdHVyZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjNhMjYzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9PYnNvbGV0ZS1GZWF0dXJlcy5odG1sCkBAIC0wLDAgKzEsMTI5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PYnNvbGV0ZSBGZWF0dXJlcyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbXBsZW1lbnRhdGlvbi1EZXRhaWxzLmh0bWwjSW1wbGVtZW50YXRpb24tRGV0YWlscyIgdGl0bGU9IkltcGxlbWVudGF0aW9uIERldGFpbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbXBsZW1lbnRhdGlvbi1saW1pdHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1saW1pdHMiIHRpdGxlPSJJbXBsZW1lbnRhdGlvbiBsaW1pdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEaWZmZXJlbmNlcy1mcm9tLXByZXZpb3VzLXZlcnNpb25zLmh0bWwjRGlmZmVyZW5jZXMtZnJvbS1wcmV2aW91cy12ZXJzaW9ucyIgdGl0bGU9IkRpZmZlcmVuY2VzIGZyb20gcHJldmlvdXMgdmVyc2lvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT2Jzb2xldGUtRmVhdHVyZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGlmZmVyZW5jZXMtZnJvbS1wcmV2aW91cy12ZXJzaW9ucy5odG1sI0RpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMiPkRpZmZlcmVuY2VzIGZyb20gcHJldmlvdXMgdmVyc2lvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbXBsZW1lbnRhdGlvbi1saW1pdHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1saW1pdHMiPkltcGxlbWVudGF0aW9uIGxpbWl0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkltcGxlbWVudGF0aW9uLURldGFpbHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1EZXRhaWxzIj5JbXBsZW1lbnRhdGlvbiBEZXRhaWxzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTEuMyBPYnNvbGV0ZSBGZWF0dXJlczwvaDM+CisKKzxwPkNQUCBoYXMgc29tZSBmZWF0dXJlcyB3aGljaCBhcmUgcHJlc2VudCBtYWlubHkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorb2xkZXIgcHJvZ3JhbXMuICBXZSBkaXNjb3VyYWdlIHRoZWlyIHVzZSBpbiBuZXcgY29kZS4gIEluIHNvbWUgY2FzZXMsCit3ZSBwbGFuIHRvIHJlbW92ZSB0aGUgZmVhdHVyZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEdDQy4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4xMS4zLjEgQXNzZXJ0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFzc2VydGlvbnMtMTEzIj48L2E+Cis8ZGZuPkFzc2VydGlvbnM8L2Rmbj4gYXJlIGEgZGVwcmVjYXRlZCBhbHRlcm5hdGl2ZSB0byBtYWNyb3MgaW4gd3JpdGluZworY29uZGl0aW9uYWxzIHRvIHRlc3Qgd2hhdCBzb3J0IG9mIGNvbXB1dGVyIG9yIHN5c3RlbSB0aGUgY29tcGlsZWQKK3Byb2dyYW0gd2lsbCBydW4gb24uICBBc3NlcnRpb25zIGFyZSB1c3VhbGx5IHByZWRlZmluZWQsIGJ1dCB5b3UgY2FuCitkZWZpbmUgdGhlbSB3aXRoIHByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcyBvciBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKworICAgPHA+QXNzZXJ0aW9ucyB3ZXJlIGludGVuZGVkIHRvIHByb3ZpZGUgYSBtb3JlIHN5c3RlbWF0aWMgd2F5IHRvIGRlc2NyaWJlCit0aGUgY29tcGlsZXIncyB0YXJnZXQgc3lzdGVtIGFuZCB3ZSBhZGRlZCB0aGVtIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKK2V4aXN0aW5nIGNvbXBpbGVycy4gIEluIHByYWN0aWNlIHRoZXkgYXJlIGp1c3QgYXMgdW5wcmVkaWN0YWJsZSBhcyB0aGUKK3N5c3RlbS1zcGVjaWZpYyBwcmVkZWZpbmVkIG1hY3Jvcy4gIEluIGFkZGl0aW9uLCB0aGV5IGFyZSBub3QgcGFydCBvZgorYW55IHN0YW5kYXJkLCBhbmQgb25seSBhIGZldyBjb21waWxlcnMgc3VwcG9ydCB0aGVtLiAKK1RoZXJlZm9yZSwgdGhlIHVzZSBvZiBhc3NlcnRpb25zIGlzIDxzdHJvbmc+bGVzczwvc3Ryb25nPiBwb3J0YWJsZSB0aGFuIHRoZSB1c2UKK29mIHN5c3RlbS1zcGVjaWZpYyBwcmVkZWZpbmVkIG1hY3Jvcy4gIFdlIHJlY29tbWVuZCB5b3UgZG8gbm90IHVzZSB0aGVtIGF0CithbGwuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXByZWRpY2F0ZXMtMTE0Ij48L2E+QW4gYXNzZXJ0aW9uIGxvb2tzIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICM8dmFyPnByZWRpY2F0ZTwvdmFyPiAoPHZhcj5hbnN3ZXI8L3Zhcj4pCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+PHZhcj5wcmVkaWNhdGU8L3Zhcj4gbXVzdCBiZSBhIHNpbmdsZSBpZGVudGlmaWVyLiAgPHZhcj5hbnN3ZXI8L3Zhcj4gY2FuIGJlIGFueQorc2VxdWVuY2Ugb2YgdG9rZW5zOyBhbGwgY2hhcmFjdGVycyBhcmUgc2lnbmlmaWNhbnQgZXhjZXB0IGZvciBsZWFkaW5nCithbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYW5kIGRpZmZlcmVuY2VzIGluIGludGVybmFsIHdoaXRlc3BhY2UKK3NlcXVlbmNlcyBhcmUgaWdub3JlZC4gIChUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHJ1bGVzIGdvdmVybmluZyBtYWNybworcmVkZWZpbml0aW9uLikgIFRodXMsIDxjb2RlPih4ICsgeSk8L2NvZGU+IGlzIGRpZmZlcmVudCBmcm9tIDxjb2RlPih4K3kpPC9jb2RlPiBidXQKK2VxdWl2YWxlbnQgdG8gPGNvZGU+KCZuYnNwO3gmbmJzcDsrJm5ic3A7eSZuYnNwOyk8IS0tIC9AdyAtLT48L2NvZGU+LiAgUGFyZW50aGVzZXMgZG8gbm90IG5lc3QgaW5zaWRlIGFuCithbnN3ZXIuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXRlc3RpbmctcHJlZGljYXRlcy0xMTUiPjwvYT5UbyB0ZXN0IGFuIGFzc2VydGlvbiwgeW91IHdyaXRlIGl0IGluIGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgRm9yIGV4YW1wbGUsIHRoaXMKK2NvbmRpdGlvbmFsIHN1Y2NlZWRzIGlmIGVpdGhlciA8Y29kZT52YXg8L2NvZGU+IG9yIDxjb2RlPm5zMTYwMDA8L2NvZGU+IGhhcyBiZWVuCithc3NlcnRlZCBhcyBhbiBhbnN3ZXIgZm9yIDxjb2RlPm1hY2hpbmU8L2NvZGU+LgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2lmICNtYWNoaW5lICh2YXgpIHx8ICNtYWNoaW5lIChuczE2MDAwKQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPllvdSBjYW4gdGVzdCB3aGV0aGVyIDxlbT5hbnk8L2VtPiBhbnN3ZXIgaXMgYXNzZXJ0ZWQgZm9yIGEgcHJlZGljYXRlIGJ5CitvbWl0dGluZyB0aGUgYW5zd2VyIGluIHRoZSBjb25kaXRpb25hbDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNpZiAjbWFjaGluZQorPC9wcmU+CisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyM2Fzc2VydC0xMTYiPjwvYT5Bc3NlcnRpb25zIGFyZSBtYWRlIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2Fzc2VydDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUuICBJdHMgc29sZQorYXJndW1lbnQgaXMgdGhlIGFzc2VydGlvbiB0byBtYWtlLCB3aXRob3V0IHRoZSBsZWFkaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aGF0CitpZGVudGlmaWVzIGFzc2VydGlvbnMgaW4gY29uZGl0aW9uYWxzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2Fzc2VydCA8dmFyPnByZWRpY2F0ZTwvdmFyPiAoPHZhcj5hbnN3ZXI8L3Zhcj4pCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+WW91IG1heSBtYWtlIHNldmVyYWwgYXNzZXJ0aW9ucyB3aXRoIHRoZSBzYW1lIHByZWRpY2F0ZSBhbmQgZGlmZmVyZW50CithbnN3ZXJzLiAgU3Vic2VxdWVudCBhc3NlcnRpb25zIGRvIG5vdCBvdmVycmlkZSBwcmV2aW91cyBvbmVzIGZvciB0aGUKK3NhbWUgcHJlZGljYXRlLiAgQWxsIHRoZSBhbnN3ZXJzIGZvciBhbnkgZ2l2ZW4gcHJlZGljYXRlIGFyZQorc2ltdWx0YW5lb3VzbHkgdHJ1ZS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtYXNzZXJ0aW9uc18wMDJjLWNhbmNlbGluZy0xMTciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyM3VuYXNzZXJ0LTExOCI+PC9hPkFzc2VydGlvbnMgY2FuIGJlIGNhbmNlbGVkIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3VuYXNzZXJ0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZS4gIEl0CitoYXMgdGhlIHNhbWUgc3ludGF4IGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2Fzc2VydDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEluIHRoYXQgZm9ybSBpdCBjYW5jZWxzIG9ubHkgdGhlCithbnN3ZXIgd2hpY2ggd2FzIHNwZWNpZmllZCBvbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jdW5hc3NlcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbGluZTsgb3RoZXIgYW5zd2VycworZm9yIHRoYXQgcHJlZGljYXRlIHJlbWFpbiB0cnVlLiAgWW91IGNhbiBjYW5jZWwgYW4gZW50aXJlIHByZWRpY2F0ZSBieQorbGVhdmluZyBvdXQgdGhlIGFuc3dlcjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICN1bmFzc2VydCA8dmFyPnByZWRpY2F0ZTwvdmFyPgorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkluIGVpdGhlciBmb3JtLCBpZiBubyBzdWNoIGFzc2VydGlvbiBoYXMgYmVlbiBtYWRlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiN1bmFzc2VydDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXMKK25vIGVmZmVjdC4KKworICAgPHA+WW91IGNhbiBhbHNvIG1ha2Ugb3IgY2FuY2VsIGFzc2VydGlvbnMgdXNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuIAorU2VlIDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9PbmNlXzAwMmRPbmx5LUhlYWRlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjZGVkNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T25jZS1Pbmx5IEhlYWRlcnMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIiB0aXRsZT0iSGVhZGVyIEZpbGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2VhcmNoLVBhdGguaHRtbCNTZWFyY2gtUGF0aCIgdGl0bGU9IlNlYXJjaCBQYXRoIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQWx0ZXJuYXRpdmVzLXRvLVdyYXBwZXItXzAwMjNpZm5kZWYuaHRtbCNBbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZiIgdGl0bGU9IkFsdGVybmF0aXZlcyB0byBXcmFwcGVyICNpZm5kZWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT25jZS1Pbmx5LUhlYWRlcnMiPjwvYT4KKzxhIG5hbWU9Ik9uY2VfMDAyZE9ubHktSGVhZGVycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZi5odG1sI0FsdGVybmF0aXZlcy10by1XcmFwcGVyLV8wMDIzaWZuZGVmIj5BbHRlcm5hdGl2ZXMgdG8gV3JhcHBlciAjaWZuZGVmPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU2VhcmNoLVBhdGguaHRtbCNTZWFyY2gtUGF0aCI+U2VhcmNoIFBhdGg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJIZWFkZXItRmlsZXMuaHRtbCNIZWFkZXItRmlsZXMiPkhlYWRlciBGaWxlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuNCBPbmNlLU9ubHkgSGVhZGVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXJlcGVhdGVkLWluY2x1c2lvbi0yOCI+PC9hPjxhIG5hbWU9ImluZGV4LWluY2x1ZGluZy1qdXN0LW9uY2UtMjkiPjwvYT48YSBuYW1lPSJpbmRleC13cmFwcGVyLV8wMDQwY29kZV8wMDdiXzAwMjNpZm5kZWZfMDA3ZC0zMCI+PC9hPgorSWYgYSBoZWFkZXIgZmlsZSBoYXBwZW5zIHRvIGJlIGluY2x1ZGVkIHR3aWNlLCB0aGUgY29tcGlsZXIgd2lsbCBwcm9jZXNzCitpdHMgY29udGVudHMgdHdpY2UuICBUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGNhdXNlIGFuIGVycm9yLCBlLmcuIHdoZW4gdGhlCitjb21waWxlciBzZWVzIHRoZSBzYW1lIHN0cnVjdHVyZSBkZWZpbml0aW9uIHR3aWNlLiAgRXZlbiBpZiBpdCBkb2VzIG5vdCwKK2l0IHdpbGwgY2VydGFpbmx5IHdhc3RlIHRpbWUuCisKKyAgIDxwPlRoZSBzdGFuZGFyZCB3YXkgdG8gcHJldmVudCB0aGlzIGlzIHRvIGVuY2xvc2UgdGhlIGVudGlyZSByZWFsIGNvbnRlbnRzCitvZiB0aGUgZmlsZSBpbiBhIGNvbmRpdGlvbmFsLCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAvKiBGaWxlIGZvby4gICovCisgICAgICNpZm5kZWYgRklMRV9GT09fU0VFTgorICAgICAjZGVmaW5lIEZJTEVfRk9PX1NFRU4KKyAgICAgCisgICAgIDx2YXI+dGhlIGVudGlyZSBmaWxlPC92YXI+CisgICAgIAorICAgICAjZW5kaWYgLyogIUZJTEVfRk9PX1NFRU4gKi8KKzwvcHJlPgorICAgPHA+VGhpcyBjb25zdHJ1Y3QgaXMgY29tbW9ubHkga25vd24gYXMgYSA8ZGZuPndyYXBwZXIgI2lmbmRlZjwvZGZuPi4gCitXaGVuIHRoZSBoZWFkZXIgaXMgaW5jbHVkZWQgYWdhaW4sIHRoZSBjb25kaXRpb25hbCB3aWxsIGJlIGZhbHNlLAorYmVjYXVzZSA8Y29kZT5GSUxFX0ZPT19TRUVOPC9jb2RlPiBpcyBkZWZpbmVkLiAgVGhlIHByZXByb2Nlc3NvciB3aWxsIHNraXAKK292ZXIgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZmlsZSwgYW5kIHRoZSBjb21waWxlciB3aWxsIG5vdCBzZWUgaXQKK3R3aWNlLgorCisgICA8cD5DUFAgb3B0aW1pemVzIGV2ZW4gZnVydGhlci4gIEl0IHJlbWVtYmVycyB3aGVuIGEgaGVhZGVyIGZpbGUgaGFzIGEKK3dyYXBwZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWZuZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSWYgYSBzdWJzZXF1ZW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3BlY2lmaWVzIHRoYXQKK2hlYWRlciwgYW5kIHRoZSBtYWNybyBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWZuZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHN0aWxsIGRlZmluZWQsIGl0IGRvZXMKK25vdCBib3RoZXIgdG8gcmVzY2FuIHRoZSBmaWxlIGF0IGFsbC4KKworICAgPHA+WW91IGNhbiBwdXQgY29tbWVudHMgb3V0c2lkZSB0aGUgd3JhcHBlci4gIFRoZXkgd2lsbCBub3QgaW50ZXJmZXJlIHdpdGgKK3RoaXMgb3B0aW1pemF0aW9uLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1jb250cm9sbGluZy1tYWNyby0zMSI+PC9hPjxhIG5hbWU9ImluZGV4LWd1YXJkLW1hY3JvLTMyIj48L2E+VGhlIG1hY3JvIDxjb2RlPkZJTEVfRk9PX1NFRU48L2NvZGU+IGlzIGNhbGxlZCB0aGUgPGRmbj5jb250cm9sbGluZyBtYWNybzwvZGZuPiBvcgorPGRmbj5ndWFyZCBtYWNybzwvZGZuPi4gIEluIGEgdXNlciBoZWFkZXIgZmlsZSwgdGhlIG1hY3JvIG5hbWUgc2hvdWxkIG5vdAorYmVnaW4gd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl88L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJbiBhIHN5c3RlbSBoZWFkZXIgZmlsZSwgaXQgc2hvdWxkIGJlZ2luIHdpdGgKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X188L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdXNlciBwcm9ncmFtcy4gIEluIGFueSBraW5kIG9mIGhlYWRlcgorZmlsZSwgdGhlIG1hY3JvIG5hbWUgc2hvdWxkIGNvbnRhaW4gdGhlIG5hbWUgb2YgdGhlIGZpbGUgYW5kIHNvbWUKK2FkZGl0aW9uYWwgdGV4dCwgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgaGVhZGVyIGZpbGVzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL09wZXJhdG9yLVByZWNlZGVuY2UtUHJvYmxlbXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT3BlcmF0b3ItUHJlY2VkZW5jZS1Qcm9ibGVtcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNmUxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL09wZXJhdG9yLVByZWNlZGVuY2UtUHJvYmxlbXMuaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3BlcmF0b3IgUHJlY2VkZW5jZSBQcm9ibGVtcyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIiB0aXRsZT0iTWFjcm8gUGl0ZmFsbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNaXNuZXN0aW5nLmh0bWwjTWlzbmVzdGluZyIgdGl0bGU9Ik1pc25lc3RpbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTd2FsbG93aW5nLXRoZS1TZW1pY29sb24uaHRtbCNTd2FsbG93aW5nLXRoZS1TZW1pY29sb24iIHRpdGxlPSJTd2FsbG93aW5nIHRoZSBTZW1pY29sb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3BlcmF0b3ItUHJlY2VkZW5jZS1Qcm9ibGVtcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTd2FsbG93aW5nLXRoZS1TZW1pY29sb24uaHRtbCNTd2FsbG93aW5nLXRoZS1TZW1pY29sb24iPlN3YWxsb3dpbmcgdGhlIFNlbWljb2xvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1pc25lc3RpbmcuaHRtbCNNaXNuZXN0aW5nIj5NaXNuZXN0aW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjcm8tUGl0ZmFsbHMuaHRtbCNNYWNyby1QaXRmYWxscyI+TWFjcm8gUGl0ZmFsbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjEwLjIgT3BlcmF0b3IgUHJlY2VkZW5jZSBQcm9ibGVtczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXBhcmVudGhlc2VzLWluLW1hY3JvLWJvZGllcy03NCI+PC9hPgorWW91IG1heSBoYXZlIG5vdGljZWQgdGhhdCBpbiBtb3N0IG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGV4YW1wbGVzIHNob3duCithYm92ZSwgZWFjaCBvY2N1cnJlbmNlIG9mIGEgbWFjcm8gYXJndW1lbnQgbmFtZSBoYWQgcGFyZW50aGVzZXMgYXJvdW5kCitpdC4gIEluIGFkZGl0aW9uLCBhbm90aGVyIHBhaXIgb2YgcGFyZW50aGVzZXMgdXN1YWxseSBzdXJyb3VuZCB0aGUKK2VudGlyZSBtYWNybyBkZWZpbml0aW9uLiAgSGVyZSBpcyB3aHkgaXQgaXMgYmVzdCB0byB3cml0ZSBtYWNyb3MgdGhhdAord2F5LgorCisgICA8cD5TdXBwb3NlIHlvdSBkZWZpbmUgYSBtYWNybyBhcyBmb2xsb3dzLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBjZWlsX2Rpdih4LCB5KSAoeCArIHkgLSAxKSAvIHkKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aG9zZSBwdXJwb3NlIGlzIHRvIGRpdmlkZSwgcm91bmRpbmcgdXAuICAoT25lIHVzZSBmb3IgdGhpcyBvcGVyYXRpb24gaXMKK3RvIGNvbXB1dGUgaG93IG1hbnkgPGNvZGU+aW50PC9jb2RlPiBvYmplY3RzIGFyZSBuZWVkZWQgdG8gaG9sZCBhIGNlcnRhaW4KK251bWJlciBvZiA8Y29kZT5jaGFyPC9jb2RlPiBvYmplY3RzLikgIFRoZW4gc3VwcG9zZSBpdCBpcyB1c2VkIGFzIGZvbGxvd3M6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhID0gY2VpbF9kaXYgKGIgJmFtcDsgYywgc2l6ZW9mIChpbnQpKTsKKyAgICAgICAgICA9PSZndDsgYSA9IChiICZhbXA7IGMgKyBzaXplb2YgKGludCkgLSAxKSAvIHNpemVvZiAoaW50KTsKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGlzIGRvZXMgbm90IGRvIHdoYXQgaXMgaW50ZW5kZWQuICBUaGUgb3BlcmF0b3ItcHJlY2VkZW5jZSBydWxlcyBvZgorQyBtYWtlIGl0IGVxdWl2YWxlbnQgdG8gdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGEgPSAoYiAmYW1wOyAoYyArIHNpemVvZiAoaW50KSAtIDEpKSAvIHNpemVvZiAoaW50KTsKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5XaGF0IHdlIHdhbnQgaXMgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGEgPSAoKGIgJmFtcDsgYykgKyBzaXplb2YgKGludCkgLSAxKSkgLyBzaXplb2YgKGludCk7Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+RGVmaW5pbmcgdGhlIG1hY3JvIGFzCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIGNlaWxfZGl2KHgsIHkpICgoeCkgKyAoeSkgLSAxKSAvICh5KQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPnByb3ZpZGVzIHRoZSBkZXNpcmVkIHJlc3VsdC4KKworICAgPHA+VW5pbnRlbmRlZCBncm91cGluZyBjYW4gcmVzdWx0IGluIGFub3RoZXIgd2F5LiAgQ29uc2lkZXIgPGNvZGU+c2l6ZW9mCitjZWlsX2RpdigxLCAyKTwvY29kZT4uICBUaGF0IGhhcyB0aGUgYXBwZWFyYW5jZSBvZiBhIEMgZXhwcmVzc2lvbiB0aGF0IHdvdWxkCitjb21wdXRlIHRoZSBzaXplIG9mIHRoZSB0eXBlIG9mIDxjb2RlPmNlaWxfZGl2ICgxLCAyKTwvY29kZT4sIGJ1dCBpbiBmYWN0IGl0CittZWFucyBzb21ldGhpbmcgdmVyeSBkaWZmZXJlbnQuICBIZXJlIGlzIHdoYXQgaXQgZXhwYW5kcyB0bzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHNpemVvZiAoKDEpICsgKDIpIC0gMSkgLyAoMikKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGlzIHdvdWxkIHRha2UgdGhlIHNpemUgb2YgYW4gaW50ZWdlciBhbmQgZGl2aWRlIGl0IGJ5IHR3by4gIFRoZQorcHJlY2VkZW5jZSBydWxlcyBoYXZlIHB1dCB0aGUgZGl2aXNpb24gb3V0c2lkZSB0aGUgPGNvZGU+c2l6ZW9mPC9jb2RlPiB3aGVuIGl0Cit3YXMgaW50ZW5kZWQgdG8gYmUgaW5zaWRlLgorCisgICA8cD5QYXJlbnRoZXNlcyBhcm91bmQgdGhlIGVudGlyZSBtYWNybyBkZWZpbml0aW9uIHByZXZlbnQgc3VjaCBwcm9ibGVtcy4gCitIZXJlLCB0aGVuLCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGRlZmluZSA8Y29kZT5jZWlsX2RpdjwvY29kZT46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIGNlaWxfZGl2KHgsIHkpICgoKHgpICsgKHkpIC0gMSkgLyAoeSkpCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT3B0aW9uLUluZGV4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL09wdGlvbi1JbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNzFjYjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL09wdGlvbi1JbmRleC5odG1sCkBAIC0wLDAgKzEsMTQ0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PcHRpb24gSW5kZXggLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbmRleC1vZi1EaXJlY3RpdmVzLmh0bWwjSW5kZXgtb2YtRGlyZWN0aXZlcyIgdGl0bGU9IkluZGV4IG9mIERpcmVjdGl2ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb25jZXB0LUluZGV4Lmh0bWwjQ29uY2VwdC1JbmRleCIgdGl0bGU9IkNvbmNlcHQgSW5kZXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3B0aW9uLUluZGV4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvbmNlcHQtSW5kZXguaHRtbCNDb25jZXB0LUluZGV4Ij5Db25jZXB0IEluZGV4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5kZXgtb2YtRGlyZWN0aXZlcy5odG1sI0luZGV4LW9mLURpcmVjdGl2ZXMiPkluZGV4IG9mIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+T3B0aW9uIEluZGV4PC9oMj4KKworPHAgY2xhc3M9Im5vaW5kZW50Ij5DUFAncyBjb21tYW5kIGxpbmUgb3B0aW9ucyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBpbmRleGVkIGhlcmUKK3dpdGhvdXQgYW55IGluaXRpYWwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS08L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKworCis8dWwgY2xhc3M9ImluZGV4LW9wIiBjb21wYWN0PgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1BLTE4NyI+PGNvZGU+QTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1hbnNpLTE1NSI+PGNvZGU+YW5zaTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1DLTE5NCI+PGNvZGU+QzwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LUNfMDA1ZklOQ0xVREVfMDA1ZlBBVEgtMjA1Ij48Y29kZT5DX0lOQ0xVREVfUEFUSDwvY29kZT48L2E+OiA8YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LUNQQVRILTIwNCI+PGNvZGU+Q1BBVEg8L2NvZGU+PC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1DUExVU18wMDVmSU5DTFVERV8wMDVmUEFUSC0yMDYiPjxjb2RlPkNQTFVTX0lOQ0xVREVfUEFUSDwvY29kZT48L2E+OiA8YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1ELTEyNSI+PGNvZGU+RDwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1kRC0xODkiPjxjb2RlPmREPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjaW5kZXgtREVQRU5ERU5DSUVTXzAwNWZPVVRQVVQtMjA4Ij48Y29kZT5ERVBFTkRFTkNJRVNfT1VUUFVUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWRJLTE5MSI+PGNvZGU+ZEk8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZE0tMTg4Ij48Y29kZT5kTTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1kTi0xOTAiPjxjb2RlPmROPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWRVLTE5MiI+PGNvZGU+ZFU8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZmRlYnVnXzAwMmRjcHAtMTc2Ij48Y29kZT5mZGVidWctY3BwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWZkaXJlY3RpdmVzXzAwMmRvbmx5LTE3MCI+PGNvZGU+ZmRpcmVjdGl2ZXMtb25seTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1mZG9sbGFyc18wMDJkaW5fMDAyZGlkZW50aWZpZXJzLTE3MSI+PGNvZGU+ZmRvbGxhcnMtaW4taWRlbnRpZmllcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZmV4ZWNfMDAyZGNoYXJzZXQtMTc4Ij48Y29kZT5mZXhlYy1jaGFyc2V0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWZleHRlbmRlZF8wMDJkaWRlbnRpZmllcnMtMTcyIj48Y29kZT5mZXh0ZW5kZWQtaWRlbnRpZmllcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZmlucHV0XzAwMmRjaGFyc2V0LTE4MiI+PGNvZGU+ZmlucHV0LWNoYXJzZXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZm5vXzAwMmRjYW5vbmljYWxfMDAyZHN5c3RlbV8wMDJkaGVhZGVycy0xNzMiPjxjb2RlPmZuby1jYW5vbmljYWwtc3lzdGVtLWhlYWRlcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZm5vXzAwMmRzaG93XzAwMmRjb2x1bW4tMTg2Ij48Y29kZT5mbm8tc2hvdy1jb2x1bW48L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZm5vXzAwMmR3b3JraW5nXzAwMmRkaXJlY3RvcnktMTg1Ij48Y29kZT5mbm8td29ya2luZy1kaXJlY3Rvcnk8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZnByZXByb2Nlc3NlZC0xNzQiPjxjb2RlPmZwcmVwcm9jZXNzZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtZnRhYnN0b3AtMTc1Ij48Y29kZT5mdGFic3RvcDwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1mdHJhY2tfMDAyZG1hY3JvXzAwMmRleHBhbnNpb24tMTc3Ij48Y29kZT5mdHJhY2stbWFjcm8tZXhwYW5zaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWZ3aWRlXzAwMmRleGVjXzAwMmRjaGFyc2V0LTE4MCI+PGNvZGU+ZndpZGUtZXhlYy1jaGFyc2V0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWZ3b3JraW5nXzAwMmRkaXJlY3RvcnktMTg0Ij48Y29kZT5md29ya2luZy1kaXJlY3Rvcnk8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtSC0yMDEiPjxjb2RlPkg8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtaGVscC0xOTgiPjxjb2RlPmhlbHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtSS0xMjgiPjxjb2RlPkk8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtSV8wMDJkLTE1NyI+PGNvZGU+SS08L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtaWRpcmFmdGVyLTE2MiI+PGNvZGU+aWRpcmFmdGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWltYWNyb3MtMTYxIj48Y29kZT5pbWFjcm9zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWltdWx0aWxpYi0xNjciPjxjb2RlPmltdWx0aWxpYjwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1pbmNsdWRlLTE2MCI+PGNvZGU+aW5jbHVkZTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1pcHJlZml4LTE2MyI+PGNvZGU+aXByZWZpeDwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1pcXVvdGUtMTY5Ij48Y29kZT5pcXVvdGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtaXN5c3Jvb3QtMTY2Ij48Y29kZT5pc3lzcm9vdDwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1pc3lzdGVtLTE2OCI+PGNvZGU+aXN5c3RlbTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1pd2l0aHByZWZpeC0xNjQiPjxjb2RlPml3aXRocHJlZml4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LWl3aXRocHJlZml4YmVmb3JlLTE2NSI+PGNvZGU+aXdpdGhwcmVmaXhiZWZvcmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtTS0xNDMiPjxjb2RlPk08L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtTUQtMTUyIj48Y29kZT5NRDwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1NRi0xNDciPjxjb2RlPk1GPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LU1HLTE0OCI+PGNvZGU+TUc8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtTU0tMTQ2Ij48Y29kZT5NTTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1NTUQtMTUzIj48Y29kZT5NTUQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtTVAtMTQ5Ij48Y29kZT5NUDwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1NUS0xNTEiPjxjb2RlPk1RPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LU1ULTE1MCI+PGNvZGU+TVQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtbm9zdGRpbmMtMTU4Ij48Y29kZT5ub3N0ZGluYzwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1ub3N0ZGluY18wMDJiXzAwMmItMTU5Ij48Y29kZT5ub3N0ZGluYysrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LW8tMTI5Ij48Y29kZT5vPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjaW5kZXgtT0JKQ18wMDVmSU5DTFVERV8wMDVmUEFUSC0yMDciPjxjb2RlPk9CSkNfSU5DTFVERV9QQVRIPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LVAtMTkzIj48Y29kZT5QPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LXBlZGFudGljLTE0MSI+PGNvZGU+cGVkYW50aWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtcGVkYW50aWNfMDAyZGVycm9ycy0xNDIiPjxjb2RlPnBlZGFudGljLWVycm9yczwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1yZW1hcC0xOTciPjxjb2RlPnJlbWFwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LXN0ZF8wMDNkLTE1NiI+PGNvZGU+c3RkPTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LVNVTlBST18wMDVmREVQRU5ERU5DSUVTLTIxMCI+PGNvZGU+U1VOUFJPX0RFUEVOREVOQ0lFUzwvY29kZT48L2E+OiA8YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC10YXJnZXRfMDAyZGhlbHAtMTk5Ij48Y29kZT50YXJnZXQtaGVscDwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC10cmFkaXRpb25hbF8wMDJkY3BwLTE5NSI+PGNvZGU+dHJhZGl0aW9uYWwtY3BwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LXRyaWdyYXBocy0xOTYiPjxjb2RlPnRyaWdyYXBoczwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1VLTEyNiI+PGNvZGU+VTwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC11bmRlZi0xMjciPjxjb2RlPnVuZGVmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LXYtMjAwIj48Y29kZT52PC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LXZlcnNpb24tMjAyIj48Y29kZT52ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LXctMTQwIj48Y29kZT53PC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LVdhbGwtMTMwIj48Y29kZT5XYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LVdjb21tZW50LTEzMSI+PGNvZGU+V2NvbW1lbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtV2NvbW1lbnRzLTEzMiI+PGNvZGU+V2NvbW1lbnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LVdlbmRpZl8wMDJkbGFiZWxzLTEzNyI+PGNvZGU+V2VuZGlmLWxhYmVsczwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1XZXJyb3ItMTM4Ij48Y29kZT5XZXJyb3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtV3N5c3RlbV8wMDJkaGVhZGVycy0xMzkiPjxjb2RlPldzeXN0ZW0taGVhZGVyczwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNpbmRleC1XdHJhZGl0aW9uYWwtMTM0Ij48Y29kZT5XdHJhZGl0aW9uYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtV3RyaWdyYXBocy0xMzMiPjxjb2RlPld0cmlncmFwaHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjaW5kZXgtV3VuZGVmLTEzNSI+PGNvZGU+V3VuZGVmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LVd1bnVzZWRfMDAyZG1hY3Jvcy0xMzYiPjxjb2RlPld1bnVzZWQtbWFjcm9zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI2luZGV4LXgtMTU0Ij48Y29kZT54PC9jb2RlPjwvYT46IDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjwvbGk+CisgICA8L3VsPiAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT3RoZXItRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9PdGhlci1EaXJlY3RpdmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlZWQzZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvT3RoZXItRGlyZWN0aXZlcy5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk90aGVyIERpcmVjdGl2ZXMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyIgdGl0bGU9IlByYWdtYXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQcmVwcm9jZXNzb3ItT3V0cHV0Lmh0bWwjUHJlcHJvY2Vzc29yLU91dHB1dCIgdGl0bGU9IlByZXByb2Nlc3NvciBPdXRwdXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3RoZXItRGlyZWN0aXZlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQcmVwcm9jZXNzb3ItT3V0cHV0Lmh0bWwjUHJlcHJvY2Vzc29yLU91dHB1dCI+UHJlcHJvY2Vzc29yIE91dHB1dDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjggT3RoZXIgRGlyZWN0aXZlczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzaWRlbnQtMTA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNzY2NzLTEwNyI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZGVudDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgdGFrZXMgb25lIGFyZ3VtZW50LCBhIHN0cmluZyBjb25zdGFudC4gIE9uCitzb21lIHN5c3RlbXMsIHRoYXQgc3RyaW5nIGNvbnN0YW50IGlzIGNvcGllZCBpbnRvIGEgc3BlY2lhbCBzZWdtZW50IG9mCit0aGUgb2JqZWN0IGZpbGUuICBPbiBvdGhlciBzeXN0ZW1zLCB0aGUgZGlyZWN0aXZlIGlzIGlnbm9yZWQuICBUaGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3NjY3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIGlzIGEgc3lub255bSBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWRlbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPlRoZXNlIGRpcmVjdGl2ZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBDIHN0YW5kYXJkLCBidXQgdGhleSBhcmUgbm90CitvZmZpY2lhbCBHTlUgZXh0ZW5zaW9ucyBlaXRoZXIuICBXaGF0IGhpc3RvcmljYWwgaW5mb3JtYXRpb24gd2UgaGF2ZQorYmVlbiBhYmxlIHRvIGZpbmQsIHN1Z2dlc3RzIHRoZXkgb3JpZ2luYXRlZCB3aXRoIFN5c3RlbSBWLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1udWxsLWRpcmVjdGl2ZS0xMDgiPjwvYT5UaGUgPGRmbj5udWxsIGRpcmVjdGl2ZTwvZGZuPiBjb25zaXN0cyBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb2xsb3dlZCBieSBhIG5ld2xpbmUsCit3aXRoIG9ubHkgd2hpdGVzcGFjZSAoaW5jbHVkaW5nIGNvbW1lbnRzKSBpbiBiZXR3ZWVuLiAgQSBudWxsIGRpcmVjdGl2ZQoraXMgdW5kZXJzdG9vZCBhcyBhIHByZXByb2Nlc3NpbmcgZGlyZWN0aXZlIGJ1dCBoYXMgbm8gZWZmZWN0IG9uIHRoZQorcHJlcHJvY2Vzc29yIG91dHB1dC4gIFRoZSBwcmltYXJ5IHNpZ25pZmljYW5jZSBvZiB0aGUgZXhpc3RlbmNlIG9mIHRoZQorbnVsbCBkaXJlY3RpdmUgaXMgdGhhdCBhbiBpbnB1dCBsaW5lIGNvbnNpc3Rpbmcgb2YganVzdCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsCitwcm9kdWNlIG5vIG91dHB1dCwgcmF0aGVyIHRoYW4gYSBsaW5lIG9mIG91dHB1dCBjb250YWluaW5nIGp1c3QgYQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgU3VwcG9zZWRseSBzb21lIG9sZCBDIHByb2dyYW1zIGNvbnRhaW4gc3VjaCBsaW5lcy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9PdmVydmlldy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9PdmVydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTIzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL092ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwxMTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk92ZXJ2aWV3IC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaW5kZXguaHRtbCNUb3AiIHRpdGxlPSJUb3AiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIZWFkZXItRmlsZXMuaHRtbCNIZWFkZXItRmlsZXMiIHRpdGxlPSJIZWFkZXIgRmlsZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3ZlcnZpZXciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIj5IZWFkZXIgRmlsZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjEgT3ZlcnZpZXc8L2gyPgorCis8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiAtLT4KKzxwPlRoZSBDIHByZXByb2Nlc3Nvciwgb2Z0ZW4ga25vd24gYXMgPGRmbj5jcHA8L2Rmbj4sIGlzIGEgPGRmbj5tYWNybyBwcm9jZXNzb3I8L2Rmbj4KK3RoYXQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBDIGNvbXBpbGVyIHRvIHRyYW5zZm9ybSB5b3VyIHByb2dyYW0KK2JlZm9yZSBjb21waWxhdGlvbi4gIEl0IGlzIGNhbGxlZCBhIG1hY3JvIHByb2Nlc3NvciBiZWNhdXNlIGl0IGFsbG93cworeW91IHRvIGRlZmluZSA8ZGZuPm1hY3JvczwvZGZuPiwgd2hpY2ggYXJlIGJyaWVmIGFiYnJldmlhdGlvbnMgZm9yIGxvbmdlcgorY29uc3RydWN0cy4KKworICAgPHA+VGhlIEMgcHJlcHJvY2Vzc29yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgb25seSB3aXRoIEMsIEMrKywgYW5kCitPYmplY3RpdmUtQyBzb3VyY2UgY29kZS4gIEluIHRoZSBwYXN0LCBpdCBoYXMgYmVlbiBhYnVzZWQgYXMgYSBnZW5lcmFsCit0ZXh0IHByb2Nlc3Nvci4gIEl0IHdpbGwgY2hva2Ugb24gaW5wdXQgd2hpY2ggZG9lcyBub3Qgb2JleSBDJ3MgbGV4aWNhbAorcnVsZXMuICBGb3IgZXhhbXBsZSwgYXBvc3Ryb3BoZXMgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyB0aGUgYmVnaW5uaW5nIG9mCitjaGFyYWN0ZXIgY29uc3RhbnRzLCBhbmQgY2F1c2UgZXJyb3JzLiAgQWxzbywgeW91IGNhbm5vdCByZWx5IG9uIGl0CitwcmVzZXJ2aW5nIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgaW5wdXQgd2hpY2ggYXJlIG5vdCBzaWduaWZpY2FudCB0bworQy1mYW1pbHkgbGFuZ3VhZ2VzLiAgSWYgYSBNYWtlZmlsZSBpcyBwcmVwcm9jZXNzZWQsIGFsbCB0aGUgaGFyZCB0YWJzCit3aWxsIGJlIHJlbW92ZWQsIGFuZCB0aGUgTWFrZWZpbGUgd2lsbCBub3Qgd29yay4KKworICAgPHA+SGF2aW5nIHNhaWQgdGhhdCwgeW91IGNhbiBvZnRlbiBnZXQgYXdheSB3aXRoIHVzaW5nIGNwcCBvbiB0aGluZ3Mgd2hpY2gKK2FyZSBub3QgQy4gIE90aGVyIEFsZ29sLWlzaCBwcm9ncmFtbWluZyBsYW5ndWFnZXMgYXJlIG9mdGVuIHNhZmUKKyhQYXNjYWwsIEFkYSwgZXRjLikgU28gaXMgYXNzZW1ibHksIHdpdGggY2F1dGlvbi4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi10cmFkaXRpb25hbC1jcHA8L3NwYW4+PC9zYW1wPgorbW9kZSBwcmVzZXJ2ZXMgbW9yZSB3aGl0ZSBzcGFjZSwgYW5kIGlzIG90aGVyd2lzZSBtb3JlIHBlcm1pc3NpdmUuICBNYW55CitvZiB0aGUgcHJvYmxlbXMgY2FuIGJlIGF2b2lkZWQgYnkgd3JpdGluZyBDIG9yIEMrKyBzdHlsZSBjb21tZW50cworaW5zdGVhZCBvZiBuYXRpdmUgbGFuZ3VhZ2UgY29tbWVudHMsIGFuZCBrZWVwaW5nIG1hY3JvcyBzaW1wbGUuCisKKyAgIDxwPldoZXJldmVyIHBvc3NpYmxlLCB5b3Ugc2hvdWxkIHVzZSBhIHByZXByb2Nlc3NvciBnZWFyZWQgdG8gdGhlIGxhbmd1YWdlCit5b3UgYXJlIHdyaXRpbmcgaW4uICBNb2Rlcm4gdmVyc2lvbnMgb2YgdGhlIEdOVSBhc3NlbWJsZXIgaGF2ZSBtYWNybworZmFjaWxpdGllcy4gIE1vc3QgaGlnaCBsZXZlbCBwcm9ncmFtbWluZyBsYW5ndWFnZXMgaGF2ZSB0aGVpciBvd24KK2NvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBpbmNsdXNpb24gbWVjaGFuaXNtLiAgSWYgYWxsIGVsc2UgZmFpbHMsCit0cnkgYSB0cnVlIGdlbmVyYWwgdGV4dCBwcm9jZXNzb3IsIHN1Y2ggYXMgR05VIE00LgorCisgICA8cD5DIHByZXByb2Nlc3NvcnMgdmFyeSBpbiBzb21lIGRldGFpbHMuICBUaGlzIG1hbnVhbCBkaXNjdXNzZXMgdGhlIEdOVSBDCitwcmVwcm9jZXNzb3IsIHdoaWNoIHByb3ZpZGVzIGEgc21hbGwgc3VwZXJzZXQgb2YgdGhlIGZlYXR1cmVzIG9mIElTTworU3RhbmRhcmQgQy4gIEluIGl0cyBkZWZhdWx0IG1vZGUsIHRoZSBHTlUgQyBwcmVwcm9jZXNzb3IgZG9lcyBub3QgZG8gYQorZmV3IHRoaW5ncyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQuICBUaGVzZSBhcmUgZmVhdHVyZXMgd2hpY2ggYXJlCityYXJlbHksIGlmIGV2ZXIsIHVzZWQsIGFuZCBtYXkgY2F1c2Ugc3VycHJpc2luZyBjaGFuZ2VzIHRvIHRoZSBtZWFuaW5nCitvZiBhIHByb2dyYW0gd2hpY2ggZG9lcyBub3QgZXhwZWN0IHRoZW0uICBUbyBnZXQgc3RyaWN0IElTTyBTdGFuZGFyZCBDLAoreW91IHNob3VsZCB1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzkwPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Yzk5PC9zcGFuPjwvc2FtcD4gb3IKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzExPC9zcGFuPjwvc2FtcD4gb3B0aW9ucywgZGVwZW5kaW5nCitvbiB3aGljaCB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCB5b3Ugd2FudC4gIFRvIGdldCBhbGwgdGhlIG1hbmRhdG9yeQorZGlhZ25vc3RpY3MsIHlvdSBtdXN0IGFsc28gdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+LiAgU2VlIDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPi4KKworICAgPHA+VGhpcyBtYW51YWwgZGVzY3JpYmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgSVNPIHByZXByb2Nlc3Nvci4gIFRvCittaW5pbWl6ZSBncmF0dWl0b3VzIGRpZmZlcmVuY2VzLCB3aGVyZSB0aGUgSVNPIHByZXByb2Nlc3NvcidzCitiZWhhdmlvciBkb2VzIG5vdCBjb25mbGljdCB3aXRoIHRyYWRpdGlvbmFsIHNlbWFudGljcywgdGhlCit0cmFkaXRpb25hbCBwcmVwcm9jZXNzb3Igc2hvdWxkIGJlaGF2ZSB0aGUgc2FtZSB3YXkuICBUaGUgdmFyaW91cworZGlmZmVyZW5jZXMgdGhhdCBkbyBleGlzdCBhcmUgZGV0YWlsZWQgaW4gdGhlIHNlY3Rpb24gPGEgaHJlZj0iVHJhZGl0aW9uYWwtTW9kZS5odG1sI1RyYWRpdGlvbmFsLU1vZGUiPlRyYWRpdGlvbmFsIE1vZGU8L2E+LgorCisgICA8cD5Gb3IgY2xhcml0eSwgdW5sZXNzIG5vdGVkIG90aGVyd2lzZSwgcmVmZXJlbmNlcyB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkNQUDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiB0aGlzCittYW51YWwgcmVmZXIgdG8gR05VIENQUC4gCis8IS0tIG1hbiBlbmQgLS0+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJDaGFyYWN0ZXItc2V0cy5odG1sI0NoYXJhY3Rlci1zZXRzIj5DaGFyYWN0ZXIgc2V0czwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkluaXRpYWwtcHJvY2Vzc2luZy5odG1sI0luaXRpYWwtcHJvY2Vzc2luZyI+SW5pdGlhbCBwcm9jZXNzaW5nPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVG9rZW5pemF0aW9uLmh0bWwjVG9rZW5pemF0aW9uIj5Ub2tlbml6YXRpb248L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJUaGUtcHJlcHJvY2Vzc2luZy1sYW5ndWFnZS5odG1sI1RoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlIj5UaGUgcHJlcHJvY2Vzc2luZyBsYW5ndWFnZTwvYT4KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvUHJhZ21hcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxMGY1OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvUHJhZ21hcy5odG1sCkBAIC0wLDAgKzEsMTYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QcmFnbWFzIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTGluZS1Db250cm9sLmh0bWwjTGluZS1Db250cm9sIiB0aXRsZT0iTGluZSBDb250cm9sIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3RoZXItRGlyZWN0aXZlcy5odG1sI090aGVyLURpcmVjdGl2ZXMiIHRpdGxlPSJPdGhlciBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlByYWdtYXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3RoZXItRGlyZWN0aXZlcy5odG1sI090aGVyLURpcmVjdGl2ZXMiPk90aGVyIERpcmVjdGl2ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMaW5lLUNvbnRyb2wuaHRtbCNMaW5lLUNvbnRyb2wiPkxpbmUgQ29udHJvbDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj43IFByYWdtYXM8L2gyPgorCis8cD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSBpcyB0aGUgbWV0aG9kIHNwZWNpZmllZCBieSB0aGUgQyBzdGFuZGFyZAorZm9yIHByb3ZpZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIHRoZSBjb21waWxlciwgYmV5b25kIHdoYXQgaXMKK2NvbnZleWVkIGluIHRoZSBsYW5ndWFnZSBpdHNlbGYuICBUaHJlZSBmb3JtcyBvZiB0aGlzIGRpcmVjdGl2ZQorKGNvbW1vbmx5IGtub3duIGFzIDxkZm4+cHJhZ21hczwvZGZuPikgYXJlIHNwZWNpZmllZCBieSB0aGUgMTk5OSBDIHN0YW5kYXJkLiAKK0EgQyBjb21waWxlciBpcyBmcmVlIHRvIGF0dGFjaCBhbnkgbWVhbmluZyBpdCBsaWtlcyB0byBvdGhlciBwcmFnbWFzLgorCisgICA8cD5HQ0MgaGFzIGhpc3RvcmljYWxseSBwcmVmZXJyZWQgdG8gdXNlIGV4dGVuc2lvbnMgdG8gdGhlIHN5bnRheCBvZiB0aGUKK2xhbmd1YWdlLCBzdWNoIGFzIDxjb2RlPl9fYXR0cmlidXRlX188L2NvZGU+LCBmb3IgdGhpcyBwdXJwb3NlLiAgSG93ZXZlciwgR0NDCitkb2VzIGRlZmluZSBhIGZldyBwcmFnbWFzIG9mIGl0cyBvd24uICBUaGVzZSBtb3N0bHkgaGF2ZSBlZmZlY3RzIG9uIHRoZQorZW50aXJlIHRyYW5zbGF0aW9uIHVuaXQgb3Igc291cmNlIGZpbGUuCisKKyAgIDxwPkluIEdDQyB2ZXJzaW9uIDMsIGFsbCBHTlUtZGVmaW5lZCwgc3VwcG9ydGVkIHByYWdtYXMgaGF2ZSBiZWVuIGdpdmVuIGEKKzxjb2RlPkdDQzwvY29kZT4gcHJlZml4LiAgVGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIDxjb2RlPlNUREM8L2NvZGU+IHByZWZpeCBvbiBhbGwKK3ByYWdtYXMgZGVmaW5lZCBieSBDOTkuICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgcHJhZ21hcyB3aGljaCB3ZXJlCityZWNvZ25pemVkIGJ5IHByZXZpb3VzIHZlcnNpb25zIGFyZSBzdGlsbCByZWNvZ25pemVkIHdpdGhvdXQgdGhlCis8Y29kZT5HQ0M8L2NvZGU+IHByZWZpeCwgYnV0IHRoYXQgdXNhZ2UgaXMgZGVwcmVjYXRlZC4gIFNvbWUgb2xkZXIgcHJhZ21hcyBhcmUKK2RlcHJlY2F0ZWQgaW4gdGhlaXIgZW50aXJldHkuICBUaGV5IGFyZSBub3QgcmVjb2duaXplZCB3aXRoIHRoZQorPGNvZGU+R0NDPC9jb2RlPiBwcmVmaXguICBTZWUgPGEgaHJlZj0iT2Jzb2xldGUtRmVhdHVyZXMuaHRtbCNPYnNvbGV0ZS1GZWF0dXJlcyI+T2Jzb2xldGUgRmVhdHVyZXM8L2E+LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmUHJhZ21hXzAwN2QtMTAwIj48L2E+Qzk5IGludHJvZHVjZXMgdGhlIDxjb2RlPl9QcmFnbWE8IS0tIC9AdyAtLT48L2NvZGU+IG9wZXJhdG9yLiAgVGhpcyBmZWF0dXJlIGFkZHJlc3NlcyBhCittYWpvciBwcm9ibGVtIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hPC9zcGFuPjwvc2FtcD4mcnNxdW87OiBiZWluZyBhIGRpcmVjdGl2ZSwgaXQgY2Fubm90IGJlCitwcm9kdWNlZCBhcyB0aGUgcmVzdWx0IG9mIG1hY3JvIGV4cGFuc2lvbi4gIDxjb2RlPl9QcmFnbWE8IS0tIC9AdyAtLT48L2NvZGU+IGlzIGFuCitvcGVyYXRvciwgbXVjaCBsaWtlIDxjb2RlPnNpemVvZjwvY29kZT4gb3IgPGNvZGU+ZGVmaW5lZDwvY29kZT4sIGFuZCBjYW4gYmUgZW1iZWRkZWQKK2luIGEgbWFjcm8uCisKKyAgIDxwPkl0cyBzeW50YXggaXMgPGNvZGU+X1ByYWdtYSZuYnNwOyg8L2NvZGU+PHZhcj5zdHJpbmctbGl0ZXJhbDwvdmFyPjxjb2RlPik8IS0tIC9AdyAtLT48L2NvZGU+LCB3aGVyZQorPHZhcj5zdHJpbmctbGl0ZXJhbDwvdmFyPiBjYW4gYmUgZWl0aGVyIGEgbm9ybWFsIG9yIHdpZGUtY2hhcmFjdGVyIHN0cmluZworbGl0ZXJhbC4gIEl0IGlzIGRlc3RyaW5naXplZCwgYnkgcmVwbGFjaW5nIGFsbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlxcPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpdGggYSBzaW5nbGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgYWxsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XCI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2l0aCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ijwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSByZXN1bHQgaXMgdGhlbgorcHJvY2Vzc2VkIGFzIGlmIGl0IGhhZCBhcHBlYXJlZCBhcyB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIGEKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUuICBGb3IgZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIF9QcmFnbWEgKCJHQ0MgZGVwZW5kZW5jeSBcInBhcnNlLnlcIiIpCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+aGFzIHRoZSBzYW1lIGVmZmVjdCBhcyA8Y29kZT4jcHJhZ21hIEdDQyBkZXBlbmRlbmN5ICJwYXJzZS55IjwvY29kZT4uICBUaGUKK3NhbWUgZWZmZWN0IGNvdWxkIGJlIGFjaGlldmVkIHVzaW5nIG1hY3JvcywgZm9yIGV4YW1wbGUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgRE9fUFJBR01BKHgpIF9QcmFnbWEgKCN4KQorICAgICBET19QUkFHTUEgKEdDQyBkZXBlbmRlbmN5ICJwYXJzZS55IikKKzwvcHJlPgorICAgPHA+VGhlIHN0YW5kYXJkIGlzIHVuY2xlYXIgb24gd2hlcmUgYSA8Y29kZT5fUHJhZ21hPC9jb2RlPiBvcGVyYXRvciBjYW4gYXBwZWFyLiAKK1RoZSBwcmVwcm9jZXNzb3IgZG9lcyBub3QgYWNjZXB0IGl0IHdpdGhpbiBhIHByZXByb2Nlc3NpbmcgY29uZGl0aW9uYWwKK2RpcmVjdGl2ZSBsaWtlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVG8gYmUgc2FmZSwgeW91IGFyZSBwcm9iYWJseSBiZXN0IGtlZXBpbmcgaXQKK291dCBvZiBkaXJlY3RpdmVzIG90aGVyIHRoYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZGVmaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgcHV0dGluZyBpdCBvbiBhIGxpbmUgb2YKK2l0cyBvd24uCisKKyAgIDxwPlRoaXMgbWFudWFsIGRvY3VtZW50cyB0aGUgcHJhZ21hcyB3aGljaCBhcmUgbWVhbmluZ2Z1bCB0byB0aGUKK3ByZXByb2Nlc3NvciBpdHNlbGYuICBPdGhlciBwcmFnbWFzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBDIG9yIEMrKworY29tcGlsZXJzLiAgVGhleSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgR0NDIG1hbnVhbC4KKworICAgPHA+R0NDIHBsdWdpbnMgbWF5IHByb3ZpZGUgdGhlaXIgb3duIHByYWdtYXMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNwcmFnbWEgR0NDIGRlcGVuZGVuY3k8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNwcmFnbWEtR0NDLWRlcGVuZGVuY3ktMTAxIj48L2E+PGRkPjxjb2RlPiNwcmFnbWEgR0NDIGRlcGVuZGVuY3k8L2NvZGU+IGFsbG93cyB5b3UgdG8gY2hlY2sgdGhlIHJlbGF0aXZlIGRhdGVzIG9mCit0aGUgY3VycmVudCBmaWxlIGFuZCBhbm90aGVyIGZpbGUuICBJZiB0aGUgb3RoZXIgZmlsZSBpcyBtb3JlIHJlY2VudCB0aGFuCit0aGUgY3VycmVudCBmaWxlLCBhIHdhcm5pbmcgaXMgaXNzdWVkLiAgVGhpcyBpcyB1c2VmdWwgaWYgdGhlIGN1cnJlbnQKK2ZpbGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBvdGhlciBmaWxlLCBhbmQgc2hvdWxkIGJlIHJlZ2VuZXJhdGVkLiAgVGhlCitvdGhlciBmaWxlIGlzIHNlYXJjaGVkIGZvciB1c2luZyB0aGUgbm9ybWFsIGluY2x1ZGUgc2VhcmNoIHBhdGguIAorT3B0aW9uYWwgdHJhaWxpbmcgdGV4dCBjYW4gYmUgdXNlZCB0byBnaXZlIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlCit3YXJuaW5nIG1lc3NhZ2UuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI3ByYWdtYSBHQ0MgZGVwZW5kZW5jeSAicGFyc2UueSIKKyAgICAgICAgICAjcHJhZ21hIEdDQyBkZXBlbmRlbmN5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiByZXJ1biBmaXhpbmNsdWRlcworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+I3ByYWdtYSBHQ0MgcG9pc29uPC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzcHJhZ21hLUdDQy1wb2lzb24tMTAyIj48L2E+PGRkPlNvbWV0aW1lcywgdGhlcmUgaXMgYW4gaWRlbnRpZmllciB0aGF0IHlvdSB3YW50IHRvIHJlbW92ZSBjb21wbGV0ZWx5Citmcm9tIHlvdXIgcHJvZ3JhbSwgYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IG5ldmVyIGNyZWVwcyBiYWNrIGluLiAgVG8KK2VuZm9yY2UgdGhpcywgeW91IGNhbiA8ZGZuPnBvaXNvbjwvZGZuPiB0aGUgaWRlbnRpZmllciB3aXRoIHRoaXMgcHJhZ21hLiAKKzxjb2RlPiNwcmFnbWEgR0NDIHBvaXNvbjwvY29kZT4gaXMgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIGlkZW50aWZpZXJzIHRvCitwb2lzb24uICBJZiBhbnkgb2YgdGhvc2UgaWRlbnRpZmllcnMgYXBwZWFycyBhbnl3aGVyZSBpbiB0aGUgc291cmNlCithZnRlciB0aGUgZGlyZWN0aXZlLCBpdCBpcyBhIGhhcmQgZXJyb3IuICBGb3IgZXhhbXBsZSwKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjcHJhZ21hIEdDQyBwb2lzb24gcHJpbnRmIHNwcmludGYgZnByaW50ZgorICAgICAgICAgIHNwcmludGYoc29tZV9zdHJpbmcsICJoZWxsbyIpOworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+d2lsbCBwcm9kdWNlIGFuIGVycm9yLgorCisgICAgIDxwPklmIGEgcG9pc29uZWQgaWRlbnRpZmllciBhcHBlYXJzIGFzIHBhcnQgb2YgdGhlIGV4cGFuc2lvbiBvZiBhIG1hY3JvCit3aGljaCB3YXMgZGVmaW5lZCBiZWZvcmUgdGhlIGlkZW50aWZpZXIgd2FzIHBvaXNvbmVkLCBpdCB3aWxsIDxlbT5ub3Q8L2VtPgorY2F1c2UgYW4gZXJyb3IuICBUaGlzIGxldHMgeW91IHBvaXNvbiBhbiBpZGVudGlmaWVyIHdpdGhvdXQgd29ycnlpbmcKK2Fib3V0IHN5c3RlbSBoZWFkZXJzIGRlZmluaW5nIG1hY3JvcyB0aGF0IHVzZSBpdC4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjZGVmaW5lIHN0cnJjaHIgcmluZGV4CisgICAgICAgICAgI3ByYWdtYSBHQ0MgcG9pc29uIHJpbmRleAorICAgICAgICAgIHN0cnJjaHIoc29tZV9zdHJpbmcsICdoJyk7Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aWxsIG5vdCBwcm9kdWNlIGFuIGVycm9yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+I3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcjwvY29kZT48YSBuYW1lPSJpbmRleC1nX3RfMDAyM3ByYWdtYS1HQ0Mtc3lzdGVtXzAwNWZoZWFkZXItMTAzIj48L2E+PGRkPlRoaXMgcHJhZ21hIHRha2VzIG5vIGFyZ3VtZW50cy4gIEl0IGNhdXNlcyB0aGUgcmVzdCBvZiB0aGUgY29kZSBpbiB0aGUKK2N1cnJlbnQgZmlsZSB0byBiZSB0cmVhdGVkIGFzIGlmIGl0IGNhbWUgZnJvbSBhIHN5c3RlbSBoZWFkZXIuIAorU2VlIDxhIGhyZWY9IlN5c3RlbS1IZWFkZXJzLmh0bWwjU3lzdGVtLUhlYWRlcnMiPlN5c3RlbSBIZWFkZXJzPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiNwcmFnbWEgR0NDIHdhcm5pbmc8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNwcmFnbWEtR0NDLXdhcm5pbmctMTA0Ij48L2E+PGR0Pjxjb2RlPiNwcmFnbWEgR0NDIGVycm9yPC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzcHJhZ21hLUdDQy1lcnJvci0xMDUiPjwvYT48ZGQ+PGNvZGU+I3ByYWdtYSBHQ0Mgd2FybmluZyAibWVzc2FnZSI8L2NvZGU+IGNhdXNlcyB0aGUgcHJlcHJvY2Vzc29yIHRvIGlzc3VlCithIHdhcm5pbmcgZGlhZ25vc3RpYyB3aXRoIHRoZSB0ZXh0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWVzc2FnZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSBtZXNzYWdlCitjb250YWluZWQgaW4gdGhlIHByYWdtYSBtdXN0IGJlIGEgc2luZ2xlIHN0cmluZyBsaXRlcmFsLiAgU2ltaWxhcmx5LAorPGNvZGU+I3ByYWdtYSBHQ0MgZXJyb3IgIm1lc3NhZ2UiPC9jb2RlPiBpc3N1ZXMgYW4gZXJyb3IgbWVzc2FnZS4gIFVubGlrZQordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3dhcm5pbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2Vycm9yPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZXMsIHRoZXNlIHByYWdtYXMgY2FuIGJlCitlbWJlZGRlZCBpbiBwcmVwcm9jZXNzb3IgbWFjcm9zIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X1ByYWdtYTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9QcmVkZWZpbmVkLU1hY3Jvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9QcmVkZWZpbmVkLU1hY3Jvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MTA0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1ByZWRlZmluZWQtTWFjcm9zLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UHJlZGVmaW5lZCBNYWNyb3MgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIiB0aXRsZT0iTWFjcm9zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIiB0aXRsZT0iVmFyaWFkaWMgTWFjcm9zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MuaHRtbCNVbmRlZmluaW5nLWFuZC1SZWRlZmluaW5nLU1hY3JvcyIgdGl0bGU9IlVuZGVmaW5pbmcgYW5kIFJlZGVmaW5pbmcgTWFjcm9zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlByZWRlZmluZWQtTWFjcm9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlVuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zLmh0bWwjVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MiPlVuZGVmaW5pbmcgYW5kIFJlZGVmaW5pbmcgTWFjcm9zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIj5WYXJpYWRpYyBNYWNyb3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiPk1hY3JvczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNyBQcmVkZWZpbmVkIE1hY3JvczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXByZWRlZmluZWQtbWFjcm9zLTU5Ij48L2E+U2V2ZXJhbCBvYmplY3QtbGlrZSBtYWNyb3MgYXJlIHByZWRlZmluZWQ7IHlvdSB1c2UgdGhlbSB3aXRob3V0CitzdXBwbHlpbmcgdGhlaXIgZGVmaW5pdGlvbnMuICBUaGV5IGZhbGwgaW50byB0aHJlZSBjbGFzc2VzOiBzdGFuZGFyZCwKK2NvbW1vbiwgYW5kIHN5c3RlbS1zcGVjaWZpYy4KKworICAgPHA+SW4gQysrLCB0aGVyZSBpcyBhIGZvdXJ0aCBjYXRlZ29yeSwgdGhlIG5hbWVkIG9wZXJhdG9ycy4gIFRoZXkgYWN0IGxpa2UKK3ByZWRlZmluZWQgbWFjcm9zLCBidXQgeW91IGNhbm5vdCB1bmRlZmluZSB0aGVtLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU3RhbmRhcmQtUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNTdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3JvcyI+U3RhbmRhcmQgUHJlZGVmaW5lZCBNYWNyb3M8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJDb21tb24tUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNDb21tb24tUHJlZGVmaW5lZC1NYWNyb3MiPkNvbW1vbiBQcmVkZWZpbmVkIE1hY3JvczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlN5c3RlbV8wMDJkc3BlY2lmaWMtUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zIj5TeXN0ZW0tc3BlY2lmaWMgUHJlZGVmaW5lZCBNYWNyb3M8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMuaHRtbCNDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMiPkMrKyBOYW1lZCBPcGVyYXRvcnM8L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1ByZXByb2Nlc3Nvci1PdXRwdXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvUHJlcHJvY2Vzc29yLU91dHB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YThkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1ByZXByb2Nlc3Nvci1PdXRwdXQuaHRtbApAQCAtMCwwICsxLDEyMyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UHJlcHJvY2Vzc29yIE91dHB1dCAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik90aGVyLURpcmVjdGl2ZXMuaHRtbCNPdGhlci1EaXJlY3RpdmVzIiB0aXRsZT0iT3RoZXIgRGlyZWN0aXZlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRyYWRpdGlvbmFsLU1vZGUuaHRtbCNUcmFkaXRpb25hbC1Nb2RlIiB0aXRsZT0iVHJhZGl0aW9uYWwgTW9kZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQcmVwcm9jZXNzb3ItT3V0cHV0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRyYWRpdGlvbmFsLU1vZGUuaHRtbCNUcmFkaXRpb25hbC1Nb2RlIj5UcmFkaXRpb25hbCBNb2RlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3RoZXItRGlyZWN0aXZlcy5odG1sI090aGVyLURpcmVjdGl2ZXMiPk90aGVyIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+OSBQcmVwcm9jZXNzb3IgT3V0cHV0PC9oMj4KKworPHA+V2hlbiB0aGUgQyBwcmVwcm9jZXNzb3IgaXMgdXNlZCB3aXRoIHRoZSBDLCBDKyssIG9yIE9iamVjdGl2ZS1DCitjb21waWxlcnMsIGl0IGlzIGludGVncmF0ZWQgaW50byB0aGUgY29tcGlsZXIgYW5kIGNvbW11bmljYXRlcyBhIHN0cmVhbQorb2YgYmluYXJ5IHRva2VucyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIncyBwYXJzZXIuICBIb3dldmVyLCBpdCBjYW4KK2Fsc28gYmUgdXNlZCBpbiB0aGUgbW9yZSBjb252ZW50aW9uYWwgc3RhbmRhbG9uZSBtb2RlLCB3aGVyZSBpdCBwcm9kdWNlcwordGV4dHVhbCBvdXRwdXQuIAorPCEtLSBGSVhNRTogRG9jdW1lbnQgdGhlIGxpYnJhcnkgaW50ZXJmYWNlLiAtLT4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtb3V0cHV0LWZvcm1hdC0xMDkiPjwvYT5UaGUgb3V0cHV0IGZyb20gdGhlIEMgcHJlcHJvY2Vzc29yIGxvb2tzIG11Y2ggbGlrZSB0aGUgaW5wdXQsIGV4Y2VwdAordGhhdCBhbGwgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmUgbGluZXMgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYmxhbmsKK2xpbmVzIGFuZCBhbGwgY29tbWVudHMgd2l0aCBzcGFjZXMuICBMb25nIHJ1bnMgb2YgYmxhbmsgbGluZXMgYXJlCitkaXNjYXJkZWQuCisKKyAgIDxwPlRoZSBJU08gc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgaXQgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB3aGV0aGVyIGEKK3ByZXByb2Nlc3NvciBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSBiZXR3ZWVuIHRva2Vucywgb3IgcmVwbGFjZXMgaXQgd2l0aAorZS5nLiBhIHNpbmdsZSBzcGFjZS4gIEluIEdOVSBDUFAsIHdoaXRlc3BhY2UgYmV0d2VlbiB0b2tlbnMgaXMgY29sbGFwc2VkCit0byBiZWNvbWUgYSBzaW5nbGUgc3BhY2UsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBmaXJzdCB0b2tlbiBvbiBhCitub24tZGlyZWN0aXZlIGxpbmUgaXMgcHJlY2VkZWQgd2l0aCBzdWZmaWNpZW50IHNwYWNlcyB0aGF0IGl0IGFwcGVhcnMgaW4KK3RoZSBzYW1lIGNvbHVtbiBpbiB0aGUgcHJlcHJvY2Vzc2VkIG91dHB1dCB0aGF0IGl0IGFwcGVhcmVkIGluIHRoZQorb3JpZ2luYWwgc291cmNlIGZpbGUuICBUaGlzIGlzIHNvIHRoZSBvdXRwdXQgaXMgZWFzeSB0byByZWFkLiAKK1NlZSA8YSBocmVmPSJEaWZmZXJlbmNlcy1mcm9tLXByZXZpb3VzLXZlcnNpb25zLmh0bWwjRGlmZmVyZW5jZXMtZnJvbS1wcmV2aW91cy12ZXJzaW9ucyI+RGlmZmVyZW5jZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9uczwvYT4uICBDUFAgZG9lcyBub3QgaW5zZXJ0IGFueQord2hpdGVzcGFjZSB3aGVyZSB0aGVyZSB3YXMgbm9uZSBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBleGNlcHQgd2hlcmUKK25lY2Vzc2FyeSB0byBwcmV2ZW50IGFuIGFjY2lkZW50YWwgdG9rZW4gcGFzdGUuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmVtYXJrZXJzLTExMCI+PC9hPlNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGlzIGNvbnZleWVkIGJ5IGxpbmVzCitvZiB0aGUgZm9ybQorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIyA8dmFyPmxpbmVudW08L3Zhcj4gPHZhcj5maWxlbmFtZTwvdmFyPiA8dmFyPmZsYWdzPC92YXI+Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlc2UgYXJlIGNhbGxlZCA8ZGZuPmxpbmVtYXJrZXJzPC9kZm4+LiAgVGhleSBhcmUgaW5zZXJ0ZWQgYXMgbmVlZGVkIGludG8KK3RoZSBvdXRwdXQgKGJ1dCBuZXZlciB3aXRoaW4gYSBzdHJpbmcgb3IgY2hhcmFjdGVyIGNvbnN0YW50KS4gIFRoZXkgbWVhbgordGhhdCB0aGUgZm9sbG93aW5nIGxpbmUgb3JpZ2luYXRlZCBpbiBmaWxlIDx2YXI+ZmlsZW5hbWU8L3Zhcj4gYXQgbGluZQorPHZhcj5saW5lbnVtPC92YXI+LiAgPHZhcj5maWxlbmFtZTwvdmFyPiB3aWxsIG5ldmVyIGNvbnRhaW4gYW55IG5vbi1wcmludGluZworY2hhcmFjdGVyczsgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBvY3RhbCBlc2NhcGUgc2VxdWVuY2VzLgorCisgICA8cD5BZnRlciB0aGUgZmlsZSBuYW1lIGNvbWVzIHplcm8gb3IgbW9yZSBmbGFncywgd2hpY2ggYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZmxhZ3MsIHNwYWNlcworc2VwYXJhdGUgdGhlbS4gIEhlcmUgaXMgd2hhdCB0aGUgZmxhZ3MgbWVhbjoKKworICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4xPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhIG5ldyBmaWxlLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgaW5kaWNhdGVzIHJldHVybmluZyB0byBhIGZpbGUgKGFmdGVyIGhhdmluZyBpbmNsdWRlZCBhbm90aGVyIGZpbGUpLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4zPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyB0ZXh0IGNvbWVzIGZyb20gYSBzeXN0ZW0gaGVhZGVyIGZpbGUsCitzbyBjZXJ0YWluIHdhcm5pbmdzIHNob3VsZCBiZSBzdXBwcmVzc2VkLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZyB0ZXh0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGJlaW5nCit3cmFwcGVkIGluIGFuIGltcGxpY2l0IDxjb2RlPmV4dGVybiAiQyI8L2NvZGU+IGJsb2NrLiAKKzwhLS0gbWF5YmUgY3Jvc3MgcmVmZXJlbmNlIE5PX0lNUExJQ0lUX0VYVEVSTl9DIC0tPgorPC9kbD4KKworICAgPHA+QXMgYW4gZXh0ZW5zaW9uLCB0aGUgcHJlcHJvY2Vzc29yIGFjY2VwdHMgbGluZW1hcmtlcnMgaW4gbm9uLWFzc2VtYmxlcgoraW5wdXQgZmlsZXMuICBUaGV5IGFyZSB0cmVhdGVkIGxpa2UgdGhlIGNvcnJlc3BvbmRpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jbGluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOworZGlyZWN0aXZlLCAoc2VlIDxhIGhyZWY9IkxpbmUtQ29udHJvbC5odG1sI0xpbmUtQ29udHJvbCI+TGluZSBDb250cm9sPC9hPiksIGV4Y2VwdCB0aGF0IHRyYWlsaW5nIGZsYWdzIGFyZQorcGVybWl0dGVkLCBhbmQgYXJlIGludGVycHJldGVkIHdpdGggdGhlIG1lYW5pbmdzIGRlc2NyaWJlZCBhYm92ZS4gIElmCittdWx0aXBsZSBmbGFncyBhcmUgZ2l2ZW4sIHRoZXkgbXVzdCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIuCisKKyAgIDxwPlNvbWUgZGlyZWN0aXZlcyBtYXkgYmUgZHVwbGljYXRlZCBpbiB0aGUgb3V0cHV0IG9mIHRoZSBwcmVwcm9jZXNzb3IuIAorVGhlc2UgYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lkZW50PC9zcGFuPjwvc2FtcD4mcnNxdW87IChhbHdheXMpLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKG9ubHkgaWYgdGhlCitwcmVwcm9jZXNzb3IgZG9lcyBub3QgaGFuZGxlIHRoZSBwcmFnbWEgaXRzZWxmKSwgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2RlZmluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3VuZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87ICh3aXRoIGNlcnRhaW4gZGVidWdnaW5nIG9wdGlvbnMpLiAgSWYgdGhpcyBoYXBwZW5zLCB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvZiB0aGUgZGlyZWN0aXZlIHdpbGwgYWx3YXlzIGJlIGluIHRoZSBmaXJzdCBjb2x1bW4sIGFuZCB0aGVyZQord2lsbCBiZSBubyBzcGFjZSBiZXR3ZWVuIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kIHRoZSBkaXJlY3RpdmUgbmFtZS4gIElmIG1hY3JvCitleHBhbnNpb24gaGFwcGVucyB0byBnZW5lcmF0ZSB0b2tlbnMgd2hpY2ggbWlnaHQgYmUgbWlzdGFrZW4gZm9yIGEKK2R1cGxpY2F0ZWQgZGlyZWN0aXZlLCBhIHNwYWNlIHdpbGwgYmUgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZAordGhlIGRpcmVjdGl2ZSBuYW1lLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1NlYXJjaC1QYXRoLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1NlYXJjaC1QYXRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5YmJkYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvU2VhcmNoLVBhdGguaHRtbApAQCAtMCwwICsxLDEyNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2VhcmNoIFBhdGggLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIiB0aXRsZT0iSGVhZGVyIEZpbGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW5jbHVkZS1PcGVyYXRpb24uaHRtbCNJbmNsdWRlLU9wZXJhdGlvbiIgdGl0bGU9IkluY2x1ZGUgT3BlcmF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwjT25jZV8wMDJkT25seS1IZWFkZXJzIiB0aXRsZT0iT25jZS1Pbmx5IEhlYWRlcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2VhcmNoLVBhdGgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT25jZV8wMDJkT25seS1IZWFkZXJzLmh0bWwjT25jZV8wMDJkT25seS1IZWFkZXJzIj5PbmNlLU9ubHkgSGVhZGVyczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkluY2x1ZGUtT3BlcmF0aW9uLmh0bWwjSW5jbHVkZS1PcGVyYXRpb24iPkluY2x1ZGUgT3BlcmF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIj5IZWFkZXIgRmlsZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjMgU2VhcmNoIFBhdGg8L2gzPgorCis8cD5HQ0MgbG9va3MgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgcGxhY2VzIGZvciBoZWFkZXJzLiAgT24gYSBub3JtYWwgVW5peAorc3lzdGVtLCBpZiB5b3UgZG8gbm90IGluc3RydWN0IGl0IG90aGVyd2lzZSwgaXQgd2lsbCBsb29rIGZvciBoZWFkZXJzCityZXF1ZXN0ZWQgd2l0aCA8Y29kZT4jaW5jbHVkZSZuYnNwOyZsdDs8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+Jmd0OzwhLS0gL0B3IC0tPjwvY29kZT4gaW46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAvdXNyL2xvY2FsL2luY2x1ZGUKKyAgICAgPHZhcj5saWJkaXI8L3Zhcj4vZ2NjLzx2YXI+dGFyZ2V0PC92YXI+Lzx2YXI+dmVyc2lvbjwvdmFyPi9pbmNsdWRlCisgICAgIC91c3IvPHZhcj50YXJnZXQ8L3Zhcj4vaW5jbHVkZQorICAgICAvdXNyL2luY2x1ZGUKKzwvcHJlPgorICAgPHA+Rm9yIEMrKyBwcm9ncmFtcywgaXQgd2lsbCBhbHNvIGxvb2sgaW4KKzxzYW1wPjx2YXI+bGliZGlyPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi8uLi9pbmNsdWRlL2MrKy88L3NwYW4+PHZhcj52ZXJzaW9uPC92YXI+PC9zYW1wPiwKK2ZpcnN0LiAgSW4gdGhlIGFib3ZlLCA8dmFyPnRhcmdldDwvdmFyPiBpcyB0aGUgY2Fub25pY2FsIG5hbWUgb2YgdGhlIHN5c3RlbQorR0NDIHdhcyBjb25maWd1cmVkIHRvIGNvbXBpbGUgY29kZSBmb3I7IG9mdGVuIGJ1dCBub3QgYWx3YXlzIHRoZSBzYW1lIGFzCit0aGUgY2Fub25pY2FsIG5hbWUgb2YgdGhlIHN5c3RlbSBpdCBydW5zIG9uLiAgPHZhcj52ZXJzaW9uPC92YXI+IGlzIHRoZQordmVyc2lvbiBvZiBHQ0MgaW4gdXNlLgorCisgICA8cD5Zb3UgY2FuIGFkZCB0byB0aGlzIGxpc3Qgd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PHZhcj5kaXI8L3Zhcj48L3NhbXA+IGNvbW1hbmQgbGluZQorb3B0aW9uLiAgQWxsIHRoZSBkaXJlY3RvcmllcyBuYW1lZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGFyZSBzZWFyY2hlZCwgaW4KK2xlZnQtdG8tcmlnaHQgb3JkZXIsIDxlbT5iZWZvcmU8L2VtPiB0aGUgZGVmYXVsdCBkaXJlY3Rvcmllcy4gIFRoZSBvbmx5CitleGNlcHRpb24gaXMgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZGlyPC9zcGFuPjwvc2FtcD4gaXMgYWxyZWFkeSBzZWFyY2hlZCBieSBkZWZhdWx0LiAgSW4KK3RoaXMgY2FzZSwgdGhlIG9wdGlvbiBpcyBpZ25vcmVkIGFuZCB0aGUgc2VhcmNoIG9yZGVyIGZvciBzeXN0ZW0KK2RpcmVjdG9yaWVzIHJlbWFpbnMgdW5jaGFuZ2VkLgorCisgICA8cD5EdXBsaWNhdGUgZGlyZWN0b3JpZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcXVvdGUgYW5kIGJyYWNrZXQgc2VhcmNoCitjaGFpbnMgYmVmb3JlIHRoZSB0d28gY2hhaW5zIGFyZSBtZXJnZWQgdG8gbWFrZSB0aGUgZmluYWwgc2VhcmNoIGNoYWluLiAKK1RodXMsIGl0IGlzIHBvc3NpYmxlIGZvciBhIGRpcmVjdG9yeSB0byBvY2N1ciB0d2ljZSBpbiB0aGUgZmluYWwgc2VhcmNoCitjaGFpbiBpZiBpdCB3YXMgc3BlY2lmaWVkIGluIGJvdGggdGhlIHF1b3RlIGFuZCBicmFja2V0IGNoYWlucy4KKworICAgPHA+WW91IGNhbiBwcmV2ZW50IEdDQyBmcm9tIHNlYXJjaGluZyBhbnkgb2YgdGhlIGRlZmF1bHQgZGlyZWN0b3JpZXMgd2l0aAordGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub3N0ZGluYzwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSBjb21waWxpbmcgYW4KK29wZXJhdGluZyBzeXN0ZW0ga2VybmVsIG9yIHNvbWUgb3RoZXIgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHVzZSB0aGUKK3N0YW5kYXJkIEMgbGlicmFyeSBmYWNpbGl0aWVzLCBvciB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGl0c2VsZi4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgYXJlIG5vdCBpZ25vcmVkIGFzIGRlc2NyaWJlZCBhYm92ZSB3aGVuCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9zdGRpbmM8L3NwYW4+PC9zYW1wPiBpcyBpbiBlZmZlY3QuCisKKyAgIDxwPkdDQyBsb29rcyBmb3IgaGVhZGVycyByZXF1ZXN0ZWQgd2l0aCA8Y29kZT4jaW5jbHVkZSZuYnNwOyI8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+IjwhLS0gL0B3IC0tPjwvY29kZT4KK2ZpcnN0IGluIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY3VycmVudCBmaWxlLCB0aGVuIGluIHRoZQorZGlyZWN0b3JpZXMgYXMgc3BlY2lmaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pcXVvdGU8L3NwYW4+PC9zYW1wPiBvcHRpb25zLCB0aGVuIGluIHRoZSBzYW1lCitwbGFjZXMgaXQgd291bGQgaGF2ZSBsb29rZWQgZm9yIGEgaGVhZGVyIHJlcXVlc3RlZCB3aXRoIGFuZ2xlCiticmFja2V0cy4gIEZvciBleGFtcGxlLCBpZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9pbmNsdWRlL3N5cy9zdGF0Lmg8L3NwYW4+PC9zYW1wPiBjb250YWlucworPGNvZGU+I2luY2x1ZGUmbmJzcDsidHlwZXMuaCI8IS0tIC9AdyAtLT48L2NvZGU+LCBHQ0MgbG9va3MgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj50eXBlcy5oPC9zcGFuPjwvc2FtcD4gZmlyc3QgaW4KKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vdXNyL2luY2x1ZGUvc3lzPC9zcGFuPjwvc2FtcD4sIHRoZW4gaW4gaXRzIHVzdWFsIHNlYXJjaCBwYXRoLgorCisgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNsaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IChzZWUgPGEgaHJlZj0iTGluZS1Db250cm9sLmh0bWwjTGluZS1Db250cm9sIj5MaW5lIENvbnRyb2w8L2E+KSBkb2VzIG5vdCBjaGFuZ2UgR0NDJ3MgaWRlYSBvZiB0aGUKK2RpcmVjdG9yeSBjb250YWluaW5nIHRoZSBjdXJyZW50IGZpbGUuCisKKyAgIDxwPllvdSBtYXkgcHV0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JLTwvc3Bhbj48L3NhbXA+IGF0IGFueSBwb2ludCBpbiB5b3VyIGxpc3Qgb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBvcHRpb25zLiAKK1RoaXMgaGFzIHR3byBlZmZlY3RzLiAgRmlyc3QsIGRpcmVjdG9yaWVzIGFwcGVhcmluZyBiZWZvcmUgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSS08L3NwYW4+PC9zYW1wPiBpbiB0aGUgbGlzdCBhcmUgc2VhcmNoZWQgb25seSBmb3IgaGVhZGVycyByZXF1ZXN0ZWQgd2l0aAorcXVvdGUgbWFya3MuICBEaXJlY3RvcmllcyBhZnRlciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSS08L3NwYW4+PC9zYW1wPiBhcmUgc2VhcmNoZWQgZm9yIGFsbAoraGVhZGVycy4gIFNlY29uZCwgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBjdXJyZW50IGZpbGUgaXMgbm90CitzZWFyY2hlZCBmb3IgYW55dGhpbmcsIHVubGVzcyBpdCBoYXBwZW5zIHRvIGJlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMKK25hbWVkIGJ5IGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gc3dpdGNoLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUktPC9zcGFuPjwvc2FtcD4gaXMgZGVwcmVjYXRlZCwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlxdW90ZTwvc3Bhbj48L3NhbXA+CitzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorCisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSS4gLUktPC9zcGFuPjwvc2FtcD4gaXMgbm90IHRoZSBzYW1lIGFzIG5vIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBhdCBhbGwsIGFuZCBkb2VzCitub3QgY2F1c2UgdGhlIHNhbWUgYmVoYXZpb3IgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0OyZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5jbHVkZXMgdGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiIiPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbmNsdWRlcyBnZXQgd2l0aCBubyBzcGVjaWFsIG9wdGlvbnMuICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSS48L3NwYW4+PC9zYW1wPiBzZWFyY2hlcyB0aGUKK2NvbXBpbGVyJ3MgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgaGVhZGVyIGZpbGVzLiAgVGhhdCBtYXkgb3IgbWF5Citub3QgYmUgdGhlIHNhbWUgYXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBjdXJyZW50IGZpbGUuCisKKyAgIDxwPklmIHlvdSBuZWVkIHRvIGxvb2sgZm9yIGhlYWRlcnMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi08L3NwYW4+PC9zYW1wPiwgd3JpdGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JLi8tPC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPlRoZXJlIGFyZSBzZXZlcmFsIG1vcmUgd2F5cyB0byBhZGp1c3QgdGhlIGhlYWRlciBzZWFyY2ggcGF0aC4gIFRoZXkgYXJlCitnZW5lcmFsbHkgbGVzcyB1c2VmdWwuICBTZWUgPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1NlbGZfMDAyZFJlZmVyZW50aWFsLU1hY3Jvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9TZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjA5YzUwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9TZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbApAQCAtMCwwICsxLDExOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2VsZi1SZWZlcmVudGlhbCBNYWNyb3MgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjcm8tUGl0ZmFsbHMuaHRtbCNNYWNyby1QaXRmYWxscyIgdGl0bGU9Ik1hY3JvIFBpdGZhbGxzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRHVwbGljYXRpb24tb2YtU2lkZS1FZmZlY3RzLmh0bWwjRHVwbGljYXRpb24tb2YtU2lkZS1FZmZlY3RzIiB0aXRsZT0iRHVwbGljYXRpb24gb2YgU2lkZSBFZmZlY3RzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQXJndW1lbnQtUHJlc2Nhbi5odG1sI0FyZ3VtZW50LVByZXNjYW4iIHRpdGxlPSJBcmd1bWVudCBQcmVzY2FuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNlbGYtUmVmZXJlbnRpYWwtTWFjcm9zIj48L2E+Cis8YSBuYW1lPSJTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXJndW1lbnQtUHJlc2Nhbi5odG1sI0FyZ3VtZW50LVByZXNjYW4iPkFyZ3VtZW50IFByZXNjYW48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEdXBsaWNhdGlvbi1vZi1TaWRlLUVmZmVjdHMuaHRtbCNEdXBsaWNhdGlvbi1vZi1TaWRlLUVmZmVjdHMiPkR1cGxpY2F0aW9uIG9mIFNpZGUgRWZmZWN0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY3JvLVBpdGZhbGxzLmh0bWwjTWFjcm8tUGl0ZmFsbHMiPk1hY3JvIFBpdGZhbGxzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xMC41IFNlbGYtUmVmZXJlbnRpYWwgTWFjcm9zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtc2VsZl8wMDJkcmVmZXJlbmNlLTc4Ij48L2E+CitBIDxkZm4+c2VsZi1yZWZlcmVudGlhbDwvZGZuPiBtYWNybyBpcyBvbmUgd2hvc2UgbmFtZSBhcHBlYXJzIGluIGl0cworZGVmaW5pdGlvbi4gIFJlY2FsbCB0aGF0IGFsbCBtYWNybyBkZWZpbml0aW9ucyBhcmUgcmVzY2FubmVkIGZvciBtb3JlCittYWNyb3MgdG8gcmVwbGFjZS4gIElmIHRoZSBzZWxmLXJlZmVyZW5jZSB3ZXJlIGNvbnNpZGVyZWQgYSB1c2Ugb2YgdGhlCittYWNybywgaXQgd291bGQgcHJvZHVjZSBhbiBpbmZpbml0ZWx5IGxhcmdlIGV4cGFuc2lvbi4gIFRvIHByZXZlbnQgdGhpcywKK3RoZSBzZWxmLXJlZmVyZW5jZSBpcyBub3QgY29uc2lkZXJlZCBhIG1hY3JvIGNhbGwuICBJdCBpcyBwYXNzZWQgaW50bwordGhlIHByZXByb2Nlc3NvciBvdXRwdXQgdW5jaGFuZ2VkLiAgQ29uc2lkZXIgYW4gZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgZm9vICg0ICsgZm9vKQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPndoZXJlIDxjb2RlPmZvbzwvY29kZT4gaXMgYWxzbyBhIHZhcmlhYmxlIGluIHlvdXIgcHJvZ3JhbS4KKworICAgPHA+Rm9sbG93aW5nIHRoZSBvcmRpbmFyeSBydWxlcywgZWFjaCByZWZlcmVuY2UgdG8gPGNvZGU+Zm9vPC9jb2RlPiB3aWxsIGV4cGFuZAoraW50byA8Y29kZT4oNCArIGZvbyk8L2NvZGU+OyB0aGVuIHRoaXMgd2lsbCBiZSByZXNjYW5uZWQgYW5kIHdpbGwgZXhwYW5kIGludG8KKzxjb2RlPig0ICsgKDQgKyBmb28pKTwvY29kZT47IGFuZCBzbyBvbiB1bnRpbCB0aGUgY29tcHV0ZXIgcnVucyBvdXQgb2YgbWVtb3J5LgorCisgICA8cD5UaGUgc2VsZi1yZWZlcmVuY2UgcnVsZSBjdXRzIHRoaXMgcHJvY2VzcyBzaG9ydCBhZnRlciBvbmUgc3RlcCwgYXQKKzxjb2RlPig0ICsgZm9vKTwvY29kZT4uICBUaGVyZWZvcmUsIHRoaXMgbWFjcm8gZGVmaW5pdGlvbiBoYXMgdGhlIHBvc3NpYmx5Cit1c2VmdWwgZWZmZWN0IG9mIGNhdXNpbmcgdGhlIHByb2dyYW0gdG8gYWRkIDQgdG8gdGhlIHZhbHVlIG9mIDxjb2RlPmZvbzwvY29kZT4KK3doZXJldmVyIDxjb2RlPmZvbzwvY29kZT4gaXMgcmVmZXJyZWQgdG8uCisKKyAgIDxwPkluIG1vc3QgY2FzZXMsIGl0IGlzIGEgYmFkIGlkZWEgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmZWF0dXJlLiAgQQorcGVyc29uIHJlYWRpbmcgdGhlIHByb2dyYW0gd2hvIHNlZXMgdGhhdCA8Y29kZT5mb288L2NvZGU+IGlzIGEgdmFyaWFibGUgd2lsbAorbm90IGV4cGVjdCB0aGF0IGl0IGlzIGEgbWFjcm8gYXMgd2VsbC4gIFRoZSByZWFkZXIgd2lsbCBjb21lIGFjcm9zcyB0aGUKK2lkZW50aWZpZXIgPGNvZGU+Zm9vPC9jb2RlPiBpbiB0aGUgcHJvZ3JhbSBhbmQgdGhpbmsgaXRzIHZhbHVlIHNob3VsZCBiZSB0aGF0CitvZiB0aGUgdmFyaWFibGUgPGNvZGU+Zm9vPC9jb2RlPiwgd2hlcmVhcyBpbiBmYWN0IHRoZSB2YWx1ZSBpcyBmb3VyIGdyZWF0ZXIuCisKKyAgIDxwPk9uZSBjb21tb24sIHVzZWZ1bCB1c2Ugb2Ygc2VsZi1yZWZlcmVuY2UgaXMgdG8gY3JlYXRlIGEgbWFjcm8gd2hpY2gKK2V4cGFuZHMgdG8gaXRzZWxmLiAgSWYgeW91IHdyaXRlCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIEVQRVJNIEVQRVJNCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+dGhlbiB0aGUgbWFjcm8gPGNvZGU+RVBFUk08L2NvZGU+IGV4cGFuZHMgdG8gPGNvZGU+RVBFUk08L2NvZGU+LiAgRWZmZWN0aXZlbHksIGl0IGlzCitsZWZ0IGFsb25lIGJ5IHRoZSBwcmVwcm9jZXNzb3Igd2hlbmV2ZXIgaXQncyB1c2VkIGluIHJ1bm5pbmcgdGV4dC4gIFlvdQorY2FuIHRlbGwgdGhhdCBpdCdzIGEgbWFjcm8gd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpZmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFlvdSBtaWdodCBkbyB0aGlzIGlmIHlvdQord2FudCB0byBkZWZpbmUgbnVtZXJpYyBjb25zdGFudHMgd2l0aCBhbiA8Y29kZT5lbnVtPC9jb2RlPiwgYnV0IGhhdmUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJlIHRydWUgZm9yIGVhY2ggY29uc3RhbnQuCisKKyAgIDxwPklmIGEgbWFjcm8gPGNvZGU+eDwvY29kZT4gZXhwYW5kcyB0byB1c2UgYSBtYWNybyA8Y29kZT55PC9jb2RlPiwgYW5kIHRoZSBleHBhbnNpb24gb2YKKzxjb2RlPnk8L2NvZGU+IHJlZmVycyB0byB0aGUgbWFjcm8gPGNvZGU+eDwvY29kZT4sIHRoYXQgaXMgYW4gPGRmbj5pbmRpcmVjdAorc2VsZi1yZWZlcmVuY2U8L2Rmbj4gb2YgPGNvZGU+eDwvY29kZT4uICA8Y29kZT54PC9jb2RlPiBpcyBub3QgZXhwYW5kZWQgaW4gdGhpcyBjYXNlCitlaXRoZXIuICBUaHVzLCBpZiB3ZSBoYXZlCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIHggKDQgKyB5KQorICAgICAjZGVmaW5lIHkgKDIgKiB4KQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPnRoZW4gPGNvZGU+eDwvY29kZT4gYW5kIDxjb2RlPnk8L2NvZGU+IGV4cGFuZCBhcyBmb2xsb3dzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgeCAgICA9PSZndDsgKDQgKyB5KQorICAgICAgICAgID09Jmd0OyAoNCArICgyICogeCkpCisgICAgIAorICAgICB5ICAgID09Jmd0OyAoMiAqIHgpCisgICAgICAgICAgPT0mZ3Q7ICgyICogKDQgKyB5KSkKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5FYWNoIG1hY3JvIGlzIGV4cGFuZGVkIHdoZW4gaXQgYXBwZWFycyBpbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb3RoZXIKK21hY3JvLCBidXQgbm90IHdoZW4gaXQgaW5kaXJlY3RseSBhcHBlYXJzIGluIGl0cyBvd24gZGVmaW5pdGlvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9TdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9TdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjIyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1N0YW5kYXJkLVByZWRlZmluZWQtTWFjcm9zLmh0bWwKQEAgLTAsMCArMSwxNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN0YW5kYXJkIFByZWRlZmluZWQgTWFjcm9zIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlByZWRlZmluZWQtTWFjcm9zLmh0bWwjUHJlZGVmaW5lZC1NYWNyb3MiIHRpdGxlPSJQcmVkZWZpbmVkIE1hY3JvcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNvbW1vbi1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI0NvbW1vbi1QcmVkZWZpbmVkLU1hY3JvcyIgdGl0bGU9IkNvbW1vbiBQcmVkZWZpbmVkIE1hY3JvcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3JvcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb21tb24tUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNDb21tb24tUHJlZGVmaW5lZC1NYWNyb3MiPkNvbW1vbiBQcmVkZWZpbmVkIE1hY3JvczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlByZWRlZmluZWQtTWFjcm9zLmh0bWwjUHJlZGVmaW5lZC1NYWNyb3MiPlByZWRlZmluZWQgTWFjcm9zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My43LjEgU3RhbmRhcmQgUHJlZGVmaW5lZCBNYWNyb3M8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1zdGFuZGFyZC1wcmVkZWZpbmVkLW1hY3Jvc18wMDJlLTYwIj48L2E+CitUaGUgc3RhbmRhcmQgcHJlZGVmaW5lZCBtYWNyb3MgYXJlIHNwZWNpZmllZCBieSB0aGUgcmVsZXZhbnQKK2xhbmd1YWdlIHN0YW5kYXJkcywgc28gdGhleSBhcmUgYXZhaWxhYmxlIHdpdGggYWxsIGNvbXBpbGVycyB0aGF0CitpbXBsZW1lbnQgdGhvc2Ugc3RhbmRhcmRzLiAgT2xkZXIgY29tcGlsZXJzIG1heSBub3QgcHJvdmlkZSBhbGwgb2YKK3RoZW0uICBUaGVpciBuYW1lcyBhbGwgc3RhcnQgd2l0aCBkb3VibGUgdW5kZXJzY29yZXMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPl9fRklMRV9fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGV4cGFuZHMgdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgaW5wdXQgZmlsZSwgaW4gdGhlIGZvcm0gb2YKK2EgQyBzdHJpbmcgY29uc3RhbnQuICBUaGlzIGlzIHRoZSBwYXRoIGJ5IHdoaWNoIHRoZSBwcmVwcm9jZXNzb3Igb3BlbmVkCit0aGUgZmlsZSwgbm90IHRoZSBzaG9ydCBuYW1lIHNwZWNpZmllZCBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yIGFzIHRoZQoraW5wdXQgZmlsZSBuYW1lIGFyZ3VtZW50LiAgRm9yIGV4YW1wbGUsCis8Y29kZT4iL3Vzci9sb2NhbC9pbmNsdWRlL215aGVhZGVyLmgiPC9jb2RlPiBpcyBhIHBvc3NpYmxlIGV4cGFuc2lvbiBvZiB0aGlzCittYWNyby4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fTElORV9fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGV4cGFuZHMgdG8gdGhlIGN1cnJlbnQgaW5wdXQgbGluZSBudW1iZXIsIGluIHRoZSBmb3JtIG9mIGEKK2RlY2ltYWwgaW50ZWdlciBjb25zdGFudC4gIFdoaWxlIHdlIGNhbGwgaXQgYSBwcmVkZWZpbmVkIG1hY3JvLCBpdCdzCithIHByZXR0eSBzdHJhbmdlIG1hY3JvLCBzaW5jZSBpdHMgJmxkcXVvO2RlZmluaXRpb24mcmRxdW87IGNoYW5nZXMgd2l0aCBlYWNoCituZXcgbGluZSBvZiBzb3VyY2UgY29kZS4gCis8L2RsPgorCisgICA8cD48Y29kZT5fX0ZJTEVfXzwvY29kZT4gYW5kIDxjb2RlPl9fTElORV9fPC9jb2RlPiBhcmUgdXNlZnVsIGluIGdlbmVyYXRpbmcgYW4gZXJyb3IKK21lc3NhZ2UgdG8gcmVwb3J0IGFuIGluY29uc2lzdGVuY3kgZGV0ZWN0ZWQgYnkgdGhlIHByb2dyYW07IHRoZSBtZXNzYWdlCitjYW4gc3RhdGUgdGhlIHNvdXJjZSBsaW5lIGF0IHdoaWNoIHRoZSBpbmNvbnNpc3RlbmN5IHdhcyBkZXRlY3RlZC4gIEZvcgorZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGZwcmludGYgKHN0ZGVyciwgIkludGVybmFsIGVycm9yOiAiCisgICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIHN0cmluZyBsZW5ndGggIgorICAgICAgICAgICAgICAgICAgICAgICIlZCBhdCAlcywgbGluZSAlZC4iLAorICAgICAgICAgICAgICBsZW5ndGgsIF9fRklMRV9fLCBfX0xJTkVfXyk7Cis8L3ByZT4KKyAgIDxwPkFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIGNoYW5nZXMgdGhlIGV4cGFuc2lvbnMgb2YgPGNvZGU+X19GSUxFX188L2NvZGU+CithbmQgPGNvZGU+X19MSU5FX188L2NvZGU+IHRvIGNvcnJlc3BvbmQgdG8gdGhlIGluY2x1ZGVkIGZpbGUuICBBdCB0aGUgZW5kIG9mCit0aGF0IGZpbGUsIHdoZW4gcHJvY2Vzc2luZyByZXN1bWVzIG9uIHRoZSBpbnB1dCBmaWxlIHRoYXQgY29udGFpbmVkCit0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUsIHRoZSBleHBhbnNpb25zIG9mIDxjb2RlPl9fRklMRV9fPC9jb2RlPiBhbmQKKzxjb2RlPl9fTElORV9fPC9jb2RlPiByZXZlcnQgdG8gdGhlIHZhbHVlcyB0aGV5IGhhZCBiZWZvcmUgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IChidXQgPGNvZGU+X19MSU5FX188L2NvZGU+IGlzIHRoZW4gaW5jcmVtZW50ZWQgYnkgb25lIGFzCitwcm9jZXNzaW5nIG1vdmVzIHRvIHRoZSBsaW5lIGFmdGVyIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87KS4KKworICAgPHA+QSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNsaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSBjaGFuZ2VzIDxjb2RlPl9fTElORV9fPC9jb2RlPiwgYW5kIG1heSBjaGFuZ2UKKzxjb2RlPl9fRklMRV9fPC9jb2RlPiBhcyB3ZWxsLiAgU2VlIDxhIGhyZWY9IkxpbmUtQ29udHJvbC5odG1sI0xpbmUtQ29udHJvbCI+TGluZSBDb250cm9sPC9hPi4KKworICAgPHA+Qzk5IGludHJvZHVjZXMgPGNvZGU+X19mdW5jX188L2NvZGU+LCBhbmQgR0NDIGhhcyBwcm92aWRlZCA8Y29kZT5fX0ZVTkNUSU9OX188L2NvZGU+Citmb3IgYSBsb25nIHRpbWUuICBCb3RoIG9mIHRoZXNlIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlCitjdXJyZW50IGZ1bmN0aW9uICh0aGVyZSBhcmUgc2xpZ2h0IHNlbWFudGljIGRpZmZlcmVuY2VzOyBzZWUgdGhlIEdDQworbWFudWFsKS4gIE5laXRoZXIgb2YgdGhlbSBpcyBhIG1hY3JvOyB0aGUgcHJlcHJvY2Vzc29yIGRvZXMgbm90IGtub3cgdGhlCituYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgVGhleSB0ZW5kIHRvIGJlIHVzZWZ1bCBpbiBjb25qdW5jdGlvbgord2l0aCA8Y29kZT5fX0ZJTEVfXzwvY29kZT4gYW5kIDxjb2RlPl9fTElORV9fPC9jb2RlPiwgdGhvdWdoLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5fX0RBVEVfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBleHBhbmRzIHRvIGEgc3RyaW5nIGNvbnN0YW50IHRoYXQgZGVzY3JpYmVzIHRoZSBkYXRlIG9uIHdoaWNoCit0aGUgcHJlcHJvY2Vzc29yIGlzIGJlaW5nIHJ1bi4gIFRoZSBzdHJpbmcgY29uc3RhbnQgY29udGFpbnMgZWxldmVuCitjaGFyYWN0ZXJzIGFuZCBsb29rcyBsaWtlIDxjb2RlPiJGZWImbmJzcDsxMiZuYnNwOzE5OTYiPCEtLSAvQHcgLS0+PC9jb2RlPi4gIElmIHRoZSBkYXkgb2YgdGhlCittb250aCBpcyBsZXNzIHRoYW4gMTAsIGl0IGlzIHBhZGRlZCB3aXRoIGEgc3BhY2Ugb24gdGhlIGxlZnQuCisKKyAgICAgPHA+SWYgR0NDIGNhbm5vdCBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgZGF0ZSwgaXQgd2lsbCBlbWl0IGEgd2FybmluZyBtZXNzYWdlCisob25jZSBwZXIgY29tcGlsYXRpb24pIGFuZCA8Y29kZT5fX0RBVEVfXzwvY29kZT4gd2lsbCBleHBhbmQgdG8KKzxjb2RlPiI/Pz8mbmJzcDs/PyZuYnNwOz8/Pz8iPCEtLSAvQHcgLS0+PC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fVElNRV9fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGV4cGFuZHMgdG8gYSBzdHJpbmcgY29uc3RhbnQgdGhhdCBkZXNjcmliZXMgdGhlIHRpbWUgYXQKK3doaWNoIHRoZSBwcmVwcm9jZXNzb3IgaXMgYmVpbmcgcnVuLiAgVGhlIHN0cmluZyBjb25zdGFudCBjb250YWlucworZWlnaHQgY2hhcmFjdGVycyBhbmQgbG9va3MgbGlrZSA8Y29kZT4iMjM6NTk6MDEiPC9jb2RlPi4KKworICAgICA8cD5JZiBHQ0MgY2Fubm90IGRldGVybWluZSB0aGUgY3VycmVudCB0aW1lLCBpdCB3aWxsIGVtaXQgYSB3YXJuaW5nIG1lc3NhZ2UKKyhvbmNlIHBlciBjb21waWxhdGlvbikgYW5kIDxjb2RlPl9fVElNRV9fPC9jb2RlPiB3aWxsIGV4cGFuZCB0bworPGNvZGU+Ij8/Oj8/Oj8/IjwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX1NURENfXzwvY29kZT48ZGQ+SW4gbm9ybWFsIG9wZXJhdGlvbiwgdGhpcyBtYWNybyBleHBhbmRzIHRvIHRoZSBjb25zdGFudCAxLCB0byBzaWduaWZ5Cit0aGF0IHRoaXMgY29tcGlsZXIgY29uZm9ybXMgdG8gSVNPIFN0YW5kYXJkIEMuICBJZiBHTlUgQ1BQIGlzIHVzZWQgd2l0aAorYSBjb21waWxlciBvdGhlciB0aGFuIEdDQywgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZTsgaG93ZXZlciwgdGhlCitwcmVwcm9jZXNzb3IgYWx3YXlzIGNvbmZvcm1zIHRvIHRoZSBzdGFuZGFyZCB1bmxlc3MgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdHJhZGl0aW9uYWwtY3BwPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHVzZWQuCisKKyAgICAgPHA+VGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCBpZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXRyYWRpdGlvbmFsLWNwcDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyB1c2VkLgorCisgICAgIDxwPk9uIHNvbWUgaG9zdHMsIHRoZSBzeXN0ZW0gY29tcGlsZXIgdXNlcyBhIGRpZmZlcmVudCBjb252ZW50aW9uLCB3aGVyZQorPGNvZGU+X19TVERDX188L2NvZGU+IGlzIG5vcm1hbGx5IDAsIGJ1dCBpcyAxIGlmIHRoZSB1c2VyIHNwZWNpZmllcyBzdHJpY3QKK2NvbmZvcm1hbmNlIHRvIHRoZSBDIFN0YW5kYXJkLiAgQ1BQIGZvbGxvd3MgdGhlIGhvc3QgY29udmVudGlvbiB3aGVuCitwcm9jZXNzaW5nIHN5c3RlbSBoZWFkZXIgZmlsZXMsIGJ1dCB3aGVuIHByb2Nlc3NpbmcgdXNlciBmaWxlcworPGNvZGU+X19TVERDX188L2NvZGU+IGlzIGFsd2F5cyAxLiAgVGhpcyBoYXMgYmVlbiByZXBvcnRlZCB0byBjYXVzZSBwcm9ibGVtczsKK2ZvciBpbnN0YW5jZSwgc29tZSB2ZXJzaW9ucyBvZiBTb2xhcmlzIHByb3ZpZGUgWCBXaW5kb3dzIGhlYWRlcnMgdGhhdAorZXhwZWN0IDxjb2RlPl9fU1REQ19fPC9jb2RlPiB0byBiZSBlaXRoZXIgdW5kZWZpbmVkIG9yIDEuICBTZWUgPGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19TVERDX1ZFUlNJT05fXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBleHBhbmRzIHRvIHRoZSBDIFN0YW5kYXJkJ3MgdmVyc2lvbiBudW1iZXIsIGEgbG9uZyBpbnRlZ2VyCitjb25zdGFudCBvZiB0aGUgZm9ybSA8dmFyPnl5eXk8L3Zhcj48dmFyPm1tPC92YXI+PGNvZGU+TDwvY29kZT4gd2hlcmUgPHZhcj55eXl5PC92YXI+IGFuZAorPHZhcj5tbTwvdmFyPiBhcmUgdGhlIHllYXIgYW5kIG1vbnRoIG9mIHRoZSBTdGFuZGFyZCB2ZXJzaW9uLiAgVGhpcyBzaWduaWZpZXMKK3doaWNoIHZlcnNpb24gb2YgdGhlIEMgU3RhbmRhcmQgdGhlIGNvbXBpbGVyIGNvbmZvcm1zIHRvLiAgTGlrZQorPGNvZGU+X19TVERDX188L2NvZGU+LCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhY2N1cmF0ZSBmb3IgdGhlIGVudGlyZQoraW1wbGVtZW50YXRpb24sIHVubGVzcyBHTlUgQ1BQIGlzIGJlaW5nIHVzZWQgd2l0aCBHQ0MuCisKKyAgICAgPHA+VGhlIHZhbHVlIDxjb2RlPjE5OTQwOUw8L2NvZGU+IHNpZ25pZmllcyB0aGUgMTk4OSBDIHN0YW5kYXJkIGFzIGFtZW5kZWQgaW4KKzE5OTQsIHdoaWNoIGlzIHRoZSBjdXJyZW50IGRlZmF1bHQ7IHRoZSB2YWx1ZSA8Y29kZT4xOTk5MDFMPC9jb2RlPiBzaWduaWZpZXMKK3RoZSAxOTk5IHJldmlzaW9uIG9mIHRoZSBDIHN0YW5kYXJkLiAgU3VwcG9ydCBmb3IgdGhlIDE5OTkgcmV2aXNpb24gaXMKK25vdCB5ZXQgY29tcGxldGUuCisKKyAgICAgPHA+VGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCBpZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXRyYWRpdGlvbmFsLWNwcDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcwordXNlZCwgbm9yIHdoZW4gY29tcGlsaW5nIEMrKyBvciBPYmplY3RpdmUtQy4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fU1REQ19IT1NURURfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkLCB3aXRoIHZhbHVlIDEsIGlmIHRoZSBjb21waWxlcidzIHRhcmdldCBpcyBhCis8ZGZuPmhvc3RlZCBlbnZpcm9ubWVudDwvZGZuPi4gIEEgaG9zdGVkIGVudmlyb25tZW50IGhhcyB0aGUgY29tcGxldGUKK2ZhY2lsaXRpZXMgb2YgdGhlIHN0YW5kYXJkIEMgbGlicmFyeSBhdmFpbGFibGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX2NwbHVzcGx1czwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkIHdoZW4gdGhlIEMrKyBjb21waWxlciBpcyBpbiB1c2UuICBZb3UgY2FuIHVzZQorPGNvZGU+X19jcGx1c3BsdXM8L2NvZGU+IHRvIHRlc3Qgd2hldGhlciBhIGhlYWRlciBpcyBjb21waWxlZCBieSBhIEMgY29tcGlsZXIKK29yIGEgQysrIGNvbXBpbGVyLiAgVGhpcyBtYWNybyBpcyBzaW1pbGFyIHRvIDxjb2RlPl9fU1REQ19WRVJTSU9OX188L2NvZGU+LCBpbgordGhhdCBpdCBleHBhbmRzIHRvIGEgdmVyc2lvbiBudW1iZXIuICBEZXBlbmRpbmcgb24gdGhlIGxhbmd1YWdlIHN0YW5kYXJkCitzZWxlY3RlZCwgdGhlIHZhbHVlIG9mIHRoZSBtYWNybyBpcyA8Y29kZT4xOTk3MTFMPC9jb2RlPiwgYXMgbWFuZGF0ZWQgYnkgdGhlCisxOTk4IEMrKyBzdGFuZGFyZCwgb3IgPGNvZGU+MjAxMTAzTDwvY29kZT4sIHBlciB0aGUgMjAxMSBDKysgc3RhbmRhcmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX09CSkNfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyBpcyBkZWZpbmVkLCB3aXRoIHZhbHVlIDEsIHdoZW4gdGhlIE9iamVjdGl2ZS1DIGNvbXBpbGVyIGlzIGluCit1c2UuICBZb3UgY2FuIHVzZSA8Y29kZT5fX09CSkNfXzwvY29kZT4gdG8gdGVzdCB3aGV0aGVyIGEgaGVhZGVyIGlzIGNvbXBpbGVkCitieSBhIEMgY29tcGlsZXIgb3IgYW4gT2JqZWN0aXZlLUMgY29tcGlsZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0FTU0VNQkxFUl9fPC9jb2RlPjxkZD5UaGlzIG1hY3JvIGlzIGRlZmluZWQgd2l0aCB2YWx1ZSAxIHdoZW4gcHJlcHJvY2Vzc2luZyBhc3NlbWJseQorbGFuZ3VhZ2UuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvU3RyaW5naWZpY2F0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1N0cmluZ2lmaWNhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2FkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1N0cmluZ2lmaWNhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTMyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdHJpbmdpZmljYXRpb24gLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIiB0aXRsZT0iTWFjcm9zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTWFjcm8tQXJndW1lbnRzLmh0bWwjTWFjcm8tQXJndW1lbnRzIiB0aXRsZT0iTWFjcm8gQXJndW1lbnRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29uY2F0ZW5hdGlvbi5odG1sI0NvbmNhdGVuYXRpb24iIHRpdGxlPSJDb25jYXRlbmF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlN0cmluZ2lmaWNhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb25jYXRlbmF0aW9uLmh0bWwjQ29uY2F0ZW5hdGlvbiI+Q29uY2F0ZW5hdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1hY3JvLUFyZ3VtZW50cy5odG1sI01hY3JvLUFyZ3VtZW50cyI+TWFjcm8gQXJndW1lbnRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIj5NYWNyb3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjQgU3RyaW5naWZpY2F0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RyaW5naWZpY2F0aW9uLTUwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyM18wMDdkLW9wZXJhdG9yLTUxIj48L2E+CitTb21ldGltZXMgeW91IG1heSB3YW50IHRvIGNvbnZlcnQgYSBtYWNybyBhcmd1bWVudCBpbnRvIGEgc3RyaW5nCitjb25zdGFudC4gIFBhcmFtZXRlcnMgYXJlIG5vdCByZXBsYWNlZCBpbnNpZGUgc3RyaW5nIGNvbnN0YW50cywgYnV0IHlvdQorY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IHByZXByb2Nlc3Npbmcgb3BlcmF0b3IgaW5zdGVhZC4gIFdoZW4gYSBtYWNybworcGFyYW1ldGVyIGlzIHVzZWQgd2l0aCBhIGxlYWRpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGUgcHJlcHJvY2Vzc29yIHJlcGxhY2VzIGl0Cit3aXRoIHRoZSBsaXRlcmFsIHRleHQgb2YgdGhlIGFjdHVhbCBhcmd1bWVudCwgY29udmVydGVkIHRvIGEgc3RyaW5nCitjb25zdGFudC4gIFVubGlrZSBub3JtYWwgcGFyYW1ldGVyIHJlcGxhY2VtZW50LCB0aGUgYXJndW1lbnQgaXMgbm90CittYWNyby1leHBhbmRlZCBmaXJzdC4gIFRoaXMgaXMgY2FsbGVkIDxkZm4+c3RyaW5naWZpY2F0aW9uPC9kZm4+LgorCisgICA8cD5UaGVyZSBpcyBubyB3YXkgdG8gY29tYmluZSBhbiBhcmd1bWVudCB3aXRoIHN1cnJvdW5kaW5nIHRleHQgYW5kCitzdHJpbmdpZnkgaXQgYWxsIHRvZ2V0aGVyLiAgSW5zdGVhZCwgeW91IGNhbiB3cml0ZSBhIHNlcmllcyBvZiBhZGphY2VudAorc3RyaW5nIGNvbnN0YW50cyBhbmQgc3RyaW5naWZpZWQgYXJndW1lbnRzLiAgVGhlIHByZXByb2Nlc3NvciB3aWxsCityZXBsYWNlIHRoZSBzdHJpbmdpZmllZCBhcmd1bWVudHMgd2l0aCBzdHJpbmcgY29uc3RhbnRzLiAgVGhlIEMKK2NvbXBpbGVyIHdpbGwgdGhlbiBjb21iaW5lIGFsbCB0aGUgYWRqYWNlbnQgc3RyaW5nIGNvbnN0YW50cyBpbnRvIG9uZQorbG9uZyBzdHJpbmcuCisKKyAgIDxwPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1hY3JvIGRlZmluaXRpb24gdGhhdCB1c2VzIHN0cmluZ2lmaWNhdGlvbjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgV0FSTl9JRihFWFApIFwKKyAgICAgZG8geyBpZiAoRVhQKSBcCisgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiV2FybmluZzogIiAjRVhQICJcbiIpOyB9IFwKKyAgICAgd2hpbGUgKDApCisgICAgIFdBUk5fSUYgKHggPT0gMCk7CisgICAgICAgICAgPT0mZ3Q7IGRvIHsgaWYgKHggPT0gMCkKKyAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJXYXJuaW5nOiAiICJ4ID09IDAiICJcbiIpOyB9IHdoaWxlICgwKTsKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGUgYXJndW1lbnQgZm9yIDxjb2RlPkVYUDwvY29kZT4gaXMgc3Vic3RpdHV0ZWQgb25jZSwgYXMtaXMsIGludG8gdGhlCis8Y29kZT5pZjwvY29kZT4gc3RhdGVtZW50LCBhbmQgb25jZSwgc3RyaW5naWZpZWQsIGludG8gdGhlIGFyZ3VtZW50IHRvCis8Y29kZT5mcHJpbnRmPC9jb2RlPi4gIElmIDxjb2RlPng8L2NvZGU+IHdlcmUgYSBtYWNybywgaXQgd291bGQgYmUgZXhwYW5kZWQgaW4gdGhlCis8Y29kZT5pZjwvY29kZT4gc3RhdGVtZW50LCBidXQgbm90IGluIHRoZSBzdHJpbmcuCisKKyAgIDxwPlRoZSA8Y29kZT5kbzwvY29kZT4gYW5kIDxjb2RlPndoaWxlICgwKTwvY29kZT4gYXJlIGEga2x1ZGdlIHRvIG1ha2UgaXQgcG9zc2libGUgdG8KK3dyaXRlIDxjb2RlPldBUk5fSUYgKDwvY29kZT48dmFyPmFyZzwvdmFyPjxjb2RlPik7PC9jb2RlPiwgd2hpY2ggdGhlIHJlc2VtYmxhbmNlIG9mCis8Y29kZT5XQVJOX0lGPC9jb2RlPiB0byBhIGZ1bmN0aW9uIHdvdWxkIG1ha2UgQyBwcm9ncmFtbWVycyB3YW50IHRvIGRvOyBzZWUKKzxhIGhyZWY9IlN3YWxsb3dpbmctdGhlLVNlbWljb2xvbi5odG1sI1N3YWxsb3dpbmctdGhlLVNlbWljb2xvbiI+U3dhbGxvd2luZyB0aGUgU2VtaWNvbG9uPC9hPi4KKworICAgPHA+U3RyaW5naWZpY2F0aW9uIGluIEMgaW52b2x2ZXMgbW9yZSB0aGFuIHB1dHRpbmcgZG91YmxlLXF1b3RlIGNoYXJhY3RlcnMKK2Fyb3VuZCB0aGUgZnJhZ21lbnQuICBUaGUgcHJlcHJvY2Vzc29yIGJhY2tzbGFzaC1lc2NhcGVzIHRoZSBxdW90ZXMKK3N1cnJvdW5kaW5nIGVtYmVkZGVkIHN0cmluZyBjb25zdGFudHMsIGFuZCBhbGwgYmFja3NsYXNoZXMgd2l0aGluIHN0cmluZyBhbmQKK2NoYXJhY3RlciBjb25zdGFudHMsIGluIG9yZGVyIHRvIGdldCBhIHZhbGlkIEMgc3RyaW5nIGNvbnN0YW50IHdpdGggdGhlCitwcm9wZXIgY29udGVudHMuICBUaHVzLCBzdHJpbmdpZnlpbmcgPGNvZGU+cCZuYnNwOz0mbmJzcDsiZm9vXG4iOzwhLS0gL0B3IC0tPjwvY29kZT4gcmVzdWx0cyBpbgorPHR0PiJwJm5ic3A7PSZuYnNwO1wiZm9vXFxuXCI7IjwhLS0gL0B3IC0tPjwvdHQ+LiAgSG93ZXZlciwgYmFja3NsYXNoZXMgdGhhdCBhcmUgbm90IGluc2lkZSBzdHJpbmcKK29yIGNoYXJhY3RlciBjb25zdGFudHMgYXJlIG5vdCBkdXBsaWNhdGVkOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlxuPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJ5IGl0c2VsZgorc3RyaW5naWZpZXMgdG8gPHR0PiJcbiI8L3R0Pi4KKworICAgPHA+QWxsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gdGV4dCBiZWluZyBzdHJpbmdpZmllZCBpcworaWdub3JlZC4gIEFueSBzZXF1ZW5jZSBvZiB3aGl0ZXNwYWNlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRleHQgaXMKK2NvbnZlcnRlZCB0byBhIHNpbmdsZSBzcGFjZSBpbiB0aGUgc3RyaW5naWZpZWQgcmVzdWx0LiAgQ29tbWVudHMgYXJlCityZXBsYWNlZCBieSB3aGl0ZXNwYWNlIGxvbmcgYmVmb3JlIHN0cmluZ2lmaWNhdGlvbiBoYXBwZW5zLCBzbyB0aGV5CituZXZlciBhcHBlYXIgaW4gc3RyaW5naWZpZWQgdGV4dC4KKworICAgPHA+VGhlcmUgaXMgbm8gd2F5IHRvIGNvbnZlcnQgYSBtYWNybyBhcmd1bWVudCBpbnRvIGEgY2hhcmFjdGVyIGNvbnN0YW50LgorCisgICA8cD5JZiB5b3Ugd2FudCB0byBzdHJpbmdpZnkgdGhlIHJlc3VsdCBvZiBleHBhbnNpb24gb2YgYSBtYWNybyBhcmd1bWVudCwKK3lvdSBoYXZlIHRvIHVzZSB0d28gbGV2ZWxzIG9mIG1hY3Jvcy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgeHN0cihzKSBzdHIocykKKyAgICAgI2RlZmluZSBzdHIocykgI3MKKyAgICAgI2RlZmluZSBmb28gNAorICAgICBzdHIgKGZvbykKKyAgICAgICAgICA9PSZndDsgImZvbyIKKyAgICAgeHN0ciAoZm9vKQorICAgICAgICAgID09Jmd0OyB4c3RyICg0KQorICAgICAgICAgID09Jmd0OyBzdHIgKDQpCisgICAgICAgICAgPT0mZ3Q7ICI0IgorPC9wcmU+CisgICA8cD48Y29kZT5zPC9jb2RlPiBpcyBzdHJpbmdpZmllZCB3aGVuIGl0IGlzIHVzZWQgaW4gPGNvZGU+c3RyPC9jb2RlPiwgc28gaXQgaXMgbm90CittYWNyby1leHBhbmRlZCBmaXJzdC4gIEJ1dCA8Y29kZT5zPC9jb2RlPiBpcyBhbiBvcmRpbmFyeSBhcmd1bWVudCB0bworPGNvZGU+eHN0cjwvY29kZT4sIHNvIGl0IGlzIGNvbXBsZXRlbHkgbWFjcm8tZXhwYW5kZWQgYmVmb3JlIDxjb2RlPnhzdHI8L2NvZGU+CitpdHNlbGYgaXMgZXhwYW5kZWQgKHNlZSA8YSBocmVmPSJBcmd1bWVudC1QcmVzY2FuLmh0bWwjQXJndW1lbnQtUHJlc2NhbiI+QXJndW1lbnQgUHJlc2NhbjwvYT4pLiAgVGhlcmVmb3JlLCBieSB0aGUgdGltZQorPGNvZGU+c3RyPC9jb2RlPiBnZXRzIHRvIGl0cyBhcmd1bWVudCwgaXQgaGFzIGFscmVhZHkgYmVlbiBtYWNyby1leHBhbmRlZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Td2FsbG93aW5nLXRoZS1TZW1pY29sb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvU3dhbGxvd2luZy10aGUtU2VtaWNvbG9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhNjMxNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvU3dhbGxvd2luZy10aGUtU2VtaWNvbG9uLmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN3YWxsb3dpbmcgdGhlIFNlbWljb2xvbiAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIiB0aXRsZT0iTWFjcm8gUGl0ZmFsbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcGVyYXRvci1QcmVjZWRlbmNlLVByb2JsZW1zLmh0bWwjT3BlcmF0b3ItUHJlY2VkZW5jZS1Qcm9ibGVtcyIgdGl0bGU9Ik9wZXJhdG9yIFByZWNlZGVuY2UgUHJvYmxlbXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEdXBsaWNhdGlvbi1vZi1TaWRlLUVmZmVjdHMuaHRtbCNEdXBsaWNhdGlvbi1vZi1TaWRlLUVmZmVjdHMiIHRpdGxlPSJEdXBsaWNhdGlvbiBvZiBTaWRlIEVmZmVjdHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3dhbGxvd2luZy10aGUtU2VtaWNvbG9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkR1cGxpY2F0aW9uLW9mLVNpZGUtRWZmZWN0cy5odG1sI0R1cGxpY2F0aW9uLW9mLVNpZGUtRWZmZWN0cyI+RHVwbGljYXRpb24gb2YgU2lkZSBFZmZlY3RzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3BlcmF0b3ItUHJlY2VkZW5jZS1Qcm9ibGVtcy5odG1sI09wZXJhdG9yLVByZWNlZGVuY2UtUHJvYmxlbXMiPk9wZXJhdG9yIFByZWNlZGVuY2UgUHJvYmxlbXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIj5NYWNybyBQaXRmYWxsczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTAuMyBTd2FsbG93aW5nIHRoZSBTZW1pY29sb248L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1zZW1pY29sb25zLV8wMDI4YWZ0ZXItbWFjcm8tY2FsbHNfMDAyOS03NSI+PC9hPgorT2Z0ZW4gaXQgaXMgZGVzaXJhYmxlIHRvIGRlZmluZSBhIG1hY3JvIHRoYXQgZXhwYW5kcyBpbnRvIGEgY29tcG91bmQKK3N0YXRlbWVudC4gIENvbnNpZGVyLCBmb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBtYWNybywgdGhhdCBhZHZhbmNlcyBhCitwb2ludGVyICh0aGUgYXJndW1lbnQgPGNvZGU+cDwvY29kZT4gc2F5cyB3aGVyZSB0byBmaW5kIGl0KSBhY3Jvc3Mgd2hpdGVzcGFjZQorY2hhcmFjdGVyczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgU0tJUF9TUEFDRVMocCwgbGltaXQpICBcCisgICAgIHsgY2hhciAqbGltID0gKGxpbWl0KTsgICAgICAgICBcCisgICAgICAgd2hpbGUgKHAgJmx0OyBsaW0pIHsgICAgICAgICAgICBcCisgICAgICAgICBpZiAoKnArKyAhPSAnICcpIHsgICAgICAgICBcCisgICAgICAgICAgIHAtLTsgYnJlYWs7IH19fQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkhlcmUgYmFja3NsYXNoLW5ld2xpbmUgaXMgdXNlZCB0byBzcGxpdCB0aGUgbWFjcm8gZGVmaW5pdGlvbiwgd2hpY2ggbXVzdAorYmUgYSBzaW5nbGUgbG9naWNhbCBsaW5lLCBzbyB0aGF0IGl0IHJlc2VtYmxlcyB0aGUgd2F5IHN1Y2ggY29kZSB3b3VsZAorYmUgbGFpZCBvdXQgaWYgbm90IHBhcnQgb2YgYSBtYWNybyBkZWZpbml0aW9uLgorCisgICA8cD5BIGNhbGwgdG8gdGhpcyBtYWNybyBtaWdodCBiZSA8Y29kZT5TS0lQX1NQQUNFUyAocCwgbGltKTwvY29kZT4uICBTdHJpY3RseQorc3BlYWtpbmcsIHRoZSBjYWxsIGV4cGFuZHMgdG8gYSBjb21wb3VuZCBzdGF0ZW1lbnQsIHdoaWNoIGlzIGEgY29tcGxldGUKK3N0YXRlbWVudCB3aXRoIG5vIG5lZWQgZm9yIGEgc2VtaWNvbG9uIHRvIGVuZCBpdC4gIEhvd2V2ZXIsIHNpbmNlIGl0Citsb29rcyBsaWtlIGEgZnVuY3Rpb24gY2FsbCwgaXQgbWluaW1pemVzIGNvbmZ1c2lvbiBpZiB5b3UgY2FuIHVzZSBpdAorbGlrZSBhIGZ1bmN0aW9uIGNhbGwsIHdyaXRpbmcgYSBzZW1pY29sb24gYWZ0ZXJ3YXJkLCBhcyBpbgorPGNvZGU+U0tJUF9TUEFDRVMgKHAsIGxpbSk7PC9jb2RlPgorCisgICA8cD5UaGlzIGNhbiBjYXVzZSB0cm91YmxlIGJlZm9yZSA8Y29kZT5lbHNlPC9jb2RlPiBzdGF0ZW1lbnRzLCBiZWNhdXNlIHRoZQorc2VtaWNvbG9uIGlzIGFjdHVhbGx5IGEgbnVsbCBzdGF0ZW1lbnQuICBTdXBwb3NlIHlvdSB3cml0ZQorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgaWYgKCpwICE9IDApCisgICAgICAgU0tJUF9TUEFDRVMgKHAsIGxpbSk7CisgICAgIGVsc2UgLi4uCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIHByZXNlbmNlIG9mIHR3byBzdGF0ZW1lbnRzJm1kYXNoO3RoZSBjb21wb3VuZCBzdGF0ZW1lbnQgYW5kIGEgbnVsbAorc3RhdGVtZW50Jm1kYXNoO2luIGJldHdlZW4gdGhlIDxjb2RlPmlmPC9jb2RlPiBjb25kaXRpb24gYW5kIHRoZSA8Y29kZT5lbHNlPC9jb2RlPgorbWFrZXMgaW52YWxpZCBDIGNvZGUuCisKKyAgIDxwPlRoZSBkZWZpbml0aW9uIG9mIHRoZSBtYWNybyA8Y29kZT5TS0lQX1NQQUNFUzwvY29kZT4gY2FuIGJlIGFsdGVyZWQgdG8gc29sdmUKK3RoaXMgcHJvYmxlbSwgdXNpbmcgYSA8Y29kZT5kbyAuLi4gd2hpbGU8L2NvZGU+IHN0YXRlbWVudC4gIEhlcmUgaXMgaG93OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBTS0lQX1NQQUNFUyhwLCBsaW1pdCkgICAgIFwKKyAgICAgZG8geyBjaGFyICpsaW0gPSAobGltaXQpOyAgICAgICAgIFwKKyAgICAgICAgICB3aGlsZSAocCAmbHQ7IGxpbSkgeyAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICgqcCsrICE9ICcgJykgeyAgICAgICAgIFwKKyAgICAgICAgICAgICAgcC0tOyBicmVhazsgfX19ICAgICAgICAgIFwKKyAgICAgd2hpbGUgKDApCis8L3ByZT4KKyAgIDxwPk5vdyA8Y29kZT5TS0lQX1NQQUNFUyAocCwgbGltKTs8L2NvZGU+IGV4cGFuZHMgaW50bworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZG8gey4uLn0gd2hpbGUgKDApOworPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPndoaWNoIGlzIG9uZSBzdGF0ZW1lbnQuICBUaGUgbG9vcCBleGVjdXRlcyBleGFjdGx5IG9uY2U7IG1vc3QgY29tcGlsZXJzCitnZW5lcmF0ZSBubyBleHRyYSBjb2RlIGZvciBpdC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9TeXN0ZW0tSGVhZGVycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9TeXN0ZW0tSGVhZGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYzY1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1N5c3RlbS1IZWFkZXJzLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3lzdGVtIEhlYWRlcnMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIiB0aXRsZT0iSGVhZGVyIEZpbGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iV3JhcHBlci1IZWFkZXJzLmh0bWwjV3JhcHBlci1IZWFkZXJzIiB0aXRsZT0iV3JhcHBlciBIZWFkZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlN5c3RlbS1IZWFkZXJzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iV3JhcHBlci1IZWFkZXJzLmh0bWwjV3JhcHBlci1IZWFkZXJzIj5XcmFwcGVyIEhlYWRlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJIZWFkZXItRmlsZXMuaHRtbCNIZWFkZXItRmlsZXMiPkhlYWRlciBGaWxlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuOCBTeXN0ZW0gSGVhZGVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN5c3RlbS1oZWFkZXItZmlsZXMtMzkiPjwvYT4KK1RoZSBoZWFkZXIgZmlsZXMgZGVjbGFyaW5nIGludGVyZmFjZXMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kCitydW50aW1lIGxpYnJhcmllcyBvZnRlbiBjYW5ub3QgYmUgd3JpdHRlbiBpbiBzdHJpY3RseSBjb25mb3JtaW5nIEMuIAorVGhlcmVmb3JlLCBHQ0MgZ2l2ZXMgY29kZSBmb3VuZCBpbiA8ZGZuPnN5c3RlbSBoZWFkZXJzPC9kZm4+IHNwZWNpYWwKK3RyZWF0bWVudC4gIEFsbCB3YXJuaW5ncywgb3RoZXIgdGhhbiB0aG9zZSBnZW5lcmF0ZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jd2FybmluZzwvc3Bhbj48L3NhbXA+JnJzcXVvOworKHNlZSA8YSBocmVmPSJEaWFnbm9zdGljcy5odG1sI0RpYWdub3N0aWNzIj5EaWFnbm9zdGljczwvYT4pLCBhcmUgc3VwcHJlc3NlZCB3aGlsZSBHQ0MgaXMgcHJvY2Vzc2luZyBhIHN5c3RlbQoraGVhZGVyLiAgTWFjcm9zIGRlZmluZWQgaW4gYSBzeXN0ZW0gaGVhZGVyIGFyZSBpbW11bmUgdG8gYSBmZXcgd2FybmluZ3MKK3doZXJldmVyIHRoZXkgYXJlIGV4cGFuZGVkLiAgVGhpcyBpbW11bml0eSBpcyBncmFudGVkIG9uIGFuIGFkLWhvYworYmFzaXMsIHdoZW4gd2UgZmluZCB0aGF0IGEgd2FybmluZyBnZW5lcmF0ZXMgbG90cyBvZiBmYWxzZSBwb3NpdGl2ZXMKK2JlY2F1c2Ugb2YgY29kZSBpbiBtYWNyb3MgZGVmaW5lZCBpbiBzeXN0ZW0gaGVhZGVycy4KKworICAgPHA+Tm9ybWFsbHksIG9ubHkgdGhlIGhlYWRlcnMgZm91bmQgaW4gc3BlY2lmaWMgZGlyZWN0b3JpZXMgYXJlIGNvbnNpZGVyZWQKK3N5c3RlbSBoZWFkZXJzLiAgVGhlc2UgZGlyZWN0b3JpZXMgYXJlIGRldGVybWluZWQgd2hlbiBHQ0MgaXMgY29tcGlsZWQuIAorVGhlcmUgYXJlLCBob3dldmVyLCB0d28gd2F5cyB0byBtYWtlIG5vcm1hbCBoZWFkZXJzIGludG8gc3lzdGVtIGhlYWRlcnMuCisKKyAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3RlbTwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24gYWRkcyBpdHMgYXJndW1lbnQgdG8gdGhlIGxpc3Qgb2YKK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgaGVhZGVycywganVzdCBsaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4uICBBbnkgaGVhZGVycworZm91bmQgaW4gdGhhdCBkaXJlY3Rvcnkgd2lsbCBiZSBjb25zaWRlcmVkIHN5c3RlbSBoZWFkZXJzLgorCisgICA8cD5BbGwgZGlyZWN0b3JpZXMgbmFtZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlzeXN0ZW08L3NwYW4+PC9zYW1wPiBhcmUgc2VhcmNoZWQgPGVtPmFmdGVyPC9lbT4gYWxsCitkaXJlY3RvcmllcyBuYW1lZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+LCBubyBtYXR0ZXIgd2hhdCB0aGVpciBvcmRlciB3YXMgb24gdGhlCitjb21tYW5kIGxpbmUuICBJZiB0aGUgc2FtZSBkaXJlY3RvcnkgaXMgbmFtZWQgYnkgYm90aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlzeXN0ZW08L3NwYW4+PC9zYW1wPiwgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIGlnbm9yZWQuICBHQ0MgcHJvdmlkZXMgYW4KK2luZm9ybWF0aXZlIG1lc3NhZ2Ugd2hlbiB0aGlzIG9jY3VycyBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdjwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzcHJhZ21hLUdDQy1zeXN0ZW1fMDA1ZmhlYWRlci00MCI+PC9hPlRoZXJlIGlzIGFsc28gYSBkaXJlY3RpdmUsIDxjb2RlPiNwcmFnbWEmbmJzcDtHQ0MmbmJzcDtzeXN0ZW1faGVhZGVyPCEtLSAvQHcgLS0+PC9jb2RlPiwgd2hpY2gKK3RlbGxzIEdDQyB0byBjb25zaWRlciB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBpbmNsdWRlIGZpbGUgYSBzeXN0ZW0KK2hlYWRlciwgbm8gbWF0dGVyIHdoZXJlIGl0IHdhcyBmb3VuZC4gIENvZGUgdGhhdCBjb21lcyBiZWZvcmUgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gdGhlIGZpbGUgd2lsbCBub3QgYmUgYWZmZWN0ZWQuICA8Y29kZT4jcHJhZ21hJm5ic3A7R0NDJm5ic3A7c3lzdGVtX2hlYWRlcjwhLS0gL0B3IC0tPjwvY29kZT4gaGFzIG5vIGVmZmVjdCBpbiB0aGUgcHJpbWFyeSBzb3VyY2UgZmlsZS4KKworICAgPHA+T24gdmVyeSBvbGQgc3lzdGVtcywgc29tZSBvZiB0aGUgcHJlLWRlZmluZWQgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworZ2V0IGV2ZW4gbW9yZSBzcGVjaWFsIHRyZWF0bWVudC4gIEdOVSBDKysgY29uc2lkZXJzIGNvZGUgaW4gaGVhZGVycworZm91bmQgaW4gdGhvc2UgZGlyZWN0b3JpZXMgdG8gYmUgc3Vycm91bmRlZCBieSBhbiA8Y29kZT5leHRlcm4mbmJzcDsiQyI8IS0tIC9AdyAtLT48L2NvZGU+CitibG9jay4gIFRoZXJlIGlzIG5vIHdheSB0byByZXF1ZXN0IHRoaXMgYmVoYXZpb3Igd2l0aCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK29yIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9TeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1N5c3RlbV8wMDJkc3BlY2lmaWMtUHJlZGVmaW5lZC1NYWNyb3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQyZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9TeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3lzdGVtLXNwZWNpZmljIFByZWRlZmluZWQgTWFjcm9zIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlByZWRlZmluZWQtTWFjcm9zLmh0bWwjUHJlZGVmaW5lZC1NYWNyb3MiIHRpdGxlPSJQcmVkZWZpbmVkIE1hY3JvcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNvbW1vbi1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI0NvbW1vbi1QcmVkZWZpbmVkLU1hY3JvcyIgdGl0bGU9IkNvbW1vbiBQcmVkZWZpbmVkIE1hY3JvcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycy5odG1sI0NfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycyIgdGl0bGU9IkMrKyBOYW1lZCBPcGVyYXRvcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3lzdGVtLXNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zIj48L2E+Cis8YSBuYW1lPSJTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycy5odG1sI0NfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycyI+QysrIE5hbWVkIE9wZXJhdG9yczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvbW1vbi1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI0NvbW1vbi1QcmVkZWZpbmVkLU1hY3JvcyI+Q29tbW9uIFByZWRlZmluZWQgTWFjcm9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNQcmVkZWZpbmVkLU1hY3JvcyI+UHJlZGVmaW5lZCBNYWNyb3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjcuMyBTeXN0ZW0tc3BlY2lmaWMgUHJlZGVmaW5lZCBNYWNyb3M8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1zeXN0ZW1fMDAyZHNwZWNpZmljLXByZWRlZmluZWQtbWFjcm9zLTYyIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJlZGVmaW5lZC1tYWNyb3NfMDAyYy1zeXN0ZW1fMDAyZHNwZWNpZmljLTYzIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVzZXJ2ZWQtbmFtZXNwYWNlLTY0Ij48L2E+CitUaGUgQyBwcmVwcm9jZXNzb3Igbm9ybWFsbHkgcHJlZGVmaW5lcyBzZXZlcmFsIG1hY3JvcyB0aGF0IGluZGljYXRlIHdoYXQKK3R5cGUgb2Ygc3lzdGVtIGFuZCBtYWNoaW5lIGlzIGluIHVzZS4gIFRoZXkgYXJlIG9idmlvdXNseSBkaWZmZXJlbnQgb24KK2VhY2ggdGFyZ2V0IHN1cHBvcnRlZCBieSBHQ0MuICBUaGlzIG1hbnVhbCwgYmVpbmcgZm9yIGFsbCBzeXN0ZW1zIGFuZAorbWFjaGluZXMsIGNhbm5vdCB0ZWxsIHlvdSB3aGF0IHRoZWlyIG5hbWVzIGFyZSwgYnV0IHlvdSBjYW4gdXNlCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y3BwIC1kTTwvc3Bhbj48L3NhbXA+IHRvIHNlZSB0aGVtIGFsbC4gIFNlZSA8YSBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT4uICBBbGwgc3lzdGVtLXNwZWNpZmljCitwcmVkZWZpbmVkIG1hY3JvcyBleHBhbmQgdG8gYSBjb25zdGFudCB2YWx1ZSwgc28geW91IGNhbiB0ZXN0IHRoZW0gd2l0aAorZWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5UaGUgQyBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBzeXN0ZW0tc3BlY2lmaWMgbWFjcm9zIGJlIHBhcnQgb2YgdGhlCis8ZGZuPnJlc2VydmVkIG5hbWVzcGFjZTwvZGZuPi4gIEFsbCBuYW1lcyB3aGljaCBiZWdpbiB3aXRoIHR3byB1bmRlcnNjb3JlcywKK29yIGFuIHVuZGVyc2NvcmUgYW5kIGEgY2FwaXRhbCBsZXR0ZXIsIGFyZSByZXNlcnZlZCBmb3IgdGhlIGNvbXBpbGVyIGFuZAorbGlicmFyeSB0byB1c2UgYXMgdGhleSB3aXNoLiAgSG93ZXZlciwgaGlzdG9yaWNhbGx5IHN5c3RlbS1zcGVjaWZpYworbWFjcm9zIGhhdmUgaGFkIG5hbWVzIHdpdGggbm8gc3BlY2lhbCBwcmVmaXg7IGZvciBpbnN0YW5jZSwgaXQgaXMgY29tbW9uCit0byBmaW5kIDxjb2RlPnVuaXg8L2NvZGU+IGRlZmluZWQgb24gVW5peCBzeXN0ZW1zLiAgRm9yIGFsbCBzdWNoIG1hY3JvcywgR0NDCitwcm92aWRlcyBhIHBhcmFsbGVsIG1hY3JvIHdpdGggdHdvIHVuZGVyc2NvcmVzIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcKK2FuZCB0aGUgZW5kLiAgSWYgPGNvZGU+dW5peDwvY29kZT4gaXMgZGVmaW5lZCwgPGNvZGU+X191bml4X188L2NvZGU+IHdpbGwgYmUgZGVmaW5lZAordG9vLiAgVGhlcmUgd2lsbCBuZXZlciBiZSBtb3JlIHRoYW4gdHdvIHVuZGVyc2NvcmVzOyB0aGUgcGFyYWxsZWwgb2YKKzxjb2RlPl9taXBzPC9jb2RlPiBpcyA8Y29kZT5fX21pcHNfXzwvY29kZT4uCisKKyAgIDxwPldoZW4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBvciBhbnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0aGF0CityZXF1ZXN0cyBzdHJpY3QgY29uZm9ybWFuY2UsIGlzIGdpdmVuIHRvIHRoZSBjb21waWxlciwgYWxsIHRoZQorc3lzdGVtLXNwZWNpZmljIHByZWRlZmluZWQgbWFjcm9zIG91dHNpZGUgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSBhcmUKK3N1cHByZXNzZWQuICBUaGUgcGFyYWxsZWwgbWFjcm9zLCBpbnNpZGUgdGhlIHJlc2VydmVkIG5hbWVzcGFjZSwgcmVtYWluCitkZWZpbmVkLgorCisgICA8cD5XZSBhcmUgc2xvd2x5IHBoYXNpbmcgb3V0IGFsbCBwcmVkZWZpbmVkIG1hY3JvcyB3aGljaCBhcmUgb3V0c2lkZSB0aGUKK3Jlc2VydmVkIG5hbWVzcGFjZS4gIFlvdSBzaG91bGQgbmV2ZXIgdXNlIHRoZW0gaW4gbmV3IHByb2dyYW1zLCBhbmQgd2UKK2VuY291cmFnZSB5b3UgdG8gY29ycmVjdCBvbGRlciBjb2RlIHRvIHVzZSB0aGUgcGFyYWxsZWwgbWFjcm9zIHdoZW5ldmVyCit5b3UgZmluZCBpdC4gIFdlIGRvbid0IHJlY29tbWVuZCB5b3UgdXNlIHRoZSBzeXN0ZW0tc3BlY2lmaWMgbWFjcm9zIHRoYXQKK2FyZSBpbiB0aGUgcmVzZXJ2ZWQgbmFtZXNwYWNlLCBlaXRoZXIuICBJdCBpcyBiZXR0ZXIgaW4gdGhlIGxvbmcgcnVuIHRvCitjaGVjayBzcGVjaWZpY2FsbHkgZm9yIGZlYXR1cmVzIHlvdSBuZWVkLCB1c2luZyBhIHRvb2wgc3VjaCBhcworPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmF1dG9jb25mPC9zcGFuPjwvc2FtcD4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVGhlLXByZXByb2Nlc3NpbmctbGFuZ3VhZ2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVGhlLXByZXByb2Nlc3NpbmctbGFuZ3VhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGNlYjFmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9UaGUtcHJlcHJvY2Vzc2luZy1sYW5ndWFnZS5odG1sCkBAIC0wLDAgKzEsMTE5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UaGUgcHJlcHJvY2Vzc2luZyBsYW5ndWFnZSAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3IiB0aXRsZT0iT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNUb2tlbml6YXRpb24iIHRpdGxlPSJUb2tlbml6YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVGhlLXByZXByb2Nlc3NpbmctbGFuZ3VhZ2UiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUb2tlbml6YXRpb24uaHRtbCNUb2tlbml6YXRpb24iPlRva2VuaXphdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS40IFRoZSBwcmVwcm9jZXNzaW5nIGxhbmd1YWdlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZGlyZWN0aXZlcy0yMSI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXByb2Nlc3NpbmctZGlyZWN0aXZlcy0yMiI+PC9hPjxhIG5hbWU9ImluZGV4LWRpcmVjdGl2ZS1saW5lLTIzIj48L2E+PGEgbmFtZT0iaW5kZXgtZGlyZWN0aXZlLW5hbWUtMjQiPjwvYT4KK0FmdGVyIHRva2VuaXphdGlvbiwgdGhlIHN0cmVhbSBvZiB0b2tlbnMgbWF5IHNpbXBseSBiZSBwYXNzZWQgc3RyYWlnaHQKK3RvIHRoZSBjb21waWxlcidzIHBhcnNlci4gIEhvd2V2ZXIsIGlmIGl0IGNvbnRhaW5zIGFueSBvcGVyYXRpb25zIGluIHRoZQorPGRmbj5wcmVwcm9jZXNzaW5nIGxhbmd1YWdlPC9kZm4+LCBpdCB3aWxsIGJlIHRyYW5zZm9ybWVkIGZpcnN0LiAgVGhpcyBzdGFnZQorY29ycmVzcG9uZHMgcm91Z2hseSB0byB0aGUgc3RhbmRhcmQncyAmbGRxdW87dHJhbnNsYXRpb24gcGhhc2UgNCZyZHF1bzsgYW5kIGlzCit3aGF0IG1vc3QgcGVvcGxlIHRoaW5rIG9mIGFzIHRoZSBwcmVwcm9jZXNzb3IncyBqb2IuCisKKyAgIDxwPlRoZSBwcmVwcm9jZXNzaW5nIGxhbmd1YWdlIGNvbnNpc3RzIG9mIDxkZm4+ZGlyZWN0aXZlczwvZGZuPiB0byBiZSBleGVjdXRlZAorYW5kIDxkZm4+bWFjcm9zPC9kZm4+IHRvIGJlIGV4cGFuZGVkLiAgSXRzIHByaW1hcnkgY2FwYWJpbGl0aWVzIGFyZToKKworICAgICA8dWw+Cis8bGk+SW5jbHVzaW9uIG9mIGhlYWRlciBmaWxlcy4gIFRoZXNlIGFyZSBmaWxlcyBvZiBkZWNsYXJhdGlvbnMgdGhhdCBjYW4gYmUKK3N1YnN0aXR1dGVkIGludG8geW91ciBwcm9ncmFtLgorCisgICAgIDxsaT5NYWNybyBleHBhbnNpb24uICBZb3UgY2FuIGRlZmluZSA8ZGZuPm1hY3JvczwvZGZuPiwgd2hpY2ggYXJlIGFiYnJldmlhdGlvbnMKK2ZvciBhcmJpdHJhcnkgZnJhZ21lbnRzIG9mIEMgY29kZS4gIFRoZSBwcmVwcm9jZXNzb3Igd2lsbCByZXBsYWNlIHRoZQorbWFjcm9zIHdpdGggdGhlaXIgZGVmaW5pdGlvbnMgdGhyb3VnaG91dCB0aGUgcHJvZ3JhbS4gIFNvbWUgbWFjcm9zIGFyZQorYXV0b21hdGljYWxseSBkZWZpbmVkIGZvciB5b3UuCisKKyAgICAgPGxpPkNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiAgWW91IGNhbiBpbmNsdWRlIG9yIGV4Y2x1ZGUgcGFydHMgb2YgdGhlCitwcm9ncmFtIGFjY29yZGluZyB0byB2YXJpb3VzIGNvbmRpdGlvbnMuCisKKyAgICAgPGxpPkxpbmUgY29udHJvbC4gIElmIHlvdSB1c2UgYSBwcm9ncmFtIHRvIGNvbWJpbmUgb3IgcmVhcnJhbmdlIHNvdXJjZSBmaWxlcworaW50byBhbiBpbnRlcm1lZGlhdGUgZmlsZSB3aGljaCBpcyB0aGVuIGNvbXBpbGVkLCB5b3UgY2FuIHVzZSBsaW5lCitjb250cm9sIHRvIGluZm9ybSB0aGUgY29tcGlsZXIgd2hlcmUgZWFjaCBzb3VyY2UgbGluZSBvcmlnaW5hbGx5IGNhbWUKK2Zyb20uCisKKyAgICAgPGxpPkRpYWdub3N0aWNzLiAgWW91IGNhbiBkZXRlY3QgcHJvYmxlbXMgYXQgY29tcGlsZSB0aW1lIGFuZCBpc3N1ZSBlcnJvcnMKK29yIHdhcm5pbmdzLiAKKzwvdWw+CisKKyAgIDxwPlRoZXJlIGFyZSBhIGZldyBtb3JlLCBsZXNzIHVzZWZ1bCwgZmVhdHVyZXMuCisKKyAgIDxwPkV4Y2VwdCBmb3IgZXhwYW5zaW9uIG9mIHByZWRlZmluZWQgbWFjcm9zLCBhbGwgdGhlc2Ugb3BlcmF0aW9ucyBhcmUKK3RyaWdnZXJlZCB3aXRoIDxkZm4+cHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzPC9kZm4+LiAgUHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzCithcmUgbGluZXMgaW4geW91ciBwcm9ncmFtIHRoYXQgc3RhcnQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBXaGl0ZXNwYWNlIGlzCithbGxvd2VkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgZm9sbG93ZWQgYnkgYW4KK2lkZW50aWZpZXIsIHRoZSA8ZGZuPmRpcmVjdGl2ZSBuYW1lPC9kZm4+LiAgSXQgc3BlY2lmaWVzIHRoZSBvcGVyYXRpb24gdG8KK3BlcmZvcm0uICBEaXJlY3RpdmVzIGFyZSBjb21tb25seSByZWZlcnJlZCB0byBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PHZhcj5uYW1lPC92YXI+PC9zYW1wPiZyc3F1bzsKK3doZXJlIDx2YXI+bmFtZTwvdmFyPiBpcyB0aGUgZGlyZWN0aXZlIG5hbWUuICBGb3IgZXhhbXBsZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZGVmaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzCit0aGUgZGlyZWN0aXZlIHRoYXQgZGVmaW5lcyBhIG1hY3JvLgorCisgICA8cD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoaWNoIGJlZ2lucyBhIGRpcmVjdGl2ZSBjYW5ub3QgY29tZSBmcm9tIGEgbWFjcm8KK2V4cGFuc2lvbi4gIEFsc28sIHRoZSBkaXJlY3RpdmUgbmFtZSBpcyBub3QgbWFjcm8gZXhwYW5kZWQuICBUaHVzLCBpZgorPGNvZGU+Zm9vPC9jb2RlPiBpcyBkZWZpbmVkIGFzIGEgbWFjcm8gZXhwYW5kaW5nIHRvIDxjb2RlPmRlZmluZTwvY29kZT4sIHRoYXQgZG9lcworbm90IG1ha2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGEgdmFsaWQgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmUuCisKKyAgIDxwPlRoZSBzZXQgb2YgdmFsaWQgZGlyZWN0aXZlIG5hbWVzIGlzIGZpeGVkLiAgUHJvZ3JhbXMgY2Fubm90IGRlZmluZSBuZXcKK3ByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcy4KKworICAgPHA+U29tZSBkaXJlY3RpdmVzIHJlcXVpcmUgYXJndW1lbnRzOyB0aGVzZSBtYWtlIHVwIHRoZSByZXN0IG9mIHRoZQorZGlyZWN0aXZlIGxpbmUgYW5kIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIGRpcmVjdGl2ZSBuYW1lIGJ5Cit3aGl0ZXNwYWNlLiAgRm9yIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2RlZmluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgbWFjcm8KK25hbWUgYW5kIHRoZSBpbnRlbmRlZCBleHBhbnNpb24gb2YgdGhlIG1hY3JvLgorCisgICA8cD5BIHByZXByb2Nlc3NpbmcgZGlyZWN0aXZlIGNhbm5vdCBjb3ZlciBtb3JlIHRoYW4gb25lIGxpbmUuICBUaGUgbGluZQorbWF5LCBob3dldmVyLCBiZSBjb250aW51ZWQgd2l0aCBiYWNrc2xhc2gtbmV3bGluZSwgb3IgYnkgYSBibG9jayBjb21tZW50Cit3aGljaCBleHRlbmRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGluZS4gIEluIGVpdGhlciBjYXNlLCB3aGVuIHRoZQorZGlyZWN0aXZlIGlzIHByb2Nlc3NlZCwgdGhlIGNvbnRpbnVhdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gbWVyZ2VkIHdpdGgKK3RoZSBmaXJzdCBsaW5lIHRvIG1ha2Ugb25lIGxvbmcgbGluZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9Ub2tlbml6YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVG9rZW5pemF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk3MDI3YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVG9rZW5pemF0aW9uLmh0bWwKQEAgLTAsMCArMSwyMDYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRva2VuaXphdGlvbiAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3IiB0aXRsZT0iT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbml0aWFsLXByb2Nlc3NpbmcuaHRtbCNJbml0aWFsLXByb2Nlc3NpbmciIHRpdGxlPSJJbml0aWFsIHByb2Nlc3NpbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUaGUtcHJlcHJvY2Vzc2luZy1sYW5ndWFnZS5odG1sI1RoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlIiB0aXRsZT0iVGhlIHByZXByb2Nlc3NpbmcgbGFuZ3VhZ2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVG9rZW5pemF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlLmh0bWwjVGhlLXByZXByb2Nlc3NpbmctbGFuZ3VhZ2UiPlRoZSBwcmVwcm9jZXNzaW5nIGxhbmd1YWdlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjSW5pdGlhbC1wcm9jZXNzaW5nIj5Jbml0aWFsIHByb2Nlc3Npbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMyBUb2tlbml6YXRpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC10b2tlbnMtOCI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXByb2Nlc3NpbmctdG9rZW5zLTkiPjwvYT5BZnRlciB0aGUgdGV4dHVhbCB0cmFuc2Zvcm1hdGlvbnMgYXJlIGZpbmlzaGVkLCB0aGUgaW5wdXQgZmlsZSBpcworY29udmVydGVkIGludG8gYSBzZXF1ZW5jZSBvZiA8ZGZuPnByZXByb2Nlc3NpbmcgdG9rZW5zPC9kZm4+LiAgVGhlc2UgbW9zdGx5Citjb3JyZXNwb25kIHRvIHRoZSBzeW50YWN0aWMgdG9rZW5zIHVzZWQgYnkgdGhlIEMgY29tcGlsZXIsIGJ1dCB0aGVyZSBhcmUKK2EgZmV3IGRpZmZlcmVuY2VzLiAgV2hpdGUgc3BhY2Ugc2VwYXJhdGVzIHRva2VuczsgaXQgaXMgbm90IGl0c2VsZiBhCit0b2tlbiBvZiBhbnkga2luZC4gIFRva2VucyBkbyBub3QgaGF2ZSB0byBiZSBzZXBhcmF0ZWQgYnkgd2hpdGUgc3BhY2UsCitidXQgaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRvIGF2b2lkIGFtYmlndWl0aWVzLgorCisgICA8cD5XaGVuIGZhY2VkIHdpdGggYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgaGFzIG1vcmUgdGhhbiBvbmUgcG9zc2libGUKK3Rva2VuaXphdGlvbiwgdGhlIHByZXByb2Nlc3NvciBpcyBncmVlZHkuICBJdCBhbHdheXMgbWFrZXMgZWFjaCB0b2tlbiwKK3N0YXJ0aW5nIGZyb20gdGhlIGxlZnQsIGFzIGJpZyBhcyBwb3NzaWJsZSBiZWZvcmUgbW92aW5nIG9uIHRvIHRoZSBuZXh0Cit0b2tlbi4gIEZvciBpbnN0YW5jZSwgPGNvZGU+YSsrKysrYjwvY29kZT4gaXMgaW50ZXJwcmV0ZWQgYXMKKzxjb2RlPmEmbmJzcDsrKyZuYnNwOysrJm5ic3A7KyZuYnNwO2I8IS0tIC9AdyAtLT48L2NvZGU+LCBub3QgYXMgPGNvZGU+YSZuYnNwOysrJm5ic3A7KyZuYnNwOysrJm5ic3A7YjwhLS0gL0B3IC0tPjwvY29kZT4sIGV2ZW4gdGhvdWdoIHRoZQorbGF0dGVyIHRva2VuaXphdGlvbiBjb3VsZCBiZSBwYXJ0IG9mIGEgdmFsaWQgQyBwcm9ncmFtIGFuZCB0aGUgZm9ybWVyCitjb3VsZCBub3QuCisKKyAgIDxwPk9uY2UgdGhlIGlucHV0IGZpbGUgaXMgYnJva2VuIGludG8gdG9rZW5zLCB0aGUgdG9rZW4gYm91bmRhcmllcyBuZXZlcgorY2hhbmdlLCBleGNlcHQgd2hlbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmVwcm9jZXNzaW5nIG9wZXJhdG9yIGlzIHVzZWQgdG8gcGFzdGUKK3Rva2VucyB0b2dldGhlci4gIFNlZSA8YSBocmVmPSJDb25jYXRlbmF0aW9uLmh0bWwjQ29uY2F0ZW5hdGlvbiI+Q29uY2F0ZW5hdGlvbjwvYT4uICBGb3IgZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgZm9vKCkgYmFyCisgICAgIGZvbygpYmF6CisgICAgICAgICAgPT0mZ3Q7IGJhciBiYXoKKyAgICAgPGVtPm5vdDwvZW0+CisgICAgICAgICAgPT0mZ3Q7IGJhcmJhegorPC9wcmU+CisgICA8cD5UaGUgY29tcGlsZXIgZG9lcyBub3QgcmUtdG9rZW5pemUgdGhlIHByZXByb2Nlc3NvcidzIG91dHB1dC4gIEVhY2gKK3ByZXByb2Nlc3NpbmcgdG9rZW4gYmVjb21lcyBvbmUgY29tcGlsZXIgdG9rZW4uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWlkZW50aWZpZXJzLTEwIj48L2E+UHJlcHJvY2Vzc2luZyB0b2tlbnMgZmFsbCBpbnRvIGZpdmUgYnJvYWQgY2xhc3NlczogaWRlbnRpZmllcnMsCitwcmVwcm9jZXNzaW5nIG51bWJlcnMsIHN0cmluZyBsaXRlcmFscywgcHVuY3R1YXRvcnMsIGFuZCBvdGhlci4gIEFuCis8ZGZuPmlkZW50aWZpZXI8L2Rmbj4gaXMgdGhlIHNhbWUgYXMgYW4gaWRlbnRpZmllciBpbiBDOiBhbnkgc2VxdWVuY2Ugb2YKK2xldHRlcnMsIGRpZ2l0cywgb3IgdW5kZXJzY29yZXMsIHdoaWNoIGJlZ2lucyB3aXRoIGEgbGV0dGVyIG9yCit1bmRlcnNjb3JlLiAgS2V5d29yZHMgb2YgQyBoYXZlIG5vIHNpZ25pZmljYW5jZSB0byB0aGUgcHJlcHJvY2Vzc29yOwordGhleSBhcmUgb3JkaW5hcnkgaWRlbnRpZmllcnMuICBZb3UgY2FuIGRlZmluZSBhIG1hY3JvIHdob3NlIG5hbWUgaXMgYQora2V5d29yZCwgZm9yIGluc3RhbmNlLiAgVGhlIG9ubHkgaWRlbnRpZmllciB3aGljaCBjYW4gYmUgY29uc2lkZXJlZCBhCitwcmVwcm9jZXNzaW5nIGtleXdvcmQgaXMgPGNvZGU+ZGVmaW5lZDwvY29kZT4uICBTZWUgPGEgaHJlZj0iRGVmaW5lZC5odG1sI0RlZmluZWQiPkRlZmluZWQ8L2E+LgorCisgICA8cD5UaGlzIGlzIG1vc3RseSB0cnVlIG9mIG90aGVyIGxhbmd1YWdlcyB3aGljaCB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yLiAKK0hvd2V2ZXIsIGEgZmV3IG9mIHRoZSBrZXl3b3JkcyBvZiBDKysgYXJlIHNpZ25pZmljYW50IGV2ZW4gaW4gdGhlCitwcmVwcm9jZXNzb3IuICBTZWUgPGEgaHJlZj0iQ18wMDJiXzAwMmItTmFtZWQtT3BlcmF0b3JzLmh0bWwjQ18wMDJiXzAwMmItTmFtZWQtT3BlcmF0b3JzIj5DKysgTmFtZWQgT3BlcmF0b3JzPC9hPi4KKworICAgPHA+SW4gdGhlIDE5OTkgQyBzdGFuZGFyZCwgaWRlbnRpZmllcnMgbWF5IGNvbnRhaW4gbGV0dGVycyB3aGljaCBhcmUgbm90CitwYXJ0IG9mIHRoZSAmbGRxdW87YmFzaWMgc291cmNlIGNoYXJhY3RlciBzZXQmcmRxdW87LCBhdCB0aGUgaW1wbGVtZW50YXRpb24ncworZGlzY3JldGlvbiAoc3VjaCBhcyBhY2NlbnRlZCBMYXRpbiBsZXR0ZXJzLCBHcmVlayBsZXR0ZXJzLCBvciBDaGluZXNlCitpZGVvZ3JhbXMpLiAgVGhpcyBtYXkgYmUgZG9uZSB3aXRoIGFuIGV4dGVuZGVkIGNoYXJhY3RlciBzZXQsIG9yIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cdTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cVTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBlc2NhcGUgc2VxdWVuY2VzLiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMKK2ZlYXR1cmUgaW4gR0NDIGlzIGV4cGVyaW1lbnRhbDsgc3VjaCBjaGFyYWN0ZXJzIGFyZSBvbmx5IGFjY2VwdGVkIGluCit0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cdTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cVTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3JtcyBhbmQgb25seSBpZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZleHRlbmRlZC1pZGVudGlmaWVyczwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuCisKKyAgIDxwPkFzIGFuIGV4dGVuc2lvbiwgR0NDIHRyZWF0cyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgYSBsZXR0ZXIuICBUaGlzIGlzIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgc3lzdGVtcywgc3VjaCBhcyBWTVMsIHdoZXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBjb21tb25seQordXNlZCBpbiBzeXN0ZW0tZGVmaW5lZCBmdW5jdGlvbiBhbmQgb2JqZWN0IG5hbWVzLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIG5vdCBhCitsZXR0ZXIgaW4gc3RyaWN0bHkgY29uZm9ybWluZyBtb2RlLCBvciBpZiB5b3Ugc3BlY2lmeSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LSQ8L3NwYW4+PC9zYW1wPgorb3B0aW9uLiAgU2VlIDxhIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtbnVtYmVycy0xMSI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXByb2Nlc3NpbmctbnVtYmVycy0xMiI+PC9hPkEgPGRmbj5wcmVwcm9jZXNzaW5nIG51bWJlcjwvZGZuPiBoYXMgYSByYXRoZXIgYml6YXJyZSBkZWZpbml0aW9uLiAgVGhlCitjYXRlZ29yeSBpbmNsdWRlcyBhbGwgdGhlIG5vcm1hbCBpbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2ludCBjb25zdGFudHMKK29uZSBleHBlY3RzIG9mIEMsIGJ1dCBhbHNvIGEgbnVtYmVyIG9mIG90aGVyIHRoaW5ncyBvbmUgbWlnaHQgbm90Citpbml0aWFsbHkgcmVjb2duaXplIGFzIGEgbnVtYmVyLiAgRm9ybWFsbHksIHByZXByb2Nlc3NpbmcgbnVtYmVycyBiZWdpbgord2l0aCBhbiBvcHRpb25hbCBwZXJpb2QsIGEgcmVxdWlyZWQgZGVjaW1hbCBkaWdpdCwgYW5kIHRoZW4gY29udGludWUKK3dpdGggYW55IHNlcXVlbmNlIG9mIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZXMsIHBlcmlvZHMsIGFuZAorZXhwb25lbnRzLiAgRXhwb25lbnRzIGFyZSB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lKzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZS08L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RSs8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RS08L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cCs8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cC08L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UCs8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QLTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIChUaGUgZXhwb25lbnRzIHRoYXQgYmVnaW4gd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBuZXcKK3RvIEM5OS4gIFRoZXkgYXJlIHVzZWQgZm9yIGhleGFkZWNpbWFsIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4pCisKKyAgIDxwPlRoZSBwdXJwb3NlIG9mIHRoaXMgdW51c3VhbCBkZWZpbml0aW9uIGlzIHRvIGlzb2xhdGUgdGhlIHByZXByb2Nlc3NvcgorZnJvbSB0aGUgZnVsbCBjb21wbGV4aXR5IG9mIG51bWVyaWMgY29uc3RhbnRzLiAgSXQgZG9lcyBub3QgaGF2ZSB0bworZGlzdGluZ3Vpc2ggYmV0d2VlbiBsZXhpY2FsbHkgdmFsaWQgYW5kIGludmFsaWQgZmxvYXRpbmctcG9pbnQgbnVtYmVycywKK3doaWNoIGlzIGNvbXBsaWNhdGVkLiAgVGhlIGRlZmluaXRpb24gYWxzbyBwZXJtaXRzIHlvdSB0byBzcGxpdCBhbgoraWRlbnRpZmllciBhdCBhbnkgcG9zaXRpb24gYW5kIGdldCBleGFjdGx5IHR3byB0b2tlbnMsIHdoaWNoIGNhbiB0aGVuIGJlCitwYXN0ZWQgYmFjayB0b2dldGhlciB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wZXJhdG9yLgorCisgICA8cD5JdCdzIHBvc3NpYmxlIGZvciBwcmVwcm9jZXNzaW5nIG51bWJlcnMgdG8gY2F1c2UgcHJvZ3JhbXMgdG8gYmUKK21pc2ludGVycHJldGVkLiAgRm9yIGV4YW1wbGUsIDxjb2RlPjB4RSsxMjwvY29kZT4gaXMgYSBwcmVwcm9jZXNzaW5nIG51bWJlcgord2hpY2ggZG9lcyBub3QgdHJhbnNsYXRlIHRvIGFueSB2YWxpZCBudW1lcmljIGNvbnN0YW50LCB0aGVyZWZvcmUgYQorc3ludGF4IGVycm9yLiAgSXQgZG9lcyBub3QgbWVhbiA8Y29kZT4weEUmbmJzcDsrJm5ic3A7MTI8IS0tIC9AdyAtLT48L2NvZGU+LCB3aGljaCBpcyB3aGF0IHlvdQorbWlnaHQgaGF2ZSBpbnRlbmRlZC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtc3RyaW5nLWxpdGVyYWxzLTEzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nLWNvbnN0YW50cy0xNCI+PC9hPjxhIG5hbWU9ImluZGV4LWNoYXJhY3Rlci1jb25zdGFudHMtMTUiPjwvYT48YSBuYW1lPSJpbmRleC1oZWFkZXItZmlsZS1uYW1lcy0xNiI+PC9hPjwhLS0gdGhlIEA6IHByZXZlbnRzIG1ha2VpbmZvIGZyb20gdHVybmluZyAnJyBpbnRvICIuIC0tPgorPGRmbj5TdHJpbmcgbGl0ZXJhbHM8L2Rmbj4gYXJlIHN0cmluZyBjb25zdGFudHMsIGNoYXJhY3RlciBjb25zdGFudHMsIGFuZAoraGVhZGVyIGZpbGUgbmFtZXMgKHRoZSBhcmd1bWVudCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87KS48YSByZWw9ImZvb3Rub3RlIiBocmVmPSIjZm4tMSIgbmFtZT0iZm5kLTEiPjxzdXA+MTwvc3VwPjwvYT4gIFN0cmluZyBjb25zdGFudHMgYW5kIGNoYXJhY3RlcgorY29uc3RhbnRzIGFyZSBzdHJhaWdodGZvcndhcmQ6IDx0dD4iPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiI8L3R0PiBvciA8dHQ+JzxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4nPC90dD4uICBJbgorZWl0aGVyIGNhc2UgZW1iZWRkZWQgcXVvdGVzIHNob3VsZCBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2g6Cis8dHQ+J1wnJzwvdHQ+IGlzIHRoZSBjaGFyYWN0ZXIgY29uc3RhbnQgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZXJlIGlzIG5vIGxpbWl0IG9uCit0aGUgbGVuZ3RoIG9mIGEgY2hhcmFjdGVyIGNvbnN0YW50LCBidXQgdGhlIHZhbHVlIG9mIGEgY2hhcmFjdGVyCitjb25zdGFudCB0aGF0IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIGlzCitpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLiAgU2VlIDxhIGhyZWY9IkltcGxlbWVudGF0aW9uLURldGFpbHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1EZXRhaWxzIj5JbXBsZW1lbnRhdGlvbiBEZXRhaWxzPC9hPi4KKworICAgPHA+SGVhZGVyIGZpbGUgbmFtZXMgZWl0aGVyIGxvb2sgbGlrZSBzdHJpbmcgY29uc3RhbnRzLCA8dHQ+IjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4iPC90dD4sIG9yIGFyZQord3JpdHRlbiB3aXRoIGFuZ2xlIGJyYWNrZXRzIGluc3RlYWQsIDx0dD4mbHQ7PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiZndDs8L3R0Pi4gIEluIGVpdGhlciBjYXNlLAorYmFja3NsYXNoIGlzIGFuIG9yZGluYXJ5IGNoYXJhY3Rlci4gIFRoZXJlIGlzIG5vIHdheSB0byBlc2NhcGUgdGhlCitjbG9zaW5nIHF1b3RlIG9yIGFuZ2xlIGJyYWNrZXQuICBUaGUgcHJlcHJvY2Vzc29yIGxvb2tzIGZvciB0aGUgaGVhZGVyCitmaWxlIGluIGRpZmZlcmVudCBwbGFjZXMgZGVwZW5kaW5nIG9uIHdoaWNoIGZvcm0geW91IHVzZS4gIFNlZSA8YSBocmVmPSJJbmNsdWRlLU9wZXJhdGlvbi5odG1sI0luY2x1ZGUtT3BlcmF0aW9uIj5JbmNsdWRlIE9wZXJhdGlvbjwvYT4uCisKKyAgIDxwPk5vIHN0cmluZyBsaXRlcmFsIG1heSBleHRlbmQgcGFzdCB0aGUgZW5kIG9mIGEgbGluZS4gIE9sZGVyIHZlcnNpb25zCitvZiBHQ0MgYWNjZXB0ZWQgbXVsdGktbGluZSBzdHJpbmcgY29uc3RhbnRzLiAgWW91IG1heSB1c2UgY29udGludWVkCitsaW5lcyBpbnN0ZWFkLCBvciBzdHJpbmcgY29uc3RhbnQgY29uY2F0ZW5hdGlvbi4gIFNlZSA8YSBocmVmPSJEaWZmZXJlbmNlcy1mcm9tLXByZXZpb3VzLXZlcnNpb25zLmh0bWwjRGlmZmVyZW5jZXMtZnJvbS1wcmV2aW91cy12ZXJzaW9ucyI+RGlmZmVyZW5jZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9uczwvYT4uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXB1bmN0dWF0b3JzLTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGlncmFwaHMtMTgiPjwvYT48YSBuYW1lPSJpbmRleC1hbHRlcm5hdGl2ZS10b2tlbnMtMTkiPjwvYT48ZGZuPlB1bmN0dWF0b3JzPC9kZm4+IGFyZSBhbGwgdGhlIHVzdWFsIGJpdHMgb2YgcHVuY3R1YXRpb24gd2hpY2ggYXJlCittZWFuaW5nZnVsIHRvIEMgYW5kIEMrKy4gIEFsbCBidXQgdGhyZWUgb2YgdGhlIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgaW4KK0FTQ0lJIGFyZSBDIHB1bmN0dWF0b3JzLiAgVGhlIGV4Y2VwdGlvbnMgYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEluIGFkZGl0aW9uLCBhbGwgdGhlIHR3by0gYW5kIHRocmVlLWNoYXJhY3RlciBvcGVyYXRvcnMgYXJlCitwdW5jdHVhdG9ycy4gIFRoZXJlIGFyZSBhbHNvIHNpeCA8ZGZuPmRpZ3JhcGhzPC9kZm4+LCB3aGljaCB0aGUgQysrIHN0YW5kYXJkCitjYWxscyA8ZGZuPmFsdGVybmF0aXZlIHRva2VuczwvZGZuPiwgd2hpY2ggYXJlIG1lcmVseSBhbHRlcm5hdGUgd2F5cyB0byBzcGVsbAorb3RoZXIgcHVuY3R1YXRvcnMuICBUaGlzIGlzIGEgc2Vjb25kIGF0dGVtcHQgdG8gd29yayBhcm91bmQgbWlzc2luZworcHVuY3R1YXRpb24gaW4gb2Jzb2xldGUgc3lzdGVtcy4gIEl0IGhhcyBubyBuZWdhdGl2ZSBzaWRlIGVmZmVjdHMsCit1bmxpa2UgdHJpZ3JhcGhzLCBidXQgZG9lcyBub3QgY292ZXIgYXMgbXVjaCBncm91bmQuICBUaGUgZGlncmFwaHMgYW5kCit0aGVpciBjb3JyZXNwb25kaW5nIG5vcm1hbCBwdW5jdHVhdG9ycyBhcmU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBEaWdyYXBoOiAgICAgICAgJmx0OyUgICUmZ3Q7ICAmbHQ7OiAgOiZndDsgICU6ICAlOiU6CisgICAgIFB1bmN0dWF0b3I6ICAgICAgeyAgIH0gICBbICAgXSAgICMgICAgIyMKKzwvcHJlPgorICAgPHA+PGEgbmFtZT0iaW5kZXgtb3RoZXItdG9rZW5zLTIwIj48L2E+QW55IG90aGVyIHNpbmdsZSBjaGFyYWN0ZXIgaXMgY29uc2lkZXJlZCAmbGRxdW87b3RoZXImcmRxdW87LiAgSXQgaXMgcGFzc2VkIG9uIHRvCit0aGUgcHJlcHJvY2Vzc29yJ3Mgb3V0cHV0IHVubW9sZXN0ZWQuICBUaGUgQyBjb21waWxlciB3aWxsIGFsbW9zdAorY2VydGFpbmx5IHJlamVjdCBzb3VyY2UgY29kZSBjb250YWluaW5nICZsZHF1bztvdGhlciZyZHF1bzsgdG9rZW5zLiAgSW4gQVNDSUksIHRoZQorb25seSBvdGhlciBjaGFyYWN0ZXJzIGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5gPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgY29udHJvbAorY2hhcmFjdGVycyBvdGhlciB0aGFuIE5VTCAoYWxsIGJpdHMgemVybykuICAoTm90ZSB0aGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcworbm9ybWFsbHkgY29uc2lkZXJlZCBhIGxldHRlci4pICBBbGwgY2hhcmFjdGVycyB3aXRoIHRoZSBoaWdoIGJpdCBzZXQKKyhudW1lcmljIHJhbmdlIDB4N0YmbmRhc2g7MHhGRikgYXJlIGFsc28gJmxkcXVvO290aGVyJnJkcXVvOyBpbiB0aGUgcHJlc2VudAoraW1wbGVtZW50YXRpb24uICBUaGlzIHdpbGwgY2hhbmdlIHdoZW4gcHJvcGVyIHN1cHBvcnQgZm9yIGludGVybmF0aW9uYWwKK2NoYXJhY3RlciBzZXRzIGlzIGFkZGVkIHRvIEdDQy4KKworICAgPHA+TlVMIGlzIGEgc3BlY2lhbCBjYXNlIGJlY2F1c2Ugb2YgdGhlIGhpZ2ggcHJvYmFiaWxpdHkgdGhhdCBpdHMKK2FwcGVhcmFuY2UgaXMgYWNjaWRlbnRhbCwgYW5kIGJlY2F1c2UgaXQgbWF5IGJlIGludmlzaWJsZSB0byB0aGUgdXNlcgorKG1hbnkgdGVybWluYWxzIGRvIG5vdCBkaXNwbGF5IE5VTCBhdCBhbGwpLiAgV2l0aGluIGNvbW1lbnRzLCBOVUxzIGFyZQorc2lsZW50bHkgaWdub3JlZCwganVzdCBhcyBhbnkgb3RoZXIgY2hhcmFjdGVyIHdvdWxkIGJlLiAgSW4gcnVubmluZwordGV4dCwgTlVMIGlzIGNvbnNpZGVyZWQgd2hpdGUgc3BhY2UuICBGb3IgZXhhbXBsZSwgdGhlc2UgdHdvIGRpcmVjdGl2ZXMKK2hhdmUgdGhlIHNhbWUgbWVhbmluZy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgWF5AMQorICAgICAjZGVmaW5lIFggMQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPih3aGVyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl5APC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIEFTQ0lJIE5VTCkuICBXaXRoaW4gc3RyaW5nIG9yIGNoYXJhY3RlciBjb25zdGFudHMsCitOVUxzIGFyZSBwcmVzZXJ2ZWQuICBJbiB0aGUgbGF0dGVyIHR3byBjYXNlcyB0aGUgcHJlcHJvY2Vzc29yIGVtaXRzIGEKK3dhcm5pbmcgbWVzc2FnZS4KKworICAgPGRpdiBjbGFzcz0iZm9vdG5vdGUiPgorPGhyPgorPGg0PkZvb3Rub3RlczwvaDQ+PHAgY2xhc3M9ImZvb3Rub3RlIj48c21hbGw+WzxhIG5hbWU9ImZuLTEiIGhyZWY9IiNmbmQtMSI+MTwvYT5dPC9zbWFsbD4gVGhlIEMKK3N0YW5kYXJkIHVzZXMgdGhlIHRlcm0gPGRmbj5zdHJpbmcgbGl0ZXJhbDwvZGZuPiB0byByZWZlciBvbmx5IHRvIHdoYXQgd2UgYXJlCitjYWxsaW5nIDxkZm4+c3RyaW5nIGNvbnN0YW50czwvZGZuPi48L3A+CisKKyAgIDxocj48L2Rpdj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9UcmFkaXRpb25hbC1Nb2RlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1RyYWRpdGlvbmFsLU1vZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Q5YWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9UcmFkaXRpb25hbC1Nb2RlLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VHJhZGl0aW9uYWwgTW9kZSAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlByZXByb2Nlc3Nvci1PdXRwdXQuaHRtbCNQcmVwcm9jZXNzb3ItT3V0cHV0IiB0aXRsZT0iUHJlcHJvY2Vzc29yIE91dHB1dCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkltcGxlbWVudGF0aW9uLURldGFpbHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1EZXRhaWxzIiB0aXRsZT0iSW1wbGVtZW50YXRpb24gRGV0YWlscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUcmFkaXRpb25hbC1Nb2RlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkltcGxlbWVudGF0aW9uLURldGFpbHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1EZXRhaWxzIj5JbXBsZW1lbnRhdGlvbiBEZXRhaWxzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHJlcHJvY2Vzc29yLU91dHB1dC5odG1sI1ByZXByb2Nlc3Nvci1PdXRwdXQiPlByZXByb2Nlc3NvciBPdXRwdXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MTAgVHJhZGl0aW9uYWwgTW9kZTwvaDI+CisKKzxwPlRyYWRpdGlvbmFsIChwcmUtc3RhbmRhcmQpIEMgcHJlcHJvY2Vzc2luZyBpcyByYXRoZXIgZGlmZmVyZW50IGZyb20KK3RoZSBwcmVwcm9jZXNzaW5nIHNwZWNpZmllZCBieSB0aGUgc3RhbmRhcmQuICBXaGVuIEdDQyBpcyBnaXZlbiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi10cmFkaXRpb25hbC1jcHA8L3NwYW4+PC9zYW1wPiBvcHRpb24sIGl0IGF0dGVtcHRzIHRvIGVtdWxhdGUgYSB0cmFkaXRpb25hbAorcHJlcHJvY2Vzc29yLgorCisgICA8cD5HQ0MgdmVyc2lvbnMgMy4yIGFuZCBsYXRlciBvbmx5IHN1cHBvcnQgdHJhZGl0aW9uYWwgbW9kZSBzZW1hbnRpY3MgaW4KK3RoZSBwcmVwcm9jZXNzb3IsIGFuZCBub3QgaW4gdGhlIGNvbXBpbGVyIGZyb250IGVuZHMuICBUaGlzIGNoYXB0ZXIKK291dGxpbmVzIHRoZSB0cmFkaXRpb25hbCBwcmVwcm9jZXNzb3Igc2VtYW50aWNzIHdlIGltcGxlbWVudGVkLgorCisgICA8cD5UaGUgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgY29ycmVzcG9uZCBwcmVjaXNlbHkgdG8gdGhlIGJlaGF2aW9yIG9mCitlYXJsaWVyIHZlcnNpb25zIG9mIEdDQywgbm9yIHRvIGFueSB0cnVlIHRyYWRpdGlvbmFsIHByZXByb2Nlc3Nvci4gCitBZnRlciBhbGwsIGluY29uc2lzdGVuY2llcyBhbW9uZyB0cmFkaXRpb25hbCBpbXBsZW1lbnRhdGlvbnMgd2VyZSBhCittYWpvciBtb3RpdmF0aW9uIGZvciBDIHN0YW5kYXJkaXphdGlvbi4gIEhvd2V2ZXIsIHdlIGludGVuZCB0aGF0IGl0CitzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIHRydWUgdHJhZGl0aW9uYWwgcHJlcHJvY2Vzc29ycyBpbiBhbGwgd2F5cwordGhhdCBhY3R1YWxseSBtYXR0ZXIuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJUcmFkaXRpb25hbC1sZXhpY2FsLWFuYWx5c2lzLmh0bWwjVHJhZGl0aW9uYWwtbGV4aWNhbC1hbmFseXNpcyI+VHJhZGl0aW9uYWwgbGV4aWNhbCBhbmFseXNpczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlRyYWRpdGlvbmFsLW1hY3Jvcy5odG1sI1RyYWRpdGlvbmFsLW1hY3JvcyI+VHJhZGl0aW9uYWwgbWFjcm9zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVHJhZGl0aW9uYWwtbWlzY2VsbGFueS5odG1sI1RyYWRpdGlvbmFsLW1pc2NlbGxhbnkiPlRyYWRpdGlvbmFsIG1pc2NlbGxhbnk8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJUcmFkaXRpb25hbC13YXJuaW5ncy5odG1sI1RyYWRpdGlvbmFsLXdhcm5pbmdzIj5UcmFkaXRpb25hbCB3YXJuaW5nczwvYT4KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVHJhZGl0aW9uYWwtbGV4aWNhbC1hbmFseXNpcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9UcmFkaXRpb25hbC1sZXhpY2FsLWFuYWx5c2lzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4ZDk2ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVHJhZGl0aW9uYWwtbGV4aWNhbC1hbmFseXNpcy5odG1sCkBAIC0wLDAgKzEsMTE1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UcmFkaXRpb25hbCBsZXhpY2FsIGFuYWx5c2lzIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRyYWRpdGlvbmFsLU1vZGUuaHRtbCNUcmFkaXRpb25hbC1Nb2RlIiB0aXRsZT0iVHJhZGl0aW9uYWwgTW9kZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRyYWRpdGlvbmFsLW1hY3Jvcy5odG1sI1RyYWRpdGlvbmFsLW1hY3JvcyIgdGl0bGU9IlRyYWRpdGlvbmFsIG1hY3JvcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUcmFkaXRpb25hbC1sZXhpY2FsLWFuYWx5c2lzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRyYWRpdGlvbmFsLW1hY3Jvcy5odG1sI1RyYWRpdGlvbmFsLW1hY3JvcyI+VHJhZGl0aW9uYWwgbWFjcm9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVHJhZGl0aW9uYWwtTW9kZS5odG1sI1RyYWRpdGlvbmFsLU1vZGUiPlRyYWRpdGlvbmFsIE1vZGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMC4xIFRyYWRpdGlvbmFsIGxleGljYWwgYW5hbHlzaXM8L2gzPgorCis8cD5UaGUgdHJhZGl0aW9uYWwgcHJlcHJvY2Vzc29yIGRvZXMgbm90IGRlY29tcG9zZSBpdHMgaW5wdXQgaW50byB0b2tlbnMKK3RoZSBzYW1lIHdheSBhIHN0YW5kYXJkcy1jb25mb3JtaW5nIHByZXByb2Nlc3NvciBkb2VzLiAgVGhlIGlucHV0IGlzCitzaW1wbHkgdHJlYXRlZCBhcyBhIHN0cmVhbSBvZiB0ZXh0IHdpdGggbWluaW1hbCBpbnRlcm5hbCBmb3JtLgorCisgICA8cD5UaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHRyZWF0IHRyaWdyYXBocyAoc2VlIDxhIGhyZWY9InRyaWdyYXBocy5odG1sI3RyaWdyYXBocyI+dHJpZ3JhcGhzPC9hPikKK3NwZWNpYWxseSBzaW5jZSB0aGV5IHdlcmUgYW4gaW52ZW50aW9uIG9mIHRoZSBzdGFuZGFyZHMgY29tbWl0dGVlLiAgSXQKK2hhbmRsZXMgYXJiaXRyYXJpbHktcG9zaXRpb25lZCBlc2NhcGVkIG5ld2xpbmVzIHByb3Blcmx5IGFuZCBzcGxpY2VzCit0aGUgbGluZXMgYXMgeW91IHdvdWxkIGV4cGVjdDsgbWFueSB0cmFkaXRpb25hbCBwcmVwcm9jZXNzb3JzIGRpZCBub3QKK2RvIHRoaXMuCisKKyAgIDxwPlRoZSBmb3JtIG9mIGhvcml6b250YWwgd2hpdGVzcGFjZSBpbiB0aGUgaW5wdXQgZmlsZSBpcyBwcmVzZXJ2ZWQgaW4KK3RoZSBvdXRwdXQuICBJbiBwYXJ0aWN1bGFyLCBoYXJkIHRhYnMgcmVtYWluIGhhcmQgdGFicy4gIFRoaXMgY2FuIGJlCit1c2VmdWwgaWYsIGZvciBleGFtcGxlLCB5b3UgYXJlIHByZXByb2Nlc3NpbmcgYSBNYWtlZmlsZS4KKworICAgPHA+VHJhZGl0aW9uYWwgQ1BQIG9ubHkgcmVjb2duaXplcyBDLXN0eWxlIGJsb2NrIGNvbW1lbnRzLCBhbmQgdHJlYXRzIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vKjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZXF1ZW5jZSBhcyBpbnRyb2R1Y2luZyBhIGNvbW1lbnQgb25seSBpZiBpdCBsaWVzIG91dHNpZGUKK3F1b3RlZCB0ZXh0LiAgUXVvdGVkIHRleHQgaXMgaW50cm9kdWNlZCBieSB0aGUgdXN1YWwgc2luZ2xlIGFuZCBkb3VibGUKK3F1b3RlcywgYW5kIGFsc28gYnkgYW4gaW5pdGlhbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gYSA8Y29kZT4jaW5jbHVkZTwvY29kZT4KK2RpcmVjdGl2ZS4KKworICAgPHA+VHJhZGl0aW9uYWxseSwgY29tbWVudHMgYXJlIGNvbXBsZXRlbHkgcmVtb3ZlZCBhbmQgYXJlIG5vdCByZXBsYWNlZAord2l0aCBhIHNwYWNlLiAgU2luY2UgYSB0cmFkaXRpb25hbCBjb21waWxlciBkb2VzIGl0cyBvd24gdG9rZW5pemF0aW9uCitvZiB0aGUgb3V0cHV0IG9mIHRoZSBwcmVwcm9jZXNzb3IsIHRoaXMgbWVhbnMgdGhhdCBjb21tZW50cyBjYW4KK2VmZmVjdGl2ZWx5IGJlIHVzZWQgYXMgdG9rZW4gcGFzdGUgb3BlcmF0b3JzLiAgSG93ZXZlciwgY29tbWVudHMKK2JlaGF2ZSBsaWtlIHNlcGFyYXRvcnMgZm9yIHRleHQgaGFuZGxlZCBieSB0aGUgcHJlcHJvY2Vzc29yIGl0c2VsZiwKK3NpbmNlIGl0IGRvZXNuJ3QgcmUtbGV4IGl0cyBpbnB1dC4gIEZvciBleGFtcGxlLCBpbgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2lmIGZvby8qKi9iYXIKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iYXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXJlIGRpc3RpbmN0IGlkZW50aWZpZXJzIGFuZCBleHBhbmRlZAorc2VwYXJhdGVseSBpZiB0aGV5IGhhcHBlbiB0byBiZSBtYWNyb3MuICBJbiBvdGhlciB3b3JkcywgdGhpcworZGlyZWN0aXZlIGlzIGVxdWl2YWxlbnQgdG8KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNpZiBmb28gYmFyCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+cmF0aGVyIHRoYW4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNpZiBmb29iYXIKKzwvcHJlPgorICAgPHA+R2VuZXJhbGx5IHNwZWFraW5nLCBpbiB0cmFkaXRpb25hbCBtb2RlIGFuIG9wZW5pbmcgcXVvdGUgbmVlZCBub3QgaGF2ZQorYSBtYXRjaGluZyBjbG9zaW5nIHF1b3RlLiAgSW4gcGFydGljdWxhciwgYSBtYWNybyBtYXkgYmUgZGVmaW5lZCB3aXRoCityZXBsYWNlbWVudCB0ZXh0IHRoYXQgY29udGFpbnMgYW4gdW5tYXRjaGVkIHF1b3RlLiAgT2YgY291cnNlLCBpZiB5b3UKK2F0dGVtcHQgdG8gY29tcGlsZSBwcmVwcm9jZXNzZWQgb3V0cHV0IGNvbnRhaW5pbmcgYW4gdW5tYXRjaGVkIHF1b3RlCit5b3Ugd2lsbCBnZXQgYSBzeW50YXggZXJyb3IuCisKKyAgIDxwPkhvd2V2ZXIsIGFsbCBwcmVwcm9jZXNzaW5nIGRpcmVjdGl2ZXMgb3RoZXIgdGhhbiA8Y29kZT4jZGVmaW5lPC9jb2RlPgorcmVxdWlyZSBtYXRjaGluZyBxdW90ZXMuICBGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgbSBUaGlzIG1hY3JvJ3MgZmluZSBhbmQgaGFzIGFuIHVubWF0Y2hlZCBxdW90ZQorICAgICAiLyogVGhpcyBpcyBub3QgYSBjb21tZW50LiAgKi8KKyAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj5UaGlzIGlzIGEgY29tbWVudC4gIFRoZSBmb2xsb3dpbmcgI2luY2x1ZGUgZGlyZWN0aXZlCisgICAgICAgIGlzIGlsbC1mb3JtZWQuPC9zcGFuPiAgKi8KKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgKKzwvcHJlPgorICAgPHA+SnVzdCBhcyBmb3IgdGhlIElTTyBwcmVwcm9jZXNzb3IsIHdoYXQgd291bGQgYmUgYSBjbG9zaW5nIHF1b3RlIGNhbiBiZQorZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoIHRvIHByZXZlbnQgdGhlIHF1b3RlZCB0ZXh0IGZyb20gY2xvc2luZy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9UcmFkaXRpb25hbC1tYWNyb3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVHJhZGl0aW9uYWwtbWFjcm9zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZGZjZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVHJhZGl0aW9uYWwtbWFjcm9zLmh0bWwKQEAgLTAsMCArMSwxNDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRyYWRpdGlvbmFsIG1hY3JvcyAtIFRoZSBDIFByZXByb2Nlc3NvcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEMgUHJlcHJvY2Vzc29yIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUcmFkaXRpb25hbC1Nb2RlLmh0bWwjVHJhZGl0aW9uYWwtTW9kZSIgdGl0bGU9IlRyYWRpdGlvbmFsIE1vZGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUcmFkaXRpb25hbC1sZXhpY2FsLWFuYWx5c2lzLmh0bWwjVHJhZGl0aW9uYWwtbGV4aWNhbC1hbmFseXNpcyIgdGl0bGU9IlRyYWRpdGlvbmFsIGxleGljYWwgYW5hbHlzaXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUcmFkaXRpb25hbC1taXNjZWxsYW55Lmh0bWwjVHJhZGl0aW9uYWwtbWlzY2VsbGFueSIgdGl0bGU9IlRyYWRpdGlvbmFsIG1pc2NlbGxhbnkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVHJhZGl0aW9uYWwtbWFjcm9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRyYWRpdGlvbmFsLW1pc2NlbGxhbnkuaHRtbCNUcmFkaXRpb25hbC1taXNjZWxsYW55Ij5UcmFkaXRpb25hbCBtaXNjZWxsYW55PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVHJhZGl0aW9uYWwtbGV4aWNhbC1hbmFseXNpcy5odG1sI1RyYWRpdGlvbmFsLWxleGljYWwtYW5hbHlzaXMiPlRyYWRpdGlvbmFsIGxleGljYWwgYW5hbHlzaXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUcmFkaXRpb25hbC1Nb2RlLmh0bWwjVHJhZGl0aW9uYWwtTW9kZSI+VHJhZGl0aW9uYWwgTW9kZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEwLjIgVHJhZGl0aW9uYWwgbWFjcm9zPC9oMz4KKworPHA+VGhlIG1ham9yIGRpZmZlcmVuY2UgYmV0d2VlbiB0cmFkaXRpb25hbCBhbmQgSVNPIG1hY3JvcyBpcyB0aGF0IHRoZQorZm9ybWVyIGV4cGFuZCB0byB0ZXh0IHJhdGhlciB0aGFuIHRvIGEgdG9rZW4gc2VxdWVuY2UuICBDUFAgcmVtb3ZlcworYWxsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGhvcml6b250YWwgd2hpdGVzcGFjZSBmcm9tIGEgbWFjcm8ncworcmVwbGFjZW1lbnQgdGV4dCBiZWZvcmUgc3RvcmluZyBpdCwgYnV0IHByZXNlcnZlcyB0aGUgZm9ybSBvZiBpbnRlcm5hbAord2hpdGVzcGFjZS4KKworICAgPHA+T25lIGNvbnNlcXVlbmNlIGlzIHRoYXQgaXQgaXMgbGVnaXRpbWF0ZSBmb3IgdGhlIHJlcGxhY2VtZW50IHRleHQgdG8KK2NvbnRhaW4gYW4gdW5tYXRjaGVkIHF1b3RlIChzZWUgPGEgaHJlZj0iVHJhZGl0aW9uYWwtbGV4aWNhbC1hbmFseXNpcy5odG1sI1RyYWRpdGlvbmFsLWxleGljYWwtYW5hbHlzaXMiPlRyYWRpdGlvbmFsIGxleGljYWwgYW5hbHlzaXM8L2E+KS4gIEFuCit1bmNsb3NlZCBzdHJpbmcgb3IgY2hhcmFjdGVyIGNvbnN0YW50IGNvbnRpbnVlcyBpbnRvIHRoZSB0ZXh0Citmb2xsb3dpbmcgdGhlIG1hY3JvIGNhbGwuICBTaW1pbGFybHksIHRoZSB0ZXh0IGF0IHRoZSBlbmQgb2YgYSBtYWNybydzCitleHBhbnNpb24gY2FuIHJ1biB0b2dldGhlciB3aXRoIHRoZSB0ZXh0IGFmdGVyIHRoZSBtYWNybyBpbnZvY2F0aW9uIHRvCitwcm9kdWNlIGEgc2luZ2xlIHRva2VuLgorCisgICA8cD5Ob3JtYWxseSBjb21tZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSByZXBsYWNlbWVudCB0ZXh0IGFmdGVyIHRoZQorbWFjcm8gaXMgZXhwYW5kZWQsIGJ1dCBpZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUNDPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHBhc3NlZCBvbiB0aGUKK2NvbW1hbmQgbGluZSBjb21tZW50cyBhcmUgcHJlc2VydmVkLiAgKEluIGZhY3QsIHRoZSBjdXJyZW50CitpbXBsZW1lbnRhdGlvbiByZW1vdmVzIGNvbW1lbnRzIGV2ZW4gYmVmb3JlIHNhdmluZyB0aGUgbWFjcm8KK3JlcGxhY2VtZW50IHRleHQsIGJ1dCBpdCBjYXJlZnVsIHRvIGRvIGl0IGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUKK29ic2VydmVkIGVmZmVjdCBpcyBpZGVudGljYWwgZXZlbiBpbiB0aGUgZnVuY3Rpb24tbGlrZSBtYWNybyBjYXNlLikKKworICAgPHA+VGhlIElTTyBzdHJpbmdpZmljYXRpb24gb3BlcmF0b3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCB0b2tlbiBwYXN0ZSBvcGVyYXRvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZy4gIEFzIGV4cGxhaW5lZCBsYXRlciwgYW4gZWZmZWN0CitzaW1pbGFyIHRvIHRoZXNlIG9wZXJhdG9ycyBjYW4gYmUgb2J0YWluZWQgaW4gYSBkaWZmZXJlbnQgd2F5LiAgTWFjcm8KK25hbWVzIHRoYXQgYXJlIGVtYmVkZGVkIGluIHF1b3RlcywgZWl0aGVyIGZyb20gdGhlIG1haW4gZmlsZSBvciBhZnRlcgorbWFjcm8gcmVwbGFjZW1lbnQsIGRvIG5vdCBleHBhbmQuCisKKyAgIDxwPkNQUCByZXBsYWNlcyBhbiB1bnF1b3RlZCBvYmplY3QtbGlrZSBtYWNybyBuYW1lIHdpdGggaXRzIHJlcGxhY2VtZW50Cit0ZXh0LCBhbmQgdGhlbiByZXNjYW5zIGl0IGZvciBmdXJ0aGVyIG1hY3JvcyB0byByZXBsYWNlLiAgVW5saWtlCitzdGFuZGFyZCBtYWNybyBleHBhbnNpb24sIHRyYWRpdGlvbmFsIG1hY3JvIGV4cGFuc2lvbiBoYXMgbm8gcHJvdmlzaW9uCit0byBwcmV2ZW50IHJlY3Vyc2lvbi4gIElmIGFuIG9iamVjdC1saWtlIG1hY3JvIGFwcGVhcnMgdW5xdW90ZWQgaW4gaXRzCityZXBsYWNlbWVudCB0ZXh0LCBpdCB3aWxsIGJlIHJlcGxhY2VkIGFnYWluIGR1cmluZyB0aGUgcmVzY2FuIHBhc3MsCithbmQgc28gb24gPGVtPmFkIGluZmluaXR1bTwvZW0+LiAgR0NDIGRldGVjdHMgd2hlbiBpdCBpcyBleHBhbmRpbmcKK3JlY3Vyc2l2ZSBtYWNyb3MsIGVtaXRzIGFuIGVycm9yIG1lc3NhZ2UsIGFuZCBjb250aW51ZXMgYWZ0ZXIgdGhlCitvZmZlbmRpbmcgbWFjcm8gaW52b2NhdGlvbi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgUExVUyArCisgICAgICNkZWZpbmUgSU5DKHgpIFBMVVMreAorICAgICBJTkMoZm9vKTsKKyAgICAgICAgICA9PSZndDsgKytmb287Cis8L3ByZT4KKyAgIDxwPkZ1bmN0aW9uLWxpa2UgbWFjcm9zIGFyZSBzaW1pbGFyIGluIGZvcm0gYnV0IHF1aXRlIGRpZmZlcmVudCBpbgorYmVoYXZpb3IgdG8gdGhlaXIgSVNPIGNvdW50ZXJwYXJ0cy4gIFRoZWlyIGFyZ3VtZW50cyBhcmUgY29udGFpbmVkCit3aXRoaW4gcGFyZW50aGVzZXMsIGFyZSBjb21tYS1zZXBhcmF0ZWQsIGFuZCBjYW4gY3Jvc3MgcGh5c2ljYWwgbGluZXMuIAorQ29tbWFzIHdpdGhpbiBuZXN0ZWQgcGFyZW50aGVzZXMgYXJlIG5vdCB0cmVhdGVkIGFzIGFyZ3VtZW50CitzZXBhcmF0b3JzLiAgU2ltaWxhcmx5LCBhIHF1b3RlIGluIGFuIGFyZ3VtZW50IGNhbm5vdCBiZSBsZWZ0Cit1bmNsb3NlZDsgYSBmb2xsb3dpbmcgY29tbWEgb3IgcGFyZW50aGVzaXMgdGhhdCBjb21lcyBiZWZvcmUgdGhlCitjbG9zaW5nIHF1b3RlIGlzIHRyZWF0ZWQgbGlrZSBhbnkgb3RoZXIgY2hhcmFjdGVyLiAgVGhlcmUgaXMgbm8KK2ZhY2lsaXR5IGZvciBoYW5kbGluZyB2YXJpYWRpYyBtYWNyb3MuCisKKyAgIDxwPlRoaXMgaW1wbGVtZW50YXRpb24gcmVtb3ZlcyBhbGwgY29tbWVudHMgZnJvbSBtYWNybyBhcmd1bWVudHMsIHVubGVzcwordGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1DPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIGdpdmVuLiAgVGhlIGZvcm0gb2YgYWxsIG90aGVyIGhvcml6b250YWwKK3doaXRlc3BhY2UgaW4gYXJndW1lbnRzIGlzIHByZXNlcnZlZCwgaW5jbHVkaW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nCit3aGl0ZXNwYWNlLiAgSW4gcGFydGljdWxhcgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZiggKQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmlzIHRyZWF0ZWQgYXMgYW4gaW52b2NhdGlvbiBvZiB0aGUgbWFjcm8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpdGggYSBzaW5nbGUKK2FyZ3VtZW50IGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgc3BhY2UuICBJZiB5b3Ugd2FudCB0byBpbnZva2UgYQorZnVuY3Rpb24tbGlrZSBtYWNybyB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cywgeW91IG11c3Qgbm90IGxlYXZlIGFueQord2hpdGVzcGFjZSBiZXR3ZWVuIHRoZSBwYXJlbnRoZXNlcy4KKworICAgPHA+SWYgYSBtYWNybyBhcmd1bWVudCBjcm9zc2VzIGEgbmV3IGxpbmUsIHRoZSBuZXcgbGluZSBpcyByZXBsYWNlZCB3aXRoCithIHNwYWNlIHdoZW4gZm9ybWluZyB0aGUgYXJndW1lbnQuICBJZiB0aGUgcHJldmlvdXMgbGluZSBjb250YWluZWQgYW4KK3VudGVybWluYXRlZCBxdW90ZSwgdGhlIGZvbGxvd2luZyBsaW5lIGluaGVyaXRzIHRoZSBxdW90ZWQgc3RhdGUuCisKKyAgIDxwPlRyYWRpdGlvbmFsIHByZXByb2Nlc3NvcnMgcmVwbGFjZSBwYXJhbWV0ZXJzIGluIHRoZSByZXBsYWNlbWVudCB0ZXh0Cit3aXRoIHRoZWlyIGFyZ3VtZW50cyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHBhcmFtZXRlcnMgYXJlIHdpdGhpbgorcXVvdGVzIG9yIG5vdC4gIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gc3RyaW5naXplIGFyZ3VtZW50cy4gIEZvcgorZXhhbXBsZQorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBzdHIoeCkgIngiCisgICAgIHN0cigvKiA8c3BhbiBjbGFzcz0icm9tYW4iPkEgY29tbWVudDwvc3Bhbj4gKi9zb21lIHRleHQgKQorICAgICAgICAgID09Jmd0OyAic29tZSB0ZXh0ICIKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5Ob3RlIHRoYXQgdGhlIGNvbW1lbnQgaXMgcmVtb3ZlZCwgYnV0IHRoYXQgdGhlIHRyYWlsaW5nIHNwYWNlIGlzCitwcmVzZXJ2ZWQuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdXNpbmcgYSBjb21tZW50IHRvIGVmZmVjdCB0b2tlbgorcGFzdGluZy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgc3VmZml4KHgpIGZvb18vKioveAorICAgICBzdWZmaXgoYmFyKQorICAgICAgICAgID09Jmd0OyBmb29fYmFyCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVHJhZGl0aW9uYWwtbWlzY2VsbGFueS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9UcmFkaXRpb25hbC1taXNjZWxsYW55Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwMzk5NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVHJhZGl0aW9uYWwtbWlzY2VsbGFueS5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRyYWRpdGlvbmFsIG1pc2NlbGxhbnkgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVHJhZGl0aW9uYWwtTW9kZS5odG1sI1RyYWRpdGlvbmFsLU1vZGUiIHRpdGxlPSJUcmFkaXRpb25hbCBNb2RlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVHJhZGl0aW9uYWwtbWFjcm9zLmh0bWwjVHJhZGl0aW9uYWwtbWFjcm9zIiB0aXRsZT0iVHJhZGl0aW9uYWwgbWFjcm9zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVHJhZGl0aW9uYWwtd2FybmluZ3MuaHRtbCNUcmFkaXRpb25hbC13YXJuaW5ncyIgdGl0bGU9IlRyYWRpdGlvbmFsIHdhcm5pbmdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRyYWRpdGlvbmFsLW1pc2NlbGxhbnkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVHJhZGl0aW9uYWwtd2FybmluZ3MuaHRtbCNUcmFkaXRpb25hbC13YXJuaW5ncyI+VHJhZGl0aW9uYWwgd2FybmluZ3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUcmFkaXRpb25hbC1tYWNyb3MuaHRtbCNUcmFkaXRpb25hbC1tYWNyb3MiPlRyYWRpdGlvbmFsIG1hY3JvczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRyYWRpdGlvbmFsLU1vZGUuaHRtbCNUcmFkaXRpb25hbC1Nb2RlIj5UcmFkaXRpb25hbCBNb2RlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTAuMyBUcmFkaXRpb25hbCBtaXNjZWxsYW55PC9oMz4KKworPHA+SGVyZSBhcmUgc29tZSB0aGluZ3MgdG8gYmUgYXdhcmUgb2Ygd2hlbiB1c2luZyB0aGUgdHJhZGl0aW9uYWwKK3ByZXByb2Nlc3Nvci4KKworICAgICA8dWw+Cis8bGk+UHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzIGFyZSByZWNvZ25pemVkIG9ubHkgd2hlbiB0aGVpciBsZWFkaW5nCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBpbiB0aGUgZmlyc3QgY29sdW1uLiAgVGhlcmUgY2FuIGJlIG5vIHdoaXRlc3BhY2UKK2JldHdlZW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSBhbmQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYnV0IHdoaXRlc3BhY2UgY2FuCitmb2xsb3cgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+QSB0cnVlIHRyYWRpdGlvbmFsIEMgcHJlcHJvY2Vzc29yIGRvZXMgbm90IHJlY29nbml6ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlcnJvcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgbWF5IG5vdCByZWNvZ25pemUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZWxpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIENQUCBzdXBwb3J0cyBhbGwKK3RoZSBkaXJlY3RpdmVzIGluIHRyYWRpdGlvbmFsIG1vZGUgdGhhdCBpdCBzdXBwb3J0cyBpbiBJU08gbW9kZSwKK2luY2x1ZGluZyBleHRlbnNpb25zLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgZWZmZWN0cyBvZgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIEdDQyBwb2lzb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXJlIHVuZGVmaW5lZC4KKworICAgICA8bGk+X19TVERDX18gaXMgbm90IGRlZmluZWQuCisKKyAgICAgPGxpPklmIHlvdSB1c2UgZGlncmFwaHMgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KKworICAgICA8bGk+SWYgYSBsaW5lIHRoYXQgbG9va3MgbGlrZSBhIGRpcmVjdGl2ZSBhcHBlYXJzIHdpdGhpbiBtYWNybyBhcmd1bWVudHMsCit0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorCisgICA8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1RyYWRpdGlvbmFsLXdhcm5pbmdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1RyYWRpdGlvbmFsLXdhcm5pbmdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzMzlkMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVHJhZGl0aW9uYWwtd2FybmluZ3MuaHRtbApAQCAtMCwwICsxLDEwMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VHJhZGl0aW9uYWwgd2FybmluZ3MgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVHJhZGl0aW9uYWwtTW9kZS5odG1sI1RyYWRpdGlvbmFsLU1vZGUiIHRpdGxlPSJUcmFkaXRpb25hbCBNb2RlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVHJhZGl0aW9uYWwtbWlzY2VsbGFueS5odG1sI1RyYWRpdGlvbmFsLW1pc2NlbGxhbnkiIHRpdGxlPSJUcmFkaXRpb25hbCBtaXNjZWxsYW55Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRyYWRpdGlvbmFsLXdhcm5pbmdzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVHJhZGl0aW9uYWwtbWlzY2VsbGFueS5odG1sI1RyYWRpdGlvbmFsLW1pc2NlbGxhbnkiPlRyYWRpdGlvbmFsIG1pc2NlbGxhbnk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUcmFkaXRpb25hbC1Nb2RlLmh0bWwjVHJhZGl0aW9uYWwtTW9kZSI+VHJhZGl0aW9uYWwgTW9kZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEwLjQgVHJhZGl0aW9uYWwgd2FybmluZ3M8L2gzPgorCis8cD5Zb3UgY2FuIHJlcXVlc3Qgd2FybmluZ3MgYWJvdXQgZmVhdHVyZXMgdGhhdCBkaWQgbm90IGV4aXN0LCBvciB3b3JrZWQKK2RpZmZlcmVudGx5LCBpbiB0cmFkaXRpb25hbCBDIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdHJhZGl0aW9uYWw8L3NwYW4+PC9zYW1wPiBvcHRpb24uIAorR0NDIGRvZXMgbm90IHdhcm4gYWJvdXQgZmVhdHVyZXMgb2YgSVNPIEMgd2hpY2ggeW91IG11c3QgdXNlIHdoZW4geW91CithcmUgdXNpbmcgYSBjb25mb3JtaW5nIGNvbXBpbGVyLCBzdWNoIGFzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IyM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29wZXJhdG9ycy4KKworICAgPHA+UHJlc2VudGx5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdHJhZGl0aW9uYWw8L3NwYW4+PC9zYW1wPiB3YXJucyBhYm91dDoKKworICAgICA8dWw+Cis8bGk+TWFjcm8gcGFyYW1ldGVycyB0aGF0IGFwcGVhciB3aXRoaW4gc3RyaW5nIGxpdGVyYWxzIGluIHRoZSBtYWNybyBib2R5LiAKK0luIHRyYWRpdGlvbmFsIEMgbWFjcm8gcmVwbGFjZW1lbnQgdGFrZXMgcGxhY2Ugd2l0aGluIHN0cmluZyBsaXRlcmFscywKK2J1dCBkb2VzIG5vdCBpbiBJU08gQy4KKworICAgICA8bGk+SW4gdHJhZGl0aW9uYWwgQywgc29tZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBkaWQgbm90IGV4aXN0LiAKK1RyYWRpdGlvbmFsIHByZXByb2Nlc3NvcnMgd291bGQgb25seSBjb25zaWRlciBhIGxpbmUgdG8gYmUgYSBkaXJlY3RpdmUKK2lmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFyZWQgaW4gY29sdW1uIDEgb24gdGhlIGxpbmUuICBUaGVyZWZvcmUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdHJhZGl0aW9uYWw8L3NwYW4+PC9zYW1wPiB3YXJucyBhYm91dCBkaXJlY3RpdmVzIHRoYXQgdHJhZGl0aW9uYWwgQwordW5kZXJzdGFuZHMgYnV0IHdvdWxkIGlnbm9yZSBiZWNhdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZG9lcyBub3QgYXBwZWFyIGFzIHRoZQorZmlyc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lLiAgSXQgYWxzbyBzdWdnZXN0cyB5b3UgaGlkZSBkaXJlY3RpdmVzIGxpa2UKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBub3QgdW5kZXJzdG9vZCBieSB0cmFkaXRpb25hbCBDIGJ5IGluZGVudGluZyB0aGVtLiAgU29tZQordHJhZGl0aW9uYWwgaW1wbGVtZW50YXRpb25zIHdvdWxkIG5vdCByZWNvZ25pemUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZWxpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgc28gaXQKK3N1Z2dlc3RzIGF2b2lkaW5nIGl0IGFsdG9nZXRoZXIuCisKKyAgICAgPGxpPkEgZnVuY3Rpb24tbGlrZSBtYWNybyB0aGF0IGFwcGVhcnMgd2l0aG91dCBhbiBhcmd1bWVudCBsaXN0LiAgSW4gc29tZQordHJhZGl0aW9uYWwgcHJlcHJvY2Vzc29ycyB0aGlzIHdhcyBhbiBlcnJvci4gIEluIElTTyBDIGl0IG1lcmVseSBtZWFucwordGhhdCB0aGUgbWFjcm8gaXMgbm90IGV4cGFuZGVkLgorCisgICAgIDxsaT5UaGUgdW5hcnkgcGx1cyBvcGVyYXRvci4gIFRoaXMgZGlkIG5vdCBleGlzdCBpbiB0cmFkaXRpb25hbCBDLgorCisgICAgIDxsaT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5VPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxMPC9zcGFuPjwvc2FtcD4mcnNxdW87IGludGVnZXIgY29uc3RhbnQgc3VmZml4ZXMsIHdoaWNoIHdlcmUgbm90CithdmFpbGFibGUgaW4gdHJhZGl0aW9uYWwgQy4gIChUcmFkaXRpb25hbCBDIGRvZXMgc3VwcG9ydCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87CitzdWZmaXggZm9yIHNpbXBsZSBsb25nIGludGVnZXIgY29uc3RhbnRzLikgIFlvdSBhcmUgbm90IHdhcm5lZCBhYm91dAordXNlcyBvZiB0aGVzZSBzdWZmaXhlcyBpbiBtYWNyb3MgZGVmaW5lZCBpbiBzeXN0ZW0gaGVhZGVycy4gIEZvcgoraW5zdGFuY2UsIDxjb2RlPlVJTlRfTUFYPC9jb2RlPiBtYXkgd2VsbCBiZSBkZWZpbmVkIGFzIDxjb2RlPjQyOTQ5NjcyOTVVPC9jb2RlPiwgYnV0Cit5b3Ugd2lsbCBub3QgYmUgd2FybmVkIGlmIHlvdSB1c2UgPGNvZGU+VUlOVF9NQVg8L2NvZGU+LgorCisgICAgIDxwPllvdSBjYW4gdXN1YWxseSBhdm9pZCB0aGUgd2FybmluZywgYW5kIHRoZSByZWxhdGVkIHdhcm5pbmcgYWJvdXQKK2NvbnN0YW50cyB3aGljaCBhcmUgc28gbGFyZ2UgdGhhdCB0aGV5IGFyZSB1bnNpZ25lZCwgYnkgd3JpdGluZyB0aGUKK2ludGVnZXIgY29uc3RhbnQgaW4gcXVlc3Rpb24gaW4gaGV4YWRlY2ltYWwsIHdpdGggbm8gVSBzdWZmaXguICBUYWtlCitjYXJlLCB0aG91Z2gsIGJlY2F1c2UgdGhpcyBnaXZlcyB0aGUgd3JvbmcgcmVzdWx0IGluIGV4b3RpYyBjYXNlcy4gCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1VuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1VuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhOGE1MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VW5kZWZpbmluZyBhbmQgUmVkZWZpbmluZyBNYWNyb3MgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIiB0aXRsZT0iTWFjcm9zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNQcmVkZWZpbmVkLU1hY3JvcyIgdGl0bGU9IlByZWRlZmluZWQgTWFjcm9zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzLmh0bWwjRGlyZWN0aXZlcy1XaXRoaW4tTWFjcm8tQXJndW1lbnRzIiB0aXRsZT0iRGlyZWN0aXZlcyBXaXRoaW4gTWFjcm8gQXJndW1lbnRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlVuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRpcmVjdGl2ZXMtV2l0aGluLU1hY3JvLUFyZ3VtZW50cy5odG1sI0RpcmVjdGl2ZXMtV2l0aGluLU1hY3JvLUFyZ3VtZW50cyI+RGlyZWN0aXZlcyBXaXRoaW4gTWFjcm8gQXJndW1lbnRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNQcmVkZWZpbmVkLU1hY3JvcyI+UHJlZGVmaW5lZCBNYWNyb3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiPk1hY3JvczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuOCBVbmRlZmluaW5nIGFuZCBSZWRlZmluaW5nIE1hY3JvczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXVuZGVmaW5pbmctbWFjcm9zLTY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVkZWZpbmluZy1tYWNyb3MtNjkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyM3VuZGVmLTcwIj48L2E+CitJZiBhIG1hY3JvIGNlYXNlcyB0byBiZSB1c2VmdWwsIGl0IG1heSBiZSA8ZGZuPnVuZGVmaW5lZDwvZGZuPiB3aXRoIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jdW5kZWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jdW5kZWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIHRoZQorbmFtZSBvZiB0aGUgbWFjcm8gdG8gdW5kZWZpbmUuICBZb3UgdXNlIHRoZSBiYXJlIG1hY3JvIG5hbWUsIGV2ZW4gaWYgdGhlCittYWNybyBpcyBmdW5jdGlvbi1saWtlLiAgSXQgaXMgYW4gZXJyb3IgaWYgYW55dGhpbmcgYXBwZWFycyBvbiB0aGUgbGluZQorYWZ0ZXIgdGhlIG1hY3JvIG5hbWUuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiN1bmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoYXMgbm8gZWZmZWN0IGlmIHRoZSBuYW1lIGlzIG5vdCBhCittYWNyby4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgRk9PIDQKKyAgICAgeCA9IEZPTzsgICAgICAgID09Jmd0OyB4ID0gNDsKKyAgICAgI3VuZGVmIEZPTworICAgICB4ID0gRk9POyAgICAgICAgPT0mZ3Q7IHggPSBGT087Cis8L3ByZT4KKyAgIDxwPk9uY2UgYSBtYWNybyBoYXMgYmVlbiB1bmRlZmluZWQsIHRoYXQgaWRlbnRpZmllciBtYXkgYmUgPGRmbj5yZWRlZmluZWQ8L2Rmbj4KK2FzIGEgbWFjcm8gYnkgYSBzdWJzZXF1ZW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2RlZmluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUuICBUaGUgbmV3IGRlZmluaXRpb24KK25lZWQgbm90IGhhdmUgYW55IHJlc2VtYmxhbmNlIHRvIHRoZSBvbGQgZGVmaW5pdGlvbi4KKworICAgPHA+SG93ZXZlciwgaWYgYW4gaWRlbnRpZmllciB3aGljaCBpcyBjdXJyZW50bHkgYSBtYWNybyBpcyByZWRlZmluZWQsIHRoZW4KK3RoZSBuZXcgZGVmaW5pdGlvbiBtdXN0IGJlIDxkZm4+ZWZmZWN0aXZlbHkgdGhlIHNhbWU8L2Rmbj4gYXMgdGhlIG9sZCBvbmUuIAorVHdvIG1hY3JvIGRlZmluaXRpb25zIGFyZSBlZmZlY3RpdmVseSB0aGUgc2FtZSBpZjoKKyAgICAgPHVsPgorPGxpPkJvdGggYXJlIHRoZSBzYW1lIHR5cGUgb2YgbWFjcm8gKG9iamVjdC0gb3IgZnVuY3Rpb24tbGlrZSkuIAorPGxpPkFsbCB0aGUgdG9rZW5zIG9mIHRoZSByZXBsYWNlbWVudCBsaXN0IGFyZSB0aGUgc2FtZS4gCis8bGk+SWYgdGhlcmUgYXJlIGFueSBwYXJhbWV0ZXJzLCB0aGV5IGFyZSB0aGUgc2FtZS4gCis8bGk+V2hpdGVzcGFjZSBhcHBlYXJzIGluIHRoZSBzYW1lIHBsYWNlcyBpbiBib3RoLiAgSXQgbmVlZCBub3QgYmUKK2V4YWN0bHkgdGhlIHNhbWUgYW1vdW50IG9mIHdoaXRlc3BhY2UsIHRob3VnaC4gIFJlbWVtYmVyIHRoYXQgY29tbWVudHMKK2NvdW50IGFzIHdoaXRlc3BhY2UuIAorPC91bD4KKworPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGVzZSBkZWZpbml0aW9ucyBhcmUgZWZmZWN0aXZlbHkgdGhlIHNhbWU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBGT1VSICgyICsgMikKKyAgICAgI2RlZmluZSBGT1VSICAgICAgICAgKDIgICAgKyAgICAyKQorICAgICAjZGVmaW5lIEZPVVIgKDIgLyogPHNwYW4gY2xhc3M9InJvbWFuIj50d288L3NwYW4+ICovICsgMikKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5idXQgdGhlc2UgYXJlIG5vdDoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIEZPVVIgKDIgKyAyKQorICAgICAjZGVmaW5lIEZPVVIgKCAyKzIgKQorICAgICAjZGVmaW5lIEZPVVIgKDIgKiAyKQorICAgICAjZGVmaW5lIEZPVVIoc2NvcmUsYW5kLHNldmVuLHllYXJzLGFnbykgKDIgKyAyKQorPC9wcmU+CisgICA8cD5JZiBhIG1hY3JvIGlzIHJlZGVmaW5lZCB3aXRoIGEgZGVmaW5pdGlvbiB0aGF0IGlzIG5vdCBlZmZlY3RpdmVseSB0aGUKK3NhbWUgYXMgdGhlIG9sZCBvbmUsIHRoZSBwcmVwcm9jZXNzb3IgaXNzdWVzIGEgd2FybmluZyBhbmQgY2hhbmdlcyB0aGUKK21hY3JvIHRvIHVzZSB0aGUgbmV3IGRlZmluaXRpb24uICBJZiB0aGUgbmV3IGRlZmluaXRpb24gaXMgZWZmZWN0aXZlbHkKK3RoZSBzYW1lLCB0aGUgcmVkZWZpbml0aW9uIGlzIHNpbGVudGx5IGlnbm9yZWQuICBUaGlzIGFsbG93cywgZm9yCitpbnN0YW5jZSwgdHdvIGRpZmZlcmVudCBoZWFkZXJzIHRvIGRlZmluZSBhIGNvbW1vbiBtYWNyby4gIFRoZQorcHJlcHJvY2Vzc29yIHdpbGwgb25seSBjb21wbGFpbiBpZiB0aGUgZGVmaW5pdGlvbnMgZG8gbm90IG1hdGNoLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1ZhcmlhZGljLU1hY3Jvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9WYXJpYWRpYy1NYWNyb3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGM4ODgyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9WYXJpYWRpYy1NYWNyb3MuaHRtbApAQCAtMCwwICsxLDE2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VmFyaWFkaWMgTWFjcm9zIC0gVGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY3Jvcy5odG1sI01hY3JvcyIgdGl0bGU9Ik1hY3JvcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNvbmNhdGVuYXRpb24uaHRtbCNDb25jYXRlbmF0aW9uIiB0aXRsZT0iQ29uY2F0ZW5hdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlByZWRlZmluZWQtTWFjcm9zLmh0bWwjUHJlZGVmaW5lZC1NYWNyb3MiIHRpdGxlPSJQcmVkZWZpbmVkIE1hY3JvcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCitUaGlzIG1hbnVhbCBjb250YWlucyBubyBJbnZhcmlhbnQgU2VjdGlvbnMuICBUaGUgRnJvbnQtQ292ZXIgVGV4dHMgYXJlCisoYSkgKHNlZSBiZWxvdyksIGFuZCB0aGUgQmFjay1Db3ZlciBUZXh0cyBhcmUgKGIpIChzZWUgYmVsb3cpLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWYXJpYWRpYy1NYWNyb3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNQcmVkZWZpbmVkLU1hY3JvcyI+UHJlZGVmaW5lZCBNYWNyb3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb25jYXRlbmF0aW9uLmh0bWwjQ29uY2F0ZW5hdGlvbiI+Q29uY2F0ZW5hdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY3Jvcy5odG1sI01hY3JvcyI+TWFjcm9zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My42IFZhcmlhZGljIE1hY3JvczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXZhcmlhYmxlLW51bWJlci1vZi1hcmd1bWVudHMtNTYiPjwvYT48YSBuYW1lPSJpbmRleC1tYWNyb3Mtd2l0aC12YXJpYWJsZS1hcmd1bWVudHMtNTciPjwvYT48YSBuYW1lPSJpbmRleC12YXJpYWRpYy1tYWNyb3MtNTgiPjwvYT4KK0EgbWFjcm8gY2FuIGJlIGRlY2xhcmVkIHRvIGFjY2VwdCBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMgbXVjaCBhcworYSBmdW5jdGlvbiBjYW4uICBUaGUgc3ludGF4IGZvciBkZWZpbmluZyB0aGUgbWFjcm8gaXMgc2ltaWxhciB0byB0aGF0IG9mCithIGZ1bmN0aW9uLiAgSGVyZSBpcyBhbiBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBlcHJpbnRmKC4uLikgZnByaW50ZiAoc3RkZXJyLCBfX1ZBX0FSR1NfXykKKzwvcHJlPgorICAgPHA+VGhpcyBraW5kIG9mIG1hY3JvIGlzIGNhbGxlZCA8ZGZuPnZhcmlhZGljPC9kZm4+LiAgV2hlbiB0aGUgbWFjcm8gaXMgaW52b2tlZCwKK2FsbCB0aGUgdG9rZW5zIGluIGl0cyBhcmd1bWVudCBsaXN0IGFmdGVyIHRoZSBsYXN0IG5hbWVkIGFyZ3VtZW50ICh0aGlzCittYWNybyBoYXMgbm9uZSksIGluY2x1ZGluZyBhbnkgY29tbWFzLCBiZWNvbWUgdGhlIDxkZm4+dmFyaWFibGUKK2FyZ3VtZW50PC9kZm4+LiAgVGhpcyBzZXF1ZW5jZSBvZiB0b2tlbnMgcmVwbGFjZXMgdGhlIGlkZW50aWZpZXIKKzxjb2RlPl9fVkFfQVJHU19fPCEtLSAvQHcgLS0+PC9jb2RlPiBpbiB0aGUgbWFjcm8gYm9keSB3aGVyZXZlciBpdCBhcHBlYXJzLiAgVGh1cywgd2UKK2hhdmUgdGhpcyBleHBhbnNpb246CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBlcHJpbnRmICgiJXM6JWQ6ICIsIGlucHV0X2ZpbGUsIGxpbmVubykKKyAgICAgICAgICA9PSZndDsgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVkOiAiLCBpbnB1dF9maWxlLCBsaW5lbm8pCis8L3ByZT4KKyAgIDxwPlRoZSB2YXJpYWJsZSBhcmd1bWVudCBpcyBjb21wbGV0ZWx5IG1hY3JvLWV4cGFuZGVkIGJlZm9yZSBpdCBpcyBpbnNlcnRlZAoraW50byB0aGUgbWFjcm8gZXhwYW5zaW9uLCBqdXN0IGxpa2UgYW4gb3JkaW5hcnkgYXJndW1lbnQuICBZb3UgbWF5IHVzZQordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcGVyYXRvcnMgdG8gc3RyaW5naWZ5IHRoZSB2YXJpYWJsZSBhcmd1bWVudAorb3IgdG8gcGFzdGUgaXRzIGxlYWRpbmcgb3IgdHJhaWxpbmcgdG9rZW4gd2l0aCBhbm90aGVyIHRva2VuLiAgKEJ1dCBzZWUKK2JlbG93IGZvciBhbiBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87LikKKworICAgPHA+SWYgeW91ciBtYWNybyBpcyBjb21wbGljYXRlZCwgeW91IG1heSB3YW50IGEgbW9yZSBkZXNjcmlwdGl2ZSBuYW1lIGZvcgordGhlIHZhcmlhYmxlIGFyZ3VtZW50IHRoYW4gPGNvZGU+X19WQV9BUkdTX188IS0tIC9AdyAtLT48L2NvZGU+LiAgQ1BQIHBlcm1pdHMKK3RoaXMsIGFzIGFuIGV4dGVuc2lvbi4gIFlvdSBtYXkgd3JpdGUgYW4gYXJndW1lbnQgbmFtZSBpbW1lZGlhdGVseQorYmVmb3JlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi4uLjwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgdGhhdCBuYW1lIGlzIHVzZWQgZm9yIHRoZSB2YXJpYWJsZSBhcmd1bWVudC4gCitUaGUgPGNvZGU+ZXByaW50ZjwvY29kZT4gbWFjcm8gYWJvdmUgY291bGQgYmUgd3JpdHRlbgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBlcHJpbnRmKGFyZ3MuLi4pIGZwcmludGYgKHN0ZGVyciwgYXJncykKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij51c2luZyB0aGlzIGV4dGVuc2lvbi4gIFlvdSBjYW5ub3QgdXNlIDxjb2RlPl9fVkFfQVJHU19fPCEtLSAvQHcgLS0+PC9jb2RlPiBhbmQgdGhpcworZXh0ZW5zaW9uIGluIHRoZSBzYW1lIG1hY3JvLgorCisgICA8cD5Zb3UgY2FuIGhhdmUgbmFtZWQgYXJndW1lbnRzIGFzIHdlbGwgYXMgdmFyaWFibGUgYXJndW1lbnRzIGluIGEgdmFyaWFkaWMKK21hY3JvLiAgV2UgY291bGQgZGVmaW5lIDxjb2RlPmVwcmludGY8L2NvZGU+IGxpa2UgdGhpcywgaW5zdGVhZDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgZXByaW50Zihmb3JtYXQsIC4uLikgZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIF9fVkFfQVJHU19fKQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgZm9ybXVsYXRpb24gbG9va3MgbW9yZSBkZXNjcmlwdGl2ZSwgYnV0IHVuZm9ydHVuYXRlbHkgaXQgaXMgbGVzcworZmxleGlibGU6IHlvdSBtdXN0IG5vdyBzdXBwbHkgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IGFmdGVyIHRoZSBmb3JtYXQKK3N0cmluZy4gIEluIHN0YW5kYXJkIEMsIHlvdSBjYW5ub3Qgb21pdCB0aGUgY29tbWEgc2VwYXJhdGluZyB0aGUgbmFtZWQKK2FyZ3VtZW50IGZyb20gdGhlIHZhcmlhYmxlIGFyZ3VtZW50cy4gIEZ1cnRoZXJtb3JlLCBpZiB5b3UgbGVhdmUgdGhlCit2YXJpYWJsZSBhcmd1bWVudCBlbXB0eSwgeW91IHdpbGwgZ2V0IGEgc3ludGF4IGVycm9yLCBiZWNhdXNlCit0aGVyZSB3aWxsIGJlIGFuIGV4dHJhIGNvbW1hIGFmdGVyIHRoZSBmb3JtYXQgc3RyaW5nLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZXByaW50Zigic3VjY2VzcyFcbiIsICk7CisgICAgICAgICAgPT0mZ3Q7IGZwcmludGYoc3RkZXJyLCAic3VjY2VzcyFcbiIsICk7Cis8L3ByZT4KKyAgIDxwPkdOVSBDUFAgaGFzIGEgcGFpciBvZiBleHRlbnNpb25zIHdoaWNoIGRlYWwgd2l0aCB0aGlzIHByb2JsZW0uICBGaXJzdCwKK3lvdSBhcmUgYWxsb3dlZCB0byBsZWF2ZSB0aGUgdmFyaWFibGUgYXJndW1lbnQgb3V0IGVudGlyZWx5OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZXByaW50ZiAoInN1Y2Nlc3MhXG4iKQorICAgICAgICAgID09Jmd0OyBmcHJpbnRmKHN0ZGVyciwgInN1Y2Nlc3MhXG4iLCApOworPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlNlY29uZCwgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IyM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG9rZW4gcGFzdGUgb3BlcmF0b3IgaGFzIGEgc3BlY2lhbCBtZWFuaW5nIHdoZW4KK3BsYWNlZCBiZXR3ZWVuIGEgY29tbWEgYW5kIGEgdmFyaWFibGUgYXJndW1lbnQuICBJZiB5b3Ugd3JpdGUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgZXByaW50Zihmb3JtYXQsIC4uLikgZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsICMjX19WQV9BUkdTX18pCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+YW5kIHRoZSB2YXJpYWJsZSBhcmd1bWVudCBpcyBsZWZ0IG91dCB3aGVuIHRoZSA8Y29kZT5lcHJpbnRmPC9jb2RlPiBtYWNybyBpcwordXNlZCwgdGhlbiB0aGUgY29tbWEgYmVmb3JlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgYmUgZGVsZXRlZC4gIFRoaXMgZG9lcworPGVtPm5vdDwvZW0+IGhhcHBlbiBpZiB5b3UgcGFzcyBhbiBlbXB0eSBhcmd1bWVudCwgbm9yIGRvZXMgaXQgaGFwcGVuIGlmCit0aGUgdG9rZW4gcHJlY2VkaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IyM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGNvbW1hLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZXByaW50ZiAoInN1Y2Nlc3MhXG4iKQorICAgICAgICAgID09Jmd0OyBmcHJpbnRmKHN0ZGVyciwgInN1Y2Nlc3MhXG4iKTsKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGUgYWJvdmUgZXhwbGFuYXRpb24gaXMgYW1iaWd1b3VzIGFib3V0IHRoZSBjYXNlIHdoZXJlIHRoZSBvbmx5IG1hY3JvCitwYXJhbWV0ZXIgaXMgYSB2YXJpYWJsZSBhcmd1bWVudHMgcGFyYW1ldGVyLCBhcyBpdCBpcyBtZWFuaW5nbGVzcyB0bwordHJ5IHRvIGRpc3Rpbmd1aXNoIHdoZXRoZXIgbm8gYXJndW1lbnQgYXQgYWxsIGlzIGFuIGVtcHR5IGFyZ3VtZW50IG9yCithIG1pc3NpbmcgYXJndW1lbnQuICBJbiB0aGlzIGNhc2UgdGhlIEM5OSBzdGFuZGFyZCBpcyBjbGVhciB0aGF0IHRoZQorY29tbWEgbXVzdCByZW1haW4sIGhvd2V2ZXIgdGhlIGV4aXN0aW5nIEdDQyBleHRlbnNpb24gdXNlZCB0byBzd2FsbG93Cit0aGUgY29tbWEuICBTbyBDUFAgcmV0YWlucyB0aGUgY29tbWEgd2hlbiBjb25mb3JtaW5nIHRvIGEgc3BlY2lmaWMgQworc3RhbmRhcmQsIGFuZCBkcm9wcyBpdCBvdGhlcndpc2UuCisKKyAgIDxwPkM5OSBtYW5kYXRlcyB0aGF0IHRoZSBvbmx5IHBsYWNlIHRoZSBpZGVudGlmaWVyIDxjb2RlPl9fVkFfQVJHU19fPCEtLSAvQHcgLS0+PC9jb2RlPgorY2FuIGFwcGVhciBpcyBpbiB0aGUgcmVwbGFjZW1lbnQgbGlzdCBvZiBhIHZhcmlhZGljIG1hY3JvLiAgSXQgbWF5IG5vdAorYmUgdXNlZCBhcyBhIG1hY3JvIG5hbWUsIG1hY3JvIGFyZ3VtZW50IG5hbWUsIG9yIHdpdGhpbiBhIGRpZmZlcmVudCB0eXBlCitvZiBtYWNyby4gIEl0IG1heSBhbHNvIGJlIGZvcmJpZGRlbiBpbiBvcGVuIHRleHQ7IHRoZSBzdGFuZGFyZCBpcworYW1iaWd1b3VzLiAgV2UgcmVjb21tZW5kIHlvdSBhdm9pZCB1c2luZyBpdCBleGNlcHQgZm9yIGl0cyBkZWZpbmVkCitwdXJwb3NlLgorCisgICA8cD5WYXJpYWRpYyBtYWNyb3MgYXJlIGEgbmV3IGZlYXR1cmUgaW4gQzk5LiAgR05VIENQUCBoYXMgc3VwcG9ydGVkIHRoZW0KK2ZvciBhIGxvbmcgdGltZSwgYnV0IG9ubHkgd2l0aCBhIG5hbWVkIHZhcmlhYmxlIGFyZ3VtZW50CisoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcmdzLi4uPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBub3QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uLi48L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kIDxjb2RlPl9fVkFfQVJHU19fPCEtLSAvQHcgLS0+PC9jb2RlPikuICBJZiB5b3UgYXJlCitjb25jZXJuZWQgd2l0aCBwb3J0YWJpbGl0eSB0byBwcmV2aW91cyB2ZXJzaW9ucyBvZiBHQ0MsIHlvdSBzaG91bGQgdXNlCitvbmx5IG5hbWVkIHZhcmlhYmxlIGFyZ3VtZW50cy4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UgYXJlIGNvbmNlcm5lZAord2l0aCBwb3J0YWJpbGl0eSB0byBvdGhlciBjb25mb3JtaW5nIGltcGxlbWVudGF0aW9ucyBvZiBDOTksIHlvdSBzaG91bGQKK3VzZSBvbmx5IDxjb2RlPl9fVkFfQVJHU19fPCEtLSAvQHcgLS0+PC9jb2RlPi4KKworICAgPHA+UHJldmlvdXMgdmVyc2lvbnMgb2YgQ1BQIGltcGxlbWVudGVkIHRoZSBjb21tYS1kZWxldGlvbiBleHRlbnNpb24KK211Y2ggbW9yZSBnZW5lcmFsbHkuICBXZSBoYXZlIHJlc3RyaWN0ZWQgaXQgaW4gdGhpcyByZWxlYXNlIHRvIG1pbmltaXplCit0aGUgZGlmZmVyZW5jZXMgZnJvbSBDOTkuICBUbyBnZXQgdGhlIHNhbWUgZWZmZWN0IHdpdGggYm90aCB0aGlzIGFuZAorcHJldmlvdXMgdmVyc2lvbnMgb2YgR0NDLCB0aGUgdG9rZW4gcHJlY2VkaW5nIHRoZSBzcGVjaWFsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IyM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbXVzdAorYmUgYSBjb21tYSwgYW5kIHRoZXJlIG11c3QgYmUgd2hpdGUgc3BhY2UgYmV0d2VlbiB0aGF0IGNvbW1hIGFuZAord2hhdGV2ZXIgY29tZXMgaW1tZWRpYXRlbHkgYmVmb3JlIGl0OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBlcHJpbnRmKGZvcm1hdCwgYXJncy4uLikgZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQgLCAjI2FyZ3MpCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+U2VlIDxhIGhyZWY9IkRpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMuaHRtbCNEaWZmZXJlbmNlcy1mcm9tLXByZXZpb3VzLXZlcnNpb25zIj5EaWZmZXJlbmNlcyBmcm9tIHByZXZpb3VzIHZlcnNpb25zPC9hPiwgZm9yIHRoZSBnb3J5IGRldGFpbHMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvV3JhcHBlci1IZWFkZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1dyYXBwZXItSGVhZGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYThhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL1dyYXBwZXItSGVhZGVycy5odG1sCkBAIC0wLDAgKzEsMTA0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5XcmFwcGVyIEhlYWRlcnMgLSBUaGUgQyBQcmVwcm9jZXNzb3I8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBDIFByZXByb2Nlc3NvciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIiB0aXRsZT0iSGVhZGVyIEZpbGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29tcHV0ZWQtSW5jbHVkZXMuaHRtbCNDb21wdXRlZC1JbmNsdWRlcyIgdGl0bGU9IkNvbXB1dGVkIEluY2x1ZGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3lzdGVtLUhlYWRlcnMuaHRtbCNTeXN0ZW0tSGVhZGVycyIgdGl0bGU9IlN5c3RlbSBIZWFkZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEEgY29weSBvZgordGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IldyYXBwZXItSGVhZGVycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTeXN0ZW0tSGVhZGVycy5odG1sI1N5c3RlbS1IZWFkZXJzIj5TeXN0ZW0gSGVhZGVyczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvbXB1dGVkLUluY2x1ZGVzLmh0bWwjQ29tcHV0ZWQtSW5jbHVkZXMiPkNvbXB1dGVkIEluY2x1ZGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIj5IZWFkZXIgRmlsZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjcgV3JhcHBlciBIZWFkZXJzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtd3JhcHBlci1oZWFkZXJzLTM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3ZlcnJpZGluZy1hLWhlYWRlci1maWxlLTM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjNpbmNsdWRlXzAwNWZuZXh0LTM4Ij48L2E+CitTb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIGFkanVzdCB0aGUgY29udGVudHMgb2YgYSBzeXN0ZW0tcHJvdmlkZWQKK2hlYWRlciBmaWxlIHdpdGhvdXQgZWRpdGluZyBpdCBkaXJlY3RseS4gIEdDQydzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5maXhpbmNsdWRlczwvc3Bhbj48L3NhbXA+CitvcGVyYXRpb24gZG9lcyB0aGlzLCBmb3IgZXhhbXBsZS4gIE9uZSB3YXkgdG8gZG8gdGhhdCB3b3VsZCBiZSB0byBjcmVhdGUKK2EgbmV3IGhlYWRlciBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgaW5zZXJ0IGl0IGluIHRoZSBzZWFyY2ggcGF0aAorYmVmb3JlIHRoZSBvcmlnaW5hbCBoZWFkZXIuICBUaGF0IHdvcmtzIGZpbmUgYXMgbG9uZyBhcyB5b3UncmUgd2lsbGluZwordG8gcmVwbGFjZSB0aGUgb2xkIGhlYWRlciBlbnRpcmVseS4gIEJ1dCB3aGF0IGlmIHlvdSB3YW50IHRvIHJlZmVyIHRvCit0aGUgb2xkIGhlYWRlciBmcm9tIHRoZSBuZXcgb25lPworCisgICA8cD5Zb3UgY2Fubm90IHNpbXBseSBpbmNsdWRlIHRoZSBvbGQgaGVhZGVyIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoYXQKK3dpbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nLCBhbmQgZmluZCB5b3VyIG5ldyBoZWFkZXIgYWdhaW4uICBJZiB5b3VyCitoZWFkZXIgaXMgbm90IHByb3RlY3RlZCBmcm9tIG11bHRpcGxlIGluY2x1c2lvbiAoc2VlIDxhIGhyZWY9Ik9uY2VfMDAyZE9ubHktSGVhZGVycy5odG1sI09uY2VfMDAyZE9ubHktSGVhZGVycyI+T25jZS1Pbmx5IEhlYWRlcnM8L2E+KSwgaXQgd2lsbCByZWN1cnNlIGluZmluaXRlbHkgYW5kIGNhdXNlIGEgZmF0YWwgZXJyb3IuCisKKyAgIDxwPllvdSBjb3VsZCBpbmNsdWRlIHRoZSBvbGQgaGVhZGVyIHdpdGggYW4gYWJzb2x1dGUgcGF0aG5hbWU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2luY2x1ZGUgIi91c3IvaW5jbHVkZS9vbGQtaGVhZGVyLmgiCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyB3b3JrcywgYnV0IGlzIG5vdCBjbGVhbjsgc2hvdWxkIHRoZSBzeXN0ZW0gaGVhZGVycyBldmVyIG1vdmUsIHlvdQord291bGQgaGF2ZSB0byBlZGl0IHRoZSBuZXcgaGVhZGVycyB0byBtYXRjaC4KKworICAgPHA+VGhlcmUgaXMgbm8gd2F5IHRvIHNvbHZlIHRoaXMgcHJvYmxlbSB3aXRoaW4gdGhlIEMgc3RhbmRhcmQsIGJ1dCB5b3UgY2FuCit1c2UgdGhlIEdOVSBleHRlbnNpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZV9uZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSXQgbWVhbnMsICZsZHF1bztJbmNsdWRlIHRoZQorPGVtPm5leHQ8L2VtPiBmaWxlIHdpdGggdGhpcyBuYW1lJnJkcXVvOy4gIFRoaXMgZGlyZWN0aXZlIHdvcmtzIGxpa2UKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZXhjZXB0IGluIHNlYXJjaGluZyBmb3IgdGhlIHNwZWNpZmllZCBmaWxlOiBpdCBzdGFydHMKK3NlYXJjaGluZyB0aGUgbGlzdCBvZiBoZWFkZXIgZmlsZSBkaXJlY3RvcmllcyA8ZW0+YWZ0ZXI8L2VtPiB0aGUgZGlyZWN0b3J5CitpbiB3aGljaCB0aGUgY3VycmVudCBmaWxlIHdhcyBmb3VuZC4KKworICAgPHA+U3VwcG9zZSB5b3Ugc3BlY2lmeSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSSAvdXNyL2xvY2FsL2luY2x1ZGU8L3NwYW4+PC9zYW1wPiwgYW5kIHRoZSBsaXN0IG9mCitkaXJlY3RvcmllcyB0byBzZWFyY2ggYWxzbyBpbmNsdWRlcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9pbmNsdWRlPC9zcGFuPjwvc2FtcD47IGFuZCBzdXBwb3NlCitib3RoIGRpcmVjdG9yaWVzIGNvbnRhaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnNpZ25hbC5oPC9zcGFuPjwvc2FtcD4uICBPcmRpbmFyeSA8Y29kZT4jaW5jbHVkZSZuYnNwOyZsdDtzaWduYWwuaCZndDs8IS0tIC9AdyAtLT48L2NvZGU+IGZpbmRzIHRoZSBmaWxlIHVuZGVyIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vdXNyL2xvY2FsL2luY2x1ZGU8L3NwYW4+PC9zYW1wPi4gIElmIHRoYXQKK2ZpbGUgY29udGFpbnMgPGNvZGU+I2luY2x1ZGVfbmV4dCZuYnNwOyZsdDtzaWduYWwuaCZndDs8IS0tIC9AdyAtLT48L2NvZGU+LCBpdCBzdGFydHMgc2VhcmNoaW5nCithZnRlciB0aGF0IGRpcmVjdG9yeSwgYW5kIGZpbmRzIHRoZSBmaWxlIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vdXNyL2luY2x1ZGU8L3NwYW4+PC9zYW1wPi4KKworICAgPHA+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZV9uZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGRvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gPGNvZGU+Jmx0OzwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4mZ3Q7PC9jb2RlPgorYW5kIDxjb2RlPiI8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+IjwvY29kZT4gaW5jbHVzaW9uLCBub3IgZG9lcyBpdCBjaGVjayB0aGF0IHRoZSBmaWxlIHlvdQorc3BlY2lmeSBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgY3VycmVudCBmaWxlLiAgSXQgc2ltcGx5IGxvb2tzIGZvciB0aGUKK2ZpbGUgbmFtZWQsIHN0YXJ0aW5nIHdpdGggdGhlIGRpcmVjdG9yeSBpbiB0aGUgc2VhcmNoIHBhdGggYWZ0ZXIgdGhlIG9uZQord2hlcmUgdGhlIGN1cnJlbnQgZmlsZSB3YXMgZm91bmQuCisKKyAgIDxwPlRoZSB1c2Ugb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZV9uZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhbiBsZWFkIHRvIGdyZWF0IGNvbmZ1c2lvbi4gIFdlCityZWNvbW1lbmQgaXQgYmUgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgbm8gb3RoZXIgYWx0ZXJuYXRpdmUuICBJbgorcGFydGljdWxhciwgaXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoZSBoZWFkZXJzIGJlbG9uZ2luZyB0byBhIHNwZWNpZmljCitwcm9ncmFtOyBpdCBzaG91bGQgYmUgdXNlZCBvbmx5IHRvIG1ha2UgZ2xvYmFsIGNvcnJlY3Rpb25zIGFsb25nIHRoZQorbGluZXMgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmZpeGluY2x1ZGVzPC9zcGFuPjwvc2FtcD4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvV3RyaWdyYXBocy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9XdHJpZ3JhcGhzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjYzZhZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvV3RyaWdyYXBocy5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1JbnZvY2F0aW9uLmh0bWwjV3RyaWdyYXBocyI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL2Rhc2hNRi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9kYXNoTUYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDM4YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC9kYXNoTUYuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9SW52b2NhdGlvbi5odG1sI2Rhc2hNRiI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL2Zkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvZmRvbGxhcnNfMDAyZGluXzAwMmRpZGVudGlmaWVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhM2RiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL2Zkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9SW52b2NhdGlvbi5odG1sI2Zkb2xsYXJzJTJkaW4lMmRpZGVudGlmaWVycyI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL2luZGV4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3NjZlMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9jcHAvaW5kZXguaHRtbApAQCAtMCwwICsxLDMwOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VGhlIEMgUHJlcHJvY2Vzc29yPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgQyBQcmVwcm9jZXNzb3IiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9IiNUb3AiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgIkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK1RoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDEgY2xhc3M9InNldHRpdGxlIj5UaGUgQyBQcmVwcm9jZXNzb3I8L2gxPgorPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGgyPlRhYmxlIG9mIENvbnRlbnRzPC9oMj4KKzx1bD4KKzxsaT48YSBuYW1lPSJ0b2NfVG9wIiBocmVmPSJpbmRleC5odG1sI1RvcCI+VGhlIEMgUHJlcHJvY2Vzc29yPC9hPgorPGxpPjxhIG5hbWU9InRvY19PdmVydmlldyIgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+MSBPdmVydmlldzwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJDaGFyYWN0ZXItc2V0cy5odG1sI0NoYXJhY3Rlci1zZXRzIj4xLjEgQ2hhcmFjdGVyIHNldHM8L2E+Cis8bGk+PGEgaHJlZj0iSW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjSW5pdGlhbC1wcm9jZXNzaW5nIj4xLjIgSW5pdGlhbCBwcm9jZXNzaW5nPC9hPgorPGxpPjxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI1Rva2VuaXphdGlvbiI+MS4zIFRva2VuaXphdGlvbjwvYT4KKzxsaT48YSBocmVmPSJUaGUtcHJlcHJvY2Vzc2luZy1sYW5ndWFnZS5odG1sI1RoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlIj4xLjQgVGhlIHByZXByb2Nlc3NpbmcgbGFuZ3VhZ2U8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0hlYWRlci1GaWxlcyIgaHJlZj0iSGVhZGVyLUZpbGVzLmh0bWwjSGVhZGVyLUZpbGVzIj4yIEhlYWRlciBGaWxlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJJbmNsdWRlLVN5bnRheC5odG1sI0luY2x1ZGUtU3ludGF4Ij4yLjEgSW5jbHVkZSBTeW50YXg8L2E+Cis8bGk+PGEgaHJlZj0iSW5jbHVkZS1PcGVyYXRpb24uaHRtbCNJbmNsdWRlLU9wZXJhdGlvbiI+Mi4yIEluY2x1ZGUgT3BlcmF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlNlYXJjaC1QYXRoLmh0bWwjU2VhcmNoLVBhdGgiPjIuMyBTZWFyY2ggUGF0aDwvYT4KKzxsaT48YSBocmVmPSJPbmNlXzAwMmRPbmx5LUhlYWRlcnMuaHRtbCNPbmNlXzAwMmRPbmx5LUhlYWRlcnMiPjIuNCBPbmNlLU9ubHkgSGVhZGVyczwvYT4KKzxsaT48YSBocmVmPSJBbHRlcm5hdGl2ZXMtdG8tV3JhcHBlci1fMDAyM2lmbmRlZi5odG1sI0FsdGVybmF0aXZlcy10by1XcmFwcGVyLV8wMDIzaWZuZGVmIj4yLjUgQWx0ZXJuYXRpdmVzIHRvIFdyYXBwZXIgI2lmbmRlZjwvYT4KKzxsaT48YSBocmVmPSJDb21wdXRlZC1JbmNsdWRlcy5odG1sI0NvbXB1dGVkLUluY2x1ZGVzIj4yLjYgQ29tcHV0ZWQgSW5jbHVkZXM8L2E+Cis8bGk+PGEgaHJlZj0iV3JhcHBlci1IZWFkZXJzLmh0bWwjV3JhcHBlci1IZWFkZXJzIj4yLjcgV3JhcHBlciBIZWFkZXJzPC9hPgorPGxpPjxhIGhyZWY9IlN5c3RlbS1IZWFkZXJzLmh0bWwjU3lzdGVtLUhlYWRlcnMiPjIuOCBTeXN0ZW0gSGVhZGVyczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfTWFjcm9zIiBocmVmPSJNYWNyb3MuaHRtbCNNYWNyb3MiPjMgTWFjcm9zPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik9iamVjdF8wMDJkbGlrZS1NYWNyb3MuaHRtbCNPYmplY3RfMDAyZGxpa2UtTWFjcm9zIj4zLjEgT2JqZWN0LWxpa2UgTWFjcm9zPC9hPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uXzAwMmRsaWtlLU1hY3Jvcy5odG1sI0Z1bmN0aW9uXzAwMmRsaWtlLU1hY3JvcyI+My4yIEZ1bmN0aW9uLWxpa2UgTWFjcm9zPC9hPgorPGxpPjxhIGhyZWY9Ik1hY3JvLUFyZ3VtZW50cy5odG1sI01hY3JvLUFyZ3VtZW50cyI+My4zIE1hY3JvIEFyZ3VtZW50czwvYT4KKzxsaT48YSBocmVmPSJTdHJpbmdpZmljYXRpb24uaHRtbCNTdHJpbmdpZmljYXRpb24iPjMuNCBTdHJpbmdpZmljYXRpb248L2E+Cis8bGk+PGEgaHJlZj0iQ29uY2F0ZW5hdGlvbi5odG1sI0NvbmNhdGVuYXRpb24iPjMuNSBDb25jYXRlbmF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlZhcmlhZGljLU1hY3Jvcy5odG1sI1ZhcmlhZGljLU1hY3JvcyI+My42IFZhcmlhZGljIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJQcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1ByZWRlZmluZWQtTWFjcm9zIj4zLjcgUHJlZGVmaW5lZCBNYWNyb3M8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmQtUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNTdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3JvcyI+My43LjEgU3RhbmRhcmQgUHJlZGVmaW5lZCBNYWNyb3M8L2E+Cis8bGk+PGEgaHJlZj0iQ29tbW9uLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjQ29tbW9uLVByZWRlZmluZWQtTWFjcm9zIj4zLjcuMiBDb21tb24gUHJlZGVmaW5lZCBNYWNyb3M8L2E+Cis8bGk+PGEgaHJlZj0iU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1N5c3RlbV8wMDJkc3BlY2lmaWMtUHJlZGVmaW5lZC1NYWNyb3MiPjMuNy4zIFN5c3RlbS1zcGVjaWZpYyBQcmVkZWZpbmVkIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMuaHRtbCNDXzAwMmJfMDAyYi1OYW1lZC1PcGVyYXRvcnMiPjMuNy40IEMrKyBOYW1lZCBPcGVyYXRvcnM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iVW5kZWZpbmluZy1hbmQtUmVkZWZpbmluZy1NYWNyb3MuaHRtbCNVbmRlZmluaW5nLWFuZC1SZWRlZmluaW5nLU1hY3JvcyI+My44IFVuZGVmaW5pbmcgYW5kIFJlZGVmaW5pbmcgTWFjcm9zPC9hPgorPGxpPjxhIGhyZWY9IkRpcmVjdGl2ZXMtV2l0aGluLU1hY3JvLUFyZ3VtZW50cy5odG1sI0RpcmVjdGl2ZXMtV2l0aGluLU1hY3JvLUFyZ3VtZW50cyI+My45IERpcmVjdGl2ZXMgV2l0aGluIE1hY3JvIEFyZ3VtZW50czwvYT4KKzxsaT48YSBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIj4zLjEwIE1hY3JvIFBpdGZhbGxzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik1pc25lc3RpbmcuaHRtbCNNaXNuZXN0aW5nIj4zLjEwLjEgTWlzbmVzdGluZzwvYT4KKzxsaT48YSBocmVmPSJPcGVyYXRvci1QcmVjZWRlbmNlLVByb2JsZW1zLmh0bWwjT3BlcmF0b3ItUHJlY2VkZW5jZS1Qcm9ibGVtcyI+My4xMC4yIE9wZXJhdG9yIFByZWNlZGVuY2UgUHJvYmxlbXM8L2E+Cis8bGk+PGEgaHJlZj0iU3dhbGxvd2luZy10aGUtU2VtaWNvbG9uLmh0bWwjU3dhbGxvd2luZy10aGUtU2VtaWNvbG9uIj4zLjEwLjMgU3dhbGxvd2luZyB0aGUgU2VtaWNvbG9uPC9hPgorPGxpPjxhIGhyZWY9IkR1cGxpY2F0aW9uLW9mLVNpZGUtRWZmZWN0cy5odG1sI0R1cGxpY2F0aW9uLW9mLVNpZGUtRWZmZWN0cyI+My4xMC40IER1cGxpY2F0aW9uIG9mIFNpZGUgRWZmZWN0czwvYT4KKzxsaT48YSBocmVmPSJTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbCNTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MiPjMuMTAuNSBTZWxmLVJlZmVyZW50aWFsIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJBcmd1bWVudC1QcmVzY2FuLmh0bWwjQXJndW1lbnQtUHJlc2NhbiI+My4xMC42IEFyZ3VtZW50IFByZXNjYW48L2E+Cis8bGk+PGEgaHJlZj0iTmV3bGluZXMtaW4tQXJndW1lbnRzLmh0bWwjTmV3bGluZXMtaW4tQXJndW1lbnRzIj4zLjEwLjcgTmV3bGluZXMgaW4gQXJndW1lbnRzPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19Db25kaXRpb25hbHMiIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyI+NCBDb25kaXRpb25hbHM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQ29uZGl0aW9uYWwtVXNlcy5odG1sI0NvbmRpdGlvbmFsLVVzZXMiPjQuMSBDb25kaXRpb25hbCBVc2VzPC9hPgorPGxpPjxhIGhyZWY9IkNvbmRpdGlvbmFsLVN5bnRheC5odG1sI0NvbmRpdGlvbmFsLVN5bnRheCI+NC4yIENvbmRpdGlvbmFsIFN5bnRheDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJJZmRlZi5odG1sI0lmZGVmIj40LjIuMSBJZmRlZjwvYT4KKzxsaT48YSBocmVmPSJJZi5odG1sI0lmIj40LjIuMiBJZjwvYT4KKzxsaT48YSBocmVmPSJEZWZpbmVkLmh0bWwjRGVmaW5lZCI+NC4yLjMgRGVmaW5lZDwvYT4KKzxsaT48YSBocmVmPSJFbHNlLmh0bWwjRWxzZSI+NC4yLjQgRWxzZTwvYT4KKzxsaT48YSBocmVmPSJFbGlmLmh0bWwjRWxpZiI+NC4yLjUgRWxpZjwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJEZWxldGVkLUNvZGUuaHRtbCNEZWxldGVkLUNvZGUiPjQuMyBEZWxldGVkIENvZGU8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0RpYWdub3N0aWNzIiBocmVmPSJEaWFnbm9zdGljcy5odG1sI0RpYWdub3N0aWNzIj41IERpYWdub3N0aWNzPC9hPgorPGxpPjxhIG5hbWU9InRvY19MaW5lLUNvbnRyb2wiIGhyZWY9IkxpbmUtQ29udHJvbC5odG1sI0xpbmUtQ29udHJvbCI+NiBMaW5lIENvbnRyb2w8L2E+Cis8bGk+PGEgbmFtZT0idG9jX1ByYWdtYXMiIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj43IFByYWdtYXM8L2E+Cis8bGk+PGEgbmFtZT0idG9jX090aGVyLURpcmVjdGl2ZXMiIGhyZWY9Ik90aGVyLURpcmVjdGl2ZXMuaHRtbCNPdGhlci1EaXJlY3RpdmVzIj44IE90aGVyIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgbmFtZT0idG9jX1ByZXByb2Nlc3Nvci1PdXRwdXQiIGhyZWY9IlByZXByb2Nlc3Nvci1PdXRwdXQuaHRtbCNQcmVwcm9jZXNzb3ItT3V0cHV0Ij45IFByZXByb2Nlc3NvciBPdXRwdXQ8L2E+Cis8bGk+PGEgbmFtZT0idG9jX1RyYWRpdGlvbmFsLU1vZGUiIGhyZWY9IlRyYWRpdGlvbmFsLU1vZGUuaHRtbCNUcmFkaXRpb25hbC1Nb2RlIj4xMCBUcmFkaXRpb25hbCBNb2RlPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlRyYWRpdGlvbmFsLWxleGljYWwtYW5hbHlzaXMuaHRtbCNUcmFkaXRpb25hbC1sZXhpY2FsLWFuYWx5c2lzIj4xMC4xIFRyYWRpdGlvbmFsIGxleGljYWwgYW5hbHlzaXM8L2E+Cis8bGk+PGEgaHJlZj0iVHJhZGl0aW9uYWwtbWFjcm9zLmh0bWwjVHJhZGl0aW9uYWwtbWFjcm9zIj4xMC4yIFRyYWRpdGlvbmFsIG1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJUcmFkaXRpb25hbC1taXNjZWxsYW55Lmh0bWwjVHJhZGl0aW9uYWwtbWlzY2VsbGFueSI+MTAuMyBUcmFkaXRpb25hbCBtaXNjZWxsYW55PC9hPgorPGxpPjxhIGhyZWY9IlRyYWRpdGlvbmFsLXdhcm5pbmdzLmh0bWwjVHJhZGl0aW9uYWwtd2FybmluZ3MiPjEwLjQgVHJhZGl0aW9uYWwgd2FybmluZ3M8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0ltcGxlbWVudGF0aW9uLURldGFpbHMiIGhyZWY9IkltcGxlbWVudGF0aW9uLURldGFpbHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1EZXRhaWxzIj4xMSBJbXBsZW1lbnRhdGlvbiBEZXRhaWxzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IiPjExLjEgSW1wbGVtZW50YXRpb24tZGVmaW5lZCBiZWhhdmlvcjwvYT4KKzxsaT48YSBocmVmPSJJbXBsZW1lbnRhdGlvbi1saW1pdHMuaHRtbCNJbXBsZW1lbnRhdGlvbi1saW1pdHMiPjExLjIgSW1wbGVtZW50YXRpb24gbGltaXRzPC9hPgorPGxpPjxhIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjT2Jzb2xldGUtRmVhdHVyZXMiPjExLjMgT2Jzb2xldGUgRmVhdHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT2Jzb2xldGUtRmVhdHVyZXMuaHRtbCNPYnNvbGV0ZS1GZWF0dXJlcyI+MTEuMy4xIEFzc2VydGlvbnM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iRGlmZmVyZW5jZXMtZnJvbS1wcmV2aW91cy12ZXJzaW9ucy5odG1sI0RpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMiPjExLjQgRGlmZmVyZW5jZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9uczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfSW52b2NhdGlvbiIgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPjEyIEludm9jYXRpb248L2E+Cis8bGk+PGEgbmFtZT0idG9jX0Vudmlyb25tZW50LVZhcmlhYmxlcyIgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj4xMyBFbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5BRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19JbmRleC1vZi1EaXJlY3RpdmVzIiBocmVmPSJJbmRleC1vZi1EaXJlY3RpdmVzLmh0bWwjSW5kZXgtb2YtRGlyZWN0aXZlcyI+SW5kZXggb2YgRGlyZWN0aXZlczwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfT3B0aW9uLUluZGV4IiBocmVmPSJPcHRpb24tSW5kZXguaHRtbCNPcHRpb24tSW5kZXgiPk9wdGlvbiBJbmRleDwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfQ29uY2VwdC1JbmRleCIgaHJlZj0iQ29uY2VwdC1JbmRleC5odG1sI0NvbmNlcHQtSW5kZXgiPkNvbmNlcHQgSW5kZXg8L2E+Cis8L2xpPjwvdWw+Cis8L2Rpdj4KKworCisKKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVG9wIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCNkaXIiPihkaXIpPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+VGhlIEMgUHJlcHJvY2Vzc29yPC9oMj4KKworPHA+VGhlIEMgcHJlcHJvY2Vzc29yIGltcGxlbWVudHMgdGhlIG1hY3JvIGxhbmd1YWdlIHVzZWQgdG8gdHJhbnNmb3JtIEMsCitDKyssIGFuZCBPYmplY3RpdmUtQyBwcm9ncmFtcyBiZWZvcmUgdGhleSBhcmUgY29tcGlsZWQuICBJdCBjYW4gYWxzbyBiZQordXNlZnVsIG9uIGl0cyBvd24uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkhlYWRlci1GaWxlcy5odG1sI0hlYWRlci1GaWxlcyI+SGVhZGVyIEZpbGVzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iTWFjcm9zLmh0bWwjTWFjcm9zIj5NYWNyb3M8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiPkNvbmRpdGlvbmFsczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkRpYWdub3N0aWNzLmh0bWwjRGlhZ25vc3RpY3MiPkRpYWdub3N0aWNzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iTGluZS1Db250cm9sLmh0bWwjTGluZS1Db250cm9sIj5MaW5lIENvbnRyb2w8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Ik90aGVyLURpcmVjdGl2ZXMuaHRtbCNPdGhlci1EaXJlY3RpdmVzIj5PdGhlciBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iUHJlcHJvY2Vzc29yLU91dHB1dC5odG1sI1ByZXByb2Nlc3Nvci1PdXRwdXQiPlByZXByb2Nlc3NvciBPdXRwdXQ8L2E+Cis8bGk+PGEgaHJlZj0iVHJhZGl0aW9uYWwtTW9kZS5odG1sI1RyYWRpdGlvbmFsLU1vZGUiPlRyYWRpdGlvbmFsIE1vZGU8L2E+Cis8bGk+PGEgaHJlZj0iSW1wbGVtZW50YXRpb24tRGV0YWlscy5odG1sI0ltcGxlbWVudGF0aW9uLURldGFpbHMiPkltcGxlbWVudGF0aW9uIERldGFpbHM8L2E+Cis8bGk+PGEgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+Cis8bGk+PGEgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+Cis8bGk+PGEgaHJlZj0iSW5kZXgtb2YtRGlyZWN0aXZlcy5odG1sI0luZGV4LW9mLURpcmVjdGl2ZXMiPkluZGV4IG9mIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4Ij5PcHRpb24gSW5kZXg8L2E+Cis8bGk+PGEgaHJlZj0iQ29uY2VwdC1JbmRleC5odG1sI0NvbmNlcHQtSW5kZXgiPkNvbmNlcHQgSW5kZXg8L2E+CisKKzwvbGk+PC91bD4KKzxwPi0tLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tLQorCis8cD5PdmVydmlldworCis8L3A+Cis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGhyZWY9IkNoYXJhY3Rlci1zZXRzLmh0bWwjQ2hhcmFjdGVyLXNldHMiPkNoYXJhY3RlciBzZXRzPC9hPgorPGxpPjxhIGhyZWY9IkluaXRpYWwtcHJvY2Vzc2luZy5odG1sI0luaXRpYWwtcHJvY2Vzc2luZyI+SW5pdGlhbCBwcm9jZXNzaW5nPC9hPgorPGxpPjxhIGhyZWY9IlRva2VuaXphdGlvbi5odG1sI1Rva2VuaXphdGlvbiI+VG9rZW5pemF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlRoZS1wcmVwcm9jZXNzaW5nLWxhbmd1YWdlLmh0bWwjVGhlLXByZXByb2Nlc3NpbmctbGFuZ3VhZ2UiPlRoZSBwcmVwcm9jZXNzaW5nIGxhbmd1YWdlPC9hPgorCis8L2xpPjwvdWw+Cis8cD5IZWFkZXIgRmlsZXMKKworPC9wPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBocmVmPSJJbmNsdWRlLVN5bnRheC5odG1sI0luY2x1ZGUtU3ludGF4Ij5JbmNsdWRlIFN5bnRheDwvYT4KKzxsaT48YSBocmVmPSJJbmNsdWRlLU9wZXJhdGlvbi5odG1sI0luY2x1ZGUtT3BlcmF0aW9uIj5JbmNsdWRlIE9wZXJhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJTZWFyY2gtUGF0aC5odG1sI1NlYXJjaC1QYXRoIj5TZWFyY2ggUGF0aDwvYT4KKzxsaT48YSBocmVmPSJPbmNlXzAwMmRPbmx5LUhlYWRlcnMuaHRtbCNPbmNlXzAwMmRPbmx5LUhlYWRlcnMiPk9uY2UtT25seSBIZWFkZXJzPC9hPgorPGxpPjxhIGhyZWY9IkFsdGVybmF0aXZlcy10by1XcmFwcGVyLV8wMDIzaWZuZGVmLmh0bWwjQWx0ZXJuYXRpdmVzLXRvLVdyYXBwZXItXzAwMjNpZm5kZWYiPkFsdGVybmF0aXZlcyB0byBXcmFwcGVyICNpZm5kZWY8L2E+Cis8bGk+PGEgaHJlZj0iQ29tcHV0ZWQtSW5jbHVkZXMuaHRtbCNDb21wdXRlZC1JbmNsdWRlcyI+Q29tcHV0ZWQgSW5jbHVkZXM8L2E+Cis8bGk+PGEgaHJlZj0iV3JhcHBlci1IZWFkZXJzLmh0bWwjV3JhcHBlci1IZWFkZXJzIj5XcmFwcGVyIEhlYWRlcnM8L2E+Cis8bGk+PGEgaHJlZj0iU3lzdGVtLUhlYWRlcnMuaHRtbCNTeXN0ZW0tSGVhZGVycyI+U3lzdGVtIEhlYWRlcnM8L2E+CisKKzwvbGk+PC91bD4KKzxwPk1hY3JvcworCis8L3A+Cis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGhyZWY9Ik9iamVjdF8wMDJkbGlrZS1NYWNyb3MuaHRtbCNPYmplY3RfMDAyZGxpa2UtTWFjcm9zIj5PYmplY3QtbGlrZSBNYWNyb3M8L2E+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb25fMDAyZGxpa2UtTWFjcm9zLmh0bWwjRnVuY3Rpb25fMDAyZGxpa2UtTWFjcm9zIj5GdW5jdGlvbi1saWtlIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJNYWNyby1Bcmd1bWVudHMuaHRtbCNNYWNyby1Bcmd1bWVudHMiPk1hY3JvIEFyZ3VtZW50czwvYT4KKzxsaT48YSBocmVmPSJTdHJpbmdpZmljYXRpb24uaHRtbCNTdHJpbmdpZmljYXRpb24iPlN0cmluZ2lmaWNhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJDb25jYXRlbmF0aW9uLmh0bWwjQ29uY2F0ZW5hdGlvbiI+Q29uY2F0ZW5hdGlvbjwvYT4KKzxsaT48YSBocmVmPSJWYXJpYWRpYy1NYWNyb3MuaHRtbCNWYXJpYWRpYy1NYWNyb3MiPlZhcmlhZGljIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJQcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1ByZWRlZmluZWQtTWFjcm9zIj5QcmVkZWZpbmVkIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJVbmRlZmluaW5nLWFuZC1SZWRlZmluaW5nLU1hY3Jvcy5odG1sI1VuZGVmaW5pbmctYW5kLVJlZGVmaW5pbmctTWFjcm9zIj5VbmRlZmluaW5nIGFuZCBSZWRlZmluaW5nIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJEaXJlY3RpdmVzLVdpdGhpbi1NYWNyby1Bcmd1bWVudHMuaHRtbCNEaXJlY3RpdmVzLVdpdGhpbi1NYWNyby1Bcmd1bWVudHMiPkRpcmVjdGl2ZXMgV2l0aGluIE1hY3JvIEFyZ3VtZW50czwvYT4KKzxsaT48YSBocmVmPSJNYWNyby1QaXRmYWxscy5odG1sI01hY3JvLVBpdGZhbGxzIj5NYWNybyBQaXRmYWxsczwvYT4KKworPC9saT48L3VsPgorPHA+UHJlZGVmaW5lZCBNYWNyb3MKKworPC9wPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBocmVmPSJTdGFuZGFyZC1QcmVkZWZpbmVkLU1hY3Jvcy5odG1sI1N0YW5kYXJkLVByZWRlZmluZWQtTWFjcm9zIj5TdGFuZGFyZCBQcmVkZWZpbmVkIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJDb21tb24tUHJlZGVmaW5lZC1NYWNyb3MuaHRtbCNDb21tb24tUHJlZGVmaW5lZC1NYWNyb3MiPkNvbW1vbiBQcmVkZWZpbmVkIE1hY3JvczwvYT4KKzxsaT48YSBocmVmPSJTeXN0ZW1fMDAyZHNwZWNpZmljLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjU3lzdGVtXzAwMmRzcGVjaWZpYy1QcmVkZWZpbmVkLU1hY3JvcyI+U3lzdGVtLXNwZWNpZmljIFByZWRlZmluZWQgTWFjcm9zPC9hPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycy5odG1sI0NfMDAyYl8wMDJiLU5hbWVkLU9wZXJhdG9ycyI+QysrIE5hbWVkIE9wZXJhdG9yczwvYT4KKworPC9saT48L3VsPgorPHA+TWFjcm8gUGl0ZmFsbHMKKworPC9wPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBocmVmPSJNaXNuZXN0aW5nLmh0bWwjTWlzbmVzdGluZyI+TWlzbmVzdGluZzwvYT4KKzxsaT48YSBocmVmPSJPcGVyYXRvci1QcmVjZWRlbmNlLVByb2JsZW1zLmh0bWwjT3BlcmF0b3ItUHJlY2VkZW5jZS1Qcm9ibGVtcyI+T3BlcmF0b3IgUHJlY2VkZW5jZSBQcm9ibGVtczwvYT4KKzxsaT48YSBocmVmPSJTd2FsbG93aW5nLXRoZS1TZW1pY29sb24uaHRtbCNTd2FsbG93aW5nLXRoZS1TZW1pY29sb24iPlN3YWxsb3dpbmcgdGhlIFNlbWljb2xvbjwvYT4KKzxsaT48YSBocmVmPSJEdXBsaWNhdGlvbi1vZi1TaWRlLUVmZmVjdHMuaHRtbCNEdXBsaWNhdGlvbi1vZi1TaWRlLUVmZmVjdHMiPkR1cGxpY2F0aW9uIG9mIFNpZGUgRWZmZWN0czwvYT4KKzxsaT48YSBocmVmPSJTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MuaHRtbCNTZWxmXzAwMmRSZWZlcmVudGlhbC1NYWNyb3MiPlNlbGYtUmVmZXJlbnRpYWwgTWFjcm9zPC9hPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50LVByZXNjYW4uaHRtbCNBcmd1bWVudC1QcmVzY2FuIj5Bcmd1bWVudCBQcmVzY2FuPC9hPgorPGxpPjxhIGhyZWY9Ik5ld2xpbmVzLWluLUFyZ3VtZW50cy5odG1sI05ld2xpbmVzLWluLUFyZ3VtZW50cyI+TmV3bGluZXMgaW4gQXJndW1lbnRzPC9hPgorCis8L2xpPjwvdWw+Cis8cD5Db25kaXRpb25hbHMKKworPC9wPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBocmVmPSJDb25kaXRpb25hbC1Vc2VzLmh0bWwjQ29uZGl0aW9uYWwtVXNlcyI+Q29uZGl0aW9uYWwgVXNlczwvYT4KKzxsaT48YSBocmVmPSJDb25kaXRpb25hbC1TeW50YXguaHRtbCNDb25kaXRpb25hbC1TeW50YXgiPkNvbmRpdGlvbmFsIFN5bnRheDwvYT4KKzxsaT48YSBocmVmPSJEZWxldGVkLUNvZGUuaHRtbCNEZWxldGVkLUNvZGUiPkRlbGV0ZWQgQ29kZTwvYT4KKworPC9saT48L3VsPgorPHA+Q29uZGl0aW9uYWwgU3ludGF4CisKKzwvcD4KKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgaHJlZj0iSWZkZWYuaHRtbCNJZmRlZiI+SWZkZWY8L2E+Cis8bGk+PGEgaHJlZj0iSWYuaHRtbCNJZiI+SWY8L2E+Cis8bGk+PGEgaHJlZj0iRGVmaW5lZC5odG1sI0RlZmluZWQiPkRlZmluZWQ8L2E+Cis8bGk+PGEgaHJlZj0iRWxzZS5odG1sI0Vsc2UiPkVsc2U8L2E+Cis8bGk+PGEgaHJlZj0iRWxpZi5odG1sI0VsaWYiPkVsaWY8L2E+CisKKzwvbGk+PC91bD4KKzxwPkltcGxlbWVudGF0aW9uIERldGFpbHMKKworPC9wPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBocmVmPSJJbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci5odG1sI0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yIj5JbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9hPgorPGxpPjxhIGhyZWY9IkltcGxlbWVudGF0aW9uLWxpbWl0cy5odG1sI0ltcGxlbWVudGF0aW9uLWxpbWl0cyI+SW1wbGVtZW50YXRpb24gbGltaXRzPC9hPgorPGxpPjxhIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjT2Jzb2xldGUtRmVhdHVyZXMiPk9ic29sZXRlIEZlYXR1cmVzPC9hPgorPGxpPjxhIGhyZWY9IkRpZmZlcmVuY2VzLWZyb20tcHJldmlvdXMtdmVyc2lvbnMuaHRtbCNEaWZmZXJlbmNlcy1mcm9tLXByZXZpb3VzLXZlcnNpb25zIj5EaWZmZXJlbmNlcyBmcm9tIHByZXZpb3VzIHZlcnNpb25zPC9hPgorCis8L2xpPjwvdWw+Cis8cD5PYnNvbGV0ZSBGZWF0dXJlcworCis8L3A+Cis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGhyZWY9Ik9ic29sZXRlLUZlYXR1cmVzLmh0bWwjT2Jzb2xldGUtRmVhdHVyZXMiPk9ic29sZXRlIEZlYXR1cmVzPC9hPgorCisgICA8L3VsPgorCis8IS0tIG1hbiBiZWdpbiBDT1BZUklHSFQgLS0+CisgICA8cD5Db3B5cmlnaHQgJmNvcHk7IDE5ODctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgPHA+UGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQSBjb3B5IG9mCit0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKKzwhLS0gbWFuIGVuZCAtLT4KK3NlY3Rpb24gZW50aXRsZWQgJmxkcXVvO0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSZyZHF1bzsuCisKKzwhLS0gbWFuIGJlZ2luIENPUFlSSUdIVCAtLT4KKyAgIDxwPlRoaXMgbWFudWFsIGNvbnRhaW5zIG5vIEludmFyaWFudCBTZWN0aW9ucy4gIFRoZSBGcm9udC1Db3ZlciBUZXh0cyBhcmUKKyhhKSAoc2VlIGJlbG93KSwgYW5kIHRoZSBCYWNrLUNvdmVyIFRleHRzIGFyZSAoYikgKHNlZSBiZWxvdykuCisKKyAgIDxwPihhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgPHA+QSBHTlUgTWFudWFsCisKKyAgIDxwPihiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICA8cD5Zb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuIAorPCEtLSBtYW4gZW5kIC0tPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvY3BwL3RyaWdyYXBocy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC90cmlncmFwaHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk0ZDYyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2NwcC90cmlncmFwaHMuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9SW5pdGlhbC1wcm9jZXNzaW5nLmh0bWwjdHJpZ3JhcGhzIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQUFyY2g2NC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FBcmNoNjQtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWY5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FBcmNoNjQtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTQwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BQXJjaDY0IE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiIHRpdGxlPSJBZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFBcmNoNjQtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucyI+QWRhcHRldmEgRXBpcGhhbnkgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4xIEFBcmNoNjQgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFBcmNoNjQtT3B0aW9ucy0xMDc5Ij48L2E+CitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBBQXJjaDY0IGltcGxlbWVudGF0aW9uczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1iaWctZW5kaWFuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYmlnXzAwMmRlbmRpYW4tMTA4MCI+PC9hPkdlbmVyYXRlIGJpZy1lbmRpYW4gY29kZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiBHQ0MgaXMgY29uZmlndXJlZCBmb3IgYW4KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWFyY2g2NF9iZS0qLSo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGFyZ2V0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1nZW5lcmFsLXJlZ3Mtb25seTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWdlbmVyYWxfMDAyZHJlZ3NfMDAyZG9ubHktMTA4MSI+PC9hPkdlbmVyYXRlIGNvZGUgd2hpY2ggdXNlcyBvbmx5IHRoZSBnZW5lcmFsIHJlZ2lzdGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbGl0dGxlLWVuZGlhbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxpdHRsZV8wMDJkZW5kaWFuLTEwODIiPjwvYT5HZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIGNvZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gR0NDIGlzIGNvbmZpZ3VyZWQgZm9yIGFuCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFhcmNoNjQtKi0qPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJ1dCBub3QgYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hYXJjaDY0X2JlLSotKjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0YXJnZXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNtb2RlbD10aW55PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY21vZGVsXzAwM2R0aW55LTEwODMiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgdGlueSBjb2RlIG1vZGVsLiAgVGhlIHByb2dyYW0gYW5kIGl0cyBzdGF0aWNhbGx5IGRlZmluZWQKK3N5bWJvbHMgbXVzdCBiZSB3aXRoaW4gMUdCIG9mIGVhY2ggb3RoZXIuICBQb2ludGVycyBhcmUgNjQgYml0cy4gIFByb2dyYW1zIGNhbgorYmUgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSBsaW5rZWQuICBUaGlzIG1vZGVsIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBhbmQKK21vc3RseSB0cmVhdGVkIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c21hbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNtb2RlbD1zbWFsbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNtb2RlbF8wMDNkc21hbGwtMTA4NCI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBzbWFsbCBjb2RlIG1vZGVsLiAgVGhlIHByb2dyYW0gYW5kIGl0cyBzdGF0aWNhbGx5IGRlZmluZWQKK3N5bWJvbHMgbXVzdCBiZSB3aXRoaW4gNEdCIG9mIGVhY2ggb3RoZXIuICBQb2ludGVycyBhcmUgNjQgYml0cy4gIFByb2dyYW1zIGNhbgorYmUgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSBsaW5rZWQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvZGUgbW9kZWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNtb2RlbD1sYXJnZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNtb2RlbF8wMDNkbGFyZ2UtMTA4NSI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBsYXJnZSBjb2RlIG1vZGVsLiAgVGhpcyBtYWtlcyBubyBhc3N1bXB0aW9ucyBhYm91dAorYWRkcmVzc2VzIGFuZCBzaXplcyBvZiBzZWN0aW9ucy4gIFBvaW50ZXJzIGFyZSA2NCBiaXRzLiAgUHJvZ3JhbXMgY2FuIGJlCitzdGF0aWNhbGx5IGxpbmtlZCBvbmx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdHJpY3QtYWxpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zdHJpY3RfMDAyZGFsaWduLTEwODYiPjwvYT5EbyBub3QgYXNzdW1lIHRoYXQgdW5hbGlnbmVkIG1lbW9yeSByZWZlcmVuY2VzIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgc3lzdGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlcjwvY29kZT48ZHQ+PGNvZGU+LW1uby1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW9taXRfMDAyZGxlYWZfMDAyZGZyYW1lXzAwMmRwb2ludGVyLTEwODciPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG9taXRfMDAyZGxlYWZfMDAyZGZyYW1lXzAwMmRwb2ludGVyLTEwODgiPjwvYT5PbWl0IG9yIGtlZXAgdGhlIGZyYW1lIHBvaW50ZXIgaW4gbGVhZiBmdW5jdGlvbnMuICBUaGUgZm9ybWVyIGJlaGF2aW91ciBpcyB0aGUKK2RlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRscy1kaWFsZWN0PWRlc2M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW10bHNfMDAyZGRpYWxlY3RfMDAzZGRlc2MtMTA4OSI+PC9hPlVzZSBUTFMgZGVzY3JpcHRvcnMgYXMgdGhlIHRocmVhZC1sb2NhbCBzdG9yYWdlIG1lY2hhbmlzbSBmb3IgZHluYW1pYyBhY2Nlc3Nlcworb2YgVExTIHZhcmlhYmxlcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRscy1kaWFsZWN0PXRyYWRpdGlvbmFsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdGxzXzAwMmRkaWFsZWN0XzAwM2R0cmFkaXRpb25hbC0xMDkwIj48L2E+VXNlIHRyYWRpdGlvbmFsIFRMUyBhcyB0aGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgbWVjaGFuaXNtIGZvciBkeW5hbWljIGFjY2Vzc2VzCitvZiBUTFMgdmFyaWFibGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hcmNoPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFyY2gtMTA5MSI+PC9hPlNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIG9wdGlvbmFsbHkgc3VmZml4ZWQgYnkgb25lIG9yCittb3JlIGZlYXR1cmUgbW9kaWZpZXJzLiAgVGhpcyBvcHRpb24gaGFzIHRoZSBmb3JtCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9PC9zcGFuPjx2YXI+YXJjaDwvdmFyPjxzcGFuIGNsYXNzPSJvcHRpb24iPnsrW25vXTwvc3Bhbj48dmFyPmZlYXR1cmU8L3Zhcj48c3BhbiBjbGFzcz0ib3B0aW9uIj59Kjwvc3Bhbj48L3NhbXA+LCB3aGVyZSB0aGUKK29ubHkgdmFsdWUgZm9yIDx2YXI+YXJjaDwvdmFyPiBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXY4LWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUgcG9zc2libGUgdmFsdWVzIGZvcgorPHZhcj5mZWF0dXJlPC92YXI+IGFyZSBkb2N1bWVudGVkIGluIHRoZSBzdWItc2VjdGlvbiBiZWxvdy4KKworICAgICA8cD5XaGVyZSBjb25mbGljdGluZyBmZWF0dXJlIG1vZGlmaWVycyBhcmUgc3BlY2lmaWVkLCB0aGUgcmlnaHQtbW9zdCBmZWF0dXJlIGlzCit1c2VkLgorCisgICAgIDxwPkdDQyB1c2VzIHRoaXMgbmFtZSB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIGluc3RydWN0aW9ucyBpdCBjYW4gZW1pdCB3aGVuCitnZW5lcmF0aW5nIGFzc2VtYmx5IGNvZGUuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG9yCitpbnN0ZWFkIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT08L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1jcHUtMTA5MiI+PC9hPlNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBwcm9jZXNzb3IsIG9wdGlvbmFsbHkgc3VmZml4ZWQgYnkgb25lIG9yIG1vcmUKK2ZlYXR1cmUgbW9kaWZpZXJzLiAgVGhpcyBvcHRpb24gaGFzIHRoZSBmb3JtCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT08L3NwYW4+PHZhcj5jcHU8L3Zhcj48c3BhbiBjbGFzcz0ib3B0aW9uIj57K1tub108L3NwYW4+PHZhcj5mZWF0dXJlPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+fSo8L3NwYW4+PC9zYW1wPiwgd2hlcmUgdGhlCitwb3NzaWJsZSB2YWx1ZXMgZm9yIDx2YXI+Y3B1PC92YXI+IGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdlbmVyaWM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGFyZ2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUKK3Bvc3NpYmxlIHZhbHVlcyBmb3IgPHZhcj5mZWF0dXJlPC92YXI+IGFyZSBkb2N1bWVudGVkIGluIHRoZSBzdWItc2VjdGlvbgorYmVsb3cuCisKKyAgICAgPHA+V2hlcmUgY29uZmxpY3RpbmcgZmVhdHVyZSBtb2RpZmllcnMgYXJlIHNwZWNpZmllZCwgdGhlIHJpZ2h0LW1vc3QgZmVhdHVyZSBpcwordXNlZC4KKworICAgICA8cD5HQ0MgdXNlcyB0aGlzIG5hbWUgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgaXQgY2FuIGVtaXQgd2hlbgorZ2VuZXJhdGluZyBhc3NlbWJseSBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10dW5lPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXR1bmUtMTA5MyI+PC9hPlNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHByb2Nlc3NvciB0byB0dW5lIHRoZSBwZXJmb3JtYW5jZSBmb3IuICBUaGUgY29kZSB3aWxsCitiZSB0dW5lZCBhcyBpZiB0aGUgdGFyZ2V0IHByb2Nlc3NvciB3ZXJlIG9mIHRoZSB0eXBlIHNwZWNpZmllZCBpbiB0aGlzIG9wdGlvbiwKK2J1dCBzdGlsbCB1c2luZyBpbnN0cnVjdGlvbnMgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgcHJvY2Vzc29yIHNwZWNpZmllZAorYnkgYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT08L3NwYW4+PC9zYW1wPiBvcHRpb24uICBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc3VmZml4ZWQgYnkgZmVhdHVyZQorbW9kaWZpZXJzLgorCisgPC9kbD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjE3LjEuMSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiBmZWF0dXJlIG1vZGlmaWVyczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZG1hcmNoXzAwN2QtZmVhdHVyZS1tb2RpZmllcnMtMTA5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZG1jcHVfMDA3ZC1mZWF0dXJlLW1vZGlmaWVycy0xMDk1Ij48L2E+RmVhdHVyZSBtb2RpZmllcnMgdXNlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdTwvc3Bhbj48L3NhbXA+IGNhbiBiZSBvbmUKK3RoZSBmb2xsb3dpbmc6CisKKyAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3JjPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBDUkMgZXh0ZW5zaW9uLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jcnlwdG88L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlIENyeXB0byBleHRlbnNpb24uICBUaGlzIGltcGxpZXMgQWR2YW5jZWQgU0lNRCBpcyBlbmFibGVkLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FbmFibGUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zaW1kPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBBZHZhbmNlZCBTSU1EIGluc3RydWN0aW9ucy4gIFRoaXMgaW1wbGllcyBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMKK2FyZSBlbmFibGVkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgYWxsIGN1cnJlbnQgcG9zc2libGUgdmFsdWVzIGZvciBvcHRpb25zCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9PC9zcGFuPjwvc2FtcD4uIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQVJNLU5FT04tSW50cmluc2ljcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjYmE1MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQVJNLU5FT04tSW50cmluc2ljcy5odG1sCkBAIC0wLDAgKzEsOTM4NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVJNIE5FT04gSW50cmluc2ljcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBUk0taVdNTVh0LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNBUk0taVdNTVh0LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJBUk0gaVdNTVh0IEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFWUi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJBVlIgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTS1ORU9OLUludHJpbnNpY3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNBVlItQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+QVZSIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFSTS1pV01NWHQtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0FSTS1pV01NWHQtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+QVJNIGlXTU1YdCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPlRhcmdldCBCdWlsdGluczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTYuMyBBUk0gTkVPTiBJbnRyaW5zaWNzPC9oND4KKworPHA+VGhlc2UgYnVpbHQtaW4gaW50cmluc2ljcyBmb3IgdGhlIEFSTSBBZHZhbmNlZCBTSU1EIGV4dGVuc2lvbiBhcmUgYXZhaWxhYmxlCit3aGVuIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZwdT1uZW9uPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGlzIHVzZWQ6CisKKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdDQyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgZ2NjLnRleGkuIC0tPgorPCEtLSBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgZ2NjL2NvbmZpZy9hcm0vbmVvbi1kb2NnZW4ubWwgLS0+Cis8IS0tIFBsZWFzZSBkbyBub3QgZWRpdCBtYW51YWxseS4gLS0+Cis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4xIEFkZGl0aW9uPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2YWRkX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZhZGRfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGQuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2YWRkX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkLmk4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2YWRkX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZC5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZhZGRfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2YWRkX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZC5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2YWRkX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGQuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdmFkZF91NjQgKHVpbnQ2NHgxX3QsIHVpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdmFkZF9zNjQgKGludDY0eDFfdCwgaW50NjR4MV90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2YWRkcV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZC5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2YWRkcV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZC5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2YWRkcV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkLmk4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2YWRkcV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGQuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2YWRkcV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGQuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2YWRkcV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZC5pOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZhZGRxX3U2NCAodWludDY0eDJfdCwgdWludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkLmk2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmFkZHFfczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkLmk2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2YWRkcV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZhZGRsX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkbC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2YWRkbF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZGwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmFkZGxfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGRsLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2YWRkbF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGRsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmFkZGxfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZhZGRsX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZGwuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2YWRkd191MzIgKHVpbnQ2NHgyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZHcudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmFkZHdfdTE2ICh1aW50MzJ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGR3LnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZhZGR3X3U4ICh1aW50MTZ4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZHcudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZhZGR3X3MzMiAoaW50NjR4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZHcuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2YWRkd19zMTYgKGludDMyeDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGR3LnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmFkZHdfczggKGludDE2eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZHcuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2aGFkZF91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmhhZGQudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmhhZGRfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoYWRkLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmhhZGRfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoYWRkLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2aGFkZF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoYWRkLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmhhZGRfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52aGFkZC5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmhhZGRfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52aGFkZC5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZoYWRkcV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmhhZGQudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmhhZGRxX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52aGFkZC51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2aGFkZHFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmhhZGQudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZoYWRkcV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoYWRkLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmhhZGRxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmhhZGQuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2aGFkZHFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoYWRkLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnJoYWRkX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmhhZGQudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnJoYWRkX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmhhZGQudTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cmhhZGRfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyaGFkZC51OCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJoYWRkX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJoYWRkLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJoYWRkX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJoYWRkLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cmhhZGRfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmhhZGQuczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2cmhhZGRxX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmhhZGQudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnJoYWRkcV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJoYWRkLnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZyaGFkZHFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJoYWRkLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cmhhZGRxX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJoYWRkLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnJoYWRkcV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyaGFkZC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyaGFkZHFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyaGFkZC5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZxYWRkX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWFkZC51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cWFkZF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFhZGQudTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cWFkZF91OCAodWludDh4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFhZGQudTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZxYWRkX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFhZGQuczMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cWFkZF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWRkLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cWFkZF9zOCAoaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWRkLnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdnFhZGRfdTY0ICh1aW50NjR4MV90LCB1aW50NjR4MV90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWRkLnU2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnFhZGRfczY0IChpbnQ2NHgxX3QsIGludDY0eDFfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWFkZC5zNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2cWFkZHFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWRkLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZxYWRkcV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFhZGQudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnFhZGRxX3U4ICh1aW50OHgxNl90LCB1aW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWRkLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cWFkZHFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWFkZC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZxYWRkcV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWRkLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdnFhZGRxX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWFkZC5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZxYWRkcV91NjQgKHVpbnQ2NHgyX3QsIHVpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFhZGQudTY0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cWFkZHFfczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWFkZC5zNjQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2YWRkaG5fdTY0ICh1aW50NjR4Ml90LCB1aW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGRobi5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2YWRkaG5fdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhZGRobi5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZhZGRobl91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZGhuLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmFkZGhuX3M2NCAoaW50NjR4Ml90LCBpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZGhuLmk2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmFkZGhuX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFkZGhuLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2YWRkaG5fczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWRkaG4uaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnJhZGRobl91NjQgKHVpbnQ2NHgyX3QsIHVpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJhZGRobi5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cmFkZGhuX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmFkZGhuLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnJhZGRobl91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJhZGRobi5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZyYWRkaG5fczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmFkZGhuLmk2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJhZGRobl9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyYWRkaG4uaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZyYWRkaG5fczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmFkZGhuLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4yIE11bHRpcGxpY2F0aW9uPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2bXVsX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZtdWxfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2bXVsX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmk4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2bXVsX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZtdWxfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2bXVsX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2bXVsX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2bXVsX3A4IChwb2x5OHg4X3QsIHBvbHk4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLnA4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3Qgdm11bHFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3Qgdm11bHFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3Qgdm11bHFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5pOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm11bHFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmkzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3Qgdm11bHFfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3Qgdm11bHFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3Qgdm11bHFfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2bXVscV9wOCAocG9seTh4MTZfdCwgcG9seTh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLnA4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2cWRtdWxoX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFkbXVsaC5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZxZG11bGhfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxoLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnFkbXVsaHFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxoLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnFkbXVsaHFfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxoLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnFyZG11bGhfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJkbXVsaC5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZxcmRtdWxoX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyZG11bGguczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cXJkbXVsaHFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJkbXVsaC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZxcmRtdWxocV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcmRtdWxoLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZtdWxsX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsbC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bXVsbF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bGwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3Qgdm11bGxfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWxsLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2bXVsbF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWxsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm11bGxfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZtdWxsX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bGwuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDhfdCB2bXVsbF9wOCAocG9seTh4OF90LCBwb2x5OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bGwucDggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZxZG11bGxfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnFkbXVsbF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG11bGwuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjMgTXVsdGlwbHktYWNjdW11bGF0ZTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3Qgdm1sYV91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2bWxhX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3Qgdm1sYV91OCAodWludDh4OF90LCB1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhLmk4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2bWxhX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3Qgdm1sYV9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3Qgdm1sYV9zOCAoaW50OHg4X3QsIGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhLmk4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZtbGFfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3Qgdm1sYXFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3Qgdm1sYXFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3Qgdm1sYXFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm1sYXFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2bWxhcV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZtbGFxX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3Qgdm1sYXFfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3Qgdm1sYWxfdTMyICh1aW50NjR4Ml90LCB1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGFsLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtbGFsX3UxNiAodWludDMyeDRfdCwgdWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhbC51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2bWxhbF91OCAodWludDE2eDhfdCwgdWludDh4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYWwudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZtbGFsX3MzMiAoaW50NjR4Ml90LCBpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhbC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZtbGFsX3MxNiAoaW50MzJ4NF90LCBpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZtbGFsX3M4IChpbnQxNng4X3QsIGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhbC5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnFkbWxhbF9zMzIgKGludDY0eDJfdCwgaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFkbWxhbC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxZG1sYWxfczE2IChpbnQzMng0X3QsIGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG1sYWwuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjQgTXVsdGlwbHktc3VidHJhY3Q8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZtbHNfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3Qgdm1sc191MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZtbHNfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3Qgdm1sc19zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZtbHNfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZtbHNfczggKGludDh4OF90LCBpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2bWxzX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtbHNxX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZtbHNxX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCwgdWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZtbHNxX3U4ICh1aW50OHgxNl90LCB1aW50OHgxNl90LCB1aW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZtbHNxX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3Qgdm1sc3FfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2bWxzcV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QsIGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmk4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZtbHNxX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZtbHNsX3UzMiAodWludDY0eDJfdCwgdWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzbC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bWxzbF91MTYgKHVpbnQzMng0X3QsIHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sc2wudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3Qgdm1sc2xfdTggKHVpbnQxNng4X3QsIHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHNsLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2bWxzbF9zMzIgKGludDY0eDJfdCwgaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sc2wuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bWxzbF9zMTYgKGludDMyeDRfdCwgaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sc2wuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2bWxzbF9zOCAoaW50MTZ4OF90LCBpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sc2wuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZxZG1sc2xfczMyIChpbnQ2NHgyX3QsIGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG1sc2wuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cWRtbHNsX3MxNiAoaW50MzJ4NF90LCBpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtbHNsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy41IEZ1c2VkLW11bHRpcGx5LWFjY3VtdWxhdGU8L2g1PgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2Zm1hX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Zm1hLmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2Zm1hcV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmZtYS5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNiBGdXNlZC1tdWx0aXBseS1zdWJ0cmFjdDwvaDU+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZmbXNfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZmbXMuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZmbXNxX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Zm1zLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy43IFJvdW5kIHRvIGludGVncmFsICh0byBuZWFyZXN0LCB0aWVzIHRvIGV2ZW4pPC9oNT4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnJuZG5fZjMyIChmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmludG4uZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJuZHFuX2YzMiAoZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJpbnRuLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjggUm91bmQgdG8gaW50ZWdyYWwgKHRvIG5lYXJlc3QsIHRpZXMgYXdheSBmcm9tIHplcm8pPC9oNT4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnJuZGFfZjMyIChmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmludGEuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJuZHFhX2YzMiAoZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJpbnRhLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjkgUm91bmQgdG8gaW50ZWdyYWwgKHRvd2FyZHMgK0luZik8L2g1PgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2cm5kcF9mMzIgKGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyaW50cC5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2cm5kcXBfZjMyIChmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmludHAuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMTAgUm91bmQgdG8gaW50ZWdyYWwgKHRvd2FyZHMgLUluZik8L2g1PgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2cm5kbV9mMzIgKGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyaW50bS5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2cm5kcW1fZjMyIChmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmludG0uZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMTEgUm91bmQgdG8gaW50ZWdyYWwgKHRvd2FyZHMgMCk8L2g1PgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2cm5kX2YzMiAoZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJpbnR6LmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZybmRxX2YzMiAoZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJpbnR6LmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjEyIFN1YnRyYWN0aW9uPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2c3ViX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZzdWJfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWIuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2c3ViX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViLmk4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2c3ViX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1Yi5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZzdWJfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2c3ViX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1Yi5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2c3ViX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWIuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdnN1Yl91NjQgKHVpbnQ2NHgxX3QsIHVpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnN1Yl9zNjQgKGludDY0eDFfdCwgaW50NjR4MV90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2c3VicV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1Yi5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2c3VicV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1Yi5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2c3VicV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViLmk4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2c3VicV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWIuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2c3VicV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWIuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2c3VicV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1Yi5pOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZzdWJxX3U2NCAodWludDY0eDJfdCwgdWludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViLmk2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnN1YnFfczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViLmk2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2c3VicV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZzdWJsX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3VibC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2c3VibF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1YmwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnN1YmxfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWJsLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2c3VibF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWJsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnN1YmxfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3VibC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZzdWJsX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1YmwuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2c3Vid191MzIgKHVpbnQ2NHgyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1YncudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdnN1YndfdTE2ICh1aW50MzJ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWJ3LnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZzdWJ3X3U4ICh1aW50MTZ4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1YncudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZzdWJ3X3MzMiAoaW50NjR4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1YncuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2c3Vid19zMTYgKGludDMyeDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWJ3LnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnN1YndfczggKGludDE2eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1YncuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2aHN1Yl91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmhzdWIudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmhzdWJfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoc3ViLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmhzdWJfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoc3ViLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2aHN1Yl9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoc3ViLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmhzdWJfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52aHN1Yi5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmhzdWJfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52aHN1Yi5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZoc3VicV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmhzdWIudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmhzdWJxX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52aHN1Yi51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2aHN1YnFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmhzdWIudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZoc3VicV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoc3ViLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmhzdWJxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmhzdWIuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2aHN1YnFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZoc3ViLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnFzdWJfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc3ViLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZxc3ViX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXN1Yi51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZxc3ViX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXN1Yi51OCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnFzdWJfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXN1Yi5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZxc3ViX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzdWIuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZxc3ViX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzdWIuczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cXN1Yl91NjQgKHVpbnQ2NHgxX3QsIHVpbnQ2NHgxX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzdWIudTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2cXN1Yl9zNjQgKGludDY0eDFfdCwgaW50NjR4MV90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc3ViLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZxc3VicV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzdWIudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnFzdWJxX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXN1Yi51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2cXN1YnFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzdWIudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxc3VicV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc3ViLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnFzdWJxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzdWIuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2cXN1YnFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc3ViLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnFzdWJxX3U2NCAodWludDY0eDJfdCwgdWludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXN1Yi51NjQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZxc3VicV9zNjQgKGludDY0eDJfdCwgaW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc3ViLnM2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZzdWJobl91NjQgKHVpbnQ2NHgyX3QsIHVpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1YmhuLmk2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZzdWJobl91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN1YmhuLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnN1YmhuX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViaG4uaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2c3ViaG5fczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViaG4uaTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2c3ViaG5fczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3ViaG4uaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZzdWJobl9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdWJobi5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cnN1YmhuX3U2NCAodWludDY0eDJfdCwgdWludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnN1YmhuLmk2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZyc3ViaG5fdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3ViaG4uaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cnN1YmhuX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnN1YmhuLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJzdWJobl9zNjQgKGludDY0eDJfdCwgaW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3ViaG4uaTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cnN1YmhuX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzdWJobi5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJzdWJobl9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3ViaG4uaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjEzIENvbXBhcmlzb24gKGVxdWFsLXRvKTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmNlcV91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNlcS5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2Y2VxX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2VxLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmNlcV91OCAodWludDh4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNlcS5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZjZXFfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2VxLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZjZXFfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2VxLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmNlcV9zOCAoaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZXEuaTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Y2VxX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZXEuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2Y2VxX3A4IChwb2x5OHg4X3QsIHBvbHk4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2VxLmk4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmNlcXFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZXEuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmNlcXFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZXEuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmNlcXFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNlcS5pOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZjZXFxX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNlcS5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2Y2VxcV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZXEuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmNlcXFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZXEuaTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2Y2VxcV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2VxLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZjZXFxX3A4IChwb2x5OHgxNl90LCBwb2x5OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZXEuaTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMTQgQ29tcGFyaXNvbiAoZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvKTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmNnZV9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UuczMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmNnZV9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2Y2dlX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZjZ2VfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Y2dlX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2dlLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZjZ2VfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UudTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2Y2dlX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2dlLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmNnZXFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2dlLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZjZ2VxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2Y2dlcV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZjZ2VxX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmNnZXFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmNnZXFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmNnZXFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS51OCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4xNSBDb21wYXJpc29uIChsZXNzLXRoYW4tb3ItZXF1YWwtdG8pPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Y2xlX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2Y2xlX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZjbGVfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2dlLnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmNsZV9mMzIgKGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2dlLmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZjbGVfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmNsZV91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZjbGVfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UudTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2Y2xlcV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ2UuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmNsZXFfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2dlLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZjbGVxX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2dlLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmNsZXFfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2Y2xlcV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2Y2xlcV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNnZS51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2Y2xlcV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2dlLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjE2IENvbXBhcmlzb24gKGdyZWF0ZXItdGhhbik8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZjZ3RfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZjZ3RfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmNndF9zOCAoaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QuczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Y2d0X2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmNndF91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNndC51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2Y2d0X3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmNndF91OCAodWludDh4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNndC51OCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZjZ3RxX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNndC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2Y2d0cV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmNndHFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2Y2d0cV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZjZ3RxX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZjZ3RxX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZjZ3RxX3U4ICh1aW50OHgxNl90LCB1aW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMTcgQ29tcGFyaXNvbiAobGVzcy10aGFuKTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmNsdF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QuczMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmNsdF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2Y2x0X3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNndC5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZjbHRfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNndC5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Y2x0X3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZjbHRfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QudTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2Y2x0X3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmNsdHFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2d0LnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZjbHRxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNndC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2Y2x0cV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNndC5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZjbHRxX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmNsdHFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmNsdHFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjZ3QudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmNsdHFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNndC51OCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4xOCBDb21wYXJpc29uIChhYnNvbHV0ZSBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8pPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Y2FnZV9mMzIgKGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWNnZS5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2Y2FnZXFfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFjZ2UuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjE5IENvbXBhcmlzb24gKGFic29sdXRlIGxlc3MtdGhhbi1vci1lcXVhbC10byk8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZjYWxlX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhY2dlLmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZjYWxlcV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWNnZS5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMjAgQ29tcGFyaXNvbiAoYWJzb2x1dGUgZ3JlYXRlci10aGFuKTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmNhZ3RfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFjZ3QuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmNhZ3RxX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhY2d0LmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4yMSBDb21wYXJpc29uIChhYnNvbHV0ZSBsZXNzLXRoYW4pPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Y2FsdF9mMzIgKGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWNndC5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2Y2FsdHFfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFjZ3QuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjIyIFRlc3QgYml0czwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnRzdF91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRzdC4zMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZ0c3RfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0c3QuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZ0c3RfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0c3QuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZ0c3RfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHN0LjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnRzdF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0c3QuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZ0c3RfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHN0LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZ0c3RfcDggKHBvbHk4eDhfdCwgcG9seTh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0c3QuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZ0c3RxX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHN0LjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnRzdHFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0c3QuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2dHN0cV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHN0LjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2dHN0cV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0c3QuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2dHN0cV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0c3QuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2dHN0cV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRzdC44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnRzdHFfcDggKHBvbHk4eDE2X3QsIHBvbHk4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRzdC44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjIzIEFic29sdXRlIGRpZmZlcmVuY2U8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZhYmRfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmQudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmFiZF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiZC51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZhYmRfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmQudTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZhYmRfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJkLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmFiZF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmQuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZhYmRfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJkLnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZhYmRfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiZC5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2YWJkcV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiZC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2YWJkcV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiZC51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2YWJkcV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJkLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2YWJkcV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmQuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2YWJkcV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmQuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2YWJkcV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiZC5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2YWJkcV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJkLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZhYmRsX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJkbC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2YWJkbF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiZGwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmFiZGxfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmRsLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2YWJkbF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmRsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmFiZGxfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJkbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZhYmRsX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiZGwuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMjQgQWJzb2x1dGUgZGlmZmVyZW5jZSBhbmQgYWNjdW11bGF0ZTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmFiYV91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiYS51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2YWJhX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJhLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmFiYV91OCAodWludDh4OF90LCB1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJhLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2YWJhX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJhLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmFiYV9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiYS5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmFiYV9zOCAoaW50OHg4X3QsIGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJhLnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmFiYXFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmEudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmFiYXFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmEudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmFiYXFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiYS51OCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmFiYXFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmEuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2YWJhcV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiYS5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZhYmFxX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmEuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2YWJhbF91MzIgKHVpbnQ2NHgyX3QsIHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFiYWwudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmFiYWxfdTE2ICh1aW50MzJ4NF90LCB1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmFsLnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZhYmFsX3U4ICh1aW50MTZ4OF90LCB1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJhbC51OCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmFiYWxfczMyIChpbnQ2NHgyX3QsIGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmFsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmFiYWxfczE2IChpbnQzMng0X3QsIGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmFsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmFiYWxfczggKGludDE2eDhfdCwgaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYmFsLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjI1IE1heGltdW08L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZtYXhfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtYXgudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3Qgdm1heF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1heC51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZtYXhfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtYXgudTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZtYXhfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWF4LnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3Qgdm1heF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtYXguczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZtYXhfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWF4LnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZtYXhfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1heC5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bWF4cV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1heC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2bWF4cV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1heC51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2bWF4cV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWF4LnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bWF4cV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtYXguczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2bWF4cV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtYXguczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2bWF4cV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1heC5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2bWF4cV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWF4LmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4yNiBNaW5pbXVtPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2bWluX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWluLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZtaW5fdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtaW4udTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2bWluX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWluLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2bWluX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1pbi5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZtaW5fczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWluLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2bWluX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1pbi5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2bWluX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtaW4uZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3Qgdm1pbnFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtaW4udTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3Qgdm1pbnFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtaW4udTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3Qgdm1pbnFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1pbi51OCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm1pbnFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWluLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3Qgdm1pbnFfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWluLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3Qgdm1pbnFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtaW4uczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3Qgdm1pbnFfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1pbi5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMjcgUGFpcndpc2UgYWRkPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cGFkZF91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBhZGQuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnBhZGRfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRkLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnBhZGRfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRkLmk4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2cGFkZF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRkLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnBhZGRfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZC5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnBhZGRfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZC5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2cGFkZF9mMzIgKGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZC5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cGFkZGxfdTMyICh1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRkbC51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZwYWRkbF91MTYgKHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBhZGRsLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnBhZGRsX3U4ICh1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBhZGRsLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZwYWRkbF9zMzIgKGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZGwuczMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZwYWRkbF9zMTYgKGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZGwuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZwYWRkbF9zOCAoaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBhZGRsLnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2cGFkZGxxX3UzMiAodWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZGwudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2cGFkZGxxX3UxNiAodWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZGwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2cGFkZGxxX3U4ICh1aW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRkbC51OCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cGFkZGxxX3MzMiAoaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRkbC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnBhZGRscV9zMTYgKGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZGwuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZwYWRkbHFfczggKGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkZGwuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4yOCBQYWlyd2lzZSBhZGQsIHNpbmdsZV9vcGNvZGUgd2lkZW4gYW5kIGFjY3VtdWxhdGU8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZwYWRhbF91MzIgKHVpbnQ2NHgxX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBhZGFsLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnBhZGFsX3UxNiAodWludDMyeDJfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkYWwudTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cGFkYWxfdTggKHVpbnQxNng0X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkYWwudTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnBhZGFsX3MzMiAoaW50NjR4MV90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBhZGFsLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2cGFkYWxfczE2IChpbnQzMngyX3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkYWwuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZwYWRhbF9zOCAoaW50MTZ4NF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkYWwuczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZwYWRhbHFfdTMyICh1aW50NjR4Ml90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRhbC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZwYWRhbHFfdTE2ICh1aW50MzJ4NF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRhbC51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZwYWRhbHFfdTggKHVpbnQxNng4X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBhZGFsLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZwYWRhbHFfczMyIChpbnQ2NHgyX3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkYWwuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZwYWRhbHFfczE2IChpbnQzMng0X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cGFkYWwuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZwYWRhbHFfczggKGludDE2eDhfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwYWRhbC5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjI5IEZvbGRpbmcgbWF4aW11bTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnBtYXhfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwbWF4LnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZwbWF4X3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cG1heC51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZwbWF4X3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cG1heC51OCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnBtYXhfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cG1heC5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZwbWF4X3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBtYXguczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZwbWF4X3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBtYXguczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnBtYXhfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBtYXguZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjMwIEZvbGRpbmcgbWluaW11bTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnBtaW5fdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZwbWluLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZwbWluX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cG1pbi51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZwbWluX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cG1pbi51OCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnBtaW5fczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cG1pbi5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZwbWluX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBtaW4uczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZwbWluX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBtaW4uczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnBtaW5fZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnBtaW4uZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjMxIFJlY2lwcm9jYWwgc3RlcDwvaDU+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZyZWNwc19mMzIgKGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmVjcHMuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZyZWNwc3FfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJlY3BzLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2cnNxcnRzX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3FydHMuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZyc3FydHNxX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3FydHMuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjMyIFZlY3RvciBzaGlmdCBsZWZ0PC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2c2hsX3UzMiAodWludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGwudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnNobF91MTYgKHVpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnNobF91OCAodWludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2c2hsX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZzaGxfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2c2hsX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZzaGxfdTY0ICh1aW50NjR4MV90LCBpbnQ2NHgxX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC51NjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZzaGxfczY0IChpbnQ2NHgxX3QsIGludDY0eDFfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZzaGxxX3UzMiAodWludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGwudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnNobHFfdTE2ICh1aW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2c2hscV91OCAodWludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGwudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZzaGxxX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZzaGxxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZzaGxxX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnNobHFfdTY0ICh1aW50NjR4Ml90LCBpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC51NjQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZzaGxxX3M2NCAoaW50NjR4Ml90LCBpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5zNjQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cnNobF91MzIgKHVpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNobC51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cnNobF91MTYgKHVpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNobC51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZyc2hsX3U4ICh1aW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hsLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2cnNobF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hsLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJzaGxfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNobC5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJzaGxfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNobC5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZyc2hsX3U2NCAodWludDY0eDFfdCwgaW50NjR4MV90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hsLnU2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnJzaGxfczY0IChpbnQ2NHgxX3QsIGludDY0eDFfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNobC5zNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2cnNobHFfdTMyICh1aW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaGwudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnJzaGxxX3UxNiAodWludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hsLnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZyc2hscV91OCAodWludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hsLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cnNobHFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNobC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZyc2hscV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdnJzaGxxX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNobC5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZyc2hscV91NjQgKHVpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNobC51NjQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZyc2hscV9zNjQgKGludDY0eDJfdCwgaW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hsLnM2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZxc2hsX3UzMiAodWludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZxc2hsX3UxNiAodWludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnFzaGxfdTggKHVpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwudTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZxc2hsX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwuczMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cXNobF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cXNobF9zOCAoaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdnFzaGxfdTY0ICh1aW50NjR4MV90LCBpbnQ2NHgxX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwudTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2cXNobF9zNjQgKGludDY0eDFfdCwgaW50NjR4MV90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZxc2hscV91MzIgKHVpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXNobC51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2cXNobHFfdTE2ICh1aW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnFzaGxxX3U4ICh1aW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxc2hscV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnFzaGxxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2cXNobHFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnFzaGxxX3U2NCAodWludDY0eDJfdCwgaW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnU2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnFzaGxxX3M2NCAoaW50NjR4Ml90LCBpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwuczY0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnFyc2hsX3UzMiAodWludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcnNobC51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cXJzaGxfdTE2ICh1aW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnFyc2hsX3U4ICh1aW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcnNobC51OCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnFyc2hsX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnFyc2hsX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cXJzaGxfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJzaGwuczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cXJzaGxfdTY0ICh1aW50NjR4MV90LCBpbnQ2NHgxX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnU2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnFyc2hsX3M2NCAoaW50NjR4MV90LCBpbnQ2NHgxX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZxcnNobHFfdTMyICh1aW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZxcnNobHFfdTE2ICh1aW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZxcnNobHFfdTggKHVpbnQ4eDE2X3QsIGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJzaGwudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxcnNobHFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJzaGwuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cXJzaGxxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdnFyc2hscV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnFyc2hscV91NjQgKHVpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJzaGwudTY0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cXJzaGxxX3M2NCAoaW50NjR4Ml90LCBpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hsLnM2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4zMyBWZWN0b3Igc2hpZnQgbGVmdCBieSBjb25zdGFudDwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnNobF9uX3UzMiAodWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGwuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnNobF9uX3UxNiAodWludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGwuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2c2hsX25fdTggKHVpbnQ4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGwuaTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZzaGxfbl9zMzIgKGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGwuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2c2hsX25fczE2IChpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2c2hsX25fczggKGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZzaGxfbl91NjQgKHVpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLmk2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnNobF9uX3M2NCAoaW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2c2hscV9uX3UzMiAodWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGwuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnNobHFfbl91MTYgKHVpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZzaGxxX25fdTggKHVpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLmk4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2c2hscV9uX3MzMiAoaW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZzaGxxX25fczE2IChpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdnNobHFfbl9zOCAoaW50OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5pOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZzaGxxX25fdTY0ICh1aW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobC5pNjQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZzaGxxX25fczY0IChpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsLmk2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZxc2hsX25fdTMyICh1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnFzaGxfbl91MTYgKHVpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXNobC51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZxc2hsX25fdTggKHVpbnQ4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2cXNobF9uX3MzMiAoaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwuczMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cXNobF9uX3MxNiAoaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZxc2hsX25fczggKGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwuczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cXNobF9uX3U2NCAodWludDY0eDFfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnU2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnFzaGxfbl9zNjQgKGludDY0eDFfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZxc2hscV9uX3UzMiAodWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZxc2hscV9uX3UxNiAodWludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZxc2hscV9uX3U4ICh1aW50OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxc2hscV9uX3MzMiAoaW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cXNobHFfbl9zMTYgKGludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdnFzaGxxX25fczggKGludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnFzaGxxX25fdTY0ICh1aW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGwudTY0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cXNobHFfbl9zNjQgKGludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsLnM2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZxc2hsdV9uX3M2NCAoaW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGx1LnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZxc2hsdV9uX3MzMiAoaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGx1LnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZxc2hsdV9uX3MxNiAoaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGx1LnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnFzaGx1X25fczggKGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGx1LnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnFzaGx1cV9uX3M2NCAoaW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaGx1LnM2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZxc2hsdXFfbl9zMzIgKGludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hsdS5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2cXNobHVxX25fczE2IChpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXNobHUuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnFzaGx1cV9uX3M4IChpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXNobHUuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2c2hsbF9uX3UzMiAodWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaGxsLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZzaGxsX25fdTE2ICh1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobGwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnNobGxfbl91OCAodWludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobGwudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZzaGxsX25fczMyIChpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsbC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZzaGxsX25fczE2IChpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hsbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZzaGxsX25fczggKGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNobGwuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMzQgVmVjdG9yIHNoaWZ0IHJpZ2h0IGJ5IGNvbnN0YW50PC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2c2hyX25fdTMyICh1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNoci51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2c2hyX25fdTE2ICh1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNoci51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZzaHJfbl91OCAodWludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNoci51OCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnNocl9uX3MzMiAoaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNoci5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZzaHJfbl9zMTYgKGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaHIuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZzaHJfbl9zOCAoaW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hyLnM4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdnNocl9uX3U2NCAodWludDY0eDFfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaHIudTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2c2hyX25fczY0IChpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hyLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZzaHJxX25fdTMyICh1aW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNoci51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2c2hycV9uX3UxNiAodWludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaHIudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnNocnFfbl91OCAodWludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaHIudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZzaHJxX25fczMyIChpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hyLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnNocnFfbl9zMTYgKGludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaHIuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2c2hycV9uX3M4IChpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hyLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnNocnFfbl91NjQgKHVpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hyLnU2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnNocnFfbl9zNjQgKGludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaHIuczY0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnJzaHJfbl91MzIgKHVpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNoci51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cnNocl9uX3UxNiAodWludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hyLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnJzaHJfbl91OCAodWludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHIudTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZyc2hyX25fczMyIChpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNoci5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZyc2hyX25fczE2IChpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNoci5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJzaHJfbl9zOCAoaW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNoci5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZyc2hyX25fdTY0ICh1aW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHIudTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2cnNocl9uX3M2NCAoaW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHIuczY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdnJzaHJxX25fdTMyICh1aW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHIudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnJzaHJxX25fdTE2ICh1aW50MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHIudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnJzaHJxX25fdTggKHVpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNoci51OCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnJzaHJxX25fczMyIChpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNoci5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZyc2hycV9uX3MxNiAoaW50MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHIuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2cnNocnFfbl9zOCAoaW50OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHIuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2cnNocnFfbl91NjQgKHVpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNoci51NjQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZyc2hycV9uX3M2NCAoaW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHIuczY0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnNocm5fbl91NjQgKHVpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hybi5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2c2hybl9uX3UzMiAodWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaHJuLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnNocm5fbl91MTYgKHVpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hybi5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZzaHJuX25fczY0IChpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hybi5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZzaHJuX25fczMyIChpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2hybi5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnNocm5fbl9zMTYgKGludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzaHJuLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZyc2hybl9uX3U2NCAodWludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hybi5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cnNocm5fbl91MzIgKHVpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNocm4uaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cnNocm5fbl91MTYgKHVpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNocm4uaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2cnNocm5fbl9zNjQgKGludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hybi5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZyc2hybl9uX3MzMiAoaW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzaHJuLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cnNocm5fbl9zMTYgKGludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc2hybi5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cXNocm5fbl91NjQgKHVpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXNocm4udTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnFzaHJuX25fdTMyICh1aW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaHJuLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnFzaHJuX25fdTE2ICh1aW50MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaHJuLnUxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnFzaHJuX25fczY0IChpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXNocm4uczY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cXNocm5fbl9zMzIgKGludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hybi5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnFzaHJuX25fczE2IChpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXNocm4uczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnFyc2hybl9uX3U2NCAodWludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcnNocm4udTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnFyc2hybl9uX3UzMiAodWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcnNocm4udTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cXJzaHJuX25fdTE2ICh1aW50MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyc2hybi51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZxcnNocm5fbl9zNjQgKGludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcnNocm4uczY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cXJzaHJuX25fczMyIChpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJzaHJuLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cXJzaHJuX25fczE2IChpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJzaHJuLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZxc2hydW5fbl9zNjQgKGludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hydW4uczY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnFzaHJ1bl9uX3MzMiAoaW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFzaHJ1bi5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZxc2hydW5fbl9zMTYgKGludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxc2hydW4uczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnFyc2hydW5fbl9zNjQgKGludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcnNocnVuLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZxcnNocnVuX25fczMyIChpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJzaHJ1bi5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZxcnNocnVuX25fczE2IChpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJzaHJ1bi5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMzUgVmVjdG9yIHNoaWZ0IHJpZ2h0IGJ5IGNvbnN0YW50IGFuZCBhY2N1bXVsYXRlPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2c3JhX25fdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyYS51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2c3JhX25fdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyYS51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZzcmFfbl91OCAodWludDh4OF90LCB1aW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JhLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2c3JhX25fczMyIChpbnQzMngyX3QsIGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmEuczMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2c3JhX25fczE2IChpbnQxNng0X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmEuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZzcmFfbl9zOCAoaW50OHg4X3QsIGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyYS5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZzcmFfbl91NjQgKHVpbnQ2NHgxX3QsIHVpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JhLnU2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnNyYV9uX3M2NCAoaW50NjR4MV90LCBpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JhLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZzcmFxX25fdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyYS51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2c3JhcV9uX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmEudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnNyYXFfbl91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmEudTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZzcmFxX25fczMyIChpbnQzMng0X3QsIGludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmEuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2c3JhcV9uX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JhLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdnNyYXFfbl9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JhLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnNyYXFfbl91NjQgKHVpbnQ2NHgyX3QsIHVpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JhLnU2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnNyYXFfbl9zNjQgKGludDY0eDJfdCwgaW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyYS5zNjQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cnNyYV9uX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3JhLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZyc3JhX25fdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzcmEudTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cnNyYV9uX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3JhLnU4IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2cnNyYV9uX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNyYS5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZyc3JhX25fczE2IChpbnQxNng0X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3JhLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cnNyYV9uX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNyYS5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZyc3JhX25fdTY0ICh1aW50NjR4MV90LCB1aW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzcmEudTY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2cnNyYV9uX3M2NCAoaW50NjR4MV90LCBpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNyYS5zNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2cnNyYXFfbl91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNyYS51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2cnNyYXFfbl91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNyYS51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2cnNyYXFfbl91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3JhLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cnNyYXFfbl9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzcmEuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cnNyYXFfbl9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzcmEuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2cnNyYXFfbl9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNyYS5zOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZyc3JhcV9uX3U2NCAodWludDY0eDJfdCwgdWludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3JhLnU2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnJzcmFxX25fczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3JhLnM2NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy4zNiBWZWN0b3Igc2hpZnQgcmlnaHQgYW5kIGluc2VydDwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnNyaV9uX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmkuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2c3JpX25fdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyaS4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnNyaV9uX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmkuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnNyaV9uX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JpLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2c3JpX25fczE2IChpbnQxNng0X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmkuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnNyaV9uX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JpLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2c3JpX25fdTY0ICh1aW50NjR4MV90LCB1aW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyaS42NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnNyaV9uX3M2NCAoaW50NjR4MV90LCBpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JpLjY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0X3QgdnNyaV9uX3AxNiAocG9seTE2eDRfdCwgcG9seTE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmkuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZzcmlfbl9wOCAocG9seTh4OF90LCBwb2x5OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JpLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2c3JpcV9uX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmkuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2c3JpcV9uX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmkuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2c3JpcV9uX3U4ICh1aW50OHgxNl90LCB1aW50OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyaS44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2c3JpcV9uX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JpLjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2c3JpcV9uX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JpLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2c3JpcV9uX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzcmkuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZzcmlxX25fdTY0ICh1aW50NjR4Ml90LCB1aW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyaS42NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnNyaXFfbl9zNjQgKGludDY0eDJfdCwgaW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyaS42NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OF90IHZzcmlxX25fcDE2IChwb2x5MTZ4OF90LCBwb2x5MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNyaS4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZzcmlxX25fcDggKHBvbHk4eDE2X3QsIHBvbHk4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3JpLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMzcgVmVjdG9yIHNoaWZ0IGxlZnQgYW5kIGluc2VydDwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnNsaV9uX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzbGkuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2c2xpX25fdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNsaS4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnNsaV9uX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzbGkuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnNsaV9uX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2xpLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2c2xpX25fczE2IChpbnQxNng0X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzbGkuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnNsaV9uX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2xpLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2c2xpX25fdTY0ICh1aW50NjR4MV90LCB1aW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNsaS42NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnNsaV9uX3M2NCAoaW50NjR4MV90LCBpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2xpLjY0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0X3QgdnNsaV9uX3AxNiAocG9seTE2eDRfdCwgcG9seTE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzbGkuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZzbGlfbl9wOCAocG9seTh4OF90LCBwb2x5OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2xpLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2c2xpcV9uX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzbGkuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2c2xpcV9uX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzbGkuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2c2xpcV9uX3U4ICh1aW50OHgxNl90LCB1aW50OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNsaS44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2c2xpcV9uX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2xpLjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2c2xpcV9uX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2xpLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2c2xpcV9uX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzbGkuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZzbGlxX25fdTY0ICh1aW50NjR4Ml90LCB1aW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNsaS42NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnNsaXFfbl9zNjQgKGludDY0eDJfdCwgaW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNsaS42NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OF90IHZzbGlxX25fcDE2IChwb2x5MTZ4OF90LCBwb2x5MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnNsaS4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZzbGlxX25fcDggKHBvbHk4eDE2X3QsIHBvbHk4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c2xpLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMzggQWJzb2x1dGUgdmFsdWU8L2g1PgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2YWJzX2YzMiAoZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFicy5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmFic19zMzIgKGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJzLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2YWJzX3MxNiAoaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhYnMuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmFic19zOCAoaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFicy5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZhYnNxX2YzMiAoZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFicy5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmFic3FfczMyIChpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFicy5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmFic3FfczE2IChpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFicy5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdmFic3FfczggKGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YWJzLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZxYWJzX3MzMiAoaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWJzLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cWFic19zMTYgKGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWFicy5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cWFic19zOCAoaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFhYnMuczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnFhYnNxX3MzMiAoaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWJzLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cWFic3FfczE2IChpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFhYnMuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZxYWJzcV9zOCAoaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxYWJzLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuMzkgTmVnYXRpb248L2g1PgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2bmVnX2YzMiAoZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm5lZy5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3Qgdm5lZ19zMzIgKGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bmVnLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2bmVnX3MxNiAoaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZuZWcuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3Qgdm5lZ19zOCAoaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm5lZy5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZuZWdxX2YzMiAoZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm5lZy5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm5lZ3FfczMyIChpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm5lZy5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3Qgdm5lZ3FfczE2IChpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm5lZy5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3Qgdm5lZ3FfczggKGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bmVnLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZxbmVnX3MzMiAoaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxbmVnLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cW5lZ19zMTYgKGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cW5lZy5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cW5lZ19zOCAoaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFuZWcuczggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnFuZWdxX3MzMiAoaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxbmVnLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cW5lZ3FfczE2IChpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFuZWcuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZxbmVncV9zOCAoaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxbmVnLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNDAgQml0d2lzZSBub3Q8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZtdm5fdTMyICh1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdm4gPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZtdm5fdTE2ICh1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdm4gPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3Qgdm12bl91OCAodWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdm4gPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3Qgdm12bl9zMzIgKGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXZuIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZtdm5fczE2IChpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm12biA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZtdm5fczggKGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdm4gPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3Qgdm12bl9wOCAocG9seTh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdm4gPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtdm5xX3UzMiAodWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXZuIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2bXZucV91MTYgKHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm12biA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3Qgdm12bnFfdTggKHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm12biA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bXZucV9zMzIgKGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXZuIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZtdm5xX3MxNiAoaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdm4gPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3Qgdm12bnFfczggKGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXZuIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2bXZucV9wOCAocG9seTh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXZuIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNDEgQ291bnQgbGVhZGluZyBzaWduIGJpdHM8L2g1PgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmNsc19zMzIgKGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2xzLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2Y2xzX3MxNiAoaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjbHMuczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmNsc19zOCAoaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNscy5zOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2Y2xzcV9zMzIgKGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2xzLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2Y2xzcV9zMTYgKGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2xzLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2Y2xzcV9zOCAoaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjbHMuczggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy40MiBDb3VudCBsZWFkaW5nIHplcm9zPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Y2x6X3UzMiAodWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2x6LmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmNsel91MTYgKHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNsei5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmNsel91OCAodWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjbHouaTggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmNsel9zMzIgKGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2x6LmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2Y2x6X3MxNiAoaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjbHouaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmNsel9zOCAoaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNsei5pOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmNsenFfdTMyICh1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjbHouaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2Y2x6cV91MTYgKHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNsei5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZjbHpxX3U4ICh1aW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjbHouaTggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmNsenFfczMyIChpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNsei5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmNsenFfczE2IChpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNsei5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdmNsenFfczggKGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y2x6Lmk4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNDMgQ291bnQgbnVtYmVyIG9mIHNldCBiaXRzPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZjbnRfdTggKHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y250LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2Y250X3M4IChpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y250LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3QgdmNudF9wOCAocG9seTh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjbnQuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmNudHFfdTggKHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNudC44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZjbnRxX3M4IChpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmNudC44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2Y250cV9wOCAocG9seTh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y250LjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy40NCBSZWNpcHJvY2FsIGVzdGltYXRlPC9oNT4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnJlY3BlX2YzMiAoZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJlY3BlLmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnJlY3BlX3UzMiAodWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmVjcGUudTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJlY3BlcV9mMzIgKGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZWNwZS5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZyZWNwZXFfdTMyICh1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZWNwZS51MzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy40NSBSZWNpcHJvY2FsIHNxdWFyZS1yb290IGVzdGltYXRlPC9oNT4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnJzcXJ0ZV9mMzIgKGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyc3FydGUuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cnNxcnRlX3UzMiAodWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNxcnRlLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZyc3FydGVxX2YzMiAoZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJzcXJ0ZS5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZyc3FydGVxX3UzMiAodWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cnNxcnRlLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjQ2IEdldCBsYW5lcyBmcm9tIGEgdmVjdG9yPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyX3QgdmdldF9sYW5lX3UzMiAodWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YuMzIgPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2X3QgdmdldF9sYW5lX3UxNiAodWludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YudTE2IDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4X3QgdmdldF9sYW5lX3U4ICh1aW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LnU4IDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyX3QgdmdldF9sYW5lX3MzMiAoaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi4zMiA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNl90IHZnZXRfbGFuZV9zMTYgKGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YuczE2IDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDhfdCB2Z2V0X2xhbmVfczggKGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi5zOCA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyX3QgdmdldF9sYW5lX2YzMiAoZmxvYXQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjMyIDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNl90IHZnZXRfbGFuZV9wMTYgKHBvbHkxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LnUxNiA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OF90IHZnZXRfbGFuZV9wOCAocG9seTh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi51OCA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjRfdCB2Z2V0X2xhbmVfdTY0ICh1aW50NjR4MV90LCBjb25zdCBpbnQpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NF90IHZnZXRfbGFuZV9zNjQgKGludDY0eDFfdCwgY29uc3QgaW50KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyX3QgdmdldHFfbGFuZV91MzIgKHVpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjMyIDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNl90IHZnZXRxX2xhbmVfdTE2ICh1aW50MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi51MTYgPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDhfdCB2Z2V0cV9sYW5lX3U4ICh1aW50OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi51OCA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMl90IHZnZXRxX2xhbmVfczMyIChpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjMyIDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2X3QgdmdldHFfbGFuZV9zMTYgKGludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YuczE2IDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDhfdCB2Z2V0cV9sYW5lX3M4IChpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LnM4IDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJfdCB2Z2V0cV9sYW5lX2YzMiAoZmxvYXQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjMyIDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNl90IHZnZXRxX2xhbmVfcDE2IChwb2x5MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi51MTYgPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seThfdCB2Z2V0cV9sYW5lX3A4IChwb2x5OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi51OCA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjRfdCB2Z2V0cV9sYW5lX3U2NCAodWludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YgPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT5mbXJyZCA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NF90IHZnZXRxX2xhbmVfczY0IChpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92IDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+Zm1ycmQgPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNDcgU2V0IGxhbmVzIGluIGEgdmVjdG9yPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2c2V0X2xhbmVfdTMyICh1aW50MzJfdCwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZzZXRfbGFuZV91MTYgKHVpbnQxNl90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2c2V0X2xhbmVfdTggKHVpbnQ4X3QsIHVpbnQ4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2c2V0X2xhbmVfczMyIChpbnQzMl90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZzZXRfbGFuZV9zMTYgKGludDE2X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2c2V0X2xhbmVfczggKGludDhfdCwgaW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2c2V0X2xhbmVfZjMyIChmbG9hdDMyX3QsIGZsb2F0MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi4zMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0X3QgdnNldF9sYW5lX3AxNiAocG9seTE2X3QsIHBvbHkxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZzZXRfbGFuZV9wOCAocG9seThfdCwgcG9seTh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2c2V0X2xhbmVfdTY0ICh1aW50NjRfdCwgdWludDY0eDFfdCwgY29uc3QgaW50KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZzZXRfbGFuZV9zNjQgKGludDY0X3QsIGludDY0eDFfdCwgY29uc3QgaW50KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2c2V0cV9sYW5lX3UzMiAodWludDMyX3QsIHVpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2c2V0cV9sYW5lX3UxNiAodWludDE2X3QsIHVpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2c2V0cV9sYW5lX3U4ICh1aW50OF90LCB1aW50OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZzZXRxX2xhbmVfczMyIChpbnQzMl90LCBpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZzZXRxX2xhbmVfczE2IChpbnQxNl90LCBpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZzZXRxX2xhbmVfczggKGludDhfdCwgaW50OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnNldHFfbGFuZV9mMzIgKGZsb2F0MzJfdCwgZmxvYXQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDhfdCB2c2V0cV9sYW5lX3AxNiAocG9seTE2X3QsIHBvbHkxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92LjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2c2V0cV9sYW5lX3A4IChwb2x5OF90LCBwb2x5OHgxNl90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdi44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2c2V0cV9sYW5lX3U2NCAodWludDY0X3QsIHVpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2c2V0cV9sYW5lX3M2NCAoaW50NjRfdCwgaW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy40OCBDcmVhdGUgdmVjdG9yIGZyb20gbGl0ZXJhbCBiaXQgcGF0dGVybjwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmNyZWF0ZV91MzIgKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2Y3JlYXRlX3UxNiAodWludDY0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmNyZWF0ZV91OCAodWludDY0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmNyZWF0ZV9zMzIgKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZjcmVhdGVfczE2ICh1aW50NjRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZjcmVhdGVfczggKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2Y3JlYXRlX3U2NCAodWludDY0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdmNyZWF0ZV9zNjQgKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdmNyZWF0ZV9mMzIgKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDRfdCB2Y3JlYXRlX3AxNiAodWludDY0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3QgdmNyZWF0ZV9wOCAodWludDY0X3QpCis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy40OSBTZXQgYWxsIGxhbmVzIHRvIHRoZSBzYW1lIHZhbHVlPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2ZHVwX25fdTMyICh1aW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2ZHVwX25fdTE2ICh1aW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZkdXBfbl91OCAodWludDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmR1cF9uX3MzMiAoaW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZkdXBfbl9zMTYgKGludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZkdXBfbl9zOCAoaW50OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZkdXBfbl9mMzIgKGZsb2F0MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDRfdCB2ZHVwX25fcDE2IChwb2x5MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZkdXBfbl9wOCAocG9seThfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZkdXBfbl91NjQgKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZkdXBfbl9zNjQgKGludDY0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZkdXBxX25fdTMyICh1aW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2ZHVwcV9uX3UxNiAodWludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmR1cHFfbl91OCAodWludDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmR1cHFfbl9zMzIgKGludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4zMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2ZHVwcV9uX3MxNiAoaW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZkdXBxX25fczggKGludDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2ZHVwcV9uX2YzMiAoZmxvYXQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OF90IHZkdXBxX25fcDE2IChwb2x5MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2ZHVwcV9uX3A4IChwb2x5OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdmR1cHFfbl91NjQgKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZkdXBxX25fczY0IChpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2bW92X25fdTMyICh1aW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2bW92X25fdTE2ICh1aW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZtb3Zfbl91OCAodWludDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3Qgdm1vdl9uX3MzMiAoaW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZtb3Zfbl9zMTYgKGludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZtb3Zfbl9zOCAoaW50OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZtb3Zfbl9mMzIgKGZsb2F0MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDRfdCB2bW92X25fcDE2IChwb2x5MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZtb3Zfbl9wOCAocG9seThfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZtb3Zfbl91NjQgKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZtb3Zfbl9zNjQgKGludDY0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtb3ZxX25fdTMyICh1aW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2bW92cV9uX3UxNiAodWludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3Qgdm1vdnFfbl91OCAodWludDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm1vdnFfbl9zMzIgKGludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4zMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2bW92cV9uX3MxNiAoaW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZtb3ZxX25fczggKGludDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2bW92cV9uX2YzMiAoZmxvYXQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnIwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OF90IHZtb3ZxX25fcDE2IChwb2x5MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5yMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2bW92cV9uX3A4IChwb2x5OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3Qgdm1vdnFfbl91NjQgKHVpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZtb3ZxX25fczY0IChpbnQ2NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2ZHVwX2xhbmVfdTMyICh1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4zMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZkdXBfbGFuZV91MTYgKHVpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2ZHVwX2xhbmVfdTggKHVpbnQ4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmR1cF9sYW5lX3MzMiAoaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4zMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmR1cF9sYW5lX3MxNiAoaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2ZHVwX2xhbmVfczggKGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZkdXBfbGFuZV9mMzIgKGZsb2F0MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4zMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZkdXBfbGFuZV9wMTYgKHBvbHkxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2ZHVwX2xhbmVfcDggKHBvbHk4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZkdXBfbGFuZV91NjQgKHVpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2ZHVwX2xhbmVfczY0IChpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmR1cHFfbGFuZV91MzIgKHVpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmR1cHFfbGFuZV91MTYgKHVpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmR1cHFfbGFuZV91OCAodWludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2ZHVwcV9sYW5lX3MzMiAoaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC4zMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmR1cHFfbGFuZV9zMTYgKGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZkdXBxX2xhbmVfczggKGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmR1cC44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZkdXBxX2xhbmVfZjMyIChmbG9hdDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDhfdCB2ZHVwcV9sYW5lX3AxNiAocG9seTE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZkdXAuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2ZHVwcV9sYW5lX3A4IChwb2x5OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZHVwLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2ZHVwcV9sYW5lX3U2NCAodWludDY0eDFfdCwgY29uc3QgaW50KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZkdXBxX2xhbmVfczY0IChpbnQ2NHgxX3QsIGNvbnN0IGludCkKKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjUwIENvbWJpbmluZyB2ZWN0b3JzPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2Y29tYmluZV91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZjb21iaW5lX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdmNvbWJpbmVfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZjb21iaW5lX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmNvbWJpbmVfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2Y29tYmluZV9zOCAoaW50OHg4X3QsIGludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2Y29tYmluZV91NjQgKHVpbnQ2NHgxX3QsIHVpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmNvbWJpbmVfczY0IChpbnQ2NHgxX3QsIGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZjb21iaW5lX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDhfdCB2Y29tYmluZV9wMTYgKHBvbHkxNng0X3QsIHBvbHkxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZjb21iaW5lX3A4IChwb2x5OHg4X3QsIHBvbHk4eDhfdCkKKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjUxIFNwbGl0dGluZyB2ZWN0b3JzPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Z2V0X2hpZ2hfdTMyICh1aW50MzJ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2Z2V0X2hpZ2hfdTE2ICh1aW50MTZ4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZnZXRfaGlnaF91OCAodWludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2Z2V0X2hpZ2hfczMyIChpbnQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmdldF9oaWdoX3MxNiAoaW50MTZ4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmdldF9oaWdoX3M4IChpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZnZXRfaGlnaF91NjQgKHVpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdmdldF9oaWdoX3M2NCAoaW50NjR4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdmdldF9oaWdoX2YzMiAoZmxvYXQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZnZXRfaGlnaF9wMTYgKHBvbHkxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3QgdmdldF9oaWdoX3A4IChwb2x5OHgxNl90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2Z2V0X2xvd191MzIgKHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmdldF9sb3dfdTE2ICh1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmdldF9sb3dfdTggKHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2Z2V0X2xvd19zMzIgKGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZnZXRfbG93X3MxNiAoaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2Z2V0X2xvd19zOCAoaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2Z2V0X2xvd19mMzIgKGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZnZXRfbG93X3AxNiAocG9seTE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZnZXRfbG93X3A4IChwb2x5OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3YgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZnZXRfbG93X3U2NCAodWludDY0eDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2Z2V0X2xvd19zNjQgKGludDY0eDJfdCkKKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjUyIENvbnZlcnNpb25zPC9oNT4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdmN2dF9mMzJfdTMyICh1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQuZjMyLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZjdnRfZjMyX3MzMiAoaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQuZjMyLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdmN2dF91MzJfZjMyIChmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y3Z0LnUzMi5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmN2dF9zMzJfZjMyIChmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y3Z0LnMzMi5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2Y3Z0cV9mMzJfdTMyICh1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQuZjMyLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZjdnRxX2YzMl9zMzIgKGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y3Z0LmYzMi5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZjdnRxX3UzMl9mMzIgKGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQudTMyLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2Y3Z0cV9zMzJfZjMyIChmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y3Z0LnMzMi5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDE2eDRfdCB2Y3Z0X2YxNl9mMzIgKGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQuZjE2LmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZjdnRfZjMyX2YxNiAoZmxvYXQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmN2dC5mMzIuZjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdmN2dF9uX2YzMl91MzIgKHVpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y3Z0LmYzMi51MzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdmN2dF9uX2YzMl9zMzIgKGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQuZjMyLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZjdnRfbl91MzJfZjMyIChmbG9hdDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQudTMyLmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmN2dF9uX3MzMl9mMzIgKGZsb2F0MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmN2dC5zMzIuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZjdnRxX25fZjMyX3UzMiAodWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQuZjMyLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2Y3Z0cV9uX2YzMl9zMzIgKGludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZjdnQuZjMyLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZjdnRxX25fdTMyX2YzMiAoZmxvYXQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y3Z0LnUzMi5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZjdnRxX25fczMyX2YzMiAoZmxvYXQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52Y3Z0LnMzMi5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNTMgTW92ZSwgc2luZ2xlX29wY29kZSBuYXJyb3dpbmc8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZtb3ZuX3U2NCAodWludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92bi5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZtb3ZuX3UzMiAodWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92bi5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3Qgdm1vdm5fdTE2ICh1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3ZuLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2bW92bl9zNjQgKGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92bi5pNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3Qgdm1vdm5fczMyIChpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdm4uaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3Qgdm1vdm5fczE2IChpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdm4uaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cW1vdm5fdTY0ICh1aW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxbW92bi51NjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZxbW92bl91MzIgKHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFtb3ZuLnUzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cW1vdm5fdTE2ICh1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxbW92bi51MTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnFtb3ZuX3M2NCAoaW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxbW92bi5zNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnFtb3ZuX3MzMiAoaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxbW92bi5zMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cW1vdm5fczE2IChpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFtb3ZuLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnFtb3Z1bl9zNjQgKGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cW1vdnVuLnM2NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnFtb3Z1bl9zMzIgKGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cW1vdnVuLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cW1vdnVuX3MxNiAoaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxbW92dW4uczE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNTQgTW92ZSwgc2luZ2xlX29wY29kZSBsb25nPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2bW92bF91MzIgKHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdmwudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bW92bF91MTYgKHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1vdmwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2bW92bF91OCAodWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3ZsLnU4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZtb3ZsX3MzMiAoaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3ZsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bW92bF9zMTYgKGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bW92bC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3Qgdm1vdmxfczggKGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtb3ZsLnM4IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNTUgVGFibGUgbG9va3VwPC9oNT4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZ0YmwxX3A4IChwb2x5OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJsLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2dGJsMV9zOCAoaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YmwuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2dGJsMV91OCAodWludDh4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRibC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZ0YmwyX3A4IChwb2x5OHg4eDJfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YmwuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2dGJsMl9zOCAoaW50OHg4eDJfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRibC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2dGJsMl91OCAodWludDh4OHgyX3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJsLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZ0YmwzX3A4IChwb2x5OHg4eDNfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YmwuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnRibDNfczggKGludDh4OHgzX3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YmwuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZ0YmwzX3U4ICh1aW50OHg4eDNfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YmwuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZ0Ymw0X3A4IChwb2x5OHg4eDRfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YmwuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZ0Ymw0X3M4IChpbnQ4eDh4NF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJsLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnRibDRfdTggKHVpbnQ4eDh4NF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRibC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNTYgRXh0ZW5kZWQgdGFibGUgbG9va3VwPC9oNT4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZ0YngxX3A4IChwb2x5OHg4X3QsIHBvbHk4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YnguOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZ0YngxX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YnguOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2dGJ4MV91OCAodWludDh4OF90LCB1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJ4LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3QgdnRieDJfcDggKHBvbHk4eDhfdCwgcG9seTh4OHgyX3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJ4LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnRieDJfczggKGludDh4OF90LCBpbnQ4eDh4Ml90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJ4LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZ0YngyX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDh4Ml90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRieC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2dGJ4M19wOCAocG9seTh4OF90LCBwb2x5OHg4eDNfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YnguOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnRieDNfczggKGludDh4OF90LCBpbnQ4eDh4M190LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJ4LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2dGJ4M191OCAodWludDh4OF90LCB1aW50OHg4eDNfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0YnguOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZ0Yng0X3A4IChwb2x5OHg4X3QsIHBvbHk4eDh4NF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRieC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnRieDRfczggKGludDh4OF90LCBpbnQ4eDh4NF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJ4LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnRieDRfdTggKHVpbnQ4eDhfdCwgdWludDh4OHg0X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dGJ4LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy41NyBNdWx0aXBseSwgbGFuZTwvaDU+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZtdWxfbGFuZV9mMzIgKGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZtdWxfbGFuZV91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2bXVsX2xhbmVfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2bXVsX2xhbmVfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3Qgdm11bF9sYW5lX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3Qgdm11bHFfbGFuZV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtdWxxX2xhbmVfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3Qgdm11bHFfbGFuZV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZtdWxxX2xhbmVfczMyIChpbnQzMng0X3QsIGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3Qgdm11bHFfbGFuZV9zMTYgKGludDE2eDhfdCwgaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjU4IExvbmcgbXVsdGlwbHksIGxhbmU8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZtdWxsX2xhbmVfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bGwudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtdWxsX2xhbmVfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bGwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3Qgdm11bGxfbGFuZV9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bGwuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm11bGxfbGFuZV9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bGwuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy41OSBTYXR1cmF0aW5nIGRvdWJsaW5nIGxvbmcgbXVsdGlwbHksIGxhbmU8L2g1PgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnFkbXVsbF9sYW5lX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxZG11bGxfbGFuZV9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFkbXVsbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjYwIFNhdHVyYXRpbmcgZG91YmxpbmcgbXVsdGlwbHkgaGlnaCwgbGFuZTwvaDU+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cWRtdWxocV9sYW5lX3MzMiAoaW50MzJ4NF90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxoLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZxZG11bGhxX2xhbmVfczE2IChpbnQxNng4X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG11bGguczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnFkbXVsaF9sYW5lX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxoLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZxZG11bGhfbGFuZV9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFkbXVsaC5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cXJkbXVsaHFfbGFuZV9zMzIgKGludDMyeDRfdCwgaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyZG11bGguczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnFyZG11bGhxX2xhbmVfczE2IChpbnQxNng4X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcmRtdWxoLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZxcmRtdWxoX2xhbmVfczMyIChpbnQzMngyX3QsIGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcmRtdWxoLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZxcmRtdWxoX2xhbmVfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcmRtdWxoLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNjEgTXVsdGlwbHktYWNjdW11bGF0ZSwgbGFuZTwvaDU+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZtbGFfbGFuZV9mMzIgKGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhLmYzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2bWxhX2xhbmVfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90LCB1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3Qgdm1sYV9sYW5lX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCwgdWludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3Qgdm1sYV9sYW5lX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3Qgdm1sYV9sYW5lX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2bWxhcV9sYW5lX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90LCBmbG9hdDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtbGFxX2xhbmVfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90LCB1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3Qgdm1sYXFfbGFuZV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QsIHVpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZtbGFxX2xhbmVfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCwgaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2bWxhcV9sYW5lX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZtbGFsX2xhbmVfdTMyICh1aW50NjR4Ml90LCB1aW50MzJ4Ml90LCB1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYWwudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtbGFsX2xhbmVfdTE2ICh1aW50MzJ4NF90LCB1aW50MTZ4NF90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYWwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3Qgdm1sYWxfbGFuZV9zMzIgKGludDY0eDJfdCwgaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhbC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bWxhbF9sYW5lX3MxNiAoaW50MzJ4NF90LCBpbnQxNng0X3QsIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGFsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZxZG1sYWxfbGFuZV9zMzIgKGludDY0eDJfdCwgaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtbGFsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxZG1sYWxfbGFuZV9zMTYgKGludDMyeDRfdCwgaW50MTZ4NF90LCBpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtbGFsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNjIgTXVsdGlwbHktc3VidHJhY3QsIGxhbmU8L2g1PgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2bWxzX2xhbmVfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3Qgdm1sc19sYW5lX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZtbHNfbGFuZV91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QsIHVpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZtbHNfbGFuZV9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZtbHNfbGFuZV9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90LCBpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3Qgdm1sc3FfbGFuZV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCwgZmxvYXQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bWxzcV9sYW5lX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZtbHNxX2xhbmVfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90LCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bWxzcV9sYW5lX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QsIGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3Qgdm1sc3FfbGFuZV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90LCBpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2bWxzbF9sYW5lX3UzMiAodWludDY0eDJfdCwgdWludDMyeDJfdCwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHNsLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bWxzbF9sYW5lX3UxNiAodWludDMyeDRfdCwgdWludDE2eDRfdCwgdWludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHNsLnUxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZtbHNsX2xhbmVfczMyIChpbnQ2NHgyX3QsIGludDMyeDJfdCwgaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sc2wuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm1sc2xfbGFuZV9zMTYgKGludDMyeDRfdCwgaW50MTZ4NF90LCBpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cWRtbHNsX2xhbmVfczMyIChpbnQ2NHgyX3QsIGludDMyeDJfdCwgaW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFkbWxzbC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cWRtbHNsX2xhbmVfczE2IChpbnQzMng0X3QsIGludDE2eDRfdCwgaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFkbWxzbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjYzIFZlY3RvciBtdWx0aXBseSBieSBzY2FsYXI8L2g1PgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2bXVsX25fZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZtdWxfbl91MzIgKHVpbnQzMngyX3QsIHVpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZtdWxfbl91MTYgKHVpbnQxNng0X3QsIHVpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3Qgdm11bF9uX3MzMiAoaW50MzJ4Ml90LCBpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3Qgdm11bF9uX3MxNiAoaW50MTZ4NF90LCBpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2bXVscV9uX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmYzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bXVscV9uX3UzMiAodWludDMyeDRfdCwgdWludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3Qgdm11bHFfbl91MTYgKHVpbnQxNng4X3QsIHVpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWwuaTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm11bHFfbl9zMzIgKGludDMyeDRfdCwgaW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsLmkzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZtdWxxX25fczE2IChpbnQxNng4X3QsIGludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bC5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjY0IFZlY3RvciBsb25nIG11bHRpcGx5IGJ5IHNjYWxhcjwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3Qgdm11bGxfbl91MzIgKHVpbnQzMngyX3QsIHVpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWxsLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bXVsbF9uX3UxNiAodWludDE2eDRfdCwgdWludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm11bGwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3Qgdm11bGxfbl9zMzIgKGludDMyeDJfdCwgaW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bXVsbC5zMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bXVsbF9uX3MxNiAoaW50MTZ4NF90LCBpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtdWxsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNjUgVmVjdG9yIHNhdHVyYXRpbmcgZG91YmxpbmcgbG9uZyBtdWx0aXBseSBieSBzY2FsYXI8L2g1PgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnFkbXVsbF9uX3MzMiAoaW50MzJ4Ml90LCBpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG11bGwuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnFkbXVsbF9uX3MxNiAoaW50MTZ4NF90LCBpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG11bGwuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy42NiBWZWN0b3Igc2F0dXJhdGluZyBkb3VibGluZyBtdWx0aXBseSBoaWdoIGJ5IHNjYWxhcjwvaDU+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cWRtdWxocV9uX3MzMiAoaW50MzJ4NF90LCBpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG11bGguczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnFkbXVsaHFfbl9zMTYgKGludDE2eDhfdCwgaW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxoLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZxZG11bGhfbl9zMzIgKGludDMyeDJfdCwgaW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxoLnMzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZxZG11bGhfbl9zMTYgKGludDE2eDRfdCwgaW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtdWxoLnMxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxcmRtdWxocV9uX3MzMiAoaW50MzJ4NF90LCBpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcmRtdWxoLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZxcmRtdWxocV9uX3MxNiAoaW50MTZ4OF90LCBpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxcmRtdWxoLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZxcmRtdWxoX25fczMyIChpbnQzMngyX3QsIGludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFyZG11bGguczMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnFyZG11bGhfbl9zMTYgKGludDE2eDRfdCwgaW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cXJkbXVsaC5zMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjY3IFZlY3RvciBtdWx0aXBseS1hY2N1bXVsYXRlIGJ5IHNjYWxhcjwvaDU+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZtbGFfbl9mMzIgKGZsb2F0MzJ4Ml90LCBmbG9hdDMyeDJfdCwgZmxvYXQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuZjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZtbGFfbl91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QsIHVpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZtbGFfbl91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QsIHVpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3Qgdm1sYV9uX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2bWxhX25fczE2IChpbnQxNng0X3QsIGludDE2eDRfdCwgaW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhLmkxNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3Qgdm1sYXFfbl9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCwgZmxvYXQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGEuZjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtbGFxX25fdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90LCB1aW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhLmkzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2bWxhcV9uX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCwgdWludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bWxhcV9uX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QsIGludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2bWxhcV9uX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QsIGludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYS5pMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3Qgdm1sYWxfbl91MzIgKHVpbnQ2NHgyX3QsIHVpbnQzMngyX3QsIHVpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGFsLnUzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bWxhbF9uX3UxNiAodWludDMyeDRfdCwgdWludDE2eDRfdCwgdWludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sYWwudTE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3Qgdm1sYWxfbl9zMzIgKGludDY0eDJfdCwgaW50MzJ4Ml90LCBpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbGFsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZtbGFsX25fczE2IChpbnQzMng0X3QsIGludDE2eDRfdCwgaW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxhbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cWRtbGFsX25fczMyIChpbnQ2NHgyX3QsIGludDMyeDJfdCwgaW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cWRtbGFsLnMzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZxZG1sYWxfbl9zMTYgKGludDMyeDRfdCwgaW50MTZ4NF90LCBpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG1sYWwuczE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy42OCBWZWN0b3IgbXVsdGlwbHktc3VidHJhY3QgYnkgc2NhbGFyPC9oNT4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3Qgdm1sc19uX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90LCBmbG9hdDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5mMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3Qgdm1sc19uX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCwgdWludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5pMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3Qgdm1sc19uX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCwgdWludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5pMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2bWxzX25fczMyIChpbnQzMngyX3QsIGludDMyeDJfdCwgaW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkzMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZtbHNfbl9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90LCBpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2bWxzcV9uX2YzMiAoZmxvYXQzMng0X3QsIGZsb2F0MzJ4NF90LCBmbG9hdDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1scy5mMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3Qgdm1sc3Ffbl91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QsIHVpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHMuaTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZtbHNxX25fdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90LCB1aW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZtbHNxX25fczMyIChpbnQzMng0X3QsIGludDMyeDRfdCwgaW50MzJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkzMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZtbHNxX25fczE2IChpbnQxNng4X3QsIGludDE2eDhfdCwgaW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzLmkxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2bWxzbF9uX3UzMiAodWludDY0eDJfdCwgdWludDMyeDJfdCwgdWludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sc2wudTMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZtbHNsX25fdTE2ICh1aW50MzJ4NF90LCB1aW50MTZ4NF90LCB1aW50MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bWxzbC51MTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2bWxzbF9uX3MzMiAoaW50NjR4Ml90LCBpbnQzMngyX3QsIGludDMyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm1sc2wuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm1sc2xfbl9zMTYgKGludDMyeDRfdCwgaW50MTZ4NF90LCBpbnQxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZtbHNsLnMxNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZxZG1sc2xfbl9zMzIgKGludDY0eDJfdCwgaW50MzJ4Ml90LCBpbnQzMl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZxZG1sc2wuczMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnFkbWxzbF9uX3MxNiAoaW50MzJ4NF90LCBpbnQxNng0X3QsIGludDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnFkbWxzbC5zMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjY5IFZlY3RvciBleHRyYWN0PC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2ZXh0X3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZleHQuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmV4dF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZXh0LjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdmV4dF91OCAodWludDh4OF90LCB1aW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZXh0LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2ZXh0X3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZXh0LjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmV4dF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmV4dC4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmV4dF9zOCAoaW50OHg4X3QsIGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmV4dC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZleHRfdTY0ICh1aW50NjR4MV90LCB1aW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmV4dC42NCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZleHRfczY0IChpbnQ2NHgxX3QsIGludDY0eDFfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZleHQuNjQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZleHRfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZXh0LjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZleHRfcDE2IChwb2x5MTZ4NF90LCBwb2x5MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmV4dC4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZleHRfcDggKHBvbHk4eDhfdCwgcG9seTh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmV4dC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZleHRxX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZleHQuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmV4dHFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmV4dC4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2ZXh0cV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZleHQuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZleHRxX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZXh0LjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdmV4dHFfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZleHQuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2ZXh0cV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZXh0LjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdmV4dHFfdTY0ICh1aW50NjR4Ml90LCB1aW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmV4dC42NCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZleHRxX3M2NCAoaW50NjR4Ml90LCBpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZXh0LjY0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sICM8L2NvZGU+PHZhcj4wPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2ZXh0cV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZleHQuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgIzwvY29kZT48dmFyPjA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdmV4dHFfcDE2IChwb2x5MTZ4OF90LCBwb2x5MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmV4dC4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2ZXh0cV9wOCAocG9seTh4MTZfdCwgcG9seTh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZleHQuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCAjPC9jb2RlPjx2YXI+MDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNzAgUmV2ZXJzZSBlbGVtZW50czwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnJldjY0X3UzMiAodWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2NjQuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZyZXY2NF91MTYgKHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjY0LjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZyZXY2NF91OCAodWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXY2NC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZyZXY2NF9zMzIgKGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2NjQuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJldjY0X3MxNiAoaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXY2NC4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZyZXY2NF9zOCAoaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjY0LjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2cmV2NjRfZjMyIChmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2NjQuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZyZXY2NF9wMTYgKHBvbHkxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjY0LjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZyZXY2NF9wOCAocG9seTh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXY2NC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2cmV2NjRxX3UzMiAodWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2NjQuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZyZXY2NHFfdTE2ICh1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXY2NC4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnJldjY0cV91OCAodWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2NjQuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cmV2NjRxX3MzMiAoaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXY2NC4zMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cmV2NjRxX3MxNiAoaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXY2NC4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2cmV2NjRxX3M4IChpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjY0LjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2cmV2NjRxX2YzMiAoZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjY0LjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDhfdCB2cmV2NjRxX3AxNiAocG9seTE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2NjQuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZyZXY2NHFfcDggKHBvbHk4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjY0LjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZyZXYzMl91MTYgKHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjMyLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZyZXYzMl9zMTYgKGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2MzIuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnJldjMyX3U4ICh1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjMyLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cmV2MzJfczggKGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXYzMi44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDRfdCB2cmV2MzJfcDE2IChwb2x5MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXYzMi4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2cmV2MzJfcDggKHBvbHk4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2MzIuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnJldjMycV91MTYgKHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjMyLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZyZXYzMnFfczE2IChpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjMyLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2cmV2MzJxX3U4ICh1aW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXYzMi44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyZXYzMnFfczggKGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2MzIuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdnJldjMycV9wMTYgKHBvbHkxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjMyLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2cmV2MzJxX3A4IChwb2x5OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXYzMi44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZyZXYxNl91OCAodWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZyZXYxNi44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJldjE2X3M4IChpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2MTYuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2cmV2MTZfcDggKHBvbHk4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2MTYuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnJldjE2cV91OCAodWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52cmV2MTYuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2cmV2MTZxX3M4IChpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjE2LjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZyZXYxNnFfcDggKHBvbHk4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnJldjE2LjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy43MSBCaXQgc2VsZWN0aW9uPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2YnNsX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YnNsIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpdCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaWYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2YnNsX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YnNsIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpdCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaWYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZic2xfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJzbCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaXQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52YmlmIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2YnNsX3MzMiAodWludDMyeDJfdCwgaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJzbCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaXQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52YmlmIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2YnNsX3MxNiAodWludDE2eDRfdCwgaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJzbCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaXQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52YmlmIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZic2xfczggKHVpbnQ4eDhfdCwgaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZic2xfdTY0ICh1aW50NjR4MV90LCB1aW50NjR4MV90LCB1aW50NjR4MV90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdmJzbF9zNjQgKHVpbnQ2NHgxX3QsIGludDY0eDFfdCwgaW50NjR4MV90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2YnNsX2YzMiAodWludDMyeDJfdCwgZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZic2xfcDE2ICh1aW50MTZ4NF90LCBwb2x5MTZ4NF90LCBwb2x5MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3QgdmJzbF9wOCAodWludDh4OF90LCBwb2x5OHg4X3QsIHBvbHk4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YnNsIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpdCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaWYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2YnNscV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJzbCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaXQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52YmlmIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmJzbHFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZic2xxX3U4ICh1aW50OHgxNl90LCB1aW50OHgxNl90LCB1aW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmJzbHFfczMyICh1aW50MzJ4NF90LCBpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YnNsIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpdCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaWYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZic2xxX3MxNiAodWludDE2eDhfdCwgaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJzbCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaXQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52YmlmIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2YnNscV9zOCAodWludDh4MTZfdCwgaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJzbCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaXQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52YmlmIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdmJzbHFfdTY0ICh1aW50NjR4Ml90LCB1aW50NjR4Ml90LCB1aW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmJzbHFfczY0ICh1aW50NjR4Ml90LCBpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YnNsIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpdCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaWYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdmJzbHFfZjMyICh1aW50MzJ4NF90LCBmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJzbCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+IDxlbT5vcjwvZW0+IDxjb2RlPnZiaXQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52YmlmIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdmJzbHFfcDE2ICh1aW50MTZ4OF90LCBwb2x5MTZ4OF90LCBwb2x5MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZic2xxX3A4ICh1aW50OHgxNl90LCBwb2x5OHgxNl90LCBwb2x5OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZic2wgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPiA8ZW0+b3I8L2VtPiA8Y29kZT52Yml0IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4gPGVtPm9yPC9lbT4gPGNvZGU+dmJpZiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy43MiBUcmFuc3Bvc2UgZWxlbWVudHM8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NHgyX3QgdnRybl91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRybi4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDh4Ml90IHZ0cm5fdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0cm4uOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDR4Ml90IHZ0cm5fczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHJuLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4eDJfdCB2dHJuX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRybi44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDR4Ml90IHZ0cm5fcDE2IChwb2x5MTZ4NF90LCBwb2x5MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0cm4uMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4eDJfdCB2dHJuX3A4IChwb2x5OHg4X3QsIHBvbHk4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHJuLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJ4Ml90IHZ0cm5fZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnV6cC4zMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyeDJfdCB2dHJuX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dXpwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4MngyX3QgdnRybl9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ1enAuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NHgyX3QgdnRybnFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0cm4uMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OHgyX3QgdnRybnFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0cm4uMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNngyX3QgdnRybnFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRybi44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NHgyX3QgdnRybnFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHJuLjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OHgyX3QgdnRybnFfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHJuLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNngyX3QgdnRybnFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ0cm4uOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NHgyX3QgdnRybnFfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRybi4zMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4eDJfdCB2dHJucV9wMTYgKHBvbHkxNng4X3QsIHBvbHkxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnRybi4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDE2eDJfdCB2dHJucV9wOCAocG9seTh4MTZfdCwgcG9seTh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dHJuLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy43MyBaaXAgZWxlbWVudHM8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NHgyX3QgdnppcF91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnppcC4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDh4Ml90IHZ6aXBfdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ6aXAuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDR4Ml90IHZ6aXBfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52emlwLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4eDJfdCB2emlwX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnppcC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDR4Ml90IHZ6aXBfcDE2IChwb2x5MTZ4NF90LCBwb2x5MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ6aXAuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4eDJfdCB2emlwX3A4IChwb2x5OHg4X3QsIHBvbHk4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52emlwLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJ4Ml90IHZ6aXBfZjMyIChmbG9hdDMyeDJfdCwgZmxvYXQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnV6cC4zMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyeDJfdCB2emlwX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dXpwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4MngyX3QgdnppcF9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ1enAuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NHgyX3QgdnppcHFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ6aXAuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OHgyX3QgdnppcHFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ6aXAuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNngyX3QgdnppcHFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnppcC44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NHgyX3QgdnppcHFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52emlwLjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OHgyX3QgdnppcHFfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52emlwLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNngyX3QgdnppcHFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ6aXAuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NHgyX3QgdnppcHFfZjMyIChmbG9hdDMyeDRfdCwgZmxvYXQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnppcC4zMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4eDJfdCB2emlwcV9wMTYgKHBvbHkxNng4X3QsIHBvbHkxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnppcC4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDE2eDJfdCB2emlwcV9wOCAocG9seTh4MTZfdCwgcG9seTh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52emlwLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy43NCBVbnppcCBlbGVtZW50czwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyeDJfdCB2dXpwX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dXpwLjMyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDR4Ml90IHZ1enBfdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ1enAuMTYgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4eDJfdCB2dXpwX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dXpwLjggPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyeDJfdCB2dXpwX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnV6cC4zMiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDR4Ml90IHZ1enBfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dXpwLjE2IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4eDJfdCB2dXpwX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnV6cC44IDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyeDJfdCB2dXpwX2YzMiAoZmxvYXQzMngyX3QsIGZsb2F0MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ1enAuMzIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NHgyX3QgdnV6cF9wMTYgKHBvbHkxNng0X3QsIHBvbHkxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnV6cC4xNiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDh4Ml90IHZ1enBfcDggKHBvbHk4eDhfdCwgcG9seTh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ1enAuOCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0eDJfdCB2dXpwcV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnV6cC4zMiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4eDJfdCB2dXpwcV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnV6cC4xNiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2eDJfdCB2dXpwcV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dXpwLjggPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0eDJfdCB2dXpwcV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ1enAuMzIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4eDJfdCB2dXpwcV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ1enAuMTYgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnExPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2eDJfdCB2dXpwcV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnV6cC44IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0eDJfdCB2dXpwcV9mMzIgKGZsb2F0MzJ4NF90LCBmbG9hdDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dXpwLjMyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDh4Ml90IHZ1enBxX3AxNiAocG9seTE2eDhfdCwgcG9seTE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52dXpwLjE2IDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMTwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZ4Ml90IHZ1enBxX3A4IChwb2x5OHgxNl90LCBwb2x5OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZ1enAuOCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTE8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjc1IEVsZW1lbnQvc3RydWN0dXJlIGxvYWRzLCBWTEQxIHZhcmlhbnRzPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2bGQxX3UzMiAoY29uc3QgdWludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZsZDFfdTE2IChjb25zdCB1aW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2bGQxX3U4IChjb25zdCB1aW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdmxkMV9zMzIgKGNvbnN0IGludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmxkMV9zMTYgKGNvbnN0IGludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2bGQxX3M4IChjb25zdCBpbnQ4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdmxkMV91NjQgKGNvbnN0IHVpbnQ2NF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZsZDFfczY0IChjb25zdCBpbnQ2NF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdmxkMV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0X3QgdmxkMV9wMTYgKGNvbnN0IHBvbHkxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZsZDFfcDggKGNvbnN0IHBvbHk4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdmxkMXFfdTMyIChjb25zdCB1aW50MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZsZDFxX3UxNiAoY29uc3QgdWludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2bGQxcV91OCAoY29uc3QgdWludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2bGQxcV9zMzIgKGNvbnN0IGludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZsZDFxX3MxNiAoY29uc3QgaW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdmxkMXFfczggKGNvbnN0IGludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdmxkMXFfdTY0IChjb25zdCB1aW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmxkMXFfczY0IChjb25zdCBpbnQ2NF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZsZDFxX2YzMiAoY29uc3QgZmxvYXQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdmxkMXFfcDE2IChjb25zdCBwb2x5MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZsZDFxX3A4IChjb25zdCBwb2x5OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2bGQxX2xhbmVfdTMyIChjb25zdCB1aW50MzJfdCAqLCB1aW50MzJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2bGQxX2xhbmVfdTE2IChjb25zdCB1aW50MTZfdCAqLCB1aW50MTZ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZsZDFfbGFuZV91OCAoY29uc3QgdWludDhfdCAqLCB1aW50OHg4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2bGQxX2xhbmVfczMyIChjb25zdCBpbnQzMl90ICosIGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2bGQxX2xhbmVfczE2IChjb25zdCBpbnQxNl90ICosIGludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZsZDFfbGFuZV9zOCAoY29uc3QgaW50OF90ICosIGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2bGQxX2xhbmVfZjMyIChjb25zdCBmbG9hdDMyX3QgKiwgZmxvYXQzMngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZsZDFfbGFuZV9wMTYgKGNvbnN0IHBvbHkxNl90ICosIHBvbHkxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3QgdmxkMV9sYW5lX3A4IChjb25zdCBwb2x5OF90ICosIHBvbHk4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2bGQxX2xhbmVfdTY0IChjb25zdCB1aW50NjRfdCAqLCB1aW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZsZDFfbGFuZV9zNjQgKGNvbnN0IGludDY0X3QgKiwgaW50NjR4MV90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2bGQxcV9sYW5lX3UzMiAoY29uc3QgdWludDMyX3QgKiwgdWludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmxkMXFfbGFuZV91MTYgKGNvbnN0IHVpbnQxNl90ICosIHVpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZsZDFxX2xhbmVfdTggKGNvbnN0IHVpbnQ4X3QgKiwgdWludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZsZDFxX2xhbmVfczMyIChjb25zdCBpbnQzMl90ICosIGludDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2bGQxcV9sYW5lX3MxNiAoY29uc3QgaW50MTZfdCAqLCBpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdmxkMXFfbGFuZV9zOCAoY29uc3QgaW50OF90ICosIGludDh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdmxkMXFfbGFuZV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqLCBmbG9hdDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdmxkMXFfbGFuZV9wMTYgKGNvbnN0IHBvbHkxNl90ICosIHBvbHkxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZsZDFxX2xhbmVfcDggKGNvbnN0IHBvbHk4X3QgKiwgcG9seTh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2bGQxcV9sYW5lX3U2NCAoY29uc3QgdWludDY0X3QgKiwgdWludDY0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2bGQxcV9sYW5lX3M2NCAoY29uc3QgaW50NjRfdCAqLCBpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZsZDFfZHVwX3UzMiAoY29uc3QgdWludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdmxkMV9kdXBfdTE2IChjb25zdCB1aW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZsZDFfZHVwX3U4IChjb25zdCB1aW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2bGQxX2R1cF9zMzIgKGNvbnN0IGludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2bGQxX2R1cF9zMTYgKGNvbnN0IGludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZsZDFfZHVwX3M4IChjb25zdCBpbnQ4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdmxkMV9kdXBfZjMyIChjb25zdCBmbG9hdDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0X3QgdmxkMV9kdXBfcDE2IChjb25zdCBwb2x5MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZsZDFfZHVwX3A4IChjb25zdCBwb2x5OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdmxkMV9kdXBfdTY0IChjb25zdCB1aW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2bGQxX2R1cF9zNjQgKGNvbnN0IGludDY0X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZsZDFxX2R1cF91MzIgKGNvbnN0IHVpbnQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZsZDFxX2R1cF91MTYgKGNvbnN0IHVpbnQxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZsZDFxX2R1cF91OCAoY29uc3QgdWludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdmxkMXFfZHVwX3MzMiAoY29uc3QgaW50MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZsZDFxX2R1cF9zMTYgKGNvbnN0IGludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2bGQxcV9kdXBfczggKGNvbnN0IGludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2bGQxcV9kdXBfZjMyIChjb25zdCBmbG9hdDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdmxkMXFfZHVwX3AxNiAoY29uc3QgcG9seTE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDE2X3QgdmxkMXFfZHVwX3A4IChjb25zdCBwb2x5OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdmxkMXFfZHVwX3U2NCAoY29uc3QgdWludDY0X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmxkMXFfZHVwX3M2NCAoY29uc3QgaW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjc2IEVsZW1lbnQvc3RydWN0dXJlIHN0b3JlcywgVlNUMSB2YXJpYW50czwvaDU+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV91MzIgKHVpbnQzMl90ICosIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxX3UxNiAodWludDE2X3QgKiwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFfdTggKHVpbnQ4X3QgKiwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxX3MzMiAoaW50MzJfdCAqLCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxX3MxNiAoaW50MTZfdCAqLCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxX3M4IChpbnQ4X3QgKiwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFfdTY0ICh1aW50NjRfdCAqLCB1aW50NjR4MV90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9zNjQgKGludDY0X3QgKiwgaW50NjR4MV90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9mMzIgKGZsb2F0MzJfdCAqLCBmbG9hdDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFfcDE2IChwb2x5MTZfdCAqLCBwb2x5MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9wOCAocG9seThfdCAqLCBwb2x5OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX3UzMiAodWludDMyX3QgKiwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxcV91MTYgKHVpbnQxNl90ICosIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MXFfdTggKHVpbnQ4X3QgKiwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX3MzMiAoaW50MzJfdCAqLCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MXFfczE2IChpbnQxNl90ICosIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxcV9zOCAoaW50OF90ICosIGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX3U2NCAodWludDY0X3QgKiwgdWludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxcV9zNjQgKGludDY0X3QgKiwgaW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX2YzMiAoZmxvYXQzMl90ICosIGZsb2F0MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX3AxNiAocG9seTE2X3QgKiwgcG9seTE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxcV9wOCAocG9seThfdCAqLCBwb2x5OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9sYW5lX3UzMiAodWludDMyX3QgKiwgdWludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9sYW5lX3UxNiAodWludDE2X3QgKiwgdWludDE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9sYW5lX3U4ICh1aW50OF90ICosIHVpbnQ4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxX2xhbmVfczMyIChpbnQzMl90ICosIGludDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9sYW5lX3MxNiAoaW50MTZfdCAqLCBpbnQxNng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFfbGFuZV9zOCAoaW50OF90ICosIGludDh4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFfbGFuZV9mMzIgKGZsb2F0MzJfdCAqLCBmbG9hdDMyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9sYW5lX3AxNiAocG9seTE2X3QgKiwgcG9seTE2eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9sYW5lX3A4IChwb2x5OF90ICosIHBvbHk4eDhfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxX2xhbmVfczY0IChpbnQ2NF90ICosIGludDY0eDFfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MV9sYW5lX3U2NCAodWludDY0X3QgKiwgdWludDY0eDFfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MXFfbGFuZV91MzIgKHVpbnQzMl90ICosIHVpbnQzMng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX2xhbmVfdTE2ICh1aW50MTZfdCAqLCB1aW50MTZ4OF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxcV9sYW5lX3U4ICh1aW50OF90ICosIHVpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MXFfbGFuZV9zMzIgKGludDMyX3QgKiwgaW50MzJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxcV9sYW5lX3MxNiAoaW50MTZfdCAqLCBpbnQxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX2xhbmVfczggKGludDhfdCAqLCBpbnQ4eDE2X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MXFfbGFuZV9mMzIgKGZsb2F0MzJfdCAqLCBmbG9hdDMyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MXFfbGFuZV9wMTYgKHBvbHkxNl90ICosIHBvbHkxNng4X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX2xhbmVfcDggKHBvbHk4X3QgKiwgcG9seTh4MTZfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QxcV9sYW5lX3M2NCAoaW50NjRfdCAqLCBpbnQ2NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDFxX2xhbmVfdTY0ICh1aW50NjRfdCAqLCB1aW50NjR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuNzcgRWxlbWVudC9zdHJ1Y3R1cmUgbG9hZHMsIFZMRDIgdmFyaWFudHM8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4MngyX3QgdmxkMl91MzIgKGNvbnN0IHVpbnQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0eDJfdCB2bGQyX3UxNiAoY29uc3QgdWludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OHgyX3QgdmxkMl91OCAoY29uc3QgdWludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJ4Ml90IHZsZDJfczMyIChjb25zdCBpbnQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDR4Ml90IHZsZDJfczE2IChjb25zdCBpbnQxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OHgyX3QgdmxkMl9zOCAoY29uc3QgaW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyeDJfdCB2bGQyX2YzMiAoY29uc3QgZmxvYXQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0eDJfdCB2bGQyX3AxNiAoY29uc3QgcG9seTE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OHgyX3QgdmxkMl9wOCAoY29uc3QgcG9seThfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxeDJfdCB2bGQyX3U2NCAoY29uc3QgdWludDY0X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MXgyX3QgdmxkMl9zNjQgKGNvbnN0IGludDY0X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDR4Ml90IHZsZDJxX3UzMiAoY29uc3QgdWludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDh4Ml90IHZsZDJxX3UxNiAoY29uc3QgdWludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZ4Ml90IHZsZDJxX3U4IChjb25zdCB1aW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NHgyX3QgdmxkMnFfczMyIChjb25zdCBpbnQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDh4Ml90IHZsZDJxX3MxNiAoY29uc3QgaW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2eDJfdCB2bGQycV9zOCAoY29uc3QgaW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0eDJfdCB2bGQycV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OHgyX3QgdmxkMnFfcDE2IChjb25zdCBwb2x5MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNngyX3QgdmxkMnFfcDggKGNvbnN0IHBvbHk4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4MngyX3QgdmxkMl9sYW5lX3UzMiAoY29uc3QgdWludDMyX3QgKiwgdWludDMyeDJ4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0eDJfdCB2bGQyX2xhbmVfdTE2IChjb25zdCB1aW50MTZfdCAqLCB1aW50MTZ4NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OHgyX3QgdmxkMl9sYW5lX3U4IChjb25zdCB1aW50OF90ICosIHVpbnQ4eDh4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4MngyX3QgdmxkMl9sYW5lX3MzMiAoY29uc3QgaW50MzJfdCAqLCBpbnQzMngyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0eDJfdCB2bGQyX2xhbmVfczE2IChjb25zdCBpbnQxNl90ICosIGludDE2eDR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OHgyX3QgdmxkMl9sYW5lX3M4IChjb25zdCBpbnQ4X3QgKiwgaW50OHg4eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4MngyX3QgdmxkMl9sYW5lX2YzMiAoY29uc3QgZmxvYXQzMl90ICosIGZsb2F0MzJ4MngyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDR4Ml90IHZsZDJfbGFuZV9wMTYgKGNvbnN0IHBvbHkxNl90ICosIHBvbHkxNng0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4eDJfdCB2bGQyX2xhbmVfcDggKGNvbnN0IHBvbHk4X3QgKiwgcG9seTh4OHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0eDJfdCB2bGQycV9sYW5lX3MzMiAoY29uc3QgaW50MzJfdCAqLCBpbnQzMng0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4eDJfdCB2bGQycV9sYW5lX3MxNiAoY29uc3QgaW50MTZfdCAqLCBpbnQxNng4eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NHgyX3QgdmxkMnFfbGFuZV91MzIgKGNvbnN0IHVpbnQzMl90ICosIHVpbnQzMng0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OHgyX3QgdmxkMnFfbGFuZV91MTYgKGNvbnN0IHVpbnQxNl90ICosIHVpbnQxNng4eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDR4Ml90IHZsZDJxX2xhbmVfZjMyIChjb25zdCBmbG9hdDMyX3QgKiwgZmxvYXQzMng0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OHgyX3QgdmxkMnFfbGFuZV9wMTYgKGNvbnN0IHBvbHkxNl90ICosIHBvbHkxNng4eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4MngyX3QgdmxkMl9kdXBfdTMyIChjb25zdCB1aW50MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDR4Ml90IHZsZDJfZHVwX3UxNiAoY29uc3QgdWludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDh4Ml90IHZsZDJfZHVwX3U4IChjb25zdCB1aW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJ4Ml90IHZsZDJfZHVwX3MzMiAoY29uc3QgaW50MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NHgyX3QgdmxkMl9kdXBfczE2IChjb25zdCBpbnQxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDh4Ml90IHZsZDJfZHVwX3M4IChjb25zdCBpbnQ4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyeDJfdCB2bGQyX2R1cF9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDR4Ml90IHZsZDJfZHVwX3AxNiAoY29uc3QgcG9seTE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDh4Ml90IHZsZDJfZHVwX3A4IChjb25zdCBwb2x5OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxeDJfdCB2bGQyX2R1cF91NjQgKGNvbnN0IHVpbnQ2NF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDF4Ml90IHZsZDJfZHVwX3M2NCAoY29uc3QgaW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy43OCBFbGVtZW50L3N0cnVjdHVyZSBzdG9yZXMsIFZTVDIgdmFyaWFudHM8L2g1PgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJfdTMyICh1aW50MzJfdCAqLCB1aW50MzJ4MngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0Ml91MTYgKHVpbnQxNl90ICosIHVpbnQxNng0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QyX3U4ICh1aW50OF90ICosIHVpbnQ4eDh4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0Ml9zMzIgKGludDMyX3QgKiwgaW50MzJ4MngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0Ml9zMTYgKGludDE2X3QgKiwgaW50MTZ4NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0Ml9zOCAoaW50OF90ICosIGludDh4OHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QyX2YzMiAoZmxvYXQzMl90ICosIGZsb2F0MzJ4MngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0Ml9wMTYgKHBvbHkxNl90ICosIHBvbHkxNng0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QyX3A4IChwb2x5OF90ICosIHBvbHk4eDh4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0Ml91NjQgKHVpbnQ2NF90ICosIHVpbnQ2NHgxeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QyX3M2NCAoaW50NjRfdCAqLCBpbnQ2NHgxeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QycV91MzIgKHVpbnQzMl90ICosIHVpbnQzMng0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QyLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QycV91MTYgKHVpbnQxNl90ICosIHVpbnQxNng4eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QycV91OCAodWludDhfdCAqLCB1aW50OHgxNngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QycV9zMzIgKGludDMyX3QgKiwgaW50MzJ4NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MnFfczE2IChpbnQxNl90ICosIGludDE2eDh4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJxX3M4IChpbnQ4X3QgKiwgaW50OHgxNngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QycV9mMzIgKGZsb2F0MzJfdCAqLCBmbG9hdDMyeDR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJxX3AxNiAocG9seTE2X3QgKiwgcG9seTE2eDh4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJxX3A4IChwb2x5OF90ICosIHBvbHk4eDE2eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QyLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJfbGFuZV91MzIgKHVpbnQzMl90ICosIHVpbnQzMngyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJfbGFuZV91MTYgKHVpbnQxNl90ICosIHVpbnQxNng0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJfbGFuZV91OCAodWludDhfdCAqLCB1aW50OHg4eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0Ml9sYW5lX3MzMiAoaW50MzJfdCAqLCBpbnQzMngyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJfbGFuZV9zMTYgKGludDE2X3QgKiwgaW50MTZ4NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QyLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QyX2xhbmVfczggKGludDhfdCAqLCBpbnQ4eDh4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QyX2xhbmVfZjMyIChmbG9hdDMyX3QgKiwgZmxvYXQzMngyeDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJfbGFuZV9wMTYgKHBvbHkxNl90ICosIHBvbHkxNng0eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJfbGFuZV9wOCAocG9seThfdCAqLCBwb2x5OHg4eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MnFfbGFuZV9zMzIgKGludDMyX3QgKiwgaW50MzJ4NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QyLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QycV9sYW5lX3MxNiAoaW50MTZfdCAqLCBpbnQxNng4eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDJxX2xhbmVfdTMyICh1aW50MzJfdCAqLCB1aW50MzJ4NHgyX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QyLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QycV9sYW5lX3UxNiAodWludDE2X3QgKiwgdWludDE2eDh4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MnFfbGFuZV9mMzIgKGZsb2F0MzJfdCAqLCBmbG9hdDMyeDR4Ml90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0Mi4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0MnFfbGFuZV9wMTYgKHBvbHkxNl90ICosIHBvbHkxNng4eDJfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDIuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy43OSBFbGVtZW50L3N0cnVjdHVyZSBsb2FkcywgVkxEMyB2YXJpYW50czwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyeDNfdCB2bGQzX3UzMiAoY29uc3QgdWludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0eDNfdCB2bGQzX3UxNiAoY29uc3QgdWludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDh4M190IHZsZDNfdTggKGNvbnN0IHVpbnQ4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4MngzX3QgdmxkM19zMzIgKGNvbnN0IGludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDR4M190IHZsZDNfczE2IChjb25zdCBpbnQxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDh4M190IHZsZDNfczggKGNvbnN0IGludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJ4M190IHZsZDNfZjMyIChjb25zdCBmbG9hdDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0eDNfdCB2bGQzX3AxNiAoY29uc3QgcG9seTE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDh4M190IHZsZDNfcDggKGNvbnN0IHBvbHk4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDF4M190IHZsZDNfdTY0IChjb25zdCB1aW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MXgzX3QgdmxkM19zNjQgKGNvbnN0IGludDY0X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0eDNfdCB2bGQzcV91MzIgKGNvbnN0IHVpbnQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OHgzX3QgdmxkM3FfdTE2IChjb25zdCB1aW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZ4M190IHZsZDNxX3U4IChjb25zdCB1aW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDR4M190IHZsZDNxX3MzMiAoY29uc3QgaW50MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OHgzX3QgdmxkM3FfczE2IChjb25zdCBpbnQxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2eDNfdCB2bGQzcV9zOCAoY29uc3QgaW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NHgzX3QgdmxkM3FfZjMyIChjb25zdCBmbG9hdDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4eDNfdCB2bGQzcV9wMTYgKGNvbnN0IHBvbHkxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNngzX3QgdmxkM3FfcDggKGNvbnN0IHBvbHk4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJ4M190IHZsZDNfbGFuZV91MzIgKGNvbnN0IHVpbnQzMl90ICosIHVpbnQzMngyeDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDR4M190IHZsZDNfbGFuZV91MTYgKGNvbnN0IHVpbnQxNl90ICosIHVpbnQxNng0eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OHgzX3QgdmxkM19sYW5lX3U4IChjb25zdCB1aW50OF90ICosIHVpbnQ4eDh4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJ4M190IHZsZDNfbGFuZV9zMzIgKGNvbnN0IGludDMyX3QgKiwgaW50MzJ4MngzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDR4M190IHZsZDNfbGFuZV9zMTYgKGNvbnN0IGludDE2X3QgKiwgaW50MTZ4NHgzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OHgzX3QgdmxkM19sYW5lX3M4IChjb25zdCBpbnQ4X3QgKiwgaW50OHg4eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJ4M190IHZsZDNfbGFuZV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqLCBmbG9hdDMyeDJ4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NHgzX3QgdmxkM19sYW5lX3AxNiAoY29uc3QgcG9seTE2X3QgKiwgcG9seTE2eDR4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4eDNfdCB2bGQzX2xhbmVfcDggKGNvbnN0IHBvbHk4X3QgKiwgcG9seTh4OHgzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NHgzX3QgdmxkM3FfbGFuZV9zMzIgKGNvbnN0IGludDMyX3QgKiwgaW50MzJ4NHgzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDh4M190IHZsZDNxX2xhbmVfczE2IChjb25zdCBpbnQxNl90ICosIGludDE2eDh4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NHgzX3QgdmxkM3FfbGFuZV91MzIgKGNvbnN0IHVpbnQzMl90ICosIHVpbnQzMng0eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDh4M190IHZsZDNxX2xhbmVfdTE2IChjb25zdCB1aW50MTZfdCAqLCB1aW50MTZ4OHgzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NHgzX3QgdmxkM3FfbGFuZV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqLCBmbG9hdDMyeDR4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OHgzX3QgdmxkM3FfbGFuZV9wMTYgKGNvbnN0IHBvbHkxNl90ICosIHBvbHkxNng4eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJ4M190IHZsZDNfZHVwX3UzMiAoY29uc3QgdWludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0eDNfdCB2bGQzX2R1cF91MTYgKGNvbnN0IHVpbnQxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4eDNfdCB2bGQzX2R1cF91OCAoY29uc3QgdWludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyeDNfdCB2bGQzX2R1cF9zMzIgKGNvbnN0IGludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDR4M190IHZsZDNfZHVwX3MxNiAoY29uc3QgaW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4eDNfdCB2bGQzX2R1cF9zOCAoY29uc3QgaW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4MngzX3QgdmxkM19kdXBfZjMyIChjb25zdCBmbG9hdDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0eDNfdCB2bGQzX2R1cF9wMTYgKGNvbnN0IHBvbHkxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMy4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4eDNfdCB2bGQzX2R1cF9wOCAoY29uc3QgcG9seThfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDMuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MXgzX3QgdmxkM19kdXBfdTY0IChjb25zdCB1aW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MXgzX3QgdmxkM19kdXBfczY0IChjb25zdCBpbnQ2NF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkMS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy44MCBFbGVtZW50L3N0cnVjdHVyZSBzdG9yZXMsIFZTVDMgdmFyaWFudHM8L2g1PgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNfdTMyICh1aW50MzJfdCAqLCB1aW50MzJ4MngzX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzX3UxNiAodWludDE2X3QgKiwgdWludDE2eDR4M190KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M191OCAodWludDhfdCAqLCB1aW50OHg4eDNfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M19zMzIgKGludDMyX3QgKiwgaW50MzJ4MngzX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzX3MxNiAoaW50MTZfdCAqLCBpbnQxNng0eDNfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNfczggKGludDhfdCAqLCBpbnQ4eDh4M190KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzX2YzMiAoZmxvYXQzMl90ICosIGZsb2F0MzJ4MngzX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzX3AxNiAocG9seTE2X3QgKiwgcG9seTE2eDR4M190KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M19wOCAocG9seThfdCAqLCBwb2x5OHg4eDNfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M191NjQgKHVpbnQ2NF90ICosIHVpbnQ2NHgxeDNfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNfczY0IChpbnQ2NF90ICosIGludDY0eDF4M190KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M3FfdTMyICh1aW50MzJfdCAqLCB1aW50MzJ4NHgzX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNxX3UxNiAodWludDE2X3QgKiwgdWludDE2eDh4M190KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzcV91OCAodWludDhfdCAqLCB1aW50OHgxNngzX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M3FfczMyIChpbnQzMl90ICosIGludDMyeDR4M190KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzcV9zMTYgKGludDE2X3QgKiwgaW50MTZ4OHgzX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNxX3M4IChpbnQ4X3QgKiwgaW50OHgxNngzX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M3FfZjMyIChmbG9hdDMyX3QgKiwgZmxvYXQzMng0eDNfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M3FfcDE2IChwb2x5MTZfdCAqLCBwb2x5MTZ4OHgzX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNxX3A4IChwb2x5OF90ICosIHBvbHk4eDE2eDNfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzX2xhbmVfdTMyICh1aW50MzJfdCAqLCB1aW50MzJ4MngzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M19sYW5lX3UxNiAodWludDE2X3QgKiwgdWludDE2eDR4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNfbGFuZV91OCAodWludDhfdCAqLCB1aW50OHg4eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNfbGFuZV9zMzIgKGludDMyX3QgKiwgaW50MzJ4MngzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M19sYW5lX3MxNiAoaW50MTZfdCAqLCBpbnQxNng0eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzX2xhbmVfczggKGludDhfdCAqLCBpbnQ4eDh4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M19sYW5lX2YzMiAoZmxvYXQzMl90ICosIGZsb2F0MzJ4MngzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M19sYW5lX3AxNiAocG9seTE2X3QgKiwgcG9seTE2eDR4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNfbGFuZV9wOCAocG9seThfdCAqLCBwb2x5OHg4eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNxX2xhbmVfczMyIChpbnQzMl90ICosIGludDMyeDR4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNxX2xhbmVfczE2IChpbnQxNl90ICosIGludDE2eDh4M190LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0My4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDNxX2xhbmVfdTMyICh1aW50MzJfdCAqLCB1aW50MzJ4NHgzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M3FfbGFuZV91MTYgKHVpbnQxNl90ICosIHVpbnQxNng4eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3QzcV9sYW5lX2YzMiAoZmxvYXQzMl90ICosIGZsb2F0MzJ4NHgzX3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3QzLjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0M3FfbGFuZV9wMTYgKHBvbHkxNl90ICosIHBvbHkxNng4eDNfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDMuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuODEgRWxlbWVudC9zdHJ1Y3R1cmUgbG9hZHMsIFZMRDQgdmFyaWFudHM8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Mng0X3QgdmxkNF91MzIgKGNvbnN0IHVpbnQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDR4NF90IHZsZDRfdTE2IChjb25zdCB1aW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDh4NF90IHZsZDRfdTggKGNvbnN0IHVpbnQ4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJ4NF90IHZsZDRfczMyIChjb25zdCBpbnQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NHg0X3QgdmxkNF9zMTYgKGNvbnN0IGludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDh4NF90IHZsZDRfczggKGNvbnN0IGludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyeDRfdCB2bGQ0X2YzMiAoY29uc3QgZmxvYXQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDR4NF90IHZsZDRfcDE2IChjb25zdCBwb2x5MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDh4NF90IHZsZDRfcDggKGNvbnN0IHBvbHk4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxeDRfdCB2bGQ0X3U2NCAoY29uc3QgdWludDY0X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQxLjY0IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxeDRfdCB2bGQ0X3M2NCAoY29uc3QgaW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0eDRfdCB2bGQ0cV91MzIgKGNvbnN0IHVpbnQzMl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDh4NF90IHZsZDRxX3UxNiAoY29uc3QgdWludDE2X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNng0X3QgdmxkNHFfdTggKGNvbnN0IHVpbnQ4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDR4NF90IHZsZDRxX3MzMiAoY29uc3QgaW50MzJfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDh4NF90IHZsZDRxX3MxNiAoY29uc3QgaW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZ4NF90IHZsZDRxX3M4IChjb25zdCBpbnQ4X3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NHg0X3QgdmxkNHFfZjMyIChjb25zdCBmbG9hdDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OHg0X3QgdmxkNHFfcDE2IChjb25zdCBwb2x5MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDE2eDRfdCB2bGQ0cV9wOCAoY29uc3QgcG9seThfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJ4NF90IHZsZDRfbGFuZV91MzIgKGNvbnN0IHVpbnQzMl90ICosIHVpbnQzMngyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0eDRfdCB2bGQ0X2xhbmVfdTE2IChjb25zdCB1aW50MTZfdCAqLCB1aW50MTZ4NHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4eDRfdCB2bGQ0X2xhbmVfdTggKGNvbnN0IHVpbnQ4X3QgKiwgdWludDh4OHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJ4NF90IHZsZDRfbGFuZV9zMzIgKGNvbnN0IGludDMyX3QgKiwgaW50MzJ4Mng0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0eDRfdCB2bGQ0X2xhbmVfczE2IChjb25zdCBpbnQxNl90ICosIGludDE2eDR4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4eDRfdCB2bGQ0X2xhbmVfczggKGNvbnN0IGludDhfdCAqLCBpbnQ4eDh4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJ4NF90IHZsZDRfbGFuZV9mMzIgKGNvbnN0IGZsb2F0MzJfdCAqLCBmbG9hdDMyeDJ4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDR4NF90IHZsZDRfbGFuZV9wMTYgKGNvbnN0IHBvbHkxNl90ICosIHBvbHkxNng0eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDh4NF90IHZsZDRfbGFuZV9wOCAoY29uc3QgcG9seThfdCAqLCBwb2x5OHg4eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NHg0X3QgdmxkNHFfbGFuZV9zMzIgKGNvbnN0IGludDMyX3QgKiwgaW50MzJ4NHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4eDRfdCB2bGQ0cV9sYW5lX3MxNiAoY29uc3QgaW50MTZfdCAqLCBpbnQxNng4eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0eDRfdCB2bGQ0cV9sYW5lX3UzMiAoY29uc3QgdWludDMyX3QgKiwgdWludDMyeDR4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDh4NF90IHZsZDRxX2xhbmVfdTE2IChjb25zdCB1aW50MTZfdCAqLCB1aW50MTZ4OHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDR4NF90IHZsZDRxX2xhbmVfZjMyIChjb25zdCBmbG9hdDMyX3QgKiwgZmxvYXQzMng0eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4eDRfdCB2bGQ0cV9sYW5lX3AxNiAoY29uc3QgcG9seTE2X3QgKiwgcG9seTE2eDh4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJ4NF90IHZsZDRfZHVwX3UzMiAoY29uc3QgdWludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0eDRfdCB2bGQ0X2R1cF91MTYgKGNvbnN0IHVpbnQxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4eDRfdCB2bGQ0X2R1cF91OCAoY29uc3QgdWludDhfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyeDRfdCB2bGQ0X2R1cF9zMzIgKGNvbnN0IGludDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDR4NF90IHZsZDRfZHVwX3MxNiAoY29uc3QgaW50MTZfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+W10sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+W119LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4eDRfdCB2bGQ0X2R1cF9zOCAoY29uc3QgaW50OF90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Mng0X3QgdmxkNF9kdXBfZjMyIChjb25zdCBmbG9hdDMyX3QgKikKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52bGQ0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPltdLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPltdfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0eDRfdCB2bGQ0X2R1cF9wMTYgKGNvbnN0IHBvbHkxNl90ICopCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmxkNC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4eDRfdCB2bGQ0X2R1cF9wOCAoY29uc3QgcG9seThfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bXSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bXX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MXg0X3QgdmxkNF9kdXBfdTY0IChjb25zdCB1aW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDF4NF90IHZsZDRfZHVwX3M2NCAoY29uc3QgaW50NjRfdCAqKQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZsZDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjgyIEVsZW1lbnQvc3RydWN0dXJlIHN0b3JlcywgVlNUNCB2YXJpYW50czwvaDU+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NF91MzIgKHVpbnQzMl90ICosIHVpbnQzMngyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDRfdTE2ICh1aW50MTZfdCAqLCB1aW50MTZ4NHg0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0X3U4ICh1aW50OF90ICosIHVpbnQ4eDh4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0X3MzMiAoaW50MzJfdCAqLCBpbnQzMngyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDRfczE2IChpbnQxNl90ICosIGludDE2eDR4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NF9zOCAoaW50OF90ICosIGludDh4OHg0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDRfZjMyIChmbG9hdDMyX3QgKiwgZmxvYXQzMngyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDRfcDE2IChwb2x5MTZfdCAqLCBwb2x5MTZ4NHg0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0X3A4IChwb2x5OF90ICosIHBvbHk4eDh4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0X3U2NCAodWludDY0X3QgKiwgdWludDY0eDF4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDEuNjQgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NF9zNjQgKGludDY0X3QgKiwgaW50NjR4MXg0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0MS42NCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV91MzIgKHVpbnQzMl90ICosIHVpbnQzMng0eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDRxX3UxNiAodWludDE2X3QgKiwgdWludDE2eDh4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NHFfdTggKHVpbnQ4X3QgKiwgdWludDh4MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV9zMzIgKGludDMyX3QgKiwgaW50MzJ4NHg0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV9zMTYgKGludDE2X3QgKiwgaW50MTZ4OHg0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV9zOCAoaW50OF90ICosIGludDh4MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV9mMzIgKGZsb2F0MzJfdCAqLCBmbG9hdDMyeDR4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+fSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NHFfcDE2IChwb2x5MTZfdCAqLCBwb2x5MTZ4OHg0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT59LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV9wOCAocG9seThfdCAqLCBwb2x5OHgxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC44IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPn0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDRfbGFuZV91MzIgKHVpbnQzMl90ICosIHVpbnQzMngyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NF9sYW5lX3UxNiAodWludDE2X3QgKiwgdWludDE2eDR4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0X2xhbmVfdTggKHVpbnQ4X3QgKiwgdWludDh4OHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NF9sYW5lX3MzMiAoaW50MzJfdCAqLCBpbnQzMngyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NF9sYW5lX3MxNiAoaW50MTZfdCAqLCBpbnQxNng0eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuMTYgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NF9sYW5lX3M4IChpbnQ4X3QgKiwgaW50OHg4eDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuOCB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0X2xhbmVfZjMyIChmbG9hdDMyX3QgKiwgZmxvYXQzMngyeDRfdCwgY29uc3QgaW50KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZzdDQuMzIgezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NF9sYW5lX3AxNiAocG9seTE2X3QgKiwgcG9seTE2eDR4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0X2xhbmVfcDggKHBvbHk4X3QgKiwgcG9seTh4OHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjggezwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMTwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDI8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQzPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dfSwgWzwvY29kZT48dmFyPnIwPC92YXI+PGNvZGU+XTwvY29kZT4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnZvaWQgdnN0NHFfbGFuZV9zMzIgKGludDMyX3QgKiwgaW50MzJ4NHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDRxX2xhbmVfczE2IChpbnQxNl90ICosIGludDE2eDh4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV9sYW5lX3UzMiAodWludDMyX3QgKiwgdWludDMyeDR4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4zMiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV9sYW5lX3UxNiAodWludDE2X3QgKiwgdWludDE2eDh4NF90LCBjb25zdCBpbnQpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dnN0NC4xNiB7PC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQxPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMjwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDM8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl19LCBbPC9jb2RlPjx2YXI+cjA8L3Zhcj48Y29kZT5dPC9jb2RlPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dm9pZCB2c3Q0cV9sYW5lX2YzMiAoZmxvYXQzMl90ICosIGZsb2F0MzJ4NHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjMyIHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT52b2lkIHZzdDRxX2xhbmVfcDE2IChwb2x5MTZfdCAqLCBwb2x5MTZ4OHg0X3QsIGNvbnN0IGludCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52c3Q0LjE2IHs8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XSwgPC9jb2RlPjx2YXI+ZDE8L3Zhcj48Y29kZT5bPC9jb2RlPjx2YXI+MDwvdmFyPjxjb2RlPl0sIDwvY29kZT48dmFyPmQyPC92YXI+PGNvZGU+WzwvY29kZT48dmFyPjA8L3Zhcj48Y29kZT5dLCA8L2NvZGU+PHZhcj5kMzwvdmFyPjxjb2RlPls8L2NvZGU+PHZhcj4wPC92YXI+PGNvZGU+XX0sIFs8L2NvZGU+PHZhcj5yMDwvdmFyPjxjb2RlPl08L2NvZGU+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy44MyBMb2dpY2FsIG9wZXJhdGlvbnMgKEFORCk8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZhbmRfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhbmQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2YW5kX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YW5kIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2YW5kX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YW5kIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2YW5kX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFuZCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmFuZF9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhbmQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmFuZF9zOCAoaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhbmQgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2YW5kX3U2NCAodWludDY0eDFfdCwgdWludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2YW5kX3M2NCAoaW50NjR4MV90LCBpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZhbmRxX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YW5kIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmFuZHFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhbmQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2YW5kcV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YW5kIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2YW5kcV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhbmQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZhbmRxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFuZCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdmFuZHFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZhbmQgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2YW5kcV91NjQgKHVpbnQ2NHgyX3QsIHVpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmFuZCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmFuZHFfczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YW5kIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjg0IExvZ2ljYWwgb3BlcmF0aW9ucyAoT1IpPC9oNT4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2b3JyX3UzMiAodWludDMyeDJfdCwgdWludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3Qgdm9ycl91MTYgKHVpbnQxNng0X3QsIHVpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9yciA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3Qgdm9ycl91OCAodWludDh4OF90LCB1aW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9yciA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3Qgdm9ycl9zMzIgKGludDMyeDJfdCwgaW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZvcnIgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZvcnJfczE2IChpbnQxNng0X3QsIGludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZvcnJfczggKGludDh4OF90LCBpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JyIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3Qgdm9ycl91NjQgKHVpbnQ2NHgxX3QsIHVpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3Qgdm9ycl9zNjQgKGludDY0eDFfdCwgaW50NjR4MV90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2b3JycV91MzIgKHVpbnQzMng0X3QsIHVpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9yciA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZvcnJxX3UxNiAodWludDE2eDhfdCwgdWludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3Qgdm9ycnFfdTggKHVpbnQ4eDE2X3QsIHVpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9yciA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3Qgdm9ycnFfczMyIChpbnQzMng0X3QsIGludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2b3JycV9zMTYgKGludDE2eDhfdCwgaW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZvcnIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZvcnJxX3M4IChpbnQ4eDE2X3QsIGludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JyIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3Qgdm9ycnFfdTY0ICh1aW50NjR4Ml90LCB1aW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZvcnIgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZvcnJxX3M2NCAoaW50NjR4Ml90LCBpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9yciA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMy44NSBMb2dpY2FsIG9wZXJhdGlvbnMgKGV4Y2x1c2l2ZSBPUik8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZlb3JfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZlb3IgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2ZW9yX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZW9yIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2ZW9yX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZW9yIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2ZW9yX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmVvciA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmVvcl9zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZlb3IgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmVvcl9zOCAoaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZlb3IgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2ZW9yX3U2NCAodWludDY0eDFfdCwgdWludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2ZW9yX3M2NCAoaW50NjR4MV90LCBpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZlb3JxX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZW9yIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmVvcnFfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZlb3IgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2ZW9ycV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZW9yIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2ZW9ycV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZlb3IgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZlb3JxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmVvciA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdmVvcnFfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZlb3IgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2ZW9ycV91NjQgKHVpbnQ2NHgyX3QsIHVpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmVvciA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmVvcnFfczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52ZW9yIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjg2IExvZ2ljYWwgb3BlcmF0aW9ucyAoQU5ELU5PVCk8L2g1PgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZiaWNfdTMyICh1aW50MzJ4Ml90LCB1aW50MzJ4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZiaWMgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2YmljX3UxNiAodWludDE2eDRfdCwgdWludDE2eDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YmljIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2YmljX3U4ICh1aW50OHg4X3QsIHVpbnQ4eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YmljIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2YmljX3MzMiAoaW50MzJ4Ml90LCBpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJpYyA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdmJpY19zMTYgKGludDE2eDRfdCwgaW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZiaWMgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdmJpY19zOCAoaW50OHg4X3QsIGludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZiaWMgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2YmljX3U2NCAodWludDY0eDFfdCwgdWludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2YmljX3M2NCAoaW50NjR4MV90LCBpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZiaWNxX3UzMiAodWludDMyeDRfdCwgdWludDMyeDRfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YmljIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdmJpY3FfdTE2ICh1aW50MTZ4OF90LCB1aW50MTZ4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZiaWMgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2YmljcV91OCAodWludDh4MTZfdCwgdWludDh4MTZfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YmljIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2YmljcV9zMzIgKGludDMyeDRfdCwgaW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZiaWMgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZiaWNxX3MxNiAoaW50MTZ4OF90LCBpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJpYyA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdmJpY3FfczggKGludDh4MTZfdCwgaW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZiaWMgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2YmljcV91NjQgKHVpbnQ2NHgyX3QsIHVpbnQ2NHgyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dmJpYyA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdmJpY3FfczY0IChpbnQ2NHgyX3QsIGludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52YmljIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4zLjg3IExvZ2ljYWwgb3BlcmF0aW9ucyAoT1ItTk9UKTwvaDU+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3Qgdm9ybl91MzIgKHVpbnQzMngyX3QsIHVpbnQzMngyX3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9ybiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZvcm5fdTE2ICh1aW50MTZ4NF90LCB1aW50MTZ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZvcm4gPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZvcm5fdTggKHVpbnQ4eDhfdCwgdWludDh4OF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZvcm4gPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZvcm5fczMyIChpbnQzMngyX3QsIGludDMyeDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JuIDwvY29kZT48dmFyPmQwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2b3JuX3MxNiAoaW50MTZ4NF90LCBpbnQxNng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9ybiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2b3JuX3M4IChpbnQ4eDhfdCwgaW50OHg4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9ybiA8L2NvZGU+PHZhcj5kMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZDA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmQwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZvcm5fdTY0ICh1aW50NjR4MV90LCB1aW50NjR4MV90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZvcm5fczY0IChpbnQ2NHgxX3QsIGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3Qgdm9ybnFfdTMyICh1aW50MzJ4NF90LCB1aW50MzJ4NF90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZvcm4gPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2b3JucV91MTYgKHVpbnQxNng4X3QsIHVpbnQxNng4X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9ybiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZvcm5xX3U4ICh1aW50OHgxNl90LCB1aW50OHgxNl90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZvcm4gPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZvcm5xX3MzMiAoaW50MzJ4NF90LCBpbnQzMng0X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9ybiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3Qgdm9ybnFfczE2IChpbnQxNng4X3QsIGludDE2eDhfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JuIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2b3JucV9zOCAoaW50OHgxNl90LCBpbnQ4eDE2X3QpCis8YnI+PGVtPkZvcm0gb2YgZXhwZWN0ZWQgaW5zdHJ1Y3Rpb24ocyk6PC9lbT4gPGNvZGU+dm9ybiA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+Cis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZvcm5xX3U2NCAodWludDY0eDJfdCwgdWludDY0eDJfdCkKKzxicj48ZW0+Rm9ybSBvZiBleHBlY3RlZCBpbnN0cnVjdGlvbihzKTo8L2VtPiA8Y29kZT52b3JuIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+cTA8L3Zhcj4KKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2b3JucV9zNjQgKGludDY0eDJfdCwgaW50NjR4Ml90KQorPGJyPjxlbT5Gb3JtIG9mIGV4cGVjdGVkIGluc3RydWN0aW9uKHMpOjwvZW0+IDxjb2RlPnZvcm4gPC9jb2RlPjx2YXI+cTA8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnEwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5xMDwvdmFyPgorPC91bD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjMuODggUmVpbnRlcnByZXQgY2FzdHM8L2g1PgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3UzMiAodWludDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTE2ICh1aW50MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZyZWludGVycHJldF9wOF91OCAodWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZyZWludGVycHJldF9wOF9zMzIgKGludDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfczE2IChpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHg4X3QgdnJlaW50ZXJwcmV0X3A4X3M4IChpbnQ4eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfdTY0ICh1aW50NjR4MV90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4OF90IHZyZWludGVycHJldF9wOF9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfZjMyIChmbG9hdDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDhfdCB2cmVpbnRlcnByZXRfcDhfcDE2IChwb2x5MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTh4MTZfdCB2cmVpbnRlcnByZXRxX3A4X3UzMiAodWludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91MTYgKHVpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfdTggKHVpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczMyIChpbnQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczE2IChpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczggKGludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF91NjQgKHVpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfczY0IChpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5OHgxNl90IHZyZWludGVycHJldHFfcDhfZjMyIChmbG9hdDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHk4eDE2X3QgdnJlaW50ZXJwcmV0cV9wOF9wMTYgKHBvbHkxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfdTMyICh1aW50MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3UxNiAodWludDE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91OCAodWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MzMiAoaW50MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3MxNiAoaW50MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDRfdCB2cmVpbnRlcnByZXRfcDE2X3M4IChpbnQ4eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl91NjQgKHVpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfczY0IChpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4NF90IHZyZWludGVycHJldF9wMTZfZjMyIChmbG9hdDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng0X3QgdnJlaW50ZXJwcmV0X3AxNl9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl91MzIgKHVpbnQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3UxNiAodWludDE2eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTggKHVpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5wb2x5MTZ4OF90IHZyZWludGVycHJldHFfcDE2X3MzMiAoaW50MzJ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zMTYgKGludDE2eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfczggKGludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfdTY0ICh1aW50NjR4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+cG9seTE2eDhfdCB2cmVpbnRlcnByZXRxX3AxNl9zNjQgKGludDY0eDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfZjMyIChmbG9hdDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnBvbHkxNng4X3QgdnJlaW50ZXJwcmV0cV9wMTZfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3UzMiAodWludDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTE2ICh1aW50MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl91OCAodWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zMzIgKGludDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfczE2IChpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDJfdCB2cmVpbnRlcnByZXRfZjMyX3M4IChpbnQ4eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfdTY0ICh1aW50NjR4MV90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4Ml90IHZyZWludGVycHJldF9mMzJfcDE2IChwb2x5MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMngyX3QgdnJlaW50ZXJwcmV0X2YzMl9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTMyICh1aW50MzJ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTE2ICh1aW50MTZ4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfdTggKHVpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5mbG9hdDMyeDRfdCB2cmVpbnRlcnByZXRxX2YzMl9zMzIgKGludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3MxNiAoaW50MTZ4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfczggKGludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3U2NCAodWludDY0eDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmZsb2F0MzJ4NF90IHZyZWludGVycHJldHFfZjMyX3M2NCAoaW50NjR4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDE2IChwb2x5MTZ4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+ZmxvYXQzMng0X3QgdnJlaW50ZXJwcmV0cV9mMzJfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MzIgKHVpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91MTYgKHVpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF91OCAodWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4MV90IHZyZWludGVycHJldF9zNjRfczMyIChpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9zMTYgKGludDE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3M4IChpbnQ4eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X3U2NCAodWludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDFfdCB2cmVpbnRlcnByZXRfczY0X2YzMiAoZmxvYXQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wMTYgKHBvbHkxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3M2NF9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50NjR4Ml90IHZyZWludGVycHJldHFfczY0X3UzMiAodWludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91MTYgKHVpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfdTggKHVpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczMyIChpbnQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczE2IChpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfczggKGludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF91NjQgKHVpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfZjMyIChmbG9hdDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDY0eDJfdCB2cmVpbnRlcnByZXRxX3M2NF9wMTYgKHBvbHkxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV9zNjRfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4MV90IHZyZWludGVycHJldF91NjRfdTMyICh1aW50MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3UxNiAodWludDE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF91OCAodWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MzMiAoaW50MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3MxNiAoaW50MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3M4IChpbnQ4eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9mMzIgKGZsb2F0MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDFfdCB2cmVpbnRlcnByZXRfdTY0X3AxNiAocG9seTE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgxX3QgdnJlaW50ZXJwcmV0X3U2NF9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF91MzIgKHVpbnQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3UxNiAodWludDE2eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfdTggKHVpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3MzMiAoaW50MzJ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDY0eDJfdCB2cmVpbnRlcnByZXRxX3U2NF9zMTYgKGludDE2eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczggKGludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfczY0IChpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X2YzMiAoZmxvYXQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50NjR4Ml90IHZyZWludGVycHJldHFfdTY0X3AxNiAocG9seTE2eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ2NHgyX3QgdnJlaW50ZXJwcmV0cV91NjRfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDhfdCB2cmVpbnRlcnByZXRfczhfdTMyICh1aW50MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3UxNiAodWludDE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZyZWludGVycHJldF9zOF91OCAodWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MzMiAoaW50MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3MxNiAoaW50MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3U2NCAodWludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZyZWludGVycHJldF9zOF9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZyZWludGVycHJldF9zOF9mMzIgKGZsb2F0MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHg4X3QgdnJlaW50ZXJwcmV0X3M4X3AxNiAocG9seTE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4OF90IHZyZWludGVycHJldF9zOF9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTMyICh1aW50MzJ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTE2ICh1aW50MTZ4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTggKHVpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9zMzIgKGludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDh4MTZfdCB2cmVpbnRlcnByZXRxX3M4X3MxNiAoaW50MTZ4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyZWludGVycHJldHFfczhfdTY0ICh1aW50NjR4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyZWludGVycHJldHFfczhfczY0IChpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV9zOF9mMzIgKGZsb2F0MzJ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDE2IChwb2x5MTZ4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50OHgxNl90IHZyZWludGVycHJldHFfczhfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MzIgKHVpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91MTYgKHVpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91OCAodWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4NF90IHZyZWludGVycHJldF9zMTZfczMyIChpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zOCAoaW50OHg4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl91NjQgKHVpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDRfdCB2cmVpbnRlcnByZXRfczE2X2YzMiAoZmxvYXQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wMTYgKHBvbHkxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng0X3QgdnJlaW50ZXJwcmV0X3MxNl9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MTZ4OF90IHZyZWludGVycHJldHFfczE2X3UzMiAodWludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91MTYgKHVpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfdTggKHVpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczMyIChpbnQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczggKGludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl91NjQgKHVpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfczY0IChpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfZjMyIChmbG9hdDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDE2eDhfdCB2cmVpbnRlcnByZXRxX3MxNl9wMTYgKHBvbHkxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQxNng4X3QgdnJlaW50ZXJwcmV0cV9zMTZfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MzIgKHVpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91MTYgKHVpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91OCAodWludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4Ml90IHZyZWludGVycHJldF9zMzJfczE2IChpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zOCAoaW50OHg4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl91NjQgKHVpbnQ2NHgxX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDJfdCB2cmVpbnRlcnByZXRfczMyX2YzMiAoZmxvYXQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wMTYgKHBvbHkxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMngyX3QgdnJlaW50ZXJwcmV0X3MzMl9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+aW50MzJ4NF90IHZyZWludGVycHJldHFfczMyX3UzMiAodWludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91MTYgKHVpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfdTggKHVpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczE2IChpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczggKGludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl91NjQgKHVpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfczY0IChpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfZjMyIChmbG9hdDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPmludDMyeDRfdCB2cmVpbnRlcnByZXRxX3MzMl9wMTYgKHBvbHkxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT5pbnQzMng0X3QgdnJlaW50ZXJwcmV0cV9zMzJfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3UzMiAodWludDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTE2ICh1aW50MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZyZWludGVycHJldF91OF9zMzIgKGludDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfczE2IChpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHg4X3QgdnJlaW50ZXJwcmV0X3U4X3M4IChpbnQ4eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfdTY0ICh1aW50NjR4MV90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZyZWludGVycHJldF91OF9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfZjMyIChmbG9hdDMyeDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDhfdCB2cmVpbnRlcnByZXRfdThfcDE2IChwb2x5MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4OF90IHZyZWludGVycHJldF91OF9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDh4MTZfdCB2cmVpbnRlcnByZXRxX3U4X3UzMiAodWludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91MTYgKHVpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczMyIChpbnQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczE2IChpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczggKGludDh4MTZfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF91NjQgKHVpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZyZWludGVycHJldHFfdThfczY0IChpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZyZWludGVycHJldHFfdThfZjMyIChmbG9hdDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQ4eDE2X3QgdnJlaW50ZXJwcmV0cV91OF9wMTYgKHBvbHkxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50OHgxNl90IHZyZWludGVycHJldHFfdThfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfdTMyICh1aW50MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U4ICh1aW50OHg4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczMyIChpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczE2IChpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4NF90IHZyZWludGVycHJldF91MTZfczggKGludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3U2NCAodWludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9mMzIgKGZsb2F0MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDRfdCB2cmVpbnRlcnByZXRfdTE2X3AxNiAocG9seTE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng0X3QgdnJlaW50ZXJwcmV0X3UxNl9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl91MzIgKHVpbnQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U4ICh1aW50OHgxNl90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDE2eDhfdCB2cmVpbnRlcnByZXRxX3UxNl9zMzIgKGludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczE2IChpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3M4IChpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3U2NCAodWludDY0eDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfczY0IChpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X2YzMiAoZmxvYXQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MTZ4OF90IHZyZWludGVycHJldHFfdTE2X3AxNiAocG9seTE2eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQxNng4X3QgdnJlaW50ZXJwcmV0cV91MTZfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfdTE2ICh1aW50MTZ4NF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U4ICh1aW50OHg4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczMyIChpbnQzMngyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczE2IChpbnQxNng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4Ml90IHZyZWludGVycHJldF91MzJfczggKGludDh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3U2NCAodWludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9zNjQgKGludDY0eDFfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9mMzIgKGZsb2F0MzJ4Ml90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDJfdCB2cmVpbnRlcnByZXRfdTMyX3AxNiAocG9seTE2eDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMngyX3QgdnJlaW50ZXJwcmV0X3UzMl9wOCAocG9seTh4OF90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl91MTYgKHVpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U4ICh1aW50OHgxNl90KQorPC91bD4KKworICAgICA8dWw+Cis8bGk+dWludDMyeDRfdCB2cmVpbnRlcnByZXRxX3UzMl9zMzIgKGludDMyeDRfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczE2IChpbnQxNng4X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3M4IChpbnQ4eDE2X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3U2NCAodWludDY0eDJfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfczY0IChpbnQ2NHgyX3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX2YzMiAoZmxvYXQzMng0X3QpCis8L3VsPgorCisgICAgIDx1bD4KKzxsaT51aW50MzJ4NF90IHZyZWludGVycHJldHFfdTMyX3AxNiAocG9seTE2eDhfdCkKKzwvdWw+CisKKyAgICAgPHVsPgorPGxpPnVpbnQzMng0X3QgdnJlaW50ZXJwcmV0cV91MzJfcDggKHBvbHk4eDE2X3QpCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BUk0tT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BUk0tT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZTE5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FSTS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwzNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFSTSBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIiB0aXRsZT0iQWRhcHRldmEgRXBpcGhhbnkgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiIHRpdGxlPSJBVlIgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUk0tT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj5BVlIgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIj5BZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjMgQVJNIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1BUk0tb3B0aW9ucy0xMTE1Ij48L2E+CitUaGVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIEFkdmFuY2VkIFJJU0MgTWFjaGluZXMgKEFSTSkKK2FyY2hpdGVjdHVyZXM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tYWJpPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFiaS0xMTE2Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBBQkkuICBQZXJtaXNzaWJsZSB2YWx1ZXMgYXJlOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFwY3MtZ251PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hdHBjczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hYXBjczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hYXBjcy1saW51eDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pd21teHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFwY3MtZnJhbWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hcGNzXzAwMmRmcmFtZS0xMTE3Ij48L2E+R2VuZXJhdGUgYSBzdGFjayBmcmFtZSB0aGF0IGlzIGNvbXBsaWFudCB3aXRoIHRoZSBBUk0gUHJvY2VkdXJlIENhbGwKK1N0YW5kYXJkIGZvciBhbGwgZnVuY3Rpb25zLCBldmVuIGlmIHRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IKK2NvcnJlY3QgZXhlY3V0aW9uIG9mIHRoZSBjb2RlLiAgU3BlY2lmeWluZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9taXQtZnJhbWUtcG9pbnRlcjwvc3Bhbj48L3NhbXA+Cit3aXRoIHRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgc3RhY2sgZnJhbWVzIG5vdCB0byBiZSBnZW5lcmF0ZWQgZm9yCitsZWFmIGZ1bmN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tYXBjcy1mcmFtZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hcGNzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYXBjcy0xMTE4Ij48L2E+VGhpcyBpcyBhIHN5bm9ueW0gZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXBjcy1mcmFtZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10aHVtYi1pbnRlcndvcms8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW10aHVtYl8wMDJkaW50ZXJ3b3JrLTExMTkiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgc3VwcG9ydHMgY2FsbGluZyBiZXR3ZWVuIHRoZSBBUk0gYW5kIFRodW1iCitpbnN0cnVjdGlvbiBzZXRzLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwgb24gcHJlLXY1IGFyY2hpdGVjdHVyZXMsIHRoZQordHdvIGluc3RydWN0aW9uIHNldHMgY2Fubm90IGJlIHJlbGlhYmx5IHVzZWQgaW5zaWRlIG9uZSBwcm9ncmFtLiAgVGhlCitkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tdGh1bWItaW50ZXJ3b3JrPC9zcGFuPjwvc2FtcD4sIHNpbmNlIHNsaWdodGx5IGxhcmdlciBjb2RlCitpcyBnZW5lcmF0ZWQgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXRodW1iLWludGVyd29yazwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZC4gIEluIEFBUENTCitjb25maWd1cmF0aW9ucyB0aGlzIG9wdGlvbiBpcyBtZWFuaW5nbGVzcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tc2NoZWQtcHJvbG9nPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHNjaGVkXzAwMmRwcm9sb2ctMTEyMCI+PC9hPlByZXZlbnQgdGhlIHJlb3JkZXJpbmcgb2YgaW5zdHJ1Y3Rpb25zIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSwgb3IgdGhlCittZXJnaW5nIG9mIHRob3NlIGluc3RydWN0aW9uIHdpdGggdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgZnVuY3Rpb24ncworYm9keS4gIFRoaXMgbWVhbnMgdGhhdCBhbGwgZnVuY3Rpb25zIHN0YXJ0IHdpdGggYSByZWNvZ25pemFibGUgc2V0CitvZiBpbnN0cnVjdGlvbnMgKG9yIGluIGZhY3Qgb25lIG9mIGEgY2hvaWNlIGZyb20gYSBzbWFsbCBzZXQgb2YKK2RpZmZlcmVudCBmdW5jdGlvbiBwcm9sb2d1ZXMpLCBhbmQgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0bworbG9jYXRlIHRoZSBzdGFydCBvZiBmdW5jdGlvbnMgaW5zaWRlIGFuIGV4ZWN1dGFibGUgcGllY2Ugb2YgY29kZS4gIFRoZQorZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNjaGVkLXByb2xvZzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mbG9hdC1hYmk9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tZmxvYXRfMDAyZGFiaS0xMTIxIj48L2E+U3BlY2lmaWVzIHdoaWNoIGZsb2F0aW5nLXBvaW50IEFCSSB0byB1c2UuICBQZXJtaXNzaWJsZSB2YWx1ZXMKK2FyZTogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zb2Z0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNvZnRmcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5oYXJkPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPlNwZWNpZnlpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zb2Z0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhdXNlcyBHQ0MgdG8gZ2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcKK2xpYnJhcnkgY2FsbHMgZm9yIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zb2Z0ZnA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWxsb3dzIHRoZSBnZW5lcmF0aW9uIG9mIGNvZGUgdXNpbmcgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQKK2luc3RydWN0aW9ucywgYnV0IHN0aWxsIHVzZXMgdGhlIHNvZnQtZmxvYXQgY2FsbGluZyBjb252ZW50aW9ucy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmhhcmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWxsb3dzIGdlbmVyYXRpb24gb2YgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zCithbmQgdXNlcyBGUFUtc3BlY2lmaWMgY2FsbGluZyBjb252ZW50aW9ucy4KKworICAgICA8cD5UaGUgZGVmYXVsdCBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyB0YXJnZXQgY29uZmlndXJhdGlvbi4gIE5vdGUgdGhhdAordGhlIGhhcmQtZmxvYXQgYW5kIHNvZnQtZmxvYXQgQUJJcyBhcmUgbm90IGxpbmstY29tcGF0aWJsZTsgeW91IG11c3QKK2NvbXBpbGUgeW91ciBlbnRpcmUgcHJvZ3JhbSB3aXRoIHRoZSBzYW1lIEFCSSwgYW5kIGxpbmsgd2l0aCBhCitjb21wYXRpYmxlIHNldCBvZiBsaWJyYXJpZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxpdHRsZS1lbmRpYW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1saXR0bGVfMDAyZGVuZGlhbi0xMTIyIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSBwcm9jZXNzb3IgcnVubmluZyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuICBUaGlzIGlzCit0aGUgZGVmYXVsdCBmb3IgYWxsIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1iaWctZW5kaWFuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYmlnXzAwMmRlbmRpYW4tMTEyMyI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIGEgcHJvY2Vzc29yIHJ1bm5pbmcgaW4gYmlnLWVuZGlhbiBtb2RlOyB0aGUgZGVmYXVsdCBpcwordG8gY29tcGlsZSBjb2RlIGZvciBhIGxpdHRsZS1lbmRpYW4gcHJvY2Vzc29yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW13b3Jkcy1saXR0bGUtZW5kaWFuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1td29yZHNfMDAyZGxpdHRsZV8wMDJkZW5kaWFuLTExMjQiPjwvYT5UaGlzIG9wdGlvbiBvbmx5IGFwcGxpZXMgd2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yIGJpZy1lbmRpYW4gcHJvY2Vzc29ycy4gCitHZW5lcmF0ZSBjb2RlIGZvciBhIGxpdHRsZS1lbmRpYW4gd29yZCBvcmRlciBidXQgYSBiaWctZW5kaWFuIGJ5dGUKK29yZGVyLiAgVGhhdCBpcywgYSBieXRlIG9yZGVyIG9mIHRoZSBmb3JtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MzIxMDc2NTQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBOb3RlOiB0aGlzCitvcHRpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgcmVxdWlyZSBjb21wYXRpYmlsaXR5IHdpdGggY29kZSBmb3IKK2JpZy1lbmRpYW4gQVJNIHByb2Nlc3NvcnMgZ2VuZXJhdGVkIGJ5IHZlcnNpb25zIG9mIHRoZSBjb21waWxlciBwcmlvciB0bworMi44LiAgVGhpcyBvcHRpb24gaXMgbm93IGRlcHJlY2F0ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1jcHUtMTEyNSI+PC9hPlRoaXMgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgQVJNIHByb2Nlc3Nvci4gIEdDQyB1c2VzIHRoaXMgbmFtZQordG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgaXQgY2FuIGVtaXQgd2hlbiBnZW5lcmF0aW5nCithc3NlbWJseSBjb2RlLiAgUGVybWlzc2libGUgbmFtZXMgYXJlOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtMjUwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm0zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtNjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtNjAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTYxMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtNjIwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTc8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtN208L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtN2Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtN2RtPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm03ZGk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtN2RtaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm03MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm03MDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTcwMGk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtNzEwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTcxMGM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtNzEwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtNzIwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm03NTAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTc1MDBmZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm03dGRtaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm03dGRtaS1zPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm03MTB0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTcyMHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtNzQwdDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3Ryb25nYXJtPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0cm9uZ2FybTExMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdHJvbmdhcm0xMTAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdHJvbmdhcm0xMTEwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm04PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTgxMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm05PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTllPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTkyMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtOTIwdDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm05MjJ0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTk0NmUtczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm05NjZlLXM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTk2OGUtczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm05MjZlai1zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTk0MHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtOXRkbWk8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTEwdGRtaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm0xMDIwdDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm0xMDI2ZWotczwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtMTBlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTEwMjBlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTEwMjJlPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm0xMTM2ai1zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTExMzZqZi1zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1wY29yZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tcGNvcmVub3ZmcDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtMTE1NnQyLXM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtMTE1NnQyZi1zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTExNzZqei1zPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybTExNzZqemYtczwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29ydGV4LWE1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcnRleC1hNzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3J0ZXgtYTg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29ydGV4LWE5PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3J0ZXgtYTE1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcnRleC1hNTM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29ydGV4LXI0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcnRleC1yNGY8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcnRleC1yNTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3J0ZXgtcjc8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29ydGV4LW00PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcnRleC1tMzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29ydGV4LW0xPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3J0ZXgtbTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcnRleC1tMHBsdXM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1hcnZlbGwtcGo0PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54c2NhbGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXdtbXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPml3bW14dDI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXA5MzEyPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mYTUyNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mYTYyNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZmE2MDZ0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mYTYyNnRlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZtcDYyNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mYTcyNnRlPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PWdlbmVyaWMtPC9zcGFuPjx2YXI+YXJjaDwvdmFyPjwvc2FtcD4gaXMgYWxzbyBwZXJtaXNzaWJsZSwgYW5kIGlzCitlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD08L3NwYW4+PHZhcj5hcmNoPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+IC1tdHVuZT1nZW5lcmljLTwvc3Bhbj48dmFyPmFyY2g8L3Zhcj48L3NhbXA+LiAKK1NlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXR1bmU8L3NwYW4+PC9zYW1wPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1uYXRpdmU8L3NwYW4+PC9zYW1wPiBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGF1dG8tZGV0ZWN0IHRoZSBDUFUKK29mIHRoZSBidWlsZCBjb21wdXRlci4gIEF0IHByZXNlbnQsIHRoaXMgZmVhdHVyZSBpcyBvbmx5IHN1cHBvcnRlZCBvbgorTGludXgsIGFuZCBub3QgYWxsIGFyY2hpdGVjdHVyZXMgYXJlIHJlY29nbml6ZWQuICBJZiB0aGUgYXV0by1kZXRlY3QgaXMKK3Vuc3VjY2Vzc2Z1bCB0aGUgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXR1bmU9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tdHVuZS0xMTI2Ij48L2E+VGhpcyBvcHRpb24gaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT08L3NwYW4+PC9zYW1wPiBvcHRpb24sIGV4Y2VwdCB0aGF0CitpbnN0ZWFkIG9mIHNwZWNpZnlpbmcgdGhlIGFjdHVhbCB0YXJnZXQgcHJvY2Vzc29yIHR5cGUsIGFuZCBoZW5jZQorcmVzdHJpY3Rpbmcgd2hpY2ggaW5zdHJ1Y3Rpb25zIGNhbiBiZSB1c2VkLCBpdCBzcGVjaWZpZXMgdGhhdCBHQ0Mgc2hvdWxkCit0dW5lIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29kZSBhcyBpZiB0aGUgdGFyZ2V0IHdlcmUgb2YgdGhlIHR5cGUKK3NwZWNpZmllZCBpbiB0aGlzIG9wdGlvbiwgYnV0IHN0aWxsIGNob29zaW5nIHRoZSBpbnN0cnVjdGlvbnMgaXQKK2dlbmVyYXRlcyBiYXNlZCBvbiB0aGUgQ1BVIHNwZWNpZmllZCBieSBhIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gCitGb3Igc29tZSBBUk0gaW1wbGVtZW50YXRpb25zIGJldHRlciBwZXJmb3JtYW5jZSBjYW4gYmUgb2J0YWluZWQgYnkgdXNpbmcKK3RoaXMgb3B0aW9uLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZT1nZW5lcmljLTwvc3Bhbj48dmFyPmFyY2g8L3Zhcj48L3NhbXA+IHNwZWNpZmllcyB0aGF0IEdDQyBzaG91bGQgdHVuZSB0aGUKK3BlcmZvcm1hbmNlIGZvciBhIGJsZW5kIG9mIHByb2Nlc3NvcnMgd2l0aGluIGFyY2hpdGVjdHVyZSA8dmFyPmFyY2g8L3Zhcj4uIAorVGhlIGFpbSBpcyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgcnVuIHdlbGwgb24gdGhlIGN1cnJlbnQgbW9zdCBwb3B1bGFyCitwcm9jZXNzb3JzLCBiYWxhbmNpbmcgYmV0d2VlbiBvcHRpbWl6YXRpb25zIHRoYXQgYmVuZWZpdCBzb21lIENQVXMgaW4gdGhlCityYW5nZSwgYW5kIGF2b2lkaW5nIHBlcmZvcm1hbmNlIHBpdGZhbGxzIG9mIG90aGVyIENQVXMuICBUaGUgZWZmZWN0cyBvZgordGhpcyBvcHRpb24gbWF5IGNoYW5nZSBpbiBmdXR1cmUgR0NDIHZlcnNpb25zIGFzIENQVSBtb2RlbHMgY29tZSBhbmQgZ28uCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPW5hdGl2ZTwvc3Bhbj48L3NhbXA+IGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gYXV0by1kZXRlY3QgdGhlIENQVQorb2YgdGhlIGJ1aWxkIGNvbXB1dGVyLiAgQXQgcHJlc2VudCwgdGhpcyBmZWF0dXJlIGlzIG9ubHkgc3VwcG9ydGVkIG9uCitMaW51eCwgYW5kIG5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBhcmUgcmVjb2duaXplZC4gIElmIHRoZSBhdXRvLWRldGVjdCBpcwordW5zdWNjZXNzZnVsIHRoZSBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYXJjaD08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1hcmNoLTExMjciPjwvYT5UaGlzIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IEFSTSBhcmNoaXRlY3R1cmUuICBHQ0MgdXNlcyB0aGlzCituYW1lIHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIGl0IGNhbiBlbWl0IHdoZW4gZ2VuZXJhdGluZworYXNzZW1ibHkgY29kZS4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3IgaW5zdGVhZAorb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gIFBlcm1pc3NpYmxlIG5hbWVzIGFyZTogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm12Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtdjJhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXYzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXYzbTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm12NDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm12NHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXY1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXY1dDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm12NWU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtdjV0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtdjY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtdjZqPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm12NnQyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXY2ejwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm12NnprPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXY2LW08L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXY3PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFybXY3LWE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJtdjctcjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm12Ny1tPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcm12OC1hPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pd21teHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXdtbXh0Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lcDkzMTI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPW5hdGl2ZTwvc3Bhbj48L3NhbXA+IGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gYXV0by1kZXRlY3QgdGhlIGFyY2hpdGVjdHVyZQorb2YgdGhlIGJ1aWxkIGNvbXB1dGVyLiAgQXQgcHJlc2VudCwgdGhpcyBmZWF0dXJlIGlzIG9ubHkgc3VwcG9ydGVkIG9uCitMaW51eCwgYW5kIG5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBhcmUgcmVjb2duaXplZC4gIElmIHRoZSBhdXRvLWRldGVjdCBpcwordW5zdWNjZXNzZnVsIHRoZSBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZnB1PTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZwdS0xMTI4Ij48L2E+VGhpcyBzcGVjaWZpZXMgd2hhdCBmbG9hdGluZy1wb2ludCBoYXJkd2FyZSAob3IgaGFyZHdhcmUgZW11bGF0aW9uKSBpcworYXZhaWxhYmxlIG9uIHRoZSB0YXJnZXQuICBQZXJtaXNzaWJsZSBuYW1lcyBhcmU6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dmZwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnZmcHYzPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52ZnB2My1mcDE2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnZmcHYzLWQxNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52ZnB2My1kMTYtZnAxNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52ZnB2M3hkPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52ZnB2M3hkLWZwMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmVvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZW9uLWZwMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dmZwdjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnZmcHY0LWQxNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcHY0LXNwLWQxNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZW9uLXZmcHY0PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcC1hcm12ODwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZW9uLWZwLWFybXY4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jcnlwdG8tbmVvbi1mcC1hcm12ODwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5JZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNvZnQtZmxvYXQ8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQgdGhpcyBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZgorZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorCisgICAgIDxwPklmIHRoZSBzZWxlY3RlZCBmbG9hdGluZy1wb2ludCBoYXJkd2FyZSBpbmNsdWRlcyB0aGUgTkVPTiBleHRlbnNpb24KKyhlLmcuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnB1PC9zcGFuPjwvc2FtcD49JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwgbm90ZSB0aGF0IGZsb2F0aW5nLXBvaW50CitvcGVyYXRpb25zIGFyZSBub3QgZ2VuZXJhdGVkIGJ5IEdDQydzIGF1dG8tdmVjdG9yaXphdGlvbiBwYXNzIHVubGVzcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zPC9zcGFuPjwvc2FtcD4gaXMgYWxzbyBzcGVjaWZpZWQuICBUaGlzIGlzCitiZWNhdXNlIE5FT04gaGFyZHdhcmUgZG9lcyBub3QgZnVsbHkgaW1wbGVtZW50IHRoZSBJRUVFIDc1NCBzdGFuZGFyZCBmb3IKK2Zsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgKGluIHBhcnRpY3VsYXIgZGVub3JtYWwgdmFsdWVzIGFyZSB0cmVhdGVkIGFzCit6ZXJvKSwgc28gdGhlIHVzZSBvZiBORU9OIGluc3RydWN0aW9ucyBtYXkgbGVhZCB0byBhIGxvc3Mgb2YgcHJlY2lzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mcDE2LWZvcm1hdD08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1mcDE2XzAwMmRmb3JtYXQtMTEyOSI+PC9hPlNwZWNpZnkgdGhlIGZvcm1hdCBvZiB0aGUgPGNvZGU+X19mcDE2PC9jb2RlPiBoYWxmLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB0eXBlLiAKK1Blcm1pc3NpYmxlIG5hbWVzIGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aWVlZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWx0ZXJuYXRpdmU8L3NwYW4+PC9zYW1wPiZyc3F1bzs7Cit0aGUgZGVmYXVsdCBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGluIHdoaWNoIGNhc2UgdGhlIDxjb2RlPl9fZnAxNjwvY29kZT4gdHlwZSBpcyBub3QKK2RlZmluZWQuICBTZWUgPGEgaHJlZj0iSGFsZl8wMDJkUHJlY2lzaW9uLmh0bWwjSGFsZl8wMDJkUHJlY2lzaW9uIj5IYWxmLVByZWNpc2lvbjwvYT4sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdHJ1Y3R1cmUtc2l6ZS1ib3VuZGFyeT08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1zdHJ1Y3R1cmVfMDAyZHNpemVfMDAyZGJvdW5kYXJ5LTExMzAiPjwvYT5UaGUgc2l6ZXMgb2YgYWxsIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBhcmUgcm91bmRlZCB1cCB0byBhIG11bHRpcGxlCitvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGJ5IHRoaXMgb3B0aW9uLiAgUGVybWlzc2libGUgdmFsdWVzIGFyZSA4LCAzMgorYW5kIDY0LiAgVGhlIGRlZmF1bHQgdmFsdWUgdmFyaWVzIGZvciBkaWZmZXJlbnQgdG9vbGNoYWlucy4gIEZvciB0aGUgQ09GRgordGFyZ2V0ZWQgdG9vbGNoYWluIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDguICBBIHZhbHVlIG9mIDY0IGlzIG9ubHkgYWxsb3dlZAoraWYgdGhlIHVuZGVybHlpbmcgQUJJIHN1cHBvcnRzIGl0LgorCisgICAgIDxwPlNwZWNpZnlpbmcgYSBsYXJnZXIgbnVtYmVyIGNhbiBwcm9kdWNlIGZhc3RlciwgbW9yZSBlZmZpY2llbnQgY29kZSwgYnV0CitjYW4gYWxzbyBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcHJvZ3JhbS4gIERpZmZlcmVudCB2YWx1ZXMgYXJlIHBvdGVudGlhbGx5CitpbmNvbXBhdGlibGUuICBDb2RlIGNvbXBpbGVkIHdpdGggb25lIHZhbHVlIGNhbm5vdCBuZWNlc3NhcmlseSBleHBlY3QgdG8KK3dvcmsgd2l0aCBjb2RlIG9yIGxpYnJhcmllcyBjb21waWxlZCB3aXRoIGFub3RoZXIgdmFsdWUsIGlmIHRoZXkgZXhjaGFuZ2UKK2luZm9ybWF0aW9uIHVzaW5nIHN0cnVjdHVyZXMgb3IgdW5pb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hYm9ydC1vbi1ub3JldHVybjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFib3J0XzAwMmRvbl8wMDJkbm9yZXR1cm4tMTEzMSI+PC9hPkdlbmVyYXRlIGEgY2FsbCB0byB0aGUgZnVuY3Rpb24gPGNvZGU+YWJvcnQ8L2NvZGU+IGF0IHRoZSBlbmQgb2YgYQorPGNvZGU+bm9yZXR1cm48L2NvZGU+IGZ1bmN0aW9uLiAgSXQgaXMgZXhlY3V0ZWQgaWYgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvCityZXR1cm4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmctY2FsbHM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbG9uZy1jYWxsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxvbmdfMDAyZGNhbGxzLTExMzIiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGxvbmdfMDAyZGNhbGxzLTExMzMiPjwvYT5UZWxscyB0aGUgY29tcGlsZXIgdG8gcGVyZm9ybSBmdW5jdGlvbiBjYWxscyBieSBmaXJzdCBsb2FkaW5nIHRoZQorYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gaW50byBhIHJlZ2lzdGVyIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBzdWJyb3V0aW5lCitjYWxsIG9uIHRoaXMgcmVnaXN0ZXIuICBUaGlzIHN3aXRjaCBpcyBuZWVkZWQgaWYgdGhlIHRhcmdldCBmdW5jdGlvbgorbGllcyBvdXRzaWRlIG9mIHRoZSA2NC1tZWdhYnl0ZSBhZGRyZXNzaW5nIHJhbmdlIG9mIHRoZSBvZmZzZXQtYmFzZWQKK3ZlcnNpb24gb2Ygc3Vicm91dGluZSBjYWxsIGluc3RydWN0aW9uLgorCisgICAgIDxwPkV2ZW4gaWYgdGhpcyBzd2l0Y2ggaXMgZW5hYmxlZCwgbm90IGFsbCBmdW5jdGlvbiBjYWxscyBhcmUgdHVybmVkCitpbnRvIGxvbmcgY2FsbHMuICBUaGUgaGV1cmlzdGljIGlzIHRoYXQgc3RhdGljIGZ1bmN0aW9ucywgZnVuY3Rpb25zCit0aGF0IGhhdmUgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2hvcnQtY2FsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdHRyaWJ1dGUsIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnNpZGUKK3RoZSBzY29wZSBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBub19sb25nX2NhbGxzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSwgYW5kIGZ1bmN0aW9ucyB3aG9zZQorZGVmaW5pdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uCit1bml0IGFyZSBub3QgdHVybmVkIGludG8gbG9uZyBjYWxscy4gIFRoZSBleGNlcHRpb25zIHRvIHRoaXMgcnVsZSBhcmUKK3RoYXQgd2VhayBmdW5jdGlvbiBkZWZpbml0aW9ucywgZnVuY3Rpb25zIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9uZy1jYWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87CithdHRyaWJ1dGUgb3IgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2VjdGlvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdHRyaWJ1dGUsIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgd2l0aGluCit0aGUgc2NvcGUgb2YgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgbG9uZ19jYWxsczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUgYXJlIGFsd2F5cwordHVybmVkIGludG8gbG9uZyBjYWxscy4KKworICAgICA8cD5UaGlzIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4gIFNwZWNpZnlpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tbG9uZy1jYWxsczwvc3Bhbj48L3NhbXA+IHJlc3RvcmVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCBhcyBkb2VzCitwbGFjaW5nIHRoZSBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhlIHNjb3BlIG9mIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hCitsb25nX2NhbGxzX29mZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmUuICBOb3RlIHRoZXNlIHN3aXRjaGVzIGhhdmUgbm8gZWZmZWN0IG9uIGhvdwordGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBjb2RlIHRvIGhhbmRsZSBmdW5jdGlvbiBjYWxscyB2aWEgZnVuY3Rpb24KK3BvaW50ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zaW5nbGUtcGljLWJhc2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW5nbGVfMDAyZHBpY18wMDJkYmFzZS0xMTM0Ij48L2E+VHJlYXQgdGhlIHJlZ2lzdGVyIHVzZWQgZm9yIFBJQyBhZGRyZXNzaW5nIGFzIHJlYWQtb25seSwgcmF0aGVyIHRoYW4KK2xvYWRpbmcgaXQgaW4gdGhlIHByb2xvZ3VlIGZvciBlYWNoIGZ1bmN0aW9uLiAgVGhlIHJ1bnRpbWUgc3lzdGVtIGlzCityZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoaXMgcmVnaXN0ZXIgd2l0aCBhbiBhcHByb3ByaWF0ZSB2YWx1ZQorYmVmb3JlIGV4ZWN1dGlvbiBiZWdpbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBpYy1yZWdpc3Rlcj08L2NvZGU+PHZhcj5yZWc8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXBpY18wMDJkcmVnaXN0ZXItMTEzNSI+PC9hPlNwZWNpZnkgdGhlIHJlZ2lzdGVyIHRvIGJlIHVzZWQgZm9yIFBJQyBhZGRyZXNzaW5nLiAgVGhlIGRlZmF1bHQgaXMgUjEwCit1bmxlc3Mgc3RhY2stY2hlY2tpbmcgaXMgZW5hYmxlZCwgd2hlbiBSOSBpcyB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wb2tlLWZ1bmN0aW9uLW5hbWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wb2tlXzAwMmRmdW5jdGlvbl8wMDJkbmFtZS0xMTM2Ij48L2E+V3JpdGUgdGhlIG5hbWUgb2YgZWFjaCBmdW5jdGlvbiBpbnRvIHRoZSB0ZXh0IHNlY3Rpb24sIGRpcmVjdGx5CitwcmVjZWRpbmcgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlLiAgVGhlIGdlbmVyYXRlZCBjb2RlIGlzIHNpbWlsYXIgdG8gdGhpczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIHQwCisgICAgICAgICAgICAgICAgICAgLmFzY2lpICJhcm1fcG9rZV9mdW5jdGlvbl9uYW1lIiwgMAorICAgICAgICAgICAgICAgICAgIC5hbGlnbgorICAgICAgICAgICAgICAgdDEKKyAgICAgICAgICAgICAgICAgICAud29yZCAweGZmMDAwMDAwICsgKHQxIC0gdDApCisgICAgICAgICAgICAgICBhcm1fcG9rZV9mdW5jdGlvbl9uYW1lCisgICAgICAgICAgICAgICAgICAgbW92ICAgICBpcCwgc3AKKyAgICAgICAgICAgICAgICAgICBzdG1mZCAgIHNwISwge2ZwLCBpcCwgbHIsIHBjfQorICAgICAgICAgICAgICAgICAgIHN1YiAgICAgZnAsIGlwLCAjNAorPC9wcmU+CisgICAgIDxwPldoZW4gcGVyZm9ybWluZyBhIHN0YWNrIGJhY2t0cmFjZSwgY29kZSBjYW4gaW5zcGVjdCB0aGUgdmFsdWUgb2YKKzxjb2RlPnBjPC9jb2RlPiBzdG9yZWQgYXQgPGNvZGU+ZnAgKyAwPC9jb2RlPi4gIElmIHRoZSB0cmFjZSBmdW5jdGlvbiB0aGVuIGxvb2tzIGF0Citsb2NhdGlvbiA8Y29kZT5wYyAtIDEyPC9jb2RlPiBhbmQgdGhlIHRvcCA4IGJpdHMgYXJlIHNldCwgdGhlbiB3ZSBrbm93IHRoYXQKK3RoZXJlIGlzIGEgZnVuY3Rpb24gbmFtZSBlbWJlZGRlZCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhpcyBsb2NhdGlvbgorYW5kIGhhcyBsZW5ndGggPGNvZGU+KChwY1stM10pICZhbXA7IDB4ZmYwMDAwMDApPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdGh1bWI8L2NvZGU+PGR0Pjxjb2RlPi1tYXJtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYXJtLTExMzciPjwvYT48YSBuYW1lPSJpbmRleC1tdGh1bWItMTEzOCI+PC9hPgorU2VsZWN0IGJldHdlZW4gZ2VuZXJhdGluZyBjb2RlIHRoYXQgZXhlY3V0ZXMgaW4gQVJNIGFuZCBUaHVtYgorc3RhdGVzLiAgVGhlIGRlZmF1bHQgZm9yIG1vc3QgY29uZmlndXJhdGlvbnMgaXMgdG8gZ2VuZXJhdGUgY29kZQordGhhdCBleGVjdXRlcyBpbiBBUk0gc3RhdGUsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZCBieQorY29uZmlndXJpbmcgR0NDIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2l0aC1tb2RlPTwvc3Bhbj48L3NhbXA+PHZhcj5zdGF0ZTwvdmFyPgorY29uZmlndXJlIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdHBjcy1mcmFtZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRwY3NfMDAyZGZyYW1lLTExMzkiPjwvYT5HZW5lcmF0ZSBhIHN0YWNrIGZyYW1lIHRoYXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFRodW1iIFByb2NlZHVyZSBDYWxsCitTdGFuZGFyZCBmb3IgYWxsIG5vbi1sZWFmIGZ1bmN0aW9ucy4gIChBIGxlYWYgZnVuY3Rpb24gaXMgb25lIHRoYXQgZG9lcworbm90IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9ucy4pICBUaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXRwY3MtZnJhbWU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdHBjcy1sZWFmLWZyYW1lPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdHBjc18wMDJkbGVhZl8wMDJkZnJhbWUtMTE0MCI+PC9hPkdlbmVyYXRlIGEgc3RhY2sgZnJhbWUgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgVGh1bWIgUHJvY2VkdXJlIENhbGwKK1N0YW5kYXJkIGZvciBhbGwgbGVhZiBmdW5jdGlvbnMuICAoQSBsZWFmIGZ1bmN0aW9uIGlzIG9uZSB0aGF0IGRvZXMKK25vdCBjYWxsIGFueSBvdGhlciBmdW5jdGlvbnMuKSAgVGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1hcGNzLWxlYWYtZnJhbWU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY2FsbGVlLXN1cGVyLWludGVyd29ya2luZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNhbGxlZV8wMDJkc3VwZXJfMDAyZGludGVyd29ya2luZy0xMTQxIj48L2E+R2l2ZXMgYWxsIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbnMgaW4gdGhlIGZpbGUgYmVpbmcgY29tcGlsZWQgYW4gQVJNCitpbnN0cnVjdGlvbiBzZXQgaGVhZGVyIHdoaWNoIHN3aXRjaGVzIHRvIFRodW1iIG1vZGUgYmVmb3JlIGV4ZWN1dGluZyB0aGUKK3Jlc3Qgb2YgdGhlIGZ1bmN0aW9uLiAgVGhpcyBhbGxvd3MgdGhlc2UgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBmcm9tCitub24taW50ZXJ3b3JraW5nIGNvZGUuICBUaGlzIG9wdGlvbiBpcyBub3QgdmFsaWQgaW4gQUFQQ1MgY29uZmlndXJhdGlvbnMKK2JlY2F1c2UgaW50ZXJ3b3JraW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY2FsbGVyLXN1cGVyLWludGVyd29ya2luZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNhbGxlcl8wMDJkc3VwZXJfMDAyZGludGVyd29ya2luZy0xMTQyIj48L2E+QWxsb3dzIGNhbGxzIHZpYSBmdW5jdGlvbiBwb2ludGVycyAoaW5jbHVkaW5nIHZpcnR1YWwgZnVuY3Rpb25zKSB0bworZXhlY3V0ZSBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB0YXJnZXQgY29kZSBoYXMgYmVlbgorY29tcGlsZWQgZm9yIGludGVyd29ya2luZyBvciBub3QuICBUaGVyZSBpcyBhIHNtYWxsIG92ZXJoZWFkIGluIHRoZSBjb3N0CitvZiBleGVjdXRpbmcgYSBmdW5jdGlvbiBwb2ludGVyIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuICBUaGlzIG9wdGlvbgoraXMgbm90IHZhbGlkIGluIEFBUENTIGNvbmZpZ3VyYXRpb25zIGJlY2F1c2UgaW50ZXJ3b3JraW5nIGlzIGVuYWJsZWQKK2J5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRwPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRwLTExNDMiPjwvYT5TcGVjaWZ5IHRoZSBhY2Nlc3MgbW9kZWwgZm9yIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgVGhlIHZhbGlkCittb2RlbHMgYXJlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPnNvZnQ8L3NwYW4+PC9zYW1wPiwgd2hpY2ggZ2VuZXJhdGVzIGNhbGxzIHRvIDxjb2RlPl9fYWVhYmlfcmVhZF90cDwvY29kZT4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5jcDE1PC9zcGFuPjwvc2FtcD4sIHdoaWNoIGZldGNoZXMgdGhlIHRocmVhZCBwb2ludGVyIGZyb20gPGNvZGU+Y3AxNTwvY29kZT4gZGlyZWN0bHkKKyhzdXBwb3J0ZWQgaW4gdGhlIGFybTZrIGFyY2hpdGVjdHVyZSksIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5hdXRvPC9zcGFuPjwvc2FtcD4sIHdoaWNoIHVzZXMgdGhlCitiZXN0IGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoZSBzZWxlY3RlZCBwcm9jZXNzb3IuICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5hdXRvPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRscy1kaWFsZWN0PTwvY29kZT48dmFyPmRpYWxlY3Q8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRsc18wMDJkZGlhbGVjdC0xMTQ0Ij48L2E+U3BlY2lmeSB0aGUgZGlhbGVjdCB0byB1c2UgZm9yIGFjY2Vzc2luZyB0aHJlYWQgbG9jYWwgc3RvcmFnZS4gIFR3bworPHZhcj5kaWFsZWN0PC92YXI+cyBhcmUgc3VwcG9ydGVkJm1kYXNoOyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdudTI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251PC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpYWxlY3Qgc2VsZWN0cyB0aGUgb3JpZ2luYWwgR05VIHNjaGVtZSBmb3Igc3VwcG9ydGluZworbG9jYWwgYW5kIGdsb2JhbCBkeW5hbWljIFRMUyBtb2RlbHMuICBUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnUyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpYWxlY3QKK3NlbGVjdHMgdGhlIEdOVSBkZXNjcmlwdG9yIHNjaGVtZSwgd2hpY2ggcHJvdmlkZXMgYmV0dGVyIHBlcmZvcm1hbmNlCitmb3Igc2hhcmVkIGxpYnJhcmllcy4gIFRoZSBHTlUgZGVzY3JpcHRvciBzY2hlbWUgaXMgY29tcGF0aWJsZSB3aXRoCit0aGUgb3JpZ2luYWwgc2NoZW1lLCBidXQgZG9lcyByZXF1aXJlIG5ldyBhc3NlbWJsZXIsIGxpbmtlciBhbmQKK2xpYnJhcnkgc3VwcG9ydC4gIEluaXRpYWwgYW5kIGxvY2FsIGV4ZWMgVExTIG1vZGVscyBhcmUgdW5hZmZlY3RlZCBieQordGhpcyBvcHRpb24gYW5kIGFsd2F5cyB1c2UgdGhlIG9yaWdpbmFsIHNjaGVtZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1td29yZC1yZWxvY2F0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXdvcmRfMDAyZHJlbG9jYXRpb25zLTExNDUiPjwvYT5Pbmx5IGdlbmVyYXRlIGFic29sdXRlIHJlbG9jYXRpb25zIG9uIHdvcmQtc2l6ZWQgdmFsdWVzIChpLmUuIFJfQVJNX0FCUzMyKS4gCitUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB0YXJnZXRzICh1Q2xpbnV4LCBTeW1iaWFuT1MpIHdoZXJlIHRoZSBydW50aW1lCitsb2FkZXIgaW1wb3NlcyB0aGlzIHJlc3RyaWN0aW9uLCBhbmQgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBpYzwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4KK2lzIHNwZWNpZmllZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZml4LWNvcnRleC1tMy1sZHJkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZml4XzAwMmRjb3J0ZXhfMDAyZG0zXzAwMmRsZHJkLTExNDYiPjwvYT5Tb21lIENvcnRleC1NMyBjb3JlcyBjYW4gY2F1c2UgZGF0YSBjb3JydXB0aW9uIHdoZW4gPGNvZGU+bGRyZDwvY29kZT4gaW5zdHJ1Y3Rpb25zCit3aXRoIG92ZXJsYXBwaW5nIGRlc3RpbmF0aW9uIGFuZCBiYXNlIHJlZ2lzdGVycyBhcmUgdXNlZC4gIFRoaXMgb3B0aW9uIGF2b2lkcworZ2VuZXJhdGluZyB0aGVzZSBpbnN0cnVjdGlvbnMuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9Y29ydGV4LW0zPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW11bmFsaWduZWQtYWNjZXNzPC9jb2RlPjxkdD48Y29kZT4tbW5vLXVuYWxpZ25lZC1hY2Nlc3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW11bmFsaWduZWRfMDAyZGFjY2Vzcy0xMTQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR1bmFsaWduZWRfMDAyZGFjY2Vzcy0xMTQ4Ij48L2E+RW5hYmxlcyAob3IgZGlzYWJsZXMpIHJlYWRpbmcgYW5kIHdyaXRpbmcgb2YgMTYtIGFuZCAzMi0gYml0IHZhbHVlcworZnJvbSBhZGRyZXNzZXMgdGhhdCBhcmUgbm90IDE2LSBvciAzMi0gYml0IGFsaWduZWQuICBCeSBkZWZhdWx0Cit1bmFsaWduZWQgYWNjZXNzIGlzIGRpc2FibGVkIGZvciBhbGwgcHJlLUFSTXY2IGFuZCBhbGwgQVJNdjYtTQorYXJjaGl0ZWN0dXJlcywgYW5kIGVuYWJsZWQgZm9yIGFsbCBvdGhlciBhcmNoaXRlY3R1cmVzLiAgSWYgdW5hbGlnbmVkCithY2Nlc3MgaXMgbm90IGVuYWJsZWQgdGhlbiB3b3JkcyBpbiBwYWNrZWQgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwgYmUKK2FjY2Vzc2VkIGEgYnl0ZSBhdCBhIHRpbWUuCisKKyAgICAgPHA+VGhlIEFSTSBhdHRyaWJ1dGUgPGNvZGU+VGFnX0NQVV91bmFsaWduZWRfYWNjZXNzPC9jb2RlPiB3aWxsIGJlIHNldCBpbiB0aGUKK2dlbmVyYXRlZCBvYmplY3QgZmlsZSB0byBlaXRoZXIgdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIHVwb24gdGhlCitzZXR0aW5nIG9mIHRoaXMgb3B0aW9uLiAgSWYgdW5hbGlnbmVkIGFjY2VzcyBpcyBlbmFibGVkIHRoZW4gdGhlCitwcmVwcm9jZXNzb3Igc3ltYm9sIDxjb2RlPl9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEPC9jb2RlPiB3aWxsIGFsc28gYmUKK2RlZmluZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5lb24tZm9yLTY0Yml0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5lb25fMDAyZGZvcl8wMDJkNjRiaXRzLTExNDkiPjwvYT5FbmFibGVzIHVzaW5nIE5lb24gdG8gaGFuZGxlIHNjYWxhciA2NC1iaXRzIG9wZXJhdGlvbnMuIFRoaXMgaXMKK2Rpc2FibGVkIGJ5IGRlZmF1bHQgc2luY2UgdGhlIGNvc3Qgb2YgbW92aW5nIGRhdGEgZnJvbSBjb3JlIHJlZ2lzdGVycwordG8gTmVvbiBpcyBoaWdoLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1yZXN0cmljdC1pdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXJlc3RyaWN0XzAwMmRpdC0xMTUwIj48L2E+UmVzdHJpY3RzIGdlbmVyYXRpb24gb2YgSVQgYmxvY2tzIHRvIGNvbmZvcm0gdG8gdGhlIHJ1bGVzIG9mIEFSTXY4LiAKK0lUIGJsb2NrcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIDE2LWJpdCBpbnN0cnVjdGlvbiBmcm9tIGEgc2VsZWN0CitzZXQgb2YgaW5zdHJ1Y3Rpb25zLiBUaGlzIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0IGZvciBBUk12OCBUaHVtYiBtb2RlLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FSTS1QcmFnbWFzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FSTS1QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzNmQwOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQVJNLVByYWdtYXMuaHRtbApAQCAtMCwwICsxLDcwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUk0gUHJhZ21hcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyIgdGl0bGU9IlByYWdtYXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNMzJDLVByYWdtYXMuaHRtbCNNMzJDLVByYWdtYXMiIHRpdGxlPSJNMzJDIFByYWdtYXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVJNLVByYWdtYXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTMyQy1QcmFnbWFzLmh0bWwjTTMyQy1QcmFnbWFzIj5NMzJDIFByYWdtYXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTguMSBBUk0gUHJhZ21hczwvaDQ+CisKKzxwPlRoZSBBUk0gdGFyZ2V0IGRlZmluZXMgcHJhZ21hcyBmb3IgY29udHJvbGxpbmcgdGhlIGRlZmF1bHQgYWRkaXRpb24gb2YKKzxjb2RlPmxvbmdfY2FsbDwvY29kZT4gYW5kIDxjb2RlPnNob3J0X2NhbGw8L2NvZGU+IGF0dHJpYnV0ZXMgdG8gZnVuY3Rpb25zLiAKK1NlZSA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZWZmZWN0cyBvZiB0aGVzZQorYXR0cmlidXRlcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+bG9uZ19jYWxsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hXzAwMmMtbG9uZ18wMDVmY2FsbHMtMzQ1MyI+PC9hPlNldCBhbGwgc3Vic2VxdWVudCBmdW5jdGlvbnMgdG8gaGF2ZSB0aGUgPGNvZGU+bG9uZ19jYWxsPC9jb2RlPiBhdHRyaWJ1dGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5ub19sb25nX2NhbGxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWFfMDAyYy1ub18wMDVmbG9uZ18wMDVmY2FsbHMtMzQ1NCI+PC9hPlNldCBhbGwgc3Vic2VxdWVudCBmdW5jdGlvbnMgdG8gaGF2ZSB0aGUgPGNvZGU+c2hvcnRfY2FsbDwvY29kZT4gYXR0cmlidXRlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+bG9uZ19jYWxsc19vZmY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLWxvbmdfMDA1ZmNhbGxzXzAwNWZvZmYtMzQ1NSI+PC9hPkRvIG5vdCBhZmZlY3QgdGhlIDxjb2RlPmxvbmdfY2FsbDwvY29kZT4gb3IgPGNvZGU+c2hvcnRfY2FsbDwvY29kZT4gYXR0cmlidXRlcyBvZgorc3Vic2VxdWVudCBmdW5jdGlvbnMuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQVJNLWlXTU1YdC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FSTS1pV01NWHQtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMWE5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FSTS1pV01NWHQtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjA3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BUk0gaVdNTVh0IEJ1aWx0LWluIEZ1bmN0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBbHBoYS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQWxwaGEtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IkFscGhhIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIiB0aXRsZT0iQVJNIE5FT04gSW50cmluc2ljcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBUk0taVdNTVh0LUJ1aWx0LWluLUZ1bmN0aW9ucyI+PC9hPgorPGEgbmFtZT0iQVJNLWlXTU1YdC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj5BUk0gTkVPTiBJbnRyaW5zaWNzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQWxwaGEtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0FscGhhLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkFscGhhIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni4yIEFSTSBpV01NWHQgQnVpbHQtaW4gRnVuY3Rpb25zPC9oND4KKworPHA+VGhlc2UgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBBUk0gZmFtaWx5IG9mCitwcm9jZXNzb3JzIHdoZW4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PWl3bW14dDwvc3Bhbj48L3NhbXA+IHN3aXRjaCBpcyB1c2VkOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZWRlZiBpbnQgdjJzaSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDgpKSk7CisgICAgIHR5cGVkZWYgc2hvcnQgdjRoaSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDgpKSk7CisgICAgIHR5cGVkZWYgY2hhciB2OHFpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoOCkpKTsKKyAgICAgCisgICAgIGludCBfX2J1aWx0aW5fYXJtX2dldHdjZ3IwICh2b2lkKQorICAgICB2b2lkIF9fYnVpbHRpbl9hcm1fc2V0d2NncjAgKGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9hcm1fZ2V0d2NncjEgKHZvaWQpCisgICAgIHZvaWQgX19idWlsdGluX2FybV9zZXR3Y2dyMSAoaW50KQorICAgICBpbnQgX19idWlsdGluX2FybV9nZXR3Y2dyMiAodm9pZCkKKyAgICAgdm9pZCBfX2J1aWx0aW5fYXJtX3NldHdjZ3IyIChpbnQpCisgICAgIGludCBfX2J1aWx0aW5fYXJtX2dldHdjZ3IzICh2b2lkKQorICAgICB2b2lkIF9fYnVpbHRpbl9hcm1fc2V0d2NncjMgKGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9hcm1fdGV4dHJtc2IgKHY4cWksIGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9hcm1fdGV4dHJtc2ggKHY0aGksIGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9hcm1fdGV4dHJtc3cgKHYyc2ksIGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9hcm1fdGV4dHJtdWIgKHY4cWksIGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9hcm1fdGV4dHJtdWggKHY0aGksIGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9hcm1fdGV4dHJtdXcgKHYyc2ksIGludCkKKyAgICAgdjhxaSBfX2J1aWx0aW5fYXJtX3RpbnNyYiAodjhxaSwgaW50LCBpbnQpCisgICAgIHY0aGkgX19idWlsdGluX2FybV90aW5zcmggKHY0aGksIGludCwgaW50KQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fdGluc3J3ICh2MnNpLCBpbnQsIGludCkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fdG1pYSAobG9uZyBsb25nLCBpbnQsIGludCkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fdG1pYWJiIChsb25nIGxvbmcsIGludCwgaW50KQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV90bWlhYnQgKGxvbmcgbG9uZywgaW50LCBpbnQpCisgICAgIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3RtaWFwaCAobG9uZyBsb25nLCBpbnQsIGludCkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fdG1pYXRiIChsb25nIGxvbmcsIGludCwgaW50KQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV90bWlhdHQgKGxvbmcgbG9uZywgaW50LCBpbnQpCisgICAgIGludCBfX2J1aWx0aW5fYXJtX3Rtb3Ztc2tiICh2OHFpKQorICAgICBpbnQgX19idWlsdGluX2FybV90bW92bXNraCAodjRoaSkKKyAgICAgaW50IF9fYnVpbHRpbl9hcm1fdG1vdm1za3cgKHYyc2kpCisgICAgIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3dhY2NiICh2OHFpKQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV93YWNjaCAodjRoaSkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd2FjY3cgKHYyc2kpCisgICAgIHY4cWkgX19idWlsdGluX2FybV93YWRkYiAodjhxaSwgdjhxaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5fYXJtX3dhZGRic3MgKHY4cWksIHY4cWkpCisgICAgIHY4cWkgX19idWlsdGluX2FybV93YWRkYnVzICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd2FkZGggKHY0aGksIHY0aGkpCisgICAgIHY0aGkgX19idWlsdGluX2FybV93YWRkaHNzICh2NGhpLCB2NGhpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd2FkZGh1cyAodjRoaSwgdjRoaSkKKyAgICAgdjJzaSBfX2J1aWx0aW5fYXJtX3dhZGR3ICh2MnNpLCB2MnNpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd2FkZHdzcyAodjJzaSwgdjJzaSkKKyAgICAgdjJzaSBfX2J1aWx0aW5fYXJtX3dhZGR3dXMgKHYyc2ksIHYyc2kpCisgICAgIHY4cWkgX19idWlsdGluX2FybV93YWxpZ24gKHY4cWksIHY4cWksIGludCkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd2FuZChsb25nIGxvbmcsIGxvbmcgbG9uZykKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd2FuZG4gKGxvbmcgbG9uZywgbG9uZyBsb25nKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd2F2ZzJiICh2OHFpLCB2OHFpKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd2F2ZzJiciAodjhxaSwgdjhxaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3dhdmcyaCAodjRoaSwgdjRoaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3dhdmcyaHIgKHY0aGksIHY0aGkpCisgICAgIHY4cWkgX19idWlsdGluX2FybV93Y21wZXFiICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd2NtcGVxaCAodjRoaSwgdjRoaSkKKyAgICAgdjJzaSBfX2J1aWx0aW5fYXJtX3djbXBlcXcgKHYyc2ksIHYyc2kpCisgICAgIHY4cWkgX19idWlsdGluX2FybV93Y21wZ3RzYiAodjhxaSwgdjhxaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3djbXBndHNoICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd2NtcGd0c3cgKHYyc2ksIHYyc2kpCisgICAgIHY4cWkgX19idWlsdGluX2FybV93Y21wZ3R1YiAodjhxaSwgdjhxaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3djbXBndHVoICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd2NtcGd0dXcgKHYyc2ksIHYyc2kpCisgICAgIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3dtYWNzIChsb25nIGxvbmcsIHY0aGksIHY0aGkpCisgICAgIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3dtYWNzeiAodjRoaSwgdjRoaSkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd21hY3UgKGxvbmcgbG9uZywgdjRoaSwgdjRoaSkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd21hY3V6ICh2NGhpLCB2NGhpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd21hZGRzICh2NGhpLCB2NGhpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd21hZGR1ICh2NGhpLCB2NGhpKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd21heHNiICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd21heHNoICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd21heHN3ICh2MnNpLCB2MnNpKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd21heHViICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd21heHVoICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd21heHV3ICh2MnNpLCB2MnNpKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd21pbnNiICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd21pbnNoICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd21pbnN3ICh2MnNpLCB2MnNpKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd21pbnViICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd21pbnVoICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd21pbnV3ICh2MnNpLCB2MnNpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd211bHNtICh2NGhpLCB2NGhpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd211bHVsICh2NGhpLCB2NGhpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd211bHVtICh2NGhpLCB2NGhpKQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV93b3IgKGxvbmcgbG9uZywgbG9uZyBsb25nKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3BhY2tkc3MgKGxvbmcgbG9uZywgbG9uZyBsb25nKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3BhY2tkdXMgKGxvbmcgbG9uZywgbG9uZyBsb25nKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd3BhY2toc3MgKHY0aGksIHY0aGkpCisgICAgIHY4cWkgX19idWlsdGluX2FybV93cGFja2h1cyAodjRoaSwgdjRoaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3dwYWNrd3NzICh2MnNpLCB2MnNpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd3BhY2t3dXMgKHYyc2ksIHYyc2kpCisgICAgIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3dyb3JkIChsb25nIGxvbmcsIGxvbmcgbG9uZykKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd3JvcmRpIChsb25nIGxvbmcsIGludCkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3dyb3JoICh2NGhpLCBsb25nIGxvbmcpCisgICAgIHY0aGkgX19idWlsdGluX2FybV93cm9yaGkgKHY0aGksIGludCkKKyAgICAgdjJzaSBfX2J1aWx0aW5fYXJtX3dyb3J3ICh2MnNpLCBsb25nIGxvbmcpCisgICAgIHYyc2kgX19idWlsdGluX2FybV93cm9yd2kgKHYyc2ksIGludCkKKyAgICAgdjJzaSBfX2J1aWx0aW5fYXJtX3dzYWRiICh2MnNpLCB2OHFpLCB2OHFpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3NhZGJ6ICh2OHFpLCB2OHFpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3NhZGggKHYyc2ksIHY0aGksIHY0aGkpCisgICAgIHYyc2kgX19idWlsdGluX2FybV93c2FkaHogKHY0aGksIHY0aGkpCisgICAgIHY0aGkgX19idWlsdGluX2FybV93c2h1ZmggKHY0aGksIGludCkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd3NsbGQgKGxvbmcgbG9uZywgbG9uZyBsb25nKQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV93c2xsZGkgKGxvbmcgbG9uZywgaW50KQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd3NsbGggKHY0aGksIGxvbmcgbG9uZykKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3dzbGxoaSAodjRoaSwgaW50KQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3NsbHcgKHYyc2ksIGxvbmcgbG9uZykKKyAgICAgdjJzaSBfX2J1aWx0aW5fYXJtX3dzbGx3aSAodjJzaSwgaW50KQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV93c3JhZCAobG9uZyBsb25nLCBsb25nIGxvbmcpCisgICAgIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3dzcmFkaSAobG9uZyBsb25nLCBpbnQpCisgICAgIHY0aGkgX19idWlsdGluX2FybV93c3JhaCAodjRoaSwgbG9uZyBsb25nKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd3NyYWhpICh2NGhpLCBpbnQpCisgICAgIHYyc2kgX19idWlsdGluX2FybV93c3JhdyAodjJzaSwgbG9uZyBsb25nKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3NyYXdpICh2MnNpLCBpbnQpCisgICAgIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3dzcmxkIChsb25nIGxvbmcsIGxvbmcgbG9uZykKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd3NybGRpIChsb25nIGxvbmcsIGludCkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3dzcmxoICh2NGhpLCBsb25nIGxvbmcpCisgICAgIHY0aGkgX19idWlsdGluX2FybV93c3JsaGkgKHY0aGksIGludCkKKyAgICAgdjJzaSBfX2J1aWx0aW5fYXJtX3dzcmx3ICh2MnNpLCBsb25nIGxvbmcpCisgICAgIHYyc2kgX19idWlsdGluX2FybV93c3Jsd2kgKHYyc2ksIGludCkKKyAgICAgdjhxaSBfX2J1aWx0aW5fYXJtX3dzdWJiICh2OHFpLCB2OHFpKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd3N1YmJzcyAodjhxaSwgdjhxaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5fYXJtX3dzdWJidXMgKHY4cWksIHY4cWkpCisgICAgIHY0aGkgX19idWlsdGluX2FybV93c3ViaCAodjRoaSwgdjRoaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3dzdWJoc3MgKHY0aGksIHY0aGkpCisgICAgIHY0aGkgX19idWlsdGluX2FybV93c3ViaHVzICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3N1YncgKHYyc2ksIHYyc2kpCisgICAgIHYyc2kgX19idWlsdGluX2FybV93c3Vid3NzICh2MnNpLCB2MnNpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3N1Ynd1cyAodjJzaSwgdjJzaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3d1bnBja2Voc2IgKHY4cWkpCisgICAgIHYyc2kgX19idWlsdGluX2FybV93dW5wY2tlaHNoICh2NGhpKQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV93dW5wY2tlaHN3ICh2MnNpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd3VucGNrZWh1YiAodjhxaSkKKyAgICAgdjJzaSBfX2J1aWx0aW5fYXJtX3d1bnBja2VodWggKHY0aGkpCisgICAgIGxvbmcgbG9uZyBfX2J1aWx0aW5fYXJtX3d1bnBja2VodXcgKHYyc2kpCisgICAgIHY0aGkgX19idWlsdGluX2FybV93dW5wY2tlbHNiICh2OHFpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3VucGNrZWxzaCAodjRoaSkKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd3VucGNrZWxzdyAodjJzaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5fYXJtX3d1bnBja2VsdWIgKHY4cWkpCisgICAgIHYyc2kgX19idWlsdGluX2FybV93dW5wY2tlbHVoICh2NGhpKQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV93dW5wY2tlbHV3ICh2MnNpKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd3VucGNraWhiICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd3VucGNraWhoICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3VucGNraWh3ICh2MnNpLCB2MnNpKQorICAgICB2OHFpIF9fYnVpbHRpbl9hcm1fd3VucGNraWxiICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9hcm1fd3VucGNraWxoICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9hcm1fd3VucGNraWx3ICh2MnNpLCB2MnNpKQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2FybV93eG9yIChsb25nIGxvbmcsIGxvbmcgbG9uZykKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9hcm1fd3plcm8gKCkKKzwvcHJlPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ4NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BVlItQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTMzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BVlIgQnVpbHQtaW4gRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyIgdGl0bGU9IlRhcmdldCBCdWlsdGlucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIiB0aXRsZT0iQVJNIE5FT04gSW50cmluc2ljcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJsYWNrZmluLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNCbGFja2Zpbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iQmxhY2tmaW4gQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFWUi1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IkFWUi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJsYWNrZmluLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNCbGFja2Zpbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5CbGFja2ZpbiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+QVJNIE5FT04gSW50cmluc2ljczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni40IEFWUiBCdWlsdC1pbiBGdW5jdGlvbnM8L2g0PgorCis8cD5Gb3IgZWFjaCBidWlsdC1pbiBmdW5jdGlvbiBmb3IgQVZSLCB0aGVyZSBpcyBhbiBlcXVhbGx5IG5hbWVkLAordXBwZXJjYXNlIGJ1aWx0LWluIG1hY3JvIGRlZmluZWQuIFRoYXQgd2F5IHVzZXJzIGNhbiBlYXNpbHkgcXVlcnkgaWYKK29yIGlmIG5vdCBhIHNwZWNpZmljIGJ1aWx0LWluIGlzIGltcGxlbWVudGVkIG9yIG5vdC4gRm9yIGV4YW1wbGUsIGlmCis8Y29kZT5fX2J1aWx0aW5fYXZyX25vcDwvY29kZT4gaXMgYXZhaWxhYmxlIHRoZSBtYWNybworPGNvZGU+X19CVUlMVElOX0FWUl9OT1A8L2NvZGU+IGlzIGRlZmluZWQgdG8gPGNvZGU+MTwvY29kZT4gYW5kIHVuZGVmaW5lZCBvdGhlcndpc2UuCisKKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBtYXAgdG8gdGhlIHJlc3BlY3RpdmUgbWFjaGluZQoraW5zdHJ1Y3Rpb24sIGkuZS4gPGNvZGU+bm9wPC9jb2RlPiwgPGNvZGU+c2VpPC9jb2RlPiwgPGNvZGU+Y2xpPC9jb2RlPiwgPGNvZGU+c2xlZXA8L2NvZGU+LAorPGNvZGU+d2RyPC9jb2RlPiwgPGNvZGU+c3dhcDwvY29kZT4sIDxjb2RlPmZtdWw8L2NvZGU+LCA8Y29kZT5mbXVsczwvY29kZT4KK3Jlc3AuIDxjb2RlPmZtdWxzdTwvY29kZT4uIFRoZSB0aHJlZSA8Y29kZT5mbXVsKjwvY29kZT4gYnVpbHQtaW5zIGFyZSBpbXBsZW1lbnRlZAorYXMgbGlicmFyeSBjYWxsIGlmIG5vIGhhcmR3YXJlIG11bHRpcGxpZXIgaXMgYXZhaWxhYmxlLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdm9pZCBfX2J1aWx0aW5fYXZyX25vcCAodm9pZCkKKyAgICAgdm9pZCBfX2J1aWx0aW5fYXZyX3NlaSAodm9pZCkKKyAgICAgdm9pZCBfX2J1aWx0aW5fYXZyX2NsaSAodm9pZCkKKyAgICAgdm9pZCBfX2J1aWx0aW5fYXZyX3NsZWVwICh2b2lkKQorICAgICB2b2lkIF9fYnVpbHRpbl9hdnJfd2RyICh2b2lkKQorICAgICB1bnNpZ25lZCBjaGFyIF9fYnVpbHRpbl9hdnJfc3dhcCAodW5zaWduZWQgY2hhcikKKyAgICAgdW5zaWduZWQgaW50IF9fYnVpbHRpbl9hdnJfZm11bCAodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikKKyAgICAgaW50IF9fYnVpbHRpbl9hdnJfZm11bHMgKGNoYXIsIGNoYXIpCisgICAgIGludCBfX2J1aWx0aW5fYXZyX2ZtdWxzdSAoY2hhciwgdW5zaWduZWQgY2hhcikKKzwvcHJlPgorIDxwPkluIG9yZGVyIHRvIGRlbGF5IGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpYyBudW1iZXIgb2YgY3ljbGVzLCBHQ0MKK2ltcGxlbWVudHMKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2b2lkIF9fYnVpbHRpbl9hdnJfZGVsYXlfY3ljbGVzICh1bnNpZ25lZCBsb25nIHRpY2tzKQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij48Y29kZT50aWNrczwvY29kZT4gaXMgdGhlIG51bWJlciBvZiB0aWNrcyB0byBkZWxheSBleGVjdXRpb24uIE5vdGUgdGhhdCB0aGlzCitidWlsdC1pbiBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGUgZWZmZWN0IG9mIGludGVycnVwdHMgdGhhdAorbWlnaHQgaW5jcmVhc2UgZGVsYXkgdGltZS4gPGNvZGU+dGlja3M8L2NvZGU+IG11c3QgYmUgYSBjb21waWxlLXRpbWUKK2ludGVnZXIgY29uc3RhbnQ7IGRlbGF5cyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGN5Y2xlcyBhcmUgbm90IHN1cHBvcnRlZC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGNoYXIgX19idWlsdGluX2F2cl9mbGFzaF9zZWdtZW50IChjb25zdCBfX21lbXggdm9pZCopCis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgYnVpbHQtaW4gdGFrZXMgYSBieXRlIGFkZHJlc3MgdG8gdGhlIDI0LWJpdAorPGEgaHJlZj0iQVZSLU5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjQVZSLU5hbWVkLUFkZHJlc3MtU3BhY2VzIj5hZGRyZXNzIHNwYWNlPC9hPiA8Y29kZT5fX21lbXg8L2NvZGU+IGFuZCByZXR1cm5zCit0aGUgbnVtYmVyIG9mIHRoZSBmbGFzaCBzZWdtZW50ICh0aGUgNjQgS2lCIGNodW5rKSB3aGVyZSB0aGUgYWRkcmVzcworcG9pbnRzIHRvLiAgQ291bnRpbmcgc3RhcnRzIGF0IDxjb2RlPjA8L2NvZGU+LiAKK0lmIHRoZSBhZGRyZXNzIGRvZXMgbm90IHBvaW50IHRvIGZsYXNoIG1lbW9yeSwgcmV0dXJuIDxjb2RlPi0xPC9jb2RlPi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHVuc2lnbmVkIGNoYXIgX19idWlsdGluX2F2cl9pbnNlcnRfYml0cyAodW5zaWduZWQgbG9uZyBtYXAsIHVuc2lnbmVkIGNoYXIgYml0cywgdW5zaWduZWQgY2hhciB2YWwpCis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkluc2VydCBiaXRzIGZyb20gPHZhcj5iaXRzPC92YXI+IGludG8gPHZhcj52YWw8L3Zhcj4gYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nCit2YWx1ZS4gVGhlIG5pYmJsZXMgb2YgPHZhcj5tYXA8L3Zhcj4gZGV0ZXJtaW5lIGhvdyB0aGUgaW5zZXJ0aW9uIGlzCitwZXJmb3JtZWQ6IExldCA8dmFyPlg8L3Zhcj4gYmUgdGhlIDx2YXI+bjwvdmFyPi10aCBuaWJibGUgb2YgPHZhcj5tYXA8L3Zhcj4KKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPklmIDx2YXI+WDwvdmFyPiBpcyA8Y29kZT4weGY8L2NvZGU+LAordGhlbiB0aGUgPHZhcj5uPC92YXI+LXRoIGJpdCBvZiA8dmFyPnZhbDwvdmFyPiBpcyByZXR1cm5lZCB1bmFsdGVyZWQuCisKKyAgICAgPGxpPklmIFggaXMgaW4gdGhlIHJhbmdlIDA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+NywKK3RoZW4gdGhlIDx2YXI+bjwvdmFyPi10aCByZXN1bHQgYml0IGlzIHNldCB0byB0aGUgPHZhcj5YPC92YXI+LXRoIGJpdCBvZiA8dmFyPmJpdHM8L3Zhcj4KKworICAgICA8bGk+SWYgWCBpcyBpbiB0aGUgcmFuZ2UgODxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD48Y29kZT4weGU8L2NvZGU+LAordGhlbiB0aGUgPHZhcj5uPC92YXI+LXRoIHJlc3VsdCBiaXQgaXMgdW5kZWZpbmVkLgorICAgICAgPC9vbD4KKworPHAgY2xhc3M9Im5vaW5kZW50Ij5PbmUgdHlwaWNhbCB1c2UgY2FzZSBmb3IgdGhpcyBidWlsdC1pbiBpcyBhZGp1c3RpbmcgaW5wdXQgYW5kCitvdXRwdXQgdmFsdWVzIHRvIG5vbi1jb250aWd1b3VzIHBvcnQgbGF5b3V0cy4gU29tZSBleGFtcGxlczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC8vIHNhbWUgYXMgdmFsLCBiaXRzIGlzIHVudXNlZAorICAgICBfX2J1aWx0aW5fYXZyX2luc2VydF9iaXRzICgweGZmZmZmZmZmLCBiaXRzLCB2YWwpCis8L3ByZT4KKyA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLy8gc2FtZSBhcyBiaXRzLCB2YWwgaXMgdW51c2VkCisgICAgIF9fYnVpbHRpbl9hdnJfaW5zZXJ0X2JpdHMgKDB4NzY1NDMyMTAsIGJpdHMsIHZhbCkKKzwvcHJlPgorIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAvLyBzYW1lIGFzIHJvdGF0aW5nIGJpdHMgYnkgNAorICAgICBfX2J1aWx0aW5fYXZyX2luc2VydF9iaXRzICgweDMyMTA3NjU0LCBiaXRzLCAwKQorPC9wcmU+CisgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC8vIGhpZ2ggbmliYmxlIG9mIHJlc3VsdCBpcyB0aGUgaGlnaCBuaWJibGUgb2YgdmFsCisgICAgIC8vIGxvdyBuaWJibGUgb2YgcmVzdWx0IGlzIHRoZSBsb3cgbmliYmxlIG9mIGJpdHMKKyAgICAgX19idWlsdGluX2F2cl9pbnNlcnRfYml0cyAoMHhmZmZmMzIxMCwgYml0cywgdmFsKQorPC9wcmU+CisgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC8vIHJldmVyc2UgdGhlIGJpdCBvcmRlciBvZiBiaXRzCisgICAgIF9fYnVpbHRpbl9hdnJfaW5zZXJ0X2JpdHMgKDB4MDEyMzQ1NjcsIGJpdHMsIDApCis8L3ByZT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIxOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9TmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNBVlIlMjBOYW1lZCUyMEFkZHJlc3MlMjBTcGFjZXMiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BVlItT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BVlItT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjFlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FWUi1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw0NTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFWUiBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiIHRpdGxlPSJBUk0gT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIiB0aXRsZT0iQmxhY2tmaW4gT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBVlItT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjQgQVZSIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1BVlItT3B0aW9ucy0xMTUxIj48L2E+CitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBBVlIgaW1wbGVtZW50YXRpb25zOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbW1jdT08L2NvZGU+PHZhcj5tY3U8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbW1jdS0xMTUyIj48L2E+U3BlY2lmeSBBdG1lbCBBVlIgaW5zdHJ1Y3Rpb24gc2V0IGFyY2hpdGVjdHVyZXMgKElTQSkgb3IgTUNVIHR5cGUuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzJm5ic3A7PGNvZGU+YXZyMjwvY29kZT4uCisKKyAgICAgPHA+R0NDIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgQVZSIGRldmljZXMgYW5kIElTQXM6CisKKyAgICAgPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+CisgICAgIDwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKyAgICAgPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgZ2NjL2RvYy9pbmNsdWRlL2ZkbC50ZXhpLiAtLT4KKyAgICAgPCEtLSBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgdXNpbmcgLS0+CisgICAgIDwhLS0gZ2NjL2NvbmZpZy9hdnIvZ2VuLWF2ci1tbWN1LXRleGkuYyBmcm9tOiAtLT4KKyAgICAgPCEtLSBnY2MvY29uZmlnL2F2ci9hdnItYXJjaC5oIC0tPgorICAgICA8IS0tIGdjYy9jb25maWcvYXZyL2F2ci1kZXZpY2VzLmMgLS0+CisgICAgIDwhLS0gZ2NjL2NvbmZpZy9hdnIvYXZyLW1jdXMuZGVmIC0tPgorICAgICA8IS0tIFBsZWFzZSBkbyBub3QgZWRpdCBtYW51YWxseS4gLS0+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmF2cjI8L2NvZGU+PGRkPiZsZHF1bztDbGFzc2ljJnJkcXVvOyBkZXZpY2VzIHdpdGggdXAgdG8gOCZuYnNwO0tpQiBvZiBwcm9ncmFtIG1lbW9yeS4gCis8YnI+PHZhcj5tY3U8L3Zhcj4mbmJzcDs9IDxjb2RlPmF0dGlueTIyPC9jb2RlPiwgPGNvZGU+YXR0aW55MjY8L2NvZGU+LCA8Y29kZT5hdDkwYzg1MzQ8L2NvZGU+LCA8Y29kZT5hdDkwczIzMTM8L2NvZGU+LCA8Y29kZT5hdDkwczIzMjM8L2NvZGU+LCA8Y29kZT5hdDkwczIzMzM8L2NvZGU+LCA8Y29kZT5hdDkwczIzNDM8L2NvZGU+LCA8Y29kZT5hdDkwczQ0MTQ8L2NvZGU+LCA8Y29kZT5hdDkwczQ0MzM8L2NvZGU+LCA8Y29kZT5hdDkwczQ0MzQ8L2NvZGU+LCA8Y29kZT5hdDkwczg1MTU8L2NvZGU+LCA8Y29kZT5hdDkwczg1MzU8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hdnIyNTwvY29kZT48ZGQ+JmxkcXVvO0NsYXNzaWMmcmRxdW87IGRldmljZXMgd2l0aCB1cCB0byA4Jm5ic3A7S2lCIG9mIHByb2dyYW0gbWVtb3J5IGFuZCB3aXRoIHRoZSA8Y29kZT5NT1ZXPC9jb2RlPiBpbnN0cnVjdGlvbi4gCis8YnI+PHZhcj5tY3U8L3Zhcj4mbmJzcDs9IDxjb2RlPmF0YTUyNzI8L2NvZGU+LCA8Y29kZT5hdGE2Mjg5PC9jb2RlPiwgPGNvZGU+YXR0aW55MTM8L2NvZGU+LCA8Y29kZT5hdHRpbnkxM2E8L2NvZGU+LCA8Y29kZT5hdHRpbnkyMzEzPC9jb2RlPiwgPGNvZGU+YXR0aW55MjMxM2E8L2NvZGU+LCA8Y29kZT5hdHRpbnkyNDwvY29kZT4sIDxjb2RlPmF0dGlueTI0YTwvY29kZT4sIDxjb2RlPmF0dGlueTI1PC9jb2RlPiwgPGNvZGU+YXR0aW55MjYxPC9jb2RlPiwgPGNvZGU+YXR0aW55MjYxYTwvY29kZT4sIDxjb2RlPmF0dGlueTQzdTwvY29kZT4sIDxjb2RlPmF0dGlueTQzMTM8L2NvZGU+LCA8Y29kZT5hdHRpbnk0NDwvY29kZT4sIDxjb2RlPmF0dGlueTQ0YTwvY29kZT4sIDxjb2RlPmF0dGlueTQ1PC9jb2RlPiwgPGNvZGU+YXR0aW55NDYxPC9jb2RlPiwgPGNvZGU+YXR0aW55NDYxYTwvY29kZT4sIDxjb2RlPmF0dGlueTQ4PC9jb2RlPiwgPGNvZGU+YXR0aW55ODQ8L2NvZGU+LCA8Y29kZT5hdHRpbnk4NGE8L2NvZGU+LCA8Y29kZT5hdHRpbnk4NTwvY29kZT4sIDxjb2RlPmF0dGlueTg2MTwvY29kZT4sIDxjb2RlPmF0dGlueTg2MWE8L2NvZGU+LCA8Y29kZT5hdHRpbnk4NzwvY29kZT4sIDxjb2RlPmF0dGlueTg4PC9jb2RlPiwgPGNvZGU+YXQ4NnJmNDAxPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YXZyMzwvY29kZT48ZGQ+JmxkcXVvO0NsYXNzaWMmcmRxdW87IGRldmljZXMgd2l0aCAxNiZuYnNwO0tpQiB1cCB0byA2NCZuYnNwO0tpQiBvZiAgcHJvZ3JhbSBtZW1vcnkuIAorPGJyPjx2YXI+bWN1PC92YXI+Jm5ic3A7PSA8Y29kZT5hdDQzdXNiMzU1PC9jb2RlPiwgPGNvZGU+YXQ3NmM3MTE8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hdnIzMTwvY29kZT48ZGQ+JmxkcXVvO0NsYXNzaWMmcmRxdW87IGRldmljZXMgd2l0aCAxMjgmbmJzcDtLaUIgb2YgcHJvZ3JhbSBtZW1vcnkuIAorPGJyPjx2YXI+bWN1PC92YXI+Jm5ic3A7PSA8Y29kZT5hdG1lZ2ExMDM8L2NvZGU+LCA8Y29kZT5hdDQzdXNiMzIwPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YXZyMzU8L2NvZGU+PGRkPiZsZHF1bztDbGFzc2ljJnJkcXVvOyBkZXZpY2VzIHdpdGggMTYmbmJzcDtLaUIgdXAgdG8gNjQmbmJzcDtLaUIgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIHdpdGggdGhlIDxjb2RlPk1PVlc8L2NvZGU+IGluc3RydWN0aW9uLiAKKzxicj48dmFyPm1jdTwvdmFyPiZuYnNwOz0gPGNvZGU+YXRhNTUwNTwvY29kZT4sIDxjb2RlPmF0bWVnYTE2dTI8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMnUyPC9jb2RlPiwgPGNvZGU+YXRtZWdhOHUyPC9jb2RlPiwgPGNvZGU+YXR0aW55MTYzNDwvY29kZT4sIDxjb2RlPmF0dGlueTE2NzwvY29kZT4sIDxjb2RlPmF0OTB1c2IxNjI8L2NvZGU+LCA8Y29kZT5hdDkwdXNiODI8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hdnI0PC9jb2RlPjxkZD4mbGRxdW87RW5oYW5jZWQmcmRxdW87IGRldmljZXMgd2l0aCB1cCB0byA4Jm5ic3A7S2lCIG9mIHByb2dyYW0gbWVtb3J5LiAKKzxicj48dmFyPm1jdTwvdmFyPiZuYnNwOz0gPGNvZGU+YXRhNjI4NTwvY29kZT4sIDxjb2RlPmF0YTYyODY8L2NvZGU+LCA8Y29kZT5hdG1lZ2E0ODwvY29kZT4sIDxjb2RlPmF0bWVnYTQ4YTwvY29kZT4sIDxjb2RlPmF0bWVnYTQ4cDwvY29kZT4sIDxjb2RlPmF0bWVnYTQ4cGE8L2NvZGU+LCA8Y29kZT5hdG1lZ2E4PC9jb2RlPiwgPGNvZGU+YXRtZWdhOGE8L2NvZGU+LCA8Y29kZT5hdG1lZ2E4aHZhPC9jb2RlPiwgPGNvZGU+YXRtZWdhODUxNTwvY29kZT4sIDxjb2RlPmF0bWVnYTg1MzU8L2NvZGU+LCA8Y29kZT5hdG1lZ2E4ODwvY29kZT4sIDxjb2RlPmF0bWVnYTg4YTwvY29kZT4sIDxjb2RlPmF0bWVnYTg4cDwvY29kZT4sIDxjb2RlPmF0bWVnYTg4cGE8L2NvZGU+LCA8Y29kZT5hdDkwcHdtMTwvY29kZT4sIDxjb2RlPmF0OTBwd20yPC9jb2RlPiwgPGNvZGU+YXQ5MHB3bTJiPC9jb2RlPiwgPGNvZGU+YXQ5MHB3bTM8L2NvZGU+LCA8Y29kZT5hdDkwcHdtM2I8L2NvZGU+LCA8Y29kZT5hdDkwcHdtODE8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hdnI1PC9jb2RlPjxkZD4mbGRxdW87RW5oYW5jZWQmcmRxdW87IGRldmljZXMgd2l0aCAxNiZuYnNwO0tpQiB1cCB0byA2NCZuYnNwO0tpQiBvZiBwcm9ncmFtIG1lbW9yeS4gCis8YnI+PHZhcj5tY3U8L3Zhcj4mbmJzcDs9IDxjb2RlPmF0YTU3OTA8L2NvZGU+LCA8Y29kZT5hdGE1NzkwbjwvY29kZT4sIDxjb2RlPmF0YTU3OTU8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExNjwvY29kZT4sIDxjb2RlPmF0bWVnYTE2YTwvY29kZT4sIDxjb2RlPmF0bWVnYTE2aHZhPC9jb2RlPiwgPGNvZGU+YXRtZWdhMTZodmEyPC9jb2RlPiwgPGNvZGU+YXRtZWdhMTZodmI8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExNmh2YnJldmI8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExNm0xPC9jb2RlPiwgPGNvZGU+YXRtZWdhMTZ1NDwvY29kZT4sIDxjb2RlPmF0bWVnYTE2MTwvY29kZT4sIDxjb2RlPmF0bWVnYTE2MjwvY29kZT4sIDxjb2RlPmF0bWVnYTE2MzwvY29kZT4sIDxjb2RlPmF0bWVnYTE2NGE8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExNjRwPC9jb2RlPiwgPGNvZGU+YXRtZWdhMTY0cGE8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExNjU8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExNjVhPC9jb2RlPiwgPGNvZGU+YXRtZWdhMTY1cDwvY29kZT4sIDxjb2RlPmF0bWVnYTE2NXBhPC9jb2RlPiwgPGNvZGU+YXRtZWdhMTY4PC9jb2RlPiwgPGNvZGU+YXRtZWdhMTY4YTwvY29kZT4sIDxjb2RlPmF0bWVnYTE2OHA8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExNjhwYTwvY29kZT4sIDxjb2RlPmF0bWVnYTE2OTwvY29kZT4sIDxjb2RlPmF0bWVnYTE2OWE8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExNjlwPC9jb2RlPiwgPGNvZGU+YXRtZWdhMTY5cGE8L2NvZGU+LCA8Y29kZT5hdG1lZ2EyNmh2ZzwvY29kZT4sIDxjb2RlPmF0bWVnYTMyPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzJhPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzJjMTwvY29kZT4sIDxjb2RlPmF0bWVnYTMyaHZiPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzJodmJyZXZiPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzJtMTwvY29kZT4sIDxjb2RlPmF0bWVnYTMydTQ8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMnU2PC9jb2RlPiwgPGNvZGU+YXRtZWdhMzIzPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzI0YTwvY29kZT4sIDxjb2RlPmF0bWVnYTMyNHA8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMjRwYTwvY29kZT4sIDxjb2RlPmF0bWVnYTMyNTwvY29kZT4sIDxjb2RlPmF0bWVnYTMyNWE8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMjVwPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzI1MDwvY29kZT4sIDxjb2RlPmF0bWVnYTMyNTBhPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzI1MHA8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMjUwcGE8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMjg8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMjhwPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzI5PC9jb2RlPiwgPGNvZGU+YXRtZWdhMzI5YTwvY29kZT4sIDxjb2RlPmF0bWVnYTMyOXA8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMjlwYTwvY29kZT4sIDxjb2RlPmF0bWVnYTMyOTA8L2NvZGU+LCA8Y29kZT5hdG1lZ2EzMjkwYTwvY29kZT4sIDxjb2RlPmF0bWVnYTMyOTBwPC9jb2RlPiwgPGNvZGU+YXRtZWdhMzI5MHBhPC9jb2RlPiwgPGNvZGU+YXRtZWdhNDA2PC9jb2RlPiwgPGNvZGU+YXRtZWdhNDhodmY8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NDwvY29kZT4sIDxjb2RlPmF0bWVnYTY0YTwvY29kZT4sIDxjb2RlPmF0bWVnYTY0YzE8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NGh2ZTwvY29kZT4sIDxjb2RlPmF0bWVnYTY0bTE8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NHJmYTI8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NHJmcjI8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NDA8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NDQ8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NDRhPC9jb2RlPiwgPGNvZGU+YXRtZWdhNjQ0cDwvY29kZT4sIDxjb2RlPmF0bWVnYTY0NHBhPC9jb2RlPiwgPGNvZGU+YXRtZWdhNjQ1PC9jb2RlPiwgPGNvZGU+YXRtZWdhNjQ1YTwvY29kZT4sIDxjb2RlPmF0bWVnYTY0NXA8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NDUwPC9jb2RlPiwgPGNvZGU+YXRtZWdhNjQ1MGE8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NDUwcDwvY29kZT4sIDxjb2RlPmF0bWVnYTY0OTwvY29kZT4sIDxjb2RlPmF0bWVnYTY0OWE8L2NvZGU+LCA8Y29kZT5hdG1lZ2E2NDlwPC9jb2RlPiwgPGNvZGU+YXRtZWdhNjQ5MDwvY29kZT4sIDxjb2RlPmF0bWVnYTY0OTBhPC9jb2RlPiwgPGNvZGU+YXRtZWdhNjQ5MHA8L2NvZGU+LCA8Y29kZT5hdDkwY2FuMzI8L2NvZGU+LCA8Y29kZT5hdDkwY2FuNjQ8L2NvZGU+LCA8Y29kZT5hdDkwcHdtMTYxPC9jb2RlPiwgPGNvZGU+YXQ5MHB3bTIxNjwvY29kZT4sIDxjb2RlPmF0OTBwd20zMTY8L2NvZGU+LCA8Y29kZT5hdDkwc2NyMTAwPC9jb2RlPiwgPGNvZGU+YXQ5MHVzYjY0NjwvY29kZT4sIDxjb2RlPmF0OTB1c2I2NDc8L2NvZGU+LCA8Y29kZT5hdDk0azwvY29kZT4sIDxjb2RlPm0zMDAwPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YXZyNTE8L2NvZGU+PGRkPiZsZHF1bztFbmhhbmNlZCZyZHF1bzsgZGV2aWNlcyB3aXRoIDEyOCZuYnNwO0tpQiBvZiBwcm9ncmFtIG1lbW9yeS4gCis8YnI+PHZhcj5tY3U8L3Zhcj4mbmJzcDs9IDxjb2RlPmF0bWVnYTEyODwvY29kZT4sIDxjb2RlPmF0bWVnYTEyOGE8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExMjhyZmExPC9jb2RlPiwgPGNvZGU+YXRtZWdhMTI4MDwvY29kZT4sIDxjb2RlPmF0bWVnYTEyODE8L2NvZGU+LCA8Y29kZT5hdG1lZ2ExMjg0PC9jb2RlPiwgPGNvZGU+YXRtZWdhMTI4NHA8L2NvZGU+LCA8Y29kZT5hdDkwY2FuMTI4PC9jb2RlPiwgPGNvZGU+YXQ5MHVzYjEyODY8L2NvZGU+LCA8Y29kZT5hdDkwdXNiMTI4NzwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmF2cjY8L2NvZGU+PGRkPiZsZHF1bztFbmhhbmNlZCZyZHF1bzsgZGV2aWNlcyB3aXRoIDMtYnl0ZSBQQywgaS5lLiB3aXRoIG1vcmUgdGhhbiAxMjgmbmJzcDtLaUIgb2YgcHJvZ3JhbSBtZW1vcnkuIAorPGJyPjx2YXI+bWN1PC92YXI+Jm5ic3A7PSA8Y29kZT5hdG1lZ2EyNTYwPC9jb2RlPiwgPGNvZGU+YXRtZWdhMjU2MTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmF2cnhtZWdhMjwvY29kZT48ZGQ+JmxkcXVvO1hNRUdBJnJkcXVvOyBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDgmbmJzcDtLaUIgYW5kIHVwIHRvIDY0Jm5ic3A7S2lCIG9mIHByb2dyYW0gbWVtb3J5LiAKKzxicj48dmFyPm1jdTwvdmFyPiZuYnNwOz0gPGNvZGU+YXRteHQxMTJzbDwvY29kZT4sIDxjb2RlPmF0bXh0MjI0PC9jb2RlPiwgPGNvZGU+YXRteHQyMjRlPC9jb2RlPiwgPGNvZGU+YXRteHQzMzZzPC9jb2RlPiwgPGNvZGU+YXR4bWVnYTE2YTQ8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMTZhNHU8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMTZjNDwvY29kZT4sIDxjb2RlPmF0eG1lZ2ExNmQ0PC9jb2RlPiwgPGNvZGU+YXR4bWVnYTE2eDE8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMzJhNDwvY29kZT4sIDxjb2RlPmF0eG1lZ2EzMmE0dTwvY29kZT4sIDxjb2RlPmF0eG1lZ2EzMmM0PC9jb2RlPiwgPGNvZGU+YXR4bWVnYTMyZDQ8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMzJlNTwvY29kZT4sIDxjb2RlPmF0eG1lZ2EzMngxPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YXZyeG1lZ2E0PC9jb2RlPjxkZD4mbGRxdW87WE1FR0EmcmRxdW87IGRldmljZXMgd2l0aCBtb3JlIHRoYW4gNjQmbmJzcDtLaUIgYW5kIHVwIHRvIDEyOCZuYnNwO0tpQiBvZiBwcm9ncmFtIG1lbW9yeS4gCis8YnI+PHZhcj5tY3U8L3Zhcj4mbmJzcDs9IDxjb2RlPmF0eG1lZ2E2NGEzPC9jb2RlPiwgPGNvZGU+YXR4bWVnYTY0YTN1PC9jb2RlPiwgPGNvZGU+YXR4bWVnYTY0YTR1PC9jb2RlPiwgPGNvZGU+YXR4bWVnYTY0YjE8L2NvZGU+LCA8Y29kZT5hdHhtZWdhNjRiMzwvY29kZT4sIDxjb2RlPmF0eG1lZ2E2NGMzPC9jb2RlPiwgPGNvZGU+YXR4bWVnYTY0ZDM8L2NvZGU+LCA8Y29kZT5hdHhtZWdhNjRkNDwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmF2cnhtZWdhNTwvY29kZT48ZGQ+JmxkcXVvO1hNRUdBJnJkcXVvOyBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDY0Jm5ic3A7S2lCIGFuZCB1cCB0byAxMjgmbmJzcDtLaUIgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIG1vcmUgdGhhbiA2NCZuYnNwO0tpQiBvZiBSQU0uIAorPGJyPjx2YXI+bWN1PC92YXI+Jm5ic3A7PSA8Y29kZT5hdHhtZWdhNjRhMTwvY29kZT4sIDxjb2RlPmF0eG1lZ2E2NGExdTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmF2cnhtZWdhNjwvY29kZT48ZGQ+JmxkcXVvO1hNRUdBJnJkcXVvOyBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDEyOCZuYnNwO0tpQiBvZiBwcm9ncmFtIG1lbW9yeS4gCis8YnI+PHZhcj5tY3U8L3Zhcj4mbmJzcDs9IDxjb2RlPmF0bXh0NTQwczwvY29kZT4sIDxjb2RlPmF0bXh0NTQwc3JldmE8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMTI4YTM8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMTI4YTN1PC9jb2RlPiwgPGNvZGU+YXR4bWVnYTEyOGIxPC9jb2RlPiwgPGNvZGU+YXR4bWVnYTEyOGIzPC9jb2RlPiwgPGNvZGU+YXR4bWVnYTEyOGMzPC9jb2RlPiwgPGNvZGU+YXR4bWVnYTEyOGQzPC9jb2RlPiwgPGNvZGU+YXR4bWVnYTEyOGQ0PC9jb2RlPiwgPGNvZGU+YXR4bWVnYTE5MmEzPC9jb2RlPiwgPGNvZGU+YXR4bWVnYTE5MmEzdTwvY29kZT4sIDxjb2RlPmF0eG1lZ2ExOTJjMzwvY29kZT4sIDxjb2RlPmF0eG1lZ2ExOTJkMzwvY29kZT4sIDxjb2RlPmF0eG1lZ2EyNTZhMzwvY29kZT4sIDxjb2RlPmF0eG1lZ2EyNTZhM2I8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMjU2YTNidTwvY29kZT4sIDxjb2RlPmF0eG1lZ2EyNTZhM3U8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMjU2YzM8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMjU2ZDM8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMzg0YzM8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMzg0ZDM8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hdnJ4bWVnYTc8L2NvZGU+PGRkPiZsZHF1bztYTUVHQSZyZHF1bzsgZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxMjgmbmJzcDtLaUIgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIG1vcmUgdGhhbiA2NCZuYnNwO0tpQiBvZiBSQU0uIAorPGJyPjx2YXI+bWN1PC92YXI+Jm5ic3A7PSA8Y29kZT5hdHhtZWdhMTI4YTE8L2NvZGU+LCA8Y29kZT5hdHhtZWdhMTI4YTF1PC9jb2RlPiwgPGNvZGU+YXR4bWVnYTEyOGE0dTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmF2cjE8L2NvZGU+PGRkPlRoaXMgSVNBIGlzIGltcGxlbWVudGVkIGJ5IHRoZSBtaW5pbWFsIEFWUiBjb3JlIGFuZCBzdXBwb3J0ZWQgZm9yIGFzc2VtYmxlciBvbmx5LiAKKzxicj48dmFyPm1jdTwvdmFyPiZuYnNwOz0gPGNvZGU+YXR0aW55MTE8L2NvZGU+LCA8Y29kZT5hdHRpbnkxMjwvY29kZT4sIDxjb2RlPmF0dGlueTE1PC9jb2RlPiwgPGNvZGU+YXR0aW55Mjg8L2NvZGU+LCA8Y29kZT5hdDkwczEyMDA8L2NvZGU+LgorCisgICAgIDwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFjY3VtdWxhdGUtYXJnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFjY3VtdWxhdGVfMDAyZGFyZ3MtMTE1MyI+PC9hPkFjY3VtdWxhdGUgb3V0Z29pbmcgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCBhY3F1aXJlL3JlbGVhc2UgdGhlIG5lZWRlZAorc3RhY2sgc3BhY2UgZm9yIG91dGdvaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cyBvbmNlIGluIGZ1bmN0aW9uCitwcm9sb2d1ZS9lcGlsb2d1ZS4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIG91dGdvaW5nIGFyZ3VtZW50cyBhcmUgcHVzaGVkCitiZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uIGFuZCBwb3BwZWQgYWZ0ZXJ3YXJkcy4KKworICAgICA8cD5Qb3BwaW5nIHRoZSBhcmd1bWVudHMgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgY2FuIGJlIGV4cGVuc2l2ZSBvbgorQVZSIHNvIHRoYXQgYWNjdW11bGF0aW5nIHRoZSBzdGFjayBzcGFjZSBtaWdodCBsZWFkIHRvIHNtYWxsZXIKK2V4ZWN1dGFibGVzIGJlY2F1c2UgYXJndW1lbnRzIG5lZWQgbm90IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUKK3N0YWNrIGFmdGVyIHN1Y2ggYSBmdW5jdGlvbiBjYWxsLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGNhbiBsZWFkIHRvIHJlZHVjZWQgY29kZSBzaXplIGZvciBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtCitzZXZlcmFsIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGdldCB0aGVpciBhcmd1bWVudHMgb24gdGhlIHN0YWNrIGxpa2UKK2NhbGxzIHRvIHByaW50Zi1saWtlIGZ1bmN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYnJhbmNoLWNvc3Q9PC9jb2RlPjx2YXI+Y29zdDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tYnJhbmNoXzAwMmRjb3N0LTExNTQiPjwvYT5TZXQgdGhlIGJyYW5jaCBjb3N0cyBmb3IgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9ucyB0bworPHZhcj5jb3N0PC92YXI+LiAgUmVhc29uYWJsZSB2YWx1ZXMgZm9yIDx2YXI+Y29zdDwvdmFyPiBhcmUgc21hbGwsIG5vbi1uZWdhdGl2ZQoraW50ZWdlcnMuIFRoZSBkZWZhdWx0IGJyYW5jaCBjb3N0IGlzIDAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNhbGwtcHJvbG9ndWVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2FsbF8wMDJkcHJvbG9ndWVzLTExNTUiPjwvYT5GdW5jdGlvbnMgcHJvbG9ndWVzL2VwaWxvZ3VlcyBhcmUgZXhwYW5kZWQgYXMgY2FsbHMgdG8gYXBwcm9wcmlhdGUKK3N1YnJvdXRpbmVzLiAgQ29kZSBzaXplIGlzIHNtYWxsZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWludDg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pbnQ4LTExNTYiPjwvYT5Bc3N1bWUgPGNvZGU+aW50PC9jb2RlPiB0byBiZSA4LWJpdCBpbnRlZ2VyLiAgVGhpcyBhZmZlY3RzIHRoZSBzaXplcyBvZiBhbGwgdHlwZXM6IGEKKzxjb2RlPmNoYXI8L2NvZGU+IGlzIDEgYnl0ZSwgYW4gPGNvZGU+aW50PC9jb2RlPiBpcyAxIGJ5dGUsIGEgPGNvZGU+bG9uZzwvY29kZT4gaXMgMiBieXRlcywKK2FuZCA8Y29kZT5sb25nIGxvbmc8L2NvZGU+IGlzIDQgYnl0ZXMuICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgb3B0aW9uIGRvZXMgbm90Citjb25mb3JtIHRvIHRoZSBDIHN0YW5kYXJkcywgYnV0IGl0IHJlc3VsdHMgaW4gc21hbGxlciBjb2RlCitzaXplLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1pbnRlcnJ1cHRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGludGVycnVwdHMtMTE1NyI+PC9hPkdlbmVyYXRlZCBjb2RlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggaGFyZHdhcmUgaW50ZXJydXB0cy4gCitDb2RlIHNpemUgaXMgc21hbGxlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmVsYXg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1yZWxheC0xMTU4Ij48L2E+VHJ5IHRvIHJlcGxhY2UgPGNvZGU+Q0FMTDwvY29kZT4gcmVzcC4gPGNvZGU+Sk1QPC9jb2RlPiBpbnN0cnVjdGlvbiBieSB0aGUgc2hvcnRlcgorPGNvZGU+UkNBTEw8L2NvZGU+IHJlc3AuIDxjb2RlPlJKTVA8L2NvZGU+IGluc3RydWN0aW9uIGlmIGFwcGxpY2FibGUuIAorU2V0dGluZyA8Y29kZT4tbXJlbGF4PC9jb2RlPiBqdXN0IGFkZHMgdGhlIDxjb2RlPi0tcmVsYXg8L2NvZGU+IG9wdGlvbiB0byB0aGUKK2xpbmtlciBjb21tYW5kIGxpbmUgd2hlbiB0aGUgbGlua2VyIGlzIGNhbGxlZC4KKworICAgICA8cD5KdW1wIHJlbGF4aW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgbGlua2VyIGJlY2F1c2UganVtcCBvZmZzZXRzIGFyZSBub3QKK2tub3duIGJlZm9yZSBjb2RlIGlzIGxvY2F0ZWQuIFRoZXJlZm9yZSwgdGhlIGFzc2VtYmxlciBjb2RlIGdlbmVyYXRlZCBieSB0aGUKK2NvbXBpbGVyIGlzIHRoZSBzYW1lLCBidXQgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgZXhlY3V0YWJsZSBtYXkKK2RpZmZlciBmcm9tIGluc3RydWN0aW9ucyBpbiB0aGUgYXNzZW1ibGVyIGNvZGUuCisKKyAgICAgPHA+UmVsYXhpbmcgbXVzdCBiZSB0dXJuZWQgb24gaWYgbGlua2VyIHN0dWJzIGFyZSBuZWVkZWQsIHNlZSB0aGUKK3NlY3Rpb24gb24gPGNvZGU+RUlORDwvY29kZT4gYW5kIGxpbmtlciBzdHVicyBiZWxvdy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3A4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc3A4LTExNTkiPjwvYT5UcmVhdCB0aGUgc3RhY2sgcG9pbnRlciByZWdpc3RlciBhcyBhbiA4LWJpdCByZWdpc3RlciwKK2kuZS4gYXNzdW1lIHRoZSBoaWdoIGJ5dGUgb2YgdGhlIHN0YWNrIHBvaW50ZXIgaXMgemVyby4gCitJbiBnZW5lcmFsLCB5b3UgZG9uJ3QgbmVlZCB0byBzZXQgdGhpcyBvcHRpb24gYnkgaGFuZC4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHRvIHNlbGVjdCBhbmQKK2J1aWxkIG11bHRpbGlicyBmb3IgYXJjaGl0ZWN0dXJlcyA8Y29kZT5hdnIyPC9jb2RlPiBhbmQgPGNvZGU+YXZyMjU8L2NvZGU+LiAKK1RoZXNlIGFyY2hpdGVjdHVyZXMgbWl4IGRldmljZXMgd2l0aCBhbmQgd2l0aG91dCA8Y29kZT5TUEg8L2NvZGU+LiAKK0ZvciBhbnkgc2V0dGluZyBvdGhlciB0aGFuIDxjb2RlPi1tbWN1PWF2cjI8L2NvZGU+IG9yIDxjb2RlPi1tbWN1PWF2cjI1PC9jb2RlPgordGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGFkZCBvciByZW1vdmUgdGhpcyBvcHRpb24gZnJvbSB0aGUgY29tcGlsZXIKK3Byb3BlcidzIGNvbW1hbmQgbGluZSwgYmVjYXVzZSB0aGUgY29tcGlsZXIgdGhlbiBrbm93cyBpZiB0aGUgZGV2aWNlCitvciBhcmNoaXRlY3R1cmUgaGFzIGFuIDgtYml0IHN0YWNrIHBvaW50ZXIgYW5kIHRodXMgbm8gPGNvZGU+U1BIPC9jb2RlPgorcmVnaXN0ZXIgb3Igbm90LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdHJpY3QtWDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXN0cmljdF8wMDJkWC0xMTYwIj48L2E+VXNlIGFkZHJlc3MgcmVnaXN0ZXIgPGNvZGU+WDwvY29kZT4gaW4gYSB3YXkgcHJvcG9zZWQgYnkgdGhlIGhhcmR3YXJlLiAgVGhpcyBtZWFucwordGhhdCA8Y29kZT5YPC9jb2RlPiBpcyBvbmx5IHVzZWQgaW4gaW5kaXJlY3QsIHBvc3QtaW5jcmVtZW50IG9yCitwcmUtZGVjcmVtZW50IGFkZHJlc3NpbmcuCisKKyAgICAgPHA+V2l0aG91dCB0aGlzIG9wdGlvbiwgdGhlIDxjb2RlPlg8L2NvZGU+IHJlZ2lzdGVyIG1heSBiZSB1c2VkIGluIHRoZSBzYW1lIHdheQorYXMgPGNvZGU+WTwvY29kZT4gb3IgPGNvZGU+WjwvY29kZT4gd2hpY2ggdGhlbiBpcyBlbXVsYXRlZCBieSBhZGRpdGlvbmFsCitpbnN0cnVjdGlvbnMuIAorRm9yIGV4YW1wbGUsIGxvYWRpbmcgYSB2YWx1ZSB3aXRoIDxjb2RlPlgrY29uc3Q8L2NvZGU+IGFkZHJlc3Npbmcgd2l0aCBhCitzbWFsbCBub24tbmVnYXRpdmUgPGNvZGU+Y29uc3QgJmx0OyA2NDwvY29kZT4gdG8gYSByZWdpc3RlciA8dmFyPlJuPC92YXI+IGlzCitwZXJmb3JtZWQgYXMKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgYWRpdyByMjYsIGNvbnN0ICAgOyBYICs9IGNvbnN0CisgICAgICAgICAgbGQgICA8dmFyPlJuPC92YXI+LCBYICAgICAgICA7IDx2YXI+Um48L3Zhcj4gPSAqWAorICAgICAgICAgIHNiaXcgcjI2LCBjb25zdCAgIDsgWCAtPSBjb25zdAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+LW10aW55LXN0YWNrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdGlueV8wMDJkc3RhY2stMTE2MSI+PC9hPk9ubHkgY2hhbmdlIHRoZSBsb3dlciA4Jm5ic3A7Yml0cyBvZiB0aGUgc3RhY2sgcG9pbnRlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYWRkci1zcGFjZS1jb252ZXJ0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XYWRkcl8wMDJkc3BhY2VfMDAyZGNvbnZlcnQtMTE2MiI+PC9hPldhcm4gYWJvdXQgY29udmVyc2lvbnMgYmV0d2VlbiBhZGRyZXNzIHNwYWNlcyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKK3Jlc3VsdGluZyBhZGRyZXNzIHNwYWNlIGlzIG5vdCBjb250YWluZWQgaW4gdGhlIGluY29taW5nIGFkZHJlc3Mgc3BhY2UuIAorPC9kbD4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjE3LjQuMSA8Y29kZT5FSU5EPC9jb2RlPiBhbmQgRGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxMjggS2kgQnl0ZXMgb2YgRmxhc2g8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkVJTkRfMDA3ZC0xMTYzIj48L2E+UG9pbnRlcnMgaW4gdGhlIGltcGxlbWVudGF0aW9uIGFyZSAxNiZuYnNwO2JpdHMgd2lkZS4gCitUaGUgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIG9yIGxhYmVsIGlzIHJlcHJlc2VudGVkIGFzIHdvcmQgYWRkcmVzcyBzbwordGhhdCBpbmRpcmVjdCBqdW1wcyBhbmQgY2FsbHMgY2FuIHRhcmdldCBhbnkgY29kZSBhZGRyZXNzIGluIHRoZQorcmFuZ2Ugb2YgNjQmbmJzcDtLaSB3b3Jkcy4KKworIDxwPkluIG9yZGVyIHRvIGZhY2lsaXRhdGUgaW5kaXJlY3QganVtcCBvbiBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDEyOCZuYnNwO0tpCitieXRlcyBvZiBwcm9ncmFtIG1lbW9yeSBzcGFjZSwgdGhlcmUgaXMgYSBzcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVyIGNhbGxlZAorPGNvZGU+RUlORDwvY29kZT4gdGhhdCBzZXJ2ZXMgYXMgbW9zdCBzaWduaWZpY2FudCBwYXJ0IG9mIHRoZSB0YXJnZXQgYWRkcmVzcword2hlbiA8Y29kZT5FSUNBTEw8L2NvZGU+IG9yIDxjb2RlPkVJSk1QPC9jb2RlPiBpbnN0cnVjdGlvbnMgYXJlIHVzZWQuCisKKyA8cD5JbmRpcmVjdCBqdW1wcyBhbmQgY2FsbHMgb24gdGhlc2UgZGV2aWNlcyBhcmUgaGFuZGxlZCBhcyBmb2xsb3dzIGJ5Cit0aGUgY29tcGlsZXIgYW5kIGFyZSBzdWJqZWN0IHRvIHNvbWUgbGltaXRhdGlvbnM6CisKKyAgICAgPHVsPgorPGxpPlRoZSBjb21waWxlciBuZXZlciBzZXRzIDxjb2RlPkVJTkQ8L2NvZGU+LgorCisgICAgIDxsaT5UaGUgY29tcGlsZXIgdXNlcyA8Y29kZT5FSU5EPC9jb2RlPiBpbXBsaWNpdGVseSBpbiA8Y29kZT5FSUNBTEw8L2NvZGU+Lzxjb2RlPkVJSk1QPC9jb2RlPgoraW5zdHJ1Y3Rpb25zIG9yIG1pZ2h0IHJlYWQgPGNvZGU+RUlORDwvY29kZT4gZGlyZWN0bHkgaW4gb3JkZXIgdG8gZW11bGF0ZSBhbgoraW5kaXJlY3QgY2FsbC9qdW1wIGJ5IG1lYW5zIG9mIGEgPGNvZGU+UkVUPC9jb2RlPiBpbnN0cnVjdGlvbi4KKworICAgICA8bGk+VGhlIGNvbXBpbGVyIGFzc3VtZXMgdGhhdCA8Y29kZT5FSU5EPC9jb2RlPiBuZXZlciBjaGFuZ2VzIGR1cmluZyB0aGUgc3RhcnR1cAorY29kZSBvciBkdXJpbmcgdGhlIGFwcGxpY2F0aW9uLiBJbiBwYXJ0aWN1bGFyLCA8Y29kZT5FSU5EPC9jb2RlPiBpcyBub3QKK3NhdmVkL3Jlc3RvcmVkIGluIGZ1bmN0aW9uIG9yIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKK3Byb2xvZ3VlL2VwaWxvZ3VlLgorCisgICAgIDxsaT5Gb3IgaW5kaXJlY3QgY2FsbHMgdG8gZnVuY3Rpb25zIGFuZCBjb21wdXRlZCBnb3RvLCB0aGUgbGlua2VyCitnZW5lcmF0ZXMgPGVtPnN0dWJzPC9lbT4uIFN0dWJzIGFyZSBqdW1wIHBhZHMgc29tZXRpbWVzIGFsc28gY2FsbGVkCis8ZW0+dHJhbXBvbGluZXM8L2VtPi4gVGh1cywgdGhlIGluZGlyZWN0IGNhbGwvanVtcCBqdW1wcyB0byBzdWNoIGEgc3R1Yi4gCitUaGUgc3R1YiBjb250YWlucyBhIGRpcmVjdCBqdW1wIHRvIHRoZSBkZXNpcmVkIGFkZHJlc3MuCisKKyAgICAgPGxpPkxpbmtlciByZWxheGF0aW9uIG11c3QgYmUgdHVybmVkIG9uIHNvIHRoYXQgdGhlIGxpbmtlciB3aWxsIGdlbmVyYXRlCit0aGUgc3R1YnMgY29ycmVjdGx5IGFuIGFsbCBzaXR1YWx0aW9uLiBTZWUgdGhlIGNvbXBpbGVyIG9wdGlvbgorPGNvZGU+LW1yZWxheDwvY29kZT4gYW5kIHRoZSBsaW5sZXIgb3B0aW9uIDxjb2RlPi0tcmVsYXg8L2NvZGU+LiAKK1RoZXJlIGFyZSBjb3JuZXIgY2FzZXMgd2hlcmUgdGhlIGxpbmtlciBpcyBzdXBwb3NlZCB0byBnZW5lcmF0ZSBzdHVicworYnV0IGFib3J0cyB3aXRob3V0IHJlbGF4YXRpb24gYW5kIHdpdGhvdXQgYSBoZWxwZnVsIGVycm9yIG1lc3NhZ2UuCisKKyAgICAgPGxpPlRoZSBkZWZhdWx0IGxpbmtlciBzY3JpcHQgaXMgYXJyYW5nZWQgZm9yIGNvZGUgd2l0aCA8Y29kZT5FSU5EID0gMDwvY29kZT4uIAorSWYgY29kZSBpcyBzdXBwb3NlZCB0byB3b3JrIGZvciBhIHNldHVwIHdpdGggPGNvZGU+RUlORCAhPSAwPC9jb2RlPiwgYSBjdXN0b20KK2xpbmtlciBzY3JpcHQgaGFzIHRvIGJlIHVzZWQgaW4gb3JkZXIgdG8gcGxhY2UgdGhlIHNlY3Rpb25zIHdob3NlCituYW1lIHN0YXJ0IHdpdGggPGNvZGU+LnRyYW1wb2xpbmVzPC9jb2RlPiBpbnRvIHRoZSBzZWdtZW50IHdoZXJlIDxjb2RlPkVJTkQ8L2NvZGU+Citwb2ludHMgdG8uCisKKyAgICAgPGxpPlRoZSBzdGFydHVwIGNvZGUgZnJvbSBsaWJnY2MgbmV2ZXIgc2V0cyA8Y29kZT5FSU5EPC9jb2RlPi4gCitOb3RpY2UgdGhhdCBzdGFydHVwIGNvZGUgaXMgYSBibGVuZCBvZiBjb2RlIGZyb20gbGliZ2NjIGFuZCBBVlItTGliQy4gCitGb3IgdGhlIGltcGFjdCBvZiBBVlItTGliQyBvbiA8Y29kZT5FSU5EPC9jb2RlPiwgc2VlIHRoZQorPGEgaHJlZj0iaHR0cDovL25vbmdudS5vcmcvYXZyLWxpYmMvdXNlci1tYW51YWwvIj5BVlItTGliQyZuYnNwO3VzZXImbmJzcDttYW51YWw8L2E+PCEtLSAvQHcgLS0+LgorCisgICAgIDxsaT5JdCBpcyBsZWdpdGltYXRlIGZvciB1c2VyLXNwZWNpZmljIHN0YXJ0dXAgY29kZSB0byBzZXQgdXAgPGNvZGU+RUlORDwvY29kZT4KK2Vhcmx5LCBmb3IgZXhhbXBsZSBieSBtZWFucyBvZiBpbml0aWFsaXphdGlvbiBjb2RlIGxvY2F0ZWQgaW4KK3NlY3Rpb24gPGNvZGU+LmluaXQzPC9jb2RlPi4gU3VjaCBjb2RlIHJ1bnMgcHJpb3IgdG8gZ2VuZXJhbCBzdGFydHVwIGNvZGUKK3RoYXQgaW5pdGlhbGl6ZXMgUkFNIGFuZCBjYWxscyBjb25zdHJ1Y3RvcnMsIGJ1dCBhZnRlciB0aGUgYml0CitvZiBzdGFydHVwIGNvZGUgZnJvbSBBVlItTGliQyB0aGF0IHNldHMgPGNvZGU+RUlORDwvY29kZT4gdG8gdGhlIHNlZ21lbnQKK3doZXJlIHRoZSB2ZWN0b3IgdGFibGUgaXMgbG9jYXRlZC4KKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICNpbmNsdWRlICZsdDthdnIvaW8uaCZndDsKKyAgICAgICAgICAKKyAgICAgICAgICBzdGF0aWMgdm9pZAorICAgICAgICAgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5pbml0MyIpLG5ha2VkLHVzZWQsbm9faW5zdHJ1bWVudF9mdW5jdGlvbikpCisgICAgICAgICAgaW5pdDNfc2V0X2VpbmQgKHZvaWQpCisgICAgICAgICAgeworICAgICAgICAgICAgX19hc20gdm9sYXRpbGUgKCJsZGkgcjI0LHBtX2hoOChfX3RyYW1wb2xpbmVzX3N0YXJ0KVxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAlaTAscjI0IiA6OiAibiIgKCZhbXA7RUlORCkgOiAicjI0IiwibWVtb3J5Iik7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIDxjb2RlPl9fdHJhbXBvbGluZXNfc3RhcnQ8L2NvZGU+IHN5bWJvbCBpcyBkZWZpbmVkIGluIHRoZSBsaW5rZXIgc2NyaXB0LgorCisgICAgIDxsaT5TdHVicyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGxpbmtlciBpZgordGhlIGZvbGxvd2luZyB0d28gY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICAgIDx1bD4KKzxsaT5UaGUgYWRkcmVzcyBvZiBhIGxhYmVsIGlzIHRha2VuIGJ5IG1lYW5zIG9mIHRoZSA8Y29kZT5nczwvY29kZT4gbW9kaWZpZXIKKyhzaG9ydCBmb3IgPGVtPmdlbmVyYXRlIHN0dWJzPC9lbT4pIGxpa2Ugc286CisgICAgICAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICAgICAgTERJIHIyNCwgbG84KGdzKDx2YXI+ZnVuYzwvdmFyPikpCisgICAgICAgICAgICAgICBMREkgcjI1LCBoaTgoZ3MoPHZhcj5mdW5jPC92YXI+KSkKKzwvcHJlPgorICAgICAgICAgIDxsaT5UaGUgZmluYWwgbG9jYXRpb24gb2YgdGhhdCBsYWJlbCBpcyBpbiBhIGNvZGUgc2VnbWVudAorPGVtPm91dHNpZGU8L2VtPiB0aGUgc2VnbWVudCB3aGVyZSB0aGUgc3R1YnMgYXJlIGxvY2F0ZWQuIAorPC91bD4KKworICAgICA8bGk+VGhlIGNvbXBpbGVyIGVtaXRzIHN1Y2ggPGNvZGU+Z3M8L2NvZGU+IG1vZGlmaWVycyBmb3IgY29kZSBsYWJlbHMgaW4gdGhlCitmb2xsb3dpbmcgc2l0dWF0aW9uczoKKyAgICAgICAgICA8dWw+Cis8bGk+VGFraW5nIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiBvciBjb2RlIGxhYmVsLiAKKzxsaT5Db21wdXRlZCBnb3RvLiAKKzxsaT5JZiBwcm9sb2d1ZS1zYXZlIGZ1bmN0aW9uIGlzIHVzZWQsIHNlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNhbGwtcHJvbG9ndWVzPC9zcGFuPjwvc2FtcD4KK2NvbW1hbmQtbGluZSBvcHRpb24uIAorPGxpPlN3aXRjaC9jYXNlIGRpc3BhdGNoIHRhYmxlcy4gSWYgeW91IGRvIG5vdCB3YW50IHN1Y2ggZGlzcGF0Y2gKK3RhYmxlcyB5b3UgY2FuIHNwZWNpZnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tanVtcC10YWJsZXM8L3NwYW4+PC9zYW1wPiBjb21tYW5kLWxpbmUgb3B0aW9uLiAKKzxsaT5DIGFuZCBDKysgY29uc3RydWN0b3JzL2Rlc3RydWN0b3JzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC9zaHV0ZG93bi4gCis8bGk+SWYgdGhlIHRvb2xzIGhpdCBhIDxjb2RlPmdzKCk8L2NvZGU+IG1vZGlmaWVyIGV4cGxhaW5lZCBhYm92ZS4gCis8L3VsPgorCisgICAgIDxsaT5KdW1waW5nIHRvIG5vbi1zeW1ib2xpYyBhZGRyZXNzZXMgbGlrZSBzbyBpcyA8ZW0+bm90PC9lbT4gc3VwcG9ydGVkOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBpbnQgbWFpbiAodm9pZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIENhbGwgZnVuY3Rpb24gYXQgd29yZCBhZGRyZXNzIDB4MiAqLworICAgICAgICAgICAgICByZXR1cm4gKChpbnQoKikodm9pZCkpIDB4MikoKTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHA+SW5zdGVhZCwgYSBzdHViIGhhcyB0byBiZSBzZXQgdXAsIGkuZS4gdGhlIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQKK3Rocm91Z2ggYSBzeW1ib2wgKDxjb2RlPmZ1bmNfNDwvY29kZT4gaW4gdGhlIGV4YW1wbGUpOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBpbnQgbWFpbiAodm9pZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAgIGV4dGVybiBpbnQgZnVuY180ICh2b2lkKTsKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgLyogQ2FsbCBmdW5jdGlvbiBhdCBieXRlIGFkZHJlc3MgMHg0ICovCisgICAgICAgICAgICAgIHJldHVybiBmdW5jXzQoKTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHA+YW5kIHRoZSBhcHBsaWNhdGlvbiBiZSBsaW5rZWQgd2l0aCA8Y29kZT4tV2wsLS1kZWZzeW0sZnVuY180PTB4NDwvY29kZT4uIAorQWx0ZXJuYXRpdmVseSwgPGNvZGU+ZnVuY180PC9jb2RlPiBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgbGlua2VyIHNjcmlwdC4gCis8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjMuMTcuNC4yIEhhbmRsaW5nIG9mIHRoZSA8Y29kZT5SQU1QRDwvY29kZT4sIDxjb2RlPlJBTVBYPC9jb2RlPiwgPGNvZGU+UkFNUFk8L2NvZGU+IGFuZCA8Y29kZT5SQU1QWjwvY29kZT4gU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlcnM8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlJBTVBEXzAwN2QtMTE2NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiUkFNUFhfMDA3ZC0xMTY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JSQU1QWV8wMDdkLTExNjYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlJBTVBaXzAwN2QtMTE2NyI+PC9hPlNvbWUgQVZSIGRldmljZXMgc3VwcG9ydCBtZW1vcmllcyBsYXJnZXIgdGhhbiB0aGUgNjQmbmJzcDtLaUIgcmFuZ2UKK3RoYXQgY2FuIGJlIGFjY2Vzc2VkIHdpdGggMTYtYml0IHBvaW50ZXJzLiAgVG8gYWNjZXNzIG1lbW9yeSBsb2NhdGlvbnMKK291dHNpZGUgdGhpcyA2NCZuYnNwO0tpQiByYW5nZSwgdGhlIGNvbnRlbnRlbnQgb2YgYSA8Y29kZT5SQU1QPC9jb2RlPgorcmVnaXN0ZXIgaXMgdXNlZCBhcyBoaWdoIHBhcnQgb2YgdGhlIGFkZHJlc3M6CitUaGUgPGNvZGU+WDwvY29kZT4sIDxjb2RlPlk8L2NvZGU+LCA8Y29kZT5aPC9jb2RlPiBhZGRyZXNzIHJlZ2lzdGVyIGlzIGNvbmNhdGVuYXRlZAord2l0aCB0aGUgPGNvZGU+UkFNUFg8L2NvZGU+LCA8Y29kZT5SQU1QWTwvY29kZT4sIDxjb2RlPlJBTVBaPC9jb2RlPiBzcGVjaWFsIGZ1bmN0aW9uCityZWdpc3RlciwgcmVzcGVjdGl2ZWx5LCB0byBnZXQgYSB3aWRlIGFkZHJlc3MuIFNpbWlsYXJseSwKKzxjb2RlPlJBTVBEPC9jb2RlPiBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggZGlyZWN0IGFkZHJlc3NpbmcuCisKKyAgICAgPHVsPgorPGxpPlRoZSBzdGFydHVwIGNvZGUgaW5pdGlhbGl6ZXMgdGhlIDxjb2RlPlJBTVA8L2NvZGU+IHNwZWNpYWwgZnVuY3Rpb24KK3JlZ2lzdGVycyB3aXRoIHplcm8uCisKKyAgICAgPGxpPklmIGEgPGEgaHJlZj0iQVZSLU5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjQVZSLU5hbWVkLUFkZHJlc3MtU3BhY2VzIj5uYW1lZCBhZGRyZXNzIHNwYWNlPC9hPiBvdGhlciB0aGFuCitnZW5lcmljIG9yIDxjb2RlPl9fZmxhc2g8L2NvZGU+IGlzIHVzZWQsIHRoZW4gPGNvZGU+UkFNUFo8L2NvZGU+IGlzIHNldAorYXMgbmVlZGVkIGJlZm9yZSB0aGUgb3BlcmF0aW9uLgorCisgICAgIDxsaT5JZiB0aGUgZGV2aWNlIHN1cHBvcnRzIFJBTSBsYXJnZXIgdGhhbiA2NCZuYnNwO0tpQiBhbmQgdGhlIGNvbXBpbGVyCituZWVkcyB0byBjaGFuZ2UgPGNvZGU+UkFNUFo8L2NvZGU+IHRvIGFjY29tcGxpc2ggYW4gb3BlcmF0aW9uLCA8Y29kZT5SQU1QWjwvY29kZT4KK2lzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgdGhlIG9wZXJhdGlvbi4KKworICAgICA8bGk+SWYgdGhlIGRldmljZSBjb21lcyB3aXRoIGEgc3BlY2lmaWMgPGNvZGU+UkFNUDwvY29kZT4gcmVnaXN0ZXIsIHRoZSBJU1IKK3Byb2xvZ3VlL2VwaWxvZ3VlIHNhdmVzL3Jlc3RvcmVzIHRoYXQgU0ZSIGFuZCBpbml0aWFsaXplcyBpdCB3aXRoCit6ZXJvIGluIGNhc2UgdGhlIElTUiBjb2RlIG1pZ2h0IChpbXBsaWNpdGx5KSB1c2UgaXQuCisKKyAgICAgPGxpPlJBTSBsYXJnZXIgdGhhbiA2NCZuYnNwO0tpQiBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdDQyBmb3IgQVZSIHRhcmdldHMuIAorSWYgeW91IHVzZSBpbmxpbmUgYXNzZW1ibGVyIHRvIHJlYWQgZnJvbSBsb2NhdGlvbnMgb3V0c2lkZSB0aGUKKzE2LWJpdCBhZGRyZXNzIHJhbmdlIGFuZCBjaGFuZ2Ugb25lIG9mIHRoZSA8Y29kZT5SQU1QPC9jb2RlPiByZWdpc3RlcnMsCit5b3UgbXVzdCByZXNldCBpdCB0byB6ZXJvIGFmdGVyIHRoZSBhY2Nlc3MuCisKKyA8L3VsPgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjMuMTcuNC4zIEFWUiBCdWlsdC1pbiBNYWNyb3M8L2g1PgorCis8cD5HQ0MgZGVmaW5lcyBzZXZlcmFsIGJ1aWx0LWluIG1hY3JvcyBzbyB0aGF0IHRoZSB1c2VyIGNvZGUgY2FuIHRlc3QKK2ZvciB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBmZWF0dXJlcy4gIEFsbW9zdCBhbnkgb2YgdGhlIGZvbGxvd2luZworYnVpbHQtaW4gbWFjcm9zIGFyZSBkZWR1Y2VkIGZyb20gZGV2aWNlIGNhcGFiaWxpdGllcyBhbmQgdGh1cwordHJpZ2dlcmVkIGJ5IHRoZSA8Y29kZT4tbW1jdT08L2NvZGU+IGNvbW1hbmQtbGluZSBvcHRpb24uCisKKyA8cD5Gb3IgZXZlbiBtb3JlIEFWUi1zcGVjaWZpYyBidWlsdC1pbiBtYWNyb3Mgc2VlCis8YSBocmVmPSJBVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNBVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMiPkFWUiBOYW1lZCBBZGRyZXNzIFNwYWNlczwvYT4gYW5kIDxhIGhyZWY9IkFWUi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkFWUiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5fX0FWUl9BUkNIX188L2NvZGU+PGRkPkJ1aWxkLWluIG1hY3JvIHRoYXQgcmVzb2x2ZXMgdG8gYSBkZWNpbWFsIG51bWJlciB0aGF0IGlkZW50aWZpZXMgdGhlCithcmNoaXRlY3R1cmUgYW5kIGRlcGVuZHMgb24gdGhlIDxjb2RlPi1tbWN1PTwvY29kZT48dmFyPm1jdTwvdmFyPiBvcHRpb24uIAorUG9zc2libGUgdmFsdWVzIGFyZToKKworICAgICA8cD48Y29kZT4yPC9jb2RlPiwgPGNvZGU+MjU8L2NvZGU+LCA8Y29kZT4zPC9jb2RlPiwgPGNvZGU+MzE8L2NvZGU+LCA8Y29kZT4zNTwvY29kZT4sCis8Y29kZT40PC9jb2RlPiwgPGNvZGU+NTwvY29kZT4sIDxjb2RlPjUxPC9jb2RlPiwgPGNvZGU+NjwvY29kZT4sIDxjb2RlPjEwMjwvY29kZT4sIDxjb2RlPjEwNDwvY29kZT4sCis8Y29kZT4xMDU8L2NvZGU+LCA8Y29kZT4xMDY8L2NvZGU+LCA8Y29kZT4xMDc8L2NvZGU+CisKKyAgICAgPHA+Zm9yIDx2YXI+bWN1PC92YXI+PTxjb2RlPmF2cjI8L2NvZGU+LCA8Y29kZT5hdnIyNTwvY29kZT4sIDxjb2RlPmF2cjM8L2NvZGU+LAorPGNvZGU+YXZyMzE8L2NvZGU+LCA8Y29kZT5hdnIzNTwvY29kZT4sIDxjb2RlPmF2cjQ8L2NvZGU+LCA8Y29kZT5hdnI1PC9jb2RlPiwgPGNvZGU+YXZyNTE8L2NvZGU+LAorPGNvZGU+YXZyNjwvY29kZT4sIDxjb2RlPmF2cnhtZWdhMjwvY29kZT4sIDxjb2RlPmF2cnhtZWdhNDwvY29kZT4sIDxjb2RlPmF2cnhtZWdhNTwvY29kZT4sCis8Y29kZT5hdnJ4bWVnYTY8L2NvZGU+LCA8Y29kZT5hdnJ4bWVnYTc8L2NvZGU+LCByZXNwZWN0aXZlbHkuIAorSWYgPHZhcj5tY3U8L3Zhcj4gc3BlY2lmaWVzIGEgZGV2aWNlLCB0aGlzIGJ1aWx0LWluIG1hY3JvIGlzIHNldAorYWNjb3JkaW5nbHkuIEZvciBleGFtcGxlLCB3aXRoIDxjb2RlPi1tbWN1PWF0bWVnYTg8L2NvZGU+IHRoZSBtYWNybyB3aWxsIGJlCitkZWZpbmVkIHRvIDxjb2RlPjQ8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19BVlJfPC9jb2RlPjx2YXI+RGV2aWNlPC92YXI+PGNvZGU+X188L2NvZGU+PGRkPlNldHRpbmcgPGNvZGU+LW1tY3U9PC9jb2RlPjx2YXI+ZGV2aWNlPC92YXI+IGRlZmluZXMgdGhpcyBidWlsdC1pbiBtYWNybyB3aGljaCByZWZsZWN0cwordGhlIGRldmljZSdzIG5hbWUuIEZvciBleGFtcGxlLCA8Y29kZT4tbW1jdT1hdG1lZ2E4PC9jb2RlPiBkZWZpbmVzIHRoZQorYnVpbHQtaW4gbWFjcm8gPGNvZGU+X19BVlJfQVRtZWdhOF9fPC9jb2RlPiwgPGNvZGU+LW1tY3U9YXR0aW55MjYxYTwvY29kZT4gZGVmaW5lcworPGNvZGU+X19BVlJfQVR0aW55MjYxQV9fPC9jb2RlPiwgZXRjLgorCisgICAgIDxwPlRoZSBidWlsdC1pbiBtYWNyb3MnIG5hbWVzIGZvbGxvdwordGhlIHNjaGVtZSA8Y29kZT5fX0FWUl88L2NvZGU+PHZhcj5EZXZpY2U8L3Zhcj48Y29kZT5fXzwvY29kZT4gd2hlcmUgPHZhcj5EZXZpY2U8L3Zhcj4gaXMKK3RoZSBkZXZpY2UgbmFtZSBhcyBmcm9tIHRoZSBBVlIgdXNlciBtYW51YWwuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KKzx2YXI+RGV2aWNlPC92YXI+IGluIHRoZSBidWlsdC1pbiBtYWNybyBhbmQgPHZhcj5kZXZpY2U8L3Zhcj4gaW4KKzxjb2RlPi1tbWN1PTwvY29kZT48dmFyPmRldmljZTwvdmFyPiBpcyB0aGF0IHRoZSBsYXR0ZXIgaXMgYWx3YXlzIGxvd2VyY2FzZS4KKworICAgICA8cD5JZiA8dmFyPmRldmljZTwvdmFyPiBpcyBub3QgYSBkZXZpY2UgYnV0IG9ubHkgYSBjb3JlIGFyY2hpdGVjdHVyZSBsaWtlCis8Y29kZT5hdnI1MTwvY29kZT4sIHRoaXMgbWFjcm8gd2lsbCBub3QgYmUgZGVmaW5lZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fQVZSX1hNRUdBX188L2NvZGU+PGRkPlRoZSBkZXZpY2UgLyBhcmNoaXRlY3R1cmUgYmVsb25ncyB0byB0aGUgWE1FR0EgZmFtaWx5IG9mIGRldmljZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0FWUl9IQVZFX0VMUE1fXzwvY29kZT48ZGQ+VGhlIGRldmljZSBoYXMgdGhlIHRoZSA8Y29kZT5FTFBNPC9jb2RlPiBpbnN0cnVjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fQVZSX0hBVkVfRUxQTVhfXzwvY29kZT48ZGQ+VGhlIGRldmljZSBoYXMgdGhlIDxjb2RlPkVMUE0gUjwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4sWjwvY29kZT4gYW5kIDxjb2RlPkVMUE0KK1I8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+LForPC9jb2RlPiBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0FWUl9IQVZFX01PVldfXzwvY29kZT48ZGQ+VGhlIGRldmljZSBoYXMgdGhlIDxjb2RlPk1PVlc8L2NvZGU+IGluc3RydWN0aW9uIHRvIHBlcmZvcm0gMTYtYml0CityZWdpc3Rlci1yZWdpc3RlciBtb3Zlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fQVZSX0hBVkVfTFBNWF9fPC9jb2RlPjxkZD5UaGUgZGV2aWNlIGhhcyB0aGUgPGNvZGU+TFBNIFI8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+LFo8L2NvZGU+IGFuZAorPGNvZGU+TFBNIFI8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+LForPC9jb2RlPiBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0FWUl9IQVZFX01VTF9fPC9jb2RlPjxkZD5UaGUgZGV2aWNlIGhhcyBhIGhhcmR3YXJlIG11bHRpcGxpZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0FWUl9IQVZFX0pNUF9DQUxMX188L2NvZGU+PGRkPlRoZSBkZXZpY2UgaGFzIHRoZSA8Y29kZT5KTVA8L2NvZGU+IGFuZCA8Y29kZT5DQUxMPC9jb2RlPiBpbnN0cnVjdGlvbnMuIAorVGhpcyBpcyB0aGUgY2FzZSBmb3IgZGV2aWNlcyB3aXRoIGF0IGxlYXN0IDE2Jm5ic3A7S2lCIG9mIHByb2dyYW0KK21lbW9yeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fQVZSX0hBVkVfRUlKTVBfRUlDQUxMX188L2NvZGU+PGR0Pjxjb2RlPl9fQVZSXzNfQllURV9QQ19fPC9jb2RlPjxkZD5UaGUgZGV2aWNlIGhhcyB0aGUgPGNvZGU+RUlKTVA8L2NvZGU+IGFuZCA8Y29kZT5FSUNBTEw8L2NvZGU+IGluc3RydWN0aW9ucy4gCitUaGlzIGlzIHRoZSBjYXNlIGZvciBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDEyOCZuYnNwO0tpQiBvZiBwcm9ncmFtIG1lbW9yeS4gCitUaGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgcHJvZ3JhbSBjb3VudGVyCisoUEMpIGlzIDMmbmJzcDtieXRlcyB3aWRlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19BVlJfMl9CWVRFX1BDX188L2NvZGU+PGRkPlRoZSBwcm9ncmFtIGNvdW50ZXIgKFBDKSBpcyAyJm5ic3A7Ynl0ZXMgd2lkZS4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgZGV2aWNlcword2l0aCB1cCB0byAxMjgmbmJzcDtLaUIgb2YgcHJvZ3JhbSBtZW1vcnkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX0FWUl9IQVZFXzhCSVRfU1BfXzwvY29kZT48ZHQ+PGNvZGU+X19BVlJfSEFWRV8xNkJJVF9TUF9fPC9jb2RlPjxkZD5UaGUgc3RhY2sgcG9pbnRlciAoU1ApIHJlZ2lzdGVyIGlzIHRyZWF0ZWQgYXMgOC1iaXQgcmVzcGVjdGl2ZWx5CisxNi1iaXQgcmVnaXN0ZXIgYnkgdGhlIGNvbXBpbGVyLiAKK1RoZSBkZWZpbml0aW9uIG9mIHRoZXNlIG1hY3JvcyBpcyBhZmZlY3RlZCBieSA8Y29kZT4tbXRpbnktc3RhY2s8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19BVlJfSEFWRV9TUEhfXzwvY29kZT48ZHQ+PGNvZGU+X19BVlJfU1A4X188L2NvZGU+PGRkPlRoZSBkZXZpY2UgaGFzIHRoZSBTUEggKGhpZ2ggcGFydCBvZiBzdGFjayBwb2ludGVyKSBzcGVjaWFsIGZ1bmN0aW9uCityZWdpc3RlciBvciBoYXMgYW4gOC1iaXQgc3RhY2sgcG9pbnRlciwgcmVzcGVjdGl2ZWx5LiAKK1RoZSBkZWZpbml0aW9uIG9mIHRoZXNlIG1hY3JvcyBpcyBhZmZlY3RlZCBieSA8Y29kZT4tbW1jdT08L2NvZGU+IGFuZAoraW4gdGhlIGNhc2VzIG9mIDxjb2RlPi1tbWN1PWF2cjI8L2NvZGU+IGFuZCA8Y29kZT4tbW1jdT1hdnIyNTwvY29kZT4gYWxzbworYnkgPGNvZGU+LW1zcDg8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19BVlJfSEFWRV9SQU1QRF9fPC9jb2RlPjxkdD48Y29kZT5fX0FWUl9IQVZFX1JBTVBYX188L2NvZGU+PGR0Pjxjb2RlPl9fQVZSX0hBVkVfUkFNUFlfXzwvY29kZT48ZHQ+PGNvZGU+X19BVlJfSEFWRV9SQU1QWl9fPC9jb2RlPjxkZD5UaGUgZGV2aWNlIGhhcyB0aGUgPGNvZGU+UkFNUEQ8L2NvZGU+LCA8Y29kZT5SQU1QWDwvY29kZT4sIDxjb2RlPlJBTVBZPC9jb2RlPiwKKzxjb2RlPlJBTVBaPC9jb2RlPiBzcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVyLCByZXNwZWN0aXZlbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX05PX0lOVEVSUlVQVFNfXzwvY29kZT48ZGQ+VGhpcyBtYWNybyByZWZsZWN0cyB0aGUgPGNvZGU+LW1uby1pbnRlcnJ1cHRzPC9jb2RlPiBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19BVlJfRVJSQVRBX1NLSVBfXzwvY29kZT48ZHQ+PGNvZGU+X19BVlJfRVJSQVRBX1NLSVBfSk1QX0NBTExfXzwvY29kZT48ZGQ+U29tZSBBVlIgZGV2aWNlcyAoQVQ5MFM4NTE1LCBBVG1lZ2ExMDMpIG11c3Qgbm90IHNraXAgMzItYml0CitpbnN0cnVjdGlvbnMgYmVjYXVzZSBvZiBhIGhhcmR3YXJlIGVycmF0dW0uICBTa2lwIGluc3RydWN0aW9ucyBhcmUKKzxjb2RlPlNCUlM8L2NvZGU+LCA8Y29kZT5TQlJDPC9jb2RlPiwgPGNvZGU+U0JJUzwvY29kZT4sIDxjb2RlPlNCSUM8L2NvZGU+IGFuZCA8Y29kZT5DUFNFPC9jb2RlPi4gCitUaGUgc2Vjb25kIG1hY3JvIGlzIG9ubHkgZGVmaW5lZCBpZiA8Y29kZT5fX0FWUl9IQVZFX0pNUF9DQUxMX188L2NvZGU+IGlzIGFsc28KK3NldC4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fQVZSX1NGUl9PRkZTRVRfXz08L2NvZGU+PHZhcj5vZmZzZXQ8L3Zhcj48ZGQ+SW5zdHJ1Y3Rpb25zIHRoYXQgY2FuIGFkZHJlc3MgSS9PIHNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXJzIGRpcmVjdGx5CitsaWtlIDxjb2RlPklOPC9jb2RlPiwgPGNvZGU+T1VUPC9jb2RlPiwgPGNvZGU+U0JJPC9jb2RlPiwgZXRjLiBtYXkgdXNlIGEgZGlmZmVyZW50CithZGRyZXNzIGFzIGlmIGFkZHJlc3NlZCBieSBhbiBpbnN0cnVjdGlvbiB0byBhY2Nlc3MgUkFNIGxpa2UgPGNvZGU+TEQ8L2NvZGU+CitvciA8Y29kZT5TVFM8L2NvZGU+LiBUaGlzIG9mZnNldCBkZXBlbmRzIG9uIHRoZSBkZXZpY2UgYXJjaGl0ZWN0dXJlIGFuZCBoYXMKK3RvIGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgUkFNIGFkZHJlc3MgaW4gb3JkZXIgdG8gZ2V0IHRoZQorcmVzcGVjdGl2ZSBJL08mbmJzcDthZGRyZXNzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19XSVRIX0FWUkxJQkNfXzwvY29kZT48ZGQ+VGhlIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIEFWUi1MaWJjLiAKK1NlZSB0aGUgPGNvZGU+LS13aXRoLWF2cmxpYmM8L2NvZGU+IGNvbmZpZ3VyZSBvcHRpb24uCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BVlItVmFyaWFibGUtQXR0cmlidXRlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BVlItVmFyaWFibGUtQXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMmMzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FWUi1WYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPVZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNBVlIlMjBWYXJpYWJsZSUyMEF0dHJpYnV0ZXMiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BY3R1YWwtQnVncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BY3R1YWwtQnVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MjQxODEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FjdHVhbC1CdWdzLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QWN0dWFsIEJ1Z3MgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiIHRpdGxlPSJUcm91YmxlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW50ZXJvcGVyYXRpb24uaHRtbCNJbnRlcm9wZXJhdGlvbiIgdGl0bGU9IkludGVyb3BlcmF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFjdHVhbC1CdWdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkludGVyb3BlcmF0aW9uLmh0bWwjSW50ZXJvcGVyYXRpb24iPkludGVyb3BlcmF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiPlRyb3VibGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMS4xIEFjdHVhbCBCdWdzIFdlIEhhdmVuJ3QgRml4ZWQgWWV0PC9oMz4KKworICAgICA8dWw+Cis8bGk+VGhlIDxjb2RlPmZpeGluY2x1ZGVzPC9jb2RlPiBzY3JpcHQgaW50ZXJhY3RzIGJhZGx5IHdpdGggYXV0b21vdW50ZXJzOyBpZiB0aGUKK2RpcmVjdG9yeSBvZiBzeXN0ZW0gaGVhZGVyIGZpbGVzIGlzIGF1dG9tb3VudGVkLCBpdCB0ZW5kcyB0byBiZQordW5tb3VudGVkIHdoaWxlIDxjb2RlPmZpeGluY2x1ZGVzPC9jb2RlPiBpcyBydW5uaW5nLiAgVGhpcyB3b3VsZCBzZWVtIHRvIGJlIGEKK2J1ZyBpbiB0aGUgYXV0b21vdW50ZXIuICBXZSBkb24ndCBrbm93IGFueSBnb29kIHdheSB0byB3b3JrIGFyb3VuZCBpdC4gCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODIxZDljCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIiB0aXRsZT0iQUFyY2g2NCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyIgdGl0bGU9IkFSTSBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4yIEFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2g0PgorCis8cD5UaGVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIEFkYXB0ZXZhIEVwaXBoYW55OgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWhhbGYtcmVnLWZpbGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1oYWxmXzAwMmRyZWdfMDAyZGZpbGUtMTA5NiI+PC9hPkRvbid0IGFsbG9jYXRlIGFueSByZWdpc3RlciBpbiB0aGUgcmFuZ2UgPGNvZGU+cjMyPC9jb2RlPjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD48Y29kZT5yNjM8L2NvZGU+LiAKK1RoYXQgYWxsb3dzIGNvZGUgdG8gcnVuIG9uIGhhcmR3YXJlIHZhcmlhbnRzIHRoYXQgbGFjayB0aGVzZSByZWdpc3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXByZWZlci1zaG9ydC1pbnNuLXJlZ3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wcmVmZXJfMDAyZHNob3J0XzAwMmRpbnNuXzAwMmRyZWdzLTEwOTciPjwvYT5QcmVmZXJyZW50aWFsbHkgYWxsb2NhdGUgcmVnaXN0ZXJzIHRoYXQgYWxsb3cgc2hvcnQgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbi4gCitUaGlzIGNhbiByZXN1bHQgaW4gaW5jcmVhc2VkIGluc3RydWN0aW9uIGNvdW50LCBzbyB0aGlzIG1heSBlaXRoZXIgcmVkdWNlIG9yCitpbmNyZWFzZSBvdmVyYWxsIGNvZGUgc2l6ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYnJhbmNoLWNvc3Q9PC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1icmFuY2hfMDAyZGNvc3QtMTA5OCI+PC9hPlNldCB0aGUgY29zdCBvZiBicmFuY2hlcyB0byByb3VnaGx5IDx2YXI+bnVtPC92YXI+ICZsZHF1bztzaW1wbGUmcmRxdW87IGluc3RydWN0aW9ucy4gCitUaGlzIGNvc3QgaXMgb25seSBhIGhldXJpc3RpYyBhbmQgaXMgbm90IGd1YXJhbnRlZWQgdG8gcHJvZHVjZQorY29uc2lzdGVudCByZXN1bHRzIGFjcm9zcyByZWxlYXNlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY21vdmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jbW92ZS0xMDk5Ij48L2E+RW5hYmxlIHRoZSBnZW5lcmF0aW9uIG9mIGNvbmRpdGlvbmFsIG1vdmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1ub3BzPTwvY29kZT48dmFyPm51bTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tbm9wcy0xMTAwIj48L2E+RW1pdCA8dmFyPm51bTwvdmFyPiBOT1BzIGJlZm9yZSBldmVyeSBvdGhlciBnZW5lcmF0ZWQgaW5zdHJ1Y3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXNvZnQtY21wc2Y8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc29mdF8wMDJkY21wc2YtMTEwMSI+PC9hPkZvciBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGNvbXBhcmlzb25zLCBlbWl0IGFuIDxjb2RlPmZzdWI8L2NvZGU+IGluc3RydWN0aW9uCithbmQgdGVzdCB0aGUgZmxhZ3MuICBUaGlzIGlzIGZhc3RlciB0aGFuIGEgc29mdHdhcmUgY29tcGFyaXNvbiwgYnV0IGNhbgorZ2V0IGluY29ycmVjdCByZXN1bHRzIGluIHRoZSBwcmVzZW5jZSBvZiBOYU5zLCBvciB3aGVuIHR3byBkaWZmZXJlbnQgc21hbGwKK251bWJlcnMgYXJlIGNvbXBhcmVkIHN1Y2ggdGhhdCB0aGVpciBkaWZmZXJlbmNlIGlzIGNhbGN1bGF0ZWQgYXMgemVyby4gCitUaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNvZnQtY21wc2Y8L3NwYW4+PC9zYW1wPiwgd2hpY2ggdXNlcyBzbG93ZXIsIGJ1dCBJRUVFLWNvbXBsaWFudCwKK3NvZnR3YXJlIGNvbXBhcmlzb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdGFjay1vZmZzZXQ9PC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1zdGFja18wMDJkb2Zmc2V0LTExMDIiPjwvYT5TZXQgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGFuZCB0aGUgc3RhY2sgcG9pbnRlci4gCitFLmcuLCBhIHZhbHVlIG9mIDggbWVhbnMgdGhhdCB0aGUgZWlnaHQgYnl0ZXMgaW4gdGhlIHJhbmdlIDxjb2RlPnNwKzAuLi5zcCs3PC9jb2RlPgorY2FuIGJlIHVzZWQgYnkgbGVhZiBmdW5jdGlvbnMgd2l0aG91dCBzdGFjayBhbGxvY2F0aW9uLiAKK1ZhbHVlcyBvdGhlciB0aGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ODwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE2PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSB1bnRlc3RlZCBhbmQgdW5saWtlbHkgdG8gd29yay4gCitOb3RlIGFsc28gdGhhdCB0aGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBBQkk7IGNvbXBpbGluZyBhIHByb2dyYW0gd2l0aCBhCitkaWZmZXJlbnQgc3RhY2sgb2Zmc2V0IHRoYW4gdGhlIGxpYnJhcmllcyBoYXZlIGJlZW4gY29tcGlsZWQgd2l0aAorZ2VuZXJhbGx5IGRvZXMgbm90IHdvcmsuIAorVGhpcyBvcHRpb24gY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBldmFsdWF0ZSBpZiBhIGRpZmZlcmVudCBzdGFjaworb2Zmc2V0IHdvdWxkIGdpdmUgeW91IGJldHRlciBjb2RlLCBidXQgdG8gYWN0dWFsbHkgdXNlIGEgZGlmZmVyZW50IHN0YWNrCitvZmZzZXQgdG8gYnVpbGQgd29ya2luZyBwcm9ncmFtcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gY29uZmlndXJlIHRoZQordG9vbGNoYWluIHdpdGggdGhlIGFwcHJvcHJpYXRlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2l0aC1zdGFjay1vZmZzZXQ9PC9zcGFuPjx2YXI+bnVtPC92YXI+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXJvdW5kLW5lYXJlc3Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkcm91bmRfMDAyZG5lYXJlc3QtMTEwMyI+PC9hPk1ha2UgdGhlIHNjaGVkdWxlciBhc3N1bWUgdGhhdCB0aGUgcm91bmRpbmcgbW9kZSBoYXMgYmVlbiBzZXQgdG8KK3RydW5jYXRpbmcuICBUaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJvdW5kLW5lYXJlc3Q8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbG9uZy1jYWxsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxvbmdfMDAyZGNhbGxzLTExMDQiPjwvYT5JZiBub3Qgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSBhbiBhdHRyaWJ1dGUsIGFzc3VtZSBhbGwgY2FsbHMgbWlnaHQgYmUgYmV5b25kCit0aGUgb2Zmc2V0IHJhbmdlIG9mIHRoZSA8Y29kZT5iPC9jb2RlPiAvIDxjb2RlPmJsPC9jb2RlPiBpbnN0cnVjdGlvbnMsIGFuZCB0aGVyZWZvcmUgbG9hZCB0aGUKK2Z1bmN0aW9uIGFkZHJlc3MgaW50byBhIHJlZ2lzdGVyIGJlZm9yZSBwZXJmb3JtaW5nIGEgKG90aGVyd2lzZSBkaXJlY3QpIGNhbGwuIAorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2hvcnQtY2FsbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXNob3J0XzAwMmRjYWxscy0xMTA1Ij48L2E+SWYgbm90IG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgYW4gYXR0cmlidXRlLCBhc3N1bWUgYWxsIGRpcmVjdCBjYWxscyBhcmUKK2luIHRoZSByYW5nZSBvZiB0aGUgPGNvZGU+YjwvY29kZT4gLyA8Y29kZT5ibDwvY29kZT4gaW5zdHJ1Y3Rpb25zLCBzbyB1c2UgdGhlc2UgaW5zdHJ1Y3Rpb25zCitmb3IgZGlyZWN0IGNhbGxzLiAgVGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1sb25nLWNhbGxzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNtYWxsMTY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zbWFsbDE2LTExMDYiPjwvYT5Bc3N1bWUgYWRkcmVzc2VzIGNhbiBiZSBsb2FkZWQgYXMgMTYtYml0IHVuc2lnbmVkIHZhbHVlcy4gIFRoaXMgZG9lcyBub3QKK2FwcGx5IHRvIGZ1bmN0aW9uIGFkZHJlc3NlcyBmb3Igd2hpY2ggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1sb25nLWNhbGxzPC9zcGFuPjwvc2FtcD4gc2VtYW50aWNzCithcmUgaW4gZWZmZWN0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mcC1tb2RlPTwvY29kZT48dmFyPm1vZGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZwXzAwMmRtb2RlLTExMDciPjwvYT5TZXQgdGhlIHByZXZhaWxpbmcgbW9kZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdW5pdC4gCitUaGlzIGRldGVybWluZXMgdGhlIGZsb2F0aW5nLXBvaW50IG1vZGUgdGhhdCBpcyBwcm92aWRlZCBhbmQgZXhwZWN0ZWQKK2F0IGZ1bmN0aW9uIGNhbGwgYW5kIHJldHVybiB0aW1lLiAgTWFraW5nIHRoaXMgbW9kZSBtYXRjaCB0aGUgbW9kZSB5b3UKK3ByZWRvbWluYW50bHkgbmVlZCBhdCBmdW5jdGlvbiBzdGFydCBjYW4gbWFrZSB5b3VyIHByb2dyYW1zIHNtYWxsZXIgYW5kCitmYXN0ZXIgYnkgYXZvaWRpbmcgdW5uZWNlc3NhcnkgbW9kZSBzd2l0Y2hlcy4KKworICAgICA8cD48dmFyPm1vZGU8L3Zhcj4gY2FuIGJlIHNldCB0byBvbmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QW55IG1vZGUgYXQgZnVuY3Rpb24gZW50cnkgaXMgdmFsaWQsIGFuZCByZXRhaW5lZCBvciByZXN0b3JlZCB3aGVuCit0aGUgZnVuY3Rpb24gcmV0dXJucywgYW5kIHdoZW4gaXQgY2FsbHMgb3RoZXIgZnVuY3Rpb25zLiAKK1RoaXMgbW9kZSBpcyB1c2VmdWwgZm9yIGNvbXBpbGluZyBsaWJyYXJpZXMgb3Igb3RoZXIgY29tcGlsYXRpb24gdW5pdHMKK3lvdSBtaWdodCB3YW50IHRvIGluY29ycG9yYXRlIGludG8gZGlmZmVyZW50IHByb2dyYW1zIHdpdGggZGlmZmVyZW50CitwcmV2YWlsaW5nIEZQVSBtb2RlcywgYW5kIHRoZSBjb252ZW5pZW5jZSBvZiBiZWluZyBhYmxlIHRvIHVzZSBhIHNpbmdsZQorb2JqZWN0IGZpbGUgb3V0d2VpZ2hzIHRoZSBzaXplIGFuZCBzcGVlZCBvdmVyaGVhZCBmb3IgYW55IGV4dHJhCittb2RlIHN3aXRjaGluZyB0aGF0IG1pZ2h0IGJlIG5lZWRlZCwgY29tcGFyZWQgd2l0aCB3aGF0IHdvdWxkIGJlIG5lZWRlZAord2l0aCBhIG1vcmUgc3BlY2lmaWMgY2hvaWNlIG9mIHByZXZhaWxpbmcgRlBVIG1vZGUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dHJ1bmNhdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VGhpcyBpcyB0aGUgbW9kZSB1c2VkIGZvciBmbG9hdGluZy1wb2ludCBjYWxjdWxhdGlvbnMgd2l0aAordHJ1bmNhdGluZyAoaS5lLiByb3VuZCB0b3dhcmRzIHplcm8pIHJvdW5kaW5nIG1vZGUuICBUaGF0IGluY2x1ZGVzCitjb252ZXJzaW9uIGZyb20gZmxvYXRpbmcgcG9pbnQgdG8gaW50ZWdlci4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yb3VuZC1uZWFyZXN0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgaXMgdGhlIG1vZGUgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb25zIHdpdGgKK3JvdW5kLXRvLW5lYXJlc3Qtb3ItZXZlbiByb3VuZGluZyBtb2RlLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5UaGlzIGlzIHRoZSBtb2RlIHVzZWQgdG8gcGVyZm9ybSBpbnRlZ2VyIGNhbGN1bGF0aW9ucyBpbiB0aGUgRlBVLCBlLmcuIAoraW50ZWdlciBtdWx0aXBseSwgb3IgaW50ZWdlciBtdWx0aXBseS1hbmQtYWNjdW11bGF0ZS4gCis8L2RsPgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnAtbW9kZT1jYWxsZXI8L3NwYW4+PC9zYW1wPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1ub3NwbGl0LWxvaGk8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcG9zdGluYzwvY29kZT48ZHQ+PGNvZGU+LW1uby1wb3N0bW9kaWZ5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9zcGxpdF8wMDJkbG9oaS0xMTA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRwb3N0aW5jLTExMDkiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHBvc3Rtb2RpZnktMTExMCI+PC9hPkNvZGUgZ2VuZXJhdGlvbiB0d2Vha3MgdGhhdCBkaXNhYmxlLCByZXNwZWN0aXZlbHksIHNwbGl0dGluZyBvZiAzMi1iaXQKK2xvYWRzLCBnZW5lcmF0aW9uIG9mIHBvc3QtaW5jcmVtZW50IGFkZHJlc3NlcywgYW5kIGdlbmVyYXRpb24gb2YKK3Bvc3QtbW9kaWZ5IGFkZHJlc3Nlcy4gIFRoZSBkZWZhdWx0cyBhcmUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+bXNwbGl0LWxvaGk8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcG9zdC1pbmM8L3NwYW4+PC9zYW1wPiwgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcG9zdC1tb2RpZnk8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm92ZWN0LWRvdWJsZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR2ZWN0XzAwMmRkb3VibGUtMTExMSI+PC9hPkNoYW5nZSB0aGUgcHJlZmVycmVkIFNJTUQgbW9kZSB0byBTSW1vZGUuICBUaGUgZGVmYXVsdCBpcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12ZWN0LWRvdWJsZTwvc3Bhbj48L3NhbXA+LCB3aGljaCB1c2VzIERJbW9kZSBhcyBwcmVmZXJyZWQgU0lNRCBtb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1heC12ZWN0LWFsaWduPTwvY29kZT48dmFyPm51bTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tYXhfMDAyZHZlY3RfMDAyZGFsaWduLTExMTIiPjwvYT5UaGUgbWF4aW11bSBhbGlnbm1lbnQgZm9yIFNJTUQgdmVjdG9yIG1vZGUgdHlwZXMuIAorPHZhcj5udW08L3Zhcj4gbWF5IGJlIDQgb3IgOC4gIFRoZSBkZWZhdWx0IGlzIDguIAorTm90ZSB0aGF0IHRoaXMgaXMgYW4gQUJJIGNoYW5nZSwgZXZlbiB0aG91Z2ggbWFueSBsaWJyYXJ5IGZ1bmN0aW9uCitpbnRlcmZhY2VzIGFyZSB1bmFmZmVjdGVkIGlmIHRoZXkgZG9uJ3QgdXNlIFNJTUQgdmVjdG9yIG1vZGVzCitpbiBwbGFjZXMgdGhhdCBhZmZlY3Qgc2l6ZSBhbmQvb3IgYWxpZ25tZW50IG9mIHJlbGV2YW50IHR5cGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zcGxpdC12ZWNtb3ZlLWVhcmx5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc3BsaXRfMDAyZHZlY21vdmVfMDAyZGVhcmx5LTExMTMiPjwvYT5TcGxpdCB2ZWN0b3IgbW92ZXMgaW50byBzaW5nbGUgd29yZCBtb3ZlcyBiZWZvcmUgcmVsb2FkLiAgSW4gdGhlb3J5IHRoaXMKK2NhbiBnaXZlIGJldHRlciByZWdpc3RlciBhbGxvY2F0aW9uLCBidXQgc28gZmFyIHRoZSByZXZlcnNlIHNlZW1zIHRvIGJlCitnZW5lcmFsbHkgdGhlIGNhc2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTFyZWctPC9jb2RlPjx2YXI+cmVnPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW0xcmVnXzAwMmQtMTExNCI+PC9hPlNwZWNpZnkgYSByZWdpc3RlciB0byBob2xkIHRoZSBjb25zdGFudCAmbWludXM7MSwgd2hpY2ggbWFrZXMgbG9hZGluZyBzbWFsbCBuZWdhdGl2ZQorY29uc3RhbnRzIGFuZCBjZXJ0YWluIGJpdG1hc2tzIGZhc3Rlci4gCitBbGxvd2FibGUgdmFsdWVzIGZvciA8dmFyPnJlZzwvdmFyPiBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yNDM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjYzPC9zcGFuPjwvc2FtcD4mcnNxdW87LAord2hpY2ggc3BlY2lmeSB1c2Ugb2YgdGhhdCByZWdpc3RlciBhcyBhIGZpeGVkIHJlZ2lzdGVyLAorYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgd2hpY2ggbWVhbnMgdGhhdCBubyByZWdpc3RlciBpcyB1c2VkIGZvciB0aGlzCitwdXJwb3NlLiAgVGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW0xcmVnLW5vbmU8L3NwYW4+PC9zYW1wPi4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FsaWdubWVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BbGlnbm1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjBiYjAwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BbGlnbm1lbnQuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbGlnbm1lbnQgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIiB0aXRsZT0iVHlwZSBBdHRyaWJ1dGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIiB0aXRsZT0iSW5saW5lIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFsaWdubWVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbmxpbmUuaHRtbCNJbmxpbmUiPklubGluZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlR5cGUtQXR0cmlidXRlcy5odG1sI1R5cGUtQXR0cmlidXRlcyI+VHlwZSBBdHRyaWJ1dGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjM4IElucXVpcmluZyBvbiBBbGlnbm1lbnQgb2YgVHlwZXMgb3IgVmFyaWFibGVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYWxpZ25tZW50LTI3ODQiPjwvYT48YSBuYW1lPSJpbmRleC10eXBlLWFsaWdubWVudC0yNzg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmFyaWFibGUtYWxpZ25tZW50LTI3ODYiPjwvYT4KK1RoZSBrZXl3b3JkIDxjb2RlPl9fYWxpZ25vZl9fPC9jb2RlPiBhbGxvd3MgeW91IHRvIGlucXVpcmUgYWJvdXQgaG93IGFuIG9iamVjdAoraXMgYWxpZ25lZCwgb3IgdGhlIG1pbmltdW0gYWxpZ25tZW50IHVzdWFsbHkgcmVxdWlyZWQgYnkgYSB0eXBlLiAgSXRzCitzeW50YXggaXMganVzdCBsaWtlIDxjb2RlPnNpemVvZjwvY29kZT4uCisKKyA8cD5Gb3IgZXhhbXBsZSwgaWYgdGhlIHRhcmdldCBtYWNoaW5lIHJlcXVpcmVzIGEgPGNvZGU+ZG91YmxlPC9jb2RlPiB2YWx1ZSB0byBiZQorYWxpZ25lZCBvbiBhbiA4LWJ5dGUgYm91bmRhcnksIHRoZW4gPGNvZGU+X19hbGlnbm9mX18gKGRvdWJsZSk8L2NvZGU+IGlzIDguIAorVGhpcyBpcyB0cnVlIG9uIG1hbnkgUklTQyBtYWNoaW5lcy4gIE9uIG1vcmUgdHJhZGl0aW9uYWwgbWFjaGluZQorZGVzaWducywgPGNvZGU+X19hbGlnbm9mX18gKGRvdWJsZSk8L2NvZGU+IGlzIDQgb3IgZXZlbiAyLgorCisgPHA+U29tZSBtYWNoaW5lcyBuZXZlciBhY3R1YWxseSByZXF1aXJlIGFsaWdubWVudDsgdGhleSBhbGxvdyByZWZlcmVuY2UgdG8gYW55CitkYXRhIHR5cGUgZXZlbiBhdCBhbiBvZGQgYWRkcmVzcy4gIEZvciB0aGVzZSBtYWNoaW5lcywgPGNvZGU+X19hbGlnbm9mX188L2NvZGU+CityZXBvcnRzIHRoZSBzbWFsbGVzdCBhbGlnbm1lbnQgdGhhdCBHQ0MgZ2l2ZXMgdGhlIGRhdGEgdHlwZSwgdXN1YWxseSBhcworbWFuZGF0ZWQgYnkgdGhlIHRhcmdldCBBQkkuCisKKyA8cD5JZiB0aGUgb3BlcmFuZCBvZiA8Y29kZT5fX2FsaWdub2ZfXzwvY29kZT4gaXMgYW4gbHZhbHVlIHJhdGhlciB0aGFuIGEgdHlwZSwKK2l0cyB2YWx1ZSBpcyB0aGUgcmVxdWlyZWQgYWxpZ25tZW50IGZvciBpdHMgdHlwZSwgdGFraW5nIGludG8gYWNjb3VudAorYW55IG1pbmltdW0gYWxpZ25tZW50IHNwZWNpZmllZCB3aXRoIEdDQydzIDxjb2RlPl9fYXR0cmlidXRlX188L2NvZGU+CitleHRlbnNpb24gKHNlZSA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT4pLiAgRm9yIGV4YW1wbGUsIGFmdGVyIHRoaXMKK2RlY2xhcmF0aW9uOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RydWN0IGZvbyB7IGludCB4OyBjaGFyIHk7IH0gZm9vMTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+dGhlIHZhbHVlIG9mIDxjb2RlPl9fYWxpZ25vZl9fIChmb28xLnkpPC9jb2RlPiBpcyAxLCBldmVuIHRob3VnaCBpdHMgYWN0dWFsCithbGlnbm1lbnQgaXMgcHJvYmFibHkgMiBvciA0LCB0aGUgc2FtZSBhcyA8Y29kZT5fX2FsaWdub2ZfXyAoaW50KTwvY29kZT4uCisKKyA8cD5JdCBpcyBhbiBlcnJvciB0byBhc2sgZm9yIHRoZSBhbGlnbm1lbnQgb2YgYW4gaW5jb21wbGV0ZSB0eXBlLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BbHBoYS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FscGhhLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmNmNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BbHBoYS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwxMjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFscGhhIEJ1aWx0LWluIEZ1bmN0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBUk0taVdNTVh0LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNBUk0taVdNTVh0LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJBUk0gaVdNTVh0IEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBbHBoYS1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IkFscGhhLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJNLWlXTU1YdC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQVJNLWlXTU1YdC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5BUk0gaVdNTVh0IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni4xIEFscGhhIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPlRoZXNlIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgQWxwaGEgZmFtaWx5IG9mCitwcm9jZXNzb3JzLCBkZXBlbmRpbmcgb24gdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyB1c2VkLgorCisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGFsd2F5cyBhdmFpbGFibGUuICBUaGV5CithbGwgZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfaW1wbHZlciAodm9pZCkKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfcnBjYyAodm9pZCkKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfYW1hc2sgKGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX2NtcGJnZSAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfZXh0YmwgKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX2V4dHdsIChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9leHRsbCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfZXh0cWwgKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX2V4dHdoIChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9leHRsaCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfZXh0cWggKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX2luc2JsIChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9pbnN3bCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfaW5zbGwgKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX2luc3FsIChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9pbnN3aCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfaW5zbGggKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX2luc3FoIChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9tc2tibCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfbXNrd2wgKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX21za2xsIChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9tc2txbCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfbXNrd2ggKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX21za2xoIChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9tc2txaCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfdW11bGggKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX3phcCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfemFwbm90IChsb25nLCBsb25nKQorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGFsd2F5cyB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbWF4PC9zcGFuPjwvc2FtcD4KK29yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PTwvc3Bhbj48dmFyPmNwdTwvdmFyPjwvc2FtcD4gd2hlcmUgPHZhcj5jcHU8L3Zhcj4gaXMgPGNvZGU+cGNhNTY8L2NvZGU+IG9yCitsYXRlci4gIFRoZXkgYWxsIGdlbmVyYXRlIHRoZSBtYWNoaW5lIGluc3RydWN0aW9uIHRoYXQgaXMgcGFydAorb2YgdGhlIG5hbWUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9wa2xiIChsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9wa3diIChsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV91bnBrYmwgKGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX3VucGtidyAobG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfbWludWI4IChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9taW5zYjggKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX21pbnV3NCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfbWluc3c0IChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9tYXh1YjggKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX21heHNiOCAobG9uZywgbG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfbWF4dXc0IChsb25nLCBsb25nKQorICAgICBsb25nIF9fYnVpbHRpbl9hbHBoYV9tYXhzdzQgKGxvbmcsIGxvbmcpCisgICAgIGxvbmcgX19idWlsdGluX2FscGhhX3BlcnIgKGxvbmcsIGxvbmcpCis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jaXg8L3NwYW4+PC9zYW1wPgorb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9PC9zcGFuPjx2YXI+Y3B1PC92YXI+PC9zYW1wPiB3aGVyZSA8dmFyPmNwdTwvdmFyPiBpcyA8Y29kZT5ldjY3PC9jb2RlPiBvcgorbGF0ZXIuICBUaGV5IGFsbCBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbiB0aGF0IGlzIHBhcnQKK29mIHRoZSBuYW1lLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfY3R0eiAobG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfY3RseiAobG9uZykKKyAgICAgbG9uZyBfX2J1aWx0aW5fYWxwaGFfY3Rwb3AgKGxvbmcpCis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHN5c3RlbXMgdGhhdCB1c2UgdGhlIE9TRi8xCitQQUxjb2RlLiAgTm9ybWFsbHkgdGhleSBpbnZva2UgdGhlIDxjb2RlPnJkdW5pcTwvY29kZT4gYW5kIDxjb2RlPndydW5pcTwvY29kZT4KK1BBTCBjYWxscywgYnV0IHdoZW4gaW52b2tlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdGxzLWtlcm5lbDwvc3Bhbj48L3NhbXA+LCB0aGV5IGludm9rZQorPGNvZGU+cmR2YWw8L2NvZGU+IGFuZCA8Y29kZT53cnZhbDwvY29kZT4uCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2b2lkICpfX2J1aWx0aW5fdGhyZWFkX3BvaW50ZXIgKHZvaWQpCisgICAgIHZvaWQgX19idWlsdGluX3NldF90aHJlYWRfcG9pbnRlciAodm9pZCAqKQorPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BbHRlcm5hdGUtS2V5d29yZHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQWx0ZXJuYXRlLUtleXdvcmRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxYmQxYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQWx0ZXJuYXRlLUtleXdvcmRzLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QWx0ZXJuYXRlIEtleXdvcmRzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkV4cGxpY2l0LVJlZy1WYXJzLmh0bWwjRXhwbGljaXQtUmVnLVZhcnMiIHRpdGxlPSJFeHBsaWNpdCBSZWcgVmFycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkluY29tcGxldGUtRW51bXMuaHRtbCNJbmNvbXBsZXRlLUVudW1zIiB0aXRsZT0iSW5jb21wbGV0ZSBFbnVtcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBbHRlcm5hdGUtS2V5d29yZHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW5jb21wbGV0ZS1FbnVtcy5odG1sI0luY29tcGxldGUtRW51bXMiPkluY29tcGxldGUgRW51bXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFeHBsaWNpdC1SZWctVmFycy5odG1sI0V4cGxpY2l0LVJlZy1WYXJzIj5FeHBsaWNpdCBSZWcgVmFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni40NSBBbHRlcm5hdGUgS2V5d29yZHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hbHRlcm5hdGUta2V5d29yZHMtMjg3OSI+PC9hPjxhIG5hbWU9ImluZGV4LWtleXdvcmRzXzAwMmMtYWx0ZXJuYXRlLTI4ODAiPjwvYT4KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSB2YXJpb3VzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGRpc2FibGUgY2VydGFpbgora2V5d29yZHMuICBUaGlzIGNhdXNlcyB0cm91YmxlIHdoZW4geW91IHdhbnQgdG8gdXNlIEdOVSBDIGV4dGVuc2lvbnMsIG9yCithIGdlbmVyYWwtcHVycG9zZSBoZWFkZXIgZmlsZSB0aGF0IHNob3VsZCBiZSB1c2FibGUgYnkgYWxsIHByb2dyYW1zLAoraW5jbHVkaW5nIElTTyBDIHByb2dyYW1zLiAgVGhlIGtleXdvcmRzIDxjb2RlPmFzbTwvY29kZT4sIDxjb2RlPnR5cGVvZjwvY29kZT4gYW5kCis8Y29kZT5pbmxpbmU8L2NvZGU+IGFyZSBub3QgYXZhaWxhYmxlIGluIHByb2dyYW1zIGNvbXBpbGVkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZDwvc3Bhbj48L3NhbXA+IChhbHRob3VnaCA8Y29kZT5pbmxpbmU8L2NvZGU+IGNhbiBiZSB1c2VkIGluIGEKK3Byb2dyYW0gY29tcGlsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWM5OTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzExPC9zcGFuPjwvc2FtcD4pLiAgVGhlCitJU08gQzk5IGtleXdvcmQKKzxjb2RlPnJlc3RyaWN0PC9jb2RlPiBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Z251OTk8L3NwYW4+PC9zYW1wPiAod2hpY2ggd2lsbAorZXZlbnR1YWxseSBiZSB0aGUgZGVmYXVsdCkgb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jOTk8L3NwYW4+PC9zYW1wPiAob3IgdGhlIGVxdWl2YWxlbnQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9aXNvOTg5OToxOTk5PC9zcGFuPjwvc2FtcD4pLCBvciBhbiBvcHRpb24gZm9yIGEgbGF0ZXIgc3RhbmRhcmQKK3ZlcnNpb24sIGlzIHVzZWQuCisKKyA8cD5UaGUgd2F5IHRvIHNvbHZlIHRoZXNlIHByb2JsZW1zIGlzIHRvIHB1dCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fPC9zcGFuPjwvc2FtcD4mcnNxdW87IGF0IHRoZSBiZWdpbm5pbmcgYW5kCitlbmQgb2YgZWFjaCBwcm9ibGVtYXRpY2FsIGtleXdvcmQuICBGb3IgZXhhbXBsZSwgdXNlIDxjb2RlPl9fYXNtX188L2NvZGU+CitpbnN0ZWFkIG9mIDxjb2RlPmFzbTwvY29kZT4sIGFuZCA8Y29kZT5fX2lubGluZV9fPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPmlubGluZTwvY29kZT4uCisKKyA8cD5PdGhlciBDIGNvbXBpbGVycyB3b24ndCBhY2NlcHQgdGhlc2UgYWx0ZXJuYXRpdmUga2V5d29yZHM7IGlmIHlvdSB3YW50IHRvCitjb21waWxlIHdpdGggYW5vdGhlciBjb21waWxlciwgeW91IGNhbiBkZWZpbmUgdGhlIGFsdGVybmF0ZSBrZXl3b3JkcyBhcworbWFjcm9zIHRvIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBjdXN0b21hcnkga2V5d29yZHMuICBJdCBsb29rcyBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjaWZuZGVmIF9fR05VQ19fCisgICAgICNkZWZpbmUgX19hc21fXyBhc20KKyAgICAgI2VuZGlmCis8L3ByZT4KKyA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmZXh0ZW5zaW9uXzAwNWZfMDA1Zi0yODgxIj48L2E+PGEgbmFtZT0iaW5kZXgtcGVkYW50aWMtMjg4MiI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+IGFuZCBvdGhlciBvcHRpb25zIGNhdXNlIHdhcm5pbmdzIGZvciBtYW55IEdOVSBDIGV4dGVuc2lvbnMuIAorWW91IGNhbgorcHJldmVudCBzdWNoIHdhcm5pbmdzIHdpdGhpbiBvbmUgZXhwcmVzc2lvbiBieSB3cml0aW5nCis8Y29kZT5fX2V4dGVuc2lvbl9fPC9jb2RlPiBiZWZvcmUgdGhlIGV4cHJlc3Npb24uICA8Y29kZT5fX2V4dGVuc2lvbl9fPC9jb2RlPiBoYXMgbm8KK2VmZmVjdCBhc2lkZSBmcm9tIHRoaXMuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FyY2hpdGVjdHVyZS1pbXBsZW1lbnRhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BcmNoaXRlY3R1cmUtaW1wbGVtZW50YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTA4NzgwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BcmNoaXRlY3R1cmUtaW1wbGVtZW50YXRpb24uaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BcmNoaXRlY3R1cmUgaW1wbGVtZW50YXRpb24gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iIHRpdGxlPSJDIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTGlicmFyeS1mdW5jdGlvbnMtaW1wbGVtZW50YXRpb24uaHRtbCNMaWJyYXJ5LWZ1bmN0aW9ucy1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkxpYnJhcnkgZnVuY3Rpb25zIGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTG9jYWxlXzAwMmRzcGVjaWZpYy1iZWhhdmlvci1pbXBsZW1lbnRhdGlvbi5odG1sI0xvY2FsZV8wMDJkc3BlY2lmaWMtYmVoYXZpb3ItaW1wbGVtZW50YXRpb24iIHRpdGxlPSJMb2NhbGUtc3BlY2lmaWMgYmVoYXZpb3IgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQXJjaGl0ZWN0dXJlLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxvY2FsZV8wMDJkc3BlY2lmaWMtYmVoYXZpb3ItaW1wbGVtZW50YXRpb24uaHRtbCNMb2NhbGVfMDAyZHNwZWNpZmljLWJlaGF2aW9yLWltcGxlbWVudGF0aW9uIj5Mb2NhbGUtc3BlY2lmaWMgYmVoYXZpb3IgaW1wbGVtZW50YXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMaWJyYXJ5LWZ1bmN0aW9ucy1pbXBsZW1lbnRhdGlvbi5odG1sI0xpYnJhcnktZnVuY3Rpb25zLWltcGxlbWVudGF0aW9uIj5MaWJyYXJ5IGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj5DIEltcGxlbWVudGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xNSBBcmNoaXRlY3R1cmU8L2gzPgorCisgICAgIDx1bD4KKzxsaT48Y2l0ZT5UaGUgdmFsdWVzIG9yIGV4cHJlc3Npb25zIGFzc2lnbmVkIHRvIHRoZSBtYWNyb3Mgc3BlY2lmaWVkIGluIHRoZQoraGVhZGVycyA8L2NpdGU+PGNvZGU+Jmx0O2Zsb2F0LmgmZ3Q7PC9jb2RlPjxjaXRlPiwgPC9jaXRlPjxjb2RlPiZsdDtsaW1pdHMuaCZndDs8L2NvZGU+PGNpdGU+LCBhbmQgPC9jaXRlPjxjb2RlPiZsdDtzdGRpbnQuaCZndDs8L2NvZGU+PGNpdGU+CisoQzkwIGFuZCBDOTkgNS4yLjQuMiwgQzk5IDcuMTguMiwgQzk5IDcuMTguMykuPC9jaXRlPgorCisgICAgIDxwPkRldGVybWluZWQgYnkgQUJJLgorCisgICAgIDxsaT48Y2l0ZT5UaGUgbnVtYmVyLCBvcmRlciwgYW5kIGVuY29kaW5nIG9mIGJ5dGVzIGluIGFueSBvYmplY3QKKyh3aGVuIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiB0aGlzIEludGVybmF0aW9uYWwgU3RhbmRhcmQpIChDOTkgNi4yLjYuMSkuPC9jaXRlPgorCisgICAgIDxwPkRldGVybWluZWQgYnkgQUJJLgorCisgICAgIDxsaT48Y2l0ZT5UaGUgdmFsdWUgb2YgdGhlIHJlc3VsdCBvZiB0aGUgPC9jaXRlPjxjb2RlPnNpemVvZjwvY29kZT48Y2l0ZT4gb3BlcmF0b3IgKEM5MAorNi4zLjMuNCwgQzk5IDYuNS4zLjQpLjwvY2l0ZT4KKworICAgICA8cD5EZXRlcm1pbmVkIGJ5IEFCSS4KKworPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQXJndW1lbnQtVHlwZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQXJndW1lbnQtVHlwZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQxMDMyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Bcmd1bWVudC1UeXBlcy5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFyZ3VtZW50IFR5cGVzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNGUl8wMDJkVi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iRlItViBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEaXJlY3RseV8wMDJkbWFwcGVkLUludGVnZXItRnVuY3Rpb25zLmh0bWwjRGlyZWN0bHlfMDAyZG1hcHBlZC1JbnRlZ2VyLUZ1bmN0aW9ucyIgdGl0bGU9IkRpcmVjdGx5LW1hcHBlZCBJbnRlZ2VyIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBcmd1bWVudC1UeXBlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEaXJlY3RseV8wMDJkbWFwcGVkLUludGVnZXItRnVuY3Rpb25zLmh0bWwjRGlyZWN0bHlfMDAyZG1hcHBlZC1JbnRlZ2VyLUZ1bmN0aW9ucyI+RGlyZWN0bHktbWFwcGVkIEludGVnZXIgRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkZSLVYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni42LjEgQXJndW1lbnQgVHlwZXM8L2g1PgorCis8cD5UaGUgYXJndW1lbnRzIHRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgY2FuIGJlIGRpdmlkZWQgaW50byB0aHJlZSBncm91cHM6CityZWdpc3RlciBudW1iZXJzLCBjb21waWxlLXRpbWUgY29uc3RhbnRzIGFuZCBydW4tdGltZSB2YWx1ZXMuICBJbiBvcmRlcgordG8gbWFrZSB0aGlzIGNsYXNzaWZpY2F0aW9uIGNsZWFyIGF0IGEgZ2xhbmNlLCB0aGUgYXJndW1lbnRzIGFuZCByZXR1cm4KK3ZhbHVlcyBhcmUgZ2l2ZW4gdGhlIGZvbGxvd2luZyBwc2V1ZG8gdHlwZXM6CisKKyA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UHNldWRvIHR5cGUgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPlJlYWwgQyB0eXBlIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj5Db25zdGFudD8gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPkRlc2NyaXB0aW9uCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT51aDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPjxjb2RlPnVuc2lnbmVkIHNob3J0PC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+Tm8gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPmFuIHVuc2lnbmVkIGhhbGZ3b3JkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT51dzE8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj48Y29kZT51bnNpZ25lZCBpbnQ8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj5ObyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+YW4gdW5zaWduZWQgd29yZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+c3cxPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+PGNvZGU+aW50PC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+Tm8gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPmEgc2lnbmVkIHdvcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPnV3MjwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPjxjb2RlPnVuc2lnbmVkIGxvbmcgbG9uZzwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPk5vCis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+YW4gdW5zaWduZWQgZG91Ymxld29yZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+c3cyPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+PGNvZGU+bG9uZyBsb25nPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+Tm8gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPmEgc2lnbmVkIGRvdWJsZXdvcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPmNvbnN0PC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+PGNvZGU+aW50PC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+WWVzIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj5hbiBpbnRlZ2VyIGNvbnN0YW50Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5hY2M8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj48Y29kZT5pbnQ8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj5ZZXMgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPmFuIEFDQyByZWdpc3RlciBudW1iZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPmlhY2M8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj48Y29kZT5pbnQ8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj5ZZXMgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPmFuIElBQ0MgcmVnaXN0ZXIgbnVtYmVyCisgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgPHA+VGhlc2UgcHNldWRvIHR5cGVzIGFyZSBub3QgZGVmaW5lZCBieSBHQ0MsIHRoZXkgYXJlIHNpbXBseSBhIG5vdGF0aW9uYWwKK2NvbnZlbmllbmNlIHVzZWQgaW4gdGhpcyBtYW51YWwuCisKKyA8cD5Bcmd1bWVudHMgb2YgdHlwZSA8Y29kZT51aDwvY29kZT4sIDxjb2RlPnV3MTwvY29kZT4sIDxjb2RlPnN3MTwvY29kZT4sIDxjb2RlPnV3MjwvY29kZT4KK2FuZCA8Y29kZT5zdzI8L2NvZGU+IGFyZSBldmFsdWF0ZWQgYXQgcnVuIHRpbWUuICBUaGV5IGNvcnJlc3BvbmQgdG8KK3JlZ2lzdGVyIG9wZXJhbmRzIGluIHRoZSB1bmRlcmx5aW5nIEZSLVYgaW5zdHJ1Y3Rpb25zLgorCisgPHA+PGNvZGU+Y29uc3Q8L2NvZGU+IGFyZ3VtZW50cyByZXByZXNlbnQgaW1tZWRpYXRlIG9wZXJhbmRzIGluIHRoZSB1bmRlcmx5aW5nCitGUi1WIGluc3RydWN0aW9ucy4gIFRoZXkgbXVzdCBiZSBjb21waWxlLXRpbWUgY29uc3RhbnRzLgorCisgPHA+PGNvZGU+YWNjPC9jb2RlPiBhcmd1bWVudHMgYXJlIGV2YWx1YXRlZCBhdCBjb21waWxlIHRpbWUgYW5kIHNwZWNpZnkgdGhlIG51bWJlcgorb2YgYW4gYWNjdW11bGF0b3IgcmVnaXN0ZXIuICBGb3IgZXhhbXBsZSwgYW4gPGNvZGU+YWNjPC9jb2RlPiBhcmd1bWVudCBvZiAyCitzZWxlY3RzIHRoZSBBQ0MyIHJlZ2lzdGVyLgorCisgPHA+PGNvZGU+aWFjYzwvY29kZT4gYXJndW1lbnRzIGFyZSBzaW1pbGFyIHRvIDxjb2RlPmFjYzwvY29kZT4gYXJndW1lbnRzIGJ1dCBzcGVjaWZ5IHRoZQorbnVtYmVyIG9mIGFuIElBQ0MgcmVnaXN0ZXIuICBTZWUgc2VlIDxhIGhyZWY9Ik90aGVyLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNPdGhlci1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5PdGhlciBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Citmb3IgbW9yZSBkZXRhaWxzLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BcnJheXMtYW5kLXBvaW50ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0FycmF5cy1hbmQtcG9pbnRlcnMtaW1wbGVtZW50YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI3NmI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BcnJheXMtYW5kLXBvaW50ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QXJyYXlzIGFuZCBwb2ludGVycyBpbXBsZW1lbnRhdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkMgSW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGbG9hdGluZy1wb2ludC1pbXBsZW1lbnRhdGlvbi5odG1sI0Zsb2F0aW5nLXBvaW50LWltcGxlbWVudGF0aW9uIiB0aXRsZT0iRmxvYXRpbmcgcG9pbnQgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIaW50cy1pbXBsZW1lbnRhdGlvbi5odG1sI0hpbnRzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iSGludHMgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQXJyYXlzLWFuZC1wb2ludGVycy1pbXBsZW1lbnRhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJIaW50cy1pbXBsZW1lbnRhdGlvbi5odG1sI0hpbnRzLWltcGxlbWVudGF0aW9uIj5IaW50cyBpbXBsZW1lbnRhdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZsb2F0aW5nLXBvaW50LWltcGxlbWVudGF0aW9uLmh0bWwjRmxvYXRpbmctcG9pbnQtaW1wbGVtZW50YXRpb24iPkZsb2F0aW5nIHBvaW50IGltcGxlbWVudGF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iPkMgSW1wbGVtZW50YXRpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjcgQXJyYXlzIGFuZCBwb2ludGVyczwvaDM+CisKKyAgICAgPHVsPgorPGxpPjxjaXRlPlRoZSByZXN1bHQgb2YgY29udmVydGluZyBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciBvcgordmljZSB2ZXJzYSAoQzkwIDYuMy40LCBDOTkgNi4zLjIuMykuPC9jaXRlPgorCisgICAgIDxwPkEgY2FzdCBmcm9tIHBvaW50ZXIgdG8gaW50ZWdlciBkaXNjYXJkcyBtb3N0LXNpZ25pZmljYW50IGJpdHMgaWYgdGhlCitwb2ludGVyIHJlcHJlc2VudGF0aW9uIGlzIGxhcmdlciB0aGFuIHRoZSBpbnRlZ2VyIHR5cGUsCitzaWduLWV4dGVuZHM8YSByZWw9ImZvb3Rub3RlIiBocmVmPSIjZm4tMSIgbmFtZT0iZm5kLTEiPjxzdXA+MTwvc3VwPjwvYT4KK2lmIHRoZSBwb2ludGVyIHJlcHJlc2VudGF0aW9uIGlzIHNtYWxsZXIgdGhhbiB0aGUgaW50ZWdlciB0eXBlLCBvdGhlcndpc2UKK3RoZSBiaXRzIGFyZSB1bmNoYW5nZWQuIAorPCEtLSA/Pz8gV2UndmUgYWx3YXlzIGNsYWltZWQgdGhhdCBwb2ludGVycyB3ZXJlIHVuc2lnbmVkIGVudGl0aWVzLiAtLT4KKzwhLS0gU2hvdWxkbid0IHdlIHRoZXJlZm9yZSBiZSBkb2luZyB6ZXJvLWV4dGVuc2lvbj8gIElmIHNvLCB0aGUgYnVnIC0tPgorPCEtLSBpcyBpbiBjb252ZXJ0X3RvX2ludGVnZXIsIHdoZXJlIHdlIGNhbGwgdHlwZV9mb3Jfc2l6ZSBhbmQgcmVxdWVzdCAtLT4KKzwhLS0gYSBzaWduZWQgaW50ZWdyYWwgdHlwZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBtaWdodCBiZSBtb3N0IHVzZWZ1bCAtLT4KKzwhLS0gZm9yIHRoZSB0YXJnZXQgaWYgd2UgZXh0ZW5kIGFjY29yZGluZyB0byBQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQuIC0tPgorCisgICAgIDxwPkEgY2FzdCBmcm9tIGludGVnZXIgdG8gcG9pbnRlciBkaXNjYXJkcyBtb3N0LXNpZ25pZmljYW50IGJpdHMgaWYgdGhlCitwb2ludGVyIHJlcHJlc2VudGF0aW9uIGlzIHNtYWxsZXIgdGhhbiB0aGUgaW50ZWdlciB0eXBlLCBleHRlbmRzIGFjY29yZGluZwordG8gdGhlIHNpZ25lZG5lc3Mgb2YgdGhlIGludGVnZXIgdHlwZSBpZiB0aGUgcG9pbnRlciByZXByZXNlbnRhdGlvbgoraXMgbGFyZ2VyIHRoYW4gdGhlIGludGVnZXIgdHlwZSwgb3RoZXJ3aXNlIHRoZSBiaXRzIGFyZSB1bmNoYW5nZWQuCisKKyAgICAgPHA+V2hlbiBjYXN0aW5nIGZyb20gcG9pbnRlciB0byBpbnRlZ2VyIGFuZCBiYWNrIGFnYWluLCB0aGUgcmVzdWx0aW5nCitwb2ludGVyIG11c3QgcmVmZXJlbmNlIHRoZSBzYW1lIG9iamVjdCBhcyB0aGUgb3JpZ2luYWwgcG9pbnRlciwgb3RoZXJ3aXNlCit0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiAgVGhhdCBpcywgb25lIG1heSBub3QgdXNlIGludGVnZXIgYXJpdGhtZXRpYyB0bworYXZvaWQgdGhlIHVuZGVmaW5lZCBiZWhhdmlvciBvZiBwb2ludGVyIGFyaXRobWV0aWMgYXMgcHJvc2NyaWJlZCBpbgorQzk5IDYuNS42LzguCisKKyAgICAgPGxpPjxjaXRlPlRoZSBzaXplIG9mIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdHdvIHBvaW50ZXJzIHRvIGVsZW1lbnRzCitvZiB0aGUgc2FtZSBhcnJheSAoQzkwIDYuMy42LCBDOTkgNi41LjYpLjwvY2l0ZT4KKworICAgICA8cD5UaGUgdmFsdWUgaXMgYXMgc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZCBhbmQgdGhlIHR5cGUgaXMgZGV0ZXJtaW5lZAorYnkgdGhlIEFCSS4KKworPC91bD4KKworIDxkaXYgY2xhc3M9ImZvb3Rub3RlIj4KKzxocj4KKzxoND5Gb290bm90ZXM8L2g0PjxwIGNsYXNzPSJmb290bm90ZSI+PHNtYWxsPls8YSBuYW1lPSJmbi0xIiBocmVmPSIjZm5kLTEiPjE8L2E+XTwvc21hbGw+IEZ1dHVyZSB2ZXJzaW9ucyBvZiBHQ0MgbWF5IHplcm8tZXh0ZW5kLCBvciB1c2UKK2EgdGFyZ2V0LWRlZmluZWQgPGNvZGU+cHRyX2V4dGVuZDwvY29kZT4gcGF0dGVybi4gIERvIG5vdCByZWx5IG9uIHNpZ24gZXh0ZW5zaW9uLjwvcD4KKworIDxocj48L2Rpdj4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQXNtLUxhYmVscy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Bc20tTGFiZWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3MGZlNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQXNtLUxhYmVscy5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFzbSBMYWJlbHMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyIgdGl0bGU9IkNvbnN0cmFpbnRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRXhwbGljaXQtUmVnLVZhcnMuaHRtbCNFeHBsaWNpdC1SZWctVmFycyIgdGl0bGU9IkV4cGxpY2l0IFJlZyBWYXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFzbS1MYWJlbHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXhwbGljaXQtUmVnLVZhcnMuaHRtbCNFeHBsaWNpdC1SZWctVmFycyI+RXhwbGljaXQgUmVnIFZhcnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb25zdHJhaW50cy5odG1sI0NvbnN0cmFpbnRzIj5Db25zdHJhaW50czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni40MyBDb250cm9sbGluZyBOYW1lcyBVc2VkIGluIEFzc2VtYmxlciBDb2RlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXNzZW1ibGVyLW5hbWVzLWZvci1pZGVudGlmaWVycy0yODYxIj48L2E+PGEgbmFtZT0iaW5kZXgtbmFtZXMtdXNlZC1pbi1hc3NlbWJsZXItY29kZS0yODYyIj48L2E+PGEgbmFtZT0iaW5kZXgtaWRlbnRpZmllcnNfMDAyYy1uYW1lcy1pbi1hc3NlbWJsZXItY29kZS0yODYzIj48L2E+CitZb3UgY2FuIHNwZWNpZnkgdGhlIG5hbWUgdG8gYmUgdXNlZCBpbiB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIGEgQworZnVuY3Rpb24gb3IgdmFyaWFibGUgYnkgd3JpdGluZyB0aGUgPGNvZGU+YXNtPC9jb2RlPiAob3IgPGNvZGU+X19hc21fXzwvY29kZT4pCitrZXl3b3JkIGFmdGVyIHRoZSBkZWNsYXJhdG9yIGFzIGZvbGxvd3M6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgZm9vIGFzbSAoIm15Zm9vIikgPSAyOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGlzIHNwZWNpZmllcyB0aGF0IHRoZSBuYW1lIHRvIGJlIHVzZWQgZm9yIHRoZSB2YXJpYWJsZSA8Y29kZT5mb288L2NvZGU+IGluCit0aGUgYXNzZW1ibGVyIGNvZGUgc2hvdWxkIGJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXlmb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmF0aGVyIHRoYW4gdGhlIHVzdWFsCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyA8cD5PbiBzeXN0ZW1zIHdoZXJlIGFuIHVuZGVyc2NvcmUgaXMgbm9ybWFsbHkgcHJlcGVuZGVkIHRvIHRoZSBuYW1lIG9mIGEgQworZnVuY3Rpb24gb3IgdmFyaWFibGUsIHRoaXMgZmVhdHVyZSBhbGxvd3MgeW91IHRvIGRlZmluZSBuYW1lcyBmb3IgdGhlCitsaW5rZXIgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlLgorCisgPHA+SXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UgdGhpcyBmZWF0dXJlIHdpdGggYSBub24tc3RhdGljIGxvY2FsCit2YXJpYWJsZSBzaW5jZSBzdWNoIHZhcmlhYmxlcyBkbyBub3QgaGF2ZSBhc3NlbWJsZXIgbmFtZXMuICBJZiB5b3UgYXJlCit0cnlpbmcgdG8gcHV0IHRoZSB2YXJpYWJsZSBpbiBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIsIHNlZSA8YSBocmVmPSJFeHBsaWNpdC1SZWctVmFycy5odG1sI0V4cGxpY2l0LVJlZy1WYXJzIj5FeHBsaWNpdCBSZWcgVmFyczwvYT4uICBHQ0MgcHJlc2VudGx5IGFjY2VwdHMgc3VjaCBjb2RlIHdpdGggYSB3YXJuaW5nLCBidXQgd2lsbAorcHJvYmFibHkgYmUgY2hhbmdlZCB0byBpc3N1ZSBhbiBlcnJvciwgcmF0aGVyIHRoYW4gYSB3YXJuaW5nLCBpbiB0aGUKK2Z1dHVyZS4KKworIDxwPllvdSBjYW5ub3QgdXNlIDxjb2RlPmFzbTwvY29kZT4gaW4gdGhpcyB3YXkgaW4gYSBmdW5jdGlvbiA8ZW0+ZGVmaW5pdGlvbjwvZW0+OyBidXQKK3lvdSBjYW4gZ2V0IHRoZSBzYW1lIGVmZmVjdCBieSB3cml0aW5nIGEgZGVjbGFyYXRpb24gZm9yIHRoZSBmdW5jdGlvbgorYmVmb3JlIGl0cyBkZWZpbml0aW9uIGFuZCBwdXR0aW5nIDxjb2RlPmFzbTwvY29kZT4gdGhlcmUsIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGV4dGVybiBmdW5jICgpIGFzbSAoIkZVTkMiKTsKKyAgICAgCisgICAgIGZ1bmMgKHgsIHkpCisgICAgICAgICAgaW50IHgsIHk7CisgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworPC9wcmU+CisgPHA+SXQgaXMgdXAgdG8geW91IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhc3NlbWJsZXIgbmFtZXMgeW91IGNob29zZSBkbyBub3QKK2NvbmZsaWN0IHdpdGggYW55IG90aGVyIGFzc2VtYmxlciBzeW1ib2xzLiAgQWxzbywgeW91IG11c3Qgbm90IHVzZSBhCityZWdpc3RlciBuYW1lOyB0aGF0IHdvdWxkIHByb2R1Y2UgY29tcGxldGVseSBpbnZhbGlkIGFzc2VtYmxlciBjb2RlLiAgR0NDCitkb2VzIG5vdCBhcyB5ZXQgaGF2ZSB0aGUgYWJpbGl0eSB0byBzdG9yZSBzdGF0aWMgdmFyaWFibGVzIGluIHJlZ2lzdGVycy4gCitQZXJoYXBzIHRoYXQgd2lsbCBiZSBhZGRlZC4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQXNzZW1ibGVyLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQXNzZW1ibGVyLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmY0MDIyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Bc3NlbWJsZXItT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNzQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFzc2VtYmxlciBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyIgdGl0bGU9Ikludm9raW5nIEdDQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiIHRpdGxlPSJQcmVwcm9jZXNzb3IgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyIgdGl0bGU9IkxpbmsgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBc3NlbWJsZXItT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjEyIFBhc3NpbmcgT3B0aW9ucyB0byB0aGUgQXNzZW1ibGVyPC9oMz4KKworPCEtLSBwcmV2ZW50IGJhZCBwYWdlIGJyZWFrIHdpdGggdGhpcyBsaW5lIC0tPgorPHA+WW91IGNhbiBwYXNzIG9wdGlvbnMgdG8gdGhlIGFzc2VtYmxlci4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LVdhLDwvY29kZT48dmFyPm9wdGlvbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1XYS0xMDIxIj48L2E+UGFzcyA8dmFyPm9wdGlvbjwvdmFyPiBhcyBhbiBvcHRpb24gdG8gdGhlIGFzc2VtYmxlci4gIElmIDx2YXI+b3B0aW9uPC92YXI+Citjb250YWlucyBjb21tYXMsIGl0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgb3B0aW9ucyBhdCB0aGUgY29tbWFzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVhhc3NlbWJsZXIgPC9jb2RlPjx2YXI+b3B0aW9uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LVhhc3NlbWJsZXItMTAyMiI+PC9hPlBhc3MgPHZhcj5vcHRpb248L3Zhcj4gYXMgYW4gb3B0aW9uIHRvIHRoZSBhc3NlbWJsZXIuICBZb3UgY2FuIHVzZSB0aGlzIHRvCitzdXBwbHkgc3lzdGVtLXNwZWNpZmljIGFzc2VtYmxlciBvcHRpb25zIHRoYXQgR0NDIGRvZXMgbm90CityZWNvZ25pemUuCisKKyAgICAgPHA+SWYgeW91IHdhbnQgdG8gcGFzcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwgeW91IG11c3QgdXNlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tWGFzc2VtYmxlcjwvc3Bhbj48L3NhbXA+IHR3aWNlLCBvbmNlIGZvciB0aGUgb3B0aW9uIGFuZCBvbmNlIGZvciB0aGUgYXJndW1lbnQuCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BdHRyaWJ1dGUtU3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0F0dHJpYnV0ZS1TeW50YXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzYzNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9BdHRyaWJ1dGUtU3ludGF4Lmh0bWwKQEAgLTAsMCArMSwyNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkF0dHJpYnV0ZSBTeW50YXggLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiIHRpdGxlPSJGdW5jdGlvbiBBdHRyaWJ1dGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRnVuY3Rpb24tUHJvdG90eXBlcy5odG1sI0Z1bmN0aW9uLVByb3RvdHlwZXMiIHRpdGxlPSJGdW5jdGlvbiBQcm90b3R5cGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkF0dHJpYnV0ZS1TeW50YXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRnVuY3Rpb24tUHJvdG90eXBlcy5odG1sI0Z1bmN0aW9uLVByb3RvdHlwZXMiPkZ1bmN0aW9uIFByb3RvdHlwZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4zMSBBdHRyaWJ1dGUgU3ludGF4PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXR0cmlidXRlLXN5bnRheC0yNzQ1Ij48L2E+CitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBzeW50YXggd2l0aCB3aGljaCA8Y29kZT5fX2F0dHJpYnV0ZV9fPC9jb2RlPiBtYXkgYmUKK3VzZWQsIGFuZCB0aGUgY29uc3RydWN0cyB0byB3aGljaCBhdHRyaWJ1dGUgc3BlY2lmaWVycyBiaW5kLCBmb3IgdGhlIEMKK2xhbmd1YWdlLiAgU29tZSBkZXRhaWxzIG1heSB2YXJ5IGZvciBDKysgYW5kIE9iamVjdGl2ZS1DLiAgQmVjYXVzZSBvZgoraW5mZWxpY2l0aWVzIGluIHRoZSBncmFtbWFyIGZvciBhdHRyaWJ1dGVzLCBzb21lIGZvcm1zIGRlc2NyaWJlZCBoZXJlCittYXkgbm90IGJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgaW4gYWxsIGNhc2VzLgorCisgPHA+VGhlcmUgYXJlIHNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgc2VtYW50aWNzIG9mIGF0dHJpYnV0ZXMgaW4gQysrLiAgRm9yCitleGFtcGxlLCB0aGVyZSBhcmUgbm8gbWFuZ2xpbmdzIGZvciBhdHRyaWJ1dGVzLCBhbHRob3VnaCB0aGV5IG1heSBhZmZlY3QKK2NvZGUgZ2VuZXJhdGlvbiwgc28gcHJvYmxlbXMgbWF5IGFyaXNlIHdoZW4gYXR0cmlidXRlZCB0eXBlcyBhcmUgdXNlZCBpbgorY29uanVuY3Rpb24gd2l0aCB0ZW1wbGF0ZXMgb3Igb3ZlcmxvYWRpbmcuICBTaW1pbGFybHksIDxjb2RlPnR5cGVpZDwvY29kZT4KK2RvZXMgbm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gdHlwZXMgd2l0aCBkaWZmZXJlbnQgYXR0cmlidXRlcy4gIFN1cHBvcnQKK2ZvciBhdHRyaWJ1dGVzIGluIEMrKyBtYXkgYmUgcmVzdHJpY3RlZCBpbiBmdXR1cmUgdG8gYXR0cmlidXRlcyBvbgorZGVjbGFyYXRpb25zIG9ubHksIGJ1dCBub3Qgb24gbmVzdGVkIGRlY2xhcmF0b3JzLgorCisgPHA+U2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPiwgZm9yIGRldGFpbHMgb2YgdGhlIHNlbWFudGljcyBvZiBhdHRyaWJ1dGVzCithcHBseWluZyB0byBmdW5jdGlvbnMuICBTZWUgPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+LCBmb3IgZGV0YWlscyBvZiB0aGUKK3NlbWFudGljcyBvZiBhdHRyaWJ1dGVzIGFwcGx5aW5nIHRvIHZhcmlhYmxlcy4gIFNlZSA8YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPlR5cGUgQXR0cmlidXRlczwvYT4sCitmb3IgZGV0YWlscyBvZiB0aGUgc2VtYW50aWNzIG9mIGF0dHJpYnV0ZXMgYXBwbHlpbmcgdG8gc3RydWN0dXJlLCB1bmlvbgorYW5kIGVudW1lcmF0ZWQgdHlwZXMuCisKKyA8cD5BbiA8ZGZuPmF0dHJpYnV0ZSBzcGVjaWZpZXI8L2Rmbj4gaXMgb2YgdGhlIGZvcm0KKzxjb2RlPl9fYXR0cmlidXRlX18gKCg8L2NvZGU+PHZhcj5hdHRyaWJ1dGUtbGlzdDwvdmFyPjxjb2RlPikpPC9jb2RlPi4gIEFuIDxkZm4+YXR0cmlidXRlIGxpc3Q8L2Rmbj4KK2lzIGEgcG9zc2libHkgZW1wdHkgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIG9mIDxkZm4+YXR0cmlidXRlczwvZGZuPiwgd2hlcmUKK2VhY2ggYXR0cmlidXRlIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgIDx1bD4KKzxsaT5FbXB0eS4gIEVtcHR5IGF0dHJpYnV0ZXMgYXJlIGlnbm9yZWQuCisKKyAgICAgPGxpPkEgd29yZCAod2hpY2ggbWF5IGJlIGFuIGlkZW50aWZpZXIgc3VjaCBhcyA8Y29kZT51bnVzZWQ8L2NvZGU+LCBvciBhIHJlc2VydmVkCit3b3JkIHN1Y2ggYXMgPGNvZGU+Y29uc3Q8L2NvZGU+KS4KKworICAgICA8bGk+QSB3b3JkLCBmb2xsb3dlZCBieSwgaW4gcGFyZW50aGVzZXMsIHBhcmFtZXRlcnMgZm9yIHRoZSBhdHRyaWJ1dGUuIAorVGhlc2UgcGFyYW1ldGVycyB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorCisgICAgICAgICAgPHVsPgorPGxpPkFuIGlkZW50aWZpZXIuICBGb3IgZXhhbXBsZSwgPGNvZGU+bW9kZTwvY29kZT4gYXR0cmlidXRlcyB1c2UgdGhpcyBmb3JtLgorCisgICAgICAgICAgPGxpPkFuIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgYSBjb21tYSBhbmQgYSBub24tZW1wdHkgY29tbWEtc2VwYXJhdGVkIGxpc3QKK29mIGV4cHJlc3Npb25zLiAgRm9yIGV4YW1wbGUsIDxjb2RlPmZvcm1hdDwvY29kZT4gYXR0cmlidXRlcyB1c2UgdGhpcyBmb3JtLgorCisgICAgICAgICAgPGxpPkEgcG9zc2libHkgZW1wdHkgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMuICBGb3IgZXhhbXBsZSwKKzxjb2RlPmZvcm1hdF9hcmc8L2NvZGU+IGF0dHJpYnV0ZXMgdXNlIHRoaXMgZm9ybSB3aXRoIHRoZSBsaXN0IGJlaW5nIGEgc2luZ2xlCitpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24sIGFuZCA8Y29kZT5hbGlhczwvY29kZT4gYXR0cmlidXRlcyB1c2UgdGhpcyBmb3JtCit3aXRoIHRoZSBsaXN0IGJlaW5nIGEgc2luZ2xlIHN0cmluZyBjb25zdGFudC4gCis8L3VsPgorICAgICA8L3VsPgorCisgPHA+QW4gPGRmbj5hdHRyaWJ1dGUgc3BlY2lmaWVyIGxpc3Q8L2Rmbj4gaXMgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBhdHRyaWJ1dGUKK3NwZWNpZmllcnMsIG5vdCBzZXBhcmF0ZWQgYnkgYW55IG90aGVyIHRva2Vucy4KKworIDxwPkluIEdOVSBDLCBhbiBhdHRyaWJ1dGUgc3BlY2lmaWVyIGxpc3QgbWF5IGFwcGVhciBhZnRlciB0aGUgY29sb24gZm9sbG93aW5nIGEKK2xhYmVsLCBvdGhlciB0aGFuIGEgPGNvZGU+Y2FzZTwvY29kZT4gb3IgPGNvZGU+ZGVmYXVsdDwvY29kZT4gbGFiZWwuICBUaGUgb25seQorYXR0cmlidXRlIGl0IG1ha2VzIHNlbnNlIHRvIHVzZSBhZnRlciBhIGxhYmVsIGlzIDxjb2RlPnVudXNlZDwvY29kZT4uICBUaGlzCitmZWF0dXJlIGlzIGludGVuZGVkIGZvciBwcm9ncmFtLWdlbmVyYXRlZCBjb2RlIHRoYXQgbWF5IGNvbnRhaW4gdW51c2VkIGxhYmVscywKK2J1dCB3aGljaCBpcyBjb21waWxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uICBJdCBpcworbm90IG5vcm1hbGx5IGFwcHJvcHJpYXRlIHRvIHVzZSBpbiBpdCBodW1hbi13cml0dGVuIGNvZGUsIHRob3VnaCBpdAorY291bGQgYmUgdXNlZnVsIGluIGNhc2VzIHdoZXJlIHRoZSBjb2RlIHRoYXQganVtcHMgdG8gdGhlIGxhYmVsIGlzCitjb250YWluZWQgd2l0aGluIGFuIDxjb2RlPiNpZmRlZjwvY29kZT4gY29uZGl0aW9uYWwuICBHTlUgQysrIG9ubHkgcGVybWl0cworYXR0cmlidXRlcyBvbiBsYWJlbHMgaWYgdGhlIGF0dHJpYnV0ZSBzcGVjaWZpZXIgaXMgaW1tZWRpYXRlbHkKK2ZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uIChpLmUuLCB0aGUgbGFiZWwgYXBwbGllcyB0byBhbiBlbXB0eQorc3RhdGVtZW50KS4gIElmIHRoZSBzZW1pY29sb24gaXMgbWlzc2luZywgQysrIGxhYmVsIGF0dHJpYnV0ZXMgYXJlCithbWJpZ3VvdXMsIGFzIGl0IGlzIHBlcm1pc3NpYmxlIGZvciBhIGRlY2xhcmF0aW9uLCB3aGljaCBjb3VsZCBiZWdpbgord2l0aCBhbiBhdHRyaWJ1dGUgbGlzdCwgdG8gYmUgbGFiZWxsZWQgaW4gQysrLiAgRGVjbGFyYXRpb25zIGNhbm5vdCBiZQorbGFiZWxsZWQgaW4gQzkwIG9yIEM5OSwgc28gdGhlIGFtYmlndWl0eSBkb2VzIG5vdCBhcmlzZSB0aGVyZS4KKworIDxwPkFuIGF0dHJpYnV0ZSBzcGVjaWZpZXIgbGlzdCBtYXkgYXBwZWFyIGFzIHBhcnQgb2YgYSA8Y29kZT5zdHJ1Y3Q8L2NvZGU+LAorPGNvZGU+dW5pb248L2NvZGU+IG9yIDxjb2RlPmVudW08L2NvZGU+IHNwZWNpZmllci4gIEl0IG1heSBnbyBlaXRoZXIgaW1tZWRpYXRlbHkKK2FmdGVyIHRoZSA8Y29kZT5zdHJ1Y3Q8L2NvZGU+LCA8Y29kZT51bmlvbjwvY29kZT4gb3IgPGNvZGU+ZW51bTwvY29kZT4ga2V5d29yZCwgb3IgYWZ0ZXIKK3RoZSBjbG9zaW5nIGJyYWNlLiAgVGhlIGZvcm1lciBzeW50YXggaXMgcHJlZmVycmVkLiAKK1doZXJlIGF0dHJpYnV0ZSBzcGVjaWZpZXJzIGZvbGxvdyB0aGUgY2xvc2luZyBicmFjZSwgdGhleSBhcmUgY29uc2lkZXJlZAordG8gcmVsYXRlIHRvIHRoZSBzdHJ1Y3R1cmUsIHVuaW9uIG9yIGVudW1lcmF0ZWQgdHlwZSBkZWZpbmVkLCBub3QgdG8gYW55CitlbmNsb3NpbmcgZGVjbGFyYXRpb24gdGhlIHR5cGUgc3BlY2lmaWVyIGFwcGVhcnMgaW4sIGFuZCB0aGUgdHlwZQorZGVmaW5lZCBpcyBub3QgY29tcGxldGUgdW50aWwgYWZ0ZXIgdGhlIGF0dHJpYnV0ZSBzcGVjaWZpZXJzLiAKKzwhLS0gT3RoZXJ3aXNlLCB0aGVyZSB3b3VsZCBiZSB0aGUgZm9sbG93aW5nIHByb2JsZW1zOiBhIHNoaWZ0L3JlZHVjZSAtLT4KKzwhLS0gY29uZmxpY3QgYmV0d2VlbiBhdHRyaWJ1dGVzIGJpbmRpbmcgdGhlIHN0cnVjdC91bmlvbi9lbnVtIGFuZCAtLT4KKzwhLS0gYmluZGluZyB0byB0aGUgbGlzdCBvZiBzcGVjaWZpZXJzL3F1YWxpZmllcnM7IGFuZCAiYWxpZ25lZCIgLS0+Cis8IS0tIGF0dHJpYnV0ZXMgY291bGQgdXNlIHNpemVvZiBmb3IgdGhlIHN0cnVjdHVyZSwgYnV0IHRoZSBzaXplIGNvdWxkIGJlIC0tPgorPCEtLSBjaGFuZ2VkIGxhdGVyIGJ5ICJwYWNrZWQiIGF0dHJpYnV0ZXMuIC0tPgorCisgPHA+T3RoZXJ3aXNlLCBhbiBhdHRyaWJ1dGUgc3BlY2lmaWVyIGFwcGVhcnMgYXMgcGFydCBvZiBhIGRlY2xhcmF0aW9uLAorY291bnRpbmcgZGVjbGFyYXRpb25zIG9mIHVubmFtZWQgcGFyYW1ldGVycyBhbmQgdHlwZSBuYW1lcywgYW5kIHJlbGF0ZXMKK3RvIHRoYXQgZGVjbGFyYXRpb24gKHdoaWNoIG1heSBiZSBuZXN0ZWQgaW4gYW5vdGhlciBkZWNsYXJhdGlvbiwgZm9yCitleGFtcGxlIGluIHRoZSBjYXNlIG9mIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9uKSwgb3IgdG8gYSBwYXJ0aWN1bGFyIGRlY2xhcmF0b3IKK3dpdGhpbiBhIGRlY2xhcmF0aW9uLiAgV2hlcmUgYW4KK2F0dHJpYnV0ZSBzcGVjaWZpZXIgaXMgYXBwbGllZCB0byBhIHBhcmFtZXRlciBkZWNsYXJlZCBhcyBhIGZ1bmN0aW9uIG9yCithbiBhcnJheSwgaXQgc2hvdWxkIGFwcGx5IHRvIHRoZSBmdW5jdGlvbiBvciBhcnJheSByYXRoZXIgdGhhbiB0aGUKK3BvaW50ZXIgdG8gd2hpY2ggdGhlIHBhcmFtZXRlciBpcyBpbXBsaWNpdGx5IGNvbnZlcnRlZCwgYnV0IHRoaXMgaXMgbm90Cit5ZXQgY29ycmVjdGx5IGltcGxlbWVudGVkLgorCisgPHA+QW55IGxpc3Qgb2Ygc3BlY2lmaWVycyBhbmQgcXVhbGlmaWVycyBhdCB0aGUgc3RhcnQgb2YgYSBkZWNsYXJhdGlvbiBtYXkKK2NvbnRhaW4gYXR0cmlidXRlIHNwZWNpZmllcnMsIHdoZXRoZXIgb3Igbm90IHN1Y2ggYSBsaXN0IG1heSBpbiB0aGF0Citjb250ZXh0IGNvbnRhaW4gc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXJzLiAgKFNvbWUgYXR0cmlidXRlcywgaG93ZXZlciwKK2FyZSBlc3NlbnRpYWxseSBpbiB0aGUgbmF0dXJlIG9mIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVycywgYW5kIG9ubHkgbWFrZQorc2Vuc2Ugd2hlcmUgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXJzIG1heSBiZSB1c2VkOyBmb3IgZXhhbXBsZSwKKzxjb2RlPnNlY3Rpb248L2NvZGU+LikgIFRoZXJlIGlzIG9uZSBuZWNlc3NhcnkgbGltaXRhdGlvbiB0byB0aGlzIHN5bnRheDogdGhlCitmaXJzdCBvbGQtc3R5bGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBjYW5ub3QKK2JlZ2luIHdpdGggYW4gYXR0cmlidXRlIHNwZWNpZmllciwgYmVjYXVzZSBzdWNoIGFuIGF0dHJpYnV0ZSBhcHBsaWVzIHRvCit0aGUgZnVuY3Rpb24gaW5zdGVhZCBieSBzeW50YXggZGVzY3JpYmVkIGJlbG93ICh3aGljaCwgaG93ZXZlciwgaXMgbm90Cit5ZXQgaW1wbGVtZW50ZWQgaW4gdGhpcyBjYXNlKS4gIEluIHNvbWUgb3RoZXIgY2FzZXMsIGF0dHJpYnV0ZQorc3BlY2lmaWVycyBhcmUgcGVybWl0dGVkIGJ5IHRoaXMgZ3JhbW1hciBidXQgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlCitjb21waWxlci4gIEFsbCBhdHRyaWJ1dGUgc3BlY2lmaWVycyBpbiB0aGlzIHBsYWNlIHJlbGF0ZSB0byB0aGUKK2RlY2xhcmF0aW9uIGFzIGEgd2hvbGUuICBJbiB0aGUgb2Jzb2xlc2NlbnQgdXNhZ2Ugd2hlcmUgYSB0eXBlIG9mCis8Y29kZT5pbnQ8L2NvZGU+IGlzIGltcGxpZWQgYnkgdGhlIGFic2VuY2Ugb2YgdHlwZSBzcGVjaWZpZXJzLCBzdWNoIGEgbGlzdCBvZgorc3BlY2lmaWVycyBhbmQgcXVhbGlmaWVycyBtYXkgYmUgYW4gYXR0cmlidXRlIHNwZWNpZmllciBsaXN0IHdpdGggbm8KK290aGVyIHNwZWNpZmllcnMgb3IgcXVhbGlmaWVycy4KKworIDxwPkF0IHByZXNlbnQsIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaW4gYSBmdW5jdGlvbiBwcm90b3R5cGUgbXVzdCBoYXZlIHNvbWUKK3R5cGUgc3BlY2lmaWVyIHRoYXQgaXMgbm90IGFuIGF0dHJpYnV0ZSBzcGVjaWZpZXI7IHRoaXMgcmVzb2x2ZXMgYW4KK2FtYmlndWl0eSBpbiB0aGUgaW50ZXJwcmV0YXRpb24gb2YgPGNvZGU+dm9pZCBmKGludAorKF9fYXR0cmlidXRlX18oKGZvbykpIHgpKTwvY29kZT4sIGJ1dCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4gIEF0IHByZXNlbnQsIGlmCit0aGUgcGFyZW50aGVzZXMgb2YgYSBmdW5jdGlvbiBkZWNsYXJhdG9yIGNvbnRhaW4gb25seSBhdHRyaWJ1dGVzIHRoZW4KK3Rob3NlIGF0dHJpYnV0ZXMgYXJlIGlnbm9yZWQsIHJhdGhlciB0aGFuIHlpZWxkaW5nIGFuIGVycm9yIG9yIHdhcm5pbmcKK29yIGltcGx5aW5nIGEgc2luZ2xlIHBhcmFtZXRlciBvZiB0eXBlIGludCwgYnV0IHRoaXMgaXMgc3ViamVjdCB0bworY2hhbmdlLgorCisgPHA+QW4gYXR0cmlidXRlIHNwZWNpZmllciBsaXN0IG1heSBhcHBlYXIgaW1tZWRpYXRlbHkgYmVmb3JlIGEgZGVjbGFyYXRvcgorKG90aGVyIHRoYW4gdGhlIGZpcnN0KSBpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlY2xhcmF0b3JzIGluIGEKK2RlY2xhcmF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgaWRlbnRpZmllciB1c2luZyBhIHNpbmdsZSBsaXN0IG9mCitzcGVjaWZpZXJzIGFuZCBxdWFsaWZpZXJzLiAgU3VjaCBhdHRyaWJ1dGUgc3BlY2lmaWVycyBhcHBseQorb25seSB0byB0aGUgaWRlbnRpZmllciBiZWZvcmUgd2hvc2UgZGVjbGFyYXRvciB0aGV5IGFwcGVhci4gIEZvcgorZXhhbXBsZSwgaW4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgdm9pZCBkMCAodm9pZCksCisgICAgICAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpIGQxIChjb25zdCBjaGFyICosIC4uLiksCisgICAgICAgICAgZDIgKHZvaWQpCis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPnRoZSA8Y29kZT5ub3JldHVybjwvY29kZT4gYXR0cmlidXRlIGFwcGxpZXMgdG8gYWxsIHRoZSBmdW5jdGlvbnMKK2RlY2xhcmVkOyB0aGUgPGNvZGU+Zm9ybWF0PC9jb2RlPiBhdHRyaWJ1dGUgb25seSBhcHBsaWVzIHRvIDxjb2RlPmQxPC9jb2RlPi4KKworIDxwPkFuIGF0dHJpYnV0ZSBzcGVjaWZpZXIgbGlzdCBtYXkgYXBwZWFyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY29tbWEsCis8Y29kZT49PC9jb2RlPiBvciBzZW1pY29sb24gdGVybWluYXRpbmcgdGhlIGRlY2xhcmF0aW9uIG9mIGFuIGlkZW50aWZpZXIgb3RoZXIKK3RoYW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgU3VjaCBhdHRyaWJ1dGUgc3BlY2lmaWVycyBhcHBseQordG8gdGhlIGRlY2xhcmVkIG9iamVjdCBvciBmdW5jdGlvbi4gIFdoZXJlIGFuCithc3NlbWJsZXIgbmFtZSBmb3IgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCAoc2VlIDxhIGhyZWY9IkFzbS1MYWJlbHMuaHRtbCNBc20tTGFiZWxzIj5Bc20gTGFiZWxzPC9hPiksIHRoZSBhdHRyaWJ1dGUgbXVzdCBmb2xsb3cgdGhlIDxjb2RlPmFzbTwvY29kZT4KK3NwZWNpZmljYXRpb24uCisKKyA8cD5BbiBhdHRyaWJ1dGUgc3BlY2lmaWVyIGxpc3QgbWF5LCBpbiBmdXR1cmUsIGJlIHBlcm1pdHRlZCB0byBhcHBlYXIgYWZ0ZXIKK3RoZSBkZWNsYXJhdG9yIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiAoYmVmb3JlIGFueSBvbGQtc3R5bGUgcGFyYW1ldGVyCitkZWNsYXJhdGlvbnMgb3IgdGhlIGZ1bmN0aW9uIGJvZHkpLgorCisgPHA+QXR0cmlidXRlIHNwZWNpZmllcnMgbWF5IGJlIG1peGVkIHdpdGggdHlwZSBxdWFsaWZpZXJzIGFwcGVhcmluZyBpbnNpZGUKK3RoZSA8Y29kZT5bXTwvY29kZT4gb2YgYSBwYXJhbWV0ZXIgYXJyYXkgZGVjbGFyYXRvciwgaW4gdGhlIEM5OSBjb25zdHJ1Y3QgYnkKK3doaWNoIHN1Y2ggcXVhbGlmaWVycyBhcmUgYXBwbGllZCB0byB0aGUgcG9pbnRlciB0byB3aGljaCB0aGUgYXJyYXkgaXMKK2ltcGxpY2l0bHkgY29udmVydGVkLiAgU3VjaCBhdHRyaWJ1dGUgc3BlY2lmaWVycyBhcHBseSB0byB0aGUgcG9pbnRlciwKK25vdCB0byB0aGUgYXJyYXksIGJ1dCBhdCBwcmVzZW50IHRoaXMgaXMgbm90IGltcGxlbWVudGVkIGFuZCB0aGV5IGFyZQoraWdub3JlZC4KKworIDxwPkFuIGF0dHJpYnV0ZSBzcGVjaWZpZXIgbGlzdCBtYXkgYXBwZWFyIGF0IHRoZSBzdGFydCBvZiBhIG5lc3RlZAorZGVjbGFyYXRvci4gIEF0IHByZXNlbnQsIHRoZXJlIGFyZSBzb21lIGxpbWl0YXRpb25zIGluIHRoaXMgdXNhZ2U6IHRoZQorYXR0cmlidXRlcyBjb3JyZWN0bHkgYXBwbHkgdG8gdGhlIGRlY2xhcmF0b3IsIGJ1dCBmb3IgbW9zdCBpbmRpdmlkdWFsCithdHRyaWJ1dGVzIHRoZSBzZW1hbnRpY3MgdGhpcyBpbXBsaWVzIGFyZSBub3QgaW1wbGVtZW50ZWQuIAorV2hlbiBhdHRyaWJ1dGUgc3BlY2lmaWVycyBmb2xsb3cgdGhlIDxjb2RlPio8L2NvZGU+IG9mIGEgcG9pbnRlcgorZGVjbGFyYXRvciwgdGhleSBtYXkgYmUgbWl4ZWQgd2l0aCBhbnkgdHlwZSBxdWFsaWZpZXJzIHByZXNlbnQuIAorVGhlIGZvbGxvd2luZyBkZXNjcmliZXMgdGhlIGZvcm1hbCBzZW1hbnRpY3Mgb2YgdGhpcyBzeW50YXguICBJdCBtYWtlcyB0aGUKK21vc3Qgc2Vuc2UgaWYgeW91IGFyZSBmYW1pbGlhciB3aXRoIHRoZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZgorZGVjbGFyYXRvcnMgaW4gdGhlIElTTyBDIHN0YW5kYXJkLgorCisgPHA+Q29uc2lkZXIgKGFzIGluIEM5OSBzdWJjbGF1c2UgNi43LjUgcGFyYWdyYXBoIDQpIGEgZGVjbGFyYXRpb24gPGNvZGU+VAorRDE8L2NvZGU+LCB3aGVyZSA8Y29kZT5UPC9jb2RlPiBjb250YWlucyBkZWNsYXJhdGlvbiBzcGVjaWZpZXJzIHRoYXQgc3BlY2lmeSBhIHR5cGUKKzx2YXI+VHlwZTwvdmFyPiAoc3VjaCBhcyA8Y29kZT5pbnQ8L2NvZGU+KSBhbmQgPGNvZGU+RDE8L2NvZGU+IGlzIGEgZGVjbGFyYXRvciB0aGF0Citjb250YWlucyBhbiBpZGVudGlmaWVyIDx2YXI+aWRlbnQ8L3Zhcj4uICBUaGUgdHlwZSBzcGVjaWZpZWQgZm9yIDx2YXI+aWRlbnQ8L3Zhcj4KK2ZvciBkZXJpdmVkIGRlY2xhcmF0b3JzIHdob3NlIHR5cGUgZG9lcyBub3QgaW5jbHVkZSBhbiBhdHRyaWJ1dGUKK3NwZWNpZmllciBpcyBhcyBpbiB0aGUgSVNPIEMgc3RhbmRhcmQuCisKKyA8cD5JZiA8Y29kZT5EMTwvY29kZT4gaGFzIHRoZSBmb3JtIDxjb2RlPiggPC9jb2RlPjx2YXI+YXR0cmlidXRlLXNwZWNpZmllci1saXN0PC92YXI+PGNvZGU+IEQgKTwvY29kZT4sCithbmQgdGhlIGRlY2xhcmF0aW9uIDxjb2RlPlQgRDwvY29kZT4gc3BlY2lmaWVzIHRoZSB0eXBlCismbGRxdW87PHZhcj5kZXJpdmVkLWRlY2xhcmF0b3ItdHlwZS1saXN0PC92YXI+IDx2YXI+VHlwZTwvdmFyPiZyZHF1bzsgZm9yIDx2YXI+aWRlbnQ8L3Zhcj4sIHRoZW4KKzxjb2RlPlQgRDE8L2NvZGU+IHNwZWNpZmllcyB0aGUgdHlwZSAmbGRxdW87PHZhcj5kZXJpdmVkLWRlY2xhcmF0b3ItdHlwZS1saXN0PC92YXI+Cis8dmFyPmF0dHJpYnV0ZS1zcGVjaWZpZXItbGlzdDwvdmFyPiA8dmFyPlR5cGU8L3Zhcj4mcmRxdW87IGZvciA8dmFyPmlkZW50PC92YXI+LgorCisgPHA+SWYgPGNvZGU+RDE8L2NvZGU+IGhhcyB0aGUgZm9ybSA8Y29kZT4qCis8L2NvZGU+PHZhcj50eXBlLXF1YWxpZmllci1hbmQtYXR0cmlidXRlLXNwZWNpZmllci1saXN0PC92YXI+PGNvZGU+IEQ8L2NvZGU+LCBhbmQgdGhlCitkZWNsYXJhdGlvbiA8Y29kZT5UIEQ8L2NvZGU+IHNwZWNpZmllcyB0aGUgdHlwZQorJmxkcXVvOzx2YXI+ZGVyaXZlZC1kZWNsYXJhdG9yLXR5cGUtbGlzdDwvdmFyPiA8dmFyPlR5cGU8L3Zhcj4mcmRxdW87IGZvciA8dmFyPmlkZW50PC92YXI+LCB0aGVuCis8Y29kZT5UIEQxPC9jb2RlPiBzcGVjaWZpZXMgdGhlIHR5cGUgJmxkcXVvOzx2YXI+ZGVyaXZlZC1kZWNsYXJhdG9yLXR5cGUtbGlzdDwvdmFyPgorPHZhcj50eXBlLXF1YWxpZmllci1hbmQtYXR0cmlidXRlLXNwZWNpZmllci1saXN0PC92YXI+IHBvaW50ZXIgdG8gPHZhcj5UeXBlPC92YXI+JnJkcXVvOyBmb3IKKzx2YXI+aWRlbnQ8L3Zhcj4uCisKKyA8cD5Gb3IgZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHZvaWQgKF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgKioqKmYpICh2b2lkKTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+c3BlY2lmaWVzIHRoZSB0eXBlICZsZHF1bztwb2ludGVyIHRvIHBvaW50ZXIgdG8gcG9pbnRlciB0byBwb2ludGVyIHRvCitub24tcmV0dXJuaW5nIGZ1bmN0aW9uIHJldHVybmluZyA8Y29kZT52b2lkPC9jb2RlPiZyZHF1bzsuICBBcyBhbm90aGVyIGV4YW1wbGUsCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBjaGFyICpfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgKmY7Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPnNwZWNpZmllcyB0aGUgdHlwZSAmbGRxdW87cG9pbnRlciB0byA4LWJ5dGUtYWxpZ25lZCBwb2ludGVyIHRvIDxjb2RlPmNoYXI8L2NvZGU+JnJkcXVvOy4gCitOb3RlIGFnYWluIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIHdpdGggbW9zdCBhdHRyaWJ1dGVzOyBmb3IgZXhhbXBsZSwKK3RoZSB1c2FnZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFsaWduZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9yZXR1cm48L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXR0cmlidXRlcyBnaXZlbiBhYm92ZQoraXMgbm90IHlldCBzdXBwb3J0ZWQuCisKKyA8cD5Gb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGNvZGUgd3JpdHRlbiBmb3IgY29tcGlsZXIgdmVyc2lvbnMgdGhhdAorZGlkIG5vdCBpbXBsZW1lbnQgYXR0cmlidXRlcyBvbiBuZXN0ZWQgZGVjbGFyYXRvcnMsIHNvbWUgbGF4aXR5IGlzCithbGxvd2VkIGluIHRoZSBwbGFjaW5nIG9mIGF0dHJpYnV0ZXMuICBJZiBhbiBhdHRyaWJ1dGUgdGhhdCBvbmx5IGFwcGxpZXMKK3RvIHR5cGVzIGlzIGFwcGxpZWQgdG8gYSBkZWNsYXJhdGlvbiwgaXQgaXMgdHJlYXRlZCBhcyBhcHBseWluZyB0bwordGhlIHR5cGUgb2YgdGhhdCBkZWNsYXJhdGlvbi4gIElmIGFuIGF0dHJpYnV0ZSB0aGF0IG9ubHkgYXBwbGllcyB0bworZGVjbGFyYXRpb25zIGlzIGFwcGxpZWQgdG8gdGhlIHR5cGUgb2YgYSBkZWNsYXJhdGlvbiwgaXQgaXMgdHJlYXRlZAorYXMgYXBwbHlpbmcgdG8gdGhhdCBkZWNsYXJhdGlvbjsgYW5kLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGNvZGUKK3BsYWNpbmcgdGhlIGF0dHJpYnV0ZXMgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBpZGVudGlmaWVyIGRlY2xhcmVkLCBzdWNoCithbiBhdHRyaWJ1dGUgYXBwbGllZCB0byBhIGZ1bmN0aW9uIHJldHVybiB0eXBlIGlzIHRyZWF0ZWQgYXMKK2FwcGx5aW5nIHRvIHRoZSBmdW5jdGlvbiB0eXBlLCBhbmQgc3VjaCBhbiBhdHRyaWJ1dGUgYXBwbGllZCB0byBhbiBhcnJheQorZWxlbWVudCB0eXBlIGlzIHRyZWF0ZWQgYXMgYXBwbHlpbmcgdG8gdGhlIGFycmF5IHR5cGUuICBJZiBhbgorYXR0cmlidXRlIHRoYXQgb25seSBhcHBsaWVzIHRvIGZ1bmN0aW9uIHR5cGVzIGlzIGFwcGxpZWQgdG8gYQorcG9pbnRlci10by1mdW5jdGlvbiB0eXBlLCBpdCBpcyB0cmVhdGVkIGFzIGFwcGx5aW5nIHRvIHRoZSBwb2ludGVyCit0YXJnZXQgdHlwZTsgaWYgc3VjaCBhbiBhdHRyaWJ1dGUgaXMgYXBwbGllZCB0byBhIGZ1bmN0aW9uIHJldHVybiB0eXBlCit0aGF0IGlzIG5vdCBhIHBvaW50ZXItdG8tZnVuY3Rpb24gdHlwZSwgaXQgaXMgdHJlYXRlZCBhcyBhcHBseWluZwordG8gdGhlIGZ1bmN0aW9uIHR5cGUuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0JhY2t3YXJkcy1Db21wYXRpYmlsaXR5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0JhY2t3YXJkcy1Db21wYXRpYmlsaXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY2MTFhMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQmFja3dhcmRzLUNvbXBhdGliaWxpdHkuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CYWNrd2FyZHMgQ29tcGF0aWJpbGl0eSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyIgdGl0bGU9IkMrKyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGVwcmVjYXRlZC1GZWF0dXJlcy5odG1sI0RlcHJlY2F0ZWQtRmVhdHVyZXMiIHRpdGxlPSJEZXByZWNhdGVkIEZlYXR1cmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJhY2t3YXJkcy1Db21wYXRpYmlsaXR5Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRGVwcmVjYXRlZC1GZWF0dXJlcy5odG1sI0RlcHJlY2F0ZWQtRmVhdHVyZXMiPkRlcHJlY2F0ZWQgRmVhdHVyZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjEzIEJhY2t3YXJkcyBDb21wYXRpYmlsaXR5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQmFja3dhcmRzLUNvbXBhdGliaWxpdHktMzUyOCI+PC9hPjxhIG5hbWU9ImluZGV4LUFSTS1fMDA1YkFubm90YXRlZC1DXzAwMmJfMDAyYi1SZWZlcmVuY2UtTWFudWFsXzAwNWQtMzUyOSI+PC9hPgorTm93IHRoYXQgdGhlcmUgaXMgYSBkZWZpbml0aXZlIElTTyBzdGFuZGFyZCBDKyssIEcrKyBoYXMgYSBzcGVjaWZpY2F0aW9uCit0byBhZGhlcmUgdG8uICBUaGUgQysrIGxhbmd1YWdlIGV2b2x2ZWQgb3ZlciB0aW1lLCBhbmQgZmVhdHVyZXMgdGhhdAordXNlZCB0byBiZSBhY2NlcHRhYmxlIGluIHByZXZpb3VzIGRyYWZ0cyBvZiB0aGUgc3RhbmRhcmQsIHN1Y2ggYXMgdGhlIEFSTQorW0Fubm90YXRlZCBDKysgUmVmZXJlbmNlIE1hbnVhbF0sIGFyZSBubyBsb25nZXIgYWNjZXB0ZWQuICBJbiBvcmRlciB0byBhbGxvdworY29tcGlsYXRpb24gb2YgQysrIHdyaXR0ZW4gdG8gc3VjaCBkcmFmdHMsIEcrKyBjb250YWlucyBzb21lIGJhY2t3YXJkcworY29tcGF0aWJpbGl0aWVzLiAgPGVtPkFsbCBzdWNoIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZlYXR1cmVzIGFyZQorbGlhYmxlIHRvIGRpc2FwcGVhciBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgRysrLjwvZW0+IFRoZXkgc2hvdWxkIGJlIGNvbnNpZGVyZWQKK2RlcHJlY2F0ZWQuICAgU2VlIDxhIGhyZWY9IkRlcHJlY2F0ZWQtRmVhdHVyZXMuaHRtbCNEZXByZWNhdGVkLUZlYXR1cmVzIj5EZXByZWNhdGVkIEZlYXR1cmVzPC9hPi4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+Rm9yIHNjb3BlPC9jb2RlPjxkZD5JZiBhIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGF0IGZvciBzY29wZSwgaXQgdXNlZCB0byByZW1haW4gaW4gc2NvcGUgdW50aWwKK3RoZSBlbmQgb2YgdGhlIHNjb3BlIHRoYXQgY29udGFpbmVkIHRoZSBmb3Igc3RhdGVtZW50IChyYXRoZXIgdGhhbiBqdXN0Cit3aXRoaW4gdGhlIGZvciBzY29wZSkuICBHKysgcmV0YWlucyB0aGlzLCBidXQgaXNzdWVzIGEgd2FybmluZywgaWYgc3VjaCBhCit2YXJpYWJsZSBpcyBhY2Nlc3NlZCBvdXRzaWRlIHRoZSBmb3Igc2NvcGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5JbXBsaWNpdCBDIGxhbmd1YWdlPC9jb2RlPjxkZD5PbGQgQyBzeXN0ZW0gaGVhZGVyIGZpbGVzIGRpZCBub3QgY29udGFpbiBhbiA8Y29kZT5leHRlcm4gIkMiIHsuLi59PC9jb2RlPgorc2NvcGUgdG8gc2V0IHRoZSBsYW5ndWFnZS4gIE9uIHN1Y2ggc3lzdGVtcywgYWxsIGhlYWRlciBmaWxlcyBhcmUKK2ltcGxpY2l0bHkgc2NvcGVkIGluc2lkZSBhIEMgbGFuZ3VhZ2Ugc2NvcGUuICBBbHNvLCBhbiBlbXB0eSBwcm90b3R5cGUKKzxjb2RlPigpPC9jb2RlPiBpcyB0cmVhdGVkIGFzIGFuIHVuc3BlY2lmaWVkIG51bWJlciBvZiBhcmd1bWVudHMsIHJhdGhlcgordGhhbiBubyBhcmd1bWVudHMsIGFzIEMrKyBkZW1hbmRzLiAKKzwvZGw+CisKKzwhLS0gQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdDQyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgZ2NjLnRleGkuIC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQmluYXJ5LWNvbnN0YW50cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9CaW5hcnktY29uc3RhbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2Y2YzNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQmluYXJ5LWNvbnN0YW50cy5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJpbmFyeSBjb25zdGFudHMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVGhyZWFkXzAwMmRMb2NhbC5odG1sI1RocmVhZF8wMDJkTG9jYWwiIHRpdGxlPSJUaHJlYWQtTG9jYWwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQmluYXJ5LWNvbnN0YW50cyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIj5UaHJlYWQtTG9jYWw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNjEgQmluYXJ5IGNvbnN0YW50cyB1c2luZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmVmaXg8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1CaW5hcnktY29uc3RhbnRzLXVzaW5nLXRoZS1fMDA0MHNhbXBfMDA3YjBiXzAwN2QtcHJlZml4LTM0OTEiPjwvYT4KK0ludGVnZXIgY29uc3RhbnRzIGNhbiBiZSB3cml0dGVuIGFzIGJpbmFyeSBjb25zdGFudHMsIGNvbnNpc3Rpbmcgb2YgYQorc2VxdWVuY2Ugb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlnaXRzLCBwcmVmaXhlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjBiPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjBCPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluIGVudmlyb25tZW50cyB0aGF0IG9wZXJhdGUgYQorbG90IG9uIHRoZSBiaXQgbGV2ZWwgKGxpa2UgbWljcm9jb250cm9sbGVycykuCisKKyA8cD5UaGUgZm9sbG93aW5nIHN0YXRlbWVudHMgYXJlIGlkZW50aWNhbDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGkgPSAgICAgICA0MjsKKyAgICAgaSA9ICAgICAweDJhOworICAgICBpID0gICAgICAwNTI7CisgICAgIGkgPSAwYjEwMTAxMDsKKzwvcHJlPgorIDxwPlRoZSB0eXBlIG9mIHRoZXNlIGNvbnN0YW50cyBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIGZvciBvY3RhbCBvcgoraGV4YWRlY2ltYWwgaW50ZWdlciBjb25zdGFudHMsIHNvIHN1ZmZpeGVzIGxpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2NhbiBiZSBhcHBsaWVkLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9CbGFja2Zpbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0JsYWNrZmluLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThiMGZkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9CbGFja2Zpbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QmxhY2tmaW4gQnVpbHQtaW4gRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyIgdGl0bGU9IlRhcmdldCBCdWlsdGlucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFWUi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJBVlIgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJGUi1WIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCbGFja2Zpbi1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IkJsYWNrZmluLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkZSLVYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNBVlItQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+QVZSIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni41IEJsYWNrZmluIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPkN1cnJlbnRseSwgdGhlcmUgYXJlIHR3byBCbGFja2Zpbi1zcGVjaWZpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBUaGVzZSBhcmUKK3VzZWQgZm9yIGdlbmVyYXRpbmcgPGNvZGU+Q1NZTkM8L2NvZGU+IGFuZCA8Y29kZT5TU1lOQzwvY29kZT4gbWFjaGluZSBpbnNucyB3aXRob3V0Cit1c2luZyBpbmxpbmUgYXNzZW1ibHk7IGJ5IHVzaW5nIHRoZXNlIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGUgY29tcGlsZXIgY2FuCithdXRvbWF0aWNhbGx5IGFkZCB3b3JrYXJvdW5kcyBmb3IgaGFyZHdhcmUgZXJyYXRhIGludm9sdmluZyB0aGVzZQoraW5zdHJ1Y3Rpb25zLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBuYW1lZCBhcyBmb2xsb3dzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdm9pZCBfX2J1aWx0aW5fYmZpbl9jc3luYyAodm9pZCkKKyAgICAgdm9pZCBfX2J1aWx0aW5fYmZpbl9zc3luYyAodm9pZCkKKzwvcHJlPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQmxhY2tmaW4tT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9CbGFja2Zpbi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyZGYyZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQmxhY2tmaW4tT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjA3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CbGFja2ZpbiBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiIHRpdGxlPSJBVlIgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkM2WC1PcHRpb25zLmh0bWwjQzZYLU9wdGlvbnMiIHRpdGxlPSJDNlggT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCbGFja2Zpbi1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkM2WC1PcHRpb25zLmh0bWwjQzZYLU9wdGlvbnMiPkM2WCBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuNSBCbGFja2ZpbiBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtQmxhY2tmaW4tT3B0aW9ucy0xMTY4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5jcHU8L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PGNvZGU+LTwvY29kZT48dmFyPnNpcmV2aXNpb248L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LW1jcHVfMDAzZC0xMTY5Ij48L2E+U3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgQmxhY2tmaW4gcHJvY2Vzc29yLiAgQ3VycmVudGx5LCA8dmFyPmNwdTwvdmFyPgorY2FuIGJlIG9uZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTEyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTE0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTE2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTE4PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjUyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjUyMzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjUyNDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjUyNTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjUyNjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1Mjc8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1MzE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1MzI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1MzM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTM0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTM2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTM3PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTM4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTM5PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjU0Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjU0NDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjU0Nzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjU0ODwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjU0OTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1NDJtPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTQ0bTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjU0N208L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1NDhtPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmNTQ5bTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1NjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1OTI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+VGhlIG9wdGlvbmFsIDx2YXI+c2lyZXZpc2lvbjwvdmFyPiBzcGVjaWZpZXMgdGhlIHNpbGljb24gcmV2aXNpb24gb2YgdGhlIHRhcmdldAorQmxhY2tmaW4gcHJvY2Vzc29yLiAgQW55IHdvcmthcm91bmRzIGF2YWlsYWJsZSBmb3IgdGhlIHRhcmdldGVkIHNpbGljb24gcmV2aXNpb24KK2FyZSBlbmFibGVkLiAgSWYgPHZhcj5zaXJldmlzaW9uPC92YXI+IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgbm8gd29ya2Fyb3VuZHMgYXJlIGVuYWJsZWQuIAorSWYgPHZhcj5zaXJldmlzaW9uPC92YXI+IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YW55PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbGwgd29ya2Fyb3VuZHMgZm9yIHRoZSB0YXJnZXRlZCBwcm9jZXNzb3IKK2FyZSBlbmFibGVkLiAgVGhlIDxjb2RlPl9fU0lMSUNPTl9SRVZJU0lPTl9fPC9jb2RlPiBtYWNybyBpcyBkZWZpbmVkIHRvIHR3bworaGV4YWRlY2ltYWwgZGlnaXRzIHJlcHJlc2VudGluZyB0aGUgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMgaW4gdGhlIHNpbGljb24KK3JldmlzaW9uLiAgSWYgPHZhcj5zaXJldmlzaW9uPC92YXI+IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlIDxjb2RlPl9fU0lMSUNPTl9SRVZJU0lPTl9fPC9jb2RlPgoraXMgbm90IGRlZmluZWQuICBJZiA8dmFyPnNpcmV2aXNpb248L3Zhcj4gaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbnk8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZQorPGNvZGU+X19TSUxJQ09OX1JFVklTSU9OX188L2NvZGU+IGlzIGRlZmluZWQgdG8gYmUgPGNvZGU+MHhmZmZmPC9jb2RlPi4gCitJZiB0aGlzIG9wdGlvbmFsIDx2YXI+c2lyZXZpc2lvbjwvdmFyPiBpcyBub3QgdXNlZCwgR0NDIGFzc3VtZXMgdGhlIGxhdGVzdCBrbm93bgorc2lsaWNvbiByZXZpc2lvbiBvZiB0aGUgdGFyZ2V0ZWQgQmxhY2tmaW4gcHJvY2Vzc29yLgorCisgICAgIDxwPkdDQyBkZWZpbmVzIGEgcHJlcHJvY2Vzc29yIG1hY3JvIGZvciB0aGUgc3BlY2lmaWVkIDx2YXI+Y3B1PC92YXI+LiAKK0ZvciB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZmluLWVsZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0b29sY2hhaW4sIHRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgaGFyZHdhcmUgQlNQCitwcm92aWRlZCBieSBsaWJnbG9zcyB0byBiZSBsaW5rZWQgaW4gaWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zaW08L3NwYW4+PC9zYW1wPiBpcyBub3QgZ2l2ZW4uCisKKyAgICAgPHA+V2l0aG91dCB0aGlzIG9wdGlvbiwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjUzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB1c2VkIGFzIHRoZSBwcm9jZXNzb3IgYnkgZGVmYXVsdC4KKworICAgICA8cD5Ob3RlIHRoYXQgc3VwcG9ydCBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZjU2MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBpbmNvbXBsZXRlLiAgRm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmY1NjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssCitvbmx5IHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gaXMgZGVmaW5lZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2ltPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2ltLTExNzAiPjwvYT5TcGVjaWZpZXMgdGhhdCB0aGUgcHJvZ3JhbSB3aWxsIGJlIHJ1biBvbiB0aGUgc2ltdWxhdG9yLiAgVGhpcyBjYXVzZXMKK3RoZSBzaW11bGF0b3IgQlNQIHByb3ZpZGVkIGJ5IGxpYmdsb3NzIHRvIGJlIGxpbmtlZCBpbi4gIFRoaXMgb3B0aW9uCitoYXMgZWZmZWN0IG9ubHkgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmZpbi1lbGY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG9vbGNoYWluLiAKK0NlcnRhaW4gb3RoZXIgb3B0aW9ucywgc3VjaCBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWlkLXNoYXJlZC1saWJyYXJ5PC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZkcGljPC9zcGFuPjwvc2FtcD4sIGltcGx5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc2ltPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW9taXQtbGVhZi1mcmFtZS1wb2ludGVyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tb21pdF8wMDJkbGVhZl8wMDJkZnJhbWVfMDAyZHBvaW50ZXItMTE3MSI+PC9hPkRvbid0IGtlZXAgdGhlIGZyYW1lIHBvaW50ZXIgaW4gYSByZWdpc3RlciBmb3IgbGVhZiBmdW5jdGlvbnMuICBUaGlzCithdm9pZHMgdGhlIGluc3RydWN0aW9ucyB0byBzYXZlLCBzZXQgdXAgYW5kIHJlc3RvcmUgZnJhbWUgcG9pbnRlcnMgYW5kCittYWtlcyBhbiBleHRyYSByZWdpc3RlciBhdmFpbGFibGUgaW4gbGVhZiBmdW5jdGlvbnMuICBUaGUgb3B0aW9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9taXQtZnJhbWUtcG9pbnRlcjwvc3Bhbj48L3NhbXA+IHJlbW92ZXMgdGhlIGZyYW1lIHBvaW50ZXIgZm9yIGFsbCBmdW5jdGlvbnMsCit3aGljaCBtaWdodCBtYWtlIGRlYnVnZ2luZyBoYXJkZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNwZWNsZC1hbm9tYWx5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc3BlY2xkXzAwMmRhbm9tYWx5LTExNzIiPjwvYT5XaGVuIGVuYWJsZWQsIHRoZSBjb21waWxlciBlbnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgbm90Citjb250YWluIHNwZWN1bGF0aXZlIGxvYWRzIGFmdGVyIGp1bXAgaW5zdHJ1Y3Rpb25zLiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkLAorPGNvZGU+X19XT1JLQVJPVU5EX1NQRUNVTEFUSVZFX0xPQURTPC9jb2RlPiBpcyBkZWZpbmVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1zcGVjbGQtYW5vbWFseTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzcGVjbGRfMDAyZGFub21hbHktMTE3MyI+PC9hPkRvbid0IGdlbmVyYXRlIGV4dHJhIGNvZGUgdG8gcHJldmVudCBzcGVjdWxhdGl2ZSBsb2FkcyBmcm9tIG9jY3VycmluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY3N5bmMtYW5vbWFseTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNzeW5jXzAwMmRhbm9tYWx5LTExNzQiPjwvYT5XaGVuIGVuYWJsZWQsIHRoZSBjb21waWxlciBlbnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgbm90Citjb250YWluIENTWU5DIG9yIFNTWU5DIGluc3RydWN0aW9ucyB0b28gc29vbiBhZnRlciBjb25kaXRpb25hbCBicmFuY2hlcy4gCitJZiB0aGlzIG9wdGlvbiBpcyB1c2VkLCA8Y29kZT5fX1dPUktBUk9VTkRfU1BFQ1VMQVRJVkVfU1lOQ1M8L2NvZGU+IGlzIGRlZmluZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWNzeW5jLWFub21hbHk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkY3N5bmNfMDAyZGFub21hbHktMTE3NSI+PC9hPkRvbid0IGdlbmVyYXRlIGV4dHJhIGNvZGUgdG8gcHJldmVudCBDU1lOQyBvciBTU1lOQyBpbnN0cnVjdGlvbnMgZnJvbQorb2NjdXJyaW5nIHRvbyBzb29uIGFmdGVyIGEgY29uZGl0aW9uYWwgYnJhbmNoLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1sb3ctNjRrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbG93XzAwMmQ2NGstMTE3NiI+PC9hPldoZW4gZW5hYmxlZCwgdGhlIGNvbXBpbGVyIGlzIGZyZWUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGtub3dsZWRnZSB0aGF0Cit0aGUgZW50aXJlIHByb2dyYW0gZml0cyBpbnRvIHRoZSBsb3cgNjRrIG9mIG1lbW9yeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tbG93LTY0azwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRsb3dfMDAyZDY0ay0xMTc3Ij48L2E+QXNzdW1lIHRoYXQgdGhlIHByb2dyYW0gaXMgYXJiaXRyYXJpbHkgbGFyZ2UuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdGFjay1jaGVjay1sMTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXN0YWNrXzAwMmRjaGVja18wMDJkbDEtMTE3OCI+PC9hPkRvIHN0YWNrIGNoZWNraW5nIHVzaW5nIGluZm9ybWF0aW9uIHBsYWNlZCBpbnRvIEwxIHNjcmF0Y2hwYWQgbWVtb3J5IGJ5IHRoZQordUNsaW51eCBrZXJuZWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlkLXNoYXJlZC1saWJyYXJ5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taWRfMDAyZHNoYXJlZF8wMDJkbGlicmFyeS0xMTc5Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMgdmlhIHRoZSBsaWJyYXJ5IElEIG1ldGhvZC4gCitUaGlzIGFsbG93cyBmb3IgZXhlY3V0ZSBpbiBwbGFjZSBhbmQgc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBlbnZpcm9ubWVudAord2l0aG91dCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiAgVGhpcyBvcHRpb24gaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZlBJQzwvc3Bhbj48L3NhbXA+LiAKK1dpdGggYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmaW4tZWxmPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRhcmdldCwgdGhpcyBvcHRpb24gaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNpbTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1pZC1zaGFyZWQtbGlicmFyeTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRpZF8wMDJkc2hhcmVkXzAwMmRsaWJyYXJ5LTExODAiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgZG9lc24ndCBhc3N1bWUgSUQtYmFzZWQgc2hhcmVkIGxpYnJhcmllcyBhcmUgYmVpbmcgdXNlZC4gCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1sZWFmLWlkLXNoYXJlZC1saWJyYXJ5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbGVhZl8wMDJkaWRfMDAyZHNoYXJlZF8wMDJkbGlicmFyeS0xMTgxIj48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMgdmlhIHRoZSBsaWJyYXJ5IElEIG1ldGhvZCwKK2J1dCBhc3N1bWVzIHRoYXQgdGhpcyBsaWJyYXJ5IG9yIGV4ZWN1dGFibGUgd29uJ3QgbGluayBhZ2FpbnN0IGFueSBvdGhlcgorSUQgc2hhcmVkIGxpYnJhcmllcy4gIFRoYXQgYWxsb3dzIHRoZSBjb21waWxlciB0byB1c2UgZmFzdGVyIGNvZGUgZm9yIGp1bXBzCithbmQgY2FsbHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWxlYWYtaWQtc2hhcmVkLWxpYnJhcnk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbGVhZl8wMDJkaWRfMDAyZHNoYXJlZF8wMDJkbGlicmFyeS0xMTgyIj48L2E+RG8gbm90IGFzc3VtZSB0aGF0IHRoZSBjb2RlIGJlaW5nIGNvbXBpbGVkIHdvbid0IGxpbmsgYWdhaW5zdCBhbnkgSUQgc2hhcmVkCitsaWJyYXJpZXMuICBTbG93ZXIgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIGp1bXAgYW5kIGNhbGwgaW5zbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNoYXJlZC1saWJyYXJ5LWlkPW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaGFyZWRfMDAyZGxpYnJhcnlfMDAyZGlkLTExODMiPjwvYT5TcGVjaWZpZXMgdGhlIGlkZW50aWZpY2F0aW9uIG51bWJlciBvZiB0aGUgSUQtYmFzZWQgc2hhcmVkIGxpYnJhcnkgYmVpbmcKK2NvbXBpbGVkLiAgU3BlY2lmeWluZyBhIHZhbHVlIG9mIDAgZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCBjb2RlOyBzcGVjaWZ5aW5nCitvdGhlciB2YWx1ZXMgZm9yY2VzIHRoZSBhbGxvY2F0aW9uIG9mIHRoYXQgbnVtYmVyIHRvIHRoZSBjdXJyZW50CitsaWJyYXJ5IGJ1dCBpcyBubyBtb3JlIHNwYWNlLSBvciB0aW1lLWVmZmljaWVudCB0aGFuIG9taXR0aW5nIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zZXAtZGF0YTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNlcF8wMDJkZGF0YS0xMTg0Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IGFsbG93cyB0aGUgZGF0YSBzZWdtZW50IHRvIGJlIGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQKK2FyZWEgb2YgbWVtb3J5IGZyb20gdGhlIHRleHQgc2VnbWVudC4gIFRoaXMgYWxsb3dzIGZvciBleGVjdXRlIGluIHBsYWNlIGluCithbiBlbnZpcm9ubWVudCB3aXRob3V0IHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQgYnkgZWxpbWluYXRpbmcgcmVsb2NhdGlvbnMKK2FnYWluc3QgdGhlIHRleHQgc2VjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tc2VwLWRhdGE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2VwXzAwMmRkYXRhLTExODUiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0IHRoZSBkYXRhIHNlZ21lbnQgZm9sbG93cyB0aGUgdGV4dCBzZWdtZW50LiAKK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmctY2FsbHM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbG9uZy1jYWxsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxvbmdfMDAyZGNhbGxzLTExODYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGxvbmdfMDAyZGNhbGxzLTExODciPjwvYT5UZWxscyB0aGUgY29tcGlsZXIgdG8gcGVyZm9ybSBmdW5jdGlvbiBjYWxscyBieSBmaXJzdCBsb2FkaW5nIHRoZQorYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gaW50byBhIHJlZ2lzdGVyIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBzdWJyb3V0aW5lCitjYWxsIG9uIHRoaXMgcmVnaXN0ZXIuICBUaGlzIHN3aXRjaCBpcyBuZWVkZWQgaWYgdGhlIHRhcmdldCBmdW5jdGlvbgorbGllcyBvdXRzaWRlIG9mIHRoZSAyNC1iaXQgYWRkcmVzc2luZyByYW5nZSBvZiB0aGUgb2Zmc2V0LWJhc2VkCit2ZXJzaW9uIG9mIHN1YnJvdXRpbmUgY2FsbCBpbnN0cnVjdGlvbi4KKworICAgICA8cD5UaGlzIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdC4gIFNwZWNpZnlpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tbG9uZy1jYWxsczwvc3Bhbj48L3NhbXA+IHJlc3RvcmVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiAgTm90ZSB0aGVzZQorc3dpdGNoZXMgaGF2ZSBubyBlZmZlY3Qgb24gaG93IHRoZSBjb21waWxlciBnZW5lcmF0ZXMgY29kZSB0byBoYW5kbGUKK2Z1bmN0aW9uIGNhbGxzIHZpYSBmdW5jdGlvbiBwb2ludGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZmFzdC1mcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZhc3RfMDAyZGZwLTExODgiPjwvYT5MaW5rIHdpdGggdGhlIGZhc3QgZmxvYXRpbmctcG9pbnQgbGlicmFyeS4gVGhpcyBsaWJyYXJ5IHJlbGF4ZXMgc29tZSBvZgordGhlIElFRUUgZmxvYXRpbmctcG9pbnQgc3RhbmRhcmQncyBydWxlcyBmb3IgY2hlY2tpbmcgaW5wdXRzIGFnYWluc3QKK05vdC1hLU51bWJlciAoTkFOKSwgaW4gdGhlIGludGVyZXN0IG9mIHBlcmZvcm1hbmNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pbmxpbmUtcGx0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW5saW5lXzAwMmRwbHQtMTE4OSI+PC9hPkVuYWJsZSBpbmxpbmluZyBvZiBQTFQgZW50cmllcyBpbiBmdW5jdGlvbiBjYWxscyB0byBmdW5jdGlvbnMgdGhhdCBhcmUKK25vdCBrbm93biB0byBiaW5kIGxvY2FsbHkuICBJdCBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mZHBpYzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tdWx0aWNvcmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tdWx0aWNvcmUtMTE5MCI+PC9hPkJ1aWxkIGEgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiBmb3IgbXVsdGljb3JlIEJsYWNrZmluIHByb2Nlc3NvcnMuIAorVGhpcyBvcHRpb24gY2F1c2VzIHByb3BlciBzdGFydCBmaWxlcyBhbmQgbGluayBzY3JpcHRzIHN1cHBvcnRpbmcKK211bHRpY29yZSB0byBiZSB1c2VkLCBhbmQgZGVmaW5lcyB0aGUgbWFjcm8gPGNvZGU+X19CRklOX01VTFRJQ09SRTwvY29kZT4uIAorSXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PWJmNTYxWy08L3NwYW4+PHZhcj5zaXJldmlzaW9uPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+XTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jb3JlYTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY29yZWI8L3NwYW4+PC9zYW1wPiwgd2hpY2gKK3NlbGVjdHMgdGhlIG9uZS1hcHBsaWNhdGlvbi1wZXItY29yZSBwcm9ncmFtbWluZyBtb2RlbC4gIFdpdGhvdXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY29yZWE8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNvcmViPC9zcGFuPjwvc2FtcD4sIHRoZSBzaW5nbGUtYXBwbGljYXRpb24vZHVhbC1jb3JlCitwcm9ncmFtbWluZyBtb2RlbCBpcyB1c2VkLiBJbiB0aGlzIG1vZGVsLCB0aGUgbWFpbiBmdW5jdGlvbiBvZiBDb3JlIEIKK3Nob3VsZCBiZSBuYW1lZCBhcyA8Y29kZT5jb3JlYl9tYWluPC9jb2RlPi4KKworICAgICA8cD5JZiB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZCwgdGhlIHNpbmdsZS1jb3JlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCittb2RlbCBpcyB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jb3JlYTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNvcmVhLTExOTEiPjwvYT5CdWlsZCBhIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gZm9yIENvcmUgQSBvZiBCRjU2MSB3aGVuIHVzaW5nCit0aGUgb25lLWFwcGxpY2F0aW9uLXBlci1jb3JlIHByb2dyYW1taW5nIG1vZGVsLiBQcm9wZXIgc3RhcnQgZmlsZXMKK2FuZCBsaW5rIHNjcmlwdHMgYXJlIHVzZWQgdG8gc3VwcG9ydCBDb3JlIEEsIGFuZCB0aGUgbWFjcm8KKzxjb2RlPl9fQkZJTl9DT1JFQTwvY29kZT4gaXMgZGVmaW5lZC4gCitUaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1tdWx0aWNvcmU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY29yZWI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jb3JlYi0xMTkyIj48L2E+QnVpbGQgYSBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIGZvciBDb3JlIEIgb2YgQkY1NjEgd2hlbiB1c2luZwordGhlIG9uZS1hcHBsaWNhdGlvbi1wZXItY29yZSBwcm9ncmFtbWluZyBtb2RlbC4gUHJvcGVyIHN0YXJ0IGZpbGVzCithbmQgbGluayBzY3JpcHRzIGFyZSB1c2VkIHRvIHN1cHBvcnQgQ29yZSBCLCBhbmQgdGhlIG1hY3JvCis8Y29kZT5fX0JGSU5fQ09SRUI8L2NvZGU+IGlzIGRlZmluZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgPGNvZGU+Y29yZWJfbWFpbjwvY29kZT4KK3Nob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgPGNvZGU+bWFpbjwvY29kZT4uIAorVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbXVsdGljb3JlPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNkcmFtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2RyYW0tMTE5MyI+PC9hPkJ1aWxkIGEgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiBmb3IgU0RSQU0uIFByb3BlciBzdGFydCBmaWxlcyBhbmQKK2xpbmsgc2NyaXB0cyBhcmUgdXNlZCB0byBwdXQgdGhlIGFwcGxpY2F0aW9uIGludG8gU0RSQU0sIGFuZCB0aGUgbWFjcm8KKzxjb2RlPl9fQkZJTl9TRFJBTTwvY29kZT4gaXMgZGVmaW5lZC4gCitUaGUgbG9hZGVyIHNob3VsZCBpbml0aWFsaXplIFNEUkFNIGJlZm9yZSBsb2FkaW5nIHRoZSBhcHBsaWNhdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taWNwbGI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pY3BsYi0xMTk0Ij48L2E+QXNzdW1lIHRoYXQgSUNQTEJzIGFyZSBlbmFibGVkIGF0IHJ1biB0aW1lLiAgVGhpcyBoYXMgYW4gZWZmZWN0IG9uIGNlcnRhaW4KK2Fub21hbHkgd29ya2Fyb3VuZHMuICBGb3IgTGludXggdGFyZ2V0cywgdGhlIGRlZmF1bHQgaXMgdG8gYXNzdW1lIElDUExCcworYXJlIGVuYWJsZWQ7IGZvciBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0aGUgZGVmYXVsdCBpcyBvZmYuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Cb3VuZC1tZW1iZXItZnVuY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhMTYwMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJvdW5kIG1lbWJlciBmdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiIHRpdGxlPSJDKysgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRlbXBsYXRlLUluc3RhbnRpYXRpb24uaHRtbCNUZW1wbGF0ZS1JbnN0YW50aWF0aW9uIiB0aXRsZT0iVGVtcGxhdGUgSW5zdGFudGlhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNfMDAyYl8wMDJiLUF0dHJpYnV0ZXMuaHRtbCNDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzIiB0aXRsZT0iQysrIEF0dHJpYnV0ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzLmh0bWwjQ18wMDJiXzAwMmItQXR0cmlidXRlcyI+QysrIEF0dHJpYnV0ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUZW1wbGF0ZS1JbnN0YW50aWF0aW9uLmh0bWwjVGVtcGxhdGUtSW5zdGFudGlhdGlvbiI+VGVtcGxhdGUgSW5zdGFudGlhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIj5DKysgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuNiBFeHRyYWN0aW5nIHRoZSBmdW5jdGlvbiBwb2ludGVyIGZyb20gYSBib3VuZCBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXBtZi0zNTIwIj48L2E+PGEgbmFtZT0iaW5kZXgtcG9pbnRlci10by1tZW1iZXItZnVuY3Rpb24tMzUyMSI+PC9hPjxhIG5hbWU9ImluZGV4LWJvdW5kLXBvaW50ZXItdG8tbWVtYmVyLWZ1bmN0aW9uLTM1MjIiPjwvYT4KK0luIEMrKywgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb25zIChQTUZzKSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB3aWRlCitwb2ludGVyIG9mIHNvcnRzIHRvIGhhbmRsZSBhbGwgdGhlIHBvc3NpYmxlIGNhbGwgbWVjaGFuaXNtczsgdGhlIFBNRgorbmVlZHMgdG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGFkanVzdCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50aGlzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHBvaW50ZXIsCithbmQgaWYgdGhlIGZ1bmN0aW9uIHBvaW50ZWQgdG8gaXMgdmlydHVhbCwgd2hlcmUgdG8gZmluZCB0aGUgdnRhYmxlLCBhbmQKK3doZXJlIGluIHRoZSB2dGFibGUgdG8gbG9vayBmb3IgdGhlIG1lbWJlciBmdW5jdGlvbi4gIElmIHlvdSBhcmUgdXNpbmcKK1BNRnMgaW4gYW4gaW5uZXIgbG9vcCwgeW91IHNob3VsZCByZWFsbHkgcmVjb25zaWRlciB0aGF0IGRlY2lzaW9uLiAgSWYKK3RoYXQgaXMgbm90IGFuIG9wdGlvbiwgeW91IGNhbiBleHRyYWN0IHRoZSBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0Cit3b3VsZCBiZSBjYWxsZWQgZm9yIGEgZ2l2ZW4gb2JqZWN0L1BNRiBwYWlyIGFuZCBjYWxsIGl0IGRpcmVjdGx5IGluc2lkZQordGhlIGlubmVyIGxvb3AsIHRvIHNhdmUgYSBiaXQgb2YgdGltZS4KKworIDxwPk5vdGUgdGhhdCB5b3Ugc3RpbGwgcGF5IHRoZSBwZW5hbHR5IGZvciB0aGUgY2FsbCB0aHJvdWdoIGEKK2Z1bmN0aW9uIHBvaW50ZXI7IG9uIG1vc3QgbW9kZXJuIGFyY2hpdGVjdHVyZXMsIHN1Y2ggYSBjYWxsIGRlZmVhdHMgdGhlCiticmFuY2ggcHJlZGljdGlvbiBmZWF0dXJlcyBvZiB0aGUgQ1BVLiAgVGhpcyBpcyBhbHNvIHRydWUgb2Ygbm9ybWFsCit2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxzLgorCisgPHA+VGhlIHN5bnRheCBmb3IgdGhpcyBleHRlbnNpb24gaXMKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGV4dGVybiBBIGE7CisgICAgIGV4dGVybiBpbnQgKEE6OipmcCkoKTsKKyAgICAgdHlwZWRlZiBpbnQgKCpmcHRyKShBICopOworICAgICAKKyAgICAgZnB0ciBwID0gKGZwdHIpKGEuKmZwKTsKKzwvcHJlPgorIDxwPkZvciBQTUYgY29uc3RhbnRzIChpLmUuIGV4cHJlc3Npb25zIG9mIHRoZSBmb3JtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JmFtcDtLbGFzc2U6Ok1lbWJlcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyksCitubyBvYmplY3QgaXMgbmVlZGVkIHRvIG9idGFpbiB0aGUgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24uICBUaGV5IGNhbiBiZQorY29udmVydGVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGRpcmVjdGx5OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZnB0ciBwMSA9IChmcHRyKSgmYW1wO0E6OmZvbyk7Cis8L3ByZT4KKyA8cD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHBtZl8wMDJkY29udmVyc2lvbnMtMzUyMyI+PC9hPllvdSBtdXN0IHNwZWNpZnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby1wbWYtY29udmVyc2lvbnM8L3NwYW4+PC9zYW1wPiB0byB1c2UgdGhpcyBleHRlbnNpb24uCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0J1Zy1Dcml0ZXJpYS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9CdWctQ3JpdGVyaWEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzJiYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9CdWctQ3JpdGVyaWEuaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QnVnIENyaXRlcmlhIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkJ1Z3MuaHRtbCNCdWdzIiB0aXRsZT0iQnVncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIiB0aXRsZT0iQnVnIFJlcG9ydGluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCdWctQ3JpdGVyaWEiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQnVnLVJlcG9ydGluZy5odG1sI0J1Zy1SZXBvcnRpbmciPkJ1ZyBSZXBvcnRpbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJCdWdzLmh0bWwjQnVncyI+QnVnczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEyLjEgSGF2ZSBZb3UgRm91bmQgYSBCdWc/PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYnVnLWNyaXRlcmlhLTM1OTQiPjwvYT4KK0lmIHlvdSBhcmUgbm90IHN1cmUgd2hldGhlciB5b3UgaGF2ZSBmb3VuZCBhIGJ1ZywgaGVyZSBhcmUgc29tZSBndWlkZWxpbmVzOgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZmF0YWwtc2lnbmFsLTM1OTUiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWNvcmUtZHVtcC0zNTk2Ij48L2E+Cis8dWw+PGxpPklmIHRoZSBjb21waWxlciBnZXRzIGEgZmF0YWwgc2lnbmFsLCBmb3IgYW55IGlucHV0IHdoYXRldmVyLCB0aGF0IGlzIGEKK2NvbXBpbGVyIGJ1Zy4gIFJlbGlhYmxlIGNvbXBpbGVycyBuZXZlciBjcmFzaC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1pbnZhbGlkLWFzc2VtYmx5LWNvZGUtMzU5NyI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VtYmx5LWNvZGVfMDAyYy1pbnZhbGlkLTM1OTgiPjwvYT48bGk+SWYgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGludmFsaWQgYXNzZW1ibHkgY29kZSwgZm9yIGFueSBpbnB1dCB3aGF0ZXZlcgorKGV4Y2VwdCBhbiA8Y29kZT5hc208L2NvZGU+IHN0YXRlbWVudCksIHRoYXQgaXMgYSBjb21waWxlciBidWcsIHVubGVzcyB0aGUKK2NvbXBpbGVyIHJlcG9ydHMgZXJyb3JzIChub3QganVzdCB3YXJuaW5ncykgd2hpY2ggd291bGQgb3JkaW5hcmlseQorcHJldmVudCB0aGUgYXNzZW1ibGVyIGZyb20gYmVpbmcgcnVuLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXVuZGVmaW5lZC1iZWhhdmlvci0zNTk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtdW5kZWZpbmVkLWZ1bmN0aW9uLXZhbHVlLTM2MDAiPjwvYT48YSBuYW1lPSJpbmRleC1pbmNyZW1lbnQtb3BlcmF0b3JzLTM2MDEiPjwvYT48bGk+SWYgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIHZhbGlkIGFzc2VtYmx5IGNvZGUgdGhhdCBkb2VzIG5vdCBjb3JyZWN0bHkKK2V4ZWN1dGUgdGhlIGlucHV0IHNvdXJjZSBjb2RlLCB0aGF0IGlzIGEgY29tcGlsZXIgYnVnLgorCisgICAgIDxwPkhvd2V2ZXIsIHlvdSBtdXN0IGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUsIGJlY2F1c2UgeW91IG1heSBoYXZlIGEKK3Byb2dyYW0gd2hvc2UgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLCB3aGljaCBoYXBwZW5lZCBieSBjaGFuY2UgdG8gZ2l2ZQordGhlIGRlc2lyZWQgcmVzdWx0cyB3aXRoIGFub3RoZXIgQyBvciBDKysgY29tcGlsZXIuCisKKyAgICAgPHA+Rm9yIGV4YW1wbGUsIGluIG1hbnkgbm9ub3B0aW1pemluZyBjb21waWxlcnMsIHlvdSBjYW4gd3JpdGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOworYXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZXR1cm4geDs8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdpdGggdGhlIHNhbWUKK3Jlc3VsdHMuICBCdXQgdGhlIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyB1bmRlZmluZWQgaWYgPGNvZGU+cmV0dXJuPC9jb2RlPgoraXMgb21pdHRlZDsgaXQgaXMgbm90IGEgYnVnIHdoZW4gR0NDIHByb2R1Y2VzIGRpZmZlcmVudCByZXN1bHRzLgorCisgICAgIDxwPlByb2JsZW1zIG9mdGVuIHJlc3VsdCBmcm9tIGV4cHJlc3Npb25zIHdpdGggdHdvIGluY3JlbWVudCBvcGVyYXRvcnMsCithcyBpbiA8Y29kZT5mICgqcCsrLCAqcCsrKTwvY29kZT4uICBZb3VyIHByZXZpb3VzIGNvbXBpbGVyIG1pZ2h0IGhhdmUKK2ludGVycHJldGVkIHRoYXQgZXhwcmVzc2lvbiB0aGUgd2F5IHlvdSBpbnRlbmRlZDsgR0NDIG1pZ2h0CitpbnRlcnByZXQgaXQgYW5vdGhlciB3YXkuICBOZWl0aGVyIGNvbXBpbGVyIGlzIHdyb25nLiAgVGhlIGJ1ZyBpcworaW4geW91ciBjb2RlLgorCisgICAgIDxwPkFmdGVyIHlvdSBoYXZlIGxvY2FsaXplZCB0aGUgZXJyb3IgdG8gYSBzaW5nbGUgc291cmNlIGxpbmUsIGl0IHNob3VsZAorYmUgZWFzeSB0byBjaGVjayBmb3IgdGhlc2UgdGhpbmdzLiAgSWYgeW91ciBwcm9ncmFtIGlzIGNvcnJlY3QgYW5kCit3ZWxsIGRlZmluZWQsIHlvdSBoYXZlIGZvdW5kIGEgY29tcGlsZXIgYnVnLgorCisgICAgIDxsaT5JZiB0aGUgY29tcGlsZXIgcHJvZHVjZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdmFsaWQgaW5wdXQsIHRoYXQgaXMgYQorY29tcGlsZXIgYnVnLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWludmFsaWQtaW5wdXQtMzYwMiI+PC9hPjxsaT5JZiB0aGUgY29tcGlsZXIgZG9lcyBub3QgcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIGlucHV0LAordGhhdCBpcyBhIGNvbXBpbGVyIGJ1Zy4gIEhvd2V2ZXIsIHlvdSBzaG91bGQgbm90ZSB0aGF0IHlvdXIgaWRlYSBvZgorJmxkcXVvO2ludmFsaWQgaW5wdXQmcmRxdW87IG1pZ2h0IGJlIHNvbWVvbmUgZWxzZSdzIGlkZWEgb2YgJmxkcXVvO2FuIGV4dGVuc2lvbiZyZHF1bzsgb3IKKyZsZHF1bztzdXBwb3J0IGZvciB0cmFkaXRpb25hbCBwcmFjdGljZSZyZHF1bzsuCisKKyAgICAgPGxpPklmIHlvdSBhcmUgYW4gZXhwZXJpZW5jZWQgdXNlciBvZiBvbmUgb2YgdGhlIGxhbmd1YWdlcyBHQ0Mgc3VwcG9ydHMsIHlvdXIKK3N1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCBvZiBHQ0MgYXJlIHdlbGNvbWUgaW4gYW55IGNhc2UuIAorPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQnVnLVJlcG9ydGluZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9CdWctUmVwb3J0aW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxNDY0YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQnVnLVJlcG9ydGluZy5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJ1ZyBSZXBvcnRpbmcgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQnVncy5odG1sI0J1Z3MiIHRpdGxlPSJCdWdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIiB0aXRsZT0iQnVnIENyaXRlcmlhIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJ1Zy1SZXBvcnRpbmciPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkJ1Z3MuaHRtbCNCdWdzIj5CdWdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTIuMiBIb3cgYW5kIHdoZXJlIHRvIFJlcG9ydCBCdWdzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY29tcGlsZXItYnVnc18wMDJjLXJlcG9ydGluZy0zNjAzIj48L2E+CitCdWdzIHNob3VsZCBiZSByZXBvcnRlZCB0byB0aGUgYnVnIGRhdGFiYXNlIGF0IDxhIGhyZWY9Imh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L2djYy1saW5hcm8iPmh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L2djYy1saW5hcm88L2E+LgorCis8IS0tIENvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0J1Z3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQnVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMGYwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0J1Z3MuaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CdWdzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiIHRpdGxlPSJUcm91YmxlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU2VydmljZS5odG1sI1NlcnZpY2UiIHRpdGxlPSJTZXJ2aWNlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJ1Z3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU2VydmljZS5odG1sI1NlcnZpY2UiPlNlcnZpY2U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSI+VHJvdWJsZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMiBSZXBvcnRpbmcgQnVnczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWJ1Z3MtMzU5MiI+PC9hPjxhIG5hbWU9ImluZGV4LXJlcG9ydGluZy1idWdzLTM1OTMiPjwvYT4KK1lvdXIgYnVnIHJlcG9ydHMgcGxheSBhbiBlc3NlbnRpYWwgcm9sZSBpbiBtYWtpbmcgR0NDIHJlbGlhYmxlLgorCisgPHA+V2hlbiB5b3UgZW5jb3VudGVyIGEgcHJvYmxlbSwgdGhlIGZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIHNlZSBpZiBpdCBpcworYWxyZWFkeSBrbm93bi4gIFNlZSA8YSBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSI+VHJvdWJsZTwvYT4uICBJZiBpdCBpc24ndCBrbm93biwgdGhlbiB5b3Ugc2hvdWxkCityZXBvcnQgdGhlIHByb2JsZW0uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkNyaXRlcmlhPC9hPjogICAgSGF2ZSB5b3UgcmVhbGx5IGZvdW5kIGEgYnVnPyAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIj5SZXBvcnRpbmc8L2E+OiAgIEhvdyB0byByZXBvcnQgYSBidWcgZWZmZWN0aXZlbHkuIAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiPktub3duPC9hPjogICAgICAgICAgICAgS25vd24gcHJvYmxlbXMuIAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iU2VydmljZS5odG1sI1NlcnZpY2UiPkhlbHA8L2E+OiAgICAgICAgICAgICAgV2hlcmUgdG8gYXNrIGZvciBoZWxwLiAKKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0MtRGlhbGVjdC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0MtRGlhbGVjdC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E0MWJhNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQy1EaWFsZWN0LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDM1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QyBEaWFsZWN0IE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIiB0aXRsZT0iSW52b2tpbmcgR0NDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNJbnZva2luZy1HXzAwMmJfMDAyYiIgdGl0bGU9Ikludm9raW5nIEcrKyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyIgdGl0bGU9IkMrKyBEaWFsZWN0IE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQy1EaWFsZWN0LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNJbnZva2luZy1HXzAwMmJfMDAyYiI+SW52b2tpbmcgRysrPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjQgT3B0aW9ucyBDb250cm9sbGluZyBDIERpYWxlY3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1kaWFsZWN0LW9wdGlvbnMtOTciPjwvYT48YSBuYW1lPSJpbmRleC1sYW5ndWFnZS1kaWFsZWN0LW9wdGlvbnMtOTgiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtZGlhbGVjdC05OSI+PC9hPgorVGhlIGZvbGxvd2luZyBvcHRpb25zIGNvbnRyb2wgdGhlIGRpYWxlY3Qgb2YgQyAob3IgbGFuZ3VhZ2VzIGRlcml2ZWQKK2Zyb20gQywgc3VjaCBhcyBDKyssIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrKSB0aGF0IHRoZSBjb21waWxlcgorYWNjZXB0czoKKworICAgICAKKzxhIG5hbWU9ImluZGV4LUFOU0ktc3VwcG9ydC0xMDAiPjwvYT4KKzxhIG5hbWU9ImluZGV4LUlTTy1zdXBwb3J0LTEwMSI+PC9hPgorPGRsPjxkdD48Y29kZT4tYW5zaTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYW5zaS0xMDIiPjwvYT5JbiBDIG1vZGUsIHRoaXMgaXMgZXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWM5MDwvc3Bhbj48L3NhbXA+LiBJbiBDKysgbW9kZSwgaXQgaXMKK2VxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jKys5ODwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPlRoaXMgdHVybnMgb2ZmIGNlcnRhaW4gZmVhdHVyZXMgb2YgR0NDIHRoYXQgYXJlIGluY29tcGF0aWJsZSB3aXRoIElTTworQzkwICh3aGVuIGNvbXBpbGluZyBDIGNvZGUpLCBvciBvZiBzdGFuZGFyZCBDKysgKHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlKSwKK3N1Y2ggYXMgdGhlIDxjb2RlPmFzbTwvY29kZT4gYW5kIDxjb2RlPnR5cGVvZjwvY29kZT4ga2V5d29yZHMsIGFuZAorcHJlZGVmaW5lZCBtYWNyb3Mgc3VjaCBhcyA8Y29kZT51bml4PC9jb2RlPiBhbmQgPGNvZGU+dmF4PC9jb2RlPiB0aGF0IGlkZW50aWZ5IHRoZQordHlwZSBvZiBzeXN0ZW0geW91IGFyZSB1c2luZy4gIEl0IGFsc28gZW5hYmxlcyB0aGUgdW5kZXNpcmFibGUgYW5kCityYXJlbHkgdXNlZCBJU08gdHJpZ3JhcGggZmVhdHVyZS4gIEZvciB0aGUgQyBjb21waWxlciwKK2l0IGRpc2FibGVzIHJlY29nbml0aW9uIG9mIEMrKyBzdHlsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi8vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1lbnRzIGFzIHdlbGwgYXMKK3RoZSA8Y29kZT5pbmxpbmU8L2NvZGU+IGtleXdvcmQuCisKKyAgICAgPHA+VGhlIGFsdGVybmF0ZSBrZXl3b3JkcyA8Y29kZT5fX2FzbV9fPC9jb2RlPiwgPGNvZGU+X19leHRlbnNpb25fXzwvY29kZT4sCis8Y29kZT5fX2lubGluZV9fPC9jb2RlPiBhbmQgPGNvZGU+X190eXBlb2ZfXzwvY29kZT4gY29udGludWUgdG8gd29yayBkZXNwaXRlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+LiAgWW91IHdvdWxkIG5vdCB3YW50IHRvIHVzZSB0aGVtIGluIGFuIElTTyBDIHByb2dyYW0sIG9mCitjb3Vyc2UsIGJ1dCBpdCBpcyB1c2VmdWwgdG8gcHV0IHRoZW0gaW4gaGVhZGVyIGZpbGVzIHRoYXQgbWlnaHQgYmUgaW5jbHVkZWQKK2luIGNvbXBpbGF0aW9ucyBkb25lIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPi4gIEFsdGVybmF0ZSBwcmVkZWZpbmVkIG1hY3Jvcworc3VjaCBhcyA8Y29kZT5fX3VuaXhfXzwvY29kZT4gYW5kIDxjb2RlPl9fdmF4X188L2NvZGU+IGFyZSBhbHNvIGF2YWlsYWJsZSwgd2l0aCBvcgord2l0aG91dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBkb2VzIG5vdCBjYXVzZSBub24tSVNPIHByb2dyYW1zIHRvIGJlCityZWplY3RlZCBncmF0dWl0b3VzbHkuICBGb3IgdGhhdCwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwZWRhbnRpYzwvc3Bhbj48L3NhbXA+IGlzIHJlcXVpcmVkIGluCithZGRpdGlvbiB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+LiAgU2VlIDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPi4KKworICAgICA8cD5UaGUgbWFjcm8gPGNvZGU+X19TVFJJQ1RfQU5TSV9fPC9jb2RlPiBpcyBwcmVkZWZpbmVkIHdoZW4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBpcyB1c2VkLiAgU29tZSBoZWFkZXIgZmlsZXMgbWF5IG5vdGljZSB0aGlzIG1hY3JvIGFuZCByZWZyYWluCitmcm9tIGRlY2xhcmluZyBjZXJ0YWluIGZ1bmN0aW9ucyBvciBkZWZpbmluZyBjZXJ0YWluIG1hY3JvcyB0aGF0IHRoZQorSVNPIHN0YW5kYXJkIGRvZXNuJ3QgY2FsbCBmb3I7IHRoaXMgaXMgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBhbnkKK3Byb2dyYW1zIHRoYXQgbWlnaHQgdXNlIHRoZXNlIG5hbWVzIGZvciBvdGhlciB0aGluZ3MuCisKKyAgICAgPHA+RnVuY3Rpb25zIHRoYXQgYXJlIG5vcm1hbGx5IGJ1aWx0IGluIGJ1dCBkbyBub3QgaGF2ZSBzZW1hbnRpY3MKK2RlZmluZWQgYnkgSVNPIEMgKHN1Y2ggYXMgPGNvZGU+YWxsb2NhPC9jb2RlPiBhbmQgPGNvZGU+ZmZzPC9jb2RlPikgYXJlIG5vdCBidWlsdC1pbgorZnVuY3Rpb25zIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLiAgU2VlIDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIGJ1aWx0LWluIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBHQ0M8L2E+LCBmb3IgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb25zCithZmZlY3RlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1zdGQ9PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1zdGQtMTAzIj48L2E+RGV0ZXJtaW5lIHRoZSBsYW5ndWFnZSBzdGFuZGFyZC4gU2VlIDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+TGFuZ3VhZ2UgU3RhbmRhcmRzIFN1cHBvcnRlZCBieSBHQ0M8L2E+LCBmb3IgZGV0YWlscyBvZiB0aGVzZSBzdGFuZGFyZCB2ZXJzaW9ucy4gIFRoaXMgb3B0aW9uCitpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgd2hlbiBjb21waWxpbmcgQyBvciBDKysuCisKKyAgICAgPHA+VGhlIGNvbXBpbGVyIGNhbiBhY2NlcHQgc2V2ZXJhbCBiYXNlIHN0YW5kYXJkcywgc3VjaCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmM5MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jKys5ODwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIEdOVSBkaWFsZWN0cyBvZiB0aG9zZSBzdGFuZGFyZHMsIHN1Y2ggYXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251OTA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnUrKzk4PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgV2hlbiBhIGJhc2Ugc3RhbmRhcmQgaXMgc3BlY2lmaWVkLCB0aGUKK2NvbXBpbGVyIGFjY2VwdHMgYWxsIHByb2dyYW1zIGZvbGxvd2luZyB0aGF0IHN0YW5kYXJkIHBsdXMgdGhvc2UKK3VzaW5nIEdOVSBleHRlbnNpb25zIHRoYXQgZG8gbm90IGNvbnRyYWRpY3QgaXQuICBGb3IgZXhhbXBsZSwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzkwPC9zcGFuPjwvc2FtcD4gdHVybnMgb2ZmIGNlcnRhaW4gZmVhdHVyZXMgb2YgR0NDIHRoYXQgYXJlCitpbmNvbXBhdGlibGUgd2l0aCBJU08gQzkwLCBzdWNoIGFzIHRoZSA8Y29kZT5hc208L2NvZGU+IGFuZCA8Y29kZT50eXBlb2Y8L2NvZGU+CitrZXl3b3JkcywgYnV0IG5vdCBvdGhlciBHTlUgZXh0ZW5zaW9ucyB0aGF0IGRvIG5vdCBoYXZlIGEgbWVhbmluZyBpbgorSVNPIEM5MCwgc3VjaCBhcyBvbWl0dGluZyB0aGUgbWlkZGxlIHRlcm0gb2YgYSA8Y29kZT4/OjwvY29kZT4KK2V4cHJlc3Npb24uIE9uIHRoZSBvdGhlciBoYW5kLCB3aGVuIGEgR05VIGRpYWxlY3Qgb2YgYSBzdGFuZGFyZCBpcworc3BlY2lmaWVkLCBhbGwgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlciBhcmUgZW5hYmxlZCwgZXZlbiB3aGVuCit0aG9zZSBmZWF0dXJlcyBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIGJhc2Ugc3RhbmRhcmQuICBBcyBhIHJlc3VsdCwgc29tZQorc3RyaWN0LWNvbmZvcm1pbmcgcHJvZ3JhbXMgbWF5IGJlIHJlamVjdGVkLiAgVGhlIHBhcnRpY3VsYXIgc3RhbmRhcmQKK2lzIHVzZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwZWRhbnRpYzwvc3Bhbj48L3NhbXA+IHRvIGlkZW50aWZ5IHdoaWNoIGZlYXR1cmVzIGFyZSBHTlUKK2V4dGVuc2lvbnMgZ2l2ZW4gdGhhdCB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZC4gRm9yIGV4YW1wbGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Z251OTAgLVdwZWRhbnRpYzwvc3Bhbj48L3NhbXA+IHdhcm5zIGFib3V0IEMrKyBzdHlsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi8vPC9zcGFuPjwvc2FtcD4mcnNxdW87Citjb21tZW50cywgd2hpbGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnU5OSAtV3BlZGFudGljPC9zcGFuPjwvc2FtcD4gZG9lcyBub3QuCisKKyAgICAgPHA+QSB2YWx1ZSBmb3IgdGhpcyBvcHRpb24gbXVzdCBiZSBwcm92aWRlZDsgcG9zc2libGUgdmFsdWVzIGFyZQorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YzkwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yzg5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXNvOTg5OToxOTkwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlN1cHBvcnQgYWxsIElTTyBDOTAgcHJvZ3JhbXMgKGNlcnRhaW4gR05VIGV4dGVuc2lvbnMgdGhhdCBjb25mbGljdAord2l0aCBJU08gQzkwIGFyZSBkaXNhYmxlZCkuIFNhbWUgYXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPiBmb3IgQyBjb2RlLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlzbzk4OTk6MTk5NDA5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPklTTyBDOTAgYXMgbW9kaWZpZWQgaW4gYW1lbmRtZW50IDEuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yzk5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yzl4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXNvOTg5OToxOTk5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXNvOTg5OToxOTl4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPklTTyBDOTkuICBOb3RlIHRoYXQgdGhpcyBzdGFuZGFyZCBpcyBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZDsgc2VlCis8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvYzk5c3RhdHVzLmh0bWwiPmh0dHA6Ly9nY2MuZ251Lm9yZy9jOTlzdGF0dXMuaHRtbDwvYT48IS0tIC9AdyAtLT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uICBUaGUKK25hbWVzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yzl4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlzbzk4OTk6MTk5eDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgZGVwcmVjYXRlZC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jMTE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jMXg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pc285ODk5OjIwMTE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SVNPIEMxMSwgdGhlIDIwMTEgcmV2aXNpb24gb2YgdGhlIElTTyBDIHN0YW5kYXJkLiAKK1N1cHBvcnQgaXMgaW5jb21wbGV0ZSBhbmQgZXhwZXJpbWVudGFsLiAgVGhlIG5hbWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jMXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMKK2RlcHJlY2F0ZWQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251OTA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnU4OTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5HTlUgZGlhbGVjdCBvZiBJU08gQzkwIChpbmNsdWRpbmcgc29tZSBDOTkgZmVhdHVyZXMpLiBUaGlzCitpcyB0aGUgZGVmYXVsdCBmb3IgQyBjb2RlLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdudTk5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251OXg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+R05VIGRpYWxlY3Qgb2YgSVNPIEM5OS4gIFdoZW4gSVNPIEM5OSBpcyBmdWxseSBpbXBsZW1lbnRlZCBpbiBHQ0MsCit0aGlzIHdpbGwgYmVjb21lIHRoZSBkZWZhdWx0LiAgVGhlIG5hbWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnU5eDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBkZXByZWNhdGVkLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdudTExPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251MXg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+R05VIGRpYWxlY3Qgb2YgSVNPIEMxMS4gIFN1cHBvcnQgaXMgaW5jb21wbGV0ZSBhbmQgZXhwZXJpbWVudGFsLiAgVGhlCituYW1lICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251MXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgZGVwcmVjYXRlZC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jKys5ODwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmMrKzAzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoZSAxOTk4IElTTyBDKysgc3RhbmRhcmQgcGx1cyB0aGUgMjAwMyB0ZWNobmljYWwgY29ycmlnZW5kdW0gYW5kIHNvbWUKK2FkZGl0aW9uYWwgZGVmZWN0IHJlcG9ydHMuIFNhbWUgYXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPiBmb3IgQysrIGNvZGUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251Kys5ODwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdudSsrMDM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+R05VIGRpYWxlY3Qgb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jKys5ODwvc3Bhbj48L3NhbXA+LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IKK0MrKyBjb2RlLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmMrKzExPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YysrMHg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VGhlIDIwMTEgSVNPIEMrKyBzdGFuZGFyZCBwbHVzIGFtZW5kbWVudHMuICBTdXBwb3J0IGZvciBDKysxMSBpcyBzdGlsbAorZXhwZXJpbWVudGFsLCBhbmQgbWF5IGNoYW5nZSBpbiBpbmNvbXBhdGlibGUgd2F5cyBpbiBmdXR1cmUgcmVsZWFzZXMuIAorVGhlIG5hbWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jKysweDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBkZXByZWNhdGVkLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdudSsrMTE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnUrKzB4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkdOVSBkaWFsZWN0IG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YysrMTE8L3NwYW4+PC9zYW1wPi4gU3VwcG9ydCBmb3IgQysrMTEgaXMgc3RpbGwKK2V4cGVyaW1lbnRhbCwgYW5kIG1heSBjaGFuZ2UgaW4gaW5jb21wYXRpYmxlIHdheXMgaW4gZnV0dXJlIHJlbGVhc2VzLiAKK1RoZSBuYW1lICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251KysweDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBkZXByZWNhdGVkLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmMrKzF5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoZSBuZXh0IHJldmlzaW9uIG9mIHRoZSBJU08gQysrIHN0YW5kYXJkLCB0ZW50YXRpdmVseSBwbGFubmVkIGZvcgorMjAxNy4gIFN1cHBvcnQgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCwgYW5kIHdpbGwgYWxtb3N0IGNlcnRhaW5seQorY2hhbmdlIGluIGluY29tcGF0aWJsZSB3YXlzIGluIGZ1dHVyZSByZWxlYXNlcy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnUrKzF5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkdOVSBkaWFsZWN0IG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YysrMXk8L3NwYW4+PC9zYW1wPi4gIFN1cHBvcnQgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCwKK2FuZCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgY2hhbmdlIGluIGluY29tcGF0aWJsZSB3YXlzIGluIGZ1dHVyZQorcmVsZWFzZXMuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZ251ODktaW5saW5lPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZ251ODlfMDAyZGlubGluZS0xMDQiPjwvYT5UaGUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZ251ODktaW5saW5lPC9zcGFuPjwvc2FtcD4gdGVsbHMgR0NDIHRvIHVzZSB0aGUgdHJhZGl0aW9uYWwKK0dOVSBzZW1hbnRpY3MgZm9yIDxjb2RlPmlubGluZTwvY29kZT4gZnVuY3Rpb25zIHdoZW4gaW4gQzk5IG1vZGUuIAorU2VlIDxhIGhyZWY9IklubGluZS5odG1sI0lubGluZSI+QW4gSW5saW5lIEZ1bmN0aW9uIGlzIEFzIEZhc3QgQXMgYSBNYWNybzwvYT4uICBUaGlzIG9wdGlvbgoraXMgYWNjZXB0ZWQgYW5kIGlnbm9yZWQgYnkgR0NDIHZlcnNpb25zIDQuMS4zIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCis0LjMuICBJbiBHQ0MgdmVyc2lvbnMgNC4zIGFuZCBsYXRlciBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiBHQ0MgaW4KK0M5OSBtb2RlLiAgVXNpbmcgdGhpcyBvcHRpb24gaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGFkZGluZyB0aGUKKzxjb2RlPmdudV9pbmxpbmU8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZSB0byBhbGwgaW5saW5lIGZ1bmN0aW9ucworKHNlZSA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4pLgorCisgICAgIDxwPlRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1nbnU4OS1pbmxpbmU8L3NwYW4+PC9zYW1wPiBleHBsaWNpdGx5IHRlbGxzIEdDQyB0byB1c2UgdGhlCitDOTkgc2VtYW50aWNzIGZvciA8Y29kZT5pbmxpbmU8L2NvZGU+IHdoZW4gaW4gQzk5IG9yIGdudTk5IG1vZGUgKGkuZS4sIGl0CitzcGVjaWZpZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLiAgVGhpcyBvcHRpb24gd2FzIGZpcnN0IHN1cHBvcnRlZCBpbgorR0NDIDQuMy4gIFRoaXMgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jOTA8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnU5MDwvc3Bhbj48L3NhbXA+IG1vZGUuCisKKyAgICAgPHA+VGhlIHByZXByb2Nlc3NvciBtYWNyb3MgPGNvZGU+X19HTlVDX0dOVV9JTkxJTkVfXzwvY29kZT4gYW5kCis8Y29kZT5fX0dOVUNfU1REQ19JTkxJTkVfXzwvY29kZT4gbWF5IGJlIHVzZWQgdG8gY2hlY2sgd2hpY2ggc2VtYW50aWNzIGFyZQoraW4gZWZmZWN0IGZvciA8Y29kZT5pbmxpbmU8L2NvZGU+IGZ1bmN0aW9ucy4gIFNlZSA8YSBocmVmPSIuLi9jcHAvQ29tbW9uLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjQ29tbW9uLVByZWRlZmluZWQtTWFjcm9zIj5Db21tb24gUHJlZGVmaW5lZCBNYWNyb3M8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWF1eC1pbmZvIDwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWF1eF8wMDJkaW5mby0xMDUiPjwvYT5PdXRwdXQgdG8gdGhlIGdpdmVuIGZpbGVuYW1lIHByb3RvdHlwZWQgZGVjbGFyYXRpb25zIGZvciBhbGwgZnVuY3Rpb25zCitkZWNsYXJlZCBhbmQvb3IgZGVmaW5lZCBpbiBhIHRyYW5zbGF0aW9uIHVuaXQsIGluY2x1ZGluZyB0aG9zZSBpbiBoZWFkZXIKK2ZpbGVzLiAgVGhpcyBvcHRpb24gaXMgc2lsZW50bHkgaWdub3JlZCBpbiBhbnkgbGFuZ3VhZ2Ugb3RoZXIgdGhhbiBDLgorCisgICAgIDxwPkJlc2lkZXMgZGVjbGFyYXRpb25zLCB0aGUgZmlsZSBpbmRpY2F0ZXMsIGluIGNvbW1lbnRzLCB0aGUgb3JpZ2luIG9mCitlYWNoIGRlY2xhcmF0aW9uIChzb3VyY2UgZmlsZSBhbmQgbGluZSksIHdoZXRoZXIgdGhlIGRlY2xhcmF0aW9uIHdhcworaW1wbGljaXQsIHByb3RvdHlwZWQgb3IgdW5wcm90b3R5cGVkICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgbmV3IG9yCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk88L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIG9sZCwgcmVzcGVjdGl2ZWx5LCBpbiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBsaW5lCitudW1iZXIgYW5kIHRoZSBjb2xvbiksIGFuZCB3aGV0aGVyIGl0IGNhbWUgZnJvbSBhIGRlY2xhcmF0aW9uIG9yIGEKK2RlZmluaXRpb24gKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkY8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHJlc3BlY3RpdmVseSwgaW4gdGhlIGZvbGxvd2luZworY2hhcmFjdGVyKS4gIEluIHRoZSBjYXNlIG9mIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBhIEsmYW1wO1Itc3R5bGUgbGlzdCBvZgorYXJndW1lbnRzIGZvbGxvd2VkIGJ5IHRoZWlyIGRlY2xhcmF0aW9ucyBpcyBhbHNvIHByb3ZpZGVkLCBpbnNpZGUKK2NvbW1lbnRzLCBhZnRlciB0aGUgZGVjbGFyYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmFsbG93LXBhcmFtZXRlcmxlc3MtdmFyaWFkaWMtZnVuY3Rpb25zPC9jb2RlPjxkZD5BY2NlcHQgdmFyaWFkaWMgZnVuY3Rpb25zIHdpdGhvdXQgbmFtZWQgcGFyYW1ldGVycy4KKworICAgICA8cD5BbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgc3VjaCBhIGZ1bmN0aW9uLCB0aGlzIGlzIG5vdCB2ZXJ5Cit1c2VmdWwgYXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWQgdGhlIGFyZ3VtZW50cy4gIFRoaXMgaXMgb25seQorc3VwcG9ydGVkIGZvciBDIGFzIHRoaXMgY29uc3RydWN0IGlzIGFsbG93ZWQgYnkgQysrLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1hc208L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkYXNtLTEwNiI+PC9hPkRvIG5vdCByZWNvZ25pemUgPGNvZGU+YXNtPC9jb2RlPiwgPGNvZGU+aW5saW5lPC9jb2RlPiBvciA8Y29kZT50eXBlb2Y8L2NvZGU+IGFzIGEKK2tleXdvcmQsIHNvIHRoYXQgY29kZSBjYW4gdXNlIHRoZXNlIHdvcmRzIGFzIGlkZW50aWZpZXJzLiAgWW91IGNhbiB1c2UKK3RoZSBrZXl3b3JkcyA8Y29kZT5fX2FzbV9fPC9jb2RlPiwgPGNvZGU+X19pbmxpbmVfXzwvY29kZT4gYW5kIDxjb2RlPl9fdHlwZW9mX188L2NvZGU+CitpbnN0ZWFkLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPiBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYXNtPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+SW4gQysrLCB0aGlzIHN3aXRjaCBvbmx5IGFmZmVjdHMgdGhlIDxjb2RlPnR5cGVvZjwvY29kZT4ga2V5d29yZCwgc2luY2UKKzxjb2RlPmFzbTwvY29kZT4gYW5kIDxjb2RlPmlubGluZTwvY29kZT4gYXJlIHN0YW5kYXJkIGtleXdvcmRzLiAgWW91IG1heSB3YW50IHRvCit1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZ251LWtleXdvcmRzPC9zcGFuPjwvc2FtcD4gZmxhZyBpbnN0ZWFkLCB3aGljaCBoYXMgdGhlIHNhbWUKK2VmZmVjdC4gIEluIEM5OSBtb2RlICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWM5OTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Z251OTk8L3NwYW4+PC9zYW1wPiksIHRoaXMKK3N3aXRjaCBvbmx5IGFmZmVjdHMgdGhlIDxjb2RlPmFzbTwvY29kZT4gYW5kIDxjb2RlPnR5cGVvZjwvY29kZT4ga2V5d29yZHMsIHNpbmNlCis8Y29kZT5pbmxpbmU8L2NvZGU+IGlzIGEgc3RhbmRhcmQga2V5d29yZCBpbiBJU08gQzk5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1idWlsdGluPC9jb2RlPjxkdD48Y29kZT4tZm5vLWJ1aWx0aW4tPC9jb2RlPjx2YXI+ZnVuY3Rpb248L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRidWlsdGluLTEwNyI+PC9hPjxhIG5hbWU9ImluZGV4LWJ1aWx0XzAwMmRpbi1mdW5jdGlvbnMtMTA4Ij48L2E+RG9uJ3QgcmVjb2duaXplIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fYnVpbHRpbl88L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgcHJlZml4LiAgU2VlIDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIGJ1aWx0LWluIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBHQ0M8L2E+LCBmb3IgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkLAoraW5jbHVkaW5nIHRob3NlIHdoaWNoIGFyZSBub3QgYnVpbHQtaW4gZnVuY3Rpb25zIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgZm9yIHN0cmljdCBJU08gQyBjb25mb3JtYW5jZSBhcmUgdXNlZCBiZWNhdXNlIHRoZXkKK2RvIG5vdCBoYXZlIGFuIElTTyBzdGFuZGFyZCBtZWFuaW5nLgorCisgICAgIDxwPkdDQyBub3JtYWxseSBnZW5lcmF0ZXMgc3BlY2lhbCBjb2RlIHRvIGhhbmRsZSBjZXJ0YWluIGJ1aWx0LWluIGZ1bmN0aW9ucworbW9yZSBlZmZpY2llbnRseTsgZm9yIGluc3RhbmNlLCBjYWxscyB0byA8Y29kZT5hbGxvY2E8L2NvZGU+IG1heSBiZWNvbWUgc2luZ2xlCitpbnN0cnVjdGlvbnMgd2hpY2ggYWRqdXN0IHRoZSBzdGFjayBkaXJlY3RseSwgYW5kIGNhbGxzIHRvIDxjb2RlPm1lbWNweTwvY29kZT4KK21heSBiZWNvbWUgaW5saW5lIGNvcHkgbG9vcHMuICBUaGUgcmVzdWx0aW5nIGNvZGUgaXMgb2Z0ZW4gYm90aCBzbWFsbGVyCithbmQgZmFzdGVyLCBidXQgc2luY2UgdGhlIGZ1bmN0aW9uIGNhbGxzIG5vIGxvbmdlciBhcHBlYXIgYXMgc3VjaCwgeW91CitjYW5ub3Qgc2V0IGEgYnJlYWtwb2ludCBvbiB0aG9zZSBjYWxscywgbm9yIGNhbiB5b3UgY2hhbmdlIHRoZSBiZWhhdmlvcgorb2YgdGhlIGZ1bmN0aW9ucyBieSBsaW5raW5nIHdpdGggYSBkaWZmZXJlbnQgbGlicmFyeS4gIEluIGFkZGl0aW9uLAord2hlbiBhIGZ1bmN0aW9uIGlzIHJlY29nbml6ZWQgYXMgYSBidWlsdC1pbiBmdW5jdGlvbiwgR0NDIG1heSB1c2UKK2luZm9ybWF0aW9uIGFib3V0IHRoYXQgZnVuY3Rpb24gdG8gd2FybiBhYm91dCBwcm9ibGVtcyB3aXRoIGNhbGxzIHRvCit0aGF0IGZ1bmN0aW9uLCBvciB0byBnZW5lcmF0ZSBtb3JlIGVmZmljaWVudCBjb2RlLCBldmVuIGlmIHRoZQorcmVzdWx0aW5nIGNvZGUgc3RpbGwgY29udGFpbnMgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLAord2FybmluZ3MgYXJlIGdpdmVuIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQ8L3NwYW4+PC9zYW1wPiBmb3IgYmFkIGNhbGxzIHRvCis8Y29kZT5wcmludGY8L2NvZGU+IHdoZW4gPGNvZGU+cHJpbnRmPC9jb2RlPiBpcyBidWlsdCBpbiBhbmQgPGNvZGU+c3RybGVuPC9jb2RlPiBpcwora25vd24gbm90IHRvIG1vZGlmeSBnbG9iYWwgbWVtb3J5LgorCisgICAgIDxwPldpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYnVpbHRpbi08L3NwYW4+PHZhcj5mdW5jdGlvbjwvdmFyPjwvc2FtcD4gb3B0aW9uCitvbmx5IHRoZSBidWlsdC1pbiBmdW5jdGlvbiA8dmFyPmZ1bmN0aW9uPC92YXI+IGlzCitkaXNhYmxlZC4gIDx2YXI+ZnVuY3Rpb248L3Zhcj4gbXVzdCBub3QgYmVnaW4gd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fYnVpbHRpbl88L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJZiBhCitmdW5jdGlvbiBpcyBuYW1lZCB0aGF0IGlzIG5vdCBidWlsdC1pbiBpbiB0aGlzIHZlcnNpb24gb2YgR0NDLCB0aGlzCitvcHRpb24gaXMgaWdub3JlZC4gIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYnVpbHRpbi08L3NwYW4+PHZhcj5mdW5jdGlvbjwvdmFyPjwvc2FtcD4gb3B0aW9uOyBpZiB5b3Ugd2lzaCB0byBlbmFibGUKK2J1aWx0LWluIGZ1bmN0aW9ucyBzZWxlY3RpdmVseSB3aGVuIHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYnVpbHRpbjwvc3Bhbj48L3NhbXA+IG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZyZWVzdGFuZGluZzwvc3Bhbj48L3NhbXA+LCB5b3UgbWF5IGRlZmluZSBtYWNyb3Mgc3VjaCBhczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjZGVmaW5lIGFicyhuKSAgICAgICAgICBfX2J1aWx0aW5fYWJzICgobikpCisgICAgICAgICAgI2RlZmluZSBzdHJjcHkoZCwgcykgICAgX19idWlsdGluX3N0cmNweSAoKGQpLCAocykpCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4tZmhvc3RlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmhvc3RlZC0xMDkiPjwvYT48YSBuYW1lPSJpbmRleC1ob3N0ZWQtZW52aXJvbm1lbnQtMTEwIj48L2E+CitBc3NlcnQgdGhhdCBjb21waWxhdGlvbiB0YXJnZXRzIGEgaG9zdGVkIGVudmlyb25tZW50LiAgVGhpcyBpbXBsaWVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmJ1aWx0aW48L3NwYW4+PC9zYW1wPi4gIEEgaG9zdGVkIGVudmlyb25tZW50IGlzIG9uZSBpbiB3aGljaCB0aGUKK2VudGlyZSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGF2YWlsYWJsZSwgYW5kIGluIHdoaWNoIDxjb2RlPm1haW48L2NvZGU+IGhhcyBhIHJldHVybgordHlwZSBvZiA8Y29kZT5pbnQ8L2NvZGU+LiAgRXhhbXBsZXMgYXJlIG5lYXJseSBldmVyeXRoaW5nIGV4Y2VwdCBhIGtlcm5lbC4gCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1mcmVlc3RhbmRpbmc8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZnJlZXN0YW5kaW5nPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZnJlZXN0YW5kaW5nLTExMSI+PC9hPjxhIG5hbWU9ImluZGV4LWhvc3RlZC1lbnZpcm9ubWVudC0xMTIiPjwvYT4KK0Fzc2VydCB0aGF0IGNvbXBpbGF0aW9uIHRhcmdldHMgYSBmcmVlc3RhbmRpbmcgZW52aXJvbm1lbnQuICBUaGlzCitpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYnVpbHRpbjwvc3Bhbj48L3NhbXA+LiAgQSBmcmVlc3RhbmRpbmcgZW52aXJvbm1lbnQKK2lzIG9uZSBpbiB3aGljaCB0aGUgc3RhbmRhcmQgbGlicmFyeSBtYXkgbm90IGV4aXN0LCBhbmQgcHJvZ3JhbSBzdGFydHVwIG1heQorbm90IG5lY2Vzc2FyaWx5IGJlIGF0IDxjb2RlPm1haW48L2NvZGU+LiAgVGhlIG1vc3Qgb2J2aW91cyBleGFtcGxlIGlzIGFuIE9TIGtlcm5lbC4gCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1ob3N0ZWQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5TZWUgPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5MYW5ndWFnZSBTdGFuZGFyZHMgU3VwcG9ydGVkIGJ5IEdDQzwvYT4sIGZvciBkZXRhaWxzIG9mCitmcmVlc3RhbmRpbmcgYW5kIGhvc3RlZCBlbnZpcm9ubWVudHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm9wZW5tcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm9wZW5tcC0xMTMiPjwvYT48YSBuYW1lPSJpbmRleC1PcGVuTVAtcGFyYWxsZWwtMTE0Ij48L2E+RW5hYmxlIGhhbmRsaW5nIG9mIE9wZW5NUCBkaXJlY3RpdmVzIDxjb2RlPiNwcmFnbWEgb21wPC9jb2RlPiBpbiBDL0MrKyBhbmQKKzxjb2RlPiEkb21wPC9jb2RlPiBpbiBGb3J0cmFuLiAgV2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9wZW5tcDwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwgdGhlCitjb21waWxlciBnZW5lcmF0ZXMgcGFyYWxsZWwgY29kZSBhY2NvcmRpbmcgdG8gdGhlIE9wZW5NUCBBcHBsaWNhdGlvbgorUHJvZ3JhbSBJbnRlcmZhY2UgdjMuMCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5tcC5vcmcvIj5odHRwOi8vd3d3Lm9wZW5tcC5vcmcvPC9hPjwhLS0gL0B3IC0tPi4gIFRoaXMgb3B0aW9uCitpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wdGhyZWFkPC9zcGFuPjwvc2FtcD4sIGFuZCB0aHVzIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHRhcmdldHMgdGhhdAoraGF2ZSBzdXBwb3J0IGZvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcHRocmVhZDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZnbnUtdG08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZnbnVfMDAyZHRtLTExNSI+PC9hPldoZW4gdGhlIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmdudS10bTwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwgdGhlIGNvbXBpbGVyCitnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIExpbnV4IHZhcmlhbnQgb2YgSW50ZWwncyBjdXJyZW50IFRyYW5zYWN0aW9uYWwKK01lbW9yeSBBQkkgc3BlY2lmaWNhdGlvbiBkb2N1bWVudCAoUmV2aXNpb24gMS4xLCBNYXkgNiAyMDA5KS4gIFRoaXMgaXMKK2FuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHdob3NlIGludGVyZmFjZSBtYXkgY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucworb2YgR0NDLCBhcyB0aGUgb2ZmaWNpYWwgc3BlY2lmaWNhdGlvbiBjaGFuZ2VzLiAgUGxlYXNlIG5vdGUgdGhhdCBub3QKK2FsbCBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQgZm9yIHRoaXMgZmVhdHVyZS4KKworICAgICA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBHQ0MncyBzdXBwb3J0IGZvciB0cmFuc2FjdGlvbmFsIG1lbW9yeSwKK1NlZSA8YSBocmVmPSIuLi9saWJpdG0vRW5hYmxpbmctbGliaXRtLmh0bWwjRW5hYmxpbmctbGliaXRtIj5UaGUgR05VIFRyYW5zYWN0aW9uYWwgTWVtb3J5IExpYnJhcnk8L2E+LgorCisgICAgIDxwPk5vdGUgdGhhdCB0aGUgdHJhbnNhY3Rpb25hbCBtZW1vcnkgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIHdpdGgKK25vbi1jYWxsIGV4Y2VwdGlvbnMgKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm9uLWNhbGwtZXhjZXB0aW9uczwvc3Bhbj48L3NhbXA+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbXMtZXh0ZW5zaW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm1zXzAwMmRleHRlbnNpb25zLTExNiI+PC9hPkFjY2VwdCBzb21lIG5vbi1zdGFuZGFyZCBjb25zdHJ1Y3RzIHVzZWQgaW4gTWljcm9zb2Z0IGhlYWRlciBmaWxlcy4KKworICAgICA8cD5JbiBDKysgY29kZSwgdGhpcyBhbGxvd3MgbWVtYmVyIG5hbWVzIGluIHN0cnVjdHVyZXMgdG8gYmUgc2ltaWxhcgordG8gcHJldmlvdXMgdHlwZXMgZGVjbGFyYXRpb25zLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHR5cGVkZWYgaW50IFVPVzsKKyAgICAgICAgICBzdHJ1Y3QgQUJDIHsKKyAgICAgICAgICAgIFVPVyBVT1c7CisgICAgICAgICAgfTsKKzwvcHJlPgorICAgICA8cD5Tb21lIGNhc2VzIG9mIHVubmFtZWQgZmllbGRzIGluIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBhcmUgb25seQorYWNjZXB0ZWQgd2l0aCB0aGlzIG9wdGlvbi4gIFNlZSA8YSBocmVmPSJVbm5hbWVkLUZpZWxkcy5odG1sI1VubmFtZWQtRmllbGRzIj5Vbm5hbWVkIHN0cnVjdC91bmlvbiBmaWVsZHMgd2l0aGluIHN0cnVjdHMvdW5pb25zPC9hPiwgZm9yIGRldGFpbHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnBsYW45LWV4dGVuc2lvbnM8L2NvZGU+PGRkPkFjY2VwdCBzb21lIG5vbi1zdGFuZGFyZCBjb25zdHJ1Y3RzIHVzZWQgaW4gUGxhbiA5IGNvZGUuCisKKyAgICAgPHA+VGhpcyBlbmFibGVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbXMtZXh0ZW5zaW9uczwvc3Bhbj48L3NhbXA+LCBwZXJtaXRzIHBhc3NpbmcgcG9pbnRlcnMgdG8KK3N0cnVjdHVyZXMgd2l0aCBhbm9ueW1vdXMgZmllbGRzIHRvIGZ1bmN0aW9ucyB0aGF0IGV4cGVjdCBwb2ludGVycyB0bworZWxlbWVudHMgb2YgdGhlIHR5cGUgb2YgdGhlIGZpZWxkLCBhbmQgcGVybWl0cyByZWZlcnJpbmcgdG8gYW5vbnltb3VzCitmaWVsZHMgZGVjbGFyZWQgdXNpbmcgYSB0eXBlZGVmLiAgU2VlIDxhIGhyZWY9IlVubmFtZWQtRmllbGRzLmh0bWwjVW5uYW1lZC1GaWVsZHMiPlVubmFtZWQgc3RydWN0L3VuaW9uIGZpZWxkcyB3aXRoaW4gc3RydWN0cy91bmlvbnM8L2E+LCBmb3IgZGV0YWlscy4gIFRoaXMgaXMgb25seQorc3VwcG9ydGVkIGZvciBDLCBub3QgQysrLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXRyaWdyYXBoczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdHJpZ3JhcGhzLTExNyI+PC9hPlN1cHBvcnQgSVNPIEMgdHJpZ3JhcGhzLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb3B0aW9uIChhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZDwvc3Bhbj48L3NhbXA+CitvcHRpb25zIGZvciBzdHJpY3QgSVNPIEMgY29uZm9ybWFuY2UpIGltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXRyaWdyYXBoczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXRyYWRpdGlvbmFsLUMtbGFuZ3VhZ2UtMTE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtQy1sYW5ndWFnZV8wMDJjLXRyYWRpdGlvbmFsLTExOSI+PC9hPjxicj48ZHQ+PGNvZGU+LXRyYWRpdGlvbmFsPC9jb2RlPjxkdD48Y29kZT4tdHJhZGl0aW9uYWwtY3BwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC10cmFkaXRpb25hbF8wMDJkY3BwLTEyMCI+PC9hPjxhIG5hbWU9ImluZGV4LXRyYWRpdGlvbmFsLTEyMSI+PC9hPkZvcm1lcmx5LCB0aGVzZSBvcHRpb25zIGNhdXNlZCBHQ0MgdG8gYXR0ZW1wdCB0byBlbXVsYXRlIGEgcHJlLXN0YW5kYXJkCitDIGNvbXBpbGVyLiAgVGhleSBhcmUgbm93IG9ubHkgc3VwcG9ydGVkIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4gc3dpdGNoLiAKK1RoZSBwcmVwcm9jZXNzb3IgY29udGludWVzIHRvIHN1cHBvcnQgYSBwcmUtc3RhbmRhcmQgbW9kZS4gIFNlZSB0aGUgR05VCitDUFAgbWFudWFsIGZvciBkZXRhaWxzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZjb25kLW1pc21hdGNoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mY29uZF8wMDJkbWlzbWF0Y2gtMTIyIj48L2E+QWxsb3cgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgd2l0aCBtaXNtYXRjaGVkIHR5cGVzIGluIHRoZSBzZWNvbmQgYW5kCit0aGlyZCBhcmd1bWVudHMuICBUaGUgdmFsdWUgb2Ygc3VjaCBhbiBleHByZXNzaW9uIGlzIHZvaWQuICBUaGlzIG9wdGlvbgoraXMgbm90IHN1cHBvcnRlZCBmb3IgQysrLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZsYXgtdmVjdG9yLWNvbnZlcnNpb25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbGF4XzAwMmR2ZWN0b3JfMDAyZGNvbnZlcnNpb25zLTEyMyI+PC9hPkFsbG93IGltcGxpY2l0IGNvbnZlcnNpb25zIGJldHdlZW4gdmVjdG9ycyB3aXRoIGRpZmZlcmluZyBudW1iZXJzIG9mCitlbGVtZW50cyBhbmQvb3IgaW5jb21wYXRpYmxlIGVsZW1lbnQgdHlwZXMuICBUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlCit1c2VkIGZvciBuZXcgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdW5zaWduZWQtY2hhcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnVuc2lnbmVkXzAwMmRjaGFyLTEyNCI+PC9hPkxldCB0aGUgdHlwZSA8Y29kZT5jaGFyPC9jb2RlPiBiZSB1bnNpZ25lZCwgbGlrZSA8Y29kZT51bnNpZ25lZCBjaGFyPC9jb2RlPi4KKworICAgICA8cD5FYWNoIGtpbmQgb2YgbWFjaGluZSBoYXMgYSBkZWZhdWx0IGZvciB3aGF0IDxjb2RlPmNoYXI8L2NvZGU+IHNob3VsZAorYmUuICBJdCBpcyBlaXRoZXIgbGlrZSA8Y29kZT51bnNpZ25lZCBjaGFyPC9jb2RlPiBieSBkZWZhdWx0IG9yIGxpa2UKKzxjb2RlPnNpZ25lZCBjaGFyPC9jb2RlPiBieSBkZWZhdWx0LgorCisgICAgIDxwPklkZWFsbHksIGEgcG9ydGFibGUgcHJvZ3JhbSBzaG91bGQgYWx3YXlzIHVzZSA8Y29kZT5zaWduZWQgY2hhcjwvY29kZT4gb3IKKzxjb2RlPnVuc2lnbmVkIGNoYXI8L2NvZGU+IHdoZW4gaXQgZGVwZW5kcyBvbiB0aGUgc2lnbmVkbmVzcyBvZiBhbiBvYmplY3QuIAorQnV0IG1hbnkgcHJvZ3JhbXMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdXNlIHBsYWluIDxjb2RlPmNoYXI8L2NvZGU+IGFuZAorZXhwZWN0IGl0IHRvIGJlIHNpZ25lZCwgb3IgZXhwZWN0IGl0IHRvIGJlIHVuc2lnbmVkLCBkZXBlbmRpbmcgb24gdGhlCittYWNoaW5lcyB0aGV5IHdlcmUgd3JpdHRlbiBmb3IuICBUaGlzIG9wdGlvbiwgYW5kIGl0cyBpbnZlcnNlLCBsZXQgeW91CittYWtlIHN1Y2ggYSBwcm9ncmFtIHdvcmsgd2l0aCB0aGUgb3Bwb3NpdGUgZGVmYXVsdC4KKworICAgICA8cD5UaGUgdHlwZSA8Y29kZT5jaGFyPC9jb2RlPiBpcyBhbHdheXMgYSBkaXN0aW5jdCB0eXBlIGZyb20gZWFjaCBvZgorPGNvZGU+c2lnbmVkIGNoYXI8L2NvZGU+IG9yIDxjb2RlPnVuc2lnbmVkIGNoYXI8L2NvZGU+LCBldmVuIHRob3VnaCBpdHMgYmVoYXZpb3IKK2lzIGFsd2F5cyBqdXN0IGxpa2Ugb25lIG9mIHRob3NlIHR3by4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2lnbmVkLWNoYXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzaWduZWRfMDAyZGNoYXItMTI1Ij48L2E+TGV0IHRoZSB0eXBlIDxjb2RlPmNoYXI8L2NvZGU+IGJlIHNpZ25lZCwgbGlrZSA8Y29kZT5zaWduZWQgY2hhcjwvY29kZT4uCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoaXMgaXMgZXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXVuc2lnbmVkLWNoYXI8L3NwYW4+PC9zYW1wPiwgd2hpY2ggaXMKK3RoZSBuZWdhdGl2ZSBmb3JtIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5zaWduZWQtY2hhcjwvc3Bhbj48L3NhbXA+LiAgTGlrZXdpc2UsIHRoZSBvcHRpb24KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tc2lnbmVkLWNoYXI8L3NwYW4+PC9zYW1wPiBpcyBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5zaWduZWQtY2hhcjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzaWduZWQtYml0ZmllbGRzPC9jb2RlPjxkdD48Y29kZT4tZnVuc2lnbmVkLWJpdGZpZWxkczwvY29kZT48ZHQ+PGNvZGU+LWZuby1zaWduZWQtYml0ZmllbGRzPC9jb2RlPjxkdD48Y29kZT4tZm5vLXVuc2lnbmVkLWJpdGZpZWxkczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnNpZ25lZF8wMDJkYml0ZmllbGRzLTEyNiI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bnNpZ25lZF8wMDJkYml0ZmllbGRzLTEyNyI+PC9hPjxhIG5hbWU9ImluZGV4LWZub18wMDJkc2lnbmVkXzAwMmRiaXRmaWVsZHMtMTI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmR1bnNpZ25lZF8wMDJkYml0ZmllbGRzLTEyOSI+PC9hPlRoZXNlIG9wdGlvbnMgY29udHJvbCB3aGV0aGVyIGEgYml0LWZpZWxkIGlzIHNpZ25lZCBvciB1bnNpZ25lZCwgd2hlbiB0aGUKK2RlY2xhcmF0aW9uIGRvZXMgbm90IHVzZSBlaXRoZXIgPGNvZGU+c2lnbmVkPC9jb2RlPiBvciA8Y29kZT51bnNpZ25lZDwvY29kZT4uICBCeQorZGVmYXVsdCwgc3VjaCBhIGJpdC1maWVsZCBpcyBzaWduZWQsIGJlY2F1c2UgdGhpcyBpcyBjb25zaXN0ZW50OiB0aGUKK2Jhc2ljIGludGVnZXIgdHlwZXMgc3VjaCBhcyA8Y29kZT5pbnQ8L2NvZGU+IGFyZSBzaWduZWQgdHlwZXMuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQy1FeHRlbnNpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0MtRXh0ZW5zaW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjliNzIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0MtRXh0ZW5zaW9ucy5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DIEV4dGVuc2lvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbi5odG1sI0NfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uIiB0aXRsZT0iQysrIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiIHRpdGxlPSJDKysgRXh0ZW5zaW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDLUV4dGVuc2lvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiPkMrKyBFeHRlbnNpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24uaHRtbCNDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbiI+QysrIEltcGxlbWVudGF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjYgRXh0ZW5zaW9ucyB0byB0aGUgQyBMYW5ndWFnZSBGYW1pbHk8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1leHRlbnNpb25zXzAwMmMtQy1sYW5ndWFnZS0yMzk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtQy1sYW5ndWFnZS1leHRlbnNpb25zLTIzOTkiPjwvYT4KKzxhIG5hbWU9ImluZGV4LXBlZGFudGljLTI0MDAiPjwvYT5HTlUgQyBwcm92aWRlcyBzZXZlcmFsIGxhbmd1YWdlIGZlYXR1cmVzIG5vdCBmb3VuZCBpbiBJU08gc3RhbmRhcmQgQy4gCisoVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBkaXJlY3RzIEdDQyB0byBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSBpZgorYW55IG9mIHRoZXNlIGZlYXR1cmVzIGlzIHVzZWQuKSAgVG8gdGVzdCBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGVzZQorZmVhdHVyZXMgaW4gY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGNoZWNrIGZvciBhIHByZWRlZmluZWQgbWFjcm8KKzxjb2RlPl9fR05VQ19fPC9jb2RlPiwgd2hpY2ggaXMgYWx3YXlzIGRlZmluZWQgdW5kZXIgR0NDLgorCisgPHA+VGhlc2UgZXh0ZW5zaW9ucyBhcmUgYXZhaWxhYmxlIGluIEMgYW5kIE9iamVjdGl2ZS1DLiAgTW9zdCBvZiB0aGVtIGFyZQorYWxzbyBhdmFpbGFibGUgaW4gQysrLiAgU2VlIDxhIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIj5FeHRlbnNpb25zIHRvIHRoZSBDKysgTGFuZ3VhZ2U8L2E+LCBmb3IgZXh0ZW5zaW9ucyB0aGF0IGFwcGx5IDxlbT5vbmx5PC9lbT4gdG8gQysrLgorCisgPHA+U29tZSBmZWF0dXJlcyB0aGF0IGFyZSBpbiBJU08gQzk5IGJ1dCBub3QgQzkwIG9yIEMrKyBhcmUgYWxzbywgYXMKK2V4dGVuc2lvbnMsIGFjY2VwdGVkIGJ5IEdDQyBpbiBDOTAgbW9kZSBhbmQgaW4gQysrLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU3RhdGVtZW50LUV4cHJzLmh0bWwjU3RhdGVtZW50LUV4cHJzIj5TdGF0ZW1lbnQgRXhwcnM8L2E+OiAgICAgIFB1dHRpbmcgc3RhdGVtZW50cyBhbmQgZGVjbGFyYXRpb25zIGluc2lkZSBleHByZXNzaW9ucy4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJMb2NhbC1MYWJlbHMuaHRtbCNMb2NhbC1MYWJlbHMiPkxvY2FsIExhYmVsczwvYT46ICAgICAgICAgTGFiZWxzIGxvY2FsIHRvIGEgYmxvY2suIAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI0xhYmVscy1hcy1WYWx1ZXMiPkxhYmVscyBhcyBWYWx1ZXM8L2E+OiAgICAgR2V0dGluZyBwb2ludGVycyB0byBsYWJlbHMsIGFuZCBjb21wdXRlZCBnb3Rvcy4gCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJOZXN0ZWQtRnVuY3Rpb25zLmh0bWwjTmVzdGVkLUZ1bmN0aW9ucyI+TmVzdGVkIEZ1bmN0aW9uczwvYT46ICAgICBBcyBpbiBBbGdvbCBhbmQgUGFzY2FsLCBsZXhpY2FsIHNjb3Bpbmcgb2YgZnVuY3Rpb25zLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkNvbnN0cnVjdGluZy1DYWxscy5odG1sI0NvbnN0cnVjdGluZy1DYWxscyI+Q29uc3RydWN0aW5nIENhbGxzPC9hPjogICBEaXNwYXRjaGluZyBhIGNhbGwgdG8gYW5vdGhlciBmdW5jdGlvbi4gCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJUeXBlb2YuaHRtbCNUeXBlb2YiPlR5cGVvZjwvYT46ICAgICAgICAgICAgICAgPGNvZGU+dHlwZW9mPC9jb2RlPjogcmVmZXJyaW5nIHRvIHRoZSB0eXBlIG9mIGFuIGV4cHJlc3Npb24uIAorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjQ29uZGl0aW9uYWxzIj5Db25kaXRpb25hbHM8L2E+OiAgICAgICAgIE9taXR0aW5nIHRoZSBtaWRkbGUgb3BlcmFuZCBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Pzo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZXhwcmVzc2lvbi4gCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJfMDA1Zl8wMDVmaW50MTI4Lmh0bWwjZ190XzAwNWZfMDA1ZmludDEyOCI+X19pbnQxMjg8L2E+OiAJCQkxMjgtYml0IGludGVnZXJzLS0tPGNvZGU+X19pbnQxMjg8L2NvZGU+LiAKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkxvbmctTG9uZy5odG1sI0xvbmctTG9uZyI+TG9uZyBMb25nPC9hPjogICAgICAgICAgICBEb3VibGUtd29yZCBpbnRlZ2Vycy0tLTxjb2RlPmxvbmcgbG9uZyBpbnQ8L2NvZGU+LiAKKzxsaT48YSBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCI+Q29tcGxleDwvYT46ICAgICAgICAgICAgICBEYXRhIHR5cGVzIGZvciBjb21wbGV4IG51bWJlcnMuIAorPGxpPjxhIGhyZWY9IkZsb2F0aW5nLVR5cGVzLmh0bWwjRmxvYXRpbmctVHlwZXMiPkZsb2F0aW5nIFR5cGVzPC9hPjogICAgICAgQWRkaXRpb25hbCBGbG9hdGluZyBUeXBlcy4gCis8bGk+PGEgaHJlZj0iSGFsZl8wMDJkUHJlY2lzaW9uLmh0bWwjSGFsZl8wMDJkUHJlY2lzaW9uIj5IYWxmLVByZWNpc2lvbjwvYT46ICAgICAgIEhhbGYtUHJlY2lzaW9uIEZsb2F0aW5nIFBvaW50LiAKKzxsaT48YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjRGVjaW1hbC1GbG9hdCI+RGVjaW1hbCBGbG9hdDwvYT46ICAgICAgICBEZWNpbWFsIEZsb2F0aW5nIFR5cGVzLiAKKzxsaT48YSBocmVmPSJIZXgtRmxvYXRzLmh0bWwjSGV4LUZsb2F0cyI+SGV4IEZsb2F0czwvYT46ICAgICAgICAgICBIZXhhZGVjaW1hbCBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuIAorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+OiAgICAgICAgICBGaXhlZC1Qb2ludCBUeXBlcy4gCis8bGk+PGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+OiBOYW1lZCBhZGRyZXNzIHNwYWNlcy4gCis8bGk+PGEgaHJlZj0iWmVyby1MZW5ndGguaHRtbCNaZXJvLUxlbmd0aCI+WmVybyBMZW5ndGg8L2E+OiAgICAgICAgICBaZXJvLWxlbmd0aCBhcnJheXMuIAorPGxpPjxhIGhyZWY9IkVtcHR5LVN0cnVjdHVyZXMuaHRtbCNFbXB0eS1TdHJ1Y3R1cmVzIj5FbXB0eSBTdHJ1Y3R1cmVzPC9hPjogICAgIFN0cnVjdHVyZXMgd2l0aCBubyBtZW1iZXJzLiAKKzxsaT48YSBocmVmPSJWYXJpYWJsZS1MZW5ndGguaHRtbCNWYXJpYWJsZS1MZW5ndGgiPlZhcmlhYmxlIExlbmd0aDwvYT46ICAgICAgQXJyYXlzIHdob3NlIGxlbmd0aCBpcyBjb21wdXRlZCBhdCBydW4gdGltZS4gCis8bGk+PGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIj5WYXJpYWRpYyBNYWNyb3M8L2E+OiAgICAgIE1hY3JvcyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gCis8bGk+PGEgaHJlZj0iRXNjYXBlZC1OZXdsaW5lcy5odG1sI0VzY2FwZWQtTmV3bGluZXMiPkVzY2FwZWQgTmV3bGluZXM8L2E+OiAgICAgU2xpZ2h0bHkgbG9vc2VyIHJ1bGVzIGZvciBlc2NhcGVkIG5ld2xpbmVzLiAKKzxsaT48YSBocmVmPSJTdWJzY3JpcHRpbmcuaHRtbCNTdWJzY3JpcHRpbmciPlN1YnNjcmlwdGluZzwvYT46ICAgICAgICAgQW55IGFycmF5IGNhbiBiZSBzdWJzY3JpcHRlZCwgZXZlbiBpZiBub3QgYW4gbHZhbHVlLiAKKzxsaT48YSBocmVmPSJQb2ludGVyLUFyaXRoLmh0bWwjUG9pbnRlci1Bcml0aCI+UG9pbnRlciBBcml0aDwvYT46ICAgICAgICBBcml0aG1ldGljIG9uIDxjb2RlPnZvaWQ8L2NvZGU+LXBvaW50ZXJzIGFuZCBmdW5jdGlvbiBwb2ludGVycy4gCis8bGk+PGEgaHJlZj0iSW5pdGlhbGl6ZXJzLmh0bWwjSW5pdGlhbGl6ZXJzIj5Jbml0aWFsaXplcnM8L2E+OiAgICAgICAgIE5vbi1jb25zdGFudCBpbml0aWFsaXplcnMuIAorPGxpPjxhIGhyZWY9IkNvbXBvdW5kLUxpdGVyYWxzLmh0bWwjQ29tcG91bmQtTGl0ZXJhbHMiPkNvbXBvdW5kIExpdGVyYWxzPC9hPjogICAgQ29tcG91bmQgbGl0ZXJhbHMgZ2l2ZSBzdHJ1Y3R1cmVzLCB1bmlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFycmF5cyBhcyB2YWx1ZXMuIAorPGxpPjxhIGhyZWY9IkRlc2lnbmF0ZWQtSW5pdHMuaHRtbCNEZXNpZ25hdGVkLUluaXRzIj5EZXNpZ25hdGVkIEluaXRzPC9hPjogICAgIExhYmVsaW5nIGVsZW1lbnRzIG9mIGluaXRpYWxpemVycy4gCis8bGk+PGEgaHJlZj0iQ2FzZS1SYW5nZXMuaHRtbCNDYXNlLVJhbmdlcyI+Q2FzZSBSYW5nZXM8L2E+OiAgICAgICAgICBgY2FzZSAxIC4uLiA5JyBhbmQgc3VjaC4gCis8bGk+PGEgaHJlZj0iQ2FzdC10by1Vbmlvbi5odG1sI0Nhc3QtdG8tVW5pb24iPkNhc3QgdG8gVW5pb248L2E+OiAgICAgICAgQ2FzdGluZyB0byB1bmlvbiB0eXBlIGZyb20gYW55IG1lbWJlciBvZiB0aGUgdW5pb24uIAorPGxpPjxhIGhyZWY9Ik1peGVkLURlY2xhcmF0aW9ucy5odG1sI01peGVkLURlY2xhcmF0aW9ucyI+TWl4ZWQgRGVjbGFyYXRpb25zPC9hPjogICBNaXhpbmcgZGVjbGFyYXRpb25zIGFuZCBjb2RlLiAKKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT46ICBEZWNsYXJpbmcgdGhhdCBmdW5jdGlvbnMgaGF2ZSBubyBzaWRlIGVmZmVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGF0IHRoZXkgY2FuIG5ldmVyIHJldHVybi4gCis8bGk+PGEgaHJlZj0iQXR0cmlidXRlLVN5bnRheC5odG1sI0F0dHJpYnV0ZS1TeW50YXgiPkF0dHJpYnV0ZSBTeW50YXg8L2E+OiAgICAgRm9ybWFsIHN5bnRheCBmb3IgYXR0cmlidXRlcy4gCis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tUHJvdG90eXBlcy5odG1sI0Z1bmN0aW9uLVByb3RvdHlwZXMiPkZ1bmN0aW9uIFByb3RvdHlwZXM8L2E+OiAgUHJvdG90eXBlIGRlY2xhcmF0aW9ucyBhbmQgb2xkLXN0eWxlIGRlZmluaXRpb25zLiAKKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1Db21tZW50cy5odG1sI0NfMDAyYl8wMDJiLUNvbW1lbnRzIj5DKysgQ29tbWVudHM8L2E+OiAgICAgICAgIEMrKyBjb21tZW50cyBhcmUgcmVjb2duaXplZC4gCis8bGk+PGEgaHJlZj0iRG9sbGFyLVNpZ25zLmh0bWwjRG9sbGFyLVNpZ25zIj5Eb2xsYXIgU2lnbnM8L2E+OiAgICAgICAgIERvbGxhciBzaWduIGlzIGFsbG93ZWQgaW4gaWRlbnRpZmllcnMuIAorPGxpPjxhIGhyZWY9IkNoYXJhY3Rlci1Fc2NhcGVzLmh0bWwjQ2hhcmFjdGVyLUVzY2FwZXMiPkNoYXJhY3RlciBFc2NhcGVzPC9hPjogICAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdGFuZHMgZm9yIHRoZSBjaGFyYWN0ZXIgJmx0O0VTQyZndDsuIAorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPjogIFNwZWNpZnlpbmcgYXR0cmlidXRlcyBvZiB2YXJpYWJsZXMuIAorPGxpPjxhIGhyZWY9IlR5cGUtQXR0cmlidXRlcy5odG1sI1R5cGUtQXR0cmlidXRlcyI+VHlwZSBBdHRyaWJ1dGVzPC9hPjogICAgICBTcGVjaWZ5aW5nIGF0dHJpYnV0ZXMgb2YgdHlwZXMuIAorPGxpPjxhIGhyZWY9IkFsaWdubWVudC5odG1sI0FsaWdubWVudCI+QWxpZ25tZW50PC9hPjogICAgICAgICAgICBJbnF1aXJpbmcgYWJvdXQgdGhlIGFsaWdubWVudCBvZiBhIHR5cGUgb3IgdmFyaWFibGUuIAorPGxpPjxhIGhyZWY9IklubGluZS5odG1sI0lubGluZSI+SW5saW5lPC9hPjogICAgICAgICAgICAgICBEZWZpbmluZyBpbmxpbmUgZnVuY3Rpb25zIChhcyBmYXN0IGFzIG1hY3JvcykuIAorPGxpPjxhIGhyZWY9IlZvbGF0aWxlcy5odG1sI1ZvbGF0aWxlcyI+Vm9sYXRpbGVzPC9hPjogICAgICAgICAgICBXaGF0IGNvbnN0aXR1dGVzIGFuIGFjY2VzcyB0byBhIHZvbGF0aWxlIG9iamVjdC4gCis8bGk+PGEgaHJlZj0iRXh0ZW5kZWQtQXNtLmh0bWwjRXh0ZW5kZWQtQXNtIj5FeHRlbmRlZCBBc208L2E+OiAgICAgICAgIEFzc2VtYmxlciBpbnN0cnVjdGlvbnMgd2l0aCBDIGV4cHJlc3Npb25zIGFzIG9wZXJhbmRzLiAKKyAgICAgICAgICAgICAgICAgICAgICAgIChXaXRoIHRoZW0geW91IGNhbiBkZWZpbmUgYGBidWlsdC1pbicnIGZ1bmN0aW9ucy4pIAorPGxpPjxhIGhyZWY9IkNvbnN0cmFpbnRzLmh0bWwjQ29uc3RyYWludHMiPkNvbnN0cmFpbnRzPC9hPjogICAgICAgICAgQ29uc3RyYWludHMgZm9yIGFzbSBvcGVyYW5kcworPGxpPjxhIGhyZWY9IkFzbS1MYWJlbHMuaHRtbCNBc20tTGFiZWxzIj5Bc20gTGFiZWxzPC9hPjogICAgICAgICAgIFNwZWNpZnlpbmcgdGhlIGFzc2VtYmxlciBuYW1lIHRvIHVzZSBmb3IgYSBDIHN5bWJvbC4gCis8bGk+PGEgaHJlZj0iRXhwbGljaXQtUmVnLVZhcnMuaHRtbCNFeHBsaWNpdC1SZWctVmFycyI+RXhwbGljaXQgUmVnIFZhcnM8L2E+OiAgICBEZWZpbmluZyB2YXJpYWJsZXMgcmVzaWRpbmcgaW4gc3BlY2lmaWVkIHJlZ2lzdGVycy4gCis8bGk+PGEgaHJlZj0iQWx0ZXJuYXRlLUtleXdvcmRzLmh0bWwjQWx0ZXJuYXRlLUtleXdvcmRzIj5BbHRlcm5hdGUgS2V5d29yZHM8L2E+OiAgIDxjb2RlPl9fY29uc3RfXzwvY29kZT4sIDxjb2RlPl9fYXNtX188L2NvZGU+LCBldGMuLCBmb3IgaGVhZGVyIGZpbGVzLiAKKzxsaT48YSBocmVmPSJJbmNvbXBsZXRlLUVudW1zLmh0bWwjSW5jb21wbGV0ZS1FbnVtcyI+SW5jb21wbGV0ZSBFbnVtczwvYT46ICAgICA8Y29kZT5lbnVtIGZvbzs8L2NvZGU+LCB3aXRoIGRldGFpbHMgdG8gZm9sbG93LiAKKzxsaT48YSBocmVmPSJGdW5jdGlvbi1OYW1lcy5odG1sI0Z1bmN0aW9uLU5hbWVzIj5GdW5jdGlvbiBOYW1lczwvYT46ICAgICAgIFByaW50YWJsZSBzdHJpbmdzIHdoaWNoIGFyZSB0aGUgbmFtZSBvZiB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uIAorPGxpPjxhIGhyZWY9IlJldHVybi1BZGRyZXNzLmh0bWwjUmV0dXJuLUFkZHJlc3MiPlJldHVybiBBZGRyZXNzPC9hPjogICAgICAgR2V0dGluZyB0aGUgcmV0dXJuIG9yIGZyYW1lIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbi4gCis8bGk+PGEgaHJlZj0iVmVjdG9yLUV4dGVuc2lvbnMuaHRtbCNWZWN0b3ItRXh0ZW5zaW9ucyI+VmVjdG9yIEV4dGVuc2lvbnM8L2E+OiAgICBVc2luZyB2ZWN0b3IgaW5zdHJ1Y3Rpb25zIHRocm91Z2ggYnVpbHQtaW4gZnVuY3Rpb25zLiAKKzxsaT48YSBocmVmPSJPZmZzZXRvZi5odG1sI09mZnNldG9mIj5PZmZzZXRvZjwvYT46ICAgICAgICAgICAgIFNwZWNpYWwgc3ludGF4IGZvciBpbXBsZW1lbnRpbmcgPGNvZGU+b2Zmc2V0b2Y8L2NvZGU+LiAKKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+OiAgICAgIExlZ2FjeSBidWlsdC1pbiBmdW5jdGlvbnMgZm9yIGF0b21pYyBtZW1vcnkgYWNjZXNzLiAKKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+OiAgICBBdG9taWMgYnVpbHQtaW4gZnVuY3Rpb25zIHdpdGggbWVtb3J5IG1vZGVsLiAKKzxsaT48YSBocmVmPSJ4ODYtc3BlY2lmaWMtbWVtb3J5LW1vZGVsLWV4dGVuc2lvbnMtZm9yLXRyYW5zYWN0aW9uYWwtbWVtb3J5Lmh0bWwjeDg2LXNwZWNpZmljLW1lbW9yeS1tb2RlbC1leHRlbnNpb25zLWZvci10cmFuc2FjdGlvbmFsLW1lbW9yeSI+eDg2IHNwZWNpZmljIG1lbW9yeSBtb2RlbCBleHRlbnNpb25zIGZvciB0cmFuc2FjdGlvbmFsIG1lbW9yeTwvYT46ICB4ODYgbWVtb3J5IG1vZGVscy4gCis8bGk+PGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+OiAgQnVpbHQtaW4gZnVuY3Rpb25zIGZvciBsaW1pdGVkIGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tpbmcuIAorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjogICAgICAgT3RoZXIgYnVpbHQtaW4gZnVuY3Rpb25zLiAKKzxsaT48YSBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPlRhcmdldCBCdWlsdGluczwvYT46ICAgICAgQnVpbHQtaW4gZnVuY3Rpb25zIHNwZWNpZmljIHRvIHBhcnRpY3VsYXIgdGFyZ2V0cy4gCis8bGk+PGEgaHJlZj0iVGFyZ2V0LUZvcm1hdC1DaGVja3MuaHRtbCNUYXJnZXQtRm9ybWF0LUNoZWNrcyI+VGFyZ2V0IEZvcm1hdCBDaGVja3M8L2E+OiAgRm9ybWF0IGNoZWNrcyBzcGVjaWZpYyB0byBwYXJ0aWN1bGFyIHRhcmdldHMuIAorPGxpPjxhIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPjogICAgICAgICAgICAgIFByYWdtYXMgYWNjZXB0ZWQgYnkgR0NDLiAKKzxsaT48YSBocmVmPSJVbm5hbWVkLUZpZWxkcy5odG1sI1VubmFtZWQtRmllbGRzIj5Vbm5hbWVkIEZpZWxkczwvYT46ICAgICAgIFVubmFtZWQgc3RydWN0L3VuaW9uIGZpZWxkcyB3aXRoaW4gc3RydWN0cy91bmlvbnMuIAorPGxpPjxhIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIj5UaHJlYWQtTG9jYWw8L2E+OiAgICAgICAgIFBlci10aHJlYWQgdmFyaWFibGVzLiAKKzxsaT48YSBocmVmPSJCaW5hcnktY29uc3RhbnRzLmh0bWwjQmluYXJ5LWNvbnN0YW50cyI+QmluYXJ5IGNvbnN0YW50czwvYT46ICAgICBCaW5hcnkgY29uc3RhbnRzIHVzaW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjBiPC9zcGFuPjwvc2FtcD4mcnNxdW87IHByZWZpeC4gCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DLUltcGxlbWVudGF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0MtSW1wbGVtZW50YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmMxMjJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DLUltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QyBJbXBsZW1lbnRhdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyIgdGl0bGU9Ikludm9raW5nIEdDQyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uLmh0bWwjQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24iIHRpdGxlPSJDKysgSW1wbGVtZW50YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQy1JbXBsZW1lbnRhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbi5odG1sI0NfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uIj5DKysgSW1wbGVtZW50YXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj40IEMgSW1wbGVtZW50YXRpb24tZGVmaW5lZCBiZWhhdmlvcjwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yXzAwMmMtQy1sYW5ndWFnZS0yMzkyIj48L2E+CitBIGNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb24gb2YgSVNPIEMgaXMgcmVxdWlyZWQgdG8gZG9jdW1lbnQgaXRzCitjaG9pY2Ugb2YgYmVoYXZpb3IgaW4gZWFjaCBvZiB0aGUgYXJlYXMgdGhhdCBhcmUgZGVzaWduYXRlZAorJmxkcXVvO2ltcGxlbWVudGF0aW9uIGRlZmluZWQmcmRxdW87LiAgVGhlIGZvbGxvd2luZyBsaXN0cyBhbGwgc3VjaCBhcmVhcywKK2Fsb25nIHdpdGggdGhlIHNlY3Rpb24gbnVtYmVycyBmcm9tIHRoZSBJU08vSUVDIDk4OTk6MTk5MCBhbmQgSVNPL0lFQworOTg5OToxOTk5IHN0YW5kYXJkcy4gIFNvbWUgYXJlYXMgYXJlIG9ubHkgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBpbgorb25lIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkLgorCisgPHA+U29tZSBjaG9pY2VzIGRlcGVuZCBvbiB0aGUgZXh0ZXJuYWxseSBkZXRlcm1pbmVkIEFCSSBmb3IgdGhlIHBsYXRmb3JtCisoaW5jbHVkaW5nIHN0YW5kYXJkIGNoYXJhY3RlciBlbmNvZGluZ3MpIHdoaWNoIEdDQyBmb2xsb3dzOyB0aGVzZSBhcmUKK2xpc3RlZCBhcyAmbGRxdW87ZGV0ZXJtaW5lZCBieSBBQkkmcmRxdW87IGJlbG93LiAgU2VlIDxhIGhyZWY9IkNvbXBhdGliaWxpdHkuaHRtbCNDb21wYXRpYmlsaXR5Ij5CaW5hcnkgQ29tcGF0aWJpbGl0eTwvYT4sIGFuZCA8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvcmVhZGluZ3MuaHRtbCI+aHR0cDovL2djYy5nbnUub3JnL3JlYWRpbmdzLmh0bWw8L2E+LiAgU29tZQorY2hvaWNlcyBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgcHJlcHJvY2Vzc29yIG1hbnVhbC4gCitTZWUgPGEgaHJlZj0iLi4vY3BwL0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IiPkltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+LiAgU29tZSBjaG9pY2VzIGFyZSBtYWRlIGJ5IHRoZQorbGlicmFyeSBhbmQgb3BlcmF0aW5nIHN5c3RlbSAob3Igb3RoZXIgZW52aXJvbm1lbnQgd2hlbiBjb21waWxpbmcgZm9yCithIGZyZWVzdGFuZGluZyBlbnZpcm9ubWVudCk7IHJlZmVyIHRvIHRoZWlyIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJUcmFuc2xhdGlvbi1pbXBsZW1lbnRhdGlvbi5odG1sI1RyYW5zbGF0aW9uLWltcGxlbWVudGF0aW9uIj5UcmFuc2xhdGlvbiBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkVudmlyb25tZW50LWltcGxlbWVudGF0aW9uLmh0bWwjRW52aXJvbm1lbnQtaW1wbGVtZW50YXRpb24iPkVudmlyb25tZW50IGltcGxlbWVudGF0aW9uPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iSWRlbnRpZmllcnMtaW1wbGVtZW50YXRpb24uaHRtbCNJZGVudGlmaWVycy1pbXBsZW1lbnRhdGlvbiI+SWRlbnRpZmllcnMgaW1wbGVtZW50YXRpb248L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJDaGFyYWN0ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbiI+Q2hhcmFjdGVycyBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkludGVnZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjSW50ZWdlcnMtaW1wbGVtZW50YXRpb24iPkludGVnZXJzIGltcGxlbWVudGF0aW9uPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iRmxvYXRpbmctcG9pbnQtaW1wbGVtZW50YXRpb24uaHRtbCNGbG9hdGluZy1wb2ludC1pbXBsZW1lbnRhdGlvbiI+RmxvYXRpbmcgcG9pbnQgaW1wbGVtZW50YXRpb248L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJBcnJheXMtYW5kLXBvaW50ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjQXJyYXlzLWFuZC1wb2ludGVycy1pbXBsZW1lbnRhdGlvbiI+QXJyYXlzIGFuZCBwb2ludGVycyBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9IkhpbnRzLWltcGxlbWVudGF0aW9uLmh0bWwjSGludHMtaW1wbGVtZW50YXRpb24iPkhpbnRzIGltcGxlbWVudGF0aW9uPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iU3RydWN0dXJlcy11bmlvbnMtZW51bWVyYXRpb25zLWFuZC1iaXRfMDAyZGZpZWxkcy1pbXBsZW1lbnRhdGlvbi5odG1sI1N0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24iPlN0cnVjdHVyZXMgdW5pb25zIGVudW1lcmF0aW9ucyBhbmQgYml0LWZpZWxkcyBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJRdWFsaWZpZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjUXVhbGlmaWVycy1pbXBsZW1lbnRhdGlvbiI+UXVhbGlmaWVycyBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJEZWNsYXJhdG9ycy1pbXBsZW1lbnRhdGlvbi5odG1sI0RlY2xhcmF0b3JzLWltcGxlbWVudGF0aW9uIj5EZWNsYXJhdG9ycyBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnRzLWltcGxlbWVudGF0aW9uLmh0bWwjU3RhdGVtZW50cy1pbXBsZW1lbnRhdGlvbiI+U3RhdGVtZW50cyBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLWRpcmVjdGl2ZXMtaW1wbGVtZW50YXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWRpcmVjdGl2ZXMtaW1wbGVtZW50YXRpb24iPlByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcyBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJMaWJyYXJ5LWZ1bmN0aW9ucy1pbXBsZW1lbnRhdGlvbi5odG1sI0xpYnJhcnktZnVuY3Rpb25zLWltcGxlbWVudGF0aW9uIj5MaWJyYXJ5IGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJBcmNoaXRlY3R1cmUtaW1wbGVtZW50YXRpb24uaHRtbCNBcmNoaXRlY3R1cmUtaW1wbGVtZW50YXRpb24iPkFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJMb2NhbGVfMDAyZHNwZWNpZmljLWJlaGF2aW9yLWltcGxlbWVudGF0aW9uLmh0bWwjTG9jYWxlXzAwMmRzcGVjaWZpYy1iZWhhdmlvci1pbXBsZW1lbnRhdGlvbiI+TG9jYWxlLXNwZWNpZmljIGJlaGF2aW9yIGltcGxlbWVudGF0aW9uPC9hPgorPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQzZYLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQzZYLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzlmNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DNlgtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkM2WCBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIiB0aXRsZT0iQmxhY2tmaW4gT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyIgdGl0bGU9IkNSSVMgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDNlgtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjYgQzZYIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1DNlgtT3B0aW9ucy0xMTk1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWFyY2g9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tYXJjaC0xMTk2Ij48L2E+VGhpcyBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuICBHQ0MgdXNlcyB0aGlzCituYW1lIHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIGl0IGNhbiBlbWl0IHdoZW4gZ2VuZXJhdGluZworYXNzZW1ibHkgY29kZS4gIFBlcm1pc3NpYmxlIG5hbWVzIGFyZTogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jNjJ4PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jNjR4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmM2NHgrPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmM2N3g8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YzY3eCs8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YzY3NHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJpZy1lbmRpYW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1iaWdfMDAyZGVuZGlhbi0xMTk3Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSBiaWctZW5kaWFuIHRhcmdldC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbGl0dGxlLWVuZGlhbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxpdHRsZV8wMDJkZW5kaWFuLTExOTgiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciBhIGxpdHRsZS1lbmRpYW4gdGFyZ2V0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2ltPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2ltLTExOTkiPjwvYT5DaG9vc2Ugc3RhcnR1cCBmaWxlcyBhbmQgbGlua2VyIHNjcmlwdCBzdWl0YWJsZSBmb3IgdGhlIHNpbXVsYXRvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RhdGE9ZGVmYXVsdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNkYXRhXzAwM2RkZWZhdWx0LTEyMDAiPjwvYT5QdXQgc21hbGwgZ2xvYmFsIGFuZCBzdGF0aWMgZGF0YSBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubmVhcmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiwKK3doaWNoIGlzIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIgPGNvZGU+QjE0PC9jb2RlPi4gIFB1dCBzbWFsbCB1bmluaXRpYWxpemVkCitnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ic3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiwgd2hpY2ggaXMgYWRqYWNlbnQKK3RvIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5uZWFyZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLiAgUHV0IHNtYWxsIHJlYWQtb25seSBkYXRhIGludG8gdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5yb2RhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbi4gIFRoZSBjb3JyZXNwb25kaW5nIHNlY3Rpb25zIHVzZWQgZm9yIGxhcmdlCitwaWVjZXMgb2YgZGF0YSBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZmFyZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZmFyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jb25zdDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RhdGE9YWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2RhdGFfMDAzZGFsbC0xMjAxIj48L2E+UHV0IGFsbCBkYXRhLCBub3QganVzdCBzbWFsbCBvYmplY3RzLCBpbnRvIHRoZSBzZWN0aW9ucyByZXNlcnZlZCBmb3IKK3NtYWxsIGRhdGEsIGFuZCB1c2UgYWRkcmVzc2luZyByZWxhdGl2ZSB0byB0aGUgPGNvZGU+QjE0PC9jb2RlPiByZWdpc3RlciB0bworYWNjZXNzIHRoZW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNkYXRhPW5vbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zZGF0YV8wMDNkbm9uZS0xMjAyIj48L2E+TWFrZSBubyB1c2Ugb2YgdGhlIHNlY3Rpb25zIHJlc2VydmVkIGZvciBzbWFsbCBkYXRhLCBhbmQgdXNlIGFic29sdXRlCithZGRyZXNzZXMgdG8gYWNjZXNzIGFsbCBkYXRhLiAgUHV0IGFsbCBpbml0aWFsaXplZCBnbG9iYWwgYW5kIHN0YXRpYworZGF0YSBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZmFyZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLCBhbmQgYWxsIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmZhcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLiAgUHV0IGFsbCBjb25zdGFudCBkYXRhIGludG8gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNvbnN0PC9zcGFuPjwvc2FtcD4mcnNxdW87CitzZWN0aW9uLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0M5OS1UaHJlYWRfMDAyZExvY2FsLUVkaXRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0M5OS1UaHJlYWRfMDAyZExvY2FsLUVkaXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkNDYwMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQzk5LVRocmVhZF8wMDJkTG9jYWwtRWRpdHMuaHRtbApAQCAtMCwwICsxLDExNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Qzk5IFRocmVhZC1Mb2NhbCBFZGl0cyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUaHJlYWRfMDAyZExvY2FsLmh0bWwjVGhyZWFkXzAwMmRMb2NhbCIgdGl0bGU9IlRocmVhZC1Mb2NhbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNfMDAyYl8wMDJiOTgtVGhyZWFkXzAwMmRMb2NhbC1FZGl0cy5odG1sI0NfMDAyYl8wMDJiOTgtVGhyZWFkXzAwMmRMb2NhbC1FZGl0cyIgdGl0bGU9IkMrKzk4IFRocmVhZC1Mb2NhbCBFZGl0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDOTktVGhyZWFkLUxvY2FsLUVkaXRzIj48L2E+Cis8YSBuYW1lPSJDOTktVGhyZWFkXzAwMmRMb2NhbC1FZGl0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDXzAwMmJfMDAyYjk4LVRocmVhZF8wMDJkTG9jYWwtRWRpdHMuaHRtbCNDXzAwMmJfMDAyYjk4LVRocmVhZF8wMDJkTG9jYWwtRWRpdHMiPkMrKzk4IFRocmVhZC1Mb2NhbCBFZGl0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIj5UaHJlYWQtTG9jYWw8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjYwLjEgSVNPL0lFQyA5ODk5OjE5OTkgRWRpdHMgZm9yIFRocmVhZC1Mb2NhbCBTdG9yYWdlPC9oND4KKworPHA+VGhlIGZvbGxvd2luZyBhcmUgYSBzZXQgb2YgY2hhbmdlcyB0byBJU08vSUVDIDk4OTk6MTk5OSAoYWthIEM5OSkKK3RoYXQgZG9jdW1lbnQgdGhlIGV4YWN0IHNlbWFudGljcyBvZiB0aGUgbGFuZ3VhZ2UgZXh0ZW5zaW9uLgorCisgICAgIDx1bD4KKzxsaT48Y2l0ZT41LjEuMiAgRXhlY3V0aW9uIGVudmlyb25tZW50czwvY2l0ZT4KKworICAgICA8cD5BZGQgbmV3IHRleHQgYWZ0ZXIgcGFyYWdyYXBoIDEKKworICAgICA8YmxvY2txdW90ZT4KK1dpdGhpbiBlaXRoZXIgZXhlY3V0aW9uIGVudmlyb25tZW50LCBhIDxkZm4+dGhyZWFkPC9kZm4+IGlzIGEgZmxvdyBvZgorY29udHJvbCB3aXRoaW4gYSBwcm9ncmFtLiAgSXQgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB3aGV0aGVyCitvciBub3QgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgdGhyZWFkIGFzc29jaWF0ZWQgd2l0aCBhIHByb2dyYW0uIAorSXQgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBob3cgdGhyZWFkcyBiZXlvbmQgdGhlIGZpcnN0IGFyZQorY3JlYXRlZCwgdGhlIG5hbWUgYW5kIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aHJlYWQKK3N0YXJ0dXAsIGFuZCBob3cgdGhyZWFkcyBtYXkgYmUgdGVybWluYXRlZC4gIEhvd2V2ZXIsIG9iamVjdHMKK3dpdGggdGhyZWFkIHN0b3JhZ2UgZHVyYXRpb24gc2hhbGwgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRocmVhZAorc3RhcnR1cC4gCis8L2Jsb2NrcXVvdGU+CisKKyAgICAgPGxpPjxjaXRlPjYuMi40ICBTdG9yYWdlIGR1cmF0aW9ucyBvZiBvYmplY3RzPC9jaXRlPgorCisgICAgIDxwPkFkZCBuZXcgdGV4dCBiZWZvcmUgcGFyYWdyYXBoIDMKKworICAgICA8YmxvY2txdW90ZT4KK0FuIG9iamVjdCB3aG9zZSBpZGVudGlmaWVyIGlzIGRlY2xhcmVkIHdpdGggdGhlIHN0b3JhZ2UtY2xhc3MKK3NwZWNpZmllciA8Y29kZT5fX3RocmVhZDwvY29kZT48IS0tIC9AdyAtLT4gaGFzIDxkZm4+dGhyZWFkIHN0b3JhZ2UgZHVyYXRpb248L2Rmbj4uIAorSXRzIGxpZmV0aW1lIGlzIHRoZSBlbnRpcmUgZXhlY3V0aW9uIG9mIHRoZSB0aHJlYWQsIGFuZCBpdHMKK3N0b3JlZCB2YWx1ZSBpcyBpbml0aWFsaXplZCBvbmx5IG9uY2UsIHByaW9yIHRvIHRocmVhZCBzdGFydHVwLiAKKzwvYmxvY2txdW90ZT4KKworICAgICA8bGk+PGNpdGU+Ni40LjEgIEtleXdvcmRzPC9jaXRlPgorCisgICAgIDxwPkFkZCA8Y29kZT5fX3RocmVhZDwvY29kZT4uCisKKyAgICAgPGxpPjxjaXRlPjYuNy4xICBTdG9yYWdlLWNsYXNzIHNwZWNpZmllcnM8L2NpdGU+CisKKyAgICAgPHA+QWRkIDxjb2RlPl9fdGhyZWFkPC9jb2RlPiB0byB0aGUgbGlzdCBvZiBzdG9yYWdlIGNsYXNzIHNwZWNpZmllcnMgaW4KK3BhcmFncmFwaCAxLgorCisgICAgIDxwPkNoYW5nZSBwYXJhZ3JhcGggMiB0bworCisgICAgIDxibG9ja3F1b3RlPgorV2l0aCB0aGUgZXhjZXB0aW9uIG9mIDxjb2RlPl9fdGhyZWFkPC9jb2RlPiwgYXQgbW9zdCBvbmUgc3RvcmFnZS1jbGFzcworc3BlY2lmaWVyIG1heSBiZSBnaXZlbiBbPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPl0uICBUaGUgPGNvZGU+X190aHJlYWQ8L2NvZGU+IHNwZWNpZmllciBtYXkKK2JlIHVzZWQgYWxvbmUsIG9yIGltbWVkaWF0ZWx5IGZvbGxvd2luZyA8Y29kZT5leHRlcm48L2NvZGU+IG9yCis8Y29kZT5zdGF0aWM8L2NvZGU+LiAKKzwvYmxvY2txdW90ZT4KKworICAgICA8cD5BZGQgbmV3IHRleHQgYWZ0ZXIgcGFyYWdyYXBoIDYKKworICAgICA8YmxvY2txdW90ZT4KK1RoZSBkZWNsYXJhdGlvbiBvZiBhbiBpZGVudGlmaWVyIGZvciBhIHZhcmlhYmxlIHRoYXQgaGFzCitibG9jayBzY29wZSB0aGF0IHNwZWNpZmllcyA8Y29kZT5fX3RocmVhZDwvY29kZT4gc2hhbGwgYWxzbworc3BlY2lmeSBlaXRoZXIgPGNvZGU+ZXh0ZXJuPC9jb2RlPiBvciA8Y29kZT5zdGF0aWM8L2NvZGU+LgorCisgICAgIDxwPlRoZSA8Y29kZT5fX3RocmVhZDwvY29kZT4gc3BlY2lmaWVyIHNoYWxsIGJlIHVzZWQgb25seSB3aXRoCit2YXJpYWJsZXMuIAorPC9ibG9ja3F1b3RlPgorICAgICA8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DUjE2LU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ1IxNi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkMGFiOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ1IxNi1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q1IxNiBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyIgdGl0bGU9IkNSSVMgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiIHRpdGxlPSJEYXJ3aW4gT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDUjE2LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy44IENSMTYgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUNSMTYtT3B0aW9ucy0xMjMyIj48L2E+CitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIHNwZWNpZmljYWxseSBmb3IgdGhlIENSMTYgcG9ydHMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tbWFjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbWFjLTEyMzMiPjwvYT5FbmFibGUgdGhlIHVzZSBvZiBtdWx0aXBseS1hY2N1bXVsYXRlIGluc3RydWN0aW9ucy4gRGlzYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY3IxNmNwbHVzPC9jb2RlPjxkdD48Y29kZT4tbWNyMTZjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY3IxNmNwbHVzLTEyMzQiPjwvYT48YSBuYW1lPSJpbmRleC1tY3IxNmMtMTIzNSI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIENSMTZDIG9yIENSMTZDKyBhcmNoaXRlY3R1cmUuIENSMTZDKyBhcmNoaXRlY3R1cmUKK2lzIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNpbTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNpbS0xMjM2Ij48L2E+TGlua3MgdGhlIGxpYnJhcnkgbGlic2ltLmEgd2hpY2ggaXMgaW4gY29tcGF0aWJsZSB3aXRoIHNpbXVsYXRvci4gQXBwbGljYWJsZQordG8gRUxGIGNvbXBpbGVyIG9ubHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWludDMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW50MzItMTIzNyI+PC9hPkNob29zZSBpbnRlZ2VyIHR5cGUgYXMgMzItYml0IHdpZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJpdC1vcHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1iaXRfMDAyZG9wcy0xMjM4Ij48L2E+R2VuZXJhdGVzIDxjb2RlPnNiaXQ8L2NvZGU+Lzxjb2RlPmNiaXQ8L2NvZGU+IGluc3RydWN0aW9ucyBmb3IgYml0IG1hbmlwdWxhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRhdGEtbW9kZWw9PC9jb2RlPjx2YXI+bW9kZWw8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWRhdGFfMDAyZG1vZGVsLTEyMzkiPjwvYT5DaG9vc2UgYSBkYXRhIG1vZGVsLiBUaGUgY2hvaWNlcyBmb3IgPHZhcj5tb2RlbDwvdmFyPiBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZWFyPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mYXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tZWRpdW08L3NwYW4+PC9zYW1wPiZyc3F1bzsuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWVkaXVtPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGRlZmF1bHQuIAorSG93ZXZlciwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mYXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgbm90IHZhbGlkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcjE2Yzwvc3Bhbj48L3NhbXA+LCBhcyB0aGUKK0NSMTZDIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmYXIgZGF0YSBtb2RlbC4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DUklTLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ1JJUy1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1MzczYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ1JJUy1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNSSVMgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDNlgtT3B0aW9ucy5odG1sI0M2WC1PcHRpb25zIiB0aXRsZT0iQzZYIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNDUjE2LU9wdGlvbnMiIHRpdGxlPSJDUjE2IE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ1JJUy1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNSMTYtT3B0aW9ucy5odG1sI0NSMTYtT3B0aW9ucyI+Q1IxNiBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQzZYLU9wdGlvbnMuaHRtbCNDNlgtT3B0aW9ucyI+QzZYIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuNyBDUklTIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1DUklTLU9wdGlvbnMtMTIwMyI+PC9hPgorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBDUklTIHBvcnRzLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWFyY2g9PC9jb2RlPjx2YXI+YXJjaGl0ZWN0dXJlLXR5cGU8L3Zhcj48ZHQ+PGNvZGU+LW1jcHU9PC9jb2RlPjx2YXI+YXJjaGl0ZWN0dXJlLXR5cGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFyY2gtMTIwNCI+PC9hPjxhIG5hbWU9ImluZGV4LW1jcHUtMTIwNSI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLiAgVGhlIGNob2ljZXMgZm9yCis8dmFyPmFyY2hpdGVjdHVyZS10eXBlPC92YXI+IGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnYzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnYxMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IKK3Jlc3BlY3RpdmVseSBFVFJBWCZuYnNwOzwhLS0gL0B3IC0tPjQsIEVUUkFYJm5ic3A7PCEtLSAvQHcgLS0+MTAwLCBhbmQgRVRSQVgmbmJzcDs8IS0tIC9AdyAtLT4xMDAmbmJzcDs8IS0tIC9AdyAtLT5MWC4gCitEZWZhdWx0IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+djA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZXhjZXB0IGZvciBjcmlzLWF4aXMtbGludXgtZ251LCB3aGVyZSB0aGUgZGVmYXVsdCBpcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52MTA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXR1bmU9PC9jb2RlPjx2YXI+YXJjaGl0ZWN0dXJlLXR5cGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXR1bmUtMTIwNiI+PC9hPlR1bmUgdG8gPHZhcj5hcmNoaXRlY3R1cmUtdHlwZTwvdmFyPiBldmVyeXRoaW5nIGFwcGxpY2FibGUgYWJvdXQgdGhlIGdlbmVyYXRlZAorY29kZSwgZXhjZXB0IGZvciB0aGUgQUJJIGFuZCB0aGUgc2V0IG9mIGF2YWlsYWJsZSBpbnN0cnVjdGlvbnMuICBUaGUKK2Nob2ljZXMgZm9yIDx2YXI+YXJjaGl0ZWN0dXJlLXR5cGU8L3Zhcj4gYXJlIHRoZSBzYW1lIGFzIGZvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPTwvc3Bhbj48dmFyPmFyY2hpdGVjdHVyZS10eXBlPC92YXI+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbWF4LXN0YWNrLWZyYW1lPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbW1heF8wMDJkc3RhY2tfMDAyZGZyYW1lLTEyMDciPjwvYT5XYXJuIHdoZW4gdGhlIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gZXhjZWVkcyA8dmFyPm48L3Zhcj4gYnl0ZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWV0cmF4NDwvY29kZT48ZHQ+PGNvZGU+LW1ldHJheDEwMDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWV0cmF4NC0xMjA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWV0cmF4MTAwLTEyMDkiPjwvYT5UaGUgb3B0aW9ucyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWV0cmF4NDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWV0cmF4MTAwPC9zcGFuPjwvc2FtcD4gYXJlIHN5bm9ueW1zIGZvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPXYzPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD12ODwvc3Bhbj48L3NhbXA+IHJlc3BlY3RpdmVseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbXVsLWJ1Zy13b3JrYXJvdW5kPC9jb2RlPjxkdD48Y29kZT4tbW5vLW11bC1idWctd29ya2Fyb3VuZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW11bF8wMDJkYnVnXzAwMmR3b3JrYXJvdW5kLTEyMTAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG11bF8wMDJkYnVnXzAwMmR3b3JrYXJvdW5kLTEyMTEiPjwvYT5Xb3JrIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgPGNvZGU+bXVsczwvY29kZT4gYW5kIDxjb2RlPm11bHU8L2NvZGU+IGluc3RydWN0aW9ucyBmb3IgQ1BVCittb2RlbHMgd2hlcmUgaXQgYXBwbGllcy4gIFRoaXMgb3B0aW9uIGlzIGFjdGl2ZSBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wZGVidWc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wZGVidWctMTIxMiI+PC9hPkVuYWJsZSBDUklTLXNwZWNpZmljIHZlcmJvc2UgZGVidWctcmVsYXRlZCBpbmZvcm1hdGlvbiBpbiB0aGUgYXNzZW1ibHkKK2NvZGUuICBUaGlzIG9wdGlvbiBhbHNvIGhhcyB0aGUgZWZmZWN0IG9mIHR1cm5pbmcgb2ZmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNOT19BUFA8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2Zvcm1hdHRlZC1jb2RlIGluZGljYXRvciB0byB0aGUgYXNzZW1ibGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCithc3NlbWJseSBmaWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jYy1pbml0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2NfMDAyZGluaXQtMTIxMyI+PC9hPkRvIG5vdCB1c2UgY29uZGl0aW9uLWNvZGUgcmVzdWx0cyBmcm9tIHByZXZpb3VzIGluc3RydWN0aW9uOyBhbHdheXMgZW1pdAorY29tcGFyZSBhbmQgdGVzdCBpbnN0cnVjdGlvbnMgYmVmb3JlIHVzZSBvZiBjb25kaXRpb24gY29kZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXNpZGUtZWZmZWN0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzaWRlXzAwMmRlZmZlY3RzLTEyMTQiPjwvYT5EbyBub3QgZW1pdCBpbnN0cnVjdGlvbnMgd2l0aCBzaWRlIGVmZmVjdHMgaW4gYWRkcmVzc2luZyBtb2RlcyBvdGhlciB0aGFuCitwb3N0LWluY3JlbWVudC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3RhY2stYWxpZ248L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc3RhY2stYWxpZ248L2NvZGU+PGR0Pjxjb2RlPi1tZGF0YS1hbGlnbjwvY29kZT48ZHQ+PGNvZGU+LW1uby1kYXRhLWFsaWduPC9jb2RlPjxkdD48Y29kZT4tbWNvbnN0LWFsaWduPC9jb2RlPjxkdD48Y29kZT4tbW5vLWNvbnN0LWFsaWduPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc3RhY2tfMDAyZGFsaWduLTEyMTUiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHN0YWNrXzAwMmRhbGlnbi0xMjE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWRhdGFfMDAyZGFsaWduLTEyMTciPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGRhdGFfMDAyZGFsaWduLTEyMTgiPjwvYT48YSBuYW1lPSJpbmRleC1tY29uc3RfMDAyZGFsaWduLTEyMTkiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGNvbnN0XzAwMmRhbGlnbi0xMjIwIj48L2E+VGhlc2Ugb3B0aW9ucyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucykgYXJyYW5nZSAoZWxpbWluYXRlIGFycmFuZ2VtZW50cykgZm9yIHRoZQorc3RhY2sgZnJhbWUsIGluZGl2aWR1YWwgZGF0YSBhbmQgY29uc3RhbnRzIHRvIGJlIGFsaWduZWQgZm9yIHRoZSBtYXhpbXVtCitzaW5nbGUgZGF0YSBhY2Nlc3Mgc2l6ZSBmb3IgdGhlIGNob3NlbiBDUFUgbW9kZWwuICBUaGUgZGVmYXVsdCBpcyB0bworYXJyYW5nZSBmb3IgMzItYml0IGFsaWdubWVudC4gIEFCSSBkZXRhaWxzIHN1Y2ggYXMgc3RydWN0dXJlIGxheW91dCBhcmUKK25vdCBhZmZlY3RlZCBieSB0aGVzZSBvcHRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0zMi1iaXQ8L2NvZGU+PGR0Pjxjb2RlPi1tMTYtYml0PC9jb2RlPjxkdD48Y29kZT4tbTgtYml0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tMzJfMDAyZGJpdC0xMjIxIj48L2E+PGEgbmFtZT0iaW5kZXgtbTE2XzAwMmRiaXQtMTIyMiI+PC9hPjxhIG5hbWU9ImluZGV4LW04XzAwMmRiaXQtMTIyMyI+PC9hPlNpbWlsYXIgdG8gdGhlIHN0YWNrLSBkYXRhLSBhbmQgY29uc3QtYWxpZ24gb3B0aW9ucyBhYm92ZSwgdGhlc2Ugb3B0aW9ucworYXJyYW5nZSBmb3Igc3RhY2sgZnJhbWUsIHdyaXRhYmxlIGRhdGEgYW5kIGNvbnN0YW50cyB0byBhbGwgYmUgMzItYml0LAorMTYtYml0IG9yIDgtYml0IGFsaWduZWQuICBUaGUgZGVmYXVsdCBpcyAzMi1iaXQgYWxpZ25tZW50LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1wcm9sb2d1ZS1lcGlsb2d1ZTwvY29kZT48ZHQ+PGNvZGU+LW1wcm9sb2d1ZS1lcGlsb2d1ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRwcm9sb2d1ZV8wMDJkZXBpbG9ndWUtMTIyNCI+PC9hPjxhIG5hbWU9ImluZGV4LW1wcm9sb2d1ZV8wMDJkZXBpbG9ndWUtMTIyNSI+PC9hPldpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1wcm9sb2d1ZS1lcGlsb2d1ZTwvc3Bhbj48L3NhbXA+LCB0aGUgbm9ybWFsIGZ1bmN0aW9uIHByb2xvZ3VlIGFuZAorZXBpbG9ndWUgd2hpY2ggc2V0IHVwIHRoZSBzdGFjayBmcmFtZSBhcmUgb21pdHRlZCBhbmQgbm8gcmV0dXJuCitpbnN0cnVjdGlvbnMgb3IgcmV0dXJuIHNlcXVlbmNlcyBhcmUgZ2VuZXJhdGVkIGluIHRoZSBjb2RlLiAgVXNlIHRoaXMKK29wdGlvbiBvbmx5IHRvZ2V0aGVyIHdpdGggdmlzdWFsIGluc3BlY3Rpb24gb2YgdGhlIGNvbXBpbGVkIGNvZGU6IG5vCit3YXJuaW5ncyBvciBlcnJvcnMgYXJlIGdlbmVyYXRlZCB3aGVuIGNhbGwtc2F2ZWQgcmVnaXN0ZXJzIG11c3QgYmUgc2F2ZWQsCitvciBzdG9yYWdlIGZvciBsb2NhbCB2YXJpYWJsZXMgbmVlZHMgdG8gYmUgYWxsb2NhdGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1nb3RwbHQ8L2NvZGU+PGR0Pjxjb2RlPi1tZ290cGx0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGdvdHBsdC0xMjI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWdvdHBsdC0xMjI3Ij48L2E+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBpYzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZlBJQzwvc3Bhbj48L3NhbXA+LCBkb24ndCBnZW5lcmF0ZSAoZG8gZ2VuZXJhdGUpCitpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgdGhhdCBsb2FkIGFkZHJlc3NlcyBmb3IgZnVuY3Rpb25zIGZyb20gdGhlIFBMVCBwYXJ0CitvZiB0aGUgR09UIHJhdGhlciB0aGFuICh0cmFkaXRpb25hbCBvbiBvdGhlciBhcmNoaXRlY3R1cmVzKSBjYWxscyB0byB0aGUKK1BMVC4gIFRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZ290cGx0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWVsZjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWVsZi0xMjI4Ij48L2E+TGVnYWN5IG5vLW9wIG9wdGlvbiBvbmx5IHJlY29nbml6ZWQgd2l0aCB0aGUgY3Jpcy1heGlzLWVsZiBhbmQKK2NyaXMtYXhpcy1saW51eC1nbnUgdGFyZ2V0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbGludXg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1saW51eC0xMjI5Ij48L2E+TGVnYWN5IG5vLW9wIG9wdGlvbiBvbmx5IHJlY29nbml6ZWQgd2l0aCB0aGUgY3Jpcy1heGlzLWxpbnV4LWdudSB0YXJnZXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tc2ltPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1zaW0tMTIzMCI+PC9hPlRoaXMgb3B0aW9uLCByZWNvZ25pemVkIGZvciB0aGUgY3Jpcy1heGlzLWVsZiwgYXJyYW5nZXMKK3RvIGxpbmsgd2l0aCBpbnB1dC1vdXRwdXQgZnVuY3Rpb25zIGZyb20gYSBzaW11bGF0b3IgbGlicmFyeS4gIENvZGUsCitpbml0aWFsaXplZCBkYXRhIGFuZCB6ZXJvLWluaXRpYWxpemVkIGRhdGEgYXJlIGFsbG9jYXRlZCBjb25zZWN1dGl2ZWx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXNpbTI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXNpbTItMTIzMSI+PC9hPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXNpbTwvc3Bhbj48L3NhbXA+LCBidXQgcGFzcyBsaW5rZXIgb3B0aW9ucyB0byBsb2NhdGUgaW5pdGlhbGl6ZWQgZGF0YSBhdAorMHg0MDAwMDAwMCBhbmQgemVyby1pbml0aWFsaXplZCBkYXRhIGF0IDB4ODAwMDAwMDAuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmItQXR0cmlidXRlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYi1BdHRyaWJ1dGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlMzY4NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmItQXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsMTExIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DKysgQXR0cmlidXRlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyIgdGl0bGU9IkMrKyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sI0JvdW5kLW1lbWJlci1mdW5jdGlvbnMiIHRpdGxlPSJCb3VuZCBtZW1iZXIgZnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRnVuY3Rpb24tTXVsdGl2ZXJzaW9uaW5nLmh0bWwjRnVuY3Rpb24tTXVsdGl2ZXJzaW9uaW5nIiB0aXRsZT0iRnVuY3Rpb24gTXVsdGl2ZXJzaW9uaW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkMrKy1BdHRyaWJ1dGVzIj48L2E+Cis8YSBuYW1lPSJDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZ1bmN0aW9uLU11bHRpdmVyc2lvbmluZy5odG1sI0Z1bmN0aW9uLU11bHRpdmVyc2lvbmluZyI+RnVuY3Rpb24gTXVsdGl2ZXJzaW9uaW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sI0JvdW5kLW1lbWJlci1mdW5jdGlvbnMiPkJvdW5kIG1lbWJlciBmdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjcgQysrLVNwZWNpZmljIFZhcmlhYmxlLCBGdW5jdGlvbiwgYW5kIFR5cGUgQXR0cmlidXRlczwvaDM+CisKKzxwPlNvbWUgYXR0cmlidXRlcyBvbmx5IG1ha2Ugc2Vuc2UgZm9yIEMrKyBwcm9ncmFtcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YWJpX3RhZyAoIjwvY29kZT48dmFyPnRhZzwvdmFyPjxjb2RlPiIsIC4uLik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYWJpXzAwNWZ0YWdfMDA3ZC1hdHRyaWJ1dGUtMzUyNCI+PC9hPlRoZSA8Y29kZT5hYmlfdGFnPC9jb2RlPiBhdHRyaWJ1dGUgY2FuIGJlIGFwcGxpZWQgdG8gYSBmdW5jdGlvbiBvciBjbGFzcworZGVjbGFyYXRpb24uICBJdCBtb2RpZmllcyB0aGUgbWFuZ2xlZCBuYW1lIG9mIHRoZSBmdW5jdGlvbiBvciBjbGFzcyB0bworaW5jb3Jwb3JhdGUgdGhlIHRhZyBuYW1lLCBpbiBvcmRlciB0byBkaXN0aW5ndWlzaCB0aGUgZnVuY3Rpb24gb3IKK2NsYXNzIGZyb20gYW4gZWFybGllciB2ZXJzaW9uIHdpdGggYSBkaWZmZXJlbnQgQUJJOyBwZXJoYXBzIHRoZSBjbGFzcworaGFzIGNoYW5nZWQgc2l6ZSwgb3IgdGhlIGZ1bmN0aW9uIGhhcyBhIGRpZmZlcmVudCByZXR1cm4gdHlwZSB0aGF0IGlzCitub3QgZW5jb2RlZCBpbiB0aGUgbWFuZ2xlZCBuYW1lLgorCisgICAgIDxwPlRoZSBhcmd1bWVudCBjYW4gYmUgYSBsaXN0IG9mIHN0cmluZ3Mgb2YgYXJiaXRyYXJ5IGxlbmd0aC4gIFRoZQorc3RyaW5ncyBhcmUgc29ydGVkIG9uIG91dHB1dCwgc28gdGhlIG9yZGVyIG9mIHRoZSBsaXN0IGlzCit1bmltcG9ydGFudC4KKworICAgICA8cD5BIHJlZGVjbGFyYXRpb24gb2YgYSBmdW5jdGlvbiBvciBjbGFzcyBtdXN0IG5vdCBhZGQgbmV3IEFCSSB0YWdzLAorc2luY2UgZG9pbmcgc28gd291bGQgY2hhbmdlIHRoZSBtYW5nbGVkIG5hbWUuCisKKyAgICAgPHA+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWJpLXRhZzwvc3Bhbj48L3NhbXA+IGZsYWcgZW5hYmxlcyBhIHdhcm5pbmcgYWJvdXQgYSBjbGFzcyB3aGljaCBkb2VzCitub3QgaGF2ZSBhbGwgdGhlIEFCSSB0YWdzIHVzZWQgYnkgaXRzIHN1Ym9iamVjdHMgYW5kIHZpcnR1YWwgZnVuY3Rpb25zOyBmb3IgdXNlcnMgd2l0aCBjb2RlCit0aGF0IG5lZWRzIHRvIGNvZXhpc3Qgd2l0aCBhbiBlYXJsaWVyIEFCSSwgdXNpbmcgdGhpcyBvcHRpb24gY2FuIGhlbHAKK3RvIGZpbmQgYWxsIGFmZmVjdGVkIHR5cGVzIHRoYXQgbmVlZCB0byBiZSB0YWdnZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5pbml0X3ByaW9yaXR5ICg8L2NvZGU+PHZhcj5wcmlvcml0eTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW5pdF8wMDVmcHJpb3JpdHlfMDA3ZC1hdHRyaWJ1dGUtMzUyNSI+PC9hPgorCisgICAgIDxwPkluIFN0YW5kYXJkIEMrKywgb2JqZWN0cyBkZWZpbmVkIGF0IG5hbWVzcGFjZSBzY29wZSBhcmUgZ3VhcmFudGVlZCB0byBiZQoraW5pdGlhbGl6ZWQgaW4gYW4gb3JkZXIgaW4gc3RyaWN0IGFjY29yZGFuY2Ugd2l0aCB0aGF0IG9mIHRoZWlyIGRlZmluaXRpb25zCis8ZW0+aW4gYSBnaXZlbiB0cmFuc2xhdGlvbiB1bml0PC9lbT4uICBObyBndWFyYW50ZWUgaXMgbWFkZSBmb3IgaW5pdGlhbGl6YXRpb25zCithY3Jvc3MgdHJhbnNsYXRpb24gdW5pdHMuICBIb3dldmVyLCBHTlUgQysrIGFsbG93cyB1c2VycyB0byBjb250cm9sIHRoZQorb3JkZXIgb2YgaW5pdGlhbGl6YXRpb24gb2Ygb2JqZWN0cyBkZWZpbmVkIGF0IG5hbWVzcGFjZSBzY29wZSB3aXRoIHRoZQorPGNvZGU+aW5pdF9wcmlvcml0eTwvY29kZT4gYXR0cmlidXRlIGJ5IHNwZWNpZnlpbmcgYSByZWxhdGl2ZSA8dmFyPnByaW9yaXR5PC92YXI+LAorYSBjb25zdGFudCBpbnRlZ3JhbCBleHByZXNzaW9uIGN1cnJlbnRseSBib3VuZGVkIGJldHdlZW4gMTAxIGFuZCA2NTUzNQoraW5jbHVzaXZlLiAgTG93ZXIgbnVtYmVycyBpbmRpY2F0ZSBhIGhpZ2hlciBwcmlvcml0eS4KKworICAgICA8cD5JbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIDxjb2RlPkE8L2NvZGU+IHdvdWxkIG5vcm1hbGx5IGJlIGNyZWF0ZWQgYmVmb3JlCis8Y29kZT5CPC9jb2RlPiwgYnV0IHRoZSA8Y29kZT5pbml0X3ByaW9yaXR5PC9jb2RlPiBhdHRyaWJ1dGUgcmV2ZXJzZXMgdGhhdCBvcmRlcjoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBTb21lX0NsYXNzICBBICBfX2F0dHJpYnV0ZV9fICgoaW5pdF9wcmlvcml0eSAoMjAwMCkpKTsKKyAgICAgICAgICBTb21lX0NsYXNzICBCICBfX2F0dHJpYnV0ZV9fICgoaW5pdF9wcmlvcml0eSAoNTQzKSkpOworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+Tm90ZSB0aGF0IHRoZSBwYXJ0aWN1bGFyIHZhbHVlcyBvZiA8dmFyPnByaW9yaXR5PC92YXI+IGRvIG5vdCBtYXR0ZXI7IG9ubHkgdGhlaXIKK3JlbGF0aXZlIG9yZGVyaW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+amF2YV9pbnRlcmZhY2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiamF2YV8wMDVmaW50ZXJmYWNlXzAwN2QtYXR0cmlidXRlLTM1MjYiPjwvYT4KK1RoaXMgdHlwZSBhdHRyaWJ1dGUgaW5mb3JtcyBDKysgdGhhdCB0aGUgY2xhc3MgaXMgYSBKYXZhIGludGVyZmFjZS4gIEl0IG1heQorb25seSBiZSBhcHBsaWVkIHRvIGNsYXNzZXMgZGVjbGFyZWQgd2l0aGluIGFuIDxjb2RlPmV4dGVybiAiSmF2YSI8L2NvZGU+IGJsb2NrLiAKK0NhbGxzIHRvIG1ldGhvZHMgZGVjbGFyZWQgaW4gdGhpcyBpbnRlcmZhY2UgYXJlIGRpc3BhdGNoZWQgdXNpbmcgR0NKJ3MKK2ludGVyZmFjZSB0YWJsZSBtZWNoYW5pc20sIGluc3RlYWQgb2YgcmVndWxhciB2aXJ0dWFsIHRhYmxlIGRpc3BhdGNoLgorCisgPC9kbD4KKworIDxwPlNlZSBhbHNvIDxhIGhyZWY9Ik5hbWVzcGFjZS1Bc3NvY2lhdGlvbi5odG1sI05hbWVzcGFjZS1Bc3NvY2lhdGlvbiI+TmFtZXNwYWNlIEFzc29jaWF0aW9uPC9hPi4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmItQ29tbWVudHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmItQ29tbWVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzU2Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYi1Db21tZW50cy5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkMrKyBDb21tZW50cyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGdW5jdGlvbi1Qcm90b3R5cGVzLmh0bWwjRnVuY3Rpb24tUHJvdG90eXBlcyIgdGl0bGU9IkZ1bmN0aW9uIFByb3RvdHlwZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEb2xsYXItU2lnbnMuaHRtbCNEb2xsYXItU2lnbnMiIHRpdGxlPSJEb2xsYXIgU2lnbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQysrLUNvbW1lbnRzIj48L2E+Cis8YSBuYW1lPSJDXzAwMmJfMDAyYi1Db21tZW50cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEb2xsYXItU2lnbnMuaHRtbCNEb2xsYXItU2lnbnMiPkRvbGxhciBTaWduczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZ1bmN0aW9uLVByb3RvdHlwZXMuaHRtbCNGdW5jdGlvbi1Qcm90b3R5cGVzIj5GdW5jdGlvbiBQcm90b3R5cGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjMzIEMrKyBTdHlsZSBDb21tZW50czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmZfMDAyZl8wMDdkLTI3NDkiPjwvYT48YSBuYW1lPSJpbmRleC1DXzAwMmJfMDAyYi1jb21tZW50cy0yNzUwIj48L2E+PGEgbmFtZT0iaW5kZXgtY29tbWVudHNfMDAyYy1DXzAwMmJfMDAyYi1zdHlsZS0yNzUxIj48L2E+CitJbiBHTlUgQywgeW91IG1heSB1c2UgQysrIHN0eWxlIGNvbW1lbnRzLCB3aGljaCBzdGFydCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ly88L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCitjb250aW51ZSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lLiAgTWFueSBvdGhlciBDIGltcGxlbWVudGF0aW9ucyBhbGxvdworc3VjaCBjb21tZW50cywgYW5kIHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSAxOTk5IEMgc3RhbmRhcmQuICBIb3dldmVyLAorQysrIHN0eWxlIGNvbW1lbnRzIGFyZSBub3QgcmVjb2duaXplZCBpZiB5b3Ugc3BlY2lmeSBhbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBzcGVjaWZ5aW5nIGEgdmVyc2lvbiBvZiBJU08gQyBiZWZvcmUgQzk5LCBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+CisoZXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWM5MDwvc3Bhbj48L3NhbXA+KS4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzEyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNjQ2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DKysgRGlhbGVjdCBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyIgdGl0bGU9Ikludm9raW5nIEdDQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiIHRpdGxlPSJDIERpYWxlY3QgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIiB0aXRsZT0iT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkMrKy1EaWFsZWN0LU9wdGlvbnMiPjwvYT4KKzxhIG5hbWU9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNSBPcHRpb25zIENvbnRyb2xsaW5nIEMrKyBEaWFsZWN0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY29tcGlsZXItb3B0aW9uc18wMDJjLUNfMDAyYl8wMDJiLTEzMCI+PC9hPjxhIG5hbWU9ImluZGV4LUNfMDAyYl8wMDJiLW9wdGlvbnNfMDAyYy1jb21tYW5kXzAwMmRsaW5lLTEzMSI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1DXzAwMmJfMDAyYi0xMzIiPjwvYT5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0aGF0IGFyZSBvbmx5IG1lYW5pbmdmdWwKK2ZvciBDKysgcHJvZ3JhbXMuICBZb3UgY2FuIGFsc28gdXNlIG1vc3Qgb2YgdGhlIEdOVSBjb21waWxlciBvcHRpb25zCityZWdhcmRsZXNzIG9mIHdoYXQgbGFuZ3VhZ2UgeW91ciBwcm9ncmFtIGlzIGluLiAgRm9yIGV4YW1wbGUsIHlvdQorbWlnaHQgY29tcGlsZSBhIGZpbGUgPGNvZGU+Zmlyc3RDbGFzcy5DPC9jb2RlPiBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBnKysgLWcgLWZyZXBvIC1PIC1jIGZpcnN0Q2xhc3MuQworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5JbiB0aGlzIGV4YW1wbGUsIG9ubHkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZXBvPC9zcGFuPjwvc2FtcD4gaXMgYW4gb3B0aW9uIG1lYW50Citvbmx5IGZvciBDKysgcHJvZ3JhbXM7IHlvdSBjYW4gdXNlIHRoZSBvdGhlciBvcHRpb25zIHdpdGggYW55CitsYW5ndWFnZSBzdXBwb3J0ZWQgYnkgR0NDLgorCisgPHA+SGVyZSBpcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IGFyZSA8ZW0+b25seTwvZW0+IGZvciBjb21waWxpbmcgQysrIHByb2dyYW1zOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tZmFiaS12ZXJzaW9uPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmFiaV8wMDJkdmVyc2lvbi0xMzMiPjwvYT5Vc2UgdmVyc2lvbiA8dmFyPm48L3Zhcj4gb2YgdGhlIEMrKyBBQkkuICBUaGUgZGVmYXVsdCBpcyB2ZXJzaW9uIDIuCisKKyAgICAgPHA+VmVyc2lvbiAwIHJlZmVycyB0byB0aGUgdmVyc2lvbiBjb25mb3JtaW5nIG1vc3QgY2xvc2VseSB0bwordGhlIEMrKyBBQkkgc3BlY2lmaWNhdGlvbi4gIFRoZXJlZm9yZSwgdGhlIEFCSSBvYnRhaW5lZCB1c2luZyB2ZXJzaW9uIDAKK3dpbGwgY2hhbmdlIGluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBHKysgYXMgQUJJIGJ1Z3MgYXJlIGZpeGVkLgorCisgICAgIDxwPlZlcnNpb24gMSBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgQysrIEFCSSB0aGF0IGZpcnN0IGFwcGVhcmVkIGluIEcrKyAzLjIuCisKKyAgICAgPHA+VmVyc2lvbiAyIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBDKysgQUJJIHRoYXQgZmlyc3QgYXBwZWFyZWQgaW4gRysrIDMuNC4KKworICAgICA8cD5WZXJzaW9uIDMgY29ycmVjdHMgYW4gZXJyb3IgaW4gbWFuZ2xpbmcgYSBjb25zdGFudCBhZGRyZXNzIGFzIGEKK3RlbXBsYXRlIGFyZ3VtZW50LgorCisgICAgIDxwPlZlcnNpb24gNCwgd2hpY2ggZmlyc3QgYXBwZWFyZWQgaW4gRysrIDQuNSwgaW1wbGVtZW50cyBhIHN0YW5kYXJkCittYW5nbGluZyBmb3IgdmVjdG9yIHR5cGVzLgorCisgICAgIDxwPlZlcnNpb24gNSwgd2hpY2ggZmlyc3QgYXBwZWFyZWQgaW4gRysrIDQuNiwgY29ycmVjdHMgdGhlIG1hbmdsaW5nIG9mCithdHRyaWJ1dGUgY29uc3Qvdm9sYXRpbGUgb24gZnVuY3Rpb24gcG9pbnRlciB0eXBlcywgZGVjbHR5cGUgb2YgYQorcGxhaW4gZGVjbCwgYW5kIHVzZSBvZiBhIGZ1bmN0aW9uIHBhcmFtZXRlciBpbiB0aGUgZGVjbGFyYXRpb24gb2YKK2Fub3RoZXIgcGFyYW1ldGVyLgorCisgICAgIDxwPlZlcnNpb24gNiwgd2hpY2ggZmlyc3QgYXBwZWFyZWQgaW4gRysrIDQuNywgY29ycmVjdHMgdGhlIHByb21vdGlvbgorYmVoYXZpb3Igb2YgQysrMTEgc2NvcGVkIGVudW1zIGFuZCB0aGUgbWFuZ2xpbmcgb2YgdGVtcGxhdGUgYXJndW1lbnQKK3BhY2tzLCBjb25zdC9zdGF0aWNfY2FzdCwgcHJlZml4ICsrIGFuZCAmbmRhc2g7LCBhbmQgYSBjbGFzcyBzY29wZSBmdW5jdGlvbgordXNlZCBhcyBhIHRlbXBsYXRlIGFyZ3VtZW50LgorCisgICAgIDxwPlNlZSBhbHNvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWJpPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWFjY2Vzcy1jb250cm9sPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGFjY2Vzc18wMDJkY29udHJvbC0xMzQiPjwvYT5UdXJuIG9mZiBhbGwgYWNjZXNzIGNoZWNraW5nLiAgVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IHVzZWZ1bCBmb3Igd29ya2luZworYXJvdW5kIGJ1Z3MgaW4gdGhlIGFjY2VzcyBjb250cm9sIGNvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmNoZWNrLW5ldzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNoZWNrXzAwMmRuZXctMTM1Ij48L2E+Q2hlY2sgdGhhdCB0aGUgcG9pbnRlciByZXR1cm5lZCBieSA8Y29kZT5vcGVyYXRvciBuZXc8L2NvZGU+IGlzIG5vbi1udWxsCitiZWZvcmUgYXR0ZW1wdGluZyB0byBtb2RpZnkgdGhlIHN0b3JhZ2UgYWxsb2NhdGVkLiAgVGhpcyBjaGVjayBpcworbm9ybWFsbHkgdW5uZWNlc3NhcnkgYmVjYXVzZSB0aGUgQysrIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0Cis8Y29kZT5vcGVyYXRvciBuZXc8L2NvZGU+IG9ubHkgcmV0dXJucyA8Y29kZT4wPC9jb2RlPiBpZiBpdCBpcyBkZWNsYXJlZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50aHJvdygpPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBpbiB3aGljaCBjYXNlIHRoZSBjb21waWxlciBhbHdheXMgY2hlY2tzIHRoZQorcmV0dXJuIHZhbHVlIGV2ZW4gd2l0aG91dCB0aGlzIG9wdGlvbi4gIEluIGFsbCBvdGhlciBjYXNlcywgd2hlbgorPGNvZGU+b3BlcmF0b3IgbmV3PC9jb2RlPiBoYXMgYSBub24tZW1wdHkgZXhjZXB0aW9uIHNwZWNpZmljYXRpb24sIG1lbW9yeQorZXhoYXVzdGlvbiBpcyBzaWduYWxsZWQgYnkgdGhyb3dpbmcgPGNvZGU+c3RkOjpiYWRfYWxsb2M8L2NvZGU+LiAgU2VlIGFsc28KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmV3IChub3Rocm93KTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mY29uc3RleHByLWRlcHRoPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNvbnN0ZXhwcl8wMDJkZGVwdGgtMTM2Ij48L2E+U2V0IHRoZSBtYXhpbXVtIG5lc3RlZCBldmFsdWF0aW9uIGRlcHRoIGZvciBDKysxMSBjb25zdGV4cHIgZnVuY3Rpb25zCit0byA8dmFyPm48L3Zhcj4uICBBIGxpbWl0IGlzIG5lZWRlZCB0byBkZXRlY3QgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nCitjb25zdGFudCBleHByZXNzaW9uIGV2YWx1YXRpb24uICBUaGUgbWluaW11bSBzcGVjaWZpZWQgYnkgdGhlIHN0YW5kYXJkCitpcyA1MTIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRlZHVjZS1pbml0LWxpc3Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkZWR1Y2VfMDAyZGluaXRfMDAyZGxpc3QtMTM3Ij48L2E+RW5hYmxlIGRlZHVjdGlvbiBvZiBhIHRlbXBsYXRlIHR5cGUgcGFyYW1ldGVyIGFzCis8Y29kZT5zdGQ6OmluaXRpYWxpemVyX2xpc3Q8L2NvZGU+IGZyb20gYSBicmFjZS1lbmNsb3NlZCBpbml0aWFsaXplciBsaXN0LCBpLmUuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7IGF1dG8gZm9yd2FyZChUIHQpIC0mZ3Q7IGRlY2x0eXBlIChyZWFsZm4gKHQpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZWFsZm4gKHQpOworICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICB2b2lkIGYoKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZvcndhcmQoezEsMn0pOyAvLyBjYWxsIGZvcndhcmQmbHQ7c3RkOjppbml0aWFsaXplcl9saXN0Jmx0O2ludCZndDsmZ3Q7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwPlRoaXMgZGVkdWN0aW9uIHdhcyBpbXBsZW1lbnRlZCBhcyBhIHBvc3NpYmxlIGV4dGVuc2lvbiB0byB0aGUKK29yaWdpbmFsbHkgcHJvcG9zZWQgc2VtYW50aWNzIGZvciB0aGUgQysrMTEgc3RhbmRhcmQsIGJ1dCB3YXMgbm90IHBhcnQKK29mIHRoZSBmaW5hbCBzdGFuZGFyZCwgc28gaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRoaXMgb3B0aW9uIGlzCitkZXByZWNhdGVkLCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBHKysuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmZyaWVuZC1pbmplY3Rpb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZmcmllbmRfMDAyZGluamVjdGlvbi0xMzgiPjwvYT5JbmplY3QgZnJpZW5kIGZ1bmN0aW9ucyBpbnRvIHRoZSBlbmNsb3NpbmcgbmFtZXNwYWNlLCBzbyB0aGF0IHRoZXkgYXJlCit2aXNpYmxlIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBjbGFzcyBpbiB3aGljaCB0aGV5IGFyZSBkZWNsYXJlZC4gCitGcmllbmQgZnVuY3Rpb25zIHdlcmUgZG9jdW1lbnRlZCB0byB3b3JrIHRoaXMgd2F5IGluIHRoZSBvbGQgQW5ub3RhdGVkCitDKysgUmVmZXJlbmNlIE1hbnVhbCwgYW5kIHZlcnNpb25zIG9mIEcrKyBiZWZvcmUgNC4xIGFsd2F5cyB3b3JrZWQKK3RoYXQgd2F5LiAgSG93ZXZlciwgaW4gSVNPIEMrKyBhIGZyaWVuZCBmdW5jdGlvbiB0aGF0IGlzIG5vdCBkZWNsYXJlZAoraW4gYW4gZW5jbG9zaW5nIHNjb3BlIGNhbiBvbmx5IGJlIGZvdW5kIHVzaW5nIGFyZ3VtZW50IGRlcGVuZGVudAorbG9va3VwLiAgVGhpcyBvcHRpb24gY2F1c2VzIGZyaWVuZHMgdG8gYmUgaW5qZWN0ZWQgYXMgdGhleSB3ZXJlIGluCitlYXJsaWVyIHJlbGVhc2VzLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGZvciBjb21wYXRpYmlsaXR5LCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUKK3JlbGVhc2Ugb2YgRysrLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1lbGlkZS1jb25zdHJ1Y3RvcnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkZWxpZGVfMDAyZGNvbnN0cnVjdG9ycy0xMzkiPjwvYT5UaGUgQysrIHN0YW5kYXJkIGFsbG93cyBhbiBpbXBsZW1lbnRhdGlvbiB0byBvbWl0IGNyZWF0aW5nIGEgdGVtcG9yYXJ5Cit0aGF0IGlzIG9ubHkgdXNlZCB0byBpbml0aWFsaXplIGFub3RoZXIgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUuIAorU3BlY2lmeWluZyB0aGlzIG9wdGlvbiBkaXNhYmxlcyB0aGF0IG9wdGltaXphdGlvbiwgYW5kIGZvcmNlcyBHKysgdG8KK2NhbGwgdGhlIGNvcHkgY29uc3RydWN0b3IgaW4gYWxsIGNhc2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1lbmZvcmNlLWVoLXNwZWNzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGVuZm9yY2VfMDAyZGVoXzAwMmRzcGVjcy0xNDAiPjwvYT5Eb24ndCBnZW5lcmF0ZSBjb2RlIHRvIGNoZWNrIGZvciB2aW9sYXRpb24gb2YgZXhjZXB0aW9uIHNwZWNpZmljYXRpb25zCithdCBydW4gdGltZS4gIFRoaXMgb3B0aW9uIHZpb2xhdGVzIHRoZSBDKysgc3RhbmRhcmQsIGJ1dCBtYXkgYmUgdXNlZnVsCitmb3IgcmVkdWNpbmcgY29kZSBzaXplIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBtdWNoIGxpa2UgZGVmaW5pbmcKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TkRFQlVHPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBkb2VzIG5vdCBnaXZlIHVzZXIgY29kZSBwZXJtaXNzaW9uIHRvIHRocm93CitleGNlcHRpb25zIGluIHZpb2xhdGlvbiBvZiB0aGUgZXhjZXB0aW9uIHNwZWNpZmljYXRpb25zOyB0aGUgY29tcGlsZXIKK3N0aWxsIG9wdGltaXplcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWNhdGlvbnMsIHNvIHRocm93aW5nIGFuCit1bmV4cGVjdGVkIGV4Y2VwdGlvbiByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvciBhdCBydW4gdGltZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZXh0ZXJuLXRscy1pbml0PC9jb2RlPjxkdD48Y29kZT4tZm5vLWV4dGVybi10bHMtaW5pdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmV4dGVybl8wMDJkdGxzXzAwMmRpbml0LTE0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWZub18wMDJkZXh0ZXJuXzAwMmR0bHNfMDAyZGluaXQtMTQyIj48L2E+VGhlIEMrKzExIGFuZCBPcGVuTVAgc3RhbmRhcmRzIGFsbG93ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dGhyZWFkX2xvY2FsPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50aHJlYWRwcml2YXRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IHZhcmlhYmxlcyB0byBoYXZlIGR5bmFtaWMgKHJ1bnRpbWUpCitpbml0aWFsaXphdGlvbi4gIFRvIHN1cHBvcnQgdGhpcywgYW55IHVzZSBvZiBzdWNoIGEgdmFyaWFibGUgZ29lcwordGhyb3VnaCBhIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhbnkgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uLiAKK1doZW4gdGhlIHVzZSBhbmQgZGVmaW5pdGlvbiBvZiB0aGUgdmFyaWFibGUgYXJlIGluIHRoZSBzYW1lCit0cmFuc2xhdGlvbiB1bml0LCB0aGlzIG92ZXJoZWFkIGNhbiBiZSBvcHRpbWl6ZWQgYXdheSwgYnV0IHdoZW4gdGhlCit1c2UgaXMgaW4gYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24gdW5pdCB0aGVyZSBpcyBzaWduaWZpY2FudCBvdmVyaGVhZAorZXZlbiBpZiB0aGUgdmFyaWFibGUgZG9lc24ndCBhY3R1YWxseSBuZWVkIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24uICBJZgordGhlIHByb2dyYW1tZXIgY2FuIGJlIHN1cmUgdGhhdCBubyB1c2Ugb2YgdGhlIHZhcmlhYmxlIGluIGEKK25vbi1kZWZpbmluZyBUVSBuZWVkcyB0byB0cmlnZ2VyIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gKGVpdGhlcgorYmVjYXVzZSB0aGUgdmFyaWFibGUgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCwgb3IgYSB1c2Ugb2YgdGhlCit2YXJpYWJsZSBpbiB0aGUgZGVmaW5pbmcgVFUgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgYW55IHVzZXMgaW4KK2Fub3RoZXIgVFUpLCB0aGV5IGNhbiBhdm9pZCB0aGlzIG92ZXJoZWFkIHdpdGggdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWV4dGVybi10bHMtaW5pdDwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8cD5PbiB0YXJnZXRzIHRoYXQgc3VwcG9ydCBzeW1ib2wgYWxpYXNlcywgdGhlIGRlZmF1bHQgaXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZXh0ZXJuLXRscy1pbml0PC9zcGFuPjwvc2FtcD4uICBPbiB0YXJnZXRzIHRoYXQgZG8gbm90IHN1cHBvcnQgc3ltYm9sCithbGlhc2VzLCB0aGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWV4dGVybi10bHMtaW5pdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZmb3Itc2NvcGU8L2NvZGU+PGR0Pjxjb2RlPi1mbm8tZm9yLXNjb3BlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZm9yXzAwMmRzY29wZS0xNDMiPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGZvcl8wMDJkc2NvcGUtMTQ0Ij48L2E+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmb3Itc2NvcGU8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQsIHRoZSBzY29wZSBvZiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4KK2EgPGk+Zm9yLWluaXQtc3RhdGVtZW50PC9pPiBpcyBsaW1pdGVkIHRvIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBsb29wIGl0c2VsZiwKK2FzIHNwZWNpZmllZCBieSB0aGUgQysrIHN0YW5kYXJkLiAKK0lmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZm9yLXNjb3BlPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLCB0aGUgc2NvcGUgb2YgdmFyaWFibGVzIGRlY2xhcmVkIGluCithIDxpPmZvci1pbml0LXN0YXRlbWVudDwvaT4gZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBlbmNsb3Npbmcgc2NvcGUsCithcyB3YXMgdGhlIGNhc2UgaW4gb2xkIHZlcnNpb25zIG9mIEcrKywgYW5kIG90aGVyICh0cmFkaXRpb25hbCkKK2ltcGxlbWVudGF0aW9ucyBvZiBDKysuCisKKyAgICAgPHA+SWYgbmVpdGhlciBmbGFnIGlzIGdpdmVuLCB0aGUgZGVmYXVsdCBpcyB0byBmb2xsb3cgdGhlIHN0YW5kYXJkLAorYnV0IHRvIGFsbG93IGFuZCBnaXZlIGEgd2FybmluZyBmb3Igb2xkLXN0eWxlIGNvZGUgdGhhdCB3b3VsZAorb3RoZXJ3aXNlIGJlIGludmFsaWQsIG9yIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1nbnUta2V5d29yZHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkZ251XzAwMmRrZXl3b3Jkcy0xNDUiPjwvYT5EbyBub3QgcmVjb2duaXplIDxjb2RlPnR5cGVvZjwvY29kZT4gYXMgYSBrZXl3b3JkLCBzbyB0aGF0IGNvZGUgY2FuIHVzZSB0aGlzCit3b3JkIGFzIGFuIGlkZW50aWZpZXIuICBZb3UgY2FuIHVzZSB0aGUga2V5d29yZCA8Y29kZT5fX3R5cGVvZl9fPC9jb2RlPiBpbnN0ZWFkLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWdudS1rZXl3b3Jkczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1pbXBsaWNpdC10ZW1wbGF0ZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkaW1wbGljaXRfMDAyZHRlbXBsYXRlcy0xNDYiPjwvYT5OZXZlciBlbWl0IGNvZGUgZm9yIG5vbi1pbmxpbmUgdGVtcGxhdGVzIHRoYXQgYXJlIGluc3RhbnRpYXRlZAoraW1wbGljaXRseSAoaS5lLiBieSB1c2UpOyBvbmx5IGVtaXQgY29kZSBmb3IgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMuIAorU2VlIDxhIGhyZWY9IlRlbXBsYXRlLUluc3RhbnRpYXRpb24uaHRtbCNUZW1wbGF0ZS1JbnN0YW50aWF0aW9uIj5UZW1wbGF0ZSBJbnN0YW50aWF0aW9uPC9hPiwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWltcGxpY2l0LWlubGluZS10ZW1wbGF0ZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkaW1wbGljaXRfMDAyZGlubGluZV8wMDJkdGVtcGxhdGVzLTE0NyI+PC9hPkRvbid0IGVtaXQgY29kZSBmb3IgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgb2YgaW5saW5lIHRlbXBsYXRlcywgZWl0aGVyLiAKK1RoZSBkZWZhdWx0IGlzIHRvIGhhbmRsZSBpbmxpbmVzIGRpZmZlcmVudGx5IHNvIHRoYXQgY29tcGlsZXMgd2l0aCBhbmQKK3dpdGhvdXQgb3B0aW1pemF0aW9uIG5lZWQgdGhlIHNhbWUgc2V0IG9mIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1pbXBsZW1lbnQtaW5saW5lczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRpbXBsZW1lbnRfMDAyZGlubGluZXMtMTQ4Ij48L2E+VG8gc2F2ZSBzcGFjZSwgZG8gbm90IGVtaXQgb3V0LW9mLWxpbmUgY29waWVzIG9mIGlubGluZSBmdW5jdGlvbnMKK2NvbnRyb2xsZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBjYXVzZXMgbGlua2VyCitlcnJvcnMgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW5saW5lZCBldmVyeXdoZXJlIHRoZXkgYXJlIGNhbGxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbXMtZXh0ZW5zaW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm1zXzAwMmRleHRlbnNpb25zLTE0OSI+PC9hPkRpc2FibGUgV3BlZGFudGljIHdhcm5pbmdzIGFib3V0IGNvbnN0cnVjdHMgdXNlZCBpbiBNRkMsIHN1Y2ggYXMgaW1wbGljaXQKK2ludCBhbmQgZ2V0dGluZyBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHZpYSBub24tc3RhbmRhcmQgc3ludGF4LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1ub25hbnNpLWJ1aWx0aW5zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZG5vbmFuc2lfMDAyZGJ1aWx0aW5zLTE1MCI+PC9hPkRpc2FibGUgYnVpbHQtaW4gZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgbWFuZGF0ZWQgYnkKK0FOU0kvSVNPIEMuICBUaGVzZSBpbmNsdWRlIDxjb2RlPmZmczwvY29kZT4sIDxjb2RlPmFsbG9jYTwvY29kZT4sIDxjb2RlPl9leGl0PC9jb2RlPiwKKzxjb2RlPmluZGV4PC9jb2RlPiwgPGNvZGU+Ynplcm88L2NvZGU+LCA8Y29kZT5jb25qZjwvY29kZT4sIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm90aHJvdy1vcHQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub3Rocm93XzAwMmRvcHQtMTUxIj48L2E+VHJlYXQgYSA8Y29kZT50aHJvdygpPC9jb2RlPiBleGNlcHRpb24gc3BlY2lmaWNhdGlvbiBhcyBpZiBpdCB3ZXJlIGEKKzxjb2RlPm5vZXhjZXB0PC9jb2RlPiBzcGVjaWZpY2F0aW9uIHRvIHJlZHVjZSBvciBlbGltaW5hdGUgdGhlIHRleHQgc2l6ZQorb3ZlcmhlYWQgcmVsYXRpdmUgdG8gYSBmdW5jdGlvbiB3aXRoIG5vIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uLiAgSWYKK3RoZSBmdW5jdGlvbiBoYXMgbG9jYWwgdmFyaWFibGVzIG9mIHR5cGVzIHdpdGggbm9uLXRyaXZpYWwKK2Rlc3RydWN0b3JzLCB0aGUgZXhjZXB0aW9uIHNwZWNpZmljYXRpb24gYWN0dWFsbHkgbWFrZXMgdGhlCitmdW5jdGlvbiBzbWFsbGVyIGJlY2F1c2UgdGhlIEVIIGNsZWFudXBzIGZvciB0aG9zZSB2YXJpYWJsZXMgY2FuIGJlCitvcHRpbWl6ZWQgYXdheS4gIFRoZSBzZW1hbnRpYyBlZmZlY3QgaXMgdGhhdCBhbiBleGNlcHRpb24gdGhyb3duIG91dCBvZgorYSBmdW5jdGlvbiB3aXRoIHN1Y2ggYW4gZXhjZXB0aW9uIHNwZWNpZmljYXRpb24gcmVzdWx0cyBpbiBhIGNhbGwKK3RvIDxjb2RlPnRlcm1pbmF0ZTwvY29kZT4gcmF0aGVyIHRoYW4gPGNvZGU+dW5leHBlY3RlZDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLW9wZXJhdG9yLW5hbWVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZG9wZXJhdG9yXzAwMmRuYW1lcy0xNTIiPjwvYT5EbyBub3QgdHJlYXQgdGhlIG9wZXJhdG9yIG5hbWUga2V5d29yZHMgPGNvZGU+YW5kPC9jb2RlPiwgPGNvZGU+Yml0YW5kPC9jb2RlPiwKKzxjb2RlPmJpdG9yPC9jb2RlPiwgPGNvZGU+Y29tcGw8L2NvZGU+LCA8Y29kZT5ub3Q8L2NvZGU+LCA8Y29kZT5vcjwvY29kZT4gYW5kIDxjb2RlPnhvcjwvY29kZT4gYXMKK3N5bm9ueW1zIGFzIGtleXdvcmRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1vcHRpb25hbC1kaWFnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRvcHRpb25hbF8wMDJkZGlhZ3MtMTUzIj48L2E+RGlzYWJsZSBkaWFnbm9zdGljcyB0aGF0IHRoZSBzdGFuZGFyZCBzYXlzIGEgY29tcGlsZXIgZG9lcyBub3QgbmVlZCB0bworaXNzdWUuICBDdXJyZW50bHksIHRoZSBvbmx5IHN1Y2ggZGlhZ25vc3RpYyBpc3N1ZWQgYnkgRysrIGlzIHRoZSBvbmUgZm9yCithIG5hbWUgaGF2aW5nIG11bHRpcGxlIG1lYW5pbmdzIHdpdGhpbiBhIGNsYXNzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwZXJtaXNzaXZlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcGVybWlzc2l2ZS0xNTQiPjwvYT5Eb3duZ3JhZGUgc29tZSBkaWFnbm9zdGljcyBhYm91dCBub25jb25mb3JtYW50IGNvZGUgZnJvbSBlcnJvcnMgdG8KK3dhcm5pbmdzLiAgVGh1cywgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwZXJtaXNzaXZlPC9zcGFuPjwvc2FtcD4gYWxsb3dzIHNvbWUKK25vbmNvbmZvcm1pbmcgY29kZSB0byBjb21waWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1wcmV0dHktdGVtcGxhdGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZHByZXR0eV8wMDJkdGVtcGxhdGVzLTE1NSI+PC9hPldoZW4gYW4gZXJyb3IgbWVzc2FnZSByZWZlcnMgdG8gYSBzcGVjaWFsaXphdGlvbiBvZiBhIGZ1bmN0aW9uCit0ZW1wbGF0ZSwgdGhlIGNvbXBpbGVyIG5vcm1hbGx5IHByaW50cyB0aGUgc2lnbmF0dXJlIG9mIHRoZQordGVtcGxhdGUgZm9sbG93ZWQgYnkgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBhbmQgYW55IHR5cGVkZWZzIG9yCit0eXBlbmFtZXMgaW4gdGhlIHNpZ25hdHVyZSAoZS5nLiA8Y29kZT52b2lkIGYoVCkgW3dpdGggVCA9IGludF08L2NvZGU+CityYXRoZXIgdGhhbiA8Y29kZT52b2lkIGYoaW50KTwvY29kZT4pIHNvIHRoYXQgaXQncyBjbGVhciB3aGljaCB0ZW1wbGF0ZSBpcworaW52b2x2ZWQuICBXaGVuIGFuIGVycm9yIG1lc3NhZ2UgcmVmZXJzIHRvIGEgc3BlY2lhbGl6YXRpb24gb2YgYSBjbGFzcwordGVtcGxhdGUsIHRoZSBjb21waWxlciBvbWl0cyBhbnkgdGVtcGxhdGUgYXJndW1lbnRzIHRoYXQgbWF0Y2gKK3RoZSBkZWZhdWx0IHRlbXBsYXRlIGFyZ3VtZW50cyBmb3IgdGhhdCB0ZW1wbGF0ZS4gIElmIGVpdGhlciBvZiB0aGVzZQorYmVoYXZpb3JzIG1ha2UgaXQgaGFyZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIG1lc3NhZ2UgcmF0aGVyIHRoYW4KK2Vhc2llciwgeW91IGNhbiB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1wcmV0dHktdGVtcGxhdGVzPC9zcGFuPjwvc2FtcD4gdG8gZGlzYWJsZSB0aGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZyZXBvPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcmVwby0xNTYiPjwvYT5FbmFibGUgYXV0b21hdGljIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gYXQgbGluayB0aW1lLiAgVGhpcyBvcHRpb24gYWxzbworaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWltcGxpY2l0LXRlbXBsYXRlczwvc3Bhbj48L3NhbXA+LiAgU2VlIDxhIGhyZWY9IlRlbXBsYXRlLUluc3RhbnRpYXRpb24uaHRtbCNUZW1wbGF0ZS1JbnN0YW50aWF0aW9uIj5UZW1wbGF0ZSBJbnN0YW50aWF0aW9uPC9hPiwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLXJ0dGk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkcnR0aS0xNTciPjwvYT5EaXNhYmxlIGdlbmVyYXRpb24gb2YgaW5mb3JtYXRpb24gYWJvdXQgZXZlcnkgY2xhc3Mgd2l0aCB2aXJ0dWFsCitmdW5jdGlvbnMgZm9yIHVzZSBieSB0aGUgQysrIHJ1bi10aW1lIHR5cGUgaWRlbnRpZmljYXRpb24gZmVhdHVyZXMKKygmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmR5bmFtaWNfY2FzdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50eXBlaWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAgSWYgeW91IGRvbid0IHVzZSB0aG9zZSBwYXJ0cworb2YgdGhlIGxhbmd1YWdlLCB5b3UgY2FuIHNhdmUgc29tZSBzcGFjZSBieSB1c2luZyB0aGlzIGZsYWcuICBOb3RlIHRoYXQKK2V4Y2VwdGlvbiBoYW5kbGluZyB1c2VzIHRoZSBzYW1lIGluZm9ybWF0aW9uLCBidXQgRysrIGdlbmVyYXRlcyBpdCBhcworbmVlZGVkLiBUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5keW5hbWljX2Nhc3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3BlcmF0b3IgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIGNhc3RzIHRoYXQKK2RvIG5vdCByZXF1aXJlIHJ1bi10aW1lIHR5cGUgaW5mb3JtYXRpb24sIGkuZS4gY2FzdHMgdG8gPGNvZGU+dm9pZCAqPC9jb2RlPiBvciB0bwordW5hbWJpZ3VvdXMgYmFzZSBjbGFzc2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzdGF0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnN0YXRzLTE1OCI+PC9hPkVtaXQgc3RhdGlzdGljcyBhYm91dCBmcm9udC1lbmQgcHJvY2Vzc2luZyBhdCB0aGUgZW5kIG9mIHRoZSBjb21waWxhdGlvbi4gCitUaGlzIGluZm9ybWF0aW9uIGlzIGdlbmVyYWxseSBvbmx5IHVzZWZ1bCB0byB0aGUgRysrIGRldmVsb3BtZW50IHRlYW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnN0cmljdC1lbnVtczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnN0cmljdF8wMDJkZW51bXMtMTU5Ij48L2E+QWxsb3cgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIHVzaW5nIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSB2YWx1ZSBvZgorZW51bWVyYXRlZCB0eXBlIGNhbiBvbmx5IGJlIG9uZSBvZiB0aGUgdmFsdWVzIG9mIHRoZSBlbnVtZXJhdGlvbiAoYXMKK2RlZmluZWQgaW4gdGhlIEMrKyBzdGFuZGFyZDsgYmFzaWNhbGx5LCBhIHZhbHVlIHRoYXQgY2FuIGJlCityZXByZXNlbnRlZCBpbiB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IGFsbCB0aGUKK2VudW1lcmF0b3JzKS4gIFRoaXMgYXNzdW1wdGlvbiBtYXkgbm90IGJlIHZhbGlkIGlmIHRoZSBwcm9ncmFtIHVzZXMgYQorY2FzdCB0byBjb252ZXJ0IGFuIGFyYml0cmFyeSBpbnRlZ2VyIHZhbHVlIHRvIHRoZSBlbnVtZXJhdGVkIHR5cGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRlbXBsYXRlLWJhY2t0cmFjZS1saW1pdD08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZ0ZW1wbGF0ZV8wMDJkYmFja3RyYWNlXzAwMmRsaW1pdC0xNjAiPjwvYT5TZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gbm90ZXMgZm9yIGEgc2luZ2xlCit3YXJuaW5nIG9yIGVycm9yIHRvIDx2YXI+bjwvdmFyPi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0ZW1wbGF0ZS1kZXB0aD08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZ0ZW1wbGF0ZV8wMDJkZGVwdGgtMTYxIj48L2E+U2V0IHRoZSBtYXhpbXVtIGluc3RhbnRpYXRpb24gZGVwdGggZm9yIHRlbXBsYXRlIGNsYXNzZXMgdG8gPHZhcj5uPC92YXI+LiAKK0EgbGltaXQgb24gdGhlIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gZGVwdGggaXMgbmVlZGVkIHRvIGRldGVjdAorZW5kbGVzcyByZWN1cnNpb25zIGR1cmluZyB0ZW1wbGF0ZSBjbGFzcyBpbnN0YW50aWF0aW9uLiAgQU5TSS9JU08gQysrCitjb25mb3JtaW5nIHByb2dyYW1zIG11c3Qgbm90IHJlbHkgb24gYSBtYXhpbXVtIGRlcHRoIGdyZWF0ZXIgdGhhbiAxNworKGNoYW5nZWQgdG8gMTAyNCBpbiBDKysxMSkuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA5MDAsIGFzIHRoZSBjb21waWxlcgorY2FuIHJ1biBvdXQgb2Ygc3RhY2sgc3BhY2UgYmVmb3JlIGhpdHRpbmcgMTAyNCBpbiBzb21lIHNpdHVhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLXRocmVhZHNhZmUtc3RhdGljczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmR0aHJlYWRzYWZlXzAwMmRzdGF0aWNzLTE2MiI+PC9hPkRvIG5vdCBlbWl0IHRoZSBleHRyYSBjb2RlIHRvIHVzZSB0aGUgcm91dGluZXMgc3BlY2lmaWVkIGluIHRoZSBDKysKK0FCSSBmb3IgdGhyZWFkLXNhZmUgaW5pdGlhbGl6YXRpb24gb2YgbG9jYWwgc3RhdGljcy4gIFlvdSBjYW4gdXNlIHRoaXMKK29wdGlvbiB0byByZWR1Y2UgY29kZSBzaXplIHNsaWdodGx5IGluIGNvZGUgdGhhdCBkb2Vzbid0IG5lZWQgdG8gYmUKK3RocmVhZC1zYWZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ1c2UtY3hhLWF0ZXhpdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnVzZV8wMDJkY3hhXzAwMmRhdGV4aXQtMTYzIj48L2E+UmVnaXN0ZXIgZGVzdHJ1Y3RvcnMgZm9yIG9iamVjdHMgd2l0aCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiB3aXRoIHRoZQorPGNvZGU+X19jeGFfYXRleGl0PC9jb2RlPiBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgPGNvZGU+YXRleGl0PC9jb2RlPiBmdW5jdGlvbi4gCitUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgZnVsbHkgc3RhbmRhcmRzLWNvbXBsaWFudCBoYW5kbGluZyBvZiBzdGF0aWMKK2Rlc3RydWN0b3JzLCBidXQgb25seSB3b3JrcyBpZiB5b3VyIEMgbGlicmFyeSBzdXBwb3J0cworPGNvZGU+X19jeGFfYXRleGl0PC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tdXNlLWN4YS1nZXQtZXhjZXB0aW9uLXB0cjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmR1c2VfMDAyZGN4YV8wMDJkZ2V0XzAwMmRleGNlcHRpb25fMDAyZHB0ci0xNjQiPjwvYT5Eb24ndCB1c2UgdGhlIDxjb2RlPl9fY3hhX2dldF9leGNlcHRpb25fcHRyPC9jb2RlPiBydW50aW1lIHJvdXRpbmUuICBUaGlzCitjYXVzZXMgPGNvZGU+c3RkOjp1bmNhdWdodF9leGNlcHRpb248L2NvZGU+IHRvIGJlIGluY29ycmVjdCwgYnV0IGlzIG5lY2Vzc2FyeQoraWYgdGhlIHJ1bnRpbWUgcm91dGluZSBpcyBub3QgYXZhaWxhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdmlzaWJpbGl0eV8wMDJkaW5saW5lc18wMDJkaGlkZGVuLTE2NSI+PC9hPlRoaXMgc3dpdGNoIGRlY2xhcmVzIHRoYXQgdGhlIHVzZXIgZG9lcyBub3QgYXR0ZW1wdCB0byBjb21wYXJlCitwb2ludGVycyB0byBpbmxpbmUgZnVuY3Rpb25zIG9yIG1ldGhvZHMgd2hlcmUgdGhlIGFkZHJlc3NlcyBvZiB0aGUgdHdvIGZ1bmN0aW9ucworYXJlIHRha2VuIGluIGRpZmZlcmVudCBzaGFyZWQgb2JqZWN0cy4KKworICAgICA8cD5UaGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCBHQ0MgbWF5LCBlZmZlY3RpdmVseSwgbWFyayBpbmxpbmUgbWV0aG9kcyB3aXRoCis8Y29kZT5fX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk8L2NvZGU+IHNvIHRoYXQgdGhleSBkbyBub3QKK2FwcGVhciBpbiB0aGUgZXhwb3J0IHRhYmxlIG9mIGEgRFNPIGFuZCBkbyBub3QgcmVxdWlyZSBhIFBMVCBpbmRpcmVjdGlvbgord2hlbiB1c2VkIHdpdGhpbiB0aGUgRFNPLiAgRW5hYmxpbmcgdGhpcyBvcHRpb24gY2FuIGhhdmUgYSBkcmFtYXRpYyBlZmZlY3QKK29uIGxvYWQgYW5kIGxpbmsgdGltZXMgb2YgYSBEU08gYXMgaXQgbWFzc2l2ZWx5IHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlCitkeW5hbWljIGV4cG9ydCB0YWJsZSB3aGVuIHRoZSBsaWJyYXJ5IG1ha2VzIGhlYXZ5IHVzZSBvZiB0ZW1wbGF0ZXMuCisKKyAgICAgPHA+VGhlIGJlaGF2aW9yIG9mIHRoaXMgc3dpdGNoIGlzIG5vdCBxdWl0ZSB0aGUgc2FtZSBhcyBtYXJraW5nIHRoZQorbWV0aG9kcyBhcyBoaWRkZW4gZGlyZWN0bHksIGJlY2F1c2UgaXQgZG9lcyBub3QgYWZmZWN0IHN0YXRpYyB2YXJpYWJsZXMKK2xvY2FsIHRvIHRoZSBmdW5jdGlvbiBvciBjYXVzZSB0aGUgY29tcGlsZXIgdG8gZGVkdWNlIHRoYXQKK3RoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIG9ubHkgb25lIHNoYXJlZCBvYmplY3QuCisKKyAgICAgPHA+WW91IG1heSBtYXJrIGEgbWV0aG9kIGFzIGhhdmluZyBhIHZpc2liaWxpdHkgZXhwbGljaXRseSB0byBuZWdhdGUgdGhlCitlZmZlY3Qgb2YgdGhlIHN3aXRjaCBmb3IgdGhhdCBtZXRob2QuICBGb3IgZXhhbXBsZSwgaWYgeW91IGRvIHdhbnQgdG8KK2NvbXBhcmUgcG9pbnRlcnMgdG8gYSBwYXJ0aWN1bGFyIGlubGluZSBtZXRob2QsIHlvdSBtaWdodCBtYXJrIGl0IGFzCitoYXZpbmcgZGVmYXVsdCB2aXNpYmlsaXR5LiAgTWFya2luZyB0aGUgZW5jbG9zaW5nIGNsYXNzIHdpdGggZXhwbGljaXQKK3Zpc2liaWxpdHkgaGFzIG5vIGVmZmVjdC4KKworICAgICA8cD5FeHBsaWNpdGx5IGluc3RhbnRpYXRlZCBpbmxpbmUgbWV0aG9kcyBhcmUgdW5hZmZlY3RlZCBieSB0aGlzIG9wdGlvbgorYXMgdGhlaXIgbGlua2FnZSBtaWdodCBvdGhlcndpc2UgY3Jvc3MgYSBzaGFyZWQgbGlicmFyeSBib3VuZGFyeS4gCitTZWUgPGEgaHJlZj0iVGVtcGxhdGUtSW5zdGFudGlhdGlvbi5odG1sI1RlbXBsYXRlLUluc3RhbnRpYXRpb24iPlRlbXBsYXRlIEluc3RhbnRpYXRpb248L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ2aXNpYmlsaXR5LW1zLWNvbXBhdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnZpc2liaWxpdHlfMDAyZG1zXzAwMmRjb21wYXQtMTY2Ij48L2E+VGhpcyBmbGFnIGF0dGVtcHRzIHRvIHVzZSB2aXNpYmlsaXR5IHNldHRpbmdzIHRvIG1ha2UgR0NDJ3MgQysrCitsaW5rYWdlIG1vZGVsIGNvbXBhdGlibGUgd2l0aCB0aGF0IG9mIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLgorCisgICAgIDxwPlRoZSBmbGFnIG1ha2VzIHRoZXNlIGNoYW5nZXMgdG8gR0NDJ3MgbGlua2FnZSBtb2RlbDoKKworICAgICAgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5JdCBzZXRzIHRoZSBkZWZhdWx0IHZpc2liaWxpdHkgdG8gPGNvZGU+aGlkZGVuPC9jb2RlPiwgbGlrZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ2aXNpYmlsaXR5PWhpZGRlbjwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGxpPlR5cGVzLCBidXQgbm90IHRoZWlyIG1lbWJlcnMsIGFyZSBub3QgaGlkZGVuIGJ5IGRlZmF1bHQuCisKKyAgICAgICAgICA8bGk+VGhlIE9uZSBEZWZpbml0aW9uIFJ1bGUgaXMgcmVsYXhlZCBmb3IgdHlwZXMgd2l0aG91dCBleHBsaWNpdAordmlzaWJpbGl0eSBzcGVjaWZpY2F0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIG1vcmUgdGhhbiBvbmUKK3NoYXJlZCBvYmplY3Q6IHRob3NlIGRlY2xhcmF0aW9ucyBhcmUgcGVybWl0dGVkIGlmIHRoZXkgYXJlCitwZXJtaXR0ZWQgd2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZC4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPkluIG5ldyBjb2RlIGl0IGlzIGJldHRlciB0byB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ2aXNpYmlsaXR5PWhpZGRlbjwvc3Bhbj48L3NhbXA+IGFuZAorZXhwb3J0IHRob3NlIGNsYXNzZXMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgZXh0ZXJuYWxseSB2aXNpYmxlLiAKK1VuZm9ydHVuYXRlbHkgaXQgaXMgcG9zc2libGUgZm9yIGNvZGUgdG8gcmVseSwgcGVyaGFwcyBhY2NpZGVudGFsbHksCitvbiB0aGUgVmlzdWFsIFN0dWRpbyBiZWhhdmlvci4KKworICAgICA8cD5BbW9uZyB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZXNlIGNoYW5nZXMgYXJlIHRoYXQgc3RhdGljIGRhdGEgbWVtYmVycworb2YgdGhlIHNhbWUgdHlwZSB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IGRlZmluZWQgaW4gZGlmZmVyZW50IHNoYXJlZAorb2JqZWN0cyBhcmUgZGlmZmVyZW50LCBzbyBjaGFuZ2luZyBvbmUgZG9lcyBub3QgY2hhbmdlIHRoZSBvdGhlcjsKK2FuZCB0aGF0IHBvaW50ZXJzIHRvIGZ1bmN0aW9uIG1lbWJlcnMgZGVmaW5lZCBpbiBkaWZmZXJlbnQgc2hhcmVkCitvYmplY3RzIG1heSBub3QgY29tcGFyZSBlcXVhbC4gIFdoZW4gdGhpcyBmbGFnIGlzIGdpdmVuLCBpdCBpcyBhCit2aW9sYXRpb24gb2YgdGhlIE9EUiB0byBkZWZpbmUgdHlwZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGRpZmZlcmVudGx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby13ZWFrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZHdlYWstMTY3Ij48L2E+RG8gbm90IHVzZSB3ZWFrIHN5bWJvbCBzdXBwb3J0LCBldmVuIGlmIGl0IGlzIHByb3ZpZGVkIGJ5IHRoZSBsaW5rZXIuIAorQnkgZGVmYXVsdCwgRysrIHVzZXMgd2VhayBzeW1ib2xzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZS4gIFRoaXMKK29wdGlvbiBleGlzdHMgb25seSBmb3IgdGVzdGluZywgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBieSBlbmQtdXNlcnM7CitpdCByZXN1bHRzIGluIGluZmVyaW9yIGNvZGUgYW5kIGhhcyBubyBiZW5lZml0cy4gIFRoaXMgb3B0aW9uIG1heQorYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlIG9mIEcrKy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub3N0ZGluYysrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ub3N0ZGluY18wMDJiXzAwMmItMTY4Ij48L2E+RG8gbm90IHNlYXJjaCBmb3IgaGVhZGVyIGZpbGVzIGluIHRoZSBzdGFuZGFyZCBkaXJlY3RvcmllcyBzcGVjaWZpYyB0bworQysrLCBidXQgZG8gc3RpbGwgc2VhcmNoIHRoZSBvdGhlciBzdGFuZGFyZCBkaXJlY3Rvcmllcy4gIChUaGlzIG9wdGlvbgoraXMgdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBDKysgbGlicmFyeS4pIAorPC9kbD4KKworIDxwPkluIGFkZGl0aW9uLCB0aGVzZSBvcHRpbWl6YXRpb24sIHdhcm5pbmcsIGFuZCBjb2RlIGdlbmVyYXRpb24gb3B0aW9ucworaGF2ZSBtZWFuaW5ncyBvbmx5IGZvciBDKysgcHJvZ3JhbXM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1mbm8tZGVmYXVsdC1pbmxpbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkZGVmYXVsdF8wMDJkaW5saW5lLTE2OSI+PC9hPkRvIG5vdCBhc3N1bWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbmxpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGZ1bmN0aW9ucyBkZWZpbmVkIGluc2lkZSBhIGNsYXNzIHNjb3BlLiAKK1NlZSA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW9ucyBUaGF0IENvbnRyb2wgT3B0aW1pemF0aW9uPC9hPi4gIE5vdGUgdGhhdCB0aGVzZQorZnVuY3Rpb25zIGhhdmUgbGlua2FnZSBsaWtlIGlubGluZSBmdW5jdGlvbnM7IHRoZXkganVzdCBhcmVuJ3QKK2lubGluZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYWJpIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDLCBPYmplY3RpdmUtQywgQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1XYWJpLTE3MCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkYWJpLTE3MSI+PC9hPldhcm4gd2hlbiBHKysgZ2VuZXJhdGVzIGNvZGUgdGhhdCBpcyBwcm9iYWJseSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZQordmVuZG9yLW5ldXRyYWwgQysrIEFCSS4gIEFsdGhvdWdoIGFuIGVmZm9ydCBoYXMgYmVlbiBtYWRlIHRvIHdhcm4gYWJvdXQKK2FsbCBzdWNoIGNhc2VzLCB0aGVyZSBhcmUgcHJvYmFibHkgc29tZSBjYXNlcyB0aGF0IGFyZSBub3Qgd2FybmVkIGFib3V0LAorZXZlbiB0aG91Z2ggRysrIGlzIGdlbmVyYXRpbmcgaW5jb21wYXRpYmxlIGNvZGUuICBUaGVyZSBtYXkgYWxzbyBiZQorY2FzZXMgd2hlcmUgd2FybmluZ3MgYXJlIGVtaXR0ZWQgZXZlbiB0aG91Z2ggdGhlIGNvZGUgdGhhdCBpcyBnZW5lcmF0ZWQKK2lzIGNvbXBhdGlibGUuCisKKyAgICAgPHA+WW91IHNob3VsZCByZXdyaXRlIHlvdXIgY29kZSB0byBhdm9pZCB0aGVzZSB3YXJuaW5ncyBpZiB5b3UgYXJlCitjb25jZXJuZWQgYWJvdXQgdGhlIGZhY3QgdGhhdCBjb2RlIGdlbmVyYXRlZCBieSBHKysgbWF5IG5vdCBiZSBiaW5hcnkKK2NvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCBieSBvdGhlciBjb21waWxlcnMuCisKKyAgICAgPHA+VGhlIGtub3duIGluY29tcGF0aWJpbGl0aWVzIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYWJpLXZlcnNpb249Mjwvc3Bhbj48L3NhbXA+ICh0aGUgZGVmYXVsdCkgaW5jbHVkZToKKworICAgICAgICAgIDx1bD4KKzxsaT5BIHRlbXBsYXRlIHdpdGggYSBub24tdHlwZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgb2YgcmVmZXJlbmNlIHR5cGUgaXMKK21hbmdsZWQgaW5jb3JyZWN0bHk6CisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICBleHRlcm4gaW50IE47CisgICAgICAgICAgICAgICB0ZW1wbGF0ZSAmbHQ7aW50ICZhbXA7Jmd0OyBzdHJ1Y3QgUyB7fTsKKyAgICAgICAgICAgICAgIHZvaWQgbiAoUyZsdDtOJmd0OykgezJ9Cis8L3ByZT4KKyAgICAgICAgICA8cD5UaGlzIGlzIGZpeGVkIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYWJpLXZlcnNpb249Mzwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGxpPlNJTUQgdmVjdG9yIHR5cGVzIGRlY2xhcmVkIHVzaW5nIDxjb2RlPl9fYXR0cmlidXRlICgodmVjdG9yX3NpemUpKTwvY29kZT4gYXJlCittYW5nbGVkIGluIGEgbm9uLXN0YW5kYXJkIHdheSB0aGF0IGRvZXMgbm90IGFsbG93IGZvciBvdmVybG9hZGluZyBvZgorZnVuY3Rpb25zIHRha2luZyB2ZWN0b3JzIG9mIGRpZmZlcmVudCBzaXplcy4KKworICAgICAgICAgIDxwPlRoZSBtYW5nbGluZyBpcyBjaGFuZ2VkIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYWJpLXZlcnNpb249NDwvc3Bhbj48L3NhbXA+LiAKKzwvdWw+CisKKyAgICAgPHA+VGhlIGtub3duIGluY29tcGF0aWJpbGl0aWVzIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYWJpLXZlcnNpb249MTwvc3Bhbj48L3NhbXA+IGluY2x1ZGU6CisKKyAgICAgICAgICA8dWw+Cis8bGk+SW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRhaWwtcGFkZGluZyBmb3IgYml0LWZpZWxkcy4gIEcrKyBtYXkgYXR0ZW1wdCB0bworcGFjayBkYXRhIGludG8gdGhlIHNhbWUgYnl0ZSBhcyBhIGJhc2UgY2xhc3MuICBGb3IgZXhhbXBsZToKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgc3RydWN0IEEgeyB2aXJ0dWFsIHZvaWQgZigpOyBpbnQgZjEgOiAxOyB9OworICAgICAgICAgICAgICAgc3RydWN0IEIgOiBwdWJsaWMgQSB7IGludCBmMiA6IDE7IH07Cis8L3ByZT4KKyAgICAgICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkluIHRoaXMgY2FzZSwgRysrIHBsYWNlcyA8Y29kZT5COjpmMjwvY29kZT4gaW50byB0aGUgc2FtZSBieXRlCithcyA8Y29kZT5BOjpmMTwvY29kZT47IG90aGVyIGNvbXBpbGVycyBkbyBub3QuICBZb3UgY2FuIGF2b2lkIHRoaXMgcHJvYmxlbQorYnkgZXhwbGljaXRseSBwYWRkaW5nIDxjb2RlPkE8L2NvZGU+IHNvIHRoYXQgaXRzIHNpemUgaXMgYSBtdWx0aXBsZSBvZiB0aGUKK2J5dGUgc2l6ZSBvbiB5b3VyIHBsYXRmb3JtOyB0aGF0IGNhdXNlcyBHKysgYW5kIG90aGVyIGNvbXBpbGVycyB0bworbGF5IG91dCA8Y29kZT5CPC9jb2RlPiBpZGVudGljYWxseS4KKworICAgICAgICAgIDxsaT5JbmNvcnJlY3QgaGFuZGxpbmcgb2YgdGFpbC1wYWRkaW5nIGZvciB2aXJ0dWFsIGJhc2VzLiAgRysrIGRvZXMgbm90IHVzZQordGFpbCBwYWRkaW5nIHdoZW4gbGF5aW5nIG91dCB2aXJ0dWFsIGJhc2VzLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIHN0cnVjdCBBIHsgdmlydHVhbCB2b2lkIGYoKTsgY2hhciBjMTsgfTsKKyAgICAgICAgICAgICAgIHN0cnVjdCBCIHsgQigpOyBjaGFyIGMyOyB9OworICAgICAgICAgICAgICAgc3RydWN0IEMgOiBwdWJsaWMgQSwgcHVibGljIHZpcnR1YWwgQiB7fTsKKzwvcHJlPgorICAgICAgICAgIDxwIGNsYXNzPSJub2luZGVudCI+SW4gdGhpcyBjYXNlLCBHKysgZG9lcyBub3QgcGxhY2UgPGNvZGU+QjwvY29kZT4gaW50byB0aGUgdGFpbC1wYWRkaW5nIGZvcgorPGNvZGU+QTwvY29kZT47IG90aGVyIGNvbXBpbGVycyBkby4gIFlvdSBjYW4gYXZvaWQgdGhpcyBwcm9ibGVtIGJ5CitleHBsaWNpdGx5IHBhZGRpbmcgPGNvZGU+QTwvY29kZT4gc28gdGhhdCBpdHMgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIGl0cworYWxpZ25tZW50IChpZ25vcmluZyB2aXJ0dWFsIGJhc2UgY2xhc3Nlcyk7IHRoYXQgY2F1c2VzIEcrKyBhbmQgb3RoZXIKK2NvbXBpbGVycyB0byBsYXkgb3V0IDxjb2RlPkM8L2NvZGU+IGlkZW50aWNhbGx5LgorCisgICAgICAgICAgPGxpPkluY29ycmVjdCBoYW5kbGluZyBvZiBiaXQtZmllbGRzIHdpdGggZGVjbGFyZWQgd2lkdGhzIGdyZWF0ZXIgdGhhbiB0aGF0CitvZiB0aGVpciB1bmRlcmx5aW5nIHR5cGVzLCB3aGVuIHRoZSBiaXQtZmllbGRzIGFwcGVhciBpbiBhIHVuaW9uLiAgRm9yCitleGFtcGxlOgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICB1bmlvbiBVIHsgaW50IGkgOiA0MDk2OyB9OworPC9wcmU+CisgICAgICAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5Bc3N1bWluZyB0aGF0IGFuIDxjb2RlPmludDwvY29kZT4gZG9lcyBub3QgaGF2ZSA0MDk2IGJpdHMsIEcrKyBtYWtlcyB0aGUKK3VuaW9uIHRvbyBzbWFsbCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYW4gPGNvZGU+aW50PC9jb2RlPi4KKworICAgICAgICAgIDxsaT5FbXB0eSBjbGFzc2VzIGNhbiBiZSBwbGFjZWQgYXQgaW5jb3JyZWN0IG9mZnNldHMuICBGb3IgZXhhbXBsZToKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgc3RydWN0IEEge307CisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIHN0cnVjdCBCIHsKKyAgICAgICAgICAgICAgICAgQSBhOworICAgICAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZiAoKTsKKyAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIHN0cnVjdCBDIDogcHVibGljIEIsIHB1YmxpYyBBIHt9OworPC9wcmU+CisgICAgICAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5HKysgcGxhY2VzIHRoZSA8Y29kZT5BPC9jb2RlPiBiYXNlIGNsYXNzIG9mIDxjb2RlPkM8L2NvZGU+IGF0IGEgbm9uemVybyBvZmZzZXQ7CitpdCBzaG91bGQgYmUgcGxhY2VkIGF0IG9mZnNldCB6ZXJvLiAgRysrIG1pc3Rha2VubHkgYmVsaWV2ZXMgdGhhdCB0aGUKKzxjb2RlPkE8L2NvZGU+IGRhdGEgbWVtYmVyIG9mIDxjb2RlPkI8L2NvZGU+IGlzIGFscmVhZHkgYXQgb2Zmc2V0IHplcm8uCisKKyAgICAgICAgICA8bGk+TmFtZXMgb2YgdGVtcGxhdGUgZnVuY3Rpb25zIHdob3NlIHR5cGVzIGludm9sdmUgPGNvZGU+dHlwZW5hbWU8L2NvZGU+IG9yCit0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGNhbiBiZSBtYW5nbGVkIGluY29ycmVjdGx5LgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgUSZndDsKKyAgICAgICAgICAgICAgIHZvaWQgZih0eXBlbmFtZSBROjpYKSB7fQorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICB0ZW1wbGF0ZSAmbHQ7dGVtcGxhdGUgJmx0O3R5cGVuYW1lJmd0OyBjbGFzcyBRJmd0OworICAgICAgICAgICAgICAgdm9pZCBmKHR5cGVuYW1lIFEmbHQ7aW50Jmd0Ozo6WCkge30KKzwvcHJlPgorICAgICAgICAgIDxwIGNsYXNzPSJub2luZGVudCI+SW5zdGFudGlhdGlvbnMgb2YgdGhlc2UgdGVtcGxhdGVzIG1heSBiZSBtYW5nbGVkIGluY29ycmVjdGx5LgorCisgICAgIDwvdWw+CisKKyAgICAgPHA+SXQgYWxzbyB3YXJucyBhYm91dCBwc0FCSS1yZWxhdGVkIGNoYW5nZXMuICBUaGUga25vd24gcHNBQkkgY2hhbmdlcyBhdCB0aGlzCitwb2ludCBpbmNsdWRlOgorCisgICAgICAgICAgPHVsPgorPGxpPkZvciBTeXNWL3g4Ni02NCwgdW5pb25zIHdpdGggPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+IG1lbWJlcnMgYXJlCitwYXNzZWQgaW4gbWVtb3J5IGFzIHNwZWNpZmllZCBpbiBwc0FCSS4gIEZvciBleGFtcGxlOgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICB1bmlvbiBVIHsKKyAgICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgbGQ7CisgICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgfTsKKzwvcHJlPgorICAgICAgICAgIDxwIGNsYXNzPSJub2luZGVudCI+PGNvZGU+dW5pb24gVTwvY29kZT4gaXMgYWx3YXlzIHBhc3NlZCBpbiBtZW1vcnkuCisKKyAgICAgPC91bD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XY3Rvci1kdG9yLXByaXZhY3kgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMrKyBhbmQgT2JqZWN0aXZlLUMrKyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV2N0b3JfMDAyZGR0b3JfMDAyZHByaXZhY3ktMTcyIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRjdG9yXzAwMmRkdG9yXzAwMmRwcml2YWN5LTE3MyI+PC9hPldhcm4gd2hlbiBhIGNsYXNzIHNlZW1zIHVudXNhYmxlIGJlY2F1c2UgYWxsIHRoZSBjb25zdHJ1Y3RvcnMgb3IKK2Rlc3RydWN0b3JzIGluIHRoYXQgY2xhc3MgYXJlIHByaXZhdGUsIGFuZCBpdCBoYXMgbmVpdGhlciBmcmllbmRzIG5vcgorcHVibGljIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLiAgQWxzbyB3YXJuIGlmIHRoZXJlIGFyZSBubyBub24tcHJpdmF0ZQorbWV0aG9kcywgYW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIHByaXZhdGUgbWVtYmVyIGZ1bmN0aW9uIHRoYXQgaXNuJ3QKK2EgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3Rvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XZGVsZXRlLW5vbi12aXJ0dWFsLWR0b3IgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMrKyBhbmQgT2JqZWN0aXZlLUMrKyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV2RlbGV0ZV8wMDJkbm9uXzAwMmR2aXJ0dWFsXzAwMmRkdG9yLTE3NCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkZGVsZXRlXzAwMmRub25fMDAyZHZpcnR1YWxfMDAyZGR0b3ItMTc1Ij48L2E+V2FybiB3aGVuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGVsZXRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHVzZWQgdG8gZGVzdHJveSBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQKK2hhcyB2aXJ0dWFsIGZ1bmN0aW9ucyBhbmQgbm9uLXZpcnR1YWwgZGVzdHJ1Y3Rvci4gSXQgaXMgdW5zYWZlIHRvIGRlbGV0ZQorYW4gaW5zdGFuY2Ugb2YgYSBkZXJpdmVkIGNsYXNzIHRocm91Z2ggYSBwb2ludGVyIHRvIGEgYmFzZSBjbGFzcyBpZiB0aGUKK2Jhc2UgY2xhc3MgZG9lcyBub3QgaGF2ZSBhIHZpcnR1YWwgZGVzdHJ1Y3Rvci4gIFRoaXMgd2FybmluZyBpcyBlbmFibGVkCitieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdsaXRlcmFsLXN1ZmZpeCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1XbGl0ZXJhbF8wMDJkc3VmZml4LTE3NiI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbGl0ZXJhbF8wMDJkc3VmZml4LTE3NyI+PC9hPldhcm4gd2hlbiBhIHN0cmluZyBvciBjaGFyYWN0ZXIgbGl0ZXJhbCBpcyBmb2xsb3dlZCBieSBhIHVkLXN1ZmZpeCB3aGljaCBkb2VzCitub3QgYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlLiAgQXMgYSBjb25mb3JtaW5nIGV4dGVuc2lvbiwgR0NDIHRyZWF0cyBzdWNoCitzdWZmaXhlcyBhcyBzZXBhcmF0ZSBwcmVwcm9jZXNzaW5nIHRva2VucyBpbiBvcmRlciB0byBtYWludGFpbiBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHkgd2l0aCBjb2RlIHRoYXQgdXNlcyBmb3JtYXR0aW5nIG1hY3JvcyBmcm9tIDxjb2RlPiZsdDtpbnR0eXBlcy5oJmd0OzwvY29kZT4uIAorRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUworICAgICAgICAgICNpbmNsdWRlICZsdDtpbnR0eXBlcy5oJmd0OworICAgICAgICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICAgICAgIAorICAgICAgICAgIGludCBtYWluKCkgeworICAgICAgICAgICAgaW50NjRfdCBpNjQgPSAxMjM7CisgICAgICAgICAgICBwcmludGYoIk15IGludDY0OiAlIlBSSWQ2NCJcbiIsIGk2NCk7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwPkluIHRoaXMgY2FzZSwgPGNvZGU+UFJJZDY0PC9jb2RlPiBpcyB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgcHJlcHJvY2Vzc2luZyB0b2tlbi4KKworICAgICA8cD5UaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduYXJyb3dpbmcgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMrKyBhbmQgT2JqZWN0aXZlLUMrKyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV25hcnJvd2luZy0xNzgiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG5hcnJvd2luZy0xNzkiPjwvYT5XYXJuIHdoZW4gYSBuYXJyb3dpbmcgY29udmVyc2lvbiBwcm9oaWJpdGVkIGJ5IEMrKzExIG9jY3VycyB3aXRoaW4KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+eyB9PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBlLmcuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IGkgPSB7IDIuMiB9OyAvLyBlcnJvcjogbmFycm93aW5nIGZyb20gZG91YmxlIHRvIGludAorPC9wcmU+CisgICAgIDxwPlRoaXMgZmxhZyBpcyBpbmNsdWRlZCBpbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2MrKzExLWNvbXBhdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPldpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jKysxMTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLW5hcnJvd2luZzwvc3Bhbj48L3NhbXA+IHN1cHByZXNzZXMgdGhlIGRpYWdub3N0aWMKK3JlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZC4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgbWVhbmluZworb2Ygd2VsbC1mb3JtZWQgY29kZTsgbmFycm93aW5nIGNvbnZlcnNpb25zIGFyZSBzdGlsbCBjb25zaWRlcmVkCitpbGwtZm9ybWVkIGluIFNGSU5BRSBjb250ZXh0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdub2V4Y2VwdCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9leGNlcHQtMTgwIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRub2V4Y2VwdC0xODEiPjwvYT5XYXJuIHdoZW4gYSBub2V4Y2VwdC1leHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSBiZWNhdXNlIG9mIGEgY2FsbAordG8gYSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IGhhdmUgYSBub24tdGhyb3dpbmcgZXhjZXB0aW9uCitzcGVjaWZpY2F0aW9uIChpLmUuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dGhyb3coKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vZXhjZXB0PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBidXQgaXMga25vd24gYnkKK3RoZSBjb21waWxlciB0byBuZXZlciB0aHJvdyBhbiBleGNlcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vbi12aXJ0dWFsLWR0b3IgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMrKyBhbmQgT2JqZWN0aXZlLUMrKyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vbl8wMDJkdmlydHVhbF8wMDJkZHRvci0xODIiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG5vbl8wMDJkdmlydHVhbF8wMDJkZHRvci0xODMiPjwvYT5XYXJuIHdoZW4gYSBjbGFzcyBoYXMgdmlydHVhbCBmdW5jdGlvbnMgYW5kIGFuIGFjY2Vzc2libGUgbm9uLXZpcnR1YWwKK2Rlc3RydWN0b3IsIGluIHdoaWNoIGNhc2UgaXQgaXMgcG9zc2libGUgYnV0IHVuc2FmZSB0byBkZWxldGUKK2FuIGluc3RhbmNlIG9mIGEgZGVyaXZlZCBjbGFzcyB0aHJvdWdoIGEgcG9pbnRlciB0byB0aGUgYmFzZSBjbGFzcy4gCitUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZWZmYysrPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdyZW9yZGVyIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDKysgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdyZW9yZGVyLTE4NCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkcmVvcmRlci0xODUiPjwvYT48YSBuYW1lPSJpbmRleC1yZW9yZGVyaW5nXzAwMmMtd2FybmluZy0xODYiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nLWZvci1yZW9yZGVyaW5nLW9mLW1lbWJlci1pbml0aWFsaXplcnMtMTg3Ij48L2E+V2FybiB3aGVuIHRoZSBvcmRlciBvZiBtZW1iZXIgaW5pdGlhbGl6ZXJzIGdpdmVuIGluIHRoZSBjb2RlIGRvZXMgbm90CittYXRjaCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBtdXN0IGJlIGV4ZWN1dGVkLiAgRm9yIGluc3RhbmNlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHN0cnVjdCBBIHsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICBBKCk6IGogKDApLCBpICgxKSB7IH0KKyAgICAgICAgICB9OworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIGNvbXBpbGVyIHJlYXJyYW5nZXMgdGhlIG1lbWJlciBpbml0aWFsaXplcnMgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTwvc3Bhbj48L3NhbXA+JnJzcXVvOworYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ajwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBtYXRjaCB0aGUgZGVjbGFyYXRpb24gb3JkZXIgb2YgdGhlIG1lbWJlcnMsIGVtaXR0aW5nCithIHdhcm5pbmcgdG8gdGhhdCBlZmZlY3QuICBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZleHQtbnVtZXJpYy1saXRlcmFscyA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1mZXh0XzAwMmRudW1lcmljXzAwMmRsaXRlcmFscy0xODgiPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGV4dF8wMDJkbnVtZXJpY18wMDJkbGl0ZXJhbHMtMTg5Ij48L2E+QWNjZXB0IGltYWdpbmFyeSwgZml4ZWQtcG9pbnQsIG9yIG1hY2hpbmUtZGVmaW5lZAorbGl0ZXJhbCBudW1iZXIgc3VmZml4ZXMgYXMgR05VIGV4dGVuc2lvbnMuIAorV2hlbiB0aGlzIG9wdGlvbiBpcyB0dXJuZWQgb2ZmIHRoZXNlIHN1ZmZpeGVzIGFyZSB0cmVhdGVkCithcyBDKysxMSB1c2VyLWRlZmluZWQgbGl0ZXJhbCBudW1lcmljIHN1ZmZpeGVzLiAKK1RoaXMgaXMgb24gYnkgZGVmYXVsdCBmb3IgYWxsIHByZS1DKysxMSBkaWFsZWN0cyBhbmQgYWxsIEdOVSBkaWFsZWN0czoKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YysrOTg8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnUrKzk4PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Z251KysxMTwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnUrKzF5PC9zcGFuPjwvc2FtcD4uIAorVGhpcyBvcHRpb24gaXMgb2ZmIGJ5IGRlZmF1bHQKK2ZvciBJU08gQysrMTEgb253YXJkcyAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jKysxMTwvc3Bhbj48L3NhbXA+LCAuLi4pLiAKKzwvZGw+CisKKyA8cD5UaGUgZm9sbG93aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XLi4uPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBhcmUgbm90IGFmZmVjdGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1XZWZmYysrIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDKysgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdlZmZjXzAwMmJfMDAyYi0xOTAiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGVmZmNfMDAyYl8wMDJiLTE5MSI+PC9hPldhcm4gYWJvdXQgdmlvbGF0aW9ucyBvZiB0aGUgZm9sbG93aW5nIHN0eWxlIGd1aWRlbGluZXMgZnJvbSBTY290dCBNZXllcnMnCis8Y2l0ZT5FZmZlY3RpdmUgQysrLCBTZWNvbmQgRWRpdGlvbjwvY2l0ZT4gYm9vazoKKworICAgICAgICAgIDx1bD4KKzxsaT5JdGVtIDExOiAgRGVmaW5lIGEgY29weSBjb25zdHJ1Y3RvciBhbmQgYW4gYXNzaWdubWVudCBvcGVyYXRvciBmb3IgY2xhc3Nlcword2l0aCBkeW5hbWljYWxseS1hbGxvY2F0ZWQgbWVtb3J5LgorCisgICAgICAgICAgPGxpPkl0ZW0gMTI6ICBQcmVmZXIgaW5pdGlhbGl6YXRpb24gdG8gYXNzaWdubWVudCBpbiBjb25zdHJ1Y3RvcnMuCisKKyAgICAgICAgICA8bGk+SXRlbSAxNDogIE1ha2UgZGVzdHJ1Y3RvcnMgdmlydHVhbCBpbiBiYXNlIGNsYXNzZXMuCisKKyAgICAgICAgICA8bGk+SXRlbSAxNTogIEhhdmUgPGNvZGU+b3BlcmF0b3I9PC9jb2RlPiByZXR1cm4gYSByZWZlcmVuY2UgdG8gPGNvZGU+KnRoaXM8L2NvZGU+LgorCisgICAgICAgICAgPGxpPkl0ZW0gMjM6ICBEb24ndCB0cnkgdG8gcmV0dXJuIGEgcmVmZXJlbmNlIHdoZW4geW91IG11c3QgcmV0dXJuIGFuIG9iamVjdC4KKworICAgICA8L3VsPgorCisgICAgIDxwPkFsc28gd2FybiBhYm91dCB2aW9sYXRpb25zIG9mIHRoZSBmb2xsb3dpbmcgc3R5bGUgZ3VpZGVsaW5lcyBmcm9tCitTY290dCBNZXllcnMnIDxjaXRlPk1vcmUgRWZmZWN0aXZlIEMrKzwvY2l0ZT4gYm9vazoKKworICAgICAgICAgIDx1bD4KKzxsaT5JdGVtIDY6ICBEaXN0aW5ndWlzaCBiZXR3ZWVuIHByZWZpeCBhbmQgcG9zdGZpeCBmb3JtcyBvZiBpbmNyZW1lbnQgYW5kCitkZWNyZW1lbnQgb3BlcmF0b3JzLgorCisgICAgICAgICAgPGxpPkl0ZW0gNzogIE5ldmVyIG92ZXJsb2FkIDxjb2RlPiZhbXA7JmFtcDs8L2NvZGU+LCA8Y29kZT58fDwvY29kZT4sIG9yIDxjb2RlPiw8L2NvZGU+LgorCisgICAgIDwvdWw+CisKKyAgICAgPHA+V2hlbiBzZWxlY3RpbmcgdGhpcyBvcHRpb24sIGJlIGF3YXJlIHRoYXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkKK2hlYWRlcnMgZG8gbm90IG9iZXkgYWxsIG9mIHRoZXNlIGd1aWRlbGluZXM7IHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdyZXAgLXY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3RvIGZpbHRlciBvdXQgdGhvc2Ugd2FybmluZ3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N0cmljdC1udWxsLXNlbnRpbmVsIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDKysgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdzdHJpY3RfMDAyZG51bGxfMDAyZHNlbnRpbmVsLTE5MiI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc3RyaWN0XzAwMmRudWxsXzAwMmRzZW50aW5lbC0xOTMiPjwvYT5XYXJuIGFib3V0IHRoZSB1c2Ugb2YgYW4gdW5jYXN0ZWQgPGNvZGU+TlVMTDwvY29kZT4gYXMgc2VudGluZWwuICBXaGVuCitjb21waWxpbmcgb25seSB3aXRoIEdDQyB0aGlzIGlzIGEgdmFsaWQgc2VudGluZWwsIGFzIDxjb2RlPk5VTEw8L2NvZGU+IGlzIGRlZmluZWQKK3RvIDxjb2RlPl9fbnVsbDwvY29kZT4uICBBbHRob3VnaCBpdCBpcyBhIG51bGwgcG9pbnRlciBjb25zdGFudCByYXRoZXIgdGhhbiBhCitudWxsIHBvaW50ZXIsIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgb2YgdGhlIHNhbWUgc2l6ZSBhcyBhIHBvaW50ZXIuIAorQnV0IHRoaXMgdXNlIGlzIG5vdCBwb3J0YWJsZSBhY3Jvc3MgZGlmZmVyZW50IGNvbXBpbGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8tbm9uLXRlbXBsYXRlLWZyaWVuZCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG5vbl8wMDJkdGVtcGxhdGVfMDAyZGZyaWVuZC0xOTQiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9uXzAwMmR0ZW1wbGF0ZV8wMDJkZnJpZW5kLTE5NSI+PC9hPkRpc2FibGUgd2FybmluZ3Mgd2hlbiBub24tdGVtcGxhdGl6ZWQgZnJpZW5kIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQKK3dpdGhpbiBhIHRlbXBsYXRlLiAgU2luY2UgdGhlIGFkdmVudCBvZiBleHBsaWNpdCB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9uCitzdXBwb3J0IGluIEcrKywgaWYgdGhlIG5hbWUgb2YgdGhlIGZyaWVuZCBpcyBhbiB1bnF1YWxpZmllZC1pZCAoaS5lLiwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnJpZW5kIGZvbyhpbnQpPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwgdGhlIEMrKyBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGRlbWFuZHMgdGhhdCB0aGUKK2ZyaWVuZCBkZWNsYXJlIG9yIGRlZmluZSBhbiBvcmRpbmFyeSwgbm9udGVtcGxhdGUgZnVuY3Rpb24uICAoU2VjdGlvbgorMTQuNS4zKS4gIEJlZm9yZSBHKysgaW1wbGVtZW50ZWQgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiwgdW5xdWFsaWZpZWQtaWRzCitjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIHBhcnRpY3VsYXIgc3BlY2lhbGl6YXRpb24gb2YgYSB0ZW1wbGF0aXplZAorZnVuY3Rpb24uICBCZWNhdXNlIHRoaXMgbm9uLWNvbmZvcm1pbmcgYmVoYXZpb3IgaXMgbm8gbG9uZ2VyIHRoZSBkZWZhdWx0CitiZWhhdmlvciBmb3IgRysrLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vbi10ZW1wbGF0ZS1mcmllbmQ8L3NwYW4+PC9zYW1wPiBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvCitjaGVjayBleGlzdGluZyBjb2RlIGZvciBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cyBhbmQgaXMgb24gYnkgZGVmYXVsdC4gCitUaGlzIG5ldyBjb21waWxlciBiZWhhdmlvciBjYW4gYmUgdHVybmVkIG9mZiB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLW5vbi10ZW1wbGF0ZS1mcmllbmQ8L3NwYW4+PC9zYW1wPiwgd2hpY2gga2VlcHMgdGhlIGNvbmZvcm1hbnQgY29tcGlsZXIgY29kZQorYnV0IGRpc2FibGVzIHRoZSBoZWxwZnVsIHdhcm5pbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV29sZC1zdHlsZS1jYXN0IDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDKysgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdvbGRfMDAyZHN0eWxlXzAwMmRjYXN0LTE5NiI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkb2xkXzAwMmRzdHlsZV8wMDJkY2FzdC0xOTciPjwvYT5XYXJuIGlmIGFuIG9sZC1zdHlsZSAoQy1zdHlsZSkgY2FzdCB0byBhIG5vbi12b2lkIHR5cGUgaXMgdXNlZCB3aXRoaW4KK2EgQysrIHByb2dyYW0uICBUaGUgbmV3LXN0eWxlIGNhc3RzICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmR5bmFtaWNfY2FzdDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RhdGljX2Nhc3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVpbnRlcnByZXRfY2FzdDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29uc3RfY2FzdDwvc3Bhbj48L3NhbXA+JnJzcXVvOykgYXJlCitsZXNzIHZ1bG5lcmFibGUgdG8gdW5pbnRlbmRlZCBlZmZlY3RzIGFuZCBtdWNoIGVhc2llciB0byBzZWFyY2ggZm9yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdvdmVybG9hZGVkLXZpcnR1YWwgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMrKyBhbmQgT2JqZWN0aXZlLUMrKyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV292ZXJsb2FkZWRfMDAyZHZpcnR1YWwtMTk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRvdmVybG9hZGVkXzAwMmR2aXJ0dWFsLTE5OSI+PC9hPjxhIG5hbWU9ImluZGV4LW92ZXJsb2FkZWQtdmlydHVhbC1mdW5jdGlvbl8wMDJjLXdhcm5pbmctMjAwIj48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZy1mb3Itb3ZlcmxvYWRlZC12aXJ0dWFsLWZ1bmN0aW9uLTIwMSI+PC9hPldhcm4gd2hlbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGhpZGVzIHZpcnR1YWwgZnVuY3Rpb25zIGZyb20gYQorYmFzZSBjbGFzcy4gIEZvciBleGFtcGxlLCBpbjoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBzdHJ1Y3QgQSB7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZigpOworICAgICAgICAgIH07CisgICAgICAgICAgCisgICAgICAgICAgc3RydWN0IEI6IHB1YmxpYyBBIHsKKyAgICAgICAgICAgIHZvaWQgZihpbnQpOworICAgICAgICAgIH07Cis8L3ByZT4KKyAgICAgPHA+dGhlIDxjb2RlPkE8L2NvZGU+IGNsYXNzIHZlcnNpb24gb2YgPGNvZGU+ZjwvY29kZT4gaXMgaGlkZGVuIGluIDxjb2RlPkI8L2NvZGU+LCBhbmQgY29kZQorbGlrZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBCKiBiOworICAgICAgICAgIGItJmd0O2YoKTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmZhaWxzIHRvIGNvbXBpbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vLXBtZi1jb252ZXJzaW9ucyA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHBtZl8wMDJkY29udmVyc2lvbnMtMjAyIj48L2E+PGEgbmFtZT0iaW5kZXgtV3BtZl8wMDJkY29udmVyc2lvbnMtMjAzIj48L2E+RGlzYWJsZSB0aGUgZGlhZ25vc3RpYyBmb3IgY29udmVydGluZyBhIGJvdW5kIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uCit0byBhIHBsYWluIHBvaW50ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3NpZ24tcHJvbW8gPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMrKyBhbmQgT2JqZWN0aXZlLUMrKyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV3NpZ25fMDAyZHByb21vLTIwNCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc2lnbl8wMDJkcHJvbW8tMjA1Ij48L2E+V2FybiB3aGVuIG92ZXJsb2FkIHJlc29sdXRpb24gY2hvb3NlcyBhIHByb21vdGlvbiBmcm9tIHVuc2lnbmVkIG9yCitlbnVtZXJhdGVkIHR5cGUgdG8gYSBzaWduZWQgdHlwZSwgb3ZlciBhIGNvbnZlcnNpb24gdG8gYW4gdW5zaWduZWQgdHlwZSBvZgordGhlIHNhbWUgc2l6ZS4gIFByZXZpb3VzIHZlcnNpb25zIG9mIEcrKyB0cmllZCB0byBwcmVzZXJ2ZQordW5zaWduZWRuZXNzLCBidXQgdGhlIHN0YW5kYXJkIG1hbmRhdGVzIHRoZSBjdXJyZW50IGJlaGF2aW9yLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NGUyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbApAQCAtMCwwICsxLDg1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DKysgRXh0ZW5zaW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy5odG1sI09iamVjdGl2ZV8wMDJkQyIgdGl0bGU9Ik9iamVjdGl2ZS1DIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkMrKy1FeHRlbnNpb25zIj48L2E+Cis8YSBuYW1lPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy5odG1sI09iamVjdGl2ZV8wMDJkQyI+T2JqZWN0aXZlLUM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj43IEV4dGVuc2lvbnMgdG8gdGhlIEMrKyBMYW5ndWFnZTwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWV4dGVuc2lvbnNfMDAyYy1DXzAwMmJfMDAyYi1sYW5ndWFnZS0zNDkyIj48L2E+PGEgbmFtZT0iaW5kZXgtQ18wMDJiXzAwMmItbGFuZ3VhZ2UtZXh0ZW5zaW9ucy0zNDkzIj48L2E+CitUaGUgR05VIGNvbXBpbGVyIHByb3ZpZGVzIHRoZXNlIGV4dGVuc2lvbnMgdG8gdGhlIEMrKyBsYW5ndWFnZSAoYW5kIHlvdQorY2FuIGFsc28gdXNlIG1vc3Qgb2YgdGhlIEMgbGFuZ3VhZ2UgZXh0ZW5zaW9ucyBpbiB5b3VyIEMrKyBwcm9ncmFtcykuICBJZiB5b3UKK3dhbnQgdG8gd3JpdGUgY29kZSB0aGF0IGNoZWNrcyB3aGV0aGVyIHRoZXNlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIHlvdSBjYW4KK3Rlc3QgZm9yIHRoZSBHTlUgY29tcGlsZXIgdGhlIHNhbWUgd2F5IGFzIGZvciBDIHByb2dyYW1zOiBjaGVjayBmb3IgYQorcHJlZGVmaW5lZCBtYWNybyA8Y29kZT5fX0dOVUNfXzwvY29kZT4uICBZb3UgY2FuIGFsc28gdXNlIDxjb2RlPl9fR05VR19fPC9jb2RlPiB0bwordGVzdCBzcGVjaWZpY2FsbHkgZm9yIEdOVSBDKysgKHNlZSA8YSBocmVmPSIuLi9jcHAvQ29tbW9uLVByZWRlZmluZWQtTWFjcm9zLmh0bWwjQ29tbW9uLVByZWRlZmluZWQtTWFjcm9zIj5QcmVkZWZpbmVkIE1hY3JvczwvYT4pLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQ18wMDJiXzAwMmItVm9sYXRpbGVzLmh0bWwjQ18wMDJiXzAwMmItVm9sYXRpbGVzIj5DKysgVm9sYXRpbGVzPC9hPjogICAgICAgIFdoYXQgY29uc3RpdHV0ZXMgYW4gYWNjZXNzIHRvIGEgdm9sYXRpbGUgb2JqZWN0LiAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlJlc3RyaWN0ZWQtUG9pbnRlcnMuaHRtbCNSZXN0cmljdGVkLVBvaW50ZXJzIj5SZXN0cmljdGVkIFBvaW50ZXJzPC9hPjogIEM5OSByZXN0cmljdGVkIHBvaW50ZXJzIGFuZCByZWZlcmVuY2VzLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlZhZ3VlLUxpbmthZ2UuaHRtbCNWYWd1ZS1MaW5rYWdlIj5WYWd1ZSBMaW5rYWdlPC9hPjogICAgICAgIFdoZXJlIEcrKyBwdXRzIGlubGluZXMsIHZ0YWJsZXMgYW5kIHN1Y2guIAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjogICAgICAgIFlvdSBjYW4gdXNlIGEgc2luZ2xlIEMrKyBoZWFkZXIgZmlsZSBmb3IgYm90aAorICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucy4gCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJUZW1wbGF0ZS1JbnN0YW50aWF0aW9uLmh0bWwjVGVtcGxhdGUtSW5zdGFudGlhdGlvbiI+VGVtcGxhdGUgSW5zdGFudGlhdGlvbjwvYT46ICBNZXRob2RzIGZvciBlbnN1cmluZyB0aGF0IGV4YWN0bHkgb25lIGNvcHkgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggbmVlZGVkIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gaXMgZW1pdHRlZC4gCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJCb3VuZC1tZW1iZXItZnVuY3Rpb25zLmh0bWwjQm91bmQtbWVtYmVyLWZ1bmN0aW9ucyI+Qm91bmQgbWVtYmVyIGZ1bmN0aW9uczwvYT46ICBZb3UgY2FuIGV4dHJhY3QgYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kIGRlbm90ZWQgYnkgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0mZ3Q7Kjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi4qPC9zcGFuPjwvc2FtcD4mcnNxdW87IGV4cHJlc3Npb24uIAorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iQ18wMDJiXzAwMmItQXR0cmlidXRlcy5odG1sI0NfMDAyYl8wMDJiLUF0dHJpYnV0ZXMiPkMrKyBBdHRyaWJ1dGVzPC9hPjogICAgICAgVmFyaWFibGUsIGZ1bmN0aW9uLCBhbmQgdHlwZSBhdHRyaWJ1dGVzIGZvciBDKysgb25seS4gCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJGdW5jdGlvbi1NdWx0aXZlcnNpb25pbmcuaHRtbCNGdW5jdGlvbi1NdWx0aXZlcnNpb25pbmciPkZ1bmN0aW9uIE11bHRpdmVyc2lvbmluZzwvYT46ICAgIERlY2xhcmluZyBtdWx0aXBsZSBmdW5jdGlvbiB2ZXJzaW9ucy4gCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJOYW1lc3BhY2UtQXNzb2NpYXRpb24uaHRtbCNOYW1lc3BhY2UtQXNzb2NpYXRpb24iPk5hbWVzcGFjZSBBc3NvY2lhdGlvbjwvYT46ICBTdHJvbmcgdXNpbmctZGlyZWN0aXZlcyBmb3IgbmFtZXNwYWNlIGFzc29jaWF0aW9uLiAKKzxsaT48YSBocmVmPSJUeXBlLVRyYWl0cy5odG1sI1R5cGUtVHJhaXRzIj5UeXBlIFRyYWl0czwvYT46ICAgICAgICAgIENvbXBpbGVyIHN1cHBvcnQgZm9yIHR5cGUgdHJhaXRzCis8bGk+PGEgaHJlZj0iSmF2YS1FeGNlcHRpb25zLmh0bWwjSmF2YS1FeGNlcHRpb25zIj5KYXZhIEV4Y2VwdGlvbnM8L2E+OiAgICAgIFR3ZWFraW5nIGV4Y2VwdGlvbiBoYW5kbGluZyB0byB3b3JrIHdpdGggSmF2YS4gCis8bGk+PGEgaHJlZj0iRGVwcmVjYXRlZC1GZWF0dXJlcy5odG1sI0RlcHJlY2F0ZWQtRmVhdHVyZXMiPkRlcHJlY2F0ZWQgRmVhdHVyZXM8L2E+OiAgVGhpbmdzIHdpbGwgZGlzYXBwZWFyIGZyb20gRysrLiAKKzxsaT48YSBocmVmPSJCYWNrd2FyZHMtQ29tcGF0aWJpbGl0eS5odG1sI0JhY2t3YXJkcy1Db21wYXRpYmlsaXR5Ij5CYWNrd2FyZHMgQ29tcGF0aWJpbGl0eTwvYT46ICBDb21wYXRpYmlsaXRpZXMgd2l0aCBlYXJsaWVyIGRlZmluaXRpb25zIG9mIEMrKy4gCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzY1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QysrIEltcGxlbWVudGF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iIHRpdGxlPSJDIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkMrKy1JbXBsZW1lbnRhdGlvbiI+PC9hPgorPGEgbmFtZT0iQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiI+QyBJbXBsZW1lbnRhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj41IEMrKyBJbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3JfMDAyYy1DXzAwMmJfMDAyYi1sYW5ndWFnZS0yMzk3Ij48L2E+CitBIGNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb24gb2YgSVNPIEMrKyBpcyByZXF1aXJlZCB0byBkb2N1bWVudCBpdHMKK2Nob2ljZSBvZiBiZWhhdmlvciBpbiBlYWNoIG9mIHRoZSBhcmVhcyB0aGF0IGFyZSBkZXNpZ25hdGVkCismbGRxdW87aW1wbGVtZW50YXRpb24gZGVmaW5lZCZyZHF1bzsuICBUaGUgZm9sbG93aW5nIGxpc3RzIGFsbCBzdWNoIGFyZWFzLAorYWxvbmcgd2l0aCB0aGUgc2VjdGlvbiBudW1iZXJzIGZyb20gdGhlIElTTy9JRUMgMTQ4ODI6MTk5OCBhbmQgSVNPL0lFQworMTQ4ODI6MjAwMyBzdGFuZGFyZHMuICBTb21lIGFyZWFzIGFyZSBvbmx5IGltcGxlbWVudGF0aW9uLWRlZmluZWQgaW4KK29uZSB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZC4KKworIDxwPlNvbWUgY2hvaWNlcyBkZXBlbmQgb24gdGhlIGV4dGVybmFsbHkgZGV0ZXJtaW5lZCBBQkkgZm9yIHRoZSBwbGF0Zm9ybQorKGluY2x1ZGluZyBzdGFuZGFyZCBjaGFyYWN0ZXIgZW5jb2RpbmdzKSB3aGljaCBHQ0MgZm9sbG93czsgdGhlc2UgYXJlCitsaXN0ZWQgYXMgJmxkcXVvO2RldGVybWluZWQgYnkgQUJJJnJkcXVvOyBiZWxvdy4gIFNlZSA8YSBocmVmPSJDb21wYXRpYmlsaXR5Lmh0bWwjQ29tcGF0aWJpbGl0eSI+QmluYXJ5IENvbXBhdGliaWxpdHk8L2E+LCBhbmQgPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL3JlYWRpbmdzLmh0bWwiPmh0dHA6Ly9nY2MuZ251Lm9yZy9yZWFkaW5ncy5odG1sPC9hPi4gIFNvbWUKK2Nob2ljZXMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIHByZXByb2Nlc3NvciBtYW51YWwuIAorU2VlIDxhIGhyZWY9Ii4uL2NwcC9JbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci5odG1sI0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yIj5JbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9hPi4gIFNvbWUgY2hvaWNlcyBhcmUgZG9jdW1lbnRlZCBpbgordGhlIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnQgZm9yIHRoZSBDIGxhbmd1YWdlLiAgU2VlIDxhIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj5DIEltcGxlbWVudGF0aW9uPC9hPi4gIFNvbWUgY2hvaWNlcyBhcmUgbWFkZSBieSB0aGUgbGlicmFyeSBhbmQgb3BlcmF0aW5nCitzeXN0ZW0gKG9yIG90aGVyIGVudmlyb25tZW50IHdoZW4gY29tcGlsaW5nIGZvciBhIGZyZWVzdGFuZGluZworZW52aXJvbm1lbnQpOyByZWZlciB0byB0aGVpciBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQ29uZGl0aW9uYWxseV8wMDJkc3VwcG9ydGVkLWJlaGF2aW9yLmh0bWwjQ29uZGl0aW9uYWxseV8wMDJkc3VwcG9ydGVkLWJlaGF2aW9yIj5Db25kaXRpb25hbGx5LXN1cHBvcnRlZCBiZWhhdmlvcjwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkV4Y2VwdGlvbi1oYW5kbGluZy5odG1sI0V4Y2VwdGlvbi1oYW5kbGluZyI+RXhjZXB0aW9uIGhhbmRsaW5nPC9hPgorPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWU5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sCkBAIC0wLDAgKzEsMTQ2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DKysgSW50ZXJmYWNlIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIiB0aXRsZT0iQysrIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWYWd1ZS1MaW5rYWdlLmh0bWwjVmFndWUtTGlua2FnZSIgdGl0bGU9IlZhZ3VlIExpbmthZ2UiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUZW1wbGF0ZS1JbnN0YW50aWF0aW9uLmh0bWwjVGVtcGxhdGUtSW5zdGFudGlhdGlvbiIgdGl0bGU9IlRlbXBsYXRlIEluc3RhbnRpYXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQysrLUludGVyZmFjZSI+PC9hPgorPGEgbmFtZT0iQ18wMDJiXzAwMmItSW50ZXJmYWNlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRlbXBsYXRlLUluc3RhbnRpYXRpb24uaHRtbCNUZW1wbGF0ZS1JbnN0YW50aWF0aW9uIj5UZW1wbGF0ZSBJbnN0YW50aWF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVmFndWUtTGlua2FnZS5odG1sI1ZhZ3VlLUxpbmthZ2UiPlZhZ3VlIExpbmthZ2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjQgI3ByYWdtYSBpbnRlcmZhY2UgYW5kIGltcGxlbWVudGF0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW50ZXJmYWNlLWFuZC1pbXBsZW1lbnRhdGlvbi1oZWFkZXJzXzAwMmMtQ18wMDJiXzAwMmItMzUwNSI+PC9hPjxhIG5hbWU9ImluZGV4LUNfMDAyYl8wMDJiLWludGVyZmFjZS1hbmQtaW1wbGVtZW50YXRpb24taGVhZGVycy0zNTA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJhZ21hc18wMDJjLWludGVyZmFjZS1hbmQtaW1wbGVtZW50YXRpb24tMzUwNyI+PC9hPgorPGNvZGU+I3ByYWdtYSBpbnRlcmZhY2U8L2NvZGU+IGFuZCA8Y29kZT4jcHJhZ21hIGltcGxlbWVudGF0aW9uPC9jb2RlPiBwcm92aWRlIHRoZQordXNlciB3aXRoIGEgd2F5IG9mIGV4cGxpY2l0bHkgZGlyZWN0aW5nIHRoZSBjb21waWxlciB0byBlbWl0IGVudGl0aWVzCit3aXRoIHZhZ3VlIGxpbmthZ2UgKGFuZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24pIGluIGEgcGFydGljdWxhcgordHJhbnNsYXRpb24gdW5pdC4KKworIDxwPjxlbT5Ob3RlOjwvZW0+IEFzIG9mIEdDQyAyLjcuMiwgdGhlc2UgPGNvZGU+I3ByYWdtYTwvY29kZT5zIGFyZSBub3QgdXNlZnVsIGluCittb3N0IGNhc2VzLCBiZWNhdXNlIG9mIENPTURBVCBzdXBwb3J0IGFuZCB0aGUgJmxkcXVvO2tleSBtZXRob2QmcmRxdW87IGhldXJpc3RpYworbWVudGlvbmVkIGluIDxhIGhyZWY9IlZhZ3VlLUxpbmthZ2UuaHRtbCNWYWd1ZS1MaW5rYWdlIj5WYWd1ZSBMaW5rYWdlPC9hPi4gIFVzaW5nIHRoZW0gY2FuIGFjdHVhbGx5IGNhdXNlIHlvdXIKK3Byb2dyYW0gdG8gZ3JvdyBkdWUgdG8gdW5uZWNlc3Nhcnkgb3V0LW9mLWxpbmUgY29waWVzIG9mIGlubGluZQorZnVuY3Rpb25zLiAgQ3VycmVudGx5ICgzLjQpIHRoZSBvbmx5IGJlbmVmaXQgb2YgdGhlc2UKKzxjb2RlPiNwcmFnbWE8L2NvZGU+cyBpcyByZWR1Y2VkIGR1cGxpY2F0aW9uIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiwgYW5kCit0aGF0IHNob3VsZCBiZSBhZGRyZXNzZWQgc29vbiBvbiBEV0FSRiAyIHRhcmdldHMgd2l0aCB0aGUgdXNlIG9mCitDT01EQVQgZ3JvdXBzLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4jcHJhZ21hIGludGVyZmFjZTwvY29kZT48ZHQ+PGNvZGU+I3ByYWdtYSBpbnRlcmZhY2UgIjwvY29kZT48dmFyPnN1YmRpcjwvdmFyPjxjb2RlPi88L2NvZGU+PHZhcj5vYmplY3RzPC92YXI+PGNvZGU+LmgiPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDAyM3ByYWdtYS1pbnRlcmZhY2UtMzUwOCI+PC9hPlVzZSB0aGlzIGRpcmVjdGl2ZSBpbiA8ZW0+aGVhZGVyIGZpbGVzPC9lbT4gdGhhdCBkZWZpbmUgb2JqZWN0IGNsYXNzZXMsIHRvIHNhdmUKK3NwYWNlIGluIG1vc3Qgb2YgdGhlIG9iamVjdCBmaWxlcyB0aGF0IHVzZSB0aG9zZSBjbGFzc2VzLiAgTm9ybWFsbHksCitsb2NhbCBjb3BpZXMgb2YgY2VydGFpbiBpbmZvcm1hdGlvbiAoYmFja3VwIGNvcGllcyBvZiBpbmxpbmUgbWVtYmVyCitmdW5jdGlvbnMsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiwgYW5kIHRoZSBpbnRlcm5hbCB0YWJsZXMgdGhhdCBpbXBsZW1lbnQKK3ZpcnR1YWwgZnVuY3Rpb25zKSBtdXN0IGJlIGtlcHQgaW4gZWFjaCBvYmplY3QgZmlsZSB0aGF0IGluY2x1ZGVzIGNsYXNzCitkZWZpbml0aW9ucy4gIFlvdSBjYW4gdXNlIHRoaXMgcHJhZ21hIHRvIGF2b2lkIHN1Y2ggZHVwbGljYXRpb24uICBXaGVuIGEKK2hlYWRlciBmaWxlIGNvbnRhaW5pbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIGludGVyZmFjZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBpbmNsdWRlZCBpbiBhCitjb21waWxhdGlvbiwgdGhpcyBhdXhpbGlhcnkgaW5mb3JtYXRpb24gaXMgbm90IGdlbmVyYXRlZCAodW5sZXNzCit0aGUgbWFpbiBpbnB1dCBzb3VyY2UgZmlsZSBpdHNlbGYgdXNlcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgaW1wbGVtZW50YXRpb248L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAKK0luc3RlYWQsIHRoZSBvYmplY3QgZmlsZXMgY29udGFpbiByZWZlcmVuY2VzIHRvIGJlIHJlc29sdmVkIGF0IGxpbmsKK3RpbWUuCisKKyAgICAgPHA+VGhlIHNlY29uZCBmb3JtIG9mIHRoaXMgZGlyZWN0aXZlIGlzIHVzZWZ1bCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhdmUKK211bHRpcGxlIGhlYWRlcnMgd2l0aCB0aGUgc2FtZSBuYW1lIGluIGRpZmZlcmVudCBkaXJlY3Rvcmllcy4gIElmIHlvdQordXNlIHRoaXMgZm9ybSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBzdHJpbmcgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hCitpbXBsZW1lbnRhdGlvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPiNwcmFnbWEgaW1wbGVtZW50YXRpb248L2NvZGU+PGR0Pjxjb2RlPiNwcmFnbWEgaW1wbGVtZW50YXRpb24gIjwvY29kZT48dmFyPm9iamVjdHM8L3Zhcj48Y29kZT4uaCI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzcHJhZ21hLWltcGxlbWVudGF0aW9uLTM1MDkiPjwvYT5Vc2UgdGhpcyBwcmFnbWEgaW4gYSA8ZW0+bWFpbiBpbnB1dCBmaWxlPC9lbT4sIHdoZW4geW91IHdhbnQgZnVsbCBvdXRwdXQgZnJvbQoraW5jbHVkZWQgaGVhZGVyIGZpbGVzIHRvIGJlIGdlbmVyYXRlZCAoYW5kIG1hZGUgZ2xvYmFsbHkgdmlzaWJsZSkuICBUaGUKK2luY2x1ZGVkIGhlYWRlciBmaWxlLCBpbiB0dXJuLCBzaG91bGQgdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBpbnRlcmZhY2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorQmFja3VwIGNvcGllcyBvZiBpbmxpbmUgbWVtYmVyIGZ1bmN0aW9ucywgZGVidWdnaW5nIGluZm9ybWF0aW9uLCBhbmQgdGhlCitpbnRlcm5hbCB0YWJsZXMgdXNlZCB0byBpbXBsZW1lbnQgdmlydHVhbCBmdW5jdGlvbnMgYXJlIGFsbCBnZW5lcmF0ZWQgaW4KK2ltcGxlbWVudGF0aW9uIGZpbGVzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWltcGxpZWQtXzAwNDBjb2RlXzAwN2JfMDAyM3ByYWdtYS1pbXBsZW1lbnRhdGlvbl8wMDdkLTM1MTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDIzcHJhZ21hLWltcGxlbWVudGF0aW9uXzAwN2RfMDAyYy1pbXBsaWVkLTM1MTEiPjwvYT48YSBuYW1lPSJpbmRleC1uYW1pbmctY29udmVudGlvbl8wMDJjLWltcGxlbWVudGF0aW9uLWhlYWRlcnMtMzUxMiI+PC9hPklmIHlvdSB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpdGggbm8gYXJndW1lbnQsIGl0IGFwcGxpZXMgdG8KK2FuIGluY2x1ZGUgZmlsZSB3aXRoIHRoZSBzYW1lIGJhc2VuYW1lPGEgcmVsPSJmb290bm90ZSIgaHJlZj0iI2ZuLTEiIG5hbWU9ImZuZC0xIj48c3VwPjE8L3N1cD48L2E+IGFzIHlvdXIgc291cmNlCitmaWxlLiAgRm9yIGV4YW1wbGUsIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hbGxjbGFzcy5jYzwvc3Bhbj48L3NhbXA+LCBnaXZpbmcganVzdAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87CitieSBpdHNlbGYgaXMgZXF1aXZhbGVudCB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgaW1wbGVtZW50YXRpb24gImFsbGNsYXNzLmgiPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPkluIHZlcnNpb25zIG9mIEdOVSBDKysgcHJpb3IgdG8gMi42LjAgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmFsbGNsYXNzLmg8L3NwYW4+PC9zYW1wPiB3YXMgdHJlYXRlZCBhcworYW4gaW1wbGVtZW50YXRpb24gZmlsZSB3aGVuZXZlciB5b3Ugd291bGQgaW5jbHVkZSBpdCBmcm9tCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YWxsY2xhc3MuY2M8L3NwYW4+PC9zYW1wPiBldmVuIGlmIHlvdSBuZXZlciBzcGVjaWZpZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hCitpbXBsZW1lbnRhdGlvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoaXMgd2FzIGRlZW1lZCB0byBiZSBtb3JlIHRyb3VibGUgdGhhbiBpdCB3YXMgd29ydGgsCitob3dldmVyLCBhbmQgZGlzYWJsZWQuCisKKyAgICAgPHA+VXNlIHRoZSBzdHJpbmcgYXJndW1lbnQgaWYgeW91IHdhbnQgYSBzaW5nbGUgaW1wbGVtZW50YXRpb24gZmlsZSB0bworaW5jbHVkZSBjb2RlIGZyb20gbXVsdGlwbGUgaGVhZGVyIGZpbGVzLiAgKFlvdSBtdXN0IGFsc28gdXNlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGluY2x1ZGUgdGhlIGhlYWRlciBmaWxlOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEKK2ltcGxlbWVudGF0aW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9ubHkgc3BlY2lmaWVzIGhvdyB0byB1c2UgdGhlIGZpbGUmbWRhc2g7aXQgZG9lc24ndCBhY3R1YWxseQoraW5jbHVkZSBpdC4pCisKKyAgICAgPHA+VGhlcmUgaXMgbm8gd2F5IHRvIHNwbGl0IHVwIHRoZSBjb250ZW50cyBvZiBhIHNpbmdsZSBoZWFkZXIgZmlsZSBpbnRvCittdWx0aXBsZSBpbXBsZW1lbnRhdGlvbiBmaWxlcy4gCis8L2RsPgorCisgPHA+PGEgbmFtZT0iaW5kZXgtaW5saW5pbmctYW5kLUNfMDAyYl8wMDJiLXByYWdtYXMtMzUxMyI+PC9hPjxhIG5hbWU9ImluZGV4LUNfMDAyYl8wMDJiLXByYWdtYXNfMDAyYy1lZmZlY3Qtb24taW5saW5pbmctMzUxNCI+PC9hPjxhIG5hbWU9ImluZGV4LXByYWdtYXMtaW4tQ18wMDJiXzAwMmJfMDAyYy1lZmZlY3Qtb24taW5saW5pbmctMzUxNSI+PC9hPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBpbXBsZW1lbnRhdGlvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIGludGVyZmFjZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbHNvIGhhdmUgYW4KK2VmZmVjdCBvbiBmdW5jdGlvbiBpbmxpbmluZy4KKworIDxwPklmIHlvdSBkZWZpbmUgYSBjbGFzcyBpbiBhIGhlYWRlciBmaWxlIG1hcmtlZCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYQoraW50ZXJmYWNlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGUgZWZmZWN0IG9uIGFuIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIHRoYXQgY2xhc3MgaXMKK3NpbWlsYXIgdG8gYW4gZXhwbGljaXQgPGNvZGU+ZXh0ZXJuPC9jb2RlPiBkZWNsYXJhdGlvbiZtZGFzaDt0aGUgY29tcGlsZXIgZW1pdHMKK25vIGNvZGUgYXQgYWxsIHRvIGRlZmluZSBhbiBpbmRlcGVuZGVudCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbi4gIEl0cworZGVmaW5pdGlvbiBpcyB1c2VkIG9ubHkgZm9yIGlubGluaW5nIHdpdGggaXRzIGNhbGxlcnMuCisKKyA8cD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGltcGxlbWVudF8wMDJkaW5saW5lcy0zNTE2Ij48L2E+Q29udmVyc2VseSwgd2hlbiB5b3UgaW5jbHVkZSB0aGUgc2FtZSBoZWFkZXIgZmlsZSBpbiBhIG1haW4gc291cmNlIGZpbGUKK3RoYXQgZGVjbGFyZXMgaXQgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIGltcGxlbWVudGF0aW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGUgY29tcGlsZXIgZW1pdHMKK2NvZGUgZm9yIHRoZSBmdW5jdGlvbiBpdHNlbGY7IHRoaXMgZGVmaW5lcyBhIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uCit0aGF0IGNhbiBiZSBmb3VuZCB2aWEgcG9pbnRlcnMgKG9yIGJ5IGNhbGxlcnMgY29tcGlsZWQgd2l0aG91dAoraW5saW5pbmcpLiAgSWYgYWxsIGNhbGxzIHRvIHRoZSBmdW5jdGlvbiBjYW4gYmUgaW5saW5lZCwgeW91IGNhbiBhdm9pZAorZW1pdHRpbmcgdGhlIGZ1bmN0aW9uIGJ5IGNvbXBpbGluZyB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8taW1wbGVtZW50LWlubGluZXM8L3NwYW4+PC9zYW1wPi4gCitJZiBhbnkgY2FsbHMgYXJlIG5vdCBpbmxpbmVkLCB5b3Ugd2lsbCBnZXQgbGlua2VyIGVycm9ycy4KKworIDxkaXYgY2xhc3M9ImZvb3Rub3RlIj4KKzxocj4KKzxoND5Gb290bm90ZXM8L2g0PjxwIGNsYXNzPSJmb290bm90ZSI+PHNtYWxsPls8YSBuYW1lPSJmbi0xIiBocmVmPSIjZm5kLTEiPjE8L2E+XTwvc21hbGw+IEEgZmlsZSdzIDxkZm4+YmFzZW5hbWU8L2Rmbj4KK2lzIHRoZSBuYW1lIHN0cmlwcGVkIG9mIGFsbCBsZWFkaW5nIHBhdGggaW5mb3JtYXRpb24gYW5kIG9mIHRyYWlsaW5nCitzdWZmaXhlcywgc3VjaCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5oPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LkM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uY2M8L3NwYW4+PC9zYW1wPiZyc3F1bzsuPC9wPgorCisgPGhyPjwvZGl2PgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNzQ1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QysrIE1pc3VuZGVyc3RhbmRpbmdzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRyb3VibGUuaHRtbCNUcm91YmxlIiB0aXRsZT0iVHJvdWJsZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRpc2FwcG9pbnRtZW50cy5odG1sI0Rpc2FwcG9pbnRtZW50cyIgdGl0bGU9IkRpc2FwcG9pbnRtZW50cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI05vbl8wMDJkYnVncyIgdGl0bGU9Ik5vbi1idWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkMrKy1NaXN1bmRlcnN0YW5kaW5ncyI+PC9hPgorPGEgbmFtZT0iQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTm9uXzAwMmRidWdzLmh0bWwjTm9uXzAwMmRidWdzIj5Ob24tYnVnczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRpc2FwcG9pbnRtZW50cy5odG1sI0Rpc2FwcG9pbnRtZW50cyI+RGlzYXBwb2ludG1lbnRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiPlRyb3VibGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMS43IENvbW1vbiBNaXN1bmRlcnN0YW5kaW5ncyB3aXRoIEdOVSBDKys8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1taXN1bmRlcnN0YW5kaW5ncy1pbi1DXzAwMmJfMDAyYi0zNTY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3VycHJpc2VzLWluLUNfMDAyYl8wMDJiLTM1NjgiPjwvYT48YSBuYW1lPSJpbmRleC1DXzAwMmJfMDAyYi1taXN1bmRlcnN0YW5kaW5ncy0zNTY5Ij48L2E+QysrIGlzIGEgY29tcGxleCBsYW5ndWFnZSBhbmQgYW4gZXZvbHZpbmcgb25lLCBhbmQgaXRzIHN0YW5kYXJkCitkZWZpbml0aW9uICh0aGUgSVNPIEMrKyBzdGFuZGFyZCkgd2FzIG9ubHkgcmVjZW50bHkgY29tcGxldGVkLiAgQXMgYQorcmVzdWx0LCB5b3VyIEMrKyBjb21waWxlciBtYXkgb2NjYXNpb25hbGx5IHN1cnByaXNlIHlvdSwgZXZlbiB3aGVuIGl0cworYmVoYXZpb3IgaXMgY29ycmVjdC4gIFRoaXMgc2VjdGlvbiBkaXNjdXNzZXMgc29tZSBhcmVhcyB0aGF0IGZyZXF1ZW50bHkKK2dpdmUgcmlzZSB0byBxdWVzdGlvbnMgb2YgdGhpcyBzb3J0LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU3RhdGljLURlZmluaXRpb25zLmh0bWwjU3RhdGljLURlZmluaXRpb25zIj5TdGF0aWMgRGVmaW5pdGlvbnM8L2E+OiAgIFN0YXRpYyBtZW1iZXIgZGVjbGFyYXRpb25zIGFyZSBub3QgZGVmaW5pdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Ik5hbWUtbG9va3VwLmh0bWwjTmFtZS1sb29rdXAiPk5hbWUgbG9va3VwPC9hPjogICAgICAgICAgTmFtZSBsb29rdXAsIHRlbXBsYXRlcywgYW5kIGFjY2Vzc2luZyBtZW1iZXJzIG9mIGJhc2UgY2xhc3NlcworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVGVtcG9yYXJpZXMuaHRtbCNUZW1wb3JhcmllcyI+VGVtcG9yYXJpZXM8L2E+OiAgICAgICAgICBUZW1wb3JhcmllcyBtYXkgdmFuaXNoIGJlZm9yZSB5b3UgZXhwZWN0Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJDb3B5LUFzc2lnbm1lbnQuaHRtbCNDb3B5LUFzc2lnbm1lbnQiPkNvcHkgQXNzaWdubWVudDwvYT46ICAgICAgQ29weSBBc3NpZ25tZW50IG9wZXJhdG9ycyBjb3B5IHZpcnR1YWwgYmFzZXMgdHdpY2UKKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NfMDAyYl8wMDJiLVZvbGF0aWxlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYi1Wb2xhdGlsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzY5YzIyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYi1Wb2xhdGlsZXMuaHRtbApAQCAtMCwwICsxLDEwMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QysrIFZvbGF0aWxlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyIgdGl0bGU9IkMrKyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUmVzdHJpY3RlZC1Qb2ludGVycy5odG1sI1Jlc3RyaWN0ZWQtUG9pbnRlcnMiIHRpdGxlPSJSZXN0cmljdGVkIFBvaW50ZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkMrKy1Wb2xhdGlsZXMiPjwvYT4KKzxhIG5hbWU9IkNfMDAyYl8wMDJiLVZvbGF0aWxlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSZXN0cmljdGVkLVBvaW50ZXJzLmh0bWwjUmVzdHJpY3RlZC1Qb2ludGVycyI+UmVzdHJpY3RlZCBQb2ludGVyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIj5DKysgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMSBXaGVuIGlzIGEgVm9sYXRpbGUgQysrIE9iamVjdCBBY2Nlc3NlZD88L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hY2Nlc3Npbmctdm9sYXRpbGVzLTM0OTQiPjwvYT48YSBuYW1lPSJpbmRleC12b2xhdGlsZS1yZWFkLTM0OTUiPjwvYT48YSBuYW1lPSJpbmRleC12b2xhdGlsZS13cml0ZS0zNDk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtdm9sYXRpbGUtYWNjZXNzLTM0OTciPjwvYT4KK1RoZSBDKysgc3RhbmRhcmQgZGlmZmVycyBmcm9tIHRoZSBDIHN0YW5kYXJkIGluIGl0cyB0cmVhdG1lbnQgb2YKK3ZvbGF0aWxlIG9iamVjdHMuICBJdCBmYWlscyB0byBzcGVjaWZ5IHdoYXQgY29uc3RpdHV0ZXMgYSB2b2xhdGlsZQorYWNjZXNzLCBleGNlcHQgdG8gc2F5IHRoYXQgQysrIHNob3VsZCBiZWhhdmUgaW4gYSBzaW1pbGFyIG1hbm5lciB0byBDCit3aXRoIHJlc3BlY3QgdG8gdm9sYXRpbGVzLCB3aGVyZSBwb3NzaWJsZS4gIEhvd2V2ZXIsIHRoZSBkaWZmZXJlbnQKK2x2YWx1ZW5lc3Mgb2YgZXhwcmVzc2lvbnMgYmV0d2VlbiBDIGFuZCBDKysgY29tcGxpY2F0ZSB0aGUgYmVoYXZpb3IuIAorRysrIGJlaGF2ZXMgdGhlIHNhbWUgYXMgR0NDIGZvciB2b2xhdGlsZSBhY2Nlc3MsIFNlZSA8YSBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPlZvbGF0aWxlczwvYT4sIGZvciBhIGRlc2NyaXB0aW9uIG9mIEdDQydzIGJlaGF2aW9yLgorCisgPHA+VGhlIEMgYW5kIEMrKyBsYW5ndWFnZSBzcGVjaWZpY2F0aW9ucyBkaWZmZXIgd2hlbiBhbiBvYmplY3QgaXMKK2FjY2Vzc2VkIGluIGEgdm9pZCBjb250ZXh0OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdm9sYXRpbGUgaW50ICpzcmMgPSA8dmFyPnNvbWV2YWx1ZTwvdmFyPjsKKyAgICAgKnNyYzsKKzwvcHJlPgorIDxwPlRoZSBDKysgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgc3VjaCBleHByZXNzaW9ucyBkbyBub3QgdW5kZXJnbyBsdmFsdWUKK3RvIHJ2YWx1ZSBjb252ZXJzaW9uLCBhbmQgdGhhdCB0aGUgdHlwZSBvZiB0aGUgZGVyZWZlcmVuY2VkIG9iamVjdCBtYXkKK2JlIGluY29tcGxldGUuICBUaGUgQysrIHN0YW5kYXJkIGRvZXMgbm90IHNwZWNpZnkgZXhwbGljaXRseSB0aGF0IGl0CitpcyBsdmFsdWUgdG8gcnZhbHVlIGNvbnZlcnNpb24gdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY2F1c2luZyBhbgorYWNjZXNzLiAgVGhlcmUgaXMgcmVhc29uIHRvIGJlbGlldmUgdGhhdCBpdCBpcywgYmVjYXVzZSBvdGhlcndpc2UKK2NlcnRhaW4gc2ltcGxlIGV4cHJlc3Npb25zIGJlY29tZSB1bmRlZmluZWQuICBIb3dldmVyLCBiZWNhdXNlIGl0Cit3b3VsZCBzdXJwcmlzZSBtb3N0IHByb2dyYW1tZXJzLCBHKysgdHJlYXRzIGRlcmVmZXJlbmNpbmcgYSBwb2ludGVyIHRvCit2b2xhdGlsZSBvYmplY3Qgb2YgY29tcGxldGUgdHlwZSBhcyBHQ0Mgd291bGQgZG8gZm9yIGFuIGVxdWl2YWxlbnQKK3R5cGUgaW4gQy4gIFdoZW4gdGhlIG9iamVjdCBoYXMgaW5jb21wbGV0ZSB0eXBlLCBHKysgaXNzdWVzIGEKK3dhcm5pbmc7IGlmIHlvdSB3aXNoIHRvIGZvcmNlIGFuIGVycm9yLCB5b3UgbXVzdCBmb3JjZSBhIGNvbnZlcnNpb24gdG8KK3J2YWx1ZSB3aXRoLCBmb3IgaW5zdGFuY2UsIGEgc3RhdGljIGNhc3QuCisKKyA8cD5XaGVuIHVzaW5nIGEgcmVmZXJlbmNlIHRvIHZvbGF0aWxlLCBHKysgZG9lcyBub3QgdHJlYXQgZXF1aXZhbGVudAorZXhwcmVzc2lvbnMgYXMgYWNjZXNzZXMgdG8gdm9sYXRpbGVzLCBidXQgaW5zdGVhZCBpc3N1ZXMgYSB3YXJuaW5nIHRoYXQKK25vIHZvbGF0aWxlIGlzIGFjY2Vzc2VkLiAgVGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBpcyB0aGF0IG90aGVyd2lzZSBpdAorYmVjb21lcyBkaWZmaWN1bHQgdG8gZGV0ZXJtaW5lIHdoZXJlIHZvbGF0aWxlIGFjY2VzcyBvY2N1ciwgYW5kIG5vdAorcG9zc2libGUgdG8gaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBmdW5jdGlvbnMgcmV0dXJuaW5nIHZvbGF0aWxlCityZWZlcmVuY2VzLiAgQWdhaW4sIGlmIHlvdSB3aXNoIHRvIGZvcmNlIGEgcmVhZCwgY2FzdCB0aGUgcmVmZXJlbmNlIHRvCithbiBydmFsdWUuCisKKyA8cD5HKysgaW1wbGVtZW50cyB0aGUgc2FtZSBiZWhhdmlvciBhcyBHQ0MgZG9lcyB3aGVuIGFzc2lnbmluZyB0byBhCit2b2xhdGlsZSBvYmplY3QmbWRhc2g7dGhlcmUgaXMgbm8gcmVyZWFkIG9mIHRoZSBhc3NpZ25lZC10byBvYmplY3QsIHRoZQorYXNzaWduZWQgcnZhbHVlIGlzIHJldXNlZC4gIE5vdGUgdGhhdCBpbiBDKysgYXNzaWdubWVudCBleHByZXNzaW9ucworYXJlIGx2YWx1ZXMsIGFuZCBpZiB1c2VkIGFzIGFuIGx2YWx1ZSwgdGhlIHZvbGF0aWxlIG9iamVjdCBpcworcmVmZXJyZWQgdG8uICBGb3IgaW5zdGFuY2UsIDx2YXI+dnJlZjwvdmFyPiByZWZlcnMgdG8gPHZhcj52b2JqPC92YXI+LCBhcworZXhwZWN0ZWQsIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHZvbGF0aWxlIGludCB2b2JqOworICAgICB2b2xhdGlsZSBpbnQgJmFtcDt2cmVmID0gdm9iaiA9IDx2YXI+c29tZXRoaW5nPC92YXI+OworPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DXzAwMmJfMDAyYjk4LVRocmVhZF8wMDJkTG9jYWwtRWRpdHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmI5OC1UaHJlYWRfMDAyZExvY2FsLUVkaXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxZWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ18wMDJiXzAwMmI5OC1UaHJlYWRfMDAyZExvY2FsLUVkaXRzLmh0bWwKQEAgLTAsMCArMSwxODIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkMrKzk4IFRocmVhZC1Mb2NhbCBFZGl0cyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUaHJlYWRfMDAyZExvY2FsLmh0bWwjVGhyZWFkXzAwMmRMb2NhbCIgdGl0bGU9IlRocmVhZC1Mb2NhbCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkM5OS1UaHJlYWRfMDAyZExvY2FsLUVkaXRzLmh0bWwjQzk5LVRocmVhZF8wMDJkTG9jYWwtRWRpdHMiIHRpdGxlPSJDOTkgVGhyZWFkLUxvY2FsIEVkaXRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkMrKzk4LVRocmVhZC1Mb2NhbC1FZGl0cyI+PC9hPgorPGEgbmFtZT0iQ18wMDJiXzAwMmI5OC1UaHJlYWRfMDAyZExvY2FsLUVkaXRzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQzk5LVRocmVhZF8wMDJkTG9jYWwtRWRpdHMuaHRtbCNDOTktVGhyZWFkXzAwMmRMb2NhbC1FZGl0cyI+Qzk5IFRocmVhZC1Mb2NhbCBFZGl0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIj5UaHJlYWQtTG9jYWw8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjYwLjIgSVNPL0lFQyAxNDg4MjoxOTk4IEVkaXRzIGZvciBUaHJlYWQtTG9jYWwgU3RvcmFnZTwvaDQ+CisKKzxwPlRoZSBmb2xsb3dpbmcgYXJlIGEgc2V0IG9mIGNoYW5nZXMgdG8gSVNPL0lFQyAxNDg4MjoxOTk4IChha2EgQysrOTgpCit0aGF0IGRvY3VtZW50IHRoZSBleGFjdCBzZW1hbnRpY3Mgb2YgdGhlIGxhbmd1YWdlIGV4dGVuc2lvbi4KKworICAgICA8dWw+Cis8bGk+PGI+W2ludHJvLmV4ZWN1dGlvbl08L2I+CisKKyAgICAgPHA+TmV3IHRleHQgYWZ0ZXIgcGFyYWdyYXBoIDQKKworICAgICA8YmxvY2txdW90ZT4KK0EgPGRmbj50aHJlYWQ8L2Rmbj4gaXMgYSBmbG93IG9mIGNvbnRyb2wgd2l0aGluIHRoZSBhYnN0cmFjdCBtYWNoaW5lLiAKK0l0IGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgd2hldGhlciBvciBub3QgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbgorb25lIHRocmVhZC4gCis8L2Jsb2NrcXVvdGU+CisKKyAgICAgPHA+TmV3IHRleHQgYWZ0ZXIgcGFyYWdyYXBoIDcKKworICAgICA8YmxvY2txdW90ZT4KK0l0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgYWRkaXRpb25hbCBhY3Rpb24gbXVzdCBiZSB0YWtlbiB0bworZW5zdXJlIHdoZW4gYW5kIHdoZXRoZXIgc2lkZSBlZmZlY3RzIGFyZSB2aXNpYmxlIHRvIG90aGVyIHRocmVhZHMuIAorPC9ibG9ja3F1b3RlPgorCisgICAgIDxsaT48Yj5bbGV4LmtleV08L2I+CisKKyAgICAgPHA+QWRkIDxjb2RlPl9fdGhyZWFkPC9jb2RlPi4KKworICAgICA8bGk+PGI+W2Jhc2ljLnN0YXJ0Lm1haW5dPC9iPgorCisgICAgIDxwPkFkZCBhZnRlciBwYXJhZ3JhcGggNQorCisgICAgIDxibG9ja3F1b3RlPgorVGhlIHRocmVhZCB0aGF0IGJlZ2lucyBleGVjdXRpb24gYXQgdGhlIDxjb2RlPm1haW48L2NvZGU+IGZ1bmN0aW9uIGlzIGNhbGxlZAordGhlIDxkZm4+bWFpbiB0aHJlYWQ8L2Rmbj4uICBJdCBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGhvdyBmdW5jdGlvbnMKK2JlZ2lubmluZyB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIG1haW4gdGhyZWFkIGFyZSBkZXNpZ25hdGVkIG9yIHR5cGVkLiAKK0EgZnVuY3Rpb24gc28gZGVzaWduYXRlZCwgYXMgd2VsbCBhcyB0aGUgPGNvZGU+bWFpbjwvY29kZT4gZnVuY3Rpb24sIGlzIGNhbGxlZAorYSA8ZGZuPnRocmVhZCBzdGFydHVwIGZ1bmN0aW9uPC9kZm4+LiAgSXQgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB3aGF0CitoYXBwZW5zIGlmIGEgdGhyZWFkIHN0YXJ0dXAgZnVuY3Rpb24gcmV0dXJucy4gIEl0IGlzIGltcGxlbWVudGF0aW9uCitkZWZpbmVkIHdoYXQgaGFwcGVucyB0byBvdGhlciB0aHJlYWRzIHdoZW4gYW55IHRocmVhZCBjYWxscyA8Y29kZT5leGl0PC9jb2RlPi4gCis8L2Jsb2NrcXVvdGU+CisKKyAgICAgPGxpPjxiPltiYXNpYy5zdGFydC5pbml0XTwvYj4KKworICAgICA8cD5BZGQgYWZ0ZXIgcGFyYWdyYXBoIDQKKworICAgICA8YmxvY2txdW90ZT4KK1RoZSBzdG9yYWdlIGZvciBhbiBvYmplY3Qgb2YgdGhyZWFkIHN0b3JhZ2UgZHVyYXRpb24gc2hhbGwgYmUKK3N0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBmaXJzdCBzdGF0ZW1lbnQgb2YgdGhlIHRocmVhZCBzdGFydHVwCitmdW5jdGlvbi4gIEFuIG9iamVjdCBvZiB0aHJlYWQgc3RvcmFnZSBkdXJhdGlvbiBzaGFsbCBub3QgcmVxdWlyZQorZHluYW1pYyBpbml0aWFsaXphdGlvbi4gCis8L2Jsb2NrcXVvdGU+CisKKyAgICAgPGxpPjxiPltiYXNpYy5zdGFydC50ZXJtXTwvYj4KKworICAgICA8cD5BZGQgYWZ0ZXIgcGFyYWdyYXBoIDMKKworICAgICA8YmxvY2txdW90ZT4KK1RoZSB0eXBlIG9mIGFuIG9iamVjdCB3aXRoIHRocmVhZCBzdG9yYWdlIGR1cmF0aW9uIHNoYWxsIG5vdCBoYXZlIGEKK25vbi10cml2aWFsIGRlc3RydWN0b3IsIG5vciBzaGFsbCBpdCBiZSBhbiBhcnJheSB0eXBlIHdob3NlIGVsZW1lbnRzCisoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgaGF2ZSBub24tdHJpdmlhbCBkZXN0cnVjdG9ycy4gCis8L2Jsb2NrcXVvdGU+CisKKyAgICAgPGxpPjxiPltiYXNpYy5zdGNdPC9iPgorCisgICAgIDxwPkFkZCAmbGRxdW87dGhyZWFkIHN0b3JhZ2UgZHVyYXRpb24mcmRxdW87IHRvIHRoZSBsaXN0IGluIHBhcmFncmFwaCAxLgorCisgICAgIDxwPkNoYW5nZSBwYXJhZ3JhcGggMgorCisgICAgIDxibG9ja3F1b3RlPgorVGhyZWFkLCBzdGF0aWMsIGFuZCBhdXRvbWF0aWMgc3RvcmFnZSBkdXJhdGlvbnMgYXJlIGFzc29jaWF0ZWQgd2l0aAorb2JqZWN0cyBpbnRyb2R1Y2VkIGJ5IGRlY2xhcmF0aW9ucyBbPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPl0uIAorPC9ibG9ja3F1b3RlPgorCisgICAgIDxwPkFkZCA8Y29kZT5fX3RocmVhZDwvY29kZT4gdG8gdGhlIGxpc3Qgb2Ygc3BlY2lmaWVycyBpbiBwYXJhZ3JhcGggMy4KKworICAgICA8bGk+PGI+W2Jhc2ljLnN0Yy50aHJlYWRdPC9iPgorCisgICAgIDxwPk5ldyBzZWN0aW9uIGJlZm9yZSA8Yj5bYmFzaWMuc3RjLnN0YXRpY108L2I+CisKKyAgICAgPGJsb2NrcXVvdGU+CitUaGUga2V5d29yZCA8Y29kZT5fX3RocmVhZDwvY29kZT4gYXBwbGllZCB0byBhIG5vbi1sb2NhbCBvYmplY3QgZ2l2ZXMgdGhlCitvYmplY3QgdGhyZWFkIHN0b3JhZ2UgZHVyYXRpb24uCisKKyAgICAgPHA+QSBsb2NhbCB2YXJpYWJsZSBvciBjbGFzcyBkYXRhIG1lbWJlciBkZWNsYXJlZCBib3RoIDxjb2RlPnN0YXRpYzwvY29kZT4KK2FuZCA8Y29kZT5fX3RocmVhZDwvY29kZT4gZ2l2ZXMgdGhlIHZhcmlhYmxlIG9yIG1lbWJlciB0aHJlYWQgc3RvcmFnZQorZHVyYXRpb24uIAorPC9ibG9ja3F1b3RlPgorCisgICAgIDxsaT48Yj5bYmFzaWMuc3RjLnN0YXRpY108L2I+CisKKyAgICAgPHA+Q2hhbmdlIHBhcmFncmFwaCAxCisKKyAgICAgPGJsb2NrcXVvdGU+CitBbGwgb2JqZWN0cyB0aGF0IGhhdmUgbmVpdGhlciB0aHJlYWQgc3RvcmFnZSBkdXJhdGlvbiwgZHluYW1pYworc3RvcmFnZSBkdXJhdGlvbiBub3IgYXJlIGxvY2FsIFs8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+XS4gCis8L2Jsb2NrcXVvdGU+CisKKyAgICAgPGxpPjxiPltkY2wuc3RjXTwvYj4KKworICAgICA8cD5BZGQgPGNvZGU+X190aHJlYWQ8L2NvZGU+IHRvIHRoZSBsaXN0IGluIHBhcmFncmFwaCAxLgorCisgICAgIDxwPkNoYW5nZSBwYXJhZ3JhcGggMQorCisgICAgIDxibG9ja3F1b3RlPgorV2l0aCB0aGUgZXhjZXB0aW9uIG9mIDxjb2RlPl9fdGhyZWFkPC9jb2RlPiwgYXQgbW9zdCBvbmUKKzx2YXI+c3RvcmFnZS1jbGFzcy1zcGVjaWZpZXI8L3Zhcj4gc2hhbGwgYXBwZWFyIGluIGEgZ2l2ZW4KKzx2YXI+ZGVjbC1zcGVjaWZpZXItc2VxPC92YXI+LiAgVGhlIDxjb2RlPl9fdGhyZWFkPC9jb2RlPiBzcGVjaWZpZXIgbWF5CitiZSB1c2VkIGFsb25lLCBvciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIDxjb2RlPmV4dGVybjwvY29kZT4gb3IKKzxjb2RlPnN0YXRpYzwvY29kZT4gc3BlY2lmaWVycy4gIFs8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+XQorPC9ibG9ja3F1b3RlPgorCisgICAgIDxwPkFkZCBhZnRlciBwYXJhZ3JhcGggNQorCisgICAgIDxibG9ja3F1b3RlPgorVGhlIDxjb2RlPl9fdGhyZWFkPC9jb2RlPiBzcGVjaWZpZXIgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgbmFtZXMgb2Ygb2JqZWN0cworYW5kIHRvIGFub255bW91cyB1bmlvbnMuIAorPC9ibG9ja3F1b3RlPgorCisgICAgIDxsaT48Yj5bY2xhc3MubWVtXTwvYj4KKworICAgICA8cD5BZGQgYWZ0ZXIgcGFyYWdyYXBoIDYKKworICAgICA8YmxvY2txdW90ZT4KK05vbi08Y29kZT5zdGF0aWM8L2NvZGU+IG1lbWJlcnMgc2hhbGwgbm90IGJlIDxjb2RlPl9fdGhyZWFkPC9jb2RlPi4gCis8L2Jsb2NrcXVvdGU+CisgICAgIDwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Nhc2UtUmFuZ2VzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Nhc2UtUmFuZ2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMwYmJiYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ2FzZS1SYW5nZXMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DYXNlIFJhbmdlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEZXNpZ25hdGVkLUluaXRzLmh0bWwjRGVzaWduYXRlZC1Jbml0cyIgdGl0bGU9IkRlc2lnbmF0ZWQgSW5pdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDYXN0LXRvLVVuaW9uLmh0bWwjQ2FzdC10by1VbmlvbiIgdGl0bGU9IkNhc3QgdG8gVW5pb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ2FzZS1SYW5nZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ2FzdC10by1Vbmlvbi5odG1sI0Nhc3QtdG8tVW5pb24iPkNhc3QgdG8gVW5pb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEZXNpZ25hdGVkLUluaXRzLmh0bWwjRGVzaWduYXRlZC1Jbml0cyI+RGVzaWduYXRlZCBJbml0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4yNyBDYXNlIFJhbmdlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNhc2UtcmFuZ2VzLTI1NTciPjwvYT48YSBuYW1lPSJpbmRleC1yYW5nZXMtaW4tY2FzZS1zdGF0ZW1lbnRzLTI1NTgiPjwvYT4KK1lvdSBjYW4gc3BlY2lmeSBhIHJhbmdlIG9mIGNvbnNlY3V0aXZlIHZhbHVlcyBpbiBhIHNpbmdsZSA8Y29kZT5jYXNlPC9jb2RlPiBsYWJlbCwKK2xpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGNhc2UgPHZhcj5sb3c8L3Zhcj4gLi4uIDx2YXI+aGlnaDwvdmFyPjoKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBwcm9wZXIgbnVtYmVyIG9mIGluZGl2aWR1YWwgPGNvZGU+Y2FzZTwvY29kZT4KK2xhYmVscywgb25lIGZvciBlYWNoIGludGVnZXIgdmFsdWUgZnJvbSA8dmFyPmxvdzwvdmFyPiB0byA8dmFyPmhpZ2g8L3Zhcj4sIGluY2x1c2l2ZS4KKworIDxwPlRoaXMgZmVhdHVyZSBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgcmFuZ2VzIG9mIEFTQ0lJIGNoYXJhY3RlciBjb2RlczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGNhc2UgJ0EnIC4uLiAnWic6Cis8L3ByZT4KKyA8cD48c3Ryb25nPkJlIGNhcmVmdWw6PC9zdHJvbmc+IFdyaXRlIHNwYWNlcyBhcm91bmQgdGhlIDxjb2RlPi4uLjwvY29kZT4sIGZvciBvdGhlcndpc2UKK2l0IG1heSBiZSBwYXJzZWQgd3Jvbmcgd2hlbiB5b3UgdXNlIGl0IHdpdGggaW50ZWdlciB2YWx1ZXMuICBGb3IgZXhhbXBsZSwKK3dyaXRlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBjYXNlIDEgLi4uIDU6Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPnJhdGhlciB0aGFuIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBjYXNlIDEuLi41OgorPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DYXN0LXRvLVVuaW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Nhc3QtdG8tVW5pb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzU4N2M4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9DYXN0LXRvLVVuaW9uLmh0bWwKQEAgLTAsMCArMSw4OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q2FzdCB0byBVbmlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDYXNlLVJhbmdlcy5odG1sI0Nhc2UtUmFuZ2VzIiB0aXRsZT0iQ2FzZSBSYW5nZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNaXhlZC1EZWNsYXJhdGlvbnMuaHRtbCNNaXhlZC1EZWNsYXJhdGlvbnMiIHRpdGxlPSJNaXhlZCBEZWNsYXJhdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ2FzdC10by1VbmlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNaXhlZC1EZWNsYXJhdGlvbnMuaHRtbCNNaXhlZC1EZWNsYXJhdGlvbnMiPk1peGVkIERlY2xhcmF0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNhc2UtUmFuZ2VzLmh0bWwjQ2FzZS1SYW5nZXMiPkNhc2UgUmFuZ2VzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjI4IENhc3QgdG8gYSBVbmlvbiBUeXBlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2FzdC10by1hLXVuaW9uLTI1NTkiPjwvYT48YSBuYW1lPSJpbmRleC11bmlvbl8wMDJjLWNhc3RpbmctdG8tYS0yNTYwIj48L2E+CitBIGNhc3QgdG8gdW5pb24gdHlwZSBpcyBzaW1pbGFyIHRvIG90aGVyIGNhc3RzLCBleGNlcHQgdGhhdCB0aGUgdHlwZQorc3BlY2lmaWVkIGlzIGEgdW5pb24gdHlwZS4gIFlvdSBjYW4gc3BlY2lmeSB0aGUgdHlwZSBlaXRoZXIgd2l0aAorPGNvZGU+dW5pb24gPC9jb2RlPjx2YXI+dGFnPC92YXI+IG9yIHdpdGggYSB0eXBlZGVmIG5hbWUuICBBIGNhc3QgdG8gdW5pb24gaXMgYWN0dWFsbHkKK2EgY29uc3RydWN0b3IsIG5vdCBhIGNhc3QsIGFuZCBoZW5jZSBkb2VzIG5vdCB5aWVsZCBhbiBsdmFsdWUgbGlrZQorbm9ybWFsIGNhc3RzLiAgKFNlZSA8YSBocmVmPSJDb21wb3VuZC1MaXRlcmFscy5odG1sI0NvbXBvdW5kLUxpdGVyYWxzIj5Db21wb3VuZCBMaXRlcmFsczwvYT4uKQorCisgPHA+VGhlIHR5cGVzIHRoYXQgbWF5IGJlIGNhc3QgdG8gdGhlIHVuaW9uIHR5cGUgYXJlIHRob3NlIG9mIHRoZSBtZW1iZXJzCitvZiB0aGUgdW5pb24uICBUaHVzLCBnaXZlbiB0aGUgZm9sbG93aW5nIHVuaW9uIGFuZCB2YXJpYWJsZXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB1bmlvbiBmb28geyBpbnQgaTsgZG91YmxlIGQ7IH07CisgICAgIGludCB4OworICAgICBkb3VibGUgeTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+Ym90aCA8Y29kZT54PC9jb2RlPiBhbmQgPGNvZGU+eTwvY29kZT4gY2FuIGJlIGNhc3QgdG8gdHlwZSA8Y29kZT51bmlvbiBmb288L2NvZGU+LgorCisgPHA+VXNpbmcgdGhlIGNhc3QgYXMgdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiBhbiBhc3NpZ25tZW50IHRvIGEgdmFyaWFibGUgb2YKK3VuaW9uIHR5cGUgaXMgZXF1aXZhbGVudCB0byBzdG9yaW5nIGluIGEgbWVtYmVyIG9mIHRoZSB1bmlvbjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHVuaW9uIGZvbyB1OworICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPi4uLjwvc3Bhbj4gKi8KKyAgICAgdSA9ICh1bmlvbiBmb28pIHggID09ICB1LmkgPSB4CisgICAgIHUgPSAodW5pb24gZm9vKSB5ICA9PSAgdS5kID0geQorPC9wcmU+CisgPHA+WW91IGNhbiBhbHNvIHVzZSB0aGUgdW5pb24gY2FzdCBhcyBhIGZ1bmN0aW9uIGFyZ3VtZW50OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdm9pZCBoYWNrICh1bmlvbiBmb28pOworICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPi4uLjwvc3Bhbj4gKi8KKyAgICAgaGFjayAoKHVuaW9uIGZvbykgeCk7Cis8L3ByZT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NoYXJhY3Rlci1Fc2NhcGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NoYXJhY3Rlci1Fc2NhcGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlMmE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ2hhcmFjdGVyLUVzY2FwZXMuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DaGFyYWN0ZXIgRXNjYXBlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEb2xsYXItU2lnbnMuaHRtbCNEb2xsYXItU2lnbnMiIHRpdGxlPSJEb2xsYXIgU2lnbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyIgdGl0bGU9IlZhcmlhYmxlIEF0dHJpYnV0ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ2hhcmFjdGVyLUVzY2FwZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEb2xsYXItU2lnbnMuaHRtbCNEb2xsYXItU2lnbnMiPkRvbGxhciBTaWduczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4zNSBUaGUgQ2hhcmFjdGVyICZsdDtFU0MmZ3Q7IGluIENvbnN0YW50czwvaDM+CisKKzxwPllvdSBjYW4gdXNlIHRoZSBzZXF1ZW5jZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGEgc3RyaW5nIG9yIGNoYXJhY3RlciBjb25zdGFudCB0bworc3RhbmQgZm9yIHRoZSBBU0NJSSBjaGFyYWN0ZXIgJmx0O0VTQyZndDsuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NoYXJhY3RlcnMtaW1wbGVtZW50YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OGYzNjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NoYXJhY3RlcnMtaW1wbGVtZW50YXRpb24uaHRtbApAQCAtMCwwICsxLDEyMyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q2hhcmFjdGVycyBpbXBsZW1lbnRhdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkMgSW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJZGVudGlmaWVycy1pbXBsZW1lbnRhdGlvbi5odG1sI0lkZW50aWZpZXJzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iSWRlbnRpZmllcnMgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnRlZ2Vycy1pbXBsZW1lbnRhdGlvbi5odG1sI0ludGVnZXJzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iSW50ZWdlcnMgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbnRlZ2Vycy1pbXBsZW1lbnRhdGlvbi5odG1sI0ludGVnZXJzLWltcGxlbWVudGF0aW9uIj5JbnRlZ2VycyBpbXBsZW1lbnRhdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklkZW50aWZpZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjSWRlbnRpZmllcnMtaW1wbGVtZW50YXRpb24iPklkZW50aWZpZXJzIGltcGxlbWVudGF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iPkMgSW1wbGVtZW50YXRpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjQgQ2hhcmFjdGVyczwvaDM+CisKKyAgICAgPHVsPgorPGxpPjxjaXRlPlRoZSBudW1iZXIgb2YgYml0cyBpbiBhIGJ5dGUgKEM5MCAzLjQsIEM5OSAzLjYpLjwvY2l0ZT4KKworICAgICA8cD5EZXRlcm1pbmVkIGJ5IEFCSS4KKworICAgICA8bGk+PGNpdGU+VGhlIHZhbHVlcyBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQgKEM5MAorYW5kIEM5OSA1LjIuMSkuPC9jaXRlPgorCisgICAgIDxwPkRldGVybWluZWQgYnkgQUJJLgorCisgICAgIDxsaT48Y2l0ZT5UaGUgdW5pcXVlIHZhbHVlIG9mIHRoZSBtZW1iZXIgb2YgdGhlIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0IHByb2R1Y2VkCitmb3IgZWFjaCBvZiB0aGUgc3RhbmRhcmQgYWxwaGFiZXRpYyBlc2NhcGUgc2VxdWVuY2VzIChDOTAgYW5kIEM5OSA1LjIuMikuPC9jaXRlPgorCisgICAgIDxwPkRldGVybWluZWQgYnkgQUJJLgorCisgICAgIDxsaT48Y2l0ZT5UaGUgdmFsdWUgb2YgYSA8L2NpdGU+PGNvZGU+Y2hhcjwvY29kZT48Y2l0ZT4gb2JqZWN0IGludG8gd2hpY2ggaGFzIGJlZW4gc3RvcmVkIGFueQorY2hhcmFjdGVyIG90aGVyIHRoYW4gYSBtZW1iZXIgb2YgdGhlIGJhc2ljIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0CisoQzkwIDYuMS4yLjUsIEM5OSA2LjIuNSkuPC9jaXRlPgorCisgICAgIDxwPkRldGVybWluZWQgYnkgQUJJLgorCisgICAgIDxsaT48Y2l0ZT5XaGljaCBvZiA8L2NpdGU+PGNvZGU+c2lnbmVkIGNoYXI8L2NvZGU+PGNpdGU+IG9yIDwvY2l0ZT48Y29kZT51bnNpZ25lZCBjaGFyPC9jb2RlPjxjaXRlPiBoYXMgdGhlIHNhbWUKK3JhbmdlLCByZXByZXNlbnRhdGlvbiwgYW5kIGJlaGF2aW9yIGFzICZsZHF1bztwbGFpbiZyZHF1bzsgPC9jaXRlPjxjb2RlPmNoYXI8L2NvZGU+PGNpdGU+IChDOTAKKzYuMS4yLjUsIEM5MCA2LjIuMS4xLCBDOTkgNi4yLjUsIEM5OSA2LjMuMS4xKS48L2NpdGU+CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZnNpZ25lZF8wMDJkY2hhci0yMzkzIj48L2E+PGEgbmFtZT0iaW5kZXgtZnVuc2lnbmVkXzAwMmRjaGFyLTIzOTQiPjwvYT5EZXRlcm1pbmVkIGJ5IEFCSS4gIFRoZSBvcHRpb25zIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5zaWduZWQtY2hhcjwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzaWduZWQtY2hhcjwvc3Bhbj48L3NhbXA+IGNoYW5nZSB0aGUgZGVmYXVsdC4gIFNlZSA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5PcHRpb25zIENvbnRyb2xsaW5nIEMgRGlhbGVjdDwvYT4uCisKKyAgICAgPGxpPjxjaXRlPlRoZSBtYXBwaW5nIG9mIG1lbWJlcnMgb2YgdGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IChpbiBjaGFyYWN0ZXIKK2NvbnN0YW50cyBhbmQgc3RyaW5nIGxpdGVyYWxzKSB0byBtZW1iZXJzIG9mIHRoZSBleGVjdXRpb24gY2hhcmFjdGVyCitzZXQgKEM5MCA2LjEuMy40LCBDOTkgNi40LjQuNCwgQzkwIGFuZCBDOTkgNS4xLjEuMikuPC9jaXRlPgorCisgICAgIDxwPkRldGVybWluZWQgYnkgQUJJLgorCisgICAgIDxsaT48Y2l0ZT5UaGUgdmFsdWUgb2YgYW4gaW50ZWdlciBjaGFyYWN0ZXIgY29uc3RhbnQgY29udGFpbmluZyBtb3JlIHRoYW4gb25lCitjaGFyYWN0ZXIgb3IgY29udGFpbmluZyBhIGNoYXJhY3RlciBvciBlc2NhcGUgc2VxdWVuY2UgdGhhdCBkb2VzIG5vdCBtYXAKK3RvIGEgc2luZ2xlLWJ5dGUgZXhlY3V0aW9uIGNoYXJhY3RlciAoQzkwIDYuMS4zLjQsIEM5OSA2LjQuNC40KS48L2NpdGU+CisKKyAgICAgPHA+U2VlIDxhIGhyZWY9Ii4uL2NwcC9JbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci5odG1sI0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yIj5JbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9hPi4KKworICAgICA8bGk+PGNpdGU+VGhlIHZhbHVlIG9mIGEgd2lkZSBjaGFyYWN0ZXIgY29uc3RhbnQgY29udGFpbmluZyBtb3JlIHRoYW4gb25lCittdWx0aWJ5dGUgY2hhcmFjdGVyLCBvciBjb250YWluaW5nIGEgbXVsdGlieXRlIGNoYXJhY3RlciBvciBlc2NhcGUKK3NlcXVlbmNlIG5vdCByZXByZXNlbnRlZCBpbiB0aGUgZXh0ZW5kZWQgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQgKEM5MAorNi4xLjMuNCwgQzk5IDYuNC40LjQpLjwvY2l0ZT4KKworICAgICA8cD5TZWUgPGEgaHJlZj0iLi4vY3BwL0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IiPkltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+LgorCisgICAgIDxsaT48Y2l0ZT5UaGUgY3VycmVudCBsb2NhbGUgdXNlZCB0byBjb252ZXJ0IGEgd2lkZSBjaGFyYWN0ZXIgY29uc3RhbnQgY29uc2lzdGluZworb2YgYSBzaW5nbGUgbXVsdGlieXRlIGNoYXJhY3RlciB0aGF0IG1hcHMgdG8gYSBtZW1iZXIgb2YgdGhlIGV4dGVuZGVkCitleGVjdXRpb24gY2hhcmFjdGVyIHNldCBpbnRvIGEgY29ycmVzcG9uZGluZyB3aWRlIGNoYXJhY3RlciBjb2RlIChDOTAKKzYuMS4zLjQsIEM5OSA2LjQuNC40KS48L2NpdGU+CisKKyAgICAgPHA+U2VlIDxhIGhyZWY9Ii4uL2NwcC9JbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci5odG1sI0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yIj5JbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9hPi4KKworICAgICA8bGk+PGNpdGU+VGhlIGN1cnJlbnQgbG9jYWxlIHVzZWQgdG8gY29udmVydCBhIHdpZGUgc3RyaW5nIGxpdGVyYWwgaW50bworY29ycmVzcG9uZGluZyB3aWRlIGNoYXJhY3RlciBjb2RlcyAoQzkwIDYuMS40LCBDOTkgNi40LjUpLjwvY2l0ZT4KKworICAgICA8cD5TZWUgPGEgaHJlZj0iLi4vY3BwL0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IiPkltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+LgorCisgICAgIDxsaT48Y2l0ZT5UaGUgdmFsdWUgb2YgYSBzdHJpbmcgbGl0ZXJhbCBjb250YWluaW5nIGEgbXVsdGlieXRlIGNoYXJhY3RlciBvciBlc2NhcGUKK3NlcXVlbmNlIG5vdCByZXByZXNlbnRlZCBpbiB0aGUgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQgKEM5MCA2LjEuNCwgQzk5IDYuNC41KS48L2NpdGU+CisKKyAgICAgPHA+U2VlIDxhIGhyZWY9Ii4uL2NwcC9JbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci5odG1sI0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yIj5JbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9hPi4gCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db2RlLUdlbi1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvZGUtR2VuLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzc0Yzg5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db2RlLUdlbi1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw2MzQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvZGUgR2VuIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIiB0aXRsZT0iSW52b2tpbmcgR0NDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIiB0aXRsZT0iRW52aXJvbm1lbnQgVmFyaWFibGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvZGUtR2VuLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyI+SW52b2tpbmcgR0NDPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xOCBPcHRpb25zIGZvciBDb2RlIEdlbmVyYXRpb24gQ29udmVudGlvbnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb2RlLWdlbmVyYXRpb24tY29udmVudGlvbnMtMjMyMyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1jb2RlLWdlbmVyYXRpb24tMjMyNCI+PC9hPjxhIG5hbWU9ImluZGV4LXJ1bl8wMDJkdGltZS1vcHRpb25zLTIzMjUiPjwvYT4KK1RoZXNlIG1hY2hpbmUtaW5kZXBlbmRlbnQgb3B0aW9ucyBjb250cm9sIHRoZSBpbnRlcmZhY2UgY29udmVudGlvbnMKK3VzZWQgaW4gY29kZSBnZW5lcmF0aW9uLgorCisgPHA+TW9zdCBvZiB0aGVtIGhhdmUgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXM7IHRoZSBuZWdhdGl2ZSBmb3JtCitvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZvbzwvc3Bhbj48L3NhbXA+IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZm9vPC9zcGFuPjwvc2FtcD4uICBJbiB0aGUgdGFibGUgYmVsb3csIG9ubHkKK29uZSBvZiB0aGUgZm9ybXMgaXMgbGlzdGVkJm1kYXNoO3RoZSBvbmUgdGhhdCBpcyBub3QgdGhlIGRlZmF1bHQuICBZb3UKK2NhbiBmaWd1cmUgb3V0IHRoZSBvdGhlciBmb3JtIGJ5IGVpdGhlciByZW1vdmluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciBhZGRpbmcKK2l0LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tZmJvdW5kcy1jaGVjazwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmJvdW5kc18wMDJkY2hlY2stMjMyNiI+PC9hPkZvciBmcm9udCBlbmRzIHRoYXQgc3VwcG9ydCBpdCwgZ2VuZXJhdGUgYWRkaXRpb25hbCBjb2RlIHRvIGNoZWNrIHRoYXQKK2luZGljZXMgdXNlZCB0byBhY2Nlc3MgYXJyYXlzIGFyZSB3aXRoaW4gdGhlIGRlY2xhcmVkIHJhbmdlLiAgVGhpcyBpcworY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBKYXZhIGFuZCBGb3J0cmFuIGZyb250IGVuZHMsIHdoZXJlCit0aGlzIG9wdGlvbiBkZWZhdWx0cyB0byB0cnVlIGFuZCBmYWxzZSByZXNwZWN0aXZlbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnN0YWNrLXJldXNlPTwvY29kZT48dmFyPnJldXNlLWxldmVsPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZzdGFja18wMDVmcmV1c2UtMjMyNyI+PC9hPlRoaXMgb3B0aW9uIGNvbnRyb2xzIHN0YWNrIHNwYWNlIHJldXNlIGZvciB1c2VyIGRlY2xhcmVkIGxvY2FsL2F1dG8gdmFyaWFibGVzCithbmQgY29tcGlsZXIgZ2VuZXJhdGVkIHRlbXBvcmFyaWVzLiAgPHZhcj5yZXVzZV9sZXZlbDwvdmFyPiBjYW4gYmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5hbWVkX3ZhcnM8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZW5hYmxlcyBzdGFjayByZXVzZSBmb3IgYWxsCitsb2NhbCB2YXJpYWJsZXMgYW5kIHRlbXBvcmFyaWVzLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5hbWVkX3ZhcnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZW5hYmxlcyB0aGUgcmV1c2Ugb25seSBmb3IKK3VzZXIgZGVmaW5lZCBsb2NhbCB2YXJpYWJsZXMgd2l0aCBuYW1lcywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXNhYmxlcyBzdGFjayByZXVzZQorY29tcGxldGVseS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIFRoZSBvcHRpb24gaXMgbmVlZGVkIHdoZW4gdGhlCitwcm9ncmFtIGV4dGVuZHMgdGhlIGxpZmV0aW1lIG9mIGEgc2NvcGVkIGxvY2FsIHZhcmlhYmxlIG9yIGEgY29tcGlsZXIgZ2VuZXJhdGVkCit0ZW1wb3JhcnkgYmV5b25kIHRoZSBlbmQgcG9pbnQgZGVmaW5lZCBieSB0aGUgbGFuZ3VhZ2UuICBXaGVuIGEgbGlmZXRpbWUgb2YKK2EgdmFyaWFibGUgZW5kcywgYW5kIGlmIHRoZSB2YXJpYWJsZSBsaXZlcyBpbiBtZW1vcnksIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyCitoYXMgdGhlIGZyZWVkb20gdG8gcmV1c2UgaXRzIHN0YWNrIHNwYWNlIHdpdGggb3RoZXIgdGVtcG9yYXJpZXMgb3Igc2NvcGVkCitsb2NhbCB2YXJpYWJsZXMgd2hvc2UgbGl2ZSByYW5nZSBkb2VzIG5vdCBvdmVybGFwIHdpdGggaXQuIExlZ2FjeSBjb2RlIGV4dGVuZGluZworbG9jYWwgbGlmZXRpbWUgd2lsbCBsaWtlbHkgdG8gYnJlYWsgd2l0aCB0aGUgc3RhY2sgcmV1c2Ugb3B0aW1pemF0aW9uLgorCisgICAgIDxwPkZvciBleGFtcGxlLAorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIGludCAqcDsKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBpbnQgbG9jYWwxOworICAgICAgICAgIAorICAgICAgICAgICAgICAgcCA9ICZhbXA7bG9jYWwxOworICAgICAgICAgICAgICAgbG9jYWwxID0gMTA7CisgICAgICAgICAgICAgICAuLi4uCisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgbG9jYWwyOworICAgICAgICAgICAgICAgIGxvY2FsMiA9IDIwOworICAgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICAgICBpZiAoKnAgPT0gMTApICAvLyBvdXQgb2Ygc2NvcGUgdXNlIG9mIGxvY2FsMQorICAgICAgICAgICAgICAgeworICAgICAgICAgIAorICAgICAgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwPkFub3RoZXIgZXhhbXBsZToKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgCisgICAgICAgICAgICAgc3RydWN0IEEKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIEEoaW50IGspIDogaShrKSwgaihrKSB7IH0KKyAgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgIH07CisgICAgICAgICAgCisgICAgICAgICAgICAgQSAqYXA7CisgICAgICAgICAgCisgICAgICAgICAgICAgdm9pZCBmb28oY29uc3QgQSZhbXA7IGFyKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhcCA9ICZhbXA7YXI7CisgICAgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgICAgIHZvaWQgYmFyKCkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9vKEEoMTApKTsgLy8gdGVtcCBvYmplY3QncyBsaWZldGltZSBlbmRzIHdoZW4gZm9vIHJldHVybnMKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBBIGEoMjApOworICAgICAgICAgICAgICAgICAgLi4uLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcC0mZ3Q7aSs9IDEwOyAgLy8gYXAgcmVmZXJlbmNlcyBvdXQgb2Ygc2NvcGUgdGVtcCB3aG9zZSBzcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyByZXVzZWQgd2l0aCBhLiBXaGF0IGlzIHRoZSB2YWx1ZSBvZiBhcC0mZ3Q7aT8KKyAgICAgICAgICAgICB9CisgICAgICAgICAgCis8L3ByZT4KKyAgICAgPHA+VGhlIGxpZmV0aW1lIG9mIGEgY29tcGlsZXIgZ2VuZXJhdGVkIHRlbXBvcmFyeSBpcyB3ZWxsIGRlZmluZWQgYnkgdGhlIEMrKworc3RhbmRhcmQuIFdoZW4gYSBsaWZldGltZSBvZiBhIHRlbXBvcmFyeSBlbmRzLCBhbmQgaWYgdGhlIHRlbXBvcmFyeSBsaXZlcworaW4gbWVtb3J5LCB0aGUgb3B0aW1pemluZyBjb21waWxlciBoYXMgdGhlIGZyZWVkb20gdG8gcmV1c2UgaXRzIHN0YWNrCitzcGFjZSB3aXRoIG90aGVyIHRlbXBvcmFyaWVzIG9yIHNjb3BlZCBsb2NhbCB2YXJpYWJsZXMgd2hvc2UgbGl2ZSByYW5nZQorZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGl0LiBIb3dldmVyIHNvbWUgb2YgdGhlIGxlZ2FjeSBjb2RlIHJlbGllcyBvbgordGhlIGJlaGF2aW9yIG9mIG9sZGVyIGNvbXBpbGVycyBpbiB3aGljaCB0ZW1wb3Jhcmllcycgc3RhY2sgc3BhY2UgaXMKK25vdCByZXVzZWQsIHRoZSBhZ2dyZXNzaXZlIHN0YWNrIHJldXNlIGNhbiBsZWFkIHRvIHJ1bnRpbWUgZXJyb3JzLiBUaGlzCitvcHRpb24gaXMgdXNlZCB0byBjb250cm9sIHRoZSB0ZW1wb3Jhcnkgc3RhY2sgcmV1c2Ugb3B0aW1pemF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmFwdjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyYXB2LTIzMjgiPjwvYT5UaGlzIG9wdGlvbiBnZW5lcmF0ZXMgdHJhcHMgZm9yIHNpZ25lZCBvdmVyZmxvdyBvbiBhZGRpdGlvbiwgc3VidHJhY3Rpb24sCittdWx0aXBsaWNhdGlvbiBvcGVyYXRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ3cmFwdjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZndyYXB2LTIzMjkiPjwvYT5UaGlzIG9wdGlvbiBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSB0aGF0IHNpZ25lZCBhcml0aG1ldGljCitvdmVyZmxvdyBvZiBhZGRpdGlvbiwgc3VidHJhY3Rpb24gYW5kIG11bHRpcGxpY2F0aW9uIHdyYXBzIGFyb3VuZAordXNpbmcgdHdvcy1jb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLiAgVGhpcyBmbGFnIGVuYWJsZXMgc29tZSBvcHRpbWl6YXRpb25zCithbmQgZGlzYWJsZXMgb3RoZXJzLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciB0aGUgSmF2YQorZnJvbnQgZW5kLCBhcyByZXF1aXJlZCBieSB0aGUgSmF2YSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZleGNlcHRpb25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZXhjZXB0aW9ucy0yMzMwIj48L2E+RW5hYmxlIGV4Y2VwdGlvbiBoYW5kbGluZy4gIEdlbmVyYXRlcyBleHRyYSBjb2RlIG5lZWRlZCB0byBwcm9wYWdhdGUKK2V4Y2VwdGlvbnMuICBGb3Igc29tZSB0YXJnZXRzLCB0aGlzIGltcGxpZXMgR0NDIGdlbmVyYXRlcyBmcmFtZQordW53aW5kIGluZm9ybWF0aW9uIGZvciBhbGwgZnVuY3Rpb25zLCB3aGljaCBjYW4gcHJvZHVjZSBzaWduaWZpY2FudCBkYXRhCitzaXplIG92ZXJoZWFkLCBhbHRob3VnaCBpdCBkb2VzIG5vdCBhZmZlY3QgZXhlY3V0aW9uLiAgSWYgeW91IGRvIG5vdAorc3BlY2lmeSB0aGlzIG9wdGlvbiwgR0NDIGVuYWJsZXMgaXQgYnkgZGVmYXVsdCBmb3IgbGFuZ3VhZ2VzIGxpa2UKK0MrKyB0aGF0IG5vcm1hbGx5IHJlcXVpcmUgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgZGlzYWJsZXMgaXQgZm9yCitsYW5ndWFnZXMgbGlrZSBDIHRoYXQgZG8gbm90IG5vcm1hbGx5IHJlcXVpcmUgaXQuICBIb3dldmVyLCB5b3UgbWF5IG5lZWQKK3RvIGVuYWJsZSB0aGlzIG9wdGlvbiB3aGVuIGNvbXBpbGluZyBDIGNvZGUgdGhhdCBuZWVkcyB0byBpbnRlcm9wZXJhdGUKK3Byb3Blcmx5IHdpdGggZXhjZXB0aW9uIGhhbmRsZXJzIHdyaXR0ZW4gaW4gQysrLiAgWW91IG1heSBhbHNvIHdpc2ggdG8KK2Rpc2FibGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSBjb21waWxpbmcgb2xkZXIgQysrIHByb2dyYW1zIHRoYXQgZG9uJ3QKK3VzZSBleGNlcHRpb24gaGFuZGxpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vbi1jYWxsLWV4Y2VwdGlvbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub25fMDAyZGNhbGxfMDAyZGV4Y2VwdGlvbnMtMjMzMSI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgdHJhcHBpbmcgaW5zdHJ1Y3Rpb25zIHRvIHRocm93IGV4Y2VwdGlvbnMuIAorTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgcGxhdGZvcm0tc3BlY2lmaWMgcnVudGltZSBzdXBwb3J0IHRoYXQgZG9lcworbm90IGV4aXN0IGV2ZXJ5d2hlcmUuICBNb3Jlb3ZlciwgaXQgb25seSBhbGxvd3MgPGVtPnRyYXBwaW5nPC9lbT4KK2luc3RydWN0aW9ucyB0byB0aHJvdyBleGNlcHRpb25zLCBpLmUuIG1lbW9yeSByZWZlcmVuY2VzIG9yIGZsb2F0aW5nLXBvaW50CitpbnN0cnVjdGlvbnMuICBJdCBkb2VzIG5vdCBhbGxvdyBleGNlcHRpb25zIHRvIGJlIHRocm93biBmcm9tCithcmJpdHJhcnkgc2lnbmFsIGhhbmRsZXJzIHN1Y2ggYXMgPGNvZGU+U0lHQUxSTTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRlbGV0ZS1kZWFkLWV4Y2VwdGlvbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkZWxldGVfMDAyZGRlYWRfMDAyZGV4Y2VwdGlvbnMtMjMzMiI+PC9hPkNvbnNpZGVyIHRoYXQgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IHRocm93IGV4Y2VwdGlvbnMgYnV0IGRvbid0IG90aGVyd2lzZQorY29udHJpYnV0ZSB0byB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGNhbiBiZSBvcHRpbWl6ZWQgYXdheS4gCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIHRoZSBBZGEgZnJvbnQgZW5kLCBhcyBwZXJtaXR0ZWQgYnkKK3RoZSBBZGEgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbi4gCitPcHRpbWl6YXRpb24gcGFzc2VzIHRoYXQgY2F1c2UgZGVhZCBleGNlcHRpb25zIHRvIGJlIHJlbW92ZWQgYXJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSBhdCBkaWZmZXJlbnQgb3B0aW1pemF0aW9uIGxldmVscy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdW53aW5kLXRhYmxlczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnVud2luZF8wMDJkdGFibGVzLTIzMzMiPjwvYT5TaW1pbGFyIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZXhjZXB0aW9uczwvc3Bhbj48L3NhbXA+LCBleGNlcHQgdGhhdCBpdCBqdXN0IGdlbmVyYXRlcyBhbnkgbmVlZGVkCitzdGF0aWMgZGF0YSwgYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgZ2VuZXJhdGVkIGNvZGUgaW4gYW55IG90aGVyIHdheS4gCitZb3Ugbm9ybWFsbHkgZG8gbm90IG5lZWQgdG8gZW5hYmxlIHRoaXMgb3B0aW9uOyBpbnN0ZWFkLCBhIGxhbmd1YWdlIHByb2Nlc3NvcgordGhhdCBuZWVkcyB0aGlzIGhhbmRsaW5nIGVuYWJsZXMgaXQgb24geW91ciBiZWhhbGYuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mYXN5bmNocm9ub3VzXzAwMmR1bndpbmRfMDAyZHRhYmxlcy0yMzM0Ij48L2E+R2VuZXJhdGUgdW53aW5kIHRhYmxlIGluIERXQVJGIDIgZm9ybWF0LCBpZiBzdXBwb3J0ZWQgYnkgdGFyZ2V0IG1hY2hpbmUuICBUaGUKK3RhYmxlIGlzIGV4YWN0IGF0IGVhY2ggaW5zdHJ1Y3Rpb24gYm91bmRhcnksIHNvIGl0IGNhbiBiZSB1c2VkIGZvciBzdGFjawordW53aW5kaW5nIGZyb20gYXN5bmNocm9ub3VzIGV2ZW50cyAoc3VjaCBhcyBkZWJ1Z2dlciBvciBnYXJiYWdlIGNvbGxlY3RvcikuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnBjYy1zdHJ1Y3QtcmV0dXJuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcGNjXzAwMmRzdHJ1Y3RfMDAyZHJldHVybi0yMzM1Ij48L2E+UmV0dXJuICZsZHF1bztzaG9ydCZyZHF1bzsgPGNvZGU+c3RydWN0PC9jb2RlPiBhbmQgPGNvZGU+dW5pb248L2NvZGU+IHZhbHVlcyBpbiBtZW1vcnkgbGlrZQorbG9uZ2VyIG9uZXMsIHJhdGhlciB0aGFuIGluIHJlZ2lzdGVycy4gIFRoaXMgY29udmVudGlvbiBpcyBsZXNzCitlZmZpY2llbnQsIGJ1dCBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZiBhbGxvd2luZyBpbnRlcmNhbGxhYmlsaXR5IGJldHdlZW4KK0dDQy1jb21waWxlZCBmaWxlcyBhbmQgZmlsZXMgY29tcGlsZWQgd2l0aCBvdGhlciBjb21waWxlcnMsIHBhcnRpY3VsYXJseQordGhlIFBvcnRhYmxlIEMgQ29tcGlsZXIgKHBjYykuCisKKyAgICAgPHA+VGhlIHByZWNpc2UgY29udmVudGlvbiBmb3IgcmV0dXJuaW5nIHN0cnVjdHVyZXMgaW4gbWVtb3J5IGRlcGVuZHMKK29uIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MuCisKKyAgICAgPHA+U2hvcnQgc3RydWN0dXJlcyBhbmQgdW5pb25zIGFyZSB0aG9zZSB3aG9zZSBzaXplIGFuZCBhbGlnbm1lbnQgbWF0Y2gKK3RoYXQgb2Ygc29tZSBpbnRlZ2VyIHR5cGUuCisKKyAgICAgPHA+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiBjb2RlIGNvbXBpbGVkIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGNjLXN0cnVjdC1yZXR1cm48L3NwYW4+PC9zYW1wPgorc3dpdGNoIGlzIG5vdCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGNvZGUgY29tcGlsZWQgd2l0aCB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcmVnLXN0cnVjdC1yZXR1cm48L3NwYW4+PC9zYW1wPiBzd2l0Y2guIAorVXNlIGl0IHRvIGNvbmZvcm0gdG8gYSBub24tZGVmYXVsdCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZyZWctc3RydWN0LXJldHVybjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnJlZ18wMDJkc3RydWN0XzAwMmRyZXR1cm4tMjMzNiI+PC9hPlJldHVybiA8Y29kZT5zdHJ1Y3Q8L2NvZGU+IGFuZCA8Y29kZT51bmlvbjwvY29kZT4gdmFsdWVzIGluIHJlZ2lzdGVycyB3aGVuIHBvc3NpYmxlLiAKK1RoaXMgaXMgbW9yZSBlZmZpY2llbnQgZm9yIHNtYWxsIHN0cnVjdHVyZXMgdGhhbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwY2Mtc3RydWN0LXJldHVybjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPklmIHlvdSBzcGVjaWZ5IG5laXRoZXIgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwY2Mtc3RydWN0LXJldHVybjwvc3Bhbj48L3NhbXA+IG5vcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZWctc3RydWN0LXJldHVybjwvc3Bhbj48L3NhbXA+LCBHQ0MgZGVmYXVsdHMgdG8gd2hpY2hldmVyIGNvbnZlbnRpb24gaXMKK3N0YW5kYXJkIGZvciB0aGUgdGFyZ2V0LiAgSWYgdGhlcmUgaXMgbm8gc3RhbmRhcmQgY29udmVudGlvbiwgR0NDCitkZWZhdWx0cyB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBjYy1zdHJ1Y3QtcmV0dXJuPC9zcGFuPjwvc2FtcD4sIGV4Y2VwdCBvbiB0YXJnZXRzIHdoZXJlIEdDQyBpcwordGhlIHByaW5jaXBhbCBjb21waWxlci4gIEluIHRob3NlIGNhc2VzLCB3ZSBjYW4gY2hvb3NlIHRoZSBzdGFuZGFyZCwgYW5kCit3ZSBjaG9zZSB0aGUgbW9yZSBlZmZpY2llbnQgcmVnaXN0ZXIgcmV0dXJuIGFsdGVybmF0aXZlLgorCisgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gY29kZSBjb21waWxlZCB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnJlZy1zdHJ1Y3QtcmV0dXJuPC9zcGFuPjwvc2FtcD4KK3N3aXRjaCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGNvbXBpbGVkIHdpdGggdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBjYy1zdHJ1Y3QtcmV0dXJuPC9zcGFuPjwvc2FtcD4gc3dpdGNoLiAKK1VzZSBpdCB0byBjb25mb3JtIHRvIGEgbm9uLWRlZmF1bHQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2hvcnQtZW51bXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzaG9ydF8wMDJkZW51bXMtMjMzNyI+PC9hPkFsbG9jYXRlIHRvIGFuIDxjb2RlPmVudW08L2NvZGU+IHR5cGUgb25seSBhcyBtYW55IGJ5dGVzIGFzIGl0IG5lZWRzIGZvciB0aGUKK2RlY2xhcmVkIHJhbmdlIG9mIHBvc3NpYmxlIHZhbHVlcy4gIFNwZWNpZmljYWxseSwgdGhlIDxjb2RlPmVudW08L2NvZGU+IHR5cGUKK2lzIGVxdWl2YWxlbnQgdG8gdGhlIHNtYWxsZXN0IGludGVnZXIgdHlwZSB0aGF0IGhhcyBlbm91Z2ggcm9vbS4KKworICAgICA8cD48c3Ryb25nPldhcm5pbmc6PC9zdHJvbmc+IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNob3J0LWVudW1zPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGNhdXNlcyBHQ0MgdG8gZ2VuZXJhdGUKK2NvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQgc3dpdGNoLiAKK1VzZSBpdCB0byBjb25mb3JtIHRvIGEgbm9uLWRlZmF1bHQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2hvcnQtZG91YmxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2hvcnRfMDAyZGRvdWJsZS0yMzM4Ij48L2E+VXNlIHRoZSBzYW1lIHNpemUgZm9yIDxjb2RlPmRvdWJsZTwvY29kZT4gYXMgZm9yIDxjb2RlPmZsb2F0PC9jb2RlPi4KKworICAgICA8cD48c3Ryb25nPldhcm5pbmc6PC9zdHJvbmc+IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNob3J0LWRvdWJsZTwvc3Bhbj48L3NhbXA+IHN3aXRjaCBjYXVzZXMgR0NDIHRvIGdlbmVyYXRlCitjb2RlIHRoYXQgaXMgbm90IGJpbmFyeSBjb21wYXRpYmxlIHdpdGggY29kZSBnZW5lcmF0ZWQgd2l0aG91dCB0aGF0IHN3aXRjaC4gCitVc2UgaXQgdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNob3J0LXdjaGFyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2hvcnRfMDAyZHdjaGFyLTIzMzkiPjwvYT5PdmVycmlkZSB0aGUgdW5kZXJseWluZyB0eXBlIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPndjaGFyX3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gYmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zaG9ydAordW5zaWduZWQgaW50PC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9yIHRoZSB0YXJnZXQuICBUaGlzIG9wdGlvbiBpcwordXNlZnVsIGZvciBidWlsZGluZyBwcm9ncmFtcyB0byBydW4gdW5kZXIgV0lORS4KKworICAgICA8cD48c3Ryb25nPldhcm5pbmc6PC9zdHJvbmc+IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNob3J0LXdjaGFyPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGNhdXNlcyBHQ0MgdG8gZ2VuZXJhdGUKK2NvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQgc3dpdGNoLiAKK1VzZSBpdCB0byBjb25mb3JtIHRvIGEgbm9uLWRlZmF1bHQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tY29tbW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGNvbW1vbi0yMzQwIj48L2E+SW4gQyBjb2RlLCBjb250cm9scyB0aGUgcGxhY2VtZW50IG9mIHVuaW5pdGlhbGl6ZWQgZ2xvYmFsIHZhcmlhYmxlcy4gCitVbml4IEMgY29tcGlsZXJzIGhhdmUgdHJhZGl0aW9uYWxseSBwZXJtaXR0ZWQgbXVsdGlwbGUgZGVmaW5pdGlvbnMgb2YKK3N1Y2ggdmFyaWFibGVzIGluIGRpZmZlcmVudCBjb21waWxhdGlvbiB1bml0cyBieSBwbGFjaW5nIHRoZSB2YXJpYWJsZXMKK2luIGEgY29tbW9uIGJsb2NrLiAKK1RoaXMgaXMgdGhlIGJlaGF2aW9yIHNwZWNpZmllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNvbW1vbjwvc3Bhbj48L3NhbXA+LCBhbmQgaXMgdGhlIGRlZmF1bHQKK2ZvciBHQ0Mgb24gbW9zdCB0YXJnZXRzLiAKK09uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGJlaGF2aW9yIGlzIG5vdCByZXF1aXJlZCBieSBJU08gQywgYW5kIG9uIHNvbWUKK3RhcmdldHMgbWF5IGNhcnJ5IGEgc3BlZWQgb3IgY29kZSBzaXplIHBlbmFsdHkgb24gdmFyaWFibGUgcmVmZXJlbmNlcy4gCitUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1jb21tb248L3NwYW4+PC9zYW1wPiBvcHRpb24gc3BlY2lmaWVzIHRoYXQgdGhlIGNvbXBpbGVyIHNob3VsZCBwbGFjZQordW5pbml0aWFsaXplZCBnbG9iYWwgdmFyaWFibGVzIGluIHRoZSBkYXRhIHNlY3Rpb24gb2YgdGhlIG9iamVjdCBmaWxlLAorcmF0aGVyIHRoYW4gZ2VuZXJhdGluZyB0aGVtIGFzIGNvbW1vbiBibG9ja3MuIAorVGhpcyBoYXMgdGhlIGVmZmVjdCB0aGF0IGlmIHRoZSBzYW1lIHZhcmlhYmxlIGlzIGRlY2xhcmVkCisod2l0aG91dCA8Y29kZT5leHRlcm48L2NvZGU+KSBpbiB0d28gZGlmZmVyZW50IGNvbXBpbGF0aW9ucywKK3lvdSBnZXQgYSBtdWx0aXBsZS1kZWZpbml0aW9uIGVycm9yIHdoZW4geW91IGxpbmsgdGhlbS4gCitJbiB0aGlzIGNhc2UsIHlvdSBtdXN0IGNvbXBpbGUgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNvbW1vbjwvc3Bhbj48L3NhbXA+IGluc3RlYWQuIAorQ29tcGlsaW5nIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1jb21tb248L3NwYW4+PC9zYW1wPiBpcyB1c2VmdWwgb24gdGFyZ2V0cyBmb3Igd2hpY2gKK2l0IHByb3ZpZGVzIGJldHRlciBwZXJmb3JtYW5jZSwgb3IgaWYgeW91IHdpc2ggdG8gdmVyaWZ5IHRoYXQgdGhlCitwcm9ncmFtIHdpbGwgd29yayBvbiBvdGhlciBzeXN0ZW1zIHRoYXQgYWx3YXlzIHRyZWF0IHVuaW5pdGlhbGl6ZWQKK3ZhcmlhYmxlIGRlY2xhcmF0aW9ucyB0aGlzIHdheS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8taWRlbnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkaWRlbnQtMjM0MSI+PC9hPklnbm9yZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWRlbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpbmhpYml0LXNpemUtZGlyZWN0aXZlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maW5oaWJpdF8wMDJkc2l6ZV8wMDJkZGlyZWN0aXZlLTIzNDIiPjwvYT5Eb24ndCBvdXRwdXQgYSA8Y29kZT4uc2l6ZTwvY29kZT4gYXNzZW1ibGVyIGRpcmVjdGl2ZSwgb3IgYW55dGhpbmcgZWxzZSB0aGF0Cit3b3VsZCBjYXVzZSB0cm91YmxlIGlmIHRoZSBmdW5jdGlvbiBpcyBzcGxpdCBpbiB0aGUgbWlkZGxlLCBhbmQgdGhlCit0d28gaGFsdmVzIGFyZSBwbGFjZWQgYXQgbG9jYXRpb25zIGZhciBhcGFydCBpbiBtZW1vcnkuICBUaGlzIG9wdGlvbiBpcwordXNlZCB3aGVuIGNvbXBpbGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y3J0c3R1ZmYuYzwvc3Bhbj48L3NhbXA+OyB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIHVzZSBpdAorZm9yIGFueXRoaW5nIGVsc2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnZlcmJvc2UtYXNtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdmVyYm9zZV8wMDJkYXNtLTIzNDMiPjwvYT5QdXQgZXh0cmEgY29tbWVudGFyeSBpbmZvcm1hdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgdG8KK21ha2UgaXQgbW9yZSByZWFkYWJsZS4gIFRoaXMgb3B0aW9uIGlzIGdlbmVyYWxseSBvbmx5IG9mIHVzZSB0byB0aG9zZQord2hvIGFjdHVhbGx5IG5lZWQgdG8gcmVhZCB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgKHBlcmhhcHMgd2hpbGUKK2RlYnVnZ2luZyB0aGUgY29tcGlsZXIgaXRzZWxmKS4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXZlcmJvc2UtYXNtPC9zcGFuPjwvc2FtcD4sIHRoZSBkZWZhdWx0LCBjYXVzZXMgdGhlCitleHRyYSBpbmZvcm1hdGlvbiB0byBiZSBvbWl0dGVkIGFuZCBpcyB1c2VmdWwgd2hlbiBjb21wYXJpbmcgdHdvIGFzc2VtYmxlcgorZmlsZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlY29yZC1nY2Mtc3dpdGNoZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZyZWNvcmRfMDAyZGdjY18wMDJkc3dpdGNoZXMtMjM0NCI+PC9hPlRoaXMgc3dpdGNoIGNhdXNlcyB0aGUgY29tbWFuZCBsaW5lIHVzZWQgdG8gaW52b2tlIHRoZQorY29tcGlsZXIgdG8gYmUgcmVjb3JkZWQgaW50byB0aGUgb2JqZWN0IGZpbGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkLiAKK1RoaXMgc3dpdGNoIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gc29tZSB0YXJnZXRzIGFuZCB0aGUgZXhhY3QgZm9ybWF0CitvZiB0aGUgcmVjb3JkaW5nIGlzIHRhcmdldCBhbmQgYmluYXJ5IGZpbGUgZm9ybWF0IGRlcGVuZGVudCwgYnV0IGl0Cit1c3VhbGx5IHRha2VzIHRoZSBmb3JtIG9mIGEgc2VjdGlvbiBjb250YWluaW5nIEFTQ0lJIHRleHQuICBUaGlzCitzd2l0Y2ggaXMgcmVsYXRlZCB0byB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ2ZXJib3NlLWFzbTwvc3Bhbj48L3NhbXA+IHN3aXRjaCwgYnV0IHRoYXQKK3N3aXRjaCBvbmx5IHJlY29yZHMgaW5mb3JtYXRpb24gaW4gdGhlIGFzc2VtYmxlciBvdXRwdXQgZmlsZSBhcworY29tbWVudHMsIHNvIGl0IG5ldmVyIHJlYWNoZXMgdGhlIG9iamVjdCBmaWxlLiAKK1NlZSBhbHNvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ncmVjb3JkLWdjYy1zd2l0Y2hlczwvc3Bhbj48L3NhbXA+IGZvciBhbm90aGVyCit3YXkgb2Ygc3RvcmluZyBjb21waWxlciBvcHRpb25zIGludG8gdGhlIG9iamVjdCBmaWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwaWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZwaWMtMjM0NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdsb2JhbC1vZmZzZXQtdGFibGUtMjM0NiI+PC9hPjxhIG5hbWU9ImluZGV4LVBJQy0yMzQ3Ij48L2E+R2VuZXJhdGUgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSAoUElDKSBzdWl0YWJsZSBmb3IgdXNlIGluIGEgc2hhcmVkCitsaWJyYXJ5LCBpZiBzdXBwb3J0ZWQgZm9yIHRoZSB0YXJnZXQgbWFjaGluZS4gIFN1Y2ggY29kZSBhY2Nlc3NlcyBhbGwKK2NvbnN0YW50IGFkZHJlc3NlcyB0aHJvdWdoIGEgZ2xvYmFsIG9mZnNldCB0YWJsZSAoR09UKS4gIFRoZSBkeW5hbWljCitsb2FkZXIgcmVzb2x2ZXMgdGhlIEdPVCBlbnRyaWVzIHdoZW4gdGhlIHByb2dyYW0gc3RhcnRzICh0aGUgZHluYW1pYworbG9hZGVyIGlzIG5vdCBwYXJ0IG9mIEdDQzsgaXQgaXMgcGFydCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSkuICBJZgordGhlIEdPVCBzaXplIGZvciB0aGUgbGlua2VkIGV4ZWN1dGFibGUgZXhjZWVkcyBhIG1hY2hpbmUtc3BlY2lmaWMKK21heGltdW0gc2l6ZSwgeW91IGdldCBhbiBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGxpbmtlciBpbmRpY2F0aW5nIHRoYXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGljPC9zcGFuPjwvc2FtcD4gZG9lcyBub3Qgd29yazsgaW4gdGhhdCBjYXNlLCByZWNvbXBpbGUgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZlBJQzwvc3Bhbj48L3NhbXA+CitpbnN0ZWFkLiAgKFRoZXNlIG1heGltdW1zIGFyZSA4ayBvbiB0aGUgU1BBUkMgYW5kIDMyaworb24gdGhlIG02OGsgYW5kIFJTLzYwMDAuICBUaGUgMzg2IGhhcyBubyBzdWNoIGxpbWl0LikKKworICAgICA8cD5Qb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIHJlcXVpcmVzIHNwZWNpYWwgc3VwcG9ydCwgYW5kIHRoZXJlZm9yZSB3b3Jrcworb25seSBvbiBjZXJ0YWluIG1hY2hpbmVzLiAgRm9yIHRoZSAzODYsIEdDQyBzdXBwb3J0cyBQSUMgZm9yIFN5c3RlbSBWCitidXQgbm90IGZvciB0aGUgU3VuIDM4NmkuICBDb2RlIGdlbmVyYXRlZCBmb3IgdGhlIElCTSBSUy82MDAwIGlzIGFsd2F5cworcG9zaXRpb24taW5kZXBlbmRlbnQuCisKKyAgICAgPHA+V2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgbWFjcm9zIDxjb2RlPl9fcGljX188L2NvZGU+IGFuZCA8Y29kZT5fX1BJQ19fPC9jb2RlPgorYXJlIGRlZmluZWQgdG8gMS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mUElDPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mUElDLTIzNDgiPjwvYT5JZiBzdXBwb3J0ZWQgZm9yIHRoZSB0YXJnZXQgbWFjaGluZSwgZW1pdCBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLAorc3VpdGFibGUgZm9yIGR5bmFtaWMgbGlua2luZyBhbmQgYXZvaWRpbmcgYW55IGxpbWl0IG9uIHRoZSBzaXplIG9mIHRoZQorZ2xvYmFsIG9mZnNldCB0YWJsZS4gIFRoaXMgb3B0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSBvbiB0aGUgbTY4aywKK1Bvd2VyUEMgYW5kIFNQQVJDLgorCisgICAgIDxwPlBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgcmVxdWlyZXMgc3BlY2lhbCBzdXBwb3J0LCBhbmQgdGhlcmVmb3JlIHdvcmtzCitvbmx5IG9uIGNlcnRhaW4gbWFjaGluZXMuCisKKyAgICAgPHA+V2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgbWFjcm9zIDxjb2RlPl9fcGljX188L2NvZGU+IGFuZCA8Y29kZT5fX1BJQ19fPC9jb2RlPgorYXJlIGRlZmluZWQgdG8gMi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcGllPC9jb2RlPjxkdD48Y29kZT4tZlBJRTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnBpZS0yMzQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZlBJRS0yMzUwIj48L2E+VGhlc2Ugb3B0aW9ucyBhcmUgc2ltaWxhciB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBpYzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZlBJQzwvc3Bhbj48L3NhbXA+LCBidXQKK2dlbmVyYXRlZCBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIGNhbiBiZSBvbmx5IGxpbmtlZCBpbnRvIGV4ZWN1dGFibGVzLiAKK1VzdWFsbHkgdGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1waWU8L3NwYW4+PC9zYW1wPiBHQ0Mgb3B0aW9uIGlzCit1c2VkIGR1cmluZyBsaW5raW5nLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGllPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElFPC9zcGFuPjwvc2FtcD4gYm90aCBkZWZpbmUgdGhlIG1hY3JvcworPGNvZGU+X19waWVfXzwvY29kZT4gYW5kIDxjb2RlPl9fUElFX188L2NvZGU+LiAgVGhlIG1hY3JvcyBoYXZlIHRoZSB2YWx1ZSAxCitmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwaWU8L3NwYW4+PC9zYW1wPiBhbmQgMiBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZQSUU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tanVtcC10YWJsZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkanVtcF8wMDJkdGFibGVzLTIzNTEiPjwvYT5EbyBub3QgdXNlIGp1bXAgdGFibGVzIGZvciBzd2l0Y2ggc3RhdGVtZW50cyBldmVuIHdoZXJlIGl0IHdvdWxkIGJlCittb3JlIGVmZmljaWVudCB0aGFuIG90aGVyIGNvZGUgZ2VuZXJhdGlvbiBzdHJhdGVnaWVzLiAgVGhpcyBvcHRpb24gaXMKK29mIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGljPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZQSUM8L3NwYW4+PC9zYW1wPiBmb3IKK2J1aWxkaW5nIGNvZGUgdGhhdCBmb3JtcyBwYXJ0IG9mIGEgZHluYW1pYyBsaW5rZXIgYW5kIGNhbm5vdAorcmVmZXJlbmNlIHRoZSBhZGRyZXNzIG9mIGEganVtcCB0YWJsZS4gIE9uIHNvbWUgdGFyZ2V0cywganVtcCB0YWJsZXMKK2RvIG5vdCByZXF1aXJlIGEgR09UIGFuZCB0aGlzIG9wdGlvbiBpcyBub3QgbmVlZGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZmaXhlZC08L2NvZGU+PHZhcj5yZWc8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmZpeGVkLTIzNTIiPjwvYT5UcmVhdCB0aGUgcmVnaXN0ZXIgbmFtZWQgPHZhcj5yZWc8L3Zhcj4gYXMgYSBmaXhlZCByZWdpc3RlcjsgZ2VuZXJhdGVkIGNvZGUKK3Nob3VsZCBuZXZlciByZWZlciB0byBpdCAoZXhjZXB0IHBlcmhhcHMgYXMgYSBzdGFjayBwb2ludGVyLCBmcmFtZQorcG9pbnRlciBvciBpbiBzb21lIG90aGVyIGZpeGVkIHJvbGUpLgorCisgICAgIDxwPjx2YXI+cmVnPC92YXI+IG11c3QgYmUgdGhlIG5hbWUgb2YgYSByZWdpc3Rlci4gIFRoZSByZWdpc3RlciBuYW1lcyBhY2NlcHRlZAorYXJlIG1hY2hpbmUtc3BlY2lmaWMgYW5kIGFyZSBkZWZpbmVkIGluIHRoZSA8Y29kZT5SRUdJU1RFUl9OQU1FUzwvY29kZT4KK21hY3JvIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIG1hY3JvIGZpbGUuCisKKyAgICAgPHA+VGhpcyBmbGFnIGRvZXMgbm90IGhhdmUgYSBuZWdhdGl2ZSBmb3JtLCBiZWNhdXNlIGl0IHNwZWNpZmllcyBhCit0aHJlZS13YXkgY2hvaWNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZjYWxsLXVzZWQtPC9jb2RlPjx2YXI+cmVnPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZjYWxsXzAwMmR1c2VkLTIzNTMiPjwvYT5UcmVhdCB0aGUgcmVnaXN0ZXIgbmFtZWQgPHZhcj5yZWc8L3Zhcj4gYXMgYW4gYWxsb2NhYmxlIHJlZ2lzdGVyIHRoYXQgaXMKK2Nsb2JiZXJlZCBieSBmdW5jdGlvbiBjYWxscy4gIEl0IG1heSBiZSBhbGxvY2F0ZWQgZm9yIHRlbXBvcmFyaWVzIG9yCit2YXJpYWJsZXMgdGhhdCBkbyBub3QgbGl2ZSBhY3Jvc3MgYSBjYWxsLiAgRnVuY3Rpb25zIGNvbXBpbGVkIHRoaXMgd2F5CitkbyBub3Qgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgcmVnaXN0ZXIgPHZhcj5yZWc8L3Zhcj4uCisKKyAgICAgPHA+SXQgaXMgYW4gZXJyb3IgdG8gdXNlIHRoaXMgZmxhZyB3aXRoIHRoZSBmcmFtZSBwb2ludGVyIG9yIHN0YWNrIHBvaW50ZXIuIAorVXNlIG9mIHRoaXMgZmxhZyBmb3Igb3RoZXIgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBmaXhlZCBwZXJ2YXNpdmUgcm9sZXMgaW4KK3RoZSBtYWNoaW5lJ3MgZXhlY3V0aW9uIG1vZGVsIHByb2R1Y2VzIGRpc2FzdHJvdXMgcmVzdWx0cy4KKworICAgICA8cD5UaGlzIGZsYWcgZG9lcyBub3QgaGF2ZSBhIG5lZ2F0aXZlIGZvcm0sIGJlY2F1c2UgaXQgc3BlY2lmaWVzIGEKK3RocmVlLXdheSBjaG9pY2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmNhbGwtc2F2ZWQtPC9jb2RlPjx2YXI+cmVnPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZjYWxsXzAwMmRzYXZlZC0yMzU0Ij48L2E+VHJlYXQgdGhlIHJlZ2lzdGVyIG5hbWVkIDx2YXI+cmVnPC92YXI+IGFzIGFuIGFsbG9jYWJsZSByZWdpc3RlciBzYXZlZCBieQorZnVuY3Rpb25zLiAgSXQgbWF5IGJlIGFsbG9jYXRlZCBldmVuIGZvciB0ZW1wb3JhcmllcyBvciB2YXJpYWJsZXMgdGhhdAorbGl2ZSBhY3Jvc3MgYSBjYWxsLiAgRnVuY3Rpb25zIGNvbXBpbGVkIHRoaXMgd2F5IHNhdmUgYW5kIHJlc3RvcmUKK3RoZSByZWdpc3RlciA8dmFyPnJlZzwvdmFyPiBpZiB0aGV5IHVzZSBpdC4KKworICAgICA8cD5JdCBpcyBhbiBlcnJvciB0byB1c2UgdGhpcyBmbGFnIHdpdGggdGhlIGZyYW1lIHBvaW50ZXIgb3Igc3RhY2sgcG9pbnRlci4gCitVc2Ugb2YgdGhpcyBmbGFnIGZvciBvdGhlciByZWdpc3RlcnMgdGhhdCBoYXZlIGZpeGVkIHBlcnZhc2l2ZSByb2xlcyBpbgordGhlIG1hY2hpbmUncyBleGVjdXRpb24gbW9kZWwgcHJvZHVjZXMgZGlzYXN0cm91cyByZXN1bHRzLgorCisgICAgIDxwPkEgZGlmZmVyZW50IHNvcnQgb2YgZGlzYXN0ZXIgcmVzdWx0cyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBmbGFnIGZvcgorYSByZWdpc3RlciBpbiB3aGljaCBmdW5jdGlvbiB2YWx1ZXMgbWF5IGJlIHJldHVybmVkLgorCisgICAgIDxwPlRoaXMgZmxhZyBkb2VzIG5vdCBoYXZlIGEgbmVnYXRpdmUgZm9ybSwgYmVjYXVzZSBpdCBzcGVjaWZpZXMgYQordGhyZWUtd2F5IGNob2ljZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcGFjay1zdHJ1Y3RbPTwvY29kZT48dmFyPm48L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcGFja18wMDJkc3RydWN0LTIzNTUiPjwvYT5XaXRob3V0IGEgdmFsdWUgc3BlY2lmaWVkLCBwYWNrIGFsbCBzdHJ1Y3R1cmUgbWVtYmVycyB0b2dldGhlciB3aXRob3V0Citob2xlcy4gIFdoZW4gYSB2YWx1ZSBpcyBzcGVjaWZpZWQgKHdoaWNoIG11c3QgYmUgYSBzbWFsbCBwb3dlciBvZiB0d28pLCBwYWNrCitzdHJ1Y3R1cmUgbWVtYmVycyBhY2NvcmRpbmcgdG8gdGhpcyB2YWx1ZSwgcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtCithbGlnbm1lbnQgKHRoYXQgaXMsIG9iamVjdHMgd2l0aCBkZWZhdWx0IGFsaWdubWVudCByZXF1aXJlbWVudHMgbGFyZ2VyIHRoYW4KK3RoaXMgYXJlIG91dHB1dCBwb3RlbnRpYWxseSB1bmFsaWduZWQgYXQgdGhlIG5leHQgZml0dGluZyBsb2NhdGlvbi4KKworICAgICA8cD48c3Ryb25nPldhcm5pbmc6PC9zdHJvbmc+IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBhY2stc3RydWN0PC9zcGFuPjwvc2FtcD4gc3dpdGNoIGNhdXNlcyBHQ0MgdG8gZ2VuZXJhdGUKK2NvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQgc3dpdGNoLiAKK0FkZGl0aW9uYWxseSwgaXQgbWFrZXMgdGhlIGNvZGUgc3Vib3B0aW1hbC4gCitVc2UgaXQgdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmluc3RydW1lbnQtZnVuY3Rpb25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maW5zdHJ1bWVudF8wMDJkZnVuY3Rpb25zLTIzNTYiPjwvYT5HZW5lcmF0ZSBpbnN0cnVtZW50YXRpb24gY2FsbHMgZm9yIGVudHJ5IGFuZCBleGl0IHRvIGZ1bmN0aW9ucy4gIEp1c3QKK2FmdGVyIGZ1bmN0aW9uIGVudHJ5IGFuZCBqdXN0IGJlZm9yZSBmdW5jdGlvbiBleGl0LCB0aGUgZm9sbG93aW5nCitwcm9maWxpbmcgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudAorZnVuY3Rpb24gYW5kIGl0cyBjYWxsIHNpdGUuICAoT24gc29tZSBwbGF0Zm9ybXMsCis8Y29kZT5fX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3M8L2NvZGU+IGRvZXMgbm90IHdvcmsgYmV5b25kIHRoZSBjdXJyZW50CitmdW5jdGlvbiwgc28gdGhlIGNhbGwgc2l0ZSBpbmZvcm1hdGlvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB0aGUKK3Byb2ZpbGluZyBmdW5jdGlvbnMgb3RoZXJ3aXNlLikKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB2b2lkIF9fY3lnX3Byb2ZpbGVfZnVuY19lbnRlciAodm9pZCAqdGhpc19mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbF9zaXRlKTsKKyAgICAgICAgICB2b2lkIF9fY3lnX3Byb2ZpbGVfZnVuY19leGl0ICAodm9pZCAqdGhpc19mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbF9zaXRlKTsKKzwvcHJlPgorICAgICA8cD5UaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLAord2hpY2ggbWF5IGJlIGxvb2tlZCB1cCBleGFjdGx5IGluIHRoZSBzeW1ib2wgdGFibGUuCisKKyAgICAgPHA+VGhpcyBpbnN0cnVtZW50YXRpb24gaXMgYWxzbyBkb25lIGZvciBmdW5jdGlvbnMgZXhwYW5kZWQgaW5saW5lIGluIG90aGVyCitmdW5jdGlvbnMuICBUaGUgcHJvZmlsaW5nIGNhbGxzIGluZGljYXRlIHdoZXJlLCBjb25jZXB0dWFsbHksIHRoZQoraW5saW5lIGZ1bmN0aW9uIGlzIGVudGVyZWQgYW5kIGV4aXRlZC4gIFRoaXMgbWVhbnMgdGhhdCBhZGRyZXNzYWJsZQordmVyc2lvbnMgb2Ygc3VjaCBmdW5jdGlvbnMgbXVzdCBiZSBhdmFpbGFibGUuICBJZiBhbGwgeW91ciB1c2VzIG9mIGEKK2Z1bmN0aW9uIGFyZSBleHBhbmRlZCBpbmxpbmUsIHRoaXMgbWF5IG1lYW4gYW4gYWRkaXRpb25hbCBleHBhbnNpb24gb2YKK2NvZGUgc2l6ZS4gIElmIHlvdSB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5leHRlcm4gaW5saW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIHlvdXIgQyBjb2RlLCBhbgorYWRkcmVzc2FibGUgdmVyc2lvbiBvZiBzdWNoIGZ1bmN0aW9ucyBtdXN0IGJlIHByb3ZpZGVkLiAgKFRoaXMgaXMKK25vcm1hbGx5IHRoZSBjYXNlIGFueXdheSwgYnV0IGlmIHlvdSBnZXQgbHVja3kgYW5kIHRoZSBvcHRpbWl6ZXIgYWx3YXlzCitleHBhbmRzIHRoZSBmdW5jdGlvbnMgaW5saW5lLCB5b3UgbWlnaHQgaGF2ZSBnb3R0ZW4gYXdheSB3aXRob3V0Citwcm92aWRpbmcgc3RhdGljIGNvcGllcy4pCisKKyAgICAgPHA+QSBmdW5jdGlvbiBtYXkgYmUgZ2l2ZW4gdGhlIGF0dHJpYnV0ZSA8Y29kZT5ub19pbnN0cnVtZW50X2Z1bmN0aW9uPC9jb2RlPiwgaW4KK3doaWNoIGNhc2UgdGhpcyBpbnN0cnVtZW50YXRpb24gaXMgbm90IGRvbmUuICBUaGlzIGNhbiBiZSB1c2VkLCBmb3IKK2V4YW1wbGUsIGZvciB0aGUgcHJvZmlsaW5nIGZ1bmN0aW9ucyBsaXN0ZWQgYWJvdmUsIGhpZ2gtcHJpb3JpdHkKK2ludGVycnVwdCByb3V0aW5lcywgYW5kIGFueSBmdW5jdGlvbnMgZnJvbSB3aGljaCB0aGUgcHJvZmlsaW5nIGZ1bmN0aW9ucworY2Fubm90IHNhZmVseSBiZSBjYWxsZWQgKHBlcmhhcHMgc2lnbmFsIGhhbmRsZXJzLCBpZiB0aGUgcHJvZmlsaW5nCityb3V0aW5lcyBnZW5lcmF0ZSBvdXRwdXQgb3IgYWxsb2NhdGUgbWVtb3J5KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maW5zdHJ1bWVudC1mdW5jdGlvbnMtZXhjbHVkZS1maWxlLWxpc3Q9PC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+LC4uLjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmluc3RydW1lbnRfMDAyZGZ1bmN0aW9uc18wMDJkZXhjbHVkZV8wMDJkZmlsZV8wMDJkbGlzdC0yMzU3Ij48L2E+CitTZXQgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gaW5zdHJ1bWVudGF0aW9uIChzZWUKK3RoZSBkZXNjcmlwdGlvbiBvZiA8Y29kZT4tZmluc3RydW1lbnQtZnVuY3Rpb25zPC9jb2RlPikuICBJZiB0aGUgZmlsZSB0aGF0Citjb250YWlucyBhIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF0Y2hlcyB3aXRoIG9uZSBvZiA8dmFyPmZpbGU8L3Zhcj4sIHRoZW4KK3RoYXQgZnVuY3Rpb24gaXMgbm90IGluc3RydW1lbnRlZC4gIFRoZSBtYXRjaCBpcyBkb25lIG9uIHN1YnN0cmluZ3M6CitpZiB0aGUgPHZhcj5maWxlPC92YXI+IHBhcmFtZXRlciBpcyBhIHN1YnN0cmluZyBvZiB0aGUgZmlsZSBuYW1lLCBpdCBpcworY29uc2lkZXJlZCB0byBiZSBhIG1hdGNoLgorCisgICAgIDxwPkZvciBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1maW5zdHJ1bWVudC1mdW5jdGlvbnMtZXhjbHVkZS1maWxlLWxpc3Q9L2JpdHMvc3RsLGluY2x1ZGUvc3lzCis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5leGNsdWRlcyBhbnkgaW5saW5lIGZ1bmN0aW9uIGRlZmluZWQgaW4gZmlsZXMgd2hvc2UgcGF0aG5hbWVzCitjb250YWluIDxjb2RlPi9iaXRzL3N0bDwvY29kZT4gb3IgPGNvZGU+aW5jbHVkZS9zeXM8L2NvZGU+LgorCisgICAgIDxwPklmLCBmb3Igc29tZSByZWFzb24sIHlvdSB3YW50IHRvIGluY2x1ZGUgbGV0dGVyIDxjb2RlPicsJzwvY29kZT4gaW4gb25lIG9mCis8dmFyPnN5bTwvdmFyPiwgd3JpdGUgPGNvZGU+J1wsJzwvY29kZT4uIEZvciBleGFtcGxlLAorPGNvZGU+LWZpbnN0cnVtZW50LWZ1bmN0aW9ucy1leGNsdWRlLWZpbGUtbGlzdD0nXCxcLHRtcCc8L2NvZGU+Cisobm90ZSB0aGUgc2luZ2xlIHF1b3RlIHN1cnJvdW5kaW5nIHRoZSBvcHRpb24pLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpbnN0cnVtZW50LWZ1bmN0aW9ucy1leGNsdWRlLWZ1bmN0aW9uLWxpc3Q9PC9jb2RlPjx2YXI+c3ltPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPnN5bTwvdmFyPjxjb2RlPiwuLi48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZpbnN0cnVtZW50XzAwMmRmdW5jdGlvbnNfMDAyZGV4Y2x1ZGVfMDAyZGZ1bmN0aW9uXzAwMmRsaXN0LTIzNTgiPjwvYT4KK1RoaXMgaXMgc2ltaWxhciB0byA8Y29kZT4tZmluc3RydW1lbnQtZnVuY3Rpb25zLWV4Y2x1ZGUtZmlsZS1saXN0PC9jb2RlPiwKK2J1dCB0aGlzIG9wdGlvbiBzZXRzIHRoZSBsaXN0IG9mIGZ1bmN0aW9uIG5hbWVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20KK2luc3RydW1lbnRhdGlvbi4gIFRoZSBmdW5jdGlvbiBuYW1lIHRvIGJlIG1hdGNoZWQgaXMgaXRzIHVzZXItdmlzaWJsZQorbmFtZSwgc3VjaCBhcyA8Y29kZT52ZWN0b3ImbHQ7aW50Jmd0OyBibGFoKGNvbnN0IHZlY3RvciZsdDtpbnQmZ3Q7ICZhbXA7KTwvY29kZT4sIG5vdCB0aGUKK2ludGVybmFsIG1hbmdsZWQgbmFtZSAoZS5nLiwgPGNvZGU+X1o0YmxhaFJTdDZ2ZWN0b3JJaVNhSWlFRTwvY29kZT4pLiAgVGhlCittYXRjaCBpcyBkb25lIG9uIHN1YnN0cmluZ3M6IGlmIHRoZSA8dmFyPnN5bTwvdmFyPiBwYXJhbWV0ZXIgaXMgYSBzdWJzdHJpbmcKK29mIHRoZSBmdW5jdGlvbiBuYW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGEgbWF0Y2guICBGb3IgQzk5IGFuZCBDKysKK2V4dGVuZGVkIGlkZW50aWZpZXJzLCB0aGUgZnVuY3Rpb24gbmFtZSBtdXN0IGJlIGdpdmVuIGluIFVURi04LCBub3QKK3VzaW5nIHVuaXZlcnNhbCBjaGFyYWN0ZXIgbmFtZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnN0YWNrLWNoZWNrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc3RhY2tfMDAyZGNoZWNrLTIzNTkiPjwvYT5HZW5lcmF0ZSBjb2RlIHRvIHZlcmlmeSB0aGF0IHlvdSBkbyBub3QgZ28gYmV5b25kIHRoZSBib3VuZGFyeSBvZiB0aGUKK3N0YWNrLiAgWW91IHNob3VsZCBzcGVjaWZ5IHRoaXMgZmxhZyBpZiB5b3UgYXJlIHJ1bm5pbmcgaW4gYW4KK2Vudmlyb25tZW50IHdpdGggbXVsdGlwbGUgdGhyZWFkcywgYnV0IHlvdSBvbmx5IHJhcmVseSBuZWVkIHRvIHNwZWNpZnkgaXQgaW4KK2Egc2luZ2xlLXRocmVhZGVkIGVudmlyb25tZW50IHNpbmNlIHN0YWNrIG92ZXJmbG93IGlzIGF1dG9tYXRpY2FsbHkKK2RldGVjdGVkIG9uIG5lYXJseSBhbGwgc3lzdGVtcyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzdGFjay4KKworICAgICA8cD5Ob3RlIHRoYXQgdGhpcyBzd2l0Y2ggZG9lcyBub3QgYWN0dWFsbHkgY2F1c2UgY2hlY2tpbmcgdG8gYmUgZG9uZTsgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9yIHRoZSBsYW5ndWFnZSBydW50aW1lIG11c3QgZG8gdGhhdC4gIFRoZSBzd2l0Y2ggY2F1c2VzCitnZW5lcmF0aW9uIG9mIGNvZGUgdG8gZW5zdXJlIHRoYXQgdGhleSBzZWUgdGhlIHN0YWNrIGJlaW5nIGV4dGVuZGVkLgorCisgICAgIDxwPllvdSBjYW4gYWRkaXRpb25hbGx5IHNwZWNpZnkgYSBzdHJpbmcgcGFyYW1ldGVyOiA8Y29kZT5ubzwvY29kZT4gbWVhbnMgbm8KK2NoZWNraW5nLCA8Y29kZT5nZW5lcmljPC9jb2RlPiBtZWFucyBmb3JjZSB0aGUgdXNlIG9mIG9sZC1zdHlsZSBjaGVja2luZywKKzxjb2RlPnNwZWNpZmljPC9jb2RlPiBtZWFucyB1c2UgdGhlIGJlc3QgY2hlY2tpbmcgbWV0aG9kIGFuZCBpcyBlcXVpdmFsZW50Cit0byBiYXJlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc3RhY2stY2hlY2s8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5PbGQtc3R5bGUgY2hlY2tpbmcgaXMgYSBnZW5lcmljIG1lY2hhbmlzbSB0aGF0IHJlcXVpcmVzIG5vIHNwZWNpZmljCit0YXJnZXQgc3VwcG9ydCBpbiB0aGUgY29tcGlsZXIgYnV0IGNvbWVzIHdpdGggdGhlIGZvbGxvd2luZyBkcmF3YmFja3M6CisKKyAgICAgICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+TW9kaWZpZWQgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgbGFyZ2Ugb2JqZWN0czogdGhleSBhcmUgYWx3YXlzCithbGxvY2F0ZWQgZHluYW1pY2FsbHkgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGEgZml4ZWQgdGhyZXNob2xkLgorCisgICAgICAgICAgPGxpPkZpeGVkIGxpbWl0IG9uIHRoZSBzaXplIG9mIHRoZSBzdGF0aWMgZnJhbWUgb2YgZnVuY3Rpb25zOiB3aGVuIGl0IGlzCit0b3BwZWQgYnkgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBzdGFjayBjaGVja2luZyBpcyBub3QgcmVsaWFibGUgYW5kCithIHdhcm5pbmcgaXMgaXNzdWVkIGJ5IHRoZSBjb21waWxlci4KKworICAgICAgICAgIDxsaT5JbmVmZmljaWVuY3k6IGJlY2F1c2Ugb2YgYm90aCB0aGUgbW9kaWZpZWQgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgdGhlCitnZW5lcmljIGltcGxlbWVudGF0aW9uLCBjb2RlIHBlcmZvcm1hbmNlIGlzIGhhbXBlcmVkLgorICAgICAgICAgIDwvb2w+CisKKyAgICAgPHA+Tm90ZSB0aGF0IG9sZC1zdHlsZSBzdGFjayBjaGVja2luZyBpcyBhbHNvIHRoZSBmYWxsYmFjayBtZXRob2QgZm9yCis8Y29kZT5zcGVjaWZpYzwvY29kZT4gaWYgbm8gdGFyZ2V0IHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgaW4gdGhlIGNvbXBpbGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzdGFjay1saW1pdC1yZWdpc3Rlcj08L2NvZGU+PHZhcj5yZWc8L3Zhcj48ZHQ+PGNvZGU+LWZzdGFjay1saW1pdC1zeW1ib2w9PC9jb2RlPjx2YXI+c3ltPC92YXI+PGR0Pjxjb2RlPi1mbm8tc3RhY2stbGltaXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzdGFja18wMDJkbGltaXRfMDAyZHJlZ2lzdGVyLTIzNjAiPjwvYT48YSBuYW1lPSJpbmRleC1mc3RhY2tfMDAyZGxpbWl0XzAwMmRzeW1ib2wtMjM2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWZub18wMDJkc3RhY2tfMDAyZGxpbWl0LTIzNjIiPjwvYT5HZW5lcmF0ZSBjb2RlIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFjayBkb2VzIG5vdCBncm93IGJleW9uZCBhIGNlcnRhaW4gdmFsdWUsCitlaXRoZXIgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgb3IgdGhlIGFkZHJlc3Mgb2YgYSBzeW1ib2wuICBJZiBhIGxhcmdlcgorc3RhY2sgaXMgcmVxdWlyZWQsIGEgc2lnbmFsIGlzIHJhaXNlZCBhdCBydW4gdGltZS4gIEZvciBtb3N0IHRhcmdldHMsCit0aGUgc2lnbmFsIGlzIHJhaXNlZCBiZWZvcmUgdGhlIHN0YWNrIG92ZXJydW5zIHRoZSBib3VuZGFyeSwgc28KK2l0IGlzIHBvc3NpYmxlIHRvIGNhdGNoIHRoZSBzaWduYWwgd2l0aG91dCB0YWtpbmcgc3BlY2lhbCBwcmVjYXV0aW9ucy4KKworICAgICA8cD5Gb3IgaW5zdGFuY2UsIGlmIHRoZSBzdGFjayBzdGFydHMgYXQgYWJzb2x1dGUgYWRkcmVzcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4ODAwMDAwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCBncm93cyBkb3dud2FyZHMsIHlvdSBjYW4gdXNlIHRoZSBmbGFncworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzdGFjay1saW1pdC1zeW1ib2w9X19zdGFja19saW1pdDwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdsLC0tZGVmc3ltLF9fc3RhY2tfbGltaXQ9MHg3ZmZlMDAwMDwvc3Bhbj48L3NhbXA+IHRvIGVuZm9yY2UgYSBzdGFjayBsaW1pdAorb2YgMTI4S0IuICBOb3RlIHRoYXQgdGhpcyBtYXkgb25seSB3b3JrIHdpdGggdGhlIEdOVSBsaW5rZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNwbGl0LXN0YWNrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc3BsaXRfMDAyZHN0YWNrLTIzNjMiPjwvYT5HZW5lcmF0ZSBjb2RlIHRvIGF1dG9tYXRpY2FsbHkgc3BsaXQgdGhlIHN0YWNrIGJlZm9yZSBpdCBvdmVyZmxvd3MuIAorVGhlIHJlc3VsdGluZyBwcm9ncmFtIGhhcyBhIGRpc2NvbnRpZ3VvdXMgc3RhY2sgd2hpY2ggY2FuIG9ubHkKK292ZXJmbG93IGlmIHRoZSBwcm9ncmFtIGlzIHVuYWJsZSB0byBhbGxvY2F0ZSBhbnkgbW9yZSBtZW1vcnkuICBUaGlzCitpcyBtb3N0IHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhyZWFkZWQgcHJvZ3JhbXMsIGFzIGl0IGlzIG5vIGxvbmdlcgorbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBhIGdvb2Qgc3RhY2sgc2l6ZSB0byB1c2UgZm9yIGVhY2ggdGhyZWFkLiAgVGhpcworaXMgY3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBpMzg2IGFuZCB4ODZfNjQgYmFjayBlbmRzIHJ1bm5pbmcKK0dOVS9MaW51eC4KKworICAgICA8cD5XaGVuIGNvZGUgY29tcGlsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNwbGl0LXN0YWNrPC9zcGFuPjwvc2FtcD4gY2FsbHMgY29kZSBjb21waWxlZAord2l0aG91dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNwbGl0LXN0YWNrPC9zcGFuPjwvc2FtcD4sIHRoZXJlIG1heSBub3QgYmUgbXVjaCBzdGFjayBzcGFjZQorYXZhaWxhYmxlIGZvciB0aGUgbGF0dGVyIGNvZGUgdG8gcnVuLiAgSWYgY29tcGlsaW5nIGFsbCBjb2RlLAoraW5jbHVkaW5nIGxpYnJhcnkgY29kZSwgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNwbGl0LXN0YWNrPC9zcGFuPjwvc2FtcD4gaXMgbm90IGFuIG9wdGlvbiwKK3RoZW4gdGhlIGxpbmtlciBjYW4gZml4IHVwIHRoZXNlIGNhbGxzIHNvIHRoYXQgdGhlIGNvZGUgY29tcGlsZWQKK3dpdGhvdXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzcGxpdC1zdGFjazwvc3Bhbj48L3NhbXA+IGFsd2F5cyBoYXMgYSBsYXJnZSBzdGFjay4gIFN1cHBvcnQgZm9yCit0aGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBnb2xkIGxpbmtlciBpbiBHTlUgYmludXRpbHMgcmVsZWFzZSAyLjIxCithbmQgbGF0ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmxlYWRpbmctdW5kZXJzY29yZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmxlYWRpbmdfMDAyZHVuZGVyc2NvcmUtMjM2NCI+PC9hPlRoaXMgb3B0aW9uIGFuZCBpdHMgY291bnRlcnBhcnQsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tbGVhZGluZy11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD4sIGZvcmNpYmx5CitjaGFuZ2UgdGhlIHdheSBDIHN5bWJvbHMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBvYmplY3QgZmlsZS4gIE9uZSB1c2UKK2lzIHRvIGhlbHAgbGluayB3aXRoIGxlZ2FjeSBhc3NlbWJseSBjb2RlLgorCisgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbGVhZGluZy11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGNhdXNlcyBHQ0MgdG8KK2dlbmVyYXRlIGNvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQKK3N3aXRjaC4gIFVzZSBpdCB0byBjb25mb3JtIHRvIGEgbm9uLWRlZmF1bHQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4gCitOb3QgYWxsIHRhcmdldHMgcHJvdmlkZSBjb21wbGV0ZSBzdXBwb3J0IGZvciB0aGlzIHN3aXRjaC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdGxzLW1vZGVsPTwvY29kZT48dmFyPm1vZGVsPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZ0bHNfMDAyZG1vZGVsLTIzNjUiPjwvYT5BbHRlciB0aGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgbW9kZWwgdG8gYmUgdXNlZCAoc2VlIDxhIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIj5UaHJlYWQtTG9jYWw8L2E+KS4gCitUaGUgPHZhcj5tb2RlbDwvdmFyPiBhcmd1bWVudCBzaG91bGQgYmUgb25lIG9mIDxjb2RlPmdsb2JhbC1keW5hbWljPC9jb2RlPiwKKzxjb2RlPmxvY2FsLWR5bmFtaWM8L2NvZGU+LCA8Y29kZT5pbml0aWFsLWV4ZWM8L2NvZGU+IG9yIDxjb2RlPmxvY2FsLWV4ZWM8L2NvZGU+LgorCisgICAgIDxwPlRoZSBkZWZhdWx0IHdpdGhvdXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwaWM8L3NwYW4+PC9zYW1wPiBpcyA8Y29kZT5pbml0aWFsLWV4ZWM8L2NvZGU+OyB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBpYzwvc3Bhbj48L3NhbXA+IHRoZSBkZWZhdWx0IGlzIDxjb2RlPmdsb2JhbC1keW5hbWljPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdmlzaWJpbGl0eT08L2NvZGU+PHZhcj5kZWZhdWx0fGludGVybmFsfGhpZGRlbnxwcm90ZWN0ZWQ8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZnZpc2liaWxpdHktMjM2NiI+PC9hPlNldCB0aGUgZGVmYXVsdCBFTEYgaW1hZ2Ugc3ltYm9sIHZpc2liaWxpdHkgdG8gdGhlIHNwZWNpZmllZCBvcHRpb24mbWRhc2g7YWxsCitzeW1ib2xzIGFyZSBtYXJrZWQgd2l0aCB0aGlzIHVubGVzcyBvdmVycmlkZGVuIHdpdGhpbiB0aGUgY29kZS4gCitVc2luZyB0aGlzIGZlYXR1cmUgY2FuIHZlcnkgc3Vic3RhbnRpYWxseSBpbXByb3ZlIGxpbmtpbmcgYW5kCitsb2FkIHRpbWVzIG9mIHNoYXJlZCBvYmplY3QgbGlicmFyaWVzLCBwcm9kdWNlIG1vcmUgb3B0aW1pemVkCitjb2RlLCBwcm92aWRlIG5lYXItcGVyZmVjdCBBUEkgZXhwb3J0IGFuZCBwcmV2ZW50IHN5bWJvbCBjbGFzaGVzLiAKK0l0IGlzIDxzdHJvbmc+c3Ryb25nbHk8L3N0cm9uZz4gcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoaXMgaW4gYW55IHNoYXJlZCBvYmplY3RzCit5b3UgZGlzdHJpYnV0ZS4KKworICAgICA8cD5EZXNwaXRlIHRoZSBub21lbmNsYXR1cmUsIDxjb2RlPmRlZmF1bHQ8L2NvZGU+IGFsd2F5cyBtZWFucyBwdWJsaWM7IGkuZS4sCithdmFpbGFibGUgdG8gYmUgbGlua2VkIGFnYWluc3QgZnJvbSBvdXRzaWRlIHRoZSBzaGFyZWQgb2JqZWN0LiAKKzxjb2RlPnByb3RlY3RlZDwvY29kZT4gYW5kIDxjb2RlPmludGVybmFsPC9jb2RlPiBhcmUgcHJldHR5IHVzZWxlc3MgaW4gcmVhbC13b3JsZAordXNhZ2Ugc28gdGhlIG9ubHkgb3RoZXIgY29tbW9ubHkgdXNlZCBvcHRpb24gaXMgPGNvZGU+aGlkZGVuPC9jb2RlPi4gCitUaGUgZGVmYXVsdCBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnZpc2liaWxpdHk8L3NwYW4+PC9zYW1wPiBpc24ndCBzcGVjaWZpZWQgaXMKKzxjb2RlPmRlZmF1bHQ8L2NvZGU+LCBpLmUuLCBtYWtlIGV2ZXJ5CitzeW1ib2wgcHVibGljJm1kYXNoO3RoaXMgY2F1c2VzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIHByZXZpb3VzIHZlcnNpb25zIG9mCitHQ0MuCisKKyAgICAgPHA+QSBnb29kIGV4cGxhbmF0aW9uIG9mIHRoZSBiZW5lZml0cyBvZmZlcmVkIGJ5IGVuc3VyaW5nIEVMRgorc3ltYm9scyBoYXZlIHRoZSBjb3JyZWN0IHZpc2liaWxpdHkgaXMgZ2l2ZW4gYnkgJmxkcXVvO0hvdyBUbyBXcml0ZQorU2hhcmVkIExpYnJhcmllcyZyZHF1bzsgYnkgVWxyaWNoIERyZXBwZXIgKHdoaWNoIGNhbiBiZSBmb3VuZCBhdAorPGEgaHJlZj0iaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL35kcmVwcGVyLyI+aHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL35kcmVwcGVyLzwvYT48IS0tIC9AdyAtLT4pJm1kYXNoO2hvd2V2ZXIgYSBzdXBlcmlvcgorc29sdXRpb24gbWFkZSBwb3NzaWJsZSBieSB0aGlzIG9wdGlvbiB0byBtYXJraW5nIHRoaW5ncyBoaWRkZW4gd2hlbgordGhlIGRlZmF1bHQgaXMgcHVibGljIGlzIHRvIG1ha2UgdGhlIGRlZmF1bHQgaGlkZGVuIGFuZCBtYXJrIHRoaW5ncworcHVibGljLiAgVGhpcyBpcyB0aGUgbm9ybSB3aXRoIERMTHMgb24gV2luZG93cyBhbmQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnZpc2liaWxpdHk9aGlkZGVuPC9zcGFuPjwvc2FtcD4KK2FuZCA8Y29kZT5fX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk8L2NvZGU+IGluc3RlYWQgb2YKKzxjb2RlPl9fZGVjbHNwZWMoZGxsZXhwb3J0KTwvY29kZT4geW91IGdldCBhbG1vc3QgaWRlbnRpY2FsIHNlbWFudGljcyB3aXRoCitpZGVudGljYWwgc3ludGF4LiAgVGhpcyBpcyBhIGdyZWF0IGJvb24gdG8gdGhvc2Ugd29ya2luZyB3aXRoCitjcm9zcy1wbGF0Zm9ybSBwcm9qZWN0cy4KKworICAgICA8cD5Gb3IgdGhvc2UgYWRkaW5nIHZpc2liaWxpdHkgc3VwcG9ydCB0byBleGlzdGluZyBjb2RlLCB5b3UgbWF5IGZpbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvZiB1c2UuICBUaGlzIHdvcmtzIGJ5IHlvdSBlbmNsb3NpbmcKK3RoZSBkZWNsYXJhdGlvbnMgeW91IHdpc2ggdG8gc2V0IHZpc2liaWxpdHkgZm9yIHdpdGggKGZvciBleGFtcGxlKQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goaGlkZGVuKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorQmVhciBpbiBtaW5kIHRoYXQgc3ltYm9sIHZpc2liaWxpdHkgc2hvdWxkIGJlIHZpZXdlZCA8c3Ryb25nPmFzCitwYXJ0IG9mIHRoZSBBUEkgaW50ZXJmYWNlIGNvbnRyYWN0PC9zdHJvbmc+IGFuZCB0aHVzIGFsbCBuZXcgY29kZSBzaG91bGQKK2Fsd2F5cyBzcGVjaWZ5IHZpc2liaWxpdHkgd2hlbiBpdCBpcyBub3QgdGhlIGRlZmF1bHQ7IGkuZS4sIGRlY2xhcmF0aW9ucworb25seSBmb3IgdXNlIHdpdGhpbiB0aGUgbG9jYWwgRFNPIHNob3VsZCA8c3Ryb25nPmFsd2F5czwvc3Ryb25nPiBiZSBtYXJrZWQgZXhwbGljaXRseQorYXMgaGlkZGVuIGFzIHNvIHRvIGF2b2lkIFBMVCBpbmRpcmVjdGlvbiBvdmVyaGVhZHMmbWRhc2g7bWFraW5nIHRoaXMKK2FidW5kYW50bHkgY2xlYXIgYWxzbyBhaWRzIHJlYWRhYmlsaXR5IGFuZCBzZWxmLWRvY3VtZW50YXRpb24gb2YgdGhlIGNvZGUuIAorTm90ZSB0aGF0IGR1ZSB0byBJU08gQysrIHNwZWNpZmljYXRpb24gcmVxdWlyZW1lbnRzLCA8Y29kZT5vcGVyYXRvciBuZXc8L2NvZGU+IGFuZAorPGNvZGU+b3BlcmF0b3IgZGVsZXRlPC9jb2RlPiBtdXN0IGFsd2F5cyBiZSBvZiBkZWZhdWx0IHZpc2liaWxpdHkuCisKKyAgICAgPHA+QmUgYXdhcmUgdGhhdCBoZWFkZXJzIGZyb20gb3V0c2lkZSB5b3VyIHByb2plY3QsIGluIHBhcnRpY3VsYXIgc3lzdGVtCitoZWFkZXJzIGFuZCBoZWFkZXJzIGZyb20gYW55IG90aGVyIGxpYnJhcnkgeW91IHVzZSwgbWF5IG5vdCBiZQorZXhwZWN0aW5nIHRvIGJlIGNvbXBpbGVkIHdpdGggdmlzaWJpbGl0eSBvdGhlciB0aGFuIHRoZSBkZWZhdWx0LiAgWW91CittYXkgbmVlZCB0byBleHBsaWNpdGx5IHNheSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KTwvc3Bhbj48L3NhbXA+JnJzcXVvOworYmVmb3JlIGluY2x1ZGluZyBhbnkgc3VjaCBoZWFkZXJzLgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXh0ZXJuPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRlY2xhcmF0aW9ucyBhcmUgbm90IGFmZmVjdGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdmlzaWJpbGl0eTwvc3Bhbj48L3NhbXA+LCBzbworYSBsb3Qgb2YgY29kZSBjYW4gYmUgcmVjb21waWxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdmlzaWJpbGl0eT1oaWRkZW48L3NwYW4+PC9zYW1wPiB3aXRoCitubyBtb2RpZmljYXRpb25zLiAgSG93ZXZlciwgdGhpcyBtZWFucyB0aGF0IGNhbGxzIHRvIDxjb2RlPmV4dGVybjwvY29kZT4KK2Z1bmN0aW9ucyB3aXRoIG5vIGV4cGxpY2l0IHZpc2liaWxpdHkgdXNlIHRoZSBQTFQsIHNvIGl0IGlzIG1vcmUKK2VmZmVjdGl2ZSB0byB1c2UgPGNvZGU+X19hdHRyaWJ1dGUgKCh2aXNpYmlsaXR5KSk8L2NvZGU+IGFuZC9vcgorPGNvZGU+I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eTwvY29kZT4gdG8gdGVsbCB0aGUgY29tcGlsZXIgd2hpY2ggPGNvZGU+ZXh0ZXJuPC9jb2RlPgorZGVjbGFyYXRpb25zIHNob3VsZCBiZSB0cmVhdGVkIGFzIGhpZGRlbi4KKworICAgICA8cD5Ob3RlIHRoYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ2aXNpYmlsaXR5PC9zcGFuPjwvc2FtcD4gZG9lcyBhZmZlY3QgQysrIHZhZ3VlIGxpbmthZ2UKK2VudGl0aWVzLiBUaGlzIG1lYW5zIHRoYXQsIGZvciBpbnN0YW5jZSwgYW4gZXhjZXB0aW9uIGNsYXNzIHRoYXQgaXMKK2JlIHRocm93biBiZXR3ZWVuIERTT3MgbXVzdCBiZSBleHBsaWNpdGx5IG1hcmtlZCB3aXRoIGRlZmF1bHQKK3Zpc2liaWxpdHkgc28gdGhhdCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50eXBlX2luZm88L3NwYW4+PC9zYW1wPiZyc3F1bzsgbm9kZXMgYXJlIHVuaWZpZWQgYmV0d2VlbgordGhlIERTT3MuCisKKyAgICAgPHA+QW4gb3ZlcnZpZXcgb2YgdGhlc2UgdGVjaG5pcXVlcywgdGhlaXIgYmVuZWZpdHMgYW5kIGhvdyB0byB1c2UgdGhlbQoraXMgYXQgPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL3dpa2kvVmlzaWJpbGl0eSI+aHR0cDovL2djYy5nbnUub3JnL3dpa2kvVmlzaWJpbGl0eTwvYT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnN0cmljdC12b2xhdGlsZS1iaXRmaWVsZHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzdHJpY3RfMDAyZHZvbGF0aWxlXzAwMmRiaXRmaWVsZHMtMjM2NyI+PC9hPlRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIGlmIGFjY2Vzc2VzIHRvIHZvbGF0aWxlIGJpdC1maWVsZHMgKG9yIG90aGVyCitzdHJ1Y3R1cmUgZmllbGRzLCBhbHRob3VnaCB0aGUgY29tcGlsZXIgdXN1YWxseSBob25vcnMgdGhvc2UgdHlwZXMKK2FueXdheSkgc2hvdWxkIHVzZSBhIHNpbmdsZSBhY2Nlc3Mgb2YgdGhlIHdpZHRoIG9mIHRoZQorZmllbGQncyB0eXBlLCBhbGlnbmVkIHRvIGEgbmF0dXJhbCBhbGlnbm1lbnQgaWYgcG9zc2libGUuICBGb3IKK2V4YW1wbGUsIHRhcmdldHMgd2l0aCBtZW1vcnktbWFwcGVkIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIG1pZ2h0IHJlcXVpcmUKK2FsbCBzdWNoIGFjY2Vzc2VzIHRvIGJlIDE2IGJpdHMgd2lkZTsgd2l0aCB0aGlzIGZsYWcgeW91IGNhbgorZGVjbGFyZSBhbGwgcGVyaXBoZXJhbCBiaXQtZmllbGRzIGFzIDxjb2RlPnVuc2lnbmVkIHNob3J0PC9jb2RlPiAoYXNzdW1pbmcgc2hvcnQKK2lzIDE2IGJpdHMgb24gdGhlc2UgdGFyZ2V0cykgdG8gZm9yY2UgR0NDIHRvIHVzZSAxNi1iaXQgYWNjZXNzZXMKK2luc3RlYWQgb2YsIHBlcmhhcHMsIGEgbW9yZSBlZmZpY2llbnQgMzItYml0IGFjY2Vzcy4KKworICAgICA8cD5JZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCwgdGhlIGNvbXBpbGVyIHVzZXMgdGhlIG1vc3QgZWZmaWNpZW50CitpbnN0cnVjdGlvbi4gIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGF0IG1pZ2h0IGJlIGEgMzItYml0IGxvYWQKK2luc3RydWN0aW9uLCBldmVuIHRob3VnaCB0aGF0IGFjY2Vzc2VzIGJ5dGVzIHRoYXQgZG8gbm90IGNvbnRhaW4KK2FueSBwb3J0aW9uIG9mIHRoZSBiaXQtZmllbGQsIG9yIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIHVucmVsYXRlZCB0bwordGhlIG9uZSBiZWluZyB1cGRhdGVkLgorCisgICAgIDxwPklmIHRoZSB0YXJnZXQgcmVxdWlyZXMgc3RyaWN0IGFsaWdubWVudCwgYW5kIGhvbm9yaW5nIHRoZSBmaWVsZAordHlwZSB3b3VsZCByZXF1aXJlIHZpb2xhdGluZyB0aGlzIGFsaWdubWVudCwgYSB3YXJuaW5nIGlzIGlzc3VlZC4gCitJZiB0aGUgZmllbGQgaGFzIDxjb2RlPnBhY2tlZDwvY29kZT4gYXR0cmlidXRlLCB0aGUgYWNjZXNzIGlzIGRvbmUgd2l0aG91dAoraG9ub3JpbmcgdGhlIGZpZWxkIHR5cGUuICBJZiB0aGUgZmllbGQgZG9lc24ndCBoYXZlIDxjb2RlPnBhY2tlZDwvY29kZT4KK2F0dHJpYnV0ZSwgdGhlIGFjY2VzcyBpcyBkb25lIGhvbm9yaW5nIHRoZSBmaWVsZCB0eXBlLiAgSW4gYm90aCBjYXNlcywKK0dDQyBhc3N1bWVzIHRoYXQgdGhlIHVzZXIga25vd3Mgc29tZXRoaW5nIGFib3V0IHRoZSB0YXJnZXQgaGFyZHdhcmUKK3RoYXQgaXQgaXMgdW5hd2FyZSBvZi4KKworICAgICA8cD5UaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBiaW5hcnkKK2ludGVyZmFjZSBmb3IgdGhlIHRhcmdldCBwcm9jZXNzb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnN5bmMtbGliY2FsbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzeW5jXzAwMmRsaWJjYWxscy0yMzY4Ij48L2E+VGhpcyBvcHRpb24gY29udHJvbHMgd2hldGhlciBhbnkgb3V0LW9mLWxpbmUgaW5zdGFuY2Ugb2YgdGhlIDxjb2RlPl9fc3luYzwvY29kZT4KK2ZhbWlseSBvZiBmdW5jdGlvbnMgbWF5IGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBDKysxMSA8Y29kZT5fX2F0b21pYzwvY29kZT4KK2ZhbWlseSBvZiBmdW5jdGlvbnMuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGh1cyB0aGUgb25seSB1c2VmdWwgZm9ybQorb2YgdGhlIG9wdGlvbiBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXN5bmMtbGliY2FsbHM8L3NwYW4+PC9zYW1wPi4gIFRoaXMgb3B0aW9uIGlzIHVzZWQgaW4KK3RoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmF0b21pYzwvc3Bhbj48L3NhbXA+IHJ1bnRpbWUgbGlicmFyeS4KKworIDwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbXBhdGliaWxpdHkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29tcGF0aWJpbGl0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGZjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbXBhdGliaWxpdHkuaHRtbApAQCAtMCwwICsxLDE4OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29tcGF0aWJpbGl0eSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy5odG1sI09iamVjdGl2ZV8wMDJkQyIgdGl0bGU9Ik9iamVjdGl2ZS1DIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR2Nvdi5odG1sI0djb3YiIHRpdGxlPSJHY292Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvbXBhdGliaWxpdHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR2Nvdi5odG1sI0djb3YiPkdjb3Y8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPYmplY3RpdmVfMDAyZEMuaHRtbCNPYmplY3RpdmVfMDAyZEMiPk9iamVjdGl2ZS1DPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjkgQmluYXJ5IENvbXBhdGliaWxpdHk8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1iaW5hcnktY29tcGF0aWJpbGl0eS0zNTMwIj48L2E+PGEgbmFtZT0iaW5kZXgtQUJJLTM1MzEiPjwvYT48YSBuYW1lPSJpbmRleC1hcHBsaWNhdGlvbi1iaW5hcnktaW50ZXJmYWNlLTM1MzIiPjwvYT4KK0JpbmFyeSBjb21wYXRpYmlsaXR5IGVuY29tcGFzc2VzIHNldmVyYWwgcmVsYXRlZCBjb25jZXB0czoKKworICAgICA8ZGw+Cis8ZHQ+PGRmbj5hcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlIChBQkkpPC9kZm4+PGRkPlRoZSBzZXQgb2YgcnVudGltZSBjb252ZW50aW9ucyBmb2xsb3dlZCBieSBhbGwgb2YgdGhlIHRvb2xzIHRoYXQgZGVhbAord2l0aCBiaW5hcnkgcmVwcmVzZW50YXRpb25zIG9mIGEgcHJvZ3JhbSwgaW5jbHVkaW5nIGNvbXBpbGVycywgYXNzZW1ibGVycywKK2xpbmtlcnMsIGFuZCBsYW5ndWFnZSBydW50aW1lIHN1cHBvcnQuIAorU29tZSBBQklzIGFyZSBmb3JtYWwgd2l0aCBhIHdyaXR0ZW4gc3BlY2lmaWNhdGlvbiwgcG9zc2libHkgZGVzaWduZWQKK2J5IG11bHRpcGxlIGludGVyZXN0ZWQgcGFydGllcy4gIE90aGVycyBhcmUgc2ltcGx5IHRoZSB3YXkgdGhpbmdzIGFyZQorYWN0dWFsbHkgZG9uZSBieSBhIHBhcnRpY3VsYXIgc2V0IG9mIHRvb2xzLgorCisgICAgIDxicj48ZHQ+PGRmbj5BQkkgY29uZm9ybWFuY2U8L2Rmbj48ZGQ+QSBjb21waWxlciBjb25mb3JtcyB0byBhbiBBQkkgaWYgaXQgZ2VuZXJhdGVzIGNvZGUgdGhhdCBmb2xsb3dzIGFsbCBvZgordGhlIHNwZWNpZmljYXRpb25zIGVudW1lcmF0ZWQgYnkgdGhhdCBBQkkuIAorQSBsaWJyYXJ5IGNvbmZvcm1zIHRvIGFuIEFCSSBpZiBpdCBpcyBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhhdCBBQkkuIAorQW4gYXBwbGljYXRpb24gY29uZm9ybXMgdG8gYW4gQUJJIGlmIGl0IGlzIGJ1aWx0IHVzaW5nIHRvb2xzIHRoYXQgY29uZm9ybQordG8gdGhhdCBBQkkgYW5kIGRvZXMgbm90IGNvbnRhaW4gc291cmNlIGNvZGUgdGhhdCBzcGVjaWZpY2FsbHkgY2hhbmdlcworYmVoYXZpb3Igc3BlY2lmaWVkIGJ5IHRoZSBBQkkuCisKKyAgICAgPGJyPjxkdD48ZGZuPmNhbGxpbmcgY29udmVudGlvbnM8L2Rmbj48ZGQ+Q2FsbGluZyBjb252ZW50aW9ucyBhcmUgYSBzdWJzZXQgb2YgYW4gQUJJIHRoYXQgc3BlY2lmeSBvZiBob3cgYXJndW1lbnRzCithcmUgcGFzc2VkIGFuZCBmdW5jdGlvbiByZXN1bHRzIGFyZSByZXR1cm5lZC4KKworICAgICA8YnI+PGR0PjxkZm4+aW50ZXJvcGVyYWJpbGl0eTwvZGZuPjxkZD5EaWZmZXJlbnQgc2V0cyBvZiB0b29scyBhcmUgaW50ZXJvcGVyYWJsZSBpZiB0aGV5IGdlbmVyYXRlIGZpbGVzIHRoYXQKK2NhbiBiZSB1c2VkIGluIHRoZSBzYW1lIHByb2dyYW0uICBUaGUgc2V0IG9mIHRvb2xzIGluY2x1ZGVzIGNvbXBpbGVycywKK2Fzc2VtYmxlcnMsIGxpbmtlcnMsIGxpYnJhcmllcywgaGVhZGVyIGZpbGVzLCBzdGFydHVwIGZpbGVzLCBhbmQgZGVidWdnZXJzLiAKK0JpbmFyaWVzIHByb2R1Y2VkIGJ5IGRpZmZlcmVudCBzZXRzIG9mIHRvb2xzIGFyZSBub3QgaW50ZXJvcGVyYWJsZSB1bmxlc3MKK3RoZXkgaW1wbGVtZW50IHRoZSBzYW1lIEFCSS4gIFRoaXMgYXBwbGllcyB0byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlCitzYW1lIHRvb2xzIGFzIHdlbGwgYXMgdG9vbHMgZnJvbSBkaWZmZXJlbnQgdmVuZG9ycy4KKworICAgICA8YnI+PGR0PjxkZm4+aW50ZXJjYWxsYWJpbGl0eTwvZGZuPjxkZD5XaGV0aGVyIGEgZnVuY3Rpb24gaW4gYSBiaW5hcnkgYnVpbHQgYnkgb25lIHNldCBvZiB0b29scyBjYW4gY2FsbCBhCitmdW5jdGlvbiBpbiBhIGJpbmFyeSBidWlsdCBieSBhIGRpZmZlcmVudCBzZXQgb2YgdG9vbHMgaXMgYSBzdWJzZXQKK29mIGludGVyb3BlcmFiaWxpdHkuCisKKyAgICAgPGJyPjxkdD48ZGZuPmltcGxlbWVudGF0aW9uLWRlZmluZWQgZmVhdHVyZXM8L2Rmbj48ZGQ+TGFuZ3VhZ2Ugc3RhbmRhcmRzIGluY2x1ZGUgbGlzdHMgb2YgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBmZWF0dXJlcyB3aG9zZQorYmVoYXZpb3IgY2FuIHZhcnkgZnJvbSBvbmUgaW1wbGVtZW50YXRpb24gdG8gYW5vdGhlci4gIFNvbWUgb2YgdGhlc2UKK2ZlYXR1cmVzIGFyZSBub3JtYWxseSBjb3ZlcmVkIGJ5IGEgcGxhdGZvcm0ncyBBQkkgYW5kIG90aGVycyBhcmUgbm90LiAKK1RoZSBmZWF0dXJlcyB0aGF0IGFyZSBub3QgY292ZXJlZCBieSBhbiBBQkkgZ2VuZXJhbGx5IGFmZmVjdCBob3cgYQorcHJvZ3JhbSBiZWhhdmVzLCBidXQgbm90IGludGVyY2FsbGFiaWxpdHkuCisKKyAgICAgPGJyPjxkdD48ZGZuPmNvbXBhdGliaWxpdHk8L2Rmbj48ZGQ+Q29uZm9ybWFuY2UgdG8gdGhlIHNhbWUgQUJJIGFuZCB0aGUgc2FtZSBiZWhhdmlvciBvZiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkCitmZWF0dXJlcyBhcmUgYm90aCByZWxldmFudCBmb3IgY29tcGF0aWJpbGl0eS4gCis8L2RsPgorCisgPHA+VGhlIGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgYSBDIG9yIEMrKyBjb21waWxlcgorYWZmZWN0cyBjb2RlIGdlbmVyYXRpb24gYW5kIHJ1bnRpbWUgc3VwcG9ydCBmb3I6CisKKyAgICAgPHVsPgorPGxpPnNpemUgYW5kIGFsaWdubWVudCBvZiBkYXRhIHR5cGVzCis8bGk+bGF5b3V0IG9mIHN0cnVjdHVyZWQgdHlwZXMKKzxsaT5jYWxsaW5nIGNvbnZlbnRpb25zCis8bGk+cmVnaXN0ZXIgdXNhZ2UgY29udmVudGlvbnMKKzxsaT5pbnRlcmZhY2VzIGZvciBydW50aW1lIGFyaXRobWV0aWMgc3VwcG9ydAorPGxpPm9iamVjdCBmaWxlIGZvcm1hdHMKKzwvdWw+CisKKyA8cD5JbiBhZGRpdGlvbiwgdGhlIGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgYSBDKysgY29tcGlsZXIKK2FmZmVjdHMgY29kZSBnZW5lcmF0aW9uIGFuZCBydW50aW1lIHN1cHBvcnQgZm9yOgorICAgICA8dWw+Cis8bGk+bmFtZSBtYW5nbGluZworPGxpPmV4Y2VwdGlvbiBoYW5kbGluZworPGxpPmludm9raW5nIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMKKzxsaT5sYXlvdXQsIGFsaWdubWVudCwgYW5kIHBhZGRpbmcgb2YgY2xhc3NlcworPGxpPmxheW91dCBhbmQgYWxpZ25tZW50IG9mIHZpcnR1YWwgdGFibGVzCis8L3VsPgorCisgPHA+U29tZSBHQ0MgY29tcGlsYXRpb24gb3B0aW9ucyBjYXVzZSB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgY29kZSB0aGF0Citkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgQUJJLiAgT3RoZXIgb3B0aW9ucyBjYXVzZQorZGlmZmVyZW50IHByb2dyYW0gYmVoYXZpb3IgZm9yIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZmVhdHVyZXMgdGhhdCBhcmUKK25vdCBjb3ZlcmVkIGJ5IGFuIEFCSS4gIFRoZXNlIG9wdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoCitvdGhlciBjb21waWxlcnMgdGhhdCBkbyBub3QgZm9sbG93IHRoZSBwbGF0Zm9ybSdzIGRlZmF1bHQgQUJJIG9yIHRoZQordXN1YWwgYmVoYXZpb3Igb2YgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBmZWF0dXJlcyBmb3IgdGhlIHBsYXRmb3JtLiAKK0JlIHZlcnkgY2FyZWZ1bCBhYm91dCB1c2luZyBzdWNoIG9wdGlvbnMuCisKKyA8cD5Nb3N0IHBsYXRmb3JtcyBoYXZlIGEgd2VsbC1kZWZpbmVkIEFCSSB0aGF0IGNvdmVycyBDIGNvZGUsIGJ1dCBBQklzCit0aGF0IGNvdmVyIEMrKyBmdW5jdGlvbmFsaXR5IGFyZSBub3QgeWV0IGNvbW1vbi4KKworIDxwPlN0YXJ0aW5nIHdpdGggR0NDIDMuMiwgR0NDIGJpbmFyeSBjb252ZW50aW9ucyBmb3IgQysrIGFyZSBiYXNlZCBvbiBhCit3cml0dGVuLCB2ZW5kb3ItbmV1dHJhbCBDKysgQUJJIHRoYXQgd2FzIGRlc2lnbmVkIHRvIGJlIHNwZWNpZmljIHRvCis2NC1iaXQgSXRhbml1bSBidXQgYWxzbyBpbmNsdWRlcyBnZW5lcmljIHNwZWNpZmljYXRpb25zIHRoYXQgYXBwbHkgdG8KK2FueSBwbGF0Zm9ybS4gCitUaGlzIEMrKyBBQkkgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSBvdGhlciBjb21waWxlciB2ZW5kb3JzIG9uIHNvbWUKK3BsYXRmb3Jtcywgbm90YWJseSBHTlUvTGludXggYW5kIEJTRCBzeXN0ZW1zLiAKK1dlIGhhdmUgdHJpZWQgaGFyZCB0byBwcm92aWRlIGEgc3RhYmxlIEFCSSB0aGF0IHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoCitmdXR1cmUgR0NDIHJlbGVhc2VzLCBidXQgaXQgaXMgcG9zc2libGUgdGhhdCB3ZSB3aWxsIGVuY291bnRlciBwcm9ibGVtcwordGhhdCBtYWtlIHRoaXMgZGlmZmljdWx0LiAgU3VjaCBwcm9ibGVtcyBjb3VsZCBpbmNsdWRlIGRpZmZlcmVudAoraW50ZXJwcmV0YXRpb25zIG9mIHRoZSBDKysgQUJJIGJ5IGRpZmZlcmVudCB2ZW5kb3JzLCBidWdzIGluIHRoZSBBQkksIG9yCitidWdzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQUJJIGluIGRpZmZlcmVudCBjb21waWxlcnMuIAorR0NDJ3MgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhYmk8L3NwYW4+PC9zYW1wPiBzd2l0Y2ggd2FybnMgd2hlbiBHKysgZ2VuZXJhdGVzIGNvZGUgdGhhdCBpcworcHJvYmFibHkgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgQysrIEFCSS4KKworIDxwPlRoZSBDKysgbGlicmFyeSB1c2VkIHdpdGggYSBDKysgY29tcGlsZXIgaW5jbHVkZXMgdGhlIFN0YW5kYXJkIEMrKworTGlicmFyeSwgd2l0aCBmdW5jdGlvbmFsaXR5IGRlZmluZWQgaW4gdGhlIEMrKyBTdGFuZGFyZCwgcGx1cyBsYW5ndWFnZQorcnVudGltZSBzdXBwb3J0LiAgVGhlIHJ1bnRpbWUgc3VwcG9ydCBpcyBpbmNsdWRlZCBpbiBhIEMrKyBBQkksIGJ1dCB0aGVyZQoraXMgbm8gZm9ybWFsIEFCSSBmb3IgdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5LiAgVHdvIGltcGxlbWVudGF0aW9ucworb2YgdGhhdCBsaWJyYXJ5IGFyZSBpbnRlcm9wZXJhYmxlIGlmIG9uZSBmb2xsb3dzIHRoZSBkZS1mYWN0byBBQkkgb2YgdGhlCitvdGhlciBhbmQgaWYgdGhleSBhcmUgYm90aCBidWlsdCB3aXRoIHRoZSBzYW1lIGNvbXBpbGVyLCBvciB3aXRoIGNvbXBpbGVycwordGhhdCBjb25mb3JtIHRvIHRoZSBzYW1lIEFCSSBmb3IgQysrIGNvbXBpbGVyIGFuZCBydW50aW1lIHN1cHBvcnQuCisKKyA8cD5XaGVuIEcrKyBhbmQgYW5vdGhlciBDKysgY29tcGlsZXIgY29uZm9ybSB0byB0aGUgc2FtZSBDKysgQUJJLCBidXQgdGhlCitpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFN0YW5kYXJkIEMrKyBMaWJyYXJ5IHRoYXQgdGhleSBub3JtYWxseSB1c2UgZG8gbm90Citmb2xsb3cgdGhlIHNhbWUgQUJJIGZvciB0aGUgU3RhbmRhcmQgQysrIExpYnJhcnksIG9iamVjdCBmaWxlcyBidWlsdCB3aXRoCit0aG9zZSBjb21waWxlcnMgY2FuIGJlIHVzZWQgaW4gdGhlIHNhbWUgcHJvZ3JhbSBvbmx5IGlmIHRoZXkgdXNlIHRoZSBzYW1lCitDKysgbGlicmFyeS4gIFRoaXMgcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgbG9jYXRpb24gb2YgdGhlIEMrKyBsaWJyYXJ5CitoZWFkZXIgZmlsZXMgd2hlbiBpbnZva2luZyB0aGUgY29tcGlsZXIgd2hvc2UgdXN1YWwgbGlicmFyeSBpcyBub3QgYmVpbmcKK3VzZWQuICBUaGUgbG9jYXRpb24gb2YgR0NDJ3MgQysrIGhlYWRlciBmaWxlcyBkZXBlbmRzIG9uIGhvdyB0aGUgR0NDCitidWlsZCB3YXMgY29uZmlndXJlZCwgYnV0IGNhbiBiZSBzZWVuIGJ5IHVzaW5nIHRoZSBHKysgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXY8L3NwYW4+PC9zYW1wPiBvcHRpb24uIAorV2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRysrIDMuMyB0aGUgY29tcGlsZSBsaW5lIGZvciBhCitkaWZmZXJlbnQgQysrIGNvbXBpbGVyIG5lZWRzIHRvIGluY2x1ZGUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAtSTx2YXI+Z2NjX2luc3RhbGxfZGlyZWN0b3J5PC92YXI+L2luY2x1ZGUvYysrLzMuMworPC9wcmU+CisgPHA+U2ltaWxhcmx5LCBjb21waWxpbmcgY29kZSB3aXRoIEcrKyB0aGF0IG11c3QgdXNlIGEgQysrIGxpYnJhcnkgb3RoZXIKK3RoYW4gdGhlIEdOVSBDKysgbGlicmFyeSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgaGVhZGVyCitmaWxlcyBmb3IgdGhhdCBvdGhlciBsaWJyYXJ5LgorCisgPHA+VGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBsaW5rIGEgcHJvZ3JhbSB0byB1c2UgYSBwYXJ0aWN1bGFyCitDKysgbGlicmFyeSBpcyB0byB1c2UgYSBDKysgZHJpdmVyIHRoYXQgc3BlY2lmaWVzIHRoYXQgQysrIGxpYnJhcnkgYnkKK2RlZmF1bHQuICBUaGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmcrKzwvc3Bhbj48L3NhbXA+IGRyaXZlciwgZm9yIGV4YW1wbGUsIHRlbGxzIHRoZSBsaW5rZXIgd2hlcmUKK3RvIGZpbmQgR0NDJ3MgQysrIGxpYnJhcnkgKDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJzdGRjKys8L3NwYW4+PC9zYW1wPikgcGx1cyB0aGUgb3RoZXIgbGlicmFyaWVzCithbmQgc3RhcnR1cCBmaWxlcyBpdCBuZWVkcywgaW4gdGhlIHByb3BlciBvcmRlci4KKworIDxwPklmIGEgcHJvZ3JhbSBtdXN0IHVzZSBhIGRpZmZlcmVudCBDKysgbGlicmFyeSBhbmQgaXQncyBub3QgcG9zc2libGUKK3RvIGRvIHRoZSBmaW5hbCBsaW5rIHVzaW5nIGEgQysrIGRyaXZlciB0aGF0IHVzZXMgdGhhdCBsaWJyYXJ5IGJ5IGRlZmF1bHQsCitpdCBpcyBuZWNlc3NhcnkgdG8gdGVsbCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZysrPC9zcGFuPjwvc2FtcD4gdGhlIGxvY2F0aW9uIGFuZCBuYW1lIG9mIHRoYXQKK2xpYnJhcnkuICBJdCBtaWdodCBhbHNvIGJlIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IGRpZmZlcmVudCBzdGFydHVwIGZpbGVzCithbmQgb3RoZXIgcnVudGltZSBzdXBwb3J0IGxpYnJhcmllcywgYW5kIHRvIHN1cHByZXNzIHRoZSB1c2Ugb2YgR0NDJ3MKK3N1cHBvcnQgbGlicmFyaWVzIHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIG9wdGlvbnMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW5vc3RkbGliPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9zdGFydGZpbGVzPC9zcGFuPjwvc2FtcD4sIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9kZWZhdWx0bGliczwvc3Bhbj48L3NhbXA+LgorCis8IS0tIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbXBsZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29tcGxleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTY3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbXBsZXguaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29tcGxleCAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMb25nLUxvbmcuaHRtbCNMb25nLUxvbmciIHRpdGxlPSJMb25nIExvbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGbG9hdGluZy1UeXBlcy5odG1sI0Zsb2F0aW5nLVR5cGVzIiB0aXRsZT0iRmxvYXRpbmcgVHlwZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29tcGxleCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGbG9hdGluZy1UeXBlcy5odG1sI0Zsb2F0aW5nLVR5cGVzIj5GbG9hdGluZyBUeXBlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxvbmctTG9uZy5odG1sI0xvbmctTG9uZyI+TG9uZyBMb25nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjEwIENvbXBsZXggTnVtYmVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNvbXBsZXgtbnVtYmVycy0yNDQzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1ZkNvbXBsZXhfMDA3ZC1rZXl3b3JkLTI0NDQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZjb21wbGV4XzAwNWZfMDA1Zl8wMDdkLWtleXdvcmQtMjQ0NSI+PC9hPgorSVNPIEM5OSBzdXBwb3J0cyBjb21wbGV4IGZsb2F0aW5nIGRhdGEgdHlwZXMsIGFuZCBhcyBhbiBleHRlbnNpb24gR0NDCitzdXBwb3J0cyB0aGVtIGluIEM5MCBtb2RlIGFuZCBpbiBDKysuICBHQ0MgYWxzbyBzdXBwb3J0cyBjb21wbGV4IGludGVnZXIgZGF0YQordHlwZXMgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIElTTyBDOTkuICBZb3UgY2FuIGRlY2xhcmUgY29tcGxleCB0eXBlcwordXNpbmcgdGhlIGtleXdvcmQgPGNvZGU+X0NvbXBsZXg8L2NvZGU+LiAgQXMgYW4gZXh0ZW5zaW9uLCB0aGUgb2xkZXIgR05VCitrZXl3b3JkIDxjb2RlPl9fY29tcGxleF9fPC9jb2RlPiBpcyBhbHNvIHN1cHBvcnRlZC4KKworIDxwPkZvciBleGFtcGxlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9Db21wbGV4IGRvdWJsZSB4Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkZWNsYXJlcyA8Y29kZT54PC9jb2RlPiBhcyBhCit2YXJpYWJsZSB3aG9zZSByZWFsIHBhcnQgYW5kIGltYWdpbmFyeSBwYXJ0IGFyZSBib3RoIG9mIHR5cGUKKzxjb2RlPmRvdWJsZTwvY29kZT4uICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9Db21wbGV4IHNob3J0IGludCB5Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkZWNsYXJlcyA8Y29kZT55PC9jb2RlPiB0bworaGF2ZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgdHlwZSA8Y29kZT5zaG9ydCBpbnQ8L2NvZGU+OyB0aGlzIGlzIG5vdAorbGlrZWx5IHRvIGJlIHVzZWZ1bCwgYnV0IGl0IHNob3dzIHRoYXQgdGhlIHNldCBvZiBjb21wbGV4IHR5cGVzIGlzCitjb21wbGV0ZS4KKworIDxwPlRvIHdyaXRlIGEgY29uc3RhbnQgd2l0aCBhIGNvbXBsZXggZGF0YSB0eXBlLCB1c2UgdGhlIHN1ZmZpeCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ajwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoZWl0aGVyIG9uZTsgdGhleSBhcmUgZXF1aXZhbGVudCkuICBGb3IgZXhhbXBsZSwgPGNvZGU+Mi41Zmk8L2NvZGU+CitoYXMgdHlwZSA8Y29kZT5fQ29tcGxleCBmbG9hdDwvY29kZT4gYW5kIDxjb2RlPjNpPC9jb2RlPiBoYXMgdHlwZQorPGNvZGU+X0NvbXBsZXggaW50PC9jb2RlPi4gIFN1Y2ggYSBjb25zdGFudCBhbHdheXMgaGFzIGEgcHVyZSBpbWFnaW5hcnkKK3ZhbHVlLCBidXQgeW91IGNhbiBmb3JtIGFueSBjb21wbGV4IHZhbHVlIHlvdSBsaWtlIGJ5IGFkZGluZyBvbmUgdG8gYQorcmVhbCBjb25zdGFudC4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uOyBpZiB5b3UgaGF2ZSBhbiBJU08gQzk5Citjb25mb3JtaW5nIEMgbGlicmFyeSAoc3VjaCBhcyB0aGUgR05VIEMgTGlicmFyeSksIGFuZCB3YW50IHRvIGNvbnN0cnVjdCBjb21wbGV4Citjb25zdGFudHMgb2YgZmxvYXRpbmcgdHlwZSwgeW91IHNob3VsZCBpbmNsdWRlIDxjb2RlPiZsdDtjb21wbGV4LmgmZ3Q7PC9jb2RlPiBhbmQKK3VzZSB0aGUgbWFjcm9zIDxjb2RlPkk8L2NvZGU+IG9yIDxjb2RlPl9Db21wbGV4X0k8L2NvZGU+IGluc3RlYWQuCisKKyA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZyZWFsXzAwNWZfMDA1Zl8wMDdkLWtleXdvcmQtMjQ0NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmltYWdfMDA1Zl8wMDVmXzAwN2Qta2V5d29yZC0yNDQ3Ij48L2E+VG8gZXh0cmFjdCB0aGUgcmVhbCBwYXJ0IG9mIGEgY29tcGxleC12YWx1ZWQgZXhwcmVzc2lvbiA8dmFyPmV4cDwvdmFyPiwgd3JpdGUKKzxjb2RlPl9fcmVhbF9fIDwvY29kZT48dmFyPmV4cDwvdmFyPi4gIExpa2V3aXNlLCB1c2UgPGNvZGU+X19pbWFnX188L2NvZGU+IHRvCitleHRyYWN0IHRoZSBpbWFnaW5hcnkgcGFydC4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uOyBmb3IgdmFsdWVzIG9mCitmbG9hdGluZyB0eXBlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgSVNPIEM5OSBmdW5jdGlvbnMgPGNvZGU+Y3JlYWxmPC9jb2RlPiwKKzxjb2RlPmNyZWFsPC9jb2RlPiwgPGNvZGU+Y3JlYWxsPC9jb2RlPiwgPGNvZGU+Y2ltYWdmPC9jb2RlPiwgPGNvZGU+Y2ltYWc8L2NvZGU+IGFuZAorPGNvZGU+Y2ltYWdsPC9jb2RlPiwgZGVjbGFyZWQgaW4gPGNvZGU+Jmx0O2NvbXBsZXguaCZndDs8L2NvZGU+IGFuZCBhbHNvIHByb3ZpZGVkIGFzCitidWlsdC1pbiBmdW5jdGlvbnMgYnkgR0NDLgorCisgPHA+PGEgbmFtZT0iaW5kZXgtY29tcGxleC1jb25qdWdhdGlvbi0yNDQ4Ij48L2E+VGhlIG9wZXJhdG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+fjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwZXJmb3JtcyBjb21wbGV4IGNvbmp1Z2F0aW9uIHdoZW4gdXNlZCBvbiBhIHZhbHVlCit3aXRoIGEgY29tcGxleCB0eXBlLiAgVGhpcyBpcyBhIEdOVSBleHRlbnNpb247IGZvciB2YWx1ZXMgb2YKK2Zsb2F0aW5nIHR5cGUsIHlvdSBzaG91bGQgdXNlIHRoZSBJU08gQzk5IGZ1bmN0aW9ucyA8Y29kZT5jb25qZjwvY29kZT4sCis8Y29kZT5jb25qPC9jb2RlPiBhbmQgPGNvZGU+Y29uamw8L2NvZGU+LCBkZWNsYXJlZCBpbiA8Y29kZT4mbHQ7Y29tcGxleC5oJmd0OzwvY29kZT4gYW5kIGFsc28KK3Byb3ZpZGVkIGFzIGJ1aWx0LWluIGZ1bmN0aW9ucyBieSBHQ0MuCisKKyA8cD5HQ0MgY2FuIGFsbG9jYXRlIGNvbXBsZXggYXV0b21hdGljIHZhcmlhYmxlcyBpbiBhIG5vbmNvbnRpZ3VvdXMKK2Zhc2hpb247IGl0J3MgZXZlbiBwb3NzaWJsZSBmb3IgdGhlIHJlYWwgcGFydCB0byBiZSBpbiBhIHJlZ2lzdGVyIHdoaWxlCit0aGUgaW1hZ2luYXJ5IHBhcnQgaXMgb24gdGhlIHN0YWNrIChvciB2aWNlIHZlcnNhKS4gIE9ubHkgdGhlIERXQVJGIDIKK2RlYnVnIGluZm8gZm9ybWF0IGNhbiByZXByZXNlbnQgdGhpcywgc28gdXNlIG9mIERXQVJGIDIgaXMgcmVjb21tZW5kZWQuIAorSWYgeW91IGFyZSB1c2luZyB0aGUgc3RhYnMgZGVidWcgaW5mbyBmb3JtYXQsIEdDQyBkZXNjcmliZXMgYSBub25jb250aWd1b3VzCitjb21wbGV4IHZhcmlhYmxlIGFzIGlmIGl0IHdlcmUgdHdvIHNlcGFyYXRlIHZhcmlhYmxlcyBvZiBub25jb21wbGV4IHR5cGUuIAorSWYgdGhlIHZhcmlhYmxlJ3MgYWN0dWFsIG5hbWUgaXMgPGNvZGU+Zm9vPC9jb2RlPiwgdGhlIHR3byBmaWN0aXRpb3VzCit2YXJpYWJsZXMgYXJlIG5hbWVkIDxjb2RlPmZvbyRyZWFsPC9jb2RlPiBhbmQgPGNvZGU+Zm9vJGltYWc8L2NvZGU+LiAgWW91IGNhbgorZXhhbWluZSBhbmQgc2V0IHRoZXNlIHR3byBmaWN0aXRpb3VzIHZhcmlhYmxlcyB3aXRoIHlvdXIgZGVidWdnZXIuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbXBvdW5kLUxpdGVyYWxzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbXBvdW5kLUxpdGVyYWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5YjVhZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29tcG91bmQtTGl0ZXJhbHMuaHRtbApAQCAtMCwwICsxLDEzMyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29tcG91bmQgTGl0ZXJhbHMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW5pdGlhbGl6ZXJzLmh0bWwjSW5pdGlhbGl6ZXJzIiB0aXRsZT0iSW5pdGlhbGl6ZXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI0Rlc2lnbmF0ZWQtSW5pdHMiIHRpdGxlPSJEZXNpZ25hdGVkIEluaXRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvbXBvdW5kLUxpdGVyYWxzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRlc2lnbmF0ZWQtSW5pdHMuaHRtbCNEZXNpZ25hdGVkLUluaXRzIj5EZXNpZ25hdGVkIEluaXRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5pdGlhbGl6ZXJzLmh0bWwjSW5pdGlhbGl6ZXJzIj5Jbml0aWFsaXplcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMjUgQ29tcG91bmQgTGl0ZXJhbHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb25zdHJ1Y3Rvci1leHByZXNzaW9ucy0yNTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW5pdGlhbGl6YXRpb25zLWluLWV4cHJlc3Npb25zLTI1NDciPjwvYT48YSBuYW1lPSJpbmRleC1zdHJ1Y3R1cmVzXzAwMmMtY29uc3RydWN0b3ItZXhwcmVzc2lvbi0yNTQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXhwcmVzc2lvbnNfMDAyYy1jb25zdHJ1Y3Rvci0yNTQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29tcG91bmQtbGl0ZXJhbHMtMjU1MCI+PC9hPjwhLS0gVGhlIEdOVSBDIG5hbWUgZm9yIHdoYXQgQzk5IGNhbGxzIGNvbXBvdW5kIGxpdGVyYWxzIHdhcyAiY29uc3RydWN0b3IgZXhwcmVzc2lvbnMiLiAtLT4KKworIDxwPklTTyBDOTkgc3VwcG9ydHMgY29tcG91bmQgbGl0ZXJhbHMuICBBIGNvbXBvdW5kIGxpdGVyYWwgbG9va3MgbGlrZQorYSBjYXN0IGNvbnRhaW5pbmcgYW4gaW5pdGlhbGl6ZXIuICBJdHMgdmFsdWUgaXMgYW4gb2JqZWN0IG9mIHRoZQordHlwZSBzcGVjaWZpZWQgaW4gdGhlIGNhc3QsIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIHNwZWNpZmllZCBpbgordGhlIGluaXRpYWxpemVyOyBpdCBpcyBhbiBsdmFsdWUuICBBcyBhbiBleHRlbnNpb24sIEdDQyBzdXBwb3J0cworY29tcG91bmQgbGl0ZXJhbHMgaW4gQzkwIG1vZGUgYW5kIGluIEMrKywgdGhvdWdoIHRoZSBzZW1hbnRpY3MgYXJlCitzb21ld2hhdCBkaWZmZXJlbnQgaW4gQysrLgorCisgPHA+VXN1YWxseSwgdGhlIHNwZWNpZmllZCB0eXBlIGlzIGEgc3RydWN0dXJlLiAgQXNzdW1lIHRoYXQKKzxjb2RlPnN0cnVjdCBmb288L2NvZGU+IGFuZCA8Y29kZT5zdHJ1Y3R1cmU8L2NvZGU+IGFyZSBkZWNsYXJlZCBhcyBzaG93bjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0cnVjdCBmb28ge2ludCBhOyBjaGFyIGJbMl07fSBzdHJ1Y3R1cmU7Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBjb25zdHJ1Y3RpbmcgYSA8Y29kZT5zdHJ1Y3QgZm9vPC9jb2RlPiB3aXRoIGEgY29tcG91bmQgbGl0ZXJhbDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0cnVjdHVyZSA9ICgoc3RydWN0IGZvbykge3ggKyB5LCAnYScsIDB9KTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyBpcyBlcXVpdmFsZW50IHRvIHdyaXRpbmcgdGhlIGZvbGxvd2luZzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHsKKyAgICAgICBzdHJ1Y3QgZm9vIHRlbXAgPSB7eCArIHksICdhJywgMH07CisgICAgICAgc3RydWN0dXJlID0gdGVtcDsKKyAgICAgfQorPC9wcmU+CisgPHA+WW91IGNhbiBhbHNvIGNvbnN0cnVjdCBhbiBhcnJheSwgdGhvdWdoIHRoaXMgaXMgZGFuZ2Vyb3VzIGluIEMrKywgYXMKK2V4cGxhaW5lZCBiZWxvdy4gIElmIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGNvbXBvdW5kIGxpdGVyYWwgYXJlCisobWFkZSB1cCBvZikgc2ltcGxlIGNvbnN0YW50IGV4cHJlc3Npb25zLCBzdWl0YWJsZSBmb3IgdXNlIGluCitpbml0aWFsaXplcnMgb2Ygb2JqZWN0cyBvZiBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiwgdGhlbiB0aGUgY29tcG91bmQKK2xpdGVyYWwgY2FuIGJlIGNvZXJjZWQgdG8gYSBwb2ludGVyIHRvIGl0cyBmaXJzdCBlbGVtZW50IGFuZCB1c2VkIGluCitzdWNoIGFuIGluaXRpYWxpemVyLCBhcyBzaG93biBoZXJlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgY2hhciAqKmZvbyA9IChjaGFyICpbXSkgeyAieCIsICJ5IiwgInoiIH07Cis8L3ByZT4KKyA8cD5Db21wb3VuZCBsaXRlcmFscyBmb3Igc2NhbGFyIHR5cGVzIGFuZCB1bmlvbiB0eXBlcyBhcmUKK2Fsc28gYWxsb3dlZCwgYnV0IHRoZW4gdGhlIGNvbXBvdW5kIGxpdGVyYWwgaXMgZXF1aXZhbGVudAordG8gYSBjYXN0LgorCisgPHA+QXMgYSBHTlUgZXh0ZW5zaW9uLCBHQ0MgYWxsb3dzIGluaXRpYWxpemF0aW9uIG9mIG9iamVjdHMgd2l0aCBzdGF0aWMgc3RvcmFnZQorZHVyYXRpb24gYnkgY29tcG91bmQgbGl0ZXJhbHMgKHdoaWNoIGlzIG5vdCBwb3NzaWJsZSBpbiBJU08gQzk5LCBiZWNhdXNlCit0aGUgaW5pdGlhbGl6ZXIgaXMgbm90IGEgY29uc3RhbnQpLiAKK0l0IGlzIGhhbmRsZWQgYXMgaWYgdGhlIG9iamVjdCBpcyBpbml0aWFsaXplZCBvbmx5IHdpdGggdGhlIGJyYWNrZXQKK2VuY2xvc2VkIGxpc3QgaWYgdGhlIHR5cGVzIG9mIHRoZSBjb21wb3VuZCBsaXRlcmFsIGFuZCB0aGUgb2JqZWN0IG1hdGNoLiAKK1RoZSBpbml0aWFsaXplciBsaXN0IG9mIHRoZSBjb21wb3VuZCBsaXRlcmFsIG11c3QgYmUgY29uc3RhbnQuIAorSWYgdGhlIG9iamVjdCBiZWluZyBpbml0aWFsaXplZCBoYXMgYXJyYXkgdHlwZSBvZiB1bmtub3duIHNpemUsIHRoZSBzaXplIGlzCitkZXRlcm1pbmVkIGJ5IGNvbXBvdW5kIGxpdGVyYWwgc2l6ZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0YXRpYyBzdHJ1Y3QgZm9vIHggPSAoc3RydWN0IGZvbykgezEsICdhJywgJ2InfTsKKyAgICAgc3RhdGljIGludCB5W10gPSAoaW50IFtdKSB7MSwgMiwgM307CisgICAgIHN0YXRpYyBpbnQgeltdID0gKGludCBbM10pIHsxfTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIGFib3ZlIGxpbmVzIGFyZSBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmc6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RhdGljIHN0cnVjdCBmb28geCA9IHsxLCAnYScsICdiJ307CisgICAgIHN0YXRpYyBpbnQgeVtdID0gezEsIDIsIDN9OworICAgICBzdGF0aWMgaW50IHpbXSA9IHsxLCAwLCAwfTsKKzwvcHJlPgorIDxwPkluIEMsIGEgY29tcG91bmQgbGl0ZXJhbCBkZXNpZ25hdGVzIGFuIHVubmFtZWQgb2JqZWN0IHdpdGggc3RhdGljIG9yCithdXRvbWF0aWMgc3RvcmFnZSBkdXJhdGlvbi4gIEluIEMrKywgYSBjb21wb3VuZCBsaXRlcmFsIGRlc2lnbmF0ZXMgYQordGVtcG9yYXJ5IG9iamVjdCwgd2hpY2ggb25seSBsaXZlcyB1bnRpbCB0aGUgZW5kIG9mIGl0cworZnVsbC1leHByZXNzaW9uLiAgQXMgYSByZXN1bHQsIHdlbGwtZGVmaW5lZCBDIGNvZGUgdGhhdCB0YWtlcyB0aGUKK2FkZHJlc3Mgb2YgYSBzdWJvYmplY3Qgb2YgYSBjb21wb3VuZCBsaXRlcmFsIGNhbiBiZSB1bmRlZmluZWQgaW4gQysrLiAKK0ZvciBpbnN0YW5jZSwgaWYgdGhlIGFycmF5IGNvbXBvdW5kIGxpdGVyYWwgZXhhbXBsZSBhYm92ZSBhcHBlYXJlZAoraW5zaWRlIGEgZnVuY3Rpb24sIGFueSBzdWJzZXF1ZW50IHVzZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBDKysgaGFzCit1bmRlZmluZWQgYmVoYXZpb3IgYmVjYXVzZSB0aGUgbGlmZXRpbWUgb2YgdGhlIGFycmF5IGVuZHMgYWZ0ZXIgdGhlCitkZWNsYXJhdGlvbiBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEFzIGEgcmVzdWx0LCB0aGUgQysrIGNvbXBpbGVyIG5vdyByZWplY3RzCit0aGUgY29udmVyc2lvbiBvZiBhIHRlbXBvcmFyeSBhcnJheSB0byBhIHBvaW50ZXIuCisKKyA8cD5BcyBhbiBvcHRpbWl6YXRpb24sIHRoZSBDKysgY29tcGlsZXIgc29tZXRpbWVzIGdpdmVzIGFycmF5IGNvbXBvdW5kCitsaXRlcmFscyBsb25nZXIgbGlmZXRpbWVzOiB3aGVuIHRoZSBhcnJheSBlaXRoZXIgYXBwZWFycyBvdXRzaWRlIGEKK2Z1bmN0aW9uIG9yIGhhcyBjb25zdC1xdWFsaWZpZWQgdHlwZS4gIElmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBpdHMKK2luaXRpYWxpemVyIGhhZCBlbGVtZW50cyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNoYXIgKmNvbnN0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHR5cGUgcmF0aGVyIHRoYW4KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2hhciAqPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciBpZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3ZXJlIGEgZ2xvYmFsIHZhcmlhYmxlLCB0aGUgYXJyYXkKK3dvdWxkIGhhdmUgc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICBCdXQgaXQgaXMgcHJvYmFibHkgc2FmZXN0IGp1c3QgdG8KK2F2b2lkIHRoZSB1c2Ugb2YgYXJyYXkgY29tcG91bmQgbGl0ZXJhbHMgaW4gY29kZSBjb21waWxlZCBhcyBDKysuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbmRpdGlvbmFsbHlfMDAyZHN1cHBvcnRlZC1iZWhhdmlvci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db25kaXRpb25hbGx5XzAwMmRzdXBwb3J0ZWQtYmVoYXZpb3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmJkOWViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db25kaXRpb25hbGx5XzAwMmRzdXBwb3J0ZWQtYmVoYXZpb3IuaHRtbApAQCAtMCwwICsxLDY5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db25kaXRpb25hbGx5LXN1cHBvcnRlZCBiZWhhdmlvciAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbi5odG1sI0NfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uIiB0aXRsZT0iQysrIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRXhjZXB0aW9uLWhhbmRsaW5nLmh0bWwjRXhjZXB0aW9uLWhhbmRsaW5nIiB0aXRsZT0iRXhjZXB0aW9uIGhhbmRsaW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvbmRpdGlvbmFsbHktc3VwcG9ydGVkLWJlaGF2aW9yIj48L2E+Cis8YSBuYW1lPSJDb25kaXRpb25hbGx5XzAwMmRzdXBwb3J0ZWQtYmVoYXZpb3IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXhjZXB0aW9uLWhhbmRsaW5nLmh0bWwjRXhjZXB0aW9uLWhhbmRsaW5nIj5FeGNlcHRpb24gaGFuZGxpbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbi5odG1sI0NfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uIj5DKysgSW1wbGVtZW50YXRpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjEgQ29uZGl0aW9uYWxseS1zdXBwb3J0ZWQgYmVoYXZpb3I8L2gzPgorCis8cD48Y2l0ZT5FYWNoIGltcGxlbWVudGF0aW9uIHNoYWxsIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiB0aGF0IGlkZW50aWZpZXMKK2FsbCBjb25kaXRpb25hbGx5LXN1cHBvcnRlZCBjb25zdHJ1Y3RzIHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCAoQysrMHgKKzEuNCkuPC9jaXRlPgorCisgICAgIDx1bD4KKzxsaT48Y2l0ZT5XaGV0aGVyIGFuIGFyZ3VtZW50IG9mIGNsYXNzIHR5cGUgd2l0aCBhIG5vbi10cml2aWFsIGNvcHkKK2NvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3IgY2FuIGJlIHBhc3NlZCB0byAuLi4gKEMrKzB4IDUuMi4yKS48L2NpdGU+CisKKyAgICAgPHA+U3VjaCBhcmd1bWVudCBwYXNzaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyA8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db25kaXRpb25hbHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29uZGl0aW9uYWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhYWUxYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29uZGl0aW9uYWxzLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29uZGl0aW9uYWxzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlR5cGVvZi5odG1sI1R5cGVvZiIgdGl0bGU9IlR5cGVvZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Il8wMDVmXzAwNWZpbnQxMjguaHRtbCNnX3RfMDA1Zl8wMDVmaW50MTI4IiB0aXRsZT0iX19pbnQxMjgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29uZGl0aW9uYWxzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Il8wMDVmXzAwNWZpbnQxMjguaHRtbCNnX3RfMDA1Zl8wMDVmaW50MTI4Ij5fX2ludDEyODwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlR5cGVvZi5odG1sI1R5cGVvZiI+VHlwZW9mPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjcgQ29uZGl0aW9uYWxzIHdpdGggT21pdHRlZCBPcGVyYW5kczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNvbmRpdGlvbmFsLWV4cHJlc3Npb25zXzAwMmMtZXh0ZW5zaW9ucy0yNDMwIj48L2E+PGEgbmFtZT0iaW5kZXgtb21pdHRlZC1taWRkbGVfMDAyZG9wZXJhbmRzLTI0MzEiPjwvYT48YSBuYW1lPSJpbmRleC1taWRkbGVfMDAyZG9wZXJhbmRzXzAwMmMtb21pdHRlZC0yNDMyIj48L2E+PGEgbmFtZT0iaW5kZXgtZXh0ZW5zaW9uc18wMDJjLV8wMDQwY29kZV8wMDdiXzAwM2ZfMDAzYV8wMDdkLTI0MzMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDNmXzAwM2FfMDA3ZC1leHRlbnNpb25zLTI0MzQiPjwvYT4KK1RoZSBtaWRkbGUgb3BlcmFuZCBpbiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gbWF5IGJlIG9taXR0ZWQuICBUaGVuCitpZiB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBub256ZXJvLCBpdHMgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSBjb25kaXRpb25hbAorZXhwcmVzc2lvbi4KKworIDxwPlRoZXJlZm9yZSwgdGhlIGV4cHJlc3Npb24KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHggPyA6IHkKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+aGFzIHRoZSB2YWx1ZSBvZiA8Y29kZT54PC9jb2RlPiBpZiB0aGF0IGlzIG5vbnplcm87IG90aGVyd2lzZSwgdGhlIHZhbHVlIG9mCis8Y29kZT55PC9jb2RlPi4KKworIDxwPlRoaXMgZXhhbXBsZSBpcyBwZXJmZWN0bHkgZXF1aXZhbGVudCB0bworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgeCA/IHggOiB5Cis8L3ByZT4KKyA8cD48YSBuYW1lPSJpbmRleC1zaWRlLWVmZmVjdC1pbi1fMDA0MGNvZGVfMDA3Yl8wMDNmXzAwM2FfMDA3ZC0yNDM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAzZl8wMDNhXzAwN2Qtc2lkZS1lZmZlY3QtMjQzNiI+PC9hPkluIHRoaXMgc2ltcGxlIGNhc2UsIHRoZSBhYmlsaXR5IHRvIG9taXQgdGhlIG1pZGRsZSBvcGVyYW5kIGlzIG5vdAorZXNwZWNpYWxseSB1c2VmdWwuICBXaGVuIGl0IGJlY29tZXMgdXNlZnVsIGlzIHdoZW4gdGhlIGZpcnN0IG9wZXJhbmQgZG9lcywKK29yIG1heSAoaWYgaXQgaXMgYSBtYWNybyBhcmd1bWVudCksIGNvbnRhaW4gYSBzaWRlIGVmZmVjdC4gIFRoZW4gcmVwZWF0aW5nCit0aGUgb3BlcmFuZCBpbiB0aGUgbWlkZGxlIHdvdWxkIHBlcmZvcm0gdGhlIHNpZGUgZWZmZWN0IHR3aWNlLiAgT21pdHRpbmcKK3RoZSBtaWRkbGUgb3BlcmFuZCB1c2VzIHRoZSB2YWx1ZSBhbHJlYWR5IGNvbXB1dGVkIHdpdGhvdXQgdGhlIHVuZGVzaXJhYmxlCitlZmZlY3RzIG9mIHJlY29tcHV0aW5nIGl0LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db25zdGFudC1zdHJpbmctb2JqZWN0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db25zdGFudC1zdHJpbmctb2JqZWN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTgyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbnN0YW50LXN0cmluZy1vYmplY3RzLmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbnN0YW50IHN0cmluZyBvYmplY3RzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy5odG1sI09iamVjdGl2ZV8wMDJkQyIgdGl0bGU9Ik9iamVjdGl2ZS1DIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR2FyYmFnZS1Db2xsZWN0aW9uLmh0bWwjR2FyYmFnZS1Db2xsZWN0aW9uIiB0aXRsZT0iR2FyYmFnZSBDb2xsZWN0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY29tcGF0aWJpbGl0eV8wMDVmYWxpYXMuaHRtbCNjb21wYXRpYmlsaXR5XzAwNWZhbGlhcyIgdGl0bGU9ImNvbXBhdGliaWxpdHlfYWxpYXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29uc3RhbnQtc3RyaW5nLW9iamVjdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY29tcGF0aWJpbGl0eV8wMDVmYWxpYXMuaHRtbCNjb21wYXRpYmlsaXR5XzAwNWZhbGlhcyI+Y29tcGF0aWJpbGl0eV9hbGlhczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdhcmJhZ2UtQ29sbGVjdGlvbi5odG1sI0dhcmJhZ2UtQ29sbGVjdGlvbiI+R2FyYmFnZSBDb2xsZWN0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIj5PYmplY3RpdmUtQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNSBDb25zdGFudCBzdHJpbmcgb2JqZWN0czwvaDM+CisKKzxwPkdOVSBPYmplY3RpdmUtQyBwcm92aWRlcyBjb25zdGFudCBzdHJpbmcgb2JqZWN0cyB0aGF0IGFyZSBnZW5lcmF0ZWQKK2RpcmVjdGx5IGJ5IHRoZSBjb21waWxlci4gIFlvdSBkZWNsYXJlIGEgY29uc3RhbnQgc3RyaW5nIG9iamVjdCBieQorcHJlZml4aW5nIGEgQyBjb25zdGFudCBzdHJpbmcgd2l0aCB0aGUgY2hhcmFjdGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QDwvc3Bhbj48L3NhbXA+JnJzcXVvOzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgaWQgbXlTdHJpbmcgPSBAInRoaXMgaXMgYSBjb25zdGFudCBzdHJpbmcgb2JqZWN0IjsKKzwvcHJlPgorIDxwPlRoZSBjb25zdGFudCBzdHJpbmcgb2JqZWN0cyBhcmUgYnkgZGVmYXVsdCBpbnN0YW5jZXMgb2YgdGhlCis8Y29kZT5OWENvbnN0YW50U3RyaW5nPC9jb2RlPiBjbGFzcyB3aGljaCBpcyBwcm92aWRlZCBieSB0aGUgR05VIE9iamVjdGl2ZS1DCitydW50aW1lLiAgVG8gZ2V0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgY2xhc3MgeW91IG11c3QgaW5jbHVkZSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5vYmpjL05YQ29uc3RTdHIuaDwvc3Bhbj48L3NhbXA+IGhlYWRlciBmaWxlLgorCisgPHA+VXNlciBkZWZpbmVkIGxpYnJhcmllcyBtYXkgd2FudCB0byBpbXBsZW1lbnQgdGhlaXIgb3duIGNvbnN0YW50IHN0cmluZworY2xhc3MuICBUbyBiZSBhYmxlIHRvIHN1cHBvcnQgdGhlbSwgdGhlIEdOVSBPYmplY3RpdmUtQyBjb21waWxlciBwcm92aWRlcworYSBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbnMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZjb25zdGFudC1zdHJpbmctY2xhc3M9PC9zcGFuPjx2YXI+Y2xhc3MtbmFtZTwvdmFyPjwvc2FtcD4uIAorVGhlIHByb3ZpZGVkIGNsYXNzIHNob3VsZCBhZGhlcmUgdG8gYSBzdHJpY3Qgc3RydWN0dXJlLCB0aGUgc2FtZQorYXMgPGNvZGU+TlhDb25zdGFudFN0cmluZzwvY29kZT4ncyBzdHJ1Y3R1cmU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAKKyAgICAgQGludGVyZmFjZSBNeUNvbnN0YW50U3RyaW5nQ2xhc3MKKyAgICAgeworICAgICAgIENsYXNzIGlzYTsKKyAgICAgICBjaGFyICpjX3N0cmluZzsKKyAgICAgICB1bnNpZ25lZCBpbnQgbGVuOworICAgICB9CisgICAgIEBlbmQKKyAgICAgCis8L3ByZT4KKyA8cD48Y29kZT5OWENvbnN0YW50U3RyaW5nPC9jb2RlPiBpbmhlcml0cyBmcm9tIDxjb2RlPk9iamVjdDwvY29kZT47IHVzZXIgY2xhc3MKK2xpYnJhcmllcyBtYXkgY2hvb3NlIHRvIGluaGVyaXQgdGhlIGN1c3RvbWl6ZWQgY29uc3RhbnQgc3RyaW5nIGNsYXNzCitmcm9tIGEgZGlmZmVyZW50IGNsYXNzIHRoYW4gPGNvZGU+T2JqZWN0PC9jb2RlPi4gIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IGluCit0aGUgbWV0aG9kcyB0aGUgY29uc3RhbnQgc3RyaW5nIGNsYXNzIGhhcyB0byBpbXBsZW1lbnQsIGJ1dCB0aGUgZmluYWwKK2l2YXIgbGF5b3V0IG9mIHRoZSBjbGFzcyBtdXN0IGJlIHRoZSBjb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuCitzdHJ1Y3R1cmUuCisKKyA8cD5XaGVuIHRoZSBjb21waWxlciBjcmVhdGVzIHRoZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBjb25zdGFudCBzdHJpbmcKK29iamVjdCwgdGhlIDxjb2RlPmNfc3RyaW5nPC9jb2RlPiBmaWVsZCB3aWxsIGJlIGZpbGxlZCBieSB0aGUgY29tcGlsZXIgd2l0aAordGhlIHN0cmluZzsgdGhlIDxjb2RlPmxlbmd0aDwvY29kZT4gZmllbGQgd2lsbCBiZSBmaWxsZWQgYnkgdGhlIGNvbXBpbGVyIHdpdGgKK3RoZSBzdHJpbmcgbGVuZ3RoOyB0aGUgPGNvZGU+aXNhPC9jb2RlPiBwb2ludGVyIHdpbGwgYmUgZmlsbGVkIHdpdGgKKzxjb2RlPk5VTEw8L2NvZGU+IGJ5IHRoZSBjb21waWxlciwgYW5kIGl0IHdpbGwgbGF0ZXIgYmUgZml4ZWQgdXAgYXV0b21hdGljYWxseQorYXQgcnVudGltZSBieSB0aGUgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgbGlicmFyeSB0byBwb2ludCB0byB0aGUgY2xhc3MKK3doaWNoIHdhcyBzZXQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY29uc3RhbnQtc3RyaW5nLWNsYXNzPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHdoZW4gdGhlCitvYmplY3QgZmlsZSBpcyBsb2FkZWQgKGlmIHlvdSB3b25kZXIgaG93IGl0IHdvcmtzIGJlaGluZCB0aGUgc2NlbmVzLCB0aGUKK25hbWUgb2YgdGhlIGNsYXNzIHRvIHVzZSwgYW5kIHRoZSBsaXN0IG9mIHN0YXRpYyBvYmplY3RzIHRvIGZpeHVwLCBhcmUKK3N0b3JlZCBieSB0aGUgY29tcGlsZXIgaW4gdGhlIG9iamVjdCBmaWxlIGluIGEgcGxhY2Ugd2hlcmUgdGhlIEdOVQorcnVudGltZSBsaWJyYXJ5IHdpbGwgZmluZCB0aGVtIGF0IHJ1bnRpbWUpLgorCisgPHA+QXMgYSByZXN1bHQsIHdoZW4gYSBmaWxlIGlzIGNvbXBpbGVkIHdpdGggdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNvbnN0YW50LXN0cmluZy1jbGFzczwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgYWxsIHRoZSBjb25zdGFudCBzdHJpbmcgb2JqZWN0cword2lsbCBiZSBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHNwZWNpZmllZCBhcyBhcmd1bWVudCB0byB0aGlzIG9wdGlvbi4gIEl0CitpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzIHJlZmVycmluZyB0byBkaWZmZXJlbnQKK2NvbnN0YW50IHN0cmluZyBjbGFzc2VzLCBuZWl0aGVyIHRoZSBjb21waWxlciBub3IgdGhlIGxpbmtlciBpbXBvc2UgYW55CityZXN0cmljdGlvbnMgaW4gZG9pbmcgdGhpcy4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29uc3RyYWludHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29uc3RyYWludHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjJjYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db25zdHJhaW50cy5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbnN0cmFpbnRzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI0V4dGVuZGVkLUFzbSIgdGl0bGU9IkV4dGVuZGVkIEFzbSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFzbS1MYWJlbHMuaHRtbCNBc20tTGFiZWxzIiB0aXRsZT0iQXNtIExhYmVscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb25zdHJhaW50cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBc20tTGFiZWxzLmh0bWwjQXNtLUxhYmVscyI+QXNtIExhYmVsczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI0V4dGVuZGVkLUFzbSI+RXh0ZW5kZWQgQXNtPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjQyIENvbnN0cmFpbnRzIGZvciA8Y29kZT5hc208L2NvZGU+IE9wZXJhbmRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3BlcmFuZC1jb25zdHJhaW50c18wMDJjLV8wMDQwY29kZV8wMDdiYXNtXzAwN2QtMjgwOSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnN0cmFpbnRzXzAwMmMtXzAwNDBjb2RlXzAwN2Jhc21fMDA3ZC0yODEwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jhc21fMDA3ZC1jb25zdHJhaW50cy0yODExIj48L2E+CitIZXJlIGFyZSBzcGVjaWZpYyBkZXRhaWxzIG9uIHdoYXQgY29uc3RyYWludCBsZXR0ZXJzIHlvdSBjYW4gdXNlIHdpdGgKKzxjb2RlPmFzbTwvY29kZT4gb3BlcmFuZHMuIAorQ29uc3RyYWludHMgY2FuIHNheSB3aGV0aGVyCithbiBvcGVyYW5kIG1heSBiZSBpbiBhIHJlZ2lzdGVyLCBhbmQgd2hpY2gga2luZHMgb2YgcmVnaXN0ZXI7IHdoZXRoZXIgdGhlCitvcGVyYW5kIGNhbiBiZSBhIG1lbW9yeSByZWZlcmVuY2UsIGFuZCB3aGljaCBraW5kcyBvZiBhZGRyZXNzOyB3aGV0aGVyIHRoZQorb3BlcmFuZCBtYXkgYmUgYW4gaW1tZWRpYXRlIGNvbnN0YW50LCBhbmQgd2hpY2ggcG9zc2libGUgdmFsdWVzIGl0IG1heQoraGF2ZS4gIENvbnN0cmFpbnRzIGNhbiBhbHNvIHJlcXVpcmUgdHdvIG9wZXJhbmRzIHRvIG1hdGNoLiAKK1NpZGUtZWZmZWN0cyBhcmVuJ3QgYWxsb3dlZCBpbiBvcGVyYW5kcyBvZiBpbmxpbmUgPGNvZGU+YXNtPC9jb2RlPiwgdW5sZXNzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbnN0cmFpbnRzIGFyZSB1c2VkLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZQordGhhdCB0aGUgc2lkZS1lZmZlY3RzIHdpbGwgaGFwcGVuIGV4YWN0bHkgb25jZSBpbiBhbiBpbnN0cnVjdGlvbiB0aGF0IGNhbiB1cGRhdGUKK3RoZSBhZGRyZXNzaW5nIHJlZ2lzdGVyLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+OiAgIEJhc2ljIHVzZSBvZiBjb25zdHJhaW50cy4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNdWx0aV8wMDJkQWx0ZXJuYXRpdmUuaHRtbCNNdWx0aV8wMDJkQWx0ZXJuYXRpdmUiPk11bHRpLUFsdGVybmF0aXZlPC9hPjogICAgV2hlbiBhbiBpbnNuIGhhcyB0d28gYWx0ZXJuYXRpdmUgY29uc3RyYWludC1wYXR0ZXJucy4gCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiPk1vZGlmaWVyczwvYT46ICAgICAgICAgICAgTW9yZSBwcmVjaXNlIGNvbnRyb2wgb3ZlciBlZmZlY3RzIG9mIGNvbnN0cmFpbnRzLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9Ik1hY2hpbmUtQ29uc3RyYWludHMuaHRtbCNNYWNoaW5lLUNvbnN0cmFpbnRzIj5NYWNoaW5lIENvbnN0cmFpbnRzPC9hPjogIFNwZWNpYWwgY29uc3RyYWludHMgZm9yIHNvbWUgcGFydGljdWxhciBtYWNoaW5lcy4gCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db25zdHJ1Y3RpbmctQ2FsbHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3NmNhMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwKQEAgLTAsMCArMSwxNzQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbnN0cnVjdGluZyBDYWxscyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJOZXN0ZWQtRnVuY3Rpb25zLmh0bWwjTmVzdGVkLUZ1bmN0aW9ucyIgdGl0bGU9Ik5lc3RlZCBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUeXBlb2YuaHRtbCNUeXBlb2YiIHRpdGxlPSJUeXBlb2YiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29uc3RydWN0aW5nLUNhbGxzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlR5cGVvZi5odG1sI1R5cGVvZiI+VHlwZW9mPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTmVzdGVkLUZ1bmN0aW9ucy5odG1sI05lc3RlZC1GdW5jdGlvbnMiPk5lc3RlZCBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNSBDb25zdHJ1Y3RpbmcgRnVuY3Rpb24gQ2FsbHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb25zdHJ1Y3RpbmctY2FsbHMtMjQxNSI+PC9hPjxhIG5hbWU9ImluZGV4LWZvcndhcmRpbmctY2FsbHMtMjQxNiI+PC9hPgorVXNpbmcgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3csIHlvdSBjYW4gcmVjb3JkCit0aGUgYXJndW1lbnRzIGEgZnVuY3Rpb24gcmVjZWl2ZWQsIGFuZCBjYWxsIGFub3RoZXIgZnVuY3Rpb24KK3dpdGggdGhlIHNhbWUgYXJndW1lbnRzLCB3aXRob3V0IGtub3dpbmcgdGhlIG51bWJlciBvciB0eXBlcworb2YgdGhlIGFyZ3VtZW50cy4KKworIDxwPllvdSBjYW4gYWxzbyByZWNvcmQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwsCithbmQgbGF0ZXIgcmV0dXJuIHRoYXQgdmFsdWUsIHdpdGhvdXQga25vd2luZyB3aGF0IGRhdGEgdHlwZQordGhlIGZ1bmN0aW9uIHRyaWVkIHRvIHJldHVybiAoYXMgbG9uZyBhcyB5b3VyIGNhbGxlciBleHBlY3RzCit0aGF0IGRhdGEgdHlwZSkuCisKKyA8cD5Ib3dldmVyLCB0aGVzZSBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGludGVyYWN0IGJhZGx5IHdpdGggc29tZQorc29waGlzdGljYXRlZCBmZWF0dXJlcyBvciBvdGhlciBleHRlbnNpb25zIG9mIHRoZSBsYW5ndWFnZS4gIEl0CitpcywgdGhlcmVmb3JlLCBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoZW0gb3V0c2lkZSB2ZXJ5IHNpbXBsZQorZnVuY3Rpb25zIGFjdGluZyBhcyBtZXJlIGZvcndhcmRlcnMgZm9yIHRoZWlyIGFyZ3VtZW50cy4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCAqIDxiPl9fYnVpbHRpbl9hcHBseV9hcmdzPC9iPiAoKTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmFwcGx5XzAwNWZhcmdzLTI0MTciPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGJ1aWx0LWluIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGRhdGEKK2Rlc2NyaWJpbmcgaG93IHRvIHBlcmZvcm0gYSBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIGFzIGFyZSBwYXNzZWQKK3RvIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgorCisgICAgICA8cD5UaGUgZnVuY3Rpb24gc2F2ZXMgdGhlIGFyZyBwb2ludGVyIHJlZ2lzdGVyLCBzdHJ1Y3R1cmUgdmFsdWUgYWRkcmVzcywKK2FuZCBhbGwgcmVnaXN0ZXJzIHRoYXQgbWlnaHQgYmUgdXNlZCB0byBwYXNzIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uCitpbnRvIGEgYmxvY2sgb2YgbWVtb3J5IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suICBUaGVuIGl0IHJldHVybnMgdGhlCithZGRyZXNzIG9mIHRoYXQgYmxvY2suIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCAqIDxiPl9fYnVpbHRpbl9hcHBseTwvYj4gKDx2YXI+dm9pZCA8L3Zhcj4oPHZhcj4qZnVuY3Rpb248L3Zhcj4pKCk8dmFyPiwgdm9pZCAqYXJndW1lbnRzLCBzaXplX3Qgc2l6ZTwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZhcHBseS0yNDE4Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiBpbnZva2VzIDx2YXI+ZnVuY3Rpb248L3Zhcj4KK3dpdGggYSBjb3B5IG9mIHRoZSBwYXJhbWV0ZXJzIGRlc2NyaWJlZCBieSA8dmFyPmFyZ3VtZW50czwvdmFyPgorYW5kIDx2YXI+c2l6ZTwvdmFyPi4KKworICAgICAgPHA+VGhlIHZhbHVlIG9mIDx2YXI+YXJndW1lbnRzPC92YXI+IHNob3VsZCBiZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKzxjb2RlPl9fYnVpbHRpbl9hcHBseV9hcmdzPC9jb2RlPi4gIFRoZSBhcmd1bWVudCA8dmFyPnNpemU8L3Zhcj4gc3BlY2lmaWVzIHRoZSBzaXplCitvZiB0aGUgc3RhY2sgYXJndW1lbnQgZGF0YSwgaW4gYnl0ZXMuCisKKyAgICAgIDxwPlRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gZGF0YSBkZXNjcmliaW5nCitob3cgdG8gcmV0dXJuIHdoYXRldmVyIHZhbHVlIGlzIHJldHVybmVkIGJ5IDx2YXI+ZnVuY3Rpb248L3Zhcj4uICBUaGUgZGF0YQoraXMgc2F2ZWQgaW4gYSBibG9jayBvZiBtZW1vcnkgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4KKworICAgICAgPHA+SXQgaXMgbm90IGFsd2F5cyBzaW1wbGUgdG8gY29tcHV0ZSB0aGUgcHJvcGVyIHZhbHVlIGZvciA8dmFyPnNpemU8L3Zhcj4uICBUaGUKK3ZhbHVlIGlzIHVzZWQgYnkgPGNvZGU+X19idWlsdGluX2FwcGx5PC9jb2RlPiB0byBjb21wdXRlIHRoZSBhbW91bnQgb2YgZGF0YQordGhhdCBzaG91bGQgYmUgcHVzaGVkIG9uIHRoZSBzdGFjayBhbmQgY29waWVkIGZyb20gdGhlIGluY29taW5nIGFyZ3VtZW50CithcmVhLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3JldHVybjwvYj4gKDx2YXI+dm9pZCAqcmVzdWx0PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJldHVybi0yNDE5Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBkZXNjcmliZWQgYnkgPHZhcj5yZXN1bHQ8L3Zhcj4gZnJvbQordGhlIGNvbnRhaW5pbmcgZnVuY3Rpb24uICBZb3Ugc2hvdWxkIHNwZWNpZnksIGZvciA8dmFyPnJlc3VsdDwvdmFyPiwgYSB2YWx1ZQorcmV0dXJuZWQgYnkgPGNvZGU+X19idWlsdGluX2FwcGx5PC9jb2RlPi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiAgPGI+X19idWlsdGluX3ZhX2FyZ19wYWNrPC9iPiAoKTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnZhXzAwNWZhcmdfMDA1ZnBhY2stMjQyMCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gcmVwcmVzZW50cyBhbGwgYW5vbnltb3VzIGFyZ3VtZW50cyBvZiBhbiBpbmxpbmUKK2Z1bmN0aW9uLiAgSXQgY2FuIGJlIHVzZWQgb25seSBpbiBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgYXJlIGFsd2F5cworaW5saW5lZCwgbmV2ZXIgY29tcGlsZWQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiwgc3VjaCBhcyB0aG9zZSB1c2luZworPGNvZGU+X19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fKSk8L2NvZGU+IG9yCis8Y29kZT5fX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKTwvY29kZT4gZXh0ZXJuIGlubGluZSBmdW5jdGlvbnMuIAorSXQgbXVzdCBiZSBvbmx5IHBhc3NlZCBhcyBsYXN0IGFyZ3VtZW50IHRvIHNvbWUgb3RoZXIgZnVuY3Rpb24KK3dpdGggdmFyaWFibGUgYXJndW1lbnRzLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHdyaXRpbmcgc21hbGwgd3JhcHBlcgoraW5saW5lcyBmb3IgdmFyaWFibGUgYXJndW1lbnQgZnVuY3Rpb25zLCB3aGVuIHVzaW5nIHByZXByb2Nlc3NvcgorbWFjcm9zIGlzIHVuZGVzaXJhYmxlLiAgRm9yIGV4YW1wbGU6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGV4dGVybiBpbnQgbXlwcmludGYgKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICBleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpIGludAorICAgICAgICAgIG15cHJpbnRmIChGSUxFICpmLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgciA9IGZwcmludGYgKGYsICJteXByaW50ZjogIik7CisgICAgICAgICAgICBpZiAociAmbHQ7IDApCisgICAgICAgICAgICAgIHJldHVybiByOworICAgICAgICAgICAgaW50IHMgPSBmcHJpbnRmIChmLCBmb3JtYXQsIF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKSk7CisgICAgICAgICAgICBpZiAocyAmbHQ7IDApCisgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICAgICAgcmV0dXJuIHIgKyBzOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBzaXplX3QgPGI+X19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbjwvYj4gKCk8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZ2YV8wMDVmYXJnXzAwNWZwYWNrXzAwNWZsZW4tMjQyMSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFub255bW91cyBhcmd1bWVudHMgb2YKK2FuIGlubGluZSBmdW5jdGlvbi4gIEl0IGNhbiBiZSB1c2VkIG9ubHkgaW4gaW5saW5lIGZ1bmN0aW9ucyB0aGF0CithcmUgYWx3YXlzIGlubGluZWQsIG5ldmVyIGNvbXBpbGVkIGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24sIHN1Y2gKK2FzIHRob3NlIHVzaW5nIDxjb2RlPl9fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXykpPC9jb2RlPiBvcgorPGNvZGU+X19hdHRyaWJ1dGVfXyAoKF9fZ251X2lubGluZV9fKSk8L2NvZGU+IGV4dGVybiBpbmxpbmUgZnVuY3Rpb25zLiAKK0ZvciBleGFtcGxlIGZvbGxvd2luZyBkb2VzIGxpbmstIG9yIHJ1bi10aW1lIGNoZWNraW5nIG9mIG9wZW4KK2FyZ3VtZW50cyBmb3Igb3B0aW1pemVkIGNvZGU6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICNpZmRlZiBfX09QVElNSVpFX18KKyAgICAgICAgICBleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fKSkgaW50CisgICAgICAgICAgbXlvcGVuIChjb25zdCBjaGFyICpwYXRoLCBpbnQgb2ZsYWcsIC4uLikKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoX19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbiAoKSAmZ3Q7IDEpCisgICAgICAgICAgICAgIHdhcm5fb3Blbl90b29fbWFueV9hcmd1bWVudHMgKCk7CisgICAgICAgICAgCisgICAgICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKG9mbGFnKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgob2ZsYWcgJmFtcDsgT19DUkVBVCkgIT0gMCAmYW1wOyZhbXA7IF9fYnVpbHRpbl92YV9hcmdfcGFja19sZW4gKCkgJmx0OyAxKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3YXJuX29wZW5fbWlzc2luZ19tb2RlICgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19vcGVuXzIgKHBhdGgsIG9mbGFnKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlbiAocGF0aCwgb2ZsYWcsIF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVuICgpICZsdDsgMSkKKyAgICAgICAgICAgICAgcmV0dXJuIF9fb3Blbl8yIChwYXRoLCBvZmxhZyk7CisgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3BlbiAocGF0aCwgb2ZsYWcsIF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKSk7CisgICAgICAgICAgfQorICAgICAgICAgICNlbmRpZgorPC9wcmU+CisgICAgICA8L2Jsb2NrcXVvdGU+PC9kaXY+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvbnRyaWJ1dGluZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db250cmlidXRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGQ3ZDRhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db250cmlidXRpbmcuaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db250cmlidXRpbmcgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTZXJ2aWNlLmh0bWwjU2VydmljZSIgdGl0bGU9IlNlcnZpY2UiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGdW5kaW5nLmh0bWwjRnVuZGluZyIgdGl0bGU9IkZ1bmRpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29udHJpYnV0aW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZ1bmRpbmcuaHRtbCNGdW5kaW5nIj5GdW5kaW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU2VydmljZS5odG1sI1NlcnZpY2UiPlNlcnZpY2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MTQgQ29udHJpYnV0aW5nIHRvIEdDQyBEZXZlbG9wbWVudDwvaDI+CisKKzxwPklmIHlvdSB3b3VsZCBsaWtlIHRvIGhlbHAgcHJldGVzdCBHQ0MgcmVsZWFzZXMgdG8gYXNzdXJlIHRoZXkgd29yayB3ZWxsLAorY3VycmVudCBkZXZlbG9wbWVudCBzb3VyY2VzIGFyZSBhdmFpbGFibGUgYnkgU1ZOIChzZWUKKzxhIGhyZWY9Imh0dHA6Ly9nY2MuZ251Lm9yZy9zdm4uaHRtbCI+aHR0cDovL2djYy5nbnUub3JnL3N2bi5odG1sPC9hPikuICBTb3VyY2UgYW5kIGJpbmFyeSBzbmFwc2hvdHMgYXJlCithbHNvIGF2YWlsYWJsZSBmb3IgRlRQOyBzZWUgPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL3NuYXBzaG90cy5odG1sIj5odHRwOi8vZ2NjLmdudS5vcmcvc25hcHNob3RzLmh0bWw8L2E+LgorCisgPHA+SWYgeW91IHdvdWxkIGxpa2UgdG8gd29yayBvbiBpbXByb3ZlbWVudHMgdG8gR0NDLCBwbGVhc2UgcmVhZCB0aGUKK2FkdmljZSBhdCB0aGVzZSBVUkxzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL2NvbnRyaWJ1dGUuaHRtbCI+aHR0cDovL2djYy5nbnUub3JnL2NvbnRyaWJ1dGUuaHRtbDwvYT4KKyAgICAgPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL2NvbnRyaWJ1dGV3aHkuaHRtbCI+aHR0cDovL2djYy5nbnUub3JnL2NvbnRyaWJ1dGV3aHkuaHRtbDwvYT4KKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+Zm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBtYWtlIHVzZWZ1bCBjb250cmlidXRpb25zIGFuZCBhdm9pZAorZHVwbGljYXRpb24gb2YgZWZmb3J0LiAgU3VnZ2VzdGVkIHByb2plY3RzIGFyZSBsaXN0ZWQgYXQKKzxhIGhyZWY9Imh0dHA6Ly9nY2MuZ251Lm9yZy9wcm9qZWN0cy8iPmh0dHA6Ly9nY2MuZ251Lm9yZy9wcm9qZWN0cy88L2E+LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db250cmlidXRvcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29udHJpYnV0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY3ZjRlNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvQ29udHJpYnV0b3JzLmh0bWwKQEAgLTAsMCArMSwxMjQyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db250cmlidXRvcnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiIHRpdGxlPSJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPcHRpb24tSW5kZXguaHRtbCNPcHRpb24tSW5kZXgiIHRpdGxlPSJPcHRpb24gSW5kZXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29udHJpYnV0b3JzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9wdGlvbi1JbmRleC5odG1sI09wdGlvbi1JbmRleCI+T3B0aW9uIEluZGV4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+Q29udHJpYnV0b3JzIHRvIEdDQzwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNvbnRyaWJ1dG9ycy0zNjA1Ij48L2E+CitUaGUgR0NDIHByb2plY3Qgd291bGQgbGlrZSB0byB0aGFuayBpdHMgbWFueSBjb250cmlidXRvcnMuICBXaXRob3V0IHRoZW0gdGhlCitwcm9qZWN0IHdvdWxkIG5vdCBoYXZlIGJlZW4gbmVhcmx5IGFzIHN1Y2Nlc3NmdWwgYXMgaXQgaGFzIGJlZW4uICBBbnkgb21pc3Npb25zCitpbiB0aGlzIGxpc3QgYXJlIGFjY2lkZW50YWwuICBGZWVsIGZyZWUgdG8gY29udGFjdAorPGEgaHJlZj0ibWFpbHRvOmxhd0ByZWRoYXQuY29tIj5sYXdAcmVkaGF0LmNvbTwvYT4gb3IgPGEgaHJlZj0ibWFpbHRvOmdlcmFsZEBwZmVpZmVyLmNvbSI+Z2VyYWxkQHBmZWlmZXIuY29tPC9hPiBpZiB5b3UgaGF2ZSBiZWVuIGxlZnQKK291dCBvciBzb21lIG9mIHlvdXIgY29udHJpYnV0aW9ucyBhcmUgbm90IGxpc3RlZC4gIFBsZWFzZSBrZWVwIHRoaXMgbGlzdCBpbgorYWxwaGFiZXRpY2FsIG9yZGVyLgorCisgICAgIDx1bD4KKzxsaT5BbmFsb2cgRGV2aWNlcyBoZWxwZWQgaW1wbGVtZW50IHRoZSBzdXBwb3J0IGZvciBjb21wbGV4IGRhdGEgdHlwZXMKK2FuZCBpdGVyYXRvcnMuCisKKyAgICAgPGxpPkpvaG4gRGF2aWQgQW5nbGluIGZvciB0aHJlYWRpbmctcmVsYXRlZCBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIHRvCitsaWJzdGRjKystdjMsIGFuZCB0aGUgSFAtVVggcG9ydC4KKworICAgICA8bGk+SmFtZXMgdmFuIEFydHNkYWxlbiB3cm90ZSB0aGUgY29kZSB0aGF0IG1ha2VzIGVmZmljaWVudCB1c2Ugb2YKK3RoZSBJbnRlbCA4MDM4NyByZWdpc3RlciBzdGFjay4KKworICAgICA8bGk+QWJyYW1vIGFuZCBSb2JlcnRvIEJhZ25hcmEgZm9yIHRoZSBTeXNWNjggTW90b3JvbGEgMzMwMCBEZWx0YSBTZXJpZXMKK3BvcnQuCisKKyAgICAgPGxpPkFsYXNkYWlyIEJhaXJkIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KKworICAgICA8bGk+R2lvdmFubmkgQmFqbyBmb3IgYW5hbHl6aW5nIGxvdHMgb2YgY29tcGxpY2F0ZWQgQysrIHByb2JsZW0gcmVwb3J0cy4KKworICAgICA8bGk+UGV0ZXIgQmFyYWRhIGZvciBoaXMgd29yayB0byBpbXByb3ZlIGNvZGUgZ2VuZXJhdGlvbiBmb3IgbmV3CitDb2xkRmlyZSBjb3Jlcy4KKworICAgICA8bGk+R2VyYWxkIEJhdW1nYXJ0bmVyIGFkZGVkIHRoZSBzaWduYXR1cmUgZXh0ZW5zaW9uIHRvIHRoZSBDKysgZnJvbnQgZW5kLgorCisgICAgIDxsaT5Hb2RtYXIgQmFjayBmb3IgaGlzIEphdmEgaW1wcm92ZW1lbnRzIGFuZCBlbmNvdXJhZ2VtZW50LgorCisgICAgIDxsaT5TY290dCBCYW1icm91Z2ggZm9yIGhlbHAgcG9ydGluZyB0aGUgSmF2YSBjb21waWxlci4KKworICAgICA8bGk+V29sZmdhbmcgQmFuZ2VydGggZm9yIHByb2Nlc3NpbmcgdG9ucyBvZiBidWcgcmVwb3J0cy4KKworICAgICA8bGk+Sm9uIEJlbmlzdG9uIGZvciBoaXMgTWljcm9zb2Z0IFdpbmRvd3MgcG9ydCBvZiBKYXZhIGFuZCBwb3J0IHRvIExhdHRpY2UgTWljbzMyLgorCisgICAgIDxsaT5EYW5pZWwgQmVybGluIGZvciBiZXR0ZXIgRFdBUkYyIHN1cHBvcnQsIGZhc3Rlci9iZXR0ZXIgb3B0aW1pemF0aW9ucywKK2ltcHJvdmVkIGFsaWFzIGFuYWx5c2lzLCBwbHVzIG1pZ3JhdGluZyBHQ0MgdG8gQnVnemlsbGEuCisKKyAgICAgPGxpPkdlb2ZmIEJlcnJ5IGZvciBoaXMgSmF2YSBvYmplY3Qgc2VyaWFsaXphdGlvbiB3b3JrIGFuZCB2YXJpb3VzIHBhdGNoZXMuCisKKyAgICAgPGxpPkRhdmlkIEJpbmRlcm1hbiB0ZXN0cyB3ZWVrbHkgc25hcHNob3RzIG9mIEdDQyB0cnVuayBhZ2FpbnN0IEZlZG9yYSBSYXdoaWRlCitmb3Igc2V2ZXJhbCBhcmNoaXRlY3R1cmVzLgorCisgICAgIDxsaT5Vcm9zIEJpemphayBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHg4NyBtYXRoIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQKK2ZvciB2YXJpb3VzIG1pZGRsZSBlbmQgYW5kIGkzODYgYmFjayBlbmQgaW1wcm92ZW1lbnRzIGFuZCBidWcgZml4ZXMuCisKKyAgICAgPGxpPkVyaWMgQmxha2UgZm9yIGhlbHBpbmcgdG8gbWFrZSBHQ0ogYW5kIGxpYmdjaiBjb25mb3JtIHRvIHRoZQorc3BlY2lmaWNhdGlvbnMuCisKKyAgICAgPGxpPkphbm5lIEJsb21xdmlzdCBmb3IgY29udHJpYnV0aW9ucyB0byBHTlUgRm9ydHJhbi4KKworICAgICA8bGk+U2VnaGVyIEJvZXNzZW5rb29sIGZvciB2YXJpb3VzIGZpeGVzLgorCisgICAgIDxsaT5IYW5zLUouIEJvZWhtIGZvciBoaXMgPGEgaHJlZj0iaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0hhbnNfQm9laG0vZ2MvIj5nYXJiYWdlIGNvbGxlY3RvcjwvYT4sIElBLTY0IGxpYmZmaSBwb3J0LCBhbmQgb3RoZXIgSmF2YSB3b3JrLgorCisgICAgIDxsaT5OZWlsIEJvb3RoIGZvciB3b3JrIG9uIGNwcGxpYiwgbGFuZyBob29rcywgZGVidWcgaG9va3MgYW5kIG90aGVyCittaXNjZWxsYW5lb3VzIGNsZWFuLXVwcy4KKworICAgICA8bGk+U3RldmVuIEJvc3NjaGVyIGZvciBpbnRlZ3JhdGluZyB0aGUgR05VIEZvcnRyYW4gZnJvbnQgZW5kIGludG8gR0NDIGFuZCBmb3IKK2NvbnRyaWJ1dGluZyB0byB0aGUgdHJlZS1zc2EgYnJhbmNoLgorCisgICAgIDxsaT5FcmljIEJvdGNhem91IGZvciBmaXhpbmcgbWlkZGxlLSBhbmQgYmFja2VuZCBidWdzIGxlZnQgYW5kIHJpZ2h0LgorCisgICAgIDxsaT5QZXIgQm90aG5lciBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSBhbmQgdmFyaW91cworaW1wcm92ZW1lbnRzIHRvIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3Igc3VwcG9ydGluZyBuZXcgbGFuZ3VhZ2VzLiAgQ2hpbGwKK2Zyb250IGVuZCBpbXBsZW1lbnRhdGlvbi4gIEluaXRpYWwgaW1wbGVtZW50YXRpb25zIG9mCitjcHBsaWIsIGZpeC1oZWFkZXIsIGNvbmZpZy5ndWVzcywgbGliaW8sIGFuZCBwYXN0IEMrKyBsaWJyYXJ5IChsaWJnKyspCittYWludGFpbmVyLiAgRHJlYW1pbmcgdXAsIGRlc2lnbmluZyBhbmQgaW1wbGVtZW50aW5nIG11Y2ggb2YgR0NKLgorCisgICAgIDxsaT5EZXZvbiBCb3dlbiBoZWxwZWQgcG9ydCBHQ0MgdG8gdGhlIFRhaG9lLgorCisgICAgIDxsaT5Eb24gQm93bWFuIGZvciBtaXBzLXZ4d29ya3MgY29udHJpYnV0aW9ucy4KKworICAgICA8bGk+RGF2ZSBCcm9sbGV5IGZvciB3b3JrIG9uIGNwcGxpYiBhbmQgQ2hpbGwuCisKKyAgICAgPGxpPlBhdWwgQnJvb2sgZm9yIHdvcmsgb24gdGhlIEFSTSBhcmNoaXRlY3R1cmUgYW5kIG1haW50YWluaW5nIEdOVSBGb3J0cmFuLgorCisgICAgIDxsaT5Sb2JlcnQgQnJvd24gaW1wbGVtZW50ZWQgdGhlIHN1cHBvcnQgZm9yIEVuY29yZSAzMjAwMCBzeXN0ZW1zLgorCisgICAgIDxsaT5DaHJpc3RpYW4gQnJ1ZWwgZm9yIGltcHJvdmVtZW50cyB0byBsb2NhbCBzdG9yZSBlbGltaW5hdGlvbi4KKworICAgICA8bGk+SGVybWFuIEEuSi4gdGVuIEJydWdnZSBmb3IgdmFyaW91cyBmaXhlcy4KKworICAgICA8bGk+Sm9lcmcgQnJ1bnNtYW5uIGZvciBKYXZhIGNvbXBpbGVyIGhhY2tpbmcgYW5kIGhlbHAgd2l0aCB0aGUgR0NKIEZBUS4KKworICAgICA8bGk+Sm9lIEJ1Y2sgZm9yIGhpcyBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUuCisKKyAgICAgPGxpPkNyYWlnIEJ1cmxleSBmb3IgbGVhZGVyc2hpcCBvZiB0aGUgRzc3IEZvcnRyYW4gZWZmb3J0LgorCisgICAgIDxsaT5TdGVwaGFuIEJ1eXMgZm9yIGNvbnRyaWJ1dGluZyBEb3h5Z2VuIG5vdGVzIGZvciBsaWJzdGRjKysuCisKKyAgICAgPGxpPlBhb2xvIENhcmxpbmkgZm9yIGxpYnN0ZGMrKyB3b3JrOiBsb3RzIG9mIGVmZmljaWVuY3kgaW1wcm92ZW1lbnRzIHRvCit0aGUgQysrIHN0cmluZ3MsIHN0cmVhbWJ1ZnMgYW5kIGZvcm1hdHRlZCBJL08sIGhhcmQgZGV0ZWN0aXZlIHdvcmsgb24KK3RoZSBmcnVzdHJhdGluZyBsb2NhbGl6YXRpb24gaXNzdWVzLCBhbmQga2VlcGluZyB1cCB3aXRoIHRoZSBwcm9ibGVtIHJlcG9ydHMuCisKKyAgICAgPGxpPkpvaG4gQ2FyciBmb3IgaGlzIGFsaWFzIHdvcmssIFNQQVJDIGhhY2tpbmcsIGluZnJhc3RydWN0dXJlIGltcHJvdmVtZW50cywKK3ByZXZpb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgbG9vcCBvcHRpbWl6YXRpb25zLCBldGMuCisKKyAgICAgPGxpPlN0ZXBoYW5lIENhcnJleiBmb3IgNjhIQzExIGFuZCA2OEhDMTIgcG9ydHMuCisKKyAgICAgPGxpPlN0ZXZlIENoYW1iZXJsYWluIGZvciBzdXBwb3J0IGZvciB0aGUgUmVuZXNhcyBTSCBhbmQgSDggcHJvY2Vzc29ycworYW5kIHRoZSBQaWNvSmF2YSBwcm9jZXNzb3IsIGFuZCBmb3IgR0NKIGNvbmZpZyBmaXhlcy4KKworICAgICA8bGk+R2xlbm4gQ2hhbWJlcnMgZm9yIGhlbHAgd2l0aCB0aGUgR0NKIEZBUS4KKworICAgICA8bGk+Sm9obi1NYXJjIENoYW5kb25pYSBmb3IgdmFyaW91cyBsaWJnY2ogcGF0Y2hlcy4KKworICAgICA8bGk+RGVuaXMgQ2hlcnR5a292IGZvciBjb250cmlidXRpbmcgYW5kIG1haW50YWluaW5nIHRoZSBBVlIgcG9ydCwgdGhlIGZpcnN0IEdDQyBwb3J0Citmb3IgYW4gOC1iaXQgYXJjaGl0ZWN0dXJlLgorCisgICAgIDxsaT5TY290dCBDaHJpc3RsZXkgZm9yIGhpcyBPYmplY3RpdmUtQyBjb250cmlidXRpb25zLgorCisgICAgIDxsaT5FcmljIENocmlzdG9waGVyIGZvciBoaXMgSmF2YSBwb3J0aW5nIGhlbHAgYW5kIGNsZWFuLXVwcy4KKworICAgICA8bGk+QnJhbmtvIENpYmVqIGZvciBtb3JlIHdhcm5pbmcgY29udHJpYnV0aW9ucy4KKworICAgICA8bGk+VGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvIj5HTlUgQ2xhc3NwYXRoIHByb2plY3Q8L2E+Citmb3IgYWxsIG9mIHRoZWlyIG1lcmdlZCBydW50aW1lIGNvZGUuCisKKyAgICAgPGxpPk5pY2sgQ2xpZnRvbiBmb3IgYXJtLCBtY29yZSwgZnIzMCwgdjg1MCwgbTMyciwgcnggd29yaywKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGVscDwvc3Bhbj48L3NhbXA+LCBhbmQgb3RoZXIgcmFuZG9tIGhhY2tpbmcuCisKKyAgICAgPGxpPk1pY2hhZWwgQ29vayBmb3IgbGlic3RkYysrIGNsZWFudXAgcGF0Y2hlcyB0byByZWR1Y2Ugd2FybmluZ3MuCisKKyAgICAgPGxpPlIuIEtlbGxleSBDb29rIGZvciBtYWtpbmcgR0NDIGJ1aWxkYWJsZSBmcm9tIGEgcmVhZC1vbmx5IGRpcmVjdG9yeSBhcword2VsbCBhcyBvdGhlciBtaXNjZWxsYW5lb3VzIGJ1aWxkIHByb2Nlc3MgYW5kIGRvY3VtZW50YXRpb24gY2xlYW4tdXBzLgorCisgICAgIDxsaT5SYWxmIENvcnNlcGl1cyBmb3IgU0ggdGVzdGluZyBhbmQgbWlub3IgYnVnIGZpeGluZy4KKworICAgICA8bGk+U3RhbiBDb3ggZm9yIGNhcmUgYW5kIGZlZWRpbmcgb2YgdGhlIHg4NiBwb3J0IGFuZCBsb3RzIG9mIGJlaGluZAordGhlIHNjZW5lcyBoYWNraW5nLgorCisgICAgIDxsaT5BbGV4IENyYWluIHByb3ZpZGVkIGNoYW5nZXMgZm9yIHRoZSAzYjEuCisKKyAgICAgPGxpPklhbiBEYWxsIGZvciBtYWpvciBpbXByb3ZlbWVudHMgdG8gdGhlIE5TMzJrIHBvcnQuCisKKyAgICAgPGxpPlBhdWwgRGFsZSBmb3IgaGlzIHdvcmsgdG8gYWRkIHVDbGludXggcGxhdGZvcm0gc3VwcG9ydCB0byB0aGUKK202OGsgYmFja2VuZC4KKworICAgICA8bGk+RGFyaW8gRGFyaW9sIGNvbnRyaWJ1dGVkIHRoZSBmb3VyIHZhcmlldGllcyBvZiBzYW1wbGUgcHJvZ3JhbXMKK3RoYXQgcHJpbnQgYSBjb3B5IG9mIHRoZWlyIHNvdXJjZS4KKworICAgICA8bGk+UnVzc2VsbCBEYXZpZHNvbiBmb3IgZnN0cmVhbSBhbmQgc3RyaW5nc3RyZWFtIGZpeGVzIGluIGxpYnN0ZGMrKy4KKworICAgICA8bGk+QnVkIERhdmlzIGZvciB3b3JrIG9uIHRoZSBHNzcgYW5kIEdOVSBGb3J0cmFuIGNvbXBpbGVycy4KKworICAgICA8bGk+TW8gRGVKb25nIGZvciBHQ0ogYW5kIGxpYmdjaiBidWcgZml4ZXMuCisKKyAgICAgPGxpPkRKIERlbG9yaWUgZm9yIHRoZSBESkdQUCBwb3J0LCBidWlsZCBhbmQgbGliaWJlcnR5IG1haW50ZW5hbmNlLAordmFyaW91cyBidWcgZml4ZXMsIGFuZCB0aGUgTTMyQywgTWVQLCBhbmQgUkw3OCBwb3J0cy4KKworICAgICA8bGk+QXJuYXVkIERlc2l0dGVyIGZvciBoZWxwaW5nIHRvIGRlYnVnIEdOVSBGb3J0cmFuLgorCisgICAgIDxsaT5HYWJyaWVsIERvcyBSZWlzIGZvciBjb250cmlidXRpb25zIHRvIEcrKywgY29udHJpYnV0aW9ucyBhbmQKK21haW50ZW5hbmNlIG9mIEdDQyBkaWFnbm9zdGljcyBpbmZyYXN0cnVjdHVyZSwgbGlic3RkYysrLXYzLAoraW5jbHVkaW5nIDxjb2RlPnZhbGFycmF5Jmx0OyZndDs8L2NvZGU+LCA8Y29kZT5jb21wbGV4Jmx0OyZndDs8L2NvZGU+LCBtYWludGFpbmluZyB0aGUgbnVtZXJpY3MgbGlicmFyeQorKGluY2x1ZGluZyB0aGF0IHBlc2t5IDxjb2RlPiZsdDtsaW1pdHMmZ3Q7PC9jb2RlPiA6LSkgYW5kIGtlZXBpbmcgdXAtdG8tZGF0ZSBhbnl0aGluZwordG8gZG8gd2l0aCBudW1iZXJzLgorCisgICAgIDxsaT5VbHJpY2ggRHJlcHBlciBmb3IgaGlzIHdvcmsgb24gZ2xpYmMsIHRlc3Rpbmcgb2YgR0NDIHVzaW5nIGdsaWJjLCBJU08gQzk5CitzdXBwb3J0LCBDRkcgZHVtcGluZyBzdXBwb3J0LCBldGMuLCBwbHVzIHN1cHBvcnQgb2YgdGhlIEMrKyBydW50aW1lCitsaWJyYXJpZXMgaW5jbHVkaW5nIGZvciBhbGwga2luZHMgb2YgQyBpbnRlcmZhY2UgaXNzdWVzLCBjb250cmlidXRpbmcgYW5kCittYWludGFpbmluZyA8Y29kZT5jb21wbGV4Jmx0OyZndDs8L2NvZGU+LCBzYW5pdHkgY2hlY2tpbmcgYW5kIGRpc2J1cnNlbWVudCwgY29uZmlndXJhdGlvbgorYXJjaGl0ZWN0dXJlLCBsaWJpbyBtYWludGVuYW5jZSwgYW5kIGVhcmx5IG1hdGggd29yay4KKworICAgICA8bGk+WmRlbmVrIER2b3JhayBmb3IgYSBuZXcgbG9vcCB1bnJvbGxlciBhbmQgdmFyaW91cyBmaXhlcy4KKworICAgICA8bGk+TWljaGFlbCBFYWdlciBmb3IgaGlzIHdvcmsgb24gdGhlIFhpbGlueCBNaWNyb0JsYXplIHBvcnQuCisKKyAgICAgPGxpPlJpY2hhcmQgRWFybnNoYXcgZm9yIGhpcyBvbmdvaW5nIHdvcmsgd2l0aCB0aGUgQVJNLgorCisgICAgIDxsaT5EYXZpZCBFZGVsc29obiBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgb25nb2luZyB3b3JrCit3aXRoIHRoZSBSUzYwMDAvUG93ZXJQQyBwb3J0LCBoZWxwIGNsZWFuaW5nIHVwIEhhaWZhIGxvb3AgY2hhbmdlcywKK2RvaW5nIHRoZSBlbnRpcmUgQUlYIHBvcnQgb2YgbGlic3RkYysrIHdpdGggaGlzIGJhcmUgaGFuZHMsIGFuZCBmb3IKK2Vuc3VyaW5nIEdDQyBwcm9wZXJseSBrZWVwcyB3b3JraW5nIG9uIEFJWC4KKworICAgICA8bGk+S2V2aW4gRWRpZ2VyIGZvciB0aGUgZmxvYXRpbmcgcG9pbnQgZm9ybWF0dGluZyBvZiBudW1fcHV0Ojpkb19wdXQgaW4KK2xpYnN0ZGMrKy4KKworICAgICA8bGk+UGhpbCBFZHdhcmRzIGZvciBsaWJzdGRjKysgd29yayBpbmNsdWRpbmcgY29uZmlndXJhdGlvbiBoYWNrZXJ5LAorZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyLCBjaGllZiBicmVha2VyIG9mIHRoZSB3ZWIgcGFnZXMsIHRoZSBvY2Nhc2lvbmFsCitpb3N0cmVhbSBidWcgZml4LCBhbmQgd29yayBvbiBzaGFyZWQgbGlicmFyeSBzeW1ib2wgdmVyc2lvbmluZy4KKworICAgICA8bGk+UGF1bCBFZ2dlcnQgZm9yIHJhbmRvbSBoYWNraW5nIGFsbCBvdmVyIEdDQy4KKworICAgICA8bGk+TWFyayBFbGJyZWNodCBmb3IgdmFyaW91cyBESkdQUCBpbXByb3ZlbWVudHMsIGFuZCBmb3IgbGlic3RkYysrCitjb25maWd1cmF0aW9uIHN1cHBvcnQgZm9yIGxvY2FsZXMgYW5kIGZzdHJlYW0tcmVsYXRlZCBmaXhlcy4KKworICAgICA8bGk+VmFkaW0gRWdvcm92IGZvciBsaWJzdGRjKysgZml4ZXMgaW4gc3RyaW5ncywgc3RyZWFtYnVmcywgYW5kIGlvc3RyZWFtcy4KKworICAgICA8bGk+Q2hyaXN0aWFuIEVocmhhcmR0IGZvciBkZWFsaW5nIHdpdGggYnVnIHJlcG9ydHMuCisKKyAgICAgPGxpPkJlbiBFbGxpc3RvbiBmb3IgaGlzIHdvcmsgdG8gbW92ZSB0aGUgT2JqZWN0aXZlLUMgcnVudGltZSBpbnRvIGl0cworb3duIHN1YmRpcmVjdG9yeSBhbmQgZm9yIGhpcyB3b3JrIG9uIGF1dG9jb25mLgorCisgICAgIDxsaT5SZXZpdGFsIEVyZXMgZm9yIHdvcmsgb24gdGhlIFBvd2VyUEMgNzUwQ0wgcG9ydC4KKworICAgICA8bGk+TWFyYyBFc3BpZSBmb3IgT3BlbkJTRCBzdXBwb3J0LgorCisgICAgIDxsaT5Eb3VnIEV2YW5zIGZvciBtdWNoIG9mIHRoZSBnbG9iYWwgb3B0aW1pemF0aW9uIGZyYW1ld29yaywgYXJjLCBtMzJyLAorYW5kIFNQQVJDIHdvcmsuCisKKyAgICAgPGxpPkNocmlzdG9waGVyIEZheWxvciBmb3IgaGlzIHdvcmsgb24gdGhlIEN5Z3dpbiBwb3J0IGFuZCBmb3IgY2FyaW5nIGFuZAorZmVlZGluZyB0aGUgZ2NjLmdudS5vcmcgYm94IGFuZCBzYXZpbmcgaXRzIHVzZXJzIHRvbnMgb2Ygc3BhbS4KKworICAgICA8bGk+RnJlZCBGaXNoIGZvciBCZU9TIHN1cHBvcnQgYW5kIEFkYSBmaXhlcy4KKworICAgICA8bGk+SXZhbiBGb250ZXMgR2FyY2lhIGZvciB0aGUgUG9ydHVndWVzZSB0cmFuc2xhdGlvbiBvZiB0aGUgR0NKIEZBUS4KKworICAgICA8bGk+UGV0ZXIgR2Vyd2luc2tpIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcyBhbmQgdGhlIFBhc2NhbCBmcm9udCBlbmQuCisKKyAgICAgPGxpPkthdmVoIFIuIEdoYXppIGZvciBoaXMgZGlyZWN0aW9uIHZpYSB0aGUgc3RlZXJpbmcgY29tbWl0dGVlLCBhbWF6aW5nCit3b3JrIHRvIG1ha2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tVyAtV2FsbCAtVyogLVdlcnJvcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB1c2VmdWwsIGFuZAordGVzdGluZyBHQ0Mgb24gYSBwbGV0aG9yYSBvZiBwbGF0Zm9ybXMuICBLYXZlaCBleHRlbmRzIGhpcyBncmF0aXR1ZGUgdG8KK3RoZSBDQUlQIENlbnRlciBhdCBSdXRnZXJzIFVuaXZlcnNpdHkgZm9yIHByb3ZpZGluZyBoaW0gd2l0aCBjb21wdXRpbmcKK3Jlc291cmNlcyB0byB3b3JrIG9uIEZyZWUgU29mdHdhcmUgZnJvbSB0aGUgbGF0ZSAxOTgwcyB0byAyMDEwLgorCisgICAgIDxsaT5Kb2huIEdpbG1vcmUgZm9yIGEgZG9uYXRpb24gdG8gdGhlIEZTRiBlYXJtYXJrZWQgaW1wcm92aW5nIEdOVSBKYXZhLgorCisgICAgIDxsaT5KdWR5IEdvbGRiZXJnIGZvciBjKysgY29udHJpYnV0aW9ucy4KKworICAgICA8bGk+VG9yYmpvcm4gR3Jhbmx1bmQgZm9yIHZhcmlvdXMgZml4ZXMgYW5kIHRoZSBjLXRvcnR1cmUgdGVzdHN1aXRlLAorbXVsdGlwbHktIGFuZCBkaXZpZGUtYnktY29uc3RhbnQgb3B0aW1pemF0aW9uLCBpbXByb3ZlZCBsb25nIGxvbmcKK3N1cHBvcnQsIGltcHJvdmVkIGxlYWYgZnVuY3Rpb24gcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYW5kIGhpcyBkaXJlY3Rpb24KK3ZpYSB0aGUgc3RlZXJpbmcgY29tbWl0dGVlLgorCisgICAgIDxsaT5BbnRob255IEdyZWVuIGZvciBoaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4gY29udHJpYnV0aW9ucywgdGhlIG1veGllIHBvcnQsIGFuZAorSmF2YSBmcm9udCBlbmQgd29yay4KKworICAgICA8bGk+U3R1IEdyb3NzbWFuIGZvciBnZGIgaGFja2luZywgYWxsb3dpbmcgR0NKIGRldmVsb3BlcnMgdG8gZGVidWcgSmF2YSBjb2RlLgorCisgICAgIDxsaT5NaWNoYWVsIEsuIEdzY2h3aW5kIGNvbnRyaWJ1dGVkIHRoZSBwb3J0IHRvIHRoZSBQRFAtMTEuCisKKyAgICAgPGxpPlJpY2hhcmQgR3VlbnRoZXIgZm9yIGhpcyBvbmdvaW5nIG1pZGRsZS1lbmQgY29udHJpYnV0aW9ucyBhbmQgYnVnIGZpeGVzCithbmQgZm9yIHJlbGVhc2UgbWFuYWdlbWVudC4KKworICAgICA8bGk+Um9uIEd1aWxtZXR0ZSBpbXBsZW1lbnRlZCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnByb3RvaXplPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj51bnByb3RvaXplPC9zcGFuPjwvc2FtcD4KK3Rvb2xzLCB0aGUgc3VwcG9ydCBmb3IgRHdhcmYgc3ltYm9saWMgZGVidWdnaW5nIGluZm9ybWF0aW9uLCBhbmQgbXVjaCBvZgordGhlIHN1cHBvcnQgZm9yIFN5c3RlbSBWIFJlbGVhc2UgNC4gIEhlIGhhcyBhbHNvIHdvcmtlZCBoZWF2aWx5IG9uIHRoZQorSW50ZWwgMzg2IGFuZCA4NjAgc3VwcG9ydC4KKworICAgICA8bGk+U3VtYW50aCBHdW5kYXBhbmVuaSBmb3IgY29udHJpYnV0aW5nIHRoZSBDUjE2IHBvcnQuCisKKyAgICAgPGxpPk1vc3RhZmEgSGFnb2cgZm9yIFN3aW5nIE1vZHVsbyBTY2hlZHVsaW5nIChTTVMpIGFuZCBwb3N0IHJlbG9hZCBHQ1NFLgorCisgICAgIDxsaT5CcnVubyBIYWlibGUgZm9yIGltcHJvdmVtZW50cyBpbiB0aGUgcnVudGltZSBvdmVyaGVhZCBmb3IgRUgsIG5ldword2FybmluZ3MgYW5kIGFzc29ydGVkIGJ1ZyBmaXhlcy4KKworICAgICA8bGk+QW5kcmV3IEhhbGV5IGZvciBoaXMgYW1hemluZyBKYXZhIGNvbXBpbGVyIGFuZCBsaWJyYXJ5IGVmZm9ydHMuCisKKyAgICAgPGxpPkNocmlzIEhhbnNvbiBhc3Npc3RlZCBpbiBtYWtpbmcgR0NDIHdvcmsgb24gSFAtVVggZm9yIHRoZSA5MDAwIHNlcmllcyAzMDAuCisKKyAgICAgPGxpPk1pY2hhZWwgSGF5ZXMgZm9yIHZhcmlvdXMgdGhhbmtsZXNzIHdvcmsgaGUncyBkb25lIHRyeWluZyB0byBnZXQKK3RoZSBjMzAvYzQwIHBvcnRzIGZ1bmN0aW9uYWwuICBMb3RzIG9mIGxvb3AgYW5kIHVucm9sbCBpbXByb3ZlbWVudHMgYW5kCitmaXhlcy4KKworICAgICA8bGk+RGFyYSBIYXplZ2hpIGZvciB3YWRpbmcgdGhyb3VnaCBteXJpYWRzIG9mIHRhcmdldC1zcGVjaWZpYyBidWcgcmVwb3J0cy4KKworICAgICA8bGk+S2F0ZSBIZWRzdHJvbSBmb3Igc3Rha2luZyB0aGUgRzc3IGZvbGtzIHdpdGggYW4gaW5pdGlhbCB0ZXN0c3VpdGUuCisKKyAgICAgPGxpPlJpY2hhcmQgSGVuZGVyc29uIGZvciBoaXMgb25nb2luZyBTUEFSQywgYWxwaGEsIGlhMzIsIGFuZCBpYTY0IHdvcmssIGxvb3AKK29wdHMsIGFuZCBnZW5lcmFsbHkgZml4aW5nIGxvdHMgb2Ygb2xkIHByb2JsZW1zIHdlJ3ZlIGlnbm9yZWQgZm9yCit5ZWFycywgZmxvdyByZXdyaXRlIGFuZCBsb3RzIG9mIGZ1cnRoZXIgc3R1ZmYsIGluY2x1ZGluZyByZXZpZXdpbmcKK3RvbnMgb2YgcGF0Y2hlcy4KKworICAgICA8bGk+QWxkeSBIZXJuYW5kZXogZm9yIHdvcmtpbmcgb24gdGhlIFBvd2VyUEMgcG9ydCwgU0lNRCBzdXBwb3J0LCBhbmQKK3ZhcmlvdXMgZml4ZXMuCisKKyAgICAgPGxpPk5vYnV5dWtpIEhpa2ljaGkgb2YgU29mdHdhcmUgUmVzZWFyY2ggQXNzb2NpYXRlcywgVG9reW8sIGNvbnRyaWJ1dGVkCit0aGUgc3VwcG9ydCBmb3IgdGhlIFNvbnkgTkVXUyBtYWNoaW5lLgorCisgICAgIDxsaT5LYXp1IEhpcmF0YSBmb3IgY2FyaW5nIGFuZCBmZWVkaW5nIHRoZSBSZW5lc2FzIEg4LzMwMCBwb3J0IGFuZCB2YXJpb3VzIGZpeGVzLgorCisgICAgIDxsaT5LYXRoZXJpbmUgSG9sY29tYiBmb3Igd29yayBvbiBHTlUgRm9ydHJhbi4KKworICAgICA8bGk+TWFuZnJlZCBIb2xsc3RlaW4gZm9yIGhpcyBvbmdvaW5nIHdvcmsgdG8ga2VlcCB0aGUgbTg4ayBhbGl2ZSwgbG90cworb2YgdGVzdGluZyBhbmQgYnVnIGZpeGluZywgcGFydGljdWxhcmx5IG9mIEdDQyBjb25maWd1cnkgY29kZS4KKworICAgICA8bGk+U3RldmUgSG9sbWdyZW4gZm9yIE1hY2hUZW4gcGF0Y2hlcy4KKworICAgICA8bGk+TWF0IEhvc3RldHRlciBmb3Igd29yayBvbiB0aGUgVElMRS1HeCBhbmQgVElMRVBybyBwb3J0cy4KKworICAgICA8bGk+SmFuIEh1Ymlja2EgZm9yIGhpcyB4ODYgcG9ydCBpbXByb3ZlbWVudHMuCisKKyAgICAgPGxpPkZhbGsgSHVlZmZuZXIgZm9yIHdvcmtpbmcgb24gQyBhbmQgb3B0aW1pemF0aW9uIGJ1ZyByZXBvcnRzLgorCisgICAgIDxsaT5CZXJuYXJkbyBJbm5vY2VudGkgZm9yIGhpcyBtNjhrIHdvcmssIGluY2x1ZGluZyBtZXJnaW5nIG9mCitDb2xkRmlyZSBpbXByb3ZlbWVudHMgYW5kIHVDbGludXggc3VwcG9ydC4KKworICAgICA8bGk+Q2hyaXN0aWFuIElzZWxpIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KKworICAgICA8bGk+S2FtaWwgSXNrcmEgZm9yIGdlbmVyYWwgbTY4ayBoYWNraW5nLgorCisgICAgIDxsaT5MZWUgSXZlcnNvbiBmb3IgcmFuZG9tIGZpeGVzIGFuZCBNSVBTIHRlc3RpbmcuCisKKyAgICAgPGxpPkFuZHJlYXMgSmFlZ2VyIGZvciB0ZXN0aW5nIGFuZCBiZW5jaG1hcmtpbmcgb2YgR0NDIGFuZCB2YXJpb3VzIGJ1ZyBmaXhlcy4KKworICAgICA8bGk+SmFrdWIgSmVsaW5layBmb3IgaGlzIFNQQVJDIHdvcmsgYW5kIHNpYmxpbmcgY2FsbCBvcHRpbWl6YXRpb25zIGFzIHdlbGwKK2FzIGxvdHMgb2YgYnVnIGZpeGVzIGFuZCB0ZXN0IGNhc2VzLCBhbmQgZm9yIGltcHJvdmluZyB0aGUgSmF2YSBidWlsZAorc3lzdGVtLgorCisgICAgIDxsaT5KYW5pcyBKb2huc29uIGZvciBpYTY0IHRlc3RpbmcgYW5kIGZpeGVzLCBoZXIgcXVhbGl0eSBpbXByb3ZlbWVudAorc2lkZXRyYWNrcywgYW5kIHdlYiBwYWdlIG1haW50ZW5hbmNlLgorCisgICAgIDxsaT5LZWFuIEpvaG5zdG9uIGZvciBTQ08gT3BlblNlcnZlciBzdXBwb3J0IGFuZCB2YXJpb3VzIGZpeGVzLgorCisgICAgIDxsaT5UaW0gSm9zbGluZyBmb3IgdGhlIHNhbXBsZSBsYW5ndWFnZSB0cmVlbGFuZyBiYXNlZCBvcmlnaW5hbGx5IG9uIFJpY2hhcmQKK0tlbm5lcidzICZsZHF1bzt0b3kmcmRxdW87IGxhbmd1YWdlLgorCisgICAgIDxsaT5OaWNvbGFpIEpvc3V0dGlzIGZvciBhZGRpdGlvbmFsIGxpYnN0ZGMrKyBkb2N1bWVudGF0aW9uLgorCisgICAgIDxsaT5LbGF1cyBLYWVtcGYgZm9yIGhpcyBvbmdvaW5nIHdvcmsgdG8gbWFrZSBhbHBoYS12bXMgYSB2aWFibGUgdGFyZ2V0LgorCisgICAgIDxsaT5TdGV2ZW4gRy4gS2FyZ2wgZm9yIHdvcmsgb24gR05VIEZvcnRyYW4uCisKKyAgICAgPGxpPkRhdmlkIEthc2h0YW4gb2YgU1JJIGFkYXB0ZWQgR0NDIHRvIFZNUy4KKworICAgICA8bGk+UnlzemFyZCBLYWJhdGVrIGZvciBtYW55LCBtYW55IGxpYnN0ZGMrKyBidWcgZml4ZXMgYW5kIG9wdGltaXphdGlvbnMgb2YKK3N0cmluZ3MsIGVzcGVjaWFsbHkgbWVtYmVyIGZ1bmN0aW9ucywgYW5kIGZvciBhdXRvX3B0ciBmaXhlcy4KKworICAgICA8bGk+R2VvZmZyZXkgS2VhdGluZyBmb3IgaGlzIG9uZ29pbmcgd29yayB0byBtYWtlIHRoZSBQUEMgd29yayBmb3IgR05VL0xpbnV4CithbmQgaGlzIGF1dG9tYXRpYyByZWdyZXNzaW9uIHRlc3Rlci4KKworICAgICA8bGk+QnJlbmRhbiBLZWhvZSBmb3IgaGlzIG9uZ29pbmcgd29yayB3aXRoIEcrKyBhbmQgZm9yIGEgbG90IG9mIGVhcmx5IHdvcmsKK2luIGp1c3QgYWJvdXQgZXZlcnkgcGFydCBvZiBsaWJzdGRjKysuCisKKyAgICAgPGxpPk9saXZlciBNLiBLZWxsb2dnIG9mIERldXRzY2hlIEFlcm9zcGFjZSBjb250cmlidXRlZCB0aGUgcG9ydCB0byB0aGUKK01JTC1TVEQtMTc1MEEuCisKKyAgICAgPGxpPlJpY2hhcmQgS2VubmVyIG9mIHRoZSBOZXcgWW9yayBVbml2ZXJzaXR5IFVsdHJhY29tcHV0ZXIgUmVzZWFyY2gKK0xhYm9yYXRvcnkgd3JvdGUgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb25zIGZvciB0aGUgQU1EIDI5MDAwLCB0aGUgREVDCitBbHBoYSwgdGhlIElCTSBSVCBQQywgYW5kIHRoZSBJQk0gUlMvNjAwMCBhcyB3ZWxsIGFzIHRoZSBzdXBwb3J0IGZvcgoraW5zdHJ1Y3Rpb24gYXR0cmlidXRlcy4gIEhlIGFsc28gbWFkZSBjaGFuZ2VzIHRvIGJldHRlciBzdXBwb3J0IFJJU0MKK3Byb2Nlc3NvcnMgaW5jbHVkaW5nIGNoYW5nZXMgdG8gY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24sCitzdHJlbmd0aCByZWR1Y3Rpb24sIGZ1bmN0aW9uIGNhbGxpbmcgc2VxdWVuY2UgaGFuZGxpbmcsIGFuZCBjb25kaXRpb24KK2NvZGUgc3VwcG9ydCwgaW4gYWRkaXRpb24gdG8gZ2VuZXJhbGl6aW5nIHRoZSBjb2RlIGZvciBmcmFtZSBwb2ludGVyCitlbGltaW5hdGlvbiBhbmQgZGVsYXkgc2xvdCBzY2hlZHVsaW5nLiAgUmljaGFyZCBLZW5uZXIgd2FzIGFsc28gdGhlCitoZWFkIG1haW50YWluZXIgb2YgR0NDIGZvciBzZXZlcmFsIHllYXJzLgorCisgICAgIDxsaT5NdW1pdCBLaGFuIGZvciB2YXJpb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIEN5Z3dpbiBhbmQgTWluZ3czMiBwb3J0cyBhbmQKK21haW50YWluaW5nIGJpbmFyeSByZWxlYXNlcyBmb3IgTWljcm9zb2Z0IFdpbmRvd3MgaG9zdHMsIGFuZCBmb3IgbWFzc2l2ZSBsaWJzdGRjKysKK3BvcnRpbmcgd29yayB0byBDeWd3aW4vTWluZ3czMi4KKworICAgICA8bGk+Um9iaW4gS2lya2hhbSBmb3IgY3B1MzIgc3VwcG9ydC4KKworICAgICA8bGk+TWFyayBLbGVpbiBmb3IgUEEgaW1wcm92ZW1lbnRzLgorCisgICAgIDxsaT5UaG9tYXMgS29lbmlnIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KKworICAgICA8bGk+QnJ1Y2UgS29yYiBmb3IgdGhlIG5ldyBhbmQgaW1wcm92ZWQgZml4aW5jbHVkZXMgY29kZS4KKworICAgICA8bGk+QmVuamFtaW4gS29zbmlrIGZvciBoaXMgRysrIHdvcmsgYW5kIGZvciBsZWFkaW5nIHRoZSBsaWJzdGRjKystdjMgZWZmb3J0LgorCisgICAgIDxsaT5DaGFybGVzIExhQnJlYyBjb250cmlidXRlZCB0aGUgc3VwcG9ydCBmb3IgdGhlIEludGVncmF0ZWQgU29sdXRpb25zCis2ODAyMCBzeXN0ZW0uCisKKyAgICAgPGxpPkFzaGVyIExhbmd0b24gYW5kIE1pa2UgS3VtYmVyYSBmb3IgY29udHJpYnV0aW5nIENyYXkgcG9pbnRlciBzdXBwb3J0Cit0byBHTlUgRm9ydHJhbiwgYW5kIGZvciBvdGhlciBHTlUgRm9ydHJhbiBpbXByb3ZlbWVudHMuCisKKyAgICAgPGxpPkplZmYgTGF3IGZvciBoaXMgZGlyZWN0aW9uIHZpYSB0aGUgc3RlZXJpbmcgY29tbWl0dGVlLCBjb29yZGluYXRpbmcgdGhlCitlbnRpcmUgZWdjcyBwcm9qZWN0IGFuZCBHQ0MgMi45NSwgcm9sbGluZyBvdXQgc25hcHNob3RzIGFuZCByZWxlYXNlcywKK2hhbmRsaW5nIG1lcmdlcyBmcm9tIEdDQzIsIHJldmlld2luZyB0b25zIG9mIHBhdGNoZXMgdGhhdCBtaWdodCBoYXZlCitmYWxsZW4gdGhyb3VnaCB0aGUgY3JhY2tzIGVsc2UsIGFuZCByYW5kb20gYnV0IGV4dGVuc2l2ZSBoYWNraW5nLgorCisgICAgIDxsaT5XYWx0ZXIgTGVlIGZvciB3b3JrIG9uIHRoZSBUSUxFLUd4IGFuZCBUSUxFUHJvIHBvcnRzLgorCisgICAgIDxsaT5NYXJjIExlaG1hbm4gZm9yIGhpcyBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUgYW5kIGhlbHBpbmcKK3dpdGggYW5hbHlzaXMgYW5kIGltcHJvdmVtZW50cyBvZiB4ODYgcGVyZm9ybWFuY2UuCisKKyAgICAgPGxpPlZpY3RvciBMZWlrZWhtYW4gZm9yIHdvcmsgb24gR05VIEZvcnRyYW4uCisKKyAgICAgPGxpPlRlZCBMZW1vbiB3cm90ZSBwYXJ0cyBvZiB0aGUgUlRMIHJlYWRlciBhbmQgcHJpbnRlci4KKworICAgICA8bGk+S3JpYW5nIExlcmRzdXdhbmFraWogZm9yIEMrKyBpbXByb3ZlbWVudHMgaW5jbHVkaW5nIHRlbXBsYXRlIGFzIHRlbXBsYXRlCitwYXJhbWV0ZXIgc3VwcG9ydCwgYW5kIG1hbnkgQysrIGZpeGVzLgorCisgICAgIDxsaT5XYXJyZW4gTGV2eSBmb3IgdHJlbWVuZG91cyB3b3JrIG9uIGxpYmdjaiAoSmF2YSBSdW50aW1lIExpYnJhcnkpIGFuZAorcmFuZG9tIHdvcmsgb24gdGhlIEphdmEgZnJvbnQgZW5kLgorCisgICAgIDxsaT5BbGFpbiBMaWNobmV3c2t5IHBvcnRlZCBHQ0MgdG8gdGhlIE1JUFMgQ1BVLgorCisgICAgIDxsaT5Pc2thciBMaWxqZWJsYWQgZm9yIGhhY2tpbmcgb24gQVdUIGFuZCBoaXMgbWFueSBKYXZhIGJ1ZyByZXBvcnRzIGFuZAorcGF0Y2hlcy4KKworICAgICA8bGk+Um9iZXJ0IExpcGUgZm9yIE9wZW5TZXJ2ZXIgc3VwcG9ydCwgbmV3IHRlc3RzdWl0ZXMsIHRlc3RpbmcsIGV0Yy4KKworICAgICA8bGk+Q2hlbiBMaXFpbiBmb3IgdmFyaW91cyBTK2NvcmUgcmVsYXRlZCBmaXhlcy9pbXByb3ZlbWVudCwgYW5kIGZvcgorbWFpbnRhaW5pbmcgdGhlIFMrY29yZSBwb3J0LgorCisgICAgIDxsaT5XZWl3ZW4gTGl1IGZvciB0ZXN0aW5nIGFuZCB2YXJpb3VzIGJ1ZyBmaXhlcy4KKworICAgICA8bGk+TWFudWVsIEwmb2FjdXRlO3Blei1JYiZhYWN1dGU7Jm50aWxkZTtleiBmb3IgaW1wcm92aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XY29udmVyc2lvbjwvc3Bhbj48L3NhbXA+IGFuZAorbWFueSBvdGhlciBkaWFnbm9zdGljcyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzLgorCisgICAgIDxsaT5EYXZlIExvdmUgZm9yIGhpcyBvbmdvaW5nIHdvcmsgd2l0aCB0aGUgRm9ydHJhbiBmcm9udCBlbmQgYW5kCitydW50aW1lIGxpYnJhcmllcy4KKworICAgICA8bGk+TWFydGluIHZvbiBMJm91bWw7d2lzIGZvciBpbnRlcm5hbCBjb25zaXN0ZW5jeSBjaGVja2luZyBpbmZyYXN0cnVjdHVyZSwKK3ZhcmlvdXMgQysrIGltcHJvdmVtZW50cyBpbmNsdWRpbmcgbmFtZXNwYWNlIHN1cHBvcnQsIGFuZCB0b25zIG9mCithc3Npc3RhbmNlIHdpdGggbGlic3RkYysrL2NvbXBpbGVyIG1lcmdlcy4KKworICAgICA8bGk+SC5KLiBMdSBmb3IgaGlzIHByZXZpb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgbWFueSB4ODYKK2J1ZyByZXBvcnRzLCBwcm90b3R5cGUgcGF0Y2hlcywgYW5kIGtlZXBpbmcgdGhlIEdOVS9MaW51eCBwb3J0cyB3b3JraW5nLgorCisgICAgIDxsaT5HcmVnIE1jR2FyeSBmb3IgcmFuZG9tIGZpeGVzIGFuZCAoc29tZWRheSkgYm91bmRlZCBwb2ludGVycy4KKworICAgICA8bGk+QW5kcmV3IE1hY0xlb2QgZm9yIGhpcyBvbmdvaW5nIHdvcmsgaW4gYnVpbGRpbmcgYSByZWFsIEVIIHN5c3RlbSwKK3ZhcmlvdXMgY29kZSBnZW5lcmF0aW9uIGltcHJvdmVtZW50cywgd29yayBvbiB0aGUgZ2xvYmFsIG9wdGltaXplciwgZXRjLgorCisgICAgIDxsaT5WbGFkaW1pciBNYWthcm92IGZvciBoYWNraW5nIHNvbWUgdWdseSBpOTYwIHByb2JsZW1zLCBQb3dlclBDIGhhY2tpbmcKK2ltcHJvdmVtZW50cyB0byBjb21waWxlLXRpbWUgcGVyZm9ybWFuY2UsIG92ZXJhbGwga25vd2xlZGdlIGFuZAorZGlyZWN0aW9uIGluIHRoZSBhcmVhIG9mIGluc3RydWN0aW9uIHNjaGVkdWxpbmcsIGFuZCBkZXNpZ24gYW5kCitpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYXV0b21hdG9uIGJhc2VkIGluc3RydWN0aW9uIHNjaGVkdWxlci4KKworICAgICA8bGk+Qm9iIE1hbnNvbiBmb3IgaGlzIGJlaGluZCB0aGUgc2NlbmVzIHdvcmsgb24gZGVqYWdudS4KKworICAgICA8bGk+UGhpbGlwIE1hcnRpbiBmb3IgbG90cyBvZiBsaWJzdGRjKysgc3RyaW5nIGFuZCB2ZWN0b3IgaXRlcmF0b3IgZml4ZXMgYW5kCitpbXByb3ZlbWVudHMsIGFuZCBzdHJpbmcgY2xlYW4gdXAgYW5kIHRlc3RzdWl0ZXMuCisKKyAgICAgPGxpPkFsbCBvZiB0aGUgTWF1dmUgcHJvamVjdAorPGEgaHJlZj0iaHR0cDovL3NvdXJjZXdhcmUub3JnL2NnaS1iaW4vY3Zzd2ViLmNnaS9+Y2hlY2tvdXR+L21hdXZlL1RIQU5LUz9yZXY9MS4yJmFtcDtjdnNyb290PW1hdXZlJmFtcDtvbmx5X3dpdGhfdGFnPUhFQUQiPmNvbnRyaWJ1dG9yczwvYT4sCitmb3IgSmF2YSB0ZXN0IGNvZGUuCisKKyAgICAgPGxpPkJyeWNlIE1jS2lubGF5IGZvciBudW1lcm91cyBHQ0ogYW5kIGxpYmdjaiBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzLgorCisgICAgIDxsaT5BZGFtIE1lZ2FjeiBmb3IgaGlzIHdvcmsgb24gdGhlIE1pY3Jvc29mdCBXaW5kb3dzIHBvcnQgb2YgR0NKLgorCisgICAgIDxsaT5NaWNoYWVsIE1laXNzbmVyIGZvciBMUlMgZnJhbWV3b3JrLCBpYTMyLCBtMzJyLCB2ODUwLCBtODhrLCBNSVBTLAorcG93ZXJwYywgaGFpZmEsIEVDT0ZGIGRlYnVnIHN1cHBvcnQsIGFuZCBvdGhlciBhc3NvcnRlZCBoYWNraW5nLgorCisgICAgIDxsaT5KYXNvbiBNZXJyaWxsIGZvciBoaXMgZGlyZWN0aW9uIHZpYSB0aGUgc3RlZXJpbmcgY29tbWl0dGVlIGFuZCBsZWFkaW5nCit0aGUgRysrIGVmZm9ydC4KKworICAgICA8bGk+TWFydGluIE1pY2hsbWF5ciBmb3IgdGVzdGluZyBHQ0Mgb24gc2V2ZXJhbCBhcmNoaXRlY3R1cmVzIHVzaW5nIHRoZQorZW50aXJlIERlYmlhbiBhcmNoaXZlLgorCisgICAgIDxsaT5EYXZpZCBNaWxsZXIgZm9yIGhpcyBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUsIGxvdHMgb2YKK1NQQVJDIHdvcmssIGltcHJvdmVtZW50cyBpbiBqdW1wLmMgYW5kIGludGVyZmFjaW5nIHdpdGggdGhlIExpbnV4IGtlcm5lbAorZGV2ZWxvcGVycy4KKworICAgICA8bGk+R2FyeSBNaWxsZXIgcG9ydGVkIEdDQyB0byBDaGFybGVzIFJpdmVyIERhdGEgU3lzdGVtcyBtYWNoaW5lcy4KKworICAgICA8bGk+QWxmcmVkIE1pbmFyaWsgZm9yIGxpYnN0ZGMrKyBzdHJpbmcgYW5kIGlvcyBidWcgZml4ZXMsIGFuZCB0dXJuaW5nIHRoZQorZW50aXJlIGxpYnN0ZGMrKyB0ZXN0c3VpdGUgbmFtZXNwYWNlLWNvbXBhdGlibGUuCisKKyAgICAgPGxpPk1hcmsgTWl0Y2hlbGwgZm9yIGhpcyBkaXJlY3Rpb24gdmlhIHRoZSBzdGVlcmluZyBjb21taXR0ZWUsIG1vdW50YWlucyBvZgorQysrIHdvcmssIGxvYWQvc3RvcmUgaG9pc3Rpbmcgb3V0IG9mIGxvb3BzLCBhbGlhcyBhbmFseXNpcyBpbXByb3ZlbWVudHMsCitJU08gQyA8Y29kZT5yZXN0cmljdDwvY29kZT4gc3VwcG9ydCwgYW5kIHNlcnZpbmcgYXMgcmVsZWFzZSBtYW5hZ2VyIGZyb20gMjAwMAordG8gMjAxMS4KKworICAgICA8bGk+QWxhbiBNb2RyYSBmb3IgdmFyaW91cyBHTlUvTGludXggYml0cyBhbmQgdGVzdGluZy4KKworICAgICA8bGk+VG9vbiBNb2VuZSBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgRm9ydHJhbgorbWFpbnRlbmFuY2UsIGFuZCBoaXMgb25nb2luZyB3b3JrIHRvIG1ha2UgdXMgbWFrZSBGb3J0cmFuIHJ1biBmYXN0LgorCisgICAgIDxsaT5KYXNvbiBNb2xlbmRhIGZvciBtYWpvciBoZWxwIGluIHRoZSBjYXJlIGFuZCBmZWVkaW5nIG9mIGFsbCB0aGUgc2VydmljZXMKK29uIHRoZSBnY2MuZ251Lm9yZyAoZm9ybWVybHkgZWdjcy5jeWdudXMuY29tKSBtYWNoaW5lJm1kYXNoO21haWwsIHdlYgorc2VydmljZXMsIGZ0cCBzZXJ2aWNlcywgZXRjIGV0Yy4gIERvaW5nIGFsbCB0aGlzIHdvcmsgb24gc2NyYXAgcGFwZXIgYW5kCit0aGUgYmFja3Mgb2YgZW52ZWxvcGVzIHdvdWxkIGhhdmUgYmVlbjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gZGlmZmljdWx0LgorCisgICAgIDxsaT5DYXRoZXJpbmUgTW9vcmUgZm9yIGZpeGluZyB2YXJpb3VzIHVnbHkgcHJvYmxlbXMgd2UgaGF2ZSBzZW50IGhlcgord2F5LCBpbmNsdWRpbmcgdGhlIGhhaWZhIGJ1ZyB3aGljaCB3YXMga2lsbGluZyB0aGUgQWxwaGEgJmFtcDsgUG93ZXJQQworTGludXgga2VybmVscy4KKworICAgICA8bGk+TWlrZSBNb3JldG9uIGZvciBoaXMgdmFyaW91cyBKYXZhIHBhdGNoZXMuCisKKyAgICAgPGxpPkRhdmlkIE1vc2Jlcmdlci1UYW5nIGZvciB2YXJpb3VzIEFscGhhIGltcHJvdmVtZW50cywgYW5kIGZvciB0aGUgaW5pdGlhbAorSUEtNjQgcG9ydC4KKworICAgICA8bGk+U3RlcGhlbiBNb3NoaWVyIGNvbnRyaWJ1dGVkIHRoZSBmbG9hdGluZyBwb2ludCBlbXVsYXRvciB0aGF0IGFzc2lzdHMgaW4KK2Nyb3NzLWNvbXBpbGF0aW9uIGFuZCBwZXJtaXRzIHN1cHBvcnQgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgd2lkZXIKK3RoYW4gNjQgYml0cyBhbmQgZm9yIElTTyBDOTkgc3VwcG9ydC4KKworICAgICA8bGk+QmlsbCBNb3llciBmb3IgaGlzIGJlaGluZCB0aGUgc2NlbmVzIHdvcmsgb24gdmFyaW91cyBpc3N1ZXMuCisKKyAgICAgPGxpPlBoaWxpcHBlIERlIE11eXRlciBmb3IgaGlzIHdvcmsgb24gdGhlIG02OGsgcG9ydC4KKworICAgICA8bGk+Sm9zZXBoIFMuIE15ZXJzIGZvciBoaXMgd29yayBvbiB0aGUgUERQLTExIHBvcnQsIGZvcm1hdCBjaGVja2luZyBhbmQgSVNPCitDOTkgc3VwcG9ydCwgYW5kIGNvbnRpbnVvdXMgZW1waGFzaXMgb24gKGFuZCBjb250cmlidXRpb25zIHRvKSBkb2N1bWVudGF0aW9uLgorCisgICAgIDxsaT5OYXRoYW4gTXllcnMgZm9yIGhpcyB3b3JrIG9uIGxpYnN0ZGMrKy12MzogYXJjaGl0ZWN0dXJlIGFuZCBhdXRob3JzaGlwCit0aHJvdWdoIHRoZSBmaXJzdCB0aHJlZSBzbmFwc2hvdHMsIGluY2x1ZGluZyBpbXBsZW1lbnRhdGlvbiBvZiBsb2NhbGUKK2luZnJhc3RydWN0dXJlLCBzdHJpbmcsIHNoYWRvdyBDIGhlYWRlcnMsIGFuZCB0aGUgaW5pdGlhbCBwcm9qZWN0Citkb2N1bWVudGF0aW9uIChERVNJR04sIENIRUNLTElTVCwgYW5kIHNvIGZvcnRoKS4gIExhdGVyLCBtb3JlIHdvcmsgb24KK01ULXNhZmUgc3RyaW5nIGFuZCBzaGFkb3cgaGVhZGVycy4KKworICAgICA8bGk+RmVsaXggTmF0dGVyIGZvciBkb2N1bWVudGF0aW9uIG9uIHBvcnRpbmcgbGlic3RkYysrLgorCisgICAgIDxsaT5OYXRoYW5hZWwgTmVyb2RlIGZvciBjbGVhbmluZyB1cCB0aGUgY29uZmlndXJhdGlvbi9idWlsZCBwcm9jZXNzLgorCisgICAgIDxsaT5OZVhULCBJbmMuIGRvbmF0ZWQgdGhlIGZyb250IGVuZCB0aGF0IHN1cHBvcnRzIHRoZSBPYmplY3RpdmUtQworbGFuZ3VhZ2UuCisKKyAgICAgPGxpPkhhbnMtUGV0ZXIgTmlsc3NvbiBmb3IgdGhlIENSSVMgYW5kIE1NSVggcG9ydHMsIGltcHJvdmVtZW50cyB0byB0aGUgc2VhcmNoCitlbmdpbmUgc2V0dXAsIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgb3RoZXIgc21hbGwgZml4ZXMuCisKKyAgICAgPGxpPkdlb2ZmIE5vZXIgZm9yIGhpcyB3b3JrIG9uIGdldHRpbmcgY3lnd2luIG5hdGl2ZSBidWlsZHMgd29ya2luZy4KKworICAgICA8bGk+RGllZ28gTm92aWxsbyBmb3IgaGlzIHdvcmsgb24gVHJlZSBTU0EsIE9wZW5NUCwgU1BFQyBwZXJmb3JtYW5jZQordHJhY2tpbmcgd2ViIHBhZ2VzLCBHSU1QTEUgdHVwbGVzLCBhbmQgYXNzb3J0ZWQgZml4ZXMuCisKKyAgICAgPGxpPkRhdmlkIE8nQnJpZW4gZm9yIHRoZSBGcmVlQlNEL2FscGhhLCBGcmVlQlNEL0FNRCB4ODYtNjQsIEZyZWVCU0QvQVJNLAorRnJlZUJTRC9Qb3dlclBDLCBhbmQgRnJlZUJTRC9TUEFSQzY0IHBvcnRzIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCitpbXByb3ZlbWVudHMuCisKKyAgICAgPGxpPkFsZXhhbmRyZSBPbGl2YSBmb3IgdmFyaW91cyBidWlsZCBpbmZyYXN0cnVjdHVyZSBpbXByb3ZlbWVudHMsIHNjcmlwdHMgYW5kCithbWF6aW5nIHRlc3Rpbmcgd29yaywgaW5jbHVkaW5nIGtlZXBpbmcgbGlidG9vbCBpc3N1ZXMgc2FuZSBhbmQgaGFwcHkuCisKKyAgICAgPGxpPlN0ZWZhbiBPbHNzb24gZm9yIHdvcmsgb24gbXRfYWxsb2MuCisKKyAgICAgPGxpPk1lbGlzc2EgTydOZWlsbCBmb3IgdmFyaW91cyBOZVhUIGZpeGVzLgorCisgICAgIDxsaT5SYWluZXIgT3J0aCBmb3IgcmFuZG9tIE1JUFMgd29yaywgaW5jbHVkaW5nIGltcHJvdmVtZW50cyB0byBHQ0MncyBvMzIKK0FCSSBzdXBwb3J0LCBpbXByb3ZlbWVudHMgdG8gZGVqYWdudSdzIE1JUFMgc3VwcG9ydCwgSmF2YSBjb25maWd1cmF0aW9uCitjbGVhbi11cHMgYW5kIHBvcnRpbmcgd29yaywgYW5kIG1haW50YWluaW5nIHRoZSBJUklYLCBTb2xhcmlzIDIsIGFuZAorVHJ1NjQgVU5JWCBwb3J0cy4KKworICAgICA8bGk+SGFydG11dCBQZW5uZXIgZm9yIHdvcmsgb24gdGhlIHMzOTAgcG9ydC4KKworICAgICA8bGk+UGF1bCBQZXRlcnNlbiB3cm90ZSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBmb3IgdGhlIEFsbGlhbnQgRlgvOC4KKworICAgICA8bGk+QWxleGFuZHJlIFBldGl0LUJpYW5jbyBmb3IgaW1wbGVtZW50aW5nIG11Y2ggb2YgdGhlIEphdmEgY29tcGlsZXIgYW5kCitjb250aW51ZWQgSmF2YSBtYWludGFpbmVyc2hpcC4KKworICAgICA8bGk+TWF0dGhpYXMgUGZhbGxlciBmb3IgbWFqb3IgaW1wcm92ZW1lbnRzIHRvIHRoZSBOUzMyayBwb3J0LgorCisgICAgIDxsaT5HZXJhbGQgUGZlaWZlciBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgcG9pbnRpbmcKK291dCBsb3RzIG9mIHByb2JsZW1zIHdlIG5lZWQgdG8gc29sdmUsIG1haW50ZW5hbmNlIG9mIHRoZSB3ZWIgcGFnZXMsIGFuZAordGFraW5nIGNhcmUgb2YgZG9jdW1lbnRhdGlvbiBtYWludGVuYW5jZSBpbiBnZW5lcmFsLgorCisgICAgIDxsaT5BbmRyZXcgUGluc2tpIGZvciBwcm9jZXNzaW5nIGJ1ZyByZXBvcnRzIGJ5IHRoZSBkb3plbi4KKworICAgICA8bGk+T3ZpZGl1IFByZWRlc2N1IGZvciBoaXMgd29yayBvbiB0aGUgT2JqZWN0aXZlLUMgZnJvbnQgZW5kIGFuZCBydW50aW1lCitsaWJyYXJpZXMuCisKKyAgICAgPGxpPkplcnJ5IFF1aW5uIGZvciBtYWpvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgaW4gQysrIGZvcm1hdHRlZCBJL08uCisKKyAgICAgPGxpPktlbiBSYWVidXJuIGZvciB2YXJpb3VzIGltcHJvdmVtZW50cyB0byBjaGVja2VyLCBNSVBTIHBvcnRzIGFuZCB2YXJpb3VzCitjbGVhbnVwcyBpbiB0aGUgY29tcGlsZXIuCisKKyAgICAgPGxpPlJvbGYgVy4gUmFzbXVzc2VuIGZvciBoYWNraW5nIG9uIEFXVC4KKworICAgICA8bGk+RGF2aWQgUmVlc2Ugb2YgU3VuIE1pY3Jvc3lzdGVtcyBjb250cmlidXRlZCB0byB0aGUgU29sYXJpcyBvbiBQb3dlclBDCitwb3J0LgorCisgICAgIDxsaT5Wb2xrZXIgUmVpY2hlbHQgZm9yIGtlZXBpbmcgdXAgd2l0aCB0aGUgcHJvYmxlbSByZXBvcnRzLgorCisgICAgIDxsaT5Kb2VybiBSZW5uZWNrZSBmb3IgbWFpbnRhaW5pbmcgdGhlIHNoIHBvcnQsIGxvb3AsIHJlZ21vdmUgJmFtcDsgcmVsb2FkCitoYWNraW5nIGFuZCBkZXZlbG9waW5nIGFuZCBtYWludGFpbmluZyB0aGUgRXBpcGhhbnkgcG9ydC4KKworICAgICA8bGk+TG9yZW4gSi4gUml0dGxlIGZvciBpbXByb3ZlbWVudHMgdG8gbGlic3RkYysrLXYzIGluY2x1ZGluZyB0aGUgRnJlZUJTRAorcG9ydCwgdGhyZWFkaW5nIGZpeGVzLCB0aHJlYWQtcmVsYXRlZCBjb25maWd1cnkgY2hhbmdlcywgY3JpdGljYWwKK3RocmVhZGluZyBkb2N1bWVudGF0aW9uLCBhbmQgc29sdXRpb25zIHRvIHJlYWxseSB0cmlja3kgSS9PIHByb2JsZW1zLAorYXMgd2VsbCBhcyBrZWVwaW5nIEdDQyBwcm9wZXJseSB3b3JraW5nIG9uIEZyZWVCU0QgYW5kIGNvbnRpbnVvdXMgdGVzdGluZy4KKworICAgICA8bGk+Q3JhaWcgUm9kcmlndWVzIGZvciBwcm9jZXNzaW5nIHRvbnMgb2YgYnVnIHJlcG9ydHMuCisKKyAgICAgPGxpPk9sYSBSJm91bWw7bm5lcnVwIGZvciB3b3JrIG9uIG10X2FsbG9jLgorCisgICAgIDxsaT5HYXZpbiBSb21pZy1Lb2NoIGZvciBsb3RzIG9mIGJlaGluZCB0aGUgc2NlbmVzIE1JUFMgd29yay4KKworICAgICA8bGk+RGF2aWQgUm9uaXMgaW5zcGlyZWQgYW5kIGVuY291cmFnZWQgQ3JhaWcgdG8gcmV3cml0ZSB0aGUgRzc3Citkb2N1bWVudGF0aW9uIGluIHRleGluZm8gZm9ybWF0IGJ5IGNvbnRyaWJ1dGluZyBhIGZpcnN0IHBhc3MgYXQgYQordHJhbnNsYXRpb24gb2YgdGhlIG9sZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zzc3LTAuNS4xNi9mL0RPQzwvc3Bhbj48L3NhbXA+IGZpbGUuCisKKyAgICAgPGxpPktlbiBSb3NlIGZvciBmaXhlcyB0byBHQ0MncyBkZWxheSBzbG90IGZpbGxpbmcgY29kZS4KKworICAgICA8bGk+UGF1bCBSdWJpbiB3cm90ZSBtb3N0IG9mIHRoZSBwcmVwcm9jZXNzb3IuCisKKyAgICAgPGxpPlAmZWFjdXRlO3R1ciBSdW4mb2FjdXRlO2xmc3NvbiBmb3IgbWFqb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGluIEMrKyBmb3JtYXR0ZWQgSS9PIGFuZAorbGFyZ2UgZmlsZSBzdXBwb3J0IGluIEMrKyBmaWxlYnVmLgorCisgICAgIDxsaT5DaGlwIFNhbHplbmJlcmcgZm9yIGxpYnN0ZGMrKyBwYXRjaGVzIGFuZCBpbXByb3ZlbWVudHMgdG8gbG9jYWxlcywgdHJhaXRzLAorTWFrZWZpbGVzLCBsaWJpbywgbGlidG9vbCBoYWNrZXJ5LCBhbmQgJmxkcXVvO2xvbmcgbG9uZyZyZHF1bzsgc3VwcG9ydC4KKworICAgICA8bGk+SnVoYSBTYXJsaW4gZm9yIGltcHJvdmVtZW50cyB0byB0aGUgSDggY29kZSBnZW5lcmF0b3IuCisKKyAgICAgPGxpPkdyZWcgU2F0eiBhc3Npc3RlZCBpbiBtYWtpbmcgR0NDIHdvcmsgb24gSFAtVVggZm9yIHRoZSA5MDAwIHNlcmllcyAzMDAuCisKKyAgICAgPGxpPlJvZ2VyIFNheWxlIGZvciBpbXByb3ZlbWVudHMgdG8gY29uc3RhbnQgZm9sZGluZyBhbmQgR0NDJ3MgUlRMIG9wdGltaXplcnMKK2FzIHdlbGwgYXMgZm9yIGZpeGluZyBudW1lcm91cyBidWdzLgorCisgICAgIDxsaT5CcmFkbGV5IFNjaGF0eiBmb3IgaGlzIHdvcmsgb24gdGhlIEdDSiBGQVEuCisKKyAgICAgPGxpPlBldGVyIFNjaGF1ZXIgd3JvdGUgdGhlIGNvZGUgdG8gYWxsb3cgZGVidWdnaW5nIHRvIHdvcmsgb24gdGhlIEFscGhhLgorCisgICAgIDxsaT5XaWxsaWFtIFNjaGVsdGVyIGRpZCBtb3N0IG9mIHRoZSB3b3JrIG9uIHRoZSBJbnRlbCA4MDM4NiBzdXBwb3J0LgorCisgICAgIDxsaT5Ub2JpYXMgU2NobCZ1dW1sO3RlciBmb3Igd29yayBvbiBHTlUgRm9ydHJhbi4KKworICAgICA8bGk+QmVybmQgU2NobWlkdCBmb3IgdmFyaW91cyBjb2RlIGdlbmVyYXRpb24gaW1wcm92ZW1lbnRzIGFuZCBtYWpvcgord29yayBpbiB0aGUgcmVsb2FkIHBhc3MsIHNlcnZpbmcgYXMgcmVsZWFzZSBtYW5hZ2VyIGZvcgorR0NDIDIuOTUuMywgYW5kIHdvcmsgb24gdGhlIEJsYWNrZmluIGFuZCBDNlggcG9ydHMuCisKKyAgICAgPGxpPlBldGVyIFNjaG1pZCBmb3IgY29uc3RhbnQgdGVzdGluZyBvZiBsaWJzdGRjKysmbWRhc2g7ZXNwZWNpYWxseSBhcHBsaWNhdGlvbgordGVzdGluZywgZ29pbmcgYWJvdmUgYW5kIGJleW9uZCB3aGF0IHdhcyByZXF1ZXN0ZWQgZm9yIHRoZSByZWxlYXNlCitjcml0ZXJpYSZtZGFzaDthbmQgbGlic3RkYysrIGhlYWRlciBmaWxlIHR3ZWFrcy4KKworICAgICA8bGk+SmFzb24gU2Nocm9lZGVyIGZvciBqY2YtZHVtcCBwYXRjaGVzLgorCisgICAgIDxsaT5BbmRyZWFzIFNjaHdhYiBmb3IgaGlzIHdvcmsgb24gdGhlIG02OGsgcG9ydC4KKworICAgICA8bGk+TGFycyBTZWdlcmx1bmQgZm9yIHdvcmsgb24gR05VIEZvcnRyYW4uCisKKyAgICAgPGxpPkRvZGppIFNla2V0ZWxpIGZvciBudW1lcm91cyBDKysgYnVnIGZpeGVzIGFuZCBkZWJ1ZyBpbmZvIGltcHJvdmVtZW50cy4KKworICAgICA8bGk+Sm9lbCBTaGVycmlsbCBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgUlRFTVMKK2NvbnRyaWJ1dGlvbnMgYW5kIFJURU1TIHRlc3RpbmcuCisKKyAgICAgPGxpPk5hdGhhbiBTaWR3ZWxsIGZvciBtYW55IEMrKyBmaXhlcy9pbXByb3ZlbWVudHMuCisKKyAgICAgPGxpPkplZmZyZXkgU2llZ2FsIGZvciBoZWxwaW5nIFJNUyB3aXRoIHRoZSBvcmlnaW5hbCBkZXNpZ24gb2YgR0NDLCBzb21lCitjb2RlIHdoaWNoIGhhbmRsZXMgdGhlIHBhcnNlIHRyZWUgYW5kIFJUTCBkYXRhIHN0cnVjdHVyZXMsIGNvbnN0YW50Citmb2xkaW5nIGFuZCBoZWxwIHdpdGggdGhlIG9yaWdpbmFsIFZBWCAmYW1wOyBtNjhrIHBvcnRzLgorCisgICAgIDxsaT5LZW5ueSBTaW1wc29uIGZvciBwcm9tcHRpbmcgbGlic3RkYysrIGZpeGVzIGR1ZSB0byBkZWZlY3QgcmVwb3J0cyBmcm9tCit0aGUgTFdHICh0aGVyZWJ5IGtlZXBpbmcgR0NDIGluIGxpbmUgd2l0aCB1cGRhdGVzIGZyb20gdGhlIElTTykuCisKKyAgICAgPGxpPkZyYW56IFNpcmwgZm9yIGhpcyBvbmdvaW5nIHdvcmsgd2l0aCBtYWtpbmcgdGhlIFBQQyBwb3J0IHN0YWJsZQorZm9yIEdOVS9MaW51eC4KKworICAgICA8bGk+QW5kcmV5IFNsZXB1aGluIGZvciBhc3NvcnRlZCBBSVggaGFja2luZy4KKworICAgICA8bGk+VHJldm9yIFNtaWdpZWwgZm9yIGNvbnRyaWJ1dGluZyB0aGUgU1BVIHBvcnQuCisKKyAgICAgPGxpPkNocmlzdG9waGVyIFNtaXRoIGRpZCB0aGUgcG9ydCBmb3IgQ29udmV4IG1hY2hpbmVzLgorCisgICAgIDxsaT5EYW5ueSBTbWl0aCBmb3IgaGlzIG1ham9yIGVmZm9ydHMgb24gdGhlIE1pbmd3IChhbmQgQ3lnd2luKSBwb3J0cy4KKworICAgICA8bGk+UmFuZHkgU21pdGggZmluaXNoZWQgdGhlIFN1biBGUEEgc3VwcG9ydC4KKworICAgICA8bGk+U2NvdHQgU255ZGVyIGZvciBxdWV1ZSwgaXRlcmF0b3IsIGlzdHJlYW0sIGFuZCBzdHJpbmcgZml4ZXMgYW5kIGxpYnN0ZGMrKwordGVzdHN1aXRlIGVudHJpZXMuICBBbHNvIGZvciBwcm92aWRpbmcgdGhlIHBhdGNoIHRvIEc3NyB0byBhZGQKK3J1ZGltZW50YXJ5IHN1cHBvcnQgZm9yIDxjb2RlPklOVEVHRVIqMTwvY29kZT4sIDxjb2RlPklOVEVHRVIqMjwvY29kZT4sIGFuZAorPGNvZGU+TE9HSUNBTCoxPC9jb2RlPi4KKworICAgICA8bGk+WmRlbmVrIFNvamthIGZvciBydW5uaW5nIGF1dG9tYXRlZCByZWdyZXNzaW9uIHRlc3Rpbmcgb2YgR0NDIGFuZCByZXBvcnRpbmcKK251bWVyb3VzIGJ1Z3MuCisKKyAgICAgPGxpPkpheWFudCBTb25hciBmb3IgY29udHJpYnV0aW5nIHRoZSBDUjE2IHBvcnQuCisKKyAgICAgPGxpPkJyYWQgU3BlbmNlciBmb3IgY29udHJpYnV0aW9ucyB0byB0aGUgR0xJQkNQUF9GT1JDRV9ORVcgdGVjaG5pcXVlLgorCisgICAgIDxsaT5SaWNoYXJkIFN0YWxsbWFuLCBmb3Igd3JpdGluZyB0aGUgb3JpZ2luYWwgR0NDIGFuZCBsYXVuY2hpbmcgdGhlIEdOVSBwcm9qZWN0LgorCisgICAgIDxsaT5KYW4gU3RlaW4gb2YgdGhlIENoYWxtZXJzIENvbXB1dGVyIFNvY2lldHkgcHJvdmlkZWQgc3VwcG9ydCBmb3IKK0dlbml4LCBhcyB3ZWxsIGFzIHBhcnQgb2YgdGhlIDMyMDAwIG1hY2hpbmUgZGVzY3JpcHRpb24uCisKKyAgICAgPGxpPk5pZ2VsIFN0ZXBoZW5zIGZvciB2YXJpb3VzIG1pcHMxNiByZWxhdGVkIGZpeGVzL2ltcHJvdmVtZW50cy4KKworICAgICA8bGk+Sm9uYXRoYW4gU3RvbmUgd3JvdGUgdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gZm9yIHRoZSBQeXJhbWlkIGNvbXB1dGVyLgorCisgICAgIDxsaT5HcmFoYW0gU3RvdHQgZm9yIHZhcmlvdXMgaW5mcmFzdHJ1Y3R1cmUgaW1wcm92ZW1lbnRzLgorCisgICAgIDxsaT5Kb2huIFN0cmFja2UgZm9yIGhpcyBKYXZhIEhUVFAgcHJvdG9jb2wgZml4ZXMuCisKKyAgICAgPGxpPk1pa2UgU3R1bXAgZm9yIGhpcyBFbHhzaSBwb3J0LCBHKysgY29udHJpYnV0aW9ucyBvdmVyIHRoZSB5ZWFycyBhbmQgbW9yZQorcmVjZW50bHkgaGlzIHZ4d29ya3MgY29udHJpYnV0aW9ucworCisgICAgIDxsaT5KZWZmIFN0dXJtIGZvciBKYXZhIHBvcnRpbmcgaGVscCwgYnVnIGZpeGVzLCBhbmQgZW5jb3VyYWdlbWVudC4KKworICAgICA8bGk+U2hpZ2V5YSBTdXp1a2kgZm9yIHRoaXMgZml4ZXMgZm9yIHRoZSBic2RpIHBsYXRmb3Jtcy4KKworICAgICA8bGk+SWFuIExhbmNlIFRheWxvciBmb3IgdGhlIEdvIGZyb250ZW5kLCB0aGUgaW5pdGlhbCBtaXBzMTYgYW5kIG1pcHM2NAorc3VwcG9ydCwgZ2VuZXJhbCBjb25maWd1cnkgaGFja2luZywgZml4aW5jbHVkZXMsIGV0Yy4KKworICAgICA8bGk+SG9sZ2VyIFRldXRzY2ggcHJvdmlkZWQgdGhlIHN1cHBvcnQgZm9yIHRoZSBDbGlwcGVyIENQVS4KKworICAgICA8bGk+R2FyeSBUaG9tYXMgZm9yIGhpcyBvbmdvaW5nIHdvcmsgdG8gbWFrZSB0aGUgUFBDIHdvcmsgZm9yIEdOVS9MaW51eC4KKworICAgICA8bGk+UGhpbGlwcCBUaG9tYXMgZm9yIHJhbmRvbSBidWcgZml4ZXMgdGhyb3VnaG91dCB0aGUgY29tcGlsZXIKKworICAgICA8bGk+SmFzb24gVGhvcnBlIGZvciB0aHJlYWQgc3VwcG9ydCBpbiBsaWJzdGRjKysgb24gTmV0QlNELgorCisgICAgIDxsaT5LcmVzdGVuIEtyYWIgVGhvcnVwIHdyb3RlIHRoZSBydW4gdGltZSBzdXBwb3J0IGZvciB0aGUgT2JqZWN0aXZlLUMKK2xhbmd1YWdlIGFuZCB0aGUgZmFudGFzdGljIEphdmEgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIuCisKKyAgICAgPGxpPk1pY2hhZWwgVGllbWFubiBmb3IgcmFuZG9tIGJ1ZyBmaXhlcywgdGhlIGZpcnN0IGluc3RydWN0aW9uIHNjaGVkdWxlciwKK2luaXRpYWwgQysrIHN1cHBvcnQsIGZ1bmN0aW9uIGludGVncmF0aW9uLCBOUzMyaywgU1BBUkMgYW5kIE04OGsKK21hY2hpbmUgZGVzY3JpcHRpb24gd29yaywgZGVsYXkgc2xvdCBzY2hlZHVsaW5nLgorCisgICAgIDxsaT5BbmRyZWFzIFRvYmxlciBmb3IgaGlzIHdvcmsgcG9ydGluZyBsaWJnY2ogdG8gRGFyd2luLgorCisgICAgIDxsaT5UZWVtdSBUb3JtYSBmb3IgdGhyZWFkIHNhZmUgZXhjZXB0aW9uIGhhbmRsaW5nIHN1cHBvcnQuCisKKyAgICAgPGxpPkxlb25hcmQgVG93ZXIgd3JvdGUgcGFydHMgb2YgdGhlIHBhcnNlciwgUlRMIGdlbmVyYXRvciwgYW5kIFJUTAorZGVmaW5pdGlvbnMsIGFuZCBvZiB0aGUgVkFYIG1hY2hpbmUgZGVzY3JpcHRpb24uCisKKyAgICAgPGxpPkRhbmllbCBUb3duZXIgYW5kIEhhcmloYXJhbiBTYW5kYW5hZ29iYWxhbmUgY29udHJpYnV0ZWQgYW5kCittYWludGFpbiB0aGUgcGljb0NoaXAgcG9ydC4KKworICAgICA8bGk+VG9tIFRyb21leSBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCBhbmQgZm9yIGhpcyBtYW55IEphdmEKK2NvbnRyaWJ1dGlvbnMgYW5kIGxpYmdjaiBtYWludGFpbmVyc2hpcC4KKworICAgICA8bGk+TGFzc2kgVHV1cmEgZm9yIGltcHJvdmVtZW50cyB0byBjb25maWcuZ3Vlc3MgdG8gZGV0ZXJtaW5lIEhQIHByb2Nlc3NvcgordHlwZXMuCisKKyAgICAgPGxpPlBldHRlciBVcmtlZGFsIGZvciBsaWJzdGRjKysgQ1hYRkxBR1MsIG1hdGgsIGFuZCBhbGdvcml0aG1zIGZpeGVzLgorCisgICAgIDxsaT5BbmR5IFZhdWdodCBmb3IgdGhlIGRlc2lnbiBhbmQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR05VIEZvcnRyYW4KK2Zyb250IGVuZC4KKworICAgICA8bGk+QnJlbnQgVmVybmVyIGZvciB3b3JrIHdpdGggdGhlIGxpYnN0ZGMrKyBjc2hhZG93IGZpbGVzIGFuZCB0aGVpcgorYXNzb2NpYXRlZCBjb25maWd1cmUgc3RlcHMuCisKKyAgICAgPGxpPlRvZGQgVmllcmxpbmcgZm9yIGNvbnRyaWJ1dGlvbnMgZm9yIE5ldEJTRCBwb3J0cy4KKworICAgICA8bGk+Sm9uYXRoYW4gV2FrZWx5IGZvciBjb250cmlidXRpbmcgbGlic3RkYysrIERveHlnZW4gbm90ZXMgYW5kIFhIVE1MCitndWlkYW5jZS4KKworICAgICA8bGk+RGVhbiBXYWtlcmxleSBmb3IgY29udmVydGluZyB0aGUgaW5zdGFsbCBkb2N1bWVudGF0aW9uIGZyb20gSFRNTCB0byB0ZXhpbmZvCitpbiB0aW1lIGZvciBHQ0MgMy4wLgorCisgICAgIDxsaT5LcmlzdGVyIFdhbGZyaWRzc29uIGZvciByYW5kb20gYnVnIGZpeGVzLgorCisgICAgIDxsaT5GZW5nIFdhbmcgZm9yIGNvbnRyaWJ1dGlvbnMgdG8gR05VIEZvcnRyYW4uCisKKyAgICAgPGxpPlN0ZXBoZW4gTS4gV2ViYiBmb3IgdGltZSBhbmQgZWZmb3J0IG9uIG1ha2luZyBsaWJzdGRjKysgc2hhZG93IGZpbGVzCit3b3JrIHdpdGggdGhlIHRyaWNreSBTb2xhcmlzIDgrIGhlYWRlcnMsIGFuZCBmb3IgcHVzaGluZyB0aGUgYnVpbGQtdGltZQoraGVhZGVyIHRyZWUuCisKKyAgICAgPGxpPkpvaG4gV2VobGUgZm9yIHZhcmlvdXMgaW1wcm92ZW1lbnRzIGZvciB0aGUgeDg2IGNvZGUgZ2VuZXJhdG9yLAorcmVsYXRlZCBpbmZyYXN0cnVjdHVyZSBpbXByb3ZlbWVudHMgdG8gaGVscCB4ODYgY29kZSBnZW5lcmF0aW9uLAordmFsdWUgcmFuZ2UgcHJvcGFnYXRpb24gYW5kIG90aGVyIHdvcmssIFdFMzJrIHBvcnQuCisKKyAgICAgPGxpPlVscmljaCBXZWlnYW5kIGZvciB3b3JrIG9uIHRoZSBzMzkwIHBvcnQuCisKKyAgICAgPGxpPlphY2sgV2VpbmJlcmcgZm9yIG1ham9yIHdvcmsgb24gY3BwbGliIGFuZCB2YXJpb3VzIG90aGVyIGJ1ZyBmaXhlcy4KKworICAgICA8bGk+TWF0dCBXZWxzaCBmb3IgaGVscCB3aXRoIExpbnV4IFRocmVhZHMgc3VwcG9ydCBpbiBHQ0ouCisKKyAgICAgPGxpPlVyYmFuIFdpZG1hcmsgZm9yIGhlbHAgZml4aW5nIGphdmEuaW8uCisKKyAgICAgPGxpPk1hcmsgV2llbGFhcmQgZm9yIG5ldyBKYXZhIGxpYnJhcnkgY29kZSBhbmQgaGlzIHdvcmsgaW50ZWdyYXRpbmcgd2l0aAorQ2xhc3NwYXRoLgorCisgICAgIDxsaT5EYWxlIFdpbGVzIGhlbHBlZCBwb3J0IEdDQyB0byB0aGUgVGFob2UuCisKKyAgICAgPGxpPkJvYiBXaWxzb24gZnJvbSBUZW5zaWxpY2EsIEluYy4gZm9yIHRoZSBYdGVuc2EgcG9ydC4KKworICAgICA8bGk+SmltIFdpbHNvbiBmb3IgaGlzIGRpcmVjdGlvbiB2aWEgdGhlIHN0ZWVyaW5nIGNvbW1pdHRlZSwgdGFja2xpbmcgaGFyZAorcHJvYmxlbXMgaW4gdmFyaW91cyBwbGFjZXMgdGhhdCBub2JvZHkgZWxzZSB3YW50ZWQgdG8gd29yayBvbiwgc3RyZW5ndGgKK3JlZHVjdGlvbiBhbmQgb3RoZXIgbG9vcCBvcHRpbWl6YXRpb25zLgorCisgICAgIDxsaT5QYXVsIFdvZWdlcmVyIGFuZCBUYWwgQWdtb24gZm9yIHRoZSBDUlggcG9ydC4KKworICAgICA8bGk+Q2FybG8gV29vZCBmb3IgdmFyaW91cyBmaXhlcy4KKworICAgICA8bGk+VG9tIFdvb2QgZm9yIHdvcmsgb24gdGhlIG04OGsgcG9ydC4KKworICAgICA8bGk+Q2FucXVuIFlhbmcgZm9yIHdvcmsgb24gR05VIEZvcnRyYW4uCisKKyAgICAgPGxpPk1hc2Fub2J1IFl1aGFyYSBvZiBGdWppdHN1IExhYm9yYXRvcmllcyBpbXBsZW1lbnRlZCB0aGUgbWFjaGluZQorZGVzY3JpcHRpb24gZm9yIHRoZSBUcm9uIGFyY2hpdGVjdHVyZSAoc3BlY2lmaWNhbGx5LCB0aGUgR21pY3JvKS4KKworICAgICA8bGk+S2V2aW4gWmFjaG1hbm4gaGVscGVkIHBvcnQgR0NDIHRvIHRoZSBUYWhvZS4KKworICAgICA8bGk+QXlhbCBaYWtzIGZvciBTd2luZyBNb2R1bG8gU2NoZWR1bGluZyAoU01TKS4KKworICAgICA8bGk+WGlhb3FpYW5nIFpoYW5nIGZvciB3b3JrIG9uIEdOVSBGb3J0cmFuLgorCisgICAgIDxsaT5HaWxsZXMgWnVuaW5vIGZvciBoZWxwIHBvcnRpbmcgSmF2YSB0byBJcml4LgorCisgPC91bD4KKworIDxwPlRoZSBmb2xsb3dpbmcgcGVvcGxlIGFyZSByZWNvZ25pemVkIGZvciB0aGVpciBjb250cmlidXRpb25zIHRvIEdOQVQsCit0aGUgQWRhIGZyb250IGVuZCBvZiBHQ0M6CisgICAgIDx1bD4KKzxsaT5CZXJuYXJkIEJhbm5lcgorCisgICAgIDxsaT5Sb21haW4gQmVycmVuZG9ubmVyCisKKyAgICAgPGxpPkdlZXJ0IEJvc2NoCisKKyAgICAgPGxpPkVtbWFudWVsIEJyaW90CisKKyAgICAgPGxpPkpvZWwgQnJvYmVja2VyCisKKyAgICAgPGxpPkJlbiBCcm9zZ29sCisKKyAgICAgPGxpPlZpbmNlbnQgQ2VsaWVyCisKKyAgICAgPGxpPkFybmF1ZCBDaGFybGV0CisKKyAgICAgPGxpPkNoaWVuIENoaWVuZworCisgICAgIDxsaT5DeXJpbGxlIENvbWFyCisKKyAgICAgPGxpPkN5cmlsbGUgQ3JvemVzCisKKyAgICAgPGxpPlJvYmVydCBEZXdhcgorCisgICAgIDxsaT5HYXJ5IERpc211a2VzCisKKyAgICAgPGxpPlJvYmVydCBEdWZmCisKKyAgICAgPGxpPkVkIEZhbGlzCisKKyAgICAgPGxpPlJhbW9uIEZlcm5hbmRlegorCisgICAgIDxsaT5TYW0gRmlndWVyb2EKKworICAgICA8bGk+VmFzaWxpeSBGb2Zhbm92CisKKyAgICAgPGxpPk1pY2hhZWwgRnJpZXNzCisKKyAgICAgPGxpPkZyYW5jbyBHYXNwZXJvbmkKKworICAgICA8bGk+VGVkIEdpZXJpbmcKKworICAgICA8bGk+TWF0dGhldyBHaW5nZWxsCisKKyAgICAgPGxpPkxhdXJlbnQgR3VlcmJ5CisKKyAgICAgPGxpPkplcm9tZSBHdWl0dG9uCisKKyAgICAgPGxpPk9saXZpZXIgSGFpbnF1ZQorCisgICAgIDxsaT5KZXJvbWUgSHVndWVzCisKKyAgICAgPGxpPkhyaXN0aWFuIEtpcnRjaGV2CisKKyAgICAgPGxpPkplcm9tZSBMYW1ib3VyZworCisgICAgIDxsaT5CcnVubyBMZWNsZXJjCisKKyAgICAgPGxpPkFsYmVydCBMZWUKKworICAgICA8bGk+U2VhbiBNY05laWwKKworICAgICA8bGk+SmF2aWVyIE1pcmFuZGEKKworICAgICA8bGk+TGF1cmVudCBOYW5hCisKKyAgICAgPGxpPlBhc2NhbCBPYnJ5CisKKyAgICAgPGxpPkRvbmctSWsgT2gKKworICAgICA8bGk+TGF1cmVudCBQYXV0ZXQKKworICAgICA8bGk+QnJldHQgUG9ydGVyCisKKyAgICAgPGxpPlRob21hcyBRdWlub3QKKworICAgICA8bGk+Tmljb2xhcyBSb2NoZQorCisgICAgIDxsaT5QYXQgUm9nZXJzCisKKyAgICAgPGxpPkpvc2UgUnVpegorCisgICAgIDxsaT5Eb3VnbGFzIFJ1cHAKKworICAgICA8bGk+U2VyZ2V5IFJ5YmluCisKKyAgICAgPGxpPkdhaWwgU2NoZW5rZXIKKworICAgICA8bGk+RWQgU2Nob25iZXJnCisKKyAgICAgPGxpPk5pY29sYXMgU2V0dG9uCisKKyAgICAgPGxpPlNhbXVlbCBUYXJkaWV1CisKKyA8L3VsPgorCisgPHA+VGhlIGZvbGxvd2luZyBwZW9wbGUgYXJlIHJlY29nbml6ZWQgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgb2YgbmV3CitmZWF0dXJlcywgYnVnIHJlcG9ydHMsIHRlc3RpbmcgYW5kIGludGVncmF0aW9uIG9mIGNsYXNzcGF0aC9saWJnY2ogZm9yCitHQ0MgdmVyc2lvbiA0LjE6CisgICAgIDx1bD4KKzxsaT5MaWxsaWFuIEFuZ2VsIGZvciA8Y29kZT5KVHJlZTwvY29kZT4gaW1wbGVtZW50YXRpb24gYW5kIGxvdHMgRnJlZSBTd2luZworYWRkaXRpb25zIGFuZCBidWcgZml4ZXMuCisKKyAgICAgPGxpPldvbGZnYW5nIEJhZXIgZm9yIDxjb2RlPkdhcENvbnRlbnQ8L2NvZGU+IGJ1ZyBmaXhlcy4KKworICAgICA8bGk+QW50aG9ueSBCYWxraXNzb29uIGZvciA8Y29kZT5KTGlzdDwvY29kZT4sIEZyZWUgU3dpbmcgMS41IHVwZGF0ZXMgYW5kIG1vdXNlIGV2ZW50CitmaXhlcywgbG90cyBvZiBGcmVlIFN3aW5nIHdvcmsgaW5jbHVkaW5nIDxjb2RlPkpUYWJsZTwvY29kZT4gZWRpdGluZy4KKworICAgICA8bGk+U3R1YXJ0IEJhbGxhcmQgZm9yIFJNSSBjb25zdGFudCBmaXhlcy4KKworICAgICA8bGk+R29mZnJlZG8gQmFyb25jZWxsaSBmb3IgPGNvZGU+SFRUUFVSTENvbm5lY3Rpb248L2NvZGU+IGZpeGVzLgorCisgICAgIDxsaT5HYXJ5IEJlbnNvbiBmb3IgPGNvZGU+TWVzc2FnZUZvcm1hdDwvY29kZT4gZml4ZXMuCisKKyAgICAgPGxpPkRhbmllbCBCb25uaW90IGZvciA8Y29kZT5TZXJpYWxpemF0aW9uPC9jb2RlPiBmaXhlcy4KKworICAgICA8bGk+Q2hyaXMgQnVyZGVzcyBmb3IgbG90cyBvZiBnbnUueG1sIGFuZCBodHRwIHByb3RvY29sIGZpeGVzLCA8Y29kZT5TdEFYPC9jb2RlPgorYW5kIDxjb2RlPkRPTSB4bWw6aWQ8L2NvZGU+IHN1cHBvcnQuCisKKyAgICAgPGxpPkthLUhpbmcgQ2hldW5nIGZvciA8Y29kZT5UcmVlUGF0aDwvY29kZT4gYW5kIDxjb2RlPlRyZWVTZWxlY3Rpb248L2NvZGU+IGZpeGVzLgorCisgICAgIDxsaT5BcmNoaWUgQ29iYnMgZm9yIGJ1aWxkIGZpeGVzLCBWTSBpbnRlcmZhY2UgdXBkYXRlcywKKzxjb2RlPlVSTENsYXNzTG9hZGVyPC9jb2RlPiB1cGRhdGVzLgorCisgICAgIDxsaT5LZWxsZXkgQ29vayBmb3IgYnVpbGQgZml4ZXMuCisKKyAgICAgPGxpPk1hcnRpbiBDb3Jkb3ZhIGZvciBTdWdnZXN0aW9ucyBmb3IgYmV0dGVyIDxjb2RlPlNvY2tldFRpbWVvdXRFeGNlcHRpb248L2NvZGU+LgorCisgICAgIDxsaT5EYXZpZCBEYW5leSBmb3IgPGNvZGU+Qml0U2V0PC9jb2RlPiBidWcgZml4ZXMsIDxjb2RlPkh0dHBVUkxDb25uZWN0aW9uPC9jb2RlPgorcmV3cml0ZSBhbmQgaW1wcm92ZW1lbnRzLgorCisgICAgIDxsaT5UaG9tYXMgRml0enNpbW1vbnMgZm9yIGxvdHMgb2YgdXBncmFkZXMgdG8gdGhlIGd0aysgQVdUIGFuZCBDYWlybyAyRAorc3VwcG9ydC4gTG90cyBvZiBpbWFnZWlvIGZyYW1ld29yayBhZGRpdGlvbnMsIGxvdHMgb2YgQVdUIGFuZCBGcmVlCitTd2luZyBidWcgZml4ZXMuCisKKyAgICAgPGxpPkplcm9lbiBGcmlqdGVycyBmb3IgPGNvZGU+Q2xhc3NMb2FkZXI8L2NvZGU+IGFuZCBuaW8gY2xlYW51cHMsIHNlcmlhbGl6YXRpb24gZml4ZXMsCitiZXR0ZXIgPGNvZGU+UHJveHk8L2NvZGU+IHN1cHBvcnQsIGJ1ZyBmaXhlcyBhbmQgSUtWTSBpbnRlZ3JhdGlvbi4KKworICAgICA8bGk+U2FudGlhZ28gR2FsYSBmb3IgPGNvZGU+QWNjZXNzQ29udHJvbENvbnRleHQ8L2NvZGU+IGZpeGVzLgorCisgICAgIDxsaT5OaWNvbGFzIEdlb2ZmcmF5IGZvciA8Y29kZT5WTUNsYXNzTG9hZGVyPC9jb2RlPiBhbmQgPGNvZGU+QWNjZXNzQ29udHJvbGxlcjwvY29kZT4KK2ltcHJvdmVtZW50cy4KKworICAgICA8bGk+RGF2aWQgR2lsYmVydCBmb3IgPGNvZGU+YmFzaWM8L2NvZGU+IGFuZCA8Y29kZT5tZXRhbDwvY29kZT4gaWNvbiBhbmQgcGxhZiBzdXBwb3J0CithbmQgbG90cyBvZiBkb2N1bWVudGluZywgTG90cyBvZiBGcmVlIFN3aW5nIGFuZCBtZXRhbCB0aGVtZQorYWRkaXRpb25zLiA8Y29kZT5NZXRhbEljb25GYWN0b3J5PC9jb2RlPiBpbXBsZW1lbnRhdGlvbi4KKworICAgICA8bGk+QW50aG9ueSBHcmVlbiBmb3IgPGNvZGU+TUlESTwvY29kZT4gZnJhbWV3b3JrLCA8Y29kZT5BTFNBPC9jb2RlPiBhbmQgPGNvZGU+RFNTSTwvY29kZT4KK3Byb3ZpZGVycy4KKworICAgICA8bGk+QW5kcmV3IEhhbGV5IGZvciA8Y29kZT5TZXJpYWxpemF0aW9uPC9jb2RlPiBhbmQgPGNvZGU+VVJMQ2xhc3NMb2FkZXI8L2NvZGU+IGZpeGVzLAorZ2NqIGJ1aWxkIHNwZWVkdXBzLgorCisgICAgIDxsaT5LaW0gSG8gZm9yIDxjb2RlPkpGaWxlQ2hvb3NlcjwvY29kZT4gaW1wbGVtZW50YXRpb24uCisKKyAgICAgPGxpPkFuZHJldyBKb2huIEh1Z2hlcyBmb3IgPGNvZGU+TG9jYWxlPC9jb2RlPiBhbmQgbmV0IGZpeGVzLCBVUkkgUkZDMjk4NgordXBkYXRlcywgPGNvZGU+U2VyaWFsaXphdGlvbjwvY29kZT4gZml4ZXMsIDxjb2RlPlByb3BlcnRpZXM8L2NvZGU+IFhNTCBzdXBwb3J0IGFuZAorZ2VuZXJpYyBicmFuY2ggd29yaywgVk1JbnRlZ3JhdGlvbiBndWlkZSB1cGRhdGUuCisKKyAgICAgPGxpPkJhc3RpYWFuIEh1aXNtYW4gZm9yIDxjb2RlPlRpbWVab25lPC9jb2RlPiBidWcgZml4aW5nLgorCisgICAgIDxsaT5BbmRyZWFzIEphZWdlciBmb3IgbXByZWMgdXBkYXRlcy4KKworICAgICA8bGk+UGF1bCBKZW5uZXIgZm9yIGJldHRlciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Vycm9yPC9zcGFuPjwvc2FtcD4gc3VwcG9ydC4KKworICAgICA8bGk+SXRvIEthenVtaXRzdSBmb3IgPGNvZGU+TmV0d29ya0ludGVyZmFjZTwvY29kZT4gaW1wbGVtZW50YXRpb24gYW5kIHVwZGF0ZXMuCisKKyAgICAgPGxpPlJvbWFuIEtlbm5rZSBmb3IgPGNvZGU+Qm94TGF5b3V0PC9jb2RlPiwgPGNvZGU+R3JheUZpbHRlcjwvY29kZT4gYW5kCis8Y29kZT5TcGxpdFBhbmU8L2NvZGU+LCBwbHVzIGJ1ZyBmaXhlcyBhbGwgb3Zlci4gTG90cyBvZiBGcmVlIFN3aW5nIHdvcmsKK2luY2x1ZGluZyBzdHlsZWQgdGV4dC4KKworICAgICA8bGk+U2ltb24gS2l0Y2hpbmcgZm9yIDxjb2RlPlN0cmluZzwvY29kZT4gY2xlYW51cHMgYW5kIG9wdGltaXphdGlvbiBzdWdnZXN0aW9ucy4KKworICAgICA8bGk+TWljaGFlbCBLb2NoIGZvciBjb25maWd1cmF0aW9uIGZpeGVzLCA8Y29kZT5Mb2NhbGU8L2NvZGU+IHVwZGF0ZXMsIGJ1ZyBhbmQKK2J1aWxkIGZpeGVzLgorCisgICAgIDxsaT5HdWlsaGVtIExhdmF1eCBmb3IgY29uZmlndXJhdGlvbiwgdGhyZWFkIGFuZCBjaGFubmVsIGZpeGVzIGFuZCBLYWZmZQoraW50ZWdyYXRpb24uIEpDTCBuYXRpdmUgPGNvZGU+UG9pbnRlcjwvY29kZT4gdXBkYXRlcy4gTG9nZ2VyIGJ1ZyBmaXhlcy4KKworICAgICA8bGk+RGF2aWQgTGljaHRlYmxhdSBmb3IgSkNMIHN1cHBvcnQgbGlicmFyeSBnbG9iYWwvbG9jYWwgcmVmZXJlbmNlCitjbGVhbnVwcy4KKworICAgICA8bGk+QWFyb24gTHVjaGtvIGZvciBKRFdQIHVwZGF0ZXMgYW5kIGRvY3VtZW50YXRpb24gZml4ZXMuCisKKyAgICAgPGxpPlppZ2EgTWFoa292ZWMgZm9yIDxjb2RlPkdyYXBoaWNzMkQ8L2NvZGU+IHVwZ3JhZGVkIHRvIENhaXJvIDAuNSBhbmQgbmV3IHJlZ2V4CitmZWF0dXJlcy4KKworICAgICA8bGk+U3ZlbiBkZSBNYXJvdGh5IGZvciBCTVAgaW1hZ2VpbyBzdXBwb3J0LCBDU1MgYW5kIDxjb2RlPlRleHRMYXlvdXQ8L2NvZGU+CitmaXhlcy4gPGNvZGU+R3RrSW1hZ2U8L2NvZGU+IHJld3JpdGUsIDJELCBhd3QsIGZyZWUgc3dpbmcgYW5kIGRhdGUvdGltZSBmaXhlcyBhbmQKK2ltcGxlbWVudGluZyB0aGUgUXQ0IHBlZXJzLgorCisgICAgIDxsaT5DYXNleSBNYXJzaGFsbCBmb3IgY3J5cHRvIGFsZ29yaXRobSBmaXhlcywgPGNvZGU+RmlsZUNoYW5uZWw8L2NvZGU+IGxvY2ssCis8Y29kZT5TeXN0ZW1Mb2dnZXI8L2NvZGU+IGFuZCA8Y29kZT5GaWxlSGFuZGxlcjwvY29kZT4gcm90YXRlIGltcGxlbWVudGF0aW9ucywgTklPCis8Y29kZT5GaWxlQ2hhbm5lbC5tYXA8L2NvZGU+IHN1cHBvcnQsIHNlY3VyaXR5IGFuZCBwb2xpY3kgdXBkYXRlcy4KKworICAgICA8bGk+QnJ5Y2UgTWNLaW5sYXkgZm9yIFJNSSB3b3JrLgorCisgICAgIDxsaT5BdWRyaXVzIE1lc2thdXNrYXMgZm9yIGxvdHMgb2YgRnJlZSBDb3JiYSwgUk1JIGFuZCBIVE1MIHdvcmsgcGx1cwordGVzdGluZyBhbmQgZG9jdW1lbnRpbmcuCisKKyAgICAgPGxpPkthbGxlIE9sYXZpIE5pZW1pdGFsbyBmb3IgYnVpbGQgZml4ZXMuCisKKyAgICAgPGxpPlJhaW5lciBPcnRoIGZvciBidWlsZCBmaXhlcy4KKworICAgICA8bGk+QW5kcmV3IE92ZXJob2x0IGZvciA8Y29kZT5GaWxlPC9jb2RlPiBsb2NraW5nIGZpeGVzLgorCisgICAgIDxsaT5JbmdvIFByb2V0ZWwgZm9yIDxjb2RlPkltYWdlPC9jb2RlPiwgPGNvZGU+TG9nZ2VyPC9jb2RlPiBhbmQgPGNvZGU+VVJMQ2xhc3NMb2FkZXI8L2NvZGU+Cit1cGRhdGVzLgorCisgICAgIDxsaT5PbGdhIFJvZGltaW5hIGZvciA8Y29kZT5NZW51U2VsZWN0aW9uTWFuYWdlcjwvY29kZT4gaW1wbGVtZW50YXRpb24uCisKKyAgICAgPGxpPkphbiBSb2VocmljaCBmb3IgPGNvZGU+QmFzaWNUcmVlVUk8L2NvZGU+IGFuZCA8Y29kZT5KVHJlZTwvY29kZT4gZml4ZXMuCisKKyAgICAgPGxpPkp1bGlhbiBTY2hlaWQgZm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgZ2pkb2Mgc3VwcG9ydC4KKworICAgICA8bGk+Q2hyaXN0aWFuIFNjaGxpY2h0aGVybGUgZm9yIHppcCBmaXhlcyBhbmQgY2xlYW51cHMuCisKKyAgICAgPGxpPlJvYmVydCBTY2h1c3RlciBmb3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBiZWFucyBmaXhlcywKKzxjb2RlPlRyZWVOb2RlPC9jb2RlPiBlbnVtZXJhdGlvbnMgYW5kIDxjb2RlPkFjdGlvbkNvbW1hbmQ8L2NvZGU+IGFuZCB2YXJpb3VzCitmaXhlcywgWE1MIGFuZCBVUkwsIEFXVCBhbmQgRnJlZSBTd2luZyBidWcgZml4ZXMuCisKKyAgICAgPGxpPktlaXRoIFNlaXR6IGZvciBsb3RzIG9mIEpEV1Agd29yay4KKworICAgICA8bGk+Q2hyaXN0aWFuIFRoYWxpbmdlciBmb3IgNjQtYml0IGNsZWFudXBzLCBDb25maWd1cmF0aW9uIGFuZCBWTQoraW50ZXJmYWNlIGZpeGVzIGFuZCA8Y29kZT5DQUNBTzwvY29kZT4gaW50ZWdyYXRpb24sIDxjb2RlPmZkbGlibTwvY29kZT4gdXBkYXRlcy4KKworICAgICA8bGk+R2FlbCBUaG9tYXMgZm9yIDxjb2RlPlZNQ2xhc3NMb2FkZXI8L2NvZGU+IGJvb3QgcGFja2FnZXMgc3VwcG9ydCBzdWdnZXN0aW9ucy4KKworICAgICA8bGk+QW5kcmVhcyBUb2JsZXIgZm9yIERhcndpbiBhbmQgU29sYXJpcyB0ZXN0aW5nIGFuZCBmaXhpbmcsIDxjb2RlPlF0NDwvY29kZT4KK3N1cHBvcnQgZm9yIERhcndpbi9PUyBYLCA8Y29kZT5HcmFwaGljczJEPC9jb2RlPiBzdXBwb3J0LCA8Y29kZT5ndGsrPC9jb2RlPgordXBkYXRlcy4KKworICAgICA8bGk+RGFsaWJvciBUb3BpYyBmb3IgYmV0dGVyIDxjb2RlPkRFQlVHPC9jb2RlPiBzdXBwb3J0LCBidWlsZCBjbGVhbnVwcyBhbmQKK0thZmZlIGludGVncmF0aW9uLiA8Y29kZT5RdDQ8L2NvZGU+IGJ1aWxkIGluZnJhc3RydWN0dXJlLCA8Y29kZT5TSEExUFJORzwvY29kZT4KK2FuZCA8Y29kZT5HZGtQaXhidWdEZWNvZGVyPC9jb2RlPiB1cGRhdGVzLgorCisgICAgIDxsaT5Ub20gVHJvbWV5IGZvciBFY2xpcHNlIGludGVncmF0aW9uLCBnZW5lcmljcyB3b3JrLCBsb3RzIG9mIGJ1ZyBmaXhlcworYW5kIGdjaiBpbnRlZ3JhdGlvbiBpbmNsdWRpbmcgY29vcmRpbmF0aW5nIFRoZSBCaWcgTWVyZ2UuCisKKyAgICAgPGxpPk1hcmsgV2llbGFhcmQgZm9yIGJ1ZyBmaXhlcywgcGFja2FnaW5nIGFuZCByZWxlYXNlIG1hbmFnZW1lbnQsCis8Y29kZT5DbGlwYm9hcmQ8L2NvZGU+IGltcGxlbWVudGF0aW9uLCBzeXN0ZW0gY2FsbCBpbnRlcnJ1cHRzIGFuZCBuZXR3b3JrCit0aW1lb3V0cyBhbmQgPGNvZGU+R2RrUGl4cHVmRGVjb2RlcjwvY29kZT4gZml4ZXMuCisKKyA8L3VsPgorCisgPHA+SW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCBhbGwgb2Ygd2hpY2ggYWxzbyBjb250cmlidXRlZCB0aW1lIGFuZCBlbmVyZ3kgaW4KK3Rlc3RpbmcgR0NDLCB3ZSB3b3VsZCBsaWtlIHRvIHRoYW5rIHRoZSBmb2xsb3dpbmcgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMKK3RvIHRlc3Rpbmc6CisKKyAgICAgPHVsPgorPGxpPk1pY2hhZWwgQWJkLUVsLU1hbGVrCisKKyAgICAgPGxpPlRob21hcyBBcmVuZAorCisgICAgIDxsaT5Cb256byBBcm1zdHJvbmcKKworICAgICA8bGk+U3RldmVuIEFzaGUKKworICAgICA8bGk+Q2hyaXMgQmFsZHdpbgorCisgICAgIDxsaT5EYXZpZCBCaWxsaW5naHVyc3QKKworICAgICA8bGk+SmltIEJsYW5keQorCisgICAgIDxsaT5TdGVwaGFuZSBCb3J0em1leWVyCisKKyAgICAgPGxpPkhvcnN0IHZvbiBCcmFuZAorCisgICAgIDxsaT5GcmFuayBCcmF1bgorCisgICAgIDxsaT5Sb2RuZXkgQnJvd24KKworICAgICA8bGk+U2lkbmV5IENhZG90CisKKyAgICAgPGxpPkJyYWRmb3JkIENhc3RhbGlhCisKKyAgICAgPGxpPlJvYmVydCBDbGFyaworCisgICAgIDxsaT5Kb25hdGhhbiBDb3JiZXQKKworICAgICA8bGk+UmFscGggRG9uY2FzdGVyCisKKyAgICAgPGxpPlJpY2hhcmQgRW1iZXJzb24KKworICAgICA8bGk+TGV2ZW50ZSBGYXJrYXMKKworICAgICA8bGk+R3JhaGFtIEZhd2NldHQKKworICAgICA8bGk+TWFyayBGZXJueWhvdWdoCisKKyAgICAgPGxpPlJvYmVydCBBLiBGcmVuY2gKKworICAgICA8bGk+SiZvdW1sO3JnZW4gRnJleWgKKworICAgICA8bGk+TWFyayBLLiBHYXJkbmVyCisKKyAgICAgPGxpPkNoYXJsZXMtQW50b2luZSBHYXV0aGllcgorCisgICAgIDxsaT5ZdW5nIFNoaW5nIEdlbmUKKworICAgICA8bGk+RGF2aWQgR2lsYmVydAorCisgICAgIDxsaT5TaW1vbiBHb3JuYWxsCisKKyAgICAgPGxpPkZyZWQgR3JheQorCisgICAgIDxsaT5Kb2huIEdyaWZmaW4KKworICAgICA8bGk+UGF0cmlrIEhhZ2dsdW5kCisKKyAgICAgPGxpPlBoaWwgSGFyZ2V0dAorCisgICAgIDxsaT5BbWFuY2lvIEhhc3R5CisKKyAgICAgPGxpPlRha2FmdW1pIEhheWFzaGkKKworICAgICA8bGk+QnJ5YW4gVy4gSGVhZGxleQorCisgICAgIDxsaT5LZXZpbiBCLiBIZW5kcmlja3MKKworICAgICA8bGk+Sm9lcCBKYW5zZW4KKworICAgICA8bGk+Q2hyaXN0aWFuIEpvZW5zc29uCisKKyAgICAgPGxpPk1pY2hlbCBLZXJuCisKKyAgICAgPGxpPkRhdmlkIEtpZGQKKworICAgICA8bGk+VG9iaWFzIEt1aXBlcnMKKworICAgICA8bGk+QW5hbmQgS3Jpc2huYXN3YW15CisKKyAgICAgPGxpPkEuIE8uIFYuIExlIEJsYW5jCisKKyAgICAgPGxpPmxsZXdlbGx5CisKKyAgICAgPGxpPkRhbW9uIExvdmUKKworICAgICA8bGk+QnJhZCBMdWNpZXIKKworICAgICA8bGk+TWF0dGhpYXMgS2xvc2UKKworICAgICA8bGk+TWFydGluIEtub2JsYXVjaAorCisgICAgIDxsaT5SaWNrIEx1dG93c2tpCisKKyAgICAgPGxpPkplc3NlIE1hY25pc2gKKworICAgICA8bGk+U3RlZmFuIE1vcnJlbGwKKworICAgICA8bGk+QW5vbiBBLiBNb3VzCisKKyAgICAgPGxpPk1hdHRoaWFzIE11ZWxsZXIKKworICAgICA8bGk+UGVra2EgTmlrYW5kZXIKKworICAgICA8bGk+UmljayBOaWxlcworCisgICAgIDxsaT5Kb24gT2xzb24KKworICAgICA8bGk+TWFnbnVzIFBlcnNzb24KKworICAgICA8bGk+Q2hyaXMgUG9sbGFyZAorCisgICAgIDxsaT5SaWNoYXJkIFBvbHRvbgorCisgICAgIDxsaT5EZXJrIFJlZWZtYW4KKworICAgICA8bGk+RGF2aWQgUmVlcworCisgICAgIDxsaT5QYXVsIFJlaWxseQorCisgICAgIDxsaT5Ub20gUmVpbGx5CisKKyAgICAgPGxpPlRvcnN0ZW4gUnVlZ2VyCisKKyAgICAgPGxpPkRhbm55IFNhZGlub2ZmCisKKyAgICAgPGxpPk1hcmMgU2NoaWZlcgorCisgICAgIDxsaT5FcmlrIFNjaG5ldHRlcgorCisgICAgIDxsaT5XYXluZSBLLiBTY2hyb2xsCisKKyAgICAgPGxpPkRhdmlkIFNjaHVsZXIKKworICAgICA8bGk+VmluIFNoZWx0b24KKworICAgICA8bGk+VGltIFNvdWRlcgorCisgICAgIDxsaT5BZGFtIFN1bG1pY2tpCisKKyAgICAgPGxpPkJpbGwgVGhvcnNvbgorCisgICAgIDxsaT5HZW9yZ2UgVGFsYm90CisKKyAgICAgPGxpPlBlZHJvIEEuIE0uIFZhenF1ZXoKKworICAgICA8bGk+R3JlZ29yeSBXYXJuZXMKKworICAgICA8bGk+SWFuIFdhdHNvbgorCisgICAgIDxsaT5EYXZpZCBFLiBZb3VuZworCisgICAgIDxsaT5BbmQgbWFueSBvdGhlcnMKKzwvdWw+CisKKyA8cD5BbmQgZmluYWxseSB3ZSdkIGxpa2UgdG8gdGhhbmsgZXZlcnlvbmUgd2hvIHVzZXMgdGhlIGNvbXBpbGVyLCBwcm92aWRlcworZmVlZGJhY2sgYW5kIGdlbmVyYWxseSByZW1pbmRzIHVzIHdoeSB3ZSdyZSBkb2luZyB0aGlzIHdvcmsgaW4gdGhlIGZpcnN0CitwbGFjZS4KKworPCEtLSAgLS0+Cis8IS0tIEluZGV4ZXMgLS0+Cis8IS0tICAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvcHktQXNzaWdubWVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db3B5LUFzc2lnbm1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTM4MDcyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db3B5LUFzc2lnbm1lbnQuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29weSBBc3NpZ25tZW50IC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzLmh0bWwjQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MiIHRpdGxlPSJDKysgTWlzdW5kZXJzdGFuZGluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUZW1wb3Jhcmllcy5odG1sI1RlbXBvcmFyaWVzIiB0aXRsZT0iVGVtcG9yYXJpZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29weS1Bc3NpZ25tZW50Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVGVtcG9yYXJpZXMuaHRtbCNUZW1wb3JhcmllcyI+VGVtcG9yYXJpZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzIj5DKysgTWlzdW5kZXJzdGFuZGluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4xMS43LjQgSW1wbGljaXQgQ29weS1Bc3NpZ25tZW50IGZvciBWaXJ0dWFsIEJhc2VzPC9oND4KKworPHA+V2hlbiBhIGJhc2UgY2xhc3MgaXMgdmlydHVhbCwgb25seSBvbmUgc3Vib2JqZWN0IG9mIHRoZSBiYXNlIGNsYXNzCitiZWxvbmdzIHRvIGVhY2ggZnVsbCBvYmplY3QuICBBbHNvLCB0aGUgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBhcmUKK2ludm9rZWQgb25seSBvbmNlLCBhbmQgY2FsbGVkIGZyb20gdGhlIG1vc3QtZGVyaXZlZCBjbGFzcy4gIEhvd2V2ZXIsIHN1Y2gKK29iamVjdHMgYmVoYXZlIHVuc3BlY2lmaWVkIHdoZW4gYmVpbmcgYXNzaWduZWQuICBGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0cnVjdCBCYXNleworICAgICAgIGNoYXIgKm5hbWU7CisgICAgICAgQmFzZShjaGFyICpuKSA6IG5hbWUoc3RyZHVwKG4pKXt9CisgICAgICAgQmFzZSZhbXA7IG9wZXJhdG9yPSAoY29uc3QgQmFzZSZhbXA7IG90aGVyKXsKKyAgICAgICAgZnJlZSAobmFtZSk7CisgICAgICAgIG5hbWUgPSBzdHJkdXAgKG90aGVyLm5hbWUpOworICAgICAgIH0KKyAgICAgfTsKKyAgICAgCisgICAgIHN0cnVjdCBBOnZpcnR1YWwgQmFzZXsKKyAgICAgICBpbnQgdmFsOworICAgICAgIEEoKTpCYXNlKCJBIil7fQorICAgICB9OworICAgICAKKyAgICAgc3RydWN0IEI6dmlydHVhbCBCYXNleworICAgICAgIGludCBidmFsOworICAgICAgIEIoKTpCYXNlKCJCIil7fQorICAgICB9OworICAgICAKKyAgICAgc3RydWN0IERlcml2ZWQ6cHVibGljIEEsIHB1YmxpYyBCeworICAgICAgIERlcml2ZWQoKTpCYXNlKCJEZXJpdmVkIil7fQorICAgICB9OworICAgICAKKyAgICAgdm9pZCBmdW5jKERlcml2ZWQgJmFtcDtkMSwgRGVyaXZlZCAmYW1wO2QyKQorICAgICB7CisgICAgICAgZDEgPSBkMjsKKyAgICAgfQorPC9wcmU+CisgPHA+VGhlIEMrKyBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkJhc2U6OkJhc2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgb25seSBjYWxsZWQgb25jZQord2hlbiBjb25zdHJ1Y3Rpbmcgb3IgY29weS1jb25zdHJ1Y3RpbmcgYSBEZXJpdmVkIG9iamVjdC4gIEl0IGlzCit1bnNwZWNpZmllZCB3aGV0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QmFzZTo6b3BlcmF0b3I9PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB3aGVuCit0aGUgaW1wbGljaXQgY29weS1hc3NpZ25tZW50IGZvciBEZXJpdmVkIG9iamVjdHMgaXMgaW52b2tlZCAoYXMgaXQgaXMKK2luc2lkZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZ1bmM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gdGhlIGV4YW1wbGUpLgorCisgPHA+RysrIGltcGxlbWVudHMgdGhlICZsZHF1bztpbnR1aXRpdmUmcmRxdW87IGFsZ29yaXRobSBmb3IgY29weS1hc3NpZ25tZW50OiBhc3NpZ24gYWxsCitkaXJlY3QgYmFzZXMsIHRoZW4gYXNzaWduIGFsbCBtZW1iZXJzLiAgSW4gdGhhdCBhbGdvcml0aG0sIHRoZSB2aXJ0dWFsCitiYXNlIHN1Ym9iamVjdCBjYW4gYmUgZW5jb3VudGVyZWQgbW9yZSB0aGFuIG9uY2UuICBJbiB0aGUgZXhhbXBsZSwgY29weWluZworcHJvY2VlZHMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52YWw8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmFtZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAodmlhCis8Y29kZT5zdHJkdXA8L2NvZGU+KSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5idmFsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uYW1lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFnYWluLgorCisgPHA+SWYgYXBwbGljYXRpb24gY29kZSByZWxpZXMgb24gY29weS1hc3NpZ25tZW50LCBhIHVzZXItZGVmaW5lZAorY29weS1hc3NpZ25tZW50IG9wZXJhdG9yIHJlbW92ZXMgYW55IHVuY2VydGFpbnRpZXMuICBXaXRoIHN1Y2ggYW4KK29wZXJhdG9yLCB0aGUgYXBwbGljYXRpb24gY2FuIGRlZmluZSB3aGV0aGVyIGFuZCBob3cgdGhlIHZpcnR1YWwgYmFzZQorc3Vib2JqZWN0IGlzIGFzc2lnbmVkLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db3B5aW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0NvcHlpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWRjMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Db3B5aW5nLmh0bWwKQEAgLTAsMCArMSw3NTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvcHlpbmcgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHTlUtUHJvamVjdC5odG1sI0dOVS1Qcm9qZWN0IiB0aXRsZT0iR05VIFByb2plY3QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiIHRpdGxlPSJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ29weWluZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdOVS1Qcm9qZWN0Lmh0bWwjR05VLVByb2plY3QiPkdOVSBQcm9qZWN0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiAtLT4KKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L2gyPgorCis8ZGl2IGFsaWduPSJjZW50ZXIiPlZlcnNpb24gMywgMjkgSnVuZSAyMDA3PC9kaXY+CisKKzwhLS0gVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGluIGFub3RoZXIgZmlsZS4gLS0+Cis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4gICAgIENvcHlyaWdodCAmY29weTsgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGEgaHJlZj0iaHR0cDovL2ZzZi5vcmcvIj5odHRwOi8vZnNmLm9yZy88L2E+CisgICAgIAorICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCis8L3ByZT4KKyA8aDMgY2xhc3M9ImhlYWRpbmciPlByZWFtYmxlPC9oMz4KKworPHA+VGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKK3NvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KKworIDxwPlRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAordG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LAordGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20KK3RvIHNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbSZuZGFzaDt0byBtYWtlIHN1cmUgaXQgcmVtYWlucworZnJlZSBzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAordXNlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0CithcHBsaWVzIGFsc28gdG8gYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuICBZb3UKK2NhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKKyA8cD5XaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQord2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgPHA+VG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBwcmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91Cit0aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gIFRoZXJlZm9yZSwgeW91CitoYXZlIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCitzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdDogcmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tCitvZiBvdGhlcnMuCisKKyA8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lCitmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywKK3JlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlCit0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgPHA+RGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOgorKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKK2dpdmluZyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCisKKyA8cD5Gb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKK2F1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKK2NoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bworYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KKworIDxwPlNvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4KK21vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlCittYW51ZmFjdHVyZXIgY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZQorYWltIG9mIHByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZQorc3lzdGVtYXRpYyBwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvcgoraW5kaXZpZHVhbHMgdG8gdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuIAorVGhlcmVmb3JlLCB3ZSBoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZQorcHJhY3RpY2UgZm9yIHRob3NlIHByb2R1Y3RzLiAgSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluCitvdGhlciBkb21haW5zLCB3ZSBzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UKK2RvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZQorZnJlZWRvbSBvZiB1c2Vycy4KKworIDxwPkZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuIAorU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCitzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaAordG8gYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtCitjb3VsZCBtYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMCithc3N1cmVzIHRoYXQgcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKKyA8cD5UaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworPGgzIGNsYXNzPSJoZWFkaW5nIj5URVJNUyBBTkQgQ09ORElUSU9OUzwvaDM+CisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0wPgorPGxpPkRlZmluaXRpb25zLgorCisgICAgIDxwPiZsZHF1bztUaGlzIExpY2Vuc2UmcmRxdW87IHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgICAgIDxwPiZsZHF1bztDb3B5cmlnaHQmcmRxdW87IGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzCitvZiB3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgorCisgICAgIDxwPiZsZHF1bztUaGUgUHJvZ3JhbSZyZHF1bzsgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICZsZHF1bzt5b3UmcmRxdW87LiAgJmxkcXVvO0xpY2Vuc2VlcyZyZHF1bzsgYW5kCismbGRxdW87cmVjaXBpZW50cyZyZHF1bzsgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCisKKyAgICAgPHA+VG8gJmxkcXVvO21vZGlmeSZyZHF1bzsgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaworaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mCithbiBleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICZsZHF1bzttb2RpZmllZCB2ZXJzaW9uJnJkcXVvOyBvZgordGhlIGVhcmxpZXIgd29yayBvciBhIHdvcmsgJmxkcXVvO2Jhc2VkIG9uJnJkcXVvOyB0aGUgZWFybGllciB3b3JrLgorCisgICAgIDxwPkEgJmxkcXVvO2NvdmVyZWQgd29yayZyZHF1bzsgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbS4KKworICAgICA8cD5UbyAmbGRxdW87cHJvcGFnYXRlJnJkcXVvOyBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0CitwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yCitpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKK2NvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsCitkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZQorcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgorCisgICAgIDxwPlRvICZsZHF1bztjb252ZXkmcmRxdW87IGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXIKK3BhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIKK3Rocm91Z2ggYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90Citjb252ZXlpbmcuCisKKyAgICAgPHA+QW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMgJmxkcXVvO0FwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMmcmRxdW87IHRvCit0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlCitmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKK3RlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlCitleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlCit3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgordGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEKK21lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCisKKyAgICAgPGxpPlNvdXJjZSBDb2RlLgorCisgICAgIDxwPlRoZSAmbGRxdW87c291cmNlIGNvZGUmcmRxdW87IGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAmbGRxdW87T2JqZWN0IGNvZGUmcmRxdW87IG1lYW5zIGFueSBub24tc291cmNlIGZvcm0KK29mIGEgd29yay4KKworICAgICA8cD5BICZsZHF1bztTdGFuZGFyZCBJbnRlcmZhY2UmcmRxdW87IG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCisgICAgIDxwPlRoZSAmbGRxdW87U3lzdGVtIExpYnJhcmllcyZyZHF1bzsgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCismbGRxdW87TWFqb3IgQ29tcG9uZW50JnJkcXVvOywgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICAgICA8cD5UaGUgJmxkcXVvO0NvcnJlc3BvbmRpbmcgU291cmNlJnJkcXVvOyBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKKyAgICAgPHA+VGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycyBjYW4KK3JlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4KKworICAgICA8cD5UaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQgc2FtZQord29yay4KKworICAgICA8bGk+QmFzaWMgUGVybWlzc2lvbnMuCisKKyAgICAgPHA+QWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgICAgPHA+WW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdCBjb252ZXksCit3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMgaW4gZm9yY2UuIAorWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgaGF2aW5nCit0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdSB3aXRoCitmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8gbm90Citjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MgZm9yCit5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24gYW5kCitjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZiB5b3VyCitjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICAgICA8cD5Db252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlciB0aGUKK2NvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAgICA8bGk+UHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KKworICAgICA8cD5ObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKK21lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQorMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yCitzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCittZWFzdXJlcy4KKworICAgICA8cD5XaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCitjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoCitjaXJjdW12ZW50aW9uIGlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoCityZXNwZWN0IHRvIHRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdAorb3BlcmF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdAordGhlIHdvcmsncyB1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkCitjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCisKKyAgICAgPGxpPkNvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKKyAgICAgPHA+WW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91CityZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Citub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAorcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKKyAgICAgPHA+WW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LAorYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KKworICAgICA8bGk+Q29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICAgICA8cD5Zb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlCitjb25kaXRpb25zOgorCisgICAgICAgICAgPG9sIHR5cGU9YSBzdGFydD0xPgorPGxpPlRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZCBpdCwKK2FuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLgorCisgICAgICAgICAgPGxpPlRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzIHJlbGVhc2VkCit1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24gNy4gIFRoaXMKK3JlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8gJmxkcXVvO2tlZXAgaW50YWN0IGFsbAorbm90aWNlcyZyZHF1bzsuCisKKyAgICAgICAgICA8bGk+WW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMgTGljZW5zZSB0bworYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcyBMaWNlbnNlIHdpbGwKK3RoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcgYWRkaXRpb25hbCB0ZXJtcywKK3RvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkKK2FyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubyBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4KK2FueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdCBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZQorc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgICAgICAgIDxsaT5JZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheQorQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCitpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91ciB3b3JrCituZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCisgICAgICAgICAgPC9vbD4KKworICAgICA8cD5BIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyZsZHF1bzthZ2dyZWdhdGUmcmRxdW87IGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICAgICA8bGk+Q29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCisKKyAgICAgPHA+WW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK3NlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZSBtYWNoaW5lLXJlYWRhYmxlCitDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiBvbmUgb2YgdGhlc2UKK3dheXM6CisKKyAgICAgICAgICA8b2wgdHlwZT1hIHN0YXJ0PTE+Cis8bGk+Q29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkKK3VzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgICAgICAgICAgPGxpPkNvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyhpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYSB3cml0dGVuCitvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMgbG9uZyBhcyB5b3UKK29mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdCBtb2RlbCwgdG8gZ2l2ZQorYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYSBjb3B5IG9mIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlIHByb2R1Y3QgdGhhdCBpcworY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZAorZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubyBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlCitjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MKK3RvIGNvcHkgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuCisKKyAgICAgICAgICA8bGk+Q29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUgd3JpdHRlbgorb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlzIGFsdGVybmF0aXZlIGlzCithbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZCBvbmx5IGlmIHlvdQorcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggc3Vic2VjdGlvbgorNmIuCisKKyAgICAgICAgICA8bGk+Q29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UKKyhncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KK2Z1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuICBJZiB0aGUgcGxhY2UgdG8gY29weQordGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBtYXkgYmUKK29uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpIHRoYXQgc3VwcG9ydHMKK2VxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4gY2xlYXIgZGlyZWN0aW9ucworbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAKK1JlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluCitvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0bworc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICAgICAgICA8bGk+Q29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZCB5b3UKK2luZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcgU291cmNlIG9mCit0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8gY2hhcmdlIHVuZGVyCitzdWJzZWN0aW9uIDZkLgorCisgICAgICAgICAgPC9vbD4KKworICAgICA8cD5BIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKK2Zyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCitpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisKKyAgICAgPHA+QSAmbGRxdW87VXNlciBQcm9kdWN0JnJkcXVvOyBpcyBlaXRoZXIgKDEpIGEgJmxkcXVvO2NvbnN1bWVyIHByb2R1Y3QmcmRxdW87LCB3aGljaCBtZWFucyBhbnkKK3RhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLAorZmFtaWx5LCBvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvcgoraW5jb3Jwb3JhdGlvbiBpbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhCitjb25zdW1lciBwcm9kdWN0LCBkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZgorY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyIHByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsCismbGRxdW87bm9ybWFsbHkgdXNlZCZyZHF1bzsgcmVmZXJzIHRvIGEgdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YKK3Byb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cyBvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkKK2luIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZAordG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZgord2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwgY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvcgorbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50IHRoZSBvbmx5IHNpZ25pZmljYW50Cittb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAgICA8cD4mbGRxdW87SW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uJnJkcXVvOyBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvCitpbnN0YWxsIGFuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlcgorUHJvZHVjdCBmcm9tIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUKK2luZm9ybWF0aW9uIG11c3Qgc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mCit0aGUgbW9kaWZpZWQgb2JqZWN0IGNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoCitzb2xlbHkgYmVjYXVzZSBtb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICAgICA8cD5JZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgICAgIDxwPlRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IKK3VwZGF0ZXMgZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUKK3JlY2lwaWVudCwgb3IgZm9yIHRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IKK2luc3RhbGxlZC4gIEFjY2VzcyB0byBhIG5ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24KK2l0c2VsZiBtYXRlcmlhbGx5IGFuZCBhZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrCitvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kIHByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlCituZXR3b3JrLgorCisgICAgIDxwPkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAoraW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQorZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KK3NvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgordW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCisKKyAgICAgPGxpPkFkZGl0aW9uYWwgVGVybXMuCisKKyAgICAgPHA+JmxkcXVvO0FkZGl0aW9uYWwgcGVybWlzc2lvbnMmcmRxdW87IGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4gCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgICAgIDxwPldoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgICAgPHA+Tm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzCitvZiB0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgICAgICAgIDxvbCB0eXBlPWEgc3RhcnQ9MT4KKzxsaT5EaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgdGVybXMKK29mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICAgICAgICA8bGk+UmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yIGF1dGhvcgorYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMKK2Rpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgorCisgICAgICAgICAgPGxpPlByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKK3JlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCityZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yCisKKyAgICAgICAgICA8bGk+TGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgorYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCisKKyAgICAgICAgICA8bGk+RGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZSB0cmFkZQorbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCisKKyAgICAgICAgICA8bGk+UmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdCBtYXRlcmlhbCBieQorYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgaXQpIHdpdGgKK2NvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IgYW55CitsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24gdGhvc2UKK2xpY2Vuc29ycyBhbmQgYXV0aG9ycy4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPkFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICZsZHF1bztmdXJ0aGVyCityZXN0cmljdGlvbnMmcmRxdW87IHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgICAgIDxwPklmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgICAgIDxwPkFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOyB0aGUKK2Fib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgICAgIDxsaT5UZXJtaW5hdGlvbi4KKworICAgICA8cD5Zb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKK3Byb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcgordGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZAorcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLgorCisgICAgIDxwPkhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UKK2Zyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwKK3VubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseQordGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvCis2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKKyAgICAgPHA+TW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKyAgICAgPHA+VGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZQorbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KKworICAgICA8bGk+QWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCisKKyAgICAgPHA+WW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yIHJ1bgorYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCitvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbgordG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKK25vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8KK25vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQorY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KKworICAgICA8bGk+QXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCisKKyAgICAgPHA+RWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQorcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCitmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KKworICAgICA8cD5BbiAmbGRxdW87ZW50aXR5IHRyYW5zYWN0aW9uJnJkcXVvOyBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCitvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuCitvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZAord29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKK3RyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcgorbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkCitnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmCit0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCisKKyAgICAgPHA+WW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCityaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQorbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCityaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCitzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisKKyAgICAgPGxpPlBhdGVudHMuCisKKyAgICAgPHA+QSAmbGRxdW87Y29udHJpYnV0b3ImcmRxdW87IGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcworTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKK3dvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgJmxkcXVvO2NvbnRyaWJ1dG9yIHZlcnNpb24mcmRxdW87LgorCisgICAgIDxwPkEgY29udHJpYnV0b3IncyAmbGRxdW87ZXNzZW50aWFsIHBhdGVudCBjbGFpbXMmcmRxdW87IGFyZSBhbGwgcGF0ZW50IGNsYWltcyBvd25lZAorb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCitieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCitidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQorY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3IKK3B1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgJmxkcXVvO2NvbnRyb2wmcmRxdW87IGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudAorcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGlzIExpY2Vuc2UuCisKKyAgICAgPHA+RWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bworbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCisgICAgIDxwPkluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAmbGRxdW87cGF0ZW50IGxpY2Vuc2UmcmRxdW87IGlzIGFueSBleHByZXNzCithZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKyhzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8KK3N1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAmbGRxdW87Z3JhbnQmcmRxdW87IHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCitwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQorcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCisgICAgIDxwPklmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsCithbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQordG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQorcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywKK3RoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KK2F2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKK3BhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyCitjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50CitsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICZsZHF1bztLbm93aW5nbHkgcmVseWluZyZyZHF1bzsgbWVhbnMgeW91IGhhdmUKK2FjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQorY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaworaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0Citjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCisgICAgIDxwPklmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKK2FycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKK2NvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcworcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5CitvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCit5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAord29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCisKKyAgICAgPHA+QSBwYXRlbnQgbGljZW5zZSBpcyAmbGRxdW87ZGlzY3JpbWluYXRvcnkmcmRxdW87IGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluIHRoZQorc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcyBjb25kaXRpb25lZCBvbgordGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlIHNwZWNpZmljYWxseQorZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaWYgeW91CithcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcyBpbiB0aGUKK2J1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudCB0byB0aGUKK3RoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcgdGhlCit3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZSBwYXJ0aWVzCit3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5IHBhdGVudAorbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrIGNvbnZleWVkIGJ5Cit5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseSBmb3IgYW5kIGluCitjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQgY29udGFpbiB0aGUKK2NvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwgb3IgdGhhdCBwYXRlbnQKK2xpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCisKKyAgICAgPHA+Tm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZworYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKK290aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKworICAgICA8bGk+Tm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworICAgICA8cD5JZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkKK2EgY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlcgordGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEKK2NvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlCit0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdSB0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcKK2Zyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5IHRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkCitzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5Citmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworICAgICA8bGk+VXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAgICA8cD5Ob3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCitwZXJtaXNzaW9uIHRvIGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxpY2Vuc2VkCit1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlCitjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywKK2J1dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3NlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKK2NvbWJpbmF0aW9uIGFzIHN1Y2guCisKKyAgICAgPGxpPlJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgIDxwPlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldwordmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgICAgIDxwPkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgJmxkcXVvO29yIGFueSBsYXRlciB2ZXJzaW9uJnJkcXVvOyBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYKK3RoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgICA8cD5JZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zCitvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMKK3N0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0bworY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKKyAgICAgPHA+TGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKK3Blcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKK2F1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKK2xhdGVyIHZlcnNpb24uCisKKyAgICAgPGxpPkRpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgICAgPHA+VEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICZsZHF1bztBUyBJUyZyZHF1bzsgV0lUSE9VVAorV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORAorUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUKK0RFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SCitDT1JSRUNUSU9OLgorCisgICAgIDxsaT5MaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworICAgICA8cD5JTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SCitDT05WRVlTIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVAorTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUgorTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0KK1RPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSCitQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKyAgICAgPGxpPkludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4KKworICAgICA8cD5JZiB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQKK2Fib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLAorcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCithbiBhYnNvbHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJpbGl0eSBpbiBjb25uZWN0aW9uIHdpdGggdGhlCitQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhCitjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCisKKyAgICAgPC9vbD4KKworPGgzIGNsYXNzPSJoZWFkaW5nIj5FTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlM8L2gzPgorCis8aDMgY2xhc3M9ImhlYWRpbmciPkhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtczwvaDM+CisKKzxwPklmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlCit0ZXJtcy4KKworIDxwPlRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgJmxkcXVvO2NvcHlyaWdodCZyZHF1bzsgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDx2YXI+b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPC92YXI+CisgICAgIENvcHlyaWdodCAoQykgPHZhcj55ZWFyPC92YXI+IDx2YXI+bmFtZSBvZiBhdXRob3I8L3Zhcj4KKyAgICAgCisgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICAgICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAgIAorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIj5odHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPC9hPi4KKzwvcHJlPgorIDxwPkFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCisgPHA+SWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydAorbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPHZhcj5wcm9ncmFtPC92YXI+IENvcHlyaWdodCAoQykgPHZhcj55ZWFyPC92YXI+IDx2YXI+bmFtZSBvZiBhdXRob3I8L3Zhcj4KKyAgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNob3cgdzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKyAgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zaG93IGM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGRldGFpbHMuCis8L3ByZT4KKyA8cD5UaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2hvdyB3PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNob3cgYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzaG91bGQgc2hvdwordGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyCitwcm9ncmFtJ3MgY29tbWFuZHMgbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQKK3VzZSBhbiAmbGRxdW87YWJvdXQgYm94JnJkcXVvOy4KKworIDxwPllvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSAmbGRxdW87Y29weXJpZ2h0IGRpc2NsYWltZXImcmRxdW87IGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiAKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlCis8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIj5odHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPC9hPi4KKworIDxwPlRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyCitwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lCitsaWJyYXJ5LCB5b3UgbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5CithcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlCit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0CitmaXJzdCwgcGxlYXNlIHJlYWQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWwiPmh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3doeS1ub3QtbGdwbC5odG1sPC9hPi4gCis8IS0tIG1hbiBlbmQgLS0+CisKKzwhLS0gIC0tPgorPCEtLSBHRkRMIC0tPgorPCEtLSAgLS0+Cis8IS0tIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGluY2x1c2lvbiBpbiB0aGUgaW5zdGFsbCBtYW51YWwuIC0tPgorPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Dcm9zc18wMDJkcHJvZmlsaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Nyb3NzXzAwMmRwcm9maWxpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjhjYzI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Dcm9zc18wMDJkcHJvZmlsaW5nLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q3Jvc3MtcHJvZmlsaW5nIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikdjb3YuaHRtbCNHY292IiB0aXRsZT0iR2NvdiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikdjb3YtRGF0YS1GaWxlcy5odG1sI0djb3YtRGF0YS1GaWxlcyIgdGl0bGU9Ikdjb3YgRGF0YSBGaWxlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDcm9zcy1wcm9maWxpbmciPjwvYT4KKzxhIG5hbWU9IkNyb3NzXzAwMmRwcm9maWxpbmciPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHY292LURhdGEtRmlsZXMuaHRtbCNHY292LURhdGEtRmlsZXMiPkdjb3YgRGF0YSBGaWxlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikdjb3YuaHRtbCNHY292Ij5HY292PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTAuNSBEYXRhIGZpbGUgcmVsb2NhdGlvbiB0byBzdXBwb3J0IGNyb3NzLXByb2ZpbGluZzwvaDM+CisKKzxwPlJ1bm5pbmcgdGhlIHByb2dyYW0gd2lsbCBjYXVzZSBwcm9maWxlIG91dHB1dCB0byBiZSBnZW5lcmF0ZWQuICBGb3IgZWFjaAorc291cmNlIGZpbGUgY29tcGlsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+LCBhbiBhY2NvbXBhbnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5nY2RhPC9zcGFuPjwvc2FtcD4KK2ZpbGUgd2lsbCBiZSBwbGFjZWQgaW4gdGhlIG9iamVjdCBmaWxlIGRpcmVjdG9yeS4gVGhhdCBpbXBsaWNpdGx5IHJlcXVpcmVzCitydW5uaW5nIHRoZSBwcm9ncmFtIG9uIHRoZSBzYW1lIHN5c3RlbSBhcyBpdCB3YXMgYnVpbHQgb3IgaGF2aW5nIHRoZSBzYW1lCithYnNvbHV0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9uIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGUgcHJvZ3JhbSB3aWxsIHRyeQordG8gY3JlYXRlIHRoZSBuZWVkZWQgZGlyZWN0b3J5IHN0cnVjdHVyZSwgaWYgaXQgaXMgbm90IGFscmVhZHkgcHJlc2VudC4KKworIDxwPlRvIHN1cHBvcnQgY3Jvc3MtcHJvZmlsaW5nLCBhIHByb2dyYW0gY29tcGlsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+CitjYW4gcmVsb2NhdGUgdGhlIGRhdGEgZmlsZXMgYmFzZWQgb24gdHdvIGVudmlyb25tZW50IHZhcmlhYmxlczoKKworICAgICA8dWw+Cis8bGk+R0NPVl9QUkVGSVggY29udGFpbnMgdGhlIHByZWZpeCB0byBhZGQgdG8gdGhlIGFic29sdXRlIHBhdGhzCitpbiB0aGUgb2JqZWN0IGZpbGUuIFByZWZpeCBjYW4gYmUgYWJzb2x1dGUsIG9yIHJlbGF0aXZlLiAgVGhlCitkZWZhdWx0IGlzIG5vIHByZWZpeC4KKworICAgICA8bGk+R0NPVl9QUkVGSVhfU1RSSVAgaW5kaWNhdGVzIHRoZSBob3cgbWFueSBpbml0aWFsIGRpcmVjdG9yeSBuYW1lcyB0byBzdHJpcCBvZmYKK3RoZSBoYXJkd2lyZWQgYWJzb2x1dGUgcGF0aHMuIERlZmF1bHQgdmFsdWUgaXMgMC4KKworICAgICA8cD48ZW0+Tm90ZTo8L2VtPiBJZiBHQ09WX1BSRUZJWF9TVFJJUCBpcyBzZXQgd2l0aG91dCBHQ09WX1BSRUZJWCBpcyB1bmRlZmluZWQsCisgdGhlbiBhIHJlbGF0aXZlIHBhdGggaXMgbWFkZSBvdXQgb2YgdGhlIGhhcmR3aXJlZCBhYnNvbHV0ZSBwYXRocy4gCis8L3VsPgorCisgPHA+Rm9yIGV4YW1wbGUsIGlmIHRoZSBvYmplY3QgZmlsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3VzZXIvYnVpbGQvZm9vLm88L3NwYW4+PC9zYW1wPiB3YXMgYnVpbHQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWFyY3M8L3NwYW4+PC9zYW1wPiwgdGhlIGZpbmFsIGV4ZWN1dGFibGUgd2lsbCB0cnkgdG8gY3JlYXRlIHRoZSBkYXRhIGZpbGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vdXNlci9idWlsZC9mb28uZ2NkYTwvc3Bhbj48L3NhbXA+IHdoZW4gcnVubmluZyBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4gIFRoaXMgd2lsbAorZmFpbCBpZiB0aGUgY29ycmVzcG9uZGluZyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgYW5kIGl0IGlzIHVuYWJsZSB0byBjcmVhdGUKK2l0LiAgVGhpcyBjYW4gYmUgb3ZlcmNvbWUgYnksIGZvciBleGFtcGxlLCBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCBhcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HQ09WX1BSRUZJWD0vdGFyZ2V0L3J1bjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HQ09WX1BSRUZJWF9TVFJJUD0xPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgU3VjaCBhCitzZXR0aW5nIHdpbGwgbmFtZSB0aGUgZGF0YSBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vdGFyZ2V0L3J1bi9idWlsZC9mb28uZ2NkYTwvc3Bhbj48L3NhbXA+LgorCisgPHA+WW91IG11c3QgbW92ZSB0aGUgZGF0YSBmaWxlcyB0byB0aGUgZXhwZWN0ZWQgZGlyZWN0b3J5IHRyZWUgaW4gb3JkZXIgdG8KK3VzZSB0aGVtIGZvciBwcm9maWxlIGRpcmVjdGVkIG9wdGltaXphdGlvbnMgKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdXNlLXByb2ZpbGU8L3NwYW4+PC9zYW1wPiksIG9yIHRvCit1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gdG9vbC4KKworPCEtLSBDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0NDIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBnY2MudGV4aS4gLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9ERUMtQWxwaGEtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9ERUMtQWxwaGEtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxY2EyMjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RFQy1BbHBoYS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwyODEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRFQyBBbHBoYSBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiIHRpdGxlPSJEYXJ3aW4gT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZSMzAtT3B0aW9ucy5odG1sI0ZSMzAtT3B0aW9ucyIgdGl0bGU9IkZSMzAgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJERUMtQWxwaGEtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGUjMwLU9wdGlvbnMuaHRtbCNGUjMwLU9wdGlvbnMiPkZSMzAgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjEwIERFQyBBbHBoYSBPcHRpb25zPC9oND4KKworPHA+VGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgREVDIEFscGhhIGltcGxlbWVudGF0aW9uczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1uby1zb2Z0LWZsb2F0PC9jb2RlPjxkdD48Y29kZT4tbXNvZnQtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc29mdF8wMDJkZmxvYXQtMTMxNSI+PC9hPjxhIG5hbWU9ImluZGV4LW1zb2Z0XzAwMmRmbG9hdC0xMzE2Ij48L2E+VXNlIChkbyBub3QgdXNlKSB0aGUgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGZvcgorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4gIFdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zb2Z0LWZsb2F0PC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLAorZnVuY3Rpb25zIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJnY2MuYTwvc3Bhbj48L3NhbXA+IGFyZSB1c2VkIHRvIHBlcmZvcm0gZmxvYXRpbmctcG9pbnQKK29wZXJhdGlvbnMuICBVbmxlc3MgdGhleSBhcmUgcmVwbGFjZWQgYnkgcm91dGluZXMgdGhhdCBlbXVsYXRlIHRoZQorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucywgb3IgY29tcGlsZWQgaW4gc3VjaCBhIHdheSBhcyB0byBjYWxsIHN1Y2gKK2VtdWxhdGlvbnMgcm91dGluZXMsIHRoZXNlIHJvdXRpbmVzIGlzc3VlIGZsb2F0aW5nLXBvaW50CitvcGVyYXRpb25zLiAgIElmIHlvdSBhcmUgY29tcGlsaW5nIGZvciBhbiBBbHBoYSB3aXRob3V0IGZsb2F0aW5nLXBvaW50CitvcGVyYXRpb25zLCB5b3UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgbGlicmFyeSBpcyBidWlsdCBzbyBhcyBub3QgdG8gY2FsbAordGhlbS4KKworICAgICA8cD5Ob3RlIHRoYXQgQWxwaGEgaW1wbGVtZW50YXRpb25zIHdpdGhvdXQgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhcmUKK3JlcXVpcmVkIHRvIGhhdmUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mcC1yZWc8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZnAtcmVnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZwXzAwMmRyZWctMTMxNyI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZnBfMDAyZHJlZ3MtMTMxOCI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlciBzZXQuIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1mcC1yZWdzPC9zcGFuPjwvc2FtcD4gaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNvZnQtZmxvYXQ8L3NwYW4+PC9zYW1wPi4gIElmIHRoZSBmbG9hdGluZy1wb2ludAorcmVnaXN0ZXIgc2V0IGlzIG5vdCB1c2VkLCBmbG9hdGluZy1wb2ludCBvcGVyYW5kcyBhcmUgcGFzc2VkIGluIGludGVnZXIKK3JlZ2lzdGVycyBhcyBpZiB0aGV5IHdlcmUgaW50ZWdlcnMgYW5kIGZsb2F0aW5nLXBvaW50IHJlc3VsdHMgYXJlIHBhc3NlZAoraW4gPGNvZGU+JDA8L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+JGYwPC9jb2RlPi4gIFRoaXMgaXMgYSBub24tc3RhbmRhcmQgY2FsbGluZyBzZXF1ZW5jZSwKK3NvIGFueSBmdW5jdGlvbiB3aXRoIGEgZmxvYXRpbmctcG9pbnQgYXJndW1lbnQgb3IgcmV0dXJuIHZhbHVlIGNhbGxlZCBieSBjb2RlCitjb21waWxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tZnAtcmVnczwvc3Bhbj48L3NhbXA+IG11c3QgYWxzbyBiZSBjb21waWxlZCB3aXRoIHRoYXQKK29wdGlvbi4KKworICAgICA8cD5BIHR5cGljYWwgdXNlIG9mIHRoaXMgb3B0aW9uIGlzIGJ1aWxkaW5nIGEga2VybmVsIHRoYXQgZG9lcyBub3QgdXNlLAorYW5kIGhlbmNlIG5lZWQgbm90IHNhdmUgYW5kIHJlc3RvcmUsIGFueSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWllZWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pZWVlLTEzMTkiPjwvYT5UaGUgQWxwaGEgYXJjaGl0ZWN0dXJlIGltcGxlbWVudHMgZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUgb3B0aW1pemVkIGZvcgorbWF4aW11bSBwZXJmb3JtYW5jZS4gIEl0IGlzIG1vc3RseSBjb21wbGlhbnQgd2l0aCB0aGUgSUVFRSBmbG9hdGluZy1wb2ludAorc3RhbmRhcmQuICBIb3dldmVyLCBmb3IgZnVsbCBjb21wbGlhbmNlLCBzb2Z0d2FyZSBhc3Npc3RhbmNlIGlzCityZXF1aXJlZC4gIFRoaXMgb3B0aW9uIGdlbmVyYXRlcyBjb2RlIGZ1bGx5IElFRUUtY29tcGxpYW50IGNvZGUKKzxlbT5leGNlcHQ8L2VtPiB0aGF0IHRoZSA8dmFyPmluZXhhY3QtZmxhZzwvdmFyPiBpcyBub3QgbWFpbnRhaW5lZCAoc2VlIGJlbG93KS4gCitJZiB0aGlzIG9wdGlvbiBpcyB0dXJuZWQgb24sIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gPGNvZGU+X0lFRUVfRlA8L2NvZGU+IGlzCitkZWZpbmVkIGR1cmluZyBjb21waWxhdGlvbi4gIFRoZSByZXN1bHRpbmcgY29kZSBpcyBsZXNzIGVmZmljaWVudCBidXQgaXMKK2FibGUgdG8gY29ycmVjdGx5IHN1cHBvcnQgZGVub3JtYWxpemVkIG51bWJlcnMgYW5kIGV4Y2VwdGlvbmFsIElFRUUKK3ZhbHVlcyBzdWNoIGFzIG5vdC1hLW51bWJlciBhbmQgcGx1cy9taW51cyBpbmZpbml0eS4gIE90aGVyIEFscGhhCitjb21waWxlcnMgY2FsbCB0aGlzIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taWVlZV93aXRoX25vX2luZXhhY3Q8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taWVlZS13aXRoLWluZXhhY3Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pZWVlXzAwMmR3aXRoXzAwMmRpbmV4YWN0LTEzMjAiPjwvYT5UaGlzIGlzIGxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1pZWVlPC9zcGFuPjwvc2FtcD4gZXhjZXB0IHRoZSBnZW5lcmF0ZWQgY29kZSBhbHNvIG1haW50YWlucwordGhlIElFRUUgPHZhcj5pbmV4YWN0LWZsYWc8L3Zhcj4uICBUdXJuaW5nIG9uIHRoaXMgb3B0aW9uIGNhdXNlcyB0aGUKK2dlbmVyYXRlZCBjb2RlIHRvIGltcGxlbWVudCBmdWxseS1jb21wbGlhbnQgSUVFRSBtYXRoLiAgSW4gYWRkaXRpb24gdG8KKzxjb2RlPl9JRUVFX0ZQPC9jb2RlPiwgPGNvZGU+X0lFRUVfRlBfRVhBQ1Q8L2NvZGU+IGlzIGRlZmluZWQgYXMgYSBwcmVwcm9jZXNzb3IKK21hY3JvLiAgT24gc29tZSBBbHBoYSBpbXBsZW1lbnRhdGlvbnMgdGhlIHJlc3VsdGluZyBjb2RlIG1heSBleGVjdXRlCitzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuIHRoZSBjb2RlIGdlbmVyYXRlZCBieSBkZWZhdWx0LiAgU2luY2UgdGhlcmUgaXMKK3ZlcnkgbGl0dGxlIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSA8dmFyPmluZXhhY3QtZmxhZzwvdmFyPiwgeW91IHNob3VsZAorbm9ybWFsbHkgbm90IHNwZWNpZnkgdGhpcyBvcHRpb24uICBPdGhlciBBbHBoYSBjb21waWxlcnMgY2FsbCB0aGlzCitvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWllZWVfd2l0aF9pbmV4YWN0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZwLXRyYXAtbW9kZT08L2NvZGU+PHZhcj50cmFwLW1vZGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZwXzAwMmR0cmFwXzAwMmRtb2RlLTEzMjEiPjwvYT5UaGlzIG9wdGlvbiBjb250cm9scyB3aGF0IGZsb2F0aW5nLXBvaW50IHJlbGF0ZWQgdHJhcHMgYXJlIGVuYWJsZWQuIAorT3RoZXIgQWxwaGEgY29tcGlsZXJzIGNhbGwgdGhpcyBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwdG0gPC9zcGFuPjx2YXI+dHJhcC1tb2RlPC92YXI+PC9zYW1wPi4gCitUaGUgdHJhcCBtb2RlIGNhbiBiZSBzZXQgdG8gb25lIG9mIGZvdXIgdmFsdWVzOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5UaGlzIGlzIHRoZSBkZWZhdWx0IChub3JtYWwpIHNldHRpbmcuICBUaGUgb25seSB0cmFwcyB0aGF0IGFyZSBlbmFibGVkCithcmUgdGhlIG9uZXMgdGhhdCBjYW5ub3QgYmUgZGlzYWJsZWQgaW4gc29mdHdhcmUgKGUuZy4sIGRpdmlzaW9uIGJ5IHplcm8KK3RyYXApLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW4gYWRkaXRpb24gdG8gdGhlIHRyYXBzIGVuYWJsZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB1bmRlcmZsb3cgdHJhcHMgYXJlIGVuYWJsZWQKK2FzIHdlbGwuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3U8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+TGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnU8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBtYXJrZWQgdG8gYmUgc2FmZSBmb3Igc29mdHdhcmUKK2NvbXBsZXRpb24gKHNlZSBBbHBoYSBhcmNoaXRlY3R1cmUgbWFudWFsIGZvciBkZXRhaWxzKS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdWk8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+TGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBidXQgaW5leGFjdCB0cmFwcyBhcmUgZW5hYmxlZCBhcyB3ZWxsLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZwLXJvdW5kaW5nLW1vZGU9PC9jb2RlPjx2YXI+cm91bmRpbmctbW9kZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tZnBfMDAyZHJvdW5kaW5nXzAwMmRtb2RlLTEzMjIiPjwvYT5TZWxlY3RzIHRoZSBJRUVFIHJvdW5kaW5nIG1vZGUuICBPdGhlciBBbHBoYSBjb21waWxlcnMgY2FsbCB0aGlzIG9wdGlvbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm0gPC9zcGFuPjx2YXI+cm91bmRpbmctbW9kZTwvdmFyPjwvc2FtcD4uICBUaGUgPHZhcj5yb3VuZGluZy1tb2RlPC92YXI+IGNhbiBiZSBvbmUKK29mOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Ob3JtYWwgSUVFRSByb3VuZGluZyBtb2RlLiAgRmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgcm91bmRlZCB0b3dhcmRzCit0aGUgbmVhcmVzdCBtYWNoaW5lIG51bWJlciBvciB0b3dhcmRzIHRoZSBldmVuIG1hY2hpbmUgbnVtYmVyIGluIGNhc2UKK29mIGEgdGllLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm08L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Um91bmQgdG93YXJkcyBtaW51cyBpbmZpbml0eS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkNob3BwZWQgcm91bmRpbmcgbW9kZS4gIEZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXJlIHJvdW5kZWQgdG93YXJkcyB6ZXJvLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RHluYW1pYyByb3VuZGluZyBtb2RlLiAgQSBmaWVsZCBpbiB0aGUgZmxvYXRpbmctcG9pbnQgY29udHJvbCByZWdpc3RlcgorKDx2YXI+ZnBjcjwvdmFyPiwgc2VlIEFscGhhIGFyY2hpdGVjdHVyZSByZWZlcmVuY2UgbWFudWFsKSBjb250cm9scyB0aGUKK3JvdW5kaW5nIG1vZGUgaW4gZWZmZWN0LiAgVGhlIEMgbGlicmFyeSBpbml0aWFsaXplcyB0aGlzIHJlZ2lzdGVyIGZvcgorcm91bmRpbmcgdG93YXJkcyBwbHVzIGluZmluaXR5LiAgVGh1cywgdW5sZXNzIHlvdXIgcHJvZ3JhbSBtb2RpZmllcyB0aGUKKzx2YXI+ZnBjcjwvdmFyPiwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvcnJlc3BvbmRzIHRvIHJvdW5kIHRvd2FyZHMgcGx1cyBpbmZpbml0eS4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10cmFwLXByZWNpc2lvbj08L2NvZGU+PHZhcj50cmFwLXByZWNpc2lvbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tdHJhcF8wMDJkcHJlY2lzaW9uLTEzMjMiPjwvYT5JbiB0aGUgQWxwaGEgYXJjaGl0ZWN0dXJlLCBmbG9hdGluZy1wb2ludCB0cmFwcyBhcmUgaW1wcmVjaXNlLiAgVGhpcworbWVhbnMgd2l0aG91dCBzb2Z0d2FyZSBhc3Npc3RhbmNlIGl0IGlzIGltcG9zc2libGUgdG8gcmVjb3ZlciBmcm9tIGEKK2Zsb2F0aW5nIHRyYXAgYW5kIHByb2dyYW0gZXhlY3V0aW9uIG5vcm1hbGx5IG5lZWRzIHRvIGJlIHRlcm1pbmF0ZWQuIAorR0NDIGNhbiBnZW5lcmF0ZSBjb2RlIHRoYXQgY2FuIGFzc2lzdCBvcGVyYXRpbmcgc3lzdGVtIHRyYXAgaGFuZGxlcnMKK2luIGRldGVybWluaW5nIHRoZSBleGFjdCBsb2NhdGlvbiB0aGF0IGNhdXNlZCBhIGZsb2F0aW5nLXBvaW50IHRyYXAuIAorRGVwZW5kaW5nIG9uIHRoZSByZXF1aXJlbWVudHMgb2YgYW4gYXBwbGljYXRpb24sIGRpZmZlcmVudCBsZXZlbHMgb2YKK3ByZWNpc2lvbnMgY2FuIGJlIHNlbGVjdGVkOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Qcm9ncmFtIHByZWNpc2lvbi4gIFRoaXMgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IGFuZCBtZWFucyBhIHRyYXAgaGFuZGxlcgorY2FuIG9ubHkgaWRlbnRpZnkgd2hpY2ggcHJvZ3JhbSBjYXVzZWQgYSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24uCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5GdW5jdGlvbiBwcmVjaXNpb24uICBUaGUgdHJhcCBoYW5kbGVyIGNhbiBkZXRlcm1pbmUgdGhlIGZ1bmN0aW9uIHRoYXQKK2NhdXNlZCBhIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkluc3RydWN0aW9uIHByZWNpc2lvbi4gIFRoZSB0cmFwIGhhbmRsZXIgY2FuIGRldGVybWluZSB0aGUgZXhhY3QKK2luc3RydWN0aW9uIHRoYXQgY2F1c2VkIGEgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uLiAKKzwvZGw+CisKKyAgICAgPHA+T3RoZXIgQWxwaGEgY29tcGlsZXJzIHByb3ZpZGUgdGhlIGVxdWl2YWxlbnQgb3B0aW9ucyBjYWxsZWQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zY29wZV9zYWZlPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1yZXN1bXB0aW9uX3NhZmU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taWVlZS1jb25mb3JtYW50PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taWVlZV8wMDJkY29uZm9ybWFudC0xMzI0Ij48L2E+VGhpcyBvcHRpb24gbWFya3MgdGhlIGdlbmVyYXRlZCBjb2RlIGFzIElFRUUgY29uZm9ybWFudC4gIFlvdSBtdXN0IG5vdAordXNlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYWxzbyBzcGVjaWZ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHJhcC1wcmVjaXNpb249aTwvc3Bhbj48L3NhbXA+IGFuZCBlaXRoZXIKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnAtdHJhcC1tb2RlPXN1PC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mcC10cmFwLW1vZGU9c3VpPC9zcGFuPjwvc2FtcD4uICBJdHMgb25seSBlZmZlY3QKK2lzIHRvIGVtaXQgdGhlIGxpbmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZWZsYWcgNDg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIG9mIHRoZQorZ2VuZXJhdGVkIGFzc2VtYmx5IGZpbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJ1aWxkLWNvbnN0YW50czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWJ1aWxkXzAwMmRjb25zdGFudHMtMTMyNSI+PC9hPk5vcm1hbGx5IEdDQyBleGFtaW5lcyBhIDMyLSBvciA2NC1iaXQgaW50ZWdlciBjb25zdGFudCB0bworc2VlIGlmIGl0IGNhbiBjb25zdHJ1Y3QgaXQgZnJvbSBzbWFsbGVyIGNvbnN0YW50cyBpbiB0d28gb3IgdGhyZWUKK2luc3RydWN0aW9ucy4gIElmIGl0IGNhbm5vdCwgaXQgb3V0cHV0cyB0aGUgY29uc3RhbnQgYXMgYSBsaXRlcmFsIGFuZAorZ2VuZXJhdGVzIGNvZGUgdG8gbG9hZCBpdCBmcm9tIHRoZSBkYXRhIHNlZ21lbnQgYXQgcnVuIHRpbWUuCisKKyAgICAgPHA+VXNlIHRoaXMgb3B0aW9uIHRvIHJlcXVpcmUgR0NDIHRvIGNvbnN0cnVjdCA8ZW0+YWxsPC9lbT4gaW50ZWdlciBjb25zdGFudHMKK3VzaW5nIGNvZGUsIGV2ZW4gaWYgaXQgdGFrZXMgbW9yZSBpbnN0cnVjdGlvbnMgKHRoZSBtYXhpbXVtIGlzIHNpeCkuCisKKyAgICAgPHA+WW91IHR5cGljYWxseSB1c2UgdGhpcyBvcHRpb24gdG8gYnVpbGQgYSBzaGFyZWQgbGlicmFyeSBkeW5hbWljCitsb2FkZXIuICBJdHNlbGYgYSBzaGFyZWQgbGlicmFyeSwgaXQgbXVzdCByZWxvY2F0ZSBpdHNlbGYgaW4gbWVtb3J5CitiZWZvcmUgaXQgY2FuIGZpbmQgdGhlIHZhcmlhYmxlcyBhbmQgY29uc3RhbnRzIGluIGl0cyBvd24gZGF0YSBzZWdtZW50LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1id3g8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tYnd4PC9jb2RlPjxkdD48Y29kZT4tbWNpeDwvY29kZT48ZHQ+PGNvZGU+LW1uby1jaXg8L2NvZGU+PGR0Pjxjb2RlPi1tZml4PC9jb2RlPjxkdD48Y29kZT4tbW5vLWZpeDwvY29kZT48ZHQ+PGNvZGU+LW1tYXg8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbWF4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYnd4LTEzMjYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGJ3eC0xMzI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWNpeC0xMzI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRjaXgtMTMyOSI+PC9hPjxhIG5hbWU9ImluZGV4LW1maXgtMTMzMCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZml4LTEzMzEiPjwvYT48YSBuYW1lPSJpbmRleC1tbWF4LTEzMzIiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG1heC0xMzMzIj48L2E+SW5kaWNhdGUgd2hldGhlciBHQ0Mgc2hvdWxkIGdlbmVyYXRlIGNvZGUgdG8gdXNlIHRoZSBvcHRpb25hbCBCV1gsCitDSVgsIEZJWCBhbmQgTUFYIGluc3RydWN0aW9uIHNldHMuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIGluc3RydWN0aW9uCitzZXRzIHN1cHBvcnRlZCBieSB0aGUgQ1BVIHR5cGUgc3BlY2lmaWVkIHZpYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT08L3NwYW4+PC9zYW1wPiBvcHRpb24gb3IgdGhhdAorb2YgdGhlIENQVSBvbiB3aGljaCBHQ0Mgd2FzIGJ1aWx0IGlmIG5vbmUgaXMgc3BlY2lmaWVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mbG9hdC12YXg8L2NvZGU+PGR0Pjxjb2RlPi1tZmxvYXQtaWVlZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZsb2F0XzAwMmR2YXgtMTMzNCI+PC9hPjxhIG5hbWU9ImluZGV4LW1mbG9hdF8wMDJkaWVlZS0xMzM1Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgVkFYIEYgYW5kIEcgZmxvYXRpbmctcG9pbnQKK2FyaXRobWV0aWMgaW5zdGVhZCBvZiBJRUVFIHNpbmdsZSBhbmQgZG91YmxlIHByZWNpc2lvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZXhwbGljaXQtcmVsb2NzPC9jb2RlPjxkdD48Y29kZT4tbW5vLWV4cGxpY2l0LXJlbG9jczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWV4cGxpY2l0XzAwMmRyZWxvY3MtMTMzNiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZXhwbGljaXRfMDAyZHJlbG9jcy0xMzM3Ij48L2E+T2xkZXIgQWxwaGEgYXNzZW1ibGVycyBwcm92aWRlZCBubyB3YXkgdG8gZ2VuZXJhdGUgc3ltYm9sIHJlbG9jYXRpb25zCitleGNlcHQgdmlhIGFzc2VtYmxlciBtYWNyb3MuICBVc2Ugb2YgdGhlc2UgbWFjcm9zIGRvZXMgbm90IGFsbG93CitvcHRpbWFsIGluc3RydWN0aW9uIHNjaGVkdWxpbmcuICBHTlUgYmludXRpbHMgYXMgb2YgdmVyc2lvbiAyLjEyCitzdXBwb3J0cyBhIG5ldyBzeW50YXggdGhhdCBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIGV4cGxpY2l0bHkgbWFyaword2hpY2ggcmVsb2NhdGlvbnMgc2hvdWxkIGFwcGx5IHRvIHdoaWNoIGluc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uCitpcyBtb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsIGFzIEdDQyBkZXRlY3RzIHRoZSBjYXBhYmlsaXRpZXMgb2YKK3RoZSBhc3NlbWJsZXIgd2hlbiBpdCBpcyBidWlsdCBhbmQgc2V0cyB0aGUgZGVmYXVsdCBhY2NvcmRpbmdseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc21hbGwtZGF0YTwvY29kZT48ZHQ+PGNvZGU+LW1sYXJnZS1kYXRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc21hbGxfMDAyZGRhdGEtMTMzOCI+PC9hPjxhIG5hbWU9ImluZGV4LW1sYXJnZV8wMDJkZGF0YS0xMzM5Ij48L2E+V2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWV4cGxpY2l0LXJlbG9jczwvc3Bhbj48L3NhbXA+IGlzIGluIGVmZmVjdCwgc3RhdGljIGRhdGEgaXMKK2FjY2Vzc2VkIHZpYSA8ZGZuPmdwLXJlbGF0aXZlPC9kZm4+IHJlbG9jYXRpb25zLiAgV2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNtYWxsLWRhdGE8L3NwYW4+PC9zYW1wPgoraXMgdXNlZCwgb2JqZWN0cyA4IGJ5dGVzIGxvbmcgb3Igc21hbGxlciBhcmUgcGxhY2VkIGluIGEgPGRmbj5zbWFsbCBkYXRhIGFyZWE8L2Rmbj4KKyh0aGUgPGNvZGU+LnNkYXRhPC9jb2RlPiBhbmQgPGNvZGU+LnNic3M8L2NvZGU+IHNlY3Rpb25zKSBhbmQgYXJlIGFjY2Vzc2VkIHZpYQorMTYtYml0IHJlbG9jYXRpb25zIG9mZiBvZiB0aGUgPGNvZGU+JGdwPC9jb2RlPiByZWdpc3Rlci4gIFRoaXMgbGltaXRzIHRoZQorc2l6ZSBvZiB0aGUgc21hbGwgZGF0YSBhcmVhIHRvIDY0S0IsIGJ1dCBhbGxvd3MgdGhlIHZhcmlhYmxlcyB0byBiZQorZGlyZWN0bHkgYWNjZXNzZWQgdmlhIGEgc2luZ2xlIGluc3RydWN0aW9uLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbGFyZ2UtZGF0YTwvc3Bhbj48L3NhbXA+LiAgV2l0aCB0aGlzIG9wdGlvbiB0aGUgZGF0YSBhcmVhCitpcyBsaW1pdGVkIHRvIGp1c3QgYmVsb3cgMkdCLiAgUHJvZ3JhbXMgdGhhdCByZXF1aXJlIG1vcmUgdGhhbiAyR0Igb2YKK2RhdGEgbXVzdCB1c2UgPGNvZGU+bWFsbG9jPC9jb2RlPiBvciA8Y29kZT5tbWFwPC9jb2RlPiB0byBhbGxvY2F0ZSB0aGUgZGF0YSBpbiB0aGUKK2hlYXAgaW5zdGVhZCBvZiBpbiB0aGUgcHJvZ3JhbSdzIGRhdGEgc2VnbWVudC4KKworICAgICA8cD5XaGVuIGdlbmVyYXRpbmcgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwaWM8L3NwYW4+PC9zYW1wPiBpbXBsaWVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNtYWxsLWRhdGE8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZQSUM8L3NwYW4+PC9zYW1wPiBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbGFyZ2UtZGF0YTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zbWFsbC10ZXh0PC9jb2RlPjxkdD48Y29kZT4tbWxhcmdlLXRleHQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zbWFsbF8wMDJkdGV4dC0xMzQwIj48L2E+PGEgbmFtZT0iaW5kZXgtbWxhcmdlXzAwMmR0ZXh0LTEzNDEiPjwvYT5XaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc21hbGwtdGV4dDwvc3Bhbj48L3NhbXA+IGlzIHVzZWQsIHRoZSBjb21waWxlciBhc3N1bWVzIHRoYXQgdGhlCitjb2RlIG9mIHRoZSBlbnRpcmUgcHJvZ3JhbSAob3Igc2hhcmVkIGxpYnJhcnkpIGZpdHMgaW4gNE1CLCBhbmQgaXMKK3RodXMgcmVhY2hhYmxlIHdpdGggYSBicmFuY2ggaW5zdHJ1Y3Rpb24uICBXaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc21hbGwtZGF0YTwvc3Bhbj48L3NhbXA+CitpcyB1c2VkLCB0aGUgY29tcGlsZXIgY2FuIGFzc3VtZSB0aGF0IGFsbCBsb2NhbCBzeW1ib2xzIHNoYXJlIHRoZQorc2FtZSA8Y29kZT4kZ3A8L2NvZGU+IHZhbHVlLCBhbmQgdGh1cyByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMKK3JlcXVpcmVkIGZvciBhIGZ1bmN0aW9uIGNhbGwgZnJvbSA0IHRvIDEuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1sYXJnZS10ZXh0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5jcHVfdHlwZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY3B1LTEzNDIiPjwvYT5TZXQgdGhlIGluc3RydWN0aW9uIHNldCBhbmQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvcgorbWFjaGluZSB0eXBlIDx2YXI+Y3B1X3R5cGU8L3Zhcj4uICBZb3UgY2FuIHNwZWNpZnkgZWl0aGVyIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkVWPC9zcGFuPjwvc2FtcD4mcnNxdW87CitzdHlsZSBuYW1lIG9yIHRoZSBjb3JyZXNwb25kaW5nIGNoaXAgbnVtYmVyLiAgR0NDIHN1cHBvcnRzIHNjaGVkdWxpbmcKK3BhcmFtZXRlcnMgZm9yIHRoZSBFVjQsIEVWNSBhbmQgRVY2IGZhbWlseSBvZiBwcm9jZXNzb3JzIGFuZAorY2hvb3NlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBpbnN0cnVjdGlvbiBzZXQgZnJvbSB0aGUgcHJvY2Vzc29yCit5b3Ugc3BlY2lmeS4gIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHByb2Nlc3NvciB0eXBlLCBHQ0MgZGVmYXVsdHMKK3RvIHRoZSBwcm9jZXNzb3Igb24gd2hpY2ggdGhlIGNvbXBpbGVyIHdhcyBidWlsdC4KKworICAgICA8cD5TdXBwb3J0ZWQgdmFsdWVzIGZvciA8dmFyPmNwdV90eXBlPC92YXI+IGFyZQorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXY0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXY0NTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjIxMDY0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlNjaGVkdWxlcyBhcyBhbiBFVjQgYW5kIGhhcyBubyBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ldjU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yMTE2NDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TY2hlZHVsZXMgYXMgYW4gRVY1IGFuZCBoYXMgbm8gaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXY1Njwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjIxMTY0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TY2hlZHVsZXMgYXMgYW4gRVY1IGFuZCBzdXBwb3J0cyB0aGUgQldYIGV4dGVuc2lvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wY2E1Njwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjIxMTY0cGM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yMTE2NFBDPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlNjaGVkdWxlcyBhcyBhbiBFVjUgYW5kIHN1cHBvcnRzIHRoZSBCV1ggYW5kIE1BWCBleHRlbnNpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmV2Njwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjIxMjY0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlNjaGVkdWxlcyBhcyBhbiBFVjYgYW5kIHN1cHBvcnRzIHRoZSBCV1gsIEZJWCwgYW5kIE1BWCBleHRlbnNpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmV2Njc8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yMTI2NGE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+U2NoZWR1bGVzIGFzIGFuIEVWNiBhbmQgc3VwcG9ydHMgdGhlIEJXWCwgQ0lYLCBGSVgsIGFuZCBNQVggZXh0ZW5zaW9ucy4gCis8L2RsPgorCisgICAgIDxwPk5hdGl2ZSB0b29sY2hhaW5zIGFsc28gc3VwcG9ydCB0aGUgdmFsdWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uYXRpdmU8L3NwYW4+PC9zYW1wPiZyc3F1bzssCit3aGljaCBzZWxlY3RzIHRoZSBiZXN0IGFyY2hpdGVjdHVyZSBvcHRpb24gZm9yIHRoZSBob3N0IHByb2Nlc3Nvci4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1uYXRpdmU8L3NwYW4+PC9zYW1wPiBoYXMgbm8gZWZmZWN0IGlmIEdDQyBkb2VzIG5vdCByZWNvZ25pemUKK3RoZSBwcm9jZXNzb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXR1bmU9PC9jb2RlPjx2YXI+Y3B1X3R5cGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXR1bmUtMTM0MyI+PC9hPlNldCBvbmx5IHRoZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIG1hY2hpbmUgdHlwZQorPHZhcj5jcHVfdHlwZTwvdmFyPi4gIFRoZSBpbnN0cnVjdGlvbiBzZXQgaXMgbm90IGNoYW5nZWQuCisKKyAgICAgPHA+TmF0aXZlIHRvb2xjaGFpbnMgYWxzbyBzdXBwb3J0IHRoZSB2YWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5hdGl2ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK3doaWNoIHNlbGVjdHMgdGhlIGJlc3QgYXJjaGl0ZWN0dXJlIG9wdGlvbiBmb3IgdGhlIGhvc3QgcHJvY2Vzc29yLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZT1uYXRpdmU8L3NwYW4+PC9zYW1wPiBoYXMgbm8gZWZmZWN0IGlmIEdDQyBkb2VzIG5vdCByZWNvZ25pemUKK3RoZSBwcm9jZXNzb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW1lbW9yeS1sYXRlbmN5PTwvY29kZT48dmFyPnRpbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbW1lbW9yeV8wMDJkbGF0ZW5jeS0xMzQ0Ij48L2E+U2V0cyB0aGUgbGF0ZW5jeSB0aGUgc2NoZWR1bGVyIHNob3VsZCBhc3N1bWUgZm9yIHR5cGljYWwgbWVtb3J5CityZWZlcmVuY2VzIGFzIHNlZW4gYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhpcyBudW1iZXIgaXMgaGlnaGx5CitkZXBlbmRlbnQgb24gdGhlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgdXNlZCBieSB0aGUgYXBwbGljYXRpb24KK2FuZCB0aGUgc2l6ZSBvZiB0aGUgZXh0ZXJuYWwgY2FjaGUgb24gdGhlIG1hY2hpbmUuCisKKyAgICAgPHA+VmFsaWQgb3B0aW9ucyBmb3IgPHZhcj50aW1lPC92YXI+IGFyZQorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48dmFyPm51bWJlcjwvdmFyPjwvc2FtcD4mcnNxdW87PGRkPkEgZGVjaW1hbCBudW1iZXIgcmVwcmVzZW50aW5nIGNsb2NrIGN5Y2xlcy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MMTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkwyPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TDM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tYWluPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoZSBjb21waWxlciBjb250YWlucyBlc3RpbWF0ZXMgb2YgdGhlIG51bWJlciBvZiBjbG9jayBjeWNsZXMgZm9yCismbGRxdW87dHlwaWNhbCZyZHF1bzsgRVY0ICZhbXA7IEVWNSBoYXJkd2FyZSBmb3IgdGhlIExldmVsIDEsIDIgJmFtcDsgMyBjYWNoZXMKKyhhbHNvIGNhbGxlZCBEY2FjaGUsIFNjYWNoZSwgYW5kIEJjYWNoZSksIGFzIHdlbGwgYXMgdG8gbWFpbiBtZW1vcnkuIAorTm90ZSB0aGF0IEwzIGlzIG9ubHkgdmFsaWQgZm9yIEVWNS4KKworICAgICA8L2RsPgorICAgICA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EYXJ3aW4tRm9ybWF0LUNoZWNrcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EYXJ3aW4tRm9ybWF0LUNoZWNrcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZjUwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Rhcndpbi1Gb3JtYXQtQ2hlY2tzLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGFyd2luIEZvcm1hdCBDaGVja3MgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGFyZ2V0LUZvcm1hdC1DaGVja3MuaHRtbCNUYXJnZXQtRm9ybWF0LUNoZWNrcyIgdGl0bGU9IlRhcmdldCBGb3JtYXQgQ2hlY2tzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU29sYXJpcy1Gb3JtYXQtQ2hlY2tzLmh0bWwjU29sYXJpcy1Gb3JtYXQtQ2hlY2tzIiB0aXRsZT0iU29sYXJpcyBGb3JtYXQgQ2hlY2tzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRhcndpbi1Gb3JtYXQtQ2hlY2tzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU29sYXJpcy1Gb3JtYXQtQ2hlY2tzLmh0bWwjU29sYXJpcy1Gb3JtYXQtQ2hlY2tzIj5Tb2xhcmlzIEZvcm1hdCBDaGVja3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUYXJnZXQtRm9ybWF0LUNoZWNrcy5odG1sI1RhcmdldC1Gb3JtYXQtQ2hlY2tzIj5UYXJnZXQgRm9ybWF0IENoZWNrczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTcuMiBEYXJ3aW4gRm9ybWF0IENoZWNrczwvaDQ+CisKKzxwPkRhcndpbiB0YXJnZXRzIHN1cHBvcnQgdGhlIDxjb2RlPkNGU3RyaW5nPC9jb2RlPiAob3IgPGNvZGU+X19DRlN0cmluZ19fPC9jb2RlPikgaW4gdGhlIGZvcm1hdAorYXR0cmlidXRlIGNvbnRleHQuICBEZWNsYXJhdGlvbnMgbWFkZSB3aXRoIHN1Y2ggYXR0cmlidXRpb24gYXJlIHBhcnNlZCBmb3IgY29ycmVjdCBzeW50YXgKK2FuZCBmb3JtYXQgYXJndW1lbnQgdHlwZXMuICBIb3dldmVyLCBwYXJzaW5nIG9mIHRoZSBmb3JtYXQgc3RyaW5nIGl0c2VsZiBpcyBjdXJyZW50bHkgdW5kZWZpbmVkCithbmQgaXMgbm90IGNhcnJpZWQgb3V0IGJ5IHRoaXMgdmVyc2lvbiBvZiB0aGUgY29tcGlsZXIuCisKKyA8cD5BZGRpdGlvbmFsbHksIDxjb2RlPkNGU3RyaW5nUmVmczwvY29kZT4gKGRlZmluZWQgYnkgdGhlIDxjb2RlPkNvcmVGb3VuZGF0aW9uPC9jb2RlPiBoZWFkZXJzKSBtYXkKK2Fsc28gYmUgdXNlZCBhcyBmb3JtYXQgYXJndW1lbnRzLiAgTm90ZSB0aGF0IHRoZSByZWxldmFudCBoZWFkZXJzIGFyZSBvbmx5IGxpa2VseSB0byBiZQorYXZhaWxhYmxlIG9uIERhcndpbiAoT1NYKSBpbnN0YWxsYXRpb25zLiAgT24gc3VjaCBpbnN0YWxsYXRpb25zLCB0aGUgWENvZGUgYW5kIHN5c3RlbQorZG9jdW1lbnRhdGlvbiBwcm92aWRlIGRlc2NyaXB0aW9ucyBvZiA8Y29kZT5DRlN0cmluZzwvY29kZT4sIDxjb2RlPkNGU3RyaW5nUmVmczwvY29kZT4gYW5kCithc3NvY2lhdGVkIGZ1bmN0aW9ucy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGFyd2luLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGFyd2luLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDZjMGIwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EYXJ3aW4tT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EYXJ3aW4gT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNDUjE2LU9wdGlvbnMiIHRpdGxlPSJDUjE2IE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIiB0aXRsZT0iREVDIEFscGhhIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGFyd2luLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNDUjE2LU9wdGlvbnMiPkNSMTYgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy45IERhcndpbiBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtRGFyd2luLW9wdGlvbnMtMTI0MCI+PC9hPgorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgYWxsIGFyY2hpdGVjdHVyZXMgcnVubmluZyB0aGUgRGFyd2luIG9wZXJhdGluZworc3lzdGVtLgorCisgPHA+RlNGIEdDQyBvbiBEYXJ3aW4gZG9lcyBub3QgY3JlYXRlICZsZHF1bztmYXQmcmRxdW87IG9iamVjdCBmaWxlczsgaXQgY3JlYXRlcworYW4gb2JqZWN0IGZpbGUgZm9yIHRoZSBzaW5nbGUgYXJjaGl0ZWN0dXJlIHRoYXQgR0NDIHdhcyBidWlsdCB0bwordGFyZ2V0LiAgQXBwbGUncyBHQ0Mgb24gRGFyd2luIGRvZXMgY3JlYXRlICZsZHF1bztmYXQmcmRxdW87IGZpbGVzIGlmIG11bHRpcGxlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYXJjaDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgYXJlIHVzZWQ7IGl0IGRvZXMgc28gYnkgcnVubmluZyB0aGUgY29tcGlsZXIgb3IKK2xpbmtlciBtdWx0aXBsZSB0aW1lcyBhbmQgam9pbmluZyB0aGUgcmVzdWx0cyB0b2dldGhlciB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGlwbzwvc3Bhbj48L3NhbXA+LgorCisgPHA+VGhlIHN1YnR5cGUgb2YgdGhlIGZpbGUgY3JlYXRlZCAobGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBwYzc0MDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wcGM5NzA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTY4Njwvc3Bhbj48L3NhbXA+JnJzcXVvOykgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZmxhZ3MgdGhhdCBzcGVjaWZ5IHRoZSBJU0EKK3RoYXQgR0NDIGlzIHRhcmdldGluZywgbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaDwvc3Bhbj48L3NhbXA+LiAgVGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9yY2VfY3B1c3VidHlwZV9BTEw8L3NwYW4+PC9zYW1wPiBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhpcy4KKworIDxwPlRoZSBEYXJ3aW4gdG9vbHMgdmFyeSBpbiB0aGVpciBiZWhhdmlvciB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIElTQQorbWlzbWF0Y2guICBUaGUgYXNzZW1ibGVyLCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YXM8L3NwYW4+PC9zYW1wPiwgb25seSBwZXJtaXRzIGluc3RydWN0aW9ucyB0bworYmUgdXNlZCB0aGF0IGFyZSB2YWxpZCBmb3IgdGhlIHN1YnR5cGUgb2YgdGhlIGZpbGUgaXQgaXMgZ2VuZXJhdGluZywKK3NvIHlvdSBjYW5ub3QgcHV0IDY0LWJpdCBpbnN0cnVjdGlvbnMgaW4gYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBwYzc1MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvYmplY3QgZmlsZS4gCitUaGUgbGlua2VyIGZvciBzaGFyZWQgbGlicmFyaWVzLCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9iaW4vbGlidG9vbDwvc3Bhbj48L3NhbXA+LCBmYWlscworYW5kIHByaW50cyBhbiBlcnJvciBpZiBhc2tlZCB0byBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSB3aXRoIGEgbGVzcworcmVzdHJpY3RpdmUgc3VidHlwZSB0aGFuIGl0cyBpbnB1dCBmaWxlcyAoZm9yIGluc3RhbmNlLCB0cnlpbmcgdG8gcHV0CithICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cHBjOTcwPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9iamVjdCBmaWxlIGluIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wcGM3NDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGxpYnJhcnkpLiAgVGhlIGxpbmtlcgorZm9yIGV4ZWN1dGFibGVzLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiwgcXVpZXRseSBnaXZlcyB0aGUgZXhlY3V0YWJsZSB0aGUgbW9zdAorcmVzdHJpY3RpdmUgc3VidHlwZSBvZiBhbnkgb2YgaXRzIGlucHV0IGZpbGVzLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tRjwvY29kZT48dmFyPmRpcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1GLTEyNDEiPjwvYT5BZGQgdGhlIGZyYW1ld29yayBkaXJlY3RvcnkgPHZhcj5kaXI8L3Zhcj4gdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3Qgb2YKK2RpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkIGZvciBoZWFkZXIgZmlsZXMuICBUaGVzZSBkaXJlY3RvcmllcyBhcmUKK2ludGVybGVhdmVkIHdpdGggdGhvc2Ugc3BlY2lmaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBhbmQgYXJlCitzY2FubmVkIGluIGEgbGVmdC10by1yaWdodCBvcmRlci4KKworICAgICA8cD5BIGZyYW1ld29yayBkaXJlY3RvcnkgaXMgYSBkaXJlY3Rvcnkgd2l0aCBmcmFtZXdvcmtzIGluIGl0LiAgQQorZnJhbWV3b3JrIGlzIGEgZGlyZWN0b3J5IHdpdGggYSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+SGVhZGVyczwvc3Bhbj48L3NhbXA+IGFuZC9vcgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPlByaXZhdGVIZWFkZXJzPC9zcGFuPjwvc2FtcD4gZGlyZWN0b3J5IGNvbnRhaW5lZCBkaXJlY3RseSBpbiBpdCB0aGF0IGVuZHMKK2luIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZnJhbWV3b3JrPC9zcGFuPjwvc2FtcD4uICBUaGUgbmFtZSBvZiBhIGZyYW1ld29yayBpcyB0aGUgbmFtZSBvZiB0aGlzCitkaXJlY3RvcnkgZXhjbHVkaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmZyYW1ld29yazwvc3Bhbj48L3NhbXA+LiAgSGVhZGVycyBhc3NvY2lhdGVkIHdpdGgKK3RoZSBmcmFtZXdvcmsgYXJlIGZvdW5kIGluIG9uZSBvZiB0aG9zZSB0d28gZGlyZWN0b3JpZXMsIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5IZWFkZXJzPC9zcGFuPjwvc2FtcD4gYmVpbmcgc2VhcmNoZWQgZmlyc3QuICBBIHN1YmZyYW1ld29yayBpcyBhIGZyYW1ld29yaworZGlyZWN0b3J5IHRoYXQgaXMgaW4gYSBmcmFtZXdvcmsncyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+RnJhbWV3b3Jrczwvc3Bhbj48L3NhbXA+IGRpcmVjdG9yeS4gCitJbmNsdWRlcyBvZiBzdWJmcmFtZXdvcmsgaGVhZGVycyBjYW4gb25seSBhcHBlYXIgaW4gYSBoZWFkZXIgb2YgYQorZnJhbWV3b3JrIHRoYXQgY29udGFpbnMgdGhlIHN1YmZyYW1ld29yaywgb3IgaW4gYSBzaWJsaW5nIHN1YmZyYW1ld29yaworaGVhZGVyLiAgVHdvIHN1YmZyYW1ld29ya3MgYXJlIHNpYmxpbmdzIGlmIHRoZXkgb2NjdXIgaW4gdGhlIHNhbWUKK2ZyYW1ld29yay4gIEEgc3ViZnJhbWV3b3JrIHNob3VsZCBub3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGEKK2ZyYW1ld29yazsgYSB3YXJuaW5nIGlzIGlzc3VlZCBpZiB0aGlzIGlzIHZpb2xhdGVkLiAgQ3VycmVudGx5IGEKK3N1YmZyYW1ld29yayBjYW5ub3QgaGF2ZSBzdWJmcmFtZXdvcmtzOyBpbiB0aGUgZnV0dXJlLCB0aGUgbWVjaGFuaXNtCittYXkgYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCB0aGlzLiAgVGhlIHN0YW5kYXJkIGZyYW1ld29ya3MgY2FuIGJlIGZvdW5kCitpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3M8L3NwYW4+PC9zYW1wPiBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vTGlicmFyeS9GcmFtZXdvcmtzPC9zcGFuPjwvc2FtcD4uICBBbiBleGFtcGxlIGluY2x1ZGUgbG9va3MgbGlrZQorPGNvZGU+I2luY2x1ZGUgJmx0O0ZyYW1ld29yay9oZWFkZXIuaCZndDs8L2NvZGU+LCB3aGVyZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+RnJhbWV3b3JrPC9zcGFuPjwvc2FtcD4gZGVub3RlcwordGhlIG5hbWUgb2YgdGhlIGZyYW1ld29yayBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmhlYWRlci5oPC9zcGFuPjwvc2FtcD4gaXMgZm91bmQgaW4gdGhlCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+UHJpdmF0ZUhlYWRlcnM8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+SGVhZGVyczwvc3Bhbj48L3NhbXA+IGRpcmVjdG9yeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pZnJhbWV3b3JrPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWlmcmFtZXdvcmstMTI0MiI+PC9hPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUY8L3NwYW4+PC9zYW1wPiBleGNlcHQgdGhlIGRpcmVjdG9yeSBpcyBhIHRyZWF0ZWQgYXMgYSBzeXN0ZW0KK2RpcmVjdG9yeS4gIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pZnJhbWV3b3JrPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRjwvc3Bhbj48L3NhbXA+IGlzIHRoYXQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taWZyYW1ld29yazwvc3Bhbj48L3NhbXA+IHRoZSBjb21waWxlciBkb2VzIG5vdAord2FybiBhYm91dCBjb25zdHJ1Y3RzIGNvbnRhaW5lZCB3aXRoaW4gaGVhZGVyIGZpbGVzIGZvdW5kIHZpYQorPHZhcj5kaXI8L3Zhcj4uICBUaGlzIG9wdGlvbiBpcyB2YWxpZCBvbmx5IGZvciB0aGUgQyBmYW1pbHkgb2YgbGFuZ3VhZ2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWd1c2VkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ndXNlZC0xMjQzIj48L2E+RW1pdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHN5bWJvbHMgdGhhdCBhcmUgdXNlZC4gIEZvciBzdGFicworZGVidWdnaW5nIGZvcm1hdCwgdGhpcyBlbmFibGVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy1zeW1ib2xzPC9zcGFuPjwvc2FtcD4uIAorVGhpcyBpcyBieSBkZWZhdWx0IE9OLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWdmdWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nZnVsbC0xMjQ0Ij48L2E+RW1pdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGFsbCBzeW1ib2xzIGFuZCB0eXBlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbWFjb3N4LXZlcnNpb24tbWluPTwvY29kZT48dmFyPnZlcnNpb248L3Zhcj48ZGQ+VGhlIGVhcmxpZXN0IHZlcnNpb24gb2YgTWFjT1MgWCB0aGF0IHRoaXMgZXhlY3V0YWJsZSB3aWxsIHJ1biBvbgoraXMgPHZhcj52ZXJzaW9uPC92YXI+LiAgVHlwaWNhbCB2YWx1ZXMgb2YgPHZhcj52ZXJzaW9uPC92YXI+IGluY2x1ZGUgPGNvZGU+MTAuMTwvY29kZT4sCis8Y29kZT4xMC4yPC9jb2RlPiwgYW5kIDxjb2RlPjEwLjMuOTwvY29kZT4uCisKKyAgICAgPHA+SWYgdGhlIGNvbXBpbGVyIHdhcyBidWlsdCB0byB1c2UgdGhlIHN5c3RlbSdzIGhlYWRlcnMgYnkgZGVmYXVsdCwKK3RoZW4gdGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzIHRoZSBzeXN0ZW0gdmVyc2lvbiBvbiB3aGljaCB0aGUKK2NvbXBpbGVyIGlzIHJ1bm5pbmcsIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBpcyB0byBtYWtlIGNob2ljZXMgdGhhdAorYXJlIGNvbXBhdGlibGUgd2l0aCBhcyBtYW55IHN5c3RlbXMgYW5kIGNvZGUgYmFzZXMgYXMgcG9zc2libGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWtlcm5lbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWtlcm5lbC0xMjQ1Ij48L2E+RW5hYmxlIGtlcm5lbCBkZXZlbG9wbWVudCBtb2RlLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ta2VybmVsPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHNldHMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGF0aWM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1jb21tb248L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1jeGEtYXRleGl0PC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWV4Y2VwdGlvbnM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1ub24tY2FsbC1leGNlcHRpb25zPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmFwcGxlLWtleHQ8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby13ZWFrPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tcnR0aTwvc3Bhbj48L3NhbXA+IHdoZXJlCithcHBsaWNhYmxlLiAgVGhpcyBtb2RlIGFsc28gc2V0cyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWFsdGl2ZWM8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc29mdC1mbG9hdDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWJ1aWx0aW48L3NwYW4+PC9zYW1wPiBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbG9uZy1icmFuY2g8L3NwYW4+PC9zYW1wPiBmb3IgUG93ZXJQQyB0YXJnZXRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1vbmUtYnl0ZS1ib29sPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tb25lXzAwMmRieXRlXzAwMmRib29sLTEyNDYiPjwvYT5PdmVycmlkZSB0aGUgZGVmYXVsdHMgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ym9vbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzbyB0aGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2l6ZW9mKGJvb2wpPT0xPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK0J5IGRlZmF1bHQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zaXplb2YoYm9vbCk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40PC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoZW4gY29tcGlsaW5nIGZvcgorRGFyd2luL1Bvd2VyUEMgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aGVuIGNvbXBpbGluZyBmb3IgRGFyd2luL3g4Niwgc28gdGhpcworb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24geDg2LgorCisgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tb25lLWJ5dGUtYm9vbDwvc3Bhbj48L3NhbXA+IHN3aXRjaCBjYXVzZXMgR0NDCit0byBnZW5lcmF0ZSBjb2RlIHRoYXQgaXMgbm90IGJpbmFyeSBjb21wYXRpYmxlIHdpdGggY29kZSBnZW5lcmF0ZWQKK3dpdGhvdXQgdGhhdCBzd2l0Y2guICBVc2luZyB0aGlzIHN3aXRjaCBtYXkgcmVxdWlyZSByZWNvbXBpbGluZyBhbGwKK290aGVyIG1vZHVsZXMgaW4gYSBwcm9ncmFtLCBpbmNsdWRpbmcgc3lzdGVtIGxpYnJhcmllcy4gIFVzZSB0aGlzCitzd2l0Y2ggdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGRhdGEgbW9kZWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeC1hbmQtY29udGludWU8L2NvZGU+PGR0Pjxjb2RlPi1mZml4LWFuZC1jb250aW51ZTwvY29kZT48ZHQ+PGNvZGU+LWZpbmRpcmVjdC1kYXRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZml4XzAwMmRhbmRfMDAyZGNvbnRpbnVlLTEyNDciPjwvYT48YSBuYW1lPSJpbmRleC1mZml4XzAwMmRhbmRfMDAyZGNvbnRpbnVlLTEyNDgiPjwvYT48YSBuYW1lPSJpbmRleC1maW5kaXJlY3RfMDAyZGRhdGEtMTI0OSI+PC9hPkdlbmVyYXRlIGNvZGUgc3VpdGFibGUgZm9yIGZhc3QgdHVybmFyb3VuZCBkZXZlbG9wbWVudCwgc3VjaCBhcyB0bworYWxsb3cgR0RCIHRvIGR5bmFtaWNhbGx5IGxvYWQgPGNvZGU+Lm88L2NvZGU+IGZpbGVzIGludG8gYWxyZWFkeS1ydW5uaW5nCitwcm9ncmFtcy4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1maW5kaXJlY3QtZGF0YTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZpeC1hbmQtY29udGludWU8L3NwYW4+PC9zYW1wPgorYXJlIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1hbGxfbG9hZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYWxsXzAwNWZsb2FkLTEyNTAiPjwvYT5Mb2FkcyBhbGwgbWVtYmVycyBvZiBzdGF0aWMgYXJjaGl2ZSBsaWJyYXJpZXMuIAorU2VlIG1hbiBsZCgxKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1hcmNoX2Vycm9yc19mYXRhbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYXJjaF8wMDVmZXJyb3JzXzAwNWZmYXRhbC0xMjUxIj48L2E+Q2F1c2UgdGhlIGVycm9ycyBoYXZpbmcgdG8gZG8gd2l0aCBmaWxlcyB0aGF0IGhhdmUgdGhlIHdyb25nIGFyY2hpdGVjdHVyZQordG8gYmUgZmF0YWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tYmluZF9hdF9sb2FkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1iaW5kXzAwNWZhdF8wMDVmbG9hZC0xMjUyIj48L2E+Q2F1c2VzIHRoZSBvdXRwdXQgZmlsZSB0byBiZSBtYXJrZWQgc3VjaCB0aGF0IHRoZSBkeW5hbWljIGxpbmtlciB3aWxsCitiaW5kIGFsbCB1bmRlZmluZWQgcmVmZXJlbmNlcyB3aGVuIHRoZSBmaWxlIGlzIGxvYWRlZCBvciBsYXVuY2hlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1idW5kbGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWJ1bmRsZS0xMjUzIj48L2E+UHJvZHVjZSBhIE1hY2gtbyBidW5kbGUgZm9ybWF0IGZpbGUuIAorU2VlIG1hbiBsZCgxKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1idW5kbGVfbG9hZGVyIDwvY29kZT48dmFyPmV4ZWN1dGFibGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtYnVuZGxlXzAwNWZsb2FkZXItMTI1NCI+PC9hPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgPHZhcj5leGVjdXRhYmxlPC92YXI+IHRoYXQgd2lsbCBsb2FkIHRoZSBidWlsZAorb3V0cHV0IGZpbGUgYmVpbmcgbGlua2VkLiAgU2VlIG1hbiBsZCgxKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1keW5hbWljbGliPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1keW5hbWljbGliLTEyNTUiPjwvYT5XaGVuIHBhc3NlZCB0aGlzIG9wdGlvbiwgR0NDIHByb2R1Y2VzIGEgZHluYW1pYyBsaWJyYXJ5IGluc3RlYWQgb2YKK2FuIGV4ZWN1dGFibGUgd2hlbiBsaW5raW5nLCB1c2luZyB0aGUgRGFyd2luIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJ0b29sPC9zcGFuPjwvc2FtcD4gY29tbWFuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mb3JjZV9jcHVzdWJ0eXBlX0FMTDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm9yY2VfMDA1ZmNwdXN1YnR5cGVfMDA1ZkFMTC0xMjU2Ij48L2E+VGhpcyBjYXVzZXMgR0NDJ3Mgb3V0cHV0IGZpbGUgdG8gaGF2ZSB0aGUgPHZhcj5BTEw8L3Zhcj4gc3VidHlwZSwgaW5zdGVhZCBvZgorb25lIGNvbnRyb2xsZWQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWFsbG93YWJsZV9jbGllbnQgIDwvY29kZT48dmFyPmNsaWVudF9uYW1lPC92YXI+PGR0Pjxjb2RlPi1jbGllbnRfbmFtZTwvY29kZT48ZHQ+PGNvZGU+LWNvbXBhdGliaWxpdHlfdmVyc2lvbjwvY29kZT48ZHQ+PGNvZGU+LWN1cnJlbnRfdmVyc2lvbjwvY29kZT48ZHQ+PGNvZGU+LWRlYWRfc3RyaXA8L2NvZGU+PGR0Pjxjb2RlPi1kZXBlbmRlbmN5LWZpbGU8L2NvZGU+PGR0Pjxjb2RlPi1keWxpYl9maWxlPC9jb2RlPjxkdD48Y29kZT4tZHlsaW5rZXJfaW5zdGFsbF9uYW1lPC9jb2RlPjxkdD48Y29kZT4tZHluYW1pYzwvY29kZT48ZHQ+PGNvZGU+LWV4cG9ydGVkX3N5bWJvbHNfbGlzdDwvY29kZT48ZHQ+PGNvZGU+LWZpbGVsaXN0PC9jb2RlPjxkdD48Y29kZT4tZmxhdF9uYW1lc3BhY2U8L2NvZGU+PGR0Pjxjb2RlPi1mb3JjZV9mbGF0X25hbWVzcGFjZTwvY29kZT48ZHQ+PGNvZGU+LWhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lczwvY29kZT48ZHQ+PGNvZGU+LWltYWdlX2Jhc2U8L2NvZGU+PGR0Pjxjb2RlPi1pbml0PC9jb2RlPjxkdD48Y29kZT4taW5zdGFsbF9uYW1lPC9jb2RlPjxkdD48Y29kZT4ta2VlcF9wcml2YXRlX2V4dGVybnM8L2NvZGU+PGR0Pjxjb2RlPi1tdWx0aV9tb2R1bGU8L2NvZGU+PGR0Pjxjb2RlPi1tdWx0aXBseV9kZWZpbmVkPC9jb2RlPjxkdD48Y29kZT4tbXVsdGlwbHlfZGVmaW5lZF91bnVzZWQ8L2NvZGU+PGR0Pjxjb2RlPi1ub2FsbF9sb2FkPC9jb2RlPjxkdD48Y29kZT4tbm9fZGVhZF9zdHJpcF9pbml0c19hbmRfdGVybXM8L2NvZGU+PGR0Pjxjb2RlPi1ub2ZpeHByZWJpbmRpbmc8L2NvZGU+PGR0Pjxjb2RlPi1ub211bHRpZGVmczwvY29kZT48ZHQ+PGNvZGU+LW5vcHJlYmluZDwvY29kZT48ZHQ+PGNvZGU+LW5vc2VnbGlua2VkaXQ8L2NvZGU+PGR0Pjxjb2RlPi1wYWdlemVyb19zaXplPC9jb2RlPjxkdD48Y29kZT4tcHJlYmluZDwvY29kZT48ZHQ+PGNvZGU+LXByZWJpbmRfYWxsX3R3b2xldmVsX21vZHVsZXM8L2NvZGU+PGR0Pjxjb2RlPi1wcml2YXRlX2J1bmRsZTwvY29kZT48ZHQ+PGNvZGU+LXJlYWRfb25seV9yZWxvY3M8L2NvZGU+PGR0Pjxjb2RlPi1zZWN0YWxpZ248L2NvZGU+PGR0Pjxjb2RlPi1zZWN0b2JqZWN0c3ltYm9sczwvY29kZT48ZHQ+PGNvZGU+LXdoeWxvYWQ8L2NvZGU+PGR0Pjxjb2RlPi1zZWcxYWRkcjwvY29kZT48ZHQ+PGNvZGU+LXNlY3RjcmVhdGU8L2NvZGU+PGR0Pjxjb2RlPi1zZWN0b2JqZWN0c3ltYm9sczwvY29kZT48ZHQ+PGNvZGU+LXNlY3RvcmRlcjwvY29kZT48ZHQ+PGNvZGU+LXNlZ2FkZHI8L2NvZGU+PGR0Pjxjb2RlPi1zZWdzX3JlYWRfb25seV9hZGRyPC9jb2RlPjxkdD48Y29kZT4tc2Vnc19yZWFkX3dyaXRlX2FkZHI8L2NvZGU+PGR0Pjxjb2RlPi1zZWdfYWRkcl90YWJsZTwvY29kZT48ZHQ+PGNvZGU+LXNlZ19hZGRyX3RhYmxlX2ZpbGVuYW1lPC9jb2RlPjxkdD48Y29kZT4tc2VnbGlua2VkaXQ8L2NvZGU+PGR0Pjxjb2RlPi1zZWdwcm90PC9jb2RlPjxkdD48Y29kZT4tc2Vnc19yZWFkX29ubHlfYWRkcjwvY29kZT48ZHQ+PGNvZGU+LXNlZ3NfcmVhZF93cml0ZV9hZGRyPC9jb2RlPjxkdD48Y29kZT4tc2luZ2xlX21vZHVsZTwvY29kZT48ZHQ+PGNvZGU+LXN0YXRpYzwvY29kZT48ZHQ+PGNvZGU+LXN1Yl9saWJyYXJ5PC9jb2RlPjxkdD48Y29kZT4tc3ViX3VtYnJlbGxhPC9jb2RlPjxkdD48Y29kZT4tdHdvbGV2ZWxfbmFtZXNwYWNlPC9jb2RlPjxkdD48Y29kZT4tdW1icmVsbGE8L2NvZGU+PGR0Pjxjb2RlPi11bmRlZmluZWQ8L2NvZGU+PGR0Pjxjb2RlPi11bmV4cG9ydGVkX3N5bWJvbHNfbGlzdDwvY29kZT48ZHQ+PGNvZGU+LXdlYWtfcmVmZXJlbmNlX21pc21hdGNoZXM8L2NvZGU+PGR0Pjxjb2RlPi13aGF0c2xvYWRlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYWxsb3dhYmxlXzAwNWZjbGllbnQtMTI1NyI+PC9hPjxhIG5hbWU9ImluZGV4LWNsaWVudF8wMDVmbmFtZS0xMjU4Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29tcGF0aWJpbGl0eV8wMDVmdmVyc2lvbi0xMjU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtY3VycmVudF8wMDVmdmVyc2lvbi0xMjYwIj48L2E+PGEgbmFtZT0iaW5kZXgtZGVhZF8wMDVmc3RyaXAtMTI2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWRlcGVuZGVuY3lfMDAyZGZpbGUtMTI2MiI+PC9hPjxhIG5hbWU9ImluZGV4LWR5bGliXzAwNWZmaWxlLTEyNjMiPjwvYT48YSBuYW1lPSJpbmRleC1keWxpbmtlcl8wMDVmaW5zdGFsbF8wMDVmbmFtZS0xMjY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZHluYW1pYy0xMjY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXhwb3J0ZWRfMDA1ZnN5bWJvbHNfMDA1Zmxpc3QtMTI2NiI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGVsaXN0LTEyNjciPjwvYT48YSBuYW1lPSJpbmRleC1mbGF0XzAwNWZuYW1lc3BhY2UtMTI2OCI+PC9hPjxhIG5hbWU9ImluZGV4LWZvcmNlXzAwNWZmbGF0XzAwNWZuYW1lc3BhY2UtMTI2OSI+PC9hPjxhIG5hbWU9ImluZGV4LWhlYWRlcnBhZF8wMDVmbWF4XzAwNWZpbnN0YWxsXzAwNWZuYW1lcy0xMjcwIj48L2E+PGEgbmFtZT0iaW5kZXgtaW1hZ2VfMDA1ZmJhc2UtMTI3MSI+PC9hPjxhIG5hbWU9ImluZGV4LWluaXQtMTI3MiI+PC9hPjxhIG5hbWU9ImluZGV4LWluc3RhbGxfMDA1Zm5hbWUtMTI3MyI+PC9hPjxhIG5hbWU9ImluZGV4LWtlZXBfMDA1ZnByaXZhdGVfMDA1ZmV4dGVybnMtMTI3NCI+PC9hPjxhIG5hbWU9ImluZGV4LW11bHRpXzAwNWZtb2R1bGUtMTI3NSI+PC9hPjxhIG5hbWU9ImluZGV4LW11bHRpcGx5XzAwNWZkZWZpbmVkLTEyNzYiPjwvYT48YSBuYW1lPSJpbmRleC1tdWx0aXBseV8wMDVmZGVmaW5lZF8wMDVmdW51c2VkLTEyNzciPjwvYT48YSBuYW1lPSJpbmRleC1ub2FsbF8wMDVmbG9hZC0xMjc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbm9fMDA1ZmRlYWRfMDA1ZnN0cmlwXzAwNWZpbml0c18wMDVmYW5kXzAwNWZ0ZXJtcy0xMjc5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbm9maXhwcmViaW5kaW5nLTEyODAiPjwvYT48YSBuYW1lPSJpbmRleC1ub211bHRpZGVmcy0xMjgxIj48L2E+PGEgbmFtZT0iaW5kZXgtbm9wcmViaW5kLTEyODIiPjwvYT48YSBuYW1lPSJpbmRleC1ub3NlZ2xpbmtlZGl0LTEyODMiPjwvYT48YSBuYW1lPSJpbmRleC1wYWdlemVyb18wMDVmc2l6ZS0xMjg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlYmluZC0xMjg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlYmluZF8wMDVmYWxsXzAwNWZ0d29sZXZlbF8wMDVmbW9kdWxlcy0xMjg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJpdmF0ZV8wMDVmYnVuZGxlLTEyODciPjwvYT48YSBuYW1lPSJpbmRleC1yZWFkXzAwNWZvbmx5XzAwNWZyZWxvY3MtMTI4OCI+PC9hPjxhIG5hbWU9ImluZGV4LXNlY3RhbGlnbi0xMjg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdG9iamVjdHN5bWJvbHMtMTI5MCI+PC9hPjxhIG5hbWU9ImluZGV4LXdoeWxvYWQtMTI5MSI+PC9hPjxhIG5hbWU9ImluZGV4LXNlZzFhZGRyLTEyOTIiPjwvYT48YSBuYW1lPSJpbmRleC1zZWN0Y3JlYXRlLTEyOTMiPjwvYT48YSBuYW1lPSJpbmRleC1zZWN0b2JqZWN0c3ltYm9scy0xMjk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdG9yZGVyLTEyOTUiPjwvYT48YSBuYW1lPSJpbmRleC1zZWdhZGRyLTEyOTYiPjwvYT48YSBuYW1lPSJpbmRleC1zZWdzXzAwNWZyZWFkXzAwNWZvbmx5XzAwNWZhZGRyLTEyOTciPjwvYT48YSBuYW1lPSJpbmRleC1zZWdzXzAwNWZyZWFkXzAwNWZ3cml0ZV8wMDVmYWRkci0xMjk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VnXzAwNWZhZGRyXzAwNWZ0YWJsZS0xMjk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VnXzAwNWZhZGRyXzAwNWZ0YWJsZV8wMDVmZmlsZW5hbWUtMTMwMCI+PC9hPjxhIG5hbWU9ImluZGV4LXNlZ2xpbmtlZGl0LTEzMDEiPjwvYT48YSBuYW1lPSJpbmRleC1zZWdwcm90LTEzMDIiPjwvYT48YSBuYW1lPSJpbmRleC1zZWdzXzAwNWZyZWFkXzAwNWZvbmx5XzAwNWZhZGRyLTEzMDMiPjwvYT48YSBuYW1lPSJpbmRleC1zZWdzXzAwNWZyZWFkXzAwNWZ3cml0ZV8wMDVmYWRkci0xMzA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2luZ2xlXzAwNWZtb2R1bGUtMTMwNSI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRpYy0xMzA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3ViXzAwNWZsaWJyYXJ5LTEzMDciPjwvYT48YSBuYW1lPSJpbmRleC1zdWJfMDA1ZnVtYnJlbGxhLTEzMDgiPjwvYT48YSBuYW1lPSJpbmRleC10d29sZXZlbF8wMDVmbmFtZXNwYWNlLTEzMDkiPjwvYT48YSBuYW1lPSJpbmRleC11bWJyZWxsYS0xMzEwIj48L2E+PGEgbmFtZT0iaW5kZXgtdW5kZWZpbmVkLTEzMTEiPjwvYT48YSBuYW1lPSJpbmRleC11bmV4cG9ydGVkXzAwNWZzeW1ib2xzXzAwNWZsaXN0LTEzMTIiPjwvYT48YSBuYW1lPSJpbmRleC13ZWFrXzAwNWZyZWZlcmVuY2VfMDA1Zm1pc21hdGNoZXMtMTMxMyI+PC9hPjxhIG5hbWU9ImluZGV4LXdoYXRzbG9hZGVkLTEzMTQiPjwvYT5UaGVzZSBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIERhcndpbiBsaW5rZXIuICBUaGUgRGFyd2luIGxpbmtlciBtYW4gcGFnZQorZGVzY3JpYmVzIHRoZW0gaW4gZGV0YWlsLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Rhcndpbi1QcmFnbWFzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Rhcndpbi1QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkZTNhMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGFyd2luLVByYWdtYXMuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EYXJ3aW4gUHJhZ21hcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyIgdGl0bGU9IlByYWdtYXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1QcmFnbWFzLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtUHJhZ21hcyIgdGl0bGU9IlJTLzYwMDAgYW5kIFBvd2VyUEMgUHJhZ21hcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNvbGFyaXMtUHJhZ21hcy5odG1sI1NvbGFyaXMtUHJhZ21hcyIgdGl0bGU9IlNvbGFyaXMgUHJhZ21hcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEYXJ3aW4tUHJhZ21hcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTb2xhcmlzLVByYWdtYXMuaHRtbCNTb2xhcmlzLVByYWdtYXMiPlNvbGFyaXMgUHJhZ21hczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLVByYWdtYXMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1QcmFnbWFzIj5SUy82MDAwIGFuZCBQb3dlclBDIFByYWdtYXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTguNSBEYXJ3aW4gUHJhZ21hczwvaDQ+CisKKzxwPlRoZSBmb2xsb3dpbmcgcHJhZ21hcyBhcmUgYXZhaWxhYmxlIGZvciBhbGwgYXJjaGl0ZWN0dXJlcyBydW5uaW5nIHRoZQorRGFyd2luIG9wZXJhdGluZyBzeXN0ZW0uICBUaGVzZSBhcmUgdXNlZnVsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIKK01hYyBPUyBjb21waWxlcnMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPm1hcmsgPC9jb2RlPjx2YXI+dG9rZW5zPC92YXI+PGNvZGU+Li4uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWFfMDAyYy1tYXJrLTM0NjUiPjwvYT5UaGlzIHByYWdtYSBpcyBhY2NlcHRlZCwgYnV0IGhhcyBubyBlZmZlY3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT5vcHRpb25zIGFsaWduPTwvY29kZT48dmFyPmFsaWdubWVudDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWFfMDAyYy1vcHRpb25zLWFsaWduLTM0NjYiPjwvYT5UaGlzIHByYWdtYSBzZXRzIHRoZSBhbGlnbm1lbnQgb2YgZmllbGRzIGluIHN0cnVjdHVyZXMuICBUaGUgdmFsdWVzIG9mCis8dmFyPmFsaWdubWVudDwvdmFyPiBtYXkgYmUgPGNvZGU+bWFjNjhrPC9jb2RlPiwgdG8gZW11bGF0ZSBtNjhrIGFsaWdubWVudCwgb3IKKzxjb2RlPnBvd2VyPC9jb2RlPiwgdG8gZW11bGF0ZSBQb3dlclBDIGFsaWdubWVudC4gIFVzZXMgb2YgdGhpcyBwcmFnbWEgbmVzdAorcHJvcGVybHk7IHRvIHJlc3RvcmUgdGhlIHByZXZpb3VzIHNldHRpbmcsIHVzZSA8Y29kZT5yZXNldDwvY29kZT4gZm9yIHRoZQorPHZhcj5hbGlnbm1lbnQ8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5zZWdtZW50IDwvY29kZT48dmFyPnRva2VuczwvdmFyPjxjb2RlPi4uLjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hXzAwMmMtc2VnbWVudC0zNDY3Ij48L2E+VGhpcyBwcmFnbWEgaXMgYWNjZXB0ZWQsIGJ1dCBoYXMgbm8gZWZmZWN0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+dW51c2VkICg8L2NvZGU+PHZhcj52YXI8L3Zhcj48Y29kZT4gWywgPC9jb2RlPjx2YXI+dmFyPC92YXI+PGNvZGU+XS4uLik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLXVudXNlZC0zNDY4Ij48L2E+VGhpcyBwcmFnbWEgZGVjbGFyZXMgdmFyaWFibGVzIHRvIGJlIHBvc3NpYmx5IHVudXNlZC4gIEdDQyBkb2VzIG5vdAorcHJvZHVjZSB3YXJuaW5ncyBmb3IgdGhlIGxpc3RlZCB2YXJpYWJsZXMuICBUaGUgZWZmZWN0IGlzIHNpbWlsYXIgdG8KK3RoYXQgb2YgdGhlIDxjb2RlPnVudXNlZDwvY29kZT4gYXR0cmlidXRlLCBleGNlcHQgdGhhdCB0aGlzIHByYWdtYSBtYXkgYXBwZWFyCithbnl3aGVyZSB3aXRoaW4gdGhlIHZhcmlhYmxlcycgc2NvcGVzLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RlYnVnZ2luZy1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RlYnVnZ2luZy1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwZGE3OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGVidWdnaW5nLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDExODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRlYnVnZ2luZyBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyIgdGl0bGU9Ikludm9raW5nIEdDQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyIgdGl0bGU9Ildhcm5pbmcgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIiB0aXRsZT0iT3B0aW1pemUgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZWJ1Z2dpbmctT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjkgT3B0aW9ucyBmb3IgRGVidWdnaW5nIFlvdXIgUHJvZ3JhbSBvciBHQ0M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtZGVidWdnaW5nLTUzOCI+PC9hPjxhIG5hbWU9ImluZGV4LWRlYnVnZ2luZy1pbmZvcm1hdGlvbi1vcHRpb25zLTUzOSI+PC9hPgorR0NDIGhhcyB2YXJpb3VzIHNwZWNpYWwgb3B0aW9ucyB0aGF0IGFyZSB1c2VkIGZvciBkZWJ1Z2dpbmcKK2VpdGhlciB5b3VyIHByb2dyYW0gb3IgR0NDOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZy01NDAiPjwvYT5Qcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIG5hdGl2ZSBmb3JtYXQKKyhzdGFicywgQ09GRiwgWENPRkYsIG9yIERXQVJGIDIpLiAgR0RCIGNhbiB3b3JrIHdpdGggdGhpcyBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uLgorCisgICAgIDxwPk9uIG1vc3Qgc3lzdGVtcyB0aGF0IHVzZSBzdGFicyBmb3JtYXQsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nPC9zcGFuPjwvc2FtcD4gZW5hYmxlcyB1c2Ugb2YgZXh0cmEKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiB0aGF0IG9ubHkgR0RCIGNhbiB1c2U7IHRoaXMgZXh0cmEgaW5mb3JtYXRpb24KK21ha2VzIGRlYnVnZ2luZyB3b3JrIGJldHRlciBpbiBHREIgYnV0IHByb2JhYmx5IG1ha2VzIG90aGVyIGRlYnVnZ2VycworY3Jhc2ggb3IKK3JlZnVzZSB0byByZWFkIHRoZSBwcm9ncmFtLiAgSWYgeW91IHdhbnQgdG8gY29udHJvbCBmb3IgY2VydGFpbiB3aGV0aGVyCit0byBnZW5lcmF0ZSB0aGUgZXh0cmEgaW5mb3JtYXRpb24sIHVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZ3N0YWJzKzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZ3N0YWJzPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZ3hjb2ZmKzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZ3hjb2ZmPC9zcGFuPjwvc2FtcD4sIG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ndm1zPC9zcGFuPjwvc2FtcD4gKHNlZSBiZWxvdykuCisKKyAgICAgPHA+R0NDIGFsbG93cyB5b3UgdG8gdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nPC9zcGFuPjwvc2FtcD4gd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPi4gIFRoZSBzaG9ydGN1dHMgdGFrZW4gYnkgb3B0aW1pemVkIGNvZGUgbWF5IG9jY2FzaW9uYWxseQorcHJvZHVjZSBzdXJwcmlzaW5nIHJlc3VsdHM6IHNvbWUgdmFyaWFibGVzIHlvdSBkZWNsYXJlZCBtYXkgbm90IGV4aXN0CithdCBhbGw7IGZsb3cgb2YgY29udHJvbCBtYXkgYnJpZWZseSBtb3ZlIHdoZXJlIHlvdSBkaWQgbm90IGV4cGVjdCBpdDsKK3NvbWUgc3RhdGVtZW50cyBtYXkgbm90IGJlIGV4ZWN1dGVkIGJlY2F1c2UgdGhleSBjb21wdXRlIGNvbnN0YW50CityZXN1bHRzIG9yIHRoZWlyIHZhbHVlcyBhcmUgYWxyZWFkeSBhdCBoYW5kOyBzb21lIHN0YXRlbWVudHMgbWF5CitleGVjdXRlIGluIGRpZmZlcmVudCBwbGFjZXMgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbiBtb3ZlZCBvdXQgb2YgbG9vcHMuCisKKyAgICAgPHA+TmV2ZXJ0aGVsZXNzIGl0IHByb3ZlcyBwb3NzaWJsZSB0byBkZWJ1ZyBvcHRpbWl6ZWQgb3V0cHV0LiAgVGhpcyBtYWtlcworaXQgcmVhc29uYWJsZSB0byB1c2UgdGhlIG9wdGltaXplciBmb3IgcHJvZ3JhbXMgdGhhdCBtaWdodCBoYXZlIGJ1Z3MuCisKKyAgICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSB1c2VmdWwgd2hlbiBHQ0MgaXMgZ2VuZXJhdGVkIHdpdGggdGhlCitjYXBhYmlsaXR5IGZvciBtb3JlIHRoYW4gb25lIGRlYnVnZ2luZyBmb3JtYXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZ3NwbGl0LWR3YXJmPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nc3BsaXRfMDAyZGR3YXJmLTU0MSI+PC9hPlNlcGFyYXRlIGFzIG11Y2ggZHdhcmYgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlIGludG8gYQorc2VwYXJhdGUgb3V0cHV0IGZpbGUgd2l0aCB0aGUgZXh0ZW5zaW9uIC5kd28uICBUaGlzIG9wdGlvbiBhbGxvd3MKK3RoZSBidWlsZCBzeXN0ZW0gdG8gYXZvaWQgbGlua2luZyBmaWxlcyB3aXRoIGRlYnVnIGluZm9ybWF0aW9uLiAgVG8KK2JlIHVzZWZ1bCwgdGhpcyBvcHRpb24gcmVxdWlyZXMgYSBkZWJ1Z2dlciBjYXBhYmxlIG9mIHJlYWRpbmcgLmR3bworZmlsZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZ2dkYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ2dkYi01NDIiPjwvYT5Qcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgdXNlIGJ5IEdEQi4gIFRoaXMgbWVhbnMgdG8gdXNlIHRoZQorbW9zdCBleHByZXNzaXZlIGZvcm1hdCBhdmFpbGFibGUgKERXQVJGIDIsIHN0YWJzLCBvciB0aGUgbmF0aXZlIGZvcm1hdAoraWYgbmVpdGhlciBvZiB0aG9zZSBhcmUgc3VwcG9ydGVkKSwgaW5jbHVkaW5nIEdEQiBleHRlbnNpb25zIGlmIGF0IGFsbAorcG9zc2libGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZ3B1Ym5hbWVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ncHVibmFtZXMtNTQzIj48L2E+R2VuZXJhdGUgZHdhcmYgLmRlYnVnX3B1Ym5hbWVzIGFuZCAuZGVidWdfcHVidHlwZXMgc2VjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZ3N0YWJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nc3RhYnMtNTQ0Ij48L2E+UHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gc3RhYnMgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCksCit3aXRob3V0IEdEQiBleHRlbnNpb25zLiAgVGhpcyBpcyB0aGUgZm9ybWF0IHVzZWQgYnkgREJYIG9uIG1vc3QgQlNECitzeXN0ZW1zLiAgT24gTUlQUywgQWxwaGEgYW5kIFN5c3RlbSBWIFJlbGVhc2UgNCBzeXN0ZW1zIHRoaXMgb3B0aW9uCitwcm9kdWNlcyBzdGFicyBkZWJ1Z2dpbmcgb3V0cHV0IHRoYXQgaXMgbm90IHVuZGVyc3Rvb2QgYnkgREJYIG9yIFNEQi4gCitPbiBTeXN0ZW0gViBSZWxlYXNlIDQgc3lzdGVtcyB0aGlzIG9wdGlvbiByZXF1aXJlcyB0aGUgR05VIGFzc2VtYmxlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy1zeW1ib2xzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZWxpbWluYXRlXzAwMmR1bnVzZWRfMDAyZGRlYnVnXzAwMmRzeW1ib2xzLTU0NSI+PC9hPlByb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHN0YWJzIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLAorZm9yIG9ubHkgc3ltYm9scyB0aGF0IGFyZSBhY3R1YWxseSB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZlbWl0LWNsYXNzLWRlYnVnLWFsd2F5czwvY29kZT48ZGQ+SW5zdGVhZCBvZiBlbWl0dGluZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGEgQysrIGNsYXNzIGluIG9ubHkgb25lCitvYmplY3QgZmlsZSwgZW1pdCBpdCBpbiBhbGwgb2JqZWN0IGZpbGVzIHVzaW5nIHRoZSBjbGFzcy4gIFRoaXMgb3B0aW9uCitzaG91bGQgYmUgdXNlZCBvbmx5IHdpdGggZGVidWdnZXJzIHRoYXQgYXJlIHVuYWJsZSB0byBoYW5kbGUgdGhlIHdheSBHQ0MKK25vcm1hbGx5IGVtaXRzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgY2xhc3NlcyBiZWNhdXNlIHVzaW5nIHRoaXMKK29wdGlvbiBpbmNyZWFzZXMgdGhlIHNpemUgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uIGJ5IGFzIG11Y2ggYXMgYQorZmFjdG9yIG9mIHR3by4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZGVidWctdHlwZXMtc2VjdGlvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmRlYnVnXzAwMmR0eXBlc18wMDJkc2VjdGlvbi01NDYiPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGRlYnVnXzAwMmR0eXBlc18wMDJkc2VjdGlvbi01NDciPjwvYT5XaGVuIHVzaW5nIERXQVJGIFZlcnNpb24gNCBvciBoaWdoZXIsIHR5cGUgRElFcyBjYW4gYmUgcHV0IGludG8KK3RoZWlyIG93biA8Y29kZT4uZGVidWdfdHlwZXM8L2NvZGU+IHNlY3Rpb24gaW5zdGVhZCBvZiBtYWtpbmcgdGhlbSBwYXJ0IG9mIHRoZQorPGNvZGU+LmRlYnVnX2luZm88L2NvZGU+IHNlY3Rpb24uICBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBwdXQgdGhlbSBpbiBhIHNlcGFyYXRlCitjb21kYXQgc2VjdGlvbnMgc2luY2UgdGhlIGxpbmtlciBjYW4gdGhlbiByZW1vdmUgZHVwbGljYXRlcy4gCitCdXQgbm90IGFsbCBEV0FSRiBjb25zdW1lcnMgc3VwcG9ydCA8Y29kZT4uZGVidWdfdHlwZXM8L2NvZGU+IHNlY3Rpb25zIHlldAorYW5kIG9uIHNvbWUgb2JqZWN0cyA8Y29kZT4uZGVidWdfdHlwZXM8L2NvZGU+IHByb2R1Y2VzIGxhcmdlciBpbnN0ZWFkIG9mIHNtYWxsZXIKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1nc3RhYnMrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nc3RhYnNfMDAyYi01NDgiPjwvYT5Qcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBzdGFicyBmb3JtYXQgKGlmIHRoYXQgaXMgc3VwcG9ydGVkKSwKK3VzaW5nIEdOVSBleHRlbnNpb25zIHVuZGVyc3Rvb2Qgb25seSBieSB0aGUgR05VIGRlYnVnZ2VyIChHREIpLiAgVGhlCit1c2Ugb2YgdGhlc2UgZXh0ZW5zaW9ucyBpcyBsaWtlbHkgdG8gbWFrZSBvdGhlciBkZWJ1Z2dlcnMgY3Jhc2ggb3IKK3JlZnVzZSB0byByZWFkIHRoZSBwcm9ncmFtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWdjb2ZmPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nY29mZi01NDkiPjwvYT5Qcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBDT0ZGIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLiAKK1RoaXMgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IFNEQiBvbiBtb3N0IFN5c3RlbSBWIHN5c3RlbXMgcHJpb3IgdG8KK1N5c3RlbSBWIFJlbGVhc2UgNC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1neGNvZmY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWd4Y29mZi01NTAiPjwvYT5Qcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBYQ09GRiBmb3JtYXQgKGlmIHRoYXQgaXMgc3VwcG9ydGVkKS4gCitUaGlzIGlzIHRoZSBmb3JtYXQgdXNlZCBieSB0aGUgREJYIGRlYnVnZ2VyIG9uIElCTSBSUy82MDAwIHN5c3RlbXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZ3hjb2ZmKzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ3hjb2ZmXzAwMmItNTUxIj48L2E+UHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gWENPRkYgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCksCit1c2luZyBHTlUgZXh0ZW5zaW9ucyB1bmRlcnN0b29kIG9ubHkgYnkgdGhlIEdOVSBkZWJ1Z2dlciAoR0RCKS4gIFRoZQordXNlIG9mIHRoZXNlIGV4dGVuc2lvbnMgaXMgbGlrZWx5IHRvIG1ha2Ugb3RoZXIgZGVidWdnZXJzIGNyYXNoIG9yCityZWZ1c2UgdG8gcmVhZCB0aGUgcHJvZ3JhbSwgYW5kIG1heSBjYXVzZSBhc3NlbWJsZXJzIG90aGVyIHRoYW4gdGhlIEdOVQorYXNzZW1ibGVyIChHQVMpIHRvIGZhaWwgd2l0aCBhbiBlcnJvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1nZHdhcmYtPC9jb2RlPjx2YXI+dmVyc2lvbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nZHdhcmZfMDAyZF8wMDQwdmFyXzAwN2J2ZXJzaW9uXzAwN2QtNTUyIj48L2E+UHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gRFdBUkYgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCkuIAorVGhlIHZhbHVlIG9mIDx2YXI+dmVyc2lvbjwvdmFyPiBtYXkgYmUgZWl0aGVyIDIsIDMgb3IgNDsgdGhlIGRlZmF1bHQgdmVyc2lvbgorZm9yIG1vc3QgdGFyZ2V0cyBpcyA0LgorCisgICAgIDxwPk5vdGUgdGhhdCB3aXRoIERXQVJGIFZlcnNpb24gMiwgc29tZSBwb3J0cyByZXF1aXJlIGFuZCBhbHdheXMKK3VzZSBzb21lIG5vbi1jb25mbGljdGluZyBEV0FSRiAzIGV4dGVuc2lvbnMgaW4gdGhlIHVud2luZCB0YWJsZXMuCisKKyAgICAgPHA+VmVyc2lvbiA0IG1heSByZXF1aXJlIEdEQiA3LjAgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdmFyLXRyYWNraW5nLWFzc2lnbm1lbnRzPC9zcGFuPjwvc2FtcD4KK2ZvciBtYXhpbXVtIGJlbmVmaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZ3JlY29yZC1nY2Mtc3dpdGNoZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdyZWNvcmRfMDAyZGdjY18wMDJkc3dpdGNoZXMtNTUzIj48L2E+VGhpcyBzd2l0Y2ggY2F1c2VzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB1c2VkIHRvIGludm9rZSB0aGUKK2NvbXBpbGVyIHRoYXQgbWF5IGFmZmVjdCBjb2RlIGdlbmVyYXRpb24gdG8gYmUgYXBwZW5kZWQgdG8gdGhlCitEV19BVF9wcm9kdWNlciBhdHRyaWJ1dGUgaW4gRFdBUkYgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgVGhlIG9wdGlvbnMKK2FyZSBjb25jYXRlbmF0ZWQgd2l0aCBzcGFjZXMgc2VwYXJhdGluZyB0aGVtIGZyb20gZWFjaCBvdGhlciBhbmQgZnJvbQordGhlIGNvbXBpbGVyIHZlcnNpb24uICBTZWUgYWxzbyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnJlY29yZC1nY2Mtc3dpdGNoZXM8L3NwYW4+PC9zYW1wPiBmb3IgYW5vdGhlcgord2F5IG9mIHN0b3JpbmcgY29tcGlsZXIgb3B0aW9ucyBpbnRvIHRoZSBvYmplY3QgZmlsZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZ25vLXJlY29yZC1nY2Mtc3dpdGNoZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdub18wMDJkcmVjb3JkXzAwMmRnY2NfMDAyZHN3aXRjaGVzLTU1NCI+PC9hPkRpc2FsbG93IGFwcGVuZGluZyBjb21tYW5kLWxpbmUgb3B0aW9ucyB0byB0aGUgRFdfQVRfcHJvZHVjZXIgYXR0cmlidXRlCitpbiBEV0FSRiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZ3N0cmljdC1kd2FyZjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ3N0cmljdF8wMDJkZHdhcmYtNTU1Ij48L2E+RGlzYWxsb3cgdXNpbmcgZXh0ZW5zaW9ucyBvZiBsYXRlciBEV0FSRiBzdGFuZGFyZCB2ZXJzaW9uIHRoYW4gc2VsZWN0ZWQKK3dpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWdkd2FyZi08L3NwYW4+PHZhcj52ZXJzaW9uPC92YXI+PC9zYW1wPi4gIE9uIG1vc3QgdGFyZ2V0cyB1c2luZyBub24tY29uZmxpY3RpbmcKK0RXQVJGIGV4dGVuc2lvbnMgZnJvbSBsYXRlciBzdGFuZGFyZCB2ZXJzaW9ucyBpcyBhbGxvd2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWduby1zdHJpY3QtZHdhcmY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdub18wMDJkc3RyaWN0XzAwMmRkd2FyZi01NTYiPjwvYT5BbGxvdyB1c2luZyBleHRlbnNpb25zIG9mIGxhdGVyIERXQVJGIHN0YW5kYXJkIHZlcnNpb24gdGhhbiBzZWxlY3RlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZ2R3YXJmLTwvc3Bhbj48dmFyPnZlcnNpb248L3Zhcj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWd2bXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWd2bXMtNTU3Ij48L2E+UHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gQWxwaGEvVk1TIGRlYnVnIGZvcm1hdCAoaWYgdGhhdCBpcworc3VwcG9ydGVkKS4gIFRoaXMgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IERFQlVHIG9uIEFscGhhL1ZNUyBzeXN0ZW1zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWc8L2NvZGU+PHZhcj5sZXZlbDwvdmFyPjxkdD48Y29kZT4tZ2dkYjwvY29kZT48dmFyPmxldmVsPC92YXI+PGR0Pjxjb2RlPi1nc3RhYnM8L2NvZGU+PHZhcj5sZXZlbDwvdmFyPjxkdD48Y29kZT4tZ2NvZmY8L2NvZGU+PHZhcj5sZXZlbDwvdmFyPjxkdD48Y29kZT4tZ3hjb2ZmPC9jb2RlPjx2YXI+bGV2ZWw8L3Zhcj48ZHQ+PGNvZGU+LWd2bXM8L2NvZGU+PHZhcj5sZXZlbDwvdmFyPjxkZD5SZXF1ZXN0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhbmQgYWxzbyB1c2UgPHZhcj5sZXZlbDwvdmFyPiB0byBzcGVjaWZ5IGhvdworbXVjaCBpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IGxldmVsIGlzIDIuCisKKyAgICAgPHA+TGV2ZWwgMCBwcm9kdWNlcyBubyBkZWJ1ZyBpbmZvcm1hdGlvbiBhdCBhbGwuICBUaHVzLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZzA8L3NwYW4+PC9zYW1wPiBuZWdhdGVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPkxldmVsIDEgcHJvZHVjZXMgbWluaW1hbCBpbmZvcm1hdGlvbiwgZW5vdWdoIGZvciBtYWtpbmcgYmFja3RyYWNlcyBpbgorcGFydHMgb2YgdGhlIHByb2dyYW0gdGhhdCB5b3UgZG9uJ3QgcGxhbiB0byBkZWJ1Zy4gIFRoaXMgaW5jbHVkZXMKK2Rlc2NyaXB0aW9ucyBvZiBmdW5jdGlvbnMgYW5kIGV4dGVybmFsIHZhcmlhYmxlcywgYnV0IG5vIGluZm9ybWF0aW9uCithYm91dCBsb2NhbCB2YXJpYWJsZXMgYW5kIG5vIGxpbmUgbnVtYmVycy4KKworICAgICA8cD5MZXZlbCAzIGluY2x1ZGVzIGV4dHJhIGluZm9ybWF0aW9uLCBzdWNoIGFzIGFsbCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMKK3ByZXNlbnQgaW4gdGhlIHByb2dyYW0uICBTb21lIGRlYnVnZ2VycyBzdXBwb3J0IG1hY3JvIGV4cGFuc2lvbiB3aGVuCit5b3UgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nMzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nZHdhcmYtMjwvc3Bhbj48L3NhbXA+IGRvZXMgbm90IGFjY2VwdCBhIGNvbmNhdGVuYXRlZCBkZWJ1ZyBsZXZlbCwgYmVjYXVzZQorR0NDIHVzZWQgdG8gc3VwcG9ydCBhbiBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWdkd2FyZjwvc3Bhbj48L3NhbXA+IHRoYXQgbWVhbnQgdG8gZ2VuZXJhdGUKK2RlYnVnIGluZm9ybWF0aW9uIGluIHZlcnNpb24gMSBvZiB0aGUgRFdBUkYgZm9ybWF0ICh3aGljaCBpcyB2ZXJ5CitkaWZmZXJlbnQgZnJvbSB2ZXJzaW9uIDIpLCBhbmQgaXQgd291bGQgaGF2ZSBiZWVuIHRvbyBjb25mdXNpbmcuICBUaGF0CitkZWJ1ZyBmb3JtYXQgaXMgbG9uZyBvYnNvbGV0ZSwgYnV0IHRoZSBvcHRpb24gY2Fubm90IGJlIGNoYW5nZWQgbm93LiAKK0luc3RlYWQgdXNlIGFuIGFkZGl0aW9uYWwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWc8L3NwYW4+PHZhcj5sZXZlbDwvdmFyPjwvc2FtcD4gb3B0aW9uIHRvIGNoYW5nZSB0aGUKK2RlYnVnIGxldmVsIGZvciBEV0FSRi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ndG9nZ2xlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ndG9nZ2xlLTU1OCI+PC9hPlR1cm4gb2ZmIGdlbmVyYXRpb24gb2YgZGVidWcgaW5mbywgaWYgbGVhdmluZyBvdXQgdGhpcyBvcHRpb24KK2dlbmVyYXRlcyBpdCwgb3IgdHVybiBpdCBvbiBhdCBsZXZlbCAyIG90aGVyd2lzZS4gIFRoZSBwb3NpdGlvbiBvZiB0aGlzCithcmd1bWVudCBpbiB0aGUgY29tbWFuZCBsaW5lIGRvZXMgbm90IG1hdHRlcjsgaXQgdGFrZXMgZWZmZWN0IGFmdGVyIGFsbAorb3RoZXIgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkLCBhbmQgaXQgZG9lcyBzbyBvbmx5IG9uY2UsIG5vIG1hdHRlciBob3cKK21hbnkgdGltZXMgaXQgaXMgZ2l2ZW4uICBUaGlzIGlzIG1haW5seSBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY29tcGFyZS1kZWJ1Zzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzYW5pdGl6ZT1hZGRyZXNzPC9jb2RlPjxkZD5FbmFibGUgQWRkcmVzc1Nhbml0aXplciwgYSBmYXN0IG1lbW9yeSBlcnJvciBkZXRlY3Rvci4gCitNZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucyB3aWxsIGJlIGluc3RydW1lbnRlZCB0byBkZXRlY3QKK291dC1vZi1ib3VuZHMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIAorU2VlIDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hZGRyZXNzLXNhbml0aXplci8iPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hZGRyZXNzLXNhbml0aXplci88L2E+IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNhbml0aXplPXRocmVhZDwvY29kZT48ZGQ+RW5hYmxlIFRocmVhZFNhbml0aXplciwgYSBmYXN0IGRhdGEgcmFjZSBkZXRlY3Rvci4gCitNZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucyB3aWxsIGJlIGluc3RydW1lbnRlZCB0byBkZXRlY3QKK2RhdGEgcmFjZSBidWdzLiAKK1NlZSA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZGF0YS1yYWNlLXRlc3Qvd2lraS9UaHJlYWRTYW5pdGl6ZXIiPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9kYXRhLXJhY2UtdGVzdC93aWtpL1RocmVhZFNhbml0aXplcjwvYT4gZm9yIG1vcmUgZGV0YWlscy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1maW5hbC1pbnNuczwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PGNvZGU+PTwvY29kZT48dmFyPmZpbGU8L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRmaW5hbF8wMDJkaW5zbnMtNTU5Ij48L2E+RHVtcCB0aGUgZmluYWwgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKFJUTCkgdG8gPHZhcj5maWxlPC92YXI+LiAgSWYgdGhlCitvcHRpb25hbCBhcmd1bWVudCBpcyBvbWl0dGVkIChvciBpZiA8dmFyPmZpbGU8L3Zhcj4gaXMgPGNvZGU+LjwvY29kZT4pLCB0aGUgbmFtZQorb2YgdGhlIGR1bXAgZmlsZSBpcyBkZXRlcm1pbmVkIGJ5IGFwcGVuZGluZyA8Y29kZT4uZ2tkPC9jb2RlPiB0byB0aGUKK2NvbXBpbGF0aW9uIG91dHB1dCBmaWxlIG5hbWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmNvbXBhcmUtZGVidWc8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPjxjb2RlPj08L2NvZGU+PHZhcj5vcHRzPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1mY29tcGFyZV8wMDJkZGVidWctNTYwIj48L2E+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRjb21wYXJlXzAwMmRkZWJ1Zy01NjEiPjwvYT5JZiBubyBlcnJvciBvY2N1cnMgZHVyaW5nIGNvbXBpbGF0aW9uLCBydW4gdGhlIGNvbXBpbGVyIGEgc2Vjb25kIHRpbWUsCithZGRpbmcgPHZhcj5vcHRzPC92YXI+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNvbXBhcmUtZGVidWctc2Vjb25kPC9zcGFuPjwvc2FtcD4gdG8gdGhlIGFyZ3VtZW50cworcGFzc2VkIHRvIHRoZSBzZWNvbmQgY29tcGlsYXRpb24uICBEdW1wIHRoZSBmaW5hbCBpbnRlcm5hbAorcmVwcmVzZW50YXRpb24gaW4gYm90aCBjb21waWxhdGlvbnMsIGFuZCBwcmludCBhbiBlcnJvciBpZiB0aGV5IGRpZmZlci4KKworICAgICA8cD5JZiB0aGUgZXF1YWwgc2lnbiBpcyBvbWl0dGVkLCB0aGUgZGVmYXVsdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZ3RvZ2dsZTwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuCisKKyAgICAgPHA+VGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdDQ19DT01QQVJFX0RFQlVHPC9zcGFuPjwvc2FtcD4sIGlmIGRlZmluZWQsIG5vbi1lbXB0eQorYW5kIG5vbnplcm8sIGltcGxpY2l0bHkgZW5hYmxlcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNvbXBhcmUtZGVidWc8L3NwYW4+PC9zYW1wPi4gIElmCis8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HQ0NfQ09NUEFSRV9ERUJVRzwvc3Bhbj48L3NhbXA+IGlzIGRlZmluZWQgdG8gYSBzdHJpbmcgc3RhcnRpbmcgd2l0aCBhIGRhc2gsCit0aGVuIGl0IGlzIHVzZWQgZm9yIDx2YXI+b3B0czwvdmFyPiwgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ndG9nZ2xlPC9zcGFuPjwvc2FtcD4KK2lzIHVzZWQuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZjb21wYXJlLWRlYnVnPTwvc3Bhbj48L3NhbXA+LCB3aXRoIHRoZSBlcXVhbCBzaWduIGJ1dCB3aXRob3V0IDx2YXI+b3B0czwvdmFyPiwKK2lzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1jb21wYXJlLWRlYnVnPC9zcGFuPjwvc2FtcD4sIHdoaWNoIGRpc2FibGVzIHRoZSBkdW1waW5nCitvZiB0aGUgZmluYWwgcmVwcmVzZW50YXRpb24gYW5kIHRoZSBzZWNvbmQgY29tcGlsYXRpb24sIHByZXZlbnRpbmcgZXZlbgorPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0NDX0NPTVBBUkVfREVCVUc8L3NwYW4+PC9zYW1wPiBmcm9tIHRha2luZyBlZmZlY3QuCisKKyAgICAgPHA+VG8gdmVyaWZ5IGZ1bGwgY292ZXJhZ2UgZHVyaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY29tcGFyZS1kZWJ1Zzwvc3Bhbj48L3NhbXA+IHRlc3RpbmcsIHNldAorPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0NDX0NPTVBBUkVfREVCVUc8L3NwYW4+PC9zYW1wPiB0byBzYXkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZmNvbXBhcmUtZGVidWctbm90LW92ZXJyaWRkZW48L3NwYW4+PC9zYW1wPiZyc3F1bzssCit3aGljaCBHQ0MgcmVqZWN0cyBhcyBhbiBpbnZhbGlkIG9wdGlvbiBpbiBhbnkgYWN0dWFsIGNvbXBpbGF0aW9uCisocmF0aGVyIHRoYW4gcHJlcHJvY2Vzc2luZywgYXNzZW1ibHkgb3IgbGlua2luZykuICBUbyBnZXQganVzdCBhCit3YXJuaW5nLCBzZXR0aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdDQ19DT01QQVJFX0RFQlVHPC9zcGFuPjwvc2FtcD4gdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tdyVuLWZjb21wYXJlLWRlYnVnCitub3Qgb3ZlcnJpZGRlbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsIGRvLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZjb21wYXJlLWRlYnVnLXNlY29uZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNvbXBhcmVfMDAyZGRlYnVnXzAwMmRzZWNvbmQtNTYyIj48L2E+VGhpcyBvcHRpb24gaXMgaW1wbGljaXRseSBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIGZvciB0aGUgc2Vjb25kCitjb21waWxhdGlvbiByZXF1ZXN0ZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZjb21wYXJlLWRlYnVnPC9zcGFuPjwvc2FtcD4sIGFsb25nIHdpdGggb3B0aW9ucyB0bworc2lsZW5jZSB3YXJuaW5ncywgYW5kIG9taXR0aW5nIG90aGVyIG9wdGlvbnMgdGhhdCB3b3VsZCBjYXVzZQorc2lkZS1lZmZlY3QgY29tcGlsZXIgb3V0cHV0cyB0byBmaWxlcyBvciB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgRHVtcAorZmlsZXMgYW5kIHByZXNlcnZlZCB0ZW1wb3JhcnkgZmlsZXMgYXJlIHJlbmFtZWQgc28gYXMgdG8gY29udGFpbiB0aGUKKzxjb2RlPi5nazwvY29kZT4gYWRkaXRpb25hbCBleHRlbnNpb24gZHVyaW5nIHRoZSBzZWNvbmQgY29tcGlsYXRpb24sIHRvIGF2b2lkCitvdmVyd3JpdGluZyB0aG9zZSBnZW5lcmF0ZWQgYnkgdGhlIGZpcnN0LgorCisgICAgIDxwPldoZW4gdGhpcyBvcHRpb24gaXMgcGFzc2VkIHRvIHRoZSBjb21waWxlciBkcml2ZXIsIGl0IGNhdXNlcyB0aGUKKzxlbT5maXJzdDwvZW0+IGNvbXBpbGF0aW9uIHRvIGJlIHNraXBwZWQsIHdoaWNoIG1ha2VzIGl0IHVzZWZ1bCBmb3IgbGl0dGxlCitvdGhlciB0aGFuIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgcHJvcGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZlbGltaW5hdGUtZHdhcmYyLWR1cHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZlbGltaW5hdGVfMDAyZGR3YXJmMl8wMDJkZHVwcy01NjMiPjwvYT5Db21wcmVzcyBEV0FSRiAyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBieSBlbGltaW5hdGluZyBkdXBsaWNhdGVkCitpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHN5bWJvbC4gIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbgorZ2VuZXJhdGluZyBEV0FSRiAyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nZHdhcmYtMjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZlbWl0LXN0cnVjdC1kZWJ1Zy1iYXNlb25seTwvY29kZT48ZGQ+RW1pdCBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3Igc3RydWN0LWxpa2UgdHlwZXMKK29ubHkgd2hlbiB0aGUgYmFzZSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiBzb3VyY2UgZmlsZQorbWF0Y2hlcyB0aGUgYmFzZSBuYW1lIG9mIGZpbGUgaW4gd2hpY2ggdGhlIHN0cnVjdCBpcyBkZWZpbmVkLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIHN1YnN0YW50aWFsbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sCitidXQgYXQgc2lnbmlmaWNhbnQgcG90ZW50aWFsIGxvc3MgaW4gdHlwZSBpbmZvcm1hdGlvbiB0byB0aGUgZGVidWdnZXIuIAorU2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZW1pdC1zdHJ1Y3QtZGVidWctcmVkdWNlZDwvc3Bhbj48L3NhbXA+IGZvciBhIGxlc3MgYWdncmVzc2l2ZSBvcHRpb24uIAorU2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZW1pdC1zdHJ1Y3QtZGVidWctZGV0YWlsZWQ8L3NwYW4+PC9zYW1wPiBmb3IgbW9yZSBkZXRhaWxlZCBjb250cm9sLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIHdvcmtzIG9ubHkgd2l0aCBEV0FSRiAyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZlbWl0LXN0cnVjdC1kZWJ1Zy1yZWR1Y2VkPC9jb2RlPjxkZD5FbWl0IGRlYnVnIGluZm9ybWF0aW9uIGZvciBzdHJ1Y3QtbGlrZSB0eXBlcworb25seSB3aGVuIHRoZSBiYXNlIG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHNvdXJjZSBmaWxlCittYXRjaGVzIHRoZSBiYXNlIG5hbWUgb2YgZmlsZSBpbiB3aGljaCB0aGUgdHlwZSBpcyBkZWZpbmVkLAordW5sZXNzIHRoZSBzdHJ1Y3QgaXMgYSB0ZW1wbGF0ZSBvciBkZWZpbmVkIGluIGEgc3lzdGVtIGhlYWRlci4KKworICAgICA8cD5UaGlzIG9wdGlvbiBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIHNpemUgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uLAord2l0aCBzb21lIHBvdGVudGlhbCBsb3NzIGluIHR5cGUgaW5mb3JtYXRpb24gdG8gdGhlIGRlYnVnZ2VyLiAKK1NlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmVtaXQtc3RydWN0LWRlYnVnLWJhc2Vvbmx5PC9zcGFuPjwvc2FtcD4gZm9yIGEgbW9yZSBhZ2dyZXNzaXZlIG9wdGlvbi4gCitTZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZlbWl0LXN0cnVjdC1kZWJ1Zy1kZXRhaWxlZDwvc3Bhbj48L3NhbXA+IGZvciBtb3JlIGRldGFpbGVkIGNvbnRyb2wuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gd29ya3Mgb25seSB3aXRoIERXQVJGIDIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmVtaXQtc3RydWN0LWRlYnVnLWRldGFpbGVkPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj48Y29kZT49PC9jb2RlPjx2YXI+c3BlYy1saXN0PC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPjxkZD5TcGVjaWZ5IHRoZSBzdHJ1Y3QtbGlrZSB0eXBlcworZm9yIHdoaWNoIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgZGVidWcgaW5mb3JtYXRpb24uIAorVGhlIGludGVudCBpcyB0byByZWR1Y2UgZHVwbGljYXRlIHN0cnVjdCBkZWJ1ZyBpbmZvcm1hdGlvbgorYmV0d2VlbiBkaWZmZXJlbnQgb2JqZWN0IGZpbGVzIHdpdGhpbiB0aGUgc2FtZSBwcm9ncmFtLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGEgZGV0YWlsZWQgdmVyc2lvbiBvZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZlbWl0LXN0cnVjdC1kZWJ1Zy1yZWR1Y2VkPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZW1pdC1zdHJ1Y3QtZGVidWctYmFzZW9ubHk8L3NwYW4+PC9zYW1wPiwKK3doaWNoIHNlcnZlcyBmb3IgbW9zdCBuZWVkcy4KKworICAgICA8cD5BIHNwZWNpZmljYXRpb24gaGFzIHRoZSBzeW50YXg8YnI+CitbJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kaXI6PC9zcGFuPjwvc2FtcD4mcnNxdW87fCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW5kOjwvc3Bhbj48L3NhbXA+JnJzcXVvO11bJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcmQ6PC9zcGFuPjwvc2FtcD4mcnNxdW87fCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2VuOjwvc3Bhbj48L3NhbXA+JnJzcXVvO10oJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbnk8L3NwYW4+PC9zYW1wPiZyc3F1bzt8JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zeXM8L3NwYW4+PC9zYW1wPiZyc3F1bzt8JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iYXNlPC9zcGFuPjwvc2FtcD4mcnNxdW87fCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOykKKworICAgICA8cD5UaGUgb3B0aW9uYWwgZmlyc3Qgd29yZCBsaW1pdHMgdGhlIHNwZWNpZmljYXRpb24gdG8KK3N0cnVjdHMgdGhhdCBhcmUgdXNlZCBkaXJlY3RseSAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kaXI6PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBvciB1c2VkIGluZGlyZWN0bHkgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW5kOjwvc3Bhbj48L3NhbXA+JnJzcXVvOykuIAorQSBzdHJ1Y3QgdHlwZSBpcyB1c2VkIGRpcmVjdGx5IHdoZW4gaXQgaXMgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZSwgbWVtYmVyLiAKK0luZGlyZWN0IHVzZXMgYXJpc2UgdGhyb3VnaCBwb2ludGVycyB0byBzdHJ1Y3RzLiAKK1RoYXQgaXMsIHdoZW4gdXNlIG9mIGFuIGluY29tcGxldGUgc3RydWN0IGlzIHZhbGlkLCB0aGUgdXNlIGlzIGluZGlyZWN0LiAKK0FuIGV4YW1wbGUgaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RydWN0IG9uZSBkaXJlY3Q7IHN0cnVjdCB0d28gKiBpbmRpcmVjdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+VGhlIG9wdGlvbmFsIHNlY29uZCB3b3JkIGxpbWl0cyB0aGUgc3BlY2lmaWNhdGlvbiB0bworb3JkaW5hcnkgc3RydWN0cyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcmQ6PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBvciBnZW5lcmljIHN0cnVjdHMgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2VuOjwvc3Bhbj48L3NhbXA+JnJzcXVvOykuIAorR2VuZXJpYyBzdHJ1Y3RzIGFyZSBhIGJpdCBjb21wbGljYXRlZCB0byBleHBsYWluLiAKK0ZvciBDKyssIHRoZXNlIGFyZSBub24tZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIG9mIHRlbXBsYXRlIGNsYXNzZXMsCitvciBub24tdGVtcGxhdGUgY2xhc3NlcyB3aXRoaW4gdGhlIGFib3ZlLiAKK090aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcyBoYXZlIGdlbmVyaWNzLAorYnV0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZW1pdC1zdHJ1Y3QtZGVidWctZGV0YWlsZWQ8L3NwYW4+PC9zYW1wPiBkb2VzIG5vdCB5ZXQgaW1wbGVtZW50IHRoZW0uCisKKyAgICAgPHA+VGhlIHRoaXJkIHdvcmQgc3BlY2lmaWVzIHRoZSBzb3VyY2UgZmlsZXMgZm9yIHRob3NlCitzdHJ1Y3RzIGZvciB3aGljaCB0aGUgY29tcGlsZXIgc2hvdWxkIGVtaXQgZGVidWcgaW5mb3JtYXRpb24uIAorVGhlIHZhbHVlcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YW55PC9zcGFuPjwvc2FtcD4mcnNxdW87IGhhdmUgdGhlIG5vcm1hbCBtZWFuaW5nLiAKK1RoZSB2YWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJhc2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWVhbnMgdGhhdAordGhlIGJhc2Ugb2YgbmFtZSBvZiB0aGUgZmlsZSBpbiB3aGljaCB0aGUgdHlwZSBkZWNsYXJhdGlvbiBhcHBlYXJzCittdXN0IG1hdGNoIHRoZSBiYXNlIG9mIHRoZSBuYW1lIG9mIHRoZSBtYWluIGNvbXBpbGF0aW9uIGZpbGUuIAorSW4gcHJhY3RpY2UsIHRoaXMgbWVhbnMgdGhhdCB3aGVuIGNvbXBpbGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zm9vLmM8L3NwYW4+PC9zYW1wPiwgZGVidWcgaW5mb3JtYXRpb24KK2lzIGdlbmVyYXRlZCBmb3IgdHlwZXMgZGVjbGFyZWQgaW4gdGhhdCBmaWxlIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zm9vLmg8L3NwYW4+PC9zYW1wPiwKK2J1dCBub3Qgb3RoZXIgaGVhZGVyIGZpbGVzLiAKK1RoZSB2YWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN5czwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtZWFucyB0aG9zZSB0eXBlcyBzYXRpc2Z5aW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmFzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOworb3IgZGVjbGFyZWQgaW4gc3lzdGVtIG9yIGNvbXBpbGVyIGhlYWRlcnMuCisKKyAgICAgPHA+WW91IG1heSBuZWVkIHRvIGV4cGVyaW1lbnQgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IHNldHRpbmdzIGZvciB5b3VyIGFwcGxpY2F0aW9uLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZW1pdC1zdHJ1Y3QtZGVidWctZGV0YWlsZWQ9YWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhpcyBvcHRpb24gd29ya3Mgb25seSB3aXRoIERXQVJGIDIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLW1lcmdlLWRlYnVnLXN0cmluZ3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZtZXJnZV8wMDJkZGVidWdfMDAyZHN0cmluZ3MtNTY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRtZXJnZV8wMDJkZGVidWdfMDAyZHN0cmluZ3MtNTY1Ij48L2E+RGlyZWN0IHRoZSBsaW5rZXIgdG8gbm90IG1lcmdlIHRvZ2V0aGVyIHN0cmluZ3MgaW4gdGhlIGRlYnVnZ2luZworaW5mb3JtYXRpb24gdGhhdCBhcmUgaWRlbnRpY2FsIGluIGRpZmZlcmVudCBvYmplY3QgZmlsZXMuICBNZXJnaW5nIGlzCitub3Qgc3VwcG9ydGVkIGJ5IGFsbCBhc3NlbWJsZXJzIG9yIGxpbmtlcnMuICBNZXJnaW5nIGRlY3JlYXNlcyB0aGUgc2l6ZQorb2YgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgZmlsZSBhdCB0aGUgY29zdCBvZiBpbmNyZWFzaW5nCitsaW5rIHByb2Nlc3NpbmcgdGltZS4gIE1lcmdpbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkZWJ1Zy1wcmVmaXgtbWFwPTwvY29kZT48dmFyPm9sZDwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj5uZXc8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmRlYnVnXzAwMmRwcmVmaXhfMDAyZG1hcC01NjYiPjwvYT5XaGVuIGNvbXBpbGluZyBmaWxlcyBpbiBkaXJlY3RvcnkgPHNhbXA+PHZhcj5vbGQ8L3Zhcj48L3NhbXA+LCByZWNvcmQgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZW0gYXMgaW4gPHNhbXA+PHZhcj5uZXc8L3Zhcj48L3NhbXA+IGluc3RlYWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWR3YXJmMi1jZmktYXNtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHdhcmYyXzAwMmRjZmlfMDAyZGFzbS01NjciPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGR3YXJmMl8wMDJkY2ZpXzAwMmRhc20tNTY4Ij48L2E+RW1pdCBEV0FSRiAyIHVud2luZCBpbmZvIGFzIGNvbXBpbGVyIGdlbmVyYXRlZCA8Y29kZT4uZWhfZnJhbWU8L2NvZGU+IHNlY3Rpb24KK2luc3RlYWQgb2YgdXNpbmcgR0FTIDxjb2RlPi5jZmlfKjwvY29kZT4gZGlyZWN0aXZlcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3YnByb2ZfMDA3ZC01NjkiPjwvYT48YnI+PGR0Pjxjb2RlPi1wPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wLTU3MCI+PC9hPkdlbmVyYXRlIGV4dHJhIGNvZGUgdG8gd3JpdGUgcHJvZmlsZSBpbmZvcm1hdGlvbiBzdWl0YWJsZSBmb3IgdGhlCithbmFseXNpcyBwcm9ncmFtIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5wcm9mPC9zcGFuPjwvc2FtcD4uICBZb3UgbXVzdCB1c2UgdGhpcyBvcHRpb24gd2hlbiBjb21waWxpbmcKK3RoZSBzb3VyY2UgZmlsZXMgeW91IHdhbnQgZGF0YSBhYm91dCwgYW5kIHlvdSBtdXN0IGFsc28gdXNlIGl0IHdoZW4KK2xpbmtpbmcuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2JncHJvZl8wMDdkLTU3MSI+PC9hPjxicj48ZHQ+PGNvZGU+LXBnPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wZy01NzIiPjwvYT5HZW5lcmF0ZSBleHRyYSBjb2RlIHRvIHdyaXRlIHByb2ZpbGUgaW5mb3JtYXRpb24gc3VpdGFibGUgZm9yIHRoZQorYW5hbHlzaXMgcHJvZ3JhbSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z3Byb2Y8L3NwYW4+PC9zYW1wPi4gIFlvdSBtdXN0IHVzZSB0aGlzIG9wdGlvbiB3aGVuIGNvbXBpbGluZwordGhlIHNvdXJjZSBmaWxlcyB5b3Ugd2FudCBkYXRhIGFib3V0LCBhbmQgeW91IG11c3QgYWxzbyB1c2UgaXQgd2hlbgorbGlua2luZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1RPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1RLTU3MyI+PC9hPk1ha2VzIHRoZSBjb21waWxlciBwcmludCBvdXQgZWFjaCBmdW5jdGlvbiBuYW1lIGFzIGl0IGlzIGNvbXBpbGVkLCBhbmQKK3ByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCBlYWNoIHBhc3Mgd2hlbiBpdCBmaW5pc2hlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdGltZS1yZXBvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0aW1lXzAwMmRyZXBvcnQtNTc0Ij48L2E+TWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCB0aGUgdGltZSBjb25zdW1lZCBieSBlYWNoCitwYXNzIHdoZW4gaXQgZmluaXNoZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm1lbS1yZXBvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZtZW1fMDAyZHJlcG9ydC01NzUiPjwvYT5NYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQgc29tZSBzdGF0aXN0aWNzIGFib3V0IHBlcm1hbmVudCBtZW1vcnkKK2FsbG9jYXRpb24gd2hlbiBpdCBmaW5pc2hlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbWVtLXJlcG9ydC13cGE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZtZW1fMDAyZHJlcG9ydF8wMDJkd3BhLTU3NiI+PC9hPk1ha2VzIHRoZSBjb21waWxlciBwcmludCBzb21lIHN0YXRpc3RpY3MgYWJvdXQgcGVybWFuZW50IG1lbW9yeQorYWxsb2NhdGlvbiBmb3IgdGhlIFdQQSBwaGFzZSBvbmx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwcmUtaXBhLW1lbS1yZXBvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZwcmVfMDAyZGlwYV8wMDJkbWVtXzAwMmRyZXBvcnQtNTc3Ij48L2E+PGJyPjxkdD48Y29kZT4tZnBvc3QtaXBhLW1lbS1yZXBvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZwb3N0XzAwMmRpcGFfMDAyZG1lbV8wMDJkcmVwb3J0LTU3OCI+PC9hPk1ha2VzIHRoZSBjb21waWxlciBwcmludCBzb21lIHN0YXRpc3RpY3MgYWJvdXQgcGVybWFuZW50IG1lbW9yeQorYWxsb2NhdGlvbiBiZWZvcmUgb3IgYWZ0ZXIgaW50ZXJwcm9jZWR1cmFsIG9wdGltaXphdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcHJvZmlsZS1yZXBvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZwcm9maWxlXzAwMmRyZXBvcnQtNTc5Ij48L2E+TWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCBjb25zaXN0ZW5jeSBvZiB0aGUKKyhlc3RpbWF0ZWQpIHByb2ZpbGUgYW5kIGVmZmVjdCBvZiBpbmRpdmlkdWFsIHBhc3Nlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc3RhY2stdXNhZ2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzdGFja18wMDJkdXNhZ2UtNTgwIj48L2E+TWFrZXMgdGhlIGNvbXBpbGVyIG91dHB1dCBzdGFjayB1c2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHByb2dyYW0sIG9uIGEKK3Blci1mdW5jdGlvbiBiYXNpcy4gIFRoZSBmaWxlbmFtZSBmb3IgdGhlIGR1bXAgaXMgbWFkZSBieSBhcHBlbmRpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uc3U8L3NwYW4+PC9zYW1wPiB0byB0aGUgPHZhcj5hdXhuYW1lPC92YXI+LiAgPHZhcj5hdXhuYW1lPC92YXI+IGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBuYW1lIG9mCit0aGUgb3V0cHV0IGZpbGUsIGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFuZCBpdCBpcyBub3QgYW4gZXhlY3V0YWJsZSwKK290aGVyd2lzZSBpdCBpcyB0aGUgYmFzZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLiAgQW4gZW50cnkgaXMgbWFkZSB1cAorb2YgdGhyZWUgZmllbGRzOgorCisgICAgICAgICAgPHVsPgorPGxpPlRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gCis8bGk+QSBudW1iZXIgb2YgYnl0ZXMuIAorPGxpPk9uZSBvciBtb3JlIHF1YWxpZmllcnM6IDxjb2RlPnN0YXRpYzwvY29kZT4sIDxjb2RlPmR5bmFtaWM8L2NvZGU+LCA8Y29kZT5ib3VuZGVkPC9jb2RlPi4gCis8L3VsPgorCisgICAgIDxwPlRoZSBxdWFsaWZpZXIgPGNvZGU+c3RhdGljPC9jb2RlPiBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBtYW5pcHVsYXRlcyB0aGUgc3RhY2sKK3N0YXRpY2FsbHk6IGEgZml4ZWQgbnVtYmVyIG9mIGJ5dGVzIGFyZSBhbGxvY2F0ZWQgZm9yIHRoZSBmcmFtZSBvbiBmdW5jdGlvbgorZW50cnkgYW5kIHJlbGVhc2VkIG9uIGZ1bmN0aW9uIGV4aXQ7IG5vIHN0YWNrIGFkanVzdG1lbnRzIGFyZSBvdGhlcndpc2UgbWFkZQoraW4gdGhlIGZ1bmN0aW9uLiAgVGhlIHNlY29uZCBmaWVsZCBpcyB0aGlzIGZpeGVkIG51bWJlciBvZiBieXRlcy4KKworICAgICA8cD5UaGUgcXVhbGlmaWVyIDxjb2RlPmR5bmFtaWM8L2NvZGU+IG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIG1hbmlwdWxhdGVzIHRoZSBzdGFjaworZHluYW1pY2FsbHk6IGluIGFkZGl0aW9uIHRvIHRoZSBzdGF0aWMgYWxsb2NhdGlvbiBkZXNjcmliZWQgYWJvdmUsIHN0YWNrCithZGp1c3RtZW50cyBhcmUgbWFkZSBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGZvciBleGFtcGxlIHRvIHB1c2gvcG9wCithcmd1bWVudHMgYXJvdW5kIGZ1bmN0aW9uIGNhbGxzLiAgSWYgdGhlIHF1YWxpZmllciA8Y29kZT5ib3VuZGVkPC9jb2RlPiBpcyBhbHNvCitwcmVzZW50LCB0aGUgYW1vdW50IG9mIHRoZXNlIGFkanVzdG1lbnRzIGlzIGJvdW5kZWQgYXQgY29tcGlsZSB0aW1lIGFuZAordGhlIHNlY29uZCBmaWVsZCBpcyBhbiB1cHBlciBib3VuZCBvZiB0aGUgdG90YWwgYW1vdW50IG9mIHN0YWNrIHVzZWQgYnkKK3RoZSBmdW5jdGlvbi4gIElmIGl0IGlzIG5vdCBwcmVzZW50LCB0aGUgYW1vdW50IG9mIHRoZXNlIGFkanVzdG1lbnRzIGlzCitub3QgYm91bmRlZCBhdCBjb21waWxlIHRpbWUgYW5kIHRoZSBzZWNvbmQgZmllbGQgb25seSByZXByZXNlbnRzIHRoZQorYm91bmRlZCBwYXJ0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwcm9maWxlLWFyY3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZwcm9maWxlXzAwMmRhcmNzLTU4MSI+PC9hPkFkZCBjb2RlIHNvIHRoYXQgcHJvZ3JhbSBmbG93IDxkZm4+YXJjczwvZGZuPiBhcmUgaW5zdHJ1bWVudGVkLiAgRHVyaW5nCitleGVjdXRpb24gdGhlIHByb2dyYW0gcmVjb3JkcyBob3cgbWFueSB0aW1lcyBlYWNoIGJyYW5jaCBhbmQgY2FsbCBpcworZXhlY3V0ZWQgYW5kIGhvdyBtYW55IHRpbWVzIGl0IGlzIHRha2VuIG9yIHJldHVybnMuICBXaGVuIHRoZSBjb21waWxlZAorcHJvZ3JhbSBleGl0cyBpdCBzYXZlcyB0aGlzIGRhdGEgdG8gYSBmaWxlIGNhbGxlZAorPHNhbXA+PHZhcj5hdXhuYW1lPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi5nY2RhPC9zcGFuPjwvc2FtcD4gZm9yIGVhY2ggc291cmNlIGZpbGUuICBUaGUgZGF0YSBtYXkgYmUgdXNlZCBmb3IKK3Byb2ZpbGUtZGlyZWN0ZWQgb3B0aW1pemF0aW9ucyAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZicmFuY2gtcHJvYmFiaWxpdGllczwvc3Bhbj48L3NhbXA+KSwgb3IgZm9yCit0ZXN0IGNvdmVyYWdlIGFuYWx5c2lzICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnRlc3QtY292ZXJhZ2U8L3NwYW4+PC9zYW1wPikuICBFYWNoIG9iamVjdCBmaWxlJ3MKKzx2YXI+YXV4bmFtZTwvdmFyPiBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUsIGlmCitleHBsaWNpdGx5IHNwZWNpZmllZCBhbmQgaXQgaXMgbm90IHRoZSBmaW5hbCBleGVjdXRhYmxlLCBvdGhlcndpc2UgaXQgaXMKK3RoZSBiYXNlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuICBJbiBib3RoIGNhc2VzIGFueSBzdWZmaXggaXMgcmVtb3ZlZAorKGUuZy4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5nY2RhPC9zcGFuPjwvc2FtcD4gZm9yIGlucHV0IGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmRpci9mb28uYzwvc3Bhbj48L3NhbXA+LCBvcgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmRpci9mb28uZ2NkYTwvc3Bhbj48L3NhbXA+IGZvciBvdXRwdXQgZmlsZSBzcGVjaWZpZWQgYXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW8gZGlyL2Zvby5vPC9zcGFuPjwvc2FtcD4pLiAKK1NlZSA8YSBocmVmPSJDcm9zc18wMDJkcHJvZmlsaW5nLmh0bWwjQ3Jvc3NfMDAyZHByb2ZpbGluZyI+Q3Jvc3MtcHJvZmlsaW5nPC9hPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ymdjb3ZfMDA3ZC01ODIiPjwvYT48YnI+PGR0Pjxjb2RlPi0tY292ZXJhZ2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWNvdmVyYWdlLTU4MyI+PC9hPgorVGhpcyBvcHRpb24gaXMgdXNlZCB0byBjb21waWxlIGFuZCBsaW5rIGNvZGUgaW5zdHJ1bWVudGVkIGZvciBjb3ZlcmFnZQorYW5hbHlzaXMuICBUaGUgb3B0aW9uIGlzIGEgc3lub255bSBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWFyY3M8L3NwYW4+PC9zYW1wPgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ0ZXN0LWNvdmVyYWdlPC9zcGFuPjwvc2FtcD4gKHdoZW4gY29tcGlsaW5nKSBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWxnY292PC9zcGFuPjwvc2FtcD4gKHdoZW4KK2xpbmtpbmcpLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aG9zZSBvcHRpb25zIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgICA8dWw+Cis8bGk+Q29tcGlsZSB0aGUgc291cmNlIGZpbGVzIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWFyY3M8L3NwYW4+PC9zYW1wPiBwbHVzIG9wdGltaXphdGlvbgorYW5kIGNvZGUgZ2VuZXJhdGlvbiBvcHRpb25zLiAgRm9yIHRlc3QgY292ZXJhZ2UgYW5hbHlzaXMsIHVzZSB0aGUKK2FkZGl0aW9uYWwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ0ZXN0LWNvdmVyYWdlPC9zcGFuPjwvc2FtcD4gb3B0aW9uLiAgWW91IGRvIG5vdCBuZWVkIHRvIHByb2ZpbGUKK2V2ZXJ5IHNvdXJjZSBmaWxlIGluIGEgcHJvZ3JhbS4KKworICAgICAgICAgIDxsaT5MaW5rIHlvdXIgb2JqZWN0IGZpbGVzIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWxnY292PC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWFyY3M8L3NwYW4+PC9zYW1wPgorKHRoZSBsYXR0ZXIgaW1wbGllcyB0aGUgZm9ybWVyKS4KKworICAgICAgICAgIDxsaT5SdW4gdGhlIHByb2dyYW0gb24gYSByZXByZXNlbnRhdGl2ZSB3b3JrbG9hZCB0byBnZW5lcmF0ZSB0aGUgYXJjIHByb2ZpbGUKK2luZm9ybWF0aW9uLiAgVGhpcyBtYXkgYmUgcmVwZWF0ZWQgYW55IG51bWJlciBvZiB0aW1lcy4gIFlvdSBjYW4gcnVuCitjb25jdXJyZW50IGluc3RhbmNlcyBvZiB5b3VyIHByb2dyYW0sIGFuZCBwcm92aWRlZCB0aGF0IHRoZSBmaWxlIHN5c3RlbQorc3VwcG9ydHMgbG9ja2luZywgdGhlIGRhdGEgZmlsZXMgd2lsbCBiZSBjb3JyZWN0bHkgdXBkYXRlZC4gIEFsc28KKzxjb2RlPmZvcms8L2NvZGU+IGNhbGxzIGFyZSBkZXRlY3RlZCBhbmQgY29ycmVjdGx5IGhhbmRsZWQgKGRvdWJsZSBjb3VudGluZword2lsbCBub3QgaGFwcGVuKS4KKworICAgICAgICAgIDxsaT5Gb3IgcHJvZmlsZS1kaXJlY3RlZCBvcHRpbWl6YXRpb25zLCBjb21waWxlIHRoZSBzb3VyY2UgZmlsZXMgYWdhaW4gd2l0aAordGhlIHNhbWUgb3B0aW1pemF0aW9uIGFuZCBjb2RlIGdlbmVyYXRpb24gb3B0aW9ucyBwbHVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmJyYW5jaC1wcm9iYWJpbGl0aWVzPC9zcGFuPjwvc2FtcD4gKHNlZSA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW9ucyB0aGF0IENvbnRyb2wgT3B0aW1pemF0aW9uPC9hPikuCisKKyAgICAgICAgICA8bGk+Rm9yIHRlc3QgY292ZXJhZ2UgYW5hbHlzaXMsIHVzZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IHRvIHByb2R1Y2UgaHVtYW4gcmVhZGFibGUKK2luZm9ybWF0aW9uIGZyb20gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2Nubzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmdjZGE8L3NwYW4+PC9zYW1wPiBmaWxlcy4gIFJlZmVyIHRvIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorCisgICAgIDwvdWw+CisKKyAgICAgPHA+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+LCBmb3IgZWFjaCBmdW5jdGlvbiBvZiB5b3VyIHByb2dyYW0gR0NDCitjcmVhdGVzIGEgcHJvZ3JhbSBmbG93IGdyYXBoLCB0aGVuIGZpbmRzIGEgc3Bhbm5pbmcgdHJlZSBmb3IgdGhlIGdyYXBoLiAKK09ubHkgYXJjcyB0aGF0IGFyZSBub3Qgb24gdGhlIHNwYW5uaW5nIHRyZWUgaGF2ZSB0byBiZSBpbnN0cnVtZW50ZWQ6IHRoZQorY29tcGlsZXIgYWRkcyBjb2RlIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGVzZSBhcmNzIGFyZQorZXhlY3V0ZWQuICBXaGVuIGFuIGFyYyBpcyB0aGUgb25seSBleGl0IG9yIG9ubHkgZW50cmFuY2UgdG8gYSBibG9jaywgdGhlCitpbnN0cnVtZW50YXRpb24gY29kZSBjYW4gYmUgYWRkZWQgdG8gdGhlIGJsb2NrOyBvdGhlcndpc2UsIGEgbmV3IGJhc2ljCitibG9jayBtdXN0IGJlIGNyZWF0ZWQgdG8gaG9sZCB0aGUgaW5zdHJ1bWVudGF0aW9uIGNvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRlc3QtY292ZXJhZ2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0ZXN0XzAwMmRjb3ZlcmFnZS01ODQiPjwvYT5Qcm9kdWNlIGEgbm90ZXMgZmlsZSB0aGF0IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IGNvZGUtY292ZXJhZ2UgdXRpbGl0eQorKHNlZSA8YSBocmVmPSJHY292Lmh0bWwjR2NvdiI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiZtZGFzaDthIFRlc3QgQ292ZXJhZ2UgUHJvZ3JhbTwvYT4pIGNhbiB1c2UgdG8KK3Nob3cgcHJvZ3JhbSBjb3ZlcmFnZS4gIEVhY2ggc291cmNlIGZpbGUncyBub3RlIGZpbGUgaXMgY2FsbGVkCis8c2FtcD48dmFyPmF1eG5hbWU8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+Lmdjbm88L3NwYW4+PC9zYW1wPi4gIFJlZmVyIHRvIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+IG9wdGlvbgorYWJvdmUgZm9yIGEgZGVzY3JpcHRpb24gb2YgPHZhcj5hdXhuYW1lPC92YXI+IGFuZCBpbnN0cnVjdGlvbnMgb24gaG93IHRvCitnZW5lcmF0ZSB0ZXN0IGNvdmVyYWdlIGRhdGEuICBDb3ZlcmFnZSBkYXRhIG1hdGNoZXMgdGhlIHNvdXJjZSBmaWxlcworbW9yZSBjbG9zZWx5IGlmIHlvdSBkbyBub3Qgb3B0aW1pemUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRiZy1jbnQtbGlzdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmRiZ18wMDJkY250XzAwMmRsaXN0LTU4NSI+PC9hPlByaW50IHRoZSBuYW1lIGFuZCB0aGUgY291bnRlciB1cHBlciBib3VuZCBmb3IgYWxsIGRlYnVnIGNvdW50ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkYmctY250PTwvY29kZT48dmFyPmNvdW50ZXItdmFsdWUtbGlzdDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mZGJnXzAwMmRjbnQtNTg2Ij48L2E+U2V0IHRoZSBpbnRlcm5hbCBkZWJ1ZyBjb3VudGVyIHVwcGVyIGJvdW5kLiAgPHZhcj5jb3VudGVyLXZhbHVlLWxpc3Q8L3Zhcj4KK2lzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgPHZhcj5uYW1lPC92YXI+Ojx2YXI+dmFsdWU8L3Zhcj4gcGFpcnMKK3doaWNoIHNldHMgdGhlIHVwcGVyIGJvdW5kIG9mIGVhY2ggZGVidWcgY291bnRlciA8dmFyPm5hbWU8L3Zhcj4gdG8gPHZhcj52YWx1ZTwvdmFyPi4gCitBbGwgZGVidWcgY291bnRlcnMgaGF2ZSB0aGUgaW5pdGlhbCB1cHBlciBib3VuZCBvZiA8Y29kZT5VSU5UX01BWDwvY29kZT47Cit0aHVzIDxjb2RlPmRiZ19jbnQoKTwvY29kZT4gcmV0dXJucyB0cnVlIGFsd2F5cyB1bmxlc3MgdGhlIHVwcGVyIGJvdW5kCitpcyBzZXQgYnkgdGhpcyBvcHRpb24uIAorRm9yIGV4YW1wbGUsIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkYmctY250PWRjZToxMCx0YWlsX2NhbGw6MDwvc3Bhbj48L3NhbXA+LAorPGNvZGU+ZGJnX2NudChkY2UpPC9jb2RlPiByZXR1cm5zIHRydWUgb25seSBmb3IgZmlyc3QgMTAgaW52b2NhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmVuYWJsZS08L2NvZGU+PHZhcj5raW5kPC92YXI+PGNvZGU+LTwvY29kZT48dmFyPnBhc3M8L3Zhcj48ZHQ+PGNvZGU+LWZkaXNhYmxlLTwvY29kZT48dmFyPmtpbmQ8L3Zhcj48Y29kZT4tPC9jb2RlPjx2YXI+cGFzczwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj5yYW5nZS1saXN0PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZkaXNhYmxlXzAwMmQtNTg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmVuYWJsZV8wMDJkLTU4OCI+PC9hPgorVGhpcyBpcyBhIHNldCBvZiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgdG8gZXhwbGljaXRseSBkaXNhYmxlL2VuYWJsZQorb3B0aW1pemF0aW9uIHBhc3Nlcy4gIFRoZXNlIG9wdGlvbnMgYXJlIGludGVuZGVkIGZvciB1c2UgZm9yIGRlYnVnZ2luZyBHQ0MuIAorQ29tcGlsZXIgdXNlcnMgc2hvdWxkIHVzZSByZWd1bGFyIG9wdGlvbnMgZm9yIGVuYWJsaW5nL2Rpc2FibGluZworcGFzc2VzIGluc3RlYWQuCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZkaXNhYmxlLWlwYS08L2NvZGU+PHZhcj5wYXNzPC92YXI+PGRkPkRpc2FibGUgSVBBIHBhc3MgPHZhcj5wYXNzPC92YXI+LiA8dmFyPnBhc3M8L3Zhcj4gaXMgdGhlIHBhc3MgbmFtZS4gIElmIHRoZSBzYW1lIHBhc3MgaXMKK3N0YXRpY2FsbHkgaW52b2tlZCBpbiB0aGUgY29tcGlsZXIgbXVsdGlwbGUgdGltZXMsIHRoZSBwYXNzIG5hbWUgc2hvdWxkIGJlCithcHBlbmRlZCB3aXRoIGEgc2VxdWVudGlhbCBudW1iZXIgc3RhcnRpbmcgZnJvbSAxLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmRpc2FibGUtcnRsLTwvY29kZT48dmFyPnBhc3M8L3Zhcj48ZHQ+PGNvZGU+LWZkaXNhYmxlLXJ0bC08L2NvZGU+PHZhcj5wYXNzPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPnJhbmdlLWxpc3Q8L3Zhcj48ZGQ+RGlzYWJsZSBSVEwgcGFzcyA8dmFyPnBhc3M8L3Zhcj4uICA8dmFyPnBhc3M8L3Zhcj4gaXMgdGhlIHBhc3MgbmFtZS4gIElmIHRoZSBzYW1lIHBhc3MgaXMKK3N0YXRpY2FsbHkgaW52b2tlZCBpbiB0aGUgY29tcGlsZXIgbXVsdGlwbGUgdGltZXMsIHRoZSBwYXNzIG5hbWUgc2hvdWxkIGJlCithcHBlbmRlZCB3aXRoIGEgc2VxdWVudGlhbCBudW1iZXIgc3RhcnRpbmcgZnJvbSAxLiAgPHZhcj5yYW5nZS1saXN0PC92YXI+IGlzIGEKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZ1bmN0aW9uIHJhbmdlcyBvciBhc3NlbWJsZXIgbmFtZXMuICBFYWNoIHJhbmdlIGlzIGEgbnVtYmVyCitwYWlyIHNlcGFyYXRlZCBieSBhIGNvbG9uLiAgVGhlIHJhbmdlIGlzIGluY2x1c2l2ZSBpbiBib3RoIGVuZHMuICBJZiB0aGUgcmFuZ2UKK2lzIHRyaXZpYWwsIHRoZSBudW1iZXIgcGFpciBjYW4gYmUgc2ltcGxpZmllZCBhcyBhIHNpbmdsZSBudW1iZXIuICBJZiB0aGUKK2Z1bmN0aW9uJ3MgY2FsbCBncmFwaCBub2RlJ3MgPHZhcj51aWQ8L3Zhcj4gZmFsbHMgd2l0aGluIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHJhbmdlcywKK3RoZSA8dmFyPnBhc3M8L3Zhcj4gaXMgZGlzYWJsZWQgZm9yIHRoYXQgZnVuY3Rpb24uICBUaGUgPHZhcj51aWQ8L3Zhcj4gaXMgc2hvd24gaW4gdGhlCitmdW5jdGlvbiBoZWFkZXIgb2YgYSBkdW1wIGZpbGUsIGFuZCB0aGUgcGFzcyBuYW1lcyBjYW4gYmUgZHVtcGVkIGJ5IHVzaW5nCitvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXBhc3Nlczwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmRpc2FibGUtdHJlZS08L2NvZGU+PHZhcj5wYXNzPC92YXI+PGR0Pjxjb2RlPi1mZGlzYWJsZS10cmVlLTwvY29kZT48dmFyPnBhc3M8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+cmFuZ2UtbGlzdDwvdmFyPjxkZD5EaXNhYmxlIHRyZWUgcGFzcyA8dmFyPnBhc3M8L3Zhcj4uICBTZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkaXNhYmxlLXJ0bDwvc3Bhbj48L3NhbXA+IGZvciB0aGUgZGVzY3JpcHRpb24gb2YKK29wdGlvbiBhcmd1bWVudHMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZW5hYmxlLWlwYS08L2NvZGU+PHZhcj5wYXNzPC92YXI+PGRkPkVuYWJsZSBJUEEgcGFzcyA8dmFyPnBhc3M8L3Zhcj4uICA8dmFyPnBhc3M8L3Zhcj4gaXMgdGhlIHBhc3MgbmFtZS4gIElmIHRoZSBzYW1lIHBhc3MgaXMKK3N0YXRpY2FsbHkgaW52b2tlZCBpbiB0aGUgY29tcGlsZXIgbXVsdGlwbGUgdGltZXMsIHRoZSBwYXNzIG5hbWUgc2hvdWxkIGJlCithcHBlbmRlZCB3aXRoIGEgc2VxdWVudGlhbCBudW1iZXIgc3RhcnRpbmcgZnJvbSAxLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmVuYWJsZS1ydGwtPC9jb2RlPjx2YXI+cGFzczwvdmFyPjxkdD48Y29kZT4tZmVuYWJsZS1ydGwtPC9jb2RlPjx2YXI+cGFzczwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj5yYW5nZS1saXN0PC92YXI+PGRkPkVuYWJsZSBSVEwgcGFzcyA8dmFyPnBhc3M8L3Zhcj4uICBTZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkaXNhYmxlLXJ0bDwvc3Bhbj48L3NhbXA+IGZvciBvcHRpb24gYXJndW1lbnQKK2Rlc2NyaXB0aW9uIGFuZCBleGFtcGxlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZlbmFibGUtdHJlZS08L2NvZGU+PHZhcj5wYXNzPC92YXI+PGR0Pjxjb2RlPi1mZW5hYmxlLXRyZWUtPC9jb2RlPjx2YXI+cGFzczwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj5yYW5nZS1saXN0PC92YXI+PGRkPkVuYWJsZSB0cmVlIHBhc3MgPHZhcj5wYXNzPC92YXI+LiAgU2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZGlzYWJsZS1ydGw8L3NwYW4+PC9zYW1wPiBmb3IgdGhlIGRlc2NyaXB0aW9uCitvZiBvcHRpb24gYXJndW1lbnRzLgorCisgICAgIDwvZGw+CisKKyAgICAgPHA+SGVyZSBhcmUgc29tZSBleGFtcGxlcyBzaG93aW5nIHVzZXMgb2YgdGhlc2Ugb3B0aW9ucy4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAKKyAgICAgICAgICAjIGRpc2FibGUgY2NwMSBmb3IgYWxsIGZ1bmN0aW9ucworICAgICAgICAgICAgIC1mZGlzYWJsZS10cmVlLWNjcDEKKyAgICAgICAgICAjIGRpc2FibGUgY29tcGxldGUgdW5yb2xsIGZvciBmdW5jdGlvbiB3aG9zZSBjZ3JhcGggbm9kZSB1aWQgaXMgMQorICAgICAgICAgICAgIC1mZW5hYmxlLXRyZWUtY3Vucm9sbD0xCisgICAgICAgICAgIyBkaXNhYmxlIGdjc2UyIGZvciBmdW5jdGlvbnMgYXQgdGhlIGZvbGxvd2luZyByYW5nZXMgWzEsMV0sCisgICAgICAgICAgIyBbMzAwLDQwMF0sIGFuZCBbNDAwLDEwMDBdCisgICAgICAgICAgIyBkaXNhYmxlIGdjc2UyIGZvciBmdW5jdGlvbnMgZm9vIGFuZCBmb28yCisgICAgICAgICAgICAgLWZkaXNhYmxlLXJ0bC1nY3NlMj1mb28sZm9vMgorICAgICAgICAgICMgZGlzYWJsZSBlYXJseSBpbmxpbmluZworICAgICAgICAgICAgIC1mZGlzYWJsZS10cmVlLWVpbmxpbmUKKyAgICAgICAgICAjIGRpc2FibGUgaXBhIGlubGluaW5nCisgICAgICAgICAgICAgLWZkaXNhYmxlLWlwYS1pbmxpbmUKKyAgICAgICAgICAjIGVuYWJsZSB0cmVlIGZ1bGwgdW5yb2xsCisgICAgICAgICAgICAgLWZlbmFibGUtdHJlZS11bnJvbGwKKyAgICAgICAgICAKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPi1kPC9jb2RlPjx2YXI+bGV0dGVyczwvdmFyPjxkdD48Y29kZT4tZmR1bXAtcnRsLTwvY29kZT48dmFyPnBhc3M8L3Zhcj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC08L2NvZGU+PHZhcj5wYXNzPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWQtNTg5Ij48L2E+U2F5cyB0byBtYWtlIGRlYnVnZ2luZyBkdW1wcyBkdXJpbmcgY29tcGlsYXRpb24gYXQgdGltZXMgc3BlY2lmaWVkIGJ5Cis8dmFyPmxldHRlcnM8L3Zhcj4uICBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgUlRMLWJhc2VkIHBhc3NlcyBvZiB0aGUKK2NvbXBpbGVyLiAgVGhlIGZpbGUgbmFtZXMgZm9yIG1vc3Qgb2YgdGhlIGR1bXBzIGFyZSBtYWRlIGJ5IGFwcGVuZGluZworYSBwYXNzIG51bWJlciBhbmQgYSB3b3JkIHRvIHRoZSA8dmFyPmR1bXBuYW1lPC92YXI+LCBhbmQgdGhlIGZpbGVzIGFyZQorY3JlYXRlZCBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBvdXRwdXQgZmlsZS4gSW4gY2FzZSBvZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+PTwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPiBvcHRpb24sIHRoZSBkdW1wIGlzIG91dHB1dCBvbiB0aGUgZ2l2ZW4gZmlsZQoraW5zdGVhZCBvZiB0aGUgcGFzcyBudW1iZXJlZCBkdW1wIGZpbGVzLiBOb3RlIHRoYXQgdGhlIHBhc3MgbnVtYmVyIGlzCitjb21wdXRlZCBzdGF0aWNhbGx5IGFzIHBhc3NlcyBnZXQgcmVnaXN0ZXJlZCBpbnRvIHRoZSBwYXNzIG1hbmFnZXIuIAorVGh1cyB0aGUgbnVtYmVyaW5nIGlzIG5vdCByZWxhdGVkIHRvIHRoZSBkeW5hbWljIG9yZGVyIG9mIGV4ZWN1dGlvbiBvZgorcGFzc2VzLiAgSW4gcGFydGljdWxhciwgYSBwYXNzIGluc3RhbGxlZCBieSBhIHBsdWdpbiBjb3VsZCBoYXZlIGEKK251bWJlciBvdmVyIDIwMCBldmVuIGlmIGl0IGV4ZWN1dGVkIHF1aXRlIGVhcmx5LiAgPHZhcj5kdW1wbmFtZTwvdmFyPiBpcworZ2VuZXJhdGVkIGZyb20gdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlLCBpZiBleHBsaWNpdGx5IHNwZWNpZmllZAorYW5kIGl0IGlzIG5vdCBhbiBleGVjdXRhYmxlLCBvdGhlcndpc2UgaXQgaXMgdGhlIGJhc2VuYW1lIG9mIHRoZQorc291cmNlIGZpbGUuIFRoZXNlIHN3aXRjaGVzIG1heSBoYXZlIGRpZmZlcmVudCBlZmZlY3RzIHdoZW4KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4gaXMgdXNlZCBmb3IgcHJlcHJvY2Vzc2luZy4KKworICAgICA8cD5EZWJ1ZyBkdW1wcyBjYW4gYmUgZW5hYmxlZCB3aXRoIGEgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bDwvc3Bhbj48L3NhbXA+IHN3aXRjaCBvciBzb21lCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZDwvc3Bhbj48L3NhbXA+IG9wdGlvbiA8dmFyPmxldHRlcnM8L3Zhcj4uICBIZXJlIGFyZSB0aGUgcG9zc2libGUKK2xldHRlcnMgZm9yIHVzZSBpbiA8dmFyPnBhc3M8L3Zhcj4gYW5kIDx2YXI+bGV0dGVyczwvdmFyPiwgYW5kIHRoZWlyIG1lYW5pbmdzOgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPi1mZHVtcC1ydGwtYWxpZ25tZW50czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkYWxpZ25tZW50cy01OTAiPjwvYT5EdW1wIGFmdGVyIGJyYW5jaCBhbGlnbm1lbnRzIGhhdmUgYmVlbiBjb21wdXRlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1hc21jb25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRhc21jb25zLTU5MSI+PC9hPkR1bXAgYWZ0ZXIgZml4aW5nIHJ0bCBzdGF0ZW1lbnRzIHRoYXQgaGF2ZSB1bnNhdGlzZmllZCBpbi9vdXQgY29uc3RyYWludHMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtYXV0b19pbmNfZGVjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRhdXRvXzAwNWZpbmNfMDA1ZmRlYy01OTIiPjwvYT5EdW1wIGFmdGVyIGF1dG8taW5jLWRlYyBkaXNjb3ZlcnkuICBUaGlzIHBhc3MgaXMgb25seSBydW4gb24KK2FyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIGF1dG8gaW5jIG9yIGF1dG8gZGVjIGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1iYXJyaWVyczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkYmFycmllcnMtNTkzIj48L2E+RHVtcCBhZnRlciBjbGVhbmluZyB1cCB0aGUgYmFycmllciBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtYmJwYXJ0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRiYnBhcnQtNTk0Ij48L2E+RHVtcCBhZnRlciBwYXJ0aXRpb25pbmcgaG90IGFuZCBjb2xkIGJhc2ljIGJsb2Nrcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1iYnJvPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRiYnJvLTU5NSI+PC9hPkR1bXAgYWZ0ZXIgYmxvY2sgcmVvcmRlcmluZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1idGwxPC9jb2RlPjxkdD48Y29kZT4tZmR1bXAtcnRsLWJ0bDI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZGJ0bDItNTk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkYnRsMi01OTciPjwvYT48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLWJ0bDE8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1idGwyPC9zcGFuPjwvc2FtcD4gZW5hYmxlIGR1bXBpbmcKK2FmdGVyIHRoZSB0d28gYnJhbmNoCit0YXJnZXQgbG9hZCBvcHRpbWl6YXRpb24gcGFzc2VzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWJ5cGFzczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkYnlwYXNzLTU5OCI+PC9hPkR1bXAgYWZ0ZXIganVtcCBieXBhc3NpbmcgYW5kIGNvbnRyb2wgZmxvdyBvcHRpbWl6YXRpb25zLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWNvbWJpbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZGNvbWJpbmUtNTk5Ij48L2E+RHVtcCBhZnRlciB0aGUgUlRMIGluc3RydWN0aW9uIGNvbWJpbmF0aW9uIHBhc3MuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtY29tcGdvdG9zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRjb21wZ290b3MtNjAwIj48L2E+RHVtcCBhZnRlciBkdXBsaWNhdGluZyB0aGUgY29tcHV0ZWQgZ290b3MuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtY2UxPC9jb2RlPjxkdD48Y29kZT4tZmR1bXAtcnRsLWNlMjwvY29kZT48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1jZTM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZGNlMS02MDEiPjwvYT48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRjZTItNjAyIj48L2E+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkY2UzLTYwMyI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtY2UxPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtY2UyPC9zcGFuPjwvc2FtcD4sIGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1jZTM8L3NwYW4+PC9zYW1wPiBlbmFibGUgZHVtcGluZyBhZnRlciB0aGUgdGhyZWUKK2lmIGNvbnZlcnNpb24gcGFzc2VzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWNwcm9wX2hhcmRyZWc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZGNwcm9wXzAwNWZoYXJkcmVnLTYwNCI+PC9hPkR1bXAgYWZ0ZXIgaGFyZCByZWdpc3RlciBjb3B5IHByb3BhZ2F0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWNzYTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkY3NhLTYwNSI+PC9hPkR1bXAgYWZ0ZXIgY29tYmluaW5nIHN0YWNrIGFkanVzdG1lbnRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWNzZTE8L2NvZGU+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtY3NlMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkY3NlMS02MDYiPjwvYT48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRjc2UyLTYwNyI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtY3NlMTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLWNzZTI8L3NwYW4+PC9zYW1wPiBlbmFibGUgZHVtcGluZyBhZnRlcgordGhlIHR3byBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiBwYXNzZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtZGNlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRkY2UtNjA4Ij48L2E+RHVtcCBhZnRlciB0aGUgc3RhbmRhbG9uZSBkZWFkIGNvZGUgZWxpbWluYXRpb24gcGFzc2VzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWRicjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkZGJyLTYwOSI+PC9hPkR1bXAgYWZ0ZXIgZGVsYXllZCBicmFuY2ggc2NoZWR1bGluZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1kY2UxPC9jb2RlPjxkdD48Y29kZT4tZmR1bXAtcnRsLWRjZTI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZGRjZTEtNjEwIj48L2E+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkZGNlMi02MTEiPjwvYT48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLWRjZTE8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1kY2UyPC9zcGFuPjwvc2FtcD4gZW5hYmxlIGR1bXBpbmcgYWZ0ZXIKK3RoZSB0d28gZGVhZCBzdG9yZSBlbGltaW5hdGlvbiBwYXNzZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtZWg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZGVoLTYxMiI+PC9hPkR1bXAgYWZ0ZXIgZmluYWxpemF0aW9uIG9mIEVIIGhhbmRsaW5nIGNvZGUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtZWhfcmFuZ2VzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRlaF8wMDVmcmFuZ2VzLTYxMyI+PC9hPkR1bXAgYWZ0ZXIgY29udmVyc2lvbiBvZiBFSCBoYW5kbGluZyByYW5nZSByZWdpb25zLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWV4cGFuZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkZXhwYW5kLTYxNCI+PC9hPkR1bXAgYWZ0ZXIgUlRMIGdlbmVyYXRpb24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtZndwcm9wMTwvY29kZT48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1md3Byb3AyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRmd3Byb3AxLTYxNSI+PC9hPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZGZ3cHJvcDItNjE2Ij48L2E+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1md3Byb3AxPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtZndwcm9wMjwvc3Bhbj48L3NhbXA+IGVuYWJsZQorZHVtcGluZyBhZnRlciB0aGUgdHdvIGZvcndhcmQgcHJvcGFnYXRpb24gcGFzc2VzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWdjc2UxPC9jb2RlPjxkdD48Y29kZT4tZmR1bXAtcnRsLWdjc2UyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRnY3NlMS02MTciPjwvYT48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRnY3NlMi02MTgiPjwvYT48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLWdjc2UxPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtZ2NzZTI8L3NwYW4+PC9zYW1wPiBlbmFibGUgZHVtcGluZworYWZ0ZXIgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWluaXQtcmVnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkaW5pdF8wMDJkcmVncy02MTkiPjwvYT5EdW1wIGFmdGVyIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcmVnaXN0ZXJzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWluaXR2YWxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRpbml0dmFscy02MjAiPjwvYT5EdW1wIGFmdGVyIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgaW5pdGlhbCB2YWx1ZSBzZXRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWludG9fY2ZnbGF5b3V0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRpbnRvXzAwNWZjZmdsYXlvdXQtNjIxIj48L2E+RHVtcCBhZnRlciBjb252ZXJ0aW5nIHRvIGNmZ2xheW91dCBtb2RlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLWlyYTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkaXJhLTYyMiI+PC9hPkR1bXAgYWZ0ZXIgaXRlcmF0ZWQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1qdW1wPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRqdW1wLTYyMyI+PC9hPkR1bXAgYWZ0ZXIgdGhlIHNlY29uZCBqdW1wIG9wdGltaXphdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1sb29wMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkbG9vcDItNjI0Ij48L2E+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1sb29wMjwvc3Bhbj48L3NhbXA+IGVuYWJsZXMgZHVtcGluZyBhZnRlciB0aGUgcnRsCitsb29wIG9wdGltaXphdGlvbiBwYXNzZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtbWFjaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkbWFjaC02MjUiPjwvYT5EdW1wIGFmdGVyIHBlcmZvcm1pbmcgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHJlb3JnYW5pemF0aW9uIHBhc3MsIGlmIHRoYXQKK3Bhc3MgZXhpc3RzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLW1vZGVfc3c8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZG1vZGVfMDA1ZnN3LTYyNiI+PC9hPkR1bXAgYWZ0ZXIgcmVtb3ZpbmcgcmVkdW5kYW50IG1vZGUgc3dpdGNoZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtcm5yZWc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZHJucmVnLTYyNyI+PC9hPkR1bXAgYWZ0ZXIgcmVnaXN0ZXIgcmVudW1iZXJpbmcuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtb3V0b2ZfY2ZnbGF5b3V0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRvdXRvZl8wMDVmY2ZnbGF5b3V0LTYyOCI+PC9hPkR1bXAgYWZ0ZXIgY29udmVydGluZyBmcm9tIGNmZ2xheW91dCBtb2RlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLXBlZXBob2xlMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkcGVlcGhvbGUyLTYyOSI+PC9hPkR1bXAgYWZ0ZXIgdGhlIHBlZXBob2xlIHBhc3MuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtcG9zdHJlbG9hZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkcG9zdHJlbG9hZC02MzAiPjwvYT5EdW1wIGFmdGVyIHBvc3QtcmVsb2FkIG9wdGltaXphdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtcHJvX2FuZF9lcGlsb2d1ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkcHJvXzAwNWZhbmRfMDA1ZmVwaWxvZ3VlLTYzMSI+PC9hPkR1bXAgYWZ0ZXIgZ2VuZXJhdGluZyB0aGUgZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtcmVnbW92ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkcmVnbW92ZS02MzIiPjwvYT5EdW1wIGFmdGVyIHRoZSByZWdpc3RlciBtb3ZlIHBhc3MuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtc2NoZWQxPC9jb2RlPjxkdD48Y29kZT4tZmR1bXAtcnRsLXNjaGVkMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc2NoZWQxLTYzMyI+PC9hPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZHNjaGVkMi02MzQiPjwvYT48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLXNjaGVkMTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLXNjaGVkMjwvc3Bhbj48L3NhbXA+IGVuYWJsZSBkdW1waW5nCithZnRlciB0aGUgYmFzaWMgYmxvY2sgc2NoZWR1bGluZyBwYXNzZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtc2VlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzZWUtNjM1Ij48L2E+RHVtcCBhZnRlciBzaWduIGV4dGVuc2lvbiBlbGltaW5hdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1zZXFhYnN0cjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc2VxYWJzdHItNjM2Ij48L2E+RHVtcCBhZnRlciBjb21tb24gc2VxdWVuY2UgZGlzY292ZXJ5LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLXNob3J0ZW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZHNob3J0ZW4tNjM3Ij48L2E+RHVtcCBhZnRlciBzaG9ydGVuaW5nIGJyYW5jaGVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLXNpYmxpbmc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZHNpYmxpbmctNjM4Ij48L2E+RHVtcCBhZnRlciBzaWJsaW5nIGNhbGwgb3B0aW1pemF0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1zcGxpdDE8L2NvZGU+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtc3BsaXQyPC9jb2RlPjxkdD48Y29kZT4tZmR1bXAtcnRsLXNwbGl0MzwvY29kZT48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1zcGxpdDQ8L2NvZGU+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtc3BsaXQ1PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzcGxpdDEtNjM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc3BsaXQyLTY0MCI+PC9hPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZHNwbGl0My02NDEiPjwvYT48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzcGxpdDQtNjQyIj48L2E+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc3BsaXQ1LTY0MyI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtc3BsaXQxPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtc3BsaXQyPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLXNwbGl0Mzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLXNwbGl0NDwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1zcGxpdDU8L3NwYW4+PC9zYW1wPiBlbmFibGUgZHVtcGluZyBhZnRlciBmaXZlIHJvdW5kcyBvZgoraW5zdHJ1Y3Rpb24gc3BsaXR0aW5nLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLXNtczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc21zLTY0NCI+PC9hPkR1bXAgYWZ0ZXIgbW9kdWxvIHNjaGVkdWxpbmcuICBUaGlzIHBhc3MgaXMgb25seSBydW4gb24gc29tZQorYXJjaGl0ZWN0dXJlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1zdGFjazwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc3RhY2stNjQ1Ij48L2E+RHVtcCBhZnRlciBjb252ZXJzaW9uIGZyb20gR0NDJ3MgJmxkcXVvO2ZsYXQgcmVnaXN0ZXIgZmlsZSZyZHF1bzsgcmVnaXN0ZXJzIHRvIHRoZQoreDg3J3Mgc3RhY2stbGlrZSByZWdpc3RlcnMuICBUaGlzIHBhc3MgaXMgb25seSBydW4gb24geDg2IHZhcmlhbnRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLXN1YnJlZzE8L2NvZGU+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtc3VicmVnMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc3VicmVnMS02NDYiPjwvYT48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzdWJyZWcyLTY0NyI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtc3VicmVnMTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLXN1YnJlZzI8L3NwYW4+PC9zYW1wPiBlbmFibGUgZHVtcGluZyBhZnRlcgordGhlIHR3byBzdWJyZWcgZXhwYW5zaW9uIHBhc3Nlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC11bnNoYXJlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmR1bnNoYXJlLTY0OCI+PC9hPkR1bXAgYWZ0ZXIgYWxsIHJ0bCBoYXMgYmVlbiB1bnNoYXJlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC12YXJ0cmFjazwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkdmFydHJhY2stNjQ5Ij48L2E+RHVtcCBhZnRlciB2YXJpYWJsZSB0cmFja2luZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC12cmVnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkdnJlZ3MtNjUwIj48L2E+RHVtcCBhZnRlciBjb252ZXJ0aW5nIHZpcnR1YWwgcmVnaXN0ZXJzIHRvIGhhcmQgcmVnaXN0ZXJzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtcnRsLXdlYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkd2ViLTY1MSI+PC9hPkR1bXAgYWZ0ZXIgbGl2ZSByYW5nZSBzcGxpdHRpbmcuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtcmVnY2xhc3M8L2NvZGU+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtc3VicmVnc19vZl9tb2RlX2luaXQ8L2NvZGU+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtc3VicmVnc19vZl9tb2RlX2ZpbmlzaDwvY29kZT48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1kZmluaXQ8L2NvZGU+PGR0Pjxjb2RlPi1mZHVtcC1ydGwtZGZpbmlzaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkcmVnY2xhc3MtNjUyIj48L2E+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc3VicmVnc18wMDVmb2ZfMDA1Zm1vZGVfMDA1ZmluaXQtNjUzIj48L2E+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc3VicmVnc18wMDVmb2ZfMDA1Zm1vZGVfMDA1ZmZpbmlzaC02NTQiPjwvYT48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRkZmluaXQtNjU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkZGZpbmlzaC02NTYiPjwvYT5UaGVzZSBkdW1wcyBhcmUgZGVmaW5lZCBidXQgYWx3YXlzIHByb2R1Y2UgZW1wdHkgZmlsZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1kYTwvY29kZT48ZHQ+PGNvZGU+LWZkdW1wLXJ0bC1hbGw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWRhLTY1NyI+PC9hPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRydGxfMDAyZGFsbC02NTgiPjwvYT5Qcm9kdWNlIGFsbCB0aGUgZHVtcHMgbGlzdGVkIGFib3ZlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZEE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWRBLTY1OSI+PC9hPkFubm90YXRlIHRoZSBhc3NlbWJsZXIgb3V0cHV0IHdpdGggbWlzY2VsbGFuZW91cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1kRDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZEQtNjYwIj48L2E+RHVtcCBhbGwgbWFjcm8gZGVmaW5pdGlvbnMsIGF0IHRoZSBlbmQgb2YgcHJlcHJvY2Vzc2luZywgaW4gYWRkaXRpb24gdG8KK25vcm1hbCBvdXRwdXQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1kSDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZEgtNjYxIj48L2E+UHJvZHVjZSBhIGNvcmUgZHVtcCB3aGVuZXZlciBhbiBlcnJvciBvY2N1cnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1kcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZHAtNjYyIj48L2E+QW5ub3RhdGUgdGhlIGFzc2VtYmxlciBvdXRwdXQgd2l0aCBhIGNvbW1lbnQgaW5kaWNhdGluZyB3aGljaAorcGF0dGVybiBhbmQgYWx0ZXJuYXRpdmUgaXMgdXNlZC4gIFRoZSBsZW5ndGggb2YgZWFjaCBpbnN0cnVjdGlvbiBpcworYWxzbyBwcmludGVkLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZFA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWRQLTY2MyI+PC9hPkR1bXAgdGhlIFJUTCBpbiB0aGUgYXNzZW1ibGVyIG91dHB1dCBhcyBhIGNvbW1lbnQgYmVmb3JlIGVhY2ggaW5zdHJ1Y3Rpb24uIAorQWxzbyB0dXJucyBvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZHA8L3NwYW4+PC9zYW1wPiBhbm5vdGF0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tZHg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWR4LTY2NCI+PC9hPkp1c3QgZ2VuZXJhdGUgUlRMIGZvciBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgY29tcGlsaW5nIGl0LiAgVXN1YWxseSB1c2VkCit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1ydGwtZXhwYW5kPC9zcGFuPjwvc2FtcD4uIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1ub2FkZHI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRub2FkZHItNjY1Ij48L2E+V2hlbiBkb2luZyBkZWJ1Z2dpbmcgZHVtcHMsIHN1cHByZXNzIGFkZHJlc3Mgb3V0cHV0LiAgVGhpcyBtYWtlcyBpdCBtb3JlCitmZWFzaWJsZSB0byB1c2UgZGlmZiBvbiBkZWJ1Z2dpbmcgZHVtcHMgZm9yIGNvbXBpbGVyIGludm9jYXRpb25zIHdpdGgKK2RpZmZlcmVudCBjb21waWxlciBiaW5hcmllcyBhbmQvb3IgZGlmZmVyZW50Cit0ZXh0IC8gYnNzIC8gZGF0YSAvIGhlYXAgLyBzdGFjayAvIGRzbyBzdGFydCBsb2NhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtdW5udW1iZXJlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHVubnVtYmVyZWQtNjY2Ij48L2E+V2hlbiBkb2luZyBkZWJ1Z2dpbmcgZHVtcHMsIHN1cHByZXNzIGluc3RydWN0aW9uIG51bWJlcnMgYW5kIGFkZHJlc3Mgb3V0cHV0LiAKK1RoaXMgbWFrZXMgaXQgbW9yZSBmZWFzaWJsZSB0byB1c2UgZGlmZiBvbiBkZWJ1Z2dpbmcgZHVtcHMgZm9yIGNvbXBpbGVyCitpbnZvY2F0aW9ucyB3aXRoIGRpZmZlcmVudCBvcHRpb25zLCBpbiBwYXJ0aWN1bGFyIHdpdGggYW5kIHdpdGhvdXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtdW5udW1iZXJlZC1saW5rczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHVubnVtYmVyZWRfMDAyZGxpbmtzLTY2NyI+PC9hPldoZW4gZG9pbmcgZGVidWdnaW5nIGR1bXBzIChzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gYWJvdmUpLCBzdXBwcmVzcworaW5zdHJ1Y3Rpb24gbnVtYmVycyBmb3IgdGhlIGxpbmtzIHRvIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBpbnN0cnVjdGlvbnMKK2luIGEgc2VxdWVuY2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtdHJhbnNsYXRpb24tdW5pdCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQysrIG9ubHkpPC9zcGFuPjxkdD48Y29kZT4tZmR1bXAtdHJhbnNsYXRpb24tdW5pdC08L2NvZGU+PHZhcj5vcHRpb25zPC92YXI+IDxzcGFuIGNsYXNzPSJyb21hbiI+KEMrKyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyYW5zbGF0aW9uXzAwMmR1bml0LTY2OCI+PC9hPkR1bXAgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgZm9yIHRoZSBlbnRpcmUgdHJhbnNsYXRpb24KK3VuaXQgdG8gYSBmaWxlLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LnR1PC9zcGFuPjwvc2FtcD4gdG8gdGhlCitzb3VyY2UgZmlsZSBuYW1lLCBhbmQgdGhlIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCitvdXRwdXQgZmlsZS4gIElmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi08L3NwYW4+PHZhcj5vcHRpb25zPC92YXI+PC9zYW1wPiZyc3F1bzsgZm9ybSBpcyB1c2VkLCA8dmFyPm9wdGlvbnM8L3Zhcj4KK2NvbnRyb2xzIHRoZSBkZXRhaWxzIG9mIHRoZSBkdW1wIGFzIGRlc2NyaWJlZCBmb3IgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtdHJlZTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtY2xhc3MtaGllcmFyY2h5IDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDKysgb25seSk8L3NwYW4+PGR0Pjxjb2RlPi1mZHVtcC1jbGFzcy1oaWVyYXJjaHktPC9jb2RlPjx2YXI+b3B0aW9uczwvdmFyPiA8c3BhbiBjbGFzcz0icm9tYW4iPihDKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRjbGFzc18wMDJkaGllcmFyY2h5LTY2OSI+PC9hPkR1bXAgYSByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGNsYXNzJ3MgaGllcmFyY2h5IGFuZCB2aXJ0dWFsIGZ1bmN0aW9uCit0YWJsZSBsYXlvdXQgdG8gYSBmaWxlLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZworPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5jbGFzczwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLCBhbmQgdGhlIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUKK3NhbWUgZGlyZWN0b3J5IGFzIHRoZSBvdXRwdXQgZmlsZS4gIElmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi08L3NwYW4+PHZhcj5vcHRpb25zPC92YXI+PC9zYW1wPiZyc3F1bzsgZm9ybQoraXMgdXNlZCwgPHZhcj5vcHRpb25zPC92YXI+IGNvbnRyb2xzIHRoZSBkZXRhaWxzIG9mIHRoZSBkdW1wIGFzIGRlc2NyaWJlZAorZm9yIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtdHJlZTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmR1bXAtaXBhLTwvY29kZT48dmFyPnN3aXRjaDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkaXBhLTY3MCI+PC9hPkNvbnRyb2wgdGhlIGR1bXBpbmcgYXQgdmFyaW91cyBzdGFnZXMgb2YgaW50ZXItcHJvY2VkdXJhbCBhbmFseXNpcworbGFuZ3VhZ2UgdHJlZSB0byBhIGZpbGUuICBUaGUgZmlsZSBuYW1lIGlzIGdlbmVyYXRlZCBieSBhcHBlbmRpbmcgYQorc3dpdGNoIHNwZWNpZmljIHN1ZmZpeCB0byB0aGUgc291cmNlIGZpbGUgbmFtZSwgYW5kIHRoZSBmaWxlIGlzIGNyZWF0ZWQKK2luIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3V0cHV0IGZpbGUuICBUaGUgZm9sbG93aW5nIGR1bXBzIGFyZQorcG9zc2libGU6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlcyBhbGwgaW50ZXItcHJvY2VkdXJhbCBhbmFseXNpcyBkdW1wcy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jZ3JhcGg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RHVtcHMgaW5mb3JtYXRpb24gYWJvdXQgY2FsbC1ncmFwaCBvcHRpbWl6YXRpb24sIHVudXNlZCBmdW5jdGlvbiByZW1vdmFsLAorYW5kIGlubGluaW5nIGRlY2lzaW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbmxpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RHVtcCBhZnRlciBmdW5jdGlvbiBpbmxpbmluZy4KKworICAgICA8L2RsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXBhc3NlczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHBhc3Nlcy02NzEiPjwvYT5EdW1wIHRoZSBsaXN0IG9mIG9wdGltaXphdGlvbiBwYXNzZXMgdGhhdCBhcmUgdHVybmVkIG9uIGFuZCBvZmYgYnkKK3RoZSBjdXJyZW50IGNvbW1hbmQtbGluZSBvcHRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXN0YXRpc3RpY3MtPC9jb2RlPjx2YXI+b3B0aW9uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmRzdGF0aXN0aWNzLTY3MiI+PC9hPkVuYWJsZSBhbmQgY29udHJvbCBkdW1waW5nIG9mIHBhc3Mgc3RhdGlzdGljcyBpbiBhIHNlcGFyYXRlIGZpbGUuICBUaGUKK2ZpbGUgbmFtZSBpcyBnZW5lcmF0ZWQgYnkgYXBwZW5kaW5nIGEgc3VmZml4IGVuZGluZyBpbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3RhdGlzdGljczwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byB0aGUgc291cmNlIGZpbGUgbmFtZSwgYW5kIHRoZSBmaWxlIGlzIGNyZWF0ZWQgaW4KK3RoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3V0cHV0IGZpbGUuICBJZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tPC9zcGFuPjx2YXI+b3B0aW9uPC92YXI+PC9zYW1wPiZyc3F1bzsKK2Zvcm0gaXMgdXNlZCwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tc3RhdHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2F1c2VzIGNvdW50ZXJzIHRvIGJlIHN1bW1lZCBvdmVyIHRoZQord2hvbGUgY29tcGlsYXRpb24gdW5pdCB3aGlsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1kZXRhaWxzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGR1bXBzIGV2ZXJ5IGV2ZW50IGFzCit0aGUgcGFzc2VzIGdlbmVyYXRlIHRoZW0uICBUaGUgZGVmYXVsdCB3aXRoIG5vIG9wdGlvbiBpcyB0byBzdW0KK2NvdW50ZXJzIGZvciBlYWNoIGZ1bmN0aW9uIGNvbXBpbGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLXRyZWUtPC9jb2RlPjx2YXI+c3dpdGNoPC92YXI+PGR0Pjxjb2RlPi1mZHVtcC10cmVlLTwvY29kZT48dmFyPnN3aXRjaDwvdmFyPjxjb2RlPi08L2NvZGU+PHZhcj5vcHRpb25zPC92YXI+PGR0Pjxjb2RlPi1mZHVtcC10cmVlLTwvY29kZT48dmFyPnN3aXRjaDwvdmFyPjxjb2RlPi08L2NvZGU+PHZhcj5vcHRpb25zPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlLTY3MyI+PC9hPkNvbnRyb2wgdGhlIGR1bXBpbmcgYXQgdmFyaW91cyBzdGFnZXMgb2YgcHJvY2Vzc2luZyB0aGUgaW50ZXJtZWRpYXRlCitsYW5ndWFnZSB0cmVlIHRvIGEgZmlsZS4gIFRoZSBmaWxlIG5hbWUgaXMgZ2VuZXJhdGVkIGJ5IGFwcGVuZGluZyBhCitzd2l0Y2gtc3BlY2lmaWMgc3VmZml4IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLCBhbmQgdGhlIGZpbGUgaXMKK2NyZWF0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBvdXRwdXQgZmlsZS4gSW4gY2FzZSBvZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+PTwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPiBvcHRpb24sIHRoZSBkdW1wIGlzIG91dHB1dCBvbiB0aGUgZ2l2ZW4gZmlsZQoraW5zdGVhZCBvZiB0aGUgYXV0byBuYW1lZCBkdW1wIGZpbGVzLiAgSWYgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTwvc3Bhbj48dmFyPm9wdGlvbnM8L3Zhcj48L3NhbXA+JnJzcXVvOworZm9ybSBpcyB1c2VkLCA8dmFyPm9wdGlvbnM8L3Zhcj4gaXMgYSBsaXN0IG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZXBhcmF0ZWQgb3B0aW9ucword2hpY2ggY29udHJvbCB0aGUgZGV0YWlscyBvZiB0aGUgZHVtcC4gIE5vdCBhbGwgb3B0aW9ucyBhcmUgYXBwbGljYWJsZQordG8gYWxsIGR1bXBzOyB0aG9zZSB0aGF0IGFyZSBub3QgbWVhbmluZ2Z1bCBhcmUgaWdub3JlZC4gIFRoZQorZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZQorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWRkcmVzczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5QcmludCB0aGUgYWRkcmVzcyBvZiBlYWNoIG5vZGUuICBVc3VhbGx5IHRoaXMgaXMgbm90IG1lYW5pbmdmdWwgYXMgaXQKK2NoYW5nZXMgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudCBhbmQgc291cmNlIGZpbGUuICBJdHMgcHJpbWFyeSB1c2UKK2lzIGZvciB0eWluZyB1cCBhIGR1bXAgZmlsZSB3aXRoIGEgZGVidWcgZW52aXJvbm1lbnQuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFzbW5hbWU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SWYgPGNvZGU+REVDTF9BU1NFTUJMRVJfTkFNRTwvY29kZT4gaGFzIGJlZW4gc2V0IGZvciBhIGdpdmVuIGRlY2wsIHVzZSB0aGF0CitpbiB0aGUgZHVtcCBpbnN0ZWFkIG9mIDxjb2RlPkRFQ0xfTkFNRTwvY29kZT4uICBJdHMgcHJpbWFyeSB1c2UgaXMgZWFzZSBvZgordXNlIHdvcmtpbmcgYmFja3dhcmQgZnJvbSBtYW5nbGVkIG5hbWVzIGluIHRoZSBhc3NlbWJseSBmaWxlLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zbGltPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPldoZW4gZHVtcGluZyBmcm9udC1lbmQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9ucywgaW5oaWJpdCBkdW1waW5nCitvZiBtZW1iZXJzIG9mIGEgc2NvcGUgb3IgYm9keSBvZiBhIGZ1bmN0aW9uIG1lcmVseSBiZWNhdXNlIHRoYXQgc2NvcGUKK2hhcyBiZWVuIHJlYWNoZWQuICBPbmx5IGR1bXAgc3VjaCBpdGVtcyB3aGVuIHRoZXkgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZQorYnkgc29tZSBvdGhlciBwYXRoLgorCisgICAgICAgICAgPHA+V2hlbiBkdW1waW5nIHByZXR0eS1wcmludGVkIHRyZWVzLCB0aGlzIG9wdGlvbiBpbmhpYml0cyBkdW1waW5nIHRoZQorYm9kaWVzIG9mIGNvbnRyb2wgc3RydWN0dXJlcy4KKworICAgICAgICAgIDxwPldoZW4gZHVtcGluZyBSVEwsIHByaW50IHRoZSBSVEwgaW4gc2xpbSAoY29uZGVuc2VkKSBmb3JtIGluc3RlYWQgb2YKK3RoZSBkZWZhdWx0IExJU1AtbGlrZSByZXByZXNlbnRhdGlvbi4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmF3PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlByaW50IGEgcmF3IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmVlLiAgQnkgZGVmYXVsdCwgdHJlZXMgYXJlCitwcmV0dHktcHJpbnRlZCBpbnRvIGEgQy1saWtlIHJlcHJlc2VudGF0aW9uLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kZXRhaWxzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBtb3JlIGRldGFpbGVkIGR1bXBzIChub3QgaG9ub3JlZCBieSBldmVyeSBkdW1wIG9wdGlvbikuIEFsc28KK2luY2x1ZGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3B0aW1pemF0aW9uIHBhc3Nlcy4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RhdHM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlIGR1bXBpbmcgdmFyaW91cyBzdGF0aXN0aWNzIGFib3V0IHRoZSBwYXNzIChub3QgaG9ub3JlZCBieSBldmVyeSBkdW1wCitvcHRpb24pLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ibG9ja3M8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlIHNob3dpbmcgYmFzaWMgYmxvY2sgYm91bmRhcmllcyAoZGlzYWJsZWQgaW4gcmF3IGR1bXBzKS4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z3JhcGg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Rm9yIGVhY2ggb2YgdGhlIG90aGVyIGluZGljYXRlZCBkdW1wIGZpbGVzICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLTwvc3Bhbj48dmFyPnBhc3M8L3Zhcj48L3NhbXA+KSwKK2R1bXAgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbCBmbG93IGdyYXBoIHN1aXRhYmxlIGZvciB2aWV3aW5nIHdpdGgKK0dyYXBoVml6IHRvIDxzYW1wPjx2YXI+ZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uPC9zcGFuPjx2YXI+cGFzc2lkPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi48L3NwYW4+PHZhcj5wYXNzPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi5kb3Q8L3NwYW4+PC9zYW1wPi4gIEVhY2ggZnVuY3Rpb24gaW4KK3RoZSBmaWxlIGlzIHByZXR0eS1wcmludGVkIGFzIGEgc3ViZ3JhcGgsIHNvIHRoYXQgR3JhcGhWaXogY2FuIHJlbmRlciB0aGVtCithbGwgaW4gYSBzaW5nbGUgcGxvdC4KKworICAgICAgICAgIDxwPlRoaXMgb3B0aW9uIGN1cnJlbnRseSBvbmx5IHdvcmtzIGZvciBSVEwgZHVtcHMsIGFuZCB0aGUgUlRMIGlzIGFsd2F5cworZHVtcGVkIGluIHNsaW0gZm9ybS4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dm9wczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FbmFibGUgc2hvd2luZyB2aXJ0dWFsIG9wZXJhbmRzIGZvciBldmVyeSBzdGF0ZW1lbnQuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxpbmVubzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FbmFibGUgc2hvd2luZyBsaW5lIG51bWJlcnMgZm9yIHN0YXRlbWVudHMuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVpZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FbmFibGUgc2hvd2luZyB0aGUgdW5pcXVlIElEICg8Y29kZT5ERUNMX1VJRDwvY29kZT4pIGZvciBlYWNoIHZhcmlhYmxlLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52ZXJib3NlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBzaG93aW5nIHRoZSB0cmVlIGR1bXAgZm9yIGVhY2ggc3RhdGVtZW50LiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5laDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FbmFibGUgc2hvd2luZyB0aGUgRUggcmVnaW9uIG51bWJlciBob2xkaW5nIGVhY2ggc3RhdGVtZW50LiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zY2V2PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBzaG93aW5nIHNjYWxhciBldm9sdXRpb24gYW5hbHlzaXMgZGV0YWlscy4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b3B0aW1pemVkPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBzaG93aW5nIG9wdGltaXphdGlvbiBpbmZvcm1hdGlvbiAob25seSBhdmFpbGFibGUgaW4gY2VydGFpbgorcGFzc2VzKS4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlzc2VkPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBzaG93aW5nIG1pc3NlZCBvcHRpbWl6YXRpb24gaW5mb3JtYXRpb24gKG9ubHkgYXZhaWxhYmxlIGluIGNlcnRhaW4KK3Bhc3NlcykuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vdGVzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBvdGhlciBkZXRhaWxlZCBvcHRpbWl6YXRpb24gaW5mb3JtYXRpb24gKG9ubHkgYXZhaWxhYmxlIGluCitjZXJ0YWluIHBhc3NlcykuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj08L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD4mcnNxdW87PGRkPkluc3RlYWQgb2YgYW4gYXV0byBuYW1lZCBkdW1wIGZpbGUsIG91dHB1dCBpbnRvIHRoZSBnaXZlbiBmaWxlCituYW1lLiBUaGUgZmlsZSBuYW1lcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3Rkb3V0PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdGRlcnI8L3NwYW4+PC9zYW1wPiBhcmUgdHJlYXRlZAorc3BlY2lhbGx5IGFuZCBhcmUgY29uc2lkZXJlZCBhbHJlYWR5IG9wZW4gc3RhbmRhcmQgc3RyZWFtcy4gRm9yCitleGFtcGxlLAorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICBnY2MgLU8yIC1mdHJlZS12ZWN0b3JpemUgLWZkdW1wLXRyZWUtdmVjdC1ibG9ja3M9Zm9vLmR1bXAKKyAgICAgICAgICAgICAgICAgICAgLWZkdW1wLXRyZWUtcHJlPXN0ZGVyciBmaWxlLmMKKzwvcHJlPgorICAgICAgICAgIDxwPm91dHB1dHMgdmVjdG9yaXplciBkdW1wIGludG8gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5kdW1wPC9zcGFuPjwvc2FtcD4sIHdoaWxlIHRoZSBQUkUgZHVtcCBpcworb3V0cHV0IG9uIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdGRlcnI8L3NwYW4+PC9zYW1wPi4gSWYgdHdvIGNvbmZsaWN0aW5nIGR1bXAgZmlsZW5hbWVzIGFyZQorZ2l2ZW4gZm9yIHRoZSBzYW1lIHBhc3MsIHRoZW4gdGhlIGxhdHRlciBvcHRpb24gb3ZlcnJpZGVzIHRoZSBlYXJsaWVyCitvbmUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlR1cm4gb24gYWxsIG9wdGlvbnMsIGV4Y2VwdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5yYXc8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+c2xpbTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj52ZXJib3NlPC9zcGFuPjwvc2FtcD4KK2FuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5saW5lbm88L3NwYW4+PC9zYW1wPi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcHRhbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VHVybiBvbiBhbGwgb3B0aW1pemF0aW9uIG9wdGlvbnMsIGkuZS4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPm9wdGltaXplZDwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+bWlzc2VkPC9zcGFuPjwvc2FtcD4sIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5ub3RlPC9zcGFuPjwvc2FtcD4uIAorPC9kbD4KKworICAgICA8cD5UaGUgZm9sbG93aW5nIHRyZWUgZHVtcHMgYXJlIHBvc3NpYmxlOgorICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9yaWdpbmFsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRvcmlnaW5hbC02NzQiPjwvYT5EdW1wIGJlZm9yZSBhbnkgdHJlZSBiYXNlZCBvcHRpbWl6YXRpb24sIHRvIDxzYW1wPjx2YXI+ZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4ub3JpZ2luYWw8L3NwYW4+PC9zYW1wPi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcHRpbWl6ZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZG9wdGltaXplZC02NzUiPjwvYT5EdW1wIGFmdGVyIGFsbCB0cmVlIGJhc2VkIG9wdGltaXphdGlvbiwgdG8gPHNhbXA+PHZhcj5maWxlPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi5vcHRpbWl6ZWQ8L3NwYW4+PC9zYW1wPi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5naW1wbGU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGdpbXBsZS02NzYiPjwvYT5EdW1wIGVhY2ggZnVuY3Rpb24gYmVmb3JlIGFuZCBhZnRlciB0aGUgZ2ltcGxpZmljYXRpb24gcGFzcyB0byBhIGZpbGUuICBUaGUKK2ZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmdpbXBsZTwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNmZzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkY2ZnLTY3NyI+PC9hPkR1bXAgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCBvZiBlYWNoIGZ1bmN0aW9uIHRvIGEgZmlsZS4gIFRoZSBmaWxlIG5hbWUgaXMKK21hZGUgYnkgYXBwZW5kaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uY2ZnPC9zcGFuPjwvc2FtcD4gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2g8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGNoLTY3OCI+PC9hPkR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBjb3B5aW5nIGxvb3AgaGVhZGVycy4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZSBieQorYXBwZW5kaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uY2g8L3NwYW4+PC9zYW1wPiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc2E8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZHNzYS02NzkiPjwvYT5EdW1wIFNTQSByZWxhdGVkIGluZm9ybWF0aW9uIHRvIGEgZmlsZS4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uc3NhPC9zcGFuPjwvc2FtcD4gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWxpYXM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGFsaWFzLTY4MCI+PC9hPkR1bXAgYWxpYXNpbmcgaW5mb3JtYXRpb24gZm9yIGVhY2ggZnVuY3Rpb24uICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkKK2FwcGVuZGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmFsaWFzPC9zcGFuPjwvc2FtcD4gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2NwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRjY3AtNjgxIj48L2E+RHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIENDUC4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uY2NwPC9zcGFuPjwvc2FtcD4gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RvcmVjY3A8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZHN0b3JlY2NwLTY4MiI+PC9hPkR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBTVE9SRS1DQ1AuICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LnN0b3JlY2NwPC9zcGFuPjwvc2FtcD4gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cHJlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRwcmUtNjgzIj48L2E+RHVtcCB0cmVlcyBhZnRlciBwYXJ0aWFsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24uICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUKK2J5IGFwcGVuZGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LnByZTwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZyZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkZnJlLTY4NCI+PC9hPkR1bXAgdHJlZXMgYWZ0ZXIgZnVsbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlCitieSBhcHBlbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5mcmU8L3NwYW4+PC9zYW1wPiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3B5cHJvcDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkY29weXByb3AtNjg1Ij48L2E+RHVtcCB0cmVlcyBhZnRlciBjb3B5IHByb3BhZ2F0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlCitieSBhcHBlbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5jb3B5cHJvcDwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0b3JlX2NvcHlwcm9wPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRzdG9yZV8wMDVmY29weXByb3AtNjg2Ij48L2E+RHVtcCB0cmVlcyBhZnRlciBzdG9yZSBjb3B5LXByb3BhZ2F0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlCitieSBhcHBlbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5zdG9yZV9jb3B5cHJvcDwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRjZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkZGNlLTY4NyI+PC9hPkR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBkZWFkIGNvZGUgZWxpbWluYXRpb24uICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkKK2FwcGVuZGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmRjZTwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11ZGZsYXA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZG11ZGZsYXAtNjg4Ij48L2E+RHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIGFkZGluZyBtdWRmbGFwIGluc3RydW1lbnRhdGlvbi4gIFRoZSBmaWxlIG5hbWUgaXMKK21hZGUgYnkgYXBwZW5kaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4ubXVkZmxhcDwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNyYTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkc3JhLTY4OSI+PC9hPkR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBwZXJmb3JtaW5nIHNjYWxhciByZXBsYWNlbWVudCBvZiBhZ2dyZWdhdGVzLiAgVGhlCitmaWxlIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5zcmE8L3NwYW4+PC9zYW1wPiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zaW5rPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRzaW5rLTY5MCI+PC9hPkR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBwZXJmb3JtaW5nIGNvZGUgc2lua2luZy4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZQorYnkgYXBwZW5kaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uc2luazwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRvbTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkZG9tLTY5MSI+PC9hPkR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyBkb21pbmF0b3IgdHJlZSBvcHRpbWl6YXRpb25zLiAgVGhlIGZpbGUKK25hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5kb208L3NwYW4+PC9zYW1wPiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kc2U8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGRzZS02OTIiPjwvYT5EdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgYXBwbHlpbmcgZGVhZCBzdG9yZSBlbGltaW5hdGlvbi4gIFRoZSBmaWxlCituYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZHNlPC9zcGFuPjwvc2FtcD4gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cGhpb3B0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRwaGlvcHQtNjkzIj48L2E+RHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIG9wdGltaXppbmcgUEhJIG5vZGVzIGludG8gc3RyYWlnaHRsaW5lIGNvZGUuICBUaGUgZmlsZQorbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LnBoaW9wdDwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvcndwcm9wPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRmb3J3cHJvcC02OTQiPjwvYT5EdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgZm9yd2FyZCBwcm9wYWdhdGluZyBzaW5nbGUgdXNlIHZhcmlhYmxlcy4gIFRoZSBmaWxlCituYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZm9yd3Byb3A8L3NwYW4+PC9zYW1wPiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3B5cmVuYW1lPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRjb3B5cmVuYW1lLTY5NSI+PC9hPkR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyB0aGUgY29weSByZW5hbWUgb3B0aW1pemF0aW9uLiAgVGhlIGZpbGUKK25hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5jb3B5cmVuYW1lPC9zcGFuPjwvc2FtcD4gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bnJ2PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRucnYtNjk2Ij48L2E+RHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIGFwcGx5aW5nIHRoZSBuYW1lZCByZXR1cm4gdmFsdWUgb3B0aW1pemF0aW9uIG9uCitnZW5lcmljIHRyZWVzLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Lm5ydjwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UKK2ZpbGUgbmFtZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52ZWN0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmR2ZWN0LTY5NyI+PC9hPkR1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyB2ZWN0b3JpemF0aW9uIG9mIGxvb3BzLiAgVGhlIGZpbGUgbmFtZSBpcworbWFkZSBieSBhcHBlbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi52ZWN0PC9zcGFuPjwvc2FtcD4gdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2xwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRzbHAtNjk4Ij48L2E+RHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIGFwcGx5aW5nIHZlY3Rvcml6YXRpb24gb2YgYmFzaWMgYmxvY2tzLiAgVGhlIGZpbGUgbmFtZQoraXMgbWFkZSBieSBhcHBlbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5zbHA8L3NwYW4+PC9zYW1wPiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52cnA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZHZycC02OTkiPjwvYT5EdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgVmFsdWUgUmFuZ2UgUHJvcGFnYXRpb24gKFZSUCkuICBUaGUgZmlsZSBuYW1lCitpcyBtYWRlIGJ5IGFwcGVuZGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LnZycDwvc3Bhbj48L3NhbXA+IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkYWxsLTcwMCI+PC9hPkVuYWJsZSBhbGwgdGhlIGF2YWlsYWJsZSB0cmVlIGR1bXBzIHdpdGggdGhlIGZsYWdzIHByb3ZpZGVkIGluIHRoaXMgb3B0aW9uLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm9wdC1pbmZvPC9jb2RlPjxkdD48Y29kZT4tZm9wdC1pbmZvLTwvY29kZT48dmFyPm9wdGlvbnM8L3Zhcj48ZHQ+PGNvZGU+LWZvcHQtaW5mby08L2NvZGU+PHZhcj5vcHRpb25zPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZvcHRfMDAyZGluZm8tNzAxIj48L2E+Q29udHJvbHMgb3B0aW1pemF0aW9uIGR1bXBzIGZyb20gdmFyaW91cyBvcHRpbWl6YXRpb24gcGFzc2VzLiBJZiB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTwvc3Bhbj48dmFyPm9wdGlvbnM8L3Zhcj48L3NhbXA+JnJzcXVvOyBmb3JtIGlzIHVzZWQsIDx2YXI+b3B0aW9uczwvdmFyPiBpcyBhIGxpc3Qgb2YKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZXBhcmF0ZWQgb3B0aW9ucyB0byBzZWxlY3QgdGhlIGR1bXAgZGV0YWlscyBhbmQKK29wdGltaXphdGlvbnMuICBJZiA8dmFyPm9wdGlvbnM8L3Zhcj4gaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmFsbDwvc3Bhbj48L3NhbXA+IGZvciBkZXRhaWxzIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5vcHRhbGw8L3NwYW4+PC9zYW1wPiBmb3Igb3B0aW1pemF0aW9uCitncm91cHMuIElmIHRoZSA8dmFyPmZpbGVuYW1lPC92YXI+IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkZXJyPC9zcGFuPjwvc2FtcD4uIE5vdGUgdGhhdCB0aGUgb3V0cHV0IDx2YXI+ZmlsZW5hbWU8L3Zhcj4gd2lsbCBiZSBvdmVyd3JpdHRlbgoraW4gY2FzZSBvZiBtdWx0aXBsZSB0cmFuc2xhdGlvbiB1bml0cy4gSWYgYSBjb21iaW5lZCBvdXRwdXQgZnJvbQorbXVsdGlwbGUgdHJhbnNsYXRpb24gdW5pdHMgaXMgZGVzaXJlZCwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGVycjwvc3Bhbj48L3NhbXA+IHNob3VsZCBiZSB1c2VkCitpbnN0ZWFkLgorCisgICAgIDxwPlRoZSBvcHRpb25zIGNhbiBiZSBkaXZpZGVkIGludG8gdHdvIGdyb3VwcywgMSkgb3B0aW9ucyBkZXNjcmliaW5nIHRoZQordmVyYm9zaXR5IG9mIHRoZSBkdW1wLCBhbmQgMikgb3B0aW9ucyBkZXNjcmliaW5nIHdoaWNoIG9wdGltaXphdGlvbnMKK3Nob3VsZCBiZSBpbmNsdWRlZC4gVGhlIG9wdGlvbnMgZnJvbSBib3RoIHRoZSBncm91cHMgY2FuIGJlIGZyZWVseQorbWl4ZWQgYXMgdGhleSBhcmUgbm9uLW92ZXJsYXBwaW5nLiBIb3dldmVyLCBpbiBjYXNlIG9mIGFueSBjb25mbGljdHMsCit0aGUgbGF0dGVyIG9wdGlvbnMgb3ZlcnJpZGUgdGhlIGVhcmxpZXIgb3B0aW9ucyBvbiB0aGUgY29tbWFuZAorbGluZS4gVGhvdWdoIG11bHRpcGxlIC1mb3B0LWluZm8gb3B0aW9ucyBhcmUgYWNjZXB0ZWQsIG9ubHkgb25lIG9mCit0aGVtIGNhbiBoYXZlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPj1maWxlbmFtZTwvc3Bhbj48L3NhbXA+LiBJZiBvdGhlciBmaWxlbmFtZXMgYXJlIHByb3ZpZGVkIHRoZW4KK2FsbCBidXQgdGhlIGZpcnN0IG9uZSBhcmUgaWdub3JlZC4KKworICAgICA8cD5UaGUgZHVtcCB2ZXJib3NpdHkgaGFzIHRoZSBmb2xsb3dpbmcgb3B0aW9ucworCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b3B0aW1pemVkPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlByaW50IGluZm9ybWF0aW9uIHdoZW4gYW4gb3B0aW1pemF0aW9uIGlzIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLiBJdCBpcwordXAgdG8gYSBwYXNzIHRvIGRlY2lkZSB3aGljaCBpbmZvcm1hdGlvbiBpcyByZWxldmFudC4gRm9yIGV4YW1wbGUsIHRoZQordmVjdG9yaXplciBwYXNzZXMgcHJpbnQgdGhlIHNvdXJjZSBsb2NhdGlvbiBvZiBsb29wcyB3aGljaCBnb3QKK3N1Y2Nlc3NmdWxseSB2ZWN0b3JpemVkLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXNzZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+UHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgbWlzc2VkIG9wdGltaXphdGlvbnMuIEluZGl2aWR1YWwgcGFzc2VzCitjb250cm9sIHdoaWNoIGluZm9ybWF0aW9uIHRvIGluY2x1ZGUgaW4gdGhlIG91dHB1dC4gRm9yIGV4YW1wbGUsCisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIGdjYyAtTzIgLWZ0cmVlLXZlY3Rvcml6ZSAtZm9wdC1pbmZvLXZlYy1taXNzZWQKKzwvcHJlPgorICAgICAgICAgIDxwPndpbGwgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgbWlzc2VkIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGZyb20KK3ZlY3Rvcml6YXRpb24gcGFzc2VzIG9uIHN0ZGVyci4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm90ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5QcmludCB2ZXJib3NlIGluZm9ybWF0aW9uIGFib3V0IG9wdGltaXphdGlvbnMsIHN1Y2ggYXMgY2VydGFpbgordHJhbnNmb3JtYXRpb25zLCBtb3JlIGRldGFpbGVkIG1lc3NhZ2VzIGFib3V0IGRlY2lzaW9ucyBldGMuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5QcmludCBkZXRhaWxlZCBvcHRpbWl6YXRpb24gaW5mb3JtYXRpb24uIFRoaXMgaW5jbHVkZXMKKzx2YXI+b3B0aW1pemVkPC92YXI+LCA8dmFyPm1pc3NlZDwvdmFyPiwgYW5kIDx2YXI+bm90ZTwvdmFyPi4gCis8L2RsPgorCisgICAgIDxwPlRoZSBzZWNvbmQgc2V0IG9mIG9wdGlvbnMgZGVzY3JpYmVzIGEgZ3JvdXAgb2Ygb3B0aW1pemF0aW9ucyBhbmQgbWF5CitpbmNsdWRlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcuCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pcGE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlIGR1bXBzIGZyb20gYWxsIGludGVycHJvY2VkdXJhbCBvcHRpbWl6YXRpb25zLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb29wPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBkdW1wcyBmcm9tIGFsbCBsb29wIG9wdGltaXphdGlvbnMuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlubGluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FbmFibGUgZHVtcHMgZnJvbSBhbGwgaW5saW5pbmcgb3B0aW1pemF0aW9ucy4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dmVjPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBkdW1wcyBmcm9tIGFsbCB2ZWN0b3JpemF0aW9uIG9wdGltaXphdGlvbnMuIAorPC9kbD4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZ2NjIC1PMyAtZm9wdC1pbmZvLW1pc3NlZD1taXNzZWQuYWxsCis8L3ByZT4KKyAgICAgPHA+b3V0cHV0cyBtaXNzZWQgb3B0aW1pemF0aW9uIHJlcG9ydCBmcm9tIGFsbCB0aGUgcGFzc2VzIGludG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5taXNzZWQuYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+QXMgYW5vdGhlciBleGFtcGxlLAorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBnY2MgLU8zIC1mb3B0LWluZm8taW5saW5lLW9wdGltaXplZC1taXNzZWQ9aW5saW5lLnR4dAorPC9wcmU+CisgICAgIDxwPndpbGwgb3V0cHV0IGluZm9ybWF0aW9uIGFib3V0IG1pc3NlZCBvcHRpbWl6YXRpb25zIGFzIHdlbGwgYXMKK29wdGltaXplZCBsb2NhdGlvbnMgZnJvbSBhbGwgdGhlIGlubGluaW5nIHBhc3NlcyBpbnRvCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+aW5saW5lLnR4dDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPklmIHRoZSA8dmFyPmZpbGVuYW1lPC92YXI+IGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBkdW1wcyBmcm9tIGFsbCB0aGUKK2FwcGxpY2FibGUgb3B0aW1pemF0aW9ucyBhcmUgY29uY2F0ZW5hdGVkIGludG8gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5maWxlbmFtZTwvc3Bhbj48L3NhbXA+LiAKK090aGVyd2lzZSB0aGUgZHVtcCBpcyBvdXRwdXQgb250byA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkZXJyPC9zcGFuPjwvc2FtcD4uIElmIDx2YXI+b3B0aW9uczwvdmFyPiBpcworb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+YWxsLW9wdGFsbDwvc3Bhbj48L3NhbXA+LCB3aGljaCBtZWFucyBkdW1wIGFsbAorYXZhaWxhYmxlIG9wdGltaXphdGlvbiBpbmZvIGZyb20gYWxsIHRoZSBwYXNzZXMuIEluIHRoZSBmb2xsb3dpbmcKK2V4YW1wbGUsIGFsbCBvcHRpbWl6YXRpb24gaW5mbyBpcyBvdXRwdXQgb24gdG8gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGVycjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGdjYyAtTzMgLWZvcHQtaW5mbworPC9wcmU+CisgICAgIDxwPk5vdGUgdGhhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9wdC1pbmZvLXZlYy1taXNzZWQ8L3NwYW4+PC9zYW1wPiBiZWhhdmVzIHRoZSBzYW1lIGFzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9wdC1pbmZvLW1pc3NlZC12ZWM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5BcyBhbm90aGVyIGV4YW1wbGUsIGNvbnNpZGVyCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZ2NjIC1mb3B0LWluZm8tdmVjLW1pc3NlZD12ZWMubWlzcyAtZm9wdC1pbmZvLWxvb3Atb3B0aW1pemVkPWxvb3Aub3B0Cis8L3ByZT4KKyAgICAgPHA+SGVyZSB0aGUgdHdvIG91dHB1dCBmaWxlbmFtZXMgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnZlYy5taXNzPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5sb29wLm9wdDwvc3Bhbj48L3NhbXA+IGFyZQoraW4gY29uZmxpY3Qgc2luY2Ugb25seSBvbmUgb3V0cHV0IGZpbGUgaXMgYWxsb3dlZC4gSW4gdGhpcyBjYXNlLCBvbmx5Cit0aGUgZmlyc3Qgb3B0aW9uIHRha2VzIGVmZmVjdCBhbmQgdGhlIHN1YnNlcXVlbnQgb3B0aW9ucyBhcmUKK2lnbm9yZWQuIFRodXMgb25seSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnZlYy5taXNzPC9zcGFuPjwvc2FtcD4gaXMgcHJvZHVjZWQgd2hpY2ggY290YWludHMKK2R1bXBzIGZyb20gdGhlIHZlY3Rvcml6ZXIgYWJvdXQgbWlzc2VkIG9wcG9ydHVuaXRpZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtdmVjdG9yaXplci12ZXJib3NlPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZHZlY3Rvcml6ZXJfMDAyZHZlcmJvc2UtNzAyIj48L2E+VGhpcyBvcHRpb24gaXMgZGVwcmVjYXRlZCBhbmQgaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mb3B0LWluZm88L3NwYW4+PC9zYW1wPi4gUGxlYXNlIHVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9wdC1pbmZvLTwvc3Bhbj48dmFyPmtpbmQ8L3Zhcj48L3NhbXA+IGZvcm0KK2luc3RlYWQsIHdoZXJlIDx2YXI+a2luZDwvdmFyPiBpcyBvbmUgb2YgdGhlIHZhbGlkIG9wdC1pbmZvIG9wdGlvbnMuIEl0CitwcmludHMgYWRkaXRpb25hbCBvcHRpbWl6YXRpb24gaW5mb3JtYXRpb24uICBGb3IgPHZhcj5uPC92YXI+PTAgbm8KK2RpYWdub3N0aWMgaW5mb3JtYXRpb24gaXMgcmVwb3J0ZWQuICBJZiA8dmFyPm48L3Zhcj49MSB0aGUgdmVjdG9yaXplcgorcmVwb3J0cyBlYWNoIGxvb3AgdGhhdCBnb3QgdmVjdG9yaXplZCwgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgbG9vcHMKK3RoYXQgZ290IHZlY3Rvcml6ZWQuICBJZiA8dmFyPm48L3Zhcj49MiB0aGUgdmVjdG9yaXplciByZXBvcnRzIGxvY2F0aW9ucword2hpY2ggY291bGQgbm90IGJlIHZlY3Rvcml6ZWQgYW5kIHRoZSByZWFzb25zIGZvciB0aG9zZS4gRm9yIGFueQoraGlnaGVyIHZlcmJvc2l0eSBsZXZlbHMgYWxsIHRoZSBhbmFseXNpcyBhbmQgdHJhbnNmb3JtYXRpb24KK2luZm9ybWF0aW9uIGZyb20gdGhlIHZlY3Rvcml6ZXIgaXMgcmVwb3J0ZWQuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBvdXRwdXQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ0cmVlLXZlY3Rvcml6ZXItdmVyYm9zZTwvc3Bhbj48L3NhbXA+CitvcHRpb24gaXMgc2VudCB0byA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkZXJyPC9zcGFuPjwvc2FtcD4uIElmIHRoZSBlcXVpdmFsZW50IGZvcm0KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mb3B0LWluZm8tPC9zcGFuPjx2YXI+b3B0aW9uczwvdmFyPjxzcGFuIGNsYXNzPSJvcHRpb24iPj08L3NwYW4+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD4gaXMgdXNlZCB0aGVuIHRoZQorb3V0cHV0IGlzIHNlbnQgaW50byA8dmFyPmZpbGVuYW1lPC92YXI+IGluc3RlYWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJhbmRvbS1zZWVkPTwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mcmFuZG9tXzAwMmRzZWVkLTcwMyI+PC9hPlRoaXMgb3B0aW9uIHByb3ZpZGVzIGEgc2VlZCB0aGF0IEdDQyB1c2VzIGluIHBsYWNlIG9mCityYW5kb20gbnVtYmVycyBpbiBnZW5lcmF0aW5nIGNlcnRhaW4gc3ltYm9sIG5hbWVzCit0aGF0IGhhdmUgdG8gYmUgZGlmZmVyZW50IGluIGV2ZXJ5IGNvbXBpbGVkIGZpbGUuICBJdCBpcyBhbHNvIHVzZWQgdG8KK3BsYWNlIHVuaXF1ZSBzdGFtcHMgaW4gY292ZXJhZ2UgZGF0YSBmaWxlcyBhbmQgdGhlIG9iamVjdCBmaWxlcyB0aGF0Citwcm9kdWNlIHRoZW0uICBZb3UgY2FuIHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyYW5kb20tc2VlZDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byBwcm9kdWNlCityZXByb2R1Y2libHkgaWRlbnRpY2FsIG9iamVjdCBmaWxlcy4KKworICAgICA8cD5UaGUgPHZhcj5zdHJpbmc8L3Zhcj4gc2hvdWxkIGJlIGRpZmZlcmVudCBmb3IgZXZlcnkgZmlsZSB5b3UgY29tcGlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2NoZWQtdmVyYm9zZT08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZzY2hlZF8wMDJkdmVyYm9zZS03MDQiPjwvYT5PbiB0YXJnZXRzIHRoYXQgdXNlIGluc3RydWN0aW9uIHNjaGVkdWxpbmcsIHRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZQorYW1vdW50IG9mIGRlYnVnZ2luZyBvdXRwdXQgdGhlIHNjaGVkdWxlciBwcmludHMuICBUaGlzIGluZm9ybWF0aW9uIGlzCit3cml0dGVuIHRvIHN0YW5kYXJkIGVycm9yLCB1bmxlc3MgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1zY2hlZDE8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1zY2hlZDI8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgaXQgaXMgb3V0cHV0Cit0byB0aGUgdXN1YWwgZHVtcCBsaXN0aW5nIGZpbGUsIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uc2NoZWQxPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5zY2hlZDI8L3NwYW4+PC9zYW1wPgorcmVzcGVjdGl2ZWx5LiAgSG93ZXZlciBmb3IgPHZhcj5uPC92YXI+IGdyZWF0ZXIgdGhhbiBuaW5lLCB0aGUgb3V0cHV0IGlzCithbHdheXMgcHJpbnRlZCB0byBzdGFuZGFyZCBlcnJvci4KKworICAgICA8cD5Gb3IgPHZhcj5uPC92YXI+IGdyZWF0ZXIgdGhhbiB6ZXJvLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkLXZlcmJvc2U8L3NwYW4+PC9zYW1wPiBvdXRwdXRzIHRoZQorc2FtZSBpbmZvcm1hdGlvbiBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLXNjaGVkMTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtcnRsLXNjaGVkMjwvc3Bhbj48L3NhbXA+LiAKK0ZvciA8dmFyPm48L3Zhcj4gZ3JlYXRlciB0aGFuIG9uZSwgaXQgYWxzbyBvdXRwdXQgYmFzaWMgYmxvY2sgcHJvYmFiaWxpdGllcywKK2RldGFpbGVkIHJlYWR5IGxpc3QgaW5mb3JtYXRpb24gYW5kIHVuaXQvaW5zbiBpbmZvLiAgRm9yIDx2YXI+bjwvdmFyPiBncmVhdGVyCit0aGFuIHR3bywgaXQgaW5jbHVkZXMgUlRMIGF0IGFib3J0IHBvaW50LCBjb250cm9sLWZsb3cgYW5kIHJlZ2lvbnMgaW5mby4gCitBbmQgZm9yIDx2YXI+bjwvdmFyPiBvdmVyIGZvdXIsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWQtdmVyYm9zZTwvc3Bhbj48L3NhbXA+IGFsc28gaW5jbHVkZXMKK2RlcGVuZGVuY2UgaW5mby4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1zYXZlLXRlbXBzPC9jb2RlPjxkdD48Y29kZT4tc2F2ZS10ZW1wcz1jd2Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXNhdmVfMDAyZHRlbXBzLTcwNSI+PC9hPlN0b3JlIHRoZSB1c3VhbCAmbGRxdW87dGVtcG9yYXJ5JnJkcXVvOyBpbnRlcm1lZGlhdGUgZmlsZXMgcGVybWFuZW50bHk7IHBsYWNlIHRoZW0KK2luIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbmFtZSB0aGVtIGJhc2VkIG9uIHRoZSBzb3VyY2UgZmlsZS4gIFRodXMsCitjb21waWxpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5jPC9zcGFuPjwvc2FtcD4gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYyAtc2F2ZS10ZW1wczwvc3Bhbj48L3NhbXA+IHByb2R1Y2VzIGZpbGVzCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zm9vLmk8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5zPC9zcGFuPjwvc2FtcD4sIGFzIHdlbGwgYXMgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5vPC9zcGFuPjwvc2FtcD4uICBUaGlzIGNyZWF0ZXMgYQorcHJlcHJvY2Vzc2VkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5mb28uaTwvc3Bhbj48L3NhbXA+IG91dHB1dCBmaWxlIGV2ZW4gdGhvdWdoIHRoZSBjb21waWxlciBub3cKK25vcm1hbGx5IHVzZXMgYW4gaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3IuCisKKyAgICAgPHA+V2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14PC9zcGFuPjwvc2FtcD4gY29tbWFuZC1saW5lIG9wdGlvbiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zYXZlLXRlbXBzPC9zcGFuPjwvc2FtcD4gaXMgc2Vuc2libGUgZW5vdWdoIHRvIGF2b2lkIG92ZXIgd3JpdGluZyBhbgoraW5wdXQgc291cmNlIGZpbGUgd2l0aCB0aGUgc2FtZSBleHRlbnNpb24gYXMgYW4gaW50ZXJtZWRpYXRlIGZpbGUuIAorVGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJtZWRpYXRlIGZpbGUgbWF5IGJlIG9idGFpbmVkIGJ5IHJlbmFtaW5nIHRoZQorc291cmNlIGZpbGUgYmVmb3JlIHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zYXZlLXRlbXBzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+SWYgeW91IGludm9rZSBHQ0MgaW4gcGFyYWxsZWwsIGNvbXBpbGluZyBzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2UKK2ZpbGVzIHRoYXQgc2hhcmUgYSBjb21tb24gYmFzZSBuYW1lIGluIGRpZmZlcmVudCBzdWJkaXJlY3RvcmllcyBvciB0aGUKK3NhbWUgc291cmNlIGZpbGUgY29tcGlsZWQgZm9yIG11bHRpcGxlIG91dHB1dCBkZXN0aW5hdGlvbnMsIGl0IGlzCitsaWtlbHkgdGhhdCB0aGUgZGlmZmVyZW50IHBhcmFsbGVsIGNvbXBpbGVycyB3aWxsIGludGVyZmVyZSB3aXRoIGVhY2gKK290aGVyLCBhbmQgb3ZlcndyaXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMuICBGb3IgaW5zdGFuY2U6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZ2NjIC1zYXZlLXRlbXBzIC1vIG91dGRpcjEvZm9vLm8gaW5kaXIxL2Zvby5jJmFtcDsKKyAgICAgICAgICBnY2MgLXNhdmUtdGVtcHMgLW8gb3V0ZGlyMi9mb28ubyBpbmRpcjIvZm9vLmMmYW1wOworPC9wcmU+CisgICAgIDxwPm1heSByZXN1bHQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5pPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5mb28ubzwvc3Bhbj48L3NhbXA+IGJlaW5nIHdyaXR0ZW4gdG8KK3NpbXVsdGFuZW91c2x5IGJ5IGJvdGggY29tcGlsZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXNhdmUtdGVtcHM9b2JqPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1zYXZlXzAwMmR0ZW1wc18wMDNkb2JqLTcwNiI+PC9hPlN0b3JlIHRoZSB1c3VhbCAmbGRxdW87dGVtcG9yYXJ5JnJkcXVvOyBpbnRlcm1lZGlhdGUgZmlsZXMgcGVybWFuZW50bHkuICBJZiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHVzZWQsIHRoZSB0ZW1wb3JhcnkgZmlsZXMgYXJlIGJhc2VkIG9uIHRoZQorb2JqZWN0IGZpbGUuICBJZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW88L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgbm90IHVzZWQsIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXNhdmUtdGVtcHM9b2JqPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGJlaGF2ZXMgbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc2F2ZS10ZW1wczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPkZvciBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGdjYyAtc2F2ZS10ZW1wcz1vYmogLWMgZm9vLmMKKyAgICAgICAgICBnY2MgLXNhdmUtdGVtcHM9b2JqIC1jIGJhci5jIC1vIGRpci94YmFyLm8KKyAgICAgICAgICBnY2MgLXNhdmUtdGVtcHM9b2JqIGZvb2Jhci5jIC1vIGRpcjIveWZvb2JhcgorPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+Y3JlYXRlcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zm9vLmk8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5zPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5kaXIveGJhci5pPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZGlyL3hiYXIuczwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZGlyMi95Zm9vYmFyLmk8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmRpcjIveWZvb2Jhci5zPC9zcGFuPjwvc2FtcD4sIGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmRpcjIveWZvb2Jhci5vPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tdGltZTwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PGNvZGU+PTwvY29kZT48dmFyPmZpbGU8L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LXRpbWUtNzA3Ij48L2E+UmVwb3J0IHRoZSBDUFUgdGltZSB0YWtlbiBieSBlYWNoIHN1YnByb2Nlc3MgaW4gdGhlIGNvbXBpbGF0aW9uCitzZXF1ZW5jZS4gIEZvciBDIHNvdXJjZSBmaWxlcywgdGhpcyBpcyB0aGUgY29tcGlsZXIgcHJvcGVyIGFuZCBhc3NlbWJsZXIKKyhwbHVzIHRoZSBsaW5rZXIgaWYgbGlua2luZyBpcyBkb25lKS4KKworICAgICA8cD5XaXRob3V0IHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFuIG91dHB1dCBmaWxlLCB0aGUgb3V0cHV0IGxvb2tzIGxpa2UgdGhpczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjIGNjMSAwLjEyIDAuMDEKKyAgICAgICAgICAjIGFzIDAuMDAgMC4wMQorPC9wcmU+CisgICAgIDxwPlRoZSBmaXJzdCBudW1iZXIgb24gZWFjaCBsaW5lIGlzIHRoZSAmbGRxdW87dXNlciB0aW1lJnJkcXVvOywgdGhhdCBpcyB0aW1lIHNwZW50CitleGVjdXRpbmcgdGhlIHByb2dyYW0gaXRzZWxmLiAgVGhlIHNlY29uZCBudW1iZXIgaXMgJmxkcXVvO3N5c3RlbSB0aW1lJnJkcXVvOywKK3RpbWUgc3BlbnQgZXhlY3V0aW5nIG9wZXJhdGluZyBzeXN0ZW0gcm91dGluZXMgb24gYmVoYWxmIG9mIHRoZSBwcm9ncmFtLiAKK0JvdGggbnVtYmVycyBhcmUgaW4gc2Vjb25kcy4KKworICAgICA8cD5XaXRoIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFuIG91dHB1dCBmaWxlLCB0aGUgb3V0cHV0IGlzIGFwcGVuZGVkIHRvIHRoZQorbmFtZWQgZmlsZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhpczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAwLjEyIDAuMDEgY2MxIDx2YXI+b3B0aW9uczwvdmFyPgorICAgICAgICAgIDAuMDAgMC4wMSBhcyA8dmFyPm9wdGlvbnM8L3Zhcj4KKzwvcHJlPgorICAgICA8cD5UaGUgJmxkcXVvO3VzZXIgdGltZSZyZHF1bzsgYW5kIHRoZSAmbGRxdW87c3lzdGVtIHRpbWUmcmRxdW87IGFyZSBtb3ZlZCBiZWZvcmUgdGhlIHByb2dyYW0KK25hbWUsIGFuZCB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHByb2dyYW0gYXJlIGRpc3BsYXllZCwgc28gdGhhdCBvbmUKK2NhbiBsYXRlciB0ZWxsIHdoYXQgZmlsZSB3YXMgYmVpbmcgY29tcGlsZWQsIGFuZCB3aXRoIHdoaWNoIG9wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnZhci10cmFja2luZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnZhcl8wMDJkdHJhY2tpbmctNzA4Ij48L2E+UnVuIHZhcmlhYmxlIHRyYWNraW5nIHBhc3MuICBJdCBjb21wdXRlcyB3aGVyZSB2YXJpYWJsZXMgYXJlIHN0b3JlZCBhdCBlYWNoCitwb3NpdGlvbiBpbiBjb2RlLiAgQmV0dGVyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyB0aGVuIGdlbmVyYXRlZAorKGlmIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9ybWF0IHN1cHBvcnRzIHRoaXMgaW5mb3JtYXRpb24pLgorCisgICAgIDxwPkl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGNvbXBpbGluZyB3aXRoIG9wdGltaXphdGlvbiAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiksIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWc8L3NwYW4+PC9zYW1wPikgYW5kCit0aGUgZGVidWcgaW5mbyBmb3JtYXQgc3VwcG9ydHMgaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnZhci10cmFja2luZy1hc3NpZ25tZW50czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnZhcl8wMDJkdHJhY2tpbmdfMDAyZGFzc2lnbm1lbnRzLTcwOSI+PC9hPjxhIG5hbWU9ImluZGV4LWZub18wMDJkdmFyXzAwMmR0cmFja2luZ18wMDJkYXNzaWdubWVudHMtNzEwIj48L2E+QW5ub3RhdGUgYXNzaWdubWVudHMgdG8gdXNlciB2YXJpYWJsZXMgZWFybHkgaW4gdGhlIGNvbXBpbGF0aW9uIGFuZAorYXR0ZW1wdCB0byBjYXJyeSB0aGUgYW5ub3RhdGlvbnMgb3ZlciB0aHJvdWdob3V0IHRoZSBjb21waWxhdGlvbiBhbGwgdGhlCit3YXkgdG8gdGhlIGVuZCwgaW4gYW4gYXR0ZW1wdCB0byBpbXByb3ZlIGRlYnVnIGluZm9ybWF0aW9uIHdoaWxlCitvcHRpbWl6aW5nLiAgVXNlIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nZHdhcmYtNDwvc3Bhbj48L3NhbXA+IGlzIHJlY29tbWVuZGVkIGFsb25nIHdpdGggaXQuCisKKyAgICAgPHA+SXQgY2FuIGJlIGVuYWJsZWQgZXZlbiBpZiB2YXItdHJhY2tpbmcgaXMgZGlzYWJsZWQsIGluIHdoaWNoIGNhc2UKK2Fubm90YXRpb25zIGFyZSBjcmVhdGVkIGFuZCBtYWludGFpbmVkLCBidXQgZGlzY2FyZGVkIGF0IHRoZSBlbmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnZhci10cmFja2luZy1hc3NpZ25tZW50cy10b2dnbGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ2YXJfMDAyZHRyYWNraW5nXzAwMmRhc3NpZ25tZW50c18wMDJkdG9nZ2xlLTcxMSI+PC9hPjxhIG5hbWU9ImluZGV4LWZub18wMDJkdmFyXzAwMmR0cmFja2luZ18wMDJkYXNzaWdubWVudHNfMDAyZHRvZ2dsZS03MTIiPjwvYT5Ub2dnbGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ2YXItdHJhY2tpbmctYXNzaWdubWVudHM8L3NwYW4+PC9zYW1wPiwgaW4gdGhlIHNhbWUgd2F5IHRoYXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ndG9nZ2xlPC9zcGFuPjwvc2FtcD4gdG9nZ2xlcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXByaW50LWZpbGUtbmFtZT08L2NvZGU+PHZhcj5saWJyYXJ5PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LXByaW50XzAwMmRmaWxlXzAwMmRuYW1lLTcxMyI+PC9hPlByaW50IHRoZSBmdWxsIGFic29sdXRlIG5hbWUgb2YgdGhlIGxpYnJhcnkgZmlsZSA8dmFyPmxpYnJhcnk8L3Zhcj4gdGhhdAord291bGQgYmUgdXNlZCB3aGVuIGxpbmtpbmcmbWRhc2g7YW5kIGRvbid0IGRvIGFueXRoaW5nIGVsc2UuICBXaXRoIHRoaXMKK29wdGlvbiwgR0NDIGRvZXMgbm90IGNvbXBpbGUgb3IgbGluayBhbnl0aGluZzsgaXQganVzdCBwcmludHMgdGhlCitmaWxlIG5hbWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcHJpbnQtbXVsdGktZGlyZWN0b3J5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmludF8wMDJkbXVsdGlfMDAyZGRpcmVjdG9yeS03MTQiPjwvYT5QcmludCB0aGUgZGlyZWN0b3J5IG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbXVsdGlsaWIgc2VsZWN0ZWQgYnkgYW55CitvdGhlciBzd2l0Y2hlcyBwcmVzZW50IGluIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIGRpcmVjdG9yeSBpcyBzdXBwb3NlZAordG8gZXhpc3QgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0NDX0VYRUNfUFJFRklYPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcHJpbnQtbXVsdGktbGliPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmludF8wMDJkbXVsdGlfMDAyZGxpYi03MTUiPjwvYT5QcmludCB0aGUgbWFwcGluZyBmcm9tIG11bHRpbGliIGRpcmVjdG9yeSBuYW1lcyB0byBjb21waWxlciBzd2l0Y2hlcwordGhhdCBlbmFibGUgdGhlbS4gIFRoZSBkaXJlY3RvcnkgbmFtZSBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgc3dpdGNoZXMgYnkKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIGVhY2ggc3dpdGNoIHN0YXJ0cyB3aXRoIGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkIG9mIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuIG11bHRpcGxlIHN3aXRjaGVzLiAgVGhpcyBpcyBzdXBwb3NlZCB0bworZWFzZSBzaGVsbCBwcm9jZXNzaW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXByaW50LW11bHRpLW9zLWRpcmVjdG9yeTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJpbnRfMDAyZG11bHRpXzAwMmRvc18wMDJkZGlyZWN0b3J5LTcxNiI+PC9hPlByaW50IHRoZSBwYXRoIHRvIE9TIGxpYnJhcmllcyBmb3IgdGhlIHNlbGVjdGVkCittdWx0aWxpYiwgcmVsYXRpdmUgdG8gc29tZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliPC9zcGFuPjwvc2FtcD4gc3ViZGlyZWN0b3J5LiAgSWYgT1MgbGlicmFyaWVzIGFyZQorcHJlc2VudCBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYjwvc3Bhbj48L3NhbXA+IHN1YmRpcmVjdG9yeSBhbmQgbm8gbXVsdGlsaWJzIGFyZSB1c2VkLCB0aGlzIGlzCit1c3VhbGx5IGp1c3QgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi48L3NwYW4+PC9zYW1wPiwgaWYgT1MgbGlicmFyaWVzIGFyZSBwcmVzZW50IGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWI8L3NwYW4+PHZhcj5zdWZmaXg8L3Zhcj48L3NhbXA+CitzaWJsaW5nIGRpcmVjdG9yaWVzIHRoaXMgcHJpbnRzIGUuZy4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi4uL2xpYjY0PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uLi9saWI8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi4uL2xpYjMyPC9zcGFuPjwvc2FtcD4sIG9yIGlmIE9TIGxpYnJhcmllcyBhcmUgcHJlc2VudCBpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliLzwvc3Bhbj48dmFyPnN1YmRpcjwvdmFyPjwvc2FtcD4KK3N1YmRpcmVjdG9yaWVzIGl0IHByaW50cyBlLmcuIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hbWQ2NDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3BhcmN2OTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5ldjY8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1wcmludC1tdWx0aWFyY2g8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByaW50XzAwMmRtdWx0aWFyY2gtNzE3Ij48L2E+UHJpbnQgdGhlIHBhdGggdG8gT1MgbGlicmFyaWVzIGZvciB0aGUgc2VsZWN0ZWQgbXVsdGlhcmNoLAorcmVsYXRpdmUgdG8gc29tZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliPC9zcGFuPjwvc2FtcD4gc3ViZGlyZWN0b3J5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXByaW50LXByb2ctbmFtZT08L2NvZGU+PHZhcj5wcm9ncmFtPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LXByaW50XzAwMmRwcm9nXzAwMmRuYW1lLTcxOCI+PC9hPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXByaW50LWZpbGUtbmFtZTwvc3Bhbj48L3NhbXA+LCBidXQgc2VhcmNoZXMgZm9yIGEgcHJvZ3JhbSBzdWNoIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3BwPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXByaW50LWxpYmdjYy1maWxlLW5hbWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByaW50XzAwMmRsaWJnY2NfMDAyZGZpbGVfMDAyZG5hbWUtNzE5Ij48L2E+U2FtZSBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcHJpbnQtZmlsZS1uYW1lPWxpYmdjYy5hPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub3N0ZGxpYjwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub2RlZmF1bHRsaWJzPC9zcGFuPjwvc2FtcD4KK2J1dCB5b3UgZG8gd2FudCB0byBsaW5rIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYy5hPC9zcGFuPjwvc2FtcD4uICBZb3UgY2FuIGRvOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGdjYyAtbm9zdGRsaWIgPHZhcj5maWxlczwvdmFyPi4uLiBgZ2NjIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+LXByaW50LXNlYXJjaC1kaXJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmludF8wMDJkc2VhcmNoXzAwMmRkaXJzLTcyMCI+PC9hPlByaW50IHRoZSBuYW1lIG9mIHRoZSBjb25maWd1cmVkIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgYW5kIGEgbGlzdCBvZgorcHJvZ3JhbSBhbmQgbGlicmFyeSBkaXJlY3RvcmllcyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gc2VhcmNoZXMmbWRhc2g7YW5kIGRvbid0IGRvIGFueXRoaW5nIGVsc2UuCisKKyAgICAgPHA+VGhpcyBpcyB1c2VmdWwgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gcHJpbnRzIHRoZSBlcnJvciBtZXNzYWdlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmluc3RhbGxhdGlvbiBwcm9ibGVtLCBjYW5ub3QgZXhlYyBjcHAwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1RvIHJlc29sdmUgdGhpcyB5b3UgZWl0aGVyIG5lZWQgdG8gcHV0IDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jcHAwPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSBvdGhlciBjb21waWxlcgorY29tcG9uZW50cyB3aGVyZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gZXhwZWN0cyB0byBmaW5kIHRoZW0sIG9yIHlvdSBjYW4gc2V0IHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0NDX0VYRUNfUFJFRklYPC9zcGFuPjwvc2FtcD4gdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgaW5zdGFsbGVkIHRoZW0uIAorRG9uJ3QgZm9yZ2V0IHRoZSB0cmFpbGluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi88L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorU2VlIDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1wcmludC1zeXNyb290PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmludF8wMDJkc3lzcm9vdC03MjEiPjwvYT5QcmludCB0aGUgdGFyZ2V0IHN5c3Jvb3QgZGlyZWN0b3J5IHRoYXQgaXMgdXNlZCBkdXJpbmcKK2NvbXBpbGF0aW9uLiAgVGhpcyBpcyB0aGUgdGFyZ2V0IHN5c3Jvb3Qgc3BlY2lmaWVkIGVpdGhlciBhdCBjb25maWd1cmUKK3RpbWUgb3IgdXNpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3lzcm9vdDwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgcG9zc2libHkgd2l0aCBhbiBleHRyYQorc3VmZml4IHRoYXQgZGVwZW5kcyBvbiBjb21waWxhdGlvbiBvcHRpb25zLiAgSWYgbm8gdGFyZ2V0IHN5c3Jvb3QgaXMKK3NwZWNpZmllZCwgdGhlIG9wdGlvbiBwcmludHMgbm90aGluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1wcmludC1zeXNyb290LWhlYWRlcnMtc3VmZml4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmludF8wMDJkc3lzcm9vdF8wMDJkaGVhZGVyc18wMDJkc3VmZml4LTcyMiI+PC9hPlByaW50IHRoZSBzdWZmaXggYWRkZWQgdG8gdGhlIHRhcmdldCBzeXNyb290IHdoZW4gc2VhcmNoaW5nIGZvcgoraGVhZGVycywgb3IgZ2l2ZSBhbiBlcnJvciBpZiB0aGUgY29tcGlsZXIgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCBzdWNoCithIHN1ZmZpeCZtZGFzaDthbmQgZG9uJ3QgZG8gYW55dGhpbmcgZWxzZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1kdW1wbWFjaGluZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZHVtcG1hY2hpbmUtNzIzIj48L2E+UHJpbnQgdGhlIGNvbXBpbGVyJ3MgdGFyZ2V0IG1hY2hpbmUgKGZvciBleGFtcGxlLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pNjg2LXBjLWxpbnV4LWdudTwvc3Bhbj48L3NhbXA+JnJzcXVvOykmbWRhc2g7YW5kIGRvbid0IGRvIGFueXRoaW5nIGVsc2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZHVtcHZlcnNpb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWR1bXB2ZXJzaW9uLTcyNCI+PC9hPlByaW50IHRoZSBjb21waWxlciB2ZXJzaW9uIChmb3IgZXhhbXBsZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4zLjA8L3NwYW4+PC9zYW1wPiZyc3F1bzspJm1kYXNoO2FuZCBkb24ndCBkbworYW55dGhpbmcgZWxzZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1kdW1wc3BlY3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWR1bXBzcGVjcy03MjUiPjwvYT5QcmludCB0aGUgY29tcGlsZXIncyBidWlsdC1pbiBzcGVjcyZtZGFzaDthbmQgZG9uJ3QgZG8gYW55dGhpbmcgZWxzZS4gIChUaGlzCitpcyB1c2VkIHdoZW4gR0NDIGl0c2VsZiBpcyBiZWluZyBidWlsdC4pICBTZWUgPGEgaHJlZj0iU3BlYy1GaWxlcy5odG1sI1NwZWMtRmlsZXMiPlNwZWMgRmlsZXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1lbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZWxpbWluYXRlXzAwMmR1bnVzZWRfMDAyZGRlYnVnXzAwMmR0eXBlcy03MjYiPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGVsaW1pbmF0ZV8wMDJkdW51c2VkXzAwMmRkZWJ1Z18wMDJkdHlwZXMtNzI3Ij48L2E+Tm9ybWFsbHksIHdoZW4gcHJvZHVjaW5nIERXQVJGIDIgb3V0cHV0LCBHQ0MgYXZvaWRzIHByb2R1Y2luZyBkZWJ1ZyBzeW1ib2wKK291dHB1dCBmb3IgdHlwZXMgdGhhdCBhcmUgbm93aGVyZSB1c2VkIGluIHRoZSBzb3VyY2UgZmlsZSBiZWluZyBjb21waWxlZC4gCitTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIGhhdmUgR0NDIGVtaXQgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBmb3IgYWxsIHR5cGVzIGRlY2xhcmVkIGluIGEgY29tcGlsYXRpb24KK3VuaXQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhleSBhcmUgYWN0dWFsbHkgdXNlZAoraW4gdGhhdCBjb21waWxhdGlvbiB1bml0LCBmb3IgZXhhbXBsZQoraWYsIGluIHRoZSBkZWJ1Z2dlciwgeW91IHdhbnQgdG8gY2FzdCBhIHZhbHVlIHRvIGEgdHlwZSB0aGF0IGlzCitub3QgYWN0dWFsbHkgdXNlZCBpbiB5b3VyIHByb2dyYW0gKGJ1dCBpcyBkZWNsYXJlZCkuICBNb3JlIG9mdGVuLAoraG93ZXZlciwgdGhpcyByZXN1bHRzIGluIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHdhc3RlZCBzcGFjZS4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EZWNpbWFsLUZsb2F0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RlY2ltYWwtRmxvYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDcyZjljCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EZWNpbWFsLUZsb2F0Lmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGVjaW1hbCBGbG9hdCAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIYWxmXzAwMmRQcmVjaXNpb24uaHRtbCNIYWxmXzAwMmRQcmVjaXNpb24iIHRpdGxlPSJIYWxmLVByZWNpc2lvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkhleC1GbG9hdHMuaHRtbCNIZXgtRmxvYXRzIiB0aXRsZT0iSGV4IEZsb2F0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZWNpbWFsLUZsb2F0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkhleC1GbG9hdHMuaHRtbCNIZXgtRmxvYXRzIj5IZXggRmxvYXRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSGFsZl8wMDJkUHJlY2lzaW9uLmh0bWwjSGFsZl8wMDJkUHJlY2lzaW9uIj5IYWxmLVByZWNpc2lvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xMyBEZWNpbWFsIEZsb2F0aW5nIFR5cGVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZGVjaW1hbC1mbG9hdGluZy10eXBlcy0yNDU4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1ZkRlY2ltYWwzMl8wMDdkLWRhdGEtdHlwZS0yNDU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1ZkRlY2ltYWw2NF8wMDdkLWRhdGEtdHlwZS0yNDYwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1ZkRlY2ltYWwxMjhfMDA3ZC1kYXRhLXR5cGUtMjQ2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZGZfMDA3ZC1pbnRlZ2VyLXN1ZmZpeC0yNDYyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkZF8wMDdkLWludGVnZXItc3VmZml4LTI0NjMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRsXzAwN2QtaW50ZWdlci1zdWZmaXgtMjQ2NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiREZfMDA3ZC1pbnRlZ2VyLXN1ZmZpeC0yNDY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JERF8wMDdkLWludGVnZXItc3VmZml4LTI0NjYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkRMXzAwN2QtaW50ZWdlci1zdWZmaXgtMjQ2NyI+PC9hPgorQXMgYW4gZXh0ZW5zaW9uLCBHTlUgQyBzdXBwb3J0cyBkZWNpbWFsIGZsb2F0aW5nIHR5cGVzIGFzCitkZWZpbmVkIGluIHRoZSBOMTMxMiBkcmFmdCBvZiBJU08vSUVDIFdEVFIyNDczMi4gIFN1cHBvcnQgZm9yIGRlY2ltYWwKK2Zsb2F0aW5nIHR5cGVzIGluIEdDQyB3aWxsIGV2b2x2ZSBhcyB0aGUgZHJhZnQgdGVjaG5pY2FsIHJlcG9ydCBjaGFuZ2VzLiAKK0NhbGxpbmcgY29udmVudGlvbnMgZm9yIGFueSB0YXJnZXQgbWlnaHQgYWxzbyBjaGFuZ2UuICBOb3QgYWxsIHRhcmdldHMKK3N1cHBvcnQgZGVjaW1hbCBmbG9hdGluZyB0eXBlcy4KKworIDxwPlRoZSBkZWNpbWFsIGZsb2F0aW5nIHR5cGVzIGFyZSA8Y29kZT5fRGVjaW1hbDMyPC9jb2RlPiwgPGNvZGU+X0RlY2ltYWw2NDwvY29kZT4sIGFuZAorPGNvZGU+X0RlY2ltYWwxMjg8L2NvZGU+LiAgVGhleSB1c2UgYSByYWRpeCBvZiB0ZW4sIHVubGlrZSB0aGUgZmxvYXRpbmcgdHlwZXMKKzxjb2RlPmZsb2F0PC9jb2RlPiwgPGNvZGU+ZG91YmxlPC9jb2RlPiwgYW5kIDxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPiB3aG9zZSByYWRpeCBpcyBub3QKK3NwZWNpZmllZCBieSB0aGUgQyBzdGFuZGFyZCBidXQgaXMgdXN1YWxseSB0d28uCisKKyA8cD5TdXBwb3J0IGZvciBkZWNpbWFsIGZsb2F0aW5nIHR5cGVzIGluY2x1ZGVzIHRoZSBhcml0aG1ldGljIG9wZXJhdG9ycworYWRkLCBzdWJ0cmFjdCwgbXVsdGlwbHksIGRpdmlkZTsgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRvcnM7CityZWxhdGlvbmFsIG9wZXJhdG9yczsgZXF1YWxpdHkgb3BlcmF0b3JzOyBhbmQgY29udmVyc2lvbnMgdG8gYW5kIGZyb20KK2ludGVnZXIgYW5kIG90aGVyIGZsb2F0aW5nIHR5cGVzLiAgVXNlIGEgc3VmZml4ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+REY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gYSBsaXRlcmFsIGNvbnN0YW50IG9mIHR5cGUgPGNvZGU+X0RlY2ltYWwzMjwvY29kZT4sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+REQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDxjb2RlPl9EZWNpbWFsNjQ8L2NvZGU+LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkRMPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvcgorPGNvZGU+X0RlY2ltYWwxMjg8L2NvZGU+LgorCisgPHA+R0NDIHN1cHBvcnQgb2YgZGVjaW1hbCBmbG9hdCBhcyBzcGVjaWZpZWQgYnkgdGhlIGRyYWZ0IHRlY2huaWNhbCByZXBvcnQKK2lzIGluY29tcGxldGU6CisKKyAgICAgPHVsPgorPGxpPldoZW4gdGhlIHZhbHVlIG9mIGEgZGVjaW1hbCBmbG9hdGluZyB0eXBlIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUKK2ludGVnZXIgdHlwZSB0byB3aGljaCBpdCBpcyBiZWluZyBjb252ZXJ0ZWQsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkCityYXRoZXIgdGhhbiB0aGUgcmVzdWx0IHZhbHVlIHNwZWNpZmllZCBieSB0aGUgZHJhZnQgdGVjaG5pY2FsIHJlcG9ydC4KKworICAgICA8bGk+R0NDIGRvZXMgbm90IHByb3ZpZGUgdGhlIEMgbGlicmFyeSBmdW5jdGlvbmFsaXR5IGFzc29jaWF0ZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm1hdGguaDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZmVudi5oPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdGRpby5oPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdGRsaWIuaDwvc3Bhbj48L3NhbXA+LCBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj53Y2hhci5oPC9zcGFuPjwvc2FtcD4sIHdoaWNoIG11c3QgY29tZSBmcm9tIGEgc2VwYXJhdGUgQyBsaWJyYXJ5IGltcGxlbWVudGF0aW9uLiAKK0JlY2F1c2Ugb2YgdGhpcyB0aGUgR05VIEMgY29tcGlsZXIgZG9lcyBub3QgZGVmaW5lIG1hY3JvCis8Y29kZT5fX1NURENfREVDX0ZQX188L2NvZGU+IHRvIGluZGljYXRlIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGNvbmZvcm1zIHRvCit0aGUgdGVjaG5pY2FsIHJlcG9ydC4gCis8L3VsPgorCisgPHA+VHlwZXMgPGNvZGU+X0RlY2ltYWwzMjwvY29kZT4sIDxjb2RlPl9EZWNpbWFsNjQ8L2NvZGU+LCBhbmQgPGNvZGU+X0RlY2ltYWwxMjg8L2NvZGU+CithcmUgc3VwcG9ydGVkIGJ5IHRoZSBEV0FSRiAyIGRlYnVnIGluZm9ybWF0aW9uIGZvcm1hdC4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGVjbGFyYXRvcnMtaW1wbGVtZW50YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGVjbGFyYXRvcnMtaW1wbGVtZW50YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzMwNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EZWNsYXJhdG9ycy1pbXBsZW1lbnRhdGlvbi5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRlY2xhcmF0b3JzIGltcGxlbWVudGF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIiB0aXRsZT0iQyBJbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlF1YWxpZmllcnMtaW1wbGVtZW50YXRpb24uaHRtbCNRdWFsaWZpZXJzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iUXVhbGlmaWVycyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlN0YXRlbWVudHMtaW1wbGVtZW50YXRpb24uaHRtbCNTdGF0ZW1lbnRzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iU3RhdGVtZW50cyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZWNsYXJhdG9ycy1pbXBsZW1lbnRhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTdGF0ZW1lbnRzLWltcGxlbWVudGF0aW9uLmh0bWwjU3RhdGVtZW50cy1pbXBsZW1lbnRhdGlvbiI+U3RhdGVtZW50cyBpbXBsZW1lbnRhdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlF1YWxpZmllcnMtaW1wbGVtZW50YXRpb24uaHRtbCNRdWFsaWZpZXJzLWltcGxlbWVudGF0aW9uIj5RdWFsaWZpZXJzIGltcGxlbWVudGF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iPkMgSW1wbGVtZW50YXRpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjExIERlY2xhcmF0b3JzPC9oMz4KKworICAgICA8dWw+Cis8bGk+PGNpdGU+VGhlIG1heGltdW0gbnVtYmVyIG9mIGRlY2xhcmF0b3JzIHRoYXQgbWF5IG1vZGlmeSBhbiBhcml0aG1ldGljLAorc3RydWN0dXJlIG9yIHVuaW9uIHR5cGUgKEM5MCA2LjUuNCkuPC9jaXRlPgorCisgICAgIDxwPkdDQyBpcyBvbmx5IGxpbWl0ZWQgYnkgYXZhaWxhYmxlIG1lbW9yeS4KKworPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGVwcmVjYXRlZC1GZWF0dXJlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EZXByZWNhdGVkLUZlYXR1cmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0ZWRiMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGVwcmVjYXRlZC1GZWF0dXJlcy5odG1sCkBAIC0wLDAgKzEsMTE3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EZXByZWNhdGVkIEZlYXR1cmVzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIiB0aXRsZT0iQysrIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJKYXZhLUV4Y2VwdGlvbnMuaHRtbCNKYXZhLUV4Y2VwdGlvbnMiIHRpdGxlPSJKYXZhIEV4Y2VwdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJCYWNrd2FyZHMtQ29tcGF0aWJpbGl0eS5odG1sI0JhY2t3YXJkcy1Db21wYXRpYmlsaXR5IiB0aXRsZT0iQmFja3dhcmRzIENvbXBhdGliaWxpdHkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGVwcmVjYXRlZC1GZWF0dXJlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCYWNrd2FyZHMtQ29tcGF0aWJpbGl0eS5odG1sI0JhY2t3YXJkcy1Db21wYXRpYmlsaXR5Ij5CYWNrd2FyZHMgQ29tcGF0aWJpbGl0eTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkphdmEtRXhjZXB0aW9ucy5odG1sI0phdmEtRXhjZXB0aW9ucyI+SmF2YSBFeGNlcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiPkMrKyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMiBEZXByZWNhdGVkIEZlYXR1cmVzPC9oMz4KKworPHA+SW4gdGhlIHBhc3QsIHRoZSBHTlUgQysrIGNvbXBpbGVyIHdhcyBleHRlbmRlZCB0byBleHBlcmltZW50IHdpdGggbmV3CitmZWF0dXJlcywgYXQgYSB0aW1lIHdoZW4gdGhlIEMrKyBsYW5ndWFnZSB3YXMgc3RpbGwgZXZvbHZpbmcuICBOb3cgdGhhdAordGhlIEMrKyBzdGFuZGFyZCBpcyBjb21wbGV0ZSwgc29tZSBvZiB0aG9zZSBmZWF0dXJlcyBhcmUgc3VwZXJzZWRlZCBieQorc3VwZXJpb3IgYWx0ZXJuYXRpdmVzLiAgVXNpbmcgdGhlIG9sZCBmZWF0dXJlcyBtaWdodCBjYXVzZSBhIHdhcm5pbmcgaW4KK3NvbWUgY2FzZXMgdGhhdCB0aGUgZmVhdHVyZSB3aWxsIGJlIGRyb3BwZWQgaW4gdGhlIGZ1dHVyZS4gIEluIG90aGVyCitjYXNlcywgdGhlIGZlYXR1cmUgbWlnaHQgYmUgZ29uZSBhbHJlYWR5LgorCisgPHA+V2hpbGUgdGhlIGxpc3QgYmVsb3cgaXMgbm90IGV4aGF1c3RpdmUsIGl0IGRvY3VtZW50cyBzb21lIG9mIHRoZSBvcHRpb25zCit0aGF0IGFyZSBub3cgZGVwcmVjYXRlZDoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZleHRlcm5hbC10ZW1wbGF0ZXM8L2NvZGU+PGR0Pjxjb2RlPi1mYWx0LWV4dGVybmFsLXRlbXBsYXRlczwvY29kZT48ZGQ+VGhlc2UgYXJlIHR3byBvZiB0aGUgbWFueSB3YXlzIGZvciBHKysgdG8gaW1wbGVtZW50IHRlbXBsYXRlCitpbnN0YW50aWF0aW9uLiAgU2VlIDxhIGhyZWY9IlRlbXBsYXRlLUluc3RhbnRpYXRpb24uaHRtbCNUZW1wbGF0ZS1JbnN0YW50aWF0aW9uIj5UZW1wbGF0ZSBJbnN0YW50aWF0aW9uPC9hPi4gIFRoZSBDKysgc3RhbmRhcmQgY2xlYXJseQorZGVmaW5lcyBob3cgdGVtcGxhdGUgZGVmaW5pdGlvbnMgaGF2ZSB0byBiZSBvcmdhbml6ZWQgYWNyb3NzCitpbXBsZW1lbnRhdGlvbiB1bml0cy4gIEcrKyBoYXMgYW4gaW1wbGljaXQgaW5zdGFudGlhdGlvbiBtZWNoYW5pc20gdGhhdAorc2hvdWxkIHdvcmsganVzdCBmaW5lIGZvciBzdGFuZGFyZC1jb25mb3JtaW5nIGNvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnN0cmljdC1wcm90b3R5cGU8L2NvZGU+PGR0Pjxjb2RlPi1mbm8tc3RyaWN0LXByb3RvdHlwZTwvY29kZT48ZGQ+UHJldmlvdXNseSBpdCB3YXMgcG9zc2libGUgdG8gdXNlIGFuIGVtcHR5IHByb3RvdHlwZSBwYXJhbWV0ZXIgbGlzdCB0bworaW5kaWNhdGUgYW4gdW5zcGVjaWZpZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKGxpa2UgQyksIHJhdGhlciB0aGFuIG5vCitwYXJhbWV0ZXJzLCBhcyBDKysgZGVtYW5kcy4gIFRoaXMgZmVhdHVyZSBoYXMgYmVlbiByZW1vdmVkLCBleGNlcHQgd2hlcmUKK2l0IGlzIHJlcXVpcmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gICBTZWUgPGEgaHJlZj0iQmFja3dhcmRzLUNvbXBhdGliaWxpdHkuaHRtbCNCYWNrd2FyZHMtQ29tcGF0aWJpbGl0eSI+QmFja3dhcmRzIENvbXBhdGliaWxpdHk8L2E+LiAKKzwvZGw+CisKKyA8cD5HKysgYWxsb3dzIGEgdmlydHVhbCBmdW5jdGlvbiByZXR1cm5pbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52b2lkICo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gYmUgb3ZlcnJpZGRlbgorYnkgb25lIHJldHVybmluZyBhIGRpZmZlcmVudCBwb2ludGVyIHR5cGUuICBUaGlzIGV4dGVuc2lvbiB0byB0aGUKK2NvdmFyaWFudCByZXR1cm4gdHlwZSBydWxlcyBpcyBub3cgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGZyb20gYQorZnV0dXJlIHZlcnNpb24uCisKKyA8cD5UaGUgRysrIG1pbmltdW0gYW5kIG1heGltdW0gb3BlcmF0b3JzICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDs/PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs/PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBhbmQKK3RoZWlyIGNvbXBvdW5kIGZvcm1zICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDs/PTwvc3Bhbj48L3NhbXA+JnJzcXVvOykgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmd0Oz89PC9zcGFuPjwvc2FtcD4mcnNxdW87KSBoYXZlIGJlZW4gZGVwcmVjYXRlZAorYW5kIGFyZSBub3cgcmVtb3ZlZCBmcm9tIEcrKy4gIENvZGUgdXNpbmcgdGhlc2Ugb3BlcmF0b3JzIHNob3VsZCBiZQorbW9kaWZpZWQgdG8gdXNlIDxjb2RlPnN0ZDo6bWluPC9jb2RlPiBhbmQgPGNvZGU+c3RkOjptYXg8L2NvZGU+IGluc3RlYWQuCisKKyA8cD5UaGUgbmFtZWQgcmV0dXJuIHZhbHVlIGV4dGVuc2lvbiBoYXMgYmVlbiBkZXByZWNhdGVkLCBhbmQgaXMgbm93CityZW1vdmVkIGZyb20gRysrLgorCisgPHA+VGhlIHVzZSBvZiBpbml0aWFsaXplciBsaXN0cyB3aXRoIG5ldyBleHByZXNzaW9ucyBoYXMgYmVlbiBkZXByZWNhdGVkLAorYW5kIGlzIG5vdyByZW1vdmVkIGZyb20gRysrLgorCisgPHA+RmxvYXRpbmcgYW5kIGNvbXBsZXggbm9uLXR5cGUgdGVtcGxhdGUgcGFyYW1ldGVycyBoYXZlIGJlZW4gZGVwcmVjYXRlZCwKK2FuZCBhcmUgbm93IHJlbW92ZWQgZnJvbSBHKysuCisKKyA8cD5UaGUgaW1wbGljaXQgdHlwZW5hbWUgZXh0ZW5zaW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGlzIG5vdworcmVtb3ZlZCBmcm9tIEcrKy4KKworIDxwPlRoZSB1c2Ugb2YgZGVmYXVsdCBhcmd1bWVudHMgaW4gZnVuY3Rpb24gcG9pbnRlcnMsIGZ1bmN0aW9uIHR5cGVkZWZzCithbmQgb3RoZXIgcGxhY2VzIHdoZXJlIHRoZXkgYXJlIG5vdCBwZXJtaXR0ZWQgYnkgdGhlIHN0YW5kYXJkIGlzCitkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEcrKy4KKworIDxwPkcrKyBhbGxvd3MgZmxvYXRpbmctcG9pbnQgbGl0ZXJhbHMgdG8gYXBwZWFyIGluIGludGVncmFsIGNvbnN0YW50IGV4cHJlc3Npb25zLAorZS5nLiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiBlbnVtIEUgeyBlID0gaW50KDIuMiAqIDMuNykgfSA8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK1RoaXMgZXh0ZW5zaW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGEgZnV0dXJlIHZlcnNpb24uCisKKyA8cD5HKysgYWxsb3dzIHN0YXRpYyBkYXRhIG1lbWJlcnMgb2YgY29uc3QgZmxvYXRpbmctcG9pbnQgdHlwZSB0byBiZSBkZWNsYXJlZAord2l0aCBhbiBpbml0aWFsaXplciBpbiBhIGNsYXNzIGRlZmluaXRpb24uIFRoZSBzdGFuZGFyZCBvbmx5IGFsbG93cworaW5pdGlhbGl6ZXJzIGZvciBzdGF0aWMgbWVtYmVycyBvZiBjb25zdCBpbnRlZ3JhbCB0eXBlcyBhbmQgY29uc3QKK2VudW1lcmF0aW9uIHR5cGVzIHNvIHRoaXMgZXh0ZW5zaW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZAorZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EZXNpZ25hdGVkLUluaXRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Rlc2lnbmF0ZWQtSW5pdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdlYjYyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EZXNpZ25hdGVkLUluaXRzLmh0bWwKQEAgLTAsMCArMSwxNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRlc2lnbmF0ZWQgSW5pdHMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29tcG91bmQtTGl0ZXJhbHMuaHRtbCNDb21wb3VuZC1MaXRlcmFscyIgdGl0bGU9IkNvbXBvdW5kIExpdGVyYWxzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ2FzZS1SYW5nZXMuaHRtbCNDYXNlLVJhbmdlcyIgdGl0bGU9IkNhc2UgUmFuZ2VzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRlc2lnbmF0ZWQtSW5pdHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ2FzZS1SYW5nZXMuaHRtbCNDYXNlLVJhbmdlcyI+Q2FzZSBSYW5nZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb21wb3VuZC1MaXRlcmFscy5odG1sI0NvbXBvdW5kLUxpdGVyYWxzIj5Db21wb3VuZCBMaXRlcmFsczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4yNiBEZXNpZ25hdGVkIEluaXRpYWxpemVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWluaXRpYWxpemVycy13aXRoLWxhYmVsZWQtZWxlbWVudHMtMjU1MSI+PC9hPjxhIG5hbWU9ImluZGV4LWxhYmVsZWQtZWxlbWVudHMtaW4taW5pdGlhbGl6ZXJzLTI1NTIiPjwvYT48YSBuYW1lPSJpbmRleC1jYXNlLWxhYmVscy1pbi1pbml0aWFsaXplcnMtMjU1MyI+PC9hPjxhIG5hbWU9ImluZGV4LWRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXJzLTI1NTQiPjwvYT4KK1N0YW5kYXJkIEM5MCByZXF1aXJlcyB0aGUgZWxlbWVudHMgb2YgYW4gaW5pdGlhbGl6ZXIgdG8gYXBwZWFyIGluIGEgZml4ZWQKK29yZGVyLCB0aGUgc2FtZSBhcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBhcnJheSBvciBzdHJ1Y3R1cmUKK2JlaW5nIGluaXRpYWxpemVkLgorCisgPHA+SW4gSVNPIEM5OSB5b3UgY2FuIGdpdmUgdGhlIGVsZW1lbnRzIGluIGFueSBvcmRlciwgc3BlY2lmeWluZyB0aGUgYXJyYXkKK2luZGljZXMgb3Igc3RydWN0dXJlIGZpZWxkIG5hbWVzIHRoZXkgYXBwbHkgdG8sIGFuZCBHTlUgQyBhbGxvd3MgdGhpcyBhcworYW4gZXh0ZW5zaW9uIGluIEM5MCBtb2RlIGFzIHdlbGwuICBUaGlzIGV4dGVuc2lvbiBpcyBub3QKK2ltcGxlbWVudGVkIGluIEdOVSBDKysuCisKKyA8cD5UbyBzcGVjaWZ5IGFuIGFycmF5IGluZGV4LCB3cml0ZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5bPC9zcGFuPjx2YXI+aW5kZXg8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+XSA9PC9zcGFuPjwvc2FtcD4mcnNxdW87IGJlZm9yZSB0aGUgZWxlbWVudCB2YWx1ZS4gIEZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgaW50IGFbNl0gPSB7IFs0XSA9IDI5LCBbMl0gPSAxNSB9OworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5pcyBlcXVpdmFsZW50IHRvCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgYVs2XSA9IHsgMCwgMCwgMTUsIDAsIDI5LCAwIH07Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZSBpbmRleCB2YWx1ZXMgbXVzdCBiZSBjb25zdGFudCBleHByZXNzaW9ucywgZXZlbiBpZiB0aGUgYXJyYXkgYmVpbmcKK2luaXRpYWxpemVkIGlzIGF1dG9tYXRpYy4KKworIDxwPkFuIGFsdGVybmF0aXZlIHN5bnRheCBmb3IgdGhpcyB0aGF0IGhhcyBiZWVuIG9ic29sZXRlIHNpbmNlIEdDQyAyLjUgYnV0CitHQ0Mgc3RpbGwgYWNjZXB0cyBpcyB0byB3cml0ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPls8L3NwYW4+PHZhcj5pbmRleDwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5dPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJlZm9yZSB0aGUgZWxlbWVudAordmFsdWUsIHdpdGggbm8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgPHA+VG8gaW5pdGlhbGl6ZSBhIHJhbmdlIG9mIGVsZW1lbnRzIHRvIHRoZSBzYW1lIHZhbHVlLCB3cml0ZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5bPC9zcGFuPjx2YXI+Zmlyc3Q8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+IC4uLiA8L3NwYW4+PHZhcj5sYXN0PC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPl0gPSA8L3NwYW4+PHZhcj52YWx1ZTwvdmFyPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBpcyBhIEdOVQorZXh0ZW5zaW9uLiAgRm9yIGV4YW1wbGUsCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgd2lkdGhzW10gPSB7IFswIC4uLiA5XSA9IDEsIFsxMCAuLi4gOTldID0gMiwgWzEwMF0gPSAzIH07Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPklmIHRoZSB2YWx1ZSBpbiBpdCBoYXMgc2lkZS1lZmZlY3RzLCB0aGUgc2lkZS1lZmZlY3RzIGhhcHBlbiBvbmx5IG9uY2UsCitub3QgZm9yIGVhY2ggaW5pdGlhbGl6ZWQgZmllbGQgYnkgdGhlIHJhbmdlIGluaXRpYWxpemVyLgorCis8cCBjbGFzcz0ibm9pbmRlbnQiPk5vdGUgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpcyB0aGUgaGlnaGVzdCB2YWx1ZSBzcGVjaWZpZWQKK3BsdXMgb25lLgorCisgPHA+SW4gYSBzdHJ1Y3R1cmUgaW5pdGlhbGl6ZXIsIHNwZWNpZnkgdGhlIG5hbWUgb2YgYSBmaWVsZCB0byBpbml0aWFsaXplCit3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48dmFyPmZpZWxkbmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4gPTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBiZWZvcmUgdGhlIGVsZW1lbnQgdmFsdWUuICBGb3IgZXhhbXBsZSwKK2dpdmVuIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RydWN0IHBvaW50IHsgaW50IHgsIHk7IH07Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPnRoZSBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb24KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0cnVjdCBwb2ludCBwID0geyAueSA9IHl2YWx1ZSwgLnggPSB4dmFsdWUgfTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+aXMgZXF1aXZhbGVudCB0bworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RydWN0IHBvaW50IHAgPSB7IHh2YWx1ZSwgeXZhbHVlIH07Cis8L3ByZT4KKyA8cD5Bbm90aGVyIHN5bnRheCB0aGF0IGhhcyB0aGUgc2FtZSBtZWFuaW5nLCBvYnNvbGV0ZSBzaW5jZSBHQ0MgMi41LCBpcworJmxzcXVvOzxzYW1wPjx2YXI+ZmllbGRuYW1lPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFzIHNob3duIGhlcmU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdHJ1Y3QgcG9pbnQgcCA9IHsgeTogeXZhbHVlLCB4OiB4dmFsdWUgfTsKKzwvcHJlPgorIDxwPjxhIG5hbWU9ImluZGV4LWRlc2lnbmF0b3JzLTI1NTUiPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5bPC9zcGFuPjx2YXI+aW5kZXg8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+XTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PHZhcj5maWVsZG5hbWU8L3Zhcj48L3NhbXA+JnJzcXVvOyBpcyBrbm93biBhcyBhCis8ZGZuPmRlc2lnbmF0b3I8L2Rmbj4uICBZb3UgY2FuIGFsc28gdXNlIGEgZGVzaWduYXRvciAob3IgdGhlIG9ic29sZXRlIGNvbG9uCitzeW50YXgpIHdoZW4gaW5pdGlhbGl6aW5nIGEgdW5pb24sIHRvIHNwZWNpZnkgd2hpY2ggZWxlbWVudCBvZiB0aGUgdW5pb24KK3Nob3VsZCBiZSB1c2VkLiAgRm9yIGV4YW1wbGUsCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB1bmlvbiBmb28geyBpbnQgaTsgZG91YmxlIGQ7IH07CisgICAgIAorICAgICB1bmlvbiBmb28gZiA9IHsgLmQgPSA0IH07Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPmNvbnZlcnRzIDQgdG8gYSA8Y29kZT5kb3VibGU8L2NvZGU+IHRvIHN0b3JlIGl0IGluIHRoZSB1bmlvbiB1c2luZwordGhlIHNlY29uZCBlbGVtZW50LiAgQnkgY29udHJhc3QsIGNhc3RpbmcgNCB0byB0eXBlIDxjb2RlPnVuaW9uIGZvbzwvY29kZT4KK3N0b3JlcyBpdCBpbnRvIHRoZSB1bmlvbiBhcyB0aGUgaW50ZWdlciA8Y29kZT5pPC9jb2RlPiwgc2luY2UgaXQgaXMKK2FuIGludGVnZXIuICAoU2VlIDxhIGhyZWY9IkNhc3QtdG8tVW5pb24uaHRtbCNDYXN0LXRvLVVuaW9uIj5DYXN0IHRvIFVuaW9uPC9hPi4pCisKKyA8cD5Zb3UgY2FuIGNvbWJpbmUgdGhpcyB0ZWNobmlxdWUgb2YgbmFtaW5nIGVsZW1lbnRzIHdpdGggb3JkaW5hcnkgQworaW5pdGlhbGl6YXRpb24gb2Ygc3VjY2Vzc2l2ZSBlbGVtZW50cy4gIEVhY2ggaW5pdGlhbGl6ZXIgZWxlbWVudCB0aGF0Citkb2VzIG5vdCBoYXZlIGEgZGVzaWduYXRvciBhcHBsaWVzIHRvIHRoZSBuZXh0IGNvbnNlY3V0aXZlIGVsZW1lbnQgb2YgdGhlCithcnJheSBvciBzdHJ1Y3R1cmUuICBGb3IgZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCBhWzZdID0geyBbMV0gPSB2MSwgdjIsIFs0XSA9IHY0IH07Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPmlzIGVxdWl2YWxlbnQgdG8KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCBhWzZdID0geyAwLCB2MSwgdjIsIDAsIHY0LCAwIH07Cis8L3ByZT4KKyA8cD5MYWJlbGluZyB0aGUgZWxlbWVudHMgb2YgYW4gYXJyYXkgaW5pdGlhbGl6ZXIgaXMgZXNwZWNpYWxseSB1c2VmdWwKK3doZW4gdGhlIGluZGljZXMgYXJlIGNoYXJhY3RlcnMgb3IgYmVsb25nIHRvIGFuIDxjb2RlPmVudW08L2NvZGU+IHR5cGUuIAorRm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgd2hpdGVzcGFjZVsyNTZdCisgICAgICAgPSB7IFsnICddID0gMSwgWydcdCddID0gMSwgWydcaCddID0gMSwKKyAgICAgICAgICAgWydcZiddID0gMSwgWydcbiddID0gMSwgWydcciddID0gMSB9OworPC9wcmU+CisgPHA+PGEgbmFtZT0iaW5kZXgtZGVzaWduYXRvci1saXN0cy0yNTU2Ij48L2E+WW91IGNhbiBhbHNvIHdyaXRlIGEgc2VyaWVzIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48dmFyPmZpZWxkbmFtZTwvdmFyPjwvc2FtcD4mcnNxdW87IGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5bPC9zcGFuPjx2YXI+aW5kZXg8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+XTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkZXNpZ25hdG9ycyBiZWZvcmUgYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHNwZWNpZnkgYQorbmVzdGVkIHN1Ym9iamVjdCB0byBpbml0aWFsaXplOyB0aGUgbGlzdCBpcyB0YWtlbiByZWxhdGl2ZSB0byB0aGUKK3N1Ym9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbG9zZXN0IHN1cnJvdW5kaW5nIGJyYWNlIHBhaXIuICBGb3IKK2V4YW1wbGUsIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RydWN0IHBvaW50PC9zcGFuPjwvc2FtcD4mcnNxdW87IGRlY2xhcmF0aW9uIGFib3ZlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RydWN0IHBvaW50IHB0YXJyYXlbMTBdID0geyBbMl0ueSA9IHl2MiwgWzJdLnggPSB4djIsIFswXS54ID0geHYwIH07Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPklmIHRoZSBzYW1lIGZpZWxkIGlzIGluaXRpYWxpemVkIG11bHRpcGxlIHRpbWVzLCBpdCBoYXMgdGhlIHZhbHVlIGZyb20KK3RoZSBsYXN0IGluaXRpYWxpemF0aW9uLiAgSWYgYW55IHN1Y2ggb3ZlcnJpZGRlbiBpbml0aWFsaXphdGlvbiBoYXMKK3NpZGUtZWZmZWN0LCBpdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBzaWRlLWVmZmVjdCBoYXBwZW5zIG9yIG5vdC4gCitDdXJyZW50bHksIEdDQyBkaXNjYXJkcyB0aGVtIGFuZCBpc3N1ZXMgYSB3YXJuaW5nLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EaWFnbm9zdGljLVByYWdtYXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGlhZ25vc3RpYy1QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5OGNiMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGlhZ25vc3RpYy1QcmFnbWFzLmh0bWwKQEAgLTAsMCArMSwxMzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRpYWdub3N0aWMgUHJhZ21hcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyIgdGl0bGU9IlByYWdtYXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJXZWFrLVByYWdtYXMuaHRtbCNXZWFrLVByYWdtYXMiIHRpdGxlPSJXZWFrIFByYWdtYXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJWaXNpYmlsaXR5LVByYWdtYXMuaHRtbCNWaXNpYmlsaXR5LVByYWdtYXMiIHRpdGxlPSJWaXNpYmlsaXR5IFByYWdtYXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGlhZ25vc3RpYy1QcmFnbWFzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZpc2liaWxpdHktUHJhZ21hcy5odG1sI1Zpc2liaWxpdHktUHJhZ21hcyI+VmlzaWJpbGl0eSBQcmFnbWFzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iV2Vhay1QcmFnbWFzLmh0bWwjV2Vhay1QcmFnbWFzIj5XZWFrIFByYWdtYXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTguMTAgRGlhZ25vc3RpYyBQcmFnbWFzPC9oND4KKworPHA+R0NDIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3RpdmVseSBlbmFibGUgb3IgZGlzYWJsZSBjZXJ0YWluIHR5cGVzIG9mCitkaWFnbm9zdGljcywgYW5kIGNoYW5nZSB0aGUga2luZCBvZiB0aGUgZGlhZ25vc3RpYy4gIEZvciBleGFtcGxlLCBhCitwcm9qZWN0J3MgcG9saWN5IG1pZ2h0IHJlcXVpcmUgdGhhdCBhbGwgc291cmNlcyBjb21waWxlIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXJyb3I8L3NwYW4+PC9zYW1wPiBidXQgY2VydGFpbiBmaWxlcyBtaWdodCBoYXZlIGV4Y2VwdGlvbnMgYWxsb3dpbmcKK3NwZWNpZmljIHR5cGVzIG9mIHdhcm5pbmdzLiAgT3IsIGEgcHJvamVjdCBtaWdodCBzZWxlY3RpdmVseSBlbmFibGUKK2RpYWdub3N0aWNzIGFuZCB0cmVhdCB0aGVtIGFzIGVycm9ycyBkZXBlbmRpbmcgb24gd2hpY2ggcHJlcHJvY2Vzc29yCittYWNyb3MgYXJlIGRlZmluZWQuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNwcmFnbWEgR0NDIGRpYWdub3N0aWMgPC9jb2RlPjx2YXI+a2luZDwvdmFyPiA8dmFyPm9wdGlvbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWFfMDAyYy1kaWFnbm9zdGljLTM0NzQiPjwvYT4KK01vZGlmaWVzIHRoZSBkaXNwb3NpdGlvbiBvZiBhIGRpYWdub3N0aWMuICBOb3RlIHRoYXQgbm90IGFsbAorZGlhZ25vc3RpY3MgYXJlIG1vZGlmaWFibGU7IGF0IHRoZSBtb21lbnQgb25seSB3YXJuaW5ncyAobm9ybWFsbHkKK2NvbnRyb2xsZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tVy4uLjwvc3Bhbj48L3NhbXA+JnJzcXVvOykgY2FuIGJlIGNvbnRyb2xsZWQsIGFuZCBub3QgYWxsIG9mIHRoZW0uIAorVXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZGlhZ25vc3RpY3Mtc2hvdy1vcHRpb248L3NwYW4+PC9zYW1wPiB0byBkZXRlcm1pbmUgd2hpY2ggZGlhZ25vc3RpY3MKK2FyZSBjb250cm9sbGFibGUgYW5kIHdoaWNoIG9wdGlvbiBjb250cm9scyB0aGVtLgorCisgICAgIDxwPjx2YXI+a2luZDwvdmFyPiBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmVycm9yPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHRyZWF0IHRoaXMgZGlhZ25vc3RpYyBhcyBhbiBlcnJvciwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+d2FybmluZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byB0cmVhdCBpdCBsaWtlIGEgd2FybmluZyAoZXZlbiBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Vycm9yPC9zcGFuPjwvc2FtcD4gaXMKK2luIGVmZmVjdCksIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aWdub3JlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpZiB0aGUgZGlhZ25vc3RpYyBpcyB0byBiZSBpZ25vcmVkLiAKKzx2YXI+b3B0aW9uPC92YXI+IGlzIGEgZG91YmxlIHF1b3RlZCBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBjb21tYW5kLWxpbmUKK29wdGlvbi4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHdhcm5pbmcgIi1XZm9ybWF0IgorICAgICAgICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZXJyb3IgIi1XZm9ybWF0IgorICAgICAgICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQiCis8L3ByZT4KKyAgICAgPHA+Tm90ZSB0aGF0IHRoZXNlIHByYWdtYXMgb3ZlcnJpZGUgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLiAgR0NDIGtlZXBzCit0cmFjayBvZiB0aGUgbG9jYXRpb24gb2YgZWFjaCBwcmFnbWEsIGFuZCBpc3N1ZXMgZGlhZ25vc3RpY3MgYWNjb3JkaW5nCit0byB0aGUgc3RhdGUgYXMgb2YgdGhhdCBwb2ludCBpbiB0aGUgc291cmNlIGZpbGUuICBUaHVzLCBwcmFnbWFzIG9jY3VycmluZworYWZ0ZXIgYSBsaW5lIGRvIG5vdCBhZmZlY3QgZGlhZ25vc3RpY3MgY2F1c2VkIGJ5IHRoYXQgbGluZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPiNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaDwvY29kZT48ZHQ+PGNvZGU+I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3A8L2NvZGU+PGRkPgorQ2F1c2VzIEdDQyB0byByZW1lbWJlciB0aGUgc3RhdGUgb2YgdGhlIGRpYWdub3N0aWNzIGFzIG9mIGVhY2gKKzxjb2RlPnB1c2g8L2NvZGU+LCBhbmQgcmVzdG9yZSB0byB0aGF0IHBvaW50IGF0IGVhY2ggPGNvZGU+cG9wPC9jb2RlPi4gIElmIGEKKzxjb2RlPnBvcDwvY29kZT4gaGFzIG5vIG1hdGNoaW5nIDxjb2RlPnB1c2g8L2NvZGU+LCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlCityZXN0b3JlZC4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGVycm9yICItV3VuaW5pdGlhbGl6ZWQiCisgICAgICAgICAgICBmb28oYSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBlcnJvciBpcyBnaXZlbiBmb3IgdGhpcyBvbmUgKi8KKyAgICAgICAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAgICAgICAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5pbml0aWFsaXplZCIKKyAgICAgICAgICAgIGZvbyhiKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGRpYWdub3N0aWMgZm9yIHRoaXMgb25lICovCisgICAgICAgICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAgICAgICAgICAgIGZvbyhjKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGVycm9yIGlzIGdpdmVuIGZvciB0aGlzIG9uZSAqLworICAgICAgICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgICAgICAgICAgICBmb28oZCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXBlbmRzIG9uIGNvbW1hbmQtbGluZSBvcHRpb25zICovCis8L3ByZT4KKyAgICAgPC9kbD4KKworIDxwPkdDQyBhbHNvIG9mZmVycyBhIHNpbXBsZSBtZWNoYW5pc20gZm9yIHByaW50aW5nIG1lc3NhZ2VzIGR1cmluZworY29tcGlsYXRpb24uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNwcmFnbWEgbWVzc2FnZSA8L2NvZGU+PHZhcj5zdHJpbmc8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hXzAwMmMtZGlhZ25vc3RpYy0zNDc1Ij48L2E+CitQcmludHMgPHZhcj5zdHJpbmc8L3Zhcj4gYXMgYSBjb21waWxlciBtZXNzYWdlIG9uIGNvbXBpbGF0aW9uLiAgVGhlIG1lc3NhZ2UKK2lzIGluZm9ybWF0aW9uYWwgb25seSwgYW5kIGlzIG5laXRoZXIgYSBjb21waWxhdGlvbiB3YXJuaW5nIG5vciBhbiBlcnJvci4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjcHJhZ21hIG1lc3NhZ2UgIkNvbXBpbGluZyAiIF9fRklMRV9fICIuLi4iCis8L3ByZT4KKyAgICAgPHA+PHZhcj5zdHJpbmc8L3Zhcj4gbWF5IGJlIHBhcmVudGhlc2l6ZWQsIGFuZCBpcyBwcmludGVkIHdpdGggbG9jYXRpb24KK2luZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2RlZmluZSBET19QUkFHTUEoeCkgX1ByYWdtYSAoI3gpCisgICAgICAgICAgI2RlZmluZSBUT0RPKHgpIERPX1BSQUdNQShtZXNzYWdlICgiVE9ETyAtICIgI3gpKQorICAgICAgICAgIAorICAgICAgICAgIFRPRE8oUmVtZW1iZXIgdG8gZml4IHRoaXMpCis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5wcmludHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vdG1wL2ZpbGUuYzo0OiBub3RlOiAjcHJhZ21hIG1lc3NhZ2U6CitUT0RPIC0gUmVtZW1iZXIgdG8gZml4IHRoaXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EaXJlY3RseV8wMDJkbWFwcGVkLUludGVnZXItRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RpcmVjdGx5XzAwMmRtYXBwZWQtSW50ZWdlci1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmU2NGY1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EaXJlY3RseV8wMDJkbWFwcGVkLUludGVnZXItRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGlyZWN0bHktbWFwcGVkIEludGVnZXIgRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNGUl8wMDJkVi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iRlItViBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBcmd1bWVudC1UeXBlcy5odG1sI0FyZ3VtZW50LVR5cGVzIiB0aXRsZT0iQXJndW1lbnQgVHlwZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEaXJlY3RseV8wMDJkbWFwcGVkLU1lZGlhLUZ1bmN0aW9ucy5odG1sI0RpcmVjdGx5XzAwMmRtYXBwZWQtTWVkaWEtRnVuY3Rpb25zIiB0aXRsZT0iRGlyZWN0bHktbWFwcGVkIE1lZGlhIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEaXJlY3RseS1tYXBwZWQtSW50ZWdlci1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IkRpcmVjdGx5XzAwMmRtYXBwZWQtSW50ZWdlci1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGlyZWN0bHlfMDAyZG1hcHBlZC1NZWRpYS1GdW5jdGlvbnMuaHRtbCNEaXJlY3RseV8wMDJkbWFwcGVkLU1lZGlhLUZ1bmN0aW9ucyI+RGlyZWN0bHktbWFwcGVkIE1lZGlhIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFyZ3VtZW50LVR5cGVzLmh0bWwjQXJndW1lbnQtVHlwZXMiPkFyZ3VtZW50IFR5cGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkZSLVYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni42LjIgRGlyZWN0bHktbWFwcGVkIEludGVnZXIgRnVuY3Rpb25zPC9oNT4KKworPHA+VGhlIGZ1bmN0aW9ucyBsaXN0ZWQgYmVsb3cgbWFwIGRpcmVjdGx5IHRvIEZSLVYgSS10eXBlIGluc3RydWN0aW9ucy4KKworIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj5GdW5jdGlvbiBwcm90b3R5cGUgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPkV4YW1wbGUgdXNhZ2UgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPkFzc2VtYmx5IG91dHB1dAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+c3cxIF9fQUREU1MgKHN3MSwgc3cxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX0FERFNTICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5BRERTUyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+c3cxIF9fU0NBTiAoc3cxLCBzdzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fU0NBTiAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+U0NBTiA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+c3cxIF9fU0NVVFNTIChzdzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YjwvdmFyPjxjb2RlPiA9IF9fU0NVVFNTICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5TQ1VUU1MgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzEgX19TTEFTUyAoc3cxLCBzdzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fU0xBU1MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPlNMQVNTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fU01BU1MgKHN3MSwgc3cxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX1NNQVNTICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5TTUFTUyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnZvaWQgX19TTVNTUyAoc3cxLCBzdzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjxjb2RlPl9fU01TU1MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPlNNU1NTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX1NNVSAoc3cxLCBzdzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjxjb2RlPl9fU01VICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5TTVUgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzIgX19TTVVMIChzdzEsIHN3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19TTVVMICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5TTVVMIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzEgX19TVUJTUyAoc3cxLCBzdzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fU1VCU1MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPlNVQlNTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzIgX19VTVVMICh1dzEsIHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19VTVVMICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5VTVVMIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+CisgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EaXJlY3RseV8wMDJkbWFwcGVkLU1lZGlhLUZ1bmN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EaXJlY3RseV8wMDJkbWFwcGVkLU1lZGlhLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYmI1YmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RpcmVjdGx5XzAwMmRtYXBwZWQtTWVkaWEtRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRpcmVjdGx5LW1hcHBlZCBNZWRpYSBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJGUi1WIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRpcmVjdGx5XzAwMmRtYXBwZWQtSW50ZWdlci1GdW5jdGlvbnMuaHRtbCNEaXJlY3RseV8wMDJkbWFwcGVkLUludGVnZXItRnVuY3Rpb25zIiB0aXRsZT0iRGlyZWN0bHktbWFwcGVkIEludGVnZXIgRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUmF3LXJlYWRfMDAyZndyaXRlLUZ1bmN0aW9ucy5odG1sI1Jhdy1yZWFkXzAwMmZ3cml0ZS1GdW5jdGlvbnMiIHRpdGxlPSJSYXcgcmVhZC93cml0ZSBGdW5jdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGlyZWN0bHktbWFwcGVkLU1lZGlhLUZ1bmN0aW9ucyI+PC9hPgorPGEgbmFtZT0iRGlyZWN0bHlfMDAyZG1hcHBlZC1NZWRpYS1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUmF3LXJlYWRfMDAyZndyaXRlLUZ1bmN0aW9ucy5odG1sI1Jhdy1yZWFkXzAwMmZ3cml0ZS1GdW5jdGlvbnMiPlJhdyByZWFkL3dyaXRlIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRpcmVjdGx5XzAwMmRtYXBwZWQtSW50ZWdlci1GdW5jdGlvbnMuaHRtbCNEaXJlY3RseV8wMDJkbWFwcGVkLUludGVnZXItRnVuY3Rpb25zIj5EaXJlY3RseS1tYXBwZWQgSW50ZWdlciBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJGUl8wMDJkVi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+RlItViBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjYuMyBEaXJlY3RseS1tYXBwZWQgTWVkaWEgRnVuY3Rpb25zPC9oNT4KKworPHA+VGhlIGZ1bmN0aW9ucyBsaXN0ZWQgYmVsb3cgbWFwIGRpcmVjdGx5IHRvIEZSLVYgTS10eXBlIGluc3RydWN0aW9ucy4KKworIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj5GdW5jdGlvbiBwcm90b3R5cGUgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPkV4YW1wbGUgdXNhZ2UgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPkFzc2VtYmx5IG91dHB1dAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUFCU0hTIChzdzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YjwvdmFyPjxjb2RlPiA9IF9fTUFCU0hTICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NQUJTSFMgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTUFEREFDQ1MgKGFjYywgYWNjKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01BRERBQ0NTICg8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NQUREQUNDUyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnN3MSBfX01BRERIU1MgKHN3MSwgc3cxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01BRERIU1MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1BRERIU1MgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmM8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MSBfX01BRERIVVMgKHV3MSwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01BRERIVVMgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1BRERIVVMgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmM8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MSBfX01BTkQgKHV3MSwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01BTkQgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1BTkQgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmM8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnZvaWQgX19NQVNBQ0NTIChhY2MsIGFjYyk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NQVNBQ0NTICg8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NQVNBQ0NTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUFWRUggKHV3MSwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01BVkVIICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NQVZFSCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcyIF9fTUJUT0ggKHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5iPC92YXI+PGNvZGU+ID0gX19NQlRPSCAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TUJUT0ggPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTUJUT0hFICh1dzEgKiwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01CVE9IRSAoJmFtcDs8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NQlRPSEUgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTUNMUkFDQyAoYWNjKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01DTFJBQ0MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1DTFJBQ0MgPC9jb2RlPjx2YXI+YTwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01DTFJBQ0NBICh2b2lkKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01DTFJBQ0NBICgpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1DTFJBQ0NBPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTWNvcDEgKHV3MSwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01jb3AxICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NY29wMSA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTWNvcDIgKHV3MSwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01jb3AyICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NY29wMiA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUNQTEhJICh1dzIsIGNvbnN0KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01DUExISSAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TUNQTEhJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUNQTEkgKHV3MiwgY29uc3QpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTUNQTEkgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1DUExJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01DUFhJUyAoYWNjLCBzdzEsIHN3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NQ1BYSVMgKDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1DUFhJUyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01DUFhJVSAoYWNjLCB1dzEsIHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NQ1BYSVUgKDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1DUFhJVSA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01DUFhSUyAoYWNjLCBzdzEsIHN3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NQ1BYUlMgKDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1DUFhSUyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01DUFhSVSAoYWNjLCB1dzEsIHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NQ1BYUlUgKDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1DUFhSVSA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUNVVCAoYWNjLCB1dzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTUNVVCAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TUNVVCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUNVVFNTIChhY2MsIHN3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NQ1VUU1MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1DVVRTUyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01EQUREQUNDUyAoYWNjLCBhY2MpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjxjb2RlPl9fTURBRERBQ0NTICg8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NREFEREFDQ1MgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTURBU0FDQ1MgKGFjYywgYWNjKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01EQVNBQ0NTICg8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NREFTQUNDUyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MiBfX01EQ1VUU1NJIChhY2MsIGNvbnN0KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01EQ1VUU1NJICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NRENVVFNTSSA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCM8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmM8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MiBfX01EUEFDS0ggKHV3MiwgdXcyKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01EUEFDS0ggKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1EUEFDS0ggPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmM8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MiBfX01EUk9UTEkgKHV3MiwgY29uc3QpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTURST1RMSSAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TURST1RMSSA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCM8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmM8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnZvaWQgX19NRFNVQkFDQ1MgKGFjYywgYWNjKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01EU1VCQUNDUyAoPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TURTVUJBQ0NTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01EVU5QQUNLSCAodXcxICosIHV3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NRFVOUEFDS0ggKCZhbXA7PC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TURVTlBBQ0tIIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcyIF9fTUVYUERIRCAodXcxLCBjb25zdCk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NRVhQREhEICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NRVhQREhEIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUVYUERIVyAodXcxLCBjb25zdCk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NRVhQREhXICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NRVhQREhXIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUhEU0VUSCAodXcxLCBjb25zdCk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NSERTRVRIICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NSERTRVRIIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+c3cxIF9fTUhEU0VUUyAoY29uc3QpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YjwvdmFyPjxjb2RlPiA9IF9fTUhEU0VUUyAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TUhEU0VUUyAjPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzEgX19NSFNFVEhJSCAodXcxLCBjb25zdCk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5iPC92YXI+PGNvZGU+ID0gX19NSFNFVEhJSCAoPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TUhTRVRISUggIzwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+c3cxIF9fTUhTRVRISVMgKHN3MSwgY29uc3QpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YjwvdmFyPjxjb2RlPiA9IF9fTUhTRVRISVMgKDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1IU0VUSElTICM8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MSBfX01IU0VUTE9IICh1dzEsIGNvbnN0KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmI8L3Zhcj48Y29kZT4gPSBfX01IU0VUTE9IICg8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NSFNFVExPSCAjPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzEgX19NSFNFVExPUyAoc3cxLCBjb25zdCk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5iPC92YXI+PGNvZGU+ID0gX19NSFNFVExPUyAoPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TUhTRVRMT1MgIzwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTUhUT0IgKHV3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5iPC92YXI+PGNvZGU+ID0gX19NSFRPQiAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TUhUT0IgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTU1BQ0hTIChhY2MsIHN3MSwgc3cxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01NQUNIUyAoPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TU1BQ0hTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTU1BQ0hVIChhY2MsIHV3MSwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01NQUNIVSAoPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TU1BQ0hVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTU1SREhTIChhY2MsIHN3MSwgc3cxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01NUkRIUyAoPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TU1SREhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTU1SREhVIChhY2MsIHV3MSwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01NUkRIVSAoPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TU1SREhVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTU1VTEhTIChhY2MsIHN3MSwgc3cxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01NVUxIUyAoPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TU1VTEhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTU1VTEhVIChhY2MsIHV3MSwgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01NVUxIVSAoPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TU1VTEhVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTU1VTFhIUyAoYWNjLCBzdzEsIHN3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NTVVMWEhTICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NTVVMWEhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTU1VTFhIVSAoYWNjLCB1dzEsIHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NTVVMWEhVICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NTVVMWEhVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzEgX19NTk9UICh1dzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YjwvdmFyPjxjb2RlPiA9IF9fTU5PVCAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TU5PVCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MSBfX01PUiAodXcxLCB1dzEpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTU9SICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NT1IgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmM8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MSBfX01QQUNLSCAodWgsIHVoKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01QQUNLSCAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVBBQ0tIIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzIgX19NUUFEREhTUyAoc3cyLCBzdzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTVFBRERIU1MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RQURESFNTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzIgX19NUUFEREhVUyAodXcyLCB1dzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTVFBRERIVVMgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RQURESFVTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFDUFhJUyAoYWNjLCBzdzIsIHN3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NUUNQWElTICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUUNQWElTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFDUFhJVSAoYWNjLCB1dzIsIHV3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NUUNQWElVICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUUNQWElVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFDUFhSUyAoYWNjLCBzdzIsIHN3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NUUNQWFJTICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUUNQWFJTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFDUFhSVSAoYWNjLCB1dzIsIHV3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NUUNQWFJVICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUUNQWFJVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzIgX19NUUxDTFJIUyAoc3cyLCBzdzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTVFMQ0xSSFMgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RTENMUkhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzIgX19NUUxNVEhTIChzdzIsIHN3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NUUxNVEhTICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUUxNVEhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFNQUNIUyAoYWNjLCBzdzIsIHN3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NUU1BQ0hTICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUU1BQ0hTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFNQUNIVSAoYWNjLCB1dzIsIHV3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NUU1BQ0hVICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUU1BQ0hVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFNQUNYSFMgKGFjYywgc3cyLCBzdzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjxjb2RlPl9fTVFNQUNYSFMgKDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RTUFDWEhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFNVUxIUyAoYWNjLCBzdzIsIHN3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NUU1VTEhTICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUU1VTEhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFNVUxIVSAoYWNjLCB1dzIsIHV3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NUU1VTEhVICg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUU1VTEhVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFNVUxYSFMgKGFjYywgc3cyLCBzdzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjxjb2RlPl9fTVFNVUxYSFMgKDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RTVVMWEhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFNVUxYSFUgKGFjYywgdXcyLCB1dzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjxjb2RlPl9fTVFNVUxYSFUgKDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RTVVMWEhVIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzIgX19NUVNBVEhTIChzdzIsIHN3Mik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NUVNBVEhTICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUVNBVEhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzIgX19NUVNMTEhJICh1dzIsIGludCk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NUVNMTEhJICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUVNMTEhJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzIgX19NUVNSQUhJIChzdzIsIGludCk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NUVNSQUhJICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUVNSQUhJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzIgX19NUVNVQkhTUyAoc3cyLCBzdzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTVFTVUJIU1MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RU1VCSFNTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzIgX19NUVNVQkhVUyAodXcyLCB1dzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjx2YXI+YzwvdmFyPjxjb2RlPiA9IF9fTVFTVUJIVVMgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RU1VCSFVTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFYTUFDSFMgKGFjYywgc3cyLCBzdzIpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjxjb2RlPl9fTVFYTUFDSFMgKDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1RWE1BQ0hTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVFYTUFDWEhTIChhY2MsIHN3Miwgc3cyKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01RWE1BQ1hIUyAoPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVFYTUFDWEhTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzEgX19NUkRBQ0MgKGFjYyk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5iPC92YXI+PGNvZGU+ID0gX19NUkRBQ0MgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1SREFDQyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MSBfX01SREFDQ0cgKGFjYyk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5iPC92YXI+PGNvZGU+ID0gX19NUkRBQ0NHICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NUkRBQ0NHIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTVJPVExJICh1dzEsIGNvbnN0KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01ST1RMSSAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVJPVExJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTVJPVFJJICh1dzEsIGNvbnN0KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01ST1RSSSAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVJPVFJJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+c3cxIF9fTVNBVEhTIChzdzEsIHN3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NU0FUSFMgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1TQVRIUyA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTVNBVEhVICh1dzEsIHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NU0FUSFUgKDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1TQVRIVSA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTVNMTEhJICh1dzEsIGNvbnN0KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01TTExISSAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVNMTEhJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+c3cxIF9fTVNSQUhJIChzdzEsIGNvbnN0KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01TUkFISSAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVNSQUhJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dXcxIF9fTVNSTEhJICh1dzEsIGNvbnN0KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmM8L3Zhcj48Y29kZT4gPSBfX01TUkxISSAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVNSTEhJIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIzwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YzwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01TVUJBQ0NTIChhY2MsIGFjYyk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PGNvZGU+X19NU1VCQUNDUyAoPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVNVQkFDQ1MgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT5zdzEgX19NU1VCSFNTIChzdzEsIHN3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NU1VCSFNTICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NU1VCSFNTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzEgX19NU1VCSFVTICh1dzEsIHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NU1VCSFVTICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NU1VCSFVTIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT52b2lkIF9fTVRSQVAgKHZvaWQpPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMiUiPjxjb2RlPl9fTVRSQVAgKCk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVRSQVA8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzIgX19NVU5QQUNLSCAodXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48dmFyPmI8L3Zhcj48Y29kZT4gPSBfX01VTlBBQ0tIICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NVU5QQUNLSCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmI8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnV3MSBfX01XQ1VUICh1dzIsIHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NV0NVVCAoPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVdDVVQgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmM8L3Zhcj4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPjxjb2RlPnZvaWQgX19NV1RBQ0MgKGFjYywgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01XVEFDQyAoPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIzJSI+PGNvZGU+TVdUQUNDIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+PGNvZGU+dm9pZCBfX01XVEFDQ0cgKGFjYywgdXcxKTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzIlIj48Y29kZT5fX01XVEFDQ0cgKDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4pPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMyUiPjxjb2RlPk1XVEFDQ0cgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5iPC92YXI+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj48Y29kZT51dzEgX19NWE9SICh1dzEsIHV3MSk8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMyJSI+PHZhcj5jPC92YXI+PGNvZGU+ID0gX19NWE9SICg8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjMlIj48Y29kZT5NWE9SIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5jPC92YXI+CisgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EaXJlY3RvcnktT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EaXJlY3RvcnktT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNWRiYTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RpcmVjdG9yeS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRpcmVjdG9yeSBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyIgdGl0bGU9Ikludm9raW5nIEdDQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyIgdGl0bGU9IkxpbmsgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNwZWMtRmlsZXMuaHRtbCNTcGVjLUZpbGVzIiB0aXRsZT0iU3BlYyBGaWxlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEaXJlY3RvcnktT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTcGVjLUZpbGVzLmh0bWwjU3BlYy1GaWxlcyI+U3BlYyBGaWxlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjE0IE9wdGlvbnMgZm9yIERpcmVjdG9yeSBTZWFyY2g8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1kaXJlY3Rvcnktb3B0aW9ucy0xMDU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLWRpcmVjdG9yeS1zZWFyY2gtMTA1NSI+PC9hPjxhIG5hbWU9ImluZGV4LXNlYXJjaC1wYXRoLTEwNTYiPjwvYT4KK1RoZXNlIG9wdGlvbnMgc3BlY2lmeSBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcywgZm9yCitsaWJyYXJpZXMgYW5kIGZvciBwYXJ0cyBvZiB0aGUgY29tcGlsZXI6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1JPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LUktMTA1NyI+PC9hPkFkZCB0aGUgZGlyZWN0b3J5IDx2YXI+ZGlyPC92YXI+IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJlCitzZWFyY2hlZCBmb3IgaGVhZGVyIGZpbGVzLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhIHN5c3RlbSBoZWFkZXIKK2ZpbGUsIHN1YnN0aXR1dGluZyB5b3VyIG93biB2ZXJzaW9uLCBzaW5jZSB0aGVzZSBkaXJlY3RvcmllcyBhcmUKK3NlYXJjaGVkIGJlZm9yZSB0aGUgc3lzdGVtIGhlYWRlciBmaWxlIGRpcmVjdG9yaWVzLiAgSG93ZXZlciwgeW91IHNob3VsZAorbm90IHVzZSB0aGlzIG9wdGlvbiB0byBhZGQgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIHZlbmRvci1zdXBwbGllZAorc3lzdGVtIGhlYWRlciBmaWxlcyAodXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pc3lzdGVtPC9zcGFuPjwvc2FtcD4gZm9yIHRoYXQpLiAgSWYgeW91IHVzZSBtb3JlIHRoYW4KK29uZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgdGhlIGRpcmVjdG9yaWVzIGFyZSBzY2FubmVkIGluIGxlZnQtdG8tcmlnaHQKK29yZGVyOyB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzIGNvbWUgYWZ0ZXIuCisKKyAgICAgPHA+SWYgYSBzdGFuZGFyZCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnksIG9yIGEgZGlyZWN0b3J5IHNwZWNpZmllZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3RlbTwvc3Bhbj48L3NhbXA+LCBpcyBhbHNvIHNwZWNpZmllZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4sIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+CitvcHRpb24gaXMgaWdub3JlZC4gIFRoZSBkaXJlY3RvcnkgaXMgc3RpbGwgc2VhcmNoZWQgYnV0IGFzIGEKK3N5c3RlbSBkaXJlY3RvcnkgYXQgaXRzIG5vcm1hbCBwb3NpdGlvbiBpbiB0aGUgc3lzdGVtIGluY2x1ZGUgY2hhaW4uIAorVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBHQ0MncyBwcm9jZWR1cmUgdG8gZml4IGJ1Z2d5IHN5c3RlbSBoZWFkZXJzIGFuZAordGhlIG9yZGVyaW5nIGZvciB0aGUgPGNvZGU+aW5jbHVkZV9uZXh0PC9jb2RlPiBkaXJlY3RpdmUgYXJlIG5vdCBpbmFkdmVydGVudGx5IGNoYW5nZWQuIAorSWYgeW91IHJlYWxseSBuZWVkIHRvIGNoYW5nZSB0aGUgc2VhcmNoIG9yZGVyIGZvciBzeXN0ZW0gZGlyZWN0b3JpZXMsCit1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub3N0ZGluYzwvc3Bhbj48L3NhbXA+IGFuZC9vciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3RlbTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4taXBsdWdpbmRpcj08L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+U2V0IHRoZSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciBwbHVnaW5zIHRoYXQgYXJlIHBhc3NlZAorYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwbHVnaW49PC9zcGFuPjx2YXI+bmFtZTwvdmFyPjwvc2FtcD4gaW5zdGVhZCBvZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwbHVnaW49PC9zcGFuPjx2YXI+cGF0aDwvdmFyPjxzcGFuIGNsYXNzPSJvcHRpb24iPi88L3NwYW4+PHZhcj5uYW1lPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LnNvPC9zcGFuPjwvc2FtcD4uICBUaGlzIG9wdGlvbiBpcyBub3QgbWVhbnQKK3RvIGJlIHVzZWQgYnkgdGhlIHVzZXIsIGJ1dCBvbmx5IHBhc3NlZCBieSB0aGUgZHJpdmVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWlxdW90ZTwvY29kZT48dmFyPmRpcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1pcXVvdGUtMTA1OCI+PC9hPkFkZCB0aGUgZGlyZWN0b3J5IDx2YXI+ZGlyPC92YXI+IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvCitiZSBzZWFyY2hlZCBmb3IgaGVhZGVyIGZpbGVzIG9ubHkgZm9yIHRoZSBjYXNlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGUKKyI8L3NwYW4+PHZhcj5maWxlPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiI8L3NwYW4+PC9zYW1wPiZyc3F1bzs7IHRoZXkgYXJlIG5vdCBzZWFyY2hlZCBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZSAmbHQ7PC9zcGFuPjx2YXI+ZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorb3RoZXJ3aXNlIGp1c3QgbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUw8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtTC0xMDU5Ij48L2E+QWRkIGRpcmVjdG9yeSA8dmFyPmRpcjwvdmFyPiB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZAorZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tQjwvY29kZT48dmFyPnByZWZpeDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1CLTEwNjAiPjwvYT5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hlcmUgdG8gZmluZCB0aGUgZXhlY3V0YWJsZXMsIGxpYnJhcmllcywKK2luY2x1ZGUgZmlsZXMsIGFuZCBkYXRhIGZpbGVzIG9mIHRoZSBjb21waWxlciBpdHNlbGYuCisKKyAgICAgPHA+VGhlIGNvbXBpbGVyIGRyaXZlciBwcm9ncmFtIHJ1bnMgb25lIG9yIG1vcmUgb2YgdGhlIHN1YnByb2dyYW1zCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y3BwPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jYzE8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmFzPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+LiAgSXQgdHJpZXMKKzx2YXI+cHJlZml4PC92YXI+IGFzIGEgcHJlZml4IGZvciBlYWNoIHByb2dyYW0gaXQgdHJpZXMgdG8gcnVuLCBib3RoIHdpdGggYW5kCit3aXRob3V0ICZsc3F1bzs8c2FtcD48dmFyPm1hY2hpbmU8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Lzwvc3Bhbj48dmFyPnZlcnNpb248L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Lzwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoc2VlIDxhIGhyZWY9IlRhcmdldC1PcHRpb25zLmh0bWwjVGFyZ2V0LU9wdGlvbnMiPlRhcmdldCBPcHRpb25zPC9hPikuCisKKyAgICAgPHA+Rm9yIGVhY2ggc3VicHJvZ3JhbSB0byBiZSBydW4sIHRoZSBjb21waWxlciBkcml2ZXIgZmlyc3QgdHJpZXMgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQjwvc3Bhbj48L3NhbXA+IHByZWZpeCwgaWYgYW55LiAgSWYgdGhhdCBuYW1lIGlzIG5vdCBmb3VuZCwgb3IgaWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUI8L3NwYW4+PC9zYW1wPgoraXMgbm90IHNwZWNpZmllZCwgdGhlIGRyaXZlciB0cmllcyB0d28gc3RhbmRhcmQgcHJlZml4ZXMsCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9saWIvZ2NjLzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9sb2NhbC9saWIvZ2NjLzwvc3Bhbj48L3NhbXA+LiAgSWYgbmVpdGhlciBvZgordGhvc2UgcmVzdWx0cyBpbiBhIGZpbGUgbmFtZSB0aGF0IGlzIGZvdW5kLCB0aGUgdW5tb2RpZmllZCBwcm9ncmFtCituYW1lIGlzIHNlYXJjaGVkIGZvciB1c2luZyB0aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHlvdXIKKzxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPlBBVEg8L3NwYW4+PC9zYW1wPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICA8cD5UaGUgY29tcGlsZXIgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcGF0aCBwcm92aWRlZCBieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUI8L3NwYW4+PC9zYW1wPgorcmVmZXJzIHRvIGEgZGlyZWN0b3J5LCBhbmQgaWYgbmVjZXNzYXJ5IGl0IGFkZHMgYSBkaXJlY3RvcnkKK3NlcGFyYXRvciBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aC4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQjwvc3Bhbj48L3NhbXA+IHByZWZpeGVzIHRoYXQgZWZmZWN0aXZlbHkgc3BlY2lmeSBkaXJlY3RvcnkgbmFtZXMgYWxzbyBhcHBseQordG8gbGlicmFyaWVzIGluIHRoZSBsaW5rZXIsIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHRyYW5zbGF0ZXMgdGhlc2UKK29wdGlvbnMgaW50byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgZm9yIHRoZSBsaW5rZXIuICBUaGV5IGFsc28gYXBwbHkgdG8KK2luY2x1ZGVzIGZpbGVzIGluIHRoZSBwcmVwcm9jZXNzb3IsIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHRyYW5zbGF0ZXMgdGhlc2UKK29wdGlvbnMgaW50byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3RlbTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgZm9yIHRoZSBwcmVwcm9jZXNzb3IuICBJbiB0aGlzIGNhc2UsCit0aGUgY29tcGlsZXIgYXBwZW5kcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmluY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gdGhlIHByZWZpeC4KKworICAgICA8cD5UaGUgcnVudGltZSBzdXBwb3J0IGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYy5hPC9zcGFuPjwvc2FtcD4gY2FuIGFsc28gYmUgc2VhcmNoZWQgZm9yIHVzaW5nCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUI8L3NwYW4+PC9zYW1wPiBwcmVmaXgsIGlmIG5lZWRlZC4gIElmIGl0IGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIHR3bworc3RhbmRhcmQgcHJlZml4ZXMgYWJvdmUgYXJlIHRyaWVkLCBhbmQgdGhhdCBpcyBhbGwuICBUaGUgZmlsZSBpcyBsZWZ0CitvdXQgb2YgdGhlIGxpbmsgaWYgaXQgaXMgbm90IGZvdW5kIGJ5IHRob3NlIG1lYW5zLgorCisgICAgIDxwPkFub3RoZXIgd2F5IHRvIHNwZWNpZnkgYSBwcmVmaXggbXVjaCBsaWtlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQjwvc3Bhbj48L3NhbXA+IHByZWZpeCBpcyB0byB1c2UKK3RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HQ0NfRVhFQ19QUkVGSVg8L3NwYW4+PC9zYW1wPi4gIFNlZSA8YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT4uCisKKyAgICAgPHA+QXMgYSBzcGVjaWFsIGtsdWRnZSwgaWYgdGhlIHBhdGggcHJvdmlkZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUI8L3NwYW4+PC9zYW1wPiBpcworPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPltkaXIvXXN0YWdlPC9zcGFuPjx2YXI+TjwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4vPC9zcGFuPjwvc2FtcD4sIHdoZXJlIDx2YXI+TjwvdmFyPiBpcyBhIG51bWJlciBpbiB0aGUgcmFuZ2UgMCB0bworOSwgdGhlbiBpdCBpcyByZXBsYWNlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+W2Rpci9daW5jbHVkZTwvc3Bhbj48L3NhbXA+LiAgVGhpcyBpcyB0byBoZWxwCit3aXRoIGJvb3Qtc3RyYXBwaW5nIHRoZSBjb21waWxlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1zcGVjcz08L2NvZGU+PHZhcj5maWxlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LXNwZWNzLTEwNjEiPjwvYT5Qcm9jZXNzIDx2YXI+ZmlsZTwvdmFyPiBhZnRlciB0aGUgY29tcGlsZXIgcmVhZHMgaW4gdGhlIHN0YW5kYXJkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zcGVjczwvc3Bhbj48L3NhbXA+CitmaWxlLCBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMgd2hpY2ggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiBkcml2ZXIKK3Byb2dyYW0gdXNlcyB3aGVuIGRldGVybWluaW5nIHdoYXQgc3dpdGNoZXMgdG8gcGFzcyB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y2MxPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y2MxcGx1czwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YXM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4sIGV0Yy4gIE1vcmUgdGhhbiBvbmUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zcGVjcz08L3NwYW4+PHZhcj5maWxlPC92YXI+PC9zYW1wPiBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGV5CithcmUgcHJvY2Vzc2VkIGluIG9yZGVyLCBmcm9tIGxlZnQgdG8gcmlnaHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXN5c3Jvb3Q9PC9jb2RlPjx2YXI+ZGlyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LXN5c3Jvb3QtMTA2MiI+PC9hPlVzZSA8dmFyPmRpcjwvdmFyPiBhcyB0aGUgbG9naWNhbCByb290IGRpcmVjdG9yeSBmb3IgaGVhZGVycyBhbmQgbGlicmFyaWVzLiAKK0ZvciBleGFtcGxlLCBpZiB0aGUgY29tcGlsZXIgbm9ybWFsbHkgc2VhcmNoZXMgZm9yIGhlYWRlcnMgaW4KKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vdXNyL2luY2x1ZGU8L3NwYW4+PC9zYW1wPiBhbmQgbGlicmFyaWVzIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vdXNyL2xpYjwvc3Bhbj48L3NhbXA+LCBpdCBpbnN0ZWFkCitzZWFyY2hlcyA8c2FtcD48dmFyPmRpcjwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4vdXNyL2luY2x1ZGU8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHZhcj5kaXI8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9saWI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5JZiB5b3UgdXNlIGJvdGggdGhpcyBvcHRpb24gYW5kIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBvcHRpb24sIHRoZW4KK3RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBvcHRpb24gYXBwbGllcyB0byBsaWJyYXJpZXMsIGJ1dCB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pc3lzcm9vdDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBhcHBsaWVzIHRvIGhlYWRlciBmaWxlcy4KKworICAgICA8cD5UaGUgR05VIGxpbmtlciAoYmVnaW5uaW5nIHdpdGggdmVyc2lvbiAyLjE2KSBoYXMgdGhlIG5lY2Vzc2FyeSBzdXBwb3J0Citmb3IgdGhpcyBvcHRpb24uICBJZiB5b3VyIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3B0aW9uLCB0aGUKK2hlYWRlciBmaWxlIGFzcGVjdCBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBzdGlsbCB3b3JrcywgYnV0IHRoZQorbGlicmFyeSBhc3BlY3QgZG9lcyBub3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLW5vLXN5c3Jvb3Qtc3VmZml4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ub18wMDJkc3lzcm9vdF8wMDJkc3VmZml4LTEwNjMiPjwvYT5Gb3Igc29tZSB0YXJnZXRzLCBhIHN1ZmZpeCBpcyBhZGRlZCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgc3BlY2lmaWVkCit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3lzcm9vdDwvc3Bhbj48L3NhbXA+LCBkZXBlbmRpbmcgb24gdGhlIG90aGVyIG9wdGlvbnMgdXNlZCwgc28gdGhhdAoraGVhZGVycyBtYXkgZm9yIGV4YW1wbGUgYmUgZm91bmQgaW4KKzxzYW1wPjx2YXI+ZGlyPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi88L3NwYW4+PHZhcj5zdWZmaXg8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9pbmNsdWRlPC9zcGFuPjwvc2FtcD4gaW5zdGVhZCBvZgorPHNhbXA+PHZhcj5kaXI8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9pbmNsdWRlPC9zcGFuPjwvc2FtcD4uICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGUgYWRkaXRpb24gb2YKK3N1Y2ggYSBzdWZmaXguCisKKyAgICAgPGJyPjxkdD48Y29kZT4tSS08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUlfMDAyZC0xMDY0Ij48L2E+VGhpcyBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4gIFBsZWFzZSB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlxdW90ZTwvc3Bhbj48L3NhbXA+IGluc3RlYWQgZm9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGRpcmVjdG9yaWVzIGJlZm9yZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUktPC9zcGFuPjwvc2FtcD4gYW5kIHJlbW92ZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUktPC9zcGFuPjwvc2FtcD4uIAorQW55IGRpcmVjdG9yaWVzIHlvdSBzcGVjaWZ5IHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGJlZm9yZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUktPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBhcmUgc2VhcmNoZWQgb25seSBmb3IgdGhlIGNhc2Ugb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZSAiPC9zcGFuPjx2YXI+ZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4iPC9zcGFuPjwvc2FtcD4mcnNxdW87OwordGhleSBhcmUgbm90IHNlYXJjaGVkIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlICZsdDs8L3NwYW4+PHZhcj5maWxlPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+SWYgYWRkaXRpb25hbCBkaXJlY3RvcmllcyBhcmUgc3BlY2lmaWVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFmdGVyCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUktPC9zcGFuPjwvc2FtcD4sIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBmb3IgYWxsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2luY2x1ZGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2RpcmVjdGl2ZXMuICAoT3JkaW5hcmlseSA8ZW0+YWxsPC9lbT4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBkaXJlY3RvcmllcyBhcmUgdXNlZAordGhpcyB3YXkuKQorCisgICAgIDxwPkluIGFkZGl0aW9uLCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUktPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGluaGliaXRzIHRoZSB1c2Ugb2YgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSAod2hlcmUgdGhlIGN1cnJlbnQgaW5wdXQgZmlsZSBjYW1lIGZyb20pIGFzIHRoZSBmaXJzdCBzZWFyY2gKK2RpcmVjdG9yeSBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZSAiPC9zcGFuPjx2YXI+ZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4iPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlcmUgaXMgbm8gd2F5IHRvCitvdmVycmlkZSB0aGlzIGVmZmVjdCBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSS08L3NwYW4+PC9zYW1wPi4gIFdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUkuPC9zcGFuPjwvc2FtcD4geW91IGNhbiBzcGVjaWZ5CitzZWFyY2hpbmcgdGhlIGRpcmVjdG9yeSB0aGF0IGlzIGN1cnJlbnQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2ludm9rZWQuICBUaGF0IGlzIG5vdCBleGFjdGx5IHRoZSBzYW1lIGFzIHdoYXQgdGhlIHByZXByb2Nlc3NvciBkb2VzCitieSBkZWZhdWx0LCBidXQgaXQgaXMgb2Z0ZW4gc2F0aXNmYWN0b3J5LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JLTwvc3Bhbj48L3NhbXA+IGRvZXMgbm90IGluaGliaXQgdGhlIHVzZSBvZiB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzCitmb3IgaGVhZGVyIGZpbGVzLiAgVGh1cywgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUktPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub3N0ZGluYzwvc3Bhbj48L3NhbXA+IGFyZQoraW5kZXBlbmRlbnQuIAorPC9kbD4KKworPCEtLSBtYW4gZW5kIC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRGlzYXBwb2ludG1lbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Rpc2FwcG9pbnRtZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzM2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Rpc2FwcG9pbnRtZW50cy5odG1sCkBAIC0wLDAgKzEsMTQ1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EaXNhcHBvaW50bWVudHMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiIHRpdGxlPSJUcm91YmxlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3RhbmRhcmQtTGlicmFyaWVzLmh0bWwjU3RhbmRhcmQtTGlicmFyaWVzIiB0aXRsZT0iU3RhbmRhcmQgTGlicmFyaWVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MuaHRtbCNDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncyIgdGl0bGU9IkMrKyBNaXN1bmRlcnN0YW5kaW5ncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEaXNhcHBvaW50bWVudHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MuaHRtbCNDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncyI+QysrIE1pc3VuZGVyc3RhbmRpbmdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3RhbmRhcmQtTGlicmFyaWVzLmh0bWwjU3RhbmRhcmQtTGlicmFyaWVzIj5TdGFuZGFyZCBMaWJyYXJpZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSI+VHJvdWJsZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjExLjYgRGlzYXBwb2ludG1lbnRzIGFuZCBNaXN1bmRlcnN0YW5kaW5nczwvaDM+CisKKzxwPlRoZXNlIHByb2JsZW1zIGFyZSBwZXJoYXBzIHJlZ3JldHRhYmxlLCBidXQgd2UgZG9uJ3Qga25vdyBhbnkgcHJhY3RpY2FsCit3YXkgYXJvdW5kIHRoZW0uCisKKyAgICAgPHVsPgorPGxpPkNlcnRhaW4gbG9jYWwgdmFyaWFibGVzIGFyZW4ndCByZWNvZ25pemVkIGJ5IGRlYnVnZ2VycyB3aGVuIHlvdSBjb21waWxlCit3aXRoIG9wdGltaXphdGlvbi4KKworICAgICA8cD5UaGlzIG9jY3VycyBiZWNhdXNlIHNvbWV0aW1lcyBHQ0Mgb3B0aW1pemVzIHRoZSB2YXJpYWJsZSBvdXQgb2YKK2V4aXN0ZW5jZS4gIFRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHRoZSBkZWJ1Z2dlciBob3cgdG8gY29tcHV0ZSB0aGUKK3ZhbHVlIHN1Y2ggYSB2YXJpYWJsZSAmbGRxdW87d291bGQgaGF2ZSBoYWQmcmRxdW87LCBhbmQgaXQgaXMgbm90IGNsZWFyIHRoYXQgd291bGQKK2JlIGRlc2lyYWJsZSBhbnl3YXkuICBTbyBHQ0Mgc2ltcGx5IGRvZXMgbm90IG1lbnRpb24gdGhlIGVsaW1pbmF0ZWQKK3ZhcmlhYmxlIHdoZW4gaXQgd3JpdGVzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKworICAgICA8cD5Zb3UgaGF2ZSB0byBleHBlY3QgYSBjZXJ0YWluIGFtb3VudCBvZiBkaXNhZ3JlZW1lbnQgYmV0d2VlbiB0aGUKK2V4ZWN1dGFibGUgYW5kIHlvdXIgc291cmNlIGNvZGUsIHdoZW4geW91IHVzZSBvcHRpbWl6YXRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtY29uZmxpY3RpbmctdHlwZXMtMzU2MyI+PC9hPjxhIG5hbWU9ImluZGV4LXNjb3BlLW9mLWRlY2xhcmF0aW9uLTM1NjQiPjwvYT48bGk+VXNlcnMgb2Z0ZW4gdGhpbmsgaXQgaXMgYSBidWcgd2hlbiBHQ0MgcmVwb3J0cyBhbiBlcnJvciBmb3IgY29kZQorbGlrZSB0aGlzOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGludCBmb28gKHN0cnVjdCBtdW1ibGUgKik7CisgICAgICAgICAgCisgICAgICAgICAgc3RydWN0IG11bWJsZSB7IC4uLiB9OworICAgICAgICAgIAorICAgICAgICAgIGludCBmb28gKHN0cnVjdCBtdW1ibGUgKngpCisgICAgICAgICAgeyAuLi4gfQorPC9wcmU+CisgICAgIDxwPlRoaXMgY29kZSByZWFsbHkgaXMgZXJyb25lb3VzLCBiZWNhdXNlIHRoZSBzY29wZSBvZiA8Y29kZT5zdHJ1Y3QKK211bWJsZTwvY29kZT4gaW4gdGhlIHByb3RvdHlwZSBpcyBsaW1pdGVkIHRvIHRoZSBhcmd1bWVudCBsaXN0IGNvbnRhaW5pbmcgaXQuIAorSXQgZG9lcyBub3QgcmVmZXIgdG8gdGhlIDxjb2RlPnN0cnVjdCBtdW1ibGU8L2NvZGU+IGRlZmluZWQgd2l0aCBmaWxlIHNjb3BlCitpbW1lZGlhdGVseSBiZWxvdyZtZGFzaDt0aGV5IGFyZSB0d28gdW5yZWxhdGVkIHR5cGVzIHdpdGggc2ltaWxhciBuYW1lcyBpbgorZGlmZmVyZW50IHNjb3Blcy4KKworICAgICA8cD5CdXQgaW4gdGhlIGRlZmluaXRpb24gb2YgPGNvZGU+Zm9vPC9jb2RlPiwgdGhlIGZpbGUtc2NvcGUgdHlwZSBpcyB1c2VkCitiZWNhdXNlIHRoYXQgaXMgYXZhaWxhYmxlIHRvIGJlIGluaGVyaXRlZC4gIFRodXMsIHRoZSBkZWZpbml0aW9uIGFuZAordGhlIHByb3RvdHlwZSBkbyBub3QgbWF0Y2gsIGFuZCB5b3UgZ2V0IGFuIGVycm9yLgorCisgICAgIDxwPlRoaXMgYmVoYXZpb3IgbWF5IHNlZW0gc2lsbHksIGJ1dCBpdCdzIHdoYXQgdGhlIElTTyBzdGFuZGFyZCBzcGVjaWZpZXMuIAorSXQgaXMgZWFzeSBlbm91Z2ggZm9yIHlvdSB0byBtYWtlIHlvdXIgY29kZSB3b3JrIGJ5IG1vdmluZyB0aGUKK2RlZmluaXRpb24gb2YgPGNvZGU+c3RydWN0IG11bWJsZTwvY29kZT4gYWJvdmUgdGhlIHByb3RvdHlwZS4gIEl0J3Mgbm90IHdvcnRoCitiZWluZyBpbmNvbXBhdGlibGUgd2l0aCBJU08gQyBqdXN0IHRvIGF2b2lkIGFuIGVycm9yIGZvciB0aGUgZXhhbXBsZQorc2hvd24gYWJvdmUuCisKKyAgICAgPGxpPkFjY2Vzc2VzIHRvIGJpdC1maWVsZHMgZXZlbiBpbiB2b2xhdGlsZSBvYmplY3RzIHdvcmtzIGJ5IGFjY2Vzc2luZyBsYXJnZXIKK29iamVjdHMsIHN1Y2ggYXMgYSBieXRlIG9yIGEgd29yZC4gIFlvdSBjYW5ub3QgcmVseSBvbiB3aGF0IHNpemUgb2YKK29iamVjdCBpcyBhY2Nlc3NlZCBpbiBvcmRlciB0byByZWFkIG9yIHdyaXRlIHRoZSBiaXQtZmllbGQ7IGl0IG1heSBldmVuCit2YXJ5IGZvciBhIGdpdmVuIGJpdC1maWVsZCBhY2NvcmRpbmcgdG8gdGhlIHByZWNpc2UgdXNhZ2UuCisKKyAgICAgPHA+SWYgeW91IGNhcmUgYWJvdXQgY29udHJvbGxpbmcgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBpcyBhY2Nlc3NlZCwgdXNlCit2b2xhdGlsZSBidXQgZG8gbm90IHVzZSBiaXQtZmllbGRzLgorCisgICAgIDxsaT5HQ0MgY29tZXMgd2l0aCBzaGVsbCBzY3JpcHRzIHRvIGZpeCBjZXJ0YWluIGtub3duIHByb2JsZW1zIGluIHN5c3RlbQoraGVhZGVyIGZpbGVzLiAgVGhleSBpbnN0YWxsIGNvcnJlY3RlZCBjb3BpZXMgb2YgdmFyaW91cyBoZWFkZXIgZmlsZXMgaW4KK2Egc3BlY2lhbCBkaXJlY3Rvcnkgd2hlcmUgb25seSBHQ0Mgd2lsbCBub3JtYWxseSBsb29rIGZvciB0aGVtLiAgVGhlCitzY3JpcHRzIGFkYXB0IHRvIHZhcmlvdXMgc3lzdGVtcyBieSBzZWFyY2hpbmcgYWxsIHRoZSBzeXN0ZW0gaGVhZGVyCitmaWxlcyBmb3IgdGhlIHByb2JsZW0gY2FzZXMgdGhhdCB3ZSBrbm93IGFib3V0LgorCisgICAgIDxwPklmIG5ldyBzeXN0ZW0gaGVhZGVyIGZpbGVzIGFyZSBpbnN0YWxsZWQsIG5vdGhpbmcgYXV0b21hdGljYWxseSBhcnJhbmdlcwordG8gdXBkYXRlIHRoZSBjb3JyZWN0ZWQgaGVhZGVyIGZpbGVzLiAgVGhleSBjYW4gYmUgdXBkYXRlZCB1c2luZyB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ta2hlYWRlcnM8L3NwYW4+PC9zYW1wPiBzY3JpcHQgaW5zdGFsbGVkIGluCis8c2FtcD48dmFyPmxpYmV4ZWNkaXI8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+L2djYy88L3NwYW4+PHZhcj50YXJnZXQ8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+Lzwvc3Bhbj48dmFyPnZlcnNpb248L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+L2luc3RhbGwtdG9vbHMvPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50LXByZWNpc2lvbi0zNTY1Ij48L2E+T24gNjgwMDAgYW5kIHg4NiBzeXN0ZW1zLCBmb3IgaW5zdGFuY2UsIHlvdSBjYW4gZ2V0IHBhcmFkb3hpY2FsIHJlc3VsdHMKK2lmIHlvdSB0ZXN0IHRoZSBwcmVjaXNlIHZhbHVlcyBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAgRm9yIGV4YW1wbGUsCit5b3UgY2FuIGZpbmQgdGhhdCBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIHdoaWNoIGlzIG5vdCBhIE5hTiBpcyBub3QgZXF1YWwKK3RvIGl0c2VsZi4gIFRoaXMgcmVzdWx0cyBmcm9tIHRoZSBmYWN0IHRoYXQgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycworaG9sZCBhIGZldyBtb3JlIGJpdHMgb2YgcHJlY2lzaW9uIHRoYW4gZml0IGluIGEgPGNvZGU+ZG91YmxlPC9jb2RlPiBpbiBtZW1vcnkuIAorQ29tcGlsZWQgY29kZSBtb3ZlcyB2YWx1ZXMgYmV0d2VlbiBtZW1vcnkgYW5kIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycworYXQgaXRzIGNvbnZlbmllbmNlLCBhbmQgbW92aW5nIHRoZW0gaW50byBtZW1vcnkgdHJ1bmNhdGVzIHRoZW0uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZmZsb2F0XzAwMmRzdG9yZS0zNTY2Ij48L2E+WW91IGNhbiBwYXJ0aWFsbHkgYXZvaWQgdGhpcyBwcm9ibGVtIGJ5IHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZsb2F0LXN0b3JlPC9zcGFuPjwvc2FtcD4KK29wdGlvbiAoc2VlIDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPikuCisKKyAgICAgPGxpPk9uIEFJWCBhbmQgb3RoZXIgcGxhdGZvcm1zIHdpdGhvdXQgd2VhayBzeW1ib2wgc3VwcG9ydCwgdGVtcGxhdGVzCituZWVkIHRvIGJlIGluc3RhbnRpYXRlZCBleHBsaWNpdGx5IGFuZCBzeW1ib2xzIGZvciBzdGF0aWMgbWVtYmVycworb2YgdGVtcGxhdGVzIHdpbGwgbm90IGJlIGdlbmVyYXRlZC4KKworICAgICA8bGk+T24gQUlYLCBHQ0Mgc2NhbnMgb2JqZWN0IGZpbGVzIGFuZCBsaWJyYXJ5IGFyY2hpdmVzIGZvciBzdGF0aWMKK2NvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgd2hlbiBsaW5raW5nIGFuIGFwcGxpY2F0aW9uIGJlZm9yZSB0aGUKK2xpbmtlciBwcnVuZXMgdW5yZWZlcmVuY2VkIHN5bWJvbHMuICBUaGlzIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZQorQUlYIGxpbmtlciBmcm9tIG1pc3Rha2VubHkgYXNzdW1pbmcgdGhhdCBzdGF0aWMgY29uc3RydWN0b3Igb3IKK2Rlc3RydWN0b3IgYXJlIHVudXNlZCBhbmQgcmVtb3ZpbmcgdGhlbSBiZWZvcmUgdGhlIHNjYW5uaW5nIGNhbiBvY2N1ci4gCitBbGwgc3RhdGljIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgZm91bmQgd2lsbCBiZSByZWZlcmVuY2VkIGV2ZW4KK3Rob3VnaCB0aGUgbW9kdWxlcyBpbiB3aGljaCB0aGV5IG9jY3VyIG1heSBub3QgYmUgdXNlZCBieSB0aGUgcHJvZ3JhbS4gCitUaGlzIG1heSBsZWFkIHRvIGJvdGggaW5jcmVhc2VkIGV4ZWN1dGFibGUgc2l6ZSBhbmQgdW5leHBlY3RlZCBzeW1ib2wKK3JlZmVyZW5jZXMuIAorPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRG9sbGFyLVNpZ25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RvbGxhci1TaWducy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNTRkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0RvbGxhci1TaWducy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRvbGxhciBTaWducyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwMmJfMDAyYi1Db21tZW50cy5odG1sI0NfMDAyYl8wMDJiLUNvbW1lbnRzIiB0aXRsZT0iQysrIENvbW1lbnRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ2hhcmFjdGVyLUVzY2FwZXMuaHRtbCNDaGFyYWN0ZXItRXNjYXBlcyIgdGl0bGU9IkNoYXJhY3RlciBFc2NhcGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRvbGxhci1TaWducyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDaGFyYWN0ZXItRXNjYXBlcy5odG1sI0NoYXJhY3Rlci1Fc2NhcGVzIj5DaGFyYWN0ZXIgRXNjYXBlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNfMDAyYl8wMDJiLUNvbW1lbnRzLmh0bWwjQ18wMDJiXzAwMmItQ29tbWVudHMiPkMrKyBDb21tZW50czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4zNCBEb2xsYXIgU2lnbnMgaW4gSWRlbnRpZmllciBOYW1lczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDI0LTI3NTIiPjwvYT48YSBuYW1lPSJpbmRleC1kb2xsYXItc2lnbnMtaW4taWRlbnRpZmllci1uYW1lcy0yNzUzIj48L2E+PGEgbmFtZT0iaW5kZXgtaWRlbnRpZmllci1uYW1lc18wMDJjLWRvbGxhci1zaWducy1pbi0yNzU0Ij48L2E+CitJbiBHTlUgQywgeW91IG1heSBub3JtYWxseSB1c2UgZG9sbGFyIHNpZ25zIGluIGlkZW50aWZpZXIgbmFtZXMuIAorVGhpcyBpcyBiZWNhdXNlIG1hbnkgdHJhZGl0aW9uYWwgQyBpbXBsZW1lbnRhdGlvbnMgYWxsb3cgc3VjaCBpZGVudGlmaWVycy4gCitIb3dldmVyLCBkb2xsYXIgc2lnbnMgaW4gaWRlbnRpZmllcnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gYSBmZXcgdGFyZ2V0CittYWNoaW5lcywgdHlwaWNhbGx5IGJlY2F1c2UgdGhlIHRhcmdldCBhc3NlbWJsZXIgZG9lcyBub3QgYWxsb3cgdGhlbS4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRHluYW1pY2FsbHktcmVnaXN0ZXJpbmctbWV0aG9kcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9EeW5hbWljYWxseS1yZWdpc3RlcmluZy1tZXRob2RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwNDcwNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRHluYW1pY2FsbHktcmVnaXN0ZXJpbmctbWV0aG9kcy5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkR5bmFtaWNhbGx5IHJlZ2lzdGVyaW5nIG1ldGhvZHMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWVzc2FnaW5nLXdpdGgtdGhlLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS5odG1sI01lc3NhZ2luZy13aXRoLXRoZS1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUiIHRpdGxlPSJNZXNzYWdpbmcgd2l0aCB0aGUgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGb3J3YXJkaW5nLWhvb2suaHRtbCNGb3J3YXJkaW5nLWhvb2siIHRpdGxlPSJGb3J3YXJkaW5nIGhvb2siPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRHluYW1pY2FsbHktcmVnaXN0ZXJpbmctbWV0aG9kcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGb3J3YXJkaW5nLWhvb2suaHRtbCNGb3J3YXJkaW5nLWhvb2siPkZvcndhcmRpbmcgaG9vazwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1lc3NhZ2luZy13aXRoLXRoZS1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUuaHRtbCNNZXNzYWdpbmctd2l0aC10aGUtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lIj5NZXNzYWdpbmcgd2l0aCB0aGUgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj44LjEwLjEgRHluYW1pY2FsbHkgcmVnaXN0ZXJpbmcgbWV0aG9kczwvaDQ+CisKKzxwPklmIDxjb2RlPm9iamNfbXNnX2xvb2t1cCgpPC9jb2RlPiBkb2VzIG5vdCBmaW5kIGEgc3VpdGFibGUgbWV0aG9kCitpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSByZXF1aXJlZAorbWV0aG9kLCBpdCB0cmllcyB0byBzZWUgaWYgdGhlIGNsYXNzIGNhbiBkeW5hbWljYWxseSByZWdpc3RlciB0aGUKK21ldGhvZC4KKworIDxwPlRvIGRvIHNvLCB0aGUgcnVudGltZSBjaGVja3MgaWYgdGhlIGNsYXNzIG9mIHRoZSByZWNlaXZlciBpbXBsZW1lbnRzCit0aGUgbWV0aG9kCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICArIChCT09MKSByZXNvbHZlSW5zdGFuY2VNZXRob2Q6IChTRUwpc2VsZWN0b3I7Cis8L3ByZT4KKyA8cD5pbiB0aGUgY2FzZSBvZiBhbiBpbnN0YW5jZSBtZXRob2QsIG9yCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICArIChCT09MKSByZXNvbHZlQ2xhc3NNZXRob2Q6IChTRUwpc2VsZWN0b3I7Cis8L3ByZT4KKyA8cD5pbiB0aGUgY2FzZSBvZiBhIGNsYXNzIG1ldGhvZC4gIElmIHRoZSBjbGFzcyBpbXBsZW1lbnRzIGl0LCB0aGUKK3J1bnRpbWUgaW52b2tlcyBpdCwgcGFzc2luZyBhcyBhcmd1bWVudCB0aGUgc2VsZWN0b3Igb2YgdGhlIG9yaWdpbmFsCittZXRob2QsIGFuZCBpZiBpdCByZXR1cm5zIDxjb2RlPllFUzwvY29kZT4sIHRoZSBydW50aW1lIHRyaWVzIHRoZSBsb29rdXAKK2FnYWluLCB3aGljaCBjb3VsZCBub3cgc3VjY2VlZCBpZiBhIG1hdGNoaW5nIG1ldGhvZCB3YXMgYWRkZWQKK2R5bmFtaWNhbGx5IGJ5IDxjb2RlPityZXNvbHZlSW5zdGFuY2VNZXRob2Q6PC9jb2RlPiBvcgorPGNvZGU+K3Jlc29sdmVDbGFzc01ldGhvZDo8L2NvZGU+LgorCisgPHA+VGhpcyBhbGxvd3MgY2xhc3NlcyB0byBkeW5hbWljYWxseSByZWdpc3RlciBtZXRob2RzIChieSBhZGRpbmcgdGhlbSB0bwordGhlIGNsYXNzIHVzaW5nIDxjb2RlPmNsYXNzX2FkZE1ldGhvZDwvY29kZT4pIHdoZW4gdGhleSBhcmUgZmlyc3QgY2FsbGVkLiAKK1RvIGRvIHNvLCBhIGNsYXNzIHNob3VsZCBpbXBsZW1lbnQgPGNvZGU+K3Jlc29sdmVJbnN0YW5jZU1ldGhvZDo8L2NvZGU+IChvciwKK2RlcGVuZGluZyBvbiB0aGUgY2FzZSwgPGNvZGU+K3Jlc29sdmVDbGFzc01ldGhvZDo8L2NvZGU+KSBhbmQgaGF2ZSBpdAorcmVjb2duaXplIHRoZSBzZWxlY3RvcnMgb2YgbWV0aG9kcyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGR5bmFtaWNhbGx5CithdCBydW50aW1lLCByZWdpc3RlciB0aGVtLCBhbmQgcmV0dXJuIDxjb2RlPllFUzwvY29kZT4uICBJdCBzaG91bGQgcmV0dXJuCis8Y29kZT5OTzwvY29kZT4gZm9yIG1ldGhvZHMgdGhhdCBpdCBkb2VzIG5vdCBkeW5hbWljYWxseSByZWdpc3RlcmVkIGF0CitydW50aW1lLgorCisgPHA+SWYgPGNvZGU+K3Jlc29sdmVJbnN0YW5jZU1ldGhvZDo8L2NvZGU+IChvciA8Y29kZT4rcmVzb2x2ZUNsYXNzTWV0aG9kOjwvY29kZT4pIGlzCitub3QgaW1wbGVtZW50ZWQgb3IgcmV0dXJucyA8Y29kZT5OTzwvY29kZT4sIHRoZSBydW50aW1lIHRoZW4gdHJpZXMgdGhlCitmb3J3YXJkaW5nIGhvb2suCisKKyA8cD5TdXBwb3J0IGZvciA8Y29kZT4rcmVzb2x2ZUluc3RhbmNlTWV0aG9kOjwvY29kZT4gYW5kCis8Y29kZT5yZXNvbHZlQ2xhc3NNZXRob2Q6PC9jb2RlPiB3YXMgYWRkZWQgdG8gdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIGluCitHQ0MgdmVyc2lvbiA0LjYuCisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0VtcHR5LVN0cnVjdHVyZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRW1wdHktU3RydWN0dXJlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YmZiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0VtcHR5LVN0cnVjdHVyZXMuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FbXB0eSBTdHJ1Y3R1cmVzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilplcm8tTGVuZ3RoLmh0bWwjWmVyby1MZW5ndGgiIHRpdGxlPSJaZXJvIExlbmd0aCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZhcmlhYmxlLUxlbmd0aC5odG1sI1ZhcmlhYmxlLUxlbmd0aCIgdGl0bGU9IlZhcmlhYmxlIExlbmd0aCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFbXB0eS1TdHJ1Y3R1cmVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZhcmlhYmxlLUxlbmd0aC5odG1sI1ZhcmlhYmxlLUxlbmd0aCI+VmFyaWFibGUgTGVuZ3RoPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWmVyby1MZW5ndGguaHRtbCNaZXJvLUxlbmd0aCI+WmVybyBMZW5ndGg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMTggU3RydWN0dXJlcyBXaXRoIE5vIE1lbWJlcnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1lbXB0eS1zdHJ1Y3R1cmVzLTI1MjAiPjwvYT48YSBuYW1lPSJpbmRleC16ZXJvXzAwMmRzaXplLXN0cnVjdHVyZXMtMjUyMSI+PC9hPgorR0NDIHBlcm1pdHMgYSBDIHN0cnVjdHVyZSB0byBoYXZlIG5vIG1lbWJlcnM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdHJ1Y3QgZW1wdHkgeworICAgICB9OworPC9wcmU+CisgPHA+VGhlIHN0cnVjdHVyZSBoYXMgc2l6ZSB6ZXJvLiAgSW4gQysrLCBlbXB0eSBzdHJ1Y3R1cmVzIGFyZSBwYXJ0CitvZiB0aGUgbGFuZ3VhZ2UuICBHKysgdHJlYXRzIGVtcHR5IHN0cnVjdHVyZXMgYXMgaWYgdGhleSBoYWQgYSBzaW5nbGUKK21lbWJlciBvZiB0eXBlIDxjb2RlPmNoYXI8L2NvZGU+LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9FbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllM2ExZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwKQEAgLTAsMCArMSwyMzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVudmlyb25tZW50IFZhcmlhYmxlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiIHRpdGxlPSJJbnZva2luZyBHQ0MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyIgdGl0bGU9IkNvZGUgR2VuIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQcmVjb21waWxlZC1IZWFkZXJzLmh0bWwjUHJlY29tcGlsZWQtSGVhZGVycyIgdGl0bGU9IlByZWNvbXBpbGVkIEhlYWRlcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRW52aXJvbm1lbnQtVmFyaWFibGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlByZWNvbXBpbGVkLUhlYWRlcnMuaHRtbCNQcmVjb21waWxlZC1IZWFkZXJzIj5QcmVjb21waWxlZCBIZWFkZXJzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMTkgRW52aXJvbm1lbnQgVmFyaWFibGVzIEFmZmVjdGluZyBHQ0M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1lbnZpcm9ubWVudC12YXJpYWJsZXMtMjM2OSI+PC9hPgorPCEtLSBtYW4gYmVnaW4gRU5WSVJPTk1FTlQgLS0+CitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNldmVyYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYWZmZWN0IGhvdyBHQ0MKK29wZXJhdGVzLiAgU29tZSBvZiB0aGVtIHdvcmsgYnkgc3BlY2lmeWluZyBkaXJlY3RvcmllcyBvciBwcmVmaXhlcyB0byB1c2UKK3doZW4gc2VhcmNoaW5nIGZvciB2YXJpb3VzIGtpbmRzIG9mIGZpbGVzLiAgU29tZSBhcmUgdXNlZCB0byBzcGVjaWZ5IG90aGVyCithc3BlY3RzIG9mIHRoZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudC4KKworIDxwPk5vdGUgdGhhdCB5b3UgY2FuIGFsc28gc3BlY2lmeSBwbGFjZXMgdG8gc2VhcmNoIHVzaW5nIG9wdGlvbnMgc3VjaCBhcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUw8L3NwYW4+PC9zYW1wPiAoc2VlIDxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiPkRpcmVjdG9yeSBPcHRpb25zPC9hPikuICBUaGVzZQordGFrZSBwcmVjZWRlbmNlIG92ZXIgcGxhY2VzIHNwZWNpZmllZCB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoCitpbiB0dXJuIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRob3NlIHNwZWNpZmllZCBieSB0aGUgY29uZmlndXJhdGlvbiBvZiBHQ0MuIAorU2VlIDxhIGhyZWY9Ii4uL2djY2ludC9Ecml2ZXIuaHRtbCNEcml2ZXIiPkNvbnRyb2xsaW5nIHRoZSBDb21waWxhdGlvbiBEcml2ZXIgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdjYzwvc3Bhbj48L3NhbXA+PC9hPi4KKworICAgICA8ZGw+Cis8ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+TEFORzwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxDX0NUWVBFPC9zcGFuPjwvc2FtcD48ZGQ+PCEtLSBAaXRlbXggTENfQ09MTEFURSAtLT4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5MQ19NRVNTQUdFUzwvc3Bhbj48L3NhbXA+PGRkPjwhLS0gQGl0ZW14IExDX01PTkVUQVJZIC0tPgorPCEtLSBAaXRlbXggTENfTlVNRVJJQyAtLT4KKzwhLS0gQGl0ZW14IExDX1RJTUUgLS0+Cis8ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+TENfQUxMPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtTEFORy0yMzcwIj48L2E+PGEgbmFtZT0iaW5kZXgtTENfMDA1ZkNUWVBFLTIzNzEiPjwvYT48IS0tIEBmaW5kZXggTENfQ09MTEFURSAtLT4KKzxhIG5hbWU9ImluZGV4LUxDXzAwNWZNRVNTQUdFUy0yMzcyIj48L2E+PCEtLSBAZmluZGV4IExDX01PTkVUQVJZIC0tPgorPCEtLSBAZmluZGV4IExDX05VTUVSSUMgLS0+Cis8IS0tIEBmaW5kZXggTENfVElNRSAtLT4KKzxhIG5hbWU9ImluZGV4LUxDXzAwNWZBTEwtMjM3MyI+PC9hPjxhIG5hbWU9ImluZGV4LWxvY2FsZS0yMzc0Ij48L2E+VGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNvbnRyb2wgdGhlIHdheSB0aGF0IEdDQyB1c2VzCitsb2NhbGl6YXRpb24gaW5mb3JtYXRpb24gd2hpY2ggYWxsb3dzIEdDQyB0byB3b3JrIHdpdGggZGlmZmVyZW50CituYXRpb25hbCBjb252ZW50aW9ucy4gIEdDQyBpbnNwZWN0cyB0aGUgbG9jYWxlIGNhdGVnb3JpZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxDX0NUWVBFPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxDX01FU1NBR0VTPC9zcGFuPjwvc2FtcD4gaWYgaXQgaGFzIGJlZW4gY29uZmlndXJlZCB0byBkbworc28uICBUaGVzZSBsb2NhbGUgY2F0ZWdvcmllcyBjYW4gYmUgc2V0IHRvIGFueSB2YWx1ZSBzdXBwb3J0ZWQgYnkgeW91cgoraW5zdGFsbGF0aW9uLiAgQSB0eXBpY2FsIHZhbHVlIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZW5fR0IuVVRGLTg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIEVuZ2xpc2ggaW4gdGhlIFVuaXRlZAorS2luZ2RvbSBlbmNvZGVkIGluIFVURi04LgorCisgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5MQ19DVFlQRTwvc3Bhbj48L3NhbXA+IGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllcyBjaGFyYWN0ZXIKK2NsYXNzaWZpY2F0aW9uLiAgR0NDIHVzZXMgaXQgdG8gZGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgYm91bmRhcmllcyBpbgorYSBzdHJpbmc7IHRoaXMgaXMgbmVlZGVkIGZvciBzb21lIG11bHRpYnl0ZSBlbmNvZGluZ3MgdGhhdCBjb250YWluIHF1b3RlCithbmQgZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBhcmUgb3RoZXJ3aXNlIGludGVycHJldGVkIGFzIGEgc3RyaW5nCitlbmQgb3IgZXNjYXBlLgorCisgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5MQ19NRVNTQUdFUzwvc3Bhbj48L3NhbXA+IGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgbGFuZ3VhZ2UgdG8KK3VzZSBpbiBkaWFnbm9zdGljIG1lc3NhZ2VzLgorCisgICAgIDxwPklmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5MQ19BTEw8L3NwYW4+PC9zYW1wPiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0IG92ZXJyaWRlcyB0aGUgdmFsdWUKK29mIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxDX0NUWVBFPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxDX01FU1NBR0VTPC9zcGFuPjwvc2FtcD47IG90aGVyd2lzZSwgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+TENfQ1RZUEU8L3NwYW4+PC9zYW1wPgorYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxDX01FU1NBR0VTPC9zcGFuPjwvc2FtcD4gZGVmYXVsdCB0byB0aGUgdmFsdWUgb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxBTkc8L3NwYW4+PC9zYW1wPgorZW52aXJvbm1lbnQgdmFyaWFibGUuICBJZiBub25lIG9mIHRoZXNlIHZhcmlhYmxlcyBhcmUgc2V0LCBHQ0MKK2RlZmF1bHRzIHRvIHRyYWRpdGlvbmFsIEMgRW5nbGlzaCBiZWhhdmlvci4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPlRNUERJUjwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LVRNUERJUi0yMzc1Ij48L2E+SWYgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+VE1QRElSPC9zcGFuPjwvc2FtcD4gaXMgc2V0LCBpdCBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byB1c2UgZm9yIHRlbXBvcmFyeQorZmlsZXMuICBHQ0MgdXNlcyB0ZW1wb3JhcnkgZmlsZXMgdG8gaG9sZCB0aGUgb3V0cHV0IG9mIG9uZSBzdGFnZSBvZgorY29tcGlsYXRpb24gd2hpY2ggaXMgdG8gYmUgdXNlZCBhcyBpbnB1dCB0byB0aGUgbmV4dCBzdGFnZTogZm9yIGV4YW1wbGUsCit0aGUgb3V0cHV0IG9mIHRoZSBwcmVwcm9jZXNzb3IsIHdoaWNoIGlzIHRoZSBpbnB1dCB0byB0aGUgY29tcGlsZXIKK3Byb3Blci4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdDQ19DT01QQVJFX0RFQlVHPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtR0NDXzAwNWZDT01QQVJFXzAwNWZERUJVRy0yMzc2Ij48L2E+U2V0dGluZyA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HQ0NfQ09NUEFSRV9ERUJVRzwvc3Bhbj48L3NhbXA+IGlzIG5lYXJseSBlcXVpdmFsZW50IHRvIHBhc3NpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY29tcGFyZS1kZWJ1Zzwvc3Bhbj48L3NhbXA+IHRvIHRoZSBjb21waWxlciBkcml2ZXIuICBTZWUgdGhlIGRvY3VtZW50YXRpb24KK29mIHRoaXMgb3B0aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HQ0NfRVhFQ19QUkVGSVg8L3NwYW4+PC9zYW1wPjxkZD48YSBuYW1lPSJpbmRleC1HQ0NfMDA1ZkVYRUNfMDA1ZlBSRUZJWC0yMzc3Ij48L2E+SWYgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0NDX0VYRUNfUFJFRklYPC9zcGFuPjwvc2FtcD4gaXMgc2V0LCBpdCBzcGVjaWZpZXMgYSBwcmVmaXggdG8gdXNlIGluIHRoZQorbmFtZXMgb2YgdGhlIHN1YnByb2dyYW1zIGV4ZWN1dGVkIGJ5IHRoZSBjb21waWxlci4gIE5vIHNsYXNoIGlzIGFkZGVkCit3aGVuIHRoaXMgcHJlZml4IGlzIGNvbWJpbmVkIHdpdGggdGhlIG5hbWUgb2YgYSBzdWJwcm9ncmFtLCBidXQgeW91IGNhbgorc3BlY2lmeSBhIHByZWZpeCB0aGF0IGVuZHMgd2l0aCBhIHNsYXNoIGlmIHlvdSB3aXNoLgorCisgICAgIDxwPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdDQ19FWEVDX1BSRUZJWDwvc3Bhbj48L3NhbXA+IGlzIG5vdCBzZXQsIEdDQyBhdHRlbXB0cyB0byBmaWd1cmUgb3V0CithbiBhcHByb3ByaWF0ZSBwcmVmaXggdG8gdXNlIGJhc2VkIG9uIHRoZSBwYXRobmFtZSBpdCBpcyBpbnZva2VkIHdpdGguCisKKyAgICAgPHA+SWYgR0NDIGNhbm5vdCBmaW5kIHRoZSBzdWJwcm9ncmFtIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJlZml4LCBpdAordHJpZXMgbG9va2luZyBpbiB0aGUgdXN1YWwgcGxhY2VzIGZvciB0aGUgc3VicHJvZ3JhbS4KKworICAgICA8cD5UaGUgZGVmYXVsdCB2YWx1ZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HQ0NfRVhFQ19QUkVGSVg8L3NwYW4+PC9zYW1wPiBpcworPHNhbXA+PHZhcj5wcmVmaXg8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+L2xpYi9nY2MvPC9zcGFuPjwvc2FtcD4gd2hlcmUgPHZhcj5wcmVmaXg8L3Zhcj4gaXMgdGhlIHByZWZpeCB0bwordGhlIGluc3RhbGxlZCBjb21waWxlci4gSW4gbWFueSBjYXNlcyA8dmFyPnByZWZpeDwvdmFyPiBpcyB0aGUgdmFsdWUKK29mIDxjb2RlPnByZWZpeDwvY29kZT4gd2hlbiB5b3UgcmFuIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlndXJlPC9zcGFuPjwvc2FtcD4gc2NyaXB0LgorCisgICAgIDxwPk90aGVyIHByZWZpeGVzIHNwZWNpZmllZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1CPC9zcGFuPjwvc2FtcD4gdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhpcyBwcmVmaXguCisKKyAgICAgPHA+VGhpcyBwcmVmaXggaXMgYWxzbyB1c2VkIGZvciBmaW5kaW5nIGZpbGVzIHN1Y2ggYXMgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNydDAubzwvc3Bhbj48L3NhbXA+IHRoYXQgYXJlCit1c2VkIGZvciBsaW5raW5nLgorCisgICAgIDxwPkluIGFkZGl0aW9uLCB0aGUgcHJlZml4IGlzIHVzZWQgaW4gYW4gdW51c3VhbCB3YXkgaW4gZmluZGluZyB0aGUKK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgaGVhZGVyIGZpbGVzLiAgRm9yIGVhY2ggb2YgdGhlIHN0YW5kYXJkCitkaXJlY3RvcmllcyB3aG9zZSBuYW1lIG5vcm1hbGx5IGJlZ2lucyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+L3Vzci9sb2NhbC9saWIvZ2NjPC9zcGFuPjwvc2FtcD4mcnNxdW87CisobW9yZSBwcmVjaXNlbHksIHdpdGggdGhlIHZhbHVlIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdDQ19JTkNMVURFX0RJUjwvc3Bhbj48L3NhbXA+KSwgR0NDIHRyaWVzCityZXBsYWNpbmcgdGhhdCBiZWdpbm5pbmcgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCB0byBwcm9kdWNlIGFuCithbHRlcm5hdGUgZGlyZWN0b3J5IG5hbWUuICBUaHVzLCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1CZm9vLzwvc3Bhbj48L3NhbXA+LCBHQ0Mgc2VhcmNoZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5mb28vYmFyPC9zcGFuPjwvc2FtcD4ganVzdCBiZWZvcmUgaXQgc2VhcmNoZXMgdGhlIHN0YW5kYXJkIGRpcmVjdG9yeQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi91c3IvbG9jYWwvbGliL2Jhcjwvc3Bhbj48L3NhbXA+LiAKK0lmIGEgc3RhbmRhcmQgZGlyZWN0b3J5IGJlZ2lucyB3aXRoIHRoZSBjb25maWd1cmVkCis8dmFyPnByZWZpeDwvdmFyPiB0aGVuIHRoZSB2YWx1ZSBvZiA8dmFyPnByZWZpeDwvdmFyPiBpcyByZXBsYWNlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0NDX0VYRUNfUFJFRklYPC9zcGFuPjwvc2FtcD4gd2hlbiBsb29raW5nIGZvciBoZWFkZXIgZmlsZXMuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5DT01QSUxFUl9QQVRIPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtQ09NUElMRVJfMDA1ZlBBVEgtMjM3OCI+PC9hPlRoZSB2YWx1ZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5DT01QSUxFUl9QQVRIPC9zcGFuPjwvc2FtcD4gaXMgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZgorZGlyZWN0b3JpZXMsIG11Y2ggbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5QQVRIPC9zcGFuPjwvc2FtcD4uICBHQ0MgdHJpZXMgdGhlIGRpcmVjdG9yaWVzIHRodXMKK3NwZWNpZmllZCB3aGVuIHNlYXJjaGluZyBmb3Igc3VicHJvZ3JhbXMsIGlmIGl0IGNhbid0IGZpbmQgdGhlCitzdWJwcm9ncmFtcyB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HQ0NfRVhFQ19QUkVGSVg8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxJQlJBUllfUEFUSDwvc3Bhbj48L3NhbXA+PGRkPjxhIG5hbWU9ImluZGV4LUxJQlJBUllfMDA1ZlBBVEgtMjM3OSI+PC9hPlRoZSB2YWx1ZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5MSUJSQVJZX1BBVEg8L3NwYW4+PC9zYW1wPiBpcyBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mCitkaXJlY3RvcmllcywgbXVjaCBsaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPlBBVEg8L3NwYW4+PC9zYW1wPi4gIFdoZW4gY29uZmlndXJlZCBhcyBhIG5hdGl2ZSBjb21waWxlciwKK0dDQyB0cmllcyB0aGUgZGlyZWN0b3JpZXMgdGh1cyBzcGVjaWZpZWQgd2hlbiBzZWFyY2hpbmcgZm9yIHNwZWNpYWwKK2xpbmtlciBmaWxlcywgaWYgaXQgY2FuJ3QgZmluZCB0aGVtIHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdDQ19FWEVDX1BSRUZJWDwvc3Bhbj48L3NhbXA+LiAgTGlua2luZwordXNpbmcgR0NDIGFsc28gdXNlcyB0aGVzZSBkaXJlY3RvcmllcyB3aGVuIHNlYXJjaGluZyBmb3Igb3JkaW5hcnkKK2xpYnJhcmllcyBmb3IgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4gb3B0aW9uIChidXQgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1MPC9zcGFuPjwvc2FtcD4gY29tZSBmaXJzdCkuCisKKyAgICAgPGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5MQU5HPC9zcGFuPjwvc2FtcD48ZGQ+PGEgbmFtZT0iaW5kZXgtTEFORy0yMzgwIj48L2E+PGEgbmFtZT0iaW5kZXgtbG9jYWxlLWRlZmluaXRpb24tMjM4MSI+PC9hPlRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBwYXNzIGxvY2FsZSBpbmZvcm1hdGlvbiB0byB0aGUgY29tcGlsZXIuICBPbmUgd2F5IGluCit3aGljaCB0aGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIGJlIHVzZWQKK3doZW4gY2hhcmFjdGVyIGxpdGVyYWxzLCBzdHJpbmcgbGl0ZXJhbHMgYW5kIGNvbW1lbnRzIGFyZSBwYXJzZWQgaW4gQyBhbmQgQysrLiAKK1doZW4gdGhlIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgdG8gYWxsb3cgbXVsdGlieXRlIGNoYXJhY3RlcnMsCit0aGUgZm9sbG93aW5nIHZhbHVlcyBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+TEFORzwvc3Bhbj48L3NhbXA+IGFyZSByZWNvZ25pemVkOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qy1KSVM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+UmVjb2duaXplIEpJUyBjaGFyYWN0ZXJzLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DLVNKSVM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+UmVjb2duaXplIFNKSVMgY2hhcmFjdGVycy4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qy1FVUNKUDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5SZWNvZ25pemUgRVVDSlAgY2hhcmFjdGVycy4gCis8L2RsPgorCisgICAgIDxwPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkxBTkc8L3NwYW4+PC9zYW1wPiBpcyBub3QgZGVmaW5lZCwgb3IgaWYgaXQgaGFzIHNvbWUgb3RoZXIgdmFsdWUsIHRoZW4gdGhlCitjb21waWxlciB1c2VzIDxjb2RlPm1ibGVuPC9jb2RlPiBhbmQgPGNvZGU+bWJ0b3djPC9jb2RlPiBhcyBkZWZpbmVkIGJ5IHRoZSBkZWZhdWx0IGxvY2FsZSB0bworcmVjb2duaXplIGFuZCB0cmFuc2xhdGUgbXVsdGlieXRlIGNoYXJhY3RlcnMuIAorPC9kbD4KKworPHAgY2xhc3M9Im5vaW5kZW50Ij5Tb21lIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgdGhlCitwcmVwcm9jZXNzb3IuCisKKzwhLS0gQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIENQUCBhbmQgR0NDIG1hbnVhbHMuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgZ2NjLnRleGkuIC0tPgorPCEtLSAgLS0+Cis8IS0tIEVudmlyb25tZW50IHZhcmlhYmxlcyBhZmZlY3RpbmcgdGhlIHByZXByb2Nlc3NvciAtLT4KKzwhLS0gIC0tPgorPCEtLSBJZiB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgd2l0aCB0aGUgZmxhZyBgYGNwcG1hbnVhbCcnIHNldCwgaXQgaXMgLS0+Cis8IS0tIGZvcm1hdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBDUFAgbWFudWFsOyBvdGhlcndpc2UgdGhlIG1haW4gR0NDIG1hbnVhbC4gLS0+CisgICAgIDxkbD4KKzxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5DUEFUSDwvc3Bhbj48L3NhbXA+PGEgbmFtZT0iaW5kZXgtQ1BBVEgtMjM4MiI+PC9hPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5DX0lOQ0xVREVfUEFUSDwvc3Bhbj48L3NhbXA+PGEgbmFtZT0iaW5kZXgtQ18wMDVmSU5DTFVERV8wMDVmUEFUSC0yMzgzIj48L2E+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkNQTFVTX0lOQ0xVREVfUEFUSDwvc3Bhbj48L3NhbXA+PGEgbmFtZT0iaW5kZXgtQ1BMVVNfMDA1ZklOQ0xVREVfMDA1ZlBBVEgtMjM4NCI+PC9hPjxkdD48c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5PQkpDX0lOQ0xVREVfUEFUSDwvc3Bhbj48L3NhbXA+PGEgbmFtZT0iaW5kZXgtT0JKQ18wMDVmSU5DTFVERV8wMDVmUEFUSC0yMzg1Ij48L2E+PGRkPjwhLS0gQ29tbWVudGVkIG91dCB1bnRpbCBPYmpDKysgaXMgcGFydCBvZiBHQ0M6IC0tPgorPCEtLSBAaXRlbXggT0JKQ1BMVVNfSU5DTFVERV9QQVRIIC0tPgorRWFjaCB2YXJpYWJsZSdzIHZhbHVlIGlzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyBzZXBhcmF0ZWQgYnkgYSBzcGVjaWFsCitjaGFyYWN0ZXIsIG11Y2ggbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5QQVRIPC9zcGFuPjwvc2FtcD4sIGluIHdoaWNoIHRvIGxvb2sgZm9yIGhlYWRlciBmaWxlcy4gCitUaGUgc3BlY2lhbCBjaGFyYWN0ZXIsIDxjb2RlPlBBVEhfU0VQQVJBVE9SPC9jb2RlPiwgaXMgdGFyZ2V0LWRlcGVuZGVudCBhbmQKK2RldGVybWluZWQgYXQgR0NDIGJ1aWxkIHRpbWUuICBGb3IgTWljcm9zb2Z0IFdpbmRvd3MtYmFzZWQgdGFyZ2V0cyBpdCBpcyBhCitzZW1pY29sb24sIGFuZCBmb3IgYWxtb3N0IGFsbCBvdGhlciB0YXJnZXRzIGl0IGlzIGEgY29sb24uCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+Q1BBVEg8L3NwYW4+PC9zYW1wPiBzcGVjaWZpZXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkIGFzIGlmCitzcGVjaWZpZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+LCBidXQgYWZ0ZXIgYW55IHBhdGhzIGdpdmVuIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPgorb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1c2VkCityZWdhcmRsZXNzIG9mIHdoaWNoIGxhbmd1YWdlIGlzIGJlaW5nIHByZXByb2Nlc3NlZC4KKworICAgICA8cD5UaGUgcmVtYWluaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcHBseSBvbmx5IHdoZW4gcHJlcHJvY2Vzc2luZyB0aGUKK3BhcnRpY3VsYXIgbGFuZ3VhZ2UgaW5kaWNhdGVkLiAgRWFjaCBzcGVjaWZpZXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzCit0byBiZSBzZWFyY2hlZCBhcyBpZiBzcGVjaWZpZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3RlbTwvc3Bhbj48L3NhbXA+LCBidXQgYWZ0ZXIgYW55CitwYXRocyBnaXZlbiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pc3lzdGVtPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgIDxwPkluIGFsbCB0aGVzZSB2YXJpYWJsZXMsIGFuIGVtcHR5IGVsZW1lbnQgaW5zdHJ1Y3RzIHRoZSBjb21waWxlciB0bworc2VhcmNoIGl0cyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgRW1wdHkgZWxlbWVudHMgY2FuIGFwcGVhciBhdCB0aGUKK2JlZ2lubmluZyBvciBlbmQgb2YgYSBwYXRoLiAgRm9yIGluc3RhbmNlLCBpZiB0aGUgdmFsdWUgb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkNQQVRIPC9zcGFuPjwvc2FtcD4gaXMgPGNvZGU+Oi9zcGVjaWFsL2luY2x1ZGU8L2NvZGU+LCB0aGF0IGhhcyB0aGUgc2FtZQorZWZmZWN0IGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUkuJm5ic3A7LUkvc3BlY2lhbC9pbmNsdWRlPCEtLSAvQHcgLS0+PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDwhLS0gbWFuIGVuZCAtLT4KKyAgICAgPCEtLSBtYW4gYmVnaW4gRU5WSVJPTk1FTlQgLS0+CisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+REVQRU5ERU5DSUVTX09VVFBVVDwvc3Bhbj48L3NhbXA+PGEgbmFtZT0iaW5kZXgtREVQRU5ERU5DSUVTXzAwNWZPVVRQVVQtMjM4NiI+PC9hPjxkZD48YSBuYW1lPSJpbmRleC1kZXBlbmRlbmNpZXMtZm9yLW1ha2UtYXMtb3V0cHV0LTIzODciPjwvYT5JZiB0aGlzIHZhcmlhYmxlIGlzIHNldCwgaXRzIHZhbHVlIHNwZWNpZmllcyBob3cgdG8gb3V0cHV0CitkZXBlbmRlbmNpZXMgZm9yIE1ha2UgYmFzZWQgb24gdGhlIG5vbi1zeXN0ZW0gaGVhZGVyIGZpbGVzIHByb2Nlc3NlZAorYnkgdGhlIGNvbXBpbGVyLiAgU3lzdGVtIGhlYWRlciBmaWxlcyBhcmUgaWdub3JlZCBpbiB0aGUgZGVwZW5kZW5jeQorb3V0cHV0LgorCisgICAgIDxwPlRoZSB2YWx1ZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5ERVBFTkRFTkNJRVNfT1VUUFVUPC9zcGFuPjwvc2FtcD4gY2FuIGJlIGp1c3QgYSBmaWxlIG5hbWUsIGluCit3aGljaCBjYXNlIHRoZSBNYWtlIHJ1bGVzIGFyZSB3cml0dGVuIHRvIHRoYXQgZmlsZSwgZ3Vlc3NpbmcgdGhlIHRhcmdldAorbmFtZSBmcm9tIHRoZSBzb3VyY2UgZmlsZSBuYW1lLiAgT3IgdGhlIHZhbHVlIGNhbiBoYXZlIHRoZSBmb3JtCismbHNxdW87PHNhbXA+PHZhcj5maWxlPC92YXI+IDx2YXI+dGFyZ2V0PC92YXI+PC9zYW1wPiZyc3F1bzssIGluIHdoaWNoIGNhc2UgdGhlIHJ1bGVzIGFyZSB3cml0dGVuIHRvCitmaWxlIDx2YXI+ZmlsZTwvdmFyPiB1c2luZyA8dmFyPnRhcmdldDwvdmFyPiBhcyB0aGUgdGFyZ2V0IG5hbWUuCisKKyAgICAgPHA+SW4gb3RoZXIgd29yZHMsIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZXF1aXZhbGVudCB0byBjb21iaW5pbmcKK3RoZSBvcHRpb25zIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NTTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTUY8L3NwYW4+PC9zYW1wPgorKHNlZSA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT4pLAord2l0aCBhbiBvcHRpb25hbCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTVQ8L3NwYW4+PC9zYW1wPiBzd2l0Y2ggdG9vLgorCisgICAgIDxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+U1VOUFJPX0RFUEVOREVOQ0lFUzwvc3Bhbj48L3NhbXA+PGEgbmFtZT0iaW5kZXgtU1VOUFJPXzAwNWZERVBFTkRFTkNJRVMtMjM4OCI+PC9hPjxkZD48YSBuYW1lPSJpbmRleC1kZXBlbmRlbmNpZXMtZm9yLW1ha2UtYXMtb3V0cHV0LTIzODkiPjwvYT5UaGlzIHZhcmlhYmxlIGlzIHRoZSBzYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkRFUEVOREVOQ0lFU19PVVRQVVQ8L3NwYW4+PC9zYW1wPiAoc2VlIGFib3ZlKSwKK2V4Y2VwdCB0aGF0IHN5c3RlbSBoZWFkZXIgZmlsZXMgYXJlIG5vdCBpZ25vcmVkLCBzbyBpdCBpbXBsaWVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+IHJhdGhlciB0aGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NTTwvc3Bhbj48L3NhbXA+LiAgSG93ZXZlciwgdGhlIGRlcGVuZGVuY2Ugb24gdGhlCittYWluIGlucHV0IGZpbGUgaXMgb21pdHRlZC4gCitTZWUgPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+LiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Vudmlyb25tZW50LWltcGxlbWVudGF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Vudmlyb25tZW50LWltcGxlbWVudGF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhY2U5MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRW52aXJvbm1lbnQtaW1wbGVtZW50YXRpb24uaHRtbApAQCAtMCwwICsxLDY5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FbnZpcm9ubWVudCBpbXBsZW1lbnRhdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkMgSW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUcmFuc2xhdGlvbi1pbXBsZW1lbnRhdGlvbi5odG1sI1RyYW5zbGF0aW9uLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iVHJhbnNsYXRpb24gaW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJZGVudGlmaWVycy1pbXBsZW1lbnRhdGlvbi5odG1sI0lkZW50aWZpZXJzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iSWRlbnRpZmllcnMgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRW52aXJvbm1lbnQtaW1wbGVtZW50YXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSWRlbnRpZmllcnMtaW1wbGVtZW50YXRpb24uaHRtbCNJZGVudGlmaWVycy1pbXBsZW1lbnRhdGlvbiI+SWRlbnRpZmllcnMgaW1wbGVtZW50YXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUcmFuc2xhdGlvbi1pbXBsZW1lbnRhdGlvbi5odG1sI1RyYW5zbGF0aW9uLWltcGxlbWVudGF0aW9uIj5UcmFuc2xhdGlvbiBpbXBsZW1lbnRhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj5DIEltcGxlbWVudGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4yIEVudmlyb25tZW50PC9oMz4KKworPHA+VGhlIGJlaGF2aW9yIG9mIG1vc3Qgb2YgdGhlc2UgcG9pbnRzIGFyZSBkZXBlbmRlbnQgb24gdGhlIGltcGxlbWVudGF0aW9uCitvZiB0aGUgQyBsaWJyYXJ5LCBhbmQgYXJlIG5vdCBkZWZpbmVkIGJ5IEdDQyBpdHNlbGYuCisKKyAgICAgPHVsPgorPGxpPjxjaXRlPlRoZSBtYXBwaW5nIGJldHdlZW4gcGh5c2ljYWwgc291cmNlIGZpbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMKK2FuZCB0aGUgc291cmNlIGNoYXJhY3RlciBzZXQgaW4gdHJhbnNsYXRpb24gcGhhc2UgMSAoQzkwIGFuZCBDOTkgNS4xLjEuMikuPC9jaXRlPgorCisgICAgIDxwPlNlZSA8YSBocmVmPSIuLi9jcHAvSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IuaHRtbCNJbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvciI+SW1wbGVtZW50YXRpb24tZGVmaW5lZCBiZWhhdmlvcjwvYT4uCisKKyA8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Fc2NhcGVkLU5ld2xpbmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0VzY2FwZWQtTmV3bGluZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWE4YjQyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Fc2NhcGVkLU5ld2xpbmVzLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXNjYXBlZCBOZXdsaW5lcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWYXJpYWRpYy1NYWNyb3MuaHRtbCNWYXJpYWRpYy1NYWNyb3MiIHRpdGxlPSJWYXJpYWRpYyBNYWNyb3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdWJzY3JpcHRpbmcuaHRtbCNTdWJzY3JpcHRpbmciIHRpdGxlPSJTdWJzY3JpcHRpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXNjYXBlZC1OZXdsaW5lcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTdWJzY3JpcHRpbmcuaHRtbCNTdWJzY3JpcHRpbmciPlN1YnNjcmlwdGluZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZhcmlhZGljLU1hY3Jvcy5odG1sI1ZhcmlhZGljLU1hY3JvcyI+VmFyaWFkaWMgTWFjcm9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjIxIFNsaWdodGx5IExvb3NlciBSdWxlcyBmb3IgRXNjYXBlZCBOZXdsaW5lczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWVzY2FwZWQtbmV3bGluZXMtMjUzNCI+PC9hPjxhIG5hbWU9ImluZGV4LW5ld2xpbmVzLV8wMDI4ZXNjYXBlZF8wMDI5LTI1MzUiPjwvYT4KK1JlY2VudGx5LCB0aGUgcHJlcHJvY2Vzc29yIGhhcyByZWxheGVkIGl0cyB0cmVhdG1lbnQgb2YgZXNjYXBlZAorbmV3bGluZXMuICBQcmV2aW91c2x5LCB0aGUgbmV3bGluZSBoYWQgdG8gaW1tZWRpYXRlbHkgZm9sbG93IGEKK2JhY2tzbGFzaC4gIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFsbG93cyB3aGl0ZXNwYWNlIGluIHRoZSBmb3JtCitvZiBzcGFjZXMsIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHRhYnMsIGFuZCBmb3JtIGZlZWRzIGJldHdlZW4gdGhlCitiYWNrc2xhc2ggYW5kIHRoZSBzdWJzZXF1ZW50IG5ld2xpbmUuICBUaGUgcHJlcHJvY2Vzc29yIGlzc3VlcyBhCit3YXJuaW5nLCBidXQgdHJlYXRzIGl0IGFzIGEgdmFsaWQgZXNjYXBlZCBuZXdsaW5lIGFuZCBjb21iaW5lcyB0aGUgdHdvCitsaW5lcyB0byBmb3JtIGEgc2luZ2xlIGxvZ2ljYWwgbGluZS4gIFRoaXMgd29ya3Mgd2l0aGluIGNvbW1lbnRzIGFuZAordG9rZW5zLCBhcyB3ZWxsIGFzIGJldHdlZW4gdG9rZW5zLiAgQ29tbWVudHMgYXJlIDxlbT5ub3Q8L2VtPiB0cmVhdGVkIGFzCit3aGl0ZXNwYWNlIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyByZWxheGF0aW9uLCBzaW5jZSB0aGV5IGhhdmUgbm90Cit5ZXQgYmVlbiByZXBsYWNlZCB3aXRoIHNwYWNlcy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXhhbXBsZS1vZi1hc20td2l0aC1jbG9iYmVyZWQtYXNtLXJlZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9FeGFtcGxlLW9mLWFzbS13aXRoLWNsb2JiZXJlZC1hc20tcmVnLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxMWE1NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXhhbXBsZS1vZi1hc20td2l0aC1jbG9iYmVyZWQtYXNtLXJlZy5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1FeHRlbmRlZC1Bc20uaHRtbCNFeGFtcGxlJTIwb2YlMjBhc20lMjB3aXRoJTIwY2xvYmJlcmVkJTIwYXNtJTIwcmVnIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXhjZXB0aW9uLWhhbmRsaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0V4Y2VwdGlvbi1oYW5kbGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYjJjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0V4Y2VwdGlvbi1oYW5kbGluZy5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkV4Y2VwdGlvbiBoYW5kbGluZyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbi5odG1sI0NfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uIiB0aXRsZT0iQysrIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29uZGl0aW9uYWxseV8wMDJkc3VwcG9ydGVkLWJlaGF2aW9yLmh0bWwjQ29uZGl0aW9uYWxseV8wMDJkc3VwcG9ydGVkLWJlaGF2aW9yIiB0aXRsZT0iQ29uZGl0aW9uYWxseS1zdXBwb3J0ZWQgYmVoYXZpb3IiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXhjZXB0aW9uLWhhbmRsaW5nIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29uZGl0aW9uYWxseV8wMDJkc3VwcG9ydGVkLWJlaGF2aW9yLmh0bWwjQ29uZGl0aW9uYWxseV8wMDJkc3VwcG9ydGVkLWJlaGF2aW9yIj5Db25kaXRpb25hbGx5LXN1cHBvcnRlZCBiZWhhdmlvcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uLmh0bWwjQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24iPkMrKyBJbXBsZW1lbnRhdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMiBFeGNlcHRpb24gaGFuZGxpbmc8L2gzPgorCisgICAgIDx1bD4KKzxsaT48Y2l0ZT5JbiB0aGUgc2l0dWF0aW9uIHdoZXJlIG5vIG1hdGNoaW5nIGhhbmRsZXIgaXMgZm91bmQsIGl0IGlzCitpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHdoZXRoZXIgb3Igbm90IHRoZSBzdGFjayBpcyB1bndvdW5kIGJlZm9yZQorc3RkOjp0ZXJtaW5hdGUoKSBpcyBjYWxsZWQgKEMrKzk4IDE1LjUuMSkuPC9jaXRlPgorCisgICAgIDxwPlRoZSBzdGFjayBpcyBub3QgdW53b3VuZCBiZWZvcmUgc3RkOjp0ZXJtaW5hdGUgaXMgY2FsbGVkLgorCis8L3VsPgorCis8IS0tIENvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0V4Y2VwdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXhjZXB0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmRlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0V4Y2VwdGlvbnMuaHRtbApAQCAtMCwwICsxLDEyOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXhjZXB0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPYmplY3RpdmVfMDAyZEMuaHRtbCNPYmplY3RpdmVfMDAyZEMiIHRpdGxlPSJPYmplY3RpdmUtQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNvbXBhdGliaWxpdHlfMDA1ZmFsaWFzLmh0bWwjY29tcGF0aWJpbGl0eV8wMDVmYWxpYXMiIHRpdGxlPSJjb21wYXRpYmlsaXR5X2FsaWFzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3luY2hyb25pemF0aW9uLmh0bWwjU3luY2hyb25pemF0aW9uIiB0aXRsZT0iU3luY2hyb25pemF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkV4Y2VwdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3luY2hyb25pemF0aW9uLmh0bWwjU3luY2hyb25pemF0aW9uIj5TeW5jaHJvbml6YXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjb21wYXRpYmlsaXR5XzAwNWZhbGlhcy5odG1sI2NvbXBhdGliaWxpdHlfMDA1ZmFsaWFzIj5jb21wYXRpYmlsaXR5X2FsaWFzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIj5PYmplY3RpdmUtQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNyBFeGNlcHRpb25zPC9oMz4KKworPHA+R05VIE9iamVjdGl2ZS1DIHByb3ZpZGVzIGV4Y2VwdGlvbiBzdXBwb3J0IGJ1aWx0IGludG8gdGhlIGxhbmd1YWdlLCBhcworaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBAdHJ5IHsKKyAgICAgICAgIC4uLgorICAgICAgICAgICAgQHRocm93IGV4cHI7CisgICAgICAgICAuLi4KKyAgICAgICB9CisgICAgICAgQGNhdGNoIChBbk9iakNDbGFzcyAqZXhjKSB7CisgICAgICAgICAuLi4KKyAgICAgICAgICAgQHRocm93IGV4cHI7CisgICAgICAgICAuLi4KKyAgICAgICAgICAgQHRocm93OworICAgICAgICAgLi4uCisgICAgICAgfQorICAgICAgIEBjYXRjaCAoQW5vdGhlckNsYXNzICpleGMpIHsKKyAgICAgICAgIC4uLgorICAgICAgIH0KKyAgICAgICBAY2F0Y2ggKGlkIGFsbE90aGVycykgeworICAgICAgICAgLi4uCisgICAgICAgfQorICAgICAgIEBmaW5hbGx5IHsKKyAgICAgICAgIC4uLgorICAgICAgICAgICBAdGhyb3cgZXhwcjsKKyAgICAgICAgIC4uLgorICAgICAgIH0KKzwvcHJlPgorIDxwPlRoZSA8Y29kZT5AdGhyb3c8L2NvZGU+IHN0YXRlbWVudCBtYXkgYXBwZWFyIGFueXdoZXJlIGluIGFuIE9iamVjdGl2ZS1DIG9yCitPYmplY3RpdmUtQysrIHByb2dyYW07IHdoZW4gdXNlZCBpbnNpZGUgb2YgYSA8Y29kZT5AY2F0Y2g8L2NvZGU+IGJsb2NrLCB0aGUKKzxjb2RlPkB0aHJvdzwvY29kZT4gbWF5IGFwcGVhciB3aXRob3V0IGFuIGFyZ3VtZW50IChhcyBzaG93biBhYm92ZSksIGluCit3aGljaCBjYXNlIHRoZSBvYmplY3QgY2F1Z2h0IGJ5IHRoZSA8Y29kZT5AY2F0Y2g8L2NvZGU+IHdpbGwgYmUgcmV0aHJvd24uCisKKyA8cD5Ob3RlIHRoYXQgb25seSAocG9pbnRlcnMgdG8pIE9iamVjdGl2ZS1DIG9iamVjdHMgbWF5IGJlIHRocm93biBhbmQKK2NhdWdodCB1c2luZyB0aGlzIHNjaGVtZS4gIFdoZW4gYW4gb2JqZWN0IGlzIHRocm93biwgaXQgd2lsbCBiZSBjYXVnaHQKK2J5IHRoZSBuZWFyZXN0IDxjb2RlPkBjYXRjaDwvY29kZT4gY2xhdXNlIGNhcGFibGUgb2YgaGFuZGxpbmcgb2JqZWN0cyBvZgordGhhdCB0eXBlLCBhbmFsb2dvdXNseSB0byBob3cgPGNvZGU+Y2F0Y2g8L2NvZGU+IGJsb2NrcyB3b3JrIGluIEMrKyBhbmQKK0phdmEuICBBIDxjb2RlPkBjYXRjaChpZCAuLi4pPC9jb2RlPiBjbGF1c2UgKGFzIHNob3duIGFib3ZlKSBtYXkgYWxzbworYmUgcHJvdmlkZWQgdG8gY2F0Y2ggYW55IGFuZCBhbGwgT2JqZWN0aXZlLUMgZXhjZXB0aW9ucyBub3QgY2F1Z2h0IGJ5CitwcmV2aW91cyA8Y29kZT5AY2F0Y2g8L2NvZGU+IGNsYXVzZXMgKGlmIGFueSkuCisKKyA8cD5UaGUgPGNvZGU+QGZpbmFsbHk8L2NvZGU+IGNsYXVzZSwgaWYgcHJlc2VudCwgd2lsbCBiZSBleGVjdXRlZCB1cG9uIGV4aXQKK2Zyb20gdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyA8Y29kZT5AdHJ5IC4uLiBAY2F0Y2g8L2NvZGU+IHNlY3Rpb24uIAorVGhpcyB3aWxsIGhhcHBlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW55IGV4Y2VwdGlvbnMgYXJlIHRocm93biwKK2NhdWdodCBvciByZXRocm93biBpbnNpZGUgdGhlIDxjb2RlPkB0cnkgLi4uIEBjYXRjaDwvY29kZT4gc2VjdGlvbiwKK2FuYWxvZ291c2x5IHRvIHRoZSBiZWhhdmlvciBvZiB0aGUgPGNvZGU+ZmluYWxseTwvY29kZT4gY2xhdXNlIGluIEphdmEuCisKKyA8cD5UaGVyZSBhcmUgc2V2ZXJhbCBjYXZlYXRzIHRvIHVzaW5nIHRoZSBuZXcgZXhjZXB0aW9uIG1lY2hhbmlzbToKKworICAgICA8dWw+Cis8bGk+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mb2JqYy1leGNlcHRpb25zPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2hlbgorY29tcGlsaW5nIE9iamVjdGl2ZS1DIGZpbGVzIHRoYXQgdXNlIGV4Y2VwdGlvbnMuCisKKyAgICAgPGxpPldpdGggdGhlIEdOVSBydW50aW1lLCBleGNlcHRpb25zIGFyZSBhbHdheXMgaW1wbGVtZW50ZWQgYXMgJmxkcXVvO25hdGl2ZSZyZHF1bzsKK2V4Y2VwdGlvbnMgYW5kIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZXhjZXB0aW9uczwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXNoYXJlZC1saWJnY2M8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFyZSB1c2VkIHdoZW4gbGlua2luZy4KKworICAgICA8bGk+V2l0aCB0aGUgTmVYVCBydW50aW1lLCBhbHRob3VnaCBjdXJyZW50bHkgZGVzaWduZWQgdG8gYmUgYmluYXJ5Citjb21wYXRpYmxlIHdpdGggPGNvZGU+TlNfSEFORExFUjwvY29kZT4tc3R5bGUgaWRpb21zIHByb3ZpZGVkIGJ5IHRoZQorPGNvZGU+TlNFeGNlcHRpb248L2NvZGU+IGNsYXNzLCB0aGUgbmV3IGV4Y2VwdGlvbnMgY2FuIG9ubHkgYmUgdXNlZCBvbiBNYWMKK09TIFggMTAuMyAoUGFudGhlcikgYW5kIGxhdGVyIHN5c3RlbXMsIGR1ZSB0byBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkKK25lZWRlZCBpbiB0aGUgTmVYVCBPYmplY3RpdmUtQyBydW50aW1lLgorCisgICAgIDxsaT5BcyBtZW50aW9uZWQgYWJvdmUsIHRoZSBuZXcgZXhjZXB0aW9ucyBkbyBub3Qgc3VwcG9ydCBoYW5kbGluZwordHlwZXMgb3RoZXIgdGhhbiBPYmplY3RpdmUtQyBvYmplY3RzLiAgIEZ1cnRoZXJtb3JlLCB3aGVuIHVzZWQgZnJvbQorT2JqZWN0aXZlLUMrKywgdGhlIE9iamVjdGl2ZS1DIGV4Y2VwdGlvbiBtb2RlbCBkb2VzIG5vdCBpbnRlcm9wZXJhdGUgd2l0aCBDKysKK2V4Y2VwdGlvbnMgYXQgdGhpcyB0aW1lLiAgVGhpcyBtZWFucyB5b3UgY2Fubm90IDxjb2RlPkB0aHJvdzwvY29kZT4gYW4gZXhjZXB0aW9uCitmcm9tIE9iamVjdGl2ZS1DIGFuZCA8Y29kZT5jYXRjaDwvY29kZT4gaXQgaW4gQysrLCBvciB2aWNlIHZlcnNhCisoaS5lLiwgPGNvZGU+dGhyb3cgLi4uIEBjYXRjaDwvY29kZT4pLiAKKzwvdWw+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0V4ZWN1dGluZy1jb2RlLWJlZm9yZS1tYWluLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0V4ZWN1dGluZy1jb2RlLWJlZm9yZS1tYWluLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwNTQ3NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXhlY3V0aW5nLWNvZGUtYmVmb3JlLW1haW4uaHRtbApAQCAtMCwwICsxLDEzNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXhlY3V0aW5nIGNvZGUgYmVmb3JlIG1haW4gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIiB0aXRsZT0iT2JqZWN0aXZlLUMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSSIgdGl0bGU9IkdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlR5cGUtZW5jb2RpbmcuaHRtbCNUeXBlLWVuY29kaW5nIiB0aXRsZT0iVHlwZSBlbmNvZGluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFeGVjdXRpbmctY29kZS1iZWZvcmUtbWFpbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUeXBlLWVuY29kaW5nLmh0bWwjVHlwZS1lbmNvZGluZyI+VHlwZSBlbmNvZGluZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkuaHRtbCNHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJIj5HTlUgT2JqZWN0aXZlLUMgcnVudGltZSBBUEk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPYmplY3RpdmVfMDAyZEMuaHRtbCNPYmplY3RpdmVfMDAyZEMiPk9iamVjdGl2ZS1DPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yIDxjb2RlPitsb2FkPC9jb2RlPjogRXhlY3V0aW5nIGNvZGUgYmVmb3JlIG1haW48L2gzPgorCis8cD5UaGlzIHNlY3Rpb24gaXMgc3BlY2lmaWMgZm9yIHRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZS4gIElmIHlvdSBhcmUKK3VzaW5nIGEgZGlmZmVyZW50IHJ1bnRpbWUsIHlvdSBjYW4gc2tpcCBpdC4KKworIDxwPlRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBwcm92aWRlcyBhIHdheSB0aGF0IGFsbG93cyB5b3UgdG8gZXhlY3V0ZQorY29kZSBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBlbnRlcnMgdGhlIDxjb2RlPm1haW48L2NvZGU+CitmdW5jdGlvbi4gIFRoZSBjb2RlIGlzIGV4ZWN1dGVkIG9uIGEgcGVyLWNsYXNzIGFuZCBhIHBlci1jYXRlZ29yeSBiYXNpcywKK3Rocm91Z2ggYSBzcGVjaWFsIGNsYXNzIG1ldGhvZCA8Y29kZT4rbG9hZDwvY29kZT4uCisKKyA8cD5UaGlzIGZhY2lsaXR5IGlzIHZlcnkgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGluaXRpYWxpemUgZ2xvYmFsIHZhcmlhYmxlcword2hpY2ggY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSBwcm9ncmFtIGRpcmVjdGx5LCB3aXRob3V0IHNlbmRpbmcgYSBtZXNzYWdlCit0byB0aGUgY2xhc3MgZmlyc3QuICBUaGUgdXN1YWwgd2F5IHRvIGluaXRpYWxpemUgZ2xvYmFsIHZhcmlhYmxlcywgaW4gdGhlCis8Y29kZT4raW5pdGlhbGl6ZTwvY29kZT4gbWV0aG9kLCBtaWdodCBub3QgYmUgdXNlZnVsIGJlY2F1c2UKKzxjb2RlPitpbml0aWFsaXplPC9jb2RlPiBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBmaXJzdCBtZXNzYWdlIGlzIHNlbnQgdG8gYQorY2xhc3Mgb2JqZWN0LCB3aGljaCBpbiBzb21lIGNhc2VzIGNvdWxkIGJlIHRvbyBsYXRlLgorCisgPHA+U3VwcG9zZSBmb3IgZXhhbXBsZSB5b3UgaGF2ZSBhIDxjb2RlPkZpbGVTdHJlYW08L2NvZGU+IGNsYXNzIHRoYXQgZGVjbGFyZXMKKzxjb2RlPlN0ZGluPC9jb2RlPiwgPGNvZGU+U3Rkb3V0PC9jb2RlPiBhbmQgPGNvZGU+U3RkZXJyPC9jb2RlPiBhcyBnbG9iYWwgdmFyaWFibGVzLCBsaWtlCitiZWxvdzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIAorICAgICBGaWxlU3RyZWFtICpTdGRpbiA9IG5pbDsKKyAgICAgRmlsZVN0cmVhbSAqU3Rkb3V0ID0gbmlsOworICAgICBGaWxlU3RyZWFtICpTdGRlcnIgPSBuaWw7CisgICAgIAorICAgICBAaW1wbGVtZW50YXRpb24gRmlsZVN0cmVhbQorICAgICAKKyAgICAgKyAodm9pZClpbml0aWFsaXplCisgICAgIHsKKyAgICAgICAgIFN0ZGluID0gW1tGaWxlU3RyZWFtIG5ld10gaW5pdFdpdGhGZDowXTsKKyAgICAgICAgIFN0ZG91dCA9IFtbRmlsZVN0cmVhbSBuZXddIGluaXRXaXRoRmQ6MV07CisgICAgICAgICBTdGRlcnIgPSBbW0ZpbGVTdHJlYW0gbmV3XSBpbml0V2l0aEZkOjJdOworICAgICB9CisgICAgIAorICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPk90aGVyIG1ldGhvZHMgaGVyZTwvc3Bhbj4gKi8KKyAgICAgQGVuZAorICAgICAKKzwvcHJlPgorIDxwPkluIHRoaXMgZXhhbXBsZSwgdGhlIGluaXRpYWxpemF0aW9uIG9mIDxjb2RlPlN0ZGluPC9jb2RlPiwgPGNvZGU+U3Rkb3V0PC9jb2RlPiBhbmQKKzxjb2RlPlN0ZGVycjwvY29kZT4gaW4gPGNvZGU+K2luaXRpYWxpemU8L2NvZGU+IG9jY3VycyB0b28gbGF0ZS4gIFRoZSBwcm9ncmFtbWVyIGNhbgorc2VuZCBhIG1lc3NhZ2UgdG8gb25lIG9mIHRoZXNlIG9iamVjdHMgYmVmb3JlIHRoZSB2YXJpYWJsZXMgYXJlIGFjdHVhbGx5Citpbml0aWFsaXplZCwgdGh1cyBzZW5kaW5nIG1lc3NhZ2VzIHRvIHRoZSA8Y29kZT5uaWw8L2NvZGU+IG9iamVjdC4gIFRoZQorPGNvZGU+K2luaXRpYWxpemU8L2NvZGU+IG1ldGhvZCB3aGljaCBhY3R1YWxseSBpbml0aWFsaXplcyB0aGUgZ2xvYmFsCit2YXJpYWJsZXMgaXMgbm90IGludm9rZWQgdW50aWwgdGhlIGZpcnN0IG1lc3NhZ2UgaXMgc2VudCB0byB0aGUgY2xhc3MKK29iamVjdC4gIFRoZSBzb2x1dGlvbiB3b3VsZCByZXF1aXJlIHRoZXNlIHZhcmlhYmxlcyB0byBiZSBpbml0aWFsaXplZAoranVzdCBiZWZvcmUgZW50ZXJpbmcgPGNvZGU+bWFpbjwvY29kZT4uCisKKyA8cD5UaGUgY29ycmVjdCBzb2x1dGlvbiBvZiB0aGUgYWJvdmUgcHJvYmxlbSBpcyB0byB1c2UgdGhlIDxjb2RlPitsb2FkPC9jb2RlPgorbWV0aG9kIGluc3RlYWQgb2YgPGNvZGU+K2luaXRpYWxpemU8L2NvZGU+OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgCisgICAgIEBpbXBsZW1lbnRhdGlvbiBGaWxlU3RyZWFtCisgICAgIAorICAgICArICh2b2lkKWxvYWQKKyAgICAgeworICAgICAgICAgU3RkaW4gPSBbW0ZpbGVTdHJlYW0gbmV3XSBpbml0V2l0aEZkOjBdOworICAgICAgICAgU3Rkb3V0ID0gW1tGaWxlU3RyZWFtIG5ld10gaW5pdFdpdGhGZDoxXTsKKyAgICAgICAgIFN0ZGVyciA9IFtbRmlsZVN0cmVhbSBuZXddIGluaXRXaXRoRmQ6Ml07CisgICAgIH0KKyAgICAgCisgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+T3RoZXIgbWV0aG9kcyBoZXJlPC9zcGFuPiAqLworICAgICBAZW5kCisgICAgIAorPC9wcmU+CisgPHA+VGhlIDxjb2RlPitsb2FkPC9jb2RlPiBpcyBhIG1ldGhvZCB0aGF0IGlzIG5vdCBvdmVycmlkZGVuIGJ5IGNhdGVnb3JpZXMuICBJZiBhCitjbGFzcyBhbmQgYSBjYXRlZ29yeSBvZiBpdCBib3RoIGltcGxlbWVudCA8Y29kZT4rbG9hZDwvY29kZT4sIGJvdGggbWV0aG9kcyBhcmUKK2ludm9rZWQuICBUaGlzIGFsbG93cyBzb21lIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb25zIHRvIGJlIHBlcmZvcm1lZCBpbgorYSBjYXRlZ29yeS4KKworIDxwPlRoaXMgbWVjaGFuaXNtIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBhIHJlcGxhY2VtZW50IGZvciA8Y29kZT4raW5pdGlhbGl6ZTwvY29kZT4uIAorWW91IHNob3VsZCBiZSBhd2FyZSBvZiBpdHMgbGltaXRhdGlvbnMgd2hlbiB5b3UgZGVjaWRlIHRvIHVzZSBpdAoraW5zdGVhZCBvZiA8Y29kZT4raW5pdGlhbGl6ZTwvY29kZT4uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJXaGF0LXlvdS1jYW4tYW5kLXdoYXQteW91LWNhbm5vdC1kby1pbi1fMDAyYmxvYWQuaHRtbCNXaGF0LXlvdS1jYW4tYW5kLXdoYXQteW91LWNhbm5vdC1kby1pbi1fMDAyYmxvYWQiPldoYXQgeW91IGNhbiBhbmQgd2hhdCB5b3UgY2Fubm90IGRvIGluICtsb2FkPC9hPgorPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXhwbGljaXQtUmVnLVZhcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXhwbGljaXQtUmVnLVZhcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzhlNjNkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9FeHBsaWNpdC1SZWctVmFycy5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkV4cGxpY2l0IFJlZyBWYXJzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFzbS1MYWJlbHMuaHRtbCNBc20tTGFiZWxzIiB0aXRsZT0iQXNtIExhYmVscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFsdGVybmF0ZS1LZXl3b3Jkcy5odG1sI0FsdGVybmF0ZS1LZXl3b3JkcyIgdGl0bGU9IkFsdGVybmF0ZSBLZXl3b3JkcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFeHBsaWNpdC1SZWctVmFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBbHRlcm5hdGUtS2V5d29yZHMuaHRtbCNBbHRlcm5hdGUtS2V5d29yZHMiPkFsdGVybmF0ZSBLZXl3b3JkczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFzbS1MYWJlbHMuaHRtbCNBc20tTGFiZWxzIj5Bc20gTGFiZWxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjQ0IFZhcmlhYmxlcyBpbiBTcGVjaWZpZWQgUmVnaXN0ZXJzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXhwbGljaXQtcmVnaXN0ZXItdmFyaWFibGVzLTI4NjQiPjwvYT48YSBuYW1lPSJpbmRleC12YXJpYWJsZXMtaW4tc3BlY2lmaWVkLXJlZ2lzdGVycy0yODY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3BlY2lmaWVkLXJlZ2lzdGVycy0yODY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaXN0ZXJzXzAwMmMtZ2xvYmFsLWFsbG9jYXRpb24tMjg2NyI+PC9hPgorR05VIEMgYWxsb3dzIHlvdSB0byBwdXQgYSBmZXcgZ2xvYmFsIHZhcmlhYmxlcyBpbnRvIHNwZWNpZmllZCBoYXJkd2FyZQorcmVnaXN0ZXJzLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIHJlZ2lzdGVyIGluIHdoaWNoIGFuIG9yZGluYXJ5CityZWdpc3RlciB2YXJpYWJsZSBzaG91bGQgYmUgYWxsb2NhdGVkLgorCisgICAgIDx1bD4KKzxsaT5HbG9iYWwgcmVnaXN0ZXIgdmFyaWFibGVzIHJlc2VydmUgcmVnaXN0ZXJzIHRocm91Z2hvdXQgdGhlIHByb2dyYW0uIAorVGhpcyBtYXkgYmUgdXNlZnVsIGluIHByb2dyYW1zIHN1Y2ggYXMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UKK2ludGVycHJldGVycyB0aGF0IGhhdmUgYSBjb3VwbGUgb2YgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IGFyZSBhY2Nlc3NlZAordmVyeSBvZnRlbi4KKworICAgICA8bGk+TG9jYWwgcmVnaXN0ZXIgdmFyaWFibGVzIGluIHNwZWNpZmljIHJlZ2lzdGVycyBkbyBub3QgcmVzZXJ2ZSB0aGUKK3JlZ2lzdGVycywgZXhjZXB0IGF0IHRoZSBwb2ludCB3aGVyZSB0aGV5IGFyZSB1c2VkIGFzIGlucHV0IG9yIG91dHB1dAorb3BlcmFuZHMgaW4gYW4gPGNvZGU+YXNtPC9jb2RlPiBzdGF0ZW1lbnQgYW5kIHRoZSA8Y29kZT5hc208L2NvZGU+IHN0YXRlbWVudCBpdHNlbGYgaXMKK25vdCBkZWxldGVkLiAgVGhlIGNvbXBpbGVyJ3MgZGF0YSBmbG93IGFuYWx5c2lzIGlzIGNhcGFibGUgb2YgZGV0ZXJtaW5pbmcKK3doZXJlIHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXJzIGNvbnRhaW4gbGl2ZSB2YWx1ZXMsIGFuZCB3aGVyZSB0aGV5IGFyZQorYXZhaWxhYmxlIGZvciBvdGhlciB1c2VzLiAgU3RvcmVzIGludG8gbG9jYWwgcmVnaXN0ZXIgdmFyaWFibGVzIG1heSBiZSBkZWxldGVkCit3aGVuIHRoZXkgYXBwZWFyIHRvIGJlIGRlYWQgYWNjb3JkaW5nIHRvIGRhdGFmbG93IGFuYWx5c2lzLiAgUmVmZXJlbmNlcwordG8gbG9jYWwgcmVnaXN0ZXIgdmFyaWFibGVzIG1heSBiZSBkZWxldGVkIG9yIG1vdmVkIG9yIHNpbXBsaWZpZWQuCisKKyAgICAgPHA+VGhlc2UgbG9jYWwgdmFyaWFibGVzIGFyZSBzb21ldGltZXMgY29udmVuaWVudCBmb3IgdXNlIHdpdGggdGhlIGV4dGVuZGVkCis8Y29kZT5hc208L2NvZGU+IGZlYXR1cmUgKHNlZSA8YSBocmVmPSJFeHRlbmRlZC1Bc20uaHRtbCNFeHRlbmRlZC1Bc20iPkV4dGVuZGVkIEFzbTwvYT4pLCBpZiB5b3Ugd2FudCB0byB3cml0ZSBvbmUKK291dHB1dCBvZiB0aGUgYXNzZW1ibGVyIGluc3RydWN0aW9uIGRpcmVjdGx5IGludG8gYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiAKKyhUaGlzIHdvcmtzIHByb3ZpZGVkIHRoZSByZWdpc3RlciB5b3Ugc3BlY2lmeSBmaXRzIHRoZSBjb25zdHJhaW50cworc3BlY2lmaWVkIGZvciB0aGF0IG9wZXJhbmQgaW4gdGhlIDxjb2RlPmFzbTwvY29kZT4uKSAKKzwvdWw+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJHbG9iYWwtUmVnLVZhcnMuaHRtbCNHbG9iYWwtUmVnLVZhcnMiPkdsb2JhbCBSZWcgVmFyczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkxvY2FsLVJlZy1WYXJzLmh0bWwjTG9jYWwtUmVnLVZhcnMiPkxvY2FsIFJlZyBWYXJzPC9hPgorPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXh0ZW5kZWQtQXNtLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0V4dGVuZGVkLUFzbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NThhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0V4dGVuZGVkLUFzbS5odG1sCkBAIC0wLDAgKzEsNTY5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FeHRlbmRlZCBBc20gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVm9sYXRpbGVzLmh0bWwjVm9sYXRpbGVzIiB0aXRsZT0iVm9sYXRpbGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyIgdGl0bGU9IkNvbnN0cmFpbnRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkV4dGVuZGVkLUFzbSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb25zdHJhaW50cy5odG1sI0NvbnN0cmFpbnRzIj5Db25zdHJhaW50czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZvbGF0aWxlcy5odG1sI1ZvbGF0aWxlcyI+Vm9sYXRpbGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjQxIEFzc2VtYmxlciBJbnN0cnVjdGlvbnMgd2l0aCBDIEV4cHJlc3Npb24gT3BlcmFuZHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1leHRlbmRlZC1fMDA0MGNvZGVfMDA3YmFzbV8wMDdkLTI4MDQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFzbV8wMDdkLWV4cHJlc3Npb25zLTI4MDUiPjwvYT48YSBuYW1lPSJpbmRleC1hc3NlbWJsZXItaW5zdHJ1Y3Rpb25zLTI4MDYiPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3RlcnMtMjgwNyI+PC9hPgorSW4gYW4gYXNzZW1ibGVyIGluc3RydWN0aW9uIHVzaW5nIDxjb2RlPmFzbTwvY29kZT4sIHlvdSBjYW4gc3BlY2lmeSB0aGUKK29wZXJhbmRzIG9mIHRoZSBpbnN0cnVjdGlvbiB1c2luZyBDIGV4cHJlc3Npb25zLiAgVGhpcyBtZWFucyB5b3UgbmVlZCBub3QKK2d1ZXNzIHdoaWNoIHJlZ2lzdGVycyBvciBtZW1vcnkgbG9jYXRpb25zIGNvbnRhaW4gdGhlIGRhdGEgeW91IHdhbnQKK3RvIHVzZS4KKworIDxwPllvdSBtdXN0IHNwZWNpZnkgYW4gYXNzZW1ibGVyIGluc3RydWN0aW9uIHRlbXBsYXRlIG11Y2ggbGlrZSB3aGF0CithcHBlYXJzIGluIGEgbWFjaGluZSBkZXNjcmlwdGlvbiwgcGx1cyBhbiBvcGVyYW5kIGNvbnN0cmFpbnQgc3RyaW5nIGZvcgorZWFjaCBvcGVyYW5kLgorCisgPHA+Rm9yIGV4YW1wbGUsIGhlcmUgaXMgaG93IHRvIHVzZSB0aGUgNjg4ODEncyA8Y29kZT5mc2lueDwvY29kZT4gaW5zdHJ1Y3Rpb246CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhc20gKCJmc2lueCAlMSwlMCIgOiAiPWYiIChyZXN1bHQpIDogImYiIChhbmdsZSkpOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5IZXJlIDxjb2RlPmFuZ2xlPC9jb2RlPiBpcyB0aGUgQyBleHByZXNzaW9uIGZvciB0aGUgaW5wdXQgb3BlcmFuZCB3aGlsZQorPGNvZGU+cmVzdWx0PC9jb2RlPiBpcyB0aGF0IG9mIHRoZSBvdXRwdXQgb3BlcmFuZC4gIEVhY2ggaGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ImYiPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGl0cworb3BlcmFuZCBjb25zdHJhaW50LCBzYXlpbmcgdGhhdCBhIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIGlzIHJlcXVpcmVkLiAKK1RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj08L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49Zjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbmRpY2F0ZXMgdGhhdCB0aGUgb3BlcmFuZCBpcyBhbiBvdXRwdXQ7IGFsbAorb3V0cHV0IG9wZXJhbmRzJyBjb25zdHJhaW50cyBtdXN0IHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj08L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUgY29uc3RyYWludHMgdXNlIHRoZQorc2FtZSBsYW5ndWFnZSB1c2VkIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIChzZWUgPGEgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyI+Q29uc3RyYWludHM8L2E+KS4KKworIDxwPkVhY2ggb3BlcmFuZCBpcyBkZXNjcmliZWQgYnkgYW4gb3BlcmFuZC1jb25zdHJhaW50IHN0cmluZyBmb2xsb3dlZCBieQordGhlIEMgZXhwcmVzc2lvbiBpbiBwYXJlbnRoZXNlcy4gIEEgY29sb24gc2VwYXJhdGVzIHRoZSBhc3NlbWJsZXIKK3RlbXBsYXRlIGZyb20gdGhlIGZpcnN0IG91dHB1dCBvcGVyYW5kIGFuZCBhbm90aGVyIHNlcGFyYXRlcyB0aGUgbGFzdAorb3V0cHV0IG9wZXJhbmQgZnJvbSB0aGUgZmlyc3QgaW5wdXQsIGlmIGFueS4gIENvbW1hcyBzZXBhcmF0ZSB0aGUKK29wZXJhbmRzIHdpdGhpbiBlYWNoIGdyb3VwLiAgVGhlIHRvdGFsIG51bWJlciBvZiBvcGVyYW5kcyBpcyBjdXJyZW50bHkKK2xpbWl0ZWQgdG8gMzA7IHRoaXMgbGltaXRhdGlvbiBtYXkgYmUgbGlmdGVkIGluIHNvbWUgZnV0dXJlIHZlcnNpb24gb2YKK0dDQy4KKworIDxwPklmIHRoZXJlIGFyZSBubyBvdXRwdXQgb3BlcmFuZHMgYnV0IHRoZXJlIGFyZSBpbnB1dCBvcGVyYW5kcywgeW91IG11c3QKK3BsYWNlIHR3byBjb25zZWN1dGl2ZSBjb2xvbnMgc3Vycm91bmRpbmcgdGhlIHBsYWNlIHdoZXJlIHRoZSBvdXRwdXQKK29wZXJhbmRzIHdvdWxkIGdvLgorCisgPHA+QXMgb2YgR0NDIHZlcnNpb24gMy4xLCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgaW5wdXQgYW5kIG91dHB1dAorb3BlcmFuZHMgdXNpbmcgc3ltYm9saWMgbmFtZXMgd2hpY2ggY2FuIGJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZQorYXNzZW1ibGVyIGNvZGUuICBUaGVzZSBuYW1lcyBhcmUgc3BlY2lmaWVkIGluc2lkZSBzcXVhcmUgYnJhY2tldHMKK3ByZWNlZGluZyB0aGUgY29uc3RyYWludCBzdHJpbmcsIGFuZCBjYW4gYmUgcmVmZXJlbmNlZCBpbnNpZGUgdGhlCithc3NlbWJsZXIgY29kZSB1c2luZyA8Y29kZT4lWzwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT5dPC9jb2RlPiBpbnN0ZWFkIG9mIGEgcGVyY2VudGFnZSBzaWduCitmb2xsb3dlZCBieSB0aGUgb3BlcmFuZCBudW1iZXIuICBVc2luZyBuYW1lZCBvcGVyYW5kcyB0aGUgYWJvdmUgZXhhbXBsZQorY291bGQgbG9vayBsaWtlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYXNtICgiZnNpbnggJVthbmdsZV0sJVtvdXRwdXRdIgorICAgICAgICAgIDogW291dHB1dF0gIj1mIiAocmVzdWx0KQorICAgICAgICAgIDogW2FuZ2xlXSAiZiIgKGFuZ2xlKSk7Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPk5vdGUgdGhhdCB0aGUgc3ltYm9saWMgb3BlcmFuZCBuYW1lcyBoYXZlIG5vIHJlbGF0aW9uIHdoYXRzb2V2ZXIgdG8KK290aGVyIEMgaWRlbnRpZmllcnMuICBZb3UgbWF5IHVzZSBhbnkgbmFtZSB5b3UgbGlrZSwgZXZlbiB0aG9zZSBvZgorZXhpc3RpbmcgQyBzeW1ib2xzLCBidXQgeW91IG11c3QgZW5zdXJlIHRoYXQgbm8gdHdvIG9wZXJhbmRzIHdpdGhpbiB0aGUgc2FtZQorYXNzZW1ibGVyIGNvbnN0cnVjdCB1c2UgdGhlIHNhbWUgc3ltYm9saWMgbmFtZS4KKworIDxwPk91dHB1dCBvcGVyYW5kIGV4cHJlc3Npb25zIG11c3QgYmUgbHZhbHVlczsgdGhlIGNvbXBpbGVyIGNhbiBjaGVjayB0aGlzLiAKK1RoZSBpbnB1dCBvcGVyYW5kcyBuZWVkIG5vdCBiZSBsdmFsdWVzLiAgVGhlIGNvbXBpbGVyIGNhbm5vdCBjaGVjaword2hldGhlciB0aGUgb3BlcmFuZHMgaGF2ZSBkYXRhIHR5cGVzIHRoYXQgYXJlIHJlYXNvbmFibGUgZm9yIHRoZQoraW5zdHJ1Y3Rpb24gYmVpbmcgZXhlY3V0ZWQuICBJdCBkb2VzIG5vdCBwYXJzZSB0aGUgYXNzZW1ibGVyIGluc3RydWN0aW9uCit0ZW1wbGF0ZSBhbmQgZG9lcyBub3Qga25vdyB3aGF0IGl0IG1lYW5zIG9yIGV2ZW4gd2hldGhlciBpdCBpcyB2YWxpZAorYXNzZW1ibGVyIGlucHV0LiAgVGhlIGV4dGVuZGVkIDxjb2RlPmFzbTwvY29kZT4gZmVhdHVyZSBpcyBtb3N0IG9mdGVuIHVzZWQgZm9yCittYWNoaW5lIGluc3RydWN0aW9ucyB0aGUgY29tcGlsZXIgaXRzZWxmIGRvZXMgbm90IGtub3cgZXhpc3QuICBJZgordGhlIG91dHB1dCBleHByZXNzaW9uIGNhbm5vdCBiZSBkaXJlY3RseSBhZGRyZXNzZWQgKGZvciBleGFtcGxlLCBpdCBpcyBhCitiaXQtZmllbGQpLCB5b3VyIGNvbnN0cmFpbnQgbXVzdCBhbGxvdyBhIHJlZ2lzdGVyLiAgSW4gdGhhdCBjYXNlLCBHQ0MKK3VzZXMgdGhlIHJlZ2lzdGVyIGFzIHRoZSBvdXRwdXQgb2YgdGhlIDxjb2RlPmFzbTwvY29kZT4sIGFuZCB0aGVuIHN0b3JlcwordGhhdCByZWdpc3RlciBpbnRvIHRoZSBvdXRwdXQuCisKKyA8cD5UaGUgb3JkaW5hcnkgb3V0cHV0IG9wZXJhbmRzIG11c3QgYmUgd3JpdGUtb25seTsgR0NDIGFzc3VtZXMgdGhhdAordGhlIHZhbHVlcyBpbiB0aGVzZSBvcGVyYW5kcyBiZWZvcmUgdGhlIGluc3RydWN0aW9uIGFyZSBkZWFkIGFuZCBuZWVkCitub3QgYmUgZ2VuZXJhdGVkLiAgRXh0ZW5kZWQgYXNtIHN1cHBvcnRzIGlucHV0LW91dHB1dCBvciByZWFkLXdyaXRlCitvcGVyYW5kcy4gIFVzZSB0aGUgY29uc3RyYWludCBjaGFyYWN0ZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4rPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGluZGljYXRlIHN1Y2ggYW4KK29wZXJhbmQgYW5kIGxpc3QgaXQgd2l0aCB0aGUgb3V0cHV0IG9wZXJhbmRzLgorCisgPHA+WW91IG1heSwgYXMgYW4gYWx0ZXJuYXRpdmUsIGxvZ2ljYWxseSBzcGxpdCBpdHMgZnVuY3Rpb24gaW50byB0d28KK3NlcGFyYXRlIG9wZXJhbmRzLCBvbmUgaW5wdXQgb3BlcmFuZCBhbmQgb25lIHdyaXRlLW9ubHkgb3V0cHV0CitvcGVyYW5kLiAgVGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVtIGlzIGV4cHJlc3NlZCBieSBjb25zdHJhaW50cwordGhhdCBzYXkgdGhleSBuZWVkIHRvIGJlIGluIHRoZSBzYW1lIGxvY2F0aW9uIHdoZW4gdGhlIGluc3RydWN0aW9uCitleGVjdXRlcy4gIFlvdSBjYW4gdXNlIHRoZSBzYW1lIEMgZXhwcmVzc2lvbiBmb3IgYm90aCBvcGVyYW5kcywgb3IKK2RpZmZlcmVudCBleHByZXNzaW9ucy4gIEZvciBleGFtcGxlLCBoZXJlIHdlIHdyaXRlIHRoZSAoZmljdGl0aW91cykKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29tYmluZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbiB3aXRoIDxjb2RlPmJhcjwvY29kZT4gYXMgaXRzIHJlYWQtb25seSBzb3VyY2UKK29wZXJhbmQgYW5kIDxjb2RlPmZvbzwvY29kZT4gYXMgaXRzIHJlYWQtd3JpdGUgZGVzdGluYXRpb246CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhc20gKCJjb21iaW5lICUyLCUwIiA6ICI9ciIgKGZvbykgOiAiMCIgKGZvbyksICJnIiAoYmFyKSk7Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZSBjb25zdHJhaW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IjAiPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBvcGVyYW5kIDEgc2F5cyB0aGF0IGl0IG11c3Qgb2NjdXB5IHRoZQorc2FtZSBsb2NhdGlvbiBhcyBvcGVyYW5kIDAuICBBIG51bWJlciBpbiBjb25zdHJhaW50IGlzIGFsbG93ZWQgb25seSBpbgorYW4gaW5wdXQgb3BlcmFuZCBhbmQgaXQgbXVzdCByZWZlciB0byBhbiBvdXRwdXQgb3BlcmFuZC4KKworIDxwPk9ubHkgYSBudW1iZXIgaW4gdGhlIGNvbnN0cmFpbnQgY2FuIGd1YXJhbnRlZSB0aGF0IG9uZSBvcGVyYW5kIGlzIGluCit0aGUgc2FtZSBwbGFjZSBhcyBhbm90aGVyLiAgVGhlIG1lcmUgZmFjdCB0aGF0IDxjb2RlPmZvbzwvY29kZT4gaXMgdGhlIHZhbHVlCitvZiBib3RoIG9wZXJhbmRzIGlzIG5vdCBlbm91Z2ggdG8gZ3VhcmFudGVlIHRoYXQgdGhleSBhcmUgaW4gdGhlCitzYW1lIHBsYWNlIGluIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibGVyIGNvZGUuICBUaGUgZm9sbG93aW5nIGRvZXMgbm90Cit3b3JrIHJlbGlhYmx5OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYXNtICgiY29tYmluZSAlMiwlMCIgOiAiPXIiIChmb28pIDogInIiIChmb28pLCAiZyIgKGJhcikpOworPC9wcmU+CisgPHA+VmFyaW91cyBvcHRpbWl6YXRpb25zIG9yIHJlbG9hZGluZyBjb3VsZCBjYXVzZSBvcGVyYW5kcyAwIGFuZCAxIHRvIGJlIGluCitkaWZmZXJlbnQgcmVnaXN0ZXJzOyBHQ0Mga25vd3Mgbm8gcmVhc29uIG5vdCB0byBkbyBzby4gIEZvciBleGFtcGxlLCB0aGUKK2NvbXBpbGVyIG1pZ2h0IGZpbmQgYSBjb3B5IG9mIHRoZSB2YWx1ZSBvZiA8Y29kZT5mb288L2NvZGU+IGluIG9uZSByZWdpc3RlciBhbmQKK3VzZSBpdCBmb3Igb3BlcmFuZCAxLCBidXQgZ2VuZXJhdGUgdGhlIG91dHB1dCBvcGVyYW5kIDAgaW4gYSBkaWZmZXJlbnQKK3JlZ2lzdGVyIChjb3B5aW5nIGl0IGFmdGVyd2FyZCB0byA8Y29kZT5mb288L2NvZGU+J3Mgb3duIGFkZHJlc3MpLiAgT2YgY291cnNlLAorc2luY2UgdGhlIHJlZ2lzdGVyIGZvciBvcGVyYW5kIDEgaXMgbm90IGV2ZW4gbWVudGlvbmVkIGluIHRoZSBhc3NlbWJsZXIKK2NvZGUsIHRoZSByZXN1bHQgd2lsbCBub3Qgd29yaywgYnV0IEdDQyBjYW4ndCB0ZWxsIHRoYXQuCisKKyA8cD5BcyBvZiBHQ0MgdmVyc2lvbiAzLjEsIG9uZSBtYXkgd3JpdGUgPGNvZGU+WzwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT5dPC9jb2RlPiBpbnN0ZWFkIG9mCit0aGUgb3BlcmFuZCBudW1iZXIgZm9yIGEgbWF0Y2hpbmcgY29uc3RyYWludC4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYXNtICgiY21vdmVxICUxLCUyLCVbcmVzdWx0XSIKKyAgICAgICAgICA6IFtyZXN1bHRdICI9ciIocmVzdWx0KQorICAgICAgICAgIDogInIiICh0ZXN0KSwgInIiKG5ldyksICJbcmVzdWx0XSIob2xkKSk7Cis8L3ByZT4KKyA8cD5Tb21ldGltZXMgeW91IG5lZWQgdG8gbWFrZSBhbiA8Y29kZT5hc208L2NvZGU+IG9wZXJhbmQgYmUgYSBzcGVjaWZpYyByZWdpc3RlciwKK2J1dCB0aGVyZSdzIG5vIG1hdGNoaW5nIGNvbnN0cmFpbnQgbGV0dGVyIGZvciB0aGF0IHJlZ2lzdGVyIDxlbT5ieQoraXRzZWxmPC9lbT4uICBUbyBmb3JjZSB0aGUgb3BlcmFuZCBpbnRvIHRoYXQgcmVnaXN0ZXIsIHVzZSBhIGxvY2FsIHZhcmlhYmxlCitmb3IgdGhlIG9wZXJhbmQgYW5kIHNwZWNpZnkgdGhlIHJlZ2lzdGVyIGluIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4gCitTZWUgPGEgaHJlZj0iRXhwbGljaXQtUmVnLVZhcnMuaHRtbCNFeHBsaWNpdC1SZWctVmFycyI+RXhwbGljaXQgUmVnIFZhcnM8L2E+LiAgVGhlbiBmb3IgdGhlIDxjb2RlPmFzbTwvY29kZT4gb3BlcmFuZCwgdXNlIGFueQorcmVnaXN0ZXIgY29uc3RyYWludCBsZXR0ZXIgdGhhdCBtYXRjaGVzIHRoZSByZWdpc3RlcjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHJlZ2lzdGVyIGludCAqcDEgYXNtICgicjAiKSA9IC4uLjsKKyAgICAgcmVnaXN0ZXIgaW50ICpwMiBhc20gKCJyMSIpID0gLi4uOworICAgICByZWdpc3RlciBpbnQgKnJlc3VsdCBhc20gKCJyMCIpOworICAgICBhc20gKCJzeXNpbnQiIDogIj1yIiAocmVzdWx0KSA6ICIwIiAocDEpLCAiciIgKHAyKSk7Cis8L3ByZT4KKyA8cD48YSBuYW1lPSJFeGFtcGxlLW9mLWFzbS13aXRoLWNsb2JiZXJlZC1hc20tcmVnIj48L2E+SW4gdGhlIGFib3ZlIGV4YW1wbGUsIGJld2FyZSB0aGF0IGEgcmVnaXN0ZXIgdGhhdCBpcyBjYWxsLWNsb2JiZXJlZCBieQordGhlIHRhcmdldCBBQkkgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBhbnkgZnVuY3Rpb24gY2FsbCBpbiB0aGUKK2Fzc2lnbm1lbnQsIGluY2x1ZGluZyBsaWJyYXJ5IGNhbGxzIGZvciBhcml0aG1ldGljIG9wZXJhdG9ycy4gCitBbHNvIGEgcmVnaXN0ZXIgbWF5IGJlIGNsb2JiZXJlZCB3aGVuIGdlbmVyYXRpbmcgc29tZSBvcGVyYXRpb25zLAorbGlrZSB2YXJpYWJsZSBzaGlmdCwgbWVtb3J5IGNvcHkgb3IgbWVtb3J5IG1vdmUgb24geDg2LiAKK0Fzc3VtaW5nIGl0IGlzIGEgY2FsbC1jbG9iYmVyZWQgcmVnaXN0ZXIsIHRoaXMgbWF5IGhhcHBlbiB0byA8Y29kZT5yMDwvY29kZT4KK2Fib3ZlIGJ5IHRoZSBhc3NpZ25tZW50IHRvIDxjb2RlPnAyPC9jb2RlPi4gIElmIHlvdSBoYXZlIHRvIHVzZSBzdWNoIGEKK3JlZ2lzdGVyLCB1c2UgdGVtcG9yYXJ5IHZhcmlhYmxlcyBmb3IgZXhwcmVzc2lvbnMgYmV0d2VlbiB0aGUgcmVnaXN0ZXIKK2Fzc2lnbm1lbnQgYW5kIHVzZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCB0MSA9IC4uLjsKKyAgICAgcmVnaXN0ZXIgaW50ICpwMSBhc20gKCJyMCIpID0gLi4uOworICAgICByZWdpc3RlciBpbnQgKnAyIGFzbSAoInIxIikgPSB0MTsKKyAgICAgcmVnaXN0ZXIgaW50ICpyZXN1bHQgYXNtICgicjAiKTsKKyAgICAgYXNtICgic3lzaW50IiA6ICI9ciIgKHJlc3VsdCkgOiAiMCIgKHAxKSwgInIiIChwMikpOworPC9wcmU+CisgPHA+U29tZSBpbnN0cnVjdGlvbnMgY2xvYmJlciBzcGVjaWZpYyBoYXJkIHJlZ2lzdGVycy4gIFRvIGRlc2NyaWJlIHRoaXMsCit3cml0ZSBhIHRoaXJkIGNvbG9uIGFmdGVyIHRoZSBpbnB1dCBvcGVyYW5kcywgZm9sbG93ZWQgYnkgdGhlIG5hbWVzIG9mCit0aGUgY2xvYmJlcmVkIGhhcmQgcmVnaXN0ZXJzIChnaXZlbiBhcyBzdHJpbmdzKS4gIEhlcmUgaXMgYSByZWFsaXN0aWMKK2V4YW1wbGUgZm9yIHRoZSBWQVg6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhc20gdm9sYXRpbGUgKCJtb3ZjMyAlMCwlMSwlMiIKKyAgICAgICAgICAgICAgICAgICA6IC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+bm8gb3V0cHV0czwvc3Bhbj4gKi8KKyAgICAgICAgICAgICAgICAgICA6ICJnIiAoZnJvbSksICJnIiAodG8pLCAiZyIgKGNvdW50KQorICAgICAgICAgICAgICAgICAgIDogInIwIiwgInIxIiwgInIyIiwgInIzIiwgInI0IiwgInI1Iik7Cis8L3ByZT4KKyA8cD5Zb3UgbWF5IG5vdCB3cml0ZSBhIGNsb2JiZXIgZGVzY3JpcHRpb24gaW4gYSB3YXkgdGhhdCBvdmVybGFwcyB3aXRoIGFuCitpbnB1dCBvciBvdXRwdXQgb3BlcmFuZC4gIEZvciBleGFtcGxlLCB5b3UgbWF5IG5vdCBoYXZlIGFuIG9wZXJhbmQKK2Rlc2NyaWJpbmcgYSByZWdpc3RlciBjbGFzcyB3aXRoIG9uZSBtZW1iZXIgaWYgeW91IG1lbnRpb24gdGhhdCByZWdpc3RlcgoraW4gdGhlIGNsb2JiZXIgbGlzdC4gIFZhcmlhYmxlcyBkZWNsYXJlZCB0byBsaXZlIGluIHNwZWNpZmljIHJlZ2lzdGVycworKHNlZSA8YSBocmVmPSJFeHBsaWNpdC1SZWctVmFycy5odG1sI0V4cGxpY2l0LVJlZy1WYXJzIj5FeHBsaWNpdCBSZWcgVmFyczwvYT4pLCBhbmQgdXNlZCBhcyBhc20gaW5wdXQgb3Igb3V0cHV0IG9wZXJhbmRzIG11c3QKK2hhdmUgbm8gcGFydCBtZW50aW9uZWQgaW4gdGhlIGNsb2JiZXIgZGVzY3JpcHRpb24uIAorVGhlcmUgaXMgbm8gd2F5IGZvciB5b3UgdG8gc3BlY2lmeSB0aGF0IGFuIGlucHV0CitvcGVyYW5kIGlzIG1vZGlmaWVkIHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIGl0IGFzIGFuIG91dHB1dAorb3BlcmFuZC4gIE5vdGUgdGhhdCBpZiBhbGwgdGhlIG91dHB1dCBvcGVyYW5kcyB5b3Ugc3BlY2lmeSBhcmUgZm9yIHRoaXMKK3B1cnBvc2UgKGFuZCBoZW5jZSB1bnVzZWQpLCB5b3UgdGhlbiBhbHNvIG5lZWQgdG8gc3BlY2lmeQorPGNvZGU+dm9sYXRpbGU8L2NvZGU+IGZvciB0aGUgPGNvZGU+YXNtPC9jb2RlPiBjb25zdHJ1Y3QsIGFzIGRlc2NyaWJlZCBiZWxvdywgdG8KK3ByZXZlbnQgR0NDIGZyb20gZGVsZXRpbmcgdGhlIDxjb2RlPmFzbTwvY29kZT4gc3RhdGVtZW50IGFzIHVudXNlZC4KKworIDxwPklmIHlvdSByZWZlciB0byBhIHBhcnRpY3VsYXIgaGFyZHdhcmUgcmVnaXN0ZXIgZnJvbSB0aGUgYXNzZW1ibGVyIGNvZGUsCit5b3UgcHJvYmFibHkgaGF2ZSB0byBsaXN0IHRoZSByZWdpc3RlciBhZnRlciB0aGUgdGhpcmQgY29sb24gdG8KK3RlbGwgdGhlIGNvbXBpbGVyIHRoZSByZWdpc3RlcidzIHZhbHVlIGlzIG1vZGlmaWVkLiAgSW4gc29tZSBhc3NlbWJsZXJzLAordGhlIHJlZ2lzdGVyIG5hbWVzIGJlZ2luIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lPC9zcGFuPjwvc2FtcD4mcnNxdW87OyB0byBwcm9kdWNlIG9uZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gdGhlCithc3NlbWJsZXIgY29kZSwgeW91IG11c3Qgd3JpdGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lJTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiB0aGUgaW5wdXQuCisKKyA8cD5JZiB5b3VyIGFzc2VtYmxlciBpbnN0cnVjdGlvbiBjYW4gYWx0ZXIgdGhlIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyLCBhZGQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gdGhlIGxpc3Qgb2YgY2xvYmJlcmVkIHJlZ2lzdGVycy4gIEdDQyBvbiBzb21lIG1hY2hpbmVzCityZXByZXNlbnRzIHRoZSBjb25kaXRpb24gY29kZXMgYXMgYSBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcjsKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VydmVzIHRvIG5hbWUgdGhpcyByZWdpc3Rlci4gIE9uIG90aGVyIG1hY2hpbmVzLCB0aGUKK2NvbmRpdGlvbiBjb2RlIGlzIGhhbmRsZWQgZGlmZmVyZW50bHksIGFuZCBzcGVjaWZ5aW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaGFzIG5vCitlZmZlY3QuICBCdXQgaXQgaXMgdmFsaWQgbm8gbWF0dGVyIHdoYXQgdGhlIG1hY2hpbmUuCisKKyA8cD5JZiB5b3VyIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgYWNjZXNzIG1lbW9yeSBpbiBhbiB1bnByZWRpY3RhYmxlCitmYXNoaW9uLCBhZGQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tZW1vcnk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gdGhlIGxpc3Qgb2YgY2xvYmJlcmVkIHJlZ2lzdGVycy4gIFRoaXMKK2NhdXNlcyBHQ0MgdG8gbm90IGtlZXAgbWVtb3J5IHZhbHVlcyBjYWNoZWQgaW4gcmVnaXN0ZXJzIGFjcm9zcyB0aGUKK2Fzc2VtYmxlciBpbnN0cnVjdGlvbiBhbmQgbm90IG9wdGltaXplIHN0b3JlcyBvciBsb2FkcyB0byB0aGF0IG1lbW9yeS4gCitZb3UgYWxzbyBzaG91bGQgYWRkIHRoZSA8Y29kZT52b2xhdGlsZTwvY29kZT4ga2V5d29yZCBpZiB0aGUgbWVtb3J5CithZmZlY3RlZCBpcyBub3QgbGlzdGVkIGluIHRoZSBpbnB1dHMgb3Igb3V0cHV0cyBvZiB0aGUgPGNvZGU+YXNtPC9jb2RlPiwgYXMKK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1lbW9yeTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjbG9iYmVyIGRvZXMgbm90IGNvdW50IGFzIGEgc2lkZS1lZmZlY3Qgb2YgdGhlCis8Y29kZT5hc208L2NvZGU+LiAgSWYgeW91IGtub3cgaG93IGxhcmdlIHRoZSBhY2Nlc3NlZCBtZW1vcnkgaXMsIHlvdSBjYW4gYWRkCitpdCBhcyBpbnB1dCBvciBvdXRwdXQgYnV0IGlmIHRoaXMgaXMgbm90IGtub3duLCB5b3Ugc2hvdWxkIGFkZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tZW1vcnk8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgYWNjZXNzIHRlbiBieXRlcyBvZiBhIHN0cmluZywgeW91CitjYW4gdXNlIGEgbWVtb3J5IGlucHV0IGxpa2U6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB7Im0iKCAoeyBzdHJ1Y3QgeyBjaGFyIHhbMTBdOyB9ICpwID0gKHZvaWQgKilwdHIgOyAqcDsgfSkgKX0uCis8L3ByZT4KKyA8cD5Ob3RlIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIHRoZSBtZW1vcnkgaW5wdXQgaXMgbmVjZXNzYXJ5LAorb3RoZXJ3aXNlIEdDQyBtaWdodCBvcHRpbWl6ZSB0aGUgc3RvcmUgdG8gPGNvZGU+eDwvY29kZT4gYXdheToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgZm9vICgpCisgICAgIHsKKyAgICAgICBpbnQgeCA9IDQyOworICAgICAgIGludCAqeSA9ICZhbXA7eDsKKyAgICAgICBpbnQgcmVzdWx0OworICAgICAgIGFzbSAoIm1hZ2ljIHN0dWZmIGFjY2Vzc2luZyBhbiAnaW50JyBwb2ludGVkIHRvIGJ5ICclMSciCisgICAgICAgICAgICA6ICI9JmFtcDtkIiAocikgOiAiYSIgKHkpLCAibSIgKCp5KSk7CisgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgfQorPC9wcmU+CisgPHA+WW91IGNhbiBwdXQgbXVsdGlwbGUgYXNzZW1ibGVyIGluc3RydWN0aW9ucyB0b2dldGhlciBpbiBhIHNpbmdsZQorPGNvZGU+YXNtPC9jb2RlPiB0ZW1wbGF0ZSwgc2VwYXJhdGVkIGJ5IHRoZSBjaGFyYWN0ZXJzIG5vcm1hbGx5IHVzZWQgaW4gYXNzZW1ibHkKK2NvZGUgZm9yIHRoZSBzeXN0ZW0uICBBIGNvbWJpbmF0aW9uIHRoYXQgd29ya3MgaW4gbW9zdCBwbGFjZXMgaXMgYSBuZXdsaW5lCit0byBicmVhayB0aGUgbGluZSwgcGx1cyBhIHRhYiBjaGFyYWN0ZXIgdG8gbW92ZSB0byB0aGUgaW5zdHJ1Y3Rpb24gZmllbGQKKyh3cml0dGVuIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XG5cdDwvc3Bhbj48L3NhbXA+JnJzcXVvOykuICBTb21ldGltZXMgc2VtaWNvbG9ucyBjYW4gYmUgdXNlZCwgaWYgdGhlCithc3NlbWJsZXIgYWxsb3dzIHNlbWljb2xvbnMgYXMgYSBsaW5lLWJyZWFraW5nIGNoYXJhY3Rlci4gIE5vdGUgdGhhdCBzb21lCithc3NlbWJsZXIgZGlhbGVjdHMgdXNlIHNlbWljb2xvbnMgdG8gc3RhcnQgYSBjb21tZW50LiAKK1RoZSBpbnB1dCBvcGVyYW5kcyBhcmUgZ3VhcmFudGVlZCBub3QgdG8gdXNlIGFueSBvZiB0aGUgY2xvYmJlcmVkCityZWdpc3RlcnMsIGFuZCBuZWl0aGVyIGRvIHRoZSBvdXRwdXQgb3BlcmFuZHMnIGFkZHJlc3Nlcywgc28geW91IGNhbgorcmVhZCBhbmQgd3JpdGUgdGhlIGNsb2JiZXJlZCByZWdpc3RlcnMgYXMgbWFueSB0aW1lcyBhcyB5b3UgbGlrZS4gIEhlcmUKK2lzIGFuIGV4YW1wbGUgb2YgbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zIGluIGEgdGVtcGxhdGU7IGl0IGFzc3VtZXMgdGhlCitzdWJyb3V0aW5lIDxjb2RlPl9mb288L2NvZGU+IGFjY2VwdHMgYXJndW1lbnRzIGluIHJlZ2lzdGVycyA5IGFuZCAxMDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGFzbSAoIm1vdmwgJTAscjlcblx0bW92bCAlMSxyMTBcblx0Y2FsbCBfZm9vIgorICAgICAgICAgIDogLyogbm8gb3V0cHV0cyAqLworICAgICAgICAgIDogImciIChmcm9tKSwgImciICh0bykKKyAgICAgICAgICA6ICJyOSIsICJyMTAiKTsKKzwvcHJlPgorIDxwPlVubGVzcyBhbiBvdXRwdXQgb3BlcmFuZCBoYXMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JmFtcDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29uc3RyYWludCBtb2RpZmllciwgR0NDCittYXkgYWxsb2NhdGUgaXQgaW4gdGhlIHNhbWUgcmVnaXN0ZXIgYXMgYW4gdW5yZWxhdGVkIGlucHV0IG9wZXJhbmQsIG9uCit0aGUgYXNzdW1wdGlvbiB0aGUgaW5wdXRzIGFyZSBjb25zdW1lZCBiZWZvcmUgdGhlIG91dHB1dHMgYXJlIHByb2R1Y2VkLiAKK1RoaXMgYXNzdW1wdGlvbiBtYXkgYmUgZmFsc2UgaWYgdGhlIGFzc2VtYmxlciBjb2RlIGFjdHVhbGx5IGNvbnNpc3RzIG9mCittb3JlIHRoYW4gb25lIGluc3RydWN0aW9uLiAgSW4gc3VjaCBhIGNhc2UsIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZhbXA7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBlYWNoIG91dHB1dAorb3BlcmFuZCB0aGF0IG1heSBub3Qgb3ZlcmxhcCBhbiBpbnB1dC4gIFNlZSA8YSBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiPk1vZGlmaWVyczwvYT4uCisKKyA8cD5JZiB5b3Ugd2FudCB0byB0ZXN0IHRoZSBjb25kaXRpb24gY29kZSBwcm9kdWNlZCBieSBhbiBhc3NlbWJsZXIKK2luc3RydWN0aW9uLCB5b3UgbXVzdCBpbmNsdWRlIGEgYnJhbmNoIGFuZCBhIGxhYmVsIGluIHRoZSA8Y29kZT5hc208L2NvZGU+Citjb25zdHJ1Y3QsIGFzIGZvbGxvd3M6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhc20gKCJjbHIgJTBcblx0ZnJvYiAlMVxuXHRiZXEgMGZcblx0bW92ICMxLCUwXG4wOiIKKyAgICAgICAgICA6ICJnIiAocmVzdWx0KQorICAgICAgICAgIDogImciIChpbnB1dCkpOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGlzIGFzc3VtZXMgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgbG9jYWwgbGFiZWxzLCBhcyB0aGUgR05VIGFzc2VtYmxlcgorYW5kIG1vc3QgVW5peCBhc3NlbWJsZXJzIGRvLgorCisgPHA+U3BlYWtpbmcgb2YgbGFiZWxzLCBqdW1wcyBmcm9tIG9uZSA8Y29kZT5hc208L2NvZGU+IHRvIGFub3RoZXIgYXJlIG5vdAorc3VwcG9ydGVkLiAgVGhlIGNvbXBpbGVyJ3Mgb3B0aW1pemVycyBkbyBub3Qga25vdyBhYm91dCB0aGVzZSBqdW1wcywgYW5kCit0aGVyZWZvcmUgdGhleSBjYW5ub3QgdGFrZSBhY2NvdW50IG9mIHRoZW0gd2hlbiBkZWNpZGluZyBob3cgdG8KK29wdGltaXplLiAgU2VlIDxhIGhyZWY9IkV4dGVuZGVkLWFzbS13aXRoLWdvdG8uaHRtbCNFeHRlbmRlZC1hc20td2l0aC1nb3RvIj5FeHRlbmRlZCBhc20gd2l0aCBnb3RvPC9hPi4KKworIDxwPjxhIG5hbWU9ImluZGV4LW1hY3Jvcy1jb250YWluaW5nLV8wMDQwY29kZV8wMDdiYXNtXzAwN2QtMjgwOCI+PC9hPlVzdWFsbHkgdGhlIG1vc3QgY29udmVuaWVudCB3YXkgdG8gdXNlIHRoZXNlIDxjb2RlPmFzbTwvY29kZT4gaW5zdHJ1Y3Rpb25zIGlzIHRvCitlbmNhcHN1bGF0ZSB0aGVtIGluIG1hY3JvcyB0aGF0IGxvb2sgbGlrZSBmdW5jdGlvbnMuICBGb3IgZXhhbXBsZSwKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgc2luKHgpICAgICAgIFwKKyAgICAgKHsgZG91YmxlIF9fdmFsdWUsIF9fYXJnID0gKHgpOyAgIFwKKyAgICAgICAgYXNtICgiZnNpbnggJTEsJTAiOiAiPWYiIChfX3ZhbHVlKTogImYiIChfX2FyZykpOyAgXAorICAgICAgICBfX3ZhbHVlOyB9KQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5IZXJlIHRoZSB2YXJpYWJsZSA8Y29kZT5fX2FyZzwvY29kZT4gaXMgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24KK29wZXJhdGVzIG9uIGEgcHJvcGVyIDxjb2RlPmRvdWJsZTwvY29kZT4gdmFsdWUsIGFuZCB0byBhY2NlcHQgb25seSB0aG9zZQorYXJndW1lbnRzIDxjb2RlPng8L2NvZGU+IHRoYXQgY2FuIGNvbnZlcnQgYXV0b21hdGljYWxseSB0byBhIDxjb2RlPmRvdWJsZTwvY29kZT4uCisKKyA8cD5Bbm90aGVyIHdheSB0byBtYWtlIHN1cmUgdGhlIGluc3RydWN0aW9uIG9wZXJhdGVzIG9uIHRoZSBjb3JyZWN0IGRhdGEKK3R5cGUgaXMgdG8gdXNlIGEgY2FzdCBpbiB0aGUgPGNvZGU+YXNtPC9jb2RlPi4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdXNpbmcgYQordmFyaWFibGUgPGNvZGU+X19hcmc8L2NvZGU+IGluIHRoYXQgaXQgY29udmVydHMgbW9yZSBkaWZmZXJlbnQgdHlwZXMuICBGb3IKK2V4YW1wbGUsIGlmIHRoZSBkZXNpcmVkIHR5cGUgaXMgPGNvZGU+aW50PC9jb2RlPiwgY2FzdGluZyB0aGUgYXJndW1lbnQgdG8KKzxjb2RlPmludDwvY29kZT4gYWNjZXB0cyBhIHBvaW50ZXIgd2l0aCBubyBjb21wbGFpbnQsIHdoaWxlIGFzc2lnbmluZyB0aGUKK2FyZ3VtZW50IHRvIGFuIDxjb2RlPmludDwvY29kZT4gdmFyaWFibGUgbmFtZWQgPGNvZGU+X19hcmc8L2NvZGU+IHdhcm5zIGFib3V0Cit1c2luZyBhIHBvaW50ZXIgdW5sZXNzIHRoZSBjYWxsZXIgZXhwbGljaXRseSBjYXN0cyBpdC4KKworIDxwPklmIGFuIDxjb2RlPmFzbTwvY29kZT4gaGFzIG91dHB1dCBvcGVyYW5kcywgR0NDIGFzc3VtZXMgZm9yIG9wdGltaXphdGlvbgorcHVycG9zZXMgdGhlIGluc3RydWN0aW9uIGhhcyBubyBzaWRlIGVmZmVjdHMgZXhjZXB0IHRvIGNoYW5nZSB0aGUgb3V0cHV0CitvcGVyYW5kcy4gIFRoaXMgZG9lcyBub3QgbWVhbiBpbnN0cnVjdGlvbnMgd2l0aCBhIHNpZGUgZWZmZWN0IGNhbm5vdCBiZQordXNlZCwgYnV0IHlvdSBtdXN0IGJlIGNhcmVmdWwsIGJlY2F1c2UgdGhlIGNvbXBpbGVyIG1heSBlbGltaW5hdGUgdGhlbQoraWYgdGhlIG91dHB1dCBvcGVyYW5kcyBhcmVuJ3QgdXNlZCwgb3IgbW92ZSB0aGVtIG91dCBvZiBsb29wcywgb3IKK3JlcGxhY2UgdHdvIHdpdGggb25lIGlmIHRoZXkgY29uc3RpdHV0ZSBhIGNvbW1vbiBzdWJleHByZXNzaW9uLiAgQWxzbywKK2lmIHlvdXIgaW5zdHJ1Y3Rpb24gZG9lcyBoYXZlIGEgc2lkZSBlZmZlY3Qgb24gYSB2YXJpYWJsZSB0aGF0IG90aGVyd2lzZQorYXBwZWFycyBub3QgdG8gY2hhbmdlLCB0aGUgb2xkIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBtYXkgYmUgcmV1c2VkIGxhdGVyCitpZiBpdCBoYXBwZW5zIHRvIGJlIGZvdW5kIGluIGEgcmVnaXN0ZXIuCisKKyA8cD5Zb3UgY2FuIHByZXZlbnQgYW4gPGNvZGU+YXNtPC9jb2RlPiBpbnN0cnVjdGlvbiBmcm9tIGJlaW5nIGRlbGV0ZWQKK2J5IHdyaXRpbmcgdGhlIGtleXdvcmQgPGNvZGU+dm9sYXRpbGU8L2NvZGU+IGFmdGVyCit0aGUgPGNvZGU+YXNtPC9jb2RlPi4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBnZXRfYW5kX3NldF9wcmlvcml0eShuZXcpICAgICAgICAgICAgICBcCisgICAgICh7IGludCBfX29sZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhc20gdm9sYXRpbGUgKCJnZXRfYW5kX3NldF9wcmlvcml0eSAlMCwgJTEiIFwKKyAgICAgICAgICAgICAgICAgICAgICA6ICI9ZyIgKF9fb2xkKSA6ICJnIiAobmV3KSk7ICBcCisgICAgICAgIF9fb2xkOyB9KQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGUgPGNvZGU+dm9sYXRpbGU8L2NvZGU+IGtleXdvcmQgaW5kaWNhdGVzIHRoYXQgdGhlIGluc3RydWN0aW9uIGhhcworaW1wb3J0YW50IHNpZGUtZWZmZWN0cy4gIEdDQyBkb2VzIG5vdCBkZWxldGUgYSB2b2xhdGlsZSA8Y29kZT5hc208L2NvZGU+IGlmCitpdCBpcyByZWFjaGFibGUuICAoVGhlIGluc3RydWN0aW9uIGNhbiBzdGlsbCBiZSBkZWxldGVkIGlmIEdDQyBjYW4KK3Byb3ZlIHRoYXQgY29udHJvbCBmbG93IG5ldmVyIHJlYWNoZXMgdGhlIGxvY2F0aW9uIG9mIHRoZQoraW5zdHJ1Y3Rpb24uKSAgTm90ZSB0aGF0IGV2ZW4gYSB2b2xhdGlsZSA8Y29kZT5hc208L2NvZGU+IGluc3RydWN0aW9uCitjYW4gYmUgbW92ZWQgcmVsYXRpdmUgdG8gb3RoZXIgY29kZSwgaW5jbHVkaW5nIGFjcm9zcyBqdW1wCitpbnN0cnVjdGlvbnMuICBGb3IgZXhhbXBsZSwgb24gbWFueSB0YXJnZXRzIHRoZXJlIGlzIGEgc3lzdGVtCityZWdpc3RlciB0aGF0IGNhbiBiZSBzZXQgdG8gY29udHJvbCB0aGUgcm91bmRpbmcgbW9kZSBvZgorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4gIFlvdSBtaWdodCB0cnkKK3NldHRpbmcgaXQgd2l0aCBhIHZvbGF0aWxlIDxjb2RlPmFzbTwvY29kZT4sIGxpa2UgdGhpcyBQb3dlclBDIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgYXNtIHZvbGF0aWxlKCJtdGZzZiAyNTUsJTAiIDogOiAiZiIgKGZwZW52KSk7CisgICAgICAgICAgICBzdW0gPSB4ICsgeTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyBkb2VzIG5vdCB3b3JrIHJlbGlhYmx5LCBhcyB0aGUgY29tcGlsZXIgbWF5IG1vdmUgdGhlIGFkZGl0aW9uIGJhY2sKK2JlZm9yZSB0aGUgdm9sYXRpbGUgPGNvZGU+YXNtPC9jb2RlPi4gIFRvIG1ha2UgaXQgd29yayB5b3UgbmVlZCB0byBhZGQgYW4KK2FydGlmaWNpYWwgZGVwZW5kZW5jeSB0byB0aGUgPGNvZGU+YXNtPC9jb2RlPiByZWZlcmVuY2luZyBhIHZhcmlhYmxlIGluIHRoZSBjb2RlCit5b3UgZG9uJ3Qgd2FudCBtb3ZlZCwgZm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgYXNtIHZvbGF0aWxlICgibXRmc2YgMjU1LCUxIiA6ICI9WCIoc3VtKTogImYiKGZwZW52KSk7CisgICAgICAgICBzdW0gPSB4ICsgeTsKKzwvcHJlPgorIDxwPlNpbWlsYXJseSwgeW91IGNhbid0IGV4cGVjdCBhCitzZXF1ZW5jZSBvZiB2b2xhdGlsZSA8Y29kZT5hc208L2NvZGU+IGluc3RydWN0aW9ucyB0byByZW1haW4gcGVyZmVjdGx5Citjb25zZWN1dGl2ZS4gIElmIHlvdSB3YW50IGNvbnNlY3V0aXZlIG91dHB1dCwgdXNlIGEgc2luZ2xlIDxjb2RlPmFzbTwvY29kZT4uIAorQWxzbywgR0NDIHBlcmZvcm1zIHNvbWUgb3B0aW1pemF0aW9ucyBhY3Jvc3MgYSB2b2xhdGlsZSA8Y29kZT5hc208L2NvZGU+CitpbnN0cnVjdGlvbjsgR0NDIGRvZXMgbm90ICZsZHF1bztmb3JnZXQgZXZlcnl0aGluZyZyZHF1bzsgd2hlbiBpdCBlbmNvdW50ZXJzCithIHZvbGF0aWxlIDxjb2RlPmFzbTwvY29kZT4gaW5zdHJ1Y3Rpb24gdGhlIHdheSBzb21lIG90aGVyIGNvbXBpbGVycyBkby4KKworIDxwPkFuIDxjb2RlPmFzbTwvY29kZT4gaW5zdHJ1Y3Rpb24gd2l0aG91dCBhbnkgb3V0cHV0IG9wZXJhbmRzIGlzIHRyZWF0ZWQKK2lkZW50aWNhbGx5IHRvIGEgdm9sYXRpbGUgPGNvZGU+YXNtPC9jb2RlPiBpbnN0cnVjdGlvbi4KKworIDxwPkl0IGlzIGEgbmF0dXJhbCBpZGVhIHRvIGxvb2sgZm9yIGEgd2F5IHRvIGdpdmUgYWNjZXNzIHRvIHRoZSBjb25kaXRpb24KK2NvZGUgbGVmdCBieSB0aGUgYXNzZW1ibGVyIGluc3RydWN0aW9uLiAgSG93ZXZlciwgd2hlbiB3ZSBhdHRlbXB0ZWQgdG8KK2ltcGxlbWVudCB0aGlzLCB3ZSBmb3VuZCBubyB3YXkgdG8gbWFrZSBpdCB3b3JrIHJlbGlhYmx5LiAgVGhlIHByb2JsZW0KK2lzIHRoYXQgb3V0cHV0IG9wZXJhbmRzIG1pZ2h0IG5lZWQgcmVsb2FkaW5nLCB3aGljaCByZXN1bHQgaW4KK2FkZGl0aW9uYWwgZm9sbG93aW5nICZsZHF1bztzdG9yZSZyZHF1bzsgaW5zdHJ1Y3Rpb25zLiAgT24gbW9zdCBtYWNoaW5lcywgdGhlc2UKK2luc3RydWN0aW9ucyBhbHRlciB0aGUgY29uZGl0aW9uIGNvZGUgYmVmb3JlIHRoZXJlIGlzIHRpbWUgdG8KK3Rlc3QgaXQuICBUaGlzIHByb2JsZW0gZG9lc24ndCBhcmlzZSBmb3Igb3JkaW5hcnkgJmxkcXVvO3Rlc3QmcmRxdW87IGFuZAorJmxkcXVvO2NvbXBhcmUmcmRxdW87IGluc3RydWN0aW9ucyBiZWNhdXNlIHRoZXkgZG9uJ3QgaGF2ZSBhbnkgb3V0cHV0IG9wZXJhbmRzLgorCisgPHA+Rm9yIHJlYXNvbnMgc2ltaWxhciB0byB0aG9zZSBkZXNjcmliZWQgYWJvdmUsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBnaXZlCithbiBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb24gYWNjZXNzIHRvIHRoZSBjb25kaXRpb24gY29kZSBsZWZ0IGJ5IHByZXZpb3VzCitpbnN0cnVjdGlvbnMuCisKKyA8cD48YSBuYW1lPSJFeHRlbmRlZC1hc20td2l0aC1nb3RvIj48L2E+QXMgb2YgR0NDIHZlcnNpb24gNC41LCA8Y29kZT5hc20gZ290bzwvY29kZT4gbWF5IGJlIHVzZWQgdG8gaGF2ZSB0aGUgYXNzZW1ibHkKK2p1bXAgdG8gb25lIG9yIG1vcmUgQyBsYWJlbHMuICBJbiB0aGlzIGZvcm0sIGEgZmlmdGggc2VjdGlvbiBhZnRlciB0aGUKK2Nsb2JiZXIgbGlzdCBjb250YWlucyBhIGxpc3Qgb2YgYWxsIEMgbGFiZWxzIHRvIHdoaWNoIHRoZSBhc3NlbWJseSBtYXkganVtcC4gCitFYWNoIGxhYmVsIG9wZXJhbmQgaXMgaW1wbGljaXRseSBzZWxmLW5hbWVkLiAgVGhlIDxjb2RlPmFzbTwvY29kZT4gaXMgYWxzbyBhc3N1bWVkCit0byBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgc3RhdGVtZW50LgorCisgPHA+VGhpcyBmb3JtIG9mIDxjb2RlPmFzbTwvY29kZT4gaXMgcmVzdHJpY3RlZCB0byBub3QgaGF2ZSBvdXRwdXRzLiAgVGhpcyBpcyBkdWUKK3RvIGEgaW50ZXJuYWwgcmVzdHJpY3Rpb24gaW4gdGhlIGNvbXBpbGVyIHRoYXQgY29udHJvbCB0cmFuc2ZlciBpbnN0cnVjdGlvbnMKK2Nhbm5vdCBoYXZlIG91dHB1dHMuICBUaGlzIHJlc3RyaWN0aW9uIG9uIDxjb2RlPmFzbSBnb3RvPC9jb2RlPiBtYXkgYmUgbGlmdGVkCitpbiBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBjb21waWxlci4gIEluIHRoZSBtZWFudGltZSwgPGNvZGU+YXNtIGdvdG88L2NvZGU+CittYXkgaW5jbHVkZSBhIG1lbW9yeSBjbG9iYmVyLCBhbmQgc28gbGVhdmUgb3V0cHV0cyBpbiBtZW1vcnkuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgZnJvYihpbnQgeCkKKyAgICAgeworICAgICAgIGludCB5OworICAgICAgIGFzbSBnb3RvICgiZnJvYiAlJXI1LCAlMTsgamMgJWxbZXJyb3JdOyBtb3YgKCUyKSwgJSVyNSIKKyAgICAgICAgICAgICAgICAgOiA6ICJyIih4KSwgInIiKCZhbXA7eSkgOiAicjUiLCAibWVtb3J5IiA6IGVycm9yKTsKKyAgICAgICByZXR1cm4geTsKKyAgICAgIGVycm9yOgorICAgICAgIHJldHVybiAtMTsKKyAgICAgfQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5JbiB0aGlzIChpbmVmZmljaWVudCkgZXhhbXBsZSwgdGhlIDxjb2RlPmZyb2I8L2NvZGU+IGluc3RydWN0aW9uIHNldHMgdGhlCitjYXJyeSBiaXQgdG8gaW5kaWNhdGUgYW4gZXJyb3IuICBUaGUgPGNvZGU+amM8L2NvZGU+IGluc3RydWN0aW9uIGRldGVjdHMKK3RoaXMgYW5kIGJyYW5jaGVzIHRvIHRoZSA8Y29kZT5lcnJvcjwvY29kZT4gbGFiZWwuICBGaW5hbGx5LCB0aGUgb3V0cHV0CitvZiB0aGUgPGNvZGU+ZnJvYjwvY29kZT4gaW5zdHJ1Y3Rpb24gKDxjb2RlPiVyNTwvY29kZT4pIGlzIHN0b3JlZCBpbnRvIHRoZSBtZW1vcnkKK2ZvciB2YXJpYWJsZSA8Y29kZT55PC9jb2RlPiwgd2hpY2ggaXMgbGF0ZXIgcmVhZCBieSB0aGUgPGNvZGU+cmV0dXJuPC9jb2RlPiBzdGF0ZW1lbnQuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2b2lkIGRvaXQodm9pZCkKKyAgICAgeworICAgICAgIGludCBpID0gMDsKKyAgICAgICBhc20gZ290byAoIm1mc3IgJSVyMSwgMTIzOyBqbXAgJSVyMTsiCisgICAgICAgICAgICAgICAgICIucHVzaHNlY3Rpb24gZG9pdF90YWJsZTsiCisgICAgICAgICAgICAgICAgICIubG9uZyAlbDAsICVsMSwgJWwyLCAlbDM7IgorICAgICAgICAgICAgICAgICAiLnBvcHNlY3Rpb24iCisgICAgICAgICAgICAgICAgIDogOiA6ICJyMSIgOiBsYWJlbDEsIGxhYmVsMiwgbGFiZWwzLCBsYWJlbDQpOworICAgICAgIF9fYnVpbHRpbl91bnJlYWNoYWJsZSAoKTsKKyAgICAgCisgICAgICBsYWJlbDE6CisgICAgICAgZjEoKTsKKyAgICAgICByZXR1cm47CisgICAgICBsYWJlbDI6CisgICAgICAgZjIoKTsKKyAgICAgICByZXR1cm47CisgICAgICBsYWJlbDM6CisgICAgICAgaSA9IDE7CisgICAgICBsYWJlbDQ6CisgICAgICAgZjMoaSk7CisgICAgIH0KKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+SW4gdGhpcyAoYWxzbyBpbmVmZmljaWVudCkgZXhhbXBsZSwgdGhlIDxjb2RlPm1mc3I8L2NvZGU+IGluc3RydWN0aW9uIHJlYWRzCithbiBhZGRyZXNzIGZyb20gc29tZSBvdXQtb2YtYmFuZCBtYWNoaW5lIHJlZ2lzdGVyLCBhbmQgdGhlIGZvbGxvd2luZworPGNvZGU+am1wPC9jb2RlPiBpbnN0cnVjdGlvbiBicmFuY2hlcyB0byB0aGF0IGFkZHJlc3MuICBUaGUgYWRkcmVzcyByZWFkIGJ5Cit0aGUgPGNvZGU+bWZzcjwvY29kZT4gaW5zdHJ1Y3Rpb24gaXMgYXNzdW1lZCB0byBoYXZlIGJlZW4gcHJldmlvdXNseSBzZXQgdmlhCitzb21lIGFwcGxpY2F0aW9uLXNwZWNpZmljIG1lY2hhbmlzbSB0byBiZSBvbmUgb2YgdGhlIGZvdXIgdmFsdWVzIHN0b3JlZAoraW4gdGhlIDxjb2RlPmRvaXRfdGFibGU8L2NvZGU+IHNlY3Rpb24uICBGaW5hbGx5LCB0aGUgPGNvZGU+YXNtPC9jb2RlPiBpcyBmb2xsb3dlZAorYnkgYSBjYWxsIHRvIDxjb2RlPl9fYnVpbHRpbl91bnJlYWNoYWJsZTwvY29kZT4gdG8gaW5kaWNhdGUgdGhhdCB0aGUgPGNvZGU+YXNtPC9jb2RlPgorZG9lcyBub3QgaW4gZmFjdCBmYWxsIHRocm91Z2guCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIFRSQUNFMShOVU0pICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICBhc20gZ290byAoIjA6IG5vcDsiICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICIucHVzaHNlY3Rpb24gdHJhY2VfdGFibGU7IiAgIFwKKyAgICAgICAgICAgICAgICAgICAiLmxvbmcgMGIsICVsMDsiICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIi5wb3BzZWN0aW9uIiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIDogOiA6IDogdHJhY2UjTlVNKTsgICAgICAgICAgIFwKKyAgICAgICAgIGlmICgwKSB7IHRyYWNlI05VTTogdHJhY2UoKTsgfSAgICAgICAgICBcCisgICAgICAgfSB3aGlsZSAoMCkKKyAgICAgI2RlZmluZSBUUkFDRSAgVFJBQ0UxKF9fQ09VTlRFUl9fKQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5JbiB0aGlzIGV4YW1wbGUgKHdoaWNoIGluIGZhY3QgaW5zcGlyZWQgdGhlIDxjb2RlPmFzbSBnb3RvPC9jb2RlPiBmZWF0dXJlKQord2Ugd2FudCBvbiByYXJlIG9jY2FzaW9ucyB0byBjYWxsIHRoZSA8Y29kZT50cmFjZTwvY29kZT4gZnVuY3Rpb247IG9uIG90aGVyCitvY2Nhc2lvbnMgd2UnZCBsaWtlIHRvIGtlZXAgdGhlIG92ZXJoZWFkIHRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtLiAKK1RoZSBub3JtYWwgY29kZSBwYXRoIGNvbnNpc3RzIG9mIGEgc2luZ2xlIDxjb2RlPm5vcDwvY29kZT4gaW5zdHJ1Y3Rpb24uIAorSG93ZXZlciwgd2UgcmVjb3JkIHRoZSBhZGRyZXNzIG9mIHRoaXMgPGNvZGU+bm9wPC9jb2RlPiB0b2dldGhlciB3aXRoIHRoZQorYWRkcmVzcyBvZiBhIGxhYmVsIHRoYXQgY2FsbHMgdGhlIDxjb2RlPnRyYWNlPC9jb2RlPiBmdW5jdGlvbi4gIFRoaXMgYWxsb3dzCit0aGUgPGNvZGU+bm9wPC9jb2RlPiBpbnN0cnVjdGlvbiB0byBiZSBwYXRjaGVkIGF0IHJ1biB0aW1lIHRvIGJlIGFuCit1bmNvbmRpdGlvbmFsIGJyYW5jaCB0byB0aGUgc3RvcmVkIGxhYmVsLiAgSXQgaXMgYXNzdW1lZCB0aGF0IGFuCitvcHRpbWl6aW5nIGNvbXBpbGVyIG1vdmVzIHRoZSBsYWJlbGVkIGJsb2NrIG91dCBvZiBsaW5lLCB0bworb3B0aW1pemUgdGhlIGZhbGwgdGhyb3VnaCBwYXRoIGZyb20gdGhlIDxjb2RlPmFzbTwvY29kZT4uCisKKyA8cD5JZiB5b3UgYXJlIHdyaXRpbmcgYSBoZWFkZXIgZmlsZSB0aGF0IHNob3VsZCBiZSBpbmNsdWRhYmxlIGluIElTTyBDCitwcm9ncmFtcywgd3JpdGUgPGNvZGU+X19hc21fXzwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT5hc208L2NvZGU+LiAgU2VlIDxhIGhyZWY9IkFsdGVybmF0ZS1LZXl3b3Jkcy5odG1sI0FsdGVybmF0ZS1LZXl3b3JkcyI+QWx0ZXJuYXRlIEtleXdvcmRzPC9hPi4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjQxLjEgU2l6ZSBvZiBhbiA8Y29kZT5hc208L2NvZGU+PC9oND4KKworPHA+U29tZSB0YXJnZXRzIHJlcXVpcmUgdGhhdCBHQ0MgdHJhY2sgdGhlIHNpemUgb2YgZWFjaCBpbnN0cnVjdGlvbiB1c2VkIGluCitvcmRlciB0byBnZW5lcmF0ZSBjb3JyZWN0IGNvZGUuICBCZWNhdXNlIHRoZSBmaW5hbCBsZW5ndGggb2YgYW4KKzxjb2RlPmFzbTwvY29kZT4gaXMgb25seSBrbm93biBieSB0aGUgYXNzZW1ibGVyLCBHQ0MgbXVzdCBtYWtlIGFuIGVzdGltYXRlIGFzCit0byBob3cgYmlnIGl0IHdpbGwgYmUuICBUaGUgZXN0aW1hdGUgaXMgZm9ybWVkIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2YKK3N0YXRlbWVudHMgaW4gdGhlIHBhdHRlcm4gb2YgdGhlIDxjb2RlPmFzbTwvY29kZT4gYW5kIG11bHRpcGx5aW5nIHRoYXQgYnkgdGhlCitsZW5ndGggb2YgdGhlIGxvbmdlc3QgaW5zdHJ1Y3Rpb24gb24gdGhhdCBwcm9jZXNzb3IuICBTdGF0ZW1lbnRzIGluIHRoZQorPGNvZGU+YXNtPC9jb2RlPiBhcmUgaWRlbnRpZmllZCBieSBuZXdsaW5lIGNoYXJhY3RlcnMgYW5kIHdoYXRldmVyIHN0YXRlbWVudAorc2VwYXJhdG9yIGNoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgYXNzZW1ibGVyOyBvbiBtb3N0IHByb2Nlc3NvcnMKK3RoaXMgaXMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIuCisKKyA8cD5Ob3JtYWxseSwgR0NDJ3MgZXN0aW1hdGUgaXMgcGVyZmVjdGx5IGFkZXF1YXRlIHRvIGVuc3VyZSB0aGF0IGNvcnJlY3QKK2NvZGUgaXMgZ2VuZXJhdGVkLCBidXQgaXQgaXMgcG9zc2libGUgdG8gY29uZnVzZSB0aGUgY29tcGlsZXIgaWYgeW91IHVzZQorcHNldWRvIGluc3RydWN0aW9ucyBvciBhc3NlbWJsZXIgbWFjcm9zIHRoYXQgZXhwYW5kIGludG8gbXVsdGlwbGUgcmVhbAoraW5zdHJ1Y3Rpb25zIG9yIGlmIHlvdSB1c2UgYXNzZW1ibGVyIGRpcmVjdGl2ZXMgdGhhdCBleHBhbmQgdG8gbW9yZQorc3BhY2UgaW4gdGhlIG9iamVjdCBmaWxlIHRoYW4gaXMgbmVlZGVkIGZvciBhIHNpbmdsZSBpbnN0cnVjdGlvbi4gCitJZiB0aGlzIGhhcHBlbnMgdGhlbiB0aGUgYXNzZW1ibGVyIHByb2R1Y2VzIGEgZGlhZ25vc3RpYyBzYXlpbmcgdGhhdAorYSBsYWJlbCBpcyB1bnJlYWNoYWJsZS4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjQxLjIgaTM4NiBmbG9hdGluZy1wb2ludCBhc20gb3BlcmFuZHM8L2g0PgorCis8cD5PbiBpMzg2IHRhcmdldHMsIHRoZXJlIGFyZSBzZXZlcmFsIHJ1bGVzIG9uIHRoZSB1c2FnZSBvZiBzdGFjay1saWtlIHJlZ2lzdGVycworaW4gdGhlIG9wZXJhbmRzIG9mIGFuIDxjb2RlPmFzbTwvY29kZT4uICBUaGVzZSBydWxlcyBhcHBseSBvbmx5IHRvIHRoZSBvcGVyYW5kcwordGhhdCBhcmUgc3RhY2stbGlrZSByZWdpc3RlcnM6CisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPkdpdmVuIGEgc2V0IG9mIGlucHV0IHJlZ2lzdGVycyB0aGF0IGRpZSBpbiBhbiA8Y29kZT5hc208L2NvZGU+LCBpdCBpcworbmVjZXNzYXJ5IHRvIGtub3cgd2hpY2ggYXJlIGltcGxpY2l0bHkgcG9wcGVkIGJ5IHRoZSA8Y29kZT5hc208L2NvZGU+LCBhbmQKK3doaWNoIG11c3QgYmUgZXhwbGljaXRseSBwb3BwZWQgYnkgR0NDLgorCisgICAgIDxwPkFuIGlucHV0IHJlZ2lzdGVyIHRoYXQgaXMgaW1wbGljaXRseSBwb3BwZWQgYnkgdGhlIDxjb2RlPmFzbTwvY29kZT4gbXVzdCBiZQorZXhwbGljaXRseSBjbG9iYmVyZWQsIHVubGVzcyBpdCBpcyBjb25zdHJhaW5lZCB0byBtYXRjaCBhbgorb3V0cHV0IG9wZXJhbmQuCisKKyAgICAgPGxpPkZvciBhbnkgaW5wdXQgcmVnaXN0ZXIgdGhhdCBpcyBpbXBsaWNpdGx5IHBvcHBlZCBieSBhbiA8Y29kZT5hc208L2NvZGU+LCBpdCBpcworbmVjZXNzYXJ5IHRvIGtub3cgaG93IHRvIGFkanVzdCB0aGUgc3RhY2sgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHBvcC4gCitJZiBhbnkgbm9uLXBvcHBlZCBpbnB1dCBpcyBjbG9zZXIgdG8gdGhlIHRvcCBvZiB0aGUgcmVnLXN0YWNrIHRoYW4KK3RoZSBpbXBsaWNpdGx5IHBvcHBlZCByZWdpc3RlciwgaXQgd291bGQgbm90IGJlIHBvc3NpYmxlIHRvIGtub3cgd2hhdCB0aGUKK3N0YWNrIGxvb2tlZCBsaWtlJm1kYXNoO2l0J3Mgbm90IGNsZWFyIGhvdyB0aGUgcmVzdCBvZiB0aGUgc3RhY2sgJmxkcXVvO3NsaWRlcwordXAmcmRxdW87LgorCisgICAgIDxwPkFsbCBpbXBsaWNpdGx5IHBvcHBlZCBpbnB1dCByZWdpc3RlcnMgbXVzdCBiZSBjbG9zZXIgdG8gdGhlIHRvcCBvZgordGhlIHJlZy1zdGFjayB0aGFuIGFueSBpbnB1dCB0aGF0IGlzIG5vdCBpbXBsaWNpdGx5IHBvcHBlZC4KKworICAgICA8cD5JdCBpcyBwb3NzaWJsZSB0aGF0IGlmIGFuIGlucHV0IGRpZXMgaW4gYW4gPGNvZGU+YXNtPC9jb2RlPiwgdGhlIGNvbXBpbGVyIG1pZ2h0Cit1c2UgdGhlIGlucHV0IHJlZ2lzdGVyIGZvciBhbiBvdXRwdXQgcmVsb2FkLiAgQ29uc2lkZXIgdGhpcyBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGFzbSAoImZvbyIgOiAiPXQiIChhKSA6ICJmIiAoYikpOworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyBjb2RlIHNheXMgdGhhdCBpbnB1dCA8Y29kZT5iPC9jb2RlPiBpcyBub3QgcG9wcGVkIGJ5IHRoZSA8Y29kZT5hc208L2NvZGU+LCBhbmQgdGhhdAordGhlIDxjb2RlPmFzbTwvY29kZT4gcHVzaGVzIGEgcmVzdWx0IG9udG8gdGhlIHJlZy1zdGFjaywgaS5lLiwgdGhlIHN0YWNrIGlzIG9uZQorZGVlcGVyIGFmdGVyIHRoZSA8Y29kZT5hc208L2NvZGU+IHRoYW4gaXQgd2FzIGJlZm9yZS4gIEJ1dCwgaXQgaXMgcG9zc2libGUgdGhhdAorcmVsb2FkIG1heSB0aGluayB0aGF0IGl0IGNhbiB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZm9yIGJvdGggdGhlIGlucHV0IGFuZAordGhlIG91dHB1dC4KKworICAgICA8cD5UbyBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcsCitpZiBhbnkgaW5wdXQgb3BlcmFuZCB1c2VzIHRoZSA8Y29kZT5mPC9jb2RlPiBjb25zdHJhaW50LCBhbGwgb3V0cHV0IHJlZ2lzdGVyCitjb25zdHJhaW50cyBtdXN0IHVzZSB0aGUgPGNvZGU+JmFtcDs8L2NvZGU+IGVhcmx5LWNsb2JiZXIgbW9kaWZpZXIuCisKKyAgICAgPHA+VGhlIGV4YW1wbGUgYWJvdmUgd291bGQgYmUgY29ycmVjdGx5IHdyaXR0ZW4gYXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgYXNtICgiZm9vIiA6ICI9JmFtcDt0IiAoYSkgOiAiZiIgKGIpKTsKKzwvcHJlPgorICAgICA8bGk+U29tZSBvcGVyYW5kcyBuZWVkIHRvIGJlIGluIHBhcnRpY3VsYXIgcGxhY2VzIG9uIHRoZSBzdGFjay4gIEFsbAorb3V0cHV0IG9wZXJhbmRzIGZhbGwgaW4gdGhpcyBjYXRlZ29yeSZtZGFzaDtHQ0MgaGFzIG5vIG90aGVyIHdheSB0bwora25vdyB3aGljaCByZWdpc3RlcnMgdGhlIG91dHB1dHMgYXBwZWFyIGluIHVubGVzcyB5b3UgaW5kaWNhdGUKK3RoaXMgaW4gdGhlIGNvbnN0cmFpbnRzLgorCisgICAgIDxwPk91dHB1dCBvcGVyYW5kcyBtdXN0IHNwZWNpZmljYWxseSBpbmRpY2F0ZSB3aGljaCByZWdpc3RlciBhbiBvdXRwdXQKK2FwcGVhcnMgaW4gYWZ0ZXIgYW4gPGNvZGU+YXNtPC9jb2RlPi4gIDxjb2RlPj1mPC9jb2RlPiBpcyBub3QgYWxsb3dlZDogdGhlIG9wZXJhbmQKK2NvbnN0cmFpbnRzIG11c3Qgc2VsZWN0IGEgY2xhc3Mgd2l0aCBhIHNpbmdsZSByZWdpc3Rlci4KKworICAgICA8bGk+T3V0cHV0IG9wZXJhbmRzIG1heSBub3QgYmUgJmxkcXVvO2luc2VydGVkJnJkcXVvOyBiZXR3ZWVuIGV4aXN0aW5nIHN0YWNrIHJlZ2lzdGVycy4gCitTaW5jZSBubyAzODcgb3Bjb2RlIHVzZXMgYSByZWFkL3dyaXRlIG9wZXJhbmQsIGFsbCBvdXRwdXQgb3BlcmFuZHMKK2FyZSBkZWFkIGJlZm9yZSB0aGUgPGNvZGU+YXNtPC9jb2RlPiwgYW5kIGFyZSBwdXNoZWQgYnkgdGhlIDxjb2RlPmFzbTwvY29kZT4uIAorSXQgbWFrZXMgbm8gc2Vuc2UgdG8gcHVzaCBhbnl3aGVyZSBidXQgdGhlIHRvcCBvZiB0aGUgcmVnLXN0YWNrLgorCisgICAgIDxwPk91dHB1dCBvcGVyYW5kcyBtdXN0IHN0YXJ0IGF0IHRoZSB0b3Agb2YgdGhlIHJlZy1zdGFjazogb3V0cHV0CitvcGVyYW5kcyBtYXkgbm90ICZsZHF1bztza2lwJnJkcXVvOyBhIHJlZ2lzdGVyLgorCisgICAgIDxsaT5Tb21lIDxjb2RlPmFzbTwvY29kZT4gc3RhdGVtZW50cyBtYXkgbmVlZCBleHRyYSBzdGFjayBzcGFjZSBmb3IgaW50ZXJuYWwKK2NhbGN1bGF0aW9ucy4gIFRoaXMgY2FuIGJlIGd1YXJhbnRlZWQgYnkgY2xvYmJlcmluZyBzdGFjayByZWdpc3RlcnMKK3VucmVsYXRlZCB0byB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzLgorCisgICAgICA8L29sPgorCisgPHA+SGVyZSBhcmUgYSBjb3VwbGUgb2YgcmVhc29uYWJsZSA8Y29kZT5hc208L2NvZGU+cyB0byB3YW50IHRvIHdyaXRlLiAgVGhpcworPGNvZGU+YXNtPC9jb2RlPgordGFrZXMgb25lIGlucHV0LCB3aGljaCBpcyBpbnRlcm5hbGx5IHBvcHBlZCwgYW5kIHByb2R1Y2VzIHR3byBvdXRwdXRzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYXNtICgiZnNpbmNvcyIgOiAiPXQiIChjb3MpLCAiPXUiIChzaW4pIDogIjAiIChpbnApKTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyA8Y29kZT5hc208L2NvZGU+IHRha2VzIHR3byBpbnB1dHMsIHdoaWNoIGFyZSBwb3BwZWQgYnkgdGhlIDxjb2RlPmZ5bDJ4cDE8L2NvZGU+IG9wY29kZSwKK2FuZCByZXBsYWNlcyB0aGVtIHdpdGggb25lIG91dHB1dC4gIFRoZSA8Y29kZT5zdCgxKTwvY29kZT4gY2xvYmJlciBpcyBuZWNlc3NhcnkKK2ZvciB0aGUgY29tcGlsZXIgdG8ga25vdyB0aGF0IDxjb2RlPmZ5bDJ4cDE8L2NvZGU+IHBvcHMgYm90aCBpbnB1dHMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhc20gKCJmeWwyeHAxIiA6ICI9dCIgKHJlc3VsdCkgOiAiMCIgKHgpLCAidSIgKHkpIDogInN0KDEpIik7Cis8L3ByZT4KKyA8IS0tIENvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKzwhLS0gTW9zdCBvZiB0aGlzIG5vZGUgYXBwZWFycyBieSBpdHNlbGYgKGluIGEgZGlmZmVyZW50IHBsYWNlKSBldmVuIC0tPgorPCEtLSB3aGVuIHRoZSBJTlRFUk5BTFMgZmxhZyBpcyBjbGVhci4gIFBhc3NhZ2VzIHRoYXQgcmVxdWlyZSB0aGUgaW50ZXJuYWxzIC0tPgorPCEtLSBtYW51YWwncyBjb250ZXh0IGFyZSBjb25kaXRpb25hbGl6ZWQgdG8gYXBwZWFyIG9ubHkgaW4gdGhlIGludGVybmFscyBtYW51YWwuIC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXh0ZW5kZWQtYXNtLXdpdGgtZ290by5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9FeHRlbmRlZC1hc20td2l0aC1nb3RvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0ZTQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRXh0ZW5kZWQtYXNtLXdpdGgtZ290by5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1FeHRlbmRlZC1Bc20uaHRtbCNFeHRlbmRlZCUyMGFzbSUyMHdpdGglMjBnb3RvIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRlIzMC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZSMzAtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YWE1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZSMzAtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNzIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZSMzAgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIiB0aXRsZT0iREVDIEFscGhhIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIiB0aXRsZT0iRlJWIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRlIzMC1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMTEgRlIzMCBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtRlIzMC1PcHRpb25zLTEzNDUiPjwvYT4KK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgRlIzMCBwb3J0LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbXNtYWxsLW1vZGVsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc21hbGxfMDAyZG1vZGVsLTEzNDYiPjwvYT5Vc2UgdGhlIHNtYWxsIGFkZHJlc3Mgc3BhY2UgbW9kZWwuICBUaGlzIGNhbiBwcm9kdWNlIHNtYWxsZXIgY29kZSwgYnV0CitpdCBkb2VzIGFzc3VtZSB0aGF0IGFsbCBzeW1ib2xpYyB2YWx1ZXMgYW5kIGFkZHJlc3NlcyBmaXQgaW50byBhCisyMC1iaXQgcmFuZ2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWxzaW08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbHNpbS0xMzQ3Ij48L2E+QXNzdW1lIHRoYXQgcnVudGltZSBzdXBwb3J0IGhhcyBiZWVuIHByb3ZpZGVkIGFuZCBzbyB0aGVyZSBpcyBubyBuZWVkCit0byBpbmNsdWRlIHRoZSBzaW11bGF0b3IgbGlicmFyeSAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYnNpbS5hPC9zcGFuPjwvc2FtcD4pIG9uIHRoZSBsaW5rZXIKK2NvbW1hbmQgbGluZS4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZSVi1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZSVi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3NTVmOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRlJWLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDI3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RlJWIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRlIzMC1PcHRpb25zLmh0bWwjRlIzMC1PcHRpb25zIiB0aXRsZT0iRlIzMCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR05VXzAwMmZMaW51eC1PcHRpb25zLmh0bWwjR05VXzAwMmZMaW51eC1PcHRpb25zIiB0aXRsZT0iR05VL0xpbnV4IE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRlJWLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR05VXzAwMmZMaW51eC1PcHRpb25zLmh0bWwjR05VXzAwMmZMaW51eC1PcHRpb25zIj5HTlUvTGludXggT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZSMzAtT3B0aW9ucy5odG1sI0ZSMzAtT3B0aW9ucyI+RlIzMCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjEyIEZSViBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtRlJWLU9wdGlvbnMtMTM0OCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1ncHItMzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ncHJfMDAyZDMyLTEzNDkiPjwvYT4KK09ubHkgdXNlIHRoZSBmaXJzdCAzMiBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1ncHItNjQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ncHJfMDAyZDY0LTEzNTAiPjwvYT4KK1VzZSBhbGwgNjQgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZnByLTMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZnByXzAwMmQzMi0xMzUxIj48L2E+CitVc2Ugb25seSB0aGUgZmlyc3QgMzIgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mcHItNjQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1mcHJfMDAyZDY0LTEzNTIiPjwvYT4KK1VzZSBhbGwgNjQgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1oYXJkLWZsb2F0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taGFyZF8wMDJkZmxvYXQtMTM1MyI+PC9hPgorVXNlIGhhcmR3YXJlIGluc3RydWN0aW9ucyBmb3IgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc29mdC1mbG9hdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTEzNTQiPjwvYT4KK1VzZSBsaWJyYXJ5IHJvdXRpbmVzIGZvciBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hbGxvYy1jYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFsbG9jXzAwMmRjYy0xMzU1Ij48L2E+CitEeW5hbWljYWxseSBhbGxvY2F0ZSBjb25kaXRpb24gY29kZSByZWdpc3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeGVkLWNjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZml4ZWRfMDAyZGNjLTEzNTYiPjwvYT4KK0RvIG5vdCB0cnkgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzLCBvbmx5Cit1c2UgPGNvZGU+aWNjMDwvY29kZT4gYW5kIDxjb2RlPmZjYzA8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kd29yZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWR3b3JkLTEzNTciPjwvYT4KK0NoYW5nZSBBQkkgdG8gdXNlIGRvdWJsZSB3b3JkIGluc25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1kd29yZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRkd29yZC0xMzU4Ij48L2E+CitEbyBub3QgdXNlIGRvdWJsZSB3b3JkIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZG91YmxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZG91YmxlLTEzNTkiPjwvYT4KK1VzZSBmbG9hdGluZy1wb2ludCBkb3VibGUgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1kb3VibGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZG91YmxlLTEzNjAiPjwvYT4KK0RvIG5vdCB1c2UgZmxvYXRpbmctcG9pbnQgZG91YmxlIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbWVkaWE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tZWRpYS0xMzYxIj48L2E+CitVc2UgbWVkaWEgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1tZWRpYTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRtZWRpYS0xMzYyIj48L2E+CitEbyBub3QgdXNlIG1lZGlhIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbXVsYWRkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbXVsYWRkLTEzNjMiPjwvYT4KK1VzZSBtdWx0aXBseSBhbmQgYWRkL3N1YnRyYWN0IGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tbXVsYWRkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG11bGFkZC0xMzY0Ij48L2E+CitEbyBub3QgdXNlIG11bHRpcGx5IGFuZCBhZGQvc3VidHJhY3QgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mZHBpYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZkcGljLTEzNjUiPjwvYT4KK1NlbGVjdCB0aGUgRkRQSUMgQUJJLCB3aGljaCB1c2VzIGZ1bmN0aW9uIGRlc2NyaXB0b3JzIHRvIHJlcHJlc2VudAorcG9pbnRlcnMgdG8gZnVuY3Rpb25zLiAgV2l0aG91dCBhbnkgUElDL1BJRS1yZWxhdGVkIG9wdGlvbnMsIGl0CitpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElFPC9zcGFuPjwvc2FtcD4uICBXaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGljPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwaWU8L3NwYW4+PC9zYW1wPiwgaXQKK2Fzc3VtZXMgR09UIGVudHJpZXMgYW5kIHNtYWxsIGRhdGEgYXJlIHdpdGhpbiBhIDEyLWJpdCByYW5nZSBmcm9tIHRoZQorR09UIGJhc2UgYWRkcmVzczsgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZlBJQzwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElFPC9zcGFuPjwvc2FtcD4sIEdPVCBvZmZzZXRzCithcmUgY29tcHV0ZWQgd2l0aCAzMiBiaXRzLiAKK1dpdGggYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJmaW4tZWxmPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRhcmdldCwgdGhpcyBvcHRpb24gaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNpbTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pbmxpbmUtcGx0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW5saW5lXzAwMmRwbHQtMTM2NiI+PC9hPgorRW5hYmxlIGlubGluaW5nIG9mIFBMVCBlbnRyaWVzIGluIGZ1bmN0aW9uIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGFyZQorbm90IGtub3duIHRvIGJpbmQgbG9jYWxseS4gIEl0IGhhcyBubyBlZmZlY3Qgd2l0aG91dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZkcGljPC9zcGFuPjwvc2FtcD4uIAorSXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgb3B0aW1pemluZyBmb3Igc3BlZWQgYW5kIGNvbXBpbGluZyBmb3IKK3NoYXJlZCBsaWJyYXJpZXMgKGkuZS4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwaWM8L3NwYW4+PC9zYW1wPiksIG9yIHdoZW4gYW4KK29wdGltaXphdGlvbiBvcHRpb24gc3VjaCBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiBvciBhYm92ZSBpcyBwcmVzZW50IGluIHRoZQorY29tbWFuZCBsaW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1UTFM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1UTFMtMTM2NyI+PC9hPgorQXNzdW1lIGEgbGFyZ2UgVExTIHNlZ21lbnQgd2hlbiBnZW5lcmF0aW5nIHRocmVhZC1sb2NhbCBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10bHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW10bHMtMTM2OCI+PC9hPgorRG8gbm90IGFzc3VtZSBhIGxhcmdlIFRMUyBzZWdtZW50IHdoZW4gZ2VuZXJhdGluZyB0aHJlYWQtbG9jYWwgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZ3ByZWwtcm88L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ncHJlbF8wMDJkcm8tMTM2OSI+PC9hPgorRW5hYmxlIHRoZSB1c2Ugb2YgPGNvZGU+R1BSRUw8L2NvZGU+IHJlbG9jYXRpb25zIGluIHRoZSBGRFBJQyBBQkkgZm9yIGRhdGEKK3RoYXQgaXMga25vd24gdG8gYmUgaW4gcmVhZC1vbmx5IHNlY3Rpb25zLiAgSXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsCitleGNlcHQgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGljPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwaWU8L3NwYW4+PC9zYW1wPjogZXZlbiB0aG91Z2ggaXQgbWF5IGhlbHAKK21ha2UgdGhlIGdsb2JhbCBvZmZzZXQgdGFibGUgc21hbGxlciwgaXQgdHJhZGVzIDEgaW5zdHJ1Y3Rpb24gZm9yIDQuIAorV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZlBJQzwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElFPC9zcGFuPjwvc2FtcD4sIGl0IHRyYWRlcyAzIGluc3RydWN0aW9ucyBmb3IgNCwKK29uZSBvZiB3aGljaCBtYXkgYmUgc2hhcmVkIGJ5IG11bHRpcGxlIHN5bWJvbHMsIGFuZCBpdCBhdm9pZHMgdGhlIG5lZWQKK2ZvciBhIEdPVCBlbnRyeSBmb3IgdGhlIHJlZmVyZW5jZWQgc3ltYm9sLCBzbyBpdCdzIG1vcmUgbGlrZWx5IHRvIGJlIGEKK3dpbi4gIElmIGl0IGlzIG5vdCwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1ncHJlbC1ybzwvc3Bhbj48L3NhbXA+IGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXVsdGlsaWItbGlicmFyeS1waWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW11bHRpbGliXzAwMmRsaWJyYXJ5XzAwMmRwaWMtMTM3MCI+PC9hPgorTGluayB3aXRoIHRoZSAobGlicmFyeSwgbm90IEZEKSBwaWMgbGlicmFyaWVzLiAgSXQncyBpbXBsaWVkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWxpYnJhcnktcGljPC9zcGFuPjwvc2FtcD4sIGFzIHdlbGwgYXMgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZQSUM8L3NwYW4+PC9zYW1wPiBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGljPC9zcGFuPjwvc2FtcD4gd2l0aG91dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZkcGljPC9zcGFuPjwvc2FtcD4uICBZb3Ugc2hvdWxkIG5ldmVyIGhhdmUgdG8gdXNlCitpdCBleHBsaWNpdGx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1saW5rZWQtZnA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1saW5rZWRfMDAyZGZwLTEzNzEiPjwvYT4KK0ZvbGxvdyB0aGUgRUFCSSByZXF1aXJlbWVudCBvZiBhbHdheXMgY3JlYXRpbmcgYSBmcmFtZSBwb2ludGVyIHdoZW5ldmVyCithIHN0YWNrIGZyYW1lIGlzIGFsbG9jYXRlZC4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgY2FuCitiZSBkaXNhYmxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tbGlua2VkLWZwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmctY2FsbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1sb25nXzAwMmRjYWxscy0xMzcyIj48L2E+CitVc2UgaW5kaXJlY3QgYWRkcmVzc2luZyB0byBjYWxsIGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBjdXJyZW50Citjb21waWxhdGlvbiB1bml0LiAgVGhpcyBhbGxvd3MgdGhlIGZ1bmN0aW9ucyB0byBiZSBwbGFjZWQgYW55d2hlcmUKK3dpdGhpbiB0aGUgMzItYml0IGFkZHJlc3Mgc3BhY2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFsaWduLWxhYmVsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFsaWduXzAwMmRsYWJlbHMtMTM3MyI+PC9hPgorVHJ5IHRvIGFsaWduIGxhYmVscyB0byBhbiA4LWJ5dGUgYm91bmRhcnkgYnkgaW5zZXJ0aW5nIE5PUHMgaW50byB0aGUKK3ByZXZpb3VzIHBhY2tldC4gIFRoaXMgb3B0aW9uIG9ubHkgaGFzIGFuIGVmZmVjdCB3aGVuIFZMSVcgcGFja2luZworaXMgZW5hYmxlZC4gIEl0IGRvZXNuJ3QgY3JlYXRlIG5ldyBwYWNrZXRzOyBpdCBtZXJlbHkgYWRkcyBOT1BzIHRvCitleGlzdGluZyBvbmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1saWJyYXJ5LXBpYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxpYnJhcnlfMDAyZHBpYy0xMzc0Ij48L2E+CitHZW5lcmF0ZSBwb3NpdGlvbi1pbmRlcGVuZGVudCBFQUJJIGNvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFjYy00PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYWNjXzAwMmQ0LTEzNzUiPjwvYT4KK1VzZSBvbmx5IHRoZSBmaXJzdCBmb3VyIG1lZGlhIGFjY3VtdWxhdG9yIHJlZ2lzdGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWNjLTg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hY2NfMDAyZDgtMTM3NiI+PC9hPgorVXNlIGFsbCBlaWdodCBtZWRpYSBhY2N1bXVsYXRvciByZWdpc3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBhY2s8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wYWNrLTEzNzciPjwvYT4KK1BhY2sgVkxJVyBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXBhY2s8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkcGFjay0xMzc4Ij48L2E+CitEbyBub3QgcGFjayBWTElXIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tZWZsYWdzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGVmbGFncy0xMzc5Ij48L2E+CitEbyBub3QgbWFyayBBQkkgc3dpdGNoZXMgaW4gZV9mbGFncy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY29uZC1tb3ZlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY29uZF8wMDJkbW92ZS0xMzgwIj48L2E+CitFbmFibGUgdGhlIHVzZSBvZiBjb25kaXRpb25hbC1tb3ZlIGluc3RydWN0aW9ucyAoZGVmYXVsdCkuCisKKyAgICAgPHA+VGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1jb25kLW1vdmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkY29uZF8wMDJkbW92ZS0xMzgxIj48L2E+CitEaXNhYmxlIHRoZSB1c2Ugb2YgY29uZGl0aW9uYWwtbW92ZSBpbnN0cnVjdGlvbnMuCisKKyAgICAgPHA+VGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zY2M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zY2MtMTM4MiI+PC9hPgorRW5hYmxlIHRoZSB1c2Ugb2YgY29uZGl0aW9uYWwgc2V0IGluc3RydWN0aW9ucyAoZGVmYXVsdCkuCisKKyAgICAgPHA+VGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1zY2M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2NjLTEzODMiPjwvYT4KK0Rpc2FibGUgdGhlIHVzZSBvZiBjb25kaXRpb25hbCBzZXQgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPlRoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY29uZC1leGVjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY29uZF8wMDJkZXhlYy0xMzg0Ij48L2E+CitFbmFibGUgdGhlIHVzZSBvZiBjb25kaXRpb25hbCBleGVjdXRpb24gKGRlZmF1bHQpLgorCisgICAgIDxwPlRoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tY29uZC1leGVjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGNvbmRfMDAyZGV4ZWMtMTM4NSI+PC9hPgorRGlzYWJsZSB0aGUgdXNlIG9mIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbi4KKworICAgICA8cD5UaGlzIHN3aXRjaCBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQKK2luIGEgZnV0dXJlIHZlcnNpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXZsaXctYnJhbmNoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdmxpd18wMDJkYnJhbmNoLTEzODYiPjwvYT4KK1J1biBhIHBhc3MgdG8gcGFjayBicmFuY2hlcyBpbnRvIFZMSVcgaW5zdHJ1Y3Rpb25zIChkZWZhdWx0KS4KKworICAgICA8cD5UaGlzIHN3aXRjaCBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQKK2luIGEgZnV0dXJlIHZlcnNpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXZsaXctYnJhbmNoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHZsaXdfMDAyZGJyYW5jaC0xMzg3Ij48L2E+CitEbyBub3QgcnVuIGEgcGFzcyB0byBwYWNrIGJyYW5jaGVzIGludG8gVkxJVyBpbnN0cnVjdGlvbnMuCisKKyAgICAgPHA+VGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tdWx0aS1jb25kLWV4ZWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tdWx0aV8wMDJkY29uZF8wMDJkZXhlYy0xMzg4Ij48L2E+CitFbmFibGUgb3B0aW1pemF0aW9uIG9mIDxjb2RlPiZhbXA7JmFtcDs8L2NvZGU+IGFuZCA8Y29kZT58fDwvY29kZT4gaW4gY29uZGl0aW9uYWwgZXhlY3V0aW9uCisoZGVmYXVsdCkuCisKKyAgICAgPHA+VGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1tdWx0aS1jb25kLWV4ZWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbXVsdGlfMDAyZGNvbmRfMDAyZGV4ZWMtMTM4OSI+PC9hPgorRGlzYWJsZSBvcHRpbWl6YXRpb24gb2YgPGNvZGU+JmFtcDsmYW1wOzwvY29kZT4gYW5kIDxjb2RlPnx8PC9jb2RlPiBpbiBjb25kaXRpb25hbCBleGVjdXRpb24uCisKKyAgICAgPHA+VGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uZXN0ZWQtY29uZC1leGVjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbmVzdGVkXzAwMmRjb25kXzAwMmRleGVjLTEzOTAiPjwvYT4KK0VuYWJsZSBuZXN0ZWQgY29uZGl0aW9uYWwgZXhlY3V0aW9uIG9wdGltaXphdGlvbnMgKGRlZmF1bHQpLgorCisgICAgIDxwPlRoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tbmVzdGVkLWNvbmQtZXhlYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRuZXN0ZWRfMDAyZGNvbmRfMDAyZGV4ZWMtMTM5MSI+PC9hPgorRGlzYWJsZSBuZXN0ZWQgY29uZGl0aW9uYWwgZXhlY3V0aW9uIG9wdGltaXphdGlvbnMuCisKKyAgICAgPHA+VGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1vcHRpbWl6ZS1tZW1iYXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1vcHRpbWl6ZV8wMDJkbWVtYmFyLTEzOTIiPjwvYT4KK1RoaXMgc3dpdGNoIHJlbW92ZXMgcmVkdW5kYW50IDxjb2RlPm1lbWJhcjwvY29kZT4gaW5zdHJ1Y3Rpb25zIGZyb20gdGhlCitjb21waWxlci1nZW5lcmF0ZWQgY29kZS4gIEl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tb3B0aW1pemUtbWVtYmFyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG9wdGltaXplXzAwMmRtZW1iYXItMTM5MyI+PC9hPgorVGhpcyBzd2l0Y2ggZGlzYWJsZXMgdGhlIGF1dG9tYXRpYyByZW1vdmFsIG9mIHJlZHVuZGFudCA8Y29kZT5tZW1iYXI8L2NvZGU+CitpbnN0cnVjdGlvbnMgZnJvbSB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRvbWNhdC1zdGF0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRvbWNhdF8wMDJkc3RhdHMtMTM5NCI+PC9hPgorQ2F1c2UgZ2FzIHRvIHByaW50IG91dCB0b21jYXQgc3RhdGlzdGljcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY3B1PTwvY29kZT48dmFyPmNwdTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY3B1LTEzOTUiPjwvYT4KK1NlbGVjdCB0aGUgcHJvY2Vzc29yIHR5cGUgZm9yIHdoaWNoIHRvIGdlbmVyYXRlIGNvZGUuICBQb3NzaWJsZSB2YWx1ZXMgYXJlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZydjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcjU1MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50b21jYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnI1MDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnI0NTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZyNDA1PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZyNDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZyMzAwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNpbXBsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NmJmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GUi1WIEJ1aWx0LWluIEZ1bmN0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCbGFja2Zpbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQmxhY2tmaW4tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IkJsYWNrZmluIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJYODYgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZSLVYtQnVpbHQtaW4tRnVuY3Rpb25zIj48L2E+Cis8YSBuYW1lPSJGUl8wMDJkVi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlg4NiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCbGFja2Zpbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQmxhY2tmaW4tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+QmxhY2tmaW4gQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIj5UYXJnZXQgQnVpbHRpbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU2LjYgRlItViBCdWlsdC1pbiBGdW5jdGlvbnM8L2g0PgorCis8cD5HQ0MgcHJvdmlkZXMgbWFueSBGUi1WLXNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIEluIGdlbmVyYWwsCit0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aG9zZSBkZXNjcmliZWQKK2J5IDxjaXRlPkZSLVYgRmFtaWx5LCBTb2Z0dW5lIEMvQysrIENvbXBpbGVyIE1hbnVhbCAoVjYpLCBGdWppdHN1CitTZW1pY29uZHVjdG9yPC9jaXRlPi4gIFRoZSB0d28gZXhjZXB0aW9ucyBhcmUgPGNvZGU+X19NRFVOUEFDS0g8L2NvZGU+IGFuZAorPGNvZGU+X19NQlRPSEU8L2NvZGU+LCB0aGUgR0NDIGZvcm1zIG9mIHdoaWNoIHBhc3MgMTI4LWJpdCB2YWx1ZXMgYnkKK3BvaW50ZXIgcmF0aGVyIHRoYW4gYnkgdmFsdWUuCisKKyA8cD5Nb3N0IG9mIHRoZSBmdW5jdGlvbnMgYXJlIG5hbWVkIGFmdGVyIHNwZWNpZmljIEZSLVYgaW5zdHJ1Y3Rpb25zLiAKK1N1Y2ggZnVuY3Rpb25zIGFyZSBzYWlkIHRvIGJlICZsZHF1bztkaXJlY3RseSBtYXBwZWQmcmRxdW87IGFuZCBhcmUgc3VtbWFyaXplZAoraGVyZSBpbiB0YWJ1bGFyIGZvcm0uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJBcmd1bWVudC1UeXBlcy5odG1sI0FyZ3VtZW50LVR5cGVzIj5Bcmd1bWVudCBUeXBlczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkRpcmVjdGx5XzAwMmRtYXBwZWQtSW50ZWdlci1GdW5jdGlvbnMuaHRtbCNEaXJlY3RseV8wMDJkbWFwcGVkLUludGVnZXItRnVuY3Rpb25zIj5EaXJlY3RseS1tYXBwZWQgSW50ZWdlciBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJEaXJlY3RseV8wMDJkbWFwcGVkLU1lZGlhLUZ1bmN0aW9ucy5odG1sI0RpcmVjdGx5XzAwMmRtYXBwZWQtTWVkaWEtRnVuY3Rpb25zIj5EaXJlY3RseS1tYXBwZWQgTWVkaWEgRnVuY3Rpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iUmF3LXJlYWRfMDAyZndyaXRlLUZ1bmN0aW9ucy5odG1sI1Jhdy1yZWFkXzAwMmZ3cml0ZS1GdW5jdGlvbnMiPlJhdyByZWFkL3dyaXRlIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9Ik90aGVyLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNPdGhlci1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5PdGhlciBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GYXN0LWVudW1lcmF0aW9uLWRldGFpbHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRmFzdC1lbnVtZXJhdGlvbi1kZXRhaWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgzNWZiNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRmFzdC1lbnVtZXJhdGlvbi1kZXRhaWxzLmh0bWwKQEAgLTAsMCArMSwxMDkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZhc3QgZW51bWVyYXRpb24gZGV0YWlscyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJGYXN0LWVudW1lcmF0aW9uLmh0bWwjRmFzdC1lbnVtZXJhdGlvbiIgdGl0bGU9IkZhc3QgZW51bWVyYXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjOTlfMDAyZGxpa2UtZmFzdC1lbnVtZXJhdGlvbi1zeW50YXguaHRtbCNjOTlfMDAyZGxpa2UtZmFzdC1lbnVtZXJhdGlvbi1zeW50YXgiIHRpdGxlPSJjOTktbGlrZSBmYXN0IGVudW1lcmF0aW9uIHN5bnRheCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZhc3QtZW51bWVyYXRpb24tcHJvdG9jb2wuaHRtbCNGYXN0LWVudW1lcmF0aW9uLXByb3RvY29sIiB0aXRsZT0iRmFzdCBlbnVtZXJhdGlvbiBwcm90b2NvbCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGYXN0LWVudW1lcmF0aW9uLWRldGFpbHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRmFzdC1lbnVtZXJhdGlvbi1wcm90b2NvbC5odG1sI0Zhc3QtZW51bWVyYXRpb24tcHJvdG9jb2wiPkZhc3QgZW51bWVyYXRpb24gcHJvdG9jb2w8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjOTlfMDAyZGxpa2UtZmFzdC1lbnVtZXJhdGlvbi1zeW50YXguaHRtbCNjOTlfMDAyZGxpa2UtZmFzdC1lbnVtZXJhdGlvbi1zeW50YXgiPmM5OS1saWtlIGZhc3QgZW51bWVyYXRpb24gc3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRmFzdC1lbnVtZXJhdGlvbi5odG1sI0Zhc3QtZW51bWVyYXRpb24iPkZhc3QgZW51bWVyYXRpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj44LjkuMyBGYXN0IGVudW1lcmF0aW9uIGRldGFpbHM8L2g0PgorCis8cD5IZXJlIGlzIGEgbW9yZSB0ZWNobmljYWwgZGVzY3JpcHRpb24gd2l0aCB0aGUgZ29yeSBkZXRhaWxzLiAgQ29uc2lkZXIgdGhlIGNvZGUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgZm9yICg8dmFyPm9iamVjdCBleHByZXNzaW9uPC92YXI+IGluIDx2YXI+Y29sbGVjdGlvbiBleHByZXNzaW9uPC92YXI+KQorICAgICAgIHsKKyAgICAgICAgIDx2YXI+c3RhdGVtZW50czwvdmFyPgorICAgICAgIH0KKzwvcHJlPgorIDxwPmhlcmUgaXMgd2hhdCBoYXBwZW5zIHdoZW4geW91IHJ1biBpdDoKKworICAgICA8dWw+Cis8bGk+PHZhcj5jb2xsZWN0aW9uIGV4cHJlc3Npb248L3Zhcj4gaXMgZXZhbHVhdGVkIGV4YWN0bHkgb25jZSBhbmQgdGhlCityZXN1bHQgaXMgdXNlZCBhcyB0aGUgY29sbGVjdGlvbiBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLiAgVGhpcyBtZWFucworaXQgaXMgc2FmZSB0byB3cml0ZSBjb2RlIHN1Y2ggYXMgPGNvZGU+Zm9yIChvYmplY3QgaW4gW05TRGljdGlvbmFyeQora2V5RW51bWVyYXRvcl0pIC4uLjwvY29kZT4uCisKKyAgICAgPGxpPnRoZSBpdGVyYXRpb24gaXMgaW1wbGVtZW50ZWQgYnkgdGhlIGNvbXBpbGVyIGJ5IHJlcGVhdGVkbHkgZ2V0dGluZworYmF0Y2hlcyBvZiBvYmplY3RzIGZyb20gdGhlIGNvbGxlY3Rpb24gb2JqZWN0IHVzaW5nIHRoZSBmYXN0CitlbnVtZXJhdGlvbiBwcm90b2NvbCAoc2VlIGJlbG93KSwgdGhlbiBpdGVyYXRpbmcgb3ZlciBhbGwgb2JqZWN0cyBpbgordGhlIGJhdGNoLiAgVGhpcyBpcyBmYXN0ZXIgdGhhbiBhIG5vcm1hbCBlbnVtZXJhdGlvbiB3aGVyZSBvYmplY3RzIGFyZQorcmV0cmlldmVkIG9uZSBieSBvbmUgKGhlbmNlIHRoZSBuYW1lICZsZHF1bztmYXN0IGVudW1lcmF0aW9uJnJkcXVvOykuCisKKyAgICAgPGxpPmlmIHRoZXJlIGFyZSBubyBvYmplY3RzIGluIHRoZSBjb2xsZWN0aW9uLCB0aGVuCis8dmFyPm9iamVjdCBleHByZXNzaW9uPC92YXI+IGlzIHNldCB0byA8Y29kZT5uaWw8L2NvZGU+IGFuZCB0aGUgbG9vcAoraW1tZWRpYXRlbHkgdGVybWluYXRlcy4KKworICAgICA8bGk+aWYgdGhlcmUgYXJlIG9iamVjdHMgaW4gdGhlIGNvbGxlY3Rpb24sIHRoZW4gZm9yIGVhY2ggb2JqZWN0IGluIHRoZQorY29sbGVjdGlvbiAoaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHJldHVybmVkKSA8dmFyPm9iamVjdCBleHByZXNzaW9uPC92YXI+CitpcyBzZXQgdG8gdGhlIG9iamVjdCwgdGhlbiA8dmFyPnN0YXRlbWVudHM8L3Zhcj4gYXJlIGV4ZWN1dGVkLgorCisgICAgIDxsaT48dmFyPnN0YXRlbWVudHM8L3Zhcj4gY2FuIGNvbnRhaW4gPGNvZGU+YnJlYWs8L2NvZGU+IGFuZCA8Y29kZT5jb250aW51ZTwvY29kZT4KK2NvbW1hbmRzLCB3aGljaCB3aWxsIGFib3J0IHRoZSBpdGVyYXRpb24gb3Igc2tpcCB0byB0aGUgbmV4dCBsb29wCitpdGVyYXRpb24gYXMgZXhwZWN0ZWQuCisKKyAgICAgPGxpPndoZW4gdGhlIGl0ZXJhdGlvbiBlbmRzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG1vcmUgb2JqZWN0cyB0byBpdGVyYXRlCitvdmVyLCA8dmFyPm9iamVjdCBleHByZXNzaW9uPC92YXI+IGlzIHNldCB0byA8Y29kZT5uaWw8L2NvZGU+LiAgVGhpcyBhbGxvd3MKK3lvdSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgaXRlcmF0aW9uIGZpbmlzaGVkIGJlY2F1c2UgYSA8Y29kZT5icmVhazwvY29kZT4KK2NvbW1hbmQgd2FzIHVzZWQgKGluIHdoaWNoIGNhc2UgPHZhcj5vYmplY3QgZXhwcmVzc2lvbjwvdmFyPiB3aWxsIHJlbWFpbgorc2V0IHRvIHRoZSBsYXN0IG9iamVjdCB0aGF0IHdhcyBpdGVyYXRlZCBvdmVyKSBvciBiZWNhdXNlIGl0IGl0ZXJhdGVkCitvdmVyIGFsbCB0aGUgb2JqZWN0cyAoaW4gd2hpY2ggY2FzZSA8dmFyPm9iamVjdCBleHByZXNzaW9uPC92YXI+IHdpbGwgYmUKK3NldCB0byA8Y29kZT5uaWw8L2NvZGU+KS4KKworICAgICA8bGk+PHZhcj5zdGF0ZW1lbnRzPC92YXI+IG11c3Qgbm90IG1ha2UgYW55IGNoYW5nZXMgdG8gdGhlIGNvbGxlY3Rpb24KK29iamVjdDsgaWYgdGhleSBkbywgaXQgaXMgYSBoYXJkIGVycm9yIGFuZCB0aGUgZmFzdCBlbnVtZXJhdGlvbgordGVybWluYXRlcyBieSBpbnZva2luZyA8Y29kZT5vYmpjX2VudW1lcmF0aW9uTXV0YXRpb248L2NvZGU+LCBhIHJ1bnRpbWUKK2Z1bmN0aW9uIHRoYXQgbm9ybWFsbHkgYWJvcnRzIHRoZSBwcm9ncmFtIGJ1dCB3aGljaCBjYW4gYmUgY3VzdG9taXplZAorYnkgRm91bmRhdGlvbiBsaWJyYXJpZXMgdmlhIDxjb2RlPm9iamNfc2V0X211dGF0aW9uX2hhbmRsZXI8L2NvZGU+IHRvIGRvCitzb21ldGhpbmcgZGlmZmVyZW50LCBzdWNoIGFzIHJhaXNpbmcgYW4gZXhjZXB0aW9uLgorCisgPC91bD4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Zhc3QtZW51bWVyYXRpb24tcHJvdG9jb2wuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRmFzdC1lbnVtZXJhdGlvbi1wcm90b2NvbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZDllYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Zhc3QtZW51bWVyYXRpb24tcHJvdG9jb2wuaHRtbApAQCAtMCwwICsxLDExOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RmFzdCBlbnVtZXJhdGlvbiBwcm90b2NvbCAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJGYXN0LWVudW1lcmF0aW9uLmh0bWwjRmFzdC1lbnVtZXJhdGlvbiIgdGl0bGU9IkZhc3QgZW51bWVyYXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGYXN0LWVudW1lcmF0aW9uLWRldGFpbHMuaHRtbCNGYXN0LWVudW1lcmF0aW9uLWRldGFpbHMiIHRpdGxlPSJGYXN0IGVudW1lcmF0aW9uIGRldGFpbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRmFzdC1lbnVtZXJhdGlvbi1wcm90b2NvbCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZhc3QtZW51bWVyYXRpb24tZGV0YWlscy5odG1sI0Zhc3QtZW51bWVyYXRpb24tZGV0YWlscyI+RmFzdCBlbnVtZXJhdGlvbiBkZXRhaWxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRmFzdC1lbnVtZXJhdGlvbi5odG1sI0Zhc3QtZW51bWVyYXRpb24iPkZhc3QgZW51bWVyYXRpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj44LjkuNCBGYXN0IGVudW1lcmF0aW9uIHByb3RvY29sPC9oND4KKworPHA+SWYgeW91IHdhbnQgeW91ciBvd24gY29sbGVjdGlvbiBvYmplY3QgdG8gYmUgdXNhYmxlIHdpdGggZmFzdAorZW51bWVyYXRpb24sIHlvdSBuZWVkIHRvIGhhdmUgaXQgaW1wbGVtZW50IHRoZSBtZXRob2QKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC0gKHVuc2lnbmVkIGxvbmcpIGNvdW50QnlFbnVtZXJhdGluZ1dpdGhTdGF0ZTogKE5TRmFzdEVudW1lcmF0aW9uU3RhdGUgKilzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHM6IChpZCAqKW9iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiAodW5zaWduZWQgbG9uZylsZW47Cis8L3ByZT4KKyA8cD53aGVyZSA8Y29kZT5OU0Zhc3RFbnVtZXJhdGlvblN0YXRlPC9jb2RlPiBtdXN0IGJlIGRlZmluZWQgaW4geW91ciBjb2RlIGFzIGZvbGxvd3M6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB0eXBlZGVmIHN0cnVjdAorICAgICB7CisgICAgICAgdW5zaWduZWQgbG9uZyBzdGF0ZTsKKyAgICAgICBpZCAgICAgICAgICAgICppdGVtc1B0cjsKKyAgICAgICB1bnNpZ25lZCBsb25nICptdXRhdGlvbnNQdHI7CisgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYVs1XTsKKyAgICAgfSBOU0Zhc3RFbnVtZXJhdGlvblN0YXRlOworPC9wcmU+CisgPHA+SWYgbm8gPGNvZGU+TlNGYXN0RW51bWVyYXRpb25TdGF0ZTwvY29kZT4gaXMgZGVmaW5lZCBpbiB5b3VyIGNvZGUsIHRoZQorY29tcGlsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHJlcGxhY2UgPGNvZGU+TlNGYXN0RW51bWVyYXRpb25TdGF0ZSAqPC9jb2RlPgord2l0aCA8Y29kZT5zdHJ1Y3QgX19vYmpjRmFzdEVudW1lcmF0aW9uU3RhdGUgKjwvY29kZT4sIHdoZXJlIHRoYXQgdHlwZSBpcworc2lsZW50bHkgZGVmaW5lZCBieSB0aGUgY29tcGlsZXIgaW4gYW4gaWRlbnRpY2FsIHdheS4gIFRoaXMgY2FuIGJlCitjb25mdXNpbmcgYW5kIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBkZWZpbmUKKzxjb2RlPk5TRmFzdEVudW1lcmF0aW9uU3RhdGU8L2NvZGU+IChhcyBzaG93biBhYm92ZSkgaW5zdGVhZC4KKworIDxwPlRoZSBtZXRob2QgaXMgY2FsbGVkIHJlcGVhdGVkbHkgZHVyaW5nIGEgZmFzdCBlbnVtZXJhdGlvbiB0byByZXRyaWV2ZQorYmF0Y2hlcyBvZiBvYmplY3RzLiAgRWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBtZXRob2Qgc2hvdWxkIHJldHJpZXZlIHRoZQorbmV4dCBiYXRjaCBvZiBvYmplY3RzLgorCisgPHA+VGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgbWV0aG9kIGlzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgY3VycmVudAorYmF0Y2g7IHRoaXMgc2hvdWxkIG5vdCBleGNlZWQgPGNvZGU+bGVuPC9jb2RlPiwgd2hpY2ggaXMgdGhlIG1heGltdW0gc2l6ZSBvZgorYSBiYXRjaCBhcyByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gIFRoZSBiYXRjaCBpdHNlbGYgaXMgcmV0dXJuZWQgaW4KK3RoZSA8Y29kZT5pdGVtc1B0cjwvY29kZT4gZmllbGQgb2YgdGhlIDxjb2RlPk5TRmFzdEVudW1lcmF0aW9uU3RhdGU8L2NvZGU+IHN0cnVjdC4KKworIDxwPlRvIGhlbHAgd2l0aCByZXR1cm5pbmcgdGhlIG9iamVjdHMsIHRoZSA8Y29kZT5vYmplY3RzPC9jb2RlPiBhcnJheSBpcyBhIEMKK2FycmF5IHByZWFsbG9jYXRlZCBieSB0aGUgY2FsbGVyIChvbiB0aGUgc3RhY2spIG9mIHNpemUgPGNvZGU+bGVuPC9jb2RlPi4gCitJbiBtYW55IGNhc2VzIHlvdSBjYW4gcHV0IHRoZSBvYmplY3RzIHlvdSB3YW50IHRvIHJldHVybiBpbiB0aGF0Cis8Y29kZT5vYmplY3RzPC9jb2RlPiBhcnJheSwgdGhlbiBkbyA8Y29kZT5pdGVtc1B0ciA9IG9iamVjdHM8L2NvZGU+LiAgQnV0IHlvdQorZG9uJ3QgaGF2ZSB0bzsgaWYgeW91ciBjb2xsZWN0aW9uIGFscmVhZHkgaGFzIHRoZSBvYmplY3RzIHRvIHJldHVybiBpbgorc29tZSBmb3JtIG9mIEMgYXJyYXksIGl0IGNvdWxkIHJldHVybiB0aGVtIGZyb20gdGhlcmUgaW5zdGVhZC4KKworIDxwPlRoZSA8Y29kZT5zdGF0ZTwvY29kZT4gYW5kIDxjb2RlPmV4dHJhPC9jb2RlPiBmaWVsZHMgb2YgdGhlCis8Y29kZT5OU0Zhc3RFbnVtZXJhdGlvblN0YXRlPC9jb2RlPiBzdHJ1Y3R1cmUgYWxsb3dzIHlvdXIgY29sbGVjdGlvbiBvYmplY3QKK3RvIGtlZXAgdHJhY2sgb2YgdGhlIHN0YXRlIG9mIHRoZSBlbnVtZXJhdGlvbi4gIEluIGEgc2ltcGxlIGFycmF5CitpbXBsZW1lbnRhdGlvbiwgPGNvZGU+c3RhdGU8L2NvZGU+IG1heSBrZWVwIHRyYWNrIG9mIHRoZSBpbmRleCBvZiB0aGUgbGFzdAorb2JqZWN0IHRoYXQgd2FzIHJldHVybmVkLCBhbmQgPGNvZGU+ZXh0cmE8L2NvZGU+IG1heSBiZSB1bnVzZWQuCisKKyA8cD5UaGUgPGNvZGU+bXV0YXRpb25zUHRyPC9jb2RlPiBmaWVsZCBvZiB0aGUgPGNvZGU+TlNGYXN0RW51bWVyYXRpb25TdGF0ZTwvY29kZT4gaXMKK3VzZWQgdG8ga2VlcCB0cmFjayBvZiBtdXRhdGlvbnMuICBJdCBzaG91bGQgcG9pbnQgdG8gYSBudW1iZXI7IGJlZm9yZQord29ya2luZyBvbiBlYWNoIG9iamVjdCwgdGhlIGZhc3QgZW51bWVyYXRpb24gbG9vcCB3aWxsIGNoZWNrIHRoYXQgdGhpcworbnVtYmVyIGhhcyBub3QgY2hhbmdlZC4gIElmIGl0IGhhcywgYSBtdXRhdGlvbiBoYXMgaGFwcGVuZWQgYW5kIHRoZQorZmFzdCBlbnVtZXJhdGlvbiB3aWxsIGFib3J0LiAgU28sIDxjb2RlPm11dGF0aW9uc1B0cjwvY29kZT4gY291bGQgYmUgc2V0IHRvCitwb2ludCB0byBzb21lIHNvcnQgb2YgdmVyc2lvbiBudW1iZXIgb2YgeW91ciBjb2xsZWN0aW9uLCB3aGljaCBpcworaW5jcmVhc2VkIGJ5IG9uZSBldmVyeSB0aW1lIHRoZXJlIGlzIGEgY2hhbmdlIChmb3IgZXhhbXBsZSB3aGVuIGFuCitvYmplY3QgaXMgYWRkZWQgb3IgcmVtb3ZlZCkuICBPciwgaWYgeW91IGFyZSBjb250ZW50IHdpdGggbGVzcyBzdHJpY3QKK211dGF0aW9uIGNoZWNrcywgaXQgY291bGQgcG9pbnQgdG8gdGhlIG51bWJlciBvZiBvYmplY3RzIGluIHlvdXIKK2NvbGxlY3Rpb24gb3Igc29tZSBvdGhlciB2YWx1ZSB0aGF0IGNhbiBiZSBjaGVja2VkIHRvIHBlcmZvcm0gYW4KK2FwcHJveGltYXRlIGNoZWNrIHRoYXQgdGhlIGNvbGxlY3Rpb24gaGFzIG5vdCBiZWVuIG11dGF0ZWQuCisKKyA8cD5GaW5hbGx5LCBub3RlIGhvdyB3ZSBkZWNsYXJlZCB0aGUgPGNvZGU+bGVuPC9jb2RlPiBhcmd1bWVudCBhbmQgdGhlIHJldHVybgordmFsdWUgdG8gYmUgb2YgdHlwZSA8Y29kZT51bnNpZ25lZCBsb25nPC9jb2RlPi4gIFRoZXkgY291bGQgYWxzbyBiZSBkZWNsYXJlZAordG8gYmUgb2YgdHlwZSA8Y29kZT51bnNpZ25lZCBpbnQ8L2NvZGU+IGFuZCBldmVyeXRoaW5nIHdvdWxkIHN0aWxsIHdvcmsuCisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Zhc3QtZW51bWVyYXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRmFzdC1lbnVtZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MDYyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Zhc3QtZW51bWVyYXRpb24uaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GYXN0IGVudW1lcmF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy5odG1sI09iamVjdGl2ZV8wMDJkQyIgdGl0bGU9Ik9iamVjdGl2ZS1DIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3luY2hyb25pemF0aW9uLmh0bWwjU3luY2hyb25pemF0aW9uIiB0aXRsZT0iU3luY2hyb25pemF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTWVzc2FnaW5nLXdpdGgtdGhlLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS5odG1sI01lc3NhZ2luZy13aXRoLXRoZS1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUiIHRpdGxlPSJNZXNzYWdpbmcgd2l0aCB0aGUgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRmFzdC1lbnVtZXJhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNZXNzYWdpbmctd2l0aC10aGUtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLmh0bWwjTWVzc2FnaW5nLXdpdGgtdGhlLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZSI+TWVzc2FnaW5nIHdpdGggdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3luY2hyb25pemF0aW9uLmh0bWwjU3luY2hyb25pemF0aW9uIj5TeW5jaHJvbml6YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPYmplY3RpdmVfMDAyZEMuaHRtbCNPYmplY3RpdmVfMDAyZEMiPk9iamVjdGl2ZS1DPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC45IEZhc3QgZW51bWVyYXRpb248L2gzPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iVXNpbmctZmFzdC1lbnVtZXJhdGlvbi5odG1sI1VzaW5nLWZhc3QtZW51bWVyYXRpb24iPlVzaW5nIGZhc3QgZW51bWVyYXRpb248L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJjOTlfMDAyZGxpa2UtZmFzdC1lbnVtZXJhdGlvbi1zeW50YXguaHRtbCNjOTlfMDAyZGxpa2UtZmFzdC1lbnVtZXJhdGlvbi1zeW50YXgiPmM5OS1saWtlIGZhc3QgZW51bWVyYXRpb24gc3ludGF4PC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iRmFzdC1lbnVtZXJhdGlvbi1kZXRhaWxzLmh0bWwjRmFzdC1lbnVtZXJhdGlvbi1kZXRhaWxzIj5GYXN0IGVudW1lcmF0aW9uIGRldGFpbHM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJGYXN0LWVudW1lcmF0aW9uLXByb3RvY29sLmh0bWwjRmFzdC1lbnVtZXJhdGlvbi1wcm90b2NvbCI+RmFzdCBlbnVtZXJhdGlvbiBwcm90b2NvbDwvYT4KKzwvdWw+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Cis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZpeGVkLUhlYWRlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRml4ZWQtSGVhZGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ODJhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZpeGVkLUhlYWRlcnMuaHRtbApAQCAtMCwwICsxLDkwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GaXhlZCBIZWFkZXJzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRyb3VibGUuaHRtbCNUcm91YmxlIiB0aXRsZT0iVHJvdWJsZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiIHRpdGxlPSJJbmNvbXBhdGliaWxpdGllcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlN0YW5kYXJkLUxpYnJhcmllcy5odG1sI1N0YW5kYXJkLUxpYnJhcmllcyIgdGl0bGU9IlN0YW5kYXJkIExpYnJhcmllcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGaXhlZC1IZWFkZXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN0YW5kYXJkLUxpYnJhcmllcy5odG1sI1N0YW5kYXJkLUxpYnJhcmllcyI+U3RhbmRhcmQgTGlicmFyaWVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSI+VHJvdWJsZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjExLjQgRml4ZWQgSGVhZGVyIEZpbGVzPC9oMz4KKworPHA+R0NDIG5lZWRzIHRvIGluc3RhbGwgY29ycmVjdGVkIHZlcnNpb25zIG9mIHNvbWUgc3lzdGVtIGhlYWRlciBmaWxlcy4gCitUaGlzIGlzIGJlY2F1c2UgbW9zdCB0YXJnZXQgc3lzdGVtcyBoYXZlIHNvbWUgaGVhZGVyIGZpbGVzIHRoYXQgd29uJ3QKK3dvcmsgd2l0aCBHQ0MgdW5sZXNzIHRoZXkgYXJlIGNoYW5nZWQuICBTb21lIGhhdmUgYnVncywgc29tZSBhcmUKK2luY29tcGF0aWJsZSB3aXRoIElTTyBDLCBhbmQgc29tZSBkZXBlbmQgb24gc3BlY2lhbCBmZWF0dXJlcyBvZiBvdGhlcgorY29tcGlsZXJzLgorCisgPHA+SW5zdGFsbGluZyBHQ0MgYXV0b21hdGljYWxseSBjcmVhdGVzIGFuZCBpbnN0YWxscyB0aGUgZml4ZWQgaGVhZGVyCitmaWxlcywgYnkgcnVubmluZyBhIHByb2dyYW0gY2FsbGVkIDxjb2RlPmZpeGluY2x1ZGVzPC9jb2RlPi4gIE5vcm1hbGx5LCB5b3UKK2Rvbid0IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGlzLiAgQnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBpdAorZG9lc24ndCBkbyB0aGUgcmlnaHQgdGhpbmcgYXV0b21hdGljYWxseS4KKworICAgICA8dWw+Cis8bGk+SWYgeW91IHVwZGF0ZSB0aGUgc3lzdGVtJ3MgaGVhZGVyIGZpbGVzLCBzdWNoIGFzIGJ5IGluc3RhbGxpbmcgYSBuZXcKK3N5c3RlbSB2ZXJzaW9uLCB0aGUgZml4ZWQgaGVhZGVyIGZpbGVzIG9mIEdDQyBhcmUgbm90IGF1dG9tYXRpY2FsbHkKK3VwZGF0ZWQuICBUaGV5IGNhbiBiZSB1cGRhdGVkIHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bWtoZWFkZXJzPC9zcGFuPjwvc2FtcD4gc2NyaXB0CitpbnN0YWxsZWQgaW4KKzxzYW1wPjx2YXI+bGliZXhlY2RpcjwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4vZ2NjLzwvc3Bhbj48dmFyPnRhcmdldDwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4vPC9zcGFuPjx2YXI+dmVyc2lvbjwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4vaW5zdGFsbC10b29scy88L3NwYW4+PC9zYW1wPi4KKworICAgICA8bGk+T24gc29tZSBzeXN0ZW1zLCBoZWFkZXIgZmlsZSBkaXJlY3RvcmllcyBjb250YWluCittYWNoaW5lLXNwZWNpZmljIHN5bWJvbGljIGxpbmtzIGluIGNlcnRhaW4gcGxhY2VzLiAgVGhpcyBtYWtlcyBpdAorcG9zc2libGUgdG8gc2hhcmUgbW9zdCBvZiB0aGUgaGVhZGVyIGZpbGVzIGFtb25nIGhvc3RzIHJ1bm5pbmcgdGhlCitzYW1lIHZlcnNpb24gb2YgdGhlIHN5c3RlbSBvbiBkaWZmZXJlbnQgbWFjaGluZSBtb2RlbHMuCisKKyAgICAgPHA+VGhlIHByb2dyYW1zIHRoYXQgZml4IHRoZSBoZWFkZXIgZmlsZXMgZG8gbm90IHVuZGVyc3RhbmQgdGhpcyBzcGVjaWFsCit3YXkgb2YgdXNpbmcgc3ltYm9saWMgbGlua3M7IHRoZXJlZm9yZSwgdGhlIGRpcmVjdG9yeSBvZiBmaXhlZCBoZWFkZXIKK2ZpbGVzIGlzIGdvb2Qgb25seSBmb3IgdGhlIG1hY2hpbmUgbW9kZWwgdXNlZCB0byBidWlsZCBpdC4KKworICAgICA8cD5JdCBpcyBwb3NzaWJsZSB0byBtYWtlIHNlcGFyYXRlIHNldHMgb2YgZml4ZWQgaGVhZGVyIGZpbGVzIGZvciB0aGUKK2RpZmZlcmVudCBtYWNoaW5lIG1vZGVscywgYW5kIGFycmFuZ2UgYSBzdHJ1Y3R1cmUgb2Ygc3ltYm9saWMgbGlua3Mgc28KK2FzIHRvIHVzZSB0aGUgcHJvcGVyIHNldCwgYnV0IHlvdSdsbCBoYXZlIHRvIGRvIHRoaXMgYnkgaGFuZC4gCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GaXhlZF8wMDJkUG9pbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRml4ZWRfMDAyZFBvaW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlOGU1MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRml4ZWRfMDAyZFBvaW50Lmh0bWwKQEAgLTAsMCArMSwxNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZpeGVkLVBvaW50IC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkhleC1GbG9hdHMuaHRtbCNIZXgtRmxvYXRzIiB0aXRsZT0iSGV4IEZsb2F0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjTmFtZWQtQWRkcmVzcy1TcGFjZXMiIHRpdGxlPSJOYW1lZCBBZGRyZXNzIFNwYWNlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGaXhlZC1Qb2ludCI+PC9hPgorPGEgbmFtZT0iRml4ZWRfMDAyZFBvaW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjTmFtZWQtQWRkcmVzcy1TcGFjZXMiPk5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSGV4LUZsb2F0cy5odG1sI0hleC1GbG9hdHMiPkhleCBGbG9hdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMTUgRml4ZWQtUG9pbnQgVHlwZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1maXhlZF8wMDJkcG9pbnQtdHlwZXMtMjQ2OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZGcmFjdF8wMDdkLWRhdGEtdHlwZS0yNDcwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1ZkFjY3VtXzAwN2QtZGF0YS10eXBlLTI0NzEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmU2F0XzAwN2QtZGF0YS10eXBlLTI0NzIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmhyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDczIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jscl8wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ3NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGxyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1aHJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0NzciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bHJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0NzkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVsbHJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0ODAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmhrXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDgxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JrXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDgyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsa18wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ4MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGxrXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1aGtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0ODUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVrXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bGtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0ODciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVsbGtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0ODgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkhSXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JSXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDkwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMUl8wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ5MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiTExSXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDkyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVSFJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0OTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVSXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVTFJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0OTUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVMTFJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0OTYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkhLXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDk3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JLXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMS18wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ5OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiTExLXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNTAwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVSEtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI1MDEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVLXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNTAyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVTEtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI1MDMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVMTEtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI1MDQiPjwvYT4KK0FzIGFuIGV4dGVuc2lvbiwgR05VIEMgc3VwcG9ydHMgZml4ZWQtcG9pbnQgdHlwZXMgYXMKK2RlZmluZWQgaW4gdGhlIE4xMTY5IGRyYWZ0IG9mIElTTy9JRUMgRFRSIDE4MDM3LiAgU3VwcG9ydCBmb3IgZml4ZWQtcG9pbnQKK3R5cGVzIGluIEdDQyB3aWxsIGV2b2x2ZSBhcyB0aGUgZHJhZnQgdGVjaG5pY2FsIHJlcG9ydCBjaGFuZ2VzLiAKK0NhbGxpbmcgY29udmVudGlvbnMgZm9yIGFueSB0YXJnZXQgbWlnaHQgYWxzbyBjaGFuZ2UuICBOb3QgYWxsIHRhcmdldHMKK3N1cHBvcnQgZml4ZWQtcG9pbnQgdHlwZXMuCisKKyA8cD5UaGUgZml4ZWQtcG9pbnQgdHlwZXMgYXJlCis8Y29kZT5zaG9ydCBfRnJhY3Q8L2NvZGU+LAorPGNvZGU+X0ZyYWN0PC9jb2RlPiwKKzxjb2RlPmxvbmcgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPmxvbmcgbG9uZyBfRnJhY3Q8L2NvZGU+LAorPGNvZGU+dW5zaWduZWQgc2hvcnQgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPnVuc2lnbmVkIF9GcmFjdDwvY29kZT4sCis8Y29kZT51bnNpZ25lZCBsb25nIF9GcmFjdDwvY29kZT4sCis8Y29kZT51bnNpZ25lZCBsb25nIGxvbmcgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPl9TYXQgc2hvcnQgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPl9TYXQgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPl9TYXQgbG9uZyBfRnJhY3Q8L2NvZGU+LAorPGNvZGU+X1NhdCBsb25nIGxvbmcgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPl9TYXQgdW5zaWduZWQgc2hvcnQgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPl9TYXQgdW5zaWduZWQgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPl9TYXQgdW5zaWduZWQgbG9uZyBfRnJhY3Q8L2NvZGU+LAorPGNvZGU+X1NhdCB1bnNpZ25lZCBsb25nIGxvbmcgX0ZyYWN0PC9jb2RlPiwKKzxjb2RlPnNob3J0IF9BY2N1bTwvY29kZT4sCis8Y29kZT5fQWNjdW08L2NvZGU+LAorPGNvZGU+bG9uZyBfQWNjdW08L2NvZGU+LAorPGNvZGU+bG9uZyBsb25nIF9BY2N1bTwvY29kZT4sCis8Y29kZT51bnNpZ25lZCBzaG9ydCBfQWNjdW08L2NvZGU+LAorPGNvZGU+dW5zaWduZWQgX0FjY3VtPC9jb2RlPiwKKzxjb2RlPnVuc2lnbmVkIGxvbmcgX0FjY3VtPC9jb2RlPiwKKzxjb2RlPnVuc2lnbmVkIGxvbmcgbG9uZyBfQWNjdW08L2NvZGU+LAorPGNvZGU+X1NhdCBzaG9ydCBfQWNjdW08L2NvZGU+LAorPGNvZGU+X1NhdCBfQWNjdW08L2NvZGU+LAorPGNvZGU+X1NhdCBsb25nIF9BY2N1bTwvY29kZT4sCis8Y29kZT5fU2F0IGxvbmcgbG9uZyBfQWNjdW08L2NvZGU+LAorPGNvZGU+X1NhdCB1bnNpZ25lZCBzaG9ydCBfQWNjdW08L2NvZGU+LAorPGNvZGU+X1NhdCB1bnNpZ25lZCBfQWNjdW08L2NvZGU+LAorPGNvZGU+X1NhdCB1bnNpZ25lZCBsb25nIF9BY2N1bTwvY29kZT4sCis8Y29kZT5fU2F0IHVuc2lnbmVkIGxvbmcgbG9uZyBfQWNjdW08L2NvZGU+LgorCisgPHA+Rml4ZWQtcG9pbnQgZGF0YSB2YWx1ZXMgY29udGFpbiBmcmFjdGlvbmFsIGFuZCBvcHRpb25hbCBpbnRlZ3JhbCBwYXJ0cy4gCitUaGUgZm9ybWF0IG9mIGZpeGVkLXBvaW50IGRhdGEgdmFyaWVzIGFuZCBkZXBlbmRzIG9uIHRoZSB0YXJnZXQgbWFjaGluZS4KKworIDxwPlN1cHBvcnQgZm9yIGZpeGVkLXBvaW50IHR5cGVzIGluY2x1ZGVzOgorICAgICA8dWw+Cis8bGk+cHJlZml4IGFuZCBwb3N0Zml4IGluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9wZXJhdG9ycyAoPGNvZGU+Kys8L2NvZGU+LCA8Y29kZT4tLTwvY29kZT4pCis8bGk+dW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRvcnMgKDxjb2RlPis8L2NvZGU+LCA8Y29kZT4tPC9jb2RlPiwgPGNvZGU+ITwvY29kZT4pCis8bGk+YmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0b3JzICg8Y29kZT4rPC9jb2RlPiwgPGNvZGU+LTwvY29kZT4sIDxjb2RlPio8L2NvZGU+LCA8Y29kZT4vPC9jb2RlPikKKzxsaT5iaW5hcnkgc2hpZnQgb3BlcmF0b3JzICg8Y29kZT4mbHQ7Jmx0OzwvY29kZT4sIDxjb2RlPiZndDsmZ3Q7PC9jb2RlPikKKzxsaT5yZWxhdGlvbmFsIG9wZXJhdG9ycyAoPGNvZGU+Jmx0OzwvY29kZT4sIDxjb2RlPiZsdDs9PC9jb2RlPiwgPGNvZGU+Jmd0Oz08L2NvZGU+LCA8Y29kZT4mZ3Q7PC9jb2RlPikKKzxsaT5lcXVhbGl0eSBvcGVyYXRvcnMgKDxjb2RlPj09PC9jb2RlPiwgPGNvZGU+IT08L2NvZGU+KQorPGxpPmFzc2lnbm1lbnQgb3BlcmF0b3JzICg8Y29kZT4rPTwvY29kZT4sIDxjb2RlPi09PC9jb2RlPiwgPGNvZGU+Kj08L2NvZGU+LCA8Y29kZT4vPTwvY29kZT4sCis8Y29kZT4mbHQ7Jmx0Oz08L2NvZGU+LCA8Y29kZT4mZ3Q7Jmd0Oz08L2NvZGU+KQorPGxpPmNvbnZlcnNpb25zIHRvIGFuZCBmcm9tIGludGVnZXIsIGZsb2F0aW5nLXBvaW50LCBvciBmaXhlZC1wb2ludCB0eXBlcworPC91bD4KKworIDxwPlVzZSBhIHN1ZmZpeCBpbiBhIGZpeGVkLXBvaW50IGxpdGVyYWwgY29uc3RhbnQ6CisgICAgIDx1bD4KKzxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmhyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+SFI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDxjb2RlPnNob3J0IF9GcmFjdDwvY29kZT4gYW5kCis8Y29kZT5fU2F0IHNob3J0IF9GcmFjdDwvY29kZT4KKzxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5SPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciA8Y29kZT5fRnJhY3Q8L2NvZGU+IGFuZCA8Y29kZT5fU2F0IF9GcmFjdDwvY29kZT4KKzxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TFI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDxjb2RlPmxvbmcgX0ZyYWN0PC9jb2RlPiBhbmQKKzxjb2RlPl9TYXQgbG9uZyBfRnJhY3Q8L2NvZGU+Cis8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sbHI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MTFI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDxjb2RlPmxvbmcgbG9uZyBfRnJhY3Q8L2NvZGU+IGFuZAorPGNvZGU+X1NhdCBsb25nIGxvbmcgX0ZyYWN0PC9jb2RlPgorPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dWhyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VUhSPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciA8Y29kZT51bnNpZ25lZCBzaG9ydCBfRnJhY3Q8L2NvZGU+IGFuZAorPGNvZGU+X1NhdCB1bnNpZ25lZCBzaG9ydCBfRnJhY3Q8L2NvZGU+Cis8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj51cjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlVSPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciA8Y29kZT51bnNpZ25lZCBfRnJhY3Q8L2NvZGU+IGFuZAorPGNvZGU+X1NhdCB1bnNpZ25lZCBfRnJhY3Q8L2NvZGU+Cis8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj51bHI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5VTFI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDxjb2RlPnVuc2lnbmVkIGxvbmcgX0ZyYWN0PC9jb2RlPiBhbmQKKzxjb2RlPl9TYXQgdW5zaWduZWQgbG9uZyBfRnJhY3Q8L2NvZGU+Cis8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj51bGxyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VUxMUjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgPGNvZGU+dW5zaWduZWQgbG9uZyBsb25nIF9GcmFjdDwvY29kZT4KK2FuZCA8Y29kZT5fU2F0IHVuc2lnbmVkIGxvbmcgbG9uZyBfRnJhY3Q8L2NvZGU+Cis8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5oazwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkhLPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciA8Y29kZT5zaG9ydCBfQWNjdW08L2NvZGU+IGFuZAorPGNvZGU+X1NhdCBzaG9ydCBfQWNjdW08L2NvZGU+Cis8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5rPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Szwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgPGNvZGU+X0FjY3VtPC9jb2RlPiBhbmQgPGNvZGU+X1NhdCBfQWNjdW08L2NvZGU+Cis8bGk+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sazwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxLPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciA8Y29kZT5sb25nIF9BY2N1bTwvY29kZT4gYW5kCis8Y29kZT5fU2F0IGxvbmcgX0FjY3VtPC9jb2RlPgorPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGxrPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TExLPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciA8Y29kZT5sb25nIGxvbmcgX0FjY3VtPC9jb2RlPiBhbmQKKzxjb2RlPl9TYXQgbG9uZyBsb25nIF9BY2N1bTwvY29kZT4KKzxsaT4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVoazwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlVISzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgPGNvZGU+dW5zaWduZWQgc2hvcnQgX0FjY3VtPC9jb2RlPiBhbmQKKzxjb2RlPl9TYXQgdW5zaWduZWQgc2hvcnQgX0FjY3VtPC9jb2RlPgorPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dWs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5VSzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgPGNvZGU+dW5zaWduZWQgX0FjY3VtPC9jb2RlPiBhbmQKKzxjb2RlPl9TYXQgdW5zaWduZWQgX0FjY3VtPC9jb2RlPgorPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dWxrPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VUxLPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciA8Y29kZT51bnNpZ25lZCBsb25nIF9BY2N1bTwvY29kZT4gYW5kCis8Y29kZT5fU2F0IHVuc2lnbmVkIGxvbmcgX0FjY3VtPC9jb2RlPgorPGxpPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dWxsazwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlVMTEs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDxjb2RlPnVuc2lnbmVkIGxvbmcgbG9uZyBfQWNjdW08L2NvZGU+CithbmQgPGNvZGU+X1NhdCB1bnNpZ25lZCBsb25nIGxvbmcgX0FjY3VtPC9jb2RlPgorPC91bD4KKworIDxwPkdDQyBzdXBwb3J0IG9mIGZpeGVkLXBvaW50IHR5cGVzIGFzIHNwZWNpZmllZCBieSB0aGUgZHJhZnQgdGVjaG5pY2FsIHJlcG9ydAoraXMgaW5jb21wbGV0ZToKKworICAgICA8dWw+Cis8bGk+UHJhZ21hcyB0byBjb250cm9sIG92ZXJmbG93IGFuZCByb3VuZGluZyBiZWhhdmlvcnMgYXJlIG5vdCBpbXBsZW1lbnRlZC4gCis8L3VsPgorCisgPHA+Rml4ZWQtcG9pbnQgdHlwZXMgYXJlIHN1cHBvcnRlZCBieSB0aGUgRFdBUkYgMiBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3JtYXQuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Zsb2F0aW5nLVR5cGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Zsb2F0aW5nLVR5cGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhMGViNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRmxvYXRpbmctVHlwZXMuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GbG9hdGluZyBUeXBlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCIgdGl0bGU9IkNvbXBsZXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIYWxmXzAwMmRQcmVjaXNpb24uaHRtbCNIYWxmXzAwMmRQcmVjaXNpb24iIHRpdGxlPSJIYWxmLVByZWNpc2lvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGbG9hdGluZy1UeXBlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJIYWxmXzAwMmRQcmVjaXNpb24uaHRtbCNIYWxmXzAwMmRQcmVjaXNpb24iPkhhbGYtUHJlY2lzaW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMTEgQWRkaXRpb25hbCBGbG9hdGluZyBUeXBlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFkZGl0aW9uYWwtZmxvYXRpbmctdHlwZXMtMjQ0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsb2F0ODBfMDA3ZC1kYXRhLXR5cGUtMjQ1MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsb2F0MTI4XzAwN2QtZGF0YS10eXBlLTI0NTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndfMDA3ZC1mbG9hdGluZy1wb2ludC1zdWZmaXgtMjQ1MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicV8wMDdkLWZsb2F0aW5nLXBvaW50LXN1ZmZpeC0yNDUzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXXzAwN2QtZmxvYXRpbmctcG9pbnQtc3VmZml4LTI0NTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlFfMDA3ZC1mbG9hdGluZy1wb2ludC1zdWZmaXgtMjQ1NSI+PC9hPgorQXMgYW4gZXh0ZW5zaW9uLCBHTlUgQyBzdXBwb3J0cyBhZGRpdGlvbmFsIGZsb2F0aW5nCit0eXBlcywgPGNvZGU+X19mbG9hdDgwPC9jb2RlPiBhbmQgPGNvZGU+X19mbG9hdDEyODwvY29kZT4gdG8gc3VwcG9ydCA4MC1iaXQKKyg8Y29kZT5YRm1vZGU8L2NvZGU+KSBhbmQgMTI4LWJpdCAoPGNvZGU+VEZtb2RlPC9jb2RlPikgZmxvYXRpbmcgdHlwZXMuIAorU3VwcG9ydCBmb3IgYWRkaXRpb25hbCB0eXBlcyBpbmNsdWRlcyB0aGUgYXJpdGhtZXRpYyBvcGVyYXRvcnM6CithZGQsIHN1YnRyYWN0LCBtdWx0aXBseSwgZGl2aWRlOyB1bmFyeSBhcml0aG1ldGljIG9wZXJhdG9yczsKK3JlbGF0aW9uYWwgb3BlcmF0b3JzOyBlcXVhbGl0eSBvcGVyYXRvcnM7IGFuZCBjb252ZXJzaW9ucyB0byBhbmQgZnJvbQoraW50ZWdlciBhbmQgb3RoZXIgZmxvYXRpbmcgdHlwZXMuICBVc2UgYSBzdWZmaXggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Vzwvc3Bhbj48L3NhbXA+JnJzcXVvOworaW4gYSBsaXRlcmFsIGNvbnN0YW50IG9mIHR5cGUgPGNvZGU+X19mbG9hdDgwPC9jb2RlPiBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5xPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UTwvc3Bhbj48L3NhbXA+JnJzcXVvOworZm9yIDxjb2RlPl9mbG9hdDEyODwvY29kZT4uICBZb3UgY2FuIGRlY2xhcmUgY29tcGxleCB0eXBlcyB1c2luZyB0aGUKK2NvcnJlc3BvbmRpbmcgaW50ZXJuYWwgY29tcGxleCB0eXBlLCA8Y29kZT5YQ21vZGU8L2NvZGU+IGZvciA8Y29kZT5fX2Zsb2F0ODA8L2NvZGU+Cit0eXBlIGFuZCA8Y29kZT5UQ21vZGU8L2NvZGU+IGZvciA8Y29kZT5fX2Zsb2F0MTI4PC9jb2RlPiB0eXBlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZWRlZiBfQ29tcGxleCBmbG9hdCBfX2F0dHJpYnV0ZV9fKChtb2RlKFRDKSkpIF9Db21wbGV4MTI4OworICAgICB0eXBlZGVmIF9Db21wbGV4IGZsb2F0IF9fYXR0cmlidXRlX18oKG1vZGUoWEMpKSkgX0NvbXBsZXg4MDsKKzwvcHJlPgorIDxwPk5vdCBhbGwgdGFyZ2V0cyBzdXBwb3J0IGFkZGl0aW9uYWwgZmxvYXRpbmctcG9pbnQgdHlwZXMuICA8Y29kZT5fX2Zsb2F0ODA8L2NvZGU+CithbmQgPGNvZGU+X19mbG9hdDEyODwvY29kZT4gdHlwZXMgYXJlIHN1cHBvcnRlZCBvbiBpMzg2LCB4ODZfNjQgYW5kIElBLTY0IHRhcmdldHMuIAorVGhlIDxjb2RlPl9fZmxvYXQxMjg8L2NvZGU+IHR5cGUgaXMgc3VwcG9ydGVkIG9uIGhwcGEgSFAtVVggdGFyZ2V0cy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRmxvYXRpbmctcG9pbnQtaW1wbGVtZW50YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRmxvYXRpbmctcG9pbnQtaW1wbGVtZW50YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjIxNWQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GbG9hdGluZy1wb2ludC1pbXBsZW1lbnRhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTM1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GbG9hdGluZyBwb2ludCBpbXBsZW1lbnRhdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkMgSW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbnRlZ2Vycy1pbXBsZW1lbnRhdGlvbi5odG1sI0ludGVnZXJzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iSW50ZWdlcnMgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBcnJheXMtYW5kLXBvaW50ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjQXJyYXlzLWFuZC1wb2ludGVycy1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkFycmF5cyBhbmQgcG9pbnRlcnMgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRmxvYXRpbmctcG9pbnQtaW1wbGVtZW50YXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXJyYXlzLWFuZC1wb2ludGVycy1pbXBsZW1lbnRhdGlvbi5odG1sI0FycmF5cy1hbmQtcG9pbnRlcnMtaW1wbGVtZW50YXRpb24iPkFycmF5cyBhbmQgcG9pbnRlcnMgaW1wbGVtZW50YXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnRlZ2Vycy1pbXBsZW1lbnRhdGlvbi5odG1sI0ludGVnZXJzLWltcGxlbWVudGF0aW9uIj5JbnRlZ2VycyBpbXBsZW1lbnRhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj5DIEltcGxlbWVudGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC42IEZsb2F0aW5nIHBvaW50PC9oMz4KKworICAgICA8dWw+Cis8bGk+PGNpdGU+VGhlIGFjY3VyYWN5IG9mIHRoZSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFuZCBvZiB0aGUgbGlicmFyeQorZnVuY3Rpb25zIGluIDwvY2l0ZT48Y29kZT4mbHQ7bWF0aC5oJmd0OzwvY29kZT48Y2l0ZT4gYW5kIDwvY2l0ZT48Y29kZT4mbHQ7Y29tcGxleC5oJmd0OzwvY29kZT48Y2l0ZT4gdGhhdCByZXR1cm4gZmxvYXRpbmctcG9pbnQKK3Jlc3VsdHMgKEM5MCBhbmQgQzk5IDUuMi40LjIuMikuPC9jaXRlPgorCisgICAgIDxwPlRoZSBhY2N1cmFjeSBpcyB1bmtub3duLgorCisgICAgIDxsaT48Y2l0ZT5UaGUgcm91bmRpbmcgYmVoYXZpb3JzIGNoYXJhY3Rlcml6ZWQgYnkgbm9uLXN0YW5kYXJkIHZhbHVlcworb2YgPC9jaXRlPjxjb2RlPkZMVF9ST1VORFM8L2NvZGU+PGNpdGU+IAorKEM5MCBhbmQgQzk5IDUuMi40LjIuMikuPC9jaXRlPgorCisgICAgIDxwPkdDQyBkb2VzIG5vdCB1c2Ugc3VjaCB2YWx1ZXMuCisKKyAgICAgPGxpPjxjaXRlPlRoZSBldmFsdWF0aW9uIG1ldGhvZHMgY2hhcmFjdGVyaXplZCBieSBub24tc3RhbmRhcmQgbmVnYXRpdmUKK3ZhbHVlcyBvZiA8L2NpdGU+PGNvZGU+RkxUX0VWQUxfTUVUSE9EPC9jb2RlPjxjaXRlPiAoQzk5IDUuMi40LjIuMikuPC9jaXRlPgorCisgICAgIDxwPkdDQyBkb2VzIG5vdCB1c2Ugc3VjaCB2YWx1ZXMuCisKKyAgICAgPGxpPjxjaXRlPlRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmcgd2hlbiBhbiBpbnRlZ2VyIGlzIGNvbnZlcnRlZCB0byBhCitmbG9hdGluZy1wb2ludCBudW1iZXIgdGhhdCBjYW5ub3QgZXhhY3RseSByZXByZXNlbnQgdGhlIG9yaWdpbmFsCit2YWx1ZSAoQzkwIDYuMi4xLjMsIEM5OSA2LjMuMS40KS48L2NpdGU+CisKKyAgICAgPHA+Qzk5IEFubmV4IEYgaXMgZm9sbG93ZWQuCisKKyAgICAgPGxpPjxjaXRlPlRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmcgd2hlbiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBpcworY29udmVydGVkIHRvIGEgbmFycm93ZXIgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChDOTAgNi4yLjEuNCwgQzk5Cis2LjMuMS41KS48L2NpdGU+CisKKyAgICAgPHA+Qzk5IEFubmV4IEYgaXMgZm9sbG93ZWQuCisKKyAgICAgPGxpPjxjaXRlPkhvdyB0aGUgbmVhcmVzdCByZXByZXNlbnRhYmxlIHZhbHVlIG9yIHRoZSBsYXJnZXIgb3Igc21hbGxlcgorcmVwcmVzZW50YWJsZSB2YWx1ZSBpbW1lZGlhdGVseSBhZGphY2VudCB0byB0aGUgbmVhcmVzdCByZXByZXNlbnRhYmxlCit2YWx1ZSBpcyBjaG9zZW4gZm9yIGNlcnRhaW4gZmxvYXRpbmcgY29uc3RhbnRzIChDOTAgNi4xLjMuMSwgQzk5Cis2LjQuNC4yKS48L2NpdGU+CisKKyAgICAgPHA+Qzk5IEFubmV4IEYgaXMgZm9sbG93ZWQuCisKKyAgICAgPGxpPjxjaXRlPldoZXRoZXIgYW5kIGhvdyBmbG9hdGluZyBleHByZXNzaW9ucyBhcmUgY29udHJhY3RlZCB3aGVuIG5vdAorZGlzYWxsb3dlZCBieSB0aGUgPC9jaXRlPjxjb2RlPkZQX0NPTlRSQUNUPC9jb2RlPjxjaXRlPiBwcmFnbWEgKEM5OSA2LjUpLjwvY2l0ZT4KKworICAgICA8cD5FeHByZXNzaW9ucyBhcmUgY3VycmVudGx5IG9ubHkgY29udHJhY3RlZCBpZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmYXN0LW1hdGg8L3NwYW4+PC9zYW1wPiBhcmUgdXNlZC4gCitUaGlzIGlzIHN1YmplY3QgdG8gY2hhbmdlLgorCisgICAgIDxsaT48Y2l0ZT5UaGUgZGVmYXVsdCBzdGF0ZSBmb3IgdGhlIDwvY2l0ZT48Y29kZT5GRU5WX0FDQ0VTUzwvY29kZT48Y2l0ZT4gcHJhZ21hIChDOTkgNy42LjEpLjwvY2l0ZT4KKworICAgICA8cD5UaGlzIHByYWdtYSBpcyBub3QgaW1wbGVtZW50ZWQsIGJ1dCB0aGUgZGVmYXVsdCBpcyB0byAmbGRxdW87b2ZmJnJkcXVvOyB1bmxlc3MKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcm91bmRpbmctbWF0aDwvc3Bhbj48L3NhbXA+IGlzIHVzZWQgaW4gd2hpY2ggY2FzZSBpdCBpcyAmbGRxdW87b24mcmRxdW87LgorCisgICAgIDxsaT48Y2l0ZT5BZGRpdGlvbmFsIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbnMsIHJvdW5kaW5nIG1vZGVzLCBlbnZpcm9ubWVudHMsCithbmQgY2xhc3NpZmljYXRpb25zLCBhbmQgdGhlaXIgbWFjcm8gbmFtZXMgKEM5OSA3LjYsIEM5OSA3LjEyKS48L2NpdGU+CisKKyAgICAgPHA+VGhpcyBpcyBkZXBlbmRlbnQgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDIGxpYnJhcnksIGFuZCBpcyBub3QKK2RlZmluZWQgYnkgR0NDIGl0c2VsZi4KKworICAgICA8bGk+PGNpdGU+VGhlIGRlZmF1bHQgc3RhdGUgZm9yIHRoZSA8L2NpdGU+PGNvZGU+RlBfQ09OVFJBQ1Q8L2NvZGU+PGNpdGU+IHByYWdtYSAoQzk5IDcuMTIuMikuPC9jaXRlPgorCisgICAgIDxwPlRoaXMgcHJhZ21hIGlzIG5vdCBpbXBsZW1lbnRlZC4gIEV4cHJlc3Npb25zIGFyZSBjdXJyZW50bHkgb25seQorY29udHJhY3RlZCBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnM8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmYXN0LW1hdGg8L3NwYW4+PC9zYW1wPiBhcmUgdXNlZC4gIFRoaXMgaXMgc3ViamVjdCB0byBjaGFuZ2UuCisKKyAgICAgPGxpPjxjaXRlPldoZXRoZXIgdGhlICZsZHF1bztpbmV4YWN0JnJkcXVvOyBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gY2FuIGJlIHJhaXNlZAord2hlbiB0aGUgcm91bmRlZCByZXN1bHQgYWN0dWFsbHkgZG9lcyBlcXVhbCB0aGUgbWF0aGVtYXRpY2FsIHJlc3VsdAoraW4gYW4gSUVDIDYwNTU5IGNvbmZvcm1hbnQgaW1wbGVtZW50YXRpb24gKEM5OSBGLjkpLjwvY2l0ZT4KKworICAgICA8cD5UaGlzIGlzIGRlcGVuZGVudCBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEMgbGlicmFyeSwgYW5kIGlzIG5vdAorZGVmaW5lZCBieSBHQ0MgaXRzZWxmLgorCisgICAgIDxsaT48Y2l0ZT5XaGV0aGVyIHRoZSAmbGRxdW87dW5kZXJmbG93JnJkcXVvOyAoYW5kICZsZHF1bztpbmV4YWN0JnJkcXVvOykgZmxvYXRpbmctcG9pbnQKK2V4Y2VwdGlvbiBjYW4gYmUgcmFpc2VkIHdoZW4gYSByZXN1bHQgaXMgdGlueSBidXQgbm90IGluZXhhY3QgaW4gYW4KK0lFQyA2MDU1OSBjb25mb3JtYW50IGltcGxlbWVudGF0aW9uIChDOTkgRi45KS48L2NpdGU+CisKKyAgICAgPHA+VGhpcyBpcyBkZXBlbmRlbnQgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDIGxpYnJhcnksIGFuZCBpcyBub3QKK2RlZmluZWQgYnkgR0NDIGl0c2VsZi4KKworPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRm9yd2FyZGluZy1ob29rLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZvcndhcmRpbmctaG9vay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OWRjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ZvcndhcmRpbmctaG9vay5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Gb3J3YXJkaW5nIGhvb2sgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWVzc2FnaW5nLXdpdGgtdGhlLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS5odG1sI01lc3NhZ2luZy13aXRoLXRoZS1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUiIHRpdGxlPSJNZXNzYWdpbmcgd2l0aCB0aGUgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEeW5hbWljYWxseS1yZWdpc3RlcmluZy1tZXRob2RzLmh0bWwjRHluYW1pY2FsbHktcmVnaXN0ZXJpbmctbWV0aG9kcyIgdGl0bGU9IkR5bmFtaWNhbGx5IHJlZ2lzdGVyaW5nIG1ldGhvZHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRm9yd2FyZGluZy1ob29rIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRHluYW1pY2FsbHktcmVnaXN0ZXJpbmctbWV0aG9kcy5odG1sI0R5bmFtaWNhbGx5LXJlZ2lzdGVyaW5nLW1ldGhvZHMiPkR5bmFtaWNhbGx5IHJlZ2lzdGVyaW5nIG1ldGhvZHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNZXNzYWdpbmctd2l0aC10aGUtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLmh0bWwjTWVzc2FnaW5nLXdpdGgtdGhlLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZSI+TWVzc2FnaW5nIHdpdGggdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OC4xMC4yIEZvcndhcmRpbmcgaG9vazwvaDQ+CisKKzxwPlRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBwcm92aWRlcyBhIGhvb2ssIGNhbGxlZAorPGNvZGU+X19vYmpjX21zZ19mb3J3YXJkMjwvY29kZT4sIHdoaWNoIGlzIGNhbGxlZCBieQorPGNvZGU+b2JqY19tc2dfbG9va3VwKCk8L2NvZGU+IHdoZW4gaXQgY2FuJ3QgZmluZCBhIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBpbgordGhlIHJ1bnRpbWUgdGFibGVzIGFuZCBhZnRlciBjYWxsaW5nIDxjb2RlPityZXNvbHZlSW5zdGFuY2VNZXRob2Q6PC9jb2RlPgorYW5kIDxjb2RlPityZXNvbHZlQ2xhc3NNZXRob2Q6PC9jb2RlPiBoYXMgYmVlbiBhdHRlbXB0ZWQgYW5kIGRpZCBub3Qgc3VjY2VlZAoraW4gZHluYW1pY2FsbHkgcmVnaXN0ZXJpbmcgdGhlIG1ldGhvZC4KKworIDxwPlRvIGNvbmZpZ3VyZSB0aGUgaG9vaywgeW91IHNldCB0aGUgZ2xvYmFsIHZhcmlhYmxlCis8Y29kZT5fX29iamNfbXNnX2ZvcndhcmQyPC9jb2RlPiB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgYXJndW1lbnQgYW5kCityZXR1cm4gdHlwZXMgb2YgPGNvZGU+b2JqY19tc2dfbG9va3VwKCk8L2NvZGU+LiAgV2hlbgorPGNvZGU+b2JqY19tc2dfbG9va3VwKCk8L2NvZGU+IGNhbiBub3QgZmluZCBhIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiwgaXQKK2ludm9rZXMgdGhlIGhvb2sgZnVuY3Rpb24geW91IHByb3ZpZGVkIHRvIGdldCBhIG1ldGhvZCBpbXBsZW1lbnRhdGlvbgordG8gcmV0dXJuLiAgU28sIGluIHByYWN0aWNlIDxjb2RlPl9fb2JqY19tc2dfZm9yd2FyZDI8L2NvZGU+IGFsbG93cyB5b3UgdG8KK2V4dGVuZCA8Y29kZT5vYmpjX21zZ19sb29rdXAoKTwvY29kZT4gYnkgYWRkaW5nIHNvbWUgY3VzdG9tIGNvZGUgdGhhdCBpcworY2FsbGVkIHRvIGRvIGEgZnVydGhlciBsb29rdXAgd2hlbiBubyBzdGFuZGFyZCBtZXRob2QgaW1wbGVtZW50YXRpb24KK2NhbiBiZSBmb3VuZCB1c2luZyB0aGUgbm9ybWFsIGxvb2t1cC4KKworIDxwPlRoaXMgaG9vayBpcyBnZW5lcmFsbHkgcmVzZXJ2ZWQgZm9yICZsZHF1bztGb3VuZGF0aW9uJnJkcXVvOyBsaWJyYXJpZXMgc3VjaCBhcworR05Vc3RlcCBCYXNlLCB3aGljaCB1c2UgaXQgdG8gaW1wbGVtZW50IHRoZWlyIGhpZ2gtbGV2ZWwgbWV0aG9kCitmb3J3YXJkaW5nIEFQSSwgdHlwaWNhbGx5IGJhc2VkIGFyb3VuZCB0aGUgPGNvZGU+Zm9yd2FyZEludm9jYXRpb246PC9jb2RlPgorbWV0aG9kLiAgU28sIHVubGVzcyB5b3UgYXJlIGltcGxlbWVudGluZyB5b3VyIG93biAmbGRxdW87Rm91bmRhdGlvbiZyZHF1bzsKK2xpYnJhcnksIHlvdSBzaG91bGQgbm90IHNldCB0aGlzIGhvb2suCisKKyA8cD5JbiBhIHR5cGljYWwgZm9yd2FyZGluZyBpbXBsZW1lbnRhdGlvbiwgdGhlIDxjb2RlPl9fb2JqY19tc2dfZm9yd2FyZDI8L2NvZGU+Citob29rIGZ1bmN0aW9uIGRldGVybWluZXMgdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4gdHlwZSBvZiB0aGUgbWV0aG9kCit0aGF0IGlzIGJlaW5nIGxvb2tlZCB1cCwgYW5kIHRoZW4gY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlc2UKK2FyZ3VtZW50cyBhbmQgaGFzIHRoYXQgcmV0dXJuIHR5cGUsIGFuZCByZXR1cm5zIGl0IHRvIHRoZSBjYWxsZXIuIAorQ3JlYXRpbmcgdGhpcyBmdW5jdGlvbiBpcyBub24tdHJpdmlhbCBhbmQgaXMgdHlwaWNhbGx5IHBlcmZvcm1lZCB1c2luZworYSBkZWRpY2F0ZWQgbGlicmFyeSBzdWNoIGFzIDxjb2RlPmxpYmZmaTwvY29kZT4uCisKKyA8cD5UaGUgZm9yd2FyZGluZyBtZXRob2QgaW1wbGVtZW50YXRpb24gdGh1cyBjcmVhdGVkIGlzIHJldHVybmVkIGJ5Cis8Y29kZT5vYmpjX21zZ19sb29rdXAoKTwvY29kZT4gYW5kIGlzIGV4ZWN1dGVkIGFzIGlmIGl0IHdhcyBhIG5vcm1hbCBtZXRob2QKK2ltcGxlbWVudGF0aW9uLiAgV2hlbiB0aGUgZm9yd2FyZGluZyBtZXRob2QgaW1wbGVtZW50YXRpb24gaXMgY2FsbGVkLAoraXQgaXMgdXN1YWxseSBleHBlY3RlZCB0byBwYWNrIGFsbCBhcmd1bWVudHMgaW50byBzb21lIHNvcnQgb2Ygb2JqZWN0CisodHlwaWNhbGx5LCBhbiA8Y29kZT5OU0ludm9jYXRpb248L2NvZGU+IGluIGEgJmxkcXVvO0ZvdW5kYXRpb24mcmRxdW87IGxpYnJhcnkpLCBhbmQKK2hhbmQgaXQgb3ZlciB0byB0aGUgcHJvZ3JhbW1lciAoPGNvZGU+Zm9yd2FyZEludm9jYXRpb246PC9jb2RlPikgd2hvIGlzIHRoZW4KK2FsbG93ZWQgdG8gbWFuaXB1bGF0ZSB0aGUgbWV0aG9kIGludm9jYXRpb24gdXNpbmcgYSBoaWdoLWxldmVsIEFQSQorcHJvdmlkZWQgYnkgdGhlICZsZHF1bztGb3VuZGF0aW9uJnJkcXVvOyBsaWJyYXJ5LiAgRm9yIGV4YW1wbGUsIHRoZSBwcm9ncmFtbWVyCittYXkgd2FudCB0byBleGFtaW5lIHRoZSBtZXRob2QgaW52b2NhdGlvbiBhcmd1bWVudHMgYW5kIG5hbWUgYW5kCitwb3RlbnRpYWxseSBjaGFuZ2UgdGhlbSBiZWZvcmUgZm9yd2FyZGluZyB0aGUgbWV0aG9kIGludm9jYXRpb24gdG8gb25lCitvciBtb3JlIGxvY2FsIG9iamVjdHMgKDxjb2RlPnBlcmZvcm1JbnZvY2F0aW9uOjwvY29kZT4pIG9yIGV2ZW4gdG8gcmVtb3RlCitvYmplY3RzIChieSB1c2luZyBEaXN0cmlidXRlZCBPYmplY3RzIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtKS4gIFdoZW4KK2FsbCB0aGlzIGNvbXBsZXRlcywgdGhlIHJldHVybiB2YWx1ZSBpcyBwYXNzZWQgYmFjayBhbmQgbXVzdCBiZQorcmV0dXJuZWQgY29ycmVjdGx5IHRvIHRoZSBvcmlnaW5hbCBjYWxsZXIuCisKKyA8cD5Ob3RlIHRoYXQgdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIGN1cnJlbnRseSBwcm92aWRlcyBubyBzdXBwb3J0Citmb3IgbWV0aG9kIGZvcndhcmRpbmcgb3IgbWV0aG9kIGludm9jYXRpb25zIG90aGVyIHRoYW4gdGhlCis8Y29kZT5fX29iamNfbXNnX2ZvcndhcmQyPC9jb2RlPiBob29rLgorCisgPHA+SWYgdGhlIGZvcndhcmRpbmcgaG9vayBkb2VzIG5vdCBleGlzdCBvciByZXR1cm5zIDxjb2RlPk5VTEw8L2NvZGU+LCB0aGUKK3J1bnRpbWUgY3VycmVudGx5IGF0dGVtcHRzIGZvcndhcmRpbmcgdXNpbmcgYW4gb2xkZXIsIGRlcHJlY2F0ZWQgQVBJLAorYW5kIGlmIHRoYXQgZmFpbHMsIGl0IGFib3J0cyB0aGUgcHJvZ3JhbS4gIEluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUKK0dOVSBPYmplY3RpdmUtQyBydW50aW1lLCB0aGUgcnVudGltZSB3aWxsIGltbWVkaWF0ZWx5IGFib3J0LgorCis8IS0tIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Z1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMWYyODQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Z1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbApAQCAtMCwwICsxLDE3MjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZ1bmN0aW9uIEF0dHJpYnV0ZXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTWl4ZWQtRGVjbGFyYXRpb25zLmh0bWwjTWl4ZWQtRGVjbGFyYXRpb25zIiB0aXRsZT0iTWl4ZWQgRGVjbGFyYXRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQXR0cmlidXRlLVN5bnRheC5odG1sI0F0dHJpYnV0ZS1TeW50YXgiIHRpdGxlPSJBdHRyaWJ1dGUgU3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXR0cmlidXRlLVN5bnRheC5odG1sI0F0dHJpYnV0ZS1TeW50YXgiPkF0dHJpYnV0ZSBTeW50YXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNaXhlZC1EZWNsYXJhdGlvbnMuaHRtbCNNaXhlZC1EZWNsYXJhdGlvbnMiPk1peGVkIERlY2xhcmF0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4zMCBEZWNsYXJpbmcgQXR0cmlidXRlcyBvZiBGdW5jdGlvbnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mdW5jdGlvbi1hdHRyaWJ1dGVzLTI1NjQiPjwvYT48YSBuYW1lPSJpbmRleC1kZWNsYXJpbmctYXR0cmlidXRlcy1vZi1mdW5jdGlvbnMtMjU2NSI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9ucy10aGF0LW5ldmVyLXJldHVybi0yNTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25zLXRoYXQtcmV0dXJuLW1vcmUtdGhhbi1vbmNlLTI1NjciPjwvYT48YSBuYW1lPSJpbmRleC1mdW5jdGlvbnMtdGhhdC1oYXZlLW5vLXNpZGUtZWZmZWN0cy0yNTY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25zLWluLWFyYml0cmFyeS1zZWN0aW9ucy0yNTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25zLXRoYXQtYmVoYXZlLWxpa2UtbWFsbG9jLTI1NzAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnZvbGF0aWxlXzAwN2QtYXBwbGllZC10by1mdW5jdGlvbi0yNTcxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb25zdF8wMDdkLWFwcGxpZWQtdG8tZnVuY3Rpb24tMjU3MiI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9ucy13aXRoLV8wMDQwY29kZV8wMDdicHJpbnRmXzAwN2RfMDAyYy1fMDA0MGNvZGVfMDA3YnNjYW5mXzAwN2RfMDAyYy1fMDA0MGNvZGVfMDA3YnN0cmZ0aW1lXzAwN2Qtb3ItXzAwNDBjb2RlXzAwN2JzdHJmbW9uXzAwN2Qtc3R5bGUtYXJndW1lbnRzLTI1NzMiPjwvYT48YSBuYW1lPSJpbmRleC1mdW5jdGlvbnMtd2l0aC1ub25fMDAyZG51bGwtcG9pbnRlci1hcmd1bWVudHMtMjU3NCI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9ucy10aGF0LWFyZS1wYXNzZWQtYXJndW1lbnRzLWluLXJlZ2lzdGVycy1vbi10aGUtMzg2LTI1NzUiPjwvYT48YSBuYW1lPSJpbmRleC1mdW5jdGlvbnMtdGhhdC1wb3AtdGhlLWFyZ3VtZW50LXN0YWNrLW9uLXRoZS0zODYtMjU3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9ucy10aGF0LWRvLW5vdC1wb3AtdGhlLWFyZ3VtZW50LXN0YWNrLW9uLXRoZS0zODYtMjU3NyI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9ucy10aGF0LWhhdmUtZGlmZmVyZW50LWNvbXBpbGF0aW9uLW9wdGlvbnMtb24tdGhlLTM4Ni0yNTc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25zLXRoYXQtaGF2ZS1kaWZmZXJlbnQtb3B0aW1pemF0aW9uLW9wdGlvbnMtMjU3OSI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9ucy10aGF0LWFyZS1keW5hbWljYWxseS1yZXNvbHZlZC0yNTgwIj48L2E+CitJbiBHTlUgQywgeW91IGRlY2xhcmUgY2VydGFpbiB0aGluZ3MgYWJvdXQgZnVuY3Rpb25zIGNhbGxlZCBpbiB5b3VyIHByb2dyYW0KK3doaWNoIGhlbHAgdGhlIGNvbXBpbGVyIG9wdGltaXplIGZ1bmN0aW9uIGNhbGxzIGFuZCBjaGVjayB5b3VyIGNvZGUgbW9yZQorY2FyZWZ1bGx5LgorCisgPHA+VGhlIGtleXdvcmQgPGNvZGU+X19hdHRyaWJ1dGVfXzwvY29kZT4gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHNwZWNpYWwKK2F0dHJpYnV0ZXMgd2hlbiBtYWtpbmcgYSBkZWNsYXJhdGlvbi4gIFRoaXMga2V5d29yZCBpcyBmb2xsb3dlZCBieSBhbgorYXR0cmlidXRlIHNwZWNpZmljYXRpb24gaW5zaWRlIGRvdWJsZSBwYXJlbnRoZXNlcy4gIFRoZSBmb2xsb3dpbmcKK2F0dHJpYnV0ZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGZvciBmdW5jdGlvbnMgb24gYWxsIHRhcmdldHM6Cis8Y29kZT5hbGlnbmVkPC9jb2RlPiwgPGNvZGU+YWxsb2Nfc2l6ZTwvY29kZT4sIDxjb2RlPm5vcmV0dXJuPC9jb2RlPiwKKzxjb2RlPnJldHVybnNfdHdpY2U8L2NvZGU+LCA8Y29kZT5ub2lubGluZTwvY29kZT4sIDxjb2RlPm5vY2xvbmU8L2NvZGU+LAorPGNvZGU+YWx3YXlzX2lubGluZTwvY29kZT4sIDxjb2RlPmZsYXR0ZW48L2NvZGU+LCA8Y29kZT5wdXJlPC9jb2RlPiwgPGNvZGU+Y29uc3Q8L2NvZGU+LAorPGNvZGU+bm90aHJvdzwvY29kZT4sIDxjb2RlPnNlbnRpbmVsPC9jb2RlPiwgPGNvZGU+Zm9ybWF0PC9jb2RlPiwgPGNvZGU+Zm9ybWF0X2FyZzwvY29kZT4sCis8Y29kZT5ub19pbnN0cnVtZW50X2Z1bmN0aW9uPC9jb2RlPiwgPGNvZGU+bm9fc3BsaXRfc3RhY2s8L2NvZGU+LAorPGNvZGU+c2VjdGlvbjwvY29kZT4sIDxjb2RlPmNvbnN0cnVjdG9yPC9jb2RlPiwKKzxjb2RlPmRlc3RydWN0b3I8L2NvZGU+LCA8Y29kZT51c2VkPC9jb2RlPiwgPGNvZGU+dW51c2VkPC9jb2RlPiwgPGNvZGU+ZGVwcmVjYXRlZDwvY29kZT4sCis8Y29kZT53ZWFrPC9jb2RlPiwgPGNvZGU+bWFsbG9jPC9jb2RlPiwgPGNvZGU+YWxpYXM8L2NvZGU+LCA8Y29kZT5pZnVuYzwvY29kZT4sCis8Y29kZT53YXJuX3VudXNlZF9yZXN1bHQ8L2NvZGU+LCA8Y29kZT5ub25udWxsPC9jb2RlPiwgPGNvZGU+Z251X2lubGluZTwvY29kZT4sCis8Y29kZT5leHRlcm5hbGx5X3Zpc2libGU8L2NvZGU+LCA8Y29kZT5ob3Q8L2NvZGU+LCA8Y29kZT5jb2xkPC9jb2RlPiwgPGNvZGU+YXJ0aWZpY2lhbDwvY29kZT4sCis8Y29kZT5ub19zYW5pdGl6ZV9hZGRyZXNzPC9jb2RlPiwgPGNvZGU+bm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXM8L2NvZGU+LAorPGNvZGU+ZXJyb3I8L2NvZGU+IGFuZCA8Y29kZT53YXJuaW5nPC9jb2RlPi4gCitTZXZlcmFsIG90aGVyIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgZm9yIGZ1bmN0aW9ucyBvbiBwYXJ0aWN1bGFyCit0YXJnZXQgc3lzdGVtcy4gIE90aGVyIGF0dHJpYnV0ZXMsIGluY2x1ZGluZyA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhcmUKK3N1cHBvcnRlZCBmb3IgdmFyaWFibGVzIGRlY2xhcmF0aW9ucyAoc2VlIDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPikKK2FuZCBmb3IgdHlwZXMgKHNlZSA8YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPlR5cGUgQXR0cmlidXRlczwvYT4pLgorCisgPHA+R0NDIHBsdWdpbnMgbWF5IHByb3ZpZGUgdGhlaXIgb3duIGF0dHJpYnV0ZXMuCisKKyA8cD5Zb3UgbWF5IGFsc28gc3BlY2lmeSBhdHRyaWJ1dGVzIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fXzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmVjZWRpbmcgYW5kIGZvbGxvd2luZworZWFjaCBrZXl3b3JkLiAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGVtIGluIGhlYWRlciBmaWxlcyB3aXRob3V0CitiZWluZyBjb25jZXJuZWQgYWJvdXQgYSBwb3NzaWJsZSBtYWNybyBvZiB0aGUgc2FtZSBuYW1lLiAgRm9yIGV4YW1wbGUsCit5b3UgbWF5IHVzZSA8Y29kZT5fX25vcmV0dXJuX188L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+bm9yZXR1cm48L2NvZGU+LgorCisgPHA+U2VlIDxhIGhyZWY9IkF0dHJpYnV0ZS1TeW50YXguaHRtbCNBdHRyaWJ1dGUtU3ludGF4Ij5BdHRyaWJ1dGUgU3ludGF4PC9hPiwgZm9yIGRldGFpbHMgb2YgdGhlIGV4YWN0IHN5bnRheCBmb3IgdXNpbmcKK2F0dHJpYnV0ZXMuCisKKyAgICAgPGRsPgorPCEtLSBLZWVwIHRoaXMgdGFibGUgYWxwaGFiZXRpemVkIGJ5IGF0dHJpYnV0ZSBuYW1lLiAgVHJlYXQgXyBhcyBzcGFjZS4gLS0+CisKKyAgICAgPGR0Pjxjb2RlPmFsaWFzICgiPC9jb2RlPjx2YXI+dGFyZ2V0PC92YXI+PGNvZGU+Iik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxpYXNfMDA3ZC1hdHRyaWJ1dGUtMjU4MSI+PC9hPlRoZSA8Y29kZT5hbGlhczwvY29kZT4gYXR0cmlidXRlIGNhdXNlcyB0aGUgZGVjbGFyYXRpb24gdG8gYmUgZW1pdHRlZCBhcyBhbgorYWxpYXMgZm9yIGFub3RoZXIgc3ltYm9sLCB3aGljaCBtdXN0IGJlIHNwZWNpZmllZC4gIEZvciBpbnN0YW5jZSwKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB2b2lkIF9fZiAoKSB7IC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+RG8gc29tZXRoaW5nLjwvc3Bhbj4gKi87IH0KKyAgICAgICAgICB2b2lkIGYgKCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzICgiX19mIikpKTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmRlZmluZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGJlIGEgd2VhayBhbGlhcyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX2Y8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJbiBDKyssIHRoZQorbWFuZ2xlZCBuYW1lIGZvciB0aGUgdGFyZ2V0IG11c3QgYmUgdXNlZC4gIEl0IGlzIGFuIGVycm9yIGlmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19mPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpcyBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSB0cmFuc2xhdGlvbiB1bml0LgorCisgICAgIDxwPk5vdCBhbGwgdGFyZ2V0IG1hY2hpbmVzIHN1cHBvcnQgdGhpcyBhdHRyaWJ1dGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5hbGlnbmVkICg8L2NvZGU+PHZhcj5hbGlnbm1lbnQ8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFsaWduZWRfMDA3ZC1hdHRyaWJ1dGUtMjU4MiI+PC9hPlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIG1pbmltdW0gYWxpZ25tZW50IGZvciB0aGUgZnVuY3Rpb24sCittZWFzdXJlZCBpbiBieXRlcy4KKworICAgICA8cD5Zb3UgY2Fubm90IHVzZSB0aGlzIGF0dHJpYnV0ZSB0byBkZWNyZWFzZSB0aGUgYWxpZ25tZW50IG9mIGEgZnVuY3Rpb24sCitvbmx5IHRvIGluY3JlYXNlIGl0LiAgSG93ZXZlciwgd2hlbiB5b3UgZXhwbGljaXRseSBzcGVjaWZ5IGEgZnVuY3Rpb24KK2FsaWdubWVudCB0aGlzIG92ZXJyaWRlcyB0aGUgZWZmZWN0IG9mIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZhbGlnbi1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPiAoc2VlIDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPikgb3B0aW9uIGZvciB0aGlzCitmdW5jdGlvbi4KKworICAgICA8cD5Ob3RlIHRoYXQgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgPGNvZGU+YWxpZ25lZDwvY29kZT4gYXR0cmlidXRlcyBtYXkgYmUKK2xpbWl0ZWQgYnkgaW5oZXJlbnQgbGltaXRhdGlvbnMgaW4geW91ciBsaW5rZXIuICBPbiBtYW55IHN5c3RlbXMsIHRoZQorbGlua2VyIGlzIG9ubHkgYWJsZSB0byBhcnJhbmdlIGZvciBmdW5jdGlvbnMgdG8gYmUgYWxpZ25lZCB1cCB0byBhCitjZXJ0YWluIG1heGltdW0gYWxpZ25tZW50LiAgKEZvciBzb21lIGxpbmtlcnMsIHRoZSBtYXhpbXVtIHN1cHBvcnRlZAorYWxpZ25tZW50IG1heSBiZSB2ZXJ5IHZlcnkgc21hbGwuKSAgU2VlIHlvdXIgbGlua2VyIGRvY3VtZW50YXRpb24gZm9yCitmdXJ0aGVyIGluZm9ybWF0aW9uLgorCisgICAgIDxwPlRoZSA8Y29kZT5hbGlnbmVkPC9jb2RlPiBhdHRyaWJ1dGUgY2FuIGFsc28gYmUgdXNlZCBmb3IgdmFyaWFibGVzIGFuZCBmaWVsZHMKKyhzZWUgPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+LikKKworICAgICA8YnI+PGR0Pjxjb2RlPmFsbG9jX3NpemU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxsb2NfMDA1ZnNpemVfMDA3ZC1hdHRyaWJ1dGUtMjU4MyI+PC9hPlRoZSA8Y29kZT5hbGxvY19zaXplPC9jb2RlPiBhdHRyaWJ1dGUgaXMgdXNlZCB0byB0ZWxsIHRoZSBjb21waWxlciB0aGF0IHRoZQorZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHBvaW50cyB0byBtZW1vcnksIHdoZXJlIHRoZSBzaXplIGlzIGdpdmVuIGJ5CitvbmUgb3IgdHdvIG9mIHRoZSBmdW5jdGlvbnMgcGFyYW1ldGVycy4gIEdDQyB1c2VzIHRoaXMKK2luZm9ybWF0aW9uIHRvIGltcHJvdmUgdGhlIGNvcnJlY3RuZXNzIG9mIDxjb2RlPl9fYnVpbHRpbl9vYmplY3Rfc2l6ZTwvY29kZT4uCisKKyAgICAgPHA+VGhlIGZ1bmN0aW9uIHBhcmFtZXRlcihzKSBkZW5vdGluZyB0aGUgYWxsb2NhdGVkIHNpemUgYXJlIHNwZWNpZmllZCBieQorb25lIG9yIHR3byBpbnRlZ2VyIGFyZ3VtZW50cyBzdXBwbGllZCB0byB0aGUgYXR0cmlidXRlLiAgVGhlIGFsbG9jYXRlZCBzaXplCitpcyBlaXRoZXIgdGhlIHZhbHVlIG9mIHRoZSBzaW5nbGUgZnVuY3Rpb24gYXJndW1lbnQgc3BlY2lmaWVkIG9yIHRoZSBwcm9kdWN0CitvZiB0aGUgdHdvIGZ1bmN0aW9uIGFyZ3VtZW50cyBzcGVjaWZpZWQuICBBcmd1bWVudCBudW1iZXJpbmcgc3RhcnRzIGF0CitvbmUuCisKKyAgICAgPHA+Rm9yIGluc3RhbmNlLAorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHZvaWQqIG15X2NhbGxvYyhzaXplX3QsIHNpemVfdCkgX19hdHRyaWJ1dGVfXygoYWxsb2Nfc2l6ZSgxLDIpKSkKKyAgICAgICAgICB2b2lkIG15X3JlYWxsb2Modm9pZCosIHNpemVfdCkgX19hdHRyaWJ1dGVfXygoYWxsb2Nfc2l6ZSgyKSkpCis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5kZWNsYXJlcyB0aGF0IDxjb2RlPm15X2NhbGxvYzwvY29kZT4gcmV0dXJucyBtZW1vcnkgb2YgdGhlIHNpemUgZ2l2ZW4gYnkKK3RoZSBwcm9kdWN0IG9mIHBhcmFtZXRlciAxIGFuZCAyIGFuZCB0aGF0IDxjb2RlPm15X3JlYWxsb2M8L2NvZGU+IHJldHVybnMgbWVtb3J5CitvZiB0aGUgc2l6ZSBnaXZlbiBieSBwYXJhbWV0ZXIgMi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmFsd2F5c19pbmxpbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYWx3YXlzXzAwNWZpbmxpbmVfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjU4NCI+PC9hPkdlbmVyYWxseSwgZnVuY3Rpb25zIGFyZSBub3QgaW5saW5lZCB1bmxlc3Mgb3B0aW1pemF0aW9uIGlzIHNwZWNpZmllZC4gCitGb3IgZnVuY3Rpb25zIGRlY2xhcmVkIGlubGluZSwgdGhpcyBhdHRyaWJ1dGUgaW5saW5lcyB0aGUgZnVuY3Rpb24gZXZlbgoraWYgbm8gb3B0aW1pemF0aW9uIGxldmVsIGlzIHNwZWNpZmllZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmdudV9pbmxpbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZ251XzAwNWZpbmxpbmVfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjU4NSI+PC9hPlRoaXMgYXR0cmlidXRlIHNob3VsZCBiZSB1c2VkIHdpdGggYSBmdW5jdGlvbiB0aGF0IGlzIGFsc28gZGVjbGFyZWQKK3dpdGggdGhlIDxjb2RlPmlubGluZTwvY29kZT4ga2V5d29yZC4gIEl0IGRpcmVjdHMgR0NDIHRvIHRyZWF0IHRoZSBmdW5jdGlvbgorYXMgaWYgaXQgd2VyZSBkZWZpbmVkIGluIGdudTkwIG1vZGUgZXZlbiB3aGVuIGNvbXBpbGluZyBpbiBDOTkgb3IKK2dudTk5IG1vZGUuCisKKyAgICAgPHA+SWYgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIDxjb2RlPmV4dGVybjwvY29kZT4sIHRoZW4gdGhpcyBkZWZpbml0aW9uIG9mIHRoZQorZnVuY3Rpb24gaXMgdXNlZCBvbmx5IGZvciBpbmxpbmluZy4gIEluIG5vIGNhc2UgaXMgdGhlIGZ1bmN0aW9uCitjb21waWxlZCBhcyBhIHN0YW5kYWxvbmUgZnVuY3Rpb24sIG5vdCBldmVuIGlmIHlvdSB0YWtlIGl0cyBhZGRyZXNzCitleHBsaWNpdGx5LiAgU3VjaCBhbiBhZGRyZXNzIGJlY29tZXMgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlLCBhcyBpZiB5b3UKK2hhZCBvbmx5IGRlY2xhcmVkIHRoZSBmdW5jdGlvbiwgYW5kIGhhZCBub3QgZGVmaW5lZCBpdC4gIFRoaXMgaGFzCithbG1vc3QgdGhlIGVmZmVjdCBvZiBhIG1hY3JvLiAgVGhlIHdheSB0byB1c2UgdGhpcyBpcyB0byBwdXQgYQorZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBhIGhlYWRlciBmaWxlIHdpdGggdGhpcyBhdHRyaWJ1dGUsIGFuZCBwdXQKK2Fub3RoZXIgY29weSBvZiB0aGUgZnVuY3Rpb24sIHdpdGhvdXQgPGNvZGU+ZXh0ZXJuPC9jb2RlPiwgaW4gYSBsaWJyYXJ5CitmaWxlLiAgVGhlIGRlZmluaXRpb24gaW4gdGhlIGhlYWRlciBmaWxlIGNhdXNlcyBtb3N0IGNhbGxzIHRvIHRoZQorZnVuY3Rpb24gdG8gYmUgaW5saW5lZC4gIElmIGFueSB1c2VzIG9mIHRoZSBmdW5jdGlvbiByZW1haW4sIHRoZXkKK3JlZmVyIHRvIHRoZSBzaW5nbGUgY29weSBpbiB0aGUgbGlicmFyeS4gIE5vdGUgdGhhdCB0aGUgdHdvCitkZWZpbml0aW9ucyBvZiB0aGUgZnVuY3Rpb25zIG5lZWQgbm90IGJlIHByZWNpc2VseSB0aGUgc2FtZSwgYWx0aG91Z2gKK2lmIHRoZXkgZG8gbm90IGhhdmUgdGhlIHNhbWUgZWZmZWN0IHlvdXIgcHJvZ3JhbSBtYXkgYmVoYXZlIG9kZGx5LgorCisgICAgIDxwPkluIEMsIGlmIHRoZSBmdW5jdGlvbiBpcyBuZWl0aGVyIDxjb2RlPmV4dGVybjwvY29kZT4gbm9yIDxjb2RlPnN0YXRpYzwvY29kZT4sIHRoZW4KK3RoZSBmdW5jdGlvbiBpcyBjb21waWxlZCBhcyBhIHN0YW5kYWxvbmUgZnVuY3Rpb24sIGFzIHdlbGwgYXMgYmVpbmcKK2lubGluZWQgd2hlcmUgcG9zc2libGUuCisKKyAgICAgPHA+VGhpcyBpcyBob3cgR0NDIHRyYWRpdGlvbmFsbHkgaGFuZGxlZCBmdW5jdGlvbnMgZGVjbGFyZWQKKzxjb2RlPmlubGluZTwvY29kZT4uICBTaW5jZSBJU08gQzk5IHNwZWNpZmllcyBhIGRpZmZlcmVudCBzZW1hbnRpY3MgZm9yCis8Y29kZT5pbmxpbmU8L2NvZGU+LCB0aGlzIGZ1bmN0aW9uIGF0dHJpYnV0ZSBpcyBwcm92aWRlZCBhcyBhIHRyYW5zaXRpb24KK21lYXN1cmUgYW5kIGFzIGEgdXNlZnVsIGZlYXR1cmUgaW4gaXRzIG93biByaWdodC4gIFRoaXMgYXR0cmlidXRlIGlzCithdmFpbGFibGUgaW4gR0NDIDQuMS4zIGFuZCBsYXRlci4gIEl0IGlzIGF2YWlsYWJsZSBpZiBlaXRoZXIgb2YgdGhlCitwcmVwcm9jZXNzb3IgbWFjcm9zIDxjb2RlPl9fR05VQ19HTlVfSU5MSU5FX188L2NvZGU+IG9yCis8Y29kZT5fX0dOVUNfU1REQ19JTkxJTkVfXzwvY29kZT4gYXJlIGRlZmluZWQuICBTZWUgPGEgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIj5BbiBJbmxpbmUgRnVuY3Rpb24gaXMgQXMgRmFzdCBBcyBhIE1hY3JvPC9hPi4KKworICAgICA8cD5JbiBDKyssIHRoaXMgYXR0cmlidXRlIGRvZXMgbm90IGRlcGVuZCBvbiA8Y29kZT5leHRlcm48L2NvZGU+IGluIGFueSB3YXksCitidXQgaXQgc3RpbGwgcmVxdWlyZXMgdGhlIDxjb2RlPmlubGluZTwvY29kZT4ga2V5d29yZCB0byBlbmFibGUgaXRzIHNwZWNpYWwKK2JlaGF2aW9yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+YXJ0aWZpY2lhbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhcnRpZmljaWFsXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI1ODYiPjwvYT5UaGlzIGF0dHJpYnV0ZSBpcyB1c2VmdWwgZm9yIHNtYWxsIGlubGluZSB3cmFwcGVycyB0aGF0IGlmIHBvc3NpYmxlCitzaG91bGQgYXBwZWFyIGR1cmluZyBkZWJ1Z2dpbmcgYXMgYSB1bml0LiAgRGVwZW5kaW5nIG9uIHRoZSBkZWJ1ZworaW5mbyBmb3JtYXQgaXQgZWl0aGVyIG1lYW5zIG1hcmtpbmcgdGhlIGZ1bmN0aW9uIGFzIGFydGlmaWNpYWwKK29yIHVzaW5nIHRoZSBjYWxsZXIgbG9jYXRpb24gZm9yIGFsbCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoZSBpbmxpbmVkCitib2R5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+YmFua19zd2l0Y2g8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWludGVycnVwdC1oYW5kbGVyLWZ1bmN0aW9ucy0yNTg3Ij48L2E+V2hlbiBhZGRlZCB0byBhbiBpbnRlcnJ1cHQgaGFuZGxlciB3aXRoIHRoZSBNMzJDIHBvcnQsIGNhdXNlcyB0aGUKK3Byb2xvZ3VlIGFuZCBlcGlsb2d1ZSB0byB1c2UgYmFuayBzd2l0Y2hpbmcgdG8gcHJlc2VydmUgdGhlIHJlZ2lzdGVycworcmF0aGVyIHRoYW4gc2F2aW5nIHRoZW0gb24gdGhlIHN0YWNrLgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZmxhdHRlbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbGF0dGVuXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI1ODgiPjwvYT5HZW5lcmFsbHksIGlubGluaW5nIGludG8gYSBmdW5jdGlvbiBpcyBsaW1pdGVkLiAgRm9yIGEgZnVuY3Rpb24gbWFya2VkIHdpdGgKK3RoaXMgYXR0cmlidXRlLCBldmVyeSBjYWxsIGluc2lkZSB0aGlzIGZ1bmN0aW9uIGlzIGlubGluZWQsIGlmIHBvc3NpYmxlLiAKK1doZXRoZXIgdGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBjb25zaWRlcmVkIGZvciBpbmxpbmluZyBkZXBlbmRzIG9uIGl0cyBzaXplIGFuZAordGhlIGN1cnJlbnQgaW5saW5pbmcgcGFyYW1ldGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmVycm9yICgiPC9jb2RlPjx2YXI+bWVzc2FnZTwvdmFyPjxjb2RlPiIpPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVycm9yXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI1ODkiPjwvYT5JZiB0aGlzIGF0dHJpYnV0ZSBpcyB1c2VkIG9uIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIGEgY2FsbCB0byBzdWNoIGEgZnVuY3Rpb24KK2lzIG5vdCBlbGltaW5hdGVkIHRocm91Z2ggZGVhZCBjb2RlIGVsaW1pbmF0aW9uIG9yIG90aGVyIG9wdGltaXphdGlvbnMsIGFuIGVycm9yCit0aGF0IGluY2x1ZGVzIDx2YXI+bWVzc2FnZTwvdmFyPiBpcyBkaWFnbm9zZWQuICBUaGlzIGlzIHVzZWZ1bAorZm9yIGNvbXBpbGUtdGltZSBjaGVja2luZywgZXNwZWNpYWxseSB0b2dldGhlciB3aXRoIDxjb2RlPl9fYnVpbHRpbl9jb25zdGFudF9wPC9jb2RlPgorYW5kIGlubGluZSBmdW5jdGlvbnMgd2hlcmUgY2hlY2tpbmcgdGhlIGlubGluZSBmdW5jdGlvbiBhcmd1bWVudHMgaXMgbm90Citwb3NzaWJsZSB0aHJvdWdoIDxjb2RlPmV4dGVybiBjaGFyIFsoY29uZGl0aW9uKSA/IDEgOiAtMV07PC9jb2RlPiB0cmlja3MuIAorV2hpbGUgaXQgaXMgcG9zc2libGUgdG8gbGVhdmUgdGhlIGZ1bmN0aW9uIHVuZGVmaW5lZCBhbmQgdGh1cyBpbnZva2UKK2EgbGluayBmYWlsdXJlLCB3aGVuIHVzaW5nIHRoaXMgYXR0cmlidXRlIHRoZSBwcm9ibGVtIGlzIGRpYWdub3NlZAorZWFybGllciBhbmQgd2l0aCBleGFjdCBsb2NhdGlvbiBvZiB0aGUgY2FsbCBldmVuIGluIHByZXNlbmNlIG9mIGlubGluZQorZnVuY3Rpb25zIG9yIHdoZW4gbm90IGVtaXR0aW5nIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPndhcm5pbmcgKCI8L2NvZGU+PHZhcj5tZXNzYWdlPC92YXI+PGNvZGU+Iik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdid2FybmluZ18wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTkwIj48L2E+SWYgdGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBvbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBhIGNhbGwgdG8gc3VjaCBhIGZ1bmN0aW9uCitpcyBub3QgZWxpbWluYXRlZCB0aHJvdWdoIGRlYWQgY29kZSBlbGltaW5hdGlvbiBvciBvdGhlciBvcHRpbWl6YXRpb25zLCBhIHdhcm5pbmcKK3RoYXQgaW5jbHVkZXMgPHZhcj5tZXNzYWdlPC92YXI+IGlzIGRpYWdub3NlZC4gIFRoaXMgaXMgdXNlZnVsCitmb3IgY29tcGlsZS10aW1lIGNoZWNraW5nLCBlc3BlY2lhbGx5IHRvZ2V0aGVyIHdpdGggPGNvZGU+X19idWlsdGluX2NvbnN0YW50X3A8L2NvZGU+CithbmQgaW5saW5lIGZ1bmN0aW9ucy4gIFdoaWxlIGl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgZnVuY3Rpb24gd2l0aAorYSBtZXNzYWdlIGluIDxjb2RlPi5nbnUud2FybmluZyo8L2NvZGU+IHNlY3Rpb24sIHdoZW4gdXNpbmcgdGhpcyBhdHRyaWJ1dGUgdGhlIHByb2JsZW0KK2lzIGRpYWdub3NlZCBlYXJsaWVyIGFuZCB3aXRoIGV4YWN0IGxvY2F0aW9uIG9mIHRoZSBjYWxsIGV2ZW4gaW4gcHJlc2VuY2UKK29mIGlubGluZSBmdW5jdGlvbnMgb3Igd2hlbiBub3QgZW1pdHRpbmcgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2RlY2w8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9ucy10aGF0LWRvLXBvcC10aGUtYXJndW1lbnQtc3RhY2stb24tdGhlLTM4Ni0yNTkxIj48L2E+PGEgbmFtZT0iaW5kZXgtbXJ0ZC0yNTkyIj48L2E+T24gdGhlIEludGVsIDM4NiwgdGhlIDxjb2RlPmNkZWNsPC9jb2RlPiBhdHRyaWJ1dGUgY2F1c2VzIHRoZSBjb21waWxlciB0bworYXNzdW1lIHRoYXQgdGhlIGNhbGxpbmcgZnVuY3Rpb24gcG9wcyBvZmYgdGhlIHN0YWNrIHNwYWNlIHVzZWQgdG8KK3Bhc3MgYXJndW1lbnRzLiAgVGhpcyBpcwordXNlZnVsIHRvIG92ZXJyaWRlIHRoZSBlZmZlY3RzIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJ0ZDwvc3Bhbj48L3NhbXA+IHN3aXRjaC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNvbnN0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNvbnN0XzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI1OTMiPjwvYT5NYW55IGZ1bmN0aW9ucyBkbyBub3QgZXhhbWluZSBhbnkgdmFsdWVzIGV4Y2VwdCB0aGVpciBhcmd1bWVudHMsIGFuZAoraGF2ZSBubyBlZmZlY3RzIGV4Y2VwdCB0aGUgcmV0dXJuIHZhbHVlLiAgQmFzaWNhbGx5IHRoaXMgaXMganVzdCBzbGlnaHRseQorbW9yZSBzdHJpY3QgY2xhc3MgdGhhbiB0aGUgPGNvZGU+cHVyZTwvY29kZT4gYXR0cmlidXRlIGJlbG93LCBzaW5jZSBmdW5jdGlvbiBpcyBub3QKK2FsbG93ZWQgdG8gcmVhZCBnbG9iYWwgbWVtb3J5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXBvaW50ZXItYXJndW1lbnRzLTI1OTQiPjwvYT5Ob3RlIHRoYXQgYSBmdW5jdGlvbiB0aGF0IGhhcyBwb2ludGVyIGFyZ3VtZW50cyBhbmQgZXhhbWluZXMgdGhlIGRhdGEKK3BvaW50ZWQgdG8gbXVzdCA8ZW0+bm90PC9lbT4gYmUgZGVjbGFyZWQgPGNvZGU+Y29uc3Q8L2NvZGU+LiAgTGlrZXdpc2UsIGEKK2Z1bmN0aW9uIHRoYXQgY2FsbHMgYSBub24tPGNvZGU+Y29uc3Q8L2NvZGU+IGZ1bmN0aW9uIHVzdWFsbHkgbXVzdCBub3QgYmUKKzxjb2RlPmNvbnN0PC9jb2RlPi4gIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIGEgPGNvZGU+Y29uc3Q8L2NvZGU+IGZ1bmN0aW9uIHRvCityZXR1cm4gPGNvZGU+dm9pZDwvY29kZT4uCisKKyAgICAgPHA+VGhlIGF0dHJpYnV0ZSA8Y29kZT5jb25zdDwvY29kZT4gaXMgbm90IGltcGxlbWVudGVkIGluIEdDQyB2ZXJzaW9ucyBlYXJsaWVyCit0aGFuIDIuNS4gIEFuIGFsdGVybmF0aXZlIHdheSB0byBkZWNsYXJlIHRoYXQgYSBmdW5jdGlvbiBoYXMgbm8gc2lkZQorZWZmZWN0cywgd2hpY2ggd29ya3MgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBhbmQgaW4gc29tZSBvbGRlciB2ZXJzaW9ucywKK2lzIGFzIGZvbGxvd3M6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdHlwZWRlZiBpbnQgaW50Zm4gKCk7CisgICAgICAgICAgCisgICAgICAgICAgZXh0ZXJuIGNvbnN0IGludGZuIHNxdWFyZTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yayBpbiBHTlUgQysrIGZyb20gMi42LjAgb24sIHNpbmNlIHRoZSBsYW5ndWFnZQorc3BlY2lmaWVzIHRoYXQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29uc3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbXVzdCBiZSBhdHRhY2hlZCB0byB0aGUgcmV0dXJuIHZhbHVlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y29uc3RydWN0b3I8L2NvZGU+PGR0Pjxjb2RlPmRlc3RydWN0b3I8L2NvZGU+PGR0Pjxjb2RlPmNvbnN0cnVjdG9yICg8L2NvZGU+PHZhcj5wcmlvcml0eTwvdmFyPjxjb2RlPik8L2NvZGU+PGR0Pjxjb2RlPmRlc3RydWN0b3IgKDwvY29kZT48dmFyPnByaW9yaXR5PC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb25zdHJ1Y3Rvcl8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkZXN0cnVjdG9yXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI1OTYiPjwvYT5UaGUgPGNvZGU+Y29uc3RydWN0b3I8L2NvZGU+IGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZAorYXV0b21hdGljYWxseSBiZWZvcmUgZXhlY3V0aW9uIGVudGVycyA8Y29kZT5tYWluICgpPC9jb2RlPi4gIFNpbWlsYXJseSwgdGhlCis8Y29kZT5kZXN0cnVjdG9yPC9jb2RlPiBhdHRyaWJ1dGUgY2F1c2VzIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQKK2F1dG9tYXRpY2FsbHkgYWZ0ZXIgPGNvZGU+bWFpbiAoKTwvY29kZT4gY29tcGxldGVzIG9yIDxjb2RlPmV4aXQgKCk8L2NvZGU+IGlzCitjYWxsZWQuICBGdW5jdGlvbnMgd2l0aCB0aGVzZSBhdHRyaWJ1dGVzIGFyZSB1c2VmdWwgZm9yCitpbml0aWFsaXppbmcgZGF0YSB0aGF0IGlzIHVzZWQgaW1wbGljaXRseSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZgordGhlIHByb2dyYW0uCisKKyAgICAgPHA+WW91IG1heSBwcm92aWRlIGFuIG9wdGlvbmFsIGludGVnZXIgcHJpb3JpdHkgdG8gY29udHJvbCB0aGUgb3JkZXIgaW4KK3doaWNoIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGZ1bmN0aW9ucyBhcmUgcnVuLiAgQSBjb25zdHJ1Y3Rvcgord2l0aCBhIHNtYWxsZXIgcHJpb3JpdHkgbnVtYmVyIHJ1bnMgYmVmb3JlIGEgY29uc3RydWN0b3Igd2l0aCBhIGxhcmdlcgorcHJpb3JpdHkgbnVtYmVyOyB0aGUgb3Bwb3NpdGUgcmVsYXRpb25zaGlwIGhvbGRzIGZvciBkZXN0cnVjdG9ycy4gIFNvLAoraWYgeW91IGhhdmUgYSBjb25zdHJ1Y3RvciB0aGF0IGFsbG9jYXRlcyBhIHJlc291cmNlIGFuZCBhIGRlc3RydWN0b3IKK3RoYXQgZGVhbGxvY2F0ZXMgdGhlIHNhbWUgcmVzb3VyY2UsIGJvdGggZnVuY3Rpb25zIHR5cGljYWxseSBoYXZlIHRoZQorc2FtZSBwcmlvcml0eS4gIFRoZSBwcmlvcml0aWVzIGZvciBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvcgorZnVuY3Rpb25zIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBzcGVjaWZpZWQgZm9yIG5hbWVzcGFjZS1zY29wZSBDKysKK29iamVjdHMgKHNlZSA8YSBocmVmPSJDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzLmh0bWwjQ18wMDJiXzAwMmItQXR0cmlidXRlcyI+QysrIEF0dHJpYnV0ZXM8L2E+KS4KKworICAgICA8cD5UaGVzZSBhdHRyaWJ1dGVzIGFyZSBub3QgY3VycmVudGx5IGltcGxlbWVudGVkIGZvciBPYmplY3RpdmUtQy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmRlcHJlY2F0ZWQ8L2NvZGU+PGR0Pjxjb2RlPmRlcHJlY2F0ZWQgKDwvY29kZT48dmFyPm1zZzwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZGVwcmVjYXRlZF8wMDdkLWF0dHJpYnV0ZV8wMDJlLTI1OTciPjwvYT5UaGUgPGNvZGU+ZGVwcmVjYXRlZDwvY29kZT4gYXR0cmlidXRlIHJlc3VsdHMgaW4gYSB3YXJuaW5nIGlmIHRoZSBmdW5jdGlvbgoraXMgdXNlZCBhbnl3aGVyZSBpbiB0aGUgc291cmNlIGZpbGUuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGlkZW50aWZ5aW5nCitmdW5jdGlvbnMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIGEKK3Byb2dyYW0uICBUaGUgd2FybmluZyBhbHNvIGluY2x1ZGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGVjbGFyYXRpb24KK29mIHRoZSBkZXByZWNhdGVkIGZ1bmN0aW9uLCB0byBlbmFibGUgdXNlcnMgdG8gZWFzaWx5IGZpbmQgZnVydGhlcgoraW5mb3JtYXRpb24gYWJvdXQgd2h5IHRoZSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBvciB3aGF0IHRoZXkgc2hvdWxkCitkbyBpbnN0ZWFkLiAgTm90ZSB0aGF0IHRoZSB3YXJuaW5ncyBvbmx5IG9jY3VycyBmb3IgdXNlczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBpbnQgb2xkX2ZuICgpIF9fYXR0cmlidXRlX18gKChkZXByZWNhdGVkKSk7CisgICAgICAgICAgaW50IG9sZF9mbiAoKTsKKyAgICAgICAgICBpbnQgKCpmbl9wdHIpKCkgPSBvbGRfZm47Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5yZXN1bHRzIGluIGEgd2FybmluZyBvbiBsaW5lIDMgYnV0IG5vdCBsaW5lIDIuICBUaGUgb3B0aW9uYWwgPHZhcj5tc2c8L3Zhcj4KK2FyZ3VtZW50LCB3aGljaCBtdXN0IGJlIGEgc3RyaW5nLCBpcyBwcmludGVkIGluIHRoZSB3YXJuaW5nIGlmCitwcmVzZW50LgorCisgICAgIDxwPlRoZSA8Y29kZT5kZXByZWNhdGVkPC9jb2RlPiBhdHRyaWJ1dGUgY2FuIGFsc28gYmUgdXNlZCBmb3IgdmFyaWFibGVzIGFuZAordHlwZXMgKHNlZSA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT4sIHNlZSA8YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPlR5cGUgQXR0cmlidXRlczwvYT4uKQorCisgICAgIDxicj48ZHQ+PGNvZGU+ZGlzaW50ZXJydXB0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRpc2ludGVycnVwdF8wMDdkLWF0dHJpYnV0ZS0yNTk4Ij48L2E+T24gRXBpcGhhbnkgYW5kIE1lUCB0YXJnZXRzLCB0aGlzIGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGVtaXQKK2luc3RydWN0aW9ucyB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZ2l2ZW4KK2Z1bmN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZGxsZXhwb3J0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZkZWNsc3BlY18wMDI4ZGxsZXhwb3J0XzAwMjlfMDA3ZC0yNTk5Ij48L2E+T24gTWljcm9zb2Z0IFdpbmRvd3MgdGFyZ2V0cyBhbmQgU3ltYmlhbiBPUyB0YXJnZXRzIHRoZQorPGNvZGU+ZGxsZXhwb3J0PC9jb2RlPiBhdHRyaWJ1dGUgY2F1c2VzIHRoZSBjb21waWxlciB0byBwcm92aWRlIGEgZ2xvYmFsCitwb2ludGVyIHRvIGEgcG9pbnRlciBpbiBhIERMTCwgc28gdGhhdCBpdCBjYW4gYmUgcmVmZXJlbmNlZCB3aXRoIHRoZQorPGNvZGU+ZGxsaW1wb3J0PC9jb2RlPiBhdHRyaWJ1dGUuICBPbiBNaWNyb3NvZnQgV2luZG93cyB0YXJnZXRzLCB0aGUgcG9pbnRlcgorbmFtZSBpcyBmb3JtZWQgYnkgY29tYmluaW5nIDxjb2RlPl9pbXBfXzwvY29kZT4gYW5kIHRoZSBmdW5jdGlvbiBvciB2YXJpYWJsZQorbmFtZS4KKworICAgICA8cD5Zb3UgY2FuIHVzZSA8Y29kZT5fX2RlY2xzcGVjKGRsbGV4cG9ydCk8L2NvZGU+IGFzIGEgc3lub255bSBmb3IKKzxjb2RlPl9fYXR0cmlidXRlX18gKChkbGxleHBvcnQpKTwvY29kZT4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlcgorY29tcGlsZXJzLgorCisgICAgIDxwPk9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZSA8Y29kZT52aXNpYmlsaXR5PC9jb2RlPiBhdHRyaWJ1dGUsIHRoaXMKK2F0dHJpYnV0ZSBhbHNvIGltcGxpZXMgJmxkcXVvO2RlZmF1bHQmcmRxdW87IHZpc2liaWxpdHkuICBJdCBpcyBhbiBlcnJvciB0bworZXhwbGljaXRseSBzcGVjaWZ5IGFueSBvdGhlciB2aXNpYmlsaXR5LgorCisgICAgIDxwPkluIHByZXZpb3VzIHZlcnNpb25zIG9mIEdDQywgdGhlIDxjb2RlPmRsbGV4cG9ydDwvY29kZT4gYXR0cmlidXRlIHdhcyBpZ25vcmVkCitmb3IgaW5saW5lZCBmdW5jdGlvbnMsIHVubGVzcyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZrZWVwLWlubGluZS1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPiBmbGFnCitoYWQgYmVlbiB1c2VkLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igbm93IGlzIHRvIGVtaXQgYWxsIGRsbGV4cG9ydGVkCitpbmxpbmUgZnVuY3Rpb25zOyBob3dldmVyLCB0aGlzIGNhbiBjYXVzZSBvYmplY3QgZmlsZS1zaXplIGJsb2F0LCBpbgord2hpY2ggY2FzZSB0aGUgb2xkIGJlaGF2aW9yIGNhbiBiZSByZXN0b3JlZCBieSB1c2luZworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1rZWVwLWlubGluZS1kbGxleHBvcnQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UaGUgYXR0cmlidXRlIGlzIGFsc28gaWdub3JlZCBmb3IgdW5kZWZpbmVkIHN5bWJvbHMuCisKKyAgICAgPHA+V2hlbiBhcHBsaWVkIHRvIEMrKyBjbGFzc2VzLCB0aGUgYXR0cmlidXRlIG1hcmtzIGRlZmluZWQgbm9uLWlubGluZWQKK21lbWJlciBmdW5jdGlvbnMgYW5kIHN0YXRpYyBkYXRhIG1lbWJlcnMgYXMgZXhwb3J0cy4gIFN0YXRpYyBjb25zdHMKK2luaXRpYWxpemVkIGluLWNsYXNzIGFyZSBub3QgbWFya2VkIHVubGVzcyB0aGV5IGFyZSBhbHNvIGRlZmluZWQKK291dC1vZi1jbGFzcy4KKworICAgICA8cD5Gb3IgTWljcm9zb2Z0IFdpbmRvd3MgdGFyZ2V0cyB0aGVyZSBhcmUgYWx0ZXJuYXRpdmUgbWV0aG9kcyBmb3IKK2luY2x1ZGluZyB0aGUgc3ltYm9sIGluIHRoZSBETEwncyBleHBvcnQgdGFibGUgc3VjaCBhcyB1c2luZyBhCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmRlZjwvc3Bhbj48L3NhbXA+IGZpbGUgd2l0aCBhbiA8Y29kZT5FWFBPUlRTPC9jb2RlPiBzZWN0aW9uIG9yLCB3aXRoIEdOVSBsZCwgdXNpbmcKK3RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWV4cG9ydC1hbGw8L3NwYW4+PC9zYW1wPiBsaW5rZXIgZmxhZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmRsbGltcG9ydDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZGVjbHNwZWNfMDAyOGRsbGltcG9ydF8wMDI5XzAwN2QtMjYwMCI+PC9hPk9uIE1pY3Jvc29mdCBXaW5kb3dzIGFuZCBTeW1iaWFuIE9TIHRhcmdldHMsIHRoZSA8Y29kZT5kbGxpbXBvcnQ8L2NvZGU+CithdHRyaWJ1dGUgY2F1c2VzIHRoZSBjb21waWxlciB0byByZWZlcmVuY2UgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSB2aWEKK2EgZ2xvYmFsIHBvaW50ZXIgdG8gYSBwb2ludGVyIHRoYXQgaXMgc2V0IHVwIGJ5IHRoZSBETEwgZXhwb3J0aW5nIHRoZQorc3ltYm9sLiAgVGhlIGF0dHJpYnV0ZSBpbXBsaWVzIDxjb2RlPmV4dGVybjwvY29kZT4uICBPbiBNaWNyb3NvZnQgV2luZG93cwordGFyZ2V0cywgdGhlIHBvaW50ZXIgbmFtZSBpcyBmb3JtZWQgYnkgY29tYmluaW5nIDxjb2RlPl9pbXBfXzwvY29kZT4gYW5kIHRoZQorZnVuY3Rpb24gb3IgdmFyaWFibGUgbmFtZS4KKworICAgICA8cD5Zb3UgY2FuIHVzZSA8Y29kZT5fX2RlY2xzcGVjKGRsbGltcG9ydCk8L2NvZGU+IGFzIGEgc3lub255bSBmb3IKKzxjb2RlPl9fYXR0cmlidXRlX18gKChkbGxpbXBvcnQpKTwvY29kZT4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlcgorY29tcGlsZXJzLgorCisgICAgIDxwPk9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZSA8Y29kZT52aXNpYmlsaXR5PC9jb2RlPiBhdHRyaWJ1dGUsIHRoaXMKK2F0dHJpYnV0ZSBhbHNvIGltcGxpZXMgJmxkcXVvO2RlZmF1bHQmcmRxdW87IHZpc2liaWxpdHkuICBJdCBpcyBhbiBlcnJvciB0bworZXhwbGljaXRseSBzcGVjaWZ5IGFueSBvdGhlciB2aXNpYmlsaXR5LgorCisgICAgIDxwPkN1cnJlbnRseSwgdGhlIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIGZvciBpbmxpbmVkIGZ1bmN0aW9ucy4gIElmIHRoZQorYXR0cmlidXRlIGlzIGFwcGxpZWQgdG8gYSBzeW1ib2wgPGVtPmRlZmluaXRpb248L2VtPiwgYW4gZXJyb3IgaXMgcmVwb3J0ZWQuIAorSWYgYSBzeW1ib2wgcHJldmlvdXNseSBkZWNsYXJlZCA8Y29kZT5kbGxpbXBvcnQ8L2NvZGU+IGlzIGxhdGVyIGRlZmluZWQsIHRoZQorYXR0cmlidXRlIGlzIGlnbm9yZWQgaW4gc3Vic2VxdWVudCByZWZlcmVuY2VzLCBhbmQgYSB3YXJuaW5nIGlzIGVtaXR0ZWQuIAorVGhlIGF0dHJpYnV0ZSBpcyBhbHNvIG92ZXJyaWRkZW4gYnkgYSBzdWJzZXF1ZW50IGRlY2xhcmF0aW9uIGFzCis8Y29kZT5kbGxleHBvcnQ8L2NvZGU+LgorCisgICAgIDxwPldoZW4gYXBwbGllZCB0byBDKysgY2xhc3NlcywgdGhlIGF0dHJpYnV0ZSBtYXJrcyBub24taW5saW5lZAorbWVtYmVyIGZ1bmN0aW9ucyBhbmQgc3RhdGljIGRhdGEgbWVtYmVycyBhcyBpbXBvcnRzLiAgSG93ZXZlciwgdGhlCithdHRyaWJ1dGUgaXMgaWdub3JlZCBmb3IgdmlydHVhbCBtZXRob2RzIHRvIGFsbG93IGNyZWF0aW9uIG9mIHZ0YWJsZXMKK3VzaW5nIHRodW5rcy4KKworICAgICA8cD5PbiB0aGUgU0ggU3ltYmlhbiBPUyB0YXJnZXQgdGhlIDxjb2RlPmRsbGltcG9ydDwvY29kZT4gYXR0cmlidXRlIGFsc28gaGFzCithbm90aGVyIGFmZmVjdCZtZGFzaDtpdCBjYW4gY2F1c2UgdGhlIHZ0YWJsZSBhbmQgcnVuLXRpbWUgdHlwZSBpbmZvcm1hdGlvbgorZm9yIGEgY2xhc3MgdG8gYmUgZXhwb3J0ZWQuICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgY2xhc3MgaGFzIGEKK2RsbGltcG9ydGVkIGNvbnN0cnVjdG9yIG9yIGEgbm9uLWlubGluZSwgbm9uLXB1cmUgdmlydHVhbCBmdW5jdGlvbgorYW5kLCBmb3IgZWl0aGVyIG9mIHRob3NlIHR3byBjb25kaXRpb25zLCB0aGUgY2xhc3MgYWxzbyBoYXMgYW4gaW5saW5lCitjb25zdHJ1Y3RvciBvciBkZXN0cnVjdG9yIGFuZCBoYXMgYSBrZXkgZnVuY3Rpb24gdGhhdCBpcyBkZWZpbmVkIGluCit0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LgorCisgICAgIDxwPkZvciBNaWNyb3NvZnQgV2luZG93cyB0YXJnZXRzIHRoZSB1c2Ugb2YgdGhlIDxjb2RlPmRsbGltcG9ydDwvY29kZT4KK2F0dHJpYnV0ZSBvbiBmdW5jdGlvbnMgaXMgbm90IG5lY2Vzc2FyeSwgYnV0IHByb3ZpZGVzIGEgc21hbGwKK3BlcmZvcm1hbmNlIGJlbmVmaXQgYnkgZWxpbWluYXRpbmcgYSB0aHVuayBpbiB0aGUgRExMLiAgVGhlIHVzZSBvZiB0aGUKKzxjb2RlPmRsbGltcG9ydDwvY29kZT4gYXR0cmlidXRlIG9uIGltcG9ydGVkIHZhcmlhYmxlcyB3YXMgcmVxdWlyZWQgb24gb2xkZXIKK3ZlcnNpb25zIG9mIHRoZSBHTlUgbGlua2VyLCBidXQgY2FuIG5vdyBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1hdXRvLWltcG9ydDwvc3Bhbj48L3NhbXA+IHN3aXRjaCB0byB0aGUgR05VIGxpbmtlci4gIEFzIHdpdGgKK2Z1bmN0aW9ucywgdXNpbmcgdGhlIGF0dHJpYnV0ZSBmb3IgYSB2YXJpYWJsZSBlbGltaW5hdGVzIGEgdGh1bmsgaW4KK3RoZSBETEwuCisKKyAgICAgPHA+T25lIGRyYXdiYWNrIHRvIHVzaW5nIHRoaXMgYXR0cmlidXRlIGlzIHRoYXQgYSBwb2ludGVyIHRvIGEKKzxlbT52YXJpYWJsZTwvZW0+IG1hcmtlZCBhcyA8Y29kZT5kbGxpbXBvcnQ8L2NvZGU+IGNhbm5vdCBiZSB1c2VkIGFzIGEgY29uc3RhbnQKK2FkZHJlc3MuIEhvd2V2ZXIsIGEgcG9pbnRlciB0byBhIDxlbT5mdW5jdGlvbjwvZW0+IHdpdGggdGhlCis8Y29kZT5kbGxpbXBvcnQ8L2NvZGU+IGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCBhcyBhIGNvbnN0YW50IGluaXRpYWxpemVyOyBpbgordGhpcyBjYXNlLCB0aGUgYWRkcmVzcyBvZiBhIHN0dWIgZnVuY3Rpb24gaW4gdGhlIGltcG9ydCBsaWIgaXMKK3JlZmVyZW5jZWQuICBPbiBNaWNyb3NvZnQgV2luZG93cyB0YXJnZXRzLCB0aGUgYXR0cmlidXRlIGNhbiBiZSBkaXNhYmxlZAorZm9yIGZ1bmN0aW9ucyBieSBzZXR0aW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vcC1mdW4tZGxsaW1wb3J0PC9zcGFuPjwvc2FtcD4gZmxhZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmVpZ2h0Yml0X2RhdGE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWVpZ2h0XzAwMmRiaXQtZGF0YS1vbi10aGUtSDhfMDAyZjMwMF8wMDJjLUg4XzAwMmYzMDBIXzAwMmMtYW5kLUg4Uy0yNjAxIj48L2E+VXNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBIOC8zMDAsIEg4LzMwMEgsIGFuZCBIOFMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3BlY2lmaWVkCit2YXJpYWJsZSBzaG91bGQgYmUgcGxhY2VkIGludG8gdGhlIGVpZ2h0LWJpdCBkYXRhIHNlY3Rpb24uIAorVGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBtb3JlIGVmZmljaWVudCBjb2RlIGZvciBjZXJ0YWluIG9wZXJhdGlvbnMKK29uIGRhdGEgaW4gdGhlIGVpZ2h0LWJpdCBkYXRhIGFyZWEuICBOb3RlIHRoZSBlaWdodC1iaXQgZGF0YSBhcmVhIGlzIGxpbWl0ZWQgdG8KKzI1NiBieXRlcyBvZiBkYXRhLgorCisgICAgIDxwPllvdSBtdXN0IHVzZSBHQVMgYW5kIEdMRCBmcm9tIEdOVSBiaW51dGlscyB2ZXJzaW9uIDIuNyBvciBsYXRlciBmb3IKK3RoaXMgYXR0cmlidXRlIHRvIHdvcmsgY29ycmVjdGx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZXhjZXB0aW9uX2hhbmRsZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWV4Y2VwdGlvbi1oYW5kbGVyLWZ1bmN0aW9ucy1vbi10aGUtQmxhY2tmaW4tcHJvY2Vzc29yLTI2MDIiPjwvYT5Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIEJsYWNrZmluIHRvIGluZGljYXRlIHRoYXQgdGhlIHNwZWNpZmllZCBmdW5jdGlvbgoraXMgYW4gZXhjZXB0aW9uIGhhbmRsZXIuICBUaGUgY29tcGlsZXIgZ2VuZXJhdGVzIGZ1bmN0aW9uIGVudHJ5IGFuZAorZXhpdCBzZXF1ZW5jZXMgc3VpdGFibGUgZm9yIHVzZSBpbiBhbiBleGNlcHRpb24gaGFuZGxlciB3aGVuIHRoaXMKK2F0dHJpYnV0ZSBpcyBwcmVzZW50LgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZXh0ZXJuYWxseV92aXNpYmxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmV4dGVybmFsbHlfMDA1ZnZpc2libGVfMDA3ZC1hdHRyaWJ1dGVfMDAyZS0yNjAzIj48L2E+VGhpcyBhdHRyaWJ1dGUsIGF0dGFjaGVkIHRvIGEgZ2xvYmFsIHZhcmlhYmxlIG9yIGZ1bmN0aW9uLCBudWxsaWZpZXMKK3RoZSBlZmZlY3Qgb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1md2hvbGUtcHJvZ3JhbTwvc3Bhbj48L3NhbXA+IGNvbW1hbmQtbGluZSBvcHRpb24sIHNvIHRoZQorb2JqZWN0IHJlbWFpbnMgdmlzaWJsZSBvdXRzaWRlIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuCisKKyAgICAgPHA+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ3aG9sZS1wcm9ncmFtPC9zcGFuPjwvc2FtcD4gaXMgdXNlZCB0b2dldGhlciB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbHRvPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z29sZDwvc3Bhbj48L3NhbXA+IGlzIHVzZWQgYXMgdGhlIGxpbmtlciBwbHVnaW4sCis8Y29kZT5leHRlcm5hbGx5X3Zpc2libGU8L2NvZGU+IGF0dHJpYnV0ZXMgYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gZnVuY3Rpb25zCisobm90IHZhcmlhYmxlIHlldCBkdWUgdG8gYSBjdXJyZW50IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nb2xkPC9zcGFuPjwvc2FtcD4gaXNzdWUpCit0aGF0IGFyZSBhY2Nlc3NlZCBvdXRzaWRlIG9mIExUTyBvYmplY3RzIGFjY29yZGluZyB0byByZXNvbHV0aW9uIGZpbGUKK3Byb2R1Y2VkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nb2xkPC9zcGFuPjwvc2FtcD4uIAorRm9yIG90aGVyIGxpbmtlcnMgdGhhdCBjYW5ub3QgZ2VuZXJhdGUgcmVzb2x1dGlvbiBmaWxlLAorZXhwbGljaXQgPGNvZGU+ZXh0ZXJuYWxseV92aXNpYmxlPC9jb2RlPiBhdHRyaWJ1dGVzIGFyZSBzdGlsbCBuZWNlc3NhcnkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5mYXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9ucy10aGF0LWhhbmRsZS1tZW1vcnktYmFuay1zd2l0Y2hpbmctMjYwNCI+PC9hPk9uIDY4SEMxMSBhbmQgNjhIQzEyIHRoZSA8Y29kZT5mYXI8L2NvZGU+IGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvCit1c2UgYSBjYWxsaW5nIGNvbnZlbnRpb24gdGhhdCB0YWtlcyBjYXJlIG9mIHN3aXRjaGluZyBtZW1vcnkgYmFua3Mgd2hlbgorZW50ZXJpbmcgYW5kIGxlYXZpbmcgYSBmdW5jdGlvbi4gIFRoaXMgY2FsbGluZyBjb252ZW50aW9uIGlzIGFsc28gdGhlCitkZWZhdWx0IHdoZW4gdXNpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbG9uZy1jYWxsczwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8cD5PbiA2OEhDMTIgdGhlIGNvbXBpbGVyIHVzZXMgdGhlIDxjb2RlPmNhbGw8L2NvZGU+IGFuZCA8Y29kZT5ydGM8L2NvZGU+IGluc3RydWN0aW9ucwordG8gY2FsbCBhbmQgcmV0dXJuIGZyb20gYSBmdW5jdGlvbi4KKworICAgICA8cD5PbiA2OEhDMTEgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBhIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucwordG8gaW52b2tlIGEgYm9hcmQtc3BlY2lmaWMgcm91dGluZSB0byBzd2l0Y2ggdGhlIG1lbW9yeSBiYW5rIGFuZCBjYWxsIHRoZQorcmVhbCBmdW5jdGlvbi4gIFRoZSBib2FyZC1zcGVjaWZpYyByb3V0aW5lIHNpbXVsYXRlcyBhIDxjb2RlPmNhbGw8L2NvZGU+LiAKK0F0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiwgaXQganVtcHMgdG8gYSBib2FyZC1zcGVjaWZpYyByb3V0aW5lCitpbnN0ZWFkIG9mIHVzaW5nIDxjb2RlPnJ0czwvY29kZT4uICBUaGUgYm9hcmQtc3BlY2lmaWMgcmV0dXJuIHJvdXRpbmUgc2ltdWxhdGVzCit0aGUgPGNvZGU+cnRjPC9jb2RlPi4KKworICAgICA8cD5PbiBNZVAgdGFyZ2V0cyB0aGlzIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gdXNlIGEgY2FsbGluZyBjb252ZW50aW9uCit0aGF0IGFzc3VtZXMgdGhlIGNhbGxlZCBmdW5jdGlvbiBpcyB0b28gZmFyIGF3YXkgZm9yIHRoZSBidWlsdC1pbgorYWRkcmVzc2luZyBtb2Rlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmZhc3RfaW50ZXJydXB0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1pbnRlcnJ1cHQtaGFuZGxlci1mdW5jdGlvbnMtMjYwNSI+PC9hPlVzZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgTTMyQyBhbmQgUlggcG9ydHMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3BlY2lmaWVkCitmdW5jdGlvbiBpcyBhIGZhc3QgaW50ZXJydXB0IGhhbmRsZXIuICBUaGlzIGlzIGp1c3QgbGlrZSB0aGUKKzxjb2RlPmludGVycnVwdDwvY29kZT4gYXR0cmlidXRlLCBleGNlcHQgdGhhdCA8Y29kZT5mcmVpdDwvY29kZT4gaXMgdXNlZCB0byByZXR1cm4KK2luc3RlYWQgb2YgPGNvZGU+cmVpdDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5mYXN0Y2FsbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25zLXRoYXQtcG9wLXRoZS1hcmd1bWVudC1zdGFjay1vbi10aGUtMzg2LTI2MDYiPjwvYT5PbiB0aGUgSW50ZWwgMzg2LCB0aGUgPGNvZGU+ZmFzdGNhbGw8L2NvZGU+IGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvCitwYXNzIHRoZSBmaXJzdCBhcmd1bWVudCAoaWYgb2YgaW50ZWdyYWwgdHlwZSkgaW4gdGhlIHJlZ2lzdGVyIEVDWCBhbmQKK3RoZSBzZWNvbmQgYXJndW1lbnQgKGlmIG9mIGludGVncmFsIHR5cGUpIGluIHRoZSByZWdpc3RlciBFRFguICBTdWJzZXF1ZW50CithbmQgb3RoZXIgdHlwZWQgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdGhlIHN0YWNrLiAgVGhlIGNhbGxlZCBmdW5jdGlvbgorcG9wcyB0aGUgYXJndW1lbnRzIG9mZiB0aGUgc3RhY2suICBJZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyB2YXJpYWJsZSBhbGwKK2FyZ3VtZW50cyBhcmUgcHVzaGVkIG9uIHRoZSBzdGFjay4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRoaXNjYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdW5jdGlvbnMtdGhhdC1wb3AtdGhlLWFyZ3VtZW50LXN0YWNrLW9uLXRoZS0zODYtMjYwNyI+PC9hPk9uIHRoZSBJbnRlbCAzODYsIHRoZSA8Y29kZT50aGlzY2FsbDwvY29kZT4gYXR0cmlidXRlIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8KK3Bhc3MgdGhlIGZpcnN0IGFyZ3VtZW50IChpZiBvZiBpbnRlZ3JhbCB0eXBlKSBpbiB0aGUgcmVnaXN0ZXIgRUNYLiAKK1N1YnNlcXVlbnQgYW5kIG90aGVyIHR5cGVkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gVGhlIGNhbGxlZAorZnVuY3Rpb24gcG9wcyB0aGUgYXJndW1lbnRzIG9mZiB0aGUgc3RhY2suIAorSWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMgdmFyaWFibGUgYWxsIGFyZ3VtZW50cyBhcmUgcHVzaGVkIG9uIHRoZQorc3RhY2suIAorVGhlIDxjb2RlPnRoaXNjYWxsPC9jb2RlPiBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgZm9yIEMrKyBub24tc3RhdGljIG1lbWJlciBmdW5jdGlvbnMuIAorQXMgYSBHQ0MgZXh0ZW5zaW9uLCB0aGlzIGNhbGxpbmcgY29udmVudGlvbiBjYW4gYmUgdXNlZCBmb3IgQyBmdW5jdGlvbnMKK2FuZCBmb3Igc3RhdGljIG1lbWJlciBtZXRob2RzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Zm9ybWF0ICg8L2NvZGU+PHZhcj5hcmNoZXR5cGU8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnN0cmluZy1pbmRleDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+Zmlyc3QtdG8tY2hlY2s8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZvcm1hdF8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtV2Zvcm1hdC0yNjA5Ij48L2E+VGhlIDxjb2RlPmZvcm1hdDwvY29kZT4gYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IGEgZnVuY3Rpb24gdGFrZXMgPGNvZGU+cHJpbnRmPC9jb2RlPiwKKzxjb2RlPnNjYW5mPC9jb2RlPiwgPGNvZGU+c3RyZnRpbWU8L2NvZGU+IG9yIDxjb2RlPnN0cmZtb248L2NvZGU+IHN0eWxlIGFyZ3VtZW50cyB0aGF0CitzaG91bGQgYmUgdHlwZS1jaGVja2VkIGFnYWluc3QgYSBmb3JtYXQgc3RyaW5nLiAgRm9yIGV4YW1wbGUsIHRoZQorZGVjbGFyYXRpb246CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZXh0ZXJuIGludAorICAgICAgICAgIG15X3ByaW50ZiAodm9pZCAqbXlfb2JqZWN0LCBjb25zdCBjaGFyICpteV9mb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5jYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGNoZWNrIHRoZSBhcmd1bWVudHMgaW4gY2FsbHMgdG8gPGNvZGU+bXlfcHJpbnRmPC9jb2RlPgorZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIDxjb2RlPnByaW50ZjwvY29kZT4gc3R5bGUgZm9ybWF0IHN0cmluZyBhcmd1bWVudAorPGNvZGU+bXlfZm9ybWF0PC9jb2RlPi4KKworICAgICA8cD5UaGUgcGFyYW1ldGVyIDx2YXI+YXJjaGV0eXBlPC92YXI+IGRldGVybWluZXMgaG93IHRoZSBmb3JtYXQgc3RyaW5nIGlzCitpbnRlcnByZXRlZCwgYW5kIHNob3VsZCBiZSA8Y29kZT5wcmludGY8L2NvZGU+LCA8Y29kZT5zY2FuZjwvY29kZT4sIDxjb2RlPnN0cmZ0aW1lPC9jb2RlPiwKKzxjb2RlPmdudV9wcmludGY8L2NvZGU+LCA8Y29kZT5nbnVfc2NhbmY8L2NvZGU+LCA8Y29kZT5nbnVfc3RyZnRpbWU8L2NvZGU+IG9yCis8Y29kZT5zdHJmbW9uPC9jb2RlPi4gIChZb3UgY2FuIGFsc28gdXNlIDxjb2RlPl9fcHJpbnRmX188L2NvZGU+LAorPGNvZGU+X19zY2FuZl9fPC9jb2RlPiwgPGNvZGU+X19zdHJmdGltZV9fPC9jb2RlPiBvciA8Y29kZT5fX3N0cmZtb25fXzwvY29kZT4uKSAgT24KK01pbkdXIHRhcmdldHMsIDxjb2RlPm1zX3ByaW50ZjwvY29kZT4sIDxjb2RlPm1zX3NjYW5mPC9jb2RlPiwgYW5kCis8Y29kZT5tc19zdHJmdGltZTwvY29kZT4gYXJlIGFsc28gcHJlc2VudC4gCis8dmFyPmFyY2hldHlwZTwvdmFyPiB2YWx1ZXMgc3VjaCBhcyA8Y29kZT5wcmludGY8L2NvZGU+IHJlZmVyIHRvIHRoZSBmb3JtYXRzIGFjY2VwdGVkCitieSB0aGUgc3lzdGVtJ3MgQyBydW50aW1lIGxpYnJhcnksCit3aGlsZSB2YWx1ZXMgcHJlZml4ZWQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdudV88L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWx3YXlzIHJlZmVyCit0byB0aGUgZm9ybWF0cyBhY2NlcHRlZCBieSB0aGUgR05VIEMgTGlicmFyeS4gIE9uIE1pY3Jvc29mdCBXaW5kb3dzCit0YXJnZXRzLCB2YWx1ZXMgcHJlZml4ZWQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1zXzwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWZlciB0byB0aGUgZm9ybWF0cyBhY2NlcHRlZCBieSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5tc3ZjcnQuZGxsPC9zcGFuPjwvc2FtcD4gbGlicmFyeS4gCitUaGUgcGFyYW1ldGVyIDx2YXI+c3RyaW5nLWluZGV4PC92YXI+CitzcGVjaWZpZXMgd2hpY2ggYXJndW1lbnQgaXMgdGhlIGZvcm1hdCBzdHJpbmcgYXJndW1lbnQgKHN0YXJ0aW5nCitmcm9tIDEpLCB3aGlsZSA8dmFyPmZpcnN0LXRvLWNoZWNrPC92YXI+IGlzIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0Cithcmd1bWVudCB0byBjaGVjayBhZ2FpbnN0IHRoZSBmb3JtYXQgc3RyaW5nLiAgRm9yIGZ1bmN0aW9ucword2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgbm90IGF2YWlsYWJsZSB0byBiZSBjaGVja2VkIChzdWNoIGFzCis8Y29kZT52cHJpbnRmPC9jb2RlPiksIHNwZWNpZnkgdGhlIHRoaXJkIHBhcmFtZXRlciBhcyB6ZXJvLiAgSW4gdGhpcyBjYXNlIHRoZQorY29tcGlsZXIgb25seSBjaGVja3MgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGNvbnNpc3RlbmN5LiAgRm9yCis8Y29kZT5zdHJmdGltZTwvY29kZT4gZm9ybWF0cywgdGhlIHRoaXJkIHBhcmFtZXRlciBpcyByZXF1aXJlZCB0byBiZSB6ZXJvLiAKK1NpbmNlIG5vbi1zdGF0aWMgQysrIG1ldGhvZHMgaGF2ZSBhbiBpbXBsaWNpdCA8Y29kZT50aGlzPC9jb2RlPiBhcmd1bWVudCwgdGhlCithcmd1bWVudHMgb2Ygc3VjaCBtZXRob2RzIHNob3VsZCBiZSBjb3VudGVkIGZyb20gdHdvLCBub3Qgb25lLCB3aGVuCitnaXZpbmcgdmFsdWVzIGZvciA8dmFyPnN0cmluZy1pbmRleDwvdmFyPiBhbmQgPHZhcj5maXJzdC10by1jaGVjazwvdmFyPi4KKworICAgICA8cD5JbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIGZvcm1hdCBzdHJpbmcgKDxjb2RlPm15X2Zvcm1hdDwvY29kZT4pIGlzIHRoZSBzZWNvbmQKK2FyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbiA8Y29kZT5teV9wcmludDwvY29kZT4sIGFuZCB0aGUgYXJndW1lbnRzIHRvIGNoZWNrCitzdGFydCB3aXRoIHRoZSB0aGlyZCBhcmd1bWVudCwgc28gdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBmb3IgdGhlIGZvcm1hdAorYXR0cmlidXRlIGFyZSAyIGFuZCAzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWZmcmVlc3RhbmRpbmctMjYxMCI+PC9hPjxhIG5hbWU9ImluZGV4LWZub18wMDJkYnVpbHRpbi0yNjExIj48L2E+VGhlIDxjb2RlPmZvcm1hdDwvY29kZT4gYXR0cmlidXRlIGFsbG93cyB5b3UgdG8gaWRlbnRpZnkgeW91ciBvd24gZnVuY3Rpb25zCit0aGF0IHRha2UgZm9ybWF0IHN0cmluZ3MgYXMgYXJndW1lbnRzLCBzbyB0aGF0IEdDQyBjYW4gY2hlY2sgdGhlCitjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgZm9yIGVycm9ycy4gIFRoZSBjb21waWxlciBhbHdheXMgKHVubGVzcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmcmVlc3RhbmRpbmc8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWJ1aWx0aW48L3NwYW4+PC9zYW1wPiBpcyB1c2VkKSBjaGVja3MgZm9ybWF0cworZm9yIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucyA8Y29kZT5wcmludGY8L2NvZGU+LCA8Y29kZT5mcHJpbnRmPC9jb2RlPiwKKzxjb2RlPnNwcmludGY8L2NvZGU+LCA8Y29kZT5zY2FuZjwvY29kZT4sIDxjb2RlPmZzY2FuZjwvY29kZT4sIDxjb2RlPnNzY2FuZjwvY29kZT4sIDxjb2RlPnN0cmZ0aW1lPC9jb2RlPiwKKzxjb2RlPnZwcmludGY8L2NvZGU+LCA8Y29kZT52ZnByaW50ZjwvY29kZT4gYW5kIDxjb2RlPnZzcHJpbnRmPC9jb2RlPiB3aGVuZXZlciBzdWNoCit3YXJuaW5ncyBhcmUgcmVxdWVzdGVkICh1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Zvcm1hdDwvc3Bhbj48L3NhbXA+KSwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworbW9kaWZ5IHRoZSBoZWFkZXIgZmlsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkaW8uaDwvc3Bhbj48L3NhbXA+LiAgSW4gQzk5IG1vZGUsIHRoZSBmdW5jdGlvbnMKKzxjb2RlPnNucHJpbnRmPC9jb2RlPiwgPGNvZGU+dnNucHJpbnRmPC9jb2RlPiwgPGNvZGU+dnNjYW5mPC9jb2RlPiwgPGNvZGU+dmZzY2FuZjwvY29kZT4gYW5kCis8Y29kZT52c3NjYW5mPC9jb2RlPiBhcmUgYWxzbyBjaGVja2VkLiAgRXhjZXB0IGluIHN0cmljdGx5IGNvbmZvcm1pbmcgQworc3RhbmRhcmQgbW9kZXMsIHRoZSBYL09wZW4gZnVuY3Rpb24gPGNvZGU+c3RyZm1vbjwvY29kZT4gaXMgYWxzbyBjaGVja2VkIGFzCithcmUgPGNvZGU+cHJpbnRmX3VubG9ja2VkPC9jb2RlPiBhbmQgPGNvZGU+ZnByaW50Zl91bmxvY2tlZDwvY29kZT4uIAorU2VlIDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPk9wdGlvbnMgQ29udHJvbGxpbmcgQyBEaWFsZWN0PC9hPi4KKworICAgICA8cD5Gb3IgT2JqZWN0aXZlLUMgZGlhbGVjdHMsIDxjb2RlPk5TU3RyaW5nPC9jb2RlPiAob3IgPGNvZGU+X19OU1N0cmluZ19fPC9jb2RlPikgaXMKK3JlY29nbml6ZWQgaW4gdGhlIHNhbWUgY29udGV4dC4gIERlY2xhcmF0aW9ucyBpbmNsdWRpbmcgdGhlc2UgZm9ybWF0IGF0dHJpYnV0ZXMKK2FyZSBwYXJzZWQgZm9yIGNvcnJlY3Qgc3ludGF4LCBob3dldmVyIHRoZSByZXN1bHQgb2YgY2hlY2tpbmcgb2Ygc3VjaCBmb3JtYXQKK3N0cmluZ3MgaXMgbm90IHlldCBkZWZpbmVkLCBhbmQgaXMgbm90IGNhcnJpZWQgb3V0IGJ5IHRoaXMgdmVyc2lvbiBvZiB0aGUKK2NvbXBpbGVyLgorCisgICAgIDxwPlRoZSB0YXJnZXQgbWF5IGFsc28gcHJvdmlkZSBhZGRpdGlvbmFsIHR5cGVzIG9mIGZvcm1hdCBjaGVja3MuIAorU2VlIDxhIGhyZWY9IlRhcmdldC1Gb3JtYXQtQ2hlY2tzLmh0bWwjVGFyZ2V0LUZvcm1hdC1DaGVja3MiPkZvcm1hdCBDaGVja3MgU3BlY2lmaWMgdG8gUGFydGljdWxhciBUYXJnZXQgTWFjaGluZXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Zm9ybWF0X2FyZyAoPC9jb2RlPjx2YXI+c3RyaW5nLWluZGV4PC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmb3JtYXRfMDA1ZmFyZ18wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjEyIj48L2E+PGEgbmFtZT0iaW5kZXgtV2Zvcm1hdF8wMDJkbm9ubGl0ZXJhbC0yNjEzIj48L2E+VGhlIDxjb2RlPmZvcm1hdF9hcmc8L2NvZGU+IGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhhdCBhIGZ1bmN0aW9uIHRha2VzIGEgZm9ybWF0CitzdHJpbmcgZm9yIGEgPGNvZGU+cHJpbnRmPC9jb2RlPiwgPGNvZGU+c2NhbmY8L2NvZGU+LCA8Y29kZT5zdHJmdGltZTwvY29kZT4gb3IKKzxjb2RlPnN0cmZtb248L2NvZGU+IHN0eWxlIGZ1bmN0aW9uIGFuZCBtb2RpZmllcyBpdCAoZm9yIGV4YW1wbGUsIHRvIHRyYW5zbGF0ZQoraXQgaW50byBhbm90aGVyIGxhbmd1YWdlKSwgc28gdGhlIHJlc3VsdCBjYW4gYmUgcGFzc2VkIHRvIGEKKzxjb2RlPnByaW50ZjwvY29kZT4sIDxjb2RlPnNjYW5mPC9jb2RlPiwgPGNvZGU+c3RyZnRpbWU8L2NvZGU+IG9yIDxjb2RlPnN0cmZtb248L2NvZGU+IHN0eWxlCitmdW5jdGlvbiAod2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyB0byB0aGUgZm9ybWF0IGZ1bmN0aW9uIHRoZSBzYW1lCithcyB0aGV5IHdvdWxkIGhhdmUgYmVlbiBmb3IgdGhlIHVubW9kaWZpZWQgc3RyaW5nKS4gIEZvciBleGFtcGxlLCB0aGUKK2RlY2xhcmF0aW9uOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGV4dGVybiBjaGFyICoKKyAgICAgICAgICBteV9kZ2V0dGV4dCAoY2hhciAqbXlfZG9tYWluLCBjb25zdCBjaGFyICpteV9mb3JtYXQpCisgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdF9hcmcgKDIpKSk7Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5jYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGNoZWNrIHRoZSBhcmd1bWVudHMgaW4gY2FsbHMgdG8gYSA8Y29kZT5wcmludGY8L2NvZGU+LAorPGNvZGU+c2NhbmY8L2NvZGU+LCA8Y29kZT5zdHJmdGltZTwvY29kZT4gb3IgPGNvZGU+c3RyZm1vbjwvY29kZT4gdHlwZSBmdW5jdGlvbiwgd2hvc2UKK2Zvcm1hdCBzdHJpbmcgYXJndW1lbnQgaXMgYSBjYWxsIHRvIHRoZSA8Y29kZT5teV9kZ2V0dGV4dDwvY29kZT4gZnVuY3Rpb24sIGZvcgorY29uc2lzdGVuY3kgd2l0aCB0aGUgZm9ybWF0IHN0cmluZyBhcmd1bWVudCA8Y29kZT5teV9mb3JtYXQ8L2NvZGU+LiAgSWYgdGhlCis8Y29kZT5mb3JtYXRfYXJnPC9jb2RlPiBhdHRyaWJ1dGUgaGFkIG5vdCBiZWVuIHNwZWNpZmllZCwgYWxsIHRoZSBjb21waWxlcgorY291bGQgdGVsbCBpbiBzdWNoIGNhbGxzIHRvIGZvcm1hdCBmdW5jdGlvbnMgd291bGQgYmUgdGhhdCB0aGUgZm9ybWF0CitzdHJpbmcgYXJndW1lbnQgaXMgbm90IGNvbnN0YW50OyB0aGlzIHdvdWxkIGdlbmVyYXRlIGEgd2FybmluZyB3aGVuCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Zvcm1hdC1ub25saXRlcmFsPC9zcGFuPjwvc2FtcD4gaXMgdXNlZCwgYnV0IHRoZSBjYWxscyBjb3VsZCBub3QgYmUgY2hlY2tlZAord2l0aG91dCB0aGUgYXR0cmlidXRlLgorCisgICAgIDxwPlRoZSBwYXJhbWV0ZXIgPHZhcj5zdHJpbmctaW5kZXg8L3Zhcj4gc3BlY2lmaWVzIHdoaWNoIGFyZ3VtZW50IGlzIHRoZSBmb3JtYXQKK3N0cmluZyBhcmd1bWVudCAoc3RhcnRpbmcgZnJvbSBvbmUpLiAgU2luY2Ugbm9uLXN0YXRpYyBDKysgbWV0aG9kcyBoYXZlCithbiBpbXBsaWNpdCA8Y29kZT50aGlzPC9jb2RlPiBhcmd1bWVudCwgdGhlIGFyZ3VtZW50cyBvZiBzdWNoIG1ldGhvZHMgc2hvdWxkCitiZSBjb3VudGVkIGZyb20gdHdvLgorCisgICAgIDxwPlRoZSA8Y29kZT5mb3JtYXRfYXJnPC9jb2RlPiBhdHRyaWJ1dGUgYWxsb3dzIHlvdSB0byBpZGVudGlmeSB5b3VyIG93bgorZnVuY3Rpb25zIHRoYXQgbW9kaWZ5IGZvcm1hdCBzdHJpbmdzLCBzbyB0aGF0IEdDQyBjYW4gY2hlY2sgdGhlCitjYWxscyB0byA8Y29kZT5wcmludGY8L2NvZGU+LCA8Y29kZT5zY2FuZjwvY29kZT4sIDxjb2RlPnN0cmZ0aW1lPC9jb2RlPiBvciA8Y29kZT5zdHJmbW9uPC9jb2RlPgordHlwZSBmdW5jdGlvbiB3aG9zZSBvcGVyYW5kcyBhcmUgYSBjYWxsIHRvIG9uZSBvZiB5b3VyIG93biBmdW5jdGlvbi4gCitUaGUgY29tcGlsZXIgYWx3YXlzIHRyZWF0cyA8Y29kZT5nZXR0ZXh0PC9jb2RlPiwgPGNvZGU+ZGdldHRleHQ8L2NvZGU+LCBhbmQKKzxjb2RlPmRjZ2V0dGV4dDwvY29kZT4gaW4gdGhpcyBtYW5uZXIgZXhjZXB0IHdoZW4gc3RyaWN0IElTTyBDIHN1cHBvcnQgaXMKK3JlcXVlc3RlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+IG9yIGFuIGFwcHJvcHJpYXRlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ8L3NwYW4+PC9zYW1wPiBvcHRpb24sIG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZyZWVzdGFuZGluZzwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYnVpbHRpbjwvc3Bhbj48L3NhbXA+CitpcyB1c2VkLiAgU2VlIDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPk9wdGlvbnMgQ29udHJvbGxpbmcgQyBEaWFsZWN0PC9hPi4KKworICAgICA8cD5Gb3IgT2JqZWN0aXZlLUMgZGlhbGVjdHMsIHRoZSA8Y29kZT5mb3JtYXQtYXJnPC9jb2RlPiBhdHRyaWJ1dGUgbWF5IHJlZmVyIHRvIGFuCis8Y29kZT5OU1N0cmluZzwvY29kZT4gcmVmZXJlbmNlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIDxjb2RlPmZvcm1hdDwvY29kZT4gYXR0cmlidXRlCithYm92ZS4KKworICAgICA8cD5UaGUgdGFyZ2V0IG1heSBhbHNvIGFsbG93IGFkZGl0aW9uYWwgdHlwZXMgaW4gPGNvZGU+Zm9ybWF0LWFyZzwvY29kZT4gYXR0cmlidXRlcy4gCitTZWUgPGEgaHJlZj0iVGFyZ2V0LUZvcm1hdC1DaGVja3MuaHRtbCNUYXJnZXQtRm9ybWF0LUNoZWNrcyI+Rm9ybWF0IENoZWNrcyBTcGVjaWZpYyB0byBQYXJ0aWN1bGFyIFRhcmdldCBNYWNoaW5lczwvYT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5mdW5jdGlvbl92ZWN0b3I8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWNhbGxpbmctZnVuY3Rpb25zLXRocm91Z2gtdGhlLWZ1bmN0aW9uLXZlY3Rvci1vbi1IOF8wMDJmMzAwXzAwMmMtTTE2Q18wMDJjLU0zMkMtYW5kLVNIMkEtcHJvY2Vzc29ycy0yNjE0Ij48L2E+VXNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBIOC8zMDAsIEg4LzMwMEgsIGFuZCBIOFMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3BlY2lmaWVkCitmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHRocm91Z2ggdGhlIGZ1bmN0aW9uIHZlY3Rvci4gIENhbGxpbmcgYQorZnVuY3Rpb24gdGhyb3VnaCB0aGUgZnVuY3Rpb24gdmVjdG9yIHJlZHVjZXMgY29kZSBzaXplLCBob3dldmVyOwordGhlIGZ1bmN0aW9uIHZlY3RvciBoYXMgYSBsaW1pdGVkIHNpemUgKG1heGltdW0gMTI4IGVudHJpZXMgb24gdGhlIEg4LzMwMAorYW5kIDY0IGVudHJpZXMgb24gdGhlIEg4LzMwMEggYW5kIEg4UykgYW5kIHNoYXJlcyBzcGFjZSB3aXRoIHRoZSBpbnRlcnJ1cHQgdmVjdG9yLgorCisgICAgIDxwPk9uIFNIMkEgdGFyZ2V0cywgdGhpcyBhdHRyaWJ1dGUgZGVjbGFyZXMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdXNpbmcgdGhlCitUQlIgcmVsYXRpdmUgYWRkcmVzc2luZyBtb2RlLiAgVGhlIGFyZ3VtZW50IHRvIHRoaXMgYXR0cmlidXRlIGlzIHRoZSBlbnRyeQorbnVtYmVyIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGluIGEgdmVjdG9yIHRhYmxlIGNvbnRhaW5pbmcgYWxsIHRoZSBUQlIKK3JlbGF0aXZlIGFkZHJlc3NhYmxlIGZ1bmN0aW9ucy4gIEZvciBjb3JyZWN0IG9wZXJhdGlvbiB0aGUgVEJSIG11c3QgYmUgc2V0dXAKK2FjY29yZGluZ2x5IHRvIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgdmVjdG9yIHRhYmxlIGJlZm9yZSBhbnkgZnVuY3Rpb25zIHdpdGgKK3RoaXMgYXR0cmlidXRlIGFyZSBpbnZva2VkLiAgVXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gZG8gdGhlIGluaXRpYWxpemF0aW9uIGlzCit0aGUgc3RhcnR1cCByb3V0aW5lLiAgVGhlIFRCUiByZWxhdGl2ZSB2ZWN0b3IgdGFibGUgY2FuIGhhdmUgYXQgbWF4IDI1NiBmdW5jdGlvbgorZW50cmllcy4gIFRoZSBqdW1wcyB0byB0aGVzZSBmdW5jdGlvbnMgYXJlIGdlbmVyYXRlZCB1c2luZyBhIFNIMkEgc3BlY2lmaWMsCitub24gZGVsYXllZCBicmFuY2ggaW5zdHJ1Y3Rpb24gSlNSL04gQChkaXNwOCxUQlIpLiAgWW91IG11c3QgdXNlIEdBUyBhbmQgR0xECitmcm9tIEdOVSBiaW51dGlscyB2ZXJzaW9uIDIuNyBvciBsYXRlciBmb3IgdGhpcyBhdHRyaWJ1dGUgdG8gd29yayBjb3JyZWN0bHkuCisKKyAgICAgPHA+UGxlYXNlIHJlZmVyIHRoZSBleGFtcGxlIG9mIE0xNkMgdGFyZ2V0LCB0byBzZWUgdGhlIHVzZSBvZiB0aGlzCithdHRyaWJ1dGUgd2hpbGUgZGVjbGFyaW5nIGEgZnVuY3Rpb24sCisKKyAgICAgPHA+SW4gYW4gYXBwbGljYXRpb24sIGZvciBhIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBvbmNlLCB0aGlzIGF0dHJpYnV0ZQorc2F2ZXMgYXQgbGVhc3QgOCBieXRlcyBvZiBjb2RlOyBhbmQgaWYgb3RoZXIgc3VjY2Vzc2l2ZSBjYWxscyBhcmUgYmVpbmcKK21hZGUgdG8gdGhlIHNhbWUgZnVuY3Rpb24sIGl0IHNhdmVzIDIgYnl0ZXMgb2YgY29kZSBwZXIgZWFjaCBvZiB0aGVzZQorY2FsbHMuCisKKyAgICAgPHA+T24gTTE2Qy9NMzJDIHRhcmdldHMsIHRoZSA8Y29kZT5mdW5jdGlvbl92ZWN0b3I8L2NvZGU+IGF0dHJpYnV0ZSBkZWNsYXJlcyBhCitzcGVjaWFsIHBhZ2Ugc3Vicm91dGluZSBjYWxsIGZ1bmN0aW9uLiBVc2Ugb2YgdGhpcyBhdHRyaWJ1dGUgcmVkdWNlcwordGhlIGNvZGUgc2l6ZSBieSAyIGJ5dGVzIGZvciBlYWNoIGNhbGwgZ2VuZXJhdGVkIHRvIHRoZQorc3Vicm91dGluZS4gVGhlIGFyZ3VtZW50IHRvIHRoZSBhdHRyaWJ1dGUgaXMgdGhlIHZlY3RvciBudW1iZXIgZW50cnkKK2Zyb20gdGhlIHNwZWNpYWwgcGFnZSB2ZWN0b3IgdGFibGUgd2hpY2ggY29udGFpbnMgdGhlIDE2IGxvdy1vcmRlcgorYml0cyBvZiB0aGUgc3Vicm91dGluZSdzIGVudHJ5IGFkZHJlc3MuIEVhY2ggdmVjdG9yIHRhYmxlIGhhcyBzcGVjaWFsCitwYWdlIG51bWJlciAoMTggdG8gMjU1KSB0aGF0IGlzIHVzZWQgaW4gPGNvZGU+anNyczwvY29kZT4gaW5zdHJ1Y3Rpb25zLiAKK0p1bXAgYWRkcmVzc2VzIG9mIHRoZSByb3V0aW5lcyBhcmUgZ2VuZXJhdGVkIGJ5IGFkZGluZyAweDBGMDAwMCAoaW4KK2Nhc2Ugb2YgTTE2QyB0YXJnZXRzKSBvciAweEZGMDAwMCAoaW4gY2FzZSBvZiBNMzJDIHRhcmdldHMpLCB0byB0aGUKKzItYnl0ZSBhZGRyZXNzZXMgc2V0IGluIHRoZSB2ZWN0b3IgdGFibGUuIFRoZXJlZm9yZSB5b3UgbmVlZCB0byBlbnN1cmUKK3RoYXQgYWxsIHRoZSBzcGVjaWFsIHBhZ2UgdmVjdG9yIHJvdXRpbmVzIHNob3VsZCBnZXQgbWFwcGVkIHdpdGhpbiB0aGUKK2FkZHJlc3MgcmFuZ2UgMHgwRjAwMDAgdG8gMHgwRkZGRkYgKGZvciBNMTZDKSBhbmQgMHhGRjAwMDAgdG8gMHhGRkZGRkYKKyhmb3IgTTMyQykuCisKKyAgICAgPHA+SW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIDIgYnl0ZXMgYXJlIHNhdmVkIGZvciBlYWNoIGNhbGwgdG8KK2Z1bmN0aW9uIDxjb2RlPmZvbzwvY29kZT4uCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdm9pZCBmb28gKHZvaWQpIF9fYXR0cmlidXRlX18oKGZ1bmN0aW9uX3ZlY3RvcigweDE4KSkpOworICAgICAgICAgIHZvaWQgZm9vICh2b2lkKQorICAgICAgICAgIHsKKyAgICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgICAgdm9pZCBiYXIgKHZvaWQpCisgICAgICAgICAgeworICAgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHA+SWYgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIG9uZSBmaWxlIGFuZCBhcmUgY2FsbGVkIGluIGFub3RoZXIgZmlsZSwKK3RoZW4gYmUgc3VyZSB0byB3cml0ZSB0aGlzIGRlY2xhcmF0aW9uIGluIGJvdGggZmlsZXMuCisKKyAgICAgPHA+VGhpcyBhdHRyaWJ1dGUgaXMgaWdub3JlZCBmb3IgUjhDIHRhcmdldC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmlmdW5jICgiPC9jb2RlPjx2YXI+cmVzb2x2ZXI8L3Zhcj48Y29kZT4iKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpZnVuY18wMDdkLWF0dHJpYnV0ZS0yNjE1Ij48L2E+VGhlIDxjb2RlPmlmdW5jPC9jb2RlPiBhdHRyaWJ1dGUgaXMgdXNlZCB0byBtYXJrIGEgZnVuY3Rpb24gYXMgYW4gaW5kaXJlY3QKK2Z1bmN0aW9uIHVzaW5nIHRoZSBTVFRfR05VX0lGVU5DIHN5bWJvbCB0eXBlIGV4dGVuc2lvbiB0byB0aGUgRUxGCitzdGFuZGFyZC4gIFRoaXMgYWxsb3dzIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBzeW1ib2wgdmFsdWUgdG8gYmUKK2RldGVybWluZWQgZHluYW1pY2FsbHkgYXQgbG9hZCB0aW1lLCBhbmQgYW4gb3B0aW1pemVkIHZlcnNpb24gb2YgdGhlCityb3V0aW5lIGNhbiBiZSBzZWxlY3RlZCBmb3IgdGhlIHBhcnRpY3VsYXIgcHJvY2Vzc29yIG9yIG90aGVyIHN5c3RlbQorY2hhcmFjdGVyaXN0aWNzIGRldGVybWluZWQgdGhlbi4gIFRvIHVzZSB0aGlzIGF0dHJpYnV0ZSwgZmlyc3QgZGVmaW5lCit0aGUgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zIGF2YWlsYWJsZSwgYW5kIGEgcmVzb2x2ZXIgZnVuY3Rpb24gdGhhdAorcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHNlbGVjdGVkIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9uLiAgVGhlCitpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMnIGRlY2xhcmF0aW9ucyBtdXN0IG1hdGNoIHRoZSBBUEkgb2YgdGhlCitmdW5jdGlvbiBiZWluZyBpbXBsZW1lbnRlZCwgdGhlIHJlc29sdmVyJ3MgZGVjbGFyYXRpb24gaXMgYmUgYQorZnVuY3Rpb24gcmV0dXJuaW5nIHBvaW50ZXIgdG8gdm9pZCBmdW5jdGlvbiByZXR1cm5pbmcgdm9pZDoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB2b2lkICpteV9tZW1jcHkgKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICBzdGF0aWMgdm9pZCAoKnJlc29sdmVfbWVtY3B5ICh2b2lkKSkgKHZvaWQpCisgICAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG15X21lbWNweTsgLy8gd2UnbGwganVzdCBhbHdheXMgc2VsZWN0IHRoaXMgcm91dGluZQorICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZSBleHBvcnRlZCBoZWFkZXIgZmlsZSBkZWNsYXJpbmcgdGhlIGZ1bmN0aW9uIHRoZSB1c2VyIGNhbGxzIHdvdWxkCitjb250YWluOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+YWxsb3dpbmcgdGhlIHVzZXIgdG8gY2FsbCB0aGlzIGFzIGEgcmVndWxhciBmdW5jdGlvbiwgdW5hd2FyZSBvZiB0aGUKK2ltcGxlbWVudGF0aW9uLiAgRmluYWxseSwgdGhlIGluZGlyZWN0IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGRlZmluZWQgaW4KK3RoZSBzYW1lIHRyYW5zbGF0aW9uIHVuaXQgYXMgdGhlIHJlc29sdmVyIGZ1bmN0aW9uOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHZvaWQgKm1lbWNweSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCkKKyAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChpZnVuYyAoInJlc29sdmVfbWVtY3B5IikpKTsKKzwvcHJlPgorICAgICA8cD5JbmRpcmVjdCBmdW5jdGlvbnMgY2Fubm90IGJlIHdlYWssIGFuZCByZXF1aXJlIGEgcmVjZW50IGJpbnV0aWxzIChhdAorbGVhc3QgdmVyc2lvbiAyLjIwLjEpLCBhbmQgR05VIEMgbGlicmFyeSAoYXQgbGVhc3QgdmVyc2lvbiAyLjExLjEpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aW50ZXJydXB0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1pbnRlcnJ1cHQtaGFuZGxlci1mdW5jdGlvbnMtMjYxNiI+PC9hPlVzZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgQVJNLCBBVlIsIENSMTYsIEVwaXBoYW55LCBNMzJDLCBNMzJSL0QsIG02OGssIE1lUCwgTUlQUywKK1JMNzgsIFJYIGFuZCBYc3Rvcm15MTYgcG9ydHMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGlzIGFuCitpbnRlcnJ1cHQgaGFuZGxlci4gIFRoZSBjb21waWxlciBnZW5lcmF0ZXMgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQKK3NlcXVlbmNlcyBzdWl0YWJsZSBmb3IgdXNlIGluIGFuIGludGVycnVwdCBoYW5kbGVyIHdoZW4gdGhpcyBhdHRyaWJ1dGUKK2lzIHByZXNlbnQuICBXaXRoIEVwaXBoYW55IHRhcmdldHMgaXQgbWF5IGFsc28gZ2VuZXJhdGUgYSBzcGVjaWFsIHNlY3Rpb24gd2l0aAorY29kZSB0byBpbml0aWFsaXplIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHRhYmxlLgorCisgICAgIDxwPk5vdGUsIGludGVycnVwdCBoYW5kbGVycyBmb3IgdGhlIEJsYWNrZmluLCBIOC8zMDAsIEg4LzMwMEgsIEg4UywgTWljcm9CbGF6ZSwKK2FuZCBTSCBwcm9jZXNzb3JzIGNhbiBiZSBzcGVjaWZpZWQgdmlhIHRoZSA8Y29kZT5pbnRlcnJ1cHRfaGFuZGxlcjwvY29kZT4gYXR0cmlidXRlLgorCisgICAgIDxwPk5vdGUsIG9uIHRoZSBBVlIsIHRoZSBoYXJkd2FyZSBnbG9iYWxseSBkaXNhYmxlcyBpbnRlcnJ1cHRzIHdoZW4gYW4KK2ludGVycnVwdCBpcyBleGVjdXRlZC4gIFRoZSBmaXJzdCBpbnN0cnVjdGlvbiBvZiBhbiBpbnRlcnJ1cHQgaGFuZGxlcgorZGVjbGFyZWQgd2l0aCB0aGlzIGF0dHJpYnV0ZSBpcyBhIDxjb2RlPlNFSTwvY29kZT4gaW5zdHJ1Y3Rpb24gdG8KK3JlLWVuYWJsZSBpbnRlcnJ1cHRzLiAgU2VlIGFsc28gdGhlIDxjb2RlPnNpZ25hbDwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlCit0aGF0IGRvZXMgbm90IGluc2VydCBhIDxjb2RlPlNFSTwvY29kZT4gaW5zdHJ1Y3Rpb24uICBJZiBib3RoIDxjb2RlPnNpZ25hbDwvY29kZT4gYW5kCis8Y29kZT5pbnRlcnJ1cHQ8L2NvZGU+IGFyZSBzcGVjaWZpZWQgZm9yIHRoZSBzYW1lIGZ1bmN0aW9uLCA8Y29kZT5zaWduYWw8L2NvZGU+CitpcyBzaWxlbnRseSBpZ25vcmVkLgorCisgICAgIDxwPk5vdGUsIGZvciB0aGUgQVJNLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGtpbmQgb2YgaW50ZXJydXB0IHRvIGJlIGhhbmRsZWQgYnkKK2FkZGluZyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gdGhlIGludGVycnVwdCBhdHRyaWJ1dGUgbGlrZSB0aGlzOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHZvaWQgZiAoKSBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0ICgiSVJRIikpKTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlBlcm1pc3NpYmxlIHZhbHVlcyBmb3IgdGhpcyBwYXJhbWV0ZXIgYXJlOiA8Y29kZT5JUlE8L2NvZGU+LCA8Y29kZT5GSVE8L2NvZGU+LAorPGNvZGU+U1dJPC9jb2RlPiwgPGNvZGU+QUJPUlQ8L2NvZGU+IGFuZCA8Y29kZT5VTkRFRjwvY29kZT4uCisKKyAgICAgPHA+T24gQVJNdjctTSB0aGUgaW50ZXJydXB0IHR5cGUgaXMgaWdub3JlZCwgYW5kIHRoZSBhdHRyaWJ1dGUgbWVhbnMgdGhlIGZ1bmN0aW9uCittYXkgYmUgY2FsbGVkIHdpdGggYSB3b3JkLWFsaWduZWQgc3RhY2sgcG9pbnRlci4KKworICAgICA8cD5PbiBFcGlwaGFueSB0YXJnZXRzIG9uZSBvciBtb3JlIG9wdGlvbmFsIHBhcmFtZXRlcnMgY2FuIGJlIGFkZGVkIGxpa2UgdGhpczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQgKCJkbWEwLCBkbWExIikpKSB1bml2ZXJzYWxfZG1hX2hhbmRsZXIgKCk7Cis8L3ByZT4KKyAgICAgPHA+UGVybWlzc2libGUgdmFsdWVzIGZvciB0aGVzZSBwYXJhbWV0ZXJzIGFyZTogPGNvZGU+cmVzZXQ8L2NvZGU+PCEtLSAvQHcgLS0+LAorPGNvZGU+c29mdHdhcmVfZXhjZXB0aW9uPC9jb2RlPjwhLS0gL0B3IC0tPiwgPGNvZGU+cGFnZV9taXNzPC9jb2RlPjwhLS0gL0B3IC0tPiwKKzxjb2RlPnRpbWVyMDwvY29kZT48IS0tIC9AdyAtLT4sIDxjb2RlPnRpbWVyMTwvY29kZT48IS0tIC9AdyAtLT4sIDxjb2RlPm1lc3NhZ2U8L2NvZGU+PCEtLSAvQHcgLS0+LAorPGNvZGU+ZG1hMDwvY29kZT48IS0tIC9AdyAtLT4sIDxjb2RlPmRtYTE8L2NvZGU+PCEtLSAvQHcgLS0+LCA8Y29kZT53YW5kPC9jb2RlPjwhLS0gL0B3IC0tPiBhbmQgPGNvZGU+c3dpPC9jb2RlPjwhLS0gL0B3IC0tPi4gCitNdWx0aXBsZSBwYXJhbWV0ZXJzIGluZGljYXRlIHRoYXQgbXVsdGlwbGUgZW50cmllcyBpbiB0aGUgaW50ZXJydXB0Cit2ZWN0b3IgdGFibGUgc2hvdWxkIGJlIGluaXRpYWxpemVkIGZvciB0aGlzIGZ1bmN0aW9uLCBpLmUuIGZvciBlYWNoCitwYXJhbWV0ZXIgPHZhcj5uYW1lPC92YXI+PCEtLSAvQHcgLS0+LCBhIGp1bXAgdG8gdGhlIGZ1bmN0aW9uIGlzIGVtaXR0ZWQgaW4KK3RoZSBzZWN0aW9uIGl2dF9lbnRyeV88dmFyPm5hbWU8L3Zhcj48IS0tIC9AdyAtLT4uICBUaGUgcGFyYW1ldGVyKHMpIG1heSBiZSBvbWl0dGVkCitlbnRpcmVseSwgaW4gd2hpY2ggY2FzZSBubyBpbnRlcnJ1cHQgdmVjdG9yIHRhYmxlIGVudHJ5IGlzIHByb3ZpZGVkLgorCisgICAgIDxwPk5vdGUsIG9uIEVwaXBoYW55IHRhcmdldHMsIGludGVycnVwdHMgYXJlIGVuYWJsZWQgaW5zaWRlIHRoZSBmdW5jdGlvbgordW5sZXNzIHRoZSA8Y29kZT5kaXNpbnRlcnJ1cHQ8L2NvZGU+IGF0dHJpYnV0ZSBpcyBhbHNvIHNwZWNpZmllZC4KKworICAgICA8cD5PbiBFcGlwaGFueSB0YXJnZXRzLCB5b3UgY2FuIGFsc28gdXNlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlIHRvCittb2RpZnkgdGhlIGJlaGF2aW9yIG9mIGFuIGludGVycnVwdCBoYW5kbGVyOgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5mb3J3YXJkZXJfc2VjdGlvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmb3J3YXJkZXJfMDA1ZnNlY3Rpb25fMDA3ZC1hdHRyaWJ1dGUtMjYxNyI+PC9hPlRoZSBpbnRlcnJ1cHQgaGFuZGxlciBtYXkgYmUgaW4gZXh0ZXJuYWwgbWVtb3J5IHdoaWNoIGNhbm5vdCBiZQorcmVhY2hlZCBieSBhIGJyYW5jaCBpbnN0cnVjdGlvbiwgc28gZ2VuZXJhdGUgYSBsb2NhbCBtZW1vcnkgdHJhbXBvbGluZQordG8gdHJhbnNmZXIgY29udHJvbC4gIFRoZSBzaW5nbGUgcGFyYW1ldGVyIGlkZW50aWZpZXMgdGhlIHNlY3Rpb24gd2hlcmUKK3RoZSB0cmFtcG9saW5lIGlzIHBsYWNlZC4gCis8L2RsPgorCisgICAgIDxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgYXJlIGFsbCB2YWxpZCB1c2VzIG9mIHRoZXNlIGF0dHJpYnV0ZXMgb24KK0VwaXBoYW55IHRhcmdldHM6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGludGVycnVwdCkpIHVuaXZlcnNhbF9oYW5kbGVyICgpOworICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGludGVycnVwdCAoImRtYTEiKSkpIGRtYTFfaGFuZGxlciAoKTsKKyAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQgKCJkbWEwLCBkbWExIikpKSB1bml2ZXJzYWxfZG1hX2hhbmRsZXIgKCk7CisgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0ICgidGltZXIwIiksIGRpc2ludGVycnVwdCkpCisgICAgICAgICAgICBmYXN0X3RpbWVyX2hhbmRsZXIgKCk7CisgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0ICgiZG1hMCwgZG1hMSIpLCBmb3J3YXJkZXJfc2VjdGlvbiAoInRyYW1wIikpKQorICAgICAgICAgICAgZXh0ZXJuYWxfZG1hX2hhbmRsZXIgKCk7Cis8L3ByZT4KKyAgICAgPHA+T24gTUlQUyB0YXJnZXRzLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgdG8gbW9kaWZ5IHRoZSBiZWhhdmlvcgorb2YgYW4gaW50ZXJydXB0IGhhbmRsZXI6CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPnVzZV9zaGFkb3dfcmVnaXN0ZXJfc2V0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnVzZV8wMDVmc2hhZG93XzAwNWZyZWdpc3Rlcl8wMDVmc2V0XzAwN2QtYXR0cmlidXRlLTI2MTgiPjwvYT5Bc3N1bWUgdGhhdCB0aGUgaGFuZGxlciB1c2VzIGEgc2hhZG93IHJlZ2lzdGVyIHNldCwgaW5zdGVhZCBvZgordGhlIG1haW4gZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+a2VlcF9pbnRlcnJ1cHRzX21hc2tlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JrZWVwXzAwNWZpbnRlcnJ1cHRzXzAwNWZtYXNrZWRfMDA3ZC1hdHRyaWJ1dGUtMjYxOSI+PC9hPktlZXAgaW50ZXJydXB0cyBtYXNrZWQgZm9yIHRoZSB3aG9sZSBmdW5jdGlvbi4gIFdpdGhvdXQgdGhpcyBhdHRyaWJ1dGUsCitHQ0MgdHJpZXMgdG8gcmVlbmFibGUgaW50ZXJydXB0cyBmb3IgYXMgbXVjaCBvZiB0aGUgZnVuY3Rpb24gYXMgaXQgY2FuLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT51c2VfZGVidWdfZXhjZXB0aW9uX3JldHVybjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1c2VfMDA1ZmRlYnVnXzAwNWZleGNlcHRpb25fMDA1ZnJldHVybl8wMDdkLWF0dHJpYnV0ZS0yNjIwIj48L2E+UmV0dXJuIHVzaW5nIHRoZSA8Y29kZT5kZXJldDwvY29kZT4gaW5zdHJ1Y3Rpb24uICBJbnRlcnJ1cHQgaGFuZGxlcnMgdGhhdCBkb24ndAoraGF2ZSB0aGlzIGF0dHJpYnV0ZSByZXR1cm4gdXNpbmcgPGNvZGU+ZXJldDwvY29kZT4gaW5zdGVhZC4gCis8L2RsPgorCisgICAgIDxwPllvdSBjYW4gdXNlIGFueSBjb21iaW5hdGlvbiBvZiB0aGVzZSBhdHRyaWJ1dGVzLCBhcyBzaG93biBiZWxvdzoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0KSkgdjAgKCk7CisgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0LCB1c2Vfc2hhZG93X3JlZ2lzdGVyX3NldCkpIHYxICgpOworICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGludGVycnVwdCwga2VlcF9pbnRlcnJ1cHRzX21hc2tlZCkpIHYyICgpOworICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGludGVycnVwdCwgdXNlX2RlYnVnX2V4Y2VwdGlvbl9yZXR1cm4pKSB2MyAoKTsKKyAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQsIHVzZV9zaGFkb3dfcmVnaXN0ZXJfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBfaW50ZXJydXB0c19tYXNrZWQpKSB2NCAoKTsKKyAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18gKChpbnRlcnJ1cHQsIHVzZV9zaGFkb3dfcmVnaXN0ZXJfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9kZWJ1Z19leGNlcHRpb25fcmV0dXJuKSkgdjUgKCk7CisgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0LCBrZWVwX2ludGVycnVwdHNfbWFza2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9kZWJ1Z19leGNlcHRpb25fcmV0dXJuKSkgdjYgKCk7CisgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0LCB1c2Vfc2hhZG93X3JlZ2lzdGVyX3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwX2ludGVycnVwdHNfbWFza2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9kZWJ1Z19leGNlcHRpb25fcmV0dXJuKSkgdjcgKCk7Cis8L3ByZT4KKyAgICAgPHA+T24gUkw3OCwgdXNlIDxjb2RlPmJya19pbnRlcnJ1cHQ8L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+aW50ZXJydXB0PC9jb2RlPiBmb3IKK2hhbmRsZXJzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCB0aGUgPGNvZGU+QlJLPC9jb2RlPiBvcGNvZGUgKGkuZS4gdGhvc2UKK3RoYXQgbXVzdCBlbmQgd2l0aCA8Y29kZT5SRVRCPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPlJFVEk8L2NvZGU+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmludGVycnVwdF9oYW5kbGVyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1pbnRlcnJ1cHQtaGFuZGxlci1mdW5jdGlvbnMtb24tdGhlLUJsYWNrZmluXzAwMmMtbTY4a18wMDJjLUg4XzAwMmYzMDAtYW5kLVNILXByb2Nlc3NvcnMtMjYyMSI+PC9hPlVzZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgQmxhY2tmaW4sIG02OGssIEg4LzMwMCwgSDgvMzAwSCwgSDhTLCBhbmQgU0ggdG8KK2luZGljYXRlIHRoYXQgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBpcyBhbiBpbnRlcnJ1cHQgaGFuZGxlci4gIFRoZSBjb21waWxlcgorZ2VuZXJhdGVzIGZ1bmN0aW9uIGVudHJ5IGFuZCBleGl0IHNlcXVlbmNlcyBzdWl0YWJsZSBmb3IgdXNlIGluIGFuCitpbnRlcnJ1cHQgaGFuZGxlciB3aGVuIHRoaXMgYXR0cmlidXRlIGlzIHByZXNlbnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5pbnRlcnJ1cHRfdGhyZWFkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1pbnRlcnJ1cHQtdGhyZWFkLWZ1bmN0aW9ucy1vbi1maWRvLTI2MjIiPjwvYT5Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gZmlkbywgYSBzdWJhcmNoaXRlY3R1cmUgb2YgdGhlIG02OGssIHRvIGluZGljYXRlCit0aGF0IHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gaXMgYW4gaW50ZXJydXB0IGhhbmRsZXIgdGhhdCBpcyBkZXNpZ25lZAordG8gcnVuIGFzIGEgdGhyZWFkLiAgVGhlIGNvbXBpbGVyIG9taXRzIGdlbmVyYXRlIHByb2xvZ3VlL2VwaWxvZ3VlCitzZXF1ZW5jZXMgYW5kIHJlcGxhY2VzIHRoZSByZXR1cm4gaW5zdHJ1Y3Rpb24gd2l0aCBhIDxjb2RlPnNsZWVwPC9jb2RlPgoraW5zdHJ1Y3Rpb24uICBUaGlzIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgb25seSBvbiBmaWRvLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aXNyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1pbnRlcnJ1cHQtc2VydmljZS1yb3V0aW5lcy1vbi1BUk0tMjYyMyI+PC9hPlVzZSB0aGlzIGF0dHJpYnV0ZSBvbiBBUk0gdG8gd3JpdGUgSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZXMuIFRoaXMgaXMgYW4KK2FsaWFzIHRvIHRoZSA8Y29kZT5pbnRlcnJ1cHQ8L2NvZGU+IGF0dHJpYnV0ZSBhYm92ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmtzcGlzdXNwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Vc2VyLXN0YWNrLXBvaW50ZXItaW4taW50ZXJydXB0cy1vbi10aGUtQmxhY2tmaW4tMjYyNCI+PC9hPldoZW4gdXNlZCB0b2dldGhlciB3aXRoIDxjb2RlPmludGVycnVwdF9oYW5kbGVyPC9jb2RlPiwgPGNvZGU+ZXhjZXB0aW9uX2hhbmRsZXI8L2NvZGU+CitvciA8Y29kZT5ubWlfaGFuZGxlcjwvY29kZT4sIGNvZGUgaXMgZ2VuZXJhdGVkIHRvIGxvYWQgdGhlIHN0YWNrIHBvaW50ZXIKK2Zyb20gdGhlIFVTUCByZWdpc3RlciBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5sMV90ZXh0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmwxXzAwNWZ0ZXh0XzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2MjUiPjwvYT5UaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBmdW5jdGlvbiB0byBiZSBwbGFjZWQgaW50byBMMSBJbnN0cnVjdGlvbgorU1JBTS4gVGhlIGZ1bmN0aW9uIGlzIHB1dCBpbnRvIGEgc3BlY2lmaWMgc2VjdGlvbiBuYW1lZCA8Y29kZT4ubDEudGV4dDwvY29kZT4uIAorV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZkcGljPC9zcGFuPjwvc2FtcD4sIGZ1bmN0aW9uIGNhbGxzIHdpdGggYSBzdWNoIGZ1bmN0aW9uIGFzIHRoZSBjYWxsZWUKK29yIGNhbGxlciB1c2VzIGlubGluZWQgUExULgorCisgICAgIDxicj48ZHQ+PGNvZGU+bDI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibDJfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjYyNiI+PC9hPk9uIHRoZSBCbGFja2ZpbiwgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGEgZnVuY3Rpb24gdG8gYmUgcGxhY2VkIGludG8gTDIKK1NSQU0uIFRoZSBmdW5jdGlvbiBpcyBwdXQgaW50byBhIHNwZWNpZmljIHNlY3Rpb24gbmFtZWQKKzxjb2RlPi5sMS50ZXh0PC9jb2RlPi4gV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZkcGljPC9zcGFuPjwvc2FtcD4sIGNhbGxlcnMgb2Ygc3VjaCBmdW5jdGlvbnMgdXNlCithbiBpbmxpbmVkIFBMVC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmxlYWY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibGVhZl8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjI3Ij48L2E+Q2FsbHMgdG8gZXh0ZXJuYWwgZnVuY3Rpb25zIHdpdGggdGhpcyBhdHRyaWJ1dGUgbXVzdCByZXR1cm4gdG8gdGhlIGN1cnJlbnQKK2NvbXBpbGF0aW9uIHVuaXQgb25seSBieSByZXR1cm4gb3IgYnkgZXhjZXB0aW9uIGhhbmRsaW5nLiAgSW4gcGFydGljdWxhciwgbGVhZgorZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byBjYWxsIGNhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCB0byBpdCBmcm9tIHRoZSBjdXJyZW50Citjb21waWxhdGlvbiB1bml0IG9yIGRpcmVjdGx5IGNhbGwgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoZSB1bml0IG9yIGxvbmdqbXAKK2ludG8gdGhlIHVuaXQuICBMZWFmIGZ1bmN0aW9uIG1pZ2h0IHN0aWxsIGNhbGwgZnVuY3Rpb25zIGZyb20gb3RoZXIgY29tcGlsYXRpb24KK3VuaXRzIGFuZCB0aHVzIHRoZXkgYXJlIG5vdCBuZWNlc3NhcmlseSBsZWFmIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgY29udGFpbiBubworZnVuY3Rpb24gY2FsbHMgYXQgYWxsLgorCisgICAgIDxwPlRoZSBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgZm9yIGxpYnJhcnkgZnVuY3Rpb25zIHRvIGltcHJvdmUgZGF0YWZsb3cgYW5hbHlzaXMuIAorVGhlIGNvbXBpbGVyIHRha2VzIHRoZSBoaW50IHRoYXQgYW55IGRhdGEgbm90IGVzY2FwaW5nIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgY2FuCitub3QgYmUgdXNlZCBvciBtb2RpZmllZCBieSB0aGUgbGVhZiBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCB0aGUgPGNvZGU+c2luPC9jb2RlPiBmdW5jdGlvbgoraXMgYSBsZWFmIGZ1bmN0aW9uLCBidXQgPGNvZGU+cXNvcnQ8L2NvZGU+IGlzIG5vdC4KKworICAgICA8cD5Ob3RlIHRoYXQgbGVhZiBmdW5jdGlvbnMgbWlnaHQgaW52b2tlIHNpZ25hbHMgYW5kIHNpZ25hbCBoYW5kbGVycyBtaWdodCBiZQorZGVmaW5lZCBpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0IGFuZCB1c2Ugc3RhdGljIHZhcmlhYmxlcy4gIFRoZSBvbmx5Citjb21wbGlhbnQgd2F5IHRvIHdyaXRlIHN1Y2ggYSBzaWduYWwgaGFuZGxlciBpcyB0byBkZWNsYXJlIHN1Y2ggdmFyaWFibGVzCis8Y29kZT52b2xhdGlsZTwvY29kZT4uCisKKyAgICAgPHA+VGhlIGF0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IG9uIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbgordW5pdC4gIFRoaXMgaXMgdG8gYWxsb3cgZWFzeSBtZXJnaW5nIG9mIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzIGludG8gb25lLAorZm9yIGV4YW1wbGUsIGJ5IHVzaW5nIHRoZSBsaW5rLXRpbWUgb3B0aW1pemF0aW9uLiAgRm9yIHRoaXMgcmVhc29uIHRoZQorYXR0cmlidXRlIGlzIG5vdCBhbGxvd2VkIG9uIHR5cGVzIHRvIGFubm90YXRlIGluZGlyZWN0IGNhbGxzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+bG9uZ19jYWxsL3Nob3J0X2NhbGw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWluZGlyZWN0LWNhbGxzLW9uLUFSTS0yNjI4Ij48L2E+VGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGhvdyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgY2FsbGVkIG9uCitBUk0gYW5kIEVwaXBoYW55LiAgQm90aCBhdHRyaWJ1dGVzIG92ZXJyaWRlIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1sb25nLWNhbGxzPC9zcGFuPjwvc2FtcD4gKHNlZSA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT4pCitjb21tYW5kLWxpbmUgc3dpdGNoIGFuZCA8Y29kZT4jcHJhZ21hIGxvbmdfY2FsbHM8L2NvZGU+IHNldHRpbmdzLiAgVGhlCis8Y29kZT5sb25nX2NhbGw8L2NvZGU+IGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZnVuY3Rpb24gbWlnaHQgYmUgZmFyCithd2F5IGZyb20gdGhlIGNhbGwgc2l0ZSBhbmQgcmVxdWlyZSBhIGRpZmZlcmVudCAobW9yZSBleHBlbnNpdmUpCitjYWxsaW5nIHNlcXVlbmNlLiAgIFRoZSA8Y29kZT5zaG9ydF9jYWxsPC9jb2RlPiBhdHRyaWJ1dGUgYWx3YXlzIHBsYWNlcwordGhlIG9mZnNldCB0byB0aGUgZnVuY3Rpb24gZnJvbSB0aGUgY2FsbCBzaXRlIGludG8gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qkw8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2luc3RydWN0aW9uIGRpcmVjdGx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+bG9uZ2NhbGwvc2hvcnRjYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdW5jdGlvbnMtY2FsbGVkLXZpYS1wb2ludGVyLW9uLXRoZS1SU18wMDJmNjAwMC1hbmQtUG93ZXJQQy0yNjI5Ij48L2E+T24gdGhlIEJsYWNrZmluLCBSUy82MDAwIGFuZCBQb3dlclBDLCB0aGUgPGNvZGU+bG9uZ2NhbGw8L2NvZGU+IGF0dHJpYnV0ZQoraW5kaWNhdGVzIHRoYXQgdGhlIGZ1bmN0aW9uIG1pZ2h0IGJlIGZhciBhd2F5IGZyb20gdGhlIGNhbGwgc2l0ZSBhbmQKK3JlcXVpcmUgYSBkaWZmZXJlbnQgKG1vcmUgZXhwZW5zaXZlKSBjYWxsaW5nIHNlcXVlbmNlLiAgVGhlCis8Y29kZT5zaG9ydGNhbGw8L2NvZGU+IGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYWx3YXlzIGNsb3NlCitlbm91Z2ggZm9yIHRoZSBzaG9ydGVyIGNhbGxpbmcgc2VxdWVuY2UgdG8gYmUgdXNlZC4gIFRoZXNlIGF0dHJpYnV0ZXMKK292ZXJyaWRlIGJvdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbG9uZ2NhbGw8L3NwYW4+PC9zYW1wPiBzd2l0Y2ggYW5kLCBvbiB0aGUgUlMvNjAwMCBhbmQKK1Bvd2VyUEMsIHRoZSA8Y29kZT4jcHJhZ21hIGxvbmdjYWxsPC9jb2RlPiBzZXR0aW5nLgorCisgICAgIDxwPlNlZSA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd2hldGhlciBsb25nCitjYWxscyBhcmUgbmVjZXNzYXJ5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+bG9uZ19jYWxsL25lYXIvZmFyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1pbmRpcmVjdC1jYWxscy1vbi1NSVBTLTI2MzAiPjwvYT5UaGVzZSBhdHRyaWJ1dGVzIHNwZWNpZnkgaG93IGEgcGFydGljdWxhciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gTUlQUy4gCitUaGUgYXR0cmlidXRlcyBvdmVycmlkZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1sb25nLWNhbGxzPC9zcGFuPjwvc2FtcD4gKHNlZSA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT4pCitjb21tYW5kLWxpbmUgc3dpdGNoLiAgVGhlIDxjb2RlPmxvbmdfY2FsbDwvY29kZT4gYW5kIDxjb2RlPmZhcjwvY29kZT4gYXR0cmlidXRlcyBhcmUKK3N5bm9ueW1zLCBhbmQgY2F1c2UgdGhlIGNvbXBpbGVyIHRvIGFsd2F5cyBjYWxsCit0aGUgZnVuY3Rpb24gYnkgZmlyc3QgbG9hZGluZyBpdHMgYWRkcmVzcyBpbnRvIGEgcmVnaXN0ZXIsIGFuZCB0aGVuIHVzaW5nCit0aGUgY29udGVudHMgb2YgdGhhdCByZWdpc3Rlci4gIFRoZSA8Y29kZT5uZWFyPC9jb2RlPiBhdHRyaWJ1dGUgaGFzIHRoZSBvcHBvc2l0ZQorZWZmZWN0OyBpdCBzcGVjaWZpZXMgdGhhdCBub24tUElDIGNhbGxzIHNob3VsZCBiZSBtYWRlIHVzaW5nIHRoZSBtb3JlCitlZmZpY2llbnQgPGNvZGU+amFsPC9jb2RlPiBpbnN0cnVjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPm1hbGxvYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtYWxsb2NfMDA3ZC1hdHRyaWJ1dGUtMjYzMSI+PC9hPlRoZSA8Y29kZT5tYWxsb2M8L2NvZGU+IGF0dHJpYnV0ZSBpcyB1c2VkIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRoYXQgYSBmdW5jdGlvbgorbWF5IGJlIHRyZWF0ZWQgYXMgaWYgYW55IG5vbi08Y29kZT5OVUxMPC9jb2RlPiBwb2ludGVyIGl0IHJldHVybnMgY2Fubm90CithbGlhcyBhbnkgb3RoZXIgcG9pbnRlciB2YWxpZCB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuZCB0aGF0IHRoZSBtZW1vcnkKK2hhcyB1bmRlZmluZWQgY29udGVudC4gCitUaGlzIG9mdGVuIGltcHJvdmVzIG9wdGltaXphdGlvbi4gCitTdGFuZGFyZCBmdW5jdGlvbnMgd2l0aCB0aGlzIHByb3BlcnR5IGluY2x1ZGUgPGNvZGU+bWFsbG9jPC9jb2RlPiBhbmQKKzxjb2RlPmNhbGxvYzwvY29kZT4uICA8Y29kZT5yZWFsbG9jPC9jb2RlPi1saWtlIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSB0aGlzCitwcm9wZXJ0eSBhcyB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gZG9lcyBub3QgaGF2ZSB1bmRlZmluZWQgY29udGVudC4KKworICAgICA8YnI+PGR0Pjxjb2RlPm1pcHMxNi9ub21pcHMxNjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JtaXBzMTZfMDA3ZC1hdHRyaWJ1dGUtMjYzMiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibm9taXBzMTZfMDA3ZC1hdHRyaWJ1dGUtMjYzMyI+PC9hPgorT24gTUlQUyB0YXJnZXRzLCB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+bWlwczE2PC9jb2RlPiBhbmQgPGNvZGU+bm9taXBzMTY8L2NvZGU+CitmdW5jdGlvbiBhdHRyaWJ1dGVzIHRvIGxvY2FsbHkgc2VsZWN0IG9yIHR1cm4gb2ZmIE1JUFMxNiBjb2RlIGdlbmVyYXRpb24uIAorQSBmdW5jdGlvbiB3aXRoIHRoZSA8Y29kZT5taXBzMTY8L2NvZGU+IGF0dHJpYnV0ZSBpcyBlbWl0dGVkIGFzIE1JUFMxNiBjb2RlLAord2hpbGUgTUlQUzE2IGNvZGUgZ2VuZXJhdGlvbiBpcyBkaXNhYmxlZCBmb3IgZnVuY3Rpb25zIHdpdGggdGhlCis8Y29kZT5ub21pcHMxNjwvY29kZT4gYXR0cmlidXRlLiAgVGhlc2UgYXR0cmlidXRlcyBvdmVycmlkZSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taXBzMTY8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1taXBzMTY8L3NwYW4+PC9zYW1wPiBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUKKyhzZWUgPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+KS4KKworICAgICA8cD5XaGVuIGNvbXBpbGluZyBmaWxlcyBjb250YWluaW5nIG1peGVkIE1JUFMxNiBhbmQgbm9uLU1JUFMxNiBjb2RlLCB0aGUKK3ByZXByb2Nlc3NvciBzeW1ib2wgPGNvZGU+X19taXBzMTY8L2NvZGU+IHJlZmxlY3RzIHRoZSBzZXR0aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUsCitub3QgdGhhdCB3aXRoaW4gaW5kaXZpZHVhbCBmdW5jdGlvbnMuICBNaXhlZCBNSVBTMTYgYW5kIG5vbi1NSVBTMTYgY29kZQorbWF5IGludGVyYWN0IGJhZGx5IHdpdGggc29tZSBHQ0MgZXh0ZW5zaW9ucyBzdWNoIGFzIDxjb2RlPl9fYnVpbHRpbl9hcHBseTwvY29kZT4KKyhzZWUgPGEgaHJlZj0iQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwjQ29uc3RydWN0aW5nLUNhbGxzIj5Db25zdHJ1Y3RpbmcgQ2FsbHM8L2E+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPm1vZGVsICg8L2NvZGU+PHZhcj5tb2RlbC1uYW1lPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb24tYWRkcmVzc2FiaWxpdHktb24tdGhlLU0zMlJfMDAyZkQtMjYzNCI+PC9hPjxhIG5hbWU9ImluZGV4LXZhcmlhYmxlLWFkZHJlc3NhYmlsaXR5LW9uLXRoZS1JQV8wMDJkNjQtMjYzNSI+PC9hPgorT24gdGhlIE0zMlIvRCwgdXNlIHRoaXMgYXR0cmlidXRlIHRvIHNldCB0aGUgYWRkcmVzc2FiaWxpdHkgb2YgYW4KK29iamVjdCwgYW5kIG9mIHRoZSBjb2RlIGdlbmVyYXRlZCBmb3IgYSBmdW5jdGlvbi4gIFRoZSBpZGVudGlmaWVyCis8dmFyPm1vZGVsLW5hbWU8L3Zhcj4gaXMgb25lIG9mIDxjb2RlPnNtYWxsPC9jb2RlPiwgPGNvZGU+bWVkaXVtPC9jb2RlPiwgb3IKKzxjb2RlPmxhcmdlPC9jb2RlPiwgcmVwcmVzZW50aW5nIGVhY2ggb2YgdGhlIGNvZGUgbW9kZWxzLgorCisgICAgIDxwPlNtYWxsIG1vZGVsIG9iamVjdHMgbGl2ZSBpbiB0aGUgbG93ZXIgMTZNQiBvZiBtZW1vcnkgKHNvIHRoYXQgdGhlaXIKK2FkZHJlc3NlcyBjYW4gYmUgbG9hZGVkIHdpdGggdGhlIDxjb2RlPmxkMjQ8L2NvZGU+IGluc3RydWN0aW9uKSwgYW5kIGFyZQorY2FsbGFibGUgd2l0aCB0aGUgPGNvZGU+Ymw8L2NvZGU+IGluc3RydWN0aW9uLgorCisgICAgIDxwPk1lZGl1bSBtb2RlbCBvYmplY3RzIG1heSBsaXZlIGFueXdoZXJlIGluIHRoZSAzMi1iaXQgYWRkcmVzcyBzcGFjZSAodGhlCitjb21waWxlciBnZW5lcmF0ZXMgPGNvZGU+c2V0aC9hZGQzPC9jb2RlPiBpbnN0cnVjdGlvbnMgdG8gbG9hZCB0aGVpciBhZGRyZXNzZXMpLAorYW5kIGFyZSBjYWxsYWJsZSB3aXRoIHRoZSA8Y29kZT5ibDwvY29kZT4gaW5zdHJ1Y3Rpb24uCisKKyAgICAgPHA+TGFyZ2UgbW9kZWwgb2JqZWN0cyBtYXkgbGl2ZSBhbnl3aGVyZSBpbiB0aGUgMzItYml0IGFkZHJlc3Mgc3BhY2UgKHRoZQorY29tcGlsZXIgZ2VuZXJhdGVzIDxjb2RlPnNldGgvYWRkMzwvY29kZT4gaW5zdHJ1Y3Rpb25zIHRvIGxvYWQgdGhlaXIgYWRkcmVzc2VzKSwKK2FuZCBtYXkgbm90IGJlIHJlYWNoYWJsZSB3aXRoIHRoZSA8Y29kZT5ibDwvY29kZT4gaW5zdHJ1Y3Rpb24gKHRoZSBjb21waWxlcgorZ2VuZXJhdGVzIHRoZSBtdWNoIHNsb3dlciA8Y29kZT5zZXRoL2FkZDMvamw8L2NvZGU+IGluc3RydWN0aW9uIHNlcXVlbmNlKS4KKworICAgICA8cD5PbiBJQS02NCwgdXNlIHRoaXMgYXR0cmlidXRlIHRvIHNldCB0aGUgYWRkcmVzc2FiaWxpdHkgb2YgYW4gb2JqZWN0LiAKK0F0IHByZXNlbnQsIHRoZSBvbmx5IHN1cHBvcnRlZCBpZGVudGlmaWVyIGZvciA8dmFyPm1vZGVsLW5hbWU8L3Zhcj4gaXMKKzxjb2RlPnNtYWxsPC9jb2RlPiwgaW5kaWNhdGluZyBhZGRyZXNzYWJpbGl0eSB2aWEgJmxkcXVvO3NtYWxsJnJkcXVvOyAoMjItYml0KQorYWRkcmVzc2VzIChzbyB0aGF0IHRoZWlyIGFkZHJlc3NlcyBjYW4gYmUgbG9hZGVkIHdpdGggdGhlIDxjb2RlPmFkZGw8L2NvZGU+CitpbnN0cnVjdGlvbikuICBDYXZlYXQ6IHN1Y2ggYWRkcmVzc2luZyBpcyBieSBkZWZpbml0aW9uIG5vdCBwb3NpdGlvbgoraW5kZXBlbmRlbnQgYW5kIGhlbmNlIHRoaXMgYXR0cmlidXRlIG11c3Qgbm90IGJlIHVzZWQgZm9yIG9iamVjdHMKK2RlZmluZWQgYnkgc2hhcmVkIGxpYnJhcmllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPm1zX2FiaS9zeXN2X2FiaTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jtc18wMDVmYWJpXzAwN2QtYXR0cmlidXRlLTI2MzYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN5c3ZfMDA1ZmFiaV8wMDdkLWF0dHJpYnV0ZS0yNjM3Ij48L2E+CitPbiAzMi1iaXQgYW5kIDY0LWJpdCAoaT84Nnx4ODZfNjQpLSotKiB0YXJnZXRzLCB5b3UgY2FuIHVzZSBhbiBBQkkgYXR0cmlidXRlCit0byBpbmRpY2F0ZSB3aGljaCBjYWxsaW5nIGNvbnZlbnRpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGEgZnVuY3Rpb24uICBUaGUKKzxjb2RlPm1zX2FiaTwvY29kZT4gYXR0cmlidXRlIHRlbGxzIHRoZSBjb21waWxlciB0byB1c2UgdGhlIE1pY3Jvc29mdCBBQkksCit3aGlsZSB0aGUgPGNvZGU+c3lzdl9hYmk8L2NvZGU+IGF0dHJpYnV0ZSB0ZWxscyB0aGUgY29tcGlsZXIgdG8gdXNlIHRoZSBBQkkKK3VzZWQgb24gR05VL0xpbnV4IGFuZCBvdGhlciBzeXN0ZW1zLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBNaWNyb3NvZnQgQUJJCit3aGVuIHRhcmdldGluZyBXaW5kb3dzLiAgT24gYWxsIG90aGVyIHN5c3RlbXMsIHRoZSBkZWZhdWx0IGlzIHRoZSB4ODYvQU1EIEFCSS4KKworICAgICA8cD5Ob3RlLCB0aGUgPGNvZGU+bXNfYWJpPC9jb2RlPiBhdHRyaWJ1dGUgZm9yIE1pY3Jvc29mdCBXaW5kb3dzIDY0LWJpdCB0YXJnZXRzIGN1cnJlbnRseQorcmVxdWlyZXMgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWNjdW11bGF0ZS1vdXRnb2luZy1hcmdzPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2FsbGVlX3BvcF9hZ2dyZWdhdGVfcmV0dXJuICg8L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNhbGxlZV8wMDVmcG9wXzAwNWZhZ2dyZWdhdGVfMDA1ZnJldHVybl8wMDdkLWF0dHJpYnV0ZS0yNjM4Ij48L2E+CitPbiAzMi1iaXQgaT84Ni0qLSogdGFyZ2V0cywgeW91IGNhbiB1c2UgdGhpcyBhdHRyaWJ1dGUgdG8gY29udHJvbCBob3cKK2FnZ3JlZ2F0ZXMgYXJlIHJldHVybmVkIGluIG1lbW9yeS4gIElmIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCitwb3BwaW5nIHRoZSBoaWRkZW4gcG9pbnRlciB0b2dldGhlciB3aXRoIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMsIHNwZWNpZnkKKzx2YXI+bnVtYmVyPC92YXI+IGVxdWFsIHRvIHplcm8uICBJZiBjYWxsZWUgaXMgcmVzcG9uc2libGUgZm9yIHBvcHBpbmcgdGhlCitoaWRkZW4gcG9pbnRlciwgc3BlY2lmeSA8dmFyPm51bWJlcjwvdmFyPiBlcXVhbCB0byBvbmUuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaTM4NiBBQkkgYXNzdW1lcyB0aGF0IHRoZSBjYWxsZWUgcG9wcyB0aGUKK3N0YWNrIGZvciBoaWRkZW4gcG9pbnRlci4gIEhvd2V2ZXIsIG9uIDMyLWJpdCBpMzg2IE1pY3Jvc29mdCBXaW5kb3dzIHRhcmdldHMsCit0aGUgY29tcGlsZXIgYXNzdW1lcyB0aGF0IHRoZQorY2FsbGVyIHBvcHMgdGhlIHN0YWNrIGZvciBoaWRkZW4gcG9pbnRlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPm1zX2hvb2tfcHJvbG9ndWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibXNfMDA1Zmhvb2tfMDA1ZnByb2xvZ3VlXzAwN2QtYXR0cmlidXRlLTI2MzkiPjwvYT4KK09uIDMyLWJpdCBpWzM0NTY3XTg2LSotKiB0YXJnZXRzIGFuZCA2NC1iaXQgeDg2XzY0LSotKiB0YXJnZXRzLCB5b3UgY2FuIHVzZQordGhpcyBmdW5jdGlvbiBhdHRyaWJ1dGUgdG8gbWFrZSBHQ0MgZ2VuZXJhdGUgdGhlICZsZHF1bztob3QtcGF0Y2hpbmcmcmRxdW87IGZ1bmN0aW9uCitwcm9sb2d1ZSB1c2VkIGluIFdpbjMyIEFQSSBmdW5jdGlvbnMgaW4gTWljcm9zb2Z0IFdpbmRvd3MgWFAgU2VydmljZSBQYWNrIDIKK2FuZCBuZXdlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPm5ha2VkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdW5jdGlvbi13aXRob3V0LWEtcHJvbG9ndWVfMDAyZmVwaWxvZ3VlLWNvZGUtMjY0MCI+PC9hPlVzZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgQVJNLCBBVlIsIE1DT1JFLCBSWCBhbmQgU1BVIHBvcnRzIHRvIGluZGljYXRlIHRoYXQKK3RoZSBzcGVjaWZpZWQgZnVuY3Rpb24gZG9lcyBub3QgbmVlZCBwcm9sb2d1ZS9lcGlsb2d1ZSBzZXF1ZW5jZXMgZ2VuZXJhdGVkIGJ5Cit0aGUgY29tcGlsZXIuICBJdCBpcyB1cCB0byB0aGUgcHJvZ3JhbW1lciB0byBwcm92aWRlIHRoZXNlIHNlcXVlbmNlcy4gVGhlCitvbmx5IHN0YXRlbWVudHMgdGhhdCBjYW4gYmUgc2FmZWx5IGluY2x1ZGVkIGluIG5ha2VkIGZ1bmN0aW9ucyBhcmUKKzxjb2RlPmFzbTwvY29kZT4gc3RhdGVtZW50cyB0aGF0IGRvIG5vdCBoYXZlIG9wZXJhbmRzLiAgQWxsIG90aGVyIHN0YXRlbWVudHMsCitpbmNsdWRpbmcgZGVjbGFyYXRpb25zIG9mIGxvY2FsIHZhcmlhYmxlcywgPGNvZGU+aWY8L2NvZGU+IHN0YXRlbWVudHMsIGFuZCBzbworZm9ydGgsIHNob3VsZCBiZSBhdm9pZGVkLiAgTmFrZWQgZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIHRvIGltcGxlbWVudCB0aGUKK2JvZHkgb2YgYW4gYXNzZW1ibHkgZnVuY3Rpb24sIHdoaWxlIGFsbG93aW5nIHRoZSBjb21waWxlciB0byBjb25zdHJ1Y3QKK3RoZSByZXF1aXNpdGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9yIHRoZSBhc3NlbWJsZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT5uZWFyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdW5jdGlvbnMtdGhhdC1kby1ub3QtaGFuZGxlLW1lbW9yeS1iYW5rLXN3aXRjaGluZy1vbi02OEhDMTFfMDAyZjY4SEMxMi0yNjQxIj48L2E+T24gNjhIQzExIGFuZCA2OEhDMTIgdGhlIDxjb2RlPm5lYXI8L2NvZGU+IGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvCit1c2UgdGhlIG5vcm1hbCBjYWxsaW5nIGNvbnZlbnRpb24gYmFzZWQgb24gPGNvZGU+anNyPC9jb2RlPiBhbmQgPGNvZGU+cnRzPC9jb2RlPi4gCitUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIGVmZmVjdCBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1sb25nLWNhbGxzPC9zcGFuPjwvc2FtcD4KK29wdGlvbi4KKworICAgICA8cD5PbiBNZVAgdGFyZ2V0cyB0aGlzIGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSB0aGUgY2FsbGVkCitmdW5jdGlvbiBpcyBjbG9zZSBlbm91Z2ggdG8gdXNlIHRoZSBub3JtYWwgY2FsbGluZyBjb252ZW50aW9uLAorb3ZlcnJpZGluZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10Zjwvc3Bhbj48L3NhbXA+IGNvbW1hbmQtbGluZSBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5uZXN0aW5nPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1BbGxvdy1uZXN0aW5nLWluLWFuLWludGVycnVwdC1oYW5kbGVyLW9uLXRoZS1CbGFja2Zpbi1wcm9jZXNzb3JfMDAyZS0yNjQyIj48L2E+VXNlIHRoaXMgYXR0cmlidXRlIHRvZ2V0aGVyIHdpdGggPGNvZGU+aW50ZXJydXB0X2hhbmRsZXI8L2NvZGU+LAorPGNvZGU+ZXhjZXB0aW9uX2hhbmRsZXI8L2NvZGU+IG9yIDxjb2RlPm5taV9oYW5kbGVyPC9jb2RlPiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmdW5jdGlvbgorZW50cnkgY29kZSBzaG91bGQgZW5hYmxlIG5lc3RlZCBpbnRlcnJ1cHRzIG9yIGV4Y2VwdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5ubWlfaGFuZGxlcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTk1JLWhhbmRsZXItZnVuY3Rpb25zLW9uLXRoZS1CbGFja2Zpbi1wcm9jZXNzb3ItMjY0MyI+PC9hPlVzZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgQmxhY2tmaW4gdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uCitpcyBhbiBOTUkgaGFuZGxlci4gIFRoZSBjb21waWxlciBnZW5lcmF0ZXMgZnVuY3Rpb24gZW50cnkgYW5kCitleGl0IHNlcXVlbmNlcyBzdWl0YWJsZSBmb3IgdXNlIGluIGFuIE5NSSBoYW5kbGVyIHdoZW4gdGhpcworYXR0cmlidXRlIGlzIHByZXNlbnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5ub19pbnN0cnVtZW50X2Z1bmN0aW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vXzAwNWZpbnN0cnVtZW50XzAwNWZmdW5jdGlvbl8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmluc3RydW1lbnRfMDAyZGZ1bmN0aW9ucy0yNjQ1Ij48L2E+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbnN0cnVtZW50LWZ1bmN0aW9uczwvc3Bhbj48L3NhbXA+IGlzIGdpdmVuLCBwcm9maWxpbmcgZnVuY3Rpb24gY2FsbHMgYXJlCitnZW5lcmF0ZWQgYXQgZW50cnkgYW5kIGV4aXQgb2YgbW9zdCB1c2VyLWNvbXBpbGVkIGZ1bmN0aW9ucy4gCitGdW5jdGlvbnMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBhcmUgbm90IHNvIGluc3RydW1lbnRlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPm5vX3NwbGl0X3N0YWNrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vXzAwNWZzcGxpdF8wMDVmc3RhY2tfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY0NiI+PC9hPjxhIG5hbWU9ImluZGV4LWZzcGxpdF8wMDJkc3RhY2stMjY0NyI+PC9hPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc3BsaXQtc3RhY2s8L3NwYW4+PC9zYW1wPiBpcyBnaXZlbiwgZnVuY3Rpb25zIGhhdmUgYSBzbWFsbAorcHJvbG9ndWUgd2hpY2ggZGVjaWRlcyB3aGV0aGVyIHRvIHNwbGl0IHRoZSBzdGFjay4gIEZ1bmN0aW9ucyB3aXRoIHRoZQorPGNvZGU+bm9fc3BsaXRfc3RhY2s8L2NvZGU+IGF0dHJpYnV0ZSBkbyBub3QgaGF2ZSB0aGF0IHByb2xvZ3VlLCBhbmQgdGh1cworbWF5IHJ1biB3aXRoIG9ubHkgYSBzbWFsbCBhbW91bnQgb2Ygc3RhY2sgc3BhY2UgYXZhaWxhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+bm9pbmxpbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibm9pbmxpbmVfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY0OCI+PC9hPlRoaXMgZnVuY3Rpb24gYXR0cmlidXRlIHByZXZlbnRzIGEgZnVuY3Rpb24gZnJvbSBiZWluZyBjb25zaWRlcmVkIGZvcgoraW5saW5pbmcuIAorPCEtLSBEb24ndCBlbnVtZXJhdGUgdGhlIG9wdGltaXphdGlvbnMgYnkgbmFtZSBoZXJlOyB3ZSB0cnkgdG8gYmUgLS0+Cis8IS0tIGZ1dHVyZS1jb21wYXRpYmxlIHdpdGggdGhpcyBtZWNoYW5pc20uIC0tPgorSWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgc2lkZS1lZmZlY3RzLCB0aGVyZSBhcmUgb3B0aW1pemF0aW9ucworb3RoZXIgdGhhbiBpbmxpbmluZyB0aGF0IGNhdXNlIGZ1bmN0aW9uIGNhbGxzIHRvIGJlIG9wdGltaXplZCBhd2F5LAorYWx0aG91Z2ggdGhlIGZ1bmN0aW9uIGNhbGwgaXMgbGl2ZS4gIFRvIGtlZXAgc3VjaCBjYWxscyBmcm9tIGJlaW5nCitvcHRpbWl6ZWQgYXdheSwgcHV0CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGFzbSAoIiIpOworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+KHNlZSA8YSBocmVmPSJFeHRlbmRlZC1Bc20uaHRtbCNFeHRlbmRlZC1Bc20iPkV4dGVuZGVkIEFzbTwvYT4pIGluIHRoZSBjYWxsZWQgZnVuY3Rpb24sIHRvIHNlcnZlIGFzIGEgc3BlY2lhbAorc2lkZS1lZmZlY3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT5ub2Nsb25lPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vY2xvbmVfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY0OSI+PC9hPlRoaXMgZnVuY3Rpb24gYXR0cmlidXRlIHByZXZlbnRzIGEgZnVuY3Rpb24gZnJvbSBiZWluZyBjb25zaWRlcmVkIGZvcgorY2xvbmluZyZtZGFzaDthIG1lY2hhbmlzbSB0aGF0IHByb2R1Y2VzIHNwZWNpYWxpemVkIGNvcGllcyBvZiBmdW5jdGlvbnMKK2FuZCB3aGljaCBpcyAoY3VycmVudGx5KSBwZXJmb3JtZWQgYnkgaW50ZXJwcm9jZWR1cmFsIGNvbnN0YW50Citwcm9wYWdhdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPm5vbm51bGwgKDwvY29kZT48dmFyPmFyZy1pbmRleDwvdmFyPjxjb2RlPiwgLi4uKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub25udWxsXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NTAiPjwvYT5UaGUgPGNvZGU+bm9ubnVsbDwvY29kZT4gYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IHNvbWUgZnVuY3Rpb24gcGFyYW1ldGVycyBzaG91bGQKK2JlIG5vbi1udWxsIHBvaW50ZXJzLiAgRm9yIGluc3RhbmNlLCB0aGUgZGVjbGFyYXRpb246CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZXh0ZXJuIHZvaWQgKgorICAgICAgICAgIG15X21lbWNweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygobm9ubnVsbCAoMSwgMikpKTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmNhdXNlcyB0aGUgY29tcGlsZXIgdG8gY2hlY2sgdGhhdCwgaW4gY2FsbHMgdG8gPGNvZGU+bXlfbWVtY3B5PC9jb2RlPiwKK2FyZ3VtZW50cyA8dmFyPmRlc3Q8L3Zhcj4gYW5kIDx2YXI+c3JjPC92YXI+IGFyZSBub24tbnVsbC4gIElmIHRoZSBjb21waWxlcgorZGV0ZXJtaW5lcyB0aGF0IGEgbnVsbCBwb2ludGVyIGlzIHBhc3NlZCBpbiBhbiBhcmd1bWVudCBzbG90IG1hcmtlZAorYXMgbm9uLW51bGwsIGFuZCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdub25udWxsPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIGVuYWJsZWQsIGEgd2FybmluZworaXMgaXNzdWVkLiAgVGhlIGNvbXBpbGVyIG1heSBhbHNvIGNob29zZSB0byBtYWtlIG9wdGltaXphdGlvbnMgYmFzZWQKK29uIHRoZSBrbm93bGVkZ2UgdGhhdCBjZXJ0YWluIGZ1bmN0aW9uIGFyZ3VtZW50cyB3aWxsIG5ldmVyIGJlIG51bGwuCisKKyAgICAgPHA+SWYgbm8gYXJndW1lbnQgaW5kZXggbGlzdCBpcyBnaXZlbiB0byB0aGUgPGNvZGU+bm9ubnVsbDwvY29kZT4gYXR0cmlidXRlLAorYWxsIHBvaW50ZXIgYXJndW1lbnRzIGFyZSBtYXJrZWQgYXMgbm9uLW51bGwuICBUbyBpbGx1c3RyYXRlLCB0aGUKK2ZvbGxvd2luZyBkZWNsYXJhdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBwcmV2aW91cyBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGV4dGVybiB2b2lkICoKKyAgICAgICAgICBteV9tZW1jcHkgKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbikKKyAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKG5vbm51bGwpKTsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPm5vcmV0dXJuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vcmV0dXJuXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NTEiPjwvYT5BIGZldyBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucywgc3VjaCBhcyA8Y29kZT5hYm9ydDwvY29kZT4gYW5kIDxjb2RlPmV4aXQ8L2NvZGU+LAorY2Fubm90IHJldHVybi4gIEdDQyBrbm93cyB0aGlzIGF1dG9tYXRpY2FsbHkuICBTb21lIHByb2dyYW1zIGRlZmluZQordGhlaXIgb3duIGZ1bmN0aW9ucyB0aGF0IG5ldmVyIHJldHVybi4gIFlvdSBjYW4gZGVjbGFyZSB0aGVtCis8Y29kZT5ub3JldHVybjwvY29kZT4gdG8gdGVsbCB0aGUgY29tcGlsZXIgdGhpcyBmYWN0LiAgRm9yIGV4YW1wbGUsCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdm9pZCBmYXRhbCAoKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKKyAgICAgICAgICAKKyAgICAgICAgICB2b2lkCisgICAgICAgICAgZmF0YWwgKC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLykKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPi4uLjwvc3Bhbj4gKi8gLyogPHNwYW4gY2xhc3M9InJvbWFuIj5QcmludCBlcnJvciBtZXNzYWdlLjwvc3Bhbj4gKi8gLyogPHNwYW4gY2xhc3M9InJvbWFuIj4uLi48L3NwYW4+ICovCisgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHA+VGhlIDxjb2RlPm5vcmV0dXJuPC9jb2RlPiBrZXl3b3JkIHRlbGxzIHRoZSBjb21waWxlciB0byBhc3N1bWUgdGhhdAorPGNvZGU+ZmF0YWw8L2NvZGU+IGNhbm5vdCByZXR1cm4uICBJdCBjYW4gdGhlbiBvcHRpbWl6ZSB3aXRob3V0IHJlZ2FyZCB0byB3aGF0Cit3b3VsZCBoYXBwZW4gaWYgPGNvZGU+ZmF0YWw8L2NvZGU+IGV2ZXIgZGlkIHJldHVybi4gIFRoaXMgbWFrZXMgc2xpZ2h0bHkKK2JldHRlciBjb2RlLiAgTW9yZSBpbXBvcnRhbnRseSwgaXQgaGVscHMgYXZvaWQgc3B1cmlvdXMgd2FybmluZ3Mgb2YKK3VuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgorCisgICAgIDxwPlRoZSA8Y29kZT5ub3JldHVybjwvY29kZT4ga2V5d29yZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGV4Y2VwdGlvbmFsIHBhdGggd2hlbiB0aGF0CithcHBsaWVzOiBhIDxjb2RlPm5vcmV0dXJuPC9jb2RlPi1tYXJrZWQgZnVuY3Rpb24gbWF5IHN0aWxsIHJldHVybiB0byB0aGUgY2FsbGVyCitieSB0aHJvd2luZyBhbiBleGNlcHRpb24gb3IgY2FsbGluZyA8Y29kZT5sb25nam1wPC9jb2RlPi4KKworICAgICA8cD5EbyBub3QgYXNzdW1lIHRoYXQgcmVnaXN0ZXJzIHNhdmVkIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGFyZQorcmVzdG9yZWQgYmVmb3JlIGNhbGxpbmcgdGhlIDxjb2RlPm5vcmV0dXJuPC9jb2RlPiBmdW5jdGlvbi4KKworICAgICA8cD5JdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBhIDxjb2RlPm5vcmV0dXJuPC9jb2RlPiBmdW5jdGlvbiB0byBoYXZlIGEgcmV0dXJuCit0eXBlIG90aGVyIHRoYW4gPGNvZGU+dm9pZDwvY29kZT4uCisKKyAgICAgPHA+VGhlIGF0dHJpYnV0ZSA8Y29kZT5ub3JldHVybjwvY29kZT4gaXMgbm90IGltcGxlbWVudGVkIGluIEdDQyB2ZXJzaW9ucworZWFybGllciB0aGFuIDIuNS4gIEFuIGFsdGVybmF0aXZlIHdheSB0byBkZWNsYXJlIHRoYXQgYSBmdW5jdGlvbiBkb2VzCitub3QgcmV0dXJuLCB3aGljaCB3b3JrcyBpbiB0aGUgY3VycmVudCB2ZXJzaW9uIGFuZCBpbiBzb21lIG9sZGVyCit2ZXJzaW9ucywgaXMgYXMgZm9sbG93czoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB0eXBlZGVmIHZvaWQgdm9pZGZuICgpOworICAgICAgICAgIAorICAgICAgICAgIHZvbGF0aWxlIHZvaWRmbiBmYXRhbDsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yayBpbiBHTlUgQysrLgorCisgICAgIDxicj48ZHQ+PGNvZGU+bm90aHJvdzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub3Rocm93XzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NTIiPjwvYT5UaGUgPGNvZGU+bm90aHJvdzwvY29kZT4gYXR0cmlidXRlIGlzIHVzZWQgdG8gaW5mb3JtIHRoZSBjb21waWxlciB0aGF0IGEKK2Z1bmN0aW9uIGNhbm5vdCB0aHJvdyBhbiBleGNlcHRpb24uICBGb3IgZXhhbXBsZSwgbW9zdCBmdW5jdGlvbnMgaW4KK3RoZSBzdGFuZGFyZCBDIGxpYnJhcnkgY2FuIGJlIGd1YXJhbnRlZWQgbm90IHRvIHRocm93IGFuIGV4Y2VwdGlvbgord2l0aCB0aGUgbm90YWJsZSBleGNlcHRpb25zIG9mIDxjb2RlPnFzb3J0PC9jb2RlPiBhbmQgPGNvZGU+YnNlYXJjaDwvY29kZT4gdGhhdAordGFrZSBmdW5jdGlvbiBwb2ludGVyIGFyZ3VtZW50cy4gIFRoZSA8Y29kZT5ub3Rocm93PC9jb2RlPiBhdHRyaWJ1dGUgaXMgbm90CitpbXBsZW1lbnRlZCBpbiBHQ0MgdmVyc2lvbnMgZWFybGllciB0aGFuIDMuMy4KKworICAgICA8YnI+PGR0Pjxjb2RlPm5vc2F2ZV9sb3dfcmVnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub3NhdmVfMDA1Zmxvd18wMDVmcmVnc18wMDdkLWF0dHJpYnV0ZS0yNjUzIj48L2E+VXNlIHRoaXMgYXR0cmlidXRlIG9uIFNIIHRhcmdldHMgdG8gaW5kaWNhdGUgdGhhdCBhbiA8Y29kZT5pbnRlcnJ1cHRfaGFuZGxlcjwvY29kZT4KK2Z1bmN0aW9uIHNob3VsZCBub3Qgc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlcnMgUjAuLlI3LiAgVGhpcyBjYW4gYmUgdXNlZCBvbiBTSDMqCithbmQgU0g0KiB0YXJnZXRzIHRoYXQgaGF2ZSBhIHNlY29uZCBSMC4uUjcgcmVnaXN0ZXIgYmFuayBmb3Igbm9uLXJlZW50cmFudAoraW50ZXJydXB0IGhhbmRsZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+b3B0aW1pemU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdib3B0aW1pemVfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY1NCI+PC9hPlRoZSA8Y29kZT5vcHRpbWl6ZTwvY29kZT4gYXR0cmlidXRlIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGF0IGEgZnVuY3Rpb24gaXMgdG8KK2JlIGNvbXBpbGVkIHdpdGggZGlmZmVyZW50IG9wdGltaXphdGlvbiBvcHRpb25zIHRoYW4gc3BlY2lmaWVkIG9uIHRoZQorY29tbWFuZCBsaW5lLiAgQXJndW1lbnRzIGNhbiBlaXRoZXIgYmUgbnVtYmVycyBvciBzdHJpbmdzLiAgTnVtYmVycworYXJlIGFzc3VtZWQgdG8gYmUgYW4gb3B0aW1pemF0aW9uIGxldmVsLiAgU3RyaW5ncyB0aGF0IGJlZ2luIHdpdGgKKzxjb2RlPk88L2NvZGU+IGFyZSBhc3N1bWVkIHRvIGJlIGFuIG9wdGltaXphdGlvbiBvcHRpb24sIHdoaWxlIG90aGVyIG9wdGlvbnMKK2FyZSBhc3N1bWVkIHRvIGJlIHVzZWQgd2l0aCBhIDxjb2RlPi1mPC9jb2RlPiBwcmVmaXguICBZb3UgY2FuIGFsc28gdXNlIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIEdDQyBvcHRpbWl6ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmFnbWEgdG8gc2V0IHRoZSBvcHRpbWl6YXRpb24gb3B0aW9ucwordGhhdCBhZmZlY3QgbW9yZSB0aGFuIG9uZSBmdW5jdGlvbi4gCitTZWUgPGEgaHJlZj0iRnVuY3Rpb24tU3BlY2lmaWMtT3B0aW9uLVByYWdtYXMuaHRtbCNGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcyI+RnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXM8L2E+LCBmb3IgZGV0YWlscyBhYm91dCB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBHQ0Mgb3B0aW1pemU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJhZ21hLgorCisgICAgIDxwPlRoaXMgY2FuIGJlIHVzZWQgZm9yIGluc3RhbmNlIHRvIGhhdmUgZnJlcXVlbnRseS1leGVjdXRlZCBmdW5jdGlvbnMKK2NvbXBpbGVkIHdpdGggbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBvcHRpb25zIHRoYXQgcHJvZHVjZSBmYXN0ZXIKK2FuZCBsYXJnZXIgY29kZSwgd2hpbGUgb3RoZXIgZnVuY3Rpb25zIGNhbiBiZSBjb21waWxlZCB3aXRoIGxlc3MKK2FnZ3Jlc3NpdmUgb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPk9TX21haW4vT1NfdGFzazwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JPU18wMDVmbWFpbl8wMDdkLUFWUi1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY1NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiT1NfMDA1ZnRhc2tfMDA3ZC1BVlItZnVuY3Rpb24tYXR0cmlidXRlLTI2NTYiPjwvYT5PbiBBVlIsIGZ1bmN0aW9ucyB3aXRoIHRoZSA8Y29kZT5PU19tYWluPC9jb2RlPiBvciA8Y29kZT5PU190YXNrPC9jb2RlPiBhdHRyaWJ1dGUKK2RvIG5vdCBzYXZlL3Jlc3RvcmUgYW55IGNhbGwtc2F2ZWQgcmVnaXN0ZXIgaW4gdGhlaXIgcHJvbG9ndWUvZXBpbG9ndWUuCisKKyAgICAgPHA+VGhlIDxjb2RlPk9TX21haW48L2NvZGU+IGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB3aGVuIHRoZXJlIDxlbT5pcworZ3VhcmFudGVlPC9lbT4gdGhhdCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhdCB0aGUgdGltZSB3aGVuIHRoZSBmdW5jdGlvbgoraXMgZW50ZXJlZC4gIFRoaXMgc2F2ZXMgcmVzb3VyY2VzIHdoZW4gdGhlIHN0YWNrIHBvaW50ZXIgaGFzIHRvIGJlCitjaGFuZ2VkIHRvIHNldCB1cCBhIGZyYW1lIGZvciBsb2NhbCB2YXJpYWJsZXMuCisKKyAgICAgPHA+VGhlIDxjb2RlPk9TX3Rhc2s8L2NvZGU+IGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB3aGVuIHRoZXJlIGlzIDxlbT5ubworZ3VhcmFudGVlPC9lbT4gdGhhdCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhdCB0aGF0IHRpbWUgd2hlbiB0aGUgZnVuY3Rpb24KK2lzIGVudGVyZWQgbGlrZSBmb3IsIGUuZy4gdGFzayBmdW5jdGlvbnMgaW4gYSBtdWx0aS10aHJlYWRpbmcgb3BlcmF0aW5nCitzeXN0ZW0uIEluIHRoYXQgY2FzZSwgY2hhbmdpbmcgdGhlIHN0YWNrIHBvaW50ZXIgcmVnaXN0ZXIgaXMKK2d1YXJkZWQgYnkgc2F2ZS9jbGVhci9yZXN0b3JlIG9mIHRoZSBnbG9iYWwgaW50ZXJydXB0IGVuYWJsZSBmbGFnLgorCisgICAgIDxwPlRoZSBkaWZmZXJlbmNlcyB0byB0aGUgPGNvZGU+bmFrZWQ8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZSBhcmU6CisgICAgICAgICAgPHVsPgorPGxpPjxjb2RlPm5ha2VkPC9jb2RlPiBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYSByZXR1cm4gaW5zdHJ1Y3Rpb24gd2hlcmVhcworPGNvZGU+T1NfbWFpbjwvY29kZT4gYW5kIDxjb2RlPk9TX3Rhc2s8L2NvZGU+IGZ1bmN0aW9ucyBoYXZlIGEgPGNvZGU+UkVUPC9jb2RlPiBvcgorPGNvZGU+UkVUSTwvY29kZT4gcmV0dXJuIGluc3RydWN0aW9uLiAKKzxsaT48Y29kZT5uYWtlZDwvY29kZT4gZnVuY3Rpb25zIGRvIG5vdCBzZXQgdXAgYSBmcmFtZSBmb3IgbG9jYWwgdmFyaWFibGVzCitvciBhIGZyYW1lIHBvaW50ZXIgd2hlcmVhcyA8Y29kZT5PU19tYWluPC9jb2RlPiBhbmQgPGNvZGU+T1NfdGFzazwvY29kZT4gZG8gdGhpcworYXMgbmVlZGVkLiAKKzwvdWw+CisKKyAgICAgPGJyPjxkdD48Y29kZT5wY3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicGNzXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NTciPjwvYT4KK1RoZSA8Y29kZT5wY3M8L2NvZGU+IGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KK3VzZWQgZm9yIGEgZnVuY3Rpb24gb24gQVJNLiAgVGhlIGF0dHJpYnV0ZSB0YWtlcyBhbiBhcmd1bWVudCB0aGF0IHNwZWNpZmllcwordGhlIGNhbGxpbmcgY29udmVudGlvbiB0byB1c2UuCisKKyAgICAgPHA+V2hlbiBjb21waWxpbmcgdXNpbmcgdGhlIEFBUENTIEFCSSAob3IgYSB2YXJpYW50IG9mIGl0KSB0aGVuIHZhbGlkCit2YWx1ZXMgZm9yIHRoZSBhcmd1bWVudCBhcmUgPGNvZGU+ImFhcGNzIjwvY29kZT4gYW5kIDxjb2RlPiJhYXBjcy12ZnAiPC9jb2RlPi4gIEluCitvcmRlciB0byB1c2UgYSB2YXJpYW50IG90aGVyIHRoYW4gPGNvZGU+ImFhcGNzIjwvY29kZT4gdGhlbiB0aGUgY29tcGlsZXIgbXVzdAorYmUgcGVybWl0dGVkIHRvIHVzZSB0aGUgYXBwcm9wcmlhdGUgY28tcHJvY2Vzc29yIHJlZ2lzdGVycyAoaS5lLiwgdGhlCitWRlAgcmVnaXN0ZXJzIG11c3QgYmUgYXZhaWxhYmxlIGluIG9yZGVyIHRvIHVzZSA8Y29kZT4iYWFwY3MtdmZwIjwvY29kZT4pLiAKK0ZvciBleGFtcGxlLAorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC8qIEFyZ3VtZW50IHBhc3NlZCBpbiByMCwgYW5kIHJlc3VsdCByZXR1cm5lZCBpbiByMCtyMS4gICovCisgICAgICAgICAgZG91YmxlIGYyZCAoZmxvYXQpIF9fYXR0cmlidXRlX18oKHBjcygiYWFwY3MiKSkpOworPC9wcmU+CisgICAgIDxwPlZhcmlhZGljIGZ1bmN0aW9ucyBhbHdheXMgdXNlIHRoZSA8Y29kZT4iYWFwY3MiPC9jb2RlPiBjYWxsaW5nIGNvbnZlbnRpb24gYW5kCit0aGUgY29tcGlsZXIgcmVqZWN0cyBhdHRlbXB0cyB0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+cHVyZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwdXJlXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NTgiPjwvYT5NYW55IGZ1bmN0aW9ucyBoYXZlIG5vIGVmZmVjdHMgZXhjZXB0IHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZWlyCityZXR1cm4gdmFsdWUgZGVwZW5kcyBvbmx5IG9uIHRoZSBwYXJhbWV0ZXJzIGFuZC9vciBnbG9iYWwgdmFyaWFibGVzLiAKK1N1Y2ggYSBmdW5jdGlvbiBjYW4gYmUgc3ViamVjdAordG8gY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24gYW5kIGxvb3Agb3B0aW1pemF0aW9uIGp1c3QgYXMgYW4KK2FyaXRobWV0aWMgb3BlcmF0b3Igd291bGQgYmUuICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGRlY2xhcmVkCit3aXRoIHRoZSBhdHRyaWJ1dGUgPGNvZGU+cHVyZTwvY29kZT4uICBGb3IgZXhhbXBsZSwKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBpbnQgc3F1YXJlIChpbnQpIF9fYXR0cmlidXRlX18gKChwdXJlKSk7Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5zYXlzIHRoYXQgdGhlIGh5cG90aGV0aWNhbCBmdW5jdGlvbiA8Y29kZT5zcXVhcmU8L2NvZGU+IGlzIHNhZmUgdG8gY2FsbAorZmV3ZXIgdGltZXMgdGhhbiB0aGUgcHJvZ3JhbSBzYXlzLgorCisgICAgIDxwPlNvbWUgb2YgY29tbW9uIGV4YW1wbGVzIG9mIHB1cmUgZnVuY3Rpb25zIGFyZSA8Y29kZT5zdHJsZW48L2NvZGU+IG9yIDxjb2RlPm1lbWNtcDwvY29kZT4uIAorSW50ZXJlc3Rpbmcgbm9uLXB1cmUgZnVuY3Rpb25zIGFyZSBmdW5jdGlvbnMgd2l0aCBpbmZpbml0ZSBsb29wcyBvciB0aG9zZQorZGVwZW5kaW5nIG9uIHZvbGF0aWxlIG1lbW9yeSBvciBvdGhlciBzeXN0ZW0gcmVzb3VyY2UsIHRoYXQgbWF5IGNoYW5nZSBiZXR3ZWVuCit0d28gY29uc2VjdXRpdmUgY2FsbHMgKHN1Y2ggYXMgPGNvZGU+ZmVvZjwvY29kZT4gaW4gYSBtdWx0aXRocmVhZGluZyBlbnZpcm9ubWVudCkuCisKKyAgICAgPHA+VGhlIGF0dHJpYnV0ZSA8Y29kZT5wdXJlPC9jb2RlPiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gR0NDIHZlcnNpb25zIGVhcmxpZXIKK3RoYW4gMi45Ni4KKworICAgICA8YnI+PGR0Pjxjb2RlPmhvdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Job3RfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY1OSI+PC9hPlRoZSA8Y29kZT5ob3Q8L2NvZGU+IGF0dHJpYnV0ZSBvbiBhIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5mb3JtIHRoZSBjb21waWxlciB0aGF0Cit0aGUgZnVuY3Rpb24gaXMgYSBob3Qgc3BvdCBvZiB0aGUgY29tcGlsZWQgcHJvZ3JhbS4gIFRoZSBmdW5jdGlvbiBpcworb3B0aW1pemVkIG1vcmUgYWdncmVzc2l2ZWx5IGFuZCBvbiBtYW55IHRhcmdldCBpdCBpcyBwbGFjZWQgaW50byBzcGVjaWFsCitzdWJzZWN0aW9uIG9mIHRoZSB0ZXh0IHNlY3Rpb24gc28gYWxsIGhvdCBmdW5jdGlvbnMgYXBwZWFycyBjbG9zZSB0b2dldGhlcgoraW1wcm92aW5nIGxvY2FsaXR5LgorCisgICAgIDxwPldoZW4gcHJvZmlsZSBmZWVkYmFjayBpcyBhdmFpbGFibGUsIHZpYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtdXNlPC9zcGFuPjwvc2FtcD4sIGhvdCBmdW5jdGlvbnMKK2FyZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGFuZCB0aGlzIGF0dHJpYnV0ZSBpcyBpZ25vcmVkLgorCisgICAgIDxwPlRoZSA8Y29kZT5ob3Q8L2NvZGU+IGF0dHJpYnV0ZSBvbiBmdW5jdGlvbnMgaXMgbm90IGltcGxlbWVudGVkIGluIEdDQyB2ZXJzaW9ucworZWFybGllciB0aGFuIDQuMy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmhvdF8wMDdkLWxhYmVsLWF0dHJpYnV0ZS0yNjYwIj48L2E+VGhlIDxjb2RlPmhvdDwvY29kZT4gYXR0cmlidXRlIG9uIGEgbGFiZWwgaXMgdXNlZCB0byBpbmZvcm0gdGhlIGNvbXBpbGVyIHRoYXQKK3BhdGggZm9sbG93aW5nIHRoZSBsYWJlbCBhcmUgbW9yZSBsaWtlbHkgdGhhbiBwYXRocyB0aGF0IGFyZSBub3Qgc28KK2Fubm90YXRlZC4gIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgaW4gY2FzZXMgd2hlcmUgPGNvZGU+X19idWlsdGluX2V4cGVjdDwvY29kZT4KK2Nhbm5vdCBiZSB1c2VkLCBmb3IgaW5zdGFuY2Ugd2l0aCBjb21wdXRlZCBnb3RvIG9yIDxjb2RlPmFzbSBnb3RvPC9jb2RlPi4KKworICAgICA8cD5UaGUgPGNvZGU+aG90PC9jb2RlPiBhdHRyaWJ1dGUgb24gbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBHQ0MgdmVyc2lvbnMKK2VhcmxpZXIgdGhhbiA0LjguCisKKyAgICAgPGJyPjxkdD48Y29kZT5jb2xkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNvbGRfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY2MSI+PC9hPlRoZSA8Y29kZT5jb2xkPC9jb2RlPiBhdHRyaWJ1dGUgb24gZnVuY3Rpb25zIGlzIHVzZWQgdG8gaW5mb3JtIHRoZSBjb21waWxlciB0aGF0Cit0aGUgZnVuY3Rpb24gaXMgdW5saWtlbHkgdG8gYmUgZXhlY3V0ZWQuICBUaGUgZnVuY3Rpb24gaXMgb3B0aW1pemVkIGZvcgorc2l6ZSByYXRoZXIgdGhhbiBzcGVlZCBhbmQgb24gbWFueSB0YXJnZXRzIGl0IGlzIHBsYWNlZCBpbnRvIHNwZWNpYWwKK3N1YnNlY3Rpb24gb2YgdGhlIHRleHQgc2VjdGlvbiBzbyBhbGwgY29sZCBmdW5jdGlvbnMgYXBwZWFycyBjbG9zZSB0b2dldGhlcgoraW1wcm92aW5nIGNvZGUgbG9jYWxpdHkgb2Ygbm9uLWNvbGQgcGFydHMgb2YgcHJvZ3JhbS4gIFRoZSBwYXRocyBsZWFkaW5nCit0byBjYWxsIG9mIGNvbGQgZnVuY3Rpb25zIHdpdGhpbiBjb2RlIGFyZSBtYXJrZWQgYXMgdW5saWtlbHkgYnkgdGhlIGJyYW5jaAorcHJlZGljdGlvbiBtZWNoYW5pc20uICBJdCBpcyB0aHVzIHVzZWZ1bCB0byBtYXJrIGZ1bmN0aW9ucyB1c2VkIHRvIGhhbmRsZQordW5saWtlbHkgY29uZGl0aW9ucywgc3VjaCBhcyA8Y29kZT5wZXJyb3I8L2NvZGU+LCBhcyBjb2xkIHRvIGltcHJvdmUgb3B0aW1pemF0aW9uCitvZiBob3QgZnVuY3Rpb25zIHRoYXQgZG8gY2FsbCBtYXJrZWQgZnVuY3Rpb25zIGluIHJhcmUgb2NjYXNpb25zLgorCisgICAgIDxwPldoZW4gcHJvZmlsZSBmZWVkYmFjayBpcyBhdmFpbGFibGUsIHZpYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtdXNlPC9zcGFuPjwvc2FtcD4sIGNvbGQgZnVuY3Rpb25zCithcmUgYXV0b21hdGljYWxseSBkZXRlY3RlZCBhbmQgdGhpcyBhdHRyaWJ1dGUgaXMgaWdub3JlZC4KKworICAgICA8cD5UaGUgPGNvZGU+Y29sZDwvY29kZT4gYXR0cmlidXRlIG9uIGZ1bmN0aW9ucyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gR0NDIHZlcnNpb25zCitlYXJsaWVyIHRoYW4gNC4zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiY29sZF8wMDdkLWxhYmVsLWF0dHJpYnV0ZS0yNjYyIj48L2E+VGhlIDxjb2RlPmNvbGQ8L2NvZGU+IGF0dHJpYnV0ZSBvbiBsYWJlbHMgaXMgdXNlZCB0byBpbmZvcm0gdGhlIGNvbXBpbGVyIHRoYXQKK3RoZSBwYXRoIGZvbGxvd2luZyB0aGUgbGFiZWwgaXMgdW5saWtlbHkgdG8gYmUgZXhlY3V0ZWQuICBUaGlzIGF0dHJpYnV0ZQoraXMgdXNlZCBpbiBjYXNlcyB3aGVyZSA8Y29kZT5fX2J1aWx0aW5fZXhwZWN0PC9jb2RlPiBjYW5ub3QgYmUgdXNlZCwgZm9yIGluc3RhbmNlCit3aXRoIGNvbXB1dGVkIGdvdG8gb3IgPGNvZGU+YXNtIGdvdG88L2NvZGU+LgorCisgICAgIDxwPlRoZSA8Y29kZT5jb2xkPC9jb2RlPiBhdHRyaWJ1dGUgb24gbGFiZWxzIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBHQ0MgdmVyc2lvbnMKK2VhcmxpZXIgdGhhbiA0LjguCisKKyAgICAgPGJyPjxkdD48Y29kZT5ub19zYW5pdGl6ZV9hZGRyZXNzPC9jb2RlPjxkdD48Y29kZT5ub19hZGRyZXNzX3NhZmV0eV9hbmFseXNpczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub18wMDVmc2FuaXRpemVfMDA1ZmFkZHJlc3NfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY2MyI+PC9hPlRoZSA8Y29kZT5ub19zYW5pdGl6ZV9hZGRyZXNzPC9jb2RlPiBhdHRyaWJ1dGUgb24gZnVuY3Rpb25zIGlzIHVzZWQKK3RvIGluZm9ybSB0aGUgY29tcGlsZXIgdGhhdCBpdCBzaG91bGQgbm90IGluc3RydW1lbnQgbWVtb3J5IGFjY2Vzc2VzCitpbiB0aGUgZnVuY3Rpb24gd2hlbiBjb21waWxpbmcgd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzYW5pdGl6ZT1hZGRyZXNzPC9zcGFuPjwvc2FtcD4gb3B0aW9uLiAKK1RoZSA8Y29kZT5ub19hZGRyZXNzX3NhZmV0eV9hbmFseXNpczwvY29kZT4gaXMgYSBkZXByZWNhdGVkIGFsaWFzIG9mIHRoZQorPGNvZGU+bm9fc2FuaXRpemVfYWRkcmVzczwvY29kZT4gYXR0cmlidXRlLCBuZXcgY29kZSBzaG91bGQgdXNlCis8Y29kZT5ub19zYW5pdGl6ZV9hZGRyZXNzPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPnJlZ3Bhcm0gKDwvY29kZT48dmFyPm51bWJlcjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicmVncGFybV8wMDdkLWF0dHJpYnV0ZS0yNjY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25zLXRoYXQtYXJlLXBhc3NlZC1hcmd1bWVudHMtaW4tcmVnaXN0ZXJzLW9uLXRoZS0zODYtMjY2NSI+PC9hPk9uIHRoZSBJbnRlbCAzODYsIHRoZSA8Y29kZT5yZWdwYXJtPC9jb2RlPiBhdHRyaWJ1dGUgY2F1c2VzIHRoZSBjb21waWxlciB0bworcGFzcyBhcmd1bWVudHMgbnVtYmVyIG9uZSB0byA8dmFyPm51bWJlcjwvdmFyPiBpZiB0aGV5IGFyZSBvZiBpbnRlZ3JhbCB0eXBlCitpbiByZWdpc3RlcnMgRUFYLCBFRFgsIGFuZCBFQ1ggaW5zdGVhZCBvZiBvbiB0aGUgc3RhY2suICBGdW5jdGlvbnMgdGhhdAordGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMgY29udGludWUgdG8gYmUgcGFzc2VkIGFsbCBvZiB0aGVpcgorYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KKworICAgICA8cD5CZXdhcmUgdGhhdCBvbiBzb21lIEVMRiBzeXN0ZW1zIHRoaXMgYXR0cmlidXRlIGlzIHVuc3VpdGFibGUgZm9yCitnbG9iYWwgZnVuY3Rpb25zIGluIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCBsYXp5IGJpbmRpbmcgKHdoaWNoIGlzIHRoZQorZGVmYXVsdCkuICBMYXp5IGJpbmRpbmcgc2VuZHMgdGhlIGZpcnN0IGNhbGwgdmlhIHJlc29sdmluZyBjb2RlIGluCit0aGUgbG9hZGVyLCB3aGljaCBtaWdodCBhc3N1bWUgRUFYLCBFRFggYW5kIEVDWCBjYW4gYmUgY2xvYmJlcmVkLCBhcworcGVyIHRoZSBzdGFuZGFyZCBjYWxsaW5nIGNvbnZlbnRpb25zLiAgU29sYXJpcyA4IGlzIGFmZmVjdGVkIGJ5IHRoaXMuIAorU3lzdGVtcyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5IHZlcnNpb24gMi4xIG9yIGhpZ2hlcgorYW5kIEZyZWVCU0QgYXJlIGJlbGlldmVkIHRvIGJlCitzYWZlIHNpbmNlIHRoZSBsb2FkZXJzIHRoZXJlIHNhdmUgRUFYLCBFRFggYW5kIEVDWC4gIChMYXp5IGJpbmRpbmcgY2FuIGJlCitkaXNhYmxlZCB3aXRoIHRoZSBsaW5rZXIgb3IgdGhlIGxvYWRlciBpZiBkZXNpcmVkLCB0byBhdm9pZCB0aGUKK3Byb2JsZW0uKQorCisgICAgIDxicj48ZHQ+PGNvZGU+c3NlcmVncGFybTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jzc2VyZWdwYXJtXzAwN2QtYXR0cmlidXRlLTI2NjYiPjwvYT5PbiB0aGUgSW50ZWwgMzg2IHdpdGggU1NFIHN1cHBvcnQsIHRoZSA8Y29kZT5zc2VyZWdwYXJtPC9jb2RlPiBhdHRyaWJ1dGUKK2NhdXNlcyB0aGUgY29tcGlsZXIgdG8gcGFzcyB1cCB0byAzIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cyBpbgorU1NFIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIG9uIHRoZSBzdGFjay4gIEZ1bmN0aW9ucyB0aGF0IHRha2UgYQordmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBjb250aW51ZSB0byBwYXNzIGFsbCBvZiB0aGVpcgorZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4KKworICAgICA8YnI+PGR0Pjxjb2RlPmZvcmNlX2FsaWduX2FyZ19wb2ludGVyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZvcmNlXzAwNWZhbGlnbl8wMDVmYXJnXzAwNWZwb2ludGVyXzAwN2QtYXR0cmlidXRlLTI2NjciPjwvYT5PbiB0aGUgSW50ZWwgeDg2LCB0aGUgPGNvZGU+Zm9yY2VfYWxpZ25fYXJnX3BvaW50ZXI8L2NvZGU+IGF0dHJpYnV0ZSBtYXkgYmUKK2FwcGxpZWQgdG8gaW5kaXZpZHVhbCBmdW5jdGlvbiBkZWZpbml0aW9ucywgZ2VuZXJhdGluZyBhbiBhbHRlcm5hdGUKK3Byb2xvZ3VlIGFuZCBlcGlsb2d1ZSB0aGF0IHJlYWxpZ25zIHRoZSBydW4tdGltZSBzdGFjayBpZiBuZWNlc3NhcnkuIAorVGhpcyBzdXBwb3J0cyBtaXhpbmcgbGVnYWN5IGNvZGVzIHRoYXQgcnVuIHdpdGggYSA0LWJ5dGUgYWxpZ25lZCBzdGFjaword2l0aCBtb2Rlcm4gY29kZXMgdGhhdCBrZWVwIGEgMTYtYnl0ZSBzdGFjayBmb3IgU1NFIGNvbXBhdGliaWxpdHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5yZW5lc2FzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnJlbmVzYXNfMDA3ZC1hdHRyaWJ1dGUtMjY2OCI+PC9hPk9uIFNIIHRhcmdldHMgdGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIG9yIHN0cnVjdCBmb2xsb3dzIHRoZQorUmVuZXNhcyBBQkkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5yZXNiYW5rPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnJlc2JhbmtfMDA3ZC1hdHRyaWJ1dGUtMjY2OSI+PC9hPk9uIHRoZSBTSDJBIHRhcmdldCwgdGhpcyBhdHRyaWJ1dGUgZW5hYmxlcyB0aGUgaGlnaC1zcGVlZCByZWdpc3Rlcgorc2F2aW5nIGFuZCByZXN0b3JhdGlvbiB1c2luZyBhIHJlZ2lzdGVyIGJhbmsgZm9yIDxjb2RlPmludGVycnVwdF9oYW5kbGVyPC9jb2RlPgorcm91dGluZXMuICBTYXZpbmcgdG8gdGhlIGJhbmsgaXMgcGVyZm9ybWVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIENQVQorYWNjZXB0cyBhbiBpbnRlcnJ1cHQgdGhhdCB1c2VzIGEgcmVnaXN0ZXIgYmFuay4KKworICAgICA8cD5UaGUgbmluZXRlZW4gMzItYml0IHJlZ2lzdGVycyBjb21wcmlzaW5nIGdlbmVyYWwgcmVnaXN0ZXIgUjAgdG8gUjE0LAorY29udHJvbCByZWdpc3RlciBHQlIsIGFuZCBzeXN0ZW0gcmVnaXN0ZXJzIE1BQ0gsIE1BQ0wsIGFuZCBQUiBhbmQgdGhlCit2ZWN0b3IgdGFibGUgYWRkcmVzcyBvZmZzZXQgYXJlIHNhdmVkIGludG8gYSByZWdpc3RlciBiYW5rLiAgUmVnaXN0ZXIKK2JhbmtzIGFyZSBzdGFja2VkIGluIGZpcnN0LWluIGxhc3Qtb3V0IChGSUxPKSBzZXF1ZW5jZS4gIFJlc3RvcmF0aW9uCitmcm9tIHRoZSBiYW5rIGlzIGV4ZWN1dGVkIGJ5IGlzc3VpbmcgYSBSRVNCQU5LIGluc3RydWN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+cmV0dXJuc190d2ljZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZXR1cm5zXzAwNWZ0d2ljZV8wMDdkLWF0dHJpYnV0ZS0yNjcwIj48L2E+VGhlIDxjb2RlPnJldHVybnNfdHdpY2U8L2NvZGU+IGF0dHJpYnV0ZSB0ZWxscyB0aGUgY29tcGlsZXIgdGhhdCBhIGZ1bmN0aW9uIG1heQorcmV0dXJuIG1vcmUgdGhhbiBvbmUgdGltZS4gIFRoZSBjb21waWxlciBlbnN1cmVzIHRoYXQgYWxsIHJlZ2lzdGVycworYXJlIGRlYWQgYmVmb3JlIGNhbGxpbmcgc3VjaCBhIGZ1bmN0aW9uIGFuZCBlbWl0cyBhIHdhcm5pbmcgYWJvdXQKK3RoZSB2YXJpYWJsZXMgdGhhdCBtYXkgYmUgY2xvYmJlcmVkIGFmdGVyIHRoZSBzZWNvbmQgcmV0dXJuIGZyb20gdGhlCitmdW5jdGlvbi4gIEV4YW1wbGVzIG9mIHN1Y2ggZnVuY3Rpb25zIGFyZSA8Y29kZT5zZXRqbXA8L2NvZGU+IGFuZCA8Y29kZT52Zm9yazwvY29kZT4uIAorVGhlIDxjb2RlPmxvbmdqbXA8L2NvZGU+LWxpa2UgY291bnRlcnBhcnQgb2Ygc3VjaCBmdW5jdGlvbiwgaWYgYW55LCBtaWdodCBuZWVkCit0byBiZSBtYXJrZWQgd2l0aCB0aGUgPGNvZGU+bm9yZXR1cm48L2NvZGU+IGF0dHJpYnV0ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNhdmVhbGw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXNhdmUtYWxsLXJlZ2lzdGVycy1vbi10aGUtQmxhY2tmaW5fMDAyYy1IOF8wMDJmMzAwXzAwMmMtSDhfMDAyZjMwMEhfMDAyYy1hbmQtSDhTLTI2NzEiPjwvYT5Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIEJsYWNrZmluLCBIOC8zMDAsIEg4LzMwMEgsIGFuZCBIOFMgdG8gaW5kaWNhdGUgdGhhdAorYWxsIHJlZ2lzdGVycyBleGNlcHQgdGhlIHN0YWNrIHBvaW50ZXIgc2hvdWxkIGJlIHNhdmVkIGluIHRoZSBwcm9sb2d1ZQorcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgYXJlIHVzZWQgb3Igbm90LgorCisgICAgIDxicj48ZHQ+PGNvZGU+c2F2ZV92b2xhdGlsZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXNhdmUtdm9sYXRpbGUtcmVnaXN0ZXJzLW9uLXRoZS1NaWNyb0JsYXplLTI2NzIiPjwvYT5Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIE1pY3JvQmxhemUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZnVuY3Rpb24gaXMKK2FuIGludGVycnVwdCBoYW5kbGVyLiAgQWxsIHZvbGF0aWxlIHJlZ2lzdGVycyAoaW4gYWRkaXRpb24gdG8gbm9uLXZvbGF0aWxlCityZWdpc3RlcnMpIGFyZSBzYXZlZCBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuICBJZiB0aGUgZnVuY3Rpb24gaXMgYSBsZWFmCitmdW5jdGlvbiwgb25seSB2b2xhdGlsZXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gYXJlIHNhdmVkLiAgQSBub3JtYWwgZnVuY3Rpb24KK3JldHVybiBpcyBnZW5lcmF0ZWQgaW5zdGVhZCBvZiBhIHJldHVybiBmcm9tIGludGVycnVwdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNlY3Rpb24gKCI8L2NvZGU+PHZhcj5zZWN0aW9uLW5hbWU8L3Zhcj48Y29kZT4iKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZWN0aW9uXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NzMiPjwvYT5Ob3JtYWxseSwgdGhlIGNvbXBpbGVyIHBsYWNlcyB0aGUgY29kZSBpdCBnZW5lcmF0ZXMgaW4gdGhlIDxjb2RlPnRleHQ8L2NvZGU+IHNlY3Rpb24uIAorU29tZXRpbWVzLCBob3dldmVyLCB5b3UgbmVlZCBhZGRpdGlvbmFsIHNlY3Rpb25zLCBvciB5b3UgbmVlZCBjZXJ0YWluCitwYXJ0aWN1bGFyIGZ1bmN0aW9ucyB0byBhcHBlYXIgaW4gc3BlY2lhbCBzZWN0aW9ucy4gIFRoZSA8Y29kZT5zZWN0aW9uPC9jb2RlPgorYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IGEgZnVuY3Rpb24gbGl2ZXMgaW4gYSBwYXJ0aWN1bGFyIHNlY3Rpb24uIAorRm9yIGV4YW1wbGUsIHRoZSBkZWNsYXJhdGlvbjoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBleHRlcm4gdm9pZCBmb29iYXIgKHZvaWQpIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiYmFyIikpKTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPnB1dHMgdGhlIGZ1bmN0aW9uIDxjb2RlPmZvb2JhcjwvY29kZT4gaW4gdGhlIDxjb2RlPmJhcjwvY29kZT4gc2VjdGlvbi4KKworICAgICA8cD5Tb21lIGZpbGUgZm9ybWF0cyBkbyBub3Qgc3VwcG9ydCBhcmJpdHJhcnkgc2VjdGlvbnMgc28gdGhlIDxjb2RlPnNlY3Rpb248L2NvZGU+CithdHRyaWJ1dGUgaXMgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAKK0lmIHlvdSBuZWVkIHRvIG1hcCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIGEgbW9kdWxlIHRvIGEgcGFydGljdWxhcgorc2VjdGlvbiwgY29uc2lkZXIgdXNpbmcgdGhlIGZhY2lsaXRpZXMgb2YgdGhlIGxpbmtlciBpbnN0ZWFkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+c2VudGluZWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic2VudGluZWxfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY3NCI+PC9hPlRoaXMgZnVuY3Rpb24gYXR0cmlidXRlIGVuc3VyZXMgdGhhdCBhIHBhcmFtZXRlciBpbiBhIGZ1bmN0aW9uIGNhbGwgaXMKK2FuIGV4cGxpY2l0IDxjb2RlPk5VTEw8L2NvZGU+LiAgVGhlIGF0dHJpYnV0ZSBpcyBvbmx5IHZhbGlkIG9uIHZhcmlhZGljCitmdW5jdGlvbnMuICBCeSBkZWZhdWx0LCB0aGUgc2VudGluZWwgaXMgbG9jYXRlZCBhdCBwb3NpdGlvbiB6ZXJvLCB0aGUKK2xhc3QgcGFyYW1ldGVyIG9mIHRoZSBmdW5jdGlvbiBjYWxsLiAgSWYgYW4gb3B0aW9uYWwgaW50ZWdlciBwb3NpdGlvbgorYXJndW1lbnQgUCBpcyBzdXBwbGllZCB0byB0aGUgYXR0cmlidXRlLCB0aGUgc2VudGluZWwgbXVzdCBiZSBsb2NhdGVkIGF0Citwb3NpdGlvbiBQIGNvdW50aW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBlbmQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHNlbnRpbmVsKSkKKyAgICAgICAgICBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHNlbnRpbmVsKDApKSkKKzwvcHJlPgorICAgICA8cD5UaGUgYXR0cmlidXRlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHdpdGggYSBwb3NpdGlvbiBvZiAwIGZvciB0aGUgYnVpbHQtaW4KK2Z1bmN0aW9ucyA8Y29kZT5leGVjbDwvY29kZT4gYW5kIDxjb2RlPmV4ZWNscDwvY29kZT4uICBUaGUgYnVpbHQtaW4gZnVuY3Rpb24KKzxjb2RlPmV4ZWNsZTwvY29kZT4gaGFzIHRoZSBhdHRyaWJ1dGUgc2V0IHdpdGggYSBwb3NpdGlvbiBvZiAxLgorCisgICAgIDxwPkEgdmFsaWQgPGNvZGU+TlVMTDwvY29kZT4gaW4gdGhpcyBjb250ZXh0IGlzIGRlZmluZWQgYXMgemVybyB3aXRoIGFueSBwb2ludGVyCit0eXBlLiAgSWYgeW91ciBzeXN0ZW0gZGVmaW5lcyB0aGUgPGNvZGU+TlVMTDwvY29kZT4gbWFjcm8gd2l0aCBhbiBpbnRlZ2VyIHR5cGUKK3RoZW4geW91IG5lZWQgdG8gYWRkIGFuIGV4cGxpY2l0IGNhc3QuICBHQ0MgcmVwbGFjZXMgPGNvZGU+c3RkZGVmLmg8L2NvZGU+Cit3aXRoIGEgY29weSB0aGF0IHJlZGVmaW5lcyBOVUxMIGFwcHJvcHJpYXRlbHkuCisKKyAgICAgPHA+VGhlIHdhcm5pbmdzIGZvciBtaXNzaW5nIG9yIGluY29ycmVjdCBzZW50aW5lbHMgYXJlIGVuYWJsZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNob3J0X2NhbGw8L2NvZGU+PGRkPlNlZSA8Y29kZT5sb25nX2NhbGwvc2hvcnRfY2FsbDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5zaG9ydGNhbGw8L2NvZGU+PGRkPlNlZSA8Y29kZT5sb25nY2FsbC9zaG9ydGNhbGw8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+c2lnbmFsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1pbnRlcnJ1cHQtaGFuZGxlci1mdW5jdGlvbnMtb24tdGhlLUFWUi1wcm9jZXNzb3JzLTI2NzUiPjwvYT5Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIEFWUiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzcGVjaWZpZWQKK2Z1bmN0aW9uIGlzIGFuIGludGVycnVwdCBoYW5kbGVyLiAgVGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBmdW5jdGlvbgorZW50cnkgYW5kIGV4aXQgc2VxdWVuY2VzIHN1aXRhYmxlIGZvciB1c2UgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgd2hlbiB0aGlzCithdHRyaWJ1dGUgaXMgcHJlc2VudC4KKworICAgICA8cD5TZWUgYWxzbyB0aGUgPGNvZGU+aW50ZXJydXB0PC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGUuCisKKyAgICAgPHA+VGhlIEFWUiBoYXJkd2FyZSBnbG9iYWxseSBkaXNhYmxlcyBpbnRlcnJ1cHRzIHdoZW4gYW4gaW50ZXJydXB0IGlzIGV4ZWN1dGVkLiAKK0ludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGggdGhlIDxjb2RlPnNpZ25hbDwvY29kZT4gYXR0cmlidXRlCitkbyBub3QgcmUtZW5hYmxlIGludGVycnVwdHMuICBJdCBpcyBzYXZlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIGluIGEKKzxjb2RlPnNpZ25hbDwvY29kZT4gaGFuZGxlci4gIFRoaXMgJmxkcXVvO3NhdmUmcmRxdW87IG9ubHkgYXBwbGllcyB0byB0aGUgY29kZQorZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciBhbmQgbm90IHRvIHRoZSBJUlEgbGF5b3V0IG9mIHRoZQorYXBwbGljYXRpb24gd2hpY2ggaXMgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGFwcGxpY2F0aW9uLgorCisgICAgIDxwPklmIGJvdGggPGNvZGU+c2lnbmFsPC9jb2RlPiBhbmQgPGNvZGU+aW50ZXJydXB0PC9jb2RlPiBhcmUgc3BlY2lmaWVkIGZvciB0aGUgc2FtZQorZnVuY3Rpb24sIDxjb2RlPnNpZ25hbDwvY29kZT4gaXMgc2lsZW50bHkgaWdub3JlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNwX3N3aXRjaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzcF8wMDVmc3dpdGNoXzAwN2QtYXR0cmlidXRlLTI2NzYiPjwvYT5Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIFNIIHRvIGluZGljYXRlIGFuIDxjb2RlPmludGVycnVwdF9oYW5kbGVyPC9jb2RlPgorZnVuY3Rpb24gc2hvdWxkIHN3aXRjaCB0byBhbiBhbHRlcm5hdGUgc3RhY2suICBJdCBleHBlY3RzIGEgc3RyaW5nCithcmd1bWVudCB0aGF0IG5hbWVzIGEgZ2xvYmFsIHZhcmlhYmxlIGhvbGRpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlCithbHRlcm5hdGUgc3RhY2suCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdm9pZCAqYWx0X3N0YWNrOworICAgICAgICAgIHZvaWQgZiAoKSBfX2F0dHJpYnV0ZV9fICgoaW50ZXJydXB0X2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcF9zd2l0Y2ggKCJhbHRfc3RhY2siKSkpOworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+c3RkY2FsbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnVuY3Rpb25zLXRoYXQtcG9wLXRoZS1hcmd1bWVudC1zdGFjay1vbi10aGUtMzg2LTI2NzciPjwvYT5PbiB0aGUgSW50ZWwgMzg2LCB0aGUgPGNvZGU+c3RkY2FsbDwvY29kZT4gYXR0cmlidXRlIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8KK2Fzc3VtZSB0aGF0IHRoZSBjYWxsZWQgZnVuY3Rpb24gcG9wcyBvZmYgdGhlIHN0YWNrIHNwYWNlIHVzZWQgdG8KK3Bhc3MgYXJndW1lbnRzLCB1bmxlc3MgaXQgdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+c3lzY2FsbF9saW5rYWdlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN5c2NhbGxfMDA1ZmxpbmthZ2VfMDA3ZC1hdHRyaWJ1dGUtMjY3OCI+PC9hPlRoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gbW9kaWZ5IHRoZSBJQS02NCBjYWxsaW5nIGNvbnZlbnRpb24gYnkgbWFya2luZworYWxsIGlucHV0IHJlZ2lzdGVycyBhcyBsaXZlIGF0IGFsbCBmdW5jdGlvbiBleGl0cy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUKK3RvIHJlc3RhcnQgYSBzeXN0ZW0gY2FsbCBhZnRlciBhbiBpbnRlcnJ1cHQgd2l0aG91dCBoYXZpbmcgdG8gc2F2ZS9yZXN0b3JlCit0aGUgaW5wdXQgcmVnaXN0ZXJzLiAgVGhpcyBhbHNvIHByZXZlbnRzIGtlcm5lbCBkYXRhIGZyb20gbGVha2luZyBpbnRvCithcHBsaWNhdGlvbiBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dGFyZ2V0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjc5Ij48L2E+VGhlIDxjb2RlPnRhcmdldDwvY29kZT4gYXR0cmlidXRlIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGF0IGEgZnVuY3Rpb24gaXMgdG8KK2JlIGNvbXBpbGVkIHdpdGggZGlmZmVyZW50IHRhcmdldCBvcHRpb25zIHRoYW4gc3BlY2lmaWVkIG9uIHRoZQorY29tbWFuZCBsaW5lLiAgVGhpcyBjYW4gYmUgdXNlZCBmb3IgaW5zdGFuY2UgdG8gaGF2ZSBmdW5jdGlvbnMKK2NvbXBpbGVkIHdpdGggYSBkaWZmZXJlbnQgSVNBIChpbnN0cnVjdGlvbiBzZXQgYXJjaGl0ZWN0dXJlKSB0aGFuIHRoZQorZGVmYXVsdC4gIFlvdSBjYW4gYWxzbyB1c2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBHQ0MgdGFyZ2V0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHByYWdtYSB0byBzZXQKK21vcmUgdGhhbiBvbmUgZnVuY3Rpb24gdG8gYmUgY29tcGlsZWQgd2l0aCBzcGVjaWZpYyB0YXJnZXQgb3B0aW9ucy4gCitTZWUgPGEgaHJlZj0iRnVuY3Rpb24tU3BlY2lmaWMtT3B0aW9uLVByYWdtYXMuaHRtbCNGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcyI+RnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXM8L2E+LCBmb3IgZGV0YWlscyBhYm91dCB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBHQ0MgdGFyZ2V0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHByYWdtYS4KKworICAgICA8cD5Gb3IgaW5zdGFuY2Ugb24gYSAzODYsIHlvdSBjb3VsZCBjb21waWxlIG9uZSBmdW5jdGlvbiB3aXRoCis8Y29kZT50YXJnZXQoInNzZTQuMSxhcmNoPWNvcmUyIik8L2NvZGU+IGFuZCBhbm90aGVyIHdpdGgKKzxjb2RlPnRhcmdldCgic3NlNGEsYXJjaD1hbWRmYW0xMCIpPC9jb2RlPi4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworY29tcGlsaW5nIHRoZSBmaXJzdCBmdW5jdGlvbiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3NlNC4xPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9Y29yZTI8L3NwYW4+PC9zYW1wPiBvcHRpb25zLCBhbmQgdGhlIHNlY29uZCBmdW5jdGlvbiB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNzZTRhPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1hbWRmYW0xMDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuICBJdCBpcyB1cCB0byB0aGUKK3VzZXIgdG8gbWFrZSBzdXJlIHRoYXQgYSBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgb24gYSBtYWNoaW5lIHRoYXQKK3N1cHBvcnRzIHRoZSBwYXJ0aWN1bGFyIElTQSBpdCBpcyBjb21waWxlZCBmb3IgKGZvciBleGFtcGxlIGJ5IHVzaW5nCis8Y29kZT5jcHVpZDwvY29kZT4gb24gMzg2IHRvIGRldGVybWluZSB3aGF0IGZlYXR1cmUgYml0cyBhbmQgYXJjaGl0ZWN0dXJlCitmYW1pbHkgYXJlIHVzZWQpLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGludCBjb3JlMl9mdW5jICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX190YXJnZXRfXyAoImFyY2g9Y29yZTIiKSkpOworICAgICAgICAgIGludCBzc2UzX2Z1bmMgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX3RhcmdldF9fICgic3NlMyIpKSk7Cis8L3ByZT4KKyAgICAgPHA+T24gdGhlIDM4NiwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWJtPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tYWJtPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmFibV8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY4MCI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhZHZhbmNlZCBiaXQgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFlczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLWFlczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJhZXNfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2ODEiPjwvYT5FbmFibGUvZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgQUVTIGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kZWZhdWx0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmRlZmF1bHRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2ODIiPjwvYT5TZWUgPGEgaHJlZj0iRnVuY3Rpb24tTXVsdGl2ZXJzaW9uaW5nLmh0bWwjRnVuY3Rpb24tTXVsdGl2ZXJzaW9uaW5nIj5GdW5jdGlvbiBNdWx0aXZlcnNpb25pbmc8L2E+LCB3aGVyZSBpdCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlCitkZWZhdWx0IGZ1bmN0aW9uIHZlcnNpb24uCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW14PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tbW14PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMm1teF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY4MyI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBNTVggaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBjbG11bDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLXBjbG11bDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJwY2xtdWxfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2ODQiPjwvYT5FbmFibGUvZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgUENMTVVMIGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3BjbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1wb3BjbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIycG9wY250XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjg1Ij48L2E+RW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIFBPUENOVCBpbnN0cnVjdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc2U8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1zc2U8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyc3NlXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjg2Ij48L2E+RW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIFNTRSBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3NlMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLXNzZTI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyc3NlMl8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY4NyI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBTU0UyIGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc2UzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tc3NlMzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzc2UzXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjg4Ij48L2E+RW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIFNTRTMgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNzZTQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1zc2U0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnNzZTRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2ODkiPjwvYT5FbmFibGUvZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgU1NFNCBpbnN0cnVjdGlvbnMgKGJvdGggU1NFNC4xCithbmQgU1NFNC4yKS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc2U0LjE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1zc2U0LjE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyc3NlNF8wMDJlMV8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5MCI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBzc2U0LjEgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNzZTQuMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLXNzZTQuMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzc2U0XzAwMmUyXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjkxIj48L2E+RW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIHNzZTQuMiBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3NlNGE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1zc2U0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzc2U0YV8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5MiI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBTU0U0QSBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm1hNDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLWZtYTQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyZm1hNF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5MyI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBGTUE0IGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54b3A8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby14b3A8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyeG9wXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjk0Ij48L2E+RW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIFhPUCBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bHdwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tbHdwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmx3cF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5NSI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBMV1AgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNzc2UzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tc3NzZTM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyc3NzZTNfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2OTYiPjwvYT5FbmFibGUvZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgU1NTRTMgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNsZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLWNsZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJjbGRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2OTciPjwvYT5FbmFibGUvZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgQ0xEIGJlZm9yZSBzdHJpbmcgbW92ZXMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZmFuY3ktbWF0aC0zODc8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1mYW5jeS1tYXRoLTM4Nzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJmYW5jeV8wMDJkbWF0aF8wMDJkMzg3XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjk4Ij48L2E+RW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIDxjb2RlPnNpbjwvY29kZT4sIDxjb2RlPmNvczwvY29kZT4sIGFuZAorPGNvZGU+c3FydDwvY29kZT4gaW5zdHJ1Y3Rpb25zIG9uIHRoZSAzODcgZmxvYXRpbmctcG9pbnQgdW5pdC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mdXNlZC1tYWRkPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tZnVzZWQtbWFkZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJmdXNlZF8wMDJkbWFkZF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5OSI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBmdXNlZCBtdWx0aXBseS9hZGQgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmllZWUtZnA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1pZWVlLWZwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmllZWVfMDAyZGZwXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzAwIj48L2E+RW5hYmxlL2Rpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgZmxvYXRpbmcgcG9pbnQgdGhhdCBkZXBlbmRzIG9uIElFRUUgYXJpdGhtZXRpYy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbmxpbmUtYWxsLXN0cmluZ29wczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLWlubGluZS1hbGwtc3RyaW5nb3BzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmlubGluZV8wMDJkYWxsXzAwMmRzdHJpbmdvcHNfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDEiPjwvYT5FbmFibGUvZGlzYWJsZSBpbmxpbmluZyBvZiBzdHJpbmcgb3BlcmF0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbmxpbmUtc3RyaW5nb3BzLWR5bmFtaWNhbGx5PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8taW5saW5lLXN0cmluZ29wcy1keW5hbWljYWxseTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJpbmxpbmVfMDAyZHN0cmluZ29wc18wMDJkZHluYW1pY2FsbHlfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDIiPjwvYT5FbmFibGUvZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgaW5saW5lIGNvZGUgdG8gZG8gc21hbGwgc3RyaW5nCitvcGVyYXRpb25zIGFuZCBjYWxsaW5nIHRoZSBsaWJyYXJ5IHJvdXRpbmVzIGZvciBsYXJnZSBvcGVyYXRpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFsaWduLXN0cmluZ29wczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLWFsaWduLXN0cmluZ29wczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJhbGlnbl8wMDJkc3RyaW5nb3BzXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzAzIj48L2E+RG8vZG8gbm90IGFsaWduIGRlc3RpbmF0aW9uIG9mIGlubGluZWQgc3RyaW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVjaXA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1yZWNpcDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJyZWNpcF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcwNCI+PC9hPkVuYWJsZS9kaXNhYmxlIHRoZSBnZW5lcmF0aW9uIG9mIFJDUFNTLCBSQ1BQUywgUlNRUlRTUyBhbmQgUlNRUlRQUworaW5zdHJ1Y3Rpb25zIGZvbGxvd2VkIGFuIGFkZGl0aW9uYWwgTmV3dG9uLVJhcGhzb24gc3RlcCBpbnN0ZWFkIG9mCitkb2luZyBhIGZsb2F0aW5nLXBvaW50IGRpdmlzaW9uLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyY2g9PC9zcGFuPjx2YXI+QVJDSDwvdmFyPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmFyY2hfMDAzZF8wMDQwdmFyXzAwN2JBUkNIXzAwN2RfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDUiPjwvYT5TcGVjaWZ5IHRoZSBhcmNoaXRlY3R1cmUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgaW4gY29tcGlsaW5nIHRoZSBmdW5jdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50dW5lPTwvc3Bhbj48dmFyPlRVTkU8L3Zhcj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJ0dW5lXzAwM2RfMDA0MHZhcl8wMDdiVFVORV8wMDdkXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzA2Ij48L2E+U3BlY2lmeSB0aGUgYXJjaGl0ZWN0dXJlIHRvIHR1bmUgZm9yIGluIGNvbXBpbGluZyB0aGUgZnVuY3Rpb24uCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnBtYXRoPTwvc3Bhbj48dmFyPkZQTUFUSDwvdmFyPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmZwbWF0aF8wMDNkXzAwNDB2YXJfMDA3YkZQTUFUSF8wMDdkXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzA3Ij48L2E+U3BlY2lmeSB3aGljaCBmbG9hdGluZy1wb2ludCB1bml0IHRvIHVzZS4gIFRoZQorPGNvZGU+dGFyZ2V0KCJmcG1hdGg9c3NlLDM4NyIpPC9jb2RlPiBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgYXMKKzxjb2RlPnRhcmdldCgiZnBtYXRoPXNzZSszODciKTwvY29kZT4gYmVjYXVzZSB0aGUgY29tbWEgd291bGQgc2VwYXJhdGUKK2RpZmZlcmVudCBvcHRpb25zLiAKKzwvZGw+CisKKyAgICAgPHA+T24gdGhlIFBvd2VyUEMsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxsb3dlZDoKKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFsdGl2ZWM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1hbHRpdmVjPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmFsdGl2ZWNfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDgiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSBBbHRpVmVjIGluc3RydWN0aW9ucy4gIEluCiszMi1iaXQgY29kZSwgeW91IGNhbm5vdCBlbmFibGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgdW5sZXNzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFiaT1hbHRpdmVjPC9zcGFuPjwvc2FtcD4gaXMgdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNtcGI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1jbXBiPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmNtcGJfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDkiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgY29tcGFyZSBieXRlcyBpbnN0cnVjdGlvbgoraW1wbGVtZW50ZWQgb24gdGhlIFBPV0VSNiBwcm9jZXNzb3IgYW5kIG90aGVyIHByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0Cit0aGUgUG93ZXJQQyBWMi4wNSBhcmNoaXRlY3R1cmUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGxtemI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1kbG16Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJkbG16Yl8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcxMCI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBzdHJpbmctc2VhcmNoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGxtemI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2luc3RydWN0aW9uIG9uIHRoZSBJQk0gNDA1LCA0NDAsIDQ2NCBhbmQgNDc2IHByb2Nlc3NvcnMuICBUaGlzIGluc3RydWN0aW9uIGlzCitnZW5lcmF0ZWQgYnkgZGVmYXVsdCB3aGVuIHRhcmdldGluZyB0aG9zZSBwcm9jZXNzb3JzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZwcm5kPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tZnBybmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyZnBybmRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MTEiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgRlAgcm91bmQgdG8gaW50ZWdlcgoraW5zdHJ1Y3Rpb25zIGltcGxlbWVudGVkIG9uIHRoZSBQT1dFUjUrIHByb2Nlc3NvciBhbmQgb3RoZXIgcHJvY2Vzc29ycwordGhhdCBzdXBwb3J0IHRoZSBQb3dlclBDIFYyLjAzIGFyY2hpdGVjdHVyZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5oYXJkLWRmcDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLWhhcmQtZGZwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmhhcmRfMDAyZGRmcF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcxMiI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBkZWNpbWFsIGZsb2F0aW5nLXBvaW50CitpbnN0cnVjdGlvbnMgaW1wbGVtZW50ZWQgb24gc29tZSBQT1dFUiBwcm9jZXNzb3JzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlzZWw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1pc2VsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmlzZWxfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MTMiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSBJU0VMIGluc3RydWN0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1mY3JmPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tbWZjcmY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIybWZjcmZfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MTQiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgbW92ZSBmcm9tIGNvbmRpdGlvbgorcmVnaXN0ZXIgZmllbGQgaW5zdHJ1Y3Rpb24gaW1wbGVtZW50ZWQgb24gdGhlIFBPV0VSNCBwcm9jZXNzb3IgYW5kCitvdGhlciBwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCB0aGUgUG93ZXJQQyBWMi4wMSBhcmNoaXRlY3R1cmUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWZwZ3ByPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tbWZwZ3ByPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMm1mcGdwcl8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcxNSI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBGUCBtb3ZlIHRvL2Zyb20gZ2VuZXJhbAorcHVycG9zZSByZWdpc3RlciBpbnN0cnVjdGlvbnMgaW1wbGVtZW50ZWQgb24gdGhlIFBPV0VSNlggcHJvY2Vzc29yIGFuZAorb3RoZXIgcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIGV4dGVuZGVkIFBvd2VyUEMgVjIuMDUgYXJjaGl0ZWN0dXJlLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11bGh3PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tbXVsaHc8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIybXVsaHdfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MTYiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgaGFsZi13b3JkIG11bHRpcGx5IGFuZAorbXVsdGlwbHktYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMgb24gdGhlIElCTSA0MDUsIDQ0MCwgNDY0IGFuZCA0NzYgcHJvY2Vzc29ycy4gCitUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IHdoZW4gdGFyZ2V0aW5nIHRob3NlCitwcm9jZXNzb3JzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11bHRpcGxlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tbXVsdGlwbGU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIybXVsdGlwbGVfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MTciPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgbG9hZCBtdWx0aXBsZSB3b3JkCitpbnN0cnVjdGlvbnMgYW5kIHRoZSBzdG9yZSBtdWx0aXBsZSB3b3JkIGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj51cGRhdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby11cGRhdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIydXBkYXRlXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzE4Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGxvYWQgb3Igc3RvcmUgaW5zdHJ1Y3Rpb25zCit0aGF0IHVwZGF0ZSB0aGUgYmFzZSByZWdpc3RlciB0byB0aGUgYWRkcmVzcyBvZiB0aGUgY2FsY3VsYXRlZCBtZW1vcnkKK2xvY2F0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvcGNudGI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1wb3BjbnRiPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnBvcGNudGJfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MTkiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgcG9wY291bnQgYW5kIGRvdWJsZS1wcmVjaXNpb24KK0ZQIHJlY2lwcm9jYWwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb24gaW1wbGVtZW50ZWQgb24gdGhlIFBPV0VSNQorcHJvY2Vzc29yIGFuZCBvdGhlciBwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCB0aGUgUG93ZXJQQyBWMi4wMgorYXJjaGl0ZWN0dXJlLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvcGNudGQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1wb3BjbnRkPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnBvcGNudGRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MjAiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgcG9wY291bnQgaW5zdHJ1Y3Rpb24KK2ltcGxlbWVudGVkIG9uIHRoZSBQT1dFUjcgcHJvY2Vzc29yIGFuZCBvdGhlciBwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydAordGhlIFBvd2VyUEMgVjIuMDYgYXJjaGl0ZWN0dXJlLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvd2VycGMtZ2Z4b3B0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tcG93ZXJwYy1nZnhvcHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIycG93ZXJwY18wMDJkZ2Z4b3B0XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzIxIj48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIG9wdGlvbmFsIFBvd2VyUEMKK2FyY2hpdGVjdHVyZSBpbnN0cnVjdGlvbnMgaW4gdGhlIEdyYXBoaWNzIGdyb3VwLCBpbmNsdWRpbmcKK2Zsb2F0aW5nLXBvaW50IHNlbGVjdC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3dlcnBjLWdwb3B0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tcG93ZXJwYy1ncG9wdDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJwb3dlcnBjXzAwMmRncG9wdF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcyMiI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBvcHRpb25hbCBQb3dlclBDCithcmNoaXRlY3R1cmUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBHZW5lcmFsIFB1cnBvc2UgZ3JvdXAsIGluY2x1ZGluZworZmxvYXRpbmctcG9pbnQgc3F1YXJlIHJvb3QuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVjaXAtcHJlY2lzaW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tcmVjaXAtcHJlY2lzaW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnJlY2lwXzAwMmRwcmVjaXNpb25fMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MjMiPjwvYT5Bc3N1bWUgKGRvIG5vdCBhc3N1bWUpIHRoYXQgdGhlIHJlY2lwcm9jYWwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zCitwcm92aWRlIGhpZ2hlci1wcmVjaXNpb24gZXN0aW1hdGVzIHRoYW4gaXMgbWFuZGF0ZWQgYnkgdGhlIHBvd2VycGMKK0FCSS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdHJpbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1zdHJpbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyc3RyaW5nXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzI0Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGxvYWQgc3RyaW5nIGluc3RydWN0aW9ucworYW5kIHRoZSBzdG9yZSBzdHJpbmcgd29yZCBpbnN0cnVjdGlvbnMgdG8gc2F2ZSBtdWx0aXBsZSByZWdpc3RlcnMgYW5kCitkbyBzbWFsbCBibG9jayBtb3Zlcy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52c3g8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby12c3g8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIydnN4XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzI1Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdmVjdG9yL3NjYWxhciAoVlNYKQoraW5zdHJ1Y3Rpb25zLCBhbmQgYWxzbyBlbmFibGUgdGhlIHVzZSBvZiBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBhbGxvdworbW9yZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBWU1ggaW5zdHJ1Y3Rpb24gc2V0LiAgSW4gMzItYml0IGNvZGUsIHlvdQorY2Fubm90IGVuYWJsZSBWU1ggb3IgQWx0aVZlYyBpbnN0cnVjdGlvbnMgdW5sZXNzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFiaT1hbHRpdmVjPC9zcGFuPjwvc2FtcD4gaXMgdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZyaXo8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby1mcml6PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmZyaXpfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MjYiPjwvYT5HZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSB0aGUgPGNvZGU+ZnJpejwvY29kZT4gaW5zdHJ1Y3Rpb24gd2hlbiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9uczwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyB1c2VkIHRvIG9wdGltaXplCityb3VuZGluZyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIHRvIDY0LWJpdCBpbnRlZ2VyIGFuZCBiYWNrIHRvIGZsb2F0aW5nCitwb2ludC4gIFRoZSA8Y29kZT5mcml6PC9jb2RlPiBpbnN0cnVjdGlvbiBkb2VzIG5vdCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgaWYKK3RoZSBmbG9hdGluZy1wb2ludCBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBhbiBpbnRlZ2VyLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmF2b2lkLWluZGV4ZWQtYWRkcmVzc2VzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tYXZvaWQtaW5kZXhlZC1hZGRyZXNzZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyYXZvaWRfMDAyZGluZGV4ZWRfMDAyZGFkZHJlc3Nlc18wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcyNyI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB0cmllcyB0byBhdm9pZCAobm90IGF2b2lkKSB0aGUgdXNlIG9mIGluZGV4ZWQgbG9hZAorb3Igc3RvcmUgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBhaXJlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vLXBhaXJlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJwYWlyZWRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MjgiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgZ2VuZXJhdGlvbiBvZiBQQUlSRUQgc2ltZAoraW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvbmdjYWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm8tbG9uZ2NhbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIybG9uZ2NhbGxfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MjkiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgYXNzdW1lcyAoZG9lcyBub3QgYXNzdW1lKSB0aGF0IGFsbCBjYWxscyBhcmUgZmFyCithd2F5IHNvIHRoYXQgYSBsb25nZXIgbW9yZSBleHBlbnNpdmUgY2FsbGluZyBzZXF1ZW5jZSBpcyByZXF1aXJlZC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jcHU9PC9zcGFuPjx2YXI+Q1BVPC92YXI+PC9zYW1wPiZyc3F1bzs8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyY3B1XzAwM2RfMDA0MHZhcl8wMDdiQ1BVXzAwN2RfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MzAiPjwvYT5TcGVjaWZ5IHRoZSBhcmNoaXRlY3R1cmUgdG8gZ2VuZXJhdGUgY29kZSBmb3Igd2hlbiBjb21waWxpbmcgdGhlCitmdW5jdGlvbi4gIElmIHlvdSBzZWxlY3QgdGhlIDxjb2RlPnRhcmdldCgiY3B1PXBvd2VyNyIpPC9jb2RlPiBhdHRyaWJ1dGUgd2hlbgorZ2VuZXJhdGluZyAzMi1iaXQgY29kZSwgVlNYIGFuZCBBbHRpVmVjIGluc3RydWN0aW9ucyBhcmUgbm90IGdlbmVyYXRlZAordW5sZXNzIHlvdSB1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWJpPWFsdGl2ZWM8L3NwYW4+PC9zYW1wPiBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50dW5lPTwvc3Bhbj48dmFyPlRVTkU8L3Zhcj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJ0dW5lXzAwM2RfMDA0MHZhcl8wMDdiVFVORV8wMDdkXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzMxIj48L2E+U3BlY2lmeSB0aGUgYXJjaGl0ZWN0dXJlIHRvIHR1bmUgZm9yIHdoZW4gY29tcGlsaW5nIHRoZSBmdW5jdGlvbi4gIElmCit5b3UgZG8gbm90IHNwZWNpZnkgdGhlIDxjb2RlPnRhcmdldCgidHVuZT08L2NvZGU+PHZhcj5UVU5FPC92YXI+PGNvZGU+Iik8L2NvZGU+IGF0dHJpYnV0ZSBhbmQKK3lvdSBkbyBzcGVjaWZ5IHRoZSA8Y29kZT50YXJnZXQoImNwdT08L2NvZGU+PHZhcj5DUFU8L3Zhcj48Y29kZT4iKTwvY29kZT4gYXR0cmlidXRlLAorY29tcGlsYXRpb24gdHVuZXMgZm9yIHRoZSA8dmFyPkNQVTwvdmFyPiBhcmNoaXRlY3R1cmUsIGFuZCBub3QgdGhlCitkZWZhdWx0IHR1bmluZyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gCis8L2RsPgorCisgICAgIDxwPk9uIHRoZSAzODYveDg2XzY0IGFuZCBQb3dlclBDIGJhY2sgZW5kcywgeW91IGNhbiB1c2UgZWl0aGVyIG11bHRpcGxlCitzdHJpbmdzIHRvIHNwZWNpZnkgbXVsdGlwbGUgb3B0aW9ucywgb3IgeW91IGNhbiBzZXBhcmF0ZSB0aGUgb3B0aW9uCit3aXRoIGEgY29tbWEgKDxjb2RlPiw8L2NvZGU+KS4KKworICAgICA8cD5PbiB0aGUgMzg2L3g4Nl82NCBhbmQgUG93ZXJQQyBiYWNrIGVuZHMsIHRoZSBpbmxpbmVyIGRvZXMgbm90IGlubGluZSBhCitmdW5jdGlvbiB0aGF0IGhhcyBkaWZmZXJlbnQgdGFyZ2V0IG9wdGlvbnMgdGhhbiB0aGUgY2FsbGVyLCB1bmxlc3MgdGhlCitjYWxsZWUgaGFzIGEgc3Vic2V0IG9mIHRoZSB0YXJnZXQgb3B0aW9ucyBvZiB0aGUgY2FsbGVyLiAgRm9yIGV4YW1wbGUKK2EgZnVuY3Rpb24gZGVjbGFyZWQgd2l0aCA8Y29kZT50YXJnZXQoInNzZTMiKTwvY29kZT4gY2FuIGlubGluZSBhIGZ1bmN0aW9uCit3aXRoIDxjb2RlPnRhcmdldCgic3NlMiIpPC9jb2RlPiwgc2luY2UgPGNvZGU+LW1zc2UzPC9jb2RlPiBpbXBsaWVzIDxjb2RlPi1tc3NlMjwvY29kZT4uCisKKyAgICAgPHA+VGhlIDxjb2RlPnRhcmdldDwvY29kZT4gYXR0cmlidXRlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBHQ0MgdmVyc2lvbnMgZWFybGllcgordGhhbiA0LjQgZm9yIHRoZSBpMzg2L3g4Nl82NCBhbmQgNC42IGZvciB0aGUgUG93ZXJQQyBiYWNrIGVuZHMuICBJdCBpcworbm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCBmb3Igb3RoZXIgYmFjayBlbmRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dGlueV9kYXRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC10aW55LWRhdGEtc2VjdGlvbi1vbi10aGUtSDhfMDAyZjMwMEgtYW5kLUg4Uy0yNzMyIj48L2E+VXNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBIOC8zMDBIIGFuZCBIOFMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3BlY2lmaWVkCit2YXJpYWJsZSBzaG91bGQgYmUgcGxhY2VkIGludG8gdGhlIHRpbnkgZGF0YSBzZWN0aW9uLiAKK1RoZSBjb21waWxlciBnZW5lcmF0ZXMgbW9yZSBlZmZpY2llbnQgY29kZSBmb3IgbG9hZHMgYW5kIHN0b3Jlcworb24gZGF0YSBpbiB0aGUgdGlueSBkYXRhIHNlY3Rpb24uICBOb3RlIHRoZSB0aW55IGRhdGEgYXJlYSBpcyBsaW1pdGVkIHRvCitzbGlnaHRseSB1bmRlciAzMktCIG9mIGRhdGEuCisKKyAgICAgPGJyPjxkdD48Y29kZT50cmFwX2V4aXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidHJhcF8wMDVmZXhpdF8wMDdkLWF0dHJpYnV0ZS0yNzMzIj48L2E+VXNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBTSCBmb3IgYW4gPGNvZGU+aW50ZXJydXB0X2hhbmRsZXI8L2NvZGU+IHRvIHJldHVybiB1c2luZworPGNvZGU+dHJhcGE8L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+cnRlPC9jb2RlPi4gIFRoaXMgYXR0cmlidXRlIGV4cGVjdHMgYW4gaW50ZWdlcgorYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgdHJhcCBudW1iZXIgdG8gYmUgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRyYXBhX2hhbmRsZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidHJhcGFfMDA1ZmhhbmRsZXJfMDA3ZC1hdHRyaWJ1dGUtMjczNCI+PC9hPk9uIFNIIHRhcmdldHMgdGhpcyBmdW5jdGlvbiBhdHRyaWJ1dGUgaXMgc2ltaWxhciB0byA8Y29kZT5pbnRlcnJ1cHRfaGFuZGxlcjwvY29kZT4KK2J1dCBpdCBkb2VzIG5vdCBzYXZlIGFuZCByZXN0b3JlIGFsbCByZWdpc3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT51bnVzZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidW51c2VkXzAwN2QtYXR0cmlidXRlXzAwMmUtMjczNSI+PC9hPlRoaXMgYXR0cmlidXRlLCBhdHRhY2hlZCB0byBhIGZ1bmN0aW9uLCBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBtZWFudAordG8gYmUgcG9zc2libHkgdW51c2VkLiAgR0NDIGRvZXMgbm90IHByb2R1Y2UgYSB3YXJuaW5nIGZvciB0aGlzCitmdW5jdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPnVzZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidXNlZF8wMDdkLWF0dHJpYnV0ZV8wMDJlLTI3MzYiPjwvYT5UaGlzIGF0dHJpYnV0ZSwgYXR0YWNoZWQgdG8gYSBmdW5jdGlvbiwgbWVhbnMgdGhhdCBjb2RlIG11c3QgYmUgZW1pdHRlZAorZm9yIHRoZSBmdW5jdGlvbiBldmVuIGlmIGl0IGFwcGVhcnMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgbm90IHJlZmVyZW5jZWQuIAorVGhpcyBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyByZWZlcmVuY2VkIG9ubHkgaW4KK2lubGluZSBhc3NlbWJseS4KKworICAgICA8cD5XaGVuIGFwcGxpZWQgdG8gYSBtZW1iZXIgZnVuY3Rpb24gb2YgYSBDKysgY2xhc3MgdGVtcGxhdGUsIHRoZQorYXR0cmlidXRlIGFsc28gbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgaW5zdGFudGlhdGVkIGlmIHRoZQorY2xhc3MgaXRzZWxmIGlzIGluc3RhbnRpYXRlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnZlcnNpb25faWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdidmVyc2lvbl8wMDVmaWRfMDA3ZC1hdHRyaWJ1dGUtMjczNyI+PC9hPlRoaXMgSUEtNjQgSFAtVVggYXR0cmlidXRlLCBhdHRhY2hlZCB0byBhIGdsb2JhbCB2YXJpYWJsZSBvciBmdW5jdGlvbiwgcmVuYW1lcyBhCitzeW1ib2wgdG8gY29udGFpbiBhIHZlcnNpb24gc3RyaW5nLCB0aHVzIGFsbG93aW5nIGZvciBmdW5jdGlvbiBsZXZlbAordmVyc2lvbmluZy4gIEhQLVVYIHN5c3RlbSBoZWFkZXIgZmlsZXMgbWF5IHVzZSB2ZXJzaW9uIGxldmVsIGZ1bmN0aW9uaW5nCitmb3Igc29tZSBzeXN0ZW0gY2FsbHMuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZXh0ZXJuIGludCBmb28gKCkgX19hdHRyaWJ1dGVfXygodmVyc2lvbl9pZCAoIjIwMDQwODIxIikpKTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkNhbGxzIHRvIDx2YXI+Zm9vPC92YXI+IGFyZSBtYXBwZWQgdG8gY2FsbHMgdG8gPHZhcj5mb297MjAwNDA4MjF9PC92YXI+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+dmlzaWJpbGl0eSAoIjwvY29kZT48dmFyPnZpc2liaWxpdHlfdHlwZTwvdmFyPjxjb2RlPiIpPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnZpc2liaWxpdHlfMDA3ZC1hdHRyaWJ1dGUtMjczOCI+PC9hPlRoaXMgYXR0cmlidXRlIGFmZmVjdHMgdGhlIGxpbmthZ2Ugb2YgdGhlIGRlY2xhcmF0aW9uIHRvIHdoaWNoIGl0IGlzIGF0dGFjaGVkLiAKK1RoZXJlIGFyZSBmb3VyIHN1cHBvcnRlZCA8dmFyPnZpc2liaWxpdHlfdHlwZTwvdmFyPiB2YWx1ZXM6IGRlZmF1bHQsCitoaWRkZW4sIHByb3RlY3RlZCBvciBpbnRlcm5hbCB2aXNpYmlsaXR5LgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJwcm90ZWN0ZWQiKSkpCisgICAgICAgICAgZiAoKSB7IC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+RG8gc29tZXRoaW5nLjwvc3Bhbj4gKi87IH0KKyAgICAgICAgICBpbnQgaSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7Cis8L3ByZT4KKyAgICAgPHA+VGhlIHBvc3NpYmxlIHZhbHVlcyBvZiA8dmFyPnZpc2liaWxpdHlfdHlwZTwvdmFyPiBjb3JyZXNwb25kIHRvIHRoZQordmlzaWJpbGl0eSBzZXR0aW5ncyBpbiB0aGUgRUxGIGdBQkkuCisKKyAgICAgICAgICA8ZGw+Cis8IS0tIGtlZXAgdGhpcyBsaXN0IG9mIHZpc2liaWxpdGllcyBpbiBhbHBoYWJldGljYWwgb3JkZXIuIC0tPgorCisgICAgICAgICAgPGR0PjxkZm4+ZGVmYXVsdDwvZGZuPjxkZD5EZWZhdWx0IHZpc2liaWxpdHkgaXMgdGhlIG5vcm1hbCBjYXNlIGZvciB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0LiAKK1RoaXMgdmFsdWUgaXMgYXZhaWxhYmxlIGZvciB0aGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgdG8gb3ZlcnJpZGUgb3RoZXIKK29wdGlvbnMgdGhhdCBtYXkgY2hhbmdlIHRoZSBhc3N1bWVkIHZpc2liaWxpdHkgb2YgZW50aXRpZXMuCisKKyAgICAgICAgICA8cD5PbiBFTEYsIGRlZmF1bHQgdmlzaWJpbGl0eSBtZWFucyB0aGF0IHRoZSBkZWNsYXJhdGlvbiBpcyB2aXNpYmxlIHRvIG90aGVyCittb2R1bGVzIGFuZCwgaW4gc2hhcmVkIGxpYnJhcmllcywgbWVhbnMgdGhhdCB0aGUgZGVjbGFyZWQgZW50aXR5IG1heSBiZQorb3ZlcnJpZGRlbi4KKworICAgICAgICAgIDxwPk9uIERhcndpbiwgZGVmYXVsdCB2aXNpYmlsaXR5IG1lYW5zIHRoYXQgdGhlIGRlY2xhcmF0aW9uIGlzIHZpc2libGUgdG8KK290aGVyIG1vZHVsZXMuCisKKyAgICAgICAgICA8cD5EZWZhdWx0IHZpc2liaWxpdHkgY29ycmVzcG9uZHMgdG8gJmxkcXVvO2V4dGVybmFsIGxpbmthZ2UmcmRxdW87IGluIHRoZSBsYW5ndWFnZS4KKworICAgICAgICAgIDxicj48ZHQ+PGRmbj5oaWRkZW48L2Rmbj48ZGQ+SGlkZGVuIHZpc2liaWxpdHkgaW5kaWNhdGVzIHRoYXQgdGhlIGVudGl0eSBkZWNsYXJlZCBoYXMgYSBuZXcKK2Zvcm0gb2YgbGlua2FnZSwgd2hpY2ggd2UgY2FsbCAmbGRxdW87aGlkZGVuIGxpbmthZ2UmcmRxdW87LiAgVHdvCitkZWNsYXJhdGlvbnMgb2YgYW4gb2JqZWN0IHdpdGggaGlkZGVuIGxpbmthZ2UgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0CitpZiB0aGV5IGFyZSBpbiB0aGUgc2FtZSBzaGFyZWQgb2JqZWN0LgorCisgICAgICAgICAgPGJyPjxkdD48ZGZuPmludGVybmFsPC9kZm4+PGRkPkludGVybmFsIHZpc2liaWxpdHkgaXMgbGlrZSBoaWRkZW4gdmlzaWJpbGl0eSwgYnV0IHdpdGggYWRkaXRpb25hbAorcHJvY2Vzc29yIHNwZWNpZmljIHNlbWFudGljcy4gIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRoZQorcHNBQkksIEdDQyBkZWZpbmVzIGludGVybmFsIHZpc2liaWxpdHkgdG8gbWVhbiB0aGF0IGEgZnVuY3Rpb24gaXMKKzxlbT5uZXZlcjwvZW0+IGNhbGxlZCBmcm9tIGFub3RoZXIgbW9kdWxlLiAgQ29tcGFyZSB0aGlzIHdpdGggaGlkZGVuCitmdW5jdGlvbnMgd2hpY2gsIHdoaWxlIHRoZXkgY2Fubm90IGJlIHJlZmVyZW5jZWQgZGlyZWN0bHkgYnkgb3RoZXIKK21vZHVsZXMsIGNhbiBiZSByZWZlcmVuY2VkIGluZGlyZWN0bHkgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLiAgQnkKK2luZGljYXRpbmcgdGhhdCBhIGZ1bmN0aW9uIGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUsCitHQ0MgbWF5IGZvciBpbnN0YW5jZSBvbWl0IHRoZSBsb2FkIG9mIGEgUElDIHJlZ2lzdGVyIHNpbmNlIGl0IGlzIGtub3duCit0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGxvYWRlZCB0aGUgY29ycmVjdCB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGRmbj5wcm90ZWN0ZWQ8L2Rmbj48ZGQ+UHJvdGVjdGVkIHZpc2liaWxpdHkgaXMgbGlrZSBkZWZhdWx0IHZpc2liaWxpdHkgZXhjZXB0IHRoYXQgaXQKK2luZGljYXRlcyB0aGF0IHJlZmVyZW5jZXMgd2l0aGluIHRoZSBkZWZpbmluZyBtb2R1bGUgYmluZCB0byB0aGUKK2RlZmluaXRpb24gaW4gdGhhdCBtb2R1bGUuICBUaGF0IGlzLCB0aGUgZGVjbGFyZWQgZW50aXR5IGNhbm5vdCBiZQorb3ZlcnJpZGRlbiBieSBhbm90aGVyIG1vZHVsZS4KKworICAgICA8L2RsPgorCisgICAgIDxwPkFsbCB2aXNpYmlsaXRpZXMgYXJlIHN1cHBvcnRlZCBvbiBtYW55LCBidXQgbm90IGFsbCwgRUxGIHRhcmdldHMKKyhzdXBwb3J0ZWQgd2hlbiB0aGUgYXNzZW1ibGVyIHN1cHBvcnRzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi52aXNpYmlsaXR5PC9zcGFuPjwvc2FtcD4mcnNxdW87Citwc2V1ZG8tb3ApLiAgRGVmYXVsdCB2aXNpYmlsaXR5IGlzIHN1cHBvcnRlZCBldmVyeXdoZXJlLiAgSGlkZGVuCit2aXNpYmlsaXR5IGlzIHN1cHBvcnRlZCBvbiBEYXJ3aW4gdGFyZ2V0cy4KKworICAgICA8cD5UaGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGFwcGxpZWQgb25seSB0byBkZWNsYXJhdGlvbnMgdGhhdAord291bGQgb3RoZXJ3aXNlIGhhdmUgZXh0ZXJuYWwgbGlua2FnZS4gIFRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIGFwcGxpZWQKK2NvbnNpc3RlbnRseSwgc28gdGhhdCB0aGUgc2FtZSBlbnRpdHkgc2hvdWxkIG5vdCBiZSBkZWNsYXJlZCB3aXRoCitkaWZmZXJlbnQgc2V0dGluZ3Mgb2YgdGhlIGF0dHJpYnV0ZS4KKworICAgICA8cD5JbiBDKyssIHRoZSB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBhcHBsaWVzIHRvIHR5cGVzIGFzIHdlbGwgYXMgZnVuY3Rpb25zCithbmQgb2JqZWN0cywgYmVjYXVzZSBpbiBDKysgdHlwZXMgaGF2ZSBsaW5rYWdlLiAgQSBjbGFzcyBtdXN0IG5vdCBoYXZlCitncmVhdGVyIHZpc2liaWxpdHkgdGhhbiBpdHMgbm9uLXN0YXRpYyBkYXRhIG1lbWJlciB0eXBlcyBhbmQgYmFzZXMsCithbmQgY2xhc3MgbWVtYmVycyBkZWZhdWx0IHRvIHRoZSB2aXNpYmlsaXR5IG9mIHRoZWlyIGNsYXNzLiAgQWxzbywgYQorZGVjbGFyYXRpb24gd2l0aG91dCBleHBsaWNpdCB2aXNpYmlsaXR5IGlzIGxpbWl0ZWQgdG8gdGhlIHZpc2liaWxpdHkKK29mIGl0cyB0eXBlLgorCisgICAgIDxwPkluIEMrKywgeW91IGNhbiBtYXJrIG1lbWJlciBmdW5jdGlvbnMgYW5kIHN0YXRpYyBtZW1iZXIgdmFyaWFibGVzIG9mIGEKK2NsYXNzIHdpdGggdGhlIHZpc2liaWxpdHkgYXR0cmlidXRlLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IGtub3cgYQorcGFydGljdWxhciBtZXRob2Qgb3Igc3RhdGljIG1lbWJlciB2YXJpYWJsZSBzaG91bGQgb25seSBiZSB1c2VkIGZyb20KK29uZSBzaGFyZWQgb2JqZWN0OyB0aGVuIHlvdSBjYW4gbWFyayBpdCBoaWRkZW4gd2hpbGUgdGhlIHJlc3Qgb2YgdGhlCitjbGFzcyBoYXMgZGVmYXVsdCB2aXNpYmlsaXR5LiAgQ2FyZSBtdXN0IGJlIHRha2VuIHRvIGF2b2lkIGJyZWFraW5nCit0aGUgT25lIERlZmluaXRpb24gUnVsZTsgZm9yIGV4YW1wbGUsIGl0IGlzIHVzdWFsbHkgbm90IHVzZWZ1bCB0byBtYXJrCithbiBpbmxpbmUgbWV0aG9kIGFzIGhpZGRlbiB3aXRob3V0IG1hcmtpbmcgdGhlIHdob2xlIGNsYXNzIGFzIGhpZGRlbi4KKworICAgICA8cD5BIEMrKyBuYW1lc3BhY2UgZGVjbGFyYXRpb24gY2FuIGFsc28gaGF2ZSB0aGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUuIAorVGhpcyBhdHRyaWJ1dGUgYXBwbGllcyBvbmx5IHRvIHRoZSBwYXJ0aWN1bGFyIG5hbWVzcGFjZSBib2R5LCBub3QgdG8KK290aGVyIGRlZmluaXRpb25zIG9mIHRoZSBzYW1lIG5hbWVzcGFjZTsgaXQgaXMgZXF1aXZhbGVudCB0byB1c2luZworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIEdDQyB2aXNpYmlsaXR5PC9zcGFuPjwvc2FtcD4mcnNxdW87IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG5hbWVzcGFjZQorZGVmaW5pdGlvbiAoc2VlIDxhIGhyZWY9IlZpc2liaWxpdHktUHJhZ21hcy5odG1sI1Zpc2liaWxpdHktUHJhZ21hcyI+VmlzaWJpbGl0eSBQcmFnbWFzPC9hPikuCisKKyAgICAgPHA+SW4gQysrLCBpZiBhIHRlbXBsYXRlIGFyZ3VtZW50IGhhcyBsaW1pdGVkIHZpc2liaWxpdHksIHRoaXMKK3Jlc3RyaWN0aW9uIGlzIGltcGxpY2l0bHkgcHJvcGFnYXRlZCB0byB0aGUgdGVtcGxhdGUgaW5zdGFudGlhdGlvbi4gCitPdGhlcndpc2UsIHRlbXBsYXRlIGluc3RhbnRpYXRpb25zIGFuZCBzcGVjaWFsaXphdGlvbnMgZGVmYXVsdCB0byB0aGUKK3Zpc2liaWxpdHkgb2YgdGhlaXIgdGVtcGxhdGUuCisKKyAgICAgPHA+SWYgYm90aCB0aGUgdGVtcGxhdGUgYW5kIGVuY2xvc2luZyBjbGFzcyBoYXZlIGV4cGxpY2l0IHZpc2liaWxpdHksIHRoZQordmlzaWJpbGl0eSBmcm9tIHRoZSB0ZW1wbGF0ZSBpcyB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dmxpdzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J2bGl3XzAwN2QtYXR0cmlidXRlLTI3MzkiPjwvYT5PbiBNZVAsIHRoZSA8Y29kZT52bGl3PC9jb2RlPiBhdHRyaWJ1dGUgdGVsbHMgdGhlIGNvbXBpbGVyIHRvIGVtaXQKK2luc3RydWN0aW9ucyBpbiBWTElXIG1vZGUgaW5zdGVhZCBvZiBjb3JlIG1vZGUuICBOb3RlIHRoYXQgdGhpcworYXR0cmlidXRlIGlzIG5vdCBhbGxvd2VkIHVubGVzcyBhIFZMSVcgY29wcm9jZXNzb3IgaGFzIGJlZW4gY29uZmlndXJlZAorYW5kIGVuYWJsZWQgdGhyb3VnaCBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPndhcm5fdW51c2VkX3Jlc3VsdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3YXJuXzAwNWZ1bnVzZWRfMDA1ZnJlc3VsdF8wMDdkLWF0dHJpYnV0ZS0yNzQwIj48L2E+VGhlIDxjb2RlPndhcm5fdW51c2VkX3Jlc3VsdDwvY29kZT4gYXR0cmlidXRlIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZAoraWYgYSBjYWxsZXIgb2YgdGhlIGZ1bmN0aW9uIHdpdGggdGhpcyBhdHRyaWJ1dGUgZG9lcyBub3QgdXNlIGl0cworcmV0dXJuIHZhbHVlLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGZ1bmN0aW9ucyB3aGVyZSBub3QgY2hlY2tpbmcKK3RoZSByZXN1bHQgaXMgZWl0aGVyIGEgc2VjdXJpdHkgcHJvYmxlbSBvciBhbHdheXMgYSBidWcsIHN1Y2ggYXMKKzxjb2RlPnJlYWxsb2M8L2NvZGU+LgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGludCBmbiAoKSBfX2F0dHJpYnV0ZV9fICgod2Fybl91bnVzZWRfcmVzdWx0KSk7CisgICAgICAgICAgaW50IGZvbyAoKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmbiAoKSAmbHQ7IDApIHJldHVybiAtMTsKKyAgICAgICAgICAgIGZuICgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+cmVzdWx0cyBpbiB3YXJuaW5nIG9uIGxpbmUgNS4KKworICAgICA8YnI+PGR0Pjxjb2RlPndlYWs8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdid2Vha18wMDdkLWF0dHJpYnV0ZS0yNzQxIj48L2E+VGhlIDxjb2RlPndlYWs8L2NvZGU+IGF0dHJpYnV0ZSBjYXVzZXMgdGhlIGRlY2xhcmF0aW9uIHRvIGJlIGVtaXR0ZWQgYXMgYSB3ZWFrCitzeW1ib2wgcmF0aGVyIHRoYW4gYSBnbG9iYWwuICBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgaW4gZGVmaW5pbmcKK2xpYnJhcnkgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdXNlciBjb2RlLCB0aG91Z2ggaXQgY2FuCithbHNvIGJlIHVzZWQgd2l0aCBub24tZnVuY3Rpb24gZGVjbGFyYXRpb25zLiAgV2VhayBzeW1ib2xzIGFyZSBzdXBwb3J0ZWQKK2ZvciBFTEYgdGFyZ2V0cywgYW5kIGFsc28gZm9yIGEub3V0IHRhcmdldHMgd2hlbiB1c2luZyB0aGUgR05VIGFzc2VtYmxlcgorYW5kIGxpbmtlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPndlYWtyZWY8L2NvZGU+PGR0Pjxjb2RlPndlYWtyZWYgKCI8L2NvZGU+PHZhcj50YXJnZXQ8L3Zhcj48Y29kZT4iKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3ZWFrcmVmXzAwN2QtYXR0cmlidXRlLTI3NDIiPjwvYT5UaGUgPGNvZGU+d2Vha3JlZjwvY29kZT4gYXR0cmlidXRlIG1hcmtzIGEgZGVjbGFyYXRpb24gYXMgYSB3ZWFrIHJlZmVyZW5jZS4gCitXaXRob3V0IGFyZ3VtZW50cywgaXQgc2hvdWxkIGJlIGFjY29tcGFuaWVkIGJ5IGFuIDxjb2RlPmFsaWFzPC9jb2RlPiBhdHRyaWJ1dGUKK25hbWluZyB0aGUgdGFyZ2V0IHN5bWJvbC4gIE9wdGlvbmFsbHksIHRoZSA8dmFyPnRhcmdldDwvdmFyPiBtYXkgYmUgZ2l2ZW4gYXMKK2FuIGFyZ3VtZW50IHRvIDxjb2RlPndlYWtyZWY8L2NvZGU+IGl0c2VsZi4gIEluIGVpdGhlciBjYXNlLCA8Y29kZT53ZWFrcmVmPC9jb2RlPgoraW1wbGljaXRseSBtYXJrcyB0aGUgZGVjbGFyYXRpb24gYXMgPGNvZGU+d2VhazwvY29kZT4uICBXaXRob3V0IGEKKzx2YXI+dGFyZ2V0PC92YXI+LCBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byA8Y29kZT53ZWFrcmVmPC9jb2RlPiBvciB0byA8Y29kZT5hbGlhczwvY29kZT4sCis8Y29kZT53ZWFrcmVmPC9jb2RlPiBpcyBlcXVpdmFsZW50IHRvIDxjb2RlPndlYWs8L2NvZGU+LgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHN0YXRpYyBpbnQgeCgpIF9fYXR0cmlidXRlX18gKCh3ZWFrcmVmICgieSIpKSk7CisgICAgICAgICAgLyogaXMgZXF1aXZhbGVudCB0by4uLiAqLworICAgICAgICAgIHN0YXRpYyBpbnQgeCgpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCB3ZWFrcmVmLCBhbGlhcyAoInkiKSkpOworICAgICAgICAgIC8qIGFuZCB0by4uLiAqLworICAgICAgICAgIHN0YXRpYyBpbnQgeCgpIF9fYXR0cmlidXRlX18gKCh3ZWFrcmVmKSk7CisgICAgICAgICAgc3RhdGljIGludCB4KCkgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgieSIpKSk7Cis8L3ByZT4KKyAgICAgPHA+QSB3ZWFrIHJlZmVyZW5jZSBpcyBhbiBhbGlhcyB0aGF0IGRvZXMgbm90IGJ5IGl0c2VsZiByZXF1aXJlIGEKK2RlZmluaXRpb24gdG8gYmUgZ2l2ZW4gZm9yIHRoZSB0YXJnZXQgc3ltYm9sLiAgSWYgdGhlIHRhcmdldCBzeW1ib2wgaXMKK29ubHkgcmVmZXJlbmNlZCB0aHJvdWdoIHdlYWsgcmVmZXJlbmNlcywgdGhlbiBpdCBiZWNvbWVzIGEgPGNvZGU+d2VhazwvY29kZT4KK3VuZGVmaW5lZCBzeW1ib2wuICBJZiBpdCBpcyBkaXJlY3RseSByZWZlcmVuY2VkLCBob3dldmVyLCB0aGVuIHN1Y2gKK3N0cm9uZyByZWZlcmVuY2VzIHByZXZhaWwsIGFuZCBhIGRlZmluaXRpb24gaXMgcmVxdWlyZWQgZm9yIHRoZQorc3ltYm9sLCBub3QgbmVjZXNzYXJpbHkgaW4gdGhlIHNhbWUgdHJhbnNsYXRpb24gdW5pdC4KKworICAgICA8cD5UaGUgZWZmZWN0IGlzIGVxdWl2YWxlbnQgdG8gbW92aW5nIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBhbGlhcyB0byBhCitzZXBhcmF0ZSB0cmFuc2xhdGlvbiB1bml0LCByZW5hbWluZyB0aGUgYWxpYXMgdG8gdGhlIGFsaWFzZWQgc3ltYm9sLAorZGVjbGFyaW5nIGl0IGFzIHdlYWssIGNvbXBpbGluZyB0aGUgdHdvIHNlcGFyYXRlIHRyYW5zbGF0aW9uIHVuaXRzIGFuZAorcGVyZm9ybWluZyBhIHJlbG9hZGFibGUgbGluayBvbiB0aGVtLgorCisgICAgIDxwPkF0IHByZXNlbnQsIGEgZGVjbGFyYXRpb24gdG8gd2hpY2ggPGNvZGU+d2Vha3JlZjwvY29kZT4gaXMgYXR0YWNoZWQgY2FuCitvbmx5IGJlIDxjb2RlPnN0YXRpYzwvY29kZT4uCisKKyA8L2RsPgorCisgPHA+WW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGF0dHJpYnV0ZXMgaW4gYSBkZWNsYXJhdGlvbiBieSBzZXBhcmF0aW5nIHRoZW0KK2J5IGNvbW1hcyB3aXRoaW4gdGhlIGRvdWJsZSBwYXJlbnRoZXNlcyBvciBieSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYW4KK2F0dHJpYnV0ZSBkZWNsYXJhdGlvbiB3aXRoIGFub3RoZXIgYXR0cmlidXRlIGRlY2xhcmF0aW9uLgorCisgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyM3ByYWdtYV8wMDdkXzAwMmMtcmVhc29uLWZvci1ub3QtdXNpbmctMjc0MyI+PC9hPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLXJlYXNvbi1mb3Itbm90LXVzaW5nLTI3NDQiPjwvYT5Tb21lIHBlb3BsZSBvYmplY3QgdG8gdGhlIDxjb2RlPl9fYXR0cmlidXRlX188L2NvZGU+IGZlYXR1cmUsIHN1Z2dlc3RpbmcgdGhhdAorSVNPIEMncyA8Y29kZT4jcHJhZ21hPC9jb2RlPiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiAgQXQgdGhlIHRpbWUKKzxjb2RlPl9fYXR0cmlidXRlX188L2NvZGU+IHdhcyBkZXNpZ25lZCwgdGhlcmUgd2VyZSB0d28gcmVhc29ucyBmb3Igbm90IGRvaW5nCit0aGlzLgorCisgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5JdCBpcyBpbXBvc3NpYmxlIHRvIGdlbmVyYXRlIDxjb2RlPiNwcmFnbWE8L2NvZGU+IGNvbW1hbmRzIGZyb20gYSBtYWNyby4KKworICAgICA8bGk+VGhlcmUgaXMgbm8gdGVsbGluZyB3aGF0IHRoZSBzYW1lIDxjb2RlPiNwcmFnbWE8L2NvZGU+IG1pZ2h0IG1lYW4gaW4gYW5vdGhlcgorY29tcGlsZXIuCisgICAgICA8L29sPgorCisgPHA+VGhlc2UgdHdvIHJlYXNvbnMgYXBwbGllZCB0byBhbG1vc3QgYW55IGFwcGxpY2F0aW9uIHRoYXQgbWlnaHQgaGF2ZSBiZWVuCitwcm9wb3NlZCBmb3IgPGNvZGU+I3ByYWdtYTwvY29kZT4uICBJdCB3YXMgYmFzaWNhbGx5IGEgbWlzdGFrZSB0byB1c2UKKzxjb2RlPiNwcmFnbWE8L2NvZGU+IGZvciA8ZW0+YW55dGhpbmc8L2VtPi4KKworIDxwPlRoZSBJU08gQzk5IHN0YW5kYXJkIGluY2x1ZGVzIDxjb2RlPl9QcmFnbWE8L2NvZGU+LCB3aGljaCBub3cgYWxsb3dzIHByYWdtYXMKK3RvIGJlIGdlbmVyYXRlZCBmcm9tIG1hY3Jvcy4gIEluIGFkZGl0aW9uLCBhIDxjb2RlPiNwcmFnbWEgR0NDPC9jb2RlPgorbmFtZXNwYWNlIGlzIG5vdyBpbiB1c2UgZm9yIEdDQy1zcGVjaWZpYyBwcmFnbWFzLiAgSG93ZXZlciwgaXQgaGFzIGJlZW4KK2ZvdW5kIGNvbnZlbmllbnQgdG8gdXNlIDxjb2RlPl9fYXR0cmlidXRlX188L2NvZGU+IHRvIGFjaGlldmUgYSBuYXR1cmFsCithdHRhY2htZW50IG9mIGF0dHJpYnV0ZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbnMsIHdoZXJlYXMKKzxjb2RlPiNwcmFnbWEgR0NDPC9jb2RlPiBpcyBvZiB1c2UgZm9yIGNvbnN0cnVjdHMgdGhhdCBkbyBub3QgbmF0dXJhbGx5IGZvcm0KK3BhcnQgb2YgdGhlIGdyYW1tYXIuICBTZWUgPGEgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXMgQWNjZXB0ZWQgYnkgR0NDPC9hPi4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRnVuY3Rpb24tTXVsdGl2ZXJzaW9uaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Z1bmN0aW9uLU11bHRpdmVyc2lvbmluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDEyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Z1bmN0aW9uLU11bHRpdmVyc2lvbmluZy5odG1sCkBAIC0wLDAgKzEsMTEwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GdW5jdGlvbiBNdWx0aXZlcnNpb25pbmcgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiIHRpdGxlPSJDKysgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNfMDAyYl8wMDJiLUF0dHJpYnV0ZXMuaHRtbCNDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzIiB0aXRsZT0iQysrIEF0dHJpYnV0ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJOYW1lc3BhY2UtQXNzb2NpYXRpb24uaHRtbCNOYW1lc3BhY2UtQXNzb2NpYXRpb24iIHRpdGxlPSJOYW1lc3BhY2UgQXNzb2NpYXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRnVuY3Rpb24tTXVsdGl2ZXJzaW9uaW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik5hbWVzcGFjZS1Bc3NvY2lhdGlvbi5odG1sI05hbWVzcGFjZS1Bc3NvY2lhdGlvbiI+TmFtZXNwYWNlIEFzc29jaWF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ18wMDJiXzAwMmItQXR0cmlidXRlcy5odG1sI0NfMDAyYl8wMDJiLUF0dHJpYnV0ZXMiPkMrKyBBdHRyaWJ1dGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiPkMrKyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny44IEZ1bmN0aW9uIE11bHRpdmVyc2lvbmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9uLXZlcnNpb25zLTM1MjciPjwvYT4KK1dpdGggdGhlIEdOVSBDKysgZnJvbnQgZW5kLCBmb3IgdGFyZ2V0IGkzODYsIHlvdSBtYXkgc3BlY2lmeSBtdWx0aXBsZQordmVyc2lvbnMgb2YgYSBmdW5jdGlvbiwgd2hlcmUgZWFjaCBmdW5jdGlvbiBpcyBzcGVjaWFsaXplZCBmb3IgYQorc3BlY2lmaWMgdGFyZ2V0IGZlYXR1cmUuICBBdCBydW50aW1lLCB0aGUgYXBwcm9wcmlhdGUgdmVyc2lvbiBvZiB0aGUKK2Z1bmN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgZGVwZW5kaW5nIG9uIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YKK3RoZSBleGVjdXRpb24gcGxhdGZvcm0uICBIZXJlIGlzIGFuIGV4YW1wbGUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgiZGVmYXVsdCIpKSkKKyAgICAgaW50IGZvbyAoKQorICAgICB7CisgICAgICAgLy8gVGhlIGRlZmF1bHQgdmVyc2lvbiBvZiBmb28uCisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAgICAgCisgICAgIF9fYXR0cmlidXRlX18gKCh0YXJnZXQgKCJzc2U0LjIiKSkpCisgICAgIGludCBmb28gKCkKKyAgICAgeworICAgICAgIC8vIGZvbyB2ZXJzaW9uIGZvciBTU0U0LjIKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorICAgICAKKyAgICAgX19hdHRyaWJ1dGVfXyAoKHRhcmdldCAoImFyY2g9YXRvbSIpKSkKKyAgICAgaW50IGZvbyAoKQorICAgICB7CisgICAgICAgLy8gZm9vIHZlcnNpb24gZm9yIHRoZSBJbnRlbCBBVE9NIHByb2Nlc3NvcgorICAgICAgIHJldHVybiAyOworICAgICB9CisgICAgIAorICAgICBfX2F0dHJpYnV0ZV9fICgodGFyZ2V0ICgiYXJjaD1hbWRmYW0xMCIpKSkKKyAgICAgaW50IGZvbyAoKQorICAgICB7CisgICAgICAgLy8gZm9vIHZlcnNpb24gZm9yIHRoZSBBTUQgRmFtaWx5IDB4MTAgcHJvY2Vzc29ycy4KKyAgICAgICByZXR1cm4gMzsKKyAgICAgfQorICAgICAKKyAgICAgaW50IG1haW4gKCkKKyAgICAgeworICAgICAgIGludCAoKnApKCkgPSAmYW1wO2ZvbzsKKyAgICAgICBhc3NlcnQgKCgqcCkgKCkgPT0gZm9vICgpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorPC9wcmU+CisgPHA+SW4gdGhlIGFib3ZlIGV4YW1wbGUsIGZvdXIgdmVyc2lvbnMgb2YgZnVuY3Rpb24gZm9vIGFyZSBjcmVhdGVkLiBUaGUKK2ZpcnN0IHZlcnNpb24gb2YgZm9vIHdpdGggdGhlIHRhcmdldCBhdHRyaWJ1dGUgImRlZmF1bHQiIGlzIHRoZSBkZWZhdWx0Cit2ZXJzaW9uLiAgVGhpcyB2ZXJzaW9uIGdldHMgZXhlY3V0ZWQgd2hlbiBubyBvdGhlciB0YXJnZXQgc3BlY2lmaWMKK3ZlcnNpb24gcXVhbGlmaWVzIGZvciBleGVjdXRpb24gb24gYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLiBBIG5ldyB2ZXJzaW9uCitvZiBmb28gaXMgY3JlYXRlZCBieSB1c2luZyB0aGUgc2FtZSBmdW5jdGlvbiBzaWduYXR1cmUgYnV0IHdpdGggYQorZGlmZmVyZW50IHRhcmdldCBzdHJpbmcuICBGdW5jdGlvbiBmb28gaXMgY2FsbGVkIG9yIGEgcG9pbnRlciB0byBpdCBpcwordGFrZW4ganVzdCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbi4gIEdDQyB0YWtlcyBjYXJlIG9mIGRvaW5nIHRoZQorZGlzcGF0Y2hpbmcgdG8gY2FsbCB0aGUgcmlnaHQgdmVyc2lvbiBhdCBydW50aW1lLiAgUmVmZXIgdG8gdGhlCis8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvd2lraS9GdW5jdGlvbk11bHRpVmVyc2lvbmluZyI+R0NDIHdpa2kgb24gRnVuY3Rpb24gTXVsdGl2ZXJzaW9uaW5nPC9hPiBmb3IgbW9yZSBkZXRhaWxzLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GdW5jdGlvbi1OYW1lcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GdW5jdGlvbi1OYW1lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWYzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Z1bmN0aW9uLU5hbWVzLmh0bWwKQEAgLTAsMCArMSwxMjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZ1bmN0aW9uIE5hbWVzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkluY29tcGxldGUtRW51bXMuaHRtbCNJbmNvbXBsZXRlLUVudW1zIiB0aXRsZT0iSW5jb21wbGV0ZSBFbnVtcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJldHVybi1BZGRyZXNzLmh0bWwjUmV0dXJuLUFkZHJlc3MiIHRpdGxlPSJSZXR1cm4gQWRkcmVzcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGdW5jdGlvbi1OYW1lcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSZXR1cm4tQWRkcmVzcy5odG1sI1JldHVybi1BZGRyZXNzIj5SZXR1cm4gQWRkcmVzczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkluY29tcGxldGUtRW51bXMuaHRtbCNJbmNvbXBsZXRlLUVudW1zIj5JbmNvbXBsZXRlIEVudW1zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjQ3IEZ1bmN0aW9uIE5hbWVzIGFzIFN0cmluZ3M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZmdW5jXzAwNWZfMDA1Zl8wMDdkLWlkZW50aWZpZXItMjg4MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZkZVTkNUSU9OXzAwNWZfMDA1Zl8wMDdkLWlkZW50aWZpZXItMjg4NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZlBSRVRUWV8wMDVmRlVOQ1RJT05fMDA1Zl8wMDVmXzAwN2QtaWRlbnRpZmllci0yODg1Ij48L2E+CitHQ0MgcHJvdmlkZXMgdGhyZWUgbWFnaWMgdmFyaWFibGVzIHRoYXQgaG9sZCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudAorZnVuY3Rpb24sIGFzIGEgc3RyaW5nLiAgVGhlIGZpcnN0IG9mIHRoZXNlIGlzIDxjb2RlPl9fZnVuY19fPC9jb2RlPiwgd2hpY2gKK2lzIHBhcnQgb2YgdGhlIEM5OSBzdGFuZGFyZDoKKworIDxwPlRoZSBpZGVudGlmaWVyIDxjb2RlPl9fZnVuY19fPC9jb2RlPiBpcyBpbXBsaWNpdGx5IGRlY2xhcmVkIGJ5IHRoZSB0cmFuc2xhdG9yCithcyBpZiwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBvcGVuaW5nIGJyYWNlIG9mIGVhY2ggZnVuY3Rpb24KK2RlZmluaXRpb24sIHRoZSBkZWNsYXJhdGlvbgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RhdGljIGNvbnN0IGNoYXIgX19mdW5jX19bXSA9ICJmdW5jdGlvbi1uYW1lIjsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+YXBwZWFyZWQsIHdoZXJlIGZ1bmN0aW9uLW5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGxleGljYWxseS1lbmNsb3NpbmcKK2Z1bmN0aW9uLiAgVGhpcyBuYW1lIGlzIHRoZSB1bmFkb3JuZWQgbmFtZSBvZiB0aGUgZnVuY3Rpb24uCisKKyA8cD48Y29kZT5fX0ZVTkNUSU9OX188L2NvZGU+IGlzIGFub3RoZXIgbmFtZSBmb3IgPGNvZGU+X19mdW5jX188L2NvZGU+LiAgT2xkZXIKK3ZlcnNpb25zIG9mIEdDQyByZWNvZ25pemUgb25seSB0aGlzIG5hbWUuICBIb3dldmVyLCBpdCBpcyBub3QKK3N0YW5kYXJkaXplZC4gIEZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCB3ZSByZWNvbW1lbmQgeW91IHVzZQorPGNvZGU+X19mdW5jX188L2NvZGU+LCBidXQgcHJvdmlkZSBhIGZhbGxiYWNrIGRlZmluaXRpb24gd2l0aCB0aGUKK3ByZXByb2Nlc3NvcjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNpZiBfX1NURENfVkVSU0lPTl9fICZsdDsgMTk5OTAxTAorICAgICAjIGlmIF9fR05VQ19fICZndDs9IDIKKyAgICAgIyAgZGVmaW5lIF9fZnVuY19fIF9fRlVOQ1RJT05fXworICAgICAjIGVsc2UKKyAgICAgIyAgZGVmaW5lIF9fZnVuY19fICImbHQ7dW5rbm93biZndDsiCisgICAgICMgZW5kaWYKKyAgICAgI2VuZGlmCis8L3ByZT4KKyA8cD5JbiBDLCA8Y29kZT5fX1BSRVRUWV9GVU5DVElPTl9fPC9jb2RlPiBpcyB5ZXQgYW5vdGhlciBuYW1lIGZvcgorPGNvZGU+X19mdW5jX188L2NvZGU+LiAgSG93ZXZlciwgaW4gQysrLCA8Y29kZT5fX1BSRVRUWV9GVU5DVElPTl9fPC9jb2RlPiBjb250YWlucwordGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiBhcyB3ZWxsIGFzIGl0cyBiYXJlIG5hbWUuICBGb3IKK2V4YW1wbGUsIHRoaXMgcHJvZ3JhbToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGV4dGVybiAiQyIgeworICAgICBleHRlcm4gaW50IHByaW50ZiAoY2hhciAqLCAuLi4pOworICAgICB9CisgICAgIAorICAgICBjbGFzcyBhIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICB2b2lkIHN1YiAoaW50IGkpCisgICAgICAgICB7CisgICAgICAgICAgIHByaW50ZiAoIl9fRlVOQ1RJT05fXyA9ICVzXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICBwcmludGYgKCJfX1BSRVRUWV9GVU5DVElPTl9fID0gJXNcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOworICAgICAgICAgfQorICAgICB9OworICAgICAKKyAgICAgaW50CisgICAgIG1haW4gKHZvaWQpCisgICAgIHsKKyAgICAgICBhIGF4OworICAgICAgIGF4LnN1YiAoMCk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+Z2l2ZXMgdGhpcyBvdXRwdXQ6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBfX0ZVTkNUSU9OX18gPSBzdWIKKyAgICAgX19QUkVUVFlfRlVOQ1RJT05fXyA9IHZvaWQgYTo6c3ViKGludCkKKzwvcHJlPgorIDxwPlRoZXNlIGlkZW50aWZpZXJzIGFyZSBub3QgcHJlcHJvY2Vzc29yIG1hY3Jvcy4gIEluIEdDQyAzLjMgYW5kCitlYXJsaWVyLCBpbiBDIG9ubHksIDxjb2RlPl9fRlVOQ1RJT05fXzwvY29kZT4gYW5kIDxjb2RlPl9fUFJFVFRZX0ZVTkNUSU9OX188L2NvZGU+Cit3ZXJlIHRyZWF0ZWQgYXMgc3RyaW5nIGxpdGVyYWxzOyB0aGV5IGNvdWxkIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZQorPGNvZGU+Y2hhcjwvY29kZT4gYXJyYXlzLCBhbmQgdGhleSBjb3VsZCBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlciBzdHJpbmcKK2xpdGVyYWxzLiAgR0NDIDMuNCBhbmQgbGF0ZXIgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGxpa2UKKzxjb2RlPl9fZnVuY19fPC9jb2RlPi4gIEluIEMrKywgPGNvZGU+X19GVU5DVElPTl9fPC9jb2RlPiBhbmQKKzxjb2RlPl9fUFJFVFRZX0ZVTkNUSU9OX188L2NvZGU+IGhhdmUgYWx3YXlzIGJlZW4gdmFyaWFibGVzLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GdW5jdGlvbi1Qcm90b3R5cGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Z1bmN0aW9uLVByb3RvdHlwZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTM2ZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GdW5jdGlvbi1Qcm90b3R5cGVzLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZ1bmN0aW9uIFByb3RvdHlwZXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQXR0cmlidXRlLVN5bnRheC5odG1sI0F0dHJpYnV0ZS1TeW50YXgiIHRpdGxlPSJBdHRyaWJ1dGUgU3ludGF4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ18wMDJiXzAwMmItQ29tbWVudHMuaHRtbCNDXzAwMmJfMDAyYi1Db21tZW50cyIgdGl0bGU9IkMrKyBDb21tZW50cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGdW5jdGlvbi1Qcm90b3R5cGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNfMDAyYl8wMDJiLUNvbW1lbnRzLmh0bWwjQ18wMDJiXzAwMmItQ29tbWVudHMiPkMrKyBDb21tZW50czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkF0dHJpYnV0ZS1TeW50YXguaHRtbCNBdHRyaWJ1dGUtU3ludGF4Ij5BdHRyaWJ1dGUgU3ludGF4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjMyIFByb3RvdHlwZXMgYW5kIE9sZC1TdHlsZSBGdW5jdGlvbiBEZWZpbml0aW9uczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9uLXByb3RvdHlwZS1kZWNsYXJhdGlvbnMtMjc0NiI+PC9hPjxhIG5hbWU9ImluZGV4LW9sZF8wMDJkc3R5bGUtZnVuY3Rpb24tZGVmaW5pdGlvbnMtMjc0NyI+PC9hPjxhIG5hbWU9ImluZGV4LXByb21vdGlvbi1vZi1mb3JtYWwtcGFyYW1ldGVycy0yNzQ4Ij48L2E+CitHTlUgQyBleHRlbmRzIElTTyBDIHRvIGFsbG93IGEgZnVuY3Rpb24gcHJvdG90eXBlIHRvIG92ZXJyaWRlIGEgbGF0ZXIKK29sZC1zdHlsZSBub24tcHJvdG90eXBlIGRlZmluaXRpb24uICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPlVzZSBwcm90b3R5cGVzIHVubGVzcyB0aGUgY29tcGlsZXIgaXMgb2xkLWZhc2hpb25lZC48L3NwYW4+ICAqLworICAgICAjaWZkZWYgX19TVERDX18KKyAgICAgI2RlZmluZSBQKHgpIHgKKyAgICAgI2Vsc2UKKyAgICAgI2RlZmluZSBQKHgpICgpCisgICAgICNlbmRpZgorICAgICAKKyAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj5Qcm90b3R5cGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uPC9zcGFuPiAgKi8KKyAgICAgaW50IGlzcm9vdCBQKCh1aWRfdCkpOworICAgICAKKyAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj5PbGQtc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbi48L3NwYW4+ICAqLworICAgICBpbnQKKyAgICAgaXNyb290ICh4KSAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Pz8/IGxvc3NhZ2UgaGVyZSA/Pz88L3NwYW4+ICovCisgICAgICAgICAgdWlkX3QgeDsKKyAgICAgeworICAgICAgIHJldHVybiB4ID09IDA7CisgICAgIH0KKzwvcHJlPgorIDxwPlN1cHBvc2UgdGhlIHR5cGUgPGNvZGU+dWlkX3Q8L2NvZGU+IGhhcHBlbnMgdG8gYmUgPGNvZGU+c2hvcnQ8L2NvZGU+LiAgSVNPIEMgZG9lcworbm90IGFsbG93IHRoaXMgZXhhbXBsZSwgYmVjYXVzZSBzdWJ3b3JkIGFyZ3VtZW50cyBpbiBvbGQtc3R5bGUKK25vbi1wcm90b3R5cGUgZGVmaW5pdGlvbnMgYXJlIHByb21vdGVkLiAgVGhlcmVmb3JlIGluIHRoaXMgZXhhbXBsZSB0aGUKK2Z1bmN0aW9uIGRlZmluaXRpb24ncyBhcmd1bWVudCBpcyByZWFsbHkgYW4gPGNvZGU+aW50PC9jb2RlPiwgd2hpY2ggZG9lcyBub3QKK21hdGNoIHRoZSBwcm90b3R5cGUgYXJndW1lbnQgdHlwZSBvZiA8Y29kZT5zaG9ydDwvY29kZT4uCisKKyA8cD5UaGlzIHJlc3RyaWN0aW9uIG9mIElTTyBDIG1ha2VzIGl0IGhhcmQgdG8gd3JpdGUgY29kZSB0aGF0IGlzIHBvcnRhYmxlCit0byB0cmFkaXRpb25hbCBDIGNvbXBpbGVycywgYmVjYXVzZSB0aGUgcHJvZ3JhbW1lciBkb2VzIG5vdCBrbm93Cit3aGV0aGVyIHRoZSA8Y29kZT51aWRfdDwvY29kZT4gdHlwZSBpcyA8Y29kZT5zaG9ydDwvY29kZT4sIDxjb2RlPmludDwvY29kZT4sIG9yCis8Y29kZT5sb25nPC9jb2RlPi4gIFRoZXJlZm9yZSwgaW4gY2FzZXMgbGlrZSB0aGVzZSBHTlUgQyBhbGxvd3MgYSBwcm90b3R5cGUKK3RvIG92ZXJyaWRlIGEgbGF0ZXIgb2xkLXN0eWxlIGRlZmluaXRpb24uICBNb3JlIHByZWNpc2VseSwgaW4gR05VIEMsIGEKK2Z1bmN0aW9uIHByb3RvdHlwZSBhcmd1bWVudCB0eXBlIG92ZXJyaWRlcyB0aGUgYXJndW1lbnQgdHlwZSBzcGVjaWZpZWQKK2J5IGEgbGF0ZXIgb2xkLXN0eWxlIGRlZmluaXRpb24gaWYgdGhlIGZvcm1lciB0eXBlIGlzIHRoZSBzYW1lIGFzIHRoZQorbGF0dGVyIHR5cGUgYmVmb3JlIHByb21vdGlvbi4gIFRodXMgaW4gR05VIEMgdGhlIGFib3ZlIGV4YW1wbGUgaXMKK2VxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCBpc3Jvb3QgKHVpZF90KTsKKyAgICAgCisgICAgIGludAorICAgICBpc3Jvb3QgKHVpZF90IHgpCisgICAgIHsKKyAgICAgICByZXR1cm4geCA9PSAwOworICAgICB9Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkdOVSBDKysgZG9lcyBub3Qgc3VwcG9ydCBvbGQtc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIHNvIHRoaXMKK2V4dGVuc2lvbiBpcyBpcnJlbGV2YW50LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTU0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0Z1bmN0aW9uLVNwZWNpZmljLU9wdGlvbi1QcmFnbWFzLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZ1bmN0aW9uIFNwZWNpZmljIE9wdGlvbiBQcmFnbWFzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIiB0aXRsZT0iUHJhZ21hcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlB1c2hfMDAyZlBvcC1NYWNyby1QcmFnbWFzLmh0bWwjUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMiIHRpdGxlPSJQdXNoL1BvcCBNYWNybyBQcmFnbWFzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZ1bmN0aW9uLVNwZWNpZmljLU9wdGlvbi1QcmFnbWFzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMuaHRtbCNQdXNoXzAwMmZQb3AtTWFjcm8tUHJhZ21hcyI+UHVzaC9Qb3AgTWFjcm8gUHJhZ21hczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41OC4xMyBGdW5jdGlvbiBTcGVjaWZpYyBPcHRpb24gUHJhZ21hczwvaDQ+CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNwcmFnbWEgR0NDIHRhcmdldCAoPC9jb2RlPjx2YXI+InN0cmluZyI8L3Zhcj48Y29kZT4uLi4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWEtR0NDLXRhcmdldC0zNDc5Ij48L2E+CitUaGlzIHByYWdtYSBhbGxvd3MgeW91IHRvIHNldCB0YXJnZXQgc3BlY2lmaWMgb3B0aW9ucyBmb3IgZnVuY3Rpb25zCitkZWZpbmVkIGxhdGVyIGluIHRoZSBzb3VyY2UgZmlsZS4gIE9uZSBvciBtb3JlIHN0cmluZ3MgY2FuIGJlCitzcGVjaWZpZWQuICBFYWNoIGZ1bmN0aW9uIHRoYXQgaXMgZGVmaW5lZCBhZnRlciB0aGlzIHBvaW50IGlzIGFzCitpZiA8Y29kZT5hdHRyaWJ1dGUoKHRhcmdldCgiU1RSSU5HIikpKTwvY29kZT4gd2FzIHNwZWNpZmllZCBmb3IgdGhhdAorZnVuY3Rpb24uICBUaGUgcGFyZW50aGVzaXMgYXJvdW5kIHRoZSBvcHRpb25zIGlzIG9wdGlvbmFsLiAKK1NlZSA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4sIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorPGNvZGU+dGFyZ2V0PC9jb2RlPiBhdHRyaWJ1dGUgYW5kIHRoZSBhdHRyaWJ1dGUgc3ludGF4LgorCisgICAgIDxwPlRoZSA8Y29kZT4jcHJhZ21hIEdDQyB0YXJnZXQ8L2NvZGU+IGF0dHJpYnV0ZSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gR0NDIHZlcnNpb25zIGVhcmxpZXIKK3RoYW4gNC40IGZvciB0aGUgaTM4Ni94ODZfNjQgYW5kIDQuNiBmb3IgdGhlIFBvd2VyUEMgYmFjayBlbmRzLiAgQXQKK3ByZXNlbnQsIGl0IGlzIG5vdCBpbXBsZW1lbnRlZCBmb3Igb3RoZXIgYmFjayBlbmRzLiAKKzwvZGw+CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNwcmFnbWEgR0NDIG9wdGltaXplICg8L2NvZGU+PHZhcj4ic3RyaW5nIjwvdmFyPjxjb2RlPi4uLik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYS1HQ0Mtb3B0aW1pemUtMzQ4MCI+PC9hPgorVGhpcyBwcmFnbWEgYWxsb3dzIHlvdSB0byBzZXQgZ2xvYmFsIG9wdGltaXphdGlvbiBvcHRpb25zIGZvciBmdW5jdGlvbnMKK2RlZmluZWQgbGF0ZXIgaW4gdGhlIHNvdXJjZSBmaWxlLiAgT25lIG9yIG1vcmUgc3RyaW5ncyBjYW4gYmUKK3NwZWNpZmllZC4gIEVhY2ggZnVuY3Rpb24gdGhhdCBpcyBkZWZpbmVkIGFmdGVyIHRoaXMgcG9pbnQgaXMgYXMKK2lmIDxjb2RlPmF0dHJpYnV0ZSgob3B0aW1pemUoIlNUUklORyIpKSk8L2NvZGU+IHdhcyBzcGVjaWZpZWQgZm9yIHRoYXQKK2Z1bmN0aW9uLiAgVGhlIHBhcmVudGhlc2lzIGFyb3VuZCB0aGUgb3B0aW9ucyBpcyBvcHRpb25hbC4gCitTZWUgPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKzxjb2RlPm9wdGltaXplPC9jb2RlPiBhdHRyaWJ1dGUgYW5kIHRoZSBhdHRyaWJ1dGUgc3ludGF4LgorCisgICAgIDxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgR0NDIG9wdGltaXplPC9zcGFuPjwvc2FtcD4mcnNxdW87IHByYWdtYSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gR0NDCit2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gNC40LiAKKzwvZGw+CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNwcmFnbWEgR0NDIHB1c2hfb3B0aW9uczwvY29kZT48ZHQ+PGNvZGU+I3ByYWdtYSBHQ0MgcG9wX29wdGlvbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYS1HQ0MtcHVzaF8wMDVmb3B0aW9ucy0zNDgxIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJhZ21hLUdDQy1wb3BfMDA1Zm9wdGlvbnMtMzQ4MiI+PC9hPgorVGhlc2UgcHJhZ21hcyBtYWludGFpbiBhIHN0YWNrIG9mIHRoZSBjdXJyZW50IHRhcmdldCBhbmQgb3B0aW1pemF0aW9uCitvcHRpb25zLiAgSXQgaXMgaW50ZW5kZWQgZm9yIGluY2x1ZGUgZmlsZXMgd2hlcmUgeW91IHRlbXBvcmFyaWx5IHdhbnQKK3RvIHN3aXRjaCB0byB1c2luZyBhIGRpZmZlcmVudCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgR0NDIHRhcmdldDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hIEdDQyBvcHRpbWl6ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgdGhlbiB0byBwb3AgYmFjayB0byB0aGUgcHJldmlvdXMKK29wdGlvbnMuCisKKyAgICAgPHA+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgR0NDIHBvcF9vcHRpb25zPC9zcGFuPjwvc2FtcD4mcnNxdW87CitwcmFnbWFzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gR0NDIHZlcnNpb25zIGVhcmxpZXIgdGhhbiA0LjQuIAorPC9kbD4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+I3ByYWdtYSBHQ0MgcmVzZXRfb3B0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hLUdDQy1yZXNldF8wMDVmb3B0aW9ucy0zNDgzIj48L2E+CitUaGlzIHByYWdtYSBjbGVhcnMgdGhlIGN1cnJlbnQgPGNvZGU+I3ByYWdtYSBHQ0MgdGFyZ2V0PC9jb2RlPiBhbmQKKzxjb2RlPiNwcmFnbWEgR0NDIG9wdGltaXplPC9jb2RlPiB0byB1c2UgdGhlIGRlZmF1bHQgc3dpdGNoZXMgYXMgc3BlY2lmaWVkCitvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgIDxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgR0NDIHJlc2V0X29wdGlvbnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJhZ21hIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBHQ0MKK3ZlcnNpb25zIGVhcmxpZXIgdGhhbiA0LjQuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRnVuZGluZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9GdW5kaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3YjUxNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvRnVuZGluZy5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GdW5kaW5nIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29udHJpYnV0aW5nLmh0bWwjQ29udHJpYnV0aW5nIiB0aXRsZT0iQ29udHJpYnV0aW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR05VLVByb2plY3QuaHRtbCNHTlUtUHJvamVjdCIgdGl0bGU9IkdOVSBQcm9qZWN0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZ1bmRpbmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR05VLVByb2plY3QuaHRtbCNHTlUtUHJvamVjdCI+R05VIFByb2plY3Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb250cmlidXRpbmcuaHRtbCNDb250cmlidXRpbmciPkNvbnRyaWJ1dGluZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+Cis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkZ1bmRpbmcgRnJlZSBTb2Z0d2FyZTwvaDI+CisKKzxwPklmIHlvdSB3YW50IHRvIGhhdmUgbW9yZSBmcmVlIHNvZnR3YXJlIGEgZmV3IHllYXJzIGZyb20gbm93LCBpdCBtYWtlcworc2Vuc2UgZm9yIHlvdSB0byBoZWxwIGVuY291cmFnZSBwZW9wbGUgdG8gY29udHJpYnV0ZSBmdW5kcyBmb3IgaXRzCitkZXZlbG9wbWVudC4gIFRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCBrbm93biBpcyB0byBlbmNvdXJhZ2UKK2NvbW1lcmNpYWwgcmVkaXN0cmlidXRvcnMgdG8gZG9uYXRlLgorCisgPHA+VXNlcnMgb2YgZnJlZSBzb2Z0d2FyZSBzeXN0ZW1zIGNhbiBib29zdCB0aGUgcGFjZSBvZiBkZXZlbG9wbWVudCBieQorZW5jb3VyYWdpbmcgZm9yLWEtZmVlIGRpc3RyaWJ1dG9ycyB0byBkb25hdGUgcGFydCBvZiB0aGVpciBzZWxsaW5nIHByaWNlCit0byBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMmbWRhc2g7dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIG90aGVycy4KKworIDxwPlRoZSB3YXkgdG8gY29udmluY2UgZGlzdHJpYnV0b3JzIHRvIGRvIHRoaXMgaXMgdG8gZGVtYW5kIGl0IGFuZCBleHBlY3QKK2l0IGZyb20gdGhlbS4gIFNvIHdoZW4geW91IGNvbXBhcmUgZGlzdHJpYnV0b3JzLCBqdWRnZSB0aGVtIHBhcnRseSBieQoraG93IG11Y2ggdGhleSBnaXZlIHRvIGZyZWUgc29mdHdhcmUgZGV2ZWxvcG1lbnQuICBTaG93IGRpc3RyaWJ1dG9ycwordGhleSBtdXN0IGNvbXBldGUgdG8gYmUgdGhlIG9uZSB3aG8gZ2l2ZXMgdGhlIG1vc3QuCisKKyA8cD5UbyBtYWtlIHRoaXMgYXBwcm9hY2ggd29yaywgeW91IG11c3QgaW5zaXN0IG9uIG51bWJlcnMgdGhhdCB5b3UgY2FuCitjb21wYXJlLCBzdWNoIGFzLCAmbGRxdW87V2Ugd2lsbCBkb25hdGUgdGVuIGRvbGxhcnMgdG8gdGhlIEZyb2JuaXR6IHByb2plY3QKK2ZvciBlYWNoIGRpc2sgc29sZC4mcmRxdW87ICBEb24ndCBiZSBzYXRpc2ZpZWQgd2l0aCBhIHZhZ3VlIHByb21pc2UsIHN1Y2ggYXMKKyZsZHF1bztBIHBvcnRpb24gb2YgdGhlIHByb2ZpdHMgYXJlIGRvbmF0ZWQsJnJkcXVvOyBzaW5jZSBpdCBkb2Vzbid0IGdpdmUgYSBiYXNpcworZm9yIGNvbXBhcmlzb24uCisKKyA8cD5FdmVuIGEgcHJlY2lzZSBmcmFjdGlvbiAmbGRxdW87b2YgdGhlIHByb2ZpdHMgZnJvbSB0aGlzIGRpc2smcmRxdW87IGlzIG5vdCB2ZXJ5CittZWFuaW5nZnVsLCBzaW5jZSBjcmVhdGl2ZSBhY2NvdW50aW5nIGFuZCB1bnJlbGF0ZWQgYnVzaW5lc3MgZGVjaXNpb25zCitjYW4gZ3JlYXRseSBhbHRlciB3aGF0IGZyYWN0aW9uIG9mIHRoZSBzYWxlcyBwcmljZSBjb3VudHMgYXMgcHJvZml0LiAKK0lmIHRoZSBwcmljZSB5b3UgcGF5IGlzICQ1MCwgdGVuIHBlcmNlbnQgb2YgdGhlIHByb2ZpdCBpcyBwcm9iYWJseQorbGVzcyB0aGFuIGEgZG9sbGFyOyBpdCBtaWdodCBiZSBhIGZldyBjZW50cywgb3Igbm90aGluZyBhdCBhbGwuCisKKyA8cD5Tb21lIHJlZGlzdHJpYnV0b3JzIGRvIGRldmVsb3BtZW50IHdvcmsgdGhlbXNlbHZlcy4gIFRoaXMgaXMgdXNlZnVsIHRvbzsKK2J1dCB0byBrZWVwIGV2ZXJ5b25lIGhvbmVzdCwgeW91IG5lZWQgdG8gaW5xdWlyZSBob3cgbXVjaCB0aGV5IGRvLCBhbmQKK3doYXQga2luZC4gIFNvbWUga2luZHMgb2YgZGV2ZWxvcG1lbnQgbWFrZSBtdWNoIG1vcmUgbG9uZy10ZXJtCitkaWZmZXJlbmNlIHRoYW4gb3RoZXJzLiAgRm9yIGV4YW1wbGUsIG1haW50YWluaW5nIGEgc2VwYXJhdGUgdmVyc2lvbiBvZgorYSBwcm9ncmFtIGNvbnRyaWJ1dGVzIHZlcnkgbGl0dGxlOyBtYWludGFpbmluZyB0aGUgc3RhbmRhcmQgdmVyc2lvbiBvZiBhCitwcm9ncmFtIGZvciB0aGUgd2hvbGUgY29tbXVuaXR5IGNvbnRyaWJ1dGVzIG11Y2guICBFYXN5IG5ldyBwb3J0cworY29udHJpYnV0ZSBsaXR0bGUsIHNpbmNlIHNvbWVvbmUgZWxzZSB3b3VsZCBzdXJlbHkgZG8gdGhlbTsgZGlmZmljdWx0Citwb3J0cyBzdWNoIGFzIGFkZGluZyBhIG5ldyBDUFUgdG8gdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIGNvbnRyaWJ1dGUgbW9yZTsKK21ham9yIG5ldyBmZWF0dXJlcyBvciBwYWNrYWdlcyBjb250cmlidXRlIHRoZSBtb3N0LgorCisgPHA+QnkgZXN0YWJsaXNoaW5nIHRoZSBpZGVhIHRoYXQgc3VwcG9ydGluZyBmdXJ0aGVyIGRldmVsb3BtZW50IGlzICZsZHF1bzt0aGUKK3Byb3BlciB0aGluZyB0byBkbyZyZHF1bzsgd2hlbiBkaXN0cmlidXRpbmcgZnJlZSBzb2Z0d2FyZSBmb3IgYSBmZWUsIHdlIGNhbgorYXNzdXJlIGEgc3RlYWR5IGZsb3cgb2YgcmVzb3VyY2VzIGludG8gbWFraW5nIG1vcmUgZnJlZSBzb2Z0d2FyZS4gCis8IS0tIG1hbiBlbmQgLS0+CisKKzxwcmUgY2xhc3M9ImRpc3BsYXkiPiAgICAgPCEtLSBtYW4gYmVnaW4gQ09QWVJJR0hUIC0tPgorICAgICBDb3B5cmlnaHQgJmNvcHk7IDE5OTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIFZlcmJhdGltIGNvcHlpbmcgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBwZXJtaXR0ZWQKKyAgICAgd2l0aG91dCByb3lhbHR5OyBhbHRlcmF0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuCisgICAgIDwhLS0gbWFuIGVuZCAtLT4KKzwvcHJlPgorIDwhLS0gQ29weXJpZ2h0IChDKSAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2MxMDg2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDUyNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29weWluZy5odG1sI0NvcHlpbmciIHRpdGxlPSJDb3B5aW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29udHJpYnV0b3JzLmh0bWwjQ29udHJpYnV0b3JzIiB0aXRsZT0iQ29udHJpYnV0b3JzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb250cmlidXRvcnMuaHRtbCNDb250cmlidXRvcnMiPkNvbnRyaWJ1dG9yczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvcHlpbmcuaHRtbCNDb3B5aW5nIj5Db3B5aW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvaDI+CisKKyA8cD48YSBuYW1lPSJpbmRleC1GRExfMDAyYy1HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UtMzYwNCI+PC9hPjxkaXYgYWxpZ249ImNlbnRlciI+VmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwODwvZGl2PgorCis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4gICAgIENvcHlyaWdodCAmY29weTsgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgPGEgaHJlZj0iaHR0cDovL2ZzZi5vcmcvIj5odHRwOi8vZnNmLm9yZy88L2E+CisgICAgIAorICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCis8L3ByZT4KKyAgICAgPG9sIHR5cGU9MSBzdGFydD0wPgorPGxpPlBSRUFNQkxFCisKKyAgICAgPHA+VGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50IDxkZm4+ZnJlZTwvZGZuPiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuIAorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCisgICAgIDxwPlRoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgJmxkcXVvO2NvcHlsZWZ0JnJkcXVvOywgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCisgICAgIDxwPldlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisgICAgIDxsaT5BUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCisgICAgIDxwPlRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICZsZHF1bztEb2N1bWVudCZyZHF1bzssIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICZsZHF1bzt5b3UmcmRxdW87LiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCisgICAgIDxwPkEgJmxkcXVvO01vZGlmaWVkIFZlcnNpb24mcmRxdW87IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworICAgICA8cD5BICZsZHF1bztTZWNvbmRhcnkgU2VjdGlvbiZyZHF1bzsgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uCitvZiB0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudCdzIG92ZXJhbGwKK3N1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsCitkaXJlY3RseSB3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluCitwYXJ0IGEgdGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluCithbnkgbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCisgICAgIDxwPlRoZSAmbGRxdW87SW52YXJpYW50IFNlY3Rpb25zJnJkcXVvOyBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCisgICAgIDxwPlRoZSAmbGRxdW87Q292ZXIgVGV4dHMmcmRxdW87IGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCisgICAgIDxwPkEgJmxkcXVvO1RyYW5zcGFyZW50JnJkcXVvOyBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgJmxkcXVvO1RyYW5zcGFyZW50JnJkcXVvOyBpcyBjYWxsZWQgJmxkcXVvO09wYXF1ZSZyZHF1bzsuCisKKyAgICAgPHA+RXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KKzxzcGFuIGNsYXNzPSJzYyI+YXNjaWk8L3NwYW4+IHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQKK2Zvcm1hdCwgPGFjcm9ueW0+U0dNTDwvYWNyb255bT4gb3IgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZQorPGFjcm9ueW0+RFREPC9hY3JvbnltPiwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+LAorUG9zdFNjcmlwdCBvciA8YWNyb255bT5QREY8L2Fjcm9ueW0+IGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcworb2YgdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIDxhY3JvbnltPlBORzwvYWNyb255bT4sIDxhY3JvbnltPlhDRjwvYWNyb255bT4gYW5kCis8YWNyb255bT5KUEc8L2Fjcm9ueW0+LiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlCityZWFkIGFuZCBlZGl0ZWQgb25seSBieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IG9yCis8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGZvciB3aGljaCB0aGUgPGFjcm9ueW0+RFREPC9hY3JvbnltPiBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUKK25vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+LAorUG9zdFNjcmlwdCBvciA8YWNyb255bT5QREY8L2Fjcm9ueW0+IHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvcgorb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKKyAgICAgPHA+VGhlICZsZHF1bztUaXRsZSBQYWdlJnJkcXVvOyBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICZsZHF1bztUaXRsZSBQYWdlJnJkcXVvOyBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKKyAgICAgPHA+VGhlICZsZHF1bztwdWJsaXNoZXImcmRxdW87IG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzCitvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIHB1YmxpYy4KKworICAgICA8cD5BIHNlY3Rpb24gJmxkcXVvO0VudGl0bGVkIFhZWiZyZHF1bzsgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOywKKyZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzssICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LCBvciAmbGRxdW87SGlzdG9yeSZyZHF1bzsuKSAgVG8gJmxkcXVvO1ByZXNlcnZlIHRoZSBUaXRsZSZyZHF1bzsKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gJmxkcXVvO0VudGl0bGVkIFhZWiZyZHF1bzsgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworICAgICA8cD5UaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworICAgICA8bGk+VkVSQkFUSU0gQ09QWUlORworCisgICAgIDxwPllvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworICAgICA8cD5Zb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKyAgICAgPGxpPkNPUFlJTkcgSU4gUVVBTlRJVFkKKworICAgICA8cD5JZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50J3MgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLiAKK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCisgICAgIDxwPklmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworICAgICA8cD5JZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuIAorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKKyAgICAgPHA+SXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUKK3RoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisgICAgIDxsaT5NT0RJRklDQVRJT05TCisKKyAgICAgPHA+WW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKKyAgICAgICAgICA8b2wgdHlwZT1BIHN0YXJ0PTE+Cis8bGk+VXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0Citmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCitvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCitpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgICAgPGxpPkxpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKK3Jlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKK3VubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KKworICAgICAgICAgIDxsaT5TdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICAgICAgIDxsaT5BZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCithZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCisKKyAgICAgICAgICA8bGk+SW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCitnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCithbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCisKKyAgICAgICAgICA8bGk+SW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87LCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKK3RvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKK3B1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCit0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztIaXN0b3J5JnJkcXVvOyBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKK3N0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCitwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQordGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKK2l0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICZsZHF1bztIaXN0b3J5JnJkcXVvOyBzZWN0aW9uLiAKK1lvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKK2xlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgICAgPGxpPkZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzsgb3IgJmxkcXVvO0RlZGljYXRpb25zJnJkcXVvOywgUHJlc2VydmUKK3RoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUKK3N1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzIGFuZC9vcgorZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCit1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCitvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCisKKyAgICAgICAgICA8bGk+RGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LiAgU3VjaCBhIHNlY3Rpb24KK21heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCisKKyAgICAgICAgICA8bGk+RG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzsgb3IKK3RvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPklmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuIAorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKKyAgICAgPHA+WW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzJm1kYXNoO2ZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCisgICAgIDxwPllvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCisgICAgIDxwPlRoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisgICAgIDxsaT5DT01CSU5JTkcgRE9DVU1FTlRTCisKKyAgICAgPHA+WW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCisgICAgIDxwPlRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4gCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCisgICAgIDxwPkluIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87CitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyZsZHF1bztIaXN0b3J5JnJkcXVvOzsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0Fja25vd2xlZGdlbWVudHMmcmRxdW87LAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LiAgWW91IG11c3QgZGVsZXRlIGFsbAorc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cy4mcmRxdW87CisKKyAgICAgPGxpPkNPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCisgICAgIDxwPllvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworICAgICA8cD5Zb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKyAgICAgPGxpPkFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworICAgICA8cD5BIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gJmxkcXVvO2FnZ3JlZ2F0ZSZyZHF1bzsgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICA8cD5JZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50J3MgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLiAKK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworICAgICA8bGk+VFJBTlNMQVRJT04KKworICAgICA8cD5UcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LiAKK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKKyAgICAgPHA+SWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzssCismbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LCBvciAmbGRxdW87SGlzdG9yeSZyZHF1bzssIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKyAgICAgPGxpPlRFUk1JTkFUSU9OCisKKyAgICAgPHA+WW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgIDxwPkhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UKK2Zyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwKK3VubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseQordGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvCis2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKKyAgICAgPHA+TW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKyAgICAgPHA+VGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcworbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgorCisgICAgIDxsaT5GVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCisgICAgIDxwPlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQorPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LyI+aHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LzwvYT4uCisKKyAgICAgPHA+RWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgJmxkcXVvO29yIGFueSBsYXRlciB2ZXJzaW9uJnJkcXVvOyBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50CitzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMKK0xpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYQordmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0RvY3VtZW50LgorCisgICAgIDxsaT5SRUxJQ0VOU0lORworCisgICAgIDxwPiZsZHF1bztNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24gU2l0ZSZyZHF1bzsgKG9yICZsZHF1bztNTUMgU2l0ZSZyZHF1bzspIG1lYW5zIGFueQorV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28KK3Byb3ZpZGVzIHByb21pbmVudCBmYWNpbGl0aWVzIGZvciBhbnlib2R5IHRvIGVkaXQgdGhvc2Ugd29ya3MuICBBCitwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLiAgQQorJmxkcXVvO01hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiZyZHF1bzsgKG9yICZsZHF1bztNTUMmcmRxdW87KSBjb250YWluZWQgaW4gdGhlCitzaXRlIG1lYW5zIGFueSBzZXQgb2YgY29weXJpZ2h0YWJsZSB3b3JrcyB0aHVzIHB1Ymxpc2hlZCBvbiB0aGUgTU1DCitzaXRlLgorCisgICAgIDxwPiZsZHF1bztDQy1CWS1TQSZyZHF1bzsgbWVhbnMgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMy4wCitsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0Citjb3Jwb3JhdGlvbiB3aXRoIGEgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGluIFNhbiBGcmFuY2lzY28sCitDYWxpZm9ybmlhLCBhcyB3ZWxsIGFzIGZ1dHVyZSBjb3B5bGVmdCB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UKK3B1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgorCisgICAgIDxwPiZsZHF1bztJbmNvcnBvcmF0ZSZyZHF1bzsgbWVhbnMgdG8gcHVibGlzaCBvciByZXB1Ymxpc2ggYSBEb2N1bWVudCwgaW4gd2hvbGUgb3IKK2luIHBhcnQsIGFzIHBhcnQgb2YgYW5vdGhlciBEb2N1bWVudC4KKworICAgICA8cD5BbiBNTUMgaXMgJmxkcXVvO2VsaWdpYmxlIGZvciByZWxpY2Vuc2luZyZyZHF1bzsgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZSwgYW5kIGlmIGFsbCB3b3JrcyB0aGF0IHdlcmUgZmlyc3QgcHVibGlzaGVkIHVuZGVyIHRoaXMgTGljZW5zZQorc29tZXdoZXJlIG90aGVyIHRoYW4gdGhpcyBNTUMsIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIGluIHdob2xlCitvciBpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlciB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsCithbmQgKDIpIHdlcmUgdGh1cyBpbmNvcnBvcmF0ZWQgcHJpb3IgdG8gTm92ZW1iZXIgMSwgMjAwOC4KKworICAgICA8cD5UaGUgb3BlcmF0b3Igb2YgYW4gTU1DIFNpdGUgbWF5IHJlcHVibGlzaCBhbiBNTUMgY29udGFpbmVkIGluIHRoZSBzaXRlCit1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwKK3Byb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgorCisgICAgICA8L29sPgorCis8aDMgY2xhc3M9InVubnVtYmVyZWRzZWMiPkFEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHM8L2gzPgorCis8cD5UbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIENvcHlyaWdodCAoQykgIDx2YXI+eWVhcjwvdmFyPiAgPHZhcj55b3VyIG5hbWU8L3Zhcj4uCisgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCisgICAgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlcgorICAgICAgIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkIGBgR05VCisgICAgICAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKzwvcHJlPgorIDxwPklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAmbGRxdW87d2l0aC4uLlRleHRzLiZyZHF1bzsgbGluZSB3aXRoIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIDx2YXI+bGlzdCB0aGVpciB0aXRsZXM8L3Zhcj4sIHdpdGgKKyAgICAgICAgIHRoZSBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyA8dmFyPmxpc3Q8L3Zhcj4sIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzCisgICAgICAgICBiZWluZyA8dmFyPmxpc3Q8L3Zhcj4uCis8L3ByZT4KKyA8cD5JZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKKyA8cD5JZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KKworPCEtLSBMb2NhbCBWYXJpYWJsZXM6IC0tPgorPCEtLSBpc3BlbGwtbG9jYWwtcGRpY3Q6ICJpc3BlbGwtZGljdCIgLS0+Cis8IS0tIEVuZDogLS0+Cis8IS0tIG1hbiBlbmQgLS0+Cis8IS0tIENvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0dOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MjdmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0dOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HTlUgT2JqZWN0aXZlLUMgcnVudGltZSBBUEkgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIiB0aXRsZT0iT2JqZWN0aXZlLUMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFeGVjdXRpbmctY29kZS1iZWZvcmUtbWFpbi5odG1sI0V4ZWN1dGluZy1jb2RlLWJlZm9yZS1tYWluIiB0aXRsZT0iRXhlY3V0aW5nIGNvZGUgYmVmb3JlIG1haW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR05VLU9iamVjdGl2ZS1DLXJ1bnRpbWUtQVBJIj48L2E+Cis8YSBuYW1lPSJHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkV4ZWN1dGluZy1jb2RlLWJlZm9yZS1tYWluLmh0bWwjRXhlY3V0aW5nLWNvZGUtYmVmb3JlLW1haW4iPkV4ZWN1dGluZyBjb2RlIGJlZm9yZSBtYWluPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIj5PYmplY3RpdmUtQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBBUEk8L2gzPgorCis8cD5UaGlzIHNlY3Rpb24gaXMgc3BlY2lmaWMgZm9yIHRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZS4gIElmIHlvdSBhcmUKK3VzaW5nIGEgZGlmZmVyZW50IHJ1bnRpbWUsIHlvdSBjYW4gc2tpcCBpdC4KKworIDxwPlRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBwcm92aWRlcyBhbiBBUEkgdGhhdCBhbGxvd3MgeW91IHRvCitpbnRlcmFjdCB3aXRoIHRoZSBPYmplY3RpdmUtQyBydW50aW1lIHN5c3RlbSwgcXVlcnlpbmcgdGhlIGxpdmUKK3J1bnRpbWUgc3RydWN0dXJlcyBhbmQgZXZlbiBtYW5pcHVsYXRpbmcgdGhlbS4gIFRoaXMgYWxsb3dzIHlvdSBmb3IKK2V4YW1wbGUgdG8gaW5zcGVjdCBhbmQgbmF2aWdhdGUgY2xhc3NlcywgbWV0aG9kcyBhbmQgcHJvdG9jb2xzOyB0bworZGVmaW5lIG5ldyBjbGFzc2VzIG9yIG5ldyBtZXRob2RzLCBhbmQgZXZlbiB0byBtb2RpZnkgZXhpc3RpbmcgY2xhc3Nlcworb3IgcHJvdG9jb2xzLgorCisgPHA+SWYgeW91IGFyZSB1c2luZyBhICZsZHF1bztGb3VuZGF0aW9uJnJkcXVvOyBsaWJyYXJ5IHN1Y2ggYXMgR05Vc3RlcC1CYXNlLCB0aGlzCitsaWJyYXJ5IHdpbGwgcHJvdmlkZSB5b3Ugd2l0aCBhIHJpY2ggc2V0IG9mIGZ1bmN0aW9uYWxpdHkgdG8gZG8gbW9zdAorb2YgdGhlIGluc3BlY3Rpb24gdGFza3MsIGFuZCB5b3UgcHJvYmFibHkgd2lsbCBvbmx5IG5lZWQgZGlyZWN0IGFjY2VzcwordG8gdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSSB0byBkZWZpbmUgbmV3IGNsYXNzZXMgb3IgbWV0aG9kcy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik1vZGVybi1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjTW9kZXJuLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkiPk1vZGVybiBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBBUEk8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJUcmFkaXRpb25hbC1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjVHJhZGl0aW9uYWwtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSSI+VHJhZGl0aW9uYWwgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgQVBJPC9hPgorPC91bD4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR05VLVByb2plY3QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR05VLVByb2plY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzMxN2JhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HTlUtUHJvamVjdC5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdOVSBQcm9qZWN0IC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRnVuZGluZy5odG1sI0Z1bmRpbmciIHRpdGxlPSJGdW5kaW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29weWluZy5odG1sI0NvcHlpbmciIHRpdGxlPSJDb3B5aW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdOVS1Qcm9qZWN0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvcHlpbmcuaHRtbCNDb3B5aW5nIj5Db3B5aW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRnVuZGluZy5odG1sI0Z1bmRpbmciPkZ1bmRpbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+VGhlIEdOVSBQcm9qZWN0IGFuZCBHTlUvTGludXg8L2gyPgorCis8cD5UaGUgR05VIFByb2plY3Qgd2FzIGxhdW5jaGVkIGluIDE5ODQgdG8gZGV2ZWxvcCBhIGNvbXBsZXRlIFVuaXgtbGlrZQorb3BlcmF0aW5nIHN5c3RlbSB3aGljaCBpcyBmcmVlIHNvZnR3YXJlOiB0aGUgR05VIHN5c3RlbS4gIChHTlUgaXMgYQorcmVjdXJzaXZlIGFjcm9ueW0gZm9yICZsZHF1bztHTlUncyBOb3QgVW5peCZyZHF1bzs7IGl0IGlzIHByb25vdW5jZWQKKyZsZHF1bztndWgtTkVXJnJkcXVvOy4pICBWYXJpYW50cyBvZiB0aGUgR05VIG9wZXJhdGluZyBzeXN0ZW0sIHdoaWNoIHVzZSB0aGUKK2tlcm5lbCBMaW51eCwgYXJlIG5vdyB3aWRlbHkgdXNlZDsgdGhvdWdoIHRoZXNlIHN5c3RlbXMgYXJlIG9mdGVuCityZWZlcnJlZCB0byBhcyAmbGRxdW87TGludXgmcmRxdW87LCB0aGV5IGFyZSBtb3JlIGFjY3VyYXRlbHkgY2FsbGVkIEdOVS9MaW51eAorc3lzdGVtcy4KKworIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnLyI+aHR0cDovL3d3dy5nbnUub3JnLzwvYT4KKyAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2dudS9saW51eC1hbmQtZ251Lmh0bWwiPmh0dHA6Ly93d3cuZ251Lm9yZy9nbnUvbGludXgtYW5kLWdudS5odG1sPC9hPgorPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HTlVfMDAyZkxpbnV4LU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR05VXzAwMmZMaW51eC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxN2ZjMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR05VXzAwMmZMaW51eC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R05VL0xpbnV4IE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyIgdGl0bGU9IkZSViBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIiB0aXRsZT0iSDgvMzAwIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR05VJTJmTGludXgtT3B0aW9ucyI+PC9hPgorPGEgbmFtZT0iR05VXzAwMmZMaW51eC1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI0g4XzAwMmYzMDAtT3B0aW9ucyI+SDgvMzAwIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4xMyBHTlUvTGludXggT3B0aW9uczwvaDQ+CisKKzxwPlRoZXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgR05VL0xpbnV4IHRhcmdldHM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tZ2xpYmM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1nbGliYy0xMzk2Ij48L2E+VXNlIHRoZSBHTlUgQyBsaWJyYXJ5LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBleGNlcHQKK29uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ki0qLWxpbnV4LSp1Y2xpYmMqPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiotKi1saW51eC0qYW5kcm9pZCo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGFyZ2V0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdWNsaWJjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdWNsaWJjLTEzOTciPjwvYT5Vc2UgdUNsaWJjIEMgbGlicmFyeS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgb24KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ki0qLWxpbnV4LSp1Y2xpYmMqPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRhcmdldHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJpb25pYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWJpb25pYy0xMzk4Ij48L2E+VXNlIEJpb25pYyBDIGxpYnJhcnkuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiotKi1saW51eC0qYW5kcm9pZCo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGFyZ2V0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYW5kcm9pZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFuZHJvaWQtMTM5OSI+PC9hPkNvbXBpbGUgY29kZSBjb21wYXRpYmxlIHdpdGggQW5kcm9pZCBwbGF0Zm9ybS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgb24KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ki0qLWxpbnV4LSphbmRyb2lkKjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0YXJnZXRzLgorCisgICAgIDxwPldoZW4gY29tcGlsaW5nLCB0aGlzIG9wdGlvbiBlbmFibGVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYmlvbmljPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWV4Y2VwdGlvbnM8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1ydHRpPC9zcGFuPjwvc2FtcD4gYnkgZGVmYXVsdC4gIFdoZW4gbGlua2luZywKK3RoaXMgb3B0aW9uIG1ha2VzIHRoZSBHQ0MgZHJpdmVyIHBhc3MgQW5kcm9pZC1zcGVjaWZpYyBvcHRpb25zIHRvIHRoZSBsaW5rZXIuIAorRmluYWxseSwgdGhpcyBvcHRpb24gY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gPGNvZGU+X19BTkRST0lEX188L2NvZGU+Cit0byBiZSBkZWZpbmVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXRuby1hbmRyb2lkLWNjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC10bm9fMDAyZGFuZHJvaWRfMDAyZGNjLTE0MDAiPjwvYT5EaXNhYmxlIGNvbXBpbGF0aW9uIGVmZmVjdHMgb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hbmRyb2lkPC9zcGFuPjwvc2FtcD4sIGkuZS4sIGRvIG5vdCBlbmFibGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYmlvbmljPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZXhjZXB0aW9uczwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1ydHRpPC9zcGFuPjwvc2FtcD4gYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi10bm8tYW5kcm9pZC1sZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdG5vXzAwMmRhbmRyb2lkXzAwMmRsZC0xNDAxIj48L2E+RGlzYWJsZSBsaW5raW5nIGVmZmVjdHMgb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hbmRyb2lkPC9zcGFuPjwvc2FtcD4sIGkuZS4sIHBhc3Mgc3RhbmRhcmQgTGludXgKK2xpbmtpbmcgb3B0aW9ucyB0byB0aGUgbGlua2VyLgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR18wMDJiXzAwMmItYW5kLUdDQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5ZjQ5NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR18wMDJiXzAwMmItYW5kLUdDQy5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkcrKyBhbmQgR0NDIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaW5kZXguaHRtbCNUb3AiIHRpdGxlPSJUb3AiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiIHRpdGxlPSJTdGFuZGFyZHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMSBjbGFzcz0ic2V0dGl0bGUiPlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvaDE+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkcrKy1hbmQtR0NDIj48L2E+Cis8YSBuYW1lPSJHXzAwMmJfMDAyYi1hbmQtR0NDIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xIFByb2dyYW1taW5nIExhbmd1YWdlcyBTdXBwb3J0ZWQgYnkgR0NDPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtR0NDLTIiPjwvYT48YSBuYW1lPSJpbmRleC1HTlUtQ29tcGlsZXItQ29sbGVjdGlvbi0zIj48L2E+PGEgbmFtZT0iaW5kZXgtR05VLUMtQ29tcGlsZXItNCI+PC9hPjxhIG5hbWU9ImluZGV4LUFkYS01Ij48L2E+PGEgbmFtZT0iaW5kZXgtRm9ydHJhbi02Ij48L2E+PGEgbmFtZT0iaW5kZXgtR28tNyI+PC9hPjxhIG5hbWU9ImluZGV4LUphdmEtOCI+PC9hPjxhIG5hbWU9ImluZGV4LU9iamVjdGl2ZV8wMDJkQy05Ij48L2E+PGEgbmFtZT0iaW5kZXgtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi0xMCI+PC9hPkdDQyBzdGFuZHMgZm9yICZsZHF1bztHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiZyZHF1bzsuICBHQ0MgaXMgYW4gaW50ZWdyYXRlZAorZGlzdHJpYnV0aW9uIG9mIGNvbXBpbGVycyBmb3Igc2V2ZXJhbCBtYWpvciBwcm9ncmFtbWluZyBsYW5ndWFnZXMuICBUaGVzZQorbGFuZ3VhZ2VzIGN1cnJlbnRseSBpbmNsdWRlIEMsIEMrKywgT2JqZWN0aXZlLUMsIE9iamVjdGl2ZS1DKyssIEphdmEsCitGb3J0cmFuLCBBZGEsIGFuZCBHby4KKworIDxwPlRoZSBhYmJyZXZpYXRpb24gPGRmbj5HQ0M8L2Rmbj4gaGFzIG11bHRpcGxlIG1lYW5pbmdzIGluIGNvbW1vbiB1c2UuICBUaGUKK2N1cnJlbnQgb2ZmaWNpYWwgbWVhbmluZyBpcyAmbGRxdW87R05VIENvbXBpbGVyIENvbGxlY3Rpb24mcmRxdW87LCB3aGljaCByZWZlcnMKK2dlbmVyaWNhbGx5IHRvIHRoZSBjb21wbGV0ZSBzdWl0ZSBvZiB0b29scy4gIFRoZSBuYW1lIGhpc3RvcmljYWxseSBzdG9vZAorZm9yICZsZHF1bztHTlUgQyBDb21waWxlciZyZHF1bzssIGFuZCB0aGlzIHVzYWdlIGlzIHN0aWxsIGNvbW1vbiB3aGVuIHRoZSBlbXBoYXNpcworaXMgb24gY29tcGlsaW5nIEMgcHJvZ3JhbXMuICBGaW5hbGx5LCB0aGUgbmFtZSBpcyBhbHNvIHVzZWQgd2hlbiBzcGVha2luZworb2YgdGhlIDxkZm4+bGFuZ3VhZ2UtaW5kZXBlbmRlbnQ8L2Rmbj4gY29tcG9uZW50IG9mIEdDQzogY29kZSBzaGFyZWQgYW1vbmcgdGhlCitjb21waWxlcnMgZm9yIGFsbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzLgorCisgPHA+VGhlIGxhbmd1YWdlLWluZGVwZW5kZW50IGNvbXBvbmVudCBvZiBHQ0MgaW5jbHVkZXMgdGhlIG1ham9yaXR5IG9mIHRoZQorb3B0aW1pemVycywgYXMgd2VsbCBhcyB0aGUgJmxkcXVvO2JhY2sgZW5kcyZyZHF1bzsgdGhhdCBnZW5lcmF0ZSBtYWNoaW5lIGNvZGUgZm9yCit2YXJpb3VzIHByb2Nlc3NvcnMuCisKKyA8cD48YSBuYW1lPSJpbmRleC1DT0JPTC0xMSI+PC9hPjxhIG5hbWU9ImluZGV4LU1lcmN1cnktMTIiPjwvYT48YSBuYW1lPSJpbmRleC1QYXNjYWwtMTMiPjwvYT5UaGUgcGFydCBvZiBhIGNvbXBpbGVyIHRoYXQgaXMgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGxhbmd1YWdlIGlzCitjYWxsZWQgdGhlICZsZHF1bztmcm9udCBlbmQmcmRxdW87LiAgSW4gYWRkaXRpb24gdG8gdGhlIGZyb250IGVuZHMgdGhhdCBhcmUKK2ludGVncmF0ZWQgY29tcG9uZW50cyBvZiBHQ0MsIHRoZXJlIGFyZSBzZXZlcmFsIG90aGVyIGZyb250IGVuZHMgdGhhdAorYXJlIG1haW50YWluZWQgc2VwYXJhdGVseS4gIFRoZXNlIHN1cHBvcnQgbGFuZ3VhZ2VzIHN1Y2ggYXMgUGFzY2FsLAorTWVyY3VyeSwgYW5kIENPQk9MLiAgVG8gdXNlIHRoZXNlLCB0aGV5IG11c3QgYmUgYnVpbHQgdG9nZXRoZXIgd2l0aAorR0NDIHByb3Blci4KKworIDxwPjxhIG5hbWU9ImluZGV4LUNfMDAyYl8wMDJiLTE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtR18wMDJiXzAwMmItMTUiPjwvYT48YSBuYW1lPSJpbmRleC1BZGEtMTYiPjwvYT48YSBuYW1lPSJpbmRleC1HTkFULTE3Ij48L2E+TW9zdCBvZiB0aGUgY29tcGlsZXJzIGZvciBsYW5ndWFnZXMgb3RoZXIgdGhhbiBDIGhhdmUgdGhlaXIgb3duIG5hbWVzLiAKK1RoZSBDKysgY29tcGlsZXIgaXMgRysrLCB0aGUgQWRhIGNvbXBpbGVyIGlzIEdOQVQsIGFuZCBzbyBvbi4gIFdoZW4gd2UKK3RhbGsgYWJvdXQgY29tcGlsaW5nIG9uZSBvZiB0aG9zZSBsYW5ndWFnZXMsIHdlIG1pZ2h0IHJlZmVyIHRvIHRoYXQKK2NvbXBpbGVyIGJ5IGl0cyBvd24gbmFtZSwgb3IgYXMgR0NDLiAgRWl0aGVyIGlzIGNvcnJlY3QuCisKKyA8cD48YSBuYW1lPSJpbmRleC1jb21waWxlci1jb21wYXJlZC10by1DXzAwMmJfMDAyYi1wcmVwcm9jZXNzb3ItMTgiPjwvYT48YSBuYW1lPSJpbmRleC1pbnRlcm1lZGlhdGUtQy12ZXJzaW9uXzAwMmMtbm9uZXhpc3RlbnQtMTkiPjwvYT48YSBuYW1lPSJpbmRleC1DLWludGVybWVkaWF0ZS1vdXRwdXRfMDAyYy1ub25leGlzdGVudC0yMCI+PC9hPkhpc3RvcmljYWxseSwgY29tcGlsZXJzIGZvciBtYW55IGxhbmd1YWdlcywgaW5jbHVkaW5nIEMrKyBhbmQgRm9ydHJhbiwKK2hhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyAmbGRxdW87cHJlcHJvY2Vzc29ycyZyZHF1bzsgd2hpY2ggZW1pdCBhbm90aGVyIGhpZ2gKK2xldmVsIGxhbmd1YWdlIHN1Y2ggYXMgQy4gIE5vbmUgb2YgdGhlIGNvbXBpbGVycyBpbmNsdWRlZCBpbiBHQ0MgYXJlCitpbXBsZW1lbnRlZCB0aGlzIHdheTsgdGhleSBhbGwgZ2VuZXJhdGUgbWFjaGluZSBjb2RlIGRpcmVjdGx5LiAgVGhpcworc29ydCBvZiBwcmVwcm9jZXNzb3Igc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSA8ZGZuPkMKK3ByZXByb2Nlc3NvcjwvZGZuPiwgd2hpY2ggaXMgYW4gaW50ZWdyYWwgZmVhdHVyZSBvZiB0aGUgQywgQysrLCBPYmplY3RpdmUtQworYW5kIE9iamVjdGl2ZS1DKysgbGFuZ3VhZ2VzLgorCis8IS0tIENvcHlyaWdodCAoQykgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0dhcmJhZ2UtQ29sbGVjdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HYXJiYWdlLUNvbGxlY3Rpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGY2NTUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HYXJiYWdlLUNvbGxlY3Rpb24uaHRtbApAQCAtMCwwICsxLDEzMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R2FyYmFnZSBDb2xsZWN0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy5odG1sI09iamVjdGl2ZV8wMDJkQyIgdGl0bGU9Ik9iamVjdGl2ZS1DIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVHlwZS1lbmNvZGluZy5odG1sI1R5cGUtZW5jb2RpbmciIHRpdGxlPSJUeXBlIGVuY29kaW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29uc3RhbnQtc3RyaW5nLW9iamVjdHMuaHRtbCNDb25zdGFudC1zdHJpbmctb2JqZWN0cyIgdGl0bGU9IkNvbnN0YW50IHN0cmluZyBvYmplY3RzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdhcmJhZ2UtQ29sbGVjdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb25zdGFudC1zdHJpbmctb2JqZWN0cy5odG1sI0NvbnN0YW50LXN0cmluZy1vYmplY3RzIj5Db25zdGFudCBzdHJpbmcgb2JqZWN0czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlR5cGUtZW5jb2RpbmcuaHRtbCNUeXBlLWVuY29kaW5nIj5UeXBlIGVuY29kaW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIj5PYmplY3RpdmUtQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNCBHYXJiYWdlIENvbGxlY3Rpb248L2gzPgorCis8cD5UaGlzIHNlY3Rpb24gaXMgc3BlY2lmaWMgZm9yIHRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZS4gIElmIHlvdSBhcmUKK3VzaW5nIGEgZGlmZmVyZW50IHJ1bnRpbWUsIHlvdSBjYW4gc2tpcCBpdC4KKworIDxwPlN1cHBvcnQgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbiB3aXRoIHRoZSBHTlUgcnVudGltZSBoYXMgYmVlbiBhZGRlZCBieQordXNpbmcgYSBwb3dlcmZ1bCBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IsIGtub3duIGFzIHRoZQorQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IuCisKKyA8cD5UbyBlbmFibGUgdGhlIHN1cHBvcnQgZm9yIGl0IHlvdSBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgY29tcGlsZXIgdXNpbmcKK2FuIGFkZGl0aW9uYWwgYXJndW1lbnQsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZW5hYmxlLW9iamMtZ2M8L3NwYW4+PC9zYW1wPjwhLS0gL0B3IC0tPi4gIFRoaXMgd2lsbAorYnVpbGQgdGhlIGJvZWhtLWdjIGxpYnJhcnksIGFuZCBidWlsZCBhbiBhZGRpdGlvbmFsIHJ1bnRpbWUgbGlicmFyeQord2hpY2ggaGFzIHNldmVyYWwgZW5oYW5jZW1lbnRzIHRvIHN1cHBvcnQgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiAgVGhlCituZXcgbGlicmFyeSBoYXMgYSBuZXcgbmFtZSwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYm9iamNfZ2MuYTwvc3Bhbj48L3NhbXA+IHRvIG5vdCBjb25mbGljdCB3aXRoCit0aGUgbm9uLWdhcmJhZ2UtY29sbGVjdGVkIGxpYnJhcnkuCisKKyA8cD5XaGVuIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBpcyB1c2VkLCB0aGUgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHVzaW5nIHRoZQorc28tY2FsbGVkIHR5cGVkIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbSBhdmFpbGFibGUgaW4gdGhlCitCb2VobS1EZW1lcnMtV2Vpc2VyIGNvbGxlY3Rvci4gIFRoaXMgbW9kZSByZXF1aXJlcyBwcmVjaXNlIGluZm9ybWF0aW9uIG9uCit3aGVyZSBwb2ludGVycyBhcmUgbG9jYXRlZCBpbnNpZGUgb2JqZWN0cy4gIFRoaXMgaW5mb3JtYXRpb24gaXMgY29tcHV0ZWQKK29uY2UgcGVyIGNsYXNzLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY2xhc3MgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCisKKyA8cD5UaGVyZSBpcyBhIG5ldyBydW50aW1lIGZ1bmN0aW9uIDxjb2RlPmNsYXNzX2l2YXJfc2V0X2djaW52aXNpYmxlKCk8L2NvZGU+Cit3aGljaCBjYW4gYmUgdXNlZCB0byBkZWNsYXJlIGEgc28tY2FsbGVkIDxkZm4+d2VhayBwb2ludGVyPC9kZm4+CityZWZlcmVuY2UuICBTdWNoIGEgcG9pbnRlciBpcyBiYXNpY2FsbHkgaGlkZGVuIGZvciB0aGUgZ2FyYmFnZSBjb2xsZWN0b3I7Cit0aGlzIGNhbiBiZSB1c2VmdWwgaW4gY2VydGFpbiBzaXR1YXRpb25zLCBlc3BlY2lhbGx5IHdoZW4geW91IHdhbnQgdG8KK2tlZXAgdHJhY2sgb2YgdGhlIGFsbG9jYXRlZCBvYmplY3RzLCB5ZXQgYWxsb3cgdGhlbSB0byBiZQorY29sbGVjdGVkLiAgVGhpcyBraW5kIG9mIHBvaW50ZXJzIGNhbiBvbmx5IGJlIG1lbWJlcnMgb2Ygb2JqZWN0cywgeW91CitjYW5ub3QgZGVjbGFyZSBhIGdsb2JhbCBwb2ludGVyIGFzIGEgd2VhayByZWZlcmVuY2UuICBFdmVyeSB0eXBlIHdoaWNoIGlzCithIHBvaW50ZXIgdHlwZSBjYW4gYmUgZGVjbGFyZWQgYSB3ZWFrIHBvaW50ZXIsIGluY2x1ZGluZyA8Y29kZT5pZDwvY29kZT4sCis8Y29kZT5DbGFzczwvY29kZT4gYW5kIDxjb2RlPlNFTDwvY29kZT4uCisKKyA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGlzIGZlYXR1cmUuICBTdXBwb3NlIHlvdSB3YW50IHRvCitpbXBsZW1lbnQgYSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgaG9sZCBhIHdlYWsgcG9pbnRlciByZWZlcmVuY2U7IHRoZQorZm9sbG93aW5nIGNsYXNzIGRvZXMgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIAorICAgICBAaW50ZXJmYWNlIFdlYWtQb2ludGVyIDogT2JqZWN0CisgICAgIHsKKyAgICAgICAgIGNvbnN0IHZvaWQqIHdlYWtQb2ludGVyOworICAgICB9CisgICAgIAorICAgICAtIGluaXRXaXRoUG9pbnRlcjooY29uc3Qgdm9pZCopcDsKKyAgICAgLSAoY29uc3Qgdm9pZCopd2Vha1BvaW50ZXI7CisgICAgIEBlbmQKKyAgICAgCisgICAgIAorICAgICBAaW1wbGVtZW50YXRpb24gV2Vha1BvaW50ZXIKKyAgICAgCisgICAgICsgKHZvaWQpaW5pdGlhbGl6ZQorICAgICB7CisgICAgICAgaWYgKHNlbGYgPT0gb2JqY19sb29rVXBDbGFzcyAoIldlYWtQb2ludGVyIikpCisgICAgICAgICBjbGFzc19pdmFyX3NldF9nY2ludmlzaWJsZSAoc2VsZiwgIndlYWtQb2ludGVyIiwgWUVTKTsKKyAgICAgfQorICAgICAKKyAgICAgLSBpbml0V2l0aFBvaW50ZXI6KGNvbnN0IHZvaWQqKXAKKyAgICAgeworICAgICAgIHdlYWtQb2ludGVyID0gcDsKKyAgICAgICByZXR1cm4gc2VsZjsKKyAgICAgfQorICAgICAKKyAgICAgLSAoY29uc3Qgdm9pZCopd2Vha1BvaW50ZXIKKyAgICAgeworICAgICAgIHJldHVybiB3ZWFrUG9pbnRlcjsKKyAgICAgfQorICAgICAKKyAgICAgQGVuZAorICAgICAKKzwvcHJlPgorIDxwPldlYWsgcG9pbnRlcnMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIGEgbmV3IHR5cGUgY2hhcmFjdGVyIHNwZWNpZmllcgorcmVwcmVzZW50ZWQgYnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ITwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIuICBUaGUKKzxjb2RlPmNsYXNzX2l2YXJfc2V0X2djaW52aXNpYmxlKCk8L2NvZGU+IGZ1bmN0aW9uIGFkZHMgb3IgcmVtb3ZlcyB0aGlzCitzcGVjaWZpZXIgdG8gdGhlIHN0cmluZyB0eXBlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBuYW1lZAorYXMgYXJndW1lbnQuCisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0djb3YtRGF0YS1GaWxlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HY292LURhdGEtRmlsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDYwNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HY292LURhdGEtRmlsZXMuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HY292IERhdGEgRmlsZXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iR2Nvdi5odG1sI0djb3YiIHRpdGxlPSJHY292Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR2Nvdi1hbmQtT3B0aW1pemF0aW9uLmh0bWwjR2Nvdi1hbmQtT3B0aW1pemF0aW9uIiB0aXRsZT0iR2NvdiBhbmQgT3B0aW1pemF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ3Jvc3NfMDAyZHByb2ZpbGluZy5odG1sI0Nyb3NzXzAwMmRwcm9maWxpbmciIHRpdGxlPSJDcm9zcy1wcm9maWxpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR2Nvdi1EYXRhLUZpbGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNyb3NzXzAwMmRwcm9maWxpbmcuaHRtbCNDcm9zc18wMDJkcHJvZmlsaW5nIj5Dcm9zcy1wcm9maWxpbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHY292LWFuZC1PcHRpbWl6YXRpb24uaHRtbCNHY292LWFuZC1PcHRpbWl6YXRpb24iPkdjb3YgYW5kIE9wdGltaXphdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikdjb3YuaHRtbCNHY292Ij5HY292PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTAuNCBCcmllZiBkZXNjcmlwdGlvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IGRhdGEgZmlsZXM8L2gzPgorCis8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IHVzZXMgdHdvIGZpbGVzIGZvciBwcm9maWxpbmcuICBUaGUgbmFtZXMgb2YgdGhlc2UgZmlsZXMKK2FyZSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIDxlbT5vYmplY3Q8L2VtPiBmaWxlIGJ5IHN1YnN0aXR1dGluZyB0aGUKK2ZpbGUgc3VmZml4IHdpdGggZWl0aGVyIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2Nubzwvc3Bhbj48L3NhbXA+LCBvciA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmdjZGE8L3NwYW4+PC9zYW1wPi4gIFRoZSBmaWxlcworY29udGFpbiBjb3ZlcmFnZSBhbmQgcHJvZmlsZSBkYXRhIHN0b3JlZCBpbiBhIHBsYXRmb3JtLWluZGVwZW5kZW50IGZvcm1hdC4gCitUaGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5nY25vPC9zcGFuPjwvc2FtcD4gZmlsZXMgYXJlIHBsYWNlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG9iamVjdAorZmlsZS4gIEJ5IGRlZmF1bHQsIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmdjZGE8L3NwYW4+PC9zYW1wPiBmaWxlcyBhcmUgYWxzbyBzdG9yZWQgaW4gdGhlIHNhbWUKK2RpcmVjdG9yeSBhcyB0aGUgb2JqZWN0IGZpbGUsIGJ1dCB0aGUgR0NDIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJvZmlsZS1kaXI8L3NwYW4+PC9zYW1wPiBvcHRpb24KK21heSBiZSB1c2VkIHRvIHN0b3JlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmdjZGE8L3NwYW4+PC9zYW1wPiBmaWxlcyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeS4KKworIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Lmdjbm88L3NwYW4+PC9zYW1wPiBub3RlcyBmaWxlIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBzb3VyY2UgZmlsZSBpcyBjb21waWxlZAord2l0aCB0aGUgR0NDIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdGVzdC1jb3ZlcmFnZTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gIEl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIHRvCityZWNvbnN0cnVjdCB0aGUgYmFzaWMgYmxvY2sgZ3JhcGhzIGFuZCBhc3NpZ24gc291cmNlIGxpbmUgbnVtYmVycyB0bworYmxvY2tzLgorCisgPHA+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2NkYTwvc3Bhbj48L3NhbXA+IGNvdW50IGRhdGEgZmlsZSBpcyBnZW5lcmF0ZWQgd2hlbiBhIHByb2dyYW0gY29udGFpbmluZworb2JqZWN0IGZpbGVzIGJ1aWx0IHdpdGggdGhlIEdDQyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBleGVjdXRlZC4gCitBIHNlcGFyYXRlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2NkYTwvc3Bhbj48L3NhbXA+IGZpbGUgaXMgY3JlYXRlZCBmb3IgZWFjaCBvYmplY3QgZmlsZSBjb21waWxlZCB3aXRoCit0aGlzIG9wdGlvbi4gIEl0IGNvbnRhaW5zIGFyYyB0cmFuc2l0aW9uIGNvdW50cywgdmFsdWUgcHJvZmlsZSBjb3VudHMsIGFuZAorc29tZSBzdW1tYXJ5IGluZm9ybWF0aW9uLgorCisgPHA+VGhlIGZ1bGwgZGV0YWlscyBvZiB0aGUgZmlsZSBmb3JtYXQgaXMgc3BlY2lmaWVkIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nY292LWlvLmg8L3NwYW4+PC9zYW1wPiwKK2FuZCBmdW5jdGlvbnMgcHJvdmlkZWQgaW4gdGhhdCBoZWFkZXIgZmlsZSBzaG91bGQgYmUgdXNlZCB0byBhY2Nlc3MgdGhlCitjb3ZlcmFnZSBmaWxlcy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR2Nvdi1JbnRyby5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HY292LUludHJvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1MjJmNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR2Nvdi1JbnRyby5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HY292IEludHJvIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikdjb3YuaHRtbCNHY292IiB0aXRsZT0iR2NvdiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ikludm9raW5nLUdjb3YuaHRtbCNJbnZva2luZy1HY292IiB0aXRsZT0iSW52b2tpbmcgR2NvdiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHY292LUludHJvIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikludm9raW5nLUdjb3YuaHRtbCNJbnZva2luZy1HY292Ij5JbnZva2luZyBHY292PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iR2Nvdi5odG1sI0djb3YiPkdjb3Y8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMC4xIEludHJvZHVjdGlvbiB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+PC9oMz4KKworPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+Cis8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IGlzIGEgdGVzdCBjb3ZlcmFnZSBwcm9ncmFtLiAgVXNlIGl0IGluIGNvbmNlcnQgd2l0aCBHQ0MKK3RvIGFuYWx5emUgeW91ciBwcm9ncmFtcyB0byBoZWxwIGNyZWF0ZSBtb3JlIGVmZmljaWVudCwgZmFzdGVyIHJ1bm5pbmcKK2NvZGUgYW5kIHRvIGRpc2NvdmVyIHVudGVzdGVkIHBhcnRzIG9mIHlvdXIgcHJvZ3JhbS4gIFlvdSBjYW4gdXNlCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IGFzIGEgcHJvZmlsaW5nIHRvb2wgdG8gaGVscCBkaXNjb3ZlciB3aGVyZSB5b3VyCitvcHRpbWl6YXRpb24gZWZmb3J0cyB3aWxsIGJlc3QgYWZmZWN0IHlvdXIgY29kZS4gIFlvdSBjYW4gYWxzbyB1c2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gYWxvbmcgd2l0aCB0aGUgb3RoZXIgcHJvZmlsaW5nIHRvb2wsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ncHJvZjwvc3Bhbj48L3NhbXA+LCB0bworYXNzZXNzIHdoaWNoIHBhcnRzIG9mIHlvdXIgY29kZSB1c2UgdGhlIGdyZWF0ZXN0IGFtb3VudCBvZiBjb21wdXRpbmcKK3RpbWUuCisKKyA8cD5Qcm9maWxpbmcgdG9vbHMgaGVscCB5b3UgYW5hbHl6ZSB5b3VyIGNvZGUncyBwZXJmb3JtYW5jZS4gIFVzaW5nIGEKK3Byb2ZpbGVyIHN1Y2ggYXMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z3Byb2Y8L3NwYW4+PC9zYW1wPiwgeW91IGNhbiBmaW5kIG91dCBzb21lCitiYXNpYyBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzLCBzdWNoIGFzOgorCisgICAgIDx1bD4KKzxsaT5ob3cgb2Z0ZW4gZWFjaCBsaW5lIG9mIGNvZGUgZXhlY3V0ZXMKKworICAgICA8bGk+d2hhdCBsaW5lcyBvZiBjb2RlIGFyZSBhY3R1YWxseSBleGVjdXRlZAorCisgICAgIDxsaT5ob3cgbXVjaCBjb21wdXRpbmcgdGltZSBlYWNoIHNlY3Rpb24gb2YgY29kZSB1c2VzCis8L3VsPgorCisgPHA+T25jZSB5b3Uga25vdyB0aGVzZSB0aGluZ3MgYWJvdXQgaG93IHlvdXIgY29kZSB3b3JrcyB3aGVuIGNvbXBpbGVkLCB5b3UKK2NhbiBsb29rIGF0IGVhY2ggbW9kdWxlIHRvIHNlZSB3aGljaCBtb2R1bGVzIHNob3VsZCBiZSBvcHRpbWl6ZWQuIAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiBoZWxwcyB5b3UgZGV0ZXJtaW5lIHdoZXJlIHRvIHdvcmsgb24gb3B0aW1pemF0aW9uLgorCisgPHA+U29mdHdhcmUgZGV2ZWxvcGVycyBhbHNvIHVzZSBjb3ZlcmFnZSB0ZXN0aW5nIGluIGNvbmNlcnQgd2l0aAordGVzdHN1aXRlcywgdG8gbWFrZSBzdXJlIHNvZnR3YXJlIGlzIGFjdHVhbGx5IGdvb2QgZW5vdWdoIGZvciBhIHJlbGVhc2UuIAorVGVzdHN1aXRlcyBjYW4gdmVyaWZ5IHRoYXQgYSBwcm9ncmFtIHdvcmtzIGFzIGV4cGVjdGVkOyBhIGNvdmVyYWdlCitwcm9ncmFtIHRlc3RzIHRvIHNlZSBob3cgbXVjaCBvZiB0aGUgcHJvZ3JhbSBpcyBleGVyY2lzZWQgYnkgdGhlCit0ZXN0c3VpdGUuICBEZXZlbG9wZXJzIGNhbiB0aGVuIGRldGVybWluZSB3aGF0IGtpbmRzIG9mIHRlc3QgY2FzZXMgbmVlZAordG8gYmUgYWRkZWQgdG8gdGhlIHRlc3RzdWl0ZXMgdG8gY3JlYXRlIGJvdGggYmV0dGVyIHRlc3RpbmcgYW5kIGEgYmV0dGVyCitmaW5hbCBwcm9kdWN0LgorCisgPHA+WW91IHNob3VsZCBjb21waWxlIHlvdXIgY29kZSB3aXRob3V0IG9wdGltaXphdGlvbiBpZiB5b3UgcGxhbiB0byB1c2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gYmVjYXVzZSB0aGUgb3B0aW1pemF0aW9uLCBieSBjb21iaW5pbmcgc29tZSBsaW5lcyBvZiBjb2RlCitpbnRvIG9uZSBmdW5jdGlvbiwgbWF5IG5vdCBnaXZlIHlvdSBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHlvdSBuZWVkIHRvCitsb29rIGZvciBgaG90IHNwb3RzJyB3aGVyZSB0aGUgY29kZSBpcyB1c2luZyBhIGdyZWF0IGRlYWwgb2YgY29tcHV0ZXIKK3RpbWUuICBMaWtld2lzZSwgYmVjYXVzZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IGFjY3VtdWxhdGVzIHN0YXRpc3RpY3MgYnkgbGluZSAoYXQKK3RoZSBsb3dlc3QgcmVzb2x1dGlvbiksIGl0IHdvcmtzIGJlc3Qgd2l0aCBhIHByb2dyYW1taW5nIHN0eWxlIHRoYXQKK3BsYWNlcyBvbmx5IG9uZSBzdGF0ZW1lbnQgb24gZWFjaCBsaW5lLiAgSWYgeW91IHVzZSBjb21wbGljYXRlZCBtYWNyb3MKK3RoYXQgZXhwYW5kIHRvIGxvb3BzIG9yIHRvIG90aGVyIGNvbnRyb2wgc3RydWN0dXJlcywgdGhlIHN0YXRpc3RpY3MgYXJlCitsZXNzIGhlbHBmdWwmbWRhc2g7dGhleSBvbmx5IHJlcG9ydCBvbiB0aGUgbGluZSB3aGVyZSB0aGUgbWFjcm8gY2FsbAorYXBwZWFycy4gIElmIHlvdXIgY29tcGxleCBtYWNyb3MgYmVoYXZlIGxpa2UgZnVuY3Rpb25zLCB5b3UgY2FuIHJlcGxhY2UKK3RoZW0gd2l0aCBpbmxpbmUgZnVuY3Rpb25zIHRvIHNvbHZlIHRoaXMgcHJvYmxlbS4KKworIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gY3JlYXRlcyBhIGxvZ2ZpbGUgY2FsbGVkIDxzYW1wPjx2YXI+c291cmNlZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2Nvdjwvc3Bhbj48L3NhbXA+IHdoaWNoCitpbmRpY2F0ZXMgaG93IG1hbnkgdGltZXMgZWFjaCBsaW5lIG9mIGEgc291cmNlIGZpbGUgPHNhbXA+PHZhcj5zb3VyY2VmaWxlPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi5jPC9zcGFuPjwvc2FtcD4KK2hhcyBleGVjdXRlZC4gIFlvdSBjYW4gdXNlIHRoZXNlIGxvZ2ZpbGVzIGFsb25nIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdwcm9mPC9zcGFuPjwvc2FtcD4gdG8gYWlkCitpbiBmaW5lLXR1bmluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgeW91ciBwcm9ncmFtcy4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ncHJvZjwvc3Bhbj48L3NhbXA+IGdpdmVzCit0aW1pbmcgaW5mb3JtYXRpb24geW91IGNhbiB1c2UgYWxvbmcgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IGdldCBmcm9tCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+LgorCisgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiB3b3JrcyBvbmx5IG9uIGNvZGUgY29tcGlsZWQgd2l0aCBHQ0MuICBJdCBpcyBub3QKK2NvbXBhdGlibGUgd2l0aCBhbnkgb3RoZXIgcHJvZmlsaW5nIG9yIHRlc3QgY292ZXJhZ2UgbWVjaGFuaXNtLgorCis8IS0tIG1hbiBlbmQgLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9HY292LWFuZC1PcHRpbWl6YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR2Nvdi1hbmQtT3B0aW1pemF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlOTdlYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR2Nvdi1hbmQtT3B0aW1pemF0aW9uLmh0bWwKQEAgLTAsMCArMSwxMTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdjb3YgYW5kIE9wdGltaXphdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJHY292Lmh0bWwjR2NvdiIgdGl0bGU9Ikdjb3YiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbnZva2luZy1HY292Lmh0bWwjSW52b2tpbmctR2NvdiIgdGl0bGU9Ikludm9raW5nIEdjb3YiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHY292LURhdGEtRmlsZXMuaHRtbCNHY292LURhdGEtRmlsZXMiIHRpdGxlPSJHY292IERhdGEgRmlsZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR2Nvdi1hbmQtT3B0aW1pemF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikdjb3YtRGF0YS1GaWxlcy5odG1sI0djb3YtRGF0YS1GaWxlcyI+R2NvdiBEYXRhIEZpbGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW52b2tpbmctR2Nvdi5odG1sI0ludm9raW5nLUdjb3YiPkludm9raW5nIEdjb3Y8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJHY292Lmh0bWwjR2NvdiI+R2NvdjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEwLjMgVXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiB3aXRoIEdDQyBPcHRpbWl6YXRpb248L2gzPgorCis8cD5JZiB5b3UgcGxhbiB0byB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiB0byBoZWxwIG9wdGltaXplIHlvdXIgY29kZSwgeW91IG11c3QKK2ZpcnN0IGNvbXBpbGUgeW91ciBwcm9ncmFtIHdpdGggdHdvIHNwZWNpYWwgR0NDIG9wdGlvbnM6CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEFzaWRlIGZyb20gdGhhdCwgeW91IGNhbiB1c2UgYW55CitvdGhlciBHQ0Mgb3B0aW9uczsgYnV0IGlmIHlvdSB3YW50IHRvIHByb3ZlIHRoYXQgZXZlcnkgc2luZ2xlIGxpbmUKK2luIHlvdXIgcHJvZ3JhbSB3YXMgZXhlY3V0ZWQsIHlvdSBzaG91bGQgbm90IGNvbXBpbGUgd2l0aCBvcHRpbWl6YXRpb24KK2F0IHRoZSBzYW1lIHRpbWUuICBPbiBzb21lIG1hY2hpbmVzIHRoZSBvcHRpbWl6ZXIgY2FuIGVsaW1pbmF0ZSBzb21lCitzaW1wbGUgY29kZSBsaW5lcyBieSBjb21iaW5pbmcgdGhlbSB3aXRoIG90aGVyIGxpbmVzLiAgRm9yIGV4YW1wbGUsIGNvZGUKK2xpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGlmIChhICE9IGIpCisgICAgICAgYyA9IDE7CisgICAgIGVsc2UKKyAgICAgICBjID0gMDsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+Y2FuIGJlIGNvbXBpbGVkIGludG8gb25lIGluc3RydWN0aW9uIG9uIHNvbWUgbWFjaGluZXMuICBJbiB0aGlzIGNhc2UsCit0aGVyZSBpcyBubyB3YXkgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gdG8gY2FsY3VsYXRlIHNlcGFyYXRlIGV4ZWN1dGlvbiBjb3VudHMKK2ZvciBlYWNoIGxpbmUgYmVjYXVzZSB0aGVyZSBpc24ndCBzZXBhcmF0ZSBjb2RlIGZvciBlYWNoIGxpbmUuICBIZW5jZQordGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gb3V0cHV0IGxvb2tzIGxpa2UgdGhpcyBpZiB5b3UgY29tcGlsZWQgdGhlIHByb2dyYW0gd2l0aAorb3B0aW1pemF0aW9uOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgMTAwOiAgIDEyOmlmIChhICE9IGIpCisgICAgICAgICAgIDEwMDogICAxMzogIGMgPSAxOworICAgICAgICAgICAxMDA6ICAgMTQ6ZWxzZQorICAgICAgICAgICAxMDA6ICAgMTU6ICBjID0gMDsKKzwvcHJlPgorIDxwPlRoZSBvdXRwdXQgc2hvd3MgdGhhdCB0aGlzIGJsb2NrIG9mIGNvZGUsIGNvbWJpbmVkIGJ5IG9wdGltaXphdGlvbiwKK2V4ZWN1dGVkIDEwMCB0aW1lcy4gIEluIG9uZSBzZW5zZSB0aGlzIHJlc3VsdCBpcyBjb3JyZWN0LCBiZWNhdXNlIHRoZXJlCit3YXMgb25seSBvbmUgaW5zdHJ1Y3Rpb24gcmVwcmVzZW50aW5nIGFsbCBmb3VyIG9mIHRoZXNlIGxpbmVzLiAgSG93ZXZlciwKK3RoZSBvdXRwdXQgZG9lcyBub3QgaW5kaWNhdGUgaG93IG1hbnkgdGltZXMgdGhlIHJlc3VsdCB3YXMgMCBhbmQgaG93CittYW55IHRpbWVzIHRoZSByZXN1bHQgd2FzIDEuCisKKyA8cD5JbmxpbmVhYmxlIGZ1bmN0aW9ucyBjYW4gY3JlYXRlIHVuZXhwZWN0ZWQgbGluZSBjb3VudHMuICBMaW5lIGNvdW50cyBhcmUKK3Nob3duIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhlIGlubGluZWFibGUgZnVuY3Rpb24sIGJ1dCB3aGF0IGlzIHNob3duCitkZXBlbmRzIG9uIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBpbmxpbmVkLCBvciBpZiBpdCBpcyBub3QgaW5saW5lZCBhdCBhbGwuCisKKyA8cD5JZiB0aGUgZnVuY3Rpb24gaXMgbm90IGlubGluZWQsIHRoZSBjb21waWxlciBtdXN0IGVtaXQgYW4gb3V0IG9mIGxpbmUKK2NvcHkgb2YgdGhlIGZ1bmN0aW9uLCBpbiBhbnkgb2JqZWN0IGZpbGUgdGhhdCBuZWVkcyBpdC4gIElmCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZmlsZUEubzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZmlsZUIubzwvc3Bhbj48L3NhbXA+IGJvdGggY29udGFpbiBvdXQgb2YgbGluZSBib2RpZXMgb2YgYQorcGFydGljdWxhciBpbmxpbmVhYmxlIGZ1bmN0aW9uLCB0aGV5IHdpbGwgYWxzbyBib3RoIGNvbnRhaW4gY292ZXJhZ2UKK2NvdW50cyBmb3IgdGhhdCBmdW5jdGlvbi4gIFdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZpbGVBLm88L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZpbGVCLm88L3NwYW4+PC9zYW1wPiBhcmUKK2xpbmtlZCB0b2dldGhlciwgdGhlIGxpbmtlciB3aWxsLCBvbiBtYW55IHN5c3RlbXMsIHNlbGVjdCBvbmUgb2YgdGhvc2UKK291dCBvZiBsaW5lIGJvZGllcyBmb3IgYWxsIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24sIGFuZCByZW1vdmUgb3IgaWdub3JlCit0aGUgb3RoZXIuICBVbmZvcnR1bmF0ZWx5LCBpdCB3aWxsIG5vdCByZW1vdmUgdGhlIGNvdmVyYWdlIGNvdW50ZXJzIGZvcgordGhlIHVudXNlZCBmdW5jdGlvbiBib2R5LiAgSGVuY2Ugd2hlbiBpbnN0cnVtZW50ZWQsIGFsbCBidXQgb25lIHVzZSBvZgordGhhdCBmdW5jdGlvbiB3aWxsIHNob3cgemVybyBjb3VudHMuCisKKyA8cD5JZiB0aGUgZnVuY3Rpb24gaXMgaW5saW5lZCBpbiBzZXZlcmFsIHBsYWNlcywgdGhlIGJsb2NrIHN0cnVjdHVyZSBpbgorZWFjaCBsb2NhdGlvbiBtaWdodCBub3QgYmUgdGhlIHNhbWUuICBGb3IgaW5zdGFuY2UsIGEgY29uZGl0aW9uIG1pZ2h0Citub3cgYmUgY2FsY3VsYWJsZSBhdCBjb21waWxlIHRpbWUgaW4gc29tZSBpbnN0YW5jZXMuICBCZWNhdXNlIHRoZQorY292ZXJhZ2Ugb2YgYWxsIHRoZSB1c2VzIG9mIHRoZSBpbmxpbmUgZnVuY3Rpb24gd2lsbCBiZSBzaG93biBmb3IgdGhlCitzYW1lIHNvdXJjZSBsaW5lcywgdGhlIGxpbmUgY291bnRzIHRoZW1zZWx2ZXMgbWlnaHQgc2VlbSBpbmNvbnNpc3RlbnQuCisKKyA8cD5Mb25nLXJ1bm5pbmcgYXBwbGljYXRpb25zIGNhbiB1c2UgdGhlIDxjb2RlPl9nY292X3Jlc2V0PC9jb2RlPiBhbmQgPGNvZGU+X2djb3ZfZHVtcDwvY29kZT4KK2ZhY2lsaXRpZXMgdG8gcmVzdHJpY3QgcHJvZmlsZSBjb2xsZWN0aW9uIHRvIHRoZSBwcm9ncmFtIHJlZ2lvbiBvZgoraW50ZXJlc3QuIENhbGxpbmcgPGNvZGU+X2djb3ZfcmVzZXQodm9pZCk8L2NvZGU+IHdpbGwgY2xlYXIgYWxsIHByb2ZpbGUgY291bnRlcnMKK3RvIHplcm8sIGFuZCBjYWxsaW5nIDxjb2RlPl9nY292X2R1bXAodm9pZCk8L2NvZGU+IHdpbGwgY2F1c2UgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24KK2NvbGxlY3RlZCBhdCB0aGF0IHBvaW50IHRvIGJlIGR1bXBlZCB0byA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmdjZGE8L3NwYW4+PC9zYW1wPiBvdXRwdXQgZmlsZXMuCisKKzwhLS0gbWFuIGVuZCAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0djb3YuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR2Nvdi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZWY4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0djb3YuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HY292IC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29tcGF0aWJpbGl0eS5odG1sI0NvbXBhdGliaWxpdHkiIHRpdGxlPSJDb21wYXRpYmlsaXR5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiIHRpdGxlPSJUcm91YmxlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikdjb3YiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiPlRyb3VibGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb21wYXRpYmlsaXR5Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+Jm1kYXNoO2EgVGVzdCBDb3ZlcmFnZSBQcm9ncmFtPC9oMj4KKworPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiBpcyBhIHRvb2wgeW91IGNhbiB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBHQ0MgdG8KK3Rlc3QgY29kZSBjb3ZlcmFnZSBpbiB5b3VyIHByb2dyYW1zLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iR2Nvdi1JbnRyby5odG1sI0djb3YtSW50cm8iPkdjb3YgSW50cm88L2E+OiAgICAgICAgICAgICAgICAgICBJbnRyb2R1Y3Rpb24gdG8gZ2Nvdi4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJJbnZva2luZy1HY292Lmh0bWwjSW52b2tpbmctR2NvdiI+SW52b2tpbmcgR2NvdjwvYT46ICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgZ2Nvdi4gCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJHY292LWFuZC1PcHRpbWl6YXRpb24uaHRtbCNHY292LWFuZC1PcHRpbWl6YXRpb24iPkdjb3YgYW5kIE9wdGltaXphdGlvbjwvYT46ICAgICAgICBVc2luZyBnY292IHdpdGggR0NDIG9wdGltaXphdGlvbi4gCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJHY292LURhdGEtRmlsZXMuaHRtbCNHY292LURhdGEtRmlsZXMiPkdjb3YgRGF0YSBGaWxlczwvYT46ICAgICAgICAgICAgICBUaGUgZmlsZXMgdXNlZCBieSBnY292LiAKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkNyb3NzXzAwMmRwcm9maWxpbmcuaHRtbCNDcm9zc18wMDJkcHJvZmlsaW5nIj5Dcm9zcy1wcm9maWxpbmc8L2E+OiAgICAgICAgICAgICAgRGF0YSBmaWxlIHJlbG9jYXRpb24uIAorPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvR2xvYmFsLVJlZy1WYXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0dsb2JhbC1SZWctVmFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODQxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0dsb2JhbC1SZWctVmFycy5odG1sCkBAIC0wLDAgKzEsMTQwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HbG9iYWwgUmVnIFZhcnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXhwbGljaXQtUmVnLVZhcnMuaHRtbCNFeHBsaWNpdC1SZWctVmFycyIgdGl0bGU9IkV4cGxpY2l0IFJlZyBWYXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTG9jYWwtUmVnLVZhcnMuaHRtbCNMb2NhbC1SZWctVmFycyIgdGl0bGU9IkxvY2FsIFJlZyBWYXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikdsb2JhbC1SZWctVmFycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMb2NhbC1SZWctVmFycy5odG1sI0xvY2FsLVJlZy1WYXJzIj5Mb2NhbCBSZWcgVmFyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4cGxpY2l0LVJlZy1WYXJzLmh0bWwjRXhwbGljaXQtUmVnLVZhcnMiPkV4cGxpY2l0IFJlZyBWYXJzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni40NC4xIERlZmluaW5nIEdsb2JhbCBSZWdpc3RlciBWYXJpYWJsZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1nbG9iYWwtcmVnaXN0ZXItdmFyaWFibGVzLTI4NjgiPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3RlcnNfMDAyYy1nbG9iYWwtdmFyaWFibGVzLWluLTI4NjkiPjwvYT4KK1lvdSBjYW4gZGVmaW5lIGEgZ2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlIGluIEdOVSBDIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHJlZ2lzdGVyIGludCAqZm9vIGFzbSAoImE1Iik7Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkhlcmUgPGNvZGU+YTU8L2NvZGU+IGlzIHRoZSBuYW1lIG9mIHRoZSByZWdpc3RlciB0aGF0IHNob3VsZCBiZSB1c2VkLiAgQ2hvb3NlIGEKK3JlZ2lzdGVyIHRoYXQgaXMgbm9ybWFsbHkgc2F2ZWQgYW5kIHJlc3RvcmVkIGJ5IGZ1bmN0aW9uIGNhbGxzIG9uIHlvdXIKK21hY2hpbmUsIHNvIHRoYXQgbGlicmFyeSByb3V0aW5lcyB3aWxsIG5vdCBjbG9iYmVyIGl0LgorCisgPHA+TmF0dXJhbGx5IHRoZSByZWdpc3RlciBuYW1lIGlzIGNwdS1kZXBlbmRlbnQsIHNvIHlvdSBuZWVkIHRvCitjb25kaXRpb25hbGl6ZSB5b3VyIHByb2dyYW0gYWNjb3JkaW5nIHRvIGNwdSB0eXBlLiAgVGhlIHJlZ2lzdGVyCis8Y29kZT5hNTwvY29kZT4gaXMgYSBnb29kIGNob2ljZSBvbiBhIDY4MDAwIGZvciBhIHZhcmlhYmxlIG9mIHBvaW50ZXIKK3R5cGUuICBPbiBtYWNoaW5lcyB3aXRoIHJlZ2lzdGVyIHdpbmRvd3MsIGJlIHN1cmUgdG8gY2hvb3NlIGEgJmxkcXVvO2dsb2JhbCZyZHF1bzsKK3JlZ2lzdGVyIHRoYXQgaXMgbm90IGFmZmVjdGVkIG1hZ2ljYWxseSBieSB0aGUgZnVuY3Rpb24gY2FsbCBtZWNoYW5pc20uCisKKyA8cD5JbiBhZGRpdGlvbiwgZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zIG9uIHRoZSBzYW1lIENQVSBtYXkgZGlmZmVyIGluIGhvdyB0aGV5CituYW1lIHRoZSByZWdpc3RlcnM7IHRoZW4geW91IG5lZWQgYWRkaXRpb25hbCBjb25kaXRpb25hbHMuICBGb3IKK2V4YW1wbGUsIHNvbWUgNjgwMDAgb3BlcmF0aW5nIHN5c3RlbXMgY2FsbCB0aGlzIHJlZ2lzdGVyIDxjb2RlPiVhNTwvY29kZT4uCisKKyA8cD5FdmVudHVhbGx5IHRoZXJlIG1heSBiZSBhIHdheSBvZiBhc2tpbmcgdGhlIGNvbXBpbGVyIHRvIGNob29zZSBhIHJlZ2lzdGVyCithdXRvbWF0aWNhbGx5LCBidXQgZmlyc3Qgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBzaG91bGQgY2hvb3NlIGFuZAoraG93IHRvIGVuYWJsZSB5b3UgdG8gZ3VpZGUgdGhlIGNob2ljZS4gIE5vIHNvbHV0aW9uIGlzIGV2aWRlbnQuCisKKyA8cD5EZWZpbmluZyBhIGdsb2JhbCByZWdpc3RlciB2YXJpYWJsZSBpbiBhIGNlcnRhaW4gcmVnaXN0ZXIgcmVzZXJ2ZXMgdGhhdAorcmVnaXN0ZXIgZW50aXJlbHkgZm9yIHRoaXMgdXNlLCBhdCBsZWFzdCB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24uIAorVGhlIHJlZ2lzdGVyIGlzIG5vdCBhbGxvY2F0ZWQgZm9yIGFueSBvdGhlciBwdXJwb3NlIGluIHRoZSBmdW5jdGlvbnMKK2luIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLCBhbmQgaXMgbm90IHNhdmVkIGFuZCByZXN0b3JlZCBieQordGhlc2UgZnVuY3Rpb25zLiAgU3RvcmVzIGludG8gdGhpcyByZWdpc3RlciBhcmUgbmV2ZXIgZGVsZXRlZCBldmVuIGlmIHRoZXkKK2FwcGVhciB0byBiZSBkZWFkLCBidXQgcmVmZXJlbmNlcyBtYXkgYmUgZGVsZXRlZCBvciBtb3ZlZCBvcgorc2ltcGxpZmllZC4KKworIDxwPkl0IGlzIG5vdCBzYWZlIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlcyBmcm9tIHNpZ25hbAoraGFuZGxlcnMsIG9yIGZyb20gbW9yZSB0aGFuIG9uZSB0aHJlYWQgb2YgY29udHJvbCwgYmVjYXVzZSB0aGUgc3lzdGVtCitsaWJyYXJ5IHJvdXRpbmVzIG1heSB0ZW1wb3JhcmlseSB1c2UgdGhlIHJlZ2lzdGVyIGZvciBvdGhlciB0aGluZ3MgKHVubGVzcworeW91IHJlY29tcGlsZSB0aGVtIHNwZWNpYWxseSBmb3IgdGhlIHRhc2sgYXQgaGFuZCkuCisKKyA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnFzb3J0XzAwN2RfMDAyYy1hbmQtZ2xvYmFsLXJlZ2lzdGVyLXZhcmlhYmxlcy0yODcwIj48L2E+SXQgaXMgbm90IHNhZmUgZm9yIG9uZSBmdW5jdGlvbiB0aGF0IHVzZXMgYSBnbG9iYWwgcmVnaXN0ZXIgdmFyaWFibGUgdG8KK2NhbGwgYW5vdGhlciBzdWNoIGZ1bmN0aW9uIDxjb2RlPmZvbzwvY29kZT4gYnkgd2F5IG9mIGEgdGhpcmQgZnVuY3Rpb24KKzxjb2RlPmxvc2U8L2NvZGU+IHRoYXQgaXMgY29tcGlsZWQgd2l0aG91dCBrbm93bGVkZ2Ugb2YgdGhpcyB2YXJpYWJsZSAoaS5lLiBpbiBhCitkaWZmZXJlbnQgc291cmNlIGZpbGUgaW4gd2hpY2ggdGhlIHZhcmlhYmxlIGlzbid0IGRlY2xhcmVkKS4gIFRoaXMgaXMKK2JlY2F1c2UgPGNvZGU+bG9zZTwvY29kZT4gbWlnaHQgc2F2ZSB0aGUgcmVnaXN0ZXIgYW5kIHB1dCBzb21lIG90aGVyIHZhbHVlIHRoZXJlLiAKK0ZvciBleGFtcGxlLCB5b3UgY2FuJ3QgZXhwZWN0IGEgZ2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlIHRvIGJlIGF2YWlsYWJsZSBpbgordGhlIGNvbXBhcmlzb24tZnVuY3Rpb24gdGhhdCB5b3UgcGFzcyB0byA8Y29kZT5xc29ydDwvY29kZT4sIHNpbmNlIDxjb2RlPnFzb3J0PC9jb2RlPgorbWlnaHQgaGF2ZSBwdXQgc29tZXRoaW5nIGVsc2UgaW4gdGhhdCByZWdpc3Rlci4gIChJZiB5b3UgYXJlIHByZXBhcmVkIHRvCityZWNvbXBpbGUgPGNvZGU+cXNvcnQ8L2NvZGU+IHdpdGggdGhlIHNhbWUgZ2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlLCB5b3UgY2FuCitzb2x2ZSB0aGlzIHByb2JsZW0uKQorCisgPHA+SWYgeW91IHdhbnQgdG8gcmVjb21waWxlIDxjb2RlPnFzb3J0PC9jb2RlPiBvciBvdGhlciBzb3VyY2UgZmlsZXMgdGhhdCBkbyBub3QKK2FjdHVhbGx5IHVzZSB5b3VyIGdsb2JhbCByZWdpc3RlciB2YXJpYWJsZSwgc28gdGhhdCB0aGV5IGRvIG5vdCB1c2UgdGhhdAorcmVnaXN0ZXIgZm9yIGFueSBvdGhlciBwdXJwb3NlLCB0aGVuIGl0IHN1ZmZpY2VzIHRvIHNwZWNpZnkgdGhlIGNvbXBpbGVyCitvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmaXhlZC08L3NwYW4+PHZhcj5yZWc8L3Zhcj48L3NhbXA+LiAgWW91IG5lZWQgbm90IGFjdHVhbGx5IGFkZCBhIGdsb2JhbAorcmVnaXN0ZXIgZGVjbGFyYXRpb24gdG8gdGhlaXIgc291cmNlIGNvZGUuCisKKyA8cD5BIGZ1bmN0aW9uIHRoYXQgY2FuIGFsdGVyIHRoZSB2YWx1ZSBvZiBhIGdsb2JhbCByZWdpc3RlciB2YXJpYWJsZSBjYW5ub3QKK3NhZmVseSBiZSBjYWxsZWQgZnJvbSBhIGZ1bmN0aW9uIGNvbXBpbGVkIHdpdGhvdXQgdGhpcyB2YXJpYWJsZSwgYmVjYXVzZSBpdAorY291bGQgY2xvYmJlciB0aGUgdmFsdWUgdGhlIGNhbGxlciBleHBlY3RzIHRvIGZpbmQgdGhlcmUgb24gcmV0dXJuLiAKK1RoZXJlZm9yZSwgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGVudHJ5IHBvaW50IGludG8gdGhlIHBhcnQgb2YgdGhlCitwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZ2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlIG11c3QgZXhwbGljaXRseSBzYXZlIGFuZAorcmVzdG9yZSB0aGUgdmFsdWUgdGhhdCBiZWxvbmdzIHRvIGl0cyBjYWxsZXIuCisKKyA8cD48YSBuYW1lPSJpbmRleC1yZWdpc3Rlci12YXJpYWJsZS1hZnRlci1fMDA0MGNvZGVfMDA3YmxvbmdqbXBfMDA3ZC0yODcxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ2xvYmFsLXJlZ2lzdGVyLWFmdGVyLV8wMDQwY29kZV8wMDdibG9uZ2ptcF8wMDdkLTI4NzIiPjwvYT48YSBuYW1lPSJpbmRleC12YWx1ZS1hZnRlci1fMDA0MGNvZGVfMDA3YmxvbmdqbXBfMDA3ZC0yODczIj48L2E+PGEgbmFtZT0iaW5kZXgtbG9uZ2ptcC0yODc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2V0am1wLTI4NzUiPjwvYT5PbiBtb3N0IG1hY2hpbmVzLCA8Y29kZT5sb25nam1wPC9jb2RlPiByZXN0b3JlcyB0byBlYWNoIGdsb2JhbCByZWdpc3RlcgordmFyaWFibGUgdGhlIHZhbHVlIGl0IGhhZCBhdCB0aGUgdGltZSBvZiB0aGUgPGNvZGU+c2V0am1wPC9jb2RlPi4gIE9uIHNvbWUKK21hY2hpbmVzLCBob3dldmVyLCA8Y29kZT5sb25nam1wPC9jb2RlPiBkb2VzIG5vdCBjaGFuZ2UgdGhlIHZhbHVlIG9mIGdsb2JhbAorcmVnaXN0ZXIgdmFyaWFibGVzLiAgVG8gYmUgcG9ydGFibGUsIHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxlZCA8Y29kZT5zZXRqbXA8L2NvZGU+CitzaG91bGQgbWFrZSBvdGhlciBhcnJhbmdlbWVudHMgdG8gc2F2ZSB0aGUgdmFsdWVzIG9mIHRoZSBnbG9iYWwgcmVnaXN0ZXIKK3ZhcmlhYmxlcywgYW5kIHRvIHJlc3RvcmUgdGhlbSBpbiBhIDxjb2RlPmxvbmdqbXA8L2NvZGU+LiAgVGhpcyB3YXksIHRoZSBzYW1lCit0aGluZyBoYXBwZW5zIHJlZ2FyZGxlc3Mgb2Ygd2hhdCA8Y29kZT5sb25nam1wPC9jb2RlPiBkb2VzLgorCisgPHA+QWxsIGdsb2JhbCByZWdpc3RlciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgbXVzdCBwcmVjZWRlIGFsbCBmdW5jdGlvbgorZGVmaW5pdGlvbnMuICBJZiBzdWNoIGEgZGVjbGFyYXRpb24gY291bGQgYXBwZWFyIGFmdGVyIGZ1bmN0aW9uCitkZWZpbml0aW9ucywgdGhlIGRlY2xhcmF0aW9uIHdvdWxkIGJlIHRvbyBsYXRlIHRvIHByZXZlbnQgdGhlIHJlZ2lzdGVyIGZyb20KK2JlaW5nIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzIGluIHRoZSBwcmVjZWRpbmcgZnVuY3Rpb25zLgorCisgPHA+R2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlcyBtYXkgbm90IGhhdmUgaW5pdGlhbCB2YWx1ZXMsIGJlY2F1c2UgYW4KK2V4ZWN1dGFibGUgZmlsZSBoYXMgbm8gbWVhbnMgdG8gc3VwcGx5IGluaXRpYWwgY29udGVudHMgZm9yIGEgcmVnaXN0ZXIuCisKKyA8cD5PbiB0aGUgU1BBUkMsIHRoZXJlIGFyZSByZXBvcnRzIHRoYXQgZzMgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiBnNyBhcmUgc3VpdGFibGUKK3JlZ2lzdGVycywgYnV0IGNlcnRhaW4gbGlicmFyeSBmdW5jdGlvbnMsIHN1Y2ggYXMgPGNvZGU+Z2V0d2Q8L2NvZGU+LCBhcyB3ZWxsCithcyB0aGUgc3Vicm91dGluZXMgZm9yIGRpdmlzaW9uIGFuZCByZW1haW5kZXIsIG1vZGlmeSBnMyBhbmQgZzQuICBnMSBhbmQKK2cyIGFyZSBsb2NhbCB0ZW1wb3Jhcmllcy4KKworIDxwPk9uIHRoZSA2ODAwMCwgYTIgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiBhNSBzaG91bGQgYmUgc3VpdGFibGUsIGFzIHNob3VsZCBkMiA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IGQ3LiAKK09mIGNvdXJzZSwgaXQgZG9lcyBub3QgZG8gdG8gdXNlIG1vcmUgdGhhbiBhIGZldyBvZiB0aG9zZS4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0g4XzAwMmYzMDAtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTc2NTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0g4XzAwMmYzMDAtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkg4LzMwMCBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdOVV8wMDJmTGludXgtT3B0aW9ucy5odG1sI0dOVV8wMDJmTGludXgtT3B0aW9ucyIgdGl0bGU9IkdOVS9MaW51eCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIiB0aXRsZT0iSFBQQSBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikg4JTJmMzAwLU9wdGlvbnMiPjwvYT4KKzxhIG5hbWU9Ikg4XzAwMmYzMDAtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiPkhQUEEgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdOVV8wMDJmTGludXgtT3B0aW9ucy5odG1sI0dOVV8wMDJmTGludXgtT3B0aW9ucyI+R05VL0xpbnV4IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMTQgSDgvMzAwIE9wdGlvbnM8L2g0PgorCis8cD5UaGVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBIOC8zMDAgaW1wbGVtZW50YXRpb25zOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbXJlbGF4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcmVsYXgtMTQwMiI+PC9hPlNob3J0ZW4gc29tZSBhZGRyZXNzIHJlZmVyZW5jZXMgYXQgbGluayB0aW1lLCB3aGVuIHBvc3NpYmxlOyB1c2VzIHRoZQorbGlua2VyIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcmVsYXg8L3NwYW4+PC9zYW1wPi4gIFNlZSA8YSBocmVmPSIuLi9sZC9IOF8wMDJmMzAwLmh0bWwjSDhfMDAyZjMwMCI+PGNvZGU+bGQ8L2NvZGU+IGFuZCB0aGUgSDgvMzAwPC9hPiwgZm9yIGEgZnVsbGVyIGRlc2NyaXB0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1oPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taC0xNDAzIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIEg4LzMwMEguCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zLTE0MDQiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgSDhTLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbi0xNDA1Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIEg4UyBhbmQgSDgvMzAwSCBpbiB0aGUgbm9ybWFsIG1vZGUuICBUaGlzIHN3aXRjaAorbXVzdCBiZSB1c2VkIGVpdGhlciB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taDwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zMjYwMDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXMyNjAwLTE0MDYiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgSDhTLzI2MDAuICBUaGlzIHN3aXRjaCBtdXN0IGJlIHVzZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZXhyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZXhyLTE0MDciPjwvYT5FeHRlbmRlZCByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiBzdGFjayBiZWZvcmUgZXhlY3V0aW9uIG9mIGZ1bmN0aW9uCit3aXRoIG1vbml0b3IgYXR0cmlidXRlLiBEZWZhdWx0IG9wdGlvbiBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWV4cjwvc3Bhbj48L3NhbXA+LiAKK1RoaXMgb3B0aW9uIGlzIHZhbGlkIG9ubHkgZm9yIEg4UyB0YXJnZXRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1leHI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZXhyLTE0MDgiPjwvYT5FeHRlbmRlZCByZWdpc3RlcnMgYXJlIG5vdCBzdG9yZWQgb24gc3RhY2sgYmVmb3JlIGV4ZWN1dGlvbiBvZiBmdW5jdGlvbgord2l0aCBtb25pdG9yIGF0dHJpYnV0ZS4gRGVmYXVsdCBvcHRpb24gaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1leHI8L3NwYW4+PC9zYW1wPi4gCitUaGlzIG9wdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBIOFMgdGFyZ2V0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taW50MzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pbnQzMi0xNDA5Ij48L2E+TWFrZSA8Y29kZT5pbnQ8L2NvZGU+IGRhdGEgMzIgYml0cyBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hbGlnbi0zMDA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hbGlnbl8wMDJkMzAwLTE0MTAiPjwvYT5PbiB0aGUgSDgvMzAwSCBhbmQgSDhTLCB1c2UgdGhlIHNhbWUgYWxpZ25tZW50IHJ1bGVzIGFzIGZvciB0aGUgSDgvMzAwLiAKK1RoZSBkZWZhdWx0IGZvciB0aGUgSDgvMzAwSCBhbmQgSDhTIGlzIHRvIGFsaWduIGxvbmdzIGFuZCBmbG9hdHMgb24KKzQtYnl0ZSBib3VuZGFyaWVzLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWxpZ24tMzAwPC9zcGFuPjwvc2FtcD4gY2F1c2VzIHRoZW0gdG8gYmUgYWxpZ25lZCBvbiAyLWJ5dGUgYm91bmRhcmllcy4gCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBIOC8zMDAuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSFBQQS1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0hQUEEtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ODM2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0hQUEEtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjM2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IUFBBIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIiB0aXRsZT0iSDgvMzAwIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiIHRpdGxlPSJpMzg2IGFuZCB4ODYtNjQgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIUFBBLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI0g4XzAwMmYzMDAtT3B0aW9ucyI+SDgvMzAwIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMTUgSFBQQSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtSFBQQS1PcHRpb25zLTE0MTEiPjwvYT4KK1RoZXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIEhQUEEgZmFtaWx5IG9mIGNvbXB1dGVyczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1hcmNoPTwvY29kZT48dmFyPmFyY2hpdGVjdHVyZS10eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1hcmNoLTE0MTIiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZS4gIFRoZSBjaG9pY2VzIGZvcgorPHZhcj5hcmNoaXRlY3R1cmUtdHlwZTwvdmFyPiBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4xLjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIFBBIDEuMCwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4xLjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIFBBCisxLjEsIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjIuMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgUEEgMi4wIHByb2Nlc3NvcnMuICBSZWZlciB0bworPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi91c3IvbGliL3NjaGVkLm1vZGVsczwvc3Bhbj48L3NhbXA+IG9uIGFuIEhQLVVYIHN5c3RlbSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcgorYXJjaGl0ZWN0dXJlIG9wdGlvbiBmb3IgeW91ciBtYWNoaW5lLiAgQ29kZSBjb21waWxlZCBmb3IgbG93ZXIgbnVtYmVyZWQKK2FyY2hpdGVjdHVyZXMgcnVucyBvbiBoaWdoZXIgbnVtYmVyZWQgYXJjaGl0ZWN0dXJlcywgYnV0IG5vdCB0aGUKK290aGVyIHdheSBhcm91bmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBhLXJpc2MtMS0wPC9jb2RlPjxkdD48Y29kZT4tbXBhLXJpc2MtMS0xPC9jb2RlPjxkdD48Y29kZT4tbXBhLXJpc2MtMi0wPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcGFfMDAyZHJpc2NfMDAyZDFfMDAyZDAtMTQxMyI+PC9hPjxhIG5hbWU9ImluZGV4LW1wYV8wMDJkcmlzY18wMDJkMV8wMDJkMS0xNDE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXBhXzAwMmRyaXNjXzAwMmQyXzAwMmQwLTE0MTUiPjwvYT5TeW5vbnltcyBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPTEuMDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9MS4xPC9zcGFuPjwvc2FtcD4sIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9Mi4wPC9zcGFuPjwvc2FtcD4gcmVzcGVjdGl2ZWx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1iaWctc3dpdGNoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYmlnXzAwMmRzd2l0Y2gtMTQxNiI+PC9hPkdlbmVyYXRlIGNvZGUgc3VpdGFibGUgZm9yIGJpZyBzd2l0Y2ggdGFibGVzLiAgVXNlIHRoaXMgb3B0aW9uIG9ubHkgaWYKK3RoZSBhc3NlbWJsZXIvbGlua2VyIGNvbXBsYWluIGFib3V0IG91dC1vZi1yYW5nZSBicmFuY2hlcyB3aXRoaW4gYSBzd2l0Y2gKK3RhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1qdW1wLWluLWRlbGF5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tanVtcF8wMDJkaW5fMDAyZGRlbGF5LTE0MTciPjwvYT5GaWxsIGRlbGF5IHNsb3RzIG9mIGZ1bmN0aW9uIGNhbGxzIHdpdGggdW5jb25kaXRpb25hbCBqdW1wIGluc3RydWN0aW9ucworYnkgbW9kaWZ5aW5nIHRoZSByZXR1cm4gcG9pbnRlciBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwgdG8gYmUgdGhlIHRhcmdldAorb2YgdGhlIGNvbmRpdGlvbmFsIGp1bXAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRpc2FibGUtZnByZWdzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZGlzYWJsZV8wMDJkZnByZWdzLTE0MTgiPjwvYT5QcmV2ZW50IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBmcm9tIGJlaW5nIHVzZWQgaW4gYW55IG1hbm5lci4gIFRoaXMgaXMKK25lY2Vzc2FyeSBmb3IgY29tcGlsaW5nIGtlcm5lbHMgdGhhdCBwZXJmb3JtIGxhenkgY29udGV4dCBzd2l0Y2hpbmcgb2YKK2Zsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gIElmIHlvdSB1c2UgdGhpcyBvcHRpb24gYW5kIGF0dGVtcHQgdG8gcGVyZm9ybQorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucywgdGhlIGNvbXBpbGVyIGFib3J0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZGlzYWJsZS1pbmRleGluZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWRpc2FibGVfMDAyZGluZGV4aW5nLTE0MTkiPjwvYT5QcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIHVzaW5nIGluZGV4aW5nIGFkZHJlc3MgbW9kZXMuICBUaGlzIGF2b2lkcyBzb21lCityYXRoZXIgb2JzY3VyZSBwcm9ibGVtcyB3aGVuIGNvbXBpbGluZyBNSUcgZ2VuZXJhdGVkIGNvZGUgdW5kZXIgTUFDSC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tc3BhY2UtcmVnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzcGFjZV8wMDJkcmVncy0xNDIwIj48L2E+R2VuZXJhdGUgY29kZSB0aGF0IGFzc3VtZXMgdGhlIHRhcmdldCBoYXMgbm8gc3BhY2UgcmVnaXN0ZXJzLiAgVGhpcyBhbGxvd3MKK0dDQyB0byBnZW5lcmF0ZSBmYXN0ZXIgaW5kaXJlY3QgY2FsbHMgYW5kIHVzZSB1bnNjYWxlZCBpbmRleCBhZGRyZXNzIG1vZGVzLgorCisgICAgIDxwPlN1Y2ggY29kZSBpcyBzdWl0YWJsZSBmb3IgbGV2ZWwgMCBQQSBzeXN0ZW1zIGFuZCBrZXJuZWxzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mYXN0LWluZGlyZWN0LWNhbGxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZmFzdF8wMDJkaW5kaXJlY3RfMDAyZGNhbGxzLTE0MjEiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgYXNzdW1lcyBjYWxscyBuZXZlciBjcm9zcyBzcGFjZSBib3VuZGFyaWVzLiAgVGhpcworYWxsb3dzIEdDQyB0byBlbWl0IGNvZGUgdGhhdCBwZXJmb3JtcyBmYXN0ZXIgaW5kaXJlY3QgY2FsbHMuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gZG9lcyBub3Qgd29yayBpbiB0aGUgcHJlc2VuY2Ugb2Ygc2hhcmVkIGxpYnJhcmllcyBvciBuZXN0ZWQKK2Z1bmN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZml4ZWQtcmFuZ2U9PC9jb2RlPjx2YXI+cmVnaXN0ZXItcmFuZ2U8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZpeGVkXzAwMmRyYW5nZS0xNDIyIj48L2E+R2VuZXJhdGUgY29kZSB0cmVhdGluZyB0aGUgZ2l2ZW4gcmVnaXN0ZXIgcmFuZ2UgYXMgZml4ZWQgcmVnaXN0ZXJzLiAKK0EgZml4ZWQgcmVnaXN0ZXIgaXMgb25lIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBjYW5ub3QgdXNlLiAgVGhpcyBpcwordXNlZnVsIHdoZW4gY29tcGlsaW5nIGtlcm5lbCBjb2RlLiAgQSByZWdpc3RlciByYW5nZSBpcyBzcGVjaWZpZWQgYXMKK3R3byByZWdpc3RlcnMgc2VwYXJhdGVkIGJ5IGEgZGFzaC4gIE11bHRpcGxlIHJlZ2lzdGVyIHJhbmdlcyBjYW4gYmUKK3NwZWNpZmllZCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbG9uZy1sb2FkLXN0b3JlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbG9uZ18wMDJkbG9hZF8wMDJkc3RvcmUtMTQyMyI+PC9hPkdlbmVyYXRlIDMtaW5zdHJ1Y3Rpb24gbG9hZCBhbmQgc3RvcmUgc2VxdWVuY2VzIGFzIHNvbWV0aW1lcyByZXF1aXJlZCBieQordGhlIEhQLVVYIDEwIGxpbmtlci4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4razwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8KK3RoZSBIUCBjb21waWxlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBvcnRhYmxlLXJ1bnRpbWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wb3J0YWJsZV8wMDJkcnVudGltZS0xNDI0Ij48L2E+VXNlIHRoZSBwb3J0YWJsZSBjYWxsaW5nIGNvbnZlbnRpb25zIHByb3Bvc2VkIGJ5IEhQIGZvciBFTEYgc3lzdGVtcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZ2FzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZ2FzLTE0MjUiPjwvYT5FbmFibGUgdGhlIHVzZSBvZiBhc3NlbWJsZXIgZGlyZWN0aXZlcyBvbmx5IEdBUyB1bmRlcnN0YW5kcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2NoZWR1bGU9PC9jb2RlPjx2YXI+Y3B1LXR5cGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNjaGVkdWxlLTE0MjYiPjwvYT5TY2hlZHVsZSBjb2RlIGFjY29yZGluZyB0byB0aGUgY29uc3RyYWludHMgZm9yIHRoZSBtYWNoaW5lIHR5cGUKKzx2YXI+Y3B1LXR5cGU8L3Zhcj4uICBUaGUgY2hvaWNlcyBmb3IgPHZhcj5jcHUtdHlwZTwvdmFyPiBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj43MDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NzEwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj43MTAwTEM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NzIwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj43MzAwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjgwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBSZWZlcgordG8gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi91c3IvbGliL3NjaGVkLm1vZGVsczwvc3Bhbj48L3NhbXA+IG9uIGFuIEhQLVVYIHN5c3RlbSB0byBkZXRlcm1pbmUgdGhlCitwcm9wZXIgc2NoZWR1bGluZyBvcHRpb24gZm9yIHlvdXIgbWFjaGluZS4gIFRoZSBkZWZhdWx0IHNjaGVkdWxpbmcgaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ODAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbGlua2VyLW9wdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxpbmtlcl8wMDJkb3B0LTE0MjciPjwvYT5FbmFibGUgdGhlIG9wdGltaXphdGlvbiBwYXNzIGluIHRoZSBIUC1VWCBsaW5rZXIuICBOb3RlIHRoaXMgbWFrZXMgc3ltYm9saWMKK2RlYnVnZ2luZyBpbXBvc3NpYmxlLiAgSXQgYWxzbyB0cmlnZ2VycyBhIGJ1ZyBpbiB0aGUgSFAtVVggOCBhbmQgSFAtVVggOQorbGlua2VycyBpbiB3aGljaCB0aGV5IGdpdmUgYm9ndXMgZXJyb3IgbWVzc2FnZXMgd2hlbiBsaW5raW5nIHNvbWUgcHJvZ3JhbXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNvZnQtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zb2Z0XzAwMmRmbG9hdC0xNDI4Ij48L2E+R2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcgbGlicmFyeSBjYWxscyBmb3IgZmxvYXRpbmcgcG9pbnQuIAorPHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiB0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgYWxsIEhQUEEKK3RhcmdldHMuICBOb3JtYWxseSB0aGUgZmFjaWxpdGllcyBvZiB0aGUgbWFjaGluZSdzIHVzdWFsIEMgY29tcGlsZXIgYXJlCit1c2VkLCBidXQgdGhpcyBjYW5ub3QgYmUgZG9uZSBkaXJlY3RseSBpbiBjcm9zcy1jb21waWxhdGlvbi4gIFlvdSBtdXN0IG1ha2UKK3lvdXIgb3duIGFycmFuZ2VtZW50cyB0byBwcm92aWRlIHN1aXRhYmxlIGxpYnJhcnkgZnVuY3Rpb25zIGZvcgorY3Jvc3MtY29tcGlsYXRpb24uCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zb2Z0LWZsb2F0PC9zcGFuPjwvc2FtcD4gY2hhbmdlcyB0aGUgY2FsbGluZyBjb252ZW50aW9uIGluIHRoZSBvdXRwdXQgZmlsZTsKK3RoZXJlZm9yZSwgaXQgaXMgb25seSB1c2VmdWwgaWYgeW91IGNvbXBpbGUgPGVtPmFsbDwvZW0+IG9mIGEgcHJvZ3JhbSB3aXRoCit0aGlzIG9wdGlvbi4gIEluIHBhcnRpY3VsYXIsIHlvdSBuZWVkIHRvIGNvbXBpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYy5hPC9zcGFuPjwvc2FtcD4sIHRoZQorbGlicmFyeSB0aGF0IGNvbWVzIHdpdGggR0NDLCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc29mdC1mbG9hdDwvc3Bhbj48L3NhbXA+IGluIG9yZGVyIGZvcgordGhpcyB0byB3b3JrLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zaW88L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW8tMTQyOSI+PC9hPkdlbmVyYXRlIHRoZSBwcmVkZWZpbmUsIDxjb2RlPl9TSU88L2NvZGU+LCBmb3Igc2VydmVyIElPLiAgVGhlIGRlZmF1bHQgaXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1td3Npbzwvc3Bhbj48L3NhbXA+LiAgVGhpcyBnZW5lcmF0ZXMgdGhlIHByZWRlZmluZXMsIDxjb2RlPl9faHA5MDAwczcwMDwvY29kZT4sCis8Y29kZT5fX2hwOTAwMHM3MDBfXzwvY29kZT4gYW5kIDxjb2RlPl9XU0lPPC9jb2RlPiwgZm9yIHdvcmtzdGF0aW9uIElPLiAgVGhlc2UKK29wdGlvbnMgYXJlIGF2YWlsYWJsZSB1bmRlciBIUC1VWCBhbmQgSEktVVguCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWdudS1sZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWdudV8wMDJkbGQtMTQzMCI+PC9hPlVzZSBvcHRpb25zIHNwZWNpZmljIHRvIEdOVSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPi4gCitUaGlzIHBhc3NlcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc2hhcmVkPC9zcGFuPjwvc2FtcD4gdG8gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gd2hlbgorYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeS4gIEl0IGlzIHRoZSBkZWZhdWx0IHdoZW4gR0NDIGlzIGNvbmZpZ3VyZWQsCitleHBsaWNpdGx5IG9yIGltcGxpY2l0bHksIHdpdGggdGhlIEdOVSBsaW5rZXIuICBUaGlzIG9wdGlvbiBkb2VzIG5vdAorYWZmZWN0IHdoaWNoIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGlzIGNhbGxlZDsgaXQgb25seSBjaGFuZ2VzIHdoYXQgcGFyYW1ldGVycworYXJlIHBhc3NlZCB0byB0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+LiAKK1RoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0aGF0IGlzIGNhbGxlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLWxkPC9zcGFuPjwvc2FtcD4gY29uZmlndXJlIG9wdGlvbiwgR0NDJ3MgcHJvZ3JhbSBzZWFyY2ggcGF0aCwgYW5kCitmaW5hbGx5IGJ5IHRoZSB1c2VyJ3MgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+UEFUSDwvc3Bhbj48L3NhbXA+LiAgVGhlIGxpbmtlciB1c2VkIGJ5IEdDQyBjYW4gYmUgcHJpbnRlZAordXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53aGljaCBgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGRgPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUKK29uIHRoZSA2NC1iaXQgSFAtVVggR0NDLCBpLmUuIGNvbmZpZ3VyZWQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmhwcGEqNjQqLSotaHB1eCo8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWhwLWxkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taHBfMDAyZGxkLTE0MzEiPjwvYT5Vc2Ugb3B0aW9ucyBzcGVjaWZpYyB0byBIUCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPi4gCitUaGlzIHBhc3NlcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYjwvc3Bhbj48L3NhbXA+IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHdoZW4gYnVpbGRpbmcKK2Egc2hhcmVkIGxpYnJhcnkgYW5kIHBhc3NlcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4rQWNjZXB0IFR5cGVNaXNtYXRjaDwvc3Bhbj48L3NhbXA+IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IG9uIGFsbAorbGlua3MuICBJdCBpcyB0aGUgZGVmYXVsdCB3aGVuIEdDQyBpcyBjb25maWd1cmVkLCBleHBsaWNpdGx5IG9yCitpbXBsaWNpdGx5LCB3aXRoIHRoZSBIUCBsaW5rZXIuICBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QKK3doaWNoIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGlzIGNhbGxlZDsgaXQgb25seSBjaGFuZ2VzIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoYXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+LiAKK1RoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0aGF0IGlzIGNhbGxlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdpdGgtbGQ8L3NwYW4+PC9zYW1wPgorY29uZmlndXJlIG9wdGlvbiwgR0NDJ3MgcHJvZ3JhbSBzZWFyY2ggcGF0aCwgYW5kIGZpbmFsbHkgYnkgdGhlIHVzZXIncworPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+UEFUSDwvc3Bhbj48L3NhbXA+LiAgVGhlIGxpbmtlciB1c2VkIGJ5IEdDQyBjYW4gYmUgcHJpbnRlZCB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPndoaWNoCitgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGRgPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgb24gdGhlIDY0LWJpdAorSFAtVVggR0NDLCBpLmUuIGNvbmZpZ3VyZWQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmhwcGEqNjQqLSotaHB1eCo8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmctY2FsbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbG9uZ18wMDJkY2FsbHMtMTQzMiI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIGxvbmcgY2FsbCBzZXF1ZW5jZXMuICBUaGlzIGVuc3VyZXMgdGhhdCBhIGNhbGwKK2lzIGFsd2F5cyBhYmxlIHRvIHJlYWNoIGxpbmtlciBnZW5lcmF0ZWQgc3R1YnMuICBUaGUgZGVmYXVsdCBpcyB0byBnZW5lcmF0ZQorbG9uZyBjYWxscyBvbmx5IHdoZW4gdGhlIGRpc3RhbmNlIGZyb20gdGhlIGNhbGwgc2l0ZSB0byB0aGUgYmVnaW5uaW5nCitvZiB0aGUgZnVuY3Rpb24gb3IgdHJhbnNsYXRpb24gdW5pdCwgYXMgdGhlIGNhc2UgbWF5IGJlLCBleGNlZWRzIGEKK3ByZWRlZmluZWQgbGltaXQgc2V0IGJ5IHRoZSBicmFuY2ggdHlwZSBiZWluZyB1c2VkLiAgVGhlIGxpbWl0cyBmb3IKK25vcm1hbCBjYWxscyBhcmUgNyw2MDAsMDAwIGFuZCAyNDAsMDAwIGJ5dGVzLCByZXNwZWN0aXZlbHkgZm9yIHRoZQorUEEgMi4wIGFuZCBQQSAxLlggYXJjaGl0ZWN0dXJlcy4gIFNpYmNhbGxzIGFyZSBhbHdheXMgbGltaXRlZCBhdAorMjQwLDAwMCBieXRlcy4KKworICAgICA8cD5EaXN0YW5jZXMgYXJlIG1lYXN1cmVkIGZyb20gdGhlIGJlZ2lubmluZyBvZiBmdW5jdGlvbnMgd2hlbiB1c2luZyB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnVuY3Rpb24tc2VjdGlvbnM8L3NwYW4+PC9zYW1wPiBvcHRpb24sIG9yIHdoZW4gdXNpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZ2FzPC9zcGFuPjwvc2FtcD4KK2FuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXBvcnRhYmxlLXJ1bnRpbWU8L3NwYW4+PC9zYW1wPiBvcHRpb25zIHRvZ2V0aGVyIHVuZGVyIEhQLVVYIHdpdGgKK3RoZSBTT00gbGlua2VyLgorCisgICAgIDxwPkl0IGlzIG5vcm1hbGx5IG5vdCBkZXNpcmFibGUgdG8gdXNlIHRoaXMgb3B0aW9uIGFzIGl0IGRlZ3JhZGVzCitwZXJmb3JtYW5jZS4gIEhvd2V2ZXIsIGl0IG1heSBiZSB1c2VmdWwgaW4gbGFyZ2UgYXBwbGljYXRpb25zLAorcGFydGljdWxhcmx5IHdoZW4gcGFydGlhbCBsaW5raW5nIGlzIHVzZWQgdG8gYnVpbGQgdGhlIGFwcGxpY2F0aW9uLgorCisgICAgIDxwPlRoZSB0eXBlcyBvZiBsb25nIGNhbGxzIHVzZWQgZGVwZW5kcyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZQorYXNzZW1ibGVyIGFuZCBsaW5rZXIsIGFuZCB0aGUgdHlwZSBvZiBjb2RlIGJlaW5nIGdlbmVyYXRlZC4gIFRoZQoraW1wYWN0IG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGxvbmcgYWJzb2x1dGUgY2FsbHMsIGFuZCBsb25nIHBpYworc3ltYm9sLWRpZmZlcmVuY2Ugb3IgcGMtcmVsYXRpdmUgY2FsbHMgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc21hbGwuIAorSG93ZXZlciwgYW4gaW5kaXJlY3QgY2FsbCBpcyB1c2VkIG9uIDMyLWJpdCBFTEYgc3lzdGVtcyBpbiBwaWMgY29kZQorYW5kIGl0IGlzIHF1aXRlIGxvbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXVuaXg9PC9jb2RlPjx2YXI+dW5peC1zdGQ8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFyY2gtMTQzMyI+PC9hPkdlbmVyYXRlIGNvbXBpbGVyIHByZWRlZmluZXMgYW5kIHNlbGVjdCBhIHN0YXJ0ZmlsZSBmb3IgdGhlIHNwZWNpZmllZAorVU5JWCBzdGFuZGFyZC4gIFRoZSBjaG9pY2VzIGZvciA8dmFyPnVuaXgtc3RkPC92YXI+IGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjkzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjk1PC9zcGFuPjwvc2FtcD4mcnNxdW87CithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj45ODwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+OTM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgc3VwcG9ydGVkIG9uIGFsbCBIUC1VWCB2ZXJzaW9ucy4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+OTU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2lzIGF2YWlsYWJsZSBvbiBIUC1VWCAxMC4xMCBhbmQgbGF0ZXIuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjk4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGF2YWlsYWJsZSBvbiBIUC1VWAorMTEuMTEgYW5kIGxhdGVyLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjkzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBIUC1VWCAxMC4wMCwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+OTU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIEhQLVVYIDEwLjEwIHRob3VnaCB0byAxMS4wMCwgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+OTg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIEhQLVVYIDExLjExCithbmQgbGF0ZXIuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW11bml4PTkzPC9zcGFuPjwvc2FtcD4gcHJvdmlkZXMgdGhlIHNhbWUgcHJlZGVmaW5lcyBhcyBHQ0MgMy4zIGFuZCAzLjQuIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW11bml4PTk1PC9zcGFuPjwvc2FtcD4gcHJvdmlkZXMgYWRkaXRpb25hbCBwcmVkZWZpbmVzIGZvciA8Y29kZT5YT1BFTl9VTklYPC9jb2RlPgorYW5kIDxjb2RlPl9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ8L2NvZGU+LCBhbmQgdGhlIHN0YXJ0ZmlsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+dW5peDk1Lm88L3NwYW4+PC9zYW1wPi4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXVuaXg9OTg8L3NwYW4+PC9zYW1wPiBwcm92aWRlcyBhZGRpdGlvbmFsIHByZWRlZmluZXMgZm9yIDxjb2RlPl9YT1BFTl9VTklYPC9jb2RlPiwKKzxjb2RlPl9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ8L2NvZGU+LCA8Y29kZT5fSU5DTFVERV9fU1REQ19BMV9TT1VSQ0U8L2NvZGU+IGFuZAorPGNvZGU+X0lOQ0xVREVfWE9QRU5fU09VUkNFXzUwMDwvY29kZT4sIGFuZCB0aGUgc3RhcnRmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj51bml4OTgubzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPkl0IGlzIDxlbT5pbXBvcnRhbnQ8L2VtPiB0byBub3RlIHRoYXQgdGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgaW50ZXJmYWNlcworZm9yIHZhcmlvdXMgbGlicmFyeSByb3V0aW5lcy4gIEl0IGFsc28gYWZmZWN0cyB0aGUgb3BlcmF0aW9uYWwgYmVoYXZpb3IKK29mIHRoZSBDIGxpYnJhcnkuICBUaHVzLCA8ZW0+ZXh0cmVtZTwvZW0+IGNhcmUgaXMgbmVlZGVkIGluIHVzaW5nIHRoaXMKK29wdGlvbi4KKworICAgICA8cD5MaWJyYXJ5IGNvZGUgdGhhdCBpcyBpbnRlbmRlZCB0byBvcGVyYXRlIHdpdGggbW9yZSB0aGFuIG9uZSBVTklYCitzdGFuZGFyZCBtdXN0IHRlc3QsIHNldCBhbmQgcmVzdG9yZSB0aGUgdmFyaWFibGUgPHZhcj5fX3hwZzRfZXh0ZW5kZWRfbWFzazwvdmFyPgorYXMgYXBwcm9wcmlhdGUuICBNb3N0IEdOVSBzb2Z0d2FyZSBkb2Vzbid0IHByb3ZpZGUgdGhpcyBjYXBhYmlsaXR5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW5vbGliZGxkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ub2xpYmRsZC0xNDM0Ij48L2E+U3VwcHJlc3MgdGhlIGdlbmVyYXRpb24gb2YgbGluayBvcHRpb25zIHRvIHNlYXJjaCBsaWJkbGQuc2wgd2hlbiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGF0aWM8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgc3BlY2lmaWVkIG9uIEhQLVVYIDEwIGFuZCBsYXRlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1zdGF0aWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXN0YXRpYy0xNDM1Ij48L2E+VGhlIEhQLVVYIGltcGxlbWVudGF0aW9uIG9mIHNldGxvY2FsZSBpbiBsaWJjIGhhcyBhIGRlcGVuZGVuY3kgb24KK2xpYmRsZC5zbC4gIFRoZXJlIGlzbid0IGFuIGFyY2hpdmUgdmVyc2lvbiBvZiBsaWJkbGQuc2wuICBUaHVzLAord2hlbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0YXRpYzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBzcGVjaWZpZWQsIHNwZWNpYWwgbGluayBvcHRpb25zCithcmUgbmVlZGVkIHRvIHJlc29sdmUgdGhpcyBkZXBlbmRlbmN5LgorCisgICAgIDxwPk9uIEhQLVVYIDEwIGFuZCBsYXRlciwgdGhlIEdDQyBkcml2ZXIgYWRkcyB0aGUgbmVjZXNzYXJ5IG9wdGlvbnMgdG8KK2xpbmsgd2l0aCBsaWJkbGQuc2wgd2hlbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0YXRpYzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBzcGVjaWZpZWQuIAorVGhpcyBjYXVzZXMgdGhlIHJlc3VsdGluZyBiaW5hcnkgdG8gYmUgZHluYW1pYy4gIE9uIHRoZSA2NC1iaXQgcG9ydCwKK3RoZSBsaW5rZXJzIGdlbmVyYXRlIGR5bmFtaWMgYmluYXJpZXMgYnkgZGVmYXVsdCBpbiBhbnkgY2FzZS4gIFRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW5vbGliZGxkPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgdGhlIEdDQyBkcml2ZXIgZnJvbQorYWRkaW5nIHRoZXNlIGxpbmsgb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi10aHJlYWRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC10aHJlYWRzLTE0MzYiPjwvYT5BZGQgc3VwcG9ydCBmb3IgbXVsdGl0aHJlYWRpbmcgd2l0aCB0aGUgPGRmbj5kY2UgdGhyZWFkPC9kZm4+IGxpYnJhcnkKK3VuZGVyIEhQLVVYLiAgVGhpcyBvcHRpb24gc2V0cyBmbGFncyBmb3IgYm90aCB0aGUgcHJlcHJvY2Vzc29yIGFuZAorbGlua2VyLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0hhbGZfMDAyZFByZWNpc2lvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9IYWxmXzAwMmRQcmVjaXNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGVkZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9IYWxmXzAwMmRQcmVjaXNpb24uaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SGFsZi1QcmVjaXNpb24gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRmxvYXRpbmctVHlwZXMuaHRtbCNGbG9hdGluZy1UeXBlcyIgdGl0bGU9IkZsb2F0aW5nIFR5cGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI0RlY2ltYWwtRmxvYXQiIHRpdGxlPSJEZWNpbWFsIEZsb2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkhhbGYtUHJlY2lzaW9uIj48L2E+Cis8YSBuYW1lPSJIYWxmXzAwMmRQcmVjaXNpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI0RlY2ltYWwtRmxvYXQiPkRlY2ltYWwgRmxvYXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGbG9hdGluZy1UeXBlcy5odG1sI0Zsb2F0aW5nLVR5cGVzIj5GbG9hdGluZyBUeXBlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xMiBIYWxmLVByZWNpc2lvbiBGbG9hdGluZyBQb2ludDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWhhbGZfMDAyZHByZWNpc2lvbi1mbG9hdGluZy1wb2ludC0yNDU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZnAxNl8wMDdkLWRhdGEtdHlwZS0yNDU3Ij48L2E+CitPbiBBUk0gdGFyZ2V0cywgR0NDIHN1cHBvcnRzIGhhbGYtcHJlY2lzaW9uICgxNi1iaXQpIGZsb2F0aW5nIHBvaW50IHZpYQordGhlIDxjb2RlPl9fZnAxNjwvY29kZT4gdHlwZS4gIFlvdSBtdXN0IGVuYWJsZSB0aGlzIHR5cGUgZXhwbGljaXRseQord2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mcDE2LWZvcm1hdDwvc3Bhbj48L3NhbXA+IGNvbW1hbmQtbGluZSBvcHRpb24gaW4gb3JkZXIgdG8gdXNlIGl0LgorCisgPHA+QVJNIHN1cHBvcnRzIHR3byBpbmNvbXBhdGlibGUgcmVwcmVzZW50YXRpb25zIGZvciBoYWxmLXByZWNpc2lvbgorZmxvYXRpbmctcG9pbnQgdmFsdWVzLiAgWW91IG11c3QgY2hvb3NlIG9uZSBvZiB0aGUgcmVwcmVzZW50YXRpb25zIGFuZAordXNlIGl0IGNvbnNpc3RlbnRseSBpbiB5b3VyIHByb2dyYW0uCisKKyA8cD5TcGVjaWZ5aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnAxNi1mb3JtYXQ9aWVlZTwvc3Bhbj48L3NhbXA+IHNlbGVjdHMgdGhlIElFRUUgNzU0LTIwMDggZm9ybWF0LiAKK1RoaXMgZm9ybWF0IGNhbiByZXByZXNlbnQgbm9ybWFsaXplZCB2YWx1ZXMgaW4gdGhlIHJhbmdlIG9mIDJeLTE0IHRvIDY1NTA0LiAKK1RoZXJlIGFyZSAxMSBiaXRzIG9mIHNpZ25pZmljYW5kIHByZWNpc2lvbiwgYXBwcm94aW1hdGVseSAzCitkZWNpbWFsIGRpZ2l0cy4KKworIDxwPlNwZWNpZnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mcDE2LWZvcm1hdD1hbHRlcm5hdGl2ZTwvc3Bhbj48L3NhbXA+IHNlbGVjdHMgdGhlIEFSTQorYWx0ZXJuYXRpdmUgZm9ybWF0LiAgVGhpcyByZXByZXNlbnRhdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSBJRUVFCitmb3JtYXQsIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IGluZmluaXRpZXMgb3IgTmFOcy4gIEluc3RlYWQsIHRoZSByYW5nZQorb2YgZXhwb25lbnRzIGlzIGV4dGVuZGVkLCBzbyB0aGF0IHRoaXMgZm9ybWF0IGNhbiByZXByZXNlbnQgbm9ybWFsaXplZAordmFsdWVzIGluIHRoZSByYW5nZSBvZiAyXi0xNCB0byAxMzEwMDguCisKKyA8cD5UaGUgPGNvZGU+X19mcDE2PC9jb2RlPiB0eXBlIGlzIGEgc3RvcmFnZSBmb3JtYXQgb25seS4gIEZvciBwdXJwb3Nlcworb2YgYXJpdGhtZXRpYyBhbmQgb3RoZXIgb3BlcmF0aW9ucywgPGNvZGU+X19mcDE2PC9jb2RlPiB2YWx1ZXMgaW4gQyBvciBDKysKK2V4cHJlc3Npb25zIGFyZSBhdXRvbWF0aWNhbGx5IHByb21vdGVkIHRvIDxjb2RlPmZsb2F0PC9jb2RlPi4gIEluIGFkZGl0aW9uLAoreW91IGNhbm5vdCBkZWNsYXJlIGEgZnVuY3Rpb24gd2l0aCBhIHJldHVybiB2YWx1ZSBvciBwYXJhbWV0ZXJzCitvZiB0eXBlIDxjb2RlPl9fZnAxNjwvY29kZT4uCisKKyA8cD5Ob3RlIHRoYXQgY29udmVyc2lvbnMgZnJvbSA8Y29kZT5kb3VibGU8L2NvZGU+IHRvIDxjb2RlPl9fZnAxNjwvY29kZT4KK2ludm9sdmUgYW4gaW50ZXJtZWRpYXRlIGNvbnZlcnNpb24gdG8gPGNvZGU+ZmxvYXQ8L2NvZGU+LiAgQmVjYXVzZQorb2Ygcm91bmRpbmcsIHRoaXMgY2FuIHNvbWV0aW1lcyBwcm9kdWNlIGEgZGlmZmVyZW50IHJlc3VsdCB0aGFuIGEKK2RpcmVjdCBjb252ZXJzaW9uLgorCisgPHA+QVJNIHByb3ZpZGVzIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGNvbnZlcnNpb25zIGJldHdlZW4KKzxjb2RlPl9fZnAxNjwvY29kZT4gYW5kIDxjb2RlPmZsb2F0PC9jb2RlPiB2YWx1ZXMKK2FzIGFuIGV4dGVuc2lvbiB0byBWRlAgYW5kIE5FT04gKEFkdmFuY2VkIFNJTUQpLiAgR0NDIGdlbmVyYXRlcworY29kZSB1c2luZyB0aGVzZSBoYXJkd2FyZSBpbnN0cnVjdGlvbnMgaWYgeW91IGNvbXBpbGUgd2l0aAorb3B0aW9ucyB0byBzZWxlY3QgYW4gRlBVIHRoYXQgcHJvdmlkZXMgdGhlbTsKK2ZvciBleGFtcGxlLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZwdT1uZW9uLWZwMTYgLW1mbG9hdC1hYmk9c29mdGZwPC9zcGFuPjwvc2FtcD4sCitpbiBhZGRpdGlvbiB0byB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mcDE2LWZvcm1hdDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byBzZWxlY3QKK2EgaGFsZi1wcmVjaXNpb24gZm9ybWF0LgorCisgPHA+TGFuZ3VhZ2UtbGV2ZWwgc3VwcG9ydCBmb3IgdGhlIDxjb2RlPl9fZnAxNjwvY29kZT4gZGF0YSB0eXBlIGlzCitpbmRlcGVuZGVudCBvZiB3aGV0aGVyIEdDQyBnZW5lcmF0ZXMgY29kZSB1c2luZyBoYXJkd2FyZSBmbG9hdGluZy1wb2ludAoraW5zdHJ1Y3Rpb25zLiAgSW4gY2FzZXMgd2hlcmUgaGFyZHdhcmUgc3VwcG9ydCBpcyBub3Qgc3BlY2lmaWVkLCBHQ0MKK2ltcGxlbWVudHMgY29udmVyc2lvbnMgYmV0d2VlbiA8Y29kZT5fX2ZwMTY8L2NvZGU+IGFuZCA8Y29kZT5mbG9hdDwvY29kZT4gdmFsdWVzCithcyBsaWJyYXJ5IGNhbGxzLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9IZXgtRmxvYXRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0hleC1GbG9hdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDkwZTlhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9IZXgtRmxvYXRzLmh0bWwKQEAgLTAsMCArMSw3NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SGV4IEZsb2F0cyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjRGVjaW1hbC1GbG9hdCIgdGl0bGU9IkRlY2ltYWwgRmxvYXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiIHRpdGxlPSJGaXhlZC1Qb2ludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIZXgtRmxvYXRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjRGVjaW1hbC1GbG9hdCI+RGVjaW1hbCBGbG9hdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xNCBIZXggRmxvYXRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaGV4LWZsb2F0cy0yNDY4Ij48L2E+CitJU08gQzk5IHN1cHBvcnRzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgd3JpdHRlbiBub3Qgb25seSBpbiB0aGUgdXN1YWwKK2RlY2ltYWwgbm90YXRpb24sIHN1Y2ggYXMgPGNvZGU+MS41NWUxPC9jb2RlPiwgYnV0IGFsc28gbnVtYmVycyBzdWNoIGFzCis8Y29kZT4weDEuZnAzPC9jb2RlPiB3cml0dGVuIGluIGhleGFkZWNpbWFsIGZvcm1hdC4gIEFzIGEgR05VIGV4dGVuc2lvbiwgR0NDCitzdXBwb3J0cyB0aGlzIGluIEM5MCBtb2RlIChleGNlcHQgaW4gc29tZSBjYXNlcyB3aGVuIHN0cmljdGx5Citjb25mb3JtaW5nKSBhbmQgaW4gQysrLiAgSW4gdGhhdCBmb3JtYXQgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGhleCBpbnRyb2R1Y2VyIGFuZCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBleHBvbmVudCBmaWVsZCBhcmUKK21hbmRhdG9yeS4gIFRoZSBleHBvbmVudCBpcyBhIGRlY2ltYWwgbnVtYmVyIHRoYXQgaW5kaWNhdGVzIHRoZSBwb3dlciBvZgorMiBieSB3aGljaCB0aGUgc2lnbmlmaWNhbnQgcGFydCBpcyBtdWx0aXBsaWVkLiAgVGh1cyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4MS5mPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzCisxIDE1LzE2LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wMzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtdWx0aXBsaWVzIGl0IGJ5IDgsIGFuZCB0aGUgdmFsdWUgb2YgPGNvZGU+MHgxLmZwMzwvY29kZT4KK2lzIHRoZSBzYW1lIGFzIDxjb2RlPjEuNTVlMTwvY29kZT4uCisKKyA8cD5Vbmxpa2UgZm9yIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgaW4gdGhlIGRlY2ltYWwgbm90YXRpb24gdGhlIGV4cG9uZW50CitpcyBhbHdheXMgcmVxdWlyZWQgaW4gdGhlIGhleGFkZWNpbWFsIG5vdGF0aW9uLiAgT3RoZXJ3aXNlIHRoZSBjb21waWxlcgord291bGQgbm90IGJlIGFibGUgdG8gcmVzb2x2ZSB0aGUgYW1iaWd1aXR5IG9mLCBlLmcuLCA8Y29kZT4weDEuZjwvY29kZT4uICBUaGlzCitjb3VsZCBtZWFuIDxjb2RlPjEuMGY8L2NvZGU+IG9yIDxjb2RlPjEuOTM3NTwvY29kZT4gc2luY2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFsc28gdGhlCitleHRlbnNpb24gZm9yIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cyBvZiB0eXBlIDxjb2RlPmZsb2F0PC9jb2RlPi4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSGludHMtaW1wbGVtZW50YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSGludHMtaW1wbGVtZW50YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjQyZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9IaW50cy1pbXBsZW1lbnRhdGlvbi5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkhpbnRzIGltcGxlbWVudGF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIiB0aXRsZT0iQyBJbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFycmF5cy1hbmQtcG9pbnRlcnMtaW1wbGVtZW50YXRpb24uaHRtbCNBcnJheXMtYW5kLXBvaW50ZXJzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iQXJyYXlzIGFuZCBwb2ludGVycyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlN0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24uaHRtbCNTdHJ1Y3R1cmVzLXVuaW9ucy1lbnVtZXJhdGlvbnMtYW5kLWJpdF8wMDJkZmllbGRzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iU3RydWN0dXJlcyB1bmlvbnMgZW51bWVyYXRpb25zIGFuZCBiaXQtZmllbGRzIGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkhpbnRzLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24uaHRtbCNTdHJ1Y3R1cmVzLXVuaW9ucy1lbnVtZXJhdGlvbnMtYW5kLWJpdF8wMDJkZmllbGRzLWltcGxlbWVudGF0aW9uIj5TdHJ1Y3R1cmVzIHVuaW9ucyBlbnVtZXJhdGlvbnMgYW5kIGJpdC1maWVsZHMgaW1wbGVtZW50YXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBcnJheXMtYW5kLXBvaW50ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjQXJyYXlzLWFuZC1wb2ludGVycy1pbXBsZW1lbnRhdGlvbiI+QXJyYXlzIGFuZCBwb2ludGVycyBpbXBsZW1lbnRhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj5DIEltcGxlbWVudGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC44IEhpbnRzPC9oMz4KKworICAgICA8dWw+Cis8bGk+PGNpdGU+VGhlIGV4dGVudCB0byB3aGljaCBzdWdnZXN0aW9ucyBtYWRlIGJ5IHVzaW5nIHRoZSA8L2NpdGU+PGNvZGU+cmVnaXN0ZXI8L2NvZGU+PGNpdGU+CitzdG9yYWdlLWNsYXNzIHNwZWNpZmllciBhcmUgZWZmZWN0aXZlIChDOTAgNi41LjEsIEM5OSA2LjcuMSkuPC9jaXRlPgorCisgICAgIDxwPlRoZSA8Y29kZT5yZWdpc3RlcjwvY29kZT4gc3BlY2lmaWVyIGFmZmVjdHMgY29kZSBnZW5lcmF0aW9uIG9ubHkgaW4gdGhlc2Ugd2F5czoKKworICAgICAgICAgIDx1bD4KKzxsaT5XaGVuIHVzZWQgYXMgcGFydCBvZiB0aGUgcmVnaXN0ZXIgdmFyaWFibGUgZXh0ZW5zaW9uLCBzZWUKKzxhIGhyZWY9IkV4cGxpY2l0LVJlZy1WYXJzLmh0bWwjRXhwbGljaXQtUmVnLVZhcnMiPkV4cGxpY2l0IFJlZyBWYXJzPC9hPi4KKworICAgICAgICAgIDxsaT5XaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMDwvc3Bhbj48L3NhbXA+IGlzIGluIHVzZSwgdGhlIGNvbXBpbGVyIGFsbG9jYXRlcyBkaXN0aW5jdCBzdGFjaworbWVtb3J5IGZvciBhbGwgdmFyaWFibGVzIHRoYXQgZG8gbm90IGhhdmUgdGhlIDxjb2RlPnJlZ2lzdGVyPC9jb2RlPgorc3RvcmFnZS1jbGFzcyBzcGVjaWZpZXI7IGlmIDxjb2RlPnJlZ2lzdGVyPC9jb2RlPiBpcyBzcGVjaWZpZWQsIHRoZSB2YXJpYWJsZQorbWF5IGhhdmUgYSBzaG9ydGVyIGxpZmVzcGFuIHRoYW4gdGhlIGNvZGUgd291bGQgaW5kaWNhdGUgYW5kIG1heSBuZXZlcgorYmUgcGxhY2VkIGluIG1lbW9yeS4KKworICAgICAgICAgIDxsaT5PbiBzb21lIHJhcmUgeDg2IHRhcmdldHMsIDxjb2RlPnNldGptcDwvY29kZT4gZG9lc24ndCBzYXZlIHRoZSByZWdpc3RlcnMgaW4KK2FsbCBjaXJjdW1zdGFuY2VzLiAgSW4gdGhvc2UgY2FzZXMsIEdDQyBkb2Vzbid0IGFsbG9jYXRlIGFueSB2YXJpYWJsZXMKK2luIHJlZ2lzdGVycyB1bmxlc3MgdGhleSBhcmUgbWFya2VkIDxjb2RlPnJlZ2lzdGVyPC9jb2RlPi4KKworICAgICA8L3VsPgorCisgICAgIDxsaT48Y2l0ZT5UaGUgZXh0ZW50IHRvIHdoaWNoIHN1Z2dlc3Rpb25zIG1hZGUgYnkgdXNpbmcgdGhlIGlubGluZSBmdW5jdGlvbgorc3BlY2lmaWVyIGFyZSBlZmZlY3RpdmUgKEM5OSA2LjcuNCkuPC9jaXRlPgorCisgICAgIDxwPkdDQyB3aWxsIG5vdCBpbmxpbmUgYW55IGZ1bmN0aW9ucyBpZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1pbmxpbmU8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMKK3VzZWQgb3IgaWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8wPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gIE90aGVyd2lzZSwgR0NDIG1heSBzdGlsbCBiZSB1bmFibGUgdG8KK2lubGluZSBhIGZ1bmN0aW9uIGZvciBtYW55IHJlYXNvbnM7IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2lubGluZTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBtYXkgYmUKK3VzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgZnVuY3Rpb24gaGFzIG5vdCBiZWVuIGlubGluZWQgYW5kIHdoeSBub3QuCisKKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0lBXzAwMmQ2NC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0lBXzAwMmQ2NC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVlMTJhOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSUFfMDAyZDY0LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDIxOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUEtNjQgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIiB0aXRsZT0iaTM4NiBhbmQgeDg2LTY0IFdpbmRvd3MgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI0xNMzItT3B0aW9ucyIgdGl0bGU9IkxNMzIgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJQS02NC1PcHRpb25zIj48L2E+Cis8YSBuYW1lPSJJQV8wMDJkNjQtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBXaW5kb3dzIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMTggSUEtNjQgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUlBXzAwMmQ2NC1PcHRpb25zLTE1MjIiPjwvYT4KK1RoZXNlIGFyZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGRlZmluZWQgZm9yIHRoZSBJbnRlbCBJQS02NCBhcmNoaXRlY3R1cmUuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tYmlnLWVuZGlhbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWJpZ18wMDJkZW5kaWFuLTE1MjMiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciBhIGJpZy1lbmRpYW4gdGFyZ2V0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgSFAtVVguCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxpdHRsZS1lbmRpYW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1saXR0bGVfMDAyZGVuZGlhbi0xNTI0Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSBsaXR0bGUtZW5kaWFuIHRhcmdldC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIEFJWDUKK2FuZCBHTlUvTGludXguCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWdudS1hczwvY29kZT48ZHQ+PGNvZGU+LW1uby1nbnUtYXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1nbnVfMDAyZGFzLTE1MjUiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGdudV8wMDJkYXMtMTUyNiI+PC9hPkdlbmVyYXRlIChvciBkb24ndCkgY29kZSBmb3IgdGhlIEdOVSBhc3NlbWJsZXIuICBUaGlzIGlzIHRoZSBkZWZhdWx0LiAKKzwhLS0gQWxzbywgdGhpcyBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgY29uZmlndXJlIG9wdGlvbiBAb3B0aW9uey13aXRoLWdudS1hc30gLS0+Cis8IS0tIGlzIHVzZWQuIC0tPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1nbnUtbGQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZ251LWxkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZ251XzAwMmRsZC0xNTI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRnbnVfMDAyZGxkLTE1MjgiPjwvYT5HZW5lcmF0ZSAob3IgZG9uJ3QpIGNvZGUgZm9yIHRoZSBHTlUgbGlua2VyLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4gCis8IS0tIEFsc28sIHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIGNvbmZpZ3VyZSBvcHRpb24gQG9wdGlvbnstd2l0aC1nbnUtbGR9IC0tPgorPCEtLSBpcyB1c2VkLiAtLT4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tcGljPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHBpYy0xNTI5Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IGRvZXMgbm90IHVzZSBhIGdsb2JhbCBwb2ludGVyIHJlZ2lzdGVyLiAgVGhlIHJlc3VsdAoraXMgbm90IHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUsIGFuZCB2aW9sYXRlcyB0aGUgSUEtNjQgQUJJLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW12b2xhdGlsZS1hc20tc3RvcDwvY29kZT48ZHQ+PGNvZGU+LW1uby12b2xhdGlsZS1hc20tc3RvcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXZvbGF0aWxlXzAwMmRhc21fMDAyZHN0b3AtMTUzMCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkdm9sYXRpbGVfMDAyZGFzbV8wMDJkc3RvcC0xNTMxIj48L2E+R2VuZXJhdGUgKG9yIGRvbid0KSBhIHN0b3AgYml0IGltbWVkaWF0ZWx5IGJlZm9yZSBhbmQgYWZ0ZXIgdm9sYXRpbGUgYXNtCitzdGF0ZW1lbnRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1yZWdpc3Rlci1uYW1lczwvY29kZT48ZHQ+PGNvZGU+LW1uby1yZWdpc3Rlci1uYW1lczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXJlZ2lzdGVyXzAwMmRuYW1lcy0xNTMyIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRyZWdpc3Rlcl8wMDJkbmFtZXMtMTUzMyI+PC9hPkdlbmVyYXRlIChvciBkb24ndCkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb2M8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm91dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWdpc3RlciBuYW1lcyBmb3IKK3RoZSBzdGFja2VkIHJlZ2lzdGVycy4gIFRoaXMgbWF5IG1ha2UgYXNzZW1ibGVyIG91dHB1dCBtb3JlIHJlYWRhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1zZGF0YTwvY29kZT48ZHQ+PGNvZGU+LW1zZGF0YTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzZGF0YS0xNTM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXNkYXRhLTE1MzUiPjwvYT5EaXNhYmxlIChvciBlbmFibGUpIG9wdGltaXphdGlvbnMgdGhhdCB1c2UgdGhlIHNtYWxsIGRhdGEgc2VjdGlvbi4gIFRoaXMgbWF5CitiZSB1c2VmdWwgZm9yIHdvcmtpbmcgYXJvdW5kIG9wdGltaXplciBidWdzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jb25zdGFudC1ncDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNvbnN0YW50XzAwMmRncC0xNTM2Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgYSBzaW5nbGUgY29uc3RhbnQgZ2xvYmFsIHBvaW50ZXIgdmFsdWUuICBUaGlzIGlzCit1c2VmdWwgd2hlbiBjb21waWxpbmcga2VybmVsIGNvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWF1dG8tcGljPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYXV0b18wMDJkcGljLTE1MzciPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgaXMgc2VsZi1yZWxvY2F0YWJsZS4gIFRoaXMgaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNvbnN0YW50LWdwPC9zcGFuPjwvc2FtcD4uIAorVGhpcyBpcyB1c2VmdWwgd2hlbiBjb21waWxpbmcgZmlybXdhcmUgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taW5saW5lLWZsb2F0LWRpdmlkZS1taW4tbGF0ZW5jeTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlubGluZV8wMDJkZmxvYXRfMDAyZGRpdmlkZV8wMDJkbWluXzAwMmRsYXRlbmN5LTE1MzgiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciBpbmxpbmUgZGl2aWRlcyBvZiBmbG9hdGluZy1wb2ludCB2YWx1ZXMKK3VzaW5nIHRoZSBtaW5pbXVtIGxhdGVuY3kgYWxnb3JpdGhtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pbmxpbmUtZmxvYXQtZGl2aWRlLW1heC10aHJvdWdocHV0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW5saW5lXzAwMmRmbG9hdF8wMDJkZGl2aWRlXzAwMmRtYXhfMDAyZHRocm91Z2hwdXQtMTUzOSI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIGlubGluZSBkaXZpZGVzIG9mIGZsb2F0aW5nLXBvaW50IHZhbHVlcwordXNpbmcgdGhlIG1heGltdW0gdGhyb3VnaHB1dCBhbGdvcml0aG0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWlubGluZS1mbG9hdC1kaXZpZGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkaW5saW5lXzAwMmRmbG9hdF8wMDJkZGl2aWRlLTE1NDAiPjwvYT5EbyBub3QgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIGRpdmlkZXMgb2YgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pbmxpbmUtaW50LWRpdmlkZS1taW4tbGF0ZW5jeTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlubGluZV8wMDJkaW50XzAwMmRkaXZpZGVfMDAyZG1pbl8wMDJkbGF0ZW5jeS0xNTQxIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgaW5saW5lIGRpdmlkZXMgb2YgaW50ZWdlciB2YWx1ZXMKK3VzaW5nIHRoZSBtaW5pbXVtIGxhdGVuY3kgYWxnb3JpdGhtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pbmxpbmUtaW50LWRpdmlkZS1tYXgtdGhyb3VnaHB1dDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlubGluZV8wMDJkaW50XzAwMmRkaXZpZGVfMDAyZG1heF8wMDJkdGhyb3VnaHB1dC0xNTQyIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgaW5saW5lIGRpdmlkZXMgb2YgaW50ZWdlciB2YWx1ZXMKK3VzaW5nIHRoZSBtYXhpbXVtIHRocm91Z2hwdXQgYWxnb3JpdGhtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1pbmxpbmUtaW50LWRpdmlkZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRpbmxpbmVfMDAyZGludF8wMDJkZGl2aWRlLTE1NDMiPjwvYT5EbyBub3QgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIGRpdmlkZXMgb2YgaW50ZWdlciB2YWx1ZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlubGluZS1zcXJ0LW1pbi1sYXRlbmN5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW5saW5lXzAwMmRzcXJ0XzAwMmRtaW5fMDAyZGxhdGVuY3ktMTU0NCI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIGlubGluZSBzcXVhcmUgcm9vdHMKK3VzaW5nIHRoZSBtaW5pbXVtIGxhdGVuY3kgYWxnb3JpdGhtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pbmxpbmUtc3FydC1tYXgtdGhyb3VnaHB1dDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlubGluZV8wMDJkc3FydF8wMDJkbWF4XzAwMmR0aHJvdWdocHV0LTE1NDUiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciBpbmxpbmUgc3F1YXJlIHJvb3RzCit1c2luZyB0aGUgbWF4aW11bSB0aHJvdWdocHV0IGFsZ29yaXRobS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8taW5saW5lLXNxcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkaW5saW5lXzAwMmRzcXJ0LTE1NDYiPjwvYT5EbyBub3QgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIDxjb2RlPnNxcnQ8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mdXNlZC1tYWRkPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZ1c2VkLW1hZGQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1mdXNlZF8wMDJkbWFkZC0xNTQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRmdXNlZF8wMDJkbWFkZC0xNTQ4Ij48L2E+RG8gKGRvbid0KSBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyB0aGUgZnVzZWQgbXVsdGlwbHkvYWRkIG9yIG11bHRpcGx5L3N1YnRyYWN0CitpbnN0cnVjdGlvbnMuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlc2UgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1kd2FyZjItYXNtPC9jb2RlPjxkdD48Y29kZT4tbWR3YXJmMi1hc208L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZHdhcmYyXzAwMmRhc20tMTU0OSI+PC9hPjxhIG5hbWU9ImluZGV4LW1kd2FyZjJfMDAyZGFzbS0xNTUwIj48L2E+RG9uJ3QgKG9yIGRvKSBnZW5lcmF0ZSBhc3NlbWJsZXIgY29kZSBmb3IgdGhlIERXQVJGIDIgbGluZSBudW1iZXIgZGVidWdnaW5nCitpbmZvLiAgVGhpcyBtYXkgYmUgdXNlZnVsIHdoZW4gbm90IHVzaW5nIHRoZSBHTlUgYXNzZW1ibGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1lYXJseS1zdG9wLWJpdHM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZWFybHktc3RvcC1iaXRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZWFybHlfMDAyZHN0b3BfMDAyZGJpdHMtMTU1MSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZWFybHlfMDAyZHN0b3BfMDAyZGJpdHMtMTU1MiI+PC9hPkFsbG93IHN0b3AgYml0cyB0byBiZSBwbGFjZWQgZWFybGllciB0aGFuIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUKK2luc3RydWN0aW9uIHRoYXQgdHJpZ2dlcmVkIHRoZSBzdG9wIGJpdC4gIFRoaXMgY2FuIGltcHJvdmUgaW5zdHJ1Y3Rpb24KK3NjaGVkdWxpbmcsIGJ1dCBkb2VzIG5vdCBhbHdheXMgZG8gc28uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeGVkLXJhbmdlPTwvY29kZT48dmFyPnJlZ2lzdGVyLXJhbmdlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1maXhlZF8wMDJkcmFuZ2UtMTU1MyI+PC9hPkdlbmVyYXRlIGNvZGUgdHJlYXRpbmcgdGhlIGdpdmVuIHJlZ2lzdGVyIHJhbmdlIGFzIGZpeGVkIHJlZ2lzdGVycy4gCitBIGZpeGVkIHJlZ2lzdGVyIGlzIG9uZSB0aGF0IHRoZSByZWdpc3RlciBhbGxvY2F0b3IgY2Fubm90IHVzZS4gIFRoaXMgaXMKK3VzZWZ1bCB3aGVuIGNvbXBpbGluZyBrZXJuZWwgY29kZS4gIEEgcmVnaXN0ZXIgcmFuZ2UgaXMgc3BlY2lmaWVkIGFzCit0d28gcmVnaXN0ZXJzIHNlcGFyYXRlZCBieSBhIGRhc2guICBNdWx0aXBsZSByZWdpc3RlciByYW5nZXMgY2FuIGJlCitzcGVjaWZpZWQgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRscy1zaXplPTwvY29kZT48dmFyPnRscy1zaXplPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW10bHNfMDAyZHNpemUtMTU1NCI+PC9hPlNwZWNpZnkgYml0IHNpemUgb2YgaW1tZWRpYXRlIFRMUyBvZmZzZXRzLiAgVmFsaWQgdmFsdWVzIGFyZSAxNCwgMjIsIGFuZAorNjQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXR1bmU9PC9jb2RlPjx2YXI+Y3B1LXR5cGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXR1bmUtMTU1NSI+PC9hPlR1bmUgdGhlIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgZm9yIGEgcGFydGljdWxhciBDUFUsIFZhbGlkIHZhbHVlcyBhcmUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXRhbml1bTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pdGFuaXVtMTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tZXJjZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aXRhbml1bTI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tY2tpbmxleTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taWxwMzI8L2NvZGU+PGR0Pjxjb2RlPi1tbHA2NDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlscDMyLTE1NTYiPjwvYT48YSBuYW1lPSJpbmRleC1tbHA2NC0xNTU3Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSAzMi1iaXQgb3IgNjQtYml0IGVudmlyb25tZW50LiAKK1RoZSAzMi1iaXQgZW52aXJvbm1lbnQgc2V0cyBpbnQsIGxvbmcgYW5kIHBvaW50ZXIgdG8gMzIgYml0cy4gCitUaGUgNjQtYml0IGVudmlyb25tZW50IHNldHMgaW50IHRvIDMyIGJpdHMgYW5kIGxvbmcgYW5kIHBvaW50ZXIKK3RvIDY0IGJpdHMuICBUaGVzZSBhcmUgSFAtVVggc3BlY2lmaWMgZmxhZ3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXNjaGVkLWJyLWRhdGEtc3BlYzwvY29kZT48ZHQ+PGNvZGU+LW1zY2hlZC1ici1kYXRhLXNwZWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2NoZWRfMDAyZGJyXzAwMmRkYXRhXzAwMmRzcGVjLTE1NTgiPjwvYT48YSBuYW1lPSJpbmRleC1tc2NoZWRfMDAyZGJyXzAwMmRkYXRhXzAwMmRzcGVjLTE1NTkiPjwvYT4oRGlzL0VuKWFibGUgZGF0YSBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nIGJlZm9yZSByZWxvYWQuIAorVGhpcyByZXN1bHRzIGluIGdlbmVyYXRpb24gb2YgPGNvZGU+bGQuYTwvY29kZT4gaW5zdHJ1Y3Rpb25zIGFuZAordGhlIGNvcnJlc3BvbmRpbmcgY2hlY2sgaW5zdHJ1Y3Rpb25zICg8Y29kZT5sZC5jPC9jb2RlPiAvIDxjb2RlPmNoay5hPC9jb2RlPikuIAorVGhlIGRlZmF1bHQgaXMgJ2Rpc2FibGUnLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zY2hlZC1hci1kYXRhLXNwZWM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc2NoZWQtYXItZGF0YS1zcGVjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2NoZWRfMDAyZGFyXzAwMmRkYXRhXzAwMmRzcGVjLTE1NjAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHNjaGVkXzAwMmRhcl8wMDJkZGF0YV8wMDJkc3BlYy0xNTYxIj48L2E+KEVuL0RpcylhYmxlIGRhdGEgc3BlY3VsYXRpdmUgc2NoZWR1bGluZyBhZnRlciByZWxvYWQuIAorVGhpcyByZXN1bHRzIGluIGdlbmVyYXRpb24gb2YgPGNvZGU+bGQuYTwvY29kZT4gaW5zdHJ1Y3Rpb25zIGFuZAordGhlIGNvcnJlc3BvbmRpbmcgY2hlY2sgaW5zdHJ1Y3Rpb25zICg8Y29kZT5sZC5jPC9jb2RlPiAvIDxjb2RlPmNoay5hPC9jb2RlPikuIAorVGhlIGRlZmF1bHQgaXMgJ2VuYWJsZScuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXNjaGVkLWNvbnRyb2wtc3BlYzwvY29kZT48ZHQ+PGNvZGU+LW1zY2hlZC1jb250cm9sLXNwZWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2NoZWRfMDAyZGNvbnRyb2xfMDAyZHNwZWMtMTU2MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1zY2hlZF8wMDJkY29udHJvbF8wMDJkc3BlYy0xNTYzIj48L2E+KERpcy9FbilhYmxlIGNvbnRyb2wgc3BlY3VsYXRpdmUgc2NoZWR1bGluZy4gIFRoaXMgZmVhdHVyZSBpcworYXZhaWxhYmxlIG9ubHkgZHVyaW5nIHJlZ2lvbiBzY2hlZHVsaW5nIChpLmUuIGJlZm9yZSByZWxvYWQpLiAKK1RoaXMgcmVzdWx0cyBpbiBnZW5lcmF0aW9uIG9mIHRoZSA8Y29kZT5sZC5zPC9jb2RlPiBpbnN0cnVjdGlvbnMgYW5kCit0aGUgY29ycmVzcG9uZGluZyBjaGVjayBpbnN0cnVjdGlvbnMgPGNvZGU+Y2hrLnM8L2NvZGU+LiAKK1RoZSBkZWZhdWx0IGlzICdkaXNhYmxlJy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2NoZWQtYnItaW4tZGF0YS1zcGVjPC9jb2RlPjxkdD48Y29kZT4tbW5vLXNjaGVkLWJyLWluLWRhdGEtc3BlYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNjaGVkXzAwMmRicl8wMDJkaW5fMDAyZGRhdGFfMDAyZHNwZWMtMTU2NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2NoZWRfMDAyZGJyXzAwMmRpbl8wMDJkZGF0YV8wMDJkc3BlYy0xNTY1Ij48L2E+KEVuL0RpcylhYmxlIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcgb2YgdGhlIGluc3RydWN0aW9ucyB0aGF0CithcmUgZGVwZW5kZW50IG9uIHRoZSBkYXRhIHNwZWN1bGF0aXZlIGxvYWRzIGJlZm9yZSByZWxvYWQuIAorVGhpcyBpcyBlZmZlY3RpdmUgb25seSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc2NoZWQtYnItZGF0YS1zcGVjPC9zcGFuPjwvc2FtcD4gZW5hYmxlZC4gCitUaGUgZGVmYXVsdCBpcyAnZW5hYmxlJy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2NoZWQtYXItaW4tZGF0YS1zcGVjPC9jb2RlPjxkdD48Y29kZT4tbW5vLXNjaGVkLWFyLWluLWRhdGEtc3BlYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNjaGVkXzAwMmRhcl8wMDJkaW5fMDAyZGRhdGFfMDAyZHNwZWMtMTU2NiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2NoZWRfMDAyZGFyXzAwMmRpbl8wMDJkZGF0YV8wMDJkc3BlYy0xNTY3Ij48L2E+KEVuL0RpcylhYmxlIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcgb2YgdGhlIGluc3RydWN0aW9ucyB0aGF0CithcmUgZGVwZW5kZW50IG9uIHRoZSBkYXRhIHNwZWN1bGF0aXZlIGxvYWRzIGFmdGVyIHJlbG9hZC4gCitUaGlzIGlzIGVmZmVjdGl2ZSBvbmx5IHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zY2hlZC1hci1kYXRhLXNwZWM8L3NwYW4+PC9zYW1wPiBlbmFibGVkLiAKK1RoZSBkZWZhdWx0IGlzICdlbmFibGUnLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zY2hlZC1pbi1jb250cm9sLXNwZWM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc2NoZWQtaW4tY29udHJvbC1zcGVjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2NoZWRfMDAyZGluXzAwMmRjb250cm9sXzAwMmRzcGVjLTE1NjgiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHNjaGVkXzAwMmRpbl8wMDJkY29udHJvbF8wMDJkc3BlYy0xNTY5Ij48L2E+KEVuL0RpcylhYmxlIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcgb2YgdGhlIGluc3RydWN0aW9ucyB0aGF0CithcmUgZGVwZW5kZW50IG9uIHRoZSBjb250cm9sIHNwZWN1bGF0aXZlIGxvYWRzLiAKK1RoaXMgaXMgZWZmZWN0aXZlIG9ubHkgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNjaGVkLWNvbnRyb2wtc3BlYzwvc3Bhbj48L3NhbXA+IGVuYWJsZWQuIAorVGhlIGRlZmF1bHQgaXMgJ2VuYWJsZScuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXNjaGVkLXByZWZlci1ub24tZGF0YS1zcGVjLWluc25zPC9jb2RlPjxkdD48Y29kZT4tbXNjaGVkLXByZWZlci1ub24tZGF0YS1zcGVjLWluc25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHNjaGVkXzAwMmRwcmVmZXJfMDAyZG5vbl8wMDJkZGF0YV8wMDJkc3BlY18wMDJkaW5zbnMtMTU3MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1zY2hlZF8wMDJkcHJlZmVyXzAwMmRub25fMDAyZGRhdGFfMDAyZHNwZWNfMDAyZGluc25zLTE1NzEiPjwvYT5JZiBlbmFibGVkLCBkYXRhLXNwZWN1bGF0aXZlIGluc3RydWN0aW9ucyBhcmUgY2hvc2VuIGZvciBzY2hlZHVsZQorb25seSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgY2hvaWNlcyBhdCB0aGUgbW9tZW50LiAgVGhpcyBtYWtlcwordGhlIHVzZSBvZiB0aGUgZGF0YSBzcGVjdWxhdGlvbiBtdWNoIG1vcmUgY29uc2VydmF0aXZlLiAKK1RoZSBkZWZhdWx0IGlzICdkaXNhYmxlJy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tc2NoZWQtcHJlZmVyLW5vbi1jb250cm9sLXNwZWMtaW5zbnM8L2NvZGU+PGR0Pjxjb2RlPi1tc2NoZWQtcHJlZmVyLW5vbi1jb250cm9sLXNwZWMtaW5zbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2NoZWRfMDAyZHByZWZlcl8wMDJkbm9uXzAwMmRjb250cm9sXzAwMmRzcGVjXzAwMmRpbnNucy0xNTcyIj48L2E+PGEgbmFtZT0iaW5kZXgtbXNjaGVkXzAwMmRwcmVmZXJfMDAyZG5vbl8wMDJkY29udHJvbF8wMDJkc3BlY18wMDJkaW5zbnMtMTU3MyI+PC9hPklmIGVuYWJsZWQsIGNvbnRyb2wtc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb25zIGFyZSBjaG9zZW4gZm9yIHNjaGVkdWxlCitvbmx5IGlmIHRoZXJlIGFyZSBubyBvdGhlciBjaG9pY2VzIGF0IHRoZSBtb21lbnQuICBUaGlzIG1ha2VzCit0aGUgdXNlIG9mIHRoZSBjb250cm9sIHNwZWN1bGF0aW9uIG11Y2ggbW9yZSBjb25zZXJ2YXRpdmUuIAorVGhlIGRlZmF1bHQgaXMgJ2Rpc2FibGUnLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1zY2hlZC1jb3VudC1zcGVjLWluLWNyaXRpY2FsLXBhdGg8L2NvZGU+PGR0Pjxjb2RlPi1tc2NoZWQtY291bnQtc3BlYy1pbi1jcml0aWNhbC1wYXRoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHNjaGVkXzAwMmRjb3VudF8wMDJkc3BlY18wMDJkaW5fMDAyZGNyaXRpY2FsXzAwMmRwYXRoLTE1NzQiPjwvYT48YSBuYW1lPSJpbmRleC1tc2NoZWRfMDAyZGNvdW50XzAwMmRzcGVjXzAwMmRpbl8wMDJkY3JpdGljYWxfMDAyZHBhdGgtMTU3NSI+PC9hPklmIGVuYWJsZWQsIHNwZWN1bGF0aXZlIGRlcGVuZGVuY2llcyBhcmUgY29uc2lkZXJlZCBkdXJpbmcKK2NvbXB1dGF0aW9uIG9mIHRoZSBpbnN0cnVjdGlvbnMgcHJpb3JpdGllcy4gIFRoaXMgbWFrZXMgdGhlIHVzZSBvZiB0aGUKK3NwZWN1bGF0aW9uIGEgYml0IG1vcmUgY29uc2VydmF0aXZlLiAKK1RoZSBkZWZhdWx0IGlzICdkaXNhYmxlJy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2NoZWQtc3BlYy1sZGM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zY2hlZF8wMDJkc3BlY18wMDJkbGRjLTE1NzYiPjwvYT5Vc2UgYSBzaW1wbGUgZGF0YSBzcGVjdWxhdGlvbiBjaGVjay4gIFRoaXMgb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNjaGVkLWNvbnRyb2wtc3BlYy1sZGM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zY2hlZF8wMDJkc3BlY18wMDJkbGRjLTE1NzciPjwvYT5Vc2UgYSBzaW1wbGUgY2hlY2sgZm9yIGNvbnRyb2wgc3BlY3VsYXRpb24uICBUaGlzIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zY2hlZC1zdG9wLWJpdHMtYWZ0ZXItZXZlcnktY3ljbGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zY2hlZF8wMDJkc3RvcF8wMDJkYml0c18wMDJkYWZ0ZXJfMDAyZGV2ZXJ5XzAwMmRjeWNsZS0xNTc4Ij48L2E+UGxhY2UgYSBzdG9wIGJpdCBhZnRlciBldmVyeSBjeWNsZSB3aGVuIHNjaGVkdWxpbmcuICBUaGlzIG9wdGlvbiBpcyBvbgorYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2NoZWQtZnAtbWVtLWRlcHMtemVyby1jb3N0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2NoZWRfMDAyZGZwXzAwMmRtZW1fMDAyZGRlcHNfMDAyZHplcm9fMDAyZGNvc3QtMTU3OSI+PC9hPkFzc3VtZSB0aGF0IGZsb2F0aW5nLXBvaW50IHN0b3JlcyBhbmQgbG9hZHMgYXJlIG5vdCBsaWtlbHkgdG8gY2F1c2UgYSBjb25mbGljdAord2hlbiBwbGFjZWQgaW50byB0aGUgc2FtZSBpbnN0cnVjdGlvbiBncm91cC4gIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5CitkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zZWwtc2NoZWQtZG9udC1jaGVjay1jb250cm9sLXNwZWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zZWxfMDAyZHNjaGVkXzAwMmRkb250XzAwMmRjaGVja18wMDJkY29udHJvbF8wMDJkc3BlYy0xNTgwIj48L2E+R2VuZXJhdGUgY2hlY2tzIGZvciBjb250cm9sIHNwZWN1bGF0aW9uIGluIHNlbGVjdGl2ZSBzY2hlZHVsaW5nLiAKK1RoaXMgZmxhZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zY2hlZC1tYXgtbWVtb3J5LWluc25zPTwvY29kZT48dmFyPm1heC1pbnNuczwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tc2NoZWRfMDAyZG1heF8wMDJkbWVtb3J5XzAwMmRpbnNucy0xNTgxIj48L2E+TGltaXQgb24gdGhlIG51bWJlciBvZiBtZW1vcnkgaW5zbnMgcGVyIGluc3RydWN0aW9uIGdyb3VwLCBnaXZpbmcgbG93ZXIKK3ByaW9yaXR5IHRvIHN1YnNlcXVlbnQgbWVtb3J5IGluc25zIGF0dGVtcHRpbmcgdG8gc2NoZWR1bGUgaW4gdGhlIHNhbWUKK2luc3RydWN0aW9uIGdyb3VwLiBGcmVxdWVudGx5IHVzZWZ1bCB0byBwcmV2ZW50IGNhY2hlIGJhbmsgY29uZmxpY3RzLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNjaGVkLW1heC1tZW1vcnktaW5zbnMtaGFyZC1saW1pdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNjaGVkXzAwMmRtYXhfMDAyZG1lbW9yeV8wMDJkaW5zbnNfMDAyZGhhcmRfMDAyZGxpbWl0LTE1ODIiPjwvYT5NYWtlcyB0aGUgbGltaXQgc3BlY2lmaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPm1zY2hlZC1tYXgtbWVtb3J5LWluc25zPC9zcGFuPjwvc2FtcD4gYSBoYXJkIGxpbWl0LAorZGlzYWxsb3dpbmcgbW9yZSB0aGFuIHRoYXQgbnVtYmVyIGluIGFuIGluc3RydWN0aW9uIGdyb3VwLiAKK090aGVyd2lzZSwgdGhlIGxpbWl0IGlzICZsZHF1bztzb2Z0JnJkcXVvOywgbWVhbmluZyB0aGF0IG5vbi1tZW1vcnkgb3BlcmF0aW9ucworYXJlIHByZWZlcnJlZCB3aGVuIHRoZSBsaW1pdCBpcyByZWFjaGVkLCBidXQgbWVtb3J5IG9wZXJhdGlvbnMgbWF5IHN0aWxsCitiZSBzY2hlZHVsZWQuCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JZGVudGlmaWVycy1pbXBsZW1lbnRhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JZGVudGlmaWVycy1pbXBsZW1lbnRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMGExNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0lkZW50aWZpZXJzLWltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SWRlbnRpZmllcnMgaW1wbGVtZW50YXRpb24gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iIHRpdGxlPSJDIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRW52aXJvbm1lbnQtaW1wbGVtZW50YXRpb24uaHRtbCNFbnZpcm9ubWVudC1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkVudmlyb25tZW50IGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbi5odG1sI0NoYXJhY3RlcnMtaW1wbGVtZW50YXRpb24iIHRpdGxlPSJDaGFyYWN0ZXJzIGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklkZW50aWZpZXJzLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNoYXJhY3RlcnMtaW1wbGVtZW50YXRpb24uaHRtbCNDaGFyYWN0ZXJzLWltcGxlbWVudGF0aW9uIj5DaGFyYWN0ZXJzIGltcGxlbWVudGF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRW52aXJvbm1lbnQtaW1wbGVtZW50YXRpb24uaHRtbCNFbnZpcm9ubWVudC1pbXBsZW1lbnRhdGlvbiI+RW52aXJvbm1lbnQgaW1wbGVtZW50YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiI+QyBJbXBsZW1lbnRhdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMyBJZGVudGlmaWVyczwvaDM+CisKKyAgICAgPHVsPgorPGxpPjxjaXRlPldoaWNoIGFkZGl0aW9uYWwgbXVsdGlieXRlIGNoYXJhY3RlcnMgbWF5IGFwcGVhciBpbiBpZGVudGlmaWVycworYW5kIHRoZWlyIGNvcnJlc3BvbmRlbmNlIHRvIHVuaXZlcnNhbCBjaGFyYWN0ZXIgbmFtZXMgKEM5OSA2LjQuMikuPC9jaXRlPgorCisgICAgIDxwPlNlZSA8YSBocmVmPSIuLi9jcHAvSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IuaHRtbCNJbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvciI+SW1wbGVtZW50YXRpb24tZGVmaW5lZCBiZWhhdmlvcjwvYT4uCisKKyAgICAgPGxpPjxjaXRlPlRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgaW5pdGlhbCBjaGFyYWN0ZXJzIGluIGFuIGlkZW50aWZpZXIKKyhDOTAgNi4xLjIsIEM5MCBhbmQgQzk5IDUuMi40LjEsIEM5OSA2LjQuMikuPC9jaXRlPgorCisgICAgIDxwPkZvciBpbnRlcm5hbCBuYW1lcywgYWxsIGNoYXJhY3RlcnMgYXJlIHNpZ25pZmljYW50LiAgRm9yIGV4dGVybmFsIG5hbWVzLAordGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBjaGFyYWN0ZXJzIGFyZSBkZWZpbmVkIGJ5IHRoZSBsaW5rZXI7IGZvcgorYWxtb3N0IGFsbCB0YXJnZXRzLCBhbGwgY2hhcmFjdGVycyBhcmUgc2lnbmlmaWNhbnQuCisKKyAgICAgPGxpPjxjaXRlPldoZXRoZXIgY2FzZSBkaXN0aW5jdGlvbnMgYXJlIHNpZ25pZmljYW50IGluIGFuIGlkZW50aWZpZXIgd2l0aAorZXh0ZXJuYWwgbGlua2FnZSAoQzkwIDYuMS4yKS48L2NpdGU+CisKKyAgICAgPHA+VGhpcyBpcyBhIHByb3BlcnR5IG9mIHRoZSBsaW5rZXIuICBDOTkgcmVxdWlyZXMgdGhhdCBjYXNlIGRpc3RpbmN0aW9ucworYXJlIGFsd2F5cyBzaWduaWZpY2FudCBpbiBpZGVudGlmaWVycyB3aXRoIGV4dGVybmFsIGxpbmthZ2UgYW5kCitzeXN0ZW1zIHdpdGhvdXQgdGhpcyBwcm9wZXJ0eSBhcmUgbm90IHN1cHBvcnRlZCBieSBHQ0MuCisKKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0luY29tcGF0aWJpbGl0aWVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0luY29tcGF0aWJpbGl0aWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI0ODMzMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSW5jb21wYXRpYmlsaXRpZXMuaHRtbApAQCAtMCwwICsxLDI0OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5jb21wYXRpYmlsaXRpZXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiIHRpdGxlPSJUcm91YmxlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW50ZXJvcGVyYXRpb24uaHRtbCNJbnRlcm9wZXJhdGlvbiIgdGl0bGU9IkludGVyb3BlcmF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRml4ZWQtSGVhZGVycy5odG1sI0ZpeGVkLUhlYWRlcnMiIHRpdGxlPSJGaXhlZCBIZWFkZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkluY29tcGF0aWJpbGl0aWVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZpeGVkLUhlYWRlcnMuaHRtbCNGaXhlZC1IZWFkZXJzIj5GaXhlZCBIZWFkZXJzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW50ZXJvcGVyYXRpb24uaHRtbCNJbnRlcm9wZXJhdGlvbiI+SW50ZXJvcGVyYXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSI+VHJvdWJsZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjExLjMgSW5jb21wYXRpYmlsaXRpZXMgb2YgR0NDPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW5jb21wYXRpYmlsaXRpZXMtb2YtR0NDLTM1MzciPjwvYT48YSBuYW1lPSJpbmRleC10cmFkaXRpb25hbC0zNTM4Ij48L2E+CitUaGVyZSBhcmUgc2V2ZXJhbCBub3Rld29ydGh5IGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gR05VIEMgYW5kIEsmYW1wO1IKKyhub24tSVNPKSB2ZXJzaW9ucyBvZiBDLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtc3RyaW5nLWNvbnN0YW50cy0zNTM5Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1yZWFkXzAwMmRvbmx5LXN0cmluZ3MtMzU0MCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtc2hhcmVkLXN0cmluZ3MtMzU0MSI+PC9hPgorPHVsPjxsaT5HQ0Mgbm9ybWFsbHkgbWFrZXMgc3RyaW5nIGNvbnN0YW50cyByZWFkLW9ubHkuICBJZiBzZXZlcmFsCitpZGVudGljYWwtbG9va2luZyBzdHJpbmcgY29uc3RhbnRzIGFyZSB1c2VkLCBHQ0Mgc3RvcmVzIG9ubHkgb25lCitjb3B5IG9mIHRoZSBzdHJpbmcuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jta3RlbXBfMDA3ZF8wMDJjLWFuZC1jb25zdGFudC1zdHJpbmdzLTM1NDIiPjwvYT5PbmUgY29uc2VxdWVuY2UgaXMgdGhhdCB5b3UgY2Fubm90IGNhbGwgPGNvZGU+bWt0ZW1wPC9jb2RlPiB3aXRoIGEgc3RyaW5nCitjb25zdGFudCBhcmd1bWVudC4gIFRoZSBmdW5jdGlvbiA8Y29kZT5ta3RlbXA8L2NvZGU+IGFsd2F5cyBhbHRlcnMgdGhlCitzdHJpbmcgaXRzIGFyZ3VtZW50IHBvaW50cyB0by4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNzY2FuZl8wMDdkXzAwMmMtYW5kLWNvbnN0YW50LXN0cmluZ3MtMzU0MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZnNjYW5mXzAwN2RfMDAyYy1hbmQtY29uc3RhbnQtc3RyaW5ncy0zNTQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzY2FuZl8wMDdkXzAwMmMtYW5kLWNvbnN0YW50LXN0cmluZ3MtMzU0NSI+PC9hPkFub3RoZXIgY29uc2VxdWVuY2UgaXMgdGhhdCA8Y29kZT5zc2NhbmY8L2NvZGU+IGRvZXMgbm90IHdvcmsgb24gc29tZSB2ZXJ5CitvbGQgc3lzdGVtcyB3aGVuIHBhc3NlZCBhIHN0cmluZyBjb25zdGFudCBhcyBpdHMgZm9ybWF0IGNvbnRyb2wgc3RyaW5nCitvciBpbnB1dC4gIFRoaXMgaXMgYmVjYXVzZSA8Y29kZT5zc2NhbmY8L2NvZGU+IGluY29ycmVjdGx5IHRyaWVzIHRvIHdyaXRlCitpbnRvIHRoZSBzdHJpbmcgY29uc3RhbnQuICBMaWtld2lzZSA8Y29kZT5mc2NhbmY8L2NvZGU+IGFuZCA8Y29kZT5zY2FuZjwvY29kZT4uCisKKyAgICAgPHA+VGhlIHNvbHV0aW9uIHRvIHRoZXNlIHByb2JsZW1zIGlzIHRvIGNoYW5nZSB0aGUgcHJvZ3JhbSB0byB1c2UKKzxjb2RlPmNoYXI8L2NvZGU+LWFycmF5IHZhcmlhYmxlcyB3aXRoIGluaXRpYWxpemF0aW9uIHN0cmluZ3MgZm9yIHRoZXNlCitwdXJwb3NlcyBpbnN0ZWFkIG9mIHN0cmluZyBjb25zdGFudHMuCisKKyAgICAgPGxpPjxjb2RlPi0yMTQ3NDgzNjQ4PC9jb2RlPiBpcyBwb3NpdGl2ZS4KKworICAgICA8cD5UaGlzIGlzIGJlY2F1c2UgMjE0NzQ4MzY0OCBjYW5ub3QgZml0IGluIHRoZSB0eXBlIDxjb2RlPmludDwvY29kZT4sIHNvCisoZm9sbG93aW5nIHRoZSBJU08gQyBydWxlcykgaXRzIGRhdGEgdHlwZSBpcyA8Y29kZT51bnNpZ25lZCBsb25nIGludDwvY29kZT4uIAorTmVnYXRpbmcgdGhpcyB2YWx1ZSB5aWVsZHMgMjE0NzQ4MzY0OCBhZ2Fpbi4KKworICAgICA8bGk+R0NDIGRvZXMgbm90IHN1YnN0aXR1dGUgbWFjcm8gYXJndW1lbnRzIHdoZW4gdGhleSBhcHBlYXIgaW5zaWRlIG9mCitzdHJpbmcgY29uc3RhbnRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgbWFjcm8gaW4gR0NDCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2RlZmluZSBmb28oYSkgImEiCis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aWxsIHByb2R1Y2Ugb3V0cHV0IDxjb2RlPiJhIjwvY29kZT4gcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBhcmd1bWVudCA8dmFyPmE8L3Zhcj4gaXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZXRqbXBfMDA3ZC1pbmNvbXBhdGliaWxpdGllcy0zNTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nam1wXzAwN2QtaW5jb21wYXRpYmlsaXRpZXMtMzU0NyI+PC9hPjxsaT5XaGVuIHlvdSB1c2UgPGNvZGU+c2V0am1wPC9jb2RlPiBhbmQgPGNvZGU+bG9uZ2ptcDwvY29kZT4sIHRoZSBvbmx5IGF1dG9tYXRpYwordmFyaWFibGVzIGd1YXJhbnRlZWQgdG8gcmVtYWluIHZhbGlkIGFyZSB0aG9zZSBkZWNsYXJlZAorPGNvZGU+dm9sYXRpbGU8L2NvZGU+LiAgVGhpcyBpcyBhIGNvbnNlcXVlbmNlIG9mIGF1dG9tYXRpYyByZWdpc3RlcgorYWxsb2NhdGlvbi4gIENvbnNpZGVyIHRoaXMgZnVuY3Rpb246CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgam1wX2J1ZiBqOworICAgICAgICAgIAorICAgICAgICAgIGZvbyAoKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBhLCBiOworICAgICAgICAgIAorICAgICAgICAgICAgYSA9IGZ1bjEgKCk7CisgICAgICAgICAgICBpZiAoc2V0am1wIChqKSkKKyAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgCisgICAgICAgICAgICBhID0gZnVuMiAoKTsKKyAgICAgICAgICAgIC8qIDxjb2RlPmxvbmdqbXAgKGopPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+IG1heSBvY2N1ciBpbiA8L3NwYW4+PGNvZGU+ZnVuMzwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPi48L3NwYW4+ICovCisgICAgICAgICAgICByZXR1cm4gYSArIGZ1bjMgKCk7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwPkhlcmUgPGNvZGU+YTwvY29kZT4gbWF5IG9yIG1heSBub3QgYmUgcmVzdG9yZWQgdG8gaXRzIGZpcnN0IHZhbHVlIHdoZW4gdGhlCis8Y29kZT5sb25nam1wPC9jb2RlPiBvY2N1cnMuICBJZiA8Y29kZT5hPC9jb2RlPiBpcyBhbGxvY2F0ZWQgaW4gYSByZWdpc3RlciwgdGhlbgoraXRzIGZpcnN0IHZhbHVlIGlzIHJlc3RvcmVkOyBvdGhlcndpc2UsIGl0IGtlZXBzIHRoZSBsYXN0IHZhbHVlIHN0b3JlZAoraW4gaXQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtVy0zNTQ4Ij48L2E+SWYgeW91IHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVc8L3NwYW4+PC9zYW1wPiBvcHRpb24gd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBvcHRpb24sIHlvdSB3aWxsCitnZXQgYSB3YXJuaW5nIHdoZW4gR0NDIHRoaW5rcyBzdWNoIGEgcHJvYmxlbSBtaWdodCBiZSBwb3NzaWJsZS4KKworICAgICA8bGk+UHJvZ3JhbXMgdGhhdCB1c2UgcHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzIGluIHRoZSBtaWRkbGUgb2YgbWFjcm8KK2FyZ3VtZW50cyBkbyBub3Qgd29yayB3aXRoIEdDQy4gIEZvciBleGFtcGxlLCBhIHByb2dyYW0gbGlrZSB0aGlzCit3aWxsIG5vdCB3b3JrOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGZvb2JhciAoCisgICAgICAgICAgI2RlZmluZSBsdXNlcgorICAgICAgICAgICAgICAgICAgaGFjaykKKzwvcHJlPgorICAgICA8cD5JU08gQyBkb2VzIG5vdCBwZXJtaXQgc3VjaCBhIGNvbnN0cnVjdC4KKworICAgICA8bGk+SyZhbXA7UiBjb21waWxlcnMgYWxsb3cgY29tbWVudHMgdG8gY3Jvc3Mgb3ZlciBhbiBpbmNsdXNpb24gYm91bmRhcnkKKyhpLmUuIHN0YXJ0ZWQgaW4gYW4gaW5jbHVkZSBmaWxlIGFuZCBlbmRlZCBpbiB0aGUgaW5jbHVkaW5nIGZpbGUpLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWV4dGVybmFsLWRlY2xhcmF0aW9uLXNjb3BlLTM1NDkiPjwvYT48YSBuYW1lPSJpbmRleC1zY29wZS1vZi1leHRlcm5hbC1kZWNsYXJhdGlvbnMtMzU1MCI+PC9hPjxhIG5hbWU9ImluZGV4LWRlY2xhcmF0aW9uLXNjb3BlLTM1NTEiPjwvYT48bGk+RGVjbGFyYXRpb25zIG9mIGV4dGVybmFsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHdpdGhpbiBhIGJsb2NrIGFwcGx5Citvbmx5IHRvIHRoZSBibG9jayBjb250YWluaW5nIHRoZSBkZWNsYXJhdGlvbi4gIEluIG90aGVyIHdvcmRzLCB0aGV5CitoYXZlIHRoZSBzYW1lIHNjb3BlIGFzIGFueSBvdGhlciBkZWNsYXJhdGlvbiBpbiB0aGUgc2FtZSBwbGFjZS4KKworICAgICA8cD5JbiBzb21lIG90aGVyIEMgY29tcGlsZXJzLCBhbiA8Y29kZT5leHRlcm48L2NvZGU+IGRlY2xhcmF0aW9uIGFmZmVjdHMgYWxsIHRoZQorcmVzdCBvZiB0aGUgZmlsZSBldmVuIGlmIGl0IGhhcHBlbnMgd2l0aGluIGEgYmxvY2suCisKKyAgICAgPGxpPkluIHRyYWRpdGlvbmFsIEMsIHlvdSBjYW4gY29tYmluZSA8Y29kZT5sb25nPC9jb2RlPiwgZXRjLiwgd2l0aCBhIHR5cGVkZWYgbmFtZSwKK2FzIHNob3duIGhlcmU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdHlwZWRlZiBpbnQgZm9vOworICAgICAgICAgIHR5cGVkZWYgbG9uZyBmb28gYmFyOworPC9wcmU+CisgICAgIDxwPkluIElTTyBDLCB0aGlzIGlzIG5vdCBhbGxvd2VkOiA8Y29kZT5sb25nPC9jb2RlPiBhbmQgb3RoZXIgdHlwZSBtb2RpZmllcnMKK3JlcXVpcmUgYW4gZXhwbGljaXQgPGNvZGU+aW50PC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC10eXBlZGVmLW5hbWVzLWFzLWZ1bmN0aW9uLXBhcmFtZXRlcnMtMzU1MiI+PC9hPjxsaT5QQ0MgYWxsb3dzIHR5cGVkZWYgbmFtZXMgdG8gYmUgdXNlZCBhcyBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorCisgICAgIDxsaT5UcmFkaXRpb25hbCBDIGFsbG93cyB0aGUgZm9sbG93aW5nIGVycm9uZW91cyBwYWlyIG9mIGRlY2xhcmF0aW9ucyB0bworYXBwZWFyIHRvZ2V0aGVyIGluIGEgZ2l2ZW4gc2NvcGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdHlwZWRlZiBpbnQgZm9vOworICAgICAgICAgIHR5cGVkZWYgZm9vIGZvbzsKKzwvcHJlPgorICAgICA8bGk+R0NDIHRyZWF0cyBhbGwgY2hhcmFjdGVycyBvZiBpZGVudGlmaWVycyBhcyBzaWduaWZpY2FudC4gIEFjY29yZGluZyB0bworSyZhbXA7Ui0xICgyLjIpLCAmbGRxdW87Tm8gbW9yZSB0aGFuIHRoZSBmaXJzdCBlaWdodCBjaGFyYWN0ZXJzIGFyZSBzaWduaWZpY2FudCwKK2FsdGhvdWdoIG1vcmUgbWF5IGJlIHVzZWQuJnJkcXVvOy4gIEFsc28gYWNjb3JkaW5nIHRvIEsmYW1wO1ItMSAoMi4yKSwgJmxkcXVvO0FuCitpZGVudGlmaWVyIGlzIGEgc2VxdWVuY2Ugb2YgbGV0dGVycyBhbmQgZGlnaXRzOyB0aGUgZmlyc3QgY2hhcmFjdGVyIG11c3QKK2JlIGEgbGV0dGVyLiAgVGhlIHVuZGVyc2NvcmUgXyBjb3VudHMgYXMgYSBsZXR0ZXIuJnJkcXVvOywgYnV0IEdDQyBhbHNvCithbGxvd3MgZG9sbGFyIHNpZ25zIGluIGlkZW50aWZpZXJzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXdoaXRlc3BhY2UtMzU1MyI+PC9hPjxsaT5QQ0MgYWxsb3dzIHdoaXRlc3BhY2UgaW4gdGhlIG1pZGRsZSBvZiBjb21wb3VuZCBhc3NpZ25tZW50IG9wZXJhdG9ycworc3VjaCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPis9PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgR0NDLCBmb2xsb3dpbmcgdGhlIElTTyBzdGFuZGFyZCwgZG9lcyBub3QKK2FsbG93IHRoaXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtYXBvc3Ryb3BoZXMtMzU1NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjdfMDA3ZC0zNTU1Ij48L2E+PGxpPkdDQyBjb21wbGFpbnMgYWJvdXQgdW50ZXJtaW5hdGVkIGNoYXJhY3RlciBjb25zdGFudHMgaW5zaWRlIG9mCitwcmVwcm9jZXNzaW5nIGNvbmRpdGlvbmFscyB0aGF0IGZhaWwuICBTb21lIHByb2dyYW1zIGhhdmUgRW5nbGlzaAorY29tbWVudHMgZW5jbG9zZWQgaW4gY29uZGl0aW9uYWxzIHRoYXQgYXJlIGd1YXJhbnRlZWQgdG8gZmFpbDsgaWYgdGhlc2UKK2NvbW1lbnRzIGNvbnRhaW4gYXBvc3Ryb3BoZXMsIEdDQyB3aWxsIHByb2JhYmx5IHJlcG9ydCBhbiBlcnJvci4gIEZvcgorZXhhbXBsZSwgdGhpcyBjb2RlIHdvdWxkIHByb2R1Y2UgYW4gZXJyb3I6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2lmIDAKKyAgICAgICAgICBZb3UgY2FuJ3QgZXhwZWN0IHRoaXMgdG8gd29yay4KKyAgICAgICAgICAjZW5kaWYKKzwvcHJlPgorICAgICA8cD5UaGUgYmVzdCBzb2x1dGlvbiB0byBzdWNoIGEgcHJvYmxlbSBpcyB0byBwdXQgdGhlIHRleHQgaW50byBhbiBhY3R1YWwKK0MgY29tbWVudCBkZWxpbWl0ZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vKi4uLiovPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5NYW55IHVzZXIgcHJvZ3JhbXMgY29udGFpbiB0aGUgZGVjbGFyYXRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb25nIHRpbWUgKCk7PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSW4gdGhlCitwYXN0LCB0aGUgc3lzdGVtIGhlYWRlciBmaWxlcyBvbiBtYW55IHN5c3RlbXMgZGlkIG5vdCBhY3R1YWxseSBkZWNsYXJlCis8Y29kZT50aW1lPC9jb2RlPiwgc28gaXQgZGlkIG5vdCBtYXR0ZXIgd2hhdCB0eXBlIHlvdXIgcHJvZ3JhbSBkZWNsYXJlZCBpdCB0bworcmV0dXJuLiAgQnV0IGluIHN5c3RlbXMgd2l0aCBJU08gQyBoZWFkZXJzLCA8Y29kZT50aW1lPC9jb2RlPiBpcyBkZWNsYXJlZCB0bworcmV0dXJuIDxjb2RlPnRpbWVfdDwvY29kZT4sIGFuZCBpZiB0aGF0IGlzIG5vdCB0aGUgc2FtZSBhcyA8Y29kZT5sb25nPC9jb2RlPiwgdGhlbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb25nIHRpbWUgKCk7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGVycm9uZW91cy4KKworICAgICA8cD5UaGUgc29sdXRpb24gaXMgdG8gY2hhbmdlIHlvdXIgcHJvZ3JhbSB0byB1c2UgYXBwcm9wcmlhdGUgc3lzdGVtIGhlYWRlcnMKKyg8Y29kZT4mbHQ7dGltZS5oJmd0OzwvY29kZT4gb24gc3lzdGVtcyB3aXRoIElTTyBDIGhlYWRlcnMpIGFuZCBub3QgdG8gZGVjbGFyZQorPGNvZGU+dGltZTwvY29kZT4gaWYgdGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMgZGVjbGFyZSBpdCwgb3IgZmFpbGluZyB0aGF0IHRvCit1c2UgPGNvZGU+dGltZV90PC9jb2RlPiBhcyB0aGUgcmV0dXJuIHR5cGUgb2YgPGNvZGU+dGltZTwvY29kZT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbG9hdF8wMDdkLWFzLWZ1bmN0aW9uLXZhbHVlLXR5cGUtMzU1NiI+PC9hPjxsaT5XaGVuIGNvbXBpbGluZyBmdW5jdGlvbnMgdGhhdCByZXR1cm4gPGNvZGU+ZmxvYXQ8L2NvZGU+LCBQQ0MgY29udmVydHMgaXQgdG8KK2EgZG91YmxlLiAgR0NDIGFjdHVhbGx5IHJldHVybnMgYSA8Y29kZT5mbG9hdDwvY29kZT4uICBJZiB5b3UgYXJlIGNvbmNlcm5lZAord2l0aCBQQ0MgY29tcGF0aWJpbGl0eSwgeW91IHNob3VsZCBkZWNsYXJlIHlvdXIgZnVuY3Rpb25zIHRvIHJldHVybgorPGNvZGU+ZG91YmxlPC9jb2RlPjsgeW91IG1pZ2h0IGFzIHdlbGwgc2F5IHdoYXQgeW91IG1lYW4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtc3RydWN0dXJlcy0zNTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtdW5pb25zLTM1NTgiPjwvYT48bGk+V2hlbiBjb21waWxpbmcgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHN0cnVjdHVyZXMgb3IgdW5pb25zLCBHQ0MKK291dHB1dCBjb2RlIG5vcm1hbGx5IHVzZXMgYSBtZXRob2QgZGlmZmVyZW50IGZyb20gdGhhdCB1c2VkIG9uIG1vc3QKK3ZlcnNpb25zIG9mIFVuaXguICBBcyBhIHJlc3VsdCwgY29kZSBjb21waWxlZCB3aXRoIEdDQyBjYW5ub3QgY2FsbAorYSBzdHJ1Y3R1cmUtcmV0dXJuaW5nIGZ1bmN0aW9uIGNvbXBpbGVkIHdpdGggUENDLCBhbmQgdmljZSB2ZXJzYS4KKworICAgICA8cD5UaGUgbWV0aG9kIHVzZWQgYnkgR0NDIGlzIGFzIGZvbGxvd3M6IGEgc3RydWN0dXJlIG9yIHVuaW9uIHdoaWNoIGlzCisxLCAyLCA0IG9yIDggYnl0ZXMgbG9uZyBpcyByZXR1cm5lZCBsaWtlIGEgc2NhbGFyLiAgQSBzdHJ1Y3R1cmUgb3IgdW5pb24KK3dpdGggYW55IG90aGVyIHNpemUgaXMgc3RvcmVkIGludG8gYW4gYWRkcmVzcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyCisodXN1YWxseSBpbiBhIHNwZWNpYWwsIGZpeGVkIHJlZ2lzdGVyLCBidXQgb24gc29tZSBtYWNoaW5lcyBpdCBpcyBwYXNzZWQKK29uIHRoZSBzdGFjaykuICBUaGUgdGFyZ2V0IGhvb2sgPGNvZGU+VEFSR0VUX1NUUlVDVF9WQUxVRV9SVFg8L2NvZGU+Cit0ZWxscyBHQ0Mgd2hlcmUgdG8gcGFzcyB0aGlzIGFkZHJlc3MuCisKKyAgICAgPHA+QnkgY29udHJhc3QsIFBDQyBvbiBtb3N0IHRhcmdldCBtYWNoaW5lcyByZXR1cm5zIHN0cnVjdHVyZXMgYW5kIHVuaW9ucworb2YgYW55IHNpemUgYnkgY29weWluZyB0aGUgZGF0YSBpbnRvIGFuIGFyZWEgb2Ygc3RhdGljIHN0b3JhZ2UsIGFuZCB0aGVuCityZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzdG9yYWdlIGFzIGlmIGl0IHdlcmUgYSBwb2ludGVyIHZhbHVlLiAKK1RoZSBjYWxsZXIgbXVzdCBjb3B5IHRoZSBkYXRhIGZyb20gdGhhdCBtZW1vcnkgYXJlYSB0byB0aGUgcGxhY2Ugd2hlcmUKK3RoZSB2YWx1ZSBpcyB3YW50ZWQuICBHQ0MgZG9lcyBub3QgdXNlIHRoaXMgbWV0aG9kIGJlY2F1c2UgaXQgaXMKK3Nsb3dlciBhbmQgbm9ucmVlbnRyYW50LgorCisgICAgIDxwPk9uIHNvbWUgbmV3ZXIgbWFjaGluZXMsIFBDQyB1c2VzIGEgcmVlbnRyYW50IGNvbnZlbnRpb24gZm9yIGFsbAorc3RydWN0dXJlIGFuZCB1bmlvbiByZXR1cm5pbmcuICBHQ0Mgb24gbW9zdCBvZiB0aGVzZSBtYWNoaW5lcyB1c2VzIGEKK2NvbXBhdGlibGUgY29udmVudGlvbiB3aGVuIHJldHVybmluZyBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgaW4gbWVtb3J5LAorYnV0IHN0aWxsIHJldHVybnMgc21hbGwgc3RydWN0dXJlcyBhbmQgdW5pb25zIGluIHJlZ2lzdGVycy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1mcGNjXzAwMmRzdHJ1Y3RfMDAyZHJldHVybi0zNTU5Ij48L2E+WW91IGNhbiB0ZWxsIEdDQyB0byB1c2UgYSBjb21wYXRpYmxlIGNvbnZlbnRpb24gZm9yIGFsbCBzdHJ1Y3R1cmUgYW5kCit1bmlvbiByZXR1cm5pbmcgd2l0aCB0aGUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGNjLXN0cnVjdC1yZXR1cm48L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1wcmVwcm9jZXNzaW5nLXRva2Vucy0zNTYwIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZy1udW1iZXJzLTM1NjEiPjwvYT48bGk+R0NDIGNvbXBsYWlucyBhYm91dCBwcm9ncmFtIGZyYWdtZW50cyBzdWNoIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MHg3NGFlLTB4NDAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOword2hpY2ggYXBwZWFyIHRvIGJlIHR3byBoZXhhZGVjaW1hbCBjb25zdGFudHMgc2VwYXJhdGVkIGJ5IHRoZSBtaW51cworb3BlcmF0b3IuICBBY3R1YWxseSwgdGhpcyBzdHJpbmcgaXMgYSBzaW5nbGUgPGRmbj5wcmVwcm9jZXNzaW5nIHRva2VuPC9kZm4+LiAKK0VhY2ggc3VjaCB0b2tlbiBtdXN0IGNvcnJlc3BvbmQgdG8gb25lIHRva2VuIGluIEMuICBTaW5jZSB0aGlzIGRvZXMgbm90LAorR0NDIHByaW50cyBhbiBlcnJvciBtZXNzYWdlLiAgQWx0aG91Z2ggaXQgbWF5IGFwcGVhciBvYnZpb3VzIHRoYXQgd2hhdAoraXMgbWVhbnQgaXMgYW4gb3BlcmF0b3IgYW5kIHR3byB2YWx1ZXMsIHRoZSBJU08gQyBzdGFuZGFyZCBzcGVjaWZpY2FsbHkKK3JlcXVpcmVzIHRoYXQgdGhpcyBiZSB0cmVhdGVkIGFzIGVycm9uZW91cy4KKworICAgICA8cD5BIDxkZm4+cHJlcHJvY2Vzc2luZyB0b2tlbjwvZGZuPiBpcyBhIDxkZm4+cHJlcHJvY2Vzc2luZyBudW1iZXI8L2Rmbj4gaWYgaXQKK2JlZ2lucyB3aXRoIGEgZGlnaXQgYW5kIGlzIGZvbGxvd2VkIGJ5IGxldHRlcnMsIHVuZGVyc2NvcmVzLCBkaWdpdHMsCitwZXJpb2RzIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmUrPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmUtPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkUrPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkUtPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnArPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wLTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QKzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QLTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIgc2VxdWVuY2VzLiAgKEluIHN0cmljdCBDOTAKK21vZGUsIHRoZSBzZXF1ZW5jZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wKzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wLTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QKzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QLTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW5ub3QKK2FwcGVhciBpbiBwcmVwcm9jZXNzaW5nIG51bWJlcnMuKQorCisgICAgIDxwPlRvIG1ha2UgdGhlIGFib3ZlIHByb2dyYW0gZnJhZ21lbnQgdmFsaWQsIHBsYWNlIHdoaXRlc3BhY2UgaW4gZnJvbnQgb2YKK3RoZSBtaW51cyBzaWduLiAgVGhpcyB3aGl0ZXNwYWNlIHdpbGwgZW5kIHRoZSBwcmVwcm9jZXNzaW5nIG51bWJlci4gCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbmNvbXBsZXRlLUVudW1zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0luY29tcGxldGUtRW51bXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQ2Y2FmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbmNvbXBsZXRlLUVudW1zLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5jb21wbGV0ZSBFbnVtcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBbHRlcm5hdGUtS2V5d29yZHMuaHRtbCNBbHRlcm5hdGUtS2V5d29yZHMiIHRpdGxlPSJBbHRlcm5hdGUgS2V5d29yZHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGdW5jdGlvbi1OYW1lcy5odG1sI0Z1bmN0aW9uLU5hbWVzIiB0aXRsZT0iRnVuY3Rpb24gTmFtZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW5jb21wbGV0ZS1FbnVtcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGdW5jdGlvbi1OYW1lcy5odG1sI0Z1bmN0aW9uLU5hbWVzIj5GdW5jdGlvbiBOYW1lczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFsdGVybmF0ZS1LZXl3b3Jkcy5odG1sI0FsdGVybmF0ZS1LZXl3b3JkcyI+QWx0ZXJuYXRlIEtleXdvcmRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjQ2IEluY29tcGxldGUgPGNvZGU+ZW51bTwvY29kZT4gVHlwZXM8L2gzPgorCis8cD5Zb3UgY2FuIGRlZmluZSBhbiA8Y29kZT5lbnVtPC9jb2RlPiB0YWcgd2l0aG91dCBzcGVjaWZ5aW5nIGl0cyBwb3NzaWJsZSB2YWx1ZXMuIAorVGhpcyByZXN1bHRzIGluIGFuIGluY29tcGxldGUgdHlwZSwgbXVjaCBsaWtlIHdoYXQgeW91IGdldCBpZiB5b3Ugd3JpdGUKKzxjb2RlPnN0cnVjdCBmb288L2NvZGU+IHdpdGhvdXQgZGVzY3JpYmluZyB0aGUgZWxlbWVudHMuICBBIGxhdGVyIGRlY2xhcmF0aW9uCit0aGF0IGRvZXMgc3BlY2lmeSB0aGUgcG9zc2libGUgdmFsdWVzIGNvbXBsZXRlcyB0aGUgdHlwZS4KKworIDxwPllvdSBjYW4ndCBhbGxvY2F0ZSB2YXJpYWJsZXMgb3Igc3RvcmFnZSB1c2luZyB0aGUgdHlwZSB3aGlsZSBpdCBpcworaW5jb21wbGV0ZS4gIEhvd2V2ZXIsIHlvdSBjYW4gd29yayB3aXRoIHBvaW50ZXJzIHRvIHRoYXQgdHlwZS4KKworIDxwPlRoaXMgZXh0ZW5zaW9uIG1heSBub3QgYmUgdmVyeSB1c2VmdWwsIGJ1dCBpdCBtYWtlcyB0aGUgaGFuZGxpbmcgb2YKKzxjb2RlPmVudW08L2NvZGU+IG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgPGNvZGU+c3RydWN0PC9jb2RlPiBhbmQgPGNvZGU+dW5pb248L2NvZGU+CithcmUgaGFuZGxlZC4KKworIDxwPlRoaXMgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR05VIEMrKy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSW5pdGlhbGl6ZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0luaXRpYWxpemVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkY2RiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0luaXRpYWxpemVycy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkluaXRpYWxpemVycyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQb2ludGVyLUFyaXRoLmh0bWwjUG9pbnRlci1Bcml0aCIgdGl0bGU9IlBvaW50ZXIgQXJpdGgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb21wb3VuZC1MaXRlcmFscy5odG1sI0NvbXBvdW5kLUxpdGVyYWxzIiB0aXRsZT0iQ29tcG91bmQgTGl0ZXJhbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW5pdGlhbGl6ZXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvbXBvdW5kLUxpdGVyYWxzLmh0bWwjQ29tcG91bmQtTGl0ZXJhbHMiPkNvbXBvdW5kIExpdGVyYWxzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUG9pbnRlci1Bcml0aC5odG1sI1BvaW50ZXItQXJpdGgiPlBvaW50ZXIgQXJpdGg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMjQgTm9uLUNvbnN0YW50IEluaXRpYWxpemVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWluaXRpYWxpemVyc18wMDJjLW5vbl8wMDJkY29uc3RhbnQtMjU0NCI+PC9hPjxhIG5hbWU9ImluZGV4LW5vbl8wMDJkY29uc3RhbnQtaW5pdGlhbGl6ZXJzLTI1NDUiPjwvYT4KK0FzIGluIHN0YW5kYXJkIEMrKyBhbmQgSVNPIEM5OSwgdGhlIGVsZW1lbnRzIG9mIGFuIGFnZ3JlZ2F0ZSBpbml0aWFsaXplciBmb3IgYW4KK2F1dG9tYXRpYyB2YXJpYWJsZSBhcmUgbm90IHJlcXVpcmVkIHRvIGJlIGNvbnN0YW50IGV4cHJlc3Npb25zIGluIEdOVSBDLiAKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhbiBpbml0aWFsaXplciB3aXRoIHJ1bi10aW1lIHZhcnlpbmcgZWxlbWVudHM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBmb28gKGZsb2F0IGYsIGZsb2F0IGcpCisgICAgIHsKKyAgICAgICBmbG9hdCBiZWF0X2ZyZXFzWzJdID0geyBmLWcsIGYrZyB9OworICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICB9Cis8L3ByZT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0lubGluZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbmxpbmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGI3MmIyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbmxpbmUuaHRtbApAQCAtMCwwICsxLDE2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5saW5lIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFsaWdubWVudC5odG1sI0FsaWdubWVudCIgdGl0bGU9IkFsaWdubWVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZvbGF0aWxlcy5odG1sI1ZvbGF0aWxlcyIgdGl0bGU9IlZvbGF0aWxlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbmxpbmUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVm9sYXRpbGVzLmh0bWwjVm9sYXRpbGVzIj5Wb2xhdGlsZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBbGlnbm1lbnQuaHRtbCNBbGlnbm1lbnQiPkFsaWdubWVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4zOSBBbiBJbmxpbmUgRnVuY3Rpb24gaXMgQXMgRmFzdCBBcyBhIE1hY3JvPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW5saW5lLWZ1bmN0aW9ucy0yNzg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW50ZWdyYXRpbmctZnVuY3Rpb24tY29kZS0yNzg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3Blbi1jb2RpbmctMjc4OSI+PC9hPjxhIG5hbWU9ImluZGV4LW1hY3Jvc18wMDJjLWlubGluZS1hbHRlcm5hdGl2ZS0yNzkwIj48L2E+CitCeSBkZWNsYXJpbmcgYSBmdW5jdGlvbiBpbmxpbmUsIHlvdSBjYW4gZGlyZWN0IEdDQyB0byBtYWtlCitjYWxscyB0byB0aGF0IGZ1bmN0aW9uIGZhc3Rlci4gIE9uZSB3YXkgR0NDIGNhbiBhY2hpZXZlIHRoaXMgaXMgdG8KK2ludGVncmF0ZSB0aGF0IGZ1bmN0aW9uJ3MgY29kZSBpbnRvIHRoZSBjb2RlIGZvciBpdHMgY2FsbGVycy4gIFRoaXMKK21ha2VzIGV4ZWN1dGlvbiBmYXN0ZXIgYnkgZWxpbWluYXRpbmcgdGhlIGZ1bmN0aW9uLWNhbGwgb3ZlcmhlYWQ7IGluCithZGRpdGlvbiwgaWYgYW55IG9mIHRoZSBhY3R1YWwgYXJndW1lbnQgdmFsdWVzIGFyZSBjb25zdGFudCwgdGhlaXIKK2tub3duIHZhbHVlcyBtYXkgcGVybWl0IHNpbXBsaWZpY2F0aW9ucyBhdCBjb21waWxlIHRpbWUgc28gdGhhdCBub3QKK2FsbCBvZiB0aGUgaW5saW5lIGZ1bmN0aW9uJ3MgY29kZSBuZWVkcyB0byBiZSBpbmNsdWRlZC4gIFRoZSBlZmZlY3Qgb24KK2NvZGUgc2l6ZSBpcyBsZXNzIHByZWRpY3RhYmxlOyBvYmplY3QgY29kZSBtYXkgYmUgbGFyZ2VyIG9yIHNtYWxsZXIKK3dpdGggZnVuY3Rpb24gaW5saW5pbmcsIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBjYXNlLiAgWW91IGNhbgorYWxzbyBkaXJlY3QgR0NDIHRvIHRyeSB0byBpbnRlZ3JhdGUgYWxsICZsZHF1bztzaW1wbGUgZW5vdWdoJnJkcXVvOyBmdW5jdGlvbnMKK2ludG8gdGhlaXIgY2FsbGVycyB3aXRoIHRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbmxpbmUtZnVuY3Rpb25zPC9zcGFuPjwvc2FtcD4uCisKKyA8cD5HQ0MgaW1wbGVtZW50cyB0aHJlZSBkaWZmZXJlbnQgc2VtYW50aWNzIG9mIGRlY2xhcmluZyBhIGZ1bmN0aW9uCitpbmxpbmUuICBPbmUgaXMgYXZhaWxhYmxlIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnU4OTwvc3Bhbj48L3NhbXA+IG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmdudTg5LWlubGluZTwvc3Bhbj48L3NhbXA+IG9yIHdoZW4gPGNvZGU+Z251X2lubGluZTwvY29kZT4gYXR0cmlidXRlIGlzIHByZXNlbnQKK29uIGFsbCBpbmxpbmUgZGVjbGFyYXRpb25zLCBhbm90aGVyIHdoZW4KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Yzk5PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzExPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWdudTk5PC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnUxMTwvc3Bhbj48L3NhbXA+Cisod2l0aG91dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmdudTg5LWlubGluZTwvc3Bhbj48L3NhbXA+KSwgYW5kIHRoZSB0aGlyZAoraXMgdXNlZCB3aGVuIGNvbXBpbGluZyBDKysuCisKKyA8cD5UbyBkZWNsYXJlIGEgZnVuY3Rpb24gaW5saW5lLCB1c2UgdGhlIDxjb2RlPmlubGluZTwvY29kZT4ga2V5d29yZCBpbiBpdHMKK2RlY2xhcmF0aW9uLCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdGF0aWMgaW5saW5lIGludAorICAgICBpbmMgKGludCAqYSkKKyAgICAgeworICAgICAgIHJldHVybiAoKmEpKys7CisgICAgIH0KKzwvcHJlPgorIDxwPklmIHlvdSBhcmUgd3JpdGluZyBhIGhlYWRlciBmaWxlIHRvIGJlIGluY2x1ZGVkIGluIElTTyBDOTAgcHJvZ3JhbXMsIHdyaXRlCis8Y29kZT5fX2lubGluZV9fPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPmlubGluZTwvY29kZT4uICBTZWUgPGEgaHJlZj0iQWx0ZXJuYXRlLUtleXdvcmRzLmh0bWwjQWx0ZXJuYXRlLUtleXdvcmRzIj5BbHRlcm5hdGUgS2V5d29yZHM8L2E+LgorCisgPHA+VGhlIHRocmVlIHR5cGVzIG9mIGlubGluaW5nIGJlaGF2ZSBzaW1pbGFybHkgaW4gdHdvIGltcG9ydGFudCBjYXNlczoKK3doZW4gdGhlIDxjb2RlPmlubGluZTwvY29kZT4ga2V5d29yZCBpcyB1c2VkIG9uIGEgPGNvZGU+c3RhdGljPC9jb2RlPiBmdW5jdGlvbiwKK2xpa2UgdGhlIGV4YW1wbGUgYWJvdmUsIGFuZCB3aGVuIGEgZnVuY3Rpb24gaXMgZmlyc3QgZGVjbGFyZWQgd2l0aG91dAordXNpbmcgdGhlIDxjb2RlPmlubGluZTwvY29kZT4ga2V5d29yZCBhbmQgdGhlbiBpcyBkZWZpbmVkIHdpdGgKKzxjb2RlPmlubGluZTwvY29kZT4sIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGV4dGVybiBpbnQgaW5jIChpbnQgKmEpOworICAgICBpbmxpbmUgaW50CisgICAgIGluYyAoaW50ICphKQorICAgICB7CisgICAgICAgcmV0dXJuICgqYSkrKzsKKyAgICAgfQorPC9wcmU+CisgPHA+SW4gYm90aCBvZiB0aGVzZSBjb21tb24gY2FzZXMsIHRoZSBwcm9ncmFtIGJlaGF2ZXMgdGhlIHNhbWUgYXMgaWYgeW91CitoYWQgbm90IHVzZWQgdGhlIDxjb2RlPmlubGluZTwvY29kZT4ga2V5d29yZCwgZXhjZXB0IGZvciBpdHMgc3BlZWQuCisKKyA8cD48YSBuYW1lPSJpbmRleC1pbmxpbmUtZnVuY3Rpb25zXzAwMmMtb21pc3Npb24tb2YtMjc5MSI+PC9hPjxhIG5hbWU9ImluZGV4LWZrZWVwXzAwMmRpbmxpbmVfMDAyZGZ1bmN0aW9ucy0yNzkyIj48L2E+V2hlbiBhIGZ1bmN0aW9uIGlzIGJvdGggaW5saW5lIGFuZCA8Y29kZT5zdGF0aWM8L2NvZGU+LCBpZiBhbGwgY2FsbHMgdG8gdGhlCitmdW5jdGlvbiBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBjYWxsZXIsIGFuZCB0aGUgZnVuY3Rpb24ncyBhZGRyZXNzIGlzCituZXZlciB1c2VkLCB0aGVuIHRoZSBmdW5jdGlvbidzIG93biBhc3NlbWJsZXIgY29kZSBpcyBuZXZlciByZWZlcmVuY2VkLiAKK0luIHRoaXMgY2FzZSwgR0NDIGRvZXMgbm90IGFjdHVhbGx5IG91dHB1dCBhc3NlbWJsZXIgY29kZSBmb3IgdGhlCitmdW5jdGlvbiwgdW5sZXNzIHlvdSBzcGVjaWZ5IHRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZrZWVwLWlubGluZS1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPi4gCitTb21lIGNhbGxzIGNhbm5vdCBiZSBpbnRlZ3JhdGVkIGZvciB2YXJpb3VzIHJlYXNvbnMgKGluIHBhcnRpY3VsYXIsCitjYWxscyB0aGF0IHByZWNlZGUgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBjYW5ub3QgYmUgaW50ZWdyYXRlZCwgYW5kCituZWl0aGVyIGNhbiByZWN1cnNpdmUgY2FsbHMgd2l0aGluIHRoZSBkZWZpbml0aW9uKS4gIElmIHRoZXJlIGlzIGEKK25vbmludGVncmF0ZWQgY2FsbCwgdGhlbiB0aGUgZnVuY3Rpb24gaXMgY29tcGlsZWQgdG8gYXNzZW1ibGVyIGNvZGUgYXMKK3VzdWFsLiAgVGhlIGZ1bmN0aW9uIG11c3QgYWxzbyBiZSBjb21waWxlZCBhcyB1c3VhbCBpZiB0aGUgcHJvZ3JhbQorcmVmZXJzIHRvIGl0cyBhZGRyZXNzLCBiZWNhdXNlIHRoYXQgY2FuJ3QgYmUgaW5saW5lZC4KKworIDxwPjxhIG5hbWU9ImluZGV4LVdpbmxpbmUtMjc5MyI+PC9hPk5vdGUgdGhhdCBjZXJ0YWluIHVzYWdlcyBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24gY2FuIG1ha2UgaXQgdW5zdWl0YWJsZQorZm9yIGlubGluZSBzdWJzdGl0dXRpb24uICBBbW9uZyB0aGVzZSB1c2FnZXMgYXJlOiB2YXJpYWRpYyBmdW5jdGlvbnMsIHVzZSBvZgorPGNvZGU+YWxsb2NhPC9jb2RlPiwgdXNlIG9mIHZhcmlhYmxlLWxlbmd0aCBkYXRhIHR5cGVzIChzZWUgPGEgaHJlZj0iVmFyaWFibGUtTGVuZ3RoLmh0bWwjVmFyaWFibGUtTGVuZ3RoIj5WYXJpYWJsZSBMZW5ndGg8L2E+KSwKK3VzZSBvZiBjb21wdXRlZCBnb3RvIChzZWUgPGEgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI0xhYmVscy1hcy1WYWx1ZXMiPkxhYmVscyBhcyBWYWx1ZXM8L2E+KSwgdXNlIG9mIG5vbmxvY2FsIGdvdG8sCithbmQgbmVzdGVkIGZ1bmN0aW9ucyAoc2VlIDxhIGhyZWY9Ik5lc3RlZC1GdW5jdGlvbnMuaHRtbCNOZXN0ZWQtRnVuY3Rpb25zIj5OZXN0ZWQgRnVuY3Rpb25zPC9hPikuICBVc2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2lubGluZTwvc3Bhbj48L3NhbXA+Cit3YXJucyB3aGVuIGEgZnVuY3Rpb24gbWFya2VkIDxjb2RlPmlubGluZTwvY29kZT4gY291bGQgbm90IGJlIHN1YnN0aXR1dGVkLAorYW5kIGdpdmVzIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLgorCisgPHA+PGEgbmFtZT0iaW5kZXgtYXV0b21hdGljLV8wMDQwY29kZV8wMDdiaW5saW5lXzAwN2QtZm9yLUNfMDAyYl8wMDJiLW1lbWJlci1mbnMtMjc5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW5saW5lXzAwN2QtYXV0b21hdGljLWZvci1DXzAwMmJfMDAyYi1tZW1iZXItZm5zLTI3OTUiPjwvYT48YSBuYW1lPSJpbmRleC1tZW1iZXItZm5zXzAwMmMtYXV0b21hdGljYWxseS1fMDA0MGNvZGVfMDA3YmlubGluZV8wMDdkLTI3OTYiPjwvYT48YSBuYW1lPSJpbmRleC1DXzAwMmJfMDAyYi1tZW1iZXItZm5zXzAwMmMtYXV0b21hdGljYWxseS1fMDA0MGNvZGVfMDA3YmlubGluZV8wMDdkLTI3OTciPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGRlZmF1bHRfMDAyZGlubGluZS0yNzk4Ij48L2E+QXMgcmVxdWlyZWQgYnkgSVNPIEMrKywgR0NDIGNvbnNpZGVycyBtZW1iZXIgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluCit0aGUgYm9keSBvZiBhIGNsYXNzIHRvIGJlIG1hcmtlZCBpbmxpbmUgZXZlbiBpZiB0aGV5IGFyZQorbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgd2l0aCB0aGUgPGNvZGU+aW5saW5lPC9jb2RlPiBrZXl3b3JkLiAgWW91IGNhbgorb3ZlcnJpZGUgdGhpcyB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZGVmYXVsdC1pbmxpbmU8L3NwYW4+PC9zYW1wPjsgc2VlIDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T3B0aW9ucyBDb250cm9sbGluZyBDKysgRGlhbGVjdDwvYT4uCisKKyA8cD5HQ0MgZG9lcyBub3QgaW5saW5lIGFueSBmdW5jdGlvbnMgd2hlbiBub3Qgb3B0aW1pemluZyB1bmxlc3MgeW91IHNwZWNpZnkKK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFsd2F5c19pbmxpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXR0cmlidXRlIGZvciB0aGUgZnVuY3Rpb24sIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+UHJvdG90eXBlLjwvc3Bhbj4gICovCisgICAgIGlubGluZSB2b2lkIGZvbyAoY29uc3QgY2hhcikgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpOworPC9wcmU+CisgPHA+VGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gaXMgc3BlY2lmaWMgdG8gR05VIEM5MCBpbmxpbmluZy4KKworIDxwPjxhIG5hbWU9ImluZGV4LW5vbl8wMDJkc3RhdGljLWlubGluZS1mdW5jdGlvbi0yNzk5Ij48L2E+V2hlbiBhbiBpbmxpbmUgZnVuY3Rpb24gaXMgbm90IDxjb2RlPnN0YXRpYzwvY29kZT4sIHRoZW4gdGhlIGNvbXBpbGVyIG11c3QgYXNzdW1lCit0aGF0IHRoZXJlIG1heSBiZSBjYWxscyBmcm9tIG90aGVyIHNvdXJjZSBmaWxlczsgc2luY2UgYSBnbG9iYWwgc3ltYm9sIGNhbgorYmUgZGVmaW5lZCBvbmx5IG9uY2UgaW4gYW55IHByb2dyYW0sIHRoZSBmdW5jdGlvbiBtdXN0IG5vdCBiZSBkZWZpbmVkIGluCit0aGUgb3RoZXIgc291cmNlIGZpbGVzLCBzbyB0aGUgY2FsbHMgdGhlcmVpbiBjYW5ub3QgYmUgaW50ZWdyYXRlZC4gCitUaGVyZWZvcmUsIGEgbm9uLTxjb2RlPnN0YXRpYzwvY29kZT4gaW5saW5lIGZ1bmN0aW9uIGlzIGFsd2F5cyBjb21waWxlZCBvbiBpdHMKK293biBpbiB0aGUgdXN1YWwgZmFzaGlvbi4KKworIDxwPklmIHlvdSBzcGVjaWZ5IGJvdGggPGNvZGU+aW5saW5lPC9jb2RlPiBhbmQgPGNvZGU+ZXh0ZXJuPC9jb2RlPiBpbiB0aGUgZnVuY3Rpb24KK2RlZmluaXRpb24sIHRoZW4gdGhlIGRlZmluaXRpb24gaXMgdXNlZCBvbmx5IGZvciBpbmxpbmluZy4gIEluIG5vIGNhc2UKK2lzIHRoZSBmdW5jdGlvbiBjb21waWxlZCBvbiBpdHMgb3duLCBub3QgZXZlbiBpZiB5b3UgcmVmZXIgdG8gaXRzCithZGRyZXNzIGV4cGxpY2l0bHkuICBTdWNoIGFuIGFkZHJlc3MgYmVjb21lcyBhbiBleHRlcm5hbCByZWZlcmVuY2UsIGFzCitpZiB5b3UgaGFkIG9ubHkgZGVjbGFyZWQgdGhlIGZ1bmN0aW9uLCBhbmQgaGFkIG5vdCBkZWZpbmVkIGl0LgorCisgPHA+VGhpcyBjb21iaW5hdGlvbiBvZiA8Y29kZT5pbmxpbmU8L2NvZGU+IGFuZCA8Y29kZT5leHRlcm48L2NvZGU+IGhhcyBhbG1vc3QgdGhlCitlZmZlY3Qgb2YgYSBtYWNyby4gIFRoZSB3YXkgdG8gdXNlIGl0IGlzIHRvIHB1dCBhIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4KK2EgaGVhZGVyIGZpbGUgd2l0aCB0aGVzZSBrZXl3b3JkcywgYW5kIHB1dCBhbm90aGVyIGNvcHkgb2YgdGhlCitkZWZpbml0aW9uIChsYWNraW5nIDxjb2RlPmlubGluZTwvY29kZT4gYW5kIDxjb2RlPmV4dGVybjwvY29kZT4pIGluIGEgbGlicmFyeSBmaWxlLiAKK1RoZSBkZWZpbml0aW9uIGluIHRoZSBoZWFkZXIgZmlsZSBjYXVzZXMgbW9zdCBjYWxscyB0byB0aGUgZnVuY3Rpb24KK3RvIGJlIGlubGluZWQuICBJZiBhbnkgdXNlcyBvZiB0aGUgZnVuY3Rpb24gcmVtYWluLCB0aGV5IHJlZmVyIHRvCit0aGUgc2luZ2xlIGNvcHkgaW4gdGhlIGxpYnJhcnkuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ludGVnZXJzLWltcGxlbWVudGF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ludGVnZXJzLWltcGxlbWVudGF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwMWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSW50ZWdlcnMtaW1wbGVtZW50YXRpb24uaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW50ZWdlcnMgaW1wbGVtZW50YXRpb24gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iIHRpdGxlPSJDIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbi5odG1sI0NoYXJhY3RlcnMtaW1wbGVtZW50YXRpb24iIHRpdGxlPSJDaGFyYWN0ZXJzIGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRmxvYXRpbmctcG9pbnQtaW1wbGVtZW50YXRpb24uaHRtbCNGbG9hdGluZy1wb2ludC1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkZsb2F0aW5nIHBvaW50IGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkludGVnZXJzLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZsb2F0aW5nLXBvaW50LWltcGxlbWVudGF0aW9uLmh0bWwjRmxvYXRpbmctcG9pbnQtaW1wbGVtZW50YXRpb24iPkZsb2F0aW5nIHBvaW50IGltcGxlbWVudGF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbi5odG1sI0NoYXJhY3RlcnMtaW1wbGVtZW50YXRpb24iPkNoYXJhY3RlcnMgaW1wbGVtZW50YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiI+QyBJbXBsZW1lbnRhdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNSBJbnRlZ2VyczwvaDM+CisKKyAgICAgPHVsPgorPGxpPjxjaXRlPkFueSBleHRlbmRlZCBpbnRlZ2VyIHR5cGVzIHRoYXQgZXhpc3QgaW4gdGhlIGltcGxlbWVudGF0aW9uIChDOTkgNi4yLjUpLjwvY2l0ZT4KKworICAgICA8cD5HQ0MgZG9lcyBub3Qgc3VwcG9ydCBhbnkgZXh0ZW5kZWQgaW50ZWdlciB0eXBlcy4gCis8IS0tIFRoZSBfX21vZGVfXyBhdHRyaWJ1dGUgbWlnaHQgY3JlYXRlIHR5cGVzIG9mIHByZWNpc2lvbnMgbm90IC0tPgorPCEtLSBvdGhlcndpc2Ugc3VwcG9ydGVkLCBidXQgdGhlIHN5bnRheCBpc24ndCByaWdodCBmb3IgdXNlIGV2ZXJ5d2hlcmUgLS0+Cis8IS0tIHRoZSBzdGFuZGFyZCB0eXBlIG5hbWVzIG1pZ2h0IGJlIHVzZWQuICBQcmVkZWZpbmVkIHR5cGVkZWZzIHNob3VsZCAtLT4KKzwhLS0gYmUgdXNlZCBpZiBhbnkgZXh0ZW5kZWQgaW50ZWdlciB0eXBlcyBhcmUgdG8gYmUgZGVmaW5lZC4gIFRoZSAtLT4KKzwhLS0gX19pbnQxMjhfdCBhbmQgX191aW50MTI4X3QgdHlwZWRlZnMgYXJlIG5vdCBleHRlbmRlZCBpbnRlZ2VyIHR5cGVzIC0tPgorPCEtLSBhcyB0aGV5IGFyZSBnZW5lcmFsbHkgbG9uZ2VyIHRoYW4gdGhlIEFCSS1zcGVjaWZpZWQgaW50bWF4X3QuIC0tPgorCisgICAgIDxsaT48Y2l0ZT5XaGV0aGVyIHNpZ25lZCBpbnRlZ2VyIHR5cGVzIGFyZSByZXByZXNlbnRlZCB1c2luZyBzaWduIGFuZCBtYWduaXR1ZGUsCit0d28ncyBjb21wbGVtZW50LCBvciBvbmUncyBjb21wbGVtZW50LCBhbmQgd2hldGhlciB0aGUgZXh0cmFvcmRpbmFyeSB2YWx1ZQoraXMgYSB0cmFwIHJlcHJlc2VudGF0aW9uIG9yIGFuIG9yZGluYXJ5IHZhbHVlIChDOTkgNi4yLjYuMikuPC9jaXRlPgorCisgICAgIDxwPkdDQyBzdXBwb3J0cyBvbmx5IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlciB0eXBlcywgYW5kIGFsbCBiaXQgcGF0dGVybnMKK2FyZSBvcmRpbmFyeSB2YWx1ZXMuCisKKyAgICAgPGxpPjxjaXRlPlRoZSByYW5rIG9mIGFueSBleHRlbmRlZCBpbnRlZ2VyIHR5cGUgcmVsYXRpdmUgdG8gYW5vdGhlciBleHRlbmRlZAoraW50ZWdlciB0eXBlIHdpdGggdGhlIHNhbWUgcHJlY2lzaW9uIChDOTkgNi4zLjEuMSkuPC9jaXRlPgorCisgICAgIDxwPkdDQyBkb2VzIG5vdCBzdXBwb3J0IGFueSBleHRlbmRlZCBpbnRlZ2VyIHR5cGVzLiAKKzwhLS0gSWYgaXQgZGlkLCB0aGVyZSB3b3VsZCBvbmx5IGJlIG9uZSBvZiBlYWNoIHByZWNpc2lvbiBhbmQgc2lnbmVkbmVzcy4gLS0+CisKKyAgICAgPGxpPjxjaXRlPlRoZSByZXN1bHQgb2YsIG9yIHRoZSBzaWduYWwgcmFpc2VkIGJ5LCBjb252ZXJ0aW5nIGFuIGludGVnZXIgdG8gYQorc2lnbmVkIGludGVnZXIgdHlwZSB3aGVuIHRoZSB2YWx1ZSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gYW4gb2JqZWN0IG9mCit0aGF0IHR5cGUgKEM5MCA2LjIuMS4yLCBDOTkgNi4zLjEuMykuPC9jaXRlPgorCisgICAgIDxwPkZvciBjb252ZXJzaW9uIHRvIGEgdHlwZSBvZiB3aWR0aCBOLCB0aGUgdmFsdWUgaXMgcmVkdWNlZAorbW9kdWxvIDJeTiB0byBiZSB3aXRoaW4gcmFuZ2Ugb2YgdGhlIHR5cGU7IG5vIHNpZ25hbCBpcyByYWlzZWQuCisKKyAgICAgPGxpPjxjaXRlPlRoZSByZXN1bHRzIG9mIHNvbWUgYml0d2lzZSBvcGVyYXRpb25zIG9uIHNpZ25lZCBpbnRlZ2VycyAoQzkwCis2LjMsIEM5OSA2LjUpLjwvY2l0ZT4KKworICAgICA8cD5CaXR3aXNlIG9wZXJhdG9ycyBhY3Qgb24gdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBpbmNsdWRpbmcKK2JvdGggdGhlIHNpZ24gYW5kIHZhbHVlIGJpdHMsIHdoZXJlIHRoZSBzaWduIGJpdCBpcyBjb25zaWRlcmVkCitpbW1lZGlhdGVseSBhYm92ZSB0aGUgaGlnaGVzdC12YWx1ZSB2YWx1ZSBiaXQuICBTaWduZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhY3RzCitvbiBuZWdhdGl2ZSBudW1iZXJzIGJ5IHNpZ24gZXh0ZW5zaW9uLgorCisgICAgIDxwPkdDQyBkb2VzIG5vdCB1c2UgdGhlIGxhdGl0dWRlIGdpdmVuIGluIEM5OSBvbmx5IHRvIHRyZWF0IGNlcnRhaW4KK2FzcGVjdHMgb2Ygc2lnbmVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0OyZsdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgdW5kZWZpbmVkLCBidXQgdGhpcyBpcyBzdWJqZWN0IHRvCitjaGFuZ2UuCisKKyAgICAgPGxpPjxjaXRlPlRoZSBzaWduIG9mIHRoZSByZW1haW5kZXIgb24gaW50ZWdlciBkaXZpc2lvbiAoQzkwIDYuMy41KS48L2NpdGU+CisKKyAgICAgPHA+R0NDIGFsd2F5cyBmb2xsb3dzIHRoZSBDOTkgcmVxdWlyZW1lbnQgdGhhdCB0aGUgcmVzdWx0IG9mIGRpdmlzaW9uIGlzCit0cnVuY2F0ZWQgdG93YXJkcyB6ZXJvLgorCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbnRlcm9wZXJhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbnRlcm9wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTViOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ludGVyb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwxOTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludGVyb3BlcmF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRyb3VibGUuaHRtbCNUcm91YmxlIiB0aXRsZT0iVHJvdWJsZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFjdHVhbC1CdWdzLmh0bWwjQWN0dWFsLUJ1Z3MiIHRpdGxlPSJBY3R1YWwgQnVncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiIHRpdGxlPSJJbmNvbXBhdGliaWxpdGllcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnRlcm9wZXJhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj5JbmNvbXBhdGliaWxpdGllczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFjdHVhbC1CdWdzLmh0bWwjQWN0dWFsLUJ1Z3MiPkFjdHVhbCBCdWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiPlRyb3VibGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMS4yIEludGVyb3BlcmF0aW9uPC9oMz4KKworPHA+VGhpcyBzZWN0aW9uIGxpc3RzIHZhcmlvdXMgZGlmZmljdWx0aWVzIGVuY291bnRlcmVkIGluIHVzaW5nIEdDQwordG9nZXRoZXIgd2l0aCBvdGhlciBjb21waWxlcnMgb3Igd2l0aCB0aGUgYXNzZW1ibGVycywgbGlua2VycywKK2xpYnJhcmllcyBhbmQgZGVidWdnZXJzIG9uIGNlcnRhaW4gc3lzdGVtcy4KKworICAgICA8dWw+Cis8bGk+T24gbWFueSBwbGF0Zm9ybXMsIEdDQyBzdXBwb3J0cyBhIGRpZmZlcmVudCBBQkkgZm9yIEMrKyB0aGFuIGRvIG90aGVyCitjb21waWxlcnMsIHNvIHRoZSBvYmplY3QgZmlsZXMgY29tcGlsZWQgYnkgR0NDIGNhbm5vdCBiZSB1c2VkIHdpdGggb2JqZWN0CitmaWxlcyBnZW5lcmF0ZWQgYnkgYW5vdGhlciBDKysgY29tcGlsZXIuCisKKyAgICAgPHA+QW4gYXJlYSB3aGVyZSB0aGUgZGlmZmVyZW5jZSBpcyBtb3N0IGFwcGFyZW50IGlzIG5hbWUgbWFuZ2xpbmcuICBUaGUgdXNlCitvZiBkaWZmZXJlbnQgbmFtZSBtYW5nbGluZyBpcyBpbnRlbnRpb25hbCwgdG8gcHJvdGVjdCB5b3UgZnJvbSBtb3JlIHN1YnRsZQorcHJvYmxlbXMuIAorQ29tcGlsZXJzIGRpZmZlciBhcyB0byBtYW55IGludGVybmFsIGRldGFpbHMgb2YgQysrIGltcGxlbWVudGF0aW9uLAoraW5jbHVkaW5nOiBob3cgY2xhc3MgaW5zdGFuY2VzIGFyZSBsYWlkIG91dCwgaG93IG11bHRpcGxlIGluaGVyaXRhbmNlIGlzCitpbXBsZW1lbnRlZCwgYW5kIGhvdyB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxzIGFyZSBoYW5kbGVkLiAgSWYgdGhlIG5hbWUKK2VuY29kaW5nIHdlcmUgbWFkZSB0aGUgc2FtZSwgeW91ciBwcm9ncmFtcyB3b3VsZCBsaW5rIGFnYWluc3QgbGlicmFyaWVzCitwcm92aWRlZCBmcm9tIG90aGVyIGNvbXBpbGVycyZtZGFzaDtidXQgdGhlIHByb2dyYW1zIHdvdWxkIHRoZW4gY3Jhc2ggd2hlbgorcnVuLiAgSW5jb21wYXRpYmxlIGxpYnJhcmllcyBhcmUgdGhlbiBkZXRlY3RlZCBhdCBsaW5rIHRpbWUsIHJhdGhlciB0aGFuCithdCBydW4gdGltZS4KKworICAgICA8bGk+T24gc29tZSBCU0Qgc3lzdGVtcywgaW5jbHVkaW5nIHNvbWUgdmVyc2lvbnMgb2YgVWx0cml4LCB1c2Ugb2YgcHJvZmlsaW5nCitjYXVzZXMgc3RhdGljIHZhcmlhYmxlIGRlc3RydWN0b3JzIChjdXJyZW50bHkgdXNlZCBvbmx5IGluIEMrKykgbm90IHRvCitiZSBydW4uCisKKyAgICAgPGxpPk9uIGEgU1BBUkMsIEdDQyBhbGlnbnMgYWxsIHZhbHVlcyBvZiB0eXBlIDxjb2RlPmRvdWJsZTwvY29kZT4gb24gYW4gOC1ieXRlCitib3VuZGFyeSwgYW5kIGl0IGV4cGVjdHMgZXZlcnkgPGNvZGU+ZG91YmxlPC9jb2RlPiB0byBiZSBzbyBhbGlnbmVkLiAgVGhlIFN1bgorY29tcGlsZXIgdXN1YWxseSBnaXZlcyA8Y29kZT5kb3VibGU8L2NvZGU+IHZhbHVlcyA4LWJ5dGUgYWxpZ25tZW50LCB3aXRoIG9uZQorZXhjZXB0aW9uOiBmdW5jdGlvbiBhcmd1bWVudHMgb2YgdHlwZSA8Y29kZT5kb3VibGU8L2NvZGU+IG1heSBub3QgYmUgYWxpZ25lZC4KKworICAgICA8cD5BcyBhIHJlc3VsdCwgaWYgYSBmdW5jdGlvbiBjb21waWxlZCB3aXRoIFN1biBDQyB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhbgorYXJndW1lbnQgb2YgdHlwZSA8Y29kZT5kb3VibGU8L2NvZGU+IGFuZCBwYXNzZXMgdGhpcyBwb2ludGVyIG9mIHR5cGUKKzxjb2RlPmRvdWJsZSAqPC9jb2RlPiB0byBhIGZ1bmN0aW9uIGNvbXBpbGVkIHdpdGggR0NDLCBkZXJlZmVyZW5jaW5nIHRoZQorcG9pbnRlciBtYXkgY2F1c2UgYSBmYXRhbCBzaWduYWwuCisKKyAgICAgPHA+T25lIHdheSB0byBzb2x2ZSB0aGlzIHByb2JsZW0gaXMgdG8gY29tcGlsZSB5b3VyIGVudGlyZSBwcm9ncmFtIHdpdGggR0NDLiAKK0Fub3RoZXIgc29sdXRpb24gaXMgdG8gbW9kaWZ5IHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNvbXBpbGVkIHdpdGgKK1N1biBDQyB0byBjb3B5IHRoZSBhcmd1bWVudCBpbnRvIGEgbG9jYWwgdmFyaWFibGU7IGxvY2FsIHZhcmlhYmxlcworYXJlIGFsd2F5cyBwcm9wZXJseSBhbGlnbmVkLiAgQSB0aGlyZCBzb2x1dGlvbiBpcyB0byBtb2RpZnkgdGhlIGZ1bmN0aW9uCit0aGF0IHVzZXMgdGhlIHBvaW50ZXIgdG8gZGVyZWZlcmVuY2UgaXQgdmlhIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24KKzxjb2RlPmFjY2Vzc19kb3VibGU8L2NvZGU+IGluc3RlYWQgb2YgZGlyZWN0bHkgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzs6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW5saW5lIGRvdWJsZQorICAgICAgICAgIGFjY2Vzc19kb3VibGUgKGRvdWJsZSAqdW5hbGlnbmVkX3B0cikKKyAgICAgICAgICB7CisgICAgICAgICAgICB1bmlvbiBkMmkgeyBkb3VibGUgZDsgaW50IGlbMl07IH07CisgICAgICAgICAgCisgICAgICAgICAgICB1bmlvbiBkMmkgKnAgPSAodW5pb24gZDJpICopIHVuYWxpZ25lZF9wdHI7CisgICAgICAgICAgICB1bmlvbiBkMmkgdTsKKyAgICAgICAgICAKKyAgICAgICAgICAgIHUuaVswXSA9IHAtJmd0O2lbMF07CisgICAgICAgICAgICB1LmlbMV0gPSBwLSZndDtpWzFdOworICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHUuZDsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5TdG9yaW5nIGludG8gdGhlIHBvaW50ZXIgY2FuIGJlIGRvbmUgbGlrZXdpc2Ugd2l0aCB0aGUgc2FtZSB1bmlvbi4KKworICAgICA8bGk+T24gU29sYXJpcywgdGhlIDxjb2RlPm1hbGxvYzwvY29kZT4gZnVuY3Rpb24gaW4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJtYWxsb2MuYTwvc3Bhbj48L3NhbXA+IGxpYnJhcnkKK21heSBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBpcyBvbmx5IDQgYnl0ZSBhbGlnbmVkLiAgU2luY2UgR0NDIG9uIHRoZQorU1BBUkMgYXNzdW1lcyB0aGF0IGRvdWJsZXMgYXJlIDggYnl0ZSBhbGlnbmVkLCB0aGlzIG1heSByZXN1bHQgaW4gYQorZmF0YWwgc2lnbmFsIGlmIGRvdWJsZXMgYXJlIHN0b3JlZCBpbiBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYm1hbGxvYy5hPC9zcGFuPjwvc2FtcD4gbGlicmFyeS4KKworICAgICA8cD5UaGUgc29sdXRpb24gaXMgdG8gbm90IHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYm1hbGxvYy5hPC9zcGFuPjwvc2FtcD4gbGlicmFyeS4gIFVzZSBpbnN0ZWFkCis8Y29kZT5tYWxsb2M8L2NvZGU+IGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJjLmE8L3NwYW4+PC9zYW1wPjsgdGhleSBkbyBub3QgaGF2ZQordGhpcyBwcm9ibGVtLgorCisgICAgIDxsaT5PbiB0aGUgSFAgUEEgbWFjaGluZSwgQURCIHNvbWV0aW1lcyBmYWlscyB0byB3b3JrIG9uIGZ1bmN0aW9ucyBjb21waWxlZAord2l0aCBHQ0MuICBTcGVjaWZpY2FsbHksIGl0IGZhaWxzIHRvIHdvcmsgb24gZnVuY3Rpb25zIHRoYXQgdXNlCis8Y29kZT5hbGxvY2E8L2NvZGU+IG9yIHZhcmlhYmxlLXNpemUgYXJyYXlzLiAgVGhpcyBpcyBiZWNhdXNlIEdDQyBkb2Vzbid0CitnZW5lcmF0ZSBIUC1VWCB1bndpbmQgZGVzY3JpcHRvcnMgZm9yIHN1Y2ggZnVuY3Rpb25zLiAgSXQgbWF5IGV2ZW4gYmUKK2ltcG9zc2libGUgdG8gZ2VuZXJhdGUgdGhlbS4KKworICAgICA8bGk+RGVidWdnaW5nICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZzwvc3Bhbj48L3NhbXA+KSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBIUCBQQSBtYWNoaW5lLCB1bmxlc3MgeW91IHVzZQordGhlIHByZWxpbWluYXJ5IEdOVSB0b29scy4KKworICAgICA8bGk+VGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgbGFiZWwgbWF5IGdlbmVyYXRlIGVycm9ycyBmcm9tIHRoZSBIUC1VWAorUEEgYXNzZW1ibGVyLiAgR0FTIGZvciB0aGUgUEEgZG9lcyBub3QgaGF2ZSB0aGlzIHByb2JsZW0uCisKKyAgICAgPGxpPlVzaW5nIGZsb2F0aW5nIHBvaW50IHBhcmFtZXRlcnMgZm9yIGluZGlyZWN0IGNhbGxzIHRvIHN0YXRpYyBmdW5jdGlvbnMKK3dpbGwgbm90IHdvcmsgd2hlbiB1c2luZyB0aGUgSFAgYXNzZW1ibGVyLiAgVGhlcmUgc2ltcGx5IGlzIG5vIHdheSBmb3IgR0NDCit0byBzcGVjaWZ5IHdoYXQgcmVnaXN0ZXJzIGhvbGQgYXJndW1lbnRzIGZvciBzdGF0aWMgZnVuY3Rpb25zIHdoZW4gdXNpbmcKK3RoZSBIUCBhc3NlbWJsZXIuICBHQVMgZm9yIHRoZSBQQSBkb2VzIG5vdCBoYXZlIHRoaXMgcHJvYmxlbS4KKworICAgICA8bGk+SW4gZXh0cmVtZWx5IHJhcmUgY2FzZXMgaW52b2x2aW5nIHNvbWUgdmVyeSBsYXJnZSBmdW5jdGlvbnMgeW91IG1heQorcmVjZWl2ZSBlcnJvcnMgZnJvbSB0aGUgSFAgbGlua2VyIGNvbXBsYWluaW5nIGFib3V0IGFuIG91dCBvZiBib3VuZHMKK3VuY29uZGl0aW9uYWwgYnJhbmNoIG9mZnNldC4gIFRoaXMgdXNlZCB0byBvY2N1ciBtb3JlIG9mdGVuIGluIHByZXZpb3VzCit2ZXJzaW9ucyBvZiBHQ0MsIGJ1dCBpcyBub3cgZXhjZXB0aW9uYWxseSByYXJlLiAgSWYgeW91IHNob3VsZCBydW4KK2ludG8gaXQsIHlvdSBjYW4gd29yayBhcm91bmQgYnkgbWFraW5nIHlvdXIgZnVuY3Rpb24gc21hbGxlci4KKworICAgICA8bGk+R0NDIGNvbXBpbGVkIGNvZGUgc29tZXRpbWVzIGVtaXRzIHdhcm5pbmdzIGZyb20gdGhlIEhQLVVYIGFzc2VtYmxlciBvZgordGhlIGZvcm06CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgKHdhcm5pbmcpIFVzZSBvZiBHUjMgd2hlbgorICAgICAgICAgICAgZnJhbWUgJmd0Oz0gODE5MiBtYXkgY2F1c2UgY29uZmxpY3QuCis8L3ByZT4KKyAgICAgPHA+VGhlc2Ugd2FybmluZ3MgYXJlIGhhcm1sZXNzIGFuZCBjYW4gYmUgc2FmZWx5IGlnbm9yZWQuCisKKyAgICAgPGxpPkluIGV4dHJlbWVseSByYXJlIGNhc2VzIGludm9sdmluZyBzb21lIHZlcnkgbGFyZ2UgZnVuY3Rpb25zIHlvdSBtYXkKK3JlY2VpdmUgZXJyb3JzIGZyb20gdGhlIEFJWCBBc3NlbWJsZXIgY29tcGxhaW5pbmcgYWJvdXQgYSBkaXNwbGFjZW1lbnQKK3RoYXQgaXMgdG9vIGxhcmdlLiAgSWYgeW91IHNob3VsZCBydW4gaW50byBpdCwgeW91IGNhbiB3b3JrIGFyb3VuZCBieQorbWFraW5nIHlvdXIgZnVuY3Rpb24gc21hbGxlci4KKworICAgICA8bGk+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJzdGRjKysuYTwvc3Bhbj48L3NhbXA+IGxpYnJhcnkgaW4gR0NDIHJlbGllcyBvbiB0aGUgU1ZSNCBkeW5hbWljCitsaW5rZXIgc2VtYW50aWNzIHdoaWNoIG1lcmdlcyBnbG9iYWwgc3ltYm9scyBiZXR3ZWVuIGxpYnJhcmllcyBhbmQKK2FwcGxpY2F0aW9ucywgZXNwZWNpYWxseSBuZWNlc3NhcnkgZm9yIEMrKyBzdHJlYW1zIGZ1bmN0aW9uYWxpdHkuIAorVGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgQUlYIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWMKK2xpbmtpbmcuICA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGlic3RkYysrLmE8L3NwYW4+PC9zYW1wPiBpcyBidWlsdCBvbiBBSVggd2l0aCAmbGRxdW87cnVudGltZS1saW5raW5nJnJkcXVvOworZW5hYmxlZCBzbyB0aGF0IHN5bWJvbCBtZXJnaW5nIGNhbiBvY2N1ci4gIFRvIHV0aWxpemUgdGhpcyBmZWF0dXJlLAordGhlIGFwcGxpY2F0aW9uIGxpbmtlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJzdGRjKysuYTwvc3Bhbj48L3NhbXA+IG11c3QgaW5jbHVkZSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XbCwtYnJ0bDwvc3Bhbj48L3NhbXA+IGZsYWcgb24gdGhlIGxpbmsgbGluZS4gIEcrKyBjYW5ub3QgaW1wb3NlIHRoaXMKK2JlY2F1c2UgdGhpcyBvcHRpb24gbWF5IGludGVyZmVyZSB3aXRoIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIHVzZXIKK3Byb2dyYW0gYW5kIHVzZXJzIG1heSBub3QgYWx3YXlzIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmcrKzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBsaW5rIGhpcyBvciBoZXIKK2FwcGxpY2F0aW9uLiAgQXBwbGljYXRpb25zIGFyZSBub3QgcmVxdWlyZWQgdG8gdXNlIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdsLC1icnRsPC9zcGFuPjwvc2FtcD4gZmxhZyBvbiB0aGUgbGluayBsaW5lJm1kYXNoO3RoZSByZXN0IG9mIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYnN0ZGMrKy5hPC9zcGFuPjwvc2FtcD4gbGlicmFyeSB3aGljaCBpcyBub3QgZGVwZW5kZW50IG9uIHRoZSBzeW1ib2wKK21lcmdpbmcgc2VtYW50aWNzIHdpbGwgY29udGludWUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgorCisgICAgIDxsaT5BbiBhcHBsaWNhdGlvbiBjYW4gaW50ZXJwb3NlIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBmdW5jdGlvbnMgZm9yCitmdW5jdGlvbnMgaW52b2tlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGlic3RkYysrLmE8L3NwYW4+PC9zYW1wPiB3aXRoICZsZHF1bztydW50aW1lLWxpbmtpbmcmcmRxdW87CitlbmFibGVkIG9uIEFJWC4gIFRvIGFjY29tcGxpc2ggdGhpcyB0aGUgYXBwbGljYXRpb24gbXVzdCBiZSBsaW5rZWQKK3dpdGggJmxkcXVvO3J1bnRpbWUtbGlua2luZyZyZHF1bzsgb3B0aW9uIGFuZCB0aGUgZnVuY3Rpb25zIGV4cGxpY2l0bHkgbXVzdCBiZQorZXhwb3J0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2wsLWJydGwsLWJFOmV4cG9ydGZpbGU8L3NwYW4+PC9zYW1wPikuCisKKyAgICAgPGxpPkFJWCBvbiB0aGUgUlMvNjAwMCBwcm92aWRlcyBzdXBwb3J0IChOTFMpIGZvciBlbnZpcm9ubWVudHMgb3V0c2lkZSBvZgordGhlIFVuaXRlZCBTdGF0ZXMuICBDb21waWxlcnMgYW5kIGFzc2VtYmxlcnMgdXNlIE5MUyB0byBzdXBwb3J0Citsb2NhbGUtc3BlY2lmaWMgcmVwcmVzZW50YXRpb25zIG9mIHZhcmlvdXMgb2JqZWN0cyBpbmNsdWRpbmcKK2Zsb2F0aW5nLXBvaW50IG51bWJlcnMgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48L3NhbXA+JnJzcXVvOyB2cyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHNlcGFyYXRpbmcgZGVjaW1hbAorZnJhY3Rpb25zKS4gIFRoZXJlIGhhdmUgYmVlbiBwcm9ibGVtcyByZXBvcnRlZCB3aGVyZSB0aGUgbGlicmFyeSBsaW5rZWQKK3dpdGggR0NDIGRvZXMgbm90IHByb2R1Y2UgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgZm9ybWF0cyB0aGF0IHRoZQorYXNzZW1ibGVyIGFjY2VwdHMuICBJZiB5b3UgaGF2ZSB0aGlzIHByb2JsZW0sIHNldCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+TEFORzwvc3Bhbj48L3NhbXA+CitlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5Fbl9VUzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8bGk+PGEgbmFtZT0iaW5kZXgtZmRvbGxhcnNfMDAyZGluXzAwMmRpZGVudGlmaWVycy0zNTM2Ij48L2E+RXZlbiBpZiB5b3Ugc3BlY2lmeSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmRvbGxhcnMtaW4taWRlbnRpZmllcnM8L3NwYW4+PC9zYW1wPiwKK3lvdSBjYW5ub3Qgc3VjY2Vzc2Z1bGx5IHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gaWRlbnRpZmllcnMgb24gdGhlIFJTLzYwMDAgZHVlCit0byBhIHJlc3RyaWN0aW9uIGluIHRoZSBJQk0gYXNzZW1ibGVyLiAgR0FTIHN1cHBvcnRzIHRoZXNlCitpZGVudGlmaWVycy4KKworIDwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ludm9raW5nLUdDQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbnZva2luZy1HQ0MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWE2Yzc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbnZva2luZy1HQ0MuaHRtbApAQCAtMCwwICsxLDEzMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW52b2tpbmcgR0NDIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIiB0aXRsZT0iU3RhbmRhcmRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iIHRpdGxlPSJDIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikludm9raW5nLUdDQyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiI+QyBJbXBsZW1lbnRhdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjMgR0NDIENvbW1hbmQgT3B0aW9uczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LUdDQy1jb21tYW5kLW9wdGlvbnMtNjciPjwvYT48YSBuYW1lPSJpbmRleC1jb21tYW5kLW9wdGlvbnMtNjgiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtR0NDLWNvbW1hbmQtNjkiPjwvYT4KKzwhLS0gbWFuIGJlZ2luIERFU0NSSVBUSU9OIC0tPgorV2hlbiB5b3UgaW52b2tlIEdDQywgaXQgbm9ybWFsbHkgZG9lcyBwcmVwcm9jZXNzaW5nLCBjb21waWxhdGlvbiwKK2Fzc2VtYmx5IGFuZCBsaW5raW5nLiAgVGhlICZsZHF1bztvdmVyYWxsIG9wdGlvbnMmcmRxdW87IGFsbG93IHlvdSB0byBzdG9wIHRoaXMKK3Byb2Nlc3MgYXQgYW4gaW50ZXJtZWRpYXRlIHN0YWdlLiAgRm9yIGV4YW1wbGUsIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYzwvc3Bhbj48L3NhbXA+IG9wdGlvbgorc2F5cyBub3QgdG8gcnVuIHRoZSBsaW5rZXIuICBUaGVuIHRoZSBvdXRwdXQgY29uc2lzdHMgb2Ygb2JqZWN0IGZpbGVzCitvdXRwdXQgYnkgdGhlIGFzc2VtYmxlci4KKworIDxwPk90aGVyIG9wdGlvbnMgYXJlIHBhc3NlZCBvbiB0byBvbmUgc3RhZ2Ugb2YgcHJvY2Vzc2luZy4gIFNvbWUgb3B0aW9ucworY29udHJvbCB0aGUgcHJlcHJvY2Vzc29yIGFuZCBvdGhlcnMgdGhlIGNvbXBpbGVyIGl0c2VsZi4gIFlldCBvdGhlcgorb3B0aW9ucyBjb250cm9sIHRoZSBhc3NlbWJsZXIgYW5kIGxpbmtlcjsgbW9zdCBvZiB0aGVzZSBhcmUgbm90Citkb2N1bWVudGVkIGhlcmUsIHNpbmNlIHlvdSByYXJlbHkgbmVlZCB0byB1c2UgYW55IG9mIHRoZW0uCisKKyA8cD48YSBuYW1lPSJpbmRleC1DLWNvbXBpbGF0aW9uLW9wdGlvbnMtNzAiPjwvYT5Nb3N0IG9mIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0aGF0IHlvdSBjYW4gdXNlIHdpdGggR0NDIGFyZSB1c2VmdWwKK2ZvciBDIHByb2dyYW1zOyB3aGVuIGFuIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCB3aXRoIGFub3RoZXIgbGFuZ3VhZ2UKKyh1c3VhbGx5IEMrKyksIHRoZSBleHBsYW5hdGlvbiBzYXlzIHNvIGV4cGxpY2l0bHkuICBJZiB0aGUgZGVzY3JpcHRpb24KK2ZvciBhIHBhcnRpY3VsYXIgb3B0aW9uIGRvZXMgbm90IG1lbnRpb24gYSBzb3VyY2UgbGFuZ3VhZ2UsIHlvdSBjYW4gdXNlCit0aGF0IG9wdGlvbiB3aXRoIGFsbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzLgorCisgPHA+PGEgbmFtZT0iaW5kZXgtQ18wMDJiXzAwMmItY29tcGlsYXRpb24tb3B0aW9ucy03MSI+PC9hPlNlZSA8YSBocmVmPSJJbnZva2luZy1HXzAwMmJfMDAyYi5odG1sI0ludm9raW5nLUdfMDAyYl8wMDJiIj5Db21waWxpbmcgQysrIFByb2dyYW1zPC9hPiwgZm9yIGEgc3VtbWFyeSBvZiBzcGVjaWFsCitvcHRpb25zIGZvciBjb21waWxpbmcgQysrIHByb2dyYW1zLgorCisgPHA+PGEgbmFtZT0iaW5kZXgtZ3JvdXBpbmctb3B0aW9ucy03MiI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1ncm91cGluZy03MyI+PC9hPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gcHJvZ3JhbSBhY2NlcHRzIG9wdGlvbnMgYW5kIGZpbGUgbmFtZXMgYXMgb3BlcmFuZHMuICBNYW55CitvcHRpb25zIGhhdmUgbXVsdGktbGV0dGVyIG5hbWVzOyB0aGVyZWZvcmUgbXVsdGlwbGUgc2luZ2xlLWxldHRlciBvcHRpb25zCittYXkgPGVtPm5vdDwvZW0+IGJlIGdyb3VwZWQ6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kdjwvc3Bhbj48L3NhbXA+IGlzIHZlcnkgZGlmZmVyZW50IGZyb20gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZCZuYnNwOy12PC9zcGFuPjwvc2FtcD4mcnNxdW87PCEtLSAvQHcgLS0+LgorCisgPHA+PGEgbmFtZT0iaW5kZXgtb3JkZXItb2Ytb3B0aW9ucy03NCI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1vcmRlci03NSI+PC9hPllvdSBjYW4gbWl4IG9wdGlvbnMgYW5kIG90aGVyIGFyZ3VtZW50cy4gIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgb3JkZXIKK3lvdSB1c2UgZG9lc24ndCBtYXR0ZXIuICBPcmRlciBkb2VzIG1hdHRlciB3aGVuIHlvdSB1c2Ugc2V2ZXJhbAorb3B0aW9ucyBvZiB0aGUgc2FtZSBraW5kOyBmb3IgZXhhbXBsZSwgaWYgeW91IHNwZWNpZnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUw8L3NwYW4+PC9zYW1wPiBtb3JlCit0aGFuIG9uY2UsIHRoZSBkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQgaW4gdGhlIG9yZGVyIHNwZWNpZmllZC4gIEFsc28sCit0aGUgcGxhY2VtZW50IG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBzaWduaWZpY2FudC4KKworIDxwPk1hbnkgb3B0aW9ucyBoYXZlIGxvbmcgbmFtZXMgc3RhcnRpbmcgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1mPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yIHdpdGgKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVc8L3NwYW4+PC9zYW1wPiZyc3F1bzsmbWRhc2g7Zm9yIGV4YW1wbGUsCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm1vdmUtbG9vcC1pbnZhcmlhbnRzPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0PC9zcGFuPjwvc2FtcD4gYW5kIHNvIG9uLiAgTW9zdCBvZgordGhlc2UgaGF2ZSBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmb3JtczsgdGhlIG5lZ2F0aXZlIGZvcm0gb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZm9vPC9zcGFuPjwvc2FtcD4gaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1mb288L3NwYW4+PC9zYW1wPi4gIFRoaXMgbWFudWFsIGRvY3VtZW50cworb25seSBvbmUgb2YgdGhlc2UgdHdvIGZvcm1zLCB3aGljaGV2ZXIgb25lIGlzIG5vdCB0aGUgZGVmYXVsdC4KKworPCEtLSBtYW4gZW5kIC0tPgorIDxwPlNlZSA8YSBocmVmPSJPcHRpb24tSW5kZXguaHRtbCNPcHRpb24tSW5kZXgiPk9wdGlvbiBJbmRleDwvYT4sIGZvciBhbiBpbmRleCB0byBHQ0MncyBvcHRpb25zLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iT3B0aW9uLVN1bW1hcnkuaHRtbCNPcHRpb24tU3VtbWFyeSI+T3B0aW9uIFN1bW1hcnk8L2E+OiAgICAgICBCcmllZiBsaXN0IG9mIGFsbCBvcHRpb25zLCB3aXRob3V0IGV4cGxhbmF0aW9ucy4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk92ZXJhbGwgT3B0aW9uczwvYT46ICAgICAgQ29udHJvbGxpbmcgdGhlIGtpbmQgb2Ygb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICAgICAgYW4gZXhlY3V0YWJsZSwgb2JqZWN0IGZpbGVzLCBhc3NlbWJsZXIgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBvciBwcmVwcm9jZXNzZWQgc291cmNlLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ikludm9raW5nLUdfMDAyYl8wMDJiLmh0bWwjSW52b2tpbmctR18wMDJiXzAwMmIiPkludm9raW5nIEcrKzwvYT46ICAgICAgICAgQ29tcGlsaW5nIEMrKyBwcm9ncmFtcy4gCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT46ICAgIENvbnRyb2xsaW5nIHRoZSB2YXJpYW50IG9mIEMgbGFuZ3VhZ2UgY29tcGlsZWQuIAorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjogIFZhcmlhdGlvbnMgb24gQysrLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+OiAgVmFyaWF0aW9ucyBvbiBPYmplY3RpdmUtQworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIE9iamVjdGl2ZS1DKysuIAorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+OiAgQ29udHJvbGxpbmcgaG93IGRpYWdub3N0aWNzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjogICAgICBIb3cgcGlja3kgc2hvdWxkIHRoZSBjb21waWxlciBiZT8gCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT46ICAgIFN5bWJvbCB0YWJsZXMsIG1lYXN1cmVtZW50cywgYW5kIGRlYnVnZ2luZyBkdW1wcy4gCis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+OiAgICAgSG93IG11Y2ggb3B0aW1pemF0aW9uPyAKKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT46ICBDb250cm9sbGluZyBoZWFkZXIgZmlsZXMgYW5kIG1hY3JvIGRlZmluaXRpb25zLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBnZXR0aW5nIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gZm9yIE1ha2UuIAorPGxpPjxhIGhyZWY9IkFzc2VtYmxlci1PcHRpb25zLmh0bWwjQXNzZW1ibGVyLU9wdGlvbnMiPkFzc2VtYmxlciBPcHRpb25zPC9hPjogICAgUGFzc2luZyBvcHRpb25zIHRvIHRoZSBhc3NlbWJsZXIuIAorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjogICAgICAgICBTcGVjaWZ5aW5nIGxpYnJhcmllcyBhbmQgc28gb24uIAorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiPkRpcmVjdG9yeSBPcHRpb25zPC9hPjogICAgV2hlcmUgdG8gZmluZCBoZWFkZXIgZmlsZXMgYW5kIGxpYnJhcmllcy4gCisgICAgICAgICAgICAgICAgICAgICAgICBXaGVyZSB0byBmaW5kIHRoZSBjb21waWxlciBleGVjdXRhYmxlIGZpbGVzLiAKKzxsaT48YSBocmVmPSJTcGVjLUZpbGVzLmh0bWwjU3BlYy1GaWxlcyI+U3BlYyBGaWxlczwvYT46ICAgICAgICAgICBIb3cgdG8gcGFzcyBzd2l0Y2hlcyB0byBzdWItcHJvY2Vzc2VzLiAKKzxsaT48YSBocmVmPSJUYXJnZXQtT3B0aW9ucy5odG1sI1RhcmdldC1PcHRpb25zIj5UYXJnZXQgT3B0aW9uczwvYT46ICAgICAgIFJ1bm5pbmcgYSBjcm9zcy1jb21waWxlciwgb3IgYW4gb2xkIHZlcnNpb24gb2YgR0NDLiAKKzxsaT48YSBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT46ICAgICBTcGVjaWZ5aW5nIG1pbm9yIGhhcmR3YXJlIG9yIGNvbnZlbnRpb24gdmFyaWF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgNjgwMTAgdnMgNjgwMjAuIAorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjogICAgIFNwZWNpZnlpbmcgY29udmVudGlvbnMgZm9yIGZ1bmN0aW9uIGNhbGxzLCBkYXRhIGxheW91dAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlZ2lzdGVyIHVzYWdlLiAKKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT46ICBFbnYgdmFycyB0aGF0IGFmZmVjdCBHQ0MuIAorPGxpPjxhIGhyZWY9IlByZWNvbXBpbGVkLUhlYWRlcnMuaHRtbCNQcmVjb21waWxlZC1IZWFkZXJzIj5QcmVjb21waWxlZCBIZWFkZXJzPC9hPjogIENvbXBpbGluZyBhIGhlYWRlciBvbmNlLCBhbmQgdXNpbmcgaXQgbWFueSB0aW1lcy4gCis8L3VsPgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE5NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9JbnZva2luZy1HXzAwMmJfMDAyYi5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludm9raW5nIEcrKyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiIHRpdGxlPSJJbnZva2luZyBHQ0MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiIHRpdGxlPSJPdmVyYWxsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIiB0aXRsZT0iQyBEaWFsZWN0IE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW52b2tpbmctRysrIj48L2E+Cis8YSBuYW1lPSJJbnZva2luZy1HXzAwMmJfMDAyYiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI092ZXJhbGwtT3B0aW9ucyI+T3ZlcmFsbCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjMgQ29tcGlsaW5nIEMrKyBQcm9ncmFtczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN1ZmZpeGVzLWZvci1DXzAwMmJfMDAyYi1zb3VyY2UtOTIiPjwvYT48YSBuYW1lPSJpbmRleC1DXzAwMmJfMDAyYi1zb3VyY2UtZmlsZS1zdWZmaXhlcy05MyI+PC9hPkMrKyBzb3VyY2UgZmlsZXMgY29udmVudGlvbmFsbHkgdXNlIG9uZSBvZiB0aGUgc3VmZml4ZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uQzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmNjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jcHA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LkNQUDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYysrPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jcDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmN4eDwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgQysrIGhlYWRlciBmaWxlcyBvZnRlbiB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaGg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmhwcDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lkg8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yIChmb3Igc2hhcmVkIHRlbXBsYXRlIGNvZGUpICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRjYzwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgYW5kCitwcmVwcm9jZXNzZWQgQysrIGZpbGVzIHVzZSB0aGUgc3VmZml4ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmlpPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgR0NDIHJlY29nbml6ZXMKK2ZpbGVzIHdpdGggdGhlc2UgbmFtZXMgYW5kIGNvbXBpbGVzIHRoZW0gYXMgQysrIHByb2dyYW1zIGV2ZW4gaWYgeW91CitjYWxsIHRoZSBjb21waWxlciB0aGUgc2FtZSB3YXkgYXMgZm9yIGNvbXBpbGluZyBDIHByb2dyYW1zICh1c3VhbGx5Cit3aXRoIHRoZSBuYW1lIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPikuCisKKyA8cD48YSBuYW1lPSJpbmRleC1nXzAwMmJfMDAyYi05NCI+PC9hPjxhIG5hbWU9ImluZGV4LWNfMDAyYl8wMDJiLTk1Ij48L2E+SG93ZXZlciwgdGhlIHVzZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gZG9lcyBub3QgYWRkIHRoZSBDKysgbGlicmFyeS4gCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZysrPC9zcGFuPjwvc2FtcD4gaXMgYSBwcm9ncmFtIHRoYXQgY2FsbHMgR0NDIGFuZCBhdXRvbWF0aWNhbGx5IHNwZWNpZmllcyBsaW5raW5nCithZ2FpbnN0IHRoZSBDKysgbGlicmFyeS4gIEl0IHRyZWF0cyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5jPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmaWxlcyBhcyBDKysgc291cmNlIGZpbGVzIGluc3RlYWQgb2YgQyBzb3VyY2UKK2ZpbGVzIHVubGVzcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4teDwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuICBUaGlzIHByb2dyYW0gaXMgYWxzbyB1c2VmdWwgd2hlbgorcHJlY29tcGlsaW5nIGEgQyBoZWFkZXIgZmlsZSB3aXRoIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBleHRlbnNpb24gZm9yIHVzZSBpbiBDKysKK2NvbXBpbGF0aW9ucy4gIE9uIG1hbnkgc3lzdGVtcywgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmcrKzwvc3Bhbj48L3NhbXA+IGlzIGFsc28gaW5zdGFsbGVkIHdpdGgKK3RoZSBuYW1lIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jKys8L3NwYW4+PC9zYW1wPi4KKworIDxwPjxhIG5hbWU9ImluZGV4LWludm9raW5nLV8wMDQwY29tbWFuZF8wMDdiZ18wMDJiXzAwMmJfMDA3ZC05NiI+PC9hPldoZW4geW91IGNvbXBpbGUgQysrIHByb2dyYW1zLCB5b3UgbWF5IHNwZWNpZnkgbWFueSBvZiB0aGUgc2FtZQorY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdCB5b3UgdXNlIGZvciBjb21waWxpbmcgcHJvZ3JhbXMgaW4gYW55CitsYW5ndWFnZTsgb3IgY29tbWFuZC1saW5lIG9wdGlvbnMgbWVhbmluZ2Z1bCBmb3IgQyBhbmQgcmVsYXRlZAorbGFuZ3VhZ2VzOyBvciBvcHRpb25zIHRoYXQgYXJlIG1lYW5pbmdmdWwgb25seSBmb3IgQysrIHByb2dyYW1zLiAKK1NlZSA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5PcHRpb25zIENvbnRyb2xsaW5nIEMgRGlhbGVjdDwvYT4sIGZvcgorZXhwbGFuYXRpb25zIG9mIG9wdGlvbnMgZm9yIGxhbmd1YWdlcyByZWxhdGVkIHRvIEMuIAorU2VlIDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T3B0aW9ucyBDb250cm9sbGluZyBDKysgRGlhbGVjdDwvYT4sIGZvcgorZXhwbGFuYXRpb25zIG9mIG9wdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBvbmx5IGZvciBDKysgcHJvZ3JhbXMuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ludm9raW5nLUdjb3YuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSW52b2tpbmctR2Nvdi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YzMyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0ludm9raW5nLUdjb3YuaHRtbApAQCAtMCwwICsxLDM1NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW52b2tpbmcgR2NvdiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJHY292Lmh0bWwjR2NvdiIgdGl0bGU9Ikdjb3YiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHY292LUludHJvLmh0bWwjR2Nvdi1JbnRybyIgdGl0bGU9Ikdjb3YgSW50cm8iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHY292LWFuZC1PcHRpbWl6YXRpb24uaHRtbCNHY292LWFuZC1PcHRpbWl6YXRpb24iIHRpdGxlPSJHY292IGFuZCBPcHRpbWl6YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW52b2tpbmctR2NvdiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHY292LWFuZC1PcHRpbWl6YXRpb24uaHRtbCNHY292LWFuZC1PcHRpbWl6YXRpb24iPkdjb3YgYW5kIE9wdGltaXphdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikdjb3YtSW50cm8uaHRtbCNHY292LUludHJvIj5HY292IEludHJvPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iR2Nvdi5odG1sI0djb3YiPkdjb3Y8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMC4yIEludm9raW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD48L2gzPgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZ2NvdiA8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PHZhcj5vcHRpb25zPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiA8dmFyPmZpbGVzPC92YXI+Cis8L3ByZT4KKyA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWg8L2NvZGU+PGR0Pjxjb2RlPi0taGVscDwvY29kZT48ZGQ+RGlzcGxheSBoZWxwIGFib3V0IHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gKG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQpLCBhbmQKK2V4aXQgd2l0aG91dCBkb2luZyBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXY8L2NvZGU+PGR0Pjxjb2RlPi0tdmVyc2lvbjwvY29kZT48ZGQ+RGlzcGxheSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiB2ZXJzaW9uIG51bWJlciAob24gdGhlIHN0YW5kYXJkIG91dHB1dCksCithbmQgZXhpdCB3aXRob3V0IGRvaW5nIGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tYTwvY29kZT48ZHQ+PGNvZGU+LS1hbGwtYmxvY2tzPC9jb2RlPjxkZD5Xcml0ZSBpbmRpdmlkdWFsIGV4ZWN1dGlvbiBjb3VudHMgZm9yIGV2ZXJ5IGJhc2ljIGJsb2NrLiAgTm9ybWFsbHkgZ2Nvdgorb3V0cHV0cyBleGVjdXRpb24gY291bnRzIG9ubHkgZm9yIHRoZSBtYWluIGJsb2NrcyBvZiBhIGxpbmUuICBXaXRoIHRoaXMKK29wdGlvbiB5b3UgY2FuIGRldGVybWluZSBpZiBibG9ja3Mgd2l0aGluIGEgc2luZ2xlIGxpbmUgYXJlIG5vdCBiZWluZworZXhlY3V0ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tYjwvY29kZT48ZHQ+PGNvZGU+LS1icmFuY2gtcHJvYmFiaWxpdGllczwvY29kZT48ZGQ+V3JpdGUgYnJhbmNoIGZyZXF1ZW5jaWVzIHRvIHRoZSBvdXRwdXQgZmlsZSwgYW5kIHdyaXRlIGJyYW5jaCBzdW1tYXJ5CitpbmZvIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNlZSBob3cgb2Z0ZW4KK2VhY2ggYnJhbmNoIGluIHlvdXIgcHJvZ3JhbSB3YXMgdGFrZW4uICBVbmNvbmRpdGlvbmFsIGJyYW5jaGVzIHdpbGwgbm90CitiZSBzaG93biwgdW5sZXNzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tdTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBnaXZlbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1jPC9jb2RlPjxkdD48Y29kZT4tLWJyYW5jaC1jb3VudHM8L2NvZGU+PGRkPldyaXRlIGJyYW5jaCBmcmVxdWVuY2llcyBhcyB0aGUgbnVtYmVyIG9mIGJyYW5jaGVzIHRha2VuLCByYXRoZXIgdGhhbgordGhlIHBlcmNlbnRhZ2Ugb2YgYnJhbmNoZXMgdGFrZW4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbjwvY29kZT48ZHQ+PGNvZGU+LS1uby1vdXRwdXQ8L2NvZGU+PGRkPkRvIG5vdCBjcmVhdGUgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gb3V0cHV0IGZpbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbDwvY29kZT48ZHQ+PGNvZGU+LS1sb25nLWZpbGUtbmFtZXM8L2NvZGU+PGRkPkNyZWF0ZSBsb25nIGZpbGUgbmFtZXMgZm9yIGluY2x1ZGVkIHNvdXJjZSBmaWxlcy4gIEZvciBleGFtcGxlLCBpZiB0aGUKK2hlYWRlciBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj54Lmg8L3NwYW4+PC9zYW1wPiBjb250YWlucyBjb2RlLCBhbmQgd2FzIGluY2x1ZGVkIGluIHRoZSBmaWxlCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YS5jPC9zcGFuPjwvc2FtcD4sIHRoZW4gcnVubmluZyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IG9uIHRoZSBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hLmM8L3NwYW4+PC9zYW1wPiB3aWxsCitwcm9kdWNlIGFuIG91dHB1dCBmaWxlIGNhbGxlZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YS5jIyN4LmguZ2Nvdjwvc3Bhbj48L3NhbXA+IGluc3RlYWQgb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj54LmguZ2Nvdjwvc3Bhbj48L3NhbXA+LiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj54Lmg8L3NwYW4+PC9zYW1wPiBpcyBpbmNsdWRlZCBpbgorbXVsdGlwbGUgc291cmNlIGZpbGVzIGFuZCB5b3Ugd2FudCB0byBzZWUgdGhlIGluZGl2aWR1YWwKK2NvbnRyaWJ1dGlvbnMuICBJZiB5b3UgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgYm90aCB0aGUgaW5jbHVkaW5nCithbmQgaW5jbHVkZWQgZmlsZSBuYW1lcyB3aWxsIGJlIGNvbXBsZXRlIHBhdGggbmFtZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcDwvY29kZT48ZHQ+PGNvZGU+LS1wcmVzZXJ2ZS1wYXRoczwvY29kZT48ZGQ+UHJlc2VydmUgY29tcGxldGUgcGF0aCBpbmZvcm1hdGlvbiBpbiB0aGUgbmFtZXMgb2YgZ2VuZXJhdGVkCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Lmdjb3Y8L3NwYW4+PC9zYW1wPiBmaWxlcy4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIGp1c3QgdGhlIGZpbGVuYW1lIGNvbXBvbmVudCBpcwordXNlZC4gIFdpdGggdGhpcyBvcHRpb24sIGFsbCBkaXJlY3RvcmllcyBhcmUgdXNlZCwgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi88L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVycwordHJhbnNsYXRlZCB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVycywgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi48L3NwYW4+PC9zYW1wPiBkaXJlY3RvcnkgY29tcG9uZW50cworcmVtb3ZlZCBhbmQgdW5yZW1vdmVhYmxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uLjwvc3Bhbj48L3NhbXA+Citjb21wb25lbnRzIHJlbmFtZWQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ePC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBpcyB1c2VmdWwgaWYgc291cmNlZmlsZXMgYXJlIGluIHNldmVyYWwKK2RpZmZlcmVudCBkaXJlY3Rvcmllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1yPC9jb2RlPjxkdD48Y29kZT4tLXJlbGF0aXZlLW9ubHk8L2NvZGU+PGRkPk9ubHkgb3V0cHV0IGluZm9ybWF0aW9uIGFib3V0IHNvdXJjZSBmaWxlcyB3aXRoIGEgcmVsYXRpdmUgcGF0aG5hbWUKKyhhZnRlciBzb3VyY2UgcHJlZml4IGVsaXNpb24pLiAgQWJzb2x1dGUgcGF0aHMgYXJlIHVzdWFsbHkgc3lzdGVtCitoZWFkZXIgZmlsZXMgYW5kIGNvdmVyYWdlIG9mIGFueSBpbmxpbmUgZnVuY3Rpb25zIHRoZXJlaW4gaXMgbm9ybWFsbHkKK3VuaW50ZXJlc3RpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZjwvY29kZT48ZHQ+PGNvZGU+LS1mdW5jdGlvbi1zdW1tYXJpZXM8L2NvZGU+PGRkPk91dHB1dCBzdW1tYXJpZXMgZm9yIGVhY2ggZnVuY3Rpb24gaW4gYWRkaXRpb24gdG8gdGhlIGZpbGUgbGV2ZWwgc3VtbWFyeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1vIDwvY29kZT48dmFyPmRpcmVjdG9yeXxmaWxlPC92YXI+PGR0Pjxjb2RlPi0tb2JqZWN0LWRpcmVjdG9yeSA8L2NvZGU+PHZhcj5kaXJlY3Rvcnk8L3Zhcj48ZHQ+PGNvZGU+LS1vYmplY3QtZmlsZSA8L2NvZGU+PHZhcj5maWxlPC92YXI+PGRkPlNwZWNpZnkgZWl0aGVyIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZ2NvdiBkYXRhIGZpbGVzLCBvciB0aGUKK29iamVjdCBwYXRoIG5hbWUuICBUaGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5nY25vPC9zcGFuPjwvc2FtcD4sIGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5nY2RhPC9zcGFuPjwvc2FtcD4gZGF0YSBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yIHVzaW5nIHRoaXMgb3B0aW9uLiAgSWYgYSBkaXJlY3RvcnkKK2lzIHNwZWNpZmllZCwgdGhlIGRhdGEgZmlsZXMgYXJlIGluIHRoYXQgZGlyZWN0b3J5IGFuZCBuYW1lZCBhZnRlciB0aGUKK2lucHV0IGZpbGUgbmFtZSwgd2l0aG91dCBpdHMgZXh0ZW5zaW9uLiAgSWYgYSBmaWxlIGlzIHNwZWNpZmllZCBoZXJlLAordGhlIGRhdGEgZmlsZXMgYXJlIG5hbWVkIGFmdGVyIHRoYXQgZmlsZSwgd2l0aG91dCBpdHMgZXh0ZW5zaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXMgPC9jb2RlPjx2YXI+ZGlyZWN0b3J5PC92YXI+PGR0Pjxjb2RlPi0tc291cmNlLXByZWZpeCA8L2NvZGU+PHZhcj5kaXJlY3Rvcnk8L3Zhcj48ZGQ+QSBwcmVmaXggZm9yIHNvdXJjZSBmaWxlIG5hbWVzIHRvIHJlbW92ZSB3aGVuIGdlbmVyYXRpbmcgdGhlIG91dHB1dAorY292ZXJhZ2UgZmlsZXMuICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBidWlsZGluZyBpbiBhIHNlcGFyYXRlCitkaXJlY3RvcnksIGFuZCB0aGUgcGF0aG5hbWUgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IHdhbnRlZCB3aGVuCitkZXRlcm1pbmluZyB0aGUgb3V0cHV0IGZpbGUgbmFtZXMuICBOb3RlIHRoYXQgdGhpcyBwcmVmaXggZGV0ZWN0aW9uIGlzCithcHBsaWVkIGJlZm9yZSBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBzb3VyY2UgZmlsZSBpcyBhYnNvbHV0ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi11PC9jb2RlPjxkdD48Y29kZT4tLXVuY29uZGl0aW9uYWwtYnJhbmNoZXM8L2NvZGU+PGRkPldoZW4gYnJhbmNoIHByb2JhYmlsaXRpZXMgYXJlIGdpdmVuLCBpbmNsdWRlIHRob3NlIG9mIHVuY29uZGl0aW9uYWwgYnJhbmNoZXMuIAorVW5jb25kaXRpb25hbCBicmFuY2hlcyBhcmUgbm9ybWFsbHkgbm90IGludGVyZXN0aW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWQ8L2NvZGU+PGR0Pjxjb2RlPi0tZGlzcGxheS1wcm9ncmVzczwvY29kZT48ZGQ+RGlzcGxheSB0aGUgcHJvZ3Jlc3Mgb24gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworIDwvZGw+CisKKyA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IHNob3VsZCBiZSBydW4gd2l0aCB0aGUgY3VycmVudCBkaXJlY3RvcnkgdGhlIHNhbWUgYXMgdGhhdAord2hlbiB5b3UgaW52b2tlZCB0aGUgY29tcGlsZXIuICBPdGhlcndpc2UgaXQgd2lsbCBub3QgYmUgYWJsZSB0byBsb2NhdGUKK3RoZSBzb3VyY2UgZmlsZXMuICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IHByb2R1Y2VzIGZpbGVzIGNhbGxlZAorPHNhbXA+PHZhcj5tYW5nbGVkbmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2Nvdjwvc3Bhbj48L3NhbXA+IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoZXNlIGNvbnRhaW4KK3RoZSBjb3ZlcmFnZSBpbmZvcm1hdGlvbiBvZiB0aGUgc291cmNlIGZpbGUgdGhleSBjb3JyZXNwb25kIHRvLiAKK09uZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Lmdjb3Y8L3NwYW4+PC9zYW1wPiBmaWxlIGlzIHByb2R1Y2VkIGZvciBlYWNoIHNvdXJjZSAob3IgaGVhZGVyKSBmaWxlCitjb250YWluaW5nIGNvZGUsCit3aGljaCB3YXMgY29tcGlsZWQgdG8gcHJvZHVjZSB0aGUgZGF0YSBmaWxlcy4gIFRoZSA8dmFyPm1hbmdsZWRuYW1lPC92YXI+IHBhcnQKK29mIHRoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIHVzdWFsbHkgc2ltcGx5IHRoZSBzb3VyY2UgZmlsZSBuYW1lLCBidXQgY2FuCitiZSBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZCBpZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMgYXJlCitnaXZlbi4gIFJlZmVyIHRvIHRob3NlIG9wdGlvbnMgZm9yIGRldGFpbHMuCisKKyA8cD5JZiB5b3UgaW52b2tlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gd2l0aCBtdWx0aXBsZSBpbnB1dCBmaWxlcywgdGhlCitjb250cmlidXRpb25zIGZyb20gZWFjaCBpbnB1dCBmaWxlIGFyZSBzdW1tZWQuICBUeXBpY2FsbHkgeW91IHdvdWxkCitpbnZva2UgaXQgd2l0aCB0aGUgc2FtZSBsaXN0IG9mIGZpbGVzIGFzIHRoZSBmaW5hbCBsaW5rIG9mIHlvdXIgZXhlY3V0YWJsZS4KKworIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Lmdjb3Y8L3NwYW4+PC9zYW1wPiBmaWxlcyBjb250YWluIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VwYXJhdGVkIGZpZWxkcyBhbG9uZyB3aXRoCitwcm9ncmFtIHNvdXJjZSBjb2RlLiAgVGhlIGZvcm1hdCBpcworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPHZhcj5leGVjdXRpb25fY291bnQ8L3Zhcj46PHZhcj5saW5lX251bWJlcjwvdmFyPjo8dmFyPnNvdXJjZSBsaW5lIHRleHQ8L3Zhcj4KKzwvcHJlPgorIDxwPkFkZGl0aW9uYWwgYmxvY2sgaW5mb3JtYXRpb24gbWF5IHN1Y2NlZWQgZWFjaCBsaW5lLCB3aGVuIHJlcXVlc3RlZCBieQorY29tbWFuZCBsaW5lIG9wdGlvbi4gIFRoZSA8dmFyPmV4ZWN1dGlvbl9jb3VudDwvdmFyPiBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi08L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIGxpbmVzCitjb250YWluaW5nIG5vIGNvZGUuICBVbmV4ZWN1dGVkIGxpbmVzIGFyZSBtYXJrZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jIyMjIzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PT09PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGV5IGFyZSByZWFjaGFibGUgYnkKK25vbi1leGNlcHRpb25hbCBwYXRocyBvciBvbmx5IGV4Y2VwdGlvbmFsIHBhdGhzIHN1Y2ggYXMgQysrIGV4Y2VwdGlvbgoraGFuZGxlcnMsIHJlc3BlY3RpdmVseS4KKworIDxwPlNvbWUgbGluZXMgb2YgaW5mb3JtYXRpb24gYXQgdGhlIHN0YXJ0IGhhdmUgPHZhcj5saW5lX251bWJlcjwvdmFyPiBvZiB6ZXJvLiAKK1RoZXNlIHByZWFtYmxlIGxpbmVzIGFyZSBvZiB0aGUgZm9ybQorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLTowOjx2YXI+dGFnPC92YXI+Ojx2YXI+dmFsdWU8L3Zhcj4KKzwvcHJlPgorIDxwPlRoZSBvcmRlcmluZyBhbmQgbnVtYmVyIG9mIHRoZXNlIHByZWFtYmxlIGxpbmVzIHdpbGwgYmUgYXVnbWVudGVkIGFzCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IGRldmVsb3BtZW50IHByb2dyZXNzZXMgJm1kYXNoOyBkbyBub3QgcmVseSBvbiB0aGVtIHJlbWFpbmluZwordW5jaGFuZ2VkLiAgVXNlIDx2YXI+dGFnPC92YXI+IHRvIGxvY2F0ZSBhIHBhcnRpY3VsYXIgcHJlYW1ibGUgbGluZS4KKworIDxwPlRoZSBhZGRpdGlvbmFsIGJsb2NrIGluZm9ybWF0aW9uIGlzIG9mIHRoZSBmb3JtCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8dmFyPnRhZzwvdmFyPiA8dmFyPmluZm9ybWF0aW9uPC92YXI+Cis8L3ByZT4KKyA8cD5UaGUgPHZhcj5pbmZvcm1hdGlvbjwvdmFyPiBpcyBodW1hbiByZWFkYWJsZSwgYnV0IGRlc2lnbmVkIHRvIGJlIHNpbXBsZQorZW5vdWdoIGZvciBtYWNoaW5lIHBhcnNpbmcgdG9vLgorCisgPHA+V2hlbiBwcmludGluZyBwZXJjZW50YWdlcywgMCUgYW5kIDEwMCUgYXJlIG9ubHkgcHJpbnRlZCB3aGVuIHRoZSB2YWx1ZXMKK2FyZSA8ZW0+ZXhhY3RseTwvZW0+IDAlIGFuZCAxMDAlIHJlc3BlY3RpdmVseS4gIE90aGVyIHZhbHVlcyB3aGljaCB3b3VsZAorY29udmVudGlvbmFsbHkgYmUgcm91bmRlZCB0byAwJSBvciAxMDAlIGFyZSBpbnN0ZWFkIHByaW50ZWQgYXMgdGhlCituZWFyZXN0IG5vbi1ib3VuZGFyeSB2YWx1ZS4KKworIDxwPldoZW4gdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiwgeW91IG11c3QgZmlyc3QgY29tcGlsZSB5b3VyIHByb2dyYW0gd2l0aCB0d28KK3NwZWNpYWwgR0NDIG9wdGlvbnM6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1RoaXMgdGVsbHMgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbmVlZGVkIGJ5CitnY292IChiYXNpY2FsbHkgYSBmbG93IGdyYXBoIG9mIHRoZSBwcm9ncmFtKSBhbmQgYWxzbyBpbmNsdWRlcworYWRkaXRpb25hbCBjb2RlIGluIHRoZSBvYmplY3QgZmlsZXMgZm9yIGdlbmVyYXRpbmcgdGhlIGV4dHJhIHByb2ZpbGluZworaW5mb3JtYXRpb24gbmVlZGVkIGJ5IGdjb3YuICBUaGVzZSBhZGRpdGlvbmFsIGZpbGVzIGFyZSBwbGFjZWQgaW4gdGhlCitkaXJlY3Rvcnkgd2hlcmUgdGhlIG9iamVjdCBmaWxlIGlzIGxvY2F0ZWQuCisKKyA8cD5SdW5uaW5nIHRoZSBwcm9ncmFtIHdpbGwgY2F1c2UgcHJvZmlsZSBvdXRwdXQgdG8gYmUgZ2VuZXJhdGVkLiAgRm9yIGVhY2gKK3NvdXJjZSBmaWxlIGNvbXBpbGVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWFyY3M8L3NwYW4+PC9zYW1wPiwgYW4gYWNjb21wYW55aW5nCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmdjZGE8L3NwYW4+PC9zYW1wPiBmaWxlIHdpbGwgYmUgcGxhY2VkIGluIHRoZSBvYmplY3QgZmlsZSBkaXJlY3RvcnkuCisKKyA8cD5SdW5uaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gd2l0aCB5b3VyIHByb2dyYW0ncyBzb3VyY2UgZmlsZSBuYW1lcyBhcyBhcmd1bWVudHMKK3dpbGwgbm93IHByb2R1Y2UgYSBsaXN0aW5nIG9mIHRoZSBjb2RlIGFsb25nIHdpdGggZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbgorZm9yIGVhY2ggbGluZS4gIEZvciBleGFtcGxlLCBpZiB5b3VyIHByb2dyYW0gaXMgY2FsbGVkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj50bXAuYzwvc3Bhbj48L3NhbXA+LCB0aGlzCitpcyB3aGF0IHlvdSBzZWUgd2hlbiB5b3UgdXNlIHRoZSBiYXNpYyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+IGZhY2lsaXR5OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgJCBnY2MgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIHRtcC5jCisgICAgICQgYS5vdXQKKyAgICAgJCBnY292IHRtcC5jCisgICAgIDkwLjAwJSBvZiAxMCBzb3VyY2UgbGluZXMgZXhlY3V0ZWQgaW4gZmlsZSB0bXAuYworICAgICBDcmVhdGluZyB0bXAuYy5nY292LgorPC9wcmU+CisgPHA+VGhlIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnRtcC5jLmdjb3Y8L3NwYW4+PC9zYW1wPiBjb250YWlucyBvdXRwdXQgZnJvbSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+LiAKK0hlcmUgaXMgYSBzYW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIC06ICAgIDA6U291cmNlOnRtcC5jCisgICAgICAgICAgICAgLTogICAgMDpHcmFwaDp0bXAuZ2NubworICAgICAgICAgICAgIC06ICAgIDA6RGF0YTp0bXAuZ2NkYQorICAgICAgICAgICAgIC06ICAgIDA6UnVuczoxCisgICAgICAgICAgICAgLTogICAgMDpQcm9ncmFtczoxCisgICAgICAgICAgICAgLTogICAgMTojaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgICAgICAgICAtOiAgICAyOgorICAgICAgICAgICAgIC06ICAgIDM6aW50IG1haW4gKHZvaWQpCisgICAgICAgICAgICAgMTogICAgNDp7CisgICAgICAgICAgICAgMTogICAgNTogIGludCBpLCB0b3RhbDsKKyAgICAgICAgICAgICAtOiAgICA2OgorICAgICAgICAgICAgIDE6ICAgIDc6ICB0b3RhbCA9IDA7CisgICAgICAgICAgICAgLTogICAgODoKKyAgICAgICAgICAgIDExOiAgICA5OiAgZm9yIChpID0gMDsgaSAmbHQ7IDEwOyBpKyspCisgICAgICAgICAgICAxMDogICAxMDogICAgdG90YWwgKz0gaTsKKyAgICAgICAgICAgICAtOiAgIDExOgorICAgICAgICAgICAgIDE6ICAgMTI6ICBpZiAodG90YWwgIT0gNDUpCisgICAgICAgICAjIyMjIzogICAxMzogICAgcHJpbnRmICgiRmFpbHVyZVxuIik7CisgICAgICAgICAgICAgLTogICAxNDogIGVsc2UKKyAgICAgICAgICAgICAxOiAgIDE1OiAgICBwcmludGYgKCJTdWNjZXNzXG4iKTsKKyAgICAgICAgICAgICAxOiAgIDE2OiAgcmV0dXJuIDA7CisgICAgICAgICAgICAgLTogICAxNzp9Cis8L3ByZT4KKyA8cD5XaGVuIHlvdSB1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCB5b3Ugd2lsbCBnZXQgaW5kaXZpZHVhbCBibG9jaworY291bnRzLCBhbmQgdGhlIG91dHB1dCBsb29rcyBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIC06ICAgIDA6U291cmNlOnRtcC5jCisgICAgICAgICAgICAgLTogICAgMDpHcmFwaDp0bXAuZ2NubworICAgICAgICAgICAgIC06ICAgIDA6RGF0YTp0bXAuZ2NkYQorICAgICAgICAgICAgIC06ICAgIDA6UnVuczoxCisgICAgICAgICAgICAgLTogICAgMDpQcm9ncmFtczoxCisgICAgICAgICAgICAgLTogICAgMTojaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgICAgICAgICAtOiAgICAyOgorICAgICAgICAgICAgIC06ICAgIDM6aW50IG1haW4gKHZvaWQpCisgICAgICAgICAgICAgMTogICAgNDp7CisgICAgICAgICAgICAgMTogICAgNC1ibG9jayAgMAorICAgICAgICAgICAgIDE6ICAgIDU6ICBpbnQgaSwgdG90YWw7CisgICAgICAgICAgICAgLTogICAgNjoKKyAgICAgICAgICAgICAxOiAgICA3OiAgdG90YWwgPSAwOworICAgICAgICAgICAgIC06ICAgIDg6CisgICAgICAgICAgICAxMTogICAgOTogIGZvciAoaSA9IDA7IGkgJmx0OyAxMDsgaSsrKQorICAgICAgICAgICAgMTE6ICAgIDktYmxvY2sgIDAKKyAgICAgICAgICAgIDEwOiAgIDEwOiAgICB0b3RhbCArPSBpOworICAgICAgICAgICAgMTA6ICAgMTAtYmxvY2sgIDAKKyAgICAgICAgICAgICAtOiAgIDExOgorICAgICAgICAgICAgIDE6ICAgMTI6ICBpZiAodG90YWwgIT0gNDUpCisgICAgICAgICAgICAgMTogICAxMi1ibG9jayAgMAorICAgICAgICAgIyMjIyM6ICAgMTM6ICAgIHByaW50ZiAoIkZhaWx1cmVcbiIpOworICAgICAgICAgJCQkJCQ6ICAgMTMtYmxvY2sgIDAKKyAgICAgICAgICAgICAtOiAgIDE0OiAgZWxzZQorICAgICAgICAgICAgIDE6ICAgMTU6ICAgIHByaW50ZiAoIlN1Y2Nlc3NcbiIpOworICAgICAgICAgICAgIDE6ICAgMTUtYmxvY2sgIDAKKyAgICAgICAgICAgICAxOiAgIDE2OiAgcmV0dXJuIDA7CisgICAgICAgICAgICAgMTogICAxNi1ibG9jayAgMAorICAgICAgICAgICAgIC06ICAgMTc6fQorPC9wcmU+CisgPHA+SW4gdGhpcyBtb2RlLCBlYWNoIGJhc2ljIGJsb2NrIGlzIG9ubHkgc2hvd24gb24gb25lIGxpbmUgJm5kYXNoOyB0aGUgbGFzdAorbGluZSBvZiB0aGUgYmxvY2suICBBIG11bHRpLWxpbmUgYmxvY2sgd2lsbCBvbmx5IGNvbnRyaWJ1dGUgdG8gdGhlCitleGVjdXRpb24gY291bnQgb2YgdGhhdCBsYXN0IGxpbmUsIGFuZCBvdGhlciBsaW5lcyB3aWxsIG5vdCBiZSBzaG93bgordG8gY29udGFpbiBjb2RlLCB1bmxlc3MgcHJldmlvdXMgYmxvY2tzIGVuZCBvbiB0aG9zZSBsaW5lcy4gCitUaGUgdG90YWwgZXhlY3V0aW9uIGNvdW50IG9mIGEgbGluZSBpcyBzaG93biBhbmQgc3Vic2VxdWVudCBsaW5lcyBzaG93Cit0aGUgZXhlY3V0aW9uIGNvdW50cyBmb3IgaW5kaXZpZHVhbCBibG9ja3MgdGhhdCBlbmQgb24gdGhhdCBsaW5lLiAgQWZ0ZXIgZWFjaAorYmxvY2ssIHRoZSBicmFuY2ggYW5kIGNhbGwgY291bnRzIG9mIHRoZSBibG9jayB3aWxsIGJlIHNob3duLCBpZiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1iPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIGdpdmVuLgorCisgPHA+QmVjYXVzZSBvZiB0aGUgd2F5IEdDQyBpbnN0cnVtZW50cyBjYWxscywgYSBjYWxsIGNvdW50IGNhbiBiZSBzaG93bgorYWZ0ZXIgYSBsaW5lIHdpdGggbm8gaW5kaXZpZHVhbCBibG9ja3MuIAorQXMgeW91IGNhbiBzZWUsIGxpbmUgMTMgY29udGFpbnMgYSBiYXNpYyBibG9jayB0aGF0IHdhcyBub3QgZXhlY3V0ZWQuCisKKyA8cD5XaGVuIHlvdSB1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1iPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCB5b3VyIG91dHB1dCBsb29rcyBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAkIGdjb3YgLWIgdG1wLmMKKyAgICAgOTAuMDAlIG9mIDEwIHNvdXJjZSBsaW5lcyBleGVjdXRlZCBpbiBmaWxlIHRtcC5jCisgICAgIDgwLjAwJSBvZiA1IGJyYW5jaGVzIGV4ZWN1dGVkIGluIGZpbGUgdG1wLmMKKyAgICAgODAuMDAlIG9mIDUgYnJhbmNoZXMgdGFrZW4gYXQgbGVhc3Qgb25jZSBpbiBmaWxlIHRtcC5jCisgICAgIDUwLjAwJSBvZiAyIGNhbGxzIGV4ZWN1dGVkIGluIGZpbGUgdG1wLmMKKyAgICAgQ3JlYXRpbmcgdG1wLmMuZ2Nvdi4KKzwvcHJlPgorIDxwPkhlcmUgaXMgYSBzYW1wbGUgb2YgYSByZXN1bHRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnRtcC5jLmdjb3Y8L3NwYW4+PC9zYW1wPiBmaWxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAtOiAgICAwOlNvdXJjZTp0bXAuYworICAgICAgICAgICAgIC06ICAgIDA6R3JhcGg6dG1wLmdjbm8KKyAgICAgICAgICAgICAtOiAgICAwOkRhdGE6dG1wLmdjZGEKKyAgICAgICAgICAgICAtOiAgICAwOlJ1bnM6MQorICAgICAgICAgICAgIC06ICAgIDA6UHJvZ3JhbXM6MQorICAgICAgICAgICAgIC06ICAgIDE6I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgICAgICAgICAgLTogICAgMjoKKyAgICAgICAgICAgICAtOiAgICAzOmludCBtYWluICh2b2lkKQorICAgICBmdW5jdGlvbiBtYWluIGNhbGxlZCAxIHJldHVybmVkIDEgYmxvY2tzIGV4ZWN1dGVkIDc1JQorICAgICAgICAgICAgIDE6ICAgIDQ6eworICAgICAgICAgICAgIDE6ICAgIDU6ICBpbnQgaSwgdG90YWw7CisgICAgICAgICAgICAgLTogICAgNjoKKyAgICAgICAgICAgICAxOiAgICA3OiAgdG90YWwgPSAwOworICAgICAgICAgICAgIC06ICAgIDg6CisgICAgICAgICAgICAxMTogICAgOTogIGZvciAoaSA9IDA7IGkgJmx0OyAxMDsgaSsrKQorICAgICBicmFuY2ggIDAgdGFrZW4gOTElIChmYWxsdGhyb3VnaCkKKyAgICAgYnJhbmNoICAxIHRha2VuIDklCisgICAgICAgICAgICAxMDogICAxMDogICAgdG90YWwgKz0gaTsKKyAgICAgICAgICAgICAtOiAgIDExOgorICAgICAgICAgICAgIDE6ICAgMTI6ICBpZiAodG90YWwgIT0gNDUpCisgICAgIGJyYW5jaCAgMCB0YWtlbiAwJSAoZmFsbHRocm91Z2gpCisgICAgIGJyYW5jaCAgMSB0YWtlbiAxMDAlCisgICAgICAgICAjIyMjIzogICAxMzogICAgcHJpbnRmICgiRmFpbHVyZVxuIik7CisgICAgIGNhbGwgICAgMCBuZXZlciBleGVjdXRlZAorICAgICAgICAgICAgIC06ICAgMTQ6ICBlbHNlCisgICAgICAgICAgICAgMTogICAxNTogICAgcHJpbnRmICgiU3VjY2Vzc1xuIik7CisgICAgIGNhbGwgICAgMCBjYWxsZWQgMSByZXR1cm5lZCAxMDAlCisgICAgICAgICAgICAgMTogICAxNjogIHJldHVybiAwOworICAgICAgICAgICAgIC06ICAgMTc6fQorPC9wcmU+CisgPHA+Rm9yIGVhY2ggZnVuY3Rpb24sIGEgbGluZSBpcyBwcmludGVkIHNob3dpbmcgaG93IG1hbnkgdGltZXMgdGhlIGZ1bmN0aW9uCitpcyBjYWxsZWQsIGhvdyBtYW55IHRpbWVzIGl0IHJldHVybnMgYW5kIHdoYXQgcGVyY2VudGFnZSBvZiB0aGUKK2Z1bmN0aW9uJ3MgYmxvY2tzIHdlcmUgZXhlY3V0ZWQuCisKKyA8cD5Gb3IgZWFjaCBiYXNpYyBibG9jaywgYSBsaW5lIGlzIHByaW50ZWQgYWZ0ZXIgdGhlIGxhc3QgbGluZSBvZiB0aGUgYmFzaWMKK2Jsb2NrIGRlc2NyaWJpbmcgdGhlIGJyYW5jaCBvciBjYWxsIHRoYXQgZW5kcyB0aGUgYmFzaWMgYmxvY2suICBUaGVyZSBjYW4KK2JlIG11bHRpcGxlIGJyYW5jaGVzIGFuZCBjYWxscyBsaXN0ZWQgZm9yIGEgc2luZ2xlIHNvdXJjZSBsaW5lIGlmIHRoZXJlCithcmUgbXVsdGlwbGUgYmFzaWMgYmxvY2tzIHRoYXQgZW5kIG9uIHRoYXQgbGluZS4gIEluIHRoaXMgY2FzZSwgdGhlCiticmFuY2hlcyBhbmQgY2FsbHMgYXJlIGVhY2ggZ2l2ZW4gYSBudW1iZXIuICBUaGVyZSBpcyBubyBzaW1wbGUgd2F5IHRvIG1hcAordGhlc2UgYnJhbmNoZXMgYW5kIGNhbGxzIGJhY2sgdG8gc291cmNlIGNvbnN0cnVjdHMuICBJbiBnZW5lcmFsLCB0aG91Z2gsCit0aGUgbG93ZXN0IG51bWJlcmVkIGJyYW5jaCBvciBjYWxsIHdpbGwgY29ycmVzcG9uZCB0byB0aGUgbGVmdG1vc3QgY29uc3RydWN0CitvbiB0aGUgc291cmNlIGxpbmUuCisKKyA8cD5Gb3IgYSBicmFuY2gsIGlmIGl0IHdhcyBleGVjdXRlZCBhdCBsZWFzdCBvbmNlLCB0aGVuIGEgcGVyY2VudGFnZQoraW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBicmFuY2ggd2FzIHRha2VuIGRpdmlkZWQgYnkgdGhlCitudW1iZXIgb2YgdGltZXMgdGhlIGJyYW5jaCB3YXMgZXhlY3V0ZWQgd2lsbCBiZSBwcmludGVkLiAgT3RoZXJ3aXNlLCB0aGUKK21lc3NhZ2UgJmxkcXVvO25ldmVyIGV4ZWN1dGVkJnJkcXVvOyBpcyBwcmludGVkLgorCisgPHA+Rm9yIGEgY2FsbCwgaWYgaXQgd2FzIGV4ZWN1dGVkIGF0IGxlYXN0IG9uY2UsIHRoZW4gYSBwZXJjZW50YWdlCitpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGwgcmV0dXJuZWQgZGl2aWRlZCBieSB0aGUgbnVtYmVyCitvZiB0aW1lcyB0aGUgY2FsbCB3YXMgZXhlY3V0ZWQgd2lsbCBiZSBwcmludGVkLiAgVGhpcyB3aWxsIHVzdWFsbHkgYmUKKzEwMCUsIGJ1dCBtYXkgYmUgbGVzcyBmb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCA8Y29kZT5leGl0PC9jb2RlPiBvciA8Y29kZT5sb25nam1wPC9jb2RlPiwKK2FuZCB0aHVzIG1heSBub3QgcmV0dXJuIGV2ZXJ5IHRpbWUgdGhleSBhcmUgY2FsbGVkLgorCisgPHA+VGhlIGV4ZWN1dGlvbiBjb3VudHMgYXJlIGN1bXVsYXRpdmUuICBJZiB0aGUgZXhhbXBsZSBwcm9ncmFtIHdlcmUKK2V4ZWN1dGVkIGFnYWluIHdpdGhvdXQgcmVtb3ZpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2NkYTwvc3Bhbj48L3NhbXA+IGZpbGUsIHRoZSBjb3VudCBmb3IgdGhlCitudW1iZXIgb2YgdGltZXMgZWFjaCBsaW5lIGluIHRoZSBzb3VyY2Ugd2FzIGV4ZWN1dGVkIHdvdWxkIGJlIGFkZGVkIHRvCit0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgcnVuKHMpLiAgVGhpcyBpcyBwb3RlbnRpYWxseSB1c2VmdWwgaW4KK3NldmVyYWwgd2F5cy4gIEZvciBleGFtcGxlLCBpdCBjb3VsZCBiZSB1c2VkIHRvIGFjY3VtdWxhdGUgZGF0YSBvdmVyIGEKK251bWJlciBvZiBwcm9ncmFtIHJ1bnMgYXMgcGFydCBvZiBhIHRlc3QgdmVyaWZpY2F0aW9uIHN1aXRlLCBvciB0bworcHJvdmlkZSBtb3JlIGFjY3VyYXRlIGxvbmctdGVybSBpbmZvcm1hdGlvbiBvdmVyIGEgbGFyZ2UgbnVtYmVyIG9mCitwcm9ncmFtIHJ1bnMuCisKKyA8cD5UaGUgZGF0YSBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5nY2RhPC9zcGFuPjwvc2FtcD4gZmlsZXMgaXMgc2F2ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBwcm9ncmFtCitleGl0cy4gIEZvciBlYWNoIHNvdXJjZSBmaWxlIGNvbXBpbGVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWFyY3M8L3NwYW4+PC9zYW1wPiwgdGhlCitwcm9maWxpbmcgY29kZSBmaXJzdCBhdHRlbXB0cyB0byByZWFkIGluIGFuIGV4aXN0aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2NkYTwvc3Bhbj48L3NhbXA+IGZpbGU7IGlmCit0aGUgZmlsZSBkb2Vzbid0IG1hdGNoIHRoZSBleGVjdXRhYmxlIChkaWZmZXJpbmcgbnVtYmVyIG9mIGJhc2ljIGJsb2NrCitjb3VudHMpIGl0IHdpbGwgaWdub3JlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIEl0IHRoZW4gYWRkcyBpbiB0aGUKK25ldyBleGVjdXRpb24gY291bnRzIGFuZCBmaW5hbGx5IHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgZmlsZS4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvSmF2YS1FeGNlcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0phdmEtRXhjZXB0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjZiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0phdmEtRXhjZXB0aW9ucy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkphdmEgRXhjZXB0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyIgdGl0bGU9IkMrKyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVHlwZS1UcmFpdHMuaHRtbCNUeXBlLVRyYWl0cyIgdGl0bGU9IlR5cGUgVHJhaXRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGVwcmVjYXRlZC1GZWF0dXJlcy5odG1sI0RlcHJlY2F0ZWQtRmVhdHVyZXMiIHRpdGxlPSJEZXByZWNhdGVkIEZlYXR1cmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkphdmEtRXhjZXB0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEZXByZWNhdGVkLUZlYXR1cmVzLmh0bWwjRGVwcmVjYXRlZC1GZWF0dXJlcyI+RGVwcmVjYXRlZCBGZWF0dXJlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlR5cGUtVHJhaXRzLmh0bWwjVHlwZS1UcmFpdHMiPlR5cGUgVHJhaXRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiPkMrKyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMSBKYXZhIEV4Y2VwdGlvbnM8L2gzPgorCis8cD5UaGUgSmF2YSBsYW5ndWFnZSB1c2VzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGV4Y2VwdGlvbiBoYW5kbGluZyBtb2RlbAorZnJvbSBDKysuICBOb3JtYWxseSwgR05VIEMrKyBhdXRvbWF0aWNhbGx5IGRldGVjdHMgd2hlbiB5b3UgYXJlCit3cml0aW5nIEMrKyBjb2RlIHRoYXQgdXNlcyBKYXZhIGV4Y2VwdGlvbnMsIGFuZCBoYW5kbGUgdGhlbQorYXBwcm9wcmlhdGVseS4gIEhvd2V2ZXIsIGlmIEMrKyBjb2RlIG9ubHkgbmVlZHMgdG8gZXhlY3V0ZSBkZXN0cnVjdG9ycword2hlbiBKYXZhIGV4Y2VwdGlvbnMgYXJlIHRocm93biB0aHJvdWdoIGl0LCBHQ0MgZ3Vlc3NlcyBpbmNvcnJlY3RseS4gCitTYW1wbGUgcHJvYmxlbWF0aWMgY29kZSBpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgc3RydWN0IFMgeyB+UygpOyB9OworICAgICAgIGV4dGVybiB2b2lkIGJhcigpOyAgICAvLyA8c3BhbiBjbGFzcz0icm9tYW4iPmlzIHdyaXR0ZW4gaW4gSmF2YSwgYW5kIG1heSB0aHJvdyBleGNlcHRpb25zPC9zcGFuPgorICAgICAgIHZvaWQgZm9vKCkKKyAgICAgICB7CisgICAgICAgICBTIHM7CisgICAgICAgICBiYXIoKTsKKyAgICAgICB9Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZSB1c3VhbCBlZmZlY3Qgb2YgYW4gaW5jb3JyZWN0IGd1ZXNzIGlzIGEgbGluayBmYWlsdXJlLCBjb21wbGFpbmluZyBvZgorYSBtaXNzaW5nIHJvdXRpbmUgY2FsbGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19neHhfcGVyc29uYWxpdHlfdjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyA8cD5Zb3UgY2FuIGluZm9ybSB0aGUgY29tcGlsZXIgdGhhdCBKYXZhIGV4Y2VwdGlvbnMgYXJlIHRvIGJlIHVzZWQgaW4gYQordHJhbnNsYXRpb24gdW5pdCwgaXJyZXNwZWN0aXZlIG9mIHdoYXQgaXQgbWlnaHQgdGhpbmssIGJ5IHdyaXRpbmcKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSZuYnNwO0dDQyZuYnNwO2phdmFfZXhjZXB0aW9uczwhLS0gL0B3IC0tPjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdCB0aGUgaGVhZCBvZiB0aGUgZmlsZS4gIFRoaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtdXN0IGFwcGVhciBiZWZvcmUgYW55IGZ1bmN0aW9ucyB0aGF0IHRocm93IG9yIGNhdGNoCitleGNlcHRpb25zLCBvciBydW4gZGVzdHJ1Y3RvcnMgd2hlbiBleGNlcHRpb25zIGFyZSB0aHJvd24gdGhyb3VnaCB0aGVtLgorCisgPHA+WW91IGNhbm5vdCBtaXggSmF2YSBhbmQgQysrIGV4Y2VwdGlvbnMgaW4gdGhlIHNhbWUgdHJhbnNsYXRpb24gdW5pdC4gIEl0CitpcyBiZWxpZXZlZCB0byBiZSBzYWZlIHRvIHRocm93IGEgQysrIGV4Y2VwdGlvbiBmcm9tIG9uZSBmaWxlIHRocm91Z2gKK2Fub3RoZXIgZmlsZSBjb21waWxlZCBmb3IgdGhlIEphdmEgZXhjZXB0aW9uIG1vZGVsLCBvciB2aWNlIHZlcnNhLCBidXQKK3RoZXJlIG1heSBiZSBidWdzIGluIHRoaXMgYXJlYS4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvS2V5d29yZC1JbmRleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9LZXl3b3JkLUluZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0ODNjNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvS2V5d29yZC1JbmRleC5odG1sCkBAIC0wLDAgKzEsMTQ2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+S2V5d29yZCBJbmRleCAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik9wdGlvbi1JbmRleC5odG1sI09wdGlvbi1JbmRleCIgdGl0bGU9Ik9wdGlvbiBJbmRleCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJLZXl3b3JkLUluZGV4Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4Ij5PcHRpb24gSW5kZXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+S2V5d29yZCBJbmRleDwvaDI+CisKKworCis8dWwgY2xhc3M9ImluZGV4LWNwIiBjb21wYWN0PgorPGxpPjxhIGhyZWY9Ik11bHRpXzAwMmRBbHRlcm5hdGl2ZS5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMjFfMDA3ZC1pbi1jb25zdHJhaW50LTI4NDgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ITwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iTXVsdGlfMDAyZEFsdGVybmF0aXZlLmh0bWwjTXVsdGlfMDAyZEFsdGVybmF0aXZlIj5NdWx0aS1BbHRlcm5hdGl2ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1vZGlmaWVycy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMjNfMDA3ZC1pbi1jb25zdHJhaW50LTI4NTciPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iTW9kaWZpZXJzLmh0bWwjTW9kaWZpZXJzIj5Nb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmFnbWFzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyM3ByYWdtYV8wMDdkLTM0NTIiPjxjb2RlPiNwcmFnbWE8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1JbnRlcmZhY2UuaHRtbCNpbmRleC1nX3RfMDAyM3ByYWdtYS1pbXBsZW1lbnRhdGlvbi0zNTA5Ij48Y29kZT4jcHJhZ21hIGltcGxlbWVudGF0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sI0NfMDAyYl8wMDJiLUludGVyZmFjZSI+QysrIEludGVyZmFjZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjNwcmFnbWEtaW1wbGVtZW50YXRpb25fMDA3ZF8wMDJjLWltcGxpZWQtMzUxMSI+PGNvZGU+I3ByYWdtYSBpbXBsZW1lbnRhdGlvbjwvY29kZT4sIGltcGxpZWQ8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1JbnRlcmZhY2UuaHRtbCNDXzAwMmJfMDAyYi1JbnRlcmZhY2UiPkMrKyBJbnRlcmZhY2U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1JbnRlcmZhY2UuaHRtbCNpbmRleC1nX3RfMDAyM3ByYWdtYS1pbnRlcmZhY2UtMzUwOCI+PGNvZGU+I3ByYWdtYSBpbnRlcmZhY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjNwcmFnbWFfMDA3ZF8wMDJjLXJlYXNvbi1mb3Itbm90LXVzaW5nLTI3NDMiPjxjb2RlPiNwcmFnbWE8L2NvZGU+LCByZWFzb24gZm9yIG5vdCB1c2luZzwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRG9sbGFyLVNpZ25zLmh0bWwjaW5kZXgtZ190XzAwMjQtMjc1MiI+JDwvYT46IDxhIGhyZWY9IkRvbGxhci1TaWducy5odG1sI0RvbGxhci1TaWducyI+RG9sbGFyIFNpZ25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTW9kaWZpZXJzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyNV8wMDdkLWluLWNvbnN0cmFpbnQtMjg1NiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQ8L2E+OiA8YSBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiPk1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwZWMtRmlsZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI1aW5jbHVkZV8wMDdkLTEwNjYiPjxjb2RlPiVpbmNsdWRlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNwZWMtRmlsZXMuaHRtbCNTcGVjLUZpbGVzIj5TcGVjIEZpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BlYy1GaWxlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjVpbmNsdWRlXzAwNWZub2Vycl8wMDdkLTEwNjciPjxjb2RlPiVpbmNsdWRlX25vZXJyPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNwZWMtRmlsZXMuaHRtbCNTcGVjLUZpbGVzIj5TcGVjIEZpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3BlYy1GaWxlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjVyZW5hbWVfMDA3ZC0xMDY4Ij48Y29kZT4lcmVuYW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNwZWMtRmlsZXMuaHRtbCNTcGVjLUZpbGVzIj5TcGVjIEZpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTW9kaWZpZXJzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyNl8wMDdkLWluLWNvbnN0cmFpbnQtMjg1NCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mYW1wOzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iTW9kaWZpZXJzLmh0bWwjTW9kaWZpZXJzIj5Nb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjdfMDA3ZC0zNTU1Ij48Y29kZT4nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTW9kaWZpZXJzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyYV8wMDdkLWluLWNvbnN0cmFpbnQtMjg1OCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQ8L2E+OiA8YSBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiPk1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwMmFfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmYXNzdW1lXzAwNWZhbGlnbmVkLTMzNTciPjxjb2RlPipfX2J1aWx0aW5fYXNzdW1lX2FsaWduZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNb2RpZmllcnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJiXzAwN2QtaW4tY29uc3RyYWludC0yODUzIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPis8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gY29uc3RyYWludDwvYT46IDxhIGhyZWY9Ik1vZGlmaWVycy5odG1sI01vZGlmaWVycyI+TW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkbGdjY18wMDdkXzAwMmMtdXNlLXdpdGgtXzAwNDBvcHRpb25fMDA3Yl8wMDJkbm9kZWZhdWx0bGlic18wMDdkLTEwMzgiPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sZ2NjPC9zcGFuPjwvc2FtcD4sIHVzZSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub2RlZmF1bHRsaWJzPC9zcGFuPjwvc2FtcD48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZGxnY2NfMDA3ZF8wMDJjLXVzZS13aXRoLV8wMDQwb3B0aW9uXzAwN2JfMDAyZG5vc3RkbGliXzAwN2QtMTAzNSI+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWxnY2M8L3NwYW4+PC9zYW1wPiwgdXNlIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW5vc3RkbGliPC9zcGFuPjwvc2FtcD48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZG1hcmNoXzAwN2QtZmVhdHVyZS1tb2RpZmllcnMtMTA5NCI+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gZmVhdHVyZSBtb2RpZmllcnM8L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZG1jcHVfMDA3ZC1mZWF0dXJlLW1vZGlmaWVycy0xMDk1Ij48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdTwvc3Bhbj48L3NhbXA+IGZlYXR1cmUgbW9kaWZpZXJzPC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRub2RlZmF1bHRsaWJzXzAwN2QtYW5kLXVucmVzb2x2ZWQtcmVmZXJlbmNlcy0xMDM5Ij48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9kZWZhdWx0bGliczwvc3Bhbj48L3NhbXA+IGFuZCB1bnJlc29sdmVkIHJlZmVyZW5jZXM8L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZG5vc3RkbGliXzAwN2QtYW5kLXVucmVzb2x2ZWQtcmVmZXJlbmNlcy0xMDM2Ij48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9zdGRsaWI8L3NwYW4+PC9zYW1wPiBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzPC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmVzZGF0YV8wMDJmXzAwMmVzZGF0YTItcmVmZXJlbmNlcy1fMDAyOFBvd2VyUENfMDAyOS0yMDQxIj4uc2RhdGEvLnNkYXRhMiByZWZlcmVuY2VzIChQb3dlclBDKTwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1Db21tZW50cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMmZfMDAyZl8wMDdkLTI3NDkiPjxjb2RlPi8vPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLUNvbW1lbnRzLmh0bWwjQ18wMDJiXzAwMmItQ29tbWVudHMiPkMrKyBDb21tZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiMF8wMDdkLWluLWNvbnN0cmFpbnQtMjgzNCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQ8L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwM2NfMDA3ZC1pbi1jb25zdHJhaW50LTI4MTkiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNb2RpZmllcnMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDNkXzAwN2QtaW4tY29uc3RyYWludC0yODUyIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj08L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gY29uc3RyYWludDwvYT46IDxhIGhyZWY9Ik1vZGlmaWVycy5odG1sI01vZGlmaWVycyI+TW9kaWZpZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAzZV8wMDdkLWluLWNvbnN0cmFpbnQtMjgyMCI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQ8L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik11bHRpXzAwMmRBbHRlcm5hdGl2ZS5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwM2ZfMDA3ZC1pbi1jb25zdHJhaW50LTI4NDYiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Pzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iTXVsdGlfMDAyZEFsdGVybmF0aXZlLmh0bWwjTXVsdGlfMDAyZEFsdGVybmF0aXZlIj5NdWx0aS1BbHRlcm5hdGl2ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwM2ZfMDAzYV8wMDdkLWV4dGVuc2lvbnMtMjQzNCI+PGNvZGU+Pzo8L2NvZGU+IGV4dGVuc2lvbnM8L2E+OiA8YSBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiPkNvbmRpdGlvbmFsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwM2ZfMDAzYV8wMDdkLXNpZGUtZWZmZWN0LTI0MzYiPjxjb2RlPj86PC9jb2RlPiBzaWRlIGVmZmVjdDwvYT46IDxhIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyI+Q29uZGl0aW9uYWxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVHlwZW9mLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDA1Zl8wMDdkLWluLXZhcmlhYmxlcy1pbi1tYWNyb3MtMjQyNiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIHZhcmlhYmxlcyBpbiBtYWNyb3M8L2E+OiA8YSBocmVmPSJUeXBlb2YuaHRtbCNUeXBlb2YiPlR5cGVvZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZhZGRfMDA1ZmZldGNoLTI5MTYiPjxjb2RlPl9fYXRvbWljX2FkZF9mZXRjaDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmYWx3YXlzXzAwNWZsb2NrXzAwNWZmcmVlLTI5MzIiPjxjb2RlPl9fYXRvbWljX2Fsd2F5c19sb2NrX2ZyZWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZmFuZF8wMDVmZmV0Y2gtMjkxOCI+PGNvZGU+X19hdG9taWNfYW5kX2ZldGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZjbGVhci0yOTI5Ij48Y29kZT5fX2F0b21pY19jbGVhcjwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmY29tcGFyZV8wMDVmZXhjaGFuZ2UtMjkxNSI+PGNvZGU+X19hdG9taWNfY29tcGFyZV9leGNoYW5nZTwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmY29tcGFyZV8wMDVmZXhjaGFuZ2VfMDA1Zm4tMjkxNCI+PGNvZGU+X19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZleGNoYW5nZS0yOTEzIj48Y29kZT5fX2F0b21pY19leGNoYW5nZTwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmZXhjaGFuZ2VfMDA1Zm4tMjkxMiI+PGNvZGU+X19hdG9taWNfZXhjaGFuZ2VfbjwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmZmV0Y2hfMDA1ZmFkZC0yOTIyIj48Y29kZT5fX2F0b21pY19mZXRjaF9hZGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZmZldGNoXzAwNWZhbmQtMjkyNCI+PGNvZGU+X19hdG9taWNfZmV0Y2hfYW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZmZXRjaF8wMDVmbmFuZC0yOTI3Ij48Y29kZT5fX2F0b21pY19mZXRjaF9uYW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZmZXRjaF8wMDVmb3ItMjkyNiI+PGNvZGU+X19hdG9taWNfZmV0Y2hfb3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZmZldGNoXzAwNWZzdWItMjkyMyI+PGNvZGU+X19hdG9taWNfZmV0Y2hfc3ViPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZmZXRjaF8wMDVmeG9yLTI5MjUiPjxjb2RlPl9fYXRvbWljX2ZldGNoX3hvcjwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmaXNfMDA1ZmxvY2tfMDA1ZmZyZWUtMjkzMyI+PGNvZGU+X19hdG9taWNfaXNfbG9ja19mcmVlPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZsb2FkLTI5MDkiPjxjb2RlPl9fYXRvbWljX2xvYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZmxvYWRfMDA1Zm4tMjkwOCI+PGNvZGU+X19hdG9taWNfbG9hZF9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZuYW5kXzAwNWZmZXRjaC0yOTIxIj48Y29kZT5fX2F0b21pY19uYW5kX2ZldGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZvcl8wMDVmZmV0Y2gtMjkyMCI+PGNvZGU+X19hdG9taWNfb3JfZmV0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZnNpZ25hbF8wMDVmZmVuY2UtMjkzMSI+PGNvZGU+X19hdG9taWNfc2lnbmFsX2ZlbmNlPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZzdG9yZS0yOTExIj48Y29kZT5fX2F0b21pY19zdG9yZTwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmc3RvcmVfMDA1Zm4tMjkxMCI+PGNvZGU+X19hdG9taWNfc3RvcmVfbjwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmc3ViXzAwNWZmZXRjaC0yOTE3Ij48Y29kZT5fX2F0b21pY19zdWJfZmV0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZnRlc3RfMDA1ZmFuZF8wMDVmc2V0LTI5MjgiPjxjb2RlPl9fYXRvbWljX3Rlc3RfYW5kX3NldDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmdGhyZWFkXzAwNWZmZW5jZS0yOTMwIj48Y29kZT5fX2F0b21pY190aHJlYWRfZmVuY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1Znhvcl8wMDVmZmV0Y2gtMjkxOSI+PGNvZGU+X19hdG9taWNfeG9yX2ZldGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZjbGVhcl8wMDVmY2FjaGUtMzM2MSI+PGNvZGU+X19idWlsdGluX19fY2xlYXJfY2FjaGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmZnByaW50Zl8wMDVmY2hrLTI5NTAiPjxjb2RlPl9fYnVpbHRpbl9fX2ZwcmludGZfY2hrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjT2JqZWN0LVNpemUtQ2hlY2tpbmciPk9iamVjdCBTaXplIENoZWNraW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1Zm1lbWNweV8wMDVmY2hrLTI5MzUiPjxjb2RlPl9fYnVpbHRpbl9fX21lbWNweV9jaGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmbWVtbW92ZV8wMDVmY2hrLTI5MzciPjxjb2RlPl9fYnVpbHRpbl9fX21lbW1vdmVfY2hrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjT2JqZWN0LVNpemUtQ2hlY2tpbmciPk9iamVjdCBTaXplIENoZWNraW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1Zm1lbXBjcHlfMDA1ZmNoay0yOTM2Ij48Y29kZT5fX2J1aWx0aW5fX19tZW1wY3B5X2NoazwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI09iamVjdC1TaXplLUNoZWNraW5nIj5PYmplY3QgU2l6ZSBDaGVja2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZtZW1zZXRfMDA1ZmNoay0yOTM4Ij48Y29kZT5fX2J1aWx0aW5fX19tZW1zZXRfY2hrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjT2JqZWN0LVNpemUtQ2hlY2tpbmciPk9iamVjdCBTaXplIENoZWNraW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnByaW50Zl8wMDVmY2hrLTI5NDgiPjxjb2RlPl9fYnVpbHRpbl9fX3ByaW50Zl9jaGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmc25wcmludGZfMDA1ZmNoay0yOTQ1Ij48Y29kZT5fX2J1aWx0aW5fX19zbnByaW50Zl9jaGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmc3ByaW50Zl8wMDVmY2hrLTI5NDQiPjxjb2RlPl9fYnVpbHRpbl9fX3NwcmludGZfY2hrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjT2JqZWN0LVNpemUtQ2hlY2tpbmciPk9iamVjdCBTaXplIENoZWNraW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnN0cGNweV8wMDVmY2hrLTI5NDAiPjxjb2RlPl9fYnVpbHRpbl9fX3N0cGNweV9jaGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmc3RyY2F0XzAwNWZjaGstMjk0MiI+PGNvZGU+X19idWlsdGluX19fc3RyY2F0X2NoazwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI09iamVjdC1TaXplLUNoZWNraW5nIj5PYmplY3QgU2l6ZSBDaGVja2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZzdHJjcHlfMDA1ZmNoay0yOTM5Ij48Y29kZT5fX2J1aWx0aW5fX19zdHJjcHlfY2hrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjT2JqZWN0LVNpemUtQ2hlY2tpbmciPk9iamVjdCBTaXplIENoZWNraW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnN0cm5jYXRfMDA1ZmNoay0yOTQzIj48Y29kZT5fX2J1aWx0aW5fX19zdHJuY2F0X2NoazwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI09iamVjdC1TaXplLUNoZWNraW5nIj5PYmplY3QgU2l6ZSBDaGVja2luZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZzdHJuY3B5XzAwNWZjaGstMjk0MSI+PGNvZGU+X19idWlsdGluX19fc3RybmNweV9jaGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmdmZwcmludGZfMDA1ZmNoay0yOTUxIj48Y29kZT5fX2J1aWx0aW5fX192ZnByaW50Zl9jaGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmdnByaW50Zl8wMDVmY2hrLTI5NDkiPjxjb2RlPl9fYnVpbHRpbl9fX3ZwcmludGZfY2hrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjT2JqZWN0LVNpemUtQ2hlY2tpbmciPk9iamVjdCBTaXplIENoZWNraW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnZzbnByaW50Zl8wMDVmY2hrLTI5NDciPjxjb2RlPl9fYnVpbHRpbl9fX3ZzbnByaW50Zl9jaGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3QtU2l6ZS1DaGVja2luZy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmdnNwcmludGZfMDA1ZmNoay0yOTQ2Ij48Y29kZT5fX2J1aWx0aW5fX192c3ByaW50Zl9jaGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25zdHJ1Y3RpbmctQ2FsbHMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmYXBwbHktMjQxOCI+PGNvZGU+X19idWlsdGluX2FwcGx5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvbnN0cnVjdGluZy1DYWxscy5odG1sI0NvbnN0cnVjdGluZy1DYWxscyI+Q29uc3RydWN0aW5nIENhbGxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmFwcGx5XzAwNWZhcmdzLTI0MTciPjxjb2RlPl9fYnVpbHRpbl9hcHBseV9hcmdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvbnN0cnVjdGluZy1DYWxscy5odG1sI0NvbnN0cnVjdGluZy1DYWxscyI+Q29uc3RydWN0aW5nIENhbGxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmYnN3YXAxNi0zNDA0Ij48Y29kZT5fX2J1aWx0aW5fYnN3YXAxNjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmJzd2FwMzItMzQwNSI+PGNvZGU+X19idWlsdGluX2Jzd2FwMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZic3dhcDY0LTM0MDYiPjxjb2RlPl9fYnVpbHRpbl9ic3dhcDY0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmY2hvb3NlXzAwNWZleHByLTMzNTAiPjxjb2RlPl9fYnVpbHRpbl9jaG9vc2VfZXhwcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNscnNiLTMzODYiPjxjb2RlPl9fYnVpbHRpbl9jbHJzYjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNscnNibC0zMzkyIj48Y29kZT5fX2J1aWx0aW5fY2xyc2JsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmY2xyc2JsbC0zMzk4Ij48Y29kZT5fX2J1aWx0aW5fY2xyc2JsbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNsei0zMzg0Ij48Y29kZT5fX2J1aWx0aW5fY2x6PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmY2x6bC0zMzkwIj48Y29kZT5fX2J1aWx0aW5fY2x6bDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNsemxsLTMzOTYiPjxjb2RlPl9fYnVpbHRpbl9jbHpsbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNvbXBsZXgtMzM1MSI+PGNvZGU+X19idWlsdGluX2NvbXBsZXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjb25zdGFudF8wMDVmcC0zMzUyIj48Y29kZT5fX2J1aWx0aW5fY29uc3RhbnRfcDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNwdV8wMDVmaW5pdC0zNDA5Ij48Y29kZT5fX2J1aWx0aW5fY3B1X2luaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNYODYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+WDg2IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNwdV8wMDVmaXMtMzQxMCI+PGNvZGU+X19idWlsdGluX2NwdV9pczwvY29kZT48L2E+OiA8YSBocmVmPSJYODYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1g4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5YODYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmY3B1XzAwNWZzdXBwb3J0cy0zNDExIj48Y29kZT5fX2J1aWx0aW5fY3B1X3N1cHBvcnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlg4NiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjdHotMzM4NSI+PGNvZGU+X19idWlsdGluX2N0ejwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmN0emwtMzM5MSI+PGNvZGU+X19idWlsdGluX2N0emw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjdHpsbC0zMzk3Ij48Y29kZT5fX2J1aWx0aW5fY3R6bGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZleHBlY3QtMzM1MyI+PGNvZGU+X19idWlsdGluX2V4cGVjdDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJldHVybi1BZGRyZXNzLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmV4dHJhY3RfMDA1ZnJldHVybl8wMDVmYWRkci0yODg3Ij48Y29kZT5fX2J1aWx0aW5fZXh0cmFjdF9yZXR1cm5fYWRkcjwvY29kZT48L2E+OiA8YSBocmVmPSJSZXR1cm4tQWRkcmVzcy5odG1sI1JldHVybi1BZGRyZXNzIj5SZXR1cm4gQWRkcmVzczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmZmcy0zMzgzIj48Y29kZT5fX2J1aWx0aW5fZmZzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmZmZzbC0zMzg5Ij48Y29kZT5fX2J1aWx0aW5fZmZzbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmZmc2xsLTMzOTUiPjxjb2RlPl9fYnVpbHRpbl9mZnNsbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZkZJTEUtMzM2MCI+PGNvZGU+X19idWlsdGluX0ZJTEU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZmcGNsYXNzaWZ5LTI5NTQiPjxjb2RlPl9fYnVpbHRpbl9mcGNsYXNzaWZ5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmV0dXJuLUFkZHJlc3MuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmZnJhbWVfMDA1ZmFkZHJlc3MtMjg4OSI+PGNvZGU+X19idWlsdGluX2ZyYW1lX2FkZHJlc3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iUmV0dXJuLUFkZHJlc3MuaHRtbCNSZXR1cm4tQWRkcmVzcyI+UmV0dXJuIEFkZHJlc3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZXR1cm4tQWRkcmVzcy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZmcm9iXzAwNWZyZXR1cm5fMDA1ZmFkZHJlc3MtMjg4OCI+PGNvZGU+X19idWlsdGluX2Zyb2JfcmV0dXJuX2FkZHJlc3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iUmV0dXJuLUFkZHJlc3MuaHRtbCNSZXR1cm4tQWRkcmVzcyI+UmV0dXJuIEFkZHJlc3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZGVU5DVElPTi0zMzU5Ij48Y29kZT5fX2J1aWx0aW5fRlVOQ1RJT048L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZodWdlXzAwNWZ2YWwtMzM2MyI+PGNvZGU+X19idWlsdGluX2h1Z2VfdmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaHVnZV8wMDVmdmFsZi0zMzY0Ij48Y29kZT5fX2J1aWx0aW5faHVnZV92YWxmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaHVnZV8wMDVmdmFsbC0zMzY1Ij48Y29kZT5fX2J1aWx0aW5faHVnZV92YWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaHVnZV8wMDVmdmFscS0zNDA4Ij48Y29kZT5fX2J1aWx0aW5faHVnZV92YWxxPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlg4NiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpbmYtMzM2NyI+PGNvZGU+X19idWlsdGluX2luZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmluZmQxMjgtMzM3MCI+PGNvZGU+X19idWlsdGluX2luZmQxMjg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpbmZkMzItMzM2OCI+PGNvZGU+X19idWlsdGluX2luZmQzMjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmluZmQ2NC0zMzY5Ij48Y29kZT5fX2J1aWx0aW5faW5mZDY0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaW5mZi0zMzcxIj48Y29kZT5fX2J1aWx0aW5faW5mZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmluZmwtMzM3MiI+PGNvZGU+X19idWlsdGluX2luZmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYODYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpbmZxLTM0MDciPjxjb2RlPl9fYnVpbHRpbl9pbmZxPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlg4NiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpc2Zpbml0ZS0yOTU1Ij48Y29kZT5fX2J1aWx0aW5faXNmaW5pdGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpc2dyZWF0ZXItMjk1NyI+PGNvZGU+X19idWlsdGluX2lzZ3JlYXRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmlzZ3JlYXRlcmVxdWFsLTI5NTgiPjxjb2RlPl9fYnVpbHRpbl9pc2dyZWF0ZXJlcXVhbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmlzaW5mXzAwNWZzaWduLTI5NTkiPjxjb2RlPl9fYnVpbHRpbl9pc2luZl9zaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaXNsZXNzLTI5NjAiPjxjb2RlPl9fYnVpbHRpbl9pc2xlc3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpc2xlc3NlcXVhbC0yOTYxIj48Y29kZT5fX2J1aWx0aW5faXNsZXNzZXF1YWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpc2xlc3NncmVhdGVyLTI5NjIiPjxjb2RlPl9fYnVpbHRpbl9pc2xlc3NncmVhdGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaXNub3JtYWwtMjk1NiI+PGNvZGU+X19idWlsdGluX2lzbm9ybWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaXN1bm9yZGVyZWQtMjk2MyI+PGNvZGU+X19idWlsdGluX2lzdW5vcmRlcmVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmTElORS0zMzU4Ij48Y29kZT5fX2J1aWx0aW5fTElORTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zm5hbi0zMzc0Ij48Y29kZT5fX2J1aWx0aW5fbmFuPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmbmFuZDEyOC0zMzc3Ij48Y29kZT5fX2J1aWx0aW5fbmFuZDEyODwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zm5hbmQzMi0zMzc1Ij48Y29kZT5fX2J1aWx0aW5fbmFuZDMyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmbmFuZDY0LTMzNzYiPjxjb2RlPl9fYnVpbHRpbl9uYW5kNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZuYW5mLTMzNzgiPjxjb2RlPl9fYnVpbHRpbl9uYW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmbmFubC0zMzc5Ij48Y29kZT5fX2J1aWx0aW5fbmFubDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zm5hbnMtMzM4MCI+PGNvZGU+X19idWlsdGluX25hbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZuYW5zZi0zMzgxIj48Y29kZT5fX2J1aWx0aW5fbmFuc2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZuYW5zbC0zMzgyIj48Y29kZT5fX2J1aWx0aW5fbmFuc2w8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZub25fMDA1ZnR4XzAwNWZzdG9yZS0zNDQ4Ij48Y29kZT5fX2J1aWx0aW5fbm9uX3R4X3N0b3JlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zm9iamVjdF8wMDVmc2l6ZS0yOTM0Ij48Y29kZT5fX2J1aWx0aW5fb2JqZWN0X3NpemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPZmZzZXRvZi5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZvZmZzZXRvZi0yODkwIj48Y29kZT5fX2J1aWx0aW5fb2Zmc2V0b2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2Zmc2V0b2YuaHRtbCNPZmZzZXRvZiI+T2Zmc2V0b2Y8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwYXJpdHktMzM4OCI+PGNvZGU+X19idWlsdGluX3Bhcml0eTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnBhcml0eWwtMzM5NCI+PGNvZGU+X19idWlsdGluX3Bhcml0eWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwYXJpdHlsbC0zNDAwIj48Y29kZT5fX2J1aWx0aW5fcGFyaXR5bGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwb3Bjb3VudC0zMzg3Ij48Y29kZT5fX2J1aWx0aW5fcG9wY291bnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwb3Bjb3VudGwtMzM5MyI+PGNvZGU+X19idWlsdGluX3BvcGNvdW50bDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnBvcGNvdW50bGwtMzM5OSI+PGNvZGU+X19idWlsdGluX3BvcGNvdW50bGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwb3dpLTI5NjQiPjxjb2RlPl9fYnVpbHRpbl9wb3dpPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcG93aWYtMjk2NSI+PGNvZGU+X19idWlsdGluX3Bvd2lmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcG93aWwtMjk2NiI+PGNvZGU+X19idWlsdGluX3Bvd2lsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcHJlZmV0Y2gtMzM2MiI+PGNvZGU+X19idWlsdGluX3ByZWZldGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJldHVybi0yNDE5Ij48Y29kZT5fX2J1aWx0aW5fcmV0dXJuPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvbnN0cnVjdGluZy1DYWxscy5odG1sI0NvbnN0cnVjdGluZy1DYWxscyI+Q29uc3RydWN0aW5nIENhbGxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmV0dXJuLUFkZHJlc3MuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcmV0dXJuXzAwNWZhZGRyZXNzLTI4ODYiPjxjb2RlPl9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzczwvY29kZT48L2E+OiA8YSBocmVmPSJSZXR1cm4tQWRkcmVzcy5odG1sI1JldHVybi1BZGRyZXNzIj5SZXR1cm4gQWRkcmVzczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1ZmJyay0zNDE2Ij48Y29kZT5fX2J1aWx0aW5fcnhfYnJrPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5SWCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJ4XzAwNWZjbHJwc3ctMzQxNyI+PGNvZGU+X19idWlsdGluX3J4X2NscnBzdzwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmaW50LTM0MTgiPjxjb2RlPl9fYnVpbHRpbl9yeF9pbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1Zm1hY2hpLTM0MTkiPjxjb2RlPl9fYnVpbHRpbl9yeF9tYWNoaTwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbWFjbG8tMzQyMCI+PGNvZGU+X19idWlsdGluX3J4X21hY2xvPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5SWCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJ4XzAwNWZtdWxoaS0zNDIxIj48Y29kZT5fX2J1aWx0aW5fcnhfbXVsaGk8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1Zm11bGxvLTM0MjIiPjxjb2RlPl9fYnVpbHRpbl9yeF9tdWxsbzwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZmYWNoaS0zNDIzIj48Y29kZT5fX2J1aWx0aW5fcnhfbXZmYWNoaTwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZmYWNtaS0zNDI0Ij48Y29kZT5fX2J1aWx0aW5fcnhfbXZmYWNtaTwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZmYy0zNDI1Ij48Y29kZT5fX2J1aWx0aW5fcnhfbXZmYzwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZ0YWNoaS0zNDI2Ij48Y29kZT5fX2J1aWx0aW5fcnhfbXZ0YWNoaTwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZ0YWNsby0zNDI3Ij48Y29kZT5fX2J1aWx0aW5fcnhfbXZ0YWNsbzwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZ0Yy0zNDI4Ij48Y29kZT5fX2J1aWx0aW5fcnhfbXZ0YzwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZ0aXBsLTM0MjkiPjxjb2RlPl9fYnVpbHRpbl9yeF9tdnRpcGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1ZnJhY3ctMzQzMCI+PGNvZGU+X19idWlsdGluX3J4X3JhY3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1ZnJldnctMzQzMSI+PGNvZGU+X19idWlsdGluX3J4X3Jldnc8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1ZnJtcGEtMzQzMiI+PGNvZGU+X19idWlsdGluX3J4X3JtcGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1ZnJvdW5kLTM0MzMiPjxjb2RlPl9fYnVpbHRpbl9yeF9yb3VuZDwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmc2F0LTM0MzQiPjxjb2RlPl9fYnVpbHRpbl9yeF9zYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1ZnNldHBzdy0zNDM1Ij48Y29kZT5fX2J1aWx0aW5fcnhfc2V0cHN3PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5SWCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJ4XzAwNWZ3YWl0LTM0MzYiPjxjb2RlPl9fYnVpbHRpbl9yeF93YWl0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5SWCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnNldF8wMDVmdGhyZWFkXzAwNWZwb2ludGVyLTM0NDkiPjxjb2RlPl9fYnVpbHRpbl9zZXRfdGhyZWFkX3BvaW50ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NILUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlNIIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRhYm9ydC0zNDQ1Ij48Y29kZT5fX2J1aWx0aW5fdGFib3J0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRiZWdpbi0zNDM3Ij48Y29kZT5fX2J1aWx0aW5fdGJlZ2luPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRiZWdpbl8wMDVmbm9mbG9hdC0zNDQwIj48Y29kZT5fX2J1aWx0aW5fdGJlZ2luX25vZmxvYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Uy8zOTAgU3lzdGVtIHogQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdGJlZ2luXzAwNWZyZXRyeS0zNDQxIj48Y29kZT5fX2J1aWx0aW5fdGJlZ2luX3JldHJ5PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRiZWdpbl8wMDVmcmV0cnlfMDA1Zm5vZmxvYXQtMzQ0MiI+PGNvZGU+X19idWlsdGluX3RiZWdpbl9yZXRyeV9ub2Zsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRiZWdpbmMtMzQ0MyI+PGNvZGU+X19idWlsdGluX3RiZWdpbmM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Uy8zOTAgU3lzdGVtIHogQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdGVuZC0zNDQ0Ij48Y29kZT5fX2J1aWx0aW5fdGVuZDwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5TLzM5MCBTeXN0ZW0geiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRocmVhZF8wMDVmcG9pbnRlci0zNDUwIj48Y29kZT5fX2J1aWx0aW5fdGhyZWFkX3BvaW50ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NILUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlNIIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRyYXAtMzM1NSI+PGNvZGU+X19idWlsdGluX3RyYXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZ0eF8wMDVmYXNzaXN0LTM0NDYiPjxjb2RlPl9fYnVpbHRpbl90eF9hc3Npc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Uy8zOTAgU3lzdGVtIHogQnVpbHQtaW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdHhfMDA1Zm5lc3RpbmdfMDA1ZmRlcHRoLTM0NDciPjxjb2RlPl9fYnVpbHRpbl90eF9uZXN0aW5nX2RlcHRoPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnR5cGVzXzAwNWZjb21wYXRpYmxlXzAwNWZwLTMzNDkiPjxjb2RlPl9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZ1bnJlYWNoYWJsZS0zMzU2Ij48Y29kZT5fX2J1aWx0aW5fdW5yZWFjaGFibGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25zdHJ1Y3RpbmctQ2FsbHMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdmFfMDA1ZmFyZ18wMDVmcGFjay0yNDIwIj48Y29kZT5fX2J1aWx0aW5fdmFfYXJnX3BhY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwjQ29uc3RydWN0aW5nLUNhbGxzIj5Db25zdHJ1Y3RpbmcgQ2FsbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25zdHJ1Y3RpbmctQ2FsbHMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdmFfMDA1ZmFyZ18wMDVmcGFja18wMDVmbGVuLTI0MjEiPjxjb2RlPl9fYnVpbHRpbl92YV9hcmdfcGFja19sZW48L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwjQ29uc3RydWN0aW5nLUNhbGxzIj5Db25zdHJ1Y3RpbmcgQ2FsbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wbGV4Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmY29tcGxleF8wMDVmXzAwNWZfMDA3ZC1rZXl3b3JkLTI0NDUiPjxjb2RlPl9fY29tcGxleF9fPC9jb2RlPiBrZXl3b3JkPC9hPjogPGEgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZGVjbHNwZWNfMDAyOGRsbGV4cG9ydF8wMDI5XzAwN2QtMjU5OSI+PGNvZGU+X19kZWNsc3BlYyhkbGxleHBvcnQpPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmRlY2xzcGVjXzAwMjhkbGxpbXBvcnRfMDAyOV8wMDdkLTI2MDAiPjxjb2RlPl9fZGVjbHNwZWMoZGxsaW1wb3J0KTwvY29kZT48L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZWFfMDA3ZC1TUFUtTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUxNSI+PGNvZGU+X19lYTwvY29kZT4gU1BVIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjogPGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHRlcm5hdGUtS2V5d29yZHMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmZXh0ZW5zaW9uXzAwNWZfMDA1Zi0yODgxIj48Y29kZT5fX2V4dGVuc2lvbl9fPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFsdGVybmF0ZS1LZXl3b3Jkcy5odG1sI0FsdGVybmF0ZS1LZXl3b3JkcyI+QWx0ZXJuYXRlIEtleXdvcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZmYXJfMDA3ZC1NMzJDLU5hbWVkLUFkZHJlc3MtU3BhY2VzLTI1MTMiPjxjb2RlPl9fZmFyPC9jb2RlPiBNMzJDIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjogPGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZhcl8wMDdkLVJMNzgtTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUxNCI+PGNvZGU+X19mYXI8L2NvZGU+IFJMNzggTmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+OiA8YSBocmVmPSJOYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sI05hbWVkLUFkZHJlc3MtU3BhY2VzIj5OYW1lZCBBZGRyZXNzIFNwYWNlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZmxhc2hfMDA3ZC1BVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUwNiI+PGNvZGU+X19mbGFzaDwvY29kZT4gQVZSIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjogPGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsYXNoMV8wMDdkLUFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTA3Ij48Y29kZT5fX2ZsYXNoMTwvY29kZT4gQVZSIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjogPGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsYXNoMl8wMDdkLUFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTA4Ij48Y29kZT5fX2ZsYXNoMjwvY29kZT4gQVZSIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjogPGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsYXNoM18wMDdkLUFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTA5Ij48Y29kZT5fX2ZsYXNoMzwvY29kZT4gQVZSIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjogPGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsYXNoNF8wMDdkLUFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTEwIj48Y29kZT5fX2ZsYXNoNDwvY29kZT4gQVZSIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjogPGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsYXNoNV8wMDdkLUFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTExIj48Y29kZT5fX2ZsYXNoNTwvY29kZT4gQVZSIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjogPGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+TmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGbG9hdGluZy1UeXBlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsb2F0MTI4XzAwN2QtZGF0YS10eXBlLTI0NTEiPjxjb2RlPl9fZmxvYXQxMjg8L2NvZGU+IGRhdGEgdHlwZTwvYT46IDxhIGhyZWY9IkZsb2F0aW5nLVR5cGVzLmh0bWwjRmxvYXRpbmctVHlwZXMiPkZsb2F0aW5nIFR5cGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmxvYXRpbmctVHlwZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZmbG9hdDgwXzAwN2QtZGF0YS10eXBlLTI0NTAiPjxjb2RlPl9fZmxvYXQ4MDwvY29kZT4gZGF0YSB0eXBlPC9hPjogPGEgaHJlZj0iRmxvYXRpbmctVHlwZXMuaHRtbCNGbG9hdGluZy1UeXBlcyI+RmxvYXRpbmcgVHlwZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIYWxmXzAwMmRQcmVjaXNpb24uaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZmcDE2XzAwN2QtZGF0YS10eXBlLTI0NTciPjxjb2RlPl9fZnAxNjwvY29kZT4gZGF0YSB0eXBlPC9hPjogPGEgaHJlZj0iSGFsZl8wMDJkUHJlY2lzaW9uLmh0bWwjSGFsZl8wMDJkUHJlY2lzaW9uIj5IYWxmLVByZWNpc2lvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLU5hbWVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZnVuY18wMDVmXzAwNWZfMDA3ZC1pZGVudGlmaWVyLTI4ODMiPjxjb2RlPl9fZnVuY19fPC9jb2RlPiBpZGVudGlmaWVyPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tTmFtZXMuaHRtbCNGdW5jdGlvbi1OYW1lcyI+RnVuY3Rpb24gTmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1OYW1lcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZkZVTkNUSU9OXzAwNWZfMDA1Zl8wMDdkLWlkZW50aWZpZXItMjg4NCI+PGNvZGU+X19GVU5DVElPTl9fPC9jb2RlPiBpZGVudGlmaWVyPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tTmFtZXMuaHRtbCNGdW5jdGlvbi1OYW1lcyI+RnVuY3Rpb24gTmFtZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wbGV4Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmaW1hZ18wMDVmXzAwNWZfMDA3ZC1rZXl3b3JkLTI0NDciPjxjb2RlPl9faW1hZ19fPC9jb2RlPiBrZXl3b3JkPC9hPjogPGEgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmaW50MTI4Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmaW50MTI4XzAwN2QtZGF0YS10eXBlcy0yNDM3Ij48Y29kZT5fX2ludDEyODwvY29kZT4gZGF0YSB0eXBlczwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZpbnQxMjguaHRtbCNnX3RfMDA1Zl8wMDVmaW50MTI4Ij5fX2ludDEyODwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmbWVteF8wMDdkLUFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTEyIj48Y29kZT5fX21lbXg8L2NvZGU+IEFWUiBOYW1lZCBBZGRyZXNzIFNwYWNlczwvYT46IDxhIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjTmFtZWQtQWRkcmVzcy1TcGFjZXMiPk5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tTmFtZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZQUkVUVFlfMDA1ZkZVTkNUSU9OXzAwNWZfMDA1Zl8wMDdkLWlkZW50aWZpZXItMjg4NSI+PGNvZGU+X19QUkVUVFlfRlVOQ1RJT05fXzwvY29kZT4gaWRlbnRpZmllcjwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLU5hbWVzLmh0bWwjRnVuY3Rpb24tTmFtZXMiPkZ1bmN0aW9uIE5hbWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tcGxleC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZnJlYWxfMDA1Zl8wMDVmXzAwN2Qta2V5d29yZC0yNDQ2Ij48Y29kZT5fX3JlYWxfXzwvY29kZT4ga2V5d29yZDwvYT46IDxhIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZlNURENfMDA1ZkhPU1RFRF8wMDVmXzAwNWYtNTkiPjxjb2RlPl9fU1REQ19IT1NURURfXzwvY29kZT48L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZmFkZF8wMDVmYW5kXzAwNWZmZXRjaC0yODk3Ij48Y29kZT5fX3N5bmNfYWRkX2FuZF9mZXRjaDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZhbmRfMDA1ZmFuZF8wMDVmZmV0Y2gtMjkwMCI+PGNvZGU+X19zeW5jX2FuZF9hbmRfZmV0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmc3luYy1CdWlsdGlucyI+X19zeW5jIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmYm9vbF8wMDVmY29tcGFyZV8wMDVmYW5kXzAwNWZzd2FwLTI5MDMiPjxjb2RlPl9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmc3luYy1CdWlsdGlucyI+X19zeW5jIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmZmV0Y2hfMDA1ZmFuZF8wMDVmYWRkLTI4OTEiPjxjb2RlPl9fc3luY19mZXRjaF9hbmRfYWRkPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMiPl9fc3luYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZmZldGNoXzAwNWZhbmRfMDA1ZmFuZC0yODk0Ij48Y29kZT5fX3N5bmNfZmV0Y2hfYW5kX2FuZDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZmZXRjaF8wMDVmYW5kXzAwNWZuYW5kLTI4OTYiPjxjb2RlPl9fc3luY19mZXRjaF9hbmRfbmFuZDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZmZXRjaF8wMDVmYW5kXzAwNWZvci0yODkzIj48Y29kZT5fX3N5bmNfZmV0Y2hfYW5kX29yPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMiPl9fc3luYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZmZldGNoXzAwNWZhbmRfMDA1ZnN1Yi0yODkyIj48Y29kZT5fX3N5bmNfZmV0Y2hfYW5kX3N1YjwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZmZXRjaF8wMDVmYW5kXzAwNWZ4b3ItMjg5NSI+PGNvZGU+X19zeW5jX2ZldGNoX2FuZF94b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmc3luYy1CdWlsdGlucyI+X19zeW5jIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmbG9ja18wMDVmcmVsZWFzZS0yOTA3Ij48Y29kZT5fX3N5bmNfbG9ja19yZWxlYXNlPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMiPl9fc3luYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZmxvY2tfMDA1ZnRlc3RfMDA1ZmFuZF8wMDVmc2V0LTI5MDYiPjxjb2RlPl9fc3luY19sb2NrX3Rlc3RfYW5kX3NldDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZuYW5kXzAwNWZhbmRfMDA1ZmZldGNoLTI5MDIiPjxjb2RlPl9fc3luY19uYW5kX2FuZF9mZXRjaDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZvcl8wMDVmYW5kXzAwNWZmZXRjaC0yODk5Ij48Y29kZT5fX3N5bmNfb3JfYW5kX2ZldGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMiPl9fc3luYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZnN1Yl8wMDVmYW5kXzAwNWZmZXRjaC0yODk4Ij48Y29kZT5fX3N5bmNfc3ViX2FuZF9mZXRjaDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZzeW5jaHJvbml6ZS0yOTA1Ij48Y29kZT5fX3N5bmNfc3luY2hyb25pemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmc3luYy1CdWlsdGlucyI+X19zeW5jIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmdmFsXzAwNWZjb21wYXJlXzAwNWZhbmRfMDA1ZnN3YXAtMjkwNCI+PGNvZGU+X19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMiPl9fc3luYyBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1Znhvcl8wMDVmYW5kXzAwNWZmZXRjaC0yOTAxIj48Y29kZT5fX3N5bmNfeG9yX2FuZF9mZXRjaDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj5fX3N5bmMgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUaHJlYWRfMDAyZExvY2FsLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmdGhyZWFkXzAwN2QtMzQ5MCI+PGNvZGU+X190aHJlYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iVGhyZWFkXzAwMmRMb2NhbC5odG1sI1RocmVhZF8wMDJkTG9jYWwiPlRocmVhZC1Mb2NhbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZBY2N1bV8wMDdkLWRhdGEtdHlwZS0yNDcxIj48Y29kZT5fQWNjdW08L2NvZGU+IGRhdGEgdHlwZTwvYT46IDxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wbGV4Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1ZkNvbXBsZXhfMDA3ZC1rZXl3b3JkLTI0NDQiPjxjb2RlPl9Db21wbGV4PC9jb2RlPiBrZXl3b3JkPC9hPjogPGEgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1ZkRlY2ltYWwxMjhfMDA3ZC1kYXRhLXR5cGUtMjQ2MSI+PGNvZGU+X0RlY2ltYWwxMjg8L2NvZGU+IGRhdGEgdHlwZTwvYT46IDxhIGhyZWY9IkRlY2ltYWwtRmxvYXQuaHRtbCNEZWNpbWFsLUZsb2F0Ij5EZWNpbWFsIEZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZEZWNpbWFsMzJfMDA3ZC1kYXRhLXR5cGUtMjQ1OSI+PGNvZGU+X0RlY2ltYWwzMjwvY29kZT4gZGF0YSB0eXBlPC9hPjogPGEgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI0RlY2ltYWwtRmxvYXQiPkRlY2ltYWwgRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1ZkRlY2ltYWw2NF8wMDdkLWRhdGEtdHlwZS0yNDYwIj48Y29kZT5fRGVjaW1hbDY0PC9jb2RlPiBkYXRhIHR5cGU8L2E+OiA8YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjRGVjaW1hbC1GbG9hdCI+RGVjaW1hbCBGbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ190XzAwNWZleGl0LTI5NjgiPjxjb2RlPl9leGl0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1nX3RfMDA1ZkV4aXQtMjk2NyI+PGNvZGU+X0V4aXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmRnJhY3RfMDA3ZC1kYXRhLXR5cGUtMjQ3MCI+PGNvZGU+X0ZyYWN0PC9jb2RlPiBkYXRhIHR5cGU8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1ZkhUTV8wMDVmRklSU1RfMDA1ZlVTRVJfMDA1ZkFCT1JUXzAwNWZDT0RFLTM0MzgiPjxjb2RlPl9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZTYXRfMDA3ZC1kYXRhLXR5cGUtMjQ3MiI+PGNvZGU+X1NhdDwvY29kZT4gZGF0YSB0eXBlPC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilg4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwjaW5kZXgtZ190XzAwNWZ4YWJvcnQtMzQxNSI+PGNvZGU+X3hhYm9ydDwvY29kZT48L2E+OiA8YSBocmVmPSJYODYtdHJhbnNhY3Rpb25hbC1tZW1vcnktaW50cmluc2ljcy5odG1sI1g4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzIj5YODYgdHJhbnNhY3Rpb25hbCBtZW1vcnkgaW50cmluc2ljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilg4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwjaW5kZXgtZ190XzAwNWZ4YmVnaW4tMzQxMiI+PGNvZGU+X3hiZWdpbjwvY29kZT48L2E+OiA8YSBocmVmPSJYODYtdHJhbnNhY3Rpb25hbC1tZW1vcnktaW50cmluc2ljcy5odG1sI1g4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzIj5YODYgdHJhbnNhY3Rpb25hbCBtZW1vcnkgaW50cmluc2ljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilg4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwjaW5kZXgtZ190XzAwNWZ4ZW5kLTM0MTMiPjxjb2RlPl94ZW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilg4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwjWDg2LXRyYW5zYWN0aW9uYWwtbWVtb3J5LWludHJpbnNpY3MiPlg4NiB0cmFuc2FjdGlvbmFsIG1lbW9yeSBpbnRyaW5zaWNzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWDg2LXRyYW5zYWN0aW9uYWwtbWVtb3J5LWludHJpbnNpY3MuaHRtbCNpbmRleC1nX3RfMDA1Znh0ZXN0LTM0MTQiPjxjb2RlPl94dGVzdDwvY29kZT48L2E+OiA8YSBocmVmPSJYODYtdHJhbnNhY3Rpb25hbC1tZW1vcnktaW50cmluc2ljcy5odG1sI1g4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzIj5YODYgdHJhbnNhY3Rpb25hbCBtZW1vcnkgaW50cmluc2ljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LUFBcmNoNjQtT3B0aW9ucy0xMDc5Ij5BQXJjaDY0IE9wdGlvbnM8L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbXBhdGliaWxpdHkuaHRtbCNpbmRleC1BQkktMzUzMSI+QUJJPC9hPjogPGEgaHJlZj0iQ29tcGF0aWJpbGl0eS5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhYmlfMDA1ZnRhZ18wMDdkLWF0dHJpYnV0ZS0zNTI0Ij48Y29kZT5hYmlfdGFnPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzLmh0bWwjQ18wMDJiXzAwMmItQXR0cmlidXRlcyI+QysrIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWFib3J0LTI5NjkiPjxjb2RlPmFib3J0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1hYnMtMjk3MCI+PGNvZGU+YWJzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItVm9sYXRpbGVzLmh0bWwjaW5kZXgtYWNjZXNzaW5nLXZvbGF0aWxlcy0zNDk0Ij5hY2Nlc3Npbmcgdm9sYXRpbGVzPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItVm9sYXRpbGVzLmh0bWwjQ18wMDJiXzAwMmItVm9sYXRpbGVzIj5DKysgVm9sYXRpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVm9sYXRpbGVzLmh0bWwjaW5kZXgtYWNjZXNzaW5nLXZvbGF0aWxlcy0yODAwIj5hY2Nlc3Npbmcgdm9sYXRpbGVzPC9hPjogPGEgaHJlZj0iVm9sYXRpbGVzLmh0bWwjVm9sYXRpbGVzIj5Wb2xhdGlsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWFjb3MtMjk3MSI+PGNvZGU+YWNvczwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYWNvc2YtMjk3MiI+PGNvZGU+YWNvc2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWFjb3NoLTI5NzMiPjxjb2RlPmFjb3NoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1hY29zaGYtMjk3NCI+PGNvZGU+YWNvc2hmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1hY29zaGwtMjk3NSI+PGNvZGU+YWNvc2hsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1hY29zbC0yOTc2Ij48Y29kZT5hY29zbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNpbmRleC1BZGEtNSI+QWRhPC9hPjogPGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI0dfMDAyYl8wMDJiLWFuZC1HQ0MiPkcrKyBhbmQgR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmxvYXRpbmctVHlwZXMuaHRtbCNpbmRleC1hZGRpdGlvbmFsLWZsb2F0aW5nLXR5cGVzLTI0NDkiPmFkZGl0aW9uYWwgZmxvYXRpbmcgdHlwZXM8L2E+OiA8YSBocmVmPSJGbG9hdGluZy1UeXBlcy5odG1sI0Zsb2F0aW5nLVR5cGVzIj5GbG9hdGluZyBUeXBlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWFkZHJlc3MtY29uc3RyYWludHMtMjg0MCI+YWRkcmVzcyBjb25zdHJhaW50czwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI2luZGV4LWFkZHJlc3Mtb2YtYS1sYWJlbC0yNDExIj5hZGRyZXNzIG9mIGEgbGFiZWw8L2E+OiA8YSBocmVmPSJMYWJlbHMtYXMtVmFsdWVzLmh0bWwjTGFiZWxzLWFzLVZhbHVlcyI+TGFiZWxzIGFzIFZhbHVlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWFkZHJlc3NfMDA1Zm9wZXJhbmQtMjg0MiI+PGNvZGU+YWRkcmVzc19vcGVyYW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxpYXNfMDA3ZC1hdHRyaWJ1dGUtMjU4MSI+PGNvZGU+YWxpYXM8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhbGlnbmVkXzAwN2QtYXR0cmlidXRlLTI3ODAiPjxjb2RlPmFsaWduZWQ8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IlR5cGUtQXR0cmlidXRlcy5odG1sI1R5cGUtQXR0cmlidXRlcyI+VHlwZSBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxpZ25lZF8wMDdkLWF0dHJpYnV0ZS0yNzU3Ij48Y29kZT5hbGlnbmVkPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFsaWduZWRfMDA3ZC1hdHRyaWJ1dGUtMjU4MiI+PGNvZGU+YWxpZ25lZDwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbGlnbm1lbnQuaHRtbCNpbmRleC1hbGlnbm1lbnQtMjc4NCI+YWxpZ25tZW50PC9hPjogPGEgaHJlZj0iQWxpZ25tZW50Lmh0bWwjQWxpZ25tZW50Ij5BbGlnbm1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhbGxvY18wMDVmc2l6ZV8wMDdkLWF0dHJpYnV0ZS0yNTgzIj48Y29kZT5hbGxvY19zaXplPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYWxsb2NhLTI5NzciPjxjb2RlPmFsbG9jYTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUxlbmd0aC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxsb2NhXzAwN2QtdnMtdmFyaWFibGVfMDAyZGxlbmd0aC1hcnJheXMtMjUyOCI+PGNvZGU+YWxsb2NhPC9jb2RlPiB2cyB2YXJpYWJsZS1sZW5ndGggYXJyYXlzPC9hPjogPGEgaHJlZj0iVmFyaWFibGUtTGVuZ3RoLmh0bWwjVmFyaWFibGUtTGVuZ3RoIj5WYXJpYWJsZSBMZW5ndGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtQWxsb3ctbmVzdGluZy1pbi1hbi1pbnRlcnJ1cHQtaGFuZGxlci1vbi10aGUtQmxhY2tmaW4tcHJvY2Vzc29yXzAwMmUtMjY0MiI+QWxsb3cgbmVzdGluZyBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciBvbiB0aGUgQmxhY2tmaW4gcHJvY2Vzc29yLjwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWx0ZXJuYXRlLUtleXdvcmRzLmh0bWwjaW5kZXgtYWx0ZXJuYXRlLWtleXdvcmRzLTI4NzkiPmFsdGVybmF0ZSBrZXl3b3JkczwvYT46IDxhIGhyZWY9IkFsdGVybmF0ZS1LZXl3b3Jkcy5odG1sI0FsdGVybmF0ZS1LZXl3b3JkcyI+QWx0ZXJuYXRlIEtleXdvcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYWx3YXlzXzAwNWZpbmxpbmVfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjU4NCI+PGNvZGU+YWx3YXlzX2lubGluZTwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1BTUQteDg2XzAwMmQ2NC1PcHRpb25zLTE0NDAiPkFNRCB4ODYtNjQgT3B0aW9uczwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1BTUQxLTU0Ij5BTUQxPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1BTlNJLUMtMjQiPkFOU0kgQzwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtQU5TSS1DLXN0YW5kYXJkLTIzIj5BTlNJIEMgc3RhbmRhcmQ8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUFOU0ktQzg5LTI1Ij5BTlNJIEM4OTwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1BTlNJLXN1cHBvcnQtMTAwIj5BTlNJIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUFOU0ktWDNfMDAyZTE1OV8wMDJkMTk4OS0yNyI+QU5TSSBYMy4xNTktMTk4OTwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNpbmRleC1hcG9zdHJvcGhlcy0zNTU0Ij5hcG9zdHJvcGhlczwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tcGF0aWJpbGl0eS5odG1sI2luZGV4LWFwcGxpY2F0aW9uLWJpbmFyeS1pbnRlcmZhY2UtMzUzMiI+YXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZTwvYT46IDxhIGhyZWY9IkNvbXBhdGliaWxpdHkuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmFja3dhcmRzLUNvbXBhdGliaWxpdHkuaHRtbCNpbmRleC1BUk0tXzAwNWJBbm5vdGF0ZWQtQ18wMDJiXzAwMmItUmVmZXJlbmNlLU1hbnVhbF8wMDVkLTM1MjkiPkFSTSBbQW5ub3RhdGVkIEMrKyBSZWZlcmVuY2UgTWFudWFsXTwvYT46IDxhIGhyZWY9IkJhY2t3YXJkcy1Db21wYXRpYmlsaXR5Lmh0bWwjQmFja3dhcmRzLUNvbXBhdGliaWxpdHkiPkJhY2t3YXJkcyBDb21wYXRpYmlsaXR5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1BUk0tb3B0aW9ucy0xMTE1Ij5BUk0gb3B0aW9uczwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWmVyby1MZW5ndGguaHRtbCNpbmRleC1hcnJheXMtb2YtbGVuZ3RoLXplcm8tMjUxNiI+YXJyYXlzIG9mIGxlbmd0aCB6ZXJvPC9hPjogPGEgaHJlZj0iWmVyby1MZW5ndGguaHRtbCNaZXJvLUxlbmd0aCI+WmVybyBMZW5ndGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1MZW5ndGguaHRtbCNpbmRleC1hcnJheXMtb2YtdmFyaWFibGUtbGVuZ3RoLTI1MjMiPmFycmF5cyBvZiB2YXJpYWJsZSBsZW5ndGg8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1MZW5ndGguaHRtbCNWYXJpYWJsZS1MZW5ndGgiPlZhcmlhYmxlIExlbmd0aDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN1YnNjcmlwdGluZy5odG1sI2luZGV4LWFycmF5c18wMDJjLW5vbl8wMDJkbHZhbHVlLTI1MzciPmFycmF5cywgbm9uLWx2YWx1ZTwvYT46IDxhIGhyZWY9IlN1YnNjcmlwdGluZy5odG1sI1N1YnNjcmlwdGluZyI+U3Vic2NyaXB0aW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYXJ0aWZpY2lhbF8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTg2Ij48Y29kZT5hcnRpZmljaWFsPC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYXNpbi0yOTc4Ij48Y29kZT5hc2luPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1hc2luZi0yOTc5Ij48Y29kZT5hc2luZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYXNpbmgtMjk4MCI+PGNvZGU+YXNpbmg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWFzaW5oZi0yOTgxIj48Y29kZT5hc2luaGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWFzaW5obC0yOTgyIj48Y29kZT5hc2luaGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWFzaW5sLTI5ODMiPjxjb2RlPmFzaW5sPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmFzbV8wMDdkLWNvbnN0cmFpbnRzLTI4MTEiPjxjb2RlPmFzbTwvY29kZT4gY29uc3RyYWludHM8L2E+OiA8YSBocmVmPSJDb25zdHJhaW50cy5odG1sI0NvbnN0cmFpbnRzIj5Db25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiYXNtXzAwN2QtZXhwcmVzc2lvbnMtMjgwNSI+PGNvZGU+YXNtPC9jb2RlPiBleHByZXNzaW9uczwvYT46IDxhIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI0V4dGVuZGVkLUFzbSI+RXh0ZW5kZWQgQXNtPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXh0ZW5kZWQtQXNtLmh0bWwjaW5kZXgtYXNzZW1ibGVyLWluc3RydWN0aW9ucy0yODA2Ij5hc3NlbWJsZXIgaW5zdHJ1Y3Rpb25zPC9hPjogPGEgaHJlZj0iRXh0ZW5kZWQtQXNtLmh0bWwjRXh0ZW5kZWQtQXNtIj5FeHRlbmRlZCBBc208L2E+PC9saT4KKzxsaT48YSBocmVmPSJBc20tTGFiZWxzLmh0bWwjaW5kZXgtYXNzZW1ibGVyLW5hbWVzLWZvci1pZGVudGlmaWVycy0yODYxIj5hc3NlbWJsZXIgbmFtZXMgZm9yIGlkZW50aWZpZXJzPC9hPjogPGEgaHJlZj0iQXNtLUxhYmVscy5odG1sI0FzbS1MYWJlbHMiPkFzbSBMYWJlbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNpbmRleC1hc3NlbWJseS1jb2RlXzAwMmMtaW52YWxpZC0zNTk4Ij5hc3NlbWJseSBjb2RlLCBpbnZhbGlkPC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWF0YW4tMjk4NCI+PGNvZGU+YXRhbjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYXRhbjItMjk4NSI+PGNvZGU+YXRhbjI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWF0YW4yZi0yOTg2Ij48Y29kZT5hdGFuMmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWF0YW4ybC0yOTg3Ij48Y29kZT5hdGFuMmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWF0YW5mLTI5ODgiPjxjb2RlPmF0YW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1hdGFuaC0yOTg5Ij48Y29kZT5hdGFuaDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYXRhbmhmLTI5OTAiPjxjb2RlPmF0YW5oZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYXRhbmhsLTI5OTEiPjxjb2RlPmF0YW5obDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYXRhbmwtMjk5MiI+PGNvZGU+YXRhbmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1hdHRyaWJ1dGUtb2YtdHlwZXMtMjc3OCI+YXR0cmlidXRlIG9mIHR5cGVzPC9hPjogPGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIj5UeXBlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtYXR0cmlidXRlLW9mLXZhcmlhYmxlcy0yNzU1Ij5hdHRyaWJ1dGUgb2YgdmFyaWFibGVzPC9hPjogPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBdHRyaWJ1dGUtU3ludGF4Lmh0bWwjaW5kZXgtYXR0cmlidXRlLXN5bnRheC0yNzQ1Ij5hdHRyaWJ1dGUgc3ludGF4PC9hPjogPGEgaHJlZj0iQXR0cmlidXRlLVN5bnRheC5odG1sI0F0dHJpYnV0ZS1TeW50YXgiPkF0dHJpYnV0ZSBTeW50YXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1hdXRvaW5jcmVtZW50XzAwMmZkZWNyZW1lbnQtYWRkcmVzc2luZy0yODE3Ij5hdXRvaW5jcmVtZW50L2RlY3JlbWVudCBhZGRyZXNzaW5nPC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmxpbmUuaHRtbCNpbmRleC1hdXRvbWF0aWMtXzAwNDBjb2RlXzAwN2JpbmxpbmVfMDA3ZC1mb3ItQ18wMDJiXzAwMmItbWVtYmVyLWZucy0yNzk0Ij5hdXRvbWF0aWMgPGNvZGU+aW5saW5lPC9jb2RlPiBmb3IgQysrIG1lbWJlciBmbnM8L2E+OiA8YSBocmVmPSJJbmxpbmUuaHRtbCNJbmxpbmUiPklubGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjaW5kZXgtQVZSLU9wdGlvbnMtMTE1MSI+QVZSIE9wdGlvbnM8L2E+OiA8YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj5BVlIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJhY2t3YXJkcy1Db21wYXRpYmlsaXR5Lmh0bWwjaW5kZXgtQmFja3dhcmRzLUNvbXBhdGliaWxpdHktMzUyOCI+QmFja3dhcmRzIENvbXBhdGliaWxpdHk8L2E+OiA8YSBocmVmPSJCYWNrd2FyZHMtQ29tcGF0aWJpbGl0eS5odG1sI0JhY2t3YXJkcy1Db21wYXRpYmlsaXR5Ij5CYWNrd2FyZHMgQ29tcGF0aWJpbGl0eTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5hbWUtbG9va3VwLmh0bWwjaW5kZXgtYmFzZS1jbGFzcy1tZW1iZXJzLTM1NzQiPmJhc2UgY2xhc3MgbWVtYmVyczwvYT46IDxhIGhyZWY9Ik5hbWUtbG9va3VwLmh0bWwjTmFtZS1sb29rdXAiPk5hbWUgbG9va3VwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1iY21wLTI5OTMiPjxjb2RlPmJjbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JiZWxvdzEwMF8wMDdkLWF0dHJpYnV0ZS0yNzc3Ij48Y29kZT5iZWxvdzEwMDwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wYXRpYmlsaXR5Lmh0bWwjaW5kZXgtYmluYXJ5LWNvbXBhdGliaWxpdHktMzUzMCI+YmluYXJ5IGNvbXBhdGliaWxpdHk8L2E+OiA8YSBocmVmPSJDb21wYXRpYmlsaXR5Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJpbmFyeS1jb25zdGFudHMuaHRtbCNpbmRleC1CaW5hcnktY29uc3RhbnRzLXVzaW5nLXRoZS1fMDA0MHNhbXBfMDA3YjBiXzAwN2QtcHJlZml4LTM0OTEiPkJpbmFyeSBjb25zdGFudHMgdXNpbmcgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MGI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJlZml4PC9hPjogPGEgaHJlZj0iQmluYXJ5LWNvbnN0YW50cy5odG1sI0JpbmFyeS1jb25zdGFudHMiPkJpbmFyeSBjb25zdGFudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtQmxhY2tmaW4tT3B0aW9ucy0xMTY4Ij5CbGFja2ZpbiBPcHRpb25zPC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCb3VuZC1tZW1iZXItZnVuY3Rpb25zLmh0bWwjaW5kZXgtYm91bmQtcG9pbnRlci10by1tZW1iZXItZnVuY3Rpb24tMzUyMiI+Ym91bmQgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb248L2E+OiA8YSBocmVmPSJCb3VuZC1tZW1iZXItZnVuY3Rpb25zLmh0bWwjQm91bmQtbWVtYmVyLWZ1bmN0aW9ucyI+Qm91bmQgbWVtYmVyIGZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1ib3VuZHMtY2hlY2tpbmctNzY1Ij5ib3VuZHMgY2hlY2tpbmc8L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWJ1Zy1jcml0ZXJpYS0zNTk0Ij5idWcgY3JpdGVyaWE8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Z3MuaHRtbCNpbmRleC1idWdzLTM1OTIiPmJ1Z3M8L2E+OiA8YSBocmVmPSJCdWdzLmh0bWwjQnVncyI+QnVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRyb3VibGUuaHRtbCNpbmRleC1idWdzXzAwMmMta25vd24tMzUzMyI+YnVncywga25vd248L2E+OiA8YSBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSI+VHJvdWJsZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtYnVpbHRfMDAyZGluLWZ1bmN0aW9ucy0yOTUzIj5idWlsdC1pbiBmdW5jdGlvbnM8L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtYnVpbHRfMDAyZGluLWZ1bmN0aW9ucy0xMDgiPmJ1aWx0LWluIGZ1bmN0aW9uczwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1iemVyby0yOTk0Ij48Y29kZT5iemVybzwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI2luZGV4LUMtY29tcGlsYXRpb24tb3B0aW9ucy03MCI+QyBjb21waWxhdGlvbiBvcHRpb25zPC9hPjogPGEgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtQy1pbnRlcm1lZGlhdGUtb3V0cHV0XzAwMmMtbm9uZXhpc3RlbnQtMjAiPkMgaW50ZXJtZWRpYXRlIG91dHB1dCwgbm9uZXhpc3RlbnQ8L2E+OiA8YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+RysrIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNpbmRleC1DLWxhbmd1YWdlLWV4dGVuc2lvbnMtMjM5OSI+QyBsYW5ndWFnZSBleHRlbnNpb25zPC9hPjogPGEgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LUMtbGFuZ3VhZ2VfMDAyYy10cmFkaXRpb25hbC0xMTkiPkMgbGFuZ3VhZ2UsIHRyYWRpdGlvbmFsPC9hPjogPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1DLXN0YW5kYXJkLTIxIj5DIHN0YW5kYXJkPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1DLXN0YW5kYXJkcy0yMiI+QyBzdGFuZGFyZHM8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdfMDAyYl8wMDJiLmh0bWwjaW5kZXgtY18wMDJiXzAwMmItOTUiPjxjb2RlPmMrKzwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZva2luZy1HXzAwMmJfMDAyYi5odG1sI0ludm9raW5nLUdfMDAyYl8wMDJiIj5JbnZva2luZyBHKys8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtQ18wMDJiXzAwMmItMTQiPkMrKzwvYT46IDxhIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNHXzAwMmJfMDAyYi1hbmQtR0NDIj5HKysgYW5kIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLUNvbW1lbnRzLmh0bWwjaW5kZXgtQ18wMDJiXzAwMmItY29tbWVudHMtMjc1MCI+QysrIGNvbW1lbnRzPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItQ29tbWVudHMuaHRtbCNDXzAwMmJfMDAyYi1Db21tZW50cyI+QysrIENvbW1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjaW5kZXgtQ18wMDJiXzAwMmItY29tcGlsYXRpb24tb3B0aW9ucy03MSI+QysrIGNvbXBpbGF0aW9uIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sI2luZGV4LUNfMDAyYl8wMDJiLWludGVyZmFjZS1hbmQtaW1wbGVtZW50YXRpb24taGVhZGVycy0zNTA2Ij5DKysgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbiBoZWFkZXJzPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI2luZGV4LUNfMDAyYl8wMDJiLWxhbmd1YWdlLWV4dGVuc2lvbnMtMzQ5MyI+QysrIGxhbmd1YWdlIGV4dGVuc2lvbnM8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmxpbmUuaHRtbCNpbmRleC1DXzAwMmJfMDAyYi1tZW1iZXItZm5zXzAwMmMtYXV0b21hdGljYWxseS1fMDA0MGNvZGVfMDA3YmlubGluZV8wMDdkLTI3OTciPkMrKyBtZW1iZXIgZm5zLCBhdXRvbWF0aWNhbGx5IDxjb2RlPmlubGluZTwvY29kZT48L2E+OiA8YSBocmVmPSJJbmxpbmUuaHRtbCNJbmxpbmUiPklubGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzLmh0bWwjaW5kZXgtQ18wMDJiXzAwMmItbWlzdW5kZXJzdGFuZGluZ3MtMzU2OSI+QysrIG1pc3VuZGVyc3RhbmRpbmdzPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MuaHRtbCNDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncyI+QysrIE1pc3VuZGVyc3RhbmRpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtQ18wMDJiXzAwMmItb3B0aW9uc18wMDJjLWNvbW1hbmRfMDAyZGxpbmUtMTMxIj5DKysgb3B0aW9ucywgY29tbWFuZC1saW5lPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjaW5kZXgtQ18wMDJiXzAwMmItcHJhZ21hc18wMDJjLWVmZmVjdC1vbi1pbmxpbmluZy0zNTE0Ij5DKysgcHJhZ21hcywgZWZmZWN0IG9uIGlubGluaW5nPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNpbmRleC1DXzAwMmJfMDAyYi1zb3VyY2UtZmlsZS1zdWZmaXhlcy05MyI+QysrIHNvdXJjZSBmaWxlIHN1ZmZpeGVzPC9hPjogPGEgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNJbnZva2luZy1HXzAwMmJfMDAyYiI+SW52b2tpbmcgRysrPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhdGljLURlZmluaXRpb25zLmh0bWwjaW5kZXgtQ18wMDJiXzAwMmItc3RhdGljLWRhdGFfMDAyYy1kZWNsYXJpbmctYW5kLWRlZmluaW5nLTM1NzAiPkMrKyBzdGF0aWMgZGF0YSwgZGVjbGFyaW5nIGFuZCBkZWZpbmluZzwvYT46IDxhIGhyZWY9IlN0YXRpYy1EZWZpbml0aW9ucy5odG1sI1N0YXRpYy1EZWZpbml0aW9ucyI+U3RhdGljIERlZmluaXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtQzExLTQ0Ij5DMTE8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUMxWC00NiI+QzFYPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDNlgtT3B0aW9ucy5odG1sI2luZGV4LUM2WC1PcHRpb25zLTExOTUiPkM2WCBPcHRpb25zPC9hPjogPGEgaHJlZj0iQzZYLU9wdGlvbnMuaHRtbCNDNlgtT3B0aW9ucyI+QzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1DODktMjYiPkM4OTwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtQzkwLTM0Ij5DOTA8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUM5NC0zNiI+Qzk0PC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1DOTUtMzgiPkM5NTwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtQzk5LTQwIj5DOTk8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUM5WC00MiI+QzlYPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1DXzAwNWZJTkNMVURFXzAwNWZQQVRILTIzODMiPjxjb2RlPkNfSU5DTFVERV9QQVRIPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYWJzLTI5OTUiPjxjb2RlPmNhYnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhYnNmLTI5OTYiPjxjb2RlPmNhYnNmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYWJzbC0yOTk3Ij48Y29kZT5jYWJzbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2Fjb3MtMjk5OCI+PGNvZGU+Y2Fjb3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhY29zZi0yOTk5Ij48Y29kZT5jYWNvc2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhY29zaC0zMDAwIj48Y29kZT5jYWNvc2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhY29zaGYtMzAwMSI+PGNvZGU+Y2Fjb3NoZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2Fjb3NobC0zMDAyIj48Y29kZT5jYWNvc2hsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYWNvc2wtMzAwMyI+PGNvZGU+Y2Fjb3NsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY2FsbGVlXzAwNWZwb3BfMDA1ZmFnZ3JlZ2F0ZV8wMDVmcmV0dXJuXzAwN2QtYXR0cmlidXRlLTI2MzgiPjxjb2RlPmNhbGxlZV9wb3BfYWdncmVnYXRlX3JldHVybjwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtY2FsbGluZy1mdW5jdGlvbnMtdGhyb3VnaC10aGUtZnVuY3Rpb24tdmVjdG9yLW9uLUg4XzAwMmYzMDBfMDAyYy1NMTZDXzAwMmMtTTMyQy1hbmQtU0gyQS1wcm9jZXNzb3JzLTI2MTQiPmNhbGxpbmcgZnVuY3Rpb25zIHRocm91Z2ggdGhlIGZ1bmN0aW9uIHZlY3RvciBvbiBIOC8zMDAsIE0xNkMsIE0zMkMgYW5kIFNIMkEgcHJvY2Vzc29yczwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYWxsb2MtMzAwNCI+PGNvZGU+Y2FsbG9jPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYXJnLTMwMDUiPjxjb2RlPmNhcmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhcmdmLTMwMDYiPjxjb2RlPmNhcmdmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYXJnbC0zMDA3Ij48Y29kZT5jYXJnbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlc2lnbmF0ZWQtSW5pdHMuaHRtbCNpbmRleC1jYXNlLWxhYmVscy1pbi1pbml0aWFsaXplcnMtMjU1MyI+Y2FzZSBsYWJlbHMgaW4gaW5pdGlhbGl6ZXJzPC9hPjogPGEgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI0Rlc2lnbmF0ZWQtSW5pdHMiPkRlc2lnbmF0ZWQgSW5pdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDYXNlLVJhbmdlcy5odG1sI2luZGV4LWNhc2UtcmFuZ2VzLTI1NTciPmNhc2UgcmFuZ2VzPC9hPjogPGEgaHJlZj0iQ2FzZS1SYW5nZXMuaHRtbCNDYXNlLVJhbmdlcyI+Q2FzZSBSYW5nZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhc2luLTMwMDgiPjxjb2RlPmNhc2luPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYXNpbmYtMzAwOSI+PGNvZGU+Y2FzaW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYXNpbmgtMzAxMCI+PGNvZGU+Y2FzaW5oPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYXNpbmhmLTMwMTEiPjxjb2RlPmNhc2luaGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhc2luaGwtMzAxMiI+PGNvZGU+Y2FzaW5obDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2FzaW5sLTMwMTMiPjxjb2RlPmNhc2lubDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNhc3QtdG8tVW5pb24uaHRtbCNpbmRleC1jYXN0LXRvLWEtdW5pb24tMjU1OSI+Y2FzdCB0byBhIHVuaW9uPC9hPjogPGEgaHJlZj0iQ2FzdC10by1Vbmlvbi5odG1sI0Nhc3QtdG8tVW5pb24iPkNhc3QgdG8gVW5pb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhdGFuLTMwMTQiPjxjb2RlPmNhdGFuPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYXRhbmYtMzAxNSI+PGNvZGU+Y2F0YW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYXRhbmgtMzAxNiI+PGNvZGU+Y2F0YW5oPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYXRhbmhmLTMwMTciPjxjb2RlPmNhdGFuaGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNhdGFuaGwtMzAxOCI+PGNvZGU+Y2F0YW5obDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2F0YW5sLTMwMTkiPjxjb2RlPmNhdGFubDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2JydC0zMDIwIj48Y29kZT5jYnJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jYnJ0Zi0zMDIxIj48Y29kZT5jYnJ0ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2JydGwtMzAyMiI+PGNvZGU+Y2JydGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNjb3MtMzAyMyI+PGNvZGU+Y2NvczwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2Nvc2YtMzAyNCI+PGNvZGU+Y2Nvc2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNjb3NoLTMwMjUiPjxjb2RlPmNjb3NoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jY29zaGYtMzAyNiI+PGNvZGU+Y2Nvc2hmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jY29zaGwtMzAyNyI+PGNvZGU+Y2Nvc2hsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jY29zbC0zMDI4Ij48Y29kZT5jY29zbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2VpbC0zMDI5Ij48Y29kZT5jZWlsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jZWlsZi0zMDMwIj48Y29kZT5jZWlsZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2VpbGwtMzAzMSI+PGNvZGU+Y2VpbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNleHAtMzAzMiI+PGNvZGU+Y2V4cDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2V4cGYtMzAzMyI+PGNvZGU+Y2V4cGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNleHBsLTMwMzQiPjxjb2RlPmNleHBsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1jaGFyYWN0ZXItc2V0XzAwMmMtZXhlY3V0aW9uLTk5NyI+Y2hhcmFjdGVyIHNldCwgZXhlY3V0aW9uPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWNoYXJhY3Rlci1zZXRfMDAyYy1pbnB1dC0xMDAxIj5jaGFyYWN0ZXIgc2V0LCBpbnB1dDwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtY2hhcmFjdGVyLXNldF8wMDJjLWlucHV0LW5vcm1hbGl6YXRpb24tNDgwIj5jaGFyYWN0ZXIgc2V0LCBpbnB1dCBub3JtYWxpemF0aW9uPC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWNoYXJhY3Rlci1zZXRfMDAyYy13aWRlLWV4ZWN1dGlvbi05OTkiPmNoYXJhY3RlciBzZXQsIHdpZGUgZXhlY3V0aW9uPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNpbWFnLTMwMzUiPjxjb2RlPmNpbWFnPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jaW1hZ2YtMzAzNiI+PGNvZGU+Y2ltYWdmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jaW1hZ2wtMzAzNyI+PGNvZGU+Y2ltYWdsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY2xlYW51cF8wMDdkLWF0dHJpYnV0ZS0yNzU4Ij48Y29kZT5jbGVhbnVwPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2xvZy0zMDM4Ij48Y29kZT5jbG9nPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jbG9nZi0zMDM5Ij48Y29kZT5jbG9nZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY2xvZ2wtMzA0MCI+PGNvZGU+Y2xvZ2w8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtQ09CT0wtMTEiPkNPQk9MPC9hPjogPGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI0dfMDAyYl8wMDJiLWFuZC1HQ0MiPkcrKyBhbmQgR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWNvZGUtZ2VuZXJhdGlvbi1jb252ZW50aW9ucy0yMzIzIj5jb2RlIGdlbmVyYXRpb24gY29udmVudGlvbnM8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1peGVkLURlY2xhcmF0aW9ucy5odG1sI2luZGV4LWNvZGVfMDAyYy1taXhlZC13aXRoLWRlY2xhcmF0aW9ucy0yNTYzIj5jb2RlLCBtaXhlZCB3aXRoIGRlY2xhcmF0aW9uczwvYT46IDxhIGhyZWY9Ik1peGVkLURlY2xhcmF0aW9ucy5odG1sI01peGVkLURlY2xhcmF0aW9ucyI+TWl4ZWQgRGVjbGFyYXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY29sZF8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjYxIj48Y29kZT5jb2xkPC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNvbGRfMDA3ZC1sYWJlbC1hdHRyaWJ1dGUtMjY2MiI+PGNvZGU+Y29sZDwvY29kZT4gbGFiZWwgYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNpbmRleC1jb21tYW5kLW9wdGlvbnMtNjgiPmNvbW1hbmQgb3B0aW9uczwvYT46IDxhIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyI+SW52b2tpbmcgR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItQ29tbWVudHMuaHRtbCNpbmRleC1jb21tZW50c18wMDJjLUNfMDAyYl8wMDJiLXN0eWxlLTI3NTEiPmNvbW1lbnRzLCBDKysgc3R5bGU8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1Db21tZW50cy5odG1sI0NfMDAyYl8wMDJiLUNvbW1lbnRzIj5DKysgQ29tbWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb21tb25fMDA3ZC1hdHRyaWJ1dGUtMjc1OSI+PGNvZGU+Y29tbW9uPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWNvbXBhcmlzb24tb2Ytc2lnbmVkLWFuZC11bnNpZ25lZC12YWx1ZXNfMDAyYy13YXJuaW5nLTQ0MCI+Y29tcGFyaXNvbiBvZiBzaWduZWQgYW5kIHVuc2lnbmVkIHZhbHVlcywgd2FybmluZzwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLVJlcG9ydGluZy5odG1sI2luZGV4LWNvbXBpbGVyLWJ1Z3NfMDAyYy1yZXBvcnRpbmctMzYwMyI+Y29tcGlsZXIgYnVncywgcmVwb3J0aW5nPC9hPjogPGEgaHJlZj0iQnVnLVJlcG9ydGluZy5odG1sI0J1Zy1SZXBvcnRpbmciPkJ1ZyBSZXBvcnRpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtY29tcGlsZXItY29tcGFyZWQtdG8tQ18wMDJiXzAwMmItcHJlcHJvY2Vzc29yLTE4Ij5jb21waWxlciBjb21wYXJlZCB0byBDKysgcHJlcHJvY2Vzc29yPC9hPjogPGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI0dfMDAyYl8wMDJiLWFuZC1HQ0MiPkcrKyBhbmQgR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtY29tcGlsZXItb3B0aW9uc18wMDJjLUNfMDAyYl8wMDJiLTEzMCI+Y29tcGlsZXIgb3B0aW9ucywgQysrPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWNvbXBpbGVyLW9wdGlvbnNfMDAyYy1PYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItMjA2Ij5jb21waWxlciBvcHRpb25zLCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKzwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUYXJnZXQtT3B0aW9ucy5odG1sI2luZGV4LWNvbXBpbGVyLXZlcnNpb25fMDAyYy1zcGVjaWZ5aW5nLTEwNzMiPmNvbXBpbGVyIHZlcnNpb24sIHNwZWNpZnlpbmc8L2E+OiA8YSBocmVmPSJUYXJnZXQtT3B0aW9ucy5odG1sI1RhcmdldC1PcHRpb25zIj5UYXJnZXQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LUNPTVBJTEVSXzAwNWZQQVRILTIzNzgiPjxjb2RlPkNPTVBJTEVSX1BBVEg8L2NvZGU+PC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wbGV4Lmh0bWwjaW5kZXgtY29tcGxleC1jb25qdWdhdGlvbi0yNDQ4Ij5jb21wbGV4IGNvbmp1Z2F0aW9uPC9hPjogPGEgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wbGV4Lmh0bWwjaW5kZXgtY29tcGxleC1udW1iZXJzLTI0NDMiPmNvbXBsZXggbnVtYmVyczwvYT46IDxhIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tcG91bmQtTGl0ZXJhbHMuaHRtbCNpbmRleC1jb21wb3VuZC1saXRlcmFscy0yNTUwIj5jb21wb3VuZCBsaXRlcmFsczwvYT46IDxhIGhyZWY9IkNvbXBvdW5kLUxpdGVyYWxzLmh0bWwjQ29tcG91bmQtTGl0ZXJhbHMiPkNvbXBvdW5kIExpdGVyYWxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI2luZGV4LWNvbXB1dGVkLWdvdG9zLTI0MDkiPmNvbXB1dGVkIGdvdG9zPC9hPjogPGEgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI0xhYmVscy1hcy1WYWx1ZXMiPkxhYmVscyBhcyBWYWx1ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNpbmRleC1jb25kaXRpb25hbC1leHByZXNzaW9uc18wMDJjLWV4dGVuc2lvbnMtMjQzMCI+Y29uZGl0aW9uYWwgZXhwcmVzc2lvbnMsIGV4dGVuc2lvbnM8L2E+OiA8YSBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiPkNvbmRpdGlvbmFsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpc2FwcG9pbnRtZW50cy5odG1sI2luZGV4LWNvbmZsaWN0aW5nLXR5cGVzLTM1NjMiPmNvbmZsaWN0aW5nIHR5cGVzPC9hPjogPGEgaHJlZj0iRGlzYXBwb2ludG1lbnRzLmh0bWwjRGlzYXBwb2ludG1lbnRzIj5EaXNhcHBvaW50bWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNvbmotMzA0MSI+PGNvZGU+Y29uajwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY29uamYtMzA0MiI+PGNvZGU+Y29uamY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNvbmpsLTMwNDMiPjxjb2RlPmNvbmpsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiY29uc3RfMDA3ZC1hcHBsaWVkLXRvLWZ1bmN0aW9uLTI1NzIiPjxjb2RlPmNvbnN0PC9jb2RlPiBhcHBsaWVkIHRvIGZ1bmN0aW9uPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb25zdF8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTkzIj48Y29kZT5jb25zdDwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1jb25zdGFudHMtaW4tY29uc3RyYWludHMtMjgyMyI+Y29uc3RhbnRzIGluIGNvbnN0cmFpbnRzPC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNb2RpZmllcnMuaHRtbCNpbmRleC1jb25zdHJhaW50LW1vZGlmaWVyLWNoYXJhY3RlcnMtMjg1MSI+Y29uc3RyYWludCBtb2RpZmllciBjaGFyYWN0ZXJzPC9hPjogPGEgaHJlZj0iTW9kaWZpZXJzLmh0bWwjTW9kaWZpZXJzIj5Nb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1jb25zdHJhaW50XzAwMmMtbWF0Y2hpbmctMjgzNyI+Y29uc3RyYWludCwgbWF0Y2hpbmc8L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtY29uc3RyYWludHNfMDAyYy1fMDA0MGNvZGVfMDA3YmFzbV8wMDdkLTI4MTAiPmNvbnN0cmFpbnRzLCA8Y29kZT5hc208L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyI+Q29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNYWNoaW5lLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtY29uc3RyYWludHNfMDAyYy1tYWNoaW5lLXNwZWNpZmljLTI4NjAiPmNvbnN0cmFpbnRzLCBtYWNoaW5lIHNwZWNpZmljPC9hPjogPGEgaHJlZj0iTWFjaGluZS1Db25zdHJhaW50cy5odG1sI01hY2hpbmUtQ29uc3RyYWludHMiPk1hY2hpbmUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25zdHJ1Y3RpbmctQ2FsbHMuaHRtbCNpbmRleC1jb25zdHJ1Y3RpbmctY2FsbHMtMjQxNSI+Y29uc3RydWN0aW5nIGNhbGxzPC9hPjogPGEgaHJlZj0iQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwjQ29uc3RydWN0aW5nLUNhbGxzIj5Db25zdHJ1Y3RpbmcgQ2FsbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wb3VuZC1MaXRlcmFscy5odG1sI2luZGV4LWNvbnN0cnVjdG9yLWV4cHJlc3Npb25zLTI1NDYiPmNvbnN0cnVjdG9yIGV4cHJlc3Npb25zPC9hPjogPGEgaHJlZj0iQ29tcG91bmQtTGl0ZXJhbHMuaHRtbCNDb21wb3VuZC1MaXRlcmFscyI+Q29tcG91bmQgTGl0ZXJhbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jjb25zdHJ1Y3Rvcl8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTk1Ij48Y29kZT5jb25zdHJ1Y3RvcjwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb250cmlidXRvcnMuaHRtbCNpbmRleC1jb250cmlidXRvcnMtMzYwNSI+Y29udHJpYnV0b3JzPC9hPjogPGEgaHJlZj0iQ29udHJpYnV0b3JzLmh0bWwjQ29udHJpYnV0b3JzIj5Db250cmlidXRvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNvcHlzaWduLTMwNDQiPjxjb2RlPmNvcHlzaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jb3B5c2lnbmYtMzA0NSI+PGNvZGU+Y29weXNpZ25mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jb3B5c2lnbmwtMzA0NiI+PGNvZGU+Y29weXNpZ25sPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjaW5kZXgtY29yZS1kdW1wLTM1OTYiPmNvcmUgZHVtcDwvYT46IDxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI0J1Zy1Dcml0ZXJpYSI+QnVnIENyaXRlcmlhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jb3MtMzA0NyI+PGNvZGU+Y29zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jb3NmLTMwNDgiPjxjb2RlPmNvc2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNvc2gtMzA0OSI+PGNvZGU+Y29zaDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY29zaGYtMzA1MCI+PGNvZGU+Y29zaGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNvc2hsLTMwNTEiPjxjb2RlPmNvc2hsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jb3NsLTMwNTIiPjxjb2RlPmNvc2w8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1DUEFUSC0yMzgyIj48Y29kZT5DUEFUSDwvY29kZT48L2E+OiA8YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LUNQTFVTXzAwNWZJTkNMVURFXzAwNWZQQVRILTIzODQiPjxjb2RlPkNQTFVTX0lOQ0xVREVfUEFUSDwvY29kZT48L2E+OiA8YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3Bvdy0zMDUzIj48Y29kZT5jcG93PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jcG93Zi0zMDU0Ij48Y29kZT5jcG93ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3Bvd2wtMzA1NSI+PGNvZGU+Y3Bvd2w8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNwcm9qLTMwNTYiPjxjb2RlPmNwcm9qPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jcHJvamYtMzA1NyI+PGNvZGU+Y3Byb2pmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jcHJvamwtMzA1OCI+PGNvZGU+Y3Byb2psPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1IxNi1PcHRpb25zLmh0bWwjaW5kZXgtQ1IxNi1PcHRpb25zLTEyMzIiPkNSMTYgT3B0aW9uczwvYT46IDxhIGhyZWY9IkNSMTYtT3B0aW9ucy5odG1sI0NSMTYtT3B0aW9ucyI+Q1IxNiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jcmVhbC0zMDU5Ij48Y29kZT5jcmVhbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3JlYWxmLTMwNjAiPjxjb2RlPmNyZWFsZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3JlYWxsLTMwNjEiPjxjb2RlPmNyZWFsbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI2luZGV4LUNSSVMtT3B0aW9ucy0xMjAzIj5DUklTIE9wdGlvbnM8L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRhcmdldC1PcHRpb25zLmh0bWwjaW5kZXgtY3Jvc3MtY29tcGlsaW5nLTEwNzAiPmNyb3NzIGNvbXBpbGluZzwvYT46IDxhIGhyZWY9IlRhcmdldC1PcHRpb25zLmh0bWwjVGFyZ2V0LU9wdGlvbnMiPlRhcmdldCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jc2luLTMwNjIiPjxjb2RlPmNzaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNzaW5mLTMwNjMiPjxjb2RlPmNzaW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jc2luaC0zMDY0Ij48Y29kZT5jc2luaDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3NpbmhmLTMwNjUiPjxjb2RlPmNzaW5oZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3NpbmhsLTMwNjYiPjxjb2RlPmNzaW5obDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3NpbmwtMzA2NyI+PGNvZGU+Y3Npbmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWNzcXJ0LTMwNjgiPjxjb2RlPmNzcXJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jc3FydGYtMzA2OSI+PGNvZGU+Y3NxcnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jc3FydGwtMzA3MCI+PGNvZGU+Y3NxcnRsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jdGFuLTMwNzEiPjxjb2RlPmN0YW48L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWN0YW5mLTMwNzIiPjxjb2RlPmN0YW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1jdGFuaC0zMDczIj48Y29kZT5jdGFuaDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3RhbmhmLTMwNzQiPjxjb2RlPmN0YW5oZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3RhbmhsLTMwNzUiPjxjb2RlPmN0YW5obDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtY3RhbmwtMzA3NiI+PGNvZGU+Y3Rhbmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LURhcndpbi1vcHRpb25zLTEyNDAiPkRhcndpbiBvcHRpb25zPC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWRjZ2V0dGV4dC0zMDc3Ij48Y29kZT5kY2dldHRleHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JERF8wMDdkLWludGVnZXItc3VmZml4LTI0NjYiPjxjb2RlPkREPC9jb2RlPiBpbnRlZ2VyIHN1ZmZpeDwvYT46IDxhIGhyZWY9IkRlY2ltYWwtRmxvYXQuaHRtbCNEZWNpbWFsLUZsb2F0Ij5EZWNpbWFsIEZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZGRfMDA3ZC1pbnRlZ2VyLXN1ZmZpeC0yNDYzIj48Y29kZT5kZDwvY29kZT4gaW50ZWdlciBzdWZmaXg8L2E+OiA8YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjRGVjaW1hbC1GbG9hdCI+RGVjaW1hbCBGbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUxlbmd0aC5odG1sI2luZGV4LWRlYWxsb2NhdGluZy12YXJpYWJsZS1sZW5ndGgtYXJyYXlzLTI1MjciPmRlYWxsb2NhdGluZyB2YXJpYWJsZSBsZW5ndGggYXJyYXlzPC9hPjogPGEgaHJlZj0iVmFyaWFibGUtTGVuZ3RoLmh0bWwjVmFyaWFibGUtTGVuZ3RoIj5WYXJpYWJsZSBMZW5ndGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWRlYnVnZ2luZy1pbmZvcm1hdGlvbi1vcHRpb25zLTUzOSI+ZGVidWdnaW5nIGluZm9ybWF0aW9uIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlY2ltYWwtRmxvYXQuaHRtbCNpbmRleC1kZWNpbWFsLWZsb2F0aW5nLXR5cGVzLTI0NTgiPmRlY2ltYWwgZmxvYXRpbmcgdHlwZXM8L2E+OiA8YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjRGVjaW1hbC1GbG9hdCI+RGVjaW1hbCBGbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjaW5kZXgtZGVjbGFyYXRpb24tc2NvcGUtMzU1MSI+ZGVjbGFyYXRpb24gc2NvcGU8L2E+OiA8YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj5JbmNvbXBhdGliaWxpdGllczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YXRlbWVudC1FeHBycy5odG1sI2luZGV4LWRlY2xhcmF0aW9ucy1pbnNpZGUtZXhwcmVzc2lvbnMtMjQwMiI+ZGVjbGFyYXRpb25zIGluc2lkZSBleHByZXNzaW9uczwvYT46IDxhIGhyZWY9IlN0YXRlbWVudC1FeHBycy5odG1sI1N0YXRlbWVudC1FeHBycyI+U3RhdGVtZW50IEV4cHJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWl4ZWQtRGVjbGFyYXRpb25zLmh0bWwjaW5kZXgtZGVjbGFyYXRpb25zXzAwMmMtbWl4ZWQtd2l0aC1jb2RlLTI1NjIiPmRlY2xhcmF0aW9ucywgbWl4ZWQgd2l0aCBjb2RlPC9hPjogPGEgaHJlZj0iTWl4ZWQtRGVjbGFyYXRpb25zLmh0bWwjTWl4ZWQtRGVjbGFyYXRpb25zIj5NaXhlZCBEZWNsYXJhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZGVjbGFyaW5nLWF0dHJpYnV0ZXMtb2YtZnVuY3Rpb25zLTI1NjUiPmRlY2xhcmluZyBhdHRyaWJ1dGVzIG9mIGZ1bmN0aW9uczwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhdGljLURlZmluaXRpb25zLmh0bWwjaW5kZXgtZGVjbGFyaW5nLXN0YXRpYy1kYXRhLWluLUNfMDAyYl8wMDJiLTM1NzIiPmRlY2xhcmluZyBzdGF0aWMgZGF0YSBpbiBDKys8L2E+OiA8YSBocmVmPSJTdGF0aWMtRGVmaW5pdGlvbnMuaHRtbCNTdGF0aWMtRGVmaW5pdGlvbnMiPlN0YXRpYyBEZWZpbml0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YXRpYy1EZWZpbml0aW9ucy5odG1sI2luZGV4LWRlZmluaW5nLXN0YXRpYy1kYXRhLWluLUNfMDAyYl8wMDJiLTM1NzMiPmRlZmluaW5nIHN0YXRpYyBkYXRhIGluIEMrKzwvYT46IDxhIGhyZWY9IlN0YXRpYy1EZWZpbml0aW9ucy5odG1sI1N0YXRpYy1EZWZpbml0aW9ucyI+U3RhdGljIERlZmluaXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjaW5kZXgtZGVwZW5kZW5jaWVzLWZvci1tYWtlLWFzLW91dHB1dC0yMzg3Ij5kZXBlbmRlbmNpZXMgZm9yIG1ha2UgYXMgb3V0cHV0PC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWRlcGVuZGVuY2llc18wMDJjLV8wMDQwY29tbWFuZF8wMDdibWFrZV8wMDdkLTk2MSI+ZGVwZW5kZW5jaWVzLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bWFrZTwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1ERVBFTkRFTkNJRVNfMDA1Zk9VVFBVVC0yMzg2Ij48Y29kZT5ERVBFTkRFTkNJRVNfT1VUUFVUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTmFtZS1sb29rdXAuaHRtbCNpbmRleC1kZXBlbmRlbnQtbmFtZS1sb29rdXAtMzU3NiI+ZGVwZW5kZW50IG5hbWUgbG9va3VwPC9hPjogPGEgaHJlZj0iTmFtZS1sb29rdXAuaHRtbCNOYW1lLWxvb2t1cCI+TmFtZSBsb29rdXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkZXByZWNhdGVkXzAwN2QtYXR0cmlidXRlLTI3NjMiPjxjb2RlPmRlcHJlY2F0ZWQ8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZGVwcmVjYXRlZF8wMDdkLWF0dHJpYnV0ZV8wMDJlLTI1OTciPjxjb2RlPmRlcHJlY2F0ZWQ8L2NvZGU+IGF0dHJpYnV0ZS48L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlc2lnbmF0ZWQtSW5pdHMuaHRtbCNpbmRleC1kZXNpZ25hdGVkLWluaXRpYWxpemVycy0yNTU0Ij5kZXNpZ25hdGVkIGluaXRpYWxpemVyczwvYT46IDxhIGhyZWY9IkRlc2lnbmF0ZWQtSW5pdHMuaHRtbCNEZXNpZ25hdGVkLUluaXRzIj5EZXNpZ25hdGVkIEluaXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI2luZGV4LWRlc2lnbmF0b3ItbGlzdHMtMjU1NiI+ZGVzaWduYXRvciBsaXN0czwvYT46IDxhIGhyZWY9IkRlc2lnbmF0ZWQtSW5pdHMuaHRtbCNEZXNpZ25hdGVkLUluaXRzIj5EZXNpZ25hdGVkIEluaXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI2luZGV4LWRlc2lnbmF0b3JzLTI1NTUiPmRlc2lnbmF0b3JzPC9hPjogPGEgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI0Rlc2lnbmF0ZWQtSW5pdHMiPkRlc2lnbmF0ZWQgSW5pdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkZXN0cnVjdG9yXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI1OTYiPjxjb2RlPmRlc3RydWN0b3I8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiREZfMDA3ZC1pbnRlZ2VyLXN1ZmZpeC0yNDY1Ij48Y29kZT5ERjwvY29kZT4gaW50ZWdlciBzdWZmaXg8L2E+OiA8YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjRGVjaW1hbC1GbG9hdCI+RGVjaW1hbCBGbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlY2ltYWwtRmxvYXQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRmXzAwN2QtaW50ZWdlci1zdWZmaXgtMjQ2MiI+PGNvZGU+ZGY8L2NvZGU+IGludGVnZXIgc3VmZml4PC9hPjogPGEgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI0RlY2ltYWwtRmxvYXQiPkRlY2ltYWwgRmxvYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWRnZXR0ZXh0LTMwNzgiPjxjb2RlPmRnZXR0ZXh0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI2luZGV4LWRpYWdub3N0aWMtbWVzc2FnZXMtMjM1Ij5kaWFnbm9zdGljIG1lc3NhZ2VzPC9hPjogPGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWRpYWxlY3Qtb3B0aW9ucy05NyI+ZGlhbGVjdCBvcHRpb25zPC9hPjogPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1kaWdpdHMtaW4tY29uc3RyYWludC0yODM1Ij5kaWdpdHMgaW4gY29uc3RyYWludDwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1kaXJlY3Rvcnktb3B0aW9ucy0xMDU0Ij5kaXJlY3Rvcnkgb3B0aW9uczwvYT46IDxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiPkRpcmVjdG9yeSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZGlzaW50ZXJydXB0XzAwN2QtYXR0cmlidXRlLTI1OTgiPjxjb2RlPmRpc2ludGVycnVwdDwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JETF8wMDdkLWludGVnZXItc3VmZml4LTI0NjciPjxjb2RlPkRMPC9jb2RlPiBpbnRlZ2VyIHN1ZmZpeDwvYT46IDxhIGhyZWY9IkRlY2ltYWwtRmxvYXQuaHRtbCNEZWNpbWFsLUZsb2F0Ij5EZWNpbWFsIEZsb2F0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZGxfMDA3ZC1pbnRlZ2VyLXN1ZmZpeC0yNDY0Ij48Y29kZT5kbDwvY29kZT4gaW50ZWdlciBzdWZmaXg8L2E+OiA8YSBocmVmPSJEZWNpbWFsLUZsb2F0Lmh0bWwjRGVjaW1hbC1GbG9hdCI+RGVjaW1hbCBGbG9hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRvbGxhci1TaWducy5odG1sI2luZGV4LWRvbGxhci1zaWducy1pbi1pZGVudGlmaWVyLW5hbWVzLTI3NTMiPmRvbGxhciBzaWducyBpbiBpZGVudGlmaWVyIG5hbWVzPC9hPjogPGEgaHJlZj0iRG9sbGFyLVNpZ25zLmh0bWwjRG9sbGFyLVNpZ25zIj5Eb2xsYXIgU2lnbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb25nLUxvbmcuaHRtbCNpbmRleC1kb3VibGVfMDAyZHdvcmQtYXJpdGhtZXRpYy0yNDM5Ij5kb3VibGUtd29yZCBhcml0aG1ldGljPC9hPjogPGEgaHJlZj0iTG9uZy1Mb25nLmh0bWwjTG9uZy1Mb25nIj5Mb25nIExvbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOZXN0ZWQtRnVuY3Rpb25zLmh0bWwjaW5kZXgtZG93bndhcmQtZnVuYXJncy0yNDEzIj5kb3dud2FyZCBmdW5hcmdzPC9hPjogPGEgaHJlZj0iTmVzdGVkLUZ1bmN0aW9ucy5odG1sI05lc3RlZC1GdW5jdGlvbnMiPk5lc3RlZCBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWRyZW0tMzA3OSI+PGNvZGU+ZHJlbTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZHJlbWYtMzA4MCI+PGNvZGU+ZHJlbWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWRyZW1sLTMwODEiPjxjb2RlPmRyZW1sPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JFXzAwN2QtaW4tY29uc3RyYWludC0yODI3Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gY29uc3RyYWludDwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTW9kaWZpZXJzLmh0bWwjaW5kZXgtZWFybHljbG9iYmVyLW9wZXJhbmQtMjg1NSI+ZWFybHljbG9iYmVyIG9wZXJhbmQ8L2E+OiA8YSBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiPk1vZGlmaWVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1laWdodF8wMDJkYml0LWRhdGEtb24tdGhlLUg4XzAwMmYzMDBfMDAyYy1IOF8wMDJmMzAwSF8wMDJjLWFuZC1IOFMtMjYwMSI+ZWlnaHQtYml0IGRhdGEgb24gdGhlIEg4LzMwMCwgSDgvMzAwSCwgYW5kIEg4UzwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkVJTkRfMDA3ZC0xMTYzIj48Y29kZT5FSU5EPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW1wdHktU3RydWN0dXJlcy5odG1sI2luZGV4LWVtcHR5LXN0cnVjdHVyZXMtMjUyMCI+ZW1wdHkgc3RydWN0dXJlczwvYT46IDxhIGhyZWY9IkVtcHR5LVN0cnVjdHVyZXMuaHRtbCNFbXB0eS1TdHJ1Y3R1cmVzIj5FbXB0eSBTdHJ1Y3R1cmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjaW5kZXgtZW52aXJvbm1lbnQtdmFyaWFibGVzLTIzNjkiPmVudmlyb25tZW50IHZhcmlhYmxlczwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1lcmYtMzA4MiI+PGNvZGU+ZXJmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1lcmZjLTMwODMiPjxjb2RlPmVyZmM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWVyZmNmLTMwODQiPjxjb2RlPmVyZmNmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1lcmZjbC0zMDg1Ij48Y29kZT5lcmZjbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZXJmZi0zMDg2Ij48Y29kZT5lcmZmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1lcmZsLTMwODciPjxjb2RlPmVyZmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JlcnJvcl8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTg5Ij48Y29kZT5lcnJvcjwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5ncy1hbmQtRXJyb3JzLmh0bWwjaW5kZXgtZXJyb3ItbWVzc2FnZXMtMzU4NyI+ZXJyb3IgbWVzc2FnZXM8L2E+OiA8YSBocmVmPSJXYXJuaW5ncy1hbmQtRXJyb3JzLmh0bWwjV2FybmluZ3MtYW5kLUVycm9ycyI+V2FybmluZ3MgYW5kIEVycm9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVzY2FwZWQtTmV3bGluZXMuaHRtbCNpbmRleC1lc2NhcGVkLW5ld2xpbmVzLTI1MzQiPmVzY2FwZWQgbmV3bGluZXM8L2E+OiA8YSBocmVmPSJFc2NhcGVkLU5ld2xpbmVzLmh0bWwjRXNjYXBlZC1OZXdsaW5lcyI+RXNjYXBlZCBOZXdsaW5lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1leGNlcHRpb24taGFuZGxlci1mdW5jdGlvbnMtb24tdGhlLUJsYWNrZmluLXByb2Nlc3Nvci0yNjAyIj5leGNlcHRpb24gaGFuZGxlciBmdW5jdGlvbnMgb24gdGhlIEJsYWNrZmluIHByb2Nlc3NvcjwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTXVsdGlfMDAyZEFsdGVybmF0aXZlLmh0bWwjaW5kZXgtZXhjbGFtYXRpb24tcG9pbnQtMjg0OSI+ZXhjbGFtYXRpb24gcG9pbnQ8L2E+OiA8YSBocmVmPSJNdWx0aV8wMDJkQWx0ZXJuYXRpdmUuaHRtbCNNdWx0aV8wMDJkQWx0ZXJuYXRpdmUiPk11bHRpLUFsdGVybmF0aXZlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1leGl0LTMwODgiPjxjb2RlPmV4aXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWV4cC0zMDg5Ij48Y29kZT5leHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWV4cDEwLTMwOTAiPjxjb2RlPmV4cDEwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1leHAxMGYtMzA5MSI+PGNvZGU+ZXhwMTBmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1leHAxMGwtMzA5MiI+PGNvZGU+ZXhwMTBsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1leHAyLTMwOTMiPjxjb2RlPmV4cDI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWV4cDJmLTMwOTQiPjxjb2RlPmV4cDJmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1leHAybC0zMDk1Ij48Y29kZT5leHAybDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZXhwZi0zMDk2Ij48Y29kZT5leHBmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1leHBsLTMwOTciPjxjb2RlPmV4cGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFeHBsaWNpdC1SZWctVmFycy5odG1sI2luZGV4LWV4cGxpY2l0LXJlZ2lzdGVyLXZhcmlhYmxlcy0yODY0Ij5leHBsaWNpdCByZWdpc3RlciB2YXJpYWJsZXM8L2E+OiA8YSBocmVmPSJFeHBsaWNpdC1SZWctVmFycy5odG1sI0V4cGxpY2l0LVJlZy1WYXJzIj5FeHBsaWNpdCBSZWcgVmFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZXhwbTEtMzA5OCI+PGNvZGU+ZXhwbTE8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWV4cG0xZi0zMDk5Ij48Y29kZT5leHBtMWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWV4cG0xbC0zMTAwIj48Y29kZT5leHBtMWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnQtRXhwcnMuaHRtbCNpbmRleC1leHByZXNzaW9ucy1jb250YWluaW5nLXN0YXRlbWVudHMtMjQwMyI+ZXhwcmVzc2lvbnMgY29udGFpbmluZyBzdGF0ZW1lbnRzPC9hPjogPGEgaHJlZj0iU3RhdGVtZW50LUV4cHJzLmh0bWwjU3RhdGVtZW50LUV4cHJzIj5TdGF0ZW1lbnQgRXhwcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb21wb3VuZC1MaXRlcmFscy5odG1sI2luZGV4LWV4cHJlc3Npb25zXzAwMmMtY29uc3RydWN0b3ItMjU0OSI+ZXhwcmVzc2lvbnMsIGNvbnN0cnVjdG9yPC9hPjogPGEgaHJlZj0iQ29tcG91bmQtTGl0ZXJhbHMuaHRtbCNDb21wb3VuZC1MaXRlcmFscyI+Q29tcG91bmQgTGl0ZXJhbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFeHRlbmRlZC1Bc20uaHRtbCNpbmRleC1leHRlbmRlZC1fMDA0MGNvZGVfMDA3YmFzbV8wMDdkLTI4MDQiPmV4dGVuZGVkIDxjb2RlPmFzbTwvY29kZT48L2E+OiA8YSBocmVmPSJFeHRlbmRlZC1Bc20uaHRtbCNFeHRlbmRlZC1Bc20iPkV4dGVuZGVkIEFzbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWV4dGVuc2libGUtY29uc3RyYWludHMtMjg0NCI+ZXh0ZW5zaWJsZSBjb25zdHJhaW50czwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjaW5kZXgtZXh0ZW5zaW9uc18wMDJjLV8wMDQwY29kZV8wMDdiXzAwM2ZfMDAzYV8wMDdkLTI0MzMiPmV4dGVuc2lvbnMsIDxjb2RlPj86PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyI+Q29uZGl0aW9uYWxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjaW5kZXgtZXh0ZW5zaW9uc18wMDJjLUMtbGFuZ3VhZ2UtMjM5OCI+ZXh0ZW5zaW9ucywgQyBsYW5ndWFnZTwvYT46IDxhIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI2luZGV4LWV4dGVuc2lvbnNfMDAyYy1DXzAwMmJfMDAyYi1sYW5ndWFnZS0zNDkyIj5leHRlbnNpb25zLCBDKysgbGFuZ3VhZ2U8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LWV4dGVybmFsLWRlY2xhcmF0aW9uLXNjb3BlLTM1NDkiPmV4dGVybmFsIGRlY2xhcmF0aW9uIHNjb3BlPC9hPjogPGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JleHRlcm5hbGx5XzAwNWZ2aXNpYmxlXzAwN2QtYXR0cmlidXRlXzAwMmUtMjYwMyI+PGNvZGU+ZXh0ZXJuYWxseV92aXNpYmxlPC9jb2RlPiBhdHRyaWJ1dGUuPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3YkZfMDA3ZC1pbi1jb25zdHJhaW50LTI4MjgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Rjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWZhYnMtMzEwMSI+PGNvZGU+ZmFiczwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZmFic2YtMzEwMiI+PGNvZGU+ZmFic2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWZhYnNsLTMxMDMiPjxjb2RlPmZhYnNsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjaW5kZXgtZmF0YWwtc2lnbmFsLTM1OTUiPmZhdGFsIHNpZ25hbDwvYT46IDxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI0J1Zy1Dcml0ZXJpYSI+QnVnIENyaXRlcmlhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mZGltLTMxMDQiPjxjb2RlPmZkaW08L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWZkaW1mLTMxMDUiPjxjb2RlPmZkaW1mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mZGltbC0zMTA2Ij48Y29kZT5mZGltbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI2luZGV4LUZETF8wMDJjLUdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS0zNjA0Ij5GREwsIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT46IDxhIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mZnMtMzEwNyI+PGNvZGU+ZmZzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjaW5kZXgtZmlsZS1uYW1lLXN1ZmZpeC03NiI+ZmlsZSBuYW1lIHN1ZmZpeDwvYT46IDxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI092ZXJhbGwtT3B0aW9ucyI+T3ZlcmFsbCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtZmlsZS1uYW1lcy0xMDI1Ij5maWxlIG5hbWVzPC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1maXhlZF8wMDJkcG9pbnQtdHlwZXMtMjQ2OSI+Zml4ZWQtcG9pbnQgdHlwZXM8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmxhdHRlbl8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTg4Ij48Y29kZT5mbGF0dGVuPC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilplcm8tTGVuZ3RoLmh0bWwjaW5kZXgtZmxleGlibGUtYXJyYXktbWVtYmVycy0yNTE5Ij5mbGV4aWJsZSBhcnJheSBtZW1iZXJzPC9hPjogPGEgaHJlZj0iWmVyby1MZW5ndGguaHRtbCNaZXJvLUxlbmd0aCI+WmVybyBMZW5ndGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmxvYXRfMDA3ZC1hcy1mdW5jdGlvbi12YWx1ZS10eXBlLTM1NTYiPjxjb2RlPmZsb2F0PC9jb2RlPiBhcyBmdW5jdGlvbiB2YWx1ZSB0eXBlPC9hPjogPGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXNhcHBvaW50bWVudHMuaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludC1wcmVjaXNpb24tMzU2NSI+ZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uPC9hPjogPGEgaHJlZj0iRGlzYXBwb2ludG1lbnRzLmh0bWwjRGlzYXBwb2ludG1lbnRzIj5EaXNhcHBvaW50bWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmxvYXRpbmdfMDAyZHBvaW50LXByZWNpc2lvbi05MDEiPmZsb2F0aW5nLXBvaW50IHByZWNpc2lvbjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mbG9vci0zMTA4Ij48Y29kZT5mbG9vcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZmxvb3JmLTMxMDkiPjxjb2RlPmZsb29yZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZmxvb3JsLTMxMTAiPjxjb2RlPmZsb29ybDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZm1hLTMxMTEiPjxjb2RlPmZtYTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZm1hZi0zMTEyIj48Y29kZT5mbWFmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mbWFsLTMxMTMiPjxjb2RlPmZtYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWZtYXgtMzExNCI+PGNvZGU+Zm1heDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZm1heGYtMzExNSI+PGNvZGU+Zm1heGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWZtYXhsLTMxMTYiPjxjb2RlPmZtYXhsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mbWluLTMxMTciPjxjb2RlPmZtaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWZtaW5mLTMxMTgiPjxjb2RlPmZtaW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mbWlubC0zMTE5Ij48Y29kZT5mbWlubDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZm1vZC0zMTIwIj48Y29kZT5mbW9kPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mbW9kZi0zMTIxIj48Y29kZT5mbW9kZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZm1vZGwtMzEyMiI+PGNvZGU+Zm1vZGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmb3JjZV8wMDVmYWxpZ25fMDA1ZmFyZ18wMDVmcG9pbnRlcl8wMDdkLWF0dHJpYnV0ZS0yNjY3Ij48Y29kZT5mb3JjZV9hbGlnbl9hcmdfcG9pbnRlcjwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmb3JtYXRfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjYwOCI+PGNvZGU+Zm9ybWF0PC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZvcm1hdF8wMDVmYXJnXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2MTIiPjxjb2RlPmZvcm1hdF9hcmc8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI2luZGV4LUZvcnRyYW4tNiI+Rm9ydHJhbjwvYT46IDxhIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNHXzAwMmJfMDAyYi1hbmQtR0NDIj5HKysgYW5kIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZvcndhcmRlcl8wMDVmc2VjdGlvbl8wMDdkLWF0dHJpYnV0ZS0yNjE3Ij48Y29kZT5mb3J3YXJkZXJfc2VjdGlvbjwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25zdHJ1Y3RpbmctQ2FsbHMuaHRtbCNpbmRleC1mb3J3YXJkaW5nLWNhbGxzLTI0MTYiPmZvcndhcmRpbmcgY2FsbHM8L2E+OiA8YSBocmVmPSJDb25zdHJ1Y3RpbmctQ2FsbHMuaHRtbCNDb25zdHJ1Y3RpbmctQ2FsbHMiPkNvbnN0cnVjdGluZyBDYWxsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZnByaW50Zi0zMTIzIj48Y29kZT5mcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mcHJpbnRmXzAwNWZ1bmxvY2tlZC0zMTI0Ij48Y29kZT5mcHJpbnRmX3VubG9ja2VkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mcHV0cy0zMTI1Ij48Y29kZT5mcHV0czwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZnB1dHNfMDA1ZnVubG9ja2VkLTMxMjYiPjxjb2RlPmZwdXRzX3VubG9ja2VkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlIzMC1PcHRpb25zLmh0bWwjaW5kZXgtRlIzMC1PcHRpb25zLTEzNDUiPkZSMzAgT3B0aW9uczwvYT46IDxhIGhyZWY9IkZSMzAtT3B0aW9ucy5odG1sI0ZSMzAtT3B0aW9ucyI+RlIzMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtZnJlZXN0YW5kaW5nLWVudmlyb25tZW50LTU2Ij5mcmVlc3RhbmRpbmcgZW52aXJvbm1lbnQ8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LWZyZWVzdGFuZGluZy1pbXBsZW1lbnRhdGlvbi01NSI+ZnJlZXN0YW5kaW5nIGltcGxlbWVudGF0aW9uPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWZyZXhwLTMxMjciPjxjb2RlPmZyZXhwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mcmV4cGYtMzEyOCI+PGNvZGU+ZnJleHBmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mcmV4cGwtMzEyOSI+PGNvZGU+ZnJleHBsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1GUlYtT3B0aW9ucy0xMzQ4Ij5GUlYgT3B0aW9uczwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mc2NhbmYtMzEzMCI+PGNvZGU+ZnNjYW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZzY2FuZl8wMDdkXzAwMmMtYW5kLWNvbnN0YW50LXN0cmluZ3MtMzU0NCI+PGNvZGU+ZnNjYW5mPC9jb2RlPiwgYW5kIGNvbnN0YW50IHN0cmluZ3M8L2E+OiA8YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj5JbmNvbXBhdGliaWxpdGllczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mdW5jdGlvbi1hZGRyZXNzYWJpbGl0eS1vbi10aGUtTTMyUl8wMDJmRC0yNjM0Ij5mdW5jdGlvbiBhZGRyZXNzYWJpbGl0eSBvbiB0aGUgTTMyUi9EPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnVuY3Rpb24tYXR0cmlidXRlcy0yNTY0Ij5mdW5jdGlvbiBhdHRyaWJ1dGVzPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb2ludGVyLUFyaXRoLmh0bWwjaW5kZXgtZnVuY3Rpb24tcG9pbnRlcnNfMDAyYy1hcml0aG1ldGljLTI1NDEiPmZ1bmN0aW9uIHBvaW50ZXJzLCBhcml0aG1ldGljPC9hPjogPGEgaHJlZj0iUG9pbnRlci1Bcml0aC5odG1sI1BvaW50ZXItQXJpdGgiPlBvaW50ZXIgQXJpdGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1Qcm90b3R5cGVzLmh0bWwjaW5kZXgtZnVuY3Rpb24tcHJvdG90eXBlLWRlY2xhcmF0aW9ucy0yNzQ2Ij5mdW5jdGlvbiBwcm90b3R5cGUgZGVjbGFyYXRpb25zPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tUHJvdG90eXBlcy5odG1sI0Z1bmN0aW9uLVByb3RvdHlwZXMiPkZ1bmN0aW9uIFByb3RvdHlwZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1NdWx0aXZlcnNpb25pbmcuaHRtbCNpbmRleC1mdW5jdGlvbi12ZXJzaW9ucy0zNTI3Ij5mdW5jdGlvbiB2ZXJzaW9uczwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLU11bHRpdmVyc2lvbmluZy5odG1sI0Z1bmN0aW9uLU11bHRpdmVyc2lvbmluZyI+RnVuY3Rpb24gTXVsdGl2ZXJzaW9uaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWZ1bmN0aW9uLXdpdGhvdXQtYS1wcm9sb2d1ZV8wMDJmZXBpbG9ndWUtY29kZS0yNjQwIj5mdW5jdGlvbiB3aXRob3V0IGEgcHJvbG9ndWUvZXBpbG9ndWUgY29kZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG9pbnRlci1Bcml0aC5odG1sI2luZGV4LWZ1bmN0aW9uXzAwMmMtc2l6ZS1vZi1wb2ludGVyLXRvLTI1NDIiPmZ1bmN0aW9uLCBzaXplIG9mIHBvaW50ZXIgdG88L2E+OiA8YSBocmVmPSJQb2ludGVyLUFyaXRoLmh0bWwjUG9pbnRlci1Bcml0aCI+UG9pbnRlciBBcml0aDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mdW5jdGlvbnMtY2FsbGVkLXZpYS1wb2ludGVyLW9uLXRoZS1SU18wMDJmNjAwMC1hbmQtUG93ZXJQQy0yNjI5Ij5mdW5jdGlvbnMgY2FsbGVkIHZpYSBwb2ludGVyIG9uIHRoZSBSUy82MDAwIGFuZCBQb3dlclBDPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnVuY3Rpb25zLWluLWFyYml0cmFyeS1zZWN0aW9ucy0yNTY5Ij5mdW5jdGlvbnMgaW4gYXJiaXRyYXJ5IHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnVuY3Rpb25zLXRoYXQtYXJlLWR5bmFtaWNhbGx5LXJlc29sdmVkLTI1ODAiPmZ1bmN0aW9ucyB0aGF0IGFyZSBkeW5hbWljYWxseSByZXNvbHZlZDwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWZ1bmN0aW9ucy10aGF0LWFyZS1wYXNzZWQtYXJndW1lbnRzLWluLXJlZ2lzdGVycy1vbi10aGUtMzg2LTI1NzUiPmZ1bmN0aW9ucyB0aGF0IGFyZSBwYXNzZWQgYXJndW1lbnRzIGluIHJlZ2lzdGVycyBvbiB0aGUgMzg2PC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnVuY3Rpb25zLXRoYXQtYmVoYXZlLWxpa2UtbWFsbG9jLTI1NzAiPmZ1bmN0aW9ucyB0aGF0IGJlaGF2ZSBsaWtlIG1hbGxvYzwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWZ1bmN0aW9ucy10aGF0LWRvLW5vdC1oYW5kbGUtbWVtb3J5LWJhbmstc3dpdGNoaW5nLW9uLTY4SEMxMV8wMDJmNjhIQzEyLTI2NDEiPmZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBoYW5kbGUgbWVtb3J5IGJhbmsgc3dpdGNoaW5nIG9uIDY4SEMxMS82OEhDMTI8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mdW5jdGlvbnMtdGhhdC1kby1ub3QtcG9wLXRoZS1hcmd1bWVudC1zdGFjay1vbi10aGUtMzg2LTI1NzciPmZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBwb3AgdGhlIGFyZ3VtZW50IHN0YWNrIG9uIHRoZSAzODY8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mdW5jdGlvbnMtdGhhdC1kby1wb3AtdGhlLWFyZ3VtZW50LXN0YWNrLW9uLXRoZS0zODYtMjU5MSI+ZnVuY3Rpb25zIHRoYXQgZG8gcG9wIHRoZSBhcmd1bWVudCBzdGFjayBvbiB0aGUgMzg2PC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnVuY3Rpb25zLXRoYXQtaGFuZGxlLW1lbW9yeS1iYW5rLXN3aXRjaGluZy0yNjA0Ij5mdW5jdGlvbnMgdGhhdCBoYW5kbGUgbWVtb3J5IGJhbmsgc3dpdGNoaW5nPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnVuY3Rpb25zLXRoYXQtaGF2ZS1kaWZmZXJlbnQtY29tcGlsYXRpb24tb3B0aW9ucy1vbi10aGUtMzg2LTI1NzgiPmZ1bmN0aW9ucyB0aGF0IGhhdmUgZGlmZmVyZW50IGNvbXBpbGF0aW9uIG9wdGlvbnMgb24gdGhlIDM4NjwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWZ1bmN0aW9ucy10aGF0LWhhdmUtZGlmZmVyZW50LW9wdGltaXphdGlvbi1vcHRpb25zLTI1NzkiPmZ1bmN0aW9ucyB0aGF0IGhhdmUgZGlmZmVyZW50IG9wdGltaXphdGlvbiBvcHRpb25zPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnVuY3Rpb25zLXRoYXQtaGF2ZS1uby1zaWRlLWVmZmVjdHMtMjU2OCI+ZnVuY3Rpb25zIHRoYXQgaGF2ZSBubyBzaWRlIGVmZmVjdHM8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mdW5jdGlvbnMtdGhhdC1uZXZlci1yZXR1cm4tMjU2NiI+ZnVuY3Rpb25zIHRoYXQgbmV2ZXIgcmV0dXJuPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnVuY3Rpb25zLXRoYXQtcG9wLXRoZS1hcmd1bWVudC1zdGFjay1vbi10aGUtMzg2LTI1NzYiPmZ1bmN0aW9ucyB0aGF0IHBvcCB0aGUgYXJndW1lbnQgc3RhY2sgb24gdGhlIDM4NjwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWZ1bmN0aW9ucy10aGF0LXJldHVybi1tb3JlLXRoYW4tb25jZS0yNTY3Ij5mdW5jdGlvbnMgdGhhdCByZXR1cm4gbW9yZSB0aGFuIG9uY2U8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mdW5jdGlvbnMtd2l0aC1ub25fMDAyZG51bGwtcG9pbnRlci1hcmd1bWVudHMtMjU3NCI+ZnVuY3Rpb25zIHdpdGggbm9uLW51bGwgcG9pbnRlciBhcmd1bWVudHM8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mdW5jdGlvbnMtd2l0aC1fMDA0MGNvZGVfMDA3YnByaW50Zl8wMDdkXzAwMmMtXzAwNDBjb2RlXzAwN2JzY2FuZl8wMDdkXzAwMmMtXzAwNDBjb2RlXzAwN2JzdHJmdGltZV8wMDdkLW9yLV8wMDQwY29kZV8wMDdic3RyZm1vbl8wMDdkLXN0eWxlLWFyZ3VtZW50cy0yNTczIj5mdW5jdGlvbnMgd2l0aCA8Y29kZT5wcmludGY8L2NvZGU+LCA8Y29kZT5zY2FuZjwvY29kZT4sIDxjb2RlPnN0cmZ0aW1lPC9jb2RlPiBvciA8Y29kZT5zdHJmbW9uPC9jb2RlPiBzdHlsZSBhcmd1bWVudHM8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiZ18wMDdkLWluLWNvbnN0cmFpbnQtMjgzMiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQ8L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiR18wMDdkLWluLWNvbnN0cmFpbnQtMjgyOSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQ8L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdfMDAyYl8wMDJiLmh0bWwjaW5kZXgtZ18wMDJiXzAwMmItOTQiPjxjb2RlPmcrKzwvY29kZT48L2E+OiA8YSBocmVmPSJJbnZva2luZy1HXzAwMmJfMDAyYi5odG1sI0ludm9raW5nLUdfMDAyYl8wMDJiIj5JbnZva2luZyBHKys8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtR18wMDJiXzAwMmItMTUiPkcrKzwvYT46IDxhIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNHXzAwMmJfMDAyYi1hbmQtR0NDIj5HKysgYW5kIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ2FtbWEtMzEzMSI+PGNvZGU+Z2FtbWE8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdhbW1hXzAwNWZyLTMxMzQiPjxjb2RlPmdhbW1hX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdhbW1hZi0zMTMyIj48Y29kZT5nYW1tYWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdhbW1hZl8wMDVmci0zMTM1Ij48Y29kZT5nYW1tYWZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ2FtbWFsLTMxMzMiPjxjb2RlPmdhbW1hbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtZ2FtbWFsXzAwNWZyLTMxMzYiPjxjb2RlPmdhbW1hbF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI2luZGV4LUdDQy0yIj5HQ0M8L2E+OiA8YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+RysrIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNpbmRleC1HQ0MtY29tbWFuZC1vcHRpb25zLTY3Ij5HQ0MgY29tbWFuZCBvcHRpb25zPC9hPjogPGEgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1HQ0NfMDA1ZkNPTVBBUkVfMDA1ZkRFQlVHLTIzNzYiPjxjb2RlPkdDQ19DT01QQVJFX0RFQlVHPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjaW5kZXgtR0NDXzAwNWZFWEVDXzAwNWZQUkVGSVgtMjM3NyI+PGNvZGU+R0NDX0VYRUNfUFJFRklYPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JnY2NfMDA1ZnN0cnVjdF8wMDdkLTI3ODMiPjxjb2RlPmdjY19zdHJ1Y3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIj5UeXBlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JnY2NfMDA1ZnN0cnVjdF8wMDdkLWF0dHJpYnV0ZS0yNzc2Ij48Y29kZT5nY2Nfc3RydWN0PC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2JnY292XzAwN2QtNTgyIj48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2Nvdjwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWdldHRleHQtMzEzNyI+PGNvZGU+Z2V0dGV4dDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nbG9iYWwtb2Zmc2V0LXRhYmxlLTIzNDYiPmdsb2JhbCBvZmZzZXQgdGFibGU8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikdsb2JhbC1SZWctVmFycy5odG1sI2luZGV4LWdsb2JhbC1yZWdpc3Rlci1hZnRlci1fMDA0MGNvZGVfMDA3YmxvbmdqbXBfMDA3ZC0yODcyIj5nbG9iYWwgcmVnaXN0ZXIgYWZ0ZXIgPGNvZGU+bG9uZ2ptcDwvY29kZT48L2E+OiA8YSBocmVmPSJHbG9iYWwtUmVnLVZhcnMuaHRtbCNHbG9iYWwtUmVnLVZhcnMiPkdsb2JhbCBSZWcgVmFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikdsb2JhbC1SZWctVmFycy5odG1sI2luZGV4LWdsb2JhbC1yZWdpc3Rlci12YXJpYWJsZXMtMjg2OCI+Z2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlczwvYT46IDxhIGhyZWY9Ikdsb2JhbC1SZWctVmFycy5odG1sI0dsb2JhbC1SZWctVmFycyI+R2xvYmFsIFJlZyBWYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI2luZGV4LUdOQVQtMTciPkdOQVQ8L2E+OiA8YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+RysrIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtR05VLUMtQ29tcGlsZXItNCI+R05VIEMgQ29tcGlsZXI8L2E+OiA8YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+RysrIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtR05VLUNvbXBpbGVyLUNvbGxlY3Rpb24tMyI+R05VIENvbXBpbGVyIENvbGxlY3Rpb248L2E+OiA8YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+RysrIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JnbnVfMDA1ZmlubGluZV8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTg1Ij48Y29kZT5nbnVfaW5saW5lPC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNpbmRleC1Hby03Ij5HbzwvYT46IDxhIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNHXzAwMmJfMDAyYi1hbmQtR0NDIj5HKysgYW5kIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxhYmVscy1hcy1WYWx1ZXMuaHRtbCNpbmRleC1nb3RvLXdpdGgtY29tcHV0ZWQtbGFiZWwtMjQxMCI+Z290byB3aXRoIGNvbXB1dGVkIGxhYmVsPC9hPjogPGEgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI0xhYmVscy1hcy1WYWx1ZXMiPkxhYmVscyBhcyBWYWx1ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29tbWFuZF8wMDdiZ3Byb2ZfMDA3ZC01NzEiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5ncHJvZjwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNpbmRleC1ncm91cGluZy1vcHRpb25zLTcyIj5ncm91cGluZyBvcHRpb25zPC9hPjogPGEgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3YkhfMDA3ZC1pbi1jb25zdHJhaW50LTI4MzAiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+SDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIYWxmXzAwMmRQcmVjaXNpb24uaHRtbCNpbmRleC1oYWxmXzAwMmRwcmVjaXNpb24tZmxvYXRpbmctcG9pbnQtMjQ1NiI+aGFsZi1wcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQ8L2E+OiA8YSBocmVmPSJIYWxmXzAwMmRQcmVjaXNpb24uaHRtbCNIYWxmXzAwMmRQcmVjaXNpb24iPkhhbGYtUHJlY2lzaW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI2luZGV4LWhhcmR3YXJlLW1vZGVscy1hbmQtY29uZmlndXJhdGlvbnNfMDAyYy1zcGVjaWZ5aW5nLTEwNzciPmhhcmR3YXJlIG1vZGVscyBhbmQgY29uZmlndXJhdGlvbnMsIHNwZWNpZnlpbmc8L2E+OiA8YSBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhleC1GbG9hdHMuaHRtbCNpbmRleC1oZXgtZmxvYXRzLTI0NjgiPmhleCBmbG9hdHM8L2E+OiA8YSBocmVmPSJIZXgtRmxvYXRzLmh0bWwjSGV4LUZsb2F0cyI+SGV4IEZsb2F0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiSEtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0OTciPjxjb2RlPkhLPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Joa18wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ4MSI+PGNvZGU+aGs8L2NvZGU+IGZpeGVkLXN1ZmZpeDwvYT46IDxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWhvc3RlZC1lbnZpcm9ubWVudC0xMTAiPmhvc3RlZCBlbnZpcm9ubWVudDwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtaG9zdGVkLWVudmlyb25tZW50LTU4Ij5ob3N0ZWQgZW52aXJvbm1lbnQ8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LWhvc3RlZC1pbXBsZW1lbnRhdGlvbi01NyI+aG9zdGVkIGltcGxlbWVudGF0aW9uPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Job3RfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY1OSI+PGNvZGU+aG90PC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmhvdF8wMDdkLWxhYmVsLWF0dHJpYnV0ZS0yNjYwIj48Y29kZT5ob3Q8L2NvZGU+IGxhYmVsIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjaW5kZXgtSFBQQS1PcHRpb25zLTE0MTEiPkhQUEEgT3B0aW9uczwvYT46IDxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyI+SFBQQSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JIUl8wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ4OSI+PGNvZGU+SFI8L2NvZGU+IGZpeGVkLXN1ZmZpeDwvYT46IDxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmhyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDczIj48Y29kZT5ocjwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaHlwb3QtMzEzOCI+PGNvZGU+aHlwb3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWh5cG90Zi0zMTM5Ij48Y29kZT5oeXBvdGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWh5cG90bC0zMTQwIj48Y29kZT5oeXBvdGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3YklfMDA3ZC1pbi1jb25zdHJhaW50LTI4MjYiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+STwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3YmlfMDA3ZC1pbi1jb25zdHJhaW50LTI4MjQiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2luZGV4LWkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLTE1MTEiPmkzODYgYW5kIHg4Ni02NCBXaW5kb3dzIE9wdGlvbnM8L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgV2luZG93cyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtaTM4Ni1PcHRpb25zLTE0MzciPmkzODYgT3B0aW9uczwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LUlBXzAwMmQ2NC1PcHRpb25zLTE1MjIiPklBLTY0IE9wdGlvbnM8L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LUlCTS1SU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLTE5MDkiPklCTSBSUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRG9sbGFyLVNpZ25zLmh0bWwjaW5kZXgtaWRlbnRpZmllci1uYW1lc18wMDJjLWRvbGxhci1zaWducy1pbi0yNzU0Ij5pZGVudGlmaWVyIG5hbWVzLCBkb2xsYXIgc2lnbnMgaW48L2E+OiA8YSBocmVmPSJEb2xsYXItU2lnbnMuaHRtbCNEb2xsYXItU2lnbnMiPkRvbGxhciBTaWduczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFzbS1MYWJlbHMuaHRtbCNpbmRleC1pZGVudGlmaWVyc18wMDJjLW5hbWVzLWluLWFzc2VtYmxlci1jb2RlLTI4NjMiPmlkZW50aWZpZXJzLCBuYW1lcyBpbiBhc3NlbWJsZXIgY29kZTwvYT46IDxhIGhyZWY9IkFzbS1MYWJlbHMuaHRtbCNBc20tTGFiZWxzIj5Bc20gTGFiZWxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaWZ1bmNfMDA3ZC1hdHRyaWJ1dGUtMjYxNSI+PGNvZGU+aWZ1bmM8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pbG9nYi0zMTQxIj48Y29kZT5pbG9nYjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaWxvZ2JmLTMxNDIiPjxjb2RlPmlsb2diZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaWxvZ2JsLTMxNDMiPjxjb2RlPmlsb2dibDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaW1heGFicy0zMTQ0Ij48Y29kZT5pbWF4YWJzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI2luZGV4LWltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yXzAwMmMtQy1sYW5ndWFnZS0yMzkyIj5pbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yLCBDIGxhbmd1YWdlPC9hPjogPGEgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iPkMgSW1wbGVtZW50YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbi5odG1sI2luZGV4LWltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yXzAwMmMtQ18wMDJiXzAwMmItbGFuZ3VhZ2UtMjM5NyI+aW1wbGVtZW50YXRpb24tZGVmaW5lZCBiZWhhdmlvciwgQysrIGxhbmd1YWdlPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24uaHRtbCNDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbiI+QysrIEltcGxlbWVudGF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjaW5kZXgtaW1wbGllZC1fMDA0MGNvZGVfMDA3Yl8wMDIzcHJhZ21hLWltcGxlbWVudGF0aW9uXzAwN2QtMzUxMCI+aW1wbGllZCA8Y29kZT4jcHJhZ21hIGltcGxlbWVudGF0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sI0NfMDAyYl8wMDJiLUludGVyZmFjZSI+QysrIEludGVyZmFjZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjaW5kZXgtaW5jb21wYXRpYmlsaXRpZXMtb2YtR0NDLTM1MzciPmluY29tcGF0aWJpbGl0aWVzIG9mIEdDQzwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjaW5kZXgtaW5jcmVtZW50LW9wZXJhdG9ycy0zNjAxIj5pbmNyZW1lbnQgb3BlcmF0b3JzPC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWluZGV4LTMxNDUiPjxjb2RlPmluZGV4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWluZGlyZWN0LWNhbGxzLW9uLUFSTS0yNjI4Ij5pbmRpcmVjdCBjYWxscyBvbiBBUk08L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1pbmRpcmVjdC1jYWxscy1vbi1NSVBTLTI2MzAiPmluZGlyZWN0IGNhbGxzIG9uIE1JUFM8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmluaXRfMDA1ZnByaW9yaXR5XzAwN2QtYXR0cmlidXRlLTM1MjUiPjxjb2RlPmluaXRfcHJpb3JpdHk8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLUF0dHJpYnV0ZXMuaHRtbCNDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzIj5DKysgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbXBvdW5kLUxpdGVyYWxzLmh0bWwjaW5kZXgtaW5pdGlhbGl6YXRpb25zLWluLWV4cHJlc3Npb25zLTI1NDciPmluaXRpYWxpemF0aW9ucyBpbiBleHByZXNzaW9uczwvYT46IDxhIGhyZWY9IkNvbXBvdW5kLUxpdGVyYWxzLmh0bWwjQ29tcG91bmQtTGl0ZXJhbHMiPkNvbXBvdW5kIExpdGVyYWxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI2luZGV4LWluaXRpYWxpemVycy13aXRoLWxhYmVsZWQtZWxlbWVudHMtMjU1MSI+aW5pdGlhbGl6ZXJzIHdpdGggbGFiZWxlZCBlbGVtZW50czwvYT46IDxhIGhyZWY9IkRlc2lnbmF0ZWQtSW5pdHMuaHRtbCNEZXNpZ25hdGVkLUluaXRzIj5EZXNpZ25hdGVkIEluaXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5pdGlhbGl6ZXJzLmh0bWwjaW5kZXgtaW5pdGlhbGl6ZXJzXzAwMmMtbm9uXzAwMmRjb25zdGFudC0yNTQ0Ij5pbml0aWFsaXplcnMsIG5vbi1jb25zdGFudDwvYT46IDxhIGhyZWY9IkluaXRpYWxpemVycy5odG1sI0luaXRpYWxpemVycyI+SW5pdGlhbGl6ZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5saW5lLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpbmxpbmVfMDA3ZC1hdXRvbWF0aWMtZm9yLUNfMDAyYl8wMDJiLW1lbWJlci1mbnMtMjc5NSI+PGNvZGU+aW5saW5lPC9jb2RlPiBhdXRvbWF0aWMgZm9yIEMrKyBtZW1iZXIgZm5zPC9hPjogPGEgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIj5JbmxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmxpbmUuaHRtbCNpbmRleC1pbmxpbmUtZnVuY3Rpb25zLTI3ODciPmlubGluZSBmdW5jdGlvbnM8L2E+OiA8YSBocmVmPSJJbmxpbmUuaHRtbCNJbmxpbmUiPklubGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklubGluZS5odG1sI2luZGV4LWlubGluZS1mdW5jdGlvbnNfMDAyYy1vbWlzc2lvbi1vZi0yNzkxIj5pbmxpbmUgZnVuY3Rpb25zLCBvbWlzc2lvbiBvZjwvYT46IDxhIGhyZWY9IklubGluZS5odG1sI0lubGluZSI+SW5saW5lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjaW5kZXgtaW5saW5pbmctYW5kLUNfMDAyYl8wMDJiLXByYWdtYXMtMzUxMyI+aW5saW5pbmcgYW5kIEMrKyBwcmFnbWFzPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVHJvdWJsZS5odG1sI2luZGV4LWluc3RhbGxhdGlvbi10cm91YmxlLTM1MzQiPmluc3RhbGxhdGlvbiB0cm91YmxlPC9hPjogPGEgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiPlRyb3VibGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmxpbmUuaHRtbCNpbmRleC1pbnRlZ3JhdGluZy1mdW5jdGlvbi1jb2RlLTI3ODgiPmludGVncmF0aW5nIGZ1bmN0aW9uIGNvZGU8L2E+OiA8YSBocmVmPSJJbmxpbmUuaHRtbCNJbmxpbmUiPklubGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LUludGVsLTM4Ni1PcHRpb25zLTE0MzkiPkludGVsIDM4NiBPcHRpb25zPC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sI2luZGV4LWludGVyZmFjZS1hbmQtaW1wbGVtZW50YXRpb24taGVhZGVyc18wMDJjLUNfMDAyYl8wMDJiLTM1MDUiPmludGVyZmFjZSBhbmQgaW1wbGVtZW50YXRpb24gaGVhZGVycywgQysrPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI2luZGV4LWludGVybWVkaWF0ZS1DLXZlcnNpb25fMDAyYy1ub25leGlzdGVudC0xOSI+aW50ZXJtZWRpYXRlIEMgdmVyc2lvbiwgbm9uZXhpc3RlbnQ8L2E+OiA8YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+RysrIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtaW50ZXJydXB0LWhhbmRsZXItZnVuY3Rpb25zLTI1ODciPmludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uczwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWludGVycnVwdC1oYW5kbGVyLWZ1bmN0aW9ucy1vbi10aGUtQVZSLXByb2Nlc3NvcnMtMjY3NSI+aW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb25zIG9uIHRoZSBBVlIgcHJvY2Vzc29yczwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWludGVycnVwdC1oYW5kbGVyLWZ1bmN0aW9ucy1vbi10aGUtQmxhY2tmaW5fMDAyYy1tNjhrXzAwMmMtSDhfMDAyZjMwMC1hbmQtU0gtcHJvY2Vzc29ycy0yNjIxIj5pbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbnMgb24gdGhlIEJsYWNrZmluLCBtNjhrLCBIOC8zMDAgYW5kIFNIIHByb2Nlc3NvcnM8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1pbnRlcnJ1cHQtc2VydmljZS1yb3V0aW5lcy1vbi1BUk0tMjYyMyI+aW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgb24gQVJNPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtaW50ZXJydXB0LXRocmVhZC1mdW5jdGlvbnMtb24tZmlkby0yNjIyIj5pbnRlcnJ1cHQgdGhyZWFkIGZ1bmN0aW9ucyBvbiBmaWRvPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI2luZGV4LWludHJvZHVjdGlvbi0xIj5pbnRyb2R1Y3Rpb248L2E+OiA8YSBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjaW5kZXgtaW52YWxpZC1hc3NlbWJseS1jb2RlLTM1OTciPmludmFsaWQgYXNzZW1ibHkgY29kZTwvYT46IDxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI0J1Zy1Dcml0ZXJpYSI+QnVnIENyaXRlcmlhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjaW5kZXgtaW52YWxpZC1pbnB1dC0zNjAyIj5pbnZhbGlkIGlucHV0PC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnZva2luZy1HXzAwMmJfMDAyYi5odG1sI2luZGV4LWludm9raW5nLV8wMDQwY29tbWFuZF8wMDdiZ18wMDJiXzAwMmJfMDA3ZC05NiI+aW52b2tpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmcrKzwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNJbnZva2luZy1HXzAwMmJfMDAyYiI+SW52b2tpbmcgRysrPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc2FsbnVtLTMxNDYiPjxjb2RlPmlzYWxudW08L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzYWxwaGEtMzE0NyI+PGNvZGU+aXNhbHBoYTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaXNhc2NpaS0zMTQ4Ij48Y29kZT5pc2FzY2lpPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc2JsYW5rLTMxNDkiPjxjb2RlPmlzYmxhbms8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzY250cmwtMzE1MCI+PGNvZGU+aXNjbnRybDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaXNkaWdpdC0zMTUxIj48Y29kZT5pc2RpZ2l0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc2dyYXBoLTMxNTIiPjxjb2RlPmlzZ3JhcGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzbG93ZXItMzE1MyI+PGNvZGU+aXNsb3dlcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUlTTy05ODk5LTMzIj5JU08gOTg5OTwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtSVNPLUMtMzAiPklTTyBDPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1JU08tQy1zdGFuZGFyZC0yOSI+SVNPIEMgc3RhbmRhcmQ8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUlTTy1DMTEtNDMiPklTTyBDMTE8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUlTTy1DMVgtNDUiPklTTyBDMVg8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUlTTy1DOTAtMzEiPklTTyBDOTA8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUlTTy1DOTQtMzUiPklTTyBDOTQ8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUlTTy1DOTUtMzciPklTTyBDOTU8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUlTTy1DOTktMzkiPklTTyBDOTk8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LUlTTy1DOVgtNDEiPklTTyBDOVg8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtSVNPLXN1cHBvcnQtMTAxIj5JU08gc3VwcG9ydDwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtSVNPXzAwMmZJRUMtOTg5OS0zMiI+SVNPL0lFQyA5ODk5PC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzcHJpbnQtMzE1NCI+PGNvZGU+aXNwcmludDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaXNwdW5jdC0zMTU1Ij48Y29kZT5pc3B1bmN0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc3NwYWNlLTMxNTYiPjxjb2RlPmlzc3BhY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzdXBwZXItMzE1NyI+PGNvZGU+aXN1cHBlcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaXN3YWxudW0tMzE1OCI+PGNvZGU+aXN3YWxudW08L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzd2FscGhhLTMxNTkiPjxjb2RlPmlzd2FscGhhPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc3dibGFuay0zMTYwIj48Y29kZT5pc3dibGFuazwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaXN3Y250cmwtMzE2MSI+PGNvZGU+aXN3Y250cmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzd2RpZ2l0LTMxNjIiPjxjb2RlPmlzd2RpZ2l0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc3dncmFwaC0zMTYzIj48Y29kZT5pc3dncmFwaDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaXN3bG93ZXItMzE2NCI+PGNvZGU+aXN3bG93ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzd3ByaW50LTMxNjUiPjxjb2RlPmlzd3ByaW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc3dwdW5jdC0zMTY2Ij48Y29kZT5pc3dwdW5jdDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtaXN3c3BhY2UtMzE2NyI+PGNvZGU+aXN3c3BhY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWlzd3VwcGVyLTMxNjgiPjxjb2RlPmlzd3VwcGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc3d4ZGlnaXQtMzE2OSI+PGNvZGU+aXN3eGRpZ2l0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1pc3hkaWdpdC0zMTcwIj48Y29kZT5pc3hkaWdpdDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtajAtMzE3MSI+PGNvZGU+ajA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWowZi0zMTcyIj48Y29kZT5qMGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWowbC0zMTczIj48Y29kZT5qMGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWoxLTMxNzQiPjxjb2RlPmoxPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1qMWYtMzE3NSI+PGNvZGU+ajFmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1qMWwtMzE3NiI+PGNvZGU+ajFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI2luZGV4LUphdmEtOCI+SmF2YTwvYT46IDxhIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNHXzAwMmJfMDAyYi1hbmQtR0NDIj5HKysgYW5kIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmphdmFfMDA1ZmludGVyZmFjZV8wMDdkLWF0dHJpYnV0ZS0zNTI2Ij48Y29kZT5qYXZhX2ludGVyZmFjZTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItQXR0cmlidXRlcy5odG1sI0NfMDAyYl8wMDJiLUF0dHJpYnV0ZXMiPkMrKyBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1qbi0zMTc3Ij48Y29kZT5qbjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtam5mLTMxNzgiPjxjb2RlPmpuZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtam5sLTMxNzkiPjxjb2RlPmpubDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiS18wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ5OCI+PGNvZGU+SzwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdia18wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ4MiI+PGNvZGU+azwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmtlZXBfMDA1ZmludGVycnVwdHNfMDA1Zm1hc2tlZF8wMDdkLWF0dHJpYnV0ZS0yNjE5Ij48Y29kZT5rZWVwX2ludGVycnVwdHNfbWFza2VkPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFsdGVybmF0ZS1LZXl3b3Jkcy5odG1sI2luZGV4LWtleXdvcmRzXzAwMmMtYWx0ZXJuYXRlLTI4ODAiPmtleXdvcmRzLCBhbHRlcm5hdGU8L2E+OiA8YSBocmVmPSJBbHRlcm5hdGUtS2V5d29yZHMuaHRtbCNBbHRlcm5hdGUtS2V5d29yZHMiPkFsdGVybmF0ZSBLZXl3b3JkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRyb3VibGUuaHRtbCNpbmRleC1rbm93bi1jYXVzZXMtb2YtdHJvdWJsZS0zNTM1Ij5rbm93biBjYXVzZXMgb2YgdHJvdWJsZTwvYT46IDxhIGhyZWY9IlRyb3VibGUuaHRtbCNUcm91YmxlIj5Ucm91YmxlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibDFfMDA1ZmRhdGFfMDA3ZC12YXJpYWJsZS1hdHRyaWJ1dGUtMjc3MCI+PGNvZGU+bDFfZGF0YTwvY29kZT4gdmFyaWFibGUgYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsMV8wMDVmZGF0YV8wMDVmQV8wMDdkLXZhcmlhYmxlLWF0dHJpYnV0ZS0yNzcxIj48Y29kZT5sMV9kYXRhX0E8L2NvZGU+IHZhcmlhYmxlIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibDFfMDA1ZmRhdGFfMDA1ZkJfMDA3ZC12YXJpYWJsZS1hdHRyaWJ1dGUtMjc3MiI+PGNvZGU+bDFfZGF0YV9CPC9jb2RlPiB2YXJpYWJsZSBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmwxXzAwNWZ0ZXh0XzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2MjUiPjxjb2RlPmwxX3RleHQ8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibDJfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjYyNiI+PGNvZGU+bDI8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibDJfMDA3ZC12YXJpYWJsZS1hdHRyaWJ1dGUtMjc3MyI+PGNvZGU+bDI8L2NvZGU+IHZhcmlhYmxlIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI2luZGV4LWxhYmVsZWQtZWxlbWVudHMtaW4taW5pdGlhbGl6ZXJzLTI1NTIiPmxhYmVsZWQgZWxlbWVudHMgaW4gaW5pdGlhbGl6ZXJzPC9hPjogPGEgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI0Rlc2lnbmF0ZWQtSW5pdHMiPkRlc2lnbmF0ZWQgSW5pdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMYWJlbHMtYXMtVmFsdWVzLmh0bWwjaW5kZXgtbGFiZWxzLWFzLXZhbHVlcy0yNDA4Ij5sYWJlbHMgYXMgdmFsdWVzPC9hPjogPGEgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI0xhYmVscy1hcy1WYWx1ZXMiPkxhYmVscyBhcyBWYWx1ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxhYnMtMzE4MCI+PGNvZGU+bGFiczwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LUxBTkctMjM3MCI+PGNvZGU+TEFORzwvY29kZT48L2E+OiA8YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtbGFuZ3VhZ2UtZGlhbGVjdC1vcHRpb25zLTk4Ij5sYW5ndWFnZSBkaWFsZWN0IG9wdGlvbnM8L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LUxDXzAwNWZBTEwtMjM3MyI+PGNvZGU+TENfQUxMPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjaW5kZXgtTENfMDA1ZkNUWVBFLTIzNzEiPjxjb2RlPkxDX0NUWVBFPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjaW5kZXgtTENfMDA1Zk1FU1NBR0VTLTIzNzIiPjxjb2RlPkxDX01FU1NBR0VTPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sZGV4cC0zMTgxIj48Y29kZT5sZGV4cDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbGRleHBmLTMxODIiPjxjb2RlPmxkZXhwZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbGRleHBsLTMxODMiPjxjb2RlPmxkZXhwbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxlYWZfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjYyNyI+PGNvZGU+bGVhZjwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJaZXJvLUxlbmd0aC5odG1sI2luZGV4LWxlbmd0aF8wMDJkemVyby1hcnJheXMtMjUxOCI+bGVuZ3RoLXplcm8gYXJyYXlzPC9hPjogPGEgaHJlZj0iWmVyby1MZW5ndGguaHRtbCNaZXJvLUxlbmd0aCI+WmVybyBMZW5ndGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxnYW1tYS0zMTg0Ij48Y29kZT5sZ2FtbWE8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxnYW1tYV8wMDVmci0zMTg3Ij48Y29kZT5sZ2FtbWFfcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbGdhbW1hZi0zMTg1Ij48Y29kZT5sZ2FtbWFmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sZ2FtbWFmXzAwNWZyLTMxODgiPjxjb2RlPmxnYW1tYWZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbGdhbW1hbC0zMTg2Ij48Y29kZT5sZ2FtbWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sZ2FtbWFsXzAwNWZyLTMxODkiPjxjb2RlPmxnYW1tYWxfcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LUxpYnJhcmllcy0xMDI5Ij5MaWJyYXJpZXM8L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LUxJQlJBUllfMDA1ZlBBVEgtMjM3OSI+PGNvZGU+TElCUkFSWV9QQVRIPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtbGluay1vcHRpb25zLTEwMjMiPmxpbmsgb3B0aW9uczwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtbGlua2VyLXNjcmlwdC0xMDUwIj5saW5rZXIgc2NyaXB0PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkxLXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDk5Ij48Y29kZT5MSzwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibGtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0ODMiPjxjb2RlPmxrPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTG9uZy1Mb25nLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMTF8wMDdkLWludGVnZXItc3VmZml4LTI0NDEiPjxjb2RlPkxMPC9jb2RlPiBpbnRlZ2VyIHN1ZmZpeDwvYT46IDxhIGhyZWY9IkxvbmctTG9uZy5odG1sI0xvbmctTG9uZyI+TG9uZyBMb25nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sbGFicy0zMTkwIj48Y29kZT5sbGFiczwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiTExLXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNTAwIj48Y29kZT5MTEs8L2NvZGU+IGZpeGVkLXN1ZmZpeDwvYT46IDxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ymxsa18wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ4NCI+PGNvZGU+bGxrPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMTFJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0OTIiPjxjb2RlPkxMUjwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibGxyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDc2Ij48Y29kZT5sbHI8L2NvZGU+IGZpeGVkLXN1ZmZpeDwvYT46IDxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxscmludC0zMTkxIj48Y29kZT5sbHJpbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxscmludGYtMzE5MiI+PGNvZGU+bGxyaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbGxyaW50bC0zMTkzIj48Y29kZT5sbHJpbnRsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sbHJvdW5kLTMxOTQiPjxjb2RlPmxscm91bmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxscm91bmRmLTMxOTUiPjxjb2RlPmxscm91bmRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sbHJvdW5kbC0zMTk2Ij48Y29kZT5sbHJvdW5kbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LUxNMzItb3B0aW9ucy0xNTgzIj5MTTMyIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWxvYWQtYWRkcmVzcy1pbnN0cnVjdGlvbi0yODM4Ij5sb2FkIGFkZHJlc3MgaW5zdHJ1Y3Rpb248L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxvY2FsLUxhYmVscy5odG1sI2luZGV4LWxvY2FsLWxhYmVscy0yNDA2Ij5sb2NhbCBsYWJlbHM8L2E+OiA8YSBocmVmPSJMb2NhbC1MYWJlbHMuaHRtbCNMb2NhbC1MYWJlbHMiPkxvY2FsIExhYmVsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlR5cGVvZi5odG1sI2luZGV4LWxvY2FsLXZhcmlhYmxlcy1pbi1tYWNyb3MtMjQyNyI+bG9jYWwgdmFyaWFibGVzIGluIG1hY3JvczwvYT46IDxhIGhyZWY9IlR5cGVvZi5odG1sI1R5cGVvZiI+VHlwZW9mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTG9jYWwtUmVnLVZhcnMuaHRtbCNpbmRleC1sb2NhbC12YXJpYWJsZXNfMDAyYy1zcGVjaWZ5aW5nLXJlZ2lzdGVycy0yODc2Ij5sb2NhbCB2YXJpYWJsZXMsIHNwZWNpZnlpbmcgcmVnaXN0ZXJzPC9hPjogPGEgaHJlZj0iTG9jYWwtUmVnLVZhcnMuaHRtbCNMb2NhbC1SZWctVmFycyI+TG9jYWwgUmVnIFZhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1sb2NhbGUtMjM3NCI+bG9jYWxlPC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1sb2NhbGUtZGVmaW5pdGlvbi0yMzgxIj5sb2NhbGUgZGVmaW5pdGlvbjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sb2ctMzE5NyI+PGNvZGU+bG9nPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sb2cxMC0zMTk4Ij48Y29kZT5sb2cxMDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbG9nMTBmLTMxOTkiPjxjb2RlPmxvZzEwZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbG9nMTBsLTMyMDAiPjxjb2RlPmxvZzEwbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbG9nMXAtMzIwMSI+PGNvZGU+bG9nMXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxvZzFwZi0zMjAyIj48Y29kZT5sb2cxcGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxvZzFwbC0zMjAzIj48Y29kZT5sb2cxcGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxvZzItMzIwNCI+PGNvZGU+bG9nMjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbG9nMmYtMzIwNSI+PGNvZGU+bG9nMmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxvZzJsLTMyMDYiPjxjb2RlPmxvZzJsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sb2diLTMyMDciPjxjb2RlPmxvZ2I8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LWxvZ2JmLTMyMDgiPjxjb2RlPmxvZ2JmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sb2dibC0zMjA5Ij48Y29kZT5sb2dibDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbG9nZi0zMjEwIj48Y29kZT5sb2dmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1sb2dsLTMyMTEiPjxjb2RlPmxvZ2w8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb25nLUxvbmcuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmctbG9uZ18wMDdkLWRhdGEtdHlwZXMtMjQzOCI+PGNvZGU+bG9uZyBsb25nPC9jb2RlPiBkYXRhIHR5cGVzPC9hPjogPGEgaHJlZj0iTG9uZy1Mb25nLmh0bWwjTG9uZy1Mb25nIj5Mb25nIExvbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHbG9iYWwtUmVnLVZhcnMuaHRtbCNpbmRleC1sb25nam1wLTI4NzQiPjxjb2RlPmxvbmdqbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iR2xvYmFsLVJlZy1WYXJzLmh0bWwjR2xvYmFsLVJlZy1WYXJzIj5HbG9iYWwgUmVnIFZhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibG9uZ2ptcF8wMDdkLWluY29tcGF0aWJpbGl0aWVzLTM1NDciPjxjb2RlPmxvbmdqbXA8L2NvZGU+IGluY29tcGF0aWJpbGl0aWVzPC9hPjogPGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdqbXBfMDA3ZC13YXJuaW5ncy0zNDgiPjxjb2RlPmxvbmdqbXA8L2NvZGU+IHdhcm5pbmdzPC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkxSXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDkxIj48Y29kZT5MUjwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibHJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0NzUiPjxjb2RlPmxyPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1scmludC0zMjEyIj48Y29kZT5scmludDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbHJpbnRmLTMyMTMiPjxjb2RlPmxyaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbHJpbnRsLTMyMTQiPjxjb2RlPmxyaW50bDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbHJvdW5kLTMyMTUiPjxjb2RlPmxyb3VuZDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbHJvdW5kZi0zMjE2Ij48Y29kZT5scm91bmRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1scm91bmRsLTMyMTciPjxjb2RlPmxyb3VuZGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3Ym1fMDA3ZC1pbi1jb25zdHJhaW50LTI4MTMiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJDLU9wdGlvbnMuaHRtbCNpbmRleC1NMzJDLW9wdGlvbnMtMTU4OSI+TTMyQyBvcHRpb25zPC9hPjogPGEgaHJlZj0iTTMyQy1PcHRpb25zLmh0bWwjTTMyQy1PcHRpb25zIj5NMzJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNpbmRleC1NMzJSXzAwMmZELW9wdGlvbnMtMTU5MyI+TTMyUi9EIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1NNjgweDAtb3B0aW9ucy0xNjE0Ij5NNjgweDAgb3B0aW9uczwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI2luZGV4LW1hY2hpbmUtZGVwZW5kZW50LW9wdGlvbnMtMTA3OCI+bWFjaGluZSBkZXBlbmRlbnQgb3B0aW9uczwvYT46IDxhIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWFjaGluZS1Db25zdHJhaW50cy5odG1sI2luZGV4LW1hY2hpbmUtc3BlY2lmaWMtY29uc3RyYWludHMtMjg1OSI+bWFjaGluZSBzcGVjaWZpYyBjb25zdHJhaW50czwvYT46IDxhIGhyZWY9Ik1hY2hpbmUtQ29uc3RyYWludHMuaHRtbCNNYWNoaW5lLUNvbnN0cmFpbnRzIj5NYWNoaW5lIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjaW5kZXgtbWFjcm8td2l0aC12YXJpYWJsZS1hcmd1bWVudHMtMjUzMSI+bWFjcm8gd2l0aCB2YXJpYWJsZSBhcmd1bWVudHM8L2E+OiA8YSBocmVmPSJWYXJpYWRpYy1NYWNyb3MuaHRtbCNWYXJpYWRpYy1NYWNyb3MiPlZhcmlhZGljIE1hY3JvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI2luZGV4LW1hY3Jvcy1jb250YWluaW5nLV8wMDQwY29kZV8wMDdiYXNtXzAwN2QtMjgwOCI+bWFjcm9zIGNvbnRhaW5pbmcgPGNvZGU+YXNtPC9jb2RlPjwvYT46IDxhIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI0V4dGVuZGVkLUFzbSI+RXh0ZW5kZWQgQXNtPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5saW5lLmh0bWwjaW5kZXgtbWFjcm9zXzAwMmMtaW5saW5lLWFsdGVybmF0aXZlLTI3OTAiPm1hY3JvcywgaW5saW5lIGFsdGVybmF0aXZlPC9hPjogPGEgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIj5JbmxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2NhbC1MYWJlbHMuaHRtbCNpbmRleC1tYWNyb3NfMDAyYy1sb2NhbC1sYWJlbHMtMjQwNyI+bWFjcm9zLCBsb2NhbCBsYWJlbHM8L2E+OiA8YSBocmVmPSJMb2NhbC1MYWJlbHMuaHRtbCNMb2NhbC1MYWJlbHMiPkxvY2FsIExhYmVsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlR5cGVvZi5odG1sI2luZGV4LW1hY3Jvc18wMDJjLWxvY2FsLXZhcmlhYmxlcy1pbi0yNDI5Ij5tYWNyb3MsIGxvY2FsIHZhcmlhYmxlcyBpbjwvYT46IDxhIGhyZWY9IlR5cGVvZi5odG1sI1R5cGVvZiI+VHlwZW9mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhdGVtZW50LUV4cHJzLmh0bWwjaW5kZXgtbWFjcm9zXzAwMmMtc3RhdGVtZW50cy1pbi1leHByZXNzaW9ucy0yNDA0Ij5tYWNyb3MsIHN0YXRlbWVudHMgaW4gZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJTdGF0ZW1lbnQtRXhwcnMuaHRtbCNTdGF0ZW1lbnQtRXhwcnMiPlN0YXRlbWVudCBFeHByczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlR5cGVvZi5odG1sI2luZGV4LW1hY3Jvc18wMDJjLXR5cGVzLW9mLWFyZ3VtZW50cy0yNDI0Ij5tYWNyb3MsIHR5cGVzIG9mIGFyZ3VtZW50czwvYT46IDxhIGhyZWY9IlR5cGVvZi5odG1sI1R5cGVvZiI+VHlwZW9mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ym1ha2VfMDA3ZC05NjAiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5tYWtlPC9zcGFuPjwvc2FtcD48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbWFsbG9jLTMyMTgiPjxjb2RlPm1hbGxvYzwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym1hbGxvY18wMDdkLWF0dHJpYnV0ZS0yNjMxIj48Y29kZT5tYWxsb2M8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtbWF0Y2hpbmctY29uc3RyYWludC0yODM2Ij5tYXRjaGluZyBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjaW5kZXgtTUNvcmUtb3B0aW9ucy0xNjU1Ij5NQ29yZSBvcHRpb25zPC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmxpbmUuaHRtbCNpbmRleC1tZW1iZXItZm5zXzAwMmMtYXV0b21hdGljYWxseS1fMDA0MGNvZGVfMDA3YmlubGluZV8wMDdkLTI3OTYiPm1lbWJlciBmbnMsIGF1dG9tYXRpY2FsbHkgPGNvZGU+aW5saW5lPC9jb2RlPjwvYT46IDxhIGhyZWY9IklubGluZS5odG1sI0lubGluZSI+SW5saW5lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1tZW1jaHItMzIxOSI+PGNvZGU+bWVtY2hyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1tZW1jbXAtMzIyMCI+PGNvZGU+bWVtY21wPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1tZW1jcHktMzIyMSI+PGNvZGU+bWVtY3B5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtbWVtb3J5LXJlZmVyZW5jZXMtaW4tY29uc3RyYWludHMtMjgxNCI+bWVtb3J5IHJlZmVyZW5jZXMgaW4gY29uc3RyYWludHM8L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbWVtcGNweS0zMjIyIj48Y29kZT5tZW1wY3B5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1tZW1zZXQtMzIyMyI+PGNvZGU+bWVtc2V0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1NZVAtb3B0aW9ucy0xNjc2Ij5NZVAgb3B0aW9uczwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI2luZGV4LU1lcmN1cnktMTIiPk1lcmN1cnk8L2E+OiA8YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+RysrIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zLmh0bWwjaW5kZXgtbWVzc2FnZS1mb3JtYXR0aW5nLTIzNiI+bWVzc2FnZSBmb3JtYXR0aW5nPC9hPjogPGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1tZXNzYWdlc18wMDJjLXdhcm5pbmctMjQ1Ij5tZXNzYWdlcywgd2FybmluZzwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZ3MtYW5kLUVycm9ycy5odG1sI2luZGV4LW1lc3NhZ2VzXzAwMmMtd2FybmluZy1hbmQtZXJyb3ItMzU4OSI+bWVzc2FnZXMsIHdhcm5pbmcgYW5kIGVycm9yPC9hPjogPGEgaHJlZj0iV2FybmluZ3MtYW5kLUVycm9ycy5odG1sI1dhcm5pbmdzLWFuZC1FcnJvcnMiPldhcm5pbmdzIGFuZCBFcnJvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNpbmRleC1NaWNyb0JsYXplLU9wdGlvbnMtMTcwOCI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjogPGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjTWljcm9CbGF6ZS1PcHRpb25zIj5NaWNyb0JsYXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNpbmRleC1taWRkbGVfMDAyZG9wZXJhbmRzXzAwMmMtb21pdHRlZC0yNDMyIj5taWRkbGUtb3BlcmFuZHMsIG9taXR0ZWQ8L2E+OiA8YSBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiPkNvbmRpdGlvbmFsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LU1JUFMtb3B0aW9ucy0xNzI3Ij5NSVBTIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym1pcHMxNl8wMDdkLWF0dHJpYnV0ZS0yNjMyIj48Y29kZT5taXBzMTY8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MuaHRtbCNpbmRleC1taXN1bmRlcnN0YW5kaW5ncy1pbi1DXzAwMmJfMDAyYi0zNTY3Ij5taXN1bmRlcnN0YW5kaW5ncyBpbiBDKys8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzIj5DKysgTWlzdW5kZXJzdGFuZGluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaXhlZC1EZWNsYXJhdGlvbnMuaHRtbCNpbmRleC1taXhlZC1kZWNsYXJhdGlvbnMtYW5kLWNvZGUtMjU2MSI+bWl4ZWQgZGVjbGFyYXRpb25zIGFuZCBjb2RlPC9hPjogPGEgaHJlZj0iTWl4ZWQtRGVjbGFyYXRpb25zLmh0bWwjTWl4ZWQtRGVjbGFyYXRpb25zIj5NaXhlZCBEZWNsYXJhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibWt0ZW1wXzAwN2RfMDAyYy1hbmQtY29uc3RhbnQtc3RyaW5ncy0zNTQyIj48Y29kZT5ta3RlbXA8L2NvZGU+LCBhbmQgY29uc3RhbnQgc3RyaW5nczwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtTU1JWC1PcHRpb25zLTE4MzkiPk1NSVggT3B0aW9uczwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtTU4xMDMwMC1vcHRpb25zLTE4NTkiPk1OMTAzMDAgb3B0aW9uczwvYT46IDxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibW9kZV8wMDdkLWF0dHJpYnV0ZS0yNzY0Ij48Y29kZT5tb2RlPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbW9kZi0zMjI0Ij48Y29kZT5tb2RmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1tb2RmZi0zMjI1Ij48Y29kZT5tb2RmZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbW9kZmwtMzIyNiI+PGNvZGU+bW9kZmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNb2RpZmllcnMuaHRtbCNpbmRleC1tb2RpZmllcnMtaW4tY29uc3RyYWludHMtMjg1MCI+bW9kaWZpZXJzIGluIGNvbnN0cmFpbnRzPC9hPjogPGEgaHJlZj0iTW9kaWZpZXJzLmh0bWwjTW9kaWZpZXJzIj5Nb2RpZmllcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNb3hpZS1PcHRpb25zLmh0bWwjaW5kZXgtTW94aWUtT3B0aW9ucy0xODc0Ij5Nb3hpZSBPcHRpb25zPC9hPjogPGEgaHJlZj0iTW94aWUtT3B0aW9ucy5odG1sI01veGllLU9wdGlvbnMiPk1veGllIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jtc18wMDVmYWJpXzAwN2QtYXR0cmlidXRlLTI2MzYiPjxjb2RlPm1zX2FiaTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jtc18wMDVmaG9va18wMDVmcHJvbG9ndWVfMDA3ZC1hdHRyaWJ1dGUtMjYzOSI+PGNvZGU+bXNfaG9va19wcm9sb2d1ZTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym1zXzAwNWZzdHJ1Y3RfMDA3ZC0yNzgyIj48Y29kZT5tc19zdHJ1Y3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIj5UeXBlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jtc18wMDVmc3RydWN0XzAwN2QtYXR0cmlidXRlLTI3NzUiPjxjb2RlPm1zX3N0cnVjdDwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbXVkZmxhcC03NjYiPm11ZGZsYXA8L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik11bHRpXzAwMmRBbHRlcm5hdGl2ZS5odG1sI2luZGV4LW11bHRpcGxlLWFsdGVybmF0aXZlLWNvbnN0cmFpbnRzLTI4NDUiPm11bHRpcGxlIGFsdGVybmF0aXZlIGNvbnN0cmFpbnRzPC9hPjogPGEgaHJlZj0iTXVsdGlfMDAyZEFsdGVybmF0aXZlLmh0bWwjTXVsdGlfMDAyZEFsdGVybmF0aXZlIj5NdWx0aS1BbHRlcm5hdGl2ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxvbmctTG9uZy5odG1sI2luZGV4LW11bHRpcHJlY2lzaW9uLWFyaXRobWV0aWMtMjQ0MCI+bXVsdGlwcmVjaXNpb24gYXJpdGhtZXRpYzwvYT46IDxhIGhyZWY9IkxvbmctTG9uZy5odG1sI0xvbmctTG9uZyI+TG9uZyBMb25nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JuXzAwN2QtaW4tY29uc3RyYWludC0yODI1Ij4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm48L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gY29uc3RyYWludDwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNpbmRleC1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTA1Ij5OYW1lZCBBZGRyZXNzIFNwYWNlczwvYT46IDxhIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjTmFtZWQtQWRkcmVzcy1TcGFjZXMiPk5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXNtLUxhYmVscy5odG1sI2luZGV4LW5hbWVzLXVzZWQtaW4tYXNzZW1ibGVyLWNvZGUtMjg2MiI+bmFtZXMgdXNlZCBpbiBhc3NlbWJsZXIgY29kZTwvYT46IDxhIGhyZWY9IkFzbS1MYWJlbHMuaHRtbCNBc20tTGFiZWxzIj5Bc20gTGFiZWxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjaW5kZXgtbmFtaW5nLWNvbnZlbnRpb25fMDAyYy1pbXBsZW1lbnRhdGlvbi1oZWFkZXJzLTM1MTIiPm5hbWluZyBjb252ZW50aW9uLCBpbXBsZW1lbnRhdGlvbiBoZWFkZXJzPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1uZWFyYnlpbnQtMzIyNyI+PGNvZGU+bmVhcmJ5aW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1uZWFyYnlpbnRmLTMyMjgiPjxjb2RlPm5lYXJieWludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LW5lYXJieWludGwtMzIyOSI+PGNvZGU+bmVhcmJ5aW50bDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5lc3RlZC1GdW5jdGlvbnMuaHRtbCNpbmRleC1uZXN0ZWQtZnVuY3Rpb25zLTI0MTIiPm5lc3RlZCBmdW5jdGlvbnM8L2E+OiA8YSBocmVmPSJOZXN0ZWQtRnVuY3Rpb25zLmh0bWwjTmVzdGVkLUZ1bmN0aW9ucyI+TmVzdGVkIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVzY2FwZWQtTmV3bGluZXMuaHRtbCNpbmRleC1uZXdsaW5lcy1fMDAyOGVzY2FwZWRfMDAyOS0yNTM1Ij5uZXdsaW5lcyAoZXNjYXBlZCk8L2E+OiA8YSBocmVmPSJFc2NhcGVkLU5ld2xpbmVzLmh0bWwjRXNjYXBlZC1OZXdsaW5lcyI+RXNjYXBlZCBOZXdsaW5lczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbmV4dGFmdGVyLTMyMzAiPjxjb2RlPm5leHRhZnRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbmV4dGFmdGVyZi0zMjMxIj48Y29kZT5uZXh0YWZ0ZXJmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1uZXh0YWZ0ZXJsLTMyMzIiPjxjb2RlPm5leHRhZnRlcmw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LW5leHR0b3dhcmQtMzIzMyI+PGNvZGU+bmV4dHRvd2FyZDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtbmV4dHRvd2FyZGYtMzIzNCI+PGNvZGU+bmV4dHRvd2FyZGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LW5leHR0b3dhcmRsLTMyMzUiPjxjb2RlPm5leHR0b3dhcmRsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtTkZDLTQ3OCI+TkZDPC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1ORktDLTQ3OSI+TkZLQzwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LU5NSS1oYW5kbGVyLWZ1bmN0aW9ucy1vbi10aGUtQmxhY2tmaW4tcHJvY2Vzc29yLTI2NDMiPk5NSSBoYW5kbGVyIGZ1bmN0aW9ucyBvbiB0aGUgQmxhY2tmaW4gcHJvY2Vzc29yPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub18wMDVmaW5zdHJ1bWVudF8wMDVmZnVuY3Rpb25fMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY0NCI+PGNvZGU+bm9faW5zdHJ1bWVudF9mdW5jdGlvbjwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub18wMDVmc2FuaXRpemVfMDA1ZmFkZHJlc3NfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY2MyI+PGNvZGU+bm9fc2FuaXRpemVfYWRkcmVzczwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub18wMDVmc3BsaXRfMDA1ZnN0YWNrXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NDYiPjxjb2RlPm5vX3NwbGl0X3N0YWNrPC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vY2xvbmVfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY0OSI+PGNvZGU+bm9jbG9uZTwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub2NvbW1vbl8wMDdkLWF0dHJpYnV0ZS0yNzYwIj48Y29kZT5ub2NvbW1vbjwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub2lubGluZV8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjQ4Ij48Y29kZT5ub2lubGluZTwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub21pcHMxNl8wMDdkLWF0dHJpYnV0ZS0yNjMzIj48Y29kZT5ub21pcHMxNjwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbml0aWFsaXplcnMuaHRtbCNpbmRleC1ub25fMDAyZGNvbnN0YW50LWluaXRpYWxpemVycy0yNTQ1Ij5ub24tY29uc3RhbnQgaW5pdGlhbGl6ZXJzPC9hPjogPGEgaHJlZj0iSW5pdGlhbGl6ZXJzLmh0bWwjSW5pdGlhbGl6ZXJzIj5Jbml0aWFsaXplcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmxpbmUuaHRtbCNpbmRleC1ub25fMDAyZHN0YXRpYy1pbmxpbmUtZnVuY3Rpb24tMjc5OSI+bm9uLXN0YXRpYyBpbmxpbmUgZnVuY3Rpb248L2E+OiA8YSBocmVmPSJJbmxpbmUuaHRtbCNJbmxpbmUiPklubGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vbm51bGxfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY1MCI+PGNvZGU+bm9ubnVsbDwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub3JldHVybl8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjUxIj48Y29kZT5ub3JldHVybjwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jub3NhdmVfMDA1Zmxvd18wMDVmcmVnc18wMDdkLWF0dHJpYnV0ZS0yNjUzIj48Y29kZT5ub3NhdmVfbG93X3JlZ3M8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibm90aHJvd18wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjUyIj48Y29kZT5ub3Rocm93PC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdib18wMDdkLWluLWNvbnN0cmFpbnQtMjgxNiI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQ8L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LU9CSkNfMDA1ZklOQ0xVREVfMDA1ZlBBVEgtMjM4NSI+PGNvZGU+T0JKQ19JTkNMVURFX1BBVEg8L2NvZGU+PC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1PYmplY3RpdmVfMDAyZEMtNjUiPk9iamVjdGl2ZS1DPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtT2JqZWN0aXZlXzAwMmRDLTkiPk9iamVjdGl2ZS1DPC9hPjogPGEgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI0dfMDAyYl8wMDJiLWFuZC1HQ0MiPkcrKyBhbmQgR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LU9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1vcHRpb25zXzAwMmMtY29tbWFuZF8wMDJkbGluZS0yMDciPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIG9wdGlvbnMsIGNvbW1hbmQtbGluZTwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLTY2Ij5PYmplY3RpdmUtQysrPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi0xMCI+T2JqZWN0aXZlLUMrKzwvYT46IDxhIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNHXzAwMmJfMDAyYi1hbmQtR0NDIj5HKysgYW5kIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LW9mZnNldHRhYmxlLWFkZHJlc3MtMjgxNSI+b2Zmc2V0dGFibGUgYWRkcmVzczwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tUHJvdG90eXBlcy5odG1sI2luZGV4LW9sZF8wMDJkc3R5bGUtZnVuY3Rpb24tZGVmaW5pdGlvbnMtMjc0NyI+b2xkLXN0eWxlIGZ1bmN0aW9uIGRlZmluaXRpb25zPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tUHJvdG90eXBlcy5odG1sI0Z1bmN0aW9uLVByb3RvdHlwZXMiPkZ1bmN0aW9uIFByb3RvdHlwZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNpbmRleC1vbWl0dGVkLW1pZGRsZV8wMDJkb3BlcmFuZHMtMjQzMSI+b21pdHRlZCBtaWRkbGUtb3BlcmFuZHM8L2E+OiA8YSBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiPkNvbmRpdGlvbmFsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklubGluZS5odG1sI2luZGV4LW9wZW4tY29kaW5nLTI3ODkiPm9wZW4gY29kaW5nPC9hPjogPGEgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIj5JbmxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LU9wZW5NUC1wYXJhbGxlbC0xMTQiPk9wZW5NUCBwYXJhbGxlbDwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNpbmRleC1vcGVyYW5kLWNvbnN0cmFpbnRzXzAwMmMtXzAwNDBjb2RlXzAwN2Jhc21fMDA3ZC0yODA5Ij5vcGVyYW5kIGNvbnN0cmFpbnRzLCA8Y29kZT5hc208L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyI+Q29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JvcHRpbWl6ZV8wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjU0Ij48Y29kZT5vcHRpbWl6ZTwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW1pemUtb3B0aW9ucy03MjgiPm9wdGltaXplIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikxhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zLXRvLWNvbnRyb2wtZGlhZ25vc3RpY3MtZm9ybWF0dGluZy0yMzQiPm9wdGlvbnMgdG8gY29udHJvbCBkaWFnbm9zdGljcyBmb3JtYXR0aW5nPC9hPjogPGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zLXRvLWNvbnRyb2wtd2FybmluZ3MtMjQzIj5vcHRpb25zIHRvIGNvbnRyb2wgd2FybmluZ3M8L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1DXzAwMmJfMDAyYi0xMzIiPm9wdGlvbnMsIEMrKzwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtY29kZS1nZW5lcmF0aW9uLTIzMjQiPm9wdGlvbnMsIGNvZGUgZ2VuZXJhdGlvbjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtZGVidWdnaW5nLTUzOCI+b3B0aW9ucywgZGVidWdnaW5nPC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1kaWFsZWN0LTk5Ij5vcHRpb25zLCBkaWFsZWN0PC9hPjogPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1kaXJlY3Rvcnktc2VhcmNoLTEwNTUiPm9wdGlvbnMsIGRpcmVjdG9yeSBzZWFyY2g8L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1HQ0MtY29tbWFuZC02OSI+b3B0aW9ucywgR0NDIGNvbW1hbmQ8L2E+OiA8YSBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1ncm91cGluZy03MyI+b3B0aW9ucywgZ3JvdXBpbmc8L2E+OiA8YSBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1saW5raW5nLTEwMjQiPm9wdGlvbnMsIGxpbmtpbmc8L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLTIwOCI+b3B0aW9ucywgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKys8L2E+OiA8YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1vcHRpbWl6YXRpb24tNzI5Ij5vcHRpb25zLCBvcHRpbWl6YXRpb248L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1vcmRlci03NSI+b3B0aW9ucywgb3JkZXI8L2E+OiA8YSBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLXByZXByb2Nlc3Nvci05MzciPm9wdGlvbnMsIHByZXByb2Nlc3NvcjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTm9uXzAwMmRidWdzLmh0bWwjaW5kZXgtb3JkZXItb2YtZXZhbHVhdGlvbl8wMDJjLXNpZGUtZWZmZWN0cy0zNTg1Ij5vcmRlciBvZiBldmFsdWF0aW9uLCBzaWRlIGVmZmVjdHM8L2E+OiA8YSBocmVmPSJOb25fMDAyZGJ1Z3MuaHRtbCNOb25fMDAyZGJ1Z3MiPk5vbi1idWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjaW5kZXgtb3JkZXItb2Ytb3B0aW9ucy03NCI+b3JkZXIgb2Ygb3B0aW9uczwvYT46IDxhIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyI+SW52b2tpbmcgR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiT1NfMDA1Zm1haW5fMDA3ZC1BVlItZnVuY3Rpb24tYXR0cmlidXRlLTI2NTUiPjxjb2RlPk9TX21haW48L2NvZGU+IEFWUiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yk9TXzAwNWZ0YXNrXzAwN2QtQVZSLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNjU2Ij48Y29kZT5PU190YXNrPC9jb2RlPiBBVlIgZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1vdGhlci1yZWdpc3Rlci1jb25zdHJhaW50cy0yODQzIj5vdGhlciByZWdpc3RlciBjb25zdHJhaW50czwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjaW5kZXgtb3V0cHV0LWZpbGUtb3B0aW9uLTgyIj5vdXRwdXQgZmlsZSBvcHRpb248L2E+OiA8YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk92ZXJhbGwgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LW92ZXJsb2FkZWQtdmlydHVhbC1mdW5jdGlvbl8wMDJjLXdhcm5pbmctMjAwIj5vdmVybG9hZGVkIHZpcnR1YWwgZnVuY3Rpb24sIHdhcm5pbmc8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3YnBfMDA3ZC1pbi1jb25zdHJhaW50LTI4NDEiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwYWNrZWRfMDA3ZC1hdHRyaWJ1dGUtMjc2NSI+PGNvZGU+cGFja2VkPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUxlbmd0aC5odG1sI2luZGV4LXBhcmFtZXRlci1mb3J3YXJkLWRlY2xhcmF0aW9uLTI1MjkiPnBhcmFtZXRlciBmb3J3YXJkIGRlY2xhcmF0aW9uPC9hPjogPGEgaHJlZj0iVmFyaWFibGUtTGVuZ3RoLmh0bWwjVmFyaWFibGUtTGVuZ3RoIj5WYXJpYWJsZSBMZW5ndGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjaW5kZXgtUGFzY2FsLTEzIj5QYXNjYWw8L2E+OiA8YSBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+RysrIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwY3NfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY1NyI+PGNvZGU+cGNzPC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LVBEUF8wMDJkMTEtT3B0aW9ucy0xODc4Ij5QRFAtMTEgT3B0aW9uczwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtUElDLTIzNDciPlBJQzwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icGljb0NoaXAtT3B0aW9ucy5odG1sI2luZGV4LXBpY29DaGlwLW9wdGlvbnMtMTkwMiI+cGljb0NoaXAgb3B0aW9uczwvYT46IDxhIGhyZWY9InBpY29DaGlwLU9wdGlvbnMuaHRtbCNwaWNvQ2hpcC1PcHRpb25zIj5waWNvQ2hpcCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sI2luZGV4LXBtZi0zNTIwIj5wbWY8L2E+OiA8YSBocmVmPSJCb3VuZC1tZW1iZXItZnVuY3Rpb25zLmh0bWwjQm91bmQtbWVtYmVyLWZ1bmN0aW9ucyI+Qm91bmQgbWVtYmVyIGZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1wb2ludGVyLWFyZ3VtZW50cy0yNTk0Ij5wb2ludGVyIGFyZ3VtZW50czwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sI2luZGV4LXBvaW50ZXItdG8tbWVtYmVyLWZ1bmN0aW9uLTM1MjEiPnBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uPC9hPjogPGEgaHJlZj0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sI0JvdW5kLW1lbWJlci1mdW5jdGlvbnMiPkJvdW5kIG1lbWJlciBmdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUZW1wb3Jhcmllcy5odG1sI2luZGV4LXBvcnRpb25zLW9mLXRlbXBvcmFyeS1vYmplY3RzXzAwMmMtcG9pbnRlcnMtdG8tMzU3OCI+cG9ydGlvbnMgb2YgdGVtcG9yYXJ5IG9iamVjdHMsIHBvaW50ZXJzIHRvPC9hPjogPGEgaHJlZj0iVGVtcG9yYXJpZXMuaHRtbCNUZW1wb3JhcmllcyI+VGVtcG9yYXJpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXBvdy0zMjM2Ij48Y29kZT5wb3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXBvdzEwLTMyMzciPjxjb2RlPnBvdzEwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1wb3cxMGYtMzIzOCI+PGNvZGU+cG93MTBmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1wb3cxMGwtMzIzOSI+PGNvZGU+cG93MTBsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtUG93ZXJQQy1vcHRpb25zLTE5MDQiPlBvd2VyUEMgb3B0aW9uczwvYT46IDxhIGhyZWY9IlBvd2VyUEMtT3B0aW9ucy5odG1sI1Bvd2VyUEMtT3B0aW9ucyI+UG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1wb3dmLTMyNDAiPjxjb2RlPnBvd2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXBvd2wtMzI0MSI+PGNvZGU+cG93bDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLVNwZWNpZmljLU9wdGlvbi1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hLUdDQy1vcHRpbWl6ZS0zNDgwIj5wcmFnbWEgR0NDIG9wdGltaXplPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tU3BlY2lmaWMtT3B0aW9uLVByYWdtYXMuaHRtbCNGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcyI+RnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcy5odG1sI2luZGV4LXByYWdtYS1HQ0MtcG9wXzAwNWZvcHRpb25zLTM0ODIiPnByYWdtYSBHQ0MgcG9wX29wdGlvbnM8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcy5odG1sI0Z1bmN0aW9uLVNwZWNpZmljLU9wdGlvbi1QcmFnbWFzIj5GdW5jdGlvbiBTcGVjaWZpYyBPcHRpb24gUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLVNwZWNpZmljLU9wdGlvbi1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hLUdDQy1wdXNoXzAwNWZvcHRpb25zLTM0ODEiPnByYWdtYSBHQ0MgcHVzaF9vcHRpb25zPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tU3BlY2lmaWMtT3B0aW9uLVByYWdtYXMuaHRtbCNGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcyI+RnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcy5odG1sI2luZGV4LXByYWdtYS1HQ0MtcmVzZXRfMDA1Zm9wdGlvbnMtMzQ4MyI+cHJhZ21hIEdDQyByZXNldF9vcHRpb25zPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tU3BlY2lmaWMtT3B0aW9uLVByYWdtYXMuaHRtbCNGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcyI+RnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcy5odG1sI2luZGV4LXByYWdtYS1HQ0MtdGFyZ2V0LTM0NzkiPnByYWdtYSBHQ0MgdGFyZ2V0PC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tU3BlY2lmaWMtT3B0aW9uLVByYWdtYXMuaHRtbCNGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcyI+RnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJDLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1hZGRyZXNzLTM0NTciPnByYWdtYSwgYWRkcmVzczwvYT46IDxhIGhyZWY9Ik0zMkMtUHJhZ21hcy5odG1sI00zMkMtUHJhZ21hcyI+TTMyQyBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU29sYXJpcy1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtYWxpZ24tMzQ2OSI+cHJhZ21hLCBhbGlnbjwvYT46IDxhIGhyZWY9IlNvbGFyaXMtUHJhZ21hcy5odG1sI1NvbGFyaXMtUHJhZ21hcyI+U29sYXJpcyBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1jYWxsLTM0NjMiPnByYWdtYSwgY2FsbDwvYT46IDxhIGhyZWY9Ik1lUC1QcmFnbWFzLmh0bWwjTWVQLVByYWdtYXMiPk1lUCBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1jb3Byb2Nlc3Nvci1hdmFpbGFibGUtMzQ1OSI+cHJhZ21hLCBjb3Byb2Nlc3NvciBhdmFpbGFibGU8L2E+OiA8YSBocmVmPSJNZVAtUHJhZ21hcy5odG1sI01lUC1QcmFnbWFzIj5NZVAgUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtY29wcm9jZXNzb3ItY2FsbF8wMDVmc2F2ZWQtMzQ2MCI+cHJhZ21hLCBjb3Byb2Nlc3NvciBjYWxsX3NhdmVkPC9hPjogPGEgaHJlZj0iTWVQLVByYWdtYXMuaHRtbCNNZVAtUHJhZ21hcyI+TWVQIFByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtUHJhZ21hcy5odG1sI2luZGV4LXByYWdtYV8wMDJjLWNvcHJvY2Vzc29yLXN1YmNsYXNzLTM0NjEiPnByYWdtYSwgY29wcm9jZXNzb3Igc3ViY2xhc3M8L2E+OiA8YSBocmVmPSJNZVAtUHJhZ21hcy5odG1sI01lUC1QcmFnbWFzIj5NZVAgUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtY3VzdG9tLWlvXzAwNWZ2b2xhdGlsZS0zNDU4Ij5wcmFnbWEsIGN1c3RvbSBpb192b2xhdGlsZTwvYT46IDxhIGhyZWY9Ik1lUC1QcmFnbWFzLmh0bWwjTWVQLVByYWdtYXMiPk1lUCBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlhZ25vc3RpYy1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtZGlhZ25vc3RpYy0zNDc0Ij5wcmFnbWEsIGRpYWdub3N0aWM8L2E+OiA8YSBocmVmPSJEaWFnbm9zdGljLVByYWdtYXMuaHRtbCNEaWFnbm9zdGljLVByYWdtYXMiPkRpYWdub3N0aWMgUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtZGlzaW50ZXJydXB0LTM0NjIiPnByYWdtYSwgZGlzaW50ZXJydXB0PC9hPjogPGEgaHJlZj0iTWVQLVByYWdtYXMuaHRtbCNNZVAtUHJhZ21hcyI+TWVQIFByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTb2xhcmlzLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1maW5pLTM0NzAiPnByYWdtYSwgZmluaTwvYT46IDxhIGhyZWY9IlNvbGFyaXMtUHJhZ21hcy5odG1sI1NvbGFyaXMtUHJhZ21hcyI+U29sYXJpcyBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU29sYXJpcy1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtaW5pdC0zNDcxIj5wcmFnbWEsIGluaXQ8L2E+OiA8YSBocmVmPSJTb2xhcmlzLVByYWdtYXMuaHRtbCNTb2xhcmlzLVByYWdtYXMiPlNvbGFyaXMgUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtbG9uZ18wMDVmY2FsbHMtMzQ1MyI+cHJhZ21hLCBsb25nX2NhbGxzPC9hPjogPGEgaHJlZj0iQVJNLVByYWdtYXMuaHRtbCNBUk0tUHJhZ21hcyI+QVJNIFByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tUHJhZ21hcy5odG1sI2luZGV4LXByYWdtYV8wMDJjLWxvbmdfMDA1ZmNhbGxzXzAwNWZvZmYtMzQ1NSI+cHJhZ21hLCBsb25nX2NhbGxzX29mZjwvYT46IDxhIGhyZWY9IkFSTS1QcmFnbWFzLmh0bWwjQVJNLVByYWdtYXMiPkFSTSBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtUHJhZ21hcy5odG1sI2luZGV4LXByYWdtYV8wMDJjLWxvbmdjYWxsLTM0NjQiPnByYWdtYSwgbG9uZ2NhbGw8L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1QcmFnbWFzLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtUHJhZ21hcyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1tYXJrLTM0NjUiPnByYWdtYSwgbWFyazwvYT46IDxhIGhyZWY9IkRhcndpbi1QcmFnbWFzLmh0bWwjRGFyd2luLVByYWdtYXMiPkRhcndpbiBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQy1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtbWVtcmVncy0zNDU2Ij5wcmFnbWEsIG1lbXJlZ3M8L2E+OiA8YSBocmVmPSJNMzJDLVByYWdtYXMuaHRtbCNNMzJDLVByYWdtYXMiPk0zMkMgUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtbm9fMDA1ZmxvbmdfMDA1ZmNhbGxzLTM0NTQiPnByYWdtYSwgbm9fbG9uZ19jYWxsczwvYT46IDxhIGhyZWY9IkFSTS1QcmFnbWFzLmh0bWwjQVJNLVByYWdtYXMiPkFSTSBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1vcHRpb25zLWFsaWduLTM0NjYiPnByYWdtYSwgb3B0aW9ucyBhbGlnbjwvYT46IDxhIGhyZWY9IkRhcndpbi1QcmFnbWFzLmh0bWwjRGFyd2luLVByYWdtYXMiPkRhcndpbiBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1wb3BfMDA1Zm1hY3JvLTM0NzgiPnByYWdtYSwgcG9wX21hY3JvPC9hPjogPGEgaHJlZj0iUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMuaHRtbCNQdXNoXzAwMmZQb3AtTWFjcm8tUHJhZ21hcyI+UHVzaC9Qb3AgTWFjcm8gUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlB1c2hfMDAyZlBvcC1NYWNyby1QcmFnbWFzLmh0bWwjaW5kZXgtcHJhZ21hXzAwMmMtcHVzaF8wMDVmbWFjcm8tMzQ3NyI+cHJhZ21hLCBwdXNoX21hY3JvPC9hPjogPGEgaHJlZj0iUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMuaHRtbCNQdXNoXzAwMmZQb3AtTWFjcm8tUHJhZ21hcyI+UHVzaC9Qb3AgTWFjcm8gUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1yZWFzb24tZm9yLW5vdC11c2luZy0yNzQ0Ij5wcmFnbWEsIHJlYXNvbiBmb3Igbm90IHVzaW5nPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1yZWRlZmluZV8wMDVmZXh0bmFtZS0zNDcyIj5wcmFnbWEsIHJlZGVmaW5lX2V4dG5hbWU8L2E+OiA8YSBocmVmPSJTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMuaHRtbCNTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMiPlN5bWJvbC1SZW5hbWluZyBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy1zZWdtZW50LTM0NjciPnByYWdtYSwgc2VnbWVudDwvYT46IDxhIGhyZWY9IkRhcndpbi1QcmFnbWFzLmh0bWwjRGFyd2luLVByYWdtYXMiPkRhcndpbiBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy11bnVzZWQtMzQ2OCI+cHJhZ21hLCB1bnVzZWQ8L2E+OiA8YSBocmVmPSJEYXJ3aW4tUHJhZ21hcy5odG1sI0Rhcndpbi1QcmFnbWFzIj5EYXJ3aW4gUHJhZ21hczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZpc2liaWxpdHktUHJhZ21hcy5odG1sI2luZGV4LXByYWdtYV8wMDJjLXZpc2liaWxpdHktMzQ3NiI+cHJhZ21hLCB2aXNpYmlsaXR5PC9hPjogPGEgaHJlZj0iVmlzaWJpbGl0eS1QcmFnbWFzLmh0bWwjVmlzaWJpbGl0eS1QcmFnbWFzIj5WaXNpYmlsaXR5IFByYWdtYXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXZWFrLVByYWdtYXMuaHRtbCNpbmRleC1wcmFnbWFfMDAyYy13ZWFrLTM0NzMiPnByYWdtYSwgd2VhazwvYT46IDxhIGhyZWY9IldlYWstUHJhZ21hcy5odG1sI1dlYWstUHJhZ21hcyI+V2VhayBQcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJhZ21hcy5odG1sI2luZGV4LXByYWdtYXMtMzQ1MSI+cHJhZ21hczwvYT46IDxhIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjaW5kZXgtcHJhZ21hcy1pbi1DXzAwMmJfMDAyYl8wMDJjLWVmZmVjdC1vbi1pbmxpbmluZy0zNTE1Ij5wcmFnbWFzIGluIEMrKywgZWZmZWN0IG9uIGlubGluaW5nPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjaW5kZXgtcHJhZ21hc18wMDJjLWludGVyZmFjZS1hbmQtaW1wbGVtZW50YXRpb24tMzUwNyI+cHJhZ21hcywgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sI0NfMDAyYl8wMDJiLUludGVyZmFjZSI+QysrIEludGVyZmFjZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXByYWdtYXNfMDAyYy13YXJuaW5nLW9mLXVua25vd24tMzUzIj5wcmFnbWFzLCB3YXJuaW5nIG9mIHVua25vd248L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZWNvbXBpbGVkLUhlYWRlcnMuaHRtbCNpbmRleC1wcmVjb21waWxlZC1oZWFkZXJzLTIzOTAiPnByZWNvbXBpbGVkIGhlYWRlcnM8L2E+OiA8YSBocmVmPSJQcmVjb21waWxlZC1IZWFkZXJzLmh0bWwjUHJlY29tcGlsZWQtSGVhZGVycyI+UHJlY29tcGlsZWQgSGVhZGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjaW5kZXgtcHJlcHJvY2Vzc2luZy1udW1iZXJzLTM1NjEiPnByZXByb2Nlc3NpbmcgbnVtYmVyczwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNpbmRleC1wcmVwcm9jZXNzaW5nLXRva2Vucy0zNTYwIj5wcmVwcm9jZXNzaW5nIHRva2VuczwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1wcmVwcm9jZXNzb3Itb3B0aW9ucy05MzYiPnByZXByb2Nlc3NvciBvcHRpb25zPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXByaW50Zi0zMjQyIj48Y29kZT5wcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXByaW50Zl8wMDVmdW5sb2NrZWQtMzI0MyI+PGNvZGU+cHJpbnRmX3VubG9ja2VkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3YnByb2ZfMDA3ZC01NjkiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5wcm9mPC9zcGFuPjwvc2FtcD48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnByb2dtZW1fMDA3ZC1BVlItdmFyaWFibGUtYXR0cmlidXRlLTI3NjkiPjxjb2RlPnByb2dtZW08L2NvZGU+IEFWUiB2YXJpYWJsZSBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLVByb3RvdHlwZXMuaHRtbCNpbmRleC1wcm9tb3Rpb24tb2YtZm9ybWFsLXBhcmFtZXRlcnMtMjc0OCI+cHJvbW90aW9uIG9mIGZvcm1hbCBwYXJhbWV0ZXJzPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tUHJvdG90eXBlcy5odG1sI0Z1bmN0aW9uLVByb3RvdHlwZXMiPkZ1bmN0aW9uIFByb3RvdHlwZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JwdXJlXzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NTgiPjxjb2RlPnB1cmU8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtcHVzaC1hZGRyZXNzLWluc3RydWN0aW9uLTI4MzkiPnB1c2ggYWRkcmVzcyBpbnN0cnVjdGlvbjwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1wdXRjaGFyLTMyNDQiPjxjb2RlPnB1dGNoYXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXB1dHMtMzI0NSI+PGNvZGU+cHV0czwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZsb2F0aW5nLVR5cGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JRXzAwN2QtZmxvYXRpbmctcG9pbnQtc3VmZml4LTI0NTUiPjxjb2RlPlE8L2NvZGU+IGZsb2F0aW5nIHBvaW50IHN1ZmZpeDwvYT46IDxhIGhyZWY9IkZsb2F0aW5nLVR5cGVzLmh0bWwjRmxvYXRpbmctVHlwZXMiPkZsb2F0aW5nIFR5cGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmxvYXRpbmctVHlwZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnFfMDA3ZC1mbG9hdGluZy1wb2ludC1zdWZmaXgtMjQ1MyI+PGNvZGU+cTwvY29kZT4gZmxvYXRpbmcgcG9pbnQgc3VmZml4PC9hPjogPGEgaHJlZj0iRmxvYXRpbmctVHlwZXMuaHRtbCNGbG9hdGluZy1UeXBlcyI+RmxvYXRpbmcgVHlwZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHbG9iYWwtUmVnLVZhcnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnFzb3J0XzAwN2RfMDAyYy1hbmQtZ2xvYmFsLXJlZ2lzdGVyLXZhcmlhYmxlcy0yODcwIj48Y29kZT5xc29ydDwvY29kZT4sIGFuZCBnbG9iYWwgcmVnaXN0ZXIgdmFyaWFibGVzPC9hPjogPGEgaHJlZj0iR2xvYmFsLVJlZy1WYXJzLmh0bWwjR2xvYmFsLVJlZy1WYXJzIj5HbG9iYWwgUmVnIFZhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNdWx0aV8wMDJkQWx0ZXJuYXRpdmUuaHRtbCNpbmRleC1xdWVzdGlvbi1tYXJrLTI4NDciPnF1ZXN0aW9uIG1hcms8L2E+OiA8YSBocmVmPSJNdWx0aV8wMDJkQWx0ZXJuYXRpdmUuaHRtbCNNdWx0aV8wMDJkQWx0ZXJuYXRpdmUiPk11bHRpLUFsdGVybmF0aXZlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JSXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDkwIj48Y29kZT5SPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDc0Ij48Y29kZT5yPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JyXzAwN2QtaW4tY29uc3RyYWludC0yODIxIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gY29uc3RyYWludDwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlJBTVBEXzAwN2QtMTE2NCI+PGNvZGU+UkFNUEQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiUkFNUFhfMDA3ZC0xMTY1Ij48Y29kZT5SQU1QWDwvY29kZT48L2E+OiA8YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj5BVlIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JSQU1QWV8wMDdkLTExNjYiPjxjb2RlPlJBTVBZPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlJBTVBaXzAwN2QtMTE2NyI+PGNvZGU+UkFNUFo8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDYXNlLVJhbmdlcy5odG1sI2luZGV4LXJhbmdlcy1pbi1jYXNlLXN0YXRlbWVudHMtMjU1OCI+cmFuZ2VzIGluIGNhc2Ugc3RhdGVtZW50czwvYT46IDxhIGhyZWY9IkNhc2UtUmFuZ2VzLmh0bWwjQ2FzZS1SYW5nZXMiPkNhc2UgUmFuZ2VzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNpbmRleC1yZWFkXzAwMmRvbmx5LXN0cmluZ3MtMzU0MCI+cmVhZC1vbmx5IHN0cmluZ3M8L2E+OiA8YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj5JbmNvbXBhdGliaWxpdGllczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikdsb2JhbC1SZWctVmFycy5odG1sI2luZGV4LXJlZ2lzdGVyLXZhcmlhYmxlLWFmdGVyLV8wMDQwY29kZV8wMDdibG9uZ2ptcF8wMDdkLTI4NzEiPnJlZ2lzdGVyIHZhcmlhYmxlIGFmdGVyIDxjb2RlPmxvbmdqbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iR2xvYmFsLVJlZy1WYXJzLmh0bWwjR2xvYmFsLVJlZy1WYXJzIj5HbG9iYWwgUmVnIFZhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFeHRlbmRlZC1Bc20uaHRtbCNpbmRleC1yZWdpc3RlcnMtMjgwNyI+cmVnaXN0ZXJzPC9hPjogPGEgaHJlZj0iRXh0ZW5kZWQtQXNtLmh0bWwjRXh0ZW5kZWQtQXNtIj5FeHRlbmRlZCBBc208L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2NhbC1SZWctVmFycy5odG1sI2luZGV4LXJlZ2lzdGVycy1mb3ItbG9jYWwtdmFyaWFibGVzLTI4NzgiPnJlZ2lzdGVycyBmb3IgbG9jYWwgdmFyaWFibGVzPC9hPjogPGEgaHJlZj0iTG9jYWwtUmVnLVZhcnMuaHRtbCNMb2NhbC1SZWctVmFycyI+TG9jYWwgUmVnIFZhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1yZWdpc3RlcnMtaW4tY29uc3RyYWludHMtMjgyMiI+cmVnaXN0ZXJzIGluIGNvbnN0cmFpbnRzPC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFeHBsaWNpdC1SZWctVmFycy5odG1sI2luZGV4LXJlZ2lzdGVyc18wMDJjLWdsb2JhbC1hbGxvY2F0aW9uLTI4NjciPnJlZ2lzdGVycywgZ2xvYmFsIGFsbG9jYXRpb248L2E+OiA8YSBocmVmPSJFeHBsaWNpdC1SZWctVmFycy5odG1sI0V4cGxpY2l0LVJlZy1WYXJzIj5FeHBsaWNpdCBSZWcgVmFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikdsb2JhbC1SZWctVmFycy5odG1sI2luZGV4LXJlZ2lzdGVyc18wMDJjLWdsb2JhbC12YXJpYWJsZXMtaW4tMjg2OSI+cmVnaXN0ZXJzLCBnbG9iYWwgdmFyaWFibGVzIGluPC9hPjogPGEgaHJlZj0iR2xvYmFsLVJlZy1WYXJzLmh0bWwjR2xvYmFsLVJlZy1WYXJzIj5HbG9iYWwgUmVnIFZhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZWdwYXJtXzAwN2QtYXR0cmlidXRlLTI2NjQiPjxjb2RlPnJlZ3Bhcm08L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1yZWxvY2F0aW9uLXRydW5jYXRlZC10by1maXQtXzAwMjhDb2xkRmlyZV8wMDI5LTE2NTQiPnJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdCAoQ29sZEZpcmUpPC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1yZWxvY2F0aW9uLXRydW5jYXRlZC10by1maXQtXzAwMjhNSVBTXzAwMjktMTc1NiI+cmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0IChNSVBTKTwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1yZW1haW5kZXItMzI0NiI+PGNvZGU+cmVtYWluZGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1yZW1haW5kZXJmLTMyNDciPjxjb2RlPnJlbWFpbmRlcmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXJlbWFpbmRlcmwtMzI0OCI+PGNvZGU+cmVtYWluZGVybDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtcmVtcXVvLTMyNDkiPjxjb2RlPnJlbXF1bzwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtcmVtcXVvZi0zMjUwIj48Y29kZT5yZW1xdW9mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1yZW1xdW9sLTMyNTEiPjxjb2RlPnJlbXF1b2w8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZW5lc2FzXzAwN2QtYXR0cmlidXRlLTI2NjgiPjxjb2RlPnJlbmVzYXM8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtcmVvcmRlcmluZ18wMDJjLXdhcm5pbmctMTg2Ij5yZW9yZGVyaW5nLCB3YXJuaW5nPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVncy5odG1sI2luZGV4LXJlcG9ydGluZy1idWdzLTM1OTMiPnJlcG9ydGluZyBidWdzPC9hPjogPGEgaHJlZj0iQnVncy5odG1sI0J1Z3MiPkJ1Z3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZXNiYW5rXzAwN2QtYXR0cmlidXRlLTI2NjkiPjxjb2RlPnJlc2Jhbms8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjaW5kZXgtcmVzdC1hcmd1bWVudC1fMDAyOGluLW1hY3JvXzAwMjktMjUzMiI+cmVzdCBhcmd1bWVudCAoaW4gbWFjcm8pPC9hPjogPGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIj5WYXJpYWRpYyBNYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZXN0cmljdGVkLVBvaW50ZXJzLmh0bWwjaW5kZXgtcmVzdHJpY3RlZC1wb2ludGVycy0zNDk4Ij5yZXN0cmljdGVkIHBvaW50ZXJzPC9hPjogPGEgaHJlZj0iUmVzdHJpY3RlZC1Qb2ludGVycy5odG1sI1Jlc3RyaWN0ZWQtUG9pbnRlcnMiPlJlc3RyaWN0ZWQgUG9pbnRlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZXN0cmljdGVkLVBvaW50ZXJzLmh0bWwjaW5kZXgtcmVzdHJpY3RlZC1yZWZlcmVuY2VzLTM0OTkiPnJlc3RyaWN0ZWQgcmVmZXJlbmNlczwvYT46IDxhIGhyZWY9IlJlc3RyaWN0ZWQtUG9pbnRlcnMuaHRtbCNSZXN0cmljdGVkLVBvaW50ZXJzIj5SZXN0cmljdGVkIFBvaW50ZXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVzdHJpY3RlZC1Qb2ludGVycy5odG1sI2luZGV4LXJlc3RyaWN0ZWQtdGhpcy1wb2ludGVyLTM1MDAiPnJlc3RyaWN0ZWQgdGhpcyBwb2ludGVyPC9hPjogPGEgaHJlZj0iUmVzdHJpY3RlZC1Qb2ludGVycy5odG1sI1Jlc3RyaWN0ZWQtUG9pbnRlcnMiPlJlc3RyaWN0ZWQgUG9pbnRlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JyZXR1cm5zXzAwNWZ0d2ljZV8wMDdkLWF0dHJpYnV0ZS0yNjcwIj48Y29kZT5yZXR1cm5zX3R3aWNlPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtcmluZGV4LTMyNTIiPjxjb2RlPnJpbmRleDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtcmludC0zMjUzIj48Y29kZT5yaW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1yaW50Zi0zMjU0Ij48Y29kZT5yaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtcmludGwtMzI1NSI+PGNvZGU+cmludGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSTDc4LU9wdGlvbnMuaHRtbCNpbmRleC1STDc4LU9wdGlvbnMtMTkwNSI+Ukw3OCBPcHRpb25zPC9hPjogPGEgaHJlZj0iUkw3OC1PcHRpb25zLmh0bWwjUkw3OC1PcHRpb25zIj5STDc4IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXJvdW5kLTMyNTYiPjxjb2RlPnJvdW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1yb3VuZGYtMzI1NyI+PGNvZGU+cm91bmRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1yb3VuZGwtMzI1OCI+PGNvZGU+cm91bmRsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LVJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMtMTkwOCI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZhZ3VlLUxpbmthZ2UuaHRtbCNpbmRleC1SVFRJLTM1MDQiPlJUVEk8L2E+OiA8YSBocmVmPSJWYWd1ZS1MaW5rYWdlLmh0bWwjVmFndWUtTGlua2FnZSI+VmFndWUgTGlua2FnZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1ydW5fMDAyZHRpbWUtb3B0aW9ucy0yMzI1Ij5ydW4tdGltZSBvcHRpb25zPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjaW5kZXgtUlgtT3B0aW9ucy0yMDU2Ij5SWCBPcHRpb25zPC9hPjogPGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI1JYLU9wdGlvbnMiPlJYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3YnNfMDA3ZC1pbi1jb25zdHJhaW50LTI4MzEiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+czwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LVNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLTIwNzciPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LXNhdmUtYWxsLXJlZ2lzdGVycy1vbi10aGUtQmxhY2tmaW5fMDAyYy1IOF8wMDJmMzAwXzAwMmMtSDhfMDAyZjMwMEhfMDAyYy1hbmQtSDhTLTI2NzEiPnNhdmUgYWxsIHJlZ2lzdGVycyBvbiB0aGUgQmxhY2tmaW4sIEg4LzMwMCwgSDgvMzAwSCwgYW5kIEg4UzwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LXNhdmUtdm9sYXRpbGUtcmVnaXN0ZXJzLW9uLXRoZS1NaWNyb0JsYXplLTI2NzIiPnNhdmUgdm9sYXRpbGUgcmVnaXN0ZXJzIG9uIHRoZSBNaWNyb0JsYXplPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNjYWxiLTMyNTkiPjxjb2RlPnNjYWxiPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zY2FsYmYtMzI2MCI+PGNvZGU+c2NhbGJmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zY2FsYmwtMzI2MSI+PGNvZGU+c2NhbGJsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zY2FsYmxuLTMyNjIiPjxjb2RlPnNjYWxibG48L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNjYWxibG5mLTMyNjMiPjxjb2RlPnNjYWxibG5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zY2FsYm4tMzI2NSI+PGNvZGU+c2NhbGJuPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zY2FsYm5mLTMyNjYiPjxjb2RlPnNjYWxibmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2NhbmZfMDA3ZF8wMDJjLWFuZC1jb25zdGFudC1zdHJpbmdzLTM1NDUiPjxjb2RlPnNjYW5mPC9jb2RlPiwgYW5kIGNvbnN0YW50IHN0cmluZ3M8L2E+OiA8YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj5JbmNvbXBhdGliaWxpdGllczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc2NhbmZubC0zMjY3Ij48Y29kZT5zY2FuZm5sPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtTGVuZ3RoLmh0bWwjaW5kZXgtc2NvcGUtb2YtYS12YXJpYWJsZS1sZW5ndGgtYXJyYXktMjUyNSI+c2NvcGUgb2YgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXk8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1MZW5ndGguaHRtbCNWYXJpYWJsZS1MZW5ndGgiPlZhcmlhYmxlIExlbmd0aDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpc2FwcG9pbnRtZW50cy5odG1sI2luZGV4LXNjb3BlLW9mLWRlY2xhcmF0aW9uLTM1NjQiPnNjb3BlIG9mIGRlY2xhcmF0aW9uPC9hPjogPGEgaHJlZj0iRGlzYXBwb2ludG1lbnRzLmh0bWwjRGlzYXBwb2ludG1lbnRzIj5EaXNhcHBvaW50bWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LXNjb3BlLW9mLWV4dGVybmFsLWRlY2xhcmF0aW9ucy0zNTUwIj5zY29wZSBvZiBleHRlcm5hbCBkZWNsYXJhdGlvbnM8L2E+OiA8YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj5JbmNvbXBhdGliaWxpdGllczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNpbmRleC1TY29yZS1PcHRpb25zLTIxMDgiPlNjb3JlIE9wdGlvbnM8L2E+OiA8YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjU2NvcmUtT3B0aW9ucyI+U2NvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjaW5kZXgtc2VhcmNoLXBhdGgtMTA1NiI+c2VhcmNoIHBhdGg8L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNlY3Rpb25fMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY3MyI+PGNvZGU+c2VjdGlvbjwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZWN0aW9uXzAwN2QtdmFyaWFibGUtYXR0cmlidXRlLTI3NjYiPjxjb2RlPnNlY3Rpb248L2NvZGU+IHZhcmlhYmxlIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic2VudGluZWxfMDA3ZC1mdW5jdGlvbi1hdHRyaWJ1dGUtMjY3NCI+PGNvZGU+c2VudGluZWw8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR2xvYmFsLVJlZy1WYXJzLmh0bWwjaW5kZXgtc2V0am1wLTI4NzUiPjxjb2RlPnNldGptcDwvY29kZT48L2E+OiA8YSBocmVmPSJHbG9iYWwtUmVnLVZhcnMuaHRtbCNHbG9iYWwtUmVnLVZhcnMiPkdsb2JhbCBSZWcgVmFyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzZXRqbXBfMDA3ZC1pbmNvbXBhdGliaWxpdGllcy0zNTQ2Ij48Y29kZT5zZXRqbXA8L2NvZGU+IGluY29tcGF0aWJpbGl0aWVzPC9hPjogPGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LXNoYXJlZC1zdHJpbmdzLTM1NDEiPnNoYXJlZCBzdHJpbmdzPC9hPjogPGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzaGFyZWRfMDA3ZC12YXJpYWJsZS1hdHRyaWJ1dGUtMjc2NyI+PGNvZGU+c2hhcmVkPC9jb2RlPiB2YXJpYWJsZSBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI2luZGV4LXNpZGUtZWZmZWN0LWluLV8wMDQwY29kZV8wMDdiXzAwM2ZfMDAzYV8wMDdkLTI0MzUiPnNpZGUgZWZmZWN0IGluIDxjb2RlPj86PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvbmRpdGlvbmFscy5odG1sI0NvbmRpdGlvbmFscyI+Q29uZGl0aW9uYWxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhdGVtZW50LUV4cHJzLmh0bWwjaW5kZXgtc2lkZS1lZmZlY3RzXzAwMmMtbWFjcm8tYXJndW1lbnQtMjQwNSI+c2lkZSBlZmZlY3RzLCBtYWNybyBhcmd1bWVudDwvYT46IDxhIGhyZWY9IlN0YXRlbWVudC1FeHBycy5odG1sI1N0YXRlbWVudC1FeHBycyI+U3RhdGVtZW50IEV4cHJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTm9uXzAwMmRidWdzLmh0bWwjaW5kZXgtc2lkZS1lZmZlY3RzXzAwMmMtb3JkZXItb2YtZXZhbHVhdGlvbi0zNTg0Ij5zaWRlIGVmZmVjdHMsIG9yZGVyIG9mIGV2YWx1YXRpb248L2E+OiA8YSBocmVmPSJOb25fMDAyZGJ1Z3MuaHRtbCNOb25fMDAyZGJ1Z3MiPk5vbi1idWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaWduYml0LTMyNjgiPjxjb2RlPnNpZ25iaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNpZ25iaXRkMTI4LTMyNzMiPjxjb2RlPnNpZ25iaXRkMTI4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaWduYml0ZDMyLTMyNzEiPjxjb2RlPnNpZ25iaXRkMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNpZ25iaXRkNjQtMzI3MiI+PGNvZGU+c2lnbmJpdGQ2NDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc2lnbmJpdGYtMzI2OSI+PGNvZGU+c2lnbmJpdGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNpZ25iaXRsLTMyNzAiPjxjb2RlPnNpZ25iaXRsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtc2lnbmVkLWFuZC11bnNpZ25lZC12YWx1ZXNfMDAyYy1jb21wYXJpc29uLXdhcm5pbmctNDQxIj5zaWduZWQgYW5kIHVuc2lnbmVkIHZhbHVlcywgY29tcGFyaXNvbiB3YXJuaW5nPC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNpZ25pZmljYW5kLTMyNzQiPjxjb2RlPnNpZ25pZmljYW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaWduaWZpY2FuZGYtMzI3NSI+PGNvZGU+c2lnbmlmaWNhbmRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaWduaWZpY2FuZGwtMzI3NiI+PGNvZGU+c2lnbmlmaWNhbmRsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjaW5kZXgtc2ltcGxlLWNvbnN0cmFpbnRzLTI4MTIiPnNpbXBsZSBjb25zdHJhaW50czwvYT46IDxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaW4tMzI3NyI+PGNvZGU+c2luPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaW5jb3MtMzI3OCI+PGNvZGU+c2luY29zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaW5jb3NmLTMyNzkiPjxjb2RlPnNpbmNvc2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNpbmNvc2wtMzI4MCI+PGNvZGU+c2luY29zbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc2luZi0zMjgxIj48Y29kZT5zaW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaW5oLTMyODIiPjxjb2RlPnNpbmg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNpbmhmLTMyODMiPjxjb2RlPnNpbmhmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zaW5obC0zMjg0Ij48Y29kZT5zaW5obDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc2lubC0zMjg1Ij48Y29kZT5zaW5sPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVHlwZW9mLmh0bWwjaW5kZXgtc2l6ZW9mLTI0MjMiPjxjb2RlPnNpemVvZjwvY29kZT48L2E+OiA8YSBocmVmPSJUeXBlb2YuaHRtbCNUeXBlb2YiPlR5cGVvZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI2luZGV4LXNtYWxsZXItZGF0YS1yZWZlcmVuY2VzLTE2MDQiPnNtYWxsZXIgZGF0YSByZWZlcmVuY2VzPC9hPjogPGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjTTMyUl8wMDJmRC1PcHRpb25zIj5NMzJSL0QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1zbWFsbGVyLWRhdGEtcmVmZXJlbmNlcy1fMDAyOFBvd2VyUENfMDAyOS0yMDQwIj5zbWFsbGVyIGRhdGEgcmVmZXJlbmNlcyAoUG93ZXJQQyk8L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zbnByaW50Zi0zMjg2Ij48Y29kZT5zbnByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNvbGFyaXMtMi1PcHRpb25zLmh0bWwjaW5kZXgtU29sYXJpcy0yLW9wdGlvbnMtMjE3NyI+U29sYXJpcyAyIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJTb2xhcmlzLTItT3B0aW9ucy5odG1sI1NvbGFyaXMtMi1PcHRpb25zIj5Tb2xhcmlzIDIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnNwXzAwNWZzd2l0Y2hfMDA3ZC1hdHRyaWJ1dGUtMjY3NiI+PGNvZGU+c3Bfc3dpdGNoPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1TUEFSQy1vcHRpb25zLTIxODEiPlNQQVJDIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNwZWMtRmlsZXMuaHRtbCNpbmRleC1TcGVjLUZpbGVzLTEwNjUiPlNwZWMgRmlsZXM8L2E+OiA8YSBocmVmPSJTcGVjLUZpbGVzLmh0bWwjU3BlYy1GaWxlcyI+U3BlYyBGaWxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4cGxpY2l0LVJlZy1WYXJzLmh0bWwjaW5kZXgtc3BlY2lmaWVkLXJlZ2lzdGVycy0yODY2Ij5zcGVjaWZpZWQgcmVnaXN0ZXJzPC9hPjogPGEgaHJlZj0iRXhwbGljaXQtUmVnLVZhcnMuaHRtbCNFeHBsaWNpdC1SZWctVmFycyI+RXhwbGljaXQgUmVnIFZhcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUYXJnZXQtT3B0aW9ucy5odG1sI2luZGV4LXNwZWNpZnlpbmctY29tcGlsZXItdmVyc2lvbi1hbmQtdGFyZ2V0LW1hY2hpbmUtMTA3MiI+c3BlY2lmeWluZyBjb21waWxlciB2ZXJzaW9uIGFuZCB0YXJnZXQgbWFjaGluZTwvYT46IDxhIGhyZWY9IlRhcmdldC1PcHRpb25zLmh0bWwjVGFyZ2V0LU9wdGlvbnMiPlRhcmdldCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI2luZGV4LXNwZWNpZnlpbmctaGFyZHdhcmUtY29uZmlnLTEwNzYiPnNwZWNpZnlpbmcgaGFyZHdhcmUgY29uZmlnPC9hPjogPGEgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUYXJnZXQtT3B0aW9ucy5odG1sI2luZGV4LXNwZWNpZnlpbmctbWFjaGluZS12ZXJzaW9uLTEwNzEiPnNwZWNpZnlpbmcgbWFjaGluZSB2ZXJzaW9uPC9hPjogPGEgaHJlZj0iVGFyZ2V0LU9wdGlvbnMuaHRtbCNUYXJnZXQtT3B0aW9ucyI+VGFyZ2V0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2NhbC1SZWctVmFycy5odG1sI2luZGV4LXNwZWNpZnlpbmctcmVnaXN0ZXJzLWZvci1sb2NhbC12YXJpYWJsZXMtMjg3NyI+c3BlY2lmeWluZyByZWdpc3RlcnMgZm9yIGxvY2FsIHZhcmlhYmxlczwvYT46IDxhIGhyZWY9IkxvY2FsLVJlZy1WYXJzLmh0bWwjTG9jYWwtUmVnLVZhcnMiPkxvY2FsIFJlZyBWYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlY29tcGlsZWQtSGVhZGVycy5odG1sI2luZGV4LXNwZWVkLW9mLWNvbXBpbGF0aW9uLTIzOTEiPnNwZWVkIG9mIGNvbXBpbGF0aW9uPC9hPjogPGEgaHJlZj0iUHJlY29tcGlsZWQtSGVhZGVycy5odG1sI1ByZWNvbXBpbGVkLUhlYWRlcnMiPlByZWNvbXBpbGVkIEhlYWRlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNwcmludGYtMzI4NyI+PGNvZGU+c3ByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjaW5kZXgtU1BVLW9wdGlvbnMtMjIxOSI+U1BVIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI1NQVS1PcHRpb25zIj5TUFUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3FydC0zMjg4Ij48Y29kZT5zcXJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zcXJ0Zi0zMjg5Ij48Y29kZT5zcXJ0ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3FydGwtMzI5MCI+PGNvZGU+c3FydGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXNzY2FuZi0zMjkxIj48Y29kZT5zc2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3NjYW5mXzAwN2RfMDAyYy1hbmQtY29uc3RhbnQtc3RyaW5ncy0zNTQzIj48Y29kZT5zc2NhbmY8L2NvZGU+LCBhbmQgY29uc3RhbnQgc3RyaW5nczwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3NlcmVncGFybV8wMDdkLWF0dHJpYnV0ZS0yNjY2Ij48Y29kZT5zc2VyZWdwYXJtPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YXRlbWVudC1FeHBycy5odG1sI2luZGV4LXN0YXRlbWVudHMtaW5zaWRlLWV4cHJlc3Npb25zLTI0MDEiPnN0YXRlbWVudHMgaW5zaWRlIGV4cHJlc3Npb25zPC9hPjogPGEgaHJlZj0iU3RhdGVtZW50LUV4cHJzLmh0bWwjU3RhdGVtZW50LUV4cHJzIj5TdGF0ZW1lbnQgRXhwcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGF0aWMtRGVmaW5pdGlvbnMuaHRtbCNpbmRleC1zdGF0aWMtZGF0YS1pbi1DXzAwMmJfMDAyYl8wMDJjLWRlY2xhcmluZy1hbmQtZGVmaW5pbmctMzU3MSI+c3RhdGljIGRhdGEgaW4gQysrLCBkZWNsYXJpbmcgYW5kIGRlZmluaW5nPC9hPjogPGEgaHJlZj0iU3RhdGljLURlZmluaXRpb25zLmh0bWwjU3RhdGljLURlZmluaXRpb25zIj5TdGF0aWMgRGVmaW5pdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXN0cGNweS0zMjkyIj48Y29kZT5zdHBjcHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXN0cG5jcHktMzI5MyI+PGNvZGU+c3RwbmNweTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3RyY2FzZWNtcC0zMjk0Ij48Y29kZT5zdHJjYXNlY21wPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJjYXQtMzI5NSI+PGNvZGU+c3RyY2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJjaHItMzI5NiI+PGNvZGU+c3RyY2hyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJjbXAtMzI5NyI+PGNvZGU+c3RyY21wPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJjcHktMzI5OCI+PGNvZGU+c3RyY3B5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJjc3BuLTMyOTkiPjxjb2RlPnN0cmNzcG48L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXN0cmR1cC0zMzAwIj48Y29kZT5zdHJkdXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXN0cmZtb24tMzMwMSI+PGNvZGU+c3RyZm1vbjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3RyZnRpbWUtMzMwMiI+PGNvZGU+c3RyZnRpbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LXN0cmluZy1jb25zdGFudHMtMzUzOSI+c3RyaW5nIGNvbnN0YW50czwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJsZW4tMzMwMyI+PGNvZGU+c3RybGVuPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJuY2FzZWNtcC0zMzA0Ij48Y29kZT5zdHJuY2FzZWNtcDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3RybmNhdC0zMzA1Ij48Y29kZT5zdHJuY2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJuY21wLTMzMDYiPjxjb2RlPnN0cm5jbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXN0cm5jcHktMzMwNyI+PGNvZGU+c3RybmNweTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3RybmR1cC0zMzA4Ij48Y29kZT5zdHJuZHVwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1zdHJwYnJrLTMzMDkiPjxjb2RlPnN0cnBicms8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXN0cnJjaHItMzMxMCI+PGNvZGU+c3RycmNocjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3Ryc3BuLTMzMTEiPjxjb2RlPnN0cnNwbjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3Ryc3RyLTMzMTIiPjxjb2RlPnN0cnN0cjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlVubmFtZWQtRmllbGRzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJ1Y3RfMDA3ZC0zNDg0Ij48Y29kZT5zdHJ1Y3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iVW5uYW1lZC1GaWVsZHMuaHRtbCNVbm5hbWVkLUZpZWxkcyI+VW5uYW1lZCBGaWVsZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LXN0cnVjdC1fMDA1Zl8wMDVmaHRtXzAwNWZ0ZGItMzQzOSI+PGNvZGU+c3RydWN0IF9faHRtX3RkYjwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5TLzM5MCBTeXN0ZW0geiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI2luZGV4LXN0cnVjdHVyZXMtMzU1NyI+c3RydWN0dXJlczwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29tcG91bmQtTGl0ZXJhbHMuaHRtbCNpbmRleC1zdHJ1Y3R1cmVzXzAwMmMtY29uc3RydWN0b3ItZXhwcmVzc2lvbi0yNTQ4Ij5zdHJ1Y3R1cmVzLCBjb25zdHJ1Y3RvciBleHByZXNzaW9uPC9hPjogPGEgaHJlZj0iQ29tcG91bmQtTGl0ZXJhbHMuaHRtbCNDb21wb3VuZC1MaXRlcmFscyI+Q29tcG91bmQgTGl0ZXJhbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjaW5kZXgtc3VibW9kZWwtb3B0aW9ucy0xMDc1Ij5zdWJtb2RlbCBvcHRpb25zPC9hPjogPGEgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdWJzY3JpcHRpbmcuaHRtbCNpbmRleC1zdWJzY3JpcHRpbmctMjUzNiI+c3Vic2NyaXB0aW5nPC9hPjogPGEgaHJlZj0iU3Vic2NyaXB0aW5nLmh0bWwjU3Vic2NyaXB0aW5nIj5TdWJzY3JpcHRpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdWJzY3JpcHRpbmcuaHRtbCNpbmRleC1zdWJzY3JpcHRpbmctYW5kLWZ1bmN0aW9uLXZhbHVlcy0yNTM4Ij5zdWJzY3JpcHRpbmcgYW5kIGZ1bmN0aW9uIHZhbHVlczwvYT46IDxhIGhyZWY9IlN1YnNjcmlwdGluZy5odG1sI1N1YnNjcmlwdGluZyI+U3Vic2NyaXB0aW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNpbmRleC1zdWZmaXhlcy1mb3ItQ18wMDJiXzAwMmItc291cmNlLTkyIj5zdWZmaXhlcyBmb3IgQysrIHNvdXJjZTwvYT46IDxhIGhyZWY9Ikludm9raW5nLUdfMDAyYl8wMDJiLmh0bWwjSW52b2tpbmctR18wMDJiXzAwMmIiPkludm9raW5nIEcrKzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LVNVTlBST18wMDVmREVQRU5ERU5DSUVTLTIzODgiPjxjb2RlPlNVTlBST19ERVBFTkRFTkNJRVM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1zdXBwcmVzc2luZy13YXJuaW5ncy0yNDYiPnN1cHByZXNzaW5nIHdhcm5pbmdzPC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI2luZGV4LXN1cnByaXNlcy1pbi1DXzAwMmJfMDAyYi0zNTY4Ij5zdXJwcmlzZXMgaW4gQysrPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MuaHRtbCNDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncyI+QysrIE1pc3VuZGVyc3RhbmRpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtc3ludGF4LWNoZWNraW5nLTI0NyI+c3ludGF4IGNoZWNraW5nPC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzeXNjYWxsXzAwNWZsaW5rYWdlXzAwN2QtYXR0cmlidXRlLTI2NzgiPjxjb2RlPnN5c2NhbGxfbGlua2FnZTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1zeXN0ZW0taGVhZGVyc18wMDJjLXdhcm5pbmdzLWZyb20tMzgyIj5zeXN0ZW0gaGVhZGVycywgd2FybmluZ3MgZnJvbTwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3lzdl8wMDVmYWJpXzAwN2QtYXR0cmlidXRlLTI2MzciPjxjb2RlPnN5c3ZfYWJpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdGFuLTMzMTMiPjxjb2RlPnRhbjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdGFuZi0zMzE0Ij48Y29kZT50YW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC10YW5oLTMzMTUiPjxjb2RlPnRhbmg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXRhbmhmLTMzMTYiPjxjb2RlPnRhbmhmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC10YW5obC0zMzE3Ij48Y29kZT50YW5obDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdGFubC0zMzE4Ij48Y29kZT50YW5sPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwN2QtZnVuY3Rpb24tYXR0cmlidXRlLTI2NzkiPjxjb2RlPnRhcmdldDwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUYXJnZXQtT3B0aW9ucy5odG1sI2luZGV4LXRhcmdldC1tYWNoaW5lXzAwMmMtc3BlY2lmeWluZy0xMDc0Ij50YXJnZXQgbWFjaGluZSwgc3BlY2lmeWluZzwvYT46IDxhIGhyZWY9IlRhcmdldC1PcHRpb25zLmh0bWwjVGFyZ2V0LU9wdGlvbnMiPlRhcmdldCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVGFyZ2V0LU9wdGlvbnMuaHRtbCNpbmRleC10YXJnZXQtb3B0aW9ucy0xMDY5Ij50YXJnZXQgb3B0aW9uczwvYT46IDxhIGhyZWY9IlRhcmdldC1PcHRpb25zLmh0bWwjVGFyZ2V0LU9wdGlvbnMiPlRhcmdldCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmFibV8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY4MCI+PGNvZGU+dGFyZ2V0KCJhYm0iKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyYWVzXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjgxIj48Y29kZT50YXJnZXQoImFlcyIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJhbGlnbl8wMDJkc3RyaW5nb3BzXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzAzIj48Y29kZT50YXJnZXQoImFsaWduLXN0cmluZ29wcyIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJhbHRpdmVjXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzA4Ij48Y29kZT50YXJnZXQoImFsdGl2ZWMiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyYXJjaF8wMDNkXzAwNDB2YXJfMDA3YkFSQ0hfMDA3ZF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcwNSI+PGNvZGU+dGFyZ2V0KCJhcmNoPTwvY29kZT48dmFyPkFSQ0g8L3Zhcj48Y29kZT4iKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyYXZvaWRfMDAyZGluZGV4ZWRfMDAyZGFkZHJlc3Nlc18wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcyNyI+PGNvZGU+dGFyZ2V0KCJhdm9pZC1pbmRleGVkLWFkZHJlc3NlcyIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJjbGRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2OTciPjxjb2RlPnRhcmdldCgiY2xkIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmNtcGJfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDkiPjxjb2RlPnRhcmdldCgiY21wYiIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJjcHVfMDAzZF8wMDQwdmFyXzAwN2JDUFVfMDA3ZF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjczMCI+PGNvZGU+dGFyZ2V0KCJjcHU9PC9jb2RlPjx2YXI+Q1BVPC92YXI+PGNvZGU+Iik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmRlZmF1bHRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2ODIiPjxjb2RlPnRhcmdldCgiZGVmYXVsdCIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJkbG16Yl8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcxMCI+PGNvZGU+dGFyZ2V0KCJkbG16YiIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJmYW5jeV8wMDJkbWF0aF8wMDJkMzg3XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjk4Ij48Y29kZT50YXJnZXQoImZhbmN5LW1hdGgtMzg3Iik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmZtYTRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2OTMiPjxjb2RlPnRhcmdldCgiZm1hNCIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJmcG1hdGhfMDAzZF8wMDQwdmFyXzAwN2JGUE1BVEhfMDA3ZF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcwNyI+PGNvZGU+dGFyZ2V0KCJmcG1hdGg9PC9jb2RlPjx2YXI+RlBNQVRIPC92YXI+PGNvZGU+Iik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmZwcm5kXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzExIj48Y29kZT50YXJnZXQoImZwcm5kIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmZyaXpfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MjYiPjxjb2RlPnRhcmdldCgiZnJpeiIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJmdXNlZF8wMDJkbWFkZF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5OSI+PGNvZGU+dGFyZ2V0KCJmdXNlZC1tYWRkIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmhhcmRfMDAyZGRmcF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcxMiI+PGNvZGU+dGFyZ2V0KCJoYXJkLWRmcCIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJpZWVlXzAwMmRmcF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcwMCI+PGNvZGU+dGFyZ2V0KCJpZWVlLWZwIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmlubGluZV8wMDJkYWxsXzAwMmRzdHJpbmdvcHNfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDEiPjxjb2RlPnRhcmdldCgiaW5saW5lLWFsbC1zdHJpbmdvcHMiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyaW5saW5lXzAwMmRzdHJpbmdvcHNfMDAyZGR5bmFtaWNhbGx5XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzAyIj48Y29kZT50YXJnZXQoImlubGluZS1zdHJpbmdvcHMtZHluYW1pY2FsbHkiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyaXNlbF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcxMyI+PGNvZGU+dGFyZ2V0KCJpc2VsIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmxvbmdjYWxsXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzI5Ij48Y29kZT50YXJnZXQoImxvbmdjYWxsIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMmx3cF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5NSI+PGNvZGU+dGFyZ2V0KCJsd3AiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIybWZjcmZfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MTQiPjxjb2RlPnRhcmdldCgibWZjcmYiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIybWZwZ3ByXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzE1Ij48Y29kZT50YXJnZXQoIm1mcGdwciIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJtbXhfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2ODMiPjxjb2RlPnRhcmdldCgibW14Iik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMm11bGh3XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzE2Ij48Y29kZT50YXJnZXQoIm11bGh3Iik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMm11bHRpcGxlXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzE3Ij48Y29kZT50YXJnZXQoIm11bHRpcGxlIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnBhaXJlZF8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcyOCI+PGNvZGU+dGFyZ2V0KCJwYWlyZWQiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIycGNsbXVsXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjg0Ij48Y29kZT50YXJnZXQoInBjbG11bCIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJwb3BjbnRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2ODUiPjxjb2RlPnRhcmdldCgicG9wY250Iik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnBvcGNudGJfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MTkiPjxjb2RlPnRhcmdldCgicG9wY250YiIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJwb3BjbnRkXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzIwIj48Y29kZT50YXJnZXQoInBvcGNudGQiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIycG93ZXJwY18wMDJkZ2Z4b3B0XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzIxIj48Y29kZT50YXJnZXQoInBvd2VycGMtZ2Z4b3B0Iik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnBvd2VycGNfMDAyZGdwb3B0XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzIyIj48Y29kZT50YXJnZXQoInBvd2VycGMtZ3BvcHQiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIycmVjaXBfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDQiPjxjb2RlPnRhcmdldCgicmVjaXAiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIycmVjaXBfMDAyZHByZWNpc2lvbl8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcyMyI+PGNvZGU+dGFyZ2V0KCJyZWNpcC1wcmVjaXNpb24iKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyc3NlXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjg2Ij48Y29kZT50YXJnZXQoInNzZSIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzc2UyXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjg3Ij48Y29kZT50YXJnZXQoInNzZTIiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIyc3NlM18wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY4OCI+PGNvZGU+dGFyZ2V0KCJzc2UzIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnNzZTRfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2ODkiPjxjb2RlPnRhcmdldCgic3NlNCIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzc2U0XzAwMmUxXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjkwIj48Y29kZT50YXJnZXQoInNzZTQuMSIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzc2U0XzAwMmUyXzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNjkxIj48Y29kZT50YXJnZXQoInNzZTQuMiIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzc2U0YV8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5MiI+PGNvZGU+dGFyZ2V0KCJzc2U0YSIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzc3NlM18wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjY5NiI+PGNvZGU+dGFyZ2V0KCJzc3NlMyIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJzdHJpbmdfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MjQiPjxjb2RlPnRhcmdldCgic3RyaW5nIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnR1bmVfMDAzZF8wMDQwdmFyXzAwN2JUVU5FXzAwN2RfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI3MDYiPjxjb2RlPnRhcmdldCgidHVuZT08L2NvZGU+PHZhcj5UVU5FPC92YXI+PGNvZGU+Iik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidGFyZ2V0XzAwMjhfMDAyMnVwZGF0ZV8wMDIyXzAwMjlfMDA3ZC1hdHRyaWJ1dGUtMjcxOCI+PGNvZGU+dGFyZ2V0KCJ1cGRhdGUiKTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0YXJnZXRfMDAyOF8wMDIydnN4XzAwMjJfMDAyOV8wMDdkLWF0dHJpYnV0ZS0yNzI1Ij48Y29kZT50YXJnZXQoInZzeCIpPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRhcmdldF8wMDI4XzAwMjJ4b3BfMDAyMl8wMDI5XzAwN2QtYXR0cmlidXRlLTI2OTQiPjxjb2RlPnRhcmdldCgieG9wIik8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtVEMxLTQ4Ij5UQzE8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LVRDMi01MCI+VEMyPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1UQzMtNTIiPlRDMzwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtVGVjaG5pY2FsLUNvcnJpZ2VuZGEtNDciPlRlY2huaWNhbCBDb3JyaWdlbmRhPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNpbmRleC1UZWNobmljYWwtQ29ycmlnZW5kdW0tMS00OSI+VGVjaG5pY2FsIENvcnJpZ2VuZHVtIDE8L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LVRlY2huaWNhbC1Db3JyaWdlbmR1bS0yLTUxIj5UZWNobmljYWwgQ29ycmlnZW5kdW0gMjwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtVGVjaG5pY2FsLUNvcnJpZ2VuZHVtLTMtNTMiPlRlY2huaWNhbCBDb3JyaWdlbmR1bSAzPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUZW1wbGF0ZS1JbnN0YW50aWF0aW9uLmh0bWwjaW5kZXgtdGVtcGxhdGUtaW5zdGFudGlhdGlvbi0zNTE3Ij50ZW1wbGF0ZSBpbnN0YW50aWF0aW9uPC9hPjogPGEgaHJlZj0iVGVtcGxhdGUtSW5zdGFudGlhdGlvbi5odG1sI1RlbXBsYXRlLUluc3RhbnRpYXRpb24iPlRlbXBsYXRlIEluc3RhbnRpYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJUZW1wb3Jhcmllcy5odG1sI2luZGV4LXRlbXBvcmFyaWVzXzAwMmMtbGlmZXRpbWUtb2YtMzU3NyI+dGVtcG9yYXJpZXMsIGxpZmV0aW1lIG9mPC9hPjogPGEgaHJlZj0iVGVtcG9yYXJpZXMuaHRtbCNUZW1wb3JhcmllcyI+VGVtcG9yYXJpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXRnYW1tYS0zMzE5Ij48Y29kZT50Z2FtbWE8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXRnYW1tYWYtMzMyMCI+PGNvZGU+dGdhbW1hZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdGdhbW1hbC0zMzIxIj48Y29kZT50Z2FtbWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVGhyZWFkXzAwMmRMb2NhbC5odG1sI2luZGV4LVRocmVhZF8wMDJkTG9jYWwtU3RvcmFnZS0zNDg4Ij5UaHJlYWQtTG9jYWwgU3RvcmFnZTwvYT46IDxhIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIj5UaHJlYWQtTG9jYWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOZXN0ZWQtRnVuY3Rpb25zLmh0bWwjaW5kZXgtdGh1bmtzLTI0MTQiPnRodW5rczwvYT46IDxhIGhyZWY9Ik5lc3RlZC1GdW5jdGlvbnMuaHRtbCNOZXN0ZWQtRnVuY3Rpb25zIj5OZXN0ZWQgRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI2luZGV4LVRJTEVfMDAyZEd4LW9wdGlvbnMtMjI0NSI+VElMRS1HeCBvcHRpb25zPC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI1RJTEVfMDAyZEd4LU9wdGlvbnMiPlRJTEUtR3ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tT3B0aW9ucy5odG1sI2luZGV4LVRJTEVQcm8tb3B0aW9ucy0yMjUxIj5USUxFUHJvIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJUSUxFUHJvLU9wdGlvbnMuaHRtbCNUSUxFUHJvLU9wdGlvbnMiPlRJTEVQcm8gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC10aW55LWRhdGEtc2VjdGlvbi1vbi10aGUtSDhfMDAyZjMwMEgtYW5kLUg4Uy0yNzMyIj50aW55IGRhdGEgc2VjdGlvbiBvbiB0aGUgSDgvMzAwSCBhbmQgSDhTPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUaHJlYWRfMDAyZExvY2FsLmh0bWwjaW5kZXgtZ190XzAwNDBhY3JvbnltXzAwN2JUTFNfMDA3ZC0zNDg5Ij48YWNyb255bT5UTFM8L2Fjcm9ueW0+PC9hPjogPGEgaHJlZj0iVGhyZWFkXzAwMmRMb2NhbC5odG1sI1RocmVhZF8wMDJkTG9jYWwiPlRocmVhZC1Mb2NhbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRsc18wMDVmbW9kZWxfMDA3ZC1hdHRyaWJ1dGUtMjc2OCI+PGNvZGU+dGxzX21vZGVsPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI2luZGV4LVRNUERJUi0yMzc1Ij48Y29kZT5UTVBESVI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXRvYXNjaWktMzMyMiI+PGNvZGU+dG9hc2NpaTwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdG9sb3dlci0zMzIzIj48Y29kZT50b2xvd2VyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC10b3VwcGVyLTMzMjQiPjxjb2RlPnRvdXBwZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXRvd2xvd2VyLTMzMjUiPjxjb2RlPnRvd2xvd2VyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC10b3d1cHBlci0zMzI2Ij48Y29kZT50b3d1cHBlcjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtdHJhZGl0aW9uYWwtQy1sYW5ndWFnZS0xMTgiPnRyYWRpdGlvbmFsIEMgbGFuZ3VhZ2U8L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRyYXBfMDA1ZmV4aXRfMDA3ZC1hdHRyaWJ1dGUtMjczMyI+PGNvZGU+dHJhcF9leGl0PC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnRyYXBhXzAwNWZoYW5kbGVyXzAwN2QtYXR0cmlidXRlLTI3MzQiPjxjb2RlPnRyYXBhX2hhbmRsZXI8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC10cnVuYy0zMzI3Ij48Y29kZT50cnVuYzwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdHJ1bmNmLTMzMjgiPjxjb2RlPnRydW5jZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdHJ1bmNsLTMzMjkiPjxjb2RlPnRydW5jbDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5hbWUtbG9va3VwLmh0bWwjaW5kZXgtdHdvXzAwMmRzdGFnZS1uYW1lLWxvb2t1cC0zNTc1Ij50d28tc3RhZ2UgbmFtZSBsb29rdXA8L2E+OiA8YSBocmVmPSJOYW1lLWxvb2t1cC5odG1sI05hbWUtbG9va3VwIj5OYW1lIGxvb2t1cDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFsaWdubWVudC5odG1sI2luZGV4LXR5cGUtYWxpZ25tZW50LTI3ODUiPnR5cGUgYWxpZ25tZW50PC9hPjogPGEgaHJlZj0iQWxpZ25tZW50Lmh0bWwjQWxpZ25tZW50Ij5BbGlnbm1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC10eXBlLWF0dHJpYnV0ZXMtMjc3OSI+dHlwZSBhdHRyaWJ1dGVzPC9hPjogPGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIj5UeXBlIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYWd1ZS1MaW5rYWdlLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0eXBlXzAwNWZpbmZvXzAwN2QtMzUwMyI+PGNvZGU+dHlwZV9pbmZvPC9jb2RlPjwvYT46IDxhIGhyZWY9IlZhZ3VlLUxpbmthZ2UuaHRtbCNWYWd1ZS1MaW5rYWdlIj5WYWd1ZSBMaW5rYWdlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNpbmRleC10eXBlZGVmLW5hbWVzLWFzLWZ1bmN0aW9uLXBhcmFtZXRlcnMtMzU1MiI+dHlwZWRlZiBuYW1lcyBhcyBmdW5jdGlvbiBwYXJhbWV0ZXJzPC9hPjogPGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUeXBlb2YuaHRtbCNpbmRleC10eXBlb2YtMjQyMiI+PGNvZGU+dHlwZW9mPC9jb2RlPjwvYT46IDxhIGhyZWY9IlR5cGVvZi5odG1sI1R5cGVvZiI+VHlwZW9mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVSEtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI1MDEiPjxjb2RlPlVISzwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidWhrXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDg1Ij48Y29kZT51aGs8L2NvZGU+IGZpeGVkLXN1ZmZpeDwvYT46IDxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVIUl8wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ5MyI+PGNvZGU+VUhSPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1aHJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0NzciPjxjb2RlPnVocjwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiVUtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI1MDIiPjxjb2RlPlVLPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1a18wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjQ4NiI+PGNvZGU+dWs8L2NvZGU+IGZpeGVkLXN1ZmZpeDwvYT46IDxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVMS18wMDdkLWZpeGVkXzAwMmRzdWZmaXgtMjUwMyI+PGNvZGU+VUxLPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bGtfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0ODciPjxjb2RlPnVsazwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxvbmctTG9uZy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiVUxMXzAwN2QtaW50ZWdlci1zdWZmaXgtMjQ0MiI+PGNvZGU+VUxMPC9jb2RlPiBpbnRlZ2VyIHN1ZmZpeDwvYT46IDxhIGhyZWY9IkxvbmctTG9uZy5odG1sI0xvbmctTG9uZyI+TG9uZyBMb25nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVTExLXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNTA0Ij48Y29kZT5VTExLPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bGxrXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDg4Ij48Y29kZT51bGxrPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVTExSXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDk2Ij48Y29kZT5VTExSPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bGxyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDgwIj48Y29kZT51bGxyPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVTFJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0OTUiPjxjb2RlPlVMUjwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidWxyXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDc5Ij48Y29kZT51bHI8L2NvZGU+IGZpeGVkLXN1ZmZpeDwvYT46IDxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Rml4ZWQtUG9pbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNpbmRleC11bmRlZmluZWQtYmVoYXZpb3ItMzU5OSI+dW5kZWZpbmVkIGJlaGF2aW9yPC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNpbmRleC11bmRlZmluZWQtZnVuY3Rpb24tdmFsdWUtMzYwMCI+dW5kZWZpbmVkIGZ1bmN0aW9uIHZhbHVlPC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUeXBlb2YuaHRtbCNpbmRleC11bmRlcnNjb3Jlcy1pbi12YXJpYWJsZXMtaW4tbWFjcm9zLTI0MjUiPnVuZGVyc2NvcmVzIGluIHZhcmlhYmxlcyBpbiBtYWNyb3M8L2E+OiA8YSBocmVmPSJUeXBlb2YuaHRtbCNUeXBlb2YiPlR5cGVvZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlVubmFtZWQtRmllbGRzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bmlvbl8wMDdkLTM0ODUiPjxjb2RlPnVuaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IlVubmFtZWQtRmllbGRzLmh0bWwjVW5uYW1lZC1GaWVsZHMiPlVubmFtZWQgRmllbGRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ2FzdC10by1Vbmlvbi5odG1sI2luZGV4LXVuaW9uXzAwMmMtY2FzdGluZy10by1hLTI1NjAiPnVuaW9uLCBjYXN0aW5nIHRvIGE8L2E+OiA8YSBocmVmPSJDYXN0LXRvLVVuaW9uLmh0bWwjQ2FzdC10by1VbmlvbiI+Q2FzdCB0byBVbmlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjaW5kZXgtdW5pb25zLTM1NTgiPnVuaW9uczwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtdW5rbm93bi1wcmFnbWFzXzAwMmMtd2FybmluZy0zNTIiPnVua25vd24gcHJhZ21hcywgd2FybmluZzwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtdW5yZXNvbHZlZC1yZWZlcmVuY2VzLWFuZC1fMDA0MG9wdGlvbl8wMDdiXzAwMmRub2RlZmF1bHRsaWJzXzAwN2QtMTA0MCI+dW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9kZWZhdWx0bGliczwvc3Bhbj48L3NhbXA+PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC11bnJlc29sdmVkLXJlZmVyZW5jZXMtYW5kLV8wMDQwb3B0aW9uXzAwN2JfMDAyZG5vc3RkbGliXzAwN2QtMTAzNyI+dW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9zdGRsaWI8L3NwYW4+PC9zYW1wPjwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidW51c2VkXzAwN2QtYXR0cmlidXRlXzAwMmUtMjczNSI+PGNvZGU+dW51c2VkPC9jb2RlPiBhdHRyaWJ1dGUuPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVSXzAwN2QtZml4ZWRfMDAyZHN1ZmZpeC0yNDk0Ij48Y29kZT5VUjwvY29kZT4gZml4ZWQtc3VmZml4PC9hPjogPGEgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50Ij5GaXhlZC1Qb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidXJfMDA3ZC1maXhlZF8wMDJkc3VmZml4LTI0NzgiPjxjb2RlPnVyPC9jb2RlPiBmaXhlZC1zdWZmaXg8L2E+OiA8YSBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidXNlXzAwNWZkZWJ1Z18wMDVmZXhjZXB0aW9uXzAwNWZyZXR1cm5fMDA3ZC1hdHRyaWJ1dGUtMjYyMCI+PGNvZGU+dXNlX2RlYnVnX2V4Y2VwdGlvbl9yZXR1cm48L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidXNlXzAwNWZzaGFkb3dfMDA1ZnJlZ2lzdGVyXzAwNWZzZXRfMDA3ZC1hdHRyaWJ1dGUtMjYxOCI+PGNvZGU+dXNlX3NoYWRvd19yZWdpc3Rlcl9zZXQ8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidXNlZF8wMDdkLWF0dHJpYnV0ZV8wMDJlLTI3MzYiPjxjb2RlPnVzZWQ8L2NvZGU+IGF0dHJpYnV0ZS48L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1Vc2VyLXN0YWNrLXBvaW50ZXItaW4taW50ZXJydXB0cy1vbi10aGUtQmxhY2tmaW4tMjYyNCI+VXNlciBzdGFjayBwb2ludGVyIGluIGludGVycnVwdHMgb24gdGhlIEJsYWNrZmluPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNpbmRleC1nX3RfMDA0MHNhbXBfMDA3YlZfMDA3ZC1pbi1jb25zdHJhaW50LTI4MTgiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Vjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50PC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwjU2ltcGxlLUNvbnN0cmFpbnRzIj5TaW1wbGUgQ29uc3RyYWludHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1WODUwLU9wdGlvbnMtMjI1NCI+Vjg1MCBPcHRpb25zPC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYWd1ZS1MaW5rYWdlLmh0bWwjaW5kZXgtdmFndWUtbGlua2FnZS0zNTAxIj52YWd1ZSBsaW5rYWdlPC9hPjogPGEgaHJlZj0iVmFndWUtTGlua2FnZS5odG1sI1ZhZ3VlLUxpbmthZ2UiPlZhZ3VlIExpbmthZ2U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHbG9iYWwtUmVnLVZhcnMuaHRtbCNpbmRleC12YWx1ZS1hZnRlci1fMDA0MGNvZGVfMDA3YmxvbmdqbXBfMDA3ZC0yODczIj52YWx1ZSBhZnRlciA8Y29kZT5sb25nam1wPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikdsb2JhbC1SZWctVmFycy5odG1sI0dsb2JhbC1SZWctVmFycyI+R2xvYmFsIFJlZyBWYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LXZhcmlhYmxlLWFkZHJlc3NhYmlsaXR5LW9uLXRoZS1JQV8wMDJkNjQtMjYzNSI+dmFyaWFibGUgYWRkcmVzc2FiaWxpdHkgb24gdGhlIElBLTY0PC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtdmFyaWFibGUtYWRkcmVzc2FiaWxpdHktb24tdGhlLU0zMlJfMDAyZkQtMjc3NCI+dmFyaWFibGUgYWRkcmVzc2FiaWxpdHkgb24gdGhlIE0zMlIvRDwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWxpZ25tZW50Lmh0bWwjaW5kZXgtdmFyaWFibGUtYWxpZ25tZW50LTI3ODYiPnZhcmlhYmxlIGFsaWdubWVudDwvYT46IDxhIGhyZWY9IkFsaWdubWVudC5odG1sI0FsaWdubWVudCI+QWxpZ25tZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2luZGV4LXZhcmlhYmxlLWF0dHJpYnV0ZXMtMjc1NiI+dmFyaWFibGUgYXR0cmlidXRlczwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjaW5kZXgtdmFyaWFibGUtbnVtYmVyLW9mLWFyZ3VtZW50cy0yNTMwIj52YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIj5WYXJpYWRpYyBNYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1MZW5ndGguaHRtbCNpbmRleC12YXJpYWJsZV8wMDJkbGVuZ3RoLWFycmF5LXNjb3BlLTI1MjYiPnZhcmlhYmxlLWxlbmd0aCBhcnJheSBzY29wZTwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUxlbmd0aC5odG1sI1ZhcmlhYmxlLUxlbmd0aCI+VmFyaWFibGUgTGVuZ3RoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtTGVuZ3RoLmh0bWwjaW5kZXgtdmFyaWFibGVfMDAyZGxlbmd0aC1hcnJheXMtMjUyMiI+dmFyaWFibGUtbGVuZ3RoIGFycmF5czwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUxlbmd0aC5odG1sI1ZhcmlhYmxlLUxlbmd0aCI+VmFyaWFibGUgTGVuZ3RoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXhwbGljaXQtUmVnLVZhcnMuaHRtbCNpbmRleC12YXJpYWJsZXMtaW4tc3BlY2lmaWVkLXJlZ2lzdGVycy0yODY1Ij52YXJpYWJsZXMgaW4gc3BlY2lmaWVkIHJlZ2lzdGVyczwvYT46IDxhIGhyZWY9IkV4cGxpY2l0LVJlZy1WYXJzLmh0bWwjRXhwbGljaXQtUmVnLVZhcnMiPkV4cGxpY2l0IFJlZyBWYXJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVHlwZW9mLmh0bWwjaW5kZXgtdmFyaWFibGVzXzAwMmMtbG9jYWxfMDAyYy1pbi1tYWNyb3MtMjQyOCI+dmFyaWFibGVzLCBsb2NhbCwgaW4gbWFjcm9zPC9hPjogPGEgaHJlZj0iVHlwZW9mLmh0bWwjVHlwZW9mIj5UeXBlb2Y8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWRpYy1NYWNyb3MuaHRtbCNpbmRleC12YXJpYWRpYy1tYWNyb3MtMjUzMyI+dmFyaWFkaWMgbWFjcm9zPC9hPjogPGEgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIj5WYXJpYWRpYyBNYWNyb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWQVgtT3B0aW9ucy5odG1sI2luZGV4LVZBWC1vcHRpb25zLTIyOTAiPlZBWCBvcHRpb25zPC9hPjogPGEgaHJlZj0iVkFYLU9wdGlvbnMuaHRtbCNWQVgtT3B0aW9ucyI+VkFYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J2ZXJzaW9uXzAwNWZpZF8wMDdkLWF0dHJpYnV0ZS0yNzM3Ij48Y29kZT52ZXJzaW9uX2lkPC9jb2RlPiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdmZwcmludGYtMzMzMCI+PGNvZGU+dmZwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXZmc2NhbmYtMzMzMSI+PGNvZGU+dmZzY2FuZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnZpc2liaWxpdHlfMDA3ZC1hdHRyaWJ1dGUtMjczOCI+PGNvZGU+dmlzaWJpbGl0eTwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1MZW5ndGguaHRtbCNpbmRleC1WTEFzLTI1MjQiPlZMQXM8L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1MZW5ndGguaHRtbCNWYXJpYWJsZS1MZW5ndGgiPlZhcmlhYmxlIExlbmd0aDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnZsaXdfMDA3ZC1hdHRyaWJ1dGUtMjczOSI+PGNvZGU+dmxpdzwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb2ludGVyLUFyaXRoLmh0bWwjaW5kZXgtdm9pZC1wb2ludGVyc18wMDJjLWFyaXRobWV0aWMtMjUzOSI+dm9pZCBwb2ludGVycywgYXJpdGhtZXRpYzwvYT46IDxhIGhyZWY9IlBvaW50ZXItQXJpdGguaHRtbCNQb2ludGVyLUFyaXRoIj5Qb2ludGVyIEFyaXRoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG9pbnRlci1Bcml0aC5odG1sI2luZGV4LXZvaWRfMDAyYy1zaXplLW9mLXBvaW50ZXItdG8tMjU0MCI+dm9pZCwgc2l6ZSBvZiBwb2ludGVyIHRvPC9hPjogPGEgaHJlZj0iUG9pbnRlci1Bcml0aC5odG1sI1BvaW50ZXItQXJpdGgiPlBvaW50ZXIgQXJpdGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1Wb2xhdGlsZXMuaHRtbCNpbmRleC12b2xhdGlsZS1hY2Nlc3MtMzQ5NyI+dm9sYXRpbGUgYWNjZXNzPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItVm9sYXRpbGVzLmh0bWwjQ18wMDJiXzAwMmItVm9sYXRpbGVzIj5DKysgVm9sYXRpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVm9sYXRpbGVzLmh0bWwjaW5kZXgtdm9sYXRpbGUtYWNjZXNzLTI4MDMiPnZvbGF0aWxlIGFjY2VzczwvYT46IDxhIGhyZWY9IlZvbGF0aWxlcy5odG1sI1ZvbGF0aWxlcyI+Vm9sYXRpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidm9sYXRpbGVfMDA3ZC1hcHBsaWVkLXRvLWZ1bmN0aW9uLTI1NzEiPjxjb2RlPnZvbGF0aWxlPC9jb2RlPiBhcHBsaWVkIHRvIGZ1bmN0aW9uPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1Wb2xhdGlsZXMuaHRtbCNpbmRleC12b2xhdGlsZS1yZWFkLTM0OTUiPnZvbGF0aWxlIHJlYWQ8L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1Wb2xhdGlsZXMuaHRtbCNDXzAwMmJfMDAyYi1Wb2xhdGlsZXMiPkMrKyBWb2xhdGlsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWb2xhdGlsZXMuaHRtbCNpbmRleC12b2xhdGlsZS1yZWFkLTI4MDEiPnZvbGF0aWxlIHJlYWQ8L2E+OiA8YSBocmVmPSJWb2xhdGlsZXMuaHRtbCNWb2xhdGlsZXMiPlZvbGF0aWxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLVZvbGF0aWxlcy5odG1sI2luZGV4LXZvbGF0aWxlLXdyaXRlLTM0OTYiPnZvbGF0aWxlIHdyaXRlPC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItVm9sYXRpbGVzLmh0bWwjQ18wMDJiXzAwMmItVm9sYXRpbGVzIj5DKysgVm9sYXRpbGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVm9sYXRpbGVzLmh0bWwjaW5kZXgtdm9sYXRpbGUtd3JpdGUtMjgwMiI+dm9sYXRpbGUgd3JpdGU8L2E+OiA8YSBocmVmPSJWb2xhdGlsZXMuaHRtbCNWb2xhdGlsZXMiPlZvbGF0aWxlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdnByaW50Zi0zMzMyIj48Y29kZT52cHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC12c2NhbmYtMzMzMyI+PGNvZGU+dnNjYW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC12c25wcmludGYtMzMzNCI+PGNvZGU+dnNucHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC12c3ByaW50Zi0zMzM1Ij48Y29kZT52c3ByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtdnNzY2FuZi0zMzM2Ij48Y29kZT52c3NjYW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFndWUtTGlua2FnZS5odG1sI2luZGV4LXZ0YWJsZS0zNTAyIj52dGFibGU8L2E+OiA8YSBocmVmPSJWYWd1ZS1MaW5rYWdlLmh0bWwjVmFndWUtTGlua2FnZSI+VmFndWUgTGlua2FnZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZ4V29ya3MtT3B0aW9ucy5odG1sI2luZGV4LVZ4V29ya3MtT3B0aW9ucy0yMjk4Ij5WeFdvcmtzIE9wdGlvbnM8L2E+OiA8YSBocmVmPSJWeFdvcmtzLU9wdGlvbnMuaHRtbCNWeFdvcmtzLU9wdGlvbnMiPlZ4V29ya3MgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZsb2F0aW5nLVR5cGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXXzAwN2QtZmxvYXRpbmctcG9pbnQtc3VmZml4LTI0NTQiPjxjb2RlPlc8L2NvZGU+IGZsb2F0aW5nIHBvaW50IHN1ZmZpeDwvYT46IDxhIGhyZWY9IkZsb2F0aW5nLVR5cGVzLmh0bWwjRmxvYXRpbmctVHlwZXMiPkZsb2F0aW5nIFR5cGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmxvYXRpbmctVHlwZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndfMDA3ZC1mbG9hdGluZy1wb2ludC1zdWZmaXgtMjQ1MiI+PGNvZGU+dzwvY29kZT4gZmxvYXRpbmcgcG9pbnQgc3VmZml4PC9hPjogPGEgaHJlZj0iRmxvYXRpbmctVHlwZXMuaHRtbCNGbG9hdGluZy1UeXBlcyI+RmxvYXRpbmcgVHlwZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3YXJuXzAwNWZ1bnVzZWRfMDA1ZnJlc3VsdF8wMDdkLWF0dHJpYnV0ZS0yNzQwIj48Y29kZT53YXJuX3VudXNlZF9yZXN1bHQ8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZy1mb3ItY29tcGFyaXNvbi1vZi1zaWduZWQtYW5kLXVuc2lnbmVkLXZhbHVlcy00MzkiPndhcm5pbmcgZm9yIGNvbXBhcmlzb24gb2Ygc2lnbmVkIGFuZCB1bnNpZ25lZCB2YWx1ZXM8L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmctZm9yLW92ZXJsb2FkZWQtdmlydHVhbC1mdW5jdGlvbi0yMDEiPndhcm5pbmcgZm9yIG92ZXJsb2FkZWQgdmlydHVhbCBmdW5jdGlvbjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmctZm9yLXJlb3JkZXJpbmctb2YtbWVtYmVyLWluaXRpYWxpemVycy0xODciPndhcm5pbmcgZm9yIHJlb3JkZXJpbmcgb2YgbWVtYmVyIGluaXRpYWxpemVyczwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmctZm9yLXVua25vd24tcHJhZ21hcy0zNTEiPndhcm5pbmcgZm9yIHVua25vd24gcHJhZ21hczwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdid2FybmluZ18wMDdkLWZ1bmN0aW9uLWF0dHJpYnV0ZS0yNTkwIj48Y29kZT53YXJuaW5nPC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGU8L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmctbWVzc2FnZXMtMjQ0Ij53YXJuaW5nIG1lc3NhZ2VzPC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC13YXJuaW5ncy1mcm9tLXN5c3RlbS1oZWFkZXJzLTM4MSI+d2FybmluZ3MgZnJvbSBzeXN0ZW0gaGVhZGVyczwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZ3MtYW5kLUVycm9ycy5odG1sI2luZGV4LXdhcm5pbmdzLXZzLWVycm9ycy0zNTg4Ij53YXJuaW5ncyB2cyBlcnJvcnM8L2E+OiA8YSBocmVmPSJXYXJuaW5ncy1hbmQtRXJyb3JzLmh0bWwjV2FybmluZ3MtYW5kLUVycm9ycyI+V2FybmluZ3MgYW5kIEVycm9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YndlYWtfMDA3ZC1hdHRyaWJ1dGUtMjc0MSI+PGNvZGU+d2VhazwvY29kZT4gYXR0cmlidXRlPC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J3ZWFrcmVmXzAwN2QtYXR0cmlidXRlLTI3NDIiPjxjb2RlPndlYWtyZWY8L2NvZGU+IGF0dHJpYnV0ZTwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNpbmRleC13aGl0ZXNwYWNlLTM1NTMiPndoaXRlc3BhY2U8L2E+OiA8YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj5JbmNvbXBhdGliaWxpdGllczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI2luZGV4LWdfdF8wMDQwc2FtcF8wMDdiWF8wMDdkLWluLWNvbnN0cmFpbnQtMjgzMyI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5YPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQ8L2E+OiA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LVgzXzAwMmUxNTlfMDAyZDE5ODktMjgiPlgzLjE1OS0xOTg5PC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ4ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC14ODZfMDAyZDY0LW9wdGlvbnMtMjMwNSI+eDg2LTY0IG9wdGlvbnM8L2E+OiA8YSBocmVmPSJ4ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCN4ODZfMDAyZDY0LU9wdGlvbnMiPng4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgteDg2XzAwMmQ2NC1PcHRpb25zLTE0MzgiPng4Ni02NCBPcHRpb25zPC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlhzdG9ybXkxNi1PcHRpb25zLmh0bWwjaW5kZXgtWHN0b3JteTE2LU9wdGlvbnMtMjMwNiI+WHN0b3JteTE2IE9wdGlvbnM8L2E+OiA8YSBocmVmPSJYc3Rvcm15MTYtT3B0aW9ucy5odG1sI1hzdG9ybXkxNi1PcHRpb25zIj5Yc3Rvcm15MTYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtWHRlbnNhLU9wdGlvbnMtMjMwOCI+WHRlbnNhIE9wdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgteTAtMzMzNyI+PGNvZGU+eTA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXkwZi0zMzM4Ij48Y29kZT55MGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXkwbC0zMzM5Ij48Y29kZT55MGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI2luZGV4LXkxLTMzNDAiPjxjb2RlPnkxPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC15MWYtMzM0MSI+PGNvZGU+eTFmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC15MWwtMzM0MiI+PGNvZGU+eTFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC15bi0zMzQzIj48Y29kZT55bjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgteW5mLTMzNDQiPjxjb2RlPnluZjwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgteW5sLTMzNDUiPjxjb2RlPnlubDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilplcm8tTGVuZ3RoLmh0bWwjaW5kZXgtemVyb18wMDJkbGVuZ3RoLWFycmF5cy0yNTE3Ij56ZXJvLWxlbmd0aCBhcnJheXM8L2E+OiA8YSBocmVmPSJaZXJvLUxlbmd0aC5odG1sI1plcm8tTGVuZ3RoIj5aZXJvIExlbmd0aDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVtcHR5LVN0cnVjdHVyZXMuaHRtbCNpbmRleC16ZXJvXzAwMmRzaXplLXN0cnVjdHVyZXMtMjUyMSI+emVyby1zaXplIHN0cnVjdHVyZXM8L2E+OiA8YSBocmVmPSJFbXB0eS1TdHJ1Y3R1cmVzLmh0bWwjRW1wdHktU3RydWN0dXJlcyI+RW1wdHkgU3RydWN0dXJlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LXpTZXJpZXMtb3B0aW9ucy0yMzIyIj56U2VyaWVzIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJ6U2VyaWVzLU9wdGlvbnMuaHRtbCN6U2VyaWVzLU9wdGlvbnMiPnpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorIDwvdWw+PCEtLSAgLS0+Cis8IS0tIEVwaWxvZ3VlIC0tPgorPCEtLSAgLS0+Cis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xNMzItT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9MTTMyLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDUyYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9MTTMyLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDc0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MTTMyIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyIgdGl0bGU9IklBLTY0IE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNMzJDLU9wdGlvbnMuaHRtbCNNMzJDLU9wdGlvbnMiIHRpdGxlPSJNMzJDIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTE0zMi1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik0zMkMtT3B0aW9ucy5odG1sI00zMkMtT3B0aW9ucyI+TTMyQyBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4xOSBMTTMyIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1MTTMyLW9wdGlvbnMtMTU4MyI+PC9hPgorVGhlc2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW08L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgTGF0dGljZU1pY28zMiBhcmNoaXRlY3R1cmU6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tYmFycmVsLXNoaWZ0LWVuYWJsZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1iYXJyZWxfMDAyZHNoaWZ0XzAwMmRlbmFibGVkLTE1ODQiPjwvYT5FbmFibGUgYmFycmVsLXNoaWZ0IGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZGl2aWRlLWVuYWJsZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1kaXZpZGVfMDAyZGVuYWJsZWQtMTU4NSI+PC9hPkVuYWJsZSBkaXZpZGUgYW5kIG1vZHVsdXMgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tdWx0aXBseS1lbmFibGVkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdWx0aXBseV8wMDJkZW5hYmxlZC0xNTg2Ij48L2E+RW5hYmxlIG11bHRpcGx5IGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2lnbi1leHRlbmQtZW5hYmxlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNpZ25fMDAyZGV4dGVuZF8wMDJkZW5hYmxlZC0xNTg3Ij48L2E+RW5hYmxlIHNpZ24gZXh0ZW5kIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdXNlci1lbmFibGVkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdXNlcl8wMDJkZW5hYmxlZC0xNTg4Ij48L2E+RW5hYmxlIHVzZXItZGVmaW5lZCBpbnN0cnVjdGlvbnMuCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9MYWJlbHMtYXMtVmFsdWVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xhYmVscy1hcy1WYWx1ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzA3YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9MYWJlbHMtYXMtVmFsdWVzLmh0bWwKQEAgLTAsMCArMSwxMjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxhYmVscyBhcyBWYWx1ZXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTG9jYWwtTGFiZWxzLmh0bWwjTG9jYWwtTGFiZWxzIiB0aXRsZT0iTG9jYWwgTGFiZWxzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTmVzdGVkLUZ1bmN0aW9ucy5odG1sI05lc3RlZC1GdW5jdGlvbnMiIHRpdGxlPSJOZXN0ZWQgRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxhYmVscy1hcy1WYWx1ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTmVzdGVkLUZ1bmN0aW9ucy5odG1sI05lc3RlZC1GdW5jdGlvbnMiPk5lc3RlZCBGdW5jdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMb2NhbC1MYWJlbHMuaHRtbCNMb2NhbC1MYWJlbHMiPkxvY2FsIExhYmVsczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4zIExhYmVscyBhcyBWYWx1ZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1sYWJlbHMtYXMtdmFsdWVzLTI0MDgiPjwvYT48YSBuYW1lPSJpbmRleC1jb21wdXRlZC1nb3Rvcy0yNDA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ290by13aXRoLWNvbXB1dGVkLWxhYmVsLTI0MTAiPjwvYT48YSBuYW1lPSJpbmRleC1hZGRyZXNzLW9mLWEtbGFiZWwtMjQxMSI+PC9hPgorWW91IGNhbiBnZXQgdGhlIGFkZHJlc3Mgb2YgYSBsYWJlbCBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uCisob3IgYSBjb250YWluaW5nIGZ1bmN0aW9uKSB3aXRoIHRoZSB1bmFyeSBvcGVyYXRvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZhbXA7JmFtcDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUKK3ZhbHVlIGhhcyB0eXBlIDxjb2RlPnZvaWQgKjwvY29kZT4uICBUaGlzIHZhbHVlIGlzIGEgY29uc3RhbnQgYW5kIGNhbiBiZSB1c2VkCit3aGVyZXZlciBhIGNvbnN0YW50IG9mIHRoYXQgdHlwZSBpcyB2YWxpZC4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdm9pZCAqcHRyOworICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPi4uLjwvc3Bhbj4gKi8KKyAgICAgcHRyID0gJmFtcDsmYW1wO2ZvbzsKKzwvcHJlPgorIDxwPlRvIHVzZSB0aGVzZSB2YWx1ZXMsIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8ganVtcCB0byBvbmUuICBUaGlzIGlzIGRvbmUKK3dpdGggdGhlIGNvbXB1dGVkIGdvdG8gc3RhdGVtZW50PGEgcmVsPSJmb290bm90ZSIgaHJlZj0iI2ZuLTEiIG5hbWU9ImZuZC0xIj48c3VwPjE8L3N1cD48L2E+LCA8Y29kZT5nb3RvICo8L2NvZGU+PHZhcj5leHA8L3Zhcj48Y29kZT47PC9jb2RlPi4gIEZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZ290byAqcHRyOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5BbnkgZXhwcmVzc2lvbiBvZiB0eXBlIDxjb2RlPnZvaWQgKjwvY29kZT4gaXMgYWxsb3dlZC4KKworIDxwPk9uZSB3YXkgb2YgdXNpbmcgdGhlc2UgY29uc3RhbnRzIGlzIGluIGluaXRpYWxpemluZyBhIHN0YXRpYyBhcnJheSB0aGF0CitzZXJ2ZXMgYXMgYSBqdW1wIHRhYmxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RhdGljIHZvaWQgKmFycmF5W10gPSB7ICZhbXA7JmFtcDtmb28sICZhbXA7JmFtcDtiYXIsICZhbXA7JmFtcDtoYWNrIH07Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZW4geW91IGNhbiBzZWxlY3QgYSBsYWJlbCB3aXRoIGluZGV4aW5nLCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBnb3RvICphcnJheVtpXTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+Tm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgY2hlY2sgd2hldGhlciB0aGUgc3Vic2NyaXB0IGlzIGluIGJvdW5kcyZtZGFzaDthcnJheQoraW5kZXhpbmcgaW4gQyBuZXZlciBkb2VzIHRoYXQuCisKKyA8cD5TdWNoIGFuIGFycmF5IG9mIGxhYmVsIHZhbHVlcyBzZXJ2ZXMgYSBwdXJwb3NlIG11Y2ggbGlrZSB0aGF0IG9mIHRoZQorPGNvZGU+c3dpdGNoPC9jb2RlPiBzdGF0ZW1lbnQuICBUaGUgPGNvZGU+c3dpdGNoPC9jb2RlPiBzdGF0ZW1lbnQgaXMgY2xlYW5lciwgc28KK3VzZSB0aGF0IHJhdGhlciB0aGFuIGFuIGFycmF5IHVubGVzcyB0aGUgcHJvYmxlbSBkb2VzIG5vdCBmaXQgYQorPGNvZGU+c3dpdGNoPC9jb2RlPiBzdGF0ZW1lbnQgdmVyeSB3ZWxsLgorCisgPHA+QW5vdGhlciB1c2Ugb2YgbGFiZWwgdmFsdWVzIGlzIGluIGFuIGludGVycHJldGVyIGZvciB0aHJlYWRlZCBjb2RlLiAKK1RoZSBsYWJlbHMgd2l0aGluIHRoZSBpbnRlcnByZXRlciBmdW5jdGlvbiBjYW4gYmUgc3RvcmVkIGluIHRoZQordGhyZWFkZWQgY29kZSBmb3Igc3VwZXItZmFzdCBkaXNwYXRjaGluZy4KKworIDxwPllvdSBtYXkgbm90IHVzZSB0aGlzIG1lY2hhbmlzbSB0byBqdW1wIHRvIGNvZGUgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uIAorSWYgeW91IGRvIHRoYXQsIHRvdGFsbHkgdW5wcmVkaWN0YWJsZSB0aGluZ3MgaGFwcGVuLiAgVGhlIGJlc3Qgd2F5IHRvCithdm9pZCB0aGlzIGlzIHRvIHN0b3JlIHRoZSBsYWJlbCBhZGRyZXNzIG9ubHkgaW4gYXV0b21hdGljIHZhcmlhYmxlcyBhbmQKK25ldmVyIHBhc3MgaXQgYXMgYW4gYXJndW1lbnQuCisKKyA8cD5BbiBhbHRlcm5hdGUgd2F5IHRvIHdyaXRlIHRoZSBhYm92ZSBleGFtcGxlIGlzCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdGF0aWMgY29uc3QgaW50IGFycmF5W10gPSB7ICZhbXA7JmFtcDtmb28gLSAmYW1wOyZhbXA7Zm9vLCAmYW1wOyZhbXA7YmFyIC0gJmFtcDsmYW1wO2ZvbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1wOyZhbXA7aGFjayAtICZhbXA7JmFtcDtmb28gfTsKKyAgICAgZ290byAqKCZhbXA7JmFtcDtmb28gKyBhcnJheVtpXSk7Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgaXMgbW9yZSBmcmllbmRseSB0byBjb2RlIGxpdmluZyBpbiBzaGFyZWQgbGlicmFyaWVzLCBhcyBpdCByZWR1Y2VzCit0aGUgbnVtYmVyIG9mIGR5bmFtaWMgcmVsb2NhdGlvbnMgdGhhdCBhcmUgbmVlZGVkLCBhbmQgYnkgY29uc2VxdWVuY2UsCithbGxvd3MgdGhlIGRhdGEgdG8gYmUgcmVhZC1vbmx5LgorCisgPHA+VGhlIDxjb2RlPiZhbXA7JmFtcDtmb288L2NvZGU+IGV4cHJlc3Npb25zIGZvciB0aGUgc2FtZSBsYWJlbCBtaWdodCBoYXZlIGRpZmZlcmVudAordmFsdWVzIGlmIHRoZSBjb250YWluaW5nIGZ1bmN0aW9uIGlzIGlubGluZWQgb3IgY2xvbmVkLiAgSWYgYSBwcm9ncmFtCityZWxpZXMgb24gdGhlbSBiZWluZyBhbHdheXMgdGhlIHNhbWUsCis8Y29kZT5fX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18sX19ub2Nsb25lX18pKTwvY29kZT4gc2hvdWxkIGJlIHVzZWQgdG8KK3ByZXZlbnQgaW5saW5pbmcgYW5kIGNsb25pbmcuICBJZiA8Y29kZT4mYW1wOyZhbXA7Zm9vPC9jb2RlPiBpcyB1c2VkIGluIGEgc3RhdGljCit2YXJpYWJsZSBpbml0aWFsaXplciwgaW5saW5pbmcgYW5kIGNsb25pbmcgaXMgZm9yYmlkZGVuLgorCisgPGRpdiBjbGFzcz0iZm9vdG5vdGUiPgorPGhyPgorPGg0PkZvb3Rub3RlczwvaDQ+PHAgY2xhc3M9ImZvb3Rub3RlIj48c21hbGw+WzxhIG5hbWU9ImZuLTEiIGhyZWY9IiNmbmQtMSI+MTwvYT5dPC9zbWFsbD4gVGhlIGFuYWxvZ291cyBmZWF0dXJlIGluCitGb3J0cmFuIGlzIGNhbGxlZCBhbiBhc3NpZ25lZCBnb3RvLCBidXQgdGhhdCBuYW1lIHNlZW1zIGluYXBwcm9wcmlhdGUgaW4KK0MsIHdoZXJlIG9uZSBjYW4gZG8gbW9yZSB0aGFuIHNpbXBseSBzdG9yZSBsYWJlbCBhZGRyZXNzZXMgaW4gbGFiZWwKK3ZhcmlhYmxlcy48L3A+CisKKyA8aHI+PC9kaXY+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZmU1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDk3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MYW5ndWFnZSBJbmRlcGVuZGVudCBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyIgdGl0bGU9Ikludm9raW5nIEdDQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIiB0aXRsZT0iT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIiB0aXRsZT0iV2FybmluZyBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikxhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjcgT3B0aW9ucyB0byBDb250cm9sIERpYWdub3N0aWMgTWVzc2FnZXMgRm9ybWF0dGluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnMtdG8tY29udHJvbC1kaWFnbm9zdGljcy1mb3JtYXR0aW5nLTIzNCI+PC9hPjxhIG5hbWU9ImluZGV4LWRpYWdub3N0aWMtbWVzc2FnZXMtMjM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWVzc2FnZS1mb3JtYXR0aW5nLTIzNiI+PC9hPgorVHJhZGl0aW9uYWxseSwgZGlhZ25vc3RpYyBtZXNzYWdlcyBoYXZlIGJlZW4gZm9ybWF0dGVkIGlycmVzcGVjdGl2ZSBvZgordGhlIG91dHB1dCBkZXZpY2UncyBhc3BlY3QgKGUuZy4gaXRzIHdpZHRoLCA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+KS4gIFlvdSBjYW4gdXNlIHRoZQorb3B0aW9ucyBkZXNjcmliZWQgYmVsb3cKK3RvIGNvbnRyb2wgdGhlIGZvcm1hdHRpbmcgYWxnb3JpdGhtIGZvciBkaWFnbm9zdGljIG1lc3NhZ2VzLAorZS5nLiBob3cgbWFueSBjaGFyYWN0ZXJzIHBlciBsaW5lLCBob3cgb2Z0ZW4gc291cmNlIGxvY2F0aW9uCitpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmVwb3J0ZWQuICBOb3RlIHRoYXQgc29tZSBsYW5ndWFnZSBmcm9udCBlbmRzIG1heSBub3QKK2hvbm9yIHRoZXNlIG9wdGlvbnMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1mbWVzc2FnZS1sZW5ndGg9PC9jb2RlPjx2YXI+bjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mbWVzc2FnZV8wMDJkbGVuZ3RoLTIzNyI+PC9hPlRyeSB0byBmb3JtYXQgZXJyb3IgbWVzc2FnZXMgc28gdGhhdCB0aGV5IGZpdCBvbiBsaW5lcyBvZiBhYm91dCA8dmFyPm48L3Zhcj4KK2NoYXJhY3RlcnMuICBUaGUgZGVmYXVsdCBpcyA3MiBjaGFyYWN0ZXJzIGZvciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZysrPC9zcGFuPjwvc2FtcD4gYW5kIDAgZm9yIHRoZSByZXN0IG9mCit0aGUgZnJvbnQgZW5kcyBzdXBwb3J0ZWQgYnkgR0NDLiAgSWYgPHZhcj5uPC92YXI+IGlzIHplcm8sIHRoZW4gbm8KK2xpbmUtd3JhcHBpbmcgaXMgZG9uZTsgZWFjaCBlcnJvciBtZXNzYWdlIGFwcGVhcnMgb24gYSBzaW5nbGUKK2xpbmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRpYWdub3N0aWNzLXNob3ctbG9jYXRpb249b25jZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmRpYWdub3N0aWNzXzAwMmRzaG93XzAwMmRsb2NhdGlvbi0yMzgiPjwvYT5Pbmx5IG1lYW5pbmdmdWwgaW4gbGluZS13cmFwcGluZyBtb2RlLiAgSW5zdHJ1Y3RzIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2VzCityZXBvcnRlciB0byBlbWl0IHNvdXJjZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiA8ZW0+b25jZTwvZW0+OyB0aGF0IGlzLCBpbgorY2FzZSB0aGUgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBmaXQgb24gYSBzaW5nbGUgcGh5c2ljYWwgbGluZSBhbmQgaGFzIHRvCitiZSB3cmFwcGVkLCB0aGUgc291cmNlIGxvY2F0aW9uIHdvbid0IGJlIGVtaXR0ZWQgKGFzIHByZWZpeCkgYWdhaW4sCitvdmVyIGFuZCBvdmVyLCBpbiBzdWJzZXF1ZW50IGNvbnRpbnVhdGlvbiBsaW5lcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK2JlaGF2aW9yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkaWFnbm9zdGljcy1zaG93LWxvY2F0aW9uPWV2ZXJ5LWxpbmU8L2NvZGU+PGRkPk9ubHkgbWVhbmluZ2Z1bCBpbiBsaW5lLXdyYXBwaW5nIG1vZGUuICBJbnN0cnVjdHMgdGhlIGRpYWdub3N0aWMKK21lc3NhZ2VzIHJlcG9ydGVyIHRvIGVtaXQgdGhlIHNhbWUgc291cmNlIGxvY2F0aW9uIGluZm9ybWF0aW9uIChhcworcHJlZml4KSBmb3IgcGh5c2ljYWwgbGluZXMgdGhhdCByZXN1bHQgZnJvbSB0aGUgcHJvY2VzcyBvZiBicmVha2luZworYSBtZXNzYWdlIHdoaWNoIGlzIHRvbyBsb25nIHRvIGZpdCBvbiBhIHNpbmdsZSBsaW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1kaWFnbm9zdGljcy1zaG93LW9wdGlvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRkaWFnbm9zdGljc18wMDJkc2hvd18wMDJkb3B0aW9uLTIzOSI+PC9hPjxhIG5hbWU9ImluZGV4LWZkaWFnbm9zdGljc18wMDJkc2hvd18wMDJkb3B0aW9uLTI0MCI+PC9hPkJ5IGRlZmF1bHQsIGVhY2ggZGlhZ25vc3RpYyBlbWl0dGVkIGluY2x1ZGVzIHRleHQgaW5kaWNhdGluZyB0aGUKK2NvbW1hbmQtbGluZSBvcHRpb24gdGhhdCBkaXJlY3RseSBjb250cm9scyB0aGUgZGlhZ25vc3RpYyAoaWYgc3VjaCBhbgorb3B0aW9uIGlzIGtub3duIHRvIHRoZSBkaWFnbm9zdGljIG1hY2hpbmVyeSkuICBTcGVjaWZ5aW5nIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1kaWFnbm9zdGljcy1zaG93LW9wdGlvbjwvc3Bhbj48L3NhbXA+IGZsYWcgc3VwcHJlc3NlcyB0aGF0IGJlaGF2aW9yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1kaWFnbm9zdGljcy1zaG93LWNhcmV0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGRpYWdub3N0aWNzXzAwMmRzaG93XzAwMmRjYXJldC0yNDEiPjwvYT48YSBuYW1lPSJpbmRleC1mZGlhZ25vc3RpY3NfMDAyZHNob3dfMDAyZGNhcmV0LTI0MiI+PC9hPkJ5IGRlZmF1bHQsIGVhY2ggZGlhZ25vc3RpYyBlbWl0dGVkIGluY2x1ZGVzIHRoZSBvcmlnaW5hbCBzb3VyY2UgbGluZQorYW5kIGEgY2FyZXQgJ14nIGluZGljYXRpbmcgdGhlIGNvbHVtbi4gIFRoaXMgb3B0aW9uIHN1cHByZXNzZXMgdGhpcworaW5mb3JtYXRpb24uCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9MZWdhY3ktdHlwZS1lbmNvZGluZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9MZWdhY3ktdHlwZS1lbmNvZGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTE2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xlZ2FjeS10eXBlLWVuY29kaW5nLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGVnYWN5IHR5cGUgZW5jb2RpbmcgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVHlwZS1lbmNvZGluZy5odG1sI1R5cGUtZW5jb2RpbmciIHRpdGxlPSJUeXBlIGVuY29kaW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iXzAwNDBfMDA0MGVuY29kZS5odG1sI2dfdF8wMDQwXzAwNDBlbmNvZGUiIHRpdGxlPSJAQGVuY29kZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMZWdhY3ktdHlwZS1lbmNvZGluZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJfMDA0MGVuY29kZS5odG1sI2dfdF8wMDQwZW5jb2RlIj5AZW5jb2RlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVHlwZS1lbmNvZGluZy5odG1sI1R5cGUtZW5jb2RpbmciPlR5cGUgZW5jb2Rpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj44LjMuMSBMZWdhY3kgdHlwZSBlbmNvZGluZzwvaDQ+CisKKzxwPlVuZm9ydHVuYXRlbHksIGhpc3RvcmljYWxseSBHQ0MgdXNlZCB0byBoYXZlIGEgbnVtYmVyIG9mIGJ1Z3MgaW4gaXRzCitlbmNvZGluZyBjb2RlLiAgVGhlIE5lWFQgcnVudGltZSBleHBlY3RzIEdDQyB0byBlbWl0IHR5cGUgZW5jb2RpbmdzIGluCit0aGlzIGhpc3RvcmljYWwgZm9ybWF0IChjb21wYXRpYmxlIHdpdGggR0NDLTMuMyksIHNvIHdoZW4gdXNpbmcgdGhlCitOZVhUIHJ1bnRpbWUsIEdDQyB3aWxsIGludHJvZHVjZSBvbiBwdXJwb3NlIGEgbnVtYmVyIG9mIGluY29ycmVjdAorZW5jb2RpbmdzOgorCisgICAgIDx1bD4KKzxsaT50aGUgcmVhZC1vbmx5IHF1YWxpZmllciBvZiB0aGUgcG9pbnRlZSBnZXRzIGVtaXR0ZWQgYmVmb3JlIHRoZSAnXicuIAorVGhlIHJlYWQtb25seSBxdWFsaWZpZXIgb2YgdGhlIHBvaW50ZXIgaXRzZWxmIGdldHMgaWdub3JlZCwgdW5sZXNzIGl0CitpcyBhIHR5cGVkZWYuICBBbHNvLCB0aGUgJ3InIGlzIG9ubHkgZW1pdHRlZCBmb3IgdGhlIG91dGVybW9zdCB0eXBlLgorCisgICAgIDxsaT4zMi1iaXQgbG9uZ3MgYXJlIGVuY29kZWQgYXMgJ2wnIG9yICdMJywgYnV0IG5vdCBhbHdheXMuICBGb3IgdHlwZWRlZnMsCit0aGUgY29tcGlsZXIgdXNlcyAnaScgb3IgJ0knIGluc3RlYWQgaWYgZW5jb2RpbmcgYSBzdHJ1Y3QgZmllbGQgb3IgYQorcG9pbnRlci4KKworICAgICA8bGk+PGNvZGU+ZW51bTwvY29kZT5zIGFyZSBhbHdheXMgZW5jb2RlZCBhcyAnaScgKGludCkgZXZlbiBpZiB0aGV5IGFyZSBhY3R1YWxseQordW5zaWduZWQgb3IgbG9uZy4KKworIDwvdWw+CisKKyA8cD5JbiBhZGRpdGlvbiB0byB0aGF0LCB0aGUgTmVYVCBydW50aW1lIHVzZXMgYSBkaWZmZXJlbnQgZW5jb2RpbmcgZm9yCitiaXRmaWVsZHMuICBJdCBlbmNvZGVzIHRoZW0gYXMgPGNvZGU+YjwvY29kZT4gZm9sbG93ZWQgYnkgdGhlIHNpemUsIHdpdGhvdXQKK2EgYml0IG9mZnNldCBvciB0aGUgdW5kZXJseWluZyBmaWVsZCB0eXBlLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9MaWJyYXJ5LWZ1bmN0aW9ucy1pbXBsZW1lbnRhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9MaWJyYXJ5LWZ1bmN0aW9ucy1pbXBsZW1lbnRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNDNjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xpYnJhcnktZnVuY3Rpb25zLWltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGlicmFyeSBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iIHRpdGxlPSJDIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUHJlcHJvY2Vzc2luZy1kaXJlY3RpdmVzLWltcGxlbWVudGF0aW9uLmh0bWwjUHJlcHJvY2Vzc2luZy1kaXJlY3RpdmVzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iUHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzIGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQXJjaGl0ZWN0dXJlLWltcGxlbWVudGF0aW9uLmh0bWwjQXJjaGl0ZWN0dXJlLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iQXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxpYnJhcnktZnVuY3Rpb25zLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFyY2hpdGVjdHVyZS1pbXBsZW1lbnRhdGlvbi5odG1sI0FyY2hpdGVjdHVyZS1pbXBsZW1lbnRhdGlvbiI+QXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHJlcHJvY2Vzc2luZy1kaXJlY3RpdmVzLWltcGxlbWVudGF0aW9uLmh0bWwjUHJlcHJvY2Vzc2luZy1kaXJlY3RpdmVzLWltcGxlbWVudGF0aW9uIj5QcmVwcm9jZXNzaW5nIGRpcmVjdGl2ZXMgaW1wbGVtZW50YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiI+QyBJbXBsZW1lbnRhdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMTQgTGlicmFyeSBmdW5jdGlvbnM8L2gzPgorCis8cD5UaGUgYmVoYXZpb3Igb2YgbW9zdCBvZiB0aGVzZSBwb2ludHMgYXJlIGRlcGVuZGVudCBvbiB0aGUgaW1wbGVtZW50YXRpb24KK29mIHRoZSBDIGxpYnJhcnksIGFuZCBhcmUgbm90IGRlZmluZWQgYnkgR0NDIGl0c2VsZi4KKworICAgICA8dWw+Cis8bGk+PGNpdGU+VGhlIG51bGwgcG9pbnRlciBjb25zdGFudCB0byB3aGljaCB0aGUgbWFjcm8gPC9jaXRlPjxjb2RlPk5VTEw8L2NvZGU+PGNpdGU+IGV4cGFuZHMKKyhDOTAgNy4xLjYsIEM5OSA3LjE3KS48L2NpdGU+CisKKyAgICAgPHA+SW4gPGNvZGU+Jmx0O3N0ZGRlZi5oJmd0OzwvY29kZT4sIDxjb2RlPk5VTEw8L2NvZGU+IGV4cGFuZHMgdG8gPGNvZGU+KCh2b2lkICopMCk8L2NvZGU+LiAgR0NDCitkb2VzIG5vdCBwcm92aWRlIHRoZSBvdGhlciBoZWFkZXJzIHdoaWNoIGRlZmluZSA8Y29kZT5OVUxMPC9jb2RlPiBhbmQgc29tZQorbGlicmFyeSBpbXBsZW1lbnRhdGlvbnMgbWF5IHVzZSBvdGhlciBkZWZpbml0aW9ucyBpbiB0aG9zZSBoZWFkZXJzLgorCisgPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTGluay1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xpbmstT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5N2FiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xpbmstT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MaW5rIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIiB0aXRsZT0iSW52b2tpbmcgR0NDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQXNzZW1ibGVyLU9wdGlvbnMuaHRtbCNBc3NlbWJsZXItT3B0aW9ucyIgdGl0bGU9IkFzc2VtYmxlciBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyIgdGl0bGU9IkRpcmVjdG9yeSBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxpbmstT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFzc2VtYmxlci1PcHRpb25zLmh0bWwjQXNzZW1ibGVyLU9wdGlvbnMiPkFzc2VtYmxlciBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjEzIE9wdGlvbnMgZm9yIExpbmtpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1saW5rLW9wdGlvbnMtMTAyMyI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1saW5raW5nLTEwMjQiPjwvYT4KK1RoZXNlIG9wdGlvbnMgY29tZSBpbnRvIHBsYXkgd2hlbiB0aGUgY29tcGlsZXIgbGlua3Mgb2JqZWN0IGZpbGVzIGludG8KK2FuIGV4ZWN1dGFibGUgb3V0cHV0IGZpbGUuICBUaGV5IGFyZSBtZWFuaW5nbGVzcyBpZiB0aGUgY29tcGlsZXIgaXMKK25vdCBkb2luZyBhIGxpbmsgc3RlcC4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWZpbGUtbmFtZXMtMTAyNSI+PC9hPgorPGRsPjxkdD48dmFyPm9iamVjdC1maWxlLW5hbWU8L3Zhcj48ZGQ+QSBmaWxlIG5hbWUgdGhhdCBkb2VzIG5vdCBlbmQgaW4gYSBzcGVjaWFsIHJlY29nbml6ZWQgc3VmZml4IGlzCitjb25zaWRlcmVkIHRvIG5hbWUgYW4gb2JqZWN0IGZpbGUgb3IgbGlicmFyeS4gIChPYmplY3QgZmlsZXMgYXJlCitkaXN0aW5ndWlzaGVkIGZyb20gbGlicmFyaWVzIGJ5IHRoZSBsaW5rZXIgYWNjb3JkaW5nIHRvIHRoZSBmaWxlCitjb250ZW50cy4pICBJZiBsaW5raW5nIGlzIGRvbmUsIHRoZXNlIG9iamVjdCBmaWxlcyBhcmUgdXNlZCBhcyBpbnB1dAordG8gdGhlIGxpbmtlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1jPC9jb2RlPjxkdD48Y29kZT4tUzwvY29kZT48ZHQ+PGNvZGU+LUU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWMtMTAyNiI+PC9hPjxhIG5hbWU9ImluZGV4LVMtMTAyNyI+PC9hPjxhIG5hbWU9ImluZGV4LUUtMTAyOCI+PC9hPklmIGFueSBvZiB0aGVzZSBvcHRpb25zIGlzIHVzZWQsIHRoZW4gdGhlIGxpbmtlciBpcyBub3QgcnVuLCBhbmQKK29iamVjdCBmaWxlIG5hbWVzIHNob3VsZCBub3QgYmUgdXNlZCBhcyBhcmd1bWVudHMuICBTZWUgPGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LUxpYnJhcmllcy0xMDI5Ij48L2E+PGJyPjxkdD48Y29kZT4tbDwvY29kZT48dmFyPmxpYnJhcnk8L3Zhcj48ZHQ+PGNvZGU+LWwgPC9jb2RlPjx2YXI+bGlicmFyeTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1sLTEwMzAiPjwvYT5TZWFyY2ggdGhlIGxpYnJhcnkgbmFtZWQgPHZhcj5saWJyYXJ5PC92YXI+IHdoZW4gbGlua2luZy4gIChUaGUgc2Vjb25kCithbHRlcm5hdGl2ZSB3aXRoIHRoZSBsaWJyYXJ5IGFzIGEgc2VwYXJhdGUgYXJndW1lbnQgaXMgb25seSBmb3IKK1BPU0lYIGNvbXBsaWFuY2UgYW5kIGlzIG5vdCByZWNvbW1lbmRlZC4pCisKKyAgICAgPHA+SXQgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZXJlIGluIHRoZSBjb21tYW5kIHlvdSB3cml0ZSB0aGlzIG9wdGlvbjsgdGhlCitsaW5rZXIgc2VhcmNoZXMgYW5kIHByb2Nlc3NlcyBsaWJyYXJpZXMgYW5kIG9iamVjdCBmaWxlcyBpbiB0aGUgb3JkZXIgdGhleQorYXJlIHNwZWNpZmllZC4gIFRodXMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vLm8gLWx6IGJhci5vPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlYXJjaGVzIGxpYnJhcnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj56PC9zcGFuPjwvc2FtcD4mcnNxdW87CithZnRlciBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5mb28ubzwvc3Bhbj48L3NhbXA+IGJ1dCBiZWZvcmUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmJhci5vPC9zcGFuPjwvc2FtcD4uICBJZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmFyLm88L3NwYW4+PC9zYW1wPiByZWZlcnMKK3RvIGZ1bmN0aW9ucyBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPno8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRob3NlIGZ1bmN0aW9ucyBtYXkgbm90IGJlIGxvYWRlZC4KKworICAgICA8cD5UaGUgbGlua2VyIHNlYXJjaGVzIGEgc3RhbmRhcmQgbGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgdGhlIGxpYnJhcnksCit3aGljaCBpcyBhY3R1YWxseSBhIGZpbGUgbmFtZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYjwvc3Bhbj48dmFyPmxpYnJhcnk8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+LmE8L3NwYW4+PC9zYW1wPi4gIFRoZSBsaW5rZXIKK3RoZW4gdXNlcyB0aGlzIGZpbGUgYXMgaWYgaXQgaGFkIGJlZW4gc3BlY2lmaWVkIHByZWNpc2VseSBieSBuYW1lLgorCisgICAgIDxwPlRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBpbmNsdWRlIHNldmVyYWwgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzCitwbHVzIGFueSB0aGF0IHlvdSBzcGVjaWZ5IHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5Ob3JtYWxseSB0aGUgZmlsZXMgZm91bmQgdGhpcyB3YXkgYXJlIGxpYnJhcnkgZmlsZXMmbWRhc2g7YXJjaGl2ZSBmaWxlcword2hvc2UgbWVtYmVycyBhcmUgb2JqZWN0IGZpbGVzLiAgVGhlIGxpbmtlciBoYW5kbGVzIGFuIGFyY2hpdmUgZmlsZSBieQorc2Nhbm5pbmcgdGhyb3VnaCBpdCBmb3IgbWVtYmVycyB3aGljaCBkZWZpbmUgc3ltYm9scyB0aGF0IGhhdmUgc28gZmFyCitiZWVuIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLiAgQnV0IGlmIHRoZSBmaWxlIHRoYXQgaXMgZm91bmQgaXMgYW4KK29yZGluYXJ5IG9iamVjdCBmaWxlLCBpdCBpcyBsaW5rZWQgaW4gdGhlIHVzdWFsIGZhc2hpb24uICBUaGUgb25seQorZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nIGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFuZCBzcGVjaWZ5aW5nIGEgZmlsZSBuYW1lCitpcyB0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4gc3Vycm91bmRzIDx2YXI+bGlicmFyeTwvdmFyPiB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGliPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5hPC9zcGFuPjwvc2FtcD4mcnNxdW87CithbmQgc2VhcmNoZXMgc2V2ZXJhbCBkaXJlY3Rvcmllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1sb2JqYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbG9iamMtMTAzMSI+PC9hPllvdSBuZWVkIHRoaXMgc3BlY2lhbCBjYXNlIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpbiBvcmRlciB0bworbGluayBhbiBPYmplY3RpdmUtQyBvciBPYmplY3RpdmUtQysrIHByb2dyYW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm9zdGFydGZpbGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ub3N0YXJ0ZmlsZXMtMTAzMiI+PC9hPkRvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBzdGFydHVwIGZpbGVzIHdoZW4gbGlua2luZy4gCitUaGUgc3RhbmRhcmQgc3lzdGVtIGxpYnJhcmllcyBhcmUgdXNlZCBub3JtYWxseSwgdW5sZXNzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub3N0ZGxpYjwvc3Bhbj48L3NhbXA+CitvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9kZWZhdWx0bGliczwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm9kZWZhdWx0bGliczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbm9kZWZhdWx0bGlicy0xMDMzIj48L2E+RG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuIAorT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IGFyZSBwYXNzZWQgdG8gdGhlIGxpbmtlciwgYW5kIG9wdGlvbnMKK3NwZWNpZnlpbmcgbGlua2FnZSBvZiB0aGUgc3lzdGVtIGxpYnJhcmllcywgc3VjaCBhcyA8Y29kZT4tc3RhdGljLWxpYmdjYzwvY29kZT4KK29yIDxjb2RlPi1zaGFyZWQtbGliZ2NjPC9jb2RlPiwgYXJlIGlnbm9yZWQuIAorVGhlIHN0YW5kYXJkIHN0YXJ0dXAgZmlsZXMgYXJlIHVzZWQgbm9ybWFsbHksIHVubGVzcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9zdGFydGZpbGVzPC9zcGFuPjwvc2FtcD4KK2lzIHVzZWQuCisKKyAgICAgPHA+VGhlIGNvbXBpbGVyIG1heSBnZW5lcmF0ZSBjYWxscyB0byA8Y29kZT5tZW1jbXA8L2NvZGU+LAorPGNvZGU+bWVtc2V0PC9jb2RlPiwgPGNvZGU+bWVtY3B5PC9jb2RlPiBhbmQgPGNvZGU+bWVtbW92ZTwvY29kZT4uIAorVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbnRyaWVzIGluCitsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKK21lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub3N0ZGxpYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbm9zdGRsaWItMTAzNCI+PC9hPkRvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBzdGFydHVwIGZpbGVzIG9yIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuIAorTm8gc3RhcnR1cCBmaWxlcyBhbmQgb25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IGFyZSBwYXNzZWQgdG8KK3RoZSBsaW5rZXIsIGFuZCBvcHRpb25zIHNwZWNpZnlpbmcgbGlua2FnZSBvZiB0aGUgc3lzdGVtIGxpYnJhcmllcywgc3VjaCBhcworPGNvZGU+LXN0YXRpYy1saWJnY2M8L2NvZGU+IG9yIDxjb2RlPi1zaGFyZWQtbGliZ2NjPC9jb2RlPiwgYXJlIGlnbm9yZWQuCisKKyAgICAgPHA+VGhlIGNvbXBpbGVyIG1heSBnZW5lcmF0ZSBjYWxscyB0byA8Y29kZT5tZW1jbXA8L2NvZGU+LCA8Y29kZT5tZW1zZXQ8L2NvZGU+LAorPGNvZGU+bWVtY3B5PC9jb2RlPiBhbmQgPGNvZGU+bWVtbW92ZTwvY29kZT4uIAorVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbnRyaWVzIGluCitsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKK21lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRsZ2NjXzAwN2RfMDAyYy11c2Utd2l0aC1fMDA0MG9wdGlvbl8wMDdiXzAwMmRub3N0ZGxpYl8wMDdkLTEwMzUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRub3N0ZGxpYl8wMDdkLWFuZC11bnJlc29sdmVkLXJlZmVyZW5jZXMtMTAzNiI+PC9hPjxhIG5hbWU9ImluZGV4LXVucmVzb2x2ZWQtcmVmZXJlbmNlcy1hbmQtXzAwNDBvcHRpb25fMDA3Yl8wMDJkbm9zdGRsaWJfMDA3ZC0xMDM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBvcHRpb25fMDA3Yl8wMDJkbGdjY18wMDdkXzAwMmMtdXNlLXdpdGgtXzAwNDBvcHRpb25fMDA3Yl8wMDJkbm9kZWZhdWx0bGlic18wMDdkLTEwMzgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRub2RlZmF1bHRsaWJzXzAwN2QtYW5kLXVucmVzb2x2ZWQtcmVmZXJlbmNlcy0xMDM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtdW5yZXNvbHZlZC1yZWZlcmVuY2VzLWFuZC1fMDA0MG9wdGlvbl8wMDdiXzAwMmRub2RlZmF1bHRsaWJzXzAwN2QtMTA0MCI+PC9hPk9uZSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyaWVzIGJ5cGFzc2VkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub3N0ZGxpYjwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW5vZGVmYXVsdGxpYnM8L3NwYW4+PC9zYW1wPiBpcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliZ2NjLmE8L3NwYW4+PC9zYW1wPiwgYSBsaWJyYXJ5IG9mIGludGVybmFsIHN1YnJvdXRpbmVzCit3aGljaCBHQ0MgdXNlcyB0byBvdmVyY29tZSBzaG9ydGNvbWluZ3Mgb2YgcGFydGljdWxhciBtYWNoaW5lcywgb3Igc3BlY2lhbAorbmVlZHMgZm9yIHNvbWUgbGFuZ3VhZ2VzLiAKKyhTZWUgPGEgaHJlZj0iLi4vZ2NjaW50L0ludGVyZmFjZS5odG1sI0ludGVyZmFjZSI+SW50ZXJmYWNpbmcgdG8gR0NDIE91dHB1dDwvYT4sCitmb3IgbW9yZSBkaXNjdXNzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJnY2MuYTwvc3Bhbj48L3NhbXA+LikgCitJbiBtb3N0IGNhc2VzLCB5b3UgbmVlZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliZ2NjLmE8L3NwYW4+PC9zYW1wPiBldmVuIHdoZW4geW91IHdhbnQgdG8gYXZvaWQKK290aGVyIHN0YW5kYXJkIGxpYnJhcmllcy4gIEluIG90aGVyIHdvcmRzLCB3aGVuIHlvdSBzcGVjaWZ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ub3N0ZGxpYjwvc3Bhbj48L3NhbXA+CitvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9kZWZhdWx0bGliczwvc3Bhbj48L3NhbXA+IHlvdSBzaG91bGQgdXN1YWxseSBzcGVjaWZ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sZ2NjPC9zcGFuPjwvc2FtcD4gYXMgd2VsbC4gCitUaGlzIGVuc3VyZXMgdGhhdCB5b3UgaGF2ZSBubyB1bnJlc29sdmVkIHJlZmVyZW5jZXMgdG8gaW50ZXJuYWwgR0NDCitsaWJyYXJ5IHN1YnJvdXRpbmVzLiAKKyhBbiBleGFtcGxlIG9mIHN1Y2ggYW4gaW50ZXJuYWwgc3Vicm91dGluZSBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fbWFpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdXNlZCB0byBlbnN1cmUgQysrCitjb25zdHJ1Y3RvcnMgYXJlIGNhbGxlZDsgc2VlIDxhIGhyZWY9Ii4uL2djY2ludC9Db2xsZWN0Mi5odG1sI0NvbGxlY3QyIj48Y29kZT5jb2xsZWN0MjwvY29kZT48L2E+LikKKworICAgICA8YnI+PGR0Pjxjb2RlPi1waWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXBpZS0xMDQxIj48L2E+UHJvZHVjZSBhIHBvc2l0aW9uIGluZGVwZW5kZW50IGV4ZWN1dGFibGUgb24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQgaXQuIAorRm9yIHByZWRpY3RhYmxlIHJlc3VsdHMsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgc2FtZSBzZXQgb2Ygb3B0aW9ucwordXNlZCBmb3IgY29tcGlsYXRpb24gKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGllPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElFPC9zcGFuPjwvc2FtcD4sCitvciBtb2RlbCBzdWJvcHRpb25zKSB3aGVuIHlvdSBzcGVjaWZ5IHRoaXMgbGlua2VyIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1yZHluYW1pYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcmR5bmFtaWMtMTA0MiI+PC9hPlBhc3MgdGhlIGZsYWcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWV4cG9ydC1keW5hbWljPC9zcGFuPjwvc2FtcD4gdG8gdGhlIEVMRiBsaW5rZXIsIG9uIHRhcmdldHMKK3RoYXQgc3VwcG9ydCBpdC4gVGhpcyBpbnN0cnVjdHMgdGhlIGxpbmtlciB0byBhZGQgYWxsIHN5bWJvbHMsIG5vdAorb25seSB1c2VkIG9uZXMsIHRvIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZS4gVGhpcyBvcHRpb24gaXMgbmVlZGVkCitmb3Igc29tZSB1c2VzIG9mIDxjb2RlPmRsb3BlbjwvY29kZT4gb3IgdG8gYWxsb3cgb2J0YWluaW5nIGJhY2t0cmFjZXMKK2Zyb20gd2l0aGluIGEgcHJvZ3JhbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1zLTEwNDMiPjwvYT5SZW1vdmUgYWxsIHN5bWJvbCB0YWJsZSBhbmQgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBleGVjdXRhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXN0YXRpYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtc3RhdGljLTEwNDQiPjwvYT5PbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcsIHRoaXMgcHJldmVudHMgbGlua2luZyB3aXRoIHRoZSBzaGFyZWQKK2xpYnJhcmllcy4gIE9uIG90aGVyIHN5c3RlbXMsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tc2hhcmVkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1zaGFyZWQtMTA0NSI+PC9hPlByb2R1Y2UgYSBzaGFyZWQgb2JqZWN0IHdoaWNoIGNhbiB0aGVuIGJlIGxpbmtlZCB3aXRoIG90aGVyIG9iamVjdHMgdG8KK2Zvcm0gYW4gZXhlY3V0YWJsZS4gIE5vdCBhbGwgc3lzdGVtcyBzdXBwb3J0IHRoaXMgb3B0aW9uLiAgRm9yIHByZWRpY3RhYmxlCityZXN1bHRzLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIHNhbWUgc2V0IG9mIG9wdGlvbnMgdXNlZCBmb3IgY29tcGlsYXRpb24KKyg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBpYzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZlBJQzwvc3Bhbj48L3NhbXA+LCBvciBtb2RlbCBzdWJvcHRpb25zKSB3aGVuCit5b3Ugc3BlY2lmeSB0aGlzIGxpbmtlciBvcHRpb24uPGEgcmVsPSJmb290bm90ZSIgaHJlZj0iI2ZuLTEiIG5hbWU9ImZuZC0xIj48c3VwPjE8L3N1cD48L2E+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tc2hhcmVkLWxpYmdjYzwvY29kZT48ZHQ+PGNvZGU+LXN0YXRpYy1saWJnY2M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXNoYXJlZF8wMDJkbGliZ2NjLTEwNDYiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0aWNfMDAyZGxpYmdjYy0xMDQ3Ij48L2E+T24gc3lzdGVtcyB0aGF0IHByb3ZpZGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYzwvc3Bhbj48L3NhbXA+IGFzIGEgc2hhcmVkIGxpYnJhcnksIHRoZXNlIG9wdGlvbnMKK2ZvcmNlIHRoZSB1c2Ugb2YgZWl0aGVyIHRoZSBzaGFyZWQgb3Igc3RhdGljIHZlcnNpb24sIHJlc3BlY3RpdmVseS4gCitJZiBubyBzaGFyZWQgdmVyc2lvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliZ2NjPC9zcGFuPjwvc2FtcD4gd2FzIGJ1aWx0IHdoZW4gdGhlIGNvbXBpbGVyIHdhcworY29uZmlndXJlZCwgdGhlc2Ugb3B0aW9ucyBoYXZlIG5vIGVmZmVjdC4KKworICAgICA8cD5UaGVyZSBhcmUgc2V2ZXJhbCBzaXR1YXRpb25zIGluIHdoaWNoIGFuIGFwcGxpY2F0aW9uIHNob3VsZCB1c2UgdGhlCitzaGFyZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYzwvc3Bhbj48L3NhbXA+IGluc3RlYWQgb2YgdGhlIHN0YXRpYyB2ZXJzaW9uLiAgVGhlIG1vc3QgY29tbW9uCitvZiB0aGVzZSBpcyB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3aXNoZXMgdG8gdGhyb3cgYW5kIGNhdGNoIGV4Y2VwdGlvbnMKK2Fjcm9zcyBkaWZmZXJlbnQgc2hhcmVkIGxpYnJhcmllcy4gIEluIHRoYXQgY2FzZSwgZWFjaCBvZiB0aGUgbGlicmFyaWVzCithcyB3ZWxsIGFzIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgc2hvdWxkIHVzZSB0aGUgc2hhcmVkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJnY2M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UaGVyZWZvcmUsIHRoZSBHKysgYW5kIEdDSiBkcml2ZXJzIGF1dG9tYXRpY2FsbHkgYWRkCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc2hhcmVkLWxpYmdjYzwvc3Bhbj48L3NhbXA+IHdoZW5ldmVyIHlvdSBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IG9yIGEgbWFpbgorZXhlY3V0YWJsZSwgYmVjYXVzZSBDKysgYW5kIEphdmEgcHJvZ3JhbXMgdHlwaWNhbGx5IHVzZSBleGNlcHRpb25zLCBzbwordGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisKKyAgICAgPHA+SWYsIGluc3RlYWQsIHlvdSB1c2UgdGhlIEdDQyBkcml2ZXIgdG8gY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkKK2ZpbmQgdGhhdCB0aGV5IGFyZSBub3QgYWx3YXlzIGxpbmtlZCB3aXRoIHRoZSBzaGFyZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYzwvc3Bhbj48L3NhbXA+LiAKK0lmIEdDQyBmaW5kcywgYXQgaXRzIGNvbmZpZ3VyYXRpb24gdGltZSwgdGhhdCB5b3UgaGF2ZSBhIG5vbi1HTlUgbGlua2VyCitvciBhIEdOVSBsaW5rZXIgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVoLWZyYW1lLWhkcjwvc3Bhbj48L3NhbXA+LAoraXQgbGlua3MgdGhlIHNoYXJlZCB2ZXJzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJnY2M8L3NwYW4+PC9zYW1wPiBpbnRvIHNoYXJlZCBsaWJyYXJpZXMKK2J5IGRlZmF1bHQuICBPdGhlcndpc2UsIGl0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgbGlua2VyIGFuZCBvcHRpbWl6ZXMKK2F3YXkgdGhlIGxpbmtpbmcgd2l0aCB0aGUgc2hhcmVkIHZlcnNpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYzwvc3Bhbj48L3NhbXA+LCBsaW5raW5nIHdpdGgKK3RoZSBzdGF0aWMgdmVyc2lvbiBvZiBsaWJnY2MgYnkgZGVmYXVsdC4gIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgdG8KK3Byb3BhZ2F0ZSB0aHJvdWdoIHN1Y2ggc2hhcmVkIGxpYnJhcmllcywgd2l0aG91dCBpbmN1cnJpbmcgcmVsb2NhdGlvbgorY29zdHMgYXQgbGlicmFyeSBsb2FkIHRpbWUuCisKKyAgICAgPHA+SG93ZXZlciwgaWYgYSBsaWJyYXJ5IG9yIG1haW4gZXhlY3V0YWJsZSBpcyBzdXBwb3NlZCB0byB0aHJvdyBvciBjYXRjaAorZXhjZXB0aW9ucywgeW91IG11c3QgbGluayBpdCB1c2luZyB0aGUgRysrIG9yIEdDSiBkcml2ZXIsIGFzIGFwcHJvcHJpYXRlCitmb3IgdGhlIGxhbmd1YWdlcyB1c2VkIGluIHRoZSBwcm9ncmFtLCBvciB1c2luZyB0aGUgb3B0aW9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc2hhcmVkLWxpYmdjYzwvc3Bhbj48L3NhbXA+LCBzdWNoIHRoYXQgaXQgaXMgbGlua2VkIHdpdGggdGhlIHNoYXJlZAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXN0YXRpYy1saWJhc2FuPC9jb2RlPjxkZD5XaGVuIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNhbml0aXplPWFkZHJlc3M8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgdXNlZCB0byBsaW5rIGEgcHJvZ3JhbSwKK3RoZSBHQ0MgZHJpdmVyIGF1dG9tYXRpY2FsbHkgbGlua3MgYWdhaW5zdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5saWJhc2FuPC9zcGFuPjwvc2FtcD4uICBJZgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmFzYW48L3NwYW4+PC9zYW1wPiBpcyBhdmFpbGFibGUgYXMgYSBzaGFyZWQgbGlicmFyeSwgYW5kIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RhdGljPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBpcyBub3QgdXNlZCwgdGhlbiB0aGlzIGxpbmtzIGFnYWluc3QgdGhlIHNoYXJlZCB2ZXJzaW9uIG9mCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliYXNhbjwvc3Bhbj48L3NhbXA+LiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGF0aWMtbGliYXNhbjwvc3Bhbj48L3NhbXA+IG9wdGlvbiBkaXJlY3RzIHRoZSBHQ0MKK2RyaXZlciB0byBsaW5rIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJhc2FuPC9zcGFuPjwvc2FtcD4gc3RhdGljYWxseSwgd2l0aG91dCBuZWNlc3NhcmlseSBsaW5raW5nCitvdGhlciBsaWJyYXJpZXMgc3RhdGljYWxseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1zdGF0aWMtbGlidHNhbjwvY29kZT48ZGQ+V2hlbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzYW5pdGl6ZT10aHJlYWQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgdXNlZCB0byBsaW5rIGEgcHJvZ3JhbSwKK3RoZSBHQ0MgZHJpdmVyIGF1dG9tYXRpY2FsbHkgbGlua3MgYWdhaW5zdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5saWJ0c2FuPC9zcGFuPjwvc2FtcD4uICBJZgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYnRzYW48L3NwYW4+PC9zYW1wPiBpcyBhdmFpbGFibGUgYXMgYSBzaGFyZWQgbGlicmFyeSwgYW5kIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RhdGljPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBpcyBub3QgdXNlZCwgdGhlbiB0aGlzIGxpbmtzIGFnYWluc3QgdGhlIHNoYXJlZCB2ZXJzaW9uIG9mCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGlidHNhbjwvc3Bhbj48L3NhbXA+LiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGF0aWMtbGlidHNhbjwvc3Bhbj48L3NhbXA+IG9wdGlvbiBkaXJlY3RzIHRoZSBHQ0MKK2RyaXZlciB0byBsaW5rIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJ0c2FuPC9zcGFuPjwvc2FtcD4gc3RhdGljYWxseSwgd2l0aG91dCBuZWNlc3NhcmlseSBsaW5raW5nCitvdGhlciBsaWJyYXJpZXMgc3RhdGljYWxseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1zdGF0aWMtbGlic3RkYysrPC9jb2RlPjxkZD5XaGVuIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZysrPC9zcGFuPjwvc2FtcD4gcHJvZ3JhbSBpcyB1c2VkIHRvIGxpbmsgYSBDKysgcHJvZ3JhbSwgaXQKK25vcm1hbGx5IGF1dG9tYXRpY2FsbHkgbGlua3MgYWdhaW5zdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5saWJzdGRjKys8L3NwYW4+PC9zYW1wPi4gIElmCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGlic3RkYysrPC9zcGFuPjwvc2FtcD4gaXMgYXZhaWxhYmxlIGFzIGEgc2hhcmVkIGxpYnJhcnksIGFuZCB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGF0aWM8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgbm90IHVzZWQsIHRoZW4gdGhpcyBsaW5rcyBhZ2FpbnN0IHRoZQorc2hhcmVkIHZlcnNpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYnN0ZGMrKzwvc3Bhbj48L3NhbXA+LiAgVGhhdCBpcyBub3JtYWxseSBmaW5lLiAgSG93ZXZlciwgaXQKK2lzIHNvbWV0aW1lcyB1c2VmdWwgdG8gZnJlZXplIHRoZSB2ZXJzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJzdGRjKys8L3NwYW4+PC9zYW1wPiB1c2VkIGJ5Cit0aGUgcHJvZ3JhbSB3aXRob3V0IGdvaW5nIGFsbCB0aGUgd2F5IHRvIGEgZnVsbHkgc3RhdGljIGxpbmsuICBUaGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGF0aWMtbGlic3RkYysrPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGRpcmVjdHMgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nKys8L3NwYW4+PC9zYW1wPiBkcml2ZXIgdG8KK2xpbmsgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYnN0ZGMrKzwvc3Bhbj48L3NhbXA+IHN0YXRpY2FsbHksIHdpdGhvdXQgbmVjZXNzYXJpbHkgbGlua2luZyBvdGhlcgorbGlicmFyaWVzIHN0YXRpY2FsbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tc3ltYm9saWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXN5bWJvbGljLTEwNDgiPjwvYT5CaW5kIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIHN5bWJvbHMgd2hlbiBidWlsZGluZyBhIHNoYXJlZCBvYmplY3QuICBXYXJuCithYm91dCBhbnkgdW5yZXNvbHZlZCByZWZlcmVuY2VzICh1bmxlc3Mgb3ZlcnJpZGRlbiBieSB0aGUgbGluayBlZGl0b3IKK29wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tWGxpbmtlciAteiAtWGxpbmtlciBkZWZzPC9zcGFuPjwvc2FtcD4pLiAgT25seSBhIGZldyBzeXN0ZW1zIHN1cHBvcnQKK3RoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVQgPC9jb2RlPjx2YXI+c2NyaXB0PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LVQtMTA0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWxpbmtlci1zY3JpcHQtMTA1MCI+PC9hPlVzZSA8dmFyPnNjcmlwdDwvdmFyPiBhcyB0aGUgbGlua2VyIHNjcmlwdC4gIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBieSBtb3N0CitzeXN0ZW1zIHVzaW5nIHRoZSBHTlUgbGlua2VyLiAgT24gc29tZSB0YXJnZXRzLCBzdWNoIGFzIGJhcmUtYm9hcmQKK3RhcmdldHMgd2l0aG91dCBhbiBvcGVyYXRpbmcgc3lzdGVtLCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gbWF5IGJlIHJlcXVpcmVkCit3aGVuIGxpbmtpbmcgdG8gYXZvaWQgcmVmZXJlbmNlcyB0byB1bmRlZmluZWQgc3ltYm9scy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1YbGlua2VyIDwvY29kZT48dmFyPm9wdGlvbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1YbGlua2VyLTEwNTEiPjwvYT5QYXNzIDx2YXI+b3B0aW9uPC92YXI+IGFzIGFuIG9wdGlvbiB0byB0aGUgbGlua2VyLiAgWW91IGNhbiB1c2UgdGhpcyB0bworc3VwcGx5IHN5c3RlbS1zcGVjaWZpYyBsaW5rZXIgb3B0aW9ucyB0aGF0IEdDQyBkb2VzIG5vdCByZWNvZ25pemUuCisKKyAgICAgPHA+SWYgeW91IHdhbnQgdG8gcGFzcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhIHNlcGFyYXRlIGFyZ3VtZW50LCB5b3UgbXVzdCB1c2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1YbGlua2VyPC9zcGFuPjwvc2FtcD4gdHdpY2UsIG9uY2UgZm9yIHRoZSBvcHRpb24gYW5kIG9uY2UgZm9yIHRoZSBhcmd1bWVudC4gCitGb3IgZXhhbXBsZSwgdG8gcGFzcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYXNzZXJ0IGRlZmluaXRpb25zPC9zcGFuPjwvc2FtcD4sIHlvdSBtdXN0IHdyaXRlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tWGxpbmtlciAtYXNzZXJ0IC1YbGlua2VyIGRlZmluaXRpb25zPC9zcGFuPjwvc2FtcD4uICBJdCBkb2VzIG5vdCB3b3JrIHRvIHdyaXRlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tWGxpbmtlciAiLWFzc2VydCBkZWZpbml0aW9ucyI8L3NwYW4+PC9zYW1wPiwgYmVjYXVzZSB0aGlzIHBhc3NlcyB0aGUgZW50aXJlCitzdHJpbmcgYXMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIGlzIG5vdCB3aGF0IHRoZSBsaW5rZXIgZXhwZWN0cy4KKworICAgICA8cD5XaGVuIHVzaW5nIHRoZSBHTlUgbGlua2VyLCBpdCBpcyB1c3VhbGx5IG1vcmUgY29udmVuaWVudCB0byBwYXNzCithcmd1bWVudHMgdG8gbGlua2VyIG9wdGlvbnMgdXNpbmcgdGhlIDxzYW1wPjx2YXI+b3B0aW9uPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+PTwvc3Bhbj48dmFyPnZhbHVlPC92YXI+PC9zYW1wPgorc3ludGF4IHRoYW4gYXMgc2VwYXJhdGUgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gc3BlY2lmeQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVhsaW5rZXIgLU1hcD1vdXRwdXQubWFwPC9zcGFuPjwvc2FtcD4gcmF0aGVyIHRoYW4KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1YbGlua2VyIC1NYXAgLVhsaW5rZXIgb3V0cHV0Lm1hcDwvc3Bhbj48L3NhbXA+LiAgT3RoZXIgbGlua2VycyBtYXkgbm90IHN1cHBvcnQKK3RoaXMgc3ludGF4IGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XbCw8L2NvZGU+PHZhcj5vcHRpb248L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtV2wtMTA1MiI+PC9hPlBhc3MgPHZhcj5vcHRpb248L3Zhcj4gYXMgYW4gb3B0aW9uIHRvIHRoZSBsaW5rZXIuICBJZiA8dmFyPm9wdGlvbjwvdmFyPiBjb250YWlucworY29tbWFzLCBpdCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIG9wdGlvbnMgYXQgdGhlIGNvbW1hcy4gIFlvdSBjYW4gdXNlIHRoaXMKK3N5bnRheCB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSBvcHRpb24uIAorRm9yIGV4YW1wbGUsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XbCwtTWFwLG91dHB1dC5tYXA8L3NwYW4+PC9zYW1wPiBwYXNzZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1hcCBvdXRwdXQubWFwPC9zcGFuPjwvc2FtcD4gdG8gdGhlCitsaW5rZXIuICBXaGVuIHVzaW5nIHRoZSBHTlUgbGlua2VyLCB5b3UgY2FuIGFsc28gZ2V0IHRoZSBzYW1lIGVmZmVjdCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2wsLU1hcD1vdXRwdXQubWFwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tdSA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtdS0xMDUzIj48L2E+UHJldGVuZCB0aGUgc3ltYm9sIDx2YXI+c3ltYm9sPC92YXI+IGlzIHVuZGVmaW5lZCwgdG8gZm9yY2UgbGlua2luZyBvZgorbGlicmFyeSBtb2R1bGVzIHRvIGRlZmluZSBpdC4gIFlvdSBjYW4gdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi11PC9zcGFuPjwvc2FtcD4gbXVsdGlwbGUgdGltZXMgd2l0aAorZGlmZmVyZW50IHN5bWJvbHMgdG8gZm9yY2UgbG9hZGluZyBvZiBhZGRpdGlvbmFsIGxpYnJhcnkgbW9kdWxlcy4gCis8L2RsPgorCisgPGRpdiBjbGFzcz0iZm9vdG5vdGUiPgorPGhyPgorPGg0PkZvb3Rub3RlczwvaDQ+PHAgY2xhc3M9ImZvb3Rub3RlIj48c21hbGw+WzxhIG5hbWU9ImZuLTEiIGhyZWY9IiNmbmQtMSI+MTwvYT5dPC9zbWFsbD4gT24gc29tZSBzeXN0ZW1zLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdjYyAtc2hhcmVkPC9zcGFuPjwvc2FtcD4mcnNxdW87CituZWVkcyB0byBidWlsZCBzdXBwbGVtZW50YXJ5IHN0dWIgY29kZSBmb3IgY29uc3RydWN0b3JzIHRvIHdvcmsuICBPbgorbXVsdGktbGliYmVkIHN5c3RlbXMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2NjIC1zaGFyZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbXVzdCBzZWxlY3QgdGhlIGNvcnJlY3Qgc3VwcG9ydAorbGlicmFyaWVzIHRvIGxpbmsgYWdhaW5zdC4gIEZhaWxpbmcgdG8gc3VwcGx5IHRoZSBjb3JyZWN0IGZsYWdzIG1heSBsZWFkCit0byBzdWJ0bGUgZGVmZWN0cy4gIFN1cHBseWluZyB0aGVtIGluIGNhc2VzIHdoZXJlIHRoZXkgYXJlIG5vdCBuZWNlc3NhcnkKK2lzIGlubm9jdW91cy48L3A+CisKKyA8aHI+PC9kaXY+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xvY2FsLUxhYmVscy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Mb2NhbC1MYWJlbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjgxN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Mb2NhbC1MYWJlbHMuaHRtbApAQCAtMCwwICsxLDEyMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TG9jYWwgTGFiZWxzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlN0YXRlbWVudC1FeHBycy5odG1sI1N0YXRlbWVudC1FeHBycyIgdGl0bGU9IlN0YXRlbWVudCBFeHBycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxhYmVscy1hcy1WYWx1ZXMuaHRtbCNMYWJlbHMtYXMtVmFsdWVzIiB0aXRsZT0iTGFiZWxzIGFzIFZhbHVlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMb2NhbC1MYWJlbHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI0xhYmVscy1hcy1WYWx1ZXMiPkxhYmVscyBhcyBWYWx1ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTdGF0ZW1lbnQtRXhwcnMuaHRtbCNTdGF0ZW1lbnQtRXhwcnMiPlN0YXRlbWVudCBFeHByczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4yIExvY2FsbHkgRGVjbGFyZWQgTGFiZWxzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbG9jYWwtbGFiZWxzLTI0MDYiPjwvYT48YSBuYW1lPSJpbmRleC1tYWNyb3NfMDAyYy1sb2NhbC1sYWJlbHMtMjQwNyI+PC9hPgorR0NDIGFsbG93cyB5b3UgdG8gZGVjbGFyZSA8ZGZuPmxvY2FsIGxhYmVsczwvZGZuPiBpbiBhbnkgbmVzdGVkIGJsb2NrCitzY29wZS4gIEEgbG9jYWwgbGFiZWwgaXMganVzdCBsaWtlIGFuIG9yZGluYXJ5IGxhYmVsLCBidXQgeW91IGNhbgorb25seSByZWZlcmVuY2UgaXQgKHdpdGggYSA8Y29kZT5nb3RvPC9jb2RlPiBzdGF0ZW1lbnQsIG9yIGJ5IHRha2luZyBpdHMKK2FkZHJlc3MpIHdpdGhpbiB0aGUgYmxvY2sgaW4gd2hpY2ggaXQgaXMgZGVjbGFyZWQuCisKKyA8cD5BIGxvY2FsIGxhYmVsIGRlY2xhcmF0aW9uIGxvb2tzIGxpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIF9fbGFiZWxfXyA8dmFyPmxhYmVsPC92YXI+OworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5vcgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgX19sYWJlbF9fIDx2YXI+bGFiZWwxPC92YXI+LCA8dmFyPmxhYmVsMjwvdmFyPiwgLyogPHNwYW4gY2xhc3M9InJvbWFuIj4uLi48L3NwYW4+ICovOworPC9wcmU+CisgPHA+TG9jYWwgbGFiZWwgZGVjbGFyYXRpb25zIG11c3QgY29tZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jaywKK2JlZm9yZSBhbnkgb3JkaW5hcnkgZGVjbGFyYXRpb25zIG9yIHN0YXRlbWVudHMuCisKKyA8cD5UaGUgbGFiZWwgZGVjbGFyYXRpb24gZGVmaW5lcyB0aGUgbGFiZWwgPGVtPm5hbWU8L2VtPiwgYnV0IGRvZXMgbm90IGRlZmluZQordGhlIGxhYmVsIGl0c2VsZi4gIFlvdSBtdXN0IGRvIHRoaXMgaW4gdGhlIHVzdWFsIHdheSwgd2l0aAorPHZhcj5sYWJlbDwvdmFyPjxjb2RlPjo8L2NvZGU+LCB3aXRoaW4gdGhlIHN0YXRlbWVudHMgb2YgdGhlIHN0YXRlbWVudCBleHByZXNzaW9uLgorCisgPHA+VGhlIGxvY2FsIGxhYmVsIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBjb21wbGV4IG1hY3Jvcy4gIElmIGEgbWFjcm8KK2NvbnRhaW5zIG5lc3RlZCBsb29wcywgYSA8Y29kZT5nb3RvPC9jb2RlPiBjYW4gYmUgdXNlZnVsIGZvciBicmVha2luZyBvdXQgb2YKK3RoZW0uICBIb3dldmVyLCBhbiBvcmRpbmFyeSBsYWJlbCB3aG9zZSBzY29wZSBpcyB0aGUgd2hvbGUgZnVuY3Rpb24KK2Nhbm5vdCBiZSB1c2VkOiBpZiB0aGUgbWFjcm8gY2FuIGJlIGV4cGFuZGVkIHNldmVyYWwgdGltZXMgaW4gb25lCitmdW5jdGlvbiwgdGhlIGxhYmVsIGlzIG11bHRpcGx5IGRlZmluZWQgaW4gdGhhdCBmdW5jdGlvbi4gIEEKK2xvY2FsIGxhYmVsIGF2b2lkcyB0aGlzIHByb2JsZW0uICBGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgU0VBUkNIKHZhbHVlLCBhcnJheSwgdGFyZ2V0KSAgICAgICAgICAgICAgXAorICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2xhYmVsX18gZm91bmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdHlwZW9mICh0YXJnZXQpIF9TRUFSQ0hfdGFyZ2V0ID0gKHRhcmdldCk7ICAgICAgXAorICAgICAgIHR5cGVvZiAoKihhcnJheSkpICpfU0VBUkNIX2FycmF5ID0gKGFycmF5KTsgICAgIFwKKyAgICAgICBpbnQgaSwgajsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBtYXg7IGkrKykgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIGZvciAoaiA9IDA7IGogJmx0OyBtYXg7IGorKykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIGlmIChfU0VBUkNIX2FycmF5W2ldW2pdID09IF9TRUFSQ0hfdGFyZ2V0KSAgXAorICAgICAgICAgICAgIHsgKHZhbHVlKSA9IGk7IGdvdG8gZm91bmQ7IH0gICAgICAgICAgICAgIFwKKyAgICAgICAodmFsdWUpID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBmb3VuZDo7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB9IHdoaWxlICgwKQorPC9wcmU+CisgPHA+VGhpcyBjb3VsZCBhbHNvIGJlIHdyaXR0ZW4gdXNpbmcgYSBzdGF0ZW1lbnQgZXhwcmVzc2lvbjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgU0VBUkNIKGFycmF5LCB0YXJnZXQpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBfX2xhYmVsX18gZm91bmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdHlwZW9mICh0YXJnZXQpIF9TRUFSQ0hfdGFyZ2V0ID0gKHRhcmdldCk7ICAgICAgXAorICAgICAgIHR5cGVvZiAoKihhcnJheSkpICpfU0VBUkNIX2FycmF5ID0gKGFycmF5KTsgICAgIFwKKyAgICAgICBpbnQgaSwgajsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaW50IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBtYXg7IGkrKykgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgIGZvciAoaiA9IDA7IGogJmx0OyBtYXg7IGorKykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIGlmIChfU0VBUkNIX2FycmF5W2ldW2pdID09IF9TRUFSQ0hfdGFyZ2V0KSAgXAorICAgICAgICAgICAgIHsgdmFsdWUgPSBpOyBnb3RvIGZvdW5kOyB9ICAgICAgICAgICAgICAgIFwKKyAgICAgICB2YWx1ZSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBmb3VuZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgfSkKKzwvcHJlPgorIDxwPkxvY2FsIGxhYmVsIGRlY2xhcmF0aW9ucyBhbHNvIG1ha2UgdGhlIGxhYmVscyB0aGV5IGRlY2xhcmUgdmlzaWJsZSB0bworbmVzdGVkIGZ1bmN0aW9ucywgaWYgdGhlcmUgYXJlIGFueS4gIFNlZSA8YSBocmVmPSJOZXN0ZWQtRnVuY3Rpb25zLmh0bWwjTmVzdGVkLUZ1bmN0aW9ucyI+TmVzdGVkIEZ1bmN0aW9uczwvYT4sIGZvciBkZXRhaWxzLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Mb2NhbC1SZWctVmFycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Mb2NhbC1SZWctVmFycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMzYwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xvY2FsLVJlZy1WYXJzLmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxvY2FsIFJlZyBWYXJzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4cGxpY2l0LVJlZy1WYXJzLmh0bWwjRXhwbGljaXQtUmVnLVZhcnMiIHRpdGxlPSJFeHBsaWNpdCBSZWcgVmFycyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikdsb2JhbC1SZWctVmFycy5odG1sI0dsb2JhbC1SZWctVmFycyIgdGl0bGU9Ikdsb2JhbCBSZWcgVmFycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMb2NhbC1SZWctVmFycyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikdsb2JhbC1SZWctVmFycy5odG1sI0dsb2JhbC1SZWctVmFycyI+R2xvYmFsIFJlZyBWYXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXhwbGljaXQtUmVnLVZhcnMuaHRtbCNFeHBsaWNpdC1SZWctVmFycyI+RXhwbGljaXQgUmVnIFZhcnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjQ0LjIgU3BlY2lmeWluZyBSZWdpc3RlcnMgZm9yIExvY2FsIFZhcmlhYmxlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxvY2FsLXZhcmlhYmxlc18wMDJjLXNwZWNpZnlpbmctcmVnaXN0ZXJzLTI4NzYiPjwvYT48YSBuYW1lPSJpbmRleC1zcGVjaWZ5aW5nLXJlZ2lzdGVycy1mb3ItbG9jYWwtdmFyaWFibGVzLTI4NzciPjwvYT48YSBuYW1lPSJpbmRleC1yZWdpc3RlcnMtZm9yLWxvY2FsLXZhcmlhYmxlcy0yODc4Ij48L2E+CitZb3UgY2FuIGRlZmluZSBhIGxvY2FsIHJlZ2lzdGVyIHZhcmlhYmxlIHdpdGggYSBzcGVjaWZpZWQgcmVnaXN0ZXIKK2xpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHJlZ2lzdGVyIGludCAqZm9vIGFzbSAoImE1Iik7Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkhlcmUgPGNvZGU+YTU8L2NvZGU+IGlzIHRoZSBuYW1lIG9mIHRoZSByZWdpc3RlciB0aGF0IHNob3VsZCBiZSB1c2VkLiAgTm90ZQordGhhdCB0aGlzIGlzIHRoZSBzYW1lIHN5bnRheCB1c2VkIGZvciBkZWZpbmluZyBnbG9iYWwgcmVnaXN0ZXIKK3ZhcmlhYmxlcywgYnV0IGZvciBhIGxvY2FsIHZhcmlhYmxlIGl0IGFwcGVhcnMgd2l0aGluIGEgZnVuY3Rpb24uCisKKyA8cD5OYXR1cmFsbHkgdGhlIHJlZ2lzdGVyIG5hbWUgaXMgY3B1LWRlcGVuZGVudCwgYnV0IHRoaXMgaXMgbm90IGEKK3Byb2JsZW0sIHNpbmNlIHNwZWNpZmljIHJlZ2lzdGVycyBhcmUgbW9zdCBvZnRlbiB1c2VmdWwgd2l0aCBleHBsaWNpdAorYXNzZW1ibGVyIGluc3RydWN0aW9ucyAoc2VlIDxhIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI0V4dGVuZGVkLUFzbSI+RXh0ZW5kZWQgQXNtPC9hPikuICBCb3RoIG9mIHRoZXNlIHRoaW5ncworZ2VuZXJhbGx5IHJlcXVpcmUgdGhhdCB5b3UgY29uZGl0aW9uYWxpemUgeW91ciBwcm9ncmFtIGFjY29yZGluZyB0bworY3B1IHR5cGUuCisKKyA8cD5JbiBhZGRpdGlvbiwgb3BlcmF0aW5nIHN5c3RlbXMgb24gb25lIHR5cGUgb2YgY3B1IG1heSBkaWZmZXIgaW4gaG93IHRoZXkKK25hbWUgdGhlIHJlZ2lzdGVyczsgdGhlbiB5b3UgbmVlZCBhZGRpdGlvbmFsIGNvbmRpdGlvbmFscy4gIEZvcgorZXhhbXBsZSwgc29tZSA2ODAwMCBvcGVyYXRpbmcgc3lzdGVtcyBjYWxsIHRoaXMgcmVnaXN0ZXIgPGNvZGU+JWE1PC9jb2RlPi4KKworIDxwPkRlZmluaW5nIHN1Y2ggYSByZWdpc3RlciB2YXJpYWJsZSBkb2VzIG5vdCByZXNlcnZlIHRoZSByZWdpc3RlcjsgaXQKK3JlbWFpbnMgYXZhaWxhYmxlIGZvciBvdGhlciB1c2VzIGluIHBsYWNlcyB3aGVyZSBmbG93IGNvbnRyb2wgZGV0ZXJtaW5lcwordGhlIHZhcmlhYmxlJ3MgdmFsdWUgaXMgbm90IGxpdmUuCisKKyA8cD5UaGlzIG9wdGlvbiBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCBHQ0MgZ2VuZXJhdGVzIGNvZGUgdGhhdCBoYXMKK3RoaXMgdmFyaWFibGUgaW4gdGhlIHJlZ2lzdGVyIHlvdSBzcGVjaWZ5IGF0IGFsbCB0aW1lcy4gIFlvdSBtYXkgbm90Citjb2RlIGFuIGV4cGxpY2l0IHJlZmVyZW5jZSB0byB0aGlzIHJlZ2lzdGVyIGluIHRoZSA8ZW0+YXNzZW1ibGVyCitpbnN0cnVjdGlvbiB0ZW1wbGF0ZTwvZW0+IHBhcnQgb2YgYW4gPGNvZGU+YXNtPC9jb2RlPiBzdGF0ZW1lbnQgYW5kIGFzc3VtZSBpdAorYWx3YXlzIHJlZmVycyB0byB0aGlzIHZhcmlhYmxlLiAgSG93ZXZlciwgdXNpbmcgdGhlIHZhcmlhYmxlIGFzIGFuCis8Y29kZT5hc208L2NvZGU+IDxlbT5vcGVyYW5kPC9lbT4gZ3VhcmFudGVlcyB0aGF0IHRoZSBzcGVjaWZpZWQgcmVnaXN0ZXIgaXMgdXNlZAorZm9yIHRoZSBvcGVyYW5kLgorCisgPHA+U3RvcmVzIGludG8gbG9jYWwgcmVnaXN0ZXIgdmFyaWFibGVzIG1heSBiZSBkZWxldGVkIHdoZW4gdGhleSBhcHBlYXIgdG8gYmUgZGVhZAorYWNjb3JkaW5nIHRvIGRhdGFmbG93IGFuYWx5c2lzLiAgUmVmZXJlbmNlcyB0byBsb2NhbCByZWdpc3RlciB2YXJpYWJsZXMgbWF5CitiZSBkZWxldGVkIG9yIG1vdmVkIG9yIHNpbXBsaWZpZWQuCisKKyA8cD5BcyBmb3IgZ2xvYmFsIHJlZ2lzdGVyIHZhcmlhYmxlcywgaXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjaG9vc2UgYQorcmVnaXN0ZXIgdGhhdCBpcyBub3JtYWxseSBzYXZlZCBhbmQgcmVzdG9yZWQgYnkgZnVuY3Rpb24gY2FsbHMgb24KK3lvdXIgbWFjaGluZSwgc28gdGhhdCBsaWJyYXJ5IHJvdXRpbmVzIHdpbGwgbm90IGNsb2JiZXIgaXQuICBBIGNvbW1vbgorcGl0ZmFsbCBpcyB0byBpbml0aWFsaXplIG11bHRpcGxlIGNhbGwtY2xvYmJlcmVkIHJlZ2lzdGVycyB3aXRoCithcmJpdHJhcnkgZXhwcmVzc2lvbnMsIHdoZXJlIGEgZnVuY3Rpb24gY2FsbCBvciBsaWJyYXJ5IGNhbGwgZm9yIGFuCithcml0aG1ldGljIG9wZXJhdG9yIG92ZXJ3cml0ZXMgYSByZWdpc3RlciB2YWx1ZSBmcm9tIGEgcHJldmlvdXMKK2Fzc2lnbm1lbnQsIGZvciBleGFtcGxlIDxjb2RlPnIwPC9jb2RlPiBiZWxvdzoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICByZWdpc3RlciBpbnQgKnAxIGFzbSAoInIwIikgPSAuLi47CisgICAgIHJlZ2lzdGVyIGludCAqcDIgYXNtICgicjEiKSA9IC4uLjsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+SW4gdGhvc2UgY2FzZXMsIGEgc29sdXRpb24gaXMgdG8gdXNlIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIGZvcgorZWFjaCBhcmJpdHJhcnkgZXhwcmVzc2lvbi4gICBTZWUgPGEgaHJlZj0iRXhhbXBsZS1vZi1hc20td2l0aC1jbG9iYmVyZWQtYXNtLXJlZy5odG1sI0V4YW1wbGUtb2YtYXNtLXdpdGgtY2xvYmJlcmVkLWFzbS1yZWciPkV4YW1wbGUgb2YgYXNtIHdpdGggY2xvYmJlcmVkIGFzbSByZWc8L2E+LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Mb2NhbGVfMDAyZHNwZWNpZmljLWJlaGF2aW9yLWltcGxlbWVudGF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xvY2FsZV8wMDJkc3BlY2lmaWMtYmVoYXZpb3ItaW1wbGVtZW50YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDlhZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Mb2NhbGVfMDAyZHNwZWNpZmljLWJlaGF2aW9yLWltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TG9jYWxlLXNwZWNpZmljIGJlaGF2aW9yIGltcGxlbWVudGF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIiB0aXRsZT0iQyBJbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFyY2hpdGVjdHVyZS1pbXBsZW1lbnRhdGlvbi5odG1sI0FyY2hpdGVjdHVyZS1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMb2NhbGUtc3BlY2lmaWMtYmVoYXZpb3ItaW1wbGVtZW50YXRpb24iPjwvYT4KKzxhIG5hbWU9IkxvY2FsZV8wMDJkc3BlY2lmaWMtYmVoYXZpb3ItaW1wbGVtZW50YXRpb24iPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBcmNoaXRlY3R1cmUtaW1wbGVtZW50YXRpb24uaHRtbCNBcmNoaXRlY3R1cmUtaW1wbGVtZW50YXRpb24iPkFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj5DIEltcGxlbWVudGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xNiBMb2NhbGUtc3BlY2lmaWMgYmVoYXZpb3I8L2gzPgorCis8cD5UaGUgYmVoYXZpb3Igb2YgdGhlc2UgcG9pbnRzIGFyZSBkZXBlbmRlbnQgb24gdGhlIGltcGxlbWVudGF0aW9uCitvZiB0aGUgQyBsaWJyYXJ5LCBhbmQgYXJlIG5vdCBkZWZpbmVkIGJ5IEdDQyBpdHNlbGYuCisKKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdDQyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgZ2NjLnRleGkuIC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTG9uZy1Mb25nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xvbmctTG9uZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzkzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL0xvbmctTG9uZy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxvbmcgTG9uZyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJfMDA1Zl8wMDVmaW50MTI4Lmh0bWwjZ190XzAwNWZfMDA1ZmludDEyOCIgdGl0bGU9Il9faW50MTI4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxvbmctTG9uZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCI+Q29tcGxleDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Il8wMDVmXzAwNWZpbnQxMjguaHRtbCNnX3RfMDA1Zl8wMDVmaW50MTI4Ij5fX2ludDEyODwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni45IERvdWJsZS1Xb3JkIEludGVnZXJzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jsb25nLWxvbmdfMDA3ZC1kYXRhLXR5cGVzLTI0MzgiPjwvYT48YSBuYW1lPSJpbmRleC1kb3VibGVfMDAyZHdvcmQtYXJpdGhtZXRpYy0yNDM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXVsdGlwcmVjaXNpb24tYXJpdGhtZXRpYy0yNDQwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMTF8wMDdkLWludGVnZXItc3VmZml4LTI0NDEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVMTF8wMDdkLWludGVnZXItc3VmZml4LTI0NDIiPjwvYT4KK0lTTyBDOTkgc3VwcG9ydHMgZGF0YSB0eXBlcyBmb3IgaW50ZWdlcnMgdGhhdCBhcmUgYXQgbGVhc3QgNjQgYml0cyB3aWRlLAorYW5kIGFzIGFuIGV4dGVuc2lvbiBHQ0Mgc3VwcG9ydHMgdGhlbSBpbiBDOTAgbW9kZSBhbmQgaW4gQysrLiAKK1NpbXBseSB3cml0ZSA8Y29kZT5sb25nIGxvbmcgaW50PC9jb2RlPiBmb3IgYSBzaWduZWQgaW50ZWdlciwgb3IKKzxjb2RlPnVuc2lnbmVkIGxvbmcgbG9uZyBpbnQ8L2NvZGU+IGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyLiAgVG8gbWFrZSBhbgoraW50ZWdlciBjb25zdGFudCBvZiB0eXBlIDxjb2RlPmxvbmcgbG9uZyBpbnQ8L2NvZGU+LCBhZGQgdGhlIHN1ZmZpeCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxMPC9zcGFuPjwvc2FtcD4mcnNxdW87Cit0byB0aGUgaW50ZWdlci4gIFRvIG1ha2UgYW4gaW50ZWdlciBjb25zdGFudCBvZiB0eXBlIDxjb2RlPnVuc2lnbmVkIGxvbmcKK2xvbmcgaW50PC9jb2RlPiwgYWRkIHRoZSBzdWZmaXggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5VTEw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gdGhlIGludGVnZXIuCisKKyA8cD5Zb3UgY2FuIHVzZSB0aGVzZSB0eXBlcyBpbiBhcml0aG1ldGljIGxpa2UgYW55IG90aGVyIGludGVnZXIgdHlwZXMuIAorQWRkaXRpb24sIHN1YnRyYWN0aW9uLCBhbmQgYml0d2lzZSBib29sZWFuIG9wZXJhdGlvbnMgb24gdGhlc2UgdHlwZXMKK2FyZSBvcGVuLWNvZGVkIG9uIGFsbCB0eXBlcyBvZiBtYWNoaW5lcy4gIE11bHRpcGxpY2F0aW9uIGlzIG9wZW4tY29kZWQKK2lmIHRoZSBtYWNoaW5lIHN1cHBvcnRzIGEgZnVsbHdvcmQtdG8tZG91Ymxld29yZCB3aWRlbmluZyBtdWx0aXBseQoraW5zdHJ1Y3Rpb24uICBEaXZpc2lvbiBhbmQgc2hpZnRzIGFyZSBvcGVuLWNvZGVkIG9ubHkgb24gbWFjaGluZXMgdGhhdAorcHJvdmlkZSBzcGVjaWFsIHN1cHBvcnQuICBUaGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBub3Qgb3Blbi1jb2RlZCB1c2UKK3NwZWNpYWwgbGlicmFyeSByb3V0aW5lcyB0aGF0IGNvbWUgd2l0aCBHQ0MuCisKKyA8cD5UaGVyZSBtYXkgYmUgcGl0ZmFsbHMgd2hlbiB5b3UgdXNlIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4gdHlwZXMgZm9yIGZ1bmN0aW9uCithcmd1bWVudHMgd2l0aG91dCBmdW5jdGlvbiBwcm90b3R5cGVzLiAgSWYgYSBmdW5jdGlvbgorZXhwZWN0cyB0eXBlIDxjb2RlPmludDwvY29kZT4gZm9yIGl0cyBhcmd1bWVudCwgYW5kIHlvdSBwYXNzIGEgdmFsdWUgb2YgdHlwZQorPGNvZGU+bG9uZyBsb25nIGludDwvY29kZT4sIGNvbmZ1c2lvbiByZXN1bHRzIGJlY2F1c2UgdGhlIGNhbGxlciBhbmQgdGhlCitzdWJyb3V0aW5lIGRpc2FncmVlIGFib3V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgZm9yIHRoZSBhcmd1bWVudC4gCitMaWtld2lzZSwgaWYgdGhlIGZ1bmN0aW9uIGV4cGVjdHMgPGNvZGU+bG9uZyBsb25nIGludDwvY29kZT4gYW5kIHlvdSBwYXNzCis8Y29kZT5pbnQ8L2NvZGU+LiAgVGhlIGJlc3Qgd2F5IHRvIGF2b2lkIHN1Y2ggcHJvYmxlbXMgaXMgdG8gdXNlIHByb3RvdHlwZXMuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL00zMkMtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NMzJDLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjY4ODhmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NMzJDLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NMzJDIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIiB0aXRsZT0iTE0zMiBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjTTMyUl8wMDJmRC1PcHRpb25zIiB0aXRsZT0iTTMyUi9EIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTMyQy1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI00zMlJfMDAyZkQtT3B0aW9ucyI+TTMyUi9EIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4yMCBNMzJDIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NMzJDLW9wdGlvbnMtMTU4OSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1jcHU9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY3B1XzAwM2QtMTU5MCI+PC9hPlNlbGVjdCB0aGUgQ1BVIGZvciB3aGljaCBjb2RlIGlzIGdlbmVyYXRlZC4gIDx2YXI+bmFtZTwvdmFyPiBtYXkgYmUgb25lIG9mCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI4Yzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgdGhlIFI4Qy9UaW55IHNlcmllcywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tMTZjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciB0aGUgTTE2QyAodXAgdG8KKy82MCkgc2VyaWVzLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm0zMmNtPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciB0aGUgTTE2Qy84MCBzZXJpZXMsIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bTMyYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IKK3RoZSBNMzJDLzgwIHNlcmllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2ltPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2ltLTE1OTEiPjwvYT5TcGVjaWZpZXMgdGhhdCB0aGUgcHJvZ3JhbSB3aWxsIGJlIHJ1biBvbiB0aGUgc2ltdWxhdG9yLiAgVGhpcyBjYXVzZXMKK2FuIGFsdGVybmF0ZSBydW50aW1lIGxpYnJhcnkgdG8gYmUgbGlua2VkIGluIHdoaWNoIHN1cHBvcnRzLCBmb3IKK2V4YW1wbGUsIGZpbGUgSS9PLiAgWW91IG11c3Qgbm90IHVzZSB0aGlzIG9wdGlvbiB3aGVuIGdlbmVyYXRpbmcKK3Byb2dyYW1zIHRoYXQgd2lsbCBydW4gb24gcmVhbCBoYXJkd2FyZTsgeW91IG11c3QgcHJvdmlkZSB5b3VyIG93bgorcnVudGltZSBsaWJyYXJ5IGZvciB3aGF0ZXZlciBJL08gZnVuY3Rpb25zIGFyZSBuZWVkZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWVtcmVncz08L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWVtcmVnc18wMDNkLTE1OTIiPjwvYT5TcGVjaWZpZXMgdGhlIG51bWJlciBvZiBtZW1vcnktYmFzZWQgcHNldWRvLXJlZ2lzdGVycyBHQ0MgdXNlcworZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4gIFRoZXNlIHBzZXVkby1yZWdpc3RlcnMgYXJlIHVzZWQgbGlrZSByZWFsCityZWdpc3RlcnMsIHNvIHRoZXJlIGlzIGEgdHJhZGVvZmYgYmV0d2VlbiBHQ0MncyBhYmlsaXR5IHRvIGZpdCB0aGUKK2NvZGUgaW50byBhdmFpbGFibGUgcmVnaXN0ZXJzLCBhbmQgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgdXNpbmcKK21lbW9yeSBpbnN0ZWFkIG9mIHJlZ2lzdGVycy4gIE5vdGUgdGhhdCBhbGwgbW9kdWxlcyBpbiBhIHByb2dyYW0gbXVzdAorYmUgY29tcGlsZWQgd2l0aCB0aGUgc2FtZSB2YWx1ZSBmb3IgdGhpcyBvcHRpb24uICBCZWNhdXNlIG9mIHRoYXQsIHlvdQorbXVzdCBub3QgdXNlIHRoaXMgb3B0aW9uIHdpdGggR0NDJ3MgZGVmYXVsdCBydW50aW1lIGxpYnJhcmllcy4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL00zMkMtUHJhZ21hcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NMzJDLVByYWdtYXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzVjMDJjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NMzJDLVByYWdtYXMuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NMzJDIFByYWdtYXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiIHRpdGxlPSJQcmFnbWFzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVJNLVByYWdtYXMuaHRtbCNBUk0tUHJhZ21hcyIgdGl0bGU9IkFSTSBQcmFnbWFzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTWVQLVByYWdtYXMuaHRtbCNNZVAtUHJhZ21hcyIgdGl0bGU9Ik1lUCBQcmFnbWFzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik0zMkMtUHJhZ21hcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNZVAtUHJhZ21hcy5odG1sI01lUC1QcmFnbWFzIj5NZVAgUHJhZ21hczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFSTS1QcmFnbWFzLmh0bWwjQVJNLVByYWdtYXMiPkFSTSBQcmFnbWFzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU4LjIgTTMyQyBQcmFnbWFzPC9oND4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+R0NDIG1lbXJlZ3MgPC9jb2RlPjx2YXI+bnVtYmVyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLW1lbXJlZ3MtMzQ1NiI+PC9hPk92ZXJyaWRlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiA8Y29kZT4tbWVtcmVncz08L2NvZGU+IGZvciB0aGUgY3VycmVudAorZmlsZS4gIFVzZSB3aXRoIGNhcmUhICBUaGlzIHByYWdtYSBtdXN0IGJlIGJlZm9yZSBhbnkgZnVuY3Rpb24gaW4gdGhlCitmaWxlLCBhbmQgbWl4aW5nIGRpZmZlcmVudCBtZW1yZWdzIHZhbHVlcyBpbiBkaWZmZXJlbnQgb2JqZWN0cyBtYXkKK21ha2UgdGhlbSBpbmNvbXBhdGlibGUuICBUaGlzIHByYWdtYSBpcyB1c2VmdWwgd2hlbiBhCitwZXJmb3JtYW5jZS1jcml0aWNhbCBmdW5jdGlvbiB1c2VzIGEgbWVtcmVnIGZvciB0ZW1wb3JhcnkgdmFsdWVzLAorYXMgaXQgbWF5IGFsbG93IHlvdSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtZW1yZWdzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5BRERSRVNTIDwvY29kZT48dmFyPm5hbWU8L3Zhcj4gPHZhcj5hZGRyZXNzPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLWFkZHJlc3MtMzQ1NyI+PC9hPkZvciBhbnkgZGVjbGFyZWQgc3ltYm9scyBtYXRjaGluZyA8dmFyPm5hbWU8L3Zhcj4sIHRoaXMgZG9lcyB0aHJlZSB0aGluZ3MKK3RvIHRoYXQgc3ltYm9sOiBpdCBmb3JjZXMgdGhlIHN5bWJvbCB0byBiZSBsb2NhdGVkIGF0IHRoZSBnaXZlbgorYWRkcmVzcyAoYSBudW1iZXIpLCBpdCBmb3JjZXMgdGhlIHN5bWJvbCB0byBiZSB2b2xhdGlsZSwgYW5kIGl0CitjaGFuZ2VzIHRoZSBzeW1ib2wncyBzY29wZSB0byBiZSBzdGF0aWMuICBUaGlzIHByYWdtYSBleGlzdHMgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgY29tcGlsZXJzLCBidXQgbm90ZSB0aGF0IHRoZSBjb21tb24KKzxjb2RlPjEyMzRIPC9jb2RlPiBudW1lcmljIHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkICh1c2UgPGNvZGU+MHgxMjM0PC9jb2RlPgoraW5zdGVhZCkuICBFeGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICNwcmFnbWEgQUREUkVTUyBwb3J0MyAweDEwMworICAgICAgICAgIGNoYXIgcG9ydDM7Cis8L3ByZT4KKyAgICAgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL00zMlJfMDAyZkQtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL00zMlJfMDAyZkQtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTM5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NMzJSL0QgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNMzJDLU9wdGlvbnMuaHRtbCNNMzJDLU9wdGlvbnMiIHRpdGxlPSJNMzJDIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIiB0aXRsZT0iTTY4MHgwIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTMyUiUyZkQtT3B0aW9ucyI+PC9hPgorPGEgbmFtZT0iTTMyUl8wMDJmRC1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTTMyQy1PcHRpb25zLmh0bWwjTTMyQy1PcHRpb25zIj5NMzJDIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMjEgTTMyUi9EIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NMzJSXzAwMmZELW9wdGlvbnMtMTU5MyI+PC9hPgorVGhlc2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW08L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBSZW5lc2FzIE0zMlIvRCBhcmNoaXRlY3R1cmVzOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbTMycjI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW0zMnIyLTE1OTQiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgTTMyUi8yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0zMnJ4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tMzJyeC0xNTk1Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIE0zMlIvWC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tMzJyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tMzJyLTE1OTYiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgTTMyUi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW1vZGVsPXNtYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbW9kZWxfMDAzZHNtYWxsLTE1OTciPjwvYT5Bc3N1bWUgYWxsIG9iamVjdHMgbGl2ZSBpbiB0aGUgbG93ZXIgMTZNQiBvZiBtZW1vcnkgKHNvIHRoYXQgdGhlaXIgYWRkcmVzc2VzCitjYW4gYmUgbG9hZGVkIHdpdGggdGhlIDxjb2RlPmxkMjQ8L2NvZGU+IGluc3RydWN0aW9uKSwgYW5kIGFzc3VtZSBhbGwgc3Vicm91dGluZXMKK2FyZSByZWFjaGFibGUgd2l0aCB0aGUgPGNvZGU+Ymw8L2NvZGU+IGluc3RydWN0aW9uLiAKK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPHA+VGhlIGFkZHJlc3NhYmlsaXR5IG9mIGEgcGFydGljdWxhciBvYmplY3QgY2FuIGJlIHNldCB3aXRoIHRoZQorPGNvZGU+bW9kZWw8L2NvZGU+IGF0dHJpYnV0ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbW9kZWw9bWVkaXVtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbW9kZWxfMDAzZG1lZGl1bS0xNTk4Ij48L2E+QXNzdW1lIG9iamVjdHMgbWF5IGJlIGFueXdoZXJlIGluIHRoZSAzMi1iaXQgYWRkcmVzcyBzcGFjZSAodGhlIGNvbXBpbGVyCitnZW5lcmF0ZXMgPGNvZGU+c2V0aC9hZGQzPC9jb2RlPiBpbnN0cnVjdGlvbnMgdG8gbG9hZCB0aGVpciBhZGRyZXNzZXMpLCBhbmQKK2Fzc3VtZSBhbGwgc3Vicm91dGluZXMgYXJlIHJlYWNoYWJsZSB3aXRoIHRoZSA8Y29kZT5ibDwvY29kZT4gaW5zdHJ1Y3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW1vZGVsPWxhcmdlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbW9kZWxfMDAzZGxhcmdlLTE1OTkiPjwvYT5Bc3N1bWUgb2JqZWN0cyBtYXkgYmUgYW55d2hlcmUgaW4gdGhlIDMyLWJpdCBhZGRyZXNzIHNwYWNlICh0aGUgY29tcGlsZXIKK2dlbmVyYXRlcyA8Y29kZT5zZXRoL2FkZDM8L2NvZGU+IGluc3RydWN0aW9ucyB0byBsb2FkIHRoZWlyIGFkZHJlc3NlcyksIGFuZAorYXNzdW1lIHN1YnJvdXRpbmVzIG1heSBub3QgYmUgcmVhY2hhYmxlIHdpdGggdGhlIDxjb2RlPmJsPC9jb2RlPiBpbnN0cnVjdGlvbgorKHRoZSBjb21waWxlciBnZW5lcmF0ZXMgdGhlIG11Y2ggc2xvd2VyIDxjb2RlPnNldGgvYWRkMy9qbDwvY29kZT4KK2luc3RydWN0aW9uIHNlcXVlbmNlKS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RhdGE9bm9uZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNkYXRhXzAwM2Rub25lLTE2MDAiPjwvYT5EaXNhYmxlIHVzZSBvZiB0aGUgc21hbGwgZGF0YSBhcmVhLiAgVmFyaWFibGVzIGFyZSBwdXQgaW50bworb25lIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmJzczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ucm9kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87ICh1bmxlc3MgdGhlCis8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRyaWJ1dGUgaGFzIGJlZW4gc3BlY2lmaWVkKS4gCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxwPlRoZSBzbWFsbCBkYXRhIGFyZWEgY29uc2lzdHMgb2Ygc2VjdGlvbnMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2RhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNic3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorT2JqZWN0cyBtYXkgYmUgZXhwbGljaXRseSBwdXQgaW4gdGhlIHNtYWxsIGRhdGEgYXJlYSB3aXRoIHRoZQorPGNvZGU+c2VjdGlvbjwvY29kZT4gYXR0cmlidXRlIHVzaW5nIG9uZSBvZiB0aGVzZSBzZWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RhdGE9c2RhdGE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zZGF0YV8wMDNkc2RhdGEtMTYwMSI+PC9hPlB1dCBzbWFsbCBnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSBzbWFsbCBkYXRhIGFyZWEsIGJ1dCBkbyBub3QKK2dlbmVyYXRlIHNwZWNpYWwgY29kZSB0byByZWZlcmVuY2UgdGhlbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RhdGE9dXNlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2RhdGFfMDAzZHVzZS0xNjAyIj48L2E+UHV0IHNtYWxsIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlIHNtYWxsIGRhdGEgYXJlYSwgYW5kIGdlbmVyYXRlCitzcGVjaWFsIGluc3RydWN0aW9ucyB0byByZWZlcmVuY2UgdGhlbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1HIDwvY29kZT48dmFyPm51bTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1HLTE2MDMiPjwvYT48YSBuYW1lPSJpbmRleC1zbWFsbGVyLWRhdGEtcmVmZXJlbmNlcy0xNjA0Ij48L2E+UHV0IGdsb2JhbCBhbmQgc3RhdGljIG9iamVjdHMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDx2YXI+bnVtPC92YXI+IGJ5dGVzCitpbnRvIHRoZSBzbWFsbCBkYXRhIG9yIEJTUyBzZWN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgZGF0YSBvciBCU1MKK3NlY3Rpb25zLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgPHZhcj5udW08L3Zhcj4gaXMgOC4gCitUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zZGF0YTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBtdXN0IGJlIHNldCB0byBvbmUgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOworZm9yIHRoaXMgb3B0aW9uIHRvIGhhdmUgYW55IGVmZmVjdC4KKworICAgICA8cD5BbGwgbW9kdWxlcyBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCB0aGUgc2FtZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRyA8L3NwYW4+PHZhcj5udW08L3Zhcj48L3NhbXA+IHZhbHVlLiAKK0NvbXBpbGluZyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgb2YgPHZhcj5udW08L3Zhcj4gbWF5IG9yIG1heSBub3Qgd29yazsgaWYgaXQKK2RvZXNuJ3QgdGhlIGxpbmtlciBnaXZlcyBhbiBlcnJvciBtZXNzYWdlJm1kYXNoO2luY29ycmVjdCBjb2RlIGlzIG5vdAorZ2VuZXJhdGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kZWJ1ZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWRlYnVnLTE2MDUiPjwvYT5NYWtlcyB0aGUgTTMyUi1zcGVjaWZpYyBjb2RlIGluIHRoZSBjb21waWxlciBkaXNwbGF5IHNvbWUgc3RhdGlzdGljcwordGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZyBwcm9ncmFtcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWxpZ24tbG9vcHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hbGlnbl8wMDJkbG9vcHMtMTYwNiI+PC9hPkFsaWduIGFsbCBsb29wcyB0byBhIDMyLWJ5dGUgYm91bmRhcnkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWFsaWduLWxvb3BzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGFsaWduXzAwMmRsb29wcy0xNjA3Ij48L2E+RG8gbm90IGVuZm9yY2UgYSAzMi1ieXRlIGFsaWdubWVudCBmb3IgbG9vcHMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pc3N1ZS1yYXRlPTwvY29kZT48dmFyPm51bWJlcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1taXNzdWVfMDAyZHJhdGVfMDAzZF8wMDQwdmFyXzAwN2JudW1iZXJfMDA3ZC0xNjA4Ij48L2E+SXNzdWUgPHZhcj5udW1iZXI8L3Zhcj4gaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZS4gIDx2YXI+bnVtYmVyPC92YXI+IGNhbiBvbmx5IGJlIDEKK29yIDIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJyYW5jaC1jb3N0PTwvY29kZT48dmFyPm51bWJlcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tYnJhbmNoXzAwMmRjb3N0XzAwM2RfMDA0MHZhcl8wMDdibnVtYmVyXzAwN2QtMTYwOSI+PC9hPjx2YXI+bnVtYmVyPC92YXI+IGNhbiBvbmx5IGJlIDEgb3IgMi4gIElmIGl0IGlzIDEgdGhlbiBicmFuY2hlcyBhcmUKK3ByZWZlcnJlZCBvdmVyIGNvbmRpdGlvbmFsIGNvZGUsIGlmIGl0IGlzIDIsIHRoZW4gdGhlIG9wcG9zaXRlIGFwcGxpZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZsdXNoLXRyYXA9PC9jb2RlPjx2YXI+bnVtYmVyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1mbHVzaF8wMDJkdHJhcF8wMDNkXzAwNDB2YXJfMDA3Ym51bWJlcl8wMDdkLTE2MTAiPjwvYT5TcGVjaWZpZXMgdGhlIHRyYXAgbnVtYmVyIHRvIHVzZSB0byBmbHVzaCB0aGUgY2FjaGUuICBUaGUgZGVmYXVsdCBpcworMTIuICBWYWxpZCBudW1iZXJzIGFyZSBiZXR3ZWVuIDAgYW5kIDE1IGluY2x1c2l2ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tZmx1c2gtdHJhcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRmbHVzaF8wMDJkdHJhcC0xNjExIj48L2E+U3BlY2lmaWVzIHRoYXQgdGhlIGNhY2hlIGNhbm5vdCBiZSBmbHVzaGVkIGJ5IHVzaW5nIGEgdHJhcC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZmx1c2gtZnVuYz08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1mbHVzaF8wMDJkZnVuY18wMDNkXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC0xNjEyIj48L2E+U3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZ1bmN0aW9uIHRvIGNhbGwgdG8gZmx1c2gKK3RoZSBjYWNoZS4gIFRoZSBkZWZhdWx0IGlzIDxlbT5fZmx1c2hfY2FjaGU8L2VtPiwgYnV0IGEgZnVuY3Rpb24gY2FsbAoraXMgb25seSB1c2VkIGlmIGEgdHJhcCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1mbHVzaC1mdW5jPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZsdXNoXzAwMmRmdW5jLTE2MTMiPjwvYT5JbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyBPUyBmdW5jdGlvbiBmb3IgZmx1c2hpbmcgdGhlIGNhY2hlLgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTTY4MHgwLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTTY4MHgwLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTBiYjQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NNjgweDAtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMzUyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NNjgweDAgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiIHRpdGxlPSJNMzJSL0QgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNNQ29yZS1PcHRpb25zIiB0aXRsZT0iTUNvcmUgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNNjgweDAtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjTUNvcmUtT3B0aW9ucyI+TUNvcmUgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI00zMlJfMDAyZkQtT3B0aW9ucyI+TTMyUi9EIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMjIgTTY4MHgwIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NNjgweDAtb3B0aW9ucy0xNjE0Ij48L2E+CitUaGVzZSBhcmUgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucyBkZWZpbmVkIGZvciBNNjgweDAgYW5kIENvbGRGaXJlIHByb2Nlc3NvcnMuIAorVGhlIGRlZmF1bHQgc2V0dGluZ3MgZGVwZW5kIG9uIHdoaWNoIGFyY2hpdGVjdHVyZSB3YXMgc2VsZWN0ZWQgd2hlbgordGhlIGNvbXBpbGVyIHdhcyBjb25maWd1cmVkOyB0aGUgZGVmYXVsdHMgZm9yIHRoZSBtb3N0IGNvbW1vbiBjaG9pY2VzCithcmUgZ2l2ZW4gYmVsb3cuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tYXJjaD08L2NvZGU+PHZhcj5hcmNoPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1hcmNoLTE2MTUiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciBhIHNwZWNpZmljIE02ODB4MCBvciBDb2xkRmlyZSBpbnN0cnVjdGlvbiBzZXQKK2FyY2hpdGVjdHVyZS4gIFBlcm1pc3NpYmxlIHZhbHVlcyBvZiA8dmFyPmFyY2g8L3Zhcj4gZm9yIE02ODB4MAorYXJjaGl0ZWN0dXJlcyBhcmU6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjgwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjgwMTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjgwMjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MDMwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MDQwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MDYwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNwdTMyPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgQ29sZEZpcmUKK2FyY2hpdGVjdHVyZXMgYXJlIHNlbGVjdGVkIGFjY29yZGluZyB0byBGcmVlc2NhbGUncyBJU0EgY2xhc3NpZmljYXRpb24KK2FuZCB0aGUgcGVybWlzc2libGUgdmFsdWVzIGFyZTogJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pc2FhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlzYWFwbHVzPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pc2FiPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlzYWM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+R0NDIGRlZmluZXMgYSBtYWNybyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fbWNmPC9zcGFuPjx2YXI+YXJjaDwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5fXzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aGVuZXZlciBpdCBpcyBnZW5lcmF0aW5nCitjb2RlIGZvciBhIENvbGRGaXJlIHRhcmdldC4gIFRoZSA8dmFyPmFyY2g8L3Zhcj4gaW4gdGhpcyBtYWNybyBpcyBvbmUgb2YgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiBhcmd1bWVudHMgZ2l2ZW4gYWJvdmUuCisKKyAgICAgPHA+V2hlbiB1c2VkIHRvZ2V0aGVyLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPC9zcGFuPjwvc2FtcD4gc2VsZWN0IGNvZGUKK3RoYXQgcnVucyBvbiBhIGZhbWlseSBvZiBzaW1pbGFyIHByb2Nlc3NvcnMgYnV0IHRoYXQgaXMgb3B0aW1pemVkCitmb3IgYSBwYXJ0aWN1bGFyIG1pY3JvYXJjaGl0ZWN0dXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jcHU9PC9jb2RlPjx2YXI+Y3B1PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1jcHUtMTYxNiI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIGEgc3BlY2lmaWMgTTY4MHgwIG9yIENvbGRGaXJlIHByb2Nlc3Nvci4gCitUaGUgTTY4MHgwIDx2YXI+Y3B1PC92YXI+cyBhcmU6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjgwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjgwMTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjgwMjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MDMwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MDQwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MDYwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MzAyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MzMyPC9zcGFuPjwvc2FtcD4mcnNxdW87CithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jcHUzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSBDb2xkRmlyZSA8dmFyPmNwdTwvdmFyPnMgYXJlIGdpdmVuIGJ5IHRoZSB0YWJsZQorYmVsb3csIHdoaWNoIGFsc28gY2xhc3NpZmllcyB0aGUgQ1BVcyBpbnRvIGZhbWlsaWVzOgorCisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48c3Ryb25nPkZhbWlseTwvc3Ryb25nPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PHN0cm9uZz4mbHNxdW87PC9zdHJvbmc+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tY3B1PC9zcGFuPjwvc2FtcD48c3Ryb25nPiZyc3F1bzsgYXJndW1lbnRzPC9zdHJvbmc+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUxPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUxPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTFhYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUxYWc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MWNuPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTFlbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUxamU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MWpmPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTFqZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUxam08L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MW1tPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTFxZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUxcW08L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIwNjwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjAyPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIwNDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMDY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIwNmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIwNmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIwODwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjA3PC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIwODwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjExYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjEwYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMTFhPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMTM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIxMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMTI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjEzPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIxNDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIyMzU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIyMzA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjIzMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMjMyPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIyMzM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjIzNDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMjM1PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMjU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIyNDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMjU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIyNTk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIyNTI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjI1NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMjU1PC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIyNTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjI1ODwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMjU5PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMzU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyMzM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjM0PC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTIzNTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyM3g8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTI0OTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjQ5PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyNTA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTI1MDwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjcxPC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyNzA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjcxPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyNzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTI3Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41Mjc1PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyNzQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41Mjc1PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyODI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTI4MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUyODE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MjgyPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTI4eDwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MzAxNzwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MzAxMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUzMDEyPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTMwMTM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MzAxNDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUzMDE1PC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTMwMTY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MzAxNzwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MzA3PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUzMDc8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTMyOTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MzI3PC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTMyODwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUzMjk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41MzJ4PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUzNzM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTM3Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUzNzM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41Mzd4PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjU0MDc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTQwNzwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41NDc1PC9zcGFuPjwvc2FtcD4mcnNxdW87IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjU0NzA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41NDcxPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTQ3Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjU0NzM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41NDc0PC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTQ3NTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjU0N3g8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41NDgwPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTQ4MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjU0ODI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41NDgzPC9zcGFuPjwvc2FtcD4mcnNxdW87ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NTQ4NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjU0ODU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PTwvc3Bhbj48dmFyPmNwdTwvdmFyPjwvc2FtcD4gb3ZlcnJpZGVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD08L3NwYW4+PHZhcj5hcmNoPC92YXI+PC9zYW1wPiBpZgorPHZhcj5hcmNoPC92YXI+IGlzIGNvbXBhdGlibGUgd2l0aCA8dmFyPmNwdTwvdmFyPi4gIE90aGVyIGNvbWJpbmF0aW9ucyBvZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gYXJlIHJlamVjdGVkLgorCisgICAgIDxwPkdDQyBkZWZpbmVzIHRoZSBtYWNybyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fbWNmX2NwdV88L3NwYW4+PHZhcj5jcHU8L3Zhcj48L3NhbXA+JnJzcXVvOyB3aGVuIENvbGRGaXJlIHRhcmdldAorPHZhcj5jcHU8L3Zhcj4gaXMgc2VsZWN0ZWQuICBJdCBhbHNvIGRlZmluZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX21jZl9mYW1pbHlfPC9zcGFuPjx2YXI+ZmFtaWx5PC92YXI+PC9zYW1wPiZyc3F1bzssCit3aGVyZSB0aGUgdmFsdWUgb2YgPHZhcj5mYW1pbHk8L3Zhcj4gaXMgZ2l2ZW4gYnkgdGhlIHRhYmxlIGFib3ZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10dW5lPTwvY29kZT48dmFyPnR1bmU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXR1bmUtMTYxNyI+PC9hPlR1bmUgdGhlIGNvZGUgZm9yIGEgcGFydGljdWxhciBtaWNyb2FyY2hpdGVjdHVyZSB3aXRoaW4gdGhlCitjb25zdHJhaW50cyBzZXQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PC9zcGFuPjwvc2FtcD4uIAorVGhlIE02ODB4MCBtaWNyb2FyY2hpdGVjdHVyZXMgYXJlOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjY4MDEwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj42ODAyMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj42ODAzMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj42ODA0MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj42ODA2MDwvc3Bhbj48L3NhbXA+JnJzcXVvOworYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3B1MzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUgQ29sZEZpcmUgbWljcm9hcmNoaXRlY3R1cmVzCithcmU6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2Z2MTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jZnYyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNmdjM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2Z2NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jZnY0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5Zb3UgY2FuIGFsc28gdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZT02ODAyMC00MDwvc3Bhbj48L3NhbXA+IGZvciBjb2RlIHRoYXQgbmVlZHMKK3RvIHJ1biByZWxhdGl2ZWx5IHdlbGwgb24gNjgwMjAsIDY4MDMwIGFuZCA2ODA0MCB0YXJnZXRzLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZT02ODAyMC02MDwvc3Bhbj48L3NhbXA+IGlzIHNpbWlsYXIgYnV0IGluY2x1ZGVzIDY4MDYwIHRhcmdldHMKK2FzIHdlbGwuICBUaGVzZSB0d28gb3B0aW9ucyBzZWxlY3QgdGhlIHNhbWUgdHVuaW5nIGRlY2lzaW9ucyBhcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW02ODAyMC00MDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTY4MDIwLTYwPC9zcGFuPjwvc2FtcD4gcmVzcGVjdGl2ZWx5LgorCisgICAgIDxwPkdDQyBkZWZpbmVzIHRoZSBtYWNyb3MgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX21jPC9zcGFuPjx2YXI+YXJjaDwvdmFyPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fbWM8L3NwYW4+PHZhcj5hcmNoPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPl9fPC9zcGFuPjwvc2FtcD4mcnNxdW87Cit3aGVuIHR1bmluZyBmb3IgNjgweDAgYXJjaGl0ZWN0dXJlIDx2YXI+YXJjaDwvdmFyPi4gIEl0IGFsc28gZGVmaW5lcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tYzwvc3Bhbj48dmFyPmFyY2g8L3Zhcj48L3NhbXA+JnJzcXVvOyB1bmxlc3MgZWl0aGVyIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb3IgYSBub24tR05VIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ8L3NwYW4+PC9zYW1wPgorb3B0aW9uIGlzIHVzZWQuICBJZiBHQ0MgaXMgdHVuaW5nIGZvciBhIHJhbmdlIG9mIGFyY2hpdGVjdHVyZXMsCithcyBzZWxlY3RlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXR1bmU9NjgwMjAtNDA8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXR1bmU9NjgwMjAtNjA8L3NwYW4+PC9zYW1wPiwKK2l0IGRlZmluZXMgdGhlIG1hY3JvcyBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlIGluIHRoZSByYW5nZS4KKworICAgICA8cD5HQ0MgYWxzbyBkZWZpbmVzIHRoZSBtYWNybyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fbTwvc3Bhbj48dmFyPnVhcmNoPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPl9fPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoZW4gdHVuaW5nIGZvcgorQ29sZEZpcmUgbWljcm9hcmNoaXRlY3R1cmUgPHZhcj51YXJjaDwvdmFyPiwgd2hlcmUgPHZhcj51YXJjaDwvdmFyPiBpcyBvbmUKK29mIHRoZSBhcmd1bWVudHMgZ2l2ZW4gYWJvdmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTY4MDAwPC9jb2RlPjxkdD48Y29kZT4tbWM2ODAwMDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTY4MDAwLTE2MTgiPjwvYT48YSBuYW1lPSJpbmRleC1tYzY4MDAwLTE2MTkiPjwvYT5HZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNjgwMDAuICBUaGlzIGlzIHRoZSBkZWZhdWx0Cit3aGVuIHRoZSBjb21waWxlciBpcyBjb25maWd1cmVkIGZvciA2ODAwMC1iYXNlZCBzeXN0ZW1zLiAKK0l0IGlzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPTY4MDAwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VXNlIHRoaXMgb3B0aW9uIGZvciBtaWNyb2NvbnRyb2xsZXJzIHdpdGggYSA2ODAwMCBvciBFQzAwMCBjb3JlLAoraW5jbHVkaW5nIHRoZSA2ODAwOCwgNjgzMDIsIDY4MzA2LCA2ODMwNywgNjgzMjIsIDY4MzI4IGFuZCA2ODM1Ni4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tNjgwMTA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW02ODAxMC0xNjIwIj48L2E+R2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDEwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAord2hlbiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCBmb3IgNjgwMTAtYmFzZWQgc3lzdGVtcy4gCitJdCBpcyBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD02ODAxMDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW02ODAyMDwvY29kZT48ZHQ+PGNvZGU+LW1jNjgwMjA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW02ODAyMC0xNjIxIj48L2E+PGEgbmFtZT0iaW5kZXgtbWM2ODAyMC0xNjIyIj48L2E+R2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDIwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAord2hlbiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCBmb3IgNjgwMjAtYmFzZWQgc3lzdGVtcy4gCitJdCBpcyBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD02ODAyMDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW02ODAzMDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTY4MDMwLTE2MjMiPjwvYT5HZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNjgwMzAuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGNvbXBpbGVyIGlzCitjb25maWd1cmVkIGZvciA2ODAzMC1iYXNlZCBzeXN0ZW1zLiAgSXQgaXMgZXF1aXZhbGVudCB0bworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPTY4MDMwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTY4MDQwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNjgwNDAtMTYyNCI+PC9hPkdlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODA0MC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2NvbmZpZ3VyZWQgZm9yIDY4MDQwLWJhc2VkIHN5c3RlbXMuICBJdCBpcyBlcXVpdmFsZW50IHRvCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9NjgwNDA8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpbmhpYml0cyB0aGUgdXNlIG9mIDY4ODgxLzY4ODgyIGluc3RydWN0aW9ucyB0aGF0IGhhdmUgdG8gYmUKK2VtdWxhdGVkIGJ5IHNvZnR3YXJlIG9uIHRoZSA2ODA0MC4gIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3VyIDY4MDQwIGRvZXMgbm90CitoYXZlIGNvZGUgdG8gZW11bGF0ZSB0aG9zZSBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTY4MDYwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNjgwNjAtMTYyNSI+PC9hPkdlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODA2MC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2NvbmZpZ3VyZWQgZm9yIDY4MDYwLWJhc2VkIHN5c3RlbXMuICBJdCBpcyBlcXVpdmFsZW50IHRvCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9NjgwNjA8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpbmhpYml0cyB0aGUgdXNlIG9mIDY4MDIwIGFuZCA2ODg4MS82ODg4MiBpbnN0cnVjdGlvbnMgdGhhdAoraGF2ZSB0byBiZSBlbXVsYXRlZCBieSBzb2Z0d2FyZSBvbiB0aGUgNjgwNjAuICBVc2UgdGhpcyBvcHRpb24gaWYgeW91ciA2ODA2MAorZG9lcyBub3QgaGF2ZSBjb2RlIHRvIGVtdWxhdGUgdGhvc2UgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jcHUzMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNwdTMyLTE2MjYiPjwvYT5HZW5lcmF0ZSBvdXRwdXQgZm9yIGEgQ1BVMzIuICBUaGlzIGlzIHRoZSBkZWZhdWx0Cit3aGVuIHRoZSBjb21waWxlciBpcyBjb25maWd1cmVkIGZvciBDUFUzMi1iYXNlZCBzeXN0ZW1zLiAKK0l0IGlzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPWNwdTMyPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VXNlIHRoaXMgb3B0aW9uIGZvciBtaWNyb2NvbnRyb2xsZXJzIHdpdGggYQorQ1BVMzIgb3IgQ1BVMzIrIGNvcmUsIGluY2x1ZGluZyB0aGUgNjgzMzAsIDY4MzMxLCA2ODMzMiwgNjgzMzMsIDY4MzM0LAorNjgzMzYsIDY4MzQwLCA2ODM0MSwgNjgzNDkgYW5kIDY4MzYwLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW01MjAwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNTIwMC0xNjI3Ij48L2E+R2VuZXJhdGUgb3V0cHV0IGZvciBhIDUyMFggQ29sZEZpcmUgQ1BVLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAord2hlbiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCBmb3IgNTIwWC1iYXNlZCBzeXN0ZW1zLiAKK0l0IGlzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9NTIwNjwvc3Bhbj48L3NhbXA+LCBhbmQgaXMgbm93IGRlcHJlY2F0ZWQKK2luIGZhdm9yIG9mIHRoYXQgb3B0aW9uLgorCisgICAgIDxwPlVzZSB0aGlzIG9wdGlvbiBmb3IgbWljcm9jb250cm9sbGVyIHdpdGggYSA1MjAwIGNvcmUsIGluY2x1ZGluZwordGhlIE1DRjUyMDIsIE1DRjUyMDMsIE1DRjUyMDQgYW5kIE1DRjUyMDYuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTUyMDZlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNTIwNmUtMTYyOCI+PC9hPkdlbmVyYXRlIG91dHB1dCBmb3IgYSA1MjA2ZSBDb2xkRmlyZSBDUFUuICBUaGUgb3B0aW9uIGlzIG5vdworZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgZXF1aXZhbGVudCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT01MjA2ZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW01Mjh4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNTI4eC0xNjI5Ij48L2E+R2VuZXJhdGUgb3V0cHV0IGZvciBhIG1lbWJlciBvZiB0aGUgQ29sZEZpcmUgNTI4WCBmYW1pbHkuIAorVGhlIG9wdGlvbiBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgZXF1aXZhbGVudAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9NTI4eDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW01MzA3PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNTMwNy0xNjMwIj48L2E+R2VuZXJhdGUgb3V0cHV0IGZvciBhIENvbGRGaXJlIDUzMDcgQ1BVLiAgVGhlIG9wdGlvbiBpcyBub3cgZGVwcmVjYXRlZAoraW4gZmF2b3Igb2YgdGhlIGVxdWl2YWxlbnQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9NTMwNzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW01NDA3PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNTQwNy0xNjMxIj48L2E+R2VuZXJhdGUgb3V0cHV0IGZvciBhIENvbGRGaXJlIDU0MDcgQ1BVLiAgVGhlIG9wdGlvbiBpcyBub3cgZGVwcmVjYXRlZAoraW4gZmF2b3Igb2YgdGhlIGVxdWl2YWxlbnQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9NTQwNzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jZnY0ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNmdjRlLTE2MzIiPjwvYT5HZW5lcmF0ZSBvdXRwdXQgZm9yIGEgQ29sZEZpcmUgVjRlIGZhbWlseSBDUFUgKGUuZy4gNTQ3eC81NDh4KS4gCitUaGlzIGluY2x1ZGVzIHVzZSBvZiBoYXJkd2FyZSBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuIAorVGhlIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PTU0N3g8L3NwYW4+PC9zYW1wPiwgYW5kIGlzIG5vdworZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGF0IG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tNjgwMjAtNDA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW02ODAyMF8wMDJkNDAtMTYzMyI+PC9hPkdlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODA0MCwgd2l0aG91dCB1c2luZyBhbnkgb2YgdGhlIG5ldyBpbnN0cnVjdGlvbnMuIAorVGhpcyByZXN1bHRzIGluIGNvZGUgdGhhdCBjYW4gcnVuIHJlbGF0aXZlbHkgZWZmaWNpZW50bHkgb24gZWl0aGVyIGEKKzY4MDIwLzY4ODgxIG9yIGEgNjgwMzAgb3IgYSA2ODA0MC4gIFRoZSBnZW5lcmF0ZWQgY29kZSBkb2VzIHVzZSB0aGUKKzY4ODgxIGluc3RydWN0aW9ucyB0aGF0IGFyZSBlbXVsYXRlZCBvbiB0aGUgNjgwNDAuCisKKyAgICAgPHA+VGhlIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD02ODAyMDwvc3Bhbj48L3NhbXA+IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZT02ODAyMC00MDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW02ODAyMC02MDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTY4MDIwXzAwMmQ2MC0xNjM0Ij48L2E+R2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDYwLCB3aXRob3V0IHVzaW5nIGFueSBvZiB0aGUgbmV3IGluc3RydWN0aW9ucy4gCitUaGlzIHJlc3VsdHMgaW4gY29kZSB0aGF0IGNhbiBydW4gcmVsYXRpdmVseSBlZmZpY2llbnRseSBvbiBlaXRoZXIgYQorNjgwMjAvNjg4ODEgb3IgYSA2ODAzMCBvciBhIDY4MDQwLiAgVGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgdXNlIHRoZQorNjg4ODEgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGVtdWxhdGVkIG9uIHRoZSA2ODA2MC4KKworICAgICA8cD5UaGUgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPTY4MDIwPC9zcGFuPjwvc2FtcD4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPTY4MDIwLTYwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWhhcmQtZmxvYXQ8L2NvZGU+PGR0Pjxjb2RlPi1tNjg4ODE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1oYXJkXzAwMmRmbG9hdC0xNjM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbTY4ODgxLTE2MzYiPjwvYT5HZW5lcmF0ZSBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciA2ODAyMAorYW5kIGFib3ZlLCBhbmQgZm9yIENvbGRGaXJlIGRldmljZXMgdGhhdCBoYXZlIGFuIEZQVS4gIEl0IGRlZmluZXMgdGhlCittYWNybyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fSEFWRV82ODg4MV9fPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIE02ODB4MCB0YXJnZXRzIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fbWNmZnB1X188L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29uIENvbGRGaXJlIHRhcmdldHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNvZnQtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zb2Z0XzAwMmRmbG9hdC0xNjM3Ij48L2E+RG8gbm90IGdlbmVyYXRlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uczsgdXNlIGxpYnJhcnkgY2FsbHMgaW5zdGVhZC4gCitUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciA2ODAwMCwgNjgwMTAsIGFuZCA2ODgzMiB0YXJnZXRzLiAgSXQgaXMgYWxzbwordGhlIGRlZmF1bHQgZm9yIENvbGRGaXJlIGRldmljZXMgdGhhdCBoYXZlIG5vIEZQVS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZGl2PC9jb2RlPjxkdD48Y29kZT4tbW5vLWRpdjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWRpdi0xNjM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRkaXYtMTYzOSI+PC9hPkdlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIENvbGRGaXJlIGhhcmR3YXJlIGRpdmlkZSBhbmQgcmVtYWluZGVyCitpbnN0cnVjdGlvbnMuICBJZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiBpcyB1c2VkIHdpdGhvdXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiwKK3RoZSBkZWZhdWx0IGlzICZsZHF1bztvbiZyZHF1bzsgZm9yIENvbGRGaXJlIGFyY2hpdGVjdHVyZXMgYW5kICZsZHF1bztvZmYmcmRxdW87IGZvciBNNjgweDAKK2FyY2hpdGVjdHVyZXMuICBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIHRha2VuIGZyb20gdGhlIHRhcmdldCBDUFUKKyhlaXRoZXIgdGhlIGRlZmF1bHQgQ1BVLCBvciB0aGUgb25lIHNwZWNpZmllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdTwvc3Bhbj48L3NhbXA+KS4gIEZvcgorZXhhbXBsZSwgdGhlIGRlZmF1bHQgaXMgJmxkcXVvO29mZiZyZHF1bzsgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PTUyMDY8L3NwYW4+PC9zYW1wPiBhbmQgJmxkcXVvO29uJnJkcXVvOyBmb3IKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PTUyMDZlPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+R0NDIGRlZmluZXMgdGhlIG1hY3JvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19tY2Zod2Rpdl9fPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2hvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaG9ydC0xNjQwIj48L2E+Q29uc2lkZXIgdHlwZSA8Y29kZT5pbnQ8L2NvZGU+IHRvIGJlIDE2IGJpdHMgd2lkZSwgbGlrZSA8Y29kZT5zaG9ydCBpbnQ8L2NvZGU+LiAKK0FkZGl0aW9uYWxseSwgcGFyYW1ldGVycyBwYXNzZWQgb24gdGhlIHN0YWNrIGFyZSBhbHNvIGFsaWduZWQgdG8gYQorMTYtYml0IGJvdW5kYXJ5IGV2ZW4gb24gdGFyZ2V0cyB3aG9zZSBBUEkgbWFuZGF0ZXMgcHJvbW90aW9uIHRvIDMyLWJpdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tc2hvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2hvcnQtMTY0MSI+PC9hPkRvIG5vdCBjb25zaWRlciB0eXBlIDxjb2RlPmludDwvY29kZT4gdG8gYmUgMTYgYml0cyB3aWRlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm9iaXRmaWVsZDwvY29kZT48ZHQ+PGNvZGU+LW1uby1iaXRmaWVsZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vYml0ZmllbGQtMTY0MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYml0ZmllbGQtMTY0MyI+PC9hPkRvIG5vdCB1c2UgdGhlIGJpdC1maWVsZCBpbnN0cnVjdGlvbnMuICBUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW02ODAwMDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdTMyPC9zcGFuPjwvc2FtcD4KK2FuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTUyMDA8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGltcGx5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm9iaXRmaWVsZDwvc3Bhbj48L3NhbXA+PCEtLSAvQHcgLS0+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1iaXRmaWVsZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWJpdGZpZWxkLTE2NDQiPjwvYT5EbyB1c2UgdGhlIGJpdC1maWVsZCBpbnN0cnVjdGlvbnMuICBUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW02ODAyMDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpbXBsaWVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWJpdGZpZWxkPC9zcGFuPjwvc2FtcD4uICBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIHlvdSB1c2UgYSBjb25maWd1cmF0aW9uCitkZXNpZ25lZCBmb3IgYSA2ODAyMC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcnRkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcnRkLTE2NDUiPjwvYT5Vc2UgYSBkaWZmZXJlbnQgZnVuY3Rpb24tY2FsbGluZyBjb252ZW50aW9uLCBpbiB3aGljaCBmdW5jdGlvbnMKK3RoYXQgdGFrZSBhIGZpeGVkIG51bWJlciBvZiBhcmd1bWVudHMgcmV0dXJuIHdpdGggdGhlIDxjb2RlPnJ0ZDwvY29kZT4KK2luc3RydWN0aW9uLCB3aGljaCBwb3BzIHRoZWlyIGFyZ3VtZW50cyB3aGlsZSByZXR1cm5pbmcuICBUaGlzCitzYXZlcyBvbmUgaW5zdHJ1Y3Rpb24gaW4gdGhlIGNhbGxlciBzaW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIHBvcAordGhlIGFyZ3VtZW50cyB0aGVyZS4KKworICAgICA8cD5UaGlzIGNhbGxpbmcgY29udmVudGlvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb25lIG5vcm1hbGx5Cit1c2VkIG9uIFVuaXgsIHNvIHlvdSBjYW5ub3QgdXNlIGl0IGlmIHlvdSBuZWVkIHRvIGNhbGwgbGlicmFyaWVzCitjb21waWxlZCB3aXRoIHRoZSBVbml4IGNvbXBpbGVyLgorCisgICAgIDxwPkFsc28sIHlvdSBtdXN0IHByb3ZpZGUgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYWxsIGZ1bmN0aW9ucyB0aGF0Cit0YWtlIHZhcmlhYmxlIG51bWJlcnMgb2YgYXJndW1lbnRzIChpbmNsdWRpbmcgPGNvZGU+cHJpbnRmPC9jb2RlPik7CitvdGhlcndpc2UgaW5jb3JyZWN0IGNvZGUgaXMgZ2VuZXJhdGVkIGZvciBjYWxscyB0byB0aG9zZQorZnVuY3Rpb25zLgorCisgICAgIDxwPkluIGFkZGl0aW9uLCBzZXJpb3VzbHkgaW5jb3JyZWN0IGNvZGUgcmVzdWx0cyBpZiB5b3UgY2FsbCBhCitmdW5jdGlvbiB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cy4gIChOb3JtYWxseSwgZXh0cmEgYXJndW1lbnRzIGFyZQoraGFybWxlc3NseSBpZ25vcmVkLikKKworICAgICA8cD5UaGUgPGNvZGU+cnRkPC9jb2RlPiBpbnN0cnVjdGlvbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIDY4MDEwLCA2ODAyMCwgNjgwMzAsCis2ODA0MCwgNjgwNjAgYW5kIENQVTMyIHByb2Nlc3NvcnMsIGJ1dCBub3QgYnkgdGhlIDY4MDAwIG9yIDUyMDAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXJ0ZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRydGQtMTY0NiI+PC9hPkRvIG5vdCB1c2UgdGhlIGNhbGxpbmcgY29udmVudGlvbnMgc2VsZWN0ZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1ydGQ8L3NwYW4+PC9zYW1wPi4gCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hbGlnbi1pbnQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tYWxpZ24taW50PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYWxpZ25fMDAyZGludC0xNjQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRhbGlnbl8wMDJkaW50LTE2NDgiPjwvYT5Db250cm9sIHdoZXRoZXIgR0NDIGFsaWducyA8Y29kZT5pbnQ8L2NvZGU+LCA8Y29kZT5sb25nPC9jb2RlPiwgPGNvZGU+bG9uZyBsb25nPC9jb2RlPiwKKzxjb2RlPmZsb2F0PC9jb2RlPiwgPGNvZGU+ZG91YmxlPC9jb2RlPiwgYW5kIDxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPiB2YXJpYWJsZXMgb24gYSAzMi1iaXQKK2JvdW5kYXJ5ICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFsaWduLWludDwvc3Bhbj48L3NhbXA+KSBvciBhIDE2LWJpdCBib3VuZGFyeSAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1hbGlnbi1pbnQ8L3NwYW4+PC9zYW1wPikuIAorQWxpZ25pbmcgdmFyaWFibGVzIG9uIDMyLWJpdCBib3VuZGFyaWVzIHByb2R1Y2VzIGNvZGUgdGhhdCBydW5zIHNvbWV3aGF0CitmYXN0ZXIgb24gcHJvY2Vzc29ycyB3aXRoIDMyLWJpdCBidXNzZXMgYXQgdGhlIGV4cGVuc2Ugb2YgbW9yZSBtZW1vcnkuCisKKyAgICAgPHA+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiBpZiB5b3UgdXNlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFsaWduLWludDwvc3Bhbj48L3NhbXA+IHN3aXRjaCwgR0NDCithbGlnbnMgc3RydWN0dXJlcyBjb250YWluaW5nIHRoZSBhYm92ZSB0eXBlcyBkaWZmZXJlbnRseSB0aGFuCittb3N0IHB1Ymxpc2hlZCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlIHNwZWNpZmljYXRpb25zIGZvciB0aGUgbTY4ay4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcGNyZWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wY3JlbC0xNjQ5Ij48L2E+VXNlIHRoZSBwYy1yZWxhdGl2ZSBhZGRyZXNzaW5nIG1vZGUgb2YgdGhlIDY4MDAwIGRpcmVjdGx5LCBpbnN0ZWFkIG9mCit1c2luZyBhIGdsb2JhbCBvZmZzZXQgdGFibGUuICBBdCBwcmVzZW50LCB0aGlzIG9wdGlvbiBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGljPC9zcGFuPjwvc2FtcD4sCithbGxvd2luZyBhdCBtb3N0IGEgMTYtYml0IG9mZnNldCBmb3IgcGMtcmVsYXRpdmUgYWRkcmVzc2luZy4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4gaXMKK25vdCBwcmVzZW50bHkgc3VwcG9ydGVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wY3JlbDwvc3Bhbj48L3NhbXA+LCB0aG91Z2ggdGhpcyBjb3VsZCBiZSBzdXBwb3J0ZWQgZm9yCis2ODAyMCBhbmQgaGlnaGVyIHByb2Nlc3NvcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXN0cmljdC1hbGlnbjwvY29kZT48ZHQ+PGNvZGU+LW1zdHJpY3QtYWxpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc3RyaWN0XzAwMmRhbGlnbi0xNjUwIj48L2E+PGEgbmFtZT0iaW5kZXgtbXN0cmljdF8wMDJkYWxpZ24tMTY1MSI+PC9hPkRvIG5vdCAoZG8pIGFzc3VtZSB0aGF0IHVuYWxpZ25lZCBtZW1vcnkgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBieQordGhlIHN5c3RlbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2VwLWRhdGE8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgdGhlIGRhdGEgc2VnbWVudCB0byBiZSBsb2NhdGVkIGluIGEgZGlmZmVyZW50CithcmVhIG9mIG1lbW9yeSBmcm9tIHRoZSB0ZXh0IHNlZ21lbnQuICBUaGlzIGFsbG93cyBmb3IgZXhlY3V0ZS1pbi1wbGFjZSBpbgorYW4gZW52aXJvbm1lbnQgd2l0aG91dCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiAgVGhpcyBvcHRpb24gaW1wbGllcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZQSUM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tc2VwLWRhdGE8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgdGhhdCBhc3N1bWVzIHRoYXQgdGhlIGRhdGEgc2VnbWVudCBmb2xsb3dzIHRoZSB0ZXh0IHNlZ21lbnQuIAorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taWQtc2hhcmVkLWxpYnJhcnk8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgdGhhdCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIHZpYSB0aGUgbGlicmFyeSBJRCBtZXRob2QuIAorVGhpcyBhbGxvd3MgZm9yIGV4ZWN1dGUtaW4tcGxhY2UgYW5kIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZW52aXJvbm1lbnQKK3dpdGhvdXQgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudC4gIFRoaXMgb3B0aW9uIGltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZQSUM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8taWQtc2hhcmVkLWxpYnJhcnk8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgdGhhdCBkb2Vzbid0IGFzc3VtZSBJRC1iYXNlZCBzaGFyZWQgbGlicmFyaWVzIGFyZSBiZWluZyB1c2VkLiAKK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNoYXJlZC1saWJyYXJ5LWlkPW48L2NvZGU+PGRkPlNwZWNpZmllcyB0aGUgaWRlbnRpZmljYXRpb24gbnVtYmVyIG9mIHRoZSBJRC1iYXNlZCBzaGFyZWQgbGlicmFyeSBiZWluZworY29tcGlsZWQuICBTcGVjaWZ5aW5nIGEgdmFsdWUgb2YgMCBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0IGNvZGU7IHNwZWNpZnlpbmcKK290aGVyIHZhbHVlcyBmb3JjZXMgdGhlIGFsbG9jYXRpb24gb2YgdGhhdCBudW1iZXIgdG8gdGhlIGN1cnJlbnQKK2xpYnJhcnksIGJ1dCBpcyBubyBtb3JlIHNwYWNlLSBvciB0aW1lLWVmZmljaWVudCB0aGFuIG9taXR0aW5nIHRoaXMgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW14Z290PC9jb2RlPjxkdD48Y29kZT4tbW5vLXhnb3Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW14Z290LTE2NTIiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHhnb3QtMTY1MyI+PC9hPldoZW4gZ2VuZXJhdGluZyBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIGZvciBDb2xkRmlyZSwgZ2VuZXJhdGUgY29kZQordGhhdCB3b3JrcyBpZiB0aGUgR09UIGhhcyBtb3JlIHRoYW4gODE5MiBlbnRyaWVzLiAgVGhpcyBjb2RlIGlzCitsYXJnZXIgYW5kIHNsb3dlciB0aGFuIGNvZGUgZ2VuZXJhdGVkIHdpdGhvdXQgdGhpcyBvcHRpb24uICBPbiBNNjgweDAKK3Byb2Nlc3NvcnMsIHRoaXMgb3B0aW9uIGlzIG5vdCBuZWVkZWQ7IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4gc3VmZmljZXMuCisKKyAgICAgPHA+R0NDIG5vcm1hbGx5IHVzZXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gdG8gbG9hZCB2YWx1ZXMgZnJvbSB0aGUgR09ULiAKK1doaWxlIHRoaXMgaXMgcmVsYXRpdmVseSBlZmZpY2llbnQsIGl0IG9ubHkgd29ya3MgaWYgdGhlIEdPVAoraXMgc21hbGxlciB0aGFuIGFib3V0IDY0ay4gIEFueXRoaW5nIGxhcmdlciBjYXVzZXMgdGhlIGxpbmtlcgordG8gcmVwb3J0IGFuIGVycm9yIHN1Y2ggYXM6CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtcmVsb2NhdGlvbi10cnVuY2F0ZWQtdG8tZml0LV8wMDI4Q29sZEZpcmVfMDAyOS0xNjU0Ij48L2E+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl82OEtfR09UMTZPIGZvb2JhcgorPC9wcmU+CisgICAgIDxwPklmIHRoaXMgaGFwcGVucywgeW91IHNob3VsZCByZWNvbXBpbGUgeW91ciBjb2RlIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW14Z290PC9zcGFuPjwvc2FtcD4uIAorSXQgc2hvdWxkIHRoZW4gd29yayB3aXRoIHZlcnkgbGFyZ2UgR09Ucy4gIEhvd2V2ZXIsIGNvZGUgZ2VuZXJhdGVkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1teGdvdDwvc3Bhbj48L3NhbXA+IGlzIGxlc3MgZWZmaWNpZW50LCBzaW5jZSBpdCB0YWtlcyA0IGluc3RydWN0aW9ucyB0byBmZXRjaAordGhlIHZhbHVlIG9mIGEgZ2xvYmFsIHN5bWJvbC4KKworICAgICA8cD5Ob3RlIHRoYXQgc29tZSBsaW5rZXJzLCBpbmNsdWRpbmcgbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIEdOVSBsaW5rZXIsCitjYW4gY3JlYXRlIG11bHRpcGxlIEdPVHMgYW5kIHNvcnQgR09UIGVudHJpZXMuICBJZiB5b3UgaGF2ZSBzdWNoIGEgbGlua2VyLAoreW91IHNob3VsZCBvbmx5IG5lZWQgdG8gdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1teGdvdDwvc3Bhbj48L3NhbXA+IHdoZW4gY29tcGlsaW5nIGEgc2luZ2xlCitvYmplY3QgZmlsZSB0aGF0IGFjY2Vzc2VzIG1vcmUgdGhhbiA4MTkyIEdPVCBlbnRyaWVzLiAgVmVyeSBmZXcgZG8uCisKKyAgICAgPHA+VGhlc2Ugb3B0aW9ucyBoYXZlIG5vIGVmZmVjdCB1bmxlc3MgR0NDIGlzIGdlbmVyYXRpbmcKK3Bvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUuCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NQ29yZS1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01Db3JlLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzhmM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NQ29yZS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUNvcmUgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIiB0aXRsZT0iTTY4MHgwIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIiB0aXRsZT0iTWVQIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUNvcmUtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjIzIE1Db3JlIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NQ29yZS1vcHRpb25zLTE2NTUiPjwvYT4KK1RoZXNlIGFyZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGRlZmluZWQgZm9yIHRoZSBNb3Rvcm9sYSBNKkNvcmUKK3Byb2Nlc3NvcnMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1taGFyZGxpdDwvY29kZT48ZHQ+PGNvZGU+LW1uby1oYXJkbGl0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taGFyZGxpdC0xNjU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRoYXJkbGl0LTE2NTciPjwvYT5JbmxpbmUgY29uc3RhbnRzIGludG8gdGhlIGNvZGUgc3RyZWFtIGlmIGl0IGNhbiBiZSBkb25lIGluIHR3bworaW5zdHJ1Y3Rpb25zIG9yIGxlc3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRpdjwvY29kZT48ZHQ+PGNvZGU+LW1uby1kaXY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1kaXYtMTY1OCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZGl2LTE2NTkiPjwvYT5Vc2UgdGhlIGRpdmlkZSBpbnN0cnVjdGlvbi4gIChFbmFibGVkIGJ5IGRlZmF1bHQpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1yZWxheC1pbW1lZGlhdGU8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcmVsYXgtaW1tZWRpYXRlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcmVsYXhfMDAyZGltbWVkaWF0ZS0xNjYwIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRyZWxheF8wMDJkaW1tZWRpYXRlLTE2NjEiPjwvYT5BbGxvdyBhcmJpdHJhcnktc2l6ZWQgaW1tZWRpYXRlcyBpbiBiaXQgb3BlcmF0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1td2lkZS1iaXRmaWVsZHM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8td2lkZS1iaXRmaWVsZHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW13aWRlXzAwMmRiaXRmaWVsZHMtMTY2MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkd2lkZV8wMDJkYml0ZmllbGRzLTE2NjMiPjwvYT5BbHdheXMgdHJlYXQgYml0LWZpZWxkcyBhcyA8Y29kZT5pbnQ8L2NvZGU+LXNpemVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW00Ynl0ZS1mdW5jdGlvbnM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tNGJ5dGUtZnVuY3Rpb25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNGJ5dGVfMDAyZGZ1bmN0aW9ucy0xNjY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmQ0Ynl0ZV8wMDJkZnVuY3Rpb25zLTE2NjUiPjwvYT5Gb3JjZSBhbGwgZnVuY3Rpb25zIHRvIGJlIGFsaWduZWQgdG8gYSA0LWJ5dGUgYm91bmRhcnkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNhbGxncmFwaC1kYXRhPC9jb2RlPjxkdD48Y29kZT4tbW5vLWNhbGxncmFwaC1kYXRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2FsbGdyYXBoXzAwMmRkYXRhLTE2NjYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGNhbGxncmFwaF8wMDJkZGF0YS0xNjY3Ij48L2E+RW1pdCBjYWxsZ3JhcGggaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNsb3ctYnl0ZXM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc2xvdy1ieXRlczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNsb3dfMDAyZGJ5dGVzLTE2NjgiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHNsb3dfMDAyZGJ5dGVzLTE2NjkiPjwvYT5QcmVmZXIgd29yZCBhY2Nlc3Mgd2hlbiByZWFkaW5nIGJ5dGUgcXVhbnRpdGllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbGl0dGxlLWVuZGlhbjwvY29kZT48ZHQ+PGNvZGU+LW1iaWctZW5kaWFuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbGl0dGxlXzAwMmRlbmRpYW4tMTY3MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1iaWdfMDAyZGVuZGlhbi0xNjcxIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSBsaXR0bGUtZW5kaWFuIHRhcmdldC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tMjEwPC9jb2RlPjxkdD48Y29kZT4tbTM0MDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTIxMC0xNjcyIj48L2E+PGEgbmFtZT0iaW5kZXgtbTM0MC0xNjczIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIDIxMCBwcm9jZXNzb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWxzaW08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbHNpbS0xNjc0Ij48L2E+QXNzdW1lIHRoYXQgcnVudGltZSBzdXBwb3J0IGhhcyBiZWVuIHByb3ZpZGVkIGFuZCBzbyBvbWl0IHRoZQorc2ltdWxhdG9yIGxpYnJhcnkgKDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJzaW0uYSk8L3NwYW4+PC9zYW1wPiBmcm9tIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdGFjay1pbmNyZW1lbnQ9PC9jb2RlPjx2YXI+c2l6ZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tc3RhY2tfMDAyZGluY3JlbWVudC0xNjc1Ij48L2E+U2V0IHRoZSBtYXhpbXVtIGFtb3VudCBmb3IgYSBzaW5nbGUgc3RhY2sgaW5jcmVtZW50IG9wZXJhdGlvbi4gIExhcmdlCit2YWx1ZXMgY2FuIGluY3JlYXNlIHRoZSBzcGVlZCBvZiBwcm9ncmFtcyB0aGF0IGNvbnRhaW4gZnVuY3Rpb25zCit0aGF0IG5lZWQgYSBsYXJnZSBhbW91bnQgb2Ygc3RhY2sgc3BhY2UsIGJ1dCB0aGV5IGNhbiBhbHNvIHRyaWdnZXIgYQorc2VnbWVudGF0aW9uIGZhdWx0IGlmIHRoZSBzdGFjayBpcyBleHRlbmRlZCB0b28gbXVjaC4gIFRoZSBkZWZhdWx0Cit2YWx1ZSBpcyAweDEwMDAuCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NSVBTLURTUC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDlkYjRkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NSVBTLURTUC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwzMzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1JUFMgRFNQIEJ1aWx0LWluIEZ1bmN0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJYODYtdHJhbnNhY3Rpb25hbC1tZW1vcnktaW50cmluc2ljcy5odG1sI1g4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzIiB0aXRsZT0iWDg2IHRyYW5zYWN0aW9uYWwgbWVtb3J5IGludHJpbnNpY3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNSVBTLVBhaXJlZF8wMDJkU2luZ2xlLVN1cHBvcnQuaHRtbCNNSVBTLVBhaXJlZF8wMDJkU2luZ2xlLVN1cHBvcnQiIHRpdGxlPSJNSVBTIFBhaXJlZC1TaW5nbGUgU3VwcG9ydCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSVBTLURTUC1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9Ik1JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlQUy1QYWlyZWRfMDAyZFNpbmdsZS1TdXBwb3J0Lmh0bWwjTUlQUy1QYWlyZWRfMDAyZFNpbmdsZS1TdXBwb3J0Ij5NSVBTIFBhaXJlZC1TaW5nbGUgU3VwcG9ydDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ilg4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwjWDg2LXRyYW5zYWN0aW9uYWwtbWVtb3J5LWludHJpbnNpY3MiPlg4NiB0cmFuc2FjdGlvbmFsIG1lbW9yeSBpbnRyaW5zaWNzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIj5UYXJnZXQgQnVpbHRpbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU2LjkgTUlQUyBEU1AgQnVpbHQtaW4gRnVuY3Rpb25zPC9oND4KKworPHA+VGhlIE1JUFMgRFNQIEFwcGxpY2F0aW9uLVNwZWNpZmljIEV4dGVuc2lvbiAoQVNFKSBpbmNsdWRlcyBuZXcKK2luc3RydWN0aW9ucyB0aGF0IGFyZSBkZXNpZ25lZCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBEU1AgYW5kCittZWRpYSBhcHBsaWNhdGlvbnMuICBJdCBwcm92aWRlcyBpbnN0cnVjdGlvbnMgdGhhdCBvcGVyYXRlIG9uIHBhY2tlZAorOC1iaXQvMTYtYml0IGludGVnZXIgZGF0YSwgUTcsIFExNSBhbmQgUTMxIGZyYWN0aW9uYWwgZGF0YS4KKworIDxwPkdDQyBzdXBwb3J0cyBNSVBTIERTUCBvcGVyYXRpb25zIHVzaW5nIGJvdGggdGhlIGdlbmVyaWMKK3ZlY3RvciBleHRlbnNpb25zIChzZWUgPGEgaHJlZj0iVmVjdG9yLUV4dGVuc2lvbnMuaHRtbCNWZWN0b3ItRXh0ZW5zaW9ucyI+VmVjdG9yIEV4dGVuc2lvbnM8L2E+KSBhbmQgYSBjb2xsZWN0aW9uIG9mCitNSVBTLXNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIEJvdGgga2luZHMgb2Ygc3VwcG9ydCBhcmUKK2VuYWJsZWQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZHNwPC9zcGFuPjwvc2FtcD4gY29tbWFuZC1saW5lIG9wdGlvbi4KKworIDxwPlJldmlzaW9uIDIgb2YgdGhlIEFTRSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgc2Vjb25kIGhhbGYgb2YgMjAwNi4gCitUaGlzIHJldmlzaW9uIGFkZHMgZXh0cmEgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBvcmlnaW5hbCBBU0UsIGJ1dCBpcworb3RoZXJ3aXNlIGJhY2t3YXJkcy1jb21wYXRpYmxlIHdpdGggaXQuICBZb3UgY2FuIHNlbGVjdCByZXZpc2lvbiAyCit1c2luZyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWRzcHIyPC9zcGFuPjwvc2FtcD47IHRoaXMgb3B0aW9uIGltcGxpZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZHNwPC9zcGFuPjwvc2FtcD4uCisKKyA8cD5UaGUgU0NPVU5UIGFuZCBQT1MgYml0cyBvZiB0aGUgRFNQIGNvbnRyb2wgcmVnaXN0ZXIgYXJlIGdsb2JhbC4gIFRoZQorV1JEU1AsIEVYVFBEUCwgRVhUUERQViBhbmQgTVRITElQIGluc3RydWN0aW9ucyBtb2RpZnkgdGhlIFNDT1VOVCBhbmQKK1BPUyBiaXRzLiAgRHVyaW5nIG9wdGltaXphdGlvbiwgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGRlbGV0ZSB0aGVzZQoraW5zdHJ1Y3Rpb25zIGFuZCBpdCBkb2VzIG5vdCBkZWxldGUgY2FsbHMgdG8gZnVuY3Rpb25zIGNvbnRhaW5pbmcKK3RoZXNlIGluc3RydWN0aW9ucy4KKworIDxwPkF0IHByZXNlbnQsIEdDQyBvbmx5IHByb3ZpZGVzIHN1cHBvcnQgZm9yIG9wZXJhdGlvbnMgb24gMzItYml0Cit2ZWN0b3JzLiAgVGhlIHZlY3RvciB0eXBlIGFzc29jaWF0ZWQgd2l0aCA4LWJpdCBpbnRlZ2VyIGRhdGEgaXMKK3VzdWFsbHkgY2FsbGVkIDxjb2RlPnY0aTg8L2NvZGU+LCB0aGUgdmVjdG9yIHR5cGUgYXNzb2NpYXRlZCB3aXRoIFE3CitpcyB1c3VhbGx5IGNhbGxlZCA8Y29kZT52NHE3PC9jb2RlPiwgdGhlIHZlY3RvciB0eXBlIGFzc29jaWF0ZWQgd2l0aCAxNi1iaXQKK2ludGVnZXIgZGF0YSBpcyB1c3VhbGx5IGNhbGxlZCA8Y29kZT52MmkxNjwvY29kZT4sIGFuZCB0aGUgdmVjdG9yIHR5cGUKK2Fzc29jaWF0ZWQgd2l0aCBRMTUgaXMgdXN1YWxseSBjYWxsZWQgPGNvZGU+djJxMTU8L2NvZGU+LiAgVGhleSBjYW4gYmUKK2RlZmluZWQgaW4gQyBhcyBmb2xsb3dzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZWRlZiBzaWduZWQgY2hhciB2NGk4IF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSg0KSkpOworICAgICB0eXBlZGVmIHNpZ25lZCBjaGFyIHY0cTcgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplKDQpKSk7CisgICAgIHR5cGVkZWYgc2hvcnQgdjJpMTYgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplKDQpKSk7CisgICAgIHR5cGVkZWYgc2hvcnQgdjJxMTUgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplKDQpKSk7Cis8L3ByZT4KKyA8cD48Y29kZT52NGk4PC9jb2RlPiwgPGNvZGU+djRxNzwvY29kZT4sIDxjb2RlPnYyaTE2PC9jb2RlPiBhbmQgPGNvZGU+djJxMTU8L2NvZGU+IHZhbHVlcyBhcmUKK2luaXRpYWxpemVkIGluIHRoZSBzYW1lIHdheSBhcyBhZ2dyZWdhdGVzLiAgRm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2NGk4IGEgPSB7MSwgMiwgMywgNH07CisgICAgIHY0aTggYjsKKyAgICAgYiA9ICh2NGk4KSB7NSwgNiwgNywgOH07CisgICAgIAorICAgICB2MnExNSBjID0gezB4MGZjYiwgMHgzYTc1fTsKKyAgICAgdjJxMTUgZDsKKyAgICAgZCA9ICh2MnExNSkgezAuMTIzNCAqIDB4MS4wcDE1LCAwLjQ1NjcgKiAweDEuMHAxNX07Cis8L3ByZT4KKyA8cD48ZW0+Tm90ZTo8L2VtPiBUaGUgQ1BVJ3MgZW5kaWFubmVzcyBkZXRlcm1pbmVzIHRoZSBvcmRlciBpbiB3aGljaCB2YWx1ZXMKK2FyZSBwYWNrZWQuICBPbiBsaXR0bGUtZW5kaWFuIHRhcmdldHMsIHRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgbGVhc3QKK3NpZ25pZmljYW50IGFuZCB0aGUgbGFzdCB2YWx1ZSBpcyB0aGUgbW9zdCBzaWduaWZpY2FudC4gIFRoZSBvcHBvc2l0ZQorb3JkZXIgYXBwbGllcyB0byBiaWctZW5kaWFuIHRhcmdldHMuICBGb3IgZXhhbXBsZSwgdGhlIGNvZGUgYWJvdmUKK3NldHMgdGhlIGxvd2VzdCBieXRlIG9mIDxjb2RlPmE8L2NvZGU+IHRvIDxjb2RlPjE8L2NvZGU+IG9uIGxpdHRsZS1lbmRpYW4gdGFyZ2V0cworYW5kIDxjb2RlPjQ8L2NvZGU+IG9uIGJpZy1lbmRpYW4gdGFyZ2V0cy4KKworIDxwPjxlbT5Ob3RlOjwvZW0+IFE3LCBRMTUgYW5kIFEzMSB2YWx1ZXMgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZWlyIGludGVnZXIKK3JlcHJlc2VudGF0aW9uLiAgQXMgc2hvd24gaW4gdGhpcyBleGFtcGxlLCB0aGUgaW50ZWdlciByZXByZXNlbnRhdGlvbgorb2YgYSBRNyB2YWx1ZSBjYW4gYmUgb2J0YWluZWQgYnkgbXVsdGlwbHlpbmcgdGhlIGZyYWN0aW9uYWwgdmFsdWUgYnkKKzxjb2RlPjB4MS4wcDc8L2NvZGU+LiAgVGhlIGVxdWl2YWxlbnQgZm9yIFExNSB2YWx1ZXMgaXMgdG8gbXVsdGlwbHkgYnkKKzxjb2RlPjB4MS4wcDE1PC9jb2RlPi4gIFRoZSBlcXVpdmFsZW50IGZvciBRMzEgdmFsdWVzIGlzIHRvIG11bHRpcGx5IGJ5Cis8Y29kZT4weDEuMHAzMTwvY29kZT4uCisKKyA8cD5UaGUgdGFibGUgYmVsb3cgbGlzdHMgdGhlIDxjb2RlPnY0aTg8L2NvZGU+IGFuZCA8Y29kZT52MnExNTwvY29kZT4gb3BlcmF0aW9ucyBmb3Igd2hpY2gKK2hhcmR3YXJlIHN1cHBvcnQgZXhpc3RzLiAgPGNvZGU+YTwvY29kZT4gYW5kIDxjb2RlPmI8L2NvZGU+IGFyZSA8Y29kZT52NGk4PC9jb2RlPiB2YWx1ZXMsCithbmQgPGNvZGU+YzwvY29kZT4gYW5kIDxjb2RlPmQ8L2NvZGU+IGFyZSA8Y29kZT52MnExNTwvY29kZT4gdmFsdWVzLgorCisgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiPkMgY29kZSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+TUlQUyBpbnN0cnVjdGlvbgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+YSArIGI8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5hZGR1LnFiPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+YyArIGQ8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5hZGRxLnBoPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+YSAtIGI8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5zdWJ1LnFiPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+YyAtIGQ8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5zdWJxLnBoPC9jb2RlPgorIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworIDxwPlRoZSB0YWJsZSBiZWxvdyBsaXN0cyB0aGUgPGNvZGU+djJpMTY8L2NvZGU+IG9wZXJhdGlvbiBmb3Igd2hpY2gKK2hhcmR3YXJlIHN1cHBvcnQgZXhpc3RzIGZvciB0aGUgRFNQIEFTRSBSRVYgMi4gIDxjb2RlPmU8L2NvZGU+IGFuZCA8Y29kZT5mPC9jb2RlPiBhcmUKKzxjb2RlPnYyaTE2PC9jb2RlPiB2YWx1ZXMuCisKKyA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+QyBjb2RlIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj5NSVBTIGluc3RydWN0aW9uCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5lICogZjwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiPjxjb2RlPm11bC5waDwvY29kZT4KKyA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyA8cD5JdCBpcyBlYXNpZXIgdG8gZGVzY3JpYmUgdGhlIERTUCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgd2UgZmlyc3QgZGVmaW5lCit0aGUgZm9sbG93aW5nIHR5cGVzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZWRlZiBpbnQgcTMxOworICAgICB0eXBlZGVmIGludCBpMzI7CisgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHVpMzI7CisgICAgIHR5cGVkZWYgbG9uZyBsb25nIGE2NDsKKzwvcHJlPgorIDxwPjxjb2RlPnEzMTwvY29kZT4gYW5kIDxjb2RlPmkzMjwvY29kZT4gYXJlIGFjdHVhbGx5IHRoZSBzYW1lIGFzIDxjb2RlPmludDwvY29kZT4sIGJ1dCB3ZQordXNlIDxjb2RlPnEzMTwvY29kZT4gdG8gaW5kaWNhdGUgYSBRMzEgZnJhY3Rpb25hbCB2YWx1ZSBhbmQgPGNvZGU+aTMyPC9jb2RlPiB0bworaW5kaWNhdGUgYSAzMi1iaXQgaW50ZWdlciB2YWx1ZS4gIFNpbWlsYXJseSwgPGNvZGU+YTY0PC9jb2RlPiBpcyB0aGUgc2FtZSBhcworPGNvZGU+bG9uZyBsb25nPC9jb2RlPiwgYnV0IHdlIHVzZSA8Y29kZT5hNjQ8L2NvZGU+IHRvIGluZGljYXRlIHZhbHVlcyB0aGF0IGFyZQorcGxhY2VkIGluIG9uZSBvZiB0aGUgZm91ciBEU1AgYWNjdW11bGF0b3JzICg8Y29kZT4kYWMwPC9jb2RlPiwKKzxjb2RlPiRhYzE8L2NvZGU+LCA8Y29kZT4kYWMyPC9jb2RlPiBvciA8Y29kZT4kYWMzPC9jb2RlPikuCisKKyA8cD5BbHNvLCBzb21lIGJ1aWx0LWluIGZ1bmN0aW9ucyBwcmVmZXIgb3IgcmVxdWlyZSBpbW1lZGlhdGUgbnVtYmVycyBhcworcGFyYW1ldGVycywgYmVjYXVzZSB0aGUgY29ycmVzcG9uZGluZyBEU1AgaW5zdHJ1Y3Rpb25zIGFjY2VwdCBib3RoIGltbWVkaWF0ZQorbnVtYmVycyBhbmQgcmVnaXN0ZXIgb3BlcmFuZHMsIG9yIGFjY2VwdCBpbW1lZGlhdGUgbnVtYmVycyBvbmx5LiAgVGhlCitpbW1lZGlhdGUgcGFyYW1ldGVycyBhcmUgbGlzdGVkIGFzIGZvbGxvd3MuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbW0wXzM6IDAgdG8gMy4KKyAgICAgaW1tMF83OiAwIHRvIDcuCisgICAgIGltbTBfMTU6IDAgdG8gMTUuCisgICAgIGltbTBfMzE6IDAgdG8gMzEuCisgICAgIGltbTBfNjM6IDAgdG8gNjMuCisgICAgIGltbTBfMjU1OiAwIHRvIDI1NS4KKyAgICAgaW1tX24zMl8zMTogLTMyIHRvIDMxLgorICAgICBpbW1fbjUxMl81MTE6IC01MTIgdG8gNTExLgorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgbWFwIGRpcmVjdGx5IHRvIGEgcGFydGljdWxhciBNSVBTIERTUAoraW5zdHJ1Y3Rpb24uICBQbGVhc2UgcmVmZXIgdG8gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9uCitmb3IgZGV0YWlscyBvbiB3aGF0IGVhY2ggaW5zdHJ1Y3Rpb24gZG9lcy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX2FkZHFfcGggKHYycTE1LCB2MnExNSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfYWRkcV9zX3BoICh2MnExNSwgdjJxMTUpCisgICAgIHEzMSBfX2J1aWx0aW5fbWlwc19hZGRxX3NfdyAocTMxLCBxMzEpCisgICAgIHY0aTggX19idWlsdGluX21pcHNfYWRkdV9xYiAodjRpOCwgdjRpOCkKKyAgICAgdjRpOCBfX2J1aWx0aW5fbWlwc19hZGR1X3NfcWIgKHY0aTgsIHY0aTgpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX3N1YnFfcGggKHYycTE1LCB2MnExNSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfc3VicV9zX3BoICh2MnExNSwgdjJxMTUpCisgICAgIHEzMSBfX2J1aWx0aW5fbWlwc19zdWJxX3NfdyAocTMxLCBxMzEpCisgICAgIHY0aTggX19idWlsdGluX21pcHNfc3VidV9xYiAodjRpOCwgdjRpOCkKKyAgICAgdjRpOCBfX2J1aWx0aW5fbWlwc19zdWJ1X3NfcWIgKHY0aTgsIHY0aTgpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19hZGRzYyAoaTMyLCBpMzIpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19hZGR3YyAoaTMyLCBpMzIpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19tb2RzdWIgKGkzMiwgaTMyKQorICAgICBpMzIgX19idWlsdGluX21pcHNfcmFkZHVfd19xYiAodjRpOCkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfYWJzcV9zX3BoICh2MnExNSkKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX2Fic3Ffc193IChxMzEpCisgICAgIHY0aTggX19idWlsdGluX21pcHNfcHJlY3JxX3FiX3BoICh2MnExNSwgdjJxMTUpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX3ByZWNycV9waF93IChxMzEsIHEzMSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfcHJlY3JxX3JzX3BoX3cgKHEzMSwgcTMxKQorICAgICB2NGk4IF9fYnVpbHRpbl9taXBzX3ByZWNycXVfc19xYl9waCAodjJxMTUsIHYycTE1KQorICAgICBxMzEgX19idWlsdGluX21pcHNfcHJlY2VxX3dfcGhsICh2MnExNSkKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX3ByZWNlcV93X3BociAodjJxMTUpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX3ByZWNlcXVfcGhfcWJsICh2NGk4KQorICAgICB2MnExNSBfX2J1aWx0aW5fbWlwc19wcmVjZXF1X3BoX3FiciAodjRpOCkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfcHJlY2VxdV9waF9xYmxhICh2NGk4KQorICAgICB2MnExNSBfX2J1aWx0aW5fbWlwc19wcmVjZXF1X3BoX3FicmEgKHY0aTgpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX3ByZWNldV9waF9xYmwgKHY0aTgpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX3ByZWNldV9waF9xYnIgKHY0aTgpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX3ByZWNldV9waF9xYmxhICh2NGk4KQorICAgICB2MnExNSBfX2J1aWx0aW5fbWlwc19wcmVjZXVfcGhfcWJyYSAodjRpOCkKKyAgICAgdjRpOCBfX2J1aWx0aW5fbWlwc19zaGxsX3FiICh2NGk4LCBpbW0wXzcpCisgICAgIHY0aTggX19idWlsdGluX21pcHNfc2hsbF9xYiAodjRpOCwgaTMyKQorICAgICB2MnExNSBfX2J1aWx0aW5fbWlwc19zaGxsX3BoICh2MnExNSwgaW1tMF8xNSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfc2hsbF9waCAodjJxMTUsIGkzMikKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfc2hsbF9zX3BoICh2MnExNSwgaW1tMF8xNSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfc2hsbF9zX3BoICh2MnExNSwgaTMyKQorICAgICBxMzEgX19idWlsdGluX21pcHNfc2hsbF9zX3cgKHEzMSwgaW1tMF8zMSkKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX3NobGxfc193IChxMzEsIGkzMikKKyAgICAgdjRpOCBfX2J1aWx0aW5fbWlwc19zaHJsX3FiICh2NGk4LCBpbW0wXzcpCisgICAgIHY0aTggX19idWlsdGluX21pcHNfc2hybF9xYiAodjRpOCwgaTMyKQorICAgICB2MnExNSBfX2J1aWx0aW5fbWlwc19zaHJhX3BoICh2MnExNSwgaW1tMF8xNSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfc2hyYV9waCAodjJxMTUsIGkzMikKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfc2hyYV9yX3BoICh2MnExNSwgaW1tMF8xNSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfc2hyYV9yX3BoICh2MnExNSwgaTMyKQorICAgICBxMzEgX19idWlsdGluX21pcHNfc2hyYV9yX3cgKHEzMSwgaW1tMF8zMSkKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX3NocmFfcl93IChxMzEsIGkzMikKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfbXVsZXVfc19waF9xYmwgKHY0aTgsIHYycTE1KQorICAgICB2MnExNSBfX2J1aWx0aW5fbWlwc19tdWxldV9zX3BoX3FiciAodjRpOCwgdjJxMTUpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX211bHFfcnNfcGggKHYycTE1LCB2MnExNSkKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX211bGVxX3Nfd19waGwgKHYycTE1LCB2MnExNSkKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX211bGVxX3Nfd19waHIgKHYycTE1LCB2MnExNSkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2RwYXVfaF9xYmwgKGE2NCwgdjRpOCwgdjRpOCkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2RwYXVfaF9xYnIgKGE2NCwgdjRpOCwgdjRpOCkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2Rwc3VfaF9xYmwgKGE2NCwgdjRpOCwgdjRpOCkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2Rwc3VfaF9xYnIgKGE2NCwgdjRpOCwgdjRpOCkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2RwYXFfc193X3BoIChhNjQsIHYycTE1LCB2MnExNSkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2RwYXFfc2FfbF93IChhNjQsIHEzMSwgcTMxKQorICAgICBhNjQgX19idWlsdGluX21pcHNfZHBzcV9zX3dfcGggKGE2NCwgdjJxMTUsIHYycTE1KQorICAgICBhNjQgX19idWlsdGluX21pcHNfZHBzcV9zYV9sX3cgKGE2NCwgcTMxLCBxMzEpCisgICAgIGE2NCBfX2J1aWx0aW5fbWlwc19tdWxzYXFfc193X3BoIChhNjQsIHYycTE1LCB2MnExNSkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX21hcV9zX3dfcGhsIChhNjQsIHYycTE1LCB2MnExNSkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX21hcV9zX3dfcGhyIChhNjQsIHYycTE1LCB2MnExNSkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX21hcV9zYV93X3BobCAoYTY0LCB2MnExNSwgdjJxMTUpCisgICAgIGE2NCBfX2J1aWx0aW5fbWlwc19tYXFfc2Ffd19waHIgKGE2NCwgdjJxMTUsIHYycTE1KQorICAgICBpMzIgX19idWlsdGluX21pcHNfYml0cmV2IChpMzIpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19pbnN2IChpMzIsIGkzMikKKyAgICAgdjRpOCBfX2J1aWx0aW5fbWlwc19yZXBsX3FiIChpbW0wXzI1NSkKKyAgICAgdjRpOCBfX2J1aWx0aW5fbWlwc19yZXBsX3FiIChpMzIpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX3JlcGxfcGggKGltbV9uNTEyXzUxMSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfcmVwbF9waCAoaTMyKQorICAgICB2b2lkIF9fYnVpbHRpbl9taXBzX2NtcHVfZXFfcWIgKHY0aTgsIHY0aTgpCisgICAgIHZvaWQgX19idWlsdGluX21pcHNfY21wdV9sdF9xYiAodjRpOCwgdjRpOCkKKyAgICAgdm9pZCBfX2J1aWx0aW5fbWlwc19jbXB1X2xlX3FiICh2NGk4LCB2NGk4KQorICAgICBpMzIgX19idWlsdGluX21pcHNfY21wZ3VfZXFfcWIgKHY0aTgsIHY0aTgpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19jbXBndV9sdF9xYiAodjRpOCwgdjRpOCkKKyAgICAgaTMyIF9fYnVpbHRpbl9taXBzX2NtcGd1X2xlX3FiICh2NGk4LCB2NGk4KQorICAgICB2b2lkIF9fYnVpbHRpbl9taXBzX2NtcF9lcV9waCAodjJxMTUsIHYycTE1KQorICAgICB2b2lkIF9fYnVpbHRpbl9taXBzX2NtcF9sdF9waCAodjJxMTUsIHYycTE1KQorICAgICB2b2lkIF9fYnVpbHRpbl9taXBzX2NtcF9sZV9waCAodjJxMTUsIHYycTE1KQorICAgICB2NGk4IF9fYnVpbHRpbl9taXBzX3BpY2tfcWIgKHY0aTgsIHY0aTgpCisgICAgIHYycTE1IF9fYnVpbHRpbl9taXBzX3BpY2tfcGggKHYycTE1LCB2MnExNSkKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfcGFja3JsX3BoICh2MnExNSwgdjJxMTUpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19leHRyX3cgKGE2NCwgaW1tMF8zMSkKKyAgICAgaTMyIF9fYnVpbHRpbl9taXBzX2V4dHJfdyAoYTY0LCBpMzIpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19leHRyX3JfdyAoYTY0LCBpbW0wXzMxKQorICAgICBpMzIgX19idWlsdGluX21pcHNfZXh0cl9zX2ggKGE2NCwgaTMyKQorICAgICBpMzIgX19idWlsdGluX21pcHNfZXh0cl9yc193IChhNjQsIGltbTBfMzEpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19leHRyX3JzX3cgKGE2NCwgaTMyKQorICAgICBpMzIgX19idWlsdGluX21pcHNfZXh0cl9zX2ggKGE2NCwgaW1tMF8zMSkKKyAgICAgaTMyIF9fYnVpbHRpbl9taXBzX2V4dHJfcl93IChhNjQsIGkzMikKKyAgICAgaTMyIF9fYnVpbHRpbl9taXBzX2V4dHAgKGE2NCwgaW1tMF8zMSkKKyAgICAgaTMyIF9fYnVpbHRpbl9taXBzX2V4dHAgKGE2NCwgaTMyKQorICAgICBpMzIgX19idWlsdGluX21pcHNfZXh0cGRwIChhNjQsIGltbTBfMzEpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19leHRwZHAgKGE2NCwgaTMyKQorICAgICBhNjQgX19idWlsdGluX21pcHNfc2hpbG8gKGE2NCwgaW1tX24zMl8zMSkKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX3NoaWxvIChhNjQsIGkzMikKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX210aGxpcCAoYTY0LCBpMzIpCisgICAgIHZvaWQgX19idWlsdGluX21pcHNfd3Jkc3AgKGkzMiwgaW1tMF82MykKKyAgICAgaTMyIF9fYnVpbHRpbl9taXBzX3JkZHNwIChpbW0wXzYzKQorICAgICBpMzIgX19idWlsdGluX21pcHNfbGJ1eCAodm9pZCAqLCBpMzIpCisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19saHggKHZvaWQgKiwgaTMyKQorICAgICBpMzIgX19idWlsdGluX21pcHNfbHd4ICh2b2lkICosIGkzMikKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2xkeCAodm9pZCAqLCBpMzIpIFtNSVBTNjQgb25seV0KKyAgICAgaTMyIF9fYnVpbHRpbl9taXBzX2Jwb3NnZTMyICh2b2lkKQorICAgICBhNjQgX19idWlsdGluX21pcHNfbWFkZCAoYTY0LCBpMzIsIGkzMik7CisgICAgIGE2NCBfX2J1aWx0aW5fbWlwc19tYWRkdSAoYTY0LCB1aTMyLCB1aTMyKTsKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX21zdWIgKGE2NCwgaTMyLCBpMzIpOworICAgICBhNjQgX19idWlsdGluX21pcHNfbXN1YnUgKGE2NCwgdWkzMiwgdWkzMik7CisgICAgIGE2NCBfX2J1aWx0aW5fbWlwc19tdWx0IChpMzIsIGkzMik7CisgICAgIGE2NCBfX2J1aWx0aW5fbWlwc19tdWx0dSAodWkzMiwgdWkzMik7Cis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBtYXAgZGlyZWN0bHkgdG8gYSBwYXJ0aWN1bGFyIE1JUFMgRFNQIFJFViAyCitpbnN0cnVjdGlvbi4gIFBsZWFzZSByZWZlciB0byB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb24KK2ZvciBkZXRhaWxzIG9uIHdoYXQgZWFjaCBpbnN0cnVjdGlvbiBkb2VzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdjRxNyBfX2J1aWx0aW5fbWlwc19hYnNxX3NfcWIgKHY0cTcpOworICAgICB2MmkxNiBfX2J1aWx0aW5fbWlwc19hZGR1X3BoICh2MmkxNiwgdjJpMTYpOworICAgICB2MmkxNiBfX2J1aWx0aW5fbWlwc19hZGR1X3NfcGggKHYyaTE2LCB2MmkxNik7CisgICAgIHY0aTggX19idWlsdGluX21pcHNfYWRkdWhfcWIgKHY0aTgsIHY0aTgpOworICAgICB2NGk4IF9fYnVpbHRpbl9taXBzX2FkZHVoX3JfcWIgKHY0aTgsIHY0aTgpOworICAgICBpMzIgX19idWlsdGluX21pcHNfYXBwZW5kIChpMzIsIGkzMiwgaW1tMF8zMSk7CisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19iYWxpZ24gKGkzMiwgaTMyLCBpbW0wXzMpOworICAgICBpMzIgX19idWlsdGluX21pcHNfY21wZ2R1X2VxX3FiICh2NGk4LCB2NGk4KTsKKyAgICAgaTMyIF9fYnVpbHRpbl9taXBzX2NtcGdkdV9sdF9xYiAodjRpOCwgdjRpOCk7CisgICAgIGkzMiBfX2J1aWx0aW5fbWlwc19jbXBnZHVfbGVfcWIgKHY0aTgsIHY0aTgpOworICAgICBhNjQgX19idWlsdGluX21pcHNfZHBhX3dfcGggKGE2NCwgdjJpMTYsIHYyaTE2KTsKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2Rwc193X3BoIChhNjQsIHYyaTE2LCB2MmkxNik7CisgICAgIHYyaTE2IF9fYnVpbHRpbl9taXBzX211bF9waCAodjJpMTYsIHYyaTE2KTsKKyAgICAgdjJpMTYgX19idWlsdGluX21pcHNfbXVsX3NfcGggKHYyaTE2LCB2MmkxNik7CisgICAgIHEzMSBfX2J1aWx0aW5fbWlwc19tdWxxX3JzX3cgKHEzMSwgcTMxKTsKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfbXVscV9zX3BoICh2MnExNSwgdjJxMTUpOworICAgICBxMzEgX19idWlsdGluX21pcHNfbXVscV9zX3cgKHEzMSwgcTMxKTsKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX211bHNhX3dfcGggKGE2NCwgdjJpMTYsIHYyaTE2KTsKKyAgICAgdjRpOCBfX2J1aWx0aW5fbWlwc19wcmVjcl9xYl9waCAodjJpMTYsIHYyaTE2KTsKKyAgICAgdjJpMTYgX19idWlsdGluX21pcHNfcHJlY3Jfc3JhX3BoX3cgKGkzMiwgaTMyLCBpbW0wXzMxKTsKKyAgICAgdjJpMTYgX19idWlsdGluX21pcHNfcHJlY3Jfc3JhX3JfcGhfdyAoaTMyLCBpMzIsIGltbTBfMzEpOworICAgICBpMzIgX19idWlsdGluX21pcHNfcHJlcGVuZCAoaTMyLCBpMzIsIGltbTBfMzEpOworICAgICB2NGk4IF9fYnVpbHRpbl9taXBzX3NocmFfcWIgKHY0aTgsIGltbTBfNyk7CisgICAgIHY0aTggX19idWlsdGluX21pcHNfc2hyYV9yX3FiICh2NGk4LCBpbW0wXzcpOworICAgICB2NGk4IF9fYnVpbHRpbl9taXBzX3NocmFfcWIgKHY0aTgsIGkzMik7CisgICAgIHY0aTggX19idWlsdGluX21pcHNfc2hyYV9yX3FiICh2NGk4LCBpMzIpOworICAgICB2MmkxNiBfX2J1aWx0aW5fbWlwc19zaHJsX3BoICh2MmkxNiwgaW1tMF8xNSk7CisgICAgIHYyaTE2IF9fYnVpbHRpbl9taXBzX3NocmxfcGggKHYyaTE2LCBpMzIpOworICAgICB2MmkxNiBfX2J1aWx0aW5fbWlwc19zdWJ1X3BoICh2MmkxNiwgdjJpMTYpOworICAgICB2MmkxNiBfX2J1aWx0aW5fbWlwc19zdWJ1X3NfcGggKHYyaTE2LCB2MmkxNik7CisgICAgIHY0aTggX19idWlsdGluX21pcHNfc3VidWhfcWIgKHY0aTgsIHY0aTgpOworICAgICB2NGk4IF9fYnVpbHRpbl9taXBzX3N1YnVoX3JfcWIgKHY0aTgsIHY0aTgpOworICAgICB2MnExNSBfX2J1aWx0aW5fbWlwc19hZGRxaF9waCAodjJxMTUsIHYycTE1KTsKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfYWRkcWhfcl9waCAodjJxMTUsIHYycTE1KTsKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX2FkZHFoX3cgKHEzMSwgcTMxKTsKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX2FkZHFoX3JfdyAocTMxLCBxMzEpOworICAgICB2MnExNSBfX2J1aWx0aW5fbWlwc19zdWJxaF9waCAodjJxMTUsIHYycTE1KTsKKyAgICAgdjJxMTUgX19idWlsdGluX21pcHNfc3VicWhfcl9waCAodjJxMTUsIHYycTE1KTsKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX3N1YnFoX3cgKHEzMSwgcTMxKTsKKyAgICAgcTMxIF9fYnVpbHRpbl9taXBzX3N1YnFoX3JfdyAocTMxLCBxMzEpOworICAgICBhNjQgX19idWlsdGluX21pcHNfZHBheF93X3BoIChhNjQsIHYyaTE2LCB2MmkxNik7CisgICAgIGE2NCBfX2J1aWx0aW5fbWlwc19kcHN4X3dfcGggKGE2NCwgdjJpMTYsIHYyaTE2KTsKKyAgICAgYTY0IF9fYnVpbHRpbl9taXBzX2RwYXF4X3Nfd19waCAoYTY0LCB2MnExNSwgdjJxMTUpOworICAgICBhNjQgX19idWlsdGluX21pcHNfZHBhcXhfc2Ffd19waCAoYTY0LCB2MnExNSwgdjJxMTUpOworICAgICBhNjQgX19idWlsdGluX21pcHNfZHBzcXhfc193X3BoIChhNjQsIHYycTE1LCB2MnExNSk7CisgICAgIGE2NCBfX2J1aWx0aW5fbWlwc19kcHNxeF9zYV93X3BoIChhNjQsIHYycTE1LCB2MnExNSk7Cis8L3ByZT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NSVBTLUxvb25nc29uLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2VhZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NSVBTLUxvb25nc29uLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApAQCAtMCwwICsxLDE4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUlQUyBMb29uZ3NvbiBCdWlsdC1pbiBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIiB0aXRsZT0iVGFyZ2V0IEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTUlQUy1QYWlyZWRfMDAyZFNpbmdsZS1TdXBwb3J0Lmh0bWwjTUlQUy1QYWlyZWRfMDAyZFNpbmdsZS1TdXBwb3J0IiB0aXRsZT0iTUlQUyBQYWlyZWQtU2luZ2xlIFN1cHBvcnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPdGhlci1NSVBTLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNPdGhlci1NSVBTLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJPdGhlciBNSVBTIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSVBTLUxvb25nc29uLUJ1aWx0LWluLUZ1bmN0aW9ucyI+PC9hPgorPGEgbmFtZT0iTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik90aGVyLU1JUFMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI090aGVyLU1JUFMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+T3RoZXIgTUlQUyBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSVBTLVBhaXJlZF8wMDJkU2luZ2xlLVN1cHBvcnQuaHRtbCNNSVBTLVBhaXJlZF8wMDJkU2luZ2xlLVN1cHBvcnQiPk1JUFMgUGFpcmVkLVNpbmdsZSBTdXBwb3J0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIj5UYXJnZXQgQnVpbHRpbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU2LjExIE1JUFMgTG9vbmdzb24gQnVpbHQtaW4gRnVuY3Rpb25zPC9oND4KKworPHA+R0NDIHByb3ZpZGVzIGludHJpbnNpY3MgdG8gYWNjZXNzIHRoZSBTSU1EIGluc3RydWN0aW9ucyBwcm92aWRlZCBieSB0aGUKK1NUIE1pY3JvZWxlY3Ryb25pY3MgTG9vbmdzb24tMkUgYW5kIC0yRiBwcm9jZXNzb3JzLiAgVGhlc2UgaW50cmluc2ljcywKK2F2YWlsYWJsZSBhZnRlciBpbmNsdXNpb24gb2YgdGhlIDxjb2RlPmxvb25nc29uLmg8L2NvZGU+IGhlYWRlciBmaWxlLAorb3BlcmF0ZSBvbiB0aGUgZm9sbG93aW5nIDY0LWJpdCB2ZWN0b3IgdHlwZXM6CisKKyAgICAgPHVsPgorPGxpPjxjb2RlPnVpbnQ4eDhfdDwvY29kZT4sIGEgdmVjdG9yIG9mIGVpZ2h0IHVuc2lnbmVkIDgtYml0IGludGVnZXJzOworPGxpPjxjb2RlPnVpbnQxNng0X3Q8L2NvZGU+LCBhIHZlY3RvciBvZiBmb3VyIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyczsKKzxsaT48Y29kZT51aW50MzJ4Ml90PC9jb2RlPiwgYSB2ZWN0b3Igb2YgdHdvIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyczsKKzxsaT48Y29kZT5pbnQ4eDhfdDwvY29kZT4sIGEgdmVjdG9yIG9mIGVpZ2h0IHNpZ25lZCA4LWJpdCBpbnRlZ2VyczsKKzxsaT48Y29kZT5pbnQxNng0X3Q8L2NvZGU+LCBhIHZlY3RvciBvZiBmb3VyIHNpZ25lZCAxNi1iaXQgaW50ZWdlcnM7Cis8bGk+PGNvZGU+aW50MzJ4Ml90PC9jb2RlPiwgYSB2ZWN0b3Igb2YgdHdvIHNpZ25lZCAzMi1iaXQgaW50ZWdlcnMuIAorPC91bD4KKworIDxwPlRoZSBpbnRyaW5zaWNzIHByb3ZpZGVkIGFyZSBsaXN0ZWQgYmVsb3c7IGVhY2ggaXMgbmFtZWQgYWZ0ZXIgdGhlCittYWNoaW5lIGluc3RydWN0aW9uIHRvIHdoaWNoIGl0IGNvcnJlc3BvbmRzLCB3aXRoIHN1ZmZpeGVzIGFkZGVkIGFzCithcHByb3ByaWF0ZSB0byBkaXN0aW5ndWlzaCBpbnRyaW5zaWNzIHRoYXQgZXhwYW5kIHRvIHRoZSBzYW1lIG1hY2hpbmUKK2luc3RydWN0aW9uIHlldCBoYXZlIGRpZmZlcmVudCBhcmd1bWVudCB0eXBlcy4gIFJlZmVyIHRvIHRoZSBhcmNoaXRlY3R1cmUKK2RvY3VtZW50YXRpb24gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZWFjaAoraW5zdHJ1Y3Rpb24uCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQxNng0X3QgcGFja3Nzd2ggKGludDMyeDJfdCBzLCBpbnQzMngyX3QgdCk7CisgICAgIGludDh4OF90IHBhY2tzc2hiIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICB1aW50OHg4X3QgcGFja3VzaGIgKHVpbnQxNng0X3QgcywgdWludDE2eDRfdCB0KTsKKyAgICAgdWludDMyeDJfdCBwYWRkd191ICh1aW50MzJ4Ml90IHMsIHVpbnQzMngyX3QgdCk7CisgICAgIHVpbnQxNng0X3QgcGFkZGhfdSAodWludDE2eDRfdCBzLCB1aW50MTZ4NF90IHQpOworICAgICB1aW50OHg4X3QgcGFkZGJfdSAodWludDh4OF90IHMsIHVpbnQ4eDhfdCB0KTsKKyAgICAgaW50MzJ4Ml90IHBhZGR3X3MgKGludDMyeDJfdCBzLCBpbnQzMngyX3QgdCk7CisgICAgIGludDE2eDRfdCBwYWRkaF9zIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICBpbnQ4eDhfdCBwYWRkYl9zIChpbnQ4eDhfdCBzLCBpbnQ4eDhfdCB0KTsKKyAgICAgdWludDY0X3QgcGFkZGRfdSAodWludDY0X3QgcywgdWludDY0X3QgdCk7CisgICAgIGludDY0X3QgcGFkZGRfcyAoaW50NjRfdCBzLCBpbnQ2NF90IHQpOworICAgICBpbnQxNng0X3QgcGFkZHNoIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICBpbnQ4eDhfdCBwYWRkc2IgKGludDh4OF90IHMsIGludDh4OF90IHQpOworICAgICB1aW50MTZ4NF90IHBhZGR1c2ggKHVpbnQxNng0X3QgcywgdWludDE2eDRfdCB0KTsKKyAgICAgdWludDh4OF90IHBhZGR1c2IgKHVpbnQ4eDhfdCBzLCB1aW50OHg4X3QgdCk7CisgICAgIHVpbnQ2NF90IHBhbmRuX3VkICh1aW50NjRfdCBzLCB1aW50NjRfdCB0KTsKKyAgICAgdWludDMyeDJfdCBwYW5kbl91dyAodWludDMyeDJfdCBzLCB1aW50MzJ4Ml90IHQpOworICAgICB1aW50MTZ4NF90IHBhbmRuX3VoICh1aW50MTZ4NF90IHMsIHVpbnQxNng0X3QgdCk7CisgICAgIHVpbnQ4eDhfdCBwYW5kbl91YiAodWludDh4OF90IHMsIHVpbnQ4eDhfdCB0KTsKKyAgICAgaW50NjRfdCBwYW5kbl9zZCAoaW50NjRfdCBzLCBpbnQ2NF90IHQpOworICAgICBpbnQzMngyX3QgcGFuZG5fc3cgKGludDMyeDJfdCBzLCBpbnQzMngyX3QgdCk7CisgICAgIGludDE2eDRfdCBwYW5kbl9zaCAoaW50MTZ4NF90IHMsIGludDE2eDRfdCB0KTsKKyAgICAgaW50OHg4X3QgcGFuZG5fc2IgKGludDh4OF90IHMsIGludDh4OF90IHQpOworICAgICB1aW50MTZ4NF90IHBhdmdoICh1aW50MTZ4NF90IHMsIHVpbnQxNng0X3QgdCk7CisgICAgIHVpbnQ4eDhfdCBwYXZnYiAodWludDh4OF90IHMsIHVpbnQ4eDhfdCB0KTsKKyAgICAgdWludDMyeDJfdCBwY21wZXF3X3UgKHVpbnQzMngyX3QgcywgdWludDMyeDJfdCB0KTsKKyAgICAgdWludDE2eDRfdCBwY21wZXFoX3UgKHVpbnQxNng0X3QgcywgdWludDE2eDRfdCB0KTsKKyAgICAgdWludDh4OF90IHBjbXBlcWJfdSAodWludDh4OF90IHMsIHVpbnQ4eDhfdCB0KTsKKyAgICAgaW50MzJ4Ml90IHBjbXBlcXdfcyAoaW50MzJ4Ml90IHMsIGludDMyeDJfdCB0KTsKKyAgICAgaW50MTZ4NF90IHBjbXBlcWhfcyAoaW50MTZ4NF90IHMsIGludDE2eDRfdCB0KTsKKyAgICAgaW50OHg4X3QgcGNtcGVxYl9zIChpbnQ4eDhfdCBzLCBpbnQ4eDhfdCB0KTsKKyAgICAgdWludDMyeDJfdCBwY21wZ3R3X3UgKHVpbnQzMngyX3QgcywgdWludDMyeDJfdCB0KTsKKyAgICAgdWludDE2eDRfdCBwY21wZ3RoX3UgKHVpbnQxNng0X3QgcywgdWludDE2eDRfdCB0KTsKKyAgICAgdWludDh4OF90IHBjbXBndGJfdSAodWludDh4OF90IHMsIHVpbnQ4eDhfdCB0KTsKKyAgICAgaW50MzJ4Ml90IHBjbXBndHdfcyAoaW50MzJ4Ml90IHMsIGludDMyeDJfdCB0KTsKKyAgICAgaW50MTZ4NF90IHBjbXBndGhfcyAoaW50MTZ4NF90IHMsIGludDE2eDRfdCB0KTsKKyAgICAgaW50OHg4X3QgcGNtcGd0Yl9zIChpbnQ4eDhfdCBzLCBpbnQ4eDhfdCB0KTsKKyAgICAgdWludDE2eDRfdCBwZXh0cmhfdSAodWludDE2eDRfdCBzLCBpbnQgZmllbGQpOworICAgICBpbnQxNng0X3QgcGV4dHJoX3MgKGludDE2eDRfdCBzLCBpbnQgZmllbGQpOworICAgICB1aW50MTZ4NF90IHBpbnNyaF8wX3UgKHVpbnQxNng0X3QgcywgdWludDE2eDRfdCB0KTsKKyAgICAgdWludDE2eDRfdCBwaW5zcmhfMV91ICh1aW50MTZ4NF90IHMsIHVpbnQxNng0X3QgdCk7CisgICAgIHVpbnQxNng0X3QgcGluc3JoXzJfdSAodWludDE2eDRfdCBzLCB1aW50MTZ4NF90IHQpOworICAgICB1aW50MTZ4NF90IHBpbnNyaF8zX3UgKHVpbnQxNng0X3QgcywgdWludDE2eDRfdCB0KTsKKyAgICAgaW50MTZ4NF90IHBpbnNyaF8wX3MgKGludDE2eDRfdCBzLCBpbnQxNng0X3QgdCk7CisgICAgIGludDE2eDRfdCBwaW5zcmhfMV9zIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICBpbnQxNng0X3QgcGluc3JoXzJfcyAoaW50MTZ4NF90IHMsIGludDE2eDRfdCB0KTsKKyAgICAgaW50MTZ4NF90IHBpbnNyaF8zX3MgKGludDE2eDRfdCBzLCBpbnQxNng0X3QgdCk7CisgICAgIGludDMyeDJfdCBwbWFkZGh3IChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICBpbnQxNng0X3QgcG1heHNoIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICB1aW50OHg4X3QgcG1heHViICh1aW50OHg4X3QgcywgdWludDh4OF90IHQpOworICAgICBpbnQxNng0X3QgcG1pbnNoIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICB1aW50OHg4X3QgcG1pbnViICh1aW50OHg4X3QgcywgdWludDh4OF90IHQpOworICAgICB1aW50OHg4X3QgcG1vdm1za2JfdSAodWludDh4OF90IHMpOworICAgICBpbnQ4eDhfdCBwbW92bXNrYl9zIChpbnQ4eDhfdCBzKTsKKyAgICAgdWludDE2eDRfdCBwbXVsaHVoICh1aW50MTZ4NF90IHMsIHVpbnQxNng0X3QgdCk7CisgICAgIGludDE2eDRfdCBwbXVsaGggKGludDE2eDRfdCBzLCBpbnQxNng0X3QgdCk7CisgICAgIGludDE2eDRfdCBwbXVsbGggKGludDE2eDRfdCBzLCBpbnQxNng0X3QgdCk7CisgICAgIGludDY0X3QgcG11bHV3ICh1aW50MzJ4Ml90IHMsIHVpbnQzMngyX3QgdCk7CisgICAgIHVpbnQ4eDhfdCBwYXN1YnViICh1aW50OHg4X3QgcywgdWludDh4OF90IHQpOworICAgICB1aW50MTZ4NF90IGJpYWRkICh1aW50OHg4X3Qgcyk7CisgICAgIHVpbnQxNng0X3QgcHNhZGJoICh1aW50OHg4X3QgcywgdWludDh4OF90IHQpOworICAgICB1aW50MTZ4NF90IHBzaHVmaF91ICh1aW50MTZ4NF90IGRlc3QsIHVpbnQxNng0X3QgcywgdWludDhfdCBvcmRlcik7CisgICAgIGludDE2eDRfdCBwc2h1ZmhfcyAoaW50MTZ4NF90IGRlc3QsIGludDE2eDRfdCBzLCB1aW50OF90IG9yZGVyKTsKKyAgICAgdWludDE2eDRfdCBwc2xsaF91ICh1aW50MTZ4NF90IHMsIHVpbnQ4X3QgYW1vdW50KTsKKyAgICAgaW50MTZ4NF90IHBzbGxoX3MgKGludDE2eDRfdCBzLCB1aW50OF90IGFtb3VudCk7CisgICAgIHVpbnQzMngyX3QgcHNsbHdfdSAodWludDMyeDJfdCBzLCB1aW50OF90IGFtb3VudCk7CisgICAgIGludDMyeDJfdCBwc2xsd19zIChpbnQzMngyX3QgcywgdWludDhfdCBhbW91bnQpOworICAgICB1aW50MTZ4NF90IHBzcmxoX3UgKHVpbnQxNng0X3QgcywgdWludDhfdCBhbW91bnQpOworICAgICBpbnQxNng0X3QgcHNybGhfcyAoaW50MTZ4NF90IHMsIHVpbnQ4X3QgYW1vdW50KTsKKyAgICAgdWludDMyeDJfdCBwc3Jsd191ICh1aW50MzJ4Ml90IHMsIHVpbnQ4X3QgYW1vdW50KTsKKyAgICAgaW50MzJ4Ml90IHBzcmx3X3MgKGludDMyeDJfdCBzLCB1aW50OF90IGFtb3VudCk7CisgICAgIHVpbnQxNng0X3QgcHNyYWhfdSAodWludDE2eDRfdCBzLCB1aW50OF90IGFtb3VudCk7CisgICAgIGludDE2eDRfdCBwc3JhaF9zIChpbnQxNng0X3QgcywgdWludDhfdCBhbW91bnQpOworICAgICB1aW50MzJ4Ml90IHBzcmF3X3UgKHVpbnQzMngyX3QgcywgdWludDhfdCBhbW91bnQpOworICAgICBpbnQzMngyX3QgcHNyYXdfcyAoaW50MzJ4Ml90IHMsIHVpbnQ4X3QgYW1vdW50KTsKKyAgICAgdWludDMyeDJfdCBwc3Vid191ICh1aW50MzJ4Ml90IHMsIHVpbnQzMngyX3QgdCk7CisgICAgIHVpbnQxNng0X3QgcHN1YmhfdSAodWludDE2eDRfdCBzLCB1aW50MTZ4NF90IHQpOworICAgICB1aW50OHg4X3QgcHN1YmJfdSAodWludDh4OF90IHMsIHVpbnQ4eDhfdCB0KTsKKyAgICAgaW50MzJ4Ml90IHBzdWJ3X3MgKGludDMyeDJfdCBzLCBpbnQzMngyX3QgdCk7CisgICAgIGludDE2eDRfdCBwc3ViaF9zIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICBpbnQ4eDhfdCBwc3ViYl9zIChpbnQ4eDhfdCBzLCBpbnQ4eDhfdCB0KTsKKyAgICAgdWludDY0X3QgcHN1YmRfdSAodWludDY0X3QgcywgdWludDY0X3QgdCk7CisgICAgIGludDY0X3QgcHN1YmRfcyAoaW50NjRfdCBzLCBpbnQ2NF90IHQpOworICAgICBpbnQxNng0X3QgcHN1YnNoIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICBpbnQ4eDhfdCBwc3Vic2IgKGludDh4OF90IHMsIGludDh4OF90IHQpOworICAgICB1aW50MTZ4NF90IHBzdWJ1c2ggKHVpbnQxNng0X3QgcywgdWludDE2eDRfdCB0KTsKKyAgICAgdWludDh4OF90IHBzdWJ1c2IgKHVpbnQ4eDhfdCBzLCB1aW50OHg4X3QgdCk7CisgICAgIHVpbnQzMngyX3QgcHVucGNraHdkX3UgKHVpbnQzMngyX3QgcywgdWludDMyeDJfdCB0KTsKKyAgICAgdWludDE2eDRfdCBwdW5wY2toaHdfdSAodWludDE2eDRfdCBzLCB1aW50MTZ4NF90IHQpOworICAgICB1aW50OHg4X3QgcHVucGNraGJoX3UgKHVpbnQ4eDhfdCBzLCB1aW50OHg4X3QgdCk7CisgICAgIGludDMyeDJfdCBwdW5wY2tod2RfcyAoaW50MzJ4Ml90IHMsIGludDMyeDJfdCB0KTsKKyAgICAgaW50MTZ4NF90IHB1bnBja2hod19zIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICBpbnQ4eDhfdCBwdW5wY2toYmhfcyAoaW50OHg4X3QgcywgaW50OHg4X3QgdCk7CisgICAgIHVpbnQzMngyX3QgcHVucGNrbHdkX3UgKHVpbnQzMngyX3QgcywgdWludDMyeDJfdCB0KTsKKyAgICAgdWludDE2eDRfdCBwdW5wY2tsaHdfdSAodWludDE2eDRfdCBzLCB1aW50MTZ4NF90IHQpOworICAgICB1aW50OHg4X3QgcHVucGNrbGJoX3UgKHVpbnQ4eDhfdCBzLCB1aW50OHg4X3QgdCk7CisgICAgIGludDMyeDJfdCBwdW5wY2tsd2RfcyAoaW50MzJ4Ml90IHMsIGludDMyeDJfdCB0KTsKKyAgICAgaW50MTZ4NF90IHB1bnBja2xod19zIChpbnQxNng0X3QgcywgaW50MTZ4NF90IHQpOworICAgICBpbnQ4eDhfdCBwdW5wY2tsYmhfcyAoaW50OHg4X3QgcywgaW50OHg4X3QgdCk7Cis8L3ByZT4KKyA8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iUGFpcmVkXzAwMmRTaW5nbGUtQXJpdGhtZXRpYy5odG1sI1BhaXJlZF8wMDJkU2luZ2xlLUFyaXRobWV0aWMiPlBhaXJlZC1TaW5nbGUgQXJpdGhtZXRpYzwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlBhaXJlZF8wMDJkU2luZ2xlLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNQYWlyZWRfMDAyZFNpbmdsZS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5QYWlyZWQtU2luZ2xlIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ik1JUFNfMDAyZDNELUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNNSVBTXzAwMmQzRC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5NSVBTLTNEIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01JUFMtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NSVBTLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM1YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NSVBTLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDY2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUlQUyBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyIgdGl0bGU9Ik1pY3JvQmxhemUgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyIgdGl0bGU9Ik1NSVggT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSVBTLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjTU1JWC1PcHRpb25zIj5NTUlYIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNNaWNyb0JsYXplLU9wdGlvbnMiPk1pY3JvQmxhemUgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4yNiBNSVBTIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NSVBTLW9wdGlvbnMtMTcyNyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LUVCPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1FQi0xNzI4Ij48L2E+R2VuZXJhdGUgYmlnLWVuZGlhbiBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUVMPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1FTC0xNzI5Ij48L2E+R2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBjb2RlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXBzKmVsLSotKjwvc3Bhbj48L3NhbXA+JnJzcXVvOworY29uZmlndXJhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFyY2g9PC9jb2RlPjx2YXI+YXJjaDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tYXJjaC0xNzMwIj48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHJ1bnMgb24gPHZhcj5hcmNoPC92YXI+LCB3aGljaCBjYW4gYmUgdGhlIG5hbWUgb2YgYQorZ2VuZXJpYyBNSVBTIElTQSwgb3IgdGhlIG5hbWUgb2YgYSBwYXJ0aWN1bGFyIHByb2Nlc3Nvci4gCitUaGUgSVNBIG5hbWVzIGFyZToKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlwczE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlwczI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlwczM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlwczQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1pcHMzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXBzMzJyMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXBzNjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlwczY0cjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorVGhlIHByb2Nlc3NvciBuYW1lcyBhcmU6CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjRrYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40a208L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NGtwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjRrc2M8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjRrZWM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NGtlbTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40a2VwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjRrc2Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjVrYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj41a2Y8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjIwa2M8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjI0a2M8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MjRrZjJfMTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yNGtmMV8xPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yNGtlYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yNGtlZjJfMTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yNGtlZjFfMTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MzRrYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4zNGtmMl8xPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjM0a2YxXzE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MzRrbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NzRrYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj43NGtmMl8xPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjc0a2YxXzE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NzRrZjNfMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTAwNGtjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjEwMDRrZjJfMTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4xMDA0a2YxXzE8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvb25nc29uMmU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9vbmdzb24yZjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb29uZ3NvbjNhPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tNGs8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9jdGVvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vY3Rlb24rPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9jdGVvbjI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9yaW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMjAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMzAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMzkwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yNDAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yNDQwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjQ2MDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjQ2NTA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjQ3MDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjYwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjgwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJtNzAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ybTkwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIxMDAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yMTIwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cjE0MDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnIxNjAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2IxPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zcjcxMDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52cjQxMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dnI0MTExPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnZyNDEyMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52cjQxMzA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dnI0MzAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52cjUwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dnI1NDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnZyNTUwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+eGxyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnhscDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitUaGUgc3BlY2lhbCB2YWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZyb20tYWJpPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlbGVjdHMgdGhlCittb3N0IGNvbXBhdGlibGUgYXJjaGl0ZWN0dXJlIGZvciB0aGUgc2VsZWN0ZWQgQUJJICh0aGF0IGlzLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXBzMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgMzItYml0IEFCSXMgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWlwczM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDY0LWJpdCBBQklzKS4KKworICAgICA8cD5UaGUgbmF0aXZlIExpbnV4L0dOVSB0b29sY2hhaW4gYWxzbyBzdXBwb3J0cyB0aGUgdmFsdWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uYXRpdmU8L3NwYW4+PC9zYW1wPiZyc3F1bzssCit3aGljaCBzZWxlY3RzIHRoZSBiZXN0IGFyY2hpdGVjdHVyZSBvcHRpb24gZm9yIHRoZSBob3N0IHByb2Nlc3Nvci4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9bmF0aXZlPC9zcGFuPjwvc2FtcD4gaGFzIG5vIGVmZmVjdCBpZiBHQ0MgZG9lcyBub3QgcmVjb2duaXplCit0aGUgcHJvY2Vzc29yLgorCisgICAgIDxwPkluIHByb2Nlc3NvciBuYW1lcywgYSBmaW5hbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjYW4gYmUgYWJicmV2aWF0ZWQgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5rPC9zcGFuPjwvc2FtcD4mcnNxdW87CisoZm9yIGV4YW1wbGUsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1yMms8L3NwYW4+PC9zYW1wPikuICBQcmVmaXhlcyBhcmUgb3B0aW9uYWwsIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52cjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtYXkgYmUgd3JpdHRlbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+TmFtZXMgb2YgdGhlIGZvcm0gJmxzcXVvOzxzYW1wPjx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5mMl8xPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlZmVyIHRvIHByb2Nlc3NvcnMgd2l0aAorRlBVcyBjbG9ja2VkIGF0IGhhbGYgdGhlIHJhdGUgb2YgdGhlIGNvcmUsIG5hbWVzIG9mIHRoZSBmb3JtCismbHNxdW87PHNhbXA+PHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPmYxXzE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVmZXIgdG8gcHJvY2Vzc29ycyB3aXRoIEZQVXMgY2xvY2tlZCBhdCB0aGUgc2FtZQorcmF0ZSBhcyB0aGUgY29yZSwgYW5kIG5hbWVzIG9mIHRoZSBmb3JtICZsc3F1bzs8c2FtcD48dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+ZjNfMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWZlciB0bworcHJvY2Vzc29ycyB3aXRoIEZQVXMgY2xvY2tlZCBhIHJhdGlvIG9mIDM6MiB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvcmUuIAorRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgJmxzcXVvOzxzYW1wPjx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5mPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFjY2VwdGVkIGFzIGEgc3lub255bQorZm9yICZsc3F1bzs8c2FtcD48dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+ZjJfMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aGlsZSAmbHNxdW87PHNhbXA+PHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPng8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48dmFyPmI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Zng8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXJlCithY2NlcHRlZCBhcyBzeW5vbnltcyBmb3IgJmxzcXVvOzxzYW1wPjx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5mMV8xPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPkdDQyBkZWZpbmVzIHR3byBtYWNyb3MgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLiAgVGhlIGZpcnN0CitpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9NSVBTX0FSQ0g8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdoaWNoIGdpdmVzIHRoZSBuYW1lIG9mIHRhcmdldCBhcmNoaXRlY3R1cmUsIGFzCithIHN0cmluZy4gIFRoZSBzZWNvbmQgaGFzIHRoZSBmb3JtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X01JUFNfQVJDSF88L3NwYW4+PHZhcj5mb288L3Zhcj48L3NhbXA+JnJzcXVvOywKK3doZXJlIDx2YXI+Zm9vPC92YXI+IGlzIHRoZSBjYXBpdGFsaXplZCB2YWx1ZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9NSVBTX0FSQ0g8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorRm9yIGV4YW1wbGUsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1yMjAwMDwvc3Bhbj48L3NhbXA+IHNldHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fTUlQU19BUkNIPC9zcGFuPjwvc2FtcD4mcnNxdW87Cit0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiJyMjAwMCI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kIGRlZmluZXMgdGhlIG1hY3JvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X01JUFNfQVJDSF9SMjAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5Ob3RlIHRoYXQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X01JUFNfQVJDSDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtYWNybyB1c2VzIHRoZSBwcm9jZXNzb3IgbmFtZXMgZ2l2ZW4KK2Fib3ZlLiAgSW4gb3RoZXIgd29yZHMsIGl0IGhhcyB0aGUgZnVsbCBwcmVmaXggYW5kIGRvZXMgbm90CithYmJyZXZpYXRlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+azwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEluIHRoZSBjYXNlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZnJvbS1hYmk8L3NwYW4+PC9zYW1wPiZyc3F1bzssCit0aGUgbWFjcm8gbmFtZXMgdGhlIHJlc29sdmVkIGFyY2hpdGVjdHVyZSAoZWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Im1pcHMxIjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ibWlwczMiPC9zcGFuPjwvc2FtcD4mcnNxdW87KS4gIEl0IG5hbWVzIHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSB3aGVuIG5vCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgZ2l2ZW4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXR1bmU9PC9jb2RlPjx2YXI+YXJjaDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tdHVuZS0xNzMxIj48L2E+T3B0aW1pemUgZm9yIDx2YXI+YXJjaDwvdmFyPi4gIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBvcHRpb24gY29udHJvbHMKK3RoZSB3YXkgaW5zdHJ1Y3Rpb25zIGFyZSBzY2hlZHVsZWQsIGFuZCB0aGUgcGVyY2VpdmVkIGNvc3Qgb2YgYXJpdGhtZXRpYworb3BlcmF0aW9ucy4gIFRoZSBsaXN0IG9mIDx2YXI+YXJjaDwvdmFyPiB2YWx1ZXMgaXMgdGhlIHNhbWUgYXMgZm9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5XaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLCBHQ0Mgb3B0aW1pemVzIGZvciB0aGUgcHJvY2Vzc29yCitzcGVjaWZpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4uICBCeSB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZTwvc3Bhbj48L3NhbXA+IHRvZ2V0aGVyLCBpdCBpcyBwb3NzaWJsZSB0byBnZW5lcmF0ZSBjb2RlIHRoYXQKK3J1bnMgb24gYSBmYW1pbHkgb2YgcHJvY2Vzc29ycywgYnV0IG9wdGltaXplIHRoZSBjb2RlIGZvciBvbmUKK3BhcnRpY3VsYXIgbWVtYmVyIG9mIHRoYXQgZmFtaWx5LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZTwvc3Bhbj48L3NhbXA+IGRlZmluZXMgdGhlIG1hY3JvcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9NSVBTX1RVTkU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9NSVBTX1RVTkVfPC9zcGFuPjx2YXI+Zm9vPC92YXI+PC9zYW1wPiZyc3F1bzssIHdoaWNoIHdvcmsgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gb25lcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlwczE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pcHMxLTE3MzIiPjwvYT5FcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1taXBzMTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pcHMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taXBzMi0xNzMzIj48L2E+RXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9bWlwczI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taXBzMzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlwczMtMTczNCI+PC9hPkVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPW1pcHMzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlwczQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pcHM0LTE3MzUiPjwvYT5FcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1taXBzNDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pcHMzMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlwczMyLTE3MzYiPjwvYT5FcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1taXBzMzI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taXBzMzJyMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlwczMycjItMTczNyI+PC9hPkVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPW1pcHMzMnIyPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlwczY0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taXBzNjQtMTczOCI+PC9hPkVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPW1pcHM2NDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pcHM2NHIyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taXBzNjRyMi0xNzM5Ij48L2E+RXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9bWlwczY0cjI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taXBzMTY8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbWlwczE2PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taXBzMTYtMTc0MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbWlwczE2LTE3NDEiPjwvYT5HZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSBNSVBTMTYgY29kZS4gIElmIEdDQyBpcyB0YXJnZXRpbmcgYQorTUlQUzMyIG9yIE1JUFM2NCBhcmNoaXRlY3R1cmUsIGl0IG1ha2VzIHVzZSBvZiB0aGUgTUlQUzE2ZSBBU0UuCisKKyAgICAgPHA+TUlQUzE2IGNvZGUgZ2VuZXJhdGlvbiBjYW4gYWxzbyBiZSBjb250cm9sbGVkIG9uIGEgcGVyLWZ1bmN0aW9uIGJhc2lzCitieSBtZWFucyBvZiA8Y29kZT5taXBzMTY8L2NvZGU+IGFuZCA8Y29kZT5ub21pcHMxNjwvY29kZT4gYXR0cmlidXRlcy4gCitTZWUgPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZmxpcC1taXBzMTY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1mbGlwXzAwMmRtaXBzMTYtMTc0MiI+PC9hPkdlbmVyYXRlIE1JUFMxNiBjb2RlIG9uIGFsdGVybmF0aW5nIGZ1bmN0aW9ucy4gIFRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkCitmb3IgcmVncmVzc2lvbiB0ZXN0aW5nIG9mIG1peGVkIE1JUFMxNi9ub24tTUlQUzE2IGNvZGUgZ2VuZXJhdGlvbiwgYW5kIGlzCitub3QgaW50ZW5kZWQgZm9yIG9yZGluYXJ5IHVzZSBpbiBjb21waWxpbmcgdXNlciBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pbnRlcmxpbmstbWlwczE2PC9jb2RlPjxkdD48Y29kZT4tbW5vLWludGVybGluay1taXBzMTY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pbnRlcmxpbmtfMDAyZG1pcHMxNi0xNzQzIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRpbnRlcmxpbmtfMDAyZG1pcHMxNi0xNzQ0Ij48L2E+UmVxdWlyZSAoZG8gbm90IHJlcXVpcmUpIHRoYXQgbm9uLU1JUFMxNiBjb2RlIGJlIGxpbmstY29tcGF0aWJsZSB3aXRoCitNSVBTMTYgY29kZS4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwgbm9uLU1JUFMxNiBjb2RlIGNhbm5vdCBqdW1wIGRpcmVjdGx5IHRvIE1JUFMxNiBjb2RlOworaXQgbXVzdCBlaXRoZXIgdXNlIGEgY2FsbCBvciBhbiBpbmRpcmVjdCBqdW1wLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1pbnRlcmxpbmstbWlwczE2PC9zcGFuPjwvc2FtcD4KK3RoZXJlZm9yZSBkaXNhYmxlcyBkaXJlY3QganVtcHMgdW5sZXNzIEdDQyBrbm93cyB0aGF0IHRoZSB0YXJnZXQgb2YgdGhlCitqdW1wIGlzIG5vdCBNSVBTMTYuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFiaT0zMjwvY29kZT48ZHQ+PGNvZGU+LW1hYmk9bzY0PC9jb2RlPjxkdD48Y29kZT4tbWFiaT1uMzI8L2NvZGU+PGR0Pjxjb2RlPi1tYWJpPTY0PC9jb2RlPjxkdD48Y29kZT4tbWFiaT1lYWJpPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYWJpXzAwM2QzMi0xNzQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWFiaV8wMDNkbzY0LTE3NDYiPjwvYT48YSBuYW1lPSJpbmRleC1tYWJpXzAwM2RuMzItMTc0NyI+PC9hPjxhIG5hbWU9ImluZGV4LW1hYmlfMDAzZDY0LTE3NDgiPjwvYT48YSBuYW1lPSJpbmRleC1tYWJpXzAwM2RlYWJpLTE3NDkiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgZ2l2ZW4gQUJJLgorCisgICAgIDxwPk5vdGUgdGhhdCB0aGUgRUFCSSBoYXMgYSAzMi1iaXQgYW5kIGEgNjQtYml0IHZhcmlhbnQuICBHQ0Mgbm9ybWFsbHkKK2dlbmVyYXRlcyA2NC1iaXQgY29kZSB3aGVuIHlvdSBzZWxlY3QgYSA2NC1iaXQgYXJjaGl0ZWN0dXJlLCBidXQgeW91CitjYW4gdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZ3AzMjwvc3Bhbj48L3NhbXA+IHRvIGdldCAzMi1iaXQgY29kZSBpbnN0ZWFkLgorCisgICAgIDxwPkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgTzY0IEFCSSwgc2VlCis8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvcHJvamVjdHMvbWlwc282NC1hYmkuaHRtbCI+aHR0cDovL2djYy5nbnUub3JnL3Byb2plY3RzL21pcHNvNjQtYWJpLmh0bWw8L2E+LgorCisgICAgIDxwPkdDQyBzdXBwb3J0cyBhIHZhcmlhbnQgb2YgdGhlIG8zMiBBQkkgaW4gd2hpY2ggZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzCithcmUgNjQgcmF0aGVyIHRoYW4gMzIgYml0cyB3aWRlLiAgWW91IGNhbiBzZWxlY3QgdGhpcyBjb21iaW5hdGlvbiB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFiaT0zMjwvc3Bhbj48L3NhbXA+IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnA2NDwvc3Bhbj48L3NhbXA+LiAgVGhpcyBBQkkgcmVsaWVzIG9uIHRoZSA8Y29kZT5tdGhjMTwvY29kZT4KK2FuZCA8Y29kZT5tZmhjMTwvY29kZT4gaW5zdHJ1Y3Rpb25zIGFuZCBpcyB0aGVyZWZvcmUgb25seSBzdXBwb3J0ZWQgZm9yCitNSVBTMzJSMiBwcm9jZXNzb3JzLgorCisgICAgIDxwPlRoZSByZWdpc3RlciBhc3NpZ25tZW50cyBmb3IgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIHJlbWFpbiB0aGUKK3NhbWUsIGJ1dCBlYWNoIHNjYWxhciB2YWx1ZSBpcyBwYXNzZWQgaW4gYSBzaW5nbGUgNjQtYml0IHJlZ2lzdGVyCityYXRoZXIgdGhhbiBhIHBhaXIgb2YgMzItYml0IHJlZ2lzdGVycy4gIEZvciBleGFtcGxlLCBzY2FsYXIKK2Zsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kZjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb25seSwgbm90IGEKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JGYwPC9zcGFuPjwvc2FtcD4mcnNxdW87LyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JGYxPC9zcGFuPjwvc2FtcD4mcnNxdW87IHBhaXIuICBUaGUgc2V0IG9mIGNhbGwtc2F2ZWQgcmVnaXN0ZXJzIGFsc28KK3JlbWFpbnMgdGhlIHNhbWUsIGJ1dCBhbGwgNjQgYml0cyBhcmUgc2F2ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFiaWNhbGxzPC9jb2RlPjxkdD48Y29kZT4tbW5vLWFiaWNhbGxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYWJpY2FsbHMtMTc1MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYWJpY2FsbHMtMTc1MSI+PC9hPkdlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIGNvZGUgdGhhdCBpcyBzdWl0YWJsZSBmb3IgU1ZSNC1zdHlsZQorZHluYW1pYyBvYmplY3RzLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hYmljYWxsczwvc3Bhbj48L3NhbXA+IGlzIHRoZSBkZWZhdWx0IGZvciBTVlI0LWJhc2VkCitzeXN0ZW1zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zaGFyZWQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc2hhcmVkPC9jb2RlPjxkZD5HZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSBjb2RlIHRoYXQgaXMgZnVsbHkgcG9zaXRpb24taW5kZXBlbmRlbnQsCithbmQgdGhhdCBjYW4gdGhlcmVmb3JlIGJlIGxpbmtlZCBpbnRvIHNoYXJlZCBsaWJyYXJpZXMuICBUaGlzIG9wdGlvbgorb25seSBhZmZlY3RzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWJpY2FsbHM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5BbGwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hYmljYWxsczwvc3Bhbj48L3NhbXA+IGNvZGUgaGFzIHRyYWRpdGlvbmFsbHkgYmVlbiBwb3NpdGlvbi1pbmRlcGVuZGVudCwKK3JlZ2FyZGxlc3Mgb2Ygb3B0aW9ucyBsaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGljPC9zcGFuPjwvc2FtcD4uICBIb3dldmVyLAorYXMgYW4gZXh0ZW5zaW9uLCB0aGUgR05VIHRvb2xjaGFpbiBhbGxvd3MgZXhlY3V0YWJsZXMgdG8gdXNlIGFic29sdXRlCithY2Nlc3NlcyBmb3IgbG9jYWxseS1iaW5kaW5nIHN5bWJvbHMuICBJdCBjYW4gYWxzbyB1c2Ugc2hvcnRlciBHUAoraW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIGFuZCBnZW5lcmF0ZSBkaXJlY3QgY2FsbHMgdG8gbG9jYWxseS1kZWZpbmVkCitmdW5jdGlvbnMuICBUaGlzIG1vZGUgaXMgc2VsZWN0ZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1zaGFyZWQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXNoYXJlZDwvc3Bhbj48L3NhbXA+IGRlcGVuZHMgb24gYmludXRpbHMgMi4xNiBvciBoaWdoZXIgYW5kIGdlbmVyYXRlcworb2JqZWN0cyB0aGF0IGNhbiBvbmx5IGJlIGxpbmtlZCBieSB0aGUgR05VIGxpbmtlci4gIEhvd2V2ZXIsIHRoZSBvcHRpb24KK2RvZXMgbm90IGFmZmVjdCB0aGUgQUJJIG9mIHRoZSBmaW5hbCBleGVjdXRhYmxlOyBpdCBvbmx5IGFmZmVjdHMgdGhlIEFCSQorb2YgcmVsb2NhdGFibGUgb2JqZWN0cy4gIFVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tc2hhcmVkPC9zcGFuPjwvc2FtcD4gZ2VuZXJhbGx5IG1ha2VzCitleGVjdXRhYmxlcyBib3RoIHNtYWxsZXIgYW5kIHF1aWNrZXIuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zaGFyZWQ8L3NwYW4+PC9zYW1wPiBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcGx0PC9jb2RlPjxkdD48Y29kZT4tbW5vLXBsdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXBsdC0xNzUyIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRwbHQtMTc1MyI+PC9hPkFzc3VtZSAoZG8gbm90IGFzc3VtZSkgdGhhdCB0aGUgc3RhdGljIGFuZCBkeW5hbWljIGxpbmtlcnMKK3N1cHBvcnQgUExUcyBhbmQgY29weSByZWxvY2F0aW9ucy4gIFRoaXMgb3B0aW9uIG9ubHkgYWZmZWN0cworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1zaGFyZWQgLW1hYmljYWxsczwvc3Bhbj48L3NhbXA+LiAgRm9yIHRoZSBuNjQgQUJJLCB0aGlzIG9wdGlvbgoraGFzIG5vIGVmZmVjdCB3aXRob3V0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3ltMzI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5Zb3UgY2FuIG1ha2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wbHQ8L3NwYW4+PC9zYW1wPiB0aGUgZGVmYXVsdCBieSBjb25maWd1cmluZworR0NDIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLW1pcHMtcGx0PC9zcGFuPjwvc2FtcD4uICBUaGUgZGVmYXVsdCBpcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1wbHQ8L3NwYW4+PC9zYW1wPiBvdGhlcndpc2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXhnb3Q8L2NvZGU+PGR0Pjxjb2RlPi1tbm8teGdvdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXhnb3QtMTc1NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkeGdvdC0xNzU1Ij48L2E+TGlmdCAoZG8gbm90IGxpZnQpIHRoZSB1c3VhbCByZXN0cmljdGlvbnMgb24gdGhlIHNpemUgb2YgdGhlIGdsb2JhbAorb2Zmc2V0IHRhYmxlLgorCisgICAgIDxwPkdDQyBub3JtYWxseSB1c2VzIGEgc2luZ2xlIGluc3RydWN0aW9uIHRvIGxvYWQgdmFsdWVzIGZyb20gdGhlIEdPVC4gCitXaGlsZSB0aGlzIGlzIHJlbGF0aXZlbHkgZWZmaWNpZW50LCBpdCBvbmx5IHdvcmtzIGlmIHRoZSBHT1QKK2lzIHNtYWxsZXIgdGhhbiBhYm91dCA2NGsuICBBbnl0aGluZyBsYXJnZXIgY2F1c2VzIHRoZSBsaW5rZXIKK3RvIHJlcG9ydCBhbiBlcnJvciBzdWNoIGFzOgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXJlbG9jYXRpb24tdHJ1bmNhdGVkLXRvLWZpdC1fMDAyOE1JUFNfMDAyOS0xNzU2Ij48L2E+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl9NSVBTX0dPVDE2IGZvb2JhcgorPC9wcmU+CisgICAgIDxwPklmIHRoaXMgaGFwcGVucywgeW91IHNob3VsZCByZWNvbXBpbGUgeW91ciBjb2RlIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW14Z290PC9zcGFuPjwvc2FtcD4uIAorVGhpcyB3b3JrcyB3aXRoIHZlcnkgbGFyZ2UgR09UcywgYWx0aG91Z2ggdGhlIGNvZGUgaXMgYWxzbworbGVzcyBlZmZpY2llbnQsIHNpbmNlIGl0IHRha2VzIHRocmVlIGluc3RydWN0aW9ucyB0byBmZXRjaCB0aGUKK3ZhbHVlIG9mIGEgZ2xvYmFsIHN5bWJvbC4KKworICAgICA8cD5Ob3RlIHRoYXQgc29tZSBsaW5rZXJzIGNhbiBjcmVhdGUgbXVsdGlwbGUgR09Ucy4gIElmIHlvdSBoYXZlIHN1Y2ggYQorbGlua2VyLCB5b3Ugc2hvdWxkIG9ubHkgbmVlZCB0byB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW14Z290PC9zcGFuPjwvc2FtcD4gd2hlbiBhIHNpbmdsZSBvYmplY3QKK2ZpbGUgYWNjZXNzZXMgbW9yZSB0aGFuIDY0aydzIHdvcnRoIG9mIEdPVCBlbnRyaWVzLiAgVmVyeSBmZXcgZG8uCisKKyAgICAgPHA+VGhlc2Ugb3B0aW9ucyBoYXZlIG5vIGVmZmVjdCB1bmxlc3MgR0NDIGlzIGdlbmVyYXRpbmcgcG9zaXRpb24KK2luZGVwZW5kZW50IGNvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWdwMzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ncDMyLTE3NTciPjwvYT5Bc3N1bWUgdGhhdCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGFyZSAzMiBiaXRzIHdpZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWdwNjQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ncDY0LTE3NTgiPjwvYT5Bc3N1bWUgdGhhdCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGFyZSA2NCBiaXRzIHdpZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZwMzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1mcDMyLTE3NTkiPjwvYT5Bc3N1bWUgdGhhdCBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgYXJlIDMyIGJpdHMgd2lkZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZnA2NDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZwNjQtMTc2MCI+PC9hPkFzc3VtZSB0aGF0IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBhcmUgNjQgYml0cyB3aWRlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1oYXJkLWZsb2F0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taGFyZF8wMDJkZmxvYXQtMTc2MSI+PC9hPlVzZSBmbG9hdGluZy1wb2ludCBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNvZnQtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zb2Z0XzAwMmRmbG9hdC0xNzYyIj48L2E+RG8gbm90IHVzZSBmbG9hdGluZy1wb2ludCBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuICBJbXBsZW1lbnQKK2Zsb2F0aW5nLXBvaW50IGNhbGN1bGF0aW9ucyB1c2luZyBsaWJyYXJ5IGNhbGxzIGluc3RlYWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWZsb2F0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZsb2F0LTE3NjMiPjwvYT5FcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc29mdC1mbG9hdDwvc3Bhbj48L3NhbXA+LCBidXQgYWRkaXRpb25hbGx5IGFzc2VydHMgdGhhdCB0aGUKK3Byb2dyYW0gYmVpbmcgY29tcGlsZWQgZG9lcyBub3QgcGVyZm9ybSBhbnkgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4gCitUaGlzIG9wdGlvbiBpcyBwcmVzZW50bHkgc3VwcG9ydGVkIG9ubHkgYnkgc29tZSBiYXJlLW1ldGFsIE1JUFMKK2NvbmZpZ3VyYXRpb25zLCB3aGVyZSBpdCBtYXkgc2VsZWN0IGEgc3BlY2lhbCBzZXQgb2YgbGlicmFyaWVzCit0aGF0IGxhY2sgYWxsIGZsb2F0aW5nLXBvaW50IHN1cHBvcnQgKGluY2x1ZGluZywgZm9yIGV4YW1wbGUsIHRoZQorZmxvYXRpbmctcG9pbnQgPGNvZGU+cHJpbnRmPC9jb2RlPiBmb3JtYXRzKS4gCitJZiBjb2RlIGNvbXBpbGVkIHdpdGggPGNvZGU+LW1uby1mbG9hdDwvY29kZT4gYWNjaWRlbnRhbGx5IGNvbnRhaW5zCitmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLCBpdCBpcyBsaWtlbHkgdG8gc3VmZmVyIGEgbGluay10aW1lCitvciBydW4tdGltZSBmYWlsdXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zaW5nbGUtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW5nbGVfMDAyZGZsb2F0LTE3NjQiPjwvYT5Bc3N1bWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY29wcm9jZXNzb3Igb25seSBzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uCitvcGVyYXRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kb3VibGUtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1kb3VibGVfMDAyZGZsb2F0LTE3NjUiPjwvYT5Bc3N1bWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY29wcm9jZXNzb3Igc3VwcG9ydHMgZG91YmxlLXByZWNpc2lvbgorb3BlcmF0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxsc2M8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbGxzYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxsc2MtMTc2NiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbGxzYy0xNzY3Ij48L2E+VXNlIChkbyBub3QgdXNlKSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxsPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zeW5jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9ucyB0bworaW1wbGVtZW50IGF0b21pYyBtZW1vcnkgYnVpbHQtaW4gZnVuY3Rpb25zLiAgV2hlbiBuZWl0aGVyIG9wdGlvbiBpcworc3BlY2lmaWVkLCBHQ0MgdXNlcyB0aGUgaW5zdHJ1Y3Rpb25zIGlmIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlCitzdXBwb3J0cyB0aGVtLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbGxzYzwvc3Bhbj48L3NhbXA+IGlzIHVzZWZ1bCBpZiB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBjYW4gZW11bGF0ZSB0aGUKK2luc3RydWN0aW9ucyBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1sbHNjPC9zcGFuPjwvc2FtcD4gY2FuIGJlIHVzZWZ1bCB3aGVuIGNvbXBpbGluZyBmb3IKK25vbnN0YW5kYXJkIElTQXMuICBZb3UgY2FuIG1ha2UgZWl0aGVyIG9wdGlvbiB0aGUgZGVmYXVsdCBieQorY29uZmlndXJpbmcgR0NDIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLWxsc2M8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRob3V0LWxsc2M8L3NwYW4+PC9zYW1wPgorcmVzcGVjdGl2ZWx5LiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLWxsc2M8L3NwYW4+PC9zYW1wPiBpcyB0aGUgZGVmYXVsdCBmb3Igc29tZQorY29uZmlndXJhdGlvbnM7IHNlZSB0aGUgaW5zdGFsbGF0aW9uIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRzcDwvY29kZT48ZHQ+PGNvZGU+LW1uby1kc3A8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1kc3AtMTc2OCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZHNwLTE3NjkiPjwvYT5Vc2UgKGRvIG5vdCB1c2UpIHJldmlzaW9uIDEgb2YgdGhlIE1JUFMgRFNQIEFTRS4gCitTZWUgPGEgaHJlZj0iTUlQUy1EU1AtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk1JUFMgRFNQIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4uICBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZQorcHJlcHJvY2Vzc29yIG1hY3JvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19taXBzX2RzcDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEl0IGFsc28gZGVmaW5lcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX21pcHNfZHNwX3Jldjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byAxLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kc3ByMjwvY29kZT48ZHQ+PGNvZGU+LW1uby1kc3ByMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWRzcHIyLTE3NzAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGRzcHIyLTE3NzEiPjwvYT5Vc2UgKGRvIG5vdCB1c2UpIHJldmlzaW9uIDIgb2YgdGhlIE1JUFMgRFNQIEFTRS4gCitTZWUgPGEgaHJlZj0iTUlQUy1EU1AtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk1JUFMgRFNQIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4uICBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZQorcHJlcHJvY2Vzc29yIG1hY3JvcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fbWlwc19kc3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19taXBzX2RzcHIyPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK0l0IGFsc28gZGVmaW5lcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fbWlwc19kc3BfcmV2PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIDIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNtYXJ0bWlwczwvY29kZT48ZHQ+PGNvZGU+LW1uby1zbWFydG1pcHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zbWFydG1pcHMtMTc3MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc21hcnRtaXBzLTE3NzMiPjwvYT5Vc2UgKGRvIG5vdCB1c2UpIHRoZSBNSVBTIFNtYXJ0TUlQUyBBU0UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBhaXJlZC1zaW5nbGU8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcGFpcmVkLXNpbmdsZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXBhaXJlZF8wMDJkc2luZ2xlLTE3NzQiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHBhaXJlZF8wMDJkc2luZ2xlLTE3NzUiPjwvYT5Vc2UgKGRvIG5vdCB1c2UpIHBhaXJlZC1zaW5nbGUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiAKK1NlZSA8YSBocmVmPSJNSVBTLVBhaXJlZF8wMDJkU2luZ2xlLVN1cHBvcnQuaHRtbCNNSVBTLVBhaXJlZF8wMDJkU2luZ2xlLVN1cHBvcnQiPk1JUFMgUGFpcmVkLVNpbmdsZSBTdXBwb3J0PC9hPi4gIFRoaXMgb3B0aW9uIHJlcXVpcmVzCitoYXJkd2FyZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0IHRvIGJlIGVuYWJsZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRteDwvY29kZT48ZHQ+PGNvZGU+LW1uby1tZG14PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZG14LTE3NzYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG1kbXgtMTc3NyI+PC9hPlVzZSAoZG8gbm90IHVzZSkgTUlQUyBEaWdpdGFsIE1lZGlhIEV4dGVuc2lvbiBpbnN0cnVjdGlvbnMuIAorVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUgYW5kIHJlcXVpcmVzCitoYXJkd2FyZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0IHRvIGJlIGVuYWJsZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlwczNkPC9jb2RlPjxkdD48Y29kZT4tbW5vLW1pcHMzZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlwczNkLTE3NzgiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG1pcHMzZC0xNzc5Ij48L2E+VXNlIChkbyBub3QgdXNlKSB0aGUgTUlQUy0zRCBBU0UuICBTZWUgPGEgaHJlZj0iTUlQU18wMDJkM0QtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFNfMDAyZDNELUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk1JUFMtM0QgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPi4gCitUaGUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taXBzM2Q8L3NwYW4+PC9zYW1wPiBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGFpcmVkLXNpbmdsZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tdDwvY29kZT48ZHQ+PGNvZGU+LW1uby1tdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW10LTE3ODAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG10LTE3ODEiPjwvYT5Vc2UgKGRvIG5vdCB1c2UpIE1UIE11bHRpdGhyZWFkaW5nIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbWN1PC9jb2RlPjxkdD48Y29kZT4tbW5vLW1jdTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW1jdS0xNzgyIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRtY3UtMTc4MyI+PC9hPlVzZSAoZG8gbm90IHVzZSkgdGhlIE1JUFMgTUNVIEFTRSBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmc2NDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxvbmc2NC0xNzg0Ij48L2E+Rm9yY2UgPGNvZGU+bG9uZzwvY29kZT4gdHlwZXMgdG8gYmUgNjQgYml0cyB3aWRlLiAgU2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbG9uZzMyPC9zcGFuPjwvc2FtcD4gZm9yCithbiBleHBsYW5hdGlvbiBvZiB0aGUgZGVmYXVsdCBhbmQgdGhlIHdheSB0aGF0IHRoZSBwb2ludGVyIHNpemUgaXMKK2RldGVybWluZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmczMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxvbmczMi0xNzg1Ij48L2E+Rm9yY2UgPGNvZGU+bG9uZzwvY29kZT4sIDxjb2RlPmludDwvY29kZT4sIGFuZCBwb2ludGVyIHR5cGVzIHRvIGJlIDMyIGJpdHMgd2lkZS4KKworICAgICA8cD5UaGUgZGVmYXVsdCBzaXplIG9mIDxjb2RlPmludDwvY29kZT5zLCA8Y29kZT5sb25nPC9jb2RlPnMgYW5kIHBvaW50ZXJzIGRlcGVuZHMgb24KK3RoZSBBQkkuICBBbGwgdGhlIHN1cHBvcnRlZCBBQklzIHVzZSAzMi1iaXQgPGNvZGU+aW50PC9jb2RlPnMuICBUaGUgbjY0IEFCSQordXNlcyA2NC1iaXQgPGNvZGU+bG9uZzwvY29kZT5zLCBhcyBkb2VzIHRoZSA2NC1iaXQgRUFCSTsgdGhlIG90aGVycyB1c2UKKzMyLWJpdCA8Y29kZT5sb25nPC9jb2RlPnMuICBQb2ludGVycyBhcmUgdGhlIHNhbWUgc2l6ZSBhcyA8Y29kZT5sb25nPC9jb2RlPnMsCitvciB0aGUgc2FtZSBzaXplIGFzIGludGVnZXIgcmVnaXN0ZXJzLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3ltMzI8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc3ltMzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zeW0zMi0xNzg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzeW0zMi0xNzg3Ij48L2E+QXNzdW1lIChkbyBub3QgYXNzdW1lKSB0aGF0IGFsbCBzeW1ib2xzIGhhdmUgMzItYml0IHZhbHVlcywgcmVnYXJkbGVzcworb2YgdGhlIHNlbGVjdGVkIEFCSS4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFiaT02NDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWFiaWNhbGxzPC9zcGFuPjwvc2FtcD4gYmVjYXVzZSBpdCBhbGxvd3MgR0NDCit0byBnZW5lcmF0ZSBzaG9ydGVyIGFuZCBmYXN0ZXIgcmVmZXJlbmNlcyB0byBzeW1ib2xpYyBhZGRyZXNzZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tRyA8L2NvZGU+PHZhcj5udW08L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtRy0xNzg4Ij48L2E+UHV0IGRlZmluaXRpb25zIG9mIGV4dGVybmFsbHktdmlzaWJsZSBkYXRhIGluIGEgc21hbGwgZGF0YSBzZWN0aW9uCitpZiB0aGF0IGRhdGEgaXMgbm8gYmlnZ2VyIHRoYW4gPHZhcj5udW08L3Zhcj4gYnl0ZXMuICBHQ0MgY2FuIHRoZW4gZ2VuZXJhdGUKK21vcmUgZWZmaWNpZW50IGFjY2Vzc2VzIHRvIHRoZSBkYXRhOyBzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1ncG9wdDwvc3Bhbj48L3NhbXA+IGZvciBkZXRhaWxzLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1HPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGRlcGVuZHMgb24gdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvY2FsLXNkYXRhPC9jb2RlPjxkdD48Y29kZT4tbW5vLWxvY2FsLXNkYXRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbG9jYWxfMDAyZHNkYXRhLTE3ODkiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGxvY2FsXzAwMmRzZGF0YS0xNzkwIj48L2E+RXh0ZW5kIChkbyBub3QgZXh0ZW5kKSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUc8L3NwYW4+PC9zYW1wPiBiZWhhdmlvciB0byBsb2NhbCBkYXRhIHRvbywKK3N1Y2ggYXMgdG8gc3RhdGljIHZhcmlhYmxlcyBpbiBDLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1sb2NhbC1zZGF0YTwvc3Bhbj48L3NhbXA+IGlzIHRoZQorZGVmYXVsdCBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zLgorCisgICAgIDxwPklmIHRoZSBsaW5rZXIgY29tcGxhaW5zIHRoYXQgYW4gYXBwbGljYXRpb24gaXMgdXNpbmcgdG9vIG11Y2ggc21hbGwgZGF0YSwKK3lvdSBtaWdodCB3YW50IHRvIHRyeSByZWJ1aWxkaW5nIHRoZSBsZXNzIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhcnRzIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tbG9jYWwtc2RhdGE8L3NwYW4+PC9zYW1wPi4gIFlvdSBtaWdodCBhbHNvIHdhbnQgdG8gYnVpbGQgbGFyZ2UKK2xpYnJhcmllcyB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tbG9jYWwtc2RhdGE8L3NwYW4+PC9zYW1wPiwgc28gdGhhdCB0aGUgbGlicmFyaWVzIGxlYXZlCittb3JlIHJvb20gZm9yIHRoZSBtYWluIHByb2dyYW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWV4dGVybi1zZGF0YTwvY29kZT48ZHQ+PGNvZGU+LW1uby1leHRlcm4tc2RhdGE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1leHRlcm5fMDAyZHNkYXRhLTE3OTEiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGV4dGVybl8wMDJkc2RhdGEtMTc5MiI+PC9hPkFzc3VtZSAoZG8gbm90IGFzc3VtZSkgdGhhdCBleHRlcm5hbGx5LWRlZmluZWQgZGF0YSBpcyBpbgorYSBzbWFsbCBkYXRhIHNlY3Rpb24gaWYgdGhlIHNpemUgb2YgdGhhdCBkYXRhIGlzIHdpdGhpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUc8L3NwYW4+PC9zYW1wPiBsaW1pdC4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWV4dGVybi1zZGF0YTwvc3Bhbj48L3NhbXA+IGlzIHRoZSBkZWZhdWx0IGZvciBhbGwgY29uZmlndXJhdGlvbnMuCisKKyAgICAgPHA+SWYgeW91IGNvbXBpbGUgYSBtb2R1bGUgPHZhcj5Nb2Q8L3Zhcj4gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWV4dGVybi1zZGF0YTwvc3Bhbj48L3NhbXA+IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1HCis8L3NwYW4+PHZhcj5udW08L3Zhcj48L3NhbXA+IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZ3BvcHQ8L3NwYW4+PC9zYW1wPiwgYW5kIDx2YXI+TW9kPC92YXI+IHJlZmVyZW5jZXMgYSB2YXJpYWJsZSA8dmFyPlZhcjwvdmFyPgordGhhdCBpcyBubyBiaWdnZXIgdGhhbiA8dmFyPm51bTwvdmFyPiBieXRlcywgeW91IG11c3QgbWFrZSBzdXJlIHRoYXQgPHZhcj5WYXI8L3Zhcj4KK2lzIHBsYWNlZCBpbiBhIHNtYWxsIGRhdGEgc2VjdGlvbi4gIElmIDx2YXI+VmFyPC92YXI+IGlzIGRlZmluZWQgYnkgYW5vdGhlcgorbW9kdWxlLCB5b3UgbXVzdCBlaXRoZXIgY29tcGlsZSB0aGF0IG1vZHVsZSB3aXRoIGEgaGlnaC1lbm91Z2gKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1HPC9zcGFuPjwvc2FtcD4gc2V0dGluZyBvciBhdHRhY2ggYSA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRyaWJ1dGUgdG8gPHZhcj5WYXI8L3Zhcj4ncworZGVmaW5pdGlvbi4gIElmIDx2YXI+VmFyPC92YXI+IGlzIGNvbW1vbiwgeW91IG11c3QgbGluayB0aGUgYXBwbGljYXRpb24KK3dpdGggYSBoaWdoLWVub3VnaCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRzwvc3Bhbj48L3NhbXA+IHNldHRpbmcuCisKKyAgICAgPHA+VGhlIGVhc2llc3Qgd2F5IG9mIHNhdGlzZnlpbmcgdGhlc2UgcmVzdHJpY3Rpb25zIGlzIHRvIGNvbXBpbGUKK2FuZCBsaW5rIGV2ZXJ5IG1vZHVsZSB3aXRoIHRoZSBzYW1lIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1HPC9zcGFuPjwvc2FtcD4gb3B0aW9uLiAgSG93ZXZlciwKK3lvdSBtYXkgd2lzaCB0byBidWlsZCBhIGxpYnJhcnkgdGhhdCBzdXBwb3J0cyBzZXZlcmFsIGRpZmZlcmVudAorc21hbGwgZGF0YSBsaW1pdHMuICBZb3UgY2FuIGRvIHRoaXMgYnkgY29tcGlsaW5nIHRoZSBsaWJyYXJ5IHdpdGgKK3RoZSBoaWdoZXN0IHN1cHBvcnRlZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRzwvc3Bhbj48L3NhbXA+IHNldHRpbmcgYW5kIGFkZGl0aW9uYWxseSB1c2luZworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1leHRlcm4tc2RhdGE8L3NwYW4+PC9zYW1wPiB0byBzdG9wIHRoZSBsaWJyYXJ5IGZyb20gbWFraW5nIGFzc3VtcHRpb25zCithYm91dCBleHRlcm5hbGx5LWRlZmluZWQgZGF0YS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZ3BvcHQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZ3BvcHQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ncG9wdC0xNzkzIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRncG9wdC0xNzk0Ij48L2E+VXNlIChkbyBub3QgdXNlKSBHUC1yZWxhdGl2ZSBhY2Nlc3NlcyBmb3Igc3ltYm9scyB0aGF0IGFyZSBrbm93biB0byBiZQoraW4gYSBzbWFsbCBkYXRhIHNlY3Rpb247IHNlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWxvY2FsLXNkYXRhPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWV4dGVybi1zZGF0YTwvc3Bhbj48L3NhbXA+LiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1ncG9wdDwvc3Bhbj48L3NhbXA+IGlzIHRoZSBkZWZhdWx0IGZvciBhbGwKK2NvbmZpZ3VyYXRpb25zLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tZ3BvcHQ8L3NwYW4+PC9zYW1wPiBpcyB1c2VmdWwgZm9yIGNhc2VzIHdoZXJlIHRoZSA8Y29kZT4kZ3A8L2NvZGU+IHJlZ2lzdGVyCittaWdodCBub3QgaG9sZCB0aGUgdmFsdWUgb2YgPGNvZGU+X2dwPC9jb2RlPi4gIEZvciBleGFtcGxlLCBpZiB0aGUgY29kZSBpcworcGFydCBvZiBhIGxpYnJhcnkgdGhhdCBtaWdodCBiZSB1c2VkIGluIGEgYm9vdCBtb25pdG9yLCBwcm9ncmFtcyB0aGF0CitjYWxsIGJvb3QgbW9uaXRvciByb3V0aW5lcyBwYXNzIGFuIHVua25vd24gdmFsdWUgaW4gPGNvZGU+JGdwPC9jb2RlPi4gCisoSW4gc3VjaCBzaXR1YXRpb25zLCB0aGUgYm9vdCBtb25pdG9yIGl0c2VsZiBpcyB1c3VhbGx5IGNvbXBpbGVkCit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1HMDwvc3Bhbj48L3NhbXA+LikKKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWdwb3B0PC9zcGFuPjwvc2FtcD4gaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWxvY2FsLXNkYXRhPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWV4dGVybi1zZGF0YTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1lbWJlZGRlZC1kYXRhPC9jb2RlPjxkdD48Y29kZT4tbW5vLWVtYmVkZGVkLWRhdGE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1lbWJlZGRlZF8wMDJkZGF0YS0xNzk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRlbWJlZGRlZF8wMDJkZGF0YS0xNzk2Ij48L2E+QWxsb2NhdGUgdmFyaWFibGVzIHRvIHRoZSByZWFkLW9ubHkgZGF0YSBzZWN0aW9uIGZpcnN0IGlmIHBvc3NpYmxlLCB0aGVuCituZXh0IGluIHRoZSBzbWFsbCBkYXRhIHNlY3Rpb24gaWYgcG9zc2libGUsIG90aGVyd2lzZSBpbiBkYXRhLiAgVGhpcyBnaXZlcworc2xpZ2h0bHkgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCwgYnV0IHJlZHVjZXMgdGhlIGFtb3VudCBvZiBSQU0gcmVxdWlyZWQKK3doZW4gZXhlY3V0aW5nLCBhbmQgdGh1cyBtYXkgYmUgcHJlZmVycmVkIGZvciBzb21lIGVtYmVkZGVkIHN5c3RlbXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXVuaW5pdC1jb25zdC1pbi1yb2RhdGE8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tdW5pbml0LWNvbnN0LWluLXJvZGF0YTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXVuaW5pdF8wMDJkY29uc3RfMDAyZGluXzAwMmRyb2RhdGEtMTc5NyI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkdW5pbml0XzAwMmRjb25zdF8wMDJkaW5fMDAyZHJvZGF0YS0xNzk4Ij48L2E+UHV0IHVuaW5pdGlhbGl6ZWQgPGNvZGU+Y29uc3Q8L2NvZGU+IHZhcmlhYmxlcyBpbiB0aGUgcmVhZC1vbmx5IGRhdGEgc2VjdGlvbi4gCitUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgaW4gY29uanVuY3Rpb24gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWVtYmVkZGVkLWRhdGE8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY29kZS1yZWFkYWJsZT08L2NvZGU+PHZhcj5zZXR0aW5nPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1jb2RlXzAwMmRyZWFkYWJsZS0xNzk5Ij48L2E+U3BlY2lmeSB3aGV0aGVyIEdDQyBtYXkgZ2VuZXJhdGUgY29kZSB0aGF0IHJlYWRzIGZyb20gZXhlY3V0YWJsZSBzZWN0aW9ucy4gCitUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgc2V0dGluZ3M6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1jb2RlLXJlYWRhYmxlPXllczwvY29kZT48ZGQ+SW5zdHJ1Y3Rpb25zIG1heSBmcmVlbHkgYWNjZXNzIGV4ZWN1dGFibGUgc2VjdGlvbnMuICBUaGlzIGlzIHRoZQorZGVmYXVsdCBzZXR0aW5nLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tbWNvZGUtcmVhZGFibGU9cGNyZWw8L2NvZGU+PGRkPk1JUFMxNiBQQy1yZWxhdGl2ZSBsb2FkIGluc3RydWN0aW9ucyBjYW4gYWNjZXNzIGV4ZWN1dGFibGUgc2VjdGlvbnMsCitidXQgb3RoZXIgaW5zdHJ1Y3Rpb25zIG11c3Qgbm90IGRvIHNvLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIG9uIDRLU2MKK2FuZCA0S1NkIHByb2Nlc3NvcnMgd2hlbiB0aGUgY29kZSBUTEJzIGhhdmUgdGhlIFJlYWQgSW5oaWJpdCBiaXQgc2V0LiAKK0l0IGlzIGFsc28gdXNlZnVsIG9uIHByb2Nlc3NvcnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB0byBoYXZlIGEgZHVhbAoraW5zdHJ1Y3Rpb24vZGF0YSBTUkFNIGludGVyZmFjZSBhbmQgdGhhdCwgbGlrZSB0aGUgTTRLLCBhdXRvbWF0aWNhbGx5CityZWRpcmVjdCBQQy1yZWxhdGl2ZSBsb2FkcyB0byB0aGUgaW5zdHJ1Y3Rpb24gUkFNLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tbWNvZGUtcmVhZGFibGU9bm88L2NvZGU+PGRkPkluc3RydWN0aW9ucyBtdXN0IG5vdCBhY2Nlc3MgZXhlY3V0YWJsZSBzZWN0aW9ucy4gIFRoaXMgb3B0aW9uIGNhbiBiZQordXNlZnVsIG9uIHRhcmdldHMgdGhhdCBhcmUgY29uZmlndXJlZCB0byBoYXZlIGEgZHVhbCBpbnN0cnVjdGlvbi9kYXRhCitTUkFNIGludGVyZmFjZSBidXQgdGhhdCAodW5saWtlIHRoZSBNNEspIGRvIG5vdCBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0CitQQy1yZWxhdGl2ZSBsb2FkcyB0byB0aGUgaW5zdHJ1Y3Rpb24gUkFNLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNwbGl0LWFkZHJlc3NlczwvY29kZT48ZHQ+PGNvZGU+LW1uby1zcGxpdC1hZGRyZXNzZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zcGxpdF8wMDJkYWRkcmVzc2VzLTE4MDAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHNwbGl0XzAwMmRhZGRyZXNzZXMtMTgwMSI+PC9hPkVuYWJsZSAoZGlzYWJsZSkgdXNlIG9mIHRoZSA8Y29kZT4laGkoKTwvY29kZT4gYW5kIDxjb2RlPiVsbygpPC9jb2RlPiBhc3NlbWJsZXIKK3JlbG9jYXRpb24gb3BlcmF0b3JzLiAgVGhpcyBvcHRpb24gaGFzIGJlZW4gc3VwZXJzZWRlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1leHBsaWNpdC1yZWxvY3M8L3NwYW4+PC9zYW1wPiBidXQgaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1leHBsaWNpdC1yZWxvY3M8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZXhwbGljaXQtcmVsb2NzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZXhwbGljaXRfMDAyZHJlbG9jcy0xODAyIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRleHBsaWNpdF8wMDJkcmVsb2NzLTE4MDMiPjwvYT5Vc2UgKGRvIG5vdCB1c2UpIGFzc2VtYmxlciByZWxvY2F0aW9uIG9wZXJhdG9ycyB3aGVuIGRlYWxpbmcgd2l0aCBzeW1ib2xpYworYWRkcmVzc2VzLiAgVGhlIGFsdGVybmF0aXZlLCBzZWxlY3RlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWV4cGxpY2l0LXJlbG9jczwvc3Bhbj48L3NhbXA+LAoraXMgdG8gdXNlIGFzc2VtYmxlciBtYWNyb3MgaW5zdGVhZC4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWV4cGxpY2l0LXJlbG9jczwvc3Bhbj48L3NhbXA+IGlzIHRoZSBkZWZhdWx0IGlmIEdDQyB3YXMgY29uZmlndXJlZAordG8gdXNlIGFuIGFzc2VtYmxlciB0aGF0IHN1cHBvcnRzIHJlbG9jYXRpb24gb3BlcmF0b3JzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jaGVjay16ZXJvLWRpdmlzaW9uPC9jb2RlPjxkdD48Y29kZT4tbW5vLWNoZWNrLXplcm8tZGl2aXNpb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jaGVja18wMDJkemVyb18wMDJkZGl2aXNpb24tMTgwNCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkY2hlY2tfMDAyZHplcm9fMDAyZGRpdmlzaW9uLTE4MDUiPjwvYT5UcmFwIChkbyBub3QgdHJhcCkgb24gaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY2hlY2stemVyby1kaXZpc2lvbjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kaXZpZGUtdHJhcHM8L2NvZGU+PGR0Pjxjb2RlPi1tZGl2aWRlLWJyZWFrczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWRpdmlkZV8wMDJkdHJhcHMtMTgwNiI+PC9hPjxhIG5hbWU9ImluZGV4LW1kaXZpZGVfMDAyZGJyZWFrcy0xODA3Ij48L2E+TUlQUyBzeXN0ZW1zIGNoZWNrIGZvciBkaXZpc2lvbiBieSB6ZXJvIGJ5IGdlbmVyYXRpbmcgZWl0aGVyIGEKK2NvbmRpdGlvbmFsIHRyYXAgb3IgYSBicmVhayBpbnN0cnVjdGlvbi4gIFVzaW5nIHRyYXBzIHJlc3VsdHMgaW4KK3NtYWxsZXIgY29kZSwgYnV0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIE1JUFMgSUkgYW5kIGxhdGVyLiAgQWxzbywgc29tZQordmVyc2lvbnMgb2YgdGhlIExpbnV4IGtlcm5lbCBoYXZlIGEgYnVnIHRoYXQgcHJldmVudHMgdHJhcCBmcm9tCitnZW5lcmF0aW5nIHRoZSBwcm9wZXIgc2lnbmFsICg8Y29kZT5TSUdGUEU8L2NvZGU+KS4gIFVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWRpdmlkZS10cmFwczwvc3Bhbj48L3NhbXA+IHRvCithbGxvdyBjb25kaXRpb25hbCB0cmFwcyBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCB0aGVtIGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1kaXZpZGUtYnJlYWtzPC9zcGFuPjwvc2FtcD4gdG8gZm9yY2UgdGhlIHVzZSBvZiBicmVha3MuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgdXN1YWxseSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWRpdmlkZS10cmFwczwvc3Bhbj48L3NhbXA+LCBidXQgdGhpcyBjYW4gYmUKK292ZXJyaWRkZW4gYXQgY29uZmlndXJlIHRpbWUgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLWRpdmlkZT1icmVha3M8L3NwYW4+PC9zYW1wPi4gCitEaXZpZGUtYnktemVybyBjaGVja3MgY2FuIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgdXNpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tY2hlY2stemVyby1kaXZpc2lvbjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tZW1jcHk8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbWVtY3B5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbWVtY3B5LTE4MDgiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG1lbWNweS0xODA5Ij48L2E+Rm9yY2UgKGRvIG5vdCBmb3JjZSkgdGhlIHVzZSBvZiA8Y29kZT5tZW1jcHkoKTwvY29kZT4gZm9yIG5vbi10cml2aWFsIGJsb2NrCittb3Zlcy4gIFRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tbWVtY3B5PC9zcGFuPjwvc2FtcD4sIHdoaWNoIGFsbG93cyBHQ0MgdG8gaW5saW5lCittb3N0IGNvbnN0YW50LXNpemVkIGNvcGllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbG9uZy1jYWxsczwvY29kZT48ZHQ+PGNvZGU+LW1uby1sb25nLWNhbGxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbG9uZ18wMDJkY2FsbHMtMTgxMCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbG9uZ18wMDJkY2FsbHMtMTgxMSI+PC9hPkRpc2FibGUgKGRvIG5vdCBkaXNhYmxlKSB1c2Ugb2YgdGhlIDxjb2RlPmphbDwvY29kZT4gaW5zdHJ1Y3Rpb24uICBDYWxsaW5nCitmdW5jdGlvbnMgdXNpbmcgPGNvZGU+amFsPC9jb2RlPiBpcyBtb3JlIGVmZmljaWVudCBidXQgcmVxdWlyZXMgdGhlIGNhbGxlcgorYW5kIGNhbGxlZSB0byBiZSBpbiB0aGUgc2FtZSAyNTYgbWVnYWJ5dGUgc2VnbWVudC4KKworICAgICA8cD5UaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIGFiaWNhbGxzIGNvZGUuICBUaGUgZGVmYXVsdCBpcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1sb25nLWNhbGxzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW1hZDwvY29kZT48ZHQ+PGNvZGU+LW1uby1tYWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tYWQtMTgxMiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbWFkLTE4MTMiPjwvYT5FbmFibGUgKGRpc2FibGUpIHVzZSBvZiB0aGUgPGNvZGU+bWFkPC9jb2RlPiwgPGNvZGU+bWFkdTwvY29kZT4gYW5kIDxjb2RlPm11bDwvY29kZT4KK2luc3RydWN0aW9ucywgYXMgcHJvdmlkZWQgYnkgdGhlIFI0NjUwIElTQS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZnVzZWQtbWFkZDwvY29kZT48ZHQ+PGNvZGU+LW1uby1mdXNlZC1tYWRkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZnVzZWRfMDAyZG1hZGQtMTgxNCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZnVzZWRfMDAyZG1hZGQtMTgxNSI+PC9hPkVuYWJsZSAoZGlzYWJsZSkgdXNlIG9mIHRoZSBmbG9hdGluZy1wb2ludCBtdWx0aXBseS1hY2N1bXVsYXRlCitpbnN0cnVjdGlvbnMsIHdoZW4gdGhleSBhcmUgYXZhaWxhYmxlLiAgVGhlIGRlZmF1bHQgaXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnVzZWQtbWFkZDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPk9uIHRoZSBSODAwMCBDUFUgd2hlbiBtdWx0aXBseS1hY2N1bXVsYXRlIGluc3RydWN0aW9ucyBhcmUgdXNlZCwKK3RoZSBpbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIHRvIGluZmluaXRlIHByZWNpc2lvbgorYW5kIGlzIG5vdCBzdWJqZWN0IHRvIHRoZSBGQ1NSIEZsdXNoIHRvIFplcm8gYml0LiAgVGhpcyBtYXkgYmUKK3VuZGVzaXJhYmxlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4gIE9uIG90aGVyIHByb2Nlc3NvcnMgdGhlIHJlc3VsdAoraXMgbnVtZXJpY2FsbHkgaWRlbnRpY2FsIHRvIHRoZSBlcXVpdmFsZW50IGNvbXB1dGF0aW9uIHVzaW5nCitzZXBhcmF0ZSBtdWx0aXBseSwgYWRkLCBzdWJ0cmFjdCBhbmQgbmVnYXRlIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub2NwcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbm9jcHAtMTgxNiI+PC9hPlRlbGwgdGhlIE1JUFMgYXNzZW1ibGVyIHRvIG5vdCBydW4gaXRzIHByZXByb2Nlc3NvciBvdmVyIHVzZXIKK2Fzc2VtYmxlciBmaWxlcyAod2l0aCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3VmZml4KSB3aGVuIGFzc2VtYmxpbmcgdGhlbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZml4LTI0azwvY29kZT48YnI+PGR0Pjxjb2RlPi1tbm8tZml4LTI0azwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZpeF8wMDJkMjRrLTE4MTciPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZpeF8wMDJkMjRrLTE4MTgiPjwvYT5Xb3JrIGFyb3VuZCB0aGUgMjRLIEU0OCAobG9zdCBkYXRhIG9uIHN0b3JlcyBkdXJpbmcgcmVmaWxsKSBlcnJhdGEuIAorVGhlIHdvcmthcm91bmRzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgYXNzZW1ibGVyIHJhdGhlciB0aGFuIGJ5IEdDQy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZml4LXI0MDAwPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZpeC1yNDAwMDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZpeF8wMDJkcjQwMDAtMTgxOSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZml4XzAwMmRyNDAwMC0xODIwIj48L2E+V29yayBhcm91bmQgY2VydGFpbiBSNDAwMCBDUFUgZXJyYXRhOgorICAgICAgICAgIDx1bD4KKzxsaT5BIGRvdWJsZS13b3JkIG9yIGEgdmFyaWFibGUgc2hpZnQgbWF5IGdpdmUgYW4gaW5jb3JyZWN0IHJlc3VsdCBpZiBleGVjdXRlZAoraW1tZWRpYXRlbHkgYWZ0ZXIgc3RhcnRpbmcgYW4gaW50ZWdlciBkaXZpc2lvbi4gCis8bGk+QSBkb3VibGUtd29yZCBvciBhIHZhcmlhYmxlIHNoaWZ0IG1heSBnaXZlIGFuIGluY29ycmVjdCByZXN1bHQgaWYgZXhlY3V0ZWQKK3doaWxlIGFuIGludGVnZXIgbXVsdGlwbGljYXRpb24gaXMgaW4gcHJvZ3Jlc3MuIAorPGxpPkFuIGludGVnZXIgZGl2aXNpb24gbWF5IGdpdmUgYW4gaW5jb3JyZWN0IHJlc3VsdCBpZiBzdGFydGVkIGluIGEgZGVsYXkgc2xvdAorb2YgYSB0YWtlbiBicmFuY2ggb3IgYSBqdW1wLiAKKzwvdWw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeC1yNDQwMDwvY29kZT48ZHQ+PGNvZGU+LW1uby1maXgtcjQ0MDA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1maXhfMDAyZHI0NDAwLTE4MjEiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZpeF8wMDJkcjQ0MDAtMTgyMiI+PC9hPldvcmsgYXJvdW5kIGNlcnRhaW4gUjQ0MDAgQ1BVIGVycmF0YToKKyAgICAgICAgICA8dWw+Cis8bGk+QSBkb3VibGUtd29yZCBvciBhIHZhcmlhYmxlIHNoaWZ0IG1heSBnaXZlIGFuIGluY29ycmVjdCByZXN1bHQgaWYgZXhlY3V0ZWQKK2ltbWVkaWF0ZWx5IGFmdGVyIHN0YXJ0aW5nIGFuIGludGVnZXIgZGl2aXNpb24uIAorPC91bD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZml4LXIxMDAwMDwvY29kZT48ZHQ+PGNvZGU+LW1uby1maXgtcjEwMDAwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZml4XzAwMmRyMTAwMDAtMTgyMyI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZml4XzAwMmRyMTAwMDAtMTgyNCI+PC9hPldvcmsgYXJvdW5kIGNlcnRhaW4gUjEwMDAwIGVycmF0YToKKyAgICAgICAgICA8dWw+Cis8bGk+PGNvZGU+bGw8L2NvZGU+Lzxjb2RlPnNjPC9jb2RlPiBzZXF1ZW5jZXMgbWF5IG5vdCBiZWhhdmUgYXRvbWljYWxseSBvbiByZXZpc2lvbnMKK3ByaW9yIHRvIDMuMC4gIFRoZXkgbWF5IGRlYWRsb2NrIG9uIHJldmlzaW9ucyAyLjYgYW5kIGVhcmxpZXIuIAorPC91bD4KKworICAgICA8cD5UaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzCiticmFuY2gtbGlrZWx5IGluc3RydWN0aW9ucy4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZml4LXIxMDAwMDwvc3Bhbj48L3NhbXA+IGlzIHRoZSBkZWZhdWx0IHdoZW4KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1yMTAwMDA8L3NwYW4+PC9zYW1wPiBpcyB1c2VkOyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWZpeC1yMTAwMDA8L3NwYW4+PC9zYW1wPiBpcyB0aGUgZGVmYXVsdAorb3RoZXJ3aXNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1maXgtdnI0MTIwPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZpeC12cjQxMjA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1maXhfMDAyZHZyNDEyMC0xODI1Ij48L2E+V29yayBhcm91bmQgY2VydGFpbiBWUjQxMjAgZXJyYXRhOgorICAgICAgICAgIDx1bD4KKzxsaT48Y29kZT5kbXVsdHU8L2NvZGU+IGRvZXMgbm90IGFsd2F5cyBwcm9kdWNlIHRoZSBjb3JyZWN0IHJlc3VsdC4gCis8bGk+PGNvZGU+ZGl2PC9jb2RlPiBhbmQgPGNvZGU+ZGRpdjwvY29kZT4gZG8gbm90IGFsd2F5cyBwcm9kdWNlIHRoZSBjb3JyZWN0IHJlc3VsdCBpZiBvbmUKK29mIHRoZSBvcGVyYW5kcyBpcyBuZWdhdGl2ZS4gCis8L3VsPgorICAgICBUaGUgd29ya2Fyb3VuZHMgZm9yIHRoZSBkaXZpc2lvbiBlcnJhdGEgcmVseSBvbiBzcGVjaWFsIGZ1bmN0aW9ucyBpbgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYy5hPC9zcGFuPjwvc2FtcD4uICBBdCBwcmVzZW50LCB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgcHJvdmlkZWQgYnkKK3RoZSA8Y29kZT5taXBzNjR2ciotZWxmPC9jb2RlPiBjb25maWd1cmF0aW9ucy4KKworICAgICA8cD5PdGhlciBWUjQxMjAgZXJyYXRhIHJlcXVpcmUgYSBOT1AgdG8gYmUgaW5zZXJ0ZWQgYmV0d2VlbiBjZXJ0YWluIHBhaXJzIG9mCitpbnN0cnVjdGlvbnMuICBUaGVzZSBlcnJhdGEgYXJlIGhhbmRsZWQgYnkgdGhlIGFzc2VtYmxlciwgbm90IGJ5IEdDQyBpdHNlbGYuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeC12cjQxMzA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1maXhfMDAyZHZyNDEzMC0xODI2Ij48L2E+V29yayBhcm91bmQgdGhlIFZSNDEzMCA8Y29kZT5tZmxvPC9jb2RlPi88Y29kZT5tZmhpPC9jb2RlPiBlcnJhdGEuICBUaGUKK3dvcmthcm91bmRzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgYXNzZW1ibGVyIHJhdGhlciB0aGFuIGJ5IEdDQywKK2FsdGhvdWdoIEdDQyBhdm9pZHMgdXNpbmcgPGNvZGU+bWZsbzwvY29kZT4gYW5kIDxjb2RlPm1maGk8L2NvZGU+IGlmIHRoZQorVlI0MTMwIDxjb2RlPm1hY2M8L2NvZGU+LCA8Y29kZT5tYWNjaGk8L2NvZGU+LCA8Y29kZT5kbWFjYzwvY29kZT4gYW5kIDxjb2RlPmRtYWNjaGk8L2NvZGU+CitpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbnN0ZWFkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1maXgtc2IxPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZpeC1zYjE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1maXhfMDAyZHNiMS0xODI3Ij48L2E+V29yayBhcm91bmQgY2VydGFpbiBTQi0xIENQVSBjb3JlIGVycmF0YS4gCisoVGhpcyBmbGFnIGN1cnJlbnRseSB3b3JrcyBhcm91bmQgdGhlIFNCLTEgcmV2aXNpb24gMgorJmxkcXVvO0YxJnJkcXVvOyBhbmQgJmxkcXVvO0YyJnJkcXVvOyBmbG9hdGluZy1wb2ludCBlcnJhdGEuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1yMTBrLWNhY2hlLWJhcnJpZXI9PC9jb2RlPjx2YXI+c2V0dGluZzwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tcjEwa18wMDJkY2FjaGVfMDAyZGJhcnJpZXItMTgyOCI+PC9hPlNwZWNpZnkgd2hldGhlciBHQ0Mgc2hvdWxkIGluc2VydCBjYWNoZSBiYXJyaWVycyB0byBhdm9pZCB0aGUKK3NpZGUtZWZmZWN0cyBvZiBzcGVjdWxhdGlvbiBvbiBSMTBLIHByb2Nlc3NvcnMuCisKKyAgICAgPHA+SW4gY29tbW9uIHdpdGggbWFueSBwcm9jZXNzb3JzLCB0aGUgUjEwSyB0cmllcyB0byBwcmVkaWN0IHRoZSBvdXRjb21lCitvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaCBhbmQgc3BlY3VsYXRpdmVseSBleGVjdXRlcyBpbnN0cnVjdGlvbnMgZnJvbQordGhlICZsZHF1bzt0YWtlbiZyZHF1bzsgYnJhbmNoLiAgSXQgbGF0ZXIgYWJvcnRzIHRoZXNlIGluc3RydWN0aW9ucyBpZiB0aGUKK3ByZWRpY3RlZCBvdXRjb21lIGlzIHdyb25nLiAgSG93ZXZlciwgb24gdGhlIFIxMEssIGV2ZW4gYWJvcnRlZAoraW5zdHJ1Y3Rpb25zIGNhbiBoYXZlIHNpZGUgZWZmZWN0cy4KKworICAgICA8cD5UaGlzIHByb2JsZW0gb25seSBhZmZlY3RzIGtlcm5lbCBzdG9yZXMgYW5kLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSwKK2tlcm5lbCBsb2Fkcy4gIEFzIGFuIGV4YW1wbGUsIGEgc3BlY3VsYXRpdmVseS1leGVjdXRlZCBzdG9yZSBtYXkgbG9hZAordGhlIHRhcmdldCBtZW1vcnkgaW50byBjYWNoZSBhbmQgbWFyayB0aGUgY2FjaGUgbGluZSBhcyBkaXJ0eSwgZXZlbiBpZgordGhlIHN0b3JlIGl0c2VsZiBpcyBsYXRlciBhYm9ydGVkLiAgSWYgYSBETUEgb3BlcmF0aW9uIHdyaXRlcyB0byB0aGUKK3NhbWUgYXJlYSBvZiBtZW1vcnkgYmVmb3JlIHRoZSAmbGRxdW87ZGlydHkmcmRxdW87IGxpbmUgaXMgZmx1c2hlZCwgdGhlIGNhY2hlZAorZGF0YSBvdmVyd3JpdGVzIHRoZSBETUEtZWQgZGF0YS4gIFNlZSB0aGUgUjEwSyBwcm9jZXNzb3IgbWFudWFsCitmb3IgYSBmdWxsIGRlc2NyaXB0aW9uLCBpbmNsdWRpbmcgb3RoZXIgcG90ZW50aWFsIHByb2JsZW1zLgorCisgICAgIDxwPk9uZSB3b3JrYXJvdW5kIGlzIHRvIGluc2VydCBjYWNoZSBiYXJyaWVyIGluc3RydWN0aW9ucyBiZWZvcmUgZXZlcnkgbWVtb3J5CithY2Nlc3MgdGhhdCBtaWdodCBiZSBzcGVjdWxhdGl2ZWx5IGV4ZWN1dGVkIGFuZCB0aGF0IG1pZ2h0IGhhdmUgc2lkZQorZWZmZWN0cyBldmVuIGlmIGFib3J0ZWQuICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXIxMGstY2FjaGUtYmFycmllcj08L3NwYW4+PHZhcj5zZXR0aW5nPC92YXI+PC9zYW1wPgorY29udHJvbHMgR0NDJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhpcyB3b3JrYXJvdW5kLiAgSXQgYXNzdW1lcyB0aGF0CithYm9ydGVkIGFjY2Vzc2VzIHRvIGFueSBieXRlIGluIHRoZSBmb2xsb3dpbmcgcmVnaW9ucyBkb2VzIG5vdCBoYXZlCitzaWRlIGVmZmVjdHM6CisKKyAgICAgICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+dGhlIG1lbW9yeSBvY2N1cGllZCBieSB0aGUgY3VycmVudCBmdW5jdGlvbidzIHN0YWNrIGZyYW1lOworCisgICAgICAgICAgPGxpPnRoZSBtZW1vcnkgb2NjdXBpZWQgYnkgYW4gaW5jb21pbmcgc3RhY2sgYXJndW1lbnQ7CisKKyAgICAgICAgICA8bGk+dGhlIG1lbW9yeSBvY2N1cGllZCBieSBhbiBvYmplY3Qgd2l0aCBhIGxpbmstdGltZS1jb25zdGFudCBhZGRyZXNzLgorICAgICAgICAgIDwvb2w+CisKKyAgICAgPHA+SXQgaXMgdGhlIGtlcm5lbCdzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHNwZWN1bGF0aXZlCithY2Nlc3NlcyB0byB0aGVzZSByZWdpb25zIGFyZSBpbmRlZWQgc2FmZS4KKworICAgICA8cD5JZiB0aGUgaW5wdXQgcHJvZ3JhbSBjb250YWlucyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHN1Y2ggYXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdm9pZCBmb28gKHZvaWQpOworPC9wcmU+CisgICAgIDxwPnRoZW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPmZvbzwvY29kZT4gbXVzdCBhbGxvdyA8Y29kZT5qIGZvbzwvY29kZT4gYW5kCis8Y29kZT5qYWwgZm9vPC9jb2RlPiB0byBiZSBleGVjdXRlZCBzcGVjdWxhdGl2ZWx5LiAgR0NDIGhvbm9ycyB0aGlzCityZXN0cmljdGlvbiBmb3IgZnVuY3Rpb25zIGl0IGNvbXBpbGVzIGl0c2VsZi4gIEl0IGV4cGVjdHMgbm9uLUdDQworZnVuY3Rpb25zIChzdWNoIGFzIGhhbmQtd3JpdHRlbiBhc3NlbWJseSBjb2RlKSB0byBkbyB0aGUgc2FtZS4KKworICAgICA8cD5UaGUgb3B0aW9uIGhhcyB0aHJlZSBmb3JtczoKKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT4tbXIxMGstY2FjaGUtYmFycmllcj1sb2FkLXN0b3JlPC9jb2RlPjxkZD5JbnNlcnQgYSBjYWNoZSBiYXJyaWVyIGJlZm9yZSBhIGxvYWQgb3Igc3RvcmUgdGhhdCBtaWdodCBiZQorc3BlY3VsYXRpdmVseSBleGVjdXRlZCBhbmQgdGhhdCBtaWdodCBoYXZlIHNpZGUgZWZmZWN0cyBldmVuCitpZiBhYm9ydGVkLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tbXIxMGstY2FjaGUtYmFycmllcj1zdG9yZTwvY29kZT48ZGQ+SW5zZXJ0IGEgY2FjaGUgYmFycmllciBiZWZvcmUgYSBzdG9yZSB0aGF0IG1pZ2h0IGJlIHNwZWN1bGF0aXZlbHkKK2V4ZWN1dGVkIGFuZCB0aGF0IG1pZ2h0IGhhdmUgc2lkZSBlZmZlY3RzIGV2ZW4gaWYgYWJvcnRlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LW1yMTBrLWNhY2hlLWJhcnJpZXI9bm9uZTwvY29kZT48ZGQ+RGlzYWJsZSB0aGUgaW5zZXJ0aW9uIG9mIGNhY2hlIGJhcnJpZXJzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZsdXNoLWZ1bmM9PC9jb2RlPjx2YXI+ZnVuYzwvdmFyPjxkdD48Y29kZT4tbW5vLWZsdXNoLWZ1bmM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1mbHVzaF8wMDJkZnVuYy0xODI5Ij48L2E+U3BlY2lmaWVzIHRoZSBmdW5jdGlvbiB0byBjYWxsIHRvIGZsdXNoIHRoZSBJIGFuZCBEIGNhY2hlcywgb3IgdG8gbm90CitjYWxsIGFueSBzdWNoIGZ1bmN0aW9uLiAgSWYgY2FsbGVkLCB0aGUgZnVuY3Rpb24gbXVzdCB0YWtlIHRoZSBzYW1lCithcmd1bWVudHMgYXMgdGhlIGNvbW1vbiA8Y29kZT5fZmx1c2hfZnVuYygpPC9jb2RlPiwgdGhhdCBpcywgdGhlIGFkZHJlc3Mgb2YgdGhlCittZW1vcnkgcmFuZ2UgZm9yIHdoaWNoIHRoZSBjYWNoZSBpcyBiZWluZyBmbHVzaGVkLCB0aGUgc2l6ZSBvZiB0aGUKK21lbW9yeSByYW5nZSwgYW5kIHRoZSBudW1iZXIgMyAodG8gZmx1c2ggYm90aCBjYWNoZXMpLiAgVGhlIGRlZmF1bHQKK2RlcGVuZHMgb24gdGhlIHRhcmdldCBHQ0Mgd2FzIGNvbmZpZ3VyZWQgZm9yLCBidXQgY29tbW9ubHkgaXMgZWl0aGVyCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9mbHVzaF9mdW5jPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19jcHVfZmx1c2g8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT5tYnJhbmNoLWNvc3Q9PC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1icmFuY2hfMDAyZGNvc3QtMTgzMCI+PC9hPlNldCB0aGUgY29zdCBvZiBicmFuY2hlcyB0byByb3VnaGx5IDx2YXI+bnVtPC92YXI+ICZsZHF1bztzaW1wbGUmcmRxdW87IGluc3RydWN0aW9ucy4gCitUaGlzIGNvc3QgaXMgb25seSBhIGhldXJpc3RpYyBhbmQgaXMgbm90IGd1YXJhbnRlZWQgdG8gcHJvZHVjZQorY29uc2lzdGVudCByZXN1bHRzIGFjcm9zcyByZWxlYXNlcy4gIEEgemVybyBjb3N0IHJlZHVuZGFudGx5IHNlbGVjdHMKK3RoZSBkZWZhdWx0LCB3aGljaCBpcyBiYXNlZCBvbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPC9zcGFuPjwvc2FtcD4gc2V0dGluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYnJhbmNoLWxpa2VseTwvY29kZT48ZHQ+PGNvZGU+LW1uby1icmFuY2gtbGlrZWx5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYnJhbmNoXzAwMmRsaWtlbHktMTgzMSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYnJhbmNoXzAwMmRsaWtlbHktMTgzMiI+PC9hPkVuYWJsZSBvciBkaXNhYmxlIHVzZSBvZiBCcmFuY2ggTGlrZWx5IGluc3RydWN0aW9ucywgcmVnYXJkbGVzcyBvZiB0aGUKK2RlZmF1bHQgZm9yIHRoZSBzZWxlY3RlZCBhcmNoaXRlY3R1cmUuICBCeSBkZWZhdWx0LCBCcmFuY2ggTGlrZWx5CitpbnN0cnVjdGlvbnMgbWF5IGJlIGdlbmVyYXRlZCBpZiB0aGV5IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHNlbGVjdGVkCithcmNoaXRlY3R1cmUuICBBbiBleGNlcHRpb24gaXMgZm9yIHRoZSBNSVBTMzIgYW5kIE1JUFM2NCBhcmNoaXRlY3R1cmVzCithbmQgcHJvY2Vzc29ycyB0aGF0IGltcGxlbWVudCB0aG9zZSBhcmNoaXRlY3R1cmVzOyBmb3IgdGhvc2UsIEJyYW5jaAorTGlrZWx5IGluc3RydWN0aW9ucyBhcmUgbm90IGJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIE1JUFMzMgorYW5kIE1JUFM2NCBhcmNoaXRlY3R1cmVzIHNwZWNpZmljYWxseSBkZXByZWNhdGUgdGhlaXIgdXNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mcC1leGNlcHRpb25zPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZwLWV4Y2VwdGlvbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1mcF8wMDJkZXhjZXB0aW9ucy0xODMzIj48L2E+U3BlY2lmaWVzIHdoZXRoZXIgRlAgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gIFRoaXMgYWZmZWN0cyBob3cKK0ZQIGluc3RydWN0aW9ucyBhcmUgc2NoZWR1bGVkIGZvciBzb21lIHByb2Nlc3NvcnMuIAorVGhlIGRlZmF1bHQgaXMgdGhhdCBGUCBleGNlcHRpb25zIGFyZQorZW5hYmxlZC4KKworICAgICA8cD5Gb3IgaW5zdGFuY2UsIG9uIHRoZSBTQi0xLCBpZiBGUCBleGNlcHRpb25zIGFyZSBkaXNhYmxlZCwgYW5kIHdlIGFyZSBlbWl0dGluZworNjQtYml0IGNvZGUsIHRoZW4gd2UgY2FuIHVzZSBib3RoIEZQIHBpcGVzLiAgT3RoZXJ3aXNlLCB3ZSBjYW4gb25seSB1c2Ugb25lCitGUCBwaXBlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW12cjQxMzAtYWxpZ248L2NvZGU+PGR0Pjxjb2RlPi1tbm8tdnI0MTMwLWFsaWduPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdnI0MTMwXzAwMmRhbGlnbi0xODM0Ij48L2E+VGhlIFZSNDEzMCBwaXBlbGluZSBpcyB0d28td2F5IHN1cGVyc2NhbGFyLCBidXQgY2FuIG9ubHkgaXNzdWUgdHdvCitpbnN0cnVjdGlvbnMgdG9nZXRoZXIgaWYgdGhlIGZpcnN0IG9uZSBpcyA4LWJ5dGUgYWxpZ25lZC4gIFdoZW4gdGhpcworb3B0aW9uIGlzIGVuYWJsZWQsIEdDQyBhbGlnbnMgcGFpcnMgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgaXQKK3RoaW5rcyBzaG91bGQgZXhlY3V0ZSBpbiBwYXJhbGxlbC4KKworICAgICA8cD5UaGlzIG9wdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3Qgd2hlbiBvcHRpbWl6aW5nIGZvciB0aGUgVlI0MTMwLiAKK0l0IG5vcm1hbGx5IG1ha2VzIGNvZGUgZmFzdGVyLCBidXQgYXQgdGhlIGV4cGVuc2Ugb2YgbWFraW5nIGl0IGJpZ2dlci4gCitJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgb3B0aW1pemF0aW9uIGxldmVsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zeW5jaTwvY29kZT48ZHQ+PGNvZGU+LW1uby1zeW5jaTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXN5bmNpLTE4MzUiPjwvYT5FbmFibGUgKGRpc2FibGUpIGdlbmVyYXRpb24gb2YgPGNvZGU+c3luY2k8L2NvZGU+IGluc3RydWN0aW9ucyBvbgorYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQuICBUaGUgPGNvZGU+c3luY2k8L2NvZGU+IGluc3RydWN0aW9ucyAoaWYKK2VuYWJsZWQpIGFyZSBnZW5lcmF0ZWQgd2hlbiA8Y29kZT5fX2J1aWx0aW5fX19jbGVhcl9jYWNoZSgpPC9jb2RlPiBpcworY29tcGlsZWQuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gPGNvZGU+LW1uby1zeW5jaTwvY29kZT4sIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUKK292ZXJyaWRkZW4gYnkgY29uZmlndXJpbmcgd2l0aCA8Y29kZT4tLXdpdGgtc3luY2k8L2NvZGU+LgorCisgICAgIDxwPldoZW4gY29tcGlsaW5nIGNvZGUgZm9yIHNpbmdsZSBwcm9jZXNzb3Igc3lzdGVtcywgaXQgaXMgZ2VuZXJhbGx5IHNhZmUKK3RvIHVzZSA8Y29kZT5zeW5jaTwvY29kZT4uICBIb3dldmVyLCBvbiBtYW55IG11bHRpLWNvcmUgKFNNUCkgc3lzdGVtcywgaXQKK2RvZXMgbm90IGludmFsaWRhdGUgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBvbiBhbGwgY29yZXMgYW5kIG1heSBsZWFkCit0byB1bmRlZmluZWQgYmVoYXZpb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlbGF4LXBpYy1jYWxsczwvY29kZT48ZHQ+PGNvZGU+LW1uby1yZWxheC1waWMtY2FsbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1yZWxheF8wMDJkcGljXzAwMmRjYWxscy0xODM2Ij48L2E+VHJ5IHRvIHR1cm4gUElDIGNhbGxzIHRoYXQgYXJlIG5vcm1hbGx5IGRpc3BhdGNoZWQgdmlhIHJlZ2lzdGVyCis8Y29kZT4kMjU8L2NvZGU+IGludG8gZGlyZWN0IGNhbGxzLiAgVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSBsaW5rZXIgY2FuCityZXNvbHZlIHRoZSBkZXN0aW5hdGlvbiBhdCBsaW5rLXRpbWUgYW5kIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB3aXRoaW4KK3JhbmdlIGZvciBhIGRpcmVjdCBjYWxsLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcmVsYXgtcGljLWNhbGxzPC9zcGFuPjwvc2FtcD4gaXMgdGhlIGRlZmF1bHQgaWYgR0NDIHdhcyBjb25maWd1cmVkIHRvIHVzZQorYW4gYXNzZW1ibGVyIGFuZCBhIGxpbmtlciB0aGF0IHN1cHBvcnQgdGhlIDxjb2RlPi5yZWxvYzwvY29kZT4gYXNzZW1ibHkKK2RpcmVjdGl2ZSBhbmQgPGNvZGU+LW1leHBsaWNpdC1yZWxvY3M8L2NvZGU+IGlzIGluIGVmZmVjdC4gIFdpdGgKKzxjb2RlPi1tbm8tZXhwbGljaXQtcmVsb2NzPC9jb2RlPiwgdGhpcyBvcHRpbWl6YXRpb24gY2FuIGJlIHBlcmZvcm1lZCBieSB0aGUKK2Fzc2VtYmxlciBhbmQgdGhlIGxpbmtlciBhbG9uZSB3aXRob3V0IGhlbHAgZnJvbSB0aGUgY29tcGlsZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW1jb3VudC1yYS1hZGRyZXNzPC9jb2RlPjxkdD48Y29kZT4tbW5vLW1jb3VudC1yYS1hZGRyZXNzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbWNvdW50XzAwMmRyYV8wMDJkYWRkcmVzcy0xODM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRtY291bnRfMDAyZHJhXzAwMmRhZGRyZXNzLTE4MzgiPjwvYT5FbWl0IChkbyBub3QgZW1pdCkgY29kZSB0aGF0IGFsbG93cyA8Y29kZT5fbWNvdW50PC9jb2RlPiB0byBtb2RpZnkgdGhlCitjYWxsaW5nIGZ1bmN0aW9uJ3MgcmV0dXJuIGFkZHJlc3MuICBXaGVuIGVuYWJsZWQsIHRoaXMgb3B0aW9uIGV4dGVuZHMKK3RoZSB1c3VhbCA8Y29kZT5fbWNvdW50PC9jb2RlPiBpbnRlcmZhY2Ugd2l0aCBhIG5ldyA8dmFyPnJhLWFkZHJlc3M8L3Zhcj4KK3BhcmFtZXRlciwgd2hpY2ggaGFzIHR5cGUgPGNvZGU+aW50cHRyX3QgKjwvY29kZT4gYW5kIGlzIHBhc3NlZCBpbiByZWdpc3RlcgorPGNvZGU+JDEyPC9jb2RlPi4gIDxjb2RlPl9tY291bnQ8L2NvZGU+IGNhbiB0aGVuIG1vZGlmeSB0aGUgcmV0dXJuIGFkZHJlc3MgYnkKK2RvaW5nIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICA8dWw+Cis8bGk+UmV0dXJuaW5nIHRoZSBuZXcgYWRkcmVzcyBpbiByZWdpc3RlciA8Y29kZT4kMzE8L2NvZGU+LiAKKzxsaT5TdG9yaW5nIHRoZSBuZXcgYWRkcmVzcyBpbiA8Y29kZT4qPC9jb2RlPjx2YXI+cmEtYWRkcmVzczwvdmFyPiwKK2lmIDx2YXI+cmEtYWRkcmVzczwvdmFyPiBpcyBub25udWxsLiAKKzwvdWw+CisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1tY291bnQtcmEtYWRkcmVzczwvc3Bhbj48L3NhbXA+LgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTUlQUy1QYWlyZWRfMDAyZFNpbmdsZS1TdXBwb3J0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01JUFMtUGFpcmVkXzAwMmRTaW5nbGUtU3VwcG9ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjYyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01JUFMtUGFpcmVkXzAwMmRTaW5nbGUtU3VwcG9ydC5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1JUFMgUGFpcmVkLVNpbmdsZSBTdXBwb3J0IC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyIgdGl0bGU9IlRhcmdldCBCdWlsdGlucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNNSVBTLURTUC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iTUlQUyBEU1AgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iTUlQUyBMb29uZ3NvbiBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUlQUy1QYWlyZWQtU2luZ2xlLVN1cHBvcnQiPjwvYT4KKzxhIG5hbWU9Ik1JUFMtUGFpcmVkXzAwMmRTaW5nbGUtU3VwcG9ydCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNSVBTLUxvb25nc29uLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNNSVBTLUxvb25nc29uLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk1JUFMgTG9vbmdzb24gQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUlQUy1EU1AtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk1JUFMgRFNQIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni4xMCBNSVBTIFBhaXJlZC1TaW5nbGUgU3VwcG9ydDwvaDQ+CisKKzxwPlRoZSBNSVBTNjQgYXJjaGl0ZWN0dXJlIGluY2x1ZGVzIGEgbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0aGF0CitvcGVyYXRlIG9uIHBhaXJzIG9mIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVzLiAKK0VhY2ggcGFpciBpcyBwYWNrZWQgaW50byBhIDY0LWJpdCBmbG9hdGluZy1wb2ludCByZWdpc3RlciwKK3dpdGggb25lIGVsZW1lbnQgYmVpbmcgZGVzaWduYXRlZCB0aGUgJmxkcXVvO3VwcGVyIGhhbGYmcmRxdW87IGFuZAordGhlIG90aGVyIGJlaW5nIGRlc2lnbmF0ZWQgdGhlICZsZHF1bztsb3dlciBoYWxmJnJkcXVvOy4KKworIDxwPkdDQyBzdXBwb3J0cyBwYWlyZWQtc2luZ2xlIG9wZXJhdGlvbnMgdXNpbmcgYm90aCB0aGUgZ2VuZXJpYwordmVjdG9yIGV4dGVuc2lvbnMgKHNlZSA8YSBocmVmPSJWZWN0b3ItRXh0ZW5zaW9ucy5odG1sI1ZlY3Rvci1FeHRlbnNpb25zIj5WZWN0b3IgRXh0ZW5zaW9uczwvYT4pIGFuZCBhIGNvbGxlY3Rpb24gb2YKK01JUFMtc3BlY2lmaWMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgQm90aCBraW5kcyBvZiBzdXBwb3J0IGFyZQorZW5hYmxlZCBieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wYWlyZWQtc2luZ2xlPC9zcGFuPjwvc2FtcD4gY29tbWFuZC1saW5lIG9wdGlvbi4KKworIDxwPlRoZSB2ZWN0b3IgdHlwZSBhc3NvY2lhdGVkIHdpdGggcGFpcmVkLXNpbmdsZSB2YWx1ZXMgaXMgdXN1YWxseQorY2FsbGVkIDxjb2RlPnYyc2Y8L2NvZGU+LiAgSXQgY2FuIGJlIGRlZmluZWQgaW4gQyBhcyBmb2xsb3dzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZWRlZiBmbG9hdCB2MnNmIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoOCkpKTsKKzwvcHJlPgorIDxwPjxjb2RlPnYyc2Y8L2NvZGU+IHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGFnZ3JlZ2F0ZXMuIAorRm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2MnNmIGEgPSB7MS41LCA5LjF9OworICAgICB2MnNmIGI7CisgICAgIGZsb2F0IGUsIGY7CisgICAgIGIgPSAodjJzZikge2UsIGZ9OworPC9wcmU+CisgPHA+PGVtPk5vdGU6PC9lbT4gVGhlIENQVSdzIGVuZGlhbm5lc3MgZGV0ZXJtaW5lcyB3aGljaCB2YWx1ZSBpcyBzdG9yZWQgaW4KK3RoZSB1cHBlciBoYWxmIG9mIGEgcmVnaXN0ZXIgYW5kIHdoaWNoIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgbG93ZXIgaGFsZi4gCitPbiBsaXR0bGUtZW5kaWFuIHRhcmdldHMsIHRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgbG93ZXIgb25lIGFuZCB0aGUgc2Vjb25kCit2YWx1ZSBpcyB0aGUgdXBwZXIgb25lLiAgVGhlIG9wcG9zaXRlIG9yZGVyIGFwcGxpZXMgdG8gYmlnLWVuZGlhbiB0YXJnZXRzLiAKK0ZvciBleGFtcGxlLCB0aGUgY29kZSBhYm92ZSBzZXRzIHRoZSBsb3dlciBoYWxmIG9mIDxjb2RlPmE8L2NvZGU+IHRvCis8Y29kZT4xLjU8L2NvZGU+IG9uIGxpdHRsZS1lbmRpYW4gdGFyZ2V0cyBhbmQgPGNvZGU+OS4xPC9jb2RlPiBvbiBiaWctZW5kaWFuIHRhcmdldHMuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01JUFNfMDAyZDNELUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTUlQU18wMDJkM0QtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTMwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01JUFNfMDAyZDNELUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApAQCAtMCwwICsxLDE3OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUlQUy0zRCBCdWlsdC1pbiBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iTUlQUyBMb29uZ3NvbiBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQYWlyZWRfMDAyZFNpbmdsZS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUGFpcmVkXzAwMmRTaW5nbGUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlBhaXJlZC1TaW5nbGUgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1JUFMtM0QtQnVpbHQtaW4tRnVuY3Rpb25zIj48L2E+Cis8YSBuYW1lPSJNSVBTXzAwMmQzRC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUGFpcmVkXzAwMmRTaW5nbGUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1BhaXJlZF8wMDJkU2luZ2xlLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlBhaXJlZC1TaW5nbGUgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5NSVBTIExvb25nc29uIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMTEuMyBNSVBTLTNEIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDU+CisKKzxwPlRoZSBNSVBTLTNEIEFwcGxpY2F0aW9uLVNwZWNpZmljIEV4dGVuc2lvbiAoQVNFKSBpbmNsdWRlcyBhZGRpdGlvbmFsCitwYWlyZWQtc2luZ2xlIGluc3RydWN0aW9ucyB0aGF0IGFyZSBkZXNpZ25lZCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZQorb2YgM0QgZ3JhcGhpY3Mgb3BlcmF0aW9ucy4gIFN1cHBvcnQgZm9yIHRoZXNlIGluc3RydWN0aW9ucyBpcyBjb250cm9sbGVkCitieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1pcHMzZDwvc3Bhbj48L3NhbXA+IGNvbW1hbmQtbGluZSBvcHRpb24uCisKKyA8cD5UaGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdyBtYXAgZGlyZWN0bHkgdG8gYSBwYXJ0aWN1bGFyIE1JUFMtM0QKK2luc3RydWN0aW9uLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbiBmb3IKK21vcmUgZGV0YWlscyBvbiB3aGF0IGVhY2ggaW5zdHJ1Y3Rpb24gZG9lcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+djJzZiBfX2J1aWx0aW5fbWlwc19hZGRyX3BzICh2MnNmLCB2MnNmKTwvY29kZT48ZGQ+UmVkdWN0aW9uIGFkZCAoPGNvZGU+YWRkci5wczwvY29kZT4pLgorCisgICAgIDxicj48ZHQ+PGNvZGU+djJzZiBfX2J1aWx0aW5fbWlwc19tdWxyX3BzICh2MnNmLCB2MnNmKTwvY29kZT48ZGQ+UmVkdWN0aW9uIG11bHRpcGx5ICg8Y29kZT5tdWxyLnBzPC9jb2RlPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT52MnNmIF9fYnVpbHRpbl9taXBzX2N2dF9wd19wcyAodjJzZik8L2NvZGU+PGRkPkNvbnZlcnQgcGFpcmVkIHNpbmdsZSB0byBwYWlyZWQgd29yZCAoPGNvZGU+Y3Z0LnB3LnBzPC9jb2RlPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT52MnNmIF9fYnVpbHRpbl9taXBzX2N2dF9wc19wdyAodjJzZik8L2NvZGU+PGRkPkNvbnZlcnQgcGFpcmVkIHdvcmQgdG8gcGFpcmVkIHNpbmdsZSAoPGNvZGU+Y3Z0LnBzLnB3PC9jb2RlPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT5mbG9hdCBfX2J1aWx0aW5fbWlwc19yZWNpcDFfcyAoZmxvYXQpPC9jb2RlPjxkdD48Y29kZT5kb3VibGUgX19idWlsdGluX21pcHNfcmVjaXAxX2QgKGRvdWJsZSk8L2NvZGU+PGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfcmVjaXAxX3BzICh2MnNmKTwvY29kZT48ZGQ+UmVkdWNlZC1wcmVjaXNpb24gcmVjaXByb2NhbCAoc2VxdWVuY2Ugc3RlcCAxKSAoPGNvZGU+cmVjaXAxLjwvY29kZT48dmFyPmZtdDwvdmFyPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT5mbG9hdCBfX2J1aWx0aW5fbWlwc19yZWNpcDJfcyAoZmxvYXQsIGZsb2F0KTwvY29kZT48ZHQ+PGNvZGU+ZG91YmxlIF9fYnVpbHRpbl9taXBzX3JlY2lwMl9kIChkb3VibGUsIGRvdWJsZSk8L2NvZGU+PGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfcmVjaXAyX3BzICh2MnNmLCB2MnNmKTwvY29kZT48ZGQ+UmVkdWNlZC1wcmVjaXNpb24gcmVjaXByb2NhbCAoc2VxdWVuY2Ugc3RlcCAyKSAoPGNvZGU+cmVjaXAyLjwvY29kZT48dmFyPmZtdDwvdmFyPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT5mbG9hdCBfX2J1aWx0aW5fbWlwc19yc3FydDFfcyAoZmxvYXQpPC9jb2RlPjxkdD48Y29kZT5kb3VibGUgX19idWlsdGluX21pcHNfcnNxcnQxX2QgKGRvdWJsZSk8L2NvZGU+PGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfcnNxcnQxX3BzICh2MnNmKTwvY29kZT48ZGQ+UmVkdWNlZC1wcmVjaXNpb24gcmVjaXByb2NhbCBzcXVhcmUgcm9vdCAoc2VxdWVuY2Ugc3RlcCAxKQorKDxjb2RlPnJzcXJ0MS48L2NvZGU+PHZhcj5mbXQ8L3Zhcj4pLgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZmxvYXQgX19idWlsdGluX21pcHNfcnNxcnQyX3MgKGZsb2F0LCBmbG9hdCk8L2NvZGU+PGR0Pjxjb2RlPmRvdWJsZSBfX2J1aWx0aW5fbWlwc19yc3FydDJfZCAoZG91YmxlLCBkb3VibGUpPC9jb2RlPjxkdD48Y29kZT52MnNmIF9fYnVpbHRpbl9taXBzX3JzcXJ0Ml9wcyAodjJzZiwgdjJzZik8L2NvZGU+PGRkPlJlZHVjZWQtcHJlY2lzaW9uIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgKHNlcXVlbmNlIHN0ZXAgMikKKyg8Y29kZT5yc3FydDIuPC9jb2RlPjx2YXI+Zm10PC92YXI+KS4gCis8L2RsPgorCisgPHA+VGhlIGZvbGxvd2luZyBtdWx0aS1pbnN0cnVjdGlvbiBmdW5jdGlvbnMgYXJlIGFsc28gYXZhaWxhYmxlLiAKK0luIGVhY2ggY2FzZSwgPHZhcj5jb25kPC92YXI+IGNhbiBiZSBhbnkgb2YgdGhlIDE2IGZsb2F0aW5nLXBvaW50IGNvbmRpdGlvbnM6Cis8Y29kZT5mPC9jb2RlPiwgPGNvZGU+dW48L2NvZGU+LCA8Y29kZT5lcTwvY29kZT4sIDxjb2RlPnVlcTwvY29kZT4sIDxjb2RlPm9sdDwvY29kZT4sIDxjb2RlPnVsdDwvY29kZT4sCis8Y29kZT5vbGU8L2NvZGU+LCA8Y29kZT51bGU8L2NvZGU+LCA8Y29kZT5zZjwvY29kZT4sIDxjb2RlPm5nbGU8L2NvZGU+LCA8Y29kZT5zZXE8L2NvZGU+LAorPGNvZGU+bmdsPC9jb2RlPiwgPGNvZGU+bHQ8L2NvZGU+LCA8Y29kZT5uZ2U8L2NvZGU+LCA8Y29kZT5sZTwvY29kZT4gb3IgPGNvZGU+bmd0PC9jb2RlPi4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+aW50IF9fYnVpbHRpbl9taXBzX2NhYnNfPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPl9zIChmbG9hdCA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCBmbG9hdCA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT48ZHQ+PGNvZGU+aW50IF9fYnVpbHRpbl9taXBzX2NhYnNfPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPl9kIChkb3VibGUgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgZG91YmxlIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5BYnNvbHV0ZSBjb21wYXJpc29uIG9mIHR3byBzY2FsYXIgdmFsdWVzICg8Y29kZT5jYWJzLjwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT4uPC9jb2RlPjx2YXI+Zm10PC92YXI+LAorPGNvZGU+YmMxdDwvY29kZT4vPGNvZGU+YmMxZjwvY29kZT4pLgorCisgICAgIDxwPlRoZXNlIGZ1bmN0aW9ucyBjb21wYXJlIDx2YXI+YTwvdmFyPiBhbmQgPHZhcj5iPC92YXI+IHVzaW5nIDxjb2RlPmNhYnMuPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPi5zPC9jb2RlPgorb3IgPGNvZGU+Y2Ficy48L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+LmQ8L2NvZGU+IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gdmFsdWUuIAorRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZmxvYXQgYSwgYjsKKyAgICAgICAgICBpZiAoX19idWlsdGluX21pcHNfY2Fic19lcV9zIChhLCBiKSkKKyAgICAgICAgICAgIHRydWUgKCk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFsc2UgKCk7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5pbnQgX19idWlsdGluX21pcHNfdXBwZXJfY2Fic188L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+X3BzICh2MnNmIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+PGR0Pjxjb2RlPmludCBfX2J1aWx0aW5fbWlwc19sb3dlcl9jYWJzXzwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT5fcHMgKHYyc2YgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+QWJzb2x1dGUgY29tcGFyaXNvbiBvZiB0d28gcGFpcmVkLXNpbmdsZSB2YWx1ZXMgKDxjb2RlPmNhYnMuPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPi5wczwvY29kZT4sCis8Y29kZT5iYzF0PC9jb2RlPi88Y29kZT5iYzFmPC9jb2RlPikuCisKKyAgICAgPHA+VGhlc2UgZnVuY3Rpb25zIGNvbXBhcmUgPHZhcj5hPC92YXI+IGFuZCA8dmFyPmI8L3Zhcj4gdXNpbmcgPGNvZGU+Y2Ficy48L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+LnBzPC9jb2RlPgorYW5kIHJldHVybiBlaXRoZXIgdGhlIHVwcGVyIG9yIGxvd2VyIGhhbGYgb2YgdGhlIHJlc3VsdC4gIEZvciBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHYyc2YgYSwgYjsKKyAgICAgICAgICBpZiAoX19idWlsdGluX21pcHNfdXBwZXJfY2Fic19lcV9wcyAoYSwgYikpCisgICAgICAgICAgICB1cHBlcl9oYWx2ZXNfYXJlX2VxdWFsICgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVwcGVyX2hhbHZlc19hcmVfdW5lcXVhbCAoKTsKKyAgICAgICAgICAKKyAgICAgICAgICBpZiAoX19idWlsdGluX21pcHNfbG93ZXJfY2Fic19lcV9wcyAoYSwgYikpCisgICAgICAgICAgICBsb3dlcl9oYWx2ZXNfYXJlX2VxdWFsICgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvd2VyX2hhbHZlc19hcmVfdW5lcXVhbCAoKTsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfbW92dF9jYWJzXzwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT5fcHMgKHYyc2YgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+ZDwvdmFyPjxjb2RlPik8L2NvZGU+PGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfbW92Zl9jYWJzXzwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT5fcHMgKHYyc2YgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+ZDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPkNvbmRpdGlvbmFsIG1vdmUgYmFzZWQgb24gYWJzb2x1dGUgY29tcGFyaXNvbiAoPGNvZGU+Y2Ficy48L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+LnBzPC9jb2RlPiwKKzxjb2RlPm1vdnQucHM8L2NvZGU+Lzxjb2RlPm1vdmYucHM8L2NvZGU+KS4KKworICAgICA8cD5UaGUgPGNvZGU+bW92dDwvY29kZT4gZnVuY3Rpb25zIHJldHVybiB0aGUgdmFsdWUgPHZhcj54PC92YXI+IGNvbXB1dGVkIGJ5OgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGNhYnMuPHZhcj5jb25kPC92YXI+LnBzIDx2YXI+Y2M8L3Zhcj4sPHZhcj5hPC92YXI+LDx2YXI+YjwvdmFyPgorICAgICAgICAgIG1vdi5wcyA8dmFyPng8L3Zhcj4sPHZhcj5jPC92YXI+CisgICAgICAgICAgbW92dC5wcyA8dmFyPng8L3Zhcj4sPHZhcj5kPC92YXI+LDx2YXI+Y2M8L3Zhcj4KKzwvcHJlPgorICAgICA8cD5UaGUgPGNvZGU+bW92ZjwvY29kZT4gZnVuY3Rpb25zIGFyZSBzaW1pbGFyIGJ1dCB1c2UgPGNvZGU+bW92Zi5wczwvY29kZT4gaW5zdGVhZAorb2YgPGNvZGU+bW92dC5wczwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5pbnQgX19idWlsdGluX21pcHNfYW55X2NfPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPl9wcyAodjJzZiA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkdD48Y29kZT5pbnQgX19idWlsdGluX21pcHNfYWxsX2NfPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPl9wcyAodjJzZiA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkdD48Y29kZT5pbnQgX19idWlsdGluX21pcHNfYW55X2NhYnNfPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPl9wcyAodjJzZiA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkdD48Y29kZT5pbnQgX19idWlsdGluX21pcHNfYWxsX2NhYnNfPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPl9wcyAodjJzZiA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5Db21wYXJpc29uIG9mIHR3byBwYWlyZWQtc2luZ2xlIHZhbHVlcworKDxjb2RlPmMuPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPi5wczwvY29kZT4vPGNvZGU+Y2Ficy48L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+LnBzPC9jb2RlPiwKKzxjb2RlPmJjMWFueTJ0PC9jb2RlPi88Y29kZT5iYzFhbnkyZjwvY29kZT4pLgorCisgICAgIDxwPlRoZXNlIGZ1bmN0aW9ucyBjb21wYXJlIDx2YXI+YTwvdmFyPiBhbmQgPHZhcj5iPC92YXI+IHVzaW5nIDxjb2RlPmMuPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPi5wczwvY29kZT4KK29yIDxjb2RlPmNhYnMuPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPi5wczwvY29kZT4uICBUaGUgPGNvZGU+YW55PC9jb2RlPiBmb3JtcyByZXR1cm4gdHJ1ZSBpZiBlaXRoZXIKK3Jlc3VsdCBpcyB0cnVlIGFuZCB0aGUgPGNvZGU+YWxsPC9jb2RlPiBmb3JtcyByZXR1cm4gdHJ1ZSBpZiBib3RoIHJlc3VsdHMgYXJlIHRydWUuIAorRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdjJzZiBhLCBiOworICAgICAgICAgIGlmIChfX2J1aWx0aW5fbWlwc19hbnlfY19lcV9wcyAoYSwgYikpCisgICAgICAgICAgICBvbmVfaXNfdHJ1ZSAoKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBib3RoX2FyZV9mYWxzZSAoKTsKKyAgICAgICAgICAKKyAgICAgICAgICBpZiAoX19idWlsdGluX21pcHNfYWxsX2NfZXFfcHMgKGEsIGIpKQorICAgICAgICAgICAgYm90aF9hcmVfdHJ1ZSAoKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBvbmVfaXNfZmFsc2UgKCk7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5pbnQgX19idWlsdGluX21pcHNfYW55X2NfPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPl80cyAodjJzZiA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5kPC92YXI+PGNvZGU+KTwvY29kZT48ZHQ+PGNvZGU+aW50IF9fYnVpbHRpbl9taXBzX2FsbF9jXzwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT5fNHMgKHYyc2YgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+ZDwvdmFyPjxjb2RlPik8L2NvZGU+PGR0Pjxjb2RlPmludCBfX2J1aWx0aW5fbWlwc19hbnlfY2Fic188L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+XzRzICh2MnNmIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmQ8L3Zhcj48Y29kZT4pPC9jb2RlPjxkdD48Y29kZT5pbnQgX19idWlsdGluX21pcHNfYWxsX2NhYnNfPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPl80cyAodjJzZiA8L2NvZGU+PHZhcj5hPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmI8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5kPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+Q29tcGFyaXNvbiBvZiBmb3VyIHBhaXJlZC1zaW5nbGUgdmFsdWVzCisoPGNvZGU+Yy48L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+LnBzPC9jb2RlPi88Y29kZT5jYWJzLjwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT4ucHM8L2NvZGU+LAorPGNvZGU+YmMxYW55NHQ8L2NvZGU+Lzxjb2RlPmJjMWFueTRmPC9jb2RlPikuCisKKyAgICAgPHA+VGhlc2UgZnVuY3Rpb25zIHVzZSA8Y29kZT5jLjwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT4ucHM8L2NvZGU+IG9yIDxjb2RlPmNhYnMuPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPi5wczwvY29kZT4KK3RvIGNvbXBhcmUgPHZhcj5hPC92YXI+IHdpdGggPHZhcj5iPC92YXI+IGFuZCB0byBjb21wYXJlIDx2YXI+YzwvdmFyPiB3aXRoIDx2YXI+ZDwvdmFyPi4gCitUaGUgPGNvZGU+YW55PC9jb2RlPiBmb3JtcyByZXR1cm4gdHJ1ZSBpZiBhbnkgb2YgdGhlIGZvdXIgcmVzdWx0cyBhcmUgdHJ1ZQorYW5kIHRoZSA8Y29kZT5hbGw8L2NvZGU+IGZvcm1zIHJldHVybiB0cnVlIGlmIGFsbCBmb3VyIHJlc3VsdHMgYXJlIHRydWUuIAorRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdjJzZiBhLCBiLCBjLCBkOworICAgICAgICAgIGlmIChfX2J1aWx0aW5fbWlwc19hbnlfY19lcV80cyAoYSwgYiwgYywgZCkpCisgICAgICAgICAgICBzb21lX2FyZV90cnVlICgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFsbF9hcmVfZmFsc2UgKCk7CisgICAgICAgICAgCisgICAgICAgICAgaWYgKF9fYnVpbHRpbl9taXBzX2FsbF9jX2VxXzRzIChhLCBiLCBjLCBkKSkKKyAgICAgICAgICAgIGFsbF9hcmVfdHJ1ZSAoKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzb21lX2FyZV9mYWxzZSAoKTsKKzwvcHJlPgorICAgICA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NTUlYLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTU1JWC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5YWY0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTU1JWC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1NSVggT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiIHRpdGxlPSJNSVBTIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNNTjEwMzAwLU9wdGlvbnMiIHRpdGxlPSJNTjEwMzAwIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTU1JWC1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMjcgTU1JWCBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtTU1JWC1PcHRpb25zLTE4MzkiPjwvYT4KK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBNTUlYOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWxpYmZ1bmNzPC9jb2RlPjxkdD48Y29kZT4tbW5vLWxpYmZ1bmNzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbGliZnVuY3MtMTg0MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbGliZnVuY3MtMTg0MSI+PC9hPlNwZWNpZnkgdGhhdCBpbnRyaW5zaWMgbGlicmFyeSBmdW5jdGlvbnMgYXJlIGJlaW5nIGNvbXBpbGVkLCBwYXNzaW5nIGFsbAordmFsdWVzIGluIHJlZ2lzdGVycywgbm8gbWF0dGVyIHRoZSBzaXplLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1lcHNpbG9uPC9jb2RlPjxkdD48Y29kZT4tbW5vLWVwc2lsb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1lcHNpbG9uLTE4NDIiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGVwc2lsb24tMTg0MyI+PC9hPkdlbmVyYXRlIGZsb2F0aW5nLXBvaW50IGNvbXBhcmlzb24gaW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGFyZSB3aXRoIHJlc3BlY3QKK3RvIHRoZSA8Y29kZT5yRTwvY29kZT4gZXBzaWxvbiByZWdpc3Rlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWJpPW1taXh3YXJlPC9jb2RlPjxkdD48Y29kZT4tbWFiaT1nbnU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hYmlfMDAzZG1taXh3YXJlLTE4NDQiPjwvYT48YSBuYW1lPSJpbmRleC1tYWJpXzAwM2RnbnUtMTg0NSI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCBwYXNzZXMgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlcyB0aGF0IChpbgordGhlIGNhbGxlZCBmdW5jdGlvbikgYXJlIHNlZW4gYXMgcmVnaXN0ZXJzIDxjb2RlPiQwPC9jb2RlPiBhbmQgdXAsIGFzIG9wcG9zZWQgdG8KK3RoZSBHTlUgQUJJIHdoaWNoIHVzZXMgZ2xvYmFsIHJlZ2lzdGVycyA8Y29kZT4kMjMxPC9jb2RlPiBhbmQgdXAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXplcm8tZXh0ZW5kPC9jb2RlPjxkdD48Y29kZT4tbW5vLXplcm8tZXh0ZW5kPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1temVyb18wMDJkZXh0ZW5kLTE4NDYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHplcm9fMDAyZGV4dGVuZC0xODQ3Ij48L2E+V2hlbiByZWFkaW5nIGRhdGEgZnJvbSBtZW1vcnkgaW4gc2l6ZXMgc2hvcnRlciB0aGFuIDY0IGJpdHMsIHVzZSAoZG8gbm90Cit1c2UpIHplcm8tZXh0ZW5kaW5nIGxvYWQgaW5zdHJ1Y3Rpb25zIGJ5IGRlZmF1bHQsIHJhdGhlciB0aGFuCitzaWduLWV4dGVuZGluZyBvbmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1rbnV0aGRpdjwvY29kZT48ZHQ+PGNvZGU+LW1uby1rbnV0aGRpdjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWtudXRoZGl2LTE4NDgiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGtudXRoZGl2LTE4NDkiPjwvYT5NYWtlIHRoZSByZXN1bHQgb2YgYSBkaXZpc2lvbiB5aWVsZGluZyBhIHJlbWFpbmRlciBoYXZlIHRoZSBzYW1lIHNpZ24gYXMKK3RoZSBkaXZpc29yLiAgV2l0aCB0aGUgZGVmYXVsdCwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1rbnV0aGRpdjwvc3Bhbj48L3NhbXA+LCB0aGUgc2lnbiBvZiB0aGUKK3JlbWFpbmRlciBmb2xsb3dzIHRoZSBzaWduIG9mIHRoZSBkaXZpZGVuZC4gIEJvdGggbWV0aG9kcyBhcmUKK2FyaXRobWV0aWNhbGx5IHZhbGlkLCB0aGUgbGF0dGVyIGJlaW5nIGFsbW9zdCBleGNsdXNpdmVseSB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10b3BsZXZlbC1zeW1ib2xzPC9jb2RlPjxkdD48Y29kZT4tbW5vLXRvcGxldmVsLXN5bWJvbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW10b3BsZXZlbF8wMDJkc3ltYm9scy0xODUwIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR0b3BsZXZlbF8wMDJkc3ltYm9scy0xODUxIj48L2E+UHJlcGVuZCAoZG8gbm90IHByZXBlbmQpIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGFsbCBnbG9iYWwgc3ltYm9scywgc28gdGhlIGFzc2VtYmx5Citjb2RlIGNhbiBiZSB1c2VkIHdpdGggdGhlIDxjb2RlPlBSRUZJWDwvY29kZT4gYXNzZW1ibHkgZGlyZWN0aXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1lbGY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1lbGYtMTg1MiI+PC9hPkdlbmVyYXRlIGFuIGV4ZWN1dGFibGUgaW4gdGhlIEVMRiBmb3JtYXQsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1tbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3JtYXQgdXNlZCBieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm1taXg8L3NwYW4+PC9zYW1wPiBzaW11bGF0b3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJyYW5jaC1wcmVkaWN0PC9jb2RlPjxkdD48Y29kZT4tbW5vLWJyYW5jaC1wcmVkaWN0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYnJhbmNoXzAwMmRwcmVkaWN0LTE4NTMiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGJyYW5jaF8wMDJkcHJlZGljdC0xODU0Ij48L2E+VXNlIChkbyBub3QgdXNlKSB0aGUgcHJvYmFibGUtYnJhbmNoIGluc3RydWN0aW9ucywgd2hlbiBzdGF0aWMgYnJhbmNoCitwcmVkaWN0aW9uIGluZGljYXRlcyBhIHByb2JhYmxlIGJyYW5jaC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYmFzZS1hZGRyZXNzZXM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tYmFzZS1hZGRyZXNzZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1iYXNlXzAwMmRhZGRyZXNzZXMtMTg1NSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYmFzZV8wMDJkYWRkcmVzc2VzLTE4NTYiPjwvYT5HZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSBjb2RlIHRoYXQgdXNlcyA8ZW0+YmFzZSBhZGRyZXNzZXM8L2VtPi4gIFVzaW5nIGEKK2Jhc2UgYWRkcmVzcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBhIHJlcXVlc3QgKGhhbmRsZWQgYnkgdGhlIGFzc2VtYmxlcgorYW5kIHRoZSBsaW5rZXIpIGZvciBhIGNvbnN0YW50IHRvIGJlIHNldCB1cCBpbiBhIGdsb2JhbCByZWdpc3Rlci4gIFRoZQorcmVnaXN0ZXIgaXMgdXNlZCBmb3Igb25lIG9yIG1vcmUgYmFzZSBhZGRyZXNzIHJlcXVlc3RzIHdpdGhpbiB0aGUgcmFuZ2UgMAordG8gMjU1IGZyb20gdGhlIHZhbHVlIGhlbGQgaW4gdGhlIHJlZ2lzdGVyLiAgVGhlIGdlbmVyYWxseSBsZWFkcyB0byBzaG9ydAorYW5kIGZhc3QgY29kZSwgYnV0IHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGRhdGEgaXRlbXMgdGhhdCBjYW4gYmUKK2FkZHJlc3NlZCBpcyBsaW1pdGVkLiAgVGhpcyBtZWFucyB0aGF0IGEgcHJvZ3JhbSB0aGF0IHVzZXMgbG90cyBvZiBzdGF0aWMKK2RhdGEgbWF5IHJlcXVpcmUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1iYXNlLWFkZHJlc3Nlczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zaW5nbGUtZXhpdDwvY29kZT48ZHQ+PGNvZGU+LW1uby1zaW5nbGUtZXhpdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNpbmdsZV8wMDJkZXhpdC0xODU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzaW5nbGVfMDAyZGV4aXQtMTg1OCI+PC9hPkZvcmNlIChkbyBub3QgZm9yY2UpIGdlbmVyYXRlZCBjb2RlIHRvIGhhdmUgYSBzaW5nbGUgZXhpdCBwb2ludCBpbiBlYWNoCitmdW5jdGlvbi4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NTjEwMzAwLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTU4xMDMwMC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxNzY0OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTU4xMDMwMC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1OMTAzMDAgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNTUlYLU9wdGlvbnMuaHRtbCNNTUlYLU9wdGlvbnMiIHRpdGxlPSJNTUlYIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNb3hpZS1PcHRpb25zLmh0bWwjTW94aWUtT3B0aW9ucyIgdGl0bGU9Ik1veGllIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTU4xMDMwMC1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1veGllLU9wdGlvbnMuaHRtbCNNb3hpZS1PcHRpb25zIj5Nb3hpZSBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjTU1JWC1PcHRpb25zIj5NTUlYIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMjggTU4xMDMwMCBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtTU4xMDMwMC1vcHRpb25zLTE4NTkiPjwvYT4KK1RoZXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgTWF0c3VzaGl0YSBNTjEwMzAwIGFyY2hpdGVjdHVyZXM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tbXVsdC1idWc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tdWx0XzAwMmRidWctMTg2MCI+PC9hPkdlbmVyYXRlIGNvZGUgdG8gYXZvaWQgYnVncyBpbiB0aGUgbXVsdGlwbHkgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgTU4xMDMwMAorcHJvY2Vzc29ycy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLW11bHQtYnVnPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG11bHRfMDAyZGJ1Zy0xODYxIj48L2E+RG8gbm90IGdlbmVyYXRlIGNvZGUgdG8gYXZvaWQgYnVncyBpbiB0aGUgbXVsdGlwbHkgaW5zdHJ1Y3Rpb25zIGZvciB0aGUKK01OMTAzMDAgcHJvY2Vzc29ycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYW0zMzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFtMzMtMTg2MiI+PC9hPkdlbmVyYXRlIGNvZGUgdXNpbmcgZmVhdHVyZXMgc3BlY2lmaWMgdG8gdGhlIEFNMzMgcHJvY2Vzc29yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1hbTMzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGFtMzMtMTg2MyI+PC9hPkRvIG5vdCBnZW5lcmF0ZSBjb2RlIHVzaW5nIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBBTTMzIHByb2Nlc3Nvci4gIFRoaXMKK2lzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hbTMzLTI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hbTMzXzAwMmQyLTE4NjQiPjwvYT5HZW5lcmF0ZSBjb2RlIHVzaW5nIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBBTTMzLzIuMCBwcm9jZXNzb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFtMzQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hbTM0LTE4NjUiPjwvYT5HZW5lcmF0ZSBjb2RlIHVzaW5nIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBBTTM0IHByb2Nlc3Nvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdHVuZT08L2NvZGU+PHZhcj5jcHUtdHlwZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tdHVuZS0xODY2Ij48L2E+VXNlIHRoZSB0aW1pbmcgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBpbmRpY2F0ZWQgQ1BVIHR5cGUgd2hlbgorc2NoZWR1bGluZyBpbnN0cnVjdGlvbnMuICBUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgdGFyZ2V0ZWQgcHJvY2Vzc29yCit0eXBlLiAgVGhlIENQVSB0eXBlIG11c3QgYmUgb25lIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW4xMDMwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbTMzPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbTMzLTI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbTM0PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1yZXR1cm4tcG9pbnRlci1vbi1kMDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXJldHVybl8wMDJkcG9pbnRlcl8wMDJkb25fMDAyZGQwLTE4NjciPjwvYT5XaGVuIGdlbmVyYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwb2ludGVyLCByZXR1cm4gdGhlIHBvaW50ZXIKK2luIGJvdGggPGNvZGU+YTA8L2NvZGU+IGFuZCA8Y29kZT5kMDwvY29kZT4uICBPdGhlcndpc2UsIHRoZSBwb2ludGVyIGlzIHJldHVybmVkCitvbmx5IGluIDxjb2RlPmEwPC9jb2RlPiwgYW5kIGF0dGVtcHRzIHRvIGNhbGwgc3VjaCBmdW5jdGlvbnMgd2l0aG91dCBhIHByb3RvdHlwZQorcmVzdWx0IGluIGVycm9ycy4gIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0OyB1c2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tcmV0dXJuLXBvaW50ZXItb24tZDA8L3NwYW4+PC9zYW1wPiB0byBkaXNhYmxlIGl0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1jcnQwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGNydDAtMTg2OCI+PC9hPkRvIG5vdCBsaW5rIGluIHRoZSBDIHJ1bi10aW1lIGluaXRpYWxpemF0aW9uIG9iamVjdCBmaWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1yZWxheDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXJlbGF4LTE4NjkiPjwvYT5JbmRpY2F0ZSB0byB0aGUgbGlua2VyIHRoYXQgaXQgc2hvdWxkIHBlcmZvcm0gYSByZWxheGF0aW9uIG9wdGltaXphdGlvbiBwYXNzCit0byBzaG9ydGVuIGJyYW5jaGVzLCBjYWxscyBhbmQgYWJzb2x1dGUgbWVtb3J5IGFkZHJlc3Nlcy4gIFRoaXMgb3B0aW9uIG9ubHkKK2hhcyBhbiBlZmZlY3Qgd2hlbiB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZSBmaW5hbCBsaW5rIHN0ZXAuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gbWFrZXMgc3ltYm9saWMgZGVidWdnaW5nIGltcG9zc2libGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxpdzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxpdy0xODcwIj48L2E+QWxsb3cgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIDxlbT5Mb25nIEluc3RydWN0aW9uIFdvcmQ8L2VtPgoraW5zdHJ1Y3Rpb25zIGlmIHRoZSB0YXJnZXQgaXMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QU0zMzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciBsYXRlci4gIFRoaXMgaXMgdGhlCitkZWZhdWx0LiAgVGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19MSVdfXzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm9saXc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub2xpdy0xODcxIj48L2E+RG8gbm90IGFsbG93IHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSA8ZW0+TG9uZyBJbnN0cnVjdGlvbiBXb3JkPC9lbT4KK2luc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHByZXByb2Nlc3NvciBtYWNybworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX05PX0xJV19fPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zZXRsYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNldGxiLTE4NzIiPjwvYT5BbGxvdyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgdGhlIDxlbT5TRVRMQjwvZW0+IGFuZCA8ZW0+TGNjPC9lbT4KK2luc3RydWN0aW9ucyBpZiB0aGUgdGFyZ2V0IGlzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkFNMzM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgbGF0ZXIuICBUaGlzIGlzIHRoZQorZGVmYXVsdC4gIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHByZXByb2Nlc3NvciBtYWNybyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fU0VUTEJfXzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm9zZXRsYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vc2V0bGItMTg3MyI+PC9hPkRvIG5vdCBhbGxvdyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgPGVtPlNFVExCPC9lbT4gb3IgPGVtPkxjYzwvZW0+CitpbnN0cnVjdGlvbnMuICBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19OT19TRVRMQl9fPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWFjaGluZS1Db25zdHJhaW50cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NYWNoaW5lLUNvbnN0cmFpbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1MzFiZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWFjaGluZS1Db25zdHJhaW50cy5odG1sCkBAIC0wLDAgKzEsMTUzNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWFjaGluZSBDb25zdHJhaW50cyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb25zdHJhaW50cy5odG1sI0NvbnN0cmFpbnRzIiB0aXRsZT0iQ29uc3RyYWludHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiIHRpdGxlPSJNb2RpZmllcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTWFjaGluZS1Db25zdHJhaW50cyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1vZGlmaWVycy5odG1sI01vZGlmaWVycyI+TW9kaWZpZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyI+Q29uc3RyYWludHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjQyLjQgQ29uc3RyYWludHMgZm9yIFBhcnRpY3VsYXIgTWFjaGluZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tYWNoaW5lLXNwZWNpZmljLWNvbnN0cmFpbnRzLTI4NTkiPjwvYT48YSBuYW1lPSJpbmRleC1jb25zdHJhaW50c18wMDJjLW1hY2hpbmUtc3BlY2lmaWMtMjg2MCI+PC9hPgorV2hlbmV2ZXIgcG9zc2libGUsIHlvdSBzaG91bGQgdXNlIHRoZSBnZW5lcmFsLXB1cnBvc2UgY29uc3RyYWludCBsZXR0ZXJzCitpbiA8Y29kZT5hc208L2NvZGU+IGFyZ3VtZW50cywgc2luY2UgdGhleSB3aWxsIGNvbnZleSBtZWFuaW5nIG1vcmUgcmVhZGlseSB0bworcGVvcGxlIHJlYWRpbmcgeW91ciBjb2RlLiAgRmFpbGluZyB0aGF0LCB1c2UgdGhlIGNvbnN0cmFpbnQgbGV0dGVycwordGhhdCB1c3VhbGx5IGhhdmUgdmVyeSBzaW1pbGFyIG1lYW5pbmdzIGFjcm9zcyBhcmNoaXRlY3R1cmVzLiAgVGhlIG1vc3QKK2NvbW1vbmx5IHVzZWQgY29uc3RyYWludHMgYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yPC9zcGFuPjwvc2FtcD4mcnNxdW87IChmb3IgbWVtb3J5IGFuZAorZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyByZXNwZWN0aXZlbHk7IHNlZSA8YSBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiPlNpbXBsZSBDb25zdHJhaW50czwvYT4pLCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+STwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdXN1YWxseSB0aGUgbGV0dGVyIGluZGljYXRpbmcgdGhlIG1vc3QgY29tbW9uCitpbW1lZGlhdGUtY29uc3RhbnQgZm9ybWF0LgorCisgPHA+RWFjaCBhcmNoaXRlY3R1cmUgZGVmaW5lcyBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLiAgVGhlc2UgY29uc3RyYWludHMKK2FyZSB1c2VkIGJ5IHRoZSBjb21waWxlciBpdHNlbGYgZm9yIGluc3RydWN0aW9uIGdlbmVyYXRpb24sIGFzIHdlbGwgYXMKK2ZvciA8Y29kZT5hc208L2NvZGU+IHN0YXRlbWVudHM7IHRoZXJlZm9yZSwgc29tZSBvZiB0aGUgY29uc3RyYWludHMgYXJlIG5vdAorcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgPGNvZGU+YXNtPC9jb2RlPi4gIEhlcmUgaXMgYSBzdW1tYXJ5IG9mIHNvbWUgb2YgdGhlCittYWNoaW5lLWRlcGVuZGVudCBjb25zdHJhaW50cyBhdmFpbGFibGUgb24gc29tZSBwYXJ0aWN1bGFyIG1hY2hpbmVzOworaXQgaW5jbHVkZXMgYm90aCBjb25zdHJhaW50cyB0aGF0IGFyZSB1c2VmdWwgZm9yIDxjb2RlPmFzbTwvY29kZT4gYW5kCitjb25zdHJhaW50cyB0aGF0IGFyZW4ndC4gIFRoZSBjb21waWxlciBzb3VyY2UgZmlsZSBtZW50aW9uZWQgaW4gdGhlCit0YWJsZSBoZWFkaW5nIGZvciBlYWNoIGFyY2hpdGVjdHVyZSBpcyB0aGUgZGVmaW5pdGl2ZSByZWZlcmVuY2UgZm9yCit0aGUgbWVhbmluZ3Mgb2YgdGhhdCBhcmNoaXRlY3R1cmUncyBjb25zdHJhaW50cy4KKworICAgICA8ZGw+Cis8ZHQ+PGVtPkFBcmNoNjQgZmFtaWx5Jm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy9hYXJjaDY0L2NvbnN0cmFpbnRzLm1kPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPms8L2NvZGU+PGRkPlRoZSBzdGFjayBwb2ludGVyIHJlZ2lzdGVyICg8Y29kZT5TUDwvY29kZT4pCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnc8L2NvZGU+PGRkPkZsb2F0aW5nIHBvaW50IG9yIFNJTUQgdmVjdG9yIHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBhcyBhbiBpbW1lZGlhdGUgb3BlcmFuZCBpbiBhbiA8Y29kZT5BREQ8L2NvZGU+CitpbnN0cnVjdGlvbgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgYXMgYW4gaW1tZWRpYXRlIG9wZXJhbmQgaW4gYSA8Y29kZT5TVUI8L2NvZGU+CitpbnN0cnVjdGlvbiAob25jZSBuZWdhdGVkKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBhIDMyLWJpdCBsb2dpY2FsIGluc3RydWN0aW9uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGEgNjQtYml0IGxvZ2ljYWwgaW5zdHJ1Y3Rpb24KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TTwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB0aGF0IGlzIHZhbGlkIGFzIGFuIGltbWVkaWF0ZSBvcGVyYW5kIGluIGEgMzItYml0IDxjb2RlPk1PVjwvY29kZT4KK3BzZXVkbyBpbnN0cnVjdGlvbi4gVGhlIDxjb2RlPk1PVjwvY29kZT4gbWF5IGJlIGFzc2VtYmxlZCB0byBvbmUgb2Ygc2V2ZXJhbCBkaWZmZXJlbnQKK21hY2hpbmUgaW5zdHJ1Y3Rpb25zIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB0aGF0IGlzIHZhbGlkIGFzIGFuIGltbWVkaWF0ZSBvcGVyYW5kIGluIGEgNjQtYml0IDxjb2RlPk1PVjwvY29kZT4KK3BzZXVkbyBpbnN0cnVjdGlvbgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TPC9jb2RlPjxkZD5BbiBhYnNvbHV0ZSBzeW1ib2xpYyBhZGRyZXNzIG9yIGEgbGFiZWwgcmVmZXJlbmNlCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlk8L2NvZGU+PGRkPkZsb2F0aW5nIHBvaW50IGNvbnN0YW50IHplcm8KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WjwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB6ZXJvCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlVzaDwvY29kZT48ZGQ+VGhlIGhpZ2ggcGFydCAoYml0cyAxMiBhbmQgdXB3YXJkcykgb2YgdGhlIHBjLXJlbGF0aXZlIGFkZHJlc3Mgb2YgYSBzeW1ib2wKK3dpdGhpbiA0R0Igb2YgdGhlIGluc3RydWN0aW9uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlE8L2NvZGU+PGRkPkEgbWVtb3J5IGFkZHJlc3Mgd2hpY2ggdXNlcyBhIHNpbmdsZSBiYXNlIHJlZ2lzdGVyIHdpdGggbm8gb2Zmc2V0CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlVtcDwvY29kZT48ZGQ+QSBtZW1vcnkgYWRkcmVzcyBzdWl0YWJsZSBmb3IgYSBsb2FkL3N0b3JlIHBhaXIgaW5zdHJ1Y3Rpb24gaW4gU0ksIERJLCBTRiBhbmQKK0RGIG1vZGVzCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5BUk0gZmFtaWx5Jm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy9hcm0vY29uc3RyYWludHMubWQ8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+dzwvY29kZT48ZGQ+VkZQIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkc8L2NvZGU+PGRkPlRoZSBmbG9hdGluZy1wb2ludCBjb25zdGFudCAwLjAKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+STwvY29kZT48ZGQ+SW50ZWdlciB0aGF0IGlzIHZhbGlkIGFzIGFuIGltbWVkaWF0ZSBvcGVyYW5kIGluIGEgZGF0YSBwcm9jZXNzaW5nCitpbnN0cnVjdGlvbi4gIFRoYXQgaXMsIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1IHJvdGF0ZWQgYnkgYQorbXVsdGlwbGUgb2YgMgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5JbnRlZ2VyIGluIHRoZSByYW5nZSAmbWludXM7NDA5NSB0byA0MDk1CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPks8L2NvZGU+PGRkPkludGVnZXIgdGhhdCBzYXRpc2ZpZXMgY29uc3RyYWludCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hlbiBpbnZlcnRlZCAob25lcyBjb21wbGVtZW50KQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5JbnRlZ2VyIHRoYXQgc2F0aXNmaWVzIGNvbnN0cmFpbnQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5JPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoZW4gbmVnYXRlZCAodHdvcyBjb21wbGVtZW50KQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5JbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDMyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlE8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSB3aGVyZSB0aGUgZXhhY3QgYWRkcmVzcyBpcyBpbiBhIHNpbmdsZSByZWdpc3RlcgorKGAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm08L3NwYW4+PC9zYW1wPiZyc3F1bzsnIGlzIHByZWZlcmFibGUgZm9yIDxjb2RlPmFzbTwvY29kZT4gc3RhdGVtZW50cykKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UjwvY29kZT48ZGQ+QW4gaXRlbSBpbiB0aGUgY29uc3RhbnQgcG9vbAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TPC9jb2RlPjxkZD5BIHN5bWJvbCBpbiB0aGUgdGV4dCBzZWdtZW50IG9mIHRoZSBjdXJyZW50IGZpbGUKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VXY8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSBzdWl0YWJsZSBmb3IgVkZQIGxvYWQvc3RvcmUgaW5zbnMgKHJlZytjb25zdGFudCBvZmZzZXQpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlV5PC9jb2RlPjxkZD5BIG1lbW9yeSByZWZlcmVuY2Ugc3VpdGFibGUgZm9yIGlXTU1YdCBsb2FkL3N0b3JlIGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VXE8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSBzdWl0YWJsZSBmb3IgdGhlIEFSTXY0IGxkcnNiIGluc3RydWN0aW9uLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48ZW0+QVZSIGZhbWlseSZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvYXZyL2NvbnN0cmFpbnRzLm1kPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmw8L2NvZGU+PGRkPlJlZ2lzdGVycyBmcm9tIHIwIHRvIHIxNQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hPC9jb2RlPjxkZD5SZWdpc3RlcnMgZnJvbSByMTYgdG8gcjIzCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmQ8L2NvZGU+PGRkPlJlZ2lzdGVycyBmcm9tIHIxNiB0byByMzEKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dzwvY29kZT48ZGQ+UmVnaXN0ZXJzIGZyb20gcjI0IHRvIHIzMS4gIFRoZXNlIHJlZ2lzdGVycyBjYW4gYmUgdXNlZCBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFkaXc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5lPC9jb2RlPjxkZD5Qb2ludGVyIHJlZ2lzdGVyIChyMjYmbmRhc2g7cjMxKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5iPC9jb2RlPjxkZD5CYXNlIHBvaW50ZXIgcmVnaXN0ZXIgKHIyOCZuZGFzaDtyMzEpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnE8L2NvZGU+PGRkPlN0YWNrIHBvaW50ZXIgcmVnaXN0ZXIgKFNQSDpTUEwpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnQ8L2NvZGU+PGRkPlRlbXBvcmFyeSByZWdpc3RlciByMAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT54PC9jb2RlPjxkZD5SZWdpc3RlciBwYWlyIFggKHIyNzpyMjYpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnk8L2NvZGU+PGRkPlJlZ2lzdGVyIHBhaXIgWSAocjI5OnIyOCkKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ejwvY29kZT48ZGQ+UmVnaXN0ZXIgcGFpciBaIChyMzE6cjMwKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JPC9jb2RlPjxkZD5Db25zdGFudCBncmVhdGVyIHRoYW4gJm1pbnVzOzEsIGxlc3MgdGhhbiA2NAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5Db25zdGFudCBncmVhdGVyIHRoYW4gJm1pbnVzOzY0LCBsZXNzIHRoYW4gMQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD5Db25zdGFudCBpbnRlZ2VyIDIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TDwvY29kZT48ZGQ+Q29uc3RhbnQgaW50ZWdlciAwCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk08L2NvZGU+PGRkPkNvbnN0YW50IHRoYXQgZml0cyBpbiA4IGJpdHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+Q29uc3RhbnQgaW50ZWdlciAmbWludXM7MQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5Db25zdGFudCBpbnRlZ2VyIDgsIDE2LCBvciAyNAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5QPC9jb2RlPjxkZD5Db25zdGFudCBpbnRlZ2VyIDEKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+RzwvY29kZT48ZGQ+QSBmbG9hdGluZyBwb2ludCBjb25zdGFudCAwLjAKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UTwvY29kZT48ZGQ+QSBtZW1vcnkgYWRkcmVzcyBiYXNlZCBvbiBZIG9yIFogcG9pbnRlciB3aXRoIGRpc3BsYWNlbWVudC4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPkVwaXBoYW55Jm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy9lcGlwaGFueS9jb25zdHJhaW50cy5tZDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5VMTY8L2NvZGU+PGRkPkFuIHVuc2lnbmVkIDE2LWJpdCBjb25zdGFudC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SzwvY29kZT48ZGQ+QW4gdW5zaWduZWQgNS1iaXQgY29uc3RhbnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPkEgc2lnbmVkIDExLWJpdCBjb25zdGFudC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Q20xPC9jb2RlPjxkZD5BIHNpZ25lZCAxMS1iaXQgY29uc3RhbnQgYWRkZWQgdG8gJm1pbnVzOzEuIAorQ2FuIG9ubHkgbWF0Y2ggd2hlbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW0xcmVnLTwvc3Bhbj48dmFyPnJlZzwvdmFyPjwvc2FtcD4gb3B0aW9uIGlzIGFjdGl2ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Q2wxPC9jb2RlPjxkZD5MZWZ0LXNoaWZ0IG9mICZtaW51czsxLCBpLmUuLCBhIGJpdCBtYXNrIHdpdGggYSBibG9jayBvZiBsZWFkaW5nIG9uZXMsIHRoZSByZXN0CitiZWluZyBhIGJsb2NrIG9mIHRyYWlsaW5nIHplcm9lcy4gCitDYW4gb25seSBtYXRjaCB3aGVuIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTFyZWctPC9zcGFuPjx2YXI+cmVnPC92YXI+PC9zYW1wPiBvcHRpb24gaXMgYWN0aXZlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5DcjE8L2NvZGU+PGRkPlJpZ2h0LXNoaWZ0IG9mICZtaW51czsxLCBpLmUuLCBhIGJpdCBtYXNrIHdpdGggYSB0cmFpbGluZyBibG9jayBvZiBvbmVzLCB0aGUKK3Jlc3QgYmVpbmcgemVyb2VzLiAgT3IgdG8gcHV0IGl0IGFub3RoZXIgd2F5LCBvbmUgbGVzcyB0aGFuIGEgcG93ZXIgb2YgdHdvLiAKK0NhbiBvbmx5IG1hdGNoIHdoZW4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tMXJlZy08L3NwYW4+PHZhcj5yZWc8L3Zhcj48L3NhbXA+IG9wdGlvbiBpcyBhY3RpdmUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkNhbDwvY29kZT48ZGQ+Q29uc3RhbnQgZm9yIGFyaXRobWV0aWMvbG9naWNhbCBvcGVyYXRpb25zLiAKK1RoaXMgaXMgbGlrZSA8Y29kZT5pPC9jb2RlPiwgZXhjZXB0IHRoYXQgZm9yIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUsCitubyBzeW1ib2xzIC8gZXhwcmVzc2lvbnMgbmVlZGluZyByZWxvY2F0aW9ucyBhcmUgYWxsb3dlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Q3N5PC9jb2RlPjxkZD5TeW1ib2xpYyBjb25zdGFudCBmb3IgY2FsbC9qdW1wIGluc3RydWN0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SY3M8L2NvZGU+PGRkPlRoZSByZWdpc3RlciBjbGFzcyB1c2FibGUgaW4gc2hvcnQgaW5zbnMuICBUaGlzIGlzIGEgcmVnaXN0ZXIgY2xhc3MKK2NvbnN0cmFpbnQsIGFuZCBjYW4gdGh1cyBkcml2ZSByZWdpc3RlciBhbGxvY2F0aW9uLiAKK1RoaXMgY29uc3RyYWludCB3b24ndCBtYXRjaCB1bmxlc3MgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wcmVmZXItc2hvcnQtaW5zbi1yZWdzPC9zcGFuPjwvc2FtcD4gaXMKK2luIGVmZmVjdC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UnNjPC9jb2RlPjxkZD5UaGUgdGhlIHJlZ2lzdGVyIGNsYXNzIG9mIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGhvbGQgYQorc2liY2FsbCBjYWxsIGFkZHJlc3MuICBJLmUuLCBhIGNhbGxlci1zYXZlZCByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UmN0PC9jb2RlPjxkZD5Db3JlIGNvbnRyb2wgcmVnaXN0ZXIgY2xhc3MuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlJnczwvY29kZT48ZGQ+VGhlIHJlZ2lzdGVyIGdyb3VwIHVzYWJsZSBpbiBzaG9ydCBpbnNucy4gCitUaGlzIGNvbnN0cmFpbnQgZG9lcyBub3QgdXNlIGEgcmVnaXN0ZXIgY2xhc3MsIHNvIHRoYXQgaXQgb25seQorcGFzc2l2ZWx5IG1hdGNoZXMgc3VpdGFibGUgcmVnaXN0ZXJzLCBhbmQgZG9lc24ndCBkcml2ZSByZWdpc3RlciBhbGxvY2F0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ScmE8L2NvZGU+PGRkPk1hdGNoZXMgdGhlIHJldHVybiBhZGRyZXNzIGlmIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIHRoZSBsaW5rIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SY2M8L2NvZGU+PGRkPk1hdGNoZXMgdGhlIGludGVnZXIgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlNyYTwvY29kZT48ZGQ+TWF0Y2hlcyB0aGUgcmV0dXJuIGFkZHJlc3MgaWYgaXQgaXMgaW4gYSBzdGFjayBzbG90LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5DZm08L2NvZGU+PGRkPk1hdGNoZXMgY29udHJvbCByZWdpc3RlciB2YWx1ZXMgdG8gc3dpdGNoIGZwIG1vZGUsIHdoaWNoIGFyZSBlbmNhcHN1bGF0ZWQgaW4KKzxjb2RlPlVOU1BFQ19GUF9NT0RFPC9jb2RlPi4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPkNSMTYgQXJjaGl0ZWN0dXJlJm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy9jcjE2L2NyMTYuaDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5iPC9jb2RlPjxkZD5SZWdpc3RlcnMgZnJvbSByMCB0byByMTQgKHJlZ2lzdGVycyB3aXRob3V0IHN0YWNrIHBvaW50ZXIpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnQ8L2NvZGU+PGRkPlJlZ2lzdGVyIGZyb20gcjAgdG8gcjExIChhbGwgMTYtYml0IHJlZ2lzdGVycykKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+cDwvY29kZT48ZGQ+UmVnaXN0ZXIgZnJvbSByMTIgdG8gcjE1IChhbGwgMzItYml0IHJlZ2lzdGVycykKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+STwvY29kZT48ZGQ+U2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiA0IGJpdHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SjwvY29kZT48ZGQ+U2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiA1IGJpdHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SzwvY29kZT48ZGQ+U2lnbmVkIGNvbnN0YW50IHRoYXQgZml0cyBpbiA2IGJpdHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TDwvY29kZT48ZGQ+VW5zaWduZWQgY29uc3RhbnQgdGhhdCBmaXRzIGluIDQgYml0cworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5TaWduZWQgY29uc3RhbnQgdGhhdCBmaXRzIGluIDMyIGJpdHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+Q2hlY2sgZm9yIDY0IGJpdHMgd2lkZSBjb25zdGFudHMgZm9yIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkc8L2NvZGU+PGRkPkZsb2F0aW5nIHBvaW50IGNvbnN0YW50IHRoYXQgaXMgbGVnYWwgZm9yIHN0b3JlIGltbWVkaWF0ZQorPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5IZXdsZXR0LVBhY2thcmQgUEEtUklTQyZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvcGEvcGEuaDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5hPC9jb2RlPjxkZD5HZW5lcmFsIHJlZ2lzdGVyIDEKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZjwvY29kZT48ZGQ+RmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+cTwvY29kZT48ZGQ+U2hpZnQgYW1vdW50IHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPkZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIChkZXByZWNhdGVkKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT55PC9jb2RlPjxkZD5VcHBlciBmbG9hdGluZyBwb2ludCByZWdpc3RlciAoMzItYml0KSwgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIgKDY0LWJpdCkKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WjwvY29kZT48ZGQ+QW55IHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPlNpZ25lZCAxMS1iaXQgaW50ZWdlciBjb25zdGFudAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5TaWduZWQgMTQtYml0IGludGVnZXIgY29uc3RhbnQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SzwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB0aGF0IGNhbiBiZSBkZXBvc2l0ZWQgd2l0aCBhIDxjb2RlPnpkZXBpPC9jb2RlPiBpbnN0cnVjdGlvbgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5TaWduZWQgNS1iaXQgaW50ZWdlciBjb25zdGFudAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IDAKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB0aGF0IGNhbiBiZSBsb2FkZWQgd2l0aCBhIDxjb2RlPmxkaWw8L2NvZGU+IGluc3RydWN0aW9uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk88L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgd2hvc2UgdmFsdWUgcGx1cyBvbmUgaXMgYSBwb3dlciBvZiAyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlA8L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgPGNvZGU+YW5kPC9jb2RlPiBvcGVyYXRpb25zIGluIDxjb2RlPmRlcGk8L2NvZGU+CithbmQgPGNvZGU+ZXh0cnU8L2NvZGU+IGluc3RydWN0aW9ucworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IDMxCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlU8L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgNjMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+RzwvY29kZT48ZGQ+RmxvYXRpbmctcG9pbnQgY29uc3RhbnQgMC4wCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkE8L2NvZGU+PGRkPkEgPGNvZGU+bG9fc3VtPC9jb2RlPiBkYXRhLWxpbmthZ2UtdGFibGUgbWVtb3J5IG9wZXJhbmQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UTwvY29kZT48ZGQ+QSBtZW1vcnkgb3BlcmFuZCB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kIG9mIGFuCitpbnRlZ2VyIHN0b3JlIGluc3RydWN0aW9uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlI8L2NvZGU+PGRkPkEgc2NhbGVkIG9yIHVuc2NhbGVkIGluZGV4ZWQgbWVtb3J5IG9wZXJhbmQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VDwvY29kZT48ZGQ+QSBtZW1vcnkgb3BlcmFuZCBmb3IgZmxvYXRpbmctcG9pbnQgbG9hZHMgYW5kIHN0b3JlcworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5XPC9jb2RlPjxkZD5BIHJlZ2lzdGVyIGluZGlyZWN0IG1lbW9yeSBvcGVyYW5kCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPnBpY29DaGlwIGZhbWlseSZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5waWNvY2hpcC5oPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPms8L2NvZGU+PGRkPlN0YWNrIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5mPC9jb2RlPjxkZD5Qb2ludGVyIHJlZ2lzdGVyLiAgQSByZWdpc3RlciB3aGljaCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IHdpdGhvdXQKK3N1cHBseWluZyBhbiBvZmZzZXQuICBBbnkgb3RoZXIgcmVnaXN0ZXIgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIG1lbW9yeSwKK2J1dCB3aWxsIG5lZWQgYSBjb25zdGFudCBvZmZzZXQuICBJbiB0aGUgY2FzZSBvZiB0aGUgb2Zmc2V0IGJlaW5nIHplcm8sCitpdCBpcyBtb3JlIGVmZmljaWVudCB0byB1c2UgYSBwb2ludGVyIHJlZ2lzdGVyLCBzaW5jZSB0aGlzIHJlZHVjZXMgY29kZQorc2l6ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dDwvY29kZT48ZGQ+QSB0d2luIHJlZ2lzdGVyLiAgQSByZWdpc3RlciB3aGljaCBtYXkgYmUgcGFpcmVkIHdpdGggYW4gYWRqYWNlbnQKK3JlZ2lzdGVyIHRvIGNyZWF0ZSBhIDMyLWJpdCByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+QW55IGFic29sdXRlIG1lbW9yeSBhZGRyZXNzIChlLmcuLCBzeW1ib2xpYyBjb25zdGFudCwgc3ltYm9saWMKK2NvbnN0YW50ICsgb2Zmc2V0KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+STwvY29kZT48ZGQ+NC1iaXQgc2lnbmVkIGludGVnZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPko8L2NvZGU+PGRkPjQtYml0IHVuc2lnbmVkIGludGVnZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPks8L2NvZGU+PGRkPjgtYml0IHNpZ25lZCBpbnRlZ2VyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5BbnkgY29uc3RhbnQgd2hvc2UgYWJzb2x1dGUgdmFsdWUgaXMgbm8gZ3JlYXRlciB0aGFuIDQtYml0cy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+MTAtYml0IHNpZ25lZCBpbnRlZ2VyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk88L2NvZGU+PGRkPjE2LWJpdCBzaWduZWQgaW50ZWdlci4KKworICAgICA8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPlBvd2VyUEMgYW5kIElCTSBSUzYwMDAmbWRhc2g7PC9lbT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlnL3JzNjAwMC9yczYwMDAuaDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5iPC9jb2RlPjxkZD5BZGRyZXNzIGJhc2UgcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+RmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIgKGNvbnRhaW5pbmcgNjQtYml0IHZhbHVlKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5mPC9jb2RlPjxkZD5GbG9hdGluZyBwb2ludCByZWdpc3RlciAoY29udGFpbmluZyAzMi1iaXQgdmFsdWUpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnY8L2NvZGU+PGRkPkFsdGl2ZWMgdmVjdG9yIHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPndkPC9jb2RlPjxkZD5WU1ggdmVjdG9yIHJlZ2lzdGVyIHRvIGhvbGQgdmVjdG9yIGRvdWJsZSBkYXRhCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPndmPC9jb2RlPjxkZD5WU1ggdmVjdG9yIHJlZ2lzdGVyIHRvIGhvbGQgdmVjdG9yIGZsb2F0IGRhdGEKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+d3M8L2NvZGU+PGRkPlZTWCB2ZWN0b3IgcmVnaXN0ZXIgdG8gaG9sZCBzY2FsYXIgZmxvYXQgZGF0YQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT53YTwvY29kZT48ZGQ+QW55IFZTWCByZWdpc3RlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5oPC9jb2RlPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk1RPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkNUUjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MSU5LPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnE8L2NvZGU+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TVE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DVFI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bDwvY29kZT48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MSU5LPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Q1I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVnaXN0ZXIgKGNvbmRpdGlvbiByZWdpc3RlcikgbnVtYmVyIDAKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+eTwvY29kZT48ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DUjwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWdpc3RlciAoY29uZGl0aW9uIHJlZ2lzdGVyKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT56PC9jb2RlPjxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlhFUltDQV08L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FycnkgYml0IChwYXJ0IG9mIHRoZSBYRVIgcmVnaXN0ZXIpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPlNpZ25lZCAxNi1iaXQgY29uc3RhbnQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SjwvY29kZT48ZGQ+VW5zaWduZWQgMTYtYml0IGNvbnN0YW50IHNoaWZ0ZWQgbGVmdCAxNiBiaXRzICh1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RlYWQgZm9yCis8Y29kZT5TSW1vZGU8L2NvZGU+IGNvbnN0YW50cykKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SzwvY29kZT48ZGQ+VW5zaWduZWQgMTYtYml0IGNvbnN0YW50CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPlNpZ25lZCAxNi1iaXQgY29uc3RhbnQgc2hpZnRlZCBsZWZ0IDE2IGJpdHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TTwvY29kZT48ZGQ+Q29uc3RhbnQgbGFyZ2VyIHRoYW4gMzEKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+RXhhY3QgcG93ZXIgb2YgMgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5aZXJvCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlA8L2NvZGU+PGRkPkNvbnN0YW50IHdob3NlIG5lZ2F0aW9uIGlzIGEgc2lnbmVkIDE2LWJpdCBjb25zdGFudAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5HPC9jb2RlPjxkZD5GbG9hdGluZyBwb2ludCBjb25zdGFudCB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBhIHJlZ2lzdGVyIHdpdGggb25lCitpbnN0cnVjdGlvbiBwZXIgd29yZAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5IPC9jb2RlPjxkZD5JbnRlZ2VyL0Zsb2F0aW5nIHBvaW50IGNvbnN0YW50IHRoYXQgY2FuIGJlIGxvYWRlZCBpbnRvIGEgcmVnaXN0ZXIgdXNpbmcKK3RocmVlIGluc3RydWN0aW9ucworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tPC9jb2RlPjxkZD5NZW1vcnkgb3BlcmFuZC4gCitOb3JtYWxseSwgPGNvZGU+bTwvY29kZT4gZG9lcyBub3QgYWxsb3cgYWRkcmVzc2VzIHRoYXQgdXBkYXRlIHRoZSBiYXNlIHJlZ2lzdGVyLiAKK0lmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29uc3RyYWludCBpcyBhbHNvIHVzZWQsIHRoZXkgYXJlIGFsbG93ZWQgYW5kCit0aGVyZWZvcmUgb24gUG93ZXJQQyB0YXJnZXRzIGluIHRoYXQgY2FzZSBpdCBpcyBvbmx5IHNhZmUKK3RvIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm0mbHQ7Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBhbiA8Y29kZT5hc208L2NvZGU+IHN0YXRlbWVudCBpZiB0aGF0IDxjb2RlPmFzbTwvY29kZT4gc3RhdGVtZW50CithY2Nlc3NlcyB0aGUgb3BlcmFuZCBleGFjdGx5IG9uY2UuICBUaGUgPGNvZGU+YXNtPC9jb2RlPiBzdGF0ZW1lbnQgbXVzdCBhbHNvCit1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lVTwvc3Bhbj48dmFyPiZsdDtvcG5vJmd0OzwvdmFyPjwvc2FtcD4mcnNxdW87IGFzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSAmbGRxdW87dXBkYXRlJnJkcXVvOyBmbGFnIGluIHRoZQorY29ycmVzcG9uZGluZyBsb2FkIG9yIHN0b3JlIGluc3RydWN0aW9uLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIGFzbSAoInN0JVUwICUxLCUwIiA6ICI9bSZsdDsmZ3Q7IiAobWVtKSA6ICJyIiAodmFsKSk7Cis8L3ByZT4KKyAgICAgICAgICA8cD5pcyBjb3JyZWN0IGJ1dDoKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgYXNtICgic3QgJTEsJTAiIDogIj1tJmx0OyZndDsiIChtZW0pIDogInIiICh2YWwpKTsKKzwvcHJlPgorICAgICAgICAgIDxwPmlzIG5vdC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZXM8L2NvZGU+PGRkPkEgJmxkcXVvO3N0YWJsZSZyZHF1bzsgbWVtb3J5IG9wZXJhbmQ7IHRoYXQgaXMsIG9uZSB3aGljaCBkb2VzIG5vdCBpbmNsdWRlIGFueQorYXV0b21vZGlmaWNhdGlvbiBvZiB0aGUgYmFzZSByZWdpc3Rlci4gIFRoaXMgdXNlZCB0byBiZSB1c2VmdWwgd2hlbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFsbG93ZWQgYXV0b21vZGlmaWNhdGlvbiBvZiB0aGUgYmFzZSByZWdpc3RlciwgYnV0IGFzIHRob3NlIGFyZSBub3cgb25seQorYWxsb3dlZCB3aGVuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdXNlZCwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBiYXNpY2FsbHkgdGhlIHNhbWUKK2FzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aXRob3V0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5RPC9jb2RlPjxkZD5NZW1vcnkgb3BlcmFuZCB0aGF0IGlzIGFuIG9mZnNldCBmcm9tIGEgcmVnaXN0ZXIgKGl0IGlzIHVzdWFsbHkgYmV0dGVyCit0byB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gPGNvZGU+YXNtPC9jb2RlPiBzdGF0ZW1lbnRzKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5aPC9jb2RlPjxkZD5NZW1vcnkgb3BlcmFuZCB0aGF0IGlzIGFuIGluZGV4ZWQgb3IgaW5kaXJlY3QgZnJvbSBhIHJlZ2lzdGVyIChpdCBpcwordXN1YWxseSBiZXR0ZXIgdG8gdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmVzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIDxjb2RlPmFzbTwvY29kZT4gc3RhdGVtZW50cykKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UjwvY29kZT48ZGQ+QUlYIFRPQyBlbnRyeQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hPC9jb2RlPjxkZD5BZGRyZXNzIG9wZXJhbmQgdGhhdCBpcyBhbiBpbmRleGVkIG9yIGluZGlyZWN0IGZyb20gYSByZWdpc3RlciAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzCitwcmVmZXJhYmxlIGZvciA8Y29kZT5hc208L2NvZGU+IHN0YXRlbWVudHMpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlM8L2NvZGU+PGRkPkNvbnN0YW50IHN1aXRhYmxlIGFzIGEgNjQtYml0IG1hc2sgb3BlcmFuZAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5UPC9jb2RlPjxkZD5Db25zdGFudCBzdWl0YWJsZSBhcyBhIDMyLWJpdCBtYXNrIG9wZXJhbmQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VTwvY29kZT48ZGQ+U3lzdGVtIFYgUmVsZWFzZSA0IHNtYWxsIGRhdGEgYXJlYSByZWZlcmVuY2UKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dDwvY29kZT48ZGQ+QU5EIG1hc2tzIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBieSB0d28gcmxkaWN7bCwgcn0gaW5zdHJ1Y3Rpb25zCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlc8L2NvZGU+PGRkPlZlY3RvciBjb25zdGFudCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbWVtb3J5CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmo8L2NvZGU+PGRkPlZlY3RvciBjb25zdGFudCB0aGF0IGlzIGFsbCB6ZXJvcy4KKworICAgICA8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPkludGVsIDM4NiZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvaTM4Ni9jb25zdHJhaW50cy5tZDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5SPC9jb2RlPjxkZD5MZWdhY3kgcmVnaXN0ZXImbWRhc2g7dGhlIGVpZ2h0IGludGVnZXIgcmVnaXN0ZXJzIGF2YWlsYWJsZSBvbiBhbGwKK2kzODYgcHJvY2Vzc29ycyAoPGNvZGU+YTwvY29kZT4sIDxjb2RlPmI8L2NvZGU+LCA8Y29kZT5jPC9jb2RlPiwgPGNvZGU+ZDwvY29kZT4sCis8Y29kZT5zaTwvY29kZT4sIDxjb2RlPmRpPC9jb2RlPiwgPGNvZGU+YnA8L2NvZGU+LCA8Y29kZT5zcDwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5xPC9jb2RlPjxkZD5BbnkgcmVnaXN0ZXIgYWNjZXNzaWJsZSBhcyA8dmFyPnI8L3Zhcj48Y29kZT5sPC9jb2RlPi4gIEluIDMyLWJpdCBtb2RlLCA8Y29kZT5hPC9jb2RlPiwKKzxjb2RlPmI8L2NvZGU+LCA8Y29kZT5jPC9jb2RlPiwgYW5kIDxjb2RlPmQ8L2NvZGU+OyBpbiA2NC1iaXQgbW9kZSwgYW55IGludGVnZXIgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlE8L2NvZGU+PGRkPkFueSByZWdpc3RlciBhY2Nlc3NpYmxlIGFzIDx2YXI+cjwvdmFyPjxjb2RlPmg8L2NvZGU+OiA8Y29kZT5hPC9jb2RlPiwgPGNvZGU+YjwvY29kZT4sCis8Y29kZT5jPC9jb2RlPiwgYW5kIDxjb2RlPmQ8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hPC9jb2RlPjxkZD5UaGUgPGNvZGU+YTwvY29kZT4gcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmI8L2NvZGU+PGRkPlRoZSA8Y29kZT5iPC9jb2RlPiByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+VGhlIDxjb2RlPmM8L2NvZGU+IHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5kPC9jb2RlPjxkZD5UaGUgPGNvZGU+ZDwvY29kZT4gcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlM8L2NvZGU+PGRkPlRoZSA8Y29kZT5zaTwvY29kZT4gcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkQ8L2NvZGU+PGRkPlRoZSA8Y29kZT5kaTwvY29kZT4gcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkE8L2NvZGU+PGRkPlRoZSA8Y29kZT5hPC9jb2RlPiBhbmQgPGNvZGU+ZDwvY29kZT4gcmVnaXN0ZXJzLiAgVGhpcyBjbGFzcyBpcyB1c2VkIGZvciBpbnN0cnVjdGlvbnMKK3RoYXQgcmV0dXJuIGRvdWJsZSB3b3JkIHJlc3VsdHMgaW4gdGhlIDxjb2RlPmF4OmR4PC9jb2RlPiByZWdpc3RlciBwYWlyLiAgU2luZ2xlCit3b3JkIHZhbHVlcyB3aWxsIGJlIGFsbG9jYXRlZCBlaXRoZXIgaW4gPGNvZGU+YXg8L2NvZGU+IG9yIDxjb2RlPmR4PC9jb2RlPi4gCitGb3IgZXhhbXBsZSBvbiBpMzg2IHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50cyA8Y29kZT5yZHRzYzwvY29kZT46CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZHRzYyAodm9pZCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRpY2s7CisgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZHRzYyI6Ij1BIih0aWNrKSk7CisgICAgICAgICAgICAgICAgIHJldHVybiB0aWNrOworICAgICAgICAgICAgICAgfQorPC9wcmU+CisgICAgICAgICAgPHA+VGhpcyBpcyBub3QgY29ycmVjdCBvbiB4ODZfNjQgYXMgaXQgd291bGQgYWxsb2NhdGUgdGljayBpbiBlaXRoZXIgPGNvZGU+YXg8L2NvZGU+CitvciA8Y29kZT5keDwvY29kZT4uICBZb3UgaGF2ZSB0byB1c2UgdGhlIGZvbGxvd2luZyB2YXJpYW50IGluc3RlYWQ6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZHRzYyAodm9pZCkKKyAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRpY2tsLCB0aWNraDsKKyAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIjoiPWEiKHRpY2tsKSwiPWQiKHRpY2toKSk7CisgICAgICAgICAgICAgICAgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcgbG9uZyl0aWNraCAmbHQ7Jmx0OyAzMil8dGlja2w7CisgICAgICAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmY8L2NvZGU+PGRkPkFueSA4MDM4NyBmbG9hdGluZy1wb2ludCAoc3RhY2spIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT50PC9jb2RlPjxkZD5Ub3Agb2YgODAzODcgZmxvYXRpbmctcG9pbnQgc3RhY2sgKDxjb2RlPiVzdCgwKTwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT51PC9jb2RlPjxkZD5TZWNvbmQgZnJvbSB0b3Agb2YgODAzODcgZmxvYXRpbmctcG9pbnQgc3RhY2sgKDxjb2RlPiVzdCgxKTwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT55PC9jb2RlPjxkZD5BbnkgTU1YIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT54PC9jb2RlPjxkZD5BbnkgU1NFIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ZejwvY29kZT48ZGQ+Rmlyc3QgU1NFIHJlZ2lzdGVyICg8Y29kZT4leG1tMDwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSAwIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gMzEsIGZvciAzMi1iaXQgc2hpZnRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSAwIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gNjMsIGZvciA2NC1iaXQgc2hpZnRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD5TaWduZWQgOC1iaXQgaW50ZWdlciBjb25zdGFudC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TDwvY29kZT48ZGQ+PGNvZGU+MHhGRjwvY29kZT4gb3IgPGNvZGU+MHhGRkZGPC9jb2RlPiwgZm9yIGFuZHNpIGFzIGEgemVyby1leHRlbmRpbmcgbW92ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TTwvY29kZT48ZGQ+MCwgMSwgMiwgb3IgMyAoc2hpZnRzIGZvciB0aGUgPGNvZGU+bGVhPC9jb2RlPiBpbnN0cnVjdGlvbikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPlVuc2lnbmVkIDgtYml0IGludGVnZXIgY29uc3RhbnQgKGZvciA8Y29kZT5pbjwvY29kZT4gYW5kIDxjb2RlPm91dDwvY29kZT4KK2luc3RydWN0aW9ucykuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkc8L2NvZGU+PGRkPlN0YW5kYXJkIDgwMzg3IGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5DPC9jb2RlPjxkZD5TdGFuZGFyZCBTU0UgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmU8L2NvZGU+PGRkPjMyLWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudCwgb3IgYSBzeW1ib2xpYyByZWZlcmVuY2Uga25vd24KK3RvIGZpdCB0aGF0IHJhbmdlIChmb3IgaW1tZWRpYXRlIG9wZXJhbmRzIGluIHNpZ24tZXh0ZW5kaW5nIHg4Ni02NAoraW5zdHJ1Y3Rpb25zKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WjwvY29kZT48ZGQ+MzItYml0IHVuc2lnbmVkIGludGVnZXIgY29uc3RhbnQsIG9yIGEgc3ltYm9saWMgcmVmZXJlbmNlIGtub3duCit0byBmaXQgdGhhdCByYW5nZSAoZm9yIGltbWVkaWF0ZSBvcGVyYW5kcyBpbiB6ZXJvLWV4dGVuZGluZyB4ODYtNjQKK2luc3RydWN0aW9ucykuCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5JbnRlbCBJQS02NCZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvaWE2NC9pYTY0Lmg8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+R2VuZXJhbCByZWdpc3RlciA8Y29kZT5yMDwvY29kZT4gdG8gPGNvZGU+cjM8L2NvZGU+IGZvciA8Y29kZT5hZGRsPC9jb2RlPiBpbnN0cnVjdGlvbgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5iPC9jb2RlPjxkZD5CcmFuY2ggcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+UHJlZGljYXRlIHJlZ2lzdGVyICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgaW4gJmxkcXVvO2NvbmRpdGlvbmFsJnJkcXVvOykKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+QXBwbGljYXRpb24gcmVnaXN0ZXIgcmVzaWRpbmcgaW4gTS11bml0CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmU8L2NvZGU+PGRkPkFwcGxpY2F0aW9uIHJlZ2lzdGVyIHJlc2lkaW5nIGluIEktdW5pdAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5mPC9jb2RlPjxkZD5GbG9hdGluZy1wb2ludCByZWdpc3RlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tPC9jb2RlPjxkZD5NZW1vcnkgb3BlcmFuZC4gIElmIHVzZWQgdG9nZXRoZXIgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LAordGhlIG9wZXJhbmQgY2FuIGhhdmUgcG9zdGluY3JlbWVudCBhbmQgcG9zdGRlY3JlbWVudCB3aGljaAorcmVxdWlyZSBwcmludGluZyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JVBuPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIElBLTY0LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5HPC9jb2RlPjxkZD5GbG9hdGluZy1wb2ludCBjb25zdGFudCAwLjAgb3IgMS4wCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPjE0LWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD4yMi1iaXQgc2lnbmVkIGludGVnZXIgY29uc3RhbnQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SzwvY29kZT48ZGQ+OC1iaXQgc2lnbmVkIGludGVnZXIgY29uc3RhbnQgZm9yIGxvZ2ljYWwgaW5zdHJ1Y3Rpb25zCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPjgtYml0IGFkanVzdGVkIHNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IGZvciBjb21wYXJlIHBzZXVkby1vcHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TTwvY29kZT48ZGQ+Ni1iaXQgdW5zaWduZWQgaW50ZWdlciBjb25zdGFudCBmb3Igc2hpZnQgY291bnRzCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPjktYml0IHNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50IGZvciBsb2FkIGFuZCBzdG9yZSBwb3N0aW5jcmVtZW50cworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5UaGUgY29uc3RhbnQgemVybworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5QPC9jb2RlPjxkZD4wIG9yICZtaW51czsxIGZvciA8Y29kZT5kZXA8L2NvZGU+IGluc3RydWN0aW9uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlE8L2NvZGU+PGRkPk5vbi12b2xhdGlsZSBtZW1vcnkgZm9yIGZsb2F0aW5nLXBvaW50IGxvYWRzIGFuZCBzdG9yZXMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UjwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCBpbiB0aGUgcmFuZ2UgMSB0byA0IGZvciA8Y29kZT5zaGxhZGQ8L2NvZGU+IGluc3RydWN0aW9uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlM8L2NvZGU+PGRkPk1lbW9yeSBvcGVyYW5kIGV4Y2VwdCBwb3N0aW5jcmVtZW50IGFuZCBwb3N0ZGVjcmVtZW50LiAgVGhpcyBpcworbm93IHJvdWdobHkgdGhlIHNhbWUgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoZW4gbm90IHVzZWQgdG9nZXRoZXIgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPkZSViZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvZnJ2L2Zydi5oPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmE8L2NvZGU+PGRkPlJlZ2lzdGVyIGluIHRoZSBjbGFzcyA8Y29kZT5BQ0NfUkVHUzwvY29kZT4gKDxjb2RlPmFjYzA8L2NvZGU+IHRvIDxjb2RlPmFjYzc8L2NvZGU+KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YjwvY29kZT48ZGQ+UmVnaXN0ZXIgaW4gdGhlIGNsYXNzIDxjb2RlPkVWRU5fQUNDX1JFR1M8L2NvZGU+ICg8Y29kZT5hY2MwPC9jb2RlPiB0byA8Y29kZT5hY2M3PC9jb2RlPikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmM8L2NvZGU+PGRkPlJlZ2lzdGVyIGluIHRoZSBjbGFzcyA8Y29kZT5DQ19SRUdTPC9jb2RlPiAoPGNvZGU+ZmNjMDwvY29kZT4gdG8gPGNvZGU+ZmNjMzwvY29kZT4gYW5kCis8Y29kZT5pY2MwPC9jb2RlPiB0byA8Y29kZT5pY2MzPC9jb2RlPikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmQ8L2NvZGU+PGRkPlJlZ2lzdGVyIGluIHRoZSBjbGFzcyA8Y29kZT5HUFJfUkVHUzwvY29kZT4gKDxjb2RlPmdyMDwvY29kZT4gdG8gPGNvZGU+Z3I2MzwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5lPC9jb2RlPjxkZD5SZWdpc3RlciBpbiB0aGUgY2xhc3MgPGNvZGU+RVZFTl9SRUdTPC9jb2RlPiAoPGNvZGU+Z3IwPC9jb2RlPiB0byA8Y29kZT5ncjYzPC9jb2RlPikuIAorT2RkIHJlZ2lzdGVycyBhcmUgZXhjbHVkZWQgbm90IGluIHRoZSBjbGFzcyBidXQgdGhyb3VnaCB0aGUgdXNlIG9mIGEgbWFjaGluZQorbW9kZSBsYXJnZXIgdGhhbiA0IGJ5dGVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5mPC9jb2RlPjxkZD5SZWdpc3RlciBpbiB0aGUgY2xhc3MgPGNvZGU+RlBSX1JFR1M8L2NvZGU+ICg8Y29kZT5mcjA8L2NvZGU+IHRvIDxjb2RlPmZyNjM8L2NvZGU+KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+aDwvY29kZT48ZGQ+UmVnaXN0ZXIgaW4gdGhlIGNsYXNzIDxjb2RlPkZFVkVOX1JFR1M8L2NvZGU+ICg8Y29kZT5mcjA8L2NvZGU+IHRvIDxjb2RlPmZyNjM8L2NvZGU+KS4gCitPZGQgcmVnaXN0ZXJzIGFyZSBleGNsdWRlZCBub3QgaW4gdGhlIGNsYXNzIGJ1dCB0aHJvdWdoIHRoZSB1c2Ugb2YgYSBtYWNoaW5lCittb2RlIGxhcmdlciB0aGFuIDQgYnl0ZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmw8L2NvZGU+PGRkPlJlZ2lzdGVyIGluIHRoZSBjbGFzcyA8Y29kZT5MUl9SRUc8L2NvZGU+ICh0aGUgPGNvZGU+bHI8L2NvZGU+IHJlZ2lzdGVyKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+cTwvY29kZT48ZGQ+UmVnaXN0ZXIgaW4gdGhlIGNsYXNzIDxjb2RlPlFVQURfUkVHUzwvY29kZT4gKDxjb2RlPmdyMjwvY29kZT4gdG8gPGNvZGU+Z3I2MzwvY29kZT4pLiAKK1JlZ2lzdGVyIG51bWJlcnMgbm90IGRpdmlzaWJsZSBieSA0IGFyZSBleGNsdWRlZCBub3QgaW4gdGhlIGNsYXNzIGJ1dCB0aHJvdWdoCit0aGUgdXNlIG9mIGEgbWFjaGluZSBtb2RlIGxhcmdlciB0aGFuIDggYnl0ZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnQ8L2NvZGU+PGRkPlJlZ2lzdGVyIGluIHRoZSBjbGFzcyA8Y29kZT5JQ0NfUkVHUzwvY29kZT4gKDxjb2RlPmljYzA8L2NvZGU+IHRvIDxjb2RlPmljYzM8L2NvZGU+KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dTwvY29kZT48ZGQ+UmVnaXN0ZXIgaW4gdGhlIGNsYXNzIDxjb2RlPkZDQ19SRUdTPC9jb2RlPiAoPGNvZGU+ZmNjMDwvY29kZT4gdG8gPGNvZGU+ZmNjMzwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT52PC9jb2RlPjxkZD5SZWdpc3RlciBpbiB0aGUgY2xhc3MgPGNvZGU+SUNSX1JFR1M8L2NvZGU+ICg8Y29kZT5jYzQ8L2NvZGU+IHRvIDxjb2RlPmNjNzwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT53PC9jb2RlPjxkZD5SZWdpc3RlciBpbiB0aGUgY2xhc3MgPGNvZGU+RkNSX1JFR1M8L2NvZGU+ICg8Y29kZT5jYzA8L2NvZGU+IHRvIDxjb2RlPmNjMzwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT54PC9jb2RlPjxkZD5SZWdpc3RlciBpbiB0aGUgY2xhc3MgPGNvZGU+UVVBRF9GUFJfUkVHUzwvY29kZT4gKDxjb2RlPmZyMDwvY29kZT4gdG8gPGNvZGU+ZnI2MzwvY29kZT4pLiAKK1JlZ2lzdGVyIG51bWJlcnMgbm90IGRpdmlzaWJsZSBieSA0IGFyZSBleGNsdWRlZCBub3QgaW4gdGhlIGNsYXNzIGJ1dCB0aHJvdWdoCit0aGUgdXNlIG9mIGEgbWFjaGluZSBtb2RlIGxhcmdlciB0aGFuIDggYnl0ZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPno8L2NvZGU+PGRkPlJlZ2lzdGVyIGluIHRoZSBjbGFzcyA8Y29kZT5TUFJfUkVHUzwvY29kZT4gKDxjb2RlPmxjcjwvY29kZT4gYW5kIDxjb2RlPmxyPC9jb2RlPikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkE8L2NvZGU+PGRkPlJlZ2lzdGVyIGluIHRoZSBjbGFzcyA8Y29kZT5RVUFEX0FDQ19SRUdTPC9jb2RlPiAoPGNvZGU+YWNjMDwvY29kZT4gdG8gPGNvZGU+YWNjNzwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5CPC9jb2RlPjxkZD5SZWdpc3RlciBpbiB0aGUgY2xhc3MgPGNvZGU+QUNDR19SRUdTPC9jb2RlPiAoPGNvZGU+YWNjZzA8L2NvZGU+IHRvIDxjb2RlPmFjY2c3PC9jb2RlPikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkM8L2NvZGU+PGRkPlJlZ2lzdGVyIGluIHRoZSBjbGFzcyA8Y29kZT5DUl9SRUdTPC9jb2RlPiAoPGNvZGU+Y2MwPC9jb2RlPiB0byA8Y29kZT5jYzc8L2NvZGU+KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+RzwvY29kZT48ZGQ+RmxvYXRpbmcgcG9pbnQgY29uc3RhbnQgemVybworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JPC9jb2RlPjxkZD42LWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD4xMC1iaXQgc2lnbmVkIGludGVnZXIgY29uc3RhbnQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TDwvY29kZT48ZGQ+MTYtYml0IHNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk08L2NvZGU+PGRkPjE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGNvbnN0YW50CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPjEyLWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudCB0aGF0IGlzIG5lZ2F0aXZlJm1kYXNoO2kuZS4gaW4gdGhlCityYW5nZSBvZiAmbWludXM7MjA0OCB0byAmbWludXM7MQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5Db25zdGFudCB6ZXJvCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlA8L2NvZGU+PGRkPjEyLWJpdCBzaWduZWQgaW50ZWdlciBjb25zdGFudCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvJm1kYXNoO2kuZS4gaW4gdGhlCityYW5nZSBvZiAxIHRvIDIwNDcuCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5CbGFja2ZpbiBmYW1pbHkmbWRhc2g7PC9lbT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlnL2JmaW4vY29uc3RyYWludHMubWQ8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+UCByZWdpc3RlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5kPC9jb2RlPjxkZD5EIHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPno8L2NvZGU+PGRkPkEgY2FsbCBjbG9iYmVyZWQgUCByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+cTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+QSBzaW5nbGUgcmVnaXN0ZXIuICBJZiA8dmFyPm48L3Zhcj4gaXMgaW4gdGhlIHJhbmdlIDAgdG8gNywgdGhlIGNvcnJlc3BvbmRpbmcgRAorcmVnaXN0ZXIuICBJZiBpdCBpcyA8Y29kZT5BPC9jb2RlPiwgdGhlbiB0aGUgcmVnaXN0ZXIgUDAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkQ8L2NvZGU+PGRkPkV2ZW4tbnVtYmVyZWQgRCByZWdpc3RlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5XPC9jb2RlPjxkZD5PZGQtbnVtYmVyZWQgRCByZWdpc3RlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5lPC9jb2RlPjxkZD5BY2N1bXVsYXRvciByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QTwvY29kZT48ZGQ+RXZlbi1udW1iZXJlZCBhY2N1bXVsYXRvciByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QjwvY29kZT48ZGQ+T2RkLW51bWJlcmVkIGFjY3VtdWxhdG9yIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5iPC9jb2RlPjxkZD5JIHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnY8L2NvZGU+PGRkPkIgcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZjwvY29kZT48ZGQ+TSByZWdpc3RlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5jPC9jb2RlPjxkZD5SZWdpc3RlcnMgdXNlZCBmb3IgY2lyY3VsYXIgYnVmZmVyaW5nLCBpLmUuIEksIEIsIG9yIEwgcmVnaXN0ZXJzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5DPC9jb2RlPjxkZD5UaGUgQ0MgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnQ8L2NvZGU+PGRkPkxUMCBvciBMVDEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPms8L2NvZGU+PGRkPkxDMCBvciBMQzEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnU8L2NvZGU+PGRkPkxCMCBvciBMQjEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPkFueSBELCBQLCBCLCBNLCBJIG9yIEwgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnk8L2NvZGU+PGRkPkFkZGl0aW9uYWwgcmVnaXN0ZXJzIHR5cGljYWxseSB1c2VkIG9ubHkgaW4gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXM6IFJFVFMsCitSRVROLCBSRVRJLCBSRVRYLCBSRVRFLCBBU1RBVCwgU0VRU1RBVCBhbmQgVVNQLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT53PC9jb2RlPjxkZD5BbnkgcmVnaXN0ZXIgZXhjZXB0IGFjY3VtdWxhdG9ycyBvciBDQy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+S3NoPC9jb2RlPjxkZD5TaWduZWQgMTYgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAmbWludXM7MzI3NjggdG8gMzI3NjcpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkt1aDwvY29kZT48ZGQ+VW5zaWduZWQgMTYgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAwIHRvIDY1NTM1KQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5Lczc8L2NvZGU+PGRkPlNpZ25lZCA3IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgJm1pbnVzOzY0IHRvIDYzKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LdTc8L2NvZGU+PGRkPlVuc2lnbmVkIDcgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAwIHRvIDEyNykKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+S3U1PC9jb2RlPjxkZD5VbnNpZ25lZCA1IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgMCB0byAzMSkKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+S3M0PC9jb2RlPjxkZD5TaWduZWQgNCBiaXQgaW50ZWdlciAoaW4gdGhlIHJhbmdlICZtaW51czs4IHRvIDcpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPktzMzwvY29kZT48ZGQ+U2lnbmVkIDMgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAmbWludXM7MyB0byA0KQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LdTM8L2NvZGU+PGRkPlVuc2lnbmVkIDMgYml0IGludGVnZXIgKGluIHRoZSByYW5nZSAwIHRvIDcpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlA8L2NvZGU+PHZhcj5uPC92YXI+PGRkPkNvbnN0YW50IDx2YXI+bjwvdmFyPiwgd2hlcmUgPHZhcj5uPC92YXI+IGlzIGEgc2luZ2xlLWRpZ2l0IGNvbnN0YW50IGluIHRoZSByYW5nZSAwIHRvIDQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlBBPC9jb2RlPjxkZD5BbiBpbnRlZ2VyIGVxdWFsIHRvIG9uZSBvZiB0aGUgTUFDRkxBR19YWFggY29uc3RhbnRzIHRoYXQgaXMgc3VpdGFibGUgZm9yCit1c2Ugd2l0aCBlaXRoZXIgYWNjdW11bGF0b3IuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlBCPC9jb2RlPjxkZD5BbiBpbnRlZ2VyIGVxdWFsIHRvIG9uZSBvZiB0aGUgTUFDRkxBR19YWFggY29uc3RhbnRzIHRoYXQgaXMgc3VpdGFibGUgZm9yCit1c2Ugb25seSB3aXRoIGFjY3VtdWxhdG9yIEExLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NMTwvY29kZT48ZGQ+Q29uc3RhbnQgMjU1LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NMjwvY29kZT48ZGQ+Q29uc3RhbnQgNjU1MzUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPko8L2NvZGU+PGRkPkFuIGludGVnZXIgY29uc3RhbnQgd2l0aCBleGFjdGx5IGEgc2luZ2xlIGJpdCBzZXQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPkFuIGludGVnZXIgY29uc3RhbnQgd2l0aCBhbGwgYml0cyBzZXQgZXhjZXB0IGV4YWN0bHkgb25lLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5IPC9jb2RlPgorPGJyPjxkdD48Y29kZT5RPC9jb2RlPjxkZD5BbnkgU1lNQk9MX1JFRi4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPk0zMkMmbWRhc2g7PC9lbT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlnL20zMmMvbTMyYy5jPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPlJzcDwvY29kZT48ZHQ+PGNvZGU+UmZiPC9jb2RlPjxkdD48Y29kZT5Sc2I8L2NvZGU+PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JHNwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiRmYjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kc2I8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlJjcjwvY29kZT48ZGQ+QW55IGNvbnRyb2wgcmVnaXN0ZXIsIHdoZW4gdGhleSdyZSAxNiBiaXRzIHdpZGUgKG5vdGhpbmcgaWYgY29udHJvbAorcmVnaXN0ZXJzIGFyZSAyNCBiaXRzIHdpZGUpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlJjbDwvY29kZT48ZGQ+QW55IGNvbnRyb2wgcmVnaXN0ZXIsIHdoZW4gdGhleSdyZSAyNCBiaXRzIHdpZGUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlIwdzwvY29kZT48ZHQ+PGNvZGU+UjF3PC9jb2RlPjxkdD48Y29kZT5SMnc8L2NvZGU+PGR0Pjxjb2RlPlIzdzwvY29kZT48ZGQ+JHIwLCAkcjEsICRyMiwgJHIzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SMDI8L2NvZGU+PGRkPiRyMCBvciAkcjIsIG9yICRyMnIwIGZvciAzMiBiaXQgdmFsdWVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SMTM8L2NvZGU+PGRkPiRyMSBvciAkcjMsIG9yICRyM3IxIGZvciAzMiBiaXQgdmFsdWVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SZGk8L2NvZGU+PGRkPkEgcmVnaXN0ZXIgdGhhdCBjYW4gaG9sZCBhIDY0IGJpdCB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UmhsPC9jb2RlPjxkZD4kcjAgb3IgJHIxIChyZWdpc3RlcnMgd2l0aCBhZGRyZXNzYWJsZSBoaWdoL2xvdyBieXRlcykKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UjIzPC9jb2RlPjxkZD4kcjIgb3IgJHIzCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlJhYTwvY29kZT48ZGQ+QWRkcmVzcyByZWdpc3RlcnMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UmF3PC9jb2RlPjxkZD5BZGRyZXNzIHJlZ2lzdGVycyB3aGVuIHRoZXkncmUgMTYgYml0cyB3aWRlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SYWw8L2NvZGU+PGRkPkFkZHJlc3MgcmVnaXN0ZXJzIHdoZW4gdGhleSdyZSAyNCBiaXRzIHdpZGUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlJxaTwvY29kZT48ZGQ+UmVnaXN0ZXJzIHRoYXQgY2FuIGhvbGQgUUkgdmFsdWVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SYWQ8L2NvZGU+PGRkPlJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggZGlzcGxhY2VtZW50cyAoJGEwLCAkYTEsICRzYikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlJzaTwvY29kZT48ZGQ+UmVnaXN0ZXJzIHRoYXQgY2FuIGhvbGQgMzIgYml0IHZhbHVlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UmhpPC9jb2RlPjxkZD5SZWdpc3RlcnMgdGhhdCBjYW4gaG9sZCAxNiBiaXQgdmFsdWVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SaGM8L2NvZGU+PGRkPlJlZ2lzdGVycyBjaGF0IGNhbiBob2xkIDE2IGJpdCB2YWx1ZXMsIGluY2x1ZGluZyBhbGwgY29udHJvbAorcmVnaXN0ZXJzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ScmE8L2NvZGU+PGRkPiRyMCB0aHJvdWdoIFIxLCBwbHVzICRhMCBhbmQgJGExLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SZmw8L2NvZGU+PGRkPlRoZSBmbGFncyByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Um1tPC9jb2RlPjxkZD5UaGUgbWVtb3J5LWJhc2VkIHBzZXVkby1yZWdpc3RlcnMgJG1lbTAgdGhyb3VnaCAkbWVtMTUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlJwaTwvY29kZT48ZGQ+UmVnaXN0ZXJzIHRoYXQgY2FuIGhvbGQgcG9pbnRlcnMgKDE2IGJpdCByZWdpc3RlcnMgZm9yIHI4YywgbTE2YzsgMjQKK2JpdCByZWdpc3RlcnMgZm9yIG0zMmNtLCBtMzJjKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UnBhPC9jb2RlPjxkZD5NYXRjaGVzIG11bHRpcGxlIHJlZ2lzdGVycyBpbiBhIFBBUkFMTEVMIHRvIGZvcm0gYSBsYXJnZXIgcmVnaXN0ZXIuIAorVXNlZCB0byBtYXRjaCBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JczM8L2NvZGU+PGRkPiZtaW51czs4IDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gNworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JUzE8L2NvZGU+PGRkPiZtaW51czsxMjggPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAxMjcKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SVMyPC9jb2RlPjxkZD4mbWludXM7MzI3NjggPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAzMjc2NworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JVTI8L2NvZGU+PGRkPjAgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiA2NTUzNQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JbjQ8L2NvZGU+PGRkPiZtaW51czs4IDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gJm1pbnVzOzEgb3IgMSA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IDgKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SW41PC9jb2RlPjxkZD4mbWludXM7MTYgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAmbWludXM7MSBvciAxIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gMTYKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SW42PC9jb2RlPjxkZD4mbWludXM7MzIgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAmbWludXM7MSBvciAxIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gMzIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SU0yPC9jb2RlPjxkZD4mbWludXM7NjU1MzYgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAmbWludXM7MQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JbGI8L2NvZGU+PGRkPkFuIDggYml0IHZhbHVlIHdpdGggZXhhY3RseSBvbmUgYml0IHNldC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SWx3PC9jb2RlPjxkZD5BIDE2IGJpdCB2YWx1ZSB3aXRoIGV4YWN0bHkgb25lIGJpdCBzZXQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlNkPC9jb2RlPjxkZD5UaGUgY29tbW9uIHNyYy9kZXN0IG1lbW9yeSBhZGRyZXNzaW5nIG1vZGVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TYTwvY29kZT48ZGQ+TWVtb3J5IGFkZHJlc3NlZCB1c2luZyAkYTAgb3IgJGExLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TaTwvY29kZT48ZGQ+TWVtb3J5IGFkZHJlc3NlZCB3aXRoIGltbWVkaWF0ZSBhZGRyZXNzZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlNzPC9jb2RlPjxkZD5NZW1vcnkgYWRkcmVzc2VkIHVzaW5nIHRoZSBzdGFjayBwb2ludGVyICgkc3ApLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TZjwvY29kZT48ZGQ+TWVtb3J5IGFkZHJlc3NlZCB1c2luZyB0aGUgZnJhbWUgYmFzZSByZWdpc3RlciAoJGZiKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+U3M8L2NvZGU+PGRkPk1lbW9yeSBhZGRyZXNzZWQgdXNpbmcgdGhlIHNtYWxsIGJhc2UgcmVnaXN0ZXIgKCRzYikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlMxPC9jb2RlPjxkZD4kcjFoCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPk1lUCZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvbWVwL2NvbnN0cmFpbnRzLm1kPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmE8L2NvZGU+PGRkPlRoZSAkc3AgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmI8L2NvZGU+PGRkPlRoZSAkdHAgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmM8L2NvZGU+PGRkPkFueSBjb250cm9sIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5kPC9jb2RlPjxkZD5FaXRoZXIgdGhlICRoaSBvciB0aGUgJGxvIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5lbTwvY29kZT48ZGQ+Q29wcm9jZXNzb3IgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGxvYWRlZCAoJGMwLSRjMTUpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5leDwvY29kZT48ZGQ+Q29wcm9jZXNzb3IgcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIG1vdmVkIHRvIGVhY2ggb3RoZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmVyPC9jb2RlPjxkZD5Db3Byb2Nlc3NvciByZWdpc3RlcnMgdGhhdCBjYW4gYmUgbW92ZWQgdG8gY29yZSByZWdpc3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmg8L2NvZGU+PGRkPlRoZSAkaGkgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmo8L2NvZGU+PGRkPlRoZSAkcnBjIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sPC9jb2RlPjxkZD5UaGUgJGxvIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT50PC9jb2RlPjxkZD5SZWdpc3RlcnMgd2hpY2ggY2FuIGJlIHVzZWQgaW4gJHRwLXJlbGF0aXZlIGFkZHJlc3NpbmcuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnY8L2NvZGU+PGRkPlRoZSAkZ3AgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPlRoZSBjb3Byb2Nlc3NvciByZWdpc3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnk8L2NvZGU+PGRkPlRoZSBjb3Byb2Nlc3NvciBjb250cm9sIHJlZ2lzdGVycy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ejwvY29kZT48ZGQ+VGhlICQwIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5BPC9jb2RlPjxkZD5Vc2VyLWRlZmluZWQgcmVnaXN0ZXIgc2V0IEEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkI8L2NvZGU+PGRkPlVzZXItZGVmaW5lZCByZWdpc3RlciBzZXQgQi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QzwvY29kZT48ZGQ+VXNlci1kZWZpbmVkIHJlZ2lzdGVyIHNldCBDLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5EPC9jb2RlPjxkZD5Vc2VyLWRlZmluZWQgcmVnaXN0ZXIgc2V0IEQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPk9mZnNldHMgZm9yICRncC1yZWwgYWRkcmVzc2luZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SjwvY29kZT48ZGQ+Q29uc3RhbnRzIHRoYXQgY2FuIGJlIHVzZWQgZGlyZWN0bHkgd2l0aCBib29sZWFuIGluc25zLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD5Db25zdGFudHMgdGhhdCBjYW4gYmUgbW92ZWQgZGlyZWN0bHkgdG8gcmVnaXN0ZXJzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5TbWFsbCBjb25zdGFudHMgdGhhdCBjYW4gYmUgYWRkZWQgdG8gcmVnaXN0ZXJzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5Mb25nIHNoaWZ0IGNvdW50cy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+U21hbGwgY29uc3RhbnRzIHRoYXQgY2FuIGJlIGNvbXBhcmVkIHRvIHJlZ2lzdGVycy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TzwvY29kZT48ZGQ+Q29uc3RhbnRzIHRoYXQgY2FuIGJlIGxvYWRlZCBpbnRvIHRoZSB0b3AgaGFsZiBvZiByZWdpc3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlM8L2NvZGU+PGRkPlNpZ25lZCA4LWJpdCBpbW1lZGlhdGVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5UPC9jb2RlPjxkZD5TeW1ib2xzIGVuY29kZWQgZm9yICR0cC1yZWwgb3IgJGdwLXJlbCBhZGRyZXNzaW5nLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5VPC9jb2RlPjxkZD5Ob24tY29uc3RhbnQgYWRkcmVzc2VzIGZvciBsb2FkaW5nL3NhdmluZyBjb3Byb2Nlc3NvciByZWdpc3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlc8L2NvZGU+PGRkPlRoZSB0b3AgaGFsZiBvZiBhIHN5bWJvbCdzIHZhbHVlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ZPC9jb2RlPjxkZD5BIHJlZ2lzdGVyIGluZGlyZWN0IGFkZHJlc3Mgd2l0aG91dCBvZmZzZXQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlo8L2NvZGU+PGRkPlN5bWJvbGljIHJlZmVyZW5jZXMgdG8gdGhlIGNvbnRyb2wgYnVzLgorCisgICAgIDwvZGw+CisKKyAgICAgPGJyPjxkdD48ZW0+TWljcm9CbGF6ZSZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvbWljcm9ibGF6ZS9jb25zdHJhaW50cy5tZDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5kPC9jb2RlPjxkZD5BIGdlbmVyYWwgcmVnaXN0ZXIgKDxjb2RlPnIwPC9jb2RlPiB0byA8Y29kZT5yMzE8L2NvZGU+KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ejwvY29kZT48ZGQ+QSBzdGF0dXMgcmVnaXN0ZXIgKDxjb2RlPnJtc3I8L2NvZGU+LCA8Y29kZT4kZmNjMTwvY29kZT4gdG8gPGNvZGU+JGZjYzc8L2NvZGU+KS4KKworICAgICA8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPk1JUFMmbWRhc2g7PC9lbT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlnL21pcHMvY29uc3RyYWludHMubWQ8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+QW4gYWRkcmVzcyByZWdpc3Rlci4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byA8Y29kZT5yPC9jb2RlPiB1bmxlc3MKK2dlbmVyYXRpbmcgTUlQUzE2IGNvZGUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmY8L2NvZGU+PGRkPkEgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgKGlmIGF2YWlsYWJsZSkuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmg8L2NvZGU+PGRkPkZvcm1lcmx5IHRoZSA8Y29kZT5oaTwvY29kZT4gcmVnaXN0ZXIuICBUaGlzIGNvbnN0cmFpbnQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bDwvY29kZT48ZGQ+VGhlIDxjb2RlPmxvPC9jb2RlPiByZWdpc3Rlci4gIFVzZSB0aGlzIHJlZ2lzdGVyIHRvIHN0b3JlIHZhbHVlcyB0aGF0IGFyZQorbm8gYmlnZ2VyIHRoYW4gYSB3b3JkLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT54PC9jb2RlPjxkZD5UaGUgY29uY2F0ZW5hdGVkIDxjb2RlPmhpPC9jb2RlPiBhbmQgPGNvZGU+bG88L2NvZGU+IHJlZ2lzdGVycy4gIFVzZSB0aGlzIHJlZ2lzdGVyCit0byBzdG9yZSBkb3VibGV3b3JkIHZhbHVlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+QSByZWdpc3RlciBzdWl0YWJsZSBmb3IgdXNlIGluIGFuIGluZGlyZWN0IGp1bXAuICBUaGlzIHdpbGwgYWx3YXlzIGJlCis8Y29kZT4kMjU8L2NvZGU+IGZvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFiaWNhbGxzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnY8L2NvZGU+PGRkPlJlZ2lzdGVyIDxjb2RlPiQzPC9jb2RlPi4gIERvIG5vdCB1c2UgdGhpcyBjb25zdHJhaW50IGluIG5ldyBjb2RlOworaXQgaXMgcmV0YWluZWQgb25seSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGdsaWJjLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT55PC9jb2RlPjxkZD5FcXVpdmFsZW50IHRvIDxjb2RlPnI8L2NvZGU+OyByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPno8L2NvZGU+PGRkPkEgZmxvYXRpbmctcG9pbnQgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPkEgc2lnbmVkIDE2LWJpdCBjb25zdGFudCAoZm9yIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SjwvY29kZT48ZGQ+SW50ZWdlciB6ZXJvLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD5BbiB1bnNpZ25lZCAxNi1iaXQgY29uc3RhbnQgKGZvciBsb2dpYyBpbnN0cnVjdGlvbnMpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5BIHNpZ25lZCAzMi1iaXQgY29uc3RhbnQgaW4gd2hpY2ggdGhlIGxvd2VyIDE2IGJpdHMgYXJlIHplcm8uIAorU3VjaCBjb25zdGFudHMgY2FuIGJlIGxvYWRlZCB1c2luZyA8Y29kZT5sdWk8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5BIGNvbnN0YW50IHRoYXQgY2Fubm90IGJlIGxvYWRlZCB1c2luZyA8Y29kZT5sdWk8L2NvZGU+LCA8Y29kZT5hZGRpdTwvY29kZT4KK29yIDxjb2RlPm9yaTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPkEgY29uc3RhbnQgaW4gdGhlIHJhbmdlICZtaW51czs2NTUzNSB0byAmbWludXM7MSAoaW5jbHVzaXZlKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TzwvY29kZT48ZGQ+QSBzaWduZWQgMTUtYml0IGNvbnN0YW50LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5QPC9jb2RlPjxkZD5BIGNvbnN0YW50IGluIHRoZSByYW5nZSAxIHRvIDY1NTM1IChpbmNsdXNpdmUpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5HPC9jb2RlPjxkZD5GbG9hdGluZy1wb2ludCB6ZXJvLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SPC9jb2RlPjxkZD5BbiBhZGRyZXNzIHRoYXQgY2FuIGJlIHVzZWQgaW4gYSBub24tbWFjcm8gbG9hZCBvciBzdG9yZS4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPk1vdG9yb2xhIDY4MHgwJm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy9tNjhrL2NvbnN0cmFpbnRzLm1kPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmE8L2NvZGU+PGRkPkFkZHJlc3MgcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+RGF0YSByZWdpc3RlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5mPC9jb2RlPjxkZD42ODg4MSBmbG9hdGluZy1wb2ludCByZWdpc3RlciwgaWYgYXZhaWxhYmxlCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPkludGVnZXIgaW4gdGhlIHJhbmdlIDEgdG8gOAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD4xNi1iaXQgc2lnbmVkIG51bWJlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD5TaWduZWQgbnVtYmVyIHdob3NlIG1hZ25pdHVkZSBpcyBncmVhdGVyIHRoYW4gMHg4MAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5JbnRlZ2VyIGluIHRoZSByYW5nZSAmbWludXM7OCB0byAmbWludXM7MQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5TaWduZWQgbnVtYmVyIHdob3NlIG1hZ25pdHVkZSBpcyBncmVhdGVyIHRoYW4gMHgxMDAKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+UmFuZ2UgMjQgdG8gMzEsIHJvdGF0ZXJ0OlNJIDggdG8gMSBleHByZXNzZWQgYXMgcm90YXRlCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk88L2NvZGU+PGRkPjE2IChmb3Igcm90YXRlIHVzaW5nIHN3YXApCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlA8L2NvZGU+PGRkPlJhbmdlIDggdG8gMTUsIHJvdGF0ZXJ0OkhJIDggdG8gMSBleHByZXNzZWQgYXMgcm90YXRlCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlI8L2NvZGU+PGRkPk51bWJlcnMgdGhhdCBtb3YzcSBjYW4gaGFuZGxlCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkc8L2NvZGU+PGRkPkZsb2F0aW5nIHBvaW50IGNvbnN0YW50IHRoYXQgaXMgbm90IGEgNjg4ODEgY29uc3RhbnQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UzwvY29kZT48ZGQ+T3BlcmFuZHMgdGhhdCBzYXRpc2Z5ICdtJyB3aGVuIC1tcGNyZWwgaXMgaW4gZWZmZWN0CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlQ8L2NvZGU+PGRkPk9wZXJhbmRzIHRoYXQgc2F0aXNmeSAncycgd2hlbiAtbXBjcmVsIGlzIG5vdCBpbiBlZmZlY3QKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UTwvY29kZT48ZGQ+QWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCBhZGRyZXNzaW5nIG1vZGUKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VTwvY29kZT48ZGQ+UmVnaXN0ZXIgb2Zmc2V0IGFkZHJlc3NpbmcKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VzwvY29kZT48ZGQ+Y29uc3RfY2FsbF9vcGVyYW5kCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkNzPC9jb2RlPjxkZD5zeW1ib2xfcmVmIG9yIGNvbnN0CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkNpPC9jb2RlPjxkZD5jb25zdF9pbnQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QzA8L2NvZGU+PGRkPmNvbnN0X2ludCAwCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkNqPC9jb2RlPjxkZD5SYW5nZSBvZiBzaWduZWQgbnVtYmVycyB0aGF0IGRvbid0IGZpdCBpbiAxNiBiaXRzCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkNtdnE8L2NvZGU+PGRkPkludGVnZXJzIHZhbGlkIGZvciBtdnEKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Q2Fwc3c8L2NvZGU+PGRkPkludGVnZXJzIHZhbGlkIGZvciBhIG1vdmVxIGZvbGxvd2VkIGJ5IGEgc3dhcAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5DbXZ6PC9jb2RlPjxkZD5JbnRlZ2VycyB2YWxpZCBmb3IgbXZ6CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkNtdnM8L2NvZGU+PGRkPkludGVnZXJzIHZhbGlkIGZvciBtdnMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QXA8L2NvZGU+PGRkPnB1c2hfb3BlcmFuZAorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5BYzwvY29kZT48ZGQ+Tm9uLXJlZ2lzdGVyIG9wZXJhbmRzIGFsbG93ZWQgaW4gY2xyCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5Nb3hpZSZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvbW94aWUvY29uc3RyYWludHMubWQ8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+QTwvY29kZT48ZGQ+QW4gYWJzb2x1dGUgYWRkcmVzcworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5CPC9jb2RlPjxkZD5BbiBvZmZzZXQgYWRkcmVzcworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5XPC9jb2RlPjxkZD5BIHJlZ2lzdGVyIGluZGlyZWN0IG1lbW9yeSBvcGVyYW5kCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPkEgY29uc3RhbnQgaW4gdGhlIHJhbmdlIG9mIDAgdG8gMjU1LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5OPC9jb2RlPjxkZD5BIGNvbnN0YW50IGluIHRoZSByYW5nZSBvZiAwIHRvICZtaW51czsyNTUuCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5QRFAtMTEmbWRhc2g7PC9lbT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlnL3BkcDExL2NvbnN0cmFpbnRzLm1kPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmE8L2NvZGU+PGRkPkZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBBQzAgdGhyb3VnaCBBQzMuICBUaGVzZSBjYW4gYmUgbG9hZGVkIGZyb20vdG8KK21lbW9yeSB3aXRoIGEgc2luZ2xlIGluc3RydWN0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5kPC9jb2RlPjxkZD5PZGQgbnVtYmVyZWQgZ2VuZXJhbCByZWdpc3RlcnMgKFIxLCBSMywgUjUpLiAgVGhlc2UgYXJlIHVzZWQgZm9yCisxNi1iaXQgbXVsdGlwbHkgb3BlcmF0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZjwvY29kZT48ZGQ+QW55IG9mIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKEFDMCB0aHJvdWdoIEFDNSkuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkc8L2NvZGU+PGRkPkZsb2F0aW5nIHBvaW50IGNvbnN0YW50IDAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPkFuIGludGVnZXIgY29uc3RhbnQgdGhhdCBmaXRzIGluIDE2IGJpdHMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPko8L2NvZGU+PGRkPkFuIGludGVnZXIgY29uc3RhbnQgd2hvc2UgbG93IG9yZGVyIDE2IGJpdHMgYXJlIHplcm8uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPks8L2NvZGU+PGRkPkFuIGludGVnZXIgY29uc3RhbnQgdGhhdCBkb2VzIG5vdCBtZWV0IHRoZSBjb25zdHJhaW50cyBmb3IgY29kZXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+STwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPko8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPlRoZSBpbnRlZ2VyIGNvbnN0YW50IDEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk08L2NvZGU+PGRkPlRoZSBpbnRlZ2VyIGNvbnN0YW50ICZtaW51czsxLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5OPC9jb2RlPjxkZD5UaGUgaW50ZWdlciBjb25zdGFudCAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50cyAmbWludXM7NCB0aHJvdWdoICZtaW51czsxIGFuZCAxIHRocm91Z2ggNDsgc2hpZnRzIGJ5IHRoZXNlCithbW91bnRzIGFyZSBoYW5kbGVkIGFzIG11bHRpcGxlIHNpbmdsZS1iaXQgc2hpZnRzIHJhdGhlciB0aGFuIGEgc2luZ2xlCit2YXJpYWJsZS1sZW5ndGggc2hpZnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlE8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSB3aGljaCByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIHdvcmQgKGFkZHJlc3Mgb3IKK29mZnNldCkgYWZ0ZXIgdGhlIG9wY29kZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UjwvY29kZT48ZGQ+QSBtZW1vcnkgcmVmZXJlbmNlIHRoYXQgaXMgZW5jb2RlZCB3aXRoaW4gdGhlIG9wY29kZS4KKworICAgICA8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPlJMNzgmbWRhc2g7PC9lbT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlnL3JsNzgvY29uc3RyYWludHMubWQ8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+SW50MzwvY29kZT48ZGQ+QW4gaW50ZWdlciBjb25zdGFudCBpbiB0aGUgcmFuZ2UgMSA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IDcuIAorPGJyPjxkdD48Y29kZT5JbnQ4PC9jb2RlPjxkZD5BbiBpbnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSAwIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gMjU1LiAKKzxicj48ZHQ+PGNvZGU+SjwvY29kZT48ZGQ+QW4gaW50ZWdlciBjb25zdGFudCBpbiB0aGUgcmFuZ2UgJm1pbnVzOzI1NSA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IDAKKzxicj48ZHQ+PGNvZGU+SzwvY29kZT48ZGQ+VGhlIGludGVnZXIgY29uc3RhbnQgMS4gCis8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPlRoZSBpbnRlZ2VyIGNvbnN0YW50IC0xLiAKKzxicj48ZHQ+PGNvZGU+TTwvY29kZT48ZGQ+VGhlIGludGVnZXIgY29uc3RhbnQgMC4gCis8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPlRoZSBpbnRlZ2VyIGNvbnN0YW50IDIuIAorPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5UaGUgaW50ZWdlciBjb25zdGFudCAtMi4gCis8YnI+PGR0Pjxjb2RlPlA8L2NvZGU+PGRkPkFuIGludGVnZXIgY29uc3RhbnQgaW4gdGhlIHJhbmdlIDEgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAxNS4gCis8YnI+PGR0Pjxjb2RlPlFiaTwvY29kZT48ZGQ+VGhlIGJ1aWx0LWluIGNvbXBhcmUgdHlwZXMmbmRhc2g7ZXEsIG5lLCBndHUsIGx0dSwgZ2V1LCBhbmQgbGV1LiAKKzxicj48ZHQ+PGNvZGU+UXNjPC9jb2RlPjxkZD5UaGUgc3ludGhldGljIGNvbXBhcmUgdHlwZXMmbmRhc2g7Z3QsIGx0LCBnZSwgYW5kIGxlLiAKKzxicj48ZHQ+PGNvZGU+V2FiPC9jb2RlPjxkZD5BIG1lbW9yeSByZWZlcmVuY2Ugd2l0aCBhbiBhYnNvbHV0ZSBhZGRyZXNzLiAKKzxicj48ZHQ+PGNvZGU+V2JjPC9jb2RlPjxkZD5BIG1lbW9yeSByZWZlcmVuY2UgdXNpbmcgPGNvZGU+QkM8L2NvZGU+IGFzIGEgYmFzZSByZWdpc3Rlciwgd2l0aCBhbiBvcHRpb25hbCBvZmZzZXQuIAorPGJyPjxkdD48Y29kZT5XY2E8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSB1c2luZyA8Y29kZT5BWDwvY29kZT4sIDxjb2RlPkJDPC9jb2RlPiwgPGNvZGU+REU8L2NvZGU+LCBvciA8Y29kZT5ITDwvY29kZT4gZm9yIHRoZSBhZGRyZXNzLCBmb3IgY2FsbHMuIAorPGJyPjxkdD48Y29kZT5XY3Y8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSB1c2luZyBhbnkgMTYtYml0IHJlZ2lzdGVyIHBhaXIgZm9yIHRoZSBhZGRyZXNzLCBmb3IgY2FsbHMuIAorPGJyPjxkdD48Y29kZT5XZDI8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSB1c2luZyA8Y29kZT5ERTwvY29kZT4gYXMgYSBiYXNlIHJlZ2lzdGVyLCB3aXRoIGFuIG9wdGlvbmFsIG9mZnNldC4gCis8YnI+PGR0Pjxjb2RlPldkZTwvY29kZT48ZGQ+QSBtZW1vcnkgcmVmZXJlbmNlIHVzaW5nIDxjb2RlPkRFPC9jb2RlPiBhcyBhIGJhc2UgcmVnaXN0ZXIsIHdpdGhvdXQgYW55IG9mZnNldC4gCis8YnI+PGR0Pjxjb2RlPldmcjwvY29kZT48ZGQ+QW55IG1lbW9yeSByZWZlcmVuY2UgdG8gYW4gYWRkcmVzcyBpbiB0aGUgZmFyIGFkZHJlc3Mgc3BhY2UuIAorPGJyPjxkdD48Y29kZT5XaDE8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSB1c2luZyA8Y29kZT5ITDwvY29kZT4gYXMgYSBiYXNlIHJlZ2lzdGVyLCB3aXRoIGFuIG9wdGlvbmFsIG9uZS1ieXRlIG9mZnNldC4gCis8YnI+PGR0Pjxjb2RlPldoYjwvY29kZT48ZGQ+QSBtZW1vcnkgcmVmZXJlbmNlIHVzaW5nIDxjb2RlPkhMPC9jb2RlPiBhcyBhIGJhc2UgcmVnaXN0ZXIsIHdpdGggPGNvZGU+QjwvY29kZT4gb3IgPGNvZGU+QzwvY29kZT4gYXMgdGhlIGluZGV4IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+V2hsPC9jb2RlPjxkZD5BIG1lbW9yeSByZWZlcmVuY2UgdXNpbmcgPGNvZGU+SEw8L2NvZGU+IGFzIGEgYmFzZSByZWdpc3Rlciwgd2l0aG91dCBhbnkgb2Zmc2V0LiAKKzxicj48ZHQ+PGNvZGU+V3MxPC9jb2RlPjxkZD5BIG1lbW9yeSByZWZlcmVuY2UgdXNpbmcgPGNvZGU+U1A8L2NvZGU+IGFzIGEgYmFzZSByZWdpc3Rlciwgd2l0aCBhbiBvcHRpb25hbCBvbmUtYnl0ZSBvZmZzZXQuIAorPGJyPjxkdD48Y29kZT5ZPC9jb2RlPjxkZD5BbnkgbWVtb3J5IHJlZmVyZW5jZSB0byBhbiBhZGRyZXNzIGluIHRoZSBuZWFyIGFkZHJlc3Mgc3BhY2UuIAorPGJyPjxkdD48Y29kZT5BPC9jb2RlPjxkZD5UaGUgPGNvZGU+QVg8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+QjwvY29kZT48ZGQ+VGhlIDxjb2RlPkJDPC9jb2RlPiByZWdpc3Rlci4gCis8YnI+PGR0Pjxjb2RlPkQ8L2NvZGU+PGRkPlRoZSA8Y29kZT5ERTwvY29kZT4gcmVnaXN0ZXIuIAorPGJyPjxkdD48Y29kZT5SPC9jb2RlPjxkZD48Y29kZT5BPC9jb2RlPiB0aHJvdWdoIDxjb2RlPkw8L2NvZGU+IHJlZ2lzdGVycy4gCis8YnI+PGR0Pjxjb2RlPlM8L2NvZGU+PGRkPlRoZSA8Y29kZT5TUDwvY29kZT4gcmVnaXN0ZXIuIAorPGJyPjxkdD48Y29kZT5UPC9jb2RlPjxkZD5UaGUgPGNvZGU+SEw8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+WjA4VzwvY29kZT48ZGQ+VGhlIDE2LWJpdCA8Y29kZT5SODwvY29kZT4gcmVnaXN0ZXIuIAorPGJyPjxkdD48Y29kZT5aMTBXPC9jb2RlPjxkZD5UaGUgMTYtYml0IDxjb2RlPlIxMDwvY29kZT4gcmVnaXN0ZXIuIAorPGJyPjxkdD48Y29kZT5aaW50PC9jb2RlPjxkZD5UaGUgcmVnaXN0ZXJzIHJlc2VydmVkIGZvciBpbnRlcnJ1cHRzICg8Y29kZT5SMjQ8L2NvZGU+IHRvIDxjb2RlPlIzMTwvY29kZT4pLiAKKzxicj48ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+VGhlIDxjb2RlPkE8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+YjwvY29kZT48ZGQ+VGhlIDxjb2RlPkI8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+VGhlIDxjb2RlPkM8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+VGhlIDxjb2RlPkQ8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+ZTwvY29kZT48ZGQ+VGhlIDxjb2RlPkU8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+aDwvY29kZT48ZGQ+VGhlIDxjb2RlPkg8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+bDwvY29kZT48ZGQ+VGhlIDxjb2RlPkw8L2NvZGU+IHJlZ2lzdGVyLiAKKzxicj48ZHQ+PGNvZGU+djwvY29kZT48ZGQ+VGhlIHZpcnR1YWwgcmVnaXN0ZXJzLiAKKzxicj48ZHQ+PGNvZGU+dzwvY29kZT48ZGQ+VGhlIDxjb2RlPlBTVzwvY29kZT4gcmVnaXN0ZXIuIAorPGJyPjxkdD48Y29kZT54PC9jb2RlPjxkZD5UaGUgPGNvZGU+WDwvY29kZT4gcmVnaXN0ZXIuCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5SWCZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvcngvY29uc3RyYWludHMubWQ8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+UTwvY29kZT48ZGQ+QW4gYWRkcmVzcyB3aGljaCBkb2VzIG5vdCBpbnZvbHZlIHJlZ2lzdGVyIGluZGlyZWN0IGFkZHJlc3Npbmcgb3IKK3ByZS9wb3N0IGluY3JlbWVudC9kZWNyZW1lbnQgYWRkcmVzc2luZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+U3ltYm9sPC9jb2RlPjxkZD5BIHN5bWJvbCByZWZlcmVuY2UuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkludDA4PC9jb2RlPjxkZD5BIGNvbnN0YW50IGluIHRoZSByYW5nZSAmbWludXM7MjU2IHRvIDI1NSwgaW5jbHVzaXZlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TaW50MDg8L2NvZGU+PGRkPkEgY29uc3RhbnQgaW4gdGhlIHJhbmdlICZtaW51czsxMjggdG8gMTI3LCBpbmNsdXNpdmUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlNpbnQxNjwvY29kZT48ZGQ+QSBjb25zdGFudCBpbiB0aGUgcmFuZ2UgJm1pbnVzOzMyNzY4IHRvIDMyNzY3LCBpbmNsdXNpdmUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlNpbnQyNDwvY29kZT48ZGQ+QSBjb25zdGFudCBpbiB0aGUgcmFuZ2UgJm1pbnVzOzgzODg2MDggdG8gODM4ODYwNywgaW5jbHVzaXZlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5VaW50MDQ8L2NvZGU+PGRkPkEgY29uc3RhbnQgaW4gdGhlIHJhbmdlIDAgdG8gMTUsIGluY2x1c2l2ZS4KKworICAgICA8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPlNQQVJDJm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy9zcGFyYy9zcGFyYy5oPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmY8L2NvZGU+PGRkPkZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIG9uIHRoZSBTUEFSQy1WOCBhcmNoaXRlY3R1cmUgYW5kCitsb3dlciBmbG9hdGluZy1wb2ludCByZWdpc3RlciBvbiB0aGUgU1BBUkMtVjkgYXJjaGl0ZWN0dXJlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5lPC9jb2RlPjxkZD5GbG9hdGluZy1wb2ludCByZWdpc3Rlci4gIEl0IGlzIGVxdWl2YWxlbnQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIHRoZQorU1BBUkMtVjggYXJjaGl0ZWN0dXJlIGFuZCBjb250YWlucyBib3RoIGxvd2VyIGFuZCB1cHBlcgorZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHRoZSBTUEFSQy1WOSBhcmNoaXRlY3R1cmUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmM8L2NvZGU+PGRkPkZsb2F0aW5nLXBvaW50IGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5kPC9jb2RlPjxkZD5Mb3dlciBmbG9hdGluZy1wb2ludCByZWdpc3Rlci4gIEl0IGlzIG9ubHkgdmFsaWQgb24gdGhlIFNQQVJDLVY5CithcmNoaXRlY3R1cmUgd2hlbiB0aGUgVmlzdWFsIEluc3RydWN0aW9uIFNldCBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmI8L2NvZGU+PGRkPkZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyLiAgSXQgaXMgb25seSB2YWxpZCBvbiB0aGUgU1BBUkMtVjkgYXJjaGl0ZWN0dXJlCit3aGVuIHRoZSBWaXN1YWwgSW5zdHJ1Y3Rpb24gU2V0IGlzIGF2YWlsYWJsZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+aDwvY29kZT48ZGQ+NjQtYml0IGdsb2JhbCBvciBvdXQgcmVnaXN0ZXIgZm9yIHRoZSBTUEFSQy1WOCsgYXJjaGl0ZWN0dXJlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5DPC9jb2RlPjxkZD5UaGUgY29uc3RhbnQgYWxsLW9uZXMsIGZvciBmbG9hdGluZy1wb2ludC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QTwvY29kZT48ZGQ+U2lnbmVkIDUtYml0IGNvbnN0YW50CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkQ8L2NvZGU+PGRkPkEgdmVjdG9yIGNvbnN0YW50CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPlNpZ25lZCAxMy1iaXQgY29uc3RhbnQKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SjwvY29kZT48ZGQ+WmVybworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD4zMi1iaXQgY29uc3RhbnQgd2l0aCB0aGUgbG93IDEyIGJpdHMgY2xlYXIgKGEgY29uc3RhbnQgdGhhdCBjYW4gYmUKK2xvYWRlZCB3aXRoIHRoZSA8Y29kZT5zZXRoaTwvY29kZT4gaW5zdHJ1Y3Rpb24pCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPkEgY29uc3RhbnQgaW4gdGhlIHJhbmdlIHN1cHBvcnRlZCBieSA8Y29kZT5tb3ZjYzwvY29kZT4gaW5zdHJ1Y3Rpb25zICgxMS1iaXQKK3NpZ25lZCBpbW1lZGlhdGUpCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk08L2NvZGU+PGRkPkEgY29uc3RhbnQgaW4gdGhlIHJhbmdlIHN1cHBvcnRlZCBieSA8Y29kZT5tb3ZyY2M8L2NvZGU+IGluc3RydWN0aW9ucyAoMTAtYml0CitzaWduZWQgaW1tZWRpYXRlKQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5OPC9jb2RlPjxkZD5TYW1lIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Szwvc3Bhbj48L3NhbXA+JnJzcXVvOywgZXhjZXB0IHRoYXQgaXQgdmVyaWZpZXMgdGhhdCBiaXRzIHRoYXQgYXJlIG5vdCBpbiB0aGUKK2xvd2VyIDMyLWJpdCByYW5nZSBhcmUgYWxsIHplcm8uICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPks8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yCittb2RlcyB3aWRlciB0aGFuIDxjb2RlPlNJbW9kZTwvY29kZT4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TzwvY29kZT48ZGQ+VGhlIGNvbnN0YW50IDQwOTYKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+RzwvY29kZT48ZGQ+RmxvYXRpbmctcG9pbnQgemVybworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5IPC9jb2RlPjxkZD5TaWduZWQgMTMtYml0IGNvbnN0YW50LCBzaWduLWV4dGVuZGVkIHRvIDMyIG9yIDY0IGJpdHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UDwvY29kZT48ZGQ+VGhlIGNvbnN0YW50IC0xCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlE8L2NvZGU+PGRkPkZsb2F0aW5nLXBvaW50IGNvbnN0YW50IHdob3NlIGludGVncmFsIHJlcHJlc2VudGF0aW9uIGNhbgorYmUgbW92ZWQgaW50byBhbiBpbnRlZ2VyIHJlZ2lzdGVyIHVzaW5nIGEgc2luZ2xlIHNldGhpCitpbnN0cnVjdGlvbgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SPC9jb2RlPjxkZD5GbG9hdGluZy1wb2ludCBjb25zdGFudCB3aG9zZSBpbnRlZ3JhbCByZXByZXNlbnRhdGlvbiBjYW4KK2JlIG1vdmVkIGludG8gYW4gaW50ZWdlciByZWdpc3RlciB1c2luZyBhIHNpbmdsZSBtb3YKK2luc3RydWN0aW9uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlM8L2NvZGU+PGRkPkZsb2F0aW5nLXBvaW50IGNvbnN0YW50IHdob3NlIGludGVncmFsIHJlcHJlc2VudGF0aW9uIGNhbgorYmUgbW92ZWQgaW50byBhbiBpbnRlZ2VyIHJlZ2lzdGVyIHVzaW5nIGEgaGlnaC9sb19zdW0KK2luc3RydWN0aW9uIHNlcXVlbmNlCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlQ8L2NvZGU+PGRkPk1lbW9yeSBhZGRyZXNzIGFsaWduZWQgdG8gYW4gOC1ieXRlIGJvdW5kYXJ5CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlU8L2NvZGU+PGRkPkV2ZW4gcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VzwvY29kZT48ZGQ+TWVtb3J5IGFkZHJlc3MgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb25zdHJhaW50IHJlZ2lzdGVycworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT53PC9jb2RlPjxkZD5NZW1vcnkgYWRkcmVzcyB3aXRoIG9ubHkgYSBiYXNlIHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlk8L2NvZGU+PGRkPlZlY3RvciB6ZXJvCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5TUFUmbWRhc2g7PC9lbT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlnL3NwdS9zcHUuaDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5hPC9jb2RlPjxkZD5BbiBpbW1lZGlhdGUgd2hpY2ggY2FuIGJlIGxvYWRlZCB3aXRoIHRoZSBpbC9pbGEvaWxoL2lsaHUgaW5zdHJ1Y3Rpb25zLiAgY29uc3RfaW50IGlzIHRyZWF0ZWQgYXMgYSA2NCBiaXQgdmFsdWUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmM8L2NvZGU+PGRkPkFuIGltbWVkaWF0ZSBmb3IgYW5kL3hvci9vciBpbnN0cnVjdGlvbnMuICBjb25zdF9pbnQgaXMgdHJlYXRlZCBhcyBhIDY0IGJpdCB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+QW4gaW1tZWRpYXRlIGZvciB0aGUgPGNvZGU+aW9obDwvY29kZT4gaW5zdHJ1Y3Rpb24uICBjb25zdF9pbnQgaXMgdHJlYXRlZCBhcyBhIDY0IGJpdCB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZjwvY29kZT48ZGQ+QW4gaW1tZWRpYXRlIHdoaWNoIGNhbiBiZSBsb2FkZWQgd2l0aCA8Y29kZT5mc21iaTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkE8L2NvZGU+PGRkPkFuIGltbWVkaWF0ZSB3aGljaCBjYW4gYmUgbG9hZGVkIHdpdGggdGhlIGlsL2lsYS9pbGgvaWxodSBpbnN0cnVjdGlvbnMuICBjb25zdF9pbnQgaXMgdHJlYXRlZCBhcyBhIDMyIGJpdCB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QjwvY29kZT48ZGQ+QW4gaW1tZWRpYXRlIGZvciBtb3N0IGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zLiAgY29uc3RfaW50IGlzIHRyZWF0ZWQgYXMgYSAzMiBiaXQgdmFsdWUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkM8L2NvZGU+PGRkPkFuIGltbWVkaWF0ZSBmb3IgYW5kL3hvci9vciBpbnN0cnVjdGlvbnMuICBjb25zdF9pbnQgaXMgdHJlYXRlZCBhcyBhIDMyIGJpdCB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+RDwvY29kZT48ZGQ+QW4gaW1tZWRpYXRlIGZvciB0aGUgPGNvZGU+aW9obDwvY29kZT4gaW5zdHJ1Y3Rpb24uICBjb25zdF9pbnQgaXMgdHJlYXRlZCBhcyBhIDMyIGJpdCB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+STwvY29kZT48ZGQ+QSBjb25zdGFudCBpbiB0aGUgcmFuZ2UgWyZtaW51czs2NCwgNjNdIGZvciBzaGlmdC9yb3RhdGUgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5BbiB1bnNpZ25lZCA3LWJpdCBjb25zdGFudCBmb3IgY29udmVyc2lvbi9ub3AvY2hhbm5lbCBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPks8L2NvZGU+PGRkPkEgc2lnbmVkIDEwLWJpdCBjb25zdGFudCBmb3IgbW9zdCBhcml0aG1ldGljIGluc3RydWN0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TTwvY29kZT48ZGQ+QSBzaWduZWQgMTYgYml0IGltbWVkaWF0ZSBmb3IgPGNvZGU+c3RvcDwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPkFuIHVuc2lnbmVkIDE2LWJpdCBjb25zdGFudCBmb3IgPGNvZGU+aW9obDwvY29kZT4gYW5kIDxjb2RlPmZzbWJpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TzwvY29kZT48ZGQ+QW4gdW5zaWduZWQgNy1iaXQgY29uc3RhbnQgd2hvc2UgMyBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGFyZSAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5QPC9jb2RlPjxkZD5BbiB1bnNpZ25lZCAzLWJpdCBjb25zdGFudCBmb3IgMTYtYnl0ZSByb3RhdGVzIGFuZCBzaGlmdHMKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UjwvY29kZT48ZGQ+Q2FsbCBvcGVyYW5kLCByZWcsIGZvciBpbmRpcmVjdCBjYWxscworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TPC9jb2RlPjxkZD5DYWxsIG9wZXJhbmQsIHN5bWJvbCwgZm9yIHJlbGF0aXZlIGNhbGxzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5UPC9jb2RlPjxkZD5DYWxsIG9wZXJhbmQsIGNvbnN0X2ludCwgZm9yIGFic29sdXRlIGNhbGxzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5VPC9jb2RlPjxkZD5BbiBpbW1lZGlhdGUgd2hpY2ggY2FuIGJlIGxvYWRlZCB3aXRoIHRoZSBpbC9pbGEvaWxoL2lsaHUgaW5zdHJ1Y3Rpb25zLiAgY29uc3RfaW50IGlzIHNpZ24gZXh0ZW5kZWQgdG8gMTI4IGJpdC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VzwvY29kZT48ZGQ+QW4gaW1tZWRpYXRlIGZvciBzaGlmdCBhbmQgcm90YXRlIGluc3RydWN0aW9ucy4gIGNvbnN0X2ludCBpcyB0cmVhdGVkIGFzIGEgMzIgYml0IHZhbHVlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ZPC9jb2RlPjxkZD5BbiBpbW1lZGlhdGUgZm9yIGFuZC94b3Ivb3IgaW5zdHJ1Y3Rpb25zLiAgY29uc3RfaW50IGlzIHNpZ24gZXh0ZW5kZWQgYXMgYSAxMjggYml0LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5aPC9jb2RlPjxkZD5BbiBpbW1lZGlhdGUgZm9yIHRoZSA8Y29kZT5pb2hsPC9jb2RlPiBpbnN0cnVjdGlvbi4gIGNvbnN0X2ludCBpcyBzaWduIGV4dGVuZGVkIHRvIDEyOCBiaXQuCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5TLzM5MCBhbmQgelNlcmllcyZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvczM5MC9zMzkwLmg8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+QWRkcmVzcyByZWdpc3RlciAoZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIGV4Y2VwdCByMCkKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+Q29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZDwvY29kZT48ZGQ+RGF0YSByZWdpc3RlciAoYXJiaXRyYXJ5IGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcikKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZjwvY29kZT48ZGQ+RmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+STwvY29kZT48ZGQ+VW5zaWduZWQgOC1iaXQgY29uc3RhbnQgKDAmbmRhc2g7MjU1KQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5VbnNpZ25lZCAxMi1iaXQgY29uc3RhbnQgKDAmbmRhc2g7NDA5NSkKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SzwvY29kZT48ZGQ+U2lnbmVkIDE2LWJpdCBjb25zdGFudCAoJm1pbnVzOzMyNzY4Jm5kYXNoOzMyNzY3KQorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5WYWx1ZSBhcHByb3ByaWF0ZSBhcyBkaXNwbGFjZW1lbnQuCisgICAgICAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+KDAuLjQwOTUpPC9jb2RlPjxkZD5mb3Igc2hvcnQgZGlzcGxhY2VtZW50Cis8YnI+PGR0Pjxjb2RlPigmbWludXM7NTI0Mjg4Li41MjQyODcpPC9jb2RlPjxkZD5mb3IgbG9uZyBkaXNwbGFjZW1lbnQKKzwvZGw+CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk08L2NvZGU+PGRkPkNvbnN0YW50IGludGVnZXIgd2l0aCBhIHZhbHVlIG9mIDB4N2ZmZmZmZmYuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPk11bHRpcGxlIGxldHRlciBjb25zdHJhaW50IGZvbGxvd2VkIGJ5IDQgcGFyYW1ldGVyIGxldHRlcnMuCisgICAgICAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+MC4uOTo8L2NvZGU+PGRkPm51bWJlciBvZiB0aGUgcGFydCBjb3VudGluZyBmcm9tIG1vc3QgdG8gbGVhc3Qgc2lnbmlmaWNhbnQKKzxicj48ZHQ+PGNvZGU+SCxROjwvY29kZT48ZGQ+bW9kZSBvZiB0aGUgcGFydAorPGJyPjxkdD48Y29kZT5ELFMsSDo8L2NvZGU+PGRkPm1vZGUgb2YgdGhlIGNvbnRhaW5pbmcgb3BlcmFuZAorPGJyPjxkdD48Y29kZT4wLEY6PC9jb2RlPjxkZD52YWx1ZSBvZiB0aGUgb3RoZXIgcGFydHMgKEYmbWRhc2g7YWxsIGJpdHMgc2V0KQorPC9kbD4KKyAgICAgICAgICBUaGUgY29uc3RyYWludCBtYXRjaGVzIGlmIHRoZSBzcGVjaWZpZWQgcGFydCBvZiBhIGNvbnN0YW50CitoYXMgYSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSBpdHMgb3RoZXIgcGFydHMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlE8L2NvZGU+PGRkPk1lbW9yeSByZWZlcmVuY2Ugd2l0aG91dCBpbmRleCByZWdpc3RlciBhbmQgd2l0aCBzaG9ydCBkaXNwbGFjZW1lbnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlI8L2NvZGU+PGRkPk1lbW9yeSByZWZlcmVuY2Ugd2l0aCBpbmRleCByZWdpc3RlciBhbmQgc2hvcnQgZGlzcGxhY2VtZW50LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TPC9jb2RlPjxkZD5NZW1vcnkgcmVmZXJlbmNlIHdpdGhvdXQgaW5kZXggcmVnaXN0ZXIgYnV0IHdpdGggbG9uZyBkaXNwbGFjZW1lbnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlQ8L2NvZGU+PGRkPk1lbW9yeSByZWZlcmVuY2Ugd2l0aCBpbmRleCByZWdpc3RlciBhbmQgbG9uZyBkaXNwbGFjZW1lbnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlU8L2NvZGU+PGRkPlBvaW50ZXIgd2l0aCBzaG9ydCBkaXNwbGFjZW1lbnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlc8L2NvZGU+PGRkPlBvaW50ZXIgd2l0aCBsb25nIGRpc3BsYWNlbWVudC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WTwvY29kZT48ZGQ+U2hpZnQgY291bnQgb3BlcmFuZC4KKworICAgICA8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPlNjb3JlIGZhbWlseSZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvc2NvcmUvc2NvcmUuaDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5kPC9jb2RlPjxkZD5SZWdpc3RlcnMgZnJvbSByMCB0byByMzIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmU8L2NvZGU+PGRkPlJlZ2lzdGVycyBmcm9tIHIwIHRvIHIxNi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dDwvY29kZT48ZGQ+cjgmbWRhc2g7cjExIG9yIHIyMiZtZGFzaDtyMjcgcmVnaXN0ZXJzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5oPC9jb2RlPjxkZD5oaSByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bDwvY29kZT48ZGQ+bG8gcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPmhpICsgbG8gcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnE8L2NvZGU+PGRkPmNudCByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+eTwvY29kZT48ZGQ+bGNiIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT56PC9jb2RlPjxkZD5zY2IgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmE8L2NvZGU+PGRkPmNudCArIGxjYiArIHNjYiByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YzwvY29kZT48ZGQ+Y3IwJm1kYXNoO2NyMTUgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmI8L2NvZGU+PGRkPmNwMSByZWdpc3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmY8L2NvZGU+PGRkPmNwMiByZWdpc3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmk8L2NvZGU+PGRkPmNwMyByZWdpc3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmo8L2NvZGU+PGRkPmNwMSArIGNwMiArIGNwMyByZWdpc3RlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPkhpZ2ggMTYtYml0IGNvbnN0YW50ICgzMi1iaXQgY29uc3RhbnQgd2l0aCAxNiBMU0JzIHplcm8pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5VbnNpZ25lZCA1IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgMCB0byAzMSkuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPks8L2NvZGU+PGRkPlVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgMCB0byA2NTUzNSkuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPlNpZ25lZCAxNiBiaXQgaW50ZWdlciAoaW4gdGhlIHJhbmdlICZtaW51czszMjc2OCB0byAzMjc2NykuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk08L2NvZGU+PGRkPlVuc2lnbmVkIDE0IGJpdCBpbnRlZ2VyIChpbiB0aGUgcmFuZ2UgMCB0byAxNjM4MykuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPlNpZ25lZCAxNCBiaXQgaW50ZWdlciAoaW4gdGhlIHJhbmdlICZtaW51czs4MTkyIHRvIDgxOTEpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5aPC9jb2RlPjxkZD5BbnkgU1lNQk9MX1JFRi4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPlhzdG9ybXkxNiZtZGFzaDs8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jb25maWcvc3Rvcm15MTYvc3Rvcm15MTYuaDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5hPC9jb2RlPjxkZD5SZWdpc3RlciByMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YjwvY29kZT48ZGQ+UmVnaXN0ZXIgcjEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmM8L2NvZGU+PGRkPlJlZ2lzdGVyIHIyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5kPC9jb2RlPjxkZD5SZWdpc3RlciByOC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZTwvY29kZT48ZGQ+UmVnaXN0ZXJzIHIwIHRocm91Z2ggcjcuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnQ8L2NvZGU+PGRkPlJlZ2lzdGVycyByMCBhbmQgcjEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnk8L2NvZGU+PGRkPlRoZSBjYXJyeSByZWdpc3Rlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ejwvY29kZT48ZGQ+UmVnaXN0ZXJzIHI4IGFuZCByOS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+STwvY29kZT48ZGQ+QSBjb25zdGFudCBiZXR3ZWVuIDAgYW5kIDMgaW5jbHVzaXZlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5BIGNvbnN0YW50IHRoYXQgaGFzIGV4YWN0bHkgb25lIGJpdCBzZXQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPks8L2NvZGU+PGRkPkEgY29uc3RhbnQgdGhhdCBoYXMgZXhhY3RseSBvbmUgYml0IGNsZWFyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5BIGNvbnN0YW50IGJldHdlZW4gMCBhbmQgMjU1IGluY2x1c2l2ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TTwvY29kZT48ZGQ+QSBjb25zdGFudCBiZXR3ZWVuICZtaW51czsyNTUgYW5kIDAgaW5jbHVzaXZlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5OPC9jb2RlPjxkZD5BIGNvbnN0YW50IGJldHdlZW4gJm1pbnVzOzMgYW5kIDAgaW5jbHVzaXZlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5BIGNvbnN0YW50IGJldHdlZW4gMSBhbmQgNCBpbmNsdXNpdmUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlA8L2NvZGU+PGRkPkEgY29uc3RhbnQgYmV0d2VlbiAmbWludXM7NCBhbmQgJm1pbnVzOzEgaW5jbHVzaXZlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5RPC9jb2RlPjxkZD5BIG1lbW9yeSByZWZlcmVuY2UgdGhhdCBpcyBhIHN0YWNrIHB1c2guCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlI8L2NvZGU+PGRkPkEgbWVtb3J5IHJlZmVyZW5jZSB0aGF0IGlzIGEgc3RhY2sgcG9wLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TPC9jb2RlPjxkZD5BIG1lbW9yeSByZWZlcmVuY2UgdGhhdCByZWZlcnMgdG8gYSBjb25zdGFudCBhZGRyZXNzIG9mIGtub3duIHZhbHVlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5UPC9jb2RlPjxkZD5UaGUgcmVnaXN0ZXIgaW5kaWNhdGVkIGJ5IFJ4IChub3QgaW1wbGVtZW50ZWQgeWV0KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VTwvY29kZT48ZGQ+QSBjb25zdGFudCB0aGF0IGlzIG5vdCBiZXR3ZWVuIDIgYW5kIDE1IGluY2x1c2l2ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WjwvY29kZT48ZGQ+VGhlIGNvbnN0YW50IDAuCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5USSBDNlggZmFtaWx5Jm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy9jNngvY29uc3RyYWludHMubWQ8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+UmVnaXN0ZXIgZmlsZSBBIChBMCZuZGFzaDtBMzEpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5iPC9jb2RlPjxkZD5SZWdpc3RlciBmaWxlIEIgKEIwJm5kYXNoO0IzMSkuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkE8L2NvZGU+PGRkPlByZWRpY2F0ZSByZWdpc3RlcnMgaW4gcmVnaXN0ZXIgZmlsZSBBIChBMCZuZGFzaDtBMiBvbiBDNjRYIGFuZAoraGlnaGVyLCBBMSBhbmQgQTIgb3RoZXJ3aXNlKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QjwvY29kZT48ZGQ+UHJlZGljYXRlIHJlZ2lzdGVycyBpbiByZWdpc3RlciBmaWxlIEIgKEIwJm5kYXNoO0IyKS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QzwvY29kZT48ZGQ+QSBjYWxsLXVzZWQgcmVnaXN0ZXIgaW4gcmVnaXN0ZXIgZmlsZSBCIChCMCZuZGFzaDtCOSwgQjE2Jm5kYXNoO0IzMSkuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkRhPC9jb2RlPjxkZD5SZWdpc3RlciBmaWxlIEEsIGV4Y2x1ZGluZyBwcmVkaWNhdGUgcmVnaXN0ZXJzIChBMyZuZGFzaDtBMzEsCitwbHVzIEEwIGlmIG5vdCBDNjRYIG9yIGhpZ2hlcikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkRiPC9jb2RlPjxkZD5SZWdpc3RlciBmaWxlIEIsIGV4Y2x1ZGluZyBwcmVkaWNhdGUgcmVnaXN0ZXJzIChCMyZuZGFzaDtCMzEpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JdTQ8L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgaW4gdGhlIHJhbmdlIDAgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAxNS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SXU1PC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSAwIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gMzEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkluNTwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCBpbiB0aGUgcmFuZ2UgJm1pbnVzOzMxIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SXM1PC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IGluIHRoZSByYW5nZSAmbWludXM7MTYgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAxNS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+STV4PC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHRoYXQgY2FuIGJlIHRoZSBvcGVyYW5kIG9mIGFuIEFEREEgb3IgYSBTVUJBIGluc24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkl1QjwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCBpbiB0aGUgcmFuZ2UgMCA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IDY1NTM1LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5Jc0I8L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgaW4gdGhlIHJhbmdlICZtaW51czszMjc2OCA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IDMyNzY3LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5Jc0M8L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgaW4gdGhlIHJhbmdlIC0yXjIwIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gMl4yMCAtIDEuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkpjPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHRoYXQgaXMgYSB2YWxpZCBtYXNrIGZvciB0aGUgY2xyIGluc3RydWN0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KczwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB0aGF0IGlzIGEgdmFsaWQgbWFzayBmb3IgdGhlIHNldCBpbnN0cnVjdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UTwvY29kZT48ZGQ+TWVtb3J5IGxvY2F0aW9uIHdpdGggQSBiYXNlIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5SPC9jb2RlPjxkZD5NZW1vcnkgbG9jYXRpb24gd2l0aCBCIGJhc2UgcmVnaXN0ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlo8L2NvZGU+PGRkPlJlZ2lzdGVyIEIxNCAoYWthIERQKS4KKworICAgICA8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPlRJTEUtR3gmbWRhc2g7PC9lbT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29uZmlnL3RpbGVneC9jb25zdHJhaW50cy5tZDwvc3Bhbj48L3NhbXA+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5SMDA8L2NvZGU+PGR0Pjxjb2RlPlIwMTwvY29kZT48ZHQ+PGNvZGU+UjAyPC9jb2RlPjxkdD48Y29kZT5SMDM8L2NvZGU+PGR0Pjxjb2RlPlIwNDwvY29kZT48ZHQ+PGNvZGU+UjA1PC9jb2RlPjxkdD48Y29kZT5SMDY8L2NvZGU+PGR0Pjxjb2RlPlIwNzwvY29kZT48ZHQ+PGNvZGU+UjA4PC9jb2RlPjxkdD48Y29kZT5SMDk8L2NvZGU+PGR0Pjxjb2RlPlIxMDwvY29kZT48ZGQ+RWFjaCBvZiB0aGVzZSByZXByZXNlbnRzIGEgcmVnaXN0ZXIgY29uc3RyYWludCBmb3IgYW4gaW5kaXZpZHVhbAorcmVnaXN0ZXIsIGZyb20gcjAgdG8gcjEwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JPC9jb2RlPjxkZD5TaWduZWQgOC1iaXQgaW50ZWdlciBjb25zdGFudC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+SjwvY29kZT48ZGQ+U2lnbmVkIDE2LWJpdCBpbnRlZ2VyIGNvbnN0YW50LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD5VbnNpZ25lZCAxNi1iaXQgaW50ZWdlciBjb25zdGFudC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TDwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB0aGF0IGZpdHMgaW4gb25lIHNpZ25lZCBieXRlIHdoZW4gaW5jcmVtZW50ZWQgYnkgb25lCisoJm1pbnVzOzEyOSA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+IDEyNikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm08L2NvZGU+PGRkPk1lbW9yeSBvcGVyYW5kLiAgSWYgdXNlZCB0b2dldGhlciB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZQorb3BlcmFuZCBjYW4gaGF2ZSBwb3N0aW5jcmVtZW50IHdoaWNoIHJlcXVpcmVzIHByaW50aW5nIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lSW48L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvbiBUSUxFLUd4LiAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIGFzbSAoInN0X2FkZCAlSTAsJTEsJWkwIiA6ICI9bSZsdDsmZ3Q7IiAoKm1lbSkgOiAiciIgKHZhbCkpOworPC9wcmU+CisgICAgICAgICAgPGJyPjxkdD48Y29kZT5NPC9jb2RlPjxkZD5BIGJpdCBtYXNrIHN1aXRhYmxlIGZvciB0aGUgQkZJTlMgaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk48L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgdGhhdCBpcyBhIGJ5dGUgdGlsZWQgb3V0IGVpZ2h0IHRpbWVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5UaGUgaW50ZWdlciB6ZXJvIGNvbnN0YW50LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5QPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHRoYXQgaXMgYSBzaWduLWV4dGVuZGVkIGJ5dGUgdGlsZWQgb3V0IGFzIGZvdXIgc2hvcnRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5RPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHRoYXQgZml0cyBpbiBvbmUgc2lnbmVkIGJ5dGUgd2hlbiBpbmNyZW1lbnRlZAorKCZtaW51czsxMjkgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAxMjYpLCBidXQgZXhjbHVkaW5nIC0xLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5TPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHRoYXQgaGFzIGFsbCAxIGJpdHMgY29uc2VjdXRpdmUgYW5kIHN0YXJ0aW5nIGF0IGJpdCAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5UPC9jb2RlPjxkZD5BIDE2LWJpdCBmcmFnbWVudCBvZiBhIGdvdCwgdGxzLCBvciBwYy1yZWxhdGl2ZSByZWZlcmVuY2UuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlU8L2NvZGU+PGRkPk1lbW9yeSBvcGVyYW5kIGV4Y2VwdCBwb3N0aW5jcmVtZW50LiAgVGhpcyBpcyByb3VnaGx5IHRoZSBzYW1lIGFzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm08L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hlbiBub3QgdXNlZCB0b2dldGhlciB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlc8L2NvZGU+PGRkPkFuIDgtZWxlbWVudCB2ZWN0b3IgY29uc3RhbnQgd2l0aCBpZGVudGljYWwgZWxlbWVudHMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlk8L2NvZGU+PGRkPkEgNC1lbGVtZW50IHZlY3RvciBjb25zdGFudCB3aXRoIGlkZW50aWNhbCBlbGVtZW50cy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WjA8L2NvZGU+PGRkPlRoZSBpbnRlZ2VyIGNvbnN0YW50IDB4ZmZmZmZmZmYuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPloxPC9jb2RlPjxkZD5UaGUgaW50ZWdlciBjb25zdGFudCAweGZmZmZmZmZmMDAwMDAwMDAuCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5USUxFUHJvJm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy90aWxlcHJvL2NvbnN0cmFpbnRzLm1kPC9zcGFuPjwvc2FtcD48ZGQ+CisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPlIwMDwvY29kZT48ZHQ+PGNvZGU+UjAxPC9jb2RlPjxkdD48Y29kZT5SMDI8L2NvZGU+PGR0Pjxjb2RlPlIwMzwvY29kZT48ZHQ+PGNvZGU+UjA0PC9jb2RlPjxkdD48Y29kZT5SMDU8L2NvZGU+PGR0Pjxjb2RlPlIwNjwvY29kZT48ZHQ+PGNvZGU+UjA3PC9jb2RlPjxkdD48Y29kZT5SMDg8L2NvZGU+PGR0Pjxjb2RlPlIwOTwvY29kZT48ZHQ+PGNvZGU+UjEwPC9jb2RlPjxkZD5FYWNoIG9mIHRoZXNlIHJlcHJlc2VudHMgYSByZWdpc3RlciBjb25zdHJhaW50IGZvciBhbiBpbmRpdmlkdWFsCityZWdpc3RlciwgZnJvbSByMCB0byByMTAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPlNpZ25lZCA4LWJpdCBpbnRlZ2VyIGNvbnN0YW50LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5TaWduZWQgMTYtYml0IGludGVnZXIgY29uc3RhbnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPks8L2NvZGU+PGRkPk5vbnplcm8gaW50ZWdlciBjb25zdGFudCB3aXRoIGxvdyAxNiBiaXRzIHplcm8uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkw8L2NvZGU+PGRkPkludGVnZXIgY29uc3RhbnQgdGhhdCBmaXRzIGluIG9uZSBzaWduZWQgYnl0ZSB3aGVuIGluY3JlbWVudGVkIGJ5IG9uZQorKCZtaW51czsxMjkgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAxMjYpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tPC9jb2RlPjxkZD5NZW1vcnkgb3BlcmFuZC4gIElmIHVzZWQgdG9nZXRoZXIgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGUKK29wZXJhbmQgY2FuIGhhdmUgcG9zdGluY3JlbWVudCB3aGljaCByZXF1aXJlcyBwcmludGluZyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JUluPC9zcGFuPjwvc2FtcD4mcnNxdW87CithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4laW48L3NwYW4+PC9zYW1wPiZyc3F1bzsgb24gVElMRVByby4gIEZvciBleGFtcGxlOgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICBhc20gKCJzd2FkZCAlSTAsJTEsJWkwIiA6ICI9bSZsdDsmZ3Q7IiAobWVtKSA6ICJyIiAodmFsKSk7Cis8L3ByZT4KKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPk08L2NvZGU+PGRkPkEgYml0IG1hc2sgc3VpdGFibGUgZm9yIHRoZSBNTSBpbnN0cnVjdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TjwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB0aGF0IGlzIGEgYnl0ZSB0aWxlZCBvdXQgZm91ciB0aW1lcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TzwvY29kZT48ZGQ+VGhlIGludGVnZXIgemVybyBjb25zdGFudC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UDwvY29kZT48ZGQ+SW50ZWdlciBjb25zdGFudCB0aGF0IGlzIGEgc2lnbi1leHRlbmRlZCBieXRlIHRpbGVkIG91dCBhcyB0d28gc2hvcnRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5RPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHRoYXQgZml0cyBpbiBvbmUgc2lnbmVkIGJ5dGUgd2hlbiBpbmNyZW1lbnRlZAorKCZtaW51czsxMjkgPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPiAxMjYpLCBidXQgZXhjbHVkaW5nIC0xLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5UPC9jb2RlPjxkZD5BIHN5bWJvbGljIG9wZXJhbmQsIG9yIGEgMTYtYml0IGZyYWdtZW50IG9mIGEgZ290LCB0bHMsIG9yIHBjLXJlbGF0aXZlCityZWZlcmVuY2UuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlU8L2NvZGU+PGRkPk1lbW9yeSBvcGVyYW5kIGV4Y2VwdCBwb3N0aW5jcmVtZW50LiAgVGhpcyBpcyByb3VnaGx5IHRoZSBzYW1lIGFzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm08L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hlbiBub3QgdXNlZCB0b2dldGhlciB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlc8L2NvZGU+PGRkPkEgNC1lbGVtZW50IHZlY3RvciBjb25zdGFudCB3aXRoIGlkZW50aWNhbCBlbGVtZW50cy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WTwvY29kZT48ZGQ+QSAyLWVsZW1lbnQgdmVjdG9yIGNvbnN0YW50IHdpdGggaWRlbnRpY2FsIGVsZW1lbnRzLgorCisgICAgIDwvZGw+CisKKyAgICAgPGJyPjxkdD48ZW0+WHRlbnNhJm1kYXNoOzwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbmZpZy94dGVuc2EvY29uc3RyYWludHMubWQ8L3NwYW4+PC9zYW1wPjxkZD4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YTwvY29kZT48ZGQ+R2VuZXJhbC1wdXJwb3NlIDMyLWJpdCByZWdpc3RlcgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5iPC9jb2RlPjxkZD5PbmUtYml0IGJvb2xlYW4gcmVnaXN0ZXIKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QTwvY29kZT48ZGQ+TUFDMTYgNDAtYml0IGFjY3VtdWxhdG9yIHJlZ2lzdGVyCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkk8L2NvZGU+PGRkPlNpZ25lZCAxMi1iaXQgaW50ZWdlciBjb25zdGFudCwgZm9yIHVzZSBpbiBNT1ZJIGluc3RydWN0aW9ucworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5KPC9jb2RlPjxkZD5TaWduZWQgOC1iaXQgaW50ZWdlciBjb25zdGFudCwgZm9yIHVzZSBpbiBBRERJIGluc3RydWN0aW9ucworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5LPC9jb2RlPjxkZD5JbnRlZ2VyIGNvbnN0YW50IHZhbGlkIGZvciBCY2NJIGluc3RydWN0aW9ucworCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5VbnNpZ25lZCBjb25zdGFudCB2YWxpZCBmb3IgQmNjVUkgaW5zdHJ1Y3Rpb25zCisKKyAgICAgPC9kbD4KKworIDwvZGw+CisKKzwhLS0gRWFjaCBvZiB0aGUgZm9sbG93aW5nIG5vZGVzIGFyZSB3cmFwcGVkIGluIHNlcGFyYXRlIC0tPgorPCEtLSAiQGlmc2V0IElOVEVSTkFMUyIgdG8gd29yayBhcm91bmQgbWVtb3J5IGxpbWl0cyBmb3IgdGhlIGRlZmF1bHQgLS0+Cis8IS0tIGNvbmZpZ3VyYXRpb24gaW4gb2xkZXIgdGV0ZXggZGlzdHJpYnV0aW9ucy4gIEtub3duIHRvIG5vdCB3b3JrOiAtLT4KKzwhLS0gdGV0ZXgtMS4wLjcsIGtub3duIHRvIHdvcms6IHRldGV4LTIuMC4yLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01lUC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01lUC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmZjA3NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWVQLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDE1NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWVQIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiIHRpdGxlPSJNQ29yZSBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjTWljcm9CbGF6ZS1PcHRpb25zIiB0aXRsZT0iTWljcm9CbGF6ZSBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1lUC1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMjQgTWVQIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1NZVAtb3B0aW9ucy0xNjc2Ij48L2E+CisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWFic2RpZmY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hYnNkaWZmLTE2NzciPjwvYT5FbmFibGVzIHRoZSA8Y29kZT5hYnM8L2NvZGU+IGluc3RydWN0aW9uLCB3aGljaCBpcyB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZQorYmV0d2VlbiB0d28gcmVnaXN0ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hbGwtb3B0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFsbF8wMDJkb3B0cy0xNjc4Ij48L2E+RW5hYmxlcyBhbGwgdGhlIG9wdGlvbmFsIGluc3RydWN0aW9ucyZtZGFzaDthdmVyYWdlLCBtdWx0aXBseSwgZGl2aWRlLCBiaXQKK29wZXJhdGlvbnMsIGxlYWRpbmcgemVybywgYWJzb2x1dGUgZGlmZmVyZW5jZSwgbWluL21heCwgY2xpcCwgYW5kCitzYXR1cmF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hdmVyYWdlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYXZlcmFnZS0xNjc5Ij48L2E+RW5hYmxlcyB0aGUgPGNvZGU+YXZlPC9jb2RlPiBpbnN0cnVjdGlvbiwgd2hpY2ggY29tcHV0ZXMgdGhlIGF2ZXJhZ2Ugb2YgdHdvCityZWdpc3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJhc2VkPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWJhc2VkXzAwM2QtMTY4MCI+PC9hPlZhcmlhYmxlcyBvZiBzaXplIDx2YXI+bjwvdmFyPiBieXRlcyBvciBzbWFsbGVyIGFyZSBwbGFjZWQgaW4gdGhlCis8Y29kZT4uYmFzZWQ8L2NvZGU+IHNlY3Rpb24gYnkgZGVmYXVsdC4gIEJhc2VkIHZhcmlhYmxlcyB1c2UgdGhlIDxjb2RlPiR0cDwvY29kZT4KK3JlZ2lzdGVyIGFzIGEgYmFzZSByZWdpc3RlciwgYW5kIHRoZXJlIGlzIGEgMTI4LWJ5dGUgbGltaXQgdG8gdGhlCis8Y29kZT4uYmFzZWQ8L2NvZGU+IHNlY3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJpdG9wczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWJpdG9wcy0xNjgxIj48L2E+RW5hYmxlcyB0aGUgYml0IG9wZXJhdGlvbiBpbnN0cnVjdGlvbnMmbWRhc2g7Yml0IHRlc3QgKDxjb2RlPmJ0c3RtPC9jb2RlPiksIHNldAorKDxjb2RlPmJzZXRtPC9jb2RlPiksIGNsZWFyICg8Y29kZT5iY2xybTwvY29kZT4pLCBpbnZlcnQgKDxjb2RlPmJub3RtPC9jb2RlPiksIGFuZAordGVzdC1hbmQtc2V0ICg8Y29kZT50YXM8L2NvZGU+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYz08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1jXzAwM2QtMTY4MiI+PC9hPlNlbGVjdHMgd2hpY2ggc2VjdGlvbiBjb25zdGFudCBkYXRhIGlzIHBsYWNlZCBpbi4gIDx2YXI+bmFtZTwvdmFyPiBtYXkKK2JlIDxjb2RlPnRpbnk8L2NvZGU+LCA8Y29kZT5uZWFyPC9jb2RlPiwgb3IgPGNvZGU+ZmFyPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY2xpcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNsaXAtMTY4MyI+PC9hPkVuYWJsZXMgdGhlIDxjb2RlPmNsaXA8L2NvZGU+IGluc3RydWN0aW9uLiAgTm90ZSB0aGF0IDxjb2RlPi1tY2xpcDwvY29kZT4gaXMgbm90Cit1c2VmdWwgdW5sZXNzIHlvdSBhbHNvIHByb3ZpZGUgPGNvZGU+LW1taW5tYXg8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jb25maWc9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY29uZmlnXzAwM2QtMTY4NCI+PC9hPlNlbGVjdHMgb25lIG9mIHRoZSBidWlsdC1pbiBjb3JlIGNvbmZpZ3VyYXRpb25zLiAgRWFjaCBNZVAgY2hpcCBoYXMKK29uZSBvciBtb3JlIG1vZHVsZXMgaW4gaXQ7IGVhY2ggbW9kdWxlIGhhcyBhIGNvcmUgQ1BVIGFuZCBhIHZhcmlldHkgb2YKK2NvcHJvY2Vzc29ycywgb3B0aW9uYWwgaW5zdHJ1Y3Rpb25zLCBhbmQgcGVyaXBoZXJhbHMuICBUaGUKKzxjb2RlPk1lUC1JbnRlZ3JhdG9yPC9jb2RlPiB0b29sLCBub3QgcGFydCBvZiBHQ0MsIHByb3ZpZGVzIHRoZXNlCitjb25maWd1cmF0aW9ucyB0aHJvdWdoIHRoaXMgb3B0aW9uOyB1c2luZyB0aGlzIG9wdGlvbiBpcyB0aGUgc2FtZSBhcwordXNpbmcgYWxsIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgVGhlIGRlZmF1bHQKK2NvbmZpZ3VyYXRpb24gaXMgPGNvZGU+ZGVmYXVsdDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNvcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNvcC0xNjg1Ij48L2E+RW5hYmxlcyB0aGUgY29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBhIDMyLWJpdAorY29wcm9jZXNzb3IuICBOb3RlIHRoYXQgdGhlIGNvcHJvY2Vzc29yIGlzIG5vcm1hbGx5IGVuYWJsZWQgdmlhIHRoZQorPGNvZGU+LW1jb25maWc9PC9jb2RlPiBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNvcDMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY29wMzItMTY4NiI+PC9hPkVuYWJsZXMgdGhlIDMyLWJpdCBjb3Byb2Nlc3NvcidzIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY29wNjQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jb3A2NC0xNjg3Ij48L2E+RW5hYmxlcyB0aGUgNjQtYml0IGNvcHJvY2Vzc29yJ3MgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pdmMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taXZjMi0xNjg4Ij48L2E+RW5hYmxlcyBJVkMyIHNjaGVkdWxpbmcuICBJVkMyIGlzIGEgNjQtYml0IFZMSVcgY29wcm9jZXNzb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZGMtMTY4OSI+PC9hPkNhdXNlcyBjb25zdGFudCB2YXJpYWJsZXMgdG8gYmUgcGxhY2VkIGluIHRoZSA8Y29kZT4ubmVhcjwvY29kZT4gc2VjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZGl2PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZGl2LTE2OTAiPjwvYT5FbmFibGVzIHRoZSA8Y29kZT5kaXY8L2NvZGU+IGFuZCA8Y29kZT5kaXZ1PC9jb2RlPiBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWViPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZWItMTY5MSI+PC9hPkdlbmVyYXRlIGJpZy1lbmRpYW4gY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1lbC0xNjkyIj48L2E+R2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pby12b2xhdGlsZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlvXzAwMmR2b2xhdGlsZS0xNjkzIj48L2E+VGVsbHMgdGhlIGNvbXBpbGVyIHRoYXQgYW55IHZhcmlhYmxlIG1hcmtlZCB3aXRoIHRoZSA8Y29kZT5pbzwvY29kZT4KK2F0dHJpYnV0ZSBpcyB0byBiZSBjb25zaWRlcmVkIHZvbGF0aWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1sPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbC0xNjk0Ij48L2E+Q2F1c2VzIHZhcmlhYmxlcyB0byBiZSBhc3NpZ25lZCB0byB0aGUgPGNvZGU+LmZhcjwvY29kZT4gc2VjdGlvbiBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1sZWFkejwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxlYWR6LTE2OTUiPjwvYT5FbmFibGVzIHRoZSA8Y29kZT5sZWFkejwvY29kZT4gKGxlYWRpbmcgemVybykgaW5zdHJ1Y3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tLTE2OTYiPjwvYT5DYXVzZXMgdmFyaWFibGVzIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSA8Y29kZT4ubmVhcjwvY29kZT4gc2VjdGlvbiBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1taW5tYXg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1taW5tYXgtMTY5NyI+PC9hPkVuYWJsZXMgdGhlIDxjb2RlPm1pbjwvY29kZT4gYW5kIDxjb2RlPm1heDwvY29kZT4gaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tdWx0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbXVsdC0xNjk4Ij48L2E+RW5hYmxlcyB0aGUgbXVsdGlwbGljYXRpb24gYW5kIG11bHRpcGx5LWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1vcHRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG9wdHMtMTY5OSI+PC9hPkRpc2FibGVzIGFsbCB0aGUgb3B0aW9uYWwgaW5zdHJ1Y3Rpb25zIGVuYWJsZWQgYnkgPGNvZGU+LW1hbGwtb3B0czwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlcGVhdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXJlcGVhdC0xNzAwIj48L2E+RW5hYmxlcyB0aGUgPGNvZGU+cmVwZWF0PC9jb2RlPiBhbmQgPGNvZGU+ZXJlcGVhdDwvY29kZT4gaW5zdHJ1Y3Rpb25zLCB1c2VkIGZvcgorbG93LW92ZXJoZWFkIGxvb3BpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zLTE3MDEiPjwvYT5DYXVzZXMgYWxsIHZhcmlhYmxlcyB0byBkZWZhdWx0IHRvIHRoZSA8Y29kZT4udGlueTwvY29kZT4gc2VjdGlvbi4gIE5vdGUKK3RoYXQgdGhlcmUgaXMgYSA2NTUzNi1ieXRlIGxpbWl0IHRvIHRoaXMgc2VjdGlvbi4gIEFjY2Vzc2VzIHRvIHRoZXNlCit2YXJpYWJsZXMgdXNlIHRoZSA8Y29kZT4lZ3A8L2NvZGU+IGJhc2UgcmVnaXN0ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNhdHVyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2F0dXItMTcwMiI+PC9hPkVuYWJsZXMgdGhlIHNhdHVyYXRpb24gaW5zdHJ1Y3Rpb25zLiAgTm90ZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdAorY3VycmVudGx5IGdlbmVyYXRlIHRoZXNlIGl0c2VsZiwgYnV0IHRoaXMgb3B0aW9uIGlzIGluY2x1ZGVkIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHRvb2xzLCBsaWtlIDxjb2RlPmFzPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RyYW08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zZHJhbS0xNzAzIj48L2E+TGluayB0aGUgU0RSQU0tYmFzZWQgcnVudGltZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFJPTS1iYXNlZCBydW50aW1lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zaW08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW0tMTcwNCI+PC9hPkxpbmsgdGhlIHNpbXVsYXRvciBydW50aW1lIGxpYnJhcmllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2ltbm92ZWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW1ub3ZlYy0xNzA1Ij48L2E+TGluayB0aGUgc2ltdWxhdG9yIHJ1bnRpbWUgbGlicmFyaWVzLCBleGNsdWRpbmcgYnVpbHQtaW4gc3VwcG9ydAorZm9yIHJlc2V0IGFuZCBleGNlcHRpb24gdmVjdG9ycyBhbmQgdGFibGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10ZjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRmLTE3MDYiPjwvYT5DYXVzZXMgYWxsIGZ1bmN0aW9ucyB0byBkZWZhdWx0IHRvIHRoZSA8Y29kZT4uZmFyPC9jb2RlPiBzZWN0aW9uLiAgV2l0aG91dAordGhpcyBvcHRpb24sIGZ1bmN0aW9ucyBkZWZhdWx0IHRvIHRoZSA8Y29kZT4ubmVhcjwvY29kZT4gc2VjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdGlueT08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW10aW55XzAwM2QtMTcwNyI+PC9hPlZhcmlhYmxlcyB0aGF0IGFyZSA8dmFyPm48L3Zhcj4gYnl0ZXMgb3Igc21hbGxlciBhcmUgYWxsb2NhdGVkIHRvIHRoZQorPGNvZGU+LnRpbnk8L2NvZGU+IHNlY3Rpb24uICBUaGVzZSB2YXJpYWJsZXMgdXNlIHRoZSA8Y29kZT4kZ3A8L2NvZGU+IGJhc2UKK3JlZ2lzdGVyLiAgVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzIDQsIGJ1dCBub3RlIHRoYXQgdGhlcmUncyBhCis2NTUzNi1ieXRlIGxpbWl0IHRvIHRoZSA8Y29kZT4udGlueTwvY29kZT4gc2VjdGlvbi4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01lUC1QcmFnbWFzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01lUC1QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYwMzJmZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWVQLVByYWdtYXMuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWVQIFByYWdtYXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiIHRpdGxlPSJQcmFnbWFzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTTMyQy1QcmFnbWFzLmh0bWwjTTMyQy1QcmFnbWFzIiB0aXRsZT0iTTMyQyBQcmFnbWFzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtUHJhZ21hcy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLVByYWdtYXMiIHRpdGxlPSJSUy82MDAwIGFuZCBQb3dlclBDIFByYWdtYXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTWVQLVByYWdtYXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtUHJhZ21hcy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLVByYWdtYXMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgUHJhZ21hczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik0zMkMtUHJhZ21hcy5odG1sI00zMkMtUHJhZ21hcyI+TTMyQyBQcmFnbWFzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU4LjMgTWVQIFByYWdtYXM8L2g0PgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5jdXN0b20gaW9fdm9sYXRpbGUgKG9ufG9mZik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLWN1c3RvbS1pb18wMDVmdm9sYXRpbGUtMzQ1OCI+PC9hPk92ZXJyaWRlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiA8Y29kZT4tbWlvLXZvbGF0aWxlPC9jb2RlPiBmb3IgdGhlIGN1cnJlbnQKK2ZpbGUuICBOb3RlIHRoYXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBmdXR1cmUgR0NDIHJlbGVhc2VzLCB0aGlzCitvcHRpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBvbmNlIGJlZm9yZSBhbnkgPGNvZGU+aW88L2NvZGU+IHZhcmlhYmxlcyBpbiBlYWNoCitmaWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+R0NDIGNvcHJvY2Vzc29yIGF2YWlsYWJsZSA8L2NvZGU+PHZhcj5yZWdpc3RlcnM8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hXzAwMmMtY29wcm9jZXNzb3ItYXZhaWxhYmxlLTM0NTkiPjwvYT5TcGVjaWZpZXMgd2hpY2ggY29wcm9jZXNzb3IgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgdG8gdGhlIHJlZ2lzdGVyCithbGxvY2F0b3IuICA8dmFyPnJlZ2lzdGVyczwvdmFyPiBtYXkgYmUgYSBzaW5nbGUgcmVnaXN0ZXIsIHJlZ2lzdGVyIHJhbmdlCitzZXBhcmF0ZWQgYnkgZWxsaXBzZXMsIG9yIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRob3NlLiAgRXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjcHJhZ21hIEdDQyBjb3Byb2Nlc3NvciBhdmFpbGFibGUgJGMwLi4uJGMxMCwgJGMyOAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+R0NDIGNvcHJvY2Vzc29yIGNhbGxfc2F2ZWQgPC9jb2RlPjx2YXI+cmVnaXN0ZXJzPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLWNvcHJvY2Vzc29yLWNhbGxfMDA1ZnNhdmVkLTM0NjAiPjwvYT5TcGVjaWZpZXMgd2hpY2ggY29wcm9jZXNzb3IgcmVnaXN0ZXJzIGFyZSB0byBiZSBzYXZlZCBhbmQgcmVzdG9yZWQgYnkKK2FueSBmdW5jdGlvbiB1c2luZyB0aGVtLiAgPHZhcj5yZWdpc3RlcnM8L3Zhcj4gbWF5IGJlIGEgc2luZ2xlIHJlZ2lzdGVyLAorcmVnaXN0ZXIgcmFuZ2Ugc2VwYXJhdGVkIGJ5IGVsbGlwc2VzLCBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZgordGhvc2UuICBFeGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICNwcmFnbWEgR0NDIGNvcHJvY2Vzc29yIGNhbGxfc2F2ZWQgJGM0Li4uJGM2LCAkYzMxCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5HQ0MgY29wcm9jZXNzb3Igc3ViY2xhc3MgJyhBfEJ8Q3xEKScgPSA8L2NvZGU+PHZhcj5yZWdpc3RlcnM8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hXzAwMmMtY29wcm9jZXNzb3Itc3ViY2xhc3MtMzQ2MSI+PC9hPkNyZWF0ZXMgYW5kIGRlZmluZXMgYSByZWdpc3RlciBjbGFzcy4gIFRoZXNlIHJlZ2lzdGVyIGNsYXNzZXMgY2FuIGJlCit1c2VkIGJ5IGlubGluZSA8Y29kZT5hc208L2NvZGU+IGNvbnN0cnVjdHMuICA8dmFyPnJlZ2lzdGVyczwvdmFyPiBtYXkgYmUgYSBzaW5nbGUKK3JlZ2lzdGVyLCByZWdpc3RlciByYW5nZSBzZXBhcmF0ZWQgYnkgZWxsaXBzZXMsIG9yIGNvbW1hLXNlcGFyYXRlZAorbGlzdCBvZiB0aG9zZS4gIEV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI3ByYWdtYSBHQ0MgY29wcm9jZXNzb3Igc3ViY2xhc3MgJ0InID0gJGMyLCAkYzQsICRjNgorICAgICAgICAgIAorICAgICAgICAgIGFzbSAoImNwZm9vICUwIiA6ICI9QiIgKHgpKTsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPkdDQyBkaXNpbnRlcnJ1cHQgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiAsIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT4gLi4uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWFfMDAyYy1kaXNpbnRlcnJ1cHQtMzQ2MiI+PC9hPkZvciB0aGUgbmFtZWQgZnVuY3Rpb25zLCB0aGUgY29tcGlsZXIgYWRkcyBjb2RlIHRvIGRpc2FibGUgaW50ZXJydXB0cworZm9yIHRoZSBkdXJhdGlvbiBvZiB0aG9zZSBmdW5jdGlvbnMuICBJZiBhbnkgZnVuY3Rpb25zIHNvIG5hbWVkCithcmUgbm90IGVuY291bnRlcmVkIGluIHRoZSBzb3VyY2UsIGEgd2FybmluZyBpcyBlbWl0dGVkIHRoYXQgdGhlIHByYWdtYSBpcworbm90IHVzZWQuICBFeGFtcGxlczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjcHJhZ21hIGRpc2ludGVycnVwdCBmb28KKyAgICAgICAgICAjcHJhZ21hIGRpc2ludGVycnVwdCBiYXIsIGdyaWxsCisgICAgICAgICAgaW50IGZvbyAoKSB7IC4uLiB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5HQ0MgY2FsbCA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+ICwgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiAuLi48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLWNhbGwtMzQ2MyI+PC9hPkZvciB0aGUgbmFtZWQgZnVuY3Rpb25zLCB0aGUgY29tcGlsZXIgYWx3YXlzIHVzZXMgYSByZWdpc3Rlci1pbmRpcmVjdAorY2FsbCBtb2RlbCB3aGVuIGNhbGxpbmcgdGhlIG5hbWVkIGZ1bmN0aW9ucy4gIEV4YW1wbGVzOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGV4dGVybiBpbnQgZm9vICgpOworICAgICAgICAgICNwcmFnbWEgY2FsbCBmb28KKzwvcHJlPgorICAgICA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NZVAtVHlwZS1BdHRyaWJ1dGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01lUC1UeXBlLUF0dHJpYnV0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGEwNDcwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NZVAtVHlwZS1BdHRyaWJ1dGVzLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPVR5cGUtQXR0cmlidXRlcy5odG1sI01lUCUyMFR5cGUlMjBBdHRyaWJ1dGVzIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWVQLVZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWVQLVZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTg3NTc3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NZVAtVmFyaWFibGUtQXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1WYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjTWVQJTIwVmFyaWFibGUlMjBBdHRyaWJ1dGVzIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWVzc2FnaW5nLXdpdGgtdGhlLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NZXNzYWdpbmctd2l0aC10aGUtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxMThlNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWVzc2FnaW5nLXdpdGgtdGhlLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1lc3NhZ2luZyB3aXRoIHRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPYmplY3RpdmVfMDAyZEMuaHRtbCNPYmplY3RpdmVfMDAyZEMiIHRpdGxlPSJPYmplY3RpdmUtQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZhc3QtZW51bWVyYXRpb24uaHRtbCNGYXN0LWVudW1lcmF0aW9uIiB0aXRsZT0iRmFzdCBlbnVtZXJhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNZXNzYWdpbmctd2l0aC10aGUtR05VLU9iamVjdGl2ZS1DLXJ1bnRpbWUiPjwvYT4KKzxhIG5hbWU9Ik1lc3NhZ2luZy13aXRoLXRoZS1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGYXN0LWVudW1lcmF0aW9uLmh0bWwjRmFzdC1lbnVtZXJhdGlvbiI+RmFzdCBlbnVtZXJhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy5odG1sI09iamVjdGl2ZV8wMDJkQyI+T2JqZWN0aXZlLUM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEwIE1lc3NhZ2luZyB3aXRoIHRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZTwvaDM+CisKKzxwPlRoaXMgc2VjdGlvbiBpcyBzcGVjaWZpYyBmb3IgdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lLiAgSWYgeW91IGFyZQordXNpbmcgYSBkaWZmZXJlbnQgcnVudGltZSwgeW91IGNhbiBza2lwIGl0LgorCisgPHA+VGhlIGltcGxlbWVudGF0aW9uIG9mIG1lc3NhZ2luZyBpbiB0aGUgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgaXMKK2Rlc2lnbmVkIHRvIGJlIHBvcnRhYmxlLCBhbmQgc28gaXMgYmFzZWQgb24gc3RhbmRhcmQgQy4KKworIDxwPlNlbmRpbmcgYSBtZXNzYWdlIGluIHRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBpcyBjb21wb3NlZCBvZiB0d28KK3NlcGFyYXRlIHN0ZXBzLiAgRmlyc3QsIHRoZXJlIGlzIGEgY2FsbCB0byB0aGUgbG9va3VwIGZ1bmN0aW9uLAorPGNvZGU+b2JqY19tc2dfbG9va3VwICgpPC9jb2RlPiAob3IsIGluIHRoZSBjYXNlIG9mIG1lc3NhZ2VzIHRvIHN1cGVyLAorPGNvZGU+b2JqY19tc2dfbG9va3VwX3N1cGVyICgpPC9jb2RlPikuICBUaGlzIHJ1bnRpbWUgZnVuY3Rpb24gdGFrZXMgYXMKK2FyZ3VtZW50IHRoZSByZWNlaXZlciBhbmQgdGhlIHNlbGVjdG9yIG9mIHRoZSBtZXRob2QgdG8gYmUgY2FsbGVkOyBpdAorcmV0dXJucyB0aGUgPGNvZGU+SU1QPC9jb2RlPiwgdGhhdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIGltcGxlbWVudGluZwordGhlIG1ldGhvZC4gIFRoZSBzZWNvbmQgc3RlcCBvZiBtZXRob2QgaW52b2NhdGlvbiBjb25zaXN0cyBvZiBjYXN0aW5nCit0aGlzIHBvaW50ZXIgZnVuY3Rpb24gdG8gdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSwgYW5kCitjYWxsaW5nIHRoZSBmdW5jdGlvbiBwb2ludGVkIHRvIGl0IHdpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cy4KKworIDxwPkZvciBleGFtcGxlLCB3aGVuIHRoZSBjb21waWxlciBlbmNvdW50ZXJzIGEgbWV0aG9kIGludm9jYXRpb24gc3VjaCBhcworPGNvZGU+W29iamVjdCBpbml0XTwvY29kZT4sIGl0IGNvbXBpbGVzIGl0IGludG8gYSBjYWxsIHRvCis8Y29kZT5vYmpjX21zZ19sb29rdXAgKG9iamVjdCwgQHNlbGVjdG9yKGluaXQpKTwvY29kZT4gZm9sbG93ZWQgYnkgYSBjYXN0CitvZiB0aGUgcmV0dXJuZWQgdmFsdWUgdG8gdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSwgYW5kCit0aGVuIGl0IGNhbGxzIGl0LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iRHluYW1pY2FsbHktcmVnaXN0ZXJpbmctbWV0aG9kcy5odG1sI0R5bmFtaWNhbGx5LXJlZ2lzdGVyaW5nLW1ldGhvZHMiPkR5bmFtaWNhbGx5IHJlZ2lzdGVyaW5nIG1ldGhvZHM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJGb3J3YXJkaW5nLWhvb2suaHRtbCNGb3J3YXJkaW5nLWhvb2siPkZvcndhcmRpbmcgaG9vazwvYT4KKzwvdWw+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01ldGhvZC1zaWduYXR1cmVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01ldGhvZC1zaWduYXR1cmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0ZWQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWV0aG9kLXNpZ25hdHVyZXMuaHRtbApAQCAtMCwwICsxLDk5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NZXRob2Qgc2lnbmF0dXJlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUeXBlLWVuY29kaW5nLmh0bWwjVHlwZS1lbmNvZGluZyIgdGl0bGU9IlR5cGUgZW5jb2RpbmciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJfMDA0MF8wMDQwZW5jb2RlLmh0bWwjZ190XzAwNDBfMDA0MGVuY29kZSIgdGl0bGU9IkBAZW5jb2RlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1ldGhvZC1zaWduYXR1cmVzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iXzAwNDBlbmNvZGUuaHRtbCNnX3RfMDA0MGVuY29kZSI+QGVuY29kZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlR5cGUtZW5jb2RpbmcuaHRtbCNUeXBlLWVuY29kaW5nIj5UeXBlIGVuY29kaW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OC4zLjMgTWV0aG9kIHNpZ25hdHVyZXM8L2g0PgorCis8cD5UaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHRoZSBlbmNvZGluZyBvZiBtZXRob2QgdHlwZXMsIHdoaWNoIGlzIHJhcmVseQorbmVlZGVkIHRvIHVzZSBPYmplY3RpdmUtQy4gIFlvdSBzaG91bGQgc2tpcCBpdCBhdCBhIGZpcnN0IHJlYWRpbmc7IHRoZQorcnVudGltZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB3aWxsIHdvcmsgb24gbWV0aG9kcyBhbmQgY2FuIHdhbGsKK3Rocm91Z2ggdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBhbmQgaW50ZXJwcmV0IHRoZW0gZm9yIHlvdS4gIFRoZXNlCitmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyAmbGRxdW87QVBJJnJkcXVvOyBhbmQgYXJlIHRoZSBwcmVmZXJyZWQgd2F5IHRvCitpbnRlcmFjdCB3aXRoIG1ldGhvZCBzaWduYXR1cmVzIGZyb20gdXNlciBjb2RlLgorCisgPHA+QnV0IGlmIHlvdSBuZWVkIHRvIGRlYnVnIGEgcHJvYmxlbSB3aXRoIG1ldGhvZCBzaWduYXR1cmVzIGFuZCBuZWVkIHRvCitrbm93IGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCAoaS5lLiwgdGhlICZsZHF1bztBQkkmcmRxdW87KSwgcmVhZCBvbi4KKworIDxwPk1ldGhvZHMgaGF2ZSB0aGVpciAmbGRxdW87c2lnbmF0dXJlJnJkcXVvOyBlbmNvZGVkIGFuZCBtYWRlIGF2YWlsYWJsZSB0byB0aGUKK3J1bnRpbWUuICBUaGUgJmxkcXVvO3NpZ25hdHVyZSZyZHF1bzsgZW5jb2RlcyBhbGwgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvCitkeW5hbWljYWxseSBidWlsZCBpbnZvY2F0aW9ucyBvZiB0aGUgbWV0aG9kIGF0IHJ1bnRpbWU6IHJldHVybiB0eXBlCithbmQgYXJndW1lbnRzLgorCisgPHA+VGhlICZsZHF1bztzaWduYXR1cmUmcmRxdW87IGlzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICA8dWw+Cis8bGk+VGhlIHJldHVybiB0eXBlLCBpbmNsdWRpbmcgdHlwZSBxdWFsaWZpZXJzLiAgRm9yIGV4YW1wbGUsIGEgbWV0aG9kCityZXR1cm5pbmcgPGNvZGU+aW50PC9jb2RlPiB3b3VsZCBoYXZlIDxjb2RlPmk8L2NvZGU+IGhlcmUuCisKKyAgICAgPGxpPlRoZSB0b3RhbCBzaXplIChpbiBieXRlcykgcmVxdWlyZWQgdG8gcGFzcyBhbGwgdGhlIHBhcmFtZXRlcnMuICBUaGlzCitpbmNsdWRlcyB0aGUgdHdvIGhpZGRlbiBwYXJhbWV0ZXJzICh0aGUgb2JqZWN0IDxjb2RlPnNlbGY8L2NvZGU+IGFuZCB0aGUKK21ldGhvZCBzZWxlY3RvciA8Y29kZT5fY21kPC9jb2RlPikuCisKKyAgICAgPGxpPkVhY2ggYXJndW1lbnQsIHdpdGggdGhlIHR5cGUgZW5jb2RpbmcsIGZvbGxvd2VkIGJ5IHRoZSBvZmZzZXQgKGluCitieXRlcykgb2YgdGhlIGFyZ3VtZW50IGluIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnMuCisKKyA8L3VsPgorCisgPHA+Rm9yIGV4YW1wbGUsIGEgbWV0aG9kIHdpdGggbm8gYXJndW1lbnRzIGFuZCByZXR1cm5pbmcgPGNvZGU+aW50PC9jb2RlPiB3b3VsZAoraGF2ZSB0aGUgc2lnbmF0dXJlIDxjb2RlPmk4QDA6NDwvY29kZT4gaWYgdGhlIHNpemUgb2YgYSBwb2ludGVyIGlzIDQuICBUaGUKK3NpZ25hdHVyZSBpcyBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOiB0aGUgPGNvZGU+aTwvY29kZT4gaXMgdGhlIHJldHVybiB0eXBlCisoYW4gPGNvZGU+aW50PC9jb2RlPiksIHRoZSA8Y29kZT44PC9jb2RlPiBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcGFyYW1ldGVycyBpbgorYnl0ZXMgKHR3byBwb2ludGVycyBlYWNoIG9mIHNpemUgNCksIHRoZSA8Y29kZT5AMDwvY29kZT4gaXMgdGhlIGZpcnN0CitwYXJhbWV0ZXIgKGFuIG9iamVjdCBhdCBieXRlIG9mZnNldCA8Y29kZT4wPC9jb2RlPikgYW5kIDxjb2RlPjo0PC9jb2RlPiBpcyB0aGUKK3NlY29uZCBwYXJhbWV0ZXIgKGEgPGNvZGU+U0VMPC9jb2RlPiBhdCBieXRlIG9mZnNldCA8Y29kZT40PC9jb2RlPikuCisKKyA8cD5Zb3UgY2FuIGVhc2lseSBmaW5kIG1vcmUgZXhhbXBsZXMgYnkgcnVubmluZyB0aGUgJmxkcXVvO3N0cmluZ3MmcmRxdW87IHByb2dyYW0KK29uIGFuIE9iamVjdGl2ZS1DIG9iamVjdCBmaWxlIGNvbXBpbGVkIGJ5IEdDQy4gIFlvdSdsbCBzZWUgYSBsb3Qgb2YKK3N0cmluZ3MgdGhhdCBsb29rIHZlcnkgbXVjaCBsaWtlIDxjb2RlPmk4QDA6NDwvY29kZT4uICBUaGV5IGFyZSBzaWduYXR1cmVzCitvZiBPYmplY3RpdmUtQyBtZXRob2RzLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NaWNyb0JsYXplLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxNmVlMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1pY3JvQmxhemUgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIiB0aXRsZT0iTWVQIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiIHRpdGxlPSJNSVBTIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTWljcm9CbGF6ZS1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMjUgTWljcm9CbGF6ZSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtTWljcm9CbGF6ZS1PcHRpb25zLTE3MDgiPjwvYT4KKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tc29mdC1mbG9hdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTE3MDkiPjwvYT5Vc2Ugc29mdHdhcmUgZW11bGF0aW9uIGZvciBmbG9hdGluZyBwb2ludCAoZGVmYXVsdCkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWhhcmQtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1oYXJkXzAwMmRmbG9hdC0xNzEwIj48L2E+VXNlIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbWVtY3B5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbWVtY3B5LTE3MTEiPjwvYT5EbyBub3Qgb3B0aW1pemUgYmxvY2sgbW92ZXMsIHVzZSA8Y29kZT5tZW1jcHk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1jbGVhcmJzczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRjbGVhcmJzcy0xNzEyIj48L2E+VGhpcyBvcHRpb24gaXMgZGVwcmVjYXRlZC4gIFVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXplcm8taW5pdGlhbGl6ZWQtaW4tYnNzPC9zcGFuPjwvc2FtcD4gaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY3B1PTwvY29kZT48dmFyPmNwdS10eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1jcHVfMDAzZC0xNzEzIj48L2E+VXNlIGZlYXR1cmVzIG9mLCBhbmQgc2NoZWR1bGUgY29kZSBmb3IsIHRoZSBnaXZlbiBDUFUuIAorU3VwcG9ydGVkIHZhbHVlcyBhcmUgaW4gdGhlIGZvcm1hdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY8L3NwYW4+PHZhcj5YPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PHZhcj5ZWTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4uPC9zcGFuPjx2YXI+WjwvdmFyPjwvc2FtcD4mcnNxdW87LAord2hlcmUgPHZhcj5YPC92YXI+IGlzIGEgbWFqb3IgdmVyc2lvbiwgPHZhcj5ZWTwvdmFyPiBpcyB0aGUgbWlub3IgdmVyc2lvbiwgYW5kCis8dmFyPlo8L3Zhcj4gaXMgY29tcGF0aWJpbGl0eSBjb2RlLiAgRXhhbXBsZSB2YWx1ZXMgYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+djMuMDAuYTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+djQuMDAuYjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52NS4wMC5hPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY1LjAwLmI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+djUuMDAuYjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52Ni4wMC5hPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW14bC1zb2Z0LW11bDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXhsXzAwMmRzb2Z0XzAwMmRtdWwtMTcxNCI+PC9hPlVzZSBzb2Z0d2FyZSBtdWx0aXBseSBlbXVsYXRpb24gKGRlZmF1bHQpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW14bC1zb2Z0LWRpdjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXhsXzAwMmRzb2Z0XzAwMmRkaXYtMTcxNSI+PC9hPlVzZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGRpdmlkZXMgKGRlZmF1bHQpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW14bC1iYXJyZWwtc2hpZnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW14bF8wMDJkYmFycmVsXzAwMmRzaGlmdC0xNzE2Ij48L2E+VXNlIHRoZSBoYXJkd2FyZSBiYXJyZWwgc2hpZnRlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1teGwtcGF0dGVybi1jb21wYXJlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1teGxfMDAyZHBhdHRlcm5fMDAyZGNvbXBhcmUtMTcxNyI+PC9hPlVzZSBwYXR0ZXJuIGNvbXBhcmUgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zbWFsbC1kaXZpZGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc21hbGxfMDAyZGRpdmlkZXMtMTcxOCI+PC9hPlVzZSB0YWJsZSBsb29rdXAgb3B0aW1pemF0aW9uIGZvciBzbWFsbCBzaWduZWQgaW50ZWdlciBkaXZpc2lvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXhsLXN0YWNrLWNoZWNrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1teGxfMDAyZHN0YWNrXzAwMmRjaGVjay0xNzE5Ij48L2E+VGhpcyBvcHRpb24gaXMgZGVwcmVjYXRlZC4gIFVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0YWNrLWNoZWNrPC9zcGFuPjwvc2FtcD4gaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1teGwtZ3Atb3B0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1teGxfMDAyZGdwXzAwMmRvcHQtMTcyMCI+PC9hPlVzZSBHUC1yZWxhdGl2ZSA8Y29kZT4uc2RhdGE8L2NvZGU+Lzxjb2RlPi5zYnNzPC9jb2RlPiBzZWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1teGwtbXVsdGlwbHktaGlnaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXhsXzAwMmRtdWx0aXBseV8wMDJkaGlnaC0xNzIxIj48L2E+VXNlIG11bHRpcGx5IGhpZ2ggaW5zdHJ1Y3Rpb25zIGZvciBoaWdoIHBhcnQgb2YgMzJ4MzIgbXVsdGlwbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXhsLWZsb2F0LWNvbnZlcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW14bF8wMDJkZmxvYXRfMDAyZGNvbnZlcnQtMTcyMiI+PC9hPlVzZSBoYXJkd2FyZSBmbG9hdGluZy1wb2ludCBjb252ZXJzaW9uIGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1teGwtZmxvYXQtc3FydDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXhsXzAwMmRmbG9hdF8wMDJkc3FydC0xNzIzIj48L2E+VXNlIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IHNxdWFyZSByb290IGluc3RydWN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1iaWctZW5kaWFuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYmlnXzAwMmRlbmRpYW4tMTcyNCI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIGEgYmlnLWVuZGlhbiB0YXJnZXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxpdHRsZS1lbmRpYW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1saXR0bGVfMDAyZGVuZGlhbi0xNzI1Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSBsaXR0bGUtZW5kaWFuIHRhcmdldC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1teGwtcmVvcmRlcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXhsXzAwMmRyZW9yZGVyLTE3MjYiPjwvYT5Vc2UgcmVvcmRlciBpbnN0cnVjdGlvbnMgKHN3YXAgYW5kIGJ5dGUgcmV2ZXJzZWQgbG9hZC9zdG9yZSkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXhsLW1vZGUtPC9jb2RlPjx2YXI+YXBwLW1vZGVsPC92YXI+PGRkPlNlbGVjdCBhcHBsaWNhdGlvbiBtb2RlbCA8dmFyPmFwcC1tb2RlbDwvdmFyPi4gIFZhbGlkIG1vZGVscyBhcmUKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5leGVjdXRhYmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPm5vcm1hbCBleGVjdXRhYmxlIChkZWZhdWx0KSwgdXNlcyBzdGFydHVwIGNvZGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNydDAubzwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnhtZHN0dWI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Zm9yIHVzZSB3aXRoIFhpbGlueCBNaWNyb3Byb2Nlc3NvciBEZWJ1Z2dlciAoWE1EKSBiYXNlZAorc29mdHdhcmUgaW50cnVzaXZlIGRlYnVnIGFnZW50IGNhbGxlZCB4bWRzdHViLiBUaGlzIHVzZXMgc3RhcnR1cCBmaWxlCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y3J0MS5vPC9zcGFuPjwvc2FtcD4gYW5kIHNldHMgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHByb2dyYW0gdG8gMHg4MDAuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ym9vdHN0cmFwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPmZvciBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgbG9hZGVkIHVzaW5nIGEgYm9vdGxvYWRlci4gCitUaGlzIG1vZGVsIHVzZXMgc3RhcnR1cCBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jcnQyLm88L3NwYW4+PC9zYW1wPiB3aGljaCBkb2VzIG5vdCBjb250YWluIGEgcHJvY2Vzc29yCityZXNldCB2ZWN0b3IgaGFuZGxlci4gVGhpcyBpcyBzdWl0YWJsZSBmb3IgdHJhbnNmZXJyaW5nIGNvbnRyb2wgb24gYQorcHJvY2Vzc29yIHJlc2V0IHRvIHRoZSBib290bG9hZGVyIHJhdGhlciB0aGFuIHRoZSBhcHBsaWNhdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub3ZlY3RvcnM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Zm9yIGFwcGxpY2F0aW9ucyB0aGF0IGRvIG5vdCByZXF1aXJlIGFueSBvZiB0aGUKK01pY3JvQmxhemUgdmVjdG9ycy4gVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHJ1bm5pbmcKK3dpdGhpbiBhIG1vbml0b3JpbmcgYXBwbGljYXRpb24uIFRoaXMgbW9kZWwgdXNlcyA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y3J0My5vPC9zcGFuPjwvc2FtcD4gYXMgYSBzdGFydHVwIGZpbGUuIAorPC9kbD4KKworICAgICA8cD5PcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXhsLW1vZGUtPC9zcGFuPjx2YXI+YXBwLW1vZGVsPC92YXI+PC9zYW1wPiBpcyBhIGRlcHJlY2F0ZWQgYWxpYXMgZm9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXhsLW1vZGUtPC9zcGFuPjx2YXI+YXBwLW1vZGVsPC92YXI+PC9zYW1wPi4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01peGVkLURlY2xhcmF0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NaXhlZC1EZWNsYXJhdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWMwYmVjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NaXhlZC1EZWNsYXJhdGlvbnMuaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NaXhlZCBEZWNsYXJhdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ2FzdC10by1Vbmlvbi5odG1sI0Nhc3QtdG8tVW5pb24iIHRpdGxlPSJDYXN0IHRvIFVuaW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiIHRpdGxlPSJGdW5jdGlvbiBBdHRyaWJ1dGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1peGVkLURlY2xhcmF0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNhc3QtdG8tVW5pb24uaHRtbCNDYXN0LXRvLVVuaW9uIj5DYXN0IHRvIFVuaW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjI5IE1peGVkIERlY2xhcmF0aW9ucyBhbmQgQ29kZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1peGVkLWRlY2xhcmF0aW9ucy1hbmQtY29kZS0yNTYxIj48L2E+PGEgbmFtZT0iaW5kZXgtZGVjbGFyYXRpb25zXzAwMmMtbWl4ZWQtd2l0aC1jb2RlLTI1NjIiPjwvYT48YSBuYW1lPSJpbmRleC1jb2RlXzAwMmMtbWl4ZWQtd2l0aC1kZWNsYXJhdGlvbnMtMjU2MyI+PC9hPgorSVNPIEM5OSBhbmQgSVNPIEMrKyBhbGxvdyBkZWNsYXJhdGlvbnMgYW5kIGNvZGUgdG8gYmUgZnJlZWx5IG1peGVkCit3aXRoaW4gY29tcG91bmQgc3RhdGVtZW50cy4gIEFzIGFuIGV4dGVuc2lvbiwgR05VIEMgYWxzbyBhbGxvd3MgdGhpcyBpbgorQzkwIG1vZGUuICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGRvOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgaW50IGk7CisgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICBpKys7CisgICAgIGludCBqID0gaSArIDI7Cis8L3ByZT4KKyA8cD5FYWNoIGlkZW50aWZpZXIgaXMgdmlzaWJsZSBmcm9tIHdoZXJlIGl0IGlzIGRlY2xhcmVkIHVudGlsIHRoZSBlbmQgb2YKK3RoZSBlbmNsb3NpbmcgYmxvY2suCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01vZGVybi1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01vZGVybi1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjNzhhZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTW9kZXJuLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TW9kZXJuIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSSIgdGl0bGU9IkdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRyYWRpdGlvbmFsLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkuaHRtbCNUcmFkaXRpb25hbC1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJIiB0aXRsZT0iVHJhZGl0aW9uYWwgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgQVBJIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1vZGVybi1HTlUtT2JqZWN0aXZlLUMtcnVudGltZS1BUEkiPjwvYT4KKzxhIG5hbWU9Ik1vZGVybi1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRyYWRpdGlvbmFsLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkuaHRtbCNUcmFkaXRpb25hbC1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJIj5UcmFkaXRpb25hbCBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBBUEk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSSI+R05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgQVBJPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OC4xLjEgTW9kZXJuIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSTwvaDQ+CisKKzxwPlRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBwcm92aWRlcyBhbiBBUEkgd2hpY2ggaXMgc2ltaWxhciB0byB0aGUKK29uZSBwcm92aWRlZCBieSB0aGUgJmxkcXVvO09iamVjdGl2ZS1DIDIuMCZyZHF1bzsgQXBwbGUvTmVYVCBPYmplY3RpdmUtQworcnVudGltZS4gIFRoZSBBUEkgaXMgZG9jdW1lbnRlZCBpbiB0aGUgcHVibGljIGhlYWRlciBmaWxlcyBvZiB0aGUgR05VCitPYmplY3RpdmUtQyBydW50aW1lOgorCisgICAgIDx1bD4KKzxsaT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+b2JqYy9vYmpjLmg8L3NwYW4+PC9zYW1wPjogdGhpcyBpcyB0aGUgYmFzaWMgT2JqZWN0aXZlLUMgaGVhZGVyIGZpbGUsCitkZWZpbmluZyB0aGUgYmFzaWMgT2JqZWN0aXZlLUMgdHlwZXMgc3VjaCBhcyA8Y29kZT5pZDwvY29kZT4sIDxjb2RlPkNsYXNzPC9jb2RlPgorYW5kIDxjb2RlPkJPT0w8L2NvZGU+LiAgWW91IGhhdmUgdG8gaW5jbHVkZSB0aGlzIGhlYWRlciB0byBkbyBhbG1vc3QKK2FueXRoaW5nIHdpdGggT2JqZWN0aXZlLUMuCisKKyAgICAgPGxpPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5vYmpjL3J1bnRpbWUuaDwvc3Bhbj48L3NhbXA+OiB0aGlzIGhlYWRlciBkZWNsYXJlcyBtb3N0IG9mIHRoZSBwdWJsaWMgcnVudGltZQorQVBJIGZ1bmN0aW9ucyBhbGxvd2luZyB5b3UgdG8gaW5zcGVjdCBhbmQgbWFuaXB1bGF0ZSB0aGUgT2JqZWN0aXZlLUMKK3J1bnRpbWUgZGF0YSBzdHJ1Y3R1cmVzLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBmYWlybHkgc3RhbmRhcmRpemVkCithY3Jvc3MgT2JqZWN0aXZlLUMgcnVudGltZXMgYW5kIGFyZSBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBBcHBsZS9OZVhUCitPYmplY3RpdmUtQyBydW50aW1lIG9uZXMuICBJdCBkb2VzIG5vdCBkZWNsYXJlIGZ1bmN0aW9ucyBpbiBzb21lCitzcGVjaWFsaXplZCBhcmVhcyAoY29uc3RydWN0aW5nIGFuZCBmb3J3YXJkaW5nIG1lc3NhZ2UgaW52b2NhdGlvbnMsCit0aHJlYWRpbmcpIHdoaWNoIGFyZSBpbiB0aGUgb3RoZXIgaGVhZGVycyBiZWxvdy4gIFlvdSBoYXZlIHRvIGluY2x1ZGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5vYmpjL29iamMuaDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+b2JqYy9ydW50aW1lLmg8L3NwYW4+PC9zYW1wPiB0byB1c2UgYW55IG9mIHRoZQorZnVuY3Rpb25zLCBzdWNoIGFzIDxjb2RlPmNsYXNzX2dldE5hbWUoKTwvY29kZT4sIGRlY2xhcmVkIGluCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+b2JqYy9ydW50aW1lLmg8L3NwYW4+PC9zYW1wPi4KKworICAgICA8bGk+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm9iamMvbWVzc2FnZS5oPC9zcGFuPjwvc2FtcD46IHRoaXMgaGVhZGVyIGRlY2xhcmVzIHB1YmxpYyBmdW5jdGlvbnMgdXNlZCB0bworY29uc3RydWN0LCBkZWNvbnN0cnVjdCBhbmQgZm9yd2FyZCBtZXNzYWdlIGludm9jYXRpb25zLiAgQmVjYXVzZQorbWVzc2FnaW5nIGlzIGRvbmUgaW4gcXVpdGUgYSBkaWZmZXJlbnQgd2F5IG9uIGRpZmZlcmVudCBydW50aW1lcywKK2Z1bmN0aW9ucyBpbiB0aGlzIGhlYWRlciBhcmUgc3BlY2lmaWMgdG8gdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lCitpbXBsZW1lbnRhdGlvbi4KKworICAgICA8bGk+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm9iamMvb2JqYy1leGNlcHRpb24uaDwvc3Bhbj48L3NhbXA+OiB0aGlzIGhlYWRlciBkZWNsYXJlcyBzb21lIHB1YmxpYworZnVuY3Rpb25zIHJlbGF0ZWQgdG8gT2JqZWN0aXZlLUMgZXhjZXB0aW9ucy4gIEZvciBleGFtcGxlIGZ1bmN0aW9ucyBpbgordGhpcyBoZWFkZXIgYWxsb3cgeW91IHRvIHRocm93IGFuIE9iamVjdGl2ZS1DIGV4Y2VwdGlvbiBmcm9tIHBsYWluCitDL0MrKyBjb2RlLgorCisgICAgIDxsaT48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+b2JqYy9vYmpjLXN5bmMuaDwvc3Bhbj48L3NhbXA+OiB0aGlzIGhlYWRlciBkZWNsYXJlcyBzb21lIHB1YmxpYyBmdW5jdGlvbnMKK3JlbGF0ZWQgdG8gdGhlIE9iamVjdGl2ZS1DIDxjb2RlPkBzeW5jaHJvbml6ZWQoKTwvY29kZT4gc3ludGF4LCBhbGxvd2luZworeW91IHRvIGVtdWxhdGUgYW4gT2JqZWN0aXZlLUMgPGNvZGU+QHN5bmNocm9uaXplZCgpPC9jb2RlPiBibG9jayBpbiBwbGFpbgorQy9DKysgY29kZS4KKworICAgICA8bGk+PHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm9iamMvdGhyLmg8L3NwYW4+PC9zYW1wPjogdGhpcyBoZWFkZXIgZGVjbGFyZXMgYSBwdWJsaWMgcnVudGltZSBBUEkgdGhyZWFkaW5nCitsYXllciB0aGF0IGlzIG9ubHkgcHJvdmlkZWQgYnkgdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lLiAgSXQKK2RlY2xhcmVzIGZ1bmN0aW9ucyBzdWNoIGFzIDxjb2RlPm9iamNfbXV0ZXhfbG9jaygpPC9jb2RlPiwgd2hpY2ggcHJvdmlkZSBhCitwbGF0Zm9ybS1pbmRlcGVuZGVudCBzZXQgb2YgdGhyZWFkaW5nIGZ1bmN0aW9ucy4KKworIDwvdWw+CisKKyA8cD5UaGUgaGVhZGVyIGZpbGVzIGNvbnRhaW4gZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCBmdW5jdGlvbiBpbgordGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSS4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTW9kaWZpZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01vZGlmaWVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZGFlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL01vZGlmaWVycy5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Nb2RpZmllcnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyIgdGl0bGU9IkNvbnN0cmFpbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTXVsdGlfMDAyZEFsdGVybmF0aXZlLmh0bWwjTXVsdGlfMDAyZEFsdGVybmF0aXZlIiB0aXRsZT0iTXVsdGktQWx0ZXJuYXRpdmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNYWNoaW5lLUNvbnN0cmFpbnRzLmh0bWwjTWFjaGluZS1Db25zdHJhaW50cyIgdGl0bGU9Ik1hY2hpbmUgQ29uc3RyYWludHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTW9kaWZpZXJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1hY2hpbmUtQ29uc3RyYWludHMuaHRtbCNNYWNoaW5lLUNvbnN0cmFpbnRzIj5NYWNoaW5lIENvbnN0cmFpbnRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTXVsdGlfMDAyZEFsdGVybmF0aXZlLmh0bWwjTXVsdGlfMDAyZEFsdGVybmF0aXZlIj5NdWx0aS1BbHRlcm5hdGl2ZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbnN0cmFpbnRzLmh0bWwjQ29uc3RyYWludHMiPkNvbnN0cmFpbnRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni40Mi4zIENvbnN0cmFpbnQgTW9kaWZpZXIgQ2hhcmFjdGVyczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1vZGlmaWVycy1pbi1jb25zdHJhaW50cy0yODUwIj48L2E+PGEgbmFtZT0iaW5kZXgtY29uc3RyYWludC1tb2RpZmllci1jaGFyYWN0ZXJzLTI4NTEiPjwvYT4KKzwhLS0gcHJldmVudCBiYWQgcGFnZSBicmVhayB3aXRoIHRoaXMgbGluZSAtLT4KK0hlcmUgYXJlIGNvbnN0cmFpbnQgbW9kaWZpZXIgY2hhcmFjdGVycy4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwM2RfMDA3ZC1pbi1jb25zdHJhaW50LTI4NTIiPjwvYT4KKzxkbD48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPk1lYW5zIHRoYXQgdGhpcyBvcGVyYW5kIGlzIHdyaXRlLW9ubHkgZm9yIHRoaXMgaW5zdHJ1Y3Rpb246IHRoZSBwcmV2aW91cwordmFsdWUgaXMgZGlzY2FyZGVkIGFuZCByZXBsYWNlZCBieSBvdXRwdXQgZGF0YS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJiXzAwN2QtaW4tY29uc3RyYWludC0yODUzIj48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPis8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+TWVhbnMgdGhhdCB0aGlzIG9wZXJhbmQgaXMgYm90aCByZWFkIGFuZCB3cml0dGVuIGJ5IHRoZSBpbnN0cnVjdGlvbi4KKworICAgICA8cD5XaGVuIHRoZSBjb21waWxlciBmaXhlcyB1cCB0aGUgb3BlcmFuZHMgdG8gc2F0aXNmeSB0aGUgY29uc3RyYWludHMsCitpdCBuZWVkcyB0byBrbm93IHdoaWNoIG9wZXJhbmRzIGFyZSBpbnB1dHMgdG8gdGhlIGluc3RydWN0aW9uIGFuZAord2hpY2ggYXJlIG91dHB1dHMgZnJvbSBpdC4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+PTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpZGVudGlmaWVzIGFuIG91dHB1dDsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4rPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpZGVudGlmaWVzIGFuIG9wZXJhbmQgdGhhdCBpcyBib3RoIGlucHV0IGFuZCBvdXRwdXQ7IGFsbCBvdGhlciBvcGVyYW5kcworYXJlIGFzc3VtZWQgdG8gYmUgaW5wdXQgb25seS4KKworICAgICA8cD5JZiB5b3Ugc3BlY2lmeSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4rPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGEgY29uc3RyYWludCwgeW91IHB1dCBpdCBpbiB0aGUKK2ZpcnN0IGNoYXJhY3RlciBvZiB0aGUgY29uc3RyYWludCBzdHJpbmcuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAyNl8wMDdkLWluLWNvbnN0cmFpbnQtMjg1NCI+PC9hPjxhIG5hbWU9ImluZGV4LWVhcmx5Y2xvYmJlci1vcGVyYW5kLTI4NTUiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JmFtcDs8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+TWVhbnMgKGluIGEgcGFydGljdWxhciBhbHRlcm5hdGl2ZSkgdGhhdCB0aGlzIG9wZXJhbmQgaXMgYW4KKzxkZm4+ZWFybHljbG9iYmVyPC9kZm4+IG9wZXJhbmQsIHdoaWNoIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgaW5zdHJ1Y3Rpb24gaXMKK2ZpbmlzaGVkIHVzaW5nIHRoZSBpbnB1dCBvcGVyYW5kcy4gIFRoZXJlZm9yZSwgdGhpcyBvcGVyYW5kIG1heSBub3QgbGllCitpbiBhIHJlZ2lzdGVyIHRoYXQgaXMgdXNlZCBhcyBhbiBpbnB1dCBvcGVyYW5kIG9yIGFzIHBhcnQgb2YgYW55IG1lbW9yeQorYWRkcmVzcy4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZhbXA7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGxpZXMgb25seSB0byB0aGUgYWx0ZXJuYXRpdmUgaW4gd2hpY2ggaXQgaXMgd3JpdHRlbi4gIEluCitjb25zdHJhaW50cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0aXZlcywgc29tZXRpbWVzIG9uZSBhbHRlcm5hdGl2ZQorcmVxdWlyZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mYW1wOzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aGlsZSBvdGhlcnMgZG8gbm90LiAgU2VlLCBmb3IgZXhhbXBsZSwgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1vdmRmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc24gb2YgdGhlIDY4MDAwLgorCisgICAgIDxwPkFuIGlucHV0IG9wZXJhbmQgY2FuIGJlIHRpZWQgdG8gYW4gZWFybHljbG9iYmVyIG9wZXJhbmQgaWYgaXRzIG9ubHkKK3VzZSBhcyBhbiBpbnB1dCBvY2N1cnMgYmVmb3JlIHRoZSBlYXJseSByZXN1bHQgaXMgd3JpdHRlbi4gIEFkZGluZworYWx0ZXJuYXRpdmVzIG9mIHRoaXMgZm9ybSBvZnRlbiBhbGxvd3MgR0NDIHRvIHByb2R1Y2UgYmV0dGVyIGNvZGUKK3doZW4gb25seSBzb21lIG9mIHRoZSBpbnB1dHMgY2FuIGJlIGFmZmVjdGVkIGJ5IHRoZSBlYXJseWNsb2JiZXIuIAorU2VlLCBmb3IgZXhhbXBsZSwgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXVsc2kzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc24gb2YgdGhlIEFSTS4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZhbXA7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGRvZXMgbm90IG9idmlhdGUgdGhlIG5lZWQgdG8gd3JpdGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMjVfMDA3ZC1pbi1jb25zdHJhaW50LTI4NTYiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EZWNsYXJlcyB0aGUgaW5zdHJ1Y3Rpb24gdG8gYmUgY29tbXV0YXRpdmUgZm9yIHRoaXMgb3BlcmFuZCBhbmQgdGhlCitmb2xsb3dpbmcgb3BlcmFuZC4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29tcGlsZXIgbWF5IGludGVyY2hhbmdlIHRoZQordHdvIG9wZXJhbmRzIGlmIHRoYXQgaXMgdGhlIGNoZWFwZXN0IHdheSB0byBtYWtlIGFsbCBvcGVyYW5kcyBmaXQgdGhlCitjb25zdHJhaW50cy4gCitHQ0MgY2FuIG9ubHkgaGFuZGxlIG9uZSBjb21tdXRhdGl2ZSBwYWlyIGluIGFuIGFzbTsgaWYgeW91IHVzZSBtb3JlLAordGhlIGNvbXBpbGVyIG1heSBmYWlsLiAgTm90ZSB0aGF0IHlvdSBuZWVkIG5vdCB1c2UgdGhlIG1vZGlmaWVyIGlmCit0aGUgdHdvIGFsdGVybmF0aXZlcyBhcmUgc3RyaWN0bHkgaWRlbnRpY2FsOyB0aGlzIHdvdWxkIG9ubHkgd2FzdGUKK3RpbWUgaW4gdGhlIHJlbG9hZCBwYXNzLiAgVGhlIG1vZGlmaWVyIGlzIG5vdCBvcGVyYXRpb25hbCBhZnRlcgorcmVnaXN0ZXIgYWxsb2NhdGlvbiwgc28gdGhlIHJlc3VsdCBvZiA8Y29kZT5kZWZpbmVfcGVlcGhvbGUyPC9jb2RlPgorYW5kIDxjb2RlPmRlZmluZV9zcGxpdDwvY29kZT5zIHBlcmZvcm1lZCBhZnRlciByZWxvYWQgY2Fubm90IHJlbHkgb24KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBtYWtlIHRoZSBpbnRlbmRlZCBpbnNuIG1hdGNoLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMjNfMDA3ZC1pbi1jb25zdHJhaW50LTI4NTciPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TYXlzIHRoYXQgYWxsIGZvbGxvd2luZyBjaGFyYWN0ZXJzLCB1cCB0byB0aGUgbmV4dCBjb21tYSwgYXJlIHRvIGJlCitpZ25vcmVkIGFzIGEgY29uc3RyYWludC4gIFRoZXkgYXJlIHNpZ25pZmljYW50IG9ubHkgZm9yIGNob29zaW5nCityZWdpc3RlciBwcmVmZXJlbmNlcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Yl8wMDJhXzAwN2QtaW4tY29uc3RyYWludC0yODU4Ij48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+U2F5cyB0aGF0IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIHNob3VsZCBiZSBpZ25vcmVkIHdoZW4gY2hvb3NpbmcKK3JlZ2lzdGVyIHByZWZlcmVuY2VzLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87IGhhcyBubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhlCitjb25zdHJhaW50IGFzIGEgY29uc3RyYWludCwgYW5kIG5vIGVmZmVjdCBvbiByZWxvYWRpbmcuICBGb3IgTFJBCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWRkaXRpb25hbGx5IGRpc3BhcmFnZXMgc2xpZ2h0bHkgdGhlIGFsdGVybmF0aXZlIGlmIHRoZQorZm9sbG93aW5nIGNoYXJhY3RlciBtYXRjaGVzIHRoZSBvcGVyYW5kLgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTW94aWUtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Nb3hpZS1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczMDQ4NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTW94aWUtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1veGllIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjTU4xMDMwMC1PcHRpb25zIiB0aXRsZT0iTU4xMDMwMCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIiB0aXRsZT0iUERQLTExIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTW94aWUtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNQRFBfMDAyZDExLU9wdGlvbnMiPlBEUC0xMSBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjTU4xMDMwMC1PcHRpb25zIj5NTjEwMzAwIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMjkgTW94aWUgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1veGllLU9wdGlvbnMtMTg3NCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1lYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWViLTE4NzUiPjwvYT5HZW5lcmF0ZSBiaWctZW5kaWFuIGNvZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1veGllLSotKjwvc3Bhbj48L3NhbXA+JnJzcXVvOworY29uZmlndXJhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWVsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZWwtMTg3NiI+PC9hPkdlbmVyYXRlIGxpdHRsZS1lbmRpYW4gY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tY3J0MDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRjcnQwLTE4NzciPjwvYT5EbyBub3QgbGluayBpbiB0aGUgQyBydW4tdGltZSBpbml0aWFsaXphdGlvbiBvYmplY3QgZmlsZS4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL011bHRpXzAwMmRBbHRlcm5hdGl2ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NdWx0aV8wMDJkQWx0ZXJuYXRpdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDI5NGM1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9NdWx0aV8wMDJkQWx0ZXJuYXRpdmUuaHRtbApAQCAtMCwwICsxLDkzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NdWx0aS1BbHRlcm5hdGl2ZSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb25zdHJhaW50cy5odG1sI0NvbnN0cmFpbnRzIiB0aXRsZT0iQ29uc3RyYWludHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTaW1wbGUtQ29uc3RyYWludHMuaHRtbCNTaW1wbGUtQ29uc3RyYWludHMiIHRpdGxlPSJTaW1wbGUgQ29uc3RyYWludHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiIHRpdGxlPSJNb2RpZmllcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTXVsdGktQWx0ZXJuYXRpdmUiPjwvYT4KKzxhIG5hbWU9Ik11bHRpXzAwMmRBbHRlcm5hdGl2ZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiPk1vZGlmaWVyczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+U2ltcGxlIENvbnN0cmFpbnRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyI+Q29uc3RyYWludHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjQyLjIgTXVsdGlwbGUgQWx0ZXJuYXRpdmUgQ29uc3RyYWludHM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1tdWx0aXBsZS1hbHRlcm5hdGl2ZS1jb25zdHJhaW50cy0yODQ1Ij48L2E+CitTb21ldGltZXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gaGFzIG11bHRpcGxlIGFsdGVybmF0aXZlIHNldHMgb2YgcG9zc2libGUKK29wZXJhbmRzLiAgRm9yIGV4YW1wbGUsIG9uIHRoZSA2ODAwMCwgYSBsb2dpY2FsLW9yIGluc3RydWN0aW9uIGNhbiBjb21iaW5lCityZWdpc3RlciBvciBhbiBpbW1lZGlhdGUgdmFsdWUgaW50byBtZW1vcnksIG9yIGl0IGNhbiBjb21iaW5lIGFueSBraW5kIG9mCitvcGVyYW5kIGludG8gYSByZWdpc3RlcjsgYnV0IGl0IGNhbm5vdCBjb21iaW5lIG9uZSBtZW1vcnkgbG9jYXRpb24gaW50bworYW5vdGhlci4KKworIDxwPlRoZXNlIGNvbnN0cmFpbnRzIGFyZSByZXByZXNlbnRlZCBhcyBtdWx0aXBsZSBhbHRlcm5hdGl2ZXMuICBBbiBhbHRlcm5hdGl2ZQorY2FuIGJlIGRlc2NyaWJlZCBieSBhIHNlcmllcyBvZiBsZXR0ZXJzIGZvciBlYWNoIG9wZXJhbmQuICBUaGUgb3ZlcmFsbAorY29uc3RyYWludCBmb3IgYW4gb3BlcmFuZCBpcyBtYWRlIGZyb20gdGhlIGxldHRlcnMgZm9yIHRoaXMgb3BlcmFuZAorZnJvbSB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUsIGEgY29tbWEsIHRoZSBsZXR0ZXJzIGZvciB0aGlzIG9wZXJhbmQgZnJvbQordGhlIHNlY29uZCBhbHRlcm5hdGl2ZSwgYSBjb21tYSwgYW5kIHNvIG9uIHVudGlsIHRoZSBsYXN0IGFsdGVybmF0aXZlLgorCis8IS0tIEZJWE1FIElzIHRoaXMgPyBhbmQgISBzdHVmZiBvZiB1c2UgaW4gYXNtKCk/ICBJZiBub3QsIGhpZGUgdW5sZXNzIElOVEVSTkFMIC0tPgorIDxwPklmIGFsbCB0aGUgb3BlcmFuZHMgZml0IGFueSBvbmUgYWx0ZXJuYXRpdmUsIHRoZSBpbnN0cnVjdGlvbiBpcyB2YWxpZC4gCitPdGhlcndpc2UsIGZvciBlYWNoIGFsdGVybmF0aXZlLCB0aGUgY29tcGlsZXIgY291bnRzIGhvdyBtYW55IGluc3RydWN0aW9ucworbXVzdCBiZSBhZGRlZCB0byBjb3B5IHRoZSBvcGVyYW5kcyBzbyB0aGF0IHRoYXQgYWx0ZXJuYXRpdmUgYXBwbGllcy4gCitUaGUgYWx0ZXJuYXRpdmUgcmVxdWlyaW5nIHRoZSBsZWFzdCBjb3B5aW5nIGlzIGNob3Nlbi4gIElmIHR3byBhbHRlcm5hdGl2ZXMKK25lZWQgdGhlIHNhbWUgYW1vdW50IG9mIGNvcHlpbmcsIHRoZSBvbmUgdGhhdCBjb21lcyBmaXJzdCBpcyBjaG9zZW4uIAorVGhlc2UgY2hvaWNlcyBjYW4gYmUgYWx0ZXJlZCB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj88L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ITwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXJzOgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAzZl8wMDdkLWluLWNvbnN0cmFpbnQtMjg0NiI+PC9hPgorPGEgbmFtZT0iaW5kZXgtcXVlc3Rpb24tbWFyay0yODQ3Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPj88L2NvZGU+PGRkPkRpc3BhcmFnZSBzbGlnaHRseSB0aGUgYWx0ZXJuYXRpdmUgdGhhdCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4/PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnMgaW4sCithcyBhIGNob2ljZSB3aGVuIG5vIGFsdGVybmF0aXZlIGFwcGxpZXMgZXhhY3RseS4gIFRoZSBjb21waWxlciByZWdhcmRzCit0aGlzIGFsdGVybmF0aXZlIGFzIG9uZSB1bml0IG1vcmUgY29zdGx5IGZvciBlYWNoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Pzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aGF0IGFwcGVhcnMKK2luIGl0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwMjFfMDA3ZC1pbi1jb25zdHJhaW50LTI4NDgiPjwvYT48YSBuYW1lPSJpbmRleC1leGNsYW1hdGlvbi1wb2ludC0yODQ5Ij48L2E+PGJyPjxkdD48Y29kZT4hPC9jb2RlPjxkZD5EaXNwYXJhZ2Ugc2V2ZXJlbHkgdGhlIGFsdGVybmF0aXZlIHRoYXQgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ITwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGluLiAKK1RoaXMgYWx0ZXJuYXRpdmUgY2FuIHN0aWxsIGJlIHVzZWQgaWYgaXQgZml0cyB3aXRob3V0IHJlbG9hZGluZywKK2J1dCBpZiByZWxvYWRpbmcgaXMgbmVlZGVkLCBzb21lIG90aGVyIGFsdGVybmF0aXZlIHdpbGwgYmUgdXNlZC4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9OYW1lLWxvb2t1cC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9OYW1lLWxvb2t1cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MjM1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL05hbWUtbG9va3VwLmh0bWwKQEAgLTAsMCArMSwxNzIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk5hbWUgbG9va3VwIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzLmh0bWwjQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MiIHRpdGxlPSJDKysgTWlzdW5kZXJzdGFuZGluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdGF0aWMtRGVmaW5pdGlvbnMuaHRtbCNTdGF0aWMtRGVmaW5pdGlvbnMiIHRpdGxlPSJTdGF0aWMgRGVmaW5pdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUZW1wb3Jhcmllcy5odG1sI1RlbXBvcmFyaWVzIiB0aXRsZT0iVGVtcG9yYXJpZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTmFtZS1sb29rdXAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVGVtcG9yYXJpZXMuaHRtbCNUZW1wb3JhcmllcyI+VGVtcG9yYXJpZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTdGF0aWMtRGVmaW5pdGlvbnMuaHRtbCNTdGF0aWMtRGVmaW5pdGlvbnMiPlN0YXRpYyBEZWZpbml0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzLmh0bWwjQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MiPkMrKyBNaXN1bmRlcnN0YW5kaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjExLjcuMiBOYW1lIGxvb2t1cCwgdGVtcGxhdGVzLCBhbmQgYWNjZXNzaW5nIG1lbWJlcnMgb2YgYmFzZSBjbGFzc2VzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtYmFzZS1jbGFzcy1tZW1iZXJzLTM1NzQiPjwvYT48YSBuYW1lPSJpbmRleC10d29fMDAyZHN0YWdlLW5hbWUtbG9va3VwLTM1NzUiPjwvYT48YSBuYW1lPSJpbmRleC1kZXBlbmRlbnQtbmFtZS1sb29rdXAtMzU3NiI+PC9hPgorVGhlIEMrKyBzdGFuZGFyZCBwcmVzY3JpYmVzIHRoYXQgYWxsIG5hbWVzIHRoYXQgYXJlIG5vdCBkZXBlbmRlbnQgb24KK3RlbXBsYXRlIHBhcmFtZXRlcnMgYXJlIGJvdW5kIHRvIHRoZWlyIHByZXNlbnQgZGVmaW5pdGlvbnMgd2hlbiBwYXJzaW5nCithIHRlbXBsYXRlIGZ1bmN0aW9uIG9yIGNsYXNzLjxhIHJlbD0iZm9vdG5vdGUiIGhyZWY9IiNmbi0xIiBuYW1lPSJmbmQtMSI+PHN1cD4xPC9zdXA+PC9hPiAgT25seSBuYW1lcyB0aGF0IGFyZSBkZXBlbmRlbnQgYXJlIGxvb2tlZCB1cCBhdCB0aGUgcG9pbnQKK29mIGluc3RhbnRpYXRpb24uICBGb3IgZXhhbXBsZSwgY29uc2lkZXIKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgdm9pZCBmb28oZG91YmxlKTsKKyAgICAgCisgICAgICAgc3RydWN0IEEgeworICAgICAgICAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIFQmZ3Q7CisgICAgICAgICB2b2lkIGYgKCkgeworICAgICAgICAgICBmb28gKDEpOyAgICAgICAgLy8gPHNwYW4gY2xhc3M9InJvbWFuIj4xPC9zcGFuPgorICAgICAgICAgICBpbnQgaSA9IE47ICAgICAgLy8gPHNwYW4gY2xhc3M9InJvbWFuIj4yPC9zcGFuPgorICAgICAgICAgICBUIHQ7CisgICAgICAgICAgIHQuYmFyKCk7ICAgICAgICAvLyA8c3BhbiBjbGFzcz0icm9tYW4iPjM8L3NwYW4+CisgICAgICAgICAgIGZvbyAodCk7ICAgICAgICAvLyA8c3BhbiBjbGFzcz0icm9tYW4iPjQ8L3NwYW4+CisgICAgICAgICB9CisgICAgIAorICAgICAgICAgc3RhdGljIGNvbnN0IGludCBOOworICAgICAgIH07Cis8L3ByZT4KKyA8cD5IZXJlLCB0aGUgbmFtZXMgPGNvZGU+Zm9vPC9jb2RlPiBhbmQgPGNvZGU+TjwvY29kZT4gYXBwZWFyIGluIGEgY29udGV4dCB0aGF0IGRvZXMKK25vdCBkZXBlbmQgb24gdGhlIHR5cGUgb2YgPGNvZGU+VDwvY29kZT4uICBUaGUgY29tcGlsZXIgd2lsbCB0aHVzIHJlcXVpcmUgdGhhdAordGhleSBhcmUgZGVmaW5lZCBpbiB0aGUgY29udGV4dCBvZiB1c2UgaW4gdGhlIHRlbXBsYXRlLCBub3Qgb25seSBiZWZvcmUKK3RoZSBwb2ludCBvZiBpbnN0YW50aWF0aW9uLCBhbmQgd2lsbCBoZXJlIHVzZSA8Y29kZT46OmZvbyhkb3VibGUpPC9jb2RlPiBhbmQKKzxjb2RlPkE6Ok48L2NvZGU+LCByZXNwZWN0aXZlbHkuICBJbiBwYXJ0aWN1bGFyLCBpdCB3aWxsIGNvbnZlcnQgdGhlIGludGVnZXIKK3ZhbHVlIHRvIGEgPGNvZGU+ZG91YmxlPC9jb2RlPiB3aGVuIHBhc3NpbmcgaXQgdG8gPGNvZGU+Ojpmb28oZG91YmxlKTwvY29kZT4uCisKKyA8cD5Db252ZXJzZWx5LCA8Y29kZT5iYXI8L2NvZGU+IGFuZCB0aGUgY2FsbCB0byA8Y29kZT5mb288L2NvZGU+IGluIHRoZSBmb3VydGggbWFya2VkCitsaW5lIGFyZSB1c2VkIGluIGNvbnRleHRzIHRoYXQgZG8gZGVwZW5kIG9uIHRoZSB0eXBlIG9mIDxjb2RlPlQ8L2NvZGU+LCBzbwordGhleSBhcmUgb25seSBsb29rZWQgdXAgYXQgdGhlIHBvaW50IG9mIGluc3RhbnRpYXRpb24sIGFuZCB5b3UgY2FuCitwcm92aWRlIGRlY2xhcmF0aW9ucyBmb3IgdGhlbSBhZnRlciBkZWNsYXJpbmcgdGhlIHRlbXBsYXRlLCBidXQgYmVmb3JlCitpbnN0YW50aWF0aW5nIGl0LiAgSW4gcGFydGljdWxhciwgaWYgeW91IGluc3RhbnRpYXRlIDxjb2RlPkE6OmYmbHQ7aW50Jmd0OzwvY29kZT4sCit0aGUgbGFzdCBsaW5lIHdpbGwgY2FsbCBhbiBvdmVybG9hZGVkIDxjb2RlPjo6Zm9vKGludCk8L2NvZGU+IGlmIG9uZSB3YXMKK3Byb3ZpZGVkLCBldmVuIGlmIGFmdGVyIHRoZSBkZWNsYXJhdGlvbiBvZiA8Y29kZT5zdHJ1Y3QgQTwvY29kZT4uCisKKyA8cD5UaGlzIGRpc3RpbmN0aW9uIGJldHdlZW4gbG9va3VwIG9mIGRlcGVuZGVudCBhbmQgbm9uLWRlcGVuZGVudCBuYW1lcyBpcworY2FsbGVkIHR3by1zdGFnZSAob3IgZGVwZW5kZW50KSBuYW1lIGxvb2t1cC4gIEcrKyBpbXBsZW1lbnRzIGl0CitzaW5jZSB2ZXJzaW9uIDMuNC4KKworIDxwPlR3by1zdGFnZSBuYW1lIGxvb2t1cCBzb21ldGltZXMgbGVhZHMgdG8gc2l0dWF0aW9ucyB3aXRoIGJlaGF2aW9yCitkaWZmZXJlbnQgZnJvbSBub24tdGVtcGxhdGUgY29kZXMuICBUaGUgbW9zdCBjb21tb24gaXMgcHJvYmFibHkgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIFQmZ3Q7IHN0cnVjdCBCYXNlIHsKKyAgICAgICAgIGludCBpOworICAgICAgIH07CisgICAgIAorICAgICAgIHRlbXBsYXRlICZsdDt0eXBlbmFtZSBUJmd0OyBzdHJ1Y3QgRGVyaXZlZCA6IHB1YmxpYyBCYXNlJmx0O1QmZ3Q7IHsKKyAgICAgICAgIGludCBnZXRfaSgpIHsgcmV0dXJuIGk7IH0KKyAgICAgICB9OworPC9wcmU+CisgPHA+SW4gPGNvZGU+Z2V0X2koKTwvY29kZT4sIDxjb2RlPmk8L2NvZGU+IGlzIG5vdCB1c2VkIGluIGEgZGVwZW5kZW50IGNvbnRleHQsIHNvIHRoZQorY29tcGlsZXIgd2lsbCBsb29rIGZvciBhIG5hbWUgZGVjbGFyZWQgYXQgdGhlIGVuY2xvc2luZyBuYW1lc3BhY2Ugc2NvcGUKKyh3aGljaCBpcyB0aGUgZ2xvYmFsIHNjb3BlIGhlcmUpLiAgSXQgd2lsbCBub3QgbG9vayBpbnRvIHRoZSBiYXNlIGNsYXNzLAorc2luY2UgdGhhdCBpcyBkZXBlbmRlbnQgYW5kIHlvdSBtYXkgZGVjbGFyZSBzcGVjaWFsaXphdGlvbnMgb2YKKzxjb2RlPkJhc2U8L2NvZGU+IGV2ZW4gYWZ0ZXIgZGVjbGFyaW5nIDxjb2RlPkRlcml2ZWQ8L2NvZGU+LCBzbyB0aGUgY29tcGlsZXIgY2FuJ3QKK3JlYWxseSBrbm93IHdoYXQgPGNvZGU+aTwvY29kZT4gd291bGQgcmVmZXIgdG8uICBJZiB0aGVyZSBpcyBubyBnbG9iYWwKK3ZhcmlhYmxlIDxjb2RlPmk8L2NvZGU+LCB0aGVuIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlLgorCisgPHA+SW4gb3JkZXIgdG8gbWFrZSBpdCBjbGVhciB0aGF0IHlvdSB3YW50IHRoZSBtZW1iZXIgb2YgdGhlIGJhc2UgY2xhc3MsCit5b3UgbmVlZCB0byBkZWZlciBsb29rdXAgdW50aWwgaW5zdGFudGlhdGlvbiB0aW1lLCBhdCB3aGljaCB0aGUgYmFzZQorY2xhc3MgaXMga25vd24uICBGb3IgdGhpcywgeW91IG5lZWQgdG8gYWNjZXNzIDxjb2RlPmk8L2NvZGU+IGluIGEgZGVwZW5kZW50Citjb250ZXh0LCBieSBlaXRoZXIgdXNpbmcgPGNvZGU+dGhpcy0mZ3Q7aTwvY29kZT4gKHJlbWVtYmVyIHRoYXQgPGNvZGU+dGhpczwvY29kZT4gaXMgb2YKK3R5cGUgPGNvZGU+RGVyaXZlZCZsdDtUJmd0Oyo8L2NvZGU+LCBzbyBpcyBvYnZpb3VzbHkgZGVwZW5kZW50KSwgb3IgdXNpbmcKKzxjb2RlPkJhc2UmbHQ7VCZndDs6Omk8L2NvZGU+LiAgQWx0ZXJuYXRpdmVseSwgPGNvZGU+QmFzZSZsdDtUJmd0Ozo6aTwvY29kZT4gbWlnaHQgYmUgYnJvdWdodAoraW50byBzY29wZSBieSBhIDxjb2RlPnVzaW5nPC9jb2RlPi1kZWNsYXJhdGlvbi4KKworIDxwPkFub3RoZXIsIHNpbWlsYXIgZXhhbXBsZSBpbnZvbHZlcyBjYWxsaW5nIG1lbWJlciBmdW5jdGlvbnMgb2YgYSBiYXNlCitjbGFzczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgdGVtcGxhdGUgJmx0O3R5cGVuYW1lIFQmZ3Q7IHN0cnVjdCBCYXNlIHsKKyAgICAgICAgICAgaW50IGYoKTsKKyAgICAgICB9OworICAgICAKKyAgICAgICB0ZW1wbGF0ZSAmbHQ7dHlwZW5hbWUgVCZndDsgc3RydWN0IERlcml2ZWQgOiBCYXNlJmx0O1QmZ3Q7IHsKKyAgICAgICAgICAgaW50IGcoKSB7IHJldHVybiBmKCk7IH07CisgICAgICAgfTsKKzwvcHJlPgorIDxwPkFnYWluLCB0aGUgY2FsbCB0byA8Y29kZT5mKCk8L2NvZGU+IGlzIG5vdCBkZXBlbmRlbnQgb24gdGVtcGxhdGUgYXJndW1lbnRzCisodGhlcmUgYXJlIG5vIGFyZ3VtZW50cyB0aGF0IGRlcGVuZCBvbiB0aGUgdHlwZSA8Y29kZT5UPC9jb2RlPiwgYW5kIGl0IGlzIGFsc28KK25vdCBvdGhlcndpc2Ugc3BlY2lmaWVkIHRoYXQgdGhlIGNhbGwgc2hvdWxkIGJlIGluIGEgZGVwZW5kZW50IGNvbnRleHQpLiAKK1RodXMgYSBnbG9iYWwgZGVjbGFyYXRpb24gb2Ygc3VjaCBhIGZ1bmN0aW9uIG11c3QgYmUgYXZhaWxhYmxlLCBzaW5jZQordGhlIG9uZSBpbiB0aGUgYmFzZSBjbGFzcyBpcyBub3QgdmlzaWJsZSB1bnRpbCBpbnN0YW50aWF0aW9uIHRpbWUuICBUaGUKK2NvbXBpbGVyIHdpbGwgY29uc2VxdWVudGx5IHByb2R1Y2UgdGhlIGZvbGxvd2luZyBlcnJvciBtZXNzYWdlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICB4LmNjOiBJbiBtZW1iZXIgZnVuY3Rpb24gYGludCBEZXJpdmVkJmx0O1QmZ3Q7OjpnKCknOgorICAgICAgIHguY2M6NjogZXJyb3I6IHRoZXJlIGFyZSBubyBhcmd1bWVudHMgdG8gYGYnIHRoYXQgZGVwZW5kIG9uIGEgdGVtcGxhdGUKKyAgICAgICAgICBwYXJhbWV0ZXIsIHNvIGEgZGVjbGFyYXRpb24gb2YgYGYnIG11c3QgYmUgYXZhaWxhYmxlCisgICAgICAgeC5jYzo2OiBlcnJvcjogKGlmIHlvdSB1c2UgYC1mcGVybWlzc2l2ZScsIEcrKyB3aWxsIGFjY2VwdCB5b3VyIGNvZGUsIGJ1dAorICAgICAgICAgIGFsbG93aW5nIHRoZSB1c2Ugb2YgYW4gdW5kZWNsYXJlZCBuYW1lIGlzIGRlcHJlY2F0ZWQpCis8L3ByZT4KKyA8cD5UbyBtYWtlIHRoZSBjb2RlIHZhbGlkIGVpdGhlciB1c2UgPGNvZGU+dGhpcy0mZ3Q7ZigpPC9jb2RlPiwgb3IKKzxjb2RlPkJhc2UmbHQ7VCZndDs6OmYoKTwvY29kZT4uICBVc2luZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwZXJtaXNzaXZlPC9zcGFuPjwvc2FtcD4gZmxhZyB3aWxsIGFsc28gbGV0Cit0aGUgY29tcGlsZXIgYWNjZXB0IHRoZSBjb2RlLCBieSBtYXJraW5nIGFsbCBmdW5jdGlvbiBjYWxscyBmb3Igd2hpY2ggbm8KK2RlY2xhcmF0aW9uIGlzIHZpc2libGUgYXQgdGhlIHRpbWUgb2YgZGVmaW5pdGlvbiBvZiB0aGUgdGVtcGxhdGUgZm9yCitsYXRlciBsb29rdXAgYXQgaW5zdGFudGlhdGlvbiB0aW1lLCBhcyBpZiBpdCB3ZXJlIGEgZGVwZW5kZW50IGNhbGwuIAorV2UgZG8gbm90IHJlY29tbWVuZCB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBlcm1pc3NpdmU8L3NwYW4+PC9zYW1wPiB0byB3b3JrIGFyb3VuZCBpbnZhbGlkCitjb2RlLCBhbmQgaXQgd2lsbCBhbHNvIG9ubHkgY2F0Y2ggY2FzZXMgd2hlcmUgZnVuY3Rpb25zIGluIGJhc2UgY2xhc3NlcworYXJlIGNhbGxlZCwgbm90IHdoZXJlIHZhcmlhYmxlcyBpbiBiYXNlIGNsYXNzZXMgYXJlIHVzZWQgKGFzIGluIHRoZQorZXhhbXBsZSBhYm92ZSkuCisKKyA8cD5Ob3RlIHRoYXQgc29tZSBjb21waWxlcnMgKGluY2x1ZGluZyBHKysgdmVyc2lvbnMgcHJpb3IgdG8gMy40KSBnZXQgdGhlc2UKK2V4YW1wbGVzIHdyb25nIGFuZCBhY2NlcHQgYWJvdmUgY29kZSB3aXRob3V0IGFuIGVycm9yLiAgVGhvc2UgY29tcGlsZXJzCitkbyBub3QgaW1wbGVtZW50IHR3by1zdGFnZSBuYW1lIGxvb2t1cCBjb3JyZWN0bHkuCisKKyA8ZGl2IGNsYXNzPSJmb290bm90ZSI+Cis8aHI+Cis8aDQ+Rm9vdG5vdGVzPC9oND48cCBjbGFzcz0iZm9vdG5vdGUiPjxzbWFsbD5bPGEgbmFtZT0iZm4tMSIgaHJlZj0iI2ZuZC0xIj4xPC9hPl08L3NtYWxsPiBUaGUgQysrIHN0YW5kYXJkIGp1c3QgdXNlcyB0aGUKK3Rlcm0gJmxkcXVvO2RlcGVuZGVudCZyZHF1bzsgZm9yIG5hbWVzIHRoYXQgZGVwZW5kIG9uIHRoZSB0eXBlIG9yIHZhbHVlIG9mCit0ZW1wbGF0ZSBwYXJhbWV0ZXJzLiAgVGhpcyBzaG9ydGVyIHRlcm0gd2lsbCBhbHNvIGJlIHVzZWQgaW4gdGhlIHJlc3Qgb2YKK3RoaXMgc2VjdGlvbi48L3A+CisKKyA8aHI+PC9kaXY+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL05hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL05hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjMzNkMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbApAQCAtMCwwICsxLDIyMyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TmFtZWQgQWRkcmVzcyBTcGFjZXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRml4ZWRfMDAyZFBvaW50Lmh0bWwjRml4ZWRfMDAyZFBvaW50IiB0aXRsZT0iRml4ZWQtUG9pbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJaZXJvLUxlbmd0aC5odG1sI1plcm8tTGVuZ3RoIiB0aXRsZT0iWmVybyBMZW5ndGgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTmFtZWQtQWRkcmVzcy1TcGFjZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWmVyby1MZW5ndGguaHRtbCNaZXJvLUxlbmd0aCI+WmVybyBMZW5ndGg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGaXhlZF8wMDJkUG9pbnQuaHRtbCNGaXhlZF8wMDJkUG9pbnQiPkZpeGVkLVBvaW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjE2IE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUwNSI+PC9hPgorQXMgYW4gZXh0ZW5zaW9uLCBHTlUgQyBzdXBwb3J0cyBuYW1lZCBhZGRyZXNzIHNwYWNlcyBhcworZGVmaW5lZCBpbiB0aGUgTjEyNzUgZHJhZnQgb2YgSVNPL0lFQyBEVFIgMTgwMzcuICBTdXBwb3J0IGZvciBuYW1lZAorYWRkcmVzcyBzcGFjZXMgaW4gR0NDIHdpbGwgZXZvbHZlIGFzIHRoZSBkcmFmdCB0ZWNobmljYWwgcmVwb3J0CitjaGFuZ2VzLiAgQ2FsbGluZyBjb252ZW50aW9ucyBmb3IgYW55IHRhcmdldCBtaWdodCBhbHNvIGNoYW5nZS4gIEF0CitwcmVzZW50LCBvbmx5IHRoZSBBVlIsIFNQVSwgTTMyQywgYW5kIFJMNzggdGFyZ2V0cyBzdXBwb3J0IGFkZHJlc3MKK3NwYWNlcyBvdGhlciB0aGFuIHRoZSBnZW5lcmljIGFkZHJlc3Mgc3BhY2UuCisKKyA8cD5BZGRyZXNzIHNwYWNlIGlkZW50aWZpZXJzIG1heSBiZSB1c2VkIGV4YWN0bHkgbGlrZSBhbnkgb3RoZXIgQyB0eXBlCitxdWFsaWZpZXIgKGUuZy4sIDxjb2RlPmNvbnN0PC9jb2RlPiBvciA8Y29kZT52b2xhdGlsZTwvY29kZT4pLiAgU2VlIHRoZSBOMTI3NQorZG9jdW1lbnQgZm9yIG1vcmUgZGV0YWlscy4KKworIDxwPjxhIG5hbWU9IkFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcyI+PC9hPgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMTYuMSBBVlIgTmFtZWQgQWRkcmVzcyBTcGFjZXM8L2g0PgorCis8cD5PbiB0aGUgQVZSIHRhcmdldCwgdGhlcmUgYXJlIHNldmVyYWwgYWRkcmVzcyBzcGFjZXMgdGhhdCBjYW4gYmUgdXNlZAoraW4gb3JkZXIgdG8gcHV0IHJlYWQtb25seSBkYXRhIGludG8gdGhlIGZsYXNoIG1lbW9yeSBhbmQgYWNjZXNzIHRoYXQKK2RhdGEgYnkgbWVhbnMgb2YgdGhlIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zIDxjb2RlPkxQTTwvY29kZT4gb3IgPGNvZGU+RUxQTTwvY29kZT4KK25lZWRlZCB0byByZWFkIGZyb20gZmxhc2guCisKKyA8cD5QZXIgZGVmYXVsdCwgYW55IGRhdGEgaW5jbHVkaW5nIHJlYWQtb25seSBkYXRhIGlzIGxvY2F0ZWQgaW4gUkFNCisodGhlIGdlbmVyaWMgYWRkcmVzcyBzcGFjZSkgc28gdGhhdCBub24tZ2VuZXJpYyBhZGRyZXNzIHNwYWNlcyBhcmUKK25lZWRlZCB0byBsb2NhdGUgcmVhZC1vbmx5IGRhdGEgaW4gZmxhc2ggbWVtb3J5Cis8ZW0+YW5kPC9lbT4gdG8gZ2VuZXJhdGUgdGhlIHJpZ2h0IGluc3RydWN0aW9ucyB0byBhY2Nlc3MgdGhpcyBkYXRhCit3aXRob3V0IHVzaW5nIChpbmxpbmUpIGFzc2VtYmxlciBjb2RlLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5fX2ZsYXNoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZmbGFzaF8wMDdkLUFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTA2Ij48L2E+VGhlIDxjb2RlPl9fZmxhc2g8L2NvZGU+IHF1YWxpZmllciBsb2NhdGVzIGRhdGEgaW4gdGhlCis8Y29kZT4ucHJvZ21lbS5kYXRhPC9jb2RlPiBzZWN0aW9uLiBEYXRhIGlzIHJlYWQgdXNpbmcgdGhlIDxjb2RlPkxQTTwvY29kZT4KK2luc3RydWN0aW9uLiBQb2ludGVycyB0byB0aGlzIGFkZHJlc3Mgc3BhY2UgYXJlIDE2IGJpdHMgd2lkZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fZmxhc2gxPC9jb2RlPjxkdD48Y29kZT5fX2ZsYXNoMjwvY29kZT48ZHQ+PGNvZGU+X19mbGFzaDM8L2NvZGU+PGR0Pjxjb2RlPl9fZmxhc2g0PC9jb2RlPjxkdD48Y29kZT5fX2ZsYXNoNTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZmxhc2gxXzAwN2QtQVZSLU5hbWVkLUFkZHJlc3MtU3BhY2VzLTI1MDciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZmbGFzaDJfMDA3ZC1BVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUwOCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZsYXNoM18wMDdkLUFWUi1OYW1lZC1BZGRyZXNzLVNwYWNlcy0yNTA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZmxhc2g0XzAwN2QtQVZSLU5hbWVkLUFkZHJlc3MtU3BhY2VzLTI1MTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZmbGFzaDVfMDA3ZC1BVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUxMSI+PC9hPlRoZXNlIGFyZSAxNi1iaXQgYWRkcmVzcyBzcGFjZXMgbG9jYXRpbmcgZGF0YSBpbiBzZWN0aW9uCis8Y29kZT4ucHJvZ21lbTwvY29kZT48dmFyPk48L3Zhcj48Y29kZT4uZGF0YTwvY29kZT4gd2hlcmUgPHZhcj5OPC92YXI+IHJlZmVycyB0bworYWRkcmVzcyBzcGFjZSA8Y29kZT5fX2ZsYXNoPC9jb2RlPjx2YXI+TjwvdmFyPi4gCitUaGUgY29tcGlsZXIgc2V0cyB0aGUgPGNvZGU+UkFNUFo8L2NvZGU+IHNlZ21lbnQgcmVnaXN0ZXIgYXBwcm9wcmlhdGVseQorYmVmb3JlIHJlYWRpbmcgZGF0YSBieSBtZWFucyBvZiB0aGUgPGNvZGU+RUxQTTwvY29kZT4gaW5zdHJ1Y3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX21lbXg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1Zm1lbXhfMDA3ZC1BVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUxMiI+PC9hPlRoaXMgaXMgYSAyNC1iaXQgYWRkcmVzcyBzcGFjZSB0aGF0IGxpbmVhcml6ZXMgZmxhc2ggYW5kIFJBTToKK0lmIHRoZSBoaWdoIGJpdCBvZiB0aGUgYWRkcmVzcyBpcyBzZXQsIGRhdGEgaXMgcmVhZCBmcm9tCitSQU0gdXNpbmcgdGhlIGxvd2VyIHR3byBieXRlcyBhcyBSQU0gYWRkcmVzcy4gCitJZiB0aGUgaGlnaCBiaXQgb2YgdGhlIGFkZHJlc3MgaXMgY2xlYXIsIGRhdGEgaXMgcmVhZCBmcm9tIGZsYXNoCit3aXRoIDxjb2RlPlJBTVBaPC9jb2RlPiBzZXQgYWNjb3JkaW5nIHRvIHRoZSBoaWdoIGJ5dGUgb2YgdGhlIGFkZHJlc3MuIAorU2VlIDxhIGhyZWY9IkFWUi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjxjb2RlPl9fYnVpbHRpbl9hdnJfZmxhc2hfc2VnbWVudDwvY29kZT48L2E+LgorCisgICAgIDxwPk9iamVjdHMgaW4gdGhpcyBhZGRyZXNzIHNwYWNlIGFyZSBsb2NhdGVkIGluIDxjb2RlPi5wcm9nbWVteC5kYXRhPC9jb2RlPi4gCis8L2RsPgorCisgPHA+PGI+RXhhbXBsZTwvYj4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGNoYXIgbXlfcmVhZCAoY29uc3QgX19mbGFzaCBjaGFyICoqIHApCisgICAgIHsKKyAgICAgICAgIC8qIHAgaXMgYSBwb2ludGVyIHRvIFJBTSB0aGF0IHBvaW50cyB0byBhIHBvaW50ZXIgdG8gZmxhc2guCisgICAgICAgICAgICBUaGUgZmlyc3QgaW5kaXJlY3Rpb24gb2YgcCByZWFkcyB0aGF0IGZsYXNoIHBvaW50ZXIKKyAgICAgICAgICAgIGZyb20gUkFNIGFuZCB0aGUgc2Vjb25kIGluZGlyZWN0aW9uIHJlYWRzIGEgY2hhciBmcm9tIHRoaXMKKyAgICAgICAgICAgIGZsYXNoIGFkZHJlc3MuICAqLworICAgICAKKyAgICAgICAgIHJldHVybiAqKnA7CisgICAgIH0KKyAgICAgCisgICAgIC8qIExvY2F0ZSBhcnJheVtdIGluIGZsYXNoIG1lbW9yeSAqLworICAgICBjb25zdCBfX2ZsYXNoIGludCBhcnJheVtdID0geyAzLCA1LCA3LCAxMSwgMTMsIDE3LCAxOSB9OworICAgICAKKyAgICAgaW50IGkgPSAxOworICAgICAKKyAgICAgaW50IG1haW4gKHZvaWQpCisgICAgIHsKKyAgICAgICAgLyogUmV0dXJuIDE3IGJ5IHJlYWRpbmcgZnJvbSBmbGFzaCBtZW1vcnkgKi8KKyAgICAgICAgcmV0dXJuIGFycmF5W2FycmF5W2ldXTsKKyAgICAgfQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5Gb3IgZWFjaCBuYW1lZCBhZGRyZXNzIHNwYWNlIHN1cHBvcnRlZCBieSBhdnItZ2NjIHRoZXJlIGlzIGFuIGVxdWFsbHkKK25hbWVkIGJ1dCB1cHBlcmNhc2UgYnVpbHQtaW4gbWFjcm8gZGVmaW5lZC4gCitUaGUgcHVycG9zZSBpcyB0byBmYWNpbGl0YXRlIHRlc3RpbmcgaWYgcmVzcGVjdGl2ZSBhZGRyZXNzIHNwYWNlCitzdXBwb3J0IGlzIGF2YWlsYWJsZSBvciBub3Q6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjaWZkZWYgX19GTEFTSAorICAgICBjb25zdCBfX2ZsYXNoIGludCB2YXIgPSAxOworICAgICAKKyAgICAgaW50IHJlYWRfdmFyICh2b2lkKQorICAgICB7CisgICAgICAgICByZXR1cm4gdmFyOworICAgICB9CisgICAgICNlbHNlCisgICAgICNpbmNsdWRlICZsdDthdnIvcGdtc3BhY2UuaCZndDsgLyogRnJvbSBBVlItTGliQyAqLworICAgICAKKyAgICAgY29uc3QgaW50IHZhciBQUk9HTUVNID0gMTsKKyAgICAgCisgICAgIGludCByZWFkX3ZhciAodm9pZCkKKyAgICAgeworICAgICAgICAgcmV0dXJuIChpbnQpIHBnbV9yZWFkX3dvcmQgKCZhbXA7dmFyKTsKKyAgICAgfQorICAgICAjZW5kaWYgLyogX19GTEFTSCAqLworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5Ob3RpY2UgdGhhdCBhdHRyaWJ1dGUgPGEgaHJlZj0iQVZSLVZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNBVlItVmFyaWFibGUtQXR0cmlidXRlcyI+PGNvZGU+cHJvZ21lbTwvY29kZT48L2E+Citsb2NhdGVzIGRhdGEgaW4gZmxhc2ggYnV0CithY2Nlc3NlcyB0byB0aGVzZSBkYXRhIHJlYWQgZnJvbSBnZW5lcmljIGFkZHJlc3Mgc3BhY2UsIGkuZS4gCitmcm9tIFJBTSwKK3NvIHRoYXQgeW91IG5lZWQgc3BlY2lhbCBhY2Nlc3NvcnMgbGlrZSA8Y29kZT5wZ21fcmVhZF9ieXRlPC9jb2RlPgorZnJvbSA8YSBocmVmPSJodHRwOi8vbm9uZ251Lm9yZy9hdnItbGliYy91c2VyLW1hbnVhbC8iPkFWUi1MaWJDPC9hPjwhLS0gL0B3IC0tPgordG9nZXRoZXIgd2l0aCBhdHRyaWJ1dGUgPGNvZGU+cHJvZ21lbTwvY29kZT4uCisKKzxwIGNsYXNzPSJub2luZGVudCI+PGI+TGltaXRhdGlvbnMgYW5kIGNhdmVhdHM8L2I+CisKKyAgICAgPHVsPgorPGxpPlJlYWRpbmcgYWNyb3NzIHRoZSA2NCZuYnNwO0tpQiBzZWN0aW9uIGJvdW5kYXJ5IG9mCit0aGUgPGNvZGU+X19mbGFzaDwvY29kZT4gb3IgPGNvZGU+X19mbGFzaDwvY29kZT48dmFyPk48L3Zhcj4gYWRkcmVzcyBzcGFjZXMKK3Nob3dzIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIG9ubHkgYWRkcmVzcyBzcGFjZSB0aGF0CitzdXBwb3J0cyByZWFkaW5nIGFjcm9zcyB0aGUgNjQmbmJzcDtLaUIgZmxhc2ggc2VnbWVudCBib3VuZGFyaWVzIGlzCis8Y29kZT5fX21lbXg8L2NvZGU+LgorCisgICAgIDxsaT5JZiB5b3UgdXNlIG9uZSBvZiB0aGUgPGNvZGU+X19mbGFzaDwvY29kZT48dmFyPk48L3Zhcj4gYWRkcmVzcyBzcGFjZXMKK3lvdSBtdXN0IGFycmFuZ2UgeW91ciBsaW5rZXIgc2NyaXB0IHRvIGxvY2F0ZSB0aGUKKzxjb2RlPi5wcm9nbWVtPC9jb2RlPjx2YXI+TjwvdmFyPjxjb2RlPi5kYXRhPC9jb2RlPiBzZWN0aW9ucyBhY2NvcmRpbmcgdG8geW91ciBuZWVkcy4KKworICAgICA8bGk+QW55IGRhdGEgb3IgcG9pbnRlcnMgdG8gdGhlIG5vbi1nZW5lcmljIGFkZHJlc3Mgc3BhY2VzIG11c3QKK2JlIHF1YWxpZmllZCBhcyA8Y29kZT5jb25zdDwvY29kZT4sIGkuZS4gYXMgcmVhZC1vbmx5IGRhdGEuIAorVGhpcyBzdGlsbCBhcHBsaWVzIGlmIHRoZSBkYXRhIGluIG9uZSBvZiB0aGVzZSBhZGRyZXNzCitzcGFjZXMgbGlrZSBzb2Z0d2FyZSB2ZXJzaW9uIG51bWJlciBvciBjYWxpYnJhdGlvbiBsb29rdXAgdGFibGUgYXJlIGludGVuZGVkIHRvCitiZSBjaGFuZ2VkIGFmdGVyIGxvYWQgdGltZSBieSwgc2F5LCBhIGJvb3QgbG9hZGVyLiBJbiB0aGlzIGNhc2UKK3RoZSByaWdodCBxdWFsaWZpY2F0aW9uIGlzIDxjb2RlPmNvbnN0PC9jb2RlPiA8Y29kZT52b2xhdGlsZTwvY29kZT4gc28gdGhhdCB0aGUgY29tcGlsZXIKK211c3Qgbm90IG9wdGltaXplIGF3YXkga25vd24gdmFsdWVzIG9yIGluc2VydCB0aGVtCithcyBpbW1lZGlhdGVzIGludG8gb3BlcmFuZHMgb2YgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxsaT5UaGUgZm9sbG93aW5nIGNvZGUgaW5pdGlhbGl6ZXMgYSB2YXJpYWJsZSA8Y29kZT5wZm9vPC9jb2RlPgorbG9jYXRlZCBpbiBzdGF0aWMgc3RvcmFnZSB3aXRoIGEgMjQtYml0IGFkZHJlc3M6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGV4dGVybiBjb25zdCBfX21lbXggY2hhciBmb287CisgICAgICAgICAgY29uc3QgX19tZW14IHZvaWQgKnBmb28gPSAmYW1wO2ZvbzsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlN1Y2ggY29kZSByZXF1aXJlcyBhdCBsZWFzdCBiaW51dGlscyAyLjIzLCBzZWUKKzxhIGhyZWY9Imh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9QUjEzNTAzIj5QUjEzNTAzPC9hPjwhLS0gL0B3IC0tPi4KKworIDwvdWw+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4xNi4yIE0zMkMgTmFtZWQgQWRkcmVzcyBTcGFjZXM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZmYXJfMDA3ZC1NMzJDLU5hbWVkLUFkZHJlc3MtU3BhY2VzLTI1MTMiPjwvYT4KK09uIHRoZSBNMzJDIHRhcmdldCwgd2l0aCB0aGUgUjhDIGFuZCBNMTZDIENQVSB2YXJpYW50cywgdmFyaWFibGVzCitxdWFsaWZpZWQgd2l0aCA8Y29kZT5fX2ZhcjwvY29kZT4gYXJlIGFjY2Vzc2VkIHVzaW5nIDMyLWJpdCBhZGRyZXNzZXMgaW4KK29yZGVyIHRvIGFjY2VzcyBtZW1vcnkgYmV5b25kIHRoZSBmaXJzdCA2NCZuYnNwO0tpIGJ5dGVzLiAgSWYKKzxjb2RlPl9fZmFyPC9jb2RlPiBpcyB1c2VkIHdpdGggdGhlIE0zMkNNIG9yIE0zMkMgQ1BVIHZhcmlhbnRzLCBpdCBoYXMgbm8KK2VmZmVjdC4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjE2LjMgUkw3OCBOYW1lZCBBZGRyZXNzIFNwYWNlczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWZfMDA1ZmZhcl8wMDdkLVJMNzgtTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUxNCI+PC9hPgorT24gdGhlIFJMNzggdGFyZ2V0LCB2YXJpYWJsZXMgcXVhbGlmaWVkIHdpdGggPGNvZGU+X19mYXI8L2NvZGU+IGFyZSBhY2Nlc3NlZAord2l0aCAzMi1iaXQgcG9pbnRlcnMgKDIwLWJpdCBhZGRyZXNzZXMpIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IDE2LWJpdAorYWRkcmVzc2VzLiAgTm9uLWZhciB2YXJpYWJsZXMgYXJlIGFzc3VtZWQgdG8gYXBwZWFyIGluIHRoZSB0b3Btb3N0Cis2NCZuYnNwO0tpQiBvZiB0aGUgYWRkcmVzcyBzcGFjZS4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjE2LjQgU1BVIE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmZWFfMDA3ZC1TUFUtTmFtZWQtQWRkcmVzcy1TcGFjZXMtMjUxNSI+PC9hPgorT24gdGhlIFNQVSB0YXJnZXQgdmFyaWFibGVzIG1heSBiZSBkZWNsYXJlZCBhcworYmVsb25naW5nIHRvIGFub3RoZXIgYWRkcmVzcyBzcGFjZSBieSBxdWFsaWZ5aW5nIHRoZSB0eXBlIHdpdGggdGhlCis8Y29kZT5fX2VhPC9jb2RlPiBhZGRyZXNzIHNwYWNlIGlkZW50aWZpZXI6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBleHRlcm4gaW50IF9fZWEgaTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBzcGVjaWFsIGNvZGUgdG8gYWNjZXNzIHRoZSB2YXJpYWJsZSA8Y29kZT5pPC9jb2RlPi4gCitJdCBtYXkgdXNlIHJ1bnRpbWUgbGlicmFyeQorc3VwcG9ydCwgb3IgZ2VuZXJhdGUgc3BlY2lhbCBtYWNoaW5lIGluc3RydWN0aW9ucyB0byBhY2Nlc3MgdGhhdCBhZGRyZXNzCitzcGFjZS4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTmFtZXNwYWNlLUFzc29jaWF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL05hbWVzcGFjZS1Bc3NvY2lhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjN2I2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL05hbWVzcGFjZS1Bc3NvY2lhdGlvbi5odG1sCkBAIC0wLDAgKzEsOTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk5hbWVzcGFjZSBBc3NvY2lhdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyIgdGl0bGU9IkMrKyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRnVuY3Rpb24tTXVsdGl2ZXJzaW9uaW5nLmh0bWwjRnVuY3Rpb24tTXVsdGl2ZXJzaW9uaW5nIiB0aXRsZT0iRnVuY3Rpb24gTXVsdGl2ZXJzaW9uaW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVHlwZS1UcmFpdHMuaHRtbCNUeXBlLVRyYWl0cyIgdGl0bGU9IlR5cGUgVHJhaXRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5hbWVzcGFjZS1Bc3NvY2lhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUeXBlLVRyYWl0cy5odG1sI1R5cGUtVHJhaXRzIj5UeXBlIFRyYWl0czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZ1bmN0aW9uLU11bHRpdmVyc2lvbmluZy5odG1sI0Z1bmN0aW9uLU11bHRpdmVyc2lvbmluZyI+RnVuY3Rpb24gTXVsdGl2ZXJzaW9uaW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiPkMrKyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny45IE5hbWVzcGFjZSBBc3NvY2lhdGlvbjwvaDM+CisKKzxwPjxzdHJvbmc+Q2F1dGlvbjo8L3N0cm9uZz4gVGhlIHNlbWFudGljcyBvZiB0aGlzIGV4dGVuc2lvbiBhcmUgZXF1aXZhbGVudAordG8gQysrIDIwMTEgaW5saW5lIG5hbWVzcGFjZXMuICBVc2VycyBzaG91bGQgdXNlIGlubGluZSBuYW1lc3BhY2VzCitpbnN0ZWFkIGFzIHRoaXMgZXh0ZW5zaW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgRysrLgorCisgPHA+QSB1c2luZy1kaXJlY3RpdmUgd2l0aCA8Y29kZT5fX2F0dHJpYnV0ZSAoKHN0cm9uZykpPC9jb2RlPiBpcyBzdHJvbmdlcgordGhhbiBhIG5vcm1hbCB1c2luZy1kaXJlY3RpdmUgaW4gdHdvIHdheXM6CisKKyAgICAgPHVsPgorPGxpPlRlbXBsYXRlcyBmcm9tIHRoZSB1c2VkIG5hbWVzcGFjZSBjYW4gYmUgc3BlY2lhbGl6ZWQgYW5kIGV4cGxpY2l0bHkKK2luc3RhbnRpYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIG1lbWJlcnMgb2YgdGhlIHVzaW5nIG5hbWVzcGFjZS4KKworICAgICA8bGk+VGhlIHVzaW5nIG5hbWVzcGFjZSBpcyBjb25zaWRlcmVkIGFuIGFzc29jaWF0ZWQgbmFtZXNwYWNlIG9mIGFsbAordGVtcGxhdGVzIGluIHRoZSB1c2VkIG5hbWVzcGFjZSBmb3IgcHVycG9zZXMgb2YgYXJndW1lbnQtZGVwZW5kZW50CituYW1lIGxvb2t1cC4gCis8L3VsPgorCisgPHA+VGhlIHVzZWQgbmFtZXNwYWNlIG11c3QgYmUgbmVzdGVkIHdpdGhpbiB0aGUgdXNpbmcgbmFtZXNwYWNlIHNvIHRoYXQKK25vcm1hbCB1bnF1YWxpZmllZCBsb29rdXAgd29ya3MgcHJvcGVybHkuCisKKyA8cD5UaGlzIGlzIHVzZWZ1bCBmb3IgY29tcG9zaW5nIGEgbmFtZXNwYWNlIHRyYW5zcGFyZW50bHkgZnJvbQoraW1wbGVtZW50YXRpb24gbmFtZXNwYWNlcy4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgbmFtZXNwYWNlIHN0ZCB7CisgICAgICAgbmFtZXNwYWNlIGRlYnVnIHsKKyAgICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgQSB7IH07CisgICAgICAgfQorICAgICAgIHVzaW5nIG5hbWVzcGFjZSBkZWJ1ZyBfX2F0dHJpYnV0ZSAoKF9fc3Ryb25nX18pKTsKKyAgICAgICB0ZW1wbGF0ZSAmbHQ7Jmd0OyBzdHJ1Y3QgQSZsdDtpbnQmZ3Q7IHsgfTsgICAvLyA8c3BhbiBjbGFzcz0icm9tYW4iPm9rIHRvIHNwZWNpYWxpemU8L3NwYW4+CisgICAgIAorICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OyB2b2lkIGYgKEEmbHQ7VCZndDspOworICAgICB9CisgICAgIAorICAgICBpbnQgbWFpbigpCisgICAgIHsKKyAgICAgICBmIChzdGQ6OkEmbHQ7ZmxvYXQmZ3Q7KCkpOyAgICAgICAgICAgICAvLyA8c3BhbiBjbGFzcz0icm9tYW4iPmxvb2t1cCBmaW5kczwvc3Bhbj4gc3RkOjpmCisgICAgICAgZiAoc3RkOjpBJmx0O2ludCZndDsoKSk7CisgICAgIH0KKzwvcHJlPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTmVzdGVkLUZ1bmN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9OZXN0ZWQtRnVuY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmMmVjYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTmVzdGVkLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTcwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5OZXN0ZWQgRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxhYmVscy1hcy1WYWx1ZXMuaHRtbCNMYWJlbHMtYXMtVmFsdWVzIiB0aXRsZT0iTGFiZWxzIGFzIFZhbHVlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNvbnN0cnVjdGluZy1DYWxscy5odG1sI0NvbnN0cnVjdGluZy1DYWxscyIgdGl0bGU9IkNvbnN0cnVjdGluZyBDYWxscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJOZXN0ZWQtRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvbnN0cnVjdGluZy1DYWxscy5odG1sI0NvbnN0cnVjdGluZy1DYWxscyI+Q29uc3RydWN0aW5nIENhbGxzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI0xhYmVscy1hcy1WYWx1ZXMiPkxhYmVscyBhcyBWYWx1ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNCBOZXN0ZWQgRnVuY3Rpb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbmVzdGVkLWZ1bmN0aW9ucy0yNDEyIj48L2E+PGEgbmFtZT0iaW5kZXgtZG93bndhcmQtZnVuYXJncy0yNDEzIj48L2E+PGEgbmFtZT0iaW5kZXgtdGh1bmtzLTI0MTQiPjwvYT4KK0EgPGRmbj5uZXN0ZWQgZnVuY3Rpb248L2Rmbj4gaXMgYSBmdW5jdGlvbiBkZWZpbmVkIGluc2lkZSBhbm90aGVyIGZ1bmN0aW9uLiAKK05lc3RlZCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZCBhcyBhbiBleHRlbnNpb24gaW4gR05VIEMsIGJ1dCBhcmUgbm90CitzdXBwb3J0ZWQgYnkgR05VIEMrKy4KKworIDxwPlRoZSBuZXN0ZWQgZnVuY3Rpb24ncyBuYW1lIGlzIGxvY2FsIHRvIHRoZSBibG9jayB3aGVyZSBpdCBpcyBkZWZpbmVkLiAKK0ZvciBleGFtcGxlLCBoZXJlIHdlIGRlZmluZSBhIG5lc3RlZCBmdW5jdGlvbiBuYW1lZCA8Y29kZT5zcXVhcmU8L2NvZGU+LCBhbmQKK2NhbGwgaXQgdHdpY2U6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBmb28gKGRvdWJsZSBhLCBkb3VibGUgYikKKyAgICAgeworICAgICAgIGRvdWJsZSBzcXVhcmUgKGRvdWJsZSB6KSB7IHJldHVybiB6ICogejsgfQorICAgICAKKyAgICAgICByZXR1cm4gc3F1YXJlIChhKSArIHNxdWFyZSAoYik7CisgICAgIH0KKzwvcHJlPgorIDxwPlRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyBhbGwgdGhlIHZhcmlhYmxlcyBvZiB0aGUgY29udGFpbmluZworZnVuY3Rpb24gdGhhdCBhcmUgdmlzaWJsZSBhdCB0aGUgcG9pbnQgb2YgaXRzIGRlZmluaXRpb24uICBUaGlzIGlzCitjYWxsZWQgPGRmbj5sZXhpY2FsIHNjb3Bpbmc8L2Rmbj4uICBGb3IgZXhhbXBsZSwgaGVyZSB3ZSBzaG93IGEgbmVzdGVkCitmdW5jdGlvbiB3aGljaCB1c2VzIGFuIGluaGVyaXRlZCB2YXJpYWJsZSBuYW1lZCA8Y29kZT5vZmZzZXQ8L2NvZGU+OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYmFyIChpbnQgKmFycmF5LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkKKyAgICAgeworICAgICAgIGludCBhY2Nlc3MgKGludCAqYXJyYXksIGludCBpbmRleCkKKyAgICAgICAgIHsgcmV0dXJuIGFycmF5W2luZGV4ICsgb2Zmc2V0XTsgfQorICAgICAgIGludCBpOworICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBzaXplOyBpKyspCisgICAgICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPi4uLjwvc3Bhbj4gKi8gYWNjZXNzIChhcnJheSwgaSkgLyogPHNwYW4gY2xhc3M9InJvbWFuIj4uLi48L3NwYW4+ICovCisgICAgIH0KKzwvcHJlPgorIDxwPk5lc3RlZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBhcmUgcGVybWl0dGVkIHdpdGhpbiBmdW5jdGlvbnMgaW4gdGhlIHBsYWNlcword2hlcmUgdmFyaWFibGUgZGVmaW5pdGlvbnMgYXJlIGFsbG93ZWQ7IHRoYXQgaXMsIGluIGFueSBibG9jaywgbWl4ZWQKK3dpdGggdGhlIG90aGVyIGRlY2xhcmF0aW9ucyBhbmQgc3RhdGVtZW50cyBpbiB0aGUgYmxvY2suCisKKyA8cD5JdCBpcyBwb3NzaWJsZSB0byBjYWxsIHRoZSBuZXN0ZWQgZnVuY3Rpb24gZnJvbSBvdXRzaWRlIHRoZSBzY29wZSBvZiBpdHMKK25hbWUgYnkgc3RvcmluZyBpdHMgYWRkcmVzcyBvciBwYXNzaW5nIHRoZSBhZGRyZXNzIHRvIGFub3RoZXIgZnVuY3Rpb246CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBoYWNrIChpbnQgKmFycmF5LCBpbnQgc2l6ZSkKKyAgICAgeworICAgICAgIHZvaWQgc3RvcmUgKGludCBpbmRleCwgaW50IHZhbHVlKQorICAgICAgICAgeyBhcnJheVtpbmRleF0gPSB2YWx1ZTsgfQorICAgICAKKyAgICAgICBpbnRlcm1lZGlhdGUgKHN0b3JlLCBzaXplKTsKKyAgICAgfQorPC9wcmU+CisgPHA+SGVyZSwgdGhlIGZ1bmN0aW9uIDxjb2RlPmludGVybWVkaWF0ZTwvY29kZT4gcmVjZWl2ZXMgdGhlIGFkZHJlc3Mgb2YKKzxjb2RlPnN0b3JlPC9jb2RlPiBhcyBhbiBhcmd1bWVudC4gIElmIDxjb2RlPmludGVybWVkaWF0ZTwvY29kZT4gY2FsbHMgPGNvZGU+c3RvcmU8L2NvZGU+LAordGhlIGFyZ3VtZW50cyBnaXZlbiB0byA8Y29kZT5zdG9yZTwvY29kZT4gYXJlIHVzZWQgdG8gc3RvcmUgaW50byA8Y29kZT5hcnJheTwvY29kZT4uIAorQnV0IHRoaXMgdGVjaG5pcXVlIHdvcmtzIG9ubHkgc28gbG9uZyBhcyB0aGUgY29udGFpbmluZyBmdW5jdGlvbgorKDxjb2RlPmhhY2s8L2NvZGU+LCBpbiB0aGlzIGV4YW1wbGUpIGRvZXMgbm90IGV4aXQuCisKKyA8cD5JZiB5b3UgdHJ5IHRvIGNhbGwgdGhlIG5lc3RlZCBmdW5jdGlvbiB0aHJvdWdoIGl0cyBhZGRyZXNzIGFmdGVyIHRoZQorY29udGFpbmluZyBmdW5jdGlvbiBleGl0cywgYWxsIGhlbGwgYnJlYWtzIGxvb3NlLiAgSWYgeW91IHRyeQordG8gY2FsbCBpdCBhZnRlciBhIGNvbnRhaW5pbmcgc2NvcGUgbGV2ZWwgZXhpdHMsIGFuZCBpZiBpdCByZWZlcnMKK3RvIHNvbWUgb2YgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gc2NvcGUsIHlvdSBtYXkgYmUgbHVja3ksCitidXQgaXQncyBub3Qgd2lzZSB0byB0YWtlIHRoZSByaXNrLiAgSWYsIGhvd2V2ZXIsIHRoZSBuZXN0ZWQgZnVuY3Rpb24KK2RvZXMgbm90IHJlZmVyIHRvIGFueXRoaW5nIHRoYXQgaGFzIGdvbmUgb3V0IG9mIHNjb3BlLCB5b3Ugc2hvdWxkIGJlCitzYWZlLgorCisgPHA+R0NDIGltcGxlbWVudHMgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgbmVzdGVkIGZ1bmN0aW9uIHVzaW5nIGEgdGVjaG5pcXVlCitjYWxsZWQgPGRmbj50cmFtcG9saW5lczwvZGZuPi4gIFRoaXMgdGVjaG5pcXVlIHdhcyBkZXNjcmliZWQgaW4KKzxjaXRlPkxleGljYWwgQ2xvc3VyZXMgZm9yIEMrKzwvY2l0ZT4gKFRob21hcyBNLiBCcmV1ZWwsIFVTRU5JWAorQysrIENvbmZlcmVuY2UgUHJvY2VlZGluZ3MsIE9jdG9iZXIgMTctMjEsIDE5ODgpLgorCisgPHA+QSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGp1bXAgdG8gYSBsYWJlbCBpbmhlcml0ZWQgZnJvbSBhIGNvbnRhaW5pbmcKK2Z1bmN0aW9uLCBwcm92aWRlZCB0aGUgbGFiZWwgaXMgZXhwbGljaXRseSBkZWNsYXJlZCBpbiB0aGUgY29udGFpbmluZworZnVuY3Rpb24gKHNlZSA8YSBocmVmPSJMb2NhbC1MYWJlbHMuaHRtbCNMb2NhbC1MYWJlbHMiPkxvY2FsIExhYmVsczwvYT4pLiAgU3VjaCBhIGp1bXAgcmV0dXJucyBpbnN0YW50bHkgdG8gdGhlCitjb250YWluaW5nIGZ1bmN0aW9uLCBleGl0aW5nIHRoZSBuZXN0ZWQgZnVuY3Rpb24gdGhhdCBkaWQgdGhlCis8Y29kZT5nb3RvPC9jb2RlPiBhbmQgYW55IGludGVybWVkaWF0ZSBmdW5jdGlvbnMgYXMgd2VsbC4gIEhlcmUgaXMgYW4gZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGJhciAoaW50ICphcnJheSwgaW50IG9mZnNldCwgaW50IHNpemUpCisgICAgIHsKKyAgICAgICBfX2xhYmVsX18gZmFpbHVyZTsKKyAgICAgICBpbnQgYWNjZXNzIChpbnQgKmFycmF5LCBpbnQgaW5kZXgpCisgICAgICAgICB7CisgICAgICAgICAgIGlmIChpbmRleCAmZ3Q7IHNpemUpCisgICAgICAgICAgICAgZ290byBmYWlsdXJlOworICAgICAgICAgICByZXR1cm4gYXJyYXlbaW5kZXggKyBvZmZzZXRdOworICAgICAgICAgfQorICAgICAgIGludCBpOworICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBzaXplOyBpKyspCisgICAgICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPi4uLjwvc3Bhbj4gKi8gYWNjZXNzIChhcnJheSwgaSkgLyogPHNwYW4gY2xhc3M9InJvbWFuIj4uLi48L3NwYW4+ICovCisgICAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj4uLi48L3NwYW4+ICovCisgICAgICAgcmV0dXJuIDA7CisgICAgIAorICAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj5Db250cm9sIGNvbWVzIGhlcmUgZnJvbSA8L3NwYW4+PGNvZGU+YWNjZXNzPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+CisgICAgICAgICBpZiBpdCBkZXRlY3RzIGFuIGVycm9yLjwvc3Bhbj4gICovCisgICAgICBmYWlsdXJlOgorICAgICAgIHJldHVybiAtMTsKKyAgICAgfQorPC9wcmU+CisgPHA+QSBuZXN0ZWQgZnVuY3Rpb24gYWx3YXlzIGhhcyBubyBsaW5rYWdlLiAgRGVjbGFyaW5nIG9uZSB3aXRoCis8Y29kZT5leHRlcm48L2NvZGU+IG9yIDxjb2RlPnN0YXRpYzwvY29kZT4gaXMgZXJyb25lb3VzLiAgSWYgeW91IG5lZWQgdG8gZGVjbGFyZSB0aGUgbmVzdGVkIGZ1bmN0aW9uCitiZWZvcmUgaXRzIGRlZmluaXRpb24sIHVzZSA8Y29kZT5hdXRvPC9jb2RlPiAod2hpY2ggaXMgb3RoZXJ3aXNlIG1lYW5pbmdsZXNzCitmb3IgZnVuY3Rpb24gZGVjbGFyYXRpb25zKS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGJhciAoaW50ICphcnJheSwgaW50IG9mZnNldCwgaW50IHNpemUpCisgICAgIHsKKyAgICAgICBfX2xhYmVsX18gZmFpbHVyZTsKKyAgICAgICBhdXRvIGludCBhY2Nlc3MgKGludCAqLCBpbnQpOworICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICAgIGludCBhY2Nlc3MgKGludCAqYXJyYXksIGludCBpbmRleCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgaWYgKGluZGV4ICZndDsgc2l6ZSkKKyAgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgICAgIHJldHVybiBhcnJheVtpbmRleCArIG9mZnNldF07CisgICAgICAgICB9CisgICAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj4uLi48L3NwYW4+ICovCisgICAgIH0KKzwvcHJlPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvTm9uXzAwMmRidWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL05vbl8wMDJkYnVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTg4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL05vbl8wMDJkYnVncy5odG1sCkBAIC0wLDAgKzEsMjczIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Ob24tYnVncyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSIgdGl0bGU9IlRyb3VibGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzIiB0aXRsZT0iQysrIE1pc3VuZGVyc3RhbmRpbmdzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iV2FybmluZ3MtYW5kLUVycm9ycy5odG1sI1dhcm5pbmdzLWFuZC1FcnJvcnMiIHRpdGxlPSJXYXJuaW5ncyBhbmQgRXJyb3JzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5vbi1idWdzIj48L2E+Cis8YSBuYW1lPSJOb25fMDAyZGJ1Z3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iV2FybmluZ3MtYW5kLUVycm9ycy5odG1sI1dhcm5pbmdzLWFuZC1FcnJvcnMiPldhcm5pbmdzIGFuZCBFcnJvcnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzIj5DKysgTWlzdW5kZXJzdGFuZGluZ3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSI+VHJvdWJsZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjExLjggQ2VydGFpbiBDaGFuZ2VzIFdlIERvbid0IFdhbnQgdG8gTWFrZTwvaDM+CisKKzxwPlRoaXMgc2VjdGlvbiBsaXN0cyBjaGFuZ2VzIHRoYXQgcGVvcGxlIGZyZXF1ZW50bHkgcmVxdWVzdCwgYnV0IHdoaWNoCit3ZSBkbyBub3QgbWFrZSBiZWNhdXNlIHdlIHRoaW5rIEdDQyBpcyBiZXR0ZXIgd2l0aG91dCB0aGVtLgorCisgICAgIDx1bD4KKzxsaT5DaGVja2luZyB0aGUgbnVtYmVyIGFuZCB0eXBlIG9mIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uIHdoaWNoIGhhcyBhbgorb2xkLWZhc2hpb25lZCBkZWZpbml0aW9uIGFuZCBubyBwcm90b3R5cGUuCisKKyAgICAgPHA+U3VjaCBhIGZlYXR1cmUgd291bGQgd29yayBvbmx5IG9jY2FzaW9uYWxseSZtZGFzaDtvbmx5IGZvciBjYWxscyB0aGF0IGFwcGVhcgoraW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgY2FsbGVkIGZ1bmN0aW9uLCBmb2xsb3dpbmcgdGhlIGRlZmluaXRpb24uICBUaGUKK29ubHkgd2F5IHRvIGNoZWNrIGFsbCBjYWxscyByZWxpYWJseSBpcyB0byBhZGQgYSBwcm90b3R5cGUgZm9yIHRoZQorZnVuY3Rpb24uICBCdXQgYWRkaW5nIGEgcHJvdG90eXBlIGVsaW1pbmF0ZXMgdGhlIG1vdGl2YXRpb24gZm9yIHRoaXMKK2ZlYXR1cmUuICBTbyB0aGUgZmVhdHVyZSBpcyBub3Qgd29ydGh3aGlsZS4KKworICAgICA8bGk+V2FybmluZyBhYm91dCB1c2luZyBhbiBleHByZXNzaW9uIHdob3NlIHR5cGUgaXMgc2lnbmVkIGFzIGEgc2hpZnQgY291bnQuCisKKyAgICAgPHA+U2hpZnQgY291bnQgb3BlcmFuZHMgYXJlIHByb2JhYmx5IHNpZ25lZCBtb3JlIG9mdGVuIHRoYW4gdW5zaWduZWQuIAorV2FybmluZyBhYm91dCB0aGlzIHdvdWxkIGNhdXNlIGZhciBtb3JlIGFubm95YW5jZSB0aGFuIGdvb2QuCisKKyAgICAgPGxpPldhcm5pbmcgYWJvdXQgYXNzaWduaW5nIGEgc2lnbmVkIHZhbHVlIHRvIGFuIHVuc2lnbmVkIHZhcmlhYmxlLgorCisgICAgIDxwPlN1Y2ggYXNzaWdubWVudHMgbXVzdCBiZSB2ZXJ5IGNvbW1vbjsgd2FybmluZyBhYm91dCB0aGVtIHdvdWxkIGNhdXNlCittb3JlIGFubm95YW5jZSB0aGFuIGdvb2QuCisKKyAgICAgPGxpPldhcm5pbmcgd2hlbiBhIG5vbi12b2lkIGZ1bmN0aW9uIHZhbHVlIGlzIGlnbm9yZWQuCisKKyAgICAgPHA+QyBjb250YWlucyBtYW55IHN0YW5kYXJkIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBhIHZhbHVlIHRoYXQgbW9zdAorcHJvZ3JhbXMgY2hvb3NlIHRvIGlnbm9yZS4gIE9uZSBvYnZpb3VzIGV4YW1wbGUgaXMgPGNvZGU+cHJpbnRmPC9jb2RlPi4gCitXYXJuaW5nIGFib3V0IHRoaXMgcHJhY3RpY2Ugb25seSBsZWFkcyB0aGUgZGVmZW5zaXZlIHByb2dyYW1tZXIgdG8KK2NsdXR0ZXIgcHJvZ3JhbXMgd2l0aCBkb3plbnMgb2YgY2FzdHMgdG8gPGNvZGU+dm9pZDwvY29kZT4uICBTdWNoIGNhc3RzIGFyZQorcmVxdWlyZWQgc28gZnJlcXVlbnRseSB0aGF0IHRoZXkgYmVjb21lIHZpc3VhbCBub2lzZS4gIFdyaXRpbmcgdGhvc2UKK2Nhc3RzIGJlY29tZXMgc28gYXV0b21hdGljIHRoYXQgdGhleSBubyBsb25nZXIgY29udmV5IHVzZWZ1bAoraW5mb3JtYXRpb24gYWJvdXQgdGhlIGludGVudGlvbnMgb2YgdGhlIHByb2dyYW1tZXIuICBGb3IgZnVuY3Rpb25zCit3aGVyZSB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBuZXZlciBiZSBpZ25vcmVkLCB1c2UgdGhlCis8Y29kZT53YXJuX3VudXNlZF9yZXN1bHQ8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZSAoc2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPikuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWZzaG9ydF8wMDJkZW51bXMtMzU3OSI+PC9hPk1ha2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNob3J0LWVudW1zPC9zcGFuPjwvc2FtcD4gdGhlIGRlZmF1bHQuCisKKyAgICAgPHA+VGhpcyB3b3VsZCBjYXVzZSBzdG9yYWdlIGxheW91dCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBtb3N0IG90aGVyIEMKK2NvbXBpbGVycy4gIEFuZCBpdCBkb2Vzbid0IHNlZW0gdmVyeSBpbXBvcnRhbnQsIGdpdmVuIHRoYXQgeW91IGNhbiBnZXQKK3RoZSBzYW1lIHJlc3VsdCBpbiBvdGhlciB3YXlzLiAgVGhlIGNhc2Ugd2hlcmUgaXQgbWF0dGVycyBtb3N0IGlzIHdoZW4KK3RoZSBlbnVtZXJhdGlvbi12YWx1ZWQgb2JqZWN0IGlzIGluc2lkZSBhIHN0cnVjdHVyZSwgYW5kIGluIHRoYXQgY2FzZQoreW91IGNhbiBzcGVjaWZ5IGEgZmllbGQgd2lkdGggZXhwbGljaXRseS4KKworICAgICA8bGk+TWFraW5nIGJpdC1maWVsZHMgdW5zaWduZWQgYnkgZGVmYXVsdCBvbiBwYXJ0aWN1bGFyIG1hY2hpbmVzIHdoZXJlICZsZHF1bzt0aGUKK0FCSSBzdGFuZGFyZCZyZHF1bzsgc2F5cyB0byBkbyBzby4KKworICAgICA8cD5UaGUgSVNPIEMgc3RhbmRhcmQgbGVhdmVzIGl0IHVwIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiB3aGV0aGVyIGEgYml0LWZpZWxkCitkZWNsYXJlZCBwbGFpbiA8Y29kZT5pbnQ8L2NvZGU+IGlzIHNpZ25lZCBvciBub3QuICBUaGlzIGluIGVmZmVjdCBjcmVhdGVzIHR3bworYWx0ZXJuYXRpdmUgZGlhbGVjdHMgb2YgQy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1mc2lnbmVkXzAwMmRiaXRmaWVsZHMtMzU4MCI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bnNpZ25lZF8wMDJkYml0ZmllbGRzLTM1ODEiPjwvYT5UaGUgR05VIEMgY29tcGlsZXIgc3VwcG9ydHMgYm90aCBkaWFsZWN0czsgeW91IGNhbiBzcGVjaWZ5IHRoZSBzaWduZWQKK2RpYWxlY3Qgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNpZ25lZC1iaXRmaWVsZHM8L3NwYW4+PC9zYW1wPiBhbmQgdGhlIHVuc2lnbmVkIGRpYWxlY3Qgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnNpZ25lZC1iaXRmaWVsZHM8L3NwYW4+PC9zYW1wPi4gIEhvd2V2ZXIsIHRoaXMgbGVhdmVzIG9wZW4gdGhlIHF1ZXN0aW9uIG9mCit3aGljaCBkaWFsZWN0IHRvIHVzZSBieSBkZWZhdWx0LgorCisgICAgIDxwPkN1cnJlbnRseSwgdGhlIHByZWZlcnJlZCBkaWFsZWN0IG1ha2VzIHBsYWluIGJpdC1maWVsZHMgc2lnbmVkLCBiZWNhdXNlCit0aGlzIGlzIHNpbXBsZXN0LiAgU2luY2UgPGNvZGU+aW50PC9jb2RlPiBpcyB0aGUgc2FtZSBhcyA8Y29kZT5zaWduZWQgaW50PC9jb2RlPiBpbgorZXZlcnkgb3RoZXIgY29udGV4dCwgaXQgaXMgY2xlYW5lc3QgZm9yIHRoZW0gdG8gYmUgdGhlIHNhbWUgaW4gYml0LWZpZWxkcworYXMgd2VsbC4KKworICAgICA8cD5Tb21lIGNvbXB1dGVyIG1hbnVmYWN0dXJlcnMgaGF2ZSBwdWJsaXNoZWQgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZQorc3RhbmRhcmRzIHdoaWNoIHNwZWNpZnkgdGhhdCBwbGFpbiBiaXQtZmllbGRzIHNob3VsZCBiZSB1bnNpZ25lZC4gIEl0IGlzCithIG1pc3Rha2UsIGhvd2V2ZXIsIHRvIHNheSBhbnl0aGluZyBhYm91dCB0aGlzIGlzc3VlIGluIGFuIEFCSS4gIFRoaXMgaXMKK2JlY2F1c2UgdGhlIGhhbmRsaW5nIG9mIHBsYWluIGJpdC1maWVsZHMgZGlzdGluZ3Vpc2hlcyB0d28gZGlhbGVjdHMgb2YgQy4gCitCb3RoIGRpYWxlY3RzIGFyZSBtZWFuaW5nZnVsIG9uIGV2ZXJ5IHR5cGUgb2YgbWFjaGluZS4gIFdoZXRoZXIgYQorcGFydGljdWxhciBvYmplY3QgZmlsZSB3YXMgY29tcGlsZWQgdXNpbmcgc2lnbmVkIGJpdC1maWVsZHMgb3IgdW5zaWduZWQKK2lzIG9mIG5vIGNvbmNlcm4gdG8gb3RoZXIgb2JqZWN0IGZpbGVzLCBldmVuIGlmIHRoZXkgYWNjZXNzIHRoZSBzYW1lCitiaXQtZmllbGRzIGluIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcy4KKworICAgICA8cD5BIGdpdmVuIHByb2dyYW0gaXMgd3JpdHRlbiBpbiBvbmUgb3IgdGhlIG90aGVyIG9mIHRoZXNlIHR3byBkaWFsZWN0cy4gCitUaGUgcHJvZ3JhbSBzdGFuZHMgYSBjaGFuY2UgdG8gd29yayBvbiBtb3N0IGFueSBtYWNoaW5lIGlmIGl0IGlzCitjb21waWxlZCB3aXRoIHRoZSBwcm9wZXIgZGlhbGVjdC4gIEl0IGlzIHVubGlrZWx5IHRvIHdvcmsgYXQgYWxsIGlmCitjb21waWxlZCB3aXRoIHRoZSB3cm9uZyBkaWFsZWN0LgorCisgICAgIDxwPk1hbnkgdXNlcnMgYXBwcmVjaWF0ZSB0aGUgR05VIEMgY29tcGlsZXIgYmVjYXVzZSBpdCBwcm92aWRlcyBhbgorZW52aXJvbm1lbnQgdGhhdCBpcyB1bmlmb3JtIGFjcm9zcyBtYWNoaW5lcy4gIFRoZXNlIHVzZXJzIHdvdWxkIGJlCitpbmNvbnZlbmllbmNlZCBpZiB0aGUgY29tcGlsZXIgdHJlYXRlZCBwbGFpbiBiaXQtZmllbGRzIGRpZmZlcmVudGx5IG9uCitjZXJ0YWluIG1hY2hpbmVzLgorCisgICAgIDxwPk9jY2FzaW9uYWxseSB1c2VycyB3cml0ZSBwcm9ncmFtcyBpbnRlbmRlZCBvbmx5IGZvciBhIHBhcnRpY3VsYXIgbWFjaGluZQordHlwZS4gIE9uIHRoZXNlIG9jY2FzaW9ucywgdGhlIHVzZXJzIHdvdWxkIGJlbmVmaXQgaWYgdGhlIEdOVSBDIGNvbXBpbGVyCit3ZXJlIHRvIHN1cHBvcnQgYnkgZGVmYXVsdCB0aGUgc2FtZSBkaWFsZWN0IGFzIHRoZSBvdGhlciBjb21waWxlcnMgb24KK3RoYXQgbWFjaGluZS4gIEJ1dCBzdWNoIGFwcGxpY2F0aW9ucyBhcmUgcmFyZS4gIEFuZCB1c2VycyB3cml0aW5nIGEKK3Byb2dyYW0gdG8gcnVuIG9uIG1vcmUgdGhhbiBvbmUgdHlwZSBvZiBtYWNoaW5lIGNhbm5vdCBwb3NzaWJseSBiZW5lZml0Citmcm9tIHRoaXMga2luZCBvZiBjb21wYXRpYmlsaXR5LgorCisgICAgIDxwPlRoaXMgaXMgd2h5IEdDQyBkb2VzIGFuZCB3aWxsIHRyZWF0IHBsYWluIGJpdC1maWVsZHMgaW4gdGhlIHNhbWUKK2Zhc2hpb24gb24gYWxsIHR5cGVzIG9mIG1hY2hpbmVzIChieSBkZWZhdWx0KS4KKworICAgICA8cD5UaGVyZSBhcmUgc29tZSBhcmd1bWVudHMgZm9yIG1ha2luZyBiaXQtZmllbGRzIHVuc2lnbmVkIGJ5IGRlZmF1bHQgb24gYWxsCittYWNoaW5lcy4gIElmLCBmb3IgZXhhbXBsZSwgdGhpcyBiZWNvbWVzIGEgdW5pdmVyc2FsIGRlIGZhY3RvIHN0YW5kYXJkLAoraXQgd291bGQgbWFrZSBzZW5zZSBmb3IgR0NDIHRvIGdvIGFsb25nIHdpdGggaXQuICBUaGlzIGlzIHNvbWV0aGluZwordG8gYmUgY29uc2lkZXJlZCBpbiB0aGUgZnV0dXJlLgorCisgICAgIDxwPihPZiBjb3Vyc2UsIHVzZXJzIHN0cm9uZ2x5IGNvbmNlcm5lZCBhYm91dCBwb3J0YWJpbGl0eSBzaG91bGQgaW5kaWNhdGUKK2V4cGxpY2l0bHkgaW4gZWFjaCBiaXQtZmllbGQgd2hldGhlciBpdCBpcyBzaWduZWQgb3Igbm90LiAgSW4gdGhpcyB3YXksCit0aGV5IHdyaXRlIHByb2dyYW1zIHdoaWNoIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBpbiBib3RoIEMgZGlhbGVjdHMuKQorCisgICAgIDxsaT48YSBuYW1lPSJpbmRleC1hbnNpLTM1ODIiPjwvYT48YSBuYW1lPSJpbmRleC1zdGQtMzU4MyI+PC9hPlVuZGVmaW5pbmcgPGNvZGU+X19TVERDX188L2NvZGU+IHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWFuc2k8L3NwYW4+PC9zYW1wPiBpcyBub3QgdXNlZC4KKworICAgICA8cD5DdXJyZW50bHksIEdDQyBkZWZpbmVzIDxjb2RlPl9fU1REQ19fPC9jb2RlPiB1bmNvbmRpdGlvbmFsbHkuICBUaGlzIHByb3ZpZGVzCitnb29kIHJlc3VsdHMgaW4gcHJhY3RpY2UuCisKKyAgICAgPHA+UHJvZ3JhbW1lcnMgbm9ybWFsbHkgdXNlIGNvbmRpdGlvbmFscyBvbiA8Y29kZT5fX1NURENfXzwvY29kZT4gdG8gYXNrIHdoZXRoZXIKK2l0IGlzIHNhZmUgdG8gdXNlIGNlcnRhaW4gZmVhdHVyZXMgb2YgSVNPIEMsIHN1Y2ggYXMgZnVuY3Rpb24KK3Byb3RvdHlwZXMgb3IgSVNPIHRva2VuIGNvbmNhdGVuYXRpb24uICBTaW5jZSBwbGFpbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gc3VwcG9ydHMKK2FsbCB0aGUgZmVhdHVyZXMgb2YgSVNPIEMsIHRoZSBjb3JyZWN0IGFuc3dlciB0byB0aGVzZSBxdWVzdGlvbnMgaXMKKyZsZHF1bzt5ZXMmcmRxdW87LgorCisgICAgIDxwPlNvbWUgdXNlcnMgdHJ5IHRvIHVzZSA8Y29kZT5fX1NURENfXzwvY29kZT4gdG8gY2hlY2sgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YKK2NlcnRhaW4gbGlicmFyeSBmYWNpbGl0aWVzLiAgVGhpcyBpcyBhY3R1YWxseSBpbmNvcnJlY3QgdXNhZ2UgaW4gYW4gSVNPCitDIHByb2dyYW0sIGJlY2F1c2UgdGhlIElTTyBDIHN0YW5kYXJkIHNheXMgdGhhdCBhIGNvbmZvcm1pbmcKK2ZyZWVzdGFuZGluZyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgZGVmaW5lIDxjb2RlPl9fU1REQ19fPC9jb2RlPiBldmVuIHRob3VnaCBpdAorZG9lcyBub3QgaGF2ZSB0aGUgbGlicmFyeSBmYWNpbGl0aWVzLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nY2MgLWFuc2kgLXBlZGFudGljPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGEKK2NvbmZvcm1pbmcgZnJlZXN0YW5kaW5nIGltcGxlbWVudGF0aW9uLCBhbmQgaXQgaXMgdGhlcmVmb3JlIHJlcXVpcmVkIHRvCitkZWZpbmUgPGNvZGU+X19TVERDX188L2NvZGU+LCBldmVuIHRob3VnaCBpdCBkb2VzIG5vdCBjb21lIHdpdGggYW4gSVNPIEMKK2xpYnJhcnkuCisKKyAgICAgPHA+U29tZXRpbWVzIHBlb3BsZSBzYXkgdGhhdCBkZWZpbmluZyA8Y29kZT5fX1NURENfXzwvY29kZT4gaW4gYSBjb21waWxlciB0aGF0Citkb2VzIG5vdCBjb21wbGV0ZWx5IGNvbmZvcm0gdG8gdGhlIElTTyBDIHN0YW5kYXJkIHNvbWVob3cgdmlvbGF0ZXMgdGhlCitzdGFuZGFyZC4gIFRoaXMgaXMgaWxsb2dpY2FsLiAgVGhlIHN0YW5kYXJkIGlzIGEgc3RhbmRhcmQgZm9yIGNvbXBpbGVycwordGhhdCBjbGFpbSB0byBzdXBwb3J0IElTTyBDLCBzdWNoIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2NjIC1hbnNpPC9zcGFuPjwvc2FtcD4mcnNxdW87Jm1kYXNoO25vdCBmb3Igb3RoZXIKK2NvbXBpbGVycyBzdWNoIGFzIHBsYWluIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPi4gIFdoYXRldmVyIHRoZSBJU08gQyBzdGFuZGFyZCBzYXlzCitpcyByZWxldmFudCB0byB0aGUgZGVzaWduIG9mIHBsYWluIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiB3aXRob3V0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb25seQorZm9yIHByYWdtYXRpYyByZWFzb25zLCBub3QgYXMgYSByZXF1aXJlbWVudC4KKworICAgICA8cD5HQ0Mgbm9ybWFsbHkgZGVmaW5lcyA8Y29kZT5fX1NURENfXzwvY29kZT4gdG8gYmUgMSwgYW5kIGluIGFkZGl0aW9uCitkZWZpbmVzIDxjb2RlPl9fU1RSSUNUX0FOU0lfXzwvY29kZT4gaWYgeW91IHNwZWNpZnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb3B0aW9uLAorb3IgYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGZvciBzdHJpY3QgY29uZm9ybWFuY2UgdG8gc29tZSB2ZXJzaW9uIG9mIElTTyBDLiAKK09uIHNvbWUgaG9zdHMsIHN5c3RlbSBpbmNsdWRlIGZpbGVzIHVzZSBhIGRpZmZlcmVudCBjb252ZW50aW9uLCB3aGVyZQorPGNvZGU+X19TVERDX188L2NvZGU+IGlzIG5vcm1hbGx5IDAsIGJ1dCBpcyAxIGlmIHRoZSB1c2VyIHNwZWNpZmllcyBzdHJpY3QKK2NvbmZvcm1hbmNlIHRvIHRoZSBDIFN0YW5kYXJkLiAgR0NDIGZvbGxvd3MgdGhlIGhvc3QgY29udmVudGlvbiB3aGVuCitwcm9jZXNzaW5nIHN5c3RlbSBpbmNsdWRlIGZpbGVzLCBidXQgd2hlbiBwcm9jZXNzaW5nIHVzZXIgZmlsZXMgaXQgZm9sbG93cwordGhlIHVzdWFsIEdOVSBDIGNvbnZlbnRpb24uCisKKyAgICAgPGxpPlVuZGVmaW5pbmcgPGNvZGU+X19TVERDX188L2NvZGU+IGluIEMrKy4KKworICAgICA8cD5Qcm9ncmFtcyB3cml0dGVuIHRvIGNvbXBpbGUgd2l0aCBDKystdG8tQyB0cmFuc2xhdG9ycyBnZXQgdGhlCit2YWx1ZSBvZiA8Y29kZT5fX1NURENfXzwvY29kZT4gdGhhdCBnb2VzIHdpdGggdGhlIEMgY29tcGlsZXIgdGhhdCBpcworc3Vic2VxdWVudGx5IHVzZWQuICBUaGVzZSBwcm9ncmFtcyBtdXN0IHRlc3QgPGNvZGU+X19TVERDX188L2NvZGU+Cit0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIEMgcHJlcHJvY2Vzc29yIHRoYXQgY29tcGlsZXIgdXNlczoKK3doZXRoZXIgdGhleSBzaG91bGQgY29uY2F0ZW5hdGUgdG9rZW5zIGluIHRoZSBJU08gQyBmYXNoaW9uCitvciBpbiB0aGUgdHJhZGl0aW9uYWwgZmFzaGlvbi4KKworICAgICA8cD5UaGVzZSBwcm9ncmFtcyB3b3JrIHByb3Blcmx5IHdpdGggR05VIEMrKyBpZiA8Y29kZT5fX1NURENfXzwvY29kZT4gaXMgZGVmaW5lZC4gCitUaGV5IHdvdWxkIG5vdCB3b3JrIG90aGVyd2lzZS4KKworICAgICA8cD5JbiBhZGRpdGlvbiwgbWFueSBoZWFkZXIgZmlsZXMgYXJlIHdyaXR0ZW4gdG8gcHJvdmlkZSBwcm90b3R5cGVzIGluIElTTworQyBidXQgbm90IGluIHRyYWRpdGlvbmFsIEMuICBNYW55IG9mIHRoZXNlIGhlYWRlciBmaWxlcyBjYW4gd29yayB3aXRob3V0CitjaGFuZ2UgaW4gQysrIHByb3ZpZGVkIDxjb2RlPl9fU1REQ19fPC9jb2RlPiBpcyBkZWZpbmVkLiAgSWYgPGNvZGU+X19TVERDX188L2NvZGU+CitpcyBub3QgZGVmaW5lZCwgdGhleSB3aWxsIGFsbCBmYWlsLCBhbmQgd2lsbCBhbGwgbmVlZCB0byBiZSBjaGFuZ2VkIHRvCit0ZXN0IGV4cGxpY2l0bHkgZm9yIEMrKyBhcyB3ZWxsLgorCisgICAgIDxsaT5EZWxldGluZyAmbGRxdW87ZW1wdHkmcmRxdW87IGxvb3BzLgorCisgICAgIDxwPkhpc3RvcmljYWxseSwgR0NDIGhhcyBub3QgZGVsZXRlZCAmbGRxdW87ZW1wdHkmcmRxdW87IGxvb3BzIHVuZGVyIHRoZQorYXNzdW1wdGlvbiB0aGF0IHRoZSBtb3N0IGxpa2VseSByZWFzb24geW91IHdvdWxkIHB1dCBvbmUgaW4gYSBwcm9ncmFtIGlzCit0byBoYXZlIGEgZGVsYXksIHNvIGRlbGV0aW5nIHRoZW0gd2lsbCBub3QgbWFrZSByZWFsIHByb2dyYW1zIHJ1biBhbnkKK2Zhc3Rlci4KKworICAgICA8cD5Ib3dldmVyLCB0aGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCBvcHRpbWl6YXRpb24gb2YgYSBub25lbXB0eSBsb29wCitjYW5ub3QgcHJvZHVjZSBhbiBlbXB0eSBvbmUuIFRoaXMgaGVsZCBmb3IgY2FyZWZ1bGx5IHdyaXR0ZW4gQyBjb21waWxlZAord2l0aCBsZXNzIHBvd2VyZnVsIG9wdGltaXplcnMgYnV0IGlzIG5vdCBhbHdheXMgdGhlIGNhc2UgZm9yIGNhcmVmdWxseQord3JpdHRlbiBDKysgb3Igd2l0aCBtb3JlIHBvd2VyZnVsIG9wdGltaXplcnMuIAorVGh1cyBHQ0Mgd2lsbCByZW1vdmUgb3BlcmF0aW9ucyBmcm9tIGxvb3BzIHdoZW5ldmVyIGl0IGNhbiBkZXRlcm1pbmUKK3Rob3NlIG9wZXJhdGlvbnMgYXJlIG5vdCBleHRlcm5hbGx5IHZpc2libGUgKGFwYXJ0IGZyb20gdGhlIHRpbWUgdGFrZW4KK3RvIGV4ZWN1dGUgdGhlbSwgb2YgY291cnNlKS4gIEluIGNhc2UgdGhlIGxvb3AgY2FuIGJlIHByb3ZlZCB0byBiZSBmaW5pdGUsCitHQ0Mgd2lsbCBhbHNvIHJlbW92ZSB0aGUgbG9vcCBpdHNlbGYuCisKKyAgICAgPHA+QmUgYXdhcmUgb2YgdGhpcyB3aGVuIHBlcmZvcm1pbmcgdGltaW5nIHRlc3RzLCBmb3IgaW5zdGFuY2UgdGhlCitmb2xsb3dpbmcgbG9vcCBjYW4gYmUgY29tcGxldGVseSByZW1vdmVkLCBwcm92aWRlZAorPGNvZGU+c29tZV9leHByZXNzaW9uPC9jb2RlPiBjYW4gcHJvdmFibHkgbm90IGNoYW5nZSBhbnkgZ2xvYmFsIHN0YXRlLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHsKKyAgICAgICAgICAgICBpbnQgc3VtID0gMDsKKyAgICAgICAgICAgICBpbnQgaXg7CisgICAgICAgICAgCisgICAgICAgICAgICAgZm9yIChpeCA9IDA7IGl4ICE9IDEwMDAwOyBpeCsrKQorICAgICAgICAgICAgICAgIHN1bSArPSBzb21lX2V4cHJlc3Npb247CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwPkV2ZW4gdGhvdWdoIDxjb2RlPnN1bTwvY29kZT4gaXMgYWNjdW11bGF0ZWQgaW4gdGhlIGxvb3AsIG5vIHVzZSBpcyBtYWRlIG9mCit0aGF0IHN1bW1hdGlvbiwgc28gdGhlIGFjY3VtdWxhdGlvbiBjYW4gYmUgcmVtb3ZlZC4KKworICAgICA8bGk+TWFraW5nIHNpZGUgZWZmZWN0cyBoYXBwZW4gaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gc29tZSBvdGhlciBjb21waWxlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1zaWRlLWVmZmVjdHNfMDAyYy1vcmRlci1vZi1ldmFsdWF0aW9uLTM1ODQiPjwvYT48YSBuYW1lPSJpbmRleC1vcmRlci1vZi1ldmFsdWF0aW9uXzAwMmMtc2lkZS1lZmZlY3RzLTM1ODUiPjwvYT5JdCBpcyBuZXZlciBzYWZlIHRvIGRlcGVuZCBvbiB0aGUgb3JkZXIgb2YgZXZhbHVhdGlvbiBvZiBzaWRlIGVmZmVjdHMuIAorRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gY2FsbCBsaWtlIHRoaXMgbWF5IHZlcnkgd2VsbCBiZWhhdmUgZGlmZmVyZW50bHkKK2Zyb20gb25lIGNvbXBpbGVyIHRvIGFub3RoZXI6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdm9pZCBmdW5jIChpbnQsIGludCk7CisgICAgICAgICAgCisgICAgICAgICAgaW50IGkgPSAyOworICAgICAgICAgIGZ1bmMgKGkrKywgaSsrKTsKKzwvcHJlPgorICAgICA8cD5UaGVyZSBpcyBubyBndWFyYW50ZWUgKGluIGVpdGhlciB0aGUgQyBvciB0aGUgQysrIHN0YW5kYXJkIGxhbmd1YWdlCitkZWZpbml0aW9ucykgdGhhdCB0aGUgaW5jcmVtZW50cyB3aWxsIGJlIGV2YWx1YXRlZCBpbiBhbnkgcGFydGljdWxhcgorb3JkZXIuICBFaXRoZXIgaW5jcmVtZW50IG1pZ2h0IGhhcHBlbiBmaXJzdC4gIDxjb2RlPmZ1bmM8L2NvZGU+IG1pZ2h0IGdldCB0aGUKK2FyZ3VtZW50cyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjIsIDM8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yIGl0IG1pZ2h0IGdldCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjMsIDI8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yIGV2ZW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4yLCAyPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5NYWtpbmcgY2VydGFpbiB3YXJuaW5ncyBpbnRvIGVycm9ycyBieSBkZWZhdWx0LgorCisgICAgIDxwPlNvbWUgSVNPIEMgdGVzdHN1aXRlcyByZXBvcnQgZmFpbHVyZSB3aGVuIHRoZSBjb21waWxlciBkb2VzIG5vdCBwcm9kdWNlCithbiBlcnJvciBtZXNzYWdlIGZvciBhIGNlcnRhaW4gcHJvZ3JhbS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1wZWRhbnRpY18wMDJkZXJyb3JzLTM1ODYiPjwvYT5JU08gQyByZXF1aXJlcyBhICZsZHF1bztkaWFnbm9zdGljJnJkcXVvOyBtZXNzYWdlIGZvciBjZXJ0YWluIGtpbmRzIG9mIGludmFsaWQKK3Byb2dyYW1zLCBidXQgYSB3YXJuaW5nIGlzIGRlZmluZWQgYnkgR0NDIHRvIGNvdW50IGFzIGEgZGlhZ25vc3RpYy4gIElmCitHQ0MgcHJvZHVjZXMgYSB3YXJuaW5nIGJ1dCBub3QgYW4gZXJyb3IsIHRoYXQgaXMgY29ycmVjdCBJU08gQyBzdXBwb3J0LiAKK0lmIHRlc3RzdWl0ZXMgY2FsbCB0aGlzICZsZHF1bztmYWlsdXJlJnJkcXVvOywgdGhleSBzaG91bGQgYmUgcnVuIHdpdGggdGhlIEdDQworb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYy1lcnJvcnM8L3NwYW4+PC9zYW1wPiwgd2hpY2ggd2lsbCB0dXJuIHRoZXNlIHdhcm5pbmdzIGludG8KK2Vycm9ycy4KKworIDwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjMDc0ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbApAQCAtMCwwICsxLDE2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T2JqZWN0IFNpemUgQ2hlY2tpbmcgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ieDg2LXNwZWNpZmljLW1lbW9yeS1tb2RlbC1leHRlbnNpb25zLWZvci10cmFuc2FjdGlvbmFsLW1lbW9yeS5odG1sI3g4Ni1zcGVjaWZpYy1tZW1vcnktbW9kZWwtZXh0ZW5zaW9ucy1mb3ItdHJhbnNhY3Rpb25hbC1tZW1vcnkiIHRpdGxlPSJ4ODYgc3BlY2lmaWMgbWVtb3J5IG1vZGVsIGV4dGVuc2lvbnMgZm9yIHRyYW5zYWN0aW9uYWwgbWVtb3J5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyIgdGl0bGU9Ik90aGVyIEJ1aWx0aW5zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik9iamVjdC1TaXplLUNoZWNraW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ieDg2LXNwZWNpZmljLW1lbW9yeS1tb2RlbC1leHRlbnNpb25zLWZvci10cmFuc2FjdGlvbmFsLW1lbW9yeS5odG1sI3g4Ni1zcGVjaWZpYy1tZW1vcnktbW9kZWwtZXh0ZW5zaW9ucy1mb3ItdHJhbnNhY3Rpb25hbC1tZW1vcnkiPng4NiBzcGVjaWZpYyBtZW1vcnkgbW9kZWwgZXh0ZW5zaW9ucyBmb3IgdHJhbnNhY3Rpb25hbCBtZW1vcnk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNTQgT2JqZWN0IFNpemUgQ2hlY2tpbmcgQnVpbHQtaW4gRnVuY3Rpb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zm9iamVjdF8wMDVmc2l6ZS0yOTM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZtZW1jcHlfMDA1ZmNoay0yOTM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZtZW1wY3B5XzAwNWZjaGstMjkzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmbWVtbW92ZV8wMDVmY2hrLTI5MzciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1Zm1lbXNldF8wMDVmY2hrLTI5MzgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnN0cmNweV8wMDVmY2hrLTI5MzkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnN0cGNweV8wMDVmY2hrLTI5NDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnN0cm5jcHlfMDA1ZmNoay0yOTQxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZzdHJjYXRfMDA1ZmNoay0yOTQyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZzdHJuY2F0XzAwNWZjaGstMjk0MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmc3ByaW50Zl8wMDVmY2hrLTI5NDQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnNucHJpbnRmXzAwNWZjaGstMjk0NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmdnNwcmludGZfMDA1ZmNoay0yOTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZ2c25wcmludGZfMDA1ZmNoay0yOTQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZwcmludGZfMDA1ZmNoay0yOTQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZ2cHJpbnRmXzAwNWZjaGstMjk0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZfMDA1Zl8wMDVmZnByaW50Zl8wMDVmY2hrLTI5NTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmXzAwNWZfMDA1ZnZmcHJpbnRmXzAwNWZjaGstMjk1MSI+PC9hPgorR0NDIGltcGxlbWVudHMgYSBsaW1pdGVkIGJ1ZmZlciBvdmVyZmxvdyBwcm90ZWN0aW9uIG1lY2hhbmlzbQordGhhdCBjYW4gcHJldmVudCBzb21lIGJ1ZmZlciBvdmVyZmxvdyBhdHRhY2tzLgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBzaXplX3QgPGI+X19idWlsdGluX29iamVjdF9zaXplPC9iPiAoPHZhcj52b2lkICogcHRyLCBpbnQgdHlwZTwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZvYmplY3RfMDA1ZnNpemUtMjk1MiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPmlzIGEgYnVpbHQtaW4gY29uc3RydWN0IHRoYXQgcmV0dXJucyBhIGNvbnN0YW50IG51bWJlciBvZiBieXRlcyBmcm9tCis8dmFyPnB0cjwvdmFyPiB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QgPHZhcj5wdHI8L3Zhcj4gcG9pbnRlciBwb2ludHMgdG8KKyhpZiBrbm93biBhdCBjb21waWxlIHRpbWUpLiAgPGNvZGU+X19idWlsdGluX29iamVjdF9zaXplPC9jb2RlPiBuZXZlciBldmFsdWF0ZXMKK2l0cyBhcmd1bWVudHMgZm9yIHNpZGUtZWZmZWN0cy4gIElmIHRoZXJlIGFyZSBhbnkgc2lkZS1lZmZlY3RzIGluIHRoZW0sIGl0CityZXR1cm5zIDxjb2RlPihzaXplX3QpIC0xPC9jb2RlPiBmb3IgPHZhcj50eXBlPC92YXI+IDAgb3IgMSBhbmQgPGNvZGU+KHNpemVfdCkgMDwvY29kZT4KK2ZvciA8dmFyPnR5cGU8L3Zhcj4gMiBvciAzLiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIG9iamVjdHMgPHZhcj5wdHI8L3Zhcj4gY2FuCitwb2ludCB0byBhbmQgYWxsIG9mIHRoZW0gYXJlIGtub3duIGF0IGNvbXBpbGUgdGltZSwgdGhlIHJldHVybmVkIG51bWJlcgoraXMgdGhlIG1heGltdW0gb2YgcmVtYWluaW5nIGJ5dGUgY291bnRzIGluIHRob3NlIG9iamVjdHMgaWYgPHZhcj50eXBlPC92YXI+ICZhbXA7IDIgaXMKKzAgYW5kIG1pbmltdW0gaWYgbm9uemVyby4gIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZXRlcm1pbmUgd2hpY2ggb2JqZWN0cworPHZhcj5wdHI8L3Zhcj4gcG9pbnRzIHRvIGF0IGNvbXBpbGUgdGltZSwgPGNvZGU+X19idWlsdGluX29iamVjdF9zaXplPC9jb2RlPiBzaG91bGQKK3JldHVybiA8Y29kZT4oc2l6ZV90KSAtMTwvY29kZT4gZm9yIDx2YXI+dHlwZTwvdmFyPiAwIG9yIDEgYW5kIDxjb2RlPihzaXplX3QpIDA8L2NvZGU+Citmb3IgPHZhcj50eXBlPC92YXI+IDIgb3IgMy4KKworICAgICAgPHA+PHZhcj50eXBlPC92YXI+IGlzIGFuIGludGVnZXIgY29uc3RhbnQgZnJvbSAwIHRvIDMuICBJZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKK2JpdCBpcyBjbGVhciwgb2JqZWN0cyBhcmUgd2hvbGUgdmFyaWFibGVzLCBpZiBpdCBpcyBzZXQsIGEgY2xvc2VzdAorc3Vycm91bmRpbmcgc3Vib2JqZWN0IGlzIGNvbnNpZGVyZWQgdGhlIG9iamVjdCBhIHBvaW50ZXIgcG9pbnRzIHRvLiAKK1RoZSBzZWNvbmQgYml0IGRldGVybWluZXMgaWYgbWF4aW11bSBvciBtaW5pbXVtIG9mIHJlbWFpbmluZyBieXRlcworaXMgY29tcHV0ZWQuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IFYgeyBjaGFyIGJ1ZjFbMTBdOyBpbnQgYjsgY2hhciBidWYyWzEwXTsgfSB2YXI7CisgICAgICAgICAgY2hhciAqcCA9ICZhbXA7dmFyLmJ1ZjFbMV0sICpxID0gJmFtcDt2YXIuYjsKKyAgICAgICAgICAKKyAgICAgICAgICAvKiBIZXJlIHRoZSBvYmplY3QgcCBwb2ludHMgdG8gaXMgdmFyLiAgKi8KKyAgICAgICAgICBhc3NlcnQgKF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSAocCwgMCkgPT0gc2l6ZW9mICh2YXIpIC0gMSk7CisgICAgICAgICAgLyogVGhlIHN1Ym9iamVjdCBwIHBvaW50cyB0byBpcyB2YXIuYnVmMS4gICovCisgICAgICAgICAgYXNzZXJ0IChfX2J1aWx0aW5fb2JqZWN0X3NpemUgKHAsIDEpID09IHNpemVvZiAodmFyLmJ1ZjEpIC0gMSk7CisgICAgICAgICAgLyogVGhlIG9iamVjdCBxIHBvaW50cyB0byBpcyB2YXIuICAqLworICAgICAgICAgIGFzc2VydCAoX19idWlsdGluX29iamVjdF9zaXplIChxLCAwKQorICAgICAgICAgICAgICAgICAgPT0gKGNoYXIgKikgKCZhbXA7dmFyICsgMSkgLSAoY2hhciAqKSAmYW1wO3Zhci5iKTsKKyAgICAgICAgICAvKiBUaGUgc3Vib2JqZWN0IHEgcG9pbnRzIHRvIGlzIHZhci5iLiAgKi8KKyAgICAgICAgICBhc3NlcnQgKF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSAocSwgMSkgPT0gc2l6ZW9mICh2YXIuYikpOworPC9wcmU+CisgICAgICA8L2Jsb2NrcXVvdGU+PC9kaXY+CisKKyA8cD5UaGVyZSBhcmUgYnVpbHQtaW4gZnVuY3Rpb25zIGFkZGVkIGZvciBtYW55IGNvbW1vbiBzdHJpbmcgb3BlcmF0aW9uCitmdW5jdGlvbnMsIGUuZy4sIGZvciA8Y29kZT5tZW1jcHk8L2NvZGU+IDxjb2RlPl9fYnVpbHRpbl9fX21lbWNweV9jaGs8L2NvZGU+CitidWlsdC1pbiBpcyBwcm92aWRlZC4gIFRoaXMgYnVpbHQtaW4gaGFzIGFuIGFkZGl0aW9uYWwgbGFzdCBhcmd1bWVudCwKK3doaWNoIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nIGluIG9iamVjdCB0aGUgPHZhcj5kZXN0PC92YXI+Cithcmd1bWVudCBwb2ludHMgdG8gb3IgPGNvZGU+KHNpemVfdCkgLTE8L2NvZGU+IGlmIHRoZSBzaXplIGlzIG5vdCBrbm93bi4KKworIDxwPlRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIG9wdGltaXplZCBpbnRvIHRoZSBub3JtYWwgc3RyaW5nIGZ1bmN0aW9ucworbGlrZSA8Y29kZT5tZW1jcHk8L2NvZGU+IGlmIHRoZSBsYXN0IGFyZ3VtZW50IGlzIDxjb2RlPihzaXplX3QpIC0xPC9jb2RlPiBvciBpZgoraXQgaXMga25vd24gYXQgY29tcGlsZSB0aW1lIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG9iamVjdCB3aWxsIG5vdAorYmUgb3ZlcmZsb3duLiAgSWYgdGhlIGNvbXBpbGVyIGNhbiBkZXRlcm1pbmUgYXQgY29tcGlsZSB0aW1lIHRoZQorb2JqZWN0IHdpbGwgYmUgYWx3YXlzIG92ZXJmbG93biwgaXQgaXNzdWVzIGEgd2FybmluZy4KKworIDxwPlRoZSBpbnRlbmRlZCB1c2UgY2FuIGJlIGUuZy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICN1bmRlZiBtZW1jcHkKKyAgICAgI2RlZmluZSBib3MwKGRlc3QpIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSAoZGVzdCwgMCkKKyAgICAgI2RlZmluZSBtZW1jcHkoZGVzdCwgc3JjLCBuKSBcCisgICAgICAgX19idWlsdGluX19fbWVtY3B5X2NoayAoZGVzdCwgc3JjLCBuLCBib3MwIChkZXN0KSkKKyAgICAgCisgICAgIGNoYXIgKnZvbGF0aWxlIHA7CisgICAgIGNoYXIgYnVmWzEwXTsKKyAgICAgLyogSXQgaXMgdW5rbm93biB3aGF0IG9iamVjdCBwIHBvaW50cyB0bywgc28gdGhpcyBpcyBvcHRpbWl6ZWQKKyAgICAgICAgaW50byBwbGFpbiBtZW1jcHkgLSBubyBjaGVja2luZyBpcyBwb3NzaWJsZS4gICovCisgICAgIG1lbWNweSAocCwgImFiY2RlIiwgbik7CisgICAgIC8qIERlc3RpbmF0aW9uIGlzIGtub3duIGFuZCBsZW5ndGggdG9vLiAgSXQgaXMga25vd24gYXQgY29tcGlsZQorICAgICAgICB0aW1lIHRoZXJlIHdpbGwgYmUgbm8gb3ZlcmZsb3cuICAqLworICAgICBtZW1jcHkgKCZhbXA7YnVmWzVdLCAiYWJjZGUiLCA1KTsKKyAgICAgLyogRGVzdGluYXRpb24gaXMga25vd24sIGJ1dCB0aGUgbGVuZ3RoIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUuCisgICAgICAgIFRoaXMgd2lsbCByZXN1bHQgaW4gX19tZW1jcHlfY2hrIGNhbGwgdGhhdCBjYW4gY2hlY2sgZm9yIG92ZXJmbG93CisgICAgICAgIGF0IHJ1biB0aW1lLiAgKi8KKyAgICAgbWVtY3B5ICgmYW1wO2J1Zls1XSwgImFiY2RlIiwgbik7CisgICAgIC8qIERlc3RpbmF0aW9uIGlzIGtub3duIGFuZCBpdCBpcyBrbm93biBhdCBjb21waWxlIHRpbWUgdGhlcmUgd2lsbAorICAgICAgICBiZSBvdmVyZmxvdy4gIFRoZXJlIHdpbGwgYmUgYSB3YXJuaW5nIGFuZCBfX21lbWNweV9jaGsgY2FsbCB0aGF0CisgICAgICAgIHdpbGwgYWJvcnQgdGhlIHByb2dyYW0gYXQgcnVuIHRpbWUuICAqLworICAgICBtZW1jcHkgKCZhbXA7YnVmWzZdLCAiYWJjZGUiLCA1KTsKKzwvcHJlPgorIDxwPlN1Y2ggYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IgPGNvZGU+bWVtY3B5PC9jb2RlPiwgPGNvZGU+bWVtcGNweTwvY29kZT4sCis8Y29kZT5tZW1tb3ZlPC9jb2RlPiwgPGNvZGU+bWVtc2V0PC9jb2RlPiwgPGNvZGU+c3RyY3B5PC9jb2RlPiwgPGNvZGU+c3RwY3B5PC9jb2RlPiwgPGNvZGU+c3RybmNweTwvY29kZT4sCis8Y29kZT5zdHJjYXQ8L2NvZGU+IGFuZCA8Y29kZT5zdHJuY2F0PC9jb2RlPi4KKworIDxwPlRoZXJlIGFyZSBhbHNvIGNoZWNraW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbnMuCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgaW50IF9fYnVpbHRpbl9fX3NwcmludGZfY2hrIChjaGFyICpzLCBpbnQgZmxhZywgc2l6ZV90IG9zLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisgICAgIGludCBfX2J1aWx0aW5fX19zbnByaW50Zl9jaGsgKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4sIGludCBmbGFnLCBzaXplX3Qgb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyAgICAgaW50IF9fYnVpbHRpbl9fX3ZzcHJpbnRmX2NoayAoY2hhciAqcywgaW50IGZsYWcsIHNpemVfdCBvcywgY29uc3QgY2hhciAqZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFwKTsKKyAgICAgaW50IF9fYnVpbHRpbl9fX3ZzbnByaW50Zl9jaGsgKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4sIGludCBmbGFnLCBzaXplX3Qgb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworPC9wcmU+CisgPHA+VGhlIGFkZGVkIDx2YXI+ZmxhZzwvdmFyPiBhcmd1bWVudCBpcyBwYXNzZWQgdW5jaGFuZ2VkIHRvIDxjb2RlPl9fc3ByaW50Zl9jaGs8L2NvZGU+CitldGMuIGZ1bmN0aW9ucyBhbmQgY2FuIGNvbnRhaW4gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZmxhZ3Mgb24gd2hhdAorYWRkaXRpb25hbCBzZWN1cml0eSBtZWFzdXJlcyB0aGUgY2hlY2tpbmcgZnVuY3Rpb24gbWlnaHQgdGFrZSwgc3VjaCBhcworaGFuZGxpbmcgPGNvZGU+JW48L2NvZGU+IGRpZmZlcmVudGx5LgorCisgPHA+VGhlIDx2YXI+b3M8L3Zhcj4gYXJndW1lbnQgaXMgdGhlIG9iamVjdCBzaXplIDx2YXI+czwvdmFyPiBwb2ludHMgdG8sIGxpa2UgaW4gdGhlCitvdGhlciBidWlsdC1pbiBmdW5jdGlvbnMuICBUaGVyZSBpcyBhIHNtYWxsIGRpZmZlcmVuY2UgaW4gdGhlIGJlaGF2aW9yCit0aG91Z2gsIGlmIDx2YXI+b3M8L3Zhcj4gaXMgPGNvZGU+KHNpemVfdCkgLTE8L2NvZGU+LCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZQorb3B0aW1pemVkIGludG8gdGhlIG5vbi1jaGVja2luZyBmdW5jdGlvbnMgb25seSBpZiA8dmFyPmZsYWc8L3Zhcj4gaXMgMCwgb3RoZXJ3aXNlCit0aGUgY2hlY2tpbmcgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggPHZhcj5vczwvdmFyPiBhcmd1bWVudCBzZXQgdG8KKzxjb2RlPihzaXplX3QpIC0xPC9jb2RlPi4KKworIDxwPkluIGFkZGl0aW9uIHRvIHRoaXMsIHRoZXJlIGFyZSBjaGVja2luZyBidWlsdC1pbiBmdW5jdGlvbnMKKzxjb2RlPl9fYnVpbHRpbl9fX3ByaW50Zl9jaGs8L2NvZGU+LCA8Y29kZT5fX2J1aWx0aW5fX192cHJpbnRmX2NoazwvY29kZT4sCis8Y29kZT5fX2J1aWx0aW5fX19mcHJpbnRmX2NoazwvY29kZT4gYW5kIDxjb2RlPl9fYnVpbHRpbl9fX3ZmcHJpbnRmX2NoazwvY29kZT4uIAorVGhlc2UgaGF2ZSBqdXN0IG9uZSBhZGRpdGlvbmFsIGFyZ3VtZW50LCA8dmFyPmZsYWc8L3Zhcj4sIHJpZ2h0IGJlZm9yZQorZm9ybWF0IHN0cmluZyA8dmFyPmZtdDwvdmFyPi4gIElmIHRoZSBjb21waWxlciBpcyBhYmxlIHRvIG9wdGltaXplIHRoZW0gdG8KKzxjb2RlPmZwdXRjPC9jb2RlPiBldGMuIGZ1bmN0aW9ucywgaXQgZG9lcywgb3RoZXJ3aXNlIHRoZSBjaGVja2luZyBmdW5jdGlvbgoraXMgY2FsbGVkIGFuZCB0aGUgPHZhcj5mbGFnPC92YXI+IGFyZ3VtZW50IHBhc3NlZCB0byBpdC4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9PYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1ZTZlMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjM2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIiB0aXRsZT0iSW52b2tpbmcgR0NDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIiB0aXRsZT0iQysrIERpYWxlY3QgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ikxhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbCNMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zIiB0aXRsZT0iTGFuZ3VhZ2UgSW5kZXBlbmRlbnQgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPYmplY3RpdmUtQy1hbmQtT2JqZWN0aXZlLUMrKy1EaWFsZWN0LU9wdGlvbnMiPjwvYT4KKzxhIG5hbWU9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNiBPcHRpb25zIENvbnRyb2xsaW5nIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY29tcGlsZXItb3B0aW9uc18wMDJjLU9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi0yMDYiPjwvYT48YSBuYW1lPSJpbmRleC1PYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItb3B0aW9uc18wMDJjLWNvbW1hbmRfMDAyZGxpbmUtMjA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLU9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi0yMDgiPjwvYT4oTk9URTogVGhpcyBtYW51YWwgZG9lcyBub3QgZGVzY3JpYmUgdGhlIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrCitsYW5ndWFnZXMgdGhlbXNlbHZlcy4gIFNlZSA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPkxhbmd1YWdlIFN0YW5kYXJkcyBTdXBwb3J0ZWQgYnkgR0NDPC9hPiwgZm9yIHJlZmVyZW5jZXMuKQorCisgPHA+VGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdCBhcmUgb25seSBtZWFuaW5nZnVsCitmb3IgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgcHJvZ3JhbXMuICBZb3UgY2FuIGFsc28gdXNlIG1vc3Qgb2YKK3RoZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBHTlUgY29tcGlsZXIgb3B0aW9ucy4gCitGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGNvbXBpbGUgYSBmaWxlIDxjb2RlPnNvbWVfY2xhc3MubTwvY29kZT4gbGlrZSB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZ2NjIC1nIC1mZ251LXJ1bnRpbWUgLU8gLWMgc29tZV9jbGFzcy5tCis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkluIHRoaXMgZXhhbXBsZSwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZnbnUtcnVudGltZTwvc3Bhbj48L3NhbXA+IGlzIGFuIG9wdGlvbiBtZWFudCBvbmx5IGZvcgorT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgcHJvZ3JhbXM7IHlvdSBjYW4gdXNlIHRoZSBvdGhlciBvcHRpb25zIHdpdGgKK2FueSBsYW5ndWFnZSBzdXBwb3J0ZWQgYnkgR0NDLgorCisgPHA+Tm90ZSB0aGF0IHNpbmNlIE9iamVjdGl2ZS1DIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgQyBsYW5ndWFnZSwgT2JqZWN0aXZlLUMKK2NvbXBpbGF0aW9ucyBtYXkgYWxzbyB1c2Ugb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgQyBmcm9udC1lbmQgKGUuZy4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3RyYWRpdGlvbmFsPC9zcGFuPjwvc2FtcD4pLiAgU2ltaWxhcmx5LCBPYmplY3RpdmUtQysrIGNvbXBpbGF0aW9ucyBtYXkgdXNlCitDKystc3BlY2lmaWMgb3B0aW9ucyAoZS5nLiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhYmk8L3NwYW4+PC9zYW1wPikuCisKKyA8cD5IZXJlIGlzIGEgbGlzdCBvZiBvcHRpb25zIHRoYXQgYXJlIDxlbT5vbmx5PC9lbT4gZm9yIGNvbXBpbGluZyBPYmplY3RpdmUtQworYW5kIE9iamVjdGl2ZS1DKysgcHJvZ3JhbXM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1mY29uc3RhbnQtc3RyaW5nLWNsYXNzPTwvY29kZT48dmFyPmNsYXNzLW5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNvbnN0YW50XzAwMmRzdHJpbmdfMDAyZGNsYXNzLTIwOSI+PC9hPlVzZSA8dmFyPmNsYXNzLW5hbWU8L3Zhcj4gYXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIGZvciBlYWNoCitsaXRlcmFsIHN0cmluZyBzcGVjaWZpZWQgd2l0aCB0aGUgc3ludGF4IDxjb2RlPkAiLi4uIjwvY29kZT4uICBUaGUgZGVmYXVsdAorY2xhc3MgbmFtZSBpcyA8Y29kZT5OWENvbnN0YW50U3RyaW5nPC9jb2RlPiBpZiB0aGUgR05VIHJ1bnRpbWUgaXMgYmVpbmcgdXNlZCwgYW5kCis8Y29kZT5OU0NvbnN0YW50U3RyaW5nPC9jb2RlPiBpZiB0aGUgTmVYVCBydW50aW1lIGlzIGJlaW5nIHVzZWQgKHNlZSBiZWxvdykuICBUaGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY29uc3RhbnQtY2ZzdHJpbmdzPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBpZiBhbHNvIHByZXNlbnQsIG92ZXJyaWRlcyB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY29uc3RhbnQtc3RyaW5nLWNsYXNzPC9zcGFuPjwvc2FtcD4gc2V0dGluZyBhbmQgY2F1c2UgPGNvZGU+QCIuLi4iPC9jb2RlPiBsaXRlcmFscwordG8gYmUgbGFpZCBvdXQgYXMgY29uc3RhbnQgQ29yZUZvdW5kYXRpb24gc3RyaW5ncy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZ251LXJ1bnRpbWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZnbnVfMDAyZHJ1bnRpbWUtMjEwIj48L2E+R2VuZXJhdGUgb2JqZWN0IGNvZGUgY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZCBHTlUgT2JqZWN0aXZlLUMKK3J1bnRpbWUuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IHR5cGVzIG9mIHN5c3RlbXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5leHQtcnVudGltZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5leHRfMDAyZHJ1bnRpbWUtMjExIj48L2E+R2VuZXJhdGUgb3V0cHV0IGNvbXBhdGlibGUgd2l0aCB0aGUgTmVYVCBydW50aW1lLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorZm9yIE5lWFQtYmFzZWQgc3lzdGVtcywgaW5jbHVkaW5nIERhcndpbiBhbmQgTWFjIE9TIFguICBUaGUgbWFjcm8KKzxjb2RlPl9fTkVYVF9SVU5USU1FX188L2NvZGU+IGlzIHByZWRlZmluZWQgaWYgKGFuZCBvbmx5IGlmKSB0aGlzIG9wdGlvbiBpcwordXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tbmlsLXJlY2VpdmVyczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRuaWxfMDAyZHJlY2VpdmVycy0yMTIiPjwvYT5Bc3N1bWUgdGhhdCBhbGwgT2JqZWN0aXZlLUMgbWVzc2FnZSBkaXNwYXRjaGVzICg8Y29kZT5bcmVjZWl2ZXIKK21lc3NhZ2U6YXJnXTwvY29kZT4pIGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdCBlbnN1cmUgdGhhdCB0aGUgcmVjZWl2ZXIgaXMKK25vdCA8Y29kZT5uaWw8L2NvZGU+LiAgVGhpcyBhbGxvd3MgZm9yIG1vcmUgZWZmaWNpZW50IGVudHJ5IHBvaW50cyBpbiB0aGUKK3J1bnRpbWUgdG8gYmUgdXNlZC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGgKK3RoZSBOZVhUIHJ1bnRpbWUgYW5kIEFCSSB2ZXJzaW9uIDAgb3IgMS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mb2JqYy1hYmktdmVyc2lvbj08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZvYmpjXzAwMmRhYmlfMDAyZHZlcnNpb24tMjEzIj48L2E+VXNlIHZlcnNpb24gPHZhcj5uPC92YXI+IG9mIHRoZSBPYmplY3RpdmUtQyBBQkkgZm9yIHRoZSBzZWxlY3RlZCBydW50aW1lLiAKK1RoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBmb3IgdGhlIE5lWFQgcnVudGltZS4gIEluIHRoYXQKK2Nhc2UsIFZlcnNpb24gMCBpcyB0aGUgdHJhZGl0aW9uYWwgKDMyLWJpdCkgQUJJIHdpdGhvdXQgc3VwcG9ydCBmb3IKK3Byb3BlcnRpZXMgYW5kIG90aGVyIE9iamVjdGl2ZS1DIDIuMCBhZGRpdGlvbnMuICBWZXJzaW9uIDEgaXMgdGhlCit0cmFkaXRpb25hbCAoMzItYml0KSBBQkkgd2l0aCBzdXBwb3J0IGZvciBwcm9wZXJ0aWVzIGFuZCBvdGhlcgorT2JqZWN0aXZlLUMgMi4wIGFkZGl0aW9ucy4gIFZlcnNpb24gMiBpcyB0aGUgbW9kZXJuICg2NC1iaXQpIEFCSS4gIElmCitub3RoaW5nIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgVmVyc2lvbiAwIG9uIDMyLWJpdCB0YXJnZXQKK21hY2hpbmVzLCBhbmQgVmVyc2lvbiAyIG9uIDY0LWJpdCB0YXJnZXQgbWFjaGluZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm9iamMtY2FsbC1jeHgtY2R0b3JzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mb2JqY18wMDJkY2FsbF8wMDJkY3h4XzAwMmRjZHRvcnMtMjE0Ij48L2E+Rm9yIGVhY2ggT2JqZWN0aXZlLUMgY2xhc3MsIGNoZWNrIGlmIGFueSBvZiBpdHMgaW5zdGFuY2UgdmFyaWFibGVzIGlzIGEKK0MrKyBvYmplY3Qgd2l0aCBhIG5vbi10cml2aWFsIGRlZmF1bHQgY29uc3RydWN0b3IuICBJZiBzbywgc3ludGhlc2l6ZSBhCitzcGVjaWFsIDxjb2RlPi0gKGlkKSAuY3h4X2NvbnN0cnVjdDwvY29kZT4gaW5zdGFuY2UgbWV0aG9kIHdoaWNoIHJ1bnMKK25vbi10cml2aWFsIGRlZmF1bHQgY29uc3RydWN0b3JzIG9uIGFueSBzdWNoIGluc3RhbmNlIHZhcmlhYmxlcywgaW4gb3JkZXIsCithbmQgdGhlbiByZXR1cm4gPGNvZGU+c2VsZjwvY29kZT4uICBTaW1pbGFybHksIGNoZWNrIGlmIGFueSBpbnN0YW5jZSB2YXJpYWJsZQoraXMgYSBDKysgb2JqZWN0IHdpdGggYSBub24tdHJpdmlhbCBkZXN0cnVjdG9yLCBhbmQgaWYgc28sIHN5bnRoZXNpemUgYQorc3BlY2lhbCA8Y29kZT4tICh2b2lkKSAuY3h4X2Rlc3RydWN0PC9jb2RlPiBtZXRob2Qgd2hpY2ggcnVucworYWxsIHN1Y2ggZGVmYXVsdCBkZXN0cnVjdG9ycywgaW4gcmV2ZXJzZSBvcmRlci4KKworICAgICA8cD5UaGUgPGNvZGU+LSAoaWQpIC5jeHhfY29uc3RydWN0PC9jb2RlPiBhbmQgPGNvZGU+LSAodm9pZCkgLmN4eF9kZXN0cnVjdDwvY29kZT4KK21ldGhvZHMgdGh1c2x5IGdlbmVyYXRlZCBvbmx5IG9wZXJhdGUgb24gaW5zdGFuY2UgdmFyaWFibGVzCitkZWNsYXJlZCBpbiB0aGUgY3VycmVudCBPYmplY3RpdmUtQyBjbGFzcywgYW5kIG5vdCB0aG9zZSBpbmhlcml0ZWQKK2Zyb20gc3VwZXJjbGFzc2VzLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBPYmplY3RpdmUtQworcnVudGltZSB0byBpbnZva2UgYWxsIHN1Y2ggbWV0aG9kcyBpbiBhbiBvYmplY3QncyBpbmhlcml0YW5jZQoraGllcmFyY2h5LiAgVGhlIDxjb2RlPi0gKGlkKSAuY3h4X2NvbnN0cnVjdDwvY29kZT4gbWV0aG9kcyBhcmUgaW52b2tlZAorYnkgdGhlIHJ1bnRpbWUgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBuZXcgb2JqZWN0IGluc3RhbmNlIGlzIGFsbG9jYXRlZDsKK3RoZSA8Y29kZT4tICh2b2lkKSAuY3h4X2Rlc3RydWN0PC9jb2RlPiBtZXRob2RzIGFyZSBpbnZva2VkIGltbWVkaWF0ZWx5CitiZWZvcmUgdGhlIHJ1bnRpbWUgZGVhbGxvY2F0ZXMgYW4gb2JqZWN0IGluc3RhbmNlLgorCisgICAgIDxwPkFzIG9mIHRoaXMgd3JpdGluZywgb25seSB0aGUgTmVYVCBydW50aW1lIG9uIE1hYyBPUyBYIDEwLjQgYW5kIGxhdGVyIGhhcworc3VwcG9ydCBmb3IgaW52b2tpbmcgdGhlIDxjb2RlPi0gKGlkKSAuY3h4X2NvbnN0cnVjdDwvY29kZT4gYW5kCis8Y29kZT4tICh2b2lkKSAuY3h4X2Rlc3RydWN0PC9jb2RlPiBtZXRob2RzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZvYmpjLWRpcmVjdC1kaXNwYXRjaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm9iamNfMDAyZGRpcmVjdF8wMDJkZGlzcGF0Y2gtMjE1Ij48L2E+QWxsb3cgZmFzdCBqdW1wcyB0byB0aGUgbWVzc2FnZSBkaXNwYXRjaGVyLiAgT24gRGFyd2luIHRoaXMgaXMKK2FjY29tcGxpc2hlZCB2aWEgdGhlIGNvbW0gcGFnZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mb2JqYy1leGNlcHRpb25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mb2JqY18wMDJkZXhjZXB0aW9ucy0yMTYiPjwvYT5FbmFibGUgc3ludGFjdGljIHN1cHBvcnQgZm9yIHN0cnVjdHVyZWQgZXhjZXB0aW9uIGhhbmRsaW5nIGluCitPYmplY3RpdmUtQywgc2ltaWxhciB0byB3aGF0IGlzIG9mZmVyZWQgYnkgQysrIGFuZCBKYXZhLiAgVGhpcyBvcHRpb24KK2lzIHJlcXVpcmVkIHRvIHVzZSB0aGUgT2JqZWN0aXZlLUMga2V5d29yZHMgPGNvZGU+QHRyeTwvY29kZT4sCis8Y29kZT5AdGhyb3c8L2NvZGU+LCA8Y29kZT5AY2F0Y2g8L2NvZGU+LCA8Y29kZT5AZmluYWxseTwvY29kZT4gYW5kCis8Y29kZT5Ac3luY2hyb25pemVkPC9jb2RlPi4gIFRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSB3aXRoIGJvdGggdGhlIEdOVQorcnVudGltZSBhbmQgdGhlIE5lWFQgcnVudGltZSAoYnV0IG5vdCBhdmFpbGFibGUgaW4gY29uanVuY3Rpb24gd2l0aAordGhlIE5lWFQgcnVudGltZSBvbiBNYWMgT1MgWCAxMC4yIGFuZCBlYXJsaWVyKS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mb2JqYy1nYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm9iamNfMDAyZGdjLTIxNyI+PC9hPkVuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEdDKSBpbiBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKworcHJvZ3JhbXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIHRoZSBOZVhUIHJ1bnRpbWU7IHRoZQorR05VIHJ1bnRpbWUgaGFzIGEgZGlmZmVyZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBpbXBsZW1lbnRhdGlvbiB0aGF0Citkb2VzIG5vdCByZXF1aXJlIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm9iamMtbmlsY2hlY2s8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZvYmpjXzAwMmRuaWxjaGVjay0yMTgiPjwvYT5Gb3IgdGhlIE5lWFQgcnVudGltZSB3aXRoIHZlcnNpb24gMiBvZiB0aGUgQUJJLCBjaGVjayBmb3IgYSBuaWwKK3JlY2VpdmVyIGluIG1ldGhvZCBpbnZvY2F0aW9ucyBiZWZvcmUgZG9pbmcgdGhlIGFjdHVhbCBtZXRob2QgY2FsbC4gCitUaGlzIGlzIHRoZSBkZWZhdWx0IGFuZCBjYW4gYmUgZGlzYWJsZWQgdXNpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tb2JqYy1uaWxjaGVjazwvc3Bhbj48L3NhbXA+LiAgQ2xhc3MgbWV0aG9kcyBhbmQgc3VwZXIgY2FsbHMgYXJlIG5ldmVyCitjaGVja2VkIGZvciBuaWwgaW4gdGhpcyB3YXkgbm8gbWF0dGVyIHdoYXQgdGhpcyBmbGFnIGlzIHNldCB0by4gCitDdXJyZW50bHkgdGhpcyBmbGFnIGRvZXMgbm90aGluZyB3aGVuIHRoZSBHTlUgcnVudGltZSwgb3IgYW4gb2xkZXIKK3ZlcnNpb24gb2YgdGhlIE5lWFQgcnVudGltZSBBQkksIGlzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm9iamMtc3RkPW9iamMxPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mb2JqY18wMDJkc3RkLTIxOSI+PC9hPkNvbmZvcm0gdG8gdGhlIGxhbmd1YWdlIHN5bnRheCBvZiBPYmplY3RpdmUtQyAxLjAsIHRoZSBsYW5ndWFnZQorcmVjb2duaXplZCBieSBHQ0MgNC4wLiAgVGhpcyBvbmx5IGFmZmVjdHMgdGhlIE9iamVjdGl2ZS1DIGFkZGl0aW9ucyB0bwordGhlIEMvQysrIGxhbmd1YWdlOyBpdCBkb2VzIG5vdCBhZmZlY3QgY29uZm9ybWFuY2UgdG8gQy9DKysgc3RhbmRhcmRzLAord2hpY2ggaXMgY29udHJvbGxlZCBieSB0aGUgc2VwYXJhdGUgQy9DKysgZGlhbGVjdCBvcHRpb24gZmxhZ3MuICBXaGVuCit0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGggdGhlIE9iamVjdGl2ZS1DIG9yIE9iamVjdGl2ZS1DKysgY29tcGlsZXIsCithbnkgT2JqZWN0aXZlLUMgc3ludGF4IHRoYXQgaXMgbm90IHJlY29nbml6ZWQgYnkgR0NDIDQuMCBpcyByZWplY3RlZC4gCitUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB5b3VyIE9iamVjdGl2ZS1DIGNvZGUgY2FuCitiZSBjb21waWxlZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEdDQy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcmVwbGFjZS1vYmpjLWNsYXNzZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZyZXBsYWNlXzAwMmRvYmpjXzAwMmRjbGFzc2VzLTIyMCI+PC9hPkVtaXQgYSBzcGVjaWFsIG1hcmtlciBpbnN0cnVjdGluZyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQoMSk8L3NwYW4+PC9zYW1wPiBub3QgdG8gc3RhdGljYWxseSBsaW5rIGluCit0aGUgcmVzdWx0aW5nIG9iamVjdCBmaWxlLCBhbmQgYWxsb3cgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmR5bGQoMSk8L3NwYW4+PC9zYW1wPiB0byBsb2FkIGl0IGluIGF0CitydW4gdGltZSBpbnN0ZWFkLiAgVGhpcyBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIEZpeC1hbmQtQ29udGludWUKK2RlYnVnZ2luZyBtb2RlLCB3aGVyZSB0aGUgb2JqZWN0IGZpbGUgaW4gcXVlc3Rpb24gbWF5IGJlIHJlY29tcGlsZWQgYW5kCitkeW5hbWljYWxseSByZWxvYWRlZCBpbiB0aGUgY291cnNlIG9mIHByb2dyYW0gZXhlY3V0aW9uLCB3aXRob3V0IHRoZSBuZWVkCit0byByZXN0YXJ0IHRoZSBwcm9ncmFtIGl0c2VsZi4gIEN1cnJlbnRseSwgRml4LWFuZC1Db250aW51ZSBmdW5jdGlvbmFsaXR5CitpcyBvbmx5IGF2YWlsYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBOZVhUIHJ1bnRpbWUgb24gTWFjIE9TIFggMTAuMworYW5kIGxhdGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ6ZXJvLWxpbms8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ6ZXJvXzAwMmRsaW5rLTIyMSI+PC9hPldoZW4gY29tcGlsaW5nIGZvciB0aGUgTmVYVCBydW50aW1lLCB0aGUgY29tcGlsZXIgb3JkaW5hcmlseSByZXBsYWNlcyBjYWxscwordG8gPGNvZGU+b2JqY19nZXRDbGFzcygiLi4uIik8L2NvZGU+ICh3aGVuIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBpcyBrbm93biBhdAorY29tcGlsZSB0aW1lKSB3aXRoIHN0YXRpYyBjbGFzcyByZWZlcmVuY2VzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGF0IGxvYWQgdGltZSwKK3doaWNoIGltcHJvdmVzIHJ1bi10aW1lIHBlcmZvcm1hbmNlLiAgU3BlY2lmeWluZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ6ZXJvLWxpbms8L3NwYW4+PC9zYW1wPiBmbGFnCitzdXBwcmVzc2VzIHRoaXMgYmVoYXZpb3IgYW5kIGNhdXNlcyBjYWxscyB0byA8Y29kZT5vYmpjX2dldENsYXNzKCIuLi4iKTwvY29kZT4KK3RvIGJlIHJldGFpbmVkLiAgVGhpcyBpcyB1c2VmdWwgaW4gWmVyby1MaW5rIGRlYnVnZ2luZyBtb2RlLCBzaW5jZSBpdCBhbGxvd3MKK2ZvciBpbmRpdmlkdWFsIGNsYXNzIGltcGxlbWVudGF0aW9ucyB0byBiZSBtb2RpZmllZCBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24uIAorVGhlIEdOVSBydW50aW1lIGN1cnJlbnRseSBhbHdheXMgcmV0YWlucyBjYWxscyB0byA8Y29kZT5vYmpjX2dldF9jbGFzcygiLi4uIik8L2NvZGU+CityZWdhcmRsZXNzIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWdlbi1kZWNsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ2VuXzAwMmRkZWNscy0yMjIiPjwvYT5EdW1wIGludGVyZmFjZSBkZWNsYXJhdGlvbnMgZm9yIGFsbCBjbGFzc2VzIHNlZW4gaW4gdGhlIHNvdXJjZSBmaWxlIHRvIGEKK2ZpbGUgbmFtZWQgPHNhbXA+PHZhcj5zb3VyY2VuYW1lPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi5kZWNsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2Fzc2lnbi1pbnRlcmNlcHQgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1XYXNzaWduXzAwMmRpbnRlcmNlcHQtMjIzIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRhc3NpZ25fMDAyZGludGVyY2VwdC0yMjQiPjwvYT5XYXJuIHdoZW5ldmVyIGFuIE9iamVjdGl2ZS1DIGFzc2lnbm1lbnQgaXMgYmVpbmcgaW50ZXJjZXB0ZWQgYnkgdGhlCitnYXJiYWdlIGNvbGxlY3Rvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8tcHJvdG9jb2wgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHByb3RvY29sLTIyNSI+PC9hPjxhIG5hbWU9ImluZGV4LVdwcm90b2NvbC0yMjYiPjwvYT5JZiBhIGNsYXNzIGlzIGRlY2xhcmVkIHRvIGltcGxlbWVudCBhIHByb3RvY29sLCBhIHdhcm5pbmcgaXMgaXNzdWVkIGZvcgorZXZlcnkgbWV0aG9kIGluIHRoZSBwcm90b2NvbCB0aGF0IGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY2xhc3MuICBUaGUKK2RlZmF1bHQgYmVoYXZpb3IgaXMgdG8gaXNzdWUgYSB3YXJuaW5nIGZvciBldmVyeSBtZXRob2Qgbm90IGV4cGxpY2l0bHkKK2ltcGxlbWVudGVkIGluIHRoZSBjbGFzcywgZXZlbiBpZiBhIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBpcyBpbmhlcml0ZWQKK2Zyb20gdGhlIHN1cGVyY2xhc3MuICBJZiB5b3UgdXNlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLXByb3RvY29sPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCB0aGVuCittZXRob2RzIGluaGVyaXRlZCBmcm9tIHRoZSBzdXBlcmNsYXNzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGltcGxlbWVudGVkLAorYW5kIG5vIHdhcm5pbmcgaXMgaXNzdWVkIGZvciB0aGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdzZWxlY3RvciA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdzZWxlY3Rvci0yMjciPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHNlbGVjdG9yLTIyOCI+PC9hPldhcm4gaWYgbXVsdGlwbGUgbWV0aG9kcyBvZiBkaWZmZXJlbnQgdHlwZXMgZm9yIHRoZSBzYW1lIHNlbGVjdG9yIGFyZQorZm91bmQgZHVyaW5nIGNvbXBpbGF0aW9uLiAgVGhlIGNoZWNrIGlzIHBlcmZvcm1lZCBvbiB0aGUgbGlzdCBvZiBtZXRob2RzCitpbiB0aGUgZmluYWwgc3RhZ2Ugb2YgY29tcGlsYXRpb24uICBBZGRpdGlvbmFsbHksIGEgY2hlY2sgaXMgcGVyZm9ybWVkCitmb3IgZWFjaCBzZWxlY3RvciBhcHBlYXJpbmcgaW4gYSA8Y29kZT5Ac2VsZWN0b3IoLi4uKTwvY29kZT4KK2V4cHJlc3Npb24sIGFuZCBhIGNvcnJlc3BvbmRpbmcgbWV0aG9kIGZvciB0aGF0IHNlbGVjdG9yIGhhcyBiZWVuIGZvdW5kCitkdXJpbmcgY29tcGlsYXRpb24uICBCZWNhdXNlIHRoZXNlIGNoZWNrcyBzY2FuIHRoZSBtZXRob2QgdGFibGUgb25seSBhdAordGhlIGVuZCBvZiBjb21waWxhdGlvbiwgdGhlc2Ugd2FybmluZ3MgYXJlIG5vdCBwcm9kdWNlZCBpZiB0aGUgZmluYWwKK3N0YWdlIG9mIGNvbXBpbGF0aW9uIGlzIG5vdCByZWFjaGVkLCBmb3IgZXhhbXBsZSBiZWNhdXNlIGFuIGVycm9yIGlzCitmb3VuZCBkdXJpbmcgY29tcGlsYXRpb24sIG9yIGJlY2F1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc3ludGF4LW9ubHk8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMKK2JlaW5nIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N0cmljdC1zZWxlY3Rvci1tYXRjaCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdzdHJpY3RfMDAyZHNlbGVjdG9yXzAwMmRtYXRjaC0yMjkiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHN0cmljdF8wMDJkc2VsZWN0b3JfMDAyZG1hdGNoLTIzMCI+PC9hPldhcm4gaWYgbXVsdGlwbGUgbWV0aG9kcyB3aXRoIGRpZmZlcmluZyBhcmd1bWVudCBhbmQvb3IgcmV0dXJuIHR5cGVzIGFyZQorZm91bmQgZm9yIGEgZ2l2ZW4gc2VsZWN0b3Igd2hlbiBhdHRlbXB0aW5nIHRvIHNlbmQgYSBtZXNzYWdlIHVzaW5nIHRoaXMKK3NlbGVjdG9yIHRvIGEgcmVjZWl2ZXIgb2YgdHlwZSA8Y29kZT5pZDwvY29kZT4gb3IgPGNvZGU+Q2xhc3M8L2NvZGU+LiAgV2hlbiB0aGlzIGZsYWcKK2lzIG9mZiAod2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLCB0aGUgY29tcGlsZXIgb21pdHMgc3VjaCB3YXJuaW5ncworaWYgYW55IGRpZmZlcmVuY2VzIGZvdW5kIGFyZSBjb25maW5lZCB0byB0eXBlcyB0aGF0IHNoYXJlIHRoZSBzYW1lIHNpemUKK2FuZCBhbGlnbm1lbnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VuZGVjbGFyZWQtc2VsZWN0b3IgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1XdW5kZWNsYXJlZF8wMDJkc2VsZWN0b3ItMjMxIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR1bmRlY2xhcmVkXzAwMmRzZWxlY3Rvci0yMzIiPjwvYT5XYXJuIGlmIGEgPGNvZGU+QHNlbGVjdG9yKC4uLik8L2NvZGU+IGV4cHJlc3Npb24gcmVmZXJyaW5nIHRvIGFuCit1bmRlY2xhcmVkIHNlbGVjdG9yIGlzIGZvdW5kLiAgQSBzZWxlY3RvciBpcyBjb25zaWRlcmVkIHVuZGVjbGFyZWQgaWYgbm8KK21ldGhvZCB3aXRoIHRoYXQgbmFtZSBoYXMgYmVlbiBkZWNsYXJlZCBiZWZvcmUgdGhlCis8Y29kZT5Ac2VsZWN0b3IoLi4uKTwvY29kZT4gZXhwcmVzc2lvbiwgZWl0aGVyIGV4cGxpY2l0bHkgaW4gYW4KKzxjb2RlPkBpbnRlcmZhY2U8L2NvZGU+IG9yIDxjb2RlPkBwcm90b2NvbDwvY29kZT4gZGVjbGFyYXRpb24sIG9yIGltcGxpY2l0bHkgaW4KK2FuIDxjb2RlPkBpbXBsZW1lbnRhdGlvbjwvY29kZT4gc2VjdGlvbi4gIFRoaXMgb3B0aW9uIGFsd2F5cyBwZXJmb3JtcyBpdHMKK2NoZWNrcyBhcyBzb29uIGFzIGEgPGNvZGU+QHNlbGVjdG9yKC4uLik8L2NvZGU+IGV4cHJlc3Npb24gaXMgZm91bmQsCit3aGlsZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3NlbGVjdG9yPC9zcGFuPjwvc2FtcD4gb25seSBwZXJmb3JtcyBpdHMgY2hlY2tzIGluIHRoZSBmaW5hbCBzdGFnZSBvZgorY29tcGlsYXRpb24uICBUaGlzIGFsc28gZW5mb3JjZXMgdGhlIGNvZGluZyBzdHlsZSBjb252ZW50aW9uCit0aGF0IG1ldGhvZHMgYW5kIHNlbGVjdG9ycyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBiZWluZyB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXByaW50LW9iamMtcnVudGltZS1pbmZvPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmludF8wMDJkb2JqY18wMDJkcnVudGltZV8wMDJkaW5mby0yMzMiPjwvYT5HZW5lcmF0ZSBDIGhlYWRlciBkZXNjcmliaW5nIHRoZSBsYXJnZXN0IHN0cnVjdHVyZSB0aGF0IGlzIHBhc3NlZCBieQordmFsdWUsIGlmIGFueS4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL09iamVjdGl2ZV8wMDJkQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9PYmplY3RpdmVfMDAyZEMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTY4ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9PYmplY3RpdmVfMDAyZEMuaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PYmplY3RpdmUtQyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIiB0aXRsZT0iQysrIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb21wYXRpYmlsaXR5Lmh0bWwjQ29tcGF0aWJpbGl0eSIgdGl0bGU9IkNvbXBhdGliaWxpdHkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT2JqZWN0aXZlLUMiPjwvYT4KKzxhIG5hbWU9Ik9iamVjdGl2ZV8wMDJkQyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb21wYXRpYmlsaXR5Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIj5DKysgRXh0ZW5zaW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPCEtLSBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cCAtLT4KKzxoMiBjbGFzcz0iY2hhcHRlciI+OCBHTlUgT2JqZWN0aXZlLUMgZmVhdHVyZXM8L2gyPgorCis8cD5UaGlzIGRvY3VtZW50IGlzIG1lYW50IHRvIGRlc2NyaWJlIHNvbWUgb2YgdGhlIEdOVSBPYmplY3RpdmUtQworZmVhdHVyZXMuICBJdCBpcyBub3QgaW50ZW5kZWQgdG8gdGVhY2ggeW91IE9iamVjdGl2ZS1DLiAgVGhlcmUgYXJlCitzZXZlcmFsIHJlc291cmNlcyBvbiB0aGUgSW50ZXJuZXQgdGhhdCBwcmVzZW50IHRoZSBsYW5ndWFnZS4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkuaHRtbCNHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJIj5HTlUgT2JqZWN0aXZlLUMgcnVudGltZSBBUEk8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJFeGVjdXRpbmctY29kZS1iZWZvcmUtbWFpbi5odG1sI0V4ZWN1dGluZy1jb2RlLWJlZm9yZS1tYWluIj5FeGVjdXRpbmcgY29kZSBiZWZvcmUgbWFpbjwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlR5cGUtZW5jb2RpbmcuaHRtbCNUeXBlLWVuY29kaW5nIj5UeXBlIGVuY29kaW5nPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iR2FyYmFnZS1Db2xsZWN0aW9uLmh0bWwjR2FyYmFnZS1Db2xsZWN0aW9uIj5HYXJiYWdlIENvbGxlY3Rpb248L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJDb25zdGFudC1zdHJpbmctb2JqZWN0cy5odG1sI0NvbnN0YW50LXN0cmluZy1vYmplY3RzIj5Db25zdGFudCBzdHJpbmcgb2JqZWN0czwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9ImNvbXBhdGliaWxpdHlfMDA1ZmFsaWFzLmh0bWwjY29tcGF0aWJpbGl0eV8wMDVmYWxpYXMiPmNvbXBhdGliaWxpdHlfYWxpYXM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJFeGNlcHRpb25zLmh0bWwjRXhjZXB0aW9ucyI+RXhjZXB0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9IlN5bmNocm9uaXphdGlvbi5odG1sI1N5bmNocm9uaXphdGlvbiI+U3luY2hyb25pemF0aW9uPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iRmFzdC1lbnVtZXJhdGlvbi5odG1sI0Zhc3QtZW51bWVyYXRpb24iPkZhc3QgZW51bWVyYXRpb248L2E+Cis8bGk+PGEgaHJlZj0iTWVzc2FnaW5nLXdpdGgtdGhlLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS5odG1sI01lc3NhZ2luZy13aXRoLXRoZS1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUiPk1lc3NhZ2luZyB3aXRoIHRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZTwvYT4KKzwvdWw+CisKKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL09mZnNldG9mLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL09mZnNldG9mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhY2FhMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT2Zmc2V0b2YuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PZmZzZXRvZiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWZWN0b3ItRXh0ZW5zaW9ucy5odG1sI1ZlY3Rvci1FeHRlbnNpb25zIiB0aXRsZT0iVmVjdG9yIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIiB0aXRsZT0iX19zeW5jIEJ1aWx0aW5zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik9mZnNldG9mIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Il8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMiPl9fc3luYyBCdWlsdGluczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZlY3Rvci1FeHRlbnNpb25zLmh0bWwjVmVjdG9yLUV4dGVuc2lvbnMiPlZlY3RvciBFeHRlbnNpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjUwIE9mZnNldG9mPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zm9mZnNldG9mLTI4OTAiPjwvYT4KK0dDQyBpbXBsZW1lbnRzIGZvciBib3RoIEMgYW5kIEMrKyBhIHN5bnRhY3RpYyBleHRlbnNpb24gdG8gaW1wbGVtZW50Cit0aGUgPGNvZGU+b2Zmc2V0b2Y8L2NvZGU+IG1hY3JvLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgcHJpbWFyeToKKyAgICAgICAgICAgICAiX19idWlsdGluX29mZnNldG9mIiAiKCIgPGNvZGU+dHlwZW5hbWU8L2NvZGU+ICIsIiBvZmZzZXRvZl9tZW1iZXJfZGVzaWduYXRvciAiKSIKKyAgICAgCisgICAgIG9mZnNldG9mX21lbWJlcl9kZXNpZ25hdG9yOgorICAgICAgICAgICAgICAgPGNvZGU+aWRlbnRpZmllcjwvY29kZT4KKyAgICAgICAgICAgICB8IG9mZnNldG9mX21lbWJlcl9kZXNpZ25hdG9yICIuIiA8Y29kZT5pZGVudGlmaWVyPC9jb2RlPgorICAgICAgICAgICAgIHwgb2Zmc2V0b2ZfbWVtYmVyX2Rlc2lnbmF0b3IgIlsiIDxjb2RlPmV4cHI8L2NvZGU+ICJdIgorPC9wcmU+CisgPHA+VGhpcyBleHRlbnNpb24gaXMgc3VmZmljaWVudCBzdWNoIHRoYXQKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgb2Zmc2V0b2YoPHZhcj50eXBlPC92YXI+LCA8dmFyPm1lbWJlcjwvdmFyPikgIF9fYnVpbHRpbl9vZmZzZXRvZiAoPHZhcj50eXBlPC92YXI+LCA8dmFyPm1lbWJlcjwvdmFyPikKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+aXMgYSBzdWl0YWJsZSBkZWZpbml0aW9uIG9mIHRoZSA8Y29kZT5vZmZzZXRvZjwvY29kZT4gbWFjcm8uICBJbiBDKyssIDx2YXI+dHlwZTwvdmFyPgorbWF5IGJlIGRlcGVuZGVudC4gIEluIGVpdGhlciBjYXNlLCA8dmFyPm1lbWJlcjwvdmFyPiBtYXkgY29uc2lzdCBvZiBhIHNpbmdsZQoraWRlbnRpZmllciwgb3IgYSBzZXF1ZW5jZSBvZiBtZW1iZXIgYWNjZXNzZXMgYW5kIGFycmF5IHJlZmVyZW5jZXMuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL09wdGltaXplLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT3B0aW1pemUtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYzc5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL09wdGltaXplLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDI3MDAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk9wdGltaXplIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIiB0aXRsZT0iSW52b2tpbmcgR0NDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyIgdGl0bGU9IkRlYnVnZ2luZyBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyIgdGl0bGU9IlByZXByb2Nlc3NvciBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik9wdGltaXplLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyI+SW52b2tpbmcgR0NDPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xMCBPcHRpb25zIFRoYXQgQ29udHJvbCBPcHRpbWl6YXRpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpbWl6ZS1vcHRpb25zLTcyOCI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1vcHRpbWl6YXRpb24tNzI5Ij48L2E+CitUaGVzZSBvcHRpb25zIGNvbnRyb2wgdmFyaW91cyBzb3J0cyBvZiBvcHRpbWl6YXRpb25zLgorCisgPHA+V2l0aG91dCBhbnkgb3B0aW1pemF0aW9uIG9wdGlvbiwgdGhlIGNvbXBpbGVyJ3MgZ29hbCBpcyB0byByZWR1Y2UgdGhlCitjb3N0IG9mIGNvbXBpbGF0aW9uIGFuZCB0byBtYWtlIGRlYnVnZ2luZyBwcm9kdWNlIHRoZSBleHBlY3RlZAorcmVzdWx0cy4gIFN0YXRlbWVudHMgYXJlIGluZGVwZW5kZW50OiBpZiB5b3Ugc3RvcCB0aGUgcHJvZ3JhbSB3aXRoIGEKK2JyZWFrcG9pbnQgYmV0d2VlbiBzdGF0ZW1lbnRzLCB5b3UgY2FuIHRoZW4gYXNzaWduIGEgbmV3IHZhbHVlIHRvIGFueQordmFyaWFibGUgb3IgY2hhbmdlIHRoZSBwcm9ncmFtIGNvdW50ZXIgdG8gYW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGUKK2Z1bmN0aW9uIGFuZCBnZXQgZXhhY3RseSB0aGUgcmVzdWx0cyB5b3UgZXhwZWN0IGZyb20gdGhlIHNvdXJjZQorY29kZS4KKworIDxwPlR1cm5pbmcgb24gb3B0aW1pemF0aW9uIGZsYWdzIG1ha2VzIHRoZSBjb21waWxlciBhdHRlbXB0IHRvIGltcHJvdmUKK3RoZSBwZXJmb3JtYW5jZSBhbmQvb3IgY29kZSBzaXplIGF0IHRoZSBleHBlbnNlIG9mIGNvbXBpbGF0aW9uIHRpbWUKK2FuZCBwb3NzaWJseSB0aGUgYWJpbGl0eSB0byBkZWJ1ZyB0aGUgcHJvZ3JhbS4KKworIDxwPlRoZSBjb21waWxlciBwZXJmb3JtcyBvcHRpbWl6YXRpb24gYmFzZWQgb24gdGhlIGtub3dsZWRnZSBpdCBoYXMgb2YgdGhlCitwcm9ncmFtLiAgQ29tcGlsaW5nIG11bHRpcGxlIGZpbGVzIGF0IG9uY2UgdG8gYSBzaW5nbGUgb3V0cHV0IGZpbGUgbW9kZSBhbGxvd3MKK3RoZSBjb21waWxlciB0byB1c2UgaW5mb3JtYXRpb24gZ2FpbmVkIGZyb20gYWxsIG9mIHRoZSBmaWxlcyB3aGVuIGNvbXBpbGluZworZWFjaCBvZiB0aGVtLgorCisgPHA+Tm90IGFsbCBvcHRpbWl6YXRpb25zIGFyZSBjb250cm9sbGVkIGRpcmVjdGx5IGJ5IGEgZmxhZy4gIE9ubHkKK29wdGltaXphdGlvbnMgdGhhdCBoYXZlIGEgZmxhZyBhcmUgbGlzdGVkIGluIHRoaXMgc2VjdGlvbi4KKworIDxwPk1vc3Qgb3B0aW1pemF0aW9ucyBhcmUgb25seSBlbmFibGVkIGlmIGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gbGV2ZWwgaXMgc2V0IG9uCit0aGUgY29tbWFuZCBsaW5lLiAgT3RoZXJ3aXNlIHRoZXkgYXJlIGRpc2FibGVkLCBldmVuIGlmIGluZGl2aWR1YWwKK29wdGltaXphdGlvbiBmbGFncyBhcmUgc3BlY2lmaWVkLgorCisgPHA+RGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgYW5kIGhvdyBHQ0Mgd2FzIGNvbmZpZ3VyZWQsIGEgc2xpZ2h0bHkgZGlmZmVyZW50CitzZXQgb2Ygb3B0aW1pemF0aW9ucyBtYXkgYmUgZW5hYmxlZCBhdCBlYWNoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gbGV2ZWwgdGhhbgordGhvc2UgbGlzdGVkIGhlcmUuICBZb3UgY2FuIGludm9rZSBHQ0Mgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUSAtLWhlbHA9b3B0aW1pemVyczwvc3Bhbj48L3NhbXA+Cit0byBmaW5kIG91dCB0aGUgZXhhY3Qgc2V0IG9mIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCBhdCBlYWNoIGxldmVsLiAKK1NlZSA8YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk92ZXJhbGwgT3B0aW9uczwvYT4sIGZvciBleGFtcGxlcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LU88L2NvZGU+PGR0Pjxjb2RlPi1PMTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTy03MzAiPjwvYT48YSBuYW1lPSJpbmRleC1PMS03MzEiPjwvYT5PcHRpbWl6ZS4gIE9wdGltaXppbmcgY29tcGlsYXRpb24gdGFrZXMgc29tZXdoYXQgbW9yZSB0aW1lLCBhbmQgYSBsb3QKK21vcmUgbWVtb3J5IGZvciBhIGxhcmdlIGZ1bmN0aW9uLgorCisgICAgIDxwPldpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiwgdGhlIGNvbXBpbGVyIHRyaWVzIHRvIHJlZHVjZSBjb2RlIHNpemUgYW5kIGV4ZWN1dGlvbgordGltZSwgd2l0aG91dCBwZXJmb3JtaW5nIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgdGFrZSBhIGdyZWF0IGRlYWwgb2YKK2NvbXBpbGF0aW9uIHRpbWUuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiB0dXJucyBvbiB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBmbGFnczoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWZhdXRvLWluYy1kZWMgCisgICAgICAgICAgLWZjb21wYXJlLWVsaW0gCisgICAgICAgICAgLWZjcHJvcC1yZWdpc3RlcnMgCisgICAgICAgICAgLWZkY2UgCisgICAgICAgICAgLWZkZWZlci1wb3AgCisgICAgICAgICAgLWZkZWxheWVkLWJyYW5jaCAKKyAgICAgICAgICAtZmRzZSAKKyAgICAgICAgICAtZmd1ZXNzLWJyYW5jaC1wcm9iYWJpbGl0eSAKKyAgICAgICAgICAtZmlmLWNvbnZlcnNpb24yIAorICAgICAgICAgIC1maWYtY29udmVyc2lvbiAKKyAgICAgICAgICAtZmlwYS1wdXJlLWNvbnN0IAorICAgICAgICAgIC1maXBhLXByb2ZpbGUgCisgICAgICAgICAgLWZpcGEtcmVmZXJlbmNlIAorICAgICAgICAgIC1mbWVyZ2UtY29uc3RhbnRzCisgICAgICAgICAgLWZzcGxpdC13aWRlLXR5cGVzIAorICAgICAgICAgIC1mdHJlZS1iaXQtY2NwIAorICAgICAgICAgIC1mdHJlZS1idWlsdGluLWNhbGwtZGNlIAorICAgICAgICAgIC1mdHJlZS1jY3AgCisgICAgICAgICAgLWZ0cmVlLWNoIAorICAgICAgICAgIC1mdHJlZS1jb3B5cmVuYW1lIAorICAgICAgICAgIC1mdHJlZS1kY2UgCisgICAgICAgICAgLWZ0cmVlLWRvbWluYXRvci1vcHRzIAorICAgICAgICAgIC1mdHJlZS1kc2UgCisgICAgICAgICAgLWZ0cmVlLWZvcndwcm9wIAorICAgICAgICAgIC1mdHJlZS1mcmUgCisgICAgICAgICAgLWZ0cmVlLXBoaXByb3AgCisgICAgICAgICAgLWZ0cmVlLXNsc3IgCisgICAgICAgICAgLWZ0cmVlLXNyYSAKKyAgICAgICAgICAtZnRyZWUtcHRhIAorICAgICAgICAgIC1mdHJlZS10ZXIgCisgICAgICAgICAgLWZ1bml0LWF0LWEtdGltZQorPC9wcmU+CisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYWxzbyB0dXJucyBvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9taXQtZnJhbWUtcG9pbnRlcjwvc3Bhbj48L3NhbXA+IG9uIG1hY2hpbmVzCit3aGVyZSBkb2luZyBzbyBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aCBkZWJ1Z2dpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tTzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LU8yLTczMiI+PC9hPk9wdGltaXplIGV2ZW4gbW9yZS4gIEdDQyBwZXJmb3JtcyBuZWFybHkgYWxsIHN1cHBvcnRlZCBvcHRpbWl6YXRpb25zCit0aGF0IGRvIG5vdCBpbnZvbHZlIGEgc3BhY2Utc3BlZWQgdHJhZGVvZmYuIAorQXMgY29tcGFyZWQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiwgdGhpcyBvcHRpb24gaW5jcmVhc2VzIGJvdGggY29tcGlsYXRpb24gdGltZQorYW5kIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4gdHVybnMgb24gYWxsIG9wdGltaXphdGlvbiBmbGFncyBzcGVjaWZpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPi4gIEl0CithbHNvIHR1cm5zIG9uIHRoZSBmb2xsb3dpbmcgb3B0aW1pemF0aW9uIGZsYWdzOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtZnRocmVhZC1qdW1wcyAKKyAgICAgICAgICAtZmFsaWduLWZ1bmN0aW9ucyAgLWZhbGlnbi1qdW1wcyAKKyAgICAgICAgICAtZmFsaWduLWxvb3BzICAtZmFsaWduLWxhYmVscyAKKyAgICAgICAgICAtZmNhbGxlci1zYXZlcyAKKyAgICAgICAgICAtZmNyb3NzanVtcGluZyAKKyAgICAgICAgICAtZmNzZS1mb2xsb3ctanVtcHMgIC1mY3NlLXNraXAtYmxvY2tzIAorICAgICAgICAgIC1mZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3MgCisgICAgICAgICAgLWZkZXZpcnR1YWxpemUgCisgICAgICAgICAgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAKKyAgICAgICAgICAtZmdjc2UgIC1mZ2NzZS1sbSAgCisgICAgICAgICAgLWZob2lzdC1hZGphY2VudC1sb2FkcyAKKyAgICAgICAgICAtZmlubGluZS1zbWFsbC1mdW5jdGlvbnMgCisgICAgICAgICAgLWZpbmRpcmVjdC1pbmxpbmluZyAKKyAgICAgICAgICAtZmlwYS1zcmEgCisgICAgICAgICAgLWZvcHRpbWl6ZS1zaWJsaW5nLWNhbGxzIAorICAgICAgICAgIC1mcGFydGlhbC1pbmxpbmluZyAKKyAgICAgICAgICAtZnBlZXBob2xlMiAKKyAgICAgICAgICAtZnJlZ21vdmUgCisgICAgICAgICAgLWZyZW9yZGVyLWJsb2NrcyAgLWZyZW9yZGVyLWZ1bmN0aW9ucyAKKyAgICAgICAgICAtZnJlcnVuLWNzZS1hZnRlci1sb29wICAKKyAgICAgICAgICAtZnNjaGVkLWludGVyYmxvY2sgIC1mc2NoZWQtc3BlYyAKKyAgICAgICAgICAtZnNjaGVkdWxlLWluc25zICAtZnNjaGVkdWxlLWluc25zMiAKKyAgICAgICAgICAtZnN0cmljdC1hbGlhc2luZyAtZnN0cmljdC1vdmVyZmxvdyAKKyAgICAgICAgICAtZnRyZWUtc3dpdGNoLWNvbnZlcnNpb24gLWZ0cmVlLXRhaWwtbWVyZ2UgCisgICAgICAgICAgLWZ0cmVlLXByZSAKKyAgICAgICAgICAtZnRyZWUtdnJwCis8L3ByZT4KKyAgICAgPHA+UGxlYXNlIG5vdGUgdGhlIHdhcm5pbmcgdW5kZXIgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZnY3NlPC9zcGFuPjwvc2FtcD4gYWJvdXQKK2ludm9raW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9uIHByb2dyYW1zIHRoYXQgdXNlIGNvbXB1dGVkIGdvdG9zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU8zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1PMy03MzMiPjwvYT5PcHRpbWl6ZSB5ZXQgbW9yZS4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+IHR1cm5zIG9uIGFsbCBvcHRpbWl6YXRpb25zIHNwZWNpZmllZAorYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4gYW5kIGFsc28gdHVybnMgb24gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1maW5saW5lLWZ1bmN0aW9uczwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnN3aXRjaC1sb29wczwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByZWRpY3RpdmUtY29tbW9uaW5nPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmdjc2UtYWZ0ZXItcmVsb2FkPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJlZS12ZWN0b3JpemU8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdmVjdC1jb3N0LW1vZGVsPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnRyZWUtcGFydGlhbC1wcmU8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpcGEtY3AtY2xvbmU8L3NwYW4+PC9zYW1wPiBvcHRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU8wPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1PMC03MzQiPjwvYT5SZWR1Y2UgY29tcGlsYXRpb24gdGltZSBhbmQgbWFrZSBkZWJ1Z2dpbmcgcHJvZHVjZSB0aGUgZXhwZWN0ZWQKK3Jlc3VsdHMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU9zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Pcy03MzUiPjwvYT5PcHRpbWl6ZSBmb3Igc2l6ZS4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+IGVuYWJsZXMgYWxsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9wdGltaXphdGlvbnMgdGhhdAorZG8gbm90IHR5cGljYWxseSBpbmNyZWFzZSBjb2RlIHNpemUuICBJdCBhbHNvIHBlcmZvcm1zIGZ1cnRoZXIKK29wdGltaXphdGlvbnMgZGVzaWduZWQgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPiBkaXNhYmxlcyB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBmbGFnczoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWZhbGlnbi1mdW5jdGlvbnMgIC1mYWxpZ24tanVtcHMgIC1mYWxpZ24tbG9vcHMgCisgICAgICAgICAgLWZhbGlnbi1sYWJlbHMgIC1mcmVvcmRlci1ibG9ja3MgIC1mcmVvcmRlci1ibG9ja3MtYW5kLXBhcnRpdGlvbiAKKyAgICAgICAgICAtZnByZWZldGNoLWxvb3AtYXJyYXlzICAtZnRyZWUtdmVjdC1sb29wLXZlcnNpb24KKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPi1PZmFzdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtT2Zhc3QtNzM2Ij48L2E+RGlzcmVnYXJkIHN0cmljdCBzdGFuZGFyZHMgY29tcGxpYW5jZS4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PZmFzdDwvc3Bhbj48L3NhbXA+IGVuYWJsZXMgYWxsCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiBvcHRpbWl6YXRpb25zLiAgSXQgYWxzbyBlbmFibGVzIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgbm90Cit2YWxpZCBmb3IgYWxsIHN0YW5kYXJkLWNvbXBsaWFudCBwcm9ncmFtcy4gCitJdCB0dXJucyBvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZhc3QtbWF0aDwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgRm9ydHJhbi1zcGVjaWZpYworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1wcm90ZWN0LXBhcmVuczwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0YWNrLWFycmF5czwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU9nPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1PZy03MzciPjwvYT5PcHRpbWl6ZSBkZWJ1Z2dpbmcgZXhwZXJpZW5jZS4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PZzwvc3Bhbj48L3NhbXA+IGVuYWJsZXMgb3B0aW1pemF0aW9ucwordGhhdCBkbyBub3QgaW50ZXJmZXJlIHdpdGggZGVidWdnaW5nLiBJdCBzaG91bGQgYmUgdGhlIG9wdGltaXphdGlvbgorbGV2ZWwgb2YgY2hvaWNlIGZvciB0aGUgc3RhbmRhcmQgZWRpdC1jb21waWxlLWRlYnVnIGN5Y2xlLCBvZmZlcmluZworYSByZWFzb25hYmxlIGxldmVsIG9mIG9wdGltaXphdGlvbiB3aGlsZSBtYWludGFpbmluZyBmYXN0IGNvbXBpbGF0aW9uCithbmQgYSBnb29kIGRlYnVnZ2luZyBleHBlcmllbmNlLgorCisgICAgIDxwPklmIHlvdSB1c2UgbXVsdGlwbGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBvcHRpb25zLCB3aXRoIG9yIHdpdGhvdXQgbGV2ZWwgbnVtYmVycywKK3RoZSBsYXN0IHN1Y2ggb3B0aW9uIGlzIHRoZSBvbmUgdGhhdCBpcyBlZmZlY3RpdmUuIAorPC9kbD4KKworIDxwPk9wdGlvbnMgb2YgdGhlIGZvcm0gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWY8L3NwYW4+PHZhcj5mbGFnPC92YXI+PC9zYW1wPiBzcGVjaWZ5IG1hY2hpbmUtaW5kZXBlbmRlbnQKK2ZsYWdzLiAgTW9zdCBmbGFncyBoYXZlIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zOyB0aGUgbmVnYXRpdmUKK2Zvcm0gb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmb288L3NwYW4+PC9zYW1wPiBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWZvbzwvc3Bhbj48L3NhbXA+LiAgSW4gdGhlIHRhYmxlCitiZWxvdywgb25seSBvbmUgb2YgdGhlIGZvcm1zIGlzIGxpc3RlZCZtZGFzaDt0aGUgb25lIHlvdSB0eXBpY2FsbHkKK3VzZS4gIFlvdSBjYW4gZmlndXJlIG91dCB0aGUgb3RoZXIgZm9ybSBieSBlaXRoZXIgcmVtb3ZpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uby08L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29yIGFkZGluZyBpdC4KKworIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBjb250cm9sIHNwZWNpZmljIG9wdGltaXphdGlvbnMuICBUaGV5IGFyZSBlaXRoZXIKK2FjdGl2YXRlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgb3IgYXJlIHJlbGF0ZWQgdG8gb25lcyB0aGF0IGFyZS4gIFlvdQorY2FuIHVzZSB0aGUgZm9sbG93aW5nIGZsYWdzIGluIHRoZSByYXJlIGNhc2VzIHdoZW4gJmxkcXVvO2ZpbmUtdHVuaW5nJnJkcXVvOyBvZgorb3B0aW1pemF0aW9ucyB0byBiZSBwZXJmb3JtZWQgaXMgZGVzaXJlZC4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZuby1kZWZhdWx0LWlubGluZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRkZWZhdWx0XzAwMmRpbmxpbmUtNzM4Ij48L2E+RG8gbm90IG1ha2UgbWVtYmVyIGZ1bmN0aW9ucyBpbmxpbmUgYnkgZGVmYXVsdCBtZXJlbHkgYmVjYXVzZSB0aGV5IGFyZQorZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHNjb3BlIChDKysgb25seSkuICBPdGhlcndpc2UsIHdoZW4geW91IHNwZWNpZnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD48IS0tIC9AdyAtLT4sIG1lbWJlciBmdW5jdGlvbnMgZGVmaW5lZCBpbnNpZGUgY2xhc3Mgc2NvcGUgYXJlIGNvbXBpbGVkCitpbmxpbmUgYnkgZGVmYXVsdDsgaS5lLiwgeW91IGRvbid0IG5lZWQgdG8gYWRkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW5saW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGZyb250IG9mCit0aGUgbWVtYmVyIGZ1bmN0aW9uIG5hbWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWRlZmVyLXBvcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRkZWZlcl8wMDJkcG9wLTczOSI+PC9hPkFsd2F5cyBwb3AgdGhlIGFyZ3VtZW50cyB0byBlYWNoIGZ1bmN0aW9uIGNhbGwgYXMgc29vbiBhcyB0aGF0IGZ1bmN0aW9uCityZXR1cm5zLiAgRm9yIG1hY2hpbmVzIHRoYXQgbXVzdCBwb3AgYXJndW1lbnRzIGFmdGVyIGEgZnVuY3Rpb24gY2FsbCwKK3RoZSBjb21waWxlciBub3JtYWxseSBsZXRzIGFyZ3VtZW50cyBhY2N1bXVsYXRlIG9uIHRoZSBzdGFjayBmb3Igc2V2ZXJhbAorZnVuY3Rpb24gY2FsbHMgYW5kIHBvcHMgdGhlbSBhbGwgYXQgb25jZS4KKworICAgICA8cD5EaXNhYmxlZCBhdCBsZXZlbHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZm9yd2FyZC1wcm9wYWdhdGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZmb3J3YXJkXzAwMmRwcm9wYWdhdGUtNzQwIj48L2E+UGVyZm9ybSBhIGZvcndhcmQgcHJvcGFnYXRpb24gcGFzcyBvbiBSVEwuICBUaGUgcGFzcyB0cmllcyB0byBjb21iaW5lIHR3bworaW5zdHJ1Y3Rpb25zIGFuZCBjaGVja3MgaWYgdGhlIHJlc3VsdCBjYW4gYmUgc2ltcGxpZmllZC4gIElmIGxvb3AgdW5yb2xsaW5nCitpcyBhY3RpdmUsIHR3byBwYXNzZXMgYXJlIHBlcmZvcm1lZCBhbmQgdGhlIHNlY29uZCBpcyBzY2hlZHVsZWQgYWZ0ZXIKK2xvb3AgdW5yb2xsaW5nLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBvcHRpbWl6YXRpb24gbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZmcC1jb250cmFjdD08L2NvZGU+PHZhcj5zdHlsZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mZnBfMDAyZGNvbnRyYWN0LTc0MSI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnAtY29udHJhY3Q9b2ZmPC9zcGFuPjwvc2FtcD4gZGlzYWJsZXMgZmxvYXRpbmctcG9pbnQgZXhwcmVzc2lvbiBjb250cmFjdGlvbi4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZwLWNvbnRyYWN0PWZhc3Q8L3NwYW4+PC9zYW1wPiBlbmFibGVzIGZsb2F0aW5nLXBvaW50IGV4cHJlc3Npb24gY29udHJhY3Rpb24KK3N1Y2ggYXMgZm9ybWluZyBvZiBmdXNlZCBtdWx0aXBseS1hZGQgb3BlcmF0aW9ucyBpZiB0aGUgdGFyZ2V0IGhhcworbmF0aXZlIHN1cHBvcnQgZm9yIHRoZW0uIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmcC1jb250cmFjdD1vbjwvc3Bhbj48L3NhbXA+IGVuYWJsZXMgZmxvYXRpbmctcG9pbnQgZXhwcmVzc2lvbiBjb250cmFjdGlvbgoraWYgYWxsb3dlZCBieSB0aGUgbGFuZ3VhZ2Ugc3RhbmRhcmQuICBUaGlzIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQKK2FuZCB0cmVhdGVkIGVxdWFsIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnAtY29udHJhY3Q9b2ZmPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmcC1jb250cmFjdD1mYXN0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm9taXQtZnJhbWUtcG9pbnRlcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm9taXRfMDAyZGZyYW1lXzAwMmRwb2ludGVyLTc0MiI+PC9hPkRvbid0IGtlZXAgdGhlIGZyYW1lIHBvaW50ZXIgaW4gYSByZWdpc3RlciBmb3IgZnVuY3Rpb25zIHRoYXQKK2Rvbid0IG5lZWQgb25lLiAgVGhpcyBhdm9pZHMgdGhlIGluc3RydWN0aW9ucyB0byBzYXZlLCBzZXQgdXAgYW5kCityZXN0b3JlIGZyYW1lIHBvaW50ZXJzOyBpdCBhbHNvIG1ha2VzIGFuIGV4dHJhIHJlZ2lzdGVyIGF2YWlsYWJsZQoraW4gbWFueSBmdW5jdGlvbnMuICA8c3Ryb25nPkl0IGFsc28gbWFrZXMgZGVidWdnaW5nIGltcG9zc2libGUgb24KK3NvbWUgbWFjaGluZXMuPC9zdHJvbmc+CisKKyAgICAgPHA+T24gc29tZSBtYWNoaW5lcywgc3VjaCBhcyB0aGUgVkFYLCB0aGlzIGZsYWcgaGFzIG5vIGVmZmVjdCwgYmVjYXVzZQordGhlIHN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2UgYXV0b21hdGljYWxseSBoYW5kbGVzIHRoZSBmcmFtZSBwb2ludGVyCithbmQgbm90aGluZyBpcyBzYXZlZCBieSBwcmV0ZW5kaW5nIGl0IGRvZXNuJ3QgZXhpc3QuICBUaGUKK21hY2hpbmUtZGVzY3JpcHRpb24gbWFjcm8gPGNvZGU+RlJBTUVfUE9JTlRFUl9SRVFVSVJFRDwvY29kZT4gY29udHJvbHMKK3doZXRoZXIgYSB0YXJnZXQgbWFjaGluZSBzdXBwb3J0cyB0aGlzIGZsYWcuICBTZWUgPGEgaHJlZj0iLi4vZ2NjaW50L1JlZ2lzdGVycy5odG1sI1JlZ2lzdGVycyI+UmVnaXN0ZXIgVXNhZ2U8L2E+LgorCisgICAgIDxwPlN0YXJ0aW5nIHdpdGggR0NDIHZlcnNpb24gNC42LCB0aGUgZGVmYXVsdCBzZXR0aW5nICh3aGVuIG5vdCBvcHRpbWl6aW5nIGZvcgorc2l6ZSkgZm9yIDMyLWJpdCBHTlUvTGludXggeDg2IGFuZCAzMi1iaXQgRGFyd2luIHg4NiB0YXJnZXRzIGhhcyBiZWVuIGNoYW5nZWQgdG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mb21pdC1mcmFtZS1wb2ludGVyPC9zcGFuPjwvc2FtcD4uICBUaGUgZGVmYXVsdCBjYW4gYmUgcmV2ZXJ0ZWQgdG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tb21pdC1mcmFtZS1wb2ludGVyPC9zcGFuPjwvc2FtcD4gYnkgY29uZmlndXJpbmcgR0NDIHdpdGggdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1mcmFtZS1wb2ludGVyPC9zcGFuPjwvc2FtcD4gY29uZmlndXJlIG9wdGlvbi4KKworICAgICA8cD5FbmFibGVkIGF0IGxldmVscyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZvcHRpbWl6ZS1zaWJsaW5nLWNhbGxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mb3B0aW1pemVfMDAyZHNpYmxpbmdfMDAyZGNhbGxzLTc0MyI+PC9hPk9wdGltaXplIHNpYmxpbmcgYW5kIHRhaWwgcmVjdXJzaXZlIGNhbGxzLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWlubGluZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRpbmxpbmUtNzQ0Ij48L2E+RG8gbm90IGV4cGFuZCBhbnkgZnVuY3Rpb25zIGlubGluZSBhcGFydCBmcm9tIHRob3NlIG1hcmtlZCB3aXRoCit0aGUgPGNvZGU+YWx3YXlzX2lubGluZTwvY29kZT4gYXR0cmlidXRlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIG5vdAorb3B0aW1pemluZy4KKworICAgICA8cD5TaW5nbGUgZnVuY3Rpb25zIGNhbiBiZSBleGVtcHRlZCBmcm9tIGlubGluaW5nIGJ5IG1hcmtpbmcgdGhlbQord2l0aCB0aGUgPGNvZGU+bm9pbmxpbmU8L2NvZGU+IGF0dHJpYnV0ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maW5saW5lLXNtYWxsLWZ1bmN0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmlubGluZV8wMDJkc21hbGxfMDAyZGZ1bmN0aW9ucy03NDUiPjwvYT5JbnRlZ3JhdGUgZnVuY3Rpb25zIGludG8gdGhlaXIgY2FsbGVycyB3aGVuIHRoZWlyIGJvZHkgaXMgc21hbGxlciB0aGFuIGV4cGVjdGVkCitmdW5jdGlvbiBjYWxsIGNvZGUgKHNvIG92ZXJhbGwgc2l6ZSBvZiBwcm9ncmFtIGdldHMgc21hbGxlcikuICBUaGUgY29tcGlsZXIKK2hldXJpc3RpY2FsbHkgZGVjaWRlcyB3aGljaCBmdW5jdGlvbnMgYXJlIHNpbXBsZSBlbm91Z2ggdG8gYmUgd29ydGggaW50ZWdyYXRpbmcKK2luIHRoaXMgd2F5LiAgVGhpcyBpbmxpbmluZyBhcHBsaWVzIHRvIGFsbCBmdW5jdGlvbnMsIGV2ZW4gdGhvc2Ugbm90IGRlY2xhcmVkCitpbmxpbmUuCisKKyAgICAgPHA+RW5hYmxlZCBhdCBsZXZlbCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maW5kaXJlY3QtaW5saW5pbmc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZpbmRpcmVjdF8wMDJkaW5saW5pbmctNzQ2Ij48L2E+SW5saW5lIGFsc28gaW5kaXJlY3QgY2FsbHMgdGhhdCBhcmUgZGlzY292ZXJlZCB0byBiZSBrbm93biBhdCBjb21waWxlCit0aW1lIHRoYW5rcyB0byBwcmV2aW91cyBpbmxpbmluZy4gIFRoaXMgb3B0aW9uIGhhcyBhbnkgZWZmZWN0IG9ubHkKK3doZW4gaW5saW5pbmcgaXRzZWxmIGlzIHR1cm5lZCBvbiBieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbmxpbmUtZnVuY3Rpb25zPC9zcGFuPjwvc2FtcD4KK29yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1maW5saW5lLXNtYWxsLWZ1bmN0aW9uczwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuCisKKyAgICAgPHA+RW5hYmxlZCBhdCBsZXZlbCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maW5saW5lLWZ1bmN0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmlubGluZV8wMDJkZnVuY3Rpb25zLTc0NyI+PC9hPkNvbnNpZGVyIGFsbCBmdW5jdGlvbnMgZm9yIGlubGluaW5nLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBkZWNsYXJlZCBpbmxpbmUuIAorVGhlIGNvbXBpbGVyIGhldXJpc3RpY2FsbHkgZGVjaWRlcyB3aGljaCBmdW5jdGlvbnMgYXJlIHdvcnRoIGludGVncmF0aW5nCitpbiB0aGlzIHdheS4KKworICAgICA8cD5JZiBhbGwgY2FsbHMgdG8gYSBnaXZlbiBmdW5jdGlvbiBhcmUgaW50ZWdyYXRlZCwgYW5kIHRoZSBmdW5jdGlvbiBpcworZGVjbGFyZWQgPGNvZGU+c3RhdGljPC9jb2RlPiwgdGhlbiB0aGUgZnVuY3Rpb24gaXMgbm9ybWFsbHkgbm90IG91dHB1dCBhcworYXNzZW1ibGVyIGNvZGUgaW4gaXRzIG93biByaWdodC4KKworICAgICA8cD5FbmFibGVkIGF0IGxldmVsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpbmxpbmUtZnVuY3Rpb25zLWNhbGxlZC1vbmNlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maW5saW5lXzAwMmRmdW5jdGlvbnNfMDAyZGNhbGxlZF8wMDJkb25jZS03NDgiPjwvYT5Db25zaWRlciBhbGwgPGNvZGU+c3RhdGljPC9jb2RlPiBmdW5jdGlvbnMgY2FsbGVkIG9uY2UgZm9yIGlubGluaW5nIGludG8gdGhlaXIKK2NhbGxlciBldmVuIGlmIHRoZXkgYXJlIG5vdCBtYXJrZWQgPGNvZGU+aW5saW5lPC9jb2RlPi4gIElmIGEgY2FsbCB0byBhIGdpdmVuCitmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkLCB0aGVuIHRoZSBmdW5jdGlvbiBpcyBub3Qgb3V0cHV0IGFzIGFzc2VtYmxlciBjb2RlCitpbiBpdHMgb3duIHJpZ2h0LgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZlYXJseS1pbmxpbmluZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmVhcmx5XzAwMmRpbmxpbmluZy03NDkiPjwvYT5JbmxpbmUgZnVuY3Rpb25zIG1hcmtlZCBieSA8Y29kZT5hbHdheXNfaW5saW5lPC9jb2RlPiBhbmQgZnVuY3Rpb25zIHdob3NlIGJvZHkgc2VlbXMKK3NtYWxsZXIgdGhhbiB0aGUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCBlYXJseSBiZWZvcmUgZG9pbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJvZmlsZS1nZW5lcmF0ZTwvc3Bhbj48L3NhbXA+IGluc3RydW1lbnRhdGlvbiBhbmQgcmVhbCBpbmxpbmluZyBwYXNzLiAgRG9pbmcgc28KK21ha2VzIHByb2ZpbGluZyBzaWduaWZpY2FudGx5IGNoZWFwZXIgYW5kIHVzdWFsbHkgaW5saW5pbmcgZmFzdGVyIG9uIHByb2dyYW1zCitoYXZpbmcgbGFyZ2UgY2hhaW5zIG9mIG5lc3RlZCB3cmFwcGVyIGZ1bmN0aW9ucy4KKworICAgICA8cD5FbmFibGVkIGJ5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmlwYS1zcmE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZpcGFfMDAyZHNyYS03NTAiPjwvYT5QZXJmb3JtIGludGVycHJvY2VkdXJhbCBzY2FsYXIgcmVwbGFjZW1lbnQgb2YgYWdncmVnYXRlcywgcmVtb3ZhbCBvZgordW51c2VkIHBhcmFtZXRlcnMgYW5kIHJlcGxhY2VtZW50IG9mIHBhcmFtZXRlcnMgcGFzc2VkIGJ5IHJlZmVyZW5jZQorYnkgcGFyYW1ldGVycyBwYXNzZWQgYnkgdmFsdWUuCisKKyAgICAgPHA+RW5hYmxlZCBhdCBsZXZlbHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maW5saW5lLWxpbWl0PTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmlubGluZV8wMDJkbGltaXQtNzUxIj48L2E+QnkgZGVmYXVsdCwgR0NDIGxpbWl0cyB0aGUgc2l6ZSBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgaW5saW5lZC4gIFRoaXMgZmxhZworYWxsb3dzIGNvYXJzZSBjb250cm9sIG9mIHRoaXMgbGltaXQuICA8dmFyPm48L3Zhcj4gaXMgdGhlIHNpemUgb2YgZnVuY3Rpb25zIHRoYXQKK2NhbiBiZSBpbmxpbmVkIGluIG51bWJlciBvZiBwc2V1ZG8gaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPklubGluaW5nIGlzIGFjdHVhbGx5IGNvbnRyb2xsZWQgYnkgYSBudW1iZXIgb2YgcGFyYW1ldGVycywgd2hpY2ggbWF5IGJlCitzcGVjaWZpZWQgaW5kaXZpZHVhbGx5IGJ5IHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGFyYW0gPC9zcGFuPjx2YXI+bmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJvcHRpb24iPj08L3NwYW4+PHZhcj52YWx1ZTwvdmFyPjwvc2FtcD4uIAorVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1maW5saW5lLWxpbWl0PTwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+IG9wdGlvbiBzZXRzIHNvbWUgb2YgdGhlc2UgcGFyYW1ldGVycworYXMgZm9sbG93czoKKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5tYXgtaW5saW5lLWluc25zLXNpbmdsZTwvY29kZT48ZGQ+aXMgc2V0IHRvIDx2YXI+bjwvdmFyPi8yLiAKKzxicj48ZHQ+PGNvZGU+bWF4LWlubGluZS1pbnNucy1hdXRvPC9jb2RlPjxkZD5pcyBzZXQgdG8gPHZhcj5uPC92YXI+LzIuIAorPC9kbD4KKworICAgICA8cD5TZWUgYmVsb3cgZm9yIGEgZG9jdW1lbnRhdGlvbiBvZiB0aGUgaW5kaXZpZHVhbAorcGFyYW1ldGVycyBjb250cm9sbGluZyBpbmxpbmluZyBhbmQgZm9yIHRoZSBkZWZhdWx0cyBvZiB0aGVzZSBwYXJhbWV0ZXJzLgorCisgICAgIDxwPjxlbT5Ob3RlOjwvZW0+IHRoZXJlIG1heSBiZSBubyB2YWx1ZSB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmlubGluZS1saW1pdDwvc3Bhbj48L3NhbXA+IHRoYXQgcmVzdWx0cworaW4gZGVmYXVsdCBiZWhhdmlvci4KKworICAgICA8cD48ZW0+Tm90ZTo8L2VtPiBwc2V1ZG8gaW5zdHJ1Y3Rpb24gcmVwcmVzZW50cywgaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQsIGFuCithYnN0cmFjdCBtZWFzdXJlbWVudCBvZiBmdW5jdGlvbidzIHNpemUuICBJbiBubyB3YXkgZG9lcyBpdCByZXByZXNlbnQgYSBjb3VudAorb2YgYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIGFuZCBhcyBzdWNoIGl0cyBleGFjdCBtZWFuaW5nIG1pZ2h0IGNoYW5nZSBmcm9tIG9uZQorcmVsZWFzZSB0byBhbiBhbm90aGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1rZWVwLWlubGluZS1kbGxleHBvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkZm5vXzAwMmRrZWVwXzAwMmRpbmxpbmVfMDAyZGRsbGV4cG9ydC03NTIiPjwvYT5UaGlzIGlzIGEgbW9yZSBmaW5lLWdyYWluZWQgdmVyc2lvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmtlZXAtaW5saW5lLWZ1bmN0aW9uczwvc3Bhbj48L3NhbXA+LAord2hpY2ggYXBwbGllcyBvbmx5IHRvIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZCB1c2luZyB0aGUgPGNvZGU+ZGxsZXhwb3J0PC9jb2RlPgorYXR0cmlidXRlIG9yIGRlY2xzcGVjIChTZWUgPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkRlY2xhcmluZyBBdHRyaWJ1dGVzIG9mIEZ1bmN0aW9uczwvYT4uKQorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZrZWVwLWlubGluZS1mdW5jdGlvbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZrZWVwXzAwMmRpbmxpbmVfMDAyZGZ1bmN0aW9ucy03NTMiPjwvYT5JbiBDLCBlbWl0IDxjb2RlPnN0YXRpYzwvY29kZT4gZnVuY3Rpb25zIHRoYXQgYXJlIGRlY2xhcmVkIDxjb2RlPmlubGluZTwvY29kZT4KK2ludG8gdGhlIG9iamVjdCBmaWxlLCBldmVuIGlmIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBpbmxpbmVkIGludG8gYWxsCitvZiBpdHMgY2FsbGVycy4gIFRoaXMgc3dpdGNoIGRvZXMgbm90IGFmZmVjdCBmdW5jdGlvbnMgdXNpbmcgdGhlCis8Y29kZT5leHRlcm4gaW5saW5lPC9jb2RlPiBleHRlbnNpb24gaW4gR05VIEM5MC4gIEluIEMrKywgZW1pdCBhbnkgYW5kIGFsbAoraW5saW5lIGZ1bmN0aW9ucyBpbnRvIHRoZSBvYmplY3QgZmlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ma2VlcC1zdGF0aWMtY29uc3RzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ma2VlcF8wMDJkc3RhdGljXzAwMmRjb25zdHMtNzU0Ij48L2E+RW1pdCB2YXJpYWJsZXMgZGVjbGFyZWQgPGNvZGU+c3RhdGljIGNvbnN0PC9jb2RlPiB3aGVuIG9wdGltaXphdGlvbiBpc24ndCB0dXJuZWQKK29uLCBldmVuIGlmIHRoZSB2YXJpYWJsZXMgYXJlbid0IHJlZmVyZW5jZWQuCisKKyAgICAgPHA+R0NDIGVuYWJsZXMgdGhpcyBvcHRpb24gYnkgZGVmYXVsdC4gIElmIHlvdSB3YW50IHRvIGZvcmNlIHRoZSBjb21waWxlciB0bworY2hlY2sgaWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90CitvcHRpbWl6YXRpb24gaXMgdHVybmVkIG9uLCB1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8ta2VlcC1zdGF0aWMtY29uc3RzPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZtZXJnZS1jb25zdGFudHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZtZXJnZV8wMDJkY29uc3RhbnRzLTc1NSI+PC9hPkF0dGVtcHQgdG8gbWVyZ2UgaWRlbnRpY2FsIGNvbnN0YW50cyAoc3RyaW5nIGNvbnN0YW50cyBhbmQgZmxvYXRpbmctcG9pbnQKK2NvbnN0YW50cykgYWNyb3NzIGNvbXBpbGF0aW9uIHVuaXRzLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IGZvciBvcHRpbWl6ZWQgY29tcGlsYXRpb24gaWYgdGhlIGFzc2VtYmxlciBhbmQKK2xpbmtlciBzdXBwb3J0IGl0LiAgVXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tbWVyZ2UtY29uc3RhbnRzPC9zcGFuPjwvc2FtcD4gdG8gaW5oaWJpdCB0aGlzCitiZWhhdmlvci4KKworICAgICA8cD5FbmFibGVkIGF0IGxldmVscyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZtZXJnZS1hbGwtY29uc3RhbnRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbWVyZ2VfMDAyZGFsbF8wMDJkY29uc3RhbnRzLTc1NiI+PC9hPkF0dGVtcHQgdG8gbWVyZ2UgaWRlbnRpY2FsIGNvbnN0YW50cyBhbmQgaWRlbnRpY2FsIHZhcmlhYmxlcy4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbWVyZ2UtY29uc3RhbnRzPC9zcGFuPjwvc2FtcD4uICBJbiBhZGRpdGlvbiB0bworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZtZXJnZS1jb25zdGFudHM8L3NwYW4+PC9zYW1wPiB0aGlzIGNvbnNpZGVycyBlLmcuIGV2ZW4gY29uc3RhbnQgaW5pdGlhbGl6ZWQKK2FycmF5cyBvciBpbml0aWFsaXplZCBjb25zdGFudCB2YXJpYWJsZXMgd2l0aCBpbnRlZ3JhbCBvciBmbG9hdGluZy1wb2ludAordHlwZXMuICBMYW5ndWFnZXMgbGlrZSBDIG9yIEMrKyByZXF1aXJlIGVhY2ggdmFyaWFibGUsIGluY2x1ZGluZyBtdWx0aXBsZQoraW5zdGFuY2VzIG9mIHRoZSBzYW1lIHZhcmlhYmxlIGluIHJlY3Vyc2l2ZSBjYWxscywgdG8gaGF2ZSBkaXN0aW5jdCBsb2NhdGlvbnMsCitzbyB1c2luZyB0aGlzIG9wdGlvbiByZXN1bHRzIGluIG5vbi1jb25mb3JtaW5nCitiZWhhdmlvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbW9kdWxvLXNjaGVkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbW9kdWxvXzAwMmRzY2hlZC03NTciPjwvYT5QZXJmb3JtIHN3aW5nIG1vZHVsbyBzY2hlZHVsaW5nIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZmlyc3Qgc2NoZWR1bGluZworcGFzcy4gIFRoaXMgcGFzcyBsb29rcyBhdCBpbm5lcm1vc3QgbG9vcHMgYW5kIHJlb3JkZXJzIHRoZWlyCitpbnN0cnVjdGlvbnMgYnkgb3ZlcmxhcHBpbmcgZGlmZmVyZW50IGl0ZXJhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm1vZHVsby1zY2hlZC1hbGxvdy1yZWdtb3ZlczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm1vZHVsb18wMDJkc2NoZWRfMDAyZGFsbG93XzAwMmRyZWdtb3Zlcy03NTgiPjwvYT5QZXJmb3JtIG1vcmUgYWdncmVzc2l2ZSBTTVMtYmFzZWQgbW9kdWxvIHNjaGVkdWxpbmcgd2l0aCByZWdpc3RlciBtb3ZlcworYWxsb3dlZC4gIEJ5IHNldHRpbmcgdGhpcyBmbGFnIGNlcnRhaW4gYW50aS1kZXBlbmRlbmNlcyBlZGdlcyBhcmUKK2RlbGV0ZWQsIHdoaWNoIHRyaWdnZXJzIHRoZSBnZW5lcmF0aW9uIG9mIHJlZy1tb3ZlcyBiYXNlZCBvbiB0aGUKK2xpZmUtcmFuZ2UgYW5hbHlzaXMuICBUaGlzIG9wdGlvbiBpcyBlZmZlY3RpdmUgb25seSB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm1vZHVsby1zY2hlZDwvc3Bhbj48L3NhbXA+IGVuYWJsZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWJyYW5jaC1jb3VudC1yZWc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkYnJhbmNoXzAwMmRjb3VudF8wMDJkcmVnLTc1OSI+PC9hPkRvIG5vdCB1c2UgJmxkcXVvO2RlY3JlbWVudCBhbmQgYnJhbmNoJnJkcXVvOyBpbnN0cnVjdGlvbnMgb24gYSBjb3VudCByZWdpc3RlciwKK2J1dCBpbnN0ZWFkIGdlbmVyYXRlIGEgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgZGVjcmVtZW50IGEKK3JlZ2lzdGVyLCBjb21wYXJlIGl0IGFnYWluc3QgemVybywgdGhlbiBicmFuY2ggYmFzZWQgdXBvbiB0aGUgcmVzdWx0LiAKK1RoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBzdWNoCitpbnN0cnVjdGlvbnMsIHdoaWNoIGluY2x1ZGUgeDg2LCBQb3dlclBDLCBJQS02NCBhbmQgUy8zOTAuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZicmFuY2gtY291bnQtcmVnPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWZ1bmN0aW9uLWNzZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRmdW5jdGlvbl8wMDJkY3NlLTc2MCI+PC9hPkRvIG5vdCBwdXQgZnVuY3Rpb24gYWRkcmVzc2VzIGluIHJlZ2lzdGVyczsgbWFrZSBlYWNoIGluc3RydWN0aW9uIHRoYXQKK2NhbGxzIGEgY29uc3RhbnQgZnVuY3Rpb24gY29udGFpbiB0aGUgZnVuY3Rpb24ncyBhZGRyZXNzIGV4cGxpY2l0bHkuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gcmVzdWx0cyBpbiBsZXNzIGVmZmljaWVudCBjb2RlLCBidXQgc29tZSBzdHJhbmdlIGhhY2tzCit0aGF0IGFsdGVyIHRoZSBhc3NlbWJsZXIgb3V0cHV0IG1heSBiZSBjb25mdXNlZCBieSB0aGUgb3B0aW1pemF0aW9ucworcGVyZm9ybWVkIHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHVzZWQuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmdW5jdGlvbi1jc2U8L3NwYW4+PC9zYW1wPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby16ZXJvLWluaXRpYWxpemVkLWluLWJzczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmR6ZXJvXzAwMmRpbml0aWFsaXplZF8wMDJkaW5fMDAyZGJzcy03NjEiPjwvYT5JZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGEgQlNTIHNlY3Rpb24sIEdDQyBieSBkZWZhdWx0IHB1dHMgdmFyaWFibGVzIHRoYXQKK2FyZSBpbml0aWFsaXplZCB0byB6ZXJvIGludG8gQlNTLiAgVGhpcyBjYW4gc2F2ZSBzcGFjZSBpbiB0aGUgcmVzdWx0aW5nCitjb2RlLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIHR1cm5zIG9mZiB0aGlzIGJlaGF2aW9yIGJlY2F1c2Ugc29tZSBwcm9ncmFtcyBleHBsaWNpdGx5CityZWx5IG9uIHZhcmlhYmxlcyBnb2luZyB0byB0aGUgZGF0YSBzZWN0aW9uJm1kYXNoO2UuZy4sIHNvIHRoYXQgdGhlCityZXN1bHRpbmcgZXhlY3V0YWJsZSBjYW4gZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgc2VjdGlvbiBhbmQvb3IgbWFrZQorYXNzdW1wdGlvbnMgYmFzZWQgb24gdGhhdC4KKworICAgICA8cD5UaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnplcm8taW5pdGlhbGl6ZWQtaW4tYnNzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm11ZGZsYXAgLWZtdWRmbGFwdGggLWZtdWRmbGFwaXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZtdWRmbGFwLTc2MiI+PC9hPjxhIG5hbWU9ImluZGV4LWZtdWRmbGFwdGgtNzYzIj48L2E+PGEgbmFtZT0iaW5kZXgtZm11ZGZsYXBpci03NjQiPjwvYT48YSBuYW1lPSJpbmRleC1ib3VuZHMtY2hlY2tpbmctNzY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXVkZmxhcC03NjYiPjwvYT5Gb3IgZnJvbnQtZW5kcyB0aGF0IHN1cHBvcnQgaXQgKEMgYW5kIEMrKyksIGluc3RydW1lbnQgYWxsIHJpc2t5Citwb2ludGVyL2FycmF5IGRlcmVmZXJlbmNpbmcgb3BlcmF0aW9ucywgc29tZSBzdGFuZGFyZCBsaWJyYXJ5CitzdHJpbmcvaGVhcCBmdW5jdGlvbnMsIGFuZCBzb21lIG90aGVyIGFzc29jaWF0ZWQgY29uc3RydWN0cyB3aXRoCityYW5nZS92YWxpZGl0eSB0ZXN0cy4gIE1vZHVsZXMgc28gaW5zdHJ1bWVudGVkIHNob3VsZCBiZSBpbW11bmUgdG8KK2J1ZmZlciBvdmVyZmxvd3MsIGludmFsaWQgaGVhcCB1c2UsIGFuZCBzb21lIG90aGVyIGNsYXNzZXMgb2YgQy9DKysKK3Byb2dyYW1taW5nIGVycm9ycy4gIFRoZSBpbnN0cnVtZW50YXRpb24gcmVsaWVzIG9uIGEgc2VwYXJhdGUgcnVudGltZQorbGlicmFyeSAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYm11ZGZsYXA8L3NwYW4+PC9zYW1wPiksIHdoaWNoIGlzIGxpbmtlZCBpbnRvIGEgcHJvZ3JhbSBpZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZtdWRmbGFwPC9zcGFuPjwvc2FtcD4gaXMgZ2l2ZW4gYXQgbGluayB0aW1lLiAgUnVuLXRpbWUgYmVoYXZpb3Igb2YgdGhlCitpbnN0cnVtZW50ZWQgcHJvZ3JhbSBpcyBjb250cm9sbGVkIGJ5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5NVURGTEFQX09QVElPTlM8L3NwYW4+PC9zYW1wPgorZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgPGNvZGU+ZW52IE1VREZMQVBfT1BUSU9OUz0taGVscCBhLm91dDwvY29kZT4KK2ZvciBpdHMgb3B0aW9ucy4KKworICAgICA8cD5Vc2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZtdWRmbGFwdGg8L3NwYW4+PC9zYW1wPiBpbnN0ZWFkIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbXVkZmxhcDwvc3Bhbj48L3NhbXA+IHRvIGNvbXBpbGUgYW5kIHRvCitsaW5rIGlmIHlvdXIgcHJvZ3JhbSBpcyBtdWx0aS10aHJlYWRlZC4gIFVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm11ZGZsYXBpcjwvc3Bhbj48L3NhbXA+LCBpbgorYWRkaXRpb24gdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZtdWRmbGFwPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZtdWRmbGFwdGg8L3NwYW4+PC9zYW1wPiwgaWYKK2luc3RydW1lbnRhdGlvbiBzaG91bGQgaWdub3JlIHBvaW50ZXIgcmVhZHMuICBUaGlzIHByb2R1Y2VzIGxlc3MKK2luc3RydW1lbnRhdGlvbiAoYW5kIHRoZXJlZm9yZSBmYXN0ZXIgZXhlY3V0aW9uKSBhbmQgc3RpbGwgcHJvdmlkZXMKK3NvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0IG91dHJpZ2h0IG1lbW9yeSBjb3JydXB0aW5nIHdyaXRlcywgYnV0IGFsbG93cworZXJyb25lb3VzbHkgcmVhZCBkYXRhIHRvIHByb3BhZ2F0ZSB3aXRoaW4gYSBwcm9ncmFtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0aHJlYWQtanVtcHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0aHJlYWRfMDAyZGp1bXBzLTc2NyI+PC9hPlBlcmZvcm0gb3B0aW1pemF0aW9ucyB0aGF0IGNoZWNrIHRvIHNlZSBpZiBhIGp1bXAgYnJhbmNoZXMgdG8gYQorbG9jYXRpb24gd2hlcmUgYW5vdGhlciBjb21wYXJpc29uIHN1YnN1bWVkIGJ5IHRoZSBmaXJzdCBpcyBmb3VuZC4gIElmCitzbywgdGhlIGZpcnN0IGJyYW5jaCBpcyByZWRpcmVjdGVkIHRvIGVpdGhlciB0aGUgZGVzdGluYXRpb24gb2YgdGhlCitzZWNvbmQgYnJhbmNoIG9yIGEgcG9pbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGl0LCBkZXBlbmRpbmcgb24gd2hldGhlcgordGhlIGNvbmRpdGlvbiBpcyBrbm93biB0byBiZSB0cnVlIG9yIGZhbHNlLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNwbGl0LXdpZGUtdHlwZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzcGxpdF8wMDJkd2lkZV8wMDJkdHlwZXMtNzY4Ij48L2E+V2hlbiB1c2luZyBhIHR5cGUgdGhhdCBvY2N1cGllcyBtdWx0aXBsZSByZWdpc3RlcnMsIHN1Y2ggYXMgPGNvZGU+bG9uZworbG9uZzwvY29kZT4gb24gYSAzMi1iaXQgc3lzdGVtLCBzcGxpdCB0aGUgcmVnaXN0ZXJzIGFwYXJ0IGFuZCBhbGxvY2F0ZSB0aGVtCitpbmRlcGVuZGVudGx5LiAgVGhpcyBub3JtYWxseSBnZW5lcmF0ZXMgYmV0dGVyIGNvZGUgZm9yIHRob3NlIHR5cGVzLAorYnV0IG1heSBtYWtlIGRlYnVnZ2luZyBtb3JlIGRpZmZpY3VsdC4KKworICAgICA8cD5FbmFibGVkIGF0IGxldmVscyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mY3NlLWZvbGxvdy1qdW1wczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNzZV8wMDJkZm9sbG93XzAwMmRqdW1wcy03NjkiPjwvYT5JbiBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiAoQ1NFKSwgc2NhbiB0aHJvdWdoIGp1bXAgaW5zdHJ1Y3Rpb25zCit3aGVuIHRoZSB0YXJnZXQgb2YgdGhlIGp1bXAgaXMgbm90IHJlYWNoZWQgYnkgYW55IG90aGVyIHBhdGguICBGb3IKK2V4YW1wbGUsIHdoZW4gQ1NFIGVuY291bnRlcnMgYW4gPGNvZGU+aWY8L2NvZGU+IHN0YXRlbWVudCB3aXRoIGFuCis8Y29kZT5lbHNlPC9jb2RlPiBjbGF1c2UsIENTRSBmb2xsb3dzIHRoZSBqdW1wIHdoZW4gdGhlIGNvbmRpdGlvbgordGVzdGVkIGlzIGZhbHNlLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmNzZS1za2lwLWJsb2NrczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNzZV8wMDJkc2tpcF8wMDJkYmxvY2tzLTc3MCI+PC9hPlRoaXMgaXMgc2ltaWxhciB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNzZS1mb2xsb3ctanVtcHM8L3NwYW4+PC9zYW1wPiwgYnV0IGNhdXNlcyBDU0UgdG8KK2ZvbGxvdyBqdW1wcyB0aGF0IGNvbmRpdGlvbmFsbHkgc2tpcCBvdmVyIGJsb2Nrcy4gIFdoZW4gQ1NFCitlbmNvdW50ZXJzIGEgc2ltcGxlIDxjb2RlPmlmPC9jb2RlPiBzdGF0ZW1lbnQgd2l0aCBubyBlbHNlIGNsYXVzZSwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY3NlLXNraXAtYmxvY2tzPC9zcGFuPjwvc2FtcD4gY2F1c2VzIENTRSB0byBmb2xsb3cgdGhlIGp1bXAgYXJvdW5kIHRoZQorYm9keSBvZiB0aGUgPGNvZGU+aWY8L2NvZGU+LgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlcnVuLWNzZS1hZnRlci1sb29wPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcmVydW5fMDAyZGNzZV8wMDJkYWZ0ZXJfMDAyZGxvb3AtNzcxIj48L2E+UmUtcnVuIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIGFmdGVyIGxvb3Agb3B0aW1pemF0aW9ucyBhcmUKK3BlcmZvcm1lZC4KKworICAgICA8cD5FbmFibGVkIGF0IGxldmVscyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZnY3NlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZ2NzZS03NzIiPjwvYT5QZXJmb3JtIGEgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIHBhc3MuIAorVGhpcyBwYXNzIGFsc28gcGVyZm9ybXMgZ2xvYmFsIGNvbnN0YW50IGFuZCBjb3B5IHByb3BhZ2F0aW9uLgorCisgICAgIDxwPjxlbT5Ob3RlOjwvZW0+IFdoZW4gY29tcGlsaW5nIGEgcHJvZ3JhbSB1c2luZyBjb21wdXRlZCBnb3RvcywgYSBHQ0MKK2V4dGVuc2lvbiwgeW91IG1heSBnZXQgYmV0dGVyIHJ1bi10aW1lIHBlcmZvcm1hbmNlIGlmIHlvdSBkaXNhYmxlCit0aGUgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIHBhc3MgYnkgYWRkaW5nCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWdjc2U8L3NwYW4+PC9zYW1wPiB0byB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmdjc2UtbG08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZnY3NlXzAwMmRsbS03NzMiPjwvYT5XaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZ2NzZS1sbTwvc3Bhbj48L3NhbXA+IGlzIGVuYWJsZWQsIGdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbgorYXR0ZW1wdHMgdG8gbW92ZSBsb2FkcyB0aGF0IGFyZSBvbmx5IGtpbGxlZCBieSBzdG9yZXMgaW50byB0aGVtc2VsdmVzLiAgVGhpcworYWxsb3dzIGEgbG9vcCBjb250YWluaW5nIGEgbG9hZC9zdG9yZSBzZXF1ZW5jZSB0byBiZSBjaGFuZ2VkIHRvIGEgbG9hZCBvdXRzaWRlCit0aGUgbG9vcCwgYW5kIGEgY29weS9zdG9yZSB3aXRoaW4gdGhlIGxvb3AuCisKKyAgICAgPHA+RW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZnY3NlPC9zcGFuPjwvc2FtcD4gaXMgZW5hYmxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZ2NzZS1zbTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmdjc2VfMDAyZHNtLTc3NCI+PC9hPldoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZnY3NlLXNtPC9zcGFuPjwvc2FtcD4gaXMgZW5hYmxlZCwgYSBzdG9yZSBtb3Rpb24gcGFzcyBpcyBydW4gYWZ0ZXIKK2dsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbi4gIFRoaXMgcGFzcyBhdHRlbXB0cyB0byBtb3ZlCitzdG9yZXMgb3V0IG9mIGxvb3BzLiAgV2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZnY3NlLWxtPC9zcGFuPjwvc2FtcD4sCitsb29wcyBjb250YWluaW5nIGEgbG9hZC9zdG9yZSBzZXF1ZW5jZSBjYW4gYmUgY2hhbmdlZCB0byBhIGxvYWQgYmVmb3JlCit0aGUgbG9vcCBhbmQgYSBzdG9yZSBhZnRlciB0aGUgbG9vcC4KKworICAgICA8cD5Ob3QgZW5hYmxlZCBhdCBhbnkgb3B0aW1pemF0aW9uIGxldmVsLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZnY3NlLWxhczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmdjc2VfMDAyZGxhcy03NzUiPjwvYT5XaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZ2NzZS1sYXM8L3NwYW4+PC9zYW1wPiBpcyBlbmFibGVkLCB0aGUgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uCitlbGltaW5hdGlvbiBwYXNzIGVsaW1pbmF0ZXMgcmVkdW5kYW50IGxvYWRzIHRoYXQgY29tZSBhZnRlciBzdG9yZXMgdG8gdGhlCitzYW1lIG1lbW9yeSBsb2NhdGlvbiAoYm90aCBwYXJ0aWFsIGFuZCBmdWxsIHJlZHVuZGFuY2llcykuCisKKyAgICAgPHA+Tm90IGVuYWJsZWQgYXQgYW55IG9wdGltaXphdGlvbiBsZXZlbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZ2NzZS1hZnRlci1yZWxvYWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZnY3NlXzAwMmRhZnRlcl8wMDJkcmVsb2FkLTc3NiI+PC9hPldoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZnY3NlLWFmdGVyLXJlbG9hZDwvc3Bhbj48L3NhbXA+IGlzIGVuYWJsZWQsIGEgcmVkdW5kYW50IGxvYWQgZWxpbWluYXRpb24KK3Bhc3MgaXMgcGVyZm9ybWVkIGFmdGVyIHJlbG9hZC4gIFRoZSBwdXJwb3NlIG9mIHRoaXMgcGFzcyBpcyB0byBjbGVhbiB1cAorcmVkdW5kYW50IHNwaWxsaW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZhZ2dyZXNzaXZlLWxvb3Atb3B0aW1pemF0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmFnZ3Jlc3NpdmVfMDAyZGxvb3BfMDAyZG9wdGltaXphdGlvbnMtNzc3Ij48L2E+VGhpcyBvcHRpb24gdGVsbHMgdGhlIGxvb3Agb3B0aW1pemVyIHRvIHVzZSBsYW5ndWFnZSBjb25zdHJhaW50cyB0bworZGVyaXZlIGJvdW5kcyBmb3IgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcC4gIFRoaXMgYXNzdW1lcyB0aGF0Citsb29wIGNvZGUgZG9lcyBub3QgaW52b2tlIHVuZGVmaW5lZCBiZWhhdmlvciBieSBmb3IgZXhhbXBsZSBjYXVzaW5nIHNpZ25lZAoraW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kIGFycmF5IGFjY2Vzc2VzLiAgVGhlIGJvdW5kcyBmb3IgdGhlCitudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiBhIGxvb3AgYXJlIHVzZWQgdG8gZ3VpZGUgbG9vcCB1bnJvbGxpbmcgYW5kIHBlZWxpbmcKK2FuZCBsb29wIGV4aXQgdGVzdCBvcHRpbWl6YXRpb25zLiAKK1RoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnVuc2FmZV8wMDJkbG9vcF8wMDJkb3B0aW1pemF0aW9ucy03NzgiPjwvYT5UaGlzIG9wdGlvbiB0ZWxscyB0aGUgbG9vcCBvcHRpbWl6ZXIgdG8gYXNzdW1lIHRoYXQgbG9vcCBpbmRpY2VzIGRvIG5vdAorb3ZlcmZsb3csIGFuZCB0aGF0IGxvb3BzIHdpdGggbm9udHJpdmlhbCBleGl0IGNvbmRpdGlvbiBhcmUgbm90CitpbmZpbml0ZS4gIFRoaXMgZW5hYmxlcyBhIHdpZGVyIHJhbmdlIG9mIGxvb3Agb3B0aW1pemF0aW9ucyBldmVuIGlmCit0aGUgbG9vcCBvcHRpbWl6ZXIgaXRzZWxmIGNhbm5vdCBwcm92ZSB0aGF0IHRoZXNlIGFzc3VtcHRpb25zIGFyZSB2YWxpZC4gCitJZiB5b3UgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9uczwvc3Bhbj48L3NhbXA+LCB0aGUgY29tcGlsZXIgd2FybnMgeW91CitpZiBpdCBmaW5kcyB0aGlzIGtpbmQgb2YgbG9vcC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mY3Jvc3NqdW1waW5nPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mY3Jvc3NqdW1waW5nLTc3OSI+PC9hPlBlcmZvcm0gY3Jvc3MtanVtcGluZyB0cmFuc2Zvcm1hdGlvbi4gCitUaGlzIHRyYW5zZm9ybWF0aW9uIHVuaWZpZXMgZXF1aXZhbGVudCBjb2RlIGFuZCBzYXZlcyBjb2RlIHNpemUuICBUaGUKK3Jlc3VsdGluZyBjb2RlIG1heSBvciBtYXkgbm90IHBlcmZvcm0gYmV0dGVyIHRoYW4gd2l0aG91dCBjcm9zcy1qdW1waW5nLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmF1dG8taW5jLWRlYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmF1dG9fMDAyZGluY18wMDJkZGVjLTc4MCI+PC9hPkNvbWJpbmUgaW5jcmVtZW50cyBvciBkZWNyZW1lbnRzIG9mIGFkZHJlc3NlcyB3aXRoIG1lbW9yeSBhY2Nlc3Nlcy4gCitUaGlzIHBhc3MgaXMgYWx3YXlzIHNraXBwZWQgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBoYXZlCitpbnN0cnVjdGlvbnMgdG8gc3VwcG9ydCB0aGlzLiAgRW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kCitoaWdoZXIgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgdGhpcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZGNlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZGNlLTc4MSI+PC9hPlBlcmZvcm0gZGVhZCBjb2RlIGVsaW1pbmF0aW9uIChEQ0UpIG9uIFJUTC4gCitFbmFibGVkIGJ5IGRlZmF1bHQgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBhbmQgaGlnaGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkc2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkc2UtNzgyIj48L2E+UGVyZm9ybSBkZWFkIHN0b3JlIGVsaW1pbmF0aW9uIChEU0UpIG9uIFJUTC4gCitFbmFibGVkIGJ5IGRlZmF1bHQgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBhbmQgaGlnaGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpZi1jb252ZXJzaW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maWZfMDAyZGNvbnZlcnNpb24tNzgzIj48L2E+QXR0ZW1wdCB0byB0cmFuc2Zvcm0gY29uZGl0aW9uYWwganVtcHMgaW50byBicmFuY2gtbGVzcyBlcXVpdmFsZW50cy4gIFRoaXMKK2luY2x1ZGVzIHVzZSBvZiBjb25kaXRpb25hbCBtb3ZlcywgbWluLCBtYXgsIHNldCBmbGFncyBhbmQgYWJzIGluc3RydWN0aW9ucywgYW5kCitzb21lIHRyaWNrcyBkb2FibGUgYnkgc3RhbmRhcmQgYXJpdGhtZXRpY3MuICBUaGUgdXNlIG9mIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbgorb24gY2hpcHMgd2hlcmUgaXQgaXMgYXZhaWxhYmxlIGlzIGNvbnRyb2xsZWQgYnkgPGNvZGU+aWYtY29udmVyc2lvbjI8L2NvZGU+LgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmlmLWNvbnZlcnNpb24yPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maWZfMDAyZGNvbnZlcnNpb24yLTc4NCI+PC9hPlVzZSBjb25kaXRpb25hbCBleGVjdXRpb24gKHdoZXJlIGF2YWlsYWJsZSkgdG8gdHJhbnNmb3JtIGNvbmRpdGlvbmFsIGp1bXBzIGludG8KK2JyYW5jaC1sZXNzIGVxdWl2YWxlbnRzLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZGVsZXRlXzAwMmRudWxsXzAwMmRwb2ludGVyXzAwMmRjaGVja3MtNzg1Ij48L2E+QXNzdW1lIHRoYXQgcHJvZ3JhbXMgY2Fubm90IHNhZmVseSBkZXJlZmVyZW5jZSBudWxsIHBvaW50ZXJzLCBhbmQgdGhhdAorbm8gY29kZSBvciBkYXRhIGVsZW1lbnQgcmVzaWRlcyB0aGVyZS4gIFRoaXMgZW5hYmxlcyBzaW1wbGUgY29uc3RhbnQKK2ZvbGRpbmcgb3B0aW1pemF0aW9ucyBhdCBhbGwgb3B0aW1pemF0aW9uIGxldmVscy4gIEluIGFkZGl0aW9uLCBvdGhlcgorb3B0aW1pemF0aW9uIHBhc3NlcyBpbiBHQ0MgdXNlIHRoaXMgZmxhZyB0byBjb250cm9sIGdsb2JhbCBkYXRhZmxvdworYW5hbHlzZXMgdGhhdCBlbGltaW5hdGUgdXNlbGVzcyBjaGVja3MgZm9yIG51bGwgcG9pbnRlcnM7IHRoZXNlIGFzc3VtZQordGhhdCBpZiBhIHBvaW50ZXIgaXMgY2hlY2tlZCBhZnRlciBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlcmVmZXJlbmNlZCwKK2l0IGNhbm5vdCBiZSBudWxsLgorCisgICAgIDxwPk5vdGUgaG93ZXZlciB0aGF0IGluIHNvbWUgZW52aXJvbm1lbnRzIHRoaXMgYXNzdW1wdGlvbiBpcyBub3QgdHJ1ZS4gCitVc2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1kZWxldGUtbnVsbC1wb2ludGVyLWNoZWNrczwvc3Bhbj48L3NhbXA+IHRvIGRpc2FibGUgdGhpcyBvcHRpbWl6YXRpb24KK2ZvciBwcm9ncmFtcyB0aGF0IGRlcGVuZCBvbiB0aGF0IGJlaGF2aW9yLgorCisgICAgIDxwPlNvbWUgdGFyZ2V0cywgZXNwZWNpYWxseSBlbWJlZGRlZCBvbmVzLCBkaXNhYmxlIHRoaXMgb3B0aW9uIGF0IGFsbCBsZXZlbHMuIAorT3RoZXJ3aXNlIGl0IGlzIGVuYWJsZWQgYXQgYWxsIGxldmVsczogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8wPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMTwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4gIFBhc3NlcyB0aGF0IHVzZSB0aGUgaW5mb3JtYXRpb24KK2FyZSBlbmFibGVkIGluZGVwZW5kZW50bHkgYXQgZGlmZmVyZW50IG9wdGltaXphdGlvbiBsZXZlbHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRldmlydHVhbGl6ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmRldmlydHVhbGl6ZS03ODYiPjwvYT5BdHRlbXB0IHRvIGNvbnZlcnQgY2FsbHMgdG8gdmlydHVhbCBmdW5jdGlvbnMgdG8gZGlyZWN0IGNhbGxzLiAgVGhpcworaXMgZG9uZSBib3RoIHdpdGhpbiBhIHByb2NlZHVyZSBhbmQgaW50ZXJwcm9jZWR1cmFsbHkgYXMgcGFydCBvZgoraW5kaXJlY3QgaW5saW5pbmcgKDxjb2RlPi1maW5kaXJlY3QtaW5saW5pbmc8L2NvZGU+KSBhbmQgaW50ZXJwcm9jZWR1cmFsIGNvbnN0YW50Citwcm9wYWdhdGlvbiAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpcGEtY3A8L3NwYW4+PC9zYW1wPikuIAorRW5hYmxlZCBhdCBsZXZlbHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZleHBlbnNpdmVfMDAyZG9wdGltaXphdGlvbnMtNzg3Ij48L2E+UGVyZm9ybSBhIG51bWJlciBvZiBtaW5vciBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHJlbGF0aXZlbHkgZXhwZW5zaXZlLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnJlZS03ODgiPjwvYT5BdHRlbXB0IHRvIHJlbW92ZSByZWR1bmRhbnQgZXh0ZW5zaW9uIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgZXNwZWNpYWxseQoraGVscGZ1bCBmb3IgdGhlIHg4Ni02NCBhcmNoaXRlY3R1cmUsIHdoaWNoIGltcGxpY2l0bHkgemVyby1leHRlbmRzIGluIDY0LWJpdAorcmVnaXN0ZXJzIGFmdGVyIHdyaXRpbmcgdG8gdGhlaXIgbG93ZXIgMzItYml0IGhhbGYuCisKKyAgICAgPHA+RW5hYmxlZCBmb3IgeDg2IGF0IGxldmVscyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm9wdGltaXplLXJlZ2lzdGVyLW1vdmU8L2NvZGU+PGR0Pjxjb2RlPi1mcmVnbW92ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm9wdGltaXplXzAwMmRyZWdpc3Rlcl8wMDJkbW92ZS03ODkiPjwvYT48YSBuYW1lPSJpbmRleC1mcmVnbW92ZS03OTAiPjwvYT5BdHRlbXB0IHRvIHJlYXNzaWduIHJlZ2lzdGVyIG51bWJlcnMgaW4gbW92ZSBpbnN0cnVjdGlvbnMgYW5kIGFzCitvcGVyYW5kcyBvZiBvdGhlciBzaW1wbGUgaW5zdHJ1Y3Rpb25zIGluIG9yZGVyIHRvIG1heGltaXplIHRoZSBhbW91bnQgb2YKK3JlZ2lzdGVyIHR5aW5nLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGhlbHBmdWwgb24gbWFjaGluZXMgd2l0aCB0d28tb3BlcmFuZAoraW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPk5vdGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZWdtb3ZlPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mb3B0aW1pemUtcmVnaXN0ZXItbW92ZTwvc3Bhbj48L3NhbXA+IGFyZSB0aGUgc2FtZQorb3B0aW1pemF0aW9uLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmlyYS1hbGdvcml0aG09PC9jb2RlPjx2YXI+YWxnb3JpdGhtPC92YXI+PGRkPlVzZSB0aGUgc3BlY2lmaWVkIGNvbG9yaW5nIGFsZ29yaXRobSBmb3IgdGhlIGludGVncmF0ZWQgcmVnaXN0ZXIKK2FsbG9jYXRvci4gIFRoZSA8dmFyPmFsZ29yaXRobTwvdmFyPiBhcmd1bWVudCBjYW4gYmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wcmlvcml0eTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgd2hpY2gKK3NwZWNpZmllcyBDaG93J3MgcHJpb3JpdHkgY29sb3JpbmcsIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Q0I8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdoaWNoIHNwZWNpZmllcworQ2hhaXRpbi1CcmlnZ3MgY29sb3JpbmcuICBDaGFpdGluLUJyaWdncyBjb2xvcmluZyBpcyBub3QgaW1wbGVtZW50ZWQKK2ZvciBhbGwgYXJjaGl0ZWN0dXJlcywgYnV0IGZvciB0aG9zZSB0YXJnZXRzIHRoYXQgZG8gc3VwcG9ydCBpdCwgaXQgaXMKK3RoZSBkZWZhdWx0IGJlY2F1c2UgaXQgZ2VuZXJhdGVzIGJldHRlciBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpcmEtcmVnaW9uPTwvY29kZT48dmFyPnJlZ2lvbjwvdmFyPjxkZD5Vc2Ugc3BlY2lmaWVkIHJlZ2lvbnMgZm9yIHRoZSBpbnRlZ3JhdGVkIHJlZ2lzdGVyIGFsbG9jYXRvci4gIFRoZQorPHZhcj5yZWdpb248L3Zhcj4gYXJndW1lbnQgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlVzZSBhbGwgbG9vcHMgYXMgcmVnaXN0ZXIgYWxsb2NhdGlvbiByZWdpb25zLiAKK1RoaXMgY2FuIGdpdmUgdGhlIGJlc3QgcmVzdWx0cyBmb3IgbWFjaGluZXMgd2l0aCBhIHNtYWxsIGFuZC9vcgoraXJyZWd1bGFyIHJlZ2lzdGVyIHNldC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5taXhlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Vc2UgYWxsIGxvb3BzIGV4Y2VwdCBmb3IgbG9vcHMgd2l0aCBzbWFsbCByZWdpc3RlciBwcmVzc3VyZQorYXMgdGhlIHJlZ2lvbnMuICBUaGlzIHZhbHVlIHVzdWFsbHkgZ2l2ZXMKK3RoZSBiZXN0IHJlc3VsdHMgaW4gbW9zdCBjYXNlcyBhbmQgZm9yIG1vc3QgYXJjaGl0ZWN0dXJlcywKK2FuZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBjb21waWxpbmcgd2l0aCBvcHRpbWl6YXRpb24gZm9yIHNwZWVkCisoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4pLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Vc2UgYWxsIGZ1bmN0aW9ucyBhcyBhIHNpbmdsZSByZWdpb24uIAorVGhpcyB0eXBpY2FsbHkgcmVzdWx0cyBpbiB0aGUgc21hbGxlc3QgY29kZSBzaXplLCBhbmQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8wPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maXJhLWhvaXN0LXByZXNzdXJlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maXJhXzAwMmRob2lzdF8wMDJkcHJlc3N1cmUtNzkxIj48L2E+VXNlIElSQSB0byBldmFsdWF0ZSByZWdpc3RlciBwcmVzc3VyZSBpbiB0aGUgY29kZSBob2lzdGluZyBwYXNzIGZvcgorZGVjaXNpb25zIHRvIGhvaXN0IGV4cHJlc3Npb25zLiAgVGhpcyBvcHRpb24gdXN1YWxseSByZXN1bHRzIGluIHNtYWxsZXIKK2NvZGUsIGJ1dCBpdCBjYW4gc2xvdyB0aGUgY29tcGlsZXIgZG93bi4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyBlbmFibGVkIGF0IGxldmVsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+IGZvciBhbGwgdGFyZ2V0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maXJhLWxvb3AtcHJlc3N1cmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZpcmFfMDAyZGxvb3BfMDAyZHByZXNzdXJlLTc5MiI+PC9hPlVzZSBJUkEgdG8gZXZhbHVhdGUgcmVnaXN0ZXIgcHJlc3N1cmUgaW4gbG9vcHMgZm9yIGRlY2lzaW9ucyB0byBtb3ZlCitsb29wIGludmFyaWFudHMuICBUaGlzIG9wdGlvbiB1c3VhbGx5IHJlc3VsdHMgaW4gZ2VuZXJhdGlvbgorb2YgZmFzdGVyIGFuZCBzbWFsbGVyIGNvZGUgb24gbWFjaGluZXMgd2l0aCBsYXJnZSByZWdpc3RlciBmaWxlcyAoJmd0Oz0gMzIKK3JlZ2lzdGVycyksIGJ1dCBpdCBjYW4gc2xvdyB0aGUgY29tcGlsZXIgZG93bi4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyBlbmFibGVkIGF0IGxldmVsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+IGZvciBzb21lIHRhcmdldHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWlyYS1zaGFyZS1zYXZlLXNsb3RzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGlyYV8wMDJkc2hhcmVfMDAyZHNhdmVfMDAyZHNsb3RzLTc5MyI+PC9hPkRpc2FibGUgc2hhcmluZyBvZiBzdGFjayBzbG90cyB1c2VkIGZvciBzYXZpbmcgY2FsbC11c2VkIGhhcmQKK3JlZ2lzdGVycyBsaXZpbmcgdGhyb3VnaCBhIGNhbGwuICBFYWNoIGhhcmQgcmVnaXN0ZXIgZ2V0cyBhCitzZXBhcmF0ZSBzdGFjayBzbG90LCBhbmQgYXMgYSByZXN1bHQgZnVuY3Rpb24gc3RhY2sgZnJhbWVzIGFyZQorbGFyZ2VyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1pcmEtc2hhcmUtc3BpbGwtc2xvdHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkaXJhXzAwMmRzaGFyZV8wMDJkc3BpbGxfMDAyZHNsb3RzLTc5NCI+PC9hPkRpc2FibGUgc2hhcmluZyBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIHBzZXVkby1yZWdpc3RlcnMuICBFYWNoCitwc2V1ZG8tcmVnaXN0ZXIgdGhhdCBkb2VzIG5vdCBnZXQgYSBoYXJkIHJlZ2lzdGVyIGdldHMgYSBzZXBhcmF0ZQorc3RhY2sgc2xvdCwgYW5kIGFzIGEgcmVzdWx0IGZ1bmN0aW9uIHN0YWNrIGZyYW1lcyBhcmUgbGFyZ2VyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpcmEtdmVyYm9zZT08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZpcmFfMDAyZHZlcmJvc2UtNzk1Ij48L2E+Q29udHJvbCB0aGUgdmVyYm9zaXR5IG9mIHRoZSBkdW1wIGZpbGUgZm9yIHRoZSBpbnRlZ3JhdGVkIHJlZ2lzdGVyIGFsbG9jYXRvci4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1LiAgSWYgdGhlIHZhbHVlIDx2YXI+bjwvdmFyPiBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIDEwLAordGhlIGR1bXAgb3V0cHV0IGlzIHNlbnQgdG8gc3RkZXJyIHVzaW5nIHRoZSBzYW1lIGZvcm1hdCBhcyA8dmFyPm48L3Zhcj4gbWludXMgMTAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRlbGF5ZWQtYnJhbmNoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZGVsYXllZF8wMDJkYnJhbmNoLTc5NiI+PC9hPklmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBhdHRlbXB0IHRvIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zCit0byBleHBsb2l0IGluc3RydWN0aW9uIHNsb3RzIGF2YWlsYWJsZSBhZnRlciBkZWxheWVkIGJyYW5jaAoraW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNjaGVkdWxlLWluc25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2NoZWR1bGVfMDAyZGluc25zLTc5NyI+PC9hPklmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBhdHRlbXB0IHRvIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zIHRvCitlbGltaW5hdGUgZXhlY3V0aW9uIHN0YWxscyBkdWUgdG8gcmVxdWlyZWQgZGF0YSBiZWluZyB1bmF2YWlsYWJsZS4gIFRoaXMKK2hlbHBzIG1hY2hpbmVzIHRoYXQgaGF2ZSBzbG93IGZsb2F0aW5nIHBvaW50IG9yIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucworYnkgYWxsb3dpbmcgb3RoZXIgaW5zdHJ1Y3Rpb25zIHRvIGJlIGlzc3VlZCB1bnRpbCB0aGUgcmVzdWx0IG9mIHRoZSBsb2FkCitvciBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbiBpcyByZXF1aXJlZC4KKworICAgICA8cD5FbmFibGVkIGF0IGxldmVscyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNjaGVkdWxlLWluc25zMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnNjaGVkdWxlXzAwMmRpbnNuczItNzk4Ij48L2E+U2ltaWxhciB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkdWxlLWluc25zPC9zcGFuPjwvc2FtcD4sIGJ1dCByZXF1ZXN0cyBhbiBhZGRpdGlvbmFsIHBhc3Mgb2YKK2luc3RydWN0aW9uIHNjaGVkdWxpbmcgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiBoYXMgYmVlbiBkb25lLiAgVGhpcyBpcworZXNwZWNpYWxseSB1c2VmdWwgb24gbWFjaGluZXMgd2l0aCBhIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVyIG9mCityZWdpc3RlcnMgYW5kIHdoZXJlIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucyB0YWtlIG1vcmUgdGhhbiBvbmUgY3ljbGUuCisKKyAgICAgPHA+RW5hYmxlZCBhdCBsZXZlbHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tc2NoZWQtaW50ZXJibG9jazwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRzY2hlZF8wMDJkaW50ZXJibG9jay03OTkiPjwvYT5Eb24ndCBzY2hlZHVsZSBpbnN0cnVjdGlvbnMgYWNyb3NzIGJhc2ljIGJsb2Nrcy4gIFRoaXMgaXMgbm9ybWFsbHkKK2VuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGkuZS4gCit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWR1bGUtaW5zbnM8L3NwYW4+PC9zYW1wPiBvciBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiBvciBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLXNjaGVkLXNwZWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkc2NoZWRfMDAyZHNwZWMtODAwIj48L2E+RG9uJ3QgYWxsb3cgc3BlY3VsYXRpdmUgbW90aW9uIG9mIG5vbi1sb2FkIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgbm9ybWFsbHkKK2VuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGkuZS4gCit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWR1bGUtaW5zbnM8L3NwYW4+PC9zYW1wPiBvciBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiBvciBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNjaGVkLXByZXNzdXJlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2NoZWRfMDAyZHByZXNzdXJlLTgwMSI+PC9hPkVuYWJsZSByZWdpc3RlciBwcmVzc3VyZSBzZW5zaXRpdmUgaW5zbiBzY2hlZHVsaW5nIGJlZm9yZSByZWdpc3RlcgorYWxsb2NhdGlvbi4gIFRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHNjaGVkdWxpbmcgYmVmb3JlIHJlZ2lzdGVyCithbGxvY2F0aW9uIGlzIGVuYWJsZWQsIGkuZS4gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkdWxlLWluc25zPC9zcGFuPjwvc2FtcD4gb3IgYXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9yIGhpZ2hlci4gIFVzYWdlIG9mIHRoaXMgb3B0aW9uIGNhbiBpbXByb3ZlIHRoZQorZ2VuZXJhdGVkIGNvZGUgYW5kIGRlY3JlYXNlIGl0cyBzaXplIGJ5IHByZXZlbnRpbmcgcmVnaXN0ZXIgcHJlc3N1cmUKK2luY3JlYXNlIGFib3ZlIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGhhcmQgcmVnaXN0ZXJzIGFuZCBzdWJzZXF1ZW50CitzcGlsbHMgaW4gcmVnaXN0ZXIgYWxsb2NhdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2NoZWQtc3BlYy1sb2FkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2NoZWRfMDAyZHNwZWNfMDAyZGxvYWQtODAyIj48L2E+QWxsb3cgc3BlY3VsYXRpdmUgbW90aW9uIG9mIHNvbWUgbG9hZCBpbnN0cnVjdGlvbnMuICBUaGlzIG9ubHkgbWFrZXMKK3NlbnNlIHdoZW4gc2NoZWR1bGluZyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaS5lLiB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkdWxlLWluc25zPC9zcGFuPjwvc2FtcD4gb3IgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4gb3IgaGlnaGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzY2hlZC1zcGVjLWxvYWQtZGFuZ2Vyb3VzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2NoZWRfMDAyZHNwZWNfMDAyZGxvYWRfMDAyZGRhbmdlcm91cy04MDMiPjwvYT5BbGxvdyBzcGVjdWxhdGl2ZSBtb3Rpb24gb2YgbW9yZSBsb2FkIGluc3RydWN0aW9ucy4gIFRoaXMgb25seSBtYWtlcworc2Vuc2Ugd2hlbiBzY2hlZHVsaW5nIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uLCBpLmUuIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWR1bGUtaW5zbnM8L3NwYW4+PC9zYW1wPiBvciBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiBvciBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNjaGVkLXN0YWxsZWQtaW5zbnM8L2NvZGU+PGR0Pjxjb2RlPi1mc2NoZWQtc3RhbGxlZC1pbnNucz08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZzY2hlZF8wMDJkc3RhbGxlZF8wMDJkaW5zbnMtODA0Ij48L2E+RGVmaW5lIGhvdyBtYW55IGluc25zIChpZiBhbnkpIGNhbiBiZSBtb3ZlZCBwcmVtYXR1cmVseSBmcm9tIHRoZSBxdWV1ZQorb2Ygc3RhbGxlZCBpbnNucyBpbnRvIHRoZSByZWFkeSBsaXN0IGR1cmluZyB0aGUgc2Vjb25kIHNjaGVkdWxpbmcgcGFzcy4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXNjaGVkLXN0YWxsZWQtaW5zbnM8L3NwYW4+PC9zYW1wPiBtZWFucyB0aGF0IG5vIGluc25zIGFyZSBtb3ZlZAorcHJlbWF0dXJlbHksIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWQtc3RhbGxlZC1pbnNucz0wPC9zcGFuPjwvc2FtcD4gbWVhbnMgdGhlcmUgaXMgbm8gbGltaXQKK29uIGhvdyBtYW55IHF1ZXVlZCBpbnNucyBjYW4gYmUgbW92ZWQgcHJlbWF0dXJlbHkuIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzY2hlZC1zdGFsbGVkLWluc25zPC9zcGFuPjwvc2FtcD4gd2l0aG91dCBhIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWQtc3RhbGxlZC1pbnNucz0xPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwPC9jb2RlPjxkdD48Y29kZT4tZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZnNjaGVkXzAwMmRzdGFsbGVkXzAwMmRpbnNuc18wMDJkZGVwLTgwNSI+PC9hPkRlZmluZSBob3cgbWFueSBpbnNuIGdyb3VwcyAoY3ljbGVzKSBhcmUgZXhhbWluZWQgZm9yIGEgZGVwZW5kZW5jeQorb24gYSBzdGFsbGVkIGluc24gdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgcHJlbWF0dXJlIHJlbW92YWwgZnJvbSB0aGUgcXVldWUKK29mIHN0YWxsZWQgaW5zbnMuICBUaGlzIGhhcyBhbiBlZmZlY3Qgb25seSBkdXJpbmcgdGhlIHNlY29uZCBzY2hlZHVsaW5nIHBhc3MsCithbmQgb25seSBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkLXN0YWxsZWQtaW5zbnM8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tc2NoZWQtc3RhbGxlZC1pbnNucy1kZXA8L3NwYW4+PC9zYW1wPiBpcyBlcXVpdmFsZW50IHRvCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwPTA8L3NwYW4+PC9zYW1wPi4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwPC9zcGFuPjwvc2FtcD4gd2l0aG91dCBhIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWQtc3RhbGxlZC1pbnNucy1kZXA9MTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzY2hlZDItdXNlLXN1cGVyYmxvY2tzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2NoZWQyXzAwMmR1c2VfMDAyZHN1cGVyYmxvY2tzLTgwNiI+PC9hPldoZW4gc2NoZWR1bGluZyBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uLCB1c2Ugc3VwZXJibG9jayBzY2hlZHVsaW5nLiAKK1RoaXMgYWxsb3dzIG1vdGlvbiBhY3Jvc3MgYmFzaWMgYmxvY2sgYm91bmRhcmllcywKK3Jlc3VsdGluZyBpbiBmYXN0ZXIgc2NoZWR1bGVzLiAgVGhpcyBvcHRpb24gaXMgZXhwZXJpbWVudGFsLCBhcyBub3QgYWxsIG1hY2hpbmUKK2Rlc2NyaXB0aW9ucyB1c2VkIGJ5IEdDQyBtb2RlbCB0aGUgQ1BVIGNsb3NlbHkgZW5vdWdoIHRvIGF2b2lkIHVucmVsaWFibGUKK3Jlc3VsdHMgZnJvbSB0aGUgYWxnb3JpdGhtLgorCisgICAgIDxwPlRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHNjaGVkdWxpbmcgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaS5lLiB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkdWxlLWluc25zMjwvc3Bhbj48L3NhbXA+IG9yIGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9yIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2NoZWQtZ3JvdXAtaGV1cmlzdGljPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2NoZWRfMDAyZGdyb3VwXzAwMmRoZXVyaXN0aWMtODA3Ij48L2E+RW5hYmxlIHRoZSBncm91cCBoZXVyaXN0aWMgaW4gdGhlIHNjaGVkdWxlci4gIFRoaXMgaGV1cmlzdGljIGZhdm9ycwordGhlIGluc3RydWN0aW9uIHRoYXQgYmVsb25ncyB0byBhIHNjaGVkdWxlIGdyb3VwLiAgVGhpcyBpcyBlbmFibGVkCitieSBkZWZhdWx0IHdoZW4gc2NoZWR1bGluZyBpcyBlbmFibGVkLCBpLmUuIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzY2hlZHVsZS1pbnNuczwvc3Bhbj48L3NhbXA+CitvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkdWxlLWluc25zMjwvc3Bhbj48L3NhbXA+IG9yIGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9yIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2NoZWQtY3JpdGljYWwtcGF0aC1oZXVyaXN0aWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzY2hlZF8wMDJkY3JpdGljYWxfMDAyZHBhdGhfMDAyZGhldXJpc3RpYy04MDgiPjwvYT5FbmFibGUgdGhlIGNyaXRpY2FsLXBhdGggaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzIGhldXJpc3RpYyBmYXZvcnMKK2luc3RydWN0aW9ucyBvbiB0aGUgY3JpdGljYWwgcGF0aC4gIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4KK3NjaGVkdWxpbmcgaXMgZW5hYmxlZCwgaS5lLiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWR1bGUtaW5zbnM8L3NwYW4+PC9zYW1wPgorb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzY2hlZHVsZS1pbnNuczI8L3NwYW4+PC9zYW1wPiBvciBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiBvciBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNjaGVkLXNwZWMtaW5zbi1oZXVyaXN0aWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzY2hlZF8wMDJkc3BlY18wMDJkaW5zbl8wMDJkaGV1cmlzdGljLTgwOSI+PC9hPkVuYWJsZSB0aGUgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb24gaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzCitoZXVyaXN0aWMgZmF2b3JzIHNwZWN1bGF0aXZlIGluc3RydWN0aW9ucyB3aXRoIGdyZWF0ZXIgZGVwZW5kZW5jeSB3ZWFrbmVzcy4gCitUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCwgaS5lLiAKK3dpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzY2hlZHVsZS1pbnNuczwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWR1bGUtaW5zbnMyPC9zcGFuPjwvc2FtcD4KK29yIGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9yIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2NoZWQtcmFuay1oZXVyaXN0aWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzY2hlZF8wMDJkcmFua18wMDJkaGV1cmlzdGljLTgxMCI+PC9hPkVuYWJsZSB0aGUgcmFuayBoZXVyaXN0aWMgaW4gdGhlIHNjaGVkdWxlci4gIFRoaXMgaGV1cmlzdGljIGZhdm9ycwordGhlIGluc3RydWN0aW9uIGJlbG9uZ2luZyB0byBhIGJhc2ljIGJsb2NrIHdpdGggZ3JlYXRlciBzaXplIG9yIGZyZXF1ZW5jeS4gCitUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCwgaS5lLiAKK3dpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzY2hlZHVsZS1pbnNuczwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWR1bGUtaW5zbnMyPC9zcGFuPjwvc2FtcD4gb3IKK2F0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9yIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2NoZWQtbGFzdC1pbnNuLWhldXJpc3RpYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnNjaGVkXzAwMmRsYXN0XzAwMmRpbnNuXzAwMmRoZXVyaXN0aWMtODExIj48L2E+RW5hYmxlIHRoZSBsYXN0LWluc3RydWN0aW9uIGhldXJpc3RpYyBpbiB0aGUgc2NoZWR1bGVyLiAgVGhpcyBoZXVyaXN0aWMKK2Zhdm9ycyB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBsZXNzIGRlcGVuZGVudCBvbiB0aGUgbGFzdCBpbnN0cnVjdGlvbgorc2NoZWR1bGVkLiAgVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBzY2hlZHVsaW5nIGlzIGVuYWJsZWQsCitpLmUuIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzY2hlZHVsZS1pbnNuczwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWR1bGUtaW5zbnMyPC9zcGFuPjwvc2FtcD4gb3IKK2F0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9yIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2NoZWQtZGVwLWNvdW50LWhldXJpc3RpYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnNjaGVkXzAwMmRkZXBfMDAyZGNvdW50XzAwMmRoZXVyaXN0aWMtODEyIj48L2E+RW5hYmxlIHRoZSBkZXBlbmRlbnQtY291bnQgaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzIGhldXJpc3RpYworZmF2b3JzIHRoZSBpbnN0cnVjdGlvbiB0aGF0IGhhcyBtb3JlIGluc3RydWN0aW9ucyBkZXBlbmRpbmcgb24gaXQuIAorVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBzY2hlZHVsaW5nIGlzIGVuYWJsZWQsIGkuZS4gCit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWR1bGUtaW5zbnM8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNjaGVkdWxlLWluc25zMjwvc3Bhbj48L3NhbXA+IG9yCithdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiBvciBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlc2NoZWR1bGUtbW9kdWxvLXNjaGVkdWxlZC1sb29wczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnJlc2NoZWR1bGVfMDAyZG1vZHVsb18wMDJkc2NoZWR1bGVkXzAwMmRsb29wcy04MTMiPjwvYT5Nb2R1bG8gc2NoZWR1bGluZyBpcyBwZXJmb3JtZWQgYmVmb3JlIHRyYWRpdGlvbmFsIHNjaGVkdWxpbmcuICBJZiBhIGxvb3AKK2lzIG1vZHVsbyBzY2hlZHVsZWQsIGxhdGVyIHNjaGVkdWxpbmcgcGFzc2VzIG1heSBjaGFuZ2UgaXRzIHNjaGVkdWxlLiAKK1VzZSB0aGlzIG9wdGlvbiB0byBjb250cm9sIHRoYXQgYmVoYXZpb3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNlbGVjdGl2ZS1zY2hlZHVsaW5nPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2VsZWN0aXZlXzAwMmRzY2hlZHVsaW5nLTgxNCI+PC9hPlNjaGVkdWxlIGluc3RydWN0aW9ucyB1c2luZyBzZWxlY3RpdmUgc2NoZWR1bGluZyBhbGdvcml0aG0uICBTZWxlY3RpdmUKK3NjaGVkdWxpbmcgcnVucyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBzY2hlZHVsZXIgcGFzcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2VsZWN0aXZlLXNjaGVkdWxpbmcyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2VsZWN0aXZlXzAwMmRzY2hlZHVsaW5nMi04MTUiPjwvYT5TY2hlZHVsZSBpbnN0cnVjdGlvbnMgdXNpbmcgc2VsZWN0aXZlIHNjaGVkdWxpbmcgYWxnb3JpdGhtLiAgU2VsZWN0aXZlCitzY2hlZHVsaW5nIHJ1bnMgaW5zdGVhZCBvZiB0aGUgc2Vjb25kIHNjaGVkdWxlciBwYXNzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzZWwtc2NoZWQtcGlwZWxpbmluZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnNlbF8wMDJkc2NoZWRfMDAyZHBpcGVsaW5pbmctODE2Ij48L2E+RW5hYmxlIHNvZnR3YXJlIHBpcGVsaW5pbmcgb2YgaW5uZXJtb3N0IGxvb3BzIGR1cmluZyBzZWxlY3RpdmUgc2NoZWR1bGluZy4gCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IHVubGVzcyBvbmUgb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzZWxlY3RpdmUtc2NoZWR1bGluZzwvc3Bhbj48L3NhbXA+IG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNlbGVjdGl2ZS1zY2hlZHVsaW5nMjwvc3Bhbj48L3NhbXA+IGlzIHR1cm5lZCBvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2VsLXNjaGVkLXBpcGVsaW5pbmctb3V0ZXItbG9vcHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzZWxfMDAyZHNjaGVkXzAwMmRwaXBlbGluaW5nXzAwMmRvdXRlcl8wMDJkbG9vcHMtODE3Ij48L2E+V2hlbiBwaXBlbGluaW5nIGxvb3BzIGR1cmluZyBzZWxlY3RpdmUgc2NoZWR1bGluZywgYWxzbyBwaXBlbGluZSBvdXRlciBsb29wcy4gCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IHVubGVzcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNlbC1zY2hlZC1waXBlbGluaW5nPC9zcGFuPjwvc2FtcD4gaXMgdHVybmVkIG9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzaHJpbmstd3JhcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnNocmlua18wMDJkd3JhcC04MTgiPjwvYT5FbWl0IGZ1bmN0aW9uIHByb2xvZ3VlcyBvbmx5IGJlZm9yZSBwYXJ0cyBvZiB0aGUgZnVuY3Rpb24gdGhhdCBuZWVkIGl0LAorcmF0aGVyIHRoYW4gYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24uICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IGFuZCBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmNhbGxlci1zYXZlczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNhbGxlcl8wMDJkc2F2ZXMtODE5Ij48L2E+RW5hYmxlIGFsbG9jYXRpb24gb2YgdmFsdWVzIHRvIHJlZ2lzdGVycyB0aGF0IGFyZSBjbG9iYmVyZWQgYnkKK2Z1bmN0aW9uIGNhbGxzLCBieSBlbWl0dGluZyBleHRyYSBpbnN0cnVjdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKK3JlZ2lzdGVycyBhcm91bmQgc3VjaCBjYWxscy4gIFN1Y2ggYWxsb2NhdGlvbiBpcyBkb25lIG9ubHkgd2hlbiBpdAorc2VlbXMgdG8gcmVzdWx0IGluIGJldHRlciBjb2RlLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gY2VydGFpbiBtYWNoaW5lcywgdXN1YWxseQordGhvc2Ugd2hpY2ggaGF2ZSBubyBjYWxsLXByZXNlcnZlZCByZWdpc3RlcnMgdG8gdXNlIGluc3RlYWQuCisKKyAgICAgPHA+RW5hYmxlZCBhdCBsZXZlbHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mY29tYmluZS1zdGFjay1hZGp1c3RtZW50czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNvbWJpbmVfMDAyZHN0YWNrXzAwMmRhZGp1c3RtZW50cy04MjAiPjwvYT5UcmFja3Mgc3RhY2sgYWRqdXN0bWVudHMgKHB1c2hlcyBhbmQgcG9wcykgYW5kIHN0YWNrIG1lbW9yeSByZWZlcmVuY2VzCithbmQgdGhlbiB0cmllcyB0byBmaW5kIHdheXMgdG8gY29tYmluZSB0aGVtLgorCisgICAgIDxwPkVuYWJsZWQgYnkgZGVmYXVsdCBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzE8L3NwYW4+PC9zYW1wPiBhbmQgaGlnaGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZjb25zZXJ2ZS1zdGFjazwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNvbnNlcnZlXzAwMmRzdGFjay04MjEiPjwvYT5BdHRlbXB0IHRvIG1pbmltaXplIHN0YWNrIHVzYWdlLiAgVGhlIGNvbXBpbGVyIGF0dGVtcHRzIHRvIHVzZSBsZXNzCitzdGFjayBzcGFjZSwgZXZlbiBpZiB0aGF0IG1ha2VzIHRoZSBwcm9ncmFtIHNsb3dlci4gIFRoaXMgb3B0aW9uCitpbXBsaWVzIHNldHRpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmxhcmdlLXN0YWNrLWZyYW1lPC9zcGFuPjwvc2FtcD4gcGFyYW1ldGVyIHRvIDEwMAorYW5kIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5sYXJnZS1zdGFjay1mcmFtZS1ncm93dGg8L3NwYW4+PC9zYW1wPiBwYXJhbWV0ZXIgdG8gNDAwLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLXJlYXNzb2M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmVlXzAwMmRyZWFzc29jLTgyMiI+PC9hPlBlcmZvcm0gcmVhc3NvY2lhdGlvbiBvbiB0cmVlcy4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2F0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1wcmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmVlXzAwMmRwcmUtODIzIj48L2E+UGVyZm9ybSBwYXJ0aWFsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24gKFBSRSkgb24gdHJlZXMuICBUaGlzIGZsYWcgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtcGFydGlhbC1wcmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmVlXzAwMmRwYXJ0aWFsXzAwMmRwcmUtODI0Ij48L2E+TWFrZSBwYXJ0aWFsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24gKFBSRSkgbW9yZSBhZ2dyZXNzaXZlLiAgVGhpcyBmbGFnIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtZm9yd3Byb3A8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmVlXzAwMmRmb3J3cHJvcC04MjUiPjwvYT5QZXJmb3JtIGZvcndhcmQgcHJvcGFnYXRpb24gb24gdHJlZXMuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0CithdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IGFuZCBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtZnJlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkZnJlLTgyNiI+PC9hPlBlcmZvcm0gZnVsbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uIChGUkUpIG9uIHRyZWVzLiAgVGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gRlJFIGFuZCBQUkUgaXMgdGhhdCBGUkUgb25seSBjb25zaWRlcnMgZXhwcmVzc2lvbnMKK3RoYXQgYXJlIGNvbXB1dGVkIG9uIGFsbCBwYXRocyBsZWFkaW5nIHRvIHRoZSByZWR1bmRhbnQgY29tcHV0YXRpb24uIAorVGhpcyBhbmFseXNpcyBpcyBmYXN0ZXIgdGhhbiBQUkUsIHRob3VnaCBpdCBleHBvc2VzIGZld2VyIHJlZHVuZGFuY2llcy4gCitUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1waGlwcm9wPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkcGhpcHJvcC04MjciPjwvYT5QZXJmb3JtIGhvaXN0aW5nIG9mIGxvYWRzIGZyb20gY29uZGl0aW9uYWwgcG9pbnRlcnMgb24gdHJlZXMuICBUaGlzCitwYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IGFuZCBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmhvaXN0LWFkamFjZW50LWxvYWRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ob2lzdF8wMDJkYWRqYWNlbnRfMDAyZGxvYWRzLTgyOCI+PC9hPlNwZWN1bGF0aXZlbHkgaG9pc3QgbG9hZHMgZnJvbSBib3RoIGJyYW5jaGVzIG9mIGFuIGlmLXRoZW4tZWxzZSBpZiB0aGUKK2xvYWRzIGFyZSBmcm9tIGFkamFjZW50IGxvY2F0aW9ucyBpbiB0aGUgc2FtZSBzdHJ1Y3R1cmUgYW5kIHRoZSB0YXJnZXQKK2FyY2hpdGVjdHVyZSBoYXMgYSBjb25kaXRpb25hbCBtb3ZlIGluc3RydWN0aW9uLiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQKK2J5IGRlZmF1bHQgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1jb3B5LXByb3A8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmVlXzAwMmRjb3B5XzAwMmRwcm9wLTgyOSI+PC9hPlBlcmZvcm0gY29weSBwcm9wYWdhdGlvbiBvbiB0cmVlcy4gIFRoaXMgcGFzcyBlbGltaW5hdGVzIHVubmVjZXNzYXJ5Citjb3B5IG9wZXJhdGlvbnMuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kCitoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmlwYS1wdXJlLWNvbnN0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maXBhXzAwMmRwdXJlXzAwMmRjb25zdC04MzAiPjwvYT5EaXNjb3ZlciB3aGljaCBmdW5jdGlvbnMgYXJlIHB1cmUgb3IgY29uc3RhbnQuIAorRW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maXBhLXJlZmVyZW5jZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmlwYV8wMDJkcmVmZXJlbmNlLTgzMSI+PC9hPkRpc2NvdmVyIHdoaWNoIHN0YXRpYyB2YXJpYWJsZXMgZG8gbm90IGVzY2FwZSB0aGUKK2NvbXBpbGF0aW9uIHVuaXQuIAorRW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maXBhLXB0YTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmlwYV8wMDJkcHRhLTgzMiI+PC9hPlBlcmZvcm0gaW50ZXJwcm9jZWR1cmFsIHBvaW50ZXIgYW5hbHlzaXMgYW5kIGludGVycHJvY2VkdXJhbCBtb2RpZmljYXRpb24KK2FuZCByZWZlcmVuY2UgYW5hbHlzaXMuICBUaGlzIG9wdGlvbiBjYW4gY2F1c2UgZXhjZXNzaXZlIG1lbW9yeSBhbmQKK2NvbXBpbGUtdGltZSB1c2FnZSBvbiBsYXJnZSBjb21waWxhdGlvbiB1bml0cy4gIEl0IGlzIG5vdCBlbmFibGVkIGJ5CitkZWZhdWx0IGF0IGFueSBvcHRpbWl6YXRpb24gbGV2ZWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmlwYS1wcm9maWxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maXBhXzAwMmRwcm9maWxlLTgzMyI+PC9hPlBlcmZvcm0gaW50ZXJwcm9jZWR1cmFsIHByb2ZpbGUgcHJvcGFnYXRpb24uICBUaGUgZnVuY3Rpb25zIGNhbGxlZCBvbmx5IGZyb20KK2NvbGQgZnVuY3Rpb25zIGFyZSBtYXJrZWQgYXMgY29sZC4gQWxzbyBmdW5jdGlvbnMgZXhlY3V0ZWQgb25jZSAoc3VjaCBhcworPGNvZGU+Y29sZDwvY29kZT4sIDxjb2RlPm5vcmV0dXJuPC9jb2RlPiwgc3RhdGljIGNvbnN0cnVjdG9ycyBvciBkZXN0cnVjdG9ycykgYXJlIGlkZW50aWZpZWQuIENvbGQKK2Z1bmN0aW9ucyBhbmQgbG9vcCBsZXNzIHBhcnRzIG9mIGZ1bmN0aW9ucyBleGVjdXRlZCBvbmNlIGFyZSB0aGVuIG9wdGltaXplZCBmb3IKK3NpemUuIAorRW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maXBhLWNwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1maXBhXzAwMmRjcC04MzQiPjwvYT5QZXJmb3JtIGludGVycHJvY2VkdXJhbCBjb25zdGFudCBwcm9wYWdhdGlvbi4gCitUaGlzIG9wdGltaXphdGlvbiBhbmFseXplcyB0aGUgcHJvZ3JhbSB0byBkZXRlcm1pbmUgd2hlbiB2YWx1ZXMgcGFzc2VkCit0byBmdW5jdGlvbnMgYXJlIGNvbnN0YW50cyBhbmQgdGhlbiBvcHRpbWl6ZXMgYWNjb3JkaW5nbHkuIAorVGhpcyBvcHRpbWl6YXRpb24gY2FuIHN1YnN0YW50aWFsbHkgaW5jcmVhc2UgcGVyZm9ybWFuY2UKK2lmIHRoZSBhcHBsaWNhdGlvbiBoYXMgY29uc3RhbnRzIHBhc3NlZCB0byBmdW5jdGlvbnMuIAorVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpcGEtY3AtY2xvbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZpcGFfMDAyZGNwXzAwMmRjbG9uZS04MzUiPjwvYT5QZXJmb3JtIGZ1bmN0aW9uIGNsb25pbmcgdG8gbWFrZSBpbnRlcnByb2NlZHVyYWwgY29uc3RhbnQgcHJvcGFnYXRpb24gc3Ryb25nZXIuIAorV2hlbiBlbmFibGVkLCBpbnRlcnByb2NlZHVyYWwgY29uc3RhbnQgcHJvcGFnYXRpb24gcGVyZm9ybXMgZnVuY3Rpb24gY2xvbmluZword2hlbiBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIGNvbnN0YW50IGFyZ3VtZW50cy4gCitCZWNhdXNlIHRoaXMgb3B0aW1pemF0aW9uIGNhbiBjcmVhdGUgbXVsdGlwbGUgY29waWVzIG9mIGZ1bmN0aW9ucywKK2l0IG1heSBzaWduaWZpY2FudGx5IGluY3JlYXNlIGNvZGUgc2l6ZQorKHNlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBhcmFtIGlwY3AtdW5pdC1ncm93dGg9PC9zcGFuPjx2YXI+dmFsdWU8L3Zhcj48L3NhbXA+KS4gCitUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLXNpbms8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmVlXzAwMmRzaW5rLTgzNiI+PC9hPlBlcmZvcm0gZm9yd2FyZCBzdG9yZSBtb3Rpb24gIG9uIHRyZWVzLiAgVGhpcyBmbGFnIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBhbmQgaGlnaGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLWJpdC1jY3A8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmVlXzAwMmRiaXRfMDAyZGNjcC04MzciPjwvYT5QZXJmb3JtIHNwYXJzZSBjb25kaXRpb25hbCBiaXQgY29uc3RhbnQgcHJvcGFnYXRpb24gb24gdHJlZXMgYW5kIHByb3BhZ2F0ZQorcG9pbnRlciBhbGlnbm1lbnQgaW5mb3JtYXRpb24uIAorVGhpcyBwYXNzIG9ubHkgb3BlcmF0ZXMgb24gbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyBhbmQgaXMgZW5hYmxlZCBieSBkZWZhdWx0CithdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IGFuZCBoaWdoZXIuICBJdCByZXF1aXJlcyB0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJlZS1jY3A8L3NwYW4+PC9zYW1wPiBpcyBlbmFibGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLWNjcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZGNjcC04MzgiPjwvYT5QZXJmb3JtIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudCBwcm9wYWdhdGlvbiAoQ0NQKSBvbiB0cmVlcy4gIFRoaXMKK3Bhc3Mgb25seSBvcGVyYXRlcyBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIGFuZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2F0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1zd2l0Y2gtY29udmVyc2lvbjwvY29kZT48ZGQ+UGVyZm9ybSBjb252ZXJzaW9uIG9mIHNpbXBsZSBpbml0aWFsaXphdGlvbnMgaW4gYSBzd2l0Y2ggdG8KK2luaXRpYWxpemF0aW9ucyBmcm9tIGEgc2NhbGFyIGFycmF5LiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS10YWlsLW1lcmdlPC9jb2RlPjxkZD5Mb29rIGZvciBpZGVudGljYWwgY29kZSBzZXF1ZW5jZXMuICBXaGVuIGZvdW5kLCByZXBsYWNlIG9uZSB3aXRoIGEganVtcCB0byB0aGUKK290aGVyLiAgVGhpcyBvcHRpbWl6YXRpb24gaXMga25vd24gYXMgdGFpbCBtZXJnaW5nIG9yIGNyb3NzIGp1bXBpbmcuICBUaGlzIGZsYWcKK2lzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiBhbmQgaGlnaGVyLiAgVGhlIGNvbXBpbGF0aW9uIHRpbWUKK2luIHRoaXMgcGFzcyBjYW4KK2JlIGxpbWl0ZWQgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+bWF4LXRhaWwtbWVyZ2UtY29tcGFyaXNvbnM8L3NwYW4+PC9zYW1wPiBwYXJhbWV0ZXIgYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5tYXgtdGFpbC1tZXJnZS1pdGVyYXRpb25zPC9zcGFuPjwvc2FtcD4gcGFyYW1ldGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLWRjZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZGRjZS04MzkiPjwvYT5QZXJmb3JtIGRlYWQgY29kZSBlbGltaW5hdGlvbiAoRENFKSBvbiB0cmVlcy4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5CitkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1idWlsdGluLWNhbGwtZGNlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkYnVpbHRpbl8wMDJkY2FsbF8wMDJkZGNlLTg0MCI+PC9hPlBlcmZvcm0gY29uZGl0aW9uYWwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIChEQ0UpIGZvciBjYWxscyB0byBidWlsdC1pbiBmdW5jdGlvbnMKK3RoYXQgbWF5IHNldCA8Y29kZT5lcnJubzwvY29kZT4gYnV0IGFyZSBvdGhlcndpc2Ugc2lkZS1lZmZlY3QgZnJlZS4gIFRoaXMgZmxhZyBpcworZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IGFuZCBoaWdoZXIgaWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4gaXMgbm90IGFsc28KK3NwZWNpZmllZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1kb21pbmF0b3Itb3B0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZGRvbWluYXRvcl8wMDJkb3B0cy04NDEiPjwvYT5QZXJmb3JtIGEgdmFyaWV0eSBvZiBzaW1wbGUgc2NhbGFyIGNsZWFudXBzIChjb25zdGFudC9jb3B5Citwcm9wYWdhdGlvbiwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiwgcmFuZ2UgcHJvcGFnYXRpb24gYW5kIGV4cHJlc3Npb24KK3NpbXBsaWZpY2F0aW9uKSBiYXNlZCBvbiBhIGRvbWluYXRvciB0cmVlIHRyYXZlcnNhbC4gIFRoaXMgYWxzbworcGVyZm9ybXMganVtcCB0aHJlYWRpbmcgKHRvIHJlZHVjZSBqdW1wcyB0byBqdW1wcykuIFRoaXMgZmxhZyBpcworZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1kc2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmVlXzAwMmRkc2UtODQyIj48L2E+UGVyZm9ybSBkZWFkIHN0b3JlIGVsaW1pbmF0aW9uIChEU0UpIG9uIHRyZWVzLiAgQSBkZWFkIHN0b3JlIGlzIGEgc3RvcmUgaW50bworYSBtZW1vcnkgbG9jYXRpb24gdGhhdCBpcyBsYXRlciBvdmVyd3JpdHRlbiBieSBhbm90aGVyIHN0b3JlIHdpdGhvdXQKK2FueSBpbnRlcnZlbmluZyBsb2Fkcy4gIEluIHRoaXMgY2FzZSB0aGUgZWFybGllciBzdG9yZSBjYW4gYmUgZGVsZXRlZC4gIFRoaXMKK2ZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1jaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZGNoLTg0MyI+PC9hPlBlcmZvcm0gbG9vcCBoZWFkZXIgY29weWluZyBvbiB0cmVlcy4gIFRoaXMgaXMgYmVuZWZpY2lhbCBzaW5jZSBpdCBpbmNyZWFzZXMKK2VmZmVjdGl2ZW5lc3Mgb2YgY29kZSBtb3Rpb24gb3B0aW1pemF0aW9ucy4gIEl0IGFsc28gc2F2ZXMgb25lIGp1bXAuICBUaGlzIGZsYWcKK2lzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IGFuZCBoaWdoZXIuICBJdCBpcyBub3QgZW5hYmxlZAorZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+LCBzaW5jZSBpdCB1c3VhbGx5IGluY3JlYXNlcyBjb2RlIHNpemUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtbG9vcC1vcHRpbWl6ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZGxvb3BfMDAyZG9wdGltaXplLTg0NCI+PC9hPlBlcmZvcm0gbG9vcCBvcHRpbWl6YXRpb25zIG9uIHRyZWVzLiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBhbmQgaGlnaGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLWxvb3AtbGluZWFyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkbG9vcF8wMDJkbGluZWFyLTg0NSI+PC9hPlBlcmZvcm0gbG9vcCBpbnRlcmNoYW5nZSB0cmFuc2Zvcm1hdGlvbnMgb24gdHJlZS4gIFNhbWUgYXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbG9vcC1pbnRlcmNoYW5nZTwvc3Bhbj48L3NhbXA+LiAgVG8gdXNlIHRoaXMgY29kZSB0cmFuc2Zvcm1hdGlvbiwgR0NDIGhhcwordG8gYmUgY29uZmlndXJlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2l0aC1wcGw8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLWNsb29nPC9zcGFuPjwvc2FtcD4gdG8KK2VuYWJsZSB0aGUgR3JhcGhpdGUgbG9vcCB0cmFuc2Zvcm1hdGlvbiBpbmZyYXN0cnVjdHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbG9vcC1pbnRlcmNoYW5nZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmxvb3BfMDAyZGludGVyY2hhbmdlLTg0NiI+PC9hPlBlcmZvcm0gbG9vcCBpbnRlcmNoYW5nZSB0cmFuc2Zvcm1hdGlvbnMgb24gbG9vcHMuICBJbnRlcmNoYW5naW5nIHR3bworbmVzdGVkIGxvb3BzIHN3aXRjaGVzIHRoZSBpbm5lciBhbmQgb3V0ZXIgbG9vcHMuICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYQorbG9vcCBsaWtlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBETyBKID0gMSwgTQorICAgICAgICAgICAgRE8gSSA9IDEsIE4KKyAgICAgICAgICAgICAgQShKLCBJKSA9IEEoSiwgSSkgKiBDCisgICAgICAgICAgICBFTkRETworICAgICAgICAgIEVORERPCis8L3ByZT4KKyAgICAgPHA+bG9vcCBpbnRlcmNoYW5nZSB0cmFuc2Zvcm1zIHRoZSBsb29wIGFzIGlmIGl0IHdlcmUgd3JpdHRlbjoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgRE8gSSA9IDEsIE4KKyAgICAgICAgICAgIERPIEogPSAxLCBNCisgICAgICAgICAgICAgIEEoSiwgSSkgPSBBKEosIEkpICogQworICAgICAgICAgICAgRU5ERE8KKyAgICAgICAgICBFTkRETworPC9wcmU+CisgICAgIDxwPndoaWNoIGNhbiBiZSBiZW5lZmljaWFsIHdoZW4gPGNvZGU+TjwvY29kZT4gaXMgbGFyZ2VyIHRoYW4gdGhlIGNhY2hlcywKK2JlY2F1c2UgaW4gRm9ydHJhbiwgdGhlIGVsZW1lbnRzIG9mIGFuIGFycmF5IGFyZSBzdG9yZWQgaW4gbWVtb3J5Citjb250aWd1b3VzbHkgYnkgY29sdW1uLCBhbmQgdGhlIG9yaWdpbmFsIGxvb3AgaXRlcmF0ZXMgb3ZlciByb3dzLAorcG90ZW50aWFsbHkgY3JlYXRpbmcgYXQgZWFjaCBhY2Nlc3MgYSBjYWNoZSBtaXNzLiAgVGhpcyBvcHRpbWl6YXRpb24KK2FwcGxpZXMgdG8gYWxsIHRoZSBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IEdDQyBhbmQgaXMgbm90IGxpbWl0ZWQgdG8KK0ZvcnRyYW4uICBUbyB1c2UgdGhpcyBjb2RlIHRyYW5zZm9ybWF0aW9uLCBHQ0MgaGFzIHRvIGJlIGNvbmZpZ3VyZWQKK3dpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLXBwbDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdpdGgtY2xvb2c8L3NwYW4+PC9zYW1wPiB0byBlbmFibGUgdGhlCitHcmFwaGl0ZSBsb29wIHRyYW5zZm9ybWF0aW9uIGluZnJhc3RydWN0dXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZsb29wLXN0cmlwLW1pbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZsb29wXzAwMmRzdHJpcF8wMDJkbWluZS04NDciPjwvYT5QZXJmb3JtIGxvb3Agc3RyaXAgbWluaW5nIHRyYW5zZm9ybWF0aW9ucyBvbiBsb29wcy4gIFN0cmlwIG1pbmluZworc3BsaXRzIGEgbG9vcCBpbnRvIHR3byBuZXN0ZWQgbG9vcHMuICBUaGUgb3V0ZXIgbG9vcCBoYXMgc3RyaWRlcworZXF1YWwgdG8gdGhlIHN0cmlwIHNpemUgYW5kIHRoZSBpbm5lciBsb29wIGhhcyBzdHJpZGVzIG9mIHRoZQorb3JpZ2luYWwgbG9vcCB3aXRoaW4gYSBzdHJpcC4gIFRoZSBzdHJpcCBsZW5ndGggY2FuIGJlIGNoYW5nZWQKK3VzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5sb29wLWJsb2NrLXRpbGUtc2l6ZTwvc3Bhbj48L3NhbXA+IHBhcmFtZXRlci4gIEZvciBleGFtcGxlLAorZ2l2ZW4gYSBsb29wIGxpa2U6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIERPIEkgPSAxLCBOCisgICAgICAgICAgICBBKEkpID0gQShJKSArIEMKKyAgICAgICAgICBFTkRETworPC9wcmU+CisgICAgIDxwPmxvb3Agc3RyaXAgbWluaW5nIHRyYW5zZm9ybXMgdGhlIGxvb3AgYXMgaWYgaXQgd2VyZSB3cml0dGVuOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBETyBJSSA9IDEsIE4sIDUxCisgICAgICAgICAgICBETyBJID0gSUksIG1pbiAoSUkgKyA1MCwgTikKKyAgICAgICAgICAgICAgQShJKSA9IEEoSSkgKyBDCisgICAgICAgICAgICBFTkRETworICAgICAgICAgIEVORERPCis8L3ByZT4KKyAgICAgPHA+VGhpcyBvcHRpbWl6YXRpb24gYXBwbGllcyB0byBhbGwgdGhlIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgR0NDIGFuZCBpcworbm90IGxpbWl0ZWQgdG8gRm9ydHJhbi4gIFRvIHVzZSB0aGlzIGNvZGUgdHJhbnNmb3JtYXRpb24sIEdDQyBoYXMgdG8KK2JlIGNvbmZpZ3VyZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdpdGgtcHBsPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2l0aC1jbG9vZzwvc3Bhbj48L3NhbXA+IHRvCitlbmFibGUgdGhlIEdyYXBoaXRlIGxvb3AgdHJhbnNmb3JtYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmxvb3AtYmxvY2s8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZsb29wXzAwMmRibG9jay04NDgiPjwvYT5QZXJmb3JtIGxvb3AgYmxvY2tpbmcgdHJhbnNmb3JtYXRpb25zIG9uIGxvb3BzLiAgQmxvY2tpbmcgc3RyaXAgbWluZXMKK2VhY2ggbG9vcCBpbiB0aGUgbG9vcCBuZXN0IHN1Y2ggdGhhdCB0aGUgbWVtb3J5IGFjY2Vzc2VzIG9mIHRoZQorZWxlbWVudCBsb29wcyBmaXQgaW5zaWRlIGNhY2hlcy4gIFRoZSBzdHJpcCBsZW5ndGggY2FuIGJlIGNoYW5nZWQKK3VzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5sb29wLWJsb2NrLXRpbGUtc2l6ZTwvc3Bhbj48L3NhbXA+IHBhcmFtZXRlci4gIEZvciBleGFtcGxlLCBnaXZlbgorYSBsb29wIGxpa2U6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIERPIEkgPSAxLCBOCisgICAgICAgICAgICBETyBKID0gMSwgTQorICAgICAgICAgICAgICBBKEosIEkpID0gQihJKSArIEMoSikKKyAgICAgICAgICAgIEVORERPCisgICAgICAgICAgRU5ERE8KKzwvcHJlPgorICAgICA8cD5sb29wIGJsb2NraW5nIHRyYW5zZm9ybXMgdGhlIGxvb3AgYXMgaWYgaXQgd2VyZSB3cml0dGVuOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBETyBJSSA9IDEsIE4sIDUxCisgICAgICAgICAgICBETyBKSiA9IDEsIE0sIDUxCisgICAgICAgICAgICAgIERPIEkgPSBJSSwgbWluIChJSSArIDUwLCBOKQorICAgICAgICAgICAgICAgIERPIEogPSBKSiwgbWluIChKSiArIDUwLCBNKQorICAgICAgICAgICAgICAgICAgQShKLCBJKSA9IEIoSSkgKyBDKEopCisgICAgICAgICAgICAgICAgRU5ERE8KKyAgICAgICAgICAgICAgRU5ERE8KKyAgICAgICAgICAgIEVORERPCisgICAgICAgICAgRU5ERE8KKzwvcHJlPgorICAgICA8cD53aGljaCBjYW4gYmUgYmVuZWZpY2lhbCB3aGVuIDxjb2RlPk08L2NvZGU+IGlzIGxhcmdlciB0aGFuIHRoZSBjYWNoZXMsCitiZWNhdXNlIHRoZSBpbm5lcm1vc3QgbG9vcCBpdGVyYXRlcyBvdmVyIGEgc21hbGxlciBhbW91bnQgb2YgZGF0YQord2hpY2ggY2FuIGJlIGtlcHQgaW4gdGhlIGNhY2hlcy4gIFRoaXMgb3B0aW1pemF0aW9uIGFwcGxpZXMgdG8gYWxsIHRoZQorbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBHQ0MgYW5kIGlzIG5vdCBsaW1pdGVkIHRvIEZvcnRyYW4uICBUbyB1c2UgdGhpcworY29kZSB0cmFuc2Zvcm1hdGlvbiwgR0NDIGhhcyB0byBiZSBjb25maWd1cmVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLXBwbDwvc3Bhbj48L3NhbXA+CithbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLWNsb29nPC9zcGFuPjwvc2FtcD4gdG8gZW5hYmxlIHRoZSBHcmFwaGl0ZSBsb29wIHRyYW5zZm9ybWF0aW9uCitpbmZyYXN0cnVjdHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZ3JhcGhpdGUtaWRlbnRpdHk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZncmFwaGl0ZV8wMDJkaWRlbnRpdHktODQ5Ij48L2E+RW5hYmxlIHRoZSBpZGVudGl0eSB0cmFuc2Zvcm1hdGlvbiBmb3IgZ3JhcGhpdGUuICBGb3IgZXZlcnkgU0NvUCB3ZSBnZW5lcmF0ZQordGhlIHBvbHloZWRyYWwgcmVwcmVzZW50YXRpb24gYW5kIHRyYW5zZm9ybSBpdCBiYWNrIHRvIGdpbXBsZS4gIFVzaW5nCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmdyYXBoaXRlLWlkZW50aXR5PC9zcGFuPjwvc2FtcD4gd2UgY2FuIGNoZWNrIHRoZSBjb3N0cyBvciBiZW5lZml0cyBvZiB0aGUKK0dJTVBMRSAtJmd0OyBHUkFQSElURSAtJmd0OyBHSU1QTEUgdHJhbnNmb3JtYXRpb24uICBTb21lIG1pbmltYWwgb3B0aW1pemF0aW9ucworYXJlIGFsc28gcGVyZm9ybWVkIGJ5IHRoZSBjb2RlIGdlbmVyYXRvciBDTG9vRywgbGlrZSBpbmRleCBzcGxpdHRpbmcgYW5kCitkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gbG9vcHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmxvb3AtbmVzdC1vcHRpbWl6ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmxvb3BfMDAyZG5lc3RfMDAyZG9wdGltaXplLTg1MCI+PC9hPkVuYWJsZSB0aGUgSVNMIGJhc2VkIGxvb3AgbmVzdCBvcHRpbWl6ZXIuICBUaGlzIGlzIGEgZ2VuZXJpYyBsb29wIG5lc3QKK29wdGltaXplciBiYXNlZCBvbiB0aGUgUGx1dG8gb3B0aW1pemF0aW9uIGFsZ29yaXRobXMuICBJdCBjYWxjdWxhdGVzIGEgbG9vcAorc3RydWN0dXJlIG9wdGltaXplZCBmb3IgZGF0YS1sb2NhbGl0eSBhbmQgcGFyYWxsZWxpc20uICBUaGlzIG9wdGlvbgoraXMgZXhwZXJpbWVudGFsLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZsb29wLXBhcmFsbGVsaXplLWFsbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmxvb3BfMDAyZHBhcmFsbGVsaXplXzAwMmRhbGwtODUxIj48L2E+VXNlIHRoZSBHcmFwaGl0ZSBkYXRhIGRlcGVuZGVuY2UgYW5hbHlzaXMgdG8gaWRlbnRpZnkgbG9vcHMgdGhhdCBjYW4KK2JlIHBhcmFsbGVsaXplZC4gIFBhcmFsbGVsaXplIGFsbCB0aGUgbG9vcHMgdGhhdCBjYW4gYmUgYW5hbHl6ZWQgdG8KK25vdCBjb250YWluIGxvb3AgY2FycmllZCBkZXBlbmRlbmNlcyB3aXRob3V0IGNoZWNraW5nIHRoYXQgaXQgaXMKK3Byb2ZpdGFibGUgdG8gcGFyYWxsZWxpemUgdGhlIGxvb3BzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZjaGVjay1kYXRhLWRlcHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZjaGVja18wMDJkZGF0YV8wMDJkZGVwcy04NTIiPjwvYT5Db21wYXJlIHRoZSByZXN1bHRzIG9mIHNldmVyYWwgZGF0YSBkZXBlbmRlbmNlIGFuYWx5emVycy4gIFRoaXMgb3B0aW9uCitpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgdGhlIGRhdGEgZGVwZW5kZW5jZSBhbmFseXplcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtbG9vcC1pZi1jb252ZXJ0PC9jb2RlPjxkZD5BdHRlbXB0IHRvIHRyYW5zZm9ybSBjb25kaXRpb25hbCBqdW1wcyBpbiB0aGUgaW5uZXJtb3N0IGxvb3BzIHRvCiticmFuY2gtbGVzcyBlcXVpdmFsZW50cy4gIFRoZSBpbnRlbnQgaXMgdG8gcmVtb3ZlIGNvbnRyb2wtZmxvdyBmcm9tCit0aGUgaW5uZXJtb3N0IGxvb3BzIGluIG9yZGVyIHRvIGltcHJvdmUgdGhlIGFiaWxpdHkgb2YgdGhlCit2ZWN0b3JpemF0aW9uIHBhc3MgdG8gaGFuZGxlIHRoZXNlIGxvb3BzLiAgVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2lmIHZlY3Rvcml6YXRpb24gaXMgZW5hYmxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1sb29wLWlmLWNvbnZlcnQtc3RvcmVzPC9jb2RlPjxkZD5BdHRlbXB0IHRvIGFsc28gaWYtY29udmVydCBjb25kaXRpb25hbCBqdW1wcyBjb250YWluaW5nIG1lbW9yeSB3cml0ZXMuIAorVGhpcyB0cmFuc2Zvcm1hdGlvbiBjYW4gYmUgdW5zYWZlIGZvciBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcyBhcyBpdAordHJhbnNmb3JtcyBjb25kaXRpb25hbCBtZW1vcnkgd3JpdGVzIGludG8gdW5jb25kaXRpb25hbCBtZW1vcnkgd3JpdGVzLiAKK0ZvciBleGFtcGxlLAorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBmb3IgKGkgPSAwOyBpICZsdDsgTjsgaSsrKQorICAgICAgICAgICAgaWYgKGNvbmQpCisgICAgICAgICAgICAgIEFbaV0gPSBleHByOworPC9wcmU+CisgICAgIDxwPmlzIHRyYW5zZm9ybWVkIHRvCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGZvciAoaSA9IDA7IGkgJmx0OyBOOyBpKyspCisgICAgICAgICAgICBBW2ldID0gY29uZCA/IGV4cHIgOiBBW2ldOworPC9wcmU+CisgICAgIDxwPnBvdGVudGlhbGx5IHByb2R1Y2luZyBkYXRhIHJhY2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLWxvb3AtZGlzdHJpYnV0aW9uPC9jb2RlPjxkZD5QZXJmb3JtIGxvb3AgZGlzdHJpYnV0aW9uLiAgVGhpcyBmbGFnIGNhbiBpbXByb3ZlIGNhY2hlIHBlcmZvcm1hbmNlIG9uCitiaWcgbG9vcCBib2RpZXMgYW5kIGFsbG93IGZ1cnRoZXIgbG9vcCBvcHRpbWl6YXRpb25zLCBsaWtlCitwYXJhbGxlbGl6YXRpb24gb3IgdmVjdG9yaXphdGlvbiwgdG8gdGFrZSBwbGFjZS4gIEZvciBleGFtcGxlLCB0aGUgbG9vcAorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBETyBJID0gMSwgTgorICAgICAgICAgICAgQShJKSA9IEIoSSkgKyBDCisgICAgICAgICAgICBEKEkpID0gRShJKSAqIEYKKyAgICAgICAgICBFTkRETworPC9wcmU+CisgICAgIDxwPmlzIHRyYW5zZm9ybWVkIHRvCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIERPIEkgPSAxLCBOCisgICAgICAgICAgICAgQShJKSA9IEIoSSkgKyBDCisgICAgICAgICAgRU5ERE8KKyAgICAgICAgICBETyBJID0gMSwgTgorICAgICAgICAgICAgIEQoSSkgPSBFKEkpICogRgorICAgICAgICAgIEVORERPCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtbG9vcC1kaXN0cmlidXRlLXBhdHRlcm5zPC9jb2RlPjxkZD5QZXJmb3JtIGxvb3AgZGlzdHJpYnV0aW9uIG9mIHBhdHRlcm5zIHRoYXQgY2FuIGJlIGNvZGUgZ2VuZXJhdGVkIHdpdGgKK2NhbGxzIHRvIGEgbGlicmFyeS4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhpcyBwYXNzIGRpc3RyaWJ1dGVzIHRoZSBpbml0aWFsaXphdGlvbiBsb29wcyBhbmQgZ2VuZXJhdGVzIGEgY2FsbCB0bworbWVtc2V0IHplcm8uICBGb3IgZXhhbXBsZSwgdGhlIGxvb3AKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgRE8gSSA9IDEsIE4KKyAgICAgICAgICAgIEEoSSkgPSAwCisgICAgICAgICAgICBCKEkpID0gQShJKSArIEkKKyAgICAgICAgICBFTkRETworPC9wcmU+CisgICAgIDxwPmlzIHRyYW5zZm9ybWVkIHRvCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIERPIEkgPSAxLCBOCisgICAgICAgICAgICAgQShJKSA9IDAKKyAgICAgICAgICBFTkRETworICAgICAgICAgIERPIEkgPSAxLCBOCisgICAgICAgICAgICAgQihJKSA9IEEoSSkgKyBJCisgICAgICAgICAgRU5ERE8KKzwvcHJlPgorICAgICA8cD5hbmQgdGhlIGluaXRpYWxpemF0aW9uIGxvb3AgaXMgdHJhbnNmb3JtZWQgaW50byBhIGNhbGwgdG8gbWVtc2V0IHplcm8uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtbG9vcC1pbTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZGxvb3BfMDAyZGltLTg1MyI+PC9hPlBlcmZvcm0gbG9vcCBpbnZhcmlhbnQgbW90aW9uIG9uIHRyZWVzLiAgVGhpcyBwYXNzIG1vdmVzIG9ubHkgaW52YXJpYW50cyB0aGF0CithcmUgaGFyZCB0byBoYW5kbGUgYXQgUlRMIGxldmVsIChmdW5jdGlvbiBjYWxscywgb3BlcmF0aW9ucyB0aGF0IGV4cGFuZCB0bworbm9udHJpdmlhbCBzZXF1ZW5jZXMgb2YgaW5zbnMpLiAgV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVuc3dpdGNoLWxvb3BzPC9zcGFuPjwvc2FtcD4gaXQgYWxzbyBtb3Zlcworb3BlcmFuZHMgb2YgY29uZGl0aW9ucyB0aGF0IGFyZSBpbnZhcmlhbnQgb3V0IG9mIHRoZSBsb29wLCBzbyB0aGF0IHdlIGNhbiB1c2UKK2p1c3QgdHJpdmlhbCBpbnZhcmlhbnRuZXNzIGFuYWx5c2lzIGluIGxvb3AgdW5zd2l0Y2hpbmcuICBUaGUgcGFzcyBhbHNvIGluY2x1ZGVzCitzdG9yZSBtb3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtbG9vcC1pdmNhbm9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkbG9vcF8wMDJkaXZjYW5vbi04NTQiPjwvYT5DcmVhdGUgYSBjYW5vbmljYWwgY291bnRlciBmb3IgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaW4gbG9vcHMgZm9yIHdoaWNoCitkZXRlcm1pbmluZyBudW1iZXIgb2YgaXRlcmF0aW9ucyByZXF1aXJlcyBjb21wbGljYXRlZCBhbmFseXNpcy4gIExhdGVyCitvcHRpbWl6YXRpb25zIHRoZW4gbWF5IGRldGVybWluZSB0aGUgbnVtYmVyIGVhc2lseS4gIFVzZWZ1bCBlc3BlY2lhbGx5CitpbiBjb25uZWN0aW9uIHdpdGggdW5yb2xsaW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpdm9wdHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZpdm9wdHMtODU1Ij48L2E+UGVyZm9ybSBpbmR1Y3Rpb24gdmFyaWFibGUgb3B0aW1pemF0aW9ucyAoc3RyZW5ndGggcmVkdWN0aW9uLCBpbmR1Y3Rpb24KK3ZhcmlhYmxlIG1lcmdpbmcgYW5kIGluZHVjdGlvbiB2YXJpYWJsZSBlbGltaW5hdGlvbikgb24gdHJlZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9bjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZHBhcmFsbGVsaXplXzAwMmRsb29wcy04NTYiPjwvYT5QYXJhbGxlbGl6ZSBsb29wcywgaS5lLiwgc3BsaXQgdGhlaXIgaXRlcmF0aW9uIHNwYWNlIHRvIHJ1biBpbiBuIHRocmVhZHMuIAorVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGZvciBsb29wcyB3aG9zZSBpdGVyYXRpb25zIGFyZSBpbmRlcGVuZGVudAorYW5kIGNhbiBiZSBhcmJpdHJhcmlseSByZW9yZGVyZWQuICBUaGUgb3B0aW1pemF0aW9uIGlzIG9ubHkKK3Byb2ZpdGFibGUgb24gbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMsIGZvciBsb29wcyB0aGF0IGFyZSBDUFUtaW50ZW5zaXZlLAorcmF0aGVyIHRoYW4gY29uc3RyYWluZWQgZS5nLiBieSBtZW1vcnkgYmFuZHdpZHRoLiAgVGhpcyBvcHRpb24KK2ltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXB0aHJlYWQ8L3NwYW4+PC9zYW1wPiwgYW5kIHRodXMgaXMgb25seSBzdXBwb3J0ZWQgb24gdGFyZ2V0cwordGhhdCBoYXZlIHN1cHBvcnQgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wdGhyZWFkPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtcHRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkcHRhLTg1NyI+PC9hPlBlcmZvcm0gZnVuY3Rpb24tbG9jYWwgcG9pbnRzLXRvIGFuYWx5c2lzIG9uIHRyZWVzLiAgVGhpcyBmbGFnIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBhbmQgaGlnaGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLXNyYTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZHNyYS04NTgiPjwvYT5QZXJmb3JtIHNjYWxhciByZXBsYWNlbWVudCBvZiBhZ2dyZWdhdGVzLiAgVGhpcyBwYXNzIHJlcGxhY2VzIHN0cnVjdHVyZQorcmVmZXJlbmNlcyB3aXRoIHNjYWxhcnMgdG8gcHJldmVudCBjb21taXR0aW5nIHN0cnVjdHVyZXMgdG8gbWVtb3J5IHRvbworZWFybHkuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1jb3B5cmVuYW1lPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkY29weXJlbmFtZS04NTkiPjwvYT5QZXJmb3JtIGNvcHkgcmVuYW1pbmcgb24gdHJlZXMuICBUaGlzIHBhc3MgYXR0ZW1wdHMgdG8gcmVuYW1lIGNvbXBpbGVyCit0ZW1wb3JhcmllcyB0byBvdGhlciB2YXJpYWJsZXMgYXQgY29weSBsb2NhdGlvbnMsIHVzdWFsbHkgcmVzdWx0aW5nIGluCit2YXJpYWJsZSBuYW1lcyB3aGljaCBtb3JlIGNsb3NlbHkgcmVzZW1ibGUgdGhlIG9yaWdpbmFsIHZhcmlhYmxlcy4gIFRoaXMgZmxhZworaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIGhpZ2hlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1jb2FsZXNjZS1pbmxpbmVkLXZhcnM8L2NvZGU+PGRkPlRlbGwgdGhlIGNvcHlyZW5hbWUgcGFzcyAoc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJlZS1jb3B5cmVuYW1lPC9zcGFuPjwvc2FtcD4pIHRvIGF0dGVtcHQgdG8KK2NvbWJpbmUgc21hbGwgdXNlci1kZWZpbmVkIHZhcmlhYmxlcyB0b28sIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBpbmxpbmVkCitmcm9tIG90aGVyIGZ1bmN0aW9ucy4gIEl0IGlzIGEgbW9yZSBsaW1pdGVkIGZvcm0gb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJlZS1jb2FsZXNjZS12YXJzPC9zcGFuPjwvc2FtcD4uICBUaGlzIG1heSBoYXJtIGRlYnVnIGluZm9ybWF0aW9uIG9mIHN1Y2gKK2lubGluZWQgdmFyaWFibGVzLCBidXQgaXQgd2lsbCBrZWVwIHZhcmlhYmxlcyBvZiB0aGUgaW5saW5lZC1pbnRvCitmdW5jdGlvbiBhcGFydCBmcm9tIGVhY2ggb3RoZXIsIHN1Y2ggdGhhdCB0aGV5IGFyZSBtb3JlIGxpa2VseSB0bworY29udGFpbiB0aGUgZXhwZWN0ZWQgdmFsdWVzIGluIGEgZGVidWdnaW5nIHNlc3Npb24uICBUaGlzIHdhcyB0aGUKK2RlZmF1bHQgaW4gR0NDIHZlcnNpb25zIG9sZGVyIHRoYW4gNC43LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLWNvYWxlc2NlLXZhcnM8L2NvZGU+PGRkPlRlbGwgdGhlIGNvcHlyZW5hbWUgcGFzcyAoc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJlZS1jb3B5cmVuYW1lPC9zcGFuPjwvc2FtcD4pIHRvIGF0dGVtcHQgdG8KK2NvbWJpbmUgc21hbGwgdXNlci1kZWZpbmVkIHZhcmlhYmxlcyB0b28sIGluc3RlYWQgb2YganVzdCBjb21waWxlcgordGVtcG9yYXJpZXMuICBUaGlzIG1heSBzZXZlcmVseSBsaW1pdCB0aGUgYWJpbGl0eSB0byBkZWJ1ZyBhbiBvcHRpbWl6ZWQKK3Byb2dyYW0gY29tcGlsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXZhci10cmFja2luZy1hc3NpZ25tZW50czwvc3Bhbj48L3NhbXA+LiAgSW4gdGhlCituZWdhdGVkIGZvcm0sIHRoaXMgZmxhZyBwcmV2ZW50cyBTU0EgY29hbGVzY2luZyBvZiB1c2VyIHZhcmlhYmxlcywKK2luY2x1ZGluZyBpbmxpbmVkIG9uZXMuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtdGVyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkdGVyLTg2MCI+PC9hPlBlcmZvcm0gdGVtcG9yYXJ5IGV4cHJlc3Npb24gcmVwbGFjZW1lbnQgZHVyaW5nIHRoZSBTU0EtJmd0O25vcm1hbCBwaGFzZS4gIFNpbmdsZQordXNlL3NpbmdsZSBkZWYgdGVtcG9yYXJpZXMgYXJlIHJlcGxhY2VkIGF0IHRoZWlyIHVzZSBsb2NhdGlvbiB3aXRoIHRoZWlyCitkZWZpbmluZyBleHByZXNzaW9uLiAgVGhpcyByZXN1bHRzIGluIG5vbi1HSU1QTEUgY29kZSwgYnV0IGdpdmVzIHRoZSBleHBhbmRlcnMKK211Y2ggbW9yZSBjb21wbGV4IHRyZWVzIHRvIHdvcmsgb24gcmVzdWx0aW5nIGluIGJldHRlciBSVEwgZ2VuZXJhdGlvbi4gIFRoaXMgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IGFuZCBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtc2xzcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZHNsc3ItODYxIj48L2E+UGVyZm9ybSBzdHJhaWdodC1saW5lIHN0cmVuZ3RoIHJlZHVjdGlvbiBvbiB0cmVlcy4gIFRoaXMgcmVjb2duaXplcyByZWxhdGVkCitleHByZXNzaW9ucyBpbnZvbHZpbmcgbXVsdGlwbGljYXRpb25zIGFuZCByZXBsYWNlcyB0aGVtIGJ5IGxlc3MgZXhwZW5zaXZlCitjYWxjdWxhdGlvbnMgd2hlbiBwb3NzaWJsZS4gIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kCitoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyZWUtdmVjdG9yaXplPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkdmVjdG9yaXplLTg2MiI+PC9hPlBlcmZvcm0gbG9vcCB2ZWN0b3JpemF0aW9uIG9uIHRyZWVzLiBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS1zbHAtdmVjdG9yaXplPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdHJlZV8wMDJkc2xwXzAwMmR2ZWN0b3JpemUtODYzIj48L2E+UGVyZm9ybSBiYXNpYyBibG9jayB2ZWN0b3JpemF0aW9uIG9uIHRyZWVzLiBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiBhbmQgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnRyZWUtdmVjdG9yaXplPC9zcGFuPjwvc2FtcD4gaXMgZW5hYmxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJlZS12ZWN0LWxvb3AtdmVyc2lvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZHZlY3RfMDAyZGxvb3BfMDAyZHZlcnNpb24tODY0Ij48L2E+UGVyZm9ybSBsb29wIHZlcnNpb25pbmcgd2hlbiBkb2luZyBsb29wIHZlY3Rvcml6YXRpb24gb24gdHJlZXMuICBXaGVuIGEgbG9vcAorYXBwZWFycyB0byBiZSB2ZWN0b3JpemFibGUgZXhjZXB0IHRoYXQgZGF0YSBhbGlnbm1lbnQgb3IgZGF0YSBkZXBlbmRlbmNlIGNhbm5vdAorYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUsIHRoZW4gdmVjdG9yaXplZCBhbmQgbm9uLXZlY3Rvcml6ZWQgdmVyc2lvbnMgb2YKK3RoZSBsb29wIGFyZSBnZW5lcmF0ZWQgYWxvbmcgd2l0aCBydW4tdGltZSBjaGVja3MgZm9yIGFsaWdubWVudCBvciBkZXBlbmRlbmNlCit0byBjb250cm9sIHdoaWNoIHZlcnNpb24gaXMgZXhlY3V0ZWQuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2V4Y2VwdCBhdCBsZXZlbCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPiB3aGVyZSBpdCBpcyBkaXNhYmxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdmVjdC1jb3N0LW1vZGVsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdmVjdF8wMDJkY29zdF8wMDJkbW9kZWwtODY1Ij48L2E+RW5hYmxlIGNvc3QgbW9kZWwgZm9yIHZlY3Rvcml6YXRpb24uICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ0cmVlLXZycDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyZWVfMDAyZHZycC04NjYiPjwvYT5QZXJmb3JtIFZhbHVlIFJhbmdlIFByb3BhZ2F0aW9uIG9uIHRyZWVzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZQorY29uc3RhbnQgcHJvcGFnYXRpb24gcGFzcywgYnV0IGluc3RlYWQgb2YgdmFsdWVzLCByYW5nZXMgb2YgdmFsdWVzIGFyZQorcHJvcGFnYXRlZC4gIFRoaXMgYWxsb3dzIHRoZSBvcHRpbWl6ZXJzIHRvIHJlbW92ZSB1bm5lY2Vzc2FyeSByYW5nZQorY2hlY2tzIGxpa2UgYXJyYXkgYm91bmQgY2hlY2tzIGFuZCBudWxsIHBvaW50ZXIgY2hlY2tzLiAgVGhpcyBpcworZW5hYmxlZCBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IGFuZCBoaWdoZXIuICBOdWxsIHBvaW50ZXIgY2hlY2sKK2VsaW1pbmF0aW9uIGlzIG9ubHkgZG9uZSBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzPC9zcGFuPjwvc2FtcD4gaXMKK2VuYWJsZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyYWNlcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyYWNlci04NjciPjwvYT5QZXJmb3JtIHRhaWwgZHVwbGljYXRpb24gdG8gZW5sYXJnZSBzdXBlcmJsb2NrIHNpemUuICBUaGlzIHRyYW5zZm9ybWF0aW9uCitzaW1wbGlmaWVzIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlIGZ1bmN0aW9uIGFsbG93aW5nIG90aGVyIG9wdGltaXphdGlvbnMgdG8gZG8KK2EgYmV0dGVyIGpvYi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdW5yb2xsLWxvb3BzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdW5yb2xsXzAwMmRsb29wcy04NjgiPjwvYT5VbnJvbGwgbG9vcHMgd2hvc2UgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgY2FuIGJlIGRldGVybWluZWQgYXQgY29tcGlsZQordGltZSBvciB1cG9uIGVudHJ5IHRvIHRoZSBsb29wLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnJvbGwtbG9vcHM8L3NwYW4+PC9zYW1wPiBpbXBsaWVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnJlcnVuLWNzZS1hZnRlci1sb29wPC9zcGFuPjwvc2FtcD4uICBUaGlzIG9wdGlvbiBtYWtlcyBjb2RlIGxhcmdlciwKK2FuZCBtYXkgb3IgbWF5IG5vdCBtYWtlIGl0IHJ1biBmYXN0ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnVucm9sbC1hbGwtbG9vcHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ1bnJvbGxfMDAyZGFsbF8wMDJkbG9vcHMtODY5Ij48L2E+VW5yb2xsIGFsbCBsb29wcywgZXZlbiBpZiB0aGVpciBudW1iZXIgb2YgaXRlcmF0aW9ucyBpcyB1bmNlcnRhaW4gd2hlbgordGhlIGxvb3AgaXMgZW50ZXJlZC4gIFRoaXMgdXN1YWxseSBtYWtlcyBwcm9ncmFtcyBydW4gbW9yZSBzbG93bHkuIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnJvbGwtYWxsLWxvb3BzPC9zcGFuPjwvc2FtcD4gaW1wbGllcyB0aGUgc2FtZSBvcHRpb25zIGFzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVucm9sbC1sb29wczwvc3Bhbj48L3NhbXA+LAorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzcGxpdC1pdnMtaW4tdW5yb2xsZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzcGxpdF8wMDJkaXZzXzAwMmRpbl8wMDJkdW5yb2xsZXItODcwIj48L2E+RW5hYmxlcyBleHByZXNzaW9uIG9mIHZhbHVlcyBvZiBpbmR1Y3Rpb24gdmFyaWFibGVzIGluIGxhdGVyIGl0ZXJhdGlvbnMKK29mIHRoZSB1bnJvbGxlZCBsb29wIHVzaW5nIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLiAgVGhpcyBicmVha3MKK2xvbmcgZGVwZW5kZW5jeSBjaGFpbnMsIHRodXMgaW1wcm92aW5nIGVmZmljaWVuY3kgb2YgdGhlIHNjaGVkdWxpbmcgcGFzc2VzLgorCisgICAgIDxwPkEgY29tYmluYXRpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ3ZWI8L3NwYW4+PC9zYW1wPiBhbmQgQ1NFIGlzIG9mdGVuIHN1ZmZpY2llbnQgdG8gb2J0YWluIHRoZQorc2FtZSBlZmZlY3QuICBIb3dldmVyLCB0aGF0IGlzIG5vdCByZWxpYWJsZSBpbiBjYXNlcyB3aGVyZSB0aGUgbG9vcCBib2R5CitpcyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gYSBzaW5nbGUgYmFzaWMgYmxvY2suICBJdCBhbHNvIGRvZXMgbm90IHdvcmsgYXQgYWxsCitvbiBzb21lIGFyY2hpdGVjdHVyZXMgZHVlIHRvIHJlc3RyaWN0aW9ucyBpbiB0aGUgQ1NFIHBhc3MuCisKKyAgICAgPHA+VGhpcyBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ2YXJpYWJsZS1leHBhbnNpb24taW4tdW5yb2xsZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ2YXJpYWJsZV8wMDJkZXhwYW5zaW9uXzAwMmRpbl8wMDJkdW5yb2xsZXItODcxIj48L2E+V2l0aCB0aGlzIG9wdGlvbiwgdGhlIGNvbXBpbGVyIGNyZWF0ZXMgbXVsdGlwbGUgY29waWVzIG9mIHNvbWUKK2xvY2FsIHZhcmlhYmxlcyB3aGVuIHVucm9sbGluZyBhIGxvb3AsIHdoaWNoIGNhbiByZXN1bHQgaW4gc3VwZXJpb3IgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcGFydGlhbC1pbmxpbmluZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnBhcnRpYWxfMDAyZGlubGluaW5nLTg3MiI+PC9hPklubGluZSBwYXJ0cyBvZiBmdW5jdGlvbnMuICBUaGlzIG9wdGlvbiBoYXMgYW55IGVmZmVjdCBvbmx5Cit3aGVuIGlubGluaW5nIGl0c2VsZiBpcyB0dXJuZWQgb24gYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1maW5saW5lLWZ1bmN0aW9uczwvc3Bhbj48L3NhbXA+CitvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmlubGluZS1zbWFsbC1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPiBvcHRpb25zLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnByZWRpY3RpdmUtY29tbW9uaW5nPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcHJlZGljdGl2ZV8wMDJkY29tbW9uaW5nLTg3MyI+PC9hPlBlcmZvcm0gcHJlZGljdGl2ZSBjb21tb25pbmcgb3B0aW1pemF0aW9uLCBpLmUuLCByZXVzaW5nIGNvbXB1dGF0aW9ucworKGVzcGVjaWFsbHkgbWVtb3J5IGxvYWRzIGFuZCBzdG9yZXMpIHBlcmZvcm1lZCBpbiBwcmV2aW91cworaXRlcmF0aW9ucyBvZiBsb29wcy4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyBlbmFibGVkIGF0IGxldmVsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwcmVmZXRjaC1sb29wLWFycmF5czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnByZWZldGNoXzAwMmRsb29wXzAwMmRhcnJheXMtODc0Ij48L2E+SWYgc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQgbWFjaGluZSwgZ2VuZXJhdGUgaW5zdHJ1Y3Rpb25zIHRvIHByZWZldGNoCittZW1vcnkgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgbG9vcHMgdGhhdCBhY2Nlc3MgbGFyZ2UgYXJyYXlzLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIG1heSBnZW5lcmF0ZSBiZXR0ZXIgb3Igd29yc2UgY29kZTsgcmVzdWx0cyBhcmUgaGlnaGx5CitkZXBlbmRlbnQgb24gdGhlIHN0cnVjdHVyZSBvZiBsb29wcyB3aXRoaW4gdGhlIHNvdXJjZSBjb2RlLgorCisgICAgIDxwPkRpc2FibGVkIGF0IGxldmVsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1wZWVwaG9sZTwvY29kZT48ZHQ+PGNvZGU+LWZuby1wZWVwaG9sZTI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkcGVlcGhvbGUtODc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRwZWVwaG9sZTItODc2Ij48L2E+RGlzYWJsZSBhbnkgbWFjaGluZS1zcGVjaWZpYyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zLiAgVGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1wZWVwaG9sZTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXBlZXBob2xlMjwvc3Bhbj48L3NhbXA+IGlzIGluIGhvdyB0aGV5CithcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbXBpbGVyOyBzb21lIHRhcmdldHMgdXNlIG9uZSwgc29tZSB1c2UgdGhlCitvdGhlciwgYSBmZXcgdXNlIGJvdGguCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwZWVwaG9sZTwvc3Bhbj48L3NhbXA+IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBlZXBob2xlMjwvc3Bhbj48L3NhbXA+IGVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWd1ZXNzLWJyYW5jaC1wcm9iYWJpbGl0eTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRndWVzc18wMDJkYnJhbmNoXzAwMmRwcm9iYWJpbGl0eS04NzciPjwvYT5EbyBub3QgZ3Vlc3MgYnJhbmNoIHByb2JhYmlsaXRpZXMgdXNpbmcgaGV1cmlzdGljcy4KKworICAgICA8cD5HQ0MgdXNlcyBoZXVyaXN0aWNzIHRvIGd1ZXNzIGJyYW5jaCBwcm9iYWJpbGl0aWVzIGlmIHRoZXkgYXJlCitub3QgcHJvdmlkZWQgYnkgcHJvZmlsaW5nIGZlZWRiYWNrICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+KS4gIFRoZXNlCitoZXVyaXN0aWNzIGFyZSBiYXNlZCBvbiB0aGUgY29udHJvbCBmbG93IGdyYXBoLiAgSWYgc29tZSBicmFuY2ggcHJvYmFiaWxpdGllcworYXJlIHNwZWNpZmllZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fYnVpbHRpbl9leHBlY3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRoZW4gdGhlIGhldXJpc3RpY3MgYXJlCit1c2VkIHRvIGd1ZXNzIGJyYW5jaCBwcm9iYWJpbGl0aWVzIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udHJvbCBmbG93IGdyYXBoLAordGFraW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fYnVpbHRpbl9leHBlY3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5mbyBpbnRvIGFjY291bnQuICBUaGUgaW50ZXJhY3Rpb25zCitiZXR3ZWVuIHRoZSBoZXVyaXN0aWNzIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fYnVpbHRpbl9leHBlY3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FuIGJlIGNvbXBsZXgsIGFuZCBpbgorc29tZSBjYXNlcywgaXQgbWF5IGJlIHVzZWZ1bCB0byBkaXNhYmxlIHRoZSBoZXVyaXN0aWNzIHNvIHRoYXQgdGhlIGVmZmVjdHMKK29mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19idWlsdGluX2V4cGVjdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZndWVzcy1icmFuY2gtcHJvYmFiaWxpdHk8L3NwYW4+PC9zYW1wPiBhdCBsZXZlbHMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlb3JkZXItYmxvY2tzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcmVvcmRlcl8wMDJkYmxvY2tzLTg3OCI+PC9hPlJlb3JkZXIgYmFzaWMgYmxvY2tzIGluIHRoZSBjb21waWxlZCBmdW5jdGlvbiBpbiBvcmRlciB0byByZWR1Y2UgbnVtYmVyIG9mCit0YWtlbiBicmFuY2hlcyBhbmQgaW1wcm92ZSBjb2RlIGxvY2FsaXR5LgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcmVvcmRlci1ibG9ja3MtYW5kLXBhcnRpdGlvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnJlb3JkZXJfMDAyZGJsb2Nrc18wMDJkYW5kXzAwMmRwYXJ0aXRpb24tODc5Ij48L2E+SW4gYWRkaXRpb24gdG8gcmVvcmRlcmluZyBiYXNpYyBibG9ja3MgaW4gdGhlIGNvbXBpbGVkIGZ1bmN0aW9uLCBpbiBvcmRlcgordG8gcmVkdWNlIG51bWJlciBvZiB0YWtlbiBicmFuY2hlcywgcGFydGl0aW9ucyBob3QgYW5kIGNvbGQgYmFzaWMgYmxvY2tzCitpbnRvIHNlcGFyYXRlIHNlY3Rpb25zIG9mIHRoZSBhc3NlbWJseSBhbmQgLm8gZmlsZXMsIHRvIGltcHJvdmUKK3BhZ2luZyBhbmQgY2FjaGUgbG9jYWxpdHkgcGVyZm9ybWFuY2UuCisKKyAgICAgPHA+VGhpcyBvcHRpbWl6YXRpb24gaXMgYXV0b21hdGljYWxseSB0dXJuZWQgb2ZmIGluIHRoZSBwcmVzZW5jZSBvZgorZXhjZXB0aW9uIGhhbmRsaW5nLCBmb3IgbGlua29uY2Ugc2VjdGlvbnMsIGZvciBmdW5jdGlvbnMgd2l0aCBhIHVzZXItZGVmaW5lZAorc2VjdGlvbiBhdHRyaWJ1dGUgYW5kIG9uIGFueSBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IG5hbWVkCitzZWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcmVvcmRlci1mdW5jdGlvbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZyZW9yZGVyXzAwMmRmdW5jdGlvbnMtODgwIj48L2E+UmVvcmRlciBmdW5jdGlvbnMgaW4gdGhlIG9iamVjdCBmaWxlIGluIG9yZGVyIHRvCitpbXByb3ZlIGNvZGUgbG9jYWxpdHkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHVzaW5nIHNwZWNpYWwKK3N1YnNlY3Rpb25zIDxjb2RlPi50ZXh0LmhvdDwvY29kZT4gZm9yIG1vc3QgZnJlcXVlbnRseSBleGVjdXRlZCBmdW5jdGlvbnMgYW5kCis8Y29kZT4udGV4dC51bmxpa2VseTwvY29kZT4gZm9yIHVubGlrZWx5IGV4ZWN1dGVkIGZ1bmN0aW9ucy4gIFJlb3JkZXJpbmcgaXMgZG9uZSBieQordGhlIGxpbmtlciBzbyBvYmplY3QgZmlsZSBmb3JtYXQgbXVzdCBzdXBwb3J0IG5hbWVkIHNlY3Rpb25zIGFuZCBsaW5rZXIgbXVzdAorcGxhY2UgdGhlbSBpbiBhIHJlYXNvbmFibGUgd2F5LgorCisgICAgIDxwPkFsc28gcHJvZmlsZSBmZWVkYmFjayBtdXN0IGJlIGF2YWlsYWJsZSB0byBtYWtlIHRoaXMgb3B0aW9uIGVmZmVjdGl2ZS4gIFNlZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWFyY3M8L3NwYW4+PC9zYW1wPiBmb3IgZGV0YWlscy4KKworICAgICA8cD5FbmFibGVkIGF0IGxldmVscyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Pczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzdHJpY3QtYWxpYXNpbmc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzdHJpY3RfMDAyZGFsaWFzaW5nLTg4MSI+PC9hPkFsbG93IHRoZSBjb21waWxlciB0byBhc3N1bWUgdGhlIHN0cmljdGVzdCBhbGlhc2luZyBydWxlcyBhcHBsaWNhYmxlIHRvCit0aGUgbGFuZ3VhZ2UgYmVpbmcgY29tcGlsZWQuICBGb3IgQyAoYW5kIEMrKyksIHRoaXMgYWN0aXZhdGVzCitvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGV4cHJlc3Npb25zLiAgSW4gcGFydGljdWxhciwgYW4KK29iamVjdCBvZiBvbmUgdHlwZSBpcyBhc3N1bWVkIG5ldmVyIHRvIHJlc2lkZSBhdCB0aGUgc2FtZSBhZGRyZXNzIGFzIGFuCitvYmplY3Qgb2YgYSBkaWZmZXJlbnQgdHlwZSwgdW5sZXNzIHRoZSB0eXBlcyBhcmUgYWxtb3N0IHRoZSBzYW1lLiAgRm9yCitleGFtcGxlLCBhbiA8Y29kZT51bnNpZ25lZCBpbnQ8L2NvZGU+IGNhbiBhbGlhcyBhbiA8Y29kZT5pbnQ8L2NvZGU+LCBidXQgbm90IGEKKzxjb2RlPnZvaWQqPC9jb2RlPiBvciBhIDxjb2RlPmRvdWJsZTwvY29kZT4uICBBIGNoYXJhY3RlciB0eXBlIG1heSBhbGlhcyBhbnkgb3RoZXIKK3R5cGUuCisKKyAgICAgPHA+PGEgbmFtZT0iVHlwZV8wMDJkcHVubmluZyI+PC9hPlBheSBzcGVjaWFsIGF0dGVudGlvbiB0byBjb2RlIGxpa2UgdGhpczoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdW5pb24gYV91bmlvbiB7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgIH07CisgICAgICAgICAgCisgICAgICAgICAgaW50IGYoKSB7CisgICAgICAgICAgICB1bmlvbiBhX3VuaW9uIHQ7CisgICAgICAgICAgICB0LmQgPSAzLjA7CisgICAgICAgICAgICByZXR1cm4gdC5pOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8cD5UaGUgcHJhY3RpY2Ugb2YgcmVhZGluZyBmcm9tIGEgZGlmZmVyZW50IHVuaW9uIG1lbWJlciB0aGFuIHRoZSBvbmUgbW9zdAorcmVjZW50bHkgd3JpdHRlbiB0byAoY2FsbGVkICZsZHF1bzt0eXBlLXB1bm5pbmcmcmRxdW87KSBpcyBjb21tb24uICBFdmVuIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc3RyaWN0LWFsaWFzaW5nPC9zcGFuPjwvc2FtcD4sIHR5cGUtcHVubmluZyBpcyBhbGxvd2VkLCBwcm92aWRlZCB0aGUgbWVtb3J5CitpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB1bmlvbiB0eXBlLiAgU28sIHRoZSBjb2RlIGFib3ZlIHdvcmtzIGFzCitleHBlY3RlZC4gIFNlZSA8YSBocmVmPSJTdHJ1Y3R1cmVzLXVuaW9ucy1lbnVtZXJhdGlvbnMtYW5kLWJpdF8wMDJkZmllbGRzLWltcGxlbWVudGF0aW9uLmh0bWwjU3RydWN0dXJlcy11bmlvbnMtZW51bWVyYXRpb25zLWFuZC1iaXRfMDAyZGZpZWxkcy1pbXBsZW1lbnRhdGlvbiI+U3RydWN0dXJlcyB1bmlvbnMgZW51bWVyYXRpb25zIGFuZCBiaXQtZmllbGRzIGltcGxlbWVudGF0aW9uPC9hPi4gIEhvd2V2ZXIsIHRoaXMgY29kZSBtaWdodCBub3Q6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGludCBmKCkgeworICAgICAgICAgICAgdW5pb24gYV91bmlvbiB0OworICAgICAgICAgICAgaW50KiBpcDsKKyAgICAgICAgICAgIHQuZCA9IDMuMDsKKyAgICAgICAgICAgIGlwID0gJmFtcDt0Lmk7CisgICAgICAgICAgICByZXR1cm4gKmlwOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8cD5TaW1pbGFybHksIGFjY2VzcyBieSB0YWtpbmcgdGhlIGFkZHJlc3MsIGNhc3RpbmcgdGhlIHJlc3VsdGluZyBwb2ludGVyCithbmQgZGVyZWZlcmVuY2luZyB0aGUgcmVzdWx0IGhhcyB1bmRlZmluZWQgYmVoYXZpb3IsIGV2ZW4gaWYgdGhlIGNhc3QKK3VzZXMgYSB1bmlvbiB0eXBlLCBlLmcuOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBpbnQgZigpIHsKKyAgICAgICAgICAgIGRvdWJsZSBkID0gMy4wOworICAgICAgICAgICAgcmV0dXJuICgodW5pb24gYV91bmlvbiAqKSAmYW1wO2QpLSZndDtpOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8cD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzdHJpY3QtYWxpYXNpbmc8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgZW5hYmxlZCBhdCBsZXZlbHMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnN0cmljdC1vdmVyZmxvdzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnN0cmljdF8wMDJkb3ZlcmZsb3ctODgyIj48L2E+QWxsb3cgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSBzdHJpY3Qgc2lnbmVkIG92ZXJmbG93IHJ1bGVzLCBkZXBlbmRpbmcKK29uIHRoZSBsYW5ndWFnZSBiZWluZyBjb21waWxlZC4gIEZvciBDIChhbmQgQysrKSB0aGlzIG1lYW5zIHRoYXQKK292ZXJmbG93IHdoZW4gZG9pbmcgYXJpdGhtZXRpYyB3aXRoIHNpZ25lZCBudW1iZXJzIGlzIHVuZGVmaW5lZCwgd2hpY2gKK21lYW5zIHRoYXQgdGhlIGNvbXBpbGVyIG1heSBhc3N1bWUgdGhhdCBpdCBkb2VzIG5vdCBoYXBwZW4uICBUaGlzCitwZXJtaXRzIHZhcmlvdXMgb3B0aW1pemF0aW9ucy4gIEZvciBleGFtcGxlLCB0aGUgY29tcGlsZXIgYXNzdW1lcwordGhhdCBhbiBleHByZXNzaW9uIGxpa2UgPGNvZGU+aSArIDEwICZndDsgaTwvY29kZT4gaXMgYWx3YXlzIHRydWUgZm9yCitzaWduZWQgPGNvZGU+aTwvY29kZT4uICBUaGlzIGFzc3VtcHRpb24gaXMgb25seSB2YWxpZCBpZiBzaWduZWQgb3ZlcmZsb3cgaXMKK3VuZGVmaW5lZCwgYXMgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgaWYgPGNvZGU+aSArIDEwPC9jb2RlPiBvdmVyZmxvd3Mgd2hlbgordXNpbmcgdHdvcyBjb21wbGVtZW50IGFyaXRobWV0aWMuICBXaGVuIHRoaXMgb3B0aW9uIGlzIGluIGVmZmVjdCBhbnkKK2F0dGVtcHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gb3BlcmF0aW9uIG9uIHNpZ25lZCBudW1iZXJzCitvdmVyZmxvd3MgbXVzdCBiZSB3cml0dGVuIGNhcmVmdWxseSB0byBub3QgYWN0dWFsbHkgaW52b2x2ZSBvdmVyZmxvdy4KKworICAgICA8cD5UaGlzIG9wdGlvbiBhbHNvIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gYXNzdW1lIHN0cmljdCBwb2ludGVyCitzZW1hbnRpY3M6IGdpdmVuIGEgcG9pbnRlciB0byBhbiBvYmplY3QsIGlmIGFkZGluZyBhbiBvZmZzZXQgdG8gdGhhdAorcG9pbnRlciBkb2VzIG5vdCBwcm9kdWNlIGEgcG9pbnRlciB0byB0aGUgc2FtZSBvYmplY3QsIHRoZSBhZGRpdGlvbiBpcwordW5kZWZpbmVkLiAgVGhpcyBwZXJtaXRzIHRoZSBjb21waWxlciB0byBjb25jbHVkZSB0aGF0IDxjb2RlPnAgKyB1ICZndDsKK3A8L2NvZGU+IGlzIGFsd2F5cyB0cnVlIGZvciBhIHBvaW50ZXIgPGNvZGU+cDwvY29kZT4gYW5kIHVuc2lnbmVkIGludGVnZXIKKzxjb2RlPnU8L2NvZGU+LiAgVGhpcyBhc3N1bXB0aW9uIGlzIG9ubHkgdmFsaWQgYmVjYXVzZSBwb2ludGVyIHdyYXBhcm91bmQgaXMKK3VuZGVmaW5lZCwgYXMgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgaWYgPGNvZGU+cCArIHU8L2NvZGU+IG92ZXJmbG93cyB1c2luZwordHdvcyBjb21wbGVtZW50IGFyaXRobWV0aWMuCisKKyAgICAgPHA+U2VlIGFsc28gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1md3JhcHY8L3NwYW4+PC9zYW1wPiBvcHRpb24uICBVc2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZndyYXB2PC9zcGFuPjwvc2FtcD4gbWVhbnMKK3RoYXQgaW50ZWdlciBzaWduZWQgb3ZlcmZsb3cgaXMgZnVsbHkgZGVmaW5lZDogaXQgd3JhcHMuICBXaGVuCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZndyYXB2PC9zcGFuPjwvc2FtcD4gaXMgdXNlZCwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0cmljdC1vdmVyZmxvdzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXN0cmljdC1vdmVyZmxvdzwvc3Bhbj48L3NhbXA+IGZvcgoraW50ZWdlcnMuICBXaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1md3JhcHY8L3NwYW4+PC9zYW1wPiBjZXJ0YWluIHR5cGVzIG9mIG92ZXJmbG93IGFyZQorcGVybWl0dGVkLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjb21waWxlciBnZXRzIGFuIG92ZXJmbG93IHdoZW4gZG9pbmcKK2FyaXRobWV0aWMgb24gY29uc3RhbnRzLCB0aGUgb3ZlcmZsb3dlZCB2YWx1ZSBjYW4gc3RpbGwgYmUgdXNlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZndyYXB2PC9zcGFuPjwvc2FtcD4sIGJ1dCBub3Qgb3RoZXJ3aXNlLgorCisgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0cmljdC1vdmVyZmxvdzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBlbmFibGVkIGF0IGxldmVscworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mYWxpZ24tZnVuY3Rpb25zPC9jb2RlPjxkdD48Y29kZT4tZmFsaWduLWZ1bmN0aW9ucz08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZhbGlnbl8wMDJkZnVuY3Rpb25zLTg4MyI+PC9hPkFsaWduIHRoZSBzdGFydCBvZiBmdW5jdGlvbnMgdG8gdGhlIG5leHQgcG93ZXItb2YtdHdvIGdyZWF0ZXIgdGhhbgorPHZhcj5uPC92YXI+LCBza2lwcGluZyB1cCB0byA8dmFyPm48L3Zhcj4gYnl0ZXMuICBGb3IgaW5zdGFuY2UsCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmFsaWduLWZ1bmN0aW9ucz0zMjwvc3Bhbj48L3NhbXA+IGFsaWducyBmdW5jdGlvbnMgdG8gdGhlIG5leHQgMzItYnl0ZQorYm91bmRhcnksIGJ1dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmFsaWduLWZ1bmN0aW9ucz0yNDwvc3Bhbj48L3NhbXA+IGFsaWducyB0byB0aGUgbmV4dAorMzItYnl0ZSBib3VuZGFyeSBvbmx5IGlmIHRoaXMgY2FuIGJlIGRvbmUgYnkgc2tpcHBpbmcgMjMgYnl0ZXMgb3IgbGVzcy4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWFsaWduLWZ1bmN0aW9uczwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmFsaWduLWZ1bmN0aW9ucz0xPC9zcGFuPjwvc2FtcD4gYXJlCitlcXVpdmFsZW50IGFuZCBtZWFuIHRoYXQgZnVuY3Rpb25zIGFyZSBub3QgYWxpZ25lZC4KKworICAgICA8cD5Tb21lIGFzc2VtYmxlcnMgb25seSBzdXBwb3J0IHRoaXMgZmxhZyB3aGVuIDx2YXI+bjwvdmFyPiBpcyBhIHBvd2VyIG9mIHR3bzsKK2luIHRoYXQgY2FzZSwgaXQgaXMgcm91bmRlZCB1cC4KKworICAgICA8cD5JZiA8dmFyPm48L3Zhcj4gaXMgbm90IHNwZWNpZmllZCBvciBpcyB6ZXJvLCB1c2UgYSBtYWNoaW5lLWRlcGVuZGVudCBkZWZhdWx0LgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mYWxpZ24tbGFiZWxzPC9jb2RlPjxkdD48Y29kZT4tZmFsaWduLWxhYmVscz08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZhbGlnbl8wMDJkbGFiZWxzLTg4NCI+PC9hPkFsaWduIGFsbCBicmFuY2ggdGFyZ2V0cyB0byBhIHBvd2VyLW9mLXR3byBib3VuZGFyeSwgc2tpcHBpbmcgdXAgdG8KKzx2YXI+bjwvdmFyPiBieXRlcyBsaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYWxpZ24tZnVuY3Rpb25zPC9zcGFuPjwvc2FtcD4uICBUaGlzIG9wdGlvbiBjYW4gZWFzaWx5CittYWtlIGNvZGUgc2xvd2VyLCBiZWNhdXNlIGl0IG11c3QgaW5zZXJ0IGR1bW15IG9wZXJhdGlvbnMgZm9yIHdoZW4gdGhlCiticmFuY2ggdGFyZ2V0IGlzIHJlYWNoZWQgaW4gdGhlIHVzdWFsIGZsb3cgb2YgdGhlIGNvZGUuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1hbGlnbi1sYWJlbHM8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZhbGlnbi1sYWJlbHM9MTwvc3Bhbj48L3NhbXA+IGFyZQorZXF1aXZhbGVudCBhbmQgbWVhbiB0aGF0IGxhYmVscyBhcmUgbm90IGFsaWduZWQuCisKKyAgICAgPHA+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZhbGlnbi1sb29wczwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYWxpZ24tanVtcHM8L3NwYW4+PC9zYW1wPiBhcmUgYXBwbGljYWJsZSBhbmQKK2FyZSBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZSwgdGhlbiB0aGVpciB2YWx1ZXMgYXJlIHVzZWQgaW5zdGVhZC4KKworICAgICA8cD5JZiA8dmFyPm48L3Zhcj4gaXMgbm90IHNwZWNpZmllZCBvciBpcyB6ZXJvLCB1c2UgYSBtYWNoaW5lLWRlcGVuZGVudCBkZWZhdWx0Cit3aGljaCBpcyB2ZXJ5IGxpa2VseSB0byBiZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG1lYW5pbmcgbm8gYWxpZ25tZW50LgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mYWxpZ24tbG9vcHM8L2NvZGU+PGR0Pjxjb2RlPi1mYWxpZ24tbG9vcHM9PC9jb2RlPjx2YXI+bjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mYWxpZ25fMDAyZGxvb3BzLTg4NSI+PC9hPkFsaWduIGxvb3BzIHRvIGEgcG93ZXItb2YtdHdvIGJvdW5kYXJ5LCBza2lwcGluZyB1cCB0byA8dmFyPm48L3Zhcj4gYnl0ZXMKK2xpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZhbGlnbi1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPi4gIElmIHRoZSBsb29wcyBhcmUKK2V4ZWN1dGVkIG1hbnkgdGltZXMsIHRoaXMgbWFrZXMgdXAgZm9yIGFueSBleGVjdXRpb24gb2YgdGhlIGR1bW15CitvcGVyYXRpb25zLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYWxpZ24tbG9vcHM8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZhbGlnbi1sb29wcz0xPC9zcGFuPjwvc2FtcD4gYXJlCitlcXVpdmFsZW50IGFuZCBtZWFuIHRoYXQgbG9vcHMgYXJlIG5vdCBhbGlnbmVkLgorCisgICAgIDxwPklmIDx2YXI+bjwvdmFyPiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHplcm8sIHVzZSBhIG1hY2hpbmUtZGVwZW5kZW50IGRlZmF1bHQuCisKKyAgICAgPHA+RW5hYmxlZCBhdCBsZXZlbHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZhbGlnbi1qdW1wczwvY29kZT48ZHQ+PGNvZGU+LWZhbGlnbi1qdW1wcz08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZhbGlnbl8wMDJkanVtcHMtODg2Ij48L2E+QWxpZ24gYnJhbmNoIHRhcmdldHMgdG8gYSBwb3dlci1vZi10d28gYm91bmRhcnksIGZvciBicmFuY2ggdGFyZ2V0cword2hlcmUgdGhlIHRhcmdldHMgY2FuIG9ubHkgYmUgcmVhY2hlZCBieSBqdW1waW5nLCBza2lwcGluZyB1cCB0byA8dmFyPm48L3Zhcj4KK2J5dGVzIGxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZhbGlnbi1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPi4gIEluIHRoaXMgY2FzZSwgbm8gZHVtbXkgb3BlcmF0aW9ucworbmVlZCBiZSBleGVjdXRlZC4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWFsaWduLWp1bXBzPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYWxpZ24tanVtcHM9MTwvc3Bhbj48L3NhbXA+IGFyZQorZXF1aXZhbGVudCBhbmQgbWVhbiB0aGF0IGxvb3BzIGFyZSBub3QgYWxpZ25lZC4KKworICAgICA8cD5JZiA8dmFyPm48L3Zhcj4gaXMgbm90IHNwZWNpZmllZCBvciBpcyB6ZXJvLCB1c2UgYSBtYWNoaW5lLWRlcGVuZGVudCBkZWZhdWx0LgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdW5pdC1hdC1hLXRpbWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ1bml0XzAwMmRhdF8wMDJkYV8wMDJkdGltZS04ODciPjwvYT5UaGlzIG9wdGlvbiBpcyBsZWZ0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5pdC1hdC1hLXRpbWU8L3NwYW4+PC9zYW1wPgoraGFzIG5vIGVmZmVjdCwgd2hpbGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby11bml0LWF0LWEtdGltZTwvc3Bhbj48L3NhbXA+IGltcGxpZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tdG9wbGV2ZWwtcmVvcmRlcjwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXNlY3Rpb24tYW5jaG9yczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPkVuYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tdG9wbGV2ZWwtcmVvcmRlcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmR0b3BsZXZlbF8wMDJkcmVvcmRlci04ODgiPjwvYT5EbyBub3QgcmVvcmRlciB0b3AtbGV2ZWwgZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGFuZCA8Y29kZT5hc208L2NvZGU+CitzdGF0ZW1lbnRzLiAgT3V0cHV0IHRoZW0gaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUKK2lucHV0IGZpbGUuICBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIHVucmVmZXJlbmNlZCBzdGF0aWMgdmFyaWFibGVzCithcmUgbm90IHJlbW92ZWQuICBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBzdXBwb3J0IGV4aXN0aW5nIGNvZGUKK3RoYXQgcmVsaWVzIG9uIGEgcGFydGljdWxhciBvcmRlcmluZy4gIEZvciBuZXcgY29kZSwgaXQgaXMgYmV0dGVyIHRvCit1c2UgYXR0cmlidXRlcy4KKworICAgICA8cD5FbmFibGVkIGF0IGxldmVsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMDwvc3Bhbj48L3NhbXA+LiAgV2hlbiBkaXNhYmxlZCBleHBsaWNpdGx5LCBpdCBhbHNvIGltcGxpZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tc2VjdGlvbi1hbmNob3JzPC9zcGFuPjwvc2FtcD4sIHdoaWNoIGlzIG90aGVyd2lzZSBlbmFibGVkIGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMDwvc3Bhbj48L3NhbXA+IG9uIHNvbWUKK3RhcmdldHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZndlYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZndlYi04ODkiPjwvYT5Db25zdHJ1Y3RzIHdlYnMgYXMgY29tbW9ubHkgdXNlZCBmb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbiBwdXJwb3NlcyBhbmQgYXNzaWduCitlYWNoIHdlYiBpbmRpdmlkdWFsIHBzZXVkbyByZWdpc3Rlci4gIFRoaXMgYWxsb3dzIHRoZSByZWdpc3RlciBhbGxvY2F0aW9uIHBhc3MKK3RvIG9wZXJhdGUgb24gcHNldWRvcyBkaXJlY3RseSwgYnV0IGFsc28gc3RyZW5ndGhlbnMgc2V2ZXJhbCBvdGhlciBvcHRpbWl6YXRpb24KK3Bhc3Nlcywgc3VjaCBhcyBDU0UsIGxvb3Agb3B0aW1pemVyIGFuZCB0cml2aWFsIGRlYWQgY29kZSByZW1vdmVyLiAgSXQgY2FuLAoraG93ZXZlciwgbWFrZSBkZWJ1Z2dpbmcgaW1wb3NzaWJsZSwgc2luY2UgdmFyaWFibGVzIG5vIGxvbmdlciBzdGF5IGluIGEKKyZsZHF1bztob21lIHJlZ2lzdGVyJnJkcXVvOy4KKworICAgICA8cD5FbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVucm9sbC1sb29wczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ3aG9sZS1wcm9ncmFtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1md2hvbGVfMDAyZHByb2dyYW0tODkwIj48L2E+QXNzdW1lIHRoYXQgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCByZXByZXNlbnRzIHRoZSB3aG9sZSBwcm9ncmFtIGJlaW5nCitjb21waWxlZC4gIEFsbCBwdWJsaWMgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIDxjb2RlPm1haW48L2NvZGU+CithbmQgdGhvc2UgbWVyZ2VkIGJ5IGF0dHJpYnV0ZSA8Y29kZT5leHRlcm5hbGx5X3Zpc2libGU8L2NvZGU+IGJlY29tZSBzdGF0aWMgZnVuY3Rpb25zCithbmQgaW4gZWZmZWN0IGFyZSBvcHRpbWl6ZWQgbW9yZSBhZ2dyZXNzaXZlbHkgYnkgaW50ZXJwcm9jZWR1cmFsIG9wdGltaXplcnMuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggPGNvZGU+LWZsdG88L2NvZGU+LiAKK0luc3RlYWQgcmVseWluZyBvbiBhIGxpbmtlciBwbHVnaW4gc2hvdWxkIHByb3ZpZGUgc2FmZXIgYW5kIG1vcmUgcHJlY2lzZQoraW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmx0b1s9PC9jb2RlPjx2YXI+bjwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZsdG8tODkxIj48L2E+VGhpcyBvcHRpb24gcnVucyB0aGUgc3RhbmRhcmQgbGluay10aW1lIG9wdGltaXplci4gIFdoZW4gaW52b2tlZAord2l0aCBzb3VyY2UgY29kZSwgaXQgZ2VuZXJhdGVzIEdJTVBMRSAob25lIG9mIEdDQydzIGludGVybmFsCityZXByZXNlbnRhdGlvbnMpIGFuZCB3cml0ZXMgaXQgdG8gc3BlY2lhbCBFTEYgc2VjdGlvbnMgaW4gdGhlIG9iamVjdAorZmlsZS4gIFdoZW4gdGhlIG9iamVjdCBmaWxlcyBhcmUgbGlua2VkIHRvZ2V0aGVyLCBhbGwgdGhlIGZ1bmN0aW9uCitib2RpZXMgYXJlIHJlYWQgZnJvbSB0aGVzZSBFTEYgc2VjdGlvbnMgYW5kIGluc3RhbnRpYXRlZCBhcyBpZiB0aGV5CitoYWQgYmVlbiBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zbGF0aW9uIHVuaXQuCisKKyAgICAgPHA+VG8gdXNlIHRoZSBsaW5rLXRpbWUgb3B0aW1pemVyLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmx0bzwvc3Bhbj48L3NhbXA+IG5lZWRzIHRvIGJlIHNwZWNpZmllZCBhdAorY29tcGlsZSB0aW1lIGFuZCBkdXJpbmcgdGhlIGZpbmFsIGxpbmsuICBGb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBnY2MgLWMgLU8yIC1mbHRvIGZvby5jCisgICAgICAgICAgZ2NjIC1jIC1PMiAtZmx0byBiYXIuYworICAgICAgICAgIGdjYyAtbyBteXByb2cgLWZsdG8gLU8yIGZvby5vIGJhci5vCis8L3ByZT4KKyAgICAgPHA+VGhlIGZpcnN0IHR3byBpbnZvY2F0aW9ucyB0byBHQ0Mgc2F2ZSBhIGJ5dGVjb2RlIHJlcHJlc2VudGF0aW9uCitvZiBHSU1QTEUgaW50byBzcGVjaWFsIEVMRiBzZWN0aW9ucyBpbnNpZGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5vPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmFyLm88L3NwYW4+PC9zYW1wPi4gIFRoZSBmaW5hbCBpbnZvY2F0aW9uIHJlYWRzIHRoZSBHSU1QTEUgYnl0ZWNvZGUgZnJvbQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5vPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5iYXIubzwvc3Bhbj48L3NhbXA+LCBtZXJnZXMgdGhlIHR3byBmaWxlcyBpbnRvIGEgc2luZ2xlCitpbnRlcm5hbCBpbWFnZSwgYW5kIGNvbXBpbGVzIHRoZSByZXN1bHQgYXMgdXN1YWwuICBTaW5jZSBib3RoCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zm9vLm88L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmJhci5vPC9zcGFuPjwvc2FtcD4gYXJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGltYWdlLCB0aGlzCitjYXVzZXMgYWxsIHRoZSBpbnRlcnByb2NlZHVyYWwgYW5hbHlzZXMgYW5kIG9wdGltaXphdGlvbnMgaW4gR0NDIHRvCit3b3JrIGFjcm9zcyB0aGUgdHdvIGZpbGVzIGFzIGlmIHRoZXkgd2VyZSBhIHNpbmdsZSBvbmUuICBUaGlzIG1lYW5zLAorZm9yIGV4YW1wbGUsIHRoYXQgdGhlIGlubGluZXIgaXMgYWJsZSB0byBpbmxpbmUgZnVuY3Rpb25zIGluCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmFyLm88L3NwYW4+PC9zYW1wPiBpbnRvIGZ1bmN0aW9ucyBpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zm9vLm88L3NwYW4+PC9zYW1wPiBhbmQgdmljZS12ZXJzYS4KKworICAgICA8cD5Bbm90aGVyIChzaW1wbGVyKSB3YXkgdG8gZW5hYmxlIGxpbmstdGltZSBvcHRpbWl6YXRpb24gaXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZ2NjIC1vIG15cHJvZyAtZmx0byAtTzIgZm9vLmMgYmFyLmMKKzwvcHJlPgorICAgICA8cD5UaGUgYWJvdmUgZ2VuZXJhdGVzIGJ5dGVjb2RlIGZvciA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zm9vLmM8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmJhci5jPC9zcGFuPjwvc2FtcD4sCittZXJnZXMgdGhlbSB0b2dldGhlciBpbnRvIGEgc2luZ2xlIEdJTVBMRSByZXByZXNlbnRhdGlvbiBhbmQgb3B0aW1pemVzCit0aGVtIGFzIHVzdWFsIHRvIHByb2R1Y2UgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm15cHJvZzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPlRoZSBvbmx5IGltcG9ydGFudCB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0byBlbmFibGUgbGluay10aW1lCitvcHRpbWl6YXRpb25zIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmx0bzwvc3Bhbj48L3NhbXA+IGZsYWcgbmVlZHMgdG8gYmUgcGFzc2VkIHRvIGJvdGggdGhlCitjb21waWxlIGFuZCB0aGUgbGluayBjb21tYW5kcy4KKworICAgICA8cD5UbyBtYWtlIHdob2xlIHByb2dyYW0gb3B0aW1pemF0aW9uIGVmZmVjdGl2ZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UKK2NlcnRhaW4gd2hvbGUgcHJvZ3JhbSBhc3N1bXB0aW9ucy4gIFRoZSBjb21waWxlciBuZWVkcyB0byBrbm93Cit3aGF0IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGNhbiBiZSBhY2Nlc3NlZCBieSBsaWJyYXJpZXMgYW5kIHJ1bnRpbWUKK291dHNpZGUgb2YgdGhlIGxpbmstdGltZSBvcHRpbWl6ZWQgdW5pdC4gIFdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBsaW5rZXIsCit0aGUgbGlua2VyIHBsdWdpbiAoc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdXNlLWxpbmtlci1wbHVnaW48L3NwYW4+PC9zYW1wPikgcGFzc2VzIGluZm9ybWF0aW9uCit0byB0aGUgY29tcGlsZXIgYWJvdXQgdXNlZCBhbmQgZXh0ZXJuYWxseSB2aXNpYmxlIHN5bWJvbHMuICBXaGVuCit0aGUgbGlua2VyIHBsdWdpbiBpcyBub3QgYXZhaWxhYmxlLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZndob2xlLXByb2dyYW08L3NwYW4+PC9zYW1wPiBzaG91bGQgYmUKK3VzZWQgdG8gYWxsb3cgdGhlIGNvbXBpbGVyIHRvIG1ha2UgdGhlc2UgYXNzdW1wdGlvbnMsIHdoaWNoIGxlYWRzCit0byBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uIGRlY2lzaW9ucy4KKworICAgICA8cD5Ob3RlIHRoYXQgd2hlbiBhIGZpbGUgaXMgY29tcGlsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmx0bzwvc3Bhbj48L3NhbXA+LCB0aGUgZ2VuZXJhdGVkCitvYmplY3QgZmlsZSBpcyBsYXJnZXIgdGhhbiBhIHJlZ3VsYXIgb2JqZWN0IGZpbGUgYmVjYXVzZSBpdAorY29udGFpbnMgR0lNUExFIGJ5dGVjb2RlcyBhbmQgdGhlIHVzdWFsIGZpbmFsIGNvZGUuICBUaGlzIG1lYW5zIHRoYXQKK29iamVjdCBmaWxlcyB3aXRoIExUTyBpbmZvcm1hdGlvbiBjYW4gYmUgbGlua2VkIGFzIG5vcm1hbCBvYmplY3QKK2ZpbGVzOyBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmx0bzwvc3Bhbj48L3NhbXA+IGlzIG5vdCBwYXNzZWQgdG8gdGhlIGxpbmtlciwgbm8KK2ludGVycHJvY2VkdXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhcHBsaWVkLgorCisgICAgIDxwPkFkZGl0aW9uYWxseSwgdGhlIG9wdGltaXphdGlvbiBmbGFncyB1c2VkIHRvIGNvbXBpbGUgaW5kaXZpZHVhbCBmaWxlcworYXJlIG5vdCBuZWNlc3NhcmlseSByZWxhdGVkIHRvIHRob3NlIHVzZWQgYXQgbGluayB0aW1lLiAgRm9yIGluc3RhbmNlLAorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGdjYyAtYyAtTzAgLWZsdG8gZm9vLmMKKyAgICAgICAgICBnY2MgLWMgLU8wIC1mbHRvIGJhci5jCisgICAgICAgICAgZ2NjIC1vIG15cHJvZyAtZmx0byAtTzMgZm9vLm8gYmFyLm8KKzwvcHJlPgorICAgICA8cD5UaGlzIHByb2R1Y2VzIGluZGl2aWR1YWwgb2JqZWN0IGZpbGVzIHdpdGggdW5vcHRpbWl6ZWQgYXNzZW1ibGVyCitjb2RlLCBidXQgdGhlIHJlc3VsdGluZyBiaW5hcnkgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm15cHJvZzwvc3Bhbj48L3NhbXA+IGlzIG9wdGltaXplZCBhdAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4uICBJZiwgaW5zdGVhZCwgdGhlIGZpbmFsIGJpbmFyeSBpcyBnZW5lcmF0ZWQgd2l0aG91dAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZsdG88L3NwYW4+PC9zYW1wPiwgdGhlbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bXlwcm9nPC9zcGFuPjwvc2FtcD4gaXMgbm90IG9wdGltaXplZC4KKworICAgICA8cD5XaGVuIHByb2R1Y2luZyB0aGUgZmluYWwgYmluYXJ5IHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZsdG88L3NwYW4+PC9zYW1wPiwgR0NDIG9ubHkKK2FwcGxpZXMgbGluay10aW1lIG9wdGltaXphdGlvbnMgdG8gdGhvc2UgZmlsZXMgdGhhdCBjb250YWluIGJ5dGVjb2RlLiAKK1RoZXJlZm9yZSwgeW91IGNhbiBtaXggYW5kIG1hdGNoIG9iamVjdCBmaWxlcyBhbmQgbGlicmFyaWVzIHdpdGgKK0dJTVBMRSBieXRlY29kZXMgYW5kIGZpbmFsIG9iamVjdCBjb2RlLiAgR0NDIGF1dG9tYXRpY2FsbHkgc2VsZWN0cword2hpY2ggZmlsZXMgdG8gb3B0aW1pemUgaW4gTFRPIG1vZGUgYW5kIHdoaWNoIGZpbGVzIHRvIGxpbmsgd2l0aG91dAorZnVydGhlciBwcm9jZXNzaW5nLgorCisgICAgIDxwPlRoZXJlIGFyZSBzb21lIGNvZGUgZ2VuZXJhdGlvbiBmbGFncyBwcmVzZXJ2ZWQgYnkgR0NDIHdoZW4KK2dlbmVyYXRpbmcgYnl0ZWNvZGVzLCBhcyB0aGV5IG5lZWQgdG8gYmUgdXNlZCBkdXJpbmcgdGhlIGZpbmFsIGxpbmsKK3N0YWdlLiAgQ3VycmVudGx5LCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNhdmVkIGludG8gdGhlIEdJTVBMRQorYnl0ZWNvZGUgZmlsZXM6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY29tbW9uPC9zcGFuPjwvc2FtcD4gYW5kIGFsbCB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tPC9zcGFuPjwvc2FtcD4gdGFyZ2V0IGZsYWdzLgorCisgICAgIDxwPkF0IGxpbmsgdGltZSwgdGhlc2Ugb3B0aW9ucyBhcmUgcmVhZCBpbiBhbmQgcmVhcHBsaWVkLiAgTm90ZSB0aGF0IHRoZQorY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtYWtlcyBubyBhdHRlbXB0IHRvIHJlY29nbml6ZSBjb25mbGljdGluZwordmFsdWVzIGZvciB0aGVzZSBvcHRpb25zLiAgSWYgZGlmZmVyZW50IGZpbGVzIGhhdmUgY29uZmxpY3Rpbmcgb3B0aW9uCit2YWx1ZXMgKGUuZy4sIG9uZSBmaWxlIGlzIGNvbXBpbGVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZQSUM8L3NwYW4+PC9zYW1wPiBhbmQgYW5vdGhlcgoraXNuJ3QpLCB0aGUgY29tcGlsZXIgc2ltcGx5IHVzZXMgdGhlIGxhc3QgdmFsdWUgcmVhZCBmcm9tIHRoZQorYnl0ZWNvZGUgZmlsZXMuICBJdCBpcyByZWNvbW1lbmRlZCwgdGhlbiwgdGhhdCB5b3UgY29tcGlsZSBhbGwgdGhlIGZpbGVzCitwYXJ0aWNpcGF0aW5nIGluIHRoZSBzYW1lIGxpbmsgd2l0aCB0aGUgc2FtZSBvcHRpb25zLgorCisgICAgIDxwPklmIExUTyBlbmNvdW50ZXJzIG9iamVjdHMgd2l0aCBDIGxpbmthZ2UgZGVjbGFyZWQgd2l0aCBpbmNvbXBhdGlibGUKK3R5cGVzIGluIHNlcGFyYXRlIHRyYW5zbGF0aW9uIHVuaXRzIHRvIGJlIGxpbmtlZCB0b2dldGhlciAodW5kZWZpbmVkCitiZWhhdmlvciBhY2NvcmRpbmcgdG8gSVNPIEM5OSA2LjIuNyksIGEgbm9uLWZhdGFsIGRpYWdub3N0aWMgbWF5IGJlCitpc3N1ZWQuICBUaGUgYmVoYXZpb3IgaXMgc3RpbGwgdW5kZWZpbmVkIGF0IHJ1biB0aW1lLgorCisgICAgIDxwPkFub3RoZXIgZmVhdHVyZSBvZiBMVE8gaXMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhcHBseSBpbnRlcnByb2NlZHVyYWwKK29wdGltaXphdGlvbnMgb24gZmlsZXMgd3JpdHRlbiBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzLiAgVGhpcyByZXF1aXJlcworc3VwcG9ydCBpbiB0aGUgbGFuZ3VhZ2UgZnJvbnQgZW5kLiAgQ3VycmVudGx5LCB0aGUgQywgQysrIGFuZAorRm9ydHJhbiBmcm9udCBlbmRzIGFyZSBjYXBhYmxlIG9mIGVtaXR0aW5nIEdJTVBMRSBieXRlY29kZXMsIHNvCitzb21ldGhpbmcgbGlrZSB0aGlzIHNob3VsZCB3b3JrOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGdjYyAtYyAtZmx0byBmb28uYworICAgICAgICAgIGcrKyAtYyAtZmx0byBiYXIuY2MKKyAgICAgICAgICBnZm9ydHJhbiAtYyAtZmx0byBiYXouZjkwCisgICAgICAgICAgZysrIC1vIG15cHJvZyAtZmx0byAtTzMgZm9vLm8gYmFyLm8gYmF6Lm8gLWxnZm9ydHJhbgorPC9wcmU+CisgICAgIDxwPk5vdGljZSB0aGF0IHRoZSBmaW5hbCBsaW5rIGlzIGRvbmUgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZysrPC9zcGFuPjwvc2FtcD4gdG8gZ2V0IHRoZSBDKysKK3J1bnRpbWUgbGlicmFyaWVzIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbGdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gaXMgYWRkZWQgdG8gZ2V0IHRoZSBGb3J0cmFuCitydW50aW1lIGxpYnJhcmllcy4gIEluIGdlbmVyYWwsIHdoZW4gbWl4aW5nIGxhbmd1YWdlcyBpbiBMVE8gbW9kZSwgeW91CitzaG91bGQgdXNlIHRoZSBzYW1lIGxpbmsgY29tbWFuZCBvcHRpb25zIGFzIHdoZW4gbWl4aW5nIGxhbmd1YWdlcyBpbiBhCityZWd1bGFyIChub24tTFRPKSBjb21waWxhdGlvbjsgYWxsIHlvdSBuZWVkIHRvIGFkZCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmx0bzwvc3Bhbj48L3NhbXA+IHRvCithbGwgdGhlIGNvbXBpbGUgYW5kIGxpbmsgY29tbWFuZHMuCisKKyAgICAgPHA+SWYgb2JqZWN0IGZpbGVzIGNvbnRhaW5pbmcgR0lNUExFIGJ5dGVjb2RlIGFyZSBzdG9yZWQgaW4gYSBsaWJyYXJ5IGFyY2hpdmUsIHNheQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmZvby5hPC9zcGFuPjwvc2FtcD4sIGl0IGlzIHBvc3NpYmxlIHRvIGV4dHJhY3QgYW5kIHVzZSB0aGVtIGluIGFuIExUTyBsaW5rIGlmIHlvdQorYXJlIHVzaW5nIGEgbGlua2VyIHdpdGggcGx1Z2luIHN1cHBvcnQuICBUbyBlbmFibGUgdGhpcyBmZWF0dXJlLCB1c2UKK3RoZSBmbGFnIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdXNlLWxpbmtlci1wbHVnaW48L3NwYW4+PC9zYW1wPiBhdCBsaW5rIHRpbWU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZ2NjIC1vIG15cHJvZyAtTzIgLWZsdG8gLWZ1c2UtbGlua2VyLXBsdWdpbiBhLm8gYi5vIC1sZm9vCis8L3ByZT4KKyAgICAgPHA+V2l0aCB0aGUgbGlua2VyIHBsdWdpbiBlbmFibGVkLCB0aGUgbGlua2VyIGV4dHJhY3RzIHRoZSBuZWVkZWQKK0dJTVBMRSBmaWxlcyBmcm9tIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJmb28uYTwvc3Bhbj48L3NhbXA+IGFuZCBwYXNzZXMgdGhlbSBvbiB0byB0aGUgcnVubmluZyBHQ0MKK3RvIG1ha2UgdGhlbSBwYXJ0IG9mIHRoZSBhZ2dyZWdhdGVkIEdJTVBMRSBpbWFnZSB0byBiZSBvcHRpbWl6ZWQuCisKKyAgICAgPHA+SWYgeW91IGFyZSBub3QgdXNpbmcgYSBsaW5rZXIgd2l0aCBwbHVnaW4gc3VwcG9ydCBhbmQvb3IgZG8gbm90CitlbmFibGUgdGhlIGxpbmtlciBwbHVnaW4sIHRoZW4gdGhlIG9iamVjdHMgaW5zaWRlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJmb28uYTwvc3Bhbj48L3NhbXA+CithcmUgZXh0cmFjdGVkIGFuZCBsaW5rZWQgYXMgdXN1YWwsIGJ1dCB0aGV5IGRvIG5vdCBwYXJ0aWNpcGF0ZQoraW4gdGhlIExUTyBvcHRpbWl6YXRpb24gcHJvY2Vzcy4KKworICAgICA8cD5MaW5rLXRpbWUgb3B0aW1pemF0aW9ucyBkbyBub3QgcmVxdWlyZSB0aGUgcHJlc2VuY2Ugb2YgdGhlIHdob2xlIHByb2dyYW0gdG8KK29wZXJhdGUuICBJZiB0aGUgcHJvZ3JhbSBkb2VzIG5vdCByZXF1aXJlIGFueSBzeW1ib2xzIHRvIGJlIGV4cG9ydGVkLCBpdCBpcworcG9zc2libGUgdG8gY29tYmluZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmx0bzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZndob2xlLXByb2dyYW08L3NwYW4+PC9zYW1wPiB0byBhbGxvdwordGhlIGludGVycHJvY2VkdXJhbCBvcHRpbWl6ZXJzIHRvIHVzZSBtb3JlIGFnZ3Jlc3NpdmUgYXNzdW1wdGlvbnMgd2hpY2ggbWF5CitsZWFkIHRvIGltcHJvdmVkIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiAKK1VzZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZndob2xlLXByb2dyYW08L3NwYW4+PC9zYW1wPiBpcyBub3QgbmVlZGVkIHdoZW4gbGlua2VyIHBsdWdpbiBpcworYWN0aXZlIChzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1c2UtbGlua2VyLXBsdWdpbjwvc3Bhbj48L3NhbXA+KS4KKworICAgICA8cD5UaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBMVE8gbWFrZXMgbm8KK2F0dGVtcHQgdG8gZ2VuZXJhdGUgYnl0ZWNvZGUgdGhhdCBpcyBwb3J0YWJsZSBiZXR3ZWVuIGRpZmZlcmVudAordHlwZXMgb2YgaG9zdHMuICBUaGUgYnl0ZWNvZGUgZmlsZXMgYXJlIHZlcnNpb25lZCBhbmQgdGhlcmUgaXMgYQorc3RyaWN0IHZlcnNpb24gY2hlY2ssIHNvIGJ5dGVjb2RlIGZpbGVzIGdlbmVyYXRlZCBpbiBvbmUgdmVyc2lvbiBvZgorR0NDIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBvbGRlci9uZXdlciB2ZXJzaW9uIG9mIEdDQy4KKworICAgICA8cD5MaW5rLXRpbWUgb3B0aW1pemF0aW9uIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIGdlbmVyYXRpb24gb2YgZGVidWdnaW5nCitpbmZvcm1hdGlvbi4gIENvbWJpbmluZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmx0bzwvc3Bhbj48L3NhbXA+IHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nPC9zcGFuPjwvc2FtcD4gaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbCBhbmQgZXhwZWN0ZWQgdG8gcHJvZHVjZSB3cm9uZworcmVzdWx0cy4KKworICAgICA8cD5JZiB5b3Ugc3BlY2lmeSB0aGUgb3B0aW9uYWwgPHZhcj5uPC92YXI+LCB0aGUgb3B0aW1pemF0aW9uIGFuZCBjb2RlCitnZW5lcmF0aW9uIGRvbmUgYXQgbGluayB0aW1lIGlzIGV4ZWN1dGVkIGluIHBhcmFsbGVsIHVzaW5nIDx2YXI+bjwvdmFyPgorcGFyYWxsZWwgam9icyBieSB1dGlsaXppbmcgYW4gaW5zdGFsbGVkIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5tYWtlPC9zcGFuPjwvc2FtcD4gcHJvZ3JhbS4gIFRoZQorZW52aXJvbm1lbnQgdmFyaWFibGUgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+TUFLRTwvc3Bhbj48L3NhbXA+IG1heSBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBwcm9ncmFtCit1c2VkLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIDx2YXI+bjwvdmFyPiBpcyAxLgorCisgICAgIDxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbHRvPWpvYnNlcnZlcjwvc3Bhbj48L3NhbXA+IHRvIHVzZSBHTlUgbWFrZSdzCitqb2Igc2VydmVyIG1vZGUgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgam9icy4gVGhpcworaXMgdXNlZnVsIHdoZW4gdGhlIE1ha2VmaWxlIGNhbGxpbmcgR0NDIGlzIGFscmVhZHkgZXhlY3V0aW5nIGluIHBhcmFsbGVsLiAKK1lvdSBtdXN0IHByZXBlbmQgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPis8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gdGhlIGNvbW1hbmQgcmVjaXBlIGluIHRoZSBwYXJlbnQgTWFrZWZpbGUKK2ZvciB0aGlzIHRvIHdvcmsuICBUaGlzIG9wdGlvbiBsaWtlbHkgb25seSB3b3JrcyBpZiA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5NQUtFPC9zcGFuPjwvc2FtcD4gaXMKK0dOVSBtYWtlLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmx0by1wYXJ0aXRpb249PC9jb2RlPjx2YXI+YWxnPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZsdG9fMDAyZHBhcnRpdGlvbi04OTIiPjwvYT5TcGVjaWZ5IHRoZSBwYXJ0aXRpb25pbmcgYWxnb3JpdGhtIHVzZWQgYnkgdGhlIGxpbmstdGltZSBvcHRpbWl6ZXIuIAorVGhlIHZhbHVlIGlzIGVpdGhlciA8Y29kZT4xdG8xPC9jb2RlPiB0byBzcGVjaWZ5IGEgcGFydGl0aW9uaW5nIG1pcnJvcmluZwordGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcyBvciA8Y29kZT5iYWxhbmNlZDwvY29kZT4gdG8gc3BlY2lmeSBwYXJ0aXRpb25pbmcKK2ludG8gZXF1YWxseSBzaXplZCBjaHVua3MgKHdoZW5ldmVyIHBvc3NpYmxlKSBvciA8Y29kZT5tYXg8L2NvZGU+IHRvIGNyZWF0ZQorbmV3IHBhcnRpdGlvbiBmb3IgZXZlcnkgc3ltYm9sIHdoZXJlIHBvc3NpYmxlLiAgU3BlY2lmeWluZyA8Y29kZT5ub25lPC9jb2RlPgorYXMgYW4gYWxnb3JpdGhtIGRpc2FibGVzIHBhcnRpdGlvbmluZyBhbmQgc3RyZWFtaW5nIGNvbXBsZXRlbHkuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+YmFsYW5jZWQ8L2NvZGU+LiBXaGlsZSA8Y29kZT4xdG8xPC9jb2RlPiBjYW4gYmUgdXNlZAorYXMgYW4gd29ya2Fyb3VuZCBmb3IgdmFyaW91cyBjb2RlIG9yZGVyaW5nIGlzc3VlcywgdGhlIDxjb2RlPm1heDwvY29kZT4KK3BhcnRpdGlvbmluZyBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdGVzdGluZyBvbmx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZsdG8tY29tcHJlc3Npb24tbGV2ZWw9PC9jb2RlPjx2YXI+bjwvdmFyPjxkZD5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGxldmVsIG9mIGNvbXByZXNzaW9uIHVzZWQgZm9yIGludGVybWVkaWF0ZQorbGFuZ3VhZ2Ugd3JpdHRlbiB0byBMVE8gb2JqZWN0IGZpbGVzLCBhbmQgaXMgb25seSBtZWFuaW5nZnVsIGluCitjb25qdW5jdGlvbiB3aXRoIExUTyBtb2RlICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmx0bzwvc3Bhbj48L3NhbXA+KS4gIFZhbGlkCit2YWx1ZXMgYXJlIDAgKG5vIGNvbXByZXNzaW9uKSB0byA5IChtYXhpbXVtIGNvbXByZXNzaW9uKS4gIFZhbHVlcworb3V0c2lkZSB0aGlzIHJhbmdlIGFyZSBjbGFtcGVkIHRvIGVpdGhlciAwIG9yIDkuICBJZiB0aGUgb3B0aW9uIGlzIG5vdAorZ2l2ZW4sIGEgZGVmYXVsdCBiYWxhbmNlZCBjb21wcmVzc2lvbiBzZXR0aW5nIGlzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmx0by1yZXBvcnQ8L2NvZGU+PGRkPlByaW50cyBhIHJlcG9ydCB3aXRoIGludGVybmFsIGRldGFpbHMgb24gdGhlIHdvcmtpbmdzIG9mIHRoZSBsaW5rLXRpbWUKK29wdGltaXplci4gIFRoZSBjb250ZW50cyBvZiB0aGlzIHJlcG9ydCB2YXJ5IGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uLiAKK0l0IGlzIG1lYW50IHRvIGJlIHVzZWZ1bCB0byBHQ0MgZGV2ZWxvcGVycyB3aGVuIHByb2Nlc3Npbmcgb2JqZWN0CitmaWxlcyBpbiBMVE8gbW9kZSAodmlhIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbHRvPC9zcGFuPjwvc2FtcD4pLgorCisgICAgIDxwPkRpc2FibGVkIGJ5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnVzZS1saW5rZXItcGx1Z2luPC9jb2RlPjxkZD5FbmFibGVzIHRoZSB1c2Ugb2YgYSBsaW5rZXIgcGx1Z2luIGR1cmluZyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uLiAgVGhpcworb3B0aW9uIHJlbGllcyBvbiBwbHVnaW4gc3VwcG9ydCBpbiB0aGUgbGlua2VyLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gZ29sZAorb3IgaW4gR05VIGxkIDIuMjEgb3IgbmV3ZXIuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZXh0cmFjdGlvbiBvZiBvYmplY3QgZmlsZXMgd2l0aCBHSU1QTEUgYnl0ZWNvZGUgb3V0CitvZiBsaWJyYXJ5IGFyY2hpdmVzLiBUaGlzIGltcHJvdmVzIHRoZSBxdWFsaXR5IG9mIG9wdGltaXphdGlvbiBieSBleHBvc2luZworbW9yZSBjb2RlIHRvIHRoZSBsaW5rLXRpbWUgb3B0aW1pemVyLiAgVGhpcyBpbmZvcm1hdGlvbiBzcGVjaWZpZXMgd2hhdAorc3ltYm9scyBjYW4gYmUgYWNjZXNzZWQgZXh0ZXJuYWxseSAoYnkgbm9uLUxUTyBvYmplY3Qgb3IgZHVyaW5nIGR5bmFtaWMKK2xpbmtpbmcpLiAgUmVzdWx0aW5nIGNvZGUgcXVhbGl0eSBpbXByb3ZlbWVudHMgb24gYmluYXJpZXMgKGFuZCBzaGFyZWQKK2xpYnJhcmllcyB0aGF0IHVzZSBoaWRkZW4gdmlzaWJpbGl0eSkgYXJlIHNpbWlsYXIgdG8gPGNvZGU+LWZ3aG9sZS1wcm9ncmFtPC9jb2RlPi4gCitTZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZsdG88L3NwYW4+PC9zYW1wPiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZWZmZWN0IG9mIHRoaXMgZmxhZyBhbmQgaG93IHRvCit1c2UgaXQuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gTFRPIHN1cHBvcnQgaW4gR0NDIGlzIGVuYWJsZWQKK2FuZCBHQ0Mgd2FzIGNvbmZpZ3VyZWQgZm9yIHVzZSB3aXRoCithIGxpbmtlciBzdXBwb3J0aW5nIHBsdWdpbnMgKEdOVSBsZCAyLjIxIG9yIG5ld2VyIG9yIGdvbGQpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZmYXQtbHRvLW9iamVjdHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZmYXRfMDAyZGx0b18wMDJkb2JqZWN0cy04OTMiPjwvYT5GYXQgTFRPIG9iamVjdHMgYXJlIG9iamVjdCBmaWxlcyB0aGF0IGNvbnRhaW4gYm90aCB0aGUgaW50ZXJtZWRpYXRlIGxhbmd1YWdlCithbmQgdGhlIG9iamVjdCBjb2RlLiBUaGlzIG1ha2VzIHRoZW0gdXNhYmxlIGZvciBib3RoIExUTyBsaW5raW5nIGFuZCBub3JtYWwKK2xpbmtpbmcuIFRoaXMgb3B0aW9uIGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gY29tcGlsaW5nIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZsdG88L3NwYW4+PC9zYW1wPgorYW5kIGlzIGlnbm9yZWQgYXQgbGluayB0aW1lLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZmF0LWx0by1vYmplY3RzPC9zcGFuPjwvc2FtcD4gaW1wcm92ZXMgY29tcGlsYXRpb24gdGltZSBvdmVyIHBsYWluIExUTywgYnV0CityZXF1aXJlcyB0aGUgY29tcGxldGUgdG9vbGNoYWluIHRvIGJlIGF3YXJlIG9mIExUTy4gSXQgcmVxdWlyZXMgYSBsaW5rZXIgd2l0aAorbGlua2VyIHBsdWdpbiBzdXBwb3J0IGZvciBiYXNpYyBmdW5jdGlvbmFsaXR5LiAgQWRkaXRpb25hbGx5LAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm5tPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5hcjwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+cmFubGliPC9zcGFuPjwvc2FtcD4KK25lZWQgdG8gc3VwcG9ydCBsaW5rZXIgcGx1Z2lucyB0byBhbGxvdyBhIGZ1bGwtZmVhdHVyZWQgYnVpbGQgZW52aXJvbm1lbnQKKyhjYXBhYmxlIG9mIGJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJpZXMgZXRjKS4gIEdDQyBwcm92aWRlcyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYy1hcjwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYy1ubTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjLXJhbmxpYjwvc3Bhbj48L3NhbXA+IHdyYXBwZXJzIHRvIHBhc3MgdGhlIHJpZ2h0IG9wdGlvbnMKK3RvIHRoZXNlIHRvb2xzLiBXaXRoIG5vbiBmYXQgTFRPIG1ha2VmaWxlcyBuZWVkIHRvIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGVtLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZmF0LWx0by1vYmplY3RzPC9zcGFuPjwvc2FtcD4gYnV0IHRoaXMgZGVmYXVsdCBpcyBpbnRlbmRlZCB0bworY2hhbmdlIGluIGZ1dHVyZSByZWxlYXNlcyB3aGVuIGxpbmtlciBwbHVnaW4gZW5hYmxlZCBlbnZpcm9ubWVudHMgYmVjb21lIG1vcmUKK2NvbW1vbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mY29tcGFyZS1lbGltPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mY29tcGFyZV8wMDJkZWxpbS04OTQiPjwvYT5BZnRlciByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBwb3N0LXJlZ2lzdGVyIGFsbG9jYXRpb24gaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nLAoraWRlbnRpZnkgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMgdGhhdCBjb21wdXRlIHByb2Nlc3NvciBmbGFncyBzaW1pbGFyIHRvIGEKK2NvbXBhcmlzb24gb3BlcmF0aW9uIGJhc2VkIG9uIHRoYXQgYXJpdGhtZXRpYy4gIElmIHBvc3NpYmxlLCBlbGltaW5hdGUgdGhlCitleHBsaWNpdCBjb21wYXJpc29uIG9wZXJhdGlvbi4KKworICAgICA8cD5UaGlzIHBhc3Mgb25seSBhcHBsaWVzIHRvIGNlcnRhaW4gdGFyZ2V0cyB0aGF0IGNhbm5vdCBleHBsaWNpdGx5IHJlcHJlc2VudAordGhlIGNvbXBhcmlzb24gb3BlcmF0aW9uIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uIGlzIGNvbXBsZXRlLgorCisgICAgIDxwPkVuYWJsZWQgYXQgbGV2ZWxzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnVzZS1sZD1iZmQ8L2NvZGU+PGRkPlVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmJmZDwvc3Bhbj48L3NhbXA+IGxpbmtlciBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGxpbmtlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdXNlLWxkPWdvbGQ8L2NvZGU+PGRkPlVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdvbGQ8L3NwYW4+PC9zYW1wPiBsaW5rZXIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBsaW5rZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmNwcm9wLXJlZ2lzdGVyczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmNwcm9wXzAwMmRyZWdpc3RlcnMtODk1Ij48L2E+QWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgcG9zdC1yZWdpc3RlciBhbGxvY2F0aW9uIGluc3RydWN0aW9uIHNwbGl0dGluZywKK3BlcmZvcm0gYSBjb3B5LXByb3BhZ2F0aW9uIHBhc3MgdG8gdHJ5IHRvIHJlZHVjZSBzY2hlZHVsaW5nIGRlcGVuZGVuY2llcworYW5kIG9jY2FzaW9uYWxseSBlbGltaW5hdGUgdGhlIGNvcHkuCisKKyAgICAgPHA+RW5hYmxlZCBhdCBsZXZlbHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcHJvZmlsZS1jb3JyZWN0aW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcHJvZmlsZV8wMDJkY29ycmVjdGlvbi04OTYiPjwvYT5Qcm9maWxlcyBjb2xsZWN0ZWQgdXNpbmcgYW4gaW5zdHJ1bWVudGVkIGJpbmFyeSBmb3IgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgbWF5CitiZSBpbmNvbnNpc3RlbnQgZHVlIHRvIG1pc3NlZCBjb3VudGVyIHVwZGF0ZXMuIFdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLAorR0NDIHVzZXMgaGV1cmlzdGljcyB0byBjb3JyZWN0IG9yIHNtb290aCBvdXQgc3VjaCBpbmNvbnNpc3RlbmNpZXMuIEJ5CitkZWZhdWx0LCBHQ0MgZW1pdHMgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGFuIGluY29uc2lzdGVudCBwcm9maWxlIGlzIGRldGVjdGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwcm9maWxlLWRpcj08L2NvZGU+PHZhcj5wYXRoPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZwcm9maWxlXzAwMmRkaXItODk3Ij48L2E+CitTZXQgdGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIHRoZSBwcm9maWxlIGRhdGEgZmlsZXMgaW4gdG8gPHZhcj5wYXRoPC92YXI+LiAKK1RoaXMgb3B0aW9uIGFmZmVjdHMgb25seSB0aGUgcHJvZmlsZSBkYXRhIGdlbmVyYXRlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWdlbmVyYXRlPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdGVzdC1jb3ZlcmFnZTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+CithbmQgdXNlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtdXNlPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYnJhbmNoLXByb2JhYmlsaXRpZXM8L3NwYW4+PC9zYW1wPgorYW5kIGl0cyByZWxhdGVkIG9wdGlvbnMuICBCb3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBwYXRocyBjYW4gYmUgdXNlZC4gCitCeSBkZWZhdWx0LCBHQ0MgdXNlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgYXMgPHZhcj5wYXRoPC92YXI+LCB0aHVzIHRoZQorcHJvZmlsZSBkYXRhIGZpbGUgYXBwZWFycyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG9iamVjdCBmaWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwcm9maWxlLWdlbmVyYXRlPC9jb2RlPjxkdD48Y29kZT4tZnByb2ZpbGUtZ2VuZXJhdGU9PC9jb2RlPjx2YXI+cGF0aDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mcHJvZmlsZV8wMDJkZ2VuZXJhdGUtODk4Ij48L2E+CitFbmFibGUgb3B0aW9ucyB1c3VhbGx5IHVzZWQgZm9yIGluc3RydW1lbnRpbmcgYXBwbGljYXRpb24gdG8gcHJvZHVjZQorcHJvZmlsZSB1c2VmdWwgZm9yIGxhdGVyIHJlY29tcGlsYXRpb24gd2l0aCBwcm9maWxlIGZlZWRiYWNrIGJhc2VkCitvcHRpbWl6YXRpb24uICBZb3UgbXVzdCB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWdlbmVyYXRlPC9zcGFuPjwvc2FtcD4gYm90aCB3aGVuCitjb21waWxpbmcgYW5kIHdoZW4gbGlua2luZyB5b3VyIHByb2dyYW0uCisKKyAgICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBlbmFibGVkOiA8Y29kZT4tZnByb2ZpbGUtYXJjczwvY29kZT4sIDxjb2RlPi1mcHJvZmlsZS12YWx1ZXM8L2NvZGU+LCA8Y29kZT4tZnZwdDwvY29kZT4uCisKKyAgICAgPHA+SWYgPHZhcj5wYXRoPC92YXI+IGlzIHNwZWNpZmllZCwgR0NDIGxvb2tzIGF0IHRoZSA8dmFyPnBhdGg8L3Zhcj4gdG8gZmluZAordGhlIHByb2ZpbGUgZmVlZGJhY2sgZGF0YSBmaWxlcy4gU2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJvZmlsZS1kaXI8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcHJvZmlsZS11c2U8L2NvZGU+PGR0Pjxjb2RlPi1mcHJvZmlsZS11c2U9PC9jb2RlPjx2YXI+cGF0aDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mcHJvZmlsZV8wMDJkdXNlLTg5OSI+PC9hPkVuYWJsZSBwcm9maWxlIGZlZWRiYWNrIGRpcmVjdGVkIG9wdGltaXphdGlvbnMsIGFuZCBvcHRpbWl6YXRpb25zCitnZW5lcmFsbHkgcHJvZml0YWJsZSBvbmx5IHdpdGggcHJvZmlsZSBmZWVkYmFjayBhdmFpbGFibGUuCisKKyAgICAgPHA+VGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBlbmFibGVkOiA8Y29kZT4tZmJyYW5jaC1wcm9iYWJpbGl0aWVzPC9jb2RlPiwgPGNvZGU+LWZ2cHQ8L2NvZGU+LAorPGNvZGU+LWZ1bnJvbGwtbG9vcHM8L2NvZGU+LCA8Y29kZT4tZnBlZWwtbG9vcHM8L2NvZGU+LCA8Y29kZT4tZnRyYWNlcjwvY29kZT4sIDxjb2RlPi1mdHJlZS12ZWN0b3JpemU8L2NvZGU+LAorPGNvZGU+ZnRyZWUtbG9vcC1kaXN0cmlidXRlLXBhdHRlcm5zPC9jb2RlPgorCisgICAgIDxwPkJ5IGRlZmF1bHQsIEdDQyBlbWl0cyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBmZWVkYmFjayBwcm9maWxlcyBkbyBub3QKK21hdGNoIHRoZSBzb3VyY2UgY29kZS4gIFRoaXMgZXJyb3IgY2FuIGJlIHR1cm5lZCBpbnRvIGEgd2FybmluZyBieSB1c2luZworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdjb3ZlcmFnZS1taXNtYXRjaDwvc3Bhbj48L3NhbXA+LiAgTm90ZSB0aGlzIG1heSByZXN1bHQgaW4gcG9vcmx5IG9wdGltaXplZAorY29kZS4KKworICAgICA8cD5JZiA8dmFyPnBhdGg8L3Zhcj4gaXMgc3BlY2lmaWVkLCBHQ0MgbG9va3MgYXQgdGhlIDx2YXI+cGF0aDwvdmFyPiB0byBmaW5kCit0aGUgcHJvZmlsZSBmZWVkYmFjayBkYXRhIGZpbGVzLiBTZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWRpcjwvc3Bhbj48L3NhbXA+LiAKKzwvZGw+CisKKyA8cD5UaGUgZm9sbG93aW5nIG9wdGlvbnMgY29udHJvbCBjb21waWxlciBiZWhhdmlvciByZWdhcmRpbmcgZmxvYXRpbmctcG9pbnQKK2FyaXRobWV0aWMuICBUaGVzZSBvcHRpb25zIHRyYWRlIG9mZiBiZXR3ZWVuIHNwZWVkIGFuZAorY29ycmVjdG5lc3MuICBBbGwgbXVzdCBiZSBzcGVjaWZpY2FsbHkgZW5hYmxlZC4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZmbG9hdC1zdG9yZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmZsb2F0XzAwMmRzdG9yZS05MDAiPjwvYT5EbyBub3Qgc3RvcmUgZmxvYXRpbmctcG9pbnQgdmFyaWFibGVzIGluIHJlZ2lzdGVycywgYW5kIGluaGliaXQgb3RoZXIKK29wdGlvbnMgdGhhdCBtaWdodCBjaGFuZ2Ugd2hldGhlciBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGlzIHRha2VuIGZyb20gYQorcmVnaXN0ZXIgb3IgbWVtb3J5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nXzAwMmRwb2ludC1wcmVjaXNpb24tOTAxIj48L2E+VGhpcyBvcHRpb24gcHJldmVudHMgdW5kZXNpcmFibGUgZXhjZXNzIHByZWNpc2lvbiBvbiBtYWNoaW5lcyBzdWNoIGFzCit0aGUgNjgwMDAgd2hlcmUgdGhlIGZsb2F0aW5nIHJlZ2lzdGVycyAob2YgdGhlIDY4ODgxKSBrZWVwIG1vcmUKK3ByZWNpc2lvbiB0aGFuIGEgPGNvZGU+ZG91YmxlPC9jb2RlPiBpcyBzdXBwb3NlZCB0byBoYXZlLiAgU2ltaWxhcmx5IGZvciB0aGUKK3g4NiBhcmNoaXRlY3R1cmUuICBGb3IgbW9zdCBwcm9ncmFtcywgdGhlIGV4Y2VzcyBwcmVjaXNpb24gZG9lcyBvbmx5Citnb29kLCBidXQgYSBmZXcgcHJvZ3JhbXMgcmVseSBvbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIG9mIElFRUUgZmxvYXRpbmcKK3BvaW50LiAgVXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZmxvYXQtc3RvcmU8L3NwYW4+PC9zYW1wPiBmb3Igc3VjaCBwcm9ncmFtcywgYWZ0ZXIgbW9kaWZ5aW5nCit0aGVtIHRvIHN0b3JlIGFsbCBwZXJ0aW5lbnQgaW50ZXJtZWRpYXRlIGNvbXB1dGF0aW9ucyBpbnRvIHZhcmlhYmxlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZXhjZXNzLXByZWNpc2lvbj08L2NvZGU+PHZhcj5zdHlsZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mZXhjZXNzXzAwMmRwcmVjaXNpb24tOTAyIj48L2E+VGhpcyBvcHRpb24gYWxsb3dzIGZ1cnRoZXIgY29udHJvbCBvdmVyIGV4Y2VzcyBwcmVjaXNpb24gb24gbWFjaGluZXMKK3doZXJlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBoYXZlIG1vcmUgcHJlY2lzaW9uIHRoYW4gdGhlIElFRUUKKzxjb2RlPmZsb2F0PC9jb2RlPiBhbmQgPGNvZGU+ZG91YmxlPC9jb2RlPiB0eXBlcyBhbmQgdGhlIHByb2Nlc3NvciBkb2VzIG5vdAorc3VwcG9ydCBvcGVyYXRpb25zIHJvdW5kaW5nIHRvIHRob3NlIHR5cGVzLiAgQnkgZGVmYXVsdCwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZXhjZXNzLXByZWNpc2lvbj1mYXN0PC9zcGFuPjwvc2FtcD4gaXMgaW4gZWZmZWN0OyB0aGlzIG1lYW5zIHRoYXQKK29wZXJhdGlvbnMgYXJlIGNhcnJpZWQgb3V0IGluIHRoZSBwcmVjaXNpb24gb2YgdGhlIHJlZ2lzdGVycyBhbmQgdGhhdAoraXQgaXMgdW5wcmVkaWN0YWJsZSB3aGVuIHJvdW5kaW5nIHRvIHRoZSB0eXBlcyBzcGVjaWZpZWQgaW4gdGhlIHNvdXJjZQorY29kZSB0YWtlcyBwbGFjZS4gIFdoZW4gY29tcGlsaW5nIEMsIGlmCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmV4Y2Vzcy1wcmVjaXNpb249c3RhbmRhcmQ8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQgdGhlbiBleGNlc3MKK3ByZWNpc2lvbiBmb2xsb3dzIHRoZSBydWxlcyBzcGVjaWZpZWQgaW4gSVNPIEM5OTsgaW4gcGFydGljdWxhciwKK2JvdGggY2FzdHMgYW5kIGFzc2lnbm1lbnRzIGNhdXNlIHZhbHVlcyB0byBiZSByb3VuZGVkIHRvIHRoZWlyCitzZW1hbnRpYyB0eXBlcyAod2hlcmVhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZsb2F0LXN0b3JlPC9zcGFuPjwvc2FtcD4gb25seSBhZmZlY3RzCithc3NpZ25tZW50cykuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIEMgaWYgYSBzdHJpY3QKK2NvbmZvcm1hbmNlIG9wdGlvbiBzdWNoIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Yzk5PC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1tZnBtYXRoLTkwMyI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZXhjZXNzLXByZWNpc2lvbj1zdGFuZGFyZDwvc3Bhbj48L3NhbXA+IGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgbGFuZ3VhZ2VzCitvdGhlciB0aGFuIEMsIGFuZCBoYXMgbm8gZWZmZWN0IGlmCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnM8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZhc3QtbWF0aDwvc3Bhbj48L3NhbXA+IGlzCitzcGVjaWZpZWQuICBPbiB0aGUgeDg2LCBpdCBhbHNvIGhhcyBubyBlZmZlY3QgaWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mcG1hdGg9c3NlPC9zcGFuPjwvc2FtcD4KK29yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnBtYXRoPXNzZSszODc8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQ7IGluIHRoZSBmb3JtZXIgY2FzZSwgSUVFRQorc2VtYW50aWNzIGFwcGx5IHdpdGhvdXQgZXhjZXNzIHByZWNpc2lvbiwgYW5kIGluIHRoZSBsYXR0ZXIsIHJvdW5kaW5nCitpcyB1bnByZWRpY3RhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZmYXN0LW1hdGg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZmYXN0XzAwMmRtYXRoLTkwNCI+PC9hPlNldHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1tYXRoLWVycm5vPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9uczwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmaW5pdGUtbWF0aC1vbmx5PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tcm91bmRpbmctbWF0aDwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1zaWduYWxpbmctbmFuczwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmN4LWxpbWl0ZWQtcmFuZ2U8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UaGlzIG9wdGlvbiBjYXVzZXMgdGhlIHByZXByb2Nlc3NvciBtYWNybyA8Y29kZT5fX0ZBU1RfTUFUSF9fPC9jb2RlPiB0byBiZSBkZWZpbmVkLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIG5vdCB0dXJuZWQgb24gYnkgYW55IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGJlc2lkZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PZmFzdDwvc3Bhbj48L3NhbXA+IHNpbmNlIGl0IGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IG91dHB1dCBmb3IgcHJvZ3JhbXMKK3RoYXQgZGVwZW5kIG9uIGFuIGV4YWN0IGltcGxlbWVudGF0aW9uIG9mIElFRUUgb3IgSVNPIHJ1bGVzL3NwZWNpZmljYXRpb25zCitmb3IgbWF0aCBmdW5jdGlvbnMuIEl0IG1heSwgaG93ZXZlciwgeWllbGQgZmFzdGVyIGNvZGUgZm9yIHByb2dyYW1zCit0aGF0IGRvIG5vdCByZXF1aXJlIHRoZSBndWFyYW50ZWVzIG9mIHRoZXNlIHNwZWNpZmljYXRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1tYXRoLWVycm5vPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZG1hdGhfMDAyZGVycm5vLTkwNSI+PC9hPkRvIG5vdCBzZXQgPGNvZGU+ZXJybm88L2NvZGU+IGFmdGVyIGNhbGxpbmcgbWF0aCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhlY3V0ZWQKK3dpdGggYSBzaW5nbGUgaW5zdHJ1Y3Rpb24sIGUuZy4sIDxjb2RlPnNxcnQ8L2NvZGU+LiAgQSBwcm9ncmFtIHRoYXQgcmVsaWVzIG9uCitJRUVFIGV4Y2VwdGlvbnMgZm9yIG1hdGggZXJyb3IgaGFuZGxpbmcgbWF5IHdhbnQgdG8gdXNlIHRoaXMgZmxhZworZm9yIHNwZWVkIHdoaWxlIG1haW50YWluaW5nIElFRUUgYXJpdGhtZXRpYyBjb21wYXRpYmlsaXR5LgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIG5vdCB0dXJuZWQgb24gYnkgYW55IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHNpbmNlCitpdCBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBvdXRwdXQgZm9yIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uCithbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBJRUVFIG9yIElTTyBydWxlcy9zcGVjaWZpY2F0aW9ucyBmb3IKK21hdGggZnVuY3Rpb25zLiBJdCBtYXksIGhvd2V2ZXIsIHlpZWxkIGZhc3RlciBjb2RlIGZvciBwcm9ncmFtcwordGhhdCBkbyBub3QgcmVxdWlyZSB0aGUgZ3VhcmFudGVlcyBvZiB0aGVzZSBzcGVjaWZpY2F0aW9ucy4KKworICAgICA8cD5UaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm1hdGgtZXJybm88L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5PbiBEYXJ3aW4gc3lzdGVtcywgdGhlIG1hdGggbGlicmFyeSBuZXZlciBzZXRzIDxjb2RlPmVycm5vPC9jb2RlPi4gIFRoZXJlIGlzCit0aGVyZWZvcmUgbm8gcmVhc29uIGZvciB0aGUgY29tcGlsZXIgdG8gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQKK2l0IG1pZ2h0LCBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1tYXRoLWVycm5vPC9zcGFuPjwvc2FtcD4gaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ1bnNhZmVfMDAyZG1hdGhfMDAyZG9wdGltaXphdGlvbnMtOTA2Ij48L2E+CitBbGxvdyBvcHRpbWl6YXRpb25zIGZvciBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHRoYXQgKGEpIGFzc3VtZQordGhhdCBhcmd1bWVudHMgYW5kIHJlc3VsdHMgYXJlIHZhbGlkIGFuZCAoYikgbWF5IHZpb2xhdGUgSUVFRSBvcgorQU5TSSBzdGFuZGFyZHMuICBXaGVuIHVzZWQgYXQgbGluay10aW1lLCBpdCBtYXkgaW5jbHVkZSBsaWJyYXJpZXMKK29yIHN0YXJ0dXAgZmlsZXMgdGhhdCBjaGFuZ2UgdGhlIGRlZmF1bHQgRlBVIGNvbnRyb2wgd29yZCBvciBvdGhlcgorc2ltaWxhciBvcHRpbWl6YXRpb25zLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIG5vdCB0dXJuZWQgb24gYnkgYW55IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHNpbmNlCitpdCBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBvdXRwdXQgZm9yIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uCithbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBJRUVFIG9yIElTTyBydWxlcy9zcGVjaWZpY2F0aW9ucyBmb3IKK21hdGggZnVuY3Rpb25zLiBJdCBtYXksIGhvd2V2ZXIsIHlpZWxkIGZhc3RlciBjb2RlIGZvciBwcm9ncmFtcwordGhhdCBkbyBub3QgcmVxdWlyZSB0aGUgZ3VhcmFudGVlcyBvZiB0aGVzZSBzcGVjaWZpY2F0aW9ucy4gCitFbmFibGVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tc2lnbmVkLXplcm9zPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tdHJhcHBpbmctbWF0aDwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZhc3NvY2lhdGl2ZS1tYXRoPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcmVjaXByb2NhbC1tYXRoPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby11bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmFzc29jaWF0aXZlLW1hdGg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZhc3NvY2lhdGl2ZV8wMDJkbWF0aC05MDciPjwvYT4KK0FsbG93IHJlLWFzc29jaWF0aW9uIG9mIG9wZXJhbmRzIGluIHNlcmllcyBvZiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLiAKK1RoaXMgdmlvbGF0ZXMgdGhlIElTTyBDIGFuZCBDKysgbGFuZ3VhZ2Ugc3RhbmRhcmQgYnkgcG9zc2libHkgY2hhbmdpbmcKK2NvbXB1dGF0aW9uIHJlc3VsdC4gIE5PVEU6IHJlLW9yZGVyaW5nIG1heSBjaGFuZ2UgdGhlIHNpZ24gb2YgemVybyBhcword2VsbCBhcyBpZ25vcmUgTmFOcyBhbmQgaW5oaWJpdCBvciBjcmVhdGUgdW5kZXJmbG93IG9yIG92ZXJmbG93IChhbmQKK3RodXMgY2Fubm90IGJlIHVzZWQgb24gY29kZSB0aGF0IHJlbGllcyBvbiByb3VuZGluZyBiZWhhdmlvciBsaWtlCis8Y29kZT4oeCArIDIqKjUyKSAtIDIqKjUyPC9jb2RlPi4gIE1heSBhbHNvIHJlb3JkZXIgZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbnMKK2FuZCB0aHVzIG1heSBub3QgYmUgdXNlZCB3aGVuIG9yZGVyZWQgY29tcGFyaXNvbnMgYXJlIHJlcXVpcmVkLiAKK1RoaXMgb3B0aW9uIHJlcXVpcmVzIHRoYXQgYm90aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXNpZ25lZC16ZXJvczwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby10cmFwcGluZy1tYXRoPC9zcGFuPjwvc2FtcD4gYmUgaW4gZWZmZWN0LiAgTW9yZW92ZXIsIGl0IGRvZXNuJ3QgbWFrZQorbXVjaCBzZW5zZSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcm91bmRpbmctbWF0aDwvc3Bhbj48L3NhbXA+LiBGb3IgRm9ydHJhbiB0aGUgb3B0aW9uCitpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBib3RoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tc2lnbmVkLXplcm9zPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXRyYXBwaW5nLW1hdGg8L3NwYW4+PC9zYW1wPiBhcmUgaW4gZWZmZWN0LgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYXNzb2NpYXRpdmUtbWF0aDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZyZWNpcHJvY2FsLW1hdGg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZyZWNpcHJvY2FsXzAwMmRtYXRoLTkwOCI+PC9hPgorQWxsb3cgdGhlIHJlY2lwcm9jYWwgb2YgYSB2YWx1ZSB0byBiZSB1c2VkIGluc3RlYWQgb2YgZGl2aWRpbmcgYnkKK3RoZSB2YWx1ZSBpZiB0aGlzIGVuYWJsZXMgb3B0aW1pemF0aW9ucy4gIEZvciBleGFtcGxlIDxjb2RlPnggLyB5PC9jb2RlPgorY2FuIGJlIHJlcGxhY2VkIHdpdGggPGNvZGU+eCAqICgxL3kpPC9jb2RlPiwgd2hpY2ggaXMgdXNlZnVsIGlmIDxjb2RlPigxL3kpPC9jb2RlPgoraXMgc3ViamVjdCB0byBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbi4gIE5vdGUgdGhhdCB0aGlzIGxvc2VzCitwcmVjaXNpb24gYW5kIGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGZsb3BzIG9wZXJhdGluZyBvbiB0aGUgdmFsdWUuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1yZWNpcHJvY2FsLW1hdGg8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZmluaXRlLW1hdGgtb25seTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmZpbml0ZV8wMDJkbWF0aF8wMDJkb25seS05MDkiPjwvYT5BbGxvdyBvcHRpbWl6YXRpb25zIGZvciBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHRoYXQgYXNzdW1lCit0aGF0IGFyZ3VtZW50cyBhbmQgcmVzdWx0cyBhcmUgbm90IE5hTnMgb3IgKy1JbmZzLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIG5vdCB0dXJuZWQgb24gYnkgYW55IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHNpbmNlCitpdCBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBvdXRwdXQgZm9yIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uCithbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBJRUVFIG9yIElTTyBydWxlcy9zcGVjaWZpY2F0aW9ucyBmb3IKK21hdGggZnVuY3Rpb25zLiBJdCBtYXksIGhvd2V2ZXIsIHlpZWxkIGZhc3RlciBjb2RlIGZvciBwcm9ncmFtcwordGhhdCBkbyBub3QgcmVxdWlyZSB0aGUgZ3VhcmFudGVlcyBvZiB0aGVzZSBzcGVjaWZpY2F0aW9ucy4KKworICAgICA8cD5UaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWZpbml0ZS1tYXRoLW9ubHk8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tc2lnbmVkLXplcm9zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZHNpZ25lZF8wMDJkemVyb3MtOTEwIj48L2E+QWxsb3cgb3B0aW1pemF0aW9ucyBmb3IgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB0aGF0IGlnbm9yZSB0aGUKK3NpZ25lZG5lc3Mgb2YgemVyby4gIElFRUUgYXJpdGhtZXRpYyBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yIG9mCitkaXN0aW5jdCArMC4wIGFuZCAmbWludXM7MC4wIHZhbHVlcywgd2hpY2ggdGhlbiBwcm9oaWJpdHMgc2ltcGxpZmljYXRpb24KK29mIGV4cHJlc3Npb25zIHN1Y2ggYXMgeCswLjAgb3IgMC4wKnggKGV2ZW4gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZpbml0ZS1tYXRoLW9ubHk8L3NwYW4+PC9zYW1wPikuIAorVGhpcyBvcHRpb24gaW1wbGllcyB0aGF0IHRoZSBzaWduIG9mIGEgemVybyByZXN1bHQgaXNuJ3Qgc2lnbmlmaWNhbnQuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzaWduZWQtemVyb3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tdHJhcHBpbmctbWF0aDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmR0cmFwcGluZ18wMDJkbWF0aC05MTEiPjwvYT5Db21waWxlIGNvZGUgYXNzdW1pbmcgdGhhdCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGNhbm5vdCBnZW5lcmF0ZQordXNlci12aXNpYmxlIHRyYXBzLiAgVGhlc2UgdHJhcHMgaW5jbHVkZSBkaXZpc2lvbiBieSB6ZXJvLCBvdmVyZmxvdywKK3VuZGVyZmxvdywgaW5leGFjdCByZXN1bHQgYW5kIGludmFsaWQgb3BlcmF0aW9uLiAgVGhpcyBvcHRpb24gcmVxdWlyZXMKK3RoYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1zaWduYWxpbmctbmFuczwvc3Bhbj48L3NhbXA+IGJlIGluIGVmZmVjdC4gIFNldHRpbmcgdGhpcyBvcHRpb24gbWF5CithbGxvdyBmYXN0ZXIgY29kZSBpZiBvbmUgcmVsaWVzIG9uICZsZHF1bztub24tc3RvcCZyZHF1bzsgSUVFRSBhcml0aG1ldGljLCBmb3IgZXhhbXBsZS4KKworICAgICA8cD5UaGlzIG9wdGlvbiBzaG91bGQgbmV2ZXIgYmUgdHVybmVkIG9uIGJ5IGFueSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBzaW5jZQoraXQgY2FuIHJlc3VsdCBpbiBpbmNvcnJlY3Qgb3V0cHV0IGZvciBwcm9ncmFtcyB0aGF0IGRlcGVuZCBvbgorYW4gZXhhY3QgaW1wbGVtZW50YXRpb24gb2YgSUVFRSBvciBJU08gcnVsZXMvc3BlY2lmaWNhdGlvbnMgZm9yCittYXRoIGZ1bmN0aW9ucy4KKworICAgICA8cD5UaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnRyYXBwaW5nLW1hdGg8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcm91bmRpbmctbWF0aDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnJvdW5kaW5nXzAwMmRtYXRoLTkxMiI+PC9hPkRpc2FibGUgdHJhbnNmb3JtYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zIHRoYXQgYXNzdW1lIGRlZmF1bHQgZmxvYXRpbmctcG9pbnQKK3JvdW5kaW5nIGJlaGF2aW9yLiAgVGhpcyBpcyByb3VuZC10by16ZXJvIGZvciBhbGwgZmxvYXRpbmcgcG9pbnQKK3RvIGludGVnZXIgY29udmVyc2lvbnMsIGFuZCByb3VuZC10by1uZWFyZXN0IGZvciBhbGwgb3RoZXIgYXJpdGhtZXRpYwordHJ1bmNhdGlvbnMuICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkIGZvciBwcm9ncmFtcyB0aGF0IGNoYW5nZQordGhlIEZQIHJvdW5kaW5nIG1vZGUgZHluYW1pY2FsbHksIG9yIHRoYXQgbWF5IGJlIGV4ZWN1dGVkIHdpdGggYQorbm9uLWRlZmF1bHQgcm91bmRpbmcgbW9kZS4gIFRoaXMgb3B0aW9uIGRpc2FibGVzIGNvbnN0YW50IGZvbGRpbmcgb2YKK2Zsb2F0aW5nLXBvaW50IGV4cHJlc3Npb25zIGF0IGNvbXBpbGUgdGltZSAod2hpY2ggbWF5IGJlIGFmZmVjdGVkIGJ5Cityb3VuZGluZyBtb2RlKSBhbmQgYXJpdGhtZXRpYyB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBhcmUgdW5zYWZlIGluIHRoZQorcHJlc2VuY2Ugb2Ygc2lnbi1kZXBlbmRlbnQgcm91bmRpbmcgbW9kZXMuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1yb3VuZGluZy1tYXRoPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhpcyBvcHRpb24gaXMgZXhwZXJpbWVudGFsIGFuZCBkb2VzIG5vdCBjdXJyZW50bHkgZ3VhcmFudGVlIHRvCitkaXNhYmxlIGFsbCBHQ0Mgb3B0aW1pemF0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBieSByb3VuZGluZyBtb2RlLiAKK0Z1dHVyZSB2ZXJzaW9ucyBvZiBHQ0MgbWF5IHByb3ZpZGUgZmluZXIgY29udHJvbCBvZiB0aGlzIHNldHRpbmcKK3VzaW5nIEM5OSdzIDxjb2RlPkZFTlZfQUNDRVNTPC9jb2RlPiBwcmFnbWEuICBUaGlzIGNvbW1hbmQtbGluZSBvcHRpb24KK3dpbGwgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0IHN0YXRlIGZvciA8Y29kZT5GRU5WX0FDQ0VTUzwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnNpZ25hbGluZy1uYW5zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2lnbmFsaW5nXzAwMmRuYW5zLTkxMyI+PC9hPkNvbXBpbGUgY29kZSBhc3N1bWluZyB0aGF0IElFRUUgc2lnbmFsaW5nIE5hTnMgbWF5IGdlbmVyYXRlIHVzZXItdmlzaWJsZQordHJhcHMgZHVyaW5nIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuICBTZXR0aW5nIHRoaXMgb3B0aW9uIGRpc2FibGVzCitvcHRpbWl6YXRpb25zIHRoYXQgbWF5IGNoYW5nZSB0aGUgbnVtYmVyIG9mIGV4Y2VwdGlvbnMgdmlzaWJsZSB3aXRoCitzaWduYWxpbmcgTmFOcy4gIFRoaXMgb3B0aW9uIGltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ0cmFwcGluZy1tYXRoPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhpcyBvcHRpb24gY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gPGNvZGU+X19TVVBQT1JUX1NOQU5fXzwvY29kZT4gdG8KK2JlIGRlZmluZWQuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1zaWduYWxpbmctbmFuczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGV4cGVyaW1lbnRhbCBhbmQgZG9lcyBub3QgY3VycmVudGx5IGd1YXJhbnRlZSB0bworZGlzYWJsZSBhbGwgR0NDIG9wdGltaXphdGlvbnMgdGhhdCBhZmZlY3Qgc2lnbmFsaW5nIE5hTiBiZWhhdmlvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2luZ2xlLXByZWNpc2lvbi1jb25zdGFudDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnNpbmdsZV8wMDJkcHJlY2lzaW9uXzAwMmRjb25zdGFudC05MTQiPjwvYT5UcmVhdCBmbG9hdGluZy1wb2ludCBjb25zdGFudHMgYXMgc2luZ2xlIHByZWNpc2lvbiBpbnN0ZWFkIG9mCitpbXBsaWNpdGx5IGNvbnZlcnRpbmcgdGhlbSB0byBkb3VibGUtcHJlY2lzaW9uIGNvbnN0YW50cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mY3gtbGltaXRlZC1yYW5nZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmN4XzAwMmRsaW1pdGVkXzAwMmRyYW5nZS05MTUiPjwvYT5XaGVuIGVuYWJsZWQsIHRoaXMgb3B0aW9uIHN0YXRlcyB0aGF0IGEgcmFuZ2UgcmVkdWN0aW9uIHN0ZXAgaXMgbm90CituZWVkZWQgd2hlbiBwZXJmb3JtaW5nIGNvbXBsZXggZGl2aXNpb24uICBBbHNvLCB0aGVyZSBpcyBubyBjaGVja2luZword2hldGhlciB0aGUgcmVzdWx0IG9mIGEgY29tcGxleCBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiBpcyA8Y29kZT5OYU4KKysgSSpOYU48L2NvZGU+LCB3aXRoIGFuIGF0dGVtcHQgdG8gcmVzY3VlIHRoZSBzaXR1YXRpb24gaW4gdGhhdCBjYXNlLiAgVGhlCitkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tY3gtbGltaXRlZC1yYW5nZTwvc3Bhbj48L3NhbXA+LCBidXQgaXMgZW5hYmxlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmYXN0LW1hdGg8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UaGlzIG9wdGlvbiBjb250cm9scyB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBJU08gQzk5Cis8Y29kZT5DWF9MSU1JVEVEX1JBTkdFPC9jb2RlPiBwcmFnbWEuICBOZXZlcnRoZWxlc3MsIHRoZSBvcHRpb24gYXBwbGllcyB0bworYWxsIGxhbmd1YWdlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mY3gtZm9ydHJhbi1ydWxlczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmN4XzAwMmRmb3J0cmFuXzAwMmRydWxlcy05MTYiPjwvYT5Db21wbGV4IG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBmb2xsb3cgRm9ydHJhbiBydWxlcy4gIFJhbmdlCityZWR1Y3Rpb24gaXMgZG9uZSBhcyBwYXJ0IG9mIGNvbXBsZXggZGl2aXNpb24sIGJ1dCB0aGVyZSBpcyBubyBjaGVja2luZword2hldGhlciB0aGUgcmVzdWx0IG9mIGEgY29tcGxleCBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiBpcyA8Y29kZT5OYU4KKysgSSpOYU48L2NvZGU+LCB3aXRoIGFuIGF0dGVtcHQgdG8gcmVzY3VlIHRoZSBzaXR1YXRpb24gaW4gdGhhdCBjYXNlLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tY3gtZm9ydHJhbi1ydWxlczwvc3Bhbj48L3NhbXA+LgorCisgPC9kbD4KKworIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBjb250cm9sIG9wdGltaXphdGlvbnMgdGhhdCBtYXkgaW1wcm92ZQorcGVyZm9ybWFuY2UsIGJ1dCBhcmUgbm90IGVuYWJsZWQgYnkgYW55IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4gIFRoaXMKK3NlY3Rpb24gaW5jbHVkZXMgZXhwZXJpbWVudGFsIG9wdGlvbnMgdGhhdCBtYXkgcHJvZHVjZSBicm9rZW4gY29kZS4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZicmFuY2gtcHJvYmFiaWxpdGllczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmJyYW5jaF8wMDJkcHJvYmFiaWxpdGllcy05MTciPjwvYT5BZnRlciBydW5uaW5nIGEgcHJvZ3JhbSBjb21waWxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJvZmlsZS1hcmNzPC9zcGFuPjwvc2FtcD4KKyhzZWUgPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+T3B0aW9ucyBmb3IgRGVidWdnaW5nIFlvdXIgUHJvZ3JhbSBvciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD48L2E+KSwgeW91IGNhbiBjb21waWxlIGl0IGEgc2Vjb25kIHRpbWUgdXNpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYnJhbmNoLXByb2JhYmlsaXRpZXM8L3NwYW4+PC9zYW1wPiwgdG8gaW1wcm92ZSBvcHRpbWl6YXRpb25zIGJhc2VkIG9uCit0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggYnJhbmNoIHdhcyB0YWtlbi4gIFdoZW4gYSBwcm9ncmFtCitjb21waWxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJvZmlsZS1hcmNzPC9zcGFuPjwvc2FtcD4gZXhpdHMsIGl0IHNhdmVzIGFyYyBleGVjdXRpb24KK2NvdW50cyB0byBhIGZpbGUgY2FsbGVkIDxzYW1wPjx2YXI+c291cmNlbmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uZ2NkYTwvc3Bhbj48L3NhbXA+IGZvciBlYWNoIHNvdXJjZQorZmlsZS4gIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGRhdGEgZmlsZSBpcyB2ZXJ5IGRlcGVuZGVudCBvbiB0aGUKK3N0cnVjdHVyZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsIHNvIHlvdSBtdXN0IHVzZSB0aGUgc2FtZSBzb3VyY2UgY29kZQorYW5kIHRoZSBzYW1lIG9wdGltaXphdGlvbiBvcHRpb25zIGZvciBib3RoIGNvbXBpbGF0aW9ucy4KKworICAgICA8cD5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYnJhbmNoLXByb2JhYmlsaXRpZXM8L3NwYW4+PC9zYW1wPiwgR0NDIHB1dHMgYQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5SRUdfQlJfUFJPQjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBub3RlIG9uIGVhY2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5KVU1QX0lOU048L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Q0FMTF9JTlNOPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1RoZXNlIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgb3B0aW1pemF0aW9uLiAgQ3VycmVudGx5LCB0aGV5IGFyZSBvbmx5Cit1c2VkIGluIG9uZSBwbGFjZTogaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnJlb3JnLmM8L3NwYW4+PC9zYW1wPiwgaW5zdGVhZCBvZiBndWVzc2luZyB3aGljaCBwYXRoIGEKK2JyYW5jaCBpcyBtb3N0IGxpa2VseSB0byB0YWtlLCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5SRUdfQlJfUFJPQjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB2YWx1ZXMgYXJlIHVzZWQgdG8KK2V4YWN0bHkgZGV0ZXJtaW5lIHdoaWNoIHBhdGggaXMgdGFrZW4gbW9yZSBvZnRlbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcHJvZmlsZS12YWx1ZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZwcm9maWxlXzAwMmR2YWx1ZXMtOTE4Ij48L2E+SWYgY29tYmluZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+LCBpdCBhZGRzIGNvZGUgc28gdGhhdCBzb21lCitkYXRhIGFib3V0IHZhbHVlcyBvZiBleHByZXNzaW9ucyBpbiB0aGUgcHJvZ3JhbSBpcyBnYXRoZXJlZC4KKworICAgICA8cD5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYnJhbmNoLXByb2JhYmlsaXRpZXM8L3NwYW4+PC9zYW1wPiwgaXQgcmVhZHMgYmFjayB0aGUgZGF0YSBnYXRoZXJlZAorZnJvbSBwcm9maWxpbmcgdmFsdWVzIG9mIGV4cHJlc3Npb25zIGZvciB1c2FnZSBpbiBvcHRpbWl6YXRpb25zLgorCisgICAgIDxwPkVuYWJsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtZ2VuZXJhdGU8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLXVzZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ2cHQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ2cHQtOTE5Ij48L2E+SWYgY29tYmluZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtYXJjczwvc3Bhbj48L3NhbXA+LCB0aGlzIG9wdGlvbiBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyCit0byBhZGQgY29kZSB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdmFsdWVzIG9mIGV4cHJlc3Npb25zLgorCisgICAgIDxwPldpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZicmFuY2gtcHJvYmFiaWxpdGllczwvc3Bhbj48L3NhbXA+LCBpdCByZWFkcyBiYWNrIHRoZSBkYXRhIGdhdGhlcmVkCithbmQgYWN0dWFsbHkgcGVyZm9ybXMgdGhlIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlbS4gCitDdXJyZW50bHkgdGhlIG9wdGltaXphdGlvbnMgaW5jbHVkZSBzcGVjaWFsaXphdGlvbiBvZiBkaXZpc2lvbiBvcGVyYXRpb25zCit1c2luZyB0aGUga25vd2xlZGdlIGFib3V0IHRoZSB2YWx1ZSBvZiB0aGUgZGVub21pbmF0b3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlbmFtZS1yZWdpc3RlcnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZyZW5hbWVfMDAyZHJlZ2lzdGVycy05MjAiPjwvYT5BdHRlbXB0IHRvIGF2b2lkIGZhbHNlIGRlcGVuZGVuY2llcyBpbiBzY2hlZHVsZWQgY29kZSBieSBtYWtpbmcgdXNlCitvZiByZWdpc3RlcnMgbGVmdCBvdmVyIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uICBUaGlzIG9wdGltaXphdGlvbgorbW9zdCBiZW5lZml0cyBwcm9jZXNzb3JzIHdpdGggbG90cyBvZiByZWdpc3RlcnMuICBEZXBlbmRpbmcgb24gdGhlCitkZWJ1ZyBpbmZvcm1hdGlvbiBmb3JtYXQgYWRvcHRlZCBieSB0aGUgdGFyZ2V0LCBob3dldmVyLCBpdCBjYW4KK21ha2UgZGVidWdnaW5nIGltcG9zc2libGUsIHNpbmNlIHZhcmlhYmxlcyBubyBsb25nZXIgc3RheSBpbgorYSAmbGRxdW87aG9tZSByZWdpc3RlciZyZHF1bzsuCisKKyAgICAgPHA+RW5hYmxlZCBieSBkZWZhdWx0IHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnJvbGwtbG9vcHM8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwZWVsLWxvb3BzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnRyYWNlcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnRyYWNlci05MjEiPjwvYT5QZXJmb3JtIHRhaWwgZHVwbGljYXRpb24gdG8gZW5sYXJnZSBzdXBlcmJsb2NrIHNpemUuICBUaGlzIHRyYW5zZm9ybWF0aW9uCitzaW1wbGlmaWVzIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlIGZ1bmN0aW9uIGFsbG93aW5nIG90aGVyIG9wdGltaXphdGlvbnMgdG8gZG8KK2EgYmV0dGVyIGpvYi4KKworICAgICA8cD5FbmFibGVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLXVzZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ1bnJvbGwtbG9vcHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZ1bnJvbGxfMDAyZGxvb3BzLTkyMiI+PC9hPlVucm9sbCBsb29wcyB3aG9zZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBjYW4gYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUgb3IKK3Vwb24gZW50cnkgdG8gdGhlIGxvb3AuICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVucm9sbC1sb29wczwvc3Bhbj48L3NhbXA+IGltcGxpZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcmVydW4tY3NlLWFmdGVyLWxvb3A8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ3ZWI8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZW5hbWUtcmVnaXN0ZXJzPC9zcGFuPjwvc2FtcD4uIAorSXQgYWxzbyB0dXJucyBvbiBjb21wbGV0ZSBsb29wIHBlZWxpbmcgKGkuZS4gY29tcGxldGUgcmVtb3ZhbCBvZiBsb29wcyB3aXRoCithIHNtYWxsIGNvbnN0YW50IG51bWJlciBvZiBpdGVyYXRpb25zKS4gIFRoaXMgb3B0aW9uIG1ha2VzIGNvZGUgbGFyZ2VyLCBhbmQgbWF5CitvciBtYXkgbm90IG1ha2UgaXQgcnVuIGZhc3Rlci4KKworICAgICA8cD5FbmFibGVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLXVzZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ1bnJvbGwtYWxsLWxvb3BzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mdW5yb2xsXzAwMmRhbGxfMDAyZGxvb3BzLTkyMyI+PC9hPlVucm9sbCBhbGwgbG9vcHMsIGV2ZW4gaWYgdGhlaXIgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgdW5jZXJ0YWluIHdoZW4KK3RoZSBsb29wIGlzIGVudGVyZWQuICBUaGlzIHVzdWFsbHkgbWFrZXMgcHJvZ3JhbXMgcnVuIG1vcmUgc2xvd2x5LiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5yb2xsLWFsbC1sb29wczwvc3Bhbj48L3NhbXA+IGltcGxpZXMgdGhlIHNhbWUgb3B0aW9ucyBhcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnJvbGwtbG9vcHM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcGVlbC1sb29wczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnBlZWxfMDAyZGxvb3BzLTkyNCI+PC9hPlBlZWxzIGxvb3BzIGZvciB3aGljaCB0aGVyZSBpcyBlbm91Z2ggaW5mb3JtYXRpb24gdGhhdCB0aGV5IGRvIG5vdAorcm9sbCBtdWNoIChmcm9tIHByb2ZpbGUgZmVlZGJhY2spLiAgSXQgYWxzbyB0dXJucyBvbiBjb21wbGV0ZSBsb29wIHBlZWxpbmcKKyhpLmUuIGNvbXBsZXRlIHJlbW92YWwgb2YgbG9vcHMgd2l0aCBzbWFsbCBjb25zdGFudCBudW1iZXIgb2YgaXRlcmF0aW9ucykuCisKKyAgICAgPHA+RW5hYmxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJvZmlsZS11c2U8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbW92ZS1sb29wLWludmFyaWFudHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZtb3ZlXzAwMmRsb29wXzAwMmRpbnZhcmlhbnRzLTkyNSI+PC9hPkVuYWJsZXMgdGhlIGxvb3AgaW52YXJpYW50IG1vdGlvbiBwYXNzIGluIHRoZSBSVEwgbG9vcCBvcHRpbWl6ZXIuICBFbmFibGVkCithdCBsZXZlbCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzE8L3NwYW4+PC9zYW1wPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ1bnN3aXRjaC1sb29wczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnVuc3dpdGNoXzAwMmRsb29wcy05MjYiPjwvYT5Nb3ZlIGJyYW5jaGVzIHdpdGggbG9vcCBpbnZhcmlhbnQgY29uZGl0aW9ucyBvdXQgb2YgdGhlIGxvb3AsIHdpdGggZHVwbGljYXRlcworb2YgdGhlIGxvb3Agb24gYm90aCBicmFuY2hlcyAobW9kaWZpZWQgYWNjb3JkaW5nIHRvIHJlc3VsdCBvZiB0aGUgY29uZGl0aW9uKS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZnVuY3Rpb24tc2VjdGlvbnM8L2NvZGU+PGR0Pjxjb2RlPi1mZGF0YS1zZWN0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmZ1bmN0aW9uXzAwMmRzZWN0aW9ucy05MjciPjwvYT48YSBuYW1lPSJpbmRleC1mZGF0YV8wMDJkc2VjdGlvbnMtOTI4Ij48L2E+UGxhY2UgZWFjaCBmdW5jdGlvbiBvciBkYXRhIGl0ZW0gaW50byBpdHMgb3duIHNlY3Rpb24gaW4gdGhlIG91dHB1dAorZmlsZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGFyYml0cmFyeSBzZWN0aW9ucy4gIFRoZSBuYW1lIG9mIHRoZQorZnVuY3Rpb24gb3IgdGhlIG5hbWUgb2YgdGhlIGRhdGEgaXRlbSBkZXRlcm1pbmVzIHRoZSBzZWN0aW9uJ3MgbmFtZQoraW4gdGhlIG91dHB1dCBmaWxlLgorCisgICAgIDxwPlVzZSB0aGVzZSBvcHRpb25zIG9uIHN5c3RlbXMgd2hlcmUgdGhlIGxpbmtlciBjYW4gcGVyZm9ybSBvcHRpbWl6YXRpb25zCit0byBpbXByb3ZlIGxvY2FsaXR5IG9mIHJlZmVyZW5jZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3BhY2UuICBNb3N0IHN5c3RlbXMKK3VzaW5nIHRoZSBFTEYgb2JqZWN0IGZvcm1hdCBhbmQgU1BBUkMgcHJvY2Vzc29ycyBydW5uaW5nIFNvbGFyaXMgMiBoYXZlCitsaW5rZXJzIHdpdGggc3VjaCBvcHRpbWl6YXRpb25zLiAgQUlYIG1heSBoYXZlIHRoZXNlIG9wdGltaXphdGlvbnMgaW4KK3RoZSBmdXR1cmUuCisKKyAgICAgPHA+T25seSB1c2UgdGhlc2Ugb3B0aW9ucyB3aGVuIHRoZXJlIGFyZSBzaWduaWZpY2FudCBiZW5lZml0cyBmcm9tIGRvaW5nCitzby4gIFdoZW4geW91IHNwZWNpZnkgdGhlc2Ugb3B0aW9ucywgdGhlIGFzc2VtYmxlciBhbmQgbGlua2VyCitjcmVhdGUgbGFyZ2VyIG9iamVjdCBhbmQgZXhlY3V0YWJsZSBmaWxlcyBhbmQgYXJlIGFsc28gc2xvd2VyLiAKK1lvdSBjYW5ub3QgdXNlIDxjb2RlPmdwcm9mPC9jb2RlPiBvbiBhbGwgc3lzdGVtcyBpZiB5b3UKK3NwZWNpZnkgdGhpcyBvcHRpb24sIGFuZCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMgd2l0aCBkZWJ1Z2dpbmcgaWYKK3lvdSBzcGVjaWZ5IGJvdGggdGhpcyBvcHRpb24gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmJyYW5jaC10YXJnZXQtbG9hZC1vcHRpbWl6ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmJyYW5jaF8wMDJkdGFyZ2V0XzAwMmRsb2FkXzAwMmRvcHRpbWl6ZS05MjkiPjwvYT5QZXJmb3JtIGJyYW5jaCB0YXJnZXQgcmVnaXN0ZXIgbG9hZCBvcHRpbWl6YXRpb24gYmVmb3JlIHByb2xvZ3VlIC8gZXBpbG9ndWUKK3RocmVhZGluZy4gCitUaGUgdXNlIG9mIHRhcmdldCByZWdpc3RlcnMgY2FuIHR5cGljYWxseSBiZSBleHBvc2VkIG9ubHkgZHVyaW5nIHJlbG9hZCwKK3RodXMgaG9pc3RpbmcgbG9hZHMgb3V0IG9mIGxvb3BzIGFuZCBkb2luZyBpbnRlci1ibG9jayBzY2hlZHVsaW5nIG5lZWRzCithIHNlcGFyYXRlIG9wdGltaXphdGlvbiBwYXNzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZicmFuY2gtdGFyZ2V0LWxvYWQtb3B0aW1pemUyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mYnJhbmNoXzAwMmR0YXJnZXRfMDAyZGxvYWRfMDAyZG9wdGltaXplMi05MzAiPjwvYT5QZXJmb3JtIGJyYW5jaCB0YXJnZXQgcmVnaXN0ZXIgbG9hZCBvcHRpbWl6YXRpb24gYWZ0ZXIgcHJvbG9ndWUgLyBlcGlsb2d1ZQordGhyZWFkaW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZidHItYmItZXhjbHVzaXZlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mYnRyXzAwMmRiYl8wMDJkZXhjbHVzaXZlLTkzMSI+PC9hPldoZW4gcGVyZm9ybWluZyBicmFuY2ggdGFyZ2V0IHJlZ2lzdGVyIGxvYWQgb3B0aW1pemF0aW9uLCBkb24ndCByZXVzZQorYnJhbmNoIHRhcmdldCByZWdpc3RlcnMgd2l0aGluIGFueSBiYXNpYyBibG9jay4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc3RhY2stcHJvdGVjdG9yPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc3RhY2tfMDAyZHByb3RlY3Rvci05MzIiPjwvYT5FbWl0IGV4dHJhIGNvZGUgdG8gY2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvd3MsIHN1Y2ggYXMgc3RhY2sgc21hc2hpbmcKK2F0dGFja3MuICBUaGlzIGlzIGRvbmUgYnkgYWRkaW5nIGEgZ3VhcmQgdmFyaWFibGUgdG8gZnVuY3Rpb25zIHdpdGgKK3Z1bG5lcmFibGUgb2JqZWN0cy4gIFRoaXMgaW5jbHVkZXMgZnVuY3Rpb25zIHRoYXQgY2FsbCA8Y29kZT5hbGxvY2E8L2NvZGU+LCBhbmQKK2Z1bmN0aW9ucyB3aXRoIGJ1ZmZlcnMgbGFyZ2VyIHRoYW4gOCBieXRlcy4gIFRoZSBndWFyZHMgYXJlIGluaXRpYWxpemVkCit3aGVuIGEgZnVuY3Rpb24gaXMgZW50ZXJlZCBhbmQgdGhlbiBjaGVja2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGV4aXRzLiAKK0lmIGEgZ3VhcmQgY2hlY2sgZmFpbHMsIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCBhbmQgdGhlIHByb2dyYW0gZXhpdHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnN0YWNrLXByb3RlY3Rvci1hbGw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZzdGFja18wMDJkcHJvdGVjdG9yXzAwMmRhbGwtOTMzIj48L2E+TGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0YWNrLXByb3RlY3Rvcjwvc3Bhbj48L3NhbXA+IGV4Y2VwdCB0aGF0IGFsbCBmdW5jdGlvbnMgYXJlIHByb3RlY3RlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2VjdGlvbi1hbmNob3JzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mc2VjdGlvbl8wMDJkYW5jaG9ycy05MzQiPjwvYT5UcnkgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc3ltYm9saWMgYWRkcmVzcyBjYWxjdWxhdGlvbnMgYnkgdXNpbmcKK3NoYXJlZCAmbGRxdW87YW5jaG9yJnJkcXVvOyBzeW1ib2xzIHRvIGFkZHJlc3MgbmVhcmJ5IG9iamVjdHMuICBUaGlzIHRyYW5zZm9ybWF0aW9uCitjYW4gaGVscCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBHT1QgZW50cmllcyBhbmQgR09UIGFjY2Vzc2VzIG9uIHNvbWUKK3RhcmdldHMuCisKKyAgICAgPHA+Rm9yIGV4YW1wbGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIDxjb2RlPmZvbzwvY29kZT46CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RhdGljIGludCBhLCBiLCBjOworICAgICAgICAgIGludCBmb28gKHZvaWQpIHsgcmV0dXJuIGEgKyBiICsgYzsgfQorPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+dXN1YWxseSBjYWxjdWxhdGVzIHRoZSBhZGRyZXNzZXMgb2YgYWxsIHRocmVlIHZhcmlhYmxlcywgYnV0IGlmIHlvdQorY29tcGlsZSBpdCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2VjdGlvbi1hbmNob3JzPC9zcGFuPjwvc2FtcD4sIGl0IGFjY2Vzc2VzIHRoZSB2YXJpYWJsZXMKK2Zyb20gYSBjb21tb24gYW5jaG9yIHBvaW50IGluc3RlYWQuICBUaGUgZWZmZWN0IGlzIHNpbWlsYXIgdG8gdGhlCitmb2xsb3dpbmcgcHNldWRvY29kZSAod2hpY2ggaXNuJ3QgdmFsaWQgQyk6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IGZvbyAodm9pZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZWdpc3RlciBpbnQgKnhyID0gJmFtcDt4OworICAgICAgICAgICAgcmV0dXJuIHhyWyZhbXA7YSAtICZhbXA7eF0gKyB4clsmYW1wO2IgLSAmYW1wO3hdICsgeHJbJmFtcDtjIC0gJmFtcDt4XTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHA+Tm90IGFsbCB0YXJnZXRzIHN1cHBvcnQgdGhpcyBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLXBhcmFtIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtcGFyYW0tOTM1Ij48L2E+SW4gc29tZSBwbGFjZXMsIEdDQyB1c2VzIHZhcmlvdXMgY29uc3RhbnRzIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZgorb3B0aW1pemF0aW9uIHRoYXQgaXMgZG9uZS4gIEZvciBleGFtcGxlLCBHQ0MgZG9lcyBub3QgaW5saW5lIGZ1bmN0aW9ucwordGhhdCBjb250YWluIG1vcmUgdGhhbiBhIGNlcnRhaW4gbnVtYmVyIG9mIGluc3RydWN0aW9ucy4gIFlvdSBjYW4KK2NvbnRyb2wgc29tZSBvZiB0aGVzZSBjb25zdGFudHMgb24gdGhlIGNvbW1hbmQgbGluZSB1c2luZyB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGFyYW08L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgPHA+VGhlIG5hbWVzIG9mIHNwZWNpZmljIHBhcmFtZXRlcnMsIGFuZCB0aGUgbWVhbmluZyBvZiB0aGUgdmFsdWVzLCBhcmUKK3RpZWQgdG8gdGhlIGludGVybmFscyBvZiB0aGUgY29tcGlsZXIsIGFuZCBhcmUgc3ViamVjdCB0byBjaGFuZ2UKK3dpdGhvdXQgbm90aWNlIGluIGZ1dHVyZSByZWxlYXNlcy4KKworICAgICA8cD5JbiBlYWNoIGNhc2UsIHRoZSA8dmFyPnZhbHVlPC92YXI+IGlzIGFuIGludGVnZXIuICBUaGUgYWxsb3dhYmxlIGNob2ljZXMgZm9yCis8dmFyPm5hbWU8L3Zhcj4gYXJlOgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPnByZWRpY3RhYmxlLWJyYW5jaC1vdXRjb21lPC9jb2RlPjxkZD5XaGVuIGJyYW5jaCBpcyBwcmVkaWN0ZWQgdG8gYmUgdGFrZW4gd2l0aCBwcm9iYWJpbGl0eSBsb3dlciB0aGFuIHRoaXMgdGhyZXNob2xkCisoaW4gcGVyY2VudCksIHRoZW4gaXQgaXMgY29uc2lkZXJlZCB3ZWxsIHByZWRpY3RhYmxlLiBUaGUgZGVmYXVsdCBpcyAxMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LWNyb3NzanVtcC1lZGdlczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGluY29taW5nIGVkZ2VzIHRvIGNvbnNpZGVyIGZvciBjcm9zcy1qdW1waW5nLiAKK1RoZSBhbGdvcml0aG0gdXNlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNyb3NzanVtcGluZzwvc3Bhbj48L3NhbXA+IGlzIE8oTl4yKSBpbgordGhlIG51bWJlciBvZiBlZGdlcyBpbmNvbWluZyB0byBlYWNoIGJsb2NrLiAgSW5jcmVhc2luZyB2YWx1ZXMgbWVhbgorbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiwgbWFraW5nIHRoZSBjb21waWxhdGlvbiB0aW1lIGluY3JlYXNlIHdpdGgKK3Byb2JhYmx5IHNtYWxsIGltcHJvdmVtZW50IGluIGV4ZWN1dGFibGUgc2l6ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWluLWNyb3NzanVtcC1pbnNuczwvY29kZT48ZGQ+VGhlIG1pbmltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0aGF0IG11c3QgYmUgbWF0Y2hlZCBhdCB0aGUgZW5kCitvZiB0d28gYmxvY2tzIGJlZm9yZSBjcm9zcy1qdW1waW5nIGlzIHBlcmZvcm1lZCBvbiB0aGVtLiAgVGhpcwordmFsdWUgaXMgaWdub3JlZCBpbiB0aGUgY2FzZSB3aGVyZSBhbGwgaW5zdHJ1Y3Rpb25zIGluIHRoZSBibG9jayBiZWluZworY3Jvc3MtanVtcGVkIGZyb20gYXJlIG1hdGNoZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtZ3Jvdy1jb3B5LWJiLWluc25zPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBjb2RlIHNpemUgZXhwYW5zaW9uIGZhY3RvciB3aGVuIGNvcHlpbmcgYmFzaWMgYmxvY2tzCitpbnN0ZWFkIG9mIGp1bXBpbmcuICBUaGUgZXhwYW5zaW9uIGlzIHJlbGF0aXZlIHRvIGEganVtcCBpbnN0cnVjdGlvbi4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA4LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtZ290by1kdXBsaWNhdGlvbi1pbnNuczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBkdXBsaWNhdGUgdG8gYSBibG9jayB0aGF0IGp1bXBzCit0byBhIGNvbXB1dGVkIGdvdG8uICBUbyBhdm9pZCBPKE5eMikgYmVoYXZpb3IgaW4gYSBudW1iZXIgb2YKK3Bhc3NlcywgR0NDIGZhY3RvcnMgY29tcHV0ZWQgZ290b3MgZWFybHkgaW4gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsCithbmQgdW5mYWN0b3JzIHRoZW0gYXMgbGF0ZSBhcyBwb3NzaWJsZS4gIE9ubHkgY29tcHV0ZWQganVtcHMgYXQgdGhlCitlbmQgb2YgYSBiYXNpYyBibG9ja3Mgd2l0aCBubyBtb3JlIHRoYW4gbWF4LWdvdG8tZHVwbGljYXRpb24taW5zbnMgYXJlCit1bmZhY3RvcmVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LWRlbGF5LXNsb3QtaW5zbi1zZWFyY2g8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgd2hlbiBsb29raW5nIGZvciBhbgoraW5zdHJ1Y3Rpb24gdG8gZmlsbCBhIGRlbGF5IHNsb3QuICBJZiBtb3JlIHRoYW4gdGhpcyBhcmJpdHJhcnkgbnVtYmVyIG9mCitpbnN0cnVjdGlvbnMgYXJlIHNlYXJjaGVkLCB0aGUgdGltZSBzYXZpbmdzIGZyb20gZmlsbGluZyB0aGUgZGVsYXkgc2xvdAorYXJlIG1pbmltYWwsIHNvIHN0b3Agc2VhcmNoaW5nLiAgSW5jcmVhc2luZyB2YWx1ZXMgbWVhbiBtb3JlCithZ2dyZXNzaXZlIG9wdGltaXphdGlvbiwgbWFraW5nIHRoZSBjb21waWxhdGlvbiB0aW1lIGluY3JlYXNlIHdpdGggcHJvYmFibHkKK3NtYWxsIGltcHJvdmVtZW50IGluIGV4ZWN1dGlvbiB0aW1lLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtZGVsYXktc2xvdC1saXZlLXNlYXJjaDwvY29kZT48ZGQ+V2hlbiB0cnlpbmcgdG8gZmlsbCBkZWxheSBzbG90cywgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0bworY29uc2lkZXIgd2hlbiBzZWFyY2hpbmcgZm9yIGEgYmxvY2sgd2l0aCB2YWxpZCBsaXZlIHJlZ2lzdGVyCitpbmZvcm1hdGlvbi4gIEluY3JlYXNpbmcgdGhpcyBhcmJpdHJhcmlseSBjaG9zZW4gdmFsdWUgbWVhbnMgbW9yZQorYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24sIGluY3JlYXNpbmcgdGhlIGNvbXBpbGF0aW9uIHRpbWUuICBUaGlzIHBhcmFtZXRlcgorc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgZGVsYXkgc2xvdCBjb2RlIGlzIHJld3JpdHRlbiB0byBtYWludGFpbiB0aGUKK2NvbnRyb2wtZmxvdyBncmFwaC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LWdjc2UtbWVtb3J5PC9jb2RlPjxkZD5UaGUgYXBwcm94aW1hdGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgY2FuIGJlIGFsbG9jYXRlZCBpbgorb3JkZXIgdG8gcGVyZm9ybSB0aGUgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uCitvcHRpbWl6YXRpb24uICBJZiBtb3JlIG1lbW9yeSB0aGFuIHNwZWNpZmllZCBpcyByZXF1aXJlZCwgdGhlCitvcHRpbWl6YXRpb24gaXMgbm90IGRvbmUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1nY3NlLWluc2VydGlvbi1yYXRpbzwvY29kZT48ZGQ+SWYgdGhlIHJhdGlvIG9mIGV4cHJlc3Npb24gaW5zZXJ0aW9ucyB0byBkZWxldGlvbnMgaXMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZQorZm9yIGFueSBleHByZXNzaW9uLCB0aGVuIFJUTCBQUkUgaW5zZXJ0cyBvciByZW1vdmVzIHRoZSBleHByZXNzaW9uIGFuZCB0aHVzCitsZWF2ZXMgcGFydGlhbGx5IHJlZHVuZGFudCBjb21wdXRhdGlvbnMgaW4gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtcGVuZGluZy1saXN0LWxlbmd0aDwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIHBlbmRpbmcgZGVwZW5kZW5jaWVzIHNjaGVkdWxpbmcgYWxsb3dzCitiZWZvcmUgZmx1c2hpbmcgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHN0YXJ0aW5nIG92ZXIuICBMYXJnZSBmdW5jdGlvbnMKK3dpdGggZmV3IGJyYW5jaGVzIG9yIGNhbGxzIGNhbiBjcmVhdGUgZXhjZXNzaXZlbHkgbGFyZ2UgbGlzdHMgd2hpY2gKK25lZWRsZXNzbHkgY29uc3VtZSBtZW1vcnkgYW5kIHJlc291cmNlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LW1vZHVsby1iYWNrdHJhY2stYXR0ZW1wdHM8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBiYWNrdHJhY2sgYXR0ZW1wdHMgdGhlIHNjaGVkdWxlciBzaG91bGQgbWFrZQord2hlbiBtb2R1bG8gc2NoZWR1bGluZyBhIGxvb3AuICBMYXJnZXIgdmFsdWVzIGNhbiBleHBvbmVudGlhbGx5IGluY3JlYXNlCitjb21waWxhdGlvbiB0aW1lLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtaW5saW5lLWluc25zLXNpbmdsZTwvY29kZT48ZGQ+U2V2ZXJhbCBwYXJhbWV0ZXJzIGNvbnRyb2wgdGhlIHRyZWUgaW5saW5lciB1c2VkIGluIEdDQy4gCitUaGlzIG51bWJlciBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgKGNvdW50ZWQgaW4gR0NDJ3MKK2ludGVybmFsIHJlcHJlc2VudGF0aW9uKSBpbiBhIHNpbmdsZSBmdW5jdGlvbiB0aGF0IHRoZSB0cmVlIGlubGluZXIKK2NvbnNpZGVycyBmb3IgaW5saW5pbmcuICBUaGlzIG9ubHkgYWZmZWN0cyBmdW5jdGlvbnMgZGVjbGFyZWQKK2lubGluZSBhbmQgbWV0aG9kcyBpbXBsZW1lbnRlZCBpbiBhIGNsYXNzIGRlY2xhcmF0aW9uIChDKyspLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDQwMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LWlubGluZS1pbnNucy1hdXRvPC9jb2RlPjxkZD5XaGVuIHlvdSB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbmxpbmUtZnVuY3Rpb25zPC9zcGFuPjwvc2FtcD4gKGluY2x1ZGVkIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+KSwKK2EgbG90IG9mIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG90aGVyd2lzZSBub3QgYmUgY29uc2lkZXJlZCBmb3IgaW5saW5pbmcKK2J5IHRoZSBjb21waWxlciBhcmUgaW52ZXN0aWdhdGVkLiAgVG8gdGhvc2UgZnVuY3Rpb25zLCBhIGRpZmZlcmVudAorKG1vcmUgcmVzdHJpY3RpdmUpIGxpbWl0IGNvbXBhcmVkIHRvIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbmxpbmUgY2FuCitiZSBhcHBsaWVkLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDQwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pbmxpbmUtbWluLXNwZWVkdXA8L2NvZGU+PGRkPldoZW4gZXN0aW1hdGVkIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9mIGNhbGxlciArIGNhbGxlZSBydW50aW1lIGV4Y2VlZHMgdGhpcwordGhyZXNob2xkIChpbiBwcmVjZW50KSwgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbmxpbmVkIHJlZ2FyZGxlc3MgdGhlIGxpbWl0IG9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBhcmFtIG1heC1pbmxpbmUtaW5zbnMtc2luZ2xlPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGFyYW0KK21heC1pbmxpbmUtaW5zbnMtYXV0bzwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sYXJnZS1mdW5jdGlvbi1pbnNuczwvY29kZT48ZGQ+VGhlIGxpbWl0IHNwZWNpZnlpbmcgcmVhbGx5IGxhcmdlIGZ1bmN0aW9ucy4gIEZvciBmdW5jdGlvbnMgbGFyZ2VyIHRoYW4gdGhpcworbGltaXQgYWZ0ZXIgaW5saW5pbmcsIGlubGluaW5nIGlzIGNvbnN0cmFpbmVkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBhcmFtIGxhcmdlLWZ1bmN0aW9uLWdyb3d0aDwvc3Bhbj48L3NhbXA+LiAgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsIHByaW1hcmlseQordG8gYXZvaWQgZXh0cmVtZSBjb21waWxhdGlvbiB0aW1lIGNhdXNlZCBieSBub24tbGluZWFyIGFsZ29yaXRobXMgdXNlZCBieSB0aGUKK2JhY2sgZW5kLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDI3MDAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmxhcmdlLWZ1bmN0aW9uLWdyb3d0aDwvY29kZT48ZGQ+U3BlY2lmaWVzIG1heGltYWwgZ3Jvd3RoIG9mIGxhcmdlIGZ1bmN0aW9uIGNhdXNlZCBieSBpbmxpbmluZyBpbiBwZXJjZW50cy4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAgd2hpY2ggbGltaXRzIGxhcmdlIGZ1bmN0aW9uIGdyb3d0aCB0byAyLjAgdGltZXMKK3RoZSBvcmlnaW5hbCBzaXplLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sYXJnZS11bml0LWluc25zPC9jb2RlPjxkZD5UaGUgbGltaXQgc3BlY2lmeWluZyBsYXJnZSB0cmFuc2xhdGlvbiB1bml0LiAgR3Jvd3RoIGNhdXNlZCBieSBpbmxpbmluZyBvZgordW5pdHMgbGFyZ2VyIHRoYW4gdGhpcyBsaW1pdCBpcyBsaW1pdGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGFyYW0gaW5saW5lLXVuaXQtZ3Jvd3RoPC9zcGFuPjwvc2FtcD4uIAorRm9yIHNtYWxsIHVuaXRzIHRoaXMgbWlnaHQgYmUgdG9vIHRpZ2h0LiAKK0ZvciBleGFtcGxlLCBjb25zaWRlciBhIHVuaXQgY29uc2lzdGluZyBvZiBmdW5jdGlvbiBBCit0aGF0IGlzIGlubGluZSBhbmQgQiB0aGF0IGp1c3QgY2FsbHMgQSB0aHJlZSB0aW1lcy4gIElmIEIgaXMgc21hbGwgcmVsYXRpdmUgdG8KK0EsIHRoZSBncm93dGggb2YgdW5pdCBpcyAzMDBcJSBhbmQgeWV0IHN1Y2ggaW5saW5pbmcgaXMgdmVyeSBzYW5lLiAgRm9yIHZlcnkKK2xhcmdlIHVuaXRzIGNvbnNpc3Rpbmcgb2Ygc21hbGwgaW5saW5lYWJsZSBmdW5jdGlvbnMsIGhvd2V2ZXIsIHRoZSBvdmVyYWxsIHVuaXQKK2dyb3d0aCBsaW1pdCBpcyBuZWVkZWQgdG8gYXZvaWQgZXhwb25lbnRpYWwgZXhwbG9zaW9uIG9mIGNvZGUgc2l6ZS4gIFRodXMgZm9yCitzbWFsbGVyIHVuaXRzLCB0aGUgc2l6ZSBpcyBpbmNyZWFzZWQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wYXJhbSBsYXJnZS11bml0LWluc25zPC9zcGFuPjwvc2FtcD4KK2JlZm9yZSBhcHBseWluZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBhcmFtIGlubGluZS11bml0LWdyb3d0aDwvc3Bhbj48L3NhbXA+LiAgVGhlIGRlZmF1bHQgaXMgMTAwMDAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmlubGluZS11bml0LWdyb3d0aDwvY29kZT48ZGQ+U3BlY2lmaWVzIG1heGltYWwgb3ZlcmFsbCBncm93dGggb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgY2F1c2VkIGJ5IGlubGluaW5nLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDMwIHdoaWNoIGxpbWl0cyB1bml0IGdyb3d0aCB0byAxLjMgdGltZXMgdGhlIG9yaWdpbmFsCitzaXplLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pcGNwLXVuaXQtZ3Jvd3RoPC9jb2RlPjxkZD5TcGVjaWZpZXMgbWF4aW1hbCBvdmVyYWxsIGdyb3d0aCBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCBjYXVzZWQgYnkKK2ludGVycHJvY2VkdXJhbCBjb25zdGFudCBwcm9wYWdhdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwIHdoaWNoIGxpbWl0cwordW5pdCBncm93dGggdG8gMS4xIHRpbWVzIHRoZSBvcmlnaW5hbCBzaXplLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sYXJnZS1zdGFjay1mcmFtZTwvY29kZT48ZGQ+VGhlIGxpbWl0IHNwZWNpZnlpbmcgbGFyZ2Ugc3RhY2sgZnJhbWVzLiAgV2hpbGUgaW5saW5pbmcgdGhlIGFsZ29yaXRobSBpcyB0cnlpbmcKK3RvIG5vdCBncm93IHBhc3QgdGhpcyBsaW1pdCB0b28gbXVjaC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDI1NiBieXRlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bGFyZ2Utc3RhY2stZnJhbWUtZ3Jvd3RoPC9jb2RlPjxkZD5TcGVjaWZpZXMgbWF4aW1hbCBncm93dGggb2YgbGFyZ2Ugc3RhY2sgZnJhbWVzIGNhdXNlZCBieSBpbmxpbmluZyBpbiBwZXJjZW50cy4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAwIHdoaWNoIGxpbWl0cyBsYXJnZSBzdGFjayBmcmFtZSBncm93dGggdG8gMTEgdGltZXMKK3RoZSBvcmlnaW5hbCBzaXplLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtaW5saW5lLWluc25zLXJlY3Vyc2l2ZTwvY29kZT48ZHQ+PGNvZGU+bWF4LWlubGluZS1pbnNucy1yZWN1cnNpdmUtYXV0bzwvY29kZT48ZGQ+U3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgYW4gb3V0LW9mLWxpbmUgY29weSBvZiBhCitzZWxmLXJlY3Vyc2l2ZSBpbmxpbmUKK2Z1bmN0aW9uIGNhbiBncm93IGludG8gYnkgcGVyZm9ybWluZyByZWN1cnNpdmUgaW5saW5pbmcuCisKKyAgICAgICAgICA8cD5Gb3IgZnVuY3Rpb25zIGRlY2xhcmVkIGlubGluZSwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wYXJhbSBtYXgtaW5saW5lLWluc25zLXJlY3Vyc2l2ZTwvc3Bhbj48L3NhbXA+IGlzCit0YWtlbiBpbnRvIGFjY291bnQuICBGb3IgZnVuY3Rpb25zIG5vdCBkZWNsYXJlZCBpbmxpbmUsIHJlY3Vyc2l2ZSBpbmxpbmluZworaGFwcGVucyBvbmx5IHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbmxpbmUtZnVuY3Rpb25zPC9zcGFuPjwvc2FtcD4gKGluY2x1ZGVkIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+KSBpcworZW5hYmxlZCBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wYXJhbSBtYXgtaW5saW5lLWluc25zLXJlY3Vyc2l2ZS1hdXRvPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gIFRoZQorZGVmYXVsdCB2YWx1ZSBpcyA0NTAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1pbmxpbmUtcmVjdXJzaXZlLWRlcHRoPC9jb2RlPjxkdD48Y29kZT5tYXgtaW5saW5lLXJlY3Vyc2l2ZS1kZXB0aC1hdXRvPC9jb2RlPjxkZD5TcGVjaWZpZXMgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHVzZWQgZm9yIHJlY3Vyc2l2ZSBpbmxpbmluZy4KKworICAgICAgICAgIDxwPkZvciBmdW5jdGlvbnMgZGVjbGFyZWQgaW5saW5lLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBhcmFtIG1heC1pbmxpbmUtcmVjdXJzaXZlLWRlcHRoPC9zcGFuPjwvc2FtcD4gaXMKK3Rha2VuIGludG8gYWNjb3VudC4gIEZvciBmdW5jdGlvbnMgbm90IGRlY2xhcmVkIGlubGluZSwgcmVjdXJzaXZlIGlubGluaW5nCitoYXBwZW5zIG9ubHkgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmlubGluZS1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPiAoaW5jbHVkZWQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8zPC9zcGFuPjwvc2FtcD4pIGlzCitlbmFibGVkIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBhcmFtIG1heC1pbmxpbmUtcmVjdXJzaXZlLWRlcHRoLWF1dG88L3NwYW4+PC9zYW1wPiBpcyB1c2VkLiAgVGhlCitkZWZhdWx0IHZhbHVlIGlzIDguCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1pbi1pbmxpbmUtcmVjdXJzaXZlLXByb2JhYmlsaXR5PC9jb2RlPjxkZD5SZWN1cnNpdmUgaW5saW5pbmcgaXMgcHJvZml0YWJsZSBvbmx5IGZvciBmdW5jdGlvbiBoYXZpbmcgZGVlcCByZWN1cnNpb24KK2luIGF2ZXJhZ2UgYW5kIGNhbiBodXJ0IGZvciBmdW5jdGlvbiBoYXZpbmcgbGl0dGxlIHJlY3Vyc2lvbiBkZXB0aCBieQoraW5jcmVhc2luZyB0aGUgcHJvbG9ndWUgc2l6ZSBvciBjb21wbGV4aXR5IG9mIGZ1bmN0aW9uIGJvZHkgdG8gb3RoZXIKK29wdGltaXplcnMuCisKKyAgICAgICAgICA8cD5XaGVuIHByb2ZpbGUgZmVlZGJhY2sgaXMgYXZhaWxhYmxlIChzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWdlbmVyYXRlPC9zcGFuPjwvc2FtcD4pIHRoZSBhY3R1YWwKK3JlY3Vyc2lvbiBkZXB0aCBjYW4gYmUgZ3Vlc3NlZCBmcm9tIHByb2JhYmlsaXR5IHRoYXQgZnVuY3Rpb24gcmVjdXJzZXMgdmlhIGEKK2dpdmVuIGNhbGwgZXhwcmVzc2lvbi4gIFRoaXMgcGFyYW1ldGVyIGxpbWl0cyBpbmxpbmluZyBvbmx5IHRvIGNhbGwgZXhwcmVzc2lvbnMKK3dob3NlIHByb2JhYmlsaXR5IGV4Y2VlZHMgdGhlIGdpdmVuIHRocmVzaG9sZCAoaW4gcGVyY2VudHMpLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5lYXJseS1pbmxpbmluZy1pbnNuczwvY29kZT48ZGQ+U3BlY2lmeSBncm93dGggdGhhdCB0aGUgZWFybHkgaW5saW5lciBjYW4gbWFrZS4gIEluIGVmZmVjdCBpdCBpbmNyZWFzZXMKK3RoZSBhbW91bnQgb2YgaW5saW5pbmcgZm9yIGNvZGUgaGF2aW5nIGEgbGFyZ2UgYWJzdHJhY3Rpb24gcGVuYWx0eS4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LWVhcmx5LWlubGluZXItaXRlcmF0aW9uczwvY29kZT48ZHQ+PGNvZGU+bWF4LWVhcmx5LWlubGluZXItaXRlcmF0aW9uczwvY29kZT48ZGQ+TGltaXQgb2YgaXRlcmF0aW9ucyBvZiB0aGUgZWFybHkgaW5saW5lci4gIFRoaXMgYmFzaWNhbGx5IGJvdW5kcwordGhlIG51bWJlciBvZiBuZXN0ZWQgaW5kaXJlY3QgY2FsbHMgdGhlIGVhcmx5IGlubGluZXIgY2FuIHJlc29sdmUuIAorRGVlcGVyIGNoYWlucyBhcmUgc3RpbGwgaGFuZGxlZCBieSBsYXRlIGlubGluaW5nLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5jb21kYXQtc2hhcmluZy1wcm9iYWJpbGl0eTwvY29kZT48ZHQ+PGNvZGU+Y29tZGF0LXNoYXJpbmctcHJvYmFiaWxpdHk8L2NvZGU+PGRkPlByb2JhYmlsaXR5IChpbiBwZXJjZW50KSB0aGF0IEMrKyBpbmxpbmUgZnVuY3Rpb24gd2l0aCBjb21kYXQgdmlzaWJpbGl0eQorYXJlIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgY29tcGlsYXRpb24gdW5pdHMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWluLXZlY3QtbG9vcC1ib3VuZDwvY29kZT48ZGQ+VGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdW5kZXIgd2hpY2ggbG9vcHMgYXJlIG5vdCB2ZWN0b3JpemVkCit3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJlZS12ZWN0b3JpemU8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLiAgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGFmdGVyCit2ZWN0b3JpemF0aW9uIG5lZWRzIHRvIGJlIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoaXMgb3B0aW9uCit0byBhbGxvdyB2ZWN0b3JpemF0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Z2NzZS1jb3N0LWRpc3RhbmNlLXJhdGlvPC9jb2RlPjxkZD5TY2FsaW5nIGZhY3RvciBpbiBjYWxjdWxhdGlvbiBvZiBtYXhpbXVtIGRpc3RhbmNlIGFuIGV4cHJlc3Npb24KK2NhbiBiZSBtb3ZlZCBieSBHQ1NFIG9wdGltaXphdGlvbnMuICBUaGlzIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBpbiB0aGUKK2NvZGUgaG9pc3RpbmcgcGFzcy4gIFRoZSBiaWdnZXIgdGhlIHJhdGlvLCB0aGUgbW9yZSBhZ2dyZXNzaXZlIGNvZGUgaG9pc3RpbmcKK2lzIHdpdGggc2ltcGxlIGV4cHJlc3Npb25zLCBpLmUuLCB0aGUgZXhwcmVzc2lvbnMgdGhhdCBoYXZlIGNvc3QKK2xlc3MgdGhhbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5nY3NlLXVucmVzdHJpY3RlZC1jb3N0PC9zcGFuPjwvc2FtcD4uICBTcGVjaWZ5aW5nIDAgZGlzYWJsZXMKK2hvaXN0aW5nIG9mIHNpbXBsZSBleHByZXNzaW9ucy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5nY3NlLXVucmVzdHJpY3RlZC1jb3N0PC9jb2RlPjxkZD5Db3N0LCByb3VnaGx5IG1lYXN1cmVkIGFzIHRoZSBjb3N0IG9mIGEgc2luZ2xlIHR5cGljYWwgbWFjaGluZQoraW5zdHJ1Y3Rpb24sIGF0IHdoaWNoIEdDU0Ugb3B0aW1pemF0aW9ucyBkbyBub3QgY29uc3RyYWluCit0aGUgZGlzdGFuY2UgYW4gZXhwcmVzc2lvbiBjYW4gdHJhdmVsLiAgVGhpcyBpcyBjdXJyZW50bHkKK3N1cHBvcnRlZCBvbmx5IGluIHRoZSBjb2RlIGhvaXN0aW5nIHBhc3MuICBUaGUgbGVzc2VyIHRoZSBjb3N0LAordGhlIG1vcmUgYWdncmVzc2l2ZSBjb2RlIGhvaXN0aW5nIGlzLiAgU3BlY2lmeWluZyAwCithbGxvd3MgYWxsIGV4cHJlc3Npb25zIHRvIHRyYXZlbCB1bnJlc3RyaWN0ZWQgZGlzdGFuY2VzLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1ob2lzdC1kZXB0aDwvY29kZT48ZGQ+VGhlIGRlcHRoIG9mIHNlYXJjaCBpbiB0aGUgZG9taW5hdG9yIHRyZWUgZm9yIGV4cHJlc3Npb25zIHRvIGhvaXN0LiAKK1RoaXMgaXMgdXNlZCB0byBhdm9pZCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gaG9pc3RpbmcgYWxnb3JpdGhtLiAKK1RoZSB2YWx1ZSBvZiAwIGRvZXMgbm90IGxpbWl0IG9uIHRoZSBzZWFyY2gsIGJ1dCBtYXkgc2xvdyBkb3duIGNvbXBpbGF0aW9uCitvZiBodWdlIGZ1bmN0aW9ucy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtdGFpbC1tZXJnZS1jb21wYXJpc29uczwvY29kZT48ZGQ+VGhlIG1heGltdW0gYW1vdW50IG9mIHNpbWlsYXIgYmJzIHRvIGNvbXBhcmUgYSBiYiB3aXRoLiAgVGhpcyBpcyB1c2VkIHRvCithdm9pZCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gdHJlZSB0YWlsIG1lcmdpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXRhaWwtbWVyZ2UtaXRlcmF0aW9uczwvY29kZT48ZGQ+VGhlIG1heGltdW0gYW1vdW50IG9mIGl0ZXJhdGlvbnMgb2YgdGhlIHBhc3Mgb3ZlciB0aGUgZnVuY3Rpb24uICBUaGlzIGlzIHVzZWQgdG8KK2xpbWl0IGNvbXBpbGF0aW9uIHRpbWUgaW4gdHJlZSB0YWlsIG1lcmdpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtdW5yb2xsZWQtaW5zbnM8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhhdCBhIGxvb3AgbWF5IGhhdmUgdG8gYmUgdW5yb2xsZWQuIAorSWYgYSBsb29wIGlzIHVucm9sbGVkLCB0aGlzIHBhcmFtZXRlciBhbHNvIGRldGVybWluZXMgaG93IG1hbnkgdGltZXMKK3RoZSBsb29wIGNvZGUgaXMgdW5yb2xsZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1hdmVyYWdlLXVucm9sbGVkLWluc25zPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGJpYXNlZCBieSBwcm9iYWJpbGl0aWVzIG9mIHRoZWlyIGV4ZWN1dGlvbgordGhhdCBhIGxvb3AgbWF5IGhhdmUgdG8gYmUgdW5yb2xsZWQuICBJZiBhIGxvb3AgaXMgdW5yb2xsZWQsCit0aGlzIHBhcmFtZXRlciBhbHNvIGRldGVybWluZXMgaG93IG1hbnkgdGltZXMgdGhlIGxvb3AgY29kZSBpcyB1bnJvbGxlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXVucm9sbC10aW1lczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIHVucm9sbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXBlZWxlZC1pbnNuczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0aGF0IGEgbG9vcCBtYXkgaGF2ZSB0byBiZSBwZWVsZWQuIAorSWYgYSBsb29wIGlzIHBlZWxlZCwgdGhpcyBwYXJhbWV0ZXIgYWxzbyBkZXRlcm1pbmVzIGhvdyBtYW55IHRpbWVzCit0aGUgbG9vcCBjb2RlIGlzIHBlZWxlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXBlZWwtdGltZXM8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBwZWVsaW5ncyBvZiBhIHNpbmdsZSBsb29wLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtcGVlbC1icmFuY2hlczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGJyYW5jaGVzIG9uIHRoZSBob3QgcGF0aCB0aHJvdWdoIHRoZSBwZWVsZWQgc2VxdWVuY2UuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1jb21wbGV0ZWx5LXBlZWxlZC1pbnNuczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGEgY29tcGxldGVseSBwZWVsZWQgbG9vcC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LWNvbXBsZXRlbHktcGVlbC10aW1lczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgYSBsb29wIHRvIGJlIHN1aXRhYmxlIGZvciBjb21wbGV0ZSBwZWVsaW5nLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtY29tcGxldGVseS1wZWVsLWxvb3AtbmVzdC1kZXB0aDwvY29kZT48ZGQ+VGhlIG1heGltdW0gZGVwdGggb2YgYSBsb29wIG5lc3Qgc3VpdGFibGUgZm9yIGNvbXBsZXRlIHBlZWxpbmcuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC11bnN3aXRjaC1pbnNuczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGFuIHVuc3dpdGNoZWQgbG9vcC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXVuc3dpdGNoLWxldmVsPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgYnJhbmNoZXMgdW5zd2l0Y2hlZCBpbiBhIHNpbmdsZSBsb29wLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5saW0tZXhwZW5zaXZlPC9jb2RlPjxkZD5UaGUgbWluaW11bSBjb3N0IG9mIGFuIGV4cGVuc2l2ZSBleHByZXNzaW9uIGluIHRoZSBsb29wIGludmFyaWFudCBtb3Rpb24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPml2LWNvbnNpZGVyLWFsbC1jYW5kaWRhdGVzLWJvdW5kPC9jb2RlPjxkZD5Cb3VuZCBvbiBudW1iZXIgb2YgY2FuZGlkYXRlcyBmb3IgaW5kdWN0aW9uIHZhcmlhYmxlcywgYmVsb3cgd2hpY2gKK2FsbCBjYW5kaWRhdGVzIGFyZSBjb25zaWRlcmVkIGZvciBlYWNoIHVzZSBpbiBpbmR1Y3Rpb24gdmFyaWFibGUKK29wdGltaXphdGlvbnMuICBJZiB0aGVyZSBhcmUgbW9yZSBjYW5kaWRhdGVzIHRoYW4gdGhpcywKK29ubHkgdGhlIG1vc3QgcmVsZXZhbnQgb25lcyBhcmUgY29uc2lkZXJlZCB0byBhdm9pZCBxdWFkcmF0aWMgdGltZSBjb21wbGV4aXR5LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pdi1tYXgtY29uc2lkZXJlZC11c2VzPC9jb2RlPjxkZD5UaGUgaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMgZ2l2ZSB1cCBvbiBsb29wcyB0aGF0IGNvbnRhaW4gbW9yZQoraW5kdWN0aW9uIHZhcmlhYmxlIHVzZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPml2LWFsd2F5cy1wcnVuZS1jYW5kLXNldC1ib3VuZDwvY29kZT48ZGQ+SWYgdGhlIG51bWJlciBvZiBjYW5kaWRhdGVzIGluIHRoZSBzZXQgaXMgc21hbGxlciB0aGFuIHRoaXMgdmFsdWUsCithbHdheXMgdHJ5IHRvIHJlbW92ZSB1bm5lY2Vzc2FyeSBpdnMgZnJvbSB0aGUgc2V0Cit3aGVuIGFkZGluZyBhIG5ldyBvbmUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnNjZXYtbWF4LWV4cHItc2l6ZTwvY29kZT48ZGQ+Qm91bmQgb24gc2l6ZSBvZiBleHByZXNzaW9ucyB1c2VkIGluIHRoZSBzY2FsYXIgZXZvbHV0aW9ucyBhbmFseXplci4gCitMYXJnZSBleHByZXNzaW9ucyBzbG93IHRoZSBhbmFseXplci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+c2Nldi1tYXgtZXhwci1jb21wbGV4aXR5PC9jb2RlPjxkZD5Cb3VuZCBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNjYWxhciBldm9sdXRpb25zIGFuYWx5emVyLiAKK0NvbXBsZXggZXhwcmVzc2lvbnMgc2xvdyB0aGUgYW5hbHl6ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm9tZWdhLW1heC12YXJzPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgdmFyaWFibGVzIGluIGFuIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEyOC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+b21lZ2EtbWF4LWdlcXM8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbmVxdWFsaXRpZXMgaW4gYW4gT21lZ2EgY29uc3RyYWludCBzeXN0ZW0uIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjU2LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5vbWVnYS1tYXgtZXFzPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgZXF1YWxpdGllcyBpbiBhbiBPbWVnYSBjb25zdHJhaW50IHN5c3RlbS4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMjguCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm9tZWdhLW1heC13aWxkLWNhcmRzPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2Ygd2lsZGNhcmQgdmFyaWFibGVzIHRoYXQgdGhlIE9tZWdhIHNvbHZlciBpcworYWJsZSB0byBpbnNlcnQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxOC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+b21lZ2EtaGFzaC10YWJsZS1zaXplPC9jb2RlPjxkZD5UaGUgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSBpbiB0aGUgT21lZ2Egc29sdmVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKKzU1MC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+b21lZ2EtbWF4LWtleXM8L2NvZGU+PGRkPlRoZSBtYXhpbWFsIG51bWJlciBvZiBrZXlzIHVzZWQgYnkgdGhlIE9tZWdhIHNvbHZlci4gIFRoZSBkZWZhdWx0Cit2YWx1ZSBpcyA1MDAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm9tZWdhLWVsaW1pbmF0ZS1yZWR1bmRhbnQtY29uc3RyYWludHM8L2NvZGU+PGRkPldoZW4gc2V0IHRvIDEsIHVzZSBleHBlbnNpdmUgbWV0aG9kcyB0byBlbGltaW5hdGUgYWxsIHJlZHVuZGFudAorY29uc3RyYWludHMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT52ZWN0LW1heC12ZXJzaW9uLWZvci1hbGlnbm1lbnQtY2hlY2tzPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgcnVuLXRpbWUgY2hlY2tzIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCB3aGVuCitkb2luZyBsb29wIHZlcnNpb25pbmcgZm9yIGFsaWdubWVudCBpbiB0aGUgdmVjdG9yaXplci4gIFNlZSBvcHRpb24KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJlZS12ZWN0LWxvb3AtdmVyc2lvbjwvc3Bhbj48L3NhbXA+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT52ZWN0LW1heC12ZXJzaW9uLWZvci1hbGlhcy1jaGVja3M8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBydW4tdGltZSBjaGVja3MgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIHdoZW4KK2RvaW5nIGxvb3AgdmVyc2lvbmluZyBmb3IgYWxpYXMgaW4gdGhlIHZlY3Rvcml6ZXIuICBTZWUgb3B0aW9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnRyZWUtdmVjdC1sb29wLXZlcnNpb248L3NwYW4+PC9zYW1wPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LWl0ZXJhdGlvbnMtdG8tdHJhY2s8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcCB0aGUgYnJ1dGUtZm9yY2UgYWxnb3JpdGhtCitmb3IgYW5hbHlzaXMgb2YgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wIHRyaWVzIHRvIGV2YWx1YXRlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ob3QtYmItY291bnQtd3MtcGVybWlsbGU8L2NvZGU+PGRkPkEgYmFzaWMgYmxvY2sgcHJvZmlsZSBjb3VudCBpcyBjb25zaWRlcmVkIGhvdCBpZiBpdCBjb250cmlidXRlcyB0bwordGhlIGdpdmVuIHBlcm1pbGxhZ2UgKGkuZS4gMC4uLjEwMDApIG9mIHRoZSBlbnRpcmUgcHJvZmlsZWQgZXhlY3V0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ob3QtYmItZnJlcXVlbmN5LWZyYWN0aW9uPC9jb2RlPjxkZD5TZWxlY3QgZnJhY3Rpb24gb2YgdGhlIGVudHJ5IGJsb2NrIGZyZXF1ZW5jeSBvZiBleGVjdXRpb25zIG9mIGJhc2ljIGJsb2NrIGluCitmdW5jdGlvbiBnaXZlbiBiYXNpYyBibG9jayBuZWVkcyB0byBoYXZlIHRvIGJlIGNvbnNpZGVyZWQgaG90LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtcHJlZGljdGVkLWl0ZXJhdGlvbnM8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBsb29wIGl0ZXJhdGlvbnMgd2UgcHJlZGljdCBzdGF0aWNhbGx5LiAgVGhpcyBpcyB1c2VmdWwKK2luIGNhc2VzIHdoZXJlIGEgZnVuY3Rpb24gY29udGFpbnMgYSBzaW5nbGUgbG9vcCB3aXRoIGtub3duIGJvdW5kIGFuZAorYW5vdGhlciBsb29wIHdpdGggdW5rbm93biBib3VuZC4gCitUaGUga25vd24gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgcHJlZGljdGVkIGNvcnJlY3RseSwgd2hpbGUKK3RoZSB1bmtub3duIG51bWJlciBvZiBpdGVyYXRpb25zIGF2ZXJhZ2UgdG8gcm91Z2hseSAxMC4gIFRoaXMgbWVhbnMgdGhhdCB0aGUKK2xvb3Agd2l0aG91dCBib3VuZHMgYXBwZWFycyBhcnRpZmljaWFsbHkgY29sZCByZWxhdGl2ZSB0byB0aGUgb3RoZXIgb25lLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hbGlnbi10aHJlc2hvbGQ8L2NvZGU+PGRkPgorU2VsZWN0IGZyYWN0aW9uIG9mIHRoZSBtYXhpbWFsIGZyZXF1ZW5jeSBvZiBleGVjdXRpb25zIG9mIGEgYmFzaWMgYmxvY2sgaW4KK2EgZnVuY3Rpb24gdG8gYWxpZ24gdGhlIGJhc2ljIGJsb2NrLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hbGlnbi1sb29wLWl0ZXJhdGlvbnM8L2NvZGU+PGRkPgorQSBsb29wIGV4cGVjdGVkIHRvIGl0ZXJhdGUgYXQgbGVhc3QgdGhlIHNlbGVjdGVkIG51bWJlciBvZiBpdGVyYXRpb25zIGlzCithbGlnbmVkLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT50cmFjZXItZHluYW1pYy1jb3ZlcmFnZTwvY29kZT48ZHQ+PGNvZGU+dHJhY2VyLWR5bmFtaWMtY292ZXJhZ2UtZmVlZGJhY2s8L2NvZGU+PGRkPgorVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGxpbWl0IHN1cGVyYmxvY2sgZm9ybWF0aW9uIG9uY2UgdGhlIGdpdmVuIHBlcmNlbnRhZ2Ugb2YKK2V4ZWN1dGVkIGluc3RydWN0aW9ucyBpcyBjb3ZlcmVkLiAgVGhpcyBsaW1pdHMgdW5uZWNlc3NhcnkgY29kZSBzaXplCitleHBhbnNpb24uCisKKyAgICAgICAgICA8cD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+dHJhY2VyLWR5bmFtaWMtY292ZXJhZ2UtZmVlZGJhY2s8L3NwYW4+PC9zYW1wPiBpcyB1c2VkIG9ubHkgd2hlbiBwcm9maWxlCitmZWVkYmFjayBpcyBhdmFpbGFibGUuICBUaGUgcmVhbCBwcm9maWxlcyAoYXMgb3Bwb3NlZCB0byBzdGF0aWNhbGx5IGVzdGltYXRlZAorb25lcykgYXJlIG11Y2ggbGVzcyBiYWxhbmNlZCBhbGxvd2luZyB0aGUgdGhyZXNob2xkIHRvIGJlIGxhcmdlciB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dHJhY2VyLW1heC1jb2RlLWdyb3d0aDwvY29kZT48ZGQ+U3RvcCB0YWlsIGR1cGxpY2F0aW9uIG9uY2UgY29kZSBncm93dGggaGFzIHJlYWNoZWQgZ2l2ZW4gcGVyY2VudGFnZS4gIFRoaXMgaXMKK2EgcmF0aGVyIGFydGlmaWNpYWwgbGltaXQsIGFzIG1vc3Qgb2YgdGhlIGR1cGxpY2F0ZXMgYXJlIGVsaW1pbmF0ZWQgbGF0ZXIgaW4KK2Nyb3NzIGp1bXBpbmcsIHNvIGl0IG1heSBiZSBzZXQgdG8gbXVjaCBoaWdoZXIgdmFsdWVzIHRoYW4gaXMgdGhlIGRlc2lyZWQgY29kZQorZ3Jvd3RoLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT50cmFjZXItbWluLWJyYW5jaC1yYXRpbzwvY29kZT48ZGQ+CitTdG9wIHJldmVyc2UgZ3Jvd3RoIHdoZW4gdGhlIHJldmVyc2UgcHJvYmFiaWxpdHkgb2YgYmVzdCBlZGdlIGlzIGxlc3MgdGhhbiB0aGlzCit0aHJlc2hvbGQgKGluIHBlcmNlbnQpLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT50cmFjZXItbWluLWJyYW5jaC1yYXRpbzwvY29kZT48ZHQ+PGNvZGU+dHJhY2VyLW1pbi1icmFuY2gtcmF0aW8tZmVlZGJhY2s8L2NvZGU+PGRkPgorU3RvcCBmb3J3YXJkIGdyb3d0aCBpZiB0aGUgYmVzdCBlZGdlIGhhcyBwcm9iYWJpbGl0eSBsb3dlciB0aGFuIHRoaXMKK3RocmVzaG9sZC4KKworICAgICAgICAgIDxwPlNpbWlsYXJseSB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj50cmFjZXItZHluYW1pYy1jb3ZlcmFnZTwvc3Bhbj48L3NhbXA+IHR3byB2YWx1ZXMgYXJlIHByZXNlbnQsIG9uZSBmb3IKK2NvbXBpbGF0aW9uIGZvciBwcm9maWxlIGZlZWRiYWNrIGFuZCBvbmUgZm9yIGNvbXBpbGF0aW9uIHdpdGhvdXQuICBUaGUgdmFsdWUKK2ZvciBjb21waWxhdGlvbiB3aXRoIHByb2ZpbGUgZmVlZGJhY2sgbmVlZHMgdG8gYmUgbW9yZSBjb25zZXJ2YXRpdmUgKGhpZ2hlcikgaW4KK29yZGVyIHRvIG1ha2UgdHJhY2VyIGVmZmVjdGl2ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LWNzZS1wYXRoLWxlbmd0aDwvY29kZT48ZGQ+CitUaGUgbWF4aW11bSBudW1iZXIgb2YgYmFzaWMgYmxvY2tzIG9uIHBhdGggdGhhdCBDU0UgY29uc2lkZXJzLiAKK1RoZSBkZWZhdWx0IGlzIDEwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtY3NlLWluc25zPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIENTRSBwcm9jZXNzZXMgYmVmb3JlIGZsdXNoaW5nLiAKK1RoZSBkZWZhdWx0IGlzIDEwMDAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmdnYy1taW4tZXhwYW5kPC9jb2RlPjxkZD4KK0dDQyB1c2VzIGEgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gbWFuYWdlIGl0cyBvd24gbWVtb3J5IGFsbG9jYXRpb24uICBUaGlzCitwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIHBlcmNlbnRhZ2UgYnkgd2hpY2ggdGhlIGdhcmJhZ2UKK2NvbGxlY3RvcidzIGhlYXAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gZXhwYW5kIGJldHdlZW4gY29sbGVjdGlvbnMuIAorVHVuaW5nIHRoaXMgbWF5IGltcHJvdmUgY29tcGlsYXRpb24gc3BlZWQ7IGl0IGhhcyBubyBlZmZlY3Qgb24gY29kZQorZ2VuZXJhdGlvbi4KKworICAgICAgICAgIDxwPlRoZSBkZWZhdWx0IGlzIDMwJSArIDcwJSAqIChSQU0vMUdCKSB3aXRoIGFuIHVwcGVyIGJvdW5kIG9mIDEwMCUgd2hlbgorUkFNICZndDs9IDFHQi4gIElmIDxjb2RlPmdldHJsaW1pdDwvY29kZT4gaXMgYXZhaWxhYmxlLCB0aGUgbm90aW9uIG9mICZsZHF1bztSQU0mcmRxdW87IGlzCit0aGUgc21hbGxlc3Qgb2YgYWN0dWFsIFJBTSBhbmQgPGNvZGU+UkxJTUlUX0RBVEE8L2NvZGU+IG9yIDxjb2RlPlJMSU1JVF9BUzwvY29kZT4uICBJZgorR0NDIGlzIG5vdCBhYmxlIHRvIGNhbGN1bGF0ZSBSQU0gb24gYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLCB0aGUgbG93ZXIKK2JvdW5kIG9mIDMwJSBpcyB1c2VkLiAgU2V0dGluZyB0aGlzIHBhcmFtZXRlciBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmdnYy1taW4taGVhcHNpemU8L3NwYW4+PC9zYW1wPiB0byB6ZXJvIGNhdXNlcyBhIGZ1bGwgY29sbGVjdGlvbiB0byBvY2N1ciBhdAorZXZlcnkgb3Bwb3J0dW5pdHkuICBUaGlzIGlzIGV4dHJlbWVseSBzbG93LCBidXQgY2FuIGJlIHVzZWZ1bCBmb3IKK2RlYnVnZ2luZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Z2djLW1pbi1oZWFwc2l6ZTwvY29kZT48ZGQ+CitNaW5pbXVtIHNpemUgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdG9yJ3MgaGVhcCBiZWZvcmUgaXQgYmVnaW5zIGJvdGhlcmluZwordG8gY29sbGVjdCBnYXJiYWdlLiAgVGhlIGZpcnN0IGNvbGxlY3Rpb24gb2NjdXJzIGFmdGVyIHRoZSBoZWFwIGV4cGFuZHMKK2J5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmdnYy1taW4tZXhwYW5kPC9zcGFuPjwvc2FtcD4lIGJleW9uZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5nZ2MtbWluLWhlYXBzaXplPC9zcGFuPjwvc2FtcD4uICBBZ2FpbiwKK3R1bmluZyB0aGlzIG1heSBpbXByb3ZlIGNvbXBpbGF0aW9uIHNwZWVkLCBhbmQgaGFzIG5vIGVmZmVjdCBvbiBjb2RlCitnZW5lcmF0aW9uLgorCisgICAgICAgICAgPHA+VGhlIGRlZmF1bHQgaXMgdGhlIHNtYWxsZXIgb2YgUkFNLzgsIFJMSU1JVF9SU1MsIG9yIGEgbGltaXQgdGhhdAordHJpZXMgdG8gZW5zdXJlIHRoYXQgUkxJTUlUX0RBVEEgb3IgUkxJTUlUX0FTIGFyZSBub3QgZXhjZWVkZWQsIGJ1dAord2l0aCBhIGxvd2VyIGJvdW5kIG9mIDQwOTYgKGZvdXIgbWVnYWJ5dGVzKSBhbmQgYW4gdXBwZXIgYm91bmQgb2YKKzEzMTA3MiAoMTI4IG1lZ2FieXRlcykuICBJZiBHQ0MgaXMgbm90IGFibGUgdG8gY2FsY3VsYXRlIFJBTSBvbiBhCitwYXJ0aWN1bGFyIHBsYXRmb3JtLCB0aGUgbG93ZXIgYm91bmQgaXMgdXNlZC4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIKK3ZlcnkgbGFyZ2UgZWZmZWN0aXZlbHkgZGlzYWJsZXMgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgU2V0dGluZyB0aGlzCitwYXJhbWV0ZXIgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmdnYy1taW4tZXhwYW5kPC9zcGFuPjwvc2FtcD4gdG8gemVybyBjYXVzZXMgYSBmdWxsIGNvbGxlY3Rpb24KK3RvIG9jY3VyIGF0IGV2ZXJ5IG9wcG9ydHVuaXR5LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtcmVsb2FkLXNlYXJjaC1pbnNuczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9uIHJlbG9hZCBzaG91bGQgbG9vayBiYWNrd2FyZCBmb3IgZXF1aXZhbGVudAorcmVnaXN0ZXIuICBJbmNyZWFzaW5nIHZhbHVlcyBtZWFuIG1vcmUgYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24sIG1ha2luZyB0aGUKK2NvbXBpbGF0aW9uIHRpbWUgaW5jcmVhc2Ugd2l0aCBwcm9iYWJseSBzbGlnaHRseSBiZXR0ZXIgcGVyZm9ybWFuY2UuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtY3NlbGliLW1lbW9yeS1sb2NhdGlvbnM8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgbG9jYXRpb25zIGNzZWxpYiBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQuIAorSW5jcmVhc2luZyB2YWx1ZXMgbWVhbiBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBtYWtpbmcgdGhlIGNvbXBpbGF0aW9uIHRpbWUKK2luY3JlYXNlIHdpdGggcHJvYmFibHkgc2xpZ2h0bHkgYmV0dGVyIHBlcmZvcm1hbmNlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNTAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5yZW9yZGVyLWJsb2Nrcy1kdXBsaWNhdGU8L2NvZGU+PGR0Pjxjb2RlPnJlb3JkZXItYmxvY2tzLWR1cGxpY2F0ZS1mZWVkYmFjazwvY29kZT48ZGQ+CitVc2VkIGJ5IHRoZSBiYXNpYyBibG9jayByZW9yZGVyaW5nIHBhc3MgdG8gZGVjaWRlIHdoZXRoZXIgdG8gdXNlIHVuY29uZGl0aW9uYWwKK2JyYW5jaCBvciBkdXBsaWNhdGUgdGhlIGNvZGUgb24gaXRzIGRlc3RpbmF0aW9uLiAgQ29kZSBpcyBkdXBsaWNhdGVkIHdoZW4gaXRzCitlc3RpbWF0ZWQgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhpcyB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBlc3RpbWF0ZWQgc2l6ZSBvZgordW5jb25kaXRpb25hbCBqdW1wIGluIHRoZSBob3Qgc3BvdHMgb2YgdGhlIHByb2dyYW0uCisKKyAgICAgICAgICA8cD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+cmVvcmRlci1ibG9jay1kdXBsaWNhdGUtZmVlZGJhY2s8L3NwYW4+PC9zYW1wPiBpcyB1c2VkIG9ubHkgd2hlbiBwcm9maWxlCitmZWVkYmFjayBpcyBhdmFpbGFibGUuICBJdCBtYXkgYmUgc2V0IHRvIGhpZ2hlciB2YWx1ZXMgdGhhbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+cmVvcmRlci1ibG9jay1kdXBsaWNhdGU8L3NwYW4+PC9zYW1wPiBzaW5jZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaG90IHNwb3RzIGlzIG1vcmUKK2FjY3VyYXRlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtc2NoZWQtcmVhZHktaW5zbnM8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgcmVhZHkgdG8gYmUgaXNzdWVkIHRoZSBzY2hlZHVsZXIgc2hvdWxkCitjb25zaWRlciBhdCBhbnkgZ2l2ZW4gdGltZSBkdXJpbmcgdGhlIGZpcnN0IHNjaGVkdWxpbmcgcGFzcy4gIEluY3JlYXNpbmcKK3ZhbHVlcyBtZWFuIG1vcmUgdGhvcm91Z2ggc2VhcmNoZXMsIG1ha2luZyB0aGUgY29tcGlsYXRpb24gdGltZSBpbmNyZWFzZQord2l0aCBwcm9iYWJseSBsaXR0bGUgYmVuZWZpdC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXNjaGVkLXJlZ2lvbi1ibG9ja3M8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgaW4gYSByZWdpb24gdG8gYmUgY29uc2lkZXJlZCBmb3IKK2ludGVyYmxvY2sgc2NoZWR1bGluZy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtcGlwZWxpbmUtcmVnaW9uLWJsb2NrczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyBpbiBhIHJlZ2lvbiB0byBiZSBjb25zaWRlcmVkIGZvcgorcGlwZWxpbmluZyBpbiB0aGUgc2VsZWN0aXZlIHNjaGVkdWxlci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtc2NoZWQtcmVnaW9uLWluc25zPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgaW4gYSByZWdpb24gdG8gYmUgY29uc2lkZXJlZCBmb3IKK2ludGVyYmxvY2sgc2NoZWR1bGluZy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXBpcGVsaW5lLXJlZ2lvbi1pbnNuczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIGluIGEgcmVnaW9uIHRvIGJlIGNvbnNpZGVyZWQgZm9yCitwaXBlbGluaW5nIGluIHRoZSBzZWxlY3RpdmUgc2NoZWR1bGVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5taW4tc3BlYy1wcm9iPC9jb2RlPjxkZD5UaGUgbWluaW11bSBwcm9iYWJpbGl0eSAoaW4gcGVyY2VudHMpIG9mIHJlYWNoaW5nIGEgc291cmNlIGJsb2NrCitmb3IgaW50ZXJibG9jayBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNDAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1zY2hlZC1leHRlbmQtcmVnaW9ucy1pdGVyczwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdGhyb3VnaCBDRkcgdG8gZXh0ZW5kIHJlZ2lvbnMuIAorQSB2YWx1ZSBvZiAwICh0aGUgZGVmYXVsdCkgZGlzYWJsZXMgcmVnaW9uIGV4dGVuc2lvbnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1zY2hlZC1pbnNuLWNvbmZsaWN0LWRlbGF5PC9jb2RlPjxkZD5UaGUgbWF4aW11bSBjb25mbGljdCBkZWxheSBmb3IgYW4gaW5zbiB0byBiZSBjb25zaWRlcmVkIGZvciBzcGVjdWxhdGl2ZSBtb3Rpb24uIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+c2NoZWQtc3BlYy1wcm9iLWN1dG9mZjwvY29kZT48ZGQ+VGhlIG1pbmltYWwgcHJvYmFiaWxpdHkgb2Ygc3BlY3VsYXRpb24gc3VjY2VzcyAoaW4gcGVyY2VudHMpLCBzbyB0aGF0CitzcGVjdWxhdGl2ZSBpbnNucyBhcmUgc2NoZWR1bGVkLiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDQwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5zY2hlZC1zcGVjLXN0YXRlLWVkZ2UtcHJvYi1jdXRvZmY8L2NvZGU+PGRkPlRoZSBtaW5pbXVtIHByb2JhYmlsaXR5IGFuIGVkZ2UgbXVzdCBoYXZlIGZvciB0aGUgc2NoZWR1bGVyIHRvIHNhdmUgaXRzCitzdGF0ZSBhY3Jvc3MgaXQuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnNjaGVkLW1lbS10cnVlLWRlcC1jb3N0PC9jb2RlPjxkZD5NaW5pbWFsIGRpc3RhbmNlIChpbiBDUFUgY3ljbGVzKSBiZXR3ZWVuIHN0b3JlIGFuZCBsb2FkIHRhcmdldGluZyBzYW1lCittZW1vcnkgbG9jYXRpb25zLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+c2Vsc2NoZWQtbWF4LWxvb2thaGVhZDwvY29kZT48ZGQ+VGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgbG9va2FoZWFkIHdpbmRvdyBvZiBzZWxlY3RpdmUgc2NoZWR1bGluZy4gIEl0IGlzIGEKK2RlcHRoIG9mIHNlYXJjaCBmb3IgYXZhaWxhYmxlIGluc3RydWN0aW9ucy4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+c2Vsc2NoZWQtbWF4LXNjaGVkLXRpbWVzPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhhdCBhbiBpbnN0cnVjdGlvbiBpcyBzY2hlZHVsZWQgZHVyaW5nCitzZWxlY3RpdmUgc2NoZWR1bGluZy4gIFRoaXMgaXMgdGhlIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucwordGhyb3VnaCB3aGljaCB0aGUgaW5zdHJ1Y3Rpb24gbWF5IGJlIHBpcGVsaW5lZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnNlbHNjaGVkLW1heC1pbnNucy10by1yZW5hbWU8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiBiZXN0IGluc3RydWN0aW9ucyBpbiB0aGUgcmVhZHkgbGlzdCB0aGF0IGFyZSBjb25zaWRlcmVkCitmb3IgcmVuYW1pbmcgaW4gdGhlIHNlbGVjdGl2ZSBzY2hlZHVsZXIuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5zbXMtbWluLXNjPC9jb2RlPjxkZD5UaGUgbWluaW11bSB2YWx1ZSBvZiBzdGFnZSBjb3VudCB0aGF0IHN3aW5nIG1vZHVsbyBzY2hlZHVsZXIKK2dlbmVyYXRlcy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1sYXN0LXZhbHVlLXJ0bDwvY29kZT48ZGQ+VGhlIG1heGltdW0gc2l6ZSBtZWFzdXJlZCBhcyBudW1iZXIgb2YgUlRMcyB0aGF0IGNhbiBiZSByZWNvcmRlZCBpbiBhbiBleHByZXNzaW9uCitpbiBjb21iaW5lciBmb3IgYSBwc2V1ZG8gcmVnaXN0ZXIgYXMgbGFzdCBrbm93biB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyLiAgVGhlIGRlZmF1bHQKK2lzIDEwMDAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pbnRlZ2VyLXNoYXJlLWxpbWl0PC9jb2RlPjxkZD5TbWFsbCBpbnRlZ2VyIGNvbnN0YW50cyBjYW4gdXNlIGEgc2hhcmVkIGRhdGEgc3RydWN0dXJlLCByZWR1Y2luZyB0aGUKK2NvbXBpbGVyJ3MgbWVtb3J5IHVzYWdlIGFuZCBpbmNyZWFzaW5nIGl0cyBzcGVlZC4gIFRoaXMgc2V0cyB0aGUgbWF4aW11bQordmFsdWUgb2YgYSBzaGFyZWQgaW50ZWdlciBjb25zdGFudC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDI1Ni4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+c3NwLWJ1ZmZlci1zaXplPC9jb2RlPjxkZD5UaGUgbWluaW11bSBzaXplIG9mIGJ1ZmZlcnMgKGkuZS4gYXJyYXlzKSB0aGF0IHJlY2VpdmUgc3RhY2sgc21hc2hpbmcKK3Byb3RlY3Rpb24gd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0YWNrLXByb3RlY3Rpb248L3NwYW4+PC9zYW1wPiBpcyB1c2VkLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtanVtcC10aHJlYWQtZHVwbGljYXRpb24tc3RtdHM8L2NvZGU+PGRkPk1heGltdW0gbnVtYmVyIG9mIHN0YXRlbWVudHMgYWxsb3dlZCBpbiBhIGJsb2NrIHRoYXQgbmVlZHMgdG8gYmUKK2R1cGxpY2F0ZWQgd2hlbiB0aHJlYWRpbmcganVtcHMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1maWVsZHMtZm9yLWZpZWxkLXNlbnNpdGl2ZTwvY29kZT48ZGQ+TWF4aW11bSBudW1iZXIgb2YgZmllbGRzIGluIGEgc3RydWN0dXJlIHRyZWF0ZWQgaW4KK2EgZmllbGQgc2Vuc2l0aXZlIG1hbm5lciBkdXJpbmcgcG9pbnRlciBhbmFseXNpcy4gIFRoZSBkZWZhdWx0IGlzIHplcm8KK2ZvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzA8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8xPC9zcGFuPjwvc2FtcD4sCithbmQgMTAwIGZvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4sIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+cHJlZmV0Y2gtbGF0ZW5jeTwvY29kZT48ZGQ+RXN0aW1hdGUgb24gYXZlcmFnZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGV4ZWN1dGVkIGJlZm9yZQorcHJlZmV0Y2ggZmluaXNoZXMuICBUaGUgZGlzdGFuY2UgcHJlZmV0Y2hlZCBhaGVhZCBpcyBwcm9wb3J0aW9uYWwKK3RvIHRoaXMgY29uc3RhbnQuICBJbmNyZWFzaW5nIHRoaXMgbnVtYmVyIG1heSBhbHNvIGxlYWQgdG8gbGVzcworc3RyZWFtcyBiZWluZyBwcmVmZXRjaGVkIChzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+c2ltdWx0YW5lb3VzLXByZWZldGNoZXM8L3NwYW4+PC9zYW1wPikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnNpbXVsdGFuZW91cy1wcmVmZXRjaGVzPC9jb2RlPjxkZD5NYXhpbXVtIG51bWJlciBvZiBwcmVmZXRjaGVzIHRoYXQgY2FuIHJ1biBhdCB0aGUgc2FtZSB0aW1lLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sMS1jYWNoZS1saW5lLXNpemU8L2NvZGU+PGRkPlRoZSBzaXplIG9mIGNhY2hlIGxpbmUgaW4gTDEgY2FjaGUsIGluIGJ5dGVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sMS1jYWNoZS1zaXplPC9jb2RlPjxkZD5UaGUgc2l6ZSBvZiBMMSBjYWNoZSwgaW4ga2lsb2J5dGVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sMi1jYWNoZS1zaXplPC9jb2RlPjxkZD5UaGUgc2l6ZSBvZiBMMiBjYWNoZSwgaW4ga2lsb2J5dGVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5taW4taW5zbi10by1wcmVmZXRjaC1yYXRpbzwvY29kZT48ZGQ+VGhlIG1pbmltdW0gcmF0aW8gYmV0d2VlbiB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBhbmQgdGhlCitudW1iZXIgb2YgcHJlZmV0Y2hlcyB0byBlbmFibGUgcHJlZmV0Y2hpbmcgaW4gYSBsb29wLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5wcmVmZXRjaC1taW4taW5zbi10by1tZW0tcmF0aW88L2NvZGU+PGRkPlRoZSBtaW5pbXVtIHJhdGlvIGJldHdlZW4gdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgYW5kIHRoZQorbnVtYmVyIG9mIG1lbW9yeSByZWZlcmVuY2VzIHRvIGVuYWJsZSBwcmVmZXRjaGluZyBpbiBhIGxvb3AuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnVzZS1jYW5vbmljYWwtdHlwZXM8L2NvZGU+PGRkPldoZXRoZXIgdGhlIGNvbXBpbGVyIHNob3VsZCB1c2UgdGhlICZsZHF1bztjYW5vbmljYWwmcmRxdW87IHR5cGUgc3lzdGVtLiAgQnkKK2RlZmF1bHQsIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSAxLCB3aGljaCB1c2VzIGEgbW9yZSBlZmZpY2llbnQgaW50ZXJuYWwKK21lY2hhbmlzbSBmb3IgY29tcGFyaW5nIHR5cGVzIGluIEMrKyBhbmQgT2JqZWN0aXZlLUMrKy4gIEhvd2V2ZXIsIGlmCitidWdzIGluIHRoZSBjYW5vbmljYWwgdHlwZSBzeXN0ZW0gYXJlIGNhdXNpbmcgY29tcGlsYXRpb24gZmFpbHVyZXMsCitzZXQgdGhpcyB2YWx1ZSB0byAwIHRvIGRpc2FibGUgY2Fub25pY2FsIHR5cGVzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5zd2l0Y2gtY29udmVyc2lvbi1tYXgtYnJhbmNoLXJhdGlvPC9jb2RlPjxkZD5Td2l0Y2ggaW5pdGlhbGl6YXRpb24gY29udmVyc2lvbiByZWZ1c2VzIHRvIGNyZWF0ZSBhcnJheXMgdGhhdCBhcmUKK2JpZ2dlciB0aGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPnN3aXRjaC1jb252ZXJzaW9uLW1heC1icmFuY2gtcmF0aW88L3NwYW4+PC9zYW1wPiB0aW1lcyB0aGUgbnVtYmVyIG9mCiticmFuY2hlcyBpbiB0aGUgc3dpdGNoLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtcGFydGlhbC1hbnRpYy1sZW5ndGg8L2NvZGU+PGRkPk1heGltdW0gbGVuZ3RoIG9mIHRoZSBwYXJ0aWFsIGFudGljIHNldCBjb21wdXRlZCBkdXJpbmcgdGhlIHRyZWUKK3BhcnRpYWwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiBvcHRpbWl6YXRpb24gKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJlZS1wcmU8L3NwYW4+PC9zYW1wPikgd2hlbgorb3B0aW1pemluZyBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiBhbmQgYWJvdmUuICBGb3Igc29tZSBzb3J0cyBvZiBzb3VyY2UgY29kZQordGhlIGVuaGFuY2VkIHBhcnRpYWwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiBvcHRpbWl6YXRpb24gY2FuIHJ1biBhd2F5LAorY29uc3VtaW5nIGFsbCBvZiB0aGUgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgaG9zdCBtYWNoaW5lLiAgVGhpcworcGFyYW1ldGVyIHNldHMgYSBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBzZXRzIHRoYXQgYXJlIGNvbXB1dGVkLAord2hpY2ggcHJldmVudHMgdGhlIHJ1bmF3YXkgYmVoYXZpb3IuICBTZXR0aW5nIGEgdmFsdWUgb2YgMCBmb3IKK3RoaXMgcGFyYW1ldGVyIGFsbG93cyBhbiB1bmxpbWl0ZWQgc2V0IGxlbmd0aC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+c2Njdm4tbWF4LXNjYy1zaXplPC9jb2RlPjxkZD5NYXhpbXVtIHNpemUgb2YgYSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50IChTQ0MpIGR1cmluZyBTQ0NWTgorcHJvY2Vzc2luZy4gIElmIHRoaXMgbGltaXQgaXMgaGl0LCBTQ0NWTiBwcm9jZXNzaW5nIGZvciB0aGUgd2hvbGUKK2Z1bmN0aW9uIGlzIG5vdCBkb25lIGFuZCBvcHRpbWl6YXRpb25zIGRlcGVuZGluZyBvbiBpdCBhcmUKK2Rpc2FibGVkLiAgVGhlIGRlZmF1bHQgbWF4aW11bSBTQ0Mgc2l6ZSBpcyAxMDAwMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+c2Njdm4tbWF4LWFsaWFzLXF1ZXJpZXMtcGVyLWFjY2VzczwvY29kZT48ZGQ+TWF4aW11bSBudW1iZXIgb2YgYWxpYXMtb3JhY2xlIHF1ZXJpZXMgd2UgcGVyZm9ybSB3aGVuIGxvb2tpbmcgZm9yCityZWR1bmRhbmNpZXMgZm9yIGxvYWRzIGFuZCBzdG9yZXMuICBJZiB0aGlzIGxpbWl0IGlzIGhpdCB0aGUgc2VhcmNoCitpcyBhYm9ydGVkIGFuZCB0aGUgbG9hZCBvciBzdG9yZSBpcyBub3QgY29uc2lkZXJlZCByZWR1bmRhbnQuICBUaGUKK251bWJlciBvZiBxdWVyaWVzIGlzIGFsZ29yaXRobWljYWxseSBsaW1pdGVkIHRvIHRoZSBudW1iZXIgb2YKK3N0b3JlcyBvbiBhbGwgcGF0aHMgZnJvbSB0aGUgbG9hZCB0byB0aGUgZnVuY3Rpb24gZW50cnkuIAorVGhlIGRlZmF1bHQgbWF4bWltdW0gbnVtYmVyIG9mIHF1ZXJpZXMgaXMgMTAwMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+aXJhLW1heC1sb29wcy1udW08L2NvZGU+PGRkPklSQSB1c2VzIHJlZ2lvbmFsIHJlZ2lzdGVyIGFsbG9jYXRpb24gYnkgZGVmYXVsdC4gIElmIGEgZnVuY3Rpb24KK2NvbnRhaW5zIG1vcmUgbG9vcHMgdGhhbiB0aGUgbnVtYmVyIGdpdmVuIGJ5IHRoaXMgcGFyYW1ldGVyLCBvbmx5IGF0IG1vc3QKK3RoZSBnaXZlbiBudW1iZXIgb2YgdGhlIG1vc3QgZnJlcXVlbnRseS1leGVjdXRlZCBsb29wcyBmb3JtIHJlZ2lvbnMKK2ZvciByZWdpb25hbCByZWdpc3RlciBhbGxvY2F0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlCitwYXJhbWV0ZXIgaXMgMTAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pcmEtbWF4LWNvbmZsaWN0LXRhYmxlLXNpemU8L2NvZGU+PGRkPkFsdGhvdWdoIElSQSB1c2VzIGEgc29waGlzdGljYXRlZCBhbGdvcml0aG0gdG8gY29tcHJlc3MgdGhlIGNvbmZsaWN0Cit0YWJsZSwgdGhlIHRhYmxlIGNhbiBzdGlsbCByZXF1aXJlIGV4Y2Vzc2l2ZSBhbW91bnRzIG9mIG1lbW9yeSBmb3IKK2h1Z2UgZnVuY3Rpb25zLiAgSWYgdGhlIGNvbmZsaWN0IHRhYmxlIGZvciBhIGZ1bmN0aW9uIGNvdWxkIGJlIG1vcmUKK3RoYW4gdGhlIHNpemUgaW4gTUIgZ2l2ZW4gYnkgdGhpcyBwYXJhbWV0ZXIsIHRoZSByZWdpc3RlciBhbGxvY2F0b3IKK2luc3RlYWQgdXNlcyBhIGZhc3Rlciwgc2ltcGxlciwgYW5kIGxvd2VyLXF1YWxpdHkKK2FsZ29yaXRobSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgYnVpbGRpbmcgYSBwc2V1ZG8tcmVnaXN0ZXIgY29uZmxpY3QgdGFibGUuIAorVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBpcyAyMDAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pcmEtbG9vcC1yZXNlcnZlZC1yZWdzPC9jb2RlPjxkZD5JUkEgY2FuIGJlIHVzZWQgdG8gZXZhbHVhdGUgbW9yZSBhY2N1cmF0ZSByZWdpc3RlciBwcmVzc3VyZSBpbiBsb29wcworZm9yIGRlY2lzaW9ucyB0byBtb3ZlIGxvb3AgaW52YXJpYW50cyAoc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMzwvc3Bhbj48L3NhbXA+KS4gIFRoZSBudW1iZXIKK29mIGF2YWlsYWJsZSByZWdpc3RlcnMgcmVzZXJ2ZWQgZm9yIHNvbWUgb3RoZXIgcHVycG9zZXMgaXMgZ2l2ZW4KK2J5IHRoaXMgcGFyYW1ldGVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBpcyAyLCB3aGljaCBpcwordGhlIG1pbmltYWwgbnVtYmVyIG9mIHJlZ2lzdGVycyBuZWVkZWQgYnkgdHlwaWNhbCBpbnN0cnVjdGlvbnMuIAorVGhpcyB2YWx1ZSBpcyB0aGUgYmVzdCBmb3VuZCBmcm9tIG51bWVyb3VzIGV4cGVyaW1lbnRzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sb29wLWludmFyaWFudC1tYXgtYmJzLWluLWxvb3A8L2NvZGU+PGRkPkxvb3AgaW52YXJpYW50IG1vdGlvbiBjYW4gYmUgdmVyeSBleHBlbnNpdmUsIGJvdGggaW4gY29tcGlsYXRpb24gdGltZSBhbmQKK2luIGFtb3VudCBvZiBuZWVkZWQgY29tcGlsZS10aW1lIG1lbW9yeSwgd2l0aCB2ZXJ5IGxhcmdlIGxvb3BzLiAgTG9vcHMKK3dpdGggbW9yZSBiYXNpYyBibG9ja3MgdGhhbiB0aGlzIHBhcmFtZXRlciB3b24ndCBoYXZlIGxvb3AgaW52YXJpYW50Cittb3Rpb24gb3B0aW1pemF0aW9uIHBlcmZvcm1lZCBvbiB0aGVtLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlCitwYXJhbWV0ZXIgaXMgMTAwMCBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8xPC9zcGFuPjwvc2FtcD4gYW5kIDEwMDAwIGZvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzI8L3NwYW4+PC9zYW1wPiBhbmQgYWJvdmUuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmxvb3AtbWF4LWRhdGFyZWZzLWZvci1kYXRhZGVwczwvY29kZT48ZGQ+QnVpbGRpbmcgZGF0YSBkYXBlbmRlbmNpZXMgaXMgZXhwZW5zaXZlIGZvciB2ZXJ5IGxhcmdlIGxvb3BzLiAgVGhpcworcGFyYW1ldGVyIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGRhdGEgcmVmZXJlbmNlcyBpbiBsb29wcyB0aGF0IGFyZQorY29uc2lkZXJlZCBmb3IgZGF0YSBkZXBlbmRlbmNlIGFuYWx5c2lzLiAgVGhlc2UgbGFyZ2UgbG9vcHMgYXJlIG5vCitoYW5kbGVkIGJ5IHRoZSBvcHRpbWl6YXRpb25zIHVzaW5nIGxvb3AgZGF0YSBkZXBlbmRlbmNpZXMuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwMC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXZhcnRyYWNrLXNpemU8L2NvZGU+PGRkPlNldHMgYSBtYXhpbXVtIG51bWJlciBvZiBoYXNoIHRhYmxlIHNsb3RzIHRvIHVzZSBkdXJpbmcgdmFyaWFibGUKK3RyYWNraW5nIGRhdGFmbG93IGFuYWx5c2lzIG9mIGFueSBmdW5jdGlvbi4gIElmIHRoaXMgbGltaXQgaXMgZXhjZWVkZWQKK3dpdGggdmFyaWFibGUgdHJhY2tpbmcgYXQgYXNzaWdubWVudHMgZW5hYmxlZCwgYW5hbHlzaXMgZm9yIHRoYXQKK2Z1bmN0aW9uIGlzIHJldHJpZWQgd2l0aG91dCBpdCwgYWZ0ZXIgcmVtb3ZpbmcgYWxsIGRlYnVnIGluc25zIGZyb20KK3RoZSBmdW5jdGlvbi4gIElmIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBldmVuIHdpdGhvdXQgZGVidWcgaW5zbnMsIHZhcgordHJhY2tpbmcgYW5hbHlzaXMgaXMgY29tcGxldGVseSBkaXNhYmxlZCBmb3IgdGhlIGZ1bmN0aW9uLiAgU2V0dGluZwordGhlIHBhcmFtZXRlciB0byB6ZXJvIG1ha2VzIGl0IHVubGltaXRlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bWF4LXZhcnRyYWNrLWV4cHItZGVwdGg8L2NvZGU+PGRkPlNldHMgYSBtYXhpbXVtIG51bWJlciBvZiByZWN1cnNpb24gbGV2ZWxzIHdoZW4gYXR0ZW1wdGluZyB0byBtYXAKK3ZhcmlhYmxlIG5hbWVzIG9yIGRlYnVnIHRlbXBvcmFyaWVzIHRvIHZhbHVlIGV4cHJlc3Npb25zLiAgVGhpcyB0cmFkZXMKK2NvbXBpbGF0aW9uIHRpbWUgZm9yIG1vcmUgY29tcGxldGUgZGVidWcgaW5mb3JtYXRpb24uICBJZiB0aGlzIGlzIHNldCB0b28KK2xvdywgdmFsdWUgZXhwcmVzc2lvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGFuZCBjb3VsZCBiZSByZXByZXNlbnRlZCBpbgorZGVidWcgaW5mb3JtYXRpb24gbWF5IGVuZCB1cCBub3QgYmVpbmcgdXNlZDsgc2V0dGluZyB0aGlzIGhpZ2hlciBtYXkKK2VuYWJsZSB0aGUgY29tcGlsZXIgdG8gZmluZCBtb3JlIGNvbXBsZXggZGVidWcgZXhwcmVzc2lvbnMsIGJ1dCBjb21waWxlCit0aW1lIGFuZCBtZW1vcnkgdXNlIG1heSBncm93LiAgVGhlIGRlZmF1bHQgaXMgMTIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1pbi1ub25kZWJ1Zy1pbnNuLXVpZDwvY29kZT48ZGQ+VXNlIHVpZHMgc3RhcnRpbmcgYXQgdGhpcyBwYXJhbWV0ZXIgZm9yIG5vbmRlYnVnIGluc25zLiAgVGhlIHJhbmdlIGJlbG93Cit0aGUgcGFyYW1ldGVyIGlzIHJlc2VydmVkIGV4Y2x1c2l2ZWx5IGZvciBkZWJ1ZyBpbnNucyBjcmVhdGVkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnZhci10cmFja2luZy1hc3NpZ25tZW50czwvc3Bhbj48L3NhbXA+LCBidXQgZGVidWcgaW5zbnMgbWF5IGdldAorKG5vbi1vdmVybGFwcGluZykgdWlkcyBhYm92ZSBpdCBpZiB0aGUgcmVzZXJ2ZWQgcmFuZ2UgaXMgZXhoYXVzdGVkLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pcGEtc3JhLXB0ci1ncm93dGgtZmFjdG9yPC9jb2RlPjxkZD5JUEEtU1JBIHJlcGxhY2VzIGEgcG9pbnRlciB0byBhbiBhZ2dyZWdhdGUgd2l0aCBvbmUgb3IgbW9yZSBuZXcKK3BhcmFtZXRlcnMgb25seSB3aGVuIHRoZWlyIGN1bXVsYXRpdmUgc2l6ZSBpcyBsZXNzIG9yIGVxdWFsIHRvCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj5pcGEtc3JhLXB0ci1ncm93dGgtZmFjdG9yPC9zcGFuPjwvc2FtcD4gdGltZXMgdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFsCitwb2ludGVyIHBhcmFtZXRlci4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dG0tbWF4LWFnZ3JlZ2F0ZS1zaXplPC9jb2RlPjxkZD5XaGVuIG1ha2luZyBjb3BpZXMgb2YgdGhyZWFkLWxvY2FsIHZhcmlhYmxlcyBpbiBhIHRyYW5zYWN0aW9uLCB0aGlzCitwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBzaXplIGluIGJ5dGVzIGFmdGVyIHdoaWNoIHZhcmlhYmxlcyBhcmUKK3NhdmVkIHdpdGggdGhlIGxvZ2dpbmcgZnVuY3Rpb25zIGFzIG9wcG9zZWQgdG8gc2F2ZS9yZXN0b3JlIGNvZGUKK3NlcXVlbmNlIHBhaXJzLiAgVGhpcyBvcHRpb24gb25seSBhcHBsaWVzIHdoZW4gdXNpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZ251LXRtPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmdyYXBoaXRlLW1heC1uYi1zY29wLXBhcmFtczwvY29kZT48ZGQ+VG8gYXZvaWQgZXhwb25lbnRpYWwgZWZmZWN0cyBpbiB0aGUgR3JhcGhpdGUgbG9vcCB0cmFuc2Zvcm1zLCB0aGUKK251bWJlciBvZiBwYXJhbWV0ZXJzIGluIGEgU3RhdGljIENvbnRyb2wgUGFydCAoU0NvUCkgaXMgYm91bmRlZC4gIFRoZQorZGVmYXVsdCB2YWx1ZSBpcyAxMCBwYXJhbWV0ZXJzLiAgQSB2YXJpYWJsZSB3aG9zZSB2YWx1ZSBpcyB1bmtub3duIGF0Citjb21waWxhdGlvbiB0aW1lIGFuZCBkZWZpbmVkIG91dHNpZGUgYSBTQ29QIGlzIGEgcGFyYW1ldGVyIG9mIHRoZSBTQ29QLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5ncmFwaGl0ZS1tYXgtYmJzLXBlci1mdW5jdGlvbjwvY29kZT48ZGQ+VG8gYXZvaWQgZXhwb25lbnRpYWwgZWZmZWN0cyBpbiB0aGUgZGV0ZWN0aW9uIG9mIFNDb1BzLCB0aGUgc2l6ZSBvZgordGhlIGZ1bmN0aW9ucyBhbmFseXplZCBieSBHcmFwaGl0ZSBpcyBib3VuZGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKKzEwMCBiYXNpYyBibG9ja3MuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmxvb3AtYmxvY2stdGlsZS1zaXplPC9jb2RlPjxkZD5Mb29wIGJsb2NraW5nIG9yIHN0cmlwIG1pbmluZyB0cmFuc2Zvcm1zLCBlbmFibGVkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbG9vcC1ibG9jazwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbG9vcC1zdHJpcC1taW5lPC9zcGFuPjwvc2FtcD4sIHN0cmlwIG1pbmUgZWFjaAorbG9vcCBpbiB0aGUgbG9vcCBuZXN0IGJ5IGEgZ2l2ZW4gbnVtYmVyIG9mIGl0ZXJhdGlvbnMuICBUaGUgc3RyaXAKK2xlbmd0aCBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+bG9vcC1ibG9jay10aWxlLXNpemU8L3NwYW4+PC9zYW1wPgorcGFyYW1ldGVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNTEgaXRlcmF0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+aXBhLWNwLXZhbHVlLWxpc3Qtc2l6ZTwvY29kZT48ZGQ+SVBBLUNQIGF0dGVtcHRzIHRvIHRyYWNrIGFsbCBwb3NzaWJsZSB2YWx1ZXMgYW5kIHR5cGVzIHBhc3NlZCB0byBhIGZ1bmN0aW9uJ3MKK3BhcmFtZXRlciBpbiBvcmRlciB0byBwcm9wYWdhdGUgdGhlbSBhbmQgcGVyZm9ybSBkZXZpcnR1YWxpemF0aW9uLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmlwYS1jcC12YWx1ZS1saXN0LXNpemU8L3NwYW4+PC9zYW1wPiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmFsdWVzIGFuZCB0eXBlcyBpdAorc3RvcmVzIHBlciBvbmUgZm9ybWFsIHBhcmFtZXRlciBvZiBhIGZ1bmN0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sdG8tcGFydGl0aW9uczwvY29kZT48ZGQ+U3BlY2lmeSBkZXNpcmVkIG51bWJlciBvZiBwYXJ0aXRpb25zIHByb2R1Y2VkIGR1cmluZyBXSE9QUiBjb21waWxhdGlvbi4gCitUaGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgc2hvdWxkIGV4Y2VlZCB0aGUgbnVtYmVyIG9mIENQVXMgdXNlZCBmb3IgY29tcGlsYXRpb24uIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmx0by1taW5wYXJ0aXRpb248L2NvZGU+PGRkPlNpemUgb2YgbWluaW1hbCBwYXJ0aXRpb24gZm9yIFdIT1BSIChpbiBlc3RpbWF0ZWQgaW5zdHJ1Y3Rpb25zKS4gCitUaGlzIHByZXZlbnRzIGV4cGVuc2VzIG9mIHNwbGl0dGluZyB2ZXJ5IHNtYWxsIHByb2dyYW1zIGludG8gdG9vIG1hbnkKK3BhcnRpdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmN4eC1tYXgtbmFtZXNwYWNlcy1mb3ItZGlhZ25vc3RpYy1oZWxwPC9jb2RlPjxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgbmFtZXNwYWNlcyB0byBjb25zdWx0IGZvciBzdWdnZXN0aW9ucyB3aGVuIEMrKworbmFtZSBsb29rdXAgZmFpbHMgZm9yIGFuIGlkZW50aWZpZXIuICBUaGUgZGVmYXVsdCBpcyAxMDAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5zaW5rLWZyZXF1ZW5jeS10aHJlc2hvbGQ8L2NvZGU+PGRkPlRoZSBtYXhpbXVtIHJlbGF0aXZlIGV4ZWN1dGlvbiBmcmVxdWVuY3kgKGluIHBlcmNlbnRzKSBvZiB0aGUgdGFyZ2V0IGJsb2NrCityZWxhdGl2ZSB0byBhIHN0YXRlbWVudCdzIG9yaWdpbmFsIGJsb2NrIHRvIGFsbG93IHN0YXRlbWVudCBzaW5raW5nIG9mIGEKK3N0YXRlbWVudC4gIExhcmdlciBudW1iZXJzIHJlc3VsdCBpbiBtb3JlIGFnZ3Jlc3NpdmUgc3RhdGVtZW50IHNpbmtpbmcuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgNzUuICBBIHNtYWxsIHBvc2l0aXZlIGFkanVzdG1lbnQgaXMgYXBwbGllZCBmb3IKK3N0YXRlbWVudHMgd2l0aCBtZW1vcnkgb3BlcmFuZHMgYXMgdGhvc2UgYXJlIGV2ZW4gbW9yZSBwcm9maXRhYmxlIHNvIHNpbmsuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm1heC1zdG9yZXMtdG8tc2luazwvY29kZT48ZGQ+VGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmRpdGlvbmFsIHN0b3JlcyBwYWlyZXMgdGhhdCBjYW4gYmUgc3Vuay4gIFNldCB0byAwCitpZiBlaXRoZXIgdmVjdG9yaXphdGlvbiAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ0cmVlLXZlY3Rvcml6ZTwvc3Bhbj48L3NhbXA+KSBvciBpZi1jb252ZXJzaW9uCisoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ0cmVlLWxvb3AtaWYtY29udmVydDwvc3Bhbj48L3NhbXA+KSBpcyBkaXNhYmxlZC4gIFRoZSBkZWZhdWx0IGlzIDIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmFsbG93LWxvYWQtZGF0YS1yYWNlczwvY29kZT48ZGQ+QWxsb3cgb3B0aW1pemVycyB0byBpbnRyb2R1Y2UgbmV3IGRhdGEgcmFjZXMgb24gbG9hZHMuIAorU2V0IHRvIDEgdG8gYWxsb3csIG90aGVyd2lzZSB0byAwLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0Cit1bmxlc3MgaW1wbGljaXRseSBzZXQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbWVtb3J5LW1vZGVsPTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YWxsb3ctc3RvcmUtZGF0YS1yYWNlczwvY29kZT48ZGQ+QWxsb3cgb3B0aW1pemVycyB0byBpbnRyb2R1Y2UgbmV3IGRhdGEgcmFjZXMgb24gc3RvcmVzLiAKK1NldCB0byAxIHRvIGFsbG93LCBvdGhlcndpc2UgdG8gMC4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAordW5sZXNzIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm1lbW9yeS1tb2RlbD08L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmFsbG93LXBhY2tlZC1sb2FkLWRhdGEtcmFjZXM8L2NvZGU+PGRkPkFsbG93IG9wdGltaXplcnMgdG8gaW50cm9kdWNlIG5ldyBkYXRhIHJhY2VzIG9uIHBhY2tlZCBkYXRhIGxvYWRzLiAKK1NldCB0byAxIHRvIGFsbG93LCBvdGhlcndpc2UgdG8gMC4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAordW5sZXNzIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm1lbW9yeS1tb2RlbD08L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmFsbG93LXBhY2tlZC1zdG9yZS1kYXRhLXJhY2VzPC9jb2RlPjxkZD5BbGxvdyBvcHRpbWl6ZXJzIHRvIGludHJvZHVjZSBuZXcgZGF0YSByYWNlcyBvbiBwYWNrZWQgZGF0YSBzdG9yZXMuIAorU2V0IHRvIDEgdG8gYWxsb3csIG90aGVyd2lzZSB0byAwLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0Cit1bmxlc3MgaW1wbGljaXRseSBzZXQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbWVtb3J5LW1vZGVsPTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Y2FzZS12YWx1ZXMtdGhyZXNob2xkPC9jb2RlPjxkZD5UaGUgc21hbGxlc3QgbnVtYmVyIG9mIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHdoaWNoIGl0IGlzIGJlc3QgdG8gdXNlIGEKK2p1bXAtdGFibGUgaW5zdGVhZCBvZiBhIHRyZWUgb2YgY29uZGl0aW9uYWwgYnJhbmNoZXMuICBJZiB0aGUgdmFsdWUgaXMKKzAsIHVzZSB0aGUgZGVmYXVsdCBmb3IgdGhlIG1hY2hpbmUuICBUaGUgZGVmYXVsdCBpcyAwLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT50cmVlLXJlYXNzb2Mtd2lkdGg8L2NvZGU+PGRkPlNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIGluIHBhcmFsbGVsIGluCityZWFzc29jaWF0ZWQgdHJlZS4gVGhpcyBwYXJhbWV0ZXIgb3ZlcnJpZGVzIHRhcmdldCBkZXBlbmRlbnQKK2hldXJpc3RpY3MgdXNlZCBieSBkZWZhdWx0IGlmIGhhcyBub24gemVybyB2YWx1ZS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+c2NoZWQtcHJlc3N1cmUtYWxnb3JpdGhtPC9jb2RlPjxkZD5DaG9vc2UgYmV0d2VlbiB0aGUgdHdvIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbnMgb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2NoZWQtcHJlc3N1cmU8L3NwYW4+PC9zYW1wPi4gIEFsZ29yaXRobSAxIGlzIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgorYW5kIGlzIHRoZSBtb3JlIGxpa2VseSB0byBwcmV2ZW50IGluc3RydWN0aW9ucyBmcm9tIGJlaW5nIHJlb3JkZXJlZC4gCitBbGdvcml0aG0gMiB3YXMgZGVzaWduZWQgdG8gYmUgYSBjb21wcm9taXNlIGJldHdlZW4gdGhlIHJlbGF0aXZlbHkKK2NvbnNlcnZhdGl2ZSBhcHByb2FjaCB0YWtlbiBieSBhbGdvcml0aG0gMSBhbmQgdGhlIHJhdGhlciBhZ2dyZXNzaXZlCithcHByb2FjaCB0YWtlbiBieSB0aGUgZGVmYXVsdCBzY2hlZHVsZXIuICBJdCByZWxpZXMgbW9yZSBoZWF2aWx5IG9uCitoYXZpbmcgYSByZWd1bGFyIHJlZ2lzdGVyIGZpbGUgYW5kIGFjY3VyYXRlIHJlZ2lzdGVyIHByZXNzdXJlIGNsYXNzZXMuIAorU2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5oYWlmYS1zY2hlZC5jPC9zcGFuPjwvc2FtcD4gaW4gdGhlIEdDQyBzb3VyY2VzIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgICA8cD5UaGUgZGVmYXVsdCBjaG9pY2UgZGVwZW5kcyBvbiB0aGUgdGFyZ2V0LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5tYXgtc2xzci1jYW5kLXNjYW48L2NvZGU+PGRkPlNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXhpc3RpbmcgY2FuZGlkYXRlcyB0aGF0IHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuCitzZWVraW5nIGEgYmFzaXMgZm9yIGEgbmV3IHN0cmFpZ2h0LWxpbmUgc3RyZW5ndGggcmVkdWN0aW9uIGNhbmRpZGF0ZS4KKworICAgICA8L2RsPgorICAgICA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9PcHRpb24tSW5kZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT3B0aW9uLUluZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0OWQyMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT3B0aW9uLUluZGV4Lmh0bWwKQEAgLTAsMCArMSwyMjI3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PcHRpb24gSW5kZXggLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb250cmlidXRvcnMuaHRtbCNDb250cmlidXRvcnMiIHRpdGxlPSJDb250cmlidXRvcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJLZXl3b3JkLUluZGV4Lmh0bWwjS2V5d29yZC1JbmRleCIgdGl0bGU9IktleXdvcmQgSW5kZXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3B0aW9uLUluZGV4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IktleXdvcmQtSW5kZXguaHRtbCNLZXl3b3JkLUluZGV4Ij5LZXl3b3JkIEluZGV4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29udHJpYnV0b3JzLmh0bWwjQ29udHJpYnV0b3JzIj5Db250cmlidXRvcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+T3B0aW9uIEluZGV4PC9oMj4KKworPHA+R0NDJ3MgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlIGluZGV4ZWQgaGVyZSB3aXRob3V0IGFueSBpbml0aWFsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTwvc3Bhbj48L3NhbXA+JnJzcXVvOworb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFdoZXJlIGFuIG9wdGlvbiBoYXMgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXMKKyhzdWNoIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mPC9zcGFuPjx2YXI+b3B0aW9uPC92YXI+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby08L3NwYW4+PHZhcj5vcHRpb248L3Zhcj48L3NhbXA+KSwKK3JlbGV2YW50IGVudHJpZXMgaW4gdGhlIG1hbnVhbCBhcmUgaW5kZXhlZCB1bmRlciB0aGUgbW9zdCBhcHByb3ByaWF0ZQorZm9ybTsgaXQgbWF5IHNvbWV0aW1lcyBiZSB1c2VmdWwgdG8gbG9vayB1cCBib3RoIGZvcm1zLgorCis8dWwgY2xhc3M9ImluZGV4LW9wIiBjb21wYWN0PgorPGxpPjxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDIzXzAwMjNfMDAyMy04NSI+PGNvZGU+IyMjPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI092ZXJhbGwtT3B0aW9ucyI+T3ZlcmFsbCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkZm5vXzAwMmRrZWVwXzAwMmRpbmxpbmVfMDAyZGRsbGV4cG9ydC03NTIiPjxjb2RlPi1mbm8ta2VlcC1pbmxpbmUtZGxsZXhwb3J0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbWNwdS0yMDYxIj48Y29kZT4tbWNwdTwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZNUy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtcG9pbnRlcl8wMDJkc2l6ZV8wMDNkXzAwNDB2YXJfMDA3YnNpemVfMDA3ZC0yMjk3Ij48Y29kZT4tbXBvaW50ZXItc2l6ZT08L2NvZGU+PHZhcj5zaXplPC92YXI+PC9hPjogPGEgaHJlZj0iVk1TLU9wdGlvbnMuaHRtbCNWTVMtT3B0aW9ucyI+Vk1TIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1nX3Q4Yml0XzAwMmRpZGl2LTE0OTgiPjxjb2RlPjhiaXQtaWRpdjwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1BLTEwMDUiPjxjb2RlPkE8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWFsbF8wMDVmbG9hZC0xMjUwIj48Y29kZT5hbGxfbG9hZDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtYWxsb3dhYmxlXzAwNWZjbGllbnQtMTI1NyI+PGNvZGU+YWxsb3dhYmxlX2NsaWVudDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI2luZGV4LWFuc2ktMzU4MiI+PGNvZGU+YW5zaTwvY29kZT48L2E+OiA8YSBocmVmPSJOb25fMDAyZGJ1Z3MuaHRtbCNOb25fMDAyZGJ1Z3MiPk5vbi1idWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1hbnNpLTMzNDciPjxjb2RlPmFuc2k8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWFuc2ktOTczIj48Y29kZT5hbnNpPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1hbnNpLTEwMiI+PGNvZGU+YW5zaTwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LWFuc2ktNjEiPjxjb2RlPmFuc2k8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWFyY2hfMDA1ZmVycm9yc18wMDVmZmF0YWwtMTI1MSI+PGNvZGU+YXJjaF9lcnJvcnNfZmF0YWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWF1eF8wMDJkaW5mby0xMDUiPjxjb2RlPmF1eC1pbmZvPC9jb2RlPjwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtYXZ4MjU2XzAwMmRzcGxpdF8wMDJkdW5hbGlnbmVkXzAwMmRsb2FkLTE0OTkiPjxjb2RlPmF2eDI1Ni1zcGxpdC11bmFsaWduZWQtbG9hZDwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtYXZ4MjU2XzAwMmRzcGxpdF8wMDJkdW5hbGlnbmVkXzAwMmRzdG9yZS0xNTAwIj48Y29kZT5hdngyNTYtc3BsaXQtdW5hbGlnbmVkLXN0b3JlPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI2luZGV4LUItMTA2MCI+PGNvZGU+QjwvY29kZT48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZ4V29ya3MtT3B0aW9ucy5odG1sI2luZGV4LUJkeW5hbWljLTIzMDIiPjxjb2RlPkJkeW5hbWljPC9jb2RlPjwvYT46IDxhIGhyZWY9IlZ4V29ya3MtT3B0aW9ucy5odG1sI1Z4V29ya3MtT3B0aW9ucyI+VnhXb3JrcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1iaW5kXzAwNWZhdF8wMDVmbG9hZC0xMjUyIj48Y29kZT5iaW5kX2F0X2xvYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWeFdvcmtzLU9wdGlvbnMuaHRtbCNpbmRleC1Cc3RhdGljLTIzMDEiPjxjb2RlPkJzdGF0aWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iVnhXb3Jrcy1PcHRpb25zLmh0bWwjVnhXb3Jrcy1PcHRpb25zIj5WeFdvcmtzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWJ1bmRsZS0xMjUzIj48Y29kZT5idW5kbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWJ1bmRsZV8wMDVmbG9hZGVyLTEyNTQiPjxjb2RlPmJ1bmRsZV9sb2FkZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1jLTEwMjYiPjxjb2RlPmM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LUMtMTAxMiI+PGNvZGU+QzwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI2luZGV4LWMtNzkiPjxjb2RlPmM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWNsaWVudF8wMDVmbmFtZS0xMjU4Ij48Y29kZT5jbGllbnRfbmFtZTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtY29tcGF0aWJpbGl0eV8wMDVmdmVyc2lvbi0xMjU5Ij48Y29kZT5jb21wYXRpYmlsaXR5X3ZlcnNpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWNvdmVyYWdlLTU4MyI+PGNvZGU+Y292ZXJhZ2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWN1cnJlbnRfMDA1ZnZlcnNpb24tMTI2MCI+PGNvZGU+Y3VycmVudF92ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1ELTk0MSI+PGNvZGU+RDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZC01ODkiPjxjb2RlPmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWRBLTY1OSI+PGNvZGU+ZEE8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWRhLTY1NyI+PGNvZGU+ZGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWRELTEwMDciPjxjb2RlPmREPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1kRC02NjAiPjxjb2RlPmREPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1kZWFkXzAwNWZzdHJpcC0xMjYxIj48Y29kZT5kZWFkX3N0cmlwPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1kZXBlbmRlbmN5XzAwMmRmaWxlLTEyNjIiPjxjb2RlPmRlcGVuZGVuY3ktZmlsZTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZEgtNjYxIj48Y29kZT5kSDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtZEktMTAwOSI+PGNvZGU+ZEk8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWRNLTEwMDYiPjxjb2RlPmRNPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1kTi0xMDA4Ij48Y29kZT5kTjwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZFAtNjYzIj48Y29kZT5kUDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZHAtNjYyIj48Y29kZT5kcDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtZFUtMTAxMCI+PGNvZGU+ZFU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWR1bXBtYWNoaW5lLTcyMyI+PGNvZGU+ZHVtcG1hY2hpbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWR1bXBzcGVjcy03MjUiPjxjb2RlPmR1bXBzcGVjczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZHVtcHZlcnNpb24tNzI0Ij48Y29kZT5kdW1wdmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZHgtNjY0Ij48Y29kZT5keDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtZHlsaWJfMDA1ZmZpbGUtMTI2MyI+PGNvZGU+ZHlsaWJfZmlsZTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtZHlsaW5rZXJfMDA1Zmluc3RhbGxfMDA1Zm5hbWUtMTI2NCI+PGNvZGU+ZHlsaW5rZXJfaW5zdGFsbF9uYW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1keW5hbWljLTEyNjUiPjxjb2RlPmR5bmFtaWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWR5bmFtaWNsaWItMTI1NSI+PGNvZGU+ZHluYW1pY2xpYjwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LUUtMTAyOCI+PGNvZGU+RTwvY29kZT48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI2luZGV4LUUtODEiPjxjb2RlPkU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1FQi0xNzI4Ij48Y29kZT5FQjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LUVMLTE3MjkiPjxjb2RlPkVMPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1leHBvcnRlZF8wMDVmc3ltYm9sc18wMDVmbGlzdC0xMjY2Ij48Y29kZT5leHBvcnRlZF9zeW1ib2xzX2xpc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LUYtMTI0MSI+PGNvZGU+RjwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZhYmlfMDAyZHZlcnNpb24tMTMzIj48Y29kZT5mYWJpLXZlcnNpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZhZ2dyZXNzaXZlXzAwMmRsb29wXzAwMmRvcHRpbWl6YXRpb25zLTc3NyI+PGNvZGU+ZmFnZ3Jlc3NpdmUtbG9vcC1vcHRpbWl6YXRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZhbGlnbl8wMDJkZnVuY3Rpb25zLTg4MyI+PGNvZGU+ZmFsaWduLWZ1bmN0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mYWxpZ25fMDAyZGp1bXBzLTg4NiI+PGNvZGU+ZmFsaWduLWp1bXBzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZhbGlnbl8wMDJkbGFiZWxzLTg4NCI+PGNvZGU+ZmFsaWduLWxhYmVsczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mYWxpZ25fMDAyZGxvb3BzLTg4NSI+PGNvZGU+ZmFsaWduLWxvb3BzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZhc3NvY2lhdGl2ZV8wMDJkbWF0aC05MDciPjxjb2RlPmZhc3NvY2lhdGl2ZS1tYXRoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZhc3luY2hyb25vdXNfMDAyZHVud2luZF8wMDJkdGFibGVzLTIzMzQiPjxjb2RlPmZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlczwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mYXV0b18wMDJkaW5jXzAwMmRkZWMtNzgwIj48Y29kZT5mYXV0by1pbmMtZGVjPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZib3VuZHNfMDAyZGNoZWNrLTIzMjYiPjxjb2RlPmZib3VuZHMtY2hlY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmJyYW5jaF8wMDJkcHJvYmFiaWxpdGllcy05MTciPjxjb2RlPmZicmFuY2gtcHJvYmFiaWxpdGllczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mYnJhbmNoXzAwMmR0YXJnZXRfMDAyZGxvYWRfMDAyZG9wdGltaXplLTkyOSI+PGNvZGU+ZmJyYW5jaC10YXJnZXQtbG9hZC1vcHRpbWl6ZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mYnJhbmNoXzAwMmR0YXJnZXRfMDAyZGxvYWRfMDAyZG9wdGltaXplMi05MzAiPjxjb2RlPmZicmFuY2gtdGFyZ2V0LWxvYWQtb3B0aW1pemUyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZidHJfMDAyZGJiXzAwMmRleGNsdXNpdmUtOTMxIj48Y29kZT5mYnRyLWJiLWV4Y2x1c2l2ZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mY2FsbF8wMDJkc2F2ZWQtMjM1NCI+PGNvZGU+ZmNhbGwtc2F2ZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZmNhbGxfMDAyZHVzZWQtMjM1MyI+PGNvZGU+ZmNhbGwtdXNlZDwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mY2FsbGVyXzAwMmRzYXZlcy04MTkiPjxjb2RlPmZjYWxsZXItc2F2ZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmNoZWNrXzAwMmRkYXRhXzAwMmRkZXBzLTg1MiI+PGNvZGU+ZmNoZWNrLWRhdGEtZGVwczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZjaGVja18wMDJkbmV3LTEzNSI+PGNvZGU+ZmNoZWNrLW5ldzwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmNvbWJpbmVfMDAyZHN0YWNrXzAwMmRhZGp1c3RtZW50cy04MjAiPjxjb2RlPmZjb21iaW5lLXN0YWNrLWFkanVzdG1lbnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2luZGV4LWZjb21tb24tMjc2MSI+PGNvZGU+ZmNvbW1vbjwvY29kZT48L2E+OiA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmNvbXBhcmVfMDAyZGRlYnVnLTU2MCI+PGNvZGU+ZmNvbXBhcmUtZGVidWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZjb21wYXJlXzAwMmRkZWJ1Z18wMDJkc2Vjb25kLTU2MiI+PGNvZGU+ZmNvbXBhcmUtZGVidWctc2Vjb25kPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZjb21wYXJlXzAwMmRlbGltLTg5NCI+PGNvZGU+ZmNvbXBhcmUtZWxpbTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZmNvbmRfMDAyZG1pc21hdGNoLTEyMiI+PGNvZGU+ZmNvbmQtbWlzbWF0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmNvbnNlcnZlXzAwMmRzdGFjay04MjEiPjxjb2RlPmZjb25zZXJ2ZS1zdGFjazwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mY29uc3RhbnRfMDAyZHN0cmluZ18wMDJkY2xhc3MtMjA5Ij48Y29kZT5mY29uc3RhbnQtc3RyaW5nLWNsYXNzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mY29uc3RleHByXzAwMmRkZXB0aC0xMzYiPjxjb2RlPmZjb25zdGV4cHItZGVwdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZjcHJvcF8wMDJkcmVnaXN0ZXJzLTg5NSI+PGNvZGU+ZmNwcm9wLXJlZ2lzdGVyczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mY3Jvc3NqdW1waW5nLTc3OSI+PGNvZGU+ZmNyb3NzanVtcGluZzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mY3NlXzAwMmRmb2xsb3dfMDAyZGp1bXBzLTc2OSI+PGNvZGU+ZmNzZS1mb2xsb3ctanVtcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmNzZV8wMDJkc2tpcF8wMDJkYmxvY2tzLTc3MCI+PGNvZGU+ZmNzZS1za2lwLWJsb2NrczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mY3hfMDAyZGZvcnRyYW5fMDAyZHJ1bGVzLTkxNiI+PGNvZGU+ZmN4LWZvcnRyYW4tcnVsZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmN4XzAwMmRsaW1pdGVkXzAwMmRyYW5nZS05MTUiPjxjb2RlPmZjeC1saW1pdGVkLXJhbmdlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZkYXRhXzAwMmRzZWN0aW9ucy05MjgiPjxjb2RlPmZkYXRhLXNlY3Rpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZGJnXzAwMmRjbnQtNTg2Ij48Y29kZT5mZGJnLWNudDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmRiZ18wMDJkY250XzAwMmRsaXN0LTU4NSI+PGNvZGU+ZmRiZy1jbnQtbGlzdDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mZGNlLTc4MSI+PGNvZGU+ZmRjZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtZmRlYnVnXzAwMmRjcHAtOTk0Ij48Y29kZT5mZGVidWctY3BwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZGVidWdfMDAyZHByZWZpeF8wMDJkbWFwLTU2NiI+PGNvZGU+ZmRlYnVnLXByZWZpeC1tYXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkZWJ1Z18wMDJkdHlwZXNfMDAyZHNlY3Rpb24tNTQ2Ij48Y29kZT5mZGVidWctdHlwZXMtc2VjdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZkZWR1Y2VfMDAyZGluaXRfMDAyZGxpc3QtMTM3Ij48Y29kZT5mZGVkdWNlLWluaXQtbGlzdDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmRlbGF5ZWRfMDAyZGJyYW5jaC03OTYiPjxjb2RlPmZkZWxheWVkLWJyYW5jaDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mZGVsZXRlXzAwMmRkZWFkXzAwMmRleGNlcHRpb25zLTIzMzIiPjxjb2RlPmZkZWxldGUtZGVhZC1leGNlcHRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZkZWxldGVfMDAyZG51bGxfMDAyZHBvaW50ZXJfMDAyZGNoZWNrcy03ODUiPjxjb2RlPmZkZWxldGUtbnVsbC1wb2ludGVyLWNoZWNrczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mZGV2aXJ0dWFsaXplLTc4NiI+PGNvZGU+ZmRldmlydHVhbGl6ZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikxhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbCNpbmRleC1mZGlhZ25vc3RpY3NfMDAyZHNob3dfMDAyZGNhcmV0LTI0MiI+PGNvZGU+ZmRpYWdub3N0aWNzLXNob3ctY2FyZXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zLmh0bWwjaW5kZXgtZmRpYWdub3N0aWNzXzAwMmRzaG93XzAwMmRsb2NhdGlvbi0yMzgiPjxjb2RlPmZkaWFnbm9zdGljcy1zaG93LWxvY2F0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikxhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbCNMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zIj5MYW5ndWFnZSBJbmRlcGVuZGVudCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI2luZGV4LWZkaWFnbm9zdGljc18wMDJkc2hvd18wMDJkb3B0aW9uLTI0MCI+PGNvZGU+ZmRpYWdub3N0aWNzLXNob3ctb3B0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikxhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbCNMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zIj5MYW5ndWFnZSBJbmRlcGVuZGVudCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1mZGlyZWN0aXZlc18wMDJkb25seS05ODgiPjxjb2RlPmZkaXJlY3RpdmVzLW9ubHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkaXNhYmxlXzAwMmQtNTg3Ij48Y29kZT5mZGlzYWJsZS08L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnRlcm9wZXJhdGlvbi5odG1sI2luZGV4LWZkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMtMzUzNiI+PGNvZGU+ZmRvbGxhcnMtaW4taWRlbnRpZmllcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW50ZXJvcGVyYXRpb24uaHRtbCNJbnRlcm9wZXJhdGlvbiI+SW50ZXJvcGVyYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWZkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMtOTg5Ij48Y29kZT5mZG9sbGFycy1pbi1pZGVudGlmaWVyczwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mZHNlLTc4MiI+PGNvZGU+ZmRzZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZGNsYXNzXzAwMmRoaWVyYXJjaHktNjY5Ij48Y29kZT5mZHVtcC1jbGFzcy1oaWVyYXJjaHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRmaW5hbF8wMDJkaW5zbnMtNTU5Ij48Y29kZT5mZHVtcC1maW5hbC1pbnNuczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZGlwYS02NzAiPjxjb2RlPmZkdW1wLWlwYTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZG5vYWRkci02NjUiPjxjb2RlPmZkdW1wLW5vYWRkcjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHBhc3Nlcy02NzEiPjxjb2RlPmZkdW1wLXBhc3NlczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkYWxpZ25tZW50cy01OTAiPjxjb2RlPmZkdW1wLXJ0bC1hbGlnbm1lbnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRhbGwtNjU4Ij48Y29kZT5mZHVtcC1ydGwtYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRhc21jb25zLTU5MSI+PGNvZGU+ZmR1bXAtcnRsLWFzbWNvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGF1dG9fMDA1ZmluY18wMDVmZGVjLTU5MiI+PGNvZGU+ZmR1bXAtcnRsLWF1dG9faW5jX2RlYzwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkYmFycmllcnMtNTkzIj48Y29kZT5mZHVtcC1ydGwtYmFycmllcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGJicGFydC01OTQiPjxjb2RlPmZkdW1wLXJ0bC1iYnBhcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGJicm8tNTk1Ij48Y29kZT5mZHVtcC1ydGwtYmJybzwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkYnRsMi01OTYiPjxjb2RlPmZkdW1wLXJ0bC1idGwyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRieXBhc3MtNTk4Ij48Y29kZT5mZHVtcC1ydGwtYnlwYXNzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRjZTEtNjAxIj48Y29kZT5mZHVtcC1ydGwtY2UxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRjZTItNjAyIj48Y29kZT5mZHVtcC1ydGwtY2UyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRjZTMtNjAzIj48Y29kZT5mZHVtcC1ydGwtY2UzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRjb21iaW5lLTU5OSI+PGNvZGU+ZmR1bXAtcnRsLWNvbWJpbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGNvbXBnb3Rvcy02MDAiPjxjb2RlPmZkdW1wLXJ0bC1jb21wZ290b3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGNwcm9wXzAwNWZoYXJkcmVnLTYwNCI+PGNvZGU+ZmR1bXAtcnRsLWNwcm9wX2hhcmRyZWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGNzYS02MDUiPjxjb2RlPmZkdW1wLXJ0bC1jc2E8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGNzZTEtNjA2Ij48Y29kZT5mZHVtcC1ydGwtY3NlMTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkY3NlMi02MDciPjxjb2RlPmZkdW1wLXJ0bC1jc2UyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRkYnItNjA5Ij48Y29kZT5mZHVtcC1ydGwtZGJyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRkY2UtNjA4Ij48Y29kZT5mZHVtcC1ydGwtZGNlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRkY2UxLTYxMCI+PGNvZGU+ZmR1bXAtcnRsLWRjZTE8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGRjZTItNjExIj48Y29kZT5mZHVtcC1ydGwtZGNlMjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkZGZpbmlzaC02NTYiPjxjb2RlPmZkdW1wLXJ0bC1kZmluaXNoPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRkZmluaXQtNjU1Ij48Y29kZT5mZHVtcC1ydGwtZGZpbml0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRlaC02MTIiPjxjb2RlPmZkdW1wLXJ0bC1laDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkZWhfMDA1ZnJhbmdlcy02MTMiPjxjb2RlPmZkdW1wLXJ0bC1laF9yYW5nZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGV4cGFuZC02MTQiPjxjb2RlPmZkdW1wLXJ0bC1leHBhbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGZ3cHJvcDEtNjE1Ij48Y29kZT5mZHVtcC1ydGwtZndwcm9wMTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkZndwcm9wMi02MTYiPjxjb2RlPmZkdW1wLXJ0bC1md3Byb3AyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRnY3NlMS02MTciPjxjb2RlPmZkdW1wLXJ0bC1nY3NlMTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkZ2NzZTItNjE4Ij48Y29kZT5mZHVtcC1ydGwtZ2NzZTI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGluaXRfMDAyZHJlZ3MtNjE5Ij48Y29kZT5mZHVtcC1ydGwtaW5pdC1yZWdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRpbml0dmFscy02MjAiPjxjb2RlPmZkdW1wLXJ0bC1pbml0dmFsczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkaW50b18wMDVmY2ZnbGF5b3V0LTYyMSI+PGNvZGU+ZmR1bXAtcnRsLWludG9fY2ZnbGF5b3V0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRpcmEtNjIyIj48Y29kZT5mZHVtcC1ydGwtaXJhPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRqdW1wLTYyMyI+PGNvZGU+ZmR1bXAtcnRsLWp1bXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZGxvb3AyLTYyNCI+PGNvZGU+ZmR1bXAtcnRsLWxvb3AyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRtYWNoLTYyNSI+PGNvZGU+ZmR1bXAtcnRsLW1hY2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZG1vZGVfMDA1ZnN3LTYyNiI+PGNvZGU+ZmR1bXAtcnRsLW1vZGVfc3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZG91dG9mXzAwNWZjZmdsYXlvdXQtNjI4Ij48Y29kZT5mZHVtcC1ydGwtb3V0b2ZfY2ZnbGF5b3V0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRwZWVwaG9sZTItNjI5Ij48Y29kZT5mZHVtcC1ydGwtcGVlcGhvbGUyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRwb3N0cmVsb2FkLTYzMCI+PGNvZGU+ZmR1bXAtcnRsLXBvc3RyZWxvYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZHByb18wMDVmYW5kXzAwNWZlcGlsb2d1ZS02MzEiPjxjb2RlPmZkdW1wLXJ0bC1wcm9fYW5kX2VwaWxvZ3VlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRyZWdjbGFzcy02NTIiPjxjb2RlPmZkdW1wLXJ0bC1yZWdjbGFzczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkcmVnbW92ZS02MzIiPjxjb2RlPmZkdW1wLXJ0bC1yZWdtb3ZlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRybnJlZy02MjciPjxjb2RlPmZkdW1wLXJ0bC1ybnJlZzwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc2NoZWQxLTYzMyI+PGNvZGU+ZmR1bXAtcnRsLXNjaGVkMTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc2NoZWQyLTYzNCI+PGNvZGU+ZmR1bXAtcnRsLXNjaGVkMjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc2VlLTYzNSI+PGNvZGU+ZmR1bXAtcnRsLXNlZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc2VxYWJzdHItNjM2Ij48Y29kZT5mZHVtcC1ydGwtc2VxYWJzdHI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZHNob3J0ZW4tNjM3Ij48Y29kZT5mZHVtcC1ydGwtc2hvcnRlbjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc2libGluZy02MzgiPjxjb2RlPmZkdW1wLXJ0bC1zaWJsaW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzbXMtNjQ0Ij48Y29kZT5mZHVtcC1ydGwtc21zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzcGxpdDEtNjM5Ij48Y29kZT5mZHVtcC1ydGwtc3BsaXQxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzcGxpdDItNjQwIj48Y29kZT5mZHVtcC1ydGwtc3BsaXQyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzcGxpdDMtNjQxIj48Y29kZT5mZHVtcC1ydGwtc3BsaXQzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzcGxpdDQtNjQyIj48Y29kZT5mZHVtcC1ydGwtc3BsaXQ0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzcGxpdDUtNjQzIj48Y29kZT5mZHVtcC1ydGwtc3BsaXQ1PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzdGFjay02NDUiPjxjb2RlPmZkdW1wLXJ0bC1zdGFjazwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc3VicmVnMS02NDYiPjxjb2RlPmZkdW1wLXJ0bC1zdWJyZWcxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmRzdWJyZWcyLTY0NyI+PGNvZGU+ZmR1bXAtcnRsLXN1YnJlZzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZHN1YnJlZ3NfMDA1Zm9mXzAwNWZtb2RlXzAwNWZmaW5pc2gtNjU0Ij48Y29kZT5mZHVtcC1ydGwtc3VicmVnc19vZl9tb2RlX2ZpbmlzaDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkc3VicmVnc18wMDVmb2ZfMDA1Zm1vZGVfMDA1ZmluaXQtNjUzIj48Y29kZT5mZHVtcC1ydGwtc3VicmVnc19vZl9tb2RlX2luaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZHVuc2hhcmUtNjQ4Ij48Y29kZT5mZHVtcC1ydGwtdW5zaGFyZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHJ0bF8wMDJkdmFydHJhY2stNjQ5Ij48Y29kZT5mZHVtcC1ydGwtdmFydHJhY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmRydGxfMDAyZHZyZWdzLTY1MCI+PGNvZGU+ZmR1bXAtcnRsLXZyZWdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkcnRsXzAwMmR3ZWItNjUxIj48Y29kZT5mZHVtcC1ydGwtd2ViPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkc3RhdGlzdGljcy02NzIiPjxjb2RlPmZkdW1wLXN0YXRpc3RpY3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmFuc2xhdGlvbl8wMDJkdW5pdC02NjgiPjxjb2RlPmZkdW1wLXRyYW5zbGF0aW9uLXVuaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlLTY3MyI+PGNvZGU+ZmR1bXAtdHJlZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGFsaWFzLTY4MCI+PGNvZGU+ZmR1bXAtdHJlZS1hbGlhczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGFsbC03MDAiPjxjb2RlPmZkdW1wLXRyZWUtYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkY2NwLTY4MSI+PGNvZGU+ZmR1bXAtdHJlZS1jY3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRjZmctNjc3Ij48Y29kZT5mZHVtcC10cmVlLWNmZzwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGNoLTY3OCI+PGNvZGU+ZmR1bXAtdHJlZS1jaDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGNvcHlwcm9wLTY4NSI+PGNvZGU+ZmR1bXAtdHJlZS1jb3B5cHJvcDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGNvcHlyZW5hbWUtNjk1Ij48Y29kZT5mZHVtcC10cmVlLWNvcHlyZW5hbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRkY2UtNjg3Ij48Y29kZT5mZHVtcC10cmVlLWRjZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGRvbS02OTEiPjxjb2RlPmZkdW1wLXRyZWUtZG9tPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkZHNlLTY5MiI+PGNvZGU+ZmR1bXAtdHJlZS1kc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRmb3J3cHJvcC02OTQiPjxjb2RlPmZkdW1wLXRyZWUtZm9yd3Byb3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRmcmUtNjg0Ij48Y29kZT5mZHVtcC10cmVlLWZyZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZGdpbXBsZS02NzYiPjxjb2RlPmZkdW1wLXRyZWUtZ2ltcGxlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkbXVkZmxhcC02ODgiPjxjb2RlPmZkdW1wLXRyZWUtbXVkZmxhcDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZG5ydi02OTYiPjxjb2RlPmZkdW1wLXRyZWUtbnJ2PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkb3B0aW1pemVkLTY3NSI+PGNvZGU+ZmR1bXAtdHJlZS1vcHRpbWl6ZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRvcmlnaW5hbC02NzQiPjxjb2RlPmZkdW1wLXRyZWUtb3JpZ2luYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRwaGlvcHQtNjkzIj48Y29kZT5mZHVtcC10cmVlLXBoaW9wdDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZHByZS02ODMiPjxjb2RlPmZkdW1wLXRyZWUtcHJlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkc2luay02OTAiPjxjb2RlPmZkdW1wLXRyZWUtc2luazwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZHNscC02OTgiPjxjb2RlPmZkdW1wLXRyZWUtc2xwPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkc3JhLTY4OSI+PGNvZGU+ZmR1bXAtdHJlZS1zcmE8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRzc2EtNjc5Ij48Y29kZT5mZHVtcC10cmVlLXNzYTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHRyZWVfMDAyZHN0b3JlXzAwNWZjb3B5cHJvcC02ODYiPjxjb2RlPmZkdW1wLXRyZWUtc3RvcmVfY29weXByb3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmRzdG9yZWNjcC02ODIiPjxjb2RlPmZkdW1wLXRyZWUtc3RvcmVjY3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR0cmVlXzAwMmR2ZWN0LTY5NyI+PGNvZGU+ZmR1bXAtdHJlZS12ZWN0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mZHVtcF8wMDJkdHJlZV8wMDJkdnJwLTY5OSI+PGNvZGU+ZmR1bXAtdHJlZS12cnA8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZkdW1wXzAwMmR1bm51bWJlcmVkLTY2NiI+PGNvZGU+ZmR1bXAtdW5udW1iZXJlZDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR1bXBfMDAyZHVubnVtYmVyZWRfMDAyZGxpbmtzLTY2NyI+PGNvZGU+ZmR1bXAtdW5udW1iZXJlZC1saW5rczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmR3YXJmMl8wMDJkY2ZpXzAwMmRhc20tNTY3Ij48Y29kZT5mZHdhcmYyLWNmaS1hc208L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmVhcmx5XzAwMmRpbmxpbmluZy03NDkiPjxjb2RlPmZlYXJseS1pbmxpbmluZzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmVsaW1pbmF0ZV8wMDJkZHdhcmYyXzAwMmRkdXBzLTU2MyI+PGNvZGU+ZmVsaW1pbmF0ZS1kd2FyZjItZHVwczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZmVsaW1pbmF0ZV8wMDJkdW51c2VkXzAwMmRkZWJ1Z18wMDJkc3ltYm9scy01NDUiPjxjb2RlPmZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXN5bWJvbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZlbGltaW5hdGVfMDAyZHVudXNlZF8wMDJkZGVidWdfMDAyZHR5cGVzLTcyNiI+PGNvZGU+ZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZlbmFibGVfMDAyZC01ODgiPjxjb2RlPmZlbmFibGUtPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZleGNlcHRpb25zLTIzMzAiPjxjb2RlPmZleGNlcHRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZleGNlc3NfMDAyZHByZWNpc2lvbi05MDIiPjxjb2RlPmZleGNlc3MtcHJlY2lzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1mZXhlY18wMDJkY2hhcnNldC05OTYiPjxjb2RlPmZleGVjLWNoYXJzZXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmV4cGVuc2l2ZV8wMDJkb3B0aW1pemF0aW9ucy03ODciPjxjb2RlPmZleHBlbnNpdmUtb3B0aW1pemF0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZleHRfMDAyZG51bWVyaWNfMDAyZGxpdGVyYWxzLTE4OCI+PGNvZGU+ZmV4dC1udW1lcmljLWxpdGVyYWxzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtZmV4dGVuZGVkXzAwMmRpZGVudGlmaWVycy05OTAiPjxjb2RlPmZleHRlbmRlZC1pZGVudGlmaWVyczwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZleHRlcm5fMDAyZHRsc18wMDJkaW5pdC0xNDEiPjxjb2RlPmZleHRlcm4tdGxzLWluaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZmYXN0XzAwMmRtYXRoLTkwNCI+PGNvZGU+ZmZhc3QtbWF0aDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mZmF0XzAwMmRsdG9fMDAyZG9iamVjdHMtODkzIj48Y29kZT5mZmF0LWx0by1vYmplY3RzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZmaW5pdGVfMDAyZG1hdGhfMDAyZG9ubHktOTA5Ij48Y29kZT5mZmluaXRlLW1hdGgtb25seTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtZmZpeF8wMDJkYW5kXzAwMmRjb250aW51ZS0xMjQ4Ij48Y29kZT5mZml4LWFuZC1jb250aW51ZTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mZml4ZWQtMjM1MiI+PGNvZGU+ZmZpeGVkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlzYXBwb2ludG1lbnRzLmh0bWwjaW5kZXgtZmZsb2F0XzAwMmRzdG9yZS0zNTY2Ij48Y29kZT5mZmxvYXQtc3RvcmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGlzYXBwb2ludG1lbnRzLmh0bWwjRGlzYXBwb2ludG1lbnRzIj5EaXNhcHBvaW50bWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmZsb2F0XzAwMmRzdG9yZS05MDAiPjxjb2RlPmZmbG9hdC1zdG9yZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZmb3JfMDAyZHNjb3BlLTE0MyI+PGNvZGU+ZmZvci1zY29wZTwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmZvcndhcmRfMDAyZHByb3BhZ2F0ZS03NDAiPjxjb2RlPmZmb3J3YXJkLXByb3BhZ2F0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mZnBfMDAyZGNvbnRyYWN0LTc0MSI+PGNvZGU+ZmZwLWNvbnRyYWN0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LWZmcmVlc3RhbmRpbmctMjYxMCI+PGNvZGU+ZmZyZWVzdGFuZGluZzwvY29kZT48L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWZmcmVlc3RhbmRpbmctMjc0Ij48Y29kZT5mZnJlZXN0YW5kaW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mZnJlZXN0YW5kaW5nLTExMSI+PGNvZGU+ZmZyZWVzdGFuZGluZzwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LWZmcmVlc3RhbmRpbmctNjQiPjxjb2RlPmZmcmVlc3RhbmRpbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mZnJpZW5kXzAwMmRpbmplY3Rpb24tMTM4Ij48Y29kZT5mZnJpZW5kLWluamVjdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmZ1bmN0aW9uXzAwMmRzZWN0aW9ucy05MjciPjxjb2RlPmZmdW5jdGlvbi1zZWN0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mZ2NzZS03NzIiPjxjb2RlPmZnY3NlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZnY3NlXzAwMmRhZnRlcl8wMDJkcmVsb2FkLTc3NiI+PGNvZGU+Zmdjc2UtYWZ0ZXItcmVsb2FkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZnY3NlXzAwMmRsYXMtNzc1Ij48Y29kZT5mZ2NzZS1sYXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmdjc2VfMDAyZGxtLTc3MyI+PGNvZGU+Zmdjc2UtbG08L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmdjc2VfMDAyZHNtLTc3NCI+PGNvZGU+Zmdjc2Utc208L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZmdudV8wMDJkcnVudGltZS0yMTAiPjxjb2RlPmZnbnUtcnVudGltZTwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mZ251XzAwMmR0bS0xMTUiPjxjb2RlPmZnbnUtdG08L2NvZGU+PC9hPjogPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZnbnU4OV8wMDJkaW5saW5lLTEwNCI+PGNvZGU+ZmdudTg5LWlubGluZTwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mZ3JhcGhpdGVfMDAyZGlkZW50aXR5LTg0OSI+PGNvZGU+ZmdyYXBoaXRlLWlkZW50aXR5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1maG9zdGVkLTEwOSI+PGNvZGU+Zmhvc3RlZDwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1maWZfMDAyZGNvbnZlcnNpb24tNzgzIj48Y29kZT5maWYtY29udmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1maWZfMDAyZGNvbnZlcnNpb24yLTc4NCI+PGNvZGU+ZmlmLWNvbnZlcnNpb24yPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1maWxlbGlzdC0xMjY3Ij48Y29kZT5maWxlbGlzdDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtZmluZGlyZWN0XzAwMmRkYXRhLTEyNDkiPjxjb2RlPmZpbmRpcmVjdC1kYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZpbmRpcmVjdF8wMDJkaW5saW5pbmctNzQ2Ij48Y29kZT5maW5kaXJlY3QtaW5saW5pbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZmluaGliaXRfMDAyZHNpemVfMDAyZGRpcmVjdGl2ZS0yMzQyIj48Y29kZT5maW5oaWJpdC1zaXplLWRpcmVjdGl2ZTwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1maW5saW5lXzAwMmRmdW5jdGlvbnMtNzQ3Ij48Y29kZT5maW5saW5lLWZ1bmN0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1maW5saW5lXzAwMmRmdW5jdGlvbnNfMDAyZGNhbGxlZF8wMDJkb25jZS03NDgiPjxjb2RlPmZpbmxpbmUtZnVuY3Rpb25zLWNhbGxlZC1vbmNlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZpbmxpbmVfMDAyZGxpbWl0LTc1MSI+PGNvZGU+ZmlubGluZS1saW1pdDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1maW5saW5lXzAwMmRzbWFsbF8wMDJkZnVuY3Rpb25zLTc0NSI+PGNvZGU+ZmlubGluZS1zbWFsbC1mdW5jdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWZpbnB1dF8wMDJkY2hhcnNldC0xMDAwIj48Y29kZT5maW5wdXQtY2hhcnNldDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1maW5zdHJ1bWVudF8wMDJkZnVuY3Rpb25zLTI2NDUiPjxjb2RlPmZpbnN0cnVtZW50LWZ1bmN0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1maW5zdHJ1bWVudF8wMDJkZnVuY3Rpb25zLTIzNTYiPjxjb2RlPmZpbnN0cnVtZW50LWZ1bmN0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1maW5zdHJ1bWVudF8wMDJkZnVuY3Rpb25zXzAwMmRleGNsdWRlXzAwMmRmaWxlXzAwMmRsaXN0LTIzNTciPjxjb2RlPmZpbnN0cnVtZW50LWZ1bmN0aW9ucy1leGNsdWRlLWZpbGUtbGlzdDwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1maW5zdHJ1bWVudF8wMDJkZnVuY3Rpb25zXzAwMmRleGNsdWRlXzAwMmRmdW5jdGlvbl8wMDJkbGlzdC0yMzU4Ij48Y29kZT5maW5zdHJ1bWVudC1mdW5jdGlvbnMtZXhjbHVkZS1mdW5jdGlvbi1saXN0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZpcGFfMDAyZGNwLTgzNCI+PGNvZGU+ZmlwYS1jcDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1maXBhXzAwMmRjcF8wMDJkY2xvbmUtODM1Ij48Y29kZT5maXBhLWNwLWNsb25lPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZpcGFfMDAyZHByb2ZpbGUtODMzIj48Y29kZT5maXBhLXByb2ZpbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmlwYV8wMDJkcHRhLTgzMiI+PGNvZGU+ZmlwYS1wdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmlwYV8wMDJkcHVyZV8wMDJkY29uc3QtODMwIj48Y29kZT5maXBhLXB1cmUtY29uc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmlwYV8wMDJkcmVmZXJlbmNlLTgzMSI+PGNvZGU+ZmlwYS1yZWZlcmVuY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmlwYV8wMDJkc3JhLTc1MCI+PGNvZGU+ZmlwYS1zcmE8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmlyYV8wMDJkaG9pc3RfMDAyZHByZXNzdXJlLTc5MSI+PGNvZGU+ZmlyYS1ob2lzdC1wcmVzc3VyZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1maXJhXzAwMmRsb29wXzAwMmRwcmVzc3VyZS03OTIiPjxjb2RlPmZpcmEtbG9vcC1wcmVzc3VyZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1maXJhXzAwMmR2ZXJib3NlLTc5NSI+PGNvZGU+ZmlyYS12ZXJib3NlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZpdm9wdHMtODU1Ij48Y29kZT5maXZvcHRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5saW5lLmh0bWwjaW5kZXgtZmtlZXBfMDAyZGlubGluZV8wMDJkZnVuY3Rpb25zLTI3OTIiPjxjb2RlPmZrZWVwLWlubGluZS1mdW5jdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIj5JbmxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmtlZXBfMDAyZGlubGluZV8wMDJkZnVuY3Rpb25zLTc1MyI+PGNvZGU+ZmtlZXAtaW5saW5lLWZ1bmN0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1ma2VlcF8wMDJkc3RhdGljXzAwMmRjb25zdHMtNzU0Ij48Y29kZT5ma2VlcC1zdGF0aWMtY29uc3RzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1mbGF0XzAwNWZuYW1lc3BhY2UtMTI2OCI+PGNvZGU+ZmxhdF9uYW1lc3BhY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZsYXhfMDAyZHZlY3Rvcl8wMDJkY29udmVyc2lvbnMtMTIzIj48Y29kZT5mbGF4LXZlY3Rvci1jb252ZXJzaW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mbGVhZGluZ18wMDJkdW5kZXJzY29yZS0yMzY0Ij48Y29kZT5mbGVhZGluZy11bmRlcnNjb3JlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZsb29wXzAwMmRibG9jay04NDgiPjxjb2RlPmZsb29wLWJsb2NrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZsb29wXzAwMmRpbnRlcmNoYW5nZS04NDYiPjxjb2RlPmZsb29wLWludGVyY2hhbmdlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZsb29wXzAwMmRuZXN0XzAwMmRvcHRpbWl6ZS04NTAiPjxjb2RlPmZsb29wLW5lc3Qtb3B0aW1pemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmxvb3BfMDAyZHBhcmFsbGVsaXplXzAwMmRhbGwtODUxIj48Y29kZT5mbG9vcC1wYXJhbGxlbGl6ZS1hbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZmxvb3BfMDAyZHN0cmlwXzAwMmRtaW5lLTg0NyI+PGNvZGU+Zmxvb3Atc3RyaXAtbWluZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbHRvLTg5MSI+PGNvZGU+Zmx0bzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbHRvXzAwMmRwYXJ0aXRpb24tODkyIj48Y29kZT5mbHRvLXBhcnRpdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWZtYXhfMDAyZGVycm9ycy0yNDkiPjxjb2RlPmZtYXgtZXJyb3JzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mbWVtXzAwMmRyZXBvcnQtNTc1Ij48Y29kZT5mbWVtLXJlcG9ydDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZm1lbV8wMDJkcmVwb3J0XzAwMmR3cGEtNTc2Ij48Y29kZT5mbWVtLXJlcG9ydC13cGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm1lcmdlXzAwMmRhbGxfMDAyZGNvbnN0YW50cy03NTYiPjxjb2RlPmZtZXJnZS1hbGwtY29uc3RhbnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZtZXJnZV8wMDJkY29uc3RhbnRzLTc1NSI+PGNvZGU+Zm1lcmdlLWNvbnN0YW50czwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZm1lcmdlXzAwMmRkZWJ1Z18wMDJkc3RyaW5ncy01NjQiPjxjb2RlPmZtZXJnZS1kZWJ1Zy1zdHJpbmdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI2luZGV4LWZtZXNzYWdlXzAwMmRsZW5ndGgtMjM3Ij48Y29kZT5mbWVzc2FnZS1sZW5ndGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm1vZHVsb18wMDJkc2NoZWQtNzU3Ij48Y29kZT5mbW9kdWxvLXNjaGVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZtb2R1bG9fMDAyZHNjaGVkXzAwMmRhbGxvd18wMDJkcmVnbW92ZXMtNzU4Ij48Y29kZT5mbW9kdWxvLXNjaGVkLWFsbG93LXJlZ21vdmVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZtb3ZlXzAwMmRsb29wXzAwMmRpbnZhcmlhbnRzLTkyNSI+PGNvZGU+Zm1vdmUtbG9vcC1pbnZhcmlhbnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVW5uYW1lZC1GaWVsZHMuaHRtbCNpbmRleC1mbXNfMDAyZGV4dGVuc2lvbnMtMzQ4NiI+PGNvZGU+Zm1zLWV4dGVuc2lvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iVW5uYW1lZC1GaWVsZHMuaHRtbCNVbm5hbWVkLUZpZWxkcyI+VW5uYW1lZCBGaWVsZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbXNfMDAyZGV4dGVuc2lvbnMtMTQ5Ij48Y29kZT5mbXMtZXh0ZW5zaW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZtc18wMDJkZXh0ZW5zaW9ucy0xMTYiPjxjb2RlPmZtcy1leHRlbnNpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZtdWRmbGFwLTc2MiI+PGNvZGU+Zm11ZGZsYXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm11ZGZsYXBpci03NjQiPjxjb2RlPmZtdWRmbGFwaXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm11ZGZsYXB0aC03NjMiPjxjb2RlPmZtdWRmbGFwdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm5leHRfMDAyZHJ1bnRpbWUtMjExIj48Y29kZT5mbmV4dC1ydW50aW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGFjY2Vzc18wMDJkY29udHJvbC0xMzQiPjxjb2RlPmZuby1hY2Nlc3MtY29udHJvbDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkYXNtLTEwNiI+PGNvZGU+Zm5vLWFzbTwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGJyYW5jaF8wMDJkY291bnRfMDAyZHJlZy03NTkiPjxjb2RlPmZuby1icmFuY2gtY291bnQtcmVnPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mbm9fMDAyZGJ1aWx0aW4tMzM0NiI+PGNvZGU+Zm5vLWJ1aWx0aW48L2NvZGU+PC9hPjogPGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZm5vXzAwMmRidWlsdGluLTI2MTEiPjxjb2RlPmZuby1idWlsdGluPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRidWlsdGluLTI3NSI+PGNvZGU+Zm5vLWJ1aWx0aW48L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkYnVpbHRpbi0xMDciPjxjb2RlPmZuby1idWlsdGluPC9jb2RlPjwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGNhbm9uaWNhbF8wMDJkc3lzdGVtXzAwMmRoZWFkZXJzLTk5MSI+PGNvZGU+Zm5vLWNhbm9uaWNhbC1zeXN0ZW0taGVhZGVyczwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mbm9fMDAyZGNvbW1vbi0yNzYyIj48Y29kZT5mbm8tY29tbW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkY29tbW9uLTIzNDAiPjxjb2RlPmZuby1jb21tb248L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkY29tcGFyZV8wMDJkZGVidWctNTYxIj48Y29kZT5mbm8tY29tcGFyZS1kZWJ1ZzwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRkZWJ1Z18wMDJkdHlwZXNfMDAyZHNlY3Rpb24tNTQ3Ij48Y29kZT5mbm8tZGVidWctdHlwZXMtc2VjdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklubGluZS5odG1sI2luZGV4LWZub18wMDJkZGVmYXVsdF8wMDJkaW5saW5lLTI3OTgiPjxjb2RlPmZuby1kZWZhdWx0LWlubGluZTwvY29kZT48L2E+OiA8YSBocmVmPSJJbmxpbmUuaHRtbCNJbmxpbmUiPklubGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGRlZmF1bHRfMDAyZGlubGluZS03MzgiPjxjb2RlPmZuby1kZWZhdWx0LWlubGluZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkZGVmYXVsdF8wMDJkaW5saW5lLTE2OSI+PGNvZGU+Zm5vLWRlZmF1bHQtaW5saW5lPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGRlZmVyXzAwMmRwb3AtNzM5Ij48Y29kZT5mbm8tZGVmZXItcG9wPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkZGlhZ25vc3RpY3NfMDAyZHNob3dfMDAyZGNhcmV0LTI0MSI+PGNvZGU+Zm5vLWRpYWdub3N0aWNzLXNob3ctY2FyZXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRkaWFnbm9zdGljc18wMDJkc2hvd18wMDJkb3B0aW9uLTIzOSI+PGNvZGU+Zm5vLWRpYWdub3N0aWNzLXNob3ctb3B0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikxhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbCNMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zIj5MYW5ndWFnZSBJbmRlcGVuZGVudCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGR3YXJmMl8wMDJkY2ZpXzAwMmRhc20tNTY4Ij48Y29kZT5mbm8tZHdhcmYyLWNmaS1hc208L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGVsaWRlXzAwMmRjb25zdHJ1Y3RvcnMtMTM5Ij48Y29kZT5mbm8tZWxpZGUtY29uc3RydWN0b3JzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRlbGltaW5hdGVfMDAyZHVudXNlZF8wMDJkZGVidWdfMDAyZHR5cGVzLTcyNyI+PGNvZGU+Zm5vLWVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGVuZm9yY2VfMDAyZGVoXzAwMmRzcGVjcy0xNDAiPjxjb2RlPmZuby1lbmZvcmNlLWVoLXNwZWNzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkZXh0XzAwMmRudW1lcmljXzAwMmRsaXRlcmFscy0xODkiPjxjb2RlPmZuby1leHQtbnVtZXJpYy1saXRlcmFsczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGV4dGVybl8wMDJkdGxzXzAwMmRpbml0LTE0MiI+PGNvZGU+Zm5vLWV4dGVybi10bHMtaW5pdDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGZvcl8wMDJkc2NvcGUtMTQ0Ij48Y29kZT5mbm8tZm9yLXNjb3BlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGZ1bmN0aW9uXzAwMmRjc2UtNzYwIj48Y29kZT5mbm8tZnVuY3Rpb24tY3NlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRnbnVfMDAyZGtleXdvcmRzLTE0NSI+PGNvZGU+Zm5vLWdudS1rZXl3b3JkczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRndWVzc18wMDJkYnJhbmNoXzAwMmRwcm9iYWJpbGl0eS04NzciPjxjb2RlPmZuby1ndWVzcy1icmFuY2gtcHJvYmFiaWxpdHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRpZGVudC0yMzQxIj48Y29kZT5mbm8taWRlbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1JbnRlcmZhY2UuaHRtbCNpbmRleC1mbm9fMDAyZGltcGxlbWVudF8wMDJkaW5saW5lcy0zNTE2Ij48Y29kZT5mbm8taW1wbGVtZW50LWlubGluZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRpbXBsZW1lbnRfMDAyZGlubGluZXMtMTQ4Ij48Y29kZT5mbm8taW1wbGVtZW50LWlubGluZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRpbXBsaWNpdF8wMDJkaW5saW5lXzAwMmR0ZW1wbGF0ZXMtMTQ3Ij48Y29kZT5mbm8taW1wbGljaXQtaW5saW5lLXRlbXBsYXRlczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUZW1wbGF0ZS1JbnN0YW50aWF0aW9uLmh0bWwjaW5kZXgtZm5vXzAwMmRpbXBsaWNpdF8wMDJkdGVtcGxhdGVzLTM1MTkiPjxjb2RlPmZuby1pbXBsaWNpdC10ZW1wbGF0ZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iVGVtcGxhdGUtSW5zdGFudGlhdGlvbi5odG1sI1RlbXBsYXRlLUluc3RhbnRpYXRpb24iPlRlbXBsYXRlIEluc3RhbnRpYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGltcGxpY2l0XzAwMmR0ZW1wbGF0ZXMtMTQ2Ij48Y29kZT5mbm8taW1wbGljaXQtdGVtcGxhdGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGlubGluZS03NDQiPjxjb2RlPmZuby1pbmxpbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRpcmFfMDAyZHNoYXJlXzAwMmRzYXZlXzAwMmRzbG90cy03OTMiPjxjb2RlPmZuby1pcmEtc2hhcmUtc2F2ZS1zbG90czwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZGlyYV8wMDJkc2hhcmVfMDAyZHNwaWxsXzAwMmRzbG90cy03OTQiPjxjb2RlPmZuby1pcmEtc2hhcmUtc3BpbGwtc2xvdHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRqdW1wXzAwMmR0YWJsZXMtMjM1MSI+PGNvZGU+Zm5vLWp1bXAtdGFibGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkbWF0aF8wMDJkZXJybm8tOTA1Ij48Y29kZT5mbm8tbWF0aC1lcnJubzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRtZXJnZV8wMDJkZGVidWdfMDAyZHN0cmluZ3MtNTY1Ij48Y29kZT5mbm8tbWVyZ2UtZGVidWctc3RyaW5nczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZG5pbF8wMDJkcmVjZWl2ZXJzLTIxMiI+PGNvZGU+Zm5vLW5pbC1yZWNlaXZlcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkbm9uYW5zaV8wMDJkYnVpbHRpbnMtMTUwIj48Y29kZT5mbm8tbm9uYW5zaS1idWlsdGluczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZG9wZXJhdG9yXzAwMmRuYW1lcy0xNTIiPjxjb2RlPmZuby1vcGVyYXRvci1uYW1lczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZG9wdGlvbmFsXzAwMmRkaWFncy0xNTMiPjxjb2RlPmZuby1vcHRpb25hbC1kaWFnczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRwZWVwaG9sZS04NzUiPjxjb2RlPmZuby1wZWVwaG9sZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHBlZXBob2xlMi04NzYiPjxjb2RlPmZuby1wZWVwaG9sZTI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHByZXR0eV8wMDJkdGVtcGxhdGVzLTE1NSI+PGNvZGU+Zm5vLXByZXR0eS10ZW1wbGF0ZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRydHRpLTE1NyI+PGNvZGU+Zm5vLXJ0dGk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkc2NoZWRfMDAyZGludGVyYmxvY2stNzk5Ij48Y29kZT5mbm8tc2NoZWQtaW50ZXJibG9jazwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHNjaGVkXzAwMmRzcGVjLTgwMCI+PGNvZGU+Zm5vLXNjaGVkLXNwZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkc2V0XzAwMmRzdGFja18wMDJkZXhlY3V0YWJsZS0xNTE5Ij48Y29kZT5mbm8tc2V0LXN0YWNrLWV4ZWN1dGFibGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IFdpbmRvd3MgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRzaG93XzAwMmRjb2x1bW4tMTAwNCI+PGNvZGU+Zm5vLXNob3ctY29sdW1uPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHNpZ25lZF8wMDJkYml0ZmllbGRzLTEyOCI+PGNvZGU+Zm5vLXNpZ25lZC1iaXRmaWVsZHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmRzaWduZWRfMDAyZHplcm9zLTkxMCI+PGNvZGU+Zm5vLXNpZ25lZC16ZXJvczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHN0YWNrXzAwMmRsaW1pdC0yMzYyIj48Y29kZT5mbm8tc3RhY2stbGltaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHRocmVhZHNhZmVfMDAyZHN0YXRpY3MtMTYyIj48Y29kZT5mbm8tdGhyZWFkc2FmZS1zdGF0aWNzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHRvcGxldmVsXzAwMmRyZW9yZGVyLTg4OCI+PGNvZGU+Zm5vLXRvcGxldmVsLXJlb3JkZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmR0cmFwcGluZ18wMDJkbWF0aC05MTEiPjxjb2RlPmZuby10cmFwcGluZy1tYXRoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHVuc2lnbmVkXzAwMmRiaXRmaWVsZHMtMTI5Ij48Y29kZT5mbm8tdW5zaWduZWQtYml0ZmllbGRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmR1c2VfMDAyZGN4YV8wMDJkZ2V0XzAwMmRleGNlcHRpb25fMDAyZHB0ci0xNjQiPjxjb2RlPmZuby11c2UtY3hhLWdldC1leGNlcHRpb24tcHRyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmR2YXJfMDAyZHRyYWNraW5nXzAwMmRhc3NpZ25tZW50cy03MTAiPjxjb2RlPmZuby12YXItdHJhY2tpbmctYXNzaWdubWVudHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkdmFyXzAwMmR0cmFja2luZ18wMDJkYXNzaWdubWVudHNfMDAyZHRvZ2dsZS03MTIiPjxjb2RlPmZuby12YXItdHJhY2tpbmctYXNzaWdubWVudHMtdG9nZ2xlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm5vXzAwMmR3ZWFrLTE2NyI+PGNvZGU+Zm5vLXdlYWs8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1mbm9fMDAyZHdvcmtpbmdfMDAyZGRpcmVjdG9yeS0xMDAzIj48Y29kZT5mbm8td29ya2luZy1kaXJlY3Rvcnk8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkd3JpdGFibGVfMDAyZHJlbG9jYXRlZF8wMDJkcmRhdGEtMTUyMCI+PGNvZGU+Zm5vLXdyaXRhYmxlLXJlbG9jYXRlZC1yZGF0YTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgV2luZG93cyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZub18wMDJkemVyb18wMDJkaW5pdGlhbGl6ZWRfMDAyZGluXzAwMmRic3MtNzYxIj48Y29kZT5mbm8temVyby1pbml0aWFsaXplZC1pbi1ic3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZm5vbl8wMDJkY2FsbF8wMDJkZXhjZXB0aW9ucy0yMzMxIj48Y29kZT5mbm9uLWNhbGwtZXhjZXB0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZub3Rocm93XzAwMmRvcHQtMTUxIj48Y29kZT5mbm90aHJvdy1vcHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZvYmpjXzAwMmRhYmlfMDAyZHZlcnNpb24tMjEzIj48Y29kZT5mb2JqYy1hYmktdmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZvYmpjXzAwMmRjYWxsXzAwMmRjeHhfMDAyZGNkdG9ycy0yMTQiPjxjb2RlPmZvYmpjLWNhbGwtY3h4LWNkdG9yczwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZvYmpjXzAwMmRkaXJlY3RfMDAyZGRpc3BhdGNoLTIxNSI+PGNvZGU+Zm9iamMtZGlyZWN0LWRpc3BhdGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm9iamNfMDAyZGV4Y2VwdGlvbnMtMjE2Ij48Y29kZT5mb2JqYy1leGNlcHRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZm9iamNfMDAyZGdjLTIxNyI+PGNvZGU+Zm9iamMtZ2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mb2JqY18wMDJkbmlsY2hlY2stMjE4Ij48Y29kZT5mb2JqYy1uaWxjaGVjazwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZvYmpjXzAwMmRzdGQtMjE5Ij48Y29kZT5mb2JqYy1zdGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mb21pdF8wMDJkZnJhbWVfMDAyZHBvaW50ZXItNzQyIj48Y29kZT5mb21pdC1mcmFtZS1wb2ludGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mb3Blbm1wLTExMyI+PGNvZGU+Zm9wZW5tcDwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZm9wdF8wMDJkaW5mby03MDEiPjxjb2RlPmZvcHQtaW5mbzwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mb3B0aW1pemVfMDAyZHJlZ2lzdGVyXzAwMmRtb3ZlLTc4OSI+PGNvZGU+Zm9wdGltaXplLXJlZ2lzdGVyLW1vdmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZm9wdGltaXplXzAwMmRzaWJsaW5nXzAwMmRjYWxscy03NDMiPjxjb2RlPmZvcHRpbWl6ZS1zaWJsaW5nLWNhbGxzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1mb3JjZV8wMDVmY3B1c3VidHlwZV8wMDVmQUxMLTEyNTYiPjxjb2RlPmZvcmNlX2NwdXN1YnR5cGVfQUxMPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1mb3JjZV8wMDVmZmxhdF8wMDVmbmFtZXNwYWNlLTEyNjkiPjxjb2RlPmZvcmNlX2ZsYXRfbmFtZXNwYWNlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZwYWNrXzAwMmRzdHJ1Y3QtMjM1NSI+PGNvZGU+ZnBhY2stc3RydWN0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZwYXJ0aWFsXzAwMmRpbmxpbmluZy04NzIiPjxjb2RlPmZwYXJ0aWFsLWlubGluaW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNpbmRleC1mcGNjXzAwMmRzdHJ1Y3RfMDAyZHJldHVybi0zNTU5Ij48Y29kZT5mcGNjLXN0cnVjdC1yZXR1cm48L2NvZGU+PC9hPjogPGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZnBjY18wMDJkc3RydWN0XzAwMmRyZXR1cm4tMjMzNSI+PGNvZGU+ZnBjYy1zdHJ1Y3QtcmV0dXJuPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1mcGNoXzAwMmRkZXBzLTk3MCI+PGNvZGU+ZnBjaC1kZXBzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1mcGNoXzAwMmRwcmVwcm9jZXNzLTk3MSI+PGNvZGU+ZnBjaC1wcmVwcm9jZXNzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZwZWVsXzAwMmRsb29wcy05MjQiPjxjb2RlPmZwZWVsLWxvb3BzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZnBlcm1pc3NpdmUtMTU0Ij48Y29kZT5mcGVybWlzc2l2ZTwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZlBJQy0yMzQ4Ij48Y29kZT5mUElDPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZwaWMtMjM0NSI+PGNvZGU+ZnBpYzwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mUElFLTIzNTAiPjxjb2RlPmZQSUU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZnBpZS0yMzQ5Ij48Y29kZT5mcGllPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVW5uYW1lZC1GaWVsZHMuaHRtbCNpbmRleC1mcGxhbjlfMDAyZGV4dGVuc2lvbnMtMzQ4NyI+PGNvZGU+ZnBsYW45LWV4dGVuc2lvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iVW5uYW1lZC1GaWVsZHMuaHRtbCNVbm5hbWVkLUZpZWxkcyI+VW5uYW1lZCBGaWVsZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZwb3N0XzAwMmRpcGFfMDAyZG1lbV8wMDJkcmVwb3J0LTU3OCI+PGNvZGU+ZnBvc3QtaXBhLW1lbS1yZXBvcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZwcmVfMDAyZGlwYV8wMDJkbWVtXzAwMmRyZXBvcnQtNTc3Ij48Y29kZT5mcHJlLWlwYS1tZW0tcmVwb3J0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZwcmVkaWN0aXZlXzAwMmRjb21tb25pbmctODczIj48Y29kZT5mcHJlZGljdGl2ZS1jb21tb25pbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnByZWZldGNoXzAwMmRsb29wXzAwMmRhcnJheXMtODc0Ij48Y29kZT5mcHJlZmV0Y2gtbG9vcC1hcnJheXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWZwcmVwcm9jZXNzZWQtOTkyIj48Y29kZT5mcHJlcHJvY2Vzc2VkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNpbmRleC1mcHJvZmlsZV8wMDJkYXJjcy0zMzU0Ij48Y29kZT5mcHJvZmlsZS1hcmNzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mcHJvZmlsZV8wMDJkYXJjcy01ODEiPjxjb2RlPmZwcm9maWxlLWFyY3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnByb2ZpbGVfMDAyZGNvcnJlY3Rpb24tODk2Ij48Y29kZT5mcHJvZmlsZS1jb3JyZWN0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZwcm9maWxlXzAwMmRkaXItODk3Ij48Y29kZT5mcHJvZmlsZS1kaXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnByb2ZpbGVfMDAyZGdlbmVyYXRlLTg5OCI+PGNvZGU+ZnByb2ZpbGUtZ2VuZXJhdGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZwcm9maWxlXzAwMmRyZXBvcnQtNTc5Ij48Y29kZT5mcHJvZmlsZS1yZXBvcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnByb2ZpbGVfMDAyZHVzZS04OTkiPjxjb2RlPmZwcm9maWxlLXVzZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mcHJvZmlsZV8wMDJkdmFsdWVzLTkxOCI+PGNvZGU+ZnByb2ZpbGUtdmFsdWVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI2luZGV4LWZwdS0yMDU5Ij48Y29kZT5mcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI1JYLU9wdGlvbnMiPlJYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZyYW5kb21fMDAyZHNlZWQtNzAzIj48Y29kZT5mcmFuZG9tLXNlZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnJlY2lwcm9jYWxfMDAyZG1hdGgtOTA4Ij48Y29kZT5mcmVjaXByb2NhbC1tYXRoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZyZWNvcmRfMDAyZGdjY18wMDJkc3dpdGNoZXMtMjM0NCI+PGNvZGU+ZnJlY29yZC1nY2Mtc3dpdGNoZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnJlZS03ODgiPjxjb2RlPmZyZWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZnJlZ18wMDJkc3RydWN0XzAwMmRyZXR1cm4tMjMzNiI+PGNvZGU+ZnJlZy1zdHJ1Y3QtcmV0dXJuPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZyZWdtb3ZlLTc5MCI+PGNvZGU+ZnJlZ21vdmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnJlbmFtZV8wMDJkcmVnaXN0ZXJzLTkyMCI+PGNvZGU+ZnJlbmFtZS1yZWdpc3RlcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnJlb3JkZXJfMDAyZGJsb2Nrcy04NzgiPjxjb2RlPmZyZW9yZGVyLWJsb2NrczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mcmVvcmRlcl8wMDJkYmxvY2tzXzAwMmRhbmRfMDAyZHBhcnRpdGlvbi04NzkiPjxjb2RlPmZyZW9yZGVyLWJsb2Nrcy1hbmQtcGFydGl0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZyZW9yZGVyXzAwMmRmdW5jdGlvbnMtODgwIj48Y29kZT5mcmVvcmRlci1mdW5jdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZnJlcGxhY2VfMDAyZG9iamNfMDAyZGNsYXNzZXMtMjIwIj48Y29kZT5mcmVwbGFjZS1vYmpjLWNsYXNzZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRlbXBsYXRlLUluc3RhbnRpYXRpb24uaHRtbCNpbmRleC1mcmVwby0zNTE4Ij48Y29kZT5mcmVwbzwvY29kZT48L2E+OiA8YSBocmVmPSJUZW1wbGF0ZS1JbnN0YW50aWF0aW9uLmh0bWwjVGVtcGxhdGUtSW5zdGFudGlhdGlvbiI+VGVtcGxhdGUgSW5zdGFudGlhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZyZXBvLTE1NiI+PGNvZGU+ZnJlcG88L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZyZXJ1bl8wMDJkY3NlXzAwMmRhZnRlcl8wMDJkbG9vcC03NzEiPjxjb2RlPmZyZXJ1bi1jc2UtYWZ0ZXItbG9vcDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mcmVzY2hlZHVsZV8wMDJkbW9kdWxvXzAwMmRzY2hlZHVsZWRfMDAyZGxvb3BzLTgxMyI+PGNvZGU+ZnJlc2NoZWR1bGUtbW9kdWxvLXNjaGVkdWxlZC1sb29wczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mcm91bmRpbmdfMDAyZG1hdGgtOTEyIj48Y29kZT5mcm91bmRpbmctbWF0aDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2NoZWRfMDAyZGNyaXRpY2FsXzAwMmRwYXRoXzAwMmRoZXVyaXN0aWMtODA4Ij48Y29kZT5mc2NoZWQtY3JpdGljYWwtcGF0aC1oZXVyaXN0aWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNjaGVkXzAwMmRkZXBfMDAyZGNvdW50XzAwMmRoZXVyaXN0aWMtODEyIj48Y29kZT5mc2NoZWQtZGVwLWNvdW50LWhldXJpc3RpYzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2NoZWRfMDAyZGdyb3VwXzAwMmRoZXVyaXN0aWMtODA3Ij48Y29kZT5mc2NoZWQtZ3JvdXAtaGV1cmlzdGljPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZzY2hlZF8wMDJkbGFzdF8wMDJkaW5zbl8wMDJkaGV1cmlzdGljLTgxMSI+PGNvZGU+ZnNjaGVkLWxhc3QtaW5zbi1oZXVyaXN0aWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNjaGVkXzAwMmRwcmVzc3VyZS04MDEiPjxjb2RlPmZzY2hlZC1wcmVzc3VyZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2NoZWRfMDAyZHJhbmtfMDAyZGhldXJpc3RpYy04MTAiPjxjb2RlPmZzY2hlZC1yYW5rLWhldXJpc3RpYzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2NoZWRfMDAyZHNwZWNfMDAyZGluc25fMDAyZGhldXJpc3RpYy04MDkiPjxjb2RlPmZzY2hlZC1zcGVjLWluc24taGV1cmlzdGljPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZzY2hlZF8wMDJkc3BlY18wMDJkbG9hZC04MDIiPjxjb2RlPmZzY2hlZC1zcGVjLWxvYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNjaGVkXzAwMmRzcGVjXzAwMmRsb2FkXzAwMmRkYW5nZXJvdXMtODAzIj48Y29kZT5mc2NoZWQtc3BlYy1sb2FkLWRhbmdlcm91czwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2NoZWRfMDAyZHN0YWxsZWRfMDAyZGluc25zLTgwNCI+PGNvZGU+ZnNjaGVkLXN0YWxsZWQtaW5zbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNjaGVkXzAwMmRzdGFsbGVkXzAwMmRpbnNuc18wMDJkZGVwLTgwNSI+PGNvZGU+ZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mc2NoZWRfMDAyZHZlcmJvc2UtNzA0Ij48Y29kZT5mc2NoZWQtdmVyYm9zZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2NoZWQyXzAwMmR1c2VfMDAyZHN1cGVyYmxvY2tzLTgwNiI+PGNvZGU+ZnNjaGVkMi11c2Utc3VwZXJibG9ja3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNjaGVkdWxlXzAwMmRpbnNucy03OTciPjxjb2RlPmZzY2hlZHVsZS1pbnNuczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2NoZWR1bGVfMDAyZGluc25zMi03OTgiPjxjb2RlPmZzY2hlZHVsZS1pbnNuczI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNlY3Rpb25fMDAyZGFuY2hvcnMtOTM0Ij48Y29kZT5mc2VjdGlvbi1hbmNob3JzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZzZWxfMDAyZHNjaGVkXzAwMmRwaXBlbGluaW5nLTgxNiI+PGNvZGU+ZnNlbC1zY2hlZC1waXBlbGluaW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZzZWxfMDAyZHNjaGVkXzAwMmRwaXBlbGluaW5nXzAwMmRvdXRlcl8wMDJkbG9vcHMtODE3Ij48Y29kZT5mc2VsLXNjaGVkLXBpcGVsaW5pbmctb3V0ZXItbG9vcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNlbGVjdGl2ZV8wMDJkc2NoZWR1bGluZy04MTQiPjxjb2RlPmZzZWxlY3RpdmUtc2NoZWR1bGluZzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2VsZWN0aXZlXzAwMmRzY2hlZHVsaW5nMi04MTUiPjxjb2RlPmZzZWxlY3RpdmUtc2NoZWR1bGluZzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZnNob3J0XzAwMmRkb3VibGUtMjMzOCI+PGNvZGU+ZnNob3J0LWRvdWJsZTwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI2luZGV4LWZzaG9ydF8wMDJkZW51bXMtMzU3OSI+PGNvZGU+ZnNob3J0LWVudW1zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI05vbl8wMDJkYnVncyI+Tm9uLWJ1Z3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNpbmRleC1mc2hvcnRfMDAyZGVudW1zLTI3ODEiPjxjb2RlPmZzaG9ydC1lbnVtczwvY29kZT48L2E+OiA8YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPlR5cGUgQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24uaHRtbCNpbmRleC1mc2hvcnRfMDAyZGVudW1zLTIzOTYiPjxjb2RlPmZzaG9ydC1lbnVtczwvY29kZT48L2E+OiA8YSBocmVmPSJTdHJ1Y3R1cmVzLXVuaW9ucy1lbnVtZXJhdGlvbnMtYW5kLWJpdF8wMDJkZmllbGRzLWltcGxlbWVudGF0aW9uLmh0bWwjU3RydWN0dXJlcy11bmlvbnMtZW51bWVyYXRpb25zLWFuZC1iaXRfMDAyZGZpZWxkcy1pbXBsZW1lbnRhdGlvbiI+U3RydWN0dXJlcyB1bmlvbnMgZW51bWVyYXRpb25zIGFuZCBiaXQtZmllbGRzIGltcGxlbWVudGF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZzaG9ydF8wMDJkZW51bXMtMjMzNyI+PGNvZGU+ZnNob3J0LWVudW1zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZzaG9ydF8wMDJkd2NoYXItMjMzOSI+PGNvZGU+ZnNob3J0LXdjaGFyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZzaHJpbmtfMDAyZHdyYXAtODE4Ij48Y29kZT5mc2hyaW5rLXdyYXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNpZ25hbGluZ18wMDJkbmFucy05MTMiPjxjb2RlPmZzaWduYWxpbmctbmFuczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI2luZGV4LWZzaWduZWRfMDAyZGJpdGZpZWxkcy0zNTgwIj48Y29kZT5mc2lnbmVkLWJpdGZpZWxkczwvY29kZT48L2E+OiA8YSBocmVmPSJOb25fMDAyZGJ1Z3MuaHRtbCNOb25fMDAyZGJ1Z3MiPk5vbi1idWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mc2lnbmVkXzAwMmRiaXRmaWVsZHMtMTI2Ij48Y29kZT5mc2lnbmVkLWJpdGZpZWxkczwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNoYXJhY3RlcnMtaW1wbGVtZW50YXRpb24uaHRtbCNpbmRleC1mc2lnbmVkXzAwMmRjaGFyLTIzOTMiPjxjb2RlPmZzaWduZWQtY2hhcjwvY29kZT48L2E+OiA8YSBocmVmPSJDaGFyYWN0ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbiI+Q2hhcmFjdGVycyBpbXBsZW1lbnRhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZnNpZ25lZF8wMDJkY2hhci0xMjUiPjxjb2RlPmZzaWduZWQtY2hhcjwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc2luZ2xlXzAwMmRwcmVjaXNpb25fMDAyZGNvbnN0YW50LTkxNCI+PGNvZGU+ZnNpbmdsZS1wcmVjaXNpb24tY29uc3RhbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNwbGl0XzAwMmRpdnNfMDAyZGluXzAwMmR1bnJvbGxlci04NzAiPjxjb2RlPmZzcGxpdC1pdnMtaW4tdW5yb2xsZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtZnNwbGl0XzAwMmRzdGFjay0yNjQ3Ij48Y29kZT5mc3BsaXQtc3RhY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZnNwbGl0XzAwMmRzdGFjay0yMzYzIj48Y29kZT5mc3BsaXQtc3RhY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnNwbGl0XzAwMmR3aWRlXzAwMmR0eXBlcy03NjgiPjxjb2RlPmZzcGxpdC13aWRlLXR5cGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZzdGFja18wMDJkY2hlY2stMjM1OSI+PGNvZGU+ZnN0YWNrLWNoZWNrPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZzdGFja18wMDJkbGltaXRfMDAyZHJlZ2lzdGVyLTIzNjAiPjxjb2RlPmZzdGFjay1saW1pdC1yZWdpc3RlcjwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mc3RhY2tfMDAyZGxpbWl0XzAwMmRzeW1ib2wtMjM2MSI+PGNvZGU+ZnN0YWNrLWxpbWl0LXN5bWJvbDwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc3RhY2tfMDAyZHByb3RlY3Rvci05MzIiPjxjb2RlPmZzdGFjay1wcm90ZWN0b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnN0YWNrXzAwMmRwcm90ZWN0b3JfMDAyZGFsbC05MzMiPjxjb2RlPmZzdGFjay1wcm90ZWN0b3ItYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mc3RhY2tfMDAyZHVzYWdlLTU4MCI+PGNvZGU+ZnN0YWNrLXVzYWdlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZzdGFja18wMDVmcmV1c2UtMjMyNyI+PGNvZGU+ZnN0YWNrX3JldXNlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZnN0YXRzLTE1OCI+PGNvZGU+ZnN0YXRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mc3RyaWN0XzAwMmRhbGlhc2luZy04ODEiPjxjb2RlPmZzdHJpY3QtYWxpYXNpbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mc3RyaWN0XzAwMmRlbnVtcy0xNTkiPjxjb2RlPmZzdHJpY3QtZW51bXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZzdHJpY3RfMDAyZG92ZXJmbG93LTg4MiI+PGNvZGU+ZnN0cmljdC1vdmVyZmxvdzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mc3RyaWN0XzAwMmR2b2xhdGlsZV8wMDJkYml0ZmllbGRzLTIzNjciPjxjb2RlPmZzdHJpY3Qtdm9sYXRpbGUtYml0ZmllbGRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZzeW5jXzAwMmRsaWJjYWxscy0yMzY4Ij48Y29kZT5mc3luYy1saWJjYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWZzeW50YXhfMDAyZG9ubHktMjQ4Ij48Y29kZT5mc3ludGF4LW9ubHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWZ0YWJzdG9wLTk5MyI+PGNvZGU+ZnRhYnN0b3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mdGVtcGxhdGVfMDAyZGJhY2t0cmFjZV8wMDJkbGltaXQtMTYwIj48Y29kZT5mdGVtcGxhdGUtYmFja3RyYWNlLWxpbWl0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZ0ZW1wbGF0ZV8wMDJkZGVwdGgtMTYxIj48Y29kZT5mdGVtcGxhdGUtZGVwdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1mdGVzdF8wMDJkY292ZXJhZ2UtNTg0Ij48Y29kZT5mdGVzdC1jb3ZlcmFnZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdGhyZWFkXzAwMmRqdW1wcy03NjciPjxjb2RlPmZ0aHJlYWQtanVtcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZ0aW1lXzAwMmRyZXBvcnQtNTc0Ij48Y29kZT5mdGltZS1yZXBvcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZnRsc18wMDJkbW9kZWwtMjM2NSI+PGNvZGU+ZnRscy1tb2RlbDwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJhY2VyLTg2NyI+PGNvZGU+ZnRyYWNlcjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtZnRyYWNrXzAwMmRtYWNyb18wMDJkZXhwYW5zaW9uLTk5NSI+PGNvZGU+ZnRyYWNrLW1hY3JvLWV4cGFuc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJhcHYtMjMyOCI+PGNvZGU+ZnRyYXB2PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZ0cmVlXzAwMmRiaXRfMDAyZGNjcC04MzciPjxjb2RlPmZ0cmVlLWJpdC1jY3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZGJ1aWx0aW5fMDAyZGNhbGxfMDAyZGRjZS04NDAiPjxjb2RlPmZ0cmVlLWJ1aWx0aW4tY2FsbC1kY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZGNjcC04MzgiPjxjb2RlPmZ0cmVlLWNjcDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkY2gtODQzIj48Y29kZT5mdHJlZS1jaDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkY29weV8wMDJkcHJvcC04MjkiPjxjb2RlPmZ0cmVlLWNvcHktcHJvcDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkY29weXJlbmFtZS04NTkiPjxjb2RlPmZ0cmVlLWNvcHlyZW5hbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZGRjZS04MzkiPjxjb2RlPmZ0cmVlLWRjZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkZG9taW5hdG9yXzAwMmRvcHRzLTg0MSI+PGNvZGU+ZnRyZWUtZG9taW5hdG9yLW9wdHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZGRzZS04NDIiPjxjb2RlPmZ0cmVlLWRzZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkZm9yd3Byb3AtODI1Ij48Y29kZT5mdHJlZS1mb3J3cHJvcDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkZnJlLTgyNiI+PGNvZGU+ZnRyZWUtZnJlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZ0cmVlXzAwMmRsb29wXzAwMmRpbS04NTMiPjxjb2RlPmZ0cmVlLWxvb3AtaW08L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZGxvb3BfMDAyZGl2Y2Fub24tODU0Ij48Y29kZT5mdHJlZS1sb29wLWl2Y2Fub248L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZGxvb3BfMDAyZGxpbmVhci04NDUiPjxjb2RlPmZ0cmVlLWxvb3AtbGluZWFyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZ0cmVlXzAwMmRsb29wXzAwMmRvcHRpbWl6ZS04NDQiPjxjb2RlPmZ0cmVlLWxvb3Atb3B0aW1pemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZHBhcmFsbGVsaXplXzAwMmRsb29wcy04NTYiPjxjb2RlPmZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZ0cmVlXzAwMmRwYXJ0aWFsXzAwMmRwcmUtODI0Ij48Y29kZT5mdHJlZS1wYXJ0aWFsLXByZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkcGhpcHJvcC04MjciPjxjb2RlPmZ0cmVlLXBoaXByb3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZHByZS04MjMiPjxjb2RlPmZ0cmVlLXByZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkcHRhLTg1NyI+PGNvZGU+ZnRyZWUtcHRhPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZ0cmVlXzAwMmRyZWFzc29jLTgyMiI+PGNvZGU+ZnRyZWUtcmVhc3NvYzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkc2luay04MzYiPjxjb2RlPmZ0cmVlLXNpbms8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZHNscF8wMDJkdmVjdG9yaXplLTg2MyI+PGNvZGU+ZnRyZWUtc2xwLXZlY3Rvcml6ZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkc2xzci04NjEiPjxjb2RlPmZ0cmVlLXNsc3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZHNyYS04NTgiPjxjb2RlPmZ0cmVlLXNyYTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdHJlZV8wMDJkdGVyLTg2MCI+PGNvZGU+ZnRyZWUtdGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZ0cmVlXzAwMmR2ZWN0XzAwMmRsb29wXzAwMmR2ZXJzaW9uLTg2NCI+PGNvZGU+ZnRyZWUtdmVjdC1sb29wLXZlcnNpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZHZlY3Rvcml6ZS04NjIiPjxjb2RlPmZ0cmVlLXZlY3Rvcml6ZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZHZlY3Rvcml6ZXJfMDAyZHZlcmJvc2UtNzAyIj48Y29kZT5mdHJlZS12ZWN0b3JpemVyLXZlcmJvc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnRyZWVfMDAyZHZycC04NjYiPjxjb2RlPmZ0cmVlLXZycDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdW5pdF8wMDJkYXRfMDAyZGFfMDAyZHRpbWUtODg3Ij48Y29kZT5mdW5pdC1hdC1hLXRpbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnVucm9sbF8wMDJkYWxsXzAwMmRsb29wcy04NjkiPjxjb2RlPmZ1bnJvbGwtYWxsLWxvb3BzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LWZ1bnJvbGxfMDAyZGxvb3BzLTg2OCI+PGNvZGU+ZnVucm9sbC1sb29wczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdW5zYWZlXzAwMmRsb29wXzAwMmRvcHRpbWl6YXRpb25zLTc3OCI+PGNvZGU+ZnVuc2FmZS1sb29wLW9wdGltaXphdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnVuc2FmZV8wMDJkbWF0aF8wMDJkb3B0aW1pemF0aW9ucy05MDYiPjxjb2RlPmZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTm9uXzAwMmRidWdzLmh0bWwjaW5kZXgtZnVuc2lnbmVkXzAwMmRiaXRmaWVsZHMtMzU4MSI+PGNvZGU+ZnVuc2lnbmVkLWJpdGZpZWxkczwvY29kZT48L2E+OiA8YSBocmVmPSJOb25fMDAyZGJ1Z3MuaHRtbCNOb25fMDAyZGJ1Z3MiPk5vbi1idWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RydWN0dXJlcy11bmlvbnMtZW51bWVyYXRpb25zLWFuZC1iaXRfMDAyZGZpZWxkcy1pbXBsZW1lbnRhdGlvbi5odG1sI2luZGV4LWZ1bnNpZ25lZF8wMDJkYml0ZmllbGRzLTIzOTUiPjxjb2RlPmZ1bnNpZ25lZC1iaXRmaWVsZHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3RydWN0dXJlcy11bmlvbnMtZW51bWVyYXRpb25zLWFuZC1iaXRfMDAyZGZpZWxkcy1pbXBsZW1lbnRhdGlvbi5odG1sI1N0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24iPlN0cnVjdHVyZXMgdW5pb25zIGVudW1lcmF0aW9ucyBhbmQgYml0LWZpZWxkcyBpbXBsZW1lbnRhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZnVuc2lnbmVkXzAwMmRiaXRmaWVsZHMtMTI3Ij48Y29kZT5mdW5zaWduZWQtYml0ZmllbGRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbi5odG1sI2luZGV4LWZ1bnNpZ25lZF8wMDJkY2hhci0yMzk0Ij48Y29kZT5mdW5zaWduZWQtY2hhcjwvY29kZT48L2E+OiA8YSBocmVmPSJDaGFyYWN0ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbiI+Q2hhcmFjdGVycyBpbXBsZW1lbnRhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZnVuc2lnbmVkXzAwMmRjaGFyLTEyNCI+PGNvZGU+ZnVuc2lnbmVkLWNoYXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtZnVuc3dpdGNoXzAwMmRsb29wcy05MjYiPjxjb2RlPmZ1bnN3aXRjaC1sb29wczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1mdW53aW5kXzAwMmR0YWJsZXMtMjMzMyI+PGNvZGU+ZnVud2luZC10YWJsZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1mdXNlXzAwMmRjeGFfMDAyZGF0ZXhpdC0xNjMiPjxjb2RlPmZ1c2UtY3hhLWF0ZXhpdDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWZ2YXJfMDAyZHRyYWNraW5nLTcwOCI+PGNvZGU+ZnZhci10cmFja2luZzwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZnZhcl8wMDJkdHJhY2tpbmdfMDAyZGFzc2lnbm1lbnRzLTcwOSI+PGNvZGU+ZnZhci10cmFja2luZy1hc3NpZ25tZW50czwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZnZhcl8wMDJkdHJhY2tpbmdfMDAyZGFzc2lnbm1lbnRzXzAwMmR0b2dnbGUtNzExIj48Y29kZT5mdmFyLXRyYWNraW5nLWFzc2lnbm1lbnRzLXRvZ2dsZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdmFyaWFibGVfMDAyZGV4cGFuc2lvbl8wMDJkaW5fMDAyZHVucm9sbGVyLTg3MSI+PGNvZGU+ZnZhcmlhYmxlLWV4cGFuc2lvbi1pbi11bnJvbGxlcjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdmVjdF8wMDJkY29zdF8wMDJkbW9kZWwtODY1Ij48Y29kZT5mdmVjdC1jb3N0LW1vZGVsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZ2ZXJib3NlXzAwMmRhc20tMjM0MyI+PGNvZGU+ZnZlcmJvc2UtYXNtPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZ2aXNpYmlsaXR5LTIzNjYiPjxjb2RlPmZ2aXNpYmlsaXR5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZnZpc2liaWxpdHlfMDAyZGlubGluZXNfMDAyZGhpZGRlbi0xNjUiPjxjb2RlPmZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZ2aXNpYmlsaXR5XzAwMmRtc18wMDJkY29tcGF0LTE2NiI+PGNvZGU+ZnZpc2liaWxpdHktbXMtY29tcGF0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1mdnB0LTkxOSI+PGNvZGU+ZnZwdDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1md2ViLTg4OSI+PGNvZGU+ZndlYjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1md2hvbGVfMDAyZHByb2dyYW0tODkwIj48Y29kZT5md2hvbGUtcHJvZ3JhbTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtZndpZGVfMDAyZGV4ZWNfMDAyZGNoYXJzZXQtOTk4Ij48Y29kZT5md2lkZS1leGVjLWNoYXJzZXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWZ3b3JraW5nXzAwMmRkaXJlY3RvcnktMTAwMiI+PGNvZGU+ZndvcmtpbmctZGlyZWN0b3J5PC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWZ3cmFwdi0yMzI5Ij48Y29kZT5md3JhcHY8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZnplcm9fMDAyZGxpbmstMjIxIj48Y29kZT5memVyby1saW5rPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeXN0ZW0tVi1PcHRpb25zLmh0bWwjaW5kZXgtRy0yMjQwIj48Y29kZT5HPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN5c3RlbS1WLU9wdGlvbnMuaHRtbCNTeXN0ZW0tVi1PcHRpb25zIj5TeXN0ZW0gViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LUctMjAzOSI+PGNvZGU+RzwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtRy0xNzg4Ij48Y29kZT5HPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjaW5kZXgtRy0xNjAzIj48Y29kZT5HPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI00zMlJfMDAyZkQtT3B0aW9ucyI+TTMyUi9EIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWctNTQwIj48Y29kZT5nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nY29mZi01NDkiPjxjb2RlPmdjb2ZmPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nZHdhcmZfMDAyZF8wMDQwdmFyXzAwN2J2ZXJzaW9uXzAwN2QtNTUyIj48Y29kZT5nZHdhcmYtPC9jb2RlPjx2YXI+dmVyc2lvbjwvdmFyPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdlbl8wMDJkZGVjbHMtMjIyIj48Y29kZT5nZW4tZGVjbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtZ2Z1bGwtMTI0NCI+PGNvZGU+Z2Z1bGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWdnZGItNTQyIj48Y29kZT5nZ2RiPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nbm9fMDAyZHJlY29yZF8wMDJkZ2NjXzAwMmRzd2l0Y2hlcy01NTQiPjxjb2RlPmduby1yZWNvcmQtZ2NjLXN3aXRjaGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nbm9fMDAyZHN0cmljdF8wMDJkZHdhcmYtNTU2Ij48Y29kZT5nbm8tc3RyaWN0LWR3YXJmPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1ncHVibmFtZXMtNTQzIj48Y29kZT5ncHVibmFtZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWdyZWNvcmRfMDAyZGdjY18wMDJkc3dpdGNoZXMtNTUzIj48Y29kZT5ncmVjb3JkLWdjYy1zd2l0Y2hlczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ3NwbGl0XzAwMmRkd2FyZi01NDEiPjxjb2RlPmdzcGxpdC1kd2FyZjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ3N0YWJzLTU0NCI+PGNvZGU+Z3N0YWJzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nc3RhYnNfMDAyYi01NDgiPjxjb2RlPmdzdGFicys8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWdzdHJpY3RfMDAyZGR3YXJmLTU1NSI+PGNvZGU+Z3N0cmljdC1kd2FyZjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ3RvZ2dsZS01NTgiPjxjb2RlPmd0b2dnbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWd1c2VkLTEyNDMiPjxjb2RlPmd1c2VkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1ndm1zLTU1NyI+PGNvZGU+Z3ZtczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ3hjb2ZmLTU1MCI+PGNvZGU+Z3hjb2ZmPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1neGNvZmZfMDAyYi01NTEiPjxjb2RlPmd4Y29mZis8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LUgtMTAxOSI+PGNvZGU+SDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtaGVhZGVycGFkXzAwNWZtYXhfMDA1Zmluc3RhbGxfMDA1Zm5hbWVzLTEyNzAiPjxjb2RlPmhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lczwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtaGVscC0xMDE2Ij48Y29kZT5oZWxwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjaW5kZXgtaGVscC04NyI+PGNvZGU+aGVscDwvY29kZT48L2E+OiA8YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk92ZXJhbGwgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1ob2lzdF8wMDJkYWRqYWNlbnRfMDAyZGxvYWRzLTgyOCI+PGNvZGU+aG9pc3QtYWRqYWNlbnQtbG9hZHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI2luZGV4LUktMTA1NyI+PGNvZGU+STwvY29kZT48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtSS05NDQiPjxjb2RlPkk8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI2luZGV4LUlfMDAyZC0xMDY0Ij48Y29kZT5JLTwvY29kZT48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtSV8wMDJkLTk3NSI+PGNvZGU+SS08L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWlkaXJhZnRlci05ODAiPjxjb2RlPmlkaXJhZnRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtaWZyYW1ld29yay0xMjQyIj48Y29kZT5pZnJhbWV3b3JrPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1pbWFjcm9zLTk3OSI+PGNvZGU+aW1hY3JvczwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtaW1hZ2VfMDA1ZmJhc2UtMTI3MSI+PGNvZGU+aW1hZ2VfYmFzZTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtaW11bHRpbGliLTk4NSI+PGNvZGU+aW11bHRpbGliPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1pbmNsdWRlLTk3OCI+PGNvZGU+aW5jbHVkZTwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtaW5pdC0xMjcyIj48Y29kZT5pbml0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1pbnN0YWxsXzAwNWZuYW1lLTEyNzMiPjxjb2RlPmluc3RhbGxfbmFtZTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtaXByZWZpeC05ODEiPjxjb2RlPmlwcmVmaXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI2luZGV4LWlxdW90ZS0xMDU4Ij48Y29kZT5pcXVvdGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWlxdW90ZS05ODciPjxjb2RlPmlxdW90ZTwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtaXN5c3Jvb3QtOTg0Ij48Y29kZT5pc3lzcm9vdDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtaXN5c3RlbS05ODYiPjxjb2RlPmlzeXN0ZW08L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWl3aXRocHJlZml4LTk4MiI+PGNvZGU+aXdpdGhwcmVmaXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LWl3aXRocHJlZml4YmVmb3JlLTk4MyI+PGNvZGU+aXdpdGhwcmVmaXhiZWZvcmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LWtlZXBfMDA1ZnByaXZhdGVfMDA1ZmV4dGVybnMtMTI3NCI+PGNvZGU+a2VlcF9wcml2YXRlX2V4dGVybnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI2luZGV4LUwtMTA1OSI+PGNvZGU+TDwvY29kZT48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LWwtMTAzMCI+PGNvZGU+bDwvY29kZT48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LWxvYmpjLTEwMzEiPjxjb2RlPmxvYmpjPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW0tMjAwOSI+PGNvZGU+bTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1NLTk1OSI+PGNvZGU+TTwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tMS0yMTE4Ij48Y29kZT5tMTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW0xMC0xODg1Ij48Y29kZT5tMTA8L2NvZGU+PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIj5QRFAtMTEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW0xMjhiaXRfMDAyZGxvbmdfMDAyZGRvdWJsZS0xNDU0Ij48Y29kZT5tMTI4Yml0LWxvbmctZG91YmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tMTZfMDAyZGJpdC0xMjIyIj48Y29kZT5tMTYtYml0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW0xcmVnXzAwMmQtMTExNCI+PGNvZGU+bTFyZWctPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIj5BZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW0yLTIxMTkiPjxjb2RlPm0yPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI2luZGV4LW0yMTAtMTY3MiI+PGNvZGU+bTIxMDwvY29kZT48L2E+OiA8YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjTUNvcmUtT3B0aW9ucyI+TUNvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tMmEtMjEyMyI+PGNvZGU+bTJhPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW0yYV8wMDJkbm9mcHUtMjEyMCI+PGNvZGU+bTJhLW5vZnB1PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW0yYV8wMDJkc2luZ2xlLTIxMjIiPjxjb2RlPm0yYS1zaW5nbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbTJhXzAwMmRzaW5nbGVfMDAyZG9ubHktMjEyMSI+PGNvZGU+bTJhLXNpbmdsZS1vbmx5PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW0zLTIxMjQiPjxjb2RlPm0zPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNpbmRleC1tMzEtMjA5MSI+PGNvZGU+bTMxPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFUHJvLU9wdGlvbnMuaHRtbCNpbmRleC1tMzItMjI1MyI+PGNvZGU+bTMyPC9jb2RlPjwvYT46IDxhIGhyZWY9IlRJTEVQcm8tT3B0aW9ucy5odG1sI1RJTEVQcm8tT3B0aW9ucyI+VElMRVBybyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI2luZGV4LW0zMi0yMjQ5Ij48Y29kZT5tMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI1RJTEVfMDAyZEd4LU9wdGlvbnMiPlRJTEUtR3ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tMzItMjIxMyI+PGNvZGU+bTMyPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW0zMi0xOTUyIj48Y29kZT5tMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW0zMi0xNTAxIj48Y29kZT5tMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI2luZGV4LW0zMl8wMDJkYml0LTEyMjEiPjxjb2RlPm0zMi1iaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjaW5kZXgtbTMyYml0XzAwMmRkb3VibGVzLTIwNTgiPjxjb2RlPm0zMmJpdC1kb3VibGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIj5SWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjaW5kZXgtbTMyci0xNTk2Ij48Y29kZT5tMzJyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI00zMlJfMDAyZkQtT3B0aW9ucyI+TTMyUi9EIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNpbmRleC1tMzJyMi0xNTk0Ij48Y29kZT5tMzJyMjwvY29kZT48L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjaW5kZXgtbTMycngtMTU5NSI+PGNvZGU+bTMycng8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjTTMyUl8wMDJmRC1PcHRpb25zIj5NMzJSL0QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tMzQwLTE2NzMiPjxjb2RlPm0zNDA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tM2Rub3ctMTQ3MiI+PGNvZGU+bTNkbm93PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbTNlLTIxMjUiPjxjb2RlPm0zZTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tNC0yMTI5Ij48Y29kZT5tNDwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tNF8wMDJkbm9mcHUtMjEyNiI+PGNvZGU+bTQtbm9mcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbTRfMDAyZHNpbmdsZS0yMTI4Ij48Y29kZT5tNC1zaW5nbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbTRfMDAyZHNpbmdsZV8wMDJkb25seS0yMTI3Ij48Y29kZT5tNC1zaW5nbGUtb25seTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW00MC0xODgzIj48Y29kZT5tNDA8L2NvZGU+PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIj5QRFAtMTEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW00NS0xODg0Ij48Y29kZT5tNDU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIj5QRFAtMTEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tNGEtMjEzMyI+PGNvZGU+bTRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW00YV8wMDJkbm9mcHUtMjEzMCI+PGNvZGU+bTRhLW5vZnB1PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW00YV8wMDJkc2luZ2xlLTIxMzIiPjxjb2RlPm00YS1zaW5nbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbTRhXzAwMmRzaW5nbGVfMDAyZG9ubHktMjEzMSI+PGNvZGU+bTRhLXNpbmdsZS1vbmx5PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW00YWwtMjEzNCI+PGNvZGU+bTRhbDwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tNGJ5dGVfMDAyZGZ1bmN0aW9ucy0xNjY0Ij48Y29kZT5tNGJ5dGUtZnVuY3Rpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNNQ29yZS1PcHRpb25zIj5NQ29yZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1tNTIwMC0xNjI3Ij48Y29kZT5tNTIwMDwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbTUyMDZlLTE2MjgiPjxjb2RlPm01MjA2ZTwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbTUyOHgtMTYyOSI+PGNvZGU+bTUyOHg8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW01MzA3LTE2MzAiPjxjb2RlPm01MzA3PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1tNTQwNy0xNjMxIj48Y29kZT5tNTQwNzwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNpbmRleC1tNjQtMjI1MCI+PGNvZGU+bTY0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1PcHRpb25zIj5USUxFLUd4IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbTY0LTIyMTQiPjxjb2RlPm02NDwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbTY0LTIwOTAiPjxjb2RlPm02NDwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW02NC0xOTUzIj48Y29kZT5tNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW02NC0xNTAyIj48Y29kZT5tNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNpbmRleC1tNjRiaXRfMDAyZGRvdWJsZXMtMjA1NyI+PGNvZGU+bTY0Yml0LWRvdWJsZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI1JYLU9wdGlvbnMiPlJYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW02ODAwMC0xNjE4Ij48Y29kZT5tNjgwMDA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW02ODAxMC0xNjIwIj48Y29kZT5tNjgwMTA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW02ODAyMC0xNjIxIj48Y29kZT5tNjgwMjA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW02ODAyMF8wMDJkNDAtMTYzMyI+PGNvZGU+bTY4MDIwLTQwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1tNjgwMjBfMDAyZDYwLTE2MzQiPjxjb2RlPm02ODAyMC02MDwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbTY4MDMwLTE2MjMiPjxjb2RlPm02ODAzMDwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbTY4MDQwLTE2MjQiPjxjb2RlPm02ODA0MDwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbTY4MDYwLTE2MjUiPjxjb2RlPm02ODA2MDwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbTY4ODgxLTE2MzYiPjxjb2RlPm02ODg4MTwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI2luZGV4LW04XzAwMmRiaXQtMTIyMyI+PGNvZGU+bTgtYml0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbThieXRlXzAwMmRhbGlnbi0yMjg1Ij48Y29kZT5tOGJ5dGUtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tOTZiaXRfMDAyZGxvbmdfMDAyZGRvdWJsZS0xNDUzIj48Y29kZT5tOTZiaXQtbG9uZy1kb3VibGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tYWJpLTIwMTYiPjxjb2RlPm1hYmk8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1hYmktMTQ4NCI+PGNvZGU+bWFiaTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tYWJpLTExMTYiPjxjb2RlPm1hYmk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tYWJpXzAwM2QzMi0xNzQ1Ij48Y29kZT5tYWJpPTMyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWFiaV8wMDNkNjQtMTc0OCI+PGNvZGU+bWFiaT02NDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1hYmlfMDAzZGVhYmktMTc0OSI+PGNvZGU+bWFiaT1lYWJpPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbWFiaV8wMDNkZ251LTE4NDUiPjxjb2RlPm1hYmk9Z251PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1hYmlfMDAzZGlibWxvbmdkb3VibGUtMjAxOSI+PGNvZGU+bWFiaT1pYm1sb25nZG91YmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWFiaV8wMDNkaWVlZWxvbmdkb3VibGUtMjAyMCI+PGNvZGU+bWFiaT1pZWVlbG9uZ2RvdWJsZTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbWFiaV8wMDNkbW1peHdhcmUtMTg0NCI+PGNvZGU+bWFiaT1tbWl4d2FyZTwvY29kZT48L2E+OiA8YSBocmVmPSJNTUlYLU9wdGlvbnMuaHRtbCNNTUlYLU9wdGlvbnMiPk1NSVggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1hYmlfMDAzZG4zMi0xNzQ3Ij48Y29kZT5tYWJpPW4zMjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tYWJpXzAwM2Rub18wMDJkc3BlLTIwMTgiPjxjb2RlPm1hYmk9bm8tc3BlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tYWJpXzAwM2RvNjQtMTc0NiI+PGNvZGU+bWFiaT1vNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWFiaV8wMDNkc3BlLTIwMTciPjxjb2RlPm1hYmk9c3BlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tYWJpY2FsbHMtMTc1MCI+PGNvZGU+bWFiaWNhbGxzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tYWJvcnRfMDAyZG9uXzAwMmRub3JldHVybi0xMTMxIj48Y29kZT5tYWJvcnQtb24tbm9yZXR1cm48L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1hYnNkaWZmLTE2NzciPjxjb2RlPm1hYnNkaWZmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjaW5kZXgtbWFic2hpLTE4OTYiPjxjb2RlPm1hYnNoaTwvY29kZT48L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNQRFBfMDAyZDExLU9wdGlvbnMiPlBEUC0xMSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjaW5kZXgtbWFjMC0xODgxIj48Y29kZT5tYWMwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1hY2NfMDAyZDQtMTM3NSI+PGNvZGU+bWFjYy00PC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tYWNjXzAwMmQ4LTEzNzYiPjxjb2RlPm1hY2MtODwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjaW5kZXgtbWFjY3VtdWxhdGVfMDAyZGFyZ3MtMTE1MyI+PGNvZGU+bWFjY3VtdWxhdGUtYXJnczwvY29kZT48L2E+OiA8YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj5BVlIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tYWNjdW11bGF0ZV8wMDJkb3V0Z29pbmdfMDAyZGFyZ3MtMjE1OCI+PGNvZGU+bWFjY3VtdWxhdGUtb3V0Z29pbmctYXJnczwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1hY2N1bXVsYXRlXzAwMmRvdXRnb2luZ18wMDJkYXJncy0xNDg4Ij48Y29kZT5tYWNjdW11bGF0ZS1vdXRnb2luZy1hcmdzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tYWRkcmVzc18wMDJkbW9kZV8wMDNkbG9uZy0xNTA5Ij48Y29kZT5tYWRkcmVzcy1tb2RlPWxvbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1hZGRyZXNzXzAwMmRtb2RlXzAwM2RzaG9ydC0xNTEwIj48Y29kZT5tYWRkcmVzcy1tb2RlPXNob3J0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI2luZGV4LW1hZGRyZXNzXzAwMmRzcGFjZV8wMDJkY29udmVyc2lvbi0yMjMxIj48Y29kZT5tYWRkcmVzcy1zcGFjZS1jb252ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1hZHMtMjAyNSI+PGNvZGU+bWFkczwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1haXhfMDAyZHN0cnVjdF8wMDJkcmV0dXJuLTIwMTQiPjxjb2RlPm1haXgtc3RydWN0LXJldHVybjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1haXgzMi0xOTU5Ij48Y29kZT5tYWl4MzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tYWl4NjQtMTk1OCI+PGNvZGU+bWFpeDY0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1tYWxpZ25fMDAyZDMwMC0xNDEwIj48Y29kZT5tYWxpZ24tMzAwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI0g4XzAwMmYzMDAtT3B0aW9ucyI+SDgvMzAwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tYWxpZ25fMDAyZGRvdWJsZS0xNDUxIj48Y29kZT5tYWxpZ24tZG91YmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW1hbGlnbl8wMDJkaW50LTE2NDciPjxjb2RlPm1hbGlnbi1pbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1hbGlnbl8wMDJkbGFiZWxzLTEzNzMiPjxjb2RlPm1hbGlnbi1sYWJlbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNpbmRleC1tYWxpZ25fMDAyZGxvb3BzLTE2MDYiPjxjb2RlPm1hbGlnbi1sb29wczwvY29kZT48L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1hbGlnbl8wMDJkbmF0dXJhbC0xOTYzIj48Y29kZT5tYWxpZ24tbmF0dXJhbDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1hbGlnbl8wMDJkcG93ZXItMTk2NCI+PGNvZGU+bWFsaWduLXBvd2VyPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1hbGxfMDAyZG9wdHMtMTY3OCI+PGNvZGU+bWFsbC1vcHRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tYWxsb2NfMDAyZGNjLTEzNTUiPjxjb2RlPm1hbGxvYy1jYzwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tYWx0aXZlYy0xOTM1Ij48Y29kZT5tYWx0aXZlYzwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbWFtMzMtMTg2MiI+PGNvZGU+bWFtMzM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjTU4xMDMwMC1PcHRpb25zIj5NTjEwMzAwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1tYW0zM18wMDJkMi0xODY0Ij48Y29kZT5tYW0zMy0yPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbWFtMzQtMTg2NSI+PGNvZGU+bWFtMzQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjTU4xMDMwMC1PcHRpb25zIj5NTjEwMzAwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHTlVfMDAyZkxpbnV4LU9wdGlvbnMuaHRtbCNpbmRleC1tYW5kcm9pZC0xMzk5Ij48Y29kZT5tYW5kcm9pZDwvY29kZT48L2E+OiA8YSBocmVmPSJHTlVfMDAyZkxpbnV4LU9wdGlvbnMuaHRtbCNHTlVfMDAyZkxpbnV4LU9wdGlvbnMiPkdOVS9MaW51eCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tYXBjcy0xMTE4Ij48Y29kZT5tYXBjczwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbWFwY3NfMDAyZGZyYW1lLTExMTciPjxjb2RlPm1hcGNzLWZyYW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbWFwcF8wMDJkcmVncy0yMjg4Ij48Y29kZT5tYXBwLXJlZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbWFwcF8wMDJkcmVncy0yMTgzIj48Y29kZT5tYXBwLXJlZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW1hcmNoLTIwOTgiPjxjb2RlPm1hcmNoPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tYXJjaC0xNzMwIj48Y29kZT5tYXJjaDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbWFyY2gtMTYxNSI+PGNvZGU+bWFyY2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tYXJjaC0xNDQxIj48Y29kZT5tYXJjaDwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjaW5kZXgtbWFyY2gtMTQxMiI+PGNvZGU+bWFyY2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tYXJjaC0xMjA0Ij48Y29kZT5tYXJjaDwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkM2WC1PcHRpb25zLmh0bWwjaW5kZXgtbWFyY2gtMTE5NiI+PGNvZGU+bWFyY2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iQzZYLU9wdGlvbnMuaHRtbCNDNlgtT3B0aW9ucyI+QzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LW1hcmNoLTExMjciPjxjb2RlPm1hcmNoPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWFyY2gtMTA5MSI+PGNvZGU+bWFyY2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LW1hcm0tMTEzNyI+PGNvZGU+bWFybTwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNpbmRleC1tYXMxMDBfMDAyZHN5bnRheC0yMDY3Ij48Y29kZT5tYXMxMDAtc3ludGF4PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIj5SWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWFzbV8wMDNkXzAwNDB2YXJfMDA3YmRpYWxlY3RfMDA3ZC0xNDQ1Ij48Y29kZT5tYXNtPTwvY29kZT48dmFyPmRpYWxlY3Q8L3Zhcj48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1hdG9taWNfMDAyZG1vZGVsXzAwM2RfMDA0MHZhcl8wMDdibW9kZWxfMDA3ZC0yMTUxIj48Y29kZT5tYXRvbWljLW1vZGVsPTwvY29kZT48dmFyPm1vZGVsPC92YXI+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI2luZGV4LW1hdG9taWNfMDAyZHVwZGF0ZXMtMjIzNCI+PGNvZGU+bWF0b21pYy11cGRhdGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tYXV0b18wMDJkcGljLTE1MzciPjxjb2RlPm1hdXRvLXBpYzwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tYXZlcmFnZS0xNjc5Ij48Y29kZT5tYXZlcmFnZTwvY29kZT48L2E+OiA8YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tYXZvaWRfMDAyZGluZGV4ZWRfMDAyZGFkZHJlc3Nlcy0xOTc4Ij48Y29kZT5tYXZvaWQtaW5kZXhlZC1hZGRyZXNzZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNpbmRleC1tYXhfMDAyZHZlY3RfMDAyZGFsaWduLTExMTIiPjxjb2RlPm1heC12ZWN0LWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIj5BZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1iLTIxMzUiPjxjb2RlPm1iPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNpbmRleC1tYmFja2NoYWluLTIwODQiPjxjb2RlPm1iYWNrY2hhaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LW1iYXJyZWxfMDAyZHNoaWZ0XzAwMmRlbmFibGVkLTE1ODQiPjxjb2RlPm1iYXJyZWwtc2hpZnQtZW5hYmxlZDwvY29kZT48L2E+OiA8YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI2luZGV4LW1iYXNlXzAwMmRhZGRyZXNzZXMtMTg1NSI+PGNvZGU+bWJhc2UtYWRkcmVzc2VzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tYmFzZWRfMDAzZC0xNjgwIj48Y29kZT5tYmFzZWQ9PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjaW5kZXgtbWJjb3B5LTE4ODciPjxjb2RlPm1iY29weTwvY29kZT48L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNQRFBfMDAyZDExLU9wdGlvbnMiPlBEUC0xMSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjaW5kZXgtbWJjb3B5XzAwMmRidWlsdGluLTE4ODYiPjxjb2RlPm1iY29weS1idWlsdGluPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWJpZy0xOTk4Ij48Y29kZT5tYmlnPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWJpZ18wMDJkZW5kaWFuLTE5OTkiPjxjb2RlPm1iaWctZW5kaWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNpbmRleC1tYmlnXzAwMmRlbmRpYW4tMTcyNCI+PGNvZGU+bWJpZy1lbmRpYW48L2NvZGU+PC9hPjogPGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjTWljcm9CbGF6ZS1PcHRpb25zIj5NaWNyb0JsYXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbWJpZ18wMDJkZW5kaWFuLTE2NzEiPjxjb2RlPm1iaWctZW5kaWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNNQ29yZS1PcHRpb25zIj5NQ29yZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tYmlnXzAwMmRlbmRpYW4tMTUyMyI+PGNvZGU+bWJpZy1lbmRpYW48L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkM2WC1PcHRpb25zLmh0bWwjaW5kZXgtbWJpZ18wMDJkZW5kaWFuLTExOTciPjxjb2RlPm1iaWctZW5kaWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9IkM2WC1PcHRpb25zLmh0bWwjQzZYLU9wdGlvbnMiPkM2WCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tYmlnXzAwMmRlbmRpYW4tMTEyMyI+PGNvZGU+bWJpZy1lbmRpYW48L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tYmlnXzAwMmRlbmRpYW4tMTA4MCI+PGNvZGU+bWJpZy1lbmRpYW48L2NvZGU+PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjaW5kZXgtbWJpZ18wMDJkZW5kaWFuXzAwMmRkYXRhLTIwNjIiPjxjb2RlPm1iaWctZW5kaWFuLWRhdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI1JYLU9wdGlvbnMiPlJYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tYmlnXzAwMmRzd2l0Y2gtMjI4NyI+PGNvZGU+bWJpZy1zd2l0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tYmlnXzAwMmRzd2l0Y2gtMTQxNiI+PGNvZGU+bWJpZy1zd2l0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbWJpZ3RhYmxlLTIxMzkiPjxjb2RlPm1iaWd0YWJsZTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdOVV8wMDJmTGludXgtT3B0aW9ucy5odG1sI2luZGV4LW1iaW9uaWMtMTM5OCI+PGNvZGU+bWJpb25pYzwvY29kZT48L2E+OiA8YSBocmVmPSJHTlVfMDAyZkxpbnV4LU9wdGlvbnMuaHRtbCNHTlVfMDAyZkxpbnV4LU9wdGlvbnMiPkdOVS9MaW51eCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1iaXRfMDAyZGFsaWduLTE5ODciPjxjb2RlPm1iaXQtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSMTYtT3B0aW9ucy5odG1sI2luZGV4LW1iaXRfMDAyZG9wcy0xMjM4Ij48Y29kZT5tYml0LW9wczwvY29kZT48L2E+OiA8YSBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNDUjE2LU9wdGlvbnMiPkNSMTYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbWJpdGZpZWxkLTE2NDQiPjxjb2RlPm1iaXRmaWVsZDwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tYml0b3BzLTIxNDAiPjxjb2RlPm1iaXRvcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1iaXRvcHMtMTY4MSI+PGNvZGU+bWJpdG9wczwvY29kZT48L2E+OiA8YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tYmxvY2tfMDAyZG1vdmVfMDAyZGlubGluZV8wMDJkbGltaXQtMjAzOCI+PGNvZGU+bWJsb2NrLW1vdmUtaW5saW5lLWxpbWl0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNpbmRleC1tYnJhbmNoXzAwMmRjaGVhcC0xODk5Ij48Y29kZT5tYnJhbmNoLWNoZWFwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tYnJhbmNoXzAwMmRjb3N0LTE4MzAiPjxjb2RlPm1icmFuY2gtY29zdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjaW5kZXgtbWJyYW5jaF8wMDJkY29zdC0xMTU0Ij48Y29kZT5tYnJhbmNoLWNvc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjaW5kZXgtbWJyYW5jaF8wMDJkY29zdC0xMDk4Ij48Y29kZT5tYnJhbmNoLWNvc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbWJyYW5jaF8wMDJkY29zdF8wMDNkXzAwNDB2YXJfMDA3Ym51bV8wMDdkLTIxNjUiPjxjb2RlPm1icmFuY2gtY29zdD08L2NvZGU+PHZhcj5udW08L3Zhcj48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI2luZGV4LW1icmFuY2hfMDAyZGNvc3RfMDAzZF8wMDQwdmFyXzAwN2JudW1iZXJfMDA3ZC0xNjA5Ij48Y29kZT5tYnJhbmNoLWNvc3Q9PC9jb2RlPjx2YXI+bnVtYmVyPC92YXI+PC9hPjogPGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjTTMyUl8wMDJmRC1PcHRpb25zIj5NMzJSL0QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW1icmFuY2hfMDAyZGV4cGVuc2l2ZS0xODk4Ij48Y29kZT5tYnJhbmNoLWV4cGVuc2l2ZTwvY29kZT48L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNQRFBfMDAyZDExLU9wdGlvbnMiPlBEUC0xMSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNpbmRleC1tYnJhbmNoXzAwMmRoaW50cy0yMjI0Ij48Y29kZT5tYnJhbmNoLWhpbnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWJyYW5jaF8wMDJkbGlrZWx5LTE4MzEiPjxjb2RlPm1icmFuY2gtbGlrZWx5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbWJyYW5jaF8wMDJkcHJlZGljdC0xODUzIj48Y29kZT5tYnJhbmNoLXByZWRpY3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjTU1JWC1PcHRpb25zIj5NTUlYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWJzc18wMDJkcGx0LTE5NDIiPjxjb2RlPm1ic3MtcGx0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LW1idWlsZF8wMDJkY29uc3RhbnRzLTEzMjUiPjxjb2RlPm1idWlsZC1jb25zdGFudHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LW1id3gtMTMyNiI+PGNvZGU+bWJ3eDwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbWM2ODAwMC0xNjE5Ij48Y29kZT5tYzY4MDAwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1tYzY4MDIwLTE2MjIiPjxjb2RlPm1jNjgwMjA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1jXzAwM2QtMTY4MiI+PGNvZGU+bWM9PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNpbmRleC1tY2FjaGVfMDAyZHNpemUtMjIzMyI+PGNvZGU+bWNhY2hlLXNpemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyI+U1BVIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWNhbGxfMDAyZGVhYmktMjAwNyI+PGNvZGU+bWNhbGwtZWFiaTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1jYWxsXzAwMmRmcmVlYnNkLTIwMTEiPjxjb2RlPm1jYWxsLWZyZWVic2Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tY2FsbF8wMDJkbGludXgtMjAxMCI+PGNvZGU+bWNhbGwtbGludXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tY2FsbF8wMDJkbmV0YnNkLTIwMTIiPjxjb2RlPm1jYWxsLW5ldGJzZDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1tY2FsbF8wMDJkcHJvbG9ndWVzLTExNTUiPjxjb2RlPm1jYWxsLXByb2xvZ3VlczwvY29kZT48L2E+OiA8YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj5BVlIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tY2FsbF8wMDJkc3lzdi0yMDA1Ij48Y29kZT5tY2FsbC1zeXN2PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWNhbGxfMDAyZHN5c3ZfMDAyZGVhYmktMjAwNiI+PGNvZGU+bWNhbGwtc3lzdi1lYWJpPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWNhbGxfMDAyZHN5c3ZfMDAyZG5vZWFiaS0yMDA4Ij48Y29kZT5tY2FsbC1zeXN2LW5vZWFiaTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tY2FsbGVlXzAwMmRzdXBlcl8wMDJkaW50ZXJ3b3JraW5nLTExNDEiPjxjb2RlPm1jYWxsZWUtc3VwZXItaW50ZXJ3b3JraW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tY2FsbGVyXzAwMmRzdXBlcl8wMDJkaW50ZXJ3b3JraW5nLTExNDIiPjxjb2RlPm1jYWxsZXItc3VwZXItaW50ZXJ3b3JraW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI2luZGV4LW1jYWxsZ3JhcGhfMDAyZGRhdGEtMTY2NiI+PGNvZGU+bWNhbGxncmFwaC1kYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNNQ29yZS1PcHRpb25zIj5NQ29yZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1jYmNvbmQtMjIwNiI+PGNvZGU+bWNiY29uZDwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tY2JyYW5jaGRpLTIxNjgiPjxjb2RlPm1jYnJhbmNoZGk8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tY2NfMDAyZGluaXQtMTIxMyI+PGNvZGU+bWNjLWluaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW1jZnY0ZS0xNjMyIj48Y29kZT5tY2Z2NGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tY2hlY2tfMDAyZHplcm9fMDAyZGRpdmlzaW9uLTE4MDQiPjxjb2RlPm1jaGVjay16ZXJvLWRpdmlzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tY2l4LTEzMjgiPjxjb2RlPm1jaXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tY2xkLTE0NzQiPjxjb2RlPm1jbGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjaW5kZXgtbWNsaXAtMTY4MyI+PGNvZGU+bWNsaXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbWNtb2RlbC0yMjE1Ij48Y29kZT5tY21vZGVsPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWNtb2RlbF8wMDNka2VybmVsLTE1MDYiPjxjb2RlPm1jbW9kZWw9a2VybmVsPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1PcHRpb25zLmh0bWwjaW5kZXgtbWNtb2RlbF8wMDNkbGFyZ2UtMjI0NyI+PGNvZGU+bWNtb2RlbD1sYXJnZTwvY29kZT48L2E+OiA8YSBocmVmPSJUSUxFXzAwMmRHeC1PcHRpb25zLmh0bWwjVElMRV8wMDJkR3gtT3B0aW9ucyI+VElMRS1HeCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1jbW9kZWxfMDAzZGxhcmdlLTE5MzQiPjxjb2RlPm1jbW9kZWw9bGFyZ2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1jbW9kZWxfMDAzZGxhcmdlLTE1MDgiPjxjb2RlPm1jbW9kZWw9bGFyZ2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LW1jbW9kZWxfMDAzZGxhcmdlLTEwODUiPjxjb2RlPm1jbW9kZWw9bGFyZ2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWNtb2RlbF8wMDNkbWVkaXVtLTE5MzMiPjxjb2RlPm1jbW9kZWw9bWVkaXVtPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tY21vZGVsXzAwM2RtZWRpdW0tMTUwNyI+PGNvZGU+bWNtb2RlbD1tZWRpdW08L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNpbmRleC1tY21vZGVsXzAwM2RzbWFsbC0yMjQ2Ij48Y29kZT5tY21vZGVsPXNtYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1PcHRpb25zIj5USUxFLUd4IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWNtb2RlbF8wMDNkc21hbGwtMTkzMiI+PGNvZGU+bWNtb2RlbD1zbWFsbDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWNtb2RlbF8wMDNkc21hbGwtMTUwNSI+PGNvZGU+bWNtb2RlbD1zbWFsbDwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWNtb2RlbF8wMDNkc21hbGwtMTA4NCI+PGNvZGU+bWNtb2RlbD1zbWFsbDwvY29kZT48L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LW1jbW9kZWxfMDAzZHRpbnktMTA4MyI+PGNvZGU+bWNtb2RlbD10aW55PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI0FBcmNoNjQtT3B0aW9ucyI+QUFyY2g2NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1jbW92ZS0xMDk5Ij48Y29kZT5tY21vdmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWNtcGItMTkyNCI+PGNvZGU+bWNtcGI8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tY21wZXFkaS0yMTY5Ij48Y29kZT5tY21wZXFkaTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1jb2RlXzAwMmRyZWFkYWJsZS0xNzk5Ij48Y29kZT5tY29kZS1yZWFkYWJsZTwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbWNvbmRfMDAyZGV4ZWMtMTM4NCI+PGNvZGU+bWNvbmQtZXhlYzwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbWNvbmRfMDAyZG1vdmUtMTM4MCI+PGNvZGU+bWNvbmQtbW92ZTwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjaW5kZXgtbWNvbmZpZ18wMDNkLTE2ODQiPjxjb2RlPm1jb25maWc9PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMuaHRtbCNpbmRleC1tY29uc29sZS0xNTEyIj48Y29kZT5tY29uc29sZTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgV2luZG93cyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtbWNvbnN0XzAwMmRhbGlnbi0xMjE5Ij48Y29kZT5tY29uc3QtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI2luZGV4LW1jb25zdDE2LTIzMDkiPjxjb2RlPm1jb25zdDE2PC9jb2RlPjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPlh0ZW5zYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tY29uc3RhbnRfMDAyZGdwLTE1MzYiPjxjb2RlPm1jb25zdGFudC1ncDwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tY29wLTE2ODUiPjxjb2RlPm1jb3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1jb3AzMi0xNjg2Ij48Y29kZT5tY29wMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1jb3A2NC0xNjg3Ij48Y29kZT5tY29wNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbWNvcmVhLTExOTEiPjxjb2RlPm1jb3JlYTwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1tY29yZWItMTE5MiI+PGNvZGU+bWNvcmViPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRVByby1PcHRpb25zLmh0bWwjaW5kZXgtbWNwdS0yMjUyIj48Y29kZT5tY3B1PC9jb2RlPjwvYT46IDxhIGhyZWY9IlRJTEVQcm8tT3B0aW9ucy5odG1sI1RJTEVQcm8tT3B0aW9ucyI+VElMRVBybyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI2luZGV4LW1jcHUtMjI0OCI+PGNvZGU+bWNwdTwvY29kZT48L2E+OiA8YSBocmVmPSJUSUxFXzAwMmRHeC1PcHRpb25zLmh0bWwjVElMRV8wMDJkR3gtT3B0aW9ucyI+VElMRS1HeCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1jcHUtMjE5NiI+PGNvZGU+bWNwdTwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tY3B1LTE5MzAiPjxjb2RlPm1jcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InBpY29DaGlwLU9wdGlvbnMuaHRtbCNpbmRleC1tY3B1LTE5MDMiPjxjb2RlPm1jcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0icGljb0NoaXAtT3B0aW9ucy5odG1sI3BpY29DaGlwLU9wdGlvbnMiPnBpY29DaGlwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW1jcHUtMTYxNiI+PGNvZGU+bWNwdTwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1jcHUtMTQ0MyI+PGNvZGU+bWNwdTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tY3B1LTEzOTUiPjxjb2RlPm1jcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LW1jcHUtMTM0MiI+PGNvZGU+bWNwdTwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI2luZGV4LW1jcHUtMTIwNSI+PGNvZGU+bWNwdTwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbWNwdS0xMTI1Ij48Y29kZT5tY3B1PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWNwdS0xMDkyIj48Y29kZT5tY3B1PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI0FBcmNoNjQtT3B0aW9ucyI+QUFyY2g2NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1tY3B1MzItMTYyNiI+PGNvZGU+bWNwdTMyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbWNwdV8wMDNkLTE3MTMiPjxjb2RlPm1jcHU9PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQy1PcHRpb25zLmh0bWwjaW5kZXgtbWNwdV8wMDNkLTE1OTAiPjxjb2RlPm1jcHU9PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik0zMkMtT3B0aW9ucy5odG1sI00zMkMtT3B0aW9ucyI+TTMyQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1jcHVfMDAzZC0xMTY5Ij48Y29kZT5tY3B1PTwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSMTYtT3B0aW9ucy5odG1sI2luZGV4LW1jcjE2Yy0xMjM1Ij48Y29kZT5tY3IxNmM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1IxNi1PcHRpb25zLmh0bWwjQ1IxNi1PcHRpb25zIj5DUjE2IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNpbmRleC1tY3IxNmNwbHVzLTEyMzQiPjxjb2RlPm1jcjE2Y3BsdXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1IxNi1PcHRpb25zLmh0bWwjQ1IxNi1PcHRpb25zIj5DUjE2IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tY3JjMzItMTQ4MCI+PGNvZGU+bWNyYzMyPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbWNzeW5jXzAwMmRhbm9tYWx5LTExNzQiPjxjb2RlPm1jc3luYy1hbm9tYWx5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWN4MTYtMTQ3NyI+PGNvZGU+bWN4MTY8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtTUQtOTY4Ij48Y29kZT5NRDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tZGFsaWduLTIxMzciPjxjb2RlPm1kYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tZGF0YV8wMDJkYWxpZ24tMTIxNyI+PGNvZGU+bWRhdGEtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNpbmRleC1tZGF0YV8wMDJkbW9kZWwtMTIzOSI+PGNvZGU+bWRhdGEtbW9kZWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1IxNi1PcHRpb25zLmh0bWwjQ1IxNi1PcHRpb25zIj5DUjE2IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1kYy0xNjg5Ij48Y29kZT5tZGM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW1kZWJ1Zy0yMDk2Ij48Y29kZT5tZGVidWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI2luZGV4LW1kZWJ1Zy0xNjA1Ij48Y29kZT5tZGVidWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjTTMyUl8wMDJmRC1PcHRpb25zIj5NMzJSL0QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZNUy1PcHRpb25zLmh0bWwjaW5kZXgtbWRlYnVnXzAwMmRtYWluXzAwM2RfMDA0MHZhcl8wMDdicHJlZml4XzAwN2QtMjI5NSI+PGNvZGU+bWRlYnVnLW1haW49PC9jb2RlPjx2YXI+cHJlZml4PC92YXI+PC9hPjogPGEgaHJlZj0iVk1TLU9wdGlvbnMuaHRtbCNWTVMtT3B0aW9ucyI+Vk1TIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNpbmRleC1tZGVjXzAwMmRhc20tMTkwMSI+PGNvZGU+bWRlYy1hc208L2NvZGU+PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIj5QRFAtMTEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW1kaXNhYmxlXzAwMmRjYWxsdC0yMjczIj48Y29kZT5tZGlzYWJsZS1jYWxsdDwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI2luZGV4LW1kaXNhYmxlXzAwMmRmcHJlZ3MtMTQxOCI+PGNvZGU+bWRpc2FibGUtZnByZWdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyI+SFBQQSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjaW5kZXgtbWRpc2FibGVfMDAyZGluZGV4aW5nLTE0MTkiPjxjb2RlPm1kaXNhYmxlLWluZGV4aW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyI+SFBQQSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tZGl2LTE2OTAiPjxjb2RlPm1kaXY8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbWRpdi0xNjU4Ij48Y29kZT5tZGl2PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNNQ29yZS1PcHRpb25zIj5NQ29yZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1tZGl2LTE2MzgiPjxjb2RlPm1kaXY8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbWRpdl8wMDNkXzAwNDB2YXJfMDA3YnN0cmF0ZWd5XzAwN2QtMjE1NyI+PGNvZGU+bWRpdj08L2NvZGU+PHZhcj5zdHJhdGVneTwvdmFyPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWRpdmlkZV8wMDJkYnJlYWtzLTE4MDciPjxjb2RlPm1kaXZpZGUtYnJlYWtzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjaW5kZXgtbWRpdmlkZV8wMDJkZW5hYmxlZC0xNTg1Ij48Y29kZT5tZGl2aWRlLWVuYWJsZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tZGl2aWRlXzAwMmR0cmFwcy0xODA2Ij48Y29kZT5tZGl2aWRlLXRyYXBzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1kaXZzaTNfMDA1ZmxpYmZ1bmNfMDAzZF8wMDQwdmFyXzAwN2JuYW1lXzAwN2QtMjE1OSI+PGNvZGU+bWRpdnNpM19saWJmdW5jPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwjaW5kZXgtbWRsbC0xNTEzIj48Y29kZT5tZGxsPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBXaW5kb3dzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWRsbXpiLTE5ODQiPjxjb2RlPm1kbG16YjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWRteC0xNzc2Ij48Y29kZT5tZG14PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tZG91YmxlLTEzNTkiPjxjb2RlPm1kb3VibGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWRvdWJsZV8wMDJkZmxvYXQtMTk2OCI+PGNvZGU+bWRvdWJsZS1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWRvdWJsZV8wMDJkZmxvYXQtMTc2NSI+PGNvZGU+bWRvdWJsZS1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1kc3AtMTc2OCI+PGNvZGU+bWRzcDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1kc3ByMi0xNzcwIj48Y29kZT5tZHNwcjI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI2luZGV4LW1kdWFsXzAwMmRub3BzLTIyMzYiPjxjb2RlPm1kdWFsLW5vcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyI+U1BVIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1kd2FyZjJfMDAyZGFzbS0xNTUwIj48Y29kZT5tZHdhcmYyLWFzbTwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tZHdvcmQtMTM1NyI+PGNvZGU+bWR3b3JkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1keW5hbWljXzAwMmRub18wMDJkcGljLTIwMDAiPjxjb2RlPm1keW5hbWljLW5vLXBpYzwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNpbmRleC1tZWEzMi0yMjI5Ij48Y29kZT5tZWEzMjwvY29kZT48L2E+OiA8YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI1NQVS1PcHRpb25zIj5TUFUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjaW5kZXgtbWVhNjQtMjIzMCI+PGNvZGU+bWVhNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyI+U1BVIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWVhYmktMjAyOSI+PGNvZGU+bWVhYmk8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWVhcmx5XzAwMmRzdG9wXzAwMmRiaXRzLTE1NTEiPjxjb2RlPm1lYXJseS1zdG9wLWJpdHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tZWItMjEwOSI+PGNvZGU+bWViPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNTY29yZS1PcHRpb25zIj5TY29yZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTW94aWUtT3B0aW9ucy5odG1sI2luZGV4LW1lYi0xODc1Ij48Y29kZT5tZWI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTW94aWUtT3B0aW9ucy5odG1sI01veGllLU9wdGlvbnMiPk1veGllIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1lYi0xNjkxIj48Y29kZT5tZWI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbWVsLTIxMTAiPjxjb2RlPm1lbDwvY29kZT48L2E+OiA8YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjU2NvcmUtT3B0aW9ucyI+U2NvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1veGllLU9wdGlvbnMuaHRtbCNpbmRleC1tZWwtMTg3NiI+PGNvZGU+bWVsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1veGllLU9wdGlvbnMuaHRtbCNNb3hpZS1PcHRpb25zIj5Nb3hpZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tZWwtMTY5MiI+PGNvZGU+bWVsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbWVsZi0xODUyIj48Y29kZT5tZWxmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtbWVsZi0xMjI4Ij48Y29kZT5tZWxmPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1lbWItMjAyOCI+PGNvZGU+bWVtYjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWVtYmVkZGVkXzAwMmRkYXRhLTE3OTUiPjxjb2RlPm1lbWJlZGRlZC1kYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyQy1PcHRpb25zLmh0bWwjaW5kZXgtbWVtcmVnc18wMDNkLTE1OTIiPjxjb2RlPm1lbXJlZ3M9PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik0zMkMtT3B0aW9ucy5odG1sI00zMkMtT3B0aW9ucyI+TTMyQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbWVwLTIyNTgiPjxjb2RlPm1lcDwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI2luZGV4LW1lcHNpbG9uLTE4NDIiPjxjb2RlPm1lcHNpbG9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNpbmRleC1tZXJyb3JfMDAyZHJlbG9jLTIyMjEiPjxjb2RlPm1lcnJvci1yZWxvYzwvY29kZT48L2E+OiA8YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI1NQVS1PcHRpb25zIj5TUFUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbWVzYS0yMDkzIj48Y29kZT5tZXNhPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tZXRyYXgxMDAtMTIwOSI+PGNvZGU+bWV0cmF4MTAwPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtbWV0cmF4NC0xMjA4Ij48Y29kZT5tZXRyYXg0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWV4cGxpY2l0XzAwMmRyZWxvY3MtMTgwMiI+PGNvZGU+bWV4cGxpY2l0LXJlbG9jczwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbWV4cGxpY2l0XzAwMmRyZWxvY3MtMTMzNiI+PGNvZGU+bWV4cGxpY2l0LXJlbG9jczwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI2luZGV4LW1leHItMTQwNyI+PGNvZGU+bWV4cjwvY29kZT48L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNIOF8wMDJmMzAwLU9wdGlvbnMiPkg4LzMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWV4dGVybl8wMDJkc2RhdGEtMTc5MSI+PGNvZGU+bWV4dGVybi1zZGF0YTwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtTUYtOTYzIj48Y29kZT5NRjwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1tZmFzdF8wMDJkZnAtMTE4OCI+PGNvZGU+bWZhc3QtZnA8L2NvZGU+PC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tZmFzdF8wMDJkaW5kaXJlY3RfMDAyZGNhbGxzLTE0MjEiPjxjb2RlPm1mYXN0LWluZGlyZWN0LWNhbGxzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyI+SFBQQSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1mYXN0ZXJfMDAyZHN0cnVjdHMtMjE5NSI+PGNvZGU+bWZhc3Rlci1zdHJ1Y3RzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tZmRwaWMtMTM2NSI+PGNvZGU+bWZkcGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWZlbnRyeS0xNDk3Ij48Y29kZT5tZmVudHJ5PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LW1maXgtMTMzMCI+PGNvZGU+bWZpeDwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1maXhfMDAyZDI0ay0xODE3Ij48Y29kZT5tZml4LTI0azwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtbWZpeF8wMDJkYW5kXzAwMmRjb250aW51ZS0xMjQ3Ij48Y29kZT5tZml4LWFuZC1jb250aW51ZTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tZml4XzAwMmRhdDY5N2YtMjIxMiI+PGNvZGU+bWZpeC1hdDY5N2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LW1maXhfMDAyZGNvcnRleF8wMDJkbTNfMDAyZGxkcmQtMTE0NiI+PGNvZGU+bWZpeC1jb3J0ZXgtbTMtbGRyZDwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1maXhfMDAyZHIxMDAwMC0xODIzIj48Y29kZT5tZml4LXIxMDAwMDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1maXhfMDAyZHI0MDAwLTE4MTkiPjxjb2RlPm1maXgtcjQwMDA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tZml4XzAwMmRyNDQwMC0xODIxIj48Y29kZT5tZml4LXI0NDAwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWZpeF8wMDJkc2IxLTE4MjciPjxjb2RlPm1maXgtc2IxPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWZpeF8wMDJkdnI0MTIwLTE4MjUiPjxjb2RlPm1maXgtdnI0MTIwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWZpeF8wMDJkdnI0MTMwLTE4MjYiPjxjb2RlPm1maXgtdnI0MTMwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tZml4ZWRfMDAyZGNjLTEzNTYiPjxjb2RlPm1maXhlZC1jYzwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjaW5kZXgtbWZpeGVkXzAwMmRyYW5nZS0yMjI4Ij48Y29kZT5tZml4ZWQtcmFuZ2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyI+U1BVIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbWZpeGVkXzAwMmRyYW5nZS0yMTYwIj48Y29kZT5tZml4ZWQtcmFuZ2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1maXhlZF8wMDJkcmFuZ2UtMTU1MyI+PGNvZGU+bWZpeGVkLXJhbmdlPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tZml4ZWRfMDAyZHJhbmdlLTE0MjIiPjxjb2RlPm1maXhlZC1yYW5nZTwvY29kZT48L2E+OiA8YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiPkhQUEEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tZmxhdC0yMTg0Ij48Y29kZT5tZmxhdDwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1mbGlwXzAwMmRtaXBzMTYtMTc0MiI+PGNvZGU+bWZsaXAtbWlwczE2PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tZmxvYXRfMDAyZGFiaS0xMTIxIj48Y29kZT5tZmxvYXQtYWJpPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1mbG9hdF8wMDJkZ3Bycy0xOTUxIj48Y29kZT5tZmxvYXQtZ3ByczwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tZmxvYXRfMDAyZGllZWUtMTMzNSI+PGNvZGU+bWZsb2F0LWllZWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LW1mbG9hdF8wMDJkdmF4LTEzMzQiPjxjb2RlPm1mbG9hdC12YXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNpbmRleC1tZmxvYXQzMi0xODk0Ij48Y29kZT5tZmxvYXQzMjwvY29kZT48L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNQRFBfMDAyZDExLU9wdGlvbnMiPlBEUC0xMSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjaW5kZXgtbWZsb2F0NjQtMTg5MiI+PGNvZGU+bWZsb2F0NjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIj5QRFAtMTEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1mbHVzaF8wMDJkZnVuYy0xODI5Ij48Y29kZT5tZmx1c2gtZnVuYzwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI2luZGV4LW1mbHVzaF8wMDJkZnVuY18wMDNkXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC0xNjEyIj48Y29kZT5tZmx1c2gtZnVuYz08L2NvZGU+PHZhcj5uYW1lPC92YXI+PC9hPjogPGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjTTMyUl8wMDJmRC1PcHRpb25zIj5NMzJSL0QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI2luZGV4LW1mbHVzaF8wMDJkdHJhcF8wMDNkXzAwNDB2YXJfMDA3Ym51bWJlcl8wMDdkLTE2MTAiPjxjb2RlPm1mbHVzaC10cmFwPTwvY29kZT48dmFyPm51bWJlcjwvdmFyPjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI00zMlJfMDAyZkQtT3B0aW9ucyI+TTMyUi9EIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbWZtYWYtMjIxMCI+PGNvZGU+bWZtYWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbWZtb3ZkLTIxNDEiPjxjb2RlPm1mbW92ZDwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtbWZvcmNlXzAwMmRub18wMDJkcGljLTIzMTUiPjxjb2RlPm1mb3JjZS1uby1waWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tZnBfMDAyZGV4Y2VwdGlvbnMtMTgzMyI+PGNvZGU+bWZwLWV4Y2VwdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjaW5kZXgtbWZwXzAwMmRtb2RlLTExMDciPjxjb2RlPm1mcC1tb2RlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIj5BZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tZnBfMDAyZHJlZy0xMzE3Ij48Y29kZT5tZnAtcmVnPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tZnBfMDAyZHJvdW5kaW5nXzAwMmRtb2RlLTEzMjIiPjxjb2RlPm1mcC1yb3VuZGluZy1tb2RlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tZnBfMDAyZHRyYXBfMDAyZG1vZGUtMTMyMSI+PGNvZGU+bWZwLXRyYXAtbW9kZTwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbWZwMTZfMDAyZGZvcm1hdC0xMTI5Ij48Y29kZT5tZnAxNi1mb3JtYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tZnAzMi0xNzU5Ij48Y29kZT5tZnAzMjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1mcDY0LTE3NjAiPjxjb2RlPm1mcDY0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWZwbWF0aC0xNDQ0Ij48Y29kZT5tZnBtYXRoPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbWZwbWF0aC05MDMiPjxjb2RlPm1mcG1hdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1mcHJfMDAyZDMyLTEzNTEiPjxjb2RlPm1mcHItMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1mcHJfMDAyZDY0LTEzNTIiPjxjb2RlPm1mcHItNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWZwcm5kLTE5MjIiPjxjb2RlPm1mcHJuZDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1mcHUtMjE4NiI+PGNvZGU+bWZwdTwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tZnB1LTE5NzAiPjxjb2RlPm1mcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW1mcHUtMTg3OSI+PGNvZGU+bWZwdTwvY29kZT48L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNQRFBfMDAyZDExLU9wdGlvbnMiPlBEUC0xMSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tZnB1LTExMjgiPjxjb2RlPm1mcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWZyaXotMjA1MyI+PGNvZGU+bWZyaXo8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tZnNjYS0yMTcyIj48Y29kZT5tZnNjYTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tZnNycmEtMjE3NCI+PGNvZGU+bWZzcnJhPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1mdWxsXzAwMmR0b2MtMTk1NCI+PGNvZGU+bWZ1bGwtdG9jPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI2luZGV4LW1mdXNlZF8wMDJkbWFkZC0yMzExIj48Y29kZT5tZnVzZWQtbWFkZDwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tZnVzZWRfMDAyZG1hZGQtMjE3MCI+PGNvZGU+bWZ1c2VkLW1hZGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW1mdXNlZF8wMDJkbWFkZC0yMTAyIj48Y29kZT5tZnVzZWQtbWFkZDwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1mdXNlZF8wMDJkbWFkZC0xOTgwIj48Y29kZT5tZnVzZWQtbWFkZDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWZ1c2VkXzAwMmRtYWRkLTE4MTQiPjxjb2RlPm1mdXNlZC1tYWRkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tZnVzZWRfMDAyZG1hZGQtMTU0NyI+PGNvZGU+bWZ1c2VkLW1hZGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWC1PcHRpb25zLmh0bWwjaW5kZXgtbWctMjI5MyI+PGNvZGU+bWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iVkFYLU9wdGlvbnMuaHRtbCNWQVgtT3B0aW9ucyI+VkFYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LU1HLTk2NCI+PGNvZGU+TUc8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tZ2FzLTE0MjUiPjxjb2RlPm1nYXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tZ2NjXzAwMmRhYmktMjI4NCI+PGNvZGU+bWdjYy1hYmk8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWdlbl8wMDJkY2VsbF8wMDJkbWljcm9jb2RlLTE5MzkiPjxjb2RlPm1nZW4tY2VsbC1taWNyb2NvZGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LW1nZW5lcmFsXzAwMmRyZWdzXzAwMmRvbmx5LTEwODEiPjxjb2RlPm1nZW5lcmFsLXJlZ3Mtb25seTwvY29kZT48L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tZ2V0dHJjb3N0XzAwM2RfMDA0MHZhcl8wMDdibnVtYmVyXzAwN2QtMjE2MiI+PGNvZGU+bWdldHRyY29zdD08L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW1naHMtMjI4MyI+PGNvZGU+bWdoczwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdOVV8wMDJmTGludXgtT3B0aW9ucy5odG1sI2luZGV4LW1nbGliYy0xMzk2Ij48Y29kZT5tZ2xpYmM8L2NvZGU+PC9hPjogPGEgaHJlZj0iR05VXzAwMmZMaW51eC1PcHRpb25zLmh0bWwjR05VXzAwMmZMaW51eC1PcHRpb25zIj5HTlUvTGludXggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZBWC1PcHRpb25zLmh0bWwjaW5kZXgtbWdudS0yMjkyIj48Y29kZT5tZ251PC9jb2RlPjwvYT46IDxhIGhyZWY9IlZBWC1PcHRpb25zLmh0bWwjVkFYLU9wdGlvbnMiPlZBWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tZ251XzAwMmRhcy0xNTI1Ij48Y29kZT5tZ251LWFzPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1nbnVfMDAyZGxkLTE1MjciPjxjb2RlPm1nbnUtbGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI2luZGV4LW1nbnVfMDAyZGxkLTE0MzAiPjxjb2RlPm1nbnUtbGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tZ290cGx0LTEyMjciPjxjb2RlPm1nb3RwbHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tZ3AzMi0xNzU3Ij48Y29kZT5tZ3AzMjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ncDY0LTE3NTgiPjxjb2RlPm1ncDY0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWdwb3B0LTE3OTMiPjxjb2RlPm1ncG9wdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbWdwcl8wMDJkMzItMTM0OSI+PGNvZGU+bWdwci0zMjwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbWdwcl8wMDJkNjQtMTM1MCI+PGNvZGU+bWdwci02NDwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbWdwcmVsXzAwMmRyby0xMzY5Ij48Y29kZT5tZ3ByZWwtcm88L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1taC0xNDAzIj48Y29kZT5taDwvY29kZT48L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNIOF8wMDJmMzAwLU9wdGlvbnMiPkg4LzMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1oYWxmXzAwMmRyZWdfMDAyZGZpbGUtMTA5NiI+PGNvZGU+bWhhbGYtcmVnLWZpbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW1oYXJkXzAwMmRkZnAtMjA4MCI+PGNvZGU+bWhhcmQtZGZwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWhhcmRfMDAyZGRmcC0xOTI4Ij48Y29kZT5taGFyZC1kZnA8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW1oYXJkXzAwMmRmbG9hdC0yMjgwIj48Y29kZT5taGFyZC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1taGFyZF8wMDJkZmxvYXQtMjE4NyI+PGNvZGU+bWhhcmQtZmxvYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW1oYXJkXzAwMmRmbG9hdC0yMDc4Ij48Y29kZT5taGFyZC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1oYXJkXzAwMmRmbG9hdC0xOTY2Ij48Y29kZT5taGFyZC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWhhcmRfMDAyZGZsb2F0LTE3NjEiPjxjb2RlPm1oYXJkLWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbWhhcmRfMDAyZGZsb2F0LTE3MTAiPjxjb2RlPm1oYXJkLWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1taGFyZF8wMDJkZmxvYXQtMTYzNSI+PGNvZGU+bWhhcmQtZmxvYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1oYXJkXzAwMmRmbG9hdC0xMzUzIj48Y29kZT5taGFyZC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1taGFyZF8wMDJkcXVhZF8wMDJkZmxvYXQtMjE5MCI+PGNvZGU+bWhhcmQtcXVhZC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNpbmRleC1taGFyZGxpdC0xNjU2Ij48Y29kZT5taGFyZGxpdDwvY29kZT48L2E+OiA8YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjTUNvcmUtT3B0aW9ucyI+TUNvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjaW5kZXgtbWhpbnRfMDAyZG1heF8wMDJkZGlzdGFuY2UtMjIzOCI+PGNvZGU+bWhpbnQtbWF4LWRpc3RhbmNlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNpbmRleC1taGludF8wMDJkbWF4XzAwMmRub3BzLTIyMzciPjxjb2RlPm1oaW50LW1heC1ub3BzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1oaXRhY2hpLTIxNDIiPjxjb2RlPm1oaXRhY2hpPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjaW5kZXgtbWhwXzAwMmRsZC0xNDMxIj48Y29kZT5taHAtbGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbWljcGxiLTExOTQiPjxjb2RlPm1pY3BsYjwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1taWRfMDAyZHNoYXJlZF8wMDJkbGlicmFyeS0xMTc5Ij48Y29kZT5taWQtc2hhcmVkLWxpYnJhcnk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbWllZWUtMjE0NiI+PGNvZGU+bWllZWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LW1pZWVlLTEzMTkiPjxjb2RlPm1pZWVlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1taWVlZV8wMDJkY29uZm9ybWFudC0xMzI0Ij48Y29kZT5taWVlZS1jb25mb3JtYW50PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWllZWVfMDAyZGZwLTE0NDYiPjxjb2RlPm1pZWVlLWZwPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LW1pZWVlXzAwMmR3aXRoXzAwMmRpbmV4YWN0LTEzMjAiPjxjb2RlPm1pZWVlLXdpdGgtaW5leGFjdDwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWlscDMyLTE1NTYiPjxjb2RlPm1pbHAzMjwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU29sYXJpcy0yLU9wdGlvbnMuaHRtbCNpbmRleC1taW1wdXJlXzAwMmR0ZXh0LTIxNzgiPjxjb2RlPm1pbXB1cmUtdGV4dDwvY29kZT48L2E+OiA8YSBocmVmPSJTb2xhcmlzLTItT3B0aW9ucy5odG1sI1NvbGFyaXMtMi1PcHRpb25zIj5Tb2xhcmlzIDIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1pbmNvbWluZ18wMDJkc3RhY2tfMDAyZGJvdW5kYXJ5LTE0NjciPjxjb2RlPm1pbmNvbWluZy1zdGFjay1ib3VuZGFyeTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1pbmRleGVkXzAwMmRhZGRyZXNzaW5nLTIxNjEiPjxjb2RlPm1pbmRleGVkLWFkZHJlc3Npbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1taW5saW5lXzAwMmRhbGxfMDAyZHN0cmluZ29wcy0xNDkxIj48Y29kZT5taW5saW5lLWFsbC1zdHJpbmdvcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWlubGluZV8wMDJkZmxvYXRfMDAyZGRpdmlkZV8wMDJkbWF4XzAwMmR0aHJvdWdocHV0LTE1MzkiPjxjb2RlPm1pbmxpbmUtZmxvYXQtZGl2aWRlLW1heC10aHJvdWdocHV0PC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1pbmxpbmVfMDAyZGZsb2F0XzAwMmRkaXZpZGVfMDAyZG1pbl8wMDJkbGF0ZW5jeS0xNTM4Ij48Y29kZT5taW5saW5lLWZsb2F0LWRpdmlkZS1taW4tbGF0ZW5jeTwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1pbmxpbmVfMDAyZGljXzAwNWZpbnZhbGlkYXRlLTIxNDgiPjxjb2RlPm1pbmxpbmUtaWNfaW52YWxpZGF0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWlubGluZV8wMDJkaW50XzAwMmRkaXZpZGVfMDAyZG1heF8wMDJkdGhyb3VnaHB1dC0xNTQyIj48Y29kZT5taW5saW5lLWludC1kaXZpZGUtbWF4LXRocm91Z2hwdXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWlubGluZV8wMDJkaW50XzAwMmRkaXZpZGVfMDAyZG1pbl8wMDJkbGF0ZW5jeS0xNTQxIj48Y29kZT5taW5saW5lLWludC1kaXZpZGUtbWluLWxhdGVuY3k8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbWlubGluZV8wMDJkcGx0LTEzNjYiPjxjb2RlPm1pbmxpbmUtcGx0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1pbmxpbmVfMDAyZHBsdC0xMTg5Ij48Y29kZT5taW5saW5lLXBsdDwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWlubGluZV8wMDJkc3FydF8wMDJkbWF4XzAwMmR0aHJvdWdocHV0LTE1NDUiPjxjb2RlPm1pbmxpbmUtc3FydC1tYXgtdGhyb3VnaHB1dDwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1taW5saW5lXzAwMmRzcXJ0XzAwMmRtaW5fMDAyZGxhdGVuY3ktMTU0NCI+PGNvZGU+bWlubGluZS1zcXJ0LW1pbi1sYXRlbmN5PC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1taW5saW5lXzAwMmRzdHJpbmdvcHNfMDAyZGR5bmFtaWNhbGx5LTE0OTIiPjxjb2RlPm1pbmxpbmUtc3RyaW5nb3BzLWR5bmFtaWNhbGx5PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWluc2VydF8wMDJkc2NoZWRfMDAyZG5vcHMtMjAwNCI+PGNvZGU+bWluc2VydC1zY2hlZC1ub3BzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjaW5kZXgtbWludF8wMDJkcmVnaXN0ZXItMjA3MSI+PGNvZGU+bWludC1yZWdpc3RlcjwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW1pbnQxNi0xODg4Ij48Y29kZT5taW50MTY8L2NvZGU+PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIj5QRFAtMTEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW1pbnQzMi0xODkwIj48Y29kZT5taW50MzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIj5QRFAtMTEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI2luZGV4LW1pbnQzMi0xNDA5Ij48Y29kZT5taW50MzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIj5IOC8zMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSMTYtT3B0aW9ucy5odG1sI2luZGV4LW1pbnQzMi0xMjM3Ij48Y29kZT5taW50MzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1IxNi1PcHRpb25zLmh0bWwjQ1IxNi1PcHRpb25zIj5DUjE2IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI2luZGV4LW1pbnQ4LTExNTYiPjxjb2RlPm1pbnQ4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWludGVybGlua18wMDJkbWlwczE2LTE3NDMiPjxjb2RlPm1pbnRlcmxpbmstbWlwczE2PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1pbnZhbGlkXzAwMmRzeW1ib2xzLTIxNjQiPjxjb2RlPm1pbnZhbGlkLXN5bWJvbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1pb18wMDJkdm9sYXRpbGUtMTY5MyI+PGNvZGU+bWlvLXZvbGF0aWxlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWlwczEtMTczMiI+PGNvZGU+bWlwczE8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1taXBzMTYtMTc0MCI+PGNvZGU+bWlwczE2PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWlwczItMTczMyI+PGNvZGU+bWlwczI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1taXBzMy0xNzM0Ij48Y29kZT5taXBzMzwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1pcHMzMi0xNzM2Ij48Y29kZT5taXBzMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1taXBzMzJyMi0xNzM3Ij48Y29kZT5taXBzMzJyMjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1pcHMzZC0xNzc4Ij48Y29kZT5taXBzM2Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1taXBzNC0xNzM1Ij48Y29kZT5taXBzNDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1pcHM2NC0xNzM4Ij48Y29kZT5taXBzNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1taXBzNjRyMi0xNzM5Ij48Y29kZT5taXBzNjRyMjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1taXNlbC0xOTQzIj48Y29kZT5taXNlbDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1pc2l6ZS0yMTQ5Ij48Y29kZT5taXNpemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNpbmRleC1taXNzdWVfMDAyZHJhdGVfMDAzZF8wMDQwdmFyXzAwN2JudW1iZXJfMDA3ZC0xNjA4Ij48Y29kZT5taXNzdWUtcmF0ZT08L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1taXZjMi0xNjg4Ij48Y29kZT5taXZjMjwvY29kZT48L2E+OiA8YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI2luZGV4LW1qdW1wXzAwMmRpbl8wMDJkZGVsYXktMTQxNyI+PGNvZGU+bWp1bXAtaW4tZGVsYXk8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LW1rZXJuZWwtMTI0NSI+PGNvZGU+bWtlcm5lbDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI2luZGV4LW1rbnV0aGRpdi0xODQ4Ij48Y29kZT5ta251dGhkaXY8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjTU1JWC1PcHRpb25zIj5NTUlYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbWwtMjEzNiI+PGNvZGU+bWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1sLTE2OTQiPjxjb2RlPm1sPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tbGFyZ2VfMDAyZGRhdGEtMTMzOSI+PGNvZGU+bWxhcmdlLWRhdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbGFyZ2VfMDAyZGRhdGFfMDAyZHRocmVzaG9sZC0xNDU3Ij48Y29kZT5tbGFyZ2UtZGF0YS10aHJlc2hvbGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjaW5kZXgtbWxhcmdlXzAwMmRtZW0tMjIyNiI+PGNvZGU+bWxhcmdlLW1lbTwvY29kZT48L2E+OiA8YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI1NQVS1PcHRpb25zIj5TUFUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbWxhcmdlXzAwMmR0ZXh0LTEzNDEiPjxjb2RlPm1sYXJnZS10ZXh0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tbGVhZHotMTY5NSI+PGNvZGU+bWxlYWR6PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1sZWFmXzAwMmRpZF8wMDJkc2hhcmVkXzAwMmRsaWJyYXJ5LTExODEiPjxjb2RlPm1sZWFmLWlkLXNoYXJlZC1saWJyYXJ5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbWxpYmZ1bmNzLTE4NDAiPjxjb2RlPm1saWJmdW5jczwvY29kZT48L2E+OiA8YSBocmVmPSJNTUlYLU9wdGlvbnMuaHRtbCNNTUlYLU9wdGlvbnMiPk1NSVggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbWxpYnJhcnlfMDAyZHBpYy0xMzc0Ij48Y29kZT5tbGlicmFyeS1waWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1saW5rZWRfMDAyZGZwLTEzNzEiPjxjb2RlPm1saW5rZWQtZnA8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tbGlua2VyXzAwMmRvcHQtMTQyNyI+PGNvZGU+bWxpbmtlci1vcHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tbGludXgtMTIyOSI+PGNvZGU+bWxpbnV4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1saXR0bGUtMTk5NiI+PGNvZGU+bWxpdHRsZTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1saXR0bGVfMDAyZGVuZGlhbi0xOTk3Ij48Y29kZT5tbGl0dGxlLWVuZGlhbjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbWxpdHRsZV8wMDJkZW5kaWFuLTE3MjUiPjxjb2RlPm1saXR0bGUtZW5kaWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI2luZGV4LW1saXR0bGVfMDAyZGVuZGlhbi0xNjcwIj48Y29kZT5tbGl0dGxlLWVuZGlhbjwvY29kZT48L2E+OiA8YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjTUNvcmUtT3B0aW9ucyI+TUNvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWxpdHRsZV8wMDJkZW5kaWFuLTE1MjQiPjxjb2RlPm1saXR0bGUtZW5kaWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDNlgtT3B0aW9ucy5odG1sI2luZGV4LW1saXR0bGVfMDAyZGVuZGlhbi0xMTk4Ij48Y29kZT5tbGl0dGxlLWVuZGlhbjwvY29kZT48L2E+OiA8YSBocmVmPSJDNlgtT3B0aW9ucy5odG1sI0M2WC1PcHRpb25zIj5DNlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbWxpdHRsZV8wMDJkZW5kaWFuLTExMjIiPjxjb2RlPm1saXR0bGUtZW5kaWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjaW5kZXgtbWxpdHRsZV8wMDJkZW5kaWFuLTEwODIiPjxjb2RlPm1saXR0bGUtZW5kaWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI0FBcmNoNjQtT3B0aW9ucyI+QUFyY2g2NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI2luZGV4LW1saXR0bGVfMDAyZGVuZGlhbl8wMDJkZGF0YS0yMDYzIj48Y29kZT5tbGl0dGxlLWVuZGlhbi1kYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIj5SWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbWxpdy0xODcwIj48Y29kZT5tbGl3PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbWxsc2MtMTc2NiI+PGNvZGU+bWxsc2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbG9jYWxfMDAyZHNkYXRhLTE3ODkiPjxjb2RlPm1sb2NhbC1zZGF0YTwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW1sb25nXzAwMmRjYWxscy0yMjU1Ij48Y29kZT5tbG9uZy1jYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1sb25nXzAwMmRjYWxscy0xODEwIj48Y29kZT5tbG9uZy1jYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbWxvbmdfMDAyZGNhbGxzLTEzNzIiPjxjb2RlPm1sb25nLWNhbGxzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1sb25nXzAwMmRjYWxscy0xMTg2Ij48Y29kZT5tbG9uZy1jYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbWxvbmdfMDAyZGNhbGxzLTExMzIiPjxjb2RlPm1sb25nLWNhbGxzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1sb25nXzAwMmRjYWxscy0xMTA0Ij48Y29kZT5tbG9uZy1jYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucyI+QWRhcHRldmEgRXBpcGhhbnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbWxvbmdfMDAyZGRvdWJsZV8wMDJkMTI4LTIwODMiPjxjb2RlPm1sb25nLWRvdWJsZS0xMjg8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbWxvbmdfMDAyZGRvdWJsZV8wMDJkNjQtMjA4MiI+PGNvZGU+bWxvbmctZG91YmxlLTY0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbG9uZ18wMDJkZG91YmxlXzAwMmQ2NC0xNDU1Ij48Y29kZT5tbG9uZy1kb3VibGUtNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1sb25nXzAwMmRkb3VibGVfMDAyZDgwLTE0NTYiPjxjb2RlPm1sb25nLWRvdWJsZS04MDwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbWxvbmdfMDAyZGp1bXBzLTIyNzciPjxjb2RlPm1sb25nLWp1bXBzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjaW5kZXgtbWxvbmdfMDAyZGxvYWRfMDAyZHN0b3JlLTE0MjMiPjxjb2RlPm1sb25nLWxvYWQtc3RvcmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbG9uZzMyLTE3ODUiPjxjb2RlPm1sb25nMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbG9uZzY0LTE3ODQiPjxjb2RlPm1sb25nNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbWxvbmdjYWxsLTIwNDQiPjxjb2RlPm1sb25nY2FsbDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNpbmRleC1tbG9uZ2NhbGxzLTIzMjAiPjxjb2RlPm1sb25nY2FsbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tbG9vcC0yMjgxIj48Y29kZT5tbG9vcDwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1tbG93XzAwMmQ2NGstMTE3NiI+PGNvZGU+bWxvdy02NGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1scDY0LTE1NTciPjxjb2RlPm1scDY0PC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1tLTE2OTYiPjxjb2RlPm1tPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1NTS05NjIiPjxjb2RlPk1NPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2NvcmUtT3B0aW9ucy5odG1sI2luZGV4LW1tYWMtMjExMyI+PGNvZGU+bW1hYzwvY29kZT48L2E+OiA8YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjU2NvcmUtT3B0aW9ucyI+U2NvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSMTYtT3B0aW9ucy5odG1sI2luZGV4LW1tYWMtMTIzMyI+PGNvZGU+bW1hYzwvY29kZT48L2E+OiA8YSBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNDUjE2LU9wdGlvbnMiPkNSMTYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1tYWQtMTgxMiI+PGNvZGU+bW1hZDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZNUy1PcHRpb25zLmh0bWwjaW5kZXgtbW1hbGxvYzY0LTIyOTYiPjxjb2RlPm1tYWxsb2M2NDwvY29kZT48L2E+OiA8YSBocmVmPSJWTVMtT3B0aW9ucy5odG1sI1ZNUy1PcHRpb25zIj5WTVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbW1heC0xMzMyIj48Y29kZT5tbWF4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI2luZGV4LW1tYXhfMDAyZGNvbnN0YW50XzAwMmRzaXplLTIwNjkiPjxjb2RlPm1tYXgtY29uc3RhbnQtc2l6ZTwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI2luZGV4LW1tYXhfMDAyZHN0YWNrXzAwMmRmcmFtZS0xMjA3Ij48Y29kZT5tbWF4LXN0YWNrLWZyYW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW1jb3VudF8wMDJkcmFfMDAyZGFkZHJlc3MtMTgzNyI+PGNvZGU+bW1jb3VudC1yYS1hZGRyZXNzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW1jdS0xNzgyIj48Y29kZT5tbWN1PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1tbWN1LTExNTIiPjxjb2RlPm1tY3U8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LU1NRC05NjkiPjxjb2RlPk1NRDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW1lZGlhLTEzNjEiPjxjb2RlPm1tZWRpYTwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1tZW1jcHktMTgwOCI+PGNvZGU+bW1lbWNweTwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI2luZGV4LW1tZW1jcHktMTcxMSI+PGNvZGU+bW1lbWNweTwvY29kZT48L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNNaWNyb0JsYXplLU9wdGlvbnMiPk1pY3JvQmxhemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbW1lbW9yeV8wMDJkbGF0ZW5jeS0xMzQ0Ij48Y29kZT5tbWVtb3J5LWxhdGVuY3k8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbW1lbW9yeV8wMDJkbW9kZWwtMjIxNiI+PGNvZGU+bW1lbW9yeS1tb2RlbDwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbWZjcmYtMTkxNiI+PGNvZGU+bW1mY3JmPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW1mcGdwci0xOTI2Ij48Y29kZT5tbWZwZ3ByPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW1pbmltYWxfMDAyZHRvYy0xOTU3Ij48Y29kZT5tbWluaW1hbC10b2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjaW5kZXgtbW1pbm1heC0xNjk3Ij48Y29kZT5tbWlubWF4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW1teC0xNDY4Ij48Y29kZT5tbW14PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNpbmRleC1tbW9kZWxfMDAzZGxhcmdlLTE1OTkiPjxjb2RlPm1tb2RlbD1sYXJnZTwvY29kZT48L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjaW5kZXgtbW1vZGVsXzAwM2RtZWRpdW0tMTU5OCI+PGNvZGU+bW1vZGVsPW1lZGl1bTwvY29kZT48L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjaW5kZXgtbW1vZGVsXzAwM2RzbWFsbC0xNTk3Ij48Y29kZT5tbW9kZWw9c21hbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjTTMyUl8wMDJmRC1PcHRpb25zIj5NMzJSL0QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1tb3ZiZS0xNDc5Ij48Y29kZT5tbW92YmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1tdC0xNzgwIj48Y29kZT5tbXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSTDc4LU9wdGlvbnMuaHRtbCNpbmRleC1tbXVsLTE5MDciPjxjb2RlPm1tdWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkw3OC1PcHRpb25zLmh0bWwjUkw3OC1PcHRpb25zIj5STDc4IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tbXVsXzAwMmRidWdfMDAyZHdvcmthcm91bmQtMTIxMCI+PGNvZGU+bW11bC1idWctd29ya2Fyb3VuZDwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW11bGFkZC0xMzYzIj48Y29kZT5tbXVsYWRkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1tdWxody0xOTgyIj48Y29kZT5tbXVsaHc8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjaW5kZXgtbW11bHQtMTY5OCI+PGNvZGU+bW11bHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1tbXVsdF8wMDJkYnVnLTE4NjAiPjxjb2RlPm1tdWx0LWJ1ZzwvY29kZT48L2E+OiA8YSBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNNTjEwMzAwLU9wdGlvbnMiPk1OMTAzMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW11bHRpXzAwMmRjb25kXzAwMmRleGVjLTEzODgiPjxjb2RlPm1tdWx0aS1jb25kLWV4ZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbW11bHRpY29yZS0xMTkwIj48Y29kZT5tbXVsdGljb3JlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1tdWx0aXBsZS0xOTcyIj48Y29kZT5tbXVsdGlwbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbW12Y2xlLTIwOTQiPjxjb2RlPm1tdmNsZTwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1tdm1lLTIwMjQiPjxjb2RlPm1tdm1lPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1tbi0xNDA1Ij48Y29kZT5tbjwvY29kZT48L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNIOF8wMDJmMzAwLU9wdGlvbnMiPkg4LzMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tbmVvbl8wMDJkZm9yXzAwMmQ2NGJpdHMtMTE0OSI+PGNvZGU+bW5lb24tZm9yLTY0Yml0czwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW5lc3RlZF8wMDJkY29uZF8wMDJkZXhlYy0xMzkwIj48Y29kZT5tbmVzdGVkLWNvbmQtZXhlYzwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tbmh3bG9vcC0yMTExIj48Y29kZT5tbmh3bG9vcDwvY29kZT48L2E+OiA8YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjU2NvcmUtT3B0aW9ucyI+U2NvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkM2Rub3ctMTQ3MyI+PGNvZGU+bW5vLTNkbm93PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmQ0Ynl0ZV8wMDJkZnVuY3Rpb25zLTE2NjUiPjxjb2RlPm1uby00Ynl0ZS1mdW5jdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZDhieXRlXzAwMmRhbGlnbi0yMjg2Ij48Y29kZT5tbm8tOGJ5dGUtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGFiaWNhbGxzLTE3NTEiPjxjb2RlPm1uby1hYmljYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYWJzaGktMTg5NyI+PGNvZGU+bW5vLWFic2hpPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGFjMC0xODgyIj48Y29kZT5tbm8tYWMwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYWRkcmVzc18wMDJkc3BhY2VfMDAyZGNvbnZlcnNpb24tMjIzMiI+PGNvZGU+bW5vLWFkZHJlc3Mtc3BhY2UtY29udmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI1NQVS1PcHRpb25zIj5TUFUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYWxpZ25fMDAyZGRvdWJsZS0xNDUyIj48Y29kZT5tbm8tYWxpZ24tZG91YmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYWxpZ25fMDAyZGludC0xNjQ4Ij48Y29kZT5tbm8tYWxpZ24taW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRhbGlnbl8wMDJkbG9vcHMtMTYwNyI+PGNvZGU+bW5vLWFsaWduLWxvb3BzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI00zMlJfMDAyZkQtT3B0aW9ucyI+TTMyUi9EIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGFsaWduXzAwMmRzdHJpbmdvcHMtMTQ5MCI+PGNvZGU+bW5vLWFsaWduLXN0cmluZ29wczwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYWx0aXZlYy0xOTM2Ij48Y29kZT5tbm8tYWx0aXZlYzwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRhbTMzLTE4NjMiPjxjb2RlPm1uby1hbTMzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRhcHBfMDAyZHJlZ3MtMjI4OSI+PGNvZGU+bW5vLWFwcC1yZWdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYXBwXzAwMmRyZWdzLTIxODIiPjxjb2RlPm1uby1hcHAtcmVnczwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGFzMTAwXzAwMmRzeW50YXgtMjA2OCI+PGNvZGU+bW5vLWFzMTAwLXN5bnRheDwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRhdG9taWNfMDAyZHVwZGF0ZXMtMjIzNSI+PGNvZGU+bW5vLWF0b21pYy11cGRhdGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYXZvaWRfMDAyZGluZGV4ZWRfMDAyZGFkZHJlc3Nlcy0xOTc5Ij48Y29kZT5tbm8tYXZvaWQtaW5kZXhlZC1hZGRyZXNzZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRiYWNrY2hhaW4tMjA4NSI+PGNvZGU+bW5vLWJhY2tjaGFpbjwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRiYXNlXzAwMmRhZGRyZXNzZXMtMTg1NiI+PGNvZGU+bW5vLWJhc2UtYWRkcmVzc2VzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYml0XzAwMmRhbGlnbi0xOTg2Ij48Y29kZT5tbm8tYml0LWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYml0ZmllbGQtMTY0MyI+PGNvZGU+bW5vLWJpdGZpZWxkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRicmFuY2hfMDAyZGxpa2VseS0xODMyIj48Y29kZT5tbm8tYnJhbmNoLWxpa2VseTwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkYnJhbmNoXzAwMmRwcmVkaWN0LTE4NTQiPjxjb2RlPm1uby1icmFuY2gtcHJlZGljdDwvY29kZT48L2E+OiA8YSBocmVmPSJNTUlYLU9wdGlvbnMuaHRtbCNNTUlYLU9wdGlvbnMiPk1NSVggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRid3gtMTMyNyI+PGNvZGU+bW5vLWJ3eDwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGNhbGxncmFwaF8wMDJkZGF0YS0xNjY3Ij48Y29kZT5tbm8tY2FsbGdyYXBoLWRhdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRjYmNvbmQtMjIwNyI+PGNvZGU+bW5vLWNiY29uZDwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkY2hlY2tfMDAyZHplcm9fMDAyZGRpdmlzaW9uLTE4MDUiPjxjb2RlPm1uby1jaGVjay16ZXJvLWRpdmlzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGNpeC0xMzI5Ij48Y29kZT5tbm8tY2l4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRjbGVhcmJzcy0xNzEyIj48Y29kZT5tbm8tY2xlYXJic3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjTWljcm9CbGF6ZS1PcHRpb25zIj5NaWNyb0JsYXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRjbXBiLTE5MjUiPjxjb2RlPm1uby1jbXBiPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkY29uZF8wMDJkZXhlYy0xMzg1Ij48Y29kZT5tbm8tY29uZC1leGVjPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGNvbmRfMDAyZG1vdmUtMTM4MSI+PGNvZGU+bW5vLWNvbmQtbW92ZTwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkY29uc3RfMDAyZGFsaWduLTEyMjAiPjxjb2RlPm1uby1jb25zdC1hbGlnbjwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRjb25zdDE2LTIzMTAiPjxjb2RlPm1uby1jb25zdDE2PC9jb2RlPjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPlh0ZW5zYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTW94aWUtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkY3J0MC0xODc3Ij48Y29kZT5tbm8tY3J0MDwvY29kZT48L2E+OiA8YSBocmVmPSJNb3hpZS1PcHRpb25zLmh0bWwjTW94aWUtT3B0aW9ucyI+TW94aWUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkY3J0MC0xODY4Ij48Y29kZT5tbm8tY3J0MDwvY29kZT48L2E+OiA8YSBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNNTjEwMzAwLU9wdGlvbnMiPk1OMTAzMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGNzeW5jXzAwMmRhbm9tYWx5LTExNzUiPjxjb2RlPm1uby1jc3luYy1hbm9tYWx5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRkYXRhXzAwMmRhbGlnbi0xMjE4Ij48Y29kZT5tbm8tZGF0YS1hbGlnbjwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRkZWJ1Zy0yMDk3Ij48Y29kZT5tbm8tZGVidWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZGlzYWJsZV8wMDJkY2FsbHQtMjI3NCI+PGNvZGU+bW5vLWRpc2FibGUtY2FsbHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRkaXYtMTY1OSI+PGNvZGU+bW5vLWRpdjwvY29kZT48L2E+OiA8YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjTUNvcmUtT3B0aW9ucyI+TUNvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRkaXYtMTYzOSI+PGNvZGU+bW5vLWRpdjwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGRsbXpiLTE5ODUiPjxjb2RlPm1uby1kbG16YjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGRvdWJsZS0xMzYwIj48Y29kZT5tbm8tZG91YmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRkc3AtMTc2OSI+PGNvZGU+bW5vLWRzcDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZHNwcjItMTc3MSI+PGNvZGU+bW5vLWRzcHIyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGR3YXJmMl8wMDJkYXNtLTE1NDkiPjxjb2RlPm1uby1kd2FyZjItYXNtPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZHdvcmQtMTM1OCI+PGNvZGU+bW5vLWR3b3JkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZWFiaS0yMDMwIj48Y29kZT5tbm8tZWFiaTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGVhcmx5XzAwMmRzdG9wXzAwMmRiaXRzLTE1NTIiPjxjb2RlPm1uby1lYXJseS1zdG9wLWJpdHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRlZmxhZ3MtMTM3OSI+PGNvZGU+bW5vLWVmbGFnczwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZW1iZWRkZWRfMDAyZGRhdGEtMTc5NiI+PGNvZGU+bW5vLWVtYmVkZGVkLWRhdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGVwLTIyNTciPjxjb2RlPm1uby1lcDwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZXBzaWxvbi0xODQzIj48Y29kZT5tbm8tZXBzaWxvbjwvY29kZT48L2E+OiA8YSBocmVmPSJNTUlYLU9wdGlvbnMuaHRtbCNNTUlYLU9wdGlvbnMiPk1NSVggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZXhwbGljaXRfMDAyZHJlbG9jcy0xODAzIj48Y29kZT5tbm8tZXhwbGljaXQtcmVsb2NzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGV4cGxpY2l0XzAwMmRyZWxvY3MtMTMzNyI+PGNvZGU+bW5vLWV4cGxpY2l0LXJlbG9jczwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZXhyLTE0MDgiPjxjb2RlPm1uby1leHI8L2NvZGU+PC9hPjogPGEgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIj5IOC8zMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZXh0ZXJuXzAwMmRzZGF0YS0xNzkyIj48Y29kZT5tbm8tZXh0ZXJuLXNkYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmYW5jeV8wMDJkbWF0aF8wMDJkMzg3LTE0NTAiPjxjb2RlPm1uby1mYW5jeS1tYXRoLTM4NzwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZmFzdGVyXzAwMmRzdHJ1Y3RzLTIxOTQiPjxjb2RlPm1uby1mYXN0ZXItc3RydWN0czwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmaXgtMTMzMSI+PGNvZGU+bW5vLWZpeDwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZml4XzAwMmQyNGstMTgxOCI+PGNvZGU+bW5vLWZpeC0yNGs8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZpeF8wMDJkcjEwMDAwLTE4MjQiPjxjb2RlPm1uby1maXgtcjEwMDAwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmaXhfMDAyZHI0MDAwLTE4MjAiPjxjb2RlPm1uby1maXgtcjQwMDA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZpeF8wMDJkcjQ0MDAtMTgyMiI+PGNvZGU+bW5vLWZpeC1yNDQwMDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZsYXQtMjE4NSI+PGNvZGU+bW5vLWZsYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZsb2F0LTE3NjMiPjxjb2RlPm1uby1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZmxvYXQzMi0xODkzIj48Y29kZT5tbm8tZmxvYXQzMjwvY29kZT48L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNQRFBfMDAyZDExLU9wdGlvbnMiPlBEUC0xMSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmbG9hdDY0LTE4OTUiPjxjb2RlPm1uby1mbG9hdDY0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZsdXNoXzAwMmRmdW5jLTE2MTMiPjxjb2RlPm1uby1mbHVzaC1mdW5jPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI00zMlJfMDAyZkQtT3B0aW9ucyI+TTMyUi9EIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZsdXNoXzAwMmR0cmFwLTE2MTEiPjxjb2RlPm1uby1mbHVzaC10cmFwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI00zMlJfMDAyZkQtT3B0aW9ucyI+TTMyUi9EIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmbWFmLTIyMTEiPjxjb2RlPm1uby1mbWFmPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZnBfMDAyZGluXzAwMmR0b2MtMTk1NSI+PGNvZGU+bW5vLWZwLWluLXRvYzwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZwXzAwMmRyZWdzLTEzMTgiPjxjb2RlPm1uby1mcC1yZWdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmcF8wMDJkcmV0XzAwMmRpbl8wMDJkMzg3LTE0NDkiPjxjb2RlPm1uby1mcC1yZXQtaW4tMzg3PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmcHJuZC0xOTIzIj48Y29kZT5tbm8tZnBybmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZwdS0yMTg4Ij48Y29kZT5tbm8tZnB1PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZnNjYS0yMTczIj48Y29kZT5tbm8tZnNjYTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZzcnJhLTIxNzUiPjxjb2RlPm1uby1mc3JyYTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmdXNlZF8wMDJkbWFkZC0yMzEyIj48Y29kZT5tbm8tZnVzZWQtbWFkZDwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZ1c2VkXzAwMmRtYWRkLTIxNzEiPjxjb2RlPm1uby1mdXNlZC1tYWRkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGZ1c2VkXzAwMmRtYWRkLTIxMDMiPjxjb2RlPm1uby1mdXNlZC1tYWRkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmdXNlZF8wMDJkbWFkZC0xOTgxIj48Y29kZT5tbm8tZnVzZWQtbWFkZDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmdXNlZF8wMDJkbWFkZC0xODE1Ij48Y29kZT5tbm8tZnVzZWQtbWFkZDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRmdXNlZF8wMDJkbWFkZC0xNTQ4Ij48Y29kZT5tbm8tZnVzZWQtbWFkZDwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGdudV8wMDJkYXMtMTUyNiI+PGNvZGU+bW5vLWdudS1hczwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGdudV8wMDJkbGQtMTUyOCI+PGNvZGU+bW5vLWdudS1sZDwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRnb3RwbHQtMTIyNiI+PGNvZGU+bW5vLWdvdHBsdDwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkZ3BvcHQtMTc5NCI+PGNvZGU+bW5vLWdwb3B0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGhhcmRfMDAyZGRmcC0yMDgxIj48Y29kZT5tbm8taGFyZC1kZnA8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGhhcmRfMDAyZGRmcC0xOTI5Ij48Y29kZT5tbm8taGFyZC1kZnA8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGhhcmRsaXQtMTY1NyI+PGNvZGU+bW5vLWhhcmRsaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRpZF8wMDJkc2hhcmVkXzAwMmRsaWJyYXJ5LTExODAiPjxjb2RlPm1uby1pZC1zaGFyZWQtbGlicmFyeTwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkaWVlZV8wMDJkZnAtMTQ0NyI+PGNvZGU+bW5vLWllZWUtZnA8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRpbmxpbmVfMDAyZGZsb2F0XzAwMmRkaXZpZGUtMTU0MCI+PGNvZGU+bW5vLWlubGluZS1mbG9hdC1kaXZpZGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRpbmxpbmVfMDAyZGludF8wMDJkZGl2aWRlLTE1NDMiPjxjb2RlPm1uby1pbmxpbmUtaW50LWRpdmlkZTwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGlubGluZV8wMDJkc3FydC0xNTQ2Ij48Y29kZT5tbm8taW5saW5lLXNxcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkaW50MTYtMTg5MSI+PGNvZGU+bW5vLWludDE2PC9jb2RlPjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGludDMyLTE4ODkiPjxjb2RlPm1uby1pbnQzMjwvY29kZT48L2E+OiA8YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNQRFBfMDAyZDExLU9wdGlvbnMiPlBEUC0xMSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRpbnRlcmxpbmtfMDAyZG1pcHMxNi0xNzQ0Ij48Y29kZT5tbm8taW50ZXJsaW5rLW1pcHMxNjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRpbnRlcnJ1cHRzLTExNTciPjxjb2RlPm1uby1pbnRlcnJ1cHRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkaXNlbC0xOTQ0Ij48Y29kZT5tbm8taXNlbDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRrbnV0aGRpdi0xODQ5Ij48Y29kZT5tbm8ta251dGhkaXY8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjTU1JWC1PcHRpb25zIj5NTUlYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRsZWFmXzAwMmRpZF8wMDJkc2hhcmVkXzAwMmRsaWJyYXJ5LTExODIiPjxjb2RlPm1uby1sZWFmLWlkLXNoYXJlZC1saWJyYXJ5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRsaWJmdW5jcy0xODQxIj48Y29kZT5tbm8tbGliZnVuY3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjTU1JWC1PcHRpb25zIj5NTUlYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGxsc2MtMTc2NyI+PGNvZGU+bW5vLWxsc2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGxvY2FsXzAwMmRzZGF0YS0xNzkwIj48Y29kZT5tbm8tbG9jYWwtc2RhdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGxvbmdfMDAyZGNhbGxzLTIyNTYiPjxjb2RlPm1uby1sb25nLWNhbGxzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRsb25nXzAwMmRjYWxscy0xODExIj48Y29kZT5tbm8tbG9uZy1jYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbG9uZ18wMDJkY2FsbHMtMTQzMiI+PGNvZGU+bW5vLWxvbmctY2FsbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRsb25nXzAwMmRjYWxscy0xMTg3Ij48Y29kZT5tbm8tbG9uZy1jYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRsb25nXzAwMmRjYWxscy0xMTMzIj48Y29kZT5tbm8tbG9uZy1jYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbG9uZ18wMDJkanVtcHMtMjI3OCI+PGNvZGU+bW5vLWxvbmctanVtcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRsb25nY2FsbC0yMDQ1Ij48Y29kZT5tbm8tbG9uZ2NhbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRsb25nY2FsbHMtMjMyMSI+PGNvZGU+bW5vLWxvbmdjYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZGxvd18wMDJkNjRrLTExNzciPjxjb2RlPm1uby1sb3ctNjRrPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbHNpbS0xNjc0Ij48Y29kZT5tbm8tbHNpbTwvY29kZT48L2E+OiA8YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjTUNvcmUtT3B0aW9ucyI+TUNvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSMzAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbHNpbS0xMzQ3Ij48Y29kZT5tbm8tbHNpbTwvY29kZT48L2E+OiA8YSBocmVmPSJGUjMwLU9wdGlvbnMuaHRtbCNGUjMwLU9wdGlvbnMiPkZSMzAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbWFkLTE4MTMiPjxjb2RlPm1uby1tYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbWF4LTEzMzMiPjxjb2RlPm1uby1tYXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZG1jb3VudF8wMDJkcmFfMDAyZGFkZHJlc3MtMTgzOCI+PGNvZGU+bW5vLW1jb3VudC1yYS1hZGRyZXNzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRtY3UtMTc4MyI+PGNvZGU+bW5vLW1jdTwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbWRteC0xNzc3Ij48Y29kZT5tbm8tbWRteDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRtZWRpYS0xMzYyIj48Y29kZT5tbm8tbWVkaWE8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZG1lbWNweS0xODA5Ij48Y29kZT5tbm8tbWVtY3B5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbWZjcmYtMTkxNyI+PGNvZGU+bW5vLW1mY3JmPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRtZnBncHItMTkyNyI+PGNvZGU+bW5vLW1mcGdwcjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRtaXBzMTYtMTc0MSI+PGNvZGU+bW5vLW1pcHMxNjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbWlwczNkLTE3NzkiPjxjb2RlPm1uby1taXBzM2Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZG1teC0xNDY5Ij48Y29kZT5tbm8tbW14PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZG10LTE3ODEiPjxjb2RlPm1uby1tdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkbXVsXzAwMmRidWdfMDAyZHdvcmthcm91bmQtMTIxMSI+PGNvZGU+bW5vLW11bC1idWctd29ya2Fyb3VuZDwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRtdWxhZGQtMTM2NCI+PGNvZGU+bW5vLW11bGFkZDwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZG11bGh3LTE5ODMiPjxjb2RlPm1uby1tdWxodzwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRtdWx0XzAwMmRidWctMTg2MSI+PGNvZGU+bW5vLW11bHQtYnVnPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZG11bHRpXzAwMmRjb25kXzAwMmRleGVjLTEzODkiPjxjb2RlPm1uby1tdWx0aS1jb25kLWV4ZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRtdWx0aXBsZS0xOTczIj48Y29kZT5tbm8tbXVsdGlwbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRtdmNsZS0yMDk1Ij48Y29kZT5tbm8tbXZjbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRuZXN0ZWRfMDAyZGNvbmRfMDAyZGV4ZWMtMTM5MSI+PGNvZGU+bW5vLW5lc3RlZC1jb25kLWV4ZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZG9taXRfMDAyZGxlYWZfMDAyZGZyYW1lXzAwMmRwb2ludGVyLTEwODgiPjxjb2RlPm1uby1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRvcHRpbWl6ZV8wMDJkbWVtYmFyLTEzOTMiPjxjb2RlPm1uby1vcHRpbWl6ZS1tZW1iYXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkb3B0cy0xNjk5Ij48Y29kZT5tbm8tb3B0czwvY29kZT48L2E+OiA8YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwYWNrLTEzNzgiPjxjb2RlPm1uby1wYWNrPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHBhY2tlZF8wMDJkc3RhY2stMjA4NyI+PGNvZGU+bW5vLXBhY2tlZC1zdGFjazwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkcGFpcmVkLTE5NDgiPjxjb2RlPm1uby1wYWlyZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkcGFpcmVkXzAwMmRzaW5nbGUtMTc3NSI+PGNvZGU+bW5vLXBhaXJlZC1zaW5nbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkcGljLTE1MjkiPjxjb2RlPm1uby1waWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHBpZC0yMDc0Ij48Y29kZT5tbm8tcGlkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIj5SWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwbHQtMTc1MyI+PGNvZGU+bW5vLXBsdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHBvcGMtMjIwOSI+PGNvZGU+bW5vLXBvcGM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwb3BjbnRiLTE5MTkiPjxjb2RlPm1uby1wb3BjbnRiPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwb3BjbnRkLTE5MjEiPjxjb2RlPm1uby1wb3BjbnRkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwb3N0aW5jLTExMDkiPjxjb2RlPm1uby1wb3N0aW5jPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIj5BZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkcG9zdG1vZGlmeS0xMTEwIj48Y29kZT5tbm8tcG9zdG1vZGlmeTwvY29kZT48L2E+OiA8YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucyI+QWRhcHRldmEgRXBpcGhhbnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHBvd2VycGNfMDAyZGdmeG9wdC0xOTEzIj48Y29kZT5tbm8tcG93ZXJwYy1nZnhvcHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHBvd2VycGNfMDAyZGdwb3B0LTE5MTEiPjxjb2RlPm1uby1wb3dlcnBjLWdwb3B0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwb3dlcnBjNjQtMTkxNSI+PGNvZGU+bW5vLXBvd2VycGM2NDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwcm9sb2dfMDAyZGZ1bmN0aW9uLTIyNTkiPjxjb2RlPm1uby1wcm9sb2ctZnVuY3Rpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHByb2xvZ3VlXzAwMmRlcGlsb2d1ZS0xMjI0Ij48Y29kZT5tbm8tcHJvbG9ndWUtZXBpbG9ndWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwcm90b3R5cGUtMjAyMiI+PGNvZGU+bW5vLXByb3RvdHlwZTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRwdXNoXzAwMmRhcmdzLTE0ODciPjxjb2RlPm1uby1wdXNoLWFyZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkcmVkXzAwMmR6b25lLTE1MDQiPjxjb2RlPm1uby1yZWQtem9uZTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHJlZ2lzdGVyXzAwMmRuYW1lcy0xNTMzIj48Y29kZT5tbm8tcmVnaXN0ZXItbmFtZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHJlZ25hbWVzLTIwNDMiPjxjb2RlPm1uby1yZWduYW1lczwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRyZWxheC0yMjc2Ij48Y29kZT5tbm8tcmVsYXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRyZWxheF8wMDJkaW1tZWRpYXRlLTE2NjEiPjxjb2RlPm1uby1yZWxheC1pbW1lZGlhdGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRyZWxvY2F0YWJsZS0xOTkxIj48Y29kZT5tbm8tcmVsb2NhdGFibGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHJlbG9jYXRhYmxlXzAwMmRsaWItMTk5MyI+PGNvZGU+bW5vLXJlbG9jYXRhYmxlLWxpYjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkcm91bmRfMDAyZG5lYXJlc3QtMTEwMyI+PGNvZGU+bW5vLXJvdW5kLW5lYXJlc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkcnRkLTE2NDYiPjxjb2RlPm1uby1ydGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc2NjLTEzODMiPjxjb2RlPm1uby1zY2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc2NoZWRfMDAyZGFyXzAwMmRkYXRhXzAwMmRzcGVjLTE1NjEiPjxjb2RlPm1uby1zY2hlZC1hci1kYXRhLXNwZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzY2hlZF8wMDJkYXJfMDAyZGluXzAwMmRkYXRhXzAwMmRzcGVjLTE1NjciPjxjb2RlPm1uby1zY2hlZC1hci1pbi1kYXRhLXNwZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzY2hlZF8wMDJkYnJfMDAyZGRhdGFfMDAyZHNwZWMtMTU1OCI+PGNvZGU+bW5vLXNjaGVkLWJyLWRhdGEtc3BlYzwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHNjaGVkXzAwMmRicl8wMDJkaW5fMDAyZGRhdGFfMDAyZHNwZWMtMTU2NSI+PGNvZGU+bW5vLXNjaGVkLWJyLWluLWRhdGEtc3BlYzwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHNjaGVkXzAwMmRjb250cm9sXzAwMmRzcGVjLTE1NjIiPjxjb2RlPm1uby1zY2hlZC1jb250cm9sLXNwZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzY2hlZF8wMDJkY291bnRfMDAyZHNwZWNfMDAyZGluXzAwMmRjcml0aWNhbF8wMDJkcGF0aC0xNTc0Ij48Y29kZT5tbm8tc2NoZWQtY291bnQtc3BlYy1pbi1jcml0aWNhbC1wYXRoPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc2NoZWRfMDAyZGluXzAwMmRjb250cm9sXzAwMmRzcGVjLTE1NjkiPjxjb2RlPm1uby1zY2hlZC1pbi1jb250cm9sLXNwZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzY2hlZF8wMDJkcHJlZmVyXzAwMmRub25fMDAyZGNvbnRyb2xfMDAyZHNwZWNfMDAyZGluc25zLTE1NzIiPjxjb2RlPm1uby1zY2hlZC1wcmVmZXItbm9uLWNvbnRyb2wtc3BlYy1pbnNuczwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHNjaGVkXzAwMmRwcmVmZXJfMDAyZG5vbl8wMDJkZGF0YV8wMDJkc3BlY18wMDJkaW5zbnMtMTU3MCI+PGNvZGU+bW5vLXNjaGVkLXByZWZlci1ub24tZGF0YS1zcGVjLWluc25zPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc2NoZWRfMDAyZHByb2xvZy0xMTIwIj48Y29kZT5tbm8tc2NoZWQtcHJvbG9nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc2RhdGEtMjAzNyI+PGNvZGU+bW5vLXNkYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc2RhdGEtMTUzNCI+PGNvZGU+bW5vLXNkYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzZXBfMDAyZGRhdGEtMTE4NSI+PGNvZGU+bW5vLXNlcC1kYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHNlcmlhbGl6ZV8wMDJkdm9sYXRpbGUtMjMxNCI+PGNvZGU+bW5vLXNlcmlhbGl6ZS12b2xhdGlsZTwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzaG9ydC0xNjQxIj48Y29kZT5tbm8tc2hvcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHNpZGVfMDAyZGVmZmVjdHMtMTIxNCI+PGNvZGU+bW5vLXNpZGUtZWZmZWN0czwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHNpbS0yMDY2Ij48Y29kZT5tbm8tc2ltPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIj5SWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzaW5nbGVfMDAyZGV4aXQtMTg1OCI+PGNvZGU+bW5vLXNpbmdsZS1leGl0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc2xvd18wMDJkYnl0ZXMtMTY2OSI+PGNvZGU+bW5vLXNsb3ctYnl0ZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc21hbGxfMDAyZGV4ZWMtMjA4OSI+PGNvZGU+bW5vLXNtYWxsLWV4ZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc21hcnRtaXBzLTE3NzMiPjxjb2RlPm1uby1zbWFydG1pcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzb2Z0XzAwMmRjbXBzZi0xMTAxIj48Y29kZT5tbm8tc29mdC1jbXBzZjwvY29kZT48L2E+OiA8YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucyI+QWRhcHRldmEgRXBpcGhhbnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzb2Z0XzAwMmRmbG9hdC0xMzE1Ij48Y29kZT5tbm8tc29mdC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJERUMtQWxwaGEtT3B0aW9ucy5odG1sI0RFQy1BbHBoYS1PcHRpb25zIj5ERUMgQWxwaGEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc3BhY2VfMDAyZHJlZ3MtMTQyMCI+PGNvZGU+bW5vLXNwYWNlLXJlZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzcGUtMTk0NiI+PGNvZGU+bW5vLXNwZTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc3BlY2xkXzAwMmRhbm9tYWx5LTExNzMiPjxjb2RlPm1uby1zcGVjbGQtYW5vbWFseTwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc3BsaXRfMDAyZGFkZHJlc3Nlcy0xODAxIj48Y29kZT5tbm8tc3BsaXQtYWRkcmVzc2VzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzc2UtMTQ3MSI+PGNvZGU+bW5vLXNzZTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzdGFja18wMDJkYWxpZ24tMTIxNiI+PGNvZGU+bW5vLXN0YWNrLWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc3RhY2tfMDAyZGJpYXMtMjIxOCI+PGNvZGU+bW5vLXN0YWNrLWJpYXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzdHJpY3RfMDAyZGFsaWduLTE5ODgiPjxjb2RlPm1uby1zdHJpY3QtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzdHJpY3RfMDAyZGFsaWduLTE2NTAiPjxjb2RlPm1uby1zdHJpY3QtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmRzdHJpbmctMTk3NSI+PGNvZGU+bW5vLXN0cmluZzwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkc3VtXzAwMmRpbl8wMDJkdG9jLTE5NTYiPjxjb2RlPm1uby1zdW0taW4tdG9jPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHN5bTMyLTE3ODciPjxjb2RlPm1uby1zeW0zMjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmR0YXJnZXRfMDAyZGFsaWduLTIzMTkiPjxjb2RlPm1uby10YXJnZXQtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkdGV4dF8wMDJkc2VjdGlvbl8wMDJkbGl0ZXJhbHMtMjMxNyI+PGNvZGU+bW5vLXRleHQtc2VjdGlvbi1saXRlcmFsczwvY29kZT48L2E+OiA8YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHRsc18wMDJkbWFya2Vycy0yMDQ3Ij48Y29kZT5tbm8tdGxzLW1hcmtlcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHRvYy0xOTk0Ij48Y29kZT5tbm8tdG9jPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHRvcGxldmVsXzAwMmRzeW1ib2xzLTE4NTEiPjxjb2RlPm1uby10b3BsZXZlbC1zeW1ib2xzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHRwZl8wMDJkdHJhY2UtMjEwMSI+PGNvZGU+bW5vLXRwZi10cmFjZTwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHVuYWxpZ25lZF8wMDJkYWNjZXNzLTExNDgiPjxjb2RlPm1uby11bmFsaWduZWQtYWNjZXNzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkdW5hbGlnbmVkXzAwMmRkb3VibGVzLTIxOTIiPjxjb2RlPm1uby11bmFsaWduZWQtZG91YmxlczwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkdW5pbml0XzAwMmRjb25zdF8wMDJkaW5fMDAyZHJvZGF0YS0xNzk4Ij48Y29kZT5tbm8tdW5pbml0LWNvbnN0LWluLXJvZGF0YTwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHVwZGF0ZS0xOTc3Ij48Y29kZT5tbm8tdXBkYXRlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmR2OHBsdXMtMjE5OSI+PGNvZGU+bW5vLXY4cGx1czwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHZlY3RfMDAyZGRvdWJsZS0xMTExIj48Y29kZT5tbm8tdmVjdC1kb3VibGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmR2aXMtMjIwMSI+PGNvZGU+bW5vLXZpczwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHZpczItMjIwMyI+PGNvZGU+bW5vLXZpczI8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmR2aXMzLTIyMDUiPjxjb2RlPm1uby12aXMzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHZsaXdfMDAyZGJyYW5jaC0xMzg3Ij48Y29kZT5tbm8tdmxpdy1icmFuY2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkdm9sYXRpbGVfMDAyZGFzbV8wMDJkc3RvcC0xNTMxIj48Y29kZT5tbm8tdm9sYXRpbGUtYXNtLXN0b3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tbm9fMDAyZHZyc2F2ZS0xOTM4Ij48Y29kZT5tbm8tdnJzYXZlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmR2c3gtMTk1MCI+PGNvZGU+bW5vLXZzeDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkd2Fybl8wMDJkbXVsdGlwbGVfMDAyZGZhc3RfMDAyZGludGVycnVwdHMtMjA3NSI+PGNvZGU+bW5vLXdhcm4tbXVsdGlwbGUtZmFzdC1pbnRlcnJ1cHRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIj5SWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkd2lkZV8wMDJkYml0ZmllbGRzLTE2NjMiPjxjb2RlPm1uby13aWRlLWJpdGZpZWxkczwvY29kZT48L2E+OiA8YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjTUNvcmUtT3B0aW9ucyI+TUNvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkeGdvdC0xNzU1Ij48Y29kZT5tbm8teGdvdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmR4Z290LTE2NTMiPjxjb2RlPm1uby14Z290PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkeGxfMDAyZGNvbXBhdC0xOTYxIj48Y29kZT5tbm8teGwtY29tcGF0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vXzAwMmR6ZGNicmFuY2gtMjE2NyI+PGNvZGU+bW5vLXpkY2JyYW5jaDwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI2luZGV4LW1ub18wMDJkemVyb18wMDJkZXh0ZW5kLTE4NDciPjxjb2RlPm1uby16ZXJvLWV4dGVuZDwvY29kZT48L2E+OiA8YSBocmVmPSJNTUlYLU9wdGlvbnMuaHRtbCNNTUlYLU9wdGlvbnMiPk1NSVggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vYml0ZmllbGQtMTY0MiI+PGNvZGU+bW5vYml0ZmllbGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vaWVlZS0yMTQ3Ij48Y29kZT5tbm9pZWVlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vbGl3LTE4NzEiPjxjb2RlPm1ub2xpdzwvY29kZT48L2E+OiA8YSBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNNTjEwMzAwLU9wdGlvbnMiPk1OMTAzMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tbm9tYWNzYXZlLTIxNDUiPjxjb2RlPm1ub21hY3NhdmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2luZGV4LW1ub3BfMDAyZGZ1bl8wMDJkZGxsaW1wb3J0LTE1MTQiPjxjb2RlPm1ub3AtZnVuLWRsbGltcG9ydDwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgV2luZG93cyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1ub3BzLTExMDAiPjxjb2RlPm1ub3BzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIj5BZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbW5vc2V0bGItMTg3MyI+PGNvZGU+bW5vc2V0bGI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjTU4xMDMwMC1PcHRpb25zIj5NTjEwMzAwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjaW5kZXgtbW5vc3BsaXRfMDAyZGxvaGktMTEwOCI+PGNvZGU+bW5vc3BsaXQtbG9oaTwvY29kZT48L2E+OiA8YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucyI+QWRhcHRldmEgRXBpcGhhbnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1vbWl0XzAwMmRsZWFmXzAwMmRmcmFtZV8wMDJkcG9pbnRlci0xNDk0Ij48Y29kZT5tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNpbmRleC1tb21pdF8wMDJkbGVhZl8wMDJkZnJhbWVfMDAyZHBvaW50ZXItMTE3MSI+PGNvZGU+bW9taXQtbGVhZi1mcmFtZS1wb2ludGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj5CbGFja2ZpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjaW5kZXgtbW9taXRfMDAyZGxlYWZfMDAyZGZyYW1lXzAwMmRwb2ludGVyLTEwODciPjxjb2RlPm1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtbW9uZV8wMDJkYnl0ZV8wMDJkYm9vbC0xMjQ2Ij48Y29kZT5tb25lLWJ5dGUtYm9vbDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbW9wdGltaXplXzAwMmRtZW1iYXItMTM5MiI+PGNvZGU+bW9wdGltaXplLW1lbWJhcjwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtTVAtOTY1Ij48Y29kZT5NUDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI2luZGV4LW1wYV8wMDJkcmlzY18wMDJkMV8wMDJkMC0xNDEzIj48Y29kZT5tcGEtcmlzYy0xLTA8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tcGFfMDAyZHJpc2NfMDAyZDFfMDAyZDEtMTQxNCI+PGNvZGU+bXBhLXJpc2MtMS0xPC9jb2RlPjwvYT46IDxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyI+SFBQQSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjaW5kZXgtbXBhXzAwMmRyaXNjXzAwMmQyXzAwMmQwLTE0MTUiPjxjb2RlPm1wYS1yaXNjLTItMDwvY29kZT48L2E+OiA8YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiPkhQUEEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbXBhY2stMTM3NyI+PGNvZGU+bXBhY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW1wYWNrZWRfMDAyZHN0YWNrLTIwODYiPjxjb2RlPm1wYWNrZWQtc3RhY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tcGFkc3RydWN0LTIxNTAiPjxjb2RlPm1wYWRzdHJ1Y3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXBhaXJlZC0xOTQ3Ij48Y29kZT5tcGFpcmVkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tcGFpcmVkXzAwMmRzaW5nbGUtMTc3NCI+PGNvZGU+bXBhaXJlZC1zaW5nbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tcGMzMi0xNDYyIj48Y29kZT5tcGMzMjwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXBjNjQtMTQ2MyI+PGNvZGU+bXBjNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1wYzgwLTE0NjQiPjxjb2RlPm1wYzgwPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW1wY3JlbC0xNjQ5Ij48Y29kZT5tcGNyZWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tcGRlYnVnLTEyMTIiPjxjb2RlPm1wZGVidWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXBlLTE5NjIiPjxjb2RlPm1wZTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMuaHRtbCNpbmRleC1tcGVfMDAyZGFsaWduZWRfMDAyZGNvbW1vbnMtMTUyMSI+PGNvZGU+bXBlLWFsaWduZWQtY29tbW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgV2luZG93cyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tcGljXzAwMmRyZWdpc3Rlci0xMTM1Ij48Y29kZT5tcGljLXJlZ2lzdGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI2luZGV4LW1waWQtMjA3MyI+PGNvZGU+bXBpZDwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1wbHQtMTc1MiI+PGNvZGU+bXBsdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tcG9pbnRlcnNfMDAyZHRvXzAwMmRuZXN0ZWRfMDAyZGZ1bmN0aW9ucy0yMDU0Ij48Y29kZT5tcG9pbnRlcnMtdG8tbmVzdGVkLWZ1bmN0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tcG9rZV8wMDJkZnVuY3Rpb25fMDAyZG5hbWUtMTEzNiI+PGNvZGU+bXBva2UtZnVuY3Rpb24tbmFtZTwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tcG9wYy0yMjA4Ij48Y29kZT5tcG9wYzwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tcG9wY250Yi0xOTE4Ij48Y29kZT5tcG9wY250YjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1wb3BjbnRkLTE5MjAiPjxjb2RlPm1wb3BjbnRkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tcG9ydGFibGVfMDAyZHJ1bnRpbWUtMTQyNCI+PGNvZGU+bXBvcnRhYmxlLXJ1bnRpbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXBvd2VycGNfMDAyZGdmeG9wdC0xOTEyIj48Y29kZT5tcG93ZXJwYy1nZnhvcHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tcG93ZXJwY18wMDJkZ3BvcHQtMTkxMCI+PGNvZGU+bXBvd2VycGMtZ3BvcHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tcG93ZXJwYzY0LTE5MTQiPjxjb2RlPm1wb3dlcnBjNjQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1wcmVmZXJfMDAyZGF2eDEyOC0xNDc2Ij48Y29kZT5tcHJlZmVyLWF2eDEyODwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1wcmVmZXJfMDAyZHNob3J0XzAwMmRpbnNuXzAwMmRyZWdzLTEwOTciPjxjb2RlPm1wcmVmZXItc2hvcnQtaW5zbi1yZWdzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIj5BZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1wcmVmZXJnb3QtMjE1NCI+PGNvZGU+bXByZWZlcmdvdDwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1wcmVmZXJyZWRfMDAyZHN0YWNrXzAwMmRib3VuZGFyeS0xNDY2Ij48Y29kZT5tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbXByZXRlbmRfMDAyZGNtb3ZlLTIxNzYiPjxjb2RlPm1wcmV0ZW5kLWNtb3ZlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1wcmlvcml0aXplXzAwMmRyZXN0cmljdGVkXzAwMmRpbnNucy0yMDAyIj48Y29kZT5tcHJpb3JpdGl6ZS1yZXN0cmljdGVkLWluc25zPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tcHJvbG9nXzAwMmRmdW5jdGlvbi0yMjYwIj48Y29kZT5tcHJvbG9nLWZ1bmN0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtbXByb2xvZ3VlXzAwMmRlcGlsb2d1ZS0xMjI1Ij48Y29kZT5tcHJvbG9ndWUtZXBpbG9ndWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXByb3RvdHlwZS0yMDIxIj48Y29kZT5tcHJvdG90eXBlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbXB0XzAwMmRmaXhlZC0yMTYzIj48Y29kZT5tcHQtZml4ZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tcHVzaF8wMDJkYXJncy0xNDg2Ij48Y29kZT5tcHVzaC1hcmdzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LU1RLTk2NyI+PGNvZGU+TVE8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tcjEwa18wMDJkY2FjaGVfMDAyZGJhcnJpZXItMTgyOCI+PGNvZGU+bXIxMGstY2FjaGUtYmFycmllcjwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tcmVjaXAtMjA0OSI+PGNvZGU+bXJlY2lwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tcmVjaXAtMTQ4MSI+PGNvZGU+bXJlY2lwPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXJlY2lwXzAwMmRwcmVjaXNpb24tMjA1MSI+PGNvZGU+bXJlY2lwLXByZWNpc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1yZWNpcF8wMDNkb3B0LTIwNTAiPjxjb2RlPm1yZWNpcD1vcHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1yZWNpcF8wMDNkb3B0LTE0ODIiPjxjb2RlPm1yZWNpcD1vcHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXJlZ2lzdGVyXzAwMmRuYW1lcy0xNTMyIj48Y29kZT5tcmVnaXN0ZXItbmFtZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tcmVnbmFtZXMtMjA0MiI+PGNvZGU+bXJlZ25hbWVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tcmVncGFybS0xNDU5Ij48Y29kZT5tcmVncGFybTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbXJlbGF4LTIyNzUiPjxjb2RlPm1yZWxheDwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tcmVsYXgtMjEzOCI+PGNvZGU+bXJlbGF4PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI2luZGV4LW1yZWxheC0yMDcwIj48Y29kZT5tcmVsYXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI1JYLU9wdGlvbnMiPlJYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1tcmVsYXgtMTg2OSI+PGNvZGU+bXJlbGF4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbXJlbGF4LTE0MDIiPjxjb2RlPm1yZWxheDwvY29kZT48L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNIOF8wMDJmMzAwLU9wdGlvbnMiPkg4LzMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1tcmVsYXgtMTE1OCI+PGNvZGU+bXJlbGF4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI2luZGV4LW1yZWxheF8wMDJkaW1tZWRpYXRlLTE2NjAiPjxjb2RlPm1yZWxheC1pbW1lZGlhdGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tcmVsYXhfMDAyZHBpY18wMDJkY2FsbHMtMTgzNiI+PGNvZGU+bXJlbGF4LXBpYy1jYWxsczwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tcmVsb2NhdGFibGUtMTk5MCI+PGNvZGU+bXJlbG9jYXRhYmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXJlbG9jYXRhYmxlXzAwMmRsaWItMTk5MiI+PGNvZGU+bXJlbG9jYXRhYmxlLWxpYjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tcmVwZWF0LTE3MDAiPjxjb2RlPm1yZXBlYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LW1yZXN0cmljdF8wMDJkaXQtMTE1MCI+PGNvZGU+bXJlc3RyaWN0LWl0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbXJldHVybl8wMDJkcG9pbnRlcl8wMDJkb25fMDAyZGQwLTE4NjciPjxjb2RlPm1yZXR1cm4tcG9pbnRlci1vbi1kMDwvY29kZT48L2E+OiA8YSBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNNTjEwMzAwLU9wdGlvbnMiPk1OMTAzMDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW1yaDg1MF8wMDJkYWJpLTIyODIiPjxjb2RlPm1yaDg1MC1hYmk8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtbXJ0ZC0yNTkyIj48Y29kZT5tcnRkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNpbmRleC1tcnRkLTE2NDUiPjxjb2RlPm1ydGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tcnRkLTE0NTgiPjxjb2RlPm1ydGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZ4V29ya3MtT3B0aW9ucy5odG1sI2luZGV4LW1ydHAtMjI5OSI+PGNvZGU+bXJ0cDwvY29kZT48L2E+OiA8YSBocmVmPSJWeFdvcmtzLU9wdGlvbnMuaHRtbCNWeFdvcmtzLU9wdGlvbnMiPlZ4V29ya3MgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjaW5kZXgtbXMtMTcwMSI+PGNvZGU+bXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1tcy0xNDA0Ij48Y29kZT5tczwvY29kZT48L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNIOF8wMDJmMzAwLU9wdGlvbnMiPkg4LzMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjaW5kZXgtbXMyNjAwLTE0MDYiPjxjb2RlPm1zMjYwMDwvY29kZT48L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLU9wdGlvbnMuaHRtbCNIOF8wMDJmMzAwLU9wdGlvbnMiPkg4LzMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNpbmRleC1tc2FmZV8wMDJkZG1hLTIyMjIiPjxjb2RlPm1zYWZlLWRtYTwvY29kZT48L2E+OiA8YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI1NQVS1PcHRpb25zIj5TUFUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjaW5kZXgtbXNhZmVfMDAyZGhpbnRzLTIyMzkiPjxjb2RlPm1zYWZlLWhpbnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXNhaGYtMTQ3OCI+PGNvZGU+bXNhaGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjaW5kZXgtbXNhdHVyLTE3MDIiPjxjb2RlPm1zYXR1cjwvY29kZT48L2E+OiA8YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNpbmRleC1tc2F2ZV8wMDJkYWNjXzAwMmRpbl8wMDJkaW50ZXJydXB0cy0yMDcyIj48Y29kZT5tc2F2ZS1hY2MtaW4taW50ZXJydXB0czwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tc2F2ZV8wMDJkdG9jXzAwMmRpbmRpcmVjdC0yMDU1Ij48Y29kZT5tc2F2ZS10b2MtaW5kaXJlY3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbXNjYy0xMzgyIj48Y29kZT5tc2NjPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tc2NoZWRfMDAyZGFyXzAwMmRkYXRhXzAwMmRzcGVjLTE1NjAiPjxjb2RlPm1zY2hlZC1hci1kYXRhLXNwZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXNjaGVkXzAwMmRhcl8wMDJkaW5fMDAyZGRhdGFfMDAyZHNwZWMtMTU2NiI+PGNvZGU+bXNjaGVkLWFyLWluLWRhdGEtc3BlYzwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tc2NoZWRfMDAyZGJyXzAwMmRkYXRhXzAwMmRzcGVjLTE1NTkiPjxjb2RlPm1zY2hlZC1ici1kYXRhLXNwZWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXNjaGVkXzAwMmRicl8wMDJkaW5fMDAyZGRhdGFfMDAyZHNwZWMtMTU2NCI+PGNvZGU+bXNjaGVkLWJyLWluLWRhdGEtc3BlYzwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tc2NoZWRfMDAyZGNvbnRyb2xfMDAyZHNwZWMtMTU2MyI+PGNvZGU+bXNjaGVkLWNvbnRyb2wtc3BlYzwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1zY2hlZF8wMDJkY29zdGx5XzAwMmRkZXAtMjAwMyI+PGNvZGU+bXNjaGVkLWNvc3RseS1kZXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXNjaGVkXzAwMmRjb3VudF8wMDJkc3BlY18wMDJkaW5fMDAyZGNyaXRpY2FsXzAwMmRwYXRoLTE1NzUiPjxjb2RlPm1zY2hlZC1jb3VudC1zcGVjLWluLWNyaXRpY2FsLXBhdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXNjaGVkXzAwMmRmcF8wMDJkbWVtXzAwMmRkZXBzXzAwMmR6ZXJvXzAwMmRjb3N0LTE1NzkiPjxjb2RlPm1zY2hlZC1mcC1tZW0tZGVwcy16ZXJvLWNvc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXNjaGVkXzAwMmRpbl8wMDJkY29udHJvbF8wMDJkc3BlYy0xNTY4Ij48Y29kZT5tc2NoZWQtaW4tY29udHJvbC1zcGVjPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1zY2hlZF8wMDJkbWF4XzAwMmRtZW1vcnlfMDAyZGluc25zLTE1ODEiPjxjb2RlPm1zY2hlZC1tYXgtbWVtb3J5LWluc25zPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1zY2hlZF8wMDJkbWF4XzAwMmRtZW1vcnlfMDAyZGluc25zXzAwMmRoYXJkXzAwMmRsaW1pdC0xNTgyIj48Y29kZT5tc2NoZWQtbWF4LW1lbW9yeS1pbnNucy1oYXJkLWxpbWl0PC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1zY2hlZF8wMDJkcHJlZmVyXzAwMmRub25fMDAyZGNvbnRyb2xfMDAyZHNwZWNfMDAyZGluc25zLTE1NzMiPjxjb2RlPm1zY2hlZC1wcmVmZXItbm9uLWNvbnRyb2wtc3BlYy1pbnNuczwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tc2NoZWRfMDAyZHByZWZlcl8wMDJkbm9uXzAwMmRkYXRhXzAwMmRzcGVjXzAwMmRpbnNucy0xNTcxIj48Y29kZT5tc2NoZWQtcHJlZmVyLW5vbi1kYXRhLXNwZWMtaW5zbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXNjaGVkXzAwMmRzcGVjXzAwMmRsZGMtMTU3NiI+PGNvZGU+bXNjaGVkLXNwZWMtbGRjPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1zY2hlZF8wMDJkc3RvcF8wMDJkYml0c18wMDJkYWZ0ZXJfMDAyZGV2ZXJ5XzAwMmRjeWNsZS0xNTc4Ij48Y29kZT5tc2NoZWQtc3RvcC1iaXRzLWFmdGVyLWV2ZXJ5LWN5Y2xlPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tc2NoZWR1bGUtMTQyNiI+PGNvZGU+bXNjaGVkdWxlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyI+SFBQQSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2NvcmUtT3B0aW9ucy5odG1sI2luZGV4LW1zY29yZTUtMjExNCI+PGNvZGU+bXNjb3JlNTwvY29kZT48L2E+OiA8YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjU2NvcmUtT3B0aW9ucyI+U2NvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tc2NvcmU1dS0yMTE1Ij48Y29kZT5tc2NvcmU1dTwvY29kZT48L2E+OiA8YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjU2NvcmUtT3B0aW9ucyI+U2NvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tc2NvcmU3LTIxMTYiPjxjb2RlPm1zY29yZTc8L2NvZGU+PC9hPjogPGEgaHJlZj0iU2NvcmUtT3B0aW9ucy5odG1sI1Njb3JlLU9wdGlvbnMiPlNjb3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbXNjb3JlN2QtMjExNyI+PGNvZGU+bXNjb3JlN2Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iU2NvcmUtT3B0aW9ucy5odG1sI1Njb3JlLU9wdGlvbnMiPlNjb3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tc2RhLTIyNjMiPjxjb2RlPm1zZGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXNkYXRhLTIwMzQiPjxjb2RlPm1zZGF0YTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tc2RhdGEtMTUzNSI+PGNvZGU+bXNkYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDNlgtT3B0aW9ucy5odG1sI2luZGV4LW1zZGF0YV8wMDNkYWxsLTEyMDEiPjxjb2RlPm1zZGF0YT1hbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iQzZYLU9wdGlvbnMuaHRtbCNDNlgtT3B0aW9ucyI+QzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXNkYXRhXzAwM2RkYXRhLTIwMzUiPjxjb2RlPm1zZGF0YT1kYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXNkYXRhXzAwM2RkZWZhdWx0LTIwMzMiPjxjb2RlPm1zZGF0YT1kZWZhdWx0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDNlgtT3B0aW9ucy5odG1sI2luZGV4LW1zZGF0YV8wMDNkZGVmYXVsdC0xMjAwIj48Y29kZT5tc2RhdGE9ZGVmYXVsdDwvY29kZT48L2E+OiA8YSBocmVmPSJDNlgtT3B0aW9ucy5odG1sI0M2WC1PcHRpb25zIj5DNlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tc2RhdGFfMDAzZGVhYmktMjAzMSI+PGNvZGU+bXNkYXRhPWVhYmk8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tc2RhdGFfMDAzZG5vbmUtMjAzNiI+PGNvZGU+bXNkYXRhPW5vbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMlJfMDAyZkQtT3B0aW9ucy5odG1sI2luZGV4LW1zZGF0YV8wMDNkbm9uZS0xNjAwIj48Y29kZT5tc2RhdGE9bm9uZTwvY29kZT48L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQzZYLU9wdGlvbnMuaHRtbCNpbmRleC1tc2RhdGFfMDAzZG5vbmUtMTIwMiI+PGNvZGU+bXNkYXRhPW5vbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQzZYLU9wdGlvbnMuaHRtbCNDNlgtT3B0aW9ucyI+QzZYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNpbmRleC1tc2RhdGFfMDAzZHNkYXRhLTE2MDEiPjxjb2RlPm1zZGF0YT1zZGF0YTwvY29kZT48L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1zZGF0YV8wMDNkc3lzdi0yMDMyIj48Y29kZT5tc2RhdGE9c3lzdjwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTMyUl8wMDJmRC1PcHRpb25zLmh0bWwjaW5kZXgtbXNkYXRhXzAwM2R1c2UtMTYwMiI+PGNvZGU+bXNkYXRhPXVzZTwvY29kZT48L2E+OiA8YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tc2RyYW0tMTcwMyI+PGNvZGU+bXNkcmFtPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1zZHJhbS0xMTkzIj48Y29kZT5tc2RyYW08L2NvZGU+PC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXNlY3VyZV8wMDJkcGx0LTE5NDEiPjxjb2RlPm1zZWN1cmUtcGx0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1zZWxfMDAyZHNjaGVkXzAwMmRkb250XzAwMmRjaGVja18wMDJkY29udHJvbF8wMDJkc3BlYy0xNTgwIj48Y29kZT5tc2VsLXNjaGVkLWRvbnQtY2hlY2stY29udHJvbC1zcGVjPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbXNlcF8wMDJkZGF0YS0xMTg0Ij48Y29kZT5tc2VwLWRhdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI2luZGV4LW1zZXJpYWxpemVfMDAyZHZvbGF0aWxlLTIzMTMiPjxjb2RlPm1zZXJpYWxpemUtdm9sYXRpbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTjEwMzAwLU9wdGlvbnMuaHRtbCNpbmRleC1tc2V0bGItMTg3MiI+PGNvZGU+bXNldGxiPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1zaGFyZWRfMDAyZGxpYnJhcnlfMDAyZGlkLTExODMiPjxjb2RlPm1zaGFyZWQtbGlicmFyeS1pZDwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbXNob3J0LTE2NDAiPjxjb2RlPm1zaG9ydDwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LW1zaWduXzAwMmRleHRlbmRfMDAyZGVuYWJsZWQtMTU4NyI+PGNvZGU+bXNpZ24tZXh0ZW5kLWVuYWJsZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYc3Rvcm15MTYtT3B0aW9ucy5odG1sI2luZGV4LW1zaW0tMjMwNyI+PGNvZGU+bXNpbTwvY29kZT48L2E+OiA8YSBocmVmPSJYc3Rvcm15MTYtT3B0aW9ucy5odG1sI1hzdG9ybXkxNi1PcHRpb25zIj5Yc3Rvcm15MTYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNpbmRleC1tc2ltLTIwNjUiPjxjb2RlPm1zaW08L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI1JYLU9wdGlvbnMiPlJYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXNpbS0yMDIzIj48Y29kZT5tc2ltPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSTDc4LU9wdGlvbnMuaHRtbCNpbmRleC1tc2ltLTE5MDYiPjxjb2RlPm1zaW08L2NvZGU+PC9hPjogPGEgaHJlZj0iUkw3OC1PcHRpb25zLmh0bWwjUkw3OC1PcHRpb25zIj5STDc4IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW1zaW0tMTcwNCI+PGNvZGU+bXNpbTwvY29kZT48L2E+OiA8YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik0zMkMtT3B0aW9ucy5odG1sI2luZGV4LW1zaW0tMTU5MSI+PGNvZGU+bXNpbTwvY29kZT48L2E+OiA8YSBocmVmPSJNMzJDLU9wdGlvbnMuaHRtbCNNMzJDLU9wdGlvbnMiPk0zMkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNSMTYtT3B0aW9ucy5odG1sI2luZGV4LW1zaW0tMTIzNiI+PGNvZGU+bXNpbTwvY29kZT48L2E+OiA8YSBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNDUjE2LU9wdGlvbnMiPkNSMTYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkM2WC1PcHRpb25zLmh0bWwjaW5kZXgtbXNpbS0xMTk5Ij48Y29kZT5tc2ltPC9jb2RlPjwvYT46IDxhIGhyZWY9IkM2WC1PcHRpb25zLmh0bWwjQzZYLU9wdGlvbnMiPkM2WCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1zaW0tMTE3MCI+PGNvZGU+bXNpbTwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjaW5kZXgtbXNpbW5vdmVjLTE3MDUiPjxjb2RlPm1zaW1ub3ZlYzwvY29kZT48L2E+OiA8YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tc2ltcGxlXzAwMmRmcHUtMTk2OSI+PGNvZGU+bXNpbXBsZS1mcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI2luZGV4LW1zaW5nbGVfMDAyZGV4aXQtMTg1NyI+PGNvZGU+bXNpbmdsZS1leGl0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1zaW5nbGVfMDAyZGZsb2F0LTE5NjciPjxjb2RlPm1zaW5nbGUtZmxvYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1zaW5nbGVfMDAyZGZsb2F0LTE3NjQiPjxjb2RlPm1zaW5nbGUtZmxvYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXNpbmdsZV8wMDJkcGljXzAwMmRiYXNlLTIwMDEiPjxjb2RlPm1zaW5nbGUtcGljLWJhc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbXNpbmdsZV8wMDJkcGljXzAwMmRiYXNlLTExMzQiPjxjb2RlPm1zaW5nbGUtcGljLWJhc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tc2lvLTE0MjkiPjxjb2RlPm1zaW88L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbXNsb3dfMDAyZGJ5dGVzLTE2NjgiPjxjb2RlPm1zbG93LWJ5dGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNNQ29yZS1PcHRpb25zIj5NQ29yZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNpbmRleC1tc21hbGxfMDAyZGRhdGEtMTMzOCI+PGNvZGU+bXNtYWxsLWRhdGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjaW5kZXgtbXNtYWxsXzAwMmRkYXRhXzAwMmRsaW1pdC0yMDY0Ij48Y29kZT5tc21hbGwtZGF0YS1saW1pdDwvY29kZT48L2E+OiA8YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI2luZGV4LW1zbWFsbF8wMDJkZGl2aWRlcy0xNzE4Ij48Y29kZT5tc21hbGwtZGl2aWRlczwvY29kZT48L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNNaWNyb0JsYXplLU9wdGlvbnMiPk1pY3JvQmxhemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbXNtYWxsXzAwMmRleGVjLTIwODgiPjxjb2RlPm1zbWFsbC1leGVjPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI2luZGV4LW1zbWFsbF8wMDJkbWVtLTIyMjUiPjxjb2RlPm1zbWFsbC1tZW08L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyI+U1BVIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUjMwLU9wdGlvbnMuaHRtbCNpbmRleC1tc21hbGxfMDAyZG1vZGVsLTEzNDYiPjxjb2RlPm1zbWFsbC1tb2RlbDwvY29kZT48L2E+OiA8YSBocmVmPSJGUjMwLU9wdGlvbnMuaHRtbCNGUjMwLU9wdGlvbnMiPkZSMzAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbXNtYWxsXzAwMmR0ZXh0LTEzNDAiPjxjb2RlPm1zbWFsbC10ZXh0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1zbWFsbDE2LTExMDYiPjxjb2RlPm1zbWFsbDE2PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zIj5BZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbXNtYXJ0bWlwcy0xNzcyIj48Y29kZT5tc21hcnRtaXBzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTIyNzkiPjxjb2RlPm1zb2Z0LWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1zb2Z0XzAwMmRmbG9hdC0yMTg5Ij48Y29kZT5tc29mdC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTIwNzkiPjxjb2RlPm1zb2Z0LWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTE5NjUiPjxjb2RlPm1zb2Z0LWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRFBfMDAyZDExLU9wdGlvbnMuaHRtbCNpbmRleC1tc29mdF8wMDJkZmxvYXQtMTg4MCI+PGNvZGU+bXNvZnQtZmxvYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIj5QRFAtMTEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1zb2Z0XzAwMmRmbG9hdC0xNzYyIj48Y29kZT5tc29mdC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI2luZGV4LW1zb2Z0XzAwMmRmbG9hdC0xNzA5Ij48Y29kZT5tc29mdC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNNaWNyb0JsYXplLU9wdGlvbnMiPk1pY3JvQmxhemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTE2MzciPjxjb2RlPm1zb2Z0LWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTE0NDgiPjxjb2RlPm1zb2Z0LWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1tc29mdF8wMDJkZmxvYXQtMTQyOCI+PGNvZGU+bXNvZnQtZmxvYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW1zb2Z0XzAwMmRmbG9hdC0xMzU0Ij48Y29kZT5tc29mdC1mbG9hdDwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTEzMTYiPjxjb2RlPm1zb2Z0LWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW1zb2Z0XzAwMmRxdWFkXzAwMmRmbG9hdC0yMTkxIj48Y29kZT5tc29mdC1xdWFkLWZsb2F0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1tc3A4LTExNTkiPjxjb2RlPm1zcDg8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tc3BhY2UtMjI2MSI+PGNvZGU+bXNwYWNlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW1zcGFjZS0yMTUzIj48Y29kZT5tc3BhY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPlNIIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXNwZS0xOTQ1Ij48Y29kZT5tc3BlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjaW5kZXgtbXNwZWNsZF8wMDJkYW5vbWFseS0xMTcyIj48Y29kZT5tc3BlY2xkLWFub21hbHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI0JsYWNrZmluLU9wdGlvbnMiPkJsYWNrZmluIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tc3BsaXRfMDAyZGFkZHJlc3Nlcy0xODAwIj48Y29kZT5tc3BsaXQtYWRkcmVzc2VzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1zcGxpdF8wMDJkdmVjbW92ZV8wMDJkZWFybHktMTExMyI+PGNvZGU+bXNwbGl0LXZlY21vdmUtZWFybHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tc3NlLTE0NzAiPjxjb2RlPm1zc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW1zc2UyYXZ4LTE0OTYiPjxjb2RlPm1zc2UyYXZ4PC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tc3NlcmVncGFybS0xNDYwIj48Y29kZT5tc3NlcmVncGFybTwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtbXN0YWNrXzAwMmRhbGlnbi0xMjE1Ij48Y29kZT5tc3RhY2stYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbXN0YWNrXzAwMmRiaWFzLTIyMTciPjxjb2RlPm1zdGFjay1iaWFzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tT3B0aW9ucy5odG1sI2luZGV4LW1zdGFja18wMDJkY2hlY2tfMDAyZGwxLTExNzgiPjxjb2RlPm1zdGFjay1jaGVjay1sMTwvY29kZT48L2E+OiA8YSBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbXN0YWNrXzAwMmRndWFyZC0yMTA2Ij48Y29kZT5tc3RhY2stZ3VhcmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNpbmRleC1tc3RhY2tfMDAyZGluY3JlbWVudC0xNjc1Ij48Y29kZT5tc3RhY2staW5jcmVtZW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNNQ29yZS1PcHRpb25zIj5NQ29yZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI2luZGV4LW1zdGFja18wMDJkb2Zmc2V0LTExMDIiPjxjb2RlPm1zdGFjay1vZmZzZXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW1zdGFja18wMDJkc2l6ZS0yMTA3Ij48Y29kZT5tc3RhY2stc2l6ZTwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXN0YWNrcmVhbGlnbi0xNDY1Ij48Y29kZT5tc3RhY2tyZWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI2luZGV4LW1zdGRtYWluLTIyMjciPjxjb2RlPm1zdGRtYWluPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1zdHJpY3RfMDAyZGFsaWduLTE5ODkiPjxjb2RlPm1zdHJpY3QtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbXN0cmljdF8wMDJkYWxpZ24tMTY1MSI+PGNvZGU+bXN0cmljdC1hbGlnbjwvY29kZT48L2E+OiA8YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI002ODB4MC1PcHRpb25zIj5NNjgweDAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LW1zdHJpY3RfMDAyZGFsaWduLTEwODYiPjxjb2RlPm1zdHJpY3QtYWxpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI2luZGV4LW1zdHJpY3RfMDAyZFgtMTE2MCI+PGNvZGU+bXN0cmljdC1YPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW1zdHJpbmctMTk3NCI+PGNvZGU+bXN0cmluZzwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXN0cmluZ29wXzAwMmRzdHJhdGVneV8wMDNkXzAwNDB2YXJfMDA3YmFsZ18wMDdkLTE0OTMiPjxjb2RlPm1zdHJpbmdvcC1zdHJhdGVneT08L2NvZGU+PHZhcj5hbGc8L3Zhcj48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tc3RydWN0dXJlXzAwMmRzaXplXzAwMmRib3VuZGFyeS0xMTMwIj48Y29kZT5tc3RydWN0dXJlLXNpemUtYm91bmRhcnk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXN2cjRfMDAyZHN0cnVjdF8wMDJkcmV0dXJuLTIwMTUiPjxjb2RlPm1zdnI0LXN0cnVjdC1yZXR1cm48L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW1zeW0zMi0xNzg2Ij48Y29kZT5tc3ltMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tc3luY2ktMTgzNSI+PGNvZGU+bXN5bmNpPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1NVC05NjYiPjxjb2RlPk1UPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNpbmRleC1tdGFyZ2V0XzAwMmRhbGlnbi0yMzE4Ij48Y29kZT5tdGFyZ2V0LWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPlh0ZW5zYSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW10YXMtMjE1MiI+PGNvZGU+bXRhczwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW10ZGEtMjI2MiI+PGNvZGU+bXRkYTwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjaW5kZXgtbXRleHRfMDAyZHNlY3Rpb25fMDAyZGxpdGVyYWxzLTIzMTYiPjxjb2RlPm10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI2luZGV4LW10Zi0xNzA2Ij48Y29kZT5tdGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNNZVAtT3B0aW9ucyI+TWVQIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2luZGV4LW10aHJlYWQtMTUxNSI+PGNvZGU+bXRocmVhZDwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgV2luZG93cyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXRocmVhZHMtMTQ4OSI+PGNvZGU+bXRocmVhZHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbXRodW1iLTExMzgiPjxjb2RlPm10aHVtYjwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbXRodW1iXzAwMmRpbnRlcndvcmstMTExOSI+PGNvZGU+bXRodW1iLWludGVyd29yazwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjaW5kZXgtbXRpbnlfMDAyZHN0YWNrLTExNjEiPjxjb2RlPm10aW55LXN0YWNrPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPkFWUiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWVQLU9wdGlvbnMuaHRtbCNpbmRleC1tdGlueV8wMDNkLTE3MDciPjxjb2RlPm10aW55PTwvY29kZT48L2E+OiA8YSBocmVmPSJNZVAtT3B0aW9ucy5odG1sI01lUC1PcHRpb25zIj5NZVAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbXRscy0xMzY4Ij48Y29kZT5tdGxzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tVExTLTEzNjciPjxjb2RlPm1UTFM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tdGxzXzAwMmRkaWFsZWN0LTE0ODUiPjxjb2RlPm10bHMtZGlhbGVjdDwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1tdGxzXzAwMmRkaWFsZWN0LTExNDQiPjxjb2RlPm10bHMtZGlhbGVjdDwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFBcmNoNjQtT3B0aW9ucy5odG1sI2luZGV4LW10bHNfMDAyZGRpYWxlY3RfMDAzZGRlc2MtMTA4OSI+PGNvZGU+bXRscy1kaWFsZWN0PWRlc2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tdGxzXzAwMmRkaWFsZWN0XzAwM2R0cmFkaXRpb25hbC0xMDkwIj48Y29kZT5tdGxzLWRpYWxlY3Q9dHJhZGl0aW9uYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tdGxzXzAwMmRkaXJlY3RfMDAyZHNlZ18wMDJkcmVmcy0xNDk1Ij48Y29kZT5tdGxzLWRpcmVjdC1zZWctcmVmczwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW10bHNfMDAyZG1hcmtlcnMtMjA0NiI+PGNvZGU+bXRscy1tYXJrZXJzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW10bHNfMDAyZHNpemUtMTU1NCI+PGNvZGU+bXRscy1zaXplPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXRvYy0xOTk1Ij48Y29kZT5tdG9jPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI2luZGV4LW10b21jYXRfMDAyZHN0YXRzLTEzOTQiPjxjb2RlPm10b21jYXQtc3RhdHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNGUlYtT3B0aW9ucyI+RlJWIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNTUlYLU9wdGlvbnMuaHRtbCNpbmRleC1tdG9wbGV2ZWxfMDAyZHN5bWJvbHMtMTg1MCI+PGNvZGU+bXRvcGxldmVsLXN5bWJvbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU1JWC1PcHRpb25zLmh0bWwjTU1JWC1PcHRpb25zIj5NTUlYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LW10cC0xMTQzIj48Y29kZT5tdHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LW10cGNzXzAwMmRmcmFtZS0xMTM5Ij48Y29kZT5tdHBjcy1mcmFtZTwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbXRwY3NfMDAyZGxlYWZfMDAyZGZyYW1lLTExNDAiPjxjb2RlPm10cGNzLWxlYWYtZnJhbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW10cGZfMDAyZHRyYWNlLTIxMDAiPjxjb2RlPm10cGYtdHJhY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbXRyYXBfMDAyZHByZWNpc2lvbi0xMzIzIj48Y29kZT5tdHJhcC1wcmVjaXNpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbXR1bmUtMjE5NyI+PGNvZGU+bXR1bmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI2luZGV4LW10dW5lLTIwOTkiPjxjb2RlPm10dW5lPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXR1bmUtMTkzMSI+PGNvZGU+bXR1bmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI2luZGV4LW10dW5lLTE4NjYiPjxjb2RlPm10dW5lPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbXR1bmUtMTczMSI+PGNvZGU+bXR1bmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjgweDAtT3B0aW9ucy5odG1sI2luZGV4LW10dW5lLTE2MTciPjxjb2RlPm10dW5lPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tdHVuZS0xNTU1Ij48Y29kZT5tdHVuZTwvY29kZT48L2E+OiA8YSBocmVmPSJJQV8wMDJkNjQtT3B0aW9ucy5odG1sI0lBXzAwMmQ2NC1PcHRpb25zIj5JQS02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXR1bmUtMTQ0MiI+PGNvZGU+bXR1bmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjaW5kZXgtbXR1bmUtMTM0MyI+PGNvZGU+bXR1bmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+REVDIEFscGhhIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1tdHVuZS0xMjA2Ij48Y29kZT5tdHVuZTwvY29kZT48L2E+OiA8YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNDUklTLU9wdGlvbnMiPkNSSVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbXR1bmUtMTEyNiI+PGNvZGU+bXR1bmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+QVJNIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tdHVuZS0xMDkzIj48Y29kZT5tdHVuZTwvY29kZT48L2E+OiA8YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPkFBcmNoNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdOVV8wMDJmTGludXgtT3B0aW9ucy5odG1sI2luZGV4LW11Y2xpYmMtMTM5NyI+PGNvZGU+bXVjbGliYzwvY29kZT48L2E+OiA8YSBocmVmPSJHTlVfMDAyZkxpbnV4LU9wdGlvbnMuaHRtbCNHTlVfMDAyZkxpbnV4LU9wdGlvbnMiPkdOVS9MaW51eCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2NvcmUtT3B0aW9ucy5odG1sI2luZGV4LW11bHMtMjExMiI+PGNvZGU+bXVsczwvY29kZT48L2E+OiA8YSBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjU2NvcmUtT3B0aW9ucyI+U2NvcmUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNpbmRleC1tdWx0Y29zdF8wMDNkXzAwNDB2YXJfMDA3Ym51bWJlcl8wMDdkLTIxNTYiPjxjb2RlPm11bHRjb3N0PTwvY29kZT48dmFyPm51bWJlcjwvdmFyPjwvYT46IDxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1tdWx0aV8wMDVmbW9kdWxlLTEyNzUiPjxjb2RlPm11bHRpX21vZHVsZTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjaW5kZXgtbXVsdGlsaWJfMDAyZGxpYnJhcnlfMDAyZHBpYy0xMzcwIj48Y29kZT5tdWx0aWxpYi1saWJyYXJ5LXBpYzwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LW11bHRpcGx5XzAwMmRlbmFibGVkLTE1ODYiPjxjb2RlPm11bHRpcGx5LWVuYWJsZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LW11bHRpcGx5XzAwNWZkZWZpbmVkLTEyNzYiPjxjb2RlPm11bHRpcGx5X2RlZmluZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LW11bHRpcGx5XzAwNWZkZWZpbmVkXzAwNWZ1bnVzZWQtMTI3NyI+PGNvZGU+bXVsdGlwbHlfZGVmaW5lZF91bnVzZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI2luZGV4LW11bmFsaWduZWRfMDAyZGFjY2Vzcy0xMTQ3Ij48Y29kZT5tdW5hbGlnbmVkLWFjY2VzczwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0tT3B0aW9ucy5odG1sI0FSTS1PcHRpb25zIj5BUk0gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tdW5hbGlnbmVkXzAwMmRkb3VibGVzLTIxOTMiPjxjb2RlPm11bmFsaWduZWQtZG91YmxlczwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwjaW5kZXgtbXVuaWNvZGUtMTUxNiI+PGNvZGU+bXVuaWNvZGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IFdpbmRvd3MgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI2luZGV4LW11bmluaXRfMDAyZGNvbnN0XzAwMmRpbl8wMDJkcm9kYXRhLTE3OTciPjxjb2RlPm11bmluaXQtY29uc3QtaW4tcm9kYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkFYLU9wdGlvbnMuaHRtbCNpbmRleC1tdW5peC0yMjkxIj48Y29kZT5tdW5peDwvY29kZT48L2E+OiA8YSBocmVmPSJWQVgtT3B0aW9ucy5odG1sI1ZBWC1PcHRpb25zIj5WQVggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI2luZGV4LW11bml4XzAwMmRhc20tMTkwMCI+PGNvZGU+bXVuaXgtYXNtPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI2luZGV4LW11bnNhZmVfMDAyZGRtYS0yMjIzIj48Y29kZT5tdW5zYWZlLWRtYTwvY29kZT48L2E+OiA8YSBocmVmPSJTUFUtT3B0aW9ucy5odG1sI1NQVS1PcHRpb25zIj5TUFUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1tdXBkYXRlLTE5NzYiPjxjb2RlPm11cGRhdGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI2luZGV4LW11c2VyXzAwMmRlbmFibGVkLTE1ODgiPjxjb2RlPm11c2VyLWVuYWJsZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE0zMi1PcHRpb25zLmh0bWwjTE0zMi1PcHRpb25zIj5MTTMyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjaW5kZXgtbXVzZXJtb2RlLTIxNTUiPjxjb2RlPm11c2VybW9kZTwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW12ODUwLTIyNjUiPjxjb2RlPm12ODUwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbXY4NTBlLTIyNzIiPjxjb2RlPm12ODUwZTwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW12ODUwZTEtMjI3MCI+PGNvZGU+bXY4NTBlMTwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW12ODUwZTItMjI2OSI+PGNvZGU+bXY4NTBlMjwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW12ODUwZTJ2My0yMjY4Ij48Y29kZT5tdjg1MGUydjM8L2NvZGU+PC9hPjogPGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNpbmRleC1tdjg1MGUydjQtMjI2NyI+PGNvZGU+bXY4NTBlMnY0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbXY4NTBlM3Y1LTIyNjYiPjxjb2RlPm12ODUwZTN2NTwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI2luZGV4LW12ODUwZXMtMjI3MSI+PGNvZGU+bXY4NTBlczwvY29kZT48L2E+OiA8YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNpbmRleC1tdjhwbHVzLTIxOTgiPjxjb2RlPm12OHBsdXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXZlY2xpYmFiaS0yMDUyIj48Y29kZT5tdmVjbGliYWJpPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tdmVjbGliYWJpLTE0ODMiPjxjb2RlPm12ZWNsaWJhYmk8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zIj5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2luZGV4LW12ZWN0OF8wMDJkcmV0XzAwMmRpbl8wMDJkbWVtLTE0NjEiPjxjb2RlPm12ZWN0OC1yZXQtaW4tbWVtPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjaW5kZXgtbXZpcy0yMjAwIj48Y29kZT5tdmlzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW12aXMyLTIyMDIiPjxjb2RlPm12aXMyPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI2luZGV4LW12aXMzLTIyMDQiPjxjb2RlPm12aXMzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJWLU9wdGlvbnMuaHRtbCNpbmRleC1tdmxpd18wMDJkYnJhbmNoLTEzODYiPjxjb2RlPm12bGl3LWJyYW5jaDwvY29kZT48L2E+OiA8YSBocmVmPSJGUlYtT3B0aW9ucy5odG1sI0ZSVi1PcHRpb25zIj5GUlYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZNUy1PcHRpb25zLmh0bWwjaW5kZXgtbXZtc18wMDJkcmV0dXJuXzAwMmRjb2Rlcy0yMjk0Ij48Y29kZT5tdm1zLXJldHVybi1jb2RlczwvY29kZT48L2E+OiA8YSBocmVmPSJWTVMtT3B0aW9ucy5odG1sI1ZNUy1PcHRpb25zIj5WTVMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXZvbGF0aWxlXzAwMmRhc21fMDAyZHN0b3AtMTUzMCI+PGNvZGU+bXZvbGF0aWxlLWFzbS1zdG9wPC9jb2RlPjwvYT46IDxhIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1tdnI0MTMwXzAwMmRhbGlnbi0xODM0Ij48Y29kZT5tdnI0MTMwLWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW12cnNhdmUtMTkzNyI+PGNvZGU+bXZyc2F2ZTwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW12c3gtMTk0OSI+PGNvZGU+bXZzeDwvY29kZT48L2E+OiA8YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW12eHdvcmtzLTIwMjciPjxjb2RlPm12eHdvcmtzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpbmRleC1tdnplcm91cHBlci0xNDc1Ij48Y29kZT5tdnplcm91cHBlcjwvY29kZT48L2E+OiA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW13YXJuXzAwMmRjZWxsXzAwMmRtaWNyb2NvZGUtMTk0MCI+PGNvZGU+bXdhcm4tY2VsbC1taWNyb2NvZGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbXdhcm5fMDAyZGR5bmFtaWNzdGFjay0yMTA1Ij48Y29kZT5td2Fybi1keW5hbWljc3RhY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbXdhcm5fMDAyZGZyYW1lc2l6ZS0yMTA0Ij48Y29kZT5td2Fybi1mcmFtZXNpemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNpbmRleC1td2Fybl8wMDJkbXVsdGlwbGVfMDAyZGZhc3RfMDAyZGludGVycnVwdHMtMjA3NiI+PGNvZGU+bXdhcm4tbXVsdGlwbGUtZmFzdC1pbnRlcnJ1cHRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIj5SWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNpbmRleC1td2Fybl8wMDJkcmVsb2MtMjIyMCI+PGNvZGU+bXdhcm4tcmVsb2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyI+U1BVIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjaW5kZXgtbXdpZGVfMDAyZGJpdGZpZWxkcy0xNjYyIj48Y29kZT5td2lkZS1iaXRmaWVsZHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUNvcmUtT3B0aW9ucy5odG1sI01Db3JlLU9wdGlvbnMiPk1Db3JlIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2luZGV4LW13aW4zMi0xNTE3Ij48Y29kZT5td2luMzI8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IFdpbmRvd3MgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwjaW5kZXgtbXdpbmRvd3MtMTUxOCI+PGNvZGU+bXdpbmRvd3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IFdpbmRvd3MgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjaW5kZXgtbXdvcmRfMDAyZHJlbG9jYXRpb25zLTExNDUiPjxjb2RlPm13b3JkLXJlbG9jYXRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNpbmRleC1td29yZHNfMDAyZGxpdHRsZV8wMDJkZW5kaWFuLTExMjQiPjxjb2RlPm13b3Jkcy1saXR0bGUtZW5kaWFuPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjaW5kZXgtbXgzMi0xNTAzIj48Y29kZT5teDMyPC9jb2RlPjwvYT46IDxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNpbmRleC1teGdvdC0xNzU0Ij48Y29kZT5teGdvdDwvY29kZT48L2E+OiA8YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPk1JUFMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjaW5kZXgtbXhnb3QtMTY1MiI+PGNvZGU+bXhnb3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+TTY4MHgwIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtbXhpbGlueF8wMDJkZnB1LTE5NzEiPjxjb2RlPm14aWxpbngtZnB1PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNpbmRleC1teGxfMDAyZGJhcnJlbF8wMDJkc2hpZnQtMTcxNiI+PGNvZGU+bXhsLWJhcnJlbC1zaGlmdDwvY29kZT48L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNNaWNyb0JsYXplLU9wdGlvbnMiPk1pY3JvQmxhemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNpbmRleC1teGxfMDAyZGNvbXBhdC0xOTYwIj48Y29kZT5teGwtY29tcGF0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNpbmRleC1teGxfMDAyZGZsb2F0XzAwMmRjb252ZXJ0LTE3MjIiPjxjb2RlPm14bC1mbG9hdC1jb252ZXJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbXhsXzAwMmRmbG9hdF8wMDJkc3FydC0xNzIzIj48Y29kZT5teGwtZmxvYXQtc3FydDwvY29kZT48L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNNaWNyb0JsYXplLU9wdGlvbnMiPk1pY3JvQmxhemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI2luZGV4LW14bF8wMDJkZ3BfMDAyZG9wdC0xNzIwIj48Y29kZT5teGwtZ3Atb3B0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbXhsXzAwMmRtdWx0aXBseV8wMDJkaGlnaC0xNzIxIj48Y29kZT5teGwtbXVsdGlwbHktaGlnaDwvY29kZT48L2E+OiA8YSBocmVmPSJNaWNyb0JsYXplLU9wdGlvbnMuaHRtbCNNaWNyb0JsYXplLU9wdGlvbnMiPk1pY3JvQmxhemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI2luZGV4LW14bF8wMDJkcGF0dGVybl8wMDJkY29tcGFyZS0xNzE3Ij48Y29kZT5teGwtcGF0dGVybi1jb21wYXJlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbXhsXzAwMmRyZW9yZGVyLTE3MjYiPjxjb2RlPm14bC1yZW9yZGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbXhsXzAwMmRzb2Z0XzAwMmRkaXYtMTcxNSI+PGNvZGU+bXhsLXNvZnQtZGl2PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbXhsXzAwMmRzb2Z0XzAwMmRtdWwtMTcxNCI+PGNvZGU+bXhsLXNvZnQtbXVsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjaW5kZXgtbXhsXzAwMmRzdGFja18wMDJkY2hlY2stMTcxOSI+PGNvZGU+bXhsLXN0YWNrLWNoZWNrPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI2luZGV4LW15ZWxsb3drbmlmZS0yMDI2Ij48Y29kZT5teWVsbG93a25pZmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjaW5kZXgtbXphcmNoLTIwOTIiPjxjb2RlPm16YXJjaDwvY29kZT48L2E+OiA8YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjaW5kZXgtbXpkYS0yMjY0Ij48Y29kZT5temRhPC9jb2RlPjwvYT46IDxhIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI2luZGV4LW16ZGNicmFuY2gtMjE2NiI+PGNvZGU+bXpkY2JyYW5jaDwvY29kZT48L2E+OiA8YSBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI2luZGV4LW16ZXJvXzAwMmRleHRlbmQtMTg0NiI+PGNvZGU+bXplcm8tZXh0ZW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjaW5kZXgtbm9fMDAyZGNhbm9uaWNhbF8wMDJkcHJlZml4ZXMtODkiPjxjb2RlPm5vLWNhbm9uaWNhbC1wcmVmaXhlczwvY29kZT48L2E+OiA8YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk92ZXJhbGwgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtbm9fMDAyZGludGVncmF0ZWRfMDAyZGNwcC05NDAiPjxjb2RlPm5vLWludGVncmF0ZWQtY3BwPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1ub18wMDJkc3lzcm9vdF8wMDJkc3VmZml4LTEwNjMiPjxjb2RlPm5vLXN5c3Jvb3Qtc3VmZml4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiPkRpcmVjdG9yeSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1ub18wMDVmZGVhZF8wMDVmc3RyaXBfMDA1ZmluaXRzXzAwNWZhbmRfMDA1ZnRlcm1zLTEyNzkiPjxjb2RlPm5vX2RlYWRfc3RyaXBfaW5pdHNfYW5kX3Rlcm1zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1ub2FsbF8wMDVmbG9hZC0xMjc4Ij48Y29kZT5ub2FsbF9sb2FkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjaW5kZXgtbm9jcHAtMTgxNiI+PGNvZGU+bm9jcHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlQUy1PcHRpb25zLmh0bWwjTUlQUy1PcHRpb25zIj5NSVBTIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1ub2RlZmF1bHRsaWJzLTEwMzMiPjxjb2RlPm5vZGVmYXVsdGxpYnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LW5vZml4cHJlYmluZGluZy0xMjgwIj48Y29kZT5ub2ZpeHByZWJpbmRpbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjaW5kZXgtbm9mcHUtMjA2MCI+PGNvZGU+bm9mcHU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlgtT3B0aW9ucy5odG1sI1JYLU9wdGlvbnMiPlJYIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC1ub2xpYmRsZC0xNDM0Ij48Y29kZT5ub2xpYmRsZDwvY29kZT48L2E+OiA8YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiPkhQUEEgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtbm9tdWx0aWRlZnMtMTI4MSI+PGNvZGU+bm9tdWx0aWRlZnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWeFdvcmtzLU9wdGlvbnMuaHRtbCNpbmRleC1ub25fMDAyZHN0YXRpYy0yMzAwIj48Y29kZT5ub24tc3RhdGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IlZ4V29ya3MtT3B0aW9ucy5odG1sI1Z4V29ya3MtT3B0aW9ucyI+VnhXb3JrcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1ub3ByZWJpbmQtMTI4MiI+PGNvZGU+bm9wcmViaW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1ub3NlZ2xpbmtlZGl0LTEyODMiPjxjb2RlPm5vc2VnbGlua2VkaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1ub3N0YXJ0ZmlsZXMtMTAzMiI+PGNvZGU+bm9zdGFydGZpbGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1ub3N0ZGluYy05NzYiPjxjb2RlPm5vc3RkaW5jPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1ub3N0ZGluY18wMDJiXzAwMmItOTc3Ij48Y29kZT5ub3N0ZGluYysrPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtbm9zdGRpbmNfMDAyYl8wMDJiLTE2OCI+PGNvZGU+bm9zdGRpbmMrKzwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1ub3N0ZGxpYi0xMDM0Ij48Y29kZT5ub3N0ZGxpYjwvY29kZT48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtby05NDUiPjxjb2RlPm88L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtTy03MzAiPjxjb2RlPk88L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNpbmRleC1vLTgzIj48Y29kZT5vPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI092ZXJhbGwtT3B0aW9ucyI+T3ZlcmFsbCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LU8wLTczNCI+PGNvZGU+TzA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtTzEtNzMxIj48Y29kZT5PMTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1PMi03MzIiPjxjb2RlPk8yPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LU8zLTczMyI+PGNvZGU+TzM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtT2Zhc3QtNzM2Ij48Y29kZT5PZmFzdDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNpbmRleC1PZy03MzciPjxjb2RlPk9nPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI2luZGV4LU9zLTczNSI+PGNvZGU+T3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW1pemUtT3B0aW9ucy5odG1sI09wdGltaXplLU9wdGlvbnMiPk9wdGltaXplIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LVAtMTAxMSI+PGNvZGU+UDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcC01NzAiPjxjb2RlPnA8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXBhZ2V6ZXJvXzAwNWZzaXplLTEyODQiPjxjb2RlPnBhZ2V6ZXJvX3NpemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjaW5kZXgtcGFyYW0tOTM1Ij48Y29kZT5wYXJhbTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI2luZGV4LXBhc3NfMDAyZGV4aXRfMDAyZGNvZGVzLTc4Ij48Y29kZT5wYXNzLWV4aXQtY29kZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5ncy1hbmQtRXJyb3JzLmh0bWwjaW5kZXgtcGVkYW50aWMtMzU5MCI+PGNvZGU+cGVkYW50aWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZ3MtYW5kLUVycm9ycy5odG1sI1dhcm5pbmdzLWFuZC1FcnJvcnMiPldhcm5pbmdzIGFuZCBFcnJvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBbHRlcm5hdGUtS2V5d29yZHMuaHRtbCNpbmRleC1wZWRhbnRpYy0yODgyIj48Y29kZT5wZWRhbnRpYzwvY29kZT48L2E+OiA8YSBocmVmPSJBbHRlcm5hdGUtS2V5d29yZHMuaHRtbCNBbHRlcm5hdGUtS2V5d29yZHMiPkFsdGVybmF0ZSBLZXl3b3JkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI2luZGV4LXBlZGFudGljLTI0MDAiPjxjb2RlPnBlZGFudGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1wZWRhbnRpYy05NTciPjxjb2RlPnBlZGFudGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtcGVkYW50aWMtMjU3Ij48Y29kZT5wZWRhbnRpYzwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LXBlZGFudGljLTYyIj48Y29kZT5wZWRhbnRpYzwvY29kZT48L2E+OiA8YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmdzLWFuZC1FcnJvcnMuaHRtbCNpbmRleC1wZWRhbnRpY18wMDJkZXJyb3JzLTM1OTEiPjxjb2RlPnBlZGFudGljLWVycm9yczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5ncy1hbmQtRXJyb3JzLmh0bWwjV2FybmluZ3MtYW5kLUVycm9ycyI+V2FybmluZ3MgYW5kIEVycm9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI2luZGV4LXBlZGFudGljXzAwMmRlcnJvcnMtMzU4NiI+PGNvZGU+cGVkYW50aWMtZXJyb3JzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI05vbl8wMDJkYnVncyI+Tm9uLWJ1Z3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LXBlZGFudGljXzAwMmRlcnJvcnMtOTU4Ij48Y29kZT5wZWRhbnRpYy1lcnJvcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wZWRhbnRpY18wMDJkZXJyb3JzLTI1OSI+PGNvZGU+cGVkYW50aWMtZXJyb3JzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtcGVkYW50aWNfMDAyZGVycm9ycy02MyI+PGNvZGU+cGVkYW50aWMtZXJyb3JzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+U3RhbmRhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wZy01NzIiPjxjb2RlPnBnPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtcGllLTEwNDEiPjxjb2RlPnBpZTwvY29kZT48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI2luZGV4LXBpcGUtODYiPjxjb2RlPnBpcGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXByZWJpbmQtMTI4NSI+PGNvZGU+cHJlYmluZDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtcHJlYmluZF8wMDVmYWxsXzAwNWZ0d29sZXZlbF8wMDVmbW9kdWxlcy0xMjg2Ij48Y29kZT5wcmViaW5kX2FsbF90d29sZXZlbF9tb2R1bGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wcmludF8wMDJkZmlsZV8wMDJkbmFtZS03MTMiPjxjb2RlPnByaW50LWZpbGUtbmFtZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcHJpbnRfMDAyZGxpYmdjY18wMDJkZmlsZV8wMDJkbmFtZS03MTkiPjxjb2RlPnByaW50LWxpYmdjYy1maWxlLW5hbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LXByaW50XzAwMmRtdWx0aV8wMDJkZGlyZWN0b3J5LTcxNCI+PGNvZGU+cHJpbnQtbXVsdGktZGlyZWN0b3J5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wcmludF8wMDJkbXVsdGlfMDAyZGxpYi03MTUiPjxjb2RlPnByaW50LW11bHRpLWxpYjwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcHJpbnRfMDAyZG11bHRpXzAwMmRvc18wMDJkZGlyZWN0b3J5LTcxNiI+PGNvZGU+cHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wcmludF8wMDJkbXVsdGlhcmNoLTcxNyI+PGNvZGU+cHJpbnQtbXVsdGlhcmNoPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LXByaW50XzAwMmRvYmpjXzAwMmRydW50aW1lXzAwMmRpbmZvLTIzMyI+PGNvZGU+cHJpbnQtb2JqYy1ydW50aW1lLWluZm88L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcHJpbnRfMDAyZHByb2dfMDAyZG5hbWUtNzE4Ij48Y29kZT5wcmludC1wcm9nLW5hbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LXByaW50XzAwMmRzZWFyY2hfMDAyZGRpcnMtNzIwIj48Y29kZT5wcmludC1zZWFyY2gtZGlyczwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcHJpbnRfMDAyZHN5c3Jvb3QtNzIxIj48Y29kZT5wcmludC1zeXNyb290PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wcmludF8wMDJkc3lzcm9vdF8wMDJkaGVhZGVyc18wMDJkc3VmZml4LTcyMiI+PGNvZGU+cHJpbnQtc3lzcm9vdC1oZWFkZXJzLXN1ZmZpeDwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtcHJpdmF0ZV8wMDVmYnVuZGxlLTEyODciPjxjb2RlPnByaXZhdGVfYnVuZGxlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU29sYXJpcy0yLU9wdGlvbnMuaHRtbCNpbmRleC1wdGhyZWFkLTIxODAiPjxjb2RlPnB0aHJlYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU29sYXJpcy0yLU9wdGlvbnMuaHRtbCNTb2xhcmlzLTItT3B0aW9ucyI+U29sYXJpcyAyIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjaW5kZXgtcHRocmVhZC0yMDQ4Ij48Y29kZT5wdGhyZWFkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTb2xhcmlzLTItT3B0aW9ucy5odG1sI2luZGV4LXB0aHJlYWRzLTIxNzkiPjxjb2RlPnB0aHJlYWRzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNvbGFyaXMtMi1PcHRpb25zLmh0bWwjU29sYXJpcy0yLU9wdGlvbnMiPlNvbGFyaXMgMiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1RLTU3MyI+PGNvZGU+UTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5c3RlbS1WLU9wdGlvbnMuaHRtbCNpbmRleC1Rbi0yMjQyIj48Y29kZT5RbjwvY29kZT48L2E+OiA8YSBocmVmPSJTeXN0ZW0tVi1PcHRpb25zLmh0bWwjU3lzdGVtLVYtT3B0aW9ucyI+U3lzdGVtIFYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5c3RlbS1WLU9wdGlvbnMuaHRtbCNpbmRleC1ReS0yMjQxIj48Y29kZT5ReTwvY29kZT48L2E+OiA8YSBocmVmPSJTeXN0ZW0tVi1PcHRpb25zLmh0bWwjU3lzdGVtLVYtT3B0aW9ucyI+U3lzdGVtIFYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LXJkeW5hbWljLTEwNDIiPjxjb2RlPnJkeW5hbWljPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1yZWFkXzAwNWZvbmx5XzAwNWZyZWxvY3MtMTI4OCI+PGNvZGU+cmVhZF9vbmx5X3JlbG9jczwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtcmVtYXAtMTAxNSI+PGNvZGU+cmVtYXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1zLTEwNDMiPjxjb2RlPnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1TLTEwMjciPjxjb2RlPlM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNpbmRleC1TLTgwIj48Y29kZT5TPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI092ZXJhbGwtT3B0aW9ucyI+T3ZlcmFsbCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1zYXZlXzAwMmR0ZW1wcy03MDUiPjxjb2RlPnNhdmUtdGVtcHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LXNhdmVfMDAyZHRlbXBzXzAwM2RvYmotNzA2Ij48Y29kZT5zYXZlLXRlbXBzPW9iajwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtc2VjdGFsaWduLTEyODkiPjxjb2RlPnNlY3RhbGlnbjwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtc2VjdGNyZWF0ZS0xMjkzIj48Y29kZT5zZWN0Y3JlYXRlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1zZWN0b2JqZWN0c3ltYm9scy0xMjkwIj48Y29kZT5zZWN0b2JqZWN0c3ltYm9sczwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtc2VjdG9yZGVyLTEyOTUiPjxjb2RlPnNlY3RvcmRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtc2VnMWFkZHItMTI5MiI+PGNvZGU+c2VnMWFkZHI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXNlZ18wMDVmYWRkcl8wMDVmdGFibGUtMTI5OSI+PGNvZGU+c2VnX2FkZHJfdGFibGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXNlZ18wMDVmYWRkcl8wMDVmdGFibGVfMDA1ZmZpbGVuYW1lLTEzMDAiPjxjb2RlPnNlZ19hZGRyX3RhYmxlX2ZpbGVuYW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1zZWdhZGRyLTEyOTYiPjxjb2RlPnNlZ2FkZHI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXNlZ2xpbmtlZGl0LTEzMDEiPjxjb2RlPnNlZ2xpbmtlZGl0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1zZWdwcm90LTEzMDIiPjxjb2RlPnNlZ3Byb3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXNlZ3NfMDA1ZnJlYWRfMDA1Zm9ubHlfMDA1ZmFkZHItMTI5NyI+PGNvZGU+c2Vnc19yZWFkX29ubHlfYWRkcjwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtc2Vnc18wMDVmcmVhZF8wMDVmd3JpdGVfMDA1ZmFkZHItMTI5OCI+PGNvZGU+c2Vnc19yZWFkX3dyaXRlX2FkZHI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1zaGFyZWQtMTA0NSI+PGNvZGU+c2hhcmVkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtc2hhcmVkXzAwMmRsaWJnY2MtMTA0NiI+PGNvZGU+c2hhcmVkLWxpYmdjYzwvY29kZT48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMuaHRtbCNpbmRleC1zaG9ydF8wMDJkY2FsbHMtMTEwNSI+PGNvZGU+c2hvcnQtY2FsbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucy5odG1sI0FkYXB0ZXZhLUVwaXBoYW55LU9wdGlvbnMiPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUklTLU9wdGlvbnMuaHRtbCNpbmRleC1zaW0tMTIzMCI+PGNvZGU+c2ltPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjaW5kZXgtc2ltMi0xMjMxIj48Y29kZT5zaW0yPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNSSVMtT3B0aW9ucy5odG1sI0NSSVMtT3B0aW9ucyI+Q1JJUyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1zaW5nbGVfMDA1Zm1vZHVsZS0xMzA1Ij48Y29kZT5zaW5nbGVfbW9kdWxlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1zcGVjcy0xMDYxIj48Y29kZT5zcGVjczwvY29kZT48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI2luZGV4LXN0YXRpYy0xNDM1Ij48Y29kZT5zdGF0aWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXN0YXRpYy0xMzA2Ij48Y29kZT5zdGF0aWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1zdGF0aWMtMTA0NCI+PGNvZGU+c3RhdGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtc3RhdGljXzAwMmRsaWJnY2MtMTA0NyI+PGNvZGU+c3RhdGljLWxpYmdjYzwvY29kZT48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI2luZGV4LXN0ZC0zNTgzIj48Y29kZT5zdGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTm9uXzAwMmRidWdzLmh0bWwjTm9uXzAwMmRidWdzIj5Ob24tYnVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjaW5kZXgtc3RkLTMzNDgiPjxjb2RlPnN0ZDwvY29kZT48L2E+OiA8YSBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIj5PdGhlciBCdWlsdGluczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtc3RkLTEwMyI+PGNvZGU+c3RkPC9jb2RlPjwvYT46IDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPkMgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjaW5kZXgtc3RkLTYwIj48Y29kZT5zdGQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LXN0ZF8wMDNkLTk3NCI+PGNvZGU+c3RkPTwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtc3ViXzAwNWZsaWJyYXJ5LTEzMDciPjxjb2RlPnN1Yl9saWJyYXJ5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC1zdWJfMDA1ZnVtYnJlbGxhLTEzMDgiPjxjb2RlPnN1Yl91bWJyZWxsYTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI2luZGV4LXN5bWJvbGljLTEwNDgiPjxjb2RlPnN5bWJvbGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1zeXNyb290LTEwNjIiPjxjb2RlPnN5c3Jvb3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1ULTEwNDkiPjxjb2RlPlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LXRhcmdldF8wMDJkaGVscC0xMDE3Ij48Y29kZT50YXJnZXQtaGVscDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI2luZGV4LXRhcmdldF8wMDJkaGVscC04OCI+PGNvZGU+dGFyZ2V0LWhlbHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNpbmRleC10aHJlYWRzLTE0MzYiPjxjb2RlPnRocmVhZHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFBQQS1PcHRpb25zLmh0bWwjSFBQQS1PcHRpb25zIj5IUFBBIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LXRpbWUtNzA3Ij48Y29kZT50aW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR05VXzAwMmZMaW51eC1PcHRpb25zLmh0bWwjaW5kZXgtdG5vXzAwMmRhbmRyb2lkXzAwMmRjYy0xNDAwIj48Y29kZT50bm8tYW5kcm9pZC1jYzwvY29kZT48L2E+OiA8YSBocmVmPSJHTlVfMDAyZkxpbnV4LU9wdGlvbnMuaHRtbCNHTlVfMDAyZkxpbnV4LU9wdGlvbnMiPkdOVS9MaW51eCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR05VXzAwMmZMaW51eC1PcHRpb25zLmh0bWwjaW5kZXgtdG5vXzAwMmRhbmRyb2lkXzAwMmRsZC0xNDAxIj48Y29kZT50bm8tYW5kcm9pZC1sZDwvY29kZT48L2E+OiA8YSBocmVmPSJHTlVfMDAyZkxpbnV4LU9wdGlvbnMuaHRtbCNHTlVfMDAyZkxpbnV4LU9wdGlvbnMiPkdOVS9MaW51eCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNpbmRleC10cmFkaXRpb25hbC0zNTM4Ij48Y29kZT50cmFkaXRpb25hbDwvY29kZT48L2E+OiA8YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj5JbmNvbXBhdGliaWxpdGllczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtdHJhZGl0aW9uYWwtMTIxIj48Y29kZT50cmFkaXRpb25hbDwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtdHJhZGl0aW9uYWxfMDAyZGNwcC0xMDEzIj48Y29kZT50cmFkaXRpb25hbC1jcHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LXRyYWRpdGlvbmFsXzAwMmRjcHAtMTIwIj48Y29kZT50cmFkaXRpb25hbC1jcHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LXRyaWdyYXBocy0xMDE0Ij48Y29kZT50cmlncmFwaHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LXRyaWdyYXBocy0xMTciPjxjb2RlPnRyaWdyYXBoczwvY29kZT48L2E+OiA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtdHdvbGV2ZWxfMDA1Zm5hbWVzcGFjZS0xMzA5Ij48Y29kZT50d29sZXZlbF9uYW1lc3BhY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC11LTEwNTMiPjxjb2RlPnU8L2NvZGU+PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LVUtOTQyIj48Y29kZT5VPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNpbmRleC11bWJyZWxsYS0xMzEwIj48Y29kZT51bWJyZWxsYTwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtdW5kZWYtOTQzIj48Y29kZT51bmRlZjwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtdW5kZWZpbmVkLTEzMTEiPjxjb2RlPnVuZGVmaW5lZDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtdW5leHBvcnRlZF8wMDVmc3ltYm9sc18wMDVmbGlzdC0xMzEyIj48Y29kZT51bmV4cG9ydGVkX3N5bWJvbHNfbGlzdDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtdi0xMDE4Ij48Y29kZT52PC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjaW5kZXgtdi04NCI+PGNvZGU+djwvY29kZT48L2E+OiA8YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk92ZXJhbGwgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtdmVyc2lvbi0xMDIwIj48Y29kZT52ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjaW5kZXgtdmVyc2lvbi05MCI+PGNvZGU+dmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk92ZXJhbGwgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjaW5kZXgtVy0zNTQ4Ij48Y29kZT5XPC9jb2RlPjwvYT46IDxhIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC13LTk1NiI+PGNvZGU+dzwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVctMjYyIj48Y29kZT5XPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtdy0yNTAiPjxjb2RlPnc8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBc3NlbWJsZXItT3B0aW9ucy5odG1sI2luZGV4LVdhLTEwMjEiPjxjb2RlPldhPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFzc2VtYmxlci1PcHRpb25zLmh0bWwjQXNzZW1ibGVyLU9wdGlvbnMiPkFzc2VtYmxlciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV2FiaS0xNzAiPjxjb2RlPldhYmk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNpbmRleC1XYWRkcl8wMDJkc3BhY2VfMDAyZGNvbnZlcnQtMTE2MiI+PGNvZGU+V2FkZHItc3BhY2UtY29udmVydDwvY29kZT48L2E+OiA8YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj5BVlIgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdhZGRyZXNzLTQ0NiI+PGNvZGU+V2FkZHJlc3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XYWdncmVnYXRlXzAwMmRyZXR1cm4tNDUwIj48Y29kZT5XYWdncmVnYXRlLXJldHVybjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdhZ2dyZXNzaXZlXzAwMmRsb29wXzAwMmRvcHRpbWl6YXRpb25zLTQ1MyI+PGNvZGU+V2FnZ3Jlc3NpdmUtbG9vcC1vcHRpbWl6YXRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmQtTGlicmFyaWVzLmh0bWwjaW5kZXgtV2FsbC0zNTYyIj48Y29kZT5XYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0YW5kYXJkLUxpYnJhcmllcy5odG1sI1N0YW5kYXJkLUxpYnJhcmllcyI+U3RhbmRhcmQgTGlicmFyaWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1XYWxsLTk0NiI+PGNvZGU+V2FsbDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdhbGwtMjYwIj48Y29kZT5XYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2FycmF5XzAwMmRib3VuZHMtMzc2Ij48Y29kZT5XYXJyYXktYm91bmRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdhc3NpZ25fMDAyZGludGVyY2VwdC0yMjMiPjxjb2RlPldhc3NpZ24taW50ZXJjZXB0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XYXR0cmlidXRlcy00NTUiPjxjb2RlPldhdHRyaWJ1dGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2JhZF8wMDJkZnVuY3Rpb25fMDAyZGNhc3QtNDEzIj48Y29kZT5XYmFkLWZ1bmN0aW9uLWNhc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XYnVpbHRpbl8wMDJkbWFjcm9fMDAyZHJlZGVmaW5lZC00NTciPjxjb2RlPldidWlsdGluLW1hY3JvLXJlZGVmaW5lZDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdjYXN0XzAwMmRhbGlnbi00MTciPjxjb2RlPldjYXN0LWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2Nhc3RfMDAyZHF1YWwtNDE1Ij48Y29kZT5XY2FzdC1xdWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2NoYXJfMDAyZHN1YnNjcmlwdHMtMjY1Ij48Y29kZT5XY2hhci1zdWJzY3JpcHRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2Nsb2JiZXJlZC00MjEiPjxjb2RlPldjbG9iYmVyZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LVdjb21tZW50LTk0NyI+PGNvZGU+V2NvbW1lbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XY29tbWVudC0yNjciPjxjb2RlPldjb21tZW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1XY29tbWVudHMtOTQ4Ij48Y29kZT5XY29tbWVudHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XY29udmVyc2lvbi00MjMiPjxjb2RlPldjb252ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2NvbnZlcnNpb25fMDAyZG51bGwtNDI1Ij48Y29kZT5XY29udmVyc2lvbi1udWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV2N0b3JfMDAyZGR0b3JfMDAyZHByaXZhY3ktMTcyIj48Y29kZT5XY3Rvci1kdG9yLXByaXZhY3k8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2RlY2xhcmF0aW9uXzAwMmRhZnRlcl8wMDJkc3RhdGVtZW50LTM5MSI+PGNvZGU+V2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdkZWxldGVfMDAyZG5vbl8wMDJkdmlydHVhbF8wMDJkZHRvci0xNzQiPjxjb2RlPldkZWxldGUtbm9uLXZpcnR1YWwtZHRvcjwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZGVwcmVjYXRlZC00ODIiPjxjb2RlPldkZXByZWNhdGVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2RlcHJlY2F0ZWRfMDAyZGRlY2xhcmF0aW9ucy00ODQiPjxjb2RlPldkZXByZWNhdGVkLWRlY2xhcmF0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdkaXNhYmxlZF8wMDJkb3B0aW1pemF0aW9uLTUyOCI+PGNvZGU+V2Rpc2FibGVkLW9wdGltaXphdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdkaXZfMDAyZGJ5XzAwMmR6ZXJvLTM3OCI+PGNvZGU+V2Rpdi1ieS16ZXJvPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2RvdWJsZV8wMDJkcHJvbW90aW9uLTI3MCI+PGNvZGU+V2RvdWJsZS1wcm9tb3Rpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXdlYWtfMDA1ZnJlZmVyZW5jZV8wMDVmbWlzbWF0Y2hlcy0xMzEzIj48Y29kZT53ZWFrX3JlZmVyZW5jZV9taXNtYXRjaGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV2VmZmNfMDAyYl8wMDJiLTE5MCI+PGNvZGU+V2VmZmMrKzwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZW1wdHlfMDAyZGJvZHktNDMxIj48Y29kZT5XZW1wdHktYm9keTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtV2VuZGlmXzAwMmRsYWJlbHMtOTUzIj48Y29kZT5XZW5kaWYtbGFiZWxzPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2VuZGlmXzAwMmRsYWJlbHMtMzk2Ij48Y29kZT5XZW5kaWYtbGFiZWxzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2VudW1fMDAyZGNvbXBhcmUtNDMzIj48Y29kZT5XZW51bS1jb21wYXJlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1XZXJyb3ItOTU0Ij48Y29kZT5XZXJyb3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZXJyb3ItMjUxIj48Y29kZT5XZXJyb3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZXJyb3JfMDAzZC0yNTMiPjxjb2RlPldlcnJvcj08L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZXh0cmEtMjYzIj48Y29kZT5XZXh0cmE8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZmF0YWxfMDAyZGVycm9ycy0yNTUiPjxjb2RlPldmYXRhbC1lcnJvcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZmxvYXRfMDAyZGVxdWFsLTM4NSI+PGNvZGU+V2Zsb2F0LWVxdWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LVdmb3JtYXQtMjYwOSI+PGNvZGU+V2Zvcm1hdDwvY29kZT48L2E+OiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdmb3JtYXQtMjcyIj48Y29kZT5XZm9ybWF0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2Zvcm1hdF8wMDJkY29udGFpbnNfMDAyZG51bC0yNzgiPjxjb2RlPldmb3JtYXQtY29udGFpbnMtbnVsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2Zvcm1hdF8wMDJkZXh0cmFfMDAyZGFyZ3MtMjgwIj48Y29kZT5XZm9ybWF0LWV4dHJhLWFyZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjaW5kZXgtV2Zvcm1hdF8wMDJkbm9ubGl0ZXJhbC0yNjEzIj48Y29kZT5XZm9ybWF0LW5vbmxpdGVyYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZm9ybWF0XzAwMmRub25saXRlcmFsLTI4MyI+PGNvZGU+V2Zvcm1hdC1ub25saXRlcmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2Zvcm1hdF8wMDJkc2VjdXJpdHktMjg1Ij48Y29kZT5XZm9ybWF0LXNlY3VyaXR5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2Zvcm1hdF8wMDJkeTJrLTI4NyI+PGNvZGU+V2Zvcm1hdC15Mms8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZm9ybWF0XzAwMmR6ZXJvXzAwMmRsZW5ndGgtMjgyIj48Y29kZT5XZm9ybWF0LXplcm8tbGVuZ3RoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2Zvcm1hdF8wMDNkLTI3NiI+PGNvZGU+V2Zvcm1hdD08L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XZnJhbWVfMDAyZGxhcmdlcl8wMDJkdGhhbi00MDEiPjxjb2RlPldmcmFtZS1sYXJnZXItdGhhbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdmcmVlXzAwMmRub25oZWFwXzAwMmRvYmplY3QtNDAzIj48Y29kZT5XZnJlZS1ub25oZWFwLW9iamVjdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjaW5kZXgtd2hhdHNsb2FkZWQtMTMxNCI+PGNvZGU+d2hhdHNsb2FkZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGFyd2luLU9wdGlvbnMuaHRtbCNEYXJ3aW4tT3B0aW9ucyI+RGFyd2luIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI2luZGV4LXdoeWxvYWQtMTI5MSI+PGNvZGU+d2h5bG9hZDwvY29kZT48L2E+OiA8YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj5EYXJ3aW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdpZ25vcmVkXzAwMmRxdWFsaWZpZXJzLTI5OSI+PGNvZGU+V2lnbm9yZWQtcXVhbGlmaWVyczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdpbXBsaWNpdC0yOTciPjxjb2RlPldpbXBsaWNpdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdpbXBsaWNpdF8wMDJkZnVuY3Rpb25fMDAyZGRlY2xhcmF0aW9uLTI5NSI+PGNvZGU+V2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2ltcGxpY2l0XzAwMmRpbnQtMjkzIj48Y29kZT5XaW1wbGljaXQtaW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2luaGVyaXRlZF8wMDJkdmFyaWFkaWNfMDAyZGN0b3ItNTAyIj48Y29kZT5XaW5oZXJpdGVkLXZhcmlhZGljLWN0b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XaW5pdF8wMDJkc2VsZi0yOTEiPjxjb2RlPldpbml0LXNlbGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbmxpbmUuaHRtbCNpbmRleC1XaW5saW5lLTI3OTMiPjxjb2RlPldpbmxpbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIj5JbmxpbmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XaW5saW5lLTUwNCI+PGNvZGU+V2lubGluZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdpbnRfMDAyZHRvXzAwMmRwb2ludGVyXzAwMmRjYXN0LTUwOSI+PGNvZGU+V2ludC10by1wb2ludGVyLWNhc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XaW52YWxpZF8wMDJkb2Zmc2V0b2YtNTA3Ij48Y29kZT5XaW52YWxpZC1vZmZzZXRvZjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdpbnZhbGlkXzAwMmRwY2gtNTEyIj48Y29kZT5XaW52YWxpZC1wY2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XanVtcF8wMDJkbWlzc2VzXzAwMmRpbml0LTQzNSI+PGNvZGU+V2p1bXAtbWlzc2VzLWluaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1XbC0xMDUyIj48Y29kZT5XbDwvY29kZT48L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdsYXJnZXJfMDAyZHRoYW5fMDAyZF8wMDQwdmFyXzAwN2JsZW5fMDA3ZC00MDAiPjxjb2RlPldsYXJnZXItdGhhbi08L2NvZGU+PHZhcj5sZW48L3Zhcj48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdsYXJnZXJfMDAyZHRoYW5fMDAzZF8wMDQwdmFyXzAwN2JsZW5fMDA3ZC0zOTkiPjxjb2RlPldsYXJnZXItdGhhbj08L2NvZGU+PHZhcj5sZW48L3Zhcj48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdsaXRlcmFsXzAwMmRzdWZmaXgtMTc2Ij48Y29kZT5XbGl0ZXJhbC1zdWZmaXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV2xvZ2ljYWxfMDAyZG9wLTQ0OCI+PGNvZGU+V2xvZ2ljYWwtb3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XbG9uZ18wMDJkbG9uZy01MTQiPjxjb2RlPldsb25nLWxvbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XbWFpbi0zMDEiPjxjb2RlPldtYWluPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV21heWJlXzAwMmR1bmluaXRpYWxpemVkLTM0NiI+PGNvZGU+V21heWJlLXVuaW5pdGlhbGl6ZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XbWlzc2luZ18wMDJkYnJhY2VzLTMwMyI+PGNvZGU+V21pc3NpbmctYnJhY2VzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV21pc3NpbmdfMDAyZGRlY2xhcmF0aW9ucy00NjgiPjxjb2RlPldtaXNzaW5nLWRlY2xhcmF0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdtaXNzaW5nXzAwMmRmaWVsZF8wMDJkaW5pdGlhbGl6ZXJzLTQ3MCI+PGNvZGU+V21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV21pc3NpbmdfMDAyZGZvcm1hdF8wMDJkYXR0cmlidXRlLTM3MCI+PGNvZGU+V21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdtaXNzaW5nXzAwMmRpbmNsdWRlXzAwMmRkaXJzLTMwNSI+PGNvZGU+V21pc3NpbmctaW5jbHVkZS1kaXJzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV21pc3NpbmdfMDAyZHBhcmFtZXRlcl8wMDJkdHlwZS00NjQiPjxjb2RlPldtaXNzaW5nLXBhcmFtZXRlci10eXBlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV21pc3NpbmdfMDAyZHByb3RvdHlwZXMtNDY2Ij48Y29kZT5XbWlzc2luZy1wcm90b3R5cGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV211bHRpY2hhci00NzYiPjxjb2RlPldtdWx0aWNoYXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1XbmFycm93aW5nLTE3OCI+PGNvZGU+V25hcnJvd2luZzwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XbmVzdGVkXzAwMmRleHRlcm5zLTUwMCI+PGNvZGU+V25lc3RlZC1leHRlcm5zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRhYmktMTcxIj48Y29kZT5Xbm8tYWJpPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkYWRkcmVzcy00NDciPjxjb2RlPlduby1hZGRyZXNzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRhZ2dyZWdhdGVfMDAyZHJldHVybi00NTEiPjxjb2RlPlduby1hZ2dyZWdhdGUtcmV0dXJuPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRhZ2dyZXNzaXZlXzAwMmRsb29wXzAwMmRvcHRpbWl6YXRpb25zLTQ1MiI+PGNvZGU+V25vLWFnZ3Jlc3NpdmUtbG9vcC1vcHRpbWl6YXRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRhbGwtMjYxIj48Y29kZT5Xbm8tYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRhcnJheV8wMDJkYm91bmRzLTM3NSI+PGNvZGU+V25vLWFycmF5LWJvdW5kczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGFzc2lnbl8wMDJkaW50ZXJjZXB0LTIyNCI+PGNvZGU+V25vLWFzc2lnbi1pbnRlcmNlcHQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkYXR0cmlidXRlcy00NTQiPjxjb2RlPlduby1hdHRyaWJ1dGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRiYWRfMDAyZGZ1bmN0aW9uXzAwMmRjYXN0LTQxNCI+PGNvZGU+V25vLWJhZC1mdW5jdGlvbi1jYXN0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRidWlsdGluXzAwMmRtYWNyb18wMDJkcmVkZWZpbmVkLTQ1NiI+PGNvZGU+V25vLWJ1aWx0aW4tbWFjcm8tcmVkZWZpbmVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRjYXN0XzAwMmRhbGlnbi00MTgiPjxjb2RlPlduby1jYXN0LWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRjYXN0XzAwMmRxdWFsLTQxNiI+PGNvZGU+V25vLWNhc3QtcXVhbDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkY2hhcl8wMDJkc3Vic2NyaXB0cy0yNjYiPjxjb2RlPlduby1jaGFyLXN1YnNjcmlwdHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGNsb2JiZXJlZC00MjIiPjxjb2RlPlduby1jbG9iYmVyZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGNvbW1lbnQtMjY4Ij48Y29kZT5Xbm8tY29tbWVudDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkY29udmVyc2lvbi00MjQiPjxjb2RlPlduby1jb252ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRjb252ZXJzaW9uXzAwMmRudWxsLTQyNiI+PGNvZGU+V25vLWNvbnZlcnNpb24tbnVsbDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkY292ZXJhZ2VfMDAyZG1pc21hdGNoLTI2OSI+PGNvZGU+V25vLWNvdmVyYWdlLW1pc21hdGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRjdG9yXzAwMmRkdG9yXzAwMmRwcml2YWN5LTE3MyI+PGNvZGU+V25vLWN0b3ItZHRvci1wcml2YWN5PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZGVjbGFyYXRpb25fMDAyZGFmdGVyXzAwMmRzdGF0ZW1lbnQtMzkyIj48Y29kZT5Xbm8tZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRkZWxldGVfMDAyZG5vbl8wMDJkdmlydHVhbF8wMDJkZHRvci0xNzUiPjxjb2RlPlduby1kZWxldGUtbm9uLXZpcnR1YWwtZHRvcjwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGRlcHJlY2F0ZWQtNDgxIj48Y29kZT5Xbm8tZGVwcmVjYXRlZDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZGVwcmVjYXRlZF8wMDJkZGVjbGFyYXRpb25zLTQ4MyI+PGNvZGU+V25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRkaXNhYmxlZF8wMDJkb3B0aW1pemF0aW9uLTUyOSI+PGNvZGU+V25vLWRpc2FibGVkLW9wdGltaXphdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZGl2XzAwMmRieV8wMDJkemVyby0zNzciPjxjb2RlPlduby1kaXYtYnktemVybzwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZG91YmxlXzAwMmRwcm9tb3Rpb24tMjcxIj48Y29kZT5Xbm8tZG91YmxlLXByb21vdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZWZmY18wMDJiXzAwMmItMTkxIj48Y29kZT5Xbm8tZWZmYysrPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZW1wdHlfMDAyZGJvZHktNDMyIj48Y29kZT5Xbm8tZW1wdHktYm9keTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZW5kaWZfMDAyZGxhYmVscy0zOTUiPjxjb2RlPlduby1lbmRpZi1sYWJlbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGVudW1fMDAyZGNvbXBhcmUtNDM0Ij48Y29kZT5Xbm8tZW51bS1jb21wYXJlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRlcnJvci0yNTIiPjxjb2RlPlduby1lcnJvcjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZXJyb3JfMDAzZC0yNTQiPjxjb2RlPlduby1lcnJvcj08L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGV4dHJhLTI2NCI+PGNvZGU+V25vLWV4dHJhPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRmYXRhbF8wMDJkZXJyb3JzLTI1NiI+PGNvZGU+V25vLWZhdGFsLWVycm9yczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZmxvYXRfMDAyZGVxdWFsLTM4NiI+PGNvZGU+V25vLWZsb2F0LWVxdWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRmb3JtYXQtMjczIj48Y29kZT5Xbm8tZm9ybWF0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRmb3JtYXRfMDAyZGNvbnRhaW5zXzAwMmRudWwtMjc3Ij48Y29kZT5Xbm8tZm9ybWF0LWNvbnRhaW5zLW51bDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZm9ybWF0XzAwMmRleHRyYV8wMDJkYXJncy0yNzkiPjxjb2RlPlduby1mb3JtYXQtZXh0cmEtYXJnczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZm9ybWF0XzAwMmRub25saXRlcmFsLTI4NCI+PGNvZGU+V25vLWZvcm1hdC1ub25saXRlcmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRmb3JtYXRfMDAyZHNlY3VyaXR5LTI4NiI+PGNvZGU+V25vLWZvcm1hdC1zZWN1cml0eTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZm9ybWF0XzAwMmR5MmstMjg4Ij48Y29kZT5Xbm8tZm9ybWF0LXkyazwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkZm9ybWF0XzAwMmR6ZXJvXzAwMmRsZW5ndGgtMjgxIj48Y29kZT5Xbm8tZm9ybWF0LXplcm8tbGVuZ3RoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRmcmVlXzAwMmRub25oZWFwXzAwMmRvYmplY3QtNDAyIj48Y29kZT5Xbm8tZnJlZS1ub25oZWFwLW9iamVjdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkaWdub3JlZF8wMDJkcXVhbGlmaWVycy0zMDAiPjxjb2RlPlduby1pZ25vcmVkLXF1YWxpZmllcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGltcGxpY2l0LTI5OCI+PGNvZGU+V25vLWltcGxpY2l0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRpbXBsaWNpdF8wMDJkZnVuY3Rpb25fMDAyZGRlY2xhcmF0aW9uLTI5NiI+PGNvZGU+V25vLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRpbXBsaWNpdF8wMDJkaW50LTI5NCI+PGNvZGU+V25vLWltcGxpY2l0LWludDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkaW5oZXJpdGVkXzAwMmR2YXJpYWRpY18wMDJkY3Rvci01MDMiPjxjb2RlPlduby1pbmhlcml0ZWQtdmFyaWFkaWMtY3RvcjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkaW5pdF8wMDJkc2VsZi0yOTIiPjxjb2RlPlduby1pbml0LXNlbGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGlubGluZS01MDUiPjxjb2RlPlduby1pbmxpbmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZGludF8wMDJkdG9fMDAyZHBvaW50ZXJfMDAyZGNhc3QtNTA4Ij48Y29kZT5Xbm8taW50LXRvLXBvaW50ZXItY2FzdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkaW52YWxpZF8wMDJkb2Zmc2V0b2YtNTA2Ij48Y29kZT5Xbm8taW52YWxpZC1vZmZzZXRvZjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkaW52YWxpZF8wMDJkcGNoLTUxMyI+PGNvZGU+V25vLWludmFsaWQtcGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRqdW1wXzAwMmRtaXNzZXNfMDAyZGluaXQtNDM2Ij48Y29kZT5Xbm8tanVtcC1taXNzZXMtaW5pdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkbGl0ZXJhbF8wMDJkc3VmZml4LTE3NyI+PGNvZGU+V25vLWxpdGVyYWwtc3VmZml4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkbG9naWNhbF8wMDJkb3AtNDQ5Ij48Y29kZT5Xbm8tbG9naWNhbC1vcDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkbG9uZ18wMDJkbG9uZy01MTUiPjxjb2RlPlduby1sb25nLWxvbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG1haW4tMzAyIj48Y29kZT5Xbm8tbWFpbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkbWF5YmVfMDAyZHVuaW5pdGlhbGl6ZWQtMzQ3Ij48Y29kZT5Xbm8tbWF5YmUtdW5pbml0aWFsaXplZDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkbWlzc2luZ18wMDJkYnJhY2VzLTMwNCI+PGNvZGU+V25vLW1pc3NpbmctYnJhY2VzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRtaXNzaW5nXzAwMmRkZWNsYXJhdGlvbnMtNDY5Ij48Y29kZT5Xbm8tbWlzc2luZy1kZWNsYXJhdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG1pc3NpbmdfMDAyZGZpZWxkXzAwMmRpbml0aWFsaXplcnMtNDcxIj48Y29kZT5Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG1pc3NpbmdfMDAyZGZvcm1hdF8wMDJkYXR0cmlidXRlLTM3MiI+PGNvZGU+V25vLW1pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkbWlzc2luZ18wMDJkaW5jbHVkZV8wMDJkZGlycy0zMDYiPjxjb2RlPlduby1taXNzaW5nLWluY2x1ZGUtZGlyczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkbWlzc2luZ18wMDJkcGFyYW1ldGVyXzAwMmR0eXBlLTQ2NSI+PGNvZGU+V25vLW1pc3NpbmctcGFyYW1ldGVyLXR5cGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG1pc3NpbmdfMDAyZHByb3RvdHlwZXMtNDY3Ij48Y29kZT5Xbm8tbWlzc2luZy1wcm90b3R5cGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRtdWRmbGFwLTUzNCI+PGNvZGU+V25vLW11ZGZsYXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG11bHRpY2hhci00NzUiPjxjb2RlPlduby1tdWx0aWNoYXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG5hcnJvd2luZy0xNzkiPjxjb2RlPlduby1uYXJyb3dpbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRuZXN0ZWRfMDAyZGV4dGVybnMtNTAxIj48Y29kZT5Xbm8tbmVzdGVkLWV4dGVybnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG5vZXhjZXB0LTE4MSI+PGNvZGU+V25vLW5vZXhjZXB0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkbm9uXzAwMmR0ZW1wbGF0ZV8wMDJkZnJpZW5kLTE5NCI+PGNvZGU+V25vLW5vbi10ZW1wbGF0ZS1mcmllbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRub25fMDAyZHZpcnR1YWxfMDAyZGR0b3ItMTgzIj48Y29kZT5Xbm8tbm9uLXZpcnR1YWwtZHRvcjwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG5vbm51bGwtMjkwIj48Y29kZT5Xbm8tbm9ubnVsbDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkb2xkXzAwMmRzdHlsZV8wMDJkY2FzdC0xOTciPjxjb2RlPlduby1vbGQtc3R5bGUtY2FzdDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG9sZF8wMDJkc3R5bGVfMDAyZGRlY2xhcmF0aW9uLTQ2MSI+PGNvZGU+V25vLW9sZC1zdHlsZS1kZWNsYXJhdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkb2xkXzAwMmRzdHlsZV8wMDJkZGVmaW5pdGlvbi00NjMiPjxjb2RlPlduby1vbGQtc3R5bGUtZGVmaW5pdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkb3ZlcmZsb3ctNDg1Ij48Y29kZT5Xbm8tb3ZlcmZsb3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG92ZXJsZW5ndGhfMDAyZHN0cmluZ3MtNTM2Ij48Y29kZT5Xbm8tb3Zlcmxlbmd0aC1zdHJpbmdzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRvdmVybG9hZGVkXzAwMmR2aXJ0dWFsLTE5OSI+PGNvZGU+V25vLW92ZXJsb2FkZWQtdmlydHVhbDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZG92ZXJyaWRlXzAwMmRpbml0LTQ4OCI+PGNvZGU+V25vLW92ZXJyaWRlLWluaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHBhY2tlZC00OTMiPjxjb2RlPlduby1wYWNrZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHBhY2tlZF8wMDJkYml0ZmllbGRfMDAyZGNvbXBhdC00OTUiPjxjb2RlPlduby1wYWNrZWQtYml0ZmllbGQtY29tcGF0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRwYWRkZWQtNDk3Ij48Y29kZT5Xbm8tcGFkZGVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRwYXJlbnRoZXNlcy0zMDgiPjxjb2RlPlduby1wYXJlbnRoZXNlczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkcGVkYW50aWNfMDAyZG1zXzAwMmRmb3JtYXQtNDA3Ij48Y29kZT5Xbm8tcGVkYW50aWMtbXMtZm9ybWF0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sI2luZGV4LVdub18wMDJkcG1mXzAwMmRjb252ZXJzaW9ucy0zNTIzIj48Y29kZT5Xbm8tcG1mLWNvbnZlcnNpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJvdW5kLW1lbWJlci1mdW5jdGlvbnMuaHRtbCNCb3VuZC1tZW1iZXItZnVuY3Rpb25zIj5Cb3VuZCBtZW1iZXIgZnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRwbWZfMDAyZGNvbnZlcnNpb25zLTIwMiI+PGNvZGU+V25vLXBtZi1jb252ZXJzaW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHBvaW50ZXJfMDAyZGFyaXRoLTQxMCI+PGNvZGU+V25vLXBvaW50ZXItYXJpdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHBvaW50ZXJfMDAyZHNpZ24tNTMxIj48Y29kZT5Xbm8tcG9pbnRlci1zaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRwb2ludGVyXzAwMmR0b18wMDJkaW50XzAwMmRjYXN0LTUxMCI+PGNvZGU+V25vLXBvaW50ZXItdG8taW50LWNhc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHByYWdtYXMtMzU0Ij48Y29kZT5Xbm8tcHJhZ21hczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHByb3RvY29sLTIyNSI+PGNvZGU+V25vLXByb3RvY29sPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHJlZHVuZGFudF8wMDJkZGVjbHMtNDk5Ij48Y29kZT5Xbm8tcmVkdW5kYW50LWRlY2xzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRyZW9yZGVyLTE4NSI+PGNvZGU+V25vLXJlb3JkZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRyZXR1cm5fMDAyZGxvY2FsXzAwMmRhZGRyLTMxMSI+PGNvZGU+V25vLXJldHVybi1sb2NhbC1hZGRyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRyZXR1cm5fMDAyZHR5cGUtMzE0Ij48Y29kZT5Xbm8tcmV0dXJuLXR5cGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRzZWxlY3Rvci0yMjgiPjxjb2RlPlduby1zZWxlY3RvcjwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRzZXF1ZW5jZV8wMDJkcG9pbnQtMzEwIj48Y29kZT5Xbm8tc2VxdWVuY2UtcG9pbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHNoYWRvdy0zOTgiPjxjb2RlPlduby1zaGFkb3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHNpZ25fMDAyZGNvbXBhcmUtNDM4Ij48Y29kZT5Xbm8tc2lnbi1jb21wYXJlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRzaWduXzAwMmRjb252ZXJzaW9uLTQ0MyI+PGNvZGU+V25vLXNpZ24tY29udmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkc2lnbl8wMDJkcHJvbW8tMjA1Ij48Y29kZT5Xbm8tc2lnbi1wcm9tbzwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHNpemVvZl8wMDJkcG9pbnRlcl8wMDJkbWVtYWNjZXNzLTQ0NSI+PGNvZGU+V25vLXNpemVvZi1wb2ludGVyLW1lbWFjY2VzczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkc3RhY2tfMDAyZHByb3RlY3Rvci01MzMiPjxjb2RlPlduby1zdGFjay1wcm90ZWN0b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHN0cmljdF8wMDJkYWxpYXNpbmctMzU3Ij48Y29kZT5Xbm8tc3RyaWN0LWFsaWFzaW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRzdHJpY3RfMDAyZG51bGxfMDAyZHNlbnRpbmVsLTE5MyI+PGNvZGU+V25vLXN0cmljdC1udWxsLXNlbnRpbmVsPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkc3RyaWN0XzAwMmRvdmVyZmxvdy0zNjAiPjxjb2RlPlduby1zdHJpY3Qtb3ZlcmZsb3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHN0cmljdF8wMDJkcHJvdG90eXBlcy00NTkiPjxjb2RlPlduby1zdHJpY3QtcHJvdG90eXBlczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHN0cmljdF8wMDJkc2VsZWN0b3JfMDAyZG1hdGNoLTIzMCI+PGNvZGU+V25vLXN0cmljdC1zZWxlY3Rvci1tYXRjaDwvY29kZT48L2E+OiA8YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRzdWdnZXN0XzAwMmRhdHRyaWJ1dGVfMDAzZC0zNjIiPjxjb2RlPlduby1zdWdnZXN0LWF0dHJpYnV0ZT08L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHN1Z2dlc3RfMDAyZGF0dHJpYnV0ZV8wMDNkY29uc3QtMzY2Ij48Y29kZT5Xbm8tc3VnZ2VzdC1hdHRyaWJ1dGU9Y29uc3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHN1Z2dlc3RfMDAyZGF0dHJpYnV0ZV8wMDNkZm9ybWF0LTM3MSI+PGNvZGU+V25vLXN1Z2dlc3QtYXR0cmlidXRlPWZvcm1hdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkc3VnZ2VzdF8wMDJkYXR0cmlidXRlXzAwM2Rub3JldHVybi0zNjgiPjxjb2RlPlduby1zdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkc3VnZ2VzdF8wMDJkYXR0cmlidXRlXzAwM2RwdXJlLTM2NCI+PGNvZGU+V25vLXN1Z2dlc3QtYXR0cmlidXRlPXB1cmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHN3aXRjaC0zMTYiPjxjb2RlPlduby1zd2l0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHN3aXRjaF8wMDJkZGVmYXVsdC0zMTgiPjxjb2RlPlduby1zd2l0Y2gtZGVmYXVsdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkc3dpdGNoXzAwMmRlbnVtLTMyMCI+PGNvZGU+V25vLXN3aXRjaC1lbnVtPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmRzeW5jXzAwMmRuYW5kLTMyMiI+PGNvZGU+V25vLXN5bmMtbmFuZDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkc3lzdGVtXzAwMmRoZWFkZXJzLTM4MCI+PGNvZGU+V25vLXN5c3RlbS1oZWFkZXJzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR0cmFkaXRpb25hbC0zODgiPjxjb2RlPlduby10cmFkaXRpb25hbDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkdHJhZGl0aW9uYWxfMDAyZGNvbnZlcnNpb24tMzkwIj48Y29kZT5Xbm8tdHJhZGl0aW9uYWwtY29udmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkdHJhbXBvbGluZXMtMzg0Ij48Y29kZT5Xbm8tdHJhbXBvbGluZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHRyaWdyYXBocy0zMjQiPjxjb2RlPlduby10cmlncmFwaHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHR5cGVfMDAyZGxpbWl0cy00MTIiPjxjb2RlPlduby10eXBlLWxpbWl0czwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHVuZGVjbGFyZWRfMDAyZHNlbGVjdG9yLTIzMiI+PGNvZGU+V25vLXVuZGVjbGFyZWQtc2VsZWN0b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkdW5kZWYtMzk0Ij48Y29kZT5Xbm8tdW5kZWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHVuaW5pdGlhbGl6ZWQtMzQ1Ij48Y29kZT5Xbm8tdW5pbml0aWFsaXplZDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkdW5rbm93bl8wMDJkcHJhZ21hcy0zNTAiPjxjb2RlPlduby11bmtub3duLXByYWdtYXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHVuc2FmZV8wMDJkbG9vcF8wMDJkb3B0aW1pemF0aW9ucy00MDYiPjxjb2RlPlduby11bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR1bnVzZWQtMzQzIj48Y29kZT5Xbm8tdW51c2VkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR1bnVzZWRfMDAyZGJ1dF8wMDJkc2V0XzAwMmRwYXJhbWV0ZXItMzI2Ij48Y29kZT5Xbm8tdW51c2VkLWJ1dC1zZXQtcGFyYW1ldGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR1bnVzZWRfMDAyZGJ1dF8wMDJkc2V0XzAwMmR2YXJpYWJsZS0zMjgiPjxjb2RlPlduby11bnVzZWQtYnV0LXNldC12YXJpYWJsZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkdW51c2VkXzAwMmRmdW5jdGlvbi0zMzAiPjxjb2RlPlduby11bnVzZWQtZnVuY3Rpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHVudXNlZF8wMDJkbGFiZWwtMzMyIj48Y29kZT5Xbm8tdW51c2VkLWxhYmVsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR1bnVzZWRfMDAyZHBhcmFtZXRlci0zMzUiPjxjb2RlPlduby11bnVzZWQtcGFyYW1ldGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR1bnVzZWRfMDAyZHJlc3VsdC0zMzciPjxjb2RlPlduby11bnVzZWQtcmVzdWx0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR1bnVzZWRfMDAyZHZhbHVlLTM0MSI+PGNvZGU+V25vLXVudXNlZC12YWx1ZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkdW51c2VkXzAwMmR2YXJpYWJsZS0zMzkiPjxjb2RlPlduby11bnVzZWQtdmFyaWFibGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHVzZWxlc3NfMDAyZGNhc3QtNDMwIj48Y29kZT5Xbm8tdXNlbGVzcy1jYXN0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR2YXJhcmdzLTUxOSI+PGNvZGU+V25vLXZhcmFyZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHZhcmlhZGljXzAwMmRtYWNyb3MtNTE3Ij48Y29kZT5Xbm8tdmFyaWFkaWMtbWFjcm9zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vXzAwMmR2ZWN0b3JfMDAyZG9wZXJhdGlvbl8wMDJkcGVyZm9ybWFuY2UtNTIxIj48Y29kZT5Xbm8tdmVjdG9yLW9wZXJhdGlvbi1wZXJmb3JtYW5jZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkdmlydHVhbF8wMDJkbW92ZV8wMDJkYXNzaWduLTUyMyI+PGNvZGU+V25vLXZpcnR1YWwtbW92ZS1hc3NpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHZsYS01MjUiPjxjb2RlPlduby12bGE8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9fMDAyZHZvbGF0aWxlXzAwMmRyZWdpc3Rlcl8wMDJkdmFyLTUyNyI+PGNvZGU+V25vLXZvbGF0aWxlLXJlZ2lzdGVyLXZhcjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkd3JpdGVfMDAyZHN0cmluZ3MtNDIwIj48Y29kZT5Xbm8td3JpdGUtc3RyaW5nczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub18wMDJkemVyb18wMDJkYXNfMDAyZG51bGxfMDAyZHBvaW50ZXJfMDAyZGNvbnN0YW50LTQyOCI+PGNvZGU+V25vLXplcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV25vZXhjZXB0LTE4MCI+PGNvZGU+V25vZXhjZXB0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdub25fMDAyZHRlbXBsYXRlXzAwMmRmcmllbmQtMTk1Ij48Y29kZT5Xbm9uLXRlbXBsYXRlLWZyaWVuZDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xbm9uXzAwMmR2aXJ0dWFsXzAwMmRkdG9yLTE4MiI+PGNvZGU+V25vbi12aXJ0dWFsLWR0b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV25vbm51bGwtMjg5Ij48Y29kZT5Xbm9ubnVsbDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdub3JtYWxpemVkXzAwM2QtNDc3Ij48Y29kZT5Xbm9ybWFsaXplZD08L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xb2xkXzAwMmRzdHlsZV8wMDJkY2FzdC0xOTYiPjxjb2RlPldvbGQtc3R5bGUtY2FzdDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xb2xkXzAwMmRzdHlsZV8wMDJkZGVjbGFyYXRpb24tNDYwIj48Y29kZT5Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV29sZF8wMDJkc3R5bGVfMDAyZGRlZmluaXRpb24tNDYyIj48Y29kZT5Xb2xkLXN0eWxlLWRlZmluaXRpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xb3ZlcmZsb3ctNDg2Ij48Y29kZT5Xb3ZlcmZsb3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xb3Zlcmxlbmd0aF8wMDJkc3RyaW5ncy01MzUiPjxjb2RlPldvdmVybGVuZ3RoLXN0cmluZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xb3ZlcmxvYWRlZF8wMDJkdmlydHVhbC0xOTgiPjxjb2RlPldvdmVybG9hZGVkLXZpcnR1YWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV292ZXJyaWRlXzAwMmRpbml0LTQ4NyI+PGNvZGU+V292ZXJyaWRlLWluaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LVdwLTkzOCI+PGNvZGU+V3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XcGFja2VkLTQ5MiI+PGNvZGU+V3BhY2tlZDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdwYWNrZWRfMDAyZGJpdGZpZWxkXzAwMmRjb21wYXQtNDk0Ij48Y29kZT5XcGFja2VkLWJpdGZpZWxkLWNvbXBhdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdwYWRkZWQtNDk2Ij48Y29kZT5XcGFkZGVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3BhcmVudGhlc2VzLTMwNyI+PGNvZGU+V3BhcmVudGhlc2VzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3BlZGFudGljLTI1OCI+PGNvZGU+V3BlZGFudGljPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3BlZGFudGljXzAwMmRtc18wMDJkZm9ybWF0LTQwOCI+PGNvZGU+V3BlZGFudGljLW1zLWZvcm1hdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdwbWZfMDAyZGNvbnZlcnNpb25zLTIwMyI+PGNvZGU+V3BtZi1jb252ZXJzaW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb2ludGVyLUFyaXRoLmh0bWwjaW5kZXgtV3BvaW50ZXJfMDAyZGFyaXRoLTI1NDMiPjxjb2RlPldwb2ludGVyLWFyaXRoPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvaW50ZXItQXJpdGguaHRtbCNQb2ludGVyLUFyaXRoIj5Qb2ludGVyIEFyaXRoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3BvaW50ZXJfMDAyZGFyaXRoLTQwOSI+PGNvZGU+V3BvaW50ZXItYXJpdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XcG9pbnRlcl8wMDJkc2lnbi01MzAiPjxjb2RlPldwb2ludGVyLXNpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XcG9pbnRlcl8wMDJkdG9fMDAyZGludF8wMDJkY2FzdC01MTEiPjxjb2RlPldwb2ludGVyLXRvLWludC1jYXN0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3ByYWdtYXMtMzU1Ij48Y29kZT5XcHJhZ21hczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1XcHJvdG9jb2wtMjI2Ij48Y29kZT5XcHJvdG9jb2w8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJhbGwtT3B0aW9ucy5odG1sI2luZGV4LXdyYXBwZXItOTEiPjxjb2RlPndyYXBwZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XcmVkdW5kYW50XzAwMmRkZWNscy00OTgiPjxjb2RlPldyZWR1bmRhbnQtZGVjbHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1XcmVvcmRlci0xODQiPjxjb2RlPldyZW9yZGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdyZXR1cm5fMDAyZGxvY2FsXzAwMmRhZGRyLTMxMiI+PGNvZGU+V3JldHVybi1sb2NhbC1hZGRyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3JldHVybl8wMDJkdHlwZS0zMTMiPjxjb2RlPldyZXR1cm4tdHlwZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xc2VsZWN0b3ItMjI3Ij48Y29kZT5Xc2VsZWN0b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzZXF1ZW5jZV8wMDJkcG9pbnQtMzA5Ij48Y29kZT5Xc2VxdWVuY2UtcG9pbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc2hhZG93LTM5NyI+PGNvZGU+V3NoYWRvdzwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzaWduXzAwMmRjb21wYXJlLTQzNyI+PGNvZGU+V3NpZ24tY29tcGFyZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzaWduXzAwMmRjb252ZXJzaW9uLTQ0MiI+PGNvZGU+V3NpZ24tY29udmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdzaWduXzAwMmRwcm9tby0yMDQiPjxjb2RlPldzaWduLXByb21vPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzaXplb2ZfMDAyZHBvaW50ZXJfMDAyZG1lbWFjY2Vzcy00NDQiPjxjb2RlPldzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc3RhY2tfMDAyZHByb3RlY3Rvci01MzIiPjxjb2RlPldzdGFjay1wcm90ZWN0b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc3RhY2tfMDAyZHVzYWdlLTQwNCI+PGNvZGU+V3N0YWNrLXVzYWdlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3N0cmljdF8wMDJkYWxpYXNpbmctMzU2Ij48Y29kZT5Xc3RyaWN0LWFsaWFzaW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3N0cmljdF8wMDJkYWxpYXNpbmdfMDAzZG4tMzU4Ij48Y29kZT5Xc3RyaWN0LWFsaWFzaW5nPW48L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1Xc3RyaWN0XzAwMmRudWxsXzAwMmRzZW50aW5lbC0xOTIiPjxjb2RlPldzdHJpY3QtbnVsbC1zZW50aW5lbDwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPkMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc3RyaWN0XzAwMmRvdmVyZmxvdy0zNTkiPjxjb2RlPldzdHJpY3Qtb3ZlcmZsb3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc3RyaWN0XzAwMmRwcm90b3R5cGVzLTQ1OCI+PGNvZGU+V3N0cmljdC1wcm90b3R5cGVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LVdzdHJpY3RfMDAyZHNlbGVjdG9yXzAwMmRtYXRjaC0yMjkiPjxjb2RlPldzdHJpY3Qtc2VsZWN0b3ItbWF0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzdWdnZXN0XzAwMmRhdHRyaWJ1dGVfMDAzZC0zNjEiPjxjb2RlPldzdWdnZXN0LWF0dHJpYnV0ZT08L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc3VnZ2VzdF8wMDJkYXR0cmlidXRlXzAwM2Rjb25zdC0zNjUiPjxjb2RlPldzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzdWdnZXN0XzAwMmRhdHRyaWJ1dGVfMDAzZGZvcm1hdC0zNjkiPjxjb2RlPldzdWdnZXN0LWF0dHJpYnV0ZT1mb3JtYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc3VnZ2VzdF8wMDJkYXR0cmlidXRlXzAwM2Rub3JldHVybi0zNjciPjxjb2RlPldzdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzdWdnZXN0XzAwMmRhdHRyaWJ1dGVfMDAzZHB1cmUtMzYzIj48Y29kZT5Xc3VnZ2VzdC1hdHRyaWJ1dGU9cHVyZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzd2l0Y2gtMzE1Ij48Y29kZT5Xc3dpdGNoPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3N3aXRjaF8wMDJkZGVmYXVsdC0zMTciPjxjb2RlPldzd2l0Y2gtZGVmYXVsdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVdzd2l0Y2hfMDAyZGVudW0tMzE5Ij48Y29kZT5Xc3dpdGNoLWVudW08L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc3luY18wMDJkbmFuZC0zMjEiPjxjb2RlPldzeW5jLW5hbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LVdzeXN0ZW1fMDAyZGhlYWRlcnMtOTU1Ij48Y29kZT5Xc3lzdGVtLWhlYWRlcnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xc3lzdGVtXzAwMmRoZWFkZXJzLTM3OSI+PGNvZGU+V3N5c3RlbS1oZWFkZXJzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1XdHJhZGl0aW9uYWwtOTUwIj48Y29kZT5XdHJhZGl0aW9uYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdHJhZGl0aW9uYWwtMzg3Ij48Y29kZT5XdHJhZGl0aW9uYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdHJhZGl0aW9uYWxfMDAyZGNvbnZlcnNpb24tMzg5Ij48Y29kZT5XdHJhZGl0aW9uYWwtY29udmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd0cmFtcG9saW5lcy0zODMiPjxjb2RlPld0cmFtcG9saW5lczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtV3RyaWdyYXBocy05NDkiPjxjb2RlPld0cmlncmFwaHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdHJpZ3JhcGhzLTMyMyI+PGNvZGU+V3RyaWdyYXBoczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd0eXBlXzAwMmRsaW1pdHMtNDExIj48Y29kZT5XdHlwZS1saW1pdHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtV3VuZGVjbGFyZWRfMDAyZHNlbGVjdG9yLTIzMSI+PGNvZGU+V3VuZGVjbGFyZWQtc2VsZWN0b3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjaW5kZXgtV3VuZGVmLTk1MSI+PGNvZGU+V3VuZGVmPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3VuZGVmLTM5MyI+PGNvZGU+V3VuZGVmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3VuaW5pdGlhbGl6ZWQtMzQ0Ij48Y29kZT5XdW5pbml0aWFsaXplZDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bmtub3duXzAwMmRwcmFnbWFzLTM0OSI+PGNvZGU+V3Vua25vd24tcHJhZ21hczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bnNhZmVfMDAyZGxvb3BfMDAyZG9wdGltaXphdGlvbnMtNDA1Ij48Y29kZT5XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9uczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bnN1ZmZpeGVkXzAwMmRmbG9hdF8wMDJkY29uc3RhbnRzLTUzNyI+PGNvZGU+V3Vuc3VmZml4ZWQtZmxvYXQtY29uc3RhbnRzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3VudXNlZC0zNDIiPjxjb2RlPld1bnVzZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdW51c2VkXzAwMmRidXRfMDAyZHNldF8wMDJkcGFyYW1ldGVyLTMyNSI+PGNvZGU+V3VudXNlZC1idXQtc2V0LXBhcmFtZXRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bnVzZWRfMDAyZGJ1dF8wMDJkc2V0XzAwMmR2YXJpYWJsZS0zMjciPjxjb2RlPld1bnVzZWQtYnV0LXNldC12YXJpYWJsZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bnVzZWRfMDAyZGZ1bmN0aW9uLTMyOSI+PGNvZGU+V3VudXNlZC1mdW5jdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bnVzZWRfMDAyZGxhYmVsLTMzMSI+PGNvZGU+V3VudXNlZC1sYWJlbDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bnVzZWRfMDAyZGxvY2FsXzAwMmR0eXBlZGVmcy0zMzMiPjxjb2RlPld1bnVzZWQtbG9jYWwtdHlwZWRlZnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LVd1bnVzZWRfMDAyZG1hY3Jvcy05NTIiPjxjb2RlPld1bnVzZWQtbWFjcm9zPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtV3VudXNlZF8wMDJkcGFyYW1ldGVyLTMzNCI+PGNvZGU+V3VudXNlZC1wYXJhbWV0ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdW51c2VkXzAwMmRyZXN1bHQtMzM2Ij48Y29kZT5XdW51c2VkLXJlc3VsdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bnVzZWRfMDAyZHZhbHVlLTM0MCI+PGNvZGU+V3VudXNlZC12YWx1ZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1bnVzZWRfMDAyZHZhcmlhYmxlLTMzOCI+PGNvZGU+V3VudXNlZC12YXJpYWJsZTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd1c2VsZXNzXzAwMmRjYXN0LTQyOSI+PGNvZGU+V3VzZWxlc3MtY2FzdDwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd2YXJhcmdzLTUxOCI+PGNvZGU+V3ZhcmFyZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdmFyaWFkaWNfMDAyZG1hY3Jvcy01MTYiPjxjb2RlPld2YXJpYWRpYy1tYWNyb3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdmVjdG9yXzAwMmRvcGVyYXRpb25fMDAyZHBlcmZvcm1hbmNlLTUyMCI+PGNvZGU+V3ZlY3Rvci1vcGVyYXRpb24tcGVyZm9ybWFuY2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdmlydHVhbF8wMDJkbW92ZV8wMDJkYXNzaWduLTUyMiI+PGNvZGU+V3ZpcnR1YWwtbW92ZS1hc3NpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1XdmxhLTUyNCI+PGNvZGU+V3ZsYTwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd2b2xhdGlsZV8wMDJkcmVnaXN0ZXJfMDAyZHZhci01MjYiPjxjb2RlPld2b2xhdGlsZS1yZWdpc3Rlci12YXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1Xd3JpdGVfMDAyZHN0cmluZ3MtNDE5Ij48Y29kZT5Xd3JpdGUtc3RyaW5nczwvY29kZT48L2E+OiA8YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPldhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LVd6ZXJvXzAwMmRhc18wMDJkbnVsbF8wMDJkcG9pbnRlcl8wMDJkY29uc3RhbnQtNDI3Ij48Y29kZT5XemVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iV2FybmluZy1PcHRpb25zLmh0bWwjV2FybmluZy1PcHRpb25zIj5XYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2luZGV4LXgtOTcyIj48Y29kZT54PC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPlByZXByb2Nlc3NvciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjaW5kZXgteC03NyI+PGNvZGU+eDwvY29kZT48L2E+OiA8YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk92ZXJhbGwgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFzc2VtYmxlci1PcHRpb25zLmh0bWwjaW5kZXgtWGFzc2VtYmxlci0xMDIyIj48Y29kZT5YYXNzZW1ibGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFzc2VtYmxlci1PcHRpb25zLmh0bWwjQXNzZW1ibGVyLU9wdGlvbnMiPkFzc2VtYmxlciBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVnhXb3Jrcy1PcHRpb25zLmh0bWwjaW5kZXgtWGJpbmRfMDAyZGxhenktMjMwMyI+PGNvZGU+WGJpbmQtbGF6eTwvY29kZT48L2E+OiA8YSBocmVmPSJWeFdvcmtzLU9wdGlvbnMuaHRtbCNWeFdvcmtzLU9wdGlvbnMiPlZ4V29ya3MgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZ4V29ya3MtT3B0aW9ucy5odG1sI2luZGV4LVhiaW5kXzAwMmRub3ctMjMwNCI+PGNvZGU+WGJpbmQtbm93PC9jb2RlPjwvYT46IDxhIGhyZWY9IlZ4V29ya3MtT3B0aW9ucy5odG1sI1Z4V29ya3MtT3B0aW9ucyI+VnhXb3JrcyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtWGxpbmtlci0xMDUxIj48Y29kZT5YbGlua2VyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNpbmRleC1YcHJlcHJvY2Vzc29yLTkzOSI+PGNvZGU+WHByZXByb2Nlc3NvcjwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj5QcmVwcm9jZXNzb3IgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5c3RlbS1WLU9wdGlvbnMuaHRtbCNpbmRleC1ZbS0yMjQ0Ij48Y29kZT5ZbTwvY29kZT48L2E+OiA8YSBocmVmPSJTeXN0ZW0tVi1PcHRpb25zLmh0bWwjU3lzdGVtLVYtT3B0aW9ucyI+U3lzdGVtIFYgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5c3RlbS1WLU9wdGlvbnMuaHRtbCNpbmRleC1ZUC0yMjQzIj48Y29kZT5ZUDwvY29kZT48L2E+OiA8YSBocmVmPSJTeXN0ZW0tVi1PcHRpb25zLmh0bWwjU3lzdGVtLVYtT3B0aW9ucyI+U3lzdGVtIFYgT3B0aW9uczwvYT48L2xpPgorIDwvdWw+IDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT3B0aW9uLVN1bW1hcnkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT3B0aW9uLVN1bW1hcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTIwNTdhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9PcHRpb24tU3VtbWFyeS5odG1sCkBAIC0wLDAgKzEsOTM2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PcHRpb24gU3VtbWFyeSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiIHRpdGxlPSJJbnZva2luZyBHQ0MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiIHRpdGxlPSJPdmVyYWxsIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3B0aW9uLVN1bW1hcnkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMSBPcHRpb24gU3VtbWFyeTwvaDM+CisKKzxwPkhlcmUgaXMgYSBzdW1tYXJ5IG9mIGFsbCB0aGUgb3B0aW9ucywgZ3JvdXBlZCBieSB0eXBlLiAgRXhwbGFuYXRpb25zIGFyZQoraW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworICAgICA8ZGw+Cis8ZHQ+PGVtPk92ZXJhbGwgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJPdmVyYWxsLU9wdGlvbnMuaHRtbCNPdmVyYWxsLU9wdGlvbnMiPk9wdGlvbnMgQ29udHJvbGxpbmcgdGhlIEtpbmQgb2YgT3V0cHV0PC9hPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWMgIC1TICAtRSAgLW8gPHZhcj5maWxlPC92YXI+ICAtbm8tY2Fub25pY2FsLXByZWZpeGVzICAKKyAgICAgICAgICAtcGlwZSAgLXBhc3MtZXhpdC1jb2RlcyAgCisgICAgICAgICAgLXggPHZhcj5sYW5ndWFnZTwvdmFyPiAgLXYgIC0jIyMgIC0taGVscDxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj49PHZhcj5jbGFzczwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj4sLi4uPHNwYW4gY2xhc3M9InJvbWFuIj5dXTwvc3Bhbj4gIC0tdGFyZ2V0LWhlbHAgIAorICAgICAgICAgIC0tdmVyc2lvbiAtd3JhcHBlciBAPHZhcj5maWxlPC92YXI+IC1mcGx1Z2luPTx2YXI+ZmlsZTwvdmFyPiAtZnBsdWdpbi1hcmctPHZhcj5uYW1lPC92YXI+PTx2YXI+YXJnPC92YXI+ICAKKyAgICAgICAgICAtZmR1bXAtYWRhLXNwZWM8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+LXNsaW08c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IC1mYWRhLXNwZWMtcGFyZW50PTx2YXI+YXJnPC92YXI+IC1mZHVtcC1nby1zcGVjPTx2YXI+ZmlsZTwvdmFyPgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPkMgTGFuZ3VhZ2UgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5PcHRpb25zIENvbnRyb2xsaW5nIEMgRGlhbGVjdDwvYT4uCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1hbnNpICAtc3RkPTx2YXI+c3RhbmRhcmQ8L3Zhcj4gIC1mZ251ODktaW5saW5lIAorICAgICAgICAgIC1hdXgtaW5mbyA8dmFyPmZpbGVuYW1lPC92YXI+IC1mYWxsb3ctcGFyYW1ldGVybGVzcy12YXJpYWRpYy1mdW5jdGlvbnMgCisgICAgICAgICAgLWZuby1hc20gIC1mbm8tYnVpbHRpbiAgLWZuby1idWlsdGluLTx2YXI+ZnVuY3Rpb248L3Zhcj4gCisgICAgICAgICAgLWZob3N0ZWQgIC1mZnJlZXN0YW5kaW5nIC1mb3Blbm1wIC1mbXMtZXh0ZW5zaW9ucyAtZnBsYW45LWV4dGVuc2lvbnMgCisgICAgICAgICAgLXRyaWdyYXBocyAgLXRyYWRpdGlvbmFsICAtdHJhZGl0aW9uYWwtY3BwIAorICAgICAgICAgIC1mYWxsb3ctc2luZ2xlLXByZWNpc2lvbiAgLWZjb25kLW1pc21hdGNoIC1mbGF4LXZlY3Rvci1jb252ZXJzaW9ucyAKKyAgICAgICAgICAtZnNpZ25lZC1iaXRmaWVsZHMgIC1mc2lnbmVkLWNoYXIgCisgICAgICAgICAgLWZ1bnNpZ25lZC1iaXRmaWVsZHMgIC1mdW5zaWduZWQtY2hhcgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPkMrKyBMYW5ndWFnZSBPcHRpb25zPC9lbT48ZGQ+U2VlIDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+T3B0aW9ucyBDb250cm9sbGluZyBDKysgRGlhbGVjdDwvYT4uCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1mYWJpLXZlcnNpb249PHZhcj5uPC92YXI+ICAtZm5vLWFjY2Vzcy1jb250cm9sICAtZmNoZWNrLW5ldyAKKyAgICAgICAgICAtZmNvbnN0ZXhwci1kZXB0aD08dmFyPm48L3Zhcj4gIC1mZnJpZW5kLWluamVjdGlvbiAKKyAgICAgICAgICAtZm5vLWVsaWRlLWNvbnN0cnVjdG9ycyAKKyAgICAgICAgICAtZm5vLWVuZm9yY2UtZWgtc3BlY3MgCisgICAgICAgICAgLWZmb3Itc2NvcGUgIC1mbm8tZm9yLXNjb3BlICAtZm5vLWdudS1rZXl3b3JkcyAKKyAgICAgICAgICAtZm5vLWltcGxpY2l0LXRlbXBsYXRlcyAKKyAgICAgICAgICAtZm5vLWltcGxpY2l0LWlubGluZS10ZW1wbGF0ZXMgCisgICAgICAgICAgLWZuby1pbXBsZW1lbnQtaW5saW5lcyAgLWZtcy1leHRlbnNpb25zIAorICAgICAgICAgIC1mbm8tbm9uYW5zaS1idWlsdGlucyAgLWZub3Rocm93LW9wdCAgLWZuby1vcGVyYXRvci1uYW1lcyAKKyAgICAgICAgICAtZm5vLW9wdGlvbmFsLWRpYWdzICAtZnBlcm1pc3NpdmUgCisgICAgICAgICAgLWZuby1wcmV0dHktdGVtcGxhdGVzIAorICAgICAgICAgIC1mcmVwbyAgLWZuby1ydHRpICAtZnN0YXRzICAtZnRlbXBsYXRlLWJhY2t0cmFjZS1saW1pdD08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLWZ0ZW1wbGF0ZS1kZXB0aD08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLWZuby10aHJlYWRzYWZlLXN0YXRpY3MgLWZ1c2UtY3hhLWF0ZXhpdCAgLWZuby13ZWFrICAtbm9zdGRpbmMrKyAKKyAgICAgICAgICAtZm5vLWRlZmF1bHQtaW5saW5lICAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gCisgICAgICAgICAgLWZ2aXNpYmlsaXR5LW1zLWNvbXBhdCAKKyAgICAgICAgICAtZmV4dC1udW1lcmljLWxpdGVyYWxzIAorICAgICAgICAgIC1XYWJpICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSAKKyAgICAgICAgICAtV2RlbGV0ZS1ub24tdmlydHVhbC1kdG9yIC1XbGl0ZXJhbC1zdWZmaXggLVduYXJyb3dpbmcgCisgICAgICAgICAgLVdub2V4Y2VwdCAtV25vbi12aXJ0dWFsLWR0b3IgIC1XcmVvcmRlciAKKyAgICAgICAgICAtV2VmZmMrKyAgLVdzdHJpY3QtbnVsbC1zZW50aW5lbCAKKyAgICAgICAgICAtV25vLW5vbi10ZW1wbGF0ZS1mcmllbmQgIC1Xb2xkLXN0eWxlLWNhc3QgCisgICAgICAgICAgLVdvdmVybG9hZGVkLXZpcnR1YWwgIC1Xbm8tcG1mLWNvbnZlcnNpb25zIAorICAgICAgICAgIC1Xc2lnbi1wcm9tbworPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIExhbmd1YWdlIE9wdGlvbnM8L2VtPjxkZD5TZWUgPGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPk9wdGlvbnMgQ29udHJvbGxpbmcgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHM8L2E+LgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtZmNvbnN0YW50LXN0cmluZy1jbGFzcz08dmFyPmNsYXNzLW5hbWU8L3Zhcj4gCisgICAgICAgICAgLWZnbnUtcnVudGltZSAgLWZuZXh0LXJ1bnRpbWUgCisgICAgICAgICAgLWZuby1uaWwtcmVjZWl2ZXJzIAorICAgICAgICAgIC1mb2JqYy1hYmktdmVyc2lvbj08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLWZvYmpjLWNhbGwtY3h4LWNkdG9ycyAKKyAgICAgICAgICAtZm9iamMtZGlyZWN0LWRpc3BhdGNoIAorICAgICAgICAgIC1mb2JqYy1leGNlcHRpb25zIAorICAgICAgICAgIC1mb2JqYy1nYyAKKyAgICAgICAgICAtZm9iamMtbmlsY2hlY2sgCisgICAgICAgICAgLWZvYmpjLXN0ZD1vYmpjMSAKKyAgICAgICAgICAtZnJlcGxhY2Utb2JqYy1jbGFzc2VzIAorICAgICAgICAgIC1memVyby1saW5rIAorICAgICAgICAgIC1nZW4tZGVjbHMgCisgICAgICAgICAgLVdhc3NpZ24taW50ZXJjZXB0IAorICAgICAgICAgIC1Xbm8tcHJvdG9jb2wgIC1Xc2VsZWN0b3IgCisgICAgICAgICAgLVdzdHJpY3Qtc2VsZWN0b3ItbWF0Y2ggCisgICAgICAgICAgLVd1bmRlY2xhcmVkLXNlbGVjdG9yCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+TGFuZ3VhZ2UgSW5kZXBlbmRlbnQgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zLmh0bWwjTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucyI+T3B0aW9ucyB0byBDb250cm9sIERpYWdub3N0aWMgTWVzc2FnZXMgRm9ybWF0dGluZzwvYT4uCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1mbWVzc2FnZS1sZW5ndGg9PHZhcj5uPC92YXI+ICAKKyAgICAgICAgICAtZmRpYWdub3N0aWNzLXNob3ctbG9jYXRpb249PHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPm9uY2U8c3BhbiBjbGFzcz0icm9tYW4iPnw8L3NwYW4+ZXZlcnktbGluZTxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gIAorICAgICAgICAgIC1mbm8tZGlhZ25vc3RpY3Mtc2hvdy1vcHRpb24gLWZuby1kaWFnbm9zdGljcy1zaG93LWNhcmV0Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+V2FybmluZyBPcHRpb25zPC9lbT48ZGQ+U2VlIDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+T3B0aW9ucyB0byBSZXF1ZXN0IG9yIFN1cHByZXNzIFdhcm5pbmdzPC9hPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWZzeW50YXgtb25seSAgLWZtYXgtZXJyb3JzPTx2YXI+bjwvdmFyPiAgLVdwZWRhbnRpYyAKKyAgICAgICAgICAtcGVkYW50aWMtZXJyb3JzIAorICAgICAgICAgIC13ICAtV2V4dHJhICAtV2FsbCAgLVdhZGRyZXNzICAtV2FnZ3JlZ2F0ZS1yZXR1cm4gIAorICAgICAgICAgIC1XYWdncmVzc2l2ZS1sb29wLW9wdGltaXphdGlvbnMgLVdhcnJheS1ib3VuZHMgCisgICAgICAgICAgLVduby1hdHRyaWJ1dGVzIC1Xbm8tYnVpbHRpbi1tYWNyby1yZWRlZmluZWQgCisgICAgICAgICAgLVdjKystY29tcGF0IC1XYysrMTEtY29tcGF0IC1XY2FzdC1hbGlnbiAgLVdjYXN0LXF1YWwgIAorICAgICAgICAgIC1XY2hhci1zdWJzY3JpcHRzIC1XY2xvYmJlcmVkICAtV2NvbW1lbnQgCisgICAgICAgICAgLVdjb252ZXJzaW9uICAtV2NvdmVyYWdlLW1pc21hdGNoICAtV25vLWNwcCAgLVduby1kZXByZWNhdGVkICAKKyAgICAgICAgICAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uICAKKyAgICAgICAgICAtV25vLWRpdi1ieS16ZXJvIC1XZG91YmxlLXByb21vdGlvbiAtV2VtcHR5LWJvZHkgIC1XZW51bS1jb21wYXJlIAorICAgICAgICAgIC1Xbm8tZW5kaWYtbGFiZWxzIC1XZXJyb3IgIC1XZXJyb3I9KiAKKyAgICAgICAgICAtV2ZhdGFsLWVycm9ycyAgLVdmbG9hdC1lcXVhbCAgLVdmb3JtYXQgIC1XZm9ybWF0PTIgCisgICAgICAgICAgLVduby1mb3JtYXQtY29udGFpbnMtbnVsIC1Xbm8tZm9ybWF0LWV4dHJhLWFyZ3MgLVdmb3JtYXQtbm9ubGl0ZXJhbCAKKyAgICAgICAgICAtV2Zvcm1hdC1zZWN1cml0eSAgLVdmb3JtYXQteTJrIAorICAgICAgICAgIC1XZnJhbWUtbGFyZ2VyLXRoYW49PHZhcj5sZW48L3Zhcj4gLVduby1mcmVlLW5vbmhlYXAtb2JqZWN0IC1XanVtcC1taXNzZXMtaW5pdCAKKyAgICAgICAgICAtV2lnbm9yZWQtcXVhbGlmaWVycyAKKyAgICAgICAgICAtV2ltcGxpY2l0ICAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uICAtV2ltcGxpY2l0LWludCAKKyAgICAgICAgICAtV2luaXQtc2VsZiAgLVdpbmxpbmUgLVdtYXliZS11bmluaXRpYWxpemVkIAorICAgICAgICAgIC1Xbm8taW50LXRvLXBvaW50ZXItY2FzdCAtV25vLWludmFsaWQtb2Zmc2V0b2YgCisgICAgICAgICAgLVdpbnZhbGlkLXBjaCAtV2xhcmdlci10aGFuPTx2YXI+bGVuPC92YXI+ICAtV3Vuc2FmZS1sb29wLW9wdGltaXphdGlvbnMgCisgICAgICAgICAgLVdsb2dpY2FsLW9wIC1XbG9uZy1sb25nIAorICAgICAgICAgIC1XbWFpbiAtV21heWJlLXVuaW5pdGlhbGl6ZWQgLVdtaXNzaW5nLWJyYWNlcyAgLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAKKyAgICAgICAgICAtV21pc3NpbmctaW5jbHVkZS1kaXJzIAorICAgICAgICAgIC1Xbm8tbXVkZmxhcCAKKyAgICAgICAgICAtV25vLW11bHRpY2hhciAgLVdub25udWxsICAtV25vLW92ZXJmbG93IAorICAgICAgICAgIC1Xb3Zlcmxlbmd0aC1zdHJpbmdzICAtV3BhY2tlZCAgLVdwYWNrZWQtYml0ZmllbGQtY29tcGF0ICAtV3BhZGRlZCAKKyAgICAgICAgICAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCAKKyAgICAgICAgICAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCAKKyAgICAgICAgICAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciAKKyAgICAgICAgICAtV3JldHVybi10eXBlICAtV3NlcXVlbmNlLXBvaW50ICAtV3NoYWRvdyAKKyAgICAgICAgICAtV3NpZ24tY29tcGFyZSAgLVdzaWduLWNvbnZlcnNpb24gIC1Xc2l6ZW9mLXBvaW50ZXItbWVtYWNjZXNzIAorICAgICAgICAgIC1Xc3RhY2stcHJvdGVjdG9yIC1Xc3RhY2stdXNhZ2U9PHZhcj5sZW48L3Zhcj4gLVdzdHJpY3QtYWxpYXNpbmcgCisgICAgICAgICAgLVdzdHJpY3QtYWxpYXNpbmc9biAgLVdzdHJpY3Qtb3ZlcmZsb3cgLVdzdHJpY3Qtb3ZlcmZsb3c9PHZhcj5uPC92YXI+IAorICAgICAgICAgIC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9PHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPnB1cmU8c3BhbiBjbGFzcz0icm9tYW4iPnw8L3NwYW4+Y29uc3Q8c3BhbiBjbGFzcz0icm9tYW4iPnw8L3NwYW4+bm9yZXR1cm48c3BhbiBjbGFzcz0icm9tYW4iPnw8L3NwYW4+Zm9ybWF0PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiAKKyAgICAgICAgICAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAKKyAgICAgICAgICAtV3N3aXRjaCAgLVdzd2l0Y2gtZGVmYXVsdCAgLVdzd2l0Y2gtZW51bSAtV3N5bmMtbmFuZCAKKyAgICAgICAgICAtV3N5c3RlbS1oZWFkZXJzICAtV3RyYW1wb2xpbmVzICAtV3RyaWdyYXBocyAgLVd0eXBlLWxpbWl0cyAgLVd1bmRlZiAKKyAgICAgICAgICAtV3VuaW5pdGlhbGl6ZWQgIC1XdW5rbm93bi1wcmFnbWFzICAtV25vLXByYWdtYXMgCisgICAgICAgICAgLVd1bnN1ZmZpeGVkLWZsb2F0LWNvbnN0YW50cyAgLVd1bnVzZWQgIC1XdW51c2VkLWZ1bmN0aW9uIAorICAgICAgICAgIC1XdW51c2VkLWxhYmVsICAtV3VudXNlZC1sb2NhbC10eXBlZGVmcyAtV3VudXNlZC1wYXJhbWV0ZXIgCisgICAgICAgICAgLVduby11bnVzZWQtcmVzdWx0IC1XdW51c2VkLXZhbHVlICAtV3VudXNlZC12YXJpYWJsZSAKKyAgICAgICAgICAtV3VudXNlZC1idXQtc2V0LXBhcmFtZXRlciAtV3VudXNlZC1idXQtc2V0LXZhcmlhYmxlIAorICAgICAgICAgIC1XdXNlbGVzcy1jYXN0IC1XdmFyaWFkaWMtbWFjcm9zIC1XdmVjdG9yLW9wZXJhdGlvbi1wZXJmb3JtYW5jZSAKKyAgICAgICAgICAtV3ZsYSAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciAgLVd3cml0ZS1zdHJpbmdzIC1XemVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5DIGFuZCBPYmplY3RpdmUtQy1vbmx5IFdhcm5pbmcgT3B0aW9uczwvZW0+PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtV2JhZC1mdW5jdGlvbi1jYXN0ICAtV21pc3NpbmctZGVjbGFyYXRpb25zIAorICAgICAgICAgIC1XbWlzc2luZy1wYXJhbWV0ZXItdHlwZSAgLVdtaXNzaW5nLXByb3RvdHlwZXMgIC1XbmVzdGVkLWV4dGVybnMgCisgICAgICAgICAgLVdvbGQtc3R5bGUtZGVjbGFyYXRpb24gIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gCisgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAgLVd0cmFkaXRpb25hbCAgLVd0cmFkaXRpb25hbC1jb252ZXJzaW9uIAorICAgICAgICAgIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IC1XcG9pbnRlci1zaWduCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+RGVidWdnaW5nIE9wdGlvbnM8L2VtPjxkZD5TZWUgPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+T3B0aW9ucyBmb3IgRGVidWdnaW5nIFlvdXIgUHJvZ3JhbSBvciBHQ0M8L2E+LgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtZDx2YXI+bGV0dGVyczwvdmFyPiAgLWR1bXBzcGVjcyAgLWR1bXBtYWNoaW5lICAtZHVtcHZlcnNpb24gCisgICAgICAgICAgLWZzYW5pdGl6ZT08dmFyPnN0eWxlPC92YXI+IAorICAgICAgICAgIC1mZGJnLWNudC1saXN0IC1mZGJnLWNudD08dmFyPmNvdW50ZXItdmFsdWUtbGlzdDwvdmFyPiAKKyAgICAgICAgICAtZmRpc2FibGUtaXBhLTx2YXI+cGFzc19uYW1lPC92YXI+IAorICAgICAgICAgIC1mZGlzYWJsZS1ydGwtPHZhcj5wYXNzX25hbWU8L3Zhcj4gCisgICAgICAgICAgLWZkaXNhYmxlLXJ0bC08dmFyPnBhc3MtbmFtZTwvdmFyPj08dmFyPnJhbmdlLWxpc3Q8L3Zhcj4gCisgICAgICAgICAgLWZkaXNhYmxlLXRyZWUtPHZhcj5wYXNzX25hbWU8L3Zhcj4gCisgICAgICAgICAgLWZkaXNhYmxlLXRyZWUtPHZhcj5wYXNzLW5hbWU8L3Zhcj49PHZhcj5yYW5nZS1saXN0PC92YXI+IAorICAgICAgICAgIC1mZHVtcC1ub2FkZHIgLWZkdW1wLXVubnVtYmVyZWQgLWZkdW1wLXVubnVtYmVyZWQtbGlua3MgCisgICAgICAgICAgLWZkdW1wLXRyYW5zbGF0aW9uLXVuaXQ8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+LTx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gCisgICAgICAgICAgLWZkdW1wLWNsYXNzLWhpZXJhcmNoeTxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj4tPHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiAKKyAgICAgICAgICAtZmR1bXAtaXBhLWFsbCAtZmR1bXAtaXBhLWNncmFwaCAtZmR1bXAtaXBhLWlubGluZSAKKyAgICAgICAgICAtZmR1bXAtcGFzc2VzIAorICAgICAgICAgIC1mZHVtcC1zdGF0aXN0aWNzIAorICAgICAgICAgIC1mZHVtcC10cmVlLWFsbCAKKyAgICAgICAgICAtZmR1bXAtdHJlZS1vcmlnaW5hbDxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj4tPHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiAgCisgICAgICAgICAgLWZkdW1wLXRyZWUtb3B0aW1pemVkPHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPi08dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IAorICAgICAgICAgIC1mZHVtcC10cmVlLWNmZyAtZmR1bXAtdHJlZS1hbGlhcyAKKyAgICAgICAgICAtZmR1bXAtdHJlZS1jaCAKKyAgICAgICAgICAtZmR1bXAtdHJlZS1zc2E8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+LTx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gLWZkdW1wLXRyZWUtcHJlPHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPi08dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IAorICAgICAgICAgIC1mZHVtcC10cmVlLWNjcDxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj4tPHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiAtZmR1bXAtdHJlZS1kY2U8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+LTx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gCisgICAgICAgICAgLWZkdW1wLXRyZWUtZ2ltcGxlPHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPi1yYXc8c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IC1mZHVtcC10cmVlLW11ZGZsYXA8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+LTx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gCisgICAgICAgICAgLWZkdW1wLXRyZWUtZG9tPHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPi08dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IAorICAgICAgICAgIC1mZHVtcC10cmVlLWRzZTxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj4tPHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiAKKyAgICAgICAgICAtZmR1bXAtdHJlZS1waGlwcm9wPHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPi08dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IAorICAgICAgICAgIC1mZHVtcC10cmVlLXBoaW9wdDxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj4tPHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiAKKyAgICAgICAgICAtZmR1bXAtdHJlZS1mb3J3cHJvcDxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj4tPHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiAKKyAgICAgICAgICAtZmR1bXAtdHJlZS1jb3B5cmVuYW1lPHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPi08dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IAorICAgICAgICAgIC1mZHVtcC10cmVlLW5ydiAtZmR1bXAtdHJlZS12ZWN0IAorICAgICAgICAgIC1mZHVtcC10cmVlLXNpbmsgCisgICAgICAgICAgLWZkdW1wLXRyZWUtc3JhPHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPi08dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IAorICAgICAgICAgIC1mZHVtcC10cmVlLWZvcndwcm9wPHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPi08dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IAorICAgICAgICAgIC1mZHVtcC10cmVlLWZyZTxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj4tPHZhcj5uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPiAKKyAgICAgICAgICAtZmR1bXAtdHJlZS12cnA8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+LTx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gCisgICAgICAgICAgLWZ0cmVlLXZlY3Rvcml6ZXItdmVyYm9zZT08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLWZkdW1wLXRyZWUtc3RvcmVjY3A8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+LTx2YXI+bjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gCisgICAgICAgICAgLWZkdW1wLWZpbmFsLWluc25zPTx2YXI+ZmlsZTwvdmFyPiAKKyAgICAgICAgICAtZmNvbXBhcmUtZGVidWc8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PTx2YXI+b3B0czwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gIC1mY29tcGFyZS1kZWJ1Zy1zZWNvbmQgCisgICAgICAgICAgLWZlbGltaW5hdGUtZHdhcmYyLWR1cHMgLWZuby1lbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIAorICAgICAgICAgIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy1zeW1ib2xzIC1mZW1pdC1jbGFzcy1kZWJ1Zy1hbHdheXMgCisgICAgICAgICAgLWZlbmFibGUtPHZhcj5raW5kPC92YXI+LTx2YXI+cGFzczwvdmFyPiAKKyAgICAgICAgICAtZmVuYWJsZS08dmFyPmtpbmQ8L3Zhcj4tPHZhcj5wYXNzPC92YXI+PTx2YXI+cmFuZ2UtbGlzdDwvdmFyPiAKKyAgICAgICAgICAtZmRlYnVnLXR5cGVzLXNlY3Rpb24gLWZtZW0tcmVwb3J0LXdwYSAKKyAgICAgICAgICAtZm1lbS1yZXBvcnQgLWZwcmUtaXBhLW1lbS1yZXBvcnQgLWZwb3N0LWlwYS1tZW0tcmVwb3J0IC1mcHJvZmlsZS1hcmNzIAorICAgICAgICAgIC1mb3B0LWluZm8gCisgICAgICAgICAgLWZvcHQtaW5mby08dmFyPm9wdGlvbnM8L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PTx2YXI+ZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gCisgICAgICAgICAgLWZyYW5kb20tc2VlZD08dmFyPnN0cmluZzwvdmFyPiAtZnNjaGVkLXZlcmJvc2U9PHZhcj5uPC92YXI+IAorICAgICAgICAgIC1mc2VsLXNjaGVkLXZlcmJvc2UgLWZzZWwtc2NoZWQtZHVtcC1jZmcgLWZzZWwtc2NoZWQtcGlwZWxpbmluZy12ZXJib3NlIAorICAgICAgICAgIC1mc3RhY2stdXNhZ2UgIC1mdGVzdC1jb3ZlcmFnZSAgLWZ0aW1lLXJlcG9ydCAtZnZhci10cmFja2luZyAKKyAgICAgICAgICAtZnZhci10cmFja2luZy1hc3NpZ25tZW50cyAgLWZ2YXItdHJhY2tpbmctYXNzaWdubWVudHMtdG9nZ2xlIAorICAgICAgICAgIC1nICAtZzx2YXI+bGV2ZWw8L3Zhcj4gIC1ndG9nZ2xlICAtZ2NvZmYgIC1nZHdhcmYtPHZhcj52ZXJzaW9uPC92YXI+IAorICAgICAgICAgIC1nZ2RiICAtZ3JlY29yZC1nY2Mtc3dpdGNoZXMgIC1nbm8tcmVjb3JkLWdjYy1zd2l0Y2hlcyAKKyAgICAgICAgICAtZ3N0YWJzICAtZ3N0YWJzKyAgLWdzdHJpY3QtZHdhcmYgIC1nbm8tc3RyaWN0LWR3YXJmIAorICAgICAgICAgIC1ndm1zICAtZ3hjb2ZmICAtZ3hjb2ZmKyAKKyAgICAgICAgICAtZm5vLW1lcmdlLWRlYnVnLXN0cmluZ3MgLWZuby1kd2FyZjItY2ZpLWFzbSAKKyAgICAgICAgICAtZmRlYnVnLXByZWZpeC1tYXA9PHZhcj5vbGQ8L3Zhcj49PHZhcj5uZXc8L3Zhcj4gCisgICAgICAgICAgLWZlbWl0LXN0cnVjdC1kZWJ1Zy1iYXNlb25seSAtZmVtaXQtc3RydWN0LWRlYnVnLXJlZHVjZWQgCisgICAgICAgICAgLWZlbWl0LXN0cnVjdC1kZWJ1Zy1kZXRhaWxlZDxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj49PHZhcj5zcGVjLWxpc3Q8L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+IAorICAgICAgICAgIC1wICAtcGcgIC1wcmludC1maWxlLW5hbWU9PHZhcj5saWJyYXJ5PC92YXI+ICAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZSAKKyAgICAgICAgICAtcHJpbnQtbXVsdGktZGlyZWN0b3J5ICAtcHJpbnQtbXVsdGktbGliICAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IAorICAgICAgICAgIC1wcmludC1wcm9nLW5hbWU9PHZhcj5wcm9ncmFtPC92YXI+ICAtcHJpbnQtc2VhcmNoLWRpcnMgIC1RIAorICAgICAgICAgIC1wcmludC1zeXNyb290IC1wcmludC1zeXNyb290LWhlYWRlcnMtc3VmZml4IAorICAgICAgICAgIC1zYXZlLXRlbXBzIC1zYXZlLXRlbXBzPWN3ZCAtc2F2ZS10ZW1wcz1vYmogLXRpbWU8c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PTx2YXI+ZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5PcHRpbWl6YXRpb24gT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW9ucyB0aGF0IENvbnRyb2wgT3B0aW1pemF0aW9uPC9hPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWZhZ2dyZXNzaXZlLWxvb3Atb3B0aW1pemF0aW9ucyAtZmFsaWduLWZ1bmN0aW9uc1s9PHZhcj5uPC92YXI+XSAKKyAgICAgICAgICAtZmFsaWduLWp1bXBzWz08dmFyPm48L3Zhcj5dIAorICAgICAgICAgIC1mYWxpZ24tbGFiZWxzWz08dmFyPm48L3Zhcj5dIC1mYWxpZ24tbG9vcHNbPTx2YXI+bjwvdmFyPl0gCisgICAgICAgICAgLWZhc3NvY2lhdGl2ZS1tYXRoIC1mYXV0by1pbmMtZGVjIC1mYnJhbmNoLXByb2JhYmlsaXRpZXMgCisgICAgICAgICAgLWZicmFuY2gtdGFyZ2V0LWxvYWQtb3B0aW1pemUgLWZicmFuY2gtdGFyZ2V0LWxvYWQtb3B0aW1pemUyIAorICAgICAgICAgIC1mYnRyLWJiLWV4Y2x1c2l2ZSAtZmNhbGxlci1zYXZlcyAKKyAgICAgICAgICAtZmNoZWNrLWRhdGEtZGVwcyAtZmNvbWJpbmUtc3RhY2stYWRqdXN0bWVudHMgLWZjb25zZXJ2ZS1zdGFjayAKKyAgICAgICAgICAtZmNvbXBhcmUtZWxpbSAtZmNwcm9wLXJlZ2lzdGVycyAtZmNyb3NzanVtcGluZyAKKyAgICAgICAgICAtZmNzZS1mb2xsb3ctanVtcHMgLWZjc2Utc2tpcC1ibG9ja3MgLWZjeC1mb3J0cmFuLXJ1bGVzIAorICAgICAgICAgIC1mY3gtbGltaXRlZC1yYW5nZSAKKyAgICAgICAgICAtZmRhdGEtc2VjdGlvbnMgLWZkY2UgLWZkZWxheWVkLWJyYW5jaCAKKyAgICAgICAgICAtZmRlbGV0ZS1udWxsLXBvaW50ZXItY2hlY2tzIC1mZGV2aXJ0dWFsaXplIC1mZHNlIAorICAgICAgICAgIC1mZWFybHktaW5saW5pbmcgLWZpcGEtc3JhIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZmYXQtbHRvLW9iamVjdHMgCisgICAgICAgICAgLWZmYXN0LW1hdGggLWZmaW5pdGUtbWF0aC1vbmx5IC1mZmxvYXQtc3RvcmUgLWZleGNlc3MtcHJlY2lzaW9uPTx2YXI+c3R5bGU8L3Zhcj4gCisgICAgICAgICAgLWZmb3J3YXJkLXByb3BhZ2F0ZSAtZmZwLWNvbnRyYWN0PTx2YXI+c3R5bGU8L3Zhcj4gLWZmdW5jdGlvbi1zZWN0aW9ucyAKKyAgICAgICAgICAtZmdjc2UgLWZnY3NlLWFmdGVyLXJlbG9hZCAtZmdjc2UtbGFzIC1mZ2NzZS1sbSAtZmdyYXBoaXRlLWlkZW50aXR5IAorICAgICAgICAgIC1mZ2NzZS1zbSAtZmhvaXN0LWFkamFjZW50LWxvYWRzIC1maWYtY29udmVyc2lvbiAKKyAgICAgICAgICAtZmlmLWNvbnZlcnNpb24yIC1maW5kaXJlY3QtaW5saW5pbmcgCisgICAgICAgICAgLWZpbmxpbmUtZnVuY3Rpb25zIC1maW5saW5lLWZ1bmN0aW9ucy1jYWxsZWQtb25jZSAtZmlubGluZS1saW1pdD08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLWZpbmxpbmUtc21hbGwtZnVuY3Rpb25zIC1maXBhLWNwIC1maXBhLWNwLWNsb25lIAorICAgICAgICAgIC1maXBhLXB0YSAtZmlwYS1wcm9maWxlIC1maXBhLXB1cmUtY29uc3QgLWZpcGEtcmVmZXJlbmNlIAorICAgICAgICAgIC1maXJhLWFsZ29yaXRobT08dmFyPmFsZ29yaXRobTwvdmFyPiAKKyAgICAgICAgICAtZmlyYS1yZWdpb249PHZhcj5yZWdpb248L3Zhcj4gLWZpcmEtaG9pc3QtcHJlc3N1cmUgCisgICAgICAgICAgLWZpcmEtbG9vcC1wcmVzc3VyZSAtZm5vLWlyYS1zaGFyZS1zYXZlLXNsb3RzIAorICAgICAgICAgIC1mbm8taXJhLXNoYXJlLXNwaWxsLXNsb3RzIC1maXJhLXZlcmJvc2U9PHZhcj5uPC92YXI+IAorICAgICAgICAgIC1maXZvcHRzIC1ma2VlcC1pbmxpbmUtZnVuY3Rpb25zIC1ma2VlcC1zdGF0aWMtY29uc3RzIAorICAgICAgICAgIC1mbG9vcC1ibG9jayAtZmxvb3AtaW50ZXJjaGFuZ2UgLWZsb29wLXN0cmlwLW1pbmUgLWZsb29wLW5lc3Qtb3B0aW1pemUgCisgICAgICAgICAgLWZsb29wLXBhcmFsbGVsaXplLWFsbCAtZmx0byAtZmx0by1jb21wcmVzc2lvbi1sZXZlbCAKKyAgICAgICAgICAtZmx0by1wYXJ0aXRpb249PHZhcj5hbGc8L3Zhcj4gLWZsdG8tcmVwb3J0IC1mbWVyZ2UtYWxsLWNvbnN0YW50cyAKKyAgICAgICAgICAtZm1lcmdlLWNvbnN0YW50cyAtZm1vZHVsby1zY2hlZCAtZm1vZHVsby1zY2hlZC1hbGxvdy1yZWdtb3ZlcyAKKyAgICAgICAgICAtZm1vdmUtbG9vcC1pbnZhcmlhbnRzIGZtdWRmbGFwIC1mbXVkZmxhcGlyIC1mbXVkZmxhcHRoIC1mbm8tYnJhbmNoLWNvdW50LXJlZyAKKyAgICAgICAgICAtZm5vLWRlZmF1bHQtaW5saW5lIAorICAgICAgICAgIC1mbm8tZGVmZXItcG9wIC1mbm8tZnVuY3Rpb24tY3NlIC1mbm8tZ3Vlc3MtYnJhbmNoLXByb2JhYmlsaXR5IAorICAgICAgICAgIC1mbm8taW5saW5lIC1mbm8tbWF0aC1lcnJubyAtZm5vLXBlZXBob2xlIC1mbm8tcGVlcGhvbGUyIAorICAgICAgICAgIC1mbm8tc2NoZWQtaW50ZXJibG9jayAtZm5vLXNjaGVkLXNwZWMgLWZuby1zaWduZWQtemVyb3MgCisgICAgICAgICAgLWZuby10b3BsZXZlbC1yZW9yZGVyIC1mbm8tdHJhcHBpbmctbWF0aCAtZm5vLXplcm8taW5pdGlhbGl6ZWQtaW4tYnNzIAorICAgICAgICAgIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mb3B0aW1pemUtcmVnaXN0ZXItbW92ZSAtZm9wdGltaXplLXNpYmxpbmctY2FsbHMgCisgICAgICAgICAgLWZwYXJ0aWFsLWlubGluaW5nIC1mcGVlbC1sb29wcyAtZnByZWRpY3RpdmUtY29tbW9uaW5nIAorICAgICAgICAgIC1mcHJlZmV0Y2gtbG9vcC1hcnJheXMgLWZwcm9maWxlLXJlcG9ydCAKKyAgICAgICAgICAtZnByb2ZpbGUtY29ycmVjdGlvbiAtZnByb2ZpbGUtZGlyPTx2YXI+cGF0aDwvdmFyPiAtZnByb2ZpbGUtZ2VuZXJhdGUgCisgICAgICAgICAgLWZwcm9maWxlLWdlbmVyYXRlPTx2YXI+cGF0aDwvdmFyPiAKKyAgICAgICAgICAtZnByb2ZpbGUtdXNlIC1mcHJvZmlsZS11c2U9PHZhcj5wYXRoPC92YXI+IC1mcHJvZmlsZS12YWx1ZXMgCisgICAgICAgICAgLWZyZWNpcHJvY2FsLW1hdGggLWZyZWUgLWZyZWdtb3ZlIC1mcmVuYW1lLXJlZ2lzdGVycyAtZnJlb3JkZXItYmxvY2tzIAorICAgICAgICAgIC1mcmVvcmRlci1ibG9ja3MtYW5kLXBhcnRpdGlvbiAtZnJlb3JkZXItZnVuY3Rpb25zIAorICAgICAgICAgIC1mcmVydW4tY3NlLWFmdGVyLWxvb3AgLWZyZXNjaGVkdWxlLW1vZHVsby1zY2hlZHVsZWQtbG9vcHMgCisgICAgICAgICAgLWZyb3VuZGluZy1tYXRoIC1mc2NoZWQyLXVzZS1zdXBlcmJsb2NrcyAtZnNjaGVkLXByZXNzdXJlIAorICAgICAgICAgIC1mc2NoZWQtc3BlYy1sb2FkIC1mc2NoZWQtc3BlYy1sb2FkLWRhbmdlcm91cyAKKyAgICAgICAgICAtZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwWz08dmFyPm48L3Zhcj5dIC1mc2NoZWQtc3RhbGxlZC1pbnNuc1s9PHZhcj5uPC92YXI+XSAKKyAgICAgICAgICAtZnNjaGVkLWdyb3VwLWhldXJpc3RpYyAtZnNjaGVkLWNyaXRpY2FsLXBhdGgtaGV1cmlzdGljIAorICAgICAgICAgIC1mc2NoZWQtc3BlYy1pbnNuLWhldXJpc3RpYyAtZnNjaGVkLXJhbmstaGV1cmlzdGljIAorICAgICAgICAgIC1mc2NoZWQtbGFzdC1pbnNuLWhldXJpc3RpYyAtZnNjaGVkLWRlcC1jb3VudC1oZXVyaXN0aWMgCisgICAgICAgICAgLWZzY2hlZHVsZS1pbnNucyAtZnNjaGVkdWxlLWluc25zMiAtZnNlY3Rpb24tYW5jaG9ycyAKKyAgICAgICAgICAtZnNlbGVjdGl2ZS1zY2hlZHVsaW5nIC1mc2VsZWN0aXZlLXNjaGVkdWxpbmcyIAorICAgICAgICAgIC1mc2VsLXNjaGVkLXBpcGVsaW5pbmcgLWZzZWwtc2NoZWQtcGlwZWxpbmluZy1vdXRlci1sb29wcyAKKyAgICAgICAgICAtZnNocmluay13cmFwIC1mc2lnbmFsaW5nLW5hbnMgLWZzaW5nbGUtcHJlY2lzaW9uLWNvbnN0YW50IAorICAgICAgICAgIC1mc3BsaXQtaXZzLWluLXVucm9sbGVyIC1mc3BsaXQtd2lkZS10eXBlcyAtZnN0YWNrLXByb3RlY3RvciAKKyAgICAgICAgICAtZnN0YWNrLXByb3RlY3Rvci1hbGwgLWZzdHJpY3QtYWxpYXNpbmcgLWZzdHJpY3Qtb3ZlcmZsb3cgCisgICAgICAgICAgLWZ0aHJlYWQtanVtcHMgLWZ0cmFjZXIgLWZ0cmVlLWJpdC1jY3AgCisgICAgICAgICAgLWZ0cmVlLWJ1aWx0aW4tY2FsbC1kY2UgLWZ0cmVlLWNjcCAtZnRyZWUtY2ggCisgICAgICAgICAgLWZ0cmVlLWNvYWxlc2NlLWlubGluZS12YXJzIC1mdHJlZS1jb2FsZXNjZS12YXJzIC1mdHJlZS1jb3B5LXByb3AgCisgICAgICAgICAgLWZ0cmVlLWNvcHlyZW5hbWUgLWZ0cmVlLWRjZSAtZnRyZWUtZG9taW5hdG9yLW9wdHMgLWZ0cmVlLWRzZSAKKyAgICAgICAgICAtZnRyZWUtZm9yd3Byb3AgLWZ0cmVlLWZyZSAtZnRyZWUtbG9vcC1pZi1jb252ZXJ0IAorICAgICAgICAgIC1mdHJlZS1sb29wLWlmLWNvbnZlcnQtc3RvcmVzIC1mdHJlZS1sb29wLWltIAorICAgICAgICAgIC1mdHJlZS1waGlwcm9wIC1mdHJlZS1sb29wLWRpc3RyaWJ1dGlvbiAtZnRyZWUtbG9vcC1kaXN0cmlidXRlLXBhdHRlcm5zIAorICAgICAgICAgIC1mdHJlZS1sb29wLWl2Y2Fub24gLWZ0cmVlLWxvb3AtbGluZWFyIC1mdHJlZS1sb29wLW9wdGltaXplIAorICAgICAgICAgIC1mdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz08dmFyPm48L3Zhcj4gLWZ0cmVlLXByZSAtZnRyZWUtcGFydGlhbC1wcmUgLWZ0cmVlLXB0YSAKKyAgICAgICAgICAtZnRyZWUtcmVhc3NvYyAtZnRyZWUtc2luayAtZnRyZWUtc2xzciAtZnRyZWUtc3JhIAorICAgICAgICAgIC1mdHJlZS1zd2l0Y2gtY29udmVyc2lvbiAtZnRyZWUtdGFpbC1tZXJnZSAKKyAgICAgICAgICAtZnRyZWUtdGVyIC1mdHJlZS12ZWN0LWxvb3AtdmVyc2lvbiAtZnRyZWUtdmVjdG9yaXplIC1mdHJlZS12cnAgCisgICAgICAgICAgLWZ1bml0LWF0LWEtdGltZSAtZnVucm9sbC1hbGwtbG9vcHMgLWZ1bnJvbGwtbG9vcHMgCisgICAgICAgICAgLWZ1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zIC1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9ucyAtZnVuc3dpdGNoLWxvb3BzIAorICAgICAgICAgIC1mdmFyaWFibGUtZXhwYW5zaW9uLWluLXVucm9sbGVyIC1mdmVjdC1jb3N0LW1vZGVsIC1mdnB0IC1md2ViIAorICAgICAgICAgIC1md2hvbGUtcHJvZ3JhbSAtZndwYSAtZnVzZS1sZD08dmFyPmxpbmtlcjwvdmFyPiAtZnVzZS1saW5rZXItcGx1Z2luIAorICAgICAgICAgIC0tcGFyYW0gPHZhcj5uYW1lPC92YXI+PTx2YXI+dmFsdWU8L3Zhcj4KKyAgICAgICAgICAtTyAgLU8wICAtTzEgIC1PMiAgLU8zICAtT3MgLU9mYXN0IC1PZworPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlByZXByb2Nlc3NvciBPcHRpb25zPC9lbT48ZGQ+U2VlIDxhIGhyZWY9IlByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc29yLU9wdGlvbnMiPk9wdGlvbnMgQ29udHJvbGxpbmcgdGhlIFByZXByb2Nlc3NvcjwvYT4uCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1BPHZhcj5xdWVzdGlvbjwvdmFyPj08dmFyPmFuc3dlcjwvdmFyPiAKKyAgICAgICAgICAtQS08dmFyPnF1ZXN0aW9uPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPj08dmFyPmFuc3dlcjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gCisgICAgICAgICAgLUMgIC1kRCAgLWRJICAtZE0gIC1kTiAKKyAgICAgICAgICAtRDx2YXI+bWFjcm88L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PTx2YXI+ZGVmbjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gIC1FICAtSCAKKyAgICAgICAgICAtaWRpcmFmdGVyIDx2YXI+ZGlyPC92YXI+IAorICAgICAgICAgIC1pbmNsdWRlIDx2YXI+ZmlsZTwvdmFyPiAgLWltYWNyb3MgPHZhcj5maWxlPC92YXI+IAorICAgICAgICAgIC1pcHJlZml4IDx2YXI+ZmlsZTwvdmFyPiAgLWl3aXRocHJlZml4IDx2YXI+ZGlyPC92YXI+IAorICAgICAgICAgIC1pd2l0aHByZWZpeGJlZm9yZSA8dmFyPmRpcjwvdmFyPiAgLWlzeXN0ZW0gPHZhcj5kaXI8L3Zhcj4gCisgICAgICAgICAgLWltdWx0aWxpYiA8dmFyPmRpcjwvdmFyPiAtaXN5c3Jvb3QgPHZhcj5kaXI8L3Zhcj4gCisgICAgICAgICAgLU0gIC1NTSAgLU1GICAtTUcgIC1NUCAgLU1RICAtTVQgIC1ub3N0ZGluYyAgCisgICAgICAgICAgLVAgIC1mZGVidWctY3BwIC1mdHJhY2stbWFjcm8tZXhwYW5zaW9uIC1md29ya2luZy1kaXJlY3RvcnkgCisgICAgICAgICAgLXJlbWFwIC10cmlncmFwaHMgIC11bmRlZiAgLVU8dmFyPm1hY3JvPC92YXI+ICAKKyAgICAgICAgICAtV3AsPHZhcj5vcHRpb248L3Zhcj4gLVhwcmVwcm9jZXNzb3IgPHZhcj5vcHRpb248L3Zhcj4gLW5vLWludGVncmF0ZWQtY3BwCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+QXNzZW1ibGVyIE9wdGlvbjwvZW0+PGRkPlNlZSA8YSBocmVmPSJBc3NlbWJsZXItT3B0aW9ucy5odG1sI0Fzc2VtYmxlci1PcHRpb25zIj5QYXNzaW5nIE9wdGlvbnMgdG8gdGhlIEFzc2VtYmxlcjwvYT4uCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1XYSw8dmFyPm9wdGlvbjwvdmFyPiAgLVhhc3NlbWJsZXIgPHZhcj5vcHRpb248L3Zhcj4KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5MaW5rZXIgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPk9wdGlvbnMgZm9yIExpbmtpbmc8L2E+LgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICA8dmFyPm9iamVjdC1maWxlLW5hbWU8L3Zhcj4gIC1sPHZhcj5saWJyYXJ5PC92YXI+IAorICAgICAgICAgIC1ub3N0YXJ0ZmlsZXMgIC1ub2RlZmF1bHRsaWJzICAtbm9zdGRsaWIgLXBpZSAtcmR5bmFtaWMgCisgICAgICAgICAgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgCisgICAgICAgICAgLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiAKKyAgICAgICAgICAtc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgCisgICAgICAgICAgLVQgPHZhcj5zY3JpcHQ8L3Zhcj4gIC1XbCw8dmFyPm9wdGlvbjwvdmFyPiAgLVhsaW5rZXIgPHZhcj5vcHRpb248L3Zhcj4gCisgICAgICAgICAgLXUgPHZhcj5zeW1ib2w8L3Zhcj4KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5EaXJlY3RvcnkgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5PcHRpb25zIGZvciBEaXJlY3RvcnkgU2VhcmNoPC9hPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLUI8dmFyPnByZWZpeDwvdmFyPiAtSTx2YXI+ZGlyPC92YXI+IC1pcGx1Z2luZGlyPTx2YXI+ZGlyPC92YXI+IAorICAgICAgICAgIC1pcXVvdGU8dmFyPmRpcjwvdmFyPiAtTDx2YXI+ZGlyPC92YXI+IC1zcGVjcz08dmFyPmZpbGU8L3Zhcj4gLUktIAorICAgICAgICAgIC0tc3lzcm9vdD08dmFyPmRpcjwvdmFyPiAtLW5vLXN5c3Jvb3Qtc3VmZml4Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+TWFjaGluZSBEZXBlbmRlbnQgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+SGFyZHdhcmUgTW9kZWxzIGFuZCBDb25maWd1cmF0aW9uczwvYT4uIAorPCEtLSBUaGlzIGxpc3QgaXMgb3JkZXJlZCBhbHBoYW51bWVyaWNhbGx5IGJ5IHN1YnNlY3Rpb24gbmFtZS4gLS0+Cis8IS0tIFRyeSBhbmQgcHV0IHRoZSBzaWduaWZpY2FudCBpZGVudGlmaWVyIChDUFUgb3Igc3lzdGVtKSBmaXJzdCwgLS0+Cis8IS0tIHNvIHVzZXJzIGhhdmUgYSBjbHVlIGF0IGd1ZXNzaW5nIHdoZXJlIHRoZSBvbmVzIHRoZXkgd2FudCB3aWxsIGJlLiAtLT4KKworICAgICA8cD48ZW0+QUFyY2g2NCBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1iaWctZW5kaWFuICAtbWxpdHRsZS1lbmRpYW4gCisgICAgICAgICAgLW1nZW5lcmFsLXJlZ3Mtb25seSAKKyAgICAgICAgICAtbWNtb2RlbD10aW55ICAtbWNtb2RlbD1zbWFsbCAgLW1jbW9kZWw9bGFyZ2UgCisgICAgICAgICAgLW1zdHJpY3QtYWxpZ24gCisgICAgICAgICAgLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAgLW1uby1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAKKyAgICAgICAgICAtbXRscy1kaWFsZWN0PWRlc2MgIC1tdGxzLWRpYWxlY3Q9dHJhZGl0aW9uYWwgCisgICAgICAgICAgLW1hcmNoPTx2YXI+bmFtZTwvdmFyPiAgLW1jcHU9PHZhcj5uYW1lPC92YXI+ICAtbXR1bmU9PHZhcj5uYW1lPC92YXI+Cis8L3ByZT4KKyAgICAgPHA+PGVtPkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWhhbGYtcmVnLWZpbGUgLW1wcmVmZXItc2hvcnQtaW5zbi1yZWdzIAorICAgICAgICAgIC1tYnJhbmNoLWNvc3Q9PHZhcj5udW08L3Zhcj4gLW1jbW92ZSAtbW5vcHM9PHZhcj5udW08L3Zhcj4gLW1zb2Z0LWNtcHNmIAorICAgICAgICAgIC1tc3BsaXQtbG9oaSAtbXBvc3QtaW5jIC1tcG9zdC1tb2RpZnkgLW1zdGFjay1vZmZzZXQ9PHZhcj5udW08L3Zhcj4gCisgICAgICAgICAgLW1yb3VuZC1uZWFyZXN0IC1tbG9uZy1jYWxscyAtbXNob3J0LWNhbGxzIC1tc21hbGwxNiAKKyAgICAgICAgICAtbWZwLW1vZGU9PHZhcj5tb2RlPC92YXI+IC1tdmVjdC1kb3VibGUgLW1heC12ZWN0LWFsaWduPTx2YXI+bnVtPC92YXI+IAorICAgICAgICAgIC1tc3BsaXQtdmVjbW92ZS1lYXJseSAtbTFyZWctPHZhcj5yZWc8L3Zhcj4KKzwvcHJlPgorICAgICA8cD48ZW0+QVJNIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWFwY3MtZnJhbWUgIC1tbm8tYXBjcy1mcmFtZSAKKyAgICAgICAgICAtbWFiaT08dmFyPm5hbWU8L3Zhcj4gCisgICAgICAgICAgLW1hcGNzLXN0YWNrLWNoZWNrICAtbW5vLWFwY3Mtc3RhY2stY2hlY2sgCisgICAgICAgICAgLW1hcGNzLWZsb2F0ICAtbW5vLWFwY3MtZmxvYXQgCisgICAgICAgICAgLW1hcGNzLXJlZW50cmFudCAgLW1uby1hcGNzLXJlZW50cmFudCAKKyAgICAgICAgICAtbXNjaGVkLXByb2xvZyAgLW1uby1zY2hlZC1wcm9sb2cgCisgICAgICAgICAgLW1saXR0bGUtZW5kaWFuICAtbWJpZy1lbmRpYW4gIC1td29yZHMtbGl0dGxlLWVuZGlhbiAKKyAgICAgICAgICAtbWZsb2F0LWFiaT08dmFyPm5hbWU8L3Zhcj4gCisgICAgICAgICAgLW1mcDE2LWZvcm1hdD08dmFyPm5hbWU8L3Zhcj4KKyAgICAgICAgICAtbXRodW1iLWludGVyd29yayAgLW1uby10aHVtYi1pbnRlcndvcmsgCisgICAgICAgICAgLW1jcHU9PHZhcj5uYW1lPC92YXI+ICAtbWFyY2g9PHZhcj5uYW1lPC92YXI+ICAtbWZwdT08dmFyPm5hbWU8L3Zhcj4gIAorICAgICAgICAgIC1tc3RydWN0dXJlLXNpemUtYm91bmRhcnk9PHZhcj5uPC92YXI+IAorICAgICAgICAgIC1tYWJvcnQtb24tbm9yZXR1cm4gCisgICAgICAgICAgLW1sb25nLWNhbGxzICAtbW5vLWxvbmctY2FsbHMgCisgICAgICAgICAgLW1zaW5nbGUtcGljLWJhc2UgIC1tbm8tc2luZ2xlLXBpYy1iYXNlIAorICAgICAgICAgIC1tcGljLXJlZ2lzdGVyPTx2YXI+cmVnPC92YXI+IAorICAgICAgICAgIC1tbm9wLWZ1bi1kbGxpbXBvcnQgCisgICAgICAgICAgLW1wb2tlLWZ1bmN0aW9uLW5hbWUgCisgICAgICAgICAgLW10aHVtYiAgLW1hcm0gCisgICAgICAgICAgLW10cGNzLWZyYW1lICAtbXRwY3MtbGVhZi1mcmFtZSAKKyAgICAgICAgICAtbWNhbGxlci1zdXBlci1pbnRlcndvcmtpbmcgIC1tY2FsbGVlLXN1cGVyLWludGVyd29ya2luZyAKKyAgICAgICAgICAtbXRwPTx2YXI+bmFtZTwvdmFyPiAtbXRscy1kaWFsZWN0PTx2YXI+ZGlhbGVjdDwvdmFyPiAKKyAgICAgICAgICAtbXdvcmQtcmVsb2NhdGlvbnMgCisgICAgICAgICAgLW1maXgtY29ydGV4LW0zLWxkcmQgCisgICAgICAgICAgLW11bmFsaWduZWQtYWNjZXNzIAorICAgICAgICAgIC1tbmVvbi1mb3ItNjRiaXRzIAorICAgICAgICAgIC1tcmVzdHJpY3QtaXQKKzwvcHJlPgorICAgICA8cD48ZW0+QVZSIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbW1jdT08dmFyPm1jdTwvdmFyPiAtbWFjY3VtdWxhdGUtYXJncyAtbWJyYW5jaC1jb3N0PTx2YXI+Y29zdDwvdmFyPiAKKyAgICAgICAgICAtbWNhbGwtcHJvbG9ndWVzIC1taW50OCAtbW5vLWludGVycnVwdHMgLW1yZWxheCAKKyAgICAgICAgICAtbXN0cmljdC1YIC1tdGlueS1zdGFjayAtV2FkZHItc3BhY2UtY29udmVydAorPC9wcmU+CisgICAgIDxwPjxlbT5CbGFja2ZpbiBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1jcHU9PHZhcj5jcHU8L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+LTx2YXI+c2lyZXZpc2lvbjwvdmFyPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj4gCisgICAgICAgICAgLW1zaW0gLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAgLW1uby1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAKKyAgICAgICAgICAtbXNwZWNsZC1hbm9tYWx5ICAtbW5vLXNwZWNsZC1hbm9tYWx5ICAtbWNzeW5jLWFub21hbHkgIC1tbm8tY3N5bmMtYW5vbWFseSAKKyAgICAgICAgICAtbWxvdy02NGsgLW1uby1sb3c2NGsgIC1tc3RhY2stY2hlY2stbDEgIC1taWQtc2hhcmVkLWxpYnJhcnkgCisgICAgICAgICAgLW1uby1pZC1zaGFyZWQtbGlicmFyeSAgLW1zaGFyZWQtbGlicmFyeS1pZD08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLW1sZWFmLWlkLXNoYXJlZC1saWJyYXJ5ICAtbW5vLWxlYWYtaWQtc2hhcmVkLWxpYnJhcnkgCisgICAgICAgICAgLW1zZXAtZGF0YSAgLW1uby1zZXAtZGF0YSAgLW1sb25nLWNhbGxzICAtbW5vLWxvbmctY2FsbHMgCisgICAgICAgICAgLW1mYXN0LWZwIC1taW5saW5lLXBsdCAtbW11bHRpY29yZSAgLW1jb3JlYSAgLW1jb3JlYiAgLW1zZHJhbSAKKyAgICAgICAgICAtbWljcGxiCis8L3ByZT4KKyAgICAgPHA+PGVtPkM2WCBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1iaWctZW5kaWFuICAtbWxpdHRsZS1lbmRpYW4gLW1hcmNoPTx2YXI+Y3B1PC92YXI+IAorICAgICAgICAgIC1tc2ltIC1tc2RhdGE9PHZhcj5zZGF0YS10eXBlPC92YXI+Cis8L3ByZT4KKyAgICAgPHA+PGVtPkNSSVMgT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tY3B1PTx2YXI+Y3B1PC92YXI+ICAtbWFyY2g9PHZhcj5jcHU8L3Zhcj4gIC1tdHVuZT08dmFyPmNwdTwvdmFyPiAKKyAgICAgICAgICAtbW1heC1zdGFjay1mcmFtZT08dmFyPm48L3Zhcj4gIC1tZWxpbnV4LXN0YWNrc2l6ZT08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLW1ldHJheDQgIC1tZXRyYXgxMDAgIC1tcGRlYnVnICAtbWNjLWluaXQgIC1tbm8tc2lkZS1lZmZlY3RzIAorICAgICAgICAgIC1tc3RhY2stYWxpZ24gIC1tZGF0YS1hbGlnbiAgLW1jb25zdC1hbGlnbiAKKyAgICAgICAgICAtbTMyLWJpdCAgLW0xNi1iaXQgIC1tOC1iaXQgIC1tbm8tcHJvbG9ndWUtZXBpbG9ndWUgIC1tbm8tZ290cGx0IAorICAgICAgICAgIC1tZWxmICAtbWFvdXQgIC1tZWxpbnV4ICAtbWxpbnV4ICAtc2ltICAtc2ltMiAKKyAgICAgICAgICAtbW11bC1idWctd29ya2Fyb3VuZCAgLW1uby1tdWwtYnVnLXdvcmthcm91bmQKKzwvcHJlPgorICAgICA8cD48ZW0+Q1IxNiBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1tYWMgCisgICAgICAgICAgLW1jcjE2Y3BsdXMgLW1jcjE2YyAKKyAgICAgICAgICAtbXNpbSAtbWludDMyIC1tYml0LW9wcworICAgICAgICAgIC1tZGF0YS1tb2RlbD08dmFyPm1vZGVsPC92YXI+Cis8L3ByZT4KKyAgICAgPHA+PGVtPkRhcndpbiBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWFsbF9sb2FkICAtYWxsb3dhYmxlX2NsaWVudCAgLWFyY2ggIC1hcmNoX2Vycm9yc19mYXRhbCAKKyAgICAgICAgICAtYXJjaF9vbmx5ICAtYmluZF9hdF9sb2FkICAtYnVuZGxlICAtYnVuZGxlX2xvYWRlciAKKyAgICAgICAgICAtY2xpZW50X25hbWUgIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gIC1jdXJyZW50X3ZlcnNpb24gCisgICAgICAgICAgLWRlYWRfc3RyaXAgCisgICAgICAgICAgLWRlcGVuZGVuY3ktZmlsZSAgLWR5bGliX2ZpbGUgIC1keWxpbmtlcl9pbnN0YWxsX25hbWUgCisgICAgICAgICAgLWR5bmFtaWMgIC1keW5hbWljbGliICAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IAorICAgICAgICAgIC1maWxlbGlzdCAgLWZsYXRfbmFtZXNwYWNlICAtZm9yY2VfY3B1c3VidHlwZV9BTEwgCisgICAgICAgICAgLWZvcmNlX2ZsYXRfbmFtZXNwYWNlICAtaGVhZGVycGFkX21heF9pbnN0YWxsX25hbWVzIAorICAgICAgICAgIC1pZnJhbWV3b3JrIAorICAgICAgICAgIC1pbWFnZV9iYXNlICAtaW5pdCAgLWluc3RhbGxfbmFtZSAgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIAorICAgICAgICAgIC1tdWx0aV9tb2R1bGUgIC1tdWx0aXBseV9kZWZpbmVkICAtbXVsdGlwbHlfZGVmaW5lZF91bnVzZWQgCisgICAgICAgICAgLW5vYWxsX2xvYWQgICAtbm9fZGVhZF9zdHJpcF9pbml0c19hbmRfdGVybXMgCisgICAgICAgICAgLW5vZml4cHJlYmluZGluZyAtbm9tdWx0aWRlZnMgIC1ub3ByZWJpbmQgIC1ub3NlZ2xpbmtlZGl0IAorICAgICAgICAgIC1wYWdlemVyb19zaXplICAtcHJlYmluZCAgLXByZWJpbmRfYWxsX3R3b2xldmVsX21vZHVsZXMgCisgICAgICAgICAgLXByaXZhdGVfYnVuZGxlICAtcmVhZF9vbmx5X3JlbG9jcyAgLXNlY3RhbGlnbiAKKyAgICAgICAgICAtc2VjdG9iamVjdHN5bWJvbHMgIC13aHlsb2FkICAtc2VnMWFkZHIgCisgICAgICAgICAgLXNlY3RjcmVhdGUgIC1zZWN0b2JqZWN0c3ltYm9scyAgLXNlY3RvcmRlciAKKyAgICAgICAgICAtc2VnYWRkciAtc2Vnc19yZWFkX29ubHlfYWRkciAtc2Vnc19yZWFkX3dyaXRlX2FkZHIgCisgICAgICAgICAgLXNlZ19hZGRyX3RhYmxlICAtc2VnX2FkZHJfdGFibGVfZmlsZW5hbWUgIC1zZWdsaW5rZWRpdCAKKyAgICAgICAgICAtc2VncHJvdCAgLXNlZ3NfcmVhZF9vbmx5X2FkZHIgIC1zZWdzX3JlYWRfd3JpdGVfYWRkciAKKyAgICAgICAgICAtc2luZ2xlX21vZHVsZSAgLXN0YXRpYyAgLXN1Yl9saWJyYXJ5ICAtc3ViX3VtYnJlbGxhIAorICAgICAgICAgIC10d29sZXZlbF9uYW1lc3BhY2UgIC11bWJyZWxsYSAgLXVuZGVmaW5lZCAKKyAgICAgICAgICAtdW5leHBvcnRlZF9zeW1ib2xzX2xpc3QgIC13ZWFrX3JlZmVyZW5jZV9taXNtYXRjaGVzIAorICAgICAgICAgIC13aGF0c2xvYWRlZCAtRiAtZ3VzZWQgLWdmdWxsIC1tbWFjb3N4LXZlcnNpb24tbWluPTx2YXI+dmVyc2lvbjwvdmFyPiAKKyAgICAgICAgICAtbWtlcm5lbCAtbW9uZS1ieXRlLWJvb2wKKzwvcHJlPgorICAgICA8cD48ZW0+REVDIEFscGhhIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbW5vLWZwLXJlZ3MgIC1tc29mdC1mbG9hdCAKKyAgICAgICAgICAtbWllZWUgIC1taWVlZS13aXRoLWluZXhhY3QgIC1taWVlZS1jb25mb3JtYW50IAorICAgICAgICAgIC1tZnAtdHJhcC1tb2RlPTx2YXI+bW9kZTwvdmFyPiAgLW1mcC1yb3VuZGluZy1tb2RlPTx2YXI+bW9kZTwvdmFyPiAKKyAgICAgICAgICAtbXRyYXAtcHJlY2lzaW9uPTx2YXI+bW9kZTwvdmFyPiAgLW1idWlsZC1jb25zdGFudHMgCisgICAgICAgICAgLW1jcHU9PHZhcj5jcHUtdHlwZTwvdmFyPiAgLW10dW5lPTx2YXI+Y3B1LXR5cGU8L3Zhcj4gCisgICAgICAgICAgLW1id3ggIC1tbWF4ICAtbWZpeCAgLW1jaXggCisgICAgICAgICAgLW1mbG9hdC12YXggIC1tZmxvYXQtaWVlZSAKKyAgICAgICAgICAtbWV4cGxpY2l0LXJlbG9jcyAgLW1zbWFsbC1kYXRhICAtbWxhcmdlLWRhdGEgCisgICAgICAgICAgLW1zbWFsbC10ZXh0ICAtbWxhcmdlLXRleHQgCisgICAgICAgICAgLW1tZW1vcnktbGF0ZW5jeT08dmFyPnRpbWU8L3Zhcj4KKzwvcHJlPgorICAgICA8cD48ZW0+RlIzMCBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1zbWFsbC1tb2RlbCAtbW5vLWxzaW0KKzwvcHJlPgorICAgICA8cD48ZW0+RlJWIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWdwci0zMiAgLW1ncHItNjQgIC1tZnByLTMyICAtbWZwci02NCAKKyAgICAgICAgICAtbWhhcmQtZmxvYXQgIC1tc29mdC1mbG9hdCAKKyAgICAgICAgICAtbWFsbG9jLWNjICAtbWZpeGVkLWNjICAtbWR3b3JkICAtbW5vLWR3b3JkIAorICAgICAgICAgIC1tZG91YmxlICAtbW5vLWRvdWJsZSAKKyAgICAgICAgICAtbW1lZGlhICAtbW5vLW1lZGlhICAtbW11bGFkZCAgLW1uby1tdWxhZGQgCisgICAgICAgICAgLW1mZHBpYyAgLW1pbmxpbmUtcGx0IC1tZ3ByZWwtcm8gIC1tdWx0aWxpYi1saWJyYXJ5LXBpYyAKKyAgICAgICAgICAtbWxpbmtlZC1mcCAgLW1sb25nLWNhbGxzICAtbWFsaWduLWxhYmVscyAKKyAgICAgICAgICAtbWxpYnJhcnktcGljICAtbWFjYy00ICAtbWFjYy04IAorICAgICAgICAgIC1tcGFjayAgLW1uby1wYWNrICAtbW5vLWVmbGFncyAgLW1jb25kLW1vdmUgIC1tbm8tY29uZC1tb3ZlIAorICAgICAgICAgIC1tb3B0aW1pemUtbWVtYmFyIC1tbm8tb3B0aW1pemUtbWVtYmFyIAorICAgICAgICAgIC1tc2NjICAtbW5vLXNjYyAgLW1jb25kLWV4ZWMgIC1tbm8tY29uZC1leGVjIAorICAgICAgICAgIC1tdmxpdy1icmFuY2ggIC1tbm8tdmxpdy1icmFuY2ggCisgICAgICAgICAgLW1tdWx0aS1jb25kLWV4ZWMgIC1tbm8tbXVsdGktY29uZC1leGVjICAtbW5lc3RlZC1jb25kLWV4ZWMgCisgICAgICAgICAgLW1uby1uZXN0ZWQtY29uZC1leGVjICAtbXRvbWNhdC1zdGF0cyAKKyAgICAgICAgICAtbVRMUyAtbXRscyAKKyAgICAgICAgICAtbWNwdT08dmFyPmNwdTwvdmFyPgorPC9wcmU+CisgICAgIDxwPjxlbT5HTlUvTGludXggT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tZ2xpYmMgLW11Y2xpYmMgLW1iaW9uaWMgLW1hbmRyb2lkIAorICAgICAgICAgIC10bm8tYW5kcm9pZC1jYyAtdG5vLWFuZHJvaWQtbGQKKzwvcHJlPgorICAgICA8cD48ZW0+SDgvMzAwIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbXJlbGF4ICAtbWggIC1tcyAgLW1uICAtbWV4ciAtbW5vLWV4ciAgLW1pbnQzMiAgLW1hbGlnbi0zMDAKKzwvcHJlPgorICAgICA8cD48ZW0+SFBQQSBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1hcmNoPTx2YXI+YXJjaGl0ZWN0dXJlLXR5cGU8L3Zhcj4gCisgICAgICAgICAgLW1iaWctc3dpdGNoICAtbWRpc2FibGUtZnByZWdzICAtbWRpc2FibGUtaW5kZXhpbmcgCisgICAgICAgICAgLW1mYXN0LWluZGlyZWN0LWNhbGxzICAtbWdhcyAgLW1nbnUtbGQgICAtbWhwLWxkIAorICAgICAgICAgIC1tZml4ZWQtcmFuZ2U9PHZhcj5yZWdpc3Rlci1yYW5nZTwvdmFyPiAKKyAgICAgICAgICAtbWp1bXAtaW4tZGVsYXkgLW1saW5rZXItb3B0IC1tbG9uZy1jYWxscyAKKyAgICAgICAgICAtbWxvbmctbG9hZC1zdG9yZSAgLW1uby1iaWctc3dpdGNoICAtbW5vLWRpc2FibGUtZnByZWdzIAorICAgICAgICAgIC1tbm8tZGlzYWJsZS1pbmRleGluZyAgLW1uby1mYXN0LWluZGlyZWN0LWNhbGxzICAtbW5vLWdhcyAKKyAgICAgICAgICAtbW5vLWp1bXAtaW4tZGVsYXkgIC1tbm8tbG9uZy1sb2FkLXN0b3JlIAorICAgICAgICAgIC1tbm8tcG9ydGFibGUtcnVudGltZSAgLW1uby1zb2Z0LWZsb2F0IAorICAgICAgICAgIC1tbm8tc3BhY2UtcmVncyAgLW1zb2Z0LWZsb2F0ICAtbXBhLXJpc2MtMS0wIAorICAgICAgICAgIC1tcGEtcmlzYy0xLTEgIC1tcGEtcmlzYy0yLTAgIC1tcG9ydGFibGUtcnVudGltZSAKKyAgICAgICAgICAtbXNjaGVkdWxlPTx2YXI+Y3B1LXR5cGU8L3Zhcj4gIC1tc3BhY2UtcmVncyAgLW1zaW8gIC1td3NpbyAKKyAgICAgICAgICAtbXVuaXg9PHZhcj51bml4LXN0ZDwvdmFyPiAgLW5vbGliZGxkICAtc3RhdGljICAtdGhyZWFkcworPC9wcmU+CisgICAgIDxwPjxlbT5pMzg2IGFuZCB4ODYtNjQgT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tdHVuZT08dmFyPmNwdS10eXBlPC92YXI+ICAtbWFyY2g9PHZhcj5jcHUtdHlwZTwvdmFyPiAKKyAgICAgICAgICAtbWZwbWF0aD08dmFyPnVuaXQ8L3Zhcj4gCisgICAgICAgICAgLW1hc209PHZhcj5kaWFsZWN0PC92YXI+ICAtbW5vLWZhbmN5LW1hdGgtMzg3IAorICAgICAgICAgIC1tbm8tZnAtcmV0LWluLTM4NyAgLW1zb2Z0LWZsb2F0IAorICAgICAgICAgIC1tbm8td2lkZS1tdWx0aXBseSAgLW1ydGQgIC1tYWxpZ24tZG91YmxlIAorICAgICAgICAgIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTx2YXI+bnVtPC92YXI+IAorICAgICAgICAgIC1taW5jb21pbmctc3RhY2stYm91bmRhcnk9PHZhcj5udW08L3Zhcj4gCisgICAgICAgICAgLW1jbGQgLW1jeDE2IC1tc2FoZiAtbW1vdmJlIC1tY3JjMzIgCisgICAgICAgICAgLW1yZWNpcCAtbXJlY2lwPTx2YXI+b3B0PC92YXI+IAorICAgICAgICAgIC1tdnplcm91cHBlciAtbXByZWZlci1hdngxMjggCisgICAgICAgICAgLW1tbXggIC1tc3NlICAtbXNzZTIgLW1zc2UzIC1tc3NzZTMgLW1zc2U0LjEgLW1zc2U0LjIgLW1zc2U0IC1tYXZ4IAorICAgICAgICAgIC1tYXZ4MiAtbWFlcyAtbXBjbG11bCAtbWZzZ3NiYXNlIC1tcmRybmQgLW1mMTZjIC1tZm1hIAorICAgICAgICAgIC1tc3NlNGEgLW0zZG5vdyAtbXBvcGNudCAtbWFibSAtbWJtaSAtbXRibSAtbWZtYTQgLW14b3AgLW1semNudCAKKyAgICAgICAgICAtbWJtaTIgLW1ydG0gLW1sd3AgLW10aHJlYWRzIAorICAgICAgICAgIC1tbm8tYWxpZ24tc3RyaW5nb3BzICAtbWlubGluZS1hbGwtc3RyaW5nb3BzIAorICAgICAgICAgIC1taW5saW5lLXN0cmluZ29wcy1keW5hbWljYWxseSAtbXN0cmluZ29wLXN0cmF0ZWd5PTx2YXI+YWxnPC92YXI+IAorICAgICAgICAgIC1tcHVzaC1hcmdzICAtbWFjY3VtdWxhdGUtb3V0Z29pbmctYXJncyAgLW0xMjhiaXQtbG9uZy1kb3VibGUgCisgICAgICAgICAgLW05NmJpdC1sb25nLWRvdWJsZSAtbWxvbmctZG91YmxlLTY0IC1tbG9uZy1kb3VibGUtODAgCisgICAgICAgICAgLW1yZWdwYXJtPTx2YXI+bnVtPC92YXI+ICAtbXNzZXJlZ3Bhcm0gCisgICAgICAgICAgLW12ZWNsaWJhYmk9PHZhcj50eXBlPC92YXI+IC1tdmVjdDgtcmV0LWluLW1lbSAKKyAgICAgICAgICAtbXBjMzIgLW1wYzY0IC1tcGM4MCAtbXN0YWNrcmVhbGlnbiAKKyAgICAgICAgICAtbW9taXQtbGVhZi1mcmFtZS1wb2ludGVyICAtbW5vLXJlZC16b25lIC1tbm8tdGxzLWRpcmVjdC1zZWctcmVmcyAKKyAgICAgICAgICAtbWNtb2RlbD08dmFyPmNvZGUtbW9kZWw8L3Zhcj4gLW1hYmk9PHZhcj5uYW1lPC92YXI+IC1tYWRkcmVzcy1tb2RlPTx2YXI+bW9kZTwvdmFyPiAKKyAgICAgICAgICAtbTMyIC1tNjQgLW14MzIgLW1sYXJnZS1kYXRhLXRocmVzaG9sZD08dmFyPm51bTwvdmFyPiAKKyAgICAgICAgICAtbXNzZTJhdnggLW1mZW50cnkgLW04Yml0LWlkaXYgCisgICAgICAgICAgLW1hdngyNTYtc3BsaXQtdW5hbGlnbmVkLWxvYWQgLW1hdngyNTYtc3BsaXQtdW5hbGlnbmVkLXN0b3JlCis8L3ByZT4KKyAgICAgPHA+PGVtPmkzODYgYW5kIHg4Ni02NCBXaW5kb3dzIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWNvbnNvbGUgLW1jeWd3aW4gLW1uby1jeWd3aW4gLW1kbGwgCisgICAgICAgICAgLW1ub3AtZnVuLWRsbGltcG9ydCAtbXRocmVhZCAKKyAgICAgICAgICAtbXVuaWNvZGUgLW13aW4zMiAtbXdpbmRvd3MgLWZuby1zZXQtc3RhY2stZXhlY3V0YWJsZQorPC9wcmU+CisgICAgIDxwPjxlbT5JQS02NCBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1iaWctZW5kaWFuICAtbWxpdHRsZS1lbmRpYW4gIC1tZ251LWFzICAtbWdudS1sZCAgLW1uby1waWMgCisgICAgICAgICAgLW12b2xhdGlsZS1hc20tc3RvcCAgLW1yZWdpc3Rlci1uYW1lcyAgLW1zZGF0YSAtbW5vLXNkYXRhIAorICAgICAgICAgIC1tY29uc3RhbnQtZ3AgIC1tYXV0by1waWMgIC1tZnVzZWQtbWFkZCAKKyAgICAgICAgICAtbWlubGluZS1mbG9hdC1kaXZpZGUtbWluLWxhdGVuY3kgCisgICAgICAgICAgLW1pbmxpbmUtZmxvYXQtZGl2aWRlLW1heC10aHJvdWdocHV0IAorICAgICAgICAgIC1tbm8taW5saW5lLWZsb2F0LWRpdmlkZSAKKyAgICAgICAgICAtbWlubGluZS1pbnQtZGl2aWRlLW1pbi1sYXRlbmN5IAorICAgICAgICAgIC1taW5saW5lLWludC1kaXZpZGUtbWF4LXRocm91Z2hwdXQgIAorICAgICAgICAgIC1tbm8taW5saW5lLWludC1kaXZpZGUgCisgICAgICAgICAgLW1pbmxpbmUtc3FydC1taW4tbGF0ZW5jeSAtbWlubGluZS1zcXJ0LW1heC10aHJvdWdocHV0IAorICAgICAgICAgIC1tbm8taW5saW5lLXNxcnQgCisgICAgICAgICAgLW1kd2FyZjItYXNtIC1tZWFybHktc3RvcC1iaXRzIAorICAgICAgICAgIC1tZml4ZWQtcmFuZ2U9PHZhcj5yZWdpc3Rlci1yYW5nZTwvdmFyPiAtbXRscy1zaXplPTx2YXI+dGxzLXNpemU8L3Zhcj4gCisgICAgICAgICAgLW10dW5lPTx2YXI+Y3B1LXR5cGU8L3Zhcj4gLW1pbHAzMiAtbWxwNjQgCisgICAgICAgICAgLW1zY2hlZC1ici1kYXRhLXNwZWMgLW1zY2hlZC1hci1kYXRhLXNwZWMgLW1zY2hlZC1jb250cm9sLXNwZWMgCisgICAgICAgICAgLW1zY2hlZC1ici1pbi1kYXRhLXNwZWMgLW1zY2hlZC1hci1pbi1kYXRhLXNwZWMgLW1zY2hlZC1pbi1jb250cm9sLXNwZWMgCisgICAgICAgICAgLW1zY2hlZC1zcGVjLWxkYyAtbXNjaGVkLXNwZWMtY29udHJvbC1sZGMgCisgICAgICAgICAgLW1zY2hlZC1wcmVmZXItbm9uLWRhdGEtc3BlYy1pbnNucyAtbXNjaGVkLXByZWZlci1ub24tY29udHJvbC1zcGVjLWluc25zIAorICAgICAgICAgIC1tc2NoZWQtc3RvcC1iaXRzLWFmdGVyLWV2ZXJ5LWN5Y2xlIC1tc2NoZWQtY291bnQtc3BlYy1pbi1jcml0aWNhbC1wYXRoIAorICAgICAgICAgIC1tc2VsLXNjaGVkLWRvbnQtY2hlY2stY29udHJvbC1zcGVjIC1tc2NoZWQtZnAtbWVtLWRlcHMtemVyby1jb3N0IAorICAgICAgICAgIC1tc2NoZWQtbWF4LW1lbW9yeS1pbnNucy1oYXJkLWxpbWl0IC1tc2NoZWQtbWF4LW1lbW9yeS1pbnNucz08dmFyPm1heC1pbnNuczwvdmFyPgorPC9wcmU+CisgICAgIDxwPjxlbT5MTTMyIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWJhcnJlbC1zaGlmdC1lbmFibGVkIC1tZGl2aWRlLWVuYWJsZWQgLW1tdWx0aXBseS1lbmFibGVkIAorICAgICAgICAgIC1tc2lnbi1leHRlbmQtZW5hYmxlZCAtbXVzZXItZW5hYmxlZAorPC9wcmU+CisgICAgIDxwPjxlbT5NMzJSL0QgT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tMzJyMiAtbTMycnggLW0zMnIgCisgICAgICAgICAgLW1kZWJ1ZyAKKyAgICAgICAgICAtbWFsaWduLWxvb3BzIC1tbm8tYWxpZ24tbG9vcHMgCisgICAgICAgICAgLW1pc3N1ZS1yYXRlPTx2YXI+bnVtYmVyPC92YXI+IAorICAgICAgICAgIC1tYnJhbmNoLWNvc3Q9PHZhcj5udW1iZXI8L3Zhcj4gCisgICAgICAgICAgLW1tb2RlbD08dmFyPmNvZGUtc2l6ZS1tb2RlbC10eXBlPC92YXI+IAorICAgICAgICAgIC1tc2RhdGE9PHZhcj5zZGF0YS10eXBlPC92YXI+IAorICAgICAgICAgIC1tbm8tZmx1c2gtZnVuYyAtbWZsdXNoLWZ1bmM9PHZhcj5uYW1lPC92YXI+IAorICAgICAgICAgIC1tbm8tZmx1c2gtdHJhcCAtbWZsdXNoLXRyYXA9PHZhcj5udW1iZXI8L3Zhcj4gCisgICAgICAgICAgLUcgPHZhcj5udW08L3Zhcj4KKzwvcHJlPgorICAgICA8cD48ZW0+TTMyQyBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1jcHU9PHZhcj5jcHU8L3Zhcj4gLW1zaW0gLW1lbXJlZ3M9PHZhcj5udW1iZXI8L3Zhcj4KKzwvcHJlPgorICAgICA8cD48ZW0+TTY4MHgwIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWFyY2g9PHZhcj5hcmNoPC92YXI+ICAtbWNwdT08dmFyPmNwdTwvdmFyPiAgLW10dW5lPTx2YXI+dHVuZTwvdmFyPgorICAgICAgICAgIC1tNjgwMDAgIC1tNjgwMjAgIC1tNjgwMjAtNDAgIC1tNjgwMjAtNjAgIC1tNjgwMzAgIC1tNjgwNDAgCisgICAgICAgICAgLW02ODA2MCAgLW1jcHUzMiAgLW01MjAwICAtbTUyMDZlICAtbTUyOHggIC1tNTMwNyAgLW01NDA3IAorICAgICAgICAgIC1tY2Z2NGUgIC1tYml0ZmllbGQgIC1tbm8tYml0ZmllbGQgIC1tYzY4MDAwICAtbWM2ODAyMCAKKyAgICAgICAgICAtbW5vYml0ZmllbGQgIC1tcnRkICAtbW5vLXJ0ZCAgLW1kaXYgIC1tbm8tZGl2ICAtbXNob3J0IAorICAgICAgICAgIC1tbm8tc2hvcnQgIC1taGFyZC1mbG9hdCAgLW02ODg4MSAgLW1zb2Z0LWZsb2F0ICAtbXBjcmVsIAorICAgICAgICAgIC1tYWxpZ24taW50ICAtbXN0cmljdC1hbGlnbiAgLW1zZXAtZGF0YSAgLW1uby1zZXAtZGF0YSAKKyAgICAgICAgICAtbXNoYXJlZC1saWJyYXJ5LWlkPW4gIC1taWQtc2hhcmVkLWxpYnJhcnkgIC1tbm8taWQtc2hhcmVkLWxpYnJhcnkgCisgICAgICAgICAgLW14Z290IC1tbm8teGdvdAorPC9wcmU+CisgICAgIDxwPjxlbT5NQ29yZSBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1oYXJkbGl0ICAtbW5vLWhhcmRsaXQgIC1tZGl2ICAtbW5vLWRpdiAgLW1yZWxheC1pbW1lZGlhdGVzIAorICAgICAgICAgIC1tbm8tcmVsYXgtaW1tZWRpYXRlcyAgLW13aWRlLWJpdGZpZWxkcyAgLW1uby13aWRlLWJpdGZpZWxkcyAKKyAgICAgICAgICAtbTRieXRlLWZ1bmN0aW9ucyAgLW1uby00Ynl0ZS1mdW5jdGlvbnMgIC1tY2FsbGdyYXBoLWRhdGEgCisgICAgICAgICAgLW1uby1jYWxsZ3JhcGgtZGF0YSAgLW1zbG93LWJ5dGVzICAtbW5vLXNsb3ctYnl0ZXMgIC1tbm8tbHNpbSAKKyAgICAgICAgICAtbWxpdHRsZS1lbmRpYW4gIC1tYmlnLWVuZGlhbiAgLW0yMTAgIC1tMzQwICAtbXN0YWNrLWluY3JlbWVudAorPC9wcmU+CisgICAgIDxwPjxlbT5NZVAgT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tYWJzZGlmZiAtbWFsbC1vcHRzIC1tYXZlcmFnZSAtbWJhc2VkPTx2YXI+bjwvdmFyPiAtbWJpdG9wcyAKKyAgICAgICAgICAtbWM9PHZhcj5uPC92YXI+IC1tY2xpcCAtbWNvbmZpZz08dmFyPm5hbWU8L3Zhcj4gLW1jb3AgLW1jb3AzMiAtbWNvcDY0IC1taXZjMiAKKyAgICAgICAgICAtbWRjIC1tZGl2IC1tZWIgLW1lbCAtbWlvLXZvbGF0aWxlIC1tbCAtbWxlYWR6IC1tbSAtbW1pbm1heCAKKyAgICAgICAgICAtbW11bHQgLW1uby1vcHRzIC1tcmVwZWF0IC1tcyAtbXNhdHVyIC1tc2RyYW0gLW1zaW0gLW1zaW1ub3ZlYyAtbXRmIAorICAgICAgICAgIC1tdGlueT08dmFyPm48L3Zhcj4KKzwvcHJlPgorICAgICA8cD48ZW0+TWljcm9CbGF6ZSBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1zb2Z0LWZsb2F0IC1taGFyZC1mbG9hdCAtbXNtYWxsLWRpdmlkZXMgLW1jcHU9PHZhcj5jcHU8L3Zhcj4gCisgICAgICAgICAgLW1tZW1jcHkgLW14bC1zb2Z0LW11bCAtbXhsLXNvZnQtZGl2IC1teGwtYmFycmVsLXNoaWZ0IAorICAgICAgICAgIC1teGwtcGF0dGVybi1jb21wYXJlIC1teGwtc3RhY2stY2hlY2sgLW14bC1ncC1vcHQgLW1uby1jbGVhcmJzcyAKKyAgICAgICAgICAtbXhsLW11bHRpcGx5LWhpZ2ggLW14bC1mbG9hdC1jb252ZXJ0IC1teGwtZmxvYXQtc3FydCAKKyAgICAgICAgICAtbWJpZy1lbmRpYW4gLW1saXR0bGUtZW5kaWFuIC1teGwtcmVvcmRlciAtbXhsLW1vZGUtPHZhcj5hcHAtbW9kZWw8L3Zhcj4KKzwvcHJlPgorICAgICA8cD48ZW0+TUlQUyBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLUVMICAtRUIgIC1tYXJjaD08dmFyPmFyY2g8L3Zhcj4gIC1tdHVuZT08dmFyPmFyY2g8L3Zhcj4gCisgICAgICAgICAgLW1pcHMxICAtbWlwczIgIC1taXBzMyAgLW1pcHM0ICAtbWlwczMyICAtbWlwczMycjIgCisgICAgICAgICAgLW1pcHM2NCAgLW1pcHM2NHIyIAorICAgICAgICAgIC1taXBzMTYgIC1tbm8tbWlwczE2ICAtbWZsaXAtbWlwczE2IAorICAgICAgICAgIC1taW50ZXJsaW5rLW1pcHMxNiAgLW1uby1pbnRlcmxpbmstbWlwczE2IAorICAgICAgICAgIC1tYWJpPTx2YXI+YWJpPC92YXI+ICAtbWFiaWNhbGxzICAtbW5vLWFiaWNhbGxzIAorICAgICAgICAgIC1tc2hhcmVkICAtbW5vLXNoYXJlZCAgLW1wbHQgIC1tbm8tcGx0ICAtbXhnb3QgIC1tbm8teGdvdCAKKyAgICAgICAgICAtbWdwMzIgIC1tZ3A2NCAgLW1mcDMyICAtbWZwNjQgIC1taGFyZC1mbG9hdCAgLW1zb2Z0LWZsb2F0IAorICAgICAgICAgIC1tbm8tZmxvYXQgLW1zaW5nbGUtZmxvYXQgIC1tZG91YmxlLWZsb2F0ICAKKyAgICAgICAgICAtbWRzcCAgLW1uby1kc3AgIC1tZHNwcjIgIC1tbm8tZHNwcjIgCisgICAgICAgICAgLW1tY3UgLW1tbm8tbWN1IAorICAgICAgICAgIC1tZnB1PTx2YXI+ZnB1LXR5cGU8L3Zhcj4gCisgICAgICAgICAgLW1zbWFydG1pcHMgIC1tbm8tc21hcnRtaXBzIAorICAgICAgICAgIC1tcGFpcmVkLXNpbmdsZSAgLW1uby1wYWlyZWQtc2luZ2xlICAtbWRteCAgLW1uby1tZG14IAorICAgICAgICAgIC1taXBzM2QgIC1tbm8tbWlwczNkICAtbW10ICAtbW5vLW10ICAtbWxsc2MgIC1tbm8tbGxzYyAKKyAgICAgICAgICAtbWxvbmc2NCAgLW1sb25nMzIgIC1tc3ltMzIgIC1tbm8tc3ltMzIgCisgICAgICAgICAgLUc8dmFyPm51bTwvdmFyPiAgLW1sb2NhbC1zZGF0YSAgLW1uby1sb2NhbC1zZGF0YSAKKyAgICAgICAgICAtbWV4dGVybi1zZGF0YSAgLW1uby1leHRlcm4tc2RhdGEgIC1tZ3BvcHQgIC1tbm8tZ29wdCAKKyAgICAgICAgICAtbWVtYmVkZGVkLWRhdGEgIC1tbm8tZW1iZWRkZWQtZGF0YSAKKyAgICAgICAgICAtbXVuaW5pdC1jb25zdC1pbi1yb2RhdGEgIC1tbm8tdW5pbml0LWNvbnN0LWluLXJvZGF0YSAKKyAgICAgICAgICAtbWNvZGUtcmVhZGFibGU9PHZhcj5zZXR0aW5nPC92YXI+IAorICAgICAgICAgIC1tc3BsaXQtYWRkcmVzc2VzICAtbW5vLXNwbGl0LWFkZHJlc3NlcyAKKyAgICAgICAgICAtbWV4cGxpY2l0LXJlbG9jcyAgLW1uby1leHBsaWNpdC1yZWxvY3MgCisgICAgICAgICAgLW1jaGVjay16ZXJvLWRpdmlzaW9uICAtbW5vLWNoZWNrLXplcm8tZGl2aXNpb24gCisgICAgICAgICAgLW1kaXZpZGUtdHJhcHMgIC1tZGl2aWRlLWJyZWFrcyAKKyAgICAgICAgICAtbW1lbWNweSAgLW1uby1tZW1jcHkgIC1tbG9uZy1jYWxscyAgLW1uby1sb25nLWNhbGxzIAorICAgICAgICAgIC1tbWFkICAtbW5vLW1hZCAgLW1mdXNlZC1tYWRkICAtbW5vLWZ1c2VkLW1hZGQgIC1ub2NwcCAKKyAgICAgICAgICAtbWZpeC0yNGsgLW1uby1maXgtMjRrIAorICAgICAgICAgIC1tZml4LXI0MDAwICAtbW5vLWZpeC1yNDAwMCAgLW1maXgtcjQ0MDAgIC1tbm8tZml4LXI0NDAwIAorICAgICAgICAgIC1tZml4LXIxMDAwMCAtbW5vLWZpeC1yMTAwMDAgIC1tZml4LXZyNDEyMCAgLW1uby1maXgtdnI0MTIwIAorICAgICAgICAgIC1tZml4LXZyNDEzMCAgLW1uby1maXgtdnI0MTMwICAtbWZpeC1zYjEgIC1tbm8tZml4LXNiMSAKKyAgICAgICAgICAtbWZsdXNoLWZ1bmM9PHZhcj5mdW5jPC92YXI+ICAtbW5vLWZsdXNoLWZ1bmMgCisgICAgICAgICAgLW1icmFuY2gtY29zdD08dmFyPm51bTwvdmFyPiAgLW1icmFuY2gtbGlrZWx5ICAtbW5vLWJyYW5jaC1saWtlbHkgCisgICAgICAgICAgLW1mcC1leGNlcHRpb25zIC1tbm8tZnAtZXhjZXB0aW9ucyAKKyAgICAgICAgICAtbXZyNDEzMC1hbGlnbiAtbW5vLXZyNDEzMC1hbGlnbiAtbXN5bmNpIC1tbm8tc3luY2kgCisgICAgICAgICAgLW1yZWxheC1waWMtY2FsbHMgLW1uby1yZWxheC1waWMtY2FsbHMgLW1tY291bnQtcmEtYWRkcmVzcworPC9wcmU+CisgICAgIDxwPjxlbT5NTUlYIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWxpYmZ1bmNzICAtbW5vLWxpYmZ1bmNzICAtbWVwc2lsb24gIC1tbm8tZXBzaWxvbiAgLW1hYmk9Z251IAorICAgICAgICAgIC1tYWJpPW1taXh3YXJlICAtbXplcm8tZXh0ZW5kICAtbWtudXRoZGl2ICAtbXRvcGxldmVsLXN5bWJvbHMgCisgICAgICAgICAgLW1lbGYgIC1tYnJhbmNoLXByZWRpY3QgIC1tbm8tYnJhbmNoLXByZWRpY3QgIC1tYmFzZS1hZGRyZXNzZXMgCisgICAgICAgICAgLW1uby1iYXNlLWFkZHJlc3NlcyAgLW1zaW5nbGUtZXhpdCAgLW1uby1zaW5nbGUtZXhpdAorPC9wcmU+CisgICAgIDxwPjxlbT5NTjEwMzAwIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbW11bHQtYnVnICAtbW5vLW11bHQtYnVnIAorICAgICAgICAgIC1tbm8tYW0zMyAtbWFtMzMgLW1hbTMzLTIgLW1hbTM0IAorICAgICAgICAgIC1tdHVuZT08dmFyPmNwdS10eXBlPC92YXI+IAorICAgICAgICAgIC1tcmV0dXJuLXBvaW50ZXItb24tZDAgCisgICAgICAgICAgLW1uby1jcnQwICAtbXJlbGF4IC1tbGl3IC1tc2V0bGIKKzwvcHJlPgorICAgICA8cD48ZW0+TW94aWUgT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tZWIgLW1lbCAtbW5vLWNydDAKKzwvcHJlPgorICAgICA8cD48ZW0+UERQLTExIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWZwdSAgLW1zb2Z0LWZsb2F0ICAtbWFjMCAgLW1uby1hYzAgIC1tNDAgIC1tNDUgIC1tMTAgCisgICAgICAgICAgLW1iY29weSAgLW1iY29weS1idWlsdGluICAtbWludDMyICAtbW5vLWludDE2IAorICAgICAgICAgIC1taW50MTYgIC1tbm8taW50MzIgIC1tZmxvYXQzMiAgLW1uby1mbG9hdDY0IAorICAgICAgICAgIC1tZmxvYXQ2NCAgLW1uby1mbG9hdDMyICAtbWFic2hpICAtbW5vLWFic2hpIAorICAgICAgICAgIC1tYnJhbmNoLWV4cGVuc2l2ZSAgLW1icmFuY2gtY2hlYXAgCisgICAgICAgICAgLW11bml4LWFzbSAgLW1kZWMtYXNtCis8L3ByZT4KKyAgICAgPHA+PGVtPnBpY29DaGlwIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWFlPTx2YXI+YWVfdHlwZTwvdmFyPiAtbXZsaXctbG9va2FoZWFkPTx2YXI+TjwvdmFyPiAKKyAgICAgICAgICAtbXN5bWJvbC1hcy1hZGRyZXNzIC1tbm8taW5lZmZpY2llbnQtd2FybmluZ3MKKzwvcHJlPgorICAgICA8cD48ZW0+UG93ZXJQQyBPcHRpb25zPC9lbT4KK1NlZSBSUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnMuCisKKyAgICAgPHA+PGVtPlJMNzggT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tc2ltIC1tbXVsPW5vbmUgLW1tdWw9ZzEzIC1tbXVsPXJsNzgKKzwvcHJlPgorICAgICA8cD48ZW0+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1jcHU9PHZhcj5jcHUtdHlwZTwvdmFyPiAKKyAgICAgICAgICAtbXR1bmU9PHZhcj5jcHUtdHlwZTwvdmFyPiAKKyAgICAgICAgICAtbWNtb2RlbD08dmFyPmNvZGUtbW9kZWw8L3Zhcj4gCisgICAgICAgICAgLW1wb3dlcnBjNjQgCisgICAgICAgICAgLW1hbHRpdmVjICAtbW5vLWFsdGl2ZWMgCisgICAgICAgICAgLW1wb3dlcnBjLWdwb3B0ICAtbW5vLXBvd2VycGMtZ3BvcHQgCisgICAgICAgICAgLW1wb3dlcnBjLWdmeG9wdCAgLW1uby1wb3dlcnBjLWdmeG9wdCAKKyAgICAgICAgICAtbW1mY3JmICAtbW5vLW1mY3JmICAtbXBvcGNudGIgIC1tbm8tcG9wY250YiAtbXBvcGNudGQgLW1uby1wb3BjbnRkIAorICAgICAgICAgIC1tZnBybmQgIC1tbm8tZnBybmQgCisgICAgICAgICAgLW1jbXBiIC1tbm8tY21wYiAtbW1mcGdwciAtbW5vLW1mcGdwciAtbWhhcmQtZGZwIC1tbm8taGFyZC1kZnAgCisgICAgICAgICAgLW1mdWxsLXRvYyAgIC1tbWluaW1hbC10b2MgIC1tbm8tZnAtaW4tdG9jICAtbW5vLXN1bS1pbi10b2MgCisgICAgICAgICAgLW02NCAgLW0zMiAgLW14bC1jb21wYXQgIC1tbm8teGwtY29tcGF0ICAtbXBlIAorICAgICAgICAgIC1tYWxpZ24tcG93ZXIgIC1tYWxpZ24tbmF0dXJhbCAKKyAgICAgICAgICAtbXNvZnQtZmxvYXQgIC1taGFyZC1mbG9hdCAgLW1tdWx0aXBsZSAgLW1uby1tdWx0aXBsZSAKKyAgICAgICAgICAtbXNpbmdsZS1mbG9hdCAtbWRvdWJsZS1mbG9hdCAtbXNpbXBsZS1mcHUgCisgICAgICAgICAgLW1zdHJpbmcgIC1tbm8tc3RyaW5nICAtbXVwZGF0ZSAgLW1uby11cGRhdGUgCisgICAgICAgICAgLW1hdm9pZC1pbmRleGVkLWFkZHJlc3NlcyAgLW1uby1hdm9pZC1pbmRleGVkLWFkZHJlc3NlcyAKKyAgICAgICAgICAtbWZ1c2VkLW1hZGQgIC1tbm8tZnVzZWQtbWFkZCAgLW1iaXQtYWxpZ24gIC1tbm8tYml0LWFsaWduIAorICAgICAgICAgIC1tc3RyaWN0LWFsaWduICAtbW5vLXN0cmljdC1hbGlnbiAgLW1yZWxvY2F0YWJsZSAKKyAgICAgICAgICAtbW5vLXJlbG9jYXRhYmxlICAtbXJlbG9jYXRhYmxlLWxpYiAgLW1uby1yZWxvY2F0YWJsZS1saWIgCisgICAgICAgICAgLW10b2MgIC1tbm8tdG9jICAtbWxpdHRsZSAgLW1saXR0bGUtZW5kaWFuICAtbWJpZyAgLW1iaWctZW5kaWFuIAorICAgICAgICAgIC1tZHluYW1pYy1uby1waWMgIC1tYWx0aXZlYyAtbXN3ZGl2ICAtbXNpbmdsZS1waWMtYmFzZSAKKyAgICAgICAgICAtbXByaW9yaXRpemUtcmVzdHJpY3RlZC1pbnNucz08dmFyPnByaW9yaXR5PC92YXI+IAorICAgICAgICAgIC1tc2NoZWQtY29zdGx5LWRlcD08dmFyPmRlcGVuZGVuY2VfdHlwZTwvdmFyPiAKKyAgICAgICAgICAtbWluc2VydC1zY2hlZC1ub3BzPTx2YXI+c2NoZW1lPC92YXI+IAorICAgICAgICAgIC1tY2FsbC1zeXN2ICAtbWNhbGwtbmV0YnNkIAorICAgICAgICAgIC1tYWl4LXN0cnVjdC1yZXR1cm4gIC1tc3ZyNC1zdHJ1Y3QtcmV0dXJuIAorICAgICAgICAgIC1tYWJpPTx2YXI+YWJpLXR5cGU8L3Zhcj4gLW1zZWN1cmUtcGx0IC1tYnNzLXBsdCAKKyAgICAgICAgICAtbWJsb2NrLW1vdmUtaW5saW5lLWxpbWl0PTx2YXI+bnVtPC92YXI+IAorICAgICAgICAgIC1taXNlbCAtbW5vLWlzZWwgCisgICAgICAgICAgLW1pc2VsPXllcyAgLW1pc2VsPW5vIAorICAgICAgICAgIC1tc3BlIC1tbm8tc3BlIAorICAgICAgICAgIC1tc3BlPXllcyAgLW1zcGU9bm8gCisgICAgICAgICAgLW1wYWlyZWQgCisgICAgICAgICAgLW1nZW4tY2VsbC1taWNyb2NvZGUgLW13YXJuLWNlbGwtbWljcm9jb2RlIAorICAgICAgICAgIC1tdnJzYXZlIC1tbm8tdnJzYXZlIAorICAgICAgICAgIC1tbXVsaHcgLW1uby1tdWxodyAKKyAgICAgICAgICAtbWRsbXpiIC1tbm8tZGxtemIgCisgICAgICAgICAgLW1mbG9hdC1ncHJzPXllcyAgLW1mbG9hdC1ncHJzPW5vIC1tZmxvYXQtZ3Bycz1zaW5nbGUgLW1mbG9hdC1ncHJzPWRvdWJsZSAKKyAgICAgICAgICAtbXByb3RvdHlwZSAgLW1uby1wcm90b3R5cGUgCisgICAgICAgICAgLW1zaW0gIC1tbXZtZSAgLW1hZHMgIC1teWVsbG93a25pZmUgIC1tZW1iICAtbXNkYXRhIAorICAgICAgICAgIC1tc2RhdGE9PHZhcj5vcHQ8L3Zhcj4gIC1tdnh3b3JrcyAgLUcgPHZhcj5udW08L3Zhcj4gIC1wdGhyZWFkIAorICAgICAgICAgIC1tcmVjaXAgLW1yZWNpcD08dmFyPm9wdDwvdmFyPiAtbW5vLXJlY2lwIC1tcmVjaXAtcHJlY2lzaW9uIAorICAgICAgICAgIC1tbm8tcmVjaXAtcHJlY2lzaW9uIAorICAgICAgICAgIC1tdmVjbGliYWJpPTx2YXI+dHlwZTwvdmFyPiAtbWZyaXogLW1uby1mcml6IAorICAgICAgICAgIC1tcG9pbnRlcnMtdG8tbmVzdGVkLWZ1bmN0aW9ucyAtbW5vLXBvaW50ZXJzLXRvLW5lc3RlZC1mdW5jdGlvbnMgCisgICAgICAgICAgLW1zYXZlLXRvYy1pbmRpcmVjdCAtbW5vLXNhdmUtdG9jLWluZGlyZWN0Cis8L3ByZT4KKyAgICAgPHA+PGVtPlJYIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbTY0Yml0LWRvdWJsZXMgIC1tMzJiaXQtZG91YmxlcyAgLWZwdSAgLW5vZnB1CisgICAgICAgICAgLW1jcHU9CisgICAgICAgICAgLW1iaWctZW5kaWFuLWRhdGEgLW1saXR0bGUtZW5kaWFuLWRhdGEgCisgICAgICAgICAgLW1zbWFsbC1kYXRhIAorICAgICAgICAgIC1tc2ltICAtbW5vLXNpbQorICAgICAgICAgIC1tYXMxMDAtc3ludGF4IC1tbm8tYXMxMDAtc3ludGF4CisgICAgICAgICAgLW1yZWxheAorICAgICAgICAgIC1tbWF4LWNvbnN0YW50LXNpemU9CisgICAgICAgICAgLW1pbnQtcmVnaXN0ZXI9CisgICAgICAgICAgLW1waWQKKyAgICAgICAgICAtbW5vLXdhcm4tbXVsdGlwbGUtZmFzdC1pbnRlcnJ1cHRzCisgICAgICAgICAgLW1zYXZlLWFjYy1pbi1pbnRlcnJ1cHRzCis8L3ByZT4KKyAgICAgPHA+PGVtPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbXR1bmU9PHZhcj5jcHUtdHlwZTwvdmFyPiAgLW1hcmNoPTx2YXI+Y3B1LXR5cGU8L3Zhcj4gCisgICAgICAgICAgLW1oYXJkLWZsb2F0ICAtbXNvZnQtZmxvYXQgIC1taGFyZC1kZnAgLW1uby1oYXJkLWRmcCAKKyAgICAgICAgICAtbWxvbmctZG91YmxlLTY0IC1tbG9uZy1kb3VibGUtMTI4IAorICAgICAgICAgIC1tYmFja2NoYWluICAtbW5vLWJhY2tjaGFpbiAtbXBhY2tlZC1zdGFjayAgLW1uby1wYWNrZWQtc3RhY2sgCisgICAgICAgICAgLW1zbWFsbC1leGVjICAtbW5vLXNtYWxsLWV4ZWMgIC1tbXZjbGUgLW1uby1tdmNsZSAKKyAgICAgICAgICAtbTY0ICAtbTMxICAtbWRlYnVnICAtbW5vLWRlYnVnICAtbWVzYSAgLW16YXJjaCAKKyAgICAgICAgICAtbXRwZi10cmFjZSAtbW5vLXRwZi10cmFjZSAgLW1mdXNlZC1tYWRkICAtbW5vLWZ1c2VkLW1hZGQgCisgICAgICAgICAgLW13YXJuLWZyYW1lc2l6ZSAgLW13YXJuLWR5bmFtaWNzdGFjayAgLW1zdGFjay1zaXplIC1tc3RhY2stZ3VhcmQKKzwvcHJlPgorICAgICA8cD48ZW0+U2NvcmUgT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tZWIgLW1lbCAKKyAgICAgICAgICAtbW5od2xvb3AgCisgICAgICAgICAgLW11bHMgCisgICAgICAgICAgLW1tYWMgCisgICAgICAgICAgLW1zY29yZTUgLW1zY29yZTV1IC1tc2NvcmU3IC1tc2NvcmU3ZAorPC9wcmU+CisgICAgIDxwPjxlbT5TSCBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW0xICAtbTIgIC1tMmUgCisgICAgICAgICAgLW0yYS1ub2ZwdSAtbTJhLXNpbmdsZS1vbmx5IC1tMmEtc2luZ2xlIC1tMmEgCisgICAgICAgICAgLW0zICAtbTNlIAorICAgICAgICAgIC1tNC1ub2ZwdSAgLW00LXNpbmdsZS1vbmx5ICAtbTQtc2luZ2xlICAtbTQgCisgICAgICAgICAgLW00YS1ub2ZwdSAtbTRhLXNpbmdsZS1vbmx5IC1tNGEtc2luZ2xlIC1tNGEgLW00YWwgCisgICAgICAgICAgLW01LTY0bWVkaWEgIC1tNS02NG1lZGlhLW5vZnB1IAorICAgICAgICAgIC1tNS0zMm1lZGlhICAtbTUtMzJtZWRpYS1ub2ZwdSAKKyAgICAgICAgICAtbTUtY29tcGFjdCAgLW01LWNvbXBhY3Qtbm9mcHUgCisgICAgICAgICAgLW1iICAtbWwgIC1tZGFsaWduICAtbXJlbGF4IAorICAgICAgICAgIC1tYmlndGFibGUgLW1mbW92ZCAtbWhpdGFjaGkgLW1yZW5lc2FzIC1tbm8tcmVuZXNhcyAtbW5vbWFjc2F2ZSAKKyAgICAgICAgICAtbWllZWUgLW1uby1pZWVlIC1tYml0b3BzICAtbWlzaXplICAtbWlubGluZS1pY19pbnZhbGlkYXRlIC1tcGFkc3RydWN0IAorICAgICAgICAgIC1tc3BhY2UgLW1wcmVmZXJnb3QgIC1tdXNlcm1vZGUgLW11bHRjb3N0PTx2YXI+bnVtYmVyPC92YXI+IC1tZGl2PTx2YXI+c3RyYXRlZ3k8L3Zhcj4gCisgICAgICAgICAgLW1kaXZzaTNfbGliZnVuYz08dmFyPm5hbWU8L3Zhcj4gLW1maXhlZC1yYW5nZT08dmFyPnJlZ2lzdGVyLXJhbmdlPC92YXI+IAorICAgICAgICAgIC1taW5kZXhlZC1hZGRyZXNzaW5nIC1tZ2V0dHJjb3N0PTx2YXI+bnVtYmVyPC92YXI+IC1tcHQtZml4ZWQgCisgICAgICAgICAgLW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3MgLW1pbnZhbGlkLXN5bWJvbHMgCisgICAgICAgICAgLW1hdG9taWMtbW9kZWw9PHZhcj5hdG9taWMtbW9kZWw8L3Zhcj4gCisgICAgICAgICAgLW1icmFuY2gtY29zdD08dmFyPm51bTwvdmFyPiAtbXpkY2JyYW5jaCAtbW5vLXpkY2JyYW5jaCAtbWNicmFuY2hkaSAtbWNtcGVxZGkgCisgICAgICAgICAgLW1mdXNlZC1tYWRkIC1tbm8tZnVzZWQtbWFkZCAtbWZzY2EgLW1uby1mc2NhIC1tZnNycmEgLW1uby1mc3JyYSAKKyAgICAgICAgICAtbXByZXRlbmQtY21vdmUgLW10YXMKKzwvcHJlPgorICAgICA8cD48ZW0+U29sYXJpcyAyIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWltcHVyZS10ZXh0ICAtbW5vLWltcHVyZS10ZXh0IAorICAgICAgICAgIC1wdGhyZWFkcyAtcHRocmVhZAorPC9wcmU+CisgICAgIDxwPjxlbT5TUEFSQyBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1jcHU9PHZhcj5jcHUtdHlwZTwvdmFyPiAKKyAgICAgICAgICAtbXR1bmU9PHZhcj5jcHUtdHlwZTwvdmFyPiAKKyAgICAgICAgICAtbWNtb2RlbD08dmFyPmNvZGUtbW9kZWw8L3Zhcj4gCisgICAgICAgICAgLW1tZW1vcnktbW9kZWw9PHZhcj5tZW0tbW9kZWw8L3Zhcj4gCisgICAgICAgICAgLW0zMiAgLW02NCAgLW1hcHAtcmVncyAgLW1uby1hcHAtcmVncyAKKyAgICAgICAgICAtbWZhc3Rlci1zdHJ1Y3RzICAtbW5vLWZhc3Rlci1zdHJ1Y3RzICAtbWZsYXQgIC1tbm8tZmxhdCAKKyAgICAgICAgICAtbWZwdSAgLW1uby1mcHUgIC1taGFyZC1mbG9hdCAgLW1zb2Z0LWZsb2F0IAorICAgICAgICAgIC1taGFyZC1xdWFkLWZsb2F0ICAtbXNvZnQtcXVhZC1mbG9hdCAKKyAgICAgICAgICAtbXN0YWNrLWJpYXMgIC1tbm8tc3RhY2stYmlhcyAKKyAgICAgICAgICAtbXVuYWxpZ25lZC1kb3VibGVzICAtbW5vLXVuYWxpZ25lZC1kb3VibGVzIAorICAgICAgICAgIC1tdjhwbHVzICAtbW5vLXY4cGx1cyAgLW12aXMgIC1tbm8tdmlzIAorICAgICAgICAgIC1tdmlzMiAgLW1uby12aXMyICAtbXZpczMgIC1tbm8tdmlzMyAKKyAgICAgICAgICAtbWNiY29uZCAtbW5vLWNiY29uZCAKKyAgICAgICAgICAtbWZtYWYgIC1tbm8tZm1hZiAgLW1wb3BjICAtbW5vLXBvcGMgCisgICAgICAgICAgLW1maXgtYXQ2OTdmCis8L3ByZT4KKyAgICAgPHA+PGVtPlNQVSBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW13YXJuLXJlbG9jIC1tZXJyb3ItcmVsb2MgCisgICAgICAgICAgLW1zYWZlLWRtYSAtbXVuc2FmZS1kbWEgCisgICAgICAgICAgLW1icmFuY2gtaGludHMgCisgICAgICAgICAgLW1zbWFsbC1tZW0gLW1sYXJnZS1tZW0gLW1zdGRtYWluIAorICAgICAgICAgIC1tZml4ZWQtcmFuZ2U9PHZhcj5yZWdpc3Rlci1yYW5nZTwvdmFyPiAKKyAgICAgICAgICAtbWVhMzIgLW1lYTY0IAorICAgICAgICAgIC1tYWRkcmVzcy1zcGFjZS1jb252ZXJzaW9uIC1tbm8tYWRkcmVzcy1zcGFjZS1jb252ZXJzaW9uIAorICAgICAgICAgIC1tY2FjaGUtc2l6ZT08dmFyPmNhY2hlLXNpemU8L3Zhcj4gCisgICAgICAgICAgLW1hdG9taWMtdXBkYXRlcyAtbW5vLWF0b21pYy11cGRhdGVzCis8L3ByZT4KKyAgICAgPHA+PGVtPlN5c3RlbSBWIE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtUXkgIC1RbiAgLVlQLDx2YXI+cGF0aHM8L3Zhcj4gIC1ZbSw8dmFyPmRpcjwvdmFyPgorPC9wcmU+CisgICAgIDxwPjxlbT5USUxFLUd4IE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWNwdT08dmFyPmNwdTwvdmFyPiAtbTMyIC1tNjQgLW1jbW9kZWw9PHZhcj5jb2RlLW1vZGVsPC92YXI+Cis8L3ByZT4KKyAgICAgPHA+PGVtPlRJTEVQcm8gT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tY3B1PTx2YXI+Y3B1PC92YXI+IC1tMzIKKzwvcHJlPgorICAgICA8cD48ZW0+Vjg1MCBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1sb25nLWNhbGxzICAtbW5vLWxvbmctY2FsbHMgIC1tZXAgIC1tbm8tZXAgCisgICAgICAgICAgLW1wcm9sb2ctZnVuY3Rpb24gIC1tbm8tcHJvbG9nLWZ1bmN0aW9uICAtbXNwYWNlIAorICAgICAgICAgIC1tdGRhPTx2YXI+bjwvdmFyPiAgLW1zZGE9PHZhcj5uPC92YXI+ICAtbXpkYT08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLW1hcHAtcmVncyAgLW1uby1hcHAtcmVncyAKKyAgICAgICAgICAtbWRpc2FibGUtY2FsbHQgIC1tbm8tZGlzYWJsZS1jYWxsdCAKKyAgICAgICAgICAtbXY4NTBlMnYzIC1tdjg1MGUyIC1tdjg1MGUxIC1tdjg1MGVzIAorICAgICAgICAgIC1tdjg1MGUgLW12ODUwIC1tdjg1MGUzdjUgCisgICAgICAgICAgLW1sb29wIAorICAgICAgICAgIC1tcmVsYXggCisgICAgICAgICAgLW1sb25nLWp1bXBzIAorICAgICAgICAgIC1tc29mdC1mbG9hdCAKKyAgICAgICAgICAtbWhhcmQtZmxvYXQgCisgICAgICAgICAgLW1nY2MtYWJpIAorICAgICAgICAgIC1tcmg4NTAtYWJpIAorICAgICAgICAgIC1tYmlnLXN3aXRjaAorPC9wcmU+CisgICAgIDxwPjxlbT5WQVggT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tZyAgLW1nbnUgIC1tdW5peAorPC9wcmU+CisgICAgIDxwPjxlbT5WTVMgT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tdm1zLXJldHVybi1jb2RlcyAtbWRlYnVnLW1haW49PHZhcj5wcmVmaXg8L3Zhcj4gLW1tYWxsb2M2NCAKKyAgICAgICAgICAtbXBvaW50ZXItc2l6ZT08dmFyPnNpemU8L3Zhcj4KKzwvcHJlPgorICAgICA8cD48ZW0+VnhXb3JrcyBPcHRpb25zPC9lbT4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLW1ydHAgIC1ub24tc3RhdGljICAtQnN0YXRpYyAgLUJkeW5hbWljIAorICAgICAgICAgIC1YYmluZC1sYXp5ICAtWGJpbmQtbm93Cis8L3ByZT4KKyAgICAgPHA+PGVtPng4Ni02NCBPcHRpb25zPC9lbT4KK1NlZSBpMzg2IGFuZCB4ODYtNjQgT3B0aW9ucy4KKworICAgICA8cD48ZW0+WHN0b3JteTE2IE9wdGlvbnM8L2VtPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbXNpbQorPC9wcmU+CisgICAgIDxwPjxlbT5YdGVuc2EgT3B0aW9uczwvZW0+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1tY29uc3QxNiAtbW5vLWNvbnN0MTYgCisgICAgICAgICAgLW1mdXNlZC1tYWRkICAtbW5vLWZ1c2VkLW1hZGQgCisgICAgICAgICAgLW1mb3JjZS1uby1waWMgCisgICAgICAgICAgLW1zZXJpYWxpemUtdm9sYXRpbGUgIC1tbm8tc2VyaWFsaXplLXZvbGF0aWxlIAorICAgICAgICAgIC1tdGV4dC1zZWN0aW9uLWxpdGVyYWxzICAtbW5vLXRleHQtc2VjdGlvbi1saXRlcmFscyAKKyAgICAgICAgICAtbXRhcmdldC1hbGlnbiAgLW1uby10YXJnZXQtYWxpZ24gCisgICAgICAgICAgLW1sb25nY2FsbHMgIC1tbm8tbG9uZ2NhbGxzCis8L3ByZT4KKyAgICAgPHA+PGVtPnpTZXJpZXMgT3B0aW9uczwvZW0+CitTZWUgUy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9ucy4KKworICAgICA8YnI+PGR0PjxlbT5Db2RlIEdlbmVyYXRpb24gT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+T3B0aW9ucyBmb3IgQ29kZSBHZW5lcmF0aW9uIENvbnZlbnRpb25zPC9hPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWZjYWxsLXNhdmVkLTx2YXI+cmVnPC92YXI+ICAtZmNhbGwtdXNlZC08dmFyPnJlZzwvdmFyPiAKKyAgICAgICAgICAtZmZpeGVkLTx2YXI+cmVnPC92YXI+ICAtZmV4Y2VwdGlvbnMgCisgICAgICAgICAgLWZub24tY2FsbC1leGNlcHRpb25zICAtZmRlbGV0ZS1kZWFkLWV4Y2VwdGlvbnMgIC1mdW53aW5kLXRhYmxlcyAKKyAgICAgICAgICAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIAorICAgICAgICAgIC1maW5oaWJpdC1zaXplLWRpcmVjdGl2ZSAgLWZpbnN0cnVtZW50LWZ1bmN0aW9ucyAKKyAgICAgICAgICAtZmluc3RydW1lbnQtZnVuY3Rpb25zLWV4Y2x1ZGUtZnVuY3Rpb24tbGlzdD08dmFyPnN5bTwvdmFyPiw8dmFyPnN5bTwvdmFyPiwuLi4gCisgICAgICAgICAgLWZpbnN0cnVtZW50LWZ1bmN0aW9ucy1leGNsdWRlLWZpbGUtbGlzdD08dmFyPmZpbGU8L3Zhcj4sPHZhcj5maWxlPC92YXI+LC4uLiAKKyAgICAgICAgICAtZm5vLWNvbW1vbiAgLWZuby1pZGVudCAKKyAgICAgICAgICAtZnBjYy1zdHJ1Y3QtcmV0dXJuICAtZnBpYyAgLWZQSUMgLWZwaWUgLWZQSUUgCisgICAgICAgICAgLWZuby1qdW1wLXRhYmxlcyAKKyAgICAgICAgICAtZnJlY29yZC1nY2Mtc3dpdGNoZXMgCisgICAgICAgICAgLWZyZWctc3RydWN0LXJldHVybiAgLWZzaG9ydC1lbnVtcyAKKyAgICAgICAgICAtZnNob3J0LWRvdWJsZSAgLWZzaG9ydC13Y2hhciAKKyAgICAgICAgICAtZnZlcmJvc2UtYXNtICAtZnBhY2stc3RydWN0Wz08dmFyPm48L3Zhcj5dICAtZnN0YWNrLWNoZWNrIAorICAgICAgICAgIC1mc3RhY2stbGltaXQtcmVnaXN0ZXI9PHZhcj5yZWc8L3Zhcj4gIC1mc3RhY2stbGltaXQtc3ltYm9sPTx2YXI+c3ltPC92YXI+IAorICAgICAgICAgIC1mbm8tc3RhY2stbGltaXQgLWZzcGxpdC1zdGFjayAKKyAgICAgICAgICAtZmxlYWRpbmctdW5kZXJzY29yZSAgLWZ0bHMtbW9kZWw9PHZhcj5tb2RlbDwvdmFyPiAKKyAgICAgICAgICAtZnN0YWNrLXJldXNlPTx2YXI+cmV1c2VfbGV2ZWw8L3Zhcj4gCisgICAgICAgICAgLWZ0cmFwdiAgLWZ3cmFwdiAgLWZib3VuZHMtY2hlY2sgCisgICAgICAgICAgLWZ2aXNpYmlsaXR5IC1mc3RyaWN0LXZvbGF0aWxlLWJpdGZpZWxkcyAtZnN5bmMtbGliY2FsbHMKKzwvcHJlPgorICAgICA8L2RsPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj5PdmVyYWxsIE9wdGlvbnM8L2E+OiAgICAgIENvbnRyb2xsaW5nIHRoZSBraW5kIG9mIG91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuIGV4ZWN1dGFibGUsIG9iamVjdCBmaWxlcywgYXNzZW1ibGVyIGZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgcHJlcHJvY2Vzc2VkIHNvdXJjZS4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5DIERpYWxlY3QgT3B0aW9uczwvYT46ICAgIENvbnRyb2xsaW5nIHRoZSB2YXJpYW50IG9mIEMgbGFuZ3VhZ2UgY29tcGlsZWQuIAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPjogIFZhcmlhdGlvbnMgb24gQysrLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+OiAgVmFyaWF0aW9ucyBvbiBPYmplY3RpdmUtQworICAgICAgICAgICAgICAgICAgICAgICAgYW5kIE9iamVjdGl2ZS1DKysuIAorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+OiAgQ29udHJvbGxpbmcgaG93IGRpYWdub3N0aWNzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+V2FybmluZyBPcHRpb25zPC9hPjogICAgICBIb3cgcGlja3kgc2hvdWxkIHRoZSBjb21waWxlciBiZT8gCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT46ICAgIFN5bWJvbCB0YWJsZXMsIG1lYXN1cmVtZW50cywgYW5kIGRlYnVnZ2luZyBkdW1wcy4gCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJPcHRpbWl6ZS1PcHRpb25zLmh0bWwjT3B0aW1pemUtT3B0aW9ucyI+T3B0aW1pemUgT3B0aW9uczwvYT46ICAgICBIb3cgbXVjaCBvcHRpbWl6YXRpb24/IAorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iUHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzb3ItT3B0aW9ucyI+UHJlcHJvY2Vzc29yIE9wdGlvbnM8L2E+OiAgQ29udHJvbGxpbmcgaGVhZGVyIGZpbGVzIGFuZCBtYWNybyBkZWZpbml0aW9ucy4gCisgICAgICAgICAgICAgICAgICAgICAgICAgQWxzbywgZ2V0dGluZyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZvciBNYWtlLiAKKzxsaT48YSBocmVmPSJBc3NlbWJsZXItT3B0aW9ucy5odG1sI0Fzc2VtYmxlci1PcHRpb25zIj5Bc3NlbWJsZXIgT3B0aW9uczwvYT46ICAgIFBhc3Npbmcgb3B0aW9ucyB0byB0aGUgYXNzZW1ibGVyLiAKKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT46ICAgICAgICAgU3BlY2lmeWluZyBsaWJyYXJpZXMgYW5kIHNvIG9uLiAKKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT46ICAgIFdoZXJlIHRvIGZpbmQgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXMuIAorICAgICAgICAgICAgICAgICAgICAgICAgV2hlcmUgdG8gZmluZCB0aGUgY29tcGlsZXIgZXhlY3V0YWJsZSBmaWxlcy4gCis8bGk+PGEgaHJlZj0iU3BlYy1GaWxlcy5odG1sI1NwZWMtRmlsZXMiPlNwZWMgRmlsZXM8L2E+OiAgICAgICAgICAgSG93IHRvIHBhc3Mgc3dpdGNoZXMgdG8gc3ViLXByb2Nlc3Nlcy4gCis8bGk+PGEgaHJlZj0iVGFyZ2V0LU9wdGlvbnMuaHRtbCNUYXJnZXQtT3B0aW9ucyI+VGFyZ2V0IE9wdGlvbnM8L2E+OiAgICAgICBSdW5uaW5nIGEgY3Jvc3MtY29tcGlsZXIsIG9yIGFuIG9sZCB2ZXJzaW9uIG9mIEdDQy4gCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9PdGhlci1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL090aGVyLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDQzY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9PdGhlci1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3RoZXIgQnVpbHQtaW4gRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNGUl8wMDJkVi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iRlItViBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSYXctcmVhZF8wMDJmd3JpdGUtRnVuY3Rpb25zLmh0bWwjUmF3LXJlYWRfMDAyZndyaXRlLUZ1bmN0aW9ucyIgdGl0bGU9IlJhdyByZWFkL3dyaXRlIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPdGhlci1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9Ik90aGVyLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSYXctcmVhZF8wMDJmd3JpdGUtRnVuY3Rpb25zLmh0bWwjUmF3LXJlYWRfMDAyZndyaXRlLUZ1bmN0aW9ucyI+UmF3IHJlYWQvd3JpdGUgRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkZSLVYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni42LjUgT3RoZXIgQnVpbHQtaW4gRnVuY3Rpb25zPC9oNT4KKworPHA+VGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IG5hbWVkIGFmdGVyCithIHNwZWNpZmljIEZSLVYgaW5zdHJ1Y3Rpb24uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnN3MiBfX0lBQ0NyZWFkbGwgKGlhY2MgPC9jb2RlPjx2YXI+cmVnPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJuIHRoZSBmdWxsIDY0LWJpdCB2YWx1ZSBvZiBJQUNDMC4gIFRoZSA8dmFyPnJlZzwvdmFyPiBhcmd1bWVudCBpcyByZXNlcnZlZAorZm9yIGZ1dHVyZSBleHBhbnNpb24gYW5kIG11c3QgYmUgMC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnN3MSBfX0lBQ0NyZWFkbCAoaWFjYyA8L2NvZGU+PHZhcj5yZWc8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm4gdGhlIHZhbHVlIG9mIElBQ0MwSCBpZiA8dmFyPnJlZzwvdmFyPiBpcyAwIGFuZCBJQUNDMEwgaWYgPHZhcj5yZWc8L3Zhcj4gaXMgMS4gCitPdGhlciB2YWx1ZXMgb2YgPHZhcj5yZWc8L3Zhcj4gYXJlIHJlamVjdGVkIGFzIGludmFsaWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT52b2lkIF9fSUFDQ3NldGxsIChpYWNjIDwvY29kZT48dmFyPnJlZzwvdmFyPjxjb2RlPiwgc3cyIDwvY29kZT48dmFyPng8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5TZXQgdGhlIGZ1bGwgNjQtYml0IHZhbHVlIG9mIElBQ0MwIHRvIDx2YXI+eDwvdmFyPi4gIFRoZSA8dmFyPnJlZzwvdmFyPiBhcmd1bWVudAoraXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHBhbnNpb24gYW5kIG11c3QgYmUgMC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnZvaWQgX19JQUNDc2V0bCAoaWFjYyA8L2NvZGU+PHZhcj5yZWc8L3Zhcj48Y29kZT4sIHN3MSA8L2NvZGU+PHZhcj54PC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+U2V0IElBQ0MwSCB0byA8dmFyPng8L3Zhcj4gaWYgPHZhcj5yZWc8L3Zhcj4gaXMgMCBhbmQgSUFDQzBMIHRvIDx2YXI+eDwvdmFyPiBpZiA8dmFyPnJlZzwvdmFyPgoraXMgMS4gIE90aGVyIHZhbHVlcyBvZiA8dmFyPnJlZzwvdmFyPiBhcmUgcmVqZWN0ZWQgYXMgaW52YWxpZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnZvaWQgX19kYXRhX3ByZWZldGNoMCAoY29uc3Qgdm9pZCAqPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlVzZSB0aGUgPGNvZGU+ZGNwbDwvY29kZT4gaW5zdHJ1Y3Rpb24gdG8gbG9hZCB0aGUgY29udGVudHMgb2YgYWRkcmVzcyA8dmFyPng8L3Zhcj4KK2ludG8gdGhlIGRhdGEgY2FjaGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT52b2lkIF9fZGF0YV9wcmVmZXRjaCAoY29uc3Qgdm9pZCAqPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlVzZSB0aGUgPGNvZGU+bmxkdWI8L2NvZGU+IGluc3RydWN0aW9uIHRvIGxvYWQgdGhlIGNvbnRlbnRzIG9mIGFkZHJlc3MgPHZhcj54PC92YXI+CitpbnRvIHRoZSBkYXRhIGNhY2hlLiAgVGhlIGluc3RydWN0aW9uIGlzIGlzc3VlZCBpbiBzbG90IEkxLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL090aGVyLUJ1aWx0aW5zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL090aGVyLUJ1aWx0aW5zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0YWY5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT3RoZXItQnVpbHRpbnMuaHRtbApAQCAtMCwwICsxLDgxMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3RoZXIgQnVpbHRpbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyIgdGl0bGU9Ik9iamVjdCBTaXplIENoZWNraW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIiB0aXRsZT0iVGFyZ2V0IEJ1aWx0aW5zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik90aGVyLUJ1aWx0aW5zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNTUgT3RoZXIgQnVpbHQtaW4gRnVuY3Rpb25zIFByb3ZpZGVkIGJ5IEdDQzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWJ1aWx0XzAwMmRpbi1mdW5jdGlvbnMtMjk1MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZmcGNsYXNzaWZ5LTI5NTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaXNmaW5pdGUtMjk1NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpc25vcm1hbC0yOTU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmlzZ3JlYXRlci0yOTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmlzZ3JlYXRlcmVxdWFsLTI5NTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaXNpbmZfMDA1ZnNpZ24tMjk1OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpc2xlc3MtMjk2MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpc2xlc3NlcXVhbC0yOTYxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmlzbGVzc2dyZWF0ZXItMjk2MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpc3Vub3JkZXJlZC0yOTYzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnBvd2ktMjk2NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwb3dpZi0yOTY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnBvd2lsLTI5NjYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZkV4aXQtMjk2NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZXhpdC0yOTY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWJvcnQtMjk2OSI+PC9hPjxhIG5hbWU9ImluZGV4LWFicy0yOTcwIj48L2E+PGEgbmFtZT0iaW5kZXgtYWNvcy0yOTcxIj48L2E+PGEgbmFtZT0iaW5kZXgtYWNvc2YtMjk3MiI+PC9hPjxhIG5hbWU9ImluZGV4LWFjb3NoLTI5NzMiPjwvYT48YSBuYW1lPSJpbmRleC1hY29zaGYtMjk3NCI+PC9hPjxhIG5hbWU9ImluZGV4LWFjb3NobC0yOTc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWNvc2wtMjk3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWFsbG9jYS0yOTc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXNpbi0yOTc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXNpbmYtMjk3OSI+PC9hPjxhIG5hbWU9ImluZGV4LWFzaW5oLTI5ODAiPjwvYT48YSBuYW1lPSJpbmRleC1hc2luaGYtMjk4MSI+PC9hPjxhIG5hbWU9ImluZGV4LWFzaW5obC0yOTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtYXNpbmwtMjk4MyI+PC9hPjxhIG5hbWU9ImluZGV4LWF0YW4tMjk4NCI+PC9hPjxhIG5hbWU9ImluZGV4LWF0YW4yLTI5ODUiPjwvYT48YSBuYW1lPSJpbmRleC1hdGFuMmYtMjk4NiI+PC9hPjxhIG5hbWU9ImluZGV4LWF0YW4ybC0yOTg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXRhbmYtMjk4OCI+PC9hPjxhIG5hbWU9ImluZGV4LWF0YW5oLTI5ODkiPjwvYT48YSBuYW1lPSJpbmRleC1hdGFuaGYtMjk5MCI+PC9hPjxhIG5hbWU9ImluZGV4LWF0YW5obC0yOTkxIj48L2E+PGEgbmFtZT0iaW5kZXgtYXRhbmwtMjk5MiI+PC9hPjxhIG5hbWU9ImluZGV4LWJjbXAtMjk5MyI+PC9hPjxhIG5hbWU9ImluZGV4LWJ6ZXJvLTI5OTQiPjwvYT48YSBuYW1lPSJpbmRleC1jYWJzLTI5OTUiPjwvYT48YSBuYW1lPSJpbmRleC1jYWJzZi0yOTk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2Fic2wtMjk5NyI+PC9hPjxhIG5hbWU9ImluZGV4LWNhY29zLTI5OTgiPjwvYT48YSBuYW1lPSJpbmRleC1jYWNvc2YtMjk5OSI+PC9hPjxhIG5hbWU9ImluZGV4LWNhY29zaC0zMDAwIj48L2E+PGEgbmFtZT0iaW5kZXgtY2Fjb3NoZi0zMDAxIj48L2E+PGEgbmFtZT0iaW5kZXgtY2Fjb3NobC0zMDAyIj48L2E+PGEgbmFtZT0iaW5kZXgtY2Fjb3NsLTMwMDMiPjwvYT48YSBuYW1lPSJpbmRleC1jYWxsb2MtMzAwNCI+PC9hPjxhIG5hbWU9ImluZGV4LWNhcmctMzAwNSI+PC9hPjxhIG5hbWU9ImluZGV4LWNhcmdmLTMwMDYiPjwvYT48YSBuYW1lPSJpbmRleC1jYXJnbC0zMDA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2FzaW4tMzAwOCI+PC9hPjxhIG5hbWU9ImluZGV4LWNhc2luZi0zMDA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2FzaW5oLTMwMTAiPjwvYT48YSBuYW1lPSJpbmRleC1jYXNpbmhmLTMwMTEiPjwvYT48YSBuYW1lPSJpbmRleC1jYXNpbmhsLTMwMTIiPjwvYT48YSBuYW1lPSJpbmRleC1jYXNpbmwtMzAxMyI+PC9hPjxhIG5hbWU9ImluZGV4LWNhdGFuLTMwMTQiPjwvYT48YSBuYW1lPSJpbmRleC1jYXRhbmYtMzAxNSI+PC9hPjxhIG5hbWU9ImluZGV4LWNhdGFuaC0zMDE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2F0YW5oZi0zMDE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2F0YW5obC0zMDE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2F0YW5sLTMwMTkiPjwvYT48YSBuYW1lPSJpbmRleC1jYnJ0LTMwMjAiPjwvYT48YSBuYW1lPSJpbmRleC1jYnJ0Zi0zMDIxIj48L2E+PGEgbmFtZT0iaW5kZXgtY2JydGwtMzAyMiI+PC9hPjxhIG5hbWU9ImluZGV4LWNjb3MtMzAyMyI+PC9hPjxhIG5hbWU9ImluZGV4LWNjb3NmLTMwMjQiPjwvYT48YSBuYW1lPSJpbmRleC1jY29zaC0zMDI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2Nvc2hmLTMwMjYiPjwvYT48YSBuYW1lPSJpbmRleC1jY29zaGwtMzAyNyI+PC9hPjxhIG5hbWU9ImluZGV4LWNjb3NsLTMwMjgiPjwvYT48YSBuYW1lPSJpbmRleC1jZWlsLTMwMjkiPjwvYT48YSBuYW1lPSJpbmRleC1jZWlsZi0zMDMwIj48L2E+PGEgbmFtZT0iaW5kZXgtY2VpbGwtMzAzMSI+PC9hPjxhIG5hbWU9ImluZGV4LWNleHAtMzAzMiI+PC9hPjxhIG5hbWU9ImluZGV4LWNleHBmLTMwMzMiPjwvYT48YSBuYW1lPSJpbmRleC1jZXhwbC0zMDM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2ltYWctMzAzNSI+PC9hPjxhIG5hbWU9ImluZGV4LWNpbWFnZi0zMDM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2ltYWdsLTMwMzciPjwvYT48YSBuYW1lPSJpbmRleC1jbG9nLTMwMzgiPjwvYT48YSBuYW1lPSJpbmRleC1jbG9nZi0zMDM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2xvZ2wtMzA0MCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbmotMzA0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbmpmLTMwNDIiPjwvYT48YSBuYW1lPSJpbmRleC1jb25qbC0zMDQzIj48L2E+PGEgbmFtZT0iaW5kZXgtY29weXNpZ24tMzA0NCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvcHlzaWduZi0zMDQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29weXNpZ25sLTMwNDYiPjwvYT48YSBuYW1lPSJpbmRleC1jb3MtMzA0NyI+PC9hPjxhIG5hbWU9ImluZGV4LWNvc2YtMzA0OCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvc2gtMzA0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvc2hmLTMwNTAiPjwvYT48YSBuYW1lPSJpbmRleC1jb3NobC0zMDUxIj48L2E+PGEgbmFtZT0iaW5kZXgtY29zbC0zMDUyIj48L2E+PGEgbmFtZT0iaW5kZXgtY3Bvdy0zMDUzIj48L2E+PGEgbmFtZT0iaW5kZXgtY3Bvd2YtMzA1NCI+PC9hPjxhIG5hbWU9ImluZGV4LWNwb3dsLTMwNTUiPjwvYT48YSBuYW1lPSJpbmRleC1jcHJvai0zMDU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY3Byb2pmLTMwNTciPjwvYT48YSBuYW1lPSJpbmRleC1jcHJvamwtMzA1OCI+PC9hPjxhIG5hbWU9ImluZGV4LWNyZWFsLTMwNTkiPjwvYT48YSBuYW1lPSJpbmRleC1jcmVhbGYtMzA2MCI+PC9hPjxhIG5hbWU9ImluZGV4LWNyZWFsbC0zMDYxIj48L2E+PGEgbmFtZT0iaW5kZXgtY3Npbi0zMDYyIj48L2E+PGEgbmFtZT0iaW5kZXgtY3NpbmYtMzA2MyI+PC9hPjxhIG5hbWU9ImluZGV4LWNzaW5oLTMwNjQiPjwvYT48YSBuYW1lPSJpbmRleC1jc2luaGYtMzA2NSI+PC9hPjxhIG5hbWU9ImluZGV4LWNzaW5obC0zMDY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY3NpbmwtMzA2NyI+PC9hPjxhIG5hbWU9ImluZGV4LWNzcXJ0LTMwNjgiPjwvYT48YSBuYW1lPSJpbmRleC1jc3FydGYtMzA2OSI+PC9hPjxhIG5hbWU9ImluZGV4LWNzcXJ0bC0zMDcwIj48L2E+PGEgbmFtZT0iaW5kZXgtY3Rhbi0zMDcxIj48L2E+PGEgbmFtZT0iaW5kZXgtY3RhbmYtMzA3MiI+PC9hPjxhIG5hbWU9ImluZGV4LWN0YW5oLTMwNzMiPjwvYT48YSBuYW1lPSJpbmRleC1jdGFuaGYtMzA3NCI+PC9hPjxhIG5hbWU9ImluZGV4LWN0YW5obC0zMDc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtY3RhbmwtMzA3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWRjZ2V0dGV4dC0zMDc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGdldHRleHQtMzA3OCI+PC9hPjxhIG5hbWU9ImluZGV4LWRyZW0tMzA3OSI+PC9hPjxhIG5hbWU9ImluZGV4LWRyZW1mLTMwODAiPjwvYT48YSBuYW1lPSJpbmRleC1kcmVtbC0zMDgxIj48L2E+PGEgbmFtZT0iaW5kZXgtZXJmLTMwODIiPjwvYT48YSBuYW1lPSJpbmRleC1lcmZjLTMwODMiPjwvYT48YSBuYW1lPSJpbmRleC1lcmZjZi0zMDg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXJmY2wtMzA4NSI+PC9hPjxhIG5hbWU9ImluZGV4LWVyZmYtMzA4NiI+PC9hPjxhIG5hbWU9ImluZGV4LWVyZmwtMzA4NyI+PC9hPjxhIG5hbWU9ImluZGV4LWV4aXQtMzA4OCI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cC0zMDg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXhwMTAtMzA5MCI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cDEwZi0zMDkxIj48L2E+PGEgbmFtZT0iaW5kZXgtZXhwMTBsLTMwOTIiPjwvYT48YSBuYW1lPSJpbmRleC1leHAyLTMwOTMiPjwvYT48YSBuYW1lPSJpbmRleC1leHAyZi0zMDk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXhwMmwtMzA5NSI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cGYtMzA5NiI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cGwtMzA5NyI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cG0xLTMwOTgiPjwvYT48YSBuYW1lPSJpbmRleC1leHBtMWYtMzA5OSI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cG0xbC0zMTAwIj48L2E+PGEgbmFtZT0iaW5kZXgtZmFicy0zMTAxIj48L2E+PGEgbmFtZT0iaW5kZXgtZmFic2YtMzEwMiI+PC9hPjxhIG5hbWU9ImluZGV4LWZhYnNsLTMxMDMiPjwvYT48YSBuYW1lPSJpbmRleC1mZGltLTMxMDQiPjwvYT48YSBuYW1lPSJpbmRleC1mZGltZi0zMTA1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmRpbWwtMzEwNiI+PC9hPjxhIG5hbWU9ImluZGV4LWZmcy0zMTA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmxvb3ItMzEwOCI+PC9hPjxhIG5hbWU9ImluZGV4LWZsb29yZi0zMTA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmxvb3JsLTMxMTAiPjwvYT48YSBuYW1lPSJpbmRleC1mbWEtMzExMSI+PC9hPjxhIG5hbWU9ImluZGV4LWZtYWYtMzExMiI+PC9hPjxhIG5hbWU9ImluZGV4LWZtYWwtMzExMyI+PC9hPjxhIG5hbWU9ImluZGV4LWZtYXgtMzExNCI+PC9hPjxhIG5hbWU9ImluZGV4LWZtYXhmLTMxMTUiPjwvYT48YSBuYW1lPSJpbmRleC1mbWF4bC0zMTE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZm1pbi0zMTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZm1pbmYtMzExOCI+PC9hPjxhIG5hbWU9ImluZGV4LWZtaW5sLTMxMTkiPjwvYT48YSBuYW1lPSJpbmRleC1mbW9kLTMxMjAiPjwvYT48YSBuYW1lPSJpbmRleC1mbW9kZi0zMTIxIj48L2E+PGEgbmFtZT0iaW5kZXgtZm1vZGwtMzEyMiI+PC9hPjxhIG5hbWU9ImluZGV4LWZwcmludGYtMzEyMyI+PC9hPjxhIG5hbWU9ImluZGV4LWZwcmludGZfMDA1ZnVubG9ja2VkLTMxMjQiPjwvYT48YSBuYW1lPSJpbmRleC1mcHV0cy0zMTI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnB1dHNfMDA1ZnVubG9ja2VkLTMxMjYiPjwvYT48YSBuYW1lPSJpbmRleC1mcmV4cC0zMTI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnJleHBmLTMxMjgiPjwvYT48YSBuYW1lPSJpbmRleC1mcmV4cGwtMzEyOSI+PC9hPjxhIG5hbWU9ImluZGV4LWZzY2FuZi0zMTMwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ2FtbWEtMzEzMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdhbW1hZi0zMTMyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ2FtbWFsLTMxMzMiPjwvYT48YSBuYW1lPSJpbmRleC1nYW1tYV8wMDVmci0zMTM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ2FtbWFmXzAwNWZyLTMxMzUiPjwvYT48YSBuYW1lPSJpbmRleC1nYW1tYWxfMDA1ZnItMzEzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdldHRleHQtMzEzNyI+PC9hPjxhIG5hbWU9ImluZGV4LWh5cG90LTMxMzgiPjwvYT48YSBuYW1lPSJpbmRleC1oeXBvdGYtMzEzOSI+PC9hPjxhIG5hbWU9ImluZGV4LWh5cG90bC0zMTQwIj48L2E+PGEgbmFtZT0iaW5kZXgtaWxvZ2ItMzE0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWlsb2diZi0zMTQyIj48L2E+PGEgbmFtZT0iaW5kZXgtaWxvZ2JsLTMxNDMiPjwvYT48YSBuYW1lPSJpbmRleC1pbWF4YWJzLTMxNDQiPjwvYT48YSBuYW1lPSJpbmRleC1pbmRleC0zMTQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNhbG51bS0zMTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNhbHBoYS0zMTQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNhc2NpaS0zMTQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNibGFuay0zMTQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNjbnRybC0zMTUwIj48L2E+PGEgbmFtZT0iaW5kZXgtaXNkaWdpdC0zMTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtaXNncmFwaC0zMTUyIj48L2E+PGEgbmFtZT0iaW5kZXgtaXNsb3dlci0zMTUzIj48L2E+PGEgbmFtZT0iaW5kZXgtaXNwcmludC0zMTU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNwdW5jdC0zMTU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNzcGFjZS0zMTU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXN1cHBlci0zMTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXN3YWxudW0tMzE1OCI+PC9hPjxhIG5hbWU9ImluZGV4LWlzd2FscGhhLTMxNTkiPjwvYT48YSBuYW1lPSJpbmRleC1pc3dibGFuay0zMTYwIj48L2E+PGEgbmFtZT0iaW5kZXgtaXN3Y250cmwtMzE2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWlzd2RpZ2l0LTMxNjIiPjwvYT48YSBuYW1lPSJpbmRleC1pc3dncmFwaC0zMTYzIj48L2E+PGEgbmFtZT0iaW5kZXgtaXN3bG93ZXItMzE2NCI+PC9hPjxhIG5hbWU9ImluZGV4LWlzd3ByaW50LTMxNjUiPjwvYT48YSBuYW1lPSJpbmRleC1pc3dwdW5jdC0zMTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXN3c3BhY2UtMzE2NyI+PC9hPjxhIG5hbWU9ImluZGV4LWlzd3VwcGVyLTMxNjgiPjwvYT48YSBuYW1lPSJpbmRleC1pc3d4ZGlnaXQtMzE2OSI+PC9hPjxhIG5hbWU9ImluZGV4LWlzeGRpZ2l0LTMxNzAiPjwvYT48YSBuYW1lPSJpbmRleC1qMC0zMTcxIj48L2E+PGEgbmFtZT0iaW5kZXgtajBmLTMxNzIiPjwvYT48YSBuYW1lPSJpbmRleC1qMGwtMzE3MyI+PC9hPjxhIG5hbWU9ImluZGV4LWoxLTMxNzQiPjwvYT48YSBuYW1lPSJpbmRleC1qMWYtMzE3NSI+PC9hPjxhIG5hbWU9ImluZGV4LWoxbC0zMTc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtam4tMzE3NyI+PC9hPjxhIG5hbWU9ImluZGV4LWpuZi0zMTc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtam5sLTMxNzkiPjwvYT48YSBuYW1lPSJpbmRleC1sYWJzLTMxODAiPjwvYT48YSBuYW1lPSJpbmRleC1sZGV4cC0zMTgxIj48L2E+PGEgbmFtZT0iaW5kZXgtbGRleHBmLTMxODIiPjwvYT48YSBuYW1lPSJpbmRleC1sZGV4cGwtMzE4MyI+PC9hPjxhIG5hbWU9ImluZGV4LWxnYW1tYS0zMTg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGdhbW1hZi0zMTg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGdhbW1hbC0zMTg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGdhbW1hXzAwNWZyLTMxODciPjwvYT48YSBuYW1lPSJpbmRleC1sZ2FtbWFmXzAwNWZyLTMxODgiPjwvYT48YSBuYW1lPSJpbmRleC1sZ2FtbWFsXzAwNWZyLTMxODkiPjwvYT48YSBuYW1lPSJpbmRleC1sbGFicy0zMTkwIj48L2E+PGEgbmFtZT0iaW5kZXgtbGxyaW50LTMxOTEiPjwvYT48YSBuYW1lPSJpbmRleC1sbHJpbnRmLTMxOTIiPjwvYT48YSBuYW1lPSJpbmRleC1sbHJpbnRsLTMxOTMiPjwvYT48YSBuYW1lPSJpbmRleC1sbHJvdW5kLTMxOTQiPjwvYT48YSBuYW1lPSJpbmRleC1sbHJvdW5kZi0zMTk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGxyb3VuZGwtMzE5NiI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZy0zMTk3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9nMTAtMzE5OCI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZzEwZi0zMTk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9nMTBsLTMyMDAiPjwvYT48YSBuYW1lPSJpbmRleC1sb2cxcC0zMjAxIj48L2E+PGEgbmFtZT0iaW5kZXgtbG9nMXBmLTMyMDIiPjwvYT48YSBuYW1lPSJpbmRleC1sb2cxcGwtMzIwMyI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZzItMzIwNCI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZzJmLTMyMDUiPjwvYT48YSBuYW1lPSJpbmRleC1sb2cybC0zMjA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9nYi0zMjA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9nYmYtMzIwOCI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZ2JsLTMyMDkiPjwvYT48YSBuYW1lPSJpbmRleC1sb2dmLTMyMTAiPjwvYT48YSBuYW1lPSJpbmRleC1sb2dsLTMyMTEiPjwvYT48YSBuYW1lPSJpbmRleC1scmludC0zMjEyIj48L2E+PGEgbmFtZT0iaW5kZXgtbHJpbnRmLTMyMTMiPjwvYT48YSBuYW1lPSJpbmRleC1scmludGwtMzIxNCI+PC9hPjxhIG5hbWU9ImluZGV4LWxyb3VuZC0zMjE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbHJvdW5kZi0zMjE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbHJvdW5kbC0zMjE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWFsbG9jLTMyMTgiPjwvYT48YSBuYW1lPSJpbmRleC1tZW1jaHItMzIxOSI+PC9hPjxhIG5hbWU9ImluZGV4LW1lbWNtcC0zMjIwIj48L2E+PGEgbmFtZT0iaW5kZXgtbWVtY3B5LTMyMjEiPjwvYT48YSBuYW1lPSJpbmRleC1tZW1wY3B5LTMyMjIiPjwvYT48YSBuYW1lPSJpbmRleC1tZW1zZXQtMzIyMyI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZGYtMzIyNCI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZGZmLTMyMjUiPjwvYT48YSBuYW1lPSJpbmRleC1tb2RmbC0zMjI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbmVhcmJ5aW50LTMyMjciPjwvYT48YSBuYW1lPSJpbmRleC1uZWFyYnlpbnRmLTMyMjgiPjwvYT48YSBuYW1lPSJpbmRleC1uZWFyYnlpbnRsLTMyMjkiPjwvYT48YSBuYW1lPSJpbmRleC1uZXh0YWZ0ZXItMzIzMCI+PC9hPjxhIG5hbWU9ImluZGV4LW5leHRhZnRlcmYtMzIzMSI+PC9hPjxhIG5hbWU9ImluZGV4LW5leHRhZnRlcmwtMzIzMiI+PC9hPjxhIG5hbWU9ImluZGV4LW5leHR0b3dhcmQtMzIzMyI+PC9hPjxhIG5hbWU9ImluZGV4LW5leHR0b3dhcmRmLTMyMzQiPjwvYT48YSBuYW1lPSJpbmRleC1uZXh0dG93YXJkbC0zMjM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcG93LTMyMzYiPjwvYT48YSBuYW1lPSJpbmRleC1wb3cxMC0zMjM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtcG93MTBmLTMyMzgiPjwvYT48YSBuYW1lPSJpbmRleC1wb3cxMGwtMzIzOSI+PC9hPjxhIG5hbWU9ImluZGV4LXBvd2YtMzI0MCI+PC9hPjxhIG5hbWU9ImluZGV4LXBvd2wtMzI0MSI+PC9hPjxhIG5hbWU9ImluZGV4LXByaW50Zi0zMjQyIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJpbnRmXzAwNWZ1bmxvY2tlZC0zMjQzIj48L2E+PGEgbmFtZT0iaW5kZXgtcHV0Y2hhci0zMjQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHV0cy0zMjQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVtYWluZGVyLTMyNDYiPjwvYT48YSBuYW1lPSJpbmRleC1yZW1haW5kZXJmLTMyNDciPjwvYT48YSBuYW1lPSJpbmRleC1yZW1haW5kZXJsLTMyNDgiPjwvYT48YSBuYW1lPSJpbmRleC1yZW1xdW8tMzI0OSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbXF1b2YtMzI1MCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbXF1b2wtMzI1MSI+PC9hPjxhIG5hbWU9ImluZGV4LXJpbmRleC0zMjUyIj48L2E+PGEgbmFtZT0iaW5kZXgtcmludC0zMjUzIj48L2E+PGEgbmFtZT0iaW5kZXgtcmludGYtMzI1NCI+PC9hPjxhIG5hbWU9ImluZGV4LXJpbnRsLTMyNTUiPjwvYT48YSBuYW1lPSJpbmRleC1yb3VuZC0zMjU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcm91bmRmLTMyNTciPjwvYT48YSBuYW1lPSJpbmRleC1yb3VuZGwtMzI1OCI+PC9hPjxhIG5hbWU9ImluZGV4LXNjYWxiLTMyNTkiPjwvYT48YSBuYW1lPSJpbmRleC1zY2FsYmYtMzI2MCI+PC9hPjxhIG5hbWU9ImluZGV4LXNjYWxibC0zMjYxIj48L2E+PGEgbmFtZT0iaW5kZXgtc2NhbGJsbi0zMjYyIj48L2E+PGEgbmFtZT0iaW5kZXgtc2NhbGJsbmYtMzI2MyI+PC9hPjxhIG5hbWU9ImluZGV4LXNjYWxibG5mLTMyNjQiPjwvYT48YSBuYW1lPSJpbmRleC1zY2FsYm4tMzI2NSI+PC9hPjxhIG5hbWU9ImluZGV4LXNjYWxibmYtMzI2NiI+PC9hPjxhIG5hbWU9ImluZGV4LXNjYW5mbmwtMzI2NyI+PC9hPjxhIG5hbWU9ImluZGV4LXNpZ25iaXQtMzI2OCI+PC9hPjxhIG5hbWU9ImluZGV4LXNpZ25iaXRmLTMyNjkiPjwvYT48YSBuYW1lPSJpbmRleC1zaWduYml0bC0zMjcwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2lnbmJpdGQzMi0zMjcxIj48L2E+PGEgbmFtZT0iaW5kZXgtc2lnbmJpdGQ2NC0zMjcyIj48L2E+PGEgbmFtZT0iaW5kZXgtc2lnbmJpdGQxMjgtMzI3MyI+PC9hPjxhIG5hbWU9ImluZGV4LXNpZ25pZmljYW5kLTMyNzQiPjwvYT48YSBuYW1lPSJpbmRleC1zaWduaWZpY2FuZGYtMzI3NSI+PC9hPjxhIG5hbWU9ImluZGV4LXNpZ25pZmljYW5kbC0zMjc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2luLTMyNzciPjwvYT48YSBuYW1lPSJpbmRleC1zaW5jb3MtMzI3OCI+PC9hPjxhIG5hbWU9ImluZGV4LXNpbmNvc2YtMzI3OSI+PC9hPjxhIG5hbWU9ImluZGV4LXNpbmNvc2wtMzI4MCI+PC9hPjxhIG5hbWU9ImluZGV4LXNpbmYtMzI4MSI+PC9hPjxhIG5hbWU9ImluZGV4LXNpbmgtMzI4MiI+PC9hPjxhIG5hbWU9ImluZGV4LXNpbmhmLTMyODMiPjwvYT48YSBuYW1lPSJpbmRleC1zaW5obC0zMjg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2lubC0zMjg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc25wcmludGYtMzI4NiI+PC9hPjxhIG5hbWU9ImluZGV4LXNwcmludGYtMzI4NyI+PC9hPjxhIG5hbWU9ImluZGV4LXNxcnQtMzI4OCI+PC9hPjxhIG5hbWU9ImluZGV4LXNxcnRmLTMyODkiPjwvYT48YSBuYW1lPSJpbmRleC1zcXJ0bC0zMjkwIj48L2E+PGEgbmFtZT0iaW5kZXgtc3NjYW5mLTMyOTEiPjwvYT48YSBuYW1lPSJpbmRleC1zdHBjcHktMzI5MiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cG5jcHktMzI5MyI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmNhc2VjbXAtMzI5NCI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmNhdC0zMjk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyY2hyLTMyOTYiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJjbXAtMzI5NyI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmNweS0zMjk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyY3Nwbi0zMjk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyZHVwLTMzMDAiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJmbW9uLTMzMDEiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJmdGltZS0zMzAyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RybGVuLTMzMDMiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJuY2FzZWNtcC0zMzA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RybmNhdC0zMzA1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RybmNtcC0zMzA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RybmNweS0zMzA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RybmR1cC0zMzA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RycGJyay0zMzA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RycmNoci0zMzEwIj48L2E+PGEgbmFtZT0iaW5kZXgtc3Ryc3BuLTMzMTEiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJzdHItMzMxMiI+PC9hPjxhIG5hbWU9ImluZGV4LXRhbi0zMzEzIj48L2E+PGEgbmFtZT0iaW5kZXgtdGFuZi0zMzE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtdGFuaC0zMzE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtdGFuaGYtMzMxNiI+PC9hPjxhIG5hbWU9ImluZGV4LXRhbmhsLTMzMTciPjwvYT48YSBuYW1lPSJpbmRleC10YW5sLTMzMTgiPjwvYT48YSBuYW1lPSJpbmRleC10Z2FtbWEtMzMxOSI+PC9hPjxhIG5hbWU9ImluZGV4LXRnYW1tYWYtMzMyMCI+PC9hPjxhIG5hbWU9ImluZGV4LXRnYW1tYWwtMzMyMSI+PC9hPjxhIG5hbWU9ImluZGV4LXRvYXNjaWktMzMyMiI+PC9hPjxhIG5hbWU9ImluZGV4LXRvbG93ZXItMzMyMyI+PC9hPjxhIG5hbWU9ImluZGV4LXRvdXBwZXItMzMyNCI+PC9hPjxhIG5hbWU9ImluZGV4LXRvd2xvd2VyLTMzMjUiPjwvYT48YSBuYW1lPSJpbmRleC10b3d1cHBlci0zMzI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtdHJ1bmMtMzMyNyI+PC9hPjxhIG5hbWU9ImluZGV4LXRydW5jZi0zMzI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtdHJ1bmNsLTMzMjkiPjwvYT48YSBuYW1lPSJpbmRleC12ZnByaW50Zi0zMzMwIj48L2E+PGEgbmFtZT0iaW5kZXgtdmZzY2FuZi0zMzMxIj48L2E+PGEgbmFtZT0iaW5kZXgtdnByaW50Zi0zMzMyIj48L2E+PGEgbmFtZT0iaW5kZXgtdnNjYW5mLTMzMzMiPjwvYT48YSBuYW1lPSJpbmRleC12c25wcmludGYtMzMzNCI+PC9hPjxhIG5hbWU9ImluZGV4LXZzcHJpbnRmLTMzMzUiPjwvYT48YSBuYW1lPSJpbmRleC12c3NjYW5mLTMzMzYiPjwvYT48YSBuYW1lPSJpbmRleC15MC0zMzM3Ij48L2E+PGEgbmFtZT0iaW5kZXgteTBmLTMzMzgiPjwvYT48YSBuYW1lPSJpbmRleC15MGwtMzMzOSI+PC9hPjxhIG5hbWU9ImluZGV4LXkxLTMzNDAiPjwvYT48YSBuYW1lPSJpbmRleC15MWYtMzM0MSI+PC9hPjxhIG5hbWU9ImluZGV4LXkxbC0zMzQyIj48L2E+PGEgbmFtZT0iaW5kZXgteW4tMzM0MyI+PC9hPjxhIG5hbWU9ImluZGV4LXluZi0zMzQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgteW5sLTMzNDUiPjwvYT4KK0dDQyBwcm92aWRlcyBhIGxhcmdlIG51bWJlciBvZiBidWlsdC1pbiBmdW5jdGlvbnMgb3RoZXIgdGhhbiB0aGUgb25lcworbWVudGlvbmVkIGFib3ZlLiAgU29tZSBvZiB0aGVzZSBhcmUgZm9yIGludGVybmFsIHVzZSBpbiB0aGUgcHJvY2Vzc2luZworb2YgZXhjZXB0aW9ucyBvciB2YXJpYWJsZS1sZW5ndGggYXJndW1lbnQgbGlzdHMgYW5kIGFyZSBub3QKK2RvY3VtZW50ZWQgaGVyZSBiZWNhdXNlIHRoZXkgbWF5IGNoYW5nZSBmcm9tIHRpbWUgdG8gdGltZTsgd2UgZG8gbm90CityZWNvbW1lbmQgZ2VuZXJhbCB1c2Ugb2YgdGhlc2UgZnVuY3Rpb25zLgorCisgPHA+VGhlIHJlbWFpbmluZyBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBvcHRpbWl6YXRpb24gcHVycG9zZXMuCisKKyA8cD48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGJ1aWx0aW4tMzM0NiI+PC9hPkdDQyBpbmNsdWRlcyBidWlsdC1pbiB2ZXJzaW9ucyBvZiBtYW55IG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhlIHN0YW5kYXJkCitDIGxpYnJhcnkuICBUaGUgdmVyc2lvbnMgcHJlZml4ZWQgd2l0aCA8Y29kZT5fX2J1aWx0aW5fPC9jb2RlPiBhcmUgYWx3YXlzCit0cmVhdGVkIGFzIGhhdmluZyB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZSBDIGxpYnJhcnkgZnVuY3Rpb24gZXZlbiBpZiB5b3UKK3NwZWNpZnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYnVpbHRpbjwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gIChzZWUgPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+QyBEaWFsZWN0IE9wdGlvbnM8L2E+KQorTWFueSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgb3B0aW1pemVkIGluIGNlcnRhaW4gY2FzZXM7IGlmIHRoZXkgYXJlCitub3Qgb3B0aW1pemVkIGluIGEgcGFydGljdWxhciBjYXNlLCBhIGNhbGwgdG8gdGhlIGxpYnJhcnkgZnVuY3Rpb24gaXMKK2VtaXR0ZWQuCisKKyA8cD48YSBuYW1lPSJpbmRleC1hbnNpLTMzNDciPjwvYT48YSBuYW1lPSJpbmRleC1zdGQtMzM0OCI+PC9hPk91dHNpZGUgc3RyaWN0IElTTyBDIG1vZGUgKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzkwPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWM5OTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzExPC9zcGFuPjwvc2FtcD4pLCB0aGUgZnVuY3Rpb25zCis8Y29kZT5fZXhpdDwvY29kZT4sIDxjb2RlPmFsbG9jYTwvY29kZT4sIDxjb2RlPmJjbXA8L2NvZGU+LCA8Y29kZT5iemVybzwvY29kZT4sCis8Y29kZT5kY2dldHRleHQ8L2NvZGU+LCA8Y29kZT5kZ2V0dGV4dDwvY29kZT4sIDxjb2RlPmRyZW1mPC9jb2RlPiwgPGNvZGU+ZHJlbWw8L2NvZGU+LAorPGNvZGU+ZHJlbTwvY29kZT4sIDxjb2RlPmV4cDEwZjwvY29kZT4sIDxjb2RlPmV4cDEwbDwvY29kZT4sIDxjb2RlPmV4cDEwPC9jb2RlPiwgPGNvZGU+ZmZzbGw8L2NvZGU+LAorPGNvZGU+ZmZzbDwvY29kZT4sIDxjb2RlPmZmczwvY29kZT4sIDxjb2RlPmZwcmludGZfdW5sb2NrZWQ8L2NvZGU+LAorPGNvZGU+ZnB1dHNfdW5sb2NrZWQ8L2NvZGU+LCA8Y29kZT5nYW1tYWY8L2NvZGU+LCA8Y29kZT5nYW1tYWw8L2NvZGU+LCA8Y29kZT5nYW1tYTwvY29kZT4sCis8Y29kZT5nYW1tYWZfcjwvY29kZT4sIDxjb2RlPmdhbW1hbF9yPC9jb2RlPiwgPGNvZGU+Z2FtbWFfcjwvY29kZT4sIDxjb2RlPmdldHRleHQ8L2NvZGU+LAorPGNvZGU+aW5kZXg8L2NvZGU+LCA8Y29kZT5pc2FzY2lpPC9jb2RlPiwgPGNvZGU+ajBmPC9jb2RlPiwgPGNvZGU+ajBsPC9jb2RlPiwgPGNvZGU+ajA8L2NvZGU+LAorPGNvZGU+ajFmPC9jb2RlPiwgPGNvZGU+ajFsPC9jb2RlPiwgPGNvZGU+ajE8L2NvZGU+LCA8Y29kZT5qbmY8L2NvZGU+LCA8Y29kZT5qbmw8L2NvZGU+LCA8Y29kZT5qbjwvY29kZT4sCis8Y29kZT5sZ2FtbWFmX3I8L2NvZGU+LCA8Y29kZT5sZ2FtbWFsX3I8L2NvZGU+LCA8Y29kZT5sZ2FtbWFfcjwvY29kZT4sIDxjb2RlPm1lbXBjcHk8L2NvZGU+LAorPGNvZGU+cG93MTBmPC9jb2RlPiwgPGNvZGU+cG93MTBsPC9jb2RlPiwgPGNvZGU+cG93MTA8L2NvZGU+LCA8Y29kZT5wcmludGZfdW5sb2NrZWQ8L2NvZGU+LAorPGNvZGU+cmluZGV4PC9jb2RlPiwgPGNvZGU+c2NhbGJmPC9jb2RlPiwgPGNvZGU+c2NhbGJsPC9jb2RlPiwgPGNvZGU+c2NhbGI8L2NvZGU+LAorPGNvZGU+c2lnbmJpdDwvY29kZT4sIDxjb2RlPnNpZ25iaXRmPC9jb2RlPiwgPGNvZGU+c2lnbmJpdGw8L2NvZGU+LCA8Y29kZT5zaWduYml0ZDMyPC9jb2RlPiwKKzxjb2RlPnNpZ25iaXRkNjQ8L2NvZGU+LCA8Y29kZT5zaWduYml0ZDEyODwvY29kZT4sIDxjb2RlPnNpZ25pZmljYW5kZjwvY29kZT4sCis8Y29kZT5zaWduaWZpY2FuZGw8L2NvZGU+LCA8Y29kZT5zaWduaWZpY2FuZDwvY29kZT4sIDxjb2RlPnNpbmNvc2Y8L2NvZGU+LAorPGNvZGU+c2luY29zbDwvY29kZT4sIDxjb2RlPnNpbmNvczwvY29kZT4sIDxjb2RlPnN0cGNweTwvY29kZT4sIDxjb2RlPnN0cG5jcHk8L2NvZGU+LAorPGNvZGU+c3RyY2FzZWNtcDwvY29kZT4sIDxjb2RlPnN0cmR1cDwvY29kZT4sIDxjb2RlPnN0cmZtb248L2NvZGU+LCA8Y29kZT5zdHJuY2FzZWNtcDwvY29kZT4sCis8Y29kZT5zdHJuZHVwPC9jb2RlPiwgPGNvZGU+dG9hc2NpaTwvY29kZT4sIDxjb2RlPnkwZjwvY29kZT4sIDxjb2RlPnkwbDwvY29kZT4sIDxjb2RlPnkwPC9jb2RlPiwKKzxjb2RlPnkxZjwvY29kZT4sIDxjb2RlPnkxbDwvY29kZT4sIDxjb2RlPnkxPC9jb2RlPiwgPGNvZGU+eW5mPC9jb2RlPiwgPGNvZGU+eW5sPC9jb2RlPiBhbmQKKzxjb2RlPnluPC9jb2RlPgorbWF5IGJlIGhhbmRsZWQgYXMgYnVpbHQtaW4gZnVuY3Rpb25zLiAKK0FsbCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBjb3JyZXNwb25kaW5nIHZlcnNpb25zCitwcmVmaXhlZCB3aXRoIDxjb2RlPl9fYnVpbHRpbl88L2NvZGU+LCB3aGljaCBtYXkgYmUgdXNlZCBldmVuIGluIHN0cmljdCBDOTAKK21vZGUuCisKKyA8cD5UaGUgSVNPIEM5OSBmdW5jdGlvbnMKKzxjb2RlPl9FeGl0PC9jb2RlPiwgPGNvZGU+YWNvc2hmPC9jb2RlPiwgPGNvZGU+YWNvc2hsPC9jb2RlPiwgPGNvZGU+YWNvc2g8L2NvZGU+LCA8Y29kZT5hc2luaGY8L2NvZGU+LAorPGNvZGU+YXNpbmhsPC9jb2RlPiwgPGNvZGU+YXNpbmg8L2NvZGU+LCA8Y29kZT5hdGFuaGY8L2NvZGU+LCA8Y29kZT5hdGFuaGw8L2NvZGU+LCA8Y29kZT5hdGFuaDwvY29kZT4sCis8Y29kZT5jYWJzZjwvY29kZT4sIDxjb2RlPmNhYnNsPC9jb2RlPiwgPGNvZGU+Y2FiczwvY29kZT4sIDxjb2RlPmNhY29zZjwvY29kZT4sIDxjb2RlPmNhY29zaGY8L2NvZGU+LAorPGNvZGU+Y2Fjb3NobDwvY29kZT4sIDxjb2RlPmNhY29zaDwvY29kZT4sIDxjb2RlPmNhY29zbDwvY29kZT4sIDxjb2RlPmNhY29zPC9jb2RlPiwKKzxjb2RlPmNhcmdmPC9jb2RlPiwgPGNvZGU+Y2FyZ2w8L2NvZGU+LCA8Y29kZT5jYXJnPC9jb2RlPiwgPGNvZGU+Y2FzaW5mPC9jb2RlPiwgPGNvZGU+Y2FzaW5oZjwvY29kZT4sCis8Y29kZT5jYXNpbmhsPC9jb2RlPiwgPGNvZGU+Y2FzaW5oPC9jb2RlPiwgPGNvZGU+Y2FzaW5sPC9jb2RlPiwgPGNvZGU+Y2FzaW48L2NvZGU+LAorPGNvZGU+Y2F0YW5mPC9jb2RlPiwgPGNvZGU+Y2F0YW5oZjwvY29kZT4sIDxjb2RlPmNhdGFuaGw8L2NvZGU+LCA8Y29kZT5jYXRhbmg8L2NvZGU+LAorPGNvZGU+Y2F0YW5sPC9jb2RlPiwgPGNvZGU+Y2F0YW48L2NvZGU+LCA8Y29kZT5jYnJ0ZjwvY29kZT4sIDxjb2RlPmNicnRsPC9jb2RlPiwgPGNvZGU+Y2JydDwvY29kZT4sCis8Y29kZT5jY29zZjwvY29kZT4sIDxjb2RlPmNjb3NoZjwvY29kZT4sIDxjb2RlPmNjb3NobDwvY29kZT4sIDxjb2RlPmNjb3NoPC9jb2RlPiwgPGNvZGU+Y2Nvc2w8L2NvZGU+LAorPGNvZGU+Y2NvczwvY29kZT4sIDxjb2RlPmNleHBmPC9jb2RlPiwgPGNvZGU+Y2V4cGw8L2NvZGU+LCA8Y29kZT5jZXhwPC9jb2RlPiwgPGNvZGU+Y2ltYWdmPC9jb2RlPiwKKzxjb2RlPmNpbWFnbDwvY29kZT4sIDxjb2RlPmNpbWFnPC9jb2RlPiwgPGNvZGU+Y2xvZ2Y8L2NvZGU+LCA8Y29kZT5jbG9nbDwvY29kZT4sIDxjb2RlPmNsb2c8L2NvZGU+LAorPGNvZGU+Y29uamY8L2NvZGU+LCA8Y29kZT5jb25qbDwvY29kZT4sIDxjb2RlPmNvbmo8L2NvZGU+LCA8Y29kZT5jb3B5c2lnbmY8L2NvZGU+LCA8Y29kZT5jb3B5c2lnbmw8L2NvZGU+LAorPGNvZGU+Y29weXNpZ248L2NvZGU+LCA8Y29kZT5jcG93ZjwvY29kZT4sIDxjb2RlPmNwb3dsPC9jb2RlPiwgPGNvZGU+Y3BvdzwvY29kZT4sIDxjb2RlPmNwcm9qZjwvY29kZT4sCis8Y29kZT5jcHJvamw8L2NvZGU+LCA8Y29kZT5jcHJvajwvY29kZT4sIDxjb2RlPmNyZWFsZjwvY29kZT4sIDxjb2RlPmNyZWFsbDwvY29kZT4sIDxjb2RlPmNyZWFsPC9jb2RlPiwKKzxjb2RlPmNzaW5mPC9jb2RlPiwgPGNvZGU+Y3NpbmhmPC9jb2RlPiwgPGNvZGU+Y3NpbmhsPC9jb2RlPiwgPGNvZGU+Y3Npbmg8L2NvZGU+LCA8Y29kZT5jc2lubDwvY29kZT4sCis8Y29kZT5jc2luPC9jb2RlPiwgPGNvZGU+Y3NxcnRmPC9jb2RlPiwgPGNvZGU+Y3NxcnRsPC9jb2RlPiwgPGNvZGU+Y3NxcnQ8L2NvZGU+LCA8Y29kZT5jdGFuZjwvY29kZT4sCis8Y29kZT5jdGFuaGY8L2NvZGU+LCA8Y29kZT5jdGFuaGw8L2NvZGU+LCA8Y29kZT5jdGFuaDwvY29kZT4sIDxjb2RlPmN0YW5sPC9jb2RlPiwgPGNvZGU+Y3RhbjwvY29kZT4sCis8Y29kZT5lcmZjZjwvY29kZT4sIDxjb2RlPmVyZmNsPC9jb2RlPiwgPGNvZGU+ZXJmYzwvY29kZT4sIDxjb2RlPmVyZmY8L2NvZGU+LCA8Y29kZT5lcmZsPC9jb2RlPiwKKzxjb2RlPmVyZjwvY29kZT4sIDxjb2RlPmV4cDJmPC9jb2RlPiwgPGNvZGU+ZXhwMmw8L2NvZGU+LCA8Y29kZT5leHAyPC9jb2RlPiwgPGNvZGU+ZXhwbTFmPC9jb2RlPiwKKzxjb2RlPmV4cG0xbDwvY29kZT4sIDxjb2RlPmV4cG0xPC9jb2RlPiwgPGNvZGU+ZmRpbWY8L2NvZGU+LCA8Y29kZT5mZGltbDwvY29kZT4sIDxjb2RlPmZkaW08L2NvZGU+LAorPGNvZGU+Zm1hZjwvY29kZT4sIDxjb2RlPmZtYWw8L2NvZGU+LCA8Y29kZT5mbWF4ZjwvY29kZT4sIDxjb2RlPmZtYXhsPC9jb2RlPiwgPGNvZGU+Zm1heDwvY29kZT4sCis8Y29kZT5mbWE8L2NvZGU+LCA8Y29kZT5mbWluZjwvY29kZT4sIDxjb2RlPmZtaW5sPC9jb2RlPiwgPGNvZGU+Zm1pbjwvY29kZT4sIDxjb2RlPmh5cG90ZjwvY29kZT4sCis8Y29kZT5oeXBvdGw8L2NvZGU+LCA8Y29kZT5oeXBvdDwvY29kZT4sIDxjb2RlPmlsb2diZjwvY29kZT4sIDxjb2RlPmlsb2dibDwvY29kZT4sIDxjb2RlPmlsb2diPC9jb2RlPiwKKzxjb2RlPmltYXhhYnM8L2NvZGU+LCA8Y29kZT5pc2JsYW5rPC9jb2RlPiwgPGNvZGU+aXN3Ymxhbms8L2NvZGU+LCA8Y29kZT5sZ2FtbWFmPC9jb2RlPiwKKzxjb2RlPmxnYW1tYWw8L2NvZGU+LCA8Y29kZT5sZ2FtbWE8L2NvZGU+LCA8Y29kZT5sbGFiczwvY29kZT4sIDxjb2RlPmxscmludGY8L2NvZGU+LCA8Y29kZT5sbHJpbnRsPC9jb2RlPiwKKzxjb2RlPmxscmludDwvY29kZT4sIDxjb2RlPmxscm91bmRmPC9jb2RlPiwgPGNvZGU+bGxyb3VuZGw8L2NvZGU+LCA8Y29kZT5sbHJvdW5kPC9jb2RlPiwKKzxjb2RlPmxvZzFwZjwvY29kZT4sIDxjb2RlPmxvZzFwbDwvY29kZT4sIDxjb2RlPmxvZzFwPC9jb2RlPiwgPGNvZGU+bG9nMmY8L2NvZGU+LCA8Y29kZT5sb2cybDwvY29kZT4sCis8Y29kZT5sb2cyPC9jb2RlPiwgPGNvZGU+bG9nYmY8L2NvZGU+LCA8Y29kZT5sb2dibDwvY29kZT4sIDxjb2RlPmxvZ2I8L2NvZGU+LCA8Y29kZT5scmludGY8L2NvZGU+LAorPGNvZGU+bHJpbnRsPC9jb2RlPiwgPGNvZGU+bHJpbnQ8L2NvZGU+LCA8Y29kZT5scm91bmRmPC9jb2RlPiwgPGNvZGU+bHJvdW5kbDwvY29kZT4sCis8Y29kZT5scm91bmQ8L2NvZGU+LCA8Y29kZT5uZWFyYnlpbnRmPC9jb2RlPiwgPGNvZGU+bmVhcmJ5aW50bDwvY29kZT4sIDxjb2RlPm5lYXJieWludDwvY29kZT4sCis8Y29kZT5uZXh0YWZ0ZXJmPC9jb2RlPiwgPGNvZGU+bmV4dGFmdGVybDwvY29kZT4sIDxjb2RlPm5leHRhZnRlcjwvY29kZT4sCis8Y29kZT5uZXh0dG93YXJkZjwvY29kZT4sIDxjb2RlPm5leHR0b3dhcmRsPC9jb2RlPiwgPGNvZGU+bmV4dHRvd2FyZDwvY29kZT4sCis8Y29kZT5yZW1haW5kZXJmPC9jb2RlPiwgPGNvZGU+cmVtYWluZGVybDwvY29kZT4sIDxjb2RlPnJlbWFpbmRlcjwvY29kZT4sIDxjb2RlPnJlbXF1b2Y8L2NvZGU+LAorPGNvZGU+cmVtcXVvbDwvY29kZT4sIDxjb2RlPnJlbXF1bzwvY29kZT4sIDxjb2RlPnJpbnRmPC9jb2RlPiwgPGNvZGU+cmludGw8L2NvZGU+LCA8Y29kZT5yaW50PC9jb2RlPiwKKzxjb2RlPnJvdW5kZjwvY29kZT4sIDxjb2RlPnJvdW5kbDwvY29kZT4sIDxjb2RlPnJvdW5kPC9jb2RlPiwgPGNvZGU+c2NhbGJsbmY8L2NvZGU+LAorPGNvZGU+c2NhbGJsbmw8L2NvZGU+LCA8Y29kZT5zY2FsYmxuPC9jb2RlPiwgPGNvZGU+c2NhbGJuZjwvY29kZT4sIDxjb2RlPnNjYWxibmw8L2NvZGU+LAorPGNvZGU+c2NhbGJuPC9jb2RlPiwgPGNvZGU+c25wcmludGY8L2NvZGU+LCA8Y29kZT50Z2FtbWFmPC9jb2RlPiwgPGNvZGU+dGdhbW1hbDwvY29kZT4sCis8Y29kZT50Z2FtbWE8L2NvZGU+LCA8Y29kZT50cnVuY2Y8L2NvZGU+LCA8Y29kZT50cnVuY2w8L2NvZGU+LCA8Y29kZT50cnVuYzwvY29kZT4sCis8Y29kZT52ZnNjYW5mPC9jb2RlPiwgPGNvZGU+dnNjYW5mPC9jb2RlPiwgPGNvZGU+dnNucHJpbnRmPC9jb2RlPiBhbmQgPGNvZGU+dnNzY2FuZjwvY29kZT4KK2FyZSBoYW5kbGVkIGFzIGJ1aWx0LWluIGZ1bmN0aW9ucworZXhjZXB0IGluIHN0cmljdCBJU08gQzkwIG1vZGUgKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jOTA8L3NwYW4+PC9zYW1wPikuCisKKyA8cD5UaGVyZSBhcmUgYWxzbyBidWlsdC1pbiB2ZXJzaW9ucyBvZiB0aGUgSVNPIEM5OSBmdW5jdGlvbnMKKzxjb2RlPmFjb3NmPC9jb2RlPiwgPGNvZGU+YWNvc2w8L2NvZGU+LCA8Y29kZT5hc2luZjwvY29kZT4sIDxjb2RlPmFzaW5sPC9jb2RlPiwgPGNvZGU+YXRhbjJmPC9jb2RlPiwKKzxjb2RlPmF0YW4ybDwvY29kZT4sIDxjb2RlPmF0YW5mPC9jb2RlPiwgPGNvZGU+YXRhbmw8L2NvZGU+LCA8Y29kZT5jZWlsZjwvY29kZT4sIDxjb2RlPmNlaWxsPC9jb2RlPiwKKzxjb2RlPmNvc2Y8L2NvZGU+LCA8Y29kZT5jb3NoZjwvY29kZT4sIDxjb2RlPmNvc2hsPC9jb2RlPiwgPGNvZGU+Y29zbDwvY29kZT4sIDxjb2RlPmV4cGY8L2NvZGU+LAorPGNvZGU+ZXhwbDwvY29kZT4sIDxjb2RlPmZhYnNmPC9jb2RlPiwgPGNvZGU+ZmFic2w8L2NvZGU+LCA8Y29kZT5mbG9vcmY8L2NvZGU+LCA8Y29kZT5mbG9vcmw8L2NvZGU+LAorPGNvZGU+Zm1vZGY8L2NvZGU+LCA8Y29kZT5mbW9kbDwvY29kZT4sIDxjb2RlPmZyZXhwZjwvY29kZT4sIDxjb2RlPmZyZXhwbDwvY29kZT4sIDxjb2RlPmxkZXhwZjwvY29kZT4sCis8Y29kZT5sZGV4cGw8L2NvZGU+LCA8Y29kZT5sb2cxMGY8L2NvZGU+LCA8Y29kZT5sb2cxMGw8L2NvZGU+LCA8Y29kZT5sb2dmPC9jb2RlPiwgPGNvZGU+bG9nbDwvY29kZT4sCis8Y29kZT5tb2RmbDwvY29kZT4sIDxjb2RlPm1vZGY8L2NvZGU+LCA8Y29kZT5wb3dmPC9jb2RlPiwgPGNvZGU+cG93bDwvY29kZT4sIDxjb2RlPnNpbmY8L2NvZGU+LAorPGNvZGU+c2luaGY8L2NvZGU+LCA8Y29kZT5zaW5obDwvY29kZT4sIDxjb2RlPnNpbmw8L2NvZGU+LCA8Y29kZT5zcXJ0ZjwvY29kZT4sIDxjb2RlPnNxcnRsPC9jb2RlPiwKKzxjb2RlPnRhbmY8L2NvZGU+LCA8Y29kZT50YW5oZjwvY29kZT4sIDxjb2RlPnRhbmhsPC9jb2RlPiBhbmQgPGNvZGU+dGFubDwvY29kZT4KK3RoYXQgYXJlIHJlY29nbml6ZWQgaW4gYW55IG1vZGUgc2luY2UgSVNPIEM5MCByZXNlcnZlcyB0aGVzZSBuYW1lcyBmb3IKK3RoZSBwdXJwb3NlIHRvIHdoaWNoIElTTyBDOTkgcHV0cyB0aGVtLiAgQWxsIHRoZXNlIGZ1bmN0aW9ucyBoYXZlCitjb3JyZXNwb25kaW5nIHZlcnNpb25zIHByZWZpeGVkIHdpdGggPGNvZGU+X19idWlsdGluXzwvY29kZT4uCisKKyA8cD5UaGUgSVNPIEM5NCBmdW5jdGlvbnMKKzxjb2RlPmlzd2FsbnVtPC9jb2RlPiwgPGNvZGU+aXN3YWxwaGE8L2NvZGU+LCA8Y29kZT5pc3djbnRybDwvY29kZT4sIDxjb2RlPmlzd2RpZ2l0PC9jb2RlPiwKKzxjb2RlPmlzd2dyYXBoPC9jb2RlPiwgPGNvZGU+aXN3bG93ZXI8L2NvZGU+LCA8Y29kZT5pc3dwcmludDwvY29kZT4sIDxjb2RlPmlzd3B1bmN0PC9jb2RlPiwKKzxjb2RlPmlzd3NwYWNlPC9jb2RlPiwgPGNvZGU+aXN3dXBwZXI8L2NvZGU+LCA8Y29kZT5pc3d4ZGlnaXQ8L2NvZGU+LCA8Y29kZT50b3dsb3dlcjwvY29kZT4gYW5kCis8Y29kZT50b3d1cHBlcjwvY29kZT4KK2FyZSBoYW5kbGVkIGFzIGJ1aWx0LWluIGZ1bmN0aW9ucworZXhjZXB0IGluIHN0cmljdCBJU08gQzkwIG1vZGUgKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jOTA8L3NwYW4+PC9zYW1wPikuCisKKyA8cD5UaGUgSVNPIEM5MCBmdW5jdGlvbnMKKzxjb2RlPmFib3J0PC9jb2RlPiwgPGNvZGU+YWJzPC9jb2RlPiwgPGNvZGU+YWNvczwvY29kZT4sIDxjb2RlPmFzaW48L2NvZGU+LCA8Y29kZT5hdGFuMjwvY29kZT4sCis8Y29kZT5hdGFuPC9jb2RlPiwgPGNvZGU+Y2FsbG9jPC9jb2RlPiwgPGNvZGU+Y2VpbDwvY29kZT4sIDxjb2RlPmNvc2g8L2NvZGU+LCA8Y29kZT5jb3M8L2NvZGU+LAorPGNvZGU+ZXhpdDwvY29kZT4sIDxjb2RlPmV4cDwvY29kZT4sIDxjb2RlPmZhYnM8L2NvZGU+LCA8Y29kZT5mbG9vcjwvY29kZT4sIDxjb2RlPmZtb2Q8L2NvZGU+LAorPGNvZGU+ZnByaW50ZjwvY29kZT4sIDxjb2RlPmZwdXRzPC9jb2RlPiwgPGNvZGU+ZnJleHA8L2NvZGU+LCA8Y29kZT5mc2NhbmY8L2NvZGU+LAorPGNvZGU+aXNhbG51bTwvY29kZT4sIDxjb2RlPmlzYWxwaGE8L2NvZGU+LCA8Y29kZT5pc2NudHJsPC9jb2RlPiwgPGNvZGU+aXNkaWdpdDwvY29kZT4sCis8Y29kZT5pc2dyYXBoPC9jb2RlPiwgPGNvZGU+aXNsb3dlcjwvY29kZT4sIDxjb2RlPmlzcHJpbnQ8L2NvZGU+LCA8Y29kZT5pc3B1bmN0PC9jb2RlPiwKKzxjb2RlPmlzc3BhY2U8L2NvZGU+LCA8Y29kZT5pc3VwcGVyPC9jb2RlPiwgPGNvZGU+aXN4ZGlnaXQ8L2NvZGU+LCA8Y29kZT50b2xvd2VyPC9jb2RlPiwKKzxjb2RlPnRvdXBwZXI8L2NvZGU+LCA8Y29kZT5sYWJzPC9jb2RlPiwgPGNvZGU+bGRleHA8L2NvZGU+LCA8Y29kZT5sb2cxMDwvY29kZT4sIDxjb2RlPmxvZzwvY29kZT4sCis8Y29kZT5tYWxsb2M8L2NvZGU+LCA8Y29kZT5tZW1jaHI8L2NvZGU+LCA8Y29kZT5tZW1jbXA8L2NvZGU+LCA8Y29kZT5tZW1jcHk8L2NvZGU+LAorPGNvZGU+bWVtc2V0PC9jb2RlPiwgPGNvZGU+bW9kZjwvY29kZT4sIDxjb2RlPnBvdzwvY29kZT4sIDxjb2RlPnByaW50ZjwvY29kZT4sIDxjb2RlPnB1dGNoYXI8L2NvZGU+LAorPGNvZGU+cHV0czwvY29kZT4sIDxjb2RlPnNjYW5mPC9jb2RlPiwgPGNvZGU+c2luaDwvY29kZT4sIDxjb2RlPnNpbjwvY29kZT4sIDxjb2RlPnNucHJpbnRmPC9jb2RlPiwKKzxjb2RlPnNwcmludGY8L2NvZGU+LCA8Y29kZT5zcXJ0PC9jb2RlPiwgPGNvZGU+c3NjYW5mPC9jb2RlPiwgPGNvZGU+c3RyY2F0PC9jb2RlPiwKKzxjb2RlPnN0cmNocjwvY29kZT4sIDxjb2RlPnN0cmNtcDwvY29kZT4sIDxjb2RlPnN0cmNweTwvY29kZT4sIDxjb2RlPnN0cmNzcG48L2NvZGU+LAorPGNvZGU+c3RybGVuPC9jb2RlPiwgPGNvZGU+c3RybmNhdDwvY29kZT4sIDxjb2RlPnN0cm5jbXA8L2NvZGU+LCA8Y29kZT5zdHJuY3B5PC9jb2RlPiwKKzxjb2RlPnN0cnBicms8L2NvZGU+LCA8Y29kZT5zdHJyY2hyPC9jb2RlPiwgPGNvZGU+c3Ryc3BuPC9jb2RlPiwgPGNvZGU+c3Ryc3RyPC9jb2RlPiwKKzxjb2RlPnRhbmg8L2NvZGU+LCA8Y29kZT50YW48L2NvZGU+LCA8Y29kZT52ZnByaW50ZjwvY29kZT4sIDxjb2RlPnZwcmludGY8L2NvZGU+IGFuZCA8Y29kZT52c3ByaW50ZjwvY29kZT4KK2FyZSBhbGwgcmVjb2duaXplZCBhcyBidWlsdC1pbiBmdW5jdGlvbnMgdW5sZXNzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWJ1aWx0aW48L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQgKG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYnVpbHRpbi08L3NwYW4+PHZhcj5mdW5jdGlvbjwvdmFyPjwvc2FtcD4KK2lzIHNwZWNpZmllZCBmb3IgYW4gaW5kaXZpZHVhbCBmdW5jdGlvbikuICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGhhdmUKK2NvcnJlc3BvbmRpbmcgdmVyc2lvbnMgcHJlZml4ZWQgd2l0aCA8Y29kZT5fX2J1aWx0aW5fPC9jb2RlPi4KKworIDxwPkdDQyBwcm92aWRlcyBidWlsdC1pbiB2ZXJzaW9ucyBvZiB0aGUgSVNPIEM5OSBmbG9hdGluZy1wb2ludCBjb21wYXJpc29uCittYWNyb3MgdGhhdCBhdm9pZCByYWlzaW5nIGV4Y2VwdGlvbnMgZm9yIHVub3JkZXJlZCBvcGVyYW5kcy4gIFRoZXkgaGF2ZQordGhlIHNhbWUgbmFtZXMgYXMgdGhlIHN0YW5kYXJkIG1hY3JvcyAoIDxjb2RlPmlzZ3JlYXRlcjwvY29kZT4sCis8Y29kZT5pc2dyZWF0ZXJlcXVhbDwvY29kZT4sIDxjb2RlPmlzbGVzczwvY29kZT4sIDxjb2RlPmlzbGVzc2VxdWFsPC9jb2RlPiwKKzxjb2RlPmlzbGVzc2dyZWF0ZXI8L2NvZGU+LCBhbmQgPGNvZGU+aXN1bm9yZGVyZWQ8L2NvZGU+KSAsIHdpdGggPGNvZGU+X19idWlsdGluXzwvY29kZT4KK3ByZWZpeGVkLiAgV2UgaW50ZW5kIGZvciBhIGxpYnJhcnkgaW1wbGVtZW50b3IgdG8gYmUgYWJsZSB0byBzaW1wbHkKKzxjb2RlPiNkZWZpbmU8L2NvZGU+IGVhY2ggc3RhbmRhcmQgbWFjcm8gdG8gaXRzIGJ1aWx0LWluIGVxdWl2YWxlbnQuIAorSW4gdGhlIHNhbWUgZmFzaGlvbiwgR0NDIHByb3ZpZGVzIDxjb2RlPmZwY2xhc3NpZnk8L2NvZGU+LCA8Y29kZT5pc2Zpbml0ZTwvY29kZT4sCis8Y29kZT5pc2luZl9zaWduPC9jb2RlPiBhbmQgPGNvZGU+aXNub3JtYWw8L2NvZGU+IGJ1aWx0LWlucyB1c2VkIHdpdGgKKzxjb2RlPl9fYnVpbHRpbl88L2NvZGU+IHByZWZpeGVkLiAgVGhlIDxjb2RlPmlzaW5mPC9jb2RlPiBhbmQgPGNvZGU+aXNuYW48L2NvZGU+CitidWlsdC1pbiBmdW5jdGlvbnMgYXBwZWFyIGJvdGggd2l0aCBhbmQgd2l0aG91dCB0aGUgPGNvZGU+X19idWlsdGluXzwvY29kZT4gcHJlZml4LgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBpbnQgPGI+X19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcDwvYj4gKDx2YXI+dHlwZTEsIHR5cGUyPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnR5cGVzXzAwNWZjb21wYXRpYmxlXzAwNWZwLTMzNDkiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT4KKyAgICAgIDxwPllvdSBjYW4gdXNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA8Y29kZT5fX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wPC9jb2RlPiB0bworZGV0ZXJtaW5lIHdoZXRoZXIgdHdvIHR5cGVzIGFyZSB0aGUgc2FtZS4KKworICAgICAgPHA+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiByZXR1cm5zIDEgaWYgdGhlIHVucXVhbGlmaWVkIHZlcnNpb25zIG9mIHRoZQordHlwZXMgPHZhcj50eXBlMTwvdmFyPiBhbmQgPHZhcj50eXBlMjwvdmFyPiAod2hpY2ggYXJlIHR5cGVzLCBub3QgZXhwcmVzc2lvbnMpIGFyZQorY29tcGF0aWJsZSwgMCBvdGhlcndpc2UuICBUaGUgcmVzdWx0IG9mIHRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gY2FuIGJlCit1c2VkIGluIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbnMuCisKKyAgICAgIDxwPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gaWdub3JlcyB0b3AgbGV2ZWwgcXVhbGlmaWVycyAoZS5nLiwgPGNvZGU+Y29uc3Q8L2NvZGU+LAorPGNvZGU+dm9sYXRpbGU8L2NvZGU+KS4gIEZvciBleGFtcGxlLCA8Y29kZT5pbnQ8L2NvZGU+IGlzIGVxdWl2YWxlbnQgdG8gPGNvZGU+Y29uc3QKK2ludDwvY29kZT4uCisKKyAgICAgIDxwPlRoZSB0eXBlIDxjb2RlPmludFtdPC9jb2RlPiBhbmQgPGNvZGU+aW50WzVdPC9jb2RlPiBhcmUgY29tcGF0aWJsZS4gIE9uIHRoZSBvdGhlcgoraGFuZCwgPGNvZGU+aW50PC9jb2RlPiBhbmQgPGNvZGU+Y2hhciAqPC9jb2RlPiBhcmUgbm90IGNvbXBhdGlibGUsIGV2ZW4gaWYgdGhlIHNpemUKK29mIHRoZWlyIHR5cGVzLCBvbiB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgYXJlIHRoZSBzYW1lLiAgQWxzbywgdGhlCithbW91bnQgb2YgcG9pbnRlciBpbmRpcmVjdGlvbiBpcyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBkZXRlcm1pbmluZworc2ltaWxhcml0eS4gIENvbnNlcXVlbnRseSwgPGNvZGU+c2hvcnQgKjwvY29kZT4gaXMgbm90IHNpbWlsYXIgdG8KKzxjb2RlPnNob3J0ICoqPC9jb2RlPi4gIEZ1cnRoZXJtb3JlLCB0d28gdHlwZXMgdGhhdCBhcmUgdHlwZWRlZmVkIGFyZQorY29uc2lkZXJlZCBjb21wYXRpYmxlIGlmIHRoZWlyIHVuZGVybHlpbmcgdHlwZXMgYXJlIGNvbXBhdGlibGUuCisKKyAgICAgIDxwPkFuIDxjb2RlPmVudW08L2NvZGU+IHR5cGUgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGFub3RoZXIKKzxjb2RlPmVudW08L2NvZGU+IHR5cGUgZXZlbiBpZiBib3RoIGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHNhbWUgaW50ZWdlcgordHlwZTsgdGhpcyBpcyB3aGF0IHRoZSBDIHN0YW5kYXJkIHNwZWNpZmllcy4gCitGb3IgZXhhbXBsZSwgPGNvZGU+ZW51bSB7Zm9vLCBiYXJ9PC9jb2RlPiBpcyBub3Qgc2ltaWxhciB0bworPGNvZGU+ZW51bSB7aG90LCBkb2d9PC9jb2RlPi4KKworICAgICAgPHA+WW91IHR5cGljYWxseSB1c2UgdGhpcyBmdW5jdGlvbiBpbiBjb2RlIHdob3NlIGV4ZWN1dGlvbiB2YXJpZXMKK2RlcGVuZGluZyBvbiB0aGUgYXJndW1lbnRzJyB0eXBlcy4gIEZvciBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICNkZWZpbmUgZm9vKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB0eXBlb2YgKHgpIHRtcCA9ICh4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlmIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wICh0eXBlb2YgKHgpLCBsb25nIGRvdWJsZSkpIFwKKyAgICAgICAgICAgICAgICB0bXAgPSBmb29fbG9uZ19kb3VibGUgKHRtcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBlbHNlIGlmIChfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wICh0eXBlb2YgKHgpLCBkb3VibGUpKSBcCisgICAgICAgICAgICAgICAgdG1wID0gZm9vX2RvdWJsZSAodG1wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgZWxzZSBpZiAoX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCAodHlwZW9mICh4KSwgZmxvYXQpKSAgXAorICAgICAgICAgICAgICAgIHRtcCA9IGZvb19mbG9hdCAodG1wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBhYm9ydCAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB0bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9KQorPC9wcmU+CisgICAgICA8cD48ZW0+Tm90ZTo8L2VtPiBUaGlzIGNvbnN0cnVjdCBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgQy4KKworICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiA8dmFyPnR5cGU8L3Zhcj4gPGI+X19idWlsdGluX2Nob29zZV9leHByPC9iPiAoPHZhcj5jb25zdF9leHAsIGV4cDEsIGV4cDI8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmY2hvb3NlXzAwNWZleHByLTMzNTAiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT4KKyAgICAgIDxwPllvdSBjYW4gdXNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA8Y29kZT5fX2J1aWx0aW5fY2hvb3NlX2V4cHI8L2NvZGU+IHRvCitldmFsdWF0ZSBjb2RlIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYSBjb25zdGFudCBleHByZXNzaW9uLiAgVGhpcworYnVpbHQtaW4gZnVuY3Rpb24gcmV0dXJucyA8dmFyPmV4cDE8L3Zhcj4gaWYgPHZhcj5jb25zdF9leHA8L3Zhcj4sIHdoaWNoIGlzIGFuCitpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24sIGlzIG5vbnplcm8uICBPdGhlcndpc2UgaXQgcmV0dXJucyA8dmFyPmV4cDI8L3Zhcj4uCisKKyAgICAgIDxwPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gaXMgYW5hbG9nb3VzIHRvIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj8gOjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcGVyYXRvciBpbiBDLAorZXhjZXB0IHRoYXQgdGhlIGV4cHJlc3Npb24gcmV0dXJuZWQgaGFzIGl0cyB0eXBlIHVuYWx0ZXJlZCBieSBwcm9tb3Rpb24KK3J1bGVzLiAgQWxzbywgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRoZSBleHByZXNzaW9uCit0aGF0IGlzIG5vdCBjaG9zZW4uICBGb3IgZXhhbXBsZSwgaWYgPHZhcj5jb25zdF9leHA8L3Zhcj4gZXZhbHVhdGVzIHRvIHRydWUsCis8dmFyPmV4cDI8L3Zhcj4gaXMgbm90IGV2YWx1YXRlZCBldmVuIGlmIGl0IGhhcyBzaWRlLWVmZmVjdHMuCisKKyAgICAgIDxwPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gY2FuIHJldHVybiBhbiBsdmFsdWUgaWYgdGhlIGNob3NlbiBhcmd1bWVudCBpcyBhbgorbHZhbHVlLgorCisgICAgICA8cD5JZiA8dmFyPmV4cDE8L3Zhcj4gaXMgcmV0dXJuZWQsIHRoZSByZXR1cm4gdHlwZSBpcyB0aGUgc2FtZSBhcyA8dmFyPmV4cDE8L3Zhcj4ncwordHlwZS4gIFNpbWlsYXJseSwgaWYgPHZhcj5leHAyPC92YXI+IGlzIHJldHVybmVkLCBpdHMgcmV0dXJuIHR5cGUgaXMgdGhlIHNhbWUKK2FzIDx2YXI+ZXhwMjwvdmFyPi4KKworICAgICAgPHA+RXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjZGVmaW5lIGZvbyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfX2J1aWx0aW5fY2hvb3NlX2V4cHIgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wICh0eXBlb2YgKHgpLCBkb3VibGUpLCAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgZm9vX2RvdWJsZSAoeCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIF9fYnVpbHRpbl9jaG9vc2VfZXhwciAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AgKHR5cGVvZiAoeCksIGZsb2F0KSwgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBmb29fZmxvYXQgKHgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj5UaGUgdm9pZCBleHByZXNzaW9uIHJlc3VsdHMgaW4gYSBjb21waWxlLXRpbWUgZXJyb3I8L3NwYW4+ICBcCisgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJvbWFuIj53aGVuIGFzc2lnbmluZyB0aGUgcmVzdWx0IHRvIHNvbWV0aGluZy48L3NwYW4+ICAqLyAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKHZvaWQpMCkpCis8L3ByZT4KKyAgICAgIDxwPjxlbT5Ob3RlOjwvZW0+IFRoaXMgY29uc3RydWN0IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBDLiAgRnVydGhlcm1vcmUsIHRoZQordW51c2VkIGV4cHJlc3Npb24gKDx2YXI+ZXhwMTwvdmFyPiBvciA8dmFyPmV4cDI8L3Zhcj4gZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZgorPHZhcj5jb25zdF9leHA8L3Zhcj4pIG1heSBzdGlsbCBnZW5lcmF0ZSBzeW50YXggZXJyb3JzLiAgVGhpcyBtYXkgY2hhbmdlIGluCitmdXR1cmUgcmV2aXNpb25zLgorCisgICAgICA8L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IDx2YXI+dHlwZTwvdmFyPiA8Yj5fX2J1aWx0aW5fY29tcGxleDwvYj4gKDx2YXI+cmVhbCwgaW1hZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjb21wbGV4LTMzNTEiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT4KKyAgICAgIDxwPlRoZSBidWlsdC1pbiBmdW5jdGlvbiA8Y29kZT5fX2J1aWx0aW5fY29tcGxleDwvY29kZT4gaXMgcHJvdmlkZWQgZm9yIHVzZSBpbgoraW1wbGVtZW50aW5nIHRoZSBJU08gQzExIG1hY3JvcyA8Y29kZT5DTVBMWEY8L2NvZGU+LCA8Y29kZT5DTVBMWDwvY29kZT4gYW5kCis8Y29kZT5DTVBMWEw8L2NvZGU+LiAgPHZhcj5yZWFsPC92YXI+IGFuZCA8dmFyPmltYWc8L3Zhcj4gbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUsIGEKK3JlYWwgYmluYXJ5IGZsb2F0aW5nLXBvaW50IHR5cGUsIGFuZCB0aGUgcmVzdWx0IGhhcyB0aGUgY29ycmVzcG9uZGluZworY29tcGxleCB0eXBlIHdpdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIDx2YXI+cmVhbDwvdmFyPiBhbmQgPHZhcj5pbWFnPC92YXI+LiAKK1VubGlrZSAmbHNxdW87PHNhbXA+PHZhcj5yZWFsPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPiArIEkgKiA8L3NwYW4+PHZhcj5pbWFnPC92YXI+PC9zYW1wPiZyc3F1bzssIHRoaXMgd29ya3MgZXZlbiB3aGVuCitpbmZpbml0aWVzLCBOYU5zIGFuZCBuZWdhdGl2ZSB6ZXJvcyBhcmUgaW52b2x2ZWQuCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9jb25zdGFudF9wPC9iPiAoPHZhcj5leHA8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmY29uc3RhbnRfMDA1ZnAtMzM1MiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPllvdSBjYW4gdXNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA8Y29kZT5fX2J1aWx0aW5fY29uc3RhbnRfcDwvY29kZT4gdG8KK2RldGVybWluZSBpZiBhIHZhbHVlIGlzIGtub3duIHRvIGJlIGNvbnN0YW50IGF0IGNvbXBpbGUgdGltZSBhbmQgaGVuY2UKK3RoYXQgR0NDIGNhbiBwZXJmb3JtIGNvbnN0YW50LWZvbGRpbmcgb24gZXhwcmVzc2lvbnMgaW52b2x2aW5nIHRoYXQKK3ZhbHVlLiAgVGhlIGFyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUgdmFsdWUgdG8gdGVzdC4gIFRoZSBmdW5jdGlvbgorcmV0dXJucyB0aGUgaW50ZWdlciAxIGlmIHRoZSBhcmd1bWVudCBpcyBrbm93biB0byBiZSBhIGNvbXBpbGUtdGltZQorY29uc3RhbnQgYW5kIDAgaWYgaXQgaXMgbm90IGtub3duIHRvIGJlIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiAgQQorcmV0dXJuIG9mIDAgZG9lcyBub3QgaW5kaWNhdGUgdGhhdCB0aGUgdmFsdWUgaXMgPGVtPm5vdDwvZW0+IGEgY29uc3RhbnQsCitidXQgbWVyZWx5IHRoYXQgR0NDIGNhbm5vdCBwcm92ZSBpdCBpcyBhIGNvbnN0YW50IHdpdGggdGhlIHNwZWNpZmllZAordmFsdWUgb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgICA8cD5Zb3UgdHlwaWNhbGx5IHVzZSB0aGlzIGZ1bmN0aW9uIGluIGFuIGVtYmVkZGVkIGFwcGxpY2F0aW9uIHdoZXJlCittZW1vcnkgaXMgYSBjcml0aWNhbCByZXNvdXJjZS4gIElmIHlvdSBoYXZlIHNvbWUgY29tcGxleCBjYWxjdWxhdGlvbiwKK3lvdSBtYXkgd2FudCBpdCB0byBiZSBmb2xkZWQgaWYgaXQgaW52b2x2ZXMgY29uc3RhbnRzLCBidXQgbmVlZCB0byBjYWxsCithIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90LiAgRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2RlZmluZSBTY2FsZV9WYWx1ZShYKSAgICAgIFwKKyAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoWCkgXAorICAgICAgICAgICAgPyAoKFgpICogU0NBTEUgKyBPRkZTRVQpIDogU2NhbGUgKFgpKQorPC9wcmU+CisgICAgICA8cD5Zb3UgbWF5IHVzZSB0aGlzIGJ1aWx0LWluIGZ1bmN0aW9uIGluIGVpdGhlciBhIG1hY3JvIG9yIGFuIGlubGluZQorZnVuY3Rpb24uICBIb3dldmVyLCBpZiB5b3UgdXNlIGl0IGluIGFuIGlubGluZWQgZnVuY3Rpb24gYW5kIHBhc3MgYW4KK2FyZ3VtZW50IG9mIHRoZSBmdW5jdGlvbiBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIGJ1aWx0LWluLCBHQ0MKK25ldmVyIHJldHVybnMgMSB3aGVuIHlvdSBjYWxsIHRoZSBpbmxpbmUgZnVuY3Rpb24gd2l0aCBhIHN0cmluZyBjb25zdGFudAorb3IgY29tcG91bmQgbGl0ZXJhbCAoc2VlIDxhIGhyZWY9IkNvbXBvdW5kLUxpdGVyYWxzLmh0bWwjQ29tcG91bmQtTGl0ZXJhbHMiPkNvbXBvdW5kIExpdGVyYWxzPC9hPikgYW5kIGRvZXMgbm90IHJldHVybiAxCit3aGVuIHlvdSBwYXNzIGEgY29uc3RhbnQgbnVtZXJpYyB2YWx1ZSB0byB0aGUgaW5saW5lIGZ1bmN0aW9uIHVubGVzcyB5b3UKK3NwZWNpZnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgICA8cD5Zb3UgbWF5IGFsc28gdXNlIDxjb2RlPl9fYnVpbHRpbl9jb25zdGFudF9wPC9jb2RlPiBpbiBpbml0aWFsaXplcnMgZm9yIHN0YXRpYworZGF0YS4gIEZvciBpbnN0YW5jZSwgeW91IGNhbiB3cml0ZQorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgdGFibGVbXSA9IHsKKyAgICAgICAgICAgICBfX2J1aWx0aW5fY29uc3RhbnRfcCAoRVhQUkVTU0lPTikgPyAoRVhQUkVTU0lPTikgOiAtMSwKKyAgICAgICAgICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPi4uLjwvc3Bhbj4gKi8KKyAgICAgICAgICB9OworPC9wcmU+CisgICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgaXMgYW4gYWNjZXB0YWJsZSBpbml0aWFsaXplciBldmVuIGlmIDx2YXI+RVhQUkVTU0lPTjwvdmFyPiBpcyBub3QgYQorY29uc3RhbnQgZXhwcmVzc2lvbiwgaW5jbHVkaW5nIHRoZSBjYXNlIHdoZXJlCis8Y29kZT5fX2J1aWx0aW5fY29uc3RhbnRfcDwvY29kZT4gcmV0dXJucyAxIGJlY2F1c2UgPHZhcj5FWFBSRVNTSU9OPC92YXI+IGNhbiBiZQorZm9sZGVkIHRvIGEgY29uc3RhbnQgYnV0IDx2YXI+RVhQUkVTU0lPTjwvdmFyPiBjb250YWlucyBvcGVyYW5kcyB0aGF0IGFyZQorbm90IG90aGVyd2lzZSBwZXJtaXR0ZWQgaW4gYSBzdGF0aWMgaW5pdGlhbGl6ZXIgKGZvciBleGFtcGxlLAorPGNvZGU+MCAmYW1wOyZhbXA7IGZvbyAoKTwvY29kZT4pLiAgR0NDIG11c3QgYmUgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgZXZhbHVhdGluZyB0aGUKK2J1aWx0LWluIGluIHRoaXMgY2FzZSwgYmVjYXVzZSBpdCBoYXMgbm8gb3Bwb3J0dW5pdHkgdG8gcGVyZm9ybQorb3B0aW1pemF0aW9uLgorCisgICAgICA8cD5QcmV2aW91cyB2ZXJzaW9ucyBvZiBHQ0MgZGlkIG5vdCBhY2NlcHQgdGhpcyBidWlsdC1pbiBpbiBkYXRhCitpbml0aWFsaXplcnMuICBUaGUgZWFybGllc3QgdmVyc2lvbiB3aGVyZSBpdCBpcyBjb21wbGV0ZWx5IHNhZmUgaXMKKzMuMC4xLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGxvbmcgPGI+X19idWlsdGluX2V4cGVjdDwvYj4gKDx2YXI+bG9uZyBleHAsIGxvbmcgYzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZleHBlY3QtMzM1MyI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPjxhIG5hbWU9ImluZGV4LWZwcm9maWxlXzAwMmRhcmNzLTMzNTQiPjwvYT5Zb3UgbWF5IHVzZSA8Y29kZT5fX2J1aWx0aW5fZXhwZWN0PC9jb2RlPiB0byBwcm92aWRlIHRoZSBjb21waWxlciB3aXRoCiticmFuY2ggcHJlZGljdGlvbiBpbmZvcm1hdGlvbi4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgcHJlZmVyIHRvCit1c2UgYWN0dWFsIHByb2ZpbGUgZmVlZGJhY2sgZm9yIHRoaXMgKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJvZmlsZS1hcmNzPC9zcGFuPjwvc2FtcD4pLCBhcworcHJvZ3JhbW1lcnMgYXJlIG5vdG9yaW91c2x5IGJhZCBhdCBwcmVkaWN0aW5nIGhvdyB0aGVpciBwcm9ncmFtcworYWN0dWFsbHkgcGVyZm9ybS4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhcHBsaWNhdGlvbnMgaW4gd2hpY2ggdGhpcworZGF0YSBpcyBoYXJkIHRvIGNvbGxlY3QuCisKKyAgICAgIDxwPlRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHZhbHVlIG9mIDx2YXI+ZXhwPC92YXI+LCB3aGljaCBzaG91bGQgYmUgYW4gaW50ZWdyYWwKK2V4cHJlc3Npb24uICBUaGUgc2VtYW50aWNzIG9mIHRoZSBidWlsdC1pbiBhcmUgdGhhdCBpdCBpcyBleHBlY3RlZCB0aGF0Cis8dmFyPmV4cDwvdmFyPiA9PSA8dmFyPmM8L3Zhcj4uICBGb3IgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoeCwgMCkpCisgICAgICAgICAgICBmb28gKCk7Cis8L3ByZT4KKyAgICAgIDxwIGNsYXNzPSJub2luZGVudCI+aW5kaWNhdGVzIHRoYXQgd2UgZG8gbm90IGV4cGVjdCB0byBjYWxsIDxjb2RlPmZvbzwvY29kZT4sIHNpbmNlCit3ZSBleHBlY3QgPGNvZGU+eDwvY29kZT4gdG8gYmUgemVyby4gIFNpbmNlIHlvdSBhcmUgbGltaXRlZCB0byBpbnRlZ3JhbAorZXhwcmVzc2lvbnMgZm9yIDx2YXI+ZXhwPC92YXI+LCB5b3Ugc2hvdWxkIHVzZSBjb25zdHJ1Y3Rpb25zIHN1Y2ggYXMKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAocHRyICE9IE5VTEwsIDEpKQorICAgICAgICAgICAgZm9vICgqcHRyKTsKKzwvcHJlPgorICAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aGVuIHRlc3RpbmcgcG9pbnRlciBvciBmbG9hdGluZy1wb2ludCB2YWx1ZXMuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2J1aWx0aW5fdHJhcDwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZ0cmFwLTMzNTUiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIGNhdXNlcyB0aGUgcHJvZ3JhbSB0byBleGl0IGFibm9ybWFsbHkuICBHQ0MgaW1wbGVtZW50cwordGhpcyBmdW5jdGlvbiBieSB1c2luZyBhIHRhcmdldC1kZXBlbmRlbnQgbWVjaGFuaXNtIChzdWNoIGFzCitpbnRlbnRpb25hbGx5IGV4ZWN1dGluZyBhbiBpbGxlZ2FsIGluc3RydWN0aW9uKSBvciBieSBjYWxsaW5nCis8Y29kZT5hYm9ydDwvY29kZT4uICBUaGUgbWVjaGFuaXNtIHVzZWQgbWF5IHZhcnkgZnJvbSByZWxlYXNlIHRvIHJlbGVhc2Ugc28KK3lvdSBzaG91bGQgbm90IHJlbHkgb24gYW55IHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2J1aWx0aW5fdW5yZWFjaGFibGU8L2I+ICg8dmFyPnZvaWQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdW5yZWFjaGFibGUtMzM1NiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPklmIGNvbnRyb2wgZmxvdyByZWFjaGVzIHRoZSBwb2ludCBvZiB0aGUgPGNvZGU+X19idWlsdGluX3VucmVhY2hhYmxlPC9jb2RlPiwKK3RoZSBwcm9ncmFtIGlzIHVuZGVmaW5lZC4gIEl0IGlzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZQorY29tcGlsZXIgY2Fubm90IGRlZHVjZSB0aGUgdW5yZWFjaGFiaWxpdHkgb2YgdGhlIGNvZGUuCisKKyAgICAgIDxwPk9uZSBzdWNoIGNhc2UgaXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFuIDxjb2RlPmFzbTwvY29kZT4gc3RhdGVtZW50IHRoYXQKK2VpdGhlciBuZXZlciB0ZXJtaW5hdGVzLCBvciBvbmUgdGhhdCB0cmFuc2ZlcnMgY29udHJvbCBlbHNld2hlcmUKK2FuZCBuZXZlciByZXR1cm5zLiAgSW4gdGhpcyBleGFtcGxlLCB3aXRob3V0IHRoZQorPGNvZGU+X19idWlsdGluX3VucmVhY2hhYmxlPC9jb2RlPiwgR0NDIGlzc3VlcyBhIHdhcm5pbmcgdGhhdCBjb250cm9sCityZWFjaGVzIHRoZSBlbmQgb2YgYSBub24tdm9pZCBmdW5jdGlvbi4gIEl0IGFsc28gZ2VuZXJhdGVzIGNvZGUKK3RvIHJldHVybiBhZnRlciB0aGUgPGNvZGU+YXNtPC9jb2RlPi4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBpbnQgZiAoaW50IGMsIGludCB2KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHY7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFzbSgiam1wIGVycm9yX2hhbmRsZXIiKTsKKyAgICAgICAgICAgICAgICBfX2J1aWx0aW5fdW5yZWFjaGFibGUgKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgIDxwIGNsYXNzPSJub2luZGVudCI+QmVjYXVzZSB0aGUgPGNvZGU+YXNtPC9jb2RlPiBzdGF0ZW1lbnQgdW5jb25kaXRpb25hbGx5IHRyYW5zZmVycyBjb250cm9sIG91dAorb2YgdGhlIGZ1bmN0aW9uLCBjb250cm9sIG5ldmVyIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24KK2JvZHkuICBUaGUgPGNvZGU+X19idWlsdGluX3VucmVhY2hhYmxlPC9jb2RlPiBpcyBpbiBmYWN0IHVucmVhY2hhYmxlIGFuZAorY29tbXVuaWNhdGVzIHRoaXMgZmFjdCB0byB0aGUgY29tcGlsZXIuCisKKyAgICAgIDxwPkFub3RoZXIgdXNlIGZvciA8Y29kZT5fX2J1aWx0aW5fdW5yZWFjaGFibGU8L2NvZGU+IGlzIGZvbGxvd2luZyBhIGNhbGwgYQorZnVuY3Rpb24gdGhhdCBuZXZlciByZXR1cm5zIGJ1dCB0aGF0IGlzIG5vdCBkZWNsYXJlZAorPGNvZGU+X19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTwvY29kZT4sIGFzIGluIHRoaXMgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB2b2lkIGZ1bmN0aW9uX3RoYXRfbmV2ZXJfcmV0dXJucyAodm9pZCk7CisgICAgICAgICAgCisgICAgICAgICAgaW50IGcgKGludCBjKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZ1bmN0aW9uX3RoYXRfbmV2ZXJfcmV0dXJucyAoKTsKKyAgICAgICAgICAgICAgICBfX2J1aWx0aW5fdW5yZWFjaGFibGUgKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj4qX19idWlsdGluX2Fzc3VtZV9hbGlnbmVkPC9iPiAoPHZhcj5jb25zdCB2b2lkICpleHAsIHNpemVfdCBhbGlnbiwgLi4uPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmFfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmYXNzdW1lXzAwNWZhbGlnbmVkLTMzNTciPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LCBhbmQgYWxsb3dzIHRoZSBjb21waWxlcgordG8gYXNzdW1lIHRoYXQgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgYXQgbGVhc3QgPHZhcj5hbGlnbjwvdmFyPiBieXRlcworYWxpZ25lZC4gIFRoaXMgYnVpbHQtaW4gY2FuIGhhdmUgZWl0aGVyIHR3byBvciB0aHJlZSBhcmd1bWVudHMsCitpZiBpdCBoYXMgdGhyZWUsIHRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgaGF2ZSBpbnRlZ2VyIHR5cGUsIGFuZAoraWYgaXQgaXMgbm9uemVybyBtZWFucyBtaXNhbGlnbm1lbnQgb2Zmc2V0LiAgRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdm9pZCAqeCA9IF9fYnVpbHRpbl9hc3N1bWVfYWxpZ25lZCAoYXJnLCAxNik7Cis8L3ByZT4KKyAgICAgIDxwIGNsYXNzPSJub2luZGVudCI+bWVhbnMgdGhhdCB0aGUgY29tcGlsZXIgY2FuIGFzc3VtZSA8Y29kZT54PC9jb2RlPiwgc2V0IHRvIDxjb2RlPmFyZzwvY29kZT4sIGlzIGF0IGxlYXN0CisxNi1ieXRlIGFsaWduZWQsIHdoaWxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHZvaWQgKnggPSBfX2J1aWx0aW5fYXNzdW1lX2FsaWduZWQgKGFyZywgMzIsIDgpOworPC9wcmU+CisgICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPm1lYW5zIHRoYXQgdGhlIGNvbXBpbGVyIGNhbiBhc3N1bWUgZm9yIDxjb2RlPng8L2NvZGU+LCBzZXQgdG8gPGNvZGU+YXJnPC9jb2RlPiwgdGhhdAorPGNvZGU+KGNoYXIgKikgeCAtIDg8L2NvZGU+IGlzIDMyLWJ5dGUgYWxpZ25lZC4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBpbnQgPGI+X19idWlsdGluX0xJTkU8L2I+ICgpPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmTElORS0zMzU4Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhpcyBmdW5jdGlvbiBpcyB0aGUgZXF1aXZhbGVudCB0byB0aGUgcHJlcHJvY2Vzc29yIDxjb2RlPl9fTElORV9fPC9jb2RlPgorbWFjcm8gYW5kIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSBidWlsdC1pbi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBpbnQgPGI+X19idWlsdGluX0ZVTkNUSU9OPC9iPiAoKTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZkZVTkNUSU9OLTMzNTkiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIGlzIHRoZSBlcXVpdmFsZW50IHRvIHRoZSBwcmVwcm9jZXNzb3IgPGNvZGU+X19GVU5DVElPTl9fPC9jb2RlPgorbWFjcm8gYW5kIHJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUgdGhlIGludm9jYXRpb24gb2YgdGhlIGJ1aWx0LWluIGlzIGluLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fRklMRTwvYj4gKCk8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZGSUxFLTMzNjAiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIGlzIHRoZSBlcXVpdmFsZW50IHRvIHRoZSBwcmVwcm9jZXNzb3IgPGNvZGU+X19GSUxFX188L2NvZGU+CittYWNybyBhbmQgcmV0dXJucyB0aGUgZmlsZSBuYW1lIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSBidWlsdC1pbiBpcyBpbi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlPC9iPiAoPHZhcj5jaGFyICpiZWdpbiwgY2hhciAqZW5kPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zl8wMDVmXzAwNWZjbGVhcl8wMDVmY2FjaGUtMzM2MSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBmbHVzaCB0aGUgcHJvY2Vzc29yJ3MgaW5zdHJ1Y3Rpb24gY2FjaGUgZm9yCit0aGUgcmVnaW9uIG9mIG1lbW9yeSBiZXR3ZWVuIDx2YXI+YmVnaW48L3Zhcj4gaW5jbHVzaXZlIGFuZCA8dmFyPmVuZDwvdmFyPgorZXhjbHVzaXZlLiAgU29tZSB0YXJnZXRzIHJlcXVpcmUgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgYmUKK2ZsdXNoZWQsIGFmdGVyIG1vZGlmeWluZyBtZW1vcnkgY29udGFpbmluZyBjb2RlLCBpbiBvcmRlciB0byBvYnRhaW4KK2RldGVybWluaXN0aWMgYmVoYXZpb3IuCisKKyAgICAgIDxwPklmIHRoZSB0YXJnZXQgZG9lcyBub3QgcmVxdWlyZSBpbnN0cnVjdGlvbiBjYWNoZSBmbHVzaGVzLAorPGNvZGU+X19idWlsdGluX19fY2xlYXJfY2FjaGU8L2NvZGU+IGhhcyBubyBlZmZlY3QuICBPdGhlcndpc2UgZWl0aGVyCitpbnN0cnVjdGlvbnMgYXJlIGVtaXR0ZWQgaW4tbGluZSB0byBjbGVhciB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgb3IgYQorY2FsbCB0byB0aGUgPGNvZGU+X19jbGVhcl9jYWNoZTwvY29kZT4gZnVuY3Rpb24gaW4gbGliZ2NjIGlzIG1hZGUuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2J1aWx0aW5fcHJlZmV0Y2g8L2I+ICg8dmFyPmNvbnN0IHZvaWQgKmFkZHIsIC4uLjwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwcmVmZXRjaC0zMzYyIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1pbmltaXplIGNhY2hlLW1pc3MgbGF0ZW5jeSBieSBtb3ZpbmcgZGF0YSBpbnRvCithIGNhY2hlIGJlZm9yZSBpdCBpcyBhY2Nlc3NlZC4gCitZb3UgY2FuIGluc2VydCBjYWxscyB0byA8Y29kZT5fX2J1aWx0aW5fcHJlZmV0Y2g8L2NvZGU+IGludG8gY29kZSBmb3Igd2hpY2gKK3lvdSBrbm93IGFkZHJlc3NlcyBvZiBkYXRhIGluIG1lbW9yeSB0aGF0IGlzIGxpa2VseSB0byBiZSBhY2Nlc3NlZCBzb29uLiAKK0lmIHRoZSB0YXJnZXQgc3VwcG9ydHMgdGhlbSwgZGF0YSBwcmVmZXRjaCBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZC4gCitJZiB0aGUgcHJlZmV0Y2ggaXMgZG9uZSBlYXJseSBlbm91Z2ggYmVmb3JlIHRoZSBhY2Nlc3MgdGhlbiB0aGUgZGF0YSB3aWxsCitiZSBpbiB0aGUgY2FjaGUgYnkgdGhlIHRpbWUgaXQgaXMgYWNjZXNzZWQuCisKKyAgICAgIDxwPlRoZSB2YWx1ZSBvZiA8dmFyPmFkZHI8L3Zhcj4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0byBwcmVmZXRjaC4gCitUaGVyZSBhcmUgdHdvIG9wdGlvbmFsIGFyZ3VtZW50cywgPHZhcj5ydzwvdmFyPiBhbmQgPHZhcj5sb2NhbGl0eTwvdmFyPi4gCitUaGUgdmFsdWUgb2YgPHZhcj5ydzwvdmFyPiBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBvbmUgb3IgemVybzsgb25lCittZWFucyB0aGF0IHRoZSBwcmVmZXRjaCBpcyBwcmVwYXJpbmcgZm9yIGEgd3JpdGUgdG8gdGhlIG1lbW9yeSBhZGRyZXNzCithbmQgemVybywgdGhlIGRlZmF1bHQsIG1lYW5zIHRoYXQgdGhlIHByZWZldGNoIGlzIHByZXBhcmluZyBmb3IgYSByZWFkLiAKK1RoZSB2YWx1ZSA8dmFyPmxvY2FsaXR5PC92YXI+IG11c3QgYmUgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgaW50ZWdlciBiZXR3ZWVuCit6ZXJvIGFuZCB0aHJlZS4gIEEgdmFsdWUgb2YgemVybyBtZWFucyB0aGF0IHRoZSBkYXRhIGhhcyBubyB0ZW1wb3JhbAorbG9jYWxpdHksIHNvIGl0IG5lZWQgbm90IGJlIGxlZnQgaW4gdGhlIGNhY2hlIGFmdGVyIHRoZSBhY2Nlc3MuICBBIHZhbHVlCitvZiB0aHJlZSBtZWFucyB0aGF0IHRoZSBkYXRhIGhhcyBhIGhpZ2ggZGVncmVlIG9mIHRlbXBvcmFsIGxvY2FsaXR5IGFuZAorc2hvdWxkIGJlIGxlZnQgaW4gYWxsIGxldmVscyBvZiBjYWNoZSBwb3NzaWJsZS4gIFZhbHVlcyBvZiBvbmUgYW5kIHR3bworbWVhbiwgcmVzcGVjdGl2ZWx5LCBhIGxvdyBvciBtb2RlcmF0ZSBkZWdyZWUgb2YgdGVtcG9yYWwgbG9jYWxpdHkuICBUaGUKK2RlZmF1bHQgaXMgdGhyZWUuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZm9yIChpID0gMDsgaSAmbHQ7IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYVtpXSA9IGFbaV0gKyBiW2ldOworICAgICAgICAgICAgICBfX2J1aWx0aW5fcHJlZmV0Y2ggKCZhbXA7YVtpK2pdLCAxLCAxKTsKKyAgICAgICAgICAgICAgX19idWlsdGluX3ByZWZldGNoICgmYW1wO2JbaStqXSwgMCwgMSk7CisgICAgICAgICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICAgICAgICAgfQorPC9wcmU+CisgICAgICA8cD5EYXRhIHByZWZldGNoIGRvZXMgbm90IGdlbmVyYXRlIGZhdWx0cyBpZiA8dmFyPmFkZHI8L3Zhcj4gaXMgaW52YWxpZCwgYnV0Cit0aGUgYWRkcmVzcyBleHByZXNzaW9uIGl0c2VsZiBtdXN0IGJlIHZhbGlkLiAgRm9yIGV4YW1wbGUsIGEgcHJlZmV0Y2gKK29mIDxjb2RlPnAtJmd0O25leHQ8L2NvZGU+IGRvZXMgbm90IGZhdWx0IGlmIDxjb2RlPnAtJmd0O25leHQ8L2NvZGU+IGlzIG5vdCBhIHZhbGlkCithZGRyZXNzLCBidXQgZXZhbHVhdGlvbiBmYXVsdHMgaWYgPGNvZGU+cDwvY29kZT4gaXMgbm90IGEgdmFsaWQgYWRkcmVzcy4KKworICAgICAgPHA+SWYgdGhlIHRhcmdldCBkb2VzIG5vdCBzdXBwb3J0IGRhdGEgcHJlZmV0Y2gsIHRoZSBhZGRyZXNzIGV4cHJlc3Npb24KK2lzIGV2YWx1YXRlZCBpZiBpdCBpbmNsdWRlcyBzaWRlIGVmZmVjdHMgYnV0IG5vIG90aGVyIGNvZGUgaXMgZ2VuZXJhdGVkCithbmQgR0NDIGRvZXMgbm90IGlzc3VlIGEgd2FybmluZy4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBkb3VibGUgPGI+X19idWlsdGluX2h1Z2VfdmFsPC9iPiAoPHZhcj52b2lkPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zmh1Z2VfMDA1ZnZhbC0zMzYzIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+UmV0dXJucyBhIHBvc2l0aXZlIGluZmluaXR5LCBpZiBzdXBwb3J0ZWQgYnkgdGhlIGZsb2F0aW5nLXBvaW50IGZvcm1hdCwKK2Vsc2UgPGNvZGU+REJMX01BWDwvY29kZT4uICBUaGlzIGZ1bmN0aW9uIGlzIHN1aXRhYmxlIGZvciBpbXBsZW1lbnRpbmcgdGhlCitJU08gQyBtYWNybyA8Y29kZT5IVUdFX1ZBTDwvY29kZT4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogZmxvYXQgPGI+X19idWlsdGluX2h1Z2VfdmFsZjwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZodWdlXzAwNWZ2YWxmLTMzNjQiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9odWdlX3ZhbDwvY29kZT4sIGV4Y2VwdCB0aGUgcmV0dXJuIHR5cGUgaXMgPGNvZGU+ZmxvYXQ8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGxvbmcgZG91YmxlIDxiPl9fYnVpbHRpbl9odWdlX3ZhbGw8L2I+ICg8dmFyPnZvaWQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaHVnZV8wMDVmdmFsbC0zMzY1Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5faHVnZV92YWw8L2NvZGU+LCBleGNlcHQgdGhlIHJldHVybgordHlwZSBpcyA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9mcGNsYXNzaWZ5PC9iPiAoPHZhcj5pbnQsIGludCwgaW50LCBpbnQsIGludCwgLi4uPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmZwY2xhc3NpZnktMzM2NiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlRoaXMgYnVpbHQtaW4gaW1wbGVtZW50cyB0aGUgQzk5IGZwY2xhc3NpZnkgZnVuY3Rpb25hbGl0eS4gIFRoZSBmaXJzdAorZml2ZSBpbnQgYXJndW1lbnRzIHNob3VsZCBiZSB0aGUgdGFyZ2V0IGxpYnJhcnkncyBub3Rpb24gb2YgdGhlCitwb3NzaWJsZSBGUCBjbGFzc2VzIGFuZCBhcmUgdXNlZCBmb3IgcmV0dXJuIHZhbHVlcy4gIFRoZXkgbXVzdCBiZQorY29uc3RhbnQgdmFsdWVzIGFuZCB0aGV5IG11c3QgYXBwZWFyIGluIHRoaXMgb3JkZXI6IDxjb2RlPkZQX05BTjwvY29kZT4sCis8Y29kZT5GUF9JTkZJTklURTwvY29kZT4sIDxjb2RlPkZQX05PUk1BTDwvY29kZT4sIDxjb2RlPkZQX1NVQk5PUk1BTDwvY29kZT4gYW5kCis8Y29kZT5GUF9aRVJPPC9jb2RlPi4gIFRoZSBlbGxpcHNpcyBpcyBmb3IgZXhhY3RseSBvbmUgZmxvYXRpbmctcG9pbnQgdmFsdWUKK3RvIGNsYXNzaWZ5LiAgR0NDIHRyZWF0cyB0aGUgbGFzdCBhcmd1bWVudCBhcyB0eXBlLWdlbmVyaWMsIHdoaWNoCittZWFucyBpdCBkb2VzIG5vdCBkbyBkZWZhdWx0IHByb21vdGlvbiBmcm9tIGZsb2F0IHRvIGRvdWJsZS4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBkb3VibGUgPGI+X19idWlsdGluX2luZjwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpbmYtMzM2NyI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX2h1Z2VfdmFsPC9jb2RlPiwgZXhjZXB0IGEgd2FybmluZyBpcyBnZW5lcmF0ZWQKK2lmIHRoZSB0YXJnZXQgZmxvYXRpbmctcG9pbnQgZm9ybWF0IGRvZXMgbm90IHN1cHBvcnQgaW5maW5pdGllcy4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBfRGVjaW1hbDMyIDxiPl9fYnVpbHRpbl9pbmZkMzI8L2I+ICg8dmFyPnZvaWQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaW5mZDMyLTMzNjgiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9pbmY8L2NvZGU+LCBleGNlcHQgdGhlIHJldHVybiB0eXBlIGlzIDxjb2RlPl9EZWNpbWFsMzI8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IF9EZWNpbWFsNjQgPGI+X19idWlsdGluX2luZmQ2NDwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpbmZkNjQtMzM2OSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX2luZjwvY29kZT4sIGV4Y2VwdCB0aGUgcmV0dXJuIHR5cGUgaXMgPGNvZGU+X0RlY2ltYWw2NDwvY29kZT4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogX0RlY2ltYWwxMjggPGI+X19idWlsdGluX2luZmQxMjg8L2I+ICg8dmFyPnZvaWQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaW5mZDEyOC0zMzcwIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5faW5mPC9jb2RlPiwgZXhjZXB0IHRoZSByZXR1cm4gdHlwZSBpcyA8Y29kZT5fRGVjaW1hbDEyODwvY29kZT4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogZmxvYXQgPGI+X19idWlsdGluX2luZmY8L2I+ICg8dmFyPnZvaWQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaW5mZi0zMzcxIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5faW5mPC9jb2RlPiwgZXhjZXB0IHRoZSByZXR1cm4gdHlwZSBpcyA8Y29kZT5mbG9hdDwvY29kZT4uIAorVGhpcyBmdW5jdGlvbiBpcyBzdWl0YWJsZSBmb3IgaW1wbGVtZW50aW5nIHRoZSBJU08gQzk5IG1hY3JvIDxjb2RlPklORklOSVRZPC9jb2RlPi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSA8Yj5fX2J1aWx0aW5faW5mbDwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZpbmZsLTMzNzIiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9pbmY8L2NvZGU+LCBleGNlcHQgdGhlIHJldHVybgordHlwZSBpcyA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9pc2luZl9zaWduPC9iPiAoPHZhcj4uLi48L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmaXNpbmZfMDA1ZnNpZ24tMzM3MyI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+aXNpbmY8L2NvZGU+LCBleGNlcHQgdGhlIHJldHVybiB2YWx1ZSBpcyBuZWdhdGl2ZSBmb3IKK2FuIGFyZ3VtZW50IG9mIDxjb2RlPi1JbmY8L2NvZGU+LiAgTm90ZSB3aGlsZSB0aGUgcGFyYW1ldGVyIGxpc3QgaXMgYW4KK2VsbGlwc2lzLCB0aGlzIGZ1bmN0aW9uIG9ubHkgYWNjZXB0cyBleGFjdGx5IG9uZSBmbG9hdGluZy1wb2ludAorYXJndW1lbnQuICBHQ0MgdHJlYXRzIHRoaXMgcGFyYW1ldGVyIGFzIHR5cGUtZ2VuZXJpYywgd2hpY2ggbWVhbnMgaXQKK2RvZXMgbm90IGRvIGRlZmF1bHQgcHJvbW90aW9uIGZyb20gZmxvYXQgdG8gZG91YmxlLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGRvdWJsZSA8Yj5fX2J1aWx0aW5fbmFuPC9iPiAoPHZhcj5jb25zdCBjaGFyICpzdHI8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmbmFuLTMzNzQiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJU08gQzk5IGZ1bmN0aW9uIDxjb2RlPm5hbjwvY29kZT4uCisKKyAgICAgIDxwPlNpbmNlIElTTyBDOTkgZGVmaW5lcyB0aGlzIGZ1bmN0aW9uIGluIHRlcm1zIG9mIDxjb2RlPnN0cnRvZDwvY29kZT4sIHdoaWNoIHdlCitkbyBub3QgaW1wbGVtZW50LCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJzaW5nIGlzIGluIG9yZGVyLiAgVGhlIHN0cmluZworaXMgcGFyc2VkIGFzIGJ5IDxjb2RlPnN0cnRvbDwvY29kZT47IHRoYXQgaXMsIHRoZSBiYXNlIGlzIHJlY29nbml6ZWQgYnkKK2xlYWRpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJlZml4ZXMuICBUaGUgbnVtYmVyIHBhcnNlZCBpcyBwbGFjZWQKK2luIHRoZSBzaWduaWZpY2FuZCBzdWNoIHRoYXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgbnVtYmVyCitpcyBhdCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBzaWduaWZpY2FuZC4gIFRoZSBudW1iZXIgaXMKK3RydW5jYXRlZCB0byBmaXQgdGhlIHNpZ25pZmljYW5kIGZpZWxkIHByb3ZpZGVkLiAgVGhlIHNpZ25pZmljYW5kIGlzCitmb3JjZWQgdG8gYmUgYSBxdWlldCBOYU4uCisKKyAgICAgIDxwPlRoaXMgZnVuY3Rpb24sIGlmIGdpdmVuIGEgc3RyaW5nIGxpdGVyYWwgYWxsIG9mIHdoaWNoIHdvdWxkIGhhdmUgYmVlbgorY29uc3VtZWQgYnkgPGNvZGU+c3RydG9sPC9jb2RlPiwgaXMgZXZhbHVhdGVkIGVhcmx5IGVub3VnaCB0aGF0IGl0IGlzIGNvbnNpZGVyZWQgYQorY29tcGlsZS10aW1lIGNvbnN0YW50LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IF9EZWNpbWFsMzIgPGI+X19idWlsdGluX25hbmQzMjwvYj4gKDx2YXI+Y29uc3QgY2hhciAqc3RyPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zm5hbmQzMi0zMzc1Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fbmFuPC9jb2RlPiwgZXhjZXB0IHRoZSByZXR1cm4gdHlwZSBpcyA8Y29kZT5fRGVjaW1hbDMyPC9jb2RlPi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBfRGVjaW1hbDY0IDxiPl9fYnVpbHRpbl9uYW5kNjQ8L2I+ICg8dmFyPmNvbnN0IGNoYXIgKnN0cjwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZuYW5kNjQtMzM3NiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX25hbjwvY29kZT4sIGV4Y2VwdCB0aGUgcmV0dXJuIHR5cGUgaXMgPGNvZGU+X0RlY2ltYWw2NDwvY29kZT4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogX0RlY2ltYWwxMjggPGI+X19idWlsdGluX25hbmQxMjg8L2I+ICg8dmFyPmNvbnN0IGNoYXIgKnN0cjwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZuYW5kMTI4LTMzNzciPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9uYW48L2NvZGU+LCBleGNlcHQgdGhlIHJldHVybiB0eXBlIGlzIDxjb2RlPl9EZWNpbWFsMTI4PC9jb2RlPi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBmbG9hdCA8Yj5fX2J1aWx0aW5fbmFuZjwvYj4gKDx2YXI+Y29uc3QgY2hhciAqc3RyPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zm5hbmYtMzM3OCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX25hbjwvY29kZT4sIGV4Y2VwdCB0aGUgcmV0dXJuIHR5cGUgaXMgPGNvZGU+ZmxvYXQ8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGxvbmcgZG91YmxlIDxiPl9fYnVpbHRpbl9uYW5sPC9iPiAoPHZhcj5jb25zdCBjaGFyICpzdHI8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmbmFubC0zMzc5Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fbmFuPC9jb2RlPiwgZXhjZXB0IHRoZSByZXR1cm4gdHlwZSBpcyA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogZG91YmxlIDxiPl9fYnVpbHRpbl9uYW5zPC9iPiAoPHZhcj5jb25zdCBjaGFyICpzdHI8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmbmFucy0zMzgwIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fbmFuPC9jb2RlPiwgZXhjZXB0IHRoZSBzaWduaWZpY2FuZCBpcyBmb3JjZWQKK3RvIGJlIGEgc2lnbmFsaW5nIE5hTi4gIFRoZSA8Y29kZT5uYW5zPC9jb2RlPiBmdW5jdGlvbiBpcyBwcm9wb3NlZCBieQorPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMTQvd3d3L2RvY3Mvbjk2NS5odG0iPldHMTQgTjk2NTwvYT4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogZmxvYXQgPGI+X19idWlsdGluX25hbnNmPC9iPiAoPHZhcj5jb25zdCBjaGFyICpzdHI8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmbmFuc2YtMzM4MSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX25hbnM8L2NvZGU+LCBleGNlcHQgdGhlIHJldHVybiB0eXBlIGlzIDxjb2RlPmZsb2F0PC9jb2RlPi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBsb25nIGRvdWJsZSA8Yj5fX2J1aWx0aW5fbmFuc2w8L2I+ICg8dmFyPmNvbnN0IGNoYXIgKnN0cjwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZuYW5zbC0zMzgyIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fbmFuczwvY29kZT4sIGV4Y2VwdCB0aGUgcmV0dXJuIHR5cGUgaXMgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fZmZzPC9iPiAoPHZhcj51bnNpZ25lZCBpbnQgeDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZmZnMtMzM4MyI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlJldHVybnMgb25lIHBsdXMgdGhlIGluZGV4IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCAxLWJpdCBvZiA8dmFyPng8L3Zhcj4sIG9yCitpZiA8dmFyPng8L3Zhcj4gaXMgemVybywgcmV0dXJucyB6ZXJvLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fY2x6PC9iPiAoPHZhcj51bnNpZ25lZCBpbnQgeDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjbHotMzM4NCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlJldHVybnMgdGhlIG51bWJlciBvZiBsZWFkaW5nIDAtYml0cyBpbiA8dmFyPng8L3Zhcj4sIHN0YXJ0aW5nIGF0IHRoZSBtb3N0CitzaWduaWZpY2FudCBiaXQgcG9zaXRpb24uICBJZiA8dmFyPng8L3Zhcj4gaXMgMCwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9jdHo8L2I+ICg8dmFyPnVuc2lnbmVkIGludCB4PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmN0ei0zMzg1Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+UmV0dXJucyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIDAtYml0cyBpbiA8dmFyPng8L3Zhcj4sIHN0YXJ0aW5nIGF0IHRoZSBsZWFzdAorc2lnbmlmaWNhbnQgYml0IHBvc2l0aW9uLiAgSWYgPHZhcj54PC92YXI+IGlzIDAsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fY2xyc2I8L2I+ICg8dmFyPmludCB4PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNscnNiLTMzODYiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5SZXR1cm5zIHRoZSBudW1iZXIgb2YgbGVhZGluZyByZWR1bmRhbnQgc2lnbiBiaXRzIGluIDx2YXI+eDwvdmFyPiwgaS5lLiB0aGUKK251bWJlciBvZiBiaXRzIGZvbGxvd2luZyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgdGhhdCBhcmUgaWRlbnRpY2FsCit0byBpdC4gIFRoZXJlIGFyZSBubyBzcGVjaWFsIGNhc2VzIGZvciAwIG9yIG90aGVyIHZhbHVlcy4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBpbnQgPGI+X19idWlsdGluX3BvcGNvdW50PC9iPiAoPHZhcj51bnNpZ25lZCBpbnQgeDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwb3Bjb3VudC0zMzg3Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+UmV0dXJucyB0aGUgbnVtYmVyIG9mIDEtYml0cyBpbiA8dmFyPng8L3Zhcj4uIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9wYXJpdHk8L2I+ICg8dmFyPnVuc2lnbmVkIGludCB4PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnBhcml0eS0zMzg4Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+UmV0dXJucyB0aGUgcGFyaXR5IG9mIDx2YXI+eDwvdmFyPiwgaS5lLiB0aGUgbnVtYmVyIG9mIDEtYml0cyBpbiA8dmFyPng8L3Zhcj4KK21vZHVsbyAyLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fZmZzbDwvYj4gKDx2YXI+dW5zaWduZWQgbG9uZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZmZnNsLTMzODkiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9mZnM8L2NvZGU+LCBleGNlcHQgdGhlIGFyZ3VtZW50IHR5cGUgaXMKKzxjb2RlPnVuc2lnbmVkIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fY2x6bDwvYj4gKDx2YXI+dW5zaWduZWQgbG9uZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjbHpsLTMzOTAiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9jbHo8L2NvZGU+LCBleGNlcHQgdGhlIGFyZ3VtZW50IHR5cGUgaXMKKzxjb2RlPnVuc2lnbmVkIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fY3R6bDwvYj4gKDx2YXI+dW5zaWduZWQgbG9uZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjdHpsLTMzOTEiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9jdHo8L2NvZGU+LCBleGNlcHQgdGhlIGFyZ3VtZW50IHR5cGUgaXMKKzxjb2RlPnVuc2lnbmVkIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fY2xyc2JsPC9iPiAoPHZhcj5sb25nPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNscnNibC0zMzkyIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fY2xyc2I8L2NvZGU+LCBleGNlcHQgdGhlIGFyZ3VtZW50IHR5cGUgaXMKKzxjb2RlPmxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fcG9wY291bnRsPC9iPiAoPHZhcj51bnNpZ25lZCBsb25nPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnBvcGNvdW50bC0zMzkzIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fcG9wY291bnQ8L2NvZGU+LCBleGNlcHQgdGhlIGFyZ3VtZW50IHR5cGUgaXMKKzxjb2RlPnVuc2lnbmVkIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fcGFyaXR5bDwvYj4gKDx2YXI+dW5zaWduZWQgbG9uZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwYXJpdHlsLTMzOTQiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9wYXJpdHk8L2NvZGU+LCBleGNlcHQgdGhlIGFyZ3VtZW50IHR5cGUgaXMKKzxjb2RlPnVuc2lnbmVkIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fZmZzbGw8L2I+ICg8dmFyPnVuc2lnbmVkIGxvbmcgbG9uZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZmZnNsbC0zMzk1Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fZmZzPC9jb2RlPiwgZXhjZXB0IHRoZSBhcmd1bWVudCB0eXBlIGlzCis8Y29kZT51bnNpZ25lZCBsb25nIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fY2x6bGw8L2I+ICg8dmFyPnVuc2lnbmVkIGxvbmcgbG9uZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjbHpsbC0zMzk2Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fY2x6PC9jb2RlPiwgZXhjZXB0IHRoZSBhcmd1bWVudCB0eXBlIGlzCis8Y29kZT51bnNpZ25lZCBsb25nIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fY3R6bGw8L2I+ICg8dmFyPnVuc2lnbmVkIGxvbmcgbG9uZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjdHpsbC0zMzk3Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fY3R6PC9jb2RlPiwgZXhjZXB0IHRoZSBhcmd1bWVudCB0eXBlIGlzCis8Y29kZT51bnNpZ25lZCBsb25nIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fY2xyc2JsbDwvYj4gKDx2YXI+bG9uZyBsb25nPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmNscnNibGwtMzM5OCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX2NscnNiPC9jb2RlPiwgZXhjZXB0IHRoZSBhcmd1bWVudCB0eXBlIGlzCis8Y29kZT5sb25nIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fcG9wY291bnRsbDwvYj4gKDx2YXI+dW5zaWduZWQgbG9uZyBsb25nPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnBvcGNvdW50bGwtMzM5OSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX3BvcGNvdW50PC9jb2RlPiwgZXhjZXB0IHRoZSBhcmd1bWVudCB0eXBlIGlzCis8Y29kZT51bnNpZ25lZCBsb25nIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fcGFyaXR5bGw8L2I+ICg8dmFyPnVuc2lnbmVkIGxvbmcgbG9uZzwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwYXJpdHlsbC0zNDAwIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fcGFyaXR5PC9jb2RlPiwgZXhjZXB0IHRoZSBhcmd1bWVudCB0eXBlIGlzCis8Y29kZT51bnNpZ25lZCBsb25nIGxvbmc8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGRvdWJsZSA8Yj5fX2J1aWx0aW5fcG93aTwvYj4gKDx2YXI+ZG91YmxlLCBpbnQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcG93aS0zNDAxIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+UmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiB0aGUgc2Vjb25kLiAgVW5saWtlIHRoZQorPGNvZGU+cG93PC9jb2RlPiBmdW5jdGlvbiBubyBndWFyYW50ZWVzIGFib3V0IHByZWNpc2lvbiBhbmQgcm91bmRpbmcgYXJlIG1hZGUuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogZmxvYXQgPGI+X19idWlsdGluX3Bvd2lmPC9iPiAoPHZhcj5mbG9hdCwgaW50PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnBvd2lmLTM0MDIiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9wb3dpPC9jb2RlPiwgZXhjZXB0IHRoZSBhcmd1bWVudCBhbmQgcmV0dXJuIHR5cGVzCithcmUgPGNvZGU+ZmxvYXQ8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGxvbmcgZG91YmxlIDxiPl9fYnVpbHRpbl9wb3dpbDwvYj4gKDx2YXI+bG9uZyBkb3VibGUsIGludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZwb3dpbC0zNDAzIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+U2ltaWxhciB0byA8Y29kZT5fX2J1aWx0aW5fcG93aTwvY29kZT4sIGV4Y2VwdCB0aGUgYXJndW1lbnQgYW5kIHJldHVybiB0eXBlcworYXJlIDxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB1aW50MTZfdCA8Yj5fX2J1aWx0aW5fYnN3YXAxNjwvYj4gKDx2YXI+dWludDE2X3QgeDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZic3dhcDE2LTM0MDQiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5SZXR1cm5zIDx2YXI+eDwvdmFyPiB3aXRoIHRoZSBvcmRlciBvZiB0aGUgYnl0ZXMgcmV2ZXJzZWQ7IGZvciBleGFtcGxlLAorPGNvZGU+MHhhYWJiPC9jb2RlPiBiZWNvbWVzIDxjb2RlPjB4YmJhYTwvY29kZT4uICBCeXRlIGhlcmUgYWx3YXlzIG1lYW5zCitleGFjdGx5IDggYml0cy4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB1aW50MzJfdCA8Yj5fX2J1aWx0aW5fYnN3YXAzMjwvYj4gKDx2YXI+dWludDMyX3QgeDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZic3dhcDMyLTM0MDUiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9ic3dhcDE2PC9jb2RlPiwgZXhjZXB0IHRoZSBhcmd1bWVudCBhbmQgcmV0dXJuIHR5cGVzCithcmUgMzIgYml0LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHVpbnQ2NF90IDxiPl9fYnVpbHRpbl9ic3dhcDY0PC9iPiAoPHZhcj51aW50NjRfdCB4PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmJzd2FwNjQtMzQwNiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX2Jzd2FwMzI8L2NvZGU+LCBleGNlcHQgdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4gdHlwZXMKK2FyZSA2NCBiaXQuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT3RoZXItTUlQUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL090aGVyLU1JUFMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjE3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL090aGVyLU1JUFMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk90aGVyIE1JUFMgQnVpbHQtaW4gRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyIgdGl0bGU9IlRhcmdldCBCdWlsdGlucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9Ik1JUFMgTG9vbmdzb24gQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0icGljb0NoaXAtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI3BpY29DaGlwLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJwaWNvQ2hpcCBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3RoZXItTUlQUy1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9Ik90aGVyLU1JUFMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJwaWNvQ2hpcC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjcGljb0NoaXAtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+cGljb0NoaXAgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5NSVBTIExvb25nc29uIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni4xMiBPdGhlciBNSVBTIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPkdDQyBwcm92aWRlcyBvdGhlciBNSVBTLXNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9uczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+dm9pZCBfX2J1aWx0aW5fbWlwc19jYWNoZSAoaW50IDwvY29kZT48dmFyPm9wPC92YXI+PGNvZGU+LCBjb25zdCB2b2xhdGlsZSB2b2lkICo8L2NvZGU+PHZhcj5hZGRyPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+SW5zZXJ0IGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWNoZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbiB3aXRoIG9wZXJhbmRzIDx2YXI+b3A8L3Zhcj4gYW5kIDx2YXI+YWRkcjwvdmFyPi4gCitHQ0MgZGVmaW5lcyB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvIDxjb2RlPl9fX0dDQ19IQVZFX0JVSUxUSU5fTUlQU19DQUNIRTwvY29kZT4KK3doZW4gdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvT3ZlcmFsbC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL092ZXJhbGwtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NWY5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL092ZXJhbGwtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMzgzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PdmVyYWxsIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIiB0aXRsZT0iSW52b2tpbmcgR0NDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3B0aW9uLVN1bW1hcnkuaHRtbCNPcHRpb24tU3VtbWFyeSIgdGl0bGU9Ik9wdGlvbiBTdW1tYXJ5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNJbnZva2luZy1HXzAwMmJfMDAyYiIgdGl0bGU9Ikludm9raW5nIEcrKyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPdmVyYWxsLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNJbnZva2luZy1HXzAwMmJfMDAyYiI+SW52b2tpbmcgRysrPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3B0aW9uLVN1bW1hcnkuaHRtbCNPcHRpb24tU3VtbWFyeSI+T3B0aW9uIFN1bW1hcnk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMiBPcHRpb25zIENvbnRyb2xsaW5nIHRoZSBLaW5kIG9mIE91dHB1dDwvaDM+CisKKzxwPkNvbXBpbGF0aW9uIGNhbiBpbnZvbHZlIHVwIHRvIGZvdXIgc3RhZ2VzOiBwcmVwcm9jZXNzaW5nLCBjb21waWxhdGlvbgorcHJvcGVyLCBhc3NlbWJseSBhbmQgbGlua2luZywgYWx3YXlzIGluIHRoYXQgb3JkZXIuICBHQ0MgaXMgY2FwYWJsZSBvZgorcHJlcHJvY2Vzc2luZyBhbmQgY29tcGlsaW5nIHNldmVyYWwgZmlsZXMgZWl0aGVyIGludG8gc2V2ZXJhbAorYXNzZW1ibGVyIGlucHV0IGZpbGVzLCBvciBpbnRvIG9uZSBhc3NlbWJsZXIgaW5wdXQgZmlsZTsgdGhlbiBlYWNoCithc3NlbWJsZXIgaW5wdXQgZmlsZSBwcm9kdWNlcyBhbiBvYmplY3QgZmlsZSwgYW5kIGxpbmtpbmcgY29tYmluZXMgYWxsCit0aGUgb2JqZWN0IGZpbGVzICh0aG9zZSBuZXdseSBjb21waWxlZCwgYW5kIHRob3NlIHNwZWNpZmllZCBhcyBpbnB1dCkKK2ludG8gYW4gZXhlY3V0YWJsZSBmaWxlLgorCisgPHA+PGEgbmFtZT0iaW5kZXgtZmlsZS1uYW1lLXN1ZmZpeC03NiI+PC9hPkZvciBhbnkgZ2l2ZW4gaW5wdXQgZmlsZSwgdGhlIGZpbGUgbmFtZSBzdWZmaXggZGV0ZXJtaW5lcyB3aGF0IGtpbmQgb2YKK2NvbXBpbGF0aW9uIGlzIGRvbmU6CisKKyAgICAgPGRsPgorPGR0Pjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5jPC9jb2RlPjxkZD5DIHNvdXJjZSBjb2RlIHRoYXQgbXVzdCBiZSBwcmVwcm9jZXNzZWQuCisKKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uaTwvY29kZT48ZGQ+QyBzb3VyY2UgY29kZSB0aGF0IHNob3VsZCBub3QgYmUgcHJlcHJvY2Vzc2VkLgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmlpPC9jb2RlPjxkZD5DKysgc291cmNlIGNvZGUgdGhhdCBzaG91bGQgbm90IGJlIHByZXByb2Nlc3NlZC4KKworICAgICA8YnI+PGR0Pjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5tPC9jb2RlPjxkZD5PYmplY3RpdmUtQyBzb3VyY2UgY29kZS4gIE5vdGUgdGhhdCB5b3UgbXVzdCBsaW5rIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJvYmpjPC9zcGFuPjwvc2FtcD4KK2xpYnJhcnkgdG8gbWFrZSBhbiBPYmplY3RpdmUtQyBwcm9ncmFtIHdvcmsuCisKKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4ubWk8L2NvZGU+PGRkPk9iamVjdGl2ZS1DIHNvdXJjZSBjb2RlIHRoYXQgc2hvdWxkIG5vdCBiZSBwcmVwcm9jZXNzZWQuCisKKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4ubW08L2NvZGU+PGR0Pjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5NPC9jb2RlPjxkZD5PYmplY3RpdmUtQysrIHNvdXJjZSBjb2RlLiAgTm90ZSB0aGF0IHlvdSBtdXN0IGxpbmsgd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYm9iamM8L3NwYW4+PC9zYW1wPgorbGlicmFyeSB0byBtYWtlIGFuIE9iamVjdGl2ZS1DKysgcHJvZ3JhbSB3b3JrLiAgTm90ZSB0aGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lk08L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVmZXJzCit0byBhIGxpdGVyYWwgY2FwaXRhbCBNLgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+Lm1paTwvY29kZT48ZGQ+T2JqZWN0aXZlLUMrKyBzb3VyY2UgY29kZSB0aGF0IHNob3VsZCBub3QgYmUgcHJlcHJvY2Vzc2VkLgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+Lmg8L2NvZGU+PGRkPkMsIEMrKywgT2JqZWN0aXZlLUMgb3IgT2JqZWN0aXZlLUMrKyBoZWFkZXIgZmlsZSB0byBiZSB0dXJuZWQgaW50byBhCitwcmVjb21waWxlZCBoZWFkZXIgKGRlZmF1bHQpLCBvciBDLCBDKysgaGVhZGVyIGZpbGUgdG8gYmUgdHVybmVkIGludG8gYW4KK0FkYSBzcGVjICh2aWEgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZHVtcC1hZGEtc3BlYzwvc3Bhbj48L3NhbXA+IHN3aXRjaCkuCisKKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uY2M8L2NvZGU+PGR0Pjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5jcDwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmN4eDwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmNwcDwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LkNQUDwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmMrKzwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LkM8L2NvZGU+PGRkPkMrKyBzb3VyY2UgY29kZSB0aGF0IG11c3QgYmUgcHJlcHJvY2Vzc2VkLiAgTm90ZSB0aGF0IGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmN4eDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK3RoZSBsYXN0IHR3byBsZXR0ZXJzIG11c3QgYm90aCBiZSBsaXRlcmFsbHkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgTGlrZXdpc2UsCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5DPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlZmVycyB0byBhIGxpdGVyYWwgY2FwaXRhbCBDLgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+Lm1tPC9jb2RlPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uTTwvY29kZT48ZGQ+T2JqZWN0aXZlLUMrKyBzb3VyY2UgY29kZSB0aGF0IG11c3QgYmUgcHJlcHJvY2Vzc2VkLgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+Lm1paTwvY29kZT48ZGQ+T2JqZWN0aXZlLUMrKyBzb3VyY2UgY29kZSB0aGF0IHNob3VsZCBub3QgYmUgcHJlcHJvY2Vzc2VkLgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmhoPC9jb2RlPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uSDwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmhwPC9jb2RlPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uaHh4PC9jb2RlPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uaHBwPC9jb2RlPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uSFBQPC9jb2RlPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uaCsrPC9jb2RlPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4udGNjPC9jb2RlPjxkZD5DKysgaGVhZGVyIGZpbGUgdG8gYmUgdHVybmVkIGludG8gYSBwcmVjb21waWxlZCBoZWFkZXIgb3IgQWRhIHNwZWMuCisKKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uZjwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmZvcjwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmZ0bjwvY29kZT48ZGQ+Rml4ZWQgZm9ybSBGb3J0cmFuIHNvdXJjZSBjb2RlIHRoYXQgc2hvdWxkIG5vdCBiZSBwcmVwcm9jZXNzZWQuCisKKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uRjwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LkZPUjwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmZwcDwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LkZQUDwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LkZUTjwvY29kZT48ZGQ+Rml4ZWQgZm9ybSBGb3J0cmFuIHNvdXJjZSBjb2RlIHRoYXQgbXVzdCBiZSBwcmVwcm9jZXNzZWQgKHdpdGggdGhlIHRyYWRpdGlvbmFsCitwcmVwcm9jZXNzb3IpLgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmY5MDwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmY5NTwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmYwMzwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmYwODwvY29kZT48ZGQ+RnJlZSBmb3JtIEZvcnRyYW4gc291cmNlIGNvZGUgdGhhdCBzaG91bGQgbm90IGJlIHByZXByb2Nlc3NlZC4KKworICAgICA8YnI+PGR0Pjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5GOTA8L2NvZGU+PGR0Pjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5GOTU8L2NvZGU+PGR0Pjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5GMDM8L2NvZGU+PGR0Pjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5GMDg8L2NvZGU+PGRkPkZyZWUgZm9ybSBGb3J0cmFuIHNvdXJjZSBjb2RlIHRoYXQgbXVzdCBiZSBwcmVwcm9jZXNzZWQgKHdpdGggdGhlCit0cmFkaXRpb25hbCBwcmVwcm9jZXNzb3IpLgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmdvPC9jb2RlPjxkZD5HbyBzb3VyY2UgY29kZS4KKworICAgICA8IS0tIEZJWE1FOiBEZXNjcmlwdGlvbnMgb2YgSmF2YSBmaWxlIHR5cGVzLiAtLT4KKyAgICAgPCEtLSBAdmFye2ZpbGV9LmphdmEgLS0+CisgICAgIDwhLS0gQHZhcntmaWxlfS5jbGFzcyAtLT4KKyAgICAgPCEtLSBAdmFye2ZpbGV9LnppcCAtLT4KKyAgICAgPCEtLSBAdmFye2ZpbGV9LmphciAtLT4KKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uYWRzPC9jb2RlPjxkZD5BZGEgc291cmNlIGNvZGUgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGlicmFyeSB1bml0IGRlY2xhcmF0aW9uIChhCitkZWNsYXJhdGlvbiBvZiBhIHBhY2thZ2UsIHN1YnByb2dyYW0sIG9yIGdlbmVyaWMsIG9yIGEgZ2VuZXJpYworaW5zdGFudGlhdGlvbiksIG9yIGEgbGlicmFyeSB1bml0IHJlbmFtaW5nIGRlY2xhcmF0aW9uIChhIHBhY2thZ2UsCitnZW5lcmljLCBvciBzdWJwcm9ncmFtIHJlbmFtaW5nIGRlY2xhcmF0aW9uKS4gIFN1Y2ggZmlsZXMgYXJlIGFsc28KK2NhbGxlZCA8ZGZuPnNwZWNzPC9kZm4+LgorCisgICAgIDxicj48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LmFkYjwvY29kZT48ZGQ+QWRhIHNvdXJjZSBjb2RlIGZpbGUgY29udGFpbmluZyBhIGxpYnJhcnkgdW5pdCBib2R5IChhIHN1YnByb2dyYW0gb3IKK3BhY2thZ2UgYm9keSkuICBTdWNoIGZpbGVzIGFyZSBhbHNvIGNhbGxlZCA8ZGZuPmJvZGllczwvZGZuPi4KKworICAgICA8IS0tIEdDQyBhbHNvIGtub3dzIGFib3V0IHNvbWUgc3VmZml4ZXMgZm9yIGxhbmd1YWdlcyBub3QgeWV0IGluY2x1ZGVkOiAtLT4KKyAgICAgPCEtLSBQYXNjYWw6IC0tPgorICAgICA8IS0tIEB2YXJ7ZmlsZX0ucCAtLT4KKyAgICAgPCEtLSBAdmFye2ZpbGV9LnBhcyAtLT4KKyAgICAgPCEtLSBSYXRmb3I6IC0tPgorICAgICA8IS0tIEB2YXJ7ZmlsZX0uciAtLT4KKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uczwvY29kZT48ZGQ+QXNzZW1ibGVyIGNvZGUuCisKKyAgICAgPGJyPjxkdD48dmFyPmZpbGU8L3Zhcj48Y29kZT4uUzwvY29kZT48ZHQ+PHZhcj5maWxlPC92YXI+PGNvZGU+LnN4PC9jb2RlPjxkZD5Bc3NlbWJsZXIgY29kZSB0aGF0IG11c3QgYmUgcHJlcHJvY2Vzc2VkLgorCisgICAgIDxicj48ZHQ+PHZhcj5vdGhlcjwvdmFyPjxkZD5BbiBvYmplY3QgZmlsZSB0byBiZSBmZWQgc3RyYWlnaHQgaW50byBsaW5raW5nLiAKK0FueSBmaWxlIG5hbWUgd2l0aCBubyByZWNvZ25pemVkIHN1ZmZpeCBpcyB0cmVhdGVkIHRoaXMgd2F5LiAKKzwvZGw+CisKKyA8cD48YSBuYW1lPSJpbmRleC14LTc3Ij48L2E+WW91IGNhbiBzcGVjaWZ5IHRoZSBpbnB1dCBsYW5ndWFnZSBleHBsaWNpdGx5IHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14PC9zcGFuPjwvc2FtcD4gb3B0aW9uOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4teCA8L2NvZGU+PHZhcj5sYW5ndWFnZTwvdmFyPjxkZD5TcGVjaWZ5IGV4cGxpY2l0bHkgdGhlIDx2YXI+bGFuZ3VhZ2U8L3Zhcj4gZm9yIHRoZSBmb2xsb3dpbmcgaW5wdXQgZmlsZXMKKyhyYXRoZXIgdGhhbiBsZXR0aW5nIHRoZSBjb21waWxlciBjaG9vc2UgYSBkZWZhdWx0IGJhc2VkIG9uIHRoZSBmaWxlCituYW1lIHN1ZmZpeCkuICBUaGlzIG9wdGlvbiBhcHBsaWVzIHRvIGFsbCBmb2xsb3dpbmcgaW5wdXQgZmlsZXMgdW50aWwKK3RoZSBuZXh0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14PC9zcGFuPjwvc2FtcD4gb3B0aW9uLiAgUG9zc2libGUgdmFsdWVzIGZvciA8dmFyPmxhbmd1YWdlPC92YXI+IGFyZToKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgYyAgYy1oZWFkZXIgIGNwcC1vdXRwdXQKKyAgICAgICAgICBjKysgIGMrKy1oZWFkZXIgIGMrKy1jcHAtb3V0cHV0CisgICAgICAgICAgb2JqZWN0aXZlLWMgIG9iamVjdGl2ZS1jLWhlYWRlciAgb2JqZWN0aXZlLWMtY3BwLW91dHB1dAorICAgICAgICAgIG9iamVjdGl2ZS1jKysgb2JqZWN0aXZlLWMrKy1oZWFkZXIgb2JqZWN0aXZlLWMrKy1jcHAtb3V0cHV0CisgICAgICAgICAgYXNzZW1ibGVyICBhc3NlbWJsZXItd2l0aC1jcHAKKyAgICAgICAgICBhZGEKKyAgICAgICAgICBmNzcgIGY3Ny1jcHAtaW5wdXQgZjk1ICBmOTUtY3BwLWlucHV0CisgICAgICAgICAgZ28KKyAgICAgICAgICBqYXZhCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4teCBub25lPC9jb2RlPjxkZD5UdXJuIG9mZiBhbnkgc3BlY2lmaWNhdGlvbiBvZiBhIGxhbmd1YWdlLCBzbyB0aGF0IHN1YnNlcXVlbnQgZmlsZXMgYXJlCitoYW5kbGVkIGFjY29yZGluZyB0byB0aGVpciBmaWxlIG5hbWUgc3VmZml4ZXMgKGFzIHRoZXkgYXJlIGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi14PC9zcGFuPjwvc2FtcD4KK2hhcyBub3QgYmVlbiB1c2VkIGF0IGFsbCkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcGFzcy1leGl0LWNvZGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wYXNzXzAwMmRleGl0XzAwMmRjb2Rlcy03OCI+PC9hPk5vcm1hbGx5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gcHJvZ3JhbSBleGl0cyB3aXRoIHRoZSBjb2RlIG9mIDEgaWYgYW55CitwaGFzZSBvZiB0aGUgY29tcGlsZXIgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHJldHVybiBjb2RlLiAgSWYgeW91IHNwZWNpZnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wYXNzLWV4aXQtY29kZXM8L3NwYW4+PC9zYW1wPiwgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiBwcm9ncmFtIGluc3RlYWQgcmV0dXJucyB3aXRoCit0aGUgbnVtZXJpY2FsbHkgaGlnaGVzdCBlcnJvciBwcm9kdWNlZCBieSBhbnkgcGhhc2UgcmV0dXJuaW5nIGFuIGVycm9yCitpbmRpY2F0aW9uLiAgVGhlIEMsIEMrKywgYW5kIEZvcnRyYW4gZnJvbnQgZW5kcyByZXR1cm4gNCBpZiBhbiBpbnRlcm5hbAorY29tcGlsZXIgZXJyb3IgaXMgZW5jb3VudGVyZWQuIAorPC9kbD4KKworIDxwPklmIHlvdSBvbmx5IHdhbnQgc29tZSBvZiB0aGUgc3RhZ2VzIG9mIGNvbXBpbGF0aW9uLCB5b3UgY2FuIHVzZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXg8L3NwYW4+PC9zYW1wPiAob3IgZmlsZW5hbWUgc3VmZml4ZXMpIHRvIHRlbGwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+IHdoZXJlIHRvIHN0YXJ0LCBhbmQKK29uZSBvZiB0aGUgb3B0aW9ucyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUzwvc3Bhbj48L3NhbXA+LCBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRTwvc3Bhbj48L3NhbXA+IHRvIHNheSB3aGVyZQorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+IGlzIHRvIHN0b3AuICBOb3RlIHRoYXQgc29tZSBjb21iaW5hdGlvbnMgKGZvciBleGFtcGxlLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4teCBjcHAtb3V0cHV0IC1FPC9zcGFuPjwvc2FtcD4mcnNxdW87KSBpbnN0cnVjdCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gdG8gZG8gbm90aGluZyBhdCBhbGwuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1jPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1jLTc5Ij48L2E+Q29tcGlsZSBvciBhc3NlbWJsZSB0aGUgc291cmNlIGZpbGVzLCBidXQgZG8gbm90IGxpbmsuICBUaGUgbGlua2luZworc3RhZ2Ugc2ltcGx5IGlzIG5vdCBkb25lLiAgVGhlIHVsdGltYXRlIG91dHB1dCBpcyBpbiB0aGUgZm9ybSBvZiBhbgorb2JqZWN0IGZpbGUgZm9yIGVhY2ggc291cmNlIGZpbGUuCisKKyAgICAgPHA+QnkgZGVmYXVsdCwgdGhlIG9iamVjdCBmaWxlIG5hbWUgZm9yIGEgc291cmNlIGZpbGUgaXMgbWFkZSBieSByZXBsYWNpbmcKK3RoZSBzdWZmaXggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgZXRjLiwgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5vPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPlVucmVjb2duaXplZCBpbnB1dCBmaWxlcywgbm90IHJlcXVpcmluZyBjb21waWxhdGlvbiBvciBhc3NlbWJseSwgYXJlCitpZ25vcmVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVMtODAiPjwvYT5TdG9wIGFmdGVyIHRoZSBzdGFnZSBvZiBjb21waWxhdGlvbiBwcm9wZXI7IGRvIG5vdCBhc3NlbWJsZS4gIFRoZSBvdXRwdXQKK2lzIGluIHRoZSBmb3JtIG9mIGFuIGFzc2VtYmxlciBjb2RlIGZpbGUgZm9yIGVhY2ggbm9uLWFzc2VtYmxlciBpbnB1dAorZmlsZSBzcGVjaWZpZWQuCisKKyAgICAgPHA+QnkgZGVmYXVsdCwgdGhlIGFzc2VtYmxlciBmaWxlIG5hbWUgZm9yIGEgc291cmNlIGZpbGUgaXMgbWFkZSBieQorcmVwbGFjaW5nIHRoZSBzdWZmaXggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgZXRjLiwgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPklucHV0IGZpbGVzIHRoYXQgZG9uJ3QgcmVxdWlyZSBjb21waWxhdGlvbiBhcmUgaWdub3JlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1FPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1FLTgxIj48L2E+U3RvcCBhZnRlciB0aGUgcHJlcHJvY2Vzc2luZyBzdGFnZTsgZG8gbm90IHJ1biB0aGUgY29tcGlsZXIgcHJvcGVyLiAgVGhlCitvdXRwdXQgaXMgaW4gdGhlIGZvcm0gb2YgcHJlcHJvY2Vzc2VkIHNvdXJjZSBjb2RlLCB3aGljaCBpcyBzZW50IHRvIHRoZQorc3RhbmRhcmQgb3V0cHV0LgorCisgICAgIDxwPklucHV0IGZpbGVzIHRoYXQgZG9uJ3QgcmVxdWlyZSBwcmVwcm9jZXNzaW5nIGFyZSBpZ25vcmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LW91dHB1dC1maWxlLW9wdGlvbi04MiI+PC9hPjxicj48ZHQ+PGNvZGU+LW8gPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1vLTgzIj48L2E+UGxhY2Ugb3V0cHV0IGluIGZpbGUgPHZhcj5maWxlPC92YXI+LiAgVGhpcyBhcHBsaWVzIHRvIHdoYXRldmVyCitzb3J0IG9mIG91dHB1dCBpcyBiZWluZyBwcm9kdWNlZCwgd2hldGhlciBpdCBiZSBhbiBleGVjdXRhYmxlIGZpbGUsCithbiBvYmplY3QgZmlsZSwgYW4gYXNzZW1ibGVyIGZpbGUgb3IgcHJlcHJvY2Vzc2VkIEMgY29kZS4KKworICAgICA8cD5JZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbzwvc3Bhbj48L3NhbXA+IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHB1dCBhbiBleGVjdXRhYmxlCitmaWxlIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hLm91dDwvc3Bhbj48L3NhbXA+LCB0aGUgb2JqZWN0IGZpbGUgZm9yCis8c2FtcD48dmFyPnNvdXJjZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uPC9zcGFuPjx2YXI+c3VmZml4PC92YXI+PC9zYW1wPiBpbiA8c2FtcD48dmFyPnNvdXJjZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4ubzwvc3Bhbj48L3NhbXA+LCBpdHMKK2Fzc2VtYmxlciBmaWxlIGluIDxzYW1wPjx2YXI+c291cmNlPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi5zPC9zcGFuPjwvc2FtcD4sIGEgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGUgaW4KKzxzYW1wPjx2YXI+c291cmNlPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi48L3NwYW4+PHZhcj5zdWZmaXg8L3Zhcj48c3BhbiBjbGFzcz0iZmlsZSI+LmdjaDwvc3Bhbj48L3NhbXA+LCBhbmQgYWxsIHByZXByb2Nlc3NlZCBDIHNvdXJjZSBvbgorc3RhbmRhcmQgb3V0cHV0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXYtODQiPjwvYT5QcmludCAob24gc3RhbmRhcmQgZXJyb3Igb3V0cHV0KSB0aGUgY29tbWFuZHMgZXhlY3V0ZWQgdG8gcnVuIHRoZSBzdGFnZXMKK29mIGNvbXBpbGF0aW9uLiAgQWxzbyBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGNvbXBpbGVyIGRyaXZlcgorcHJvZ3JhbSBhbmQgb2YgdGhlIHByZXByb2Nlc3NvciBhbmQgdGhlIGNvbXBpbGVyIHByb3Blci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0jIyM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDIzXzAwMjNfMDAyMy04NSI+PC9hPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXY8L3NwYW4+PC9zYW1wPiBleGNlcHQgdGhlIGNvbW1hbmRzIGFyZSBub3QgZXhlY3V0ZWQgYW5kIGFyZ3VtZW50cworYXJlIHF1b3RlZCB1bmxlc3MgdGhleSBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgPGNvZGU+Li8tXzwvY29kZT4uIAorVGhpcyBpcyB1c2VmdWwgZm9yIHNoZWxsIHNjcmlwdHMgdG8gY2FwdHVyZSB0aGUgZHJpdmVyLWdlbmVyYXRlZCBjb21tYW5kIGxpbmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXBpcGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXBpcGUtODYiPjwvYT5Vc2UgcGlwZXMgcmF0aGVyIHRoYW4gdGVtcG9yYXJ5IGZpbGVzIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlCit2YXJpb3VzIHN0YWdlcyBvZiBjb21waWxhdGlvbi4gIFRoaXMgZmFpbHMgdG8gd29yayBvbiBzb21lIHN5c3RlbXMgd2hlcmUKK3RoZSBhc3NlbWJsZXIgaXMgdW5hYmxlIHRvIHJlYWQgZnJvbSBhIHBpcGU7IGJ1dCB0aGUgR05VIGFzc2VtYmxlciBoYXMKK25vIHRyb3VibGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWhlbHA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWhlbHAtODciPjwvYT5QcmludCAob24gdGhlIHN0YW5kYXJkIG91dHB1dCkgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMKK3VuZGVyc3Rvb2QgYnkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+LiAgSWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi12PC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkCit0aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGVscDwvc3Bhbj48L3NhbXA+IGlzIGFsc28gcGFzc2VkIG9uIHRvIHRoZSB2YXJpb3VzIHByb2Nlc3NlcworaW52b2tlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4sIHNvIHRoYXQgdGhleSBjYW4gZGlzcGxheSB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMKK3RoZXkgYWNjZXB0LiAgSWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXh0cmE8L3NwYW4+PC9zYW1wPiBvcHRpb24gaGFzIGFsc28gYmVlbiBzcGVjaWZpZWQKKyhwcmlvciB0byB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPC9zcGFuPjwvc2FtcD4gb3B0aW9uKSwgdGhlbiBjb21tYW5kLWxpbmUgb3B0aW9ucyB0aGF0CitoYXZlIG5vIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZW0gYXJlIGFsc28gZGlzcGxheWVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LS10YXJnZXQtaGVscDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdGFyZ2V0XzAwMmRoZWxwLTg4Ij48L2E+UHJpbnQgKG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQpIGEgZGVzY3JpcHRpb24gb2YgdGFyZ2V0LXNwZWNpZmljIGNvbW1hbmQtbGluZQorb3B0aW9ucyBmb3IgZWFjaCB0b29sLiAgRm9yIHNvbWUgdGFyZ2V0cyBleHRyYSB0YXJnZXQtc3BlY2lmaWMKK2luZm9ybWF0aW9uIG1heSBhbHNvIGJlIHByaW50ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWhlbHA9ezwvY29kZT48dmFyPmNsYXNzPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj58Wzwvc3Bhbj48Y29kZT5ePC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+XTwvc3Bhbj48dmFyPnF1YWxpZmllcjwvdmFyPjxjb2RlPn08L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPjxjb2RlPiwuLi48L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPjxkZD5QcmludCAob24gdGhlIHN0YW5kYXJkIG91dHB1dCkgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tbWFuZC1saW5lCitvcHRpb25zIHVuZGVyc3Rvb2QgYnkgdGhlIGNvbXBpbGVyIHRoYXQgZml0IGludG8gYWxsIHNwZWNpZmllZCBjbGFzc2VzCithbmQgcXVhbGlmaWVycy4gIFRoZXNlIGFyZSB0aGUgc3VwcG9ydGVkIGNsYXNzZXM6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcHRpbWl6ZXJzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRpc3BsYXkgYWxsIG9mIHRoZSBvcHRpbWl6YXRpb24gb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlCitjb21waWxlci4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53YXJuaW5nczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EaXNwbGF5IGFsbCBvZiB0aGUgb3B0aW9ucyBjb250cm9sbGluZyB3YXJuaW5nIG1lc3NhZ2VzCitwcm9kdWNlZCBieSB0aGUgY29tcGlsZXIuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dGFyZ2V0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRpc3BsYXkgdGFyZ2V0LXNwZWNpZmljIG9wdGlvbnMuICBVbmxpa2UgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXRhcmdldC1oZWxwPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGhvd2V2ZXIsIHRhcmdldC1zcGVjaWZpYyBvcHRpb25zIG9mIHRoZQorbGlua2VyIGFuZCBhc3NlbWJsZXIgYXJlIG5vdCBkaXNwbGF5ZWQuICBUaGlzIGlzIGJlY2F1c2UgdGhvc2UKK3Rvb2xzIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgZXh0ZW5kZWQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPTwvc3Bhbj48L3NhbXA+IHN5bnRheC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wYXJhbXM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RGlzcGxheSB0aGUgdmFsdWVzIHJlY29nbml6ZWQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGFyYW08L3NwYW4+PC9zYW1wPgorb3B0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48dmFyPmxhbmd1YWdlPC92YXI+PGRkPkRpc3BsYXkgdGhlIG9wdGlvbnMgc3VwcG9ydGVkIGZvciA8dmFyPmxhbmd1YWdlPC92YXI+LCB3aGVyZQorPHZhcj5sYW5ndWFnZTwvdmFyPiBpcyB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGxhbmd1YWdlcyBzdXBwb3J0ZWQgaW4gdGhpcwordmVyc2lvbiBvZiBHQ0MuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29tbW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRpc3BsYXkgdGhlIG9wdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBsYW5ndWFnZXMuIAorPC9kbD4KKworICAgICA8cD5UaGVzZSBhcmUgdGhlIHN1cHBvcnRlZCBxdWFsaWZpZXJzOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dW5kb2N1bWVudGVkPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRpc3BsYXkgb25seSB0aG9zZSBvcHRpb25zIHRoYXQgYXJlIHVuZG9jdW1lbnRlZC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5qb2luZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RGlzcGxheSBvcHRpb25zIHRha2luZyBhbiBhcmd1bWVudCB0aGF0IGFwcGVhcnMgYWZ0ZXIgYW4gZXF1YWwKK3NpZ24gaW4gdGhlIHNhbWUgY29udGludW91cyBwaWVjZSBvZiB0ZXh0LCBzdWNoIGFzOgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWhlbHA9dGFyZ2V0PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNlcGFyYXRlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRpc3BsYXkgb3B0aW9ucyB0YWtpbmcgYW4gYXJndW1lbnQgdGhhdCBhcHBlYXJzIGFzIGEgc2VwYXJhdGUgd29yZAorZm9sbG93aW5nIHRoZSBvcmlnaW5hbCBvcHRpb24sIHN1Y2ggYXM6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW8gb3V0cHV0LWZpbGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC9kbD4KKworICAgICA8cD5UaHVzIGZvciBleGFtcGxlIHRvIGRpc3BsYXkgYWxsIHRoZSB1bmRvY3VtZW50ZWQgdGFyZ2V0LXNwZWNpZmljCitzd2l0Y2hlcyBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBpbGVyLCB1c2U6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLS1oZWxwPXRhcmdldCx1bmRvY3VtZW50ZWQKKzwvcHJlPgorICAgICA8cD5UaGUgc2Vuc2Ugb2YgYSBxdWFsaWZpZXIgY2FuIGJlIGludmVydGVkIGJ5IHByZWZpeGluZyBpdCB3aXRoIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ePC9zcGFuPjwvc2FtcD4mcnNxdW87IGNoYXJhY3Rlciwgc28gZm9yIGV4YW1wbGUgdG8gZGlzcGxheSBhbGwgYmluYXJ5IHdhcm5pbmcKK29wdGlvbnMgKGkuZS4sIG9uZXMgdGhhdCBhcmUgZWl0aGVyIG9uIG9yIG9mZiBhbmQgdGhhdCBkbyBub3QgdGFrZSBhbgorYXJndW1lbnQpIHRoYXQgaGF2ZSBhIGRlc2NyaXB0aW9uLCB1c2U6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLS1oZWxwPXdhcm5pbmdzLF5qb2luZWQsXnVuZG9jdW1lbnRlZAorPC9wcmU+CisgICAgIDxwPlRoZSBhcmd1bWVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA9PC9zcGFuPjwvc2FtcD4gc2hvdWxkIG5vdCBjb25zaXN0IHNvbGVseSBvZiBpbnZlcnRlZAorcXVhbGlmaWVycy4KKworICAgICA8cD5Db21iaW5pbmcgc2V2ZXJhbCBjbGFzc2VzIGlzIHBvc3NpYmxlLCBhbHRob3VnaCB0aGlzIHVzdWFsbHkKK3Jlc3RyaWN0cyB0aGUgb3V0cHV0IHNvIG11Y2ggdGhhdCB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkuICBPbmUKK2Nhc2Ugd2hlcmUgaXQgZG9lcyB3b3JrLCBob3dldmVyLCBpcyB3aGVuIG9uZSBvZiB0aGUgY2xhc3NlcyBpcworPHZhcj50YXJnZXQ8L3Zhcj4uICBGb3IgZXhhbXBsZSwgdG8gZGlzcGxheSBhbGwgdGhlIHRhcmdldC1zcGVjaWZpYworb3B0aW1pemF0aW9uIG9wdGlvbnMsIHVzZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtLWhlbHA9dGFyZ2V0LG9wdGltaXplcnMKKzwvcHJlPgorICAgICA8cD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBjYW4gYmUgcmVwZWF0ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIEVhY2gKK3N1Y2Nlc3NpdmUgdXNlIGRpc3BsYXlzIGl0cyByZXF1ZXN0ZWQgY2xhc3Mgb2Ygb3B0aW9ucywgc2tpcHBpbmcKK3Rob3NlIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGlzcGxheWVkLgorCisgICAgIDxwPklmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBhcHBlYXJzIG9uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oZWxwPTwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgdGhlbiB0aGUgZGVzY3JpcHRpdmUgdGV4dCBkaXNwbGF5ZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0taGVscD08L3NwYW4+PC9zYW1wPiBpcyBjaGFuZ2VkLiAgSW5zdGVhZCBvZiBkZXNjcmliaW5nIHRoZSBkaXNwbGF5ZWQKK29wdGlvbnMsIGFuIGluZGljYXRpb24gaXMgZ2l2ZW4gYXMgdG8gd2hldGhlciB0aGUgb3B0aW9uIGlzIGVuYWJsZWQsCitkaXNhYmxlZCBvciBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSAoYXNzdW1pbmcgdGhhdCB0aGUgY29tcGlsZXIKK2tub3dzIHRoaXMgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWhlbHA9PC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHVzZWQpLgorCisgICAgIDxwPkhlcmUgaXMgYSB0cnVuY2F0ZWQgZXhhbXBsZSBmcm9tIHRoZSBBUk0gcG9ydCBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD46CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAlIGdjYyAtUSAtbWFiaT0yIC0taGVscD10YXJnZXQgLWMKKyAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgdGFyZ2V0IHNwZWNpZmljOgorICAgICAgICAgICAgLW1hYmk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisgICAgICAgICAgICAtbWFib3J0LW9uLW5vcmV0dXJuICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF0KKyAgICAgICAgICAgIC1tYXBjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXQorPC9wcmU+CisgICAgIDxwPlRoZSBvdXRwdXQgaXMgc2Vuc2l0aXZlIHRvIHRoZSBlZmZlY3RzIG9mIHByZXZpb3VzIGNvbW1hbmQtbGluZQorb3B0aW9ucywgc28gZm9yIGV4YW1wbGUgaXQgaXMgcG9zc2libGUgdG8gZmluZCBvdXQgd2hpY2ggb3B0aW1pemF0aW9ucworYXJlIGVuYWJsZWQgYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4gYnkgdXNpbmc6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLVEgLU8yIC0taGVscD1vcHRpbWl6ZXJzCis8L3ByZT4KKyAgICAgPHA+QWx0ZXJuYXRpdmVseSB5b3UgY2FuIGRpc2NvdmVyIHdoaWNoIGJpbmFyeSBvcHRpbWl6YXRpb25zIGFyZSBlbmFibGVkCitieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzM8L3NwYW4+PC9zYW1wPiBieSB1c2luZzoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBnY2MgLWMgLVEgLU8zIC0taGVscD1vcHRpbWl6ZXJzICZndDsgL3RtcC9PMy1vcHRzCisgICAgICAgICAgZ2NjIC1jIC1RIC1PMiAtLWhlbHA9b3B0aW1pemVycyAmZ3Q7IC90bXAvTzItb3B0cworICAgICAgICAgIGRpZmYgL3RtcC9PMi1vcHRzIC90bXAvTzMtb3B0cyB8IGdyZXAgZW5hYmxlZAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+LW5vLWNhbm9uaWNhbC1wcmVmaXhlczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbm9fMDAyZGNhbm9uaWNhbF8wMDJkcHJlZml4ZXMtODkiPjwvYT5EbyBub3QgZXhwYW5kIGFueSBzeW1ib2xpYyBsaW5rcywgcmVzb2x2ZSByZWZlcmVuY2VzIHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ly4uLzwvc3Bhbj48L3NhbXA+JnJzcXVvOworb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vLi88L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yIG1ha2UgdGhlIHBhdGggYWJzb2x1dGUgd2hlbiBnZW5lcmF0aW5nIGEgcmVsYXRpdmUKK3ByZWZpeC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tdmVyc2lvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdmVyc2lvbi05MCI+PC9hPkRpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIGFuZCBjb3B5cmlnaHRzIG9mIHRoZSBpbnZva2VkIEdDQy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi13cmFwcGVyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC13cmFwcGVyLTkxIj48L2E+SW52b2tlIGFsbCBzdWJjb21tYW5kcyB1bmRlciBhIHdyYXBwZXIgcHJvZ3JhbS4gIFRoZSBuYW1lIG9mIHRoZQord3JhcHBlciBwcm9ncmFtIGFuZCBpdHMgcGFyYW1ldGVycyBhcmUgcGFzc2VkIGFzIGEgY29tbWEgc2VwYXJhdGVkCitsaXN0LgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGdjYyAtYyB0LmMgLXdyYXBwZXIgZ2RiLC0tYXJncworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyBpbnZva2VzIGFsbCBzdWJwcm9ncmFtcyBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gdW5kZXIKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2RiIC0tYXJnczwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGh1cyB0aGUgaW52b2NhdGlvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y2MxPC9zcGFuPjwvc2FtcD4gaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2RiIC0tYXJncyBjYzEgLi4uPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwbHVnaW49PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPi5zbzwvY29kZT48ZGQ+TG9hZCB0aGUgcGx1Z2luIGNvZGUgaW4gZmlsZSA8dmFyPm5hbWU8L3Zhcj4uc28sIGFzc3VtZWQgdG8gYmUgYQorc2hhcmVkIG9iamVjdCB0byBiZSBkbG9wZW4nZCBieSB0aGUgY29tcGlsZXIuICBUaGUgYmFzZSBuYW1lIG9mCit0aGUgc2hhcmVkIG9iamVjdCBmaWxlIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHBsdWdpbiBmb3IgdGhlCitwdXJwb3NlcyBvZiBhcmd1bWVudCBwYXJzaW5nIChTZWUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGx1Z2luLWFyZy08L3NwYW4+PHZhcj5uYW1lPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LTwvc3Bhbj48dmFyPmtleTwvdmFyPjxzcGFuIGNsYXNzPSJvcHRpb24iPj08L3NwYW4+PHZhcj52YWx1ZTwvdmFyPjwvc2FtcD4gYmVsb3cpLiAKK0VhY2ggcGx1Z2luIHNob3VsZCBkZWZpbmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlCitQbHVnaW5zIEFQSS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcGx1Z2luLWFyZy08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+LTwvY29kZT48dmFyPmtleTwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxkZD5EZWZpbmUgYW4gYXJndW1lbnQgY2FsbGVkIDx2YXI+a2V5PC92YXI+IHdpdGggYSB2YWx1ZSBvZiA8dmFyPnZhbHVlPC92YXI+Citmb3IgdGhlIHBsdWdpbiBjYWxsZWQgPHZhcj5uYW1lPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLWFkYS1zcGVjPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj48Y29kZT4tc2xpbTwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+PGRkPkZvciBDIGFuZCBDKysgc291cmNlIGFuZCBpbmNsdWRlIGZpbGVzLCBnZW5lcmF0ZSBjb3JyZXNwb25kaW5nIEFkYQorc3BlY3MuIFNlZSA8YSBocmVmPSIuLi9nbmF0X3Vnbi9HZW5lcmF0aW5nLUFkYS1CaW5kaW5ncy1mb3ItQy1hbmQtQ18wMDJiXzAwMmItaGVhZGVycy5odG1sI0dlbmVyYXRpbmctQWRhLUJpbmRpbmdzLWZvci1DLWFuZC1DXzAwMmJfMDAyYi1oZWFkZXJzIj5HZW5lcmF0aW5nIEFkYSBCaW5kaW5ncyBmb3IgQyBhbmQgQysrIGhlYWRlcnM8L2E+LCB3aGljaCBwcm92aWRlcyBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9uIHRoaXMgZmVhdHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZHVtcC1nby1zcGVjPTwvY29kZT48dmFyPmZpbGU8L3Zhcj48ZGQ+Rm9yIGlucHV0IGZpbGVzIGluIGFueSBsYW5ndWFnZSwgZ2VuZXJhdGUgY29ycmVzcG9uZGluZyBHbworZGVjbGFyYXRpb25zIGluIDx2YXI+ZmlsZTwvdmFyPi4gIFRoaXMgZ2VuZXJhdGVzIEdvIDxjb2RlPmNvbnN0PC9jb2RlPiwKKzxjb2RlPnR5cGU8L2NvZGU+LCA8Y29kZT52YXI8L2NvZGU+LCBhbmQgPGNvZGU+ZnVuYzwvY29kZT4gZGVjbGFyYXRpb25zIHdoaWNoIG1heSBiZSBhCit1c2VmdWwgd2F5IHRvIHN0YXJ0IHdyaXRpbmcgYSBHbyBpbnRlcmZhY2UgdG8gY29kZSB3cml0dGVuIGluIHNvbWUKK290aGVyIGxhbmd1YWdlLgorCisgICAgIDwhLS0gVGhpcyBmaWxlIGlzIGRlc2lnbmVkIHRvIGJlIGluY2x1ZGVkIGluIG1hbnVhbHMgdGhhdCB1c2UgLS0+CisgICAgIDwhLS0gZXhwYW5kYXJndi4gLS0+CisgICAgIDxicj48ZHQ+PGNvZGU+QDwvY29kZT48dmFyPmZpbGU8L3Zhcj48ZGQ+UmVhZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tIDx2YXI+ZmlsZTwvdmFyPi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQDx2YXI+ZmlsZTwvdmFyPiBvcHRpb24uICBJZiA8dmFyPmZpbGU8L3Zhcj4KK2RvZXMgbm90IGV4aXN0LCBvciBjYW5ub3QgYmUgcmVhZCwgdGhlbiB0aGUgb3B0aW9uIHdpbGwgYmUgdHJlYXRlZAorbGl0ZXJhbGx5LCBhbmQgbm90IHJlbW92ZWQuCisKKyAgICAgPHA+T3B0aW9ucyBpbiA8dmFyPmZpbGU8L3Zhcj4gYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSB3aGl0ZXNwYWNlCitjaGFyYWN0ZXIgbWF5IGJlIGluY2x1ZGVkIGluIGFuIG9wdGlvbiBieSBzdXJyb3VuZGluZyB0aGUgZW50aXJlCitvcHRpb24gaW4gZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLiAgQW55IGNoYXJhY3RlciAoaW5jbHVkaW5nIGEKK2JhY2tzbGFzaCkgbWF5IGJlIGluY2x1ZGVkIGJ5IHByZWZpeGluZyB0aGUgY2hhcmFjdGVyIHRvIGJlIGluY2x1ZGVkCit3aXRoIGEgYmFja3NsYXNoLiAgVGhlIDx2YXI+ZmlsZTwvdmFyPiBtYXkgaXRzZWxmIGNvbnRhaW4gYWRkaXRpb25hbAorQDx2YXI+ZmlsZTwvdmFyPiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1BEUF8wMDJkMTEtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QRFBfMDAyZDExLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I1ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QRFBfMDAyZDExLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UERQLTExIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTW94aWUtT3B0aW9ucy5odG1sI01veGllLU9wdGlvbnMiIHRpdGxlPSJNb3hpZSBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0icGljb0NoaXAtT3B0aW9ucy5odG1sI3BpY29DaGlwLU9wdGlvbnMiIHRpdGxlPSJwaWNvQ2hpcCBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBEUC0xMS1PcHRpb25zIj48L2E+Cis8YSBuYW1lPSJQRFBfMDAyZDExLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0icGljb0NoaXAtT3B0aW9ucy5odG1sI3BpY29DaGlwLU9wdGlvbnMiPnBpY29DaGlwIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNb3hpZS1PcHRpb25zLmh0bWwjTW94aWUtT3B0aW9ucyI+TW94aWUgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4zMCBQRFAtMTEgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVBEUF8wMDJkMTEtT3B0aW9ucy0xODc4Ij48L2E+CitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgUERQLTExOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWZwdTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZwdS0xODc5Ij48L2E+VXNlIGhhcmR3YXJlIEZQUCBmbG9hdGluZyBwb2ludC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuICAoRklTIGZsb2F0aW5nCitwb2ludCBvbiB0aGUgUERQLTExLzQwIGlzIG5vdCBzdXBwb3J0ZWQuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zb2Z0LWZsb2F0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc29mdF8wMDJkZmxvYXQtMTg4MCI+PC9hPkRvIG5vdCB1c2UgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFjMDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFjMC0xODgxIj48L2E+UmV0dXJuIGZsb2F0aW5nLXBvaW50IHJlc3VsdHMgaW4gYWMwIChmcjAgaW4gVW5peCBhc3NlbWJsZXIgc3ludGF4KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tYWMwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGFjMC0xODgyIj48L2E+UmV0dXJuIGZsb2F0aW5nLXBvaW50IHJlc3VsdHMgaW4gbWVtb3J5LiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tNDA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW00MC0xODgzIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSBQRFAtMTEvNDAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTQ1PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNDUtMTg4NCI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIGEgUERQLTExLzQ1LiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tMTA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW0xMC0xODg1Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSBQRFAtMTEvMTAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJjb3B5LWJ1aWx0aW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1iY29weV8wMDJkYnVpbHRpbi0xODg2Ij48L2E+VXNlIGlubGluZSA8Y29kZT5tb3ZtZW1oaTwvY29kZT4gcGF0dGVybnMgZm9yIGNvcHlpbmcgbWVtb3J5LiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJjb3B5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYmNvcHktMTg4NyI+PC9hPkRvIG5vdCB1c2UgaW5saW5lIDxjb2RlPm1vdm1lbWhpPC9jb2RlPiBwYXR0ZXJucyBmb3IgY29weWluZyBtZW1vcnkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWludDE2PC9jb2RlPjxkdD48Y29kZT4tbW5vLWludDMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW50MTYtMTg4OCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkaW50MzItMTg4OSI+PC9hPlVzZSAxNi1iaXQgPGNvZGU+aW50PC9jb2RlPi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWludDMyPC9jb2RlPjxkdD48Y29kZT4tbW5vLWludDE2PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW50MzItMTg5MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkaW50MTYtMTg5MSI+PC9hPlVzZSAzMi1iaXQgPGNvZGU+aW50PC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZmxvYXQ2NDwvY29kZT48ZHQ+PGNvZGU+LW1uby1mbG9hdDMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZmxvYXQ2NC0xODkyIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRmbG9hdDMyLTE4OTMiPjwvYT5Vc2UgNjQtYml0IDxjb2RlPmZsb2F0PC9jb2RlPi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZsb2F0MzI8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZmxvYXQ2NDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZsb2F0MzItMTg5NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZmxvYXQ2NC0xODk1Ij48L2E+VXNlIDMyLWJpdCA8Y29kZT5mbG9hdDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFic2hpPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYWJzaGktMTg5NiI+PC9hPlVzZSA8Y29kZT5hYnNoaTI8L2NvZGU+IHBhdHRlcm4uICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1hYnNoaTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRhYnNoaS0xODk3Ij48L2E+RG8gbm90IHVzZSA8Y29kZT5hYnNoaTI8L2NvZGU+IHBhdHRlcm4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJyYW5jaC1leHBlbnNpdmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1icmFuY2hfMDAyZGV4cGVuc2l2ZS0xODk4Ij48L2E+UHJldGVuZCB0aGF0IGJyYW5jaGVzIGFyZSBleHBlbnNpdmUuICBUaGlzIGlzIGZvciBleHBlcmltZW50aW5nIHdpdGgKK2NvZGUgZ2VuZXJhdGlvbiBvbmx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1icmFuY2gtY2hlYXA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1icmFuY2hfMDAyZGNoZWFwLTE4OTkiPjwvYT5EbyBub3QgcHJldGVuZCB0aGF0IGJyYW5jaGVzIGFyZSBleHBlbnNpdmUuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW11bml4LWFzbTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXVuaXhfMDAyZGFzbS0xOTAwIj48L2E+VXNlIFVuaXggYXNzZW1ibGVyIHN5bnRheC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiBjb25maWd1cmVkIGZvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wZHAxMS0qLWJzZDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZGVjLWFzbTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWRlY18wMDJkYXNtLTE5MDEiPjwvYT5Vc2UgREVDIGFzc2VtYmxlciBzeW50YXguICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gY29uZmlndXJlZCBmb3IgYW55CitQRFAtMTEgdGFyZ2V0IG90aGVyIHRoYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wZHAxMS0qLWJzZDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QYWlyZWRfMDAyZFNpbmdsZS1Bcml0aG1ldGljLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1BhaXJlZF8wMDJkU2luZ2xlLUFyaXRobWV0aWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgzZDUwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QYWlyZWRfMDAyZFNpbmdsZS1Bcml0aG1ldGljLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UGFpcmVkLVNpbmdsZSBBcml0aG1ldGljIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9Ik1JUFMgTG9vbmdzb24gQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUGFpcmVkXzAwMmRTaW5nbGUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1BhaXJlZF8wMDJkU2luZ2xlLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJQYWlyZWQtU2luZ2xlIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQYWlyZWQtU2luZ2xlLUFyaXRobWV0aWMiPjwvYT4KKzxhIG5hbWU9IlBhaXJlZF8wMDJkU2luZ2xlLUFyaXRobWV0aWMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUGFpcmVkXzAwMmRTaW5nbGUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1BhaXJlZF8wMDJkU2luZ2xlLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlBhaXJlZC1TaW5nbGUgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjTUlQUy1Mb29uZ3Nvbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5NSVBTIExvb25nc29uIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjYuNTYuMTEuMSBQYWlyZWQtU2luZ2xlIEFyaXRobWV0aWM8L2g1PgorCis8cD5UaGUgdGFibGUgYmVsb3cgbGlzdHMgdGhlIDxjb2RlPnYyc2Y8L2NvZGU+IG9wZXJhdGlvbnMgZm9yIHdoaWNoIGhhcmR3YXJlCitzdXBwb3J0IGV4aXN0cy4gIDxjb2RlPmE8L2NvZGU+LCA8Y29kZT5iPC9jb2RlPiBhbmQgPGNvZGU+YzwvY29kZT4gYXJlIDxjb2RlPnYyc2Y8L2NvZGU+Cit2YWx1ZXMgYW5kIDxjb2RlPng8L2NvZGU+IGlzIGFuIGludGVncmFsIHZhbHVlLgorCisgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiPkMgY29kZSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+TUlQUyBpbnN0cnVjdGlvbgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+YSArIGI8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5hZGQucHM8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5hIC0gYjwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiPjxjb2RlPnN1Yi5wczwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiPjxjb2RlPi1hPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+bmVnLnBzPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+YSAqIGI8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5tdWwucHM8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5hICogYiArIGM8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5tYWRkLnBzPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+YSAqIGIgLSBjPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+bXN1Yi5wczwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiPjxjb2RlPi0oYSAqIGIgKyBjKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI1MCUiPjxjb2RlPm5tYWRkLnBzPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+LShhICogYiAtIGMpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjUwJSI+PGNvZGU+bm1zdWIucHM8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT54ID8gYSA6IGI8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNTAlIj48Y29kZT5tb3ZuLnBzPC9jb2RlPi88Y29kZT5tb3Z6LnBzPC9jb2RlPgorIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworIDxwPk5vdGUgdGhhdCB0aGUgbXVsdGlwbHktYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMgY2FuIGJlIGRpc2FibGVkCit1c2luZyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiA8Y29kZT4tbW5vLWZ1c2VkLW1hZGQ8L2NvZGU+LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QYWlyZWRfMDAyZFNpbmdsZS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1BhaXJlZF8wMDJkU2luZ2xlLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTdhZmVjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QYWlyZWRfMDAyZFNpbmdsZS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwxMjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlBhaXJlZC1TaW5nbGUgQnVpbHQtaW4gRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9Ik1JUFMgTG9vbmdzb24gQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUGFpcmVkXzAwMmRTaW5nbGUtQXJpdGhtZXRpYy5odG1sI1BhaXJlZF8wMDJkU2luZ2xlLUFyaXRobWV0aWMiIHRpdGxlPSJQYWlyZWQtU2luZ2xlIEFyaXRobWV0aWMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNSVBTXzAwMmQzRC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjTUlQU18wMDJkM0QtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9Ik1JUFMtM0QgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBhaXJlZC1TaW5nbGUtQnVpbHQtaW4tRnVuY3Rpb25zIj48L2E+Cis8YSBuYW1lPSJQYWlyZWRfMDAyZFNpbmdsZS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1JUFNfMDAyZDNELUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNNSVBTXzAwMmQzRC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5NSVBTLTNEIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBhaXJlZF8wMDJkU2luZ2xlLUFyaXRobWV0aWMuaHRtbCNQYWlyZWRfMDAyZFNpbmdsZS1Bcml0aG1ldGljIj5QYWlyZWQtU2luZ2xlIEFyaXRobWV0aWM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNSVBTLUxvb25nc29uLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNNSVBTLUxvb25nc29uLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk1JUFMgTG9vbmdzb24gQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+Ni41Ni4xMS4yIFBhaXJlZC1TaW5nbGUgQnVpbHQtaW4gRnVuY3Rpb25zPC9oNT4KKworPHA+VGhlIGZvbGxvd2luZyBwYWlyZWQtc2luZ2xlIGZ1bmN0aW9ucyBtYXAgZGlyZWN0bHkgdG8gYSBwYXJ0aWN1bGFyCitNSVBTIGluc3RydWN0aW9uLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbgorZm9yIGRldGFpbHMgb24gd2hhdCBlYWNoIGluc3RydWN0aW9uIGRvZXMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfcGxsX3BzICh2MnNmLCB2MnNmKTwvY29kZT48ZGQ+UGFpciBsb3dlciBsb3dlciAoPGNvZGU+cGxsLnBzPC9jb2RlPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT52MnNmIF9fYnVpbHRpbl9taXBzX3B1bF9wcyAodjJzZiwgdjJzZik8L2NvZGU+PGRkPlBhaXIgdXBwZXIgbG93ZXIgKDxjb2RlPnB1bC5wczwvY29kZT4pLgorCisgICAgIDxicj48ZHQ+PGNvZGU+djJzZiBfX2J1aWx0aW5fbWlwc19wbHVfcHMgKHYyc2YsIHYyc2YpPC9jb2RlPjxkZD5QYWlyIGxvd2VyIHVwcGVyICg8Y29kZT5wbHUucHM8L2NvZGU+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfcHV1X3BzICh2MnNmLCB2MnNmKTwvY29kZT48ZGQ+UGFpciB1cHBlciB1cHBlciAoPGNvZGU+cHV1LnBzPC9jb2RlPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT52MnNmIF9fYnVpbHRpbl9taXBzX2N2dF9wc19zIChmbG9hdCwgZmxvYXQpPC9jb2RlPjxkZD5Db252ZXJ0IHBhaXIgdG8gcGFpcmVkIHNpbmdsZSAoPGNvZGU+Y3Z0LnBzLnM8L2NvZGU+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmZsb2F0IF9fYnVpbHRpbl9taXBzX2N2dF9zX3BsICh2MnNmKTwvY29kZT48ZGQ+Q29udmVydCBwYWlyIGxvd2VyIHRvIHNpbmdsZSAoPGNvZGU+Y3Z0LnMucGw8L2NvZGU+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmZsb2F0IF9fYnVpbHRpbl9taXBzX2N2dF9zX3B1ICh2MnNmKTwvY29kZT48ZGQ+Q29udmVydCBwYWlyIHVwcGVyIHRvIHNpbmdsZSAoPGNvZGU+Y3Z0LnMucHU8L2NvZGU+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfYWJzX3BzICh2MnNmKTwvY29kZT48ZGQ+QWJzb2x1dGUgdmFsdWUgKDxjb2RlPmFicy5wczwvY29kZT4pLgorCisgICAgIDxicj48ZHQ+PGNvZGU+djJzZiBfX2J1aWx0aW5fbWlwc19hbG52X3BzICh2MnNmLCB2MnNmLCBpbnQpPC9jb2RlPjxkZD5BbGlnbiB2YXJpYWJsZSAoPGNvZGU+YWxudi5wczwvY29kZT4pLgorCisgICAgIDxwPjxlbT5Ob3RlOjwvZW0+IFRoZSB2YWx1ZSBvZiB0aGUgdGhpcmQgcGFyYW1ldGVyIG11c3QgYmUgMCBvciA0Cittb2R1bG8gOCwgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdW5wcmVkaWN0YWJsZS4gIFBsZWFzZSByZWFkIHRoZQoraW5zdHJ1Y3Rpb24gZGVzY3JpcHRpb24gZm9yIGRldGFpbHMuIAorPC9kbD4KKworIDxwPlRoZSBmb2xsb3dpbmcgbXVsdGktaW5zdHJ1Y3Rpb24gZnVuY3Rpb25zIGFyZSBhbHNvIGF2YWlsYWJsZS4gCitJbiBlYWNoIGNhc2UsIDx2YXI+Y29uZDwvdmFyPiBjYW4gYmUgYW55IG9mIHRoZSAxNiBmbG9hdGluZy1wb2ludCBjb25kaXRpb25zOgorPGNvZGU+ZjwvY29kZT4sIDxjb2RlPnVuPC9jb2RlPiwgPGNvZGU+ZXE8L2NvZGU+LCA8Y29kZT51ZXE8L2NvZGU+LCA8Y29kZT5vbHQ8L2NvZGU+LCA8Y29kZT51bHQ8L2NvZGU+LAorPGNvZGU+b2xlPC9jb2RlPiwgPGNvZGU+dWxlPC9jb2RlPiwgPGNvZGU+c2Y8L2NvZGU+LCA8Y29kZT5uZ2xlPC9jb2RlPiwgPGNvZGU+c2VxPC9jb2RlPiwgPGNvZGU+bmdsPC9jb2RlPiwKKzxjb2RlPmx0PC9jb2RlPiwgPGNvZGU+bmdlPC9jb2RlPiwgPGNvZGU+bGU8L2NvZGU+IG9yIDxjb2RlPm5ndDwvY29kZT4uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfbW92dF9jXzwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT5fcHMgKHYyc2YgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+ZDwvdmFyPjxjb2RlPik8L2NvZGU+PGR0Pjxjb2RlPnYyc2YgX19idWlsdGluX21pcHNfbW92Zl9jXzwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT5fcHMgKHYyc2YgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+LCB2MnNmIDwvY29kZT48dmFyPmM8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+ZDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPkNvbmRpdGlvbmFsIG1vdmUgYmFzZWQgb24gZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbiAoPGNvZGU+Yy48L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+LnBzPC9jb2RlPiwKKzxjb2RlPm1vdnQucHM8L2NvZGU+Lzxjb2RlPm1vdmYucHM8L2NvZGU+KS4KKworICAgICA8cD5UaGUgPGNvZGU+bW92dDwvY29kZT4gZnVuY3Rpb25zIHJldHVybiB0aGUgdmFsdWUgPHZhcj54PC92YXI+IGNvbXB1dGVkIGJ5OgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGMuPHZhcj5jb25kPC92YXI+LnBzIDx2YXI+Y2M8L3Zhcj4sPHZhcj5hPC92YXI+LDx2YXI+YjwvdmFyPgorICAgICAgICAgIG1vdi5wcyA8dmFyPng8L3Zhcj4sPHZhcj5jPC92YXI+CisgICAgICAgICAgbW92dC5wcyA8dmFyPng8L3Zhcj4sPHZhcj5kPC92YXI+LDx2YXI+Y2M8L3Zhcj4KKzwvcHJlPgorICAgICA8cD5UaGUgPGNvZGU+bW92ZjwvY29kZT4gZnVuY3Rpb25zIGFyZSBzaW1pbGFyIGJ1dCB1c2UgPGNvZGU+bW92Zi5wczwvY29kZT4gaW5zdGVhZAorb2YgPGNvZGU+bW92dC5wczwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5pbnQgX19idWlsdGluX21pcHNfdXBwZXJfY188L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+X3BzICh2MnNmIDwvY29kZT48dmFyPmE8L3Zhcj48Y29kZT4sIHYyc2YgPC9jb2RlPjx2YXI+YjwvdmFyPjxjb2RlPik8L2NvZGU+PGR0Pjxjb2RlPmludCBfX2J1aWx0aW5fbWlwc19sb3dlcl9jXzwvY29kZT48dmFyPmNvbmQ8L3Zhcj48Y29kZT5fcHMgKHYyc2YgPC9jb2RlPjx2YXI+YTwvdmFyPjxjb2RlPiwgdjJzZiA8L2NvZGU+PHZhcj5iPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+Q29tcGFyaXNvbiBvZiB0d28gcGFpcmVkLXNpbmdsZSB2YWx1ZXMgKDxjb2RlPmMuPC9jb2RlPjx2YXI+Y29uZDwvdmFyPjxjb2RlPi5wczwvY29kZT4sCis8Y29kZT5iYzF0PC9jb2RlPi88Y29kZT5iYzFmPC9jb2RlPikuCisKKyAgICAgPHA+VGhlc2UgZnVuY3Rpb25zIGNvbXBhcmUgPHZhcj5hPC92YXI+IGFuZCA8dmFyPmI8L3Zhcj4gdXNpbmcgPGNvZGU+Yy48L2NvZGU+PHZhcj5jb25kPC92YXI+PGNvZGU+LnBzPC9jb2RlPgorYW5kIHJldHVybiBlaXRoZXIgdGhlIHVwcGVyIG9yIGxvd2VyIGhhbGYgb2YgdGhlIHJlc3VsdC4gIEZvciBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHYyc2YgYSwgYjsKKyAgICAgICAgICBpZiAoX19idWlsdGluX21pcHNfdXBwZXJfY19lcV9wcyAoYSwgYikpCisgICAgICAgICAgICB1cHBlcl9oYWx2ZXNfYXJlX2VxdWFsICgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVwcGVyX2hhbHZlc19hcmVfdW5lcXVhbCAoKTsKKyAgICAgICAgICAKKyAgICAgICAgICBpZiAoX19idWlsdGluX21pcHNfbG93ZXJfY19lcV9wcyAoYSwgYikpCisgICAgICAgICAgICBsb3dlcl9oYWx2ZXNfYXJlX2VxdWFsICgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvd2VyX2hhbHZlc19hcmVfdW5lcXVhbCAoKTsKKzwvcHJlPgorICAgICA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Qb2ludGVyLUFyaXRoLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1BvaW50ZXItQXJpdGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWIxMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Qb2ludGVyLUFyaXRoLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UG9pbnRlciBBcml0aCAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdWJzY3JpcHRpbmcuaHRtbCNTdWJzY3JpcHRpbmciIHRpdGxlPSJTdWJzY3JpcHRpbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbml0aWFsaXplcnMuaHRtbCNJbml0aWFsaXplcnMiIHRpdGxlPSJJbml0aWFsaXplcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUG9pbnRlci1Bcml0aCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbml0aWFsaXplcnMuaHRtbCNJbml0aWFsaXplcnMiPkluaXRpYWxpemVyczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN1YnNjcmlwdGluZy5odG1sI1N1YnNjcmlwdGluZyI+U3Vic2NyaXB0aW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjIzIEFyaXRobWV0aWMgb24gPGNvZGU+dm9pZDwvY29kZT4tIGFuZCBGdW5jdGlvbi1Qb2ludGVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXZvaWQtcG9pbnRlcnNfMDAyYy1hcml0aG1ldGljLTI1MzkiPjwvYT48YSBuYW1lPSJpbmRleC12b2lkXzAwMmMtc2l6ZS1vZi1wb2ludGVyLXRvLTI1NDAiPjwvYT48YSBuYW1lPSJpbmRleC1mdW5jdGlvbi1wb2ludGVyc18wMDJjLWFyaXRobWV0aWMtMjU0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9uXzAwMmMtc2l6ZS1vZi1wb2ludGVyLXRvLTI1NDIiPjwvYT4KK0luIEdOVSBDLCBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIHBvaW50ZXJzIHRvCis8Y29kZT52b2lkPC9jb2RlPiBhbmQgb24gcG9pbnRlcnMgdG8gZnVuY3Rpb25zLiAgVGhpcyBpcyBkb25lIGJ5IHRyZWF0aW5nIHRoZQorc2l6ZSBvZiBhIDxjb2RlPnZvaWQ8L2NvZGU+IG9yIG9mIGEgZnVuY3Rpb24gYXMgMS4KKworIDxwPkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IDxjb2RlPnNpemVvZjwvY29kZT4gaXMgYWxzbyBhbGxvd2VkIG9uIDxjb2RlPnZvaWQ8L2NvZGU+CithbmQgb24gZnVuY3Rpb24gdHlwZXMsIGFuZCByZXR1cm5zIDEuCisKKyA8cD48YSBuYW1lPSJpbmRleC1XcG9pbnRlcl8wMDJkYXJpdGgtMjU0MyI+PC9hPlRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwb2ludGVyLWFyaXRoPC9zcGFuPjwvc2FtcD4gcmVxdWVzdHMgYSB3YXJuaW5nIGlmIHRoZXNlIGV4dGVuc2lvbnMKK2FyZSB1c2VkLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Qb3dlclBDLUFsdGlWZWNfMDAyZlZTWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Bvd2VyUEMtQWx0aVZlY18wMDJmVlNYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmZlM2VjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Qb3dlclBDLUFsdGlWZWNfMDAyZlZTWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwyMDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Qb3dlclBDIEFsdGlWZWMvVlNYIEJ1aWx0LWluIEZ1bmN0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQb3dlclBDLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNQb3dlclBDLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJQb3dlclBDIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iUlggQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBvd2VyUEMtQWx0aVZlYyUyZlZTWC1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlBvd2VyUEMtQWx0aVZlY18wMDJmVlNYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBvd2VyUEMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1Bvd2VyUEMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UG93ZXJQQyBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPlRhcmdldCBCdWlsdGluczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTYuMTUgUG93ZXJQQyBBbHRpVmVjIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPkdDQyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHRoZSBQb3dlclBDIGZhbWlseSBvZiBwcm9jZXNzb3JzIHRvIGFjY2VzcwordGhlIEFsdGlWZWMgb3BlcmF0aW9ucyBkZXNjcmliZWQgaW4gTW90b3JvbGEncyBBbHRpVmVjIFByb2dyYW1taW5nCitJbnRlcmZhY2UgTWFudWFsLiAgVGhlIGludGVyZmFjZSBpcyBtYWRlIGF2YWlsYWJsZSBieSBpbmNsdWRpbmcKKzxjb2RlPiZsdDthbHRpdmVjLmgmZ3Q7PC9jb2RlPiBhbmQgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hbHRpdmVjPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFiaT1hbHRpdmVjPC9zcGFuPjwvc2FtcD4uICBUaGUgaW50ZXJmYWNlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgdmVjdG9yCit0eXBlcy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyCisgICAgIHZlY3RvciBzaWduZWQgY2hhcgorICAgICB2ZWN0b3IgYm9vbCBjaGFyCisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydAorICAgICB2ZWN0b3IgYm9vbCBzaG9ydAorICAgICB2ZWN0b3IgcGl4ZWwKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQKKyAgICAgdmVjdG9yIGJvb2wgaW50CisgICAgIHZlY3RvciBmbG9hdAorPC9wcmU+CisgPHA+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12c3g8L3NwYW4+PC9zYW1wPiBpcyB1c2VkIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCB2ZWN0b3IgdHlwZXMgYXJlCitpbXBsZW1lbnRlZC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHZlY3RvciB1bnNpZ25lZCBsb25nCisgICAgIHZlY3RvciBzaWduZWQgbG9uZworICAgICB2ZWN0b3IgZG91YmxlCis8L3ByZT4KKyA8cD5UaGUgbG9uZyB0eXBlcyBhcmUgb25seSBpbXBsZW1lbnRlZCBmb3IgNjQtYml0IGNvZGUgZ2VuZXJhdGlvbiwgYW5kCit0aGUgbG9uZyB0eXBlIGlzIG9ubHkgdXNlZCBpbiB0aGUgZmxvYXRpbmcgcG9pbnQvaW50ZWdlciBjb252ZXJzaW9uCitpbnN0cnVjdGlvbnMuCisKKyA8cD5HQ0MncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaGlnaC1sZXZlbCBsYW5ndWFnZSBpbnRlcmZhY2UgYXZhaWxhYmxlIGZyb20KK0MgYW5kIEMrKyBjb2RlIGRpZmZlcnMgZnJvbSBNb3Rvcm9sYSdzIGRvY3VtZW50YXRpb24gaW4gc2V2ZXJhbCB3YXlzLgorCisgICAgIDx1bD4KKzxsaT5BIHZlY3RvciBjb25zdGFudCBpcyBhIGxpc3Qgb2YgY29uc3RhbnQgZXhwcmVzc2lvbnMgd2l0aGluIGN1cmx5IGJyYWNlcy4KKworICAgICA8bGk+QSB2ZWN0b3IgaW5pdGlhbGl6ZXIgcmVxdWlyZXMgbm8gY2FzdCBpZiB0aGUgdmVjdG9yIGNvbnN0YW50IGlzIG9mIHRoZQorc2FtZSB0eXBlIGFzIHRoZSB2YXJpYWJsZSBpdCBpcyBpbml0aWFsaXppbmcuCisKKyAgICAgPGxpPklmIDxjb2RlPnNpZ25lZDwvY29kZT4gb3IgPGNvZGU+dW5zaWduZWQ8L2NvZGU+IGlzIG9taXR0ZWQsIHRoZSBzaWduZWRuZXNzIG9mIHRoZQordmVjdG9yIHR5cGUgaXMgdGhlIGRlZmF1bHQgc2lnbmVkbmVzcyBvZiB0aGUgYmFzZSB0eXBlLiAgVGhlIGRlZmF1bHQKK3ZhcmllcyBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGluZyBzeXN0ZW0sIHNvIGEgcG9ydGFibGUgcHJvZ3JhbSBzaG91bGQKK2Fsd2F5cyBzcGVjaWZ5IHRoZSBzaWduZWRuZXNzLgorCisgICAgIDxsaT5Db21waWxpbmcgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFsdGl2ZWM8L3NwYW4+PC9zYW1wPiBhZGRzIGtleXdvcmRzIDxjb2RlPl9fdmVjdG9yPC9jb2RlPiwKKzxjb2RlPnZlY3RvcjwvY29kZT4sIDxjb2RlPl9fcGl4ZWw8L2NvZGU+LCA8Y29kZT5waXhlbDwvY29kZT4sIDxjb2RlPl9fYm9vbDwvY29kZT4gYW5kCis8Y29kZT5ib29sPC9jb2RlPi4gIFdoZW4gY29tcGlsaW5nIElTTyBDLCB0aGUgY29udGV4dC1zZW5zaXRpdmUgc3Vic3RpdHV0aW9uCitvZiB0aGUga2V5d29yZHMgPGNvZGU+dmVjdG9yPC9jb2RlPiwgPGNvZGU+cGl4ZWw8L2NvZGU+IGFuZCA8Y29kZT5ib29sPC9jb2RlPiBpcworZGlzYWJsZWQuICBUbyB1c2UgdGhlbSwgeW91IG11c3QgaW5jbHVkZSA8Y29kZT4mbHQ7YWx0aXZlYy5oJmd0OzwvY29kZT4gaW5zdGVhZC4KKworICAgICA8bGk+R0NDIGFsbG93cyB1c2luZyBhIDxjb2RlPnR5cGVkZWY8L2NvZGU+IG5hbWUgYXMgdGhlIHR5cGUgc3BlY2lmaWVyIGZvciBhCit2ZWN0b3IgdHlwZS4KKworICAgICA8bGk+Rm9yIEMsIG92ZXJsb2FkZWQgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCB3aXRoIG1hY3JvcyBzbyB0aGUgZm9sbG93aW5nCitkb2VzIG5vdCB3b3JrOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgdmVjX2FkZCAoKHZlY3RvciBzaWduZWQgaW50KXsxLCAyLCAzLCA0fSwgZm9vKTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlNpbmNlIDxjb2RlPnZlY19hZGQ8L2NvZGU+IGlzIGEgbWFjcm8sIHRoZSB2ZWN0b3IgY29uc3RhbnQgaW4gdGhlIGV4YW1wbGUKK2lzIHRyZWF0ZWQgYXMgZm91ciBzZXBhcmF0ZSBhcmd1bWVudHMuICBXcmFwIHRoZSBlbnRpcmUgYXJndW1lbnQgaW4KK3BhcmVudGhlc2VzIGZvciB0aGlzIHRvIHdvcmsuIAorPC91bD4KKworIDxwPjxlbT5Ob3RlOjwvZW0+IE9ubHkgdGhlIDxjb2RlPiZsdDthbHRpdmVjLmgmZ3Q7PC9jb2RlPiBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkLiAKK0ludGVybmFsbHksIEdDQyB1c2VzIGJ1aWx0LWluIGZ1bmN0aW9ucyB0byBhY2hpZXZlIHRoZSBmdW5jdGlvbmFsaXR5IGluCit0aGUgYWZvcmVtZW50aW9uZWQgaGVhZGVyIGZpbGUsIGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGFuZCBhcmUKK3N1YmplY3QgdG8gY2hhbmdlIHdpdGhvdXQgbm90aWNlLgorCisgPHA+VGhlIGZvbGxvd2luZyBpbnRlcmZhY2VzIGFyZSBzdXBwb3J0ZWQgZm9yIHRoZSBnZW5lcmljIGFuZCBzcGVjaWZpYworQWx0aVZlYyBvcGVyYXRpb25zIGFuZCB0aGUgQWx0aVZlYyBwcmVkaWNhdGVzLiAgSW4gY2FzZXMgd2hlcmUgdGhlcmUKK2lzIGEgZGlyZWN0IG1hcHBpbmcgYmV0d2VlbiBnZW5lcmljIGFuZCBzcGVjaWZpYyBvcGVyYXRpb25zLCBvbmx5IHRoZQorZ2VuZXJpYyBuYW1lcyBhcmUgc2hvd24gaGVyZSwgYWx0aG91Z2ggdGhlIHNwZWNpZmljIG9wZXJhdGlvbnMgY2FuIGFsc28KK2JlIHVzZWQuCisKKyA8cD5Bcmd1bWVudHMgdGhhdCBhcmUgZG9jdW1lbnRlZCBhcyA8Y29kZT5jb25zdCBpbnQ8L2NvZGU+IHJlcXVpcmUgbGl0ZXJhbAoraW50ZWdyYWwgdmFsdWVzIHdpdGhpbiB0aGUgcmFuZ2UgcmVxdWlyZWQgZm9yIHRoYXQgb3BlcmF0aW9uLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19hYnMgKHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX2FicyAodmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19hYnMgKHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19hYnMgKHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX2Fic3MgKHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX2Fic3MgKHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfYWJzcyAodmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19hZGQgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfYWRkICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX2FkZCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfYWRkICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19hZGQgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2FkZCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfYWRkICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX2FkZCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19hZGQgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2FkZCAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2FkZCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2FkZCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX2FkZCAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19hZGQgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfYWRkICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19hZGQgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2FkZCAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfYWRkICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19hZGQgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfdmFkZGZwICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdmFkZHV3bSAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY192YWRkdXdtICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZhZGR1d20gKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3ZhZGR1d20gKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3ZhZGR1d20gKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3ZhZGR1d20gKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdmFkZHVobSAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192YWRkdWhtICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZhZGR1aG0gKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZhZGR1aG0gKHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfdmFkZHVobSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192YWRkdWhtICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdmFkZHVibSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192YWRkdWJtICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3ZhZGR1Ym0gKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3ZhZGR1Ym0gKHZlY3RvciBib29sIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192YWRkdWJtICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdmFkZHVibSAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19hZGRjICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19hZGRzICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19hZGRzICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19hZGRzICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19hZGRzICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX2FkZHMgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfYWRkcyAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2FkZHMgKHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfYWRkcyAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19hZGRzICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfYWRkcyAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19hZGRzICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX2FkZHMgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19hZGRzICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19hZGRzICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19hZGRzICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX2FkZHMgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfYWRkcyAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19hZGRzICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZhZGRzd3MgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdmFkZHN3cyAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY192YWRkc3dzICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdmFkZHV3cyAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdmFkZHV3cyAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdmFkZHV3cyAodmVjdG9yIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192YWRkc2hzICh2ZWN0b3IgYm9vbCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZhZGRzaHMgKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdmFkZHNocyAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZhZGR1aHMgKHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfdmFkZHVocyAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192YWRkdWhzICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdmFkZHNicyAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192YWRkc2JzICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3ZhZGRzYnMgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192YWRkdWJzICh2ZWN0b3IgYm9vbCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdmFkZHVicyAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3ZhZGR1YnMgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19hbmQgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19hbmQgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19hbmQgKHZlY3RvciBib29sIGludCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19hbmQgKHZlY3RvciBib29sIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX2FuZCAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19hbmQgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfYW5kICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19hbmQgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2FuZCAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfYW5kICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX2FuZCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfYW5kICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX2FuZCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19hbmQgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2FuZCAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2FuZCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2FuZCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19hbmQgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX2FuZCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfYW5kICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX2FuZCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfYW5kICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19hbmQgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2FuZCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfYW5kYyAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX2FuZGMgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19hbmRjICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBmbG9hdCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfYW5kYyAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfYW5kYyAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19hbmRjICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX2FuZGMgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2FuZGMgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2FuZGMgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2FuZGMgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfYW5kYyAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfYW5kYyAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19hbmRjICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX2FuZGMgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2FuZGMgKHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfYW5kYyAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19hbmRjICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19hbmRjICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19hbmRjICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19hbmRjICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX2FuZGMgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2FuZGMgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2FuZGMgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2FuZGMgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2F2ZyAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19hdmcgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19hdmcgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX2F2ZyAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2F2ZyAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19hdmcgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdmF2Z3N3ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdmF2Z3V3ICh2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdmF2Z3NoICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192YXZndWggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3ZhdmdzYiAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3Zhdmd1YiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfY29weXNpZ24gKHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX2NlaWwgKHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfY21wYiAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfY21wZXEgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfY21wZXEgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY19jbXBlcSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY19jbXBlcSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfY21wZXEgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfY21wZXEgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX2NtcGVxICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3ZjbXBlcWZwICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3ZjbXBlcXV3ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3ZjbXBlcXV3ICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY192Y21wZXF1aCAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3ZjbXBlcXVoICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3ZjbXBlcXViICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3ZjbXBlcXViICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIGludCB2ZWNfY21wZ2UgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX2NtcGd0ICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19jbXBndCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfY21wZ3QgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfY21wZ3QgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX2NtcGd0ICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19jbXBndCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19jbXBndCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY192Y21wZ3RmcCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY192Y21wZ3RzdyAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIGludCB2ZWNfdmNtcGd0dXcgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3ZjbXBndHNoICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3ZjbXBndHVoICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3ZjbXBndHNiICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY192Y21wZ3R1YiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX2NtcGxlICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19jbXBsdCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfY21wbHQgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX2NtcGx0ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX2NtcGx0ICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19jbXBsdCAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfY21wbHQgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfY21wbHQgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfY3RmICh2ZWN0b3IgdW5zaWduZWQgaW50LCBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX2N0ZiAodmVjdG9yIHNpZ25lZCBpbnQsIGNvbnN0IGludCk7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX3ZjZnN4ICh2ZWN0b3Igc2lnbmVkIGludCwgY29uc3QgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfdmNmdXggKHZlY3RvciB1bnNpZ25lZCBpbnQsIGNvbnN0IGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfY3RzICh2ZWN0b3IgZmxvYXQsIGNvbnN0IGludCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19jdHUgKHZlY3RvciBmbG9hdCwgY29uc3QgaW50KTsKKyAgICAgCisgICAgIHZvaWQgdmVjX2RzcyAoY29uc3QgaW50KTsKKyAgICAgCisgICAgIHZvaWQgdmVjX2Rzc2FsbCAodm9pZCk7CisgICAgIAorICAgICB2b2lkIHZlY19kc3QgKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0IChjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3QgKGNvbnN0IHZlY3RvciBib29sIGNoYXIgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3QgKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3QgKGNvbnN0IHZlY3RvciBwaXhlbCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3QgKGNvbnN0IHZlY3RvciBib29sIGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgdmVjdG9yIGZsb2F0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0IChjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0IChjb25zdCBzaWduZWQgY2hhciAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgdW5zaWduZWQgc2hvcnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3QgKGNvbnN0IHNob3J0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0IChjb25zdCB1bnNpZ25lZCBpbnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3QgKGNvbnN0IGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgdW5zaWduZWQgbG9uZyAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgbG9uZyAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdCAoY29uc3QgZmxvYXQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICAKKyAgICAgdm9pZCB2ZWNfZHN0c3QgKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3QgKGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3QgKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCB2ZWN0b3Igc2lnbmVkIHNob3J0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3QgKGNvbnN0IHZlY3RvciBib29sIHNob3J0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3QgKGNvbnN0IHZlY3RvciBwaXhlbCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3QgKGNvbnN0IHZlY3RvciBzaWduZWQgaW50ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3QgKGNvbnN0IHZlY3RvciBib29sIGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCB2ZWN0b3IgZmxvYXQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdCAoY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCBzaWduZWQgY2hhciAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCB1bnNpZ25lZCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCB1bnNpZ25lZCBpbnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdCAoY29uc3QgaW50ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3QgKGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdCAoY29uc3QgbG9uZyAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0IChjb25zdCBmbG9hdCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIAorICAgICB2b2lkIHZlY19kc3RzdHQgKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3R0IChjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdHQgKGNvbnN0IHZlY3RvciBib29sIGNoYXIgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdHQgKGNvbnN0IHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdHQgKGNvbnN0IHZlY3RvciBwaXhlbCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdHQgKGNvbnN0IHZlY3RvciBib29sIGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgdmVjdG9yIGZsb2F0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3R0IChjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3R0IChjb25zdCBzaWduZWQgY2hhciAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgdW5zaWduZWQgc2hvcnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdHQgKGNvbnN0IHNob3J0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0c3R0IChjb25zdCB1bnNpZ25lZCBpbnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3RzdHQgKGNvbnN0IGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgdW5zaWduZWQgbG9uZyAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgbG9uZyAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHN0dCAoY29uc3QgZmxvYXQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICAKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3R0IChjb25zdCB2ZWN0b3Igc2lnbmVkIGNoYXIgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3R0IChjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHQgKGNvbnN0IHZlY3RvciBib29sIHNob3J0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdmVjdG9yIHBpeGVsICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHQgKGNvbnN0IHZlY3RvciBzaWduZWQgaW50ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdmVjdG9yIGJvb2wgaW50ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdmVjdG9yIGZsb2F0ICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHQgKGNvbnN0IHNpZ25lZCBjaGFyICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgdW5zaWduZWQgc2hvcnQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3R0IChjb25zdCBzaG9ydCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHQgKGNvbnN0IHVuc2lnbmVkIGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHQgKGNvbnN0IGludCAqLCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZvaWQgdmVjX2RzdHQgKGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgaW50LCBjb25zdCBpbnQpOworICAgICB2b2lkIHZlY19kc3R0IChjb25zdCBsb25nICosIGludCwgY29uc3QgaW50KTsKKyAgICAgdm9pZCB2ZWNfZHN0dCAoY29uc3QgZmxvYXQgKiwgaW50LCBjb25zdCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19leHB0ZSAodmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfZmxvb3IgKHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX2xkIChpbnQsIGNvbnN0IHZlY3RvciBmbG9hdCAqKTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19sZCAoaW50LCBjb25zdCBmbG9hdCAqKTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19sZCAoaW50LCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKik7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19sZCAoaW50LCBjb25zdCB2ZWN0b3Igc2lnbmVkIGludCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX2xkIChpbnQsIGNvbnN0IGludCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX2xkIChpbnQsIGNvbnN0IGxvbmcgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2xkIChpbnQsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2xkIChpbnQsIGNvbnN0IHVuc2lnbmVkIGludCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfbGQgKGludCwgY29uc3QgdW5zaWduZWQgbG9uZyAqKTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX2xkIChpbnQsIGNvbnN0IHZlY3RvciBib29sIHNob3J0ICopOworICAgICB2ZWN0b3IgcGl4ZWwgdmVjX2xkIChpbnQsIGNvbnN0IHZlY3RvciBwaXhlbCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfbGQgKGludCwgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfbGQgKGludCwgY29uc3Qgc2hvcnQgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbGQgKGludCwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2xkIChpbnQsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICopOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19sZCAoaW50LCBjb25zdCB2ZWN0b3IgYm9vbCBjaGFyICopOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX2xkIChpbnQsIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19sZCAoaW50LCBjb25zdCBzaWduZWQgY2hhciAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2xkIChpbnQsIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbGQgKGludCwgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfbGRlIChpbnQsIGNvbnN0IHNpZ25lZCBjaGFyICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbGRlIChpbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX2xkZSAoaW50LCBjb25zdCBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19sZGUgKGludCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKik7CisgICAgIHZlY3RvciBmbG9hdCB2ZWNfbGRlIChpbnQsIGNvbnN0IGZsb2F0ICopOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfbGRlIChpbnQsIGNvbnN0IGludCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfbGRlIChpbnQsIGNvbnN0IHVuc2lnbmVkIGludCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX2xkZSAoaW50LCBjb25zdCBsb25nICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19sZGUgKGludCwgY29uc3QgdW5zaWduZWQgbG9uZyAqKTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfbHZld3ggKGludCwgZmxvYXQgKik7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19sdmV3eCAoaW50LCBpbnQgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2x2ZXd4IChpbnQsIHVuc2lnbmVkIGludCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX2x2ZXd4IChpbnQsIGxvbmcgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2x2ZXd4IChpbnQsIHVuc2lnbmVkIGxvbmcgKik7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19sdmVoeCAoaW50LCBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19sdmVoeCAoaW50LCB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfbHZlYnggKGludCwgY2hhciAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2x2ZWJ4IChpbnQsIHVuc2lnbmVkIGNoYXIgKik7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX2xkbCAoaW50LCBjb25zdCB2ZWN0b3IgZmxvYXQgKik7CisgICAgIHZlY3RvciBmbG9hdCB2ZWNfbGRsIChpbnQsIGNvbnN0IGZsb2F0ICopOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX2xkbCAoaW50LCBjb25zdCB2ZWN0b3IgYm9vbCBpbnQgKik7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19sZGwgKGludCwgY29uc3QgdmVjdG9yIHNpZ25lZCBpbnQgKik7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19sZGwgKGludCwgY29uc3QgaW50ICopOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfbGRsIChpbnQsIGNvbnN0IGxvbmcgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX2xkbCAoaW50LCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19sZGwgKGludCwgY29uc3QgdW5zaWduZWQgaW50ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19sZGwgKGludCwgY29uc3QgdW5zaWduZWQgbG9uZyAqKTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX2xkbCAoaW50LCBjb25zdCB2ZWN0b3IgYm9vbCBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19sZGwgKGludCwgY29uc3QgdmVjdG9yIHBpeGVsICopOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19sZGwgKGludCwgY29uc3QgdmVjdG9yIHNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfbGRsIChpbnQsIGNvbnN0IHNob3J0ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX2xkbCAoaW50LCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbGRsIChpbnQsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICopOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19sZGwgKGludCwgY29uc3QgdmVjdG9yIGJvb2wgY2hhciAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19sZGwgKGludCwgY29uc3QgdmVjdG9yIHNpZ25lZCBjaGFyICopOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX2xkbCAoaW50LCBjb25zdCBzaWduZWQgY2hhciAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2xkbCAoaW50LCBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2xkbCAoaW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICopOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19sb2dlICh2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2x2c2wgKGludCwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2x2c2wgKGludCwgY29uc3Qgdm9sYXRpbGUgc2lnbmVkIGNoYXIgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNsIChpbnQsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbHZzbCAoaW50LCBjb25zdCB2b2xhdGlsZSBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2x2c2wgKGludCwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgaW50ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbHZzbCAoaW50LCBjb25zdCB2b2xhdGlsZSBpbnQgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNsIChpbnQsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNsIChpbnQsIGNvbnN0IHZvbGF0aWxlIGxvbmcgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNsIChpbnQsIGNvbnN0IHZvbGF0aWxlIGZsb2F0ICopOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2x2c3IgKGludCwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2x2c3IgKGludCwgY29uc3Qgdm9sYXRpbGUgc2lnbmVkIGNoYXIgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNyIChpbnQsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbHZzciAoaW50LCBjb25zdCB2b2xhdGlsZSBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX2x2c3IgKGludCwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgaW50ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbHZzciAoaW50LCBjb25zdCB2b2xhdGlsZSBpbnQgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNyIChpbnQsIGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNyIChpbnQsIGNvbnN0IHZvbGF0aWxlIGxvbmcgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNyIChpbnQsIGNvbnN0IHZvbGF0aWxlIGZsb2F0ICopOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19tYWRkICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX21hZGRzICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX21heCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbWF4ICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19tYXggKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfbWF4ICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX21heCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19tYXggKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19tYXggKHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19tYXggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19tYXggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX21heCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19tYXggKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfbWF4ICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfbWF4ICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19tYXggKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX21heCAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19tYXggKHZlY3RvciBib29sIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfbWF4ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX21heCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19tYXggKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfdm1heGZwICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdm1heHN3ICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZtYXhzdyAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY192bWF4c3cgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192bWF4dXcgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3ZtYXh1dyAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdm1heHV3ICh2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdm1heHNoICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZtYXhzaCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192bWF4c2ggKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZtYXh1aCAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZtYXh1aCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZtYXh1aCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdm1heHNiICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3ZtYXhzYiAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192bWF4c2IgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192bWF4dWIgKHZlY3RvciBib29sIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3ZtYXh1YiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdm1heHViICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfbWVyZ2VoICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19tZXJnZWggKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX21lcmdlaCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX21lcmdlaCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19tZXJnZWggKHZlY3RvciBwaXhlbCwgdmVjdG9yIHBpeGVsKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfbWVyZ2VoICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX21lcmdlaCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19tZXJnZWggKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19tZXJnZWggKHZlY3RvciBib29sIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX21lcmdlaCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfbWVyZ2VoICh2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY192bXJnaHcgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY192bXJnaHcgKHZlY3RvciBib29sIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZtcmdodyAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdm1yZ2h3ICh2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3ZtcmdoaCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdm1yZ2hoICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZtcmdoaCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY192bXJnaGggKHZlY3RvciBwaXhlbCwgdmVjdG9yIHBpeGVsKTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3ZtcmdoYiAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdm1yZ2hiICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192bXJnaGIgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19tZXJnZWwgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX21lcmdlbCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbWVyZ2VsICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfbWVyZ2VsICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3IgcGl4ZWwgdmVjX21lcmdlbCAodmVjdG9yIHBpeGVsLCB2ZWN0b3IgcGl4ZWwpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19tZXJnZWwgKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbWVyZ2VsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX21lcmdlbCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX21lcmdlbCAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfbWVyZ2VsICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19tZXJnZWwgKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX3ZtcmdsdyAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdm1yZ2x3ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192bXJnbHcgKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfdm1yZ2x3ICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfdm1yZ2xoICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192bXJnbGggKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfdm1yZ2xoICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgcGl4ZWwgdmVjX3ZtcmdsaCAodmVjdG9yIHBpeGVsLCB2ZWN0b3IgcGl4ZWwpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfdm1yZ2xiICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192bXJnbGIgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3ZtcmdsYiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbWZ2c2NyICh2b2lkKTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19taW4gKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX21pbiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbWluICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX21pbiAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19taW4gKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfbWluICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbWluICh2ZWN0b3IgYm9vbCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbWluICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbWluICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19taW4gKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfbWluICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX21pbiAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX21pbiAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfbWluICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19taW4gKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfbWluICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX21pbiAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19taW4gKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBmbG9hdCB2ZWNfbWluICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX3ZtaW5mcCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZtaW5zdyAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY192bWluc3cgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdm1pbnN3ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdm1pbnV3ICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192bWludXcgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3ZtaW51dyAodmVjdG9yIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZtaW5zaCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192bWluc2ggKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdm1pbnNoICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192bWludWggKHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192bWludWggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192bWludWggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3ZtaW5zYiAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192bWluc2IgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdm1pbnNiICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdm1pbnViICh2ZWN0b3IgYm9vbCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192bWludWIgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3ZtaW51YiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX21sYWRkICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19tbGFkZCAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX21sYWRkICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbWxhZGQgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfbXJhZGRzICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19tc3VtICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfbXN1bSAodmVjdG9yIHNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX21zdW0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX21zdW0gKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3Ztc3Vtc2htICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdm1zdW11aG0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3Ztc3VtbWJtICh2ZWN0b3Igc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdm1zdW11Ym0gKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX21zdW1zICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX21zdW1zICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3Ztc3Vtc2hzICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdm1zdW11aHMgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdm9pZCB2ZWNfbXR2c2NyICh2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZvaWQgdmVjX210dnNjciAodmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZvaWQgdmVjX210dnNjciAodmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdm9pZCB2ZWNfbXR2c2NyICh2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgdm9pZCB2ZWNfbXR2c2NyICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2b2lkIHZlY19tdHZzY3IgKHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdm9pZCB2ZWNfbXR2c2NyICh2ZWN0b3IgcGl4ZWwpOworICAgICB2b2lkIHZlY19tdHZzY3IgKHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZvaWQgdmVjX210dnNjciAodmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2b2lkIHZlY19tdHZzY3IgKHZlY3RvciBib29sIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19tdWxlICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX211bGUgKHZlY3RvciBzaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfbXVsZSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfbXVsZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdm11bGVzaCAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdm11bGV1aCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdm11bGVzYiAodmVjdG9yIHNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192bXVsZXViICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfbXVsbyAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19tdWxvICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX211bG8gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX211bG8gKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZtdWxvc2ggKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3ZtdWxvdWggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZtdWxvc2IgKHZlY3RvciBzaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfdm11bG91YiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19ubXN1YiAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX25vciAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfbm9yICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19ub3IgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX25vciAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19ub3IgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX25vciAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX25vciAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19ub3IgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX25vciAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfbm9yICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfb3IgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19vciAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX29yICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBmbG9hdCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfb3IgKHZlY3RvciBib29sIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX29yICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX29yICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX29yICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19vciAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfb3IgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX29yICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX29yICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19vciAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19vciAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19vciAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfb3IgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX29yICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19vciAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX29yICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19vciAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfb3IgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfb3IgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX29yICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19vciAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfb3IgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfcGFjayAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19wYWNrICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19wYWNrICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19wYWNrICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3BhY2sgKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY19wYWNrICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfdnBrdXd1bSAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192cGt1d3VtICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3Zwa3V3dW0gKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY192cGt1aHVtICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3Zwa3VodW0gKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192cGt1aHVtICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19wYWNrcHggKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3BhY2tzICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19wYWNrcyAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfcGFja3MgKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19wYWNrcyAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3Zwa3N3c3MgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3Zwa3V3dXMgKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3Zwa3Noc3MgKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdnBrdWh1cyAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19wYWNrc3UgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3BhY2tzdSAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfcGFja3N1ICh2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfcGFja3N1ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192cGtzd3VzICh2ZWN0b3Igc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdnBrc2h1cyAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19wZXJtICh2ZWN0b3IgZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGZsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3Blcm0gKHZlY3RvciBzaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3Blcm0gKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19wZXJtICh2ZWN0b3IgYm9vbCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfcGVybSAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3Blcm0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfcGVybSAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19wZXJtICh2ZWN0b3IgcGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19wZXJtICh2ZWN0b3Igc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3Blcm0gKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3Blcm0gKHZlY3RvciBib29sIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfcmUgKHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3JsICh2ZWN0b3Igc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3JsICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3JsICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3JsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19ybCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19ybCAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnJsdyAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192cmx3ICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZybGggKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfdnJsaCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3ZybGIgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdnJsYiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX3JvdW5kICh2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19yZWNpcCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19yc3FydCAodmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBmbG9hdCB2ZWNfcnNxcnRlICh2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19zZWwgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX3NlbCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc2VsICh2ZWN0b3Igc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zZWwgKHZlY3RvciBzaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NlbCAodmVjdG9yIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NlbCAodmVjdG9yIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3NlbCAodmVjdG9yIGJvb2wgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19zZWwgKHZlY3RvciBib29sIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zZWwgKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3NlbCAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc2VsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc2VsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfc2VsICh2ZWN0b3IgYm9vbCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3NlbCAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NlbCAodmVjdG9yIHNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfc2VsICh2ZWN0b3Igc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zZWwgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zZWwgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19zZWwgKHZlY3RvciBib29sIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfc2VsICh2ZWN0b3IgYm9vbCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19zbCAodmVjdG9yIHNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zbCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zbCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19zbCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc2wgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfc2wgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZzbHcgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnNsdyAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192c2xoICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZzbGggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192c2xiICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3ZzbGIgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19zbGQgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0LCBjb25zdCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc2xkICh2ZWN0b3Igc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NsZCAodmVjdG9yIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfc2xkICh2ZWN0b3IgYm9vbCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zbGQgKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3NsZCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3NsZCAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgcGl4ZWwgdmVjX3NsZCAodmVjdG9yIHBpeGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHBpeGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19zbGQgKHZlY3RvciBzaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBzaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zbGQgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfc2xkICh2ZWN0b3IgYm9vbCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zbGwgKHZlY3RvciBzaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3NsbCAodmVjdG9yIHNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zbGwgKHZlY3RvciBzaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NsbCAodmVjdG9yIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfc2xsICh2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NsbCAodmVjdG9yIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfc2xsICh2ZWN0b3IgYm9vbCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19zbGwgKHZlY3RvciBib29sIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfc2xsICh2ZWN0b3IgYm9vbCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3NsbCAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfc2xsICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3NsbCAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc2xsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19zbGwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc2xsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY19zbGwgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3NsbCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY19zbGwgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBwaXhlbCB2ZWNfc2xsICh2ZWN0b3IgcGl4ZWwsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgcGl4ZWwgdmVjX3NsbCAodmVjdG9yIHBpeGVsLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgcGl4ZWwgdmVjX3NsbCAodmVjdG9yIHBpeGVsLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfc2xsICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NsbCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NsbCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zbGwgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3NsbCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zbGwgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3NsbCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3NsbCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfc2xsICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX3NsbyAodmVjdG9yIGZsb2F0LCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX3NsbyAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zbG8gKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc2xvICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19zbG8gKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NsbyAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zbG8gKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3NsbyAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3NsbyAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19zbG8gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19zbG8gKHZlY3RvciBwaXhlbCwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19zbG8gKHZlY3RvciBwaXhlbCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NsbyAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NsbyAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zbG8gKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfc2xvICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19zcGxhdCAodmVjdG9yIHNpZ25lZCBjaGFyLCBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfc3BsYXQgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY19zcGxhdCAodmVjdG9yIGJvb2wgY2hhciwgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfc3BsYXQgKHZlY3RvciBzaWduZWQgc2hvcnQsIGNvbnN0IGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3BsYXQgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3NwbGF0ICh2ZWN0b3IgYm9vbCBzaG9ydCwgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19zcGxhdCAodmVjdG9yIHBpeGVsLCBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX3NwbGF0ICh2ZWN0b3IgZmxvYXQsIGNvbnN0IGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zcGxhdCAodmVjdG9yIHNpZ25lZCBpbnQsIGNvbnN0IGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NwbGF0ICh2ZWN0b3IgdW5zaWduZWQgaW50LCBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3NwbGF0ICh2ZWN0b3IgYm9vbCBpbnQsIGNvbnN0IGludCk7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX3ZzcGx0dyAodmVjdG9yIGZsb2F0LCBjb25zdCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnNwbHR3ICh2ZWN0b3Igc2lnbmVkIGludCwgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnNwbHR3ICh2ZWN0b3IgdW5zaWduZWQgaW50LCBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3ZzcGx0dyAodmVjdG9yIGJvb2wgaW50LCBjb25zdCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3ZzcGx0aCAodmVjdG9yIGJvb2wgc2hvcnQsIGNvbnN0IGludCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZzcGx0aCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192c3BsdGggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgY29uc3QgaW50KTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY192c3BsdGggKHZlY3RvciBwaXhlbCwgY29uc3QgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdnNwbHRiICh2ZWN0b3Igc2lnbmVkIGNoYXIsIGNvbnN0IGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192c3BsdGIgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCBjb25zdCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBjaGFyIHZlY192c3BsdGIgKHZlY3RvciBib29sIGNoYXIsIGNvbnN0IGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NwbGF0X3M4IChjb25zdCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfc3BsYXRfczE2IChjb25zdCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3NwbGF0X3MzMiAoY29uc3QgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zcGxhdF91OCAoY29uc3QgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3BsYXRfdTE2IChjb25zdCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfc3BsYXRfdTMyIChjb25zdCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19zciAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zciAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zciAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3IgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3NyICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NyICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY192c3J3ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3ZzcncgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdnNyaCAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192c3JoICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdnNyYiAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192c3JiICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfc3JhICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3NyYSAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfc3JhICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3JhICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc3JhICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NyYSAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnNyYXcgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnNyYXcgKHZlY3RvciB1bnNpZ25lZCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZzcmFoICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192c3JhaCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192c3JhYiAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192c3JhYiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3NybCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc3JsICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3NybCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfc3JsICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfc3JsICh2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NybCAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3NybCAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19zcmwgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY19zcmwgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zcmwgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zcmwgKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfc3JsICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3JsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19zcmwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3JsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY19zcmwgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3NybCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY19zcmwgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBwaXhlbCB2ZWNfc3JsICh2ZWN0b3IgcGl4ZWwsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgcGl4ZWwgdmVjX3NybCAodmVjdG9yIHBpeGVsLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgcGl4ZWwgdmVjX3NybCAodmVjdG9yIHBpeGVsLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfc3JsICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NybCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NybCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zcmwgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3NybCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zcmwgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3NybCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBib29sIGNoYXIgdmVjX3NybCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfc3JsICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX3NybyAodmVjdG9yIGZsb2F0LCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX3NybyAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zcm8gKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc3JvICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19zcm8gKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3NybyAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zcm8gKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3NybyAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3NybyAodmVjdG9yIHVuc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19zcm8gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19zcm8gKHZlY3RvciBwaXhlbCwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHBpeGVsIHZlY19zcm8gKHZlY3RvciBwaXhlbCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NybyAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3NybyAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zcm8gKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfc3JvICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBmbG9hdCwgaW50LCB2ZWN0b3IgZmxvYXQgKik7CisgICAgIHZvaWQgdmVjX3N0ICh2ZWN0b3IgZmxvYXQsIGludCwgZmxvYXQgKik7CisgICAgIHZvaWQgdmVjX3N0ICh2ZWN0b3Igc2lnbmVkIGludCwgaW50LCB2ZWN0b3Igc2lnbmVkIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBzaWduZWQgaW50LCBpbnQsIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciB1bnNpZ25lZCBpbnQsIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciB1bnNpZ25lZCBpbnQsIGludCwgdW5zaWduZWQgaW50ICopOworICAgICB2b2lkIHZlY19zdCAodmVjdG9yIGJvb2wgaW50LCBpbnQsIHZlY3RvciBib29sIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBib29sIGludCwgaW50LCB1bnNpZ25lZCBpbnQgKik7CisgICAgIHZvaWQgdmVjX3N0ICh2ZWN0b3IgYm9vbCBpbnQsIGludCwgaW50ICopOworICAgICB2b2lkIHZlY19zdCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgaW50LCB2ZWN0b3Igc2lnbmVkIHNob3J0ICopOworICAgICB2b2lkIHZlY19zdCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgaW50LCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgaW50LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3N0ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIGludCwgdW5zaWduZWQgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3N0ICh2ZWN0b3IgYm9vbCBzaG9ydCwgaW50LCB2ZWN0b3IgYm9vbCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBib29sIHNob3J0LCBpbnQsIHVuc2lnbmVkIHNob3J0ICopOworICAgICB2b2lkIHZlY19zdCAodmVjdG9yIHBpeGVsLCBpbnQsIHZlY3RvciBwaXhlbCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBwaXhlbCwgaW50LCB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBwaXhlbCwgaW50LCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBib29sIHNob3J0LCBpbnQsIHNob3J0ICopOworICAgICB2b2lkIHZlY19zdCAodmVjdG9yIHNpZ25lZCBjaGFyLCBpbnQsIHZlY3RvciBzaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBzaWduZWQgY2hhciwgaW50LCBzaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCBpbnQsIHZlY3RvciB1bnNpZ25lZCBjaGFyICopOworICAgICB2b2lkIHZlY19zdCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBib29sIGNoYXIsIGludCwgdmVjdG9yIGJvb2wgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBib29sIGNoYXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3QgKHZlY3RvciBib29sIGNoYXIsIGludCwgc2lnbmVkIGNoYXIgKik7CisgICAgIAorICAgICB2b2lkIHZlY19zdGUgKHZlY3RvciBzaWduZWQgY2hhciwgaW50LCBzaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3RlICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgaW50LCB1bnNpZ25lZCBjaGFyICopOworICAgICB2b2lkIHZlY19zdGUgKHZlY3RvciBib29sIGNoYXIsIGludCwgc2lnbmVkIGNoYXIgKik7CisgICAgIHZvaWQgdmVjX3N0ZSAodmVjdG9yIGJvb2wgY2hhciwgaW50LCB1bnNpZ25lZCBjaGFyICopOworICAgICB2b2lkIHZlY19zdGUgKHZlY3RvciBzaWduZWQgc2hvcnQsIGludCwgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3N0ZSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LCBpbnQsIHVuc2lnbmVkIHNob3J0ICopOworICAgICB2b2lkIHZlY19zdGUgKHZlY3RvciBib29sIHNob3J0LCBpbnQsIHNob3J0ICopOworICAgICB2b2lkIHZlY19zdGUgKHZlY3RvciBib29sIHNob3J0LCBpbnQsIHVuc2lnbmVkIHNob3J0ICopOworICAgICB2b2lkIHZlY19zdGUgKHZlY3RvciBwaXhlbCwgaW50LCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RlICh2ZWN0b3IgcGl4ZWwsIGludCwgdW5zaWduZWQgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3N0ZSAodmVjdG9yIGZsb2F0LCBpbnQsIGZsb2F0ICopOworICAgICB2b2lkIHZlY19zdGUgKHZlY3RvciBzaWduZWQgaW50LCBpbnQsIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RlICh2ZWN0b3IgdW5zaWduZWQgaW50LCBpbnQsIHVuc2lnbmVkIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RlICh2ZWN0b3IgYm9vbCBpbnQsIGludCwgaW50ICopOworICAgICB2b2lkIHZlY19zdGUgKHZlY3RvciBib29sIGludCwgaW50LCB1bnNpZ25lZCBpbnQgKik7CisgICAgIAorICAgICB2b2lkIHZlY19zdHZld3ggKHZlY3RvciBmbG9hdCwgaW50LCBmbG9hdCAqKTsKKyAgICAgdm9pZCB2ZWNfc3R2ZXd4ICh2ZWN0b3Igc2lnbmVkIGludCwgaW50LCBpbnQgKik7CisgICAgIHZvaWQgdmVjX3N0dmV3eCAodmVjdG9yIHVuc2lnbmVkIGludCwgaW50LCB1bnNpZ25lZCBpbnQgKik7CisgICAgIHZvaWQgdmVjX3N0dmV3eCAodmVjdG9yIGJvb2wgaW50LCBpbnQsIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3R2ZXd4ICh2ZWN0b3IgYm9vbCBpbnQsIGludCwgdW5zaWduZWQgaW50ICopOworICAgICAKKyAgICAgdm9pZCB2ZWNfc3R2ZWh4ICh2ZWN0b3Igc2lnbmVkIHNob3J0LCBpbnQsIHNob3J0ICopOworICAgICB2b2lkIHZlY19zdHZlaHggKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgaW50LCB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3R2ZWh4ICh2ZWN0b3IgYm9vbCBzaG9ydCwgaW50LCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3R2ZWh4ICh2ZWN0b3IgYm9vbCBzaG9ydCwgaW50LCB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3R2ZWh4ICh2ZWN0b3IgcGl4ZWwsIGludCwgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3N0dmVoeCAodmVjdG9yIHBpeGVsLCBpbnQsIHVuc2lnbmVkIHNob3J0ICopOworICAgICAKKyAgICAgdm9pZCB2ZWNfc3R2ZWJ4ICh2ZWN0b3Igc2lnbmVkIGNoYXIsIGludCwgc2lnbmVkIGNoYXIgKik7CisgICAgIHZvaWQgdmVjX3N0dmVieCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3R2ZWJ4ICh2ZWN0b3IgYm9vbCBjaGFyLCBpbnQsIHNpZ25lZCBjaGFyICopOworICAgICB2b2lkIHZlY19zdHZlYnggKHZlY3RvciBib29sIGNoYXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgCisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIGZsb2F0LCBpbnQsIHZlY3RvciBmbG9hdCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgZmxvYXQsIGludCwgZmxvYXQgKik7CisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIHNpZ25lZCBpbnQsIGludCwgdmVjdG9yIHNpZ25lZCBpbnQgKik7CisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIHNpZ25lZCBpbnQsIGludCwgaW50ICopOworICAgICB2b2lkIHZlY19zdGwgKHZlY3RvciB1bnNpZ25lZCBpbnQsIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgdW5zaWduZWQgaW50LCBpbnQsIHVuc2lnbmVkIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgYm9vbCBpbnQsIGludCwgdmVjdG9yIGJvb2wgaW50ICopOworICAgICB2b2lkIHZlY19zdGwgKHZlY3RvciBib29sIGludCwgaW50LCB1bnNpZ25lZCBpbnQgKik7CisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIGJvb2wgaW50LCBpbnQsIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3Igc2lnbmVkIHNob3J0LCBpbnQsIHZlY3RvciBzaWduZWQgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgaW50LCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIGludCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICopOworICAgICB2b2lkIHZlY19zdGwgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgaW50LCB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgYm9vbCBzaG9ydCwgaW50LCB2ZWN0b3IgYm9vbCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgYm9vbCBzaG9ydCwgaW50LCB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgYm9vbCBzaG9ydCwgaW50LCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgcGl4ZWwsIGludCwgdmVjdG9yIHBpeGVsICopOworICAgICB2b2lkIHZlY19zdGwgKHZlY3RvciBwaXhlbCwgaW50LCB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgcGl4ZWwsIGludCwgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIHNpZ25lZCBjaGFyLCBpbnQsIHZlY3RvciBzaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3Igc2lnbmVkIGNoYXIsIGludCwgc2lnbmVkIGNoYXIgKik7CisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIGludCwgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKik7CisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfc3RsICh2ZWN0b3IgYm9vbCBjaGFyLCBpbnQsIHZlY3RvciBib29sIGNoYXIgKik7CisgICAgIHZvaWQgdmVjX3N0bCAodmVjdG9yIGJvb2wgY2hhciwgaW50LCB1bnNpZ25lZCBjaGFyICopOworICAgICB2b2lkIHZlY19zdGwgKHZlY3RvciBib29sIGNoYXIsIGludCwgc2lnbmVkIGNoYXIgKik7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3N1YiAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19zdWIgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfc3ViICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19zdWIgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3N1YiAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfc3ViICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zdWIgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfc3ViICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3N1YiAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3ViICh2ZWN0b3IgYm9vbCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3ViICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3ViICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc3ViICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3N1YiAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zdWIgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3N1YiAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfc3ViICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19zdWIgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX3N1YiAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY192c3ViZnAgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY192c3VidXdtICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZzdWJ1d20gKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnN1YnV3bSAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnN1YnV3bSAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnN1YnV3bSAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnN1YnV3bSAodmVjdG9yIHVuc2lnbmVkIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192c3VidWhtICh2ZWN0b3IgYm9vbCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZzdWJ1aG0gKHZlY3RvciBzaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdnN1YnVobSAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfdnN1YnVobSAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192c3VidWhtICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZzdWJ1aG0gKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192c3VidWJtICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3ZzdWJ1Ym0gKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdnN1YnVibSAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdnN1YnVibSAodmVjdG9yIGJvb2wgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3ZzdWJ1Ym0gKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192c3VidWJtICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3N1YmMgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3N1YnMgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3N1YnMgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3N1YnMgKHZlY3RvciB1bnNpZ25lZCBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3N1YnMgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfc3VicyAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY19zdWJzICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfc3VicyAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY19zdWJzICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3N1YnMgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY19zdWJzICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3N1YnMgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfc3VicyAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3N1YnMgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3N1YnMgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3N1YnMgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfc3VicyAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zdWJzICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3N1YnMgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnN1YnN3cyAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY192c3Vic3dzICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZzdWJzd3MgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192c3VidXdzICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192c3VidXdzICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192c3VidXdzICh2ZWN0b3IgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZzdWJzaHMgKHZlY3RvciBib29sIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdnN1YnNocyAodmVjdG9yIHNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192c3Vic2hzICh2ZWN0b3Igc2lnbmVkIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgCisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfdnN1YnVocyAodmVjdG9yIGJvb2wgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192c3VidWhzICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZzdWJ1aHMgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192c3Vic2JzICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3ZzdWJzYnMgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdnN1YnNicyAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3ZzdWJ1YnMgKHZlY3RvciBib29sIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192c3VidWJzICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfdnN1YnVicyAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY19zdW00cyAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3N1bTRzICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3N1bTRzICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnN1bTRzaHMgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY192c3VtNHNicyAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192c3VtNHVicyAodmVjdG9yIHVuc2lnbmVkIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zdW0ycyAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY19zdW1zICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICAKKyAgICAgdmVjdG9yIGZsb2F0IHZlY190cnVuYyAodmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3VucGFja2ggKHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY191bnBhY2toICh2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3VucGFja2ggKHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3VucGFja2ggKHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdW5wYWNraCAodmVjdG9yIHBpeGVsKTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIGludCB2ZWNfdnVwa2hzaCAodmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnVwa2hzaCAodmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192dXBraHB4ICh2ZWN0b3IgcGl4ZWwpOworICAgICAKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3Z1cGtoc2IgKHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY192dXBraHNiICh2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdW5wYWNrbCAodmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgc2hvcnQgdmVjX3VucGFja2wgKHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY191bnBhY2tsICh2ZWN0b3IgcGl4ZWwpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdW5wYWNrbCAodmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciBib29sIGludCB2ZWNfdW5wYWNrbCAodmVjdG9yIGJvb2wgc2hvcnQpOworICAgICAKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnVwa2xweCAodmVjdG9yIHBpeGVsKTsKKyAgICAgCisgICAgIHZlY3RvciBib29sIGludCB2ZWNfdnVwa2xzaCAodmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnVwa2xzaCAodmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIAorICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfdnVwa2xzYiAodmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3Z1cGtsc2IgKHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIAorICAgICB2ZWN0b3IgZmxvYXQgdmVjX3hvciAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX3hvciAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX3hvciAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgZmxvYXQpOworICAgICB2ZWN0b3IgYm9vbCBpbnQgdmVjX3hvciAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfeG9yICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3hvciAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIHZlY3RvciBzaWduZWQgaW50IHZlY194b3IgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3hvciAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfeG9yICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY194b3IgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICB2ZWN0b3IgYm9vbCBzaG9ydCB2ZWNfeG9yICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIHNob3J0IHZlY194b3IgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfeG9yICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3hvciAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfeG9yICh2ZWN0b3IgYm9vbCBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfeG9yICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIHZlY3RvciB1bnNpZ25lZCBzaG9ydCB2ZWNfeG9yICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICB2ZWN0b3Igc2lnbmVkIGNoYXIgdmVjX3hvciAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfeG9yICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY194b3IgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfeG9yICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY194b3IgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIgdmVjX3hvciAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfeG9yICh2ZWN0b3IgdW5zaWduZWQgY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICAKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9lcSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9lcSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9lcSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciBwaXhlbCwgdmVjdG9yIHBpeGVsKTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9lcSAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciBib29sIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYWxsX2VxICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfZXEgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9nZSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbGxfZ2UgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZ2UgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9nZSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9nZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9nZSAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbGxfZ2UgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9nZSAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbGxfZ2UgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICBpbnQgdmVjX2FsbF9ndCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9ndCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9ndCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbGxfZ3QgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2d0ICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9ndCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9ndCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX2d0ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZ3QgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZ3QgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZ3QgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfZ3QgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9ndCAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfZ3QgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYWxsX2d0ICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfZ3QgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9ndCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYWxsX2d0ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9ndCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbGxfaW4gKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYWxsX2xlICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2xlICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2xlICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9sZSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbGxfbGUgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2xlICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2xlICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbGUgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9sZSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9sZSAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9sZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9sZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX2xlICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9sZSAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbGxfbGUgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9sZSAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYWxsX2xlICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbGxfbGUgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYWxsX2xlICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICBpbnQgdmVjX2FsbF9sdCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9sdCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9sdCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbGxfbHQgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX2x0ICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9sdCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9sdCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX2x0ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbHQgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbHQgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbHQgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbHQgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9sdCAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfbHQgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYWxsX2x0ICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfbHQgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9sdCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYWxsX2x0ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9sdCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbGxfbmFuICh2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9uZSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FsbF9uZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FsbF9uZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBwaXhlbCwgdmVjdG9yIHBpeGVsKTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICBpbnQgdmVjX2FsbF9uZSAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBib29sIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYWxsX25lICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYWxsX25nZSAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbGxfbmd0ICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICBpbnQgdmVjX2FsbF9ubGUgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYWxsX25sdCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbGxfbnVtZXJpYyAodmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfZXEgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfZXEgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfZXEgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3IgcGl4ZWwsIHZlY3RvciBwaXhlbCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbnlfZXEgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FueV9lcSAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X2VxICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICBpbnQgdmVjX2FueV9nZSAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfZ2UgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfZ2UgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2dlICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2dlICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2dlICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9nZSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2dlICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2dlICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfZ2UgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfZ2UgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9nZSAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9nZSAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYW55X2dlICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICBpbnQgdmVjX2FueV9nZSAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X2dlICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FueV9nZSAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbnlfZ2UgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FueV9nZSAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbnlfZ3QgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfZ3QgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfZ3QgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2d0ICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9ndCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3IgYm9vbCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfZ3QgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfZ3QgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9ndCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2d0ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2d0ICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2d0ICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2d0ICh2ZWN0b3Igc2lnbmVkIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfZ3QgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X2d0ICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICBpbnQgdmVjX2FueV9ndCAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X2d0ICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbnlfZ3QgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICBpbnQgdmVjX2FueV9ndCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbnlfZ3QgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYW55X2xlICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2xlICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2xlICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9sZSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfbGUgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2xlICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2xlICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbGUgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9sZSAodmVjdG9yIHVuc2lnbmVkIHNob3J0LCB2ZWN0b3IgdW5zaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9sZSAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9sZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9sZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2xlICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FueV9sZSAodmVjdG9yIHVuc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbnlfbGUgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FueV9sZSAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X2xlICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbnlfbGUgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3Igc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X2xlICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIHVuc2lnbmVkIGNoYXIsIHZlY3RvciB1bnNpZ25lZCBjaGFyKTsKKyAgICAgaW50IHZlY19hbnlfbHQgKHZlY3RvciBib29sIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X2x0ICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBib29sIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIHNpZ25lZCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIGJvb2wgc2hvcnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X2x0ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbHQgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbHQgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbHQgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbHQgKHZlY3RvciBzaWduZWQgc2hvcnQsIHZlY3RvciBzaWduZWQgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIGJvb2wgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbnlfbHQgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYW55X2x0ICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbnlfbHQgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYW55X2x0ICh2ZWN0b3Igc2lnbmVkIGludCwgdmVjdG9yIHNpZ25lZCBpbnQpOworICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbnlfbmFuICh2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciBzaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3Igc2lnbmVkIGNoYXIsIHZlY3RvciBzaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgdW5zaWduZWQgY2hhciwgdmVjdG9yIHVuc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9uZSAodmVjdG9yIGJvb2wgY2hhciwgdmVjdG9yIGJvb2wgY2hhcik7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgYm9vbCBjaGFyLCB2ZWN0b3Igc2lnbmVkIGNoYXIpOworICAgICBpbnQgdmVjX2FueV9uZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIGJvb2wgc2hvcnQpOworICAgICBpbnQgdmVjX2FueV9uZSAodmVjdG9yIHNpZ25lZCBzaG9ydCwgdmVjdG9yIHNpZ25lZCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIHZlY3RvciBib29sIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciB1bnNpZ25lZCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3IgYm9vbCBzaG9ydCk7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgYm9vbCBzaG9ydCwgdmVjdG9yIHVuc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciBib29sIHNob3J0LCB2ZWN0b3Igc2lnbmVkIHNob3J0KTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciBwaXhlbCwgdmVjdG9yIHBpeGVsKTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciBzaWduZWQgaW50LCB2ZWN0b3IgYm9vbCBpbnQpOworICAgICBpbnQgdmVjX2FueV9uZSAodmVjdG9yIHNpZ25lZCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciB1bnNpZ25lZCBpbnQsIHZlY3RvciBib29sIGludCk7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgdW5zaWduZWQgaW50LCB2ZWN0b3IgdW5zaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciBib29sIGludCwgdmVjdG9yIGJvb2wgaW50KTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciBib29sIGludCwgdmVjdG9yIHVuc2lnbmVkIGludCk7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgYm9vbCBpbnQsIHZlY3RvciBzaWduZWQgaW50KTsKKyAgICAgaW50IHZlY19hbnlfbmUgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYW55X25nZSAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbnlfbmd0ICh2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIAorICAgICBpbnQgdmVjX2FueV9ubGUgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYW55X25sdCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICAKKyAgICAgaW50IHZlY19hbnlfbnVtZXJpYyAodmVjdG9yIGZsb2F0KTsKKyAgICAgCisgICAgIGludCB2ZWNfYW55X291dCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworPC9wcmU+CisgPHA+SWYgdGhlIHZlY3Rvci9zY2FsYXIgKFZTWCkgaW5zdHJ1Y3Rpb24gc2V0IGlzIGF2YWlsYWJsZSwgdGhlIGZvbGxvd2luZworYWRkaXRpb25hbCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHZlY3RvciBkb3VibGUgdmVjX2FicyAodmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX2FkZCAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX2FuZCAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX2FuZCAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGJvb2wgbG9uZyk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX2FuZCAodmVjdG9yIGJvb2wgbG9uZywgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX2FuZGMgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19hbmRjICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgYm9vbCBsb25nKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfYW5kYyAodmVjdG9yIGJvb2wgbG9uZywgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX2NlaWwgKHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgYm9vbCBsb25nIHZlY19jbXBlcSAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBib29sIGxvbmcgdmVjX2NtcGdlICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgdmVjdG9yIGJvb2wgbG9uZyB2ZWNfY21wZ3QgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgYm9vbCBsb25nIHZlY19jbXBsZSAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBib29sIGxvbmcgdmVjX2NtcGx0ICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19kaXYgKHZlY3RvciBmbG9hdCwgdmVjdG9yIGZsb2F0KTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfZGl2ICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfZmxvb3IgKHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19sZCAoaW50LCBjb25zdCB2ZWN0b3IgZG91YmxlICopOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19sZCAoaW50LCBjb25zdCBkb3VibGUgKik7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX2xkbCAoaW50LCBjb25zdCB2ZWN0b3IgZG91YmxlICopOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19sZGwgKGludCwgY29uc3QgZG91YmxlICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhciB2ZWNfbHZzbCAoaW50LCBjb25zdCB2b2xhdGlsZSBkb3VibGUgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY19sdnNyIChpbnQsIGNvbnN0IHZvbGF0aWxlIGRvdWJsZSAqKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfbWFkZCAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX21heCAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX21pbiAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBmbG9hdCB2ZWNfbXN1YiAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX21zdWIgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX211bCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19tdWwgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX25lYXJieWludCAodmVjdG9yIGZsb2F0KTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfbmVhcmJ5aW50ICh2ZWN0b3IgZG91YmxlKTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY19ubWFkZCAodmVjdG9yIGZsb2F0LCB2ZWN0b3IgZmxvYXQsIHZlY3RvciBmbG9hdCk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX25tYWRkICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfbm1zdWIgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19ub3IgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19vciAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX29yICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgYm9vbCBsb25nKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfb3IgKHZlY3RvciBib29sIGxvbmcsIHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19wZXJtICh2ZWN0b3IgZG91YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgZG91YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3IgdW5zaWduZWQgY2hhcik7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX3JpbnQgKHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY19yZWNpcCAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX3JzcXJ0ICh2ZWN0b3IgZG91YmxlKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfcnNxcnRlICh2ZWN0b3IgZG91YmxlKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfc2VsICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgYm9vbCBsb25nKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfc2VsICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgdW5zaWduZWQgbG9uZyk7CisgICAgIHZlY3RvciBkb3VibGUgdmVjX3N1YiAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIHZlY3RvciBmbG9hdCB2ZWNfc3FydCAodmVjdG9yIGZsb2F0KTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfc3FydCAodmVjdG9yIGRvdWJsZSk7CisgICAgIHZvaWQgdmVjX3N0ICh2ZWN0b3IgZG91YmxlLCBpbnQsIHZlY3RvciBkb3VibGUgKik7CisgICAgIHZvaWQgdmVjX3N0ICh2ZWN0b3IgZG91YmxlLCBpbnQsIGRvdWJsZSAqKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfdHJ1bmMgKHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY194b3IgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY194b3IgKHZlY3RvciBkb3VibGUsIHZlY3RvciBib29sIGxvbmcpOworICAgICB2ZWN0b3IgZG91YmxlIHZlY194b3IgKHZlY3RvciBib29sIGxvbmcsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FsbF9lcSAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIGludCB2ZWNfYWxsX2dlICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbGxfZ3QgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FsbF9sZSAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIGludCB2ZWNfYWxsX2x0ICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbGxfbmFuICh2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbGxfbmUgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FsbF9uZ2UgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FsbF9uZ3QgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FsbF9ubGUgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FsbF9ubHQgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FsbF9udW1lcmljICh2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbnlfZXEgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FueV9nZSAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIGludCB2ZWNfYW55X2d0ICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbnlfbGUgKHZlY3RvciBkb3VibGUsIHZlY3RvciBkb3VibGUpOworICAgICBpbnQgdmVjX2FueV9sdCAodmVjdG9yIGRvdWJsZSwgdmVjdG9yIGRvdWJsZSk7CisgICAgIGludCB2ZWNfYW55X25hbiAodmVjdG9yIGRvdWJsZSk7CisgICAgIGludCB2ZWNfYW55X25lICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbnlfbmdlICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbnlfbmd0ICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbnlfbmxlICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbnlfbmx0ICh2ZWN0b3IgZG91YmxlLCB2ZWN0b3IgZG91YmxlKTsKKyAgICAgaW50IHZlY19hbnlfbnVtZXJpYyAodmVjdG9yIGRvdWJsZSk7CisgICAgIAorICAgICB2ZWN0b3IgZG91YmxlIHZlY192c3hfbGQgKGludCwgY29uc3QgdmVjdG9yIGRvdWJsZSAqKTsKKyAgICAgdmVjdG9yIGRvdWJsZSB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IGRvdWJsZSAqKTsKKyAgICAgdmVjdG9yIGZsb2F0IHZlY192c3hfbGQgKGludCwgY29uc3QgdmVjdG9yIGZsb2F0ICopOworICAgICB2ZWN0b3IgZmxvYXQgdmVjX3ZzeF9sZCAoaW50LCBjb25zdCBmbG9hdCAqKTsKKyAgICAgdmVjdG9yIGJvb2wgaW50IHZlY192c3hfbGQgKGludCwgY29uc3QgdmVjdG9yIGJvb2wgaW50ICopOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IHZlY3RvciBzaWduZWQgaW50ICopOworICAgICB2ZWN0b3Igc2lnbmVkIGludCB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IGludCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBpbnQgdmVjX3ZzeF9sZCAoaW50LCBjb25zdCBsb25nICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHZlY192c3hfbGQgKGludCwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IHVuc2lnbmVkIGludCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIGludCB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKik7CisgICAgIHZlY3RvciBib29sIHNob3J0IHZlY192c3hfbGQgKGludCwgY29uc3QgdmVjdG9yIGJvb2wgc2hvcnQgKik7CisgICAgIHZlY3RvciBwaXhlbCB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IHZlY3RvciBwaXhlbCAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBzaG9ydCB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IHZlY3RvciBzaWduZWQgc2hvcnQgKik7CisgICAgIHZlY3RvciBzaWduZWQgc2hvcnQgdmVjX3ZzeF9sZCAoaW50LCBjb25zdCBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIHVuc2lnbmVkIHNob3J0IHZlY192c3hfbGQgKGludCwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIHNob3J0ICopOworICAgICB2ZWN0b3IgdW5zaWduZWQgc2hvcnQgdmVjX3ZzeF9sZCAoaW50LCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdmVjdG9yIGJvb2wgY2hhciB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IHZlY3RvciBib29sIGNoYXIgKik7CisgICAgIHZlY3RvciBzaWduZWQgY2hhciB2ZWNfdnN4X2xkIChpbnQsIGNvbnN0IHZlY3RvciBzaWduZWQgY2hhciAqKTsKKyAgICAgdmVjdG9yIHNpZ25lZCBjaGFyIHZlY192c3hfbGQgKGludCwgY29uc3Qgc2lnbmVkIGNoYXIgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192c3hfbGQgKGludCwgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgKik7CisgICAgIHZlY3RvciB1bnNpZ25lZCBjaGFyIHZlY192c3hfbGQgKGludCwgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgCisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIGRvdWJsZSwgaW50LCB2ZWN0b3IgZG91YmxlICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBkb3VibGUsIGludCwgZG91YmxlICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBmbG9hdCwgaW50LCB2ZWN0b3IgZmxvYXQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIGZsb2F0LCBpbnQsIGZsb2F0ICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBzaWduZWQgaW50LCBpbnQsIHZlY3RvciBzaWduZWQgaW50ICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBzaWduZWQgaW50LCBpbnQsIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfdnN4X3N0ICh2ZWN0b3IgdW5zaWduZWQgaW50LCBpbnQsIHZlY3RvciB1bnNpZ25lZCBpbnQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIHVuc2lnbmVkIGludCwgaW50LCB1bnNpZ25lZCBpbnQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIGJvb2wgaW50LCBpbnQsIHZlY3RvciBib29sIGludCAqKTsKKyAgICAgdm9pZCB2ZWNfdnN4X3N0ICh2ZWN0b3IgYm9vbCBpbnQsIGludCwgdW5zaWduZWQgaW50ICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBib29sIGludCwgaW50LCBpbnQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIHNpZ25lZCBzaG9ydCwgaW50LCB2ZWN0b3Igc2lnbmVkIHNob3J0ICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBzaWduZWQgc2hvcnQsIGludCwgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIHVuc2lnbmVkIHNob3J0LCBpbnQsIHZlY3RvciB1bnNpZ25lZCBzaG9ydCAqKTsKKyAgICAgdm9pZCB2ZWNfdnN4X3N0ICh2ZWN0b3IgdW5zaWduZWQgc2hvcnQsIGludCwgdW5zaWduZWQgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIGJvb2wgc2hvcnQsIGludCwgdmVjdG9yIGJvb2wgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIGJvb2wgc2hvcnQsIGludCwgdW5zaWduZWQgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIHBpeGVsLCBpbnQsIHZlY3RvciBwaXhlbCAqKTsKKyAgICAgdm9pZCB2ZWNfdnN4X3N0ICh2ZWN0b3IgcGl4ZWwsIGludCwgdW5zaWduZWQgc2hvcnQgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIHBpeGVsLCBpbnQsIHNob3J0ICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBib29sIHNob3J0LCBpbnQsIHNob3J0ICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBzaWduZWQgY2hhciwgaW50LCB2ZWN0b3Igc2lnbmVkIGNoYXIgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIHNpZ25lZCBjaGFyLCBpbnQsIHNpZ25lZCBjaGFyICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCBpbnQsIHZlY3RvciB1bnNpZ25lZCBjaGFyICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciB1bnNpZ25lZCBjaGFyLCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CisgICAgIHZvaWQgdmVjX3ZzeF9zdCAodmVjdG9yIGJvb2wgY2hhciwgaW50LCB2ZWN0b3IgYm9vbCBjaGFyICopOworICAgICB2b2lkIHZlY192c3hfc3QgKHZlY3RvciBib29sIGNoYXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKKyAgICAgdm9pZCB2ZWNfdnN4X3N0ICh2ZWN0b3IgYm9vbCBjaGFyLCBpbnQsIHNpZ25lZCBjaGFyICopOworPC9wcmU+CisgPHA+Tm90ZSB0aGF0IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnZlY19sZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52ZWNfc3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYnVpbHQtaW4gZnVuY3Rpb25zIGFsd2F5cworZ2VuZXJhdGUgdGhlIEFsdGlWZWMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MVlg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U1RWWDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbnMgZXZlbgoraWYgdGhlIFZTWCBpbnN0cnVjdGlvbiBzZXQgaXMgYXZhaWxhYmxlLiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dmVjX3ZzeF9sZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dmVjX3ZzeF9zdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBidWlsdC1pbiBmdW5jdGlvbnMgYWx3YXlzIGdlbmVyYXRlIHRoZSBWU1ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MWFZEMlg8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkxYVlc0WDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TVFhWRDJYPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TVFhWVzRYPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluc3RydWN0aW9ucy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUG93ZXJQQy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Bvd2VyUEMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZGExYjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Bvd2VyUEMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlBvd2VyUEMgQnVpbHQtaW4gRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyIgdGl0bGU9IlRhcmdldCBCdWlsdGlucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InBpY29DaGlwLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNwaWNvQ2hpcC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0icGljb0NoaXAgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUG93ZXJQQy1BbHRpVmVjXzAwMmZWU1gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1Bvd2VyUEMtQWx0aVZlY18wMDJmVlNYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJQb3dlclBDIEFsdGlWZWMvVlNYIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQb3dlclBDLUJ1aWx0LWluLUZ1bmN0aW9ucyI+PC9hPgorPGEgbmFtZT0iUG93ZXJQQy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBvd2VyUEMtQWx0aVZlY18wMDJmVlNYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNQb3dlclBDLUFsdGlWZWNfMDAyZlZTWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5Qb3dlclBDIEFsdGlWZWMvVlNYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InBpY29DaGlwLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNwaWNvQ2hpcC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5waWNvQ2hpcCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPlRhcmdldCBCdWlsdGluczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTYuMTQgUG93ZXJQQyBCdWlsdC1pbiBGdW5jdGlvbnM8L2g0PgorCis8cD5UaGVzZSBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIFBvd2VyUEMgZmFtaWx5IG9mCitwcm9jZXNzb3JzOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGZsb2F0IF9fYnVpbHRpbl9yZWNpcGRpdmYgKGZsb2F0LCBmbG9hdCk7CisgICAgIGZsb2F0IF9fYnVpbHRpbl9yc3FydGYgKGZsb2F0KTsKKyAgICAgZG91YmxlIF9fYnVpbHRpbl9yZWNpcGRpdiAoZG91YmxlLCBkb3VibGUpOworICAgICBkb3VibGUgX19idWlsdGluX3JzcXJ0IChkb3VibGUpOworICAgICBsb25nIF9fYnVpbHRpbl9icGVybWQgKGxvbmcsIGxvbmcpOworICAgICB1aW50NjRfdCBfX2J1aWx0aW5fcHBjX2dldF90aW1lYmFzZSAoKTsKKyAgICAgdW5zaWduZWQgbG9uZyBfX2J1aWx0aW5fcHBjX21mdGIgKCk7Cis8L3ByZT4KKyA8cD5UaGUgPGNvZGU+dmVjX3JzcXJ0PC9jb2RlPiwgPGNvZGU+X19idWlsdGluX3JzcXJ0PC9jb2RlPiwgYW5kCis8Y29kZT5fX2J1aWx0aW5fcnNxcnRmPC9jb2RlPiBmdW5jdGlvbnMgZ2VuZXJhdGUgbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zIHRvCitpbXBsZW1lbnQgdGhlIHJlY2lwcm9jYWwgc3FydCBmdW5jdGlvbmFsaXR5IHVzaW5nIHJlY2lwcm9jYWwgc3FydAorZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zLgorCisgPHA+VGhlIDxjb2RlPl9fYnVpbHRpbl9yZWNpcGRpdjwvY29kZT4sIGFuZCA8Y29kZT5fX2J1aWx0aW5fcmVjaXBkaXZmPC9jb2RlPgorZnVuY3Rpb25zIGdlbmVyYXRlIG11bHRpcGxlIGluc3RydWN0aW9ucyB0byBpbXBsZW1lbnQgZGl2aXNpb24gdXNpbmcKK3RoZSByZWNpcHJvY2FsIGVzdGltYXRlIGluc3RydWN0aW9ucy4KKworIDxwPlRoZSA8Y29kZT5fX2J1aWx0aW5fcHBjX2dldF90aW1lYmFzZTwvY29kZT4gYW5kIDxjb2RlPl9fYnVpbHRpbl9wcGNfbWZ0YjwvY29kZT4KK2Z1bmN0aW9ucyBnZW5lcmF0ZSBpbnN0cnVjdGlvbnMgdG8gcmVhZCB0aGUgVGltZSBCYXNlIFJlZ2lzdGVyLiAgVGhlCis8Y29kZT5fX2J1aWx0aW5fcHBjX2dldF90aW1lYmFzZTwvY29kZT4gZnVuY3Rpb24gbWF5IGdlbmVyYXRlIG11bHRpcGxlCitpbnN0cnVjdGlvbnMgYW5kIGFsd2F5cyByZXR1cm5zIHRoZSA2NCBiaXRzIG9mIHRoZSBUaW1lIEJhc2UgUmVnaXN0ZXIuIAorVGhlIDxjb2RlPl9fYnVpbHRpbl9wcGNfbWZ0YjwvY29kZT4gZnVuY3Rpb24gYWx3YXlzIGdlbmVyYXRlcyBvbmUgaW5zdHJ1Y3Rpb24gYW5kCityZXR1cm5zIHRoZSBUaW1lIEJhc2UgUmVnaXN0ZXIgdmFsdWUgYXMgYW4gdW5zaWduZWQgbG9uZywgdGhyb3dpbmcgYXdheQordGhlIG1vc3Qgc2lnbmlmaWNhbnQgd29yZCBvbiAzMi1iaXQgZW52aXJvbm1lbnRzLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Qb3dlclBDLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUG93ZXJQQy1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0YWNmYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUG93ZXJQQy1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UG93ZXJQQyBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InBpY29DaGlwLU9wdGlvbnMuaHRtbCNwaWNvQ2hpcC1PcHRpb25zIiB0aXRsZT0icGljb0NoaXAgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJMNzgtT3B0aW9ucy5odG1sI1JMNzgtT3B0aW9ucyIgdGl0bGU9IlJMNzggT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQb3dlclBDLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUkw3OC1PcHRpb25zLmh0bWwjUkw3OC1PcHRpb25zIj5STDc4IE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJwaWNvQ2hpcC1PcHRpb25zLmh0bWwjcGljb0NoaXAtT3B0aW9ucyI+cGljb0NoaXAgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4zMiBQb3dlclBDIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDLW9wdGlvbnMtMTkwNCI+PC9hPgorVGhlc2UgYXJlIGxpc3RlZCB1bmRlciBTZWUgPGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT4uCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Bvd2VyUEMtVHlwZS1BdHRyaWJ1dGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Bvd2VyUEMtVHlwZS1BdHRyaWJ1dGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlNjlhNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUG93ZXJQQy1UeXBlLUF0dHJpYnV0ZXMuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9VHlwZS1BdHRyaWJ1dGVzLmh0bWwjUG93ZXJQQyUyMFR5cGUlMjBBdHRyaWJ1dGVzIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUHJhZ21hcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjOWI4NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUHJhZ21hcy5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByYWdtYXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVGFyZ2V0LUZvcm1hdC1DaGVja3MuaHRtbCNUYXJnZXQtRm9ybWF0LUNoZWNrcyIgdGl0bGU9IlRhcmdldCBGb3JtYXQgQ2hlY2tzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVW5uYW1lZC1GaWVsZHMuaHRtbCNVbm5hbWVkLUZpZWxkcyIgdGl0bGU9IlVubmFtZWQgRmllbGRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlByYWdtYXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVW5uYW1lZC1GaWVsZHMuaHRtbCNVbm5hbWVkLUZpZWxkcyI+VW5uYW1lZCBGaWVsZHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUYXJnZXQtRm9ybWF0LUNoZWNrcy5odG1sI1RhcmdldC1Gb3JtYXQtQ2hlY2tzIj5UYXJnZXQgRm9ybWF0IENoZWNrczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni41OCBQcmFnbWFzIEFjY2VwdGVkIGJ5IEdDQzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXByYWdtYXMtMzQ1MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjNwcmFnbWFfMDA3ZC0zNDUyIj48L2E+CitHQ0Mgc3VwcG9ydHMgc2V2ZXJhbCB0eXBlcyBvZiBwcmFnbWFzLCBwcmltYXJpbHkgaW4gb3JkZXIgdG8gY29tcGlsZQorY29kZSBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIG90aGVyIGNvbXBpbGVycy4gIE5vdGUgdGhhdCBpbiBnZW5lcmFsCit3ZSBkbyBub3QgcmVjb21tZW5kIHRoZSB1c2Ugb2YgcHJhZ21hczsgU2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPiwKK2ZvciBmdXJ0aGVyIGV4cGxhbmF0aW9uLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQVJNLVByYWdtYXMuaHRtbCNBUk0tUHJhZ21hcyI+QVJNIFByYWdtYXM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJNMzJDLVByYWdtYXMuaHRtbCNNMzJDLVByYWdtYXMiPk0zMkMgUHJhZ21hczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ik1lUC1QcmFnbWFzLmh0bWwjTWVQLVByYWdtYXMiPk1lUCBQcmFnbWFzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtUHJhZ21hcy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLVByYWdtYXMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgUHJhZ21hczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkRhcndpbi1QcmFnbWFzLmh0bWwjRGFyd2luLVByYWdtYXMiPkRhcndpbiBQcmFnbWFzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iU29sYXJpcy1QcmFnbWFzLmh0bWwjU29sYXJpcy1QcmFnbWFzIj5Tb2xhcmlzIFByYWdtYXM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMuaHRtbCNTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMiPlN5bWJvbC1SZW5hbWluZyBQcmFnbWFzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iU3RydWN0dXJlXzAwMmRQYWNraW5nLVByYWdtYXMuaHRtbCNTdHJ1Y3R1cmVfMDAyZFBhY2tpbmctUHJhZ21hcyI+U3RydWN0dXJlLVBhY2tpbmcgUHJhZ21hczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IldlYWstUHJhZ21hcy5odG1sI1dlYWstUHJhZ21hcyI+V2VhayBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9IkRpYWdub3N0aWMtUHJhZ21hcy5odG1sI0RpYWdub3N0aWMtUHJhZ21hcyI+RGlhZ25vc3RpYyBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9IlZpc2liaWxpdHktUHJhZ21hcy5odG1sI1Zpc2liaWxpdHktUHJhZ21hcyI+VmlzaWJpbGl0eSBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9IlB1c2hfMDAyZlBvcC1NYWNyby1QcmFnbWFzLmh0bWwjUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMiPlB1c2gvUG9wIE1hY3JvIFByYWdtYXM8L2E+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tU3BlY2lmaWMtT3B0aW9uLVByYWdtYXMuaHRtbCNGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcyI+RnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXM8L2E+Cis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QcmVjb21waWxlZC1IZWFkZXJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ByZWNvbXBpbGVkLUhlYWRlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWRlMGQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QcmVjb21waWxlZC1IZWFkZXJzLmh0bWwKQEAgLTAsMCArMSwxODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByZWNvbXBpbGVkIEhlYWRlcnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIiB0aXRsZT0iSW52b2tpbmcgR0NDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIiB0aXRsZT0iRW52aXJvbm1lbnQgVmFyaWFibGVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlByZWNvbXBpbGVkLUhlYWRlcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyI+SW52b2tpbmcgR0NDPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yMCBVc2luZyBQcmVjb21waWxlZCBIZWFkZXJzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcHJlY29tcGlsZWQtaGVhZGVycy0yMzkwIj48L2E+PGEgbmFtZT0iaW5kZXgtc3BlZWQtb2YtY29tcGlsYXRpb24tMjM5MSI+PC9hPgorT2Z0ZW4gbGFyZ2UgcHJvamVjdHMgaGF2ZSBtYW55IGhlYWRlciBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiBldmVyeQorc291cmNlIGZpbGUuICBUaGUgdGltZSB0aGUgY29tcGlsZXIgdGFrZXMgdG8gcHJvY2VzcyB0aGVzZSBoZWFkZXIgZmlsZXMKK292ZXIgYW5kIG92ZXIgYWdhaW4gY2FuIGFjY291bnQgZm9yIG5lYXJseSBhbGwgb2YgdGhlIHRpbWUgcmVxdWlyZWQgdG8KK2J1aWxkIHRoZSBwcm9qZWN0LiAgVG8gbWFrZSBidWlsZHMgZmFzdGVyLCBHQ0MgYWxsb3dzIHlvdSB0bworPGRmbj5wcmVjb21waWxlPC9kZm4+IGEgaGVhZGVyIGZpbGUuCisKKyA8cD5UbyBjcmVhdGUgYSBwcmVjb21waWxlZCBoZWFkZXIgZmlsZSwgc2ltcGx5IGNvbXBpbGUgaXQgYXMgeW91IHdvdWxkIGFueQorb3RoZXIgZmlsZSwgaWYgbmVjZXNzYXJ5IHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4teDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byBtYWtlIHRoZSBkcml2ZXIKK3RyZWF0IGl0IGFzIGEgQyBvciBDKysgaGVhZGVyIGZpbGUuICBZb3UgbWF5IHdhbnQgdG8gdXNlIGEKK3Rvb2wgbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bWFrZTwvc3Bhbj48L3NhbXA+IHRvIGtlZXAgdGhlIHByZWNvbXBpbGVkIGhlYWRlciB1cC10by1kYXRlIHdoZW4KK3RoZSBoZWFkZXJzIGl0IGNvbnRhaW5zIGNoYW5nZS4KKworIDxwPkEgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGUgaXMgc2VhcmNoZWQgZm9yIHdoZW4gPGNvZGU+I2luY2x1ZGU8L2NvZGU+IGlzCitzZWVuIGluIHRoZSBjb21waWxhdGlvbi4gIEFzIGl0IHNlYXJjaGVzIGZvciB0aGUgaW5jbHVkZWQgZmlsZQorKHNlZSA8YSBocmVmPSIuLi9jcHAvU2VhcmNoLVBhdGguaHRtbCNTZWFyY2gtUGF0aCI+U2VhcmNoIFBhdGg8L2E+KSB0aGUKK2NvbXBpbGVyIGxvb2tzIGZvciBhIHByZWNvbXBpbGVkIGhlYWRlciBpbiBlYWNoIGRpcmVjdG9yeSBqdXN0IGJlZm9yZSBpdAorbG9va3MgZm9yIHRoZSBpbmNsdWRlIGZpbGUgaW4gdGhhdCBkaXJlY3RvcnkuICBUaGUgbmFtZSBzZWFyY2hlZCBmb3IgaXMKK3RoZSBuYW1lIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+I2luY2x1ZGU8L2NvZGU+IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZ2NoPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVuZGVkLiAgSWYKK3RoZSBwcmVjb21waWxlZCBoZWFkZXIgZmlsZSBjYW4ndCBiZSB1c2VkLCBpdCBpcyBpZ25vcmVkLgorCisgPHA+Rm9yIGluc3RhbmNlLCBpZiB5b3UgaGF2ZSA8Y29kZT4jaW5jbHVkZSAiYWxsLmgiPC9jb2RlPiwgYW5kIHlvdSBoYXZlCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YWxsLmguZ2NoPC9zcGFuPjwvc2FtcD4gaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hbGwuaDwvc3Bhbj48L3NhbXA+LCB0aGVuIHRoZQorcHJlY29tcGlsZWQgaGVhZGVyIGZpbGUgaXMgdXNlZCBpZiBwb3NzaWJsZSwgYW5kIHRoZSBvcmlnaW5hbAoraGVhZGVyIGlzIHVzZWQgb3RoZXJ3aXNlLgorCisgPHA+QWx0ZXJuYXRpdmVseSwgeW91IG1pZ2h0IGRlY2lkZSB0byBwdXQgdGhlIHByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGluIGEKK2RpcmVjdG9yeSBhbmQgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gdG8gZW5zdXJlIHRoYXQgZGlyZWN0b3J5IGlzIHNlYXJjaGVkCitiZWZvcmUgKG9yIGluc3RlYWQgb2YpIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgaGVhZGVyLiAKK1RoZW4sIGlmIHlvdSB3YW50IHRvIGNoZWNrIHRoYXQgdGhlIHByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGlzIGFsd2F5cwordXNlZCwgeW91IGNhbiBwdXQgYSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG9yaWdpbmFsIGhlYWRlciBpbiB0aGlzCitkaXJlY3RvcnkgY29udGFpbmluZyBhbiA8Y29kZT4jZXJyb3I8L2NvZGU+IGNvbW1hbmQuCisKKyA8cD5UaGlzIGFsc28gd29ya3Mgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW5jbHVkZTwvc3Bhbj48L3NhbXA+LiAgU28geWV0IGFub3RoZXIgd2F5IHRvIHVzZQorcHJlY29tcGlsZWQgaGVhZGVycywgZ29vZCBmb3IgcHJvamVjdHMgbm90IGRlc2lnbmVkIHdpdGggcHJlY29tcGlsZWQKK2hlYWRlciBmaWxlcyBpbiBtaW5kLCBpcyB0byBzaW1wbHkgdGFrZSBtb3N0IG9mIHRoZSBoZWFkZXIgZmlsZXMgdXNlZCBieQorYSBwcm9qZWN0LCBpbmNsdWRlIHRoZW0gZnJvbSBhbm90aGVyIGhlYWRlciBmaWxlLCBwcmVjb21waWxlIHRoYXQgaGVhZGVyCitmaWxlLCBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWluY2x1ZGU8L3NwYW4+PC9zYW1wPiB0aGUgcHJlY29tcGlsZWQgaGVhZGVyLiAgSWYgdGhlIGhlYWRlciBmaWxlcworaGF2ZSBndWFyZHMgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb24sIHRoZXkgYXJlIHNraXBwZWQgYmVjYXVzZQordGhleSd2ZSBhbHJlYWR5IGJlZW4gaW5jbHVkZWQgKGluIHRoZSBwcmVjb21waWxlZCBoZWFkZXIpLgorCisgPHA+SWYgeW91IG5lZWQgdG8gcHJlY29tcGlsZSB0aGUgc2FtZSBoZWFkZXIgZmlsZSBmb3IgZGlmZmVyZW50CitsYW5ndWFnZXMsIHRhcmdldHMsIG9yIGNvbXBpbGVyIG9wdGlvbnMsIHlvdSBjYW4gaW5zdGVhZCBtYWtlIGEKKzxlbT5kaXJlY3Rvcnk8L2VtPiBuYW1lZCBsaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hbGwuaC5nY2g8L3NwYW4+PC9zYW1wPiwgYW5kIHB1dCBlYWNoIHByZWNvbXBpbGVkCitoZWFkZXIgaW4gdGhlIGRpcmVjdG9yeSwgcGVyaGFwcyB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbzwvc3Bhbj48L3NhbXA+LiAgSXQgZG9lc24ndCBtYXR0ZXIKK3doYXQgeW91IGNhbGwgdGhlIGZpbGVzIGluIHRoZSBkaXJlY3Rvcnk7IGV2ZXJ5IHByZWNvbXBpbGVkIGhlYWRlciBpbgordGhlIGRpcmVjdG9yeSBpcyBjb25zaWRlcmVkLiAgVGhlIGZpcnN0IHByZWNvbXBpbGVkIGhlYWRlcgorZW5jb3VudGVyZWQgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGlzIHZhbGlkIGZvciB0aGlzIGNvbXBpbGF0aW9uIGlzCit1c2VkOyB0aGV5J3JlIHNlYXJjaGVkIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIuCisKKyA8cD5UaGVyZSBhcmUgbWFueSBvdGhlciBwb3NzaWJpbGl0aWVzLCBsaW1pdGVkIG9ubHkgYnkgeW91ciBpbWFnaW5hdGlvbiwKK2dvb2Qgc2Vuc2UsIGFuZCB0aGUgY29uc3RyYWludHMgb2YgeW91ciBidWlsZCBzeXN0ZW0uCisKKyA8cD5BIHByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiB0aGVzZSBjb25kaXRpb25zIGFwcGx5OgorCisgICAgIDx1bD4KKzxsaT5Pbmx5IG9uZSBwcmVjb21waWxlZCBoZWFkZXIgY2FuIGJlIHVzZWQgaW4gYSBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uLgorCisgICAgIDxsaT5BIHByZWNvbXBpbGVkIGhlYWRlciBjYW4ndCBiZSB1c2VkIG9uY2UgdGhlIGZpcnN0IEMgdG9rZW4gaXMgc2Vlbi4gIFlvdQorY2FuIGhhdmUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYmVmb3JlIGEgcHJlY29tcGlsZWQgaGVhZGVyOyB5b3UgY2Fubm90CitpbmNsdWRlIGEgcHJlY29tcGlsZWQgaGVhZGVyIGZyb20gaW5zaWRlIGFub3RoZXIgaGVhZGVyLgorCisgICAgIDxsaT5UaGUgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGUgbXVzdCBiZSBwcm9kdWNlZCBmb3IgdGhlIHNhbWUgbGFuZ3VhZ2UgYXMKK3RoZSBjdXJyZW50IGNvbXBpbGF0aW9uLiAgWW91IGNhbid0IHVzZSBhIEMgcHJlY29tcGlsZWQgaGVhZGVyIGZvciBhIEMrKworY29tcGlsYXRpb24uCisKKyAgICAgPGxpPlRoZSBwcmVjb21waWxlZCBoZWFkZXIgZmlsZSBtdXN0IGhhdmUgYmVlbiBwcm9kdWNlZCBieSB0aGUgc2FtZSBjb21waWxlcgorYmluYXJ5IGFzIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIGlzIHVzaW5nLgorCisgICAgIDxsaT5BbnkgbWFjcm9zIGRlZmluZWQgYmVmb3JlIHRoZSBwcmVjb21waWxlZCBoZWFkZXIgaXMgaW5jbHVkZWQgbXVzdAorZWl0aGVyIGJlIGRlZmluZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHdoZW4gdGhlIHByZWNvbXBpbGVkIGhlYWRlciB3YXMKK2dlbmVyYXRlZCwgb3IgbXVzdCBub3QgYWZmZWN0IHRoZSBwcmVjb21waWxlZCBoZWFkZXIsIHdoaWNoIHVzdWFsbHkKK21lYW5zIHRoYXQgdGhleSBkb24ndCBhcHBlYXIgaW4gdGhlIHByZWNvbXBpbGVkIGhlYWRlciBhdCBhbGwuCisKKyAgICAgPHA+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1EPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIG9uZSB3YXkgdG8gZGVmaW5lIGEgbWFjcm8gYmVmb3JlIGEKK3ByZWNvbXBpbGVkIGhlYWRlciBpcyBpbmNsdWRlZDsgdXNpbmcgYSA8Y29kZT4jZGVmaW5lPC9jb2RlPiBjYW4gYWxzbyBkbyBpdC4gCitUaGVyZSBhcmUgYWxzbyBzb21lIG9wdGlvbnMgdGhhdCBkZWZpbmUgbWFjcm9zIGltcGxpY2l0bHksIGxpa2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZGVwcmVjYXRlZDwvc3Bhbj48L3NhbXA+OyB0aGUgc2FtZSBydWxlIGFwcGxpZXMgdG8gbWFjcm9zCitkZWZpbmVkIHRoaXMgd2F5LgorCisgICAgIDxsaT5JZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgb3V0cHV0IHdoZW4gdXNpbmcgdGhlIHByZWNvbXBpbGVkCitoZWFkZXIsIHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1nPC9zcGFuPjwvc2FtcD4gb3Igc2ltaWxhciwgdGhlIHNhbWUga2luZCBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KK211c3QgaGF2ZSBiZWVuIG91dHB1dCB3aGVuIGJ1aWxkaW5nIHRoZSBwcmVjb21waWxlZCBoZWFkZXIuICBIb3dldmVyLAorYSBwcmVjb21waWxlZCBoZWFkZXIgYnVpbHQgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWc8L3NwYW4+PC9zYW1wPiBjYW4gYmUgdXNlZCBpbiBhIGNvbXBpbGF0aW9uCit3aGVuIG5vIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBiZWluZyBvdXRwdXQuCisKKyAgICAgPGxpPlRoZSBzYW1lIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBtdXN0IGdlbmVyYWxseSBiZSB1c2VkIHdoZW4gYnVpbGRpbmcKK2FuZCB1c2luZyB0aGUgcHJlY29tcGlsZWQgaGVhZGVyLiAgU2VlIDxhIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPiwKK2ZvciBhbnkgY2FzZXMgd2hlcmUgdGhpcyBydWxlIGlzIHJlbGF4ZWQuCisKKyAgICAgPGxpPkVhY2ggb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zIG11c3QgYmUgdGhlIHNhbWUgd2hlbiBidWlsZGluZyBhbmQgdXNpbmcKK3RoZSBwcmVjb21waWxlZCBoZWFkZXI6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWZleGNlcHRpb25zCis8L3ByZT4KKyAgICAgPGxpPlNvbWUgb3RoZXIgY29tbWFuZC1saW5lIG9wdGlvbnMgc3RhcnRpbmcgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZjwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXA8L3NwYW4+PC9zYW1wPiwgb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBtdXN0IGJlIGRlZmluZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHdoZW4KK3RoZSBwcmVjb21waWxlZCBoZWFkZXIgd2FzIGdlbmVyYXRlZC4gIEF0IHByZXNlbnQsIGl0J3Mgbm90IGNsZWFyCit3aGljaCBvcHRpb25zIGFyZSBzYWZlIHRvIGNoYW5nZSBhbmQgd2hpY2ggYXJlIG5vdDsgdGhlIHNhZmVzdCBjaG9pY2UKK2lzIHRvIHVzZSBleGFjdGx5IHRoZSBzYW1lIG9wdGlvbnMgd2hlbiBnZW5lcmF0aW5nIGFuZCB1c2luZyB0aGUKK3ByZWNvbXBpbGVkIGhlYWRlci4gIFRoZSBmb2xsb3dpbmcgYXJlIGtub3duIHRvIGJlIHNhZmU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLWZtZXNzYWdlLWxlbmd0aD0gIC1mcHJlcHJvY2Vzc2VkICAtZnNjaGVkLWludGVyYmxvY2sgCisgICAgICAgICAgLWZzY2hlZC1zcGVjICAtZnNjaGVkLXNwZWMtbG9hZCAgLWZzY2hlZC1zcGVjLWxvYWQtZGFuZ2Vyb3VzIAorICAgICAgICAgIC1mc2NoZWQtdmVyYm9zZT08dmFyPm51bWJlcjwvdmFyPiAgLWZzY2hlZHVsZS1pbnNucyAgLWZ2aXNpYmlsaXR5PSAKKyAgICAgICAgICAtcGVkYW50aWMtZXJyb3JzCis8L3ByZT4KKyAgICAgPC91bD4KKworIDxwPkZvciBhbGwgb2YgdGhlc2UgZXhjZXB0IHRoZSBsYXN0LCB0aGUgY29tcGlsZXIgYXV0b21hdGljYWxseQoraWdub3JlcyB0aGUgcHJlY29tcGlsZWQgaGVhZGVyIGlmIHRoZSBjb25kaXRpb25zIGFyZW4ndCBtZXQuICBJZiB5b3UKK2ZpbmQgYW4gb3B0aW9uIGNvbWJpbmF0aW9uIHRoYXQgZG9lc24ndCB3b3JrIGFuZCBkb2Vzbid0IGNhdXNlIHRoZQorcHJlY29tcGlsZWQgaGVhZGVyIHRvIGJlIGlnbm9yZWQsIHBsZWFzZSBjb25zaWRlciBmaWxpbmcgYSBidWcgcmVwb3J0LAorc2VlIDxhIGhyZWY9IkJ1Z3MuaHRtbCNCdWdzIj5CdWdzPC9hPi4KKworIDxwPklmIHlvdSBkbyB1c2UgZGlmZmVyaW5nIG9wdGlvbnMgd2hlbiBnZW5lcmF0aW5nIGFuZCB1c2luZyB0aGUKK3ByZWNvbXBpbGVkIGhlYWRlciwgdGhlIGFjdHVhbCBiZWhhdmlvciBpcyBhIG1peHR1cmUgb2YgdGhlCitiZWhhdmlvciBmb3IgdGhlIG9wdGlvbnMuICBGb3IgaW5zdGFuY2UsIGlmIHlvdSB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWc8L3NwYW4+PC9zYW1wPiB0bworZ2VuZXJhdGUgdGhlIHByZWNvbXBpbGVkIGhlYWRlciBidXQgbm90IHdoZW4gdXNpbmcgaXQsIHlvdSBtYXkgb3IgbWF5Citub3QgZ2V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3Igcm91dGluZXMgaW4gdGhlIHByZWNvbXBpbGVkIGhlYWRlci4KKworPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0NDIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBnY2MudGV4aS4gLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QcmVwcm9jZXNzaW5nLWRpcmVjdGl2ZXMtaW1wbGVtZW50YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUHJlcHJvY2Vzc2luZy1kaXJlY3RpdmVzLWltcGxlbWVudGF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhZjNkNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUHJlcHJvY2Vzc2luZy1kaXJlY3RpdmVzLWltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcyBpbXBsZW1lbnRhdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkMgSW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdGF0ZW1lbnRzLWltcGxlbWVudGF0aW9uLmh0bWwjU3RhdGVtZW50cy1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IlN0YXRlbWVudHMgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMaWJyYXJ5LWZ1bmN0aW9ucy1pbXBsZW1lbnRhdGlvbi5odG1sI0xpYnJhcnktZnVuY3Rpb25zLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iTGlicmFyeSBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUHJlcHJvY2Vzc2luZy1kaXJlY3RpdmVzLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxpYnJhcnktZnVuY3Rpb25zLWltcGxlbWVudGF0aW9uLmh0bWwjTGlicmFyeS1mdW5jdGlvbnMtaW1wbGVtZW50YXRpb24iPkxpYnJhcnkgZnVuY3Rpb25zIGltcGxlbWVudGF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3RhdGVtZW50cy1pbXBsZW1lbnRhdGlvbi5odG1sI1N0YXRlbWVudHMtaW1wbGVtZW50YXRpb24iPlN0YXRlbWVudHMgaW1wbGVtZW50YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiI+QyBJbXBsZW1lbnRhdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMTMgUHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzPC9oMz4KKworPHA+U2VlIDxhIGhyZWY9Ii4uL2NwcC9JbXBsZW1lbnRhdGlvbl8wMDJkZGVmaW5lZC1iZWhhdmlvci5odG1sI0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yIj5JbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9hPiwgZm9yIGRldGFpbHMgb2YgdGhlc2UgYXNwZWN0cyBvZgoraW1wbGVtZW50YXRpb24tZGVmaW5lZCBiZWhhdmlvci4KKworICAgICA8dWw+Cis8bGk+PGNpdGU+SG93IHNlcXVlbmNlcyBpbiBib3RoIGZvcm1zIG9mIGhlYWRlciBuYW1lcyBhcmUgbWFwcGVkIHRvIGhlYWRlcnMKK29yIGV4dGVybmFsIHNvdXJjZSBmaWxlIG5hbWVzIChDOTAgNi4xLjcsIEM5OSA2LjQuNykuPC9jaXRlPgorCisgICAgIDxsaT48Y2l0ZT5XaGV0aGVyIHRoZSB2YWx1ZSBvZiBhIGNoYXJhY3RlciBjb25zdGFudCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24KK3RoYXQgY29udHJvbHMgY29uZGl0aW9uYWwgaW5jbHVzaW9uIG1hdGNoZXMgdGhlIHZhbHVlIG9mIHRoZSBzYW1lIGNoYXJhY3RlcgorY29uc3RhbnQgaW4gdGhlIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0IChDOTAgNi44LjEsIEM5OSA2LjEwLjEpLjwvY2l0ZT4KKworICAgICA8bGk+PGNpdGU+V2hldGhlciB0aGUgdmFsdWUgb2YgYSBzaW5nbGUtY2hhcmFjdGVyIGNoYXJhY3RlciBjb25zdGFudCBpbiBhCitjb25zdGFudCBleHByZXNzaW9uIHRoYXQgY29udHJvbHMgY29uZGl0aW9uYWwgaW5jbHVzaW9uIG1heSBoYXZlIGEKK25lZ2F0aXZlIHZhbHVlIChDOTAgNi44LjEsIEM5OSA2LjEwLjEpLjwvY2l0ZT4KKworICAgICA8bGk+PGNpdGU+VGhlIHBsYWNlcyB0aGF0IGFyZSBzZWFyY2hlZCBmb3IgYW4gaW5jbHVkZWQgJmxzcXVvOzwvY2l0ZT48c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0OyZndDs8L3NwYW4+PC9zYW1wPjxjaXRlPiZyc3F1bzsgZGVsaW1pdGVkCitoZWFkZXIsIGFuZCBob3cgdGhlIHBsYWNlcyBhcmUgc3BlY2lmaWVkIG9yIHRoZSBoZWFkZXIgaXMKK2lkZW50aWZpZWQgKEM5MCA2LjguMiwgQzk5IDYuMTAuMikuPC9jaXRlPgorCisgICAgIDxsaT48Y2l0ZT5Ib3cgdGhlIG5hbWVkIHNvdXJjZSBmaWxlIGlzIHNlYXJjaGVkIGZvciBpbiBhbiBpbmNsdWRlZCAmbHNxdW87PC9jaXRlPjxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4iIjwvc3Bhbj48L3NhbXA+PGNpdGU+JnJzcXVvOworZGVsaW1pdGVkIGhlYWRlciAoQzkwIDYuOC4yLCBDOTkgNi4xMC4yKS48L2NpdGU+CisKKyAgICAgPGxpPjxjaXRlPlRoZSBtZXRob2QgYnkgd2hpY2ggcHJlcHJvY2Vzc2luZyB0b2tlbnMgKHBvc3NpYmx5IHJlc3VsdGluZyBmcm9tCittYWNybyBleHBhbnNpb24pIGluIGEgPC9jaXRlPjxjb2RlPiNpbmNsdWRlPC9jb2RlPjxjaXRlPiBkaXJlY3RpdmUgYXJlIGNvbWJpbmVkIGludG8gYSBoZWFkZXIKK25hbWUgKEM5MCA2LjguMiwgQzk5IDYuMTAuMikuPC9jaXRlPgorCisgICAgIDxsaT48Y2l0ZT5UaGUgbmVzdGluZyBsaW1pdCBmb3IgPC9jaXRlPjxjb2RlPiNpbmNsdWRlPC9jb2RlPjxjaXRlPiBwcm9jZXNzaW5nIChDOTAgNi44LjIsIEM5OQorNi4xMC4yKS48L2NpdGU+CisKKyAgICAgPGxpPjxjaXRlPldoZXRoZXIgdGhlICZsc3F1bzs8L2NpdGU+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiM8L3NwYW4+PC9zYW1wPjxjaXRlPiZyc3F1bzsgb3BlcmF0b3IgaW5zZXJ0cyBhICZsc3F1bzs8L2NpdGU+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlw8L3NwYW4+PC9zYW1wPjxjaXRlPiZyc3F1bzsgY2hhcmFjdGVyIGJlZm9yZQordGhlICZsc3F1bzs8L2NpdGU+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlw8L3NwYW4+PC9zYW1wPjxjaXRlPiZyc3F1bzsgY2hhcmFjdGVyIHRoYXQgYmVnaW5zIGEgdW5pdmVyc2FsIGNoYXJhY3RlciBuYW1lIGluIGEKK2NoYXJhY3RlciBjb25zdGFudCBvciBzdHJpbmcgbGl0ZXJhbCAoQzk5IDYuMTAuMy4yKS48L2NpdGU+CisKKyAgICAgPGxpPjxjaXRlPlRoZSBiZWhhdmlvciBvbiBlYWNoIHJlY29nbml6ZWQgbm9uLTwvY2l0ZT48Y29kZT5TVERDICNwcmFnbWE8L2NvZGU+PGNpdGU+CitkaXJlY3RpdmUgKEM5MCA2LjguNiwgQzk5IDYuMTAuNikuPC9jaXRlPgorCisgICAgIDxwPlNlZSA8YSBocmVmPSIuLi9jcHAvUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXM8L2E+LCBmb3IgZGV0YWlscyBvZgorcHJhZ21hcyBhY2NlcHRlZCBieSBHQ0Mgb24gYWxsIHRhcmdldHMuICBTZWUgPGEgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXMgQWNjZXB0ZWQgYnkgR0NDPC9hPiwgZm9yIGRldGFpbHMgb2YgdGFyZ2V0LXNwZWNpZmljIHByYWdtYXMuCisKKyAgICAgPGxpPjxjaXRlPlRoZSBkZWZpbml0aW9ucyBmb3IgPC9jaXRlPjxjb2RlPl9fREFURV9fPC9jb2RlPjxjaXRlPiBhbmQgPC9jaXRlPjxjb2RlPl9fVElNRV9fPC9jb2RlPjxjaXRlPiB3aGVuCityZXNwZWN0aXZlbHksIHRoZSBkYXRlIGFuZCB0aW1lIG9mIHRyYW5zbGF0aW9uIGFyZSBub3QgYXZhaWxhYmxlIChDOTAKKzYuOC44LCBDOTkgNi4xMC44KS48L2NpdGU+CisKKyA8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYTc4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ByZXByb2Nlc3Nvci1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw2ODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByZXByb2Nlc3NvciBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyIgdGl0bGU9Ikludm9raW5nIEdDQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIiB0aXRsZT0iT3B0aW1pemUgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFzc2VtYmxlci1PcHRpb25zLmh0bWwjQXNzZW1ibGVyLU9wdGlvbnMiIHRpdGxlPSJBc3NlbWJsZXIgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQcmVwcm9jZXNzb3ItT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBc3NlbWJsZXItT3B0aW9ucy5odG1sI0Fzc2VtYmxlci1PcHRpb25zIj5Bc3NlbWJsZXIgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj5PcHRpbWl6ZSBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjExIE9wdGlvbnMgQ29udHJvbGxpbmcgdGhlIFByZXByb2Nlc3NvcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXByZXByb2Nlc3Nvci1vcHRpb25zLTkzNiI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1wcmVwcm9jZXNzb3ItOTM3Ij48L2E+CitUaGVzZSBvcHRpb25zIGNvbnRyb2wgdGhlIEMgcHJlcHJvY2Vzc29yLCB3aGljaCBpcyBydW4gb24gZWFjaCBDIHNvdXJjZQorZmlsZSBiZWZvcmUgYWN0dWFsIGNvbXBpbGF0aW9uLgorCisgPHA+SWYgeW91IHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiBvcHRpb24sIG5vdGhpbmcgaXMgZG9uZSBleGNlcHQgcHJlcHJvY2Vzc2luZy4gCitTb21lIG9mIHRoZXNlIG9wdGlvbnMgbWFrZSBzZW5zZSBvbmx5IHRvZ2V0aGVyIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiBiZWNhdXNlCit0aGV5IGNhdXNlIHRoZSBwcmVwcm9jZXNzb3Igb3V0cHV0IHRvIGJlIHVuc3VpdGFibGUgZm9yIGFjdHVhbAorY29tcGlsYXRpb24uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1XcCw8L2NvZGU+PHZhcj5vcHRpb248L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtV3AtOTM4Ij48L2E+WW91IGNhbiB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwLDwvc3Bhbj48dmFyPm9wdGlvbjwvdmFyPjwvc2FtcD4gdG8gYnlwYXNzIHRoZSBjb21waWxlciBkcml2ZXIKK2FuZCBwYXNzIDx2YXI+b3B0aW9uPC92YXI+IGRpcmVjdGx5IHRocm91Z2ggdG8gdGhlIHByZXByb2Nlc3Nvci4gIElmCis8dmFyPm9wdGlvbjwvdmFyPiBjb250YWlucyBjb21tYXMsIGl0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgb3B0aW9ucyBhdCB0aGUKK2NvbW1hcy4gIEhvd2V2ZXIsIG1hbnkgb3B0aW9ucyBhcmUgbW9kaWZpZWQsIHRyYW5zbGF0ZWQgb3IgaW50ZXJwcmV0ZWQKK2J5IHRoZSBjb21waWxlciBkcml2ZXIgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgcHJlcHJvY2Vzc29yLCBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XcDwvc3Bhbj48L3NhbXA+IGZvcmNpYmx5IGJ5cGFzc2VzIHRoaXMgcGhhc2UuICBUaGUgcHJlcHJvY2Vzc29yJ3MgZGlyZWN0CitpbnRlcmZhY2UgaXMgdW5kb2N1bWVudGVkIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKK3lvdSBzaG91bGQgYXZvaWQgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwPC9zcGFuPjwvc2FtcD4gYW5kIGxldCB0aGUgZHJpdmVyIGhhbmRsZSB0aGUKK29wdGlvbnMgaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1YcHJlcHJvY2Vzc29yIDwvY29kZT48dmFyPm9wdGlvbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1YcHJlcHJvY2Vzc29yLTkzOSI+PC9hPlBhc3MgPHZhcj5vcHRpb248L3Zhcj4gYXMgYW4gb3B0aW9uIHRvIHRoZSBwcmVwcm9jZXNzb3IuICBZb3UgY2FuIHVzZSB0aGlzIHRvCitzdXBwbHkgc3lzdGVtLXNwZWNpZmljIHByZXByb2Nlc3NvciBvcHRpb25zIHRoYXQgR0NDIGRvZXMgbm90CityZWNvZ25pemUuCisKKyAgICAgPHA+SWYgeW91IHdhbnQgdG8gcGFzcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwgeW91IG11c3QgdXNlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tWHByZXByb2Nlc3Nvcjwvc3Bhbj48L3NhbXA+IHR3aWNlLCBvbmNlIGZvciB0aGUgb3B0aW9uIGFuZCBvbmNlIGZvciB0aGUgYXJndW1lbnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm8taW50ZWdyYXRlZC1jcHA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW5vXzAwMmRpbnRlZ3JhdGVkXzAwMmRjcHAtOTQwIj48L2E+UGVyZm9ybSBwcmVwcm9jZXNzaW5nIGFzIGEgc2VwYXJhdGUgcGFzcyBiZWZvcmUgY29tcGlsYXRpb24uIAorQnkgZGVmYXVsdCwgR0NDIHBlcmZvcm1zIHByZXByb2Nlc3NpbmcgYXMgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mCitpbnB1dCB0b2tlbml6YXRpb24gYW5kIHBhcnNpbmcuIAorSWYgdGhpcyBvcHRpb24gaXMgcHJvdmlkZWQsIHRoZSBhcHByb3ByaWF0ZSBsYW5ndWFnZSBmcm9udCBlbmQKKyg8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y2MxPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jYzFwbHVzPC9zcGFuPjwvc2FtcD4sIG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5jYzFvYmo8L3NwYW4+PC9zYW1wPiBmb3IgQywgQysrLAorYW5kIE9iamVjdGl2ZS1DLCByZXNwZWN0aXZlbHkpIGlzIGluc3RlYWQgaW52b2tlZCB0d2ljZSwKK29uY2UgZm9yIHByZXByb2Nlc3Npbmcgb25seSBhbmQgb25jZSBmb3IgYWN0dWFsIGNvbXBpbGF0aW9uCitvZiB0aGUgcHJlcHJvY2Vzc2VkIGlucHV0LiAKK1RoaXMgb3B0aW9uIG1heSBiZSB1c2VmdWwgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUI8L3NwYW4+PC9zYW1wPiBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXdyYXBwZXI8L3NwYW4+PC9zYW1wPiBvcHRpb25zIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIHByZXByb2Nlc3NvciBvcgorcGVyZm9ybSBhZGRpdGlvbmFsIHByb2Nlc3Npbmcgb2YgdGhlIHByb2dyYW0gc291cmNlIGJldHdlZW4KK25vcm1hbCBwcmVwcm9jZXNzaW5nIGFuZCBjb21waWxhdGlvbi4gCis8L2RsPgorCis8IS0tIENvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBDUFAgYW5kIEdDQyBtYW51YWxzLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKzwhLS0gIC0tPgorPCEtLSBPcHRpb25zIGFmZmVjdGluZyB0aGUgcHJlcHJvY2Vzc29yIC0tPgorPCEtLSAgLS0+Cis8IS0tIElmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBmbGFnIGBgY3BwbWFudWFsJycgc2V0LCBpdCBpcyAtLT4KKzwhLS0gZm9ybWF0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIENQUCBtYW51YWw7IG90aGVyd2lzZSB0aGUgbWFpbiBHQ0MgbWFudWFsLiAtLT4KKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1EIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtRC05NDEiPjwvYT5QcmVkZWZpbmUgPHZhcj5uYW1lPC92YXI+IGFzIGEgbWFjcm8sIHdpdGggZGVmaW5pdGlvbiA8Y29kZT4xPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1EIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+ZGVmaW5pdGlvbjwvdmFyPjxkZD5UaGUgY29udGVudHMgb2YgPHZhcj5kZWZpbml0aW9uPC92YXI+IGFyZSB0b2tlbml6ZWQgYW5kIHByb2Nlc3NlZCBhcyBpZgordGhleSBhcHBlYXJlZCBkdXJpbmcgdHJhbnNsYXRpb24gcGhhc2UgdGhyZWUgaW4gYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNkZWZpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2RpcmVjdGl2ZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBkZWZpbml0aW9uIHdpbGwgYmUgdHJ1bmNhdGVkIGJ5CitlbWJlZGRlZCBuZXdsaW5lIGNoYXJhY3RlcnMuCisKKyAgICAgPHA+SWYgeW91IGFyZSBpbnZva2luZyB0aGUgcHJlcHJvY2Vzc29yIGZyb20gYSBzaGVsbCBvciBzaGVsbC1saWtlCitwcm9ncmFtIHlvdSBtYXkgbmVlZCB0byB1c2UgdGhlIHNoZWxsJ3MgcXVvdGluZyBzeW50YXggdG8gcHJvdGVjdAorY2hhcmFjdGVycyBzdWNoIGFzIHNwYWNlcyB0aGF0IGhhdmUgYSBtZWFuaW5nIGluIHRoZSBzaGVsbCBzeW50YXguCisKKyAgICAgPHA+SWYgeW91IHdpc2ggdG8gZGVmaW5lIGEgZnVuY3Rpb24tbGlrZSBtYWNybyBvbiB0aGUgY29tbWFuZCBsaW5lLCB3cml0ZQoraXRzIGFyZ3VtZW50IGxpc3Qgd2l0aCBzdXJyb3VuZGluZyBwYXJlbnRoZXNlcyBiZWZvcmUgdGhlIGVxdWFscyBzaWduCisoaWYgYW55KS4gIFBhcmVudGhlc2VzIGFyZSBtZWFuaW5nZnVsIHRvIG1vc3Qgc2hlbGxzLCBzbyB5b3Ugd2lsbCBuZWVkCit0byBxdW90ZSB0aGUgb3B0aW9uLiAgV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+c2g8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmNzaDwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUQnPC9zcGFuPjx2YXI+bmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJvcHRpb24iPig8L3NwYW4+PHZhcj5hcmdzPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPjwvdmFyPjxzcGFuIGNsYXNzPSJvcHRpb24iPik9PC9zcGFuPjx2YXI+ZGVmaW5pdGlvbjwvdmFyPjxzcGFuIGNsYXNzPSJvcHRpb24iPic8L3NwYW4+PC9zYW1wPiB3b3Jrcy4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgdGhleQorYXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuICBBbGwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWltYWNyb3MgPC9zcGFuPjx2YXI+ZmlsZTwvdmFyPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW5jbHVkZSA8L3NwYW4+PHZhcj5maWxlPC92YXI+PC9zYW1wPiBvcHRpb25zIGFyZSBwcm9jZXNzZWQgYWZ0ZXIgYWxsCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tVSA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LVUtOTQyIj48L2E+Q2FuY2VsIGFueSBwcmV2aW91cyBkZWZpbml0aW9uIG9mIDx2YXI+bmFtZTwvdmFyPiwgZWl0aGVyIGJ1aWx0IGluIG9yCitwcm92aWRlZCB3aXRoIGEgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUQ8L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tdW5kZWY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXVuZGVmLTk0MyI+PC9hPkRvIG5vdCBwcmVkZWZpbmUgYW55IHN5c3RlbS1zcGVjaWZpYyBvciBHQ0Mtc3BlY2lmaWMgbWFjcm9zLiAgVGhlCitzdGFuZGFyZCBwcmVkZWZpbmVkIG1hY3JvcyByZW1haW4gZGVmaW5lZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1JIDwvY29kZT48dmFyPmRpcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1JLTk0NCI+PC9hPkFkZCB0aGUgZGlyZWN0b3J5IDx2YXI+ZGlyPC92YXI+IHRvIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkCitmb3IgaGVhZGVyIGZpbGVzLiAKK0RpcmVjdG9yaWVzIG5hbWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgc3RhbmRhcmQKK3N5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzLiAgSWYgdGhlIGRpcmVjdG9yeSA8dmFyPmRpcjwvdmFyPiBpcyBhIHN0YW5kYXJkCitzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnksIHRoZSBvcHRpb24gaXMgaWdub3JlZCB0byBlbnN1cmUgdGhhdCB0aGUKK2RlZmF1bHQgc2VhcmNoIG9yZGVyIGZvciBzeXN0ZW0gZGlyZWN0b3JpZXMgYW5kIHRoZSBzcGVjaWFsIHRyZWF0bWVudAorb2Ygc3lzdGVtIGhlYWRlcnMgYXJlIG5vdCBkZWZlYXRlZAorLiAKK0lmIDx2YXI+ZGlyPC92YXI+IGJlZ2lucyB3aXRoIDxjb2RlPj08L2NvZGU+LCB0aGVuIHRoZSA8Y29kZT49PC9jb2RlPiB3aWxsIGJlIHJlcGxhY2VkCitieSB0aGUgc3lzcm9vdCBwcmVmaXg7IHNlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlzeXNyb290PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbyA8L2NvZGU+PHZhcj5maWxlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW8tOTQ1Ij48L2E+V3JpdGUgb3V0cHV0IHRvIDx2YXI+ZmlsZTwvdmFyPi4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgc3BlY2lmeWluZyA8dmFyPmZpbGU8L3Zhcj4KK2FzIHRoZSBzZWNvbmQgbm9uLW9wdGlvbiBhcmd1bWVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y3BwPC9zcGFuPjwvc2FtcD4uICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gaGFzIGEKK2RpZmZlcmVudCBpbnRlcnByZXRhdGlvbiBvZiBhIHNlY29uZCBub24tb3B0aW9uIGFyZ3VtZW50LCBzbyB5b3UgbXVzdAordXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vPC9zcGFuPjwvc2FtcD4gdG8gc3BlY2lmeSB0aGUgb3V0cHV0IGZpbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2FsbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2FsbC05NDYiPjwvYT5UdXJucyBvbiBhbGwgb3B0aW9uYWwgd2FybmluZ3Mgd2hpY2ggYXJlIGRlc2lyYWJsZSBmb3Igbm9ybWFsIGNvZGUuIAorQXQgcHJlc2VudCB0aGlzIGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XY29tbWVudDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3RyaWdyYXBoczwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdtdWx0aWNoYXI8L3NwYW4+PC9zYW1wPiBhbmQgYSB3YXJuaW5nIGFib3V0IGludGVnZXIgcHJvbW90aW9uIGNhdXNpbmcgYQorY2hhbmdlIG9mIHNpZ24gaW4gPGNvZGU+I2lmPC9jb2RlPiBleHByZXNzaW9ucy4gIE5vdGUgdGhhdCBtYW55IG9mIHRoZQorcHJlcHJvY2Vzc29yJ3Mgd2FybmluZ3MgYXJlIG9uIGJ5IGRlZmF1bHQgYW5kIGhhdmUgbm8gb3B0aW9ucyB0bworY29udHJvbCB0aGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdjb21tZW50PC9jb2RlPjxkdD48Y29kZT4tV2NvbW1lbnRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XY29tbWVudC05NDciPjwvYT48YSBuYW1lPSJpbmRleC1XY29tbWVudHMtOTQ4Ij48L2E+V2FybiB3aGVuZXZlciBhIGNvbW1lbnQtc3RhcnQgc2VxdWVuY2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vKjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcHBlYXJzIGluIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vKjwvc3Bhbj48L3NhbXA+JnJzcXVvOworY29tbWVudCwgb3Igd2hlbmV2ZXIgYSBiYWNrc2xhc2gtbmV3bGluZSBhcHBlYXJzIGluIGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vLzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tZW50LiAKKyhCb3RoIGZvcm1zIGhhdmUgdGhlIHNhbWUgZWZmZWN0LikKKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdHJpZ3JhcGhzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XdHJpZ3JhcGhzLTk0OSI+PC9hPjxhIG5hbWU9Ild0cmlncmFwaHMiPjwvYT5Nb3N0IHRyaWdyYXBocyBpbiBjb21tZW50cyBjYW5ub3QgYWZmZWN0IHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtLiAKK0hvd2V2ZXIsIGEgdHJpZ3JhcGggdGhhdCB3b3VsZCBmb3JtIGFuIGVzY2FwZWQgbmV3bGluZSAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4/Py88L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXQKK3RoZSBlbmQgb2YgYSBsaW5lKSBjYW4sIGJ5IGNoYW5naW5nIHdoZXJlIHRoZSBjb21tZW50IGJlZ2lucyBvciBlbmRzLiAKK1RoZXJlZm9yZSwgb25seSB0cmlncmFwaHMgdGhhdCB3b3VsZCBmb3JtIGVzY2FwZWQgbmV3bGluZXMgcHJvZHVjZQord2FybmluZ3MgaW5zaWRlIGEgY29tbWVudC4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyBpbXBsaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uICBJZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+IGlzIG5vdAorZ2l2ZW4sIHRoaXMgb3B0aW9uIGlzIHN0aWxsIGVuYWJsZWQgdW5sZXNzIHRyaWdyYXBocyBhcmUgZW5hYmxlZC4gIFRvCitnZXQgdHJpZ3JhcGggY29udmVyc2lvbiB3aXRob3V0IHdhcm5pbmdzLCBidXQgZ2V0IHRoZSBvdGhlcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPiB3YXJuaW5ncywgdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXRyaWdyYXBocyAtV2FsbCAtV25vLXRyaWdyYXBoczwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdHJhZGl0aW9uYWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd0cmFkaXRpb25hbC05NTAiPjwvYT5XYXJuIGFib3V0IGNlcnRhaW4gY29uc3RydWN0cyB0aGF0IGJlaGF2ZSBkaWZmZXJlbnRseSBpbiB0cmFkaXRpb25hbCBhbmQKK0lTTyBDLiAgQWxzbyB3YXJuIGFib3V0IElTTyBDIGNvbnN0cnVjdHMgdGhhdCBoYXZlIG5vIHRyYWRpdGlvbmFsIEMKK2VxdWl2YWxlbnQsIGFuZCBwcm9ibGVtYXRpYyBjb25zdHJ1Y3RzIHdoaWNoIHNob3VsZCBiZSBhdm9pZGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd1bmRlZjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3VuZGVmLTk1MSI+PC9hPldhcm4gd2hlbmV2ZXIgYW4gaWRlbnRpZmllciB3aGljaCBpcyBub3QgYSBtYWNybyBpcyBlbmNvdW50ZXJlZCBpbiBhbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaWY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlLCBvdXRzaWRlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGVmaW5lZDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFN1Y2ggaWRlbnRpZmllcnMgYXJlCityZXBsYWNlZCB3aXRoIHplcm8uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VudXNlZC1tYWNyb3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd1bnVzZWRfMDAyZG1hY3Jvcy05NTIiPjwvYT5XYXJuIGFib3V0IG1hY3JvcyBkZWZpbmVkIGluIHRoZSBtYWluIGZpbGUgdGhhdCBhcmUgdW51c2VkLiAgQSBtYWNybworaXMgPGRmbj51c2VkPC9kZm4+IGlmIGl0IGlzIGV4cGFuZGVkIG9yIHRlc3RlZCBmb3IgZXhpc3RlbmNlIGF0IGxlYXN0IG9uY2UuIAorVGhlIHByZXByb2Nlc3NvciB3aWxsIGFsc28gd2FybiBpZiB0aGUgbWFjcm8gaGFzIG5vdCBiZWVuIHVzZWQgYXQgdGhlCit0aW1lIGl0IGlzIHJlZGVmaW5lZCBvciB1bmRlZmluZWQuCisKKyAgICAgPHA+QnVpbHQtaW4gbWFjcm9zLCBtYWNyb3MgZGVmaW5lZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgbWFjcm9zCitkZWZpbmVkIGluIGluY2x1ZGUgZmlsZXMgYXJlIG5vdCB3YXJuZWQgYWJvdXQuCisKKyAgICAgPHA+PGVtPk5vdGU6PC9lbT4gSWYgYSBtYWNybyBpcyBhY3R1YWxseSB1c2VkLCBidXQgb25seSB1c2VkIGluIHNraXBwZWQKK2NvbmRpdGlvbmFsIGJsb2NrcywgdGhlbiBDUFAgd2lsbCByZXBvcnQgaXQgYXMgdW51c2VkLiAgVG8gYXZvaWQgdGhlCit3YXJuaW5nIGluIHN1Y2ggYSBjYXNlLCB5b3UgbWlnaHQgaW1wcm92ZSB0aGUgc2NvcGUgb2YgdGhlIG1hY3JvJ3MKK2RlZmluaXRpb24gYnksIGZvciBleGFtcGxlLCBtb3ZpbmcgaXQgaW50byB0aGUgZmlyc3Qgc2tpcHBlZCBibG9jay4gCitBbHRlcm5hdGl2ZWx5LCB5b3UgY291bGQgcHJvdmlkZSBhIGR1bW15IHVzZSB3aXRoIHNvbWV0aGluZyBsaWtlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICNpZiBkZWZpbmVkIHRoZV9tYWNyb19jYXVzaW5nX3RoZV93YXJuaW5nCisgICAgICAgICAgI2VuZGlmCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4tV2VuZGlmLWxhYmVsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2VuZGlmXzAwMmRsYWJlbHMtOTUzIj48L2E+V2FybiB3aGVuZXZlciBhbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbHNlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yIGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2VuZGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBmb2xsb3dlZCBieSB0ZXh0LiAKK1RoaXMgdXN1YWxseSBoYXBwZW5zIGluIGNvZGUgb2YgdGhlIGZvcm0KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjaWYgRk9PCisgICAgICAgICAgLi4uCisgICAgICAgICAgI2Vsc2UgRk9PCisgICAgICAgICAgLi4uCisgICAgICAgICAgI2VuZGlmIEZPTworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIHNlY29uZCBhbmQgdGhpcmQgPGNvZGU+Rk9PPC9jb2RlPiBzaG91bGQgYmUgaW4gY29tbWVudHMsIGJ1dCBvZnRlbiBhcmUgbm90CitpbiBvbGRlciBwcm9ncmFtcy4gIFRoaXMgd2FybmluZyBpcyBvbiBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdlcnJvcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2Vycm9yLTk1NCI+PC9hPk1ha2UgYWxsIHdhcm5pbmdzIGludG8gaGFyZCBlcnJvcnMuICBTb3VyY2UgY29kZSB3aGljaCB0cmlnZ2VycyB3YXJuaW5ncword2lsbCBiZSByZWplY3RlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xc3lzdGVtLWhlYWRlcnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdzeXN0ZW1fMDAyZGhlYWRlcnMtOTU1Ij48L2E+SXNzdWUgd2FybmluZ3MgZm9yIGNvZGUgaW4gc3lzdGVtIGhlYWRlcnMuICBUaGVzZSBhcmUgbm9ybWFsbHkgdW5oZWxwZnVsCitpbiBmaW5kaW5nIGJ1Z3MgaW4geW91ciBvd24gY29kZSwgdGhlcmVmb3JlIHN1cHByZXNzZWQuICBJZiB5b3UgYXJlCityZXNwb25zaWJsZSBmb3IgdGhlIHN5c3RlbSBsaWJyYXJ5LCB5b3UgbWF5IHdhbnQgdG8gc2VlIHRoZW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tdzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdy05NTYiPjwvYT5TdXBwcmVzcyBhbGwgd2FybmluZ3MsIGluY2x1ZGluZyB0aG9zZSB3aGljaCBHTlUgQ1BQIGlzc3VlcyBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXBlZGFudGljPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wZWRhbnRpYy05NTciPjwvYT5Jc3N1ZSBhbGwgdGhlIG1hbmRhdG9yeSBkaWFnbm9zdGljcyBsaXN0ZWQgaW4gdGhlIEMgc3RhbmRhcmQuICBTb21lIG9mCit0aGVtIGFyZSBsZWZ0IG91dCBieSBkZWZhdWx0LCBzaW5jZSB0aGV5IHRyaWdnZXIgZnJlcXVlbnRseSBvbiBoYXJtbGVzcworY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1wZWRhbnRpYy1lcnJvcnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXBlZGFudGljXzAwMmRlcnJvcnMtOTU4Ij48L2E+SXNzdWUgYWxsIHRoZSBtYW5kYXRvcnkgZGlhZ25vc3RpY3MsIGFuZCBtYWtlIGFsbCBtYW5kYXRvcnkgZGlhZ25vc3RpY3MKK2ludG8gZXJyb3JzLiAgVGhpcyBpbmNsdWRlcyBtYW5kYXRvcnkgZGlhZ25vc3RpY3MgdGhhdCBHQ0MgaXNzdWVzCit3aXRob3V0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXBlZGFudGljPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJ1dCB0cmVhdHMgYXMgd2FybmluZ3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tTTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTS05NTkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ym1ha2VfMDA3ZC05NjAiPjwvYT48YSBuYW1lPSJpbmRleC1kZXBlbmRlbmNpZXNfMDAyYy1fMDA0MGNvbW1hbmRfMDA3Ym1ha2VfMDA3ZC05NjEiPjwvYT5JbnN0ZWFkIG9mIG91dHB1dHRpbmcgdGhlIHJlc3VsdCBvZiBwcmVwcm9jZXNzaW5nLCBvdXRwdXQgYSBydWxlCitzdWl0YWJsZSBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPm1ha2U8L3NwYW4+PC9zYW1wPiBkZXNjcmliaW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIG1haW4KK3NvdXJjZSBmaWxlLiAgVGhlIHByZXByb2Nlc3NvciBvdXRwdXRzIG9uZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bWFrZTwvc3Bhbj48L3NhbXA+IHJ1bGUgY29udGFpbmluZwordGhlIG9iamVjdCBmaWxlIG5hbWUgZm9yIHRoYXQgc291cmNlIGZpbGUsIGEgY29sb24sIGFuZCB0aGUgbmFtZXMgb2YgYWxsCit0aGUgaW5jbHVkZWQgZmlsZXMsIGluY2x1ZGluZyB0aG9zZSBjb21pbmcgZnJvbSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW5jbHVkZTwvc3Bhbj48L3NhbXA+IG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW1hY3Jvczwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb25zLgorCisgICAgIDxwPlVubGVzcyBzcGVjaWZpZWQgZXhwbGljaXRseSAod2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTVQ8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTVE8L3NwYW4+PC9zYW1wPiksIHRoZQorb2JqZWN0IGZpbGUgbmFtZSBjb25zaXN0cyBvZiB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgd2l0aCBhbnkKK3N1ZmZpeCByZXBsYWNlZCB3aXRoIG9iamVjdCBmaWxlIHN1ZmZpeCBhbmQgd2l0aCBhbnkgbGVhZGluZyBkaXJlY3RvcnkKK3BhcnRzIHJlbW92ZWQuICBJZiB0aGVyZSBhcmUgbWFueSBpbmNsdWRlZCBmaWxlcyB0aGVuIHRoZSBydWxlIGlzCitzcGxpdCBpbnRvIHNldmVyYWwgbGluZXMgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5cPC9zcGFuPjwvc2FtcD4mcnNxdW87LW5ld2xpbmUuICBUaGUgcnVsZSBoYXMgbm8KK2NvbW1hbmRzLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGRvZXMgbm90IHN1cHByZXNzIHRoZSBwcmVwcm9jZXNzb3IncyBkZWJ1ZyBvdXRwdXQsIHN1Y2ggYXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kTTwvc3Bhbj48L3NhbXA+LiAgVG8gYXZvaWQgbWl4aW5nIHN1Y2ggZGVidWcgb3V0cHV0IHdpdGggdGhlIGRlcGVuZGVuY3kKK3J1bGVzIHlvdSBzaG91bGQgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBkZXBlbmRlbmN5IG91dHB1dCBmaWxlIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRjwvc3Bhbj48L3NhbXA+LCBvciB1c2UgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbGlrZQorPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+REVQRU5ERU5DSUVTX09VVFBVVDwvc3Bhbj48L3NhbXA+IChzZWUgPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+KS4gIERlYnVnIG91dHB1dAord2lsbCBzdGlsbCBiZSBzZW50IHRvIHRoZSByZWd1bGFyIG91dHB1dCBzdHJlYW0gYXMgbm9ybWFsLgorCisgICAgIDxwPlBhc3NpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU08L3NwYW4+PC9zYW1wPiB0byB0aGUgZHJpdmVyIGltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiwgYW5kIHN1cHByZXNzZXMKK3dhcm5pbmdzIHdpdGggYW4gaW1wbGljaXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXc8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1NTTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTU0tOTYyIj48L2E+TGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+IGJ1dCBkbyBub3QgbWVudGlvbiBoZWFkZXIgZmlsZXMgdGhhdCBhcmUgZm91bmQgaW4KK3N5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMsIG5vciBoZWFkZXIgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQsCitkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIHN1Y2ggYSBoZWFkZXIuCisKKyAgICAgPHA+VGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNob2ljZSBvZiBhbmdsZSBicmFja2V0cyBvciBkb3VibGUgcXVvdGVzIGluIGFuCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSBkb2VzIG5vdCBpbiBpdHNlbGYgZGV0ZXJtaW5lIHdoZXRoZXIgdGhhdAoraGVhZGVyIHdpbGwgYXBwZWFyIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NTTwvc3Bhbj48L3NhbXA+IGRlcGVuZGVuY3kgb3V0cHV0LiAgVGhpcyBpcyBhCitzbGlnaHQgY2hhbmdlIGluIHNlbWFudGljcyBmcm9tIEdDQyB2ZXJzaW9ucyAzLjAgYW5kIGVhcmxpZXIuCisKKyAgICAgPHA+PGEgbmFtZT0iZGFzaE1GIj48L2E+PGJyPjxkdD48Y29kZT4tTUYgPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1NRi05NjMiPjwvYT5XaGVuIHVzZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NTTwvc3Bhbj48L3NhbXA+LCBzcGVjaWZpZXMgYQorZmlsZSB0byB3cml0ZSB0aGUgZGVwZW5kZW5jaWVzIHRvLiAgSWYgbm8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1GPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGlzIGdpdmVuCit0aGUgcHJlcHJvY2Vzc29yIHNlbmRzIHRoZSBydWxlcyB0byB0aGUgc2FtZSBwbGFjZSBpdCB3b3VsZCBoYXZlIHNlbnQKK3ByZXByb2Nlc3NlZCBvdXRwdXQuCisKKyAgICAgPHA+V2hlbiB1c2VkIHdpdGggdGhlIGRyaXZlciBvcHRpb25zIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRDwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NTUQ8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NRjwvc3Bhbj48L3NhbXA+IG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU1HPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1NRy05NjQiPjwvYT5JbiBjb25qdW5jdGlvbiB3aXRoIGFuIG9wdGlvbiBzdWNoIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NPC9zcGFuPjwvc2FtcD4gcmVxdWVzdGluZworZGVwZW5kZW5jeSBnZW5lcmF0aW9uLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTUc8L3NwYW4+PC9zYW1wPiBhc3N1bWVzIG1pc3NpbmcgaGVhZGVyIGZpbGVzIGFyZQorZ2VuZXJhdGVkIGZpbGVzIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGRlcGVuZGVuY3kgbGlzdCB3aXRob3V0IHJhaXNpbmcKK2FuIGVycm9yLiAgVGhlIGRlcGVuZGVuY3kgZmlsZW5hbWUgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUKKzxjb2RlPiNpbmNsdWRlPC9jb2RlPiBkaXJlY3RpdmUgd2l0aG91dCBwcmVwZW5kaW5nIGFueSBwYXRoLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1HPC9zcGFuPjwvc2FtcD4KK2Fsc28gc3VwcHJlc3NlcyBwcmVwcm9jZXNzZWQgb3V0cHV0LCBhcyBhIG1pc3NpbmcgaGVhZGVyIGZpbGUgcmVuZGVycwordGhpcyB1c2VsZXNzLgorCisgICAgIDxwPlRoaXMgZmVhdHVyZSBpcyB1c2VkIGluIGF1dG9tYXRpYyB1cGRhdGluZyBvZiBtYWtlZmlsZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tTVA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LU1QLTk2NSI+PC9hPlRoaXMgb3B0aW9uIGluc3RydWN0cyBDUFAgdG8gYWRkIGEgcGhvbnkgdGFyZ2V0IGZvciBlYWNoIGRlcGVuZGVuY3kKK290aGVyIHRoYW4gdGhlIG1haW4gZmlsZSwgY2F1c2luZyBlYWNoIHRvIGRlcGVuZCBvbiBub3RoaW5nLiAgVGhlc2UKK2R1bW15IHJ1bGVzIHdvcmsgYXJvdW5kIGVycm9ycyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bWFrZTwvc3Bhbj48L3NhbXA+IGdpdmVzIGlmIHlvdSByZW1vdmUgaGVhZGVyCitmaWxlcyB3aXRob3V0IHVwZGF0aW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+TWFrZWZpbGU8L3NwYW4+PC9zYW1wPiB0byBtYXRjaC4KKworICAgICA8cD5UaGlzIGlzIHR5cGljYWwgb3V0cHV0OgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHRlc3QubzogdGVzdC5jIHRlc3QuaAorICAgICAgICAgIAorICAgICAgICAgIHRlc3QuaDoKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPi1NVCA8L2NvZGU+PHZhcj50YXJnZXQ8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtTVQtOTY2Ij48L2E+CitDaGFuZ2UgdGhlIHRhcmdldCBvZiB0aGUgcnVsZSBlbWl0dGVkIGJ5IGRlcGVuZGVuY3kgZ2VuZXJhdGlvbi4gIEJ5CitkZWZhdWx0IENQUCB0YWtlcyB0aGUgbmFtZSBvZiB0aGUgbWFpbiBpbnB1dCBmaWxlLCBkZWxldGVzIGFueQorZGlyZWN0b3J5IGNvbXBvbmVudHMgYW5kIGFueSBmaWxlIHN1ZmZpeCBzdWNoIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmM8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZAorYXBwZW5kcyB0aGUgcGxhdGZvcm0ncyB1c3VhbCBvYmplY3Qgc3VmZml4LiAgVGhlIHJlc3VsdCBpcyB0aGUgdGFyZ2V0LgorCisgICAgIDxwPkFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NVDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB3aWxsIHNldCB0aGUgdGFyZ2V0IHRvIGJlIGV4YWN0bHkgdGhlIHN0cmluZyB5b3UKK3NwZWNpZnkuICBJZiB5b3Ugd2FudCBtdWx0aXBsZSB0YXJnZXRzLCB5b3UgY2FuIHNwZWNpZnkgdGhlbSBhcyBhIHNpbmdsZQorYXJndW1lbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1UPC9zcGFuPjwvc2FtcD4sIG9yIHVzZSBtdWx0aXBsZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTVQ8L3NwYW4+PC9zYW1wPiBvcHRpb25zLgorCisgICAgIDxwPkZvciBleGFtcGxlLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTVQmbmJzcDsnJChvYmpwZngpZm9vLm8nPCEtLSAvQHcgLS0+PC9zcGFuPjwvc2FtcD4gbWlnaHQgZ2l2ZQorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICQob2JqcGZ4KWZvby5vOiBmb28uYworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+LU1RIDwvY29kZT48dmFyPnRhcmdldDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1NUS05NjciPjwvYT4KK1NhbWUgYXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1UPC9zcGFuPjwvc2FtcD4sIGJ1dCBpdCBxdW90ZXMgYW55IGNoYXJhY3RlcnMgd2hpY2ggYXJlIHNwZWNpYWwgdG8KK01ha2UuICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTVEmbmJzcDsnJChvYmpwZngpZm9vLm8nPCEtLSAvQHcgLS0+PC9zcGFuPjwvc2FtcD4gZ2l2ZXMKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAkJChvYmpwZngpZm9vLm86IGZvby5jCis8L3ByZT4KKyAgICAgPHA+VGhlIGRlZmF1bHQgdGFyZ2V0IGlzIGF1dG9tYXRpY2FsbHkgcXVvdGVkLCBhcyBpZiBpdCB3ZXJlIGdpdmVuIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NUTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU1EPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1NRC05NjgiPjwvYT48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTUQ8L3NwYW4+PC9zYW1wPiBpcyBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1NIC1NRiA8L3NwYW4+PHZhcj5maWxlPC92YXI+PC9zYW1wPiwgZXhjZXB0IHRoYXQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4gaXMgbm90IGltcGxpZWQuICBUaGUgZHJpdmVyIGRldGVybWluZXMgPHZhcj5maWxlPC92YXI+IGJhc2VkIG9uCit3aGV0aGVyIGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIGdpdmVuLiAgSWYgaXQgaXMsIHRoZSBkcml2ZXIgdXNlcyBpdHMKK2FyZ3VtZW50IGJ1dCB3aXRoIGEgc3VmZml4IG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZDwvc3Bhbj48L3NhbXA+LCBvdGhlcndpc2UgaXQgdGFrZXMgdGhlIG5hbWUKK29mIHRoZSBpbnB1dCBmaWxlLCByZW1vdmVzIGFueSBkaXJlY3RvcnkgY29tcG9uZW50cyBhbmQgc3VmZml4LCBhbmQKK2FwcGxpZXMgYSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmQ8L3NwYW4+PC9zYW1wPiBzdWZmaXguCisKKyAgICAgPHA+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1EPC9zcGFuPjwvc2FtcD4gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4sIGFueQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW88L3NwYW4+PC9zYW1wPiBzd2l0Y2ggaXMgdW5kZXJzdG9vZCB0byBzcGVjaWZ5IHRoZSBkZXBlbmRlbmN5IG91dHB1dCBmaWxlCisoc2VlIDxhIGhyZWY9ImRhc2hNRi5odG1sI2Rhc2hNRiI+LU1GPC9hPiksIGJ1dCBpZiB1c2VkIHdpdGhvdXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiwgZWFjaCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbzwvc3Bhbj48L3NhbXA+CitpcyB1bmRlcnN0b29kIHRvIHNwZWNpZnkgYSB0YXJnZXQgb2JqZWN0IGZpbGUuCisKKyAgICAgPHA+U2luY2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiBpcyBub3QgaW1wbGllZCwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1EPC9zcGFuPjwvc2FtcD4gY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUKK2EgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZSBhcyBhIHNpZGUtZWZmZWN0IG9mIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LU1NRDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTU1ELTk2OSI+PC9hPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU1EPC9zcGFuPjwvc2FtcD4gZXhjZXB0IG1lbnRpb24gb25seSB1c2VyIGhlYWRlciBmaWxlcywgbm90IHN5c3RlbQoraGVhZGVyIGZpbGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwY2gtZGVwczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnBjaF8wMDJkZGVwcy05NzAiPjwvYT5XaGVuIHVzaW5nIHByZWNvbXBpbGVkIGhlYWRlcnMgKHNlZSA8YSBocmVmPSJQcmVjb21waWxlZC1IZWFkZXJzLmh0bWwjUHJlY29tcGlsZWQtSGVhZGVycyI+UHJlY29tcGlsZWQgSGVhZGVyczwvYT4pLCB0aGlzIGZsYWcKK3dpbGwgY2F1c2UgdGhlIGRlcGVuZGVuY3ktb3V0cHV0IGZsYWdzIHRvIGFsc28gbGlzdCB0aGUgZmlsZXMgZnJvbSB0aGUKK3ByZWNvbXBpbGVkIGhlYWRlcidzIGRlcGVuZGVuY2llcy4gIElmIG5vdCBzcGVjaWZpZWQgb25seSB0aGUKK3ByZWNvbXBpbGVkIGhlYWRlciB3b3VsZCBiZSBsaXN0ZWQgYW5kIG5vdCB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVzZWQgdG8KK2NyZWF0ZSBpdCBiZWNhdXNlIHRob3NlIGZpbGVzIGFyZSBub3QgY29uc3VsdGVkIHdoZW4gYSBwcmVjb21waWxlZAoraGVhZGVyIGlzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnBjaC1wcmVwcm9jZXNzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mcGNoXzAwMmRwcmVwcm9jZXNzLTk3MSI+PC9hPlRoaXMgb3B0aW9uIGFsbG93cyB1c2Ugb2YgYSBwcmVjb21waWxlZCBoZWFkZXIgKHNlZSA8YSBocmVmPSJQcmVjb21waWxlZC1IZWFkZXJzLmh0bWwjUHJlY29tcGlsZWQtSGVhZGVycyI+UHJlY29tcGlsZWQgSGVhZGVyczwvYT4pIHRvZ2V0aGVyIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPi4gIEl0IGluc2VydHMgYSBzcGVjaWFsIDxjb2RlPiNwcmFnbWE8L2NvZGU+LAorPGNvZGU+I3ByYWdtYSBHQ0MgcGNoX3ByZXByb2Nlc3MgIjwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGNvZGU+IjwvY29kZT4gaW4gdGhlIG91dHB1dCB0byBtYXJrCit0aGUgcGxhY2Ugd2hlcmUgdGhlIHByZWNvbXBpbGVkIGhlYWRlciB3YXMgZm91bmQsIGFuZCBpdHMgPHZhcj5maWxlbmFtZTwvdmFyPi4gCitXaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJlcHJvY2Vzc2VkPC9zcGFuPjwvc2FtcD4gaXMgaW4gdXNlLCBHQ0MgcmVjb2duaXplcyB0aGlzIDxjb2RlPiNwcmFnbWE8L2NvZGU+CithbmQgbG9hZHMgdGhlIFBDSC4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdCwgYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHByZXByb2Nlc3NlZCBvdXRwdXQKK2lzIG9ubHkgcmVhbGx5IHN1aXRhYmxlIGFzIGlucHV0IHRvIEdDQy4gIEl0IGlzIHN3aXRjaGVkIG9uIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc2F2ZS10ZW1wczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPllvdSBzaG91bGQgbm90IHdyaXRlIHRoaXMgPGNvZGU+I3ByYWdtYTwvY29kZT4gaW4geW91ciBvd24gY29kZSwgYnV0IGl0IGlzCitzYWZlIHRvIGVkaXQgdGhlIGZpbGVuYW1lIGlmIHRoZSBQQ0ggZmlsZSBpcyBhdmFpbGFibGUgaW4gYSBkaWZmZXJlbnQKK2xvY2F0aW9uLiAgVGhlIGZpbGVuYW1lIG1heSBiZSBhYnNvbHV0ZSBvciBpdCBtYXkgYmUgcmVsYXRpdmUgdG8gR0NDJ3MKK2N1cnJlbnQgZGlyZWN0b3J5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXggYzwvY29kZT48ZHQ+PGNvZGU+LXggYysrPC9jb2RlPjxkdD48Y29kZT4teCBvYmplY3RpdmUtYzwvY29kZT48ZHQ+PGNvZGU+LXggYXNzZW1ibGVyLXdpdGgtY3BwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC14LTk3MiI+PC9hPlNwZWNpZnkgdGhlIHNvdXJjZSBsYW5ndWFnZTogQywgQysrLCBPYmplY3RpdmUtQywgb3IgYXNzZW1ibHkuICBUaGlzIGhhcworbm90aGluZyB0byBkbyB3aXRoIHN0YW5kYXJkcyBjb25mb3JtYW5jZSBvciBleHRlbnNpb25zOyBpdCBtZXJlbHkKK3NlbGVjdHMgd2hpY2ggYmFzZSBzeW50YXggdG8gZXhwZWN0LiAgSWYgeW91IGdpdmUgbm9uZSBvZiB0aGVzZSBvcHRpb25zLAorY3BwIHdpbGwgZGVkdWNlIHRoZSBsYW5ndWFnZSBmcm9tIHRoZSBleHRlbnNpb24gb2YgdGhlIHNvdXJjZSBmaWxlOgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uY2M8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lm08L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LlM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBTb21lIG90aGVyIGNvbW1vbgorZXh0ZW5zaW9ucyBmb3IgQysrIGFuZCBhc3NlbWJseSBhcmUgYWxzbyByZWNvZ25pemVkLiAgSWYgY3BwIGRvZXMgbm90CityZWNvZ25pemUgdGhlIGV4dGVuc2lvbiwgaXQgd2lsbCB0cmVhdCB0aGUgZmlsZSBhcyBDOyB0aGlzIGlzIHRoZSBtb3N0CitnZW5lcmljIG1vZGUuCisKKyAgICAgPHA+PGVtPk5vdGU6PC9lbT4gUHJldmlvdXMgdmVyc2lvbnMgb2YgY3BwIGFjY2VwdGVkIGEgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWxhbmc8L3NwYW4+PC9zYW1wPiBvcHRpb24KK3doaWNoIHNlbGVjdGVkIGJvdGggdGhlIGxhbmd1YWdlIGFuZCB0aGUgc3RhbmRhcmRzIGNvbmZvcm1hbmNlIGxldmVsLiAKK1RoaXMgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQsIGJlY2F1c2UgaXQgY29uZmxpY3RzIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4KK29wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1zdGQ9PC9jb2RlPjx2YXI+c3RhbmRhcmQ8L3Zhcj48ZHQ+PGNvZGU+LWFuc2k8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWFuc2ktOTczIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RkXzAwM2QtOTc0Ij48L2E+U3BlY2lmeSB0aGUgc3RhbmRhcmQgdG8gd2hpY2ggdGhlIGNvZGUgc2hvdWxkIGNvbmZvcm0uICBDdXJyZW50bHkgQ1BQCitrbm93cyBhYm91dCBDIGFuZCBDKysgc3RhbmRhcmRzOyBvdGhlcnMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCisKKyAgICAgPHA+PHZhcj5zdGFuZGFyZDwvdmFyPgorbWF5IGJlIG9uZSBvZjoKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+YzkwPC9jb2RlPjxkdD48Y29kZT5jODk8L2NvZGU+PGR0Pjxjb2RlPmlzbzk4OTk6MTk5MDwvY29kZT48ZGQ+VGhlIElTTyBDIHN0YW5kYXJkIGZyb20gMTk5MC4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YzkwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHRoZSBjdXN0b21hcnkgc2hvcnRoYW5kIGZvcgordGhpcyB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZC4KKworICAgICAgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzkwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmlzbzk4OTk6MTk5NDA5PC9jb2RlPjxkZD5UaGUgMTk5MCBDIHN0YW5kYXJkLCBhcyBhbWVuZGVkIGluIDE5OTQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmlzbzk4OTk6MTk5OTwvY29kZT48ZHQ+PGNvZGU+Yzk5PC9jb2RlPjxkdD48Y29kZT5pc285ODk5OjE5OXg8L2NvZGU+PGR0Pjxjb2RlPmM5eDwvY29kZT48ZGQ+VGhlIHJldmlzZWQgSVNPIEMgc3RhbmRhcmQsIHB1Ymxpc2hlZCBpbiBEZWNlbWJlciAxOTk5LiAgQmVmb3JlCitwdWJsaWNhdGlvbiwgdGhpcyB3YXMga25vd24gYXMgQzlYLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pc285ODk5OjIwMTE8L2NvZGU+PGR0Pjxjb2RlPmMxMTwvY29kZT48ZHQ+PGNvZGU+YzF4PC9jb2RlPjxkZD5UaGUgcmV2aXNlZCBJU08gQyBzdGFuZGFyZCwgcHVibGlzaGVkIGluIERlY2VtYmVyIDIwMTEuICBCZWZvcmUKK3B1YmxpY2F0aW9uLCB0aGlzIHdhcyBrbm93biBhcyBDMVguCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmdudTkwPC9jb2RlPjxkdD48Y29kZT5nbnU4OTwvY29kZT48ZGQ+VGhlIDE5OTAgQyBzdGFuZGFyZCBwbHVzIEdOVSBleHRlbnNpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+Z251OTk8L2NvZGU+PGR0Pjxjb2RlPmdudTl4PC9jb2RlPjxkZD5UaGUgMTk5OSBDIHN0YW5kYXJkIHBsdXMgR05VIGV4dGVuc2lvbnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmdudTExPC9jb2RlPjxkdD48Y29kZT5nbnUxeDwvY29kZT48ZGQ+VGhlIDIwMTEgQyBzdGFuZGFyZCBwbHVzIEdOVSBleHRlbnNpb25zLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5jKys5ODwvY29kZT48ZGQ+VGhlIDE5OTggSVNPIEMrKyBzdGFuZGFyZCBwbHVzIGFtZW5kbWVudHMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmdudSsrOTg8L2NvZGU+PGRkPlRoZSBzYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YysrOTg8L3NwYW4+PC9zYW1wPiBwbHVzIEdOVSBleHRlbnNpb25zLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQgZm9yIEMrKyBjb2RlLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tSS08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUlfMDAyZC05NzUiPjwvYT5TcGxpdCB0aGUgaW5jbHVkZSBwYXRoLiAgQW55IGRpcmVjdG9yaWVzIHNwZWNpZmllZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4KK29wdGlvbnMgYmVmb3JlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JLTwvc3Bhbj48L3NhbXA+IGFyZSBzZWFyY2hlZCBvbmx5IGZvciBoZWFkZXJzIHJlcXVlc3RlZCB3aXRoCis8Y29kZT4jaW5jbHVkZSZuYnNwOyI8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+IjwhLS0gL0B3IC0tPjwvY29kZT47IHRoZXkgYXJlIG5vdCBzZWFyY2hlZCBmb3IKKzxjb2RlPiNpbmNsdWRlJm5ic3A7Jmx0OzwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4mZ3Q7PCEtLSAvQHcgLS0+PC9jb2RlPi4gIElmIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgYXJlCitzcGVjaWZpZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgYWZ0ZXIgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JLTwvc3Bhbj48L3NhbXA+LCB0aG9zZQorZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGZvciBhbGwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmVzLgorCisgICAgIDxwPkluIGFkZGl0aW9uLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSS08L3NwYW4+PC9zYW1wPiBpbmhpYml0cyB0aGUgdXNlIG9mIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQKK2ZpbGUgZGlyZWN0b3J5IGFzIHRoZSBmaXJzdCBzZWFyY2ggZGlyZWN0b3J5IGZvciA8Y29kZT4jaW5jbHVkZSZuYnNwOyI8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+IjwhLS0gL0B3IC0tPjwvY29kZT4uIAorVGhpcyBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub3N0ZGluYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbm9zdGRpbmMtOTc2Ij48L2E+RG8gbm90IHNlYXJjaCB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzIGZvciBoZWFkZXIgZmlsZXMuIAorT25seSB0aGUgZGlyZWN0b3JpZXMgeW91IGhhdmUgc3BlY2lmaWVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBvcHRpb25zCisoYW5kIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZSwgaWYgYXBwcm9wcmlhdGUpIGFyZSBzZWFyY2hlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ub3N0ZGluYysrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1ub3N0ZGluY18wMDJiXzAwMmItOTc3Ij48L2E+RG8gbm90IHNlYXJjaCBmb3IgaGVhZGVyIGZpbGVzIGluIHRoZSBDKystc3BlY2lmaWMgc3RhbmRhcmQgZGlyZWN0b3JpZXMsCitidXQgZG8gc3RpbGwgc2VhcmNoIHRoZSBvdGhlciBzdGFuZGFyZCBkaXJlY3Rvcmllcy4gIChUaGlzIG9wdGlvbiBpcwordXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBDKysgbGlicmFyeS4pCisKKyAgICAgPGJyPjxkdD48Y29kZT4taW5jbHVkZSA8L2NvZGU+PHZhcj5maWxlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWluY2x1ZGUtOTc4Ij48L2E+UHJvY2VzcyA8dmFyPmZpbGU8L3Zhcj4gYXMgaWYgPGNvZGU+I2luY2x1ZGUgImZpbGUiPC9jb2RlPiBhcHBlYXJlZCBhcyB0aGUgZmlyc3QKK2xpbmUgb2YgdGhlIHByaW1hcnkgc291cmNlIGZpbGUuICBIb3dldmVyLCB0aGUgZmlyc3QgZGlyZWN0b3J5IHNlYXJjaGVkCitmb3IgPHZhcj5maWxlPC92YXI+IGlzIHRoZSBwcmVwcm9jZXNzb3IncyB3b3JraW5nIGRpcmVjdG9yeSA8ZW0+aW5zdGVhZCBvZjwvZW0+Cit0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG1haW4gc291cmNlIGZpbGUuICBJZiBub3QgZm91bmQgdGhlcmUsIGl0CitpcyBzZWFyY2hlZCBmb3IgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgPGNvZGU+I2luY2x1ZGUgIi4uLiI8L2NvZGU+IHNlYXJjaAorY2hhaW4gYXMgbm9ybWFsLgorCisgICAgIDxwPklmIG11bHRpcGxlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pbmNsdWRlPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBhcmUgZ2l2ZW4sIHRoZSBmaWxlcyBhcmUgaW5jbHVkZWQKK2luIHRoZSBvcmRlciB0aGV5IGFwcGVhciBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWltYWNyb3MgPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1pbWFjcm9zLTk3OSI+PC9hPkV4YWN0bHkgbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW5jbHVkZTwvc3Bhbj48L3NhbXA+LCBleGNlcHQgdGhhdCBhbnkgb3V0cHV0IHByb2R1Y2VkIGJ5CitzY2FubmluZyA8dmFyPmZpbGU8L3Zhcj4gaXMgdGhyb3duIGF3YXkuICBNYWNyb3MgaXQgZGVmaW5lcyByZW1haW4gZGVmaW5lZC4gCitUaGlzIGFsbG93cyB5b3UgdG8gYWNxdWlyZSBhbGwgdGhlIG1hY3JvcyBmcm9tIGEgaGVhZGVyIHdpdGhvdXQgYWxzbworcHJvY2Vzc2luZyBpdHMgZGVjbGFyYXRpb25zLgorCisgICAgIDxwPkFsbCBmaWxlcyBzcGVjaWZpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWltYWNyb3M8L3NwYW4+PC9zYW1wPiBhcmUgcHJvY2Vzc2VkIGJlZm9yZSBhbGwgZmlsZXMKK3NwZWNpZmllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW5jbHVkZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWlkaXJhZnRlciA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaWRpcmFmdGVyLTk4MCI+PC9hPlNlYXJjaCA8dmFyPmRpcjwvdmFyPiBmb3IgaGVhZGVyIGZpbGVzLCBidXQgZG8gaXQgPGVtPmFmdGVyPC9lbT4gYWxsCitkaXJlY3RvcmllcyBzcGVjaWZpZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzCitoYXZlIGJlZW4gZXhoYXVzdGVkLiAgPHZhcj5kaXI8L3Zhcj4gaXMgdHJlYXRlZCBhcyBhIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yeS4gCitJZiA8dmFyPmRpcjwvdmFyPiBiZWdpbnMgd2l0aCA8Y29kZT49PC9jb2RlPiwgdGhlbiB0aGUgPGNvZGU+PTwvY29kZT4gd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zeXNyb290PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pc3lzcm9vdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWlwcmVmaXggPC9jb2RlPjx2YXI+cHJlZml4PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWlwcmVmaXgtOTgxIj48L2E+U3BlY2lmeSA8dmFyPnByZWZpeDwvdmFyPiBhcyB0aGUgcHJlZml4IGZvciBzdWJzZXF1ZW50IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pd2l0aHByZWZpeDwvc3Bhbj48L3NhbXA+CitvcHRpb25zLiAgSWYgdGhlIHByZWZpeCByZXByZXNlbnRzIGEgZGlyZWN0b3J5LCB5b3Ugc2hvdWxkIGluY2x1ZGUgdGhlCitmaW5hbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi88L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4taXdpdGhwcmVmaXggPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGR0Pjxjb2RlPi1pd2l0aHByZWZpeGJlZm9yZSA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaXdpdGhwcmVmaXgtOTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtaXdpdGhwcmVmaXhiZWZvcmUtOTgzIj48L2E+QXBwZW5kIDx2YXI+ZGlyPC92YXI+IHRvIHRoZSBwcmVmaXggc3BlY2lmaWVkIHByZXZpb3VzbHkgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlwcmVmaXg8L3NwYW4+PC9zYW1wPiwgYW5kIGFkZCB0aGUgcmVzdWx0aW5nIGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBzZWFyY2gKK3BhdGguICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXdpdGhwcmVmaXhiZWZvcmU8L3NwYW4+PC9zYW1wPiBwdXRzIGl0IGluIHRoZSBzYW1lIHBsYWNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4KK3dvdWxkOyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXdpdGhwcmVmaXg8L3NwYW4+PC9zYW1wPiBwdXRzIGl0IHdoZXJlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pZGlyYWZ0ZXI8L3NwYW4+PC9zYW1wPiB3b3VsZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pc3lzcm9vdCA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaXN5c3Jvb3QtOTg0Ij48L2E+VGhpcyBvcHRpb24gaXMgbGlrZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zeXNyb290PC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBidXQgYXBwbGllcyBvbmx5IHRvCitoZWFkZXIgZmlsZXMgKGV4Y2VwdCBmb3IgRGFyd2luIHRhcmdldHMsIHdoZXJlIGl0IGFwcGxpZXMgdG8gYm90aCBoZWFkZXIKK2ZpbGVzIGFuZCBsaWJyYXJpZXMpLiAgU2VlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBvcHRpb24gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWltdWx0aWxpYiA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtaW11bHRpbGliLTk4NSI+PC9hPlVzZSA8dmFyPmRpcjwvdmFyPiBhcyBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcKK3RhcmdldC1zcGVjaWZpYyBDKysgaGVhZGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pc3lzdGVtIDwvY29kZT48dmFyPmRpcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1pc3lzdGVtLTk4NiI+PC9hPlNlYXJjaCA8dmFyPmRpcjwvdmFyPiBmb3IgaGVhZGVyIGZpbGVzLCBhZnRlciBhbGwgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGJ1dCBiZWZvcmUgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4gIE1hcmsgaXQKK2FzIGEgc3lzdGVtIGRpcmVjdG9yeSwgc28gdGhhdCBpdCBnZXRzIHRoZSBzYW1lIHNwZWNpYWwgdHJlYXRtZW50IGFzCitpcyBhcHBsaWVkIHRvIHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMuIAorSWYgPHZhcj5kaXI8L3Zhcj4gYmVnaW5zIHdpdGggPGNvZGU+PTwvY29kZT4sIHRoZW4gdGhlIDxjb2RlPj08L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQKK2J5IHRoZSBzeXNyb290IHByZWZpeDsgc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3lzcm9vdDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pcXVvdGUgPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWlxdW90ZS05ODciPjwvYT5TZWFyY2ggPHZhcj5kaXI8L3Zhcj4gb25seSBmb3IgaGVhZGVyIGZpbGVzIHJlcXVlc3RlZCB3aXRoCis8Y29kZT4jaW5jbHVkZSZuYnNwOyI8L2NvZGU+PHZhcj5maWxlPC92YXI+PGNvZGU+IjwhLS0gL0B3IC0tPjwvY29kZT47IHRoZXkgYXJlIG5vdCBzZWFyY2hlZCBmb3IKKzxjb2RlPiNpbmNsdWRlJm5ic3A7Jmx0OzwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4mZ3Q7PCEtLSAvQHcgLS0+PC9jb2RlPiwgYmVmb3JlIGFsbCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gYW5kIGJlZm9yZSB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzLiAKK0lmIDx2YXI+ZGlyPC92YXI+IGJlZ2lucyB3aXRoIDxjb2RlPj08L2NvZGU+LCB0aGVuIHRoZSA8Y29kZT49PC9jb2RlPiB3aWxsIGJlIHJlcGxhY2VkCitieSB0aGUgc3lzcm9vdCBwcmVmaXg7IHNlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlzeXNyb290PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRpcmVjdGl2ZXMtb25seTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZmRpcmVjdGl2ZXNfMDAyZG9ubHktOTg4Ij48L2E+V2hlbiBwcmVwcm9jZXNzaW5nLCBoYW5kbGUgZGlyZWN0aXZlcywgYnV0IGRvIG5vdCBleHBhbmQgbWFjcm9zLgorCisgICAgIDxwPlRoZSBvcHRpb24ncyBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByZXByb2Nlc3NlZDwvc3Bhbj48L3NhbXA+CitvcHRpb25zLgorCisgICAgIDxwPldpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiwgcHJlcHJvY2Vzc2luZyBpcyBsaW1pdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBkaXJlY3RpdmVzCitzdWNoIGFzIDxjb2RlPiNkZWZpbmU8L2NvZGU+LCA8Y29kZT4jaWZkZWY8L2NvZGU+LCBhbmQgPGNvZGU+I2Vycm9yPC9jb2RlPi4gIE90aGVyCitwcmVwcm9jZXNzb3Igb3BlcmF0aW9ucywgc3VjaCBhcyBtYWNybyBleHBhbnNpb24gYW5kIHRyaWdyYXBoCitjb252ZXJzaW9uIGFyZSBub3QgcGVyZm9ybWVkLiAgSW4gYWRkaXRpb24sIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZEQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMKK2ltcGxpY2l0bHkgZW5hYmxlZC4KKworICAgICA8cD5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJlcHJvY2Vzc2VkPC9zcGFuPjwvc2FtcD4sIHByZWRlZmluaXRpb24gb2YgY29tbWFuZCBsaW5lIGFuZCBtb3N0CitidWlsdGluIG1hY3JvcyBpcyBkaXNhYmxlZC4gIE1hY3JvcyBzdWNoIGFzIDxjb2RlPl9fTElORV9fPC9jb2RlPiwgd2hpY2ggYXJlCitjb250ZXh0dWFsbHkgZGVwZW5kZW50LCBhcmUgaGFuZGxlZCBub3JtYWxseS4gIFRoaXMgZW5hYmxlcyBjb21waWxhdGlvbiBvZgorZmlsZXMgcHJldmlvdXNseSBwcmVwcm9jZXNzZWQgd2l0aCA8Y29kZT4tRSAtZmRpcmVjdGl2ZXMtb25seTwvY29kZT4uCisKKyAgICAgPHA+V2l0aCBib3RoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJlcHJvY2Vzc2VkPC9zcGFuPjwvc2FtcD4sIHRoZSBydWxlcyBmb3IKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJlcHJvY2Vzc2VkPC9zcGFuPjwvc2FtcD4gdGFrZSBwcmVjZWRlbmNlLiAgVGhpcyBlbmFibGVzIGZ1bGwgcHJlcHJvY2Vzc2luZyBvZgorZmlsZXMgcHJldmlvdXNseSBwcmVwcm9jZXNzZWQgd2l0aCA8Y29kZT4tRSAtZmRpcmVjdGl2ZXMtb25seTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRvbGxhcnMtaW4taWRlbnRpZmllcnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMtOTg5Ij48L2E+PGEgbmFtZT0iZmRvbGxhcnNfMDAyZGluXzAwMmRpZGVudGlmaWVycyI+PC9hPkFjY2VwdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gaWRlbnRpZmllcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmV4dGVuZGVkLWlkZW50aWZpZXJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZXh0ZW5kZWRfMDAyZGlkZW50aWZpZXJzLTk5MCI+PC9hPkFjY2VwdCB1bml2ZXJzYWwgY2hhcmFjdGVyIG5hbWVzIGluIGlkZW50aWZpZXJzLiAgVGhpcyBvcHRpb24gaXMKK2V4cGVyaW1lbnRhbDsgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBHQ0MsIGl0IHdpbGwgYmUgZW5hYmxlZCBieQorZGVmYXVsdCBmb3IgQzk5IGFuZCBDKysuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLWNhbm9uaWNhbC1zeXN0ZW0taGVhZGVyczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRjYW5vbmljYWxfMDAyZHN5c3RlbV8wMDJkaGVhZGVycy05OTEiPjwvYT5XaGVuIHByZXByb2Nlc3NpbmcsIGRvIG5vdCBzaG9ydGVuIHN5c3RlbSBoZWFkZXIgcGF0aHMgd2l0aCBjYW5vbmljYWxpemF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZwcmVwcm9jZXNzZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZwcmVwcm9jZXNzZWQtOTkyIj48L2E+SW5kaWNhdGUgdG8gdGhlIHByZXByb2Nlc3NvciB0aGF0IHRoZSBpbnB1dCBmaWxlIGhhcyBhbHJlYWR5IGJlZW4KK3ByZXByb2Nlc3NlZC4gIFRoaXMgc3VwcHJlc3NlcyB0aGluZ3MgbGlrZSBtYWNybyBleHBhbnNpb24sIHRyaWdyYXBoCitjb252ZXJzaW9uLCBlc2NhcGVkIG5ld2xpbmUgc3BsaWNpbmcsIGFuZCBwcm9jZXNzaW5nIG9mIG1vc3QgZGlyZWN0aXZlcy4gCitUaGUgcHJlcHJvY2Vzc29yIHN0aWxsIHJlY29nbml6ZXMgYW5kIHJlbW92ZXMgY29tbWVudHMsIHNvIHRoYXQgeW91IGNhbgorcGFzcyBhIGZpbGUgcHJlcHJvY2Vzc2VkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUM8L3NwYW4+PC9zYW1wPiB0byB0aGUgY29tcGlsZXIgd2l0aG91dAorcHJvYmxlbXMuICBJbiB0aGlzIG1vZGUgdGhlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29yIGlzIGxpdHRsZSBtb3JlIHRoYW4KK2EgdG9rZW5pemVyIGZvciB0aGUgZnJvbnQgZW5kcy4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByZXByb2Nlc3NlZDwvc3Bhbj48L3NhbXA+IGlzIGltcGxpY2l0IGlmIHRoZSBpbnB1dCBmaWxlIGhhcyBvbmUgb2YgdGhlCitleHRlbnNpb25zICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lmk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmlpPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lm1pPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlc2UgYXJlIHRoZQorZXh0ZW5zaW9ucyB0aGF0IEdDQyB1c2VzIGZvciBwcmVwcm9jZXNzZWQgZmlsZXMgY3JlYXRlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXNhdmUtdGVtcHM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdGFic3RvcD08L2NvZGU+PHZhcj53aWR0aDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1mdGFic3RvcC05OTMiPjwvYT5TZXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGFiIHN0b3BzLiAgVGhpcyBoZWxwcyB0aGUgcHJlcHJvY2Vzc29yIHJlcG9ydAorY29ycmVjdCBjb2x1bW4gbnVtYmVycyBpbiB3YXJuaW5ncyBvciBlcnJvcnMsIGV2ZW4gaWYgdGFicyBhcHBlYXIgb24gdGhlCitsaW5lLiAgSWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiAxMDAsIHRoZSBvcHRpb24gaXMKK2lnbm9yZWQuICBUaGUgZGVmYXVsdCBpcyA4LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkZWJ1Zy1jcHA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZkZWJ1Z18wMDJkY3BwLTk5NCI+PC9hPlRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgR0NDLiAgV2hlbiB1c2VkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1FPC9zcGFuPjwvc2FtcD4sIGR1bXBzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCBsb2NhdGlvbiBtYXBzLiAgRXZlcnkKK3Rva2VuIGluIHRoZSBvdXRwdXQgaXMgcHJlY2VkZWQgYnkgdGhlIGR1bXAgb2YgdGhlIG1hcCBpdHMgbG9jYXRpb24KK2JlbG9uZ3MgdG8uICBUaGUgZHVtcCBvZiB0aGUgbWFwIGhvbGRpbmcgdGhlIGxvY2F0aW9uIG9mIGEgdG9rZW4gd291bGQKK2JlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB7JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5QPC9zcGFuPjwvc2FtcD4mcnNxdW87OjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vZmlsZS9wYXRoPC9zcGFuPjwvc2FtcD47JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5GPC9zcGFuPjwvc2FtcD4mcnNxdW87OjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vaW5jbHVkZXIvcGF0aDwvc3Bhbj48L3NhbXA+OyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TDwvc3Bhbj48L3NhbXA+JnJzcXVvOzo8dmFyPmxpbmVfbnVtPC92YXI+OyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qzwvc3Bhbj48L3NhbXA+JnJzcXVvOzo8dmFyPmNvbF9udW08L3Zhcj47JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TPC9zcGFuPjwvc2FtcD4mcnNxdW87Ojx2YXI+c3lzdGVtX2hlYWRlcl9wPC92YXI+OyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TTwvc3Bhbj48L3NhbXA+JnJzcXVvOzo8dmFyPm1hcF9hZGRyZXNzPC92YXI+OyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RTwvc3Bhbj48L3NhbXA+JnJzcXVvOzo8dmFyPm1hY3JvX2V4cGFuc2lvbl9wPC92YXI+LCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9jPC9zcGFuPjwvc2FtcD4mcnNxdW87Ojx2YXI+bG9jYXRpb248L3Zhcj59Cis8L3ByZT4KKyAgICAgPHA+V2hlbiB1c2VkIHdpdGhvdXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUU8L3NwYW4+PC9zYW1wPiwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mdHJhY2stbWFjcm8tZXhwYW5zaW9uPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj48Y29kZT49PC9jb2RlPjx2YXI+bGV2ZWw8L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LWZ0cmFja18wMDJkbWFjcm9fMDAyZGV4cGFuc2lvbi05OTUiPjwvYT5UcmFjayBsb2NhdGlvbnMgb2YgdG9rZW5zIGFjcm9zcyBtYWNybyBleHBhbnNpb25zLiBUaGlzIGFsbG93cyB0aGUKK2NvbXBpbGVyIHRvIGVtaXQgZGlhZ25vc3RpYyBhYm91dCB0aGUgY3VycmVudCBtYWNybyBleHBhbnNpb24gc3RhY2sKK3doZW4gYSBjb21waWxhdGlvbiBlcnJvciBvY2N1cnMgaW4gYSBtYWNybyBleHBhbnNpb24uIFVzaW5nIHRoaXMKK29wdGlvbiBtYWtlcyB0aGUgcHJlcHJvY2Vzc29yIGFuZCB0aGUgY29tcGlsZXIgY29uc3VtZSBtb3JlCittZW1vcnkuIFRoZSA8dmFyPmxldmVsPC92YXI+IHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBjaG9vc2UgdGhlIGxldmVsIG9mCitwcmVjaXNpb24gb2YgdG9rZW4gbG9jYXRpb24gdHJhY2tpbmcgdGh1cyBkZWNyZWFzaW5nIHRoZSBtZW1vcnkKK2NvbnN1bXB0aW9uIGlmIG5lY2Vzc2FyeS4gVmFsdWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9mIDx2YXI+bGV2ZWw8L3Zhcj4gZGUtYWN0aXZhdGVzCit0aGlzIG9wdGlvbiBqdXN0IGFzIGlmIG5vIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdHJhY2stbWFjcm8tZXhwYW5zaW9uPC9zcGFuPjwvc2FtcD4gd2FzIHByZXNlbnQKK29uIHRoZSBjb21tYW5kIGxpbmUuIFZhbHVlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0cmFja3MgdG9rZW5zIGxvY2F0aW9ucyBpbiBhCitkZWdyYWRlZCBtb2RlIGZvciB0aGUgc2FrZSBvZiBtaW5pbWFsIG1lbW9yeSBvdmVyaGVhZC4gSW4gdGhpcyBtb2RlCithbGwgdG9rZW5zIHJlc3VsdGluZyBmcm9tIHRoZSBleHBhbnNpb24gb2YgYW4gYXJndW1lbnQgb2YgYQorZnVuY3Rpb24tbGlrZSBtYWNybyBoYXZlIHRoZSBzYW1lIGxvY2F0aW9uLiBWYWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHJhY2tzCit0b2tlbnMgbG9jYXRpb25zIGNvbXBsZXRlbHkuIFRoaXMgdmFsdWUgaXMgdGhlIG1vc3QgbWVtb3J5IGh1bmdyeS4gCitXaGVuIHRoaXMgb3B0aW9uIGlzIGdpdmVuIG5vIGFyZ3VtZW50LCB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUgaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5Ob3RlIHRoYXQgLWZ0cmFjay1tYWNyby1leHBhbnNpb249MiBpcyBhY3RpdmF0ZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZXhlYy1jaGFyc2V0PTwvY29kZT48dmFyPmNoYXJzZXQ8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZmV4ZWNfMDAyZGNoYXJzZXQtOTk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2hhcmFjdGVyLXNldF8wMDJjLWV4ZWN1dGlvbi05OTciPjwvYT5TZXQgdGhlIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0LCB1c2VkIGZvciBzdHJpbmcgYW5kIGNoYXJhY3RlcgorY29uc3RhbnRzLiAgVGhlIGRlZmF1bHQgaXMgVVRGLTguICA8dmFyPmNoYXJzZXQ8L3Zhcj4gY2FuIGJlIGFueSBlbmNvZGluZworc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0ncyA8Y29kZT5pY29udjwvY29kZT4gbGlicmFyeSByb3V0aW5lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZ3aWRlLWV4ZWMtY2hhcnNldD08L2NvZGU+PHZhcj5jaGFyc2V0PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWZ3aWRlXzAwMmRleGVjXzAwMmRjaGFyc2V0LTk5OCI+PC9hPjxhIG5hbWU9ImluZGV4LWNoYXJhY3Rlci1zZXRfMDAyYy13aWRlLWV4ZWN1dGlvbi05OTkiPjwvYT5TZXQgdGhlIHdpZGUgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQsIHVzZWQgZm9yIHdpZGUgc3RyaW5nIGFuZAorY2hhcmFjdGVyIGNvbnN0YW50cy4gIFRoZSBkZWZhdWx0IGlzIFVURi0zMiBvciBVVEYtMTYsIHdoaWNoZXZlcgorY29ycmVzcG9uZHMgdG8gdGhlIHdpZHRoIG9mIDxjb2RlPndjaGFyX3Q8L2NvZGU+LiAgQXMgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZleGVjLWNoYXJzZXQ8L3NwYW4+PC9zYW1wPiwgPHZhcj5jaGFyc2V0PC92YXI+IGNhbiBiZSBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkCitieSB0aGUgc3lzdGVtJ3MgPGNvZGU+aWNvbnY8L2NvZGU+IGxpYnJhcnkgcm91dGluZTsgaG93ZXZlciwgeW91IHdpbGwgaGF2ZQorcHJvYmxlbXMgd2l0aCBlbmNvZGluZ3MgdGhhdCBkbyBub3QgZml0IGV4YWN0bHkgaW4gPGNvZGU+d2NoYXJfdDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmlucHV0LWNoYXJzZXQ9PC9jb2RlPjx2YXI+Y2hhcnNldDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1maW5wdXRfMDAyZGNoYXJzZXQtMTAwMCI+PC9hPjxhIG5hbWU9ImluZGV4LWNoYXJhY3Rlci1zZXRfMDAyYy1pbnB1dC0xMDAxIj48L2E+U2V0IHRoZSBpbnB1dCBjaGFyYWN0ZXIgc2V0LCB1c2VkIGZvciB0cmFuc2xhdGlvbiBmcm9tIHRoZSBjaGFyYWN0ZXIKK3NldCBvZiB0aGUgaW5wdXQgZmlsZSB0byB0aGUgc291cmNlIGNoYXJhY3RlciBzZXQgdXNlZCBieSBHQ0MuICBJZiB0aGUKK2xvY2FsZSBkb2VzIG5vdCBzcGVjaWZ5LCBvciBHQ0MgY2Fubm90IGdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlCitsb2NhbGUsIHRoZSBkZWZhdWx0IGlzIFVURi04LiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBlaXRoZXIgdGhlIGxvY2FsZQorb3IgdGhpcyBjb21tYW5kIGxpbmUgb3B0aW9uLiAgQ3VycmVudGx5IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIHRha2VzCitwcmVjZWRlbmNlIGlmIHRoZXJlJ3MgYSBjb25mbGljdC4gIDx2YXI+Y2hhcnNldDwvdmFyPiBjYW4gYmUgYW55IGVuY29kaW5nCitzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbSdzIDxjb2RlPmljb252PC9jb2RlPiBsaWJyYXJ5IHJvdXRpbmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZndvcmtpbmctZGlyZWN0b3J5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1md29ya2luZ18wMDJkZGlyZWN0b3J5LTEwMDIiPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZHdvcmtpbmdfMDAyZGRpcmVjdG9yeS0xMDAzIj48L2E+RW5hYmxlIGdlbmVyYXRpb24gb2YgbGluZW1hcmtlcnMgaW4gdGhlIHByZXByb2Nlc3NvciBvdXRwdXQgdGhhdCB3aWxsCitsZXQgdGhlIGNvbXBpbGVyIGtub3cgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXQgdGhlIHRpbWUgb2YKK3ByZXByb2Nlc3NpbmcuICBXaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBwcmVwcm9jZXNzb3Igd2lsbAorZW1pdCwgYWZ0ZXIgdGhlIGluaXRpYWwgbGluZW1hcmtlciwgYSBzZWNvbmQgbGluZW1hcmtlciB3aXRoIHRoZQorY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmb2xsb3dlZCBieSB0d28gc2xhc2hlcy4gIEdDQyB3aWxsIHVzZSB0aGlzCitkaXJlY3RvcnksIHdoZW4gaXQncyBwcmVzZW50IGluIHRoZSBwcmVwcm9jZXNzZWQgaW5wdXQsIGFzIHRoZQorZGlyZWN0b3J5IGVtaXR0ZWQgYXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaW4gc29tZSBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGZvcm1hdHMuICBUaGlzIG9wdGlvbiBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgaWYgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBpcyBlbmFibGVkLCBidXQgdGhpcyBjYW4gYmUgaW5oaWJpdGVkIHdpdGggdGhlIG5lZ2F0ZWQKK2Zvcm0gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby13b3JraW5nLWRpcmVjdG9yeTwvc3Bhbj48L3NhbXA+LiAgSWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1QPC9zcGFuPjwvc2FtcD4gZmxhZyBpcworcHJlc2VudCBpbiB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LCBzaW5jZSBubworPGNvZGU+I2xpbmU8L2NvZGU+IGRpcmVjdGl2ZXMgYXJlIGVtaXR0ZWQgd2hhdHNvZXZlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tc2hvdy1jb2x1bW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkc2hvd18wMDJkY29sdW1uLTEwMDQiPjwvYT5EbyBub3QgcHJpbnQgY29sdW1uIG51bWJlcnMgaW4gZGlhZ25vc3RpY3MuICBUaGlzIG1heSBiZSBuZWNlc3NhcnkgaWYKK2RpYWdub3N0aWNzIGFyZSBiZWluZyBzY2FubmVkIGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlCitjb2x1bW4gbnVtYmVycywgc3VjaCBhcyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZGVqYWdudTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUEgPC9jb2RlPjx2YXI+cHJlZGljYXRlPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmFuc3dlcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1BLTEwMDUiPjwvYT5NYWtlIGFuIGFzc2VydGlvbiB3aXRoIHRoZSBwcmVkaWNhdGUgPHZhcj5wcmVkaWNhdGU8L3Zhcj4gYW5kIGFuc3dlcgorPHZhcj5hbnN3ZXI8L3Zhcj4uICBUaGlzIGZvcm0gaXMgcHJlZmVycmVkIHRvIHRoZSBvbGRlciBmb3JtIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1BCis8L3NwYW4+PHZhcj5wcmVkaWNhdGU8L3Zhcj48c3BhbiBjbGFzcz0ib3B0aW9uIj4oPC9zcGFuPjx2YXI+YW5zd2VyPC92YXI+PHNwYW4gY2xhc3M9Im9wdGlvbiI+KTwvc3Bhbj48L3NhbXA+LCB3aGljaCBpcyBzdGlsbCBzdXBwb3J0ZWQsIGJlY2F1c2UKK2l0IGRvZXMgbm90IHVzZSBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tQSAtPC9jb2RlPjx2YXI+cHJlZGljYXRlPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmFuc3dlcjwvdmFyPjxkZD5DYW5jZWwgYW4gYXNzZXJ0aW9uIHdpdGggdGhlIHByZWRpY2F0ZSA8dmFyPnByZWRpY2F0ZTwvdmFyPiBhbmQgYW5zd2VyCis8dmFyPmFuc3dlcjwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1kQ0hBUlM8L2NvZGU+PGRkPjx2YXI+Q0hBUlM8L3Zhcj4gaXMgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMsCithbmQgbXVzdCBub3QgYmUgcHJlY2VkZWQgYnkgYSBzcGFjZS4gIE90aGVyIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkCitieSB0aGUgY29tcGlsZXIgcHJvcGVyLCBvciByZXNlcnZlZCBmb3IgZnV0dXJlIHZlcnNpb25zIG9mIEdDQywgYW5kIHNvCithcmUgc2lsZW50bHkgaWdub3JlZC4gIElmIHlvdSBzcGVjaWZ5IGNoYXJhY3RlcnMgd2hvc2UgYmVoYXZpb3IKK2NvbmZsaWN0cywgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5NPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWRNLTEwMDYiPjwvYT5JbnN0ZWFkIG9mIHRoZSBub3JtYWwgb3V0cHV0LCBnZW5lcmF0ZSBhIGxpc3Qgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZGVmaW5lPC9zcGFuPjwvc2FtcD4mcnNxdW87CitkaXJlY3RpdmVzIGZvciBhbGwgdGhlIG1hY3JvcyBkZWZpbmVkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZQorcHJlcHJvY2Vzc29yLCBpbmNsdWRpbmcgcHJlZGVmaW5lZCBtYWNyb3MuICBUaGlzIGdpdmVzIHlvdSBhIHdheSBvZgorZmluZGluZyBvdXQgd2hhdCBpcyBwcmVkZWZpbmVkIGluIHlvdXIgdmVyc2lvbiBvZiB0aGUgcHJlcHJvY2Vzc29yLiAKK0Fzc3VtaW5nIHlvdSBoYXZlIG5vIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5oPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21tYW5kCisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIHRvdWNoIGZvby5oOyBjcHAgLWRNIGZvby5oCis8L3ByZT4KKyAgICAgICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPndpbGwgc2hvdyBhbGwgdGhlIHByZWRlZmluZWQgbWFjcm9zLgorCisgICAgICAgICAgPHA+SWYgeW91IHVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZE08L3NwYW4+PC9zYW1wPiB3aXRob3V0IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRTwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWRNPC9zcGFuPjwvc2FtcD4gaXMKK2ludGVycHJldGVkIGFzIGEgc3lub255bSBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXJ0bC1tYWNoPC9zcGFuPjwvc2FtcD4uIAorU2VlIDxhIGhyZWY9Ii4uL2djYy9EZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT4uCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+RDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1kRC0xMDA3Ij48L2E+TGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk08L3NwYW4+PC9zYW1wPiZyc3F1bzsgZXhjZXB0IGluIHR3byByZXNwZWN0czogaXQgZG9lcyA8ZW0+bm90PC9lbT4gaW5jbHVkZSB0aGUKK3ByZWRlZmluZWQgbWFjcm9zLCBhbmQgaXQgb3V0cHV0cyA8ZW0+Ym90aDwvZW0+IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNkZWZpbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2RpcmVjdGl2ZXMgYW5kIHRoZSByZXN1bHQgb2YgcHJlcHJvY2Vzc2luZy4gIEJvdGgga2luZHMgb2Ygb3V0cHV0IGdvIHRvCit0aGUgc3RhbmRhcmQgb3V0cHV0IGZpbGUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1kTi0xMDA4Ij48L2E+TGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGJ1dCBlbWl0IG9ubHkgdGhlIG1hY3JvIG5hbWVzLCBub3QgdGhlaXIgZXhwYW5zaW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5JPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPjxhIG5hbWU9ImluZGV4LWRJLTEwMDkiPjwvYT5PdXRwdXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmVzIGluIGFkZGl0aW9uIHRvIHRoZSByZXN1bHQgb2YKK3ByZXByb2Nlc3NpbmcuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD48YSBuYW1lPSJpbmRleC1kVS0xMDEwIj48L2E+TGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZXhjZXB0IHRoYXQgb25seSBtYWNyb3MgdGhhdCBhcmUgZXhwYW5kZWQsIG9yIHdob3NlCitkZWZpbmVkbmVzcyBpcyB0ZXN0ZWQgaW4gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFyZSBvdXRwdXQ7IHRoZQorb3V0cHV0IGlzIGRlbGF5ZWQgdW50aWwgdGhlIHVzZSBvciB0ZXN0IG9mIHRoZSBtYWNybzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiN1bmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RpdmVzIGFyZSBhbHNvIG91dHB1dCBmb3IgbWFjcm9zIHRlc3RlZCBidXQKK3VuZGVmaW5lZCBhdCB0aGUgdGltZS4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVAtMTAxMSI+PC9hPkluaGliaXQgZ2VuZXJhdGlvbiBvZiBsaW5lbWFya2VycyBpbiB0aGUgb3V0cHV0IGZyb20gdGhlIHByZXByb2Nlc3Nvci4gCitUaGlzIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhlIHByZXByb2Nlc3NvciBvbiBzb21ldGhpbmcgdGhhdCBpcworbm90IEMgY29kZSwgYW5kIHdpbGwgYmUgc2VudCB0byBhIHByb2dyYW0gd2hpY2ggbWlnaHQgYmUgY29uZnVzZWQgYnkgdGhlCitsaW5lbWFya2Vycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1DPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1DLTEwMTIiPjwvYT5EbyBub3QgZGlzY2FyZCBjb21tZW50cy4gIEFsbCBjb21tZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dAorZmlsZSwgZXhjZXB0IGZvciBjb21tZW50cyBpbiBwcm9jZXNzZWQgZGlyZWN0aXZlcywgd2hpY2ggYXJlIGRlbGV0ZWQKK2Fsb25nIHdpdGggdGhlIGRpcmVjdGl2ZS4KKworICAgICA8cD5Zb3Ugc2hvdWxkIGJlIHByZXBhcmVkIGZvciBzaWRlIGVmZmVjdHMgd2hlbiB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQzwvc3Bhbj48L3NhbXA+OyBpdAorY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgdG8gdHJlYXQgY29tbWVudHMgYXMgdG9rZW5zIGluIHRoZWlyIG93biByaWdodC4gCitGb3IgZXhhbXBsZSwgY29tbWVudHMgYXBwZWFyaW5nIGF0IHRoZSBzdGFydCBvZiB3aGF0IHdvdWxkIGJlIGEKK2RpcmVjdGl2ZSBsaW5lIGhhdmUgdGhlIGVmZmVjdCBvZiB0dXJuaW5nIHRoYXQgbGluZSBpbnRvIGFuIG9yZGluYXJ5Citzb3VyY2UgbGluZSwgc2luY2UgdGhlIGZpcnN0IHRva2VuIG9uIHRoZSBsaW5lIGlzIG5vIGxvbmdlciBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1DQzwvY29kZT48ZGQ+RG8gbm90IGRpc2NhcmQgY29tbWVudHMsIGluY2x1ZGluZyBkdXJpbmcgbWFjcm8gZXhwYW5zaW9uLiAgVGhpcyBpcworbGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQzwvc3Bhbj48L3NhbXA+LCBleGNlcHQgdGhhdCBjb21tZW50cyBjb250YWluZWQgd2l0aGluIG1hY3JvcyBhcmUKK2Fsc28gcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dCBmaWxlIHdoZXJlIHRoZSBtYWNybyBpcyBleHBhbmRlZC4KKworICAgICA8cD5JbiBhZGRpdGlvbiB0byB0aGUgc2lkZS1lZmZlY3RzIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQzwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQ0M8L3NwYW4+PC9zYW1wPiBvcHRpb24gY2F1c2VzIGFsbCBDKystc3R5bGUgY29tbWVudHMgaW5zaWRlIGEgbWFjcm8KK3RvIGJlIGNvbnZlcnRlZCB0byBDLXN0eWxlIGNvbW1lbnRzLiAgVGhpcyBpcyB0byBwcmV2ZW50IGxhdGVyIHVzZQorb2YgdGhhdCBtYWNybyBmcm9tIGluYWR2ZXJ0ZW50bHkgY29tbWVudGluZyBvdXQgdGhlIHJlbWFpbmRlciBvZgordGhlIHNvdXJjZSBsaW5lLgorCisgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQ0M8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgZ2VuZXJhbGx5IHVzZWQgdG8gc3VwcG9ydCBsaW50IGNvbW1lbnRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXRyYWRpdGlvbmFsLWNwcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdHJhZGl0aW9uYWxfMDAyZGNwcC0xMDEzIj48L2E+VHJ5IHRvIGltaXRhdGUgdGhlIGJlaGF2aW9yIG9mIG9sZC1mYXNoaW9uZWQgQyBwcmVwcm9jZXNzb3JzLCBhcworb3Bwb3NlZCB0byBJU08gQyBwcmVwcm9jZXNzb3JzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXRyaWdyYXBoczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtdHJpZ3JhcGhzLTEwMTQiPjwvYT5Qcm9jZXNzIHRyaWdyYXBoIHNlcXVlbmNlcy4gCitUaGVzZSBhcmUgdGhyZWUtY2hhcmFjdGVyIHNlcXVlbmNlcywgYWxsIHN0YXJ0aW5nIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4/Pzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhhdAorYXJlIGRlZmluZWQgYnkgSVNPIEMgdG8gc3RhbmQgZm9yIHNpbmdsZSBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj8/Lzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdGFuZHMgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgc28gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4nPz8vbic8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYSBjaGFyYWN0ZXIKK2NvbnN0YW50IGZvciBhIG5ld2xpbmUuICBCeSBkZWZhdWx0LCBHQ0MgaWdub3JlcyB0cmlncmFwaHMsIGJ1dCBpbgorc3RhbmRhcmQtY29uZm9ybWluZyBtb2RlcyBpdCBjb252ZXJ0cyB0aGVtLiAgU2VlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuCisKKyAgICAgPHA+VGhlIG5pbmUgdHJpZ3JhcGhzIGFuZCB0aGVpciByZXBsYWNlbWVudHMgYXJlCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgVHJpZ3JhcGg6ICAgICAgID8/KCAgPz8pICA/PyZsdDsgID8/Jmd0OyAgPz89ICA/Py8gID8/JyAgPz8hICA/Py0KKyAgICAgICAgICBSZXBsYWNlbWVudDogICAgICBbICAgIF0gICAgeyAgICB9ICAgICMgICAgXCAgICBeICAgIHwgICAgfgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+LXJlbWFwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1yZW1hcC0xMDE1Ij48L2E+RW5hYmxlIHNwZWNpYWwgY29kZSB0byB3b3JrIGFyb3VuZCBmaWxlIHN5c3RlbXMgd2hpY2ggb25seSBwZXJtaXQgdmVyeQorc2hvcnQgZmlsZSBuYW1lcywgc3VjaCBhcyBNUy1ET1MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tLWhlbHA8L2NvZGU+PGR0Pjxjb2RlPi0tdGFyZ2V0LWhlbHA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWhlbHAtMTAxNiI+PC9hPjxhIG5hbWU9ImluZGV4LXRhcmdldF8wMDJkaGVscC0xMDE3Ij48L2E+UHJpbnQgdGV4dCBkZXNjcmliaW5nIGFsbCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgaW5zdGVhZCBvZgorcHJlcHJvY2Vzc2luZyBhbnl0aGluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi12PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC12LTEwMTgiPjwvYT5WZXJib3NlIG1vZGUuICBQcmludCBvdXQgR05VIENQUCdzIHZlcnNpb24gbnVtYmVyIGF0IHRoZSBiZWdpbm5pbmcgb2YKK2V4ZWN1dGlvbiwgYW5kIHJlcG9ydCB0aGUgZmluYWwgZm9ybSBvZiB0aGUgaW5jbHVkZSBwYXRoLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUgtMTAxOSI+PC9hPlByaW50IHRoZSBuYW1lIG9mIGVhY2ggaGVhZGVyIGZpbGUgdXNlZCwgaW4gYWRkaXRpb24gdG8gb3RoZXIgbm9ybWFsCithY3Rpdml0aWVzLiAgRWFjaCBuYW1lIGlzIGluZGVudGVkIHRvIHNob3cgaG93IGRlZXAgaW4gdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNpbmNsdWRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN0YWNrIGl0IGlzLiAgUHJlY29tcGlsZWQgaGVhZGVyIGZpbGVzIGFyZSBhbHNvCitwcmludGVkLCBldmVuIGlmIHRoZXkgYXJlIGZvdW5kIHRvIGJlIGludmFsaWQ7IGFuIGludmFsaWQgcHJlY29tcGlsZWQKK2hlYWRlciBmaWxlIGlzIHByaW50ZWQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi4uLng8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kIGEgdmFsaWQgb25lIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uLi4hPC9zcGFuPjwvc2FtcD4mcnNxdW87IC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi12ZXJzaW9uPC9jb2RlPjxkdD48Y29kZT4tLXZlcnNpb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXZlcnNpb24tMTAyMCI+PC9hPlByaW50IG91dCBHTlUgQ1BQJ3MgdmVyc2lvbiBudW1iZXIuICBXaXRoIG9uZSBkYXNoLCBwcm9jZWVkIHRvCitwcmVwcm9jZXNzIGFzIG5vcm1hbC4gIFdpdGggdHdvIGRhc2hlcywgZXhpdCBpbW1lZGlhdGVseS4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QdXNoXzAwMmZQb3AtTWFjcm8tUHJhZ21hcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9QdXNoXzAwMmZQb3AtTWFjcm8tUHJhZ21hcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMzIxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1B1c2hfMDAyZlBvcC1NYWNyby1QcmFnbWFzLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UHVzaC9Qb3AgTWFjcm8gUHJhZ21hcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyIgdGl0bGU9IlByYWdtYXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWaXNpYmlsaXR5LVByYWdtYXMuaHRtbCNWaXNpYmlsaXR5LVByYWdtYXMiIHRpdGxlPSJWaXNpYmlsaXR5IFByYWdtYXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcy5odG1sI0Z1bmN0aW9uLVNwZWNpZmljLU9wdGlvbi1QcmFnbWFzIiB0aXRsZT0iRnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUHVzaCUyZlBvcC1NYWNyby1QcmFnbWFzIj48L2E+Cis8YSBuYW1lPSJQdXNoXzAwMmZQb3AtTWFjcm8tUHJhZ21hcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGdW5jdGlvbi1TcGVjaWZpYy1PcHRpb24tUHJhZ21hcy5odG1sI0Z1bmN0aW9uLVNwZWNpZmljLU9wdGlvbi1QcmFnbWFzIj5GdW5jdGlvbiBTcGVjaWZpYyBPcHRpb24gUHJhZ21hczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZpc2liaWxpdHktUHJhZ21hcy5odG1sI1Zpc2liaWxpdHktUHJhZ21hcyI+VmlzaWJpbGl0eSBQcmFnbWFzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU4LjEyIFB1c2gvUG9wIE1hY3JvIFByYWdtYXM8L2g0PgorCis8cD5Gb3IgY29tcGF0aWJpbGl0eSB3aXRoIE1pY3Jvc29mdCBXaW5kb3dzIGNvbXBpbGVycywgR0NDIHN1cHBvcnRzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNwcmFnbWEgcHVzaF9tYWNybyg8L3NwYW4+PHZhcj4ibWFjcm9fbmFtZSI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+KTwvc3Bhbj48L3NhbXA+JnJzcXVvOworYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBwb3BfbWFjcm8oPC9zcGFuPjx2YXI+Im1hY3JvX25hbWUiPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPik8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNwcmFnbWEgcHVzaF9tYWNybyg8L2NvZGU+PHZhcj4ibWFjcm9fbmFtZSI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWFfMDAyYy1wdXNoXzAwNWZtYWNyby0zNDc3Ij48L2E+VGhpcyBwcmFnbWEgc2F2ZXMgdGhlIHZhbHVlIG9mIHRoZSBtYWNybyBuYW1lZCBhcyA8dmFyPm1hY3JvX25hbWU8L3Zhcj4gdG8KK3RoZSB0b3Agb2YgdGhlIHN0YWNrIGZvciB0aGlzIG1hY3JvLgorCisgICAgIDxicj48ZHQ+PGNvZGU+I3ByYWdtYSBwb3BfbWFjcm8oPC9jb2RlPjx2YXI+Im1hY3JvX25hbWUiPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hXzAwMmMtcG9wXzAwNWZtYWNyby0zNDc4Ij48L2E+VGhpcyBwcmFnbWEgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIG1hY3JvIG5hbWVkIGFzIDx2YXI+bWFjcm9fbmFtZTwvdmFyPiB0bwordGhlIHZhbHVlIG9uIHRvcCBvZiB0aGUgc3RhY2sgZm9yIHRoaXMgbWFjcm8uIElmIHRoZSBzdGFjayBmb3IKKzx2YXI+bWFjcm9fbmFtZTwvdmFyPiBpcyBlbXB0eSwgdGhlIHZhbHVlIG9mIHRoZSBtYWNybyByZW1haW5zIHVuY2hhbmdlZC4gCis8L2RsPgorCisgPHA+Rm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIFggIDEKKyAgICAgI3ByYWdtYSBwdXNoX21hY3JvKCJYIikKKyAgICAgI3VuZGVmIFgKKyAgICAgI2RlZmluZSBYIC0xCisgICAgICNwcmFnbWEgcG9wX21hY3JvKCJYIikKKyAgICAgaW50IHggW1hdOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5JbiB0aGlzIGV4YW1wbGUsIHRoZSBkZWZpbml0aW9uIG9mIFggYXMgMSBpcyBzYXZlZCBieSA8Y29kZT4jcHJhZ21hCitwdXNoX21hY3JvPC9jb2RlPiBhbmQgcmVzdG9yZWQgYnkgPGNvZGU+I3ByYWdtYSBwb3BfbWFjcm88L2NvZGU+LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9RdWFsaWZpZXJzLWltcGxlbWVudGF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1F1YWxpZmllcnMtaW1wbGVtZW50YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2MwYjRkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9RdWFsaWZpZXJzLWltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UXVhbGlmaWVycyBpbXBsZW1lbnRhdGlvbiAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkMgSW1wbGVtZW50YXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdHJ1Y3R1cmVzLXVuaW9ucy1lbnVtZXJhdGlvbnMtYW5kLWJpdF8wMDJkZmllbGRzLWltcGxlbWVudGF0aW9uLmh0bWwjU3RydWN0dXJlcy11bmlvbnMtZW51bWVyYXRpb25zLWFuZC1iaXRfMDAyZGZpZWxkcy1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IlN0cnVjdHVyZXMgdW5pb25zIGVudW1lcmF0aW9ucyBhbmQgYml0LWZpZWxkcyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRlY2xhcmF0b3JzLWltcGxlbWVudGF0aW9uLmh0bWwjRGVjbGFyYXRvcnMtaW1wbGVtZW50YXRpb24iIHRpdGxlPSJEZWNsYXJhdG9ycyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJRdWFsaWZpZXJzLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRlY2xhcmF0b3JzLWltcGxlbWVudGF0aW9uLmh0bWwjRGVjbGFyYXRvcnMtaW1wbGVtZW50YXRpb24iPkRlY2xhcmF0b3JzIGltcGxlbWVudGF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3RydWN0dXJlcy11bmlvbnMtZW51bWVyYXRpb25zLWFuZC1iaXRfMDAyZGZpZWxkcy1pbXBsZW1lbnRhdGlvbi5odG1sI1N0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24iPlN0cnVjdHVyZXMgdW5pb25zIGVudW1lcmF0aW9ucyBhbmQgYml0LWZpZWxkcyBpbXBsZW1lbnRhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj5DIEltcGxlbWVudGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xMCBRdWFsaWZpZXJzPC9oMz4KKworICAgICA8dWw+Cis8bGk+PGNpdGU+V2hhdCBjb25zdGl0dXRlcyBhbiBhY2Nlc3MgdG8gYW4gb2JqZWN0IHRoYXQgaGFzIHZvbGF0aWxlLXF1YWxpZmllZAordHlwZSAoQzkwIDYuNS4zLCBDOTkgNi43LjMpLjwvY2l0ZT4KKworICAgICA8cD5TdWNoIGFuIG9iamVjdCBpcyBub3JtYWxseSBhY2Nlc3NlZCBieSBwb2ludGVycyBhbmQgdXNlZCBmb3IgYWNjZXNzaW5nCitoYXJkd2FyZS4gIEluIG1vc3QgZXhwcmVzc2lvbnMsIGl0IGlzIGludHVpdGl2ZWx5IG9idmlvdXMgd2hhdCBpcyBhIHJlYWQKK2FuZCB3aGF0IGlzIGEgd3JpdGUuICBGb3IgZXhhbXBsZQorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHZvbGF0aWxlIGludCAqZHN0ID0gPHZhcj5zb21ldmFsdWU8L3Zhcj47CisgICAgICAgICAgdm9sYXRpbGUgaW50ICpzcmMgPSA8dmFyPnNvbWVvdGhlcnZhbHVlPC92YXI+OworICAgICAgICAgICpkc3QgPSAqc3JjOworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+d2lsbCBjYXVzZSBhIHJlYWQgb2YgdGhlIHZvbGF0aWxlIG9iamVjdCBwb2ludGVkIHRvIGJ5IDx2YXI+c3JjPC92YXI+IGFuZCBzdG9yZSB0aGUKK3ZhbHVlIGludG8gdGhlIHZvbGF0aWxlIG9iamVjdCBwb2ludGVkIHRvIGJ5IDx2YXI+ZHN0PC92YXI+LiAgVGhlcmUgaXMgbm8KK2d1YXJhbnRlZSB0aGF0IHRoZXNlIHJlYWRzIGFuZCB3cml0ZXMgYXJlIGF0b21pYywgZXNwZWNpYWxseSBmb3Igb2JqZWN0cworbGFyZ2VyIHRoYW4gPGNvZGU+aW50PC9jb2RlPi4KKworICAgICA8cD5Ib3dldmVyLCBpZiB0aGUgdm9sYXRpbGUgc3RvcmFnZSBpcyBub3QgYmVpbmcgbW9kaWZpZWQsIGFuZCB0aGUgdmFsdWUgb2YKK3RoZSB2b2xhdGlsZSBzdG9yYWdlIGlzIG5vdCB1c2VkLCB0aGVuIHRoZSBzaXR1YXRpb24gaXMgbGVzcyBvYnZpb3VzLiAKK0ZvciBleGFtcGxlCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgdm9sYXRpbGUgaW50ICpzcmMgPSA8dmFyPnNvbWV2YWx1ZTwvdmFyPjsKKyAgICAgICAgICAqc3JjOworPC9wcmU+CisgICAgIDxwPkFjY29yZGluZyB0byB0aGUgQyBzdGFuZGFyZCwgc3VjaCBhbiBleHByZXNzaW9uIGlzIGFuIHJ2YWx1ZSB3aG9zZSB0eXBlCitpcyB0aGUgdW5xdWFsaWZpZWQgdmVyc2lvbiBvZiBpdHMgb3JpZ2luYWwgdHlwZSwgaS5lLiA8Y29kZT5pbnQ8L2NvZGU+LiAgV2hldGhlcgorR0NDIGludGVycHJldHMgdGhpcyBhcyBhIHJlYWQgb2YgdGhlIHZvbGF0aWxlIG9iamVjdCBiZWluZyBwb2ludGVkIHRvIG9yCitvbmx5IGFzIGEgcmVxdWVzdCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBmb3IgaXRzIHNpZGUtZWZmZWN0cyBkZXBlbmRzCitvbiB0aGlzIHR5cGUuCisKKyAgICAgPHA+SWYgaXQgaXMgYSBzY2FsYXIgdHlwZSwgb3Igb24gbW9zdCB0YXJnZXRzIGFuIGFnZ3JlZ2F0ZSB0eXBlIHdob3NlIG9ubHkKK21lbWJlciBvYmplY3QgaXMgb2YgYSBzY2FsYXIgdHlwZSwgb3IgYSB1bmlvbiB0eXBlIHdob3NlIG1lbWJlciBvYmplY3RzCithcmUgb2Ygc2NhbGFyIHR5cGVzLCB0aGUgZXhwcmVzc2lvbiBpcyBpbnRlcnByZXRlZCBieSBHQ0MgYXMgYSByZWFkIG9mCit0aGUgdm9sYXRpbGUgb2JqZWN0OyBpbiB0aGUgb3RoZXIgY2FzZXMsIHRoZSBleHByZXNzaW9uIGlzIG9ubHkgZXZhbHVhdGVkCitmb3IgaXRzIHNpZGUtZWZmZWN0cy4KKworPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUkw3OC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JMNzgtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2ZhODYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JMNzgtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJMNzggT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQb3dlclBDLU9wdGlvbnMuaHRtbCNQb3dlclBDLU9wdGlvbnMiIHRpdGxlPSJQb3dlclBDIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyIgdGl0bGU9IlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSTDc4LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBvd2VyUEMtT3B0aW9ucy5odG1sI1Bvd2VyUEMtT3B0aW9ucyI+UG93ZXJQQyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjMzIFJMNzggT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJMNzgtT3B0aW9ucy0xOTA1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48Y29kZT4tbXNpbTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNpbS0xOTA2Ij48L2E+TGlua3MgaW4gYWRkaXRpb25hbCB0YXJnZXQgbGlicmFyaWVzIHRvIHN1cHBvcnQgb3BlcmF0aW9uIHdpdGhpbiBhCitzaW11bGF0b3IuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW11bD1ub25lPC9jb2RlPjxkdD48Y29kZT4tbW11bD1nMTM8L2NvZGU+PGR0Pjxjb2RlPi1tbXVsPXJsNzg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tdWwtMTkwNyI+PC9hPlNwZWNpZmllcyB0aGUgdHlwZSBvZiBoYXJkd2FyZSBtdWx0aXBsaWNhdGlvbiBzdXBwb3J0IHRvIGJlIHVzZWQuICBUaGUKK2RlZmF1bHQgaXMgPGNvZGU+bm9uZTwvY29kZT4sIHdoaWNoIHVzZXMgc29mdHdhcmUgbXVsdGlwbGljYXRpb24gZnVuY3Rpb25zLiAKK1RoZSA8Y29kZT5nMTM8L2NvZGU+IG9wdGlvbiBpcyBmb3IgdGhlIGhhcmR3YXJlIG11bHRpcGx5L2RpdmlkZSBwZXJpcGhlcmFsCitvbmx5IG9uIHRoZSBSTDc4L0cxMyB0YXJnZXRzLiAgVGhlIDxjb2RlPnJsNzg8L2NvZGU+IG9wdGlvbiBpcyBmb3IgdGhlCitzdGFuZGFyZCBoYXJkd2FyZSBtdWx0aXBsaWNhdGlvbiBkZWZpbmVkIGluIHRoZSBSTDc4IHNvZnR3YXJlIG1hbnVhbC4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNzY3YzYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDcxNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJMNzgtT3B0aW9ucy5odG1sI1JMNzgtT3B0aW9ucyIgdGl0bGU9IlJMNzggT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIiB0aXRsZT0iUlggT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSUyUyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+PC9hPgorPGEgbmFtZT0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJMNzgtT3B0aW9ucy5odG1sI1JMNzgtT3B0aW9ucyI+Ukw3OCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjM0IElCTSBSUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1SU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLTE5MDgiPjwvYT48YSBuYW1lPSJpbmRleC1JQk0tUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy0xOTA5Ij48L2E+CitUaGVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBJQk0gUlMvNjAwMCBhbmQgUG93ZXJQQzoKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tcG93ZXJwYy1ncG9wdDwvY29kZT48ZHQ+PGNvZGU+LW1uby1wb3dlcnBjLWdwb3B0PC9jb2RlPjxkdD48Y29kZT4tbXBvd2VycGMtZ2Z4b3B0PC9jb2RlPjxkdD48Y29kZT4tbW5vLXBvd2VycGMtZ2Z4b3B0PC9jb2RlPjxkdD48Y29kZT4tbXBvd2VycGM2NDwvY29kZT48ZHQ+PGNvZGU+LW1uby1wb3dlcnBjNjQ8L2NvZGU+PGR0Pjxjb2RlPi1tbWZjcmY8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbWZjcmY8L2NvZGU+PGR0Pjxjb2RlPi1tcG9wY250YjwvY29kZT48ZHQ+PGNvZGU+LW1uby1wb3BjbnRiPC9jb2RlPjxkdD48Y29kZT4tbXBvcGNudGQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcG9wY250ZDwvY29kZT48ZHQ+PGNvZGU+LW1mcHJuZDwvY29kZT48ZHQ+PGNvZGU+LW1uby1mcHJuZDwvY29kZT48ZHQ+PGNvZGU+LW1jbXBiPC9jb2RlPjxkdD48Y29kZT4tbW5vLWNtcGI8L2NvZGU+PGR0Pjxjb2RlPi1tbWZwZ3ByPC9jb2RlPjxkdD48Y29kZT4tbW5vLW1mcGdwcjwvY29kZT48ZHQ+PGNvZGU+LW1oYXJkLWRmcDwvY29kZT48ZHQ+PGNvZGU+LW1uby1oYXJkLWRmcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXBvd2VycGNfMDAyZGdwb3B0LTE5MTAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHBvd2VycGNfMDAyZGdwb3B0LTE5MTEiPjwvYT48YSBuYW1lPSJpbmRleC1tcG93ZXJwY18wMDJkZ2Z4b3B0LTE5MTIiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHBvd2VycGNfMDAyZGdmeG9wdC0xOTEzIj48L2E+PGEgbmFtZT0iaW5kZXgtbXBvd2VycGM2NC0xOTE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRwb3dlcnBjNjQtMTkxNSI+PC9hPjxhIG5hbWU9ImluZGV4LW1tZmNyZi0xOTE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRtZmNyZi0xOTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXBvcGNudGItMTkxOCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkcG9wY250Yi0xOTE5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXBvcGNudGQtMTkyMCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkcG9wY250ZC0xOTIxIj48L2E+PGEgbmFtZT0iaW5kZXgtbWZwcm5kLTE5MjIiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZwcm5kLTE5MjMiPjwvYT48YSBuYW1lPSJpbmRleC1tY21wYi0xOTI0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRjbXBiLTE5MjUiPjwvYT48YSBuYW1lPSJpbmRleC1tbWZwZ3ByLTE5MjYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZG1mcGdwci0xOTI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWhhcmRfMDAyZGRmcC0xOTI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRoYXJkXzAwMmRkZnAtMTkyOSI+PC9hPllvdSB1c2UgdGhlc2Ugb3B0aW9ucyB0byBzcGVjaWZ5IHdoaWNoIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRoZQorcHJvY2Vzc29yIHlvdSBhcmUgdXNpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGVzZSBvcHRpb25zIGlzCitkZXRlcm1pbmVkIHdoZW4gY29uZmlndXJpbmcgR0NDLiAgU3BlY2lmeWluZyB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PTwvc3Bhbj48dmFyPmNwdV90eXBlPC92YXI+PC9zYW1wPiBvdmVycmlkZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlc2UKK29wdGlvbnMuICBXZSByZWNvbW1lbmQgeW91IHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9PC9zcGFuPjx2YXI+Y3B1X3R5cGU8L3Zhcj48L3NhbXA+IG9wdGlvbgorcmF0aGVyIHRoYW4gdGhlIG9wdGlvbnMgbGlzdGVkIGFib3ZlLgorCisgICAgIDxwPlNwZWNpZnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wb3dlcnBjLWdwb3B0PC9zcGFuPjwvc2FtcD4gYWxsb3dzCitHQ0MgdG8gdXNlIHRoZSBvcHRpb25hbCBQb3dlclBDIGFyY2hpdGVjdHVyZSBpbnN0cnVjdGlvbnMgaW4gdGhlCitHZW5lcmFsIFB1cnBvc2UgZ3JvdXAsIGluY2x1ZGluZyBmbG9hdGluZy1wb2ludCBzcXVhcmUgcm9vdC4gIFNwZWNpZnlpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcG93ZXJwYy1nZnhvcHQ8L3NwYW4+PC9zYW1wPiBhbGxvd3MgR0NDIHRvCit1c2UgdGhlIG9wdGlvbmFsIFBvd2VyUEMgYXJjaGl0ZWN0dXJlIGluc3RydWN0aW9ucyBpbiB0aGUgR3JhcGhpY3MKK2dyb3VwLCBpbmNsdWRpbmcgZmxvYXRpbmctcG9pbnQgc2VsZWN0LgorCisgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW1mY3JmPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFsbG93cyBHQ0MgdG8gZ2VuZXJhdGUgdGhlIG1vdmUgZnJvbQorY29uZGl0aW9uIHJlZ2lzdGVyIGZpZWxkIGluc3RydWN0aW9uIGltcGxlbWVudGVkIG9uIHRoZSBQT1dFUjQKK3Byb2Nlc3NvciBhbmQgb3RoZXIgcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIFBvd2VyUEMgVjIuMDEKK2FyY2hpdGVjdHVyZS4gCitUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wb3BjbnRiPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFsbG93cyBHQ0MgdG8gZ2VuZXJhdGUgdGhlIHBvcGNvdW50IGFuZAorZG91YmxlLXByZWNpc2lvbiBGUCByZWNpcHJvY2FsIGVzdGltYXRlIGluc3RydWN0aW9uIGltcGxlbWVudGVkIG9uIHRoZQorUE9XRVI1IHByb2Nlc3NvciBhbmQgb3RoZXIgcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIFBvd2VyUEMgVjIuMDIKK2FyY2hpdGVjdHVyZS4gCitUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wb3BjbnRkPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFsbG93cyBHQ0MgdG8gZ2VuZXJhdGUgdGhlIHBvcGNvdW50CitpbnN0cnVjdGlvbiBpbXBsZW1lbnRlZCBvbiB0aGUgUE9XRVI3IHByb2Nlc3NvciBhbmQgb3RoZXIgcHJvY2Vzc29ycwordGhhdCBzdXBwb3J0IHRoZSBQb3dlclBDIFYyLjA2IGFyY2hpdGVjdHVyZS4gCitUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mcHJuZDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBhbGxvd3MgR0NDIHRvIGdlbmVyYXRlIHRoZSBGUCByb3VuZCB0bworaW50ZWdlciBpbnN0cnVjdGlvbnMgaW1wbGVtZW50ZWQgb24gdGhlIFBPV0VSNSsgcHJvY2Vzc29yIGFuZCBvdGhlcgorcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIFBvd2VyUEMgVjIuMDMgYXJjaGl0ZWN0dXJlLiAKK1RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNtcGI8L3NwYW4+PC9zYW1wPiBvcHRpb24gYWxsb3dzIEdDQyB0byBnZW5lcmF0ZSB0aGUgY29tcGFyZSBieXRlcworaW5zdHJ1Y3Rpb24gaW1wbGVtZW50ZWQgb24gdGhlIFBPV0VSNiBwcm9jZXNzb3IgYW5kIG90aGVyIHByb2Nlc3NvcnMKK3RoYXQgc3VwcG9ydCB0aGUgUG93ZXJQQyBWMi4wNSBhcmNoaXRlY3R1cmUuIAorVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbWZwZ3ByPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFsbG93cyBHQ0MgdG8gZ2VuZXJhdGUgdGhlIEZQIG1vdmUgdG8vZnJvbQorZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIGluc3RydWN0aW9ucyBpbXBsZW1lbnRlZCBvbiB0aGUgUE9XRVI2WAorcHJvY2Vzc29yIGFuZCBvdGhlciBwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCB0aGUgZXh0ZW5kZWQgUG93ZXJQQyBWMi4wNQorYXJjaGl0ZWN0dXJlLiAKK1RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWhhcmQtZGZwPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFsbG93cyBHQ0MgdG8gZ2VuZXJhdGUgdGhlIGRlY2ltYWwKK2Zsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBpbXBsZW1lbnRlZCBvbiBzb21lIFBPV0VSIHByb2Nlc3NvcnMuCisKKyAgICAgPHA+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcG93ZXJwYzY0PC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFsbG93cyBHQ0MgdG8gZ2VuZXJhdGUgdGhlIGFkZGl0aW9uYWwKKzY0LWJpdCBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgZm91bmQgaW4gdGhlIGZ1bGwgUG93ZXJQQzY0IGFyY2hpdGVjdHVyZQorYW5kIHRvIHRyZWF0IEdQUnMgYXMgNjQtYml0LCBkb3VibGV3b3JkIHF1YW50aXRpZXMuICBHQ0MgZGVmYXVsdHMgdG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tcG93ZXJwYzY0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5jcHVfdHlwZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY3B1LTE5MzAiPjwvYT5TZXQgYXJjaGl0ZWN0dXJlIHR5cGUsIHJlZ2lzdGVyIHVzYWdlLCBhbmQKK2luc3RydWN0aW9uIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBmb3IgbWFjaGluZSB0eXBlIDx2YXI+Y3B1X3R5cGU8L3Zhcj4uIAorU3VwcG9ydGVkIHZhbHVlcyBmb3IgPHZhcj5jcHVfdHlwZTwvdmFyPiBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40MDE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NDAzPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40MDU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NDA1ZnA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NDQwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjQ0MGZwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjQ2NDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj40NjRmcDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NDc2PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjQ3NmZwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjUwNTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj42MDE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjAyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjYwMzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjAzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj42MDQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjA0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj42MjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjMwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjc0MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NzQwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj43NDUwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjc1MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj44MDE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ODIxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjgyMzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ODYwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjk3MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj44NTQwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmEyPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmUzMDBjMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZTMwMGMzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmU1MDBtYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lNTAwbWM2NDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lNTUwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZTY1MDA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZWM2MDNlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkczPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkc0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkc1PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50aXRhbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3dlcjM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cG93ZXI0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvd2VyNTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3dlcjUrPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3dlcjY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cG93ZXI2eDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3dlcjc8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cG93ZXI4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvd2VycGM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvd2VycGM2NDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cnM2NDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1wb3dlcnBjPC9zcGFuPjwvc2FtcD4sIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1wb3dlcnBjNjQ8L3NwYW4+PC9zYW1wPiBzcGVjaWZ5IHB1cmUgMzItYml0CitQb3dlclBDIGFuZCA2NC1iaXQgUG93ZXJQQyBhcmNoaXRlY3R1cmUgbWFjaGluZQordHlwZXMsIHdpdGggYW4gYXBwcm9wcmlhdGUsIGdlbmVyaWMgcHJvY2Vzc29yIG1vZGVsIGFzc3VtZWQgZm9yCitzY2hlZHVsaW5nIHB1cnBvc2VzLgorCisgICAgIDxwPlRoZSBvdGhlciBvcHRpb25zIHNwZWNpZnkgYSBzcGVjaWZpYyBwcm9jZXNzb3IuICBDb2RlIGdlbmVyYXRlZCB1bmRlcgordGhvc2Ugb3B0aW9ucyBydW5zIGJlc3Qgb24gdGhhdCBwcm9jZXNzb3IsIGFuZCBtYXkgbm90IHJ1biBhdCBhbGwgb24KK290aGVycy4KKworICAgICA8cD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGF1dG9tYXRpY2FsbHkgZW5hYmxlIG9yIGRpc2FibGUgdGhlCitmb2xsb3dpbmcgb3B0aW9uczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtbWFsdGl2ZWMgIC1tZnBybmQgIC1taGFyZC1mbG9hdCAgLW1tZmNyZiAgLW1tdWx0aXBsZSAKKyAgICAgICAgICAtbXBvcGNudGIgLW1wb3BjbnRkICAtbXBvd2VycGM2NCAKKyAgICAgICAgICAtbXBvd2VycGMtZ3BvcHQgIC1tcG93ZXJwYy1nZnhvcHQgIC1tc2luZ2xlLWZsb2F0IC1tZG91YmxlLWZsb2F0IAorICAgICAgICAgIC1tc2ltcGxlLWZwdSAtbXN0cmluZyAgLW1tdWxodyAgLW1kbG16YiAgLW1tZnBncHIgLW12c3gKKzwvcHJlPgorICAgICA8cD5UaGUgcGFydGljdWxhciBvcHRpb25zIHNldCBmb3IgYW55IHBhcnRpY3VsYXIgQ1BVIHZhcmllcyBiZXR3ZWVuCitjb21waWxlciB2ZXJzaW9ucywgZGVwZW5kaW5nIG9uIHdoYXQgc2V0dGluZyBzZWVtcyB0byBwcm9kdWNlIG9wdGltYWwKK2NvZGUgZm9yIHRoYXQgQ1BVOyBpdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IHJlZmxlY3QgdGhlIGFjdHVhbCBoYXJkd2FyZSdzCitjYXBhYmlsaXRpZXMuICBJZiB5b3Ugd2lzaCB0byBzZXQgYW4gaW5kaXZpZHVhbCBvcHRpb24gdG8gYSBwYXJ0aWN1bGFyCit2YWx1ZSwgeW91IG1heSBzcGVjaWZ5IGl0IGFmdGVyIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdTwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgbGlrZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9OTcwIC1tbm8tYWx0aXZlYzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPk9uIEFJWCwgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWx0aXZlYzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXBvd2VycGM2NDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgYXJlCitub3QgZW5hYmxlZCBvciBkaXNhYmxlZCBieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiBvcHRpb24gYXQgcHJlc2VudCBiZWNhdXNlCitBSVggZG9lcyBub3QgaGF2ZSBmdWxsIHN1cHBvcnQgZm9yIHRoZXNlIG9wdGlvbnMuICBZb3UgbWF5IHN0aWxsCitlbmFibGUgb3IgZGlzYWJsZSB0aGVtIGluZGl2aWR1YWxseSBpZiB5b3UncmUgc3VyZSBpdCdsbCB3b3JrIGluIHlvdXIKK2Vudmlyb25tZW50LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10dW5lPTwvY29kZT48dmFyPmNwdV90eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW10dW5lLTE5MzEiPjwvYT5TZXQgdGhlIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBmb3IgbWFjaGluZSB0eXBlCis8dmFyPmNwdV90eXBlPC92YXI+LCBidXQgZG8gbm90IHNldCB0aGUgYXJjaGl0ZWN0dXJlIHR5cGUgb3IgcmVnaXN0ZXIgdXNhZ2UsCithcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT08L3NwYW4+PHZhcj5jcHVfdHlwZTwvdmFyPjwvc2FtcD4gZG9lcy4gIFRoZSBzYW1lCit2YWx1ZXMgZm9yIDx2YXI+Y3B1X3R5cGU8L3Zhcj4gYXJlIHVzZWQgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZTwvc3Bhbj48L3NhbXA+IGFzIGZvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPi4gIElmIGJvdGggYXJlIHNwZWNpZmllZCwgdGhlIGNvZGUgZ2VuZXJhdGVkIHVzZXMgdGhlCithcmNoaXRlY3R1cmUgYW5kIHJlZ2lzdGVycyBzZXQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiwgYnV0IHRoZQorc2NoZWR1bGluZyBwYXJhbWV0ZXJzIHNldCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXR1bmU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY21vZGVsPXNtYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY21vZGVsXzAwM2RzbWFsbC0xOTMyIj48L2E+R2VuZXJhdGUgUG93ZXJQQzY0IGNvZGUgZm9yIHRoZSBzbWFsbCBtb2RlbDogVGhlIFRPQyBpcyBsaW1pdGVkIHRvCis2NGsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNtb2RlbD1tZWRpdW08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jbW9kZWxfMDAzZG1lZGl1bS0xOTMzIj48L2E+R2VuZXJhdGUgUG93ZXJQQzY0IGNvZGUgZm9yIHRoZSBtZWRpdW0gbW9kZWw6IFRoZSBUT0MgYW5kIG90aGVyIHN0YXRpYworZGF0YSBtYXkgYmUgdXAgdG8gYSB0b3RhbCBvZiA0RyBpbiBzaXplLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jbW9kZWw9bGFyZ2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jbW9kZWxfMDAzZGxhcmdlLTE5MzQiPjwvYT5HZW5lcmF0ZSBQb3dlclBDNjQgY29kZSBmb3IgdGhlIGxhcmdlIG1vZGVsOiBUaGUgVE9DIG1heSBiZSB1cCB0byA0RworaW4gc2l6ZS4gIE90aGVyIGRhdGEgYW5kIGNvZGUgaXMgb25seSBsaW1pdGVkIGJ5IHRoZSA2NC1iaXQgYWRkcmVzcworc3BhY2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFsdGl2ZWM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tYWx0aXZlYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFsdGl2ZWMtMTkzNSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYWx0aXZlYy0xOTM2Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgQWx0aVZlYyBpbnN0cnVjdGlvbnMsIGFuZCBhbHNvCitlbmFibGUgdGhlIHVzZSBvZiBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBhbGxvdyBtb3JlIGRpcmVjdCBhY2Nlc3MgdG8KK3RoZSBBbHRpVmVjIGluc3RydWN0aW9uIHNldC4gIFlvdSBtYXkgYWxzbyBuZWVkIHRvIHNldAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hYmk9YWx0aXZlYzwvc3Bhbj48L3NhbXA+IHRvIGFkanVzdCB0aGUgY3VycmVudCBBQkkgd2l0aCBBbHRpVmVjIEFCSQorZW5oYW5jZW1lbnRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW12cnNhdmU8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tdnJzYXZlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdnJzYXZlLTE5MzciPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHZyc2F2ZS0xOTM4Ij48L2E+R2VuZXJhdGUgVlJTQVZFIGluc3RydWN0aW9ucyB3aGVuIGdlbmVyYXRpbmcgQWx0aVZlYyBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1nZW4tY2VsbC1taWNyb2NvZGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1nZW5fMDAyZGNlbGxfMDAyZG1pY3JvY29kZS0xOTM5Ij48L2E+R2VuZXJhdGUgQ2VsbCBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW13YXJuLWNlbGwtbWljcm9jb2RlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1td2Fybl8wMDJkY2VsbF8wMDJkbWljcm9jb2RlLTE5NDAiPjwvYT5XYXJuIHdoZW4gYSBDZWxsIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBpcyBlbWl0dGVkLiAgQW4gZXhhbXBsZQorb2YgYSBDZWxsIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBpcyBhIHZhcmlhYmxlIHNoaWZ0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zZWN1cmUtcGx0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2VjdXJlXzAwMmRwbHQtMTk0MSI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZC5zbzwvc3Bhbj48L3NhbXA+Cit0byBidWlsZCBleGVjdXRhYmxlcyBhbmQgc2hhcmVkCitsaWJyYXJpZXMgd2l0aCBub24tZXhlY3V0YWJsZSA8Y29kZT4ucGx0PC9jb2RlPiBhbmQgPGNvZGU+LmdvdDwvY29kZT4gc2VjdGlvbnMuIAorVGhpcyBpcyBhIFBvd2VyUEMKKzMyLWJpdCBTWVNWIEFCSSBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJzcy1wbHQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ic3NfMDAyZHBsdC0xOTQyIj48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgYSBCU1MgPGNvZGU+LnBsdDwvY29kZT4gc2VjdGlvbiB0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZC5zbzwvc3Bhbj48L3NhbXA+CitmaWxscyBpbiwgYW5kCityZXF1aXJlcyA8Y29kZT4ucGx0PC9jb2RlPiBhbmQgPGNvZGU+LmdvdDwvY29kZT4KK3NlY3Rpb25zIHRoYXQgYXJlIGJvdGggd3JpdGFibGUgYW5kIGV4ZWN1dGFibGUuIAorVGhpcyBpcyBhIFBvd2VyUEMgMzItYml0IFNZU1YgQUJJIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taXNlbDwvY29kZT48ZHQ+PGNvZGU+LW1uby1pc2VsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taXNlbC0xOTQzIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRpc2VsLTE5NDQiPjwvYT5UaGlzIHN3aXRjaCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIElTRUwgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pc2VsPTwvY29kZT48dmFyPnllcy9ubzwvdmFyPjxkZD5UaGlzIHN3aXRjaCBoYXMgYmVlbiBkZXByZWNhdGVkLiAgVXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taXNlbDwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1pc2VsPC9zcGFuPjwvc2FtcD4gaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3BlPC9jb2RlPjxkdD48Y29kZT4tbW5vLXNwZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNwZS0xOTQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzcGUtMTk0NiI+PC9hPlRoaXMgc3dpdGNoIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgU1BFIHNpbWQKK2luc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcGFpcmVkPC9jb2RlPjxkdD48Y29kZT4tbW5vLXBhaXJlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXBhaXJlZC0xOTQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRwYWlyZWQtMTk0OCI+PC9hPlRoaXMgc3dpdGNoIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgUEFJUkVEIHNpbWQKK2luc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3BlPTwvY29kZT48dmFyPnllcy9ubzwvdmFyPjxkZD5UaGlzIG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkLiAgVXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3BlPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXNwZTwvc3Bhbj48L3NhbXA+IGluc3RlYWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXZzeDwvY29kZT48ZHQ+PGNvZGU+LW1uby12c3g8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW12c3gtMTk0OSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkdnN4LTE5NTAiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB2ZWN0b3Ivc2NhbGFyIChWU1gpCitpbnN0cnVjdGlvbnMsIGFuZCBhbHNvIGVuYWJsZSB0aGUgdXNlIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGF0IGFsbG93Cittb3JlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFZTWCBpbnN0cnVjdGlvbiBzZXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZsb2F0LWdwcnM9PC9jb2RlPjx2YXI+eWVzL3NpbmdsZS9kb3VibGUvbm88L3Zhcj48ZHQ+PGNvZGU+LW1mbG9hdC1ncHJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZmxvYXRfMDAyZGdwcnMtMTk1MSI+PC9hPlRoaXMgc3dpdGNoIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgZmxvYXRpbmctcG9pbnQKK29wZXJhdGlvbnMgb24gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdAorc3VwcG9ydCBpdC4KKworICAgICA8cD5UaGUgYXJndW1lbnQgPHZhcj55ZXM8L3Zhcj4gb3IgPHZhcj5zaW5nbGU8L3Zhcj4gZW5hYmxlcyB0aGUgdXNlIG9mCitzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuCisKKyAgICAgPHA+VGhlIGFyZ3VtZW50IDx2YXI+ZG91YmxlPC92YXI+IGVuYWJsZXMgdGhlIHVzZSBvZiBzaW5nbGUgYW5kCitkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuCisKKyAgICAgPHA+VGhlIGFyZ3VtZW50IDx2YXI+bm88L3Zhcj4gZGlzYWJsZXMgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBvbiB0aGUKK2dlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBNUEM4NTR4LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0zMjwvY29kZT48ZHQ+PGNvZGU+LW02NDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTMyLTE5NTIiPjwvYT48YSBuYW1lPSJpbmRleC1tNjQtMTk1MyI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIDMyLWJpdCBvciA2NC1iaXQgZW52aXJvbm1lbnRzIG9mIERhcndpbiBhbmQgU1ZSNAordGFyZ2V0cyAoaW5jbHVkaW5nIEdOVS9MaW51eCkuICBUaGUgMzItYml0IGVudmlyb25tZW50IHNldHMgaW50LCBsb25nCithbmQgcG9pbnRlciB0byAzMiBiaXRzIGFuZCBnZW5lcmF0ZXMgY29kZSB0aGF0IHJ1bnMgb24gYW55IFBvd2VyUEMKK3ZhcmlhbnQuICBUaGUgNjQtYml0IGVudmlyb25tZW50IHNldHMgaW50IHRvIDMyIGJpdHMgYW5kIGxvbmcgYW5kCitwb2ludGVyIHRvIDY0IGJpdHMsIGFuZCBnZW5lcmF0ZXMgY29kZSBmb3IgUG93ZXJQQzY0LCBhcyBmb3IKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcG93ZXJwYzY0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZ1bGwtdG9jPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZwLWluLXRvYzwvY29kZT48ZHQ+PGNvZGU+LW1uby1zdW0taW4tdG9jPC9jb2RlPjxkdD48Y29kZT4tbW1pbmltYWwtdG9jPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZnVsbF8wMDJkdG9jLTE5NTQiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZwXzAwMmRpbl8wMDJkdG9jLTE5NTUiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHN1bV8wMDJkaW5fMDAyZHRvYy0xOTU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW1pbmltYWxfMDAyZHRvYy0xOTU3Ij48L2E+TW9kaWZ5IGdlbmVyYXRpb24gb2YgdGhlIFRPQyAoVGFibGUgT2YgQ29udGVudHMpLCB3aGljaCBpcyBjcmVhdGVkIGZvcgorZXZlcnkgZXhlY3V0YWJsZSBmaWxlLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnVsbC10b2M8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgc2VsZWN0ZWQgYnkKK2RlZmF1bHQuICBJbiB0aGF0IGNhc2UsIEdDQyBhbGxvY2F0ZXMgYXQgbGVhc3Qgb25lIFRPQyBlbnRyeSBmb3IKK2VhY2ggdW5pcXVlIG5vbi1hdXRvbWF0aWMgdmFyaWFibGUgcmVmZXJlbmNlIGluIHlvdXIgcHJvZ3JhbS4gIEdDQworYWxzbyBwbGFjZXMgZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzIGluIHRoZSBUT0MuICBIb3dldmVyLCBvbmx5CisxNiwzODQgZW50cmllcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBUT0MuCisKKyAgICAgPHA+SWYgeW91IHJlY2VpdmUgYSBsaW5rZXIgZXJyb3IgbWVzc2FnZSB0aGF0IHNheWluZyB5b3UgaGF2ZSBvdmVyZmxvd2VkCit0aGUgYXZhaWxhYmxlIFRPQyBzcGFjZSwgeW91IGNhbiByZWR1Y2UgdGhlIGFtb3VudCBvZiBUT0Mgc3BhY2UgdXNlZAord2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1mcC1pbi10b2M8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1zdW0taW4tdG9jPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWZwLWluLXRvYzwvc3Bhbj48L3NhbXA+IHByZXZlbnRzIEdDQyBmcm9tIHB1dHRpbmcgZmxvYXRpbmctcG9pbnQKK2NvbnN0YW50cyBpbiB0aGUgVE9DIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXN1bS1pbi10b2M8L3NwYW4+PC9zYW1wPiBmb3JjZXMgR0NDIHRvCitnZW5lcmF0ZSBjb2RlIHRvIGNhbGN1bGF0ZSB0aGUgc3VtIG9mIGFuIGFkZHJlc3MgYW5kIGEgY29uc3RhbnQgYXQKK3J1biB0aW1lIGluc3RlYWQgb2YgcHV0dGluZyB0aGF0IHN1bSBpbnRvIHRoZSBUT0MuICBZb3UgbWF5IHNwZWNpZnkgb25lCitvciBib3RoIG9mIHRoZXNlIG9wdGlvbnMuICBFYWNoIGNhdXNlcyBHQ0MgdG8gcHJvZHVjZSB2ZXJ5IHNsaWdodGx5CitzbG93ZXIgYW5kIGxhcmdlciBjb2RlIGF0IHRoZSBleHBlbnNlIG9mIGNvbnNlcnZpbmcgVE9DIHNwYWNlLgorCisgICAgIDxwPklmIHlvdSBzdGlsbCBydW4gb3V0IG9mIHNwYWNlIGluIHRoZSBUT0MgZXZlbiB3aGVuIHlvdSBzcGVjaWZ5IGJvdGggb2YKK3RoZXNlIG9wdGlvbnMsIHNwZWNpZnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1taW5pbWFsLXRvYzwvc3Bhbj48L3NhbXA+IGluc3RlYWQuICBUaGlzIG9wdGlvbiBjYXVzZXMKK0dDQyB0byBtYWtlIG9ubHkgb25lIFRPQyBlbnRyeSBmb3IgZXZlcnkgZmlsZS4gIFdoZW4geW91IHNwZWNpZnkgdGhpcworb3B0aW9uLCBHQ0MgcHJvZHVjZXMgY29kZSB0aGF0IGlzIHNsb3dlciBhbmQgbGFyZ2VyIGJ1dCB3aGljaAordXNlcyBleHRyZW1lbHkgbGl0dGxlIFRPQyBzcGFjZS4gIFlvdSBtYXkgd2lzaCB0byB1c2UgdGhpcyBvcHRpb24KK29ubHkgb24gZmlsZXMgdGhhdCBjb250YWluIGxlc3MgZnJlcXVlbnRseS1leGVjdXRlZCBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1haXg2NDwvY29kZT48ZHQ+PGNvZGU+LW1haXgzMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFpeDY0LTE5NTgiPjwvYT48YSBuYW1lPSJpbmRleC1tYWl4MzItMTk1OSI+PC9hPkVuYWJsZSA2NC1iaXQgQUlYIEFCSSBhbmQgY2FsbGluZyBjb252ZW50aW9uOiA2NC1iaXQgcG9pbnRlcnMsIDY0LWJpdAorPGNvZGU+bG9uZzwvY29kZT4gdHlwZSwgYW5kIHRoZSBpbmZyYXN0cnVjdHVyZSBuZWVkZWQgdG8gc3VwcG9ydCB0aGVtLiAKK1NwZWNpZnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1haXg2NDwvc3Bhbj48L3NhbXA+IGltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wb3dlcnBjNjQ8L3NwYW4+PC9zYW1wPiwKK3doaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWl4MzI8L3NwYW4+PC9zYW1wPiBkaXNhYmxlcyB0aGUgNjQtYml0IEFCSSBhbmQKK2ltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1wb3dlcnBjNjQ8L3NwYW4+PC9zYW1wPi4gIEdDQyBkZWZhdWx0cyB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFpeDMyPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXhsLWNvbXBhdDwvY29kZT48ZHQ+PGNvZGU+LW1uby14bC1jb21wYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW14bF8wMDJkY29tcGF0LTE5NjAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHhsXzAwMmRjb21wYXQtMTk2MSI+PC9hPlByb2R1Y2UgY29kZSB0aGF0IGNvbmZvcm1zIG1vcmUgY2xvc2VseSB0byBJQk0gWEwgY29tcGlsZXIgc2VtYW50aWNzCit3aGVuIHVzaW5nIEFJWC1jb21wYXRpYmxlIEFCSS4gIFBhc3MgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzIHRvCitwcm90b3R5cGVkIGZ1bmN0aW9ucyBiZXlvbmQgdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYSAoUlNBKSBvbiB0aGUgc3RhY2sKK2luIGFkZGl0aW9uIHRvIGFyZ3VtZW50IEZQUnMuICBEbyBub3QgYXNzdW1lIHRoYXQgbW9zdCBzaWduaWZpY2FudAorZG91YmxlIGluIDEyOC1iaXQgbG9uZyBkb3VibGUgdmFsdWUgaXMgcHJvcGVybHkgcm91bmRlZCB3aGVuIGNvbXBhcmluZwordmFsdWVzIGFuZCBjb252ZXJ0aW5nIHRvIGRvdWJsZS4gIFVzZSBYTCBzeW1ib2wgbmFtZXMgZm9yIGxvbmcgZG91YmxlCitzdXBwb3J0IHJvdXRpbmVzLgorCisgICAgIDxwPlRoZSBBSVggY2FsbGluZyBjb252ZW50aW9uIHdhcyBleHRlbmRlZCBidXQgbm90IGluaXRpYWxseSBkb2N1bWVudGVkIHRvCitoYW5kbGUgYW4gb2JzY3VyZSBLJmFtcDtSIEMgY2FzZSBvZiBjYWxsaW5nIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUKK2FkZHJlc3Mgb2YgaXRzIGFyZ3VtZW50cyB3aXRoIGZld2VyIGFyZ3VtZW50cyB0aGFuIGRlY2xhcmVkLiAgSUJNIFhMCitjb21waWxlcnMgYWNjZXNzIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cyB0aGF0IGRvIG5vdCBmaXQgaW4gdGhlCitSU0EgZnJvbSB0aGUgc3RhY2sgd2hlbiBhIHN1YnJvdXRpbmUgaXMgY29tcGlsZWQgd2l0aG91dAorb3B0aW1pemF0aW9uLiAgQmVjYXVzZSBhbHdheXMgc3RvcmluZyBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMgb24gdGhlCitzdGFjayBpcyBpbmVmZmljaWVudCBhbmQgcmFyZWx5IG5lZWRlZCwgdGhpcyBvcHRpb24gaXMgbm90IGVuYWJsZWQgYnkKK2RlZmF1bHQgYW5kIG9ubHkgaXMgbmVjZXNzYXJ5IHdoZW4gY2FsbGluZyBzdWJyb3V0aW5lcyBjb21waWxlZCBieSBJQk0KK1hMIGNvbXBpbGVycyB3aXRob3V0IG9wdGltaXphdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wZS0xOTYyIj48L2E+U3VwcG9ydCA8ZGZuPklCTSBSUy82MDAwIFNQPC9kZm4+IDxkZm4+UGFyYWxsZWwgRW52aXJvbm1lbnQ8L2Rmbj4gKFBFKS4gIExpbmsgYW4KK2FwcGxpY2F0aW9uIHdyaXR0ZW4gdG8gdXNlIG1lc3NhZ2UgcGFzc2luZyB3aXRoIHNwZWNpYWwgc3RhcnR1cCBjb2RlIHRvCitlbmFibGUgdGhlIGFwcGxpY2F0aW9uIHRvIHJ1bi4gIFRoZSBzeXN0ZW0gbXVzdCBoYXZlIFBFIGluc3RhbGxlZCBpbiB0aGUKK3N0YW5kYXJkIGxvY2F0aW9uICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3Vzci9scHAvcHBlLnBvZS88L3NwYW4+PC9zYW1wPiksIG9yIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3BlY3M8L3NwYW4+PC9zYW1wPiBmaWxlCittdXN0IGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXNwZWNzPTwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byBzcGVjaWZ5IHRoZQorYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGxvY2F0aW9uLiAgVGhlIFBhcmFsbGVsIEVudmlyb25tZW50IGRvZXMgbm90CitzdXBwb3J0IHRocmVhZHMsIHNvIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXBlPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFuZCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXB0aHJlYWQ8L3NwYW4+PC9zYW1wPgorb3B0aW9uIGFyZSBpbmNvbXBhdGlibGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFsaWduLW5hdHVyYWw8L2NvZGU+PGR0Pjxjb2RlPi1tYWxpZ24tcG93ZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hbGlnbl8wMDJkbmF0dXJhbC0xOTYzIj48L2E+PGEgbmFtZT0iaW5kZXgtbWFsaWduXzAwMmRwb3dlci0xOTY0Ij48L2E+T24gQUlYLCAzMi1iaXQgRGFyd2luLCBhbmQgNjQtYml0IFBvd2VyUEMgR05VL0xpbnV4LCB0aGUgb3B0aW9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFsaWduLW5hdHVyYWw8L3NwYW4+PC9zYW1wPiBvdmVycmlkZXMgdGhlIEFCSS1kZWZpbmVkIGFsaWdubWVudCBvZiBsYXJnZXIKK3R5cGVzLCBzdWNoIGFzIGZsb2F0aW5nLXBvaW50IGRvdWJsZXMsIG9uIHRoZWlyIG5hdHVyYWwgc2l6ZS1iYXNlZCBib3VuZGFyeS4gCitUaGUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWxpZ24tcG93ZXI8L3NwYW4+PC9zYW1wPiBpbnN0cnVjdHMgR0NDIHRvIGZvbGxvdyB0aGUgQUJJLXNwZWNpZmllZAorYWxpZ25tZW50IHJ1bGVzLiAgR0NDIGRlZmF1bHRzIHRvIHRoZSBzdGFuZGFyZCBhbGlnbm1lbnQgZGVmaW5lZCBpbiB0aGUgQUJJLgorCisgICAgIDxwPk9uIDY0LWJpdCBEYXJ3aW4sIG5hdHVyYWwgYWxpZ25tZW50IGlzIHRoZSBkZWZhdWx0LCBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hbGlnbi1wb3dlcjwvc3Bhbj48L3NhbXA+CitpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zb2Z0LWZsb2F0PC9jb2RlPjxkdD48Y29kZT4tbWhhcmQtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zb2Z0XzAwMmRmbG9hdC0xOTY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWhhcmRfMDAyZGZsb2F0LTE5NjYiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgZG9lcyBub3QgdXNlICh1c2VzKSB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0LiAKK1NvZnR3YXJlIGZsb2F0aW5nLXBvaW50IGVtdWxhdGlvbiBpcyBwcm92aWRlZCBpZiB5b3UgdXNlIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zb2Z0LWZsb2F0PC9zcGFuPjwvc2FtcD4gb3B0aW9uLCBhbmQgcGFzcyB0aGUgb3B0aW9uIHRvIEdDQyB3aGVuIGxpbmtpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNpbmdsZS1mbG9hdDwvY29kZT48ZHQ+PGNvZGU+LW1kb3VibGUtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW5nbGVfMDAyZGZsb2F0LTE5NjciPjwvYT48YSBuYW1lPSJpbmRleC1tZG91YmxlXzAwMmRmbG9hdC0xOTY4Ij48L2E+R2VuZXJhdGUgY29kZSBmb3Igc2luZ2xlLSBvciBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1kb3VibGUtZmxvYXQ8L3NwYW4+PC9zYW1wPiBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc2luZ2xlLWZsb2F0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNpbXBsZS1mcHU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW1wbGVfMDAyZGZwdS0xOTY5Ij48L2E+RG8gbm90IGdlbmVyYXRlIDxjb2RlPnNxcnQ8L2NvZGU+IGFuZCA8Y29kZT5kaXY8L2NvZGU+IGluc3RydWN0aW9ucyBmb3IgaGFyZHdhcmUKK2Zsb2F0aW5nLXBvaW50IHVuaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZwdT08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1mcHUtMTk3MCI+PC9hPlNwZWNpZnkgdHlwZSBvZiBmbG9hdGluZy1wb2ludCB1bml0LiAgVmFsaWQgdmFsdWVzIGZvciA8dmFyPm5hbWU8L3Zhcj4gYXJlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNwX2xpdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zaW5nbGUtZmxvYXQgLW1zaW1wbGUtZnB1PC9zcGFuPjwvc2FtcD4pLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kcF9saXRlPC9zcGFuPjwvc2FtcD4mcnNxdW87IChlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZG91YmxlLWZsb2F0IC1tc2ltcGxlLWZwdTwvc3Bhbj48L3NhbXA+KSwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3BfZnVsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoZXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNpbmdsZS1mbG9hdDwvc3Bhbj48L3NhbXA+KSwKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRwX2Z1bGw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1kb3VibGUtZmxvYXQ8L3NwYW4+PC9zYW1wPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXhpbGlueC1mcHU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW14aWxpbnhfMDAyZGZwdS0xOTcxIj48L2E+UGVyZm9ybSBvcHRpbWl6YXRpb25zIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdW5pdCBvbiBYaWxpbnggUFBDIDQwNS80NDAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW11bHRpcGxlPC9jb2RlPjxkdD48Y29kZT4tbW5vLW11bHRpcGxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbXVsdGlwbGUtMTk3MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbXVsdGlwbGUtMTk3MyI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBsb2FkIG11bHRpcGxlIHdvcmQKK2luc3RydWN0aW9ucyBhbmQgdGhlIHN0b3JlIG11bHRpcGxlIHdvcmQgaW5zdHJ1Y3Rpb25zLiAgVGhlc2UKK2luc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgb24gUE9XRVIgc3lzdGVtcywgYW5kIG5vdAorZ2VuZXJhdGVkIG9uIFBvd2VyUEMgc3lzdGVtcy4gIERvIG5vdCB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1tdWx0aXBsZTwvc3Bhbj48L3NhbXA+IG9uIGxpdHRsZS1lbmRpYW4KK1Bvd2VyUEMgc3lzdGVtcywgc2luY2UgdGhvc2UgaW5zdHJ1Y3Rpb25zIGRvIG5vdCB3b3JrIHdoZW4gdGhlCitwcm9jZXNzb3IgaXMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLiAgVGhlIGV4Y2VwdGlvbnMgYXJlIFBQQzc0MCBhbmQKK1BQQzc1MCB3aGljaCBwZXJtaXQgdGhlc2UgaW5zdHJ1Y3Rpb25zIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3RyaW5nPC9jb2RlPjxkdD48Y29kZT4tbW5vLXN0cmluZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXN0cmluZy0xOTc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzdHJpbmctMTk3NSI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBsb2FkIHN0cmluZyBpbnN0cnVjdGlvbnMKK2FuZCB0aGUgc3RvcmUgc3RyaW5nIHdvcmQgaW5zdHJ1Y3Rpb25zIHRvIHNhdmUgbXVsdGlwbGUgcmVnaXN0ZXJzIGFuZAorZG8gc21hbGwgYmxvY2sgbW92ZXMuICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IG9uCitQT1dFUiBzeXN0ZW1zLCBhbmQgbm90IGdlbmVyYXRlZCBvbiBQb3dlclBDIHN5c3RlbXMuICBEbyBub3QgdXNlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXN0cmluZzwvc3Bhbj48L3NhbXA+IG9uIGxpdHRsZS1lbmRpYW4gUG93ZXJQQyBzeXN0ZW1zLCBzaW5jZSB0aG9zZQoraW5zdHJ1Y3Rpb25zIGRvIG5vdCB3b3JrIHdoZW4gdGhlIHByb2Nlc3NvciBpcyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuIAorVGhlIGV4Y2VwdGlvbnMgYXJlIFBQQzc0MCBhbmQgUFBDNzUwIHdoaWNoIHBlcm1pdCB0aGVzZSBpbnN0cnVjdGlvbnMKK2luIGxpdHRsZS1lbmRpYW4gbW9kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdXBkYXRlPC9jb2RlPjxkdD48Y29kZT4tbW5vLXVwZGF0ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXVwZGF0ZS0xOTc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR1cGRhdGUtMTk3NyI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBsb2FkIG9yIHN0b3JlIGluc3RydWN0aW9ucwordGhhdCB1cGRhdGUgdGhlIGJhc2UgcmVnaXN0ZXIgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGNhbGN1bGF0ZWQgbWVtb3J5Citsb2NhdGlvbi4gIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQuICBJZiB5b3UgdXNlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXVwZGF0ZTwvc3Bhbj48L3NhbXA+LCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBiZXR3ZWVuIHRoZSB0aW1lIHRoYXQgdGhlCitzdGFjayBwb2ludGVyIGlzIHVwZGF0ZWQgYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyBmcmFtZSBpcworc3RvcmVkLCB3aGljaCBtZWFucyBjb2RlIHRoYXQgd2Fsa3MgdGhlIHN0YWNrIGZyYW1lIGFjcm9zcyBpbnRlcnJ1cHRzIG9yCitzaWduYWxzIG1heSBnZXQgY29ycnVwdGVkIGRhdGEuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWF2b2lkLWluZGV4ZWQtYWRkcmVzc2VzPC9jb2RlPjxkdD48Y29kZT4tbW5vLWF2b2lkLWluZGV4ZWQtYWRkcmVzc2VzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYXZvaWRfMDAyZGluZGV4ZWRfMDAyZGFkZHJlc3Nlcy0xOTc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRhdm9pZF8wMDJkaW5kZXhlZF8wMDJkYWRkcmVzc2VzLTE5NzkiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdHJpZXMgdG8gYXZvaWQgKG5vdCBhdm9pZCkgdGhlIHVzZSBvZiBpbmRleGVkIGxvYWQKK29yIHN0b3JlIGluc3RydWN0aW9ucy4gVGhlc2UgaW5zdHJ1Y3Rpb25zIGNhbiBpbmN1ciBhIHBlcmZvcm1hbmNlCitwZW5hbHR5IG9uIFBvd2VyNiBwcm9jZXNzb3JzIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgc3VjaCBhcyB3aGVuCitzdGVwcGluZyB0aHJvdWdoIGxhcmdlIGFycmF5cyB0aGF0IGNyb3NzIGEgMTZNIGJvdW5kYXJ5LiAgVGhpcyBvcHRpb24KK2lzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRhcmdldGluZyBQb3dlcjYgYW5kIGRpc2FibGVkIG90aGVyd2lzZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZnVzZWQtbWFkZDwvY29kZT48ZHQ+PGNvZGU+LW1uby1mdXNlZC1tYWRkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZnVzZWRfMDAyZG1hZGQtMTk4MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZnVzZWRfMDAyZG1hZGQtMTk4MSI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBmbG9hdGluZy1wb2ludCBtdWx0aXBseSBhbmQKK2FjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLiAgVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgZGVmYXVsdAoraWYgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQgaXMgdXNlZC4gIFRoZSBtYWNoaW5lLWRlcGVuZGVudAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mdXNlZC1tYWRkPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIG5vdyBtYXBwZWQgdG8gdGhlIG1hY2hpbmUtaW5kZXBlbmRlbnQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnAtY29udHJhY3Q9ZmFzdDwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tZnVzZWQtbWFkZDwvc3Bhbj48L3NhbXA+IGlzCittYXBwZWQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmcC1jb250cmFjdD1vZmY8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbXVsaHc8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbXVsaHc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tdWxody0xOTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRtdWxody0xOTgzIj48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGhhbGYtd29yZCBtdWx0aXBseSBhbmQKK211bHRpcGx5LWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBJQk0gNDA1LCA0NDAsIDQ2NCBhbmQgNDc2IHByb2Nlc3NvcnMuIAorVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgZGVmYXVsdCB3aGVuIHRhcmdldGluZyB0aG9zZQorcHJvY2Vzc29ycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZGxtemI8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZGxtemI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1kbG16Yi0xOTg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRkbG16Yi0xOTg1Ij48L2E+R2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIHN0cmluZy1zZWFyY2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kbG16Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOworaW5zdHJ1Y3Rpb24gb24gdGhlIElCTSA0MDUsIDQ0MCwgNDY0IGFuZCA0NzYgcHJvY2Vzc29ycy4gIFRoaXMgaW5zdHJ1Y3Rpb24gaXMKK2dlbmVyYXRlZCBieSBkZWZhdWx0IHdoZW4gdGFyZ2V0aW5nIHRob3NlIHByb2Nlc3NvcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWJpdC1hbGlnbjwvY29kZT48ZHQ+PGNvZGU+LW1iaXQtYWxpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYml0XzAwMmRhbGlnbi0xOTg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWJpdF8wMDJkYWxpZ24tMTk4NyI+PC9hPk9uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBkbyBub3QgKGRvKSBmb3JjZSBzdHJ1Y3R1cmVzCithbmQgdW5pb25zIHRoYXQgY29udGFpbiBiaXQtZmllbGRzIHRvIGJlIGFsaWduZWQgdG8gdGhlIGJhc2UgdHlwZSBvZiB0aGUKK2JpdC1maWVsZC4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwgYnkgZGVmYXVsdCBhIHN0cnVjdHVyZSBjb250YWluaW5nIG5vdGhpbmcgYnV0IDgKKzxjb2RlPnVuc2lnbmVkPC9jb2RlPiBiaXQtZmllbGRzIG9mIGxlbmd0aCAxIGlzIGFsaWduZWQgdG8gYSA0LWJ5dGUKK2JvdW5kYXJ5IGFuZCBoYXMgYSBzaXplIG9mIDQgYnl0ZXMuICBCeSB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWJpdC1hbGlnbjwvc3Bhbj48L3NhbXA+LAordGhlIHN0cnVjdHVyZSBpcyBhbGlnbmVkIHRvIGEgMS1ieXRlIGJvdW5kYXJ5IGFuZCBpcyAxIGJ5dGUgaW4KK3NpemUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXN0cmljdC1hbGlnbjwvY29kZT48ZHQ+PGNvZGU+LW1zdHJpY3QtYWxpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc3RyaWN0XzAwMmRhbGlnbi0xOTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXN0cmljdF8wMDJkYWxpZ24tMTk4OSI+PC9hPk9uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBkbyBub3QgKGRvKSBhc3N1bWUgdGhhdAordW5hbGlnbmVkIG1lbW9yeSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlbG9jYXRhYmxlPC9jb2RlPjxkdD48Y29kZT4tbW5vLXJlbG9jYXRhYmxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcmVsb2NhdGFibGUtMTk5MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkcmVsb2NhdGFibGUtMTk5MSI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgKGRvZXMgbm90IGFsbG93KSBhIHN0YXRpYyBleGVjdXRhYmxlIHRvIGJlCityZWxvY2F0ZWQgdG8gYSBkaWZmZXJlbnQgYWRkcmVzcyBhdCBydW4gdGltZS4gIEEgc2ltcGxlIGVtYmVkZGVkCitQb3dlclBDIHN5c3RlbSBsb2FkZXIgc2hvdWxkIHJlbG9jYXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YKKzxjb2RlPi5nb3QyPC9jb2RlPiBhbmQgNC1ieXRlIGxvY2F0aW9ucyBsaXN0ZWQgaW4gdGhlIDxjb2RlPi5maXh1cDwvY29kZT4gc2VjdGlvbiwKK2EgdGFibGUgb2YgMzItYml0IGFkZHJlc3NlcyBnZW5lcmF0ZWQgYnkgdGhpcyBvcHRpb24uICBGb3IgdGhpcyB0bword29yaywgYWxsIG9iamVjdHMgbGlua2VkIHRvZ2V0aGVyIG11c3QgYmUgY29tcGlsZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1yZWxvY2F0YWJsZTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcmVsb2NhdGFibGUtbGliPC9zcGFuPjwvc2FtcD4uIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1yZWxvY2F0YWJsZTwvc3Bhbj48L3NhbXA+IGNvZGUgYWxpZ25zIHRoZSBzdGFjayB0byBhbiA4LWJ5dGUgYm91bmRhcnkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlbG9jYXRhYmxlLWxpYjwvY29kZT48ZHQ+PGNvZGU+LW1uby1yZWxvY2F0YWJsZS1saWI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1yZWxvY2F0YWJsZV8wMDJkbGliLTE5OTIiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHJlbG9jYXRhYmxlXzAwMmRsaWItMTk5MyI+PC9hPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1yZWxvY2F0YWJsZTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlbG9jYXRhYmxlLWxpYjwvc3Bhbj48L3NhbXA+IGdlbmVyYXRlcyBhCis8Y29kZT4uZml4dXA8L2NvZGU+IHNlY3Rpb24gdG8gYWxsb3cgc3RhdGljIGV4ZWN1dGFibGVzIHRvIGJlIHJlbG9jYXRlZCBhdAorcnVuIHRpbWUsIGJ1dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlbG9jYXRhYmxlLWxpYjwvc3Bhbj48L3NhbXA+IGRvZXMgbm90IHVzZSB0aGUgc21hbGxlciBzdGFjaworYWxpZ25tZW50IG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcmVsb2NhdGFibGU8L3NwYW4+PC9zYW1wPi4gIE9iamVjdHMgY29tcGlsZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1yZWxvY2F0YWJsZS1saWI8L3NwYW4+PC9zYW1wPiBtYXkgYmUgbGlua2VkIHdpdGggb2JqZWN0cyBjb21waWxlZCB3aXRoCithbnkgY29tYmluYXRpb24gb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcmVsb2NhdGFibGU8L3NwYW4+PC9zYW1wPiBvcHRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby10b2M8L2NvZGU+PGR0Pjxjb2RlPi1tdG9jPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHRvYy0xOTk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXRvYy0xOTk1Ij48L2E+T24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGRvIG5vdCAoZG8pIGFzc3VtZSB0aGF0CityZWdpc3RlciAyIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIGdsb2JhbCBhcmVhIHBvaW50aW5nIHRvIHRoZSBhZGRyZXNzZXMKK3VzZWQgaW4gdGhlIHByb2dyYW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxpdHRsZTwvY29kZT48ZHQ+PGNvZGU+LW1saXR0bGUtZW5kaWFuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbGl0dGxlLTE5OTYiPjwvYT48YSBuYW1lPSJpbmRleC1tbGl0dGxlXzAwMmRlbmRpYW4tMTk5NyI+PC9hPk9uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZQorcHJvY2Vzc29yIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4gIFRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWxpdHRsZS1lbmRpYW48L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMKK3RoZSBzYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbGl0dGxlPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJpZzwvY29kZT48ZHQ+PGNvZGU+LW1iaWctZW5kaWFuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYmlnLTE5OTgiPjwvYT48YSBuYW1lPSJpbmRleC1tYmlnXzAwMmRlbmRpYW4tMTk5OSI+PC9hPk9uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZQorcHJvY2Vzc29yIGluIGJpZy1lbmRpYW4gbW9kZS4gIFRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWJpZy1lbmRpYW48L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMKK3RoZSBzYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYmlnPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWR5bmFtaWMtbm8tcGljPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZHluYW1pY18wMDJkbm9fMDAyZHBpYy0yMDAwIj48L2E+T24gRGFyd2luIGFuZCBNYWMgT1MgWCBzeXN0ZW1zLCBjb21waWxlIGNvZGUgc28gdGhhdCBpdCBpcyBub3QKK3JlbG9jYXRhYmxlLCBidXQgdGhhdCBpdHMgZXh0ZXJuYWwgcmVmZXJlbmNlcyBhcmUgcmVsb2NhdGFibGUuICBUaGUKK3Jlc3VsdGluZyBjb2RlIGlzIHN1aXRhYmxlIGZvciBhcHBsaWNhdGlvbnMsIGJ1dCBub3Qgc2hhcmVkCitsaWJyYXJpZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNpbmdsZS1waWMtYmFzZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNpbmdsZV8wMDJkcGljXzAwMmRiYXNlLTIwMDEiPjwvYT5UcmVhdCB0aGUgcmVnaXN0ZXIgdXNlZCBmb3IgUElDIGFkZHJlc3NpbmcgYXMgcmVhZC1vbmx5LCByYXRoZXIgdGhhbgorbG9hZGluZyBpdCBpbiB0aGUgcHJvbG9ndWUgZm9yIGVhY2ggZnVuY3Rpb24uICBUaGUgcnVudGltZSBzeXN0ZW0gaXMKK3Jlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhpcyByZWdpc3RlciB3aXRoIGFuIGFwcHJvcHJpYXRlIHZhbHVlCitiZWZvcmUgZXhlY3V0aW9uIGJlZ2lucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcHJpb3JpdGl6ZS1yZXN0cmljdGVkLWluc25zPTwvY29kZT48dmFyPnByaW9yaXR5PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1wcmlvcml0aXplXzAwMmRyZXN0cmljdGVkXzAwMmRpbnNucy0yMDAyIj48L2E+VGhpcyBvcHRpb24gY29udHJvbHMgdGhlIHByaW9yaXR5IHRoYXQgaXMgYXNzaWduZWQgdG8KK2Rpc3BhdGNoLXNsb3QgcmVzdHJpY3RlZCBpbnN0cnVjdGlvbnMgZHVyaW5nIHRoZSBzZWNvbmQgc2NoZWR1bGluZworcGFzcy4gIFRoZSBhcmd1bWVudCA8dmFyPnByaW9yaXR5PC92YXI+IHRha2VzIHRoZSB2YWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK29yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBhc3NpZ24gbm8sIGhpZ2hlc3QsIG9yIHNlY29uZC1oaWdoZXN0IChyZXNwZWN0aXZlbHkpCitwcmlvcml0eSB0byBkaXNwYXRjaC1zbG90IHJlc3RyaWN0ZWQKK2luc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2NoZWQtY29zdGx5LWRlcD08L2NvZGU+PHZhcj5kZXBlbmRlbmNlX3R5cGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNjaGVkXzAwMmRjb3N0bHlfMDAyZGRlcC0yMDAzIj48L2E+VGhpcyBvcHRpb24gY29udHJvbHMgd2hpY2ggZGVwZW5kZW5jZXMgYXJlIGNvbnNpZGVyZWQgY29zdGx5CitieSB0aGUgdGFyZ2V0IGR1cmluZyBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLiAgVGhlIGFyZ3VtZW50Cis8dmFyPmRlcGVuZGVuY2VfdHlwZTwvdmFyPiB0YWtlcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ubzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5ObyBkZXBlbmRlbmNlIGlzIGNvc3RseS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbGw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QWxsIGRlcGVuZGVuY2VzIGFyZSBjb3N0bHkuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dHJ1ZV9zdG9yZV90b19sb2FkPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkEgdHJ1ZSBkZXBlbmRlbmNlIGZyb20gc3RvcmUgdG8gbG9hZCBpcyBjb3N0bHkuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RvcmVfdG9fbG9hZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BbnkgZGVwZW5kZW5jZSBmcm9tIHN0b3JlIHRvIGxvYWQgaXMgY29zdGx5LgorCisgICAgICAgICAgPGJyPjxkdD48dmFyPm51bWJlcjwvdmFyPjxkZD5BbnkgZGVwZW5kZW5jZSBmb3Igd2hpY2ggdGhlIGxhdGVuY3kgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCis8dmFyPm51bWJlcjwvdmFyPiBpcyBjb3N0bHkuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taW5zZXJ0LXNjaGVkLW5vcHM9PC9jb2RlPjx2YXI+c2NoZW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1pbnNlcnRfMDAyZHNjaGVkXzAwMmRub3BzLTIwMDQiPjwvYT5UaGlzIG9wdGlvbiBjb250cm9scyB3aGljaCBOT1AgaW5zZXJ0aW9uIHNjaGVtZSBpcyB1c2VkIGR1cmluZwordGhlIHNlY29uZCBzY2hlZHVsaW5nIHBhc3MuICBUaGUgYXJndW1lbnQgPHZhcj5zY2hlbWU8L3Zhcj4gdGFrZXMgb25lIG9mIHRoZQorZm9sbG93aW5nIHZhbHVlczoKKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRvbid0IGluc2VydCBOT1BzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBhZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5QYWQgd2l0aCBOT1BzIGFueSBkaXNwYXRjaCBncm91cCB0aGF0IGhhcyB2YWNhbnQgaXNzdWUgc2xvdHMsCithY2NvcmRpbmcgdG8gdGhlIHNjaGVkdWxlcidzIGdyb3VwaW5nLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlZ3JvdXBfZXhhY3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW5zZXJ0IE5PUHMgdG8gZm9yY2UgY29zdGx5IGRlcGVuZGVudCBpbnNucyBpbnRvCitzZXBhcmF0ZSBncm91cHMuICBJbnNlcnQgZXhhY3RseSBhcyBtYW55IE5PUHMgYXMgbmVlZGVkIHRvIGZvcmNlIGFuIGluc24KK3RvIGEgbmV3IGdyb3VwLCBhY2NvcmRpbmcgdG8gdGhlIGVzdGltYXRlZCBwcm9jZXNzb3IgZ3JvdXBpbmcuCisKKyAgICAgICAgICA8YnI+PGR0Pjx2YXI+bnVtYmVyPC92YXI+PGRkPkluc2VydCBOT1BzIHRvIGZvcmNlIGNvc3RseSBkZXBlbmRlbnQgaW5zbnMgaW50bworc2VwYXJhdGUgZ3JvdXBzLiAgSW5zZXJ0IDx2YXI+bnVtYmVyPC92YXI+IE5PUHMgdG8gZm9yY2UgYW4gaW5zbiB0byBhIG5ldyBncm91cC4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jYWxsLXN5c3Y8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jYWxsXzAwMmRzeXN2LTIwMDUiPjwvYT5PbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgY29tcGlsZSBjb2RlIHVzaW5nIGNhbGxpbmcKK2NvbnZlbnRpb25zIHRoYXQgYWRoZXJlIHRvIHRoZSBNYXJjaCAxOTk1IGRyYWZ0IG9mIHRoZSBTeXN0ZW0gVgorQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSwgUG93ZXJQQyBwcm9jZXNzb3Igc3VwcGxlbWVudC4gIFRoaXMgaXMgdGhlCitkZWZhdWx0IHVubGVzcyB5b3UgY29uZmlndXJlZCBHQ0MgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3dlcnBjLSotZWFiaWFpeDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY2FsbC1zeXN2LWVhYmk8L2NvZGU+PGR0Pjxjb2RlPi1tY2FsbC1lYWJpPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2FsbF8wMDJkc3lzdl8wMDJkZWFiaS0yMDA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWNhbGxfMDAyZGVhYmktMjAwNyI+PC9hPlNwZWNpZnkgYm90aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNhbGwtc3lzdjwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWVhYmk8L3NwYW4+PC9zYW1wPiBvcHRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jYWxsLXN5c3Ytbm9lYWJpPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2FsbF8wMDJkc3lzdl8wMDJkbm9lYWJpLTIwMDgiPjwvYT5TcGVjaWZ5IGJvdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jYWxsLXN5c3Y8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1lYWJpPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY2FsbC1haXhkZXNjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tLTIwMDkiPjwvYT5PbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgY29tcGlsZSBjb2RlIGZvciB0aGUgQUlYCitvcGVyYXRpbmcgc3lzdGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jYWxsLWxpbnV4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2FsbF8wMDJkbGludXgtMjAxMCI+PC9hPk9uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZQorTGludXgtYmFzZWQgR05VIHN5c3RlbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY2FsbC1mcmVlYnNkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2FsbF8wMDJkZnJlZWJzZC0yMDExIj48L2E+T24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlCitGcmVlQlNEIG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNhbGwtbmV0YnNkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2FsbF8wMDJkbmV0YnNkLTIwMTIiPjwvYT5PbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgY29tcGlsZSBjb2RlIGZvciB0aGUKK05ldEJTRCBvcGVyYXRpbmcgc3lzdGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jYWxsLW9wZW5ic2Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jYWxsXzAwMmRuZXRic2QtMjAxMyI+PC9hPk9uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZQorT3BlbkJTRCBvcGVyYXRpbmcgc3lzdGVtLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1haXgtc3RydWN0LXJldHVybjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFpeF8wMDJkc3RydWN0XzAwMmRyZXR1cm4tMjAxNCI+PC9hPlJldHVybiBhbGwgc3RydWN0dXJlcyBpbiBtZW1vcnkgKGFzIHNwZWNpZmllZCBieSB0aGUgQUlYIEFCSSkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXN2cjQtc3RydWN0LXJldHVybjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXN2cjRfMDAyZHN0cnVjdF8wMDJkcmV0dXJuLTIwMTUiPjwvYT5SZXR1cm4gc3RydWN0dXJlcyBzbWFsbGVyIHRoYW4gOCBieXRlcyBpbiByZWdpc3RlcnMgKGFzIHNwZWNpZmllZCBieSB0aGUKK1NWUjQgQUJJKS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWJpPTwvY29kZT48dmFyPmFiaS10eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1hYmktMjAxNiI+PC9hPkV4dGVuZCB0aGUgY3VycmVudCBBQkkgd2l0aCBhIHBhcnRpY3VsYXIgZXh0ZW5zaW9uLCBvciByZW1vdmUgc3VjaCBleHRlbnNpb24uIAorVmFsaWQgdmFsdWVzIGFyZSA8dmFyPmFsdGl2ZWM8L3Zhcj4sIDx2YXI+bm8tYWx0aXZlYzwvdmFyPiwgPHZhcj5zcGU8L3Zhcj4sCis8dmFyPm5vLXNwZTwvdmFyPiwgPHZhcj5pYm1sb25nZG91YmxlPC92YXI+LCA8dmFyPmllZWVsb25nZG91YmxlPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hYmk9c3BlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYWJpXzAwM2RzcGUtMjAxNyI+PC9hPkV4dGVuZCB0aGUgY3VycmVudCBBQkkgd2l0aCBTUEUgQUJJIGV4dGVuc2lvbnMuICBUaGlzIGRvZXMgbm90IGNoYW5nZQordGhlIGRlZmF1bHQgQUJJLCBpbnN0ZWFkIGl0IGFkZHMgdGhlIFNQRSBBQkkgZXh0ZW5zaW9ucyB0byB0aGUgY3VycmVudAorQUJJLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hYmk9bm8tc3BlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYWJpXzAwM2Rub18wMDJkc3BlLTIwMTgiPjwvYT5EaXNhYmxlIEJvb2stRSBTUEUgQUJJIGV4dGVuc2lvbnMgZm9yIHRoZSBjdXJyZW50IEFCSS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWJpPWlibWxvbmdkb3VibGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hYmlfMDAzZGlibWxvbmdkb3VibGUtMjAxOSI+PC9hPkNoYW5nZSB0aGUgY3VycmVudCBBQkkgdG8gdXNlIElCTSBleHRlbmRlZC1wcmVjaXNpb24gbG9uZyBkb3VibGUuIAorVGhpcyBpcyBhIFBvd2VyUEMgMzItYml0IFNZU1YgQUJJIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWJpPWllZWVsb25nZG91YmxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYWJpXzAwM2RpZWVlbG9uZ2RvdWJsZS0yMDIwIj48L2E+Q2hhbmdlIHRoZSBjdXJyZW50IEFCSSB0byB1c2UgSUVFRSBleHRlbmRlZC1wcmVjaXNpb24gbG9uZyBkb3VibGUuIAorVGhpcyBpcyBhIFBvd2VyUEMgMzItYml0IExpbnV4IEFCSSBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXByb3RvdHlwZTwvY29kZT48ZHQ+PGNvZGU+LW1uby1wcm90b3R5cGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wcm90b3R5cGUtMjAyMSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkcHJvdG90eXBlLTIwMjIiPjwvYT5PbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgYXNzdW1lIHRoYXQgYWxsIGNhbGxzIHRvCit2YXJpYWJsZSBhcmd1bWVudCBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IHByb3RvdHlwZWQuICBPdGhlcndpc2UsIHRoZQorY29tcGlsZXIgbXVzdCBpbnNlcnQgYW4gaW5zdHJ1Y3Rpb24gYmVmb3JlIGV2ZXJ5IG5vbi1wcm90b3R5cGVkIGNhbGwgdG8KK3NldCBvciBjbGVhciBiaXQgNiBvZiB0aGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIgKDx2YXI+Q1I8L3Zhcj4pIHRvCitpbmRpY2F0ZSB3aGV0aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgcGFzc2VkIGluIHRoZSBmbG9hdGluZy1wb2ludAorcmVnaXN0ZXJzIGluIGNhc2UgdGhlIGZ1bmN0aW9uIHRha2VzIHZhcmlhYmxlIGFyZ3VtZW50cy4gIFdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcHJvdG90eXBlPC9zcGFuPjwvc2FtcD4sIG9ubHkgY2FsbHMgdG8gcHJvdG90eXBlZCB2YXJpYWJsZSBhcmd1bWVudCBmdW5jdGlvbnMKK3NldCBvciBjbGVhciB0aGUgYml0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zaW08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW0tMjAyMyI+PC9hPk9uIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcywgYXNzdW1lIHRoYXQgdGhlIHN0YXJ0dXAgbW9kdWxlIGlzIGNhbGxlZAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnNpbS1jcnQwLm88L3NwYW4+PC9zYW1wPiBhbmQgdGhhdCB0aGUgc3RhbmRhcmQgQyBsaWJyYXJpZXMgYXJlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJzaW0uYTwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmMuYTwvc3Bhbj48L3NhbXA+LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wb3dlcnBjLSotZWFiaXNpbTwvc3Bhbj48L3NhbXA+JnJzcXVvOworY29uZmlndXJhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW12bWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tdm1lLTIwMjQiPjwvYT5PbiBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIGFzc3VtZSB0aGF0IHRoZSBzdGFydHVwIG1vZHVsZSBpcyBjYWxsZWQKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jcnQwLm88L3NwYW4+PC9zYW1wPiBhbmQgdGhlIHN0YW5kYXJkIEMgbGlicmFyaWVzIGFyZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGlibXZtZS5hPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliYy5hPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFkczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFkcy0yMDI1Ij48L2E+T24gZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBhc3N1bWUgdGhhdCB0aGUgc3RhcnR1cCBtb2R1bGUgaXMgY2FsbGVkCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y3J0MC5vPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSBzdGFuZGFyZCBDIGxpYnJhcmllcyBhcmUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmFkcy5hPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliYy5hPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXllbGxvd2tuaWZlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1teWVsbG93a25pZmUtMjAyNiI+PC9hPk9uIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcywgYXNzdW1lIHRoYXQgdGhlIHN0YXJ0dXAgbW9kdWxlIGlzIGNhbGxlZAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNydDAubzwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgc3RhbmRhcmQgQyBsaWJyYXJpZXMgYXJlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJ5ay5hPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliYy5hPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXZ4d29ya3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW12eHdvcmtzLTIwMjciPjwvYT5PbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHNwZWNpZnkgdGhhdCB5b3UgYXJlCitjb21waWxpbmcgZm9yIGEgVnhXb3JrcyBzeXN0ZW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWVtYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWVtYi0yMDI4Ij48L2E+T24gZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBzZXQgdGhlIDx2YXI+UFBDX0VNQjwvdmFyPiBiaXQgaW4gdGhlIEVMRiBmbGFncworaGVhZGVyIHRvIGluZGljYXRlIHRoYXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lYWJpPC9zcGFuPjwvc2FtcD4mcnNxdW87IGV4dGVuZGVkIHJlbG9jYXRpb25zIGFyZSB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1lYWJpPC9jb2RlPjxkdD48Y29kZT4tbW5vLWVhYmk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1lYWJpLTIwMjkiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGVhYmktMjAzMCI+PC9hPk9uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBkbyAoZG8gbm90KSBhZGhlcmUgdG8gdGhlCitFbWJlZGRlZCBBcHBsaWNhdGlvbnMgQmluYXJ5IEludGVyZmFjZSAoRUFCSSksIHdoaWNoIGlzIGEgc2V0IG9mCittb2RpZmljYXRpb25zIHRvIHRoZSBTeXN0ZW0gVi40IHNwZWNpZmljYXRpb25zLiAgU2VsZWN0aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZWFiaTwvc3Bhbj48L3NhbXA+CittZWFucyB0aGF0IHRoZSBzdGFjayBpcyBhbGlnbmVkIHRvIGFuIDgtYnl0ZSBib3VuZGFyeSwgYSBmdW5jdGlvbgorPGNvZGU+X19lYWJpPC9jb2RlPiBpcyBjYWxsZWQgZnJvbSA8Y29kZT5tYWluPC9jb2RlPiB0byBzZXQgdXAgdGhlIEVBQkkKK2Vudmlyb25tZW50LCBhbmQgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc2RhdGE8L3NwYW4+PC9zYW1wPiBvcHRpb24gY2FuIHVzZSBib3RoIDxjb2RlPnIyPC9jb2RlPiBhbmQKKzxjb2RlPnIxMzwvY29kZT4gdG8gcG9pbnQgdG8gdHdvIHNlcGFyYXRlIHNtYWxsIGRhdGEgYXJlYXMuICBTZWxlY3RpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tZWFiaTwvc3Bhbj48L3NhbXA+IG1lYW5zIHRoYXQgdGhlIHN0YWNrIGlzIGFsaWduZWQgdG8gYSAxNi1ieXRlIGJvdW5kYXJ5LAorbm8gRUFCSSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSA8Y29kZT5tYWluPC9jb2RlPiwgYW5kIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zZGF0YTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBvbmx5IHVzZXMgPGNvZGU+cjEzPC9jb2RlPiB0byBwb2ludCB0byBhIHNpbmdsZQorc21hbGwgZGF0YSBhcmVhLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZWFiaTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0IGlmIHlvdQorY29uZmlndXJlZCBHQ0MgdXNpbmcgb25lIG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvd2VycGMqLSotZWFiaSo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RhdGE9ZWFiaTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNkYXRhXzAwM2RlYWJpLTIwMzEiPjwvYT5PbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBzbWFsbCBpbml0aWFsaXplZAorPGNvZGU+Y29uc3Q8L2NvZGU+IGdsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNkYXRhMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLCB3aGljaAoraXMgcG9pbnRlZCB0byBieSByZWdpc3RlciA8Y29kZT5yMjwvY29kZT4uICBQdXQgc21hbGwgaW5pdGlhbGl6ZWQKK25vbi08Y29kZT5jb25zdDwvY29kZT4gZ2xvYmFsIGFuZCBzdGF0aWMgZGF0YSBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2RhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiwKK3doaWNoIGlzIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIgPGNvZGU+cjEzPC9jb2RlPi4gIFB1dCBzbWFsbCB1bmluaXRpYWxpemVkCitnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zYnNzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24sIHdoaWNoIGlzIGFkamFjZW50IHRvCit0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2RhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbi4gIFRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNkYXRhPWVhYmk8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMKK2luY29tcGF0aWJsZSB3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlbG9jYXRhYmxlPC9zcGFuPjwvc2FtcD4gb3B0aW9uLiAgVGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNkYXRhPWVhYmk8L3NwYW4+PC9zYW1wPiBvcHRpb24gYWxzbyBzZXRzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWVtYjwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RhdGE9c3lzdjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNkYXRhXzAwM2RzeXN2LTIwMzIiPjwvYT5PbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBzbWFsbCBnbG9iYWwgYW5kIHN0YXRpYworZGF0YSBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2RhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiwgd2hpY2ggaXMgcG9pbnRlZCB0byBieSByZWdpc3RlcgorPGNvZGU+cjEzPC9jb2RlPi4gIFB1dCBzbWFsbCB1bmluaXRpYWxpemVkIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zYnNzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24sIHdoaWNoIGlzIGFkamFjZW50IHRvIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLiAKK1RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNkYXRhPXN5c3Y8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlbG9jYXRhYmxlPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zZGF0YT1kZWZhdWx0PC9jb2RlPjxkdD48Y29kZT4tbXNkYXRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2RhdGFfMDAzZGRlZmF1bHQtMjAzMyI+PC9hPjxhIG5hbWU9ImluZGV4LW1zZGF0YS0yMDM0Ij48L2E+T24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWVhYmk8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLAorY29tcGlsZSBjb2RlIHRoZSBzYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc2RhdGE9ZWFiaTwvc3Bhbj48L3NhbXA+LCBvdGhlcndpc2UgY29tcGlsZSBjb2RlIHRoZQorc2FtZSBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNkYXRhPXN5c3Y8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2RhdGE9ZGF0YTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNkYXRhXzAwM2RkYXRhLTIwMzUiPjwvYT5PbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBzbWFsbCBnbG9iYWwKK2RhdGEgaW4gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNkYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24uICBQdXQgc21hbGwgdW5pbml0aWFsaXplZCBnbG9iYWwKK2RhdGEgaW4gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnNic3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbi4gIERvIG5vdCB1c2UgcmVnaXN0ZXIgPGNvZGU+cjEzPC9jb2RlPgordG8gYWRkcmVzcyBzbWFsbCBkYXRhIGhvd2V2ZXIuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHVubGVzcworb3RoZXIgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zZGF0YTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgYXJlIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNkYXRhPW5vbmU8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc2RhdGE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zZGF0YV8wMDNkbm9uZS0yMDM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzZGF0YS0yMDM3Ij48L2E+T24gZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBwdXQgYWxsIGluaXRpYWxpemVkIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEKK2luIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24sIGFuZCBhbGwgdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYnNzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJsb2NrLW1vdmUtaW5saW5lLWxpbWl0PTwvY29kZT48dmFyPm51bTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tYmxvY2tfMDAyZG1vdmVfMDAyZGlubGluZV8wMDJkbGltaXQtMjAzOCI+PC9hPklubGluZSBhbGwgYmxvY2sgbW92ZXMgKHN1Y2ggYXMgY2FsbHMgdG8gPGNvZGU+bWVtY3B5PC9jb2RlPiBvciBzdHJ1Y3R1cmUKK2NvcGllcykgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDx2YXI+bnVtPC92YXI+IGJ5dGVzLiAgVGhlIG1pbmltdW0gdmFsdWUgZm9yCis8dmFyPm51bTwvdmFyPiBpcyAzMiBieXRlcyBvbiAzMi1iaXQgdGFyZ2V0cyBhbmQgNjQgYnl0ZXMgb24gNjQtYml0Cit0YXJnZXRzLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGFyZ2V0LXNwZWNpZmljLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUcgPC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LUctMjAzOSI+PC9hPjxhIG5hbWU9ImluZGV4LXNtYWxsZXItZGF0YS1yZWZlcmVuY2VzLV8wMDI4UG93ZXJQQ18wMDI5LTIwNDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZXNkYXRhXzAwMmZfMDAyZXNkYXRhMi1yZWZlcmVuY2VzLV8wMDI4UG93ZXJQQ18wMDI5LTIwNDEiPjwvYT5PbiBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBnbG9iYWwgYW5kIHN0YXRpYyBpdGVtcyBsZXNzIHRoYW4gb3IKK2VxdWFsIHRvIDx2YXI+bnVtPC92YXI+IGJ5dGVzIGludG8gdGhlIHNtYWxsIGRhdGEgb3IgQlNTIHNlY3Rpb25zIGluc3RlYWQgb2YKK3RoZSBub3JtYWwgZGF0YSBvciBCU1Mgc2VjdGlvbi4gIEJ5IGRlZmF1bHQsIDx2YXI+bnVtPC92YXI+IGlzIDguICBUaGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1HIDwvc3Bhbj48dmFyPm51bTwvdmFyPjwvc2FtcD4gc3dpdGNoIGlzIGFsc28gcGFzc2VkIHRvIHRoZSBsaW5rZXIuIAorQWxsIG1vZHVsZXMgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGggdGhlIHNhbWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUcgPC9zcGFuPjx2YXI+bnVtPC92YXI+PC9zYW1wPiB2YWx1ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmVnbmFtZXM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcmVnbmFtZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1yZWduYW1lcy0yMDQyIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRyZWduYW1lcy0yMDQzIj48L2E+T24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGRvIChkbyBub3QpIGVtaXQgcmVnaXN0ZXIKK25hbWVzIGluIHRoZSBhc3NlbWJseSBsYW5ndWFnZSBvdXRwdXQgdXNpbmcgc3ltYm9saWMgZm9ybXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmdjYWxsPC9jb2RlPjxkdD48Y29kZT4tbW5vLWxvbmdjYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbG9uZ2NhbGwtMjA0NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbG9uZ2NhbGwtMjA0NSI+PC9hPkJ5IGRlZmF1bHQgYXNzdW1lIHRoYXQgYWxsIGNhbGxzIGFyZSBmYXIgYXdheSBzbyB0aGF0IGEgbG9uZ2VyIGFuZCBtb3JlCitleHBlbnNpdmUgY2FsbGluZyBzZXF1ZW5jZSBpcyByZXF1aXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNhbGxzCitmYXJ0aGVyIHRoYW4gMzIgbWVnYWJ5dGVzICgzMyw1NTQsNDMyIGJ5dGVzKSBmcm9tIHRoZSBjdXJyZW50IGxvY2F0aW9uLiAKK0Egc2hvcnQgY2FsbCBpcyBnZW5lcmF0ZWQgaWYgdGhlIGNvbXBpbGVyIGtub3dzCit0aGUgY2FsbCBjYW5ub3QgYmUgdGhhdCBmYXIgYXdheS4gIFRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieQordGhlIDxjb2RlPnNob3J0Y2FsbDwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlLCBvciBieSA8Y29kZT4jcHJhZ21hCitsb25nY2FsbCgwKTwvY29kZT4uCisKKyAgICAgPHA+U29tZSBsaW5rZXJzIGFyZSBjYXBhYmxlIG9mIGRldGVjdGluZyBvdXQtb2YtcmFuZ2UgY2FsbHMgYW5kIGdlbmVyYXRpbmcKK2dsdWUgY29kZSBvbiB0aGUgZmx5LiAgT24gdGhlc2Ugc3lzdGVtcywgbG9uZyBjYWxscyBhcmUgdW5uZWNlc3NhcnkgYW5kCitnZW5lcmF0ZSBzbG93ZXIgY29kZS4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhlIEFJWCBsaW5rZXIgY2FuIGRvIHRoaXMsCithcyBjYW4gdGhlIEdOVSBsaW5rZXIgZm9yIFBvd2VyUEMvNjQuICBJdCBpcyBwbGFubmVkIHRvIGFkZCB0aGlzIGZlYXR1cmUKK3RvIHRoZSBHTlUgbGlua2VyIGZvciAzMi1iaXQgUG93ZXJQQyBzeXN0ZW1zIGFzIHdlbGwuCisKKyAgICAgPHA+T24gRGFyd2luL1BQQyBzeXN0ZW1zLCA8Y29kZT4jcHJhZ21hIGxvbmdjYWxsPC9jb2RlPiBnZW5lcmF0ZXMgPGNvZGU+amJzcgorY2FsbGVlLCBMNDI8L2NvZGU+LCBwbHVzIGEgPGRmbj5icmFuY2ggaXNsYW5kPC9kZm4+IChnbHVlIGNvZGUpLiAgVGhlIHR3byB0YXJnZXQKK2FkZHJlc3NlcyByZXByZXNlbnQgdGhlIGNhbGxlZSBhbmQgdGhlIGJyYW5jaCBpc2xhbmQuICBUaGUKK0Rhcndpbi9QUEMgbGlua2VyIHByZWZlcnMgdGhlIGZpcnN0IGFkZHJlc3MgYW5kIGdlbmVyYXRlcyBhIDxjb2RlPmJsCitjYWxsZWU8L2NvZGU+IGlmIHRoZSBQUEMgPGNvZGU+Ymw8L2NvZGU+IGluc3RydWN0aW9uIHJlYWNoZXMgdGhlIGNhbGxlZSBkaXJlY3RseTsKK290aGVyd2lzZSwgdGhlIGxpbmtlciBnZW5lcmF0ZXMgPGNvZGU+YmwgTDQyPC9jb2RlPiB0byBjYWxsIHRoZSBicmFuY2gKK2lzbGFuZC4gIFRoZSBicmFuY2ggaXNsYW5kIGlzIGFwcGVuZGVkIHRvIHRoZSBib2R5IG9mIHRoZQorY2FsbGluZyBmdW5jdGlvbjsgaXQgY29tcHV0ZXMgdGhlIGZ1bGwgMzItYml0IGFkZHJlc3Mgb2YgdGhlIGNhbGxlZQorYW5kIGp1bXBzIHRvIGl0LgorCisgICAgIDxwPk9uIE1hY2gtTyAoRGFyd2luKSBzeXN0ZW1zLCB0aGlzIG9wdGlvbiBkaXJlY3RzIHRoZSBjb21waWxlciBlbWl0IHRvCit0aGUgZ2x1ZSBmb3IgZXZlcnkgZGlyZWN0IGNhbGwsIGFuZCB0aGUgRGFyd2luIGxpbmtlciBkZWNpZGVzIHdoZXRoZXIKK3RvIHVzZSBvciBkaXNjYXJkIGl0LgorCisgICAgIDxwPkluIHRoZSBmdXR1cmUsIEdDQyBtYXkgaWdub3JlIGFsbCBsb25nY2FsbCBzcGVjaWZpY2F0aW9ucword2hlbiB0aGUgbGlua2VyIGlzIGtub3duIHRvIGdlbmVyYXRlIGdsdWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRscy1tYXJrZXJzPC9jb2RlPjxkdD48Y29kZT4tbW5vLXRscy1tYXJrZXJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdGxzXzAwMmRtYXJrZXJzLTIwNDYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHRsc18wMDJkbWFya2Vycy0yMDQ3Ij48L2E+TWFyayAoZG8gbm90IG1hcmspIGNhbGxzIHRvIDxjb2RlPl9fdGxzX2dldF9hZGRyPC9jb2RlPiB3aXRoIGEgcmVsb2NhdGlvbgorc3BlY2lmeWluZyB0aGUgZnVuY3Rpb24gYXJndW1lbnQuICBUaGUgcmVsb2NhdGlvbiBhbGxvd3MgdGhlIGxpbmtlciB0bworcmVsaWFibHkgYXNzb2NpYXRlIGZ1bmN0aW9uIGNhbGwgd2l0aCBhcmd1bWVudCBzZXR1cCBpbnN0cnVjdGlvbnMgZm9yCitUTFMgb3B0aW1pemF0aW9uLCB3aGljaCBpbiB0dXJuIGFsbG93cyBHQ0MgdG8gYmV0dGVyIHNjaGVkdWxlIHRoZQorc2VxdWVuY2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcHRocmVhZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcHRocmVhZC0yMDQ4Ij48L2E+QWRkcyBzdXBwb3J0IGZvciBtdWx0aXRocmVhZGluZyB3aXRoIHRoZSA8ZGZuPnB0aHJlYWRzPC9kZm4+IGxpYnJhcnkuIAorVGhpcyBvcHRpb24gc2V0cyBmbGFncyBmb3IgYm90aCB0aGUgcHJlcHJvY2Vzc29yIGFuZCBsaW5rZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlY2lwPC9jb2RlPjxkdD48Y29kZT4tbW5vLXJlY2lwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcmVjaXAtMjA0OSI+PC9hPlRoaXMgb3B0aW9uIGVuYWJsZXMgdXNlIG9mIHRoZSByZWNpcHJvY2FsIGVzdGltYXRlIGFuZAorcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMgd2l0aCBhZGRpdGlvbmFsCitOZXd0b24tUmFwaHNvbiBzdGVwcyB0byBpbmNyZWFzZSBwcmVjaXNpb24gaW5zdGVhZCBvZiBkb2luZyBhIGRpdmlkZSBvcgorc3F1YXJlIHJvb3QgYW5kIGRpdmlkZSBmb3IgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLiAgWW91IHNob3VsZCB1c2UKK3RoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZhc3QtbWF0aDwvc3Bhbj48L3NhbXA+IG9wdGlvbiB3aGVuIHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcmVjaXA8L3NwYW4+PC9zYW1wPiAob3IgYXQKK2xlYXN0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9uczwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbml0ZS1tYXRoLW9ubHk8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZWNpcHJvY2FsLW1hdGg8L3NwYW4+PC9zYW1wPiBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tdHJhcHBpbmctbWF0aDwvc3Bhbj48L3NhbXA+KS4gIE5vdGUgdGhhdCB3aGlsZSB0aGUgdGhyb3VnaHB1dCBvZiB0aGUKK3NlcXVlbmNlIGlzIGdlbmVyYWxseSBoaWdoZXIgdGhhbiB0aGUgdGhyb3VnaHB1dCBvZiB0aGUgbm9uLXJlY2lwcm9jYWwKK2luc3RydWN0aW9uLCB0aGUgcHJlY2lzaW9uIG9mIHRoZSBzZXF1ZW5jZSBjYW4gYmUgZGVjcmVhc2VkIGJ5IHVwIHRvIDIKK3VscCAoaS5lLiB0aGUgaW52ZXJzZSBvZiAxLjAgZXF1YWxzIDAuOTk5OTk5OTQpIGZvciByZWNpcHJvY2FsIHNxdWFyZQorcm9vdHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlY2lwPTwvY29kZT48dmFyPm9wdDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tcmVjaXBfMDAzZG9wdC0yMDUwIj48L2E+VGhpcyBvcHRpb24gY29udHJvbHMgd2hpY2ggcmVjaXByb2NhbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMKK21heSBiZSB1c2VkLiAgPHZhcj5vcHQ8L3Zhcj4gaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcHRpb25zLCB3aGljaCBtYXkKK2JlIHByZWNlZGVkIGJ5IGEgPGNvZGU+ITwvY29kZT4gdG8gaW52ZXJ0IHRoZSBvcHRpb246Cis8Y29kZT5hbGw8L2NvZGU+OiBlbmFibGUgYWxsIGVzdGltYXRlIGluc3RydWN0aW9ucywKKzxjb2RlPmRlZmF1bHQ8L2NvZGU+OiBlbmFibGUgdGhlIGRlZmF1bHQgaW5zdHJ1Y3Rpb25zLCBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcmVjaXA8L3NwYW4+PC9zYW1wPiwKKzxjb2RlPm5vbmU8L2NvZGU+OiBkaXNhYmxlIGFsbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMsIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1yZWNpcDwvc3Bhbj48L3NhbXA+OworPGNvZGU+ZGl2PC9jb2RlPjogZW5hYmxlIHRoZSByZWNpcHJvY2FsIGFwcHJveGltYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBib3RoIHNpbmdsZSBhbmQgZG91YmxlIHByZWNpc2lvbjsKKzxjb2RlPmRpdmY8L2NvZGU+OiBlbmFibGUgdGhlIHNpbmdsZS1wcmVjaXNpb24gcmVjaXByb2NhbCBhcHByb3hpbWF0aW9uIGluc3RydWN0aW9uczsKKzxjb2RlPmRpdmQ8L2NvZGU+OiBlbmFibGUgdGhlIGRvdWJsZS1wcmVjaXNpb24gcmVjaXByb2NhbCBhcHByb3hpbWF0aW9uIGluc3RydWN0aW9uczsKKzxjb2RlPnJzcXJ0PC9jb2RlPjogZW5hYmxlIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFwcHJveGltYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBib3RoIHNpbmdsZSBhbmQgZG91YmxlIHByZWNpc2lvbjsKKzxjb2RlPnJzcXJ0ZjwvY29kZT46IGVuYWJsZSB0aGUgc2luZ2xlLXByZWNpc2lvbiByZWNpcHJvY2FsIHNxdWFyZSByb290IGFwcHJveGltYXRpb24gaW5zdHJ1Y3Rpb25zOworPGNvZGU+cnNxcnRkPC9jb2RlPjogZW5hYmxlIHRoZSBkb3VibGUtcHJlY2lzaW9uIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYXBwcm94aW1hdGlvbiBpbnN0cnVjdGlvbnM7CisKKyAgICAgPHA+U28sIGZvciBleGFtcGxlLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlY2lwPWFsbCwhcnNxcnRkPC9zcGFuPjwvc2FtcD4gZW5hYmxlcworYWxsIG9mIHRoZSByZWNpcHJvY2FsIGVzdGltYXRlIGluc3RydWN0aW9ucywgZXhjZXB0IGZvciB0aGUKKzxjb2RlPkZSU1FSVEU8L2NvZGU+LCA8Y29kZT5YU1JTUVJURURQPC9jb2RlPiwgYW5kIDxjb2RlPlhWUlNRUlRFRFA8L2NvZGU+IGluc3RydWN0aW9ucword2hpY2ggaGFuZGxlIHRoZSBkb3VibGUtcHJlY2lzaW9uIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgY2FsY3VsYXRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1yZWNpcC1wcmVjaXNpb248L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcmVjaXAtcHJlY2lzaW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcmVjaXBfMDAyZHByZWNpc2lvbi0yMDUxIj48L2E+QXNzdW1lIChkbyBub3QgYXNzdW1lKSB0aGF0IHRoZSByZWNpcHJvY2FsIGVzdGltYXRlIGluc3RydWN0aW9ucworcHJvdmlkZSBoaWdoZXItcHJlY2lzaW9uIGVzdGltYXRlcyB0aGFuIGlzIG1hbmRhdGVkIGJ5IHRoZSBQb3dlclBDCitBQkkuICBTZWxlY3RpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9cG93ZXI2PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PXBvd2VyNzwvc3Bhbj48L3NhbXA+IG9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1wb3dlcjg8L3NwYW4+PC9zYW1wPiBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1yZWNpcC1wcmVjaXNpb248L3NwYW4+PC9zYW1wPi4gCitUaGUgZG91YmxlLXByZWNpc2lvbiBzcXVhcmUgcm9vdCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMgYXJlIG5vdCBnZW5lcmF0ZWQgYnkKK2RlZmF1bHQgb24gbG93LXByZWNpc2lvbiBtYWNoaW5lcywgc2luY2UgdGhleSBkbyBub3QgcHJvdmlkZSBhbgorZXN0aW1hdGUgdGhhdCBjb252ZXJnZXMgYWZ0ZXIgdGhyZWUgc3RlcHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXZlY2xpYmFiaT08L2NvZGU+PHZhcj50eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW12ZWNsaWJhYmktMjA1MiI+PC9hPlNwZWNpZmllcyB0aGUgQUJJIHR5cGUgdG8gdXNlIGZvciB2ZWN0b3JpemluZyBpbnRyaW5zaWNzIHVzaW5nIGFuCitleHRlcm5hbCBsaWJyYXJ5LiAgVGhlIG9ubHkgdHlwZSBzdXBwb3J0ZWQgYXQgcHJlc2VudCBpcyA8Y29kZT5tYXNzPC9jb2RlPiwKK3doaWNoIHNwZWNpZmllcyB0byB1c2UgSUJNJ3MgTWF0aGVtYXRpY2FsIEFjY2VsZXJhdGlvbiBTdWJzeXN0ZW0KKyhNQVNTKSBsaWJyYXJpZXMgZm9yIHZlY3Rvcml6aW5nIGludHJpbnNpY3MgdXNpbmcgZXh0ZXJuYWwgbGlicmFyaWVzLiAKK0dDQyBjdXJyZW50bHkgZW1pdHMgY2FsbHMgdG8gPGNvZGU+YWNvc2QyPC9jb2RlPiwgPGNvZGU+YWNvc2Y0PC9jb2RlPiwKKzxjb2RlPmFjb3NoZDI8L2NvZGU+LCA8Y29kZT5hY29zaGY0PC9jb2RlPiwgPGNvZGU+YXNpbmQyPC9jb2RlPiwgPGNvZGU+YXNpbmY0PC9jb2RlPiwKKzxjb2RlPmFzaW5oZDI8L2NvZGU+LCA8Y29kZT5hc2luaGY0PC9jb2RlPiwgPGNvZGU+YXRhbjJkMjwvY29kZT4sIDxjb2RlPmF0YW4yZjQ8L2NvZGU+LAorPGNvZGU+YXRhbmQyPC9jb2RlPiwgPGNvZGU+YXRhbmY0PC9jb2RlPiwgPGNvZGU+YXRhbmhkMjwvY29kZT4sIDxjb2RlPmF0YW5oZjQ8L2NvZGU+LAorPGNvZGU+Y2JydGQyPC9jb2RlPiwgPGNvZGU+Y2JydGY0PC9jb2RlPiwgPGNvZGU+Y29zZDI8L2NvZGU+LCA8Y29kZT5jb3NmNDwvY29kZT4sCis8Y29kZT5jb3NoZDI8L2NvZGU+LCA8Y29kZT5jb3NoZjQ8L2NvZGU+LCA8Y29kZT5lcmZjZDI8L2NvZGU+LCA8Y29kZT5lcmZjZjQ8L2NvZGU+LAorPGNvZGU+ZXJmZDI8L2NvZGU+LCA8Y29kZT5lcmZmNDwvY29kZT4sIDxjb2RlPmV4cDJkMjwvY29kZT4sIDxjb2RlPmV4cDJmNDwvY29kZT4sCis8Y29kZT5leHBkMjwvY29kZT4sIDxjb2RlPmV4cGY0PC9jb2RlPiwgPGNvZGU+ZXhwbTFkMjwvY29kZT4sIDxjb2RlPmV4cG0xZjQ8L2NvZGU+LAorPGNvZGU+aHlwb3RkMjwvY29kZT4sIDxjb2RlPmh5cG90ZjQ8L2NvZGU+LCA8Y29kZT5sZ2FtbWFkMjwvY29kZT4sIDxjb2RlPmxnYW1tYWY0PC9jb2RlPiwKKzxjb2RlPmxvZzEwZDI8L2NvZGU+LCA8Y29kZT5sb2cxMGY0PC9jb2RlPiwgPGNvZGU+bG9nMXBkMjwvY29kZT4sIDxjb2RlPmxvZzFwZjQ8L2NvZGU+LAorPGNvZGU+bG9nMmQyPC9jb2RlPiwgPGNvZGU+bG9nMmY0PC9jb2RlPiwgPGNvZGU+bG9nZDI8L2NvZGU+LCA8Y29kZT5sb2dmNDwvY29kZT4sCis8Y29kZT5wb3dkMjwvY29kZT4sIDxjb2RlPnBvd2Y0PC9jb2RlPiwgPGNvZGU+c2luZDI8L2NvZGU+LCA8Y29kZT5zaW5mNDwvY29kZT4sIDxjb2RlPnNpbmhkMjwvY29kZT4sCis8Y29kZT5zaW5oZjQ8L2NvZGU+LCA8Y29kZT5zcXJ0ZDI8L2NvZGU+LCA8Y29kZT5zcXJ0ZjQ8L2NvZGU+LCA8Y29kZT50YW5kMjwvY29kZT4sCis8Y29kZT50YW5mNDwvY29kZT4sIDxjb2RlPnRhbmhkMjwvY29kZT4sIGFuZCA8Y29kZT50YW5oZjQ8L2NvZGU+IHdoZW4gZ2VuZXJhdGluZyBjb2RlCitmb3IgcG93ZXI3LiAgQm90aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnRyZWUtdmVjdG9yaXplPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnM8L3NwYW4+PC9zYW1wPiBtdXN0IGFsc28gYmUgZW5hYmxlZC4gIFRoZSBNQVNTCitsaWJyYXJpZXMgbXVzdCBiZSBzcGVjaWZpZWQgYXQgbGluayB0aW1lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mcml6PC9jb2RlPjxkdD48Y29kZT4tbW5vLWZyaXo8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1mcml6LTIwNTMiPjwvYT5HZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSB0aGUgPGNvZGU+ZnJpejwvY29kZT4gaW5zdHJ1Y3Rpb24gd2hlbiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9uczwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyB1c2VkIHRvIG9wdGltaXplCityb3VuZGluZyBvZiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdG8gNjQtYml0IGludGVnZXIgYW5kIGJhY2sgdG8gZmxvYXRpbmcKK3BvaW50LiAgVGhlIDxjb2RlPmZyaXo8L2NvZGU+IGluc3RydWN0aW9uIGRvZXMgbm90IHJldHVybiB0aGUgc2FtZSB2YWx1ZSBpZgordGhlIGZsb2F0aW5nLXBvaW50IG51bWJlciBpcyB0b28gbGFyZ2UgdG8gZml0IGluIGFuIGludGVnZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBvaW50ZXJzLXRvLW5lc3RlZC1mdW5jdGlvbnM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcG9pbnRlcnMtdG8tbmVzdGVkLWZ1bmN0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXBvaW50ZXJzXzAwMmR0b18wMDJkbmVzdGVkXzAwMmRmdW5jdGlvbnMtMjA1NCI+PC9hPkdlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIGNvZGUgdG8gbG9hZCB1cCB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyCisoPHZhcj5yMTE8L3Zhcj4pIHdoZW4gY2FsbGluZyB0aHJvdWdoIGEgcG9pbnRlciBvbiBBSVggYW5kIDY0LWJpdCBMaW51eAorc3lzdGVtcyB3aGVyZSBhIGZ1bmN0aW9uIHBvaW50ZXIgcG9pbnRzIHRvIGEgMy13b3JkIGRlc2NyaXB0b3IgZ2l2aW5nCit0aGUgZnVuY3Rpb24gYWRkcmVzcywgVE9DIHZhbHVlIHRvIGJlIGxvYWRlZCBpbiByZWdpc3RlciA8dmFyPnIyPC92YXI+LCBhbmQKK3N0YXRpYyBjaGFpbiB2YWx1ZSB0byBiZSBsb2FkZWQgaW4gcmVnaXN0ZXIgPHZhcj5yMTE8L3Zhcj4uICBUaGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcG9pbnRlcnMtdG8tbmVzdGVkLWZ1bmN0aW9uczwvc3Bhbj48L3NhbXA+IGlzIG9uIGJ5IGRlZmF1bHQuICBZb3UgY2Fubm90CitjYWxsIHRocm91Z2ggcG9pbnRlcnMgdG8gbmVzdGVkIGZ1bmN0aW9ucyBvciBwb2ludGVycwordG8gZnVuY3Rpb25zIGNvbXBpbGVkIGluIG90aGVyIGxhbmd1YWdlcyB0aGF0IHVzZSB0aGUgc3RhdGljIGNoYWluIGlmCit5b3UgdXNlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXBvaW50ZXJzLXRvLW5lc3RlZC1mdW5jdGlvbnM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2F2ZS10b2MtaW5kaXJlY3Q8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc2F2ZS10b2MtaW5kaXJlY3Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zYXZlXzAwMmR0b2NfMDAyZGluZGlyZWN0LTIwNTUiPjwvYT5HZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSBjb2RlIHRvIHNhdmUgdGhlIFRPQyB2YWx1ZSBpbiB0aGUgcmVzZXJ2ZWQKK3N0YWNrIGxvY2F0aW9uIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSBpZiB0aGUgZnVuY3Rpb24gY2FsbHMgdGhyb3VnaAorYSBwb2ludGVyIG9uIEFJWCBhbmQgNjQtYml0IExpbnV4IHN5c3RlbXMuICBJZiB0aGUgVE9DIHZhbHVlIGlzIG5vdAorc2F2ZWQgaW4gdGhlIHByb2xvZ3VlLCBpdCBpcyBzYXZlZCBqdXN0IGJlZm9yZSB0aGUgY2FsbCB0aHJvdWdoIHRoZQorcG9pbnRlci4gIFRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXNhdmUtdG9jLWluZGlyZWN0PC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIHRoZSBkZWZhdWx0LiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLVByYWdtYXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtUHJhZ21hcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiY2ZmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLVByYWdtYXMuaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SUy82MDAwIGFuZCBQb3dlclBDIFByYWdtYXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiIHRpdGxlPSJQcmFnbWFzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTWVQLVByYWdtYXMuaHRtbCNNZVAtUHJhZ21hcyIgdGl0bGU9Ik1lUCBQcmFnbWFzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGFyd2luLVByYWdtYXMuaHRtbCNEYXJ3aW4tUHJhZ21hcyIgdGl0bGU9IkRhcndpbiBQcmFnbWFzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJTJTJmNjAwMC1hbmQtUG93ZXJQQy1QcmFnbWFzIj48L2E+Cis8YSBuYW1lPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1QcmFnbWFzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRhcndpbi1QcmFnbWFzLmh0bWwjRGFyd2luLVByYWdtYXMiPkRhcndpbiBQcmFnbWFzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTWVQLVByYWdtYXMuaHRtbCNNZVAtUHJhZ21hcyI+TWVQIFByYWdtYXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTguNCBSUy82MDAwIGFuZCBQb3dlclBDIFByYWdtYXM8L2g0PgorCis8cD5UaGUgUlMvNjAwMCBhbmQgUG93ZXJQQyB0YXJnZXRzIGRlZmluZSBvbmUgcHJhZ21hIGZvciBjb250cm9sbGluZword2hldGhlciBvciBub3QgdGhlIDxjb2RlPmxvbmdjYWxsPC9jb2RlPiBhdHRyaWJ1dGUgaXMgYWRkZWQgdG8gZnVuY3Rpb24KK2RlY2xhcmF0aW9ucyBieSBkZWZhdWx0LiAgVGhpcyBwcmFnbWEgb3ZlcnJpZGVzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWxvbmdjYWxsPC9zcGFuPjwvc2FtcD4KK29wdGlvbiwgYnV0IG5vdCB0aGUgPGNvZGU+bG9uZ2NhbGw8L2NvZGU+IGFuZCA8Y29kZT5zaG9ydGNhbGw8L2NvZGU+IGF0dHJpYnV0ZXMuIAorU2VlIDxhIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGVuIGxvbmcKK2NhbGxzIGFyZSBhbmQgYXJlIG5vdCBuZWNlc3NhcnkuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPmxvbmdjYWxsICgxKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hXzAwMmMtbG9uZ2NhbGwtMzQ2NCI+PC9hPkFwcGx5IHRoZSA8Y29kZT5sb25nY2FsbDwvY29kZT4gYXR0cmlidXRlIHRvIGFsbCBzdWJzZXF1ZW50IGZ1bmN0aW9uCitkZWNsYXJhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5sb25nY2FsbCAoMCk8L2NvZGU+PGRkPkRvIG5vdCBhcHBseSB0aGUgPGNvZGU+bG9uZ2NhbGw8L2NvZGU+IGF0dHJpYnV0ZSB0byBzdWJzZXF1ZW50IGZ1bmN0aW9uCitkZWNsYXJhdGlvbnMuIAorPC9kbD4KKworPCEtLSBEZXNjcmliZSBoODMwMCBwcmFnbWFzIGhlcmUuIC0tPgorPCEtLSBEZXNjcmliZSBzaCBwcmFnbWFzIGhlcmUuIC0tPgorPCEtLSBEZXNjcmliZSB2ODUwIHByYWdtYXMgaGVyZS4gLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9SWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTQ2MTg4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9SWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwxOTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJYIEJ1aWx0LWluIEZ1bmN0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQb3dlclBDLUFsdGlWZWNfMDAyZlZTWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUG93ZXJQQy1BbHRpVmVjXzAwMmZWU1gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlBvd2VyUEMgQWx0aVZlYy9WU1ggQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSWC1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Uy8zOTAgU3lzdGVtIHogQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUG93ZXJQQy1BbHRpVmVjXzAwMmZWU1gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1Bvd2VyUEMtQWx0aVZlY18wMDJmVlNYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlBvd2VyUEMgQWx0aVZlYy9WU1ggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIj5UYXJnZXQgQnVpbHRpbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU2LjE2IFJYIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPkdDQyBzdXBwb3J0cyBzb21lIG9mIHRoZSBSWCBpbnN0cnVjdGlvbnMgd2hpY2ggY2Fubm90IGJlIGV4cHJlc3NlZCBpbgordGhlIEMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdmlhIHRoZSB1c2Ugb2YgYnVpbHQtaW4gZnVuY3Rpb25zLiAgVGhlCitmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3J4X2JyazwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmYnJrLTM0MTYiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPmJyazwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl9yeF9jbHJwc3c8L2I+ICg8dmFyPmludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmY2xycHN3LTM0MTciPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPmNscnBzdzwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB0byBjbGVhciB0aGUgc3BlY2lmaWVkCitiaXQgaW4gdGhlIHByb2Nlc3NvciBzdGF0dXMgd29yZC4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl9yeF9pbnQ8L2I+ICg8dmFyPmludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmaW50LTM0MTgiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPmludDwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB0byBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQKK3dpdGggdGhlIHNwZWNpZmllZCB2YWx1ZS4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl9yeF9tYWNoaTwvYj4gKDx2YXI+aW50LCBpbnQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1Zm1hY2hpLTM0MTkiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPm1hY2hpPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIHRvIGFkZCB0aGUgcmVzdWx0IG9mCittdWx0aXBseWluZyB0aGUgdG9wIDE2IGJpdHMgb2YgdGhlIHR3byBhcmd1bWVudHMgaW50byB0aGUKK2FjY3VtdWxhdG9yLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3J4X21hY2xvPC9iPiAoPHZhcj5pbnQsIGludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbWFjbG8tMzQyMCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+bWFjbG88L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdG8gYWRkIHRoZSByZXN1bHQgb2YKK211bHRpcGx5aW5nIHRoZSBib3R0b20gMTYgYml0cyBvZiB0aGUgdHdvIGFyZ3VtZW50cyBpbnRvIHRoZQorYWNjdW11bGF0b3IuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2J1aWx0aW5fcnhfbXVsaGk8L2I+ICg8dmFyPmludCwgaW50PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJ4XzAwNWZtdWxoaS0zNDIxIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+R2VuZXJhdGVzIHRoZSA8Y29kZT5tdWxoaTwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB0byBwbGFjZSB0aGUgcmVzdWx0IG9mCittdWx0aXBseWluZyB0aGUgdG9wIDE2IGJpdHMgb2YgdGhlIHR3byBhcmd1bWVudHMgaW50byB0aGUKK2FjY3VtdWxhdG9yLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3J4X211bGxvPC9iPiAoPHZhcj5pbnQsIGludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXVsbG8tMzQyMiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+bXVsbG88L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdG8gcGxhY2UgdGhlIHJlc3VsdCBvZgorbXVsdGlwbHlpbmcgdGhlIGJvdHRvbSAxNiBiaXRzIG9mIHRoZSB0d28gYXJndW1lbnRzIGludG8gdGhlCithY2N1bXVsYXRvci4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBpbnQgPGI+X19idWlsdGluX3J4X212ZmFjaGk8L2I+ICg8dmFyPnZvaWQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1Zm12ZmFjaGktMzQyMyI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+bXZmYWNoaTwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB0byByZWFkIHRoZSB0b3AKKzMyIGJpdHMgb2YgdGhlIGFjY3VtdWxhdG9yLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fcnhfbXZmYWNtaTwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZmYWNtaS0zNDI0Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+R2VuZXJhdGVzIHRoZSA8Y29kZT5tdmZhY21pPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIHRvIHJlYWQgdGhlIG1pZGRsZQorMzIgYml0cyBvZiB0aGUgYWNjdW11bGF0b3IuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9yeF9tdmZjPC9iPiAoPHZhcj5pbnQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1Zm12ZmMtMzQyNSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+bXZmYzwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB3aGljaCByZWFkcyB0aGUgY29udHJvbAorcmVnaXN0ZXIgc3BlY2lmaWVkIGluIGl0cyBhcmd1bWVudCBhbmQgcmV0dXJucyBpdHMgdmFsdWUuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2J1aWx0aW5fcnhfbXZ0YWNoaTwvYj4gKDx2YXI+aW50PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJ4XzAwNWZtdnRhY2hpLTM0MjYiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPm12dGFjaGk8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdG8gc2V0IHRoZSB0b3AKKzMyIGJpdHMgb2YgdGhlIGFjY3VtdWxhdG9yLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3J4X212dGFjbG88L2I+ICg8dmFyPmludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmbXZ0YWNsby0zNDI3Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+R2VuZXJhdGVzIHRoZSA8Y29kZT5tdnRhY2xvPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIHRvIHNldCB0aGUgYm90dG9tCiszMiBiaXRzIG9mIHRoZSBhY2N1bXVsYXRvci4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl9yeF9tdnRjPC9iPiAoPHZhcj5pbnQgcmVnLCBpbnQgdmFsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJ4XzAwNWZtdnRjLTM0MjgiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPm12dGM8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gd2hpY2ggc2V0cyBjb250cm9sCityZWdpc3RlciBudW1iZXIgPGNvZGU+cmVnPC9jb2RlPiB0byA8Y29kZT52YWw8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3J4X212dGlwbDwvYj4gKDx2YXI+aW50PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJ4XzAwNWZtdnRpcGwtMzQyOSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+bXZ0aXBsPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIHNldCB0aGUgaW50ZXJydXB0Citwcmlvcml0eSBsZXZlbC4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl9yeF9yYWN3PC9iPiAoPHZhcj5pbnQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1ZnJhY3ctMzQzMCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+cmFjdzwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB0byByb3VuZCB0aGUgYWNjdW11bGF0b3IKK2FjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIG1vZGUuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9yeF9yZXZ3PC9iPiAoPHZhcj5pbnQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcnhfMDA1ZnJldnctMzQzMSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+cmV2dzwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB3aGljaCBzd2FwcyB0aGUgYnl0ZXMgaW4KK3RoZSBhcmd1bWVudCBzbyB0aGF0IGJpdHMgMCZuZGFzaDs3IG5vdyBvY2N1cHkgYml0cyA4Jm5kYXNoOzE1IGFuZCB2aWNlIHZlcnNhLAorYW5kIGFsc28gYml0cyAxNiZuZGFzaDsyMyBvY2N1cHkgYml0cyAyNCZuZGFzaDszMSBhbmQgdmljZSB2ZXJzYS4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl9yeF9ybXBhPC9iPiAoPHZhcj52b2lkPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnJ4XzAwNWZybXBhLTM0MzIiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPnJtcGE8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gd2hpY2ggaW5pdGlhdGVzIGEKK3JlcGVhdGVkIG11bHRpcGx5IGFuZCBhY2N1bXVsYXRlIHNlcXVlbmNlLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3J4X3JvdW5kPC9iPiAoPHZhcj5mbG9hdDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmcm91bmQtMzQzMyI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+cm91bmQ8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gd2hpY2ggcmV0dXJucyB0aGUKK2Zsb2F0aW5nLXBvaW50IGFyZ3VtZW50IHJvdW5kZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUKK3NldCBpbiB0aGUgZmxvYXRpbmctcG9pbnQgc3RhdHVzIHdvcmQgcmVnaXN0ZXIuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9yeF9zYXQ8L2I+ICg8dmFyPmludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmc2F0LTM0MzQiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPnNhdDwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB3aGljaCByZXR1cm5zIHRoZQorc2F0dXJhdGVkIHZhbHVlIG9mIHRoZSBhcmd1bWVudC4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl9yeF9zZXRwc3c8L2I+ICg8dmFyPmludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmc2V0cHN3LTM0MzUiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPnNldHBzdzwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB0byBzZXQgdGhlIHNwZWNpZmllZAorYml0IGluIHRoZSBwcm9jZXNzb3Igc3RhdHVzIHdvcmQuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2J1aWx0aW5fcnhfd2FpdDwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZyeF8wMDVmd2FpdC0zNDM2Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+R2VuZXJhdGVzIHRoZSA8Y29kZT53YWl0PC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JYLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUlgtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWFhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JYLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDE5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UlggT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyIgdGl0bGU9IlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiIHRpdGxlPSJTLzM5MCBhbmQgelNlcmllcyBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJYLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+Uy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMuaHRtbCNSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zIj5SUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMzUgUlggT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJYLU9wdGlvbnMtMjA1NiI+PC9hPgorVGhlc2UgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIFJYIHRhcmdldHM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tNjRiaXQtZG91YmxlczwvY29kZT48ZHQ+PGNvZGU+LW0zMmJpdC1kb3VibGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNjRiaXRfMDAyZGRvdWJsZXMtMjA1NyI+PC9hPjxhIG5hbWU9ImluZGV4LW0zMmJpdF8wMDJkZG91Ymxlcy0yMDU4Ij48L2E+TWFrZSB0aGUgPGNvZGU+ZG91YmxlPC9jb2RlPiBkYXRhIHR5cGUgYmUgNjQgYml0cyAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW02NGJpdC1kb3VibGVzPC9zcGFuPjwvc2FtcD4pCitvciAzMiBiaXRzICg8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTMyYml0LWRvdWJsZXM8L3NwYW4+PC9zYW1wPikgaW4gc2l6ZS4gIFRoZSBkZWZhdWx0IGlzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTMyYml0LWRvdWJsZXM8L3NwYW4+PC9zYW1wPi4gIDxlbT5Ob3RlPC9lbT4gUlggZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUgb25seQord29ya3Mgb24gMzItYml0IHZhbHVlcywgd2hpY2ggaXMgd2h5IHRoZSBkZWZhdWx0IGlzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTMyYml0LWRvdWJsZXM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcHU8L2NvZGU+PGR0Pjxjb2RlPi1ub2ZwdTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnB1LTIwNTkiPjwvYT48YSBuYW1lPSJpbmRleC1ub2ZwdS0yMDYwIj48L2E+RW5hYmxlcyAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwdTwvc3Bhbj48L3NhbXA+KSBvciBkaXNhYmxlcyAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW5vZnB1PC9zcGFuPjwvc2FtcD4pIHRoZSB1c2Ugb2YgUlgKK2Zsb2F0aW5nLXBvaW50IGhhcmR3YXJlLiAgVGhlIGRlZmF1bHQgaXMgZW5hYmxlZCBmb3IgdGhlIDx2YXI+Ulg2MDA8L3Zhcj4KK3NlcmllcyBhbmQgZGlzYWJsZWQgZm9yIHRoZSA8dmFyPlJYMjAwPC92YXI+IHNlcmllcy4KKworICAgICA8cD5GbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMgYXJlIG9ubHkgZ2VuZXJhdGVkIGZvciAzMi1iaXQgZmxvYXRpbmctcG9pbnQKK3ZhbHVlcywgaG93ZXZlciwgc28gdGhlIEZQVSBoYXJkd2FyZSBpcyBub3QgdXNlZCBmb3IgZG91YmxlcyBpZiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tNjRiaXQtZG91Ymxlczwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyB1c2VkLgorCisgICAgIDxwPjxlbT5Ob3RlPC9lbT4gSWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHU8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgZW5hYmxlZCB0aGVuCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnM8L3NwYW4+PC9zYW1wPiBpcyBhbHNvIGVuYWJsZWQgYXV0b21hdGljYWxseS4gCitUaGlzIGlzIGJlY2F1c2UgdGhlIFJYIEZQVSBpbnN0cnVjdGlvbnMgYXJlIHRoZW1zZWx2ZXMgdW5zYWZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jcHU9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZG1jcHUtMjA2MSI+PC9hPlNlbGVjdHMgdGhlIHR5cGUgb2YgUlggQ1BVIHRvIGJlIHRhcmdldGVkLiAgQ3VycmVudGx5IHRocmVlIHR5cGVzIGFyZQorc3VwcG9ydGVkLCB0aGUgZ2VuZXJpYyA8dmFyPlJYNjAwPC92YXI+IGFuZCA8dmFyPlJYMjAwPC92YXI+IHNlcmllcyBoYXJkd2FyZSBhbmQKK3RoZSBzcGVjaWZpYyA8dmFyPlJYNjEwPC92YXI+IENQVS4gIFRoZSBkZWZhdWx0IGlzIDx2YXI+Ulg2MDA8L3Zhcj4uCisKKyAgICAgPHA+VGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIDx2YXI+Ulg2MDA8L3Zhcj4gYW5kIDx2YXI+Ulg2MTA8L3Zhcj4gaXMgdGhhdCB0aGUKKzx2YXI+Ulg2MTA8L3Zhcj4gZG9lcyBub3Qgc3VwcG9ydCB0aGUgPGNvZGU+TVZUSVBMPC9jb2RlPiBpbnN0cnVjdGlvbi4KKworICAgICA8cD5UaGUgPHZhcj5SWDIwMDwvdmFyPiBzZXJpZXMgZG9lcyBub3QgaGF2ZSBhIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IHVuaXQKK2FuZCBzbyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbm9mcHU8L3NwYW4+PC9zYW1wPiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGlzIHR5cGUgaXMKK3NlbGVjdGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1iaWctZW5kaWFuLWRhdGE8L2NvZGU+PGR0Pjxjb2RlPi1tbGl0dGxlLWVuZGlhbi1kYXRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYmlnXzAwMmRlbmRpYW5fMDAyZGRhdGEtMjA2MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1saXR0bGVfMDAyZGVuZGlhbl8wMDJkZGF0YS0yMDYzIj48L2E+U3RvcmUgZGF0YSAoYnV0IG5vdCBjb2RlKSBpbiB0aGUgYmlnLWVuZGlhbiBmb3JtYXQuICBUaGUgZGVmYXVsdCBpcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1saXR0bGUtZW5kaWFuLWRhdGE8L3NwYW4+PC9zYW1wPiwgaS5lLiB0byBzdG9yZSBkYXRhIGluIHRoZSBsaXR0bGUtZW5kaWFuCitmb3JtYXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNtYWxsLWRhdGEtbGltaXQ9PC9jb2RlPjx2YXI+TjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tc21hbGxfMDAyZGRhdGFfMDAyZGxpbWl0LTIwNjQiPjwvYT5TcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBpbiBieXRlcyBvZiBnbG9iYWwgYW5kIHN0YXRpYyB2YXJpYWJsZXMKK3doaWNoIGNhbiBiZSBwbGFjZWQgaW50byB0aGUgc21hbGwgZGF0YSBhcmVhLiAgVXNpbmcgdGhlIHNtYWxsIGRhdGEKK2FyZWEgY2FuIGxlYWQgdG8gc21hbGxlciBhbmQgZmFzdGVyIGNvZGUsIGJ1dCB0aGUgc2l6ZSBvZiBhcmVhIGlzCitsaW1pdGVkIGFuZCBpdCBpcyB1cCB0byB0aGUgcHJvZ3JhbW1lciB0byBlbnN1cmUgdGhhdCB0aGUgYXJlYSBkb2VzCitub3Qgb3ZlcmZsb3cuICBBbHNvIHdoZW4gdGhlIHNtYWxsIGRhdGEgYXJlYSBpcyB1c2VkIG9uZSBvZiB0aGUgUlgncworcmVnaXN0ZXJzICh1c3VhbGx5IDxjb2RlPnIxMzwvY29kZT4pIGlzIHJlc2VydmVkIGZvciB1c2UgcG9pbnRpbmcgdG8gdGhpcworYXJlYSwgc28gaXQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSBjb21waWxlci4gIFRoaXMKK2NvdWxkIHJlc3VsdCBpbiBzbG93ZXIgYW5kL29yIGxhcmdlciBjb2RlIGlmIHZhcmlhYmxlcyBhcmUgcHVzaGVkIG9udG8KK3RoZSBzdGFjayBpbnN0ZWFkIG9mIGJlaW5nIGhlbGQgaW4gdGhpcyByZWdpc3Rlci4KKworICAgICA8cD5Ob3RlLCBjb21tb24gdmFyaWFibGVzICh2YXJpYWJsZXMgdGhhdCBoYXZlIG5vdCBiZWVuIGluaXRpYWxpemVkKSBhbmQKK2NvbnN0YW50cyBhcmUgbm90IHBsYWNlZCBpbnRvIHRoZSBzbWFsbCBkYXRhIGFyZWEgYXMgdGhleSBhcmUgYXNzaWduZWQKK3RvIG90aGVyIHNlY3Rpb25zIGluIHRoZSBvdXRwdXQgZXhlY3V0YWJsZS4KKworICAgICA8cD5UaGUgZGVmYXVsdCB2YWx1ZSBpcyB6ZXJvLCB3aGljaCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBOb3RlLCB0aGlzCitmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCBoaWdoZXIgb3B0aW1pemF0aW9uIGxldmVscworKDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IGV0YykgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsbHkgZGV0cmltZW50YWwgZWZmZWN0cyBvZgorcmVzZXJ2aW5nIGEgcmVnaXN0ZXIuICBJdCBpcyB1cCB0byB0aGUgcHJvZ3JhbW1lciB0byBleHBlcmltZW50IGFuZAorZGlzY292ZXIgd2hldGhlciB0aGlzIGZlYXR1cmUgaXMgb2YgYmVuZWZpdCB0byB0aGVpciBwcm9ncmFtLiAgU2VlIHRoZQorZGVzY3JpcHRpb24gb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGlkPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGZvciBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUKK2FjdHVhbCByZWdpc3RlciB0byBob2xkIHRoZSBzbWFsbCBkYXRhIGFyZWEgcG9pbnRlciBpcyBjaG9zZW4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNpbTwvY29kZT48ZHQ+PGNvZGU+LW1uby1zaW08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zaW0tMjA2NSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc2ltLTIwNjYiPjwvYT5Vc2UgdGhlIHNpbXVsYXRvciBydW50aW1lLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBsaWJnbG9zcworYm9hcmQtc3BlY2lmaWMgcnVudGltZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYXMxMDAtc3ludGF4PC9jb2RlPjxkdD48Y29kZT4tbW5vLWFzMTAwLXN5bnRheDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFzMTAwXzAwMmRzeW50YXgtMjA2NyI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYXMxMDBfMDAyZHN5bnRheC0yMDY4Ij48L2E+V2hlbiBnZW5lcmF0aW5nIGFzc2VtYmxlciBvdXRwdXQgdXNlIGEgc3ludGF4IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoCitSZW5lc2FzJ3MgQVMxMDAgYXNzZW1ibGVyLiAgVGhpcyBzeW50YXggY2FuIGFsc28gYmUgaGFuZGxlZCBieSB0aGUgR0FTCithc3NlbWJsZXIsIGJ1dCBpdCBoYXMgc29tZSByZXN0cmljdGlvbnMgc28gaXQgaXMgbm90IGdlbmVyYXRlZCBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tYXgtY29uc3RhbnQtc2l6ZT08L2NvZGU+PHZhcj5OPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1tYXhfMDAyZGNvbnN0YW50XzAwMmRzaXplLTIwNjkiPjwvYT5TcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgY29uc3RhbnQgdGhhdCBjYW4gYmUgdXNlZCBhcworYW4gb3BlcmFuZCBpbiBhIFJYIGluc3RydWN0aW9uLiAgQWx0aG91Z2ggdGhlIFJYIGluc3RydWN0aW9uIHNldCBkb2VzCithbGxvdyBjb25zdGFudHMgb2YgdXAgdG8gNCBieXRlcyBpbiBsZW5ndGggdG8gYmUgdXNlZCBpbiBpbnN0cnVjdGlvbnMsCithIGxvbmdlciB2YWx1ZSBlcXVhdGVzIHRvIGEgbG9uZ2VyIGluc3RydWN0aW9uLiAgVGh1cyBpbiBzb21lCitjaXJjdW1zdGFuY2VzIGl0IGNhbiBiZSBiZW5lZmljaWFsIHRvIHJlc3RyaWN0IHRoZSBzaXplIG9mIGNvbnN0YW50cwordGhhdCBhcmUgdXNlZCBpbiBpbnN0cnVjdGlvbnMuICBDb25zdGFudHMgdGhhdCBhcmUgdG9vIGJpZyBhcmUgaW5zdGVhZAorcGxhY2VkIGludG8gYSBjb25zdGFudCBwb29sIGFuZCByZWZlcmVuY2VkIHZpYSByZWdpc3RlciBpbmRpcmVjdGlvbi4KKworICAgICA8cD5UaGUgdmFsdWUgPHZhcj5OPC92YXI+IGNhbiBiZSBiZXR3ZWVuIDAgYW5kIDQuICBBIHZhbHVlIG9mIDAgKHRoZSBkZWZhdWx0KQorb3IgNCBtZWFucyB0aGF0IGNvbnN0YW50cyBvZiBhbnkgc2l6ZSBhcmUgYWxsb3dlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmVsYXg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1yZWxheC0yMDcwIj48L2E+RW5hYmxlIGxpbmtlciByZWxheGF0aW9uLiAgTGlua2VyIHJlbGF4YXRpb24gaXMgYSBwcm9jZXNzIHdoZXJlYnkgdGhlCitsaW5rZXIgYXR0ZW1wdHMgdG8gcmVkdWNlIHRoZSBzaXplIG9mIGEgcHJvZ3JhbSBieSBmaW5kaW5nIHNob3J0ZXIKK3ZlcnNpb25zIG9mIHZhcmlvdXMgaW5zdHJ1Y3Rpb25zLiAgRGlzYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taW50LXJlZ2lzdGVyPTwvY29kZT48dmFyPk48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWludF8wMDJkcmVnaXN0ZXItMjA3MSI+PC9hPlNwZWNpZnkgdGhlIG51bWJlciBvZiByZWdpc3RlcnMgdG8gcmVzZXJ2ZSBmb3IgZmFzdCBpbnRlcnJ1cHQgaGFuZGxlcgorZnVuY3Rpb25zLiAgVGhlIHZhbHVlIDx2YXI+TjwvdmFyPiBjYW4gYmUgYmV0d2VlbiAwIGFuZCA0LiAgQSB2YWx1ZSBvZiAxCittZWFucyB0aGF0IHJlZ2lzdGVyIDxjb2RlPnIxMzwvY29kZT4gaXMgcmVzZXJ2ZWQgZm9yIHRoZSBleGNsdXNpdmUgdXNlCitvZiBmYXN0IGludGVycnVwdCBoYW5kbGVycy4gIEEgdmFsdWUgb2YgMiByZXNlcnZlcyA8Y29kZT5yMTM8L2NvZGU+IGFuZAorPGNvZGU+cjEyPC9jb2RlPi4gIEEgdmFsdWUgb2YgMyByZXNlcnZlcyA8Y29kZT5yMTM8L2NvZGU+LCA8Y29kZT5yMTI8L2NvZGU+IGFuZAorPGNvZGU+cjExPC9jb2RlPiwgYW5kIGEgdmFsdWUgb2YgNCByZXNlcnZlcyA8Y29kZT5yMTM8L2NvZGU+IHRocm91Z2ggPGNvZGU+cjEwPC9jb2RlPi4gCitBIHZhbHVlIG9mIDAsIHRoZSBkZWZhdWx0LCBkb2VzIG5vdCByZXNlcnZlIGFueSByZWdpc3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNhdmUtYWNjLWluLWludGVycnVwdHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zYXZlXzAwMmRhY2NfMDAyZGluXzAwMmRpbnRlcnJ1cHRzLTIwNzIiPjwvYT5TcGVjaWZpZXMgdGhhdCBpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbnMgc2hvdWxkIHByZXNlcnZlIHRoZQorYWNjdW11bGF0b3IgcmVnaXN0ZXIuICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIG5vcm1hbCBjb2RlIG1pZ2h0IHVzZQordGhlIGFjY3VtdWxhdG9yIHJlZ2lzdGVyLCBmb3IgZXhhbXBsZSBiZWNhdXNlIGl0IHBlcmZvcm1zIDY0LWJpdAorbXVsdGlwbGljYXRpb25zLiAgVGhlIGRlZmF1bHQgaXMgdG8gaWdub3JlIHRoZSBhY2N1bXVsYXRvciBhcyB0aGlzCittYWtlcyB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGZhc3Rlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcGlkPC9jb2RlPjxkdD48Y29kZT4tbW5vLXBpZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXBpZC0yMDczIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRwaWQtMjA3NCI+PC9hPkVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgcG9zaXRpb24gaW5kZXBlbmRlbnQgZGF0YS4gIFdoZW4gZW5hYmxlZCBhbnkKK2FjY2VzcyB0byBjb25zdGFudCBkYXRhIGlzIGRvbmUgdmlhIGFuIG9mZnNldCBmcm9tIGEgYmFzZSBhZGRyZXNzCitoZWxkIGluIGEgcmVnaXN0ZXIuICBUaGlzIGFsbG93cyB0aGUgbG9jYXRpb24gb2YgY29uc3RhbnQgZGF0YSB0byBiZQorZGV0ZXJtaW5lZCBhdCBydW4gdGltZSB3aXRob3V0IHJlcXVpcmluZyB0aGUgZXhlY3V0YWJsZSB0byBiZQorcmVsb2NhdGVkLCB3aGljaCBpcyBhIGJlbmVmaXQgdG8gZW1iZWRkZWQgYXBwbGljYXRpb25zIHdpdGggdGlnaHQKK21lbW9yeSBjb25zdHJhaW50cy4gIERhdGEgdGhhdCBjYW4gYmUgbW9kaWZpZWQgaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMKK29wdGlvbi4KKworICAgICA8cD5Ob3RlLCB1c2luZyB0aGlzIGZlYXR1cmUgcmVzZXJ2ZXMgYSByZWdpc3RlciwgdXN1YWxseSA8Y29kZT5yMTM8L2NvZGU+LCBmb3IKK3RoZSBjb25zdGFudCBkYXRhIGJhc2UgYWRkcmVzcy4gIFRoaXMgY2FuIHJlc3VsdCBpbiBzbG93ZXIgYW5kL29yCitsYXJnZXIgY29kZSwgZXNwZWNpYWxseSBpbiBjb21wbGljYXRlZCBmdW5jdGlvbnMuCisKKyAgICAgPHA+VGhlIGFjdHVhbCByZWdpc3RlciBjaG9zZW4gdG8gaG9sZCB0aGUgY29uc3RhbnQgZGF0YSBiYXNlIGFkZHJlc3MKK2RlcGVuZHMgdXBvbiB3aGV0aGVyIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNtYWxsLWRhdGEtbGltaXQ8L3NwYW4+PC9zYW1wPiBhbmQvb3IgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWludC1yZWdpc3Rlcjwvc3Bhbj48L3NhbXA+IGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBlbmFibGVkLiAgU3RhcnRpbmcKK3dpdGggcmVnaXN0ZXIgPGNvZGU+cjEzPC9jb2RlPiBhbmQgcHJvY2VlZGluZyBkb3dud2FyZHMsIHJlZ2lzdGVycyBhcmUKK2FsbG9jYXRlZCBmaXJzdCB0byBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1pbnQtcmVnaXN0ZXI8L3NwYW4+PC9zYW1wPiwKK3RoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1waWQ8L3NwYW4+PC9zYW1wPiBhbmQgZmluYWxseSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNtYWxsLWRhdGEtbGltaXQ8L3NwYW4+PC9zYW1wPi4gIFRodXMgaXQKK2lzIHBvc3NpYmxlIGZvciB0aGUgc21hbGwgZGF0YSBhcmVhIHJlZ2lzdGVyIHRvIGJlIDxjb2RlPnI4PC9jb2RlPiBpZiBib3RoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWludC1yZWdpc3Rlcj00PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGlkPC9zcGFuPjwvc2FtcD4gYXJlIHNwZWNpZmllZCBvbiB0aGUKK2NvbW1hbmQgbGluZS4KKworICAgICA8cD5CeSBkZWZhdWx0IHRoaXMgZmVhdHVyZSBpcyBub3QgZW5hYmxlZC4gIFRoZSBkZWZhdWx0IGNhbiBiZSByZXN0b3JlZAordmlhIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXBpZDwvc3Bhbj48L3NhbXA+IGNvbW1hbmQtbGluZSBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXdhcm4tbXVsdGlwbGUtZmFzdC1pbnRlcnJ1cHRzPC9jb2RlPjxkdD48Y29kZT4tbXdhcm4tbXVsdGlwbGUtZmFzdC1pbnRlcnJ1cHRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHdhcm5fMDAyZG11bHRpcGxlXzAwMmRmYXN0XzAwMmRpbnRlcnJ1cHRzLTIwNzUiPjwvYT48YSBuYW1lPSJpbmRleC1td2Fybl8wMDJkbXVsdGlwbGVfMDAyZGZhc3RfMDAyZGludGVycnVwdHMtMjA3NiI+PC9hPlByZXZlbnRzIEdDQyBmcm9tIGlzc3VpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgaXQgZmluZHMgbW9yZSB0aGFuIG9uZQorZmFzdCBpbnRlcnJ1cHQgaGFuZGxlciB3aGVuIGl0IGlzIGNvbXBpbGluZyBhIGZpbGUuICBUaGUgZGVmYXVsdCBpcyB0bworaXNzdWUgYSB3YXJuaW5nIGZvciBlYWNoIGV4dHJhIGZhc3QgaW50ZXJydXB0IGhhbmRsZXIgZm91bmQsIGFzIHRoZSBSWAorb25seSBzdXBwb3J0cyBvbmUgc3VjaCBpbnRlcnJ1cHQuCisKKyA8L2RsPgorCisgPHA+PGVtPk5vdGU6PC9lbT4gVGhlIGdlbmVyaWMgR0NDIGNvbW1hbmQtbGluZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmaXhlZC08L3NwYW4+PHZhcj5yZWc8L3Zhcj48L3NhbXA+CitoYXMgc3BlY2lhbCBzaWduaWZpY2FuY2UgdG8gdGhlIFJYIHBvcnQgd2hlbiB1c2VkIHdpdGggdGhlCis8Y29kZT5pbnRlcnJ1cHQ8L2NvZGU+IGZ1bmN0aW9uIGF0dHJpYnV0ZS4gIFRoaXMgYXR0cmlidXRlIGluZGljYXRlcyBhCitmdW5jdGlvbiBpbnRlbmRlZCB0byBwcm9jZXNzIGZhc3QgaW50ZXJydXB0cy4gIEdDQyBlbnN1cmVzCit0aGF0IGl0IG9ubHkgdXNlcyB0aGUgcmVnaXN0ZXJzIDxjb2RlPnIxMDwvY29kZT4sIDxjb2RlPnIxMTwvY29kZT4sIDxjb2RlPnIxMjwvY29kZT4KK2FuZC9vciA8Y29kZT5yMTM8L2NvZGU+IGFuZCBvbmx5IHByb3ZpZGVkIHRoYXQgdGhlIG5vcm1hbCB1c2Ugb2YgdGhlCitjb3JyZXNwb25kaW5nIHJlZ2lzdGVycyBoYXZlIGJlZW4gcmVzdHJpY3RlZCB2aWEgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZpeGVkLTwvc3Bhbj48dmFyPnJlZzwvdmFyPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1pbnQtcmVnaXN0ZXI8L3NwYW4+PC9zYW1wPiBjb21tYW5kLWxpbmUKK29wdGlvbnMuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Jhdy1yZWFkXzAwMmZ3cml0ZS1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUmF3LXJlYWRfMDAyZndyaXRlLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzM3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Jhdy1yZWFkXzAwMmZ3cml0ZS1GdW5jdGlvbnMuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SYXcgcmVhZC93cml0ZSBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJGUi1WIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRpcmVjdGx5XzAwMmRtYXBwZWQtTWVkaWEtRnVuY3Rpb25zLmh0bWwjRGlyZWN0bHlfMDAyZG1hcHBlZC1NZWRpYS1GdW5jdGlvbnMiIHRpdGxlPSJEaXJlY3RseS1tYXBwZWQgTWVkaWEgRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3RoZXItQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI090aGVyLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJPdGhlciBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUmF3LXJlYWQlMmZ3cml0ZS1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlJhdy1yZWFkXzAwMmZ3cml0ZS1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3RoZXItQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI090aGVyLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk90aGVyIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRpcmVjdGx5XzAwMmRtYXBwZWQtTWVkaWEtRnVuY3Rpb25zLmh0bWwjRGlyZWN0bHlfMDAyZG1hcHBlZC1NZWRpYS1GdW5jdGlvbnMiPkRpcmVjdGx5LW1hcHBlZCBNZWRpYSBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJGUl8wMDJkVi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+RlItViBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj42LjU2LjYuNCBSYXcgcmVhZC93cml0ZSBGdW5jdGlvbnM8L2g1PgorCis8cD5UaGlzIHNlY3Rpb25zIGRlc2NyaWJlcyBidWlsdC1pbiBmdW5jdGlvbnMgcmVsYXRlZCB0byByZWFkIGFuZCB3cml0ZQoraW5zdHJ1Y3Rpb25zIHRvIGFjY2VzcyBtZW1vcnkuICBUaGVzZSBmdW5jdGlvbnMgZ2VuZXJhdGUKKzxjb2RlPm1lbWJhcjwvY29kZT4gaW5zdHJ1Y3Rpb25zIHRvIGZsdXNoIHRoZSBJL08gbG9hZCBhbmQgc3RvcmVzIHdoZXJlCithcHByb3ByaWF0ZSwgYXMgZGVzY3JpYmVkIGluIEZ1aml0c3UncyBtYW51YWwgZGVzY3JpYmVkIGFib3ZlLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT51bnNpZ25lZCBjaGFyIF9fYnVpbHRpbl9yZWFkOCAodm9pZCAqPC9jb2RlPjx2YXI+ZGF0YTwvdmFyPjxjb2RlPik8L2NvZGU+PGJyPjxkdD48Y29kZT51bnNpZ25lZCBzaG9ydCBfX2J1aWx0aW5fcmVhZDE2ICh2b2lkICo8L2NvZGU+PHZhcj5kYXRhPC92YXI+PGNvZGU+KTwvY29kZT48YnI+PGR0Pjxjb2RlPnVuc2lnbmVkIGxvbmcgX19idWlsdGluX3JlYWQzMiAodm9pZCAqPC9jb2RlPjx2YXI+ZGF0YTwvdmFyPjxjb2RlPik8L2NvZGU+PGJyPjxkdD48Y29kZT51bnNpZ25lZCBsb25nIGxvbmcgX19idWlsdGluX3JlYWQ2NCAodm9pZCAqPC9jb2RlPjx2YXI+ZGF0YTwvdmFyPjxjb2RlPik8L2NvZGU+Cis8YnI+PGR0Pjxjb2RlPnZvaWQgX19idWlsdGluX3dyaXRlOCAodm9pZCAqPC9jb2RlPjx2YXI+ZGF0YTwvdmFyPjxjb2RlPiwgdW5zaWduZWQgY2hhciA8L2NvZGU+PHZhcj5kYXR1bTwvdmFyPjxjb2RlPik8L2NvZGU+PGJyPjxkdD48Y29kZT52b2lkIF9fYnVpbHRpbl93cml0ZTE2ICh2b2lkICo8L2NvZGU+PHZhcj5kYXRhPC92YXI+PGNvZGU+LCB1bnNpZ25lZCBzaG9ydCA8L2NvZGU+PHZhcj5kYXR1bTwvdmFyPjxjb2RlPik8L2NvZGU+PGJyPjxkdD48Y29kZT52b2lkIF9fYnVpbHRpbl93cml0ZTMyICh2b2lkICo8L2NvZGU+PHZhcj5kYXRhPC92YXI+PGNvZGU+LCB1bnNpZ25lZCBsb25nIDwvY29kZT48dmFyPmRhdHVtPC92YXI+PGNvZGU+KTwvY29kZT48YnI+PGR0Pjxjb2RlPnZvaWQgX19idWlsdGluX3dyaXRlNjQgKHZvaWQgKjwvY29kZT48dmFyPmRhdGE8L3Zhcj48Y29kZT4sIHVuc2lnbmVkIGxvbmcgbG9uZyA8L2NvZGU+PHZhcj5kYXR1bTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Jlc3RyaWN0ZWQtUG9pbnRlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvUmVzdHJpY3RlZC1Qb2ludGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlN2Q4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Jlc3RyaWN0ZWQtUG9pbnRlcnMuaHRtbApAQCAtMCwwICsxLDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SZXN0cmljdGVkIFBvaW50ZXJzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIiB0aXRsZT0iQysrIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwMmJfMDAyYi1Wb2xhdGlsZXMuaHRtbCNDXzAwMmJfMDAyYi1Wb2xhdGlsZXMiIHRpdGxlPSJDKysgVm9sYXRpbGVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVmFndWUtTGlua2FnZS5odG1sI1ZhZ3VlLUxpbmthZ2UiIHRpdGxlPSJWYWd1ZSBMaW5rYWdlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJlc3RyaWN0ZWQtUG9pbnRlcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVmFndWUtTGlua2FnZS5odG1sI1ZhZ3VlLUxpbmthZ2UiPlZhZ3VlIExpbmthZ2U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDXzAwMmJfMDAyYi1Wb2xhdGlsZXMuaHRtbCNDXzAwMmJfMDAyYi1Wb2xhdGlsZXMiPkMrKyBWb2xhdGlsZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjIgUmVzdHJpY3RpbmcgUG9pbnRlciBBbGlhc2luZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXJlc3RyaWN0ZWQtcG9pbnRlcnMtMzQ5OCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlc3RyaWN0ZWQtcmVmZXJlbmNlcy0zNDk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVzdHJpY3RlZC10aGlzLXBvaW50ZXItMzUwMCI+PC9hPgorQXMgd2l0aCB0aGUgQyBmcm9udCBlbmQsIEcrKyB1bmRlcnN0YW5kcyB0aGUgQzk5IGZlYXR1cmUgb2YgcmVzdHJpY3RlZCBwb2ludGVycywKK3NwZWNpZmllZCB3aXRoIHRoZSA8Y29kZT5fX3Jlc3RyaWN0X188L2NvZGU+LCBvciA8Y29kZT5fX3Jlc3RyaWN0PC9jb2RlPiB0eXBlCitxdWFsaWZpZXIuICBCZWNhdXNlIHlvdSBjYW5ub3QgY29tcGlsZSBDKysgYnkgc3BlY2lmeWluZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jOTk8L3NwYW4+PC9zYW1wPgorbGFuZ3VhZ2UgZmxhZywgPGNvZGU+cmVzdHJpY3Q8L2NvZGU+IGlzIG5vdCBhIGtleXdvcmQgaW4gQysrLgorCisgPHA+SW4gYWRkaXRpb24gdG8gYWxsb3dpbmcgcmVzdHJpY3RlZCBwb2ludGVycywgeW91IGNhbiBzcGVjaWZ5IHJlc3RyaWN0ZWQKK3JlZmVyZW5jZXMsIHdoaWNoIGluZGljYXRlIHRoYXQgdGhlIHJlZmVyZW5jZSBpcyBub3QgYWxpYXNlZCBpbiB0aGUgbG9jYWwKK2NvbnRleHQuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2b2lkIGZuIChpbnQgKl9fcmVzdHJpY3RfXyBycHRyLCBpbnQgJmFtcDtfX3Jlc3RyaWN0X18gcnJlZikKKyAgICAgeworICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICB9Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkluIHRoZSBib2R5IG9mIDxjb2RlPmZuPC9jb2RlPiwgPHZhcj5ycHRyPC92YXI+IHBvaW50cyB0byBhbiB1bmFsaWFzZWQgaW50ZWdlciBhbmQKKzx2YXI+cnJlZjwvdmFyPiByZWZlcnMgdG8gYSAoZGlmZmVyZW50KSB1bmFsaWFzZWQgaW50ZWdlci4KKworIDxwPllvdSBtYXkgYWxzbyBzcGVjaWZ5IHdoZXRoZXIgYSBtZW1iZXIgZnVuY3Rpb24ncyA8dmFyPnRoaXM8L3Zhcj4gcG9pbnRlciBpcwordW5hbGlhc2VkIGJ5IHVzaW5nIDxjb2RlPl9fcmVzdHJpY3RfXzwvY29kZT4gYXMgYSBtZW1iZXIgZnVuY3Rpb24gcXVhbGlmaWVyLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdm9pZCBUOjpmbiAoKSBfX3Jlc3RyaWN0X18KKyAgICAgeworICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICB9Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPldpdGhpbiB0aGUgYm9keSBvZiA8Y29kZT5UOjpmbjwvY29kZT4sIDx2YXI+dGhpczwvdmFyPiBoYXMgdGhlIGVmZmVjdGl2ZQorZGVmaW5pdGlvbiA8Y29kZT5UICpfX3Jlc3RyaWN0X18gY29uc3QgdGhpczwvY29kZT4uICBOb3RpY2UgdGhhdCB0aGUKK2ludGVycHJldGF0aW9uIG9mIGEgPGNvZGU+X19yZXN0cmljdF9fPC9jb2RlPiBtZW1iZXIgZnVuY3Rpb24gcXVhbGlmaWVyIGlzCitkaWZmZXJlbnQgdG8gdGhhdCBvZiA8Y29kZT5jb25zdDwvY29kZT4gb3IgPGNvZGU+dm9sYXRpbGU8L2NvZGU+IHF1YWxpZmllciwgaW4gdGhhdCBpdAoraXMgYXBwbGllZCB0byB0aGUgcG9pbnRlciByYXRoZXIgdGhhbiB0aGUgb2JqZWN0LiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgKK290aGVyIGNvbXBpbGVycyB0aGF0IGltcGxlbWVudCByZXN0cmljdGVkIHBvaW50ZXJzLgorCisgPHA+QXMgd2l0aCBhbGwgb3V0ZXJtb3N0IHBhcmFtZXRlciBxdWFsaWZpZXJzLCA8Y29kZT5fX3Jlc3RyaWN0X188L2NvZGU+IGlzCitpZ25vcmVkIGluIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF0Y2hpbmcuICBUaGlzIG1lYW5zIHlvdSBvbmx5IG5lZWQgdG8KK3NwZWNpZnkgPGNvZGU+X19yZXN0cmljdF9fPC9jb2RlPiBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIHJhdGhlciB0aGFuCitpbiBhIGZ1bmN0aW9uIHByb3RvdHlwZSBhcyB3ZWxsLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9SZXR1cm4tQWRkcmVzcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9SZXR1cm4tQWRkcmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZDBlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1JldHVybi1BZGRyZXNzLmh0bWwKQEAgLTAsMCArMSwxMjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJldHVybiBBZGRyZXNzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZ1bmN0aW9uLU5hbWVzLmh0bWwjRnVuY3Rpb24tTmFtZXMiIHRpdGxlPSJGdW5jdGlvbiBOYW1lcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZlY3Rvci1FeHRlbnNpb25zLmh0bWwjVmVjdG9yLUV4dGVuc2lvbnMiIHRpdGxlPSJWZWN0b3IgRXh0ZW5zaW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSZXR1cm4tQWRkcmVzcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWZWN0b3ItRXh0ZW5zaW9ucy5odG1sI1ZlY3Rvci1FeHRlbnNpb25zIj5WZWN0b3IgRXh0ZW5zaW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZ1bmN0aW9uLU5hbWVzLmh0bWwjRnVuY3Rpb24tTmFtZXMiPkZ1bmN0aW9uIE5hbWVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjQ4IEdldHRpbmcgdGhlIFJldHVybiBvciBGcmFtZSBBZGRyZXNzIG9mIGEgRnVuY3Rpb248L2gzPgorCis8cD5UaGVzZSBmdW5jdGlvbnMgbWF5IGJlIHVzZWQgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWxsZXJzIG9mIGEKK2Z1bmN0aW9uLgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkICogPGI+X19idWlsdGluX3JldHVybl9hZGRyZXNzPC9iPiAoPHZhcj51bnNpZ25lZCBpbnQgbGV2ZWw8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmcmV0dXJuXzAwNWZhZGRyZXNzLTI4ODYiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJldHVybiBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLCBvciBvZgorb25lIG9mIGl0cyBjYWxsZXJzLiAgVGhlIDx2YXI+bGV2ZWw8L3Zhcj4gYXJndW1lbnQgaXMgbnVtYmVyIG9mIGZyYW1lcyB0bworc2NhbiB1cCB0aGUgY2FsbCBzdGFjay4gIEEgdmFsdWUgb2YgPGNvZGU+MDwvY29kZT4geWllbGRzIHRoZSByZXR1cm4gYWRkcmVzcworb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24sIGEgdmFsdWUgb2YgPGNvZGU+MTwvY29kZT4geWllbGRzIHRoZSByZXR1cm4gYWRkcmVzcworb2YgdGhlIGNhbGxlciBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiwgYW5kIHNvIGZvcnRoLiAgV2hlbiBpbmxpbmluZwordGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YKK3RoZSBmdW5jdGlvbiB0aGF0IGlzIHJldHVybmVkIHRvLiAgVG8gd29yayBhcm91bmQgdGhpcyBiZWhhdmlvciB1c2UKK3RoZSA8Y29kZT5ub2lubGluZTwvY29kZT4gZnVuY3Rpb24gYXR0cmlidXRlLgorCisgICAgICA8cD5UaGUgPHZhcj5sZXZlbDwvdmFyPiBhcmd1bWVudCBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlci4KKworICAgICAgPHA+T24gc29tZSBtYWNoaW5lcyBpdCBtYXkgYmUgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHJldHVybiBhZGRyZXNzIG9mCithbnkgZnVuY3Rpb24gb3RoZXIgdGhhbiB0aGUgY3VycmVudCBvbmU7IGluIHN1Y2ggY2FzZXMsIG9yIHdoZW4gdGhlIHRvcAorb2YgdGhlIHN0YWNrIGhhcyBiZWVuIHJlYWNoZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA8Y29kZT4wPC9jb2RlPiBvciBhCityYW5kb20gdmFsdWUuICBJbiBhZGRpdGlvbiwgPGNvZGU+X19idWlsdGluX2ZyYW1lX2FkZHJlc3M8L2NvZGU+IG1heSBiZSB1c2VkCit0byBkZXRlcm1pbmUgaWYgdGhlIHRvcCBvZiB0aGUgc3RhY2sgaGFzIGJlZW4gcmVhY2hlZC4KKworICAgICAgPHA+QWRkaXRpb25hbCBwb3N0LXByb2Nlc3Npbmcgb2YgdGhlIHJldHVybmVkIHZhbHVlIG1heSBiZSBuZWVkZWQsIHNlZQorPGNvZGU+X19idWlsdGluX2V4dHJhY3RfcmV0dXJuX2FkZHI8L2NvZGU+LgorCisgICAgICA8cD5UaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCBhIG5vbnplcm8gYXJndW1lbnQgZm9yIGRlYnVnZ2luZworcHVycG9zZXMuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCAqIDxiPl9fYnVpbHRpbl9leHRyYWN0X3JldHVybl9hZGRyPC9iPiAoPHZhcj52b2lkICphZGRyPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmV4dHJhY3RfMDA1ZnJldHVybl8wMDVmYWRkci0yODg3Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhlIGFkZHJlc3MgYXMgcmV0dXJuZWQgYnkgPGNvZGU+X19idWlsdGluX3JldHVybl9hZGRyZXNzPC9jb2RlPiBtYXkgaGF2ZSB0byBiZSBmZWQKK3Rocm91Z2ggdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGFjdHVhbCBlbmNvZGVkIGFkZHJlc3MuICBGb3IgZXhhbXBsZSwgb24gdGhlCiszMS1iaXQgUy8zOTAgcGxhdGZvcm0gdGhlIGhpZ2hlc3QgYml0IGhhcyB0byBiZSBtYXNrZWQgb3V0LCBvciBvbiBTUEFSQworcGxhdGZvcm1zIGFuIG9mZnNldCBoYXMgdG8gYmUgYWRkZWQgZm9yIHRoZSB0cnVlIG5leHQgaW5zdHJ1Y3Rpb24gdG8gYmUKK2V4ZWN1dGVkLgorCisgICAgICA8cD5JZiBubyBmaXh1cCBpcyBuZWVkZWQsIHRoaXMgZnVuY3Rpb24gc2ltcGx5IHBhc3NlcyB0aHJvdWdoIDx2YXI+YWRkcjwvdmFyPi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkICogPGI+X19idWlsdGluX2Zyb2JfcmV0dXJuX2FkZHJlc3M8L2I+ICg8dmFyPnZvaWQgKmFkZHI8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmZnJvYl8wMDVmcmV0dXJuXzAwNWZhZGRyZXNzLTI4ODgiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHJldmVyc2Ugb2YgPGNvZGU+X19idWlsdGluX2V4dHJhY3RfcmV0dXJuX2FkZHI8L2NvZGU+LiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgKiA8Yj5fX2J1aWx0aW5fZnJhbWVfYWRkcmVzczwvYj4gKDx2YXI+dW5zaWduZWQgaW50IGxldmVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmZyYW1lXzAwNWZhZGRyZXNzLTI4ODkiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX3JldHVybl9hZGRyZXNzPC9jb2RlPiwgYnV0IGl0CityZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiBmcmFtZSByYXRoZXIgdGhhbiB0aGUgcmV0dXJuIGFkZHJlc3MKK29mIHRoZSBmdW5jdGlvbi4gIENhbGxpbmcgPGNvZGU+X19idWlsdGluX2ZyYW1lX2FkZHJlc3M8L2NvZGU+IHdpdGggYSB2YWx1ZSBvZgorPGNvZGU+MDwvY29kZT4geWllbGRzIHRoZSBmcmFtZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLCBhIHZhbHVlIG9mCis8Y29kZT4xPC9jb2RlPiB5aWVsZHMgdGhlIGZyYW1lIGFkZHJlc3Mgb2YgdGhlIGNhbGxlciBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiwKK2FuZCBzbyBmb3J0aC4KKworICAgICAgPHA+VGhlIGZyYW1lIGlzIHRoZSBhcmVhIG9uIHRoZSBzdGFjayB0aGF0IGhvbGRzIGxvY2FsIHZhcmlhYmxlcyBhbmQgc2F2ZWQKK3JlZ2lzdGVycy4gIFRoZSBmcmFtZSBhZGRyZXNzIGlzIG5vcm1hbGx5IHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCB3b3JkCitwdXNoZWQgb24gdG8gdGhlIHN0YWNrIGJ5IHRoZSBmdW5jdGlvbi4gIEhvd2V2ZXIsIHRoZSBleGFjdCBkZWZpbml0aW9uCitkZXBlbmRzIHVwb24gdGhlIHByb2Nlc3NvciBhbmQgdGhlIGNhbGxpbmcgY29udmVudGlvbi4gIElmIHRoZSBwcm9jZXNzb3IKK2hhcyBhIGRlZGljYXRlZCBmcmFtZSBwb2ludGVyIHJlZ2lzdGVyLCBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBhIGZyYW1lLAordGhlbiA8Y29kZT5fX2J1aWx0aW5fZnJhbWVfYWRkcmVzczwvY29kZT4gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZyYW1lCitwb2ludGVyIHJlZ2lzdGVyLgorCisgICAgICA8cD5PbiBzb21lIG1hY2hpbmVzIGl0IG1heSBiZSBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgZnJhbWUgYWRkcmVzcyBvZgorYW55IGZ1bmN0aW9uIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lOyBpbiBzdWNoIGNhc2VzLCBvciB3aGVuIHRoZSB0b3AKK29mIHRoZSBzdGFjayBoYXMgYmVlbiByZWFjaGVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYKK3RoZSBmaXJzdCBmcmFtZSBwb2ludGVyIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBzdGFydHVwIGNvZGUuCisKKyAgICAgIDxwPlRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIGEgbm9uemVybyBhcmd1bWVudCBmb3IgZGVidWdnaW5nCitwdXJwb3Nlcy4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TSC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NILUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTQ0MzU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TSC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0ggQnVpbHQtaW4gRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyIgdGl0bGU9IlRhcmdldCBCdWlsdGlucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJTLzM5MCBTeXN0ZW0geiBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTUEFSQy1WSVMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NQQVJDLVZJUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iU1BBUkMgVklTIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSC1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlNILUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU1BBUkMtVklTLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTUEFSQy1WSVMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+U1BBUkMgVklTIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNfMDAyZjM5MC1TeXN0ZW0tei1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlMvMzkwIFN5c3RlbSB6IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni4xOCBTSCBCdWlsdC1pbiBGdW5jdGlvbnM8L2g0PgorCis8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIHRoZSBTSDEsIFNIMiwgU0gzIGFuZCBTSDQKK2ZhbWlsaWVzIG9mIHByb2Nlc3NvcnM6CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3NldF90aHJlYWRfcG9pbnRlcjwvYj4gKDx2YXI+dm9pZCAqcHRyPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnNldF8wMDVmdGhyZWFkXzAwNWZwb2ludGVyLTM0NDkiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TZXRzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkdCUjwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWdpc3RlciB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIDx2YXI+cHRyPC92YXI+LiAgVGhpcyBpcyB1c3VhbGx5Cit1c2VkIGJ5IHN5c3RlbSBjb2RlIHRoYXQgbWFuYWdlcyB0aHJlYWRzIGFuZCBleGVjdXRpb24gY29udGV4dHMuICBUaGUgY29tcGlsZXIKK25vcm1hbGx5IGRvZXMgbm90IGdlbmVyYXRlIGNvZGUgdGhhdCBtb2RpZmllcyB0aGUgY29udGVudHMgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HQlI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCit0aHVzIHRoZSB2YWx1ZSBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLiAgQ2hhbmdpbmcgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+R0JSPC9zcGFuPjwvc2FtcD4mcnNxdW87Cit2YWx1ZSBpbiB1c2VyIGNvZGUgbXVzdCBiZSBkb25lIHdpdGggY2F1dGlvbiwgc2luY2UgdGhlIGNvbXBpbGVyIG1pZ2h0IHVzZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HQlI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gb3JkZXIgdG8gYWNjZXNzIHRocmVhZCBsb2NhbCB2YXJpYWJsZXMuCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCAqIDxiPl9fYnVpbHRpbl90aHJlYWRfcG9pbnRlcjwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZ0aHJlYWRfMDA1ZnBvaW50ZXItMzQ1MCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlJldHVybnMgdGhlIHZhbHVlIHRoYXQgaXMgY3VycmVudGx5IHNldCBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HQlI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVnaXN0ZXIuIAorTWVtb3J5IGxvYWRzIGFuZCBzdG9yZXMgdGhhdCB1c2UgdGhlIHRocmVhZCBwb2ludGVyIGFzIGEgYmFzZSBhZGRyZXNzIGFyZQordHVybmVkIGludG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5HQlI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYmFzZWQgZGlzcGxhY2VtZW50IGxvYWRzIGFuZCBzdG9yZXMsIGlmIHBvc3NpYmxlLiAKK0ZvciBleGFtcGxlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBzdHJ1Y3QgbXlfdGNiCisgICAgICAgICAgeworICAgICAgICAgICAgIGludCBhLCBiLCBjLCBkLCBlOworICAgICAgICAgIH07CisgICAgICAgICAgCisgICAgICAgICAgaW50IGdldF90Y2JfdmFsdWUgKHZvaWQpCisgICAgICAgICAgeworICAgICAgICAgICAgLy8gR2VuZXJhdGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3YubCBAKDgsZ2JyKSxyMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdGlvbgorICAgICAgICAgICAgcmV0dXJuICgobXlfdGNiKilfX2J1aWx0aW5fdGhyZWFkX3BvaW50ZXIgKCkpLSZndDtjOworICAgICAgICAgIH0KKyAgICAgICAgICAKKzwvcHJlPgorICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TSC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NILU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGFlMmRjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TSC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw0MDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNIIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2NvcmUtT3B0aW9ucy5odG1sI1Njb3JlLU9wdGlvbnMiIHRpdGxlPSJTY29yZSBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU29sYXJpcy0yLU9wdGlvbnMuaHRtbCNTb2xhcmlzLTItT3B0aW9ucyIgdGl0bGU9IlNvbGFyaXMgMiBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNILU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU29sYXJpcy0yLU9wdGlvbnMuaHRtbCNTb2xhcmlzLTItT3B0aW9ucyI+U29sYXJpcyAyIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTY29yZS1PcHRpb25zLmh0bWwjU2NvcmUtT3B0aW9ucyI+U2NvcmUgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4zOCBTSCBPcHRpb25zPC9oND4KKworPHA+VGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgU0ggaW1wbGVtZW50YXRpb25zOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbTE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW0xLTIxMTgiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0gxLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0yPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tMi0yMTE5Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIMi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tMmU8L2NvZGU+PGRkPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0yYS1ub2ZwdTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTJhXzAwMmRub2ZwdS0yMTIwIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIMmEgd2l0aG91dCBGUFUsIG9yIGZvciBhIFNIMmEtRlBVIGluIHN1Y2ggYSB3YXkKK3RoYXQgdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgaXMgbm90IHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTJhLXNpbmdsZS1vbmx5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tMmFfMDAyZHNpbmdsZV8wMDJkb25seS0yMTIxIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIMmEtRlBVLCBpbiBzdWNoIGEgd2F5IHRoYXQgbm8gZG91YmxlLXByZWNpc2lvbgorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhcmUgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tMmEtc2luZ2xlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tMmFfMDAyZHNpbmdsZS0yMTIyIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIMmEtRlBVIGFzc3VtaW5nIHRoZSBmbG9hdGluZy1wb2ludCB1bml0IGlzIGluCitzaW5nbGUtcHJlY2lzaW9uIG1vZGUgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tMmE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW0yYS0yMTIzIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIMmEtRlBVIGFzc3VtaW5nIHRoZSBmbG9hdGluZy1wb2ludCB1bml0IGlzIGluCitkb3VibGUtcHJlY2lzaW9uIG1vZGUgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tMzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTMtMjEyNCI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTNlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tM2UtMjEyNSI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW00LW5vZnB1PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNF8wMDJkbm9mcHUtMjEyNiI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDQgd2l0aG91dCBhIGZsb2F0aW5nLXBvaW50IHVuaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTQtc2luZ2xlLW9ubHk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW00XzAwMmRzaW5nbGVfMDAyZG9ubHktMjEyNyI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDQgd2l0aCBhIGZsb2F0aW5nLXBvaW50IHVuaXQgdGhhdCBvbmx5CitzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uIGFyaXRobWV0aWMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTQtc2luZ2xlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNF8wMDJkc2luZ2xlLTIxMjgiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0g0IGFzc3VtaW5nIHRoZSBmbG9hdGluZy1wb2ludCB1bml0IGlzIGluCitzaW5nbGUtcHJlY2lzaW9uIG1vZGUgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tNDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTQtMjEyOSI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTRhLW5vZnB1PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNGFfMDAyZG5vZnB1LTIxMzAiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0g0YWwtZHNwLCBvciBmb3IgYSBTSDRhIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUKK2Zsb2F0aW5nLXBvaW50IHVuaXQgaXMgbm90IHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTRhLXNpbmdsZS1vbmx5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNGFfMDAyZHNpbmdsZV8wMDJkb25seS0yMTMxIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIFNINGEsIGluIHN1Y2ggYSB3YXkgdGhhdCBubyBkb3VibGUtcHJlY2lzaW9uCitmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZSB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW00YS1zaW5nbGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW00YV8wMDJkc2luZ2xlLTIxMzIiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0g0YSBhc3N1bWluZyB0aGUgZmxvYXRpbmctcG9pbnQgdW5pdCBpcyBpbgorc2luZ2xlLXByZWNpc2lvbiBtb2RlIGJ5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTRhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tNGEtMjEzMyI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDRhLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW00YWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW00YWwtMjEzNCI+PC9hPlNhbWUgYXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW00YS1ub2ZwdTwvc3Bhbj48L3NhbXA+LCBleGNlcHQgdGhhdCBpdCBpbXBsaWNpdGx5IHBhc3NlcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWRzcDwvc3Bhbj48L3NhbXA+IHRvIHRoZSBhc3NlbWJsZXIuICBHQ0MgZG9lc24ndCBnZW5lcmF0ZSBhbnkgRFNQCitpbnN0cnVjdGlvbnMgYXQgdGhlIG1vbWVudC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWItMjEzNSI+PC9hPkNvbXBpbGUgY29kZSBmb3IgdGhlIHByb2Nlc3NvciBpbiBiaWctZW5kaWFuIG1vZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1sLTIxMzYiPjwvYT5Db21waWxlIGNvZGUgZm9yIHRoZSBwcm9jZXNzb3IgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kYWxpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1kYWxpZ24tMjEzNyI+PC9hPkFsaWduIGRvdWJsZXMgYXQgNjQtYml0IGJvdW5kYXJpZXMuICBOb3RlIHRoYXQgdGhpcyBjaGFuZ2VzIHRoZSBjYWxsaW5nCitjb252ZW50aW9ucywgYW5kIHRodXMgc29tZSBmdW5jdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGRvCitub3Qgd29yayB1bmxlc3MgeW91IHJlY29tcGlsZSBpdCBmaXJzdCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZGFsaWduPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlbGF4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcmVsYXgtMjEzOCI+PC9hPlNob3J0ZW4gc29tZSBhZGRyZXNzIHJlZmVyZW5jZXMgYXQgbGluayB0aW1lLCB3aGVuIHBvc3NpYmxlOyB1c2VzIHRoZQorbGlua2VyIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcmVsYXg8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYmlndGFibGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1iaWd0YWJsZS0yMTM5Ij48L2E+VXNlIDMyLWJpdCBvZmZzZXRzIGluIDxjb2RlPnN3aXRjaDwvY29kZT4gdGFibGVzLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlCisxNi1iaXQgb2Zmc2V0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYml0b3BzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYml0b3BzLTIxNDAiPjwvYT5FbmFibGUgdGhlIHVzZSBvZiBiaXQgbWFuaXB1bGF0aW9uIGluc3RydWN0aW9ucyBvbiBTSDJBLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mbW92ZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZtb3ZkLTIxNDEiPjwvYT5FbmFibGUgdGhlIHVzZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gPGNvZGU+Zm1vdmQ8L2NvZGU+LiAgQ2hlY2sgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1kYWxpZ248L3NwYW4+PC9zYW1wPiBmb3IKK2FsaWdubWVudCBjb25zdHJhaW50cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taGl0YWNoaTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWhpdGFjaGktMjE0MiI+PC9hPkNvbXBseSB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGRlZmluZWQgYnkgUmVuZXNhcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmVuZXNhczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWhpdGFjaGktMjE0MyI+PC9hPkNvbXBseSB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGRlZmluZWQgYnkgUmVuZXNhcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tcmVuZXNhczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWhpdGFjaGktMjE0NCI+PC9hPkNvbXBseSB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGRlZmluZWQgZm9yIEdDQyBiZWZvcmUgdGhlIFJlbmVzYXMKK2NvbnZlbnRpb25zIHdlcmUgYXZhaWxhYmxlLiAgVGhpcyBvcHRpb24gaXMgdGhlIGRlZmF1bHQgZm9yIGFsbAordGFyZ2V0cyBvZiB0aGUgU0ggdG9vbGNoYWluLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1ub21hY3NhdmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub21hY3NhdmUtMjE0NSI+PC9hPk1hcmsgdGhlIDxjb2RlPk1BQzwvY29kZT4gcmVnaXN0ZXIgYXMgY2FsbC1jbG9iYmVyZWQsIGV2ZW4gaWYKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taGl0YWNoaTwvc3Bhbj48L3NhbXA+IGlzIGdpdmVuLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pZWVlPC9jb2RlPjxkdD48Y29kZT4tbW5vLWllZWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1pZWVlLTIxNDYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9pZWVlLTIxNDciPjwvYT5Db250cm9sIHRoZSBJRUVFIGNvbXBsaWFuY2Ugb2YgZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbnMsIHdoaWNoIGFmZmVjdHMgdGhlCitoYW5kbGluZyBvZiBjYXNlcyB3aGVyZSB0aGUgcmVzdWx0IG9mIGEgY29tcGFyaXNvbiBpcyB1bm9yZGVyZWQuICBCeSBkZWZhdWx0Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWllZWU8L3NwYW4+PC9zYW1wPiBpcyBpbXBsaWNpdGx5IGVuYWJsZWQuICBJZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZpbml0ZS1tYXRoLW9ubHk8L3NwYW4+PC9zYW1wPiBpcworZW5hYmxlZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWllZWU8L3NwYW4+PC9zYW1wPiBpcyBpbXBsaWNpdGx5IHNldCwgd2hpY2ggcmVzdWx0cyBpbiBmYXN0ZXIKK2Zsb2F0aW5nLXBvaW50IGdyZWF0ZXItZXF1YWwgYW5kIGxlc3MtZXF1YWwgY29tcGFyaXNvbnMuICBUaGUgaW1wbGNpdCBzZXR0aW5ncworY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3BlY2lmeWluZyBlaXRoZXIgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1pZWVlPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1pZWVlPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlubGluZS1pY19pbnZhbGlkYXRlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW5saW5lXzAwMmRpY18wMDVmaW52YWxpZGF0ZS0yMTQ4Ij48L2E+SW5saW5lIGNvZGUgdG8gaW52YWxpZGF0ZSBpbnN0cnVjdGlvbiBjYWNoZSBlbnRyaWVzIGFmdGVyIHNldHRpbmcgdXAKK25lc3RlZCBmdW5jdGlvbiB0cmFtcG9saW5lcy4gCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdXNlcm1vZGU8L3NwYW4+PC9zYW1wPiBpcyBpbiBlZmZlY3QgYW5kIHRoZSBzZWxlY3RlZAorY29kZSBnZW5lcmF0aW9uIG9wdGlvbiAoZS5nLiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTQ8L3NwYW4+PC9zYW1wPikgZG9lcyBub3QgYWxsb3cgdGhlIHVzZSBvZiB0aGUgPGNvZGU+aWNiaTwvY29kZT4KK2luc3RydWN0aW9uLiAKK0lmIHRoZSBzZWxlY3RlZCBjb2RlIGdlbmVyYXRpb24gb3B0aW9uIGRvZXMgbm90IGFsbG93IHRoZSB1c2Ugb2YgdGhlIDxjb2RlPmljYmk8L2NvZGU+CitpbnN0cnVjdGlvbiwgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdXNlcm1vZGU8L3NwYW4+PC9zYW1wPiBpcyBub3QgaW4gZWZmZWN0LCB0aGUgaW5saW5lZCBjb2RlCittYW5pcHVsYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgYWRkcmVzcyBhcnJheSBkaXJlY3RseSB3aXRoIGFuIGFzc29jaWF0aXZlCit3cml0ZS4gIFRoaXMgbm90IG9ubHkgcmVxdWlyZXMgcHJpdmlsZWdlZCBtb2RlIGF0IHJ1biB0aW1lLCBidXQgaXQgYWxzbworZmFpbHMgaWYgdGhlIGNhY2hlIGxpbmUgaGFkIGJlZW4gbWFwcGVkIHZpYSB0aGUgVExCIGFuZCBoYXMgYmVjb21lIHVubWFwcGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1pc2l6ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlzaXplLTIxNDkiPjwvYT5EdW1wIGluc3RydWN0aW9uIHNpemUgYW5kIGxvY2F0aW9uIGluIHRoZSBhc3NlbWJseSBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wYWRzdHJ1Y3Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wYWRzdHJ1Y3QtMjE1MCI+PC9hPlRoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuICBJdCBwYWRzIHN0cnVjdHVyZXMgdG8gbXVsdGlwbGUgb2YgNCBieXRlcywKK3doaWNoIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBTSCBBQkkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWF0b21pYy1tb2RlbD08L2NvZGU+PHZhcj5tb2RlbDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tYXRvbWljXzAwMmRtb2RlbF8wMDNkXzAwNDB2YXJfMDA3Ym1vZGVsXzAwN2QtMjE1MSI+PC9hPlNldHMgdGhlIG1vZGVsIG9mIGF0b21pYyBvcGVyYXRpb25zIGFuZCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXMgYSBjb21tYQorc2VwYXJhdGVkIGxpc3QuICBGb3IgZGV0YWlscyBvbiB0aGUgYXRvbWljIGJ1aWx0LWluIGZ1bmN0aW9ucyBzZWUKKzxhIGhyZWY9Il8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj5fX2F0b21pYyBCdWlsdGluczwvYT4uICBUaGUgZm9sbG93aW5nIG1vZGVscyBhbmQgcGFyYW1ldGVycyBhcmUgc3VwcG9ydGVkOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EaXNhYmxlIGNvbXBpbGVyIGdlbmVyYXRlZCBhdG9taWMgc2VxdWVuY2VzIGFuZCBlbWl0IGxpYnJhcnkgY2FsbHMgZm9yIGF0b21pYworb3BlcmF0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIHRhcmdldCBpcyBub3QgPGNvZGU+c2gtKi1saW51eCo8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNvZnQtZ3VzYTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5HZW5lcmF0ZSBHTlUvTGludXggY29tcGF0aWJsZSBnVVNBIHNvZnR3YXJlIGF0b21pYyBzZXF1ZW5jZXMgZm9yIHRoZSBhdG9taWMKK2J1aWx0LWluIGZ1bmN0aW9ucy4gIFRoZSBnZW5lcmF0ZWQgYXRvbWljIHNlcXVlbmNlcyByZXF1aXJlIGFkZGl0aW9uYWwgc3VwcG9ydAorZnJvbSB0aGUgaW50ZXJydXB0L2V4Y2VwdGlvbiBoYW5kbGluZyBjb2RlIG9mIHRoZSBzeXN0ZW0gYW5kIGFyZSBvbmx5IHN1aXRhYmxlCitmb3IgU0gzKiBhbmQgU0g0KiBzaW5nbGUtY29yZSBzeXN0ZW1zLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4KK3RoZSB0YXJnZXQgaXMgPGNvZGU+c2gtKi1saW51eCo8L2NvZGU+IGFuZCBTSDMqIG9yIFNINCouICBXaGVuIHRoZSB0YXJnZXQgaXMgU0g0QSwKK3RoaXMgb3B0aW9uIHdpbGwgYWxzbyBwYXJ0aWFsbHkgdXRpbGl6ZSB0aGUgaGFyZHdhcmUgYXRvbWljIGluc3RydWN0aW9ucworPGNvZGU+bW92bGkubDwvY29kZT4gYW5kIDxjb2RlPm1vdmNvLmw8L2NvZGU+IHRvIGNyZWF0ZSBtb3JlIGVmZmljaWVudCBjb2RlLCB1bmxlc3MKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RyaWN0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHNwZWNpZmllZC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zb2Z0LXRjYjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5HZW5lcmF0ZSBzb2Z0d2FyZSBhdG9taWMgc2VxdWVuY2VzIHRoYXQgdXNlIGEgdmFyaWFibGUgaW4gdGhlIHRocmVhZCBjb250cm9sCitibG9jay4gIFRoaXMgaXMgYSB2YXJpYXRpb24gb2YgdGhlIGdVU0Egc2VxdWVuY2VzIHdoaWNoIGNhbiBhbHNvIGJlIHVzZWQgb24KK1NIMSogYW5kIFNIMiogdGFyZ2V0cy4gIFRoZSBnZW5lcmF0ZWQgYXRvbWljIHNlcXVlbmNlcyByZXF1aXJlIGFkZGl0aW9uYWwKK3N1cHBvcnQgZnJvbSB0aGUgaW50ZXJydXB0L2V4Y2VwdGlvbiBoYW5kbGluZyBjb2RlIG9mIHRoZSBzeXN0ZW0gYW5kIGFyZSBvbmx5CitzdWl0YWJsZSBmb3Igc2luZ2xlLWNvcmUgc3lzdGVtcy4gIFdoZW4gdXNpbmcgdGhpcyBtb2RlbCwgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2JyLW9mZnNldD08L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3BhcmFtZXRlciBoYXMgdG8gYmUgc3BlY2lmaWVkIGFzIHdlbGwuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c29mdC1pbWFzazwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5HZW5lcmF0ZSBzb2Z0d2FyZSBhdG9taWMgc2VxdWVuY2VzIHRoYXQgdGVtcG9yYXJpbHkgZGlzYWJsZSBpbnRlcnJ1cHRzIGJ5CitzZXR0aW5nIDxjb2RlPlNSLklNQVNLID0gMTExMTwvY29kZT4uICBUaGlzIG1vZGVsIHdvcmtzIG9ubHkgd2hlbiB0aGUgcHJvZ3JhbSBydW5zCitpbiBwcml2aWxlZ2VkIG1vZGUgYW5kIGlzIG9ubHkgc3VpdGFibGUgZm9yIHNpbmdsZS1jb3JlIHN5c3RlbXMuICBBZGRpdGlvbmFsCitzdXBwb3J0IGZyb20gdGhlIGludGVycnVwdC9leGNlcHRpb24gaGFuZGxpbmcgY29kZSBvZiB0aGUgc3lzdGVtIGlzIG5vdAorcmVxdWlyZWQuICBUaGlzIG1vZGVsIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRoZSB0YXJnZXQgaXMKKzxjb2RlPnNoLSotbGludXgqPC9jb2RlPiBhbmQgU0gxKiBvciBTSDIqLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmhhcmQtbGxjczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5HZW5lcmF0ZSBoYXJkd2FyZSBhdG9taWMgc2VxdWVuY2VzIHVzaW5nIHRoZSA8Y29kZT5tb3ZsaS5sPC9jb2RlPiBhbmQgPGNvZGU+bW92Y28ubDwvY29kZT4KK2luc3RydWN0aW9ucyBvbmx5LiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBTSDRBIGFuZCBpcyBzdWl0YWJsZSBmb3IKK211bHRpLWNvcmUgc3lzdGVtcy4gIFNpbmNlIHRoZSBoYXJkd2FyZSBpbnN0cnVjdGlvbnMgc3VwcG9ydCBvbmx5IDMyIGJpdCBhdG9taWMKK3ZhcmlhYmxlcyBhY2Nlc3MgdG8gOCBvciAxNiBiaXQgdmFyaWFibGVzIGlzIGVtdWxhdGVkIHdpdGggMzIgYml0IGFjY2Vzc2VzLiAKK0NvZGUgY29tcGlsZWQgd2l0aCB0aGlzIG9wdGlvbiB3aWxsIGFsc28gYmUgY29tcGF0aWJsZSB3aXRoIG90aGVyIHNvZnR3YXJlCithdG9taWMgbW9kZWwgaW50ZXJydXB0L2V4Y2VwdGlvbiBoYW5kbGluZyBzeXN0ZW1zIGlmIGV4ZWN1dGVkIG9uIGFuIFNINEEKK3N5c3RlbS4gIEFkZGl0aW9uYWwgc3VwcG9ydCBmcm9tIHRoZSBpbnRlcnJ1cHQvZXhjZXB0aW9uIGhhbmRsaW5nIGNvZGUgb2YgdGhlCitzeXN0ZW0gaXMgbm90IHJlcXVpcmVkIGZvciB0aGlzIG1vZGVsLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdici1vZmZzZXQ9PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgb2Zmc2V0IGluIGJ5dGVzIG9mIHRoZSB2YXJpYWJsZSBpbiB0aGUgdGhyZWFkCitjb250cm9sIGJsb2NrIHN0cnVjdHVyZSB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBnZW5lcmF0ZWQgYXRvbWljIHNlcXVlbmNlcword2hlbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zb2Z0LXRjYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtb2RlbCBoYXMgYmVlbiBzZWxlY3RlZC4gIEZvciBvdGhlciBtb2RlbHMgdGhpcworcGFyYW1ldGVyIGlzIGlnbm9yZWQuICBUaGUgc3BlY2lmaWVkIHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiBmb3VyCithbmQgaW4gdGhlIHJhbmdlIDAtMTAyMC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdHJpY3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VGhpcyBwYXJhbWV0ZXIgcHJldmVudHMgbWl4ZWQgdXNhZ2Ugb2YgbXVsdGlwbGUgYXRvbWljIG1vZGVscywgZXZlbiB0aG91Z2ggdGhleQord291bGQgYmUgY29tcGF0aWJsZSwgYW5kIHdpbGwgbWFrZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgYXRvbWljIHNlcXVlbmNlcyBvZiB0aGUKK3NwZWNpZmllZCBtb2RlbCBvbmx5LgorCisgICAgIDwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRhczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRhcy0yMTUyIj48L2E+R2VuZXJhdGUgdGhlIDxjb2RlPnRhcy5iPC9jb2RlPiBvcGNvZGUgZm9yIDxjb2RlPl9fYXRvbWljX3Rlc3RfYW5kX3NldDwvY29kZT4uIAorTm90aWNlIHRoYXQgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBjb25maWd1cmF0aW9uCit0aGlzIGNhbiBkZWdyYWRlIG92ZXJhbGwgcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBvcGVyYW5kIGNhY2hlIGxpbmUgZmx1c2hlcwordGhhdCBhcmUgaW1wbGllZCBieSB0aGUgPGNvZGU+dGFzLmI8L2NvZGU+IGluc3RydWN0aW9uLiAgT24gbXVsdGktY29yZSBTSDRBCitwcm9jZXNzb3JzIHRoZSA8Y29kZT50YXMuYjwvY29kZT4gaW5zdHJ1Y3Rpb24gbXVzdCBiZSB1c2VkIHdpdGggY2F1dGlvbiBzaW5jZSBpdAorY2FuIHJlc3VsdCBpbiBkYXRhIGNvcnJ1cHRpb24gZm9yIGNlcnRhaW4gY2FjaGUgY29uZmlndXJhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNwYWNlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc3BhY2UtMjE1MyI+PC9hPk9wdGltaXplIGZvciBzcGFjZSBpbnN0ZWFkIG9mIHNwZWVkLiAgSW1wbGllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcHJlZmVyZ290PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcHJlZmVyZ290LTIxNTQiPjwvYT5XaGVuIGdlbmVyYXRpbmcgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSwgZW1pdCBmdW5jdGlvbiBjYWxscyB1c2luZwordGhlIEdsb2JhbCBPZmZzZXQgVGFibGUgaW5zdGVhZCBvZiB0aGUgUHJvY2VkdXJlIExpbmthZ2UgVGFibGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXVzZXJtb2RlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdXNlcm1vZGUtMjE1NSI+PC9hPkRvbid0IGdlbmVyYXRlIHByaXZpbGVnZWQgbW9kZSBvbmx5IGNvZGUuICBUaGlzIG9wdGlvbgoraW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWlubGluZS1pY19pbnZhbGlkYXRlPC9zcGFuPjwvc2FtcD4KK2lmIHRoZSBpbmxpbmVkIGNvZGUgd291bGQgbm90IHdvcmsgaW4gdXNlciBtb2RlLiAKK1RoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgdGFyZ2V0IGlzIDxjb2RlPnNoLSotbGludXgqPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdWx0Y29zdD08L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXVsdGNvc3RfMDAzZF8wMDQwdmFyXzAwN2JudW1iZXJfMDA3ZC0yMTU2Ij48L2E+U2V0IHRoZSBjb3N0IHRvIGFzc3VtZSBmb3IgYSBtdWx0aXBseSBpbnNuLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kaXY9PC9jb2RlPjx2YXI+c3RyYXRlZ3k8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWRpdl8wMDNkXzAwNDB2YXJfMDA3YnN0cmF0ZWd5XzAwN2QtMjE1NyI+PC9hPlNldCB0aGUgZGl2aXNpb24gc3RyYXRlZ3kgdG8gYmUgdXNlZCBmb3IgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRpb25zLiAKK0ZvciBTSG1lZGlhIDx2YXI+c3RyYXRlZ3k8L3Zhcj4gY2FuIGJlIG9uZSBvZjoKKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlBlcmZvcm1zIHRoZSBvcGVyYXRpb24gaW4gZmxvYXRpbmcgcG9pbnQuICBUaGlzIGhhcyBhIHZlcnkgaGlnaCBsYXRlbmN5LAorYnV0IG5lZWRzIG9ubHkgYSBmZXcgaW5zdHJ1Y3Rpb25zLCBzbyBpdCBtaWdodCBiZSBhIGdvb2QgY2hvaWNlIGlmCit5b3VyIGNvZGUgaGFzIGVub3VnaCBlYXNpbHktZXhwbG9pdGFibGUgSUxQIHRvIGFsbG93IHRoZSBjb21waWxlciB0bworc2NoZWR1bGUgdGhlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyB0b2dldGhlciB3aXRoIG90aGVyIGluc3RydWN0aW9ucy4gCitEaXZpc2lvbiBieSB6ZXJvIGNhdXNlcyBhIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VXNlcyBpbnRlZ2VyIG9wZXJhdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIHRoZSBkaXZpc29yLAorYW5kIHRoZW4gbXVsdGlwbGllcyB0aGUgZGl2aWRlbmQgd2l0aCB0aGUgaW52ZXJzZS4gIFRoaXMgc3RyYXRlZ3kgYWxsb3dzCitDU0UgYW5kIGhvaXN0aW5nIG9mIHRoZSBpbnZlcnNlIGNhbGN1bGF0aW9uLiAgRGl2aXNpb24gYnkgemVybyBjYWxjdWxhdGVzCithbiB1bnNwZWNpZmllZCByZXN1bHQsIGJ1dCBkb2VzIG5vdCB0cmFwLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludjptaW5sYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QSB2YXJpYW50IG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW52PC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoZXJlLCBpZiBubyBDU0Ugb3IgaG9pc3Rpbmcgb3Bwb3J0dW5pdGllcworaGF2ZSBiZWVuIGZvdW5kLCBvciBpZiB0aGUgZW50aXJlIG9wZXJhdGlvbiBoYXMgYmVlbiBob2lzdGVkIHRvIHRoZSBzYW1lCitwbGFjZSwgdGhlIGxhc3Qgc3RhZ2VzIG9mIHRoZSBpbnZlcnNlIGNhbGN1bGF0aW9uIGFyZSBpbnRlcnR3aW5lZCB3aXRoIHRoZQorZmluYWwgbXVsdGlwbHkgdG8gcmVkdWNlIHRoZSBvdmVyYWxsIGxhdGVuY3ksIGF0IHRoZSBleHBlbnNlIG9mIHVzaW5nIGEgZmV3Cittb3JlIGluc3RydWN0aW9ucywgYW5kIHRodXMgb2ZmZXJpbmcgZmV3ZXIgc2NoZWR1bGluZyBvcHBvcnR1bml0aWVzIHdpdGgKK290aGVyIGNvZGUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5DYWxscyBhIGxpYnJhcnkgZnVuY3Rpb24gdGhhdCB1c3VhbGx5IGltcGxlbWVudHMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW52Om1pbmxhdDwvc3Bhbj48L3NhbXA+JnJzcXVvOworc3RyYXRlZ3kuIAorVGhpcyBnaXZlcyBoaWdoIGNvZGUgZGVuc2l0eSBmb3IgPGNvZGU+bTUtKm1lZGlhLW5vZnB1PC9jb2RlPiBjb21waWxhdGlvbnMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbDI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VXNlcyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBvZiB0aGUgc2FtZSBsaWJyYXJ5IGZ1bmN0aW9uLCB3aGVyZSBpdAorYXNzdW1lcyB0aGF0IGEgcG9pbnRlciB0byBhIGxvb2t1cCB0YWJsZSBoYXMgYWxyZWFkeSBiZWVuIHNldCB1cCwgd2hpY2gKK2V4cG9zZXMgdGhlIHBvaW50ZXIgbG9hZCB0byBDU0UgYW5kIGNvZGUgaG9pc3Rpbmcgb3B0aW1pemF0aW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnY6Y2FsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludjpjYWxsMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludjpmcDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Vc2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW52PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFsZ29yaXRobSBmb3IgaW5pdGlhbAorY29kZSBnZW5lcmF0aW9uLCBidXQgaWYgdGhlIGNvZGUgc3RheXMgdW5vcHRpbWl6ZWQsIHJldmVydCB0byB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdHJhdGVnaWVzLCByZXNwZWN0aXZlbHkuICBOb3RlIHRoYXQgdGhlCitwb3RlbnRpYWxseS10cmFwcGluZyBzaWRlIGVmZmVjdCBvZiBkaXZpc2lvbiBieSB6ZXJvIGlzIGNhcnJpZWQgYnkgYQorc2VwYXJhdGUgaW5zdHJ1Y3Rpb24sIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgYWxsIHRoZSBpbnRlZ2VyIGluc3RydWN0aW9ucworYXJlIGhvaXN0ZWQgb3V0LCBidXQgdGhlIG1hcmtlciBmb3IgdGhlIHNpZGUgZWZmZWN0IHN0YXlzIHdoZXJlIGl0IGlzLiAKK0EgcmVjb21iaW5hdGlvbiB0byBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIG9yIGEgY2FsbCBpcyBub3QgcG9zc2libGUKK2luIHRoYXQgY2FzZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnYyMHU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnYyMGw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VmFyaWFudHMgb2YgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW52Om1pbmxhdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdHJhdGVneS4gIEluIHRoZSBjYXNlCit0aGF0IHRoZSBpbnZlcnNlIGNhbGN1bGF0aW9uIGlzIG5vdCBzZXBhcmF0ZWQgZnJvbSB0aGUgbXVsdGlwbHksIHRoZXkgc3BlZWQKK3VwIGRpdmlzaW9uIHdoZXJlIHRoZSBkaXZpZGVuZCBmaXRzIGludG8gMjAgYml0cyAocGx1cyBzaWduIHdoZXJlIGFwcGxpY2FibGUpCitieSBpbnNlcnRpbmcgYSB0ZXN0IHRvIHNraXAgYSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBpbiB0aGlzIGNhc2U7IHRoaXMgdGVzdAorc2xvd3MgZG93biB0aGUgY2FzZSBvZiBsYXJnZXIgZGl2aWRlbmRzLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnYyMHU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXNzdW1lcyB0aGUgY2FzZSBvZiBhIHN1Y2gKK2Egc21hbGwgZGl2aWRlbmQgdG8gYmUgdW5saWtlbHksIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludjIwbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhc3N1bWVzIGl0IHRvIGJlIGxpa2VseS4KKworICAgICA8L2RsPgorCisgICAgIDxwPkZvciB0YXJnZXRzIG90aGVyIHRoYW4gU0htZWRpYSA8dmFyPnN0cmF0ZWd5PC92YXI+IGNhbiBiZSBvbmUgb2Y6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsLWRpdjE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Q2FsbHMgYSBsaWJyYXJ5IGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgc2luZ2xlLXN0ZXAgZGl2aXNpb24gaW5zdHJ1Y3Rpb24KKzxjb2RlPmRpdjE8L2NvZGU+IHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gIERpdmlzaW9uIGJ5IHplcm8gY2FsY3VsYXRlcyBhbgordW5zcGVjaWZpZWQgcmVzdWx0IGFuZCBkb2VzIG5vdCB0cmFwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBleGNlcHQgZm9yIFNINCwKK1NIMkEgYW5kIFNIY29tcGFjdC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsLWZwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkNhbGxzIGEgbGlicmFyeSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBvcGVyYXRpb24gaW4gZG91YmxlIHByZWNpc2lvbgorZmxvYXRpbmcgcG9pbnQuICBEaXZpc2lvbiBieSB6ZXJvIGNhdXNlcyBhIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4gIFRoaXMgaXMKK3RoZSBkZWZhdWx0IGZvciBTSGNvbXBhY3Qgd2l0aCBGUFUuICBTcGVjaWZ5aW5nIHRoaXMgZm9yIHRhcmdldHMgdGhhdCBkbyBub3QKK2hhdmUgYSBkb3VibGUgcHJlY2lzaW9uIEZQVSB3aWxsIGRlZmF1bHQgdG8gPGNvZGU+Y2FsbC1kaXYxPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsLXRhYmxlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkNhbGxzIGEgbGlicmFyeSBmdW5jdGlvbiB0aGF0IHVzZXMgYSBsb29rdXAgdGFibGUgZm9yIHNtYWxsIGRpdmlzb3JzIGFuZAordGhlIDxjb2RlPmRpdjE8L2NvZGU+IGluc3RydWN0aW9uIHdpdGggY2FzZSBkaXN0aW5jdGlvbiBmb3IgbGFyZ2VyIGRpdmlzb3JzLiAgRGl2aXNpb24KK2J5IHplcm8gY2FsY3VsYXRlcyBhbiB1bnNwZWNpZmllZCByZXN1bHQgYW5kIGRvZXMgbm90IHRyYXAuICBUaGlzIGlzIHRoZSBkZWZhdWx0Citmb3IgU0g0LiAgU3BlY2lmeWluZyB0aGlzIGZvciB0YXJnZXRzIHRoYXQgZG8gbm90IGhhdmUgZHluYW1pYyBzaGlmdAoraW5zdHJ1Y3Rpb25zIHdpbGwgZGVmYXVsdCB0byA8Y29kZT5jYWxsLWRpdjE8L2NvZGU+LgorCisgICAgIDwvZGw+CisKKyAgICAgPHA+V2hlbiBhIGRpdmlzaW9uIHN0cmF0ZWd5IGhhcyBub3QgYmVlbiBzcGVjaWZpZWQgdGhlIGRlZmF1bHQgc3RyYXRlZ3kgd2lsbCBiZQorc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGFyZ2V0LiAgRm9yIFNIMkEgdGhlIGRlZmF1bHQgc3RyYXRlZ3kgaXMgdG8KK3VzZSB0aGUgPGNvZGU+ZGl2czwvY29kZT4gYW5kIDxjb2RlPmRpdnU8L2NvZGU+IGluc3RydWN0aW9ucyBpbnN0ZWFkIG9mIGxpYnJhcnkgZnVuY3Rpb24KK2NhbGxzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hY2N1bXVsYXRlXzAwMmRvdXRnb2luZ18wMDJkYXJncy0yMTU4Ij48L2E+UmVzZXJ2ZSBzcGFjZSBvbmNlIGZvciBvdXRnb2luZyBhcmd1bWVudHMgaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIHJhdGhlcgordGhhbiBhcm91bmQgZWFjaCBjYWxsLiAgR2VuZXJhbGx5IGJlbmVmaWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzaXplLiAgQWxzbworbmVlZGVkIGZvciB1bndpbmRpbmcgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIHN0YWNrIGZyYW1lIGFyb3VuZCBjb25kaXRpb25hbCBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kaXZzaTNfbGliZnVuYz08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1kaXZzaTNfMDA1ZmxpYmZ1bmNfMDAzZF8wMDQwdmFyXzAwN2JuYW1lXzAwN2QtMjE1OSI+PC9hPlNldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBmdW5jdGlvbiB1c2VkIGZvciAzMi1iaXQgc2lnbmVkIGRpdmlzaW9uIHRvCis8dmFyPm5hbWU8L3Zhcj4uIAorVGhpcyBvbmx5IGFmZmVjdHMgdGhlIG5hbWUgdXNlZCBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jYWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludjpjYWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87CitkaXZpc2lvbiBzdHJhdGVnaWVzLCBhbmQgdGhlIGNvbXBpbGVyIHN0aWxsIGV4cGVjdHMgdGhlIHNhbWUKK3NldHMgb2YgaW5wdXQvb3V0cHV0L2Nsb2JiZXJlZCByZWdpc3RlcnMgYXMgaWYgdGhpcyBvcHRpb24gd2VyZSBub3QgcHJlc2VudC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZml4ZWQtcmFuZ2U9PC9jb2RlPjx2YXI+cmVnaXN0ZXItcmFuZ2U8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZpeGVkXzAwMmRyYW5nZS0yMTYwIj48L2E+R2VuZXJhdGUgY29kZSB0cmVhdGluZyB0aGUgZ2l2ZW4gcmVnaXN0ZXIgcmFuZ2UgYXMgZml4ZWQgcmVnaXN0ZXJzLiAKK0EgZml4ZWQgcmVnaXN0ZXIgaXMgb25lIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBjYW4gbm90IHVzZS4gIFRoaXMgaXMKK3VzZWZ1bCB3aGVuIGNvbXBpbGluZyBrZXJuZWwgY29kZS4gIEEgcmVnaXN0ZXIgcmFuZ2UgaXMgc3BlY2lmaWVkIGFzCit0d28gcmVnaXN0ZXJzIHNlcGFyYXRlZCBieSBhIGRhc2guICBNdWx0aXBsZSByZWdpc3RlciByYW5nZXMgY2FuIGJlCitzcGVjaWZpZWQgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWluZGV4ZWQtYWRkcmVzc2luZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWluZGV4ZWRfMDAyZGFkZHJlc3NpbmctMjE2MSI+PC9hPkVuYWJsZSB0aGUgdXNlIG9mIHRoZSBpbmRleGVkIGFkZHJlc3NpbmcgbW9kZSBmb3IgU0htZWRpYTMyL1NIY29tcGFjdC4gCitUaGlzIGlzIG9ubHkgc2FmZSBpZiB0aGUgaGFyZHdhcmUgYW5kL29yIE9TIGltcGxlbWVudCAzMi1iaXQgd3JhcC1hcm91bmQKK3NlbWFudGljcyBmb3IgdGhlIGluZGV4ZWQgYWRkcmVzc2luZyBtb2RlLiAgVGhlIGFyY2hpdGVjdHVyZSBhbGxvd3MgdGhlCitpbXBsZW1lbnRhdGlvbiBvZiBwcm9jZXNzb3JzIHdpdGggNjQtYml0IE1NVSwgd2hpY2ggdGhlIE9TIGNvdWxkIHVzZSB0bworZ2V0IDMyLWJpdCBhZGRyZXNzaW5nLCBidXQgc2luY2Ugbm8gY3VycmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cwordGhpcyBvciBhbnkgb3RoZXIgd2F5IHRvIG1ha2UgdGhlIGluZGV4ZWQgYWRkcmVzc2luZyBtb2RlIHNhZmUgdG8gdXNlIGluCit0aGUgMzItYml0IEFCSSwgdGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1pbmRleGVkLWFkZHJlc3Npbmc8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZ2V0dHJjb3N0PTwvY29kZT48dmFyPm51bWJlcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tZ2V0dHJjb3N0XzAwM2RfMDA0MHZhcl8wMDdibnVtYmVyXzAwN2QtMjE2MiI+PC9hPlNldCB0aGUgY29zdCBhc3N1bWVkIGZvciB0aGUgPGNvZGU+Z2V0dHI8L2NvZGU+IGluc3RydWN0aW9uIHRvIDx2YXI+bnVtYmVyPC92YXI+LiAKK1RoZSBkZWZhdWx0IGlzIDIgaWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wdC1maXhlZDwvc3Bhbj48L3NhbXA+IGlzIGluIGVmZmVjdCwgMTAwIG90aGVyd2lzZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcHQtZml4ZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wdF8wMDJkZml4ZWQtMjE2MyI+PC9hPkFzc3VtZSA8Y29kZT5wdCo8L2NvZGU+IGluc3RydWN0aW9ucyB3b24ndCB0cmFwLiAgVGhpcyBnZW5lcmFsbHkgZ2VuZXJhdGVzCitiZXR0ZXItc2NoZWR1bGVkIGNvZGUsIGJ1dCBpcyB1bnNhZmUgb24gY3VycmVudCBoYXJkd2FyZS4gCitUaGUgY3VycmVudCBhcmNoaXRlY3R1cmUKK2RlZmluaXRpb24gc2F5cyB0aGF0IDxjb2RlPnB0YWJzPC9jb2RlPiBhbmQgPGNvZGU+cHRyZWw8L2NvZGU+IHRyYXAgd2hlbiB0aGUgdGFyZ2V0CithbmRlZCB3aXRoIDMgaXMgMy4gCitUaGlzIGhhcyB0aGUgdW5pbnRlbnRpb25hbCBlZmZlY3Qgb2YgbWFraW5nIGl0IHVuc2FmZSB0byBzY2hlZHVsZSB0aGVzZQoraW5zdHJ1Y3Rpb25zIGJlZm9yZSBhIGJyYW5jaCwgb3IgaG9pc3QgdGhlbSBvdXQgb2YgYSBsb29wLiAgRm9yIGV4YW1wbGUsCis8Y29kZT5fX2RvX2dsb2JhbF9jdG9yczwvY29kZT4sIGEgcGFydCBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliZ2NjPC9zcGFuPjwvc2FtcD4KK3RoYXQgcnVucyBjb25zdHJ1Y3RvcnMgYXQgcHJvZ3JhbQorc3RhcnR1cCwgY2FsbHMgZnVuY3Rpb25zIGluIGEgbGlzdCB3aGljaCBpcyBkZWxpbWl0ZWQgYnkgJm1pbnVzOzEuICBXaXRoIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wdC1maXhlZDwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgdGhlIDxjb2RlPnB0YWJzPC9jb2RlPiBpcyBkb25lIGJlZm9yZSB0ZXN0aW5nIGFnYWluc3QgJm1pbnVzOzEuIAorVGhhdCBtZWFucyB0aGF0IGFsbCB0aGUgY29uc3RydWN0b3JzIHJ1biBhIGJpdCBtb3JlIHF1aWNrbHksIGJ1dCB3aGVuCit0aGUgbG9vcCBjb21lcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LCB0aGUgcHJvZ3JhbSBjcmFzaGVzIGJlY2F1c2UgPGNvZGU+cHRhYnM8L2NvZGU+Citsb2FkcyAmbWludXM7MSBpbnRvIGEgdGFyZ2V0IHJlZ2lzdGVyLgorCisgICAgIDxwPlNpbmNlIHRoaXMgb3B0aW9uIGlzIHVuc2FmZSBmb3IgYW55CitoYXJkd2FyZSBpbXBsZW1lbnRpbmcgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb24sIHRoZSBkZWZhdWx0CitpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXB0LWZpeGVkPC9zcGFuPjwvc2FtcD4uICBVbmxlc3Mgc3BlY2lmaWVkIGV4cGxpY2l0bHkgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1nZXR0cmNvc3Q8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1wdC1maXhlZDwvc3Bhbj48L3NhbXA+IGFsc28gaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWdldHRyY29zdD0xMDA8L3NwYW4+PC9zYW1wPjsKK3RoaXMgZGV0ZXJzIHJlZ2lzdGVyIGFsbG9jYXRpb24gZnJvbSB1c2luZyB0YXJnZXQgcmVnaXN0ZXJzIGZvciBzdG9yaW5nCitvcmRpbmFyeSBpbnRlZ2Vycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taW52YWxpZC1zeW1ib2xzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW52YWxpZF8wMDJkc3ltYm9scy0yMTY0Ij48L2E+QXNzdW1lIHN5bWJvbHMgbWlnaHQgYmUgaW52YWxpZC4gIE9yZGluYXJ5IGZ1bmN0aW9uIHN5bWJvbHMgZ2VuZXJhdGVkIGJ5Cit0aGUgY29tcGlsZXIgYXJlIGFsd2F5cyB2YWxpZCB0byBsb2FkIHdpdGgKKzxjb2RlPm1vdmk8L2NvZGU+Lzxjb2RlPnNob3JpPC9jb2RlPi88Y29kZT5wdGFiczwvY29kZT4gb3IKKzxjb2RlPm1vdmk8L2NvZGU+Lzxjb2RlPnNob3JpPC9jb2RlPi88Y29kZT5wdHJlbDwvY29kZT4sCitidXQgd2l0aCBhc3NlbWJsZXIgYW5kL29yIGxpbmtlciB0cmlja3MgaXQgaXMgcG9zc2libGUKK3RvIGdlbmVyYXRlIHN5bWJvbHMgdGhhdCBjYXVzZSA8Y29kZT5wdGFiczwvY29kZT4gb3IgPGNvZGU+cHRyZWw8L2NvZGU+IHRvIHRyYXAuIAorVGhpcyBvcHRpb24gaXMgb25seSBtZWFuaW5nZnVsIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1wdC1maXhlZDwvc3Bhbj48L3NhbXA+IGlzIGluIGVmZmVjdC4gCitJdCBwcmV2ZW50cyBjcm9zcy1iYXNpYy1ibG9jayBDU0UsIGhvaXN0aW5nIGFuZCBtb3N0IHNjaGVkdWxpbmcKK29mIHN5bWJvbCBsb2Fkcy4gIFRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8taW52YWxpZC1zeW1ib2xzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWJyYW5jaC1jb3N0PTwvY29kZT48dmFyPm51bTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tYnJhbmNoXzAwMmRjb3N0XzAwM2RfMDA0MHZhcl8wMDdibnVtXzAwN2QtMjE2NSI+PC9hPkFzc3VtZSA8dmFyPm51bTwvdmFyPiB0byBiZSB0aGUgY29zdCBmb3IgYSBicmFuY2ggaW5zdHJ1Y3Rpb24uICBIaWdoZXIgbnVtYmVycworbWFrZSB0aGUgY29tcGlsZXIgdHJ5IHRvIGdlbmVyYXRlIG1vcmUgYnJhbmNoLWZyZWUgY29kZSBpZiBwb3NzaWJsZS4gCitJZiBub3Qgc3BlY2lmaWVkIHRoZSB2YWx1ZSBpcyBzZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIHByb2Nlc3NvciB0eXBlIHRoYXQKK2lzIGJlaW5nIGNvbXBpbGVkIGZvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1temRjYnJhbmNoPC9jb2RlPjxkdD48Y29kZT4tbW5vLXpkY2JyYW5jaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXpkY2JyYW5jaC0yMTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR6ZGNicmFuY2gtMjE2NyI+PC9hPkFzc3VtZSAoZG8gbm90IGFzc3VtZSkgdGhhdCB6ZXJvIGRpc3BsYWNlbWVudCBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb25zCis8Y29kZT5idDwvY29kZT4gYW5kIDxjb2RlPmJmPC9jb2RlPiBhcmUgZmFzdC4gIElmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1temRjYnJhbmNoPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLCB0aGUKK2NvbXBpbGVyIHdpbGwgdHJ5IHRvIHByZWZlciB6ZXJvIGRpc3BsYWNlbWVudCBicmFuY2ggY29kZSBzZXF1ZW5jZXMuICBUaGlzIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yIFNINCBhbmQgU0g0QS4gIEl0IGNhbiBiZSBleHBsaWNpdGx5CitkaXNhYmxlZCBieSBzcGVjaWZ5aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8temRjYnJhbmNoPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNicmFuY2hkaTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNicmFuY2hkaS0yMTY4Ij48L2E+RW5hYmxlIHRoZSA8Y29kZT5jYnJhbmNoZGk0PC9jb2RlPiBpbnN0cnVjdGlvbiBwYXR0ZXJuLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jbXBlcWRpPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY21wZXFkaS0yMTY5Ij48L2E+RW1pdCB0aGUgPGNvZGU+Y21wZXFkaV90PC9jb2RlPiBpbnN0cnVjdGlvbiBwYXR0ZXJuIGV2ZW4gd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNicmFuY2hkaTwvc3Bhbj48L3NhbXA+CitpcyBpbiBlZmZlY3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZ1c2VkLW1hZGQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZnVzZWQtbWFkZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZ1c2VkXzAwMmRtYWRkLTIxNzAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZ1c2VkXzAwMmRtYWRkLTIxNzEiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgZmxvYXRpbmctcG9pbnQgbXVsdGlwbHkgYW5kCithY2N1bXVsYXRlIGluc3RydWN0aW9ucy4gIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQKK2lmIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50IGlzIHVzZWQuICBUaGUgbWFjaGluZS1kZXBlbmRlbnQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnVzZWQtbWFkZDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBub3cgbWFwcGVkIHRvIHRoZSBtYWNoaW5lLWluZGVwZW5kZW50Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZwLWNvbnRyYWN0PWZhc3Q8L3NwYW4+PC9zYW1wPiBvcHRpb24sIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWZ1c2VkLW1hZGQ8L3NwYW4+PC9zYW1wPiBpcworbWFwcGVkIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnAtY29udHJhY3Q9b2ZmPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZzY2E8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZnNjYTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZzY2EtMjE3MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZnNjYS0yMTczIj48L2E+QWxsb3cgb3IgZGlzYWxsb3cgdGhlIGNvbXBpbGVyIHRvIGVtaXQgdGhlIDxjb2RlPmZzY2E8L2NvZGU+IGluc3RydWN0aW9uIGZvciBzaW5lCithbmQgY29zaW5lIGFwcHJveGltYXRpb25zLiAgVGhlIG9wdGlvbiA8Y29kZT4tbWZzY2E8L2NvZGU+IG11c3QgYmUgdXNlZCBpbgorY29tYmluYXRpb24gd2l0aCA8Y29kZT4tZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnM8L2NvZGU+LiAgSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0Cit3aGVuIGdlbmVyYXRpbmcgY29kZSBmb3IgU0g0QS4gIFVzaW5nIDxjb2RlPi1tbm8tZnNjYTwvY29kZT4gZGlzYWJsZXMgc2luZSBhbmQgY29zaW5lCithcHByb3hpbWF0aW9ucyBldmVuIGlmIDxjb2RlPi1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9uczwvY29kZT4gaXMgaW4gZWZmZWN0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1mc3JyYTwvY29kZT48ZHQ+PGNvZGU+LW1uby1mc3JyYTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZzcnJhLTIxNzQiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZzcnJhLTIxNzUiPjwvYT5BbGxvdyBvciBkaXNhbGxvdyB0aGUgY29tcGlsZXIgdG8gZW1pdCB0aGUgPGNvZGU+ZnNycmE8L2NvZGU+IGluc3RydWN0aW9uIGZvcgorcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhcHByb3hpbWF0aW9ucy4gIFRoZSBvcHRpb24gPGNvZGU+LW1mc3JyYTwvY29kZT4gbXVzdCBiZSB1c2VkCitpbiBjb21iaW5hdGlvbiB3aXRoIDxjb2RlPi1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9uczwvY29kZT4gYW5kCis8Y29kZT4tZmZpbml0ZS1tYXRoLW9ubHk8L2NvZGU+LiAgSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gZ2VuZXJhdGluZyBjb2RlIGZvcgorU0g0QS4gIFVzaW5nIDxjb2RlPi1tbm8tZnNycmE8L2NvZGU+IGRpc2FibGVzIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYXBwcm94aW1hdGlvbnMKK2V2ZW4gaWYgPGNvZGU+LWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zPC9jb2RlPiBhbmQgPGNvZGU+LWZmaW5pdGUtbWF0aC1vbmx5PC9jb2RlPiBhcmUKK2luIGVmZmVjdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcHJldGVuZC1jbW92ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXByZXRlbmRfMDAyZGNtb3ZlLTIxNzYiPjwvYT5QcmVmZXIgemVyby1kaXNwbGFjZW1lbnQgY29uZGl0aW9uYWwgYnJhbmNoZXMgZm9yIGNvbmRpdGlvbmFsIG1vdmUgaW5zdHJ1Y3Rpb24KK3BhdHRlcm5zLiAgVGhpcyBjYW4gcmVzdWx0IGluIGZhc3RlciBjb2RlIG9uIHRoZSBTSDQgcHJvY2Vzc29yLgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU1BBUkMtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TUEFSQy1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyZmZiNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU1BBUkMtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMzA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TUEFSQyBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNvbGFyaXMtMi1PcHRpb25zLmh0bWwjU29sYXJpcy0yLU9wdGlvbnMiIHRpdGxlPSJTb2xhcmlzIDIgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiIHRpdGxlPSJTUFUgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTUEFSQy1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU29sYXJpcy0yLU9wdGlvbnMuaHRtbCNTb2xhcmlzLTItT3B0aW9ucyI+U29sYXJpcyAyIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuNDAgU1BBUkMgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNQQVJDLW9wdGlvbnMtMjE4MSI+PC9hPgorVGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgb24gdGhlIFNQQVJDOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbW5vLWFwcC1yZWdzPC9jb2RlPjxkdD48Y29kZT4tbWFwcC1yZWdzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGFwcF8wMDJkcmVncy0yMTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtbWFwcF8wMDJkcmVncy0yMTgzIj48L2E+U3BlY2lmeSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFwcC1yZWdzPC9zcGFuPjwvc2FtcD4gdG8gZ2VuZXJhdGUgb3V0cHV0IHVzaW5nIHRoZSBnbG9iYWwgcmVnaXN0ZXJzCisyIHRocm91Z2ggNCwgd2hpY2ggdGhlIFNQQVJDIFNWUjQgQUJJIHJlc2VydmVzIGZvciBhcHBsaWNhdGlvbnMuICBUaGlzCitpcyB0aGUgZGVmYXVsdC4KKworICAgICA8cD5UbyBiZSBmdWxseSBTVlI0IEFCSS1jb21wbGlhbnQgYXQgdGhlIGNvc3Qgb2Ygc29tZSBwZXJmb3JtYW5jZSBsb3NzLAorc3BlY2lmeSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWFwcC1yZWdzPC9zcGFuPjwvc2FtcD4uICBZb3Ugc2hvdWxkIGNvbXBpbGUgbGlicmFyaWVzIGFuZCBzeXN0ZW0KK3NvZnR3YXJlIHdpdGggdGhpcyBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZsYXQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZmxhdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZsYXQtMjE4NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZmxhdC0yMTg1Ij48L2E+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZsYXQ8L3NwYW4+PC9zYW1wPiwgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGdlbmVyYXRlIHNhdmUvcmVzdG9yZSBpbnN0cnVjdGlvbnMKK2FuZCB1c2VzIGEgJmxkcXVvO2ZsYXQmcmRxdW87IG9yIHNpbmdsZSByZWdpc3RlciB3aW5kb3cgbW9kZWwuICBUaGlzIG1vZGVsIGlzIGNvbXBhdGlibGUKK3dpdGggdGhlIHJlZ3VsYXIgcmVnaXN0ZXIgd2luZG93IG1vZGVsLiAgVGhlIGxvY2FsIHJlZ2lzdGVycyBhbmQgdGhlIGlucHV0CityZWdpc3RlcnMgKDAmbmRhc2g7NSkgYXJlIHN0aWxsIHRyZWF0ZWQgYXMgJmxkcXVvO2NhbGwtc2F2ZWQmcmRxdW87IHJlZ2lzdGVycyBhbmQgYXJlCitzYXZlZCBvbiB0aGUgc3RhY2sgYXMgbmVlZGVkLgorCisgICAgIDxwPldpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1mbGF0PC9zcGFuPjwvc2FtcD4gKHRoZSBkZWZhdWx0KSwgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBzYXZlL3Jlc3RvcmUKK2luc3RydWN0aW9ucyAoZXhjZXB0IGZvciBsZWFmIGZ1bmN0aW9ucykuICBUaGlzIGlzIHRoZSBub3JtYWwgb3BlcmF0aW5nIG1vZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZwdTwvY29kZT48ZHQ+PGNvZGU+LW1oYXJkLWZsb2F0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZnB1LTIxODYiPjwvYT48YSBuYW1lPSJpbmRleC1taGFyZF8wMDJkZmxvYXQtMjE4NyI+PC9hPkdlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4gIFRoaXMgaXMgdGhlCitkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1mcHU8L2NvZGU+PGR0Pjxjb2RlPi1tc29mdC1mbG9hdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRmcHUtMjE4OCI+PC9hPjxhIG5hbWU9ImluZGV4LW1zb2Z0XzAwMmRmbG9hdC0yMTg5Ij48L2E+R2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcgbGlicmFyeSBjYWxscyBmb3IgZmxvYXRpbmcgcG9pbnQuIAorPHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiB0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgYWxsIFNQQVJDCit0YXJnZXRzLiAgTm9ybWFsbHkgdGhlIGZhY2lsaXRpZXMgb2YgdGhlIG1hY2hpbmUncyB1c3VhbCBDIGNvbXBpbGVyIGFyZQordXNlZCwgYnV0IHRoaXMgY2Fubm90IGJlIGRvbmUgZGlyZWN0bHkgaW4gY3Jvc3MtY29tcGlsYXRpb24uICBZb3UgbXVzdCBtYWtlCit5b3VyIG93biBhcnJhbmdlbWVudHMgdG8gcHJvdmlkZSBzdWl0YWJsZSBsaWJyYXJ5IGZ1bmN0aW9ucyBmb3IKK2Nyb3NzLWNvbXBpbGF0aW9uLiAgVGhlIGVtYmVkZGVkIHRhcmdldHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zcGFyYy0qLWFvdXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNwYXJjbGl0ZS0qLSo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZG8gcHJvdmlkZSBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc29mdC1mbG9hdDwvc3Bhbj48L3NhbXA+IGNoYW5nZXMgdGhlIGNhbGxpbmcgY29udmVudGlvbiBpbiB0aGUgb3V0cHV0IGZpbGU7Cit0aGVyZWZvcmUsIGl0IGlzIG9ubHkgdXNlZnVsIGlmIHlvdSBjb21waWxlIDxlbT5hbGw8L2VtPiBvZiBhIHByb2dyYW0gd2l0aAordGhpcyBvcHRpb24uICBJbiBwYXJ0aWN1bGFyLCB5b3UgbmVlZCB0byBjb21waWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJnY2MuYTwvc3Bhbj48L3NhbXA+LCB0aGUKK2xpYnJhcnkgdGhhdCBjb21lcyB3aXRoIEdDQywgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNvZnQtZmxvYXQ8L3NwYW4+PC9zYW1wPiBpbiBvcmRlciBmb3IKK3RoaXMgdG8gd29yay4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taGFyZC1xdWFkLWZsb2F0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taGFyZF8wMDJkcXVhZF8wMDJkZmxvYXQtMjE5MCI+PC9hPkdlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIHF1YWQtd29yZCAobG9uZyBkb3VibGUpIGZsb2F0aW5nLXBvaW50CitpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNvZnQtcXVhZC1mbG9hdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNvZnRfMDAyZHF1YWRfMDAyZGZsb2F0LTIxOTEiPjwvYT5HZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBsaWJyYXJ5IGNhbGxzIGZvciBxdWFkLXdvcmQgKGxvbmcgZG91YmxlKQorZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgVGhlIGZ1bmN0aW9ucyBjYWxsZWQgYXJlIHRob3NlIHNwZWNpZmllZAoraW4gdGhlIFNQQVJDIEFCSS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPHA+QXMgb2YgdGhpcyB3cml0aW5nLCB0aGVyZSBhcmUgbm8gU1BBUkMgaW1wbGVtZW50YXRpb25zIHRoYXQgaGF2ZSBoYXJkd2FyZQorc3VwcG9ydCBmb3IgdGhlIHF1YWQtd29yZCBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuICBUaGV5IGFsbCBpbnZva2UKK2EgdHJhcCBoYW5kbGVyIGZvciBvbmUgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zLCBhbmQgdGhlbiB0aGUgdHJhcCBoYW5kbGVyCitlbXVsYXRlcyB0aGUgZWZmZWN0IG9mIHRoZSBpbnN0cnVjdGlvbi4gIEJlY2F1c2Ugb2YgdGhlIHRyYXAgaGFuZGxlciBvdmVyaGVhZCwKK3RoaXMgaXMgbXVjaCBzbG93ZXIgdGhhbiBjYWxsaW5nIHRoZSBBQkkgbGlicmFyeSByb3V0aW5lcy4gIFRodXMgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNvZnQtcXVhZC1mbG9hdDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tdW5hbGlnbmVkLWRvdWJsZXM8L2NvZGU+PGR0Pjxjb2RlPi1tdW5hbGlnbmVkLWRvdWJsZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkdW5hbGlnbmVkXzAwMmRkb3VibGVzLTIxOTIiPjwvYT48YSBuYW1lPSJpbmRleC1tdW5hbGlnbmVkXzAwMmRkb3VibGVzLTIxOTMiPjwvYT5Bc3N1bWUgdGhhdCBkb3VibGVzIGhhdmUgOC1ieXRlIGFsaWdubWVudC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPHA+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXVuYWxpZ25lZC1kb3VibGVzPC9zcGFuPjwvc2FtcD4sIEdDQyBhc3N1bWVzIHRoYXQgZG91YmxlcyBoYXZlIDgtYnl0ZQorYWxpZ25tZW50IG9ubHkgaWYgdGhleSBhcmUgY29udGFpbmVkIGluIGFub3RoZXIgdHlwZSwgb3IgaWYgdGhleSBoYXZlIGFuCithYnNvbHV0ZSBhZGRyZXNzLiAgT3RoZXJ3aXNlLCBpdCBhc3N1bWVzIHRoZXkgaGF2ZSA0LWJ5dGUgYWxpZ25tZW50LiAKK1NwZWNpZnlpbmcgdGhpcyBvcHRpb24gYXZvaWRzIHNvbWUgcmFyZSBjb21wYXRpYmlsaXR5IHByb2JsZW1zIHdpdGggY29kZQorZ2VuZXJhdGVkIGJ5IG90aGVyIGNvbXBpbGVycy4gIEl0IGlzIG5vdCB0aGUgZGVmYXVsdCBiZWNhdXNlIGl0IHJlc3VsdHMKK2luIGEgcGVyZm9ybWFuY2UgbG9zcywgZXNwZWNpYWxseSBmb3IgZmxvYXRpbmctcG9pbnQgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tZmFzdGVyLXN0cnVjdHM8L2NvZGU+PGR0Pjxjb2RlPi1tZmFzdGVyLXN0cnVjdHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZmFzdGVyXzAwMmRzdHJ1Y3RzLTIxOTQiPjwvYT48YSBuYW1lPSJpbmRleC1tZmFzdGVyXzAwMmRzdHJ1Y3RzLTIxOTUiPjwvYT5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZmFzdGVyLXN0cnVjdHM8L3NwYW4+PC9zYW1wPiwgdGhlIGNvbXBpbGVyIGFzc3VtZXMgdGhhdCBzdHJ1Y3R1cmVzCitzaG91bGQgaGF2ZSA4LWJ5dGUgYWxpZ25tZW50LiAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgcGFpcnMgb2YKKzxjb2RlPmxkZDwvY29kZT4gYW5kIDxjb2RlPnN0ZDwvY29kZT4gaW5zdHJ1Y3Rpb25zIGZvciBjb3BpZXMgaW4gc3RydWN0dXJlCithc3NpZ25tZW50LCBpbiBwbGFjZSBvZiB0d2ljZSBhcyBtYW55IDxjb2RlPmxkPC9jb2RlPiBhbmQgPGNvZGU+c3Q8L2NvZGU+IHBhaXJzLiAKK0hvd2V2ZXIsIHRoZSB1c2Ugb2YgdGhpcyBjaGFuZ2VkIGFsaWdubWVudCBkaXJlY3RseSB2aW9sYXRlcyB0aGUgU1BBUkMKK0FCSS4gIFRodXMsIGl0J3MgaW50ZW5kZWQgb25seSBmb3IgdXNlIG9uIHRhcmdldHMgd2hlcmUgdGhlIGRldmVsb3BlcgorYWNrbm93bGVkZ2VzIHRoYXQgdGhlaXIgcmVzdWx0aW5nIGNvZGUgaXMgbm90IGRpcmVjdGx5IGluIGxpbmUgd2l0aAordGhlIHJ1bGVzIG9mIHRoZSBBQkkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5jcHVfdHlwZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY3B1LTIxOTYiPjwvYT5TZXQgdGhlIGluc3RydWN0aW9uIHNldCwgcmVnaXN0ZXIgc2V0LCBhbmQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBwYXJhbWV0ZXJzCitmb3IgbWFjaGluZSB0eXBlIDx2YXI+Y3B1X3R5cGU8L3Zhcj4uICBTdXBwb3J0ZWQgdmFsdWVzIGZvciA8dmFyPmNwdV90eXBlPC92YXI+IGFyZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52Nzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jeXByZXNzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN1cGVyc3BhcmM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aHlwZXJzcGFyYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGVvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zcGFyY2xpdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZjkzMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mOTM0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNwYXJjbGl0ZTg2eDwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3BhcmNsZXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dHNjNzAxPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY5PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVsdHJhc3BhcmM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVsdHJhc3BhcmMzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5pYWdhcmE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmlhZ2FyYTI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmlhZ2FyYTM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uaWFnYXJhNDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5OYXRpdmUgU29sYXJpcyBhbmQgR05VL0xpbnV4IHRvb2xjaGFpbnMgYWxzbyBzdXBwb3J0IHRoZSB2YWx1ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5hdGl2ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK3doaWNoIHNlbGVjdHMgdGhlIGJlc3QgYXJjaGl0ZWN0dXJlIG9wdGlvbiBmb3IgdGhlIGhvc3QgcHJvY2Vzc29yLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PW5hdGl2ZTwvc3Bhbj48L3NhbXA+IGhhcyBubyBlZmZlY3QgaWYgR0NDIGRvZXMgbm90IHJlY29nbml6ZQordGhlIHByb2Nlc3Nvci4KKworICAgICA8cD5EZWZhdWx0IGluc3RydWN0aW9uIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBhcmUgdXNlZCBmb3IgdmFsdWVzIHRoYXQgc2VsZWN0CithbiBhcmNoaXRlY3R1cmUgYW5kIG5vdCBhbiBpbXBsZW1lbnRhdGlvbi4gIFRoZXNlIGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY3PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnY4PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zcGFyY2xpdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3BhcmNsZXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+djk8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+SGVyZSBpcyBhIGxpc3Qgb2YgZWFjaCBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIGFuZCB0aGVpciBzdXBwb3J0ZWQKK2ltcGxlbWVudGF0aW9ucy4KKworICAgICAgICAgIDxkbD4KKzxkdD52NzxkZD5jeXByZXNzCisKKyAgICAgICAgICA8YnI+PGR0PnY4PGRkPnN1cGVyc3BhcmMsIGh5cGVyc3BhcmMsIGxlb24KKworICAgICAgICAgIDxicj48ZHQ+c3BhcmNsaXRlPGRkPmY5MzAsIGY5MzQsIHNwYXJjbGl0ZTg2eAorCisgICAgICAgICAgPGJyPjxkdD5zcGFyY2xldDxkZD50c2M3MDEKKworICAgICAgICAgIDxicj48ZHQ+djk8ZGQ+dWx0cmFzcGFyYywgdWx0cmFzcGFyYzMsIG5pYWdhcmEsIG5pYWdhcmEyLCBuaWFnYXJhMywgbmlhZ2FyYTQKKzwvZGw+CisKKyAgICAgPHA+QnkgZGVmYXVsdCAodW5sZXNzIGNvbmZpZ3VyZWQgb3RoZXJ3aXNlKSwgR0NDIGdlbmVyYXRlcyBjb2RlIGZvciB0aGUgVjcKK3ZhcmlhbnQgb2YgdGhlIFNQQVJDIGFyY2hpdGVjdHVyZS4gIFdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9Y3lwcmVzczwvc3Bhbj48L3NhbXA+LCB0aGUgY29tcGlsZXIKK2FkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yIHRoZSBDeXByZXNzIENZN0M2MDIgY2hpcCwgYXMgdXNlZCBpbiB0aGUKK1NQQVJDU3RhdGlvbi9TUEFSQ1NlcnZlciAzeHggc2VyaWVzLiAgVGhpcyBpcyBhbHNvIGFwcHJvcHJpYXRlIGZvciB0aGUgb2xkZXIKK1NQQVJDU3RhdGlvbiAxLCAyLCBJUFggZXRjLgorCisgICAgIDxwPldpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9djg8L3NwYW4+PC9zYW1wPiwgR0NDIGdlbmVyYXRlcyBjb2RlIGZvciB0aGUgVjggdmFyaWFudCBvZiB0aGUgU1BBUkMKK2FyY2hpdGVjdHVyZS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSBWNyBjb2RlIGlzIHRoYXQgdGhlIGNvbXBpbGVyIGVtaXRzCit0aGUgaW50ZWdlciBtdWx0aXBseSBhbmQgaW50ZWdlciBkaXZpZGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIGV4aXN0IGluIFNQQVJDLVY4CitidXQgbm90IGluIFNQQVJDLVY3LiAgV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1zdXBlcnNwYXJjPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkKK29wdGltaXplcyBpdCBmb3IgdGhlIFN1cGVyU1BBUkMgY2hpcCwgYXMgdXNlZCBpbiB0aGUgU1BBUkNTdGF0aW9uIDEwLCAxMDAwIGFuZAorMjAwMCBzZXJpZXMuCisKKyAgICAgPHA+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1zcGFyY2xpdGU8L3NwYW4+PC9zYW1wPiwgR0NDIGdlbmVyYXRlcyBjb2RlIGZvciB0aGUgU1BBUkNsaXRlIHZhcmlhbnQgb2YKK3RoZSBTUEFSQyBhcmNoaXRlY3R1cmUuICBUaGlzIGFkZHMgdGhlIGludGVnZXIgbXVsdGlwbHksIGludGVnZXIgZGl2aWRlIHN0ZXAKK2FuZCBzY2FuICg8Y29kZT5mZnM8L2NvZGU+KSBpbnN0cnVjdGlvbnMgd2hpY2ggZXhpc3QgaW4gU1BBUkNsaXRlIGJ1dCBub3QgaW4gU1BBUkMtVjcuIAorV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1mOTMwPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciB0aGUKK0Z1aml0c3UgTUI4NjkzMCBjaGlwLCB3aGljaCBpcyB0aGUgb3JpZ2luYWwgU1BBUkNsaXRlLCB3aXRoIG5vIEZQVS4gIFdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PWY5MzQ8L3NwYW4+PC9zYW1wPiwgdGhlIGNvbXBpbGVyIGFkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yIHRoZSBGdWppdHN1CitNQjg2OTM0IGNoaXAsIHdoaWNoIGlzIHRoZSBtb3JlIHJlY2VudCBTUEFSQ2xpdGUgd2l0aCBGUFUuCisKKyAgICAgPHA+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1zcGFyY2xldDwvc3Bhbj48L3NhbXA+LCBHQ0MgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoZSBTUEFSQ2xldCB2YXJpYW50IG9mCit0aGUgU1BBUkMgYXJjaGl0ZWN0dXJlLiAgVGhpcyBhZGRzIHRoZSBpbnRlZ2VyIG11bHRpcGx5LCBtdWx0aXBseS9hY2N1bXVsYXRlLAoraW50ZWdlciBkaXZpZGUgc3RlcCBhbmQgc2NhbiAoPGNvZGU+ZmZzPC9jb2RlPikgaW5zdHJ1Y3Rpb25zIHdoaWNoIGV4aXN0IGluIFNQQVJDbGV0CitidXQgbm90IGluIFNQQVJDLVY3LiAgV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT10c2M3MDE8L3NwYW4+PC9zYW1wPiwgdGhlIGNvbXBpbGVyIGFkZGl0aW9uYWxseQorb3B0aW1pemVzIGl0IGZvciB0aGUgVEVNSUMgU1BBUkNsZXQgY2hpcC4KKworICAgICA8cD5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PXY5PC9zcGFuPjwvc2FtcD4sIEdDQyBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIFY5IHZhcmlhbnQgb2YgdGhlIFNQQVJDCithcmNoaXRlY3R1cmUuICBUaGlzIGFkZHMgNjQtYml0IGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IG1vdmUgaW5zdHJ1Y3Rpb25zLAorMyBhZGRpdGlvbmFsIGZsb2F0aW5nLXBvaW50IGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVycyBhbmQgY29uZGl0aW9uYWwgbW92ZQoraW5zdHJ1Y3Rpb25zLiAgV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT11bHRyYXNwYXJjPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkKK29wdGltaXplcyBpdCBmb3IgdGhlIFN1biBVbHRyYVNQQVJDIEkvSUkvSUlpIGNoaXBzLiAgV2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9dWx0cmFzcGFyYzM8L3NwYW4+PC9zYW1wPiwgdGhlIGNvbXBpbGVyIGFkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yIHRoZQorU3VuIFVsdHJhU1BBUkMgSUlJL0lJSSsvSUlJaS9JSUlpKy9JVi9JVisgY2hpcHMuICBXaXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT1uaWFnYXJhPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvcgorU3VuIFVsdHJhU1BBUkMgVDEgY2hpcHMuICBXaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PW5pYWdhcmEyPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21waWxlcgorYWRkaXRpb25hbGx5IG9wdGltaXplcyBpdCBmb3IgU3VuIFVsdHJhU1BBUkMgVDIgY2hpcHMuIFdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PW5pYWdhcmEzPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciBTdW4KK1VsdHJhU1BBUkMgVDMgY2hpcHMuICBXaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY3B1PW5pYWdhcmE0PC9zcGFuPjwvc2FtcD4sIHRoZSBjb21waWxlcgorYWRkaXRpb25hbGx5IG9wdGltaXplcyBpdCBmb3IgU3VuIFVsdHJhU1BBUkMgVDQgY2hpcHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXR1bmU9PC9jb2RlPjx2YXI+Y3B1X3R5cGU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXR1bmUtMjE5NyI+PC9hPlNldCB0aGUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvciBtYWNoaW5lIHR5cGUKKzx2YXI+Y3B1X3R5cGU8L3Zhcj4sIGJ1dCBkbyBub3Qgc2V0IHRoZSBpbnN0cnVjdGlvbiBzZXQgb3IgcmVnaXN0ZXIgc2V0IHRoYXQgdGhlCitvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU9PC9zcGFuPjx2YXI+Y3B1X3R5cGU8L3Zhcj48L3NhbXA+IGRvZXMuCisKKyAgICAgPHA+VGhlIHNhbWUgdmFsdWVzIGZvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNwdT08L3NwYW4+PHZhcj5jcHVfdHlwZTwvdmFyPjwvc2FtcD4gY2FuIGJlIHVzZWQgZm9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXR1bmU9PC9zcGFuPjx2YXI+Y3B1X3R5cGU8L3Zhcj48L3NhbXA+LCBidXQgdGhlIG9ubHkgdXNlZnVsIHZhbHVlcyBhcmUgdGhvc2UKK3RoYXQgc2VsZWN0IGEgcGFydGljdWxhciBDUFUgaW1wbGVtZW50YXRpb24uICBUaG9zZSBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jeXByZXNzPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdXBlcnNwYXJjPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmh5cGVyc3BhcmM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGVvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mOTMwPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmY5MzQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNwYXJjbGl0ZTg2eDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50c2M3MDE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dWx0cmFzcGFyYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj51bHRyYXNwYXJjMzwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmlhZ2FyYTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uaWFnYXJhMjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uaWFnYXJhMzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uaWFnYXJhNDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFdpdGgKK25hdGl2ZSBTb2xhcmlzIGFuZCBHTlUvTGludXggdG9vbGNoYWlucywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uYXRpdmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FuIGFsc28gYmUgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdjhwbHVzPC9jb2RlPjxkdD48Y29kZT4tbW5vLXY4cGx1czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXY4cGx1cy0yMTk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR2OHBsdXMtMjE5OSI+PC9hPldpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12OHBsdXM8L3NwYW4+PC9zYW1wPiwgR0NDIGdlbmVyYXRlcyBjb2RlIGZvciB0aGUgU1BBUkMtVjgrIEFCSS4gIFRoZQorZGlmZmVyZW5jZSBmcm9tIHRoZSBWOCBBQkkgaXMgdGhhdCB0aGUgZ2xvYmFsIGFuZCBvdXQgcmVnaXN0ZXJzIGFyZQorY29uc2lkZXJlZCA2NCBiaXRzIHdpZGUuICBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBTb2xhcmlzIGluIDMyLWJpdAorbW9kZSBmb3IgYWxsIFNQQVJDLVY5IHByb2Nlc3NvcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXZpczwvY29kZT48ZHQ+PGNvZGU+LW1uby12aXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW12aXMtMjIwMCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkdmlzLTIyMDEiPjwvYT5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdmlzPC9zcGFuPjwvc2FtcD4sIEdDQyBnZW5lcmF0ZXMgY29kZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgVWx0cmFTUEFSQworVmlzdWFsIEluc3RydWN0aW9uIFNldCBleHRlbnNpb25zLiAgVGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby12aXM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdmlzMjwvY29kZT48ZHQ+PGNvZGU+LW1uby12aXMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdmlzMi0yMjAyIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR2aXMyLTIyMDMiPjwvYT5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdmlzMjwvc3Bhbj48L3NhbXA+LCBHQ0MgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK3ZlcnNpb24gMi4wIG9mIHRoZSBVbHRyYVNQQVJDIFZpc3VhbCBJbnN0cnVjdGlvbiBTZXQgZXh0ZW5zaW9ucy4gIFRoZQorZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXZpczI8L3NwYW4+PC9zYW1wPiB3aGVuIHRhcmdldGluZyBhIGNwdSB0aGF0IHN1cHBvcnRzIHN1Y2gKK2luc3RydWN0aW9ucywgc3VjaCBhcyBVbHRyYVNQQVJDLUlJSSBhbmQgbGF0ZXIuICBTZXR0aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdmlzMjwvc3Bhbj48L3NhbXA+CithbHNvIHNldHMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12aXM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdmlzMzwvY29kZT48ZHQ+PGNvZGU+LW1uby12aXMzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdmlzMy0yMjA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR2aXMzLTIyMDUiPjwvYT5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdmlzMzwvc3Bhbj48L3NhbXA+LCBHQ0MgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK3ZlcnNpb24gMy4wIG9mIHRoZSBVbHRyYVNQQVJDIFZpc3VhbCBJbnN0cnVjdGlvbiBTZXQgZXh0ZW5zaW9ucy4gIFRoZQorZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXZpczM8L3NwYW4+PC9zYW1wPiB3aGVuIHRhcmdldGluZyBhIGNwdSB0aGF0IHN1cHBvcnRzIHN1Y2gKK2luc3RydWN0aW9ucywgc3VjaCBhcyBuaWFnYXJhLTMgYW5kIGxhdGVyLiAgU2V0dGluZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXZpczM8L3NwYW4+PC9zYW1wPgorYWxzbyBzZXRzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdmlzMjwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXZpczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jYmNvbmQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tY2Jjb25kPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY2Jjb25kLTIyMDYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGNiY29uZC0yMjA3Ij48L2E+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNiY29uZDwvc3Bhbj48L3NhbXA+LCBHQ0MgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK2NvbXBhcmUtYW5kLWJyYW5jaCBpbnN0cnVjdGlvbnMsIGFzIGRlZmluZWQgaW4gdGhlIFNwYXJjIEFyY2hpdGVjdHVyZSAyMDExLiAKK1RoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tY2Jjb25kPC9zcGFuPjwvc2FtcD4gd2hlbiB0YXJnZXRpbmcgYSBjcHUgdGhhdCBzdXBwb3J0cyBzdWNoCitpbnN0cnVjdGlvbnMsIHN1Y2ggYXMgbmlhZ2FyYS00IGFuZCBsYXRlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcG9wYzwvY29kZT48ZHQ+PGNvZGU+LW1uby1wb3BjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcG9wYy0yMjA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRwb3BjLTIyMDkiPjwvYT5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcG9wYzwvc3Bhbj48L3NhbXA+LCBHQ0MgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIFVsdHJhU1BBUkMKK3BvcHVsYXRpb24gY291bnQgaW5zdHJ1Y3Rpb24uICBUaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXBvcGM8L3NwYW4+PC9zYW1wPgord2hlbiB0YXJnZXRpbmcgYSBjcHUgdGhhdCBzdXBwb3J0cyBzdWNoIGluc3RydWN0aW9ucywgc3VjaCBhcyBOaWFnYXJhLTIgYW5kCitsYXRlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZm1hZjwvY29kZT48ZHQ+PGNvZGU+LW1uby1mbWFmPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZm1hZi0yMjEwIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRmbWFmLTIyMTEiPjwvYT5XaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZm1hZjwvc3Bhbj48L3NhbXA+LCBHQ0MgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIFVsdHJhU1BBUkMKK0Z1c2VkIE11bHRpcGx5LUFkZCBGbG9hdGluZy1wb2ludCBleHRlbnNpb25zLiAgVGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mbWFmPC9zcGFuPjwvc2FtcD4KK3doZW4gdGFyZ2V0aW5nIGEgY3B1IHRoYXQgc3VwcG9ydHMgc3VjaCBpbnN0cnVjdGlvbnMsIHN1Y2ggYXMgTmlhZ2FyYS0zIGFuZAorbGF0ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZpeC1hdDY5N2Y8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1maXhfMDAyZGF0Njk3Zi0yMjEyIj48L2E+RW5hYmxlIHRoZSBkb2N1bWVudGVkIHdvcmthcm91bmQgZm9yIHRoZSBzaW5nbGUgZXJyYXR1bSBvZiB0aGUgQXRtZWwgQVQ2OTdGCitwcm9jZXNzb3IgKHdoaWNoIGNvcnJlc3BvbmRzIHRvIGVycmF0dW0gIzEzIG9mIHRoZSBBVDY5N0UgcHJvY2Vzc29yKS4gCis8L2RsPgorCisgPHA+VGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlCitvbiBTUEFSQy1WOSBwcm9jZXNzb3JzIGluIDY0LWJpdCBlbnZpcm9ubWVudHM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tMzI8L2NvZGU+PGR0Pjxjb2RlPi1tNjQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW0zMi0yMjEzIj48L2E+PGEgbmFtZT0iaW5kZXgtbTY0LTIyMTQiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciBhIDMyLWJpdCBvciA2NC1iaXQgZW52aXJvbm1lbnQuIAorVGhlIDMyLWJpdCBlbnZpcm9ubWVudCBzZXRzIGludCwgbG9uZyBhbmQgcG9pbnRlciB0byAzMiBiaXRzLiAKK1RoZSA2NC1iaXQgZW52aXJvbm1lbnQgc2V0cyBpbnQgdG8gMzIgYml0cyBhbmQgbG9uZyBhbmQgcG9pbnRlcgordG8gNjQgYml0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY21vZGVsPTwvY29kZT48dmFyPndoaWNoPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1jbW9kZWwtMjIxNSI+PC9hPlNldCB0aGUgY29kZSBtb2RlbCB0byBvbmUgb2YKKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1lZGxvdzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5UaGUgTWVkaXVtL0xvdyBjb2RlIG1vZGVsOiA2NC1iaXQgYWRkcmVzc2VzLCBwcm9ncmFtcworbXVzdCBiZSBsaW5rZWQgaW4gdGhlIGxvdyAzMiBiaXRzIG9mIG1lbW9yeS4gIFByb2dyYW1zIGNhbiBiZSBzdGF0aWNhbGx5CitvciBkeW5hbWljYWxseSBsaW5rZWQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWVkbWlkPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoZSBNZWRpdW0vTWlkZGxlIGNvZGUgbW9kZWw6IDY0LWJpdCBhZGRyZXNzZXMsIHByb2dyYW1zCittdXN0IGJlIGxpbmtlZCBpbiB0aGUgbG93IDQ0IGJpdHMgb2YgbWVtb3J5LCB0aGUgdGV4dCBhbmQgZGF0YSBzZWdtZW50cyBtdXN0CitiZSBsZXNzIHRoYW4gMkdCIGluIHNpemUgYW5kIHRoZSBkYXRhIHNlZ21lbnQgbXVzdCBiZSBsb2NhdGVkIHdpdGhpbiAyR0Igb2YKK3RoZSB0ZXh0IHNlZ21lbnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWVkYW55PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoZSBNZWRpdW0vQW55d2hlcmUgY29kZSBtb2RlbDogNjQtYml0IGFkZHJlc3NlcywgcHJvZ3JhbXMKK21heSBiZSBsaW5rZWQgYW55d2hlcmUgaW4gbWVtb3J5LCB0aGUgdGV4dCBhbmQgZGF0YSBzZWdtZW50cyBtdXN0IGJlIGxlc3MKK3RoYW4gMkdCIGluIHNpemUgYW5kIHRoZSBkYXRhIHNlZ21lbnQgbXVzdCBiZSBsb2NhdGVkIHdpdGhpbiAyR0Igb2YgdGhlCit0ZXh0IHNlZ21lbnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZW1ibWVkYW55PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoZSBNZWRpdW0vQW55d2hlcmUgY29kZSBtb2RlbCBmb3IgZW1iZWRkZWQgc3lzdGVtczoKKzY0LWJpdCBhZGRyZXNzZXMsIHRoZSB0ZXh0IGFuZCBkYXRhIHNlZ21lbnRzIG11c3QgYmUgbGVzcyB0aGFuIDJHQiBpbgorc2l6ZSwgYm90aCBzdGFydGluZyBhbnl3aGVyZSBpbiBtZW1vcnkgKGRldGVybWluZWQgYXQgbGluayB0aW1lKS4gIFRoZQorZ2xvYmFsIHJlZ2lzdGVyICVnNCBwb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIGRhdGEgc2VnbWVudC4gIFByb2dyYW1zCithcmUgc3RhdGljYWxseSBsaW5rZWQgYW5kIFBJQyBpcyBub3Qgc3VwcG9ydGVkLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW1lbW9yeS1tb2RlbD08L2NvZGU+PHZhcj5tZW0tbW9kZWw8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbW1lbW9yeV8wMDJkbW9kZWwtMjIxNiI+PC9hPlNldCB0aGUgbWVtb3J5IG1vZGVsIGluIGZvcmNlIG9uIHRoZSBwcm9jZXNzb3IgdG8gb25lIG9mCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5kZWZhdWx0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoZSBkZWZhdWx0IG1lbW9yeSBtb2RlbCBmb3IgdGhlIHByb2Nlc3NvciBhbmQgb3BlcmF0aW5nIHN5c3RlbS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ybW88L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+UmVsYXhlZCBNZW1vcnkgT3JkZXIKKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wc288L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+UGFydGlhbCBTdG9yZSBPcmRlcgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnRzbzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Ub3RhbCBTdG9yZSBPcmRlcgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNjPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlNlcXVlbnRpYWwgQ29uc2lzdGVuY3kKKzwvZGw+CisKKyAgICAgPHA+VGhlc2UgbWVtb3J5IG1vZGVscyBhcmUgZm9ybWFsbHkgZGVmaW5lZCBpbiBBcHBlbmRpeCBEIG9mIHRoZSBTcGFyYyBWOQorYXJjaGl0ZWN0dXJlIG1hbnVhbCwgYXMgc2V0IGluIHRoZSBwcm9jZXNzb3IncyA8Y29kZT5QU1RBVEUuTU08L2NvZGU+IGZpZWxkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdGFjay1iaWFzPC9jb2RlPjxkdD48Y29kZT4tbW5vLXN0YWNrLWJpYXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zdGFja18wMDJkYmlhcy0yMjE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzdGFja18wMDJkYmlhcy0yMjE4Ij48L2E+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXN0YWNrLWJpYXM8L3NwYW4+PC9zYW1wPiwgR0NDIGFzc3VtZXMgdGhhdCB0aGUgc3RhY2sgcG9pbnRlciwgYW5kCitmcmFtZSBwb2ludGVyIGlmIHByZXNlbnQsIGFyZSBvZmZzZXQgYnkgJm1pbnVzOzIwNDcgd2hpY2ggbXVzdCBiZSBhZGRlZCBiYWNrCit3aGVuIG1ha2luZyBzdGFjayBmcmFtZSByZWZlcmVuY2VzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpbiA2NC1iaXQgbW9kZS4gCitPdGhlcndpc2UsIGFzc3VtZSBubyBzdWNoIG9mZnNldCBpcyBwcmVzZW50LiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NQQVJDLVZJUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NQQVJDLVZJUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5NjQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU1BBUkMtVklTLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApAQCAtMCwwICsxLDE5MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U1BBUkMgVklTIEJ1aWx0LWluIEZ1bmN0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU0gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlNIIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNQVS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU1BVLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJTUFUgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNQQVJDLVZJUy1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlNQQVJDLVZJUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNQVS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU1BVLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlNQVSBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU0gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+U0ggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIj5UYXJnZXQgQnVpbHRpbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU2LjE5IFNQQVJDIFZJUyBCdWlsdC1pbiBGdW5jdGlvbnM8L2g0PgorCis8cD5HQ0Mgc3VwcG9ydHMgU0lNRCBvcGVyYXRpb25zIG9uIHRoZSBTUEFSQyB1c2luZyBib3RoIHRoZSBnZW5lcmljIHZlY3RvcgorZXh0ZW5zaW9ucyAoc2VlIDxhIGhyZWY9IlZlY3Rvci1FeHRlbnNpb25zLmh0bWwjVmVjdG9yLUV4dGVuc2lvbnMiPlZlY3RvciBFeHRlbnNpb25zPC9hPikgYXMgd2VsbCBhcyBidWlsdC1pbiBmdW5jdGlvbnMgZm9yCit0aGUgU1BBUkMgVmlzdWFsIEluc3RydWN0aW9uIFNldCAoVklTKS4gIFdoZW4geW91IHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12aXM8L3NwYW4+PC9zYW1wPgorc3dpdGNoLCB0aGUgVklTIGV4dGVuc2lvbiBpcyBleHBvc2VkIGFzIHRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZWRlZiBpbnQgdjFzaSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDQpKSk7CisgICAgIHR5cGVkZWYgaW50IHYyc2kgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICg4KSkpOworICAgICB0eXBlZGVmIHNob3J0IHY0aGkgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICg4KSkpOworICAgICB0eXBlZGVmIHNob3J0IHYyaGkgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICg0KSkpOworICAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdjhxaSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDgpKSk7CisgICAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciB2NHFpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoNCkpKTsKKyAgICAgCisgICAgIHZvaWQgX19idWlsdGluX3Zpc193cml0ZV9nc3IgKGludDY0X3QpOworICAgICBpbnQ2NF90IF9fYnVpbHRpbl92aXNfcmVhZF9nc3IgKHZvaWQpOworICAgICAKKyAgICAgdm9pZCAqIF9fYnVpbHRpbl92aXNfYWxpZ25hZGRyICh2b2lkICosIGxvbmcpOworICAgICB2b2lkICogX19idWlsdGluX3Zpc19hbGlnbmFkZHJsICh2b2lkICosIGxvbmcpOworICAgICBpbnQ2NF90IF9fYnVpbHRpbl92aXNfZmFsaWduZGF0YWRpIChpbnQ2NF90LCBpbnQ2NF90KTsKKyAgICAgdjJzaSBfX2J1aWx0aW5fdmlzX2ZhbGlnbmRhdGF2MnNpICh2MnNpLCB2MnNpKTsKKyAgICAgdjRoaSBfX2J1aWx0aW5fdmlzX2ZhbGlnbmRhdGF2NGhpICh2NHNpLCB2NHNpKTsKKyAgICAgdjhxaSBfX2J1aWx0aW5fdmlzX2ZhbGlnbmRhdGF2OHFpICh2OHFpLCB2OHFpKTsKKyAgICAgCisgICAgIHY0aGkgX19idWlsdGluX3Zpc19mZXhwYW5kICh2NHFpKTsKKyAgICAgCisgICAgIHY0aGkgX19idWlsdGluX3Zpc19mbXVsOHgxNiAodjRxaSwgdjRoaSk7CisgICAgIHY0aGkgX19idWlsdGluX3Zpc19mbXVsOHgxNmF1ICh2NHFpLCB2MmhpKTsKKyAgICAgdjRoaSBfX2J1aWx0aW5fdmlzX2ZtdWw4eDE2YWwgKHY0cWksIHYyaGkpOworICAgICB2NGhpIF9fYnVpbHRpbl92aXNfZm11bDhzdXgxNiAodjhxaSwgdjRoaSk7CisgICAgIHY0aGkgX19idWlsdGluX3Zpc19mbXVsOHVseDE2ICh2OHFpLCB2NGhpKTsKKyAgICAgdjJzaSBfX2J1aWx0aW5fdmlzX2ZtdWxkOHN1eDE2ICh2NHFpLCB2MmhpKTsKKyAgICAgdjJzaSBfX2J1aWx0aW5fdmlzX2ZtdWxkOHVseDE2ICh2NHFpLCB2MmhpKTsKKyAgICAgCisgICAgIHY0cWkgX19idWlsdGluX3Zpc19mcGFjazE2ICh2NGhpKTsKKyAgICAgdjhxaSBfX2J1aWx0aW5fdmlzX2ZwYWNrMzIgKHYyc2ksIHY4cWkpOworICAgICB2MmhpIF9fYnVpbHRpbl92aXNfZnBhY2tmaXggKHYyc2kpOworICAgICB2OHFpIF9fYnVpbHRpbl92aXNfZnBtZXJnZSAodjRxaSwgdjRxaSk7CisgICAgIAorICAgICBpbnQ2NF90IF9fYnVpbHRpbl92aXNfcGRpc3QgKHY4cWksIHY4cWksIGludDY0X3QpOworICAgICAKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX2VkZ2U4ICh2b2lkICosIHZvaWQgKik7CisgICAgIGxvbmcgX19idWlsdGluX3Zpc19lZGdlOGwgKHZvaWQgKiwgdm9pZCAqKTsKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX2VkZ2UxNiAodm9pZCAqLCB2b2lkICopOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZWRnZTE2bCAodm9pZCAqLCB2b2lkICopOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZWRnZTMyICh2b2lkICosIHZvaWQgKik7CisgICAgIGxvbmcgX19idWlsdGluX3Zpc19lZGdlMzJsICh2b2lkICosIHZvaWQgKik7CisgICAgIAorICAgICBsb25nIF9fYnVpbHRpbl92aXNfZmNtcGxlMTYgKHY0aGksIHY0aGkpOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZmNtcGxlMzIgKHYyc2ksIHYyc2kpOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZmNtcG5lMTYgKHY0aGksIHY0aGkpOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZmNtcG5lMzIgKHYyc2ksIHYyc2kpOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZmNtcGd0MTYgKHY0aGksIHY0aGkpOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZmNtcGd0MzIgKHYyc2ksIHYyc2kpOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZmNtcGVxMTYgKHY0aGksIHY0aGkpOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZmNtcGVxMzIgKHYyc2ksIHYyc2kpOworICAgICAKKyAgICAgdjRoaSBfX2J1aWx0aW5fdmlzX2ZwYWRkMTYgKHY0aGksIHY0aGkpOworICAgICB2MmhpIF9fYnVpbHRpbl92aXNfZnBhZGQxNnMgKHYyaGksIHYyaGkpOworICAgICB2MnNpIF9fYnVpbHRpbl92aXNfZnBhZGQzMiAodjJzaSwgdjJzaSk7CisgICAgIHYxc2kgX19idWlsdGluX3Zpc19mcGFkZDMycyAodjFzaSwgdjFzaSk7CisgICAgIHY0aGkgX19idWlsdGluX3Zpc19mcHN1YjE2ICh2NGhpLCB2NGhpKTsKKyAgICAgdjJoaSBfX2J1aWx0aW5fdmlzX2Zwc3ViMTZzICh2MmhpLCB2MmhpKTsKKyAgICAgdjJzaSBfX2J1aWx0aW5fdmlzX2Zwc3ViMzIgKHYyc2ksIHYyc2kpOworICAgICB2MXNpIF9fYnVpbHRpbl92aXNfZnBzdWIzMnMgKHYxc2ksIHYxc2kpOworICAgICAKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX2FycmF5OCAobG9uZywgbG9uZyk7CisgICAgIGxvbmcgX19idWlsdGluX3Zpc19hcnJheTE2IChsb25nLCBsb25nKTsKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX2FycmF5MzIgKGxvbmcsIGxvbmcpOworPC9wcmU+CisgPHA+V2hlbiB5b3UgdXNlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXZpczI8L3NwYW4+PC9zYW1wPiBzd2l0Y2gsIHRoZSBWSVMgdmVyc2lvbiAyLjAgYnVpbHQtaW4KK2Z1bmN0aW9ucyBhbHNvIGJlY29tZSBhdmFpbGFibGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBsb25nIF9fYnVpbHRpbl92aXNfYm1hc2sgKGxvbmcsIGxvbmcpOworICAgICBpbnQ2NF90IF9fYnVpbHRpbl92aXNfYnNodWZmbGVkaSAoaW50NjRfdCwgaW50NjRfdCk7CisgICAgIHYyc2kgX19idWlsdGluX3Zpc19ic2h1ZmZsZXYyc2kgKHYyc2ksIHYyc2kpOworICAgICB2NGhpIF9fYnVpbHRpbl92aXNfYnNodWZmbGV2MnNpICh2NGhpLCB2NGhpKTsKKyAgICAgdjhxaSBfX2J1aWx0aW5fdmlzX2JzaHVmZmxldjJzaSAodjhxaSwgdjhxaSk7CisgICAgIAorICAgICBsb25nIF9fYnVpbHRpbl92aXNfZWRnZThuICh2b2lkICosIHZvaWQgKik7CisgICAgIGxvbmcgX19idWlsdGluX3Zpc19lZGdlOGxuICh2b2lkICosIHZvaWQgKik7CisgICAgIGxvbmcgX19idWlsdGluX3Zpc19lZGdlMTZuICh2b2lkICosIHZvaWQgKik7CisgICAgIGxvbmcgX19idWlsdGluX3Zpc19lZGdlMTZsbiAodm9pZCAqLCB2b2lkICopOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZWRnZTMybiAodm9pZCAqLCB2b2lkICopOworICAgICBsb25nIF9fYnVpbHRpbl92aXNfZWRnZTMybG4gKHZvaWQgKiwgdm9pZCAqKTsKKzwvcHJlPgorIDxwPldoZW4geW91IHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12aXMzPC9zcGFuPjwvc2FtcD4gc3dpdGNoLCB0aGUgVklTIHZlcnNpb24gMy4wIGJ1aWx0LWluCitmdW5jdGlvbnMgYWxzbyBiZWNvbWUgYXZhaWxhYmxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdm9pZCBfX2J1aWx0aW5fdmlzX2NtYXNrOCAobG9uZyk7CisgICAgIHZvaWQgX19idWlsdGluX3Zpc19jbWFzazE2IChsb25nKTsKKyAgICAgdm9pZCBfX2J1aWx0aW5fdmlzX2NtYXNrMzIgKGxvbmcpOworICAgICAKKyAgICAgdjRoaSBfX2J1aWx0aW5fdmlzX2ZjaGtzbTE2ICh2NGhpLCB2NGhpKTsKKyAgICAgCisgICAgIHY0aGkgX19idWlsdGluX3Zpc19mc2xsMTYgKHY0aGksIHY0aGkpOworICAgICB2NGhpIF9fYnVpbHRpbl92aXNfZnNsYXMxNiAodjRoaSwgdjRoaSk7CisgICAgIHY0aGkgX19idWlsdGluX3Zpc19mc3JsMTYgKHY0aGksIHY0aGkpOworICAgICB2NGhpIF9fYnVpbHRpbl92aXNfZnNyYTE2ICh2NGhpLCB2NGhpKTsKKyAgICAgdjJzaSBfX2J1aWx0aW5fdmlzX2ZzbGwxNiAodjJzaSwgdjJzaSk7CisgICAgIHYyc2kgX19idWlsdGluX3Zpc19mc2xhczE2ICh2MnNpLCB2MnNpKTsKKyAgICAgdjJzaSBfX2J1aWx0aW5fdmlzX2ZzcmwxNiAodjJzaSwgdjJzaSk7CisgICAgIHYyc2kgX19idWlsdGluX3Zpc19mc3JhMTYgKHYyc2ksIHYyc2kpOworICAgICAKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX3BkaXN0biAodjhxaSwgdjhxaSk7CisgICAgIAorICAgICB2NGhpIF9fYnVpbHRpbl92aXNfZm1lYW4xNiAodjRoaSwgdjRoaSk7CisgICAgIAorICAgICBpbnQ2NF90IF9fYnVpbHRpbl92aXNfZnBhZGQ2NCAoaW50NjRfdCwgaW50NjRfdCk7CisgICAgIGludDY0X3QgX19idWlsdGluX3Zpc19mcHN1YjY0IChpbnQ2NF90LCBpbnQ2NF90KTsKKyAgICAgCisgICAgIHY0aGkgX19idWlsdGluX3Zpc19mcGFkZHMxNiAodjRoaSwgdjRoaSk7CisgICAgIHYyaGkgX19idWlsdGluX3Zpc19mcGFkZHMxNnMgKHYyaGksIHYyaGkpOworICAgICB2NGhpIF9fYnVpbHRpbl92aXNfZnBzdWJzMTYgKHY0aGksIHY0aGkpOworICAgICB2MmhpIF9fYnVpbHRpbl92aXNfZnBzdWJzMTZzICh2MmhpLCB2MmhpKTsKKyAgICAgdjJzaSBfX2J1aWx0aW5fdmlzX2ZwYWRkczMyICh2MnNpLCB2MnNpKTsKKyAgICAgdjFzaSBfX2J1aWx0aW5fdmlzX2ZwYWRkczMycyAodjFzaSwgdjFzaSk7CisgICAgIHYyc2kgX19idWlsdGluX3Zpc19mcHN1YnMzMiAodjJzaSwgdjJzaSk7CisgICAgIHYxc2kgX19idWlsdGluX3Zpc19mcHN1YnMzMnMgKHYxc2ksIHYxc2kpOworICAgICAKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX2Z1Y21wbGU4ICh2OHFpLCB2OHFpKTsKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX2Z1Y21wbmU4ICh2OHFpLCB2OHFpKTsKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX2Z1Y21wZ3Q4ICh2OHFpLCB2OHFpKTsKKyAgICAgbG9uZyBfX2J1aWx0aW5fdmlzX2Z1Y21wZXE4ICh2OHFpLCB2OHFpKTsKKyAgICAgCisgICAgIGZsb2F0IF9fYnVpbHRpbl92aXNfZmhhZGRzIChmbG9hdCwgZmxvYXQpOworICAgICBkb3VibGUgX19idWlsdGluX3Zpc19maGFkZGQgKGRvdWJsZSwgZG91YmxlKTsKKyAgICAgZmxvYXQgX19idWlsdGluX3Zpc19maHN1YnMgKGZsb2F0LCBmbG9hdCk7CisgICAgIGRvdWJsZSBfX2J1aWx0aW5fdmlzX2Zoc3ViZCAoZG91YmxlLCBkb3VibGUpOworICAgICBmbG9hdCBfX2J1aWx0aW5fdmlzX2ZuaGFkZHMgKGZsb2F0LCBmbG9hdCk7CisgICAgIGRvdWJsZSBfX2J1aWx0aW5fdmlzX2ZuaGFkZGQgKGRvdWJsZSwgZG91YmxlKTsKKyAgICAgCisgICAgIGludDY0X3QgX19idWlsdGluX3Zpc191bXVseGhpIChpbnQ2NF90LCBpbnQ2NF90KTsKKyAgICAgaW50NjRfdCBfX2J1aWx0aW5fdmlzX3htdWx4IChpbnQ2NF90LCBpbnQ2NF90KTsKKyAgICAgaW50NjRfdCBfX2J1aWx0aW5fdmlzX3htdWx4aGkgKGludDY0X3QsIGludDY0X3QpOworPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TUFUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TUFUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTJlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NQVS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNQVSBCdWlsdC1pbiBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIiB0aXRsZT0iVGFyZ2V0IEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU1BBUkMtVklTLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTUEFSQy1WSVMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlNQQVJDIFZJUyBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSS1DNlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1RJLUM2WC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iVEkgQzZYIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTUFUtQnVpbHQtaW4tRnVuY3Rpb25zIj48L2E+Cis8YSBuYW1lPSJTUFUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSS1DNlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1RJLUM2WC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5USSBDNlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU1BBUkMtVklTLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTUEFSQy1WSVMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+U1BBUkMgVklTIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni4yMCBTUFUgQnVpbHQtaW4gRnVuY3Rpb25zPC9oND4KKworPHA+R0NDIHByb3ZpZGVzIGV4dGVuc2lvbnMgZm9yIHRoZSBTUFUgcHJvY2Vzc29yIGFzIGRlc2NyaWJlZCBpbiB0aGUKK1NvbnkvVG9zaGliYS9JQk0gU1BVIExhbmd1YWdlIEV4dGVuc2lvbnMgU3BlY2lmaWNhdGlvbiwgd2hpY2ggY2FuIGJlCitmb3VuZCBhdCA8YSBocmVmPSJodHRwOi8vY2VsbC5zY2VpLmNvLmpwLyI+aHR0cDovL2NlbGwuc2NlaS5jby5qcC88L2E+IG9yCis8YSBocmVmPSJodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvcG93ZXIvY2VsbC8iPmh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9wb3dlci9jZWxsLzwvYT4uICBHQ0MncworaW1wbGVtZW50YXRpb24gZGlmZmVycyBpbiBzZXZlcmFsIHdheXMuCisKKyAgICAgPHVsPgorPGxpPlRoZSBvcHRpb25hbCBleHRlbnNpb24gb2Ygc3BlY2lmeWluZyB2ZWN0b3IgY29uc3RhbnRzIGluIHBhcmVudGhlc2VzIGlzCitub3Qgc3VwcG9ydGVkLgorCisgICAgIDxsaT5BIHZlY3RvciBpbml0aWFsaXplciByZXF1aXJlcyBubyBjYXN0IGlmIHRoZSB2ZWN0b3IgY29uc3RhbnQgaXMgb2YgdGhlCitzYW1lIHR5cGUgYXMgdGhlIHZhcmlhYmxlIGl0IGlzIGluaXRpYWxpemluZy4KKworICAgICA8bGk+SWYgPGNvZGU+c2lnbmVkPC9jb2RlPiBvciA8Y29kZT51bnNpZ25lZDwvY29kZT4gaXMgb21pdHRlZCwgdGhlIHNpZ25lZG5lc3Mgb2YgdGhlCit2ZWN0b3IgdHlwZSBpcyB0aGUgZGVmYXVsdCBzaWduZWRuZXNzIG9mIHRoZSBiYXNlIHR5cGUuICBUaGUgZGVmYXVsdAordmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgc28gYSBwb3J0YWJsZSBwcm9ncmFtIHNob3VsZAorYWx3YXlzIHNwZWNpZnkgdGhlIHNpZ25lZG5lc3MuCisKKyAgICAgPGxpPkJ5IGRlZmF1bHQsIHRoZSBrZXl3b3JkIDxjb2RlPl9fdmVjdG9yPC9jb2RlPiBpcyBhZGRlZC4gVGhlIG1hY3JvCis8Y29kZT52ZWN0b3I8L2NvZGU+IGlzIGRlZmluZWQgaW4gPGNvZGU+Jmx0O3NwdV9pbnRyaW5zaWNzLmgmZ3Q7PC9jb2RlPiBhbmQgY2FuIGJlCit1bmRlZmluZWQuCisKKyAgICAgPGxpPkdDQyBhbGxvd3MgdXNpbmcgYSA8Y29kZT50eXBlZGVmPC9jb2RlPiBuYW1lIGFzIHRoZSB0eXBlIHNwZWNpZmllciBmb3IgYQordmVjdG9yIHR5cGUuCisKKyAgICAgPGxpPkZvciBDLCBvdmVybG9hZGVkIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBtYWNyb3Mgc28gdGhlIGZvbGxvd2luZworZG9lcyBub3Qgd29yazoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIHNwdV9hZGQgKCh2ZWN0b3Igc2lnbmVkIGludCl7MSwgMiwgMywgNH0sIGZvbyk7Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5TaW5jZSA8Y29kZT5zcHVfYWRkPC9jb2RlPiBpcyBhIG1hY3JvLCB0aGUgdmVjdG9yIGNvbnN0YW50IGluIHRoZSBleGFtcGxlCitpcyB0cmVhdGVkIGFzIGZvdXIgc2VwYXJhdGUgYXJndW1lbnRzLiAgV3JhcCB0aGUgZW50aXJlIGFyZ3VtZW50IGluCitwYXJlbnRoZXNlcyBmb3IgdGhpcyB0byB3b3JrLgorCisgICAgIDxsaT5UaGUgZXh0ZW5kZWQgdmVyc2lvbiBvZiA8Y29kZT5fX2J1aWx0aW5fZXhwZWN0PC9jb2RlPiBpcyBub3Qgc3VwcG9ydGVkLgorCisgPC91bD4KKworIDxwPjxlbT5Ob3RlOjwvZW0+IE9ubHkgdGhlIGludGVyZmFjZSBkZXNjcmliZWQgaW4gdGhlIGFmb3JlbWVudGlvbmVkCitzcGVjaWZpY2F0aW9uIGlzIHN1cHBvcnRlZC4gSW50ZXJuYWxseSwgR0NDIHVzZXMgYnVpbHQtaW4gZnVuY3Rpb25zIHRvCitpbXBsZW1lbnQgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdHksIGJ1dCB0aGVzZSBhcmUgbm90IHN1cHBvcnRlZCBhbmQKK2FyZSBzdWJqZWN0IHRvIGNoYW5nZSB3aXRob3V0IG5vdGljZS4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU1BVLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU1BVLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmE4YTU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TUFUtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTQ5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TUFUgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyIgdGl0bGU9IlNQQVJDIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTeXN0ZW0tVi1PcHRpb25zLmh0bWwjU3lzdGVtLVYtT3B0aW9ucyIgdGl0bGU9IlN5c3RlbSBWIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1BVLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3lzdGVtLVYtT3B0aW9ucy5odG1sI1N5c3RlbS1WLU9wdGlvbnMiPlN5c3RlbSBWIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyI+U1BBUkMgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy40MSBTUFUgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNQVS1vcHRpb25zLTIyMTkiPjwvYT4KK1RoZXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIHRoZSBTUFU6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1td2Fybi1yZWxvYzwvY29kZT48ZHQ+PGNvZGU+LW1lcnJvci1yZWxvYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXdhcm5fMDAyZHJlbG9jLTIyMjAiPjwvYT48YSBuYW1lPSJpbmRleC1tZXJyb3JfMDAyZHJlbG9jLTIyMjEiPjwvYT4KK1RoZSBsb2FkZXIgZm9yIFNQVSBkb2VzIG5vdCBoYW5kbGUgZHluYW1pYyByZWxvY2F0aW9ucy4gIEJ5IGRlZmF1bHQsIEdDQworZ2l2ZXMgYW4gZXJyb3Igd2hlbiBpdCBnZW5lcmF0ZXMgY29kZSB0aGF0IHJlcXVpcmVzIGEgZHluYW1pYworcmVsb2NhdGlvbi4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tZXJyb3ItcmVsb2M8L3NwYW4+PC9zYW1wPiBkaXNhYmxlcyB0aGUgZXJyb3IsCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXdhcm4tcmVsb2M8L3NwYW4+PC9zYW1wPiBnZW5lcmF0ZXMgYSB3YXJuaW5nIGluc3RlYWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNhZmUtZG1hPC9jb2RlPjxkdD48Y29kZT4tbXVuc2FmZS1kbWE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zYWZlXzAwMmRkbWEtMjIyMiI+PC9hPjxhIG5hbWU9ImluZGV4LW11bnNhZmVfMDAyZGRtYS0yMjIzIj48L2E+CitJbnN0cnVjdGlvbnMgdGhhdCBpbml0aWF0ZSBvciB0ZXN0IGNvbXBsZXRpb24gb2YgRE1BIG11c3Qgbm90IGJlCityZW9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIGxvYWRzIGFuZCBzdG9yZXMgb2YgdGhlIG1lbW9yeSB0aGF0IGlzIGJlaW5nCithY2Nlc3NlZC4gCitXaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdW5zYWZlLWRtYTwvc3Bhbj48L3NhbXA+IHlvdSBtdXN0IHVzZSB0aGUgPGNvZGU+dm9sYXRpbGU8L2NvZGU+IGtleXdvcmQgdG8gcHJvdGVjdAorbWVtb3J5IGFjY2Vzc2VzLCBidXQgdGhhdCBjYW4gbGVhZCB0byBpbmVmZmljaWVudCBjb2RlIGluIHBsYWNlcyB3aGVyZSB0aGUKK21lbW9yeSBpcyBrbm93biB0byBub3QgY2hhbmdlLiAgUmF0aGVyIHRoYW4gbWFyayB0aGUgbWVtb3J5IGFzIHZvbGF0aWxlLAoreW91IGNhbiB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zYWZlLWRtYTwvc3Bhbj48L3NhbXA+IHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRvIHRyZWF0Cit0aGUgRE1BIGluc3RydWN0aW9ucyBhcyBwb3RlbnRpYWxseSBhZmZlY3RpbmcgYWxsIG1lbW9yeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYnJhbmNoLWhpbnRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYnJhbmNoXzAwMmRoaW50cy0yMjI0Ij48L2E+CitCeSBkZWZhdWx0LCBHQ0MgZ2VuZXJhdGVzIGEgYnJhbmNoIGhpbnQgaW5zdHJ1Y3Rpb24gdG8gYXZvaWQKK3BpcGVsaW5lIHN0YWxscyBmb3IgYWx3YXlzLXRha2VuIG9yIHByb2JhYmx5LXRha2VuIGJyYW5jaGVzLiAgQSBoaW50CitpcyBub3QgZ2VuZXJhdGVkIGNsb3NlciB0aGFuIDggaW5zdHJ1Y3Rpb25zIGF3YXkgZnJvbSBpdHMgYnJhbmNoLiAKK1RoZXJlIGlzIGxpdHRsZSByZWFzb24gdG8gZGlzYWJsZSB0aGVtLCBleGNlcHQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywKK29yIHRvIG1ha2UgYW4gb2JqZWN0IGEgbGl0dGxlIGJpdCBzbWFsbGVyLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zbWFsbC1tZW08L2NvZGU+PGR0Pjxjb2RlPi1tbGFyZ2UtbWVtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc21hbGxfMDAyZG1lbS0yMjI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWxhcmdlXzAwMmRtZW0tMjIyNiI+PC9hPgorQnkgZGVmYXVsdCwgR0NDIGdlbmVyYXRlcyBjb2RlIGFzc3VtaW5nIHRoYXQgYWRkcmVzc2VzIGFyZSBuZXZlciBsYXJnZXIKK3RoYW4gMTggYml0cy4gIFdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1sYXJnZS1tZW08L3NwYW4+PC9zYW1wPiBjb2RlIGlzIGdlbmVyYXRlZCB0aGF0IGFzc3VtZXMKK2EgZnVsbCAzMi1iaXQgYWRkcmVzcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3RkbWFpbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXN0ZG1haW4tMjIyNyI+PC9hPgorQnkgZGVmYXVsdCwgR0NDIGxpbmtzIGFnYWluc3Qgc3RhcnR1cCBjb2RlIHRoYXQgYXNzdW1lcyB0aGUgU1BVLXN0eWxlCittYWluIGZ1bmN0aW9uIGludGVyZmFjZSAod2hpY2ggaGFzIGFuIHVuY29udmVudGlvbmFsIHBhcmFtZXRlciBsaXN0KS4gCitXaXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3RkbWFpbjwvc3Bhbj48L3NhbXA+LCBHQ0MgbGlua3MgeW91ciBwcm9ncmFtIGFnYWluc3Qgc3RhcnR1cAorY29kZSB0aGF0IGFzc3VtZXMgYSBDOTktc3R5bGUgaW50ZXJmYWNlIHRvIDxjb2RlPm1haW48L2NvZGU+LCBpbmNsdWRpbmcgYQorbG9jYWwgY29weSBvZiA8Y29kZT5hcmd2PC9jb2RlPiBzdHJpbmdzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1maXhlZC1yYW5nZT08L2NvZGU+PHZhcj5yZWdpc3Rlci1yYW5nZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tZml4ZWRfMDAyZHJhbmdlLTIyMjgiPjwvYT5HZW5lcmF0ZSBjb2RlIHRyZWF0aW5nIHRoZSBnaXZlbiByZWdpc3RlciByYW5nZSBhcyBmaXhlZCByZWdpc3RlcnMuIAorQSBmaXhlZCByZWdpc3RlciBpcyBvbmUgdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbm5vdCB1c2UuICBUaGlzIGlzCit1c2VmdWwgd2hlbiBjb21waWxpbmcga2VybmVsIGNvZGUuICBBIHJlZ2lzdGVyIHJhbmdlIGlzIHNwZWNpZmllZCBhcwordHdvIHJlZ2lzdGVycyBzZXBhcmF0ZWQgYnkgYSBkYXNoLiAgTXVsdGlwbGUgcmVnaXN0ZXIgcmFuZ2VzIGNhbiBiZQorc3BlY2lmaWVkIHNlcGFyYXRlZCBieSBhIGNvbW1hLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1lYTMyPC9jb2RlPjxkdD48Y29kZT4tbWVhNjQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1lYTMyLTIyMjkiPjwvYT48YSBuYW1lPSJpbmRleC1tZWE2NC0yMjMwIj48L2E+Q29tcGlsZSBjb2RlIGFzc3VtaW5nIHRoYXQgcG9pbnRlcnMgdG8gdGhlIFBQVSBhZGRyZXNzIHNwYWNlIGFjY2Vzc2VkCit2aWEgdGhlIDxjb2RlPl9fZWE8L2NvZGU+IG5hbWVkIGFkZHJlc3Mgc3BhY2UgcXVhbGlmaWVyIGFyZSBlaXRoZXIgMzIgb3IgNjQKK2JpdHMgd2lkZS4gIFRoZSBkZWZhdWx0IGlzIDMyIGJpdHMuICBBcyB0aGlzIGlzIGFuIEFCSS1jaGFuZ2luZyBvcHRpb24sCithbGwgb2JqZWN0IGNvZGUgaW4gYW4gZXhlY3V0YWJsZSBtdXN0IGJlIGNvbXBpbGVkIHdpdGggdGhlIHNhbWUgc2V0dGluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWRkcmVzcy1zcGFjZS1jb252ZXJzaW9uPC9jb2RlPjxkdD48Y29kZT4tbW5vLWFkZHJlc3Mtc3BhY2UtY29udmVyc2lvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFkZHJlc3NfMDAyZHNwYWNlXzAwMmRjb252ZXJzaW9uLTIyMzEiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGFkZHJlc3NfMDAyZHNwYWNlXzAwMmRjb252ZXJzaW9uLTIyMzIiPjwvYT5BbGxvdy9kaXNhbGxvdyB0cmVhdGluZyB0aGUgPGNvZGU+X19lYTwvY29kZT4gYWRkcmVzcyBzcGFjZSBhcyBzdXBlcnNldAorb2YgdGhlIGdlbmVyaWMgYWRkcmVzcyBzcGFjZS4gIFRoaXMgZW5hYmxlcyBleHBsaWNpdCB0eXBlIGNhc3RzCitiZXR3ZWVuIDxjb2RlPl9fZWE8L2NvZGU+IGFuZCBnZW5lcmljIHBvaW50ZXIgYXMgd2VsbCBhcyBpbXBsaWNpdAorY29udmVyc2lvbnMgb2YgZ2VuZXJpYyBwb2ludGVycyB0byA8Y29kZT5fX2VhPC9jb2RlPiBwb2ludGVycy4gIFRoZQorZGVmYXVsdCBpcyB0byBhbGxvdyBhZGRyZXNzIHNwYWNlIHBvaW50ZXIgY29udmVyc2lvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNhY2hlLXNpemU9PC9jb2RlPjx2YXI+Y2FjaGUtc2l6ZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY2FjaGVfMDAyZHNpemUtMjIzMyI+PC9hPlRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSB2ZXJzaW9uIG9mIGxpYmdjYyB0aGF0IHRoZSBjb21waWxlciBsaW5rcyB0byBhbgorZXhlY3V0YWJsZSBhbmQgc2VsZWN0cyBhIHNvZnR3YXJlLW1hbmFnZWQgY2FjaGUgZm9yIGFjY2Vzc2luZyB2YXJpYWJsZXMKK2luIHRoZSA8Y29kZT5fX2VhPC9jb2RlPiBhZGRyZXNzIHNwYWNlIHdpdGggYSBwYXJ0aWN1bGFyIGNhY2hlIHNpemUuICBQb3NzaWJsZQorb3B0aW9ucyBmb3IgPHZhcj5jYWNoZS1zaXplPC92YXI+IGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MzI8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NjQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjEyODwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSBkZWZhdWx0IGNhY2hlIHNpemUgaXMgNjRLQi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYXRvbWljLXVwZGF0ZXM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tYXRvbWljLXVwZGF0ZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hdG9taWNfMDAyZHVwZGF0ZXMtMjIzNCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYXRvbWljXzAwMmR1cGRhdGVzLTIyMzUiPjwvYT5UaGlzIG9wdGlvbiBjb250cm9scyB0aGUgdmVyc2lvbiBvZiBsaWJnY2MgdGhhdCB0aGUgY29tcGlsZXIgbGlua3MgdG8gYW4KK2V4ZWN1dGFibGUgYW5kIHNlbGVjdHMgd2hldGhlciBhdG9taWMgdXBkYXRlcyB0byB0aGUgc29mdHdhcmUtbWFuYWdlZAorY2FjaGUgb2YgUFBVLXNpZGUgdmFyaWFibGVzIGFyZSB1c2VkLiAgSWYgeW91IHVzZSBhdG9taWMgdXBkYXRlcywgY2hhbmdlcwordG8gYSBQUFUgdmFyaWFibGUgZnJvbSBTUFUgY29kZSB1c2luZyB0aGUgPGNvZGU+X19lYTwvY29kZT4gbmFtZWQgYWRkcmVzcyBzcGFjZQorcXVhbGlmaWVyIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCBjaGFuZ2VzIHRvIG90aGVyIFBQVSB2YXJpYWJsZXMgcmVzaWRpbmcKK2luIHRoZSBzYW1lIGNhY2hlIGxpbmUgZnJvbSBQUFUgY29kZS4gIElmIHlvdSBkbyBub3QgdXNlIGF0b21pYyB1cGRhdGVzLAorc3VjaCBpbnRlcmZlcmVuY2UgbWF5IG9jY3VyOyBob3dldmVyLCB3cml0aW5nIGJhY2sgY2FjaGUgbGluZXMgaXMKK21vcmUgZWZmaWNpZW50LiAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gdXNlIGF0b21pYyB1cGRhdGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1kdWFsLW5vcHM8L2NvZGU+PGR0Pjxjb2RlPi1tZHVhbC1ub3BzPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWR1YWxfMDAyZG5vcHMtMjIzNiI+PC9hPkJ5IGRlZmF1bHQsIEdDQyBpbnNlcnRzIG5vcHMgdG8gaW5jcmVhc2UgZHVhbCBpc3N1ZSB3aGVuIGl0IGV4cGVjdHMKK2l0IHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlLiAgPHZhcj5uPC92YXI+IGNhbiBiZSBhIHZhbHVlIGZyb20gMCB0byAxMC4gIEEKK3NtYWxsZXIgPHZhcj5uPC92YXI+IGluc2VydHMgZmV3ZXIgbm9wcy4gIDEwIGlzIHRoZSBkZWZhdWx0LCAwIGlzIHRoZQorc2FtZSBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWR1YWwtbm9wczwvc3Bhbj48L3NhbXA+LiAgRGlzYWJsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tT3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taGludC1tYXgtbm9wcz08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1oaW50XzAwMmRtYXhfMDAyZG5vcHMtMjIzNyI+PC9hPk1heGltdW0gbnVtYmVyIG9mIG5vcHMgdG8gaW5zZXJ0IGZvciBhIGJyYW5jaCBoaW50LiAgQSBicmFuY2ggaGludCBtdXN0CitiZSBhdCBsZWFzdCA4IGluc3RydWN0aW9ucyBhd2F5IGZyb20gdGhlIGJyYW5jaCBpdCBpcyBhZmZlY3RpbmcuICBHQ0MKK2luc2VydHMgdXAgdG8gPHZhcj5uPC92YXI+IG5vcHMgdG8gZW5mb3JjZSB0aGlzLCBvdGhlcndpc2UgaXQgZG9lcyBub3QKK2dlbmVyYXRlIHRoZSBicmFuY2ggaGludC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taGludC1tYXgtZGlzdGFuY2U9PC9jb2RlPjx2YXI+bjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1taGludF8wMDJkbWF4XzAwMmRkaXN0YW5jZS0yMjM4Ij48L2E+VGhlIGVuY29kaW5nIG9mIHRoZSBicmFuY2ggaGludCBpbnN0cnVjdGlvbiBsaW1pdHMgdGhlIGhpbnQgdG8gYmUgd2l0aGluCisyNTYgaW5zdHJ1Y3Rpb25zIG9mIHRoZSBicmFuY2ggaXQgaXMgYWZmZWN0aW5nLiAgQnkgZGVmYXVsdCwgR0NDIG1ha2VzCitzdXJlIGl0IGlzIHdpdGhpbiAxMjUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNhZmUtaGludHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zYWZlXzAwMmRoaW50cy0yMjM5Ij48L2E+V29yayBhcm91bmQgYSBoYXJkd2FyZSBidWcgdGhhdCBjYXVzZXMgdGhlIFNQVSB0byBzdGFsbCBpbmRlZmluaXRlbHkuIAorQnkgZGVmYXVsdCwgR0NDIGluc2VydHMgdGhlIDxjb2RlPmhicnA8L2NvZGU+IGluc3RydWN0aW9uIHRvIG1ha2Ugc3VyZQordGhpcyBzdGFsbCB3b24ndCBoYXBwZW4uCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TUFUtVHlwZS1BdHRyaWJ1dGVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NQVS1UeXBlLUF0dHJpYnV0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y0ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TUFUtVHlwZS1BdHRyaWJ1dGVzLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPVR5cGUtQXR0cmlidXRlcy5odG1sI1NQVSUyMFR5cGUlMjBBdHRyaWJ1dGVzIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmVjNWEzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TLzM5MCBTeXN0ZW0geiBCdWlsdC1pbiBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIiB0aXRsZT0iVGFyZ2V0IEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1JYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJSWCBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU0gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlNIIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTJTJmMzkwLVN5c3RlbS16LUJ1aWx0LWluLUZ1bmN0aW9ucyI+PC9hPgorPGEgbmFtZT0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU0gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NILUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlNIIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5SWCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPlRhcmdldCBCdWlsdGluczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTYuMTcgUy8zOTAgU3lzdGVtIHogQnVpbHQtaW4gRnVuY3Rpb25zPC9oND4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl90YmVnaW48L2I+ICg8dmFyPnZvaWQqPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRiZWdpbi0zNDM3Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+R2VuZXJhdGVzIHRoZSA8Y29kZT50YmVnaW48L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gc3RhcnRpbmcgYQorbm9uLWNvbnN0cmFpbnQgaGFyZHdhcmUgdHJhbnNhY3Rpb24uICBJZiB0aGUgcGFyYW1ldGVyIGlzIG5vbi1OVUxMIHRoZQorbWVtb3J5IGFyZWEgaXMgdXNlZCB0byBzdG9yZSB0aGUgdHJhbnNhY3Rpb24gZGlhZ25vc3RpYyBidWZmZXIgYW5kCit3aWxsIGJlIHBhc3NlZCBhcyBmaXJzdCBvcGVyYW5kIHRvIDxjb2RlPnRiZWdpbjwvY29kZT4uICBUaGlzIGJ1ZmZlciBjYW4gYmUKK2RlZmluZWQgdXNpbmcgdGhlIDxjb2RlPnN0cnVjdCBfX2h0bV90ZGI8L2NvZGU+IEMgc3RydWN0IGRlZmluZWQgaW4KKzxjb2RlPmh0bWludHJpbi5oPC9jb2RlPiBhbmQgbXVzdCByZXNpZGUgb24gYSBkb3VibGUtd29yZCBib3VuZGFyeS4gIFRoZQorc2Vjb25kIHRiZWdpbiBvcGVyYW5kIGlzIHNldCB0byA8Y29kZT4weGZmMGM8L2NvZGU+LiBUaGlzIGVuYWJsZXMKK3NhdmUvcmVzdG9yZSBvZiBhbGwgR1BScyBhbmQgZGlzYWJsZXMgYWJvcnRzIGZvciBGUFIgYW5kIEFSCittYW5pcHVsYXRpb25zIGluc2lkZSB0aGUgdHJhbnNhY3Rpb24gYm9keS4gIFRoZSBjb25kaXRpb24gY29kZSBzZXQgYnkKK3RoZSB0YmVnaW4gaW5zdHJ1Y3Rpb24gaXMgcmV0dXJuZWQgYXMgaW50ZWdlciB2YWx1ZS4gIFRoZSB0YmVnaW4KK2luc3RydWN0aW9uIGJ5IGRlZmluaXRpb24gb3ZlcndyaXRlcyB0aGUgY29udGVudCBvZiBhbGwgRlBScy4gIFRoZQorY29tcGlsZXIgd2lsbCBnZW5lcmF0ZSBjb2RlIHdoaWNoIHNhdmVzIGFuZCByZXN0b3JlcyB0aGUgRlBScy4gIEZvcgorc29mdC1mbG9hdCBjb2RlIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZWQgdGhlIDxjb2RlPipfbm9mbG9hdDwvY29kZT4KK3ZhcmlhbnQuICBJbiBvcmRlciB0byBwcmV2ZW50IGEgVERCIGZyb20gYmVpbmcgd3JpdHRlbiBpdCBpcyByZXF1aXJlZAordG8gcGFzcyBhbiBjb25zdGFudCB6ZXJvIHZhbHVlIGFzIHBhcmFtZXRlci4gIFBhc3NpbmcgdGhlIHplcm8gdmFsdWUKK3Rocm91Z2ggYSB2YXJpYWJsZSBpcyBub3Qgc3VmZmljaWVudC4gIEFsdGhvdWdoIG1vZGlmaWNhdGlvbnMgb2YKK2FjY2VzcyByZWdpc3RlcnMgaW5zaWRlIHRoZSB0cmFuc2FjdGlvbiB3aWxsIG5vdCB0cmlnZ2VyIGFuCit0cmFuc2FjdGlvbiBhYm9ydCBpdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFjdHVhbGx5IG1vZGlmeSB0aGVtLiAgQWNjZXNzCityZWdpc3RlcnMgZG8gbm90IGdldCBzYXZlZCB3aGVuIGVudGVyaW5nIGEgdHJhbnNhY3Rpb24uIFRoZXkgd2lsbCBoYXZlCit1bmRlZmluZWQgc3RhdGUgd2hlbiByZWFjaGluZyB0aGUgYWJvcnQgY29kZS4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCisgPHA+TWFjcm9zIGZvciB0aGUgcG9zc2libGUgcmV0dXJuIGNvZGVzIG9mIHRiZWdpbiBhcmUgZGVmaW5lZCBpbiB0aGUKKzxjb2RlPmh0bWludHJpbi5oPC9jb2RlPiBoZWFkZXIgZmlsZToKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+X0hUTV9UQkVHSU5fU1RBUlRFRDwvY29kZT48ZGQ+PGNvZGU+dGJlZ2luPC9jb2RlPiBoYXMgYmVlbiBleGVjdXRlZCBhcyBwYXJ0IG9mIG5vcm1hbCBwcm9jZXNzaW5nLiAgVGhlCit0cmFuc2FjdGlvbiBib2R5IGlzIHN1cHBvc2VkIHRvIGJlIGV4ZWN1dGVkLiAKKzxicj48ZHQ+PGNvZGU+X0hUTV9UQkVHSU5fSU5ERVRFUk1JTkFURTwvY29kZT48ZGQ+VGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkIGR1ZSB0byBhbiBpbmRldGVybWluYXRlIGNvbmRpdGlvbiB3aGljaAorbWlnaHQgYmUgcGVyc2lzdGVudC4gCis8YnI+PGR0Pjxjb2RlPl9IVE1fVEJFR0lOX1RSQU5TSUVOVDwvY29kZT48ZGQ+VGhlIHRyYW5zYWN0aW9uIGFib3J0ZWQgZHVlIHRvIGEgdHJhbnNpZW50IGZhaWx1cmUuICBUaGUgdHJhbnNhY3Rpb24KK3Nob3VsZCBiZSByZS1leGVjdXRlZCBpbiB0aGF0IGNhc2UuIAorPGJyPjxkdD48Y29kZT5fSFRNX1RCRUdJTl9QRVJTSVNURU5UPC9jb2RlPjxkZD5UaGUgdHJhbnNhY3Rpb24gYWJvcnRlZCBkdWUgdG8gYSBwZXJzaXN0ZW50IGZhaWx1cmUuICBSZS1leGVjdXRpb24KK3VuZGVyIHNhbWUgY2lyY3Vtc3RhbmNlcyB3aWxsIG5vdCBiZSBwcm9kdWN0aXZlLiAKKzwvZGw+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgTWFjcm86IDxiPl9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFPC9iPjx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZIVE1fMDA1ZkZJUlNUXzAwNWZVU0VSXzAwNWZBQk9SVF8wMDVmQ09ERS0zNDM4Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhlIDxjb2RlPl9IVE1fRklSU1RfVVNFUl9BQk9SVF9DT0RFPC9jb2RlPiBkZWZpbmVkIGluIDxjb2RlPmh0bWludHJpbi5oPC9jb2RlPgorc3BlY2lmaWVzIHRoZSBmaXJzdCBhYm9ydCBjb2RlIHdoaWNoIGNhbiBiZSB1c2VkIGZvcgorPGNvZGU+X19idWlsdGluX3RhYm9ydDwvY29kZT4uICBWYWx1ZXMgYmVsb3cgdGhpcyB0aHJlc2hvbGQgYXJlIHJlc2VydmVkIGZvcgorbWFjaGluZSB1c2UuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBEYXRhIHR5cGU6IDxiPnN0cnVjdCBfX2h0bV90ZGI8L2I+PHZhcj48YSBuYW1lPSJpbmRleC1zdHJ1Y3QtXzAwNWZfMDA1Zmh0bV8wMDVmdGRiLTM0MzkiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGUgPGNvZGU+c3RydWN0IF9faHRtX3RkYjwvY29kZT4gZGVmaW5lZCBpbiA8Y29kZT5odG1pbnRyaW4uaDwvY29kZT4gZGVzY3JpYmVzCit0aGUgc3RydWN0dXJlIG9mIHRoZSB0cmFuc2FjdGlvbiBkaWFnbm9zdGljIGJsb2NrIGFzIHNwZWNpZmllZCBpbiB0aGUKK1ByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIG1hbnVhbCBjaGFwdGVyIDUtOTEuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl90YmVnaW5fbm9mbG9hdDwvYj4gKDx2YXI+dm9pZCo8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdGJlZ2luXzAwNWZub2Zsb2F0LTM0NDAiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5TYW1lIGFzIDxjb2RlPl9fYnVpbHRpbl90YmVnaW48L2NvZGU+IGJ1dCB3aXRob3V0IEZQUiBzYXZlcyBhbmQgcmVzdG9yZXMuIAorVXNpbmcgdGhpcyB2YXJpYW50IGluIGNvZGUgbWFraW5nIHVzZSBvZiBGUFJzIHdpbGwgbGVhdmUgdGhlIEZQUnMgaW4KK3VuZGVmaW5lZCBzdGF0ZSB3aGVuIGVudGVyaW5nIHRoZSB0cmFuc2FjdGlvbiBhYm9ydCBoYW5kbGVyIGNvZGUuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl90YmVnaW5fcmV0cnk8L2I+ICg8dmFyPnZvaWQqLCBpbnQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdGJlZ2luXzAwNWZyZXRyeS0zNDQxIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+SW4gYWRkaXRpb24gdG8gPGNvZGU+X19idWlsdGluX3RiZWdpbjwvY29kZT4gYSBsb29wIGZvciB0cmFuc2llbnQgZmFpbHVyZXMKK2lzIGdlbmVyYXRlZC4gIElmIHRiZWdpbiByZXR1cm5zIGEgY29uZGl0aW9uIGNvZGUgb2YgMiB0aGUgdHJhbnNhY3Rpb24KK3dpbGwgYmUgcmV0cmllZCBhcyBvZnRlbiBhcyBzcGVjaWZpZWQgaW4gdGhlIHNlY29uZCBhcmd1bWVudC4gIFRoZQorcGVyZm9ybSBwcm9jZXNzb3IgYXNzaXN0IGluc3RydWN0aW9uIGlzIHVzZWQgdG8gdGVsbCB0aGUgQ1BVIGFib3V0IHRoZQorbnVtYmVyIG9mIGZhaWxzIHNvIGZhci4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBpbnQgPGI+X19idWlsdGluX3RiZWdpbl9yZXRyeV9ub2Zsb2F0PC9iPiAoPHZhcj52b2lkKiwgaW50PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnRiZWdpbl8wMDVmcmV0cnlfMDA1Zm5vZmxvYXQtMzQ0MiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlNhbWUgYXMgPGNvZGU+X19idWlsdGluX3RiZWdpbl9yZXRyeTwvY29kZT4gYnV0IHdpdGhvdXQgRlBSIHNhdmVzIGFuZAorcmVzdG9yZXMuICBVc2luZyB0aGlzIHZhcmlhbnQgaW4gY29kZSBtYWtpbmcgdXNlIG9mIEZQUnMgd2lsbCBsZWF2ZQordGhlIEZQUnMgaW4gdW5kZWZpbmVkIHN0YXRlIHdoZW4gZW50ZXJpbmcgdGhlIHRyYW5zYWN0aW9uIGFib3J0CitoYW5kbGVyIGNvZGUuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2J1aWx0aW5fdGJlZ2luYzwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZ0YmVnaW5jLTM0NDMiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5HZW5lcmF0ZXMgdGhlIDxjb2RlPnRiZWdpbmM8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gc3RhcnRpbmcgYSBjb25zdHJhaW50CitoYXJkd2FyZSB0cmFuc2FjdGlvbi4gIFRoZSBzZWNvbmQgb3BlcmFuZCBpcyBzZXQgdG8gPGNvZGU+MHhmZjA4PC9jb2RlPi4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBpbnQgPGI+X19idWlsdGluX3RlbmQ8L2I+ICg8dmFyPnZvaWQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmdGVuZC0zNDQ0Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+R2VuZXJhdGVzIHRoZSA8Y29kZT50ZW5kPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIGZpbmlzaGluZyBhIHRyYW5zYWN0aW9uCithbmQgbWFraW5nIHRoZSBjaGFuZ2VzIHZpc2libGUgdG8gb3RoZXIgdGhyZWFkcy4gIFRoZSBjb25kaXRpb24gY29kZQorZ2VuZXJhdGVkIGJ5IHRlbmQgaXMgcmV0dXJuZWQgYXMgaW50ZWdlciB2YWx1ZS4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYnVpbHRpbl90YWJvcnQ8L2I+ICg8dmFyPmludDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZ0YWJvcnQtMzQ0NSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+dGFib3J0PC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIHdpdGggdGhlIHNwZWNpZmllZAorYWJvcnQgY29kZS4gIEFib3J0IGNvZGVzIGZyb20gMCB0aHJvdWdoIDI1NSBhcmUgcmVzZXJ2ZWQgYW5kIHdpbGwKK3Jlc3VsdCBpbiBhbiBlcnJvciBtZXNzYWdlLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX3R4X2Fzc2lzdDwvYj4gKDx2YXI+aW50PC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZnR4XzAwNWZhc3Npc3QtMzQ0NiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+cHBhIHJYLHJZLDE8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24uICBXaGVyZSB0aGUKK2ludGVnZXIgcGFyYW1ldGVyIGlzIGxvYWRlZCBpbnRvIHJYIGFuZCBhIHZhbHVlIG9mIHplcm8gaXMgbG9hZGVkIGludG8KK3JZLiAgVGhlIGludGVnZXIgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZQordHJhbnNhY3Rpb24gcmVwZWF0ZWRseSBhYm9ydGVkLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGludCA8Yj5fX2J1aWx0aW5fdHhfbmVzdGluZ19kZXB0aDwvYj4gKDx2YXI+dm9pZDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZ0eF8wMDVmbmVzdGluZ18wMDVmZGVwdGgtMzQ0NyI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkdlbmVyYXRlcyB0aGUgPGNvZGU+ZXRuZDwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbi4gIFRoZSBjdXJyZW50IG5lc3RpbmcKK2RlcHRoIGlzIHJldHVybmVkIGFzIGludGVnZXIgdmFsdWUuICBGb3IgYSBuZXN0aW5nIGRlcHRoIG9mIDAgdGhlIGNvZGUKK2lzIG5vdCBleGVjdXRlZCBhcyBwYXJ0IG9mIGFuIHRyYW5zYWN0aW9uLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IHZvaWQgPGI+X19idWlsdGluX25vbl90eF9zdG9yZTwvYj4gKDx2YXI+dWludDY0X3QgKiwgdWludDY0X3Q8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmbm9uXzAwNWZ0eF8wMDVmc3RvcmUtMzQ0OCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPgorICAgICAgPHA+R2VuZXJhdGVzIHRoZSA8Y29kZT5udHN0ZzwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbi4gIFRoZSBzZWNvbmQgYXJndW1lbnQKK2lzIHdyaXR0ZW4gdG8gdGhlIGZpcnN0IGFyZ3VtZW50cyBsb2NhdGlvbi4gIFRoZSBzdG9yZSBvcGVyYXRpb24gd2lsbAorbm90IGJlIHJvbGxlZC1iYWNrIGluIGNhc2Ugb2YgYW4gdHJhbnNhY3Rpb24gYWJvcnQuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWNjMzkyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIiB0aXRsZT0iUlggT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNTY29yZS1PcHRpb25zIiB0aXRsZT0iU2NvcmUgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTJTJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNTY29yZS1PcHRpb25zIj5TY29yZSBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUlgtT3B0aW9ucy5odG1sI1JYLU9wdGlvbnMiPlJYIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMzYgUy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLTIwNzciPjwvYT4KK1RoZXNlIGFyZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGRlZmluZWQgZm9yIHRoZSBTLzM5MCBhbmQgelNlcmllcyBhcmNoaXRlY3R1cmUuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1taGFyZC1mbG9hdDwvY29kZT48ZHQ+PGNvZGU+LW1zb2Z0LWZsb2F0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taGFyZF8wMDJkZmxvYXQtMjA3OCI+PC9hPjxhIG5hbWU9ImluZGV4LW1zb2Z0XzAwMmRmbG9hdC0yMDc5Ij48L2E+VXNlIChkbyBub3QgdXNlKSB0aGUgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGFuZCByZWdpc3RlcnMKK2ZvciBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLiAgV2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNvZnQtZmxvYXQ8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQsCitmdW5jdGlvbnMgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYy5hPC9zcGFuPjwvc2FtcD4gYXJlIHVzZWQgdG8gcGVyZm9ybSBmbG9hdGluZy1wb2ludAorb3BlcmF0aW9ucy4gIFdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1oYXJkLWZsb2F0PC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLCB0aGUgY29tcGlsZXIKK2dlbmVyYXRlcyBJRUVFIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWhhcmQtZGZwPC9jb2RlPjxkdD48Y29kZT4tbW5vLWhhcmQtZGZwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taGFyZF8wMDJkZGZwLTIwODAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGhhcmRfMDAyZGRmcC0yMDgxIj48L2E+VXNlIChkbyBub3QgdXNlKSB0aGUgaGFyZHdhcmUgZGVjaW1hbC1mbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMgZm9yCitkZWNpbWFsLWZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuICBXaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8taGFyZC1kZnA8L3NwYW4+PC9zYW1wPiBpcworc3BlY2lmaWVkLCBmdW5jdGlvbnMgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYy5hPC9zcGFuPjwvc2FtcD4gYXJlIHVzZWQgdG8gcGVyZm9ybQorZGVjaW1hbC1mbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLiAgV2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWhhcmQtZGZwPC9zcGFuPjwvc2FtcD4gaXMKK3NwZWNpZmllZCwgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBkZWNpbWFsLWZsb2F0aW5nLXBvaW50IGhhcmR3YXJlCitpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9ejktZWM8L3NwYW4+PC9zYW1wPiBvciBoaWdoZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmctZG91YmxlLTY0PC9jb2RlPjxkdD48Y29kZT4tbWxvbmctZG91YmxlLTEyODwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxvbmdfMDAyZGRvdWJsZV8wMDJkNjQtMjA4MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1sb25nXzAwMmRkb3VibGVfMDAyZDEyOC0yMDgzIj48L2E+VGhlc2Ugc3dpdGNoZXMgY29udHJvbCB0aGUgc2l6ZSBvZiA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4gdHlwZS4gQSBzaXplCitvZiA2NCBiaXRzIG1ha2VzIHRoZSA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4gdHlwZSBlcXVpdmFsZW50IHRvIHRoZSA8Y29kZT5kb3VibGU8L2NvZGU+Cit0eXBlLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1iYWNrY2hhaW48L2NvZGU+PGR0Pjxjb2RlPi1tbm8tYmFja2NoYWluPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tYmFja2NoYWluLTIwODQiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGJhY2tjaGFpbi0yMDg1Ij48L2E+U3RvcmUgKGRvIG5vdCBzdG9yZSkgdGhlIGFkZHJlc3Mgb2YgdGhlIGNhbGxlcidzIGZyYW1lIGFzIGJhY2tjaGFpbiBwb2ludGVyCitpbnRvIHRoZSBjYWxsZWUncyBzdGFjayBmcmFtZS4gCitBIGJhY2tjaGFpbiBtYXkgYmUgbmVlZGVkIHRvIGFsbG93IGRlYnVnZ2luZyB1c2luZyB0b29scyB0aGF0IGRvIG5vdCB1bmRlcnN0YW5kCitEV0FSRiAyIGNhbGwgZnJhbWUgaW5mb3JtYXRpb24uIAorV2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXBhY2tlZC1zdGFjazwvc3Bhbj48L3NhbXA+IGlzIGluIGVmZmVjdCwgdGhlIGJhY2tjaGFpbiBwb2ludGVyIGlzIHN0b3JlZAorYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgZnJhbWU7IHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wYWNrZWQtc3RhY2s8L3NwYW4+PC9zYW1wPiBpcyBpbiBlZmZlY3QsCit0aGUgYmFja2NoYWluIGlzIHBsYWNlZCBpbnRvIHRoZSB0b3Btb3N0IHdvcmQgb2YgdGhlIDk2LzE2MCBieXRlIHJlZ2lzdGVyCitzYXZlIGFyZWEuCisKKyAgICAgPHA+SW4gZ2VuZXJhbCwgY29kZSBjb21waWxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYmFja2NoYWluPC9zcGFuPjwvc2FtcD4gaXMgY2FsbC1jb21wYXRpYmxlIHdpdGgKK2NvZGUgY29tcGlsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW1vLWJhY2tjaGFpbjwvc3Bhbj48L3NhbXA+OyBob3dldmVyLCB1c2Ugb2YgdGhlIGJhY2tjaGFpbgorZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB1c3VhbGx5IHJlcXVpcmVzIHRoYXQgdGhlIHdob2xlIGJpbmFyeSBpcyBidWlsdCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWJhY2tjaGFpbjwvc3Bhbj48L3NhbXA+LiAgTm90ZSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWJhY2tjaGFpbjwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wYWNrZWQtc3RhY2s8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1oYXJkLWZsb2F0PC9zcGFuPjwvc2FtcD4gaXMgbm90IHN1cHBvcnRlZC4gIEluIG9yZGVyCit0byBidWlsZCBhIGxpbnV4IGtlcm5lbCB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zb2Z0LWZsb2F0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgdG8gbm90IG1haW50YWluIHRoZSBiYWNrY2hhaW4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBhY2tlZC1zdGFjazwvY29kZT48ZHQ+PGNvZGU+LW1uby1wYWNrZWQtc3RhY2s8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wYWNrZWRfMDAyZHN0YWNrLTIwODYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHBhY2tlZF8wMDJkc3RhY2stMjA4NyI+PC9hPlVzZSAoZG8gbm90IHVzZSkgdGhlIHBhY2tlZCBzdGFjayBsYXlvdXQuICBXaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tcGFja2VkLXN0YWNrPC9zcGFuPjwvc2FtcD4gaXMKK3NwZWNpZmllZCwgdGhlIGNvbXBpbGVyIHVzZXMgdGhlIGFsbCBmaWVsZHMgb2YgdGhlIDk2LzE2MCBieXRlIHJlZ2lzdGVyIHNhdmUKK2FyZWEgb25seSBmb3IgdGhlaXIgZGVmYXVsdCBwdXJwb3NlOyB1bnVzZWQgZmllbGRzIHN0aWxsIHRha2UgdXAgc3RhY2sgc3BhY2UuIAorV2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXBhY2tlZC1zdGFjazwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwgcmVnaXN0ZXIgc2F2ZSBzbG90cyBhcmUgZGVuc2VseQorcGFja2VkIGF0IHRoZSB0b3Agb2YgdGhlIHJlZ2lzdGVyIHNhdmUgYXJlYTsgdW51c2VkIHNwYWNlIGlzIHJldXNlZCBmb3Igb3RoZXIKK3B1cnBvc2VzLCBhbGxvd2luZyBmb3IgbW9yZSBlZmZpY2llbnQgdXNlIG9mIHRoZSBhdmFpbGFibGUgc3RhY2sgc3BhY2UuIAorSG93ZXZlciwgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWJhY2tjaGFpbjwvc3Bhbj48L3NhbXA+IGlzIGFsc28gaW4gZWZmZWN0LCB0aGUgdG9wbW9zdCB3b3JkIG9mCit0aGUgc2F2ZSBhcmVhIGlzIGFsd2F5cyB1c2VkIHRvIHN0b3JlIHRoZSBiYWNrY2hhaW4sIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3MKK3JlZ2lzdGVyIGlzIGFsd2F5cyBzYXZlZCB0d28gd29yZHMgYmVsb3cgdGhlIGJhY2tjaGFpbi4KKworICAgICA8cD5BcyBsb25nIGFzIHRoZSBzdGFjayBmcmFtZSBiYWNrY2hhaW4gaXMgbm90IHVzZWQsIGNvZGUgZ2VuZXJhdGVkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGFja2VkLXN0YWNrPC9zcGFuPjwvc2FtcD4gaXMgY2FsbC1jb21wYXRpYmxlIHdpdGggY29kZSBnZW5lcmF0ZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1wYWNrZWQtc3RhY2s8L3NwYW4+PC9zYW1wPi4gIE5vdGUgdGhhdCBzb21lIG5vbi1GU0YgcmVsZWFzZXMgb2YgR0NDIDIuOTUgZm9yCitTLzM5MCBvciB6U2VyaWVzIGdlbmVyYXRlZCBjb2RlIHRoYXQgdXNlcyB0aGUgc3RhY2sgZnJhbWUgYmFja2NoYWluIGF0IHJ1bgordGltZSwgbm90IGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFN1Y2ggY29kZSBpcyBub3QgY2FsbC1jb21wYXRpYmxlCit3aXRoIGNvZGUgY29tcGlsZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXBhY2tlZC1zdGFjazwvc3Bhbj48L3NhbXA+LiAgQWxzbywgbm90ZSB0aGF0IHRoZQorY29tYmluYXRpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1iYWNrY2hhaW48L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGFja2VkLXN0YWNrPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taGFyZC1mbG9hdDwvc3Bhbj48L3NhbXA+IGlzIG5vdCBzdXBwb3J0ZWQuICBJbiBvcmRlcgordG8gYnVpbGQgYSBsaW51eCBrZXJuZWwgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc29mdC1mbG9hdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGlzIHRvIG5vdCB1c2UgdGhlIHBhY2tlZCBzdGFjayBsYXlvdXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNtYWxsLWV4ZWM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc21hbGwtZXhlYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNtYWxsXzAwMmRleGVjLTIwODgiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHNtYWxsXzAwMmRleGVjLTIwODkiPjwvYT5HZW5lcmF0ZSAob3IgZG8gbm90IGdlbmVyYXRlKSBjb2RlIHVzaW5nIHRoZSA8Y29kZT5icmFzPC9jb2RlPiBpbnN0cnVjdGlvbgordG8gZG8gc3Vicm91dGluZSBjYWxscy4gCitUaGlzIG9ubHkgd29ya3MgcmVsaWFibHkgaWYgdGhlIHRvdGFsIGV4ZWN1dGFibGUgc2l6ZSBkb2VzIG5vdAorZXhjZWVkIDY0ay4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgPGNvZGU+YmFzcjwvY29kZT4gaW5zdHJ1Y3Rpb24gaW5zdGVhZCwKK3doaWNoIGRvZXMgbm90IGhhdmUgdGhpcyBsaW1pdGF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW02NDwvY29kZT48ZHQ+PGNvZGU+LW0zMTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTY0LTIwOTAiPjwvYT48YSBuYW1lPSJpbmRleC1tMzEtMjA5MSI+PC9hPldoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW0zMTwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwgZ2VuZXJhdGUgY29kZSBjb21wbGlhbnQgdG8gdGhlCitHTlUvTGludXggZm9yIFMvMzkwIEFCSS4gIFdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW02NDwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwgZ2VuZXJhdGUKK2NvZGUgY29tcGxpYW50IHRvIHRoZSBHTlUvTGludXggZm9yIHpTZXJpZXMgQUJJLiAgVGhpcyBhbGxvd3MgR0NDIGluCitwYXJ0aWN1bGFyIHRvIGdlbmVyYXRlIDY0LWJpdCBpbnN0cnVjdGlvbnMuICBGb3IgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+czM5MDwvc3Bhbj48L3NhbXA+JnJzcXVvOwordGFyZ2V0cywgdGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW0zMTwvc3Bhbj48L3NhbXA+LCB3aGlsZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zMzkweDwvc3Bhbj48L3NhbXA+JnJzcXVvOwordGFyZ2V0cyBkZWZhdWx0IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tNjQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1temFyY2g8L2NvZGU+PGR0Pjxjb2RlPi1tZXNhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1temFyY2gtMjA5MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1lc2EtMjA5MyI+PC9hPldoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW16YXJjaDwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwgZ2VuZXJhdGUgY29kZSB1c2luZyB0aGUKK2luc3RydWN0aW9ucyBhdmFpbGFibGUgb24gei9BcmNoaXRlY3R1cmUuIAorV2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWVzYTwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwgZ2VuZXJhdGUgY29kZSB1c2luZyB0aGUKK2luc3RydWN0aW9ucyBhdmFpbGFibGUgb24gRVNBLzM5MC4gIE5vdGUgdGhhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWVzYTwvc3Bhbj48L3NhbXA+IGlzCitub3QgcG9zc2libGUgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTY0PC9zcGFuPjwvc2FtcD4uIAorV2hlbiBnZW5lcmF0aW5nIGNvZGUgY29tcGxpYW50IHRvIHRoZSBHTlUvTGludXggZm9yIFMvMzkwIEFCSSwKK3RoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZXNhPC9zcGFuPjwvc2FtcD4uICBXaGVuIGdlbmVyYXRpbmcgY29kZSBjb21wbGlhbnQKK3RvIHRoZSBHTlUvTGludXggZm9yIHpTZXJpZXMgQUJJLCB0aGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXphcmNoPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW12Y2xlPC9jb2RlPjxkdD48Y29kZT4tbW5vLW12Y2xlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbXZjbGUtMjA5NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbXZjbGUtMjA5NSI+PC9hPkdlbmVyYXRlIChvciBkbyBub3QgZ2VuZXJhdGUpIGNvZGUgdXNpbmcgdGhlIDxjb2RlPm12Y2xlPC9jb2RlPiBpbnN0cnVjdGlvbgordG8gcGVyZm9ybSBibG9jayBtb3Zlcy4gIFdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1tdmNsZTwvc3Bhbj48L3NhbXA+IGlzIHNwZWNpZmllZCwKK3VzZSBhIDxjb2RlPm12YzwvY29kZT4gbG9vcCBpbnN0ZWFkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB1bmxlc3Mgb3B0aW1pemluZyBmb3IKK3NpemUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRlYnVnPC9jb2RlPjxkdD48Y29kZT4tbW5vLWRlYnVnPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZGVidWctMjA5NiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZGVidWctMjA5NyI+PC9hPlByaW50IChvciBkbyBub3QgcHJpbnQpIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gd2hlbiBjb21waWxpbmcuIAorVGhlIGRlZmF1bHQgaXMgdG8gbm90IHByaW50IGRlYnVnIGluZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hcmNoPTwvY29kZT48dmFyPmNwdS10eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1hcmNoLTIwOTgiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgcnVucyBvbiA8dmFyPmNwdS10eXBlPC92YXI+LCB3aGljaCBpcyB0aGUgbmFtZSBvZiBhIHN5c3RlbQorcmVwcmVzZW50aW5nIGEgY2VydGFpbiBwcm9jZXNzb3IgdHlwZS4gIFBvc3NpYmxlIHZhbHVlcyBmb3IKKzx2YXI+Y3B1LXR5cGU8L3Zhcj4gYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZzU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZzY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ejkwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj56OTkwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj56OS0xMDk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ejktZWM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ejEwPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1doZW4gZ2VuZXJhdGluZyBjb2RlIHVzaW5nIHRoZSBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIG9uIHovQXJjaGl0ZWN0dXJlLAordGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPXo5MDA8L3NwYW4+PC9zYW1wPi4gIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1nNTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10dW5lPTwvY29kZT48dmFyPmNwdS10eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW10dW5lLTIwOTkiPjwvYT5UdW5lIHRvIDx2YXI+Y3B1LXR5cGU8L3Zhcj4gZXZlcnl0aGluZyBhcHBsaWNhYmxlIGFib3V0IHRoZSBnZW5lcmF0ZWQgY29kZSwKK2V4Y2VwdCBmb3IgdGhlIEFCSSBhbmQgdGhlIHNldCBvZiBhdmFpbGFibGUgaW5zdHJ1Y3Rpb25zLiAKK1RoZSBsaXN0IG9mIDx2YXI+Y3B1LXR5cGU8L3Zhcj4gdmFsdWVzIGlzIHRoZSBzYW1lIGFzIGZvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPi4gCitUaGUgZGVmYXVsdCBpcyB0aGUgdmFsdWUgdXNlZCBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRwZi10cmFjZTwvY29kZT48ZHQ+PGNvZGU+LW1uby10cGYtdHJhY2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW10cGZfMDAyZHRyYWNlLTIxMDAiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHRwZl8wMDJkdHJhY2UtMjEwMSI+PC9hPkdlbmVyYXRlIGNvZGUgdGhhdCBhZGRzIChkb2VzIG5vdCBhZGQpIGluIFRQRiBPUyBzcGVjaWZpYyBicmFuY2hlcyB0byB0cmFjZQorcm91dGluZXMgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBUaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdCwgZXZlbgord2hlbiBjb21waWxpbmcgZm9yIHRoZSBUUEYgT1MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZ1c2VkLW1hZGQ8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tZnVzZWQtbWFkZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZ1c2VkXzAwMmRtYWRkLTIxMDIiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZ1c2VkXzAwMmRtYWRkLTIxMDMiPjwvYT5HZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgZmxvYXRpbmctcG9pbnQgbXVsdGlwbHkgYW5kCithY2N1bXVsYXRlIGluc3RydWN0aW9ucy4gIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgaWYKK2hhcmR3YXJlIGZsb2F0aW5nIHBvaW50IGlzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXdhcm4tZnJhbWVzaXplPTwvY29kZT48dmFyPmZyYW1lc2l6ZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1td2Fybl8wMDJkZnJhbWVzaXplLTIxMDQiPjwvYT5FbWl0IGEgd2FybmluZyBpZiB0aGUgY3VycmVudCBmdW5jdGlvbiBleGNlZWRzIHRoZSBnaXZlbiBmcmFtZSBzaXplLiAgQmVjYXVzZQordGhpcyBpcyBhIGNvbXBpbGUtdGltZSBjaGVjayBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgYSByZWFsIHByb2JsZW0gd2hlbiB0aGUgcHJvZ3JhbQorcnVucy4gIEl0IGlzIGludGVuZGVkIHRvIGlkZW50aWZ5IGZ1bmN0aW9ucyB0aGF0IG1vc3QgcHJvYmFibHkgY2F1c2UKK2Egc3RhY2sgb3ZlcmZsb3cuICBJdCBpcyB1c2VmdWwgdG8gYmUgdXNlZCBpbiBhbiBlbnZpcm9ubWVudCB3aXRoIGxpbWl0ZWQgc3RhY2sKK3NpemUgZS5nLiB0aGUgbGludXgga2VybmVsLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW13YXJuLWR5bmFtaWNzdGFjazwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXdhcm5fMDAyZGR5bmFtaWNzdGFjay0yMTA1Ij48L2E+RW1pdCBhIHdhcm5pbmcgaWYgdGhlIGZ1bmN0aW9uIGNhbGxzIDxjb2RlPmFsbG9jYTwvY29kZT4gb3IgdXNlcyBkeW5hbWljYWxseS1zaXplZAorYXJyYXlzLiAgVGhpcyBpcyBnZW5lcmFsbHkgYSBiYWQgaWRlYSB3aXRoIGEgbGltaXRlZCBzdGFjayBzaXplLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdGFjay1ndWFyZD08L2NvZGU+PHZhcj5zdGFjay1ndWFyZDwvdmFyPjxkdD48Y29kZT4tbXN0YWNrLXNpemU9PC9jb2RlPjx2YXI+c3RhY2stc2l6ZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tc3RhY2tfMDAyZGd1YXJkLTIxMDYiPjwvYT48YSBuYW1lPSJpbmRleC1tc3RhY2tfMDAyZHNpemUtMjEwNyI+PC9hPklmIHRoZXNlIG9wdGlvbnMgYXJlIHByb3ZpZGVkIHRoZSBTLzM5MCBiYWNrIGVuZCBlbWl0cyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBpbgordGhlIGZ1bmN0aW9uIHByb2xvZ3VlIHRoYXQgdHJpZ2dlciBhIHRyYXAgaWYgdGhlIHN0YWNrIHNpemUgaXMgPHZhcj5zdGFjay1ndWFyZDwvdmFyPgorYnl0ZXMgYWJvdmUgdGhlIDx2YXI+c3RhY2stc2l6ZTwvdmFyPiAocmVtZW1iZXIgdGhhdCB0aGUgc3RhY2sgb24gUy8zOTAgZ3Jvd3MgZG93bndhcmQpLiAKK0lmIHRoZSA8dmFyPnN0YWNrLWd1YXJkPC92YXI+IG9wdGlvbiBpcyBvbWl0dGVkIHRoZSBzbWFsbGVzdCBwb3dlciBvZiAyIGxhcmdlciB0aGFuCit0aGUgZnJhbWUgc2l6ZSBvZiB0aGUgY29tcGlsZWQgZnVuY3Rpb24gaXMgY2hvc2VuLiAKK1RoZXNlIG9wdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gaGVscCBkZWJ1Z2dpbmcgc3RhY2sgb3ZlcmZsb3cgcHJvYmxlbXMuIAorVGhlIGFkZGl0aW9uYWxseSBlbWl0dGVkIGNvZGUgY2F1c2VzIG9ubHkgbGl0dGxlIG92ZXJoZWFkIGFuZCBoZW5jZSBjYW4gYWxzbyBiZQordXNlZCBpbiBwcm9kdWN0aW9uLWxpa2Ugc3lzdGVtcyB3aXRob3V0IGdyZWF0ZXIgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uICBUaGUgZ2l2ZW4KK3ZhbHVlcyBoYXZlIHRvIGJlIGV4YWN0IHBvd2VycyBvZiAyIGFuZCA8dmFyPnN0YWNrLXNpemU8L3Zhcj4gaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbgorPHZhcj5zdGFjay1ndWFyZDwvdmFyPiB3aXRob3V0IGV4Y2VlZGluZyA2NGsuIAorSW4gb3JkZXIgdG8gYmUgZWZmaWNpZW50IHRoZSBleHRyYSBjb2RlIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHN0YWNrIHN0YXJ0cworYXQgYW4gYWRkcmVzcyBhbGlnbmVkIHRvIHRoZSB2YWx1ZSBnaXZlbiBieSA8dmFyPnN0YWNrLXNpemU8L3Zhcj4uIAorVGhlIDx2YXI+c3RhY2stZ3VhcmQ8L3Zhcj4gb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA8dmFyPnN0YWNrLXNpemU8L3Zhcj4uIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU2NvcmUtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TY29yZS1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxMjQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU2NvcmUtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNjb3JlIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyIgdGl0bGU9IlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyIgdGl0bGU9IlNIIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2NvcmUtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMzcgU2NvcmUgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNjb3JlLU9wdGlvbnMtMjEwOCI+PC9hPgorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgU2NvcmUgaW1wbGVtZW50YXRpb25zOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWViPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZWItMjEwOSI+PC9hPkNvbXBpbGUgY29kZSBmb3IgYmlnLWVuZGlhbiBtb2RlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1lbC0yMTEwIj48L2E+Q29tcGlsZSBjb2RlIGZvciBsaXR0bGUtZW5kaWFuIG1vZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5od2xvb3A8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1uaHdsb29wLTIxMTEiPjwvYT5EaXNhYmxlIGdlbmVyYXRpb24gb2YgPGNvZGU+YmNuejwvY29kZT4gaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW11bHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW11bHMtMjExMiI+PC9hPkVuYWJsZSBnZW5lcmF0aW9uIG9mIHVuYWxpZ25lZCBsb2FkIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW1hYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW1hYy0yMTEzIj48L2E+RW5hYmxlIHRoZSB1c2Ugb2YgbXVsdGlwbHktYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMuIERpc2FibGVkIGJ5IGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNjb3JlNTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNjb3JlNS0yMTE0Ij48L2E+U3BlY2lmeSB0aGUgU0NPUkU1IGFzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zY29yZTV1PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2NvcmU1dS0yMTE1Ij48L2E+U3BlY2lmeSB0aGUgU0NPUkU1VSBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2NvcmU3PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2NvcmU3LTIxMTYiPjwvYT5TcGVjaWZ5IHRoZSBTQ09SRTcgYXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNjb3JlN2Q8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zY29yZTdkLTIxMTciPjwvYT5TcGVjaWZ5IHRoZSBTQ09SRTdEIGFzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NlcnZpY2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU2VydmljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDhjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NlcnZpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TZXJ2aWNlIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQnVncy5odG1sI0J1Z3MiIHRpdGxlPSJCdWdzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29udHJpYnV0aW5nLmh0bWwjQ29udHJpYnV0aW5nIiB0aXRsZT0iQ29udHJpYnV0aW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNlcnZpY2UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ29udHJpYnV0aW5nLmh0bWwjQ29udHJpYnV0aW5nIj5Db250cmlidXRpbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCdWdzLmh0bWwjQnVncyI+QnVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMyBIb3cgVG8gR2V0IEhlbHAgd2l0aCBHQ0M8L2gyPgorCis8cD5JZiB5b3UgbmVlZCBoZWxwIGluc3RhbGxpbmcsIHVzaW5nIG9yIGNoYW5naW5nIEdDQywgdGhlcmUgYXJlIHR3bword2F5cyB0byBmaW5kIGl0OgorCisgICAgIDx1bD4KKzxsaT5TZW5kIGEgbWVzc2FnZSB0byBhIHN1aXRhYmxlIG5ldHdvcmsgbWFpbGluZyBsaXN0LiAgRmlyc3QgdHJ5Cis8YSBocmVmPSJtYWlsdG86Z2NjLWhlbHBAZ2NjLmdudS5vcmciPmdjYy1oZWxwQGdjYy5nbnUub3JnPC9hPiAoZm9yIGhlbHAgaW5zdGFsbGluZyBvciB1c2luZyBHQ0MpLCBhbmQgaWYKK3RoYXQgYnJpbmdzIG5vIHJlc3BvbnNlLCB0cnkgPGEgaHJlZj0ibWFpbHRvOmdjY0BnY2MuZ251Lm9yZyI+Z2NjQGdjYy5nbnUub3JnPC9hPi4gIEZvciBoZWxwCitjaGFuZ2luZyBHQ0MsIGFzayA8YSBocmVmPSJtYWlsdG86Z2NjQGdjYy5nbnUub3JnIj5nY2NAZ2NjLmdudS5vcmc8L2E+LiAgSWYgeW91IHRoaW5rIHlvdSBoYXZlIGZvdW5kCithIGJ1ZyBpbiBHQ0MsIHBsZWFzZSByZXBvcnQgaXQgZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgYXQKK3NlZSA8YSBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjQnVnLVJlcG9ydGluZyI+QnVnIFJlcG9ydGluZzwvYT4uCisKKyAgICAgPGxpPkxvb2sgaW4gdGhlIHNlcnZpY2UgZGlyZWN0b3J5IGZvciBzb21lb25lIHdobyBtaWdodCBoZWxwIHlvdSBmb3IgYSBmZWUuIAorVGhlIHNlcnZpY2UgZGlyZWN0b3J5IGlzIGZvdW5kIGF0Cis8YSBocmVmPSJodHRwOi8vd3d3LmZzZi5vcmcvcmVzb3VyY2VzL3NlcnZpY2UiPmh0dHA6Ly93d3cuZnNmLm9yZy9yZXNvdXJjZXMvc2VydmljZTwvYT4uIAorPC91bD4KKworIDxwPkZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBzZWUKKzxhIGhyZWY9Imh0dHA6Ly9nY2MuZ251Lm9yZy9mYXEuaHRtbCNzdXBwb3J0Ij5odHRwOi8vZ2NjLmdudS5vcmcvZmFxLmh0bWwjc3VwcG9ydDwvYT4uCisKKzwhLS0gQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdDQyBtYW51YWwuIC0tPgorPCEtLSBGb3IgY29weWluZyBjb25kaXRpb25zLCBzZWUgdGhlIGZpbGUgZ2NjLnRleGkuIC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU2ltcGxlLUNvbnN0cmFpbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NpbXBsZS1Db25zdHJhaW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNDY3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NpbXBsZS1Db25zdHJhaW50cy5odG1sCkBAIC0wLDAgKzEsMjAwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TaW1wbGUgQ29uc3RyYWludHMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29uc3RyYWludHMuaHRtbCNDb25zdHJhaW50cyIgdGl0bGU9IkNvbnN0cmFpbnRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTXVsdGlfMDAyZEFsdGVybmF0aXZlLmh0bWwjTXVsdGlfMDAyZEFsdGVybmF0aXZlIiB0aXRsZT0iTXVsdGktQWx0ZXJuYXRpdmUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2ltcGxlLUNvbnN0cmFpbnRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik11bHRpXzAwMmRBbHRlcm5hdGl2ZS5odG1sI011bHRpXzAwMmRBbHRlcm5hdGl2ZSI+TXVsdGktQWx0ZXJuYXRpdmU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb25zdHJhaW50cy5odG1sI0NvbnN0cmFpbnRzIj5Db25zdHJhaW50czwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNDIuMSBTaW1wbGUgQ29uc3RyYWludHM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1zaW1wbGUtY29uc3RyYWludHMtMjgxMiI+PC9hPgorVGhlIHNpbXBsZXN0IGtpbmQgb2YgY29uc3RyYWludCBpcyBhIHN0cmluZyBmdWxsIG9mIGxldHRlcnMsIGVhY2ggb2YKK3doaWNoIGRlc2NyaWJlcyBvbmUga2luZCBvZiBvcGVyYW5kIHRoYXQgaXMgcGVybWl0dGVkLiAgSGVyZSBhcmUKK3RoZSBsZXR0ZXJzIHRoYXQgYXJlIGFsbG93ZWQ6CisKKyAgICAgPGRsPgorPGR0PndoaXRlc3BhY2U8ZGQ+V2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkIGFuZCBjYW4gYmUgaW5zZXJ0ZWQgYXQgYW55IHBvc2l0aW9uCitleGNlcHQgdGhlIGZpcnN0LiAgVGhpcyBlbmFibGVzIGVhY2ggYWx0ZXJuYXRpdmUgZm9yIGRpZmZlcmVudCBvcGVyYW5kcyB0bworYmUgdmlzdWFsbHkgYWxpZ25lZCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBldmVuIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQKK251bWJlciBvZiBjb25zdHJhaW50cyBhbmQgbW9kaWZpZXJzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdibV8wMDdkLWluLWNvbnN0cmFpbnQtMjgxMyI+PC9hPjxhIG5hbWU9ImluZGV4LW1lbW9yeS1yZWZlcmVuY2VzLWluLWNvbnN0cmFpbnRzLTI4MTQiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BIG1lbW9yeSBvcGVyYW5kIGlzIGFsbG93ZWQsIHdpdGggYW55IGtpbmQgb2YgYWRkcmVzcyB0aGF0IHRoZSBtYWNoaW5lCitzdXBwb3J0cyBpbiBnZW5lcmFsLiAKK05vdGUgdGhhdCB0aGUgbGV0dGVyIHVzZWQgZm9yIHRoZSBnZW5lcmFsIG1lbW9yeSBjb25zdHJhaW50IGNhbiBiZQorcmUtZGVmaW5lZCBieSBhIGJhY2sgZW5kIHVzaW5nIHRoZSA8Y29kZT5UQVJHRVRfTUVNX0NPTlNUUkFJTlQ8L2NvZGU+IG1hY3JvLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LW9mZnNldHRhYmxlLWFkZHJlc3MtMjgxNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdib18wMDdkLWluLWNvbnN0cmFpbnQtMjgxNiI+PC9hPjxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkEgbWVtb3J5IG9wZXJhbmQgaXMgYWxsb3dlZCwgYnV0IG9ubHkgaWYgdGhlIGFkZHJlc3MgaXMKKzxkZm4+b2Zmc2V0dGFibGU8L2Rmbj4uICBUaGlzIG1lYW5zIHRoYXQgYWRkaW5nIGEgc21hbGwgaW50ZWdlciAoYWN0dWFsbHksCit0aGUgd2lkdGggaW4gYnl0ZXMgb2YgdGhlIG9wZXJhbmQsIGFzIGRldGVybWluZWQgYnkgaXRzIG1hY2hpbmUgbW9kZSkKK21heSBiZSBhZGRlZCB0byB0aGUgYWRkcmVzcyBhbmQgdGhlIHJlc3VsdCBpcyBhbHNvIGEgdmFsaWQgbWVtb3J5CithZGRyZXNzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWF1dG9pbmNyZW1lbnRfMDAyZmRlY3JlbWVudC1hZGRyZXNzaW5nLTI4MTciPjwvYT5Gb3IgZXhhbXBsZSwgYW4gYWRkcmVzcyB3aGljaCBpcyBjb25zdGFudCBpcyBvZmZzZXR0YWJsZTsgc28gaXMgYW4KK2FkZHJlc3MgdGhhdCBpcyB0aGUgc3VtIG9mIGEgcmVnaXN0ZXIgYW5kIGEgY29uc3RhbnQgKGFzIGxvbmcgYXMgYQorc2xpZ2h0bHkgbGFyZ2VyIGNvbnN0YW50IGlzIGFsc28gd2l0aGluIHRoZSByYW5nZSBvZiBhZGRyZXNzLW9mZnNldHMKK3N1cHBvcnRlZCBieSB0aGUgbWFjaGluZSk7IGJ1dCBhbiBhdXRvaW5jcmVtZW50IG9yIGF1dG9kZWNyZW1lbnQKK2FkZHJlc3MgaXMgbm90IG9mZnNldHRhYmxlLiAgTW9yZSBjb21wbGljYXRlZCBpbmRpcmVjdC9pbmRleGVkCithZGRyZXNzZXMgbWF5IG9yIG1heSBub3QgYmUgb2Zmc2V0dGFibGUgZGVwZW5kaW5nIG9uIHRoZSBvdGhlcgorYWRkcmVzc2luZyBtb2RlcyB0aGF0IHRoZSBtYWNoaW5lIHN1cHBvcnRzLgorCisgICAgIDxwPk5vdGUgdGhhdCBpbiBhbiBvdXRwdXQgb3BlcmFuZCB3aGljaCBjYW4gYmUgbWF0Y2hlZCBieSBhbm90aGVyCitvcGVyYW5kLCB0aGUgY29uc3RyYWludCBsZXR0ZXIgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHZhbGlkIG9ubHkgd2hlbiBhY2NvbXBhbmllZAorYnkgYm90aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGlmIHRoZSB0YXJnZXQgbWFjaGluZSBoYXMgcHJlZGVjcmVtZW50IGFkZHJlc3NpbmcpCithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87IChpZiB0aGUgdGFyZ2V0IG1hY2hpbmUgaGFzIHByZWluY3JlbWVudCBhZGRyZXNzaW5nKS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3YlZfMDA3ZC1pbi1jb25zdHJhaW50LTI4MTgiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Vjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BIG1lbW9yeSBvcGVyYW5kIHRoYXQgaXMgbm90IG9mZnNldHRhYmxlLiAgSW4gb3RoZXIgd29yZHMsIGFueXRoaW5nIHRoYXQKK3dvdWxkIGZpdCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbnN0cmFpbnQgYnV0IG5vdCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbnN0cmFpbnQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JfMDAzY18wMDdkLWluLWNvbnN0cmFpbnQtMjgxOSI+PC9hPjxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkEgbWVtb3J5IG9wZXJhbmQgd2l0aCBhdXRvZGVjcmVtZW50IGFkZHJlc3NpbmcgKGVpdGhlciBwcmVkZWNyZW1lbnQgb3IKK3Bvc3RkZWNyZW1lbnQpIGlzIGFsbG93ZWQuICBJbiBpbmxpbmUgPGNvZGU+YXNtPC9jb2RlPiB0aGlzIGNvbnN0cmFpbnQgaXMgb25seQorYWxsb3dlZCBpZiB0aGUgb3BlcmFuZCBpcyB1c2VkIGV4YWN0bHkgb25jZSBpbiBhbiBpbnN0cnVjdGlvbiB0aGF0IGNhbgoraGFuZGxlIHRoZSBzaWRlLWVmZmVjdHMuICBOb3QgdXNpbmcgYW4gb3BlcmFuZCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBjb25zdHJhaW50CitzdHJpbmcgaW4gdGhlIGlubGluZSA8Y29kZT5hc208L2NvZGU+IHBhdHRlcm4gYXQgYWxsIG9yIHVzaW5nIGl0IGluIG11bHRpcGxlCitpbnN0cnVjdGlvbnMgaXNuJ3QgdmFsaWQsIGJlY2F1c2UgdGhlIHNpZGUtZWZmZWN0cyB3b3VsZG4ndCBiZSBwZXJmb3JtZWQKK29yIHdvdWxkIGJlIHBlcmZvcm1lZCBtb3JlIHRoYW4gb25jZS4gIEZ1cnRoZXJtb3JlLCBvbiBzb21lIHRhcmdldHMKK3RoZSBvcGVyYW5kIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIGNvbnN0cmFpbnQgc3RyaW5nIG11c3QgYmUgYWNjb21wYW5pZWQgYnkKK3NwZWNpYWwgaW5zdHJ1Y3Rpb24gc3VmZml4ZXMgbGlrZSA8Y29kZT4lVTA8L2NvZGU+IGluc3RydWN0aW9uIHN1ZmZpeCBvbiBQb3dlclBDCitvciA8Y29kZT4lUDA8L2NvZGU+IG9uIElBLTY0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwM2VfMDA3ZC1pbi1jb25zdHJhaW50LTI4MjAiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BIG1lbW9yeSBvcGVyYW5kIHdpdGggYXV0b2luY3JlbWVudCBhZGRyZXNzaW5nIChlaXRoZXIgcHJlaW5jcmVtZW50IG9yCitwb3N0aW5jcmVtZW50KSBpcyBhbGxvd2VkLiAgSW4gaW5saW5lIDxjb2RlPmFzbTwvY29kZT4gdGhlIHNhbWUgcmVzdHJpY3Rpb25zCithcyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGx5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdicl8wMDdkLWluLWNvbnN0cmFpbnQtMjgyMSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lzdGVycy1pbi1jb25zdHJhaW50cy0yODIyIj48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QSByZWdpc3RlciBvcGVyYW5kIGlzIGFsbG93ZWQgcHJvdmlkZWQgdGhhdCBpdCBpcyBpbiBhIGdlbmVyYWwKK3JlZ2lzdGVyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWNvbnN0YW50cy1pbi1jb25zdHJhaW50cy0yODIzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JpXzAwN2QtaW4tY29uc3RyYWludC0yODI0Ij48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmk8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCAob25lIHdpdGggY29uc3RhbnQgdmFsdWUpIGlzIGFsbG93ZWQuIAorVGhpcyBpbmNsdWRlcyBzeW1ib2xpYyBjb25zdGFudHMgd2hvc2UgdmFsdWVzIHdpbGwgYmUga25vd24gb25seSBhdAorYXNzZW1ibHkgdGltZSBvciBsYXRlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3Ym5fMDA3ZC1pbi1jb25zdHJhaW50LTI4MjUiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BbiBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIHdpdGggYSBrbm93biBudW1lcmljIHZhbHVlIGlzIGFsbG93ZWQuIAorTWFueSBzeXN0ZW1zIGNhbm5vdCBzdXBwb3J0IGFzc2VtYmx5LXRpbWUgY29uc3RhbnRzIGZvciBvcGVyYW5kcyBsZXNzCit0aGFuIGEgd29yZCB3aWRlLiAgQ29uc3RyYWludHMgZm9yIHRoZXNlIG9wZXJhbmRzIHNob3VsZCB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uPC9zcGFuPjwvc2FtcD4mcnNxdW87CityYXRoZXIgdGhhbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmk8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JJXzAwN2QtaW4tY29uc3RyYWludC0yODI2Ij48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Sjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5LPC9zcGFuPjwvc2FtcD4mcnNxdW87LCA8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+UDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5PdGhlciBsZXR0ZXJzIGluIHRoZSByYW5nZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhyb3VnaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWF5IGJlIGRlZmluZWQgaW4KK2EgbWFjaGluZS1kZXBlbmRlbnQgZmFzaGlvbiB0byBwZXJtaXQgaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZHMgd2l0aAorZXhwbGljaXQgaW50ZWdlciB2YWx1ZXMgaW4gc3BlY2lmaWVkIHJhbmdlcy4gIEZvciBleGFtcGxlLCBvbiB0aGUKKzY4MDAwLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgZGVmaW5lZCB0byBzdGFuZCBmb3IgdGhlIHJhbmdlIG9mIHZhbHVlcyAxIHRvIDguIAorVGhpcyBpcyB0aGUgcmFuZ2UgcGVybWl0dGVkIGFzIGEgc2hpZnQgY291bnQgaW4gdGhlIHNoaWZ0CitpbnN0cnVjdGlvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JFXzAwN2QtaW4tY29uc3RyYWludC0yODI3Ij48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QW4gaW1tZWRpYXRlIGZsb2F0aW5nIG9wZXJhbmQgKGV4cHJlc3Npb24gY29kZSA8Y29kZT5jb25zdF9kb3VibGU8L2NvZGU+KSBpcworYWxsb3dlZCwgYnV0IG9ubHkgaWYgdGhlIHRhcmdldCBmbG9hdGluZyBwb2ludCBmb3JtYXQgaXMgdGhlIHNhbWUgYXMKK3RoYXQgb2YgdGhlIGhvc3QgbWFjaGluZSAob24gd2hpY2ggdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcpLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiRl8wMDdkLWluLWNvbnN0cmFpbnQtMjgyOCI+PC9hPjxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5GPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFuIGltbWVkaWF0ZSBmbG9hdGluZyBvcGVyYW5kIChleHByZXNzaW9uIGNvZGUgPGNvZGU+Y29uc3RfZG91YmxlPC9jb2RlPiBvcgorPGNvZGU+Y29uc3RfdmVjdG9yPC9jb2RlPikgaXMgYWxsb3dlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3YkdfMDA3ZC1pbi1jb25zdHJhaW50LTI4MjkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3YkhfMDA3ZC1pbi1jb25zdHJhaW50LTI4MzAiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Rzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5IPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Rzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5IPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1heSBiZSBkZWZpbmVkIGluIGEgbWFjaGluZS1kZXBlbmRlbnQgZmFzaGlvbiB0bworcGVybWl0IGltbWVkaWF0ZSBmbG9hdGluZyBvcGVyYW5kcyBpbiBwYXJ0aWN1bGFyIHJhbmdlcyBvZiB2YWx1ZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JzXzAwN2QtaW4tY29uc3RyYWludC0yODMxIj48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QW4gaW1tZWRpYXRlIGludGVnZXIgb3BlcmFuZCB3aG9zZSB2YWx1ZSBpcyBub3QgYW4gZXhwbGljaXQgaW50ZWdlciBpcworYWxsb3dlZC4KKworICAgICA8cD5UaGlzIG1pZ2h0IGFwcGVhciBzdHJhbmdlOyBpZiBhbiBpbnNuIGFsbG93cyBhIGNvbnN0YW50IG9wZXJhbmQgd2l0aCBhCit2YWx1ZSBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLCBpdCBjZXJ0YWlubHkgbXVzdCBhbGxvdyBhbnkga25vd24KK3ZhbHVlLiAgU28gd2h5IHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdGVhZCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmk8L3NwYW4+PC9zYW1wPiZyc3F1bzs/ICBTb21ldGltZXMgaXQgYWxsb3dzCitiZXR0ZXIgY29kZSB0byBiZSBnZW5lcmF0ZWQuCisKKyAgICAgPHA+Rm9yIGV4YW1wbGUsIG9uIHRoZSA2ODAwMCBpbiBhIGZ1bGx3b3JkIGluc3RydWN0aW9uIGl0IGlzIHBvc3NpYmxlIHRvCit1c2UgYW4gaW1tZWRpYXRlIG9wZXJhbmQ7IGJ1dCBpZiB0aGUgaW1tZWRpYXRlIHZhbHVlIGlzIGJldHdlZW4gJm1pbnVzOzEyOAorYW5kIDEyNywgYmV0dGVyIGNvZGUgcmVzdWx0cyBmcm9tIGxvYWRpbmcgdGhlIHZhbHVlIGludG8gYSByZWdpc3RlciBhbmQKK3VzaW5nIHRoZSByZWdpc3Rlci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbG9hZCBpbnRvIHRoZSByZWdpc3RlciBjYW4gYmUKK2RvbmUgd2l0aCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW92ZXE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdHJ1Y3Rpb24uICBXZSBhcnJhbmdlIGZvciB0aGlzIHRvIGhhcHBlbgorYnkgZGVmaW5pbmcgdGhlIGxldHRlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPks8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gbWVhbiAmbGRxdW87YW55IGludGVnZXIgb3V0c2lkZSB0aGUKK3JhbmdlICZtaW51czsxMjggdG8gMTI3JnJkcXVvOywgYW5kIHRoZW4gc3BlY2lmeWluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPktzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIHRoZSBvcGVyYW5kCitjb25zdHJhaW50cy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNhbXBfMDA3YmdfMDA3ZC1pbi1jb25zdHJhaW50LTI4MzIiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BbnkgcmVnaXN0ZXIsIG1lbW9yeSBvciBpbW1lZGlhdGUgaW50ZWdlciBvcGVyYW5kIGlzIGFsbG93ZWQsIGV4Y2VwdCBmb3IKK3JlZ2lzdGVycyB0aGF0IGFyZSBub3QgZ2VuZXJhbCByZWdpc3RlcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JYXzAwN2QtaW4tY29uc3RyYWludC0yODMzIj48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QW55IG9wZXJhbmQgd2hhdHNvZXZlciBpcyBhbGxvd2VkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiMF8wMDdkLWluLWNvbnN0cmFpbnQtMjgzNCI+PC9hPjxhIG5hbWU9ImluZGV4LWRpZ2l0cy1pbi1jb25zdHJhaW50LTI4MzUiPjwvYT48YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4xPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjI8L3NwYW4+PC9zYW1wPiZyc3F1bzssIDxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj45PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFuIG9wZXJhbmQgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgb3BlcmFuZCBudW1iZXIgaXMgYWxsb3dlZC4gIElmIGEKK2RpZ2l0IGlzIHVzZWQgdG9nZXRoZXIgd2l0aCBsZXR0ZXJzIHdpdGhpbiB0aGUgc2FtZSBhbHRlcm5hdGl2ZSwgdGhlCitkaWdpdCBzaG91bGQgY29tZSBsYXN0LgorCisgICAgIDxwPlRoaXMgbnVtYmVyIGlzIGFsbG93ZWQgdG8gYmUgbW9yZSB0aGFuIGEgc2luZ2xlIGRpZ2l0LiAgSWYgbXVsdGlwbGUKK2RpZ2l0cyBhcmUgZW5jb3VudGVyZWQgY29uc2VjdXRpdmVseSwgdGhleSBhcmUgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUKK2RlY2ltYWwgaW50ZWdlci4gIFRoZXJlIGlzIHNjYW50IGNoYW5jZSBmb3IgYW1iaWd1aXR5LCBzaW5jZSB0by1kYXRlCitpdCBoYXMgbmV2ZXIgYmVlbiBkZXNpcmFibGUgdGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjEwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJlIGludGVycHJldGVkIGFzIG1hdGNoaW5nCitlaXRoZXIgb3BlcmFuZCAxIDxlbT5vcjwvZW0+IG9wZXJhbmQgMC4gIFNob3VsZCB0aGlzIGJlIGRlc2lyZWQsIG9uZQorY2FuIHVzZSBtdWx0aXBsZSBhbHRlcm5hdGl2ZXMgaW5zdGVhZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1tYXRjaGluZy1jb25zdHJhaW50LTI4MzYiPjwvYT48YSBuYW1lPSJpbmRleC1jb25zdHJhaW50XzAwMmMtbWF0Y2hpbmctMjgzNyI+PC9hPlRoaXMgaXMgY2FsbGVkIGEgPGRmbj5tYXRjaGluZyBjb25zdHJhaW50PC9kZm4+IGFuZCB3aGF0IGl0IHJlYWxseSBtZWFucyBpcwordGhhdCB0aGUgYXNzZW1ibGVyIGhhcyBvbmx5IGEgc2luZ2xlIG9wZXJhbmQgdGhhdCBmaWxscyB0d28gcm9sZXMKK3doaWNoIDxjb2RlPmFzbTwvY29kZT4gZGlzdGluZ3Vpc2hlcy4gIEZvciBleGFtcGxlLCBhbiBhZGQgaW5zdHJ1Y3Rpb24gdXNlcwordHdvIGlucHV0IG9wZXJhbmRzIGFuZCBhbiBvdXRwdXQgb3BlcmFuZCwgYnV0IG9uIG1vc3QgQ0lTQworbWFjaGluZXMgYW4gYWRkIGluc3RydWN0aW9uIHJlYWxseSBoYXMgb25seSB0d28gb3BlcmFuZHMsIG9uZSBvZiB0aGVtIGFuCitpbnB1dC1vdXRwdXQgb3BlcmFuZDoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBhZGRsICMzNSxyMTIKKzwvcHJlPgorICAgICA8cD5NYXRjaGluZyBjb25zdHJhaW50cyBhcmUgdXNlZCBpbiB0aGVzZSBjaXJjdW1zdGFuY2VzLiAKK01vcmUgcHJlY2lzZWx5LCB0aGUgdHdvIG9wZXJhbmRzIHRoYXQgbWF0Y2ggbXVzdCBpbmNsdWRlIG9uZSBpbnB1dC1vbmx5CitvcGVyYW5kIGFuZCBvbmUgb3V0cHV0LW9ubHkgb3BlcmFuZC4gIE1vcmVvdmVyLCB0aGUgZGlnaXQgbXVzdCBiZSBhCitzbWFsbGVyIG51bWJlciB0aGFuIHRoZSBudW1iZXIgb2YgdGhlIG9wZXJhbmQgdGhhdCB1c2VzIGl0IGluIHRoZQorY29uc3RyYWludC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1sb2FkLWFkZHJlc3MtaW5zdHJ1Y3Rpb24tMjgzOCI+PC9hPjxhIG5hbWU9ImluZGV4LXB1c2gtYWRkcmVzcy1pbnN0cnVjdGlvbi0yODM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWRkcmVzcy1jb25zdHJhaW50cy0yODQwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBzYW1wXzAwN2JwXzAwN2QtaW4tY29uc3RyYWludC0yODQxIj48L2E+PGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnA8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QW4gb3BlcmFuZCB0aGF0IGlzIGEgdmFsaWQgbWVtb3J5IGFkZHJlc3MgaXMgYWxsb3dlZC4gIFRoaXMgaXMKK2ZvciAmbGRxdW87bG9hZCBhZGRyZXNzJnJkcXVvOyBhbmQgJmxkcXVvO3B1c2ggYWRkcmVzcyZyZHF1bzsgaW5zdHJ1Y3Rpb25zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWFkZHJlc3NfMDA1Zm9wZXJhbmQtMjg0MiI+PC9hPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiB0aGUgY29uc3RyYWludCBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IDxjb2RlPmFkZHJlc3Nfb3BlcmFuZDwvY29kZT4KK2FzIHRoZSBwcmVkaWNhdGUgaW4gdGhlIDxjb2RlPm1hdGNoX29wZXJhbmQ8L2NvZGU+LiAgVGhpcyBwcmVkaWNhdGUgaW50ZXJwcmV0cwordGhlIG1vZGUgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5tYXRjaF9vcGVyYW5kPC9jb2RlPiBhcyB0aGUgbW9kZSBvZiB0aGUgbWVtb3J5CityZWZlcmVuY2UgZm9yIHdoaWNoIHRoZSBhZGRyZXNzIHdvdWxkIGJlIHZhbGlkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LW90aGVyLXJlZ2lzdGVyLWNvbnN0cmFpbnRzLTI4NDMiPjwvYT48YSBuYW1lPSJpbmRleC1leHRlbnNpYmxlLWNvbnN0cmFpbnRzLTI4NDQiPjwvYT48YnI+PGR0Pjx2YXI+b3RoZXItbGV0dGVyczwvdmFyPjxkZD5PdGhlciBsZXR0ZXJzIGNhbiBiZSBkZWZpbmVkIGluIG1hY2hpbmUtZGVwZW5kZW50IGZhc2hpb24gdG8gc3RhbmQgZm9yCitwYXJ0aWN1bGFyIGNsYXNzZXMgb2YgcmVnaXN0ZXJzIG9yIG90aGVyIGFyYml0cmFyeSBvcGVyYW5kIHR5cGVzLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXJlIGRlZmluZWQgb24gdGhlIDY4MDAwLzY4MDIwIHRvIHN0YW5kCitmb3IgZGF0YSwgYWRkcmVzcyBhbmQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NvbGFyaXMtMi1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NvbGFyaXMtMi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlYTRlNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU29sYXJpcy0yLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Tb2xhcmlzIDIgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyIgdGl0bGU9IlNIIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTUEFSQy1PcHRpb25zLmh0bWwjU1BBUkMtT3B0aW9ucyIgdGl0bGU9IlNQQVJDIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU29sYXJpcy0yLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU1BBUkMtT3B0aW9ucy5odG1sI1NQQVJDLU9wdGlvbnMiPlNQQVJDIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSC1PcHRpb25zLmh0bWwjU0gtT3B0aW9ucyI+U0ggT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy4zOSBTb2xhcmlzIDIgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNvbGFyaXMtMi1vcHRpb25zLTIxNzciPjwvYT4KK1RoZXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIFNvbGFyaXMgMjoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1pbXB1cmUtdGV4dDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWltcHVyZV8wMDJkdGV4dC0yMTc4Ij48L2E+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1pbXB1cmUtdGV4dDwvc3Bhbj48L3NhbXA+LCB1c2VkIGluIGFkZGl0aW9uIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zaGFyZWQ8L3NwYW4+PC9zYW1wPiwgdGVsbHMKK3RoZSBjb21waWxlciB0byBub3QgcGFzcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4teiB0ZXh0PC9zcGFuPjwvc2FtcD4gdG8gdGhlIGxpbmtlciB3aGVuIGxpbmtpbmcgYQorc2hhcmVkIG9iamVjdC4gIFVzaW5nIHRoaXMgb3B0aW9uLCB5b3UgY2FuIGxpbmsgcG9zaXRpb24tZGVwZW5kZW50Citjb2RlIGludG8gYSBzaGFyZWQgb2JqZWN0LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taW1wdXJlLXRleHQ8L3NwYW4+PC9zYW1wPiBzdXBwcmVzc2VzIHRoZSAmbGRxdW87cmVsb2NhdGlvbnMgcmVtYWluIGFnYWluc3QKK2FsbG9jYXRhYmxlIGJ1dCBub24td3JpdGFibGUgc2VjdGlvbnMmcmRxdW87IGxpbmtlciBlcnJvciBtZXNzYWdlLiAKK0hvd2V2ZXIsIHRoZSBuZWNlc3NhcnkgcmVsb2NhdGlvbnMgdHJpZ2dlciBjb3B5LW9uLXdyaXRlLCBhbmQgdGhlCitzaGFyZWQgb2JqZWN0IGlzIG5vdCBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHByb2Nlc3Nlcy4gIEluc3RlYWQgb2YKK3VzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taW1wdXJlLXRleHQ8L3NwYW4+PC9zYW1wPiwgeW91IHNob3VsZCBjb21waWxlIGFsbCBzb3VyY2UgY29kZSB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnBpYzwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mUElDPC9zcGFuPjwvc2FtcD4uCisKKyA8L2RsPgorCisgPHA+VGhlc2Ugc3dpdGNoZXMgYXJlIHN1cHBvcnRlZCBpbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgb24gU29sYXJpcyAyOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tcHRocmVhZHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXB0aHJlYWRzLTIxNzkiPjwvYT5BZGQgc3VwcG9ydCBmb3IgbXVsdGl0aHJlYWRpbmcgdXNpbmcgdGhlIFBPU0lYIHRocmVhZHMgbGlicmFyeS4gIFRoaXMKK29wdGlvbiBzZXRzIGZsYWdzIGZvciBib3RoIHRoZSBwcmVwcm9jZXNzb3IgYW5kIGxpbmtlci4gIFRoaXMgb3B0aW9uIGRvZXMKK25vdCBhZmZlY3QgdGhlIHRocmVhZCBzYWZldHkgb2Ygb2JqZWN0IGNvZGUgcHJvZHVjZWQgIGJ5IHRoZSBjb21waWxlciBvcgordGhhdCBvZiBsaWJyYXJpZXMgc3VwcGxpZWQgd2l0aCBpdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1wdGhyZWFkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wdGhyZWFkLTIxODAiPjwvYT5UaGlzIGlzIGEgc3lub255bSBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXB0aHJlYWRzPC9zcGFuPjwvc2FtcD4uIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU29sYXJpcy1Gb3JtYXQtQ2hlY2tzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NvbGFyaXMtRm9ybWF0LUNoZWNrcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Y2E3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1NvbGFyaXMtRm9ybWF0LUNoZWNrcy5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNvbGFyaXMgRm9ybWF0IENoZWNrcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtRm9ybWF0LUNoZWNrcy5odG1sI1RhcmdldC1Gb3JtYXQtQ2hlY2tzIiB0aXRsZT0iVGFyZ2V0IEZvcm1hdCBDaGVja3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEYXJ3aW4tRm9ybWF0LUNoZWNrcy5odG1sI0Rhcndpbi1Gb3JtYXQtQ2hlY2tzIiB0aXRsZT0iRGFyd2luIEZvcm1hdCBDaGVja3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU29sYXJpcy1Gb3JtYXQtQ2hlY2tzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRhcndpbi1Gb3JtYXQtQ2hlY2tzLmh0bWwjRGFyd2luLUZvcm1hdC1DaGVja3MiPkRhcndpbiBGb3JtYXQgQ2hlY2tzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGFyZ2V0LUZvcm1hdC1DaGVja3MuaHRtbCNUYXJnZXQtRm9ybWF0LUNoZWNrcyI+VGFyZ2V0IEZvcm1hdCBDaGVja3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU3LjEgU29sYXJpcyBGb3JtYXQgQ2hlY2tzPC9oND4KKworPHA+U29sYXJpcyB0YXJnZXRzIHN1cHBvcnQgdGhlIDxjb2RlPmNtbl9lcnI8L2NvZGU+IChvciA8Y29kZT5fX2Ntbl9lcnJfXzwvY29kZT4pIGZvcm1hdAorY2hlY2suICA8Y29kZT5jbW5fZXJyPC9jb2RlPiBhY2NlcHRzIGEgc3Vic2V0IG9mIHRoZSBzdGFuZGFyZCA8Y29kZT5wcmludGY8L2NvZGU+Citjb252ZXJzaW9ucywgYW5kIHRoZSB0d28tYXJndW1lbnQgPGNvZGU+JWI8L2NvZGU+IGNvbnZlcnNpb24gZm9yIGRpc3BsYXlpbmcKK2JpdC1maWVsZHMuICBTZWUgdGhlIFNvbGFyaXMgbWFuIHBhZ2UgZm9yIDxjb2RlPmNtbl9lcnI8L2NvZGU+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Tb2xhcmlzLVByYWdtYXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU29sYXJpcy1QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA2MzNlMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU29sYXJpcy1QcmFnbWFzLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U29sYXJpcyBQcmFnbWFzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIiB0aXRsZT0iUHJhZ21hcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRhcndpbi1QcmFnbWFzLmh0bWwjRGFyd2luLVByYWdtYXMiIHRpdGxlPSJEYXJ3aW4gUHJhZ21hcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlN5bWJvbF8wMDJkUmVuYW1pbmctUHJhZ21hcy5odG1sI1N5bWJvbF8wMDJkUmVuYW1pbmctUHJhZ21hcyIgdGl0bGU9IlN5bWJvbC1SZW5hbWluZyBQcmFnbWFzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNvbGFyaXMtUHJhZ21hcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMuaHRtbCNTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMiPlN5bWJvbC1SZW5hbWluZyBQcmFnbWFzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRGFyd2luLVByYWdtYXMuaHRtbCNEYXJ3aW4tUHJhZ21hcyI+RGFyd2luIFByYWdtYXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTguNiBTb2xhcmlzIFByYWdtYXM8L2g0PgorCis8cD5UaGUgU29sYXJpcyB0YXJnZXQgc3VwcG9ydHMgPGNvZGU+I3ByYWdtYSByZWRlZmluZV9leHRuYW1lPC9jb2RlPgorKHNlZSA8YSBocmVmPSJTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMuaHRtbCNTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMiPlN5bWJvbC1SZW5hbWluZyBQcmFnbWFzPC9hPikuICBJdCBhbHNvIHN1cHBvcnRzIGFkZGl0aW9uYWwKKzxjb2RlPiNwcmFnbWE8L2NvZGU+IGRpcmVjdGl2ZXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgc3lzdGVtIGNvbXBpbGVyLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5hbGlnbiA8L2NvZGU+PHZhcj5hbGlnbm1lbnQ8L3Zhcj48Y29kZT4gKDwvY29kZT48dmFyPnZhcmlhYmxlPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPnZhcmlhYmxlPC92YXI+PGNvZGU+XS4uLik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLWFsaWduLTM0NjkiPjwvYT4KK0luY3JlYXNlIHRoZSBtaW5pbXVtIGFsaWdubWVudCBvZiBlYWNoIDx2YXI+dmFyaWFibGU8L3Zhcj4gdG8gPHZhcj5hbGlnbm1lbnQ8L3Zhcj4uIAorVGhpcyBpcyB0aGUgc2FtZSBhcyBHQ0MncyA8Y29kZT5hbGlnbmVkPC9jb2RlPiBhdHRyaWJ1dGUgc2VlIDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPikuICBNYWNybyBleHBhbnNpb24gb2NjdXJzIG9uIHRoZSBhcmd1bWVudHMgdG8gdGhpcyBwcmFnbWEKK3doZW4gY29tcGlsaW5nIEMgYW5kIE9iamVjdGl2ZS1DLiAgSXQgZG9lcyBub3QgY3VycmVudGx5IG9jY3VyIHdoZW4KK2NvbXBpbGluZyBDKyssIGJ1dCB0aGlzIGlzIGEgYnVnIHdoaWNoIG1heSBiZSBmaXhlZCBpbiBhIGZ1dHVyZQorcmVsZWFzZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmZpbmkgKDwvY29kZT48dmFyPmZ1bmN0aW9uPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPmZ1bmN0aW9uPC92YXI+PGNvZGU+XS4uLik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLWZpbmktMzQ3MCI+PC9hPgorVGhpcyBwcmFnbWEgY2F1c2VzIGVhY2ggbGlzdGVkIDx2YXI+ZnVuY3Rpb248L3Zhcj4gdG8gYmUgY2FsbGVkIGFmdGVyCittYWluLCBvciBkdXJpbmcgc2hhcmVkIG1vZHVsZSB1bmxvYWRpbmcsIGJ5IGFkZGluZyBhIGNhbGwgdG8gdGhlCis8Y29kZT4uZmluaTwvY29kZT4gc2VjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmluaXQgKDwvY29kZT48dmFyPmZ1bmN0aW9uPC92YXI+PGNvZGU+IFssIDwvY29kZT48dmFyPmZ1bmN0aW9uPC92YXI+PGNvZGU+XS4uLik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXByYWdtYV8wMDJjLWluaXQtMzQ3MSI+PC9hPgorVGhpcyBwcmFnbWEgY2F1c2VzIGVhY2ggbGlzdGVkIDx2YXI+ZnVuY3Rpb248L3Zhcj4gdG8gYmUgY2FsbGVkIGR1cmluZworaW5pdGlhbGl6YXRpb24gKGJlZm9yZSA8Y29kZT5tYWluPC9jb2RlPikgb3IgZHVyaW5nIHNoYXJlZCBtb2R1bGUgbG9hZGluZywgYnkKK2FkZGluZyBhIGNhbGwgdG8gdGhlIDxjb2RlPi5pbml0PC9jb2RlPiBzZWN0aW9uLgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3BlYy1GaWxlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TcGVjLUZpbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmYjQ1NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3BlYy1GaWxlcy5odG1sCkBAIC0wLDAgKzEsNTE1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TcGVjIEZpbGVzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyIgdGl0bGU9Ikludm9raW5nIEdDQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiIHRpdGxlPSJEaXJlY3RvcnkgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRhcmdldC1PcHRpb25zLmh0bWwjVGFyZ2V0LU9wdGlvbnMiIHRpdGxlPSJUYXJnZXQgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTcGVjLUZpbGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRhcmdldC1PcHRpb25zLmh0bWwjVGFyZ2V0LU9wdGlvbnMiPlRhcmdldCBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMTUgU3BlY2lmeWluZyBzdWJwcm9jZXNzZXMgYW5kIHRoZSBzd2l0Y2hlcyB0byBwYXNzIHRvIHRoZW08L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TcGVjLUZpbGVzLTEwNjUiPjwvYT4KKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiBpcyBhIGRyaXZlciBwcm9ncmFtLiAgSXQgcGVyZm9ybXMgaXRzIGpvYiBieSBpbnZva2luZyBhCitzZXF1ZW5jZSBvZiBvdGhlciBwcm9ncmFtcyB0byBkbyB0aGUgd29yayBvZiBjb21waWxpbmcsIGFzc2VtYmxpbmcgYW5kCitsaW5raW5nLiAgR0NDIGludGVycHJldHMgaXRzIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzIGFuZCB1c2VzIHRoZXNlIHRvCitkZWR1Y2Ugd2hpY2ggcHJvZ3JhbXMgaXQgc2hvdWxkIGludm9rZSwgYW5kIHdoaWNoIGNvbW1hbmQtbGluZSBvcHRpb25zCitpdCBvdWdodCB0byBwbGFjZSBvbiB0aGVpciBjb21tYW5kIGxpbmVzLiAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkCitieSA8ZGZuPnNwZWMgc3RyaW5nczwvZGZuPi4gIEluIG1vc3QgY2FzZXMgdGhlcmUgaXMgb25lIHNwZWMgc3RyaW5nIGZvciBlYWNoCitwcm9ncmFtIHRoYXQgR0NDIGNhbiBpbnZva2UsIGJ1dCBhIGZldyBwcm9ncmFtcyBoYXZlIG11bHRpcGxlIHNwZWMKK3N0cmluZ3MgdG8gY29udHJvbCB0aGVpciBiZWhhdmlvci4gIFRoZSBzcGVjIHN0cmluZ3MgYnVpbHQgaW50byBHQ0MgY2FuCitiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3BlY3M9PC9zcGFuPjwvc2FtcD4gY29tbWFuZC1saW5lIHN3aXRjaCB0byBzcGVjaWZ5CithIHNwZWMgZmlsZS4KKworIDxwPjxkZm4+U3BlYyBmaWxlczwvZGZuPiBhcmUgcGxhaW50ZXh0IGZpbGVzIHRoYXQgYXJlIHVzZWQgdG8gY29uc3RydWN0IHNwZWMKK3N0cmluZ3MuICBUaGV5IGNvbnNpc3Qgb2YgYSBzZXF1ZW5jZSBvZiBkaXJlY3RpdmVzIHNlcGFyYXRlZCBieSBibGFuaworbGluZXMuICBUaGUgdHlwZSBvZiBkaXJlY3RpdmUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UKK2NoYXJhY3RlciBvbiB0aGUgbGluZSwgd2hpY2ggY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4lPC9jb2RlPjx2YXI+Y29tbWFuZDwvdmFyPjxkZD5Jc3N1ZXMgYSA8dmFyPmNvbW1hbmQ8L3Zhcj4gdG8gdGhlIHNwZWMgZmlsZSBwcm9jZXNzb3IuICBUaGUgY29tbWFuZHMgdGhhdCBjYW4KK2FwcGVhciBoZXJlIGFyZToKKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT4laW5jbHVkZSAmbHQ7PC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiZndDs8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjVpbmNsdWRlXzAwN2QtMTA2NiI+PC9hPlNlYXJjaCBmb3IgPHZhcj5maWxlPC92YXI+IGFuZCBpbnNlcnQgaXRzIHRleHQgYXQgdGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlCitzcGVjcyBmaWxlLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4laW5jbHVkZV9ub2VyciAmbHQ7PC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiZndDs8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjVpbmNsdWRlXzAwNWZub2Vycl8wMDdkLTEwNjciPjwvYT5KdXN0IGxpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4laW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYnV0IGRvIG5vdCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBpbmNsdWRlCitmaWxlIGNhbm5vdCBiZSBmb3VuZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+JXJlbmFtZSA8L2NvZGU+PHZhcj5vbGRfbmFtZTwvdmFyPiA8dmFyPm5ld19uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjVyZW5hbWVfMDA3ZC0xMDY4Ij48L2E+UmVuYW1lIHRoZSBzcGVjIHN0cmluZyA8dmFyPm9sZF9uYW1lPC92YXI+IHRvIDx2YXI+bmV3X25hbWU8L3Zhcj4uCisKKyAgICAgPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPipbPC9jb2RlPjx2YXI+c3BlY19uYW1lPC92YXI+PGNvZGU+XTo8L2NvZGU+PGRkPlRoaXMgdGVsbHMgdGhlIGNvbXBpbGVyIHRvIGNyZWF0ZSwgb3ZlcnJpZGUgb3IgZGVsZXRlIHRoZSBuYW1lZCBzcGVjCitzdHJpbmcuICBBbGwgbGluZXMgYWZ0ZXIgdGhpcyBkaXJlY3RpdmUgdXAgdG8gdGhlIG5leHQgZGlyZWN0aXZlIG9yCitibGFuayBsaW5lIGFyZSBjb25zaWRlcmVkIHRvIGJlIHRoZSB0ZXh0IGZvciB0aGUgc3BlYyBzdHJpbmcuICBJZiB0aGlzCityZXN1bHRzIGluIGFuIGVtcHR5IHN0cmluZyB0aGVuIHRoZSBzcGVjIGlzIGRlbGV0ZWQuICAoT3IsIGlmIHRoZQorc3BlYyBkaWQgbm90IGV4aXN0LCB0aGVuIG5vdGhpbmcgaGFwcGVucy4pICBPdGhlcndpc2UsIGlmIHRoZSBzcGVjCitkb2VzIG5vdCBjdXJyZW50bHkgZXhpc3QgYSBuZXcgc3BlYyBpcyBjcmVhdGVkLiAgSWYgdGhlIHNwZWMgZG9lcworZXhpc3QgdGhlbiBpdHMgY29udGVudHMgYXJlIG92ZXJyaWRkZW4gYnkgdGhlIHRleHQgb2YgdGhpcworZGlyZWN0aXZlLCB1bmxlc3MgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGF0IHRleHQgaXMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kzwvc3Bhbj48L3NhbXA+JnJzcXVvOworY2hhcmFjdGVyLCBpbiB3aGljaCBjYXNlIHRoZSB0ZXh0IGlzIGFwcGVuZGVkIHRvIHRoZSBzcGVjLgorCisgICAgIDxicj48ZHQ+PGNvZGU+WzwvY29kZT48dmFyPnN1ZmZpeDwvdmFyPjxjb2RlPl06PC9jb2RlPjxkZD5DcmVhdGVzIGEgbmV3ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Wzwvc3Bhbj48dmFyPnN1ZmZpeDwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5dIHNwZWM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcGFpci4gIEFsbCBsaW5lcyBhZnRlciB0aGlzIGRpcmVjdGl2ZQorYW5kIHVwIHRvIHRoZSBuZXh0IGRpcmVjdGl2ZSBvciBibGFuayBsaW5lIGFyZSBjb25zaWRlcmVkIHRvIG1ha2UgdXAgdGhlCitzcGVjIHN0cmluZyBmb3IgdGhlIGluZGljYXRlZCBzdWZmaXguICBXaGVuIHRoZSBjb21waWxlciBlbmNvdW50ZXJzIGFuCitpbnB1dCBmaWxlIHdpdGggdGhlIG5hbWVkIHN1ZmZpeCwgaXQgcHJvY2Vzc2VzIHRoZSBzcGVjIHN0cmluZyBpbgorb3JkZXIgdG8gd29yayBvdXQgaG93IHRvIGNvbXBpbGUgdGhhdCBmaWxlLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLlpaOgorICAgICAgICAgIHotY29tcGlsZSAtaW5wdXQgJWkKKzwvcHJlPgorICAgICA8cD5UaGlzIHNheXMgdGhhdCBhbnkgaW5wdXQgZmlsZSB3aG9zZSBuYW1lIGVuZHMgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uWlo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2hvdWxkIGJlCitwYXNzZWQgdG8gdGhlIHByb2dyYW0gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj56LWNvbXBpbGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdoaWNoIHNob3VsZCBiZSBpbnZva2VkIHdpdGggdGhlCitjb21tYW5kLWxpbmUgc3dpdGNoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pbnB1dDwvc3Bhbj48L3NhbXA+IGFuZCB3aXRoIHRoZSByZXN1bHQgb2YgcGVyZm9ybWluZyB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3Vic3RpdHV0aW9uLiAgKFNlZSBiZWxvdy4pCisKKyAgICAgPHA+QXMgYW4gYWx0ZXJuYXRpdmUgdG8gcHJvdmlkaW5nIGEgc3BlYyBzdHJpbmcsIHRoZSB0ZXh0IGZvbGxvd2luZyBhCitzdWZmaXggZGlyZWN0aXZlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5APC9jb2RlPjx2YXI+bGFuZ3VhZ2U8L3Zhcj48ZGQ+VGhpcyBzYXlzIHRoYXQgdGhlIHN1ZmZpeCBpcyBhbiBhbGlhcyBmb3IgYSBrbm93biA8dmFyPmxhbmd1YWdlPC92YXI+LiAgVGhpcyBpcworc2ltaWxhciB0byB1c2luZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXg8L3NwYW4+PC9zYW1wPiBjb21tYW5kLWxpbmUgc3dpdGNoIHRvIEdDQyB0byBzcGVjaWZ5IGEKK2xhbmd1YWdlIGV4cGxpY2l0bHkuICBGb3IgZXhhbXBsZToKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgLlpaOgorICAgICAgICAgICAgICAgQGMrKworPC9wcmU+CisgICAgICAgICAgPHA+U2F5cyB0aGF0IC5aWiBmaWxlcyBhcmUsIGluIGZhY3QsIEMrKyBzb3VyY2UgZmlsZXMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPiM8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPlRoaXMgY2F1c2VzIGFuIGVycm9yIG1lc3NhZ2VzIHNheWluZzoKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgPHZhcj5uYW1lPC92YXI+IGNvbXBpbGVyIG5vdCBpbnN0YWxsZWQgb24gdGhpcyBzeXN0ZW0uCis8L3ByZT4KKyAgICAgICAgICA8L2RsPgorCisgICAgIDxwPkdDQyBhbHJlYWR5IGhhcyBhbiBleHRlbnNpdmUgbGlzdCBvZiBzdWZmaXhlcyBidWlsdCBpbnRvIGl0LiAKK1RoaXMgZGlyZWN0aXZlIGFkZHMgYW4gZW50cnkgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBzdWZmaXhlcywgYnV0CitzaW5jZSB0aGUgbGlzdCBpcyBzZWFyY2hlZCBmcm9tIHRoZSBlbmQgYmFja3dhcmRzLCBpdCBpcyBlZmZlY3RpdmVseQorcG9zc2libGUgdG8gb3ZlcnJpZGUgZWFybGllciBlbnRyaWVzIHVzaW5nIHRoaXMgdGVjaG5pcXVlLgorCisgPC9kbD4KKworIDxwPkdDQyBoYXMgdGhlIGZvbGxvd2luZyBzcGVjIHN0cmluZ3MgYnVpbHQgaW50byBpdC4gIFNwZWMgZmlsZXMgY2FuCitvdmVycmlkZSB0aGVzZSBzdHJpbmdzIG9yIGNyZWF0ZSB0aGVpciBvd24uICBOb3RlIHRoYXQgaW5kaXZpZHVhbAordGFyZ2V0cyBjYW4gYWxzbyBhZGQgdGhlaXIgb3duIHNwZWMgc3RyaW5ncyB0byB0aGlzIGxpc3QuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBhc20gICAgICAgICAgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBhc3NlbWJsZXIKKyAgICAgYXNtX2ZpbmFsICAgIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgYXNzZW1ibGVyIHBvc3QtcHJvY2Vzc29yCisgICAgIGNwcCAgICAgICAgICBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEMgcHJlcHJvY2Vzc29yCisgICAgIGNjMSAgICAgICAgICBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEMgY29tcGlsZXIKKyAgICAgY2MxcGx1cyAgICAgIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQysrIGNvbXBpbGVyCisgICAgIGVuZGZpbGUgICAgICBPYmplY3QgZmlsZXMgdG8gaW5jbHVkZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5rCisgICAgIGxpbmsgICAgICAgICBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGxpbmtlcgorICAgICBsaWIgICAgICAgICAgTGlicmFyaWVzIHRvIGluY2x1ZGUgb24gdGhlIGNvbW1hbmQgbGluZSB0byB0aGUgbGlua2VyCisgICAgIGxpYmdjYyAgICAgICBEZWNpZGVzIHdoaWNoIEdDQyBzdXBwb3J0IGxpYnJhcnkgdG8gcGFzcyB0byB0aGUgbGlua2VyCisgICAgIGxpbmtlciAgICAgICBTZXRzIHRoZSBuYW1lIG9mIHRoZSBsaW5rZXIKKyAgICAgcHJlZGVmaW5lcyAgIERlZmluZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDIHByZXByb2Nlc3NvcgorICAgICBzaWduZWRfY2hhciAgRGVmaW5lcyB0byBwYXNzIHRvIENQUCB0byBzYXkgd2hldGhlciA8Y29kZT5jaGFyPC9jb2RlPiBpcyBzaWduZWQKKyAgICAgICAgICAgICAgICAgIGJ5IGRlZmF1bHQKKyAgICAgc3RhcnRmaWxlICAgIE9iamVjdCBmaWxlcyB0byBpbmNsdWRlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluaworPC9wcmU+CisgPHA+SGVyZSBpcyBhIHNtYWxsIGV4YW1wbGUgb2YgYSBzcGVjIGZpbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAlcmVuYW1lIGxpYiAgICAgICAgICAgICAgICAgb2xkX2xpYgorICAgICAKKyAgICAgKmxpYjoKKyAgICAgLS1zdGFydC1ncm91cCAtbGdjYyAtbGMgLWxldmFsMSAtLWVuZC1ncm91cCAlKG9sZF9saWIpCis8L3ByZT4KKyA8cD5UaGlzIGV4YW1wbGUgcmVuYW1lcyB0aGUgc3BlYyBjYWxsZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5saWI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vbGRfbGliPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZAordGhlbiBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGRlZmluaXRpb24gb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5saWI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2l0aCBhIG5ldyBvbmUuIAorVGhlIG5ldyBkZWZpbml0aW9uIGFkZHMgaW4gc29tZSBleHRyYSBjb21tYW5kLWxpbmUgb3B0aW9ucyBiZWZvcmUKK2luY2x1ZGluZyB0aGUgdGV4dCBvZiB0aGUgb2xkIGRlZmluaXRpb24uCisKKyA8cD48ZGZuPlNwZWMgc3RyaW5nczwvZGZuPiBhcmUgYSBsaXN0IG9mIGNvbW1hbmQtbGluZSBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byB0aGVpcgorY29ycmVzcG9uZGluZyBwcm9ncmFtLiAgSW4gYWRkaXRpb24sIHRoZSBzcGVjIHN0cmluZ3MgY2FuIGNvbnRhaW4KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOy1wcmVmaXhlZCBzZXF1ZW5jZXMgdG8gc3Vic3RpdHV0ZSB2YXJpYWJsZSB0ZXh0IG9yIHRvCitjb25kaXRpb25hbGx5IGluc2VydCB0ZXh0IGludG8gdGhlIGNvbW1hbmQgbGluZS4gIFVzaW5nIHRoZXNlIGNvbnN0cnVjdHMKK2l0IGlzIHBvc3NpYmxlIHRvIGdlbmVyYXRlIHF1aXRlIGNvbXBsZXggY29tbWFuZCBsaW5lcy4KKworIDxwPkhlcmUgaXMgYSB0YWJsZSBvZiBhbGwgZGVmaW5lZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiU8L3NwYW4+PC9zYW1wPiZyc3F1bzstc2VxdWVuY2VzIGZvciBzcGVjCitzdHJpbmdzLiAgTm90ZSB0aGF0IHNwYWNlcyBhcmUgbm90IGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGFyb3VuZCB0aGUKK3Jlc3VsdHMgb2YgZXhwYW5kaW5nIHRoZXNlIHNlcXVlbmNlcy4gIFRoZXJlZm9yZSB5b3UgY2FuIGNvbmNhdGVuYXRlIHRoZW0KK3RvZ2V0aGVyIG9yIGNvbWJpbmUgdGhlbSB3aXRoIGNvbnN0YW50IHRleHQgaW4gYSBzaW5nbGUgYXJndW1lbnQuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiUlPC9jb2RlPjxkZD5TdWJzdGl0dXRlIG9uZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW50byB0aGUgcHJvZ3JhbSBuYW1lIG9yIGFyZ3VtZW50LgorCisgICAgIDxicj48ZHQ+PGNvZGU+JWk8L2NvZGU+PGRkPlN1YnN0aXR1dGUgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGZpbGUgYmVpbmcgcHJvY2Vzc2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JWI8L2NvZGU+PGRkPlN1YnN0aXR1dGUgdGhlIGJhc2VuYW1lIG9mIHRoZSBpbnB1dCBmaWxlIGJlaW5nIHByb2Nlc3NlZC4gCitUaGlzIGlzIHRoZSBzdWJzdHJpbmcgdXAgdG8gKGFuZCBub3QgaW5jbHVkaW5nKSB0aGUgbGFzdCBwZXJpb2QKK2FuZCBub3QgaW5jbHVkaW5nIHRoZSBkaXJlY3RvcnkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lQjwvY29kZT48ZGQ+VGhpcyBpcyB0aGUgc2FtZSBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiViPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBidXQgaW5jbHVkZSB0aGUgZmlsZSBzdWZmaXggKHRleHQgYWZ0ZXIKK3RoZSBsYXN0IHBlcmlvZCkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lZDwvY29kZT48ZGQ+TWFya3MgdGhlIGFyZ3VtZW50IGNvbnRhaW5pbmcgb3IgZm9sbG93aW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVkPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGEKK3RlbXBvcmFyeSBmaWxlIG5hbWUsIHNvIHRoYXQgdGhhdCBmaWxlIGlzIGRlbGV0ZWQgaWYgR0NDIGV4aXRzCitzdWNjZXNzZnVsbHkuICBVbmxpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhpcyBjb250cmlidXRlcyBubyB0ZXh0IHRvIHRoZQorYXJndW1lbnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lZzwvY29kZT48dmFyPnN1ZmZpeDwvdmFyPjxkZD5TdWJzdGl0dXRlIGEgZmlsZSBuYW1lIHRoYXQgaGFzIHN1ZmZpeCA8dmFyPnN1ZmZpeDwvdmFyPiBhbmQgaXMgY2hvc2VuCitvbmNlIHBlciBjb21waWxhdGlvbiwgYW5kIG1hcmsgdGhlIGFyZ3VtZW50IGluIHRoZSBzYW1lIHdheSBhcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRvIHJlZHVjZSBleHBvc3VyZSB0byBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzLCB0aGUgZmlsZQorbmFtZSBpcyBub3cgY2hvc2VuIGluIGEgd2F5IHRoYXQgaXMgaGFyZCB0byBwcmVkaWN0IGV2ZW4gd2hlbiBwcmV2aW91c2x5CitjaG9zZW4gZmlsZSBuYW1lcyBhcmUga25vd24uICBGb3IgZXhhbXBsZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZy5zIC4uLiAlZy5vIC4uLiAlZy5zPC9zcGFuPjwvc2FtcD4mcnNxdW87CittaWdodCB0dXJuIGludG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jY1VWVVVBVS5zIGNjWFlBWFoxMi5vIGNjVVZVVUFVLnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICA8dmFyPnN1ZmZpeDwvdmFyPiBtYXRjaGVzCit0aGUgcmVnZXhwICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Wy5BLVphLXpdKjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciB0aGUgc3BlY2lhbCBzdHJpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lTzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgd2hpY2ggaXMKK3RyZWF0ZWQgZXhhY3RseSBhcyBpZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVPPC9zcGFuPjwvc2FtcD4mcnNxdW87IGhhZCBiZWVuIHByZXByb2Nlc3NlZC4gIFByZXZpb3VzbHksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWc8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3dhcyBzaW1wbHkgc3Vic3RpdHV0ZWQgd2l0aCBhIGZpbGUgbmFtZSBjaG9zZW4gb25jZSBwZXIgY29tcGlsYXRpb24sCit3aXRob3V0IHJlZ2FyZCB0byBhbnkgYXBwZW5kZWQgc3VmZml4ICh3aGljaCB3YXMgdGhlcmVmb3JlIHRyZWF0ZWQKK2p1c3QgbGlrZSBvcmRpbmFyeSB0ZXh0KSwgbWFraW5nIHN1Y2ggYXR0YWNrcyBtb3JlIGxpa2VseSB0byBzdWNjZWVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JXU8L2NvZGU+PHZhcj5zdWZmaXg8L3Zhcj48ZGQ+TGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVnPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBidXQgZ2VuZXJhdGVzIGEgbmV3IHRlbXBvcmFyeSBmaWxlIG5hbWUKK2VhY2ggdGltZSBpdCBhcHBlYXJzIGluc3RlYWQgb2Ygb25jZSBwZXIgY29tcGlsYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4lVTwvY29kZT48dmFyPnN1ZmZpeDwvdmFyPjxkZD5TdWJzdGl0dXRlcyB0aGUgbGFzdCBmaWxlIG5hbWUgZ2VuZXJhdGVkIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldTwvc3Bhbj48dmFyPnN1ZmZpeDwvdmFyPjwvc2FtcD4mcnNxdW87LCBnZW5lcmF0aW5nIGEKK25ldyBvbmUgaWYgdGhlcmUgaXMgbm8gc3VjaCBsYXN0IGZpbGUgbmFtZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFueQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldTwvc3Bhbj48dmFyPnN1ZmZpeDwvdmFyPjwvc2FtcD4mcnNxdW87LCB0aGlzIGlzIGp1c3QgbGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVnPC9zcGFuPjx2YXI+c3VmZml4PC92YXI+PC9zYW1wPiZyc3F1bzssIGV4Y2VwdCB0aGV5IGRvbid0IHNoYXJlCit0aGUgc2FtZSBzdWZmaXggPGVtPnNwYWNlPC9lbT4sIHNvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWcucyAuLi4gJVUucyAuLi4gJWcucyAuLi4gJVUuczwvc3Bhbj48L3NhbXA+JnJzcXVvOworaW52b2x2ZXMgdGhlIGdlbmVyYXRpb24gb2YgdHdvIGRpc3RpbmN0IGZpbGUgbmFtZXMsIG9uZQorZm9yIGVhY2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZy5zPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBhbm90aGVyIGZvciBlYWNoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JVUuczwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFByZXZpb3VzbHksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JVU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2FzCitzaW1wbHkgc3Vic3RpdHV0ZWQgd2l0aCBhIGZpbGUgbmFtZSBjaG9zZW4gZm9yIHRoZSBwcmV2aW91cyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV1PC9zcGFuPjwvc2FtcD4mcnNxdW87LAord2l0aG91dCByZWdhcmQgdG8gYW55IGFwcGVuZGVkIHN1ZmZpeC4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVqPC9jb2RlPjx2YXI+c3VmZml4PC92YXI+PGRkPlN1YnN0aXR1dGVzIHRoZSBuYW1lIG9mIHRoZSA8Y29kZT5IT1NUX0JJVF9CVUNLRVQ8L2NvZGU+LCBpZiBhbnksIGFuZCBpZiBpdCBpcword3JpdGFibGUsIGFuZCBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc2F2ZS10ZW1wczwvc3Bhbj48L3NhbXA+IGlzIG5vdCB1c2VkOworb3RoZXJ3aXNlLCBzdWJzdGl0dXRlIHRoZSBuYW1lCitvZiBhIHRlbXBvcmFyeSBmaWxlLCBqdXN0IGxpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ldTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoaXMgdGVtcG9yYXJ5IGZpbGUgaXMgbm90CittZWFudCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHByb2Nlc3NlcywgYnV0IHJhdGhlciBhcyBhIGp1bmsKK2Rpc3Bvc2FsIG1lY2hhbmlzbS4KKworICAgICA8YnI+PGR0Pjxjb2RlPiV8PC9jb2RlPjx2YXI+c3VmZml4PC92YXI+PGR0Pjxjb2RlPiVtPC9jb2RlPjx2YXI+c3VmZml4PC92YXI+PGRkPkxpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lZzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgZXhjZXB0IGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1waXBlPC9zcGFuPjwvc2FtcD4gaXMgaW4gZWZmZWN0LiAgSW4gdGhhdCBjYXNlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiV8PC9zcGFuPjwvc2FtcD4mcnNxdW87IHN1YnN0aXR1dGVzIGEgc2luZ2xlIGRhc2ggYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3Vic3RpdHV0ZXMgbm90aGluZyBhdAorYWxsLiAgVGhlc2UgYXJlIHRoZSB0d28gbW9zdCBjb21tb24gd2F5cyB0byBpbnN0cnVjdCBhIHByb2dyYW0gdGhhdCBpdAorc2hvdWxkIHJlYWQgZnJvbSBzdGFuZGFyZCBpbnB1dCBvciB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQuICBJZiB5b3UKK25lZWQgc29tZXRoaW5nIG1vcmUgZWxhYm9yYXRlIHlvdSBjYW4gdXNlIGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXtwaXBlOjwvc3Bhbj48Y29kZT5YPC9jb2RlPjxzcGFuIGNsYXNzPSJzYW1wIj59PC9zcGFuPjwvc2FtcD4mcnNxdW87Citjb25zdHJ1Y3Q6IHNlZSBmb3IgZXhhbXBsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zi9sYW5nLXNwZWNzLmg8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiUuPC9jb2RlPjx2YXI+U1VGRklYPC92YXI+PGRkPlN1YnN0aXR1dGVzIDx2YXI+LlNVRkZJWDwvdmFyPiBmb3IgdGhlIHN1ZmZpeGVzIG9mIGEgbWF0Y2hlZCBzd2l0Y2gncyBhcmdzCit3aGVuIGl0IGlzIHN1YnNlcXVlbnRseSBvdXRwdXQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiUqPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgPHZhcj5TVUZGSVg8L3Zhcj4gaXMKK3Rlcm1pbmF0ZWQgYnkgdGhlIG5leHQgc3BhY2Ugb3IgJS4KKworICAgICA8YnI+PGR0Pjxjb2RlPiV3PC9jb2RlPjxkZD5NYXJrcyB0aGUgYXJndW1lbnQgY29udGFpbmluZyBvciBmb2xsb3dpbmcgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgdGhlCitkZXNpZ25hdGVkIG91dHB1dCBmaWxlIG9mIHRoaXMgY29tcGlsYXRpb24uICBUaGlzIHB1dHMgdGhlIGFyZ3VtZW50CitpbnRvIHRoZSBzZXF1ZW5jZSBvZiBhcmd1bWVudHMgdGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVvPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN1YnN0aXR1dGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JW88L2NvZGU+PGRkPlN1YnN0aXR1dGVzIHRoZSBuYW1lcyBvZiBhbGwgdGhlIG91dHB1dCBmaWxlcywgd2l0aCBzcGFjZXMKK2F1dG9tYXRpY2FsbHkgcGxhY2VkIGFyb3VuZCB0aGVtLiAgWW91IHNob3VsZCB3cml0ZSBzcGFjZXMKK2Fyb3VuZCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyB3ZWxsIG9yIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBmb3IgdXNlIGluIHRoZSBzcGVjcyBmb3IgcnVubmluZyB0aGUgbGlua2VyLiAKK0lucHV0IGZpbGVzIHdob3NlIG5hbWVzIGhhdmUgbm8gcmVjb2duaXplZCBzdWZmaXggYXJlIG5vdCBjb21waWxlZAorYXQgYWxsLCBidXQgdGhleSBhcmUgaW5jbHVkZWQgYW1vbmcgdGhlIG91dHB1dCBmaWxlcywgc28gdGhleSBhcmUKK2xpbmtlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVPPC9jb2RlPjxkZD5TdWJzdGl0dXRlcyB0aGUgc3VmZml4IGZvciBvYmplY3QgZmlsZXMuICBOb3RlIHRoYXQgdGhpcyBpcworaGFuZGxlZCBzcGVjaWFsbHkgd2hlbiBpdCBpbW1lZGlhdGVseSBmb2xsb3dzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JWcsICV1LCBvciAlVTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK2JlY2F1c2Ugb2YgdGhlIG5lZWQgZm9yIHRob3NlIHRvIGZvcm0gY29tcGxldGUgZmlsZSBuYW1lcy4gIFRoZQoraGFuZGxpbmcgaXMgc3VjaCB0aGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JU88L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdHJlYXRlZCBleGFjdGx5IGFzIGlmIGl0IGhhZCBhbHJlYWR5CitiZWVuIHN1YnN0aXR1dGVkLCBleGNlcHQgdGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVnLCAldSwgYW5kICVVPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRvIG5vdCBjdXJyZW50bHkKK3N1cHBvcnQgYWRkaXRpb25hbCA8dmFyPnN1ZmZpeDwvdmFyPiBjaGFyYWN0ZXJzIGZvbGxvd2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVPPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIHRoZXkgZG8KK2ZvbGxvd2luZywgZm9yIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lm88L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lcDwvY29kZT48ZGQ+U3Vic3RpdHV0ZXMgdGhlIHN0YW5kYXJkIG1hY3JvIHByZWRlZmluaXRpb25zIGZvciB0aGUKK2N1cnJlbnQgdGFyZ2V0IG1hY2hpbmUuICBVc2UgdGhpcyB3aGVuIHJ1bm5pbmcgPGNvZGU+Y3BwPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVQPC9jb2RlPjxkZD5MaWtlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXA8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGJ1dCBwdXRzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X188L3NwYW4+PC9zYW1wPiZyc3F1bzsgYmVmb3JlIGFuZCBhZnRlciB0aGUgbmFtZSBvZiBlYWNoCitwcmVkZWZpbmVkIG1hY3JvLCBleGNlcHQgZm9yIG1hY3JvcyB0aGF0IHN0YXJ0IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fXzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciB3aXRoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl88L3NwYW4+PHZhcj5MPC92YXI+PC9zYW1wPiZyc3F1bzssIHdoZXJlIDx2YXI+TDwvdmFyPiBpcyBhbiB1cHBlcmNhc2UgbGV0dGVyLiAgVGhpcyBpcyBmb3IgSVNPCitDLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JUk8L2NvZGU+PGRkPlN1YnN0aXR1dGUgYW55IG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pcHJlZml4PC9zcGFuPjwvc2FtcD4gKG1hZGUgZnJvbSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HQ0NfRVhFQ19QUkVGSVg8L3NwYW4+PC9zYW1wPiksCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiAobWFkZSBmcm9tIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPlRBUkdFVF9TWVNURU1fUk9PVDwvc3Bhbj48L3NhbXA+KSwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pc3lzdGVtPC9zcGFuPjwvc2FtcD4gKG1hZGUgZnJvbSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5DT01QSUxFUl9QQVRIPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1CPC9zcGFuPjwvc2FtcD4gb3B0aW9ucykKK2FuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taW11bHRpbGliPC9zcGFuPjwvc2FtcD4gYXMgbmVjZXNzYXJ5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+JXM8L2NvZGU+PGRkPkN1cnJlbnQgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBsaWJyYXJ5IG9yIHN0YXJ0dXAgZmlsZSBvZiBzb21lIHNvcnQuIAorU2VhcmNoIGZvciB0aGF0IGZpbGUgaW4gYSBzdGFuZGFyZCBsaXN0IG9mIGRpcmVjdG9yaWVzIGFuZCBzdWJzdGl0dXRlCit0aGUgZnVsbCBuYW1lIGZvdW5kLiAgVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgaW5jbHVkZWQgaW4gdGhlCitsaXN0IG9mIGRpcmVjdG9yaWVzIHNjYW5uZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lVDwvY29kZT48ZGQ+Q3VycmVudCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIGxpbmtlciBzY3JpcHQuICBTZWFyY2ggZm9yIHRoYXQgZmlsZQoraW4gdGhlIGN1cnJlbnQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzY2FuIGZvciBsaWJyYXJpZXMuIElmIHRoZSBmaWxlCitpcyBsb2NhdGVkIGluc2VydCBhIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2NyaXB0PC9zcGFuPjwvc2FtcD4gb3B0aW9uIGludG8gdGhlIGNvbW1hbmQgbGluZQorZm9sbG93ZWQgYnkgdGhlIGZ1bGwgcGF0aCBuYW1lIGZvdW5kLiAgSWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kIHRoZW4KK2dlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UuICBOb3RlOiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBub3QKK3NlYXJjaGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JWU8L2NvZGU+PHZhcj5zdHI8L3Zhcj48ZGQ+UHJpbnQgPHZhcj5zdHI8L3Zhcj4gYXMgYW4gZXJyb3IgbWVzc2FnZS4gIDx2YXI+c3RyPC92YXI+IGlzIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLiAKK1VzZSB0aGlzIHdoZW4gaW5jb25zaXN0ZW50IG9wdGlvbnMgYXJlIGRldGVjdGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JSg8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+U3Vic3RpdHV0ZSB0aGUgY29udGVudHMgb2Ygc3BlYyBzdHJpbmcgPHZhcj5uYW1lPC92YXI+IGF0IHRoaXMgcG9pbnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4leHs8L2NvZGU+PHZhcj5vcHRpb248L3Zhcj48Y29kZT59PC9jb2RlPjxkZD5BY2N1bXVsYXRlIGFuIG9wdGlvbiBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4lWDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVYPC9jb2RlPjxkZD5PdXRwdXQgdGhlIGFjY3VtdWxhdGVkIGxpbmtlciBvcHRpb25zIHNwZWNpZmllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2w8L3NwYW4+PC9zYW1wPiBvciBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3NwZWMgc3RyaW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JVk8L2NvZGU+PGRkPk91dHB1dCB0aGUgYWNjdW11bGF0ZWQgYXNzZW1ibGVyIG9wdGlvbnMgc3BlY2lmaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+JVo8L2NvZGU+PGRkPk91dHB1dCB0aGUgYWNjdW11bGF0ZWQgcHJlcHJvY2Vzc29yIG9wdGlvbnMgc3BlY2lmaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XcDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+JWE8L2NvZGU+PGRkPlByb2Nlc3MgdGhlIDxjb2RlPmFzbTwvY29kZT4gc3BlYy4gIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlIHRoZQorc3dpdGNoZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBhc3NlbWJsZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lQTwvY29kZT48ZGQ+UHJvY2VzcyB0aGUgPGNvZGU+YXNtX2ZpbmFsPC9jb2RlPiBzcGVjLiAgVGhpcyBpcyBhIHNwZWMgc3RyaW5nIGZvcgorcGFzc2luZyBzd2l0Y2hlcyB0byBhbiBhc3NlbWJsZXIgcG9zdC1wcm9jZXNzb3IsIGlmIHN1Y2ggYSBwcm9ncmFtIGlzCituZWVkZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lbDwvY29kZT48ZGQ+UHJvY2VzcyB0aGUgPGNvZGU+bGluazwvY29kZT4gc3BlYy4gIFRoaXMgaXMgdGhlIHNwZWMgZm9yIGNvbXB1dGluZyB0aGUKK2NvbW1hbmQgbGluZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4gIFR5cGljYWxseSBpdCBtYWtlcyB1c2Ugb2YgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiVMICVHICVTICVEIGFuZCAlRTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZXF1ZW5jZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lRDwvY29kZT48ZGQ+RHVtcCBvdXQgYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBmb3IgZWFjaCBkaXJlY3RvcnkgdGhhdCBHQ0MgYmVsaWV2ZXMgbWlnaHQKK2NvbnRhaW4gc3RhcnR1cCBmaWxlcy4gIElmIHRoZSB0YXJnZXQgc3VwcG9ydHMgbXVsdGlsaWJzIHRoZW4gdGhlCitjdXJyZW50IG11bHRpbGliIGRpcmVjdG9yeSBpcyBwcmVwZW5kZWQgdG8gZWFjaCBvZiB0aGVzZSBwYXRocy4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVMPC9jb2RlPjxkZD5Qcm9jZXNzIHRoZSA8Y29kZT5saWI8L2NvZGU+IHNwZWMuICBUaGlzIGlzIGEgc3BlYyBzdHJpbmcgZm9yIGRlY2lkaW5nIHdoaWNoCitsaWJyYXJpZXMgYXJlIGluY2x1ZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgdG8gdGhlIGxpbmtlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVHPC9jb2RlPjxkZD5Qcm9jZXNzIHRoZSA8Y29kZT5saWJnY2M8L2NvZGU+IHNwZWMuICBUaGlzIGlzIGEgc3BlYyBzdHJpbmcgZm9yIGRlY2lkaW5nCit3aGljaCBHQ0Mgc3VwcG9ydCBsaWJyYXJ5IGlzIGluY2x1ZGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgdG8gdGhlIGxpbmtlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVTPC9jb2RlPjxkZD5Qcm9jZXNzIHRoZSA8Y29kZT5zdGFydGZpbGU8L2NvZGU+IHNwZWMuICBUaGlzIGlzIGEgc3BlYyBmb3IgZGVjaWRpbmcgd2hpY2gKK29iamVjdCBmaWxlcyBhcmUgdGhlIGZpcnN0IG9uZXMgcGFzc2VkIHRvIHRoZSBsaW5rZXIuICBUeXBpY2FsbHkKK3RoaXMgbWlnaHQgYmUgYSBmaWxlIG5hbWVkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jcnQwLm88L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVFPC9jb2RlPjxkZD5Qcm9jZXNzIHRoZSA8Y29kZT5lbmRmaWxlPC9jb2RlPiBzcGVjLiAgVGhpcyBpcyBhIHNwZWMgc3RyaW5nIHRoYXQgc3BlY2lmaWVzCit0aGUgbGFzdCBvYmplY3QgZmlsZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lQzwvY29kZT48ZGQ+UHJvY2VzcyB0aGUgPGNvZGU+Y3BwPC9jb2RlPiBzcGVjLiAgVGhpcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgYXJndW1lbnRzCit0byBiZSBwYXNzZWQgdG8gdGhlIEMgcHJlcHJvY2Vzc29yLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JTE8L2NvZGU+PGRkPlByb2Nlc3MgdGhlIDxjb2RlPmNjMTwvY29kZT4gc3BlYy4gIFRoaXMgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIG9wdGlvbnMgdG8gYmUKK3Bhc3NlZCB0byB0aGUgYWN0dWFsIEMgY29tcGlsZXIgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2MxPC9zcGFuPjwvc2FtcD4mcnNxdW87KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPiUyPC9jb2RlPjxkZD5Qcm9jZXNzIHRoZSA8Y29kZT5jYzFwbHVzPC9jb2RlPiBzcGVjLiAgVGhpcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgb3B0aW9ucyB0byBiZQorcGFzc2VkIHRvIHRoZSBhY3R1YWwgQysrIGNvbXBpbGVyICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNjMXBsdXM8L3NwYW4+PC9zYW1wPiZyc3F1bzspLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JSo8L2NvZGU+PGRkPlN1YnN0aXR1dGUgdGhlIHZhcmlhYmxlIHBhcnQgb2YgYSBtYXRjaGVkIG9wdGlvbi4gIFNlZSBiZWxvdy4gCitOb3RlIHRoYXQgZWFjaCBjb21tYSBpbiB0aGUgc3Vic3RpdHV0ZWQgc3RyaW5nIGlzIHJlcGxhY2VkIGJ5CithIHNpbmdsZSBzcGFjZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPiUmbHQ7UzwvY29kZT48ZGQ+UmVtb3ZlIGFsbCBvY2N1cnJlbmNlcyBvZiA8Y29kZT4tUzwvY29kZT4gZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgTm90ZSZtZGFzaDt0aGlzCitjb21tYW5kIGlzIHBvc2l0aW9uIGRlcGVuZGVudC4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kcyBpbiB0aGUgc3BlYyBzdHJpbmcKK2JlZm9yZSB0aGlzIG9uZSBzZWUgPGNvZGU+LVM8L2NvZGU+LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZHMgaW4gdGhlIHNwZWMgc3RyaW5nCithZnRlciB0aGlzIG9uZSBkbyBub3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lOjwvY29kZT48dmFyPmZ1bmN0aW9uPC92YXI+PGNvZGU+KDwvY29kZT48dmFyPmFyZ3M8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5DYWxsIHRoZSBuYW1lZCBmdW5jdGlvbiA8dmFyPmZ1bmN0aW9uPC92YXI+LCBwYXNzaW5nIGl0IDx2YXI+YXJnczwvdmFyPi4gCis8dmFyPmFyZ3M8L3Zhcj4gaXMgZmlyc3QgcHJvY2Vzc2VkIGFzIGEgbmVzdGVkIHNwZWMgc3RyaW5nLCB0aGVuIHNwbGl0CitpbnRvIGFuIGFyZ3VtZW50IHZlY3RvciBpbiB0aGUgdXN1YWwgZmFzaGlvbi4gIFRoZSBmdW5jdGlvbiByZXR1cm5zCithIHN0cmluZyB3aGljaCBpcyBwcm9jZXNzZWQgYXMgaWYgaXQgaGFkIGFwcGVhcmVkIGxpdGVyYWxseSBhcyBwYXJ0CitvZiB0aGUgY3VycmVudCBzcGVjLgorCisgICAgIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gc3BlYyBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkOgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmdldGVudjwvY29kZT48ZGQ+VGhlIDxjb2RlPmdldGVudjwvY29kZT4gc3BlYyBmdW5jdGlvbiB0YWtlcyB0d28gYXJndW1lbnRzOiBhbiBlbnZpcm9ubWVudAordmFyaWFibGUgbmFtZSBhbmQgYSBzdHJpbmcuICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90CitkZWZpbmVkLCBhIGZhdGFsIGVycm9yIGlzIGlzc3VlZC4gIE90aGVyd2lzZSwgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUKK3ZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgc3RyaW5nLiAgRm9yCitleGFtcGxlLCBpZiA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5UT1BESVI8L3NwYW4+PC9zYW1wPiBpcyBkZWZpbmVkIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vcGF0aC90by90b3A8L3NwYW4+PC9zYW1wPiwgdGhlbjoKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgJTpnZXRlbnYoVE9QRElSIC9pbmNsdWRlKQorPC9wcmU+CisgICAgICAgICAgPHA+ZXhwYW5kcyB0byA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3BhdGgvdG8vdG9wL2luY2x1ZGU8L3NwYW4+PC9zYW1wPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+aWYtZXhpc3RzPC9jb2RlPjxkZD5UaGUgPGNvZGU+aWYtZXhpc3RzPC9jb2RlPiBzcGVjIGZ1bmN0aW9uIHRha2VzIG9uZSBhcmd1bWVudCwgYW4gYWJzb2x1dGUKK3BhdGhuYW1lIHRvIGEgZmlsZS4gIElmIHRoZSBmaWxlIGV4aXN0cywgPGNvZGU+aWYtZXhpc3RzPC9jb2RlPiByZXR1cm5zIHRoZQorcGF0aG5hbWUuICBIZXJlIGlzIGEgc21hbGwgZXhhbXBsZSBvZiBpdHMgdXNhZ2U6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgICpzdGFydGZpbGU6CisgICAgICAgICAgICAgICBjcnQwJU8lcyAlOmlmLWV4aXN0cyhjcnRpJU8lcykgY3J0YmVnaW4lTyVzCis8L3ByZT4KKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmlmLWV4aXN0cy1lbHNlPC9jb2RlPjxkZD5UaGUgPGNvZGU+aWYtZXhpc3RzLWVsc2U8L2NvZGU+IHNwZWMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgPGNvZGU+aWYtZXhpc3RzPC9jb2RlPgorc3BlYyBmdW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQgdGFrZXMgdHdvIGFyZ3VtZW50cy4gIFRoZSBmaXJzdCBhcmd1bWVudCBpcworYW4gYWJzb2x1dGUgcGF0aG5hbWUgdG8gYSBmaWxlLiAgSWYgdGhlIGZpbGUgZXhpc3RzLCA8Y29kZT5pZi1leGlzdHMtZWxzZTwvY29kZT4KK3JldHVybnMgdGhlIHBhdGhuYW1lLiAgSWYgaXQgZG9lcyBub3QgZXhpc3QsIGl0IHJldHVybnMgdGhlIHNlY29uZCBhcmd1bWVudC4gCitUaGlzIHdheSwgPGNvZGU+aWYtZXhpc3RzLWVsc2U8L2NvZGU+IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBvbmUgZmlsZSBvciBhbm90aGVyLAorYmFzZWQgb24gdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZmlyc3QuICBIZXJlIGlzIGEgc21hbGwgZXhhbXBsZSBvZiBpdHMgdXNhZ2U6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgICpzdGFydGZpbGU6CisgICAgICAgICAgICAgICBjcnQwJU8lcyAlOmlmLWV4aXN0cyhjcnRpJU8lcykgXAorICAgICAgICAgICAgICAgJTppZi1leGlzdHMtZWxzZShjcnRiZWdpblQlTyVzIGNydGJlZ2luJU8lcykKKzwvcHJlPgorICAgICAgICAgIDxicj48ZHQ+PGNvZGU+cmVwbGFjZS1vdXRmaWxlPC9jb2RlPjxkZD5UaGUgPGNvZGU+cmVwbGFjZS1vdXRmaWxlPC9jb2RlPiBzcGVjIGZ1bmN0aW9uIHRha2VzIHR3byBhcmd1bWVudHMuICBJdCBsb29rcyBmb3IgdGhlCitmaXJzdCBhcmd1bWVudCBpbiB0aGUgb3V0ZmlsZXMgYXJyYXkgYW5kIHJlcGxhY2VzIGl0IHdpdGggdGhlIHNlY29uZCBhcmd1bWVudC4gIEhlcmUKK2lzIGEgc21hbGwgZXhhbXBsZSBvZiBpdHMgdXNhZ2U6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgICV7ZmdudS1ydW50aW1lOiU6cmVwbGFjZS1vdXRmaWxlKC1sb2JqYyAtbG9iamMtZ251KX0KKzwvcHJlPgorICAgICAgICAgIDxicj48ZHQ+PGNvZGU+cmVtb3ZlLW91dGZpbGU8L2NvZGU+PGRkPlRoZSA8Y29kZT5yZW1vdmUtb3V0ZmlsZTwvY29kZT4gc3BlYyBmdW5jdGlvbiB0YWtlcyBvbmUgYXJndW1lbnQuICBJdCBsb29rcyBmb3IgdGhlCitmaXJzdCBhcmd1bWVudCBpbiB0aGUgb3V0ZmlsZXMgYXJyYXkgYW5kIHJlbW92ZXMgaXQuICBIZXJlIGlzIGEgc21hbGwgZXhhbXBsZQoraXRzIHVzYWdlOgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAlOnJlbW92ZS1vdXRmaWxlKC1sbSkKKzwvcHJlPgorICAgICAgICAgIDxicj48ZHQ+PGNvZGU+cGFzcy10aHJvdWdoLWxpYnM8L2NvZGU+PGRkPlRoZSA8Y29kZT5wYXNzLXRocm91Z2gtbGliczwvY29kZT4gc3BlYyBmdW5jdGlvbiB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIEl0CitmaW5kcyBhbnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWw8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFuZCBhbnkgbm9uLW9wdGlvbnMgZW5kaW5nIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uYTwvc3Bhbj48L3NhbXA+ICh3aGljaCBpdAorYXNzdW1lcyBhcmUgdGhlIG5hbWVzIG9mIGxpbmtlciBpbnB1dCBsaWJyYXJ5IGFyY2hpdmUgZmlsZXMpIGFuZCByZXR1cm5zIGEKK3Jlc3VsdCBjb250YWluaW5nIGFsbCB0aGUgZm91bmQgYXJndW1lbnRzIGVhY2ggcHJlcGVuZGVkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcGx1Z2luLW9wdD0tcGFzcy10aHJvdWdoPTwvc3Bhbj48L3NhbXA+IGFuZCBqb2luZWQgYnkgc3BhY2VzLiAgVGhpcyBsaXN0IGlzCitpbnRlbmRlZCB0byBiZSBwYXNzZWQgdG8gdGhlIExUTyBsaW5rZXIgcGx1Z2luLgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAlOnBhc3MtdGhyb3VnaC1saWJzKCVHICVMICVHKQorPC9wcmU+CisgICAgICAgICAgPGJyPjxkdD48Y29kZT5wcmludC1hc20taGVhZGVyPC9jb2RlPjxkZD5UaGUgPGNvZGU+cHJpbnQtYXNtLWhlYWRlcjwvY29kZT4gZnVuY3Rpb24gdGFrZXMgbm8gYXJndW1lbnRzIGFuZCBzaW1wbHkKK3ByaW50cyBhIGJhbm5lciBsaWtlOgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICBBc3NlbWJsZXIgb3B0aW9ucworICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgVXNlICItV2EsT1BUSU9OIiB0byBwYXNzICJPUFRJT04iIHRvIHRoZSBhc3NlbWJsZXIuCis8L3ByZT4KKyAgICAgICAgICA8cD5JdCBpcyB1c2VkIHRvIHNlcGFyYXRlIGNvbXBpbGVyIG9wdGlvbnMgZnJvbSBhc3NlbWJsZXIgb3B0aW9ucworaW4gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdGFyZ2V0LWhlbHA8L3NwYW4+PC9zYW1wPiBvdXRwdXQuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPiV7U308L2NvZGU+PGRkPlN1YnN0aXR1dGVzIHRoZSA8Y29kZT4tUzwvY29kZT4gc3dpdGNoLCBpZiB0aGF0IHN3aXRjaCBpcyBnaXZlbiB0byBHQ0MuIAorSWYgdGhhdCBzd2l0Y2ggaXMgbm90IHNwZWNpZmllZCwgdGhpcyBzdWJzdGl0dXRlcyBub3RoaW5nLiAgTm90ZSB0aGF0Cit0aGUgbGVhZGluZyBkYXNoIGlzIG9taXR0ZWQgd2hlbiBzcGVjaWZ5aW5nIHRoaXMgb3B0aW9uLCBhbmQgaXQgaXMKK2F1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaWYgdGhlIHN1YnN0aXR1dGlvbiBpcyBwZXJmb3JtZWQuICBUaHVzIHRoZSBzcGVjCitzdHJpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4le2Zvb308L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWF0Y2hlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9vPC9zcGFuPjwvc2FtcD4KK2FuZCBvdXRwdXRzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mb288L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVXe1N9PC9jb2RlPjxkZD5MaWtlICV7PGNvZGU+UzwvY29kZT59IGJ1dCBtYXJrIGxhc3QgYXJndW1lbnQgc3VwcGxpZWQgd2l0aGluIGFzIGEgZmlsZSB0byBiZQorZGVsZXRlZCBvbiBmYWlsdXJlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JXtTKn08L2NvZGU+PGRkPlN1YnN0aXR1dGVzIGFsbCB0aGUgc3dpdGNoZXMgc3BlY2lmaWVkIHRvIEdDQyB3aG9zZSBuYW1lcyBzdGFydAord2l0aCA8Y29kZT4tUzwvY29kZT4sIGJ1dCB3aGljaCBhbHNvIHRha2UgYW4gYXJndW1lbnQuICBUaGlzIGlzIHVzZWQgZm9yCitzd2l0Y2hlcyBsaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1EPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4sIGV0Yy4gCitHQ0MgY29uc2lkZXJzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1vIGZvbzwvc3Bhbj48L3NhbXA+IGFzIGJlaW5nCitvbmUgc3dpdGNoIHdob3NlIG5hbWUgc3RhcnRzIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgJXtvKn0gc3Vic3RpdHV0ZXMgdGhpcwordGV4dCwgaW5jbHVkaW5nIHRoZSBzcGFjZS4gIFRodXMgdHdvIGFyZ3VtZW50cyBhcmUgZ2VuZXJhdGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JXtTKiZhbXA7VCp9PC9jb2RlPjxkZD5MaWtlICV7PGNvZGU+UzwvY29kZT4qfSwgYnV0IHByZXNlcnZlIG9yZGVyIG9mIDxjb2RlPlM8L2NvZGU+IGFuZCA8Y29kZT5UPC9jb2RlPiBvcHRpb25zCisodGhlIG9yZGVyIG9mIDxjb2RlPlM8L2NvZGU+IGFuZCA8Y29kZT5UPC9jb2RlPiBpbiB0aGUgc3BlYyBpcyBub3Qgc2lnbmlmaWNhbnQpLiAKK1RoZXJlIGNhbiBiZSBhbnkgbnVtYmVyIG9mIGFtcGVyc2FuZC1zZXBhcmF0ZWQgdmFyaWFibGVzOyBmb3IgZWFjaCB0aGUKK3dpbGQgY2FyZCBpcyBvcHRpb25hbC4gIFVzZWZ1bCBmb3IgQ1BQIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JXtEKiZhbXA7VSomYW1wO0EqfTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPiV7UzpYfTwvY29kZT48ZGQ+U3Vic3RpdHV0ZXMgPGNvZGU+WDwvY29kZT4sIGlmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tUzwvc3Bhbj48L3NhbXA+IHN3aXRjaCBpcyBnaXZlbiB0byBHQ0MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4leyFTOlh9PC9jb2RlPjxkZD5TdWJzdGl0dXRlcyA8Y29kZT5YPC9jb2RlPiwgaWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1TPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGlzIDxlbT5ub3Q8L2VtPiBnaXZlbiB0byBHQ0MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4le1MqOlh9PC9jb2RlPjxkZD5TdWJzdGl0dXRlcyA8Y29kZT5YPC9jb2RlPiBpZiBvbmUgb3IgbW9yZSBzd2l0Y2hlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoCis8Y29kZT4tUzwvY29kZT4gYXJlIHNwZWNpZmllZCB0byBHQ0MuICBOb3JtYWxseSA8Y29kZT5YPC9jb2RlPiBpcyBzdWJzdGl0dXRlZCBvbmx5CitvbmNlLCBubyBtYXR0ZXIgaG93IG1hbnkgc3VjaCBzd2l0Y2hlcyBhcHBlYXJlZC4gIEhvd2V2ZXIsIGlmIDxjb2RlPiUqPC9jb2RlPgorYXBwZWFycyBzb21ld2hlcmUgaW4gPGNvZGU+WDwvY29kZT4sIHRoZW4gPGNvZGU+WDwvY29kZT4gaXMgc3Vic3RpdHV0ZWQgb25jZQorZm9yIGVhY2ggbWF0Y2hpbmcgc3dpdGNoLCB3aXRoIHRoZSA8Y29kZT4lKjwvY29kZT4gcmVwbGFjZWQgYnkgdGhlIHBhcnQgb2YKK3RoYXQgc3dpdGNoIG1hdGNoaW5nIHRoZSA8Y29kZT4qPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiV7LlM6WH08L2NvZGU+PGRkPlN1YnN0aXR1dGVzIDxjb2RlPlg8L2NvZGU+LCBpZiBwcm9jZXNzaW5nIGEgZmlsZSB3aXRoIHN1ZmZpeCA8Y29kZT5TPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiV7IS5TOlh9PC9jb2RlPjxkZD5TdWJzdGl0dXRlcyA8Y29kZT5YPC9jb2RlPiwgaWYgPGVtPm5vdDwvZW0+IHByb2Nlc3NpbmcgYSBmaWxlIHdpdGggc3VmZml4IDxjb2RlPlM8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+JXssUzpYfTwvY29kZT48ZGQ+U3Vic3RpdHV0ZXMgPGNvZGU+WDwvY29kZT4sIGlmIHByb2Nlc3NpbmcgYSBmaWxlIGZvciBsYW5ndWFnZSA8Y29kZT5TPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiV7ISxTOlh9PC9jb2RlPjxkZD5TdWJzdGl0dXRlcyA8Y29kZT5YPC9jb2RlPiwgaWYgbm90IHByb2Nlc3NpbmcgYSBmaWxlIGZvciBsYW5ndWFnZSA8Y29kZT5TPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiV7U3xQOlh9PC9jb2RlPjxkZD5TdWJzdGl0dXRlcyA8Y29kZT5YPC9jb2RlPiBpZiBlaXRoZXIgPGNvZGU+LVM8L2NvZGU+IG9yIDxjb2RlPi1QPC9jb2RlPiBpcyBnaXZlbiB0bworR0NDLiAgVGhpcyBtYXkgYmUgY29tYmluZWQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiE8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4sPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKKzxjb2RlPio8L2NvZGU+IHNlcXVlbmNlcyBhcyB3ZWxsLCBhbHRob3VnaCB0aGV5IGhhdmUgYSBzdHJvbmdlciBiaW5kaW5nIHRoYW4KK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJZiA8Y29kZT4lKjwvY29kZT4gYXBwZWFycyBpbiA8Y29kZT5YPC9jb2RlPiwgYWxsIG9mIHRoZQorYWx0ZXJuYXRpdmVzIG11c3QgYmUgc3RhcnJlZCwgYW5kIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nIGFsdGVybmF0aXZlCitpcyBzdWJzdGl0dXRlZC4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwgYSBzcGVjIHN0cmluZyBsaWtlIHRoaXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgJXsuYzotZm9vfSAleyEuYzotYmFyfSAley5jfGQ6LWJhen0gJXshLmN8ZDotYm9nZ2xlfQorPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+b3V0cHV0cyB0aGUgZm9sbG93aW5nIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gdGhlIGZvbGxvd2luZyBpbnB1dAorY29tbWFuZC1saW5lIG9wdGlvbnM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZnJlZC5jICAgICAgICAtZm9vIC1iYXoKKyAgICAgICAgICBqaW0uZCAgICAgICAgIC1iYXIgLWJvZ2dsZQorICAgICAgICAgIC1kIGZyZWQuYyAgICAgLWZvbyAtYmF6IC1ib2dnbGUKKyAgICAgICAgICAtZCBqaW0uZCAgICAgIC1iYXIgLWJheiAtYm9nZ2xlCis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4le1M6WDsgVDpZOyA6RH08L2NvZGU+PGRkPgorSWYgPGNvZGU+UzwvY29kZT4gaXMgZ2l2ZW4gdG8gR0NDLCBzdWJzdGl0dXRlcyA8Y29kZT5YPC9jb2RlPjsgZWxzZSBpZiA8Y29kZT5UPC9jb2RlPiBpcworZ2l2ZW4gdG8gR0NDLCBzdWJzdGl0dXRlcyA8Y29kZT5ZPC9jb2RlPjsgZWxzZSBzdWJzdGl0dXRlcyA8Y29kZT5EPC9jb2RlPi4gIFRoZXJlIGNhbgorYmUgYXMgbWFueSBjbGF1c2VzIGFzIHlvdSBuZWVkLiAgVGhpcyBtYXkgYmUgY29tYmluZWQgd2l0aCA8Y29kZT4uPC9jb2RlPiwKKzxjb2RlPiw8L2NvZGU+LCA8Y29kZT4hPC9jb2RlPiwgPGNvZGU+fDwvY29kZT4sIGFuZCA8Y29kZT4qPC9jb2RlPiBhcyBuZWVkZWQuCisKKyA8L2RsPgorCisgPHA+VGhlIGNvbmRpdGlvbmFsIHRleHQgPGNvZGU+WDwvY29kZT4gaW4gYSAlezxjb2RlPlM8L2NvZGU+Ojxjb2RlPlg8L2NvZGU+fSBvciBzaW1pbGFyCitjb25zdHJ1Y3QgbWF5IGNvbnRhaW4gb3RoZXIgbmVzdGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb25zdHJ1Y3RzIG9yIHNwYWNlcywgb3IKK2V2ZW4gbmV3bGluZXMuICBUaGV5IGFyZSBwcm9jZXNzZWQgYXMgdXN1YWwsIGFzIGRlc2NyaWJlZCBhYm92ZS4gCitUcmFpbGluZyB3aGl0ZSBzcGFjZSBpbiA8Y29kZT5YPC9jb2RlPiBpcyBpZ25vcmVkLiAgV2hpdGUgc3BhY2UgbWF5IGFsc28KK2FwcGVhciBhbnl3aGVyZSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBjb2xvbiBpbiB0aGVzZSBjb25zdHJ1Y3RzLAorZXhjZXB0IGJldHdlZW4gPGNvZGU+LjwvY29kZT4gb3IgPGNvZGU+KjwvY29kZT4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIHdvcmQuCisKKyA8cD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWY8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW08L3NwYW4+PC9zYW1wPiwgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XPC9zcGFuPjwvc2FtcD4gc3dpdGNoZXMgYXJlCitoYW5kbGVkIHNwZWNpZmljYWxseSBpbiB0aGVzZSBjb25zdHJ1Y3RzLiAgSWYgYW5vdGhlciB2YWx1ZSBvZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU88L3NwYW4+PC9zYW1wPiBvciB0aGUgbmVnYXRlZCBmb3JtIG9mIGEgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWY8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW08L3NwYW4+PC9zYW1wPiwgb3IKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XPC9zcGFuPjwvc2FtcD4gc3dpdGNoIGlzIGZvdW5kIGxhdGVyIGluIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBlYXJsaWVyCitzd2l0Y2ggdmFsdWUgaXMgaWdub3JlZCwgZXhjZXB0IHdpdGggezxjb2RlPlM8L2NvZGU+Kn0gd2hlcmUgPGNvZGU+UzwvY29kZT4gaXMKK2p1c3Qgb25lIGxldHRlciwgd2hpY2ggcGFzc2VzIGFsbCBtYXRjaGluZyBvcHRpb25zLgorCisgPHA+VGhlIGNoYXJhY3RlciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJlZGljYXRlIHRleHQgaXMgdXNlZCB0bworaW5kaWNhdGUgdGhhdCBhIGNvbW1hbmQgc2hvdWxkIGJlIHBpcGVkIHRvIHRoZSBmb2xsb3dpbmcgY29tbWFuZCwgYnV0Citvbmx5IGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1waXBlPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLgorCisgPHA+SXQgaXMgYnVpbHQgaW50byBHQ0Mgd2hpY2ggc3dpdGNoZXMgdGFrZSBhcmd1bWVudHMgYW5kIHdoaWNoIGRvIG5vdC4gCisoWW91IG1pZ2h0IHRoaW5rIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBnZW5lcmFsaXplIHRoaXMgdG8gYWxsb3cgZWFjaAorY29tcGlsZXIncyBzcGVjIHRvIHNheSB3aGljaCBzd2l0Y2hlcyB0YWtlIGFyZ3VtZW50cy4gIEJ1dCB0aGlzIGNhbm5vdAorYmUgZG9uZSBpbiBhIGNvbnNpc3RlbnQgZmFzaGlvbi4gIEdDQyBjYW5ub3QgZXZlbiBkZWNpZGUgd2hpY2ggaW5wdXQKK2ZpbGVzIGhhdmUgYmVlbiBzcGVjaWZpZWQgd2l0aG91dCBrbm93aW5nIHdoaWNoIHN3aXRjaGVzIHRha2UgYXJndW1lbnRzLAorYW5kIGl0IG11c3Qga25vdyB3aGljaCBpbnB1dCBmaWxlcyB0byBjb21waWxlIGluIG9yZGVyIHRvIHRlbGwgd2hpY2gKK2NvbXBpbGVycyB0byBydW4pLgorCisgPHA+R0NDIGFsc28ga25vd3MgaW1wbGljaXRseSB0aGF0IGFyZ3VtZW50cyBzdGFydGluZyBpbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+IGFyZSB0byBiZQordHJlYXRlZCBhcyBjb21waWxlciBvdXRwdXQgZmlsZXMsIGFuZCBwYXNzZWQgdG8gdGhlIGxpbmtlciBpbiB0aGVpcgorcHJvcGVyIHBvc2l0aW9uIGFtb25nIHRoZSBvdGhlciBvdXRwdXQgZmlsZXMuCisKKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdGFuZGFyZC1MaWJyYXJpZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RhbmRhcmQtTGlicmFyaWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMDIwMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RhbmRhcmQtTGlicmFyaWVzLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3RhbmRhcmQgTGlicmFyaWVzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRyb3VibGUuaHRtbCNUcm91YmxlIiB0aXRsZT0iVHJvdWJsZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZpeGVkLUhlYWRlcnMuaHRtbCNGaXhlZC1IZWFkZXJzIiB0aXRsZT0iRml4ZWQgSGVhZGVycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRpc2FwcG9pbnRtZW50cy5odG1sI0Rpc2FwcG9pbnRtZW50cyIgdGl0bGU9IkRpc2FwcG9pbnRtZW50cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdGFuZGFyZC1MaWJyYXJpZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGlzYXBwb2ludG1lbnRzLmh0bWwjRGlzYXBwb2ludG1lbnRzIj5EaXNhcHBvaW50bWVudHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGaXhlZC1IZWFkZXJzLmh0bWwjRml4ZWQtSGVhZGVycyI+Rml4ZWQgSGVhZGVyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRyb3VibGUuaHRtbCNUcm91YmxlIj5Ucm91YmxlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTEuNSBTdGFuZGFyZCBMaWJyYXJpZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1XYWxsLTM1NjIiPjwvYT5HQ0MgYnkgaXRzZWxmIGF0dGVtcHRzIHRvIGJlIGEgY29uZm9ybWluZyBmcmVlc3RhbmRpbmcgaW1wbGVtZW50YXRpb24uIAorU2VlIDxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+TGFuZ3VhZ2UgU3RhbmRhcmRzIFN1cHBvcnRlZCBieSBHQ0M8L2E+LCBmb3IgZGV0YWlscyBvZgord2hhdCB0aGlzIG1lYW5zLiAgQmV5b25kIHRoZSBsaWJyYXJ5IGZhY2lsaXRpZXMgcmVxdWlyZWQgb2Ygc3VjaCBhbgoraW1wbGVtZW50YXRpb24sIHRoZSByZXN0IG9mIHRoZSBDIGxpYnJhcnkgaXMgc3VwcGxpZWQgYnkgdGhlIHZlbmRvciBvZgordGhlIG9wZXJhdGluZyBzeXN0ZW0uICBJZiB0aGF0IEMgbGlicmFyeSBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIEMKK3N0YW5kYXJkcywgdGhlbiB5b3VyIHByb2dyYW1zIG1pZ2h0IGdldCB3YXJuaW5ncyAoZXNwZWNpYWxseSB3aGVuIHVzaW5nCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+KSB0aGF0IHlvdSBkb24ndCBleHBlY3QuCisKKyA8cD5Gb3IgZXhhbXBsZSwgdGhlIDxjb2RlPnNwcmludGY8L2NvZGU+IGZ1bmN0aW9uIG9uIFN1bk9TIDQuMS4zIHJldHVybnMKKzxjb2RlPmNoYXIgKjwvY29kZT4gd2hpbGUgdGhlIEMgc3RhbmRhcmQgc2F5cyB0aGF0IDxjb2RlPnNwcmludGY8L2NvZGU+IHJldHVybnMgYW4KKzxjb2RlPmludDwvY29kZT4uICBUaGUgPGNvZGU+Zml4aW5jbHVkZXM8L2NvZGU+IHByb2dyYW0gY291bGQgbWFrZSB0aGUgcHJvdG90eXBlIGZvcgordGhpcyBmdW5jdGlvbiBtYXRjaCB0aGUgU3RhbmRhcmQsIGJ1dCB0aGF0IHdvdWxkIGJlIHdyb25nLCBzaW5jZSB0aGUKK2Z1bmN0aW9uIHdpbGwgc3RpbGwgcmV0dXJuIDxjb2RlPmNoYXIgKjwvY29kZT4uCisKKyA8cD5JZiB5b3UgbmVlZCBhIFN0YW5kYXJkIGNvbXBsaWFudCBsaWJyYXJ5LCB0aGVuIHlvdSBuZWVkIHRvIGZpbmQgb25lLCBhcworR0NDIGRvZXMgbm90IHByb3ZpZGUgb25lLiAgVGhlIEdOVSBDIGxpYnJhcnkgKGNhbGxlZCA8Y29kZT5nbGliYzwvY29kZT4pCitwcm92aWRlcyBJU08gQywgUE9TSVgsIEJTRCwgU3lzdGVtViBhbmQgWC9PcGVuIGNvbXBhdGliaWxpdHkgZm9yCitHTlUvTGludXggYW5kIEhVUkQtYmFzZWQgR05VIHN5c3RlbXM7IG5vIHJlY2VudCB2ZXJzaW9uIG9mIGl0IHN1cHBvcnRzCitvdGhlciBzeXN0ZW1zLCB0aG91Z2ggc29tZSB2ZXJ5IG9sZCB2ZXJzaW9ucyBkaWQuICBWZXJzaW9uIDIuMiBvZiB0aGUKK0dOVSBDIGxpYnJhcnkgaW5jbHVkZXMgbmVhcmx5IGNvbXBsZXRlIEM5OSBzdXBwb3J0LiAgWW91IGNvdWxkIGFsc28gYXNrCit5b3VyIG9wZXJhdGluZyBzeXN0ZW0gdmVuZG9yIGlmIG5ld2VyIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdGFuZGFyZHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RhbmRhcmRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzNGNhMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RhbmRhcmRzLmh0bWwKQEAgLTAsMCArMSwyOTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN0YW5kYXJkcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNHXzAwMmJfMDAyYi1hbmQtR0NDIiB0aXRsZT0iRysrIGFuZCBHQ0MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiIHRpdGxlPSJJbnZva2luZyBHQ0MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3RhbmRhcmRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyI+SW52b2tpbmcgR0NDPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI0dfMDAyYl8wMDJiLWFuZC1HQ0MiPkcrKyBhbmQgR0NDPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjIgTGFuZ3VhZ2UgU3RhbmRhcmRzIFN1cHBvcnRlZCBieSBHQ0M8L2gyPgorCis8cD5Gb3IgZWFjaCBsYW5ndWFnZSBjb21waWxlZCBieSBHQ0MgZm9yIHdoaWNoIHRoZXJlIGlzIGEgc3RhbmRhcmQsIEdDQworYXR0ZW1wdHMgdG8gZm9sbG93IG9uZSBvciBtb3JlIHZlcnNpb25zIG9mIHRoYXQgc3RhbmRhcmQsIHBvc3NpYmx5Cit3aXRoIHNvbWUgZXhjZXB0aW9ucywgYW5kIHBvc3NpYmx5IHdpdGggc29tZSBleHRlbnNpb25zLgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMSBDIGxhbmd1YWdlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQy1zdGFuZGFyZC0yMSI+PC9hPjxhIG5hbWU9ImluZGV4LUMtc3RhbmRhcmRzLTIyIj48L2E+PGEgbmFtZT0iaW5kZXgtQU5TSS1DLXN0YW5kYXJkLTIzIj48L2E+PGEgbmFtZT0iaW5kZXgtQU5TSS1DLTI0Ij48L2E+PGEgbmFtZT0iaW5kZXgtQU5TSS1DODktMjUiPjwvYT48YSBuYW1lPSJpbmRleC1DODktMjYiPjwvYT48YSBuYW1lPSJpbmRleC1BTlNJLVgzXzAwMmUxNTlfMDAyZDE5ODktMjciPjwvYT48YSBuYW1lPSJpbmRleC1YM18wMDJlMTU5XzAwMmQxOTg5LTI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtSVNPLUMtc3RhbmRhcmQtMjkiPjwvYT48YSBuYW1lPSJpbmRleC1JU08tQy0zMCI+PC9hPjxhIG5hbWU9ImluZGV4LUlTTy1DOTAtMzEiPjwvYT48YSBuYW1lPSJpbmRleC1JU09fMDAyZklFQy05ODk5LTMyIj48L2E+PGEgbmFtZT0iaW5kZXgtSVNPLTk4OTktMzMiPjwvYT48YSBuYW1lPSJpbmRleC1DOTAtMzQiPjwvYT48YSBuYW1lPSJpbmRleC1JU08tQzk0LTM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtQzk0LTM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtSVNPLUM5NS0zNyI+PC9hPjxhIG5hbWU9ImluZGV4LUM5NS0zOCI+PC9hPjxhIG5hbWU9ImluZGV4LUlTTy1DOTktMzkiPjwvYT48YSBuYW1lPSJpbmRleC1DOTktNDAiPjwvYT48YSBuYW1lPSJpbmRleC1JU08tQzlYLTQxIj48L2E+PGEgbmFtZT0iaW5kZXgtQzlYLTQyIj48L2E+PGEgbmFtZT0iaW5kZXgtSVNPLUMxMS00MyI+PC9hPjxhIG5hbWU9ImluZGV4LUMxMS00NCI+PC9hPjxhIG5hbWU9ImluZGV4LUlTTy1DMVgtNDUiPjwvYT48YSBuYW1lPSJpbmRleC1DMVgtNDYiPjwvYT48YSBuYW1lPSJpbmRleC1UZWNobmljYWwtQ29ycmlnZW5kYS00NyI+PC9hPjxhIG5hbWU9ImluZGV4LVRDMS00OCI+PC9hPjxhIG5hbWU9ImluZGV4LVRlY2huaWNhbC1Db3JyaWdlbmR1bS0xLTQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtVEMyLTUwIj48L2E+PGEgbmFtZT0iaW5kZXgtVGVjaG5pY2FsLUNvcnJpZ2VuZHVtLTItNTEiPjwvYT48YSBuYW1lPSJpbmRleC1UQzMtNTIiPjwvYT48YSBuYW1lPSJpbmRleC1UZWNobmljYWwtQ29ycmlnZW5kdW0tMy01MyI+PC9hPjxhIG5hbWU9ImluZGV4LUFNRDEtNTQiPjwvYT48YSBuYW1lPSJpbmRleC1mcmVlc3RhbmRpbmctaW1wbGVtZW50YXRpb24tNTUiPjwvYT48YSBuYW1lPSJpbmRleC1mcmVlc3RhbmRpbmctZW52aXJvbm1lbnQtNTYiPjwvYT48YSBuYW1lPSJpbmRleC1ob3N0ZWQtaW1wbGVtZW50YXRpb24tNTciPjwvYT48YSBuYW1lPSJpbmRleC1ob3N0ZWQtZW52aXJvbm1lbnQtNTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmU1REQ18wMDVmSE9TVEVEXzAwNWZfMDA1Zi01OSI+PC9hPgorR0NDIHN1cHBvcnRzIHRocmVlIHZlcnNpb25zIG9mIHRoZSBDIHN0YW5kYXJkLCBhbHRob3VnaCBzdXBwb3J0IGZvcgordGhlIG1vc3QgcmVjZW50IHZlcnNpb24gaXMgbm90IHlldCBjb21wbGV0ZS4KKworIDxwPjxhIG5hbWU9ImluZGV4LXN0ZC02MCI+PC9hPjxhIG5hbWU9ImluZGV4LWFuc2ktNjEiPjwvYT48YSBuYW1lPSJpbmRleC1wZWRhbnRpYy02MiI+PC9hPjxhIG5hbWU9ImluZGV4LXBlZGFudGljXzAwMmRlcnJvcnMtNjMiPjwvYT5UaGUgb3JpZ2luYWwgQU5TSSBDIHN0YW5kYXJkIChYMy4xNTktMTk4OSkgd2FzIHJhdGlmaWVkIGluIDE5ODkgYW5kCitwdWJsaXNoZWQgaW4gMTk5MC4gIFRoaXMgc3RhbmRhcmQgd2FzIHJhdGlmaWVkIGFzIGFuIElTTyBzdGFuZGFyZAorKElTTy9JRUMgOTg5OToxOTkwKSBsYXRlciBpbiAxOTkwLiAgVGhlcmUgd2VyZSBubyB0ZWNobmljYWwKK2RpZmZlcmVuY2VzIGJldHdlZW4gdGhlc2UgcHVibGljYXRpb25zLCBhbHRob3VnaCB0aGUgc2VjdGlvbnMgb2YgdGhlCitBTlNJIHN0YW5kYXJkIHdlcmUgcmVudW1iZXJlZCBhbmQgYmVjYW1lIGNsYXVzZXMgaW4gdGhlIElTTyBzdGFuZGFyZC4gCitUaGlzIHN0YW5kYXJkLCBpbiBib3RoIGl0cyBmb3JtcywgaXMgY29tbW9ubHkga25vd24gYXMgPGRmbj5DODk8L2Rmbj4sIG9yCitvY2Nhc2lvbmFsbHkgYXMgPGRmbj5DOTA8L2Rmbj4sIGZyb20gdGhlIGRhdGVzIG9mIHJhdGlmaWNhdGlvbi4gIFRoZSBBTlNJCitzdGFuZGFyZCwgYnV0IG5vdCB0aGUgSVNPIHN0YW5kYXJkLCBhbHNvIGNhbWUgd2l0aCBhIFJhdGlvbmFsZQorZG9jdW1lbnQuICBUbyBzZWxlY3QgdGhpcyBzdGFuZGFyZCBpbiBHQ0MsIHVzZSBvbmUgb2YgdGhlIG9wdGlvbnMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzkwPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1pc285ODk5OjE5OTA8L3NwYW4+PC9zYW1wPjsgdG8gb2J0YWluCithbGwgdGhlIGRpYWdub3N0aWNzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZCwgeW91IHNob3VsZCBhbHNvIHNwZWNpZnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+IChvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcGVkYW50aWMtZXJyb3JzPC9zcGFuPjwvc2FtcD4gaWYgeW91IHdhbnQgdGhlbSB0byBiZQorZXJyb3JzIHJhdGhlciB0aGFuIHdhcm5pbmdzKS4gIFNlZSA8YSBocmVmPSJDLURpYWxlY3QtT3B0aW9ucy5odG1sI0MtRGlhbGVjdC1PcHRpb25zIj5PcHRpb25zIENvbnRyb2xsaW5nIEMgRGlhbGVjdDwvYT4uCisKKyA8cD5FcnJvcnMgaW4gdGhlIDE5OTAgSVNPIEMgc3RhbmRhcmQgd2VyZSBjb3JyZWN0ZWQgaW4gdHdvIFRlY2huaWNhbAorQ29ycmlnZW5kYSBwdWJsaXNoZWQgaW4gMTk5NCBhbmQgMTk5Ni4gIEdDQyBkb2VzIG5vdCBzdXBwb3J0IHRoZQordW5jb3JyZWN0ZWQgdmVyc2lvbi4KKworIDxwPkFuIGFtZW5kbWVudCB0byB0aGUgMTk5MCBzdGFuZGFyZCB3YXMgcHVibGlzaGVkIGluIDE5OTUuICBUaGlzCithbWVuZG1lbnQgYWRkZWQgZGlncmFwaHMgYW5kIDxjb2RlPl9fU1REQ19WRVJTSU9OX188L2NvZGU+IHRvIHRoZSBsYW5ndWFnZSwKK2J1dCBvdGhlcndpc2UgY29uY2VybmVkIHRoZSBsaWJyYXJ5LiAgVGhpcyBhbWVuZG1lbnQgaXMgY29tbW9ubHkga25vd24KK2FzIDxkZm4+QU1EMTwvZGZuPjsgdGhlIGFtZW5kZWQgc3RhbmRhcmQgaXMgc29tZXRpbWVzIGtub3duIGFzIDxkZm4+Qzk0PC9kZm4+IG9yCis8ZGZuPkM5NTwvZGZuPi4gIFRvIHNlbGVjdCB0aGlzIHN0YW5kYXJkIGluIEdDQywgdXNlIHRoZSBvcHRpb24KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9aXNvOTg5OToxOTk0MDk8L3NwYW4+PC9zYW1wPiAod2l0aCwgYXMgZm9yIG90aGVyIHN0YW5kYXJkIHZlcnNpb25zLAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXBlZGFudGljPC9zcGFuPjwvc2FtcD4gdG8gcmVjZWl2ZSBhbGwgcmVxdWlyZWQgZGlhZ25vc3RpY3MpLgorCisgPHA+QSBuZXcgZWRpdGlvbiBvZiB0aGUgSVNPIEMgc3RhbmRhcmQgd2FzIHB1Ymxpc2hlZCBpbiAxOTk5IGFzIElTTy9JRUMKKzk4OTk6MTk5OSwgYW5kIGlzIGNvbW1vbmx5IGtub3duIGFzIDxkZm4+Qzk5PC9kZm4+LiAgR0NDIGhhcyBpbmNvbXBsZXRlCitzdXBwb3J0IGZvciB0aGlzIHN0YW5kYXJkIHZlcnNpb247IHNlZQorPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL2M5OXN0YXR1cy5odG1sIj5odHRwOi8vZ2NjLmdudS5vcmcvYzk5c3RhdHVzLmh0bWw8L2E+IGZvciBkZXRhaWxzLiAgVG8gc2VsZWN0IHRoaXMKK3N0YW5kYXJkLCB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jOTk8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWlzbzk4OTk6MTk5OTwvc3Bhbj48L3NhbXA+LiAgKFdoaWxlIGluCitkZXZlbG9wbWVudCwgZHJhZnRzIG9mIHRoaXMgc3RhbmRhcmQgdmVyc2lvbiB3ZXJlIHJlZmVycmVkIHRvIGFzCis8ZGZuPkM5WDwvZGZuPi4pCisKKyA8cD5FcnJvcnMgaW4gdGhlIDE5OTkgSVNPIEMgc3RhbmRhcmQgd2VyZSBjb3JyZWN0ZWQgaW4gdGhyZWUgVGVjaG5pY2FsCitDb3JyaWdlbmRhIHB1Ymxpc2hlZCBpbiAyMDAxLCAyMDA0IGFuZCAyMDA3LiAgR0NDIGRvZXMgbm90IHN1cHBvcnQgdGhlCit1bmNvcnJlY3RlZCB2ZXJzaW9uLgorCisgPHA+QSBmb3VydGggdmVyc2lvbiBvZiB0aGUgQyBzdGFuZGFyZCwga25vd24gYXMgPGRmbj5DMTE8L2Rmbj4sIHdhcyBwdWJsaXNoZWQKK2luIDIwMTEgYXMgSVNPL0lFQyA5ODk5OjIwMTEuICBHQ0MgaGFzIGxpbWl0ZWQgaW5jb21wbGV0ZSBzdXBwb3J0IGZvcgorcGFydHMgb2YgdGhpcyBzdGFuZGFyZCwgZW5hYmxlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9YzExPC9zcGFuPjwvc2FtcD4gb3IKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9aXNvOTg5OToyMDExPC9zcGFuPjwvc2FtcD4uICAoV2hpbGUgaW4gZGV2ZWxvcG1lbnQsIGRyYWZ0cyBvZiB0aGlzCitzdGFuZGFyZCB2ZXJzaW9uIHdlcmUgcmVmZXJyZWQgdG8gYXMgPGRmbj5DMVg8L2Rmbj4uKQorCisgPHA+QnkgZGVmYXVsdCwgR0NDIHByb3ZpZGVzIHNvbWUgZXh0ZW5zaW9ucyB0byB0aGUgQyBsYW5ndWFnZSB0aGF0IG9uCityYXJlIG9jY2FzaW9ucyBjb25mbGljdCB3aXRoIHRoZSBDIHN0YW5kYXJkLiAgU2VlIDxhIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+RXh0ZW5zaW9ucyB0byB0aGUgQyBMYW5ndWFnZSBGYW1pbHk8L2E+LiAgVXNlIG9mIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgbGlzdGVkIGFib3ZlIHdpbGwgZGlzYWJsZSB0aGVzZSBleHRlbnNpb25zIHdoZXJlCit0aGV5IGNvbmZsaWN0IHdpdGggdGhlIEMgc3RhbmRhcmQgdmVyc2lvbiBzZWxlY3RlZC4gIFlvdSBtYXkgYWxzbworc2VsZWN0IGFuIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlIEMgbGFuZ3VhZ2UgZXhwbGljaXRseSB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWdudTkwPC9zcGFuPjwvc2FtcD4gKGZvciBDOTAgd2l0aCBHTlUgZXh0ZW5zaW9ucyksIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Z251OTk8L3NwYW4+PC9zYW1wPgorKGZvciBDOTkgd2l0aCBHTlUgZXh0ZW5zaW9ucykgb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnUxMTwvc3Bhbj48L3NhbXA+IChmb3IgQzExIHdpdGggR05VCitleHRlbnNpb25zKS4gIFRoZSBkZWZhdWx0LCBpZiBubyBDIGxhbmd1YWdlIGRpYWxlY3QKK29wdGlvbnMgYXJlIGdpdmVuLCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWdudTkwPC9zcGFuPjwvc2FtcD47IHRoaXMgd2lsbCBjaGFuZ2UgdG8KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Z251OTk8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWdudTExPC9zcGFuPjwvc2FtcD4gaW4gc29tZSBmdXR1cmUgcmVsZWFzZSB3aGVuCit0aGUgQzk5IG9yIEMxMSBzdXBwb3J0IGlzCitjb21wbGV0ZS4gIFNvbWUgZmVhdHVyZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgQzk5IHN0YW5kYXJkIGFyZQorYWNjZXB0ZWQgYXMgZXh0ZW5zaW9ucyBpbiBDOTAgbW9kZSwgYW5kIHNvbWUgZmVhdHVyZXMgdGhhdCBhcmUgcGFydCBvZgordGhlIEMxMSBzdGFuZGFyZCBhcmUgYWNjZXB0ZWQgYXMgZXh0ZW5zaW9ucyBpbiBDOTAgYW5kIEM5OSBtb2Rlcy4KKworIDxwPlRoZSBJU08gQyBzdGFuZGFyZCBkZWZpbmVzIChpbiBjbGF1c2UgNCkgdHdvIGNsYXNzZXMgb2YgY29uZm9ybWluZworaW1wbGVtZW50YXRpb24uICBBIDxkZm4+Y29uZm9ybWluZyBob3N0ZWQgaW1wbGVtZW50YXRpb248L2Rmbj4gc3VwcG9ydHMgdGhlCit3aG9sZSBzdGFuZGFyZCBpbmNsdWRpbmcgYWxsIHRoZSBsaWJyYXJ5IGZhY2lsaXRpZXM7IGEgPGRmbj5jb25mb3JtaW5nCitmcmVlc3RhbmRpbmcgaW1wbGVtZW50YXRpb248L2Rmbj4gaXMgb25seSByZXF1aXJlZCB0byBwcm92aWRlIGNlcnRhaW4KK2xpYnJhcnkgZmFjaWxpdGllczogdGhvc2UgaW4gPGNvZGU+Jmx0O2Zsb2F0LmgmZ3Q7PC9jb2RlPiwgPGNvZGU+Jmx0O2xpbWl0cy5oJmd0OzwvY29kZT4sCis8Y29kZT4mbHQ7c3RkYXJnLmgmZ3Q7PC9jb2RlPiwgYW5kIDxjb2RlPiZsdDtzdGRkZWYuaCZndDs8L2NvZGU+OyBzaW5jZSBBTUQxLCBhbHNvIHRob3NlIGluCis8Y29kZT4mbHQ7aXNvNjQ2LmgmZ3Q7PC9jb2RlPjsgc2luY2UgQzk5LCBhbHNvIHRob3NlIGluIDxjb2RlPiZsdDtzdGRib29sLmgmZ3Q7PC9jb2RlPiBhbmQKKzxjb2RlPiZsdDtzdGRpbnQuaCZndDs8L2NvZGU+OyBhbmQgc2luY2UgQzExLCBhbHNvIHRob3NlIGluIDxjb2RlPiZsdDtzdGRhbGlnbi5oJmd0OzwvY29kZT4KK2FuZCA8Y29kZT4mbHQ7c3Rkbm9yZXR1cm4uaCZndDs8L2NvZGU+LiAgSW4gYWRkaXRpb24sIGNvbXBsZXggdHlwZXMsIGFkZGVkIGluIEM5OSwgYXJlIG5vdAorcmVxdWlyZWQgZm9yIGZyZWVzdGFuZGluZyBpbXBsZW1lbnRhdGlvbnMuICBUaGUgc3RhbmRhcmQgYWxzbyBkZWZpbmVzCit0d28gZW52aXJvbm1lbnRzIGZvciBwcm9ncmFtcywgYSA8ZGZuPmZyZWVzdGFuZGluZyBlbnZpcm9ubWVudDwvZGZuPiwKK3JlcXVpcmVkIG9mIGFsbCBpbXBsZW1lbnRhdGlvbnMgYW5kIHdoaWNoIG1heSBub3QgaGF2ZSBsaWJyYXJ5CitmYWNpbGl0aWVzIGJleW9uZCB0aG9zZSByZXF1aXJlZCBvZiBmcmVlc3RhbmRpbmcgaW1wbGVtZW50YXRpb25zLAord2hlcmUgdGhlIGhhbmRsaW5nIG9mIHByb2dyYW0gc3RhcnR1cCBhbmQgdGVybWluYXRpb24gYXJlCitpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLCBhbmQgYSA8ZGZuPmhvc3RlZCBlbnZpcm9ubWVudDwvZGZuPiwgd2hpY2ggaXMgbm90CityZXF1aXJlZCwgaW4gd2hpY2ggYWxsIHRoZSBsaWJyYXJ5IGZhY2lsaXRpZXMgYXJlIHByb3ZpZGVkIGFuZCBzdGFydHVwCitpcyB0aHJvdWdoIGEgZnVuY3Rpb24gPGNvZGU+aW50IG1haW4gKHZvaWQpPC9jb2RlPiBvciA8Y29kZT5pbnQgbWFpbiAoaW50LAorY2hhciAqW10pPC9jb2RlPi4gIEFuIE9TIGtlcm5lbCB3b3VsZCBiZSBhIGZyZWVzdGFuZGluZyBlbnZpcm9ubWVudDsgYQorcHJvZ3JhbSB1c2luZyB0aGUgZmFjaWxpdGllcyBvZiBhbiBvcGVyYXRpbmcgc3lzdGVtIHdvdWxkIG5vcm1hbGx5IGJlCitpbiBhIGhvc3RlZCBpbXBsZW1lbnRhdGlvbi4KKworIDxwPjxhIG5hbWU9ImluZGV4LWZmcmVlc3RhbmRpbmctNjQiPjwvYT5HQ0MgYWltcyB0b3dhcmRzIGJlaW5nIHVzYWJsZSBhcyBhIGNvbmZvcm1pbmcgZnJlZXN0YW5kaW5nCitpbXBsZW1lbnRhdGlvbiwgb3IgYXMgdGhlIGNvbXBpbGVyIGZvciBhIGNvbmZvcm1pbmcgaG9zdGVkCitpbXBsZW1lbnRhdGlvbi4gIEJ5IGRlZmF1bHQsIGl0IHdpbGwgYWN0IGFzIHRoZSBjb21waWxlciBmb3IgYSBob3N0ZWQKK2ltcGxlbWVudGF0aW9uLCBkZWZpbmluZyA8Y29kZT5fX1NURENfSE9TVEVEX188L2NvZGU+IGFzIDxjb2RlPjE8L2NvZGU+IGFuZAorcHJlc3VtaW5nIHRoYXQgd2hlbiB0aGUgbmFtZXMgb2YgSVNPIEMgZnVuY3Rpb25zIGFyZSB1c2VkLCB0aGV5IGhhdmUKK3RoZSBzZW1hbnRpY3MgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQuICBUbyBtYWtlIGl0IGFjdCBhcyBhIGNvbmZvcm1pbmcKK2ZyZWVzdGFuZGluZyBpbXBsZW1lbnRhdGlvbiBmb3IgYSBmcmVlc3RhbmRpbmcgZW52aXJvbm1lbnQsIHVzZSB0aGUKK29wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZyZWVzdGFuZGluZzwvc3Bhbj48L3NhbXA+OyBpdCB3aWxsIHRoZW4gZGVmaW5lCis8Y29kZT5fX1NURENfSE9TVEVEX188L2NvZGU+IHRvIDxjb2RlPjA8L2NvZGU+IGFuZCBub3QgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUKK21lYW5pbmdzIG9mIGZ1bmN0aW9uIG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHdpdGggZXhjZXB0aW9ucworbm90ZWQgYmVsb3cuICBUbyBidWlsZCBhbiBPUyBrZXJuZWwsIHlvdSBtYXkgd2VsbCBzdGlsbCBuZWVkIHRvIG1ha2UKK3lvdXIgb3duIGFycmFuZ2VtZW50cyBmb3IgbGlua2luZyBhbmQgc3RhcnR1cC4gCitTZWUgPGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+T3B0aW9ucyBDb250cm9sbGluZyBDIERpYWxlY3Q8L2E+LgorCisgPHA+R0NDIGRvZXMgbm90IHByb3ZpZGUgdGhlIGxpYnJhcnkgZmFjaWxpdGllcyByZXF1aXJlZCBvbmx5IG9mIGhvc3RlZAoraW1wbGVtZW50YXRpb25zLCBub3IgeWV0IGFsbCB0aGUgZmFjaWxpdGllcyByZXF1aXJlZCBieSBDOTkgb2YKK2ZyZWVzdGFuZGluZyBpbXBsZW1lbnRhdGlvbnM7IHRvIHVzZSB0aGUgZmFjaWxpdGllcyBvZiBhIGhvc3RlZAorZW52aXJvbm1lbnQsIHlvdSB3aWxsIG5lZWQgdG8gZmluZCB0aGVtIGVsc2V3aGVyZSAoZm9yIGV4YW1wbGUsIGluIHRoZQorR05VIEMgbGlicmFyeSkuICBTZWUgPGEgaHJlZj0iU3RhbmRhcmQtTGlicmFyaWVzLmh0bWwjU3RhbmRhcmQtTGlicmFyaWVzIj5TdGFuZGFyZCBMaWJyYXJpZXM8L2E+LgorCisgPHA+TW9zdCBvZiB0aGUgY29tcGlsZXIgc3VwcG9ydCByb3V0aW5lcyB1c2VkIGJ5IEdDQyBhcmUgcHJlc2VudCBpbgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdjYzwvc3Bhbj48L3NhbXA+LCBidXQgdGhlcmUgYXJlIGEgZmV3IGV4Y2VwdGlvbnMuICBHQ0MgcmVxdWlyZXMgdGhlCitmcmVlc3RhbmRpbmcgZW52aXJvbm1lbnQgcHJvdmlkZSA8Y29kZT5tZW1jcHk8L2NvZGU+LCA8Y29kZT5tZW1tb3ZlPC9jb2RlPiwKKzxjb2RlPm1lbXNldDwvY29kZT4gYW5kIDxjb2RlPm1lbWNtcDwvY29kZT4uIAorRmluYWxseSwgaWYgPGNvZGU+X19idWlsdGluX3RyYXA8L2NvZGU+IGlzIHVzZWQsIGFuZCB0aGUgdGFyZ2V0IGRvZXMKK25vdCBpbXBsZW1lbnQgdGhlIDxjb2RlPnRyYXA8L2NvZGU+IHBhdHRlcm4sIHRoZW4gR0NDIHdpbGwgZW1pdCBhIGNhbGwKK3RvIDxjb2RlPmFib3J0PC9jb2RlPi4KKworIDxwPkZvciByZWZlcmVuY2VzIHRvIFRlY2huaWNhbCBDb3JyaWdlbmRhLCBSYXRpb25hbGUgZG9jdW1lbnRzIGFuZAoraW5mb3JtYXRpb24gY29uY2VybmluZyB0aGUgaGlzdG9yeSBvZiBDIHRoYXQgaXMgYXZhaWxhYmxlIG9ubGluZSwgc2VlCis8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvcmVhZGluZ3MuaHRtbCI+aHR0cDovL2djYy5nbnUub3JnL3JlYWRpbmdzLmh0bWw8L2E+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4yIEMrKyBsYW5ndWFnZTwvaDM+CisKKzxwPkdDQyBzdXBwb3J0cyB0aGUgb3JpZ2luYWwgSVNPIEMrKyBzdGFuZGFyZCAoMTk5OCkgYW5kIGNvbnRhaW5zCitleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgdGhlIHNlY29uZCBJU08gQysrIHN0YW5kYXJkICgyMDExKS4KKworIDxwPlRoZSBvcmlnaW5hbCBJU08gQysrIHN0YW5kYXJkIHdhcyBwdWJsaXNoZWQgYXMgdGhlIElTTyBzdGFuZGFyZCAoSVNPL0lFQworMTQ4ODI6MTk5OCkgYW5kIGFtZW5kZWQgYnkgYSBUZWNobmljYWwgQ29ycmlnZW5kYSBwdWJsaXNoZWQgaW4gMjAwMworKElTTy9JRUMgMTQ4ODI6MjAwMykuIFRoZXNlIHN0YW5kYXJkcyBhcmUgcmVmZXJyZWQgdG8gYXMgQysrOTggYW5kCitDKyswMywgcmVzcGVjdGl2ZWx5LiBHQ0MgaW1wbGVtZW50cyB0aGUgbWFqb3JpdHkgb2YgQysrOTggKDxjb2RlPmV4cG9ydDwvY29kZT4KK2lzIGEgbm90YWJsZSBleGNlcHRpb24pIGFuZCBtb3N0IG9mIHRoZSBjaGFuZ2VzIGluIEMrKzAzLiAgVG8gc2VsZWN0Cit0aGlzIHN0YW5kYXJkIGluIEdDQywgdXNlIG9uZSBvZiB0aGUgb3B0aW9ucyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYW5zaTwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jKys5ODwvc3Bhbj48L3NhbXA+LCBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWMrKzAzPC9zcGFuPjwvc2FtcD47IHRvIG9idGFpbiBhbGwgdGhlIGRpYWdub3N0aWNzCityZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQsIHlvdSBzaG91bGQgYWxzbyBzcGVjaWZ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+IChvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXBlZGFudGljLWVycm9yczwvc3Bhbj48L3NhbXA+IGlmIHlvdSB3YW50IHRoZW0gdG8gYmUgZXJyb3JzIHJhdGhlciB0aGFuCit3YXJuaW5ncykuCisKKyA8cD5BIHJldmlzZWQgSVNPIEMrKyBzdGFuZGFyZCB3YXMgcHVibGlzaGVkIGluIDIwMTEgYXMgSVNPL0lFQworMTQ4ODI6MjAxMSwgYW5kIGlzIHJlZmVycmVkIHRvIGFzIEMrKzExOyBiZWZvcmUgaXRzIHB1YmxpY2F0aW9uIGl0IHdhcworY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgQysrMHguICBDKysxMSBjb250YWlucyBzZXZlcmFsCitjaGFuZ2VzIHRvIHRoZSBDKysgbGFuZ3VhZ2UsIG1vc3Qgb2Ygd2hpY2ggaGF2ZSBiZWVuIGltcGxlbWVudGVkIGluIGFuCitleHBlcmltZW50YWwgQysrMTEgbW9kZSBpbiBHQ0MuICBGb3IgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyB0aGUgQysrMTEgZmVhdHVyZXMgYXZhaWxhYmxlIGluIHRoZSBleHBlcmltZW50YWwgQysrMTEgbW9kZSwKK3NlZSA8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvcHJvamVjdHMvY3h4MHguaHRtbCI+aHR0cDovL2djYy5nbnUub3JnL3Byb2plY3RzL2N4eDB4Lmh0bWw8L2E+LiBUbyBzZWxlY3QgdGhpcworc3RhbmRhcmQgaW4gR0NDLCB1c2UgdGhlIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWMrKzExPC9zcGFuPjwvc2FtcD47IHRvIG9idGFpbiBhbGwgdGhlCitkaWFnbm9zdGljcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQsIHlvdSBzaG91bGQgYWxzbyBzcGVjaWZ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcGVkYW50aWM8L3NwYW4+PC9zYW1wPiAob3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXBlZGFudGljLWVycm9yczwvc3Bhbj48L3NhbXA+IGlmIHlvdSB3YW50IHRoZW0gdG8KK2JlIGVycm9ycyByYXRoZXIgdGhhbiB3YXJuaW5ncykuCisKKyA8cD5Nb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDKysgc3RhbmRhcmRzIGlzIGF2YWlsYWJsZSBvbiB0aGUgSVNPIEMrKworY29tbWl0dGVlJ3Mgd2ViIHNpdGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvIj5odHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS88L2E+LgorCisgPHA+QnkgZGVmYXVsdCwgR0NDIHByb3ZpZGVzIHNvbWUgZXh0ZW5zaW9ucyB0byB0aGUgQysrIGxhbmd1YWdlOyBTZWUgPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PcHRpb25zIENvbnRyb2xsaW5nIEMrKyBEaWFsZWN0PC9hPi4gIFVzZSBvZiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gbGlzdGVkIGFib3ZlIHdpbGwgZGlzYWJsZSB0aGVzZSBleHRlbnNpb25zLiAgWW91CittYXkgYWxzbyBzZWxlY3QgYW4gZXh0ZW5kZWQgdmVyc2lvbiBvZiB0aGUgQysrIGxhbmd1YWdlIGV4cGxpY2l0bHkgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnUrKzk4PC9zcGFuPjwvc2FtcD4gKGZvciBDKys5OCB3aXRoIEdOVSBleHRlbnNpb25zKSBvcgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnUrKzExPC9zcGFuPjwvc2FtcD4gKGZvciBDKysxMSB3aXRoIEdOVSBleHRlbnNpb25zKS4gIFRoZSBkZWZhdWx0LCBpZgorbm8gQysrIGxhbmd1YWdlIGRpYWxlY3Qgb3B0aW9ucyBhcmUgZ2l2ZW4sIGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Z251Kys5ODwvc3Bhbj48L3NhbXA+LgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMyBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBsYW5ndWFnZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1PYmplY3RpdmVfMDAyZEMtNjUiPjwvYT48YSBuYW1lPSJpbmRleC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLTY2Ij48L2E+CitHQ0Mgc3VwcG9ydHMgJmxkcXVvO3RyYWRpdGlvbmFsJnJkcXVvOyBPYmplY3RpdmUtQyAoYWxzbyBrbm93biBhcyAmbGRxdW87T2JqZWN0aXZlLUMKKzEuMCZyZHF1bzspIGFuZCBjb250YWlucyBzdXBwb3J0IGZvciB0aGUgT2JqZWN0aXZlLUMgZXhjZXB0aW9uIGFuZAorc3luY2hyb25pemF0aW9uIHN5bnRheC4gIEl0IGhhcyBhbHNvIHN1cHBvcnQgZm9yIGEgbnVtYmVyIG9mCismbGRxdW87T2JqZWN0aXZlLUMgMi4wJnJkcXVvOyBsYW5ndWFnZSBleHRlbnNpb25zLCBpbmNsdWRpbmcgcHJvcGVydGllcywgZmFzdAorZW51bWVyYXRpb24gKG9ubHkgZm9yIE9iamVjdGl2ZS1DKSwgbWV0aG9kIGF0dHJpYnV0ZXMgYW5kIHRoZQorQG9wdGlvbmFsIGFuZCBAcmVxdWlyZWQga2V5d29yZHMgaW4gcHJvdG9jb2xzLiAgR0NDIHN1cHBvcnRzCitPYmplY3RpdmUtQysrIGFuZCBmZWF0dXJlcyBhdmFpbGFibGUgaW4gT2JqZWN0aXZlLUMgYXJlIGFsc28gYXZhaWxhYmxlCitpbiBPYmplY3RpdmUtQysrLgorCisgPHA+R0NDIGJ5IGRlZmF1bHQgdXNlcyB0aGUgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgbGlicmFyeSwgd2hpY2ggaXMgcGFydAorb2YgR0NDIGFuZCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIEFwcGxlL05lWFQgT2JqZWN0aXZlLUMgcnVudGltZQorbGlicmFyeSB1c2VkIG9uIEFwcGxlIHN5c3RlbXMuICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW5jZXMKK2RvY3VtZW50ZWQgaW4gdGhpcyBtYW51YWwuICBUaGUgb3B0aW9ucyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmdudS1ydW50aW1lPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5leHQtcnVudGltZTwvc3Bhbj48L3NhbXA+IGFsbG93IHlvdSB0byBzd2l0Y2ggYmV0d2VlbiBwcm9kdWNpbmcgb3V0cHV0Cit0aGF0IHdvcmtzIHdpdGggdGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIGxpYnJhcnkgYW5kIG91dHB1dCB0aGF0Cit3b3JrcyB3aXRoIHRoZSBBcHBsZS9OZVhUIE9iamVjdGl2ZS1DIHJ1bnRpbWUgbGlicmFyeS4KKworIDxwPlRoZXJlIGlzIG5vIGZvcm1hbCB3cml0dGVuIHN0YW5kYXJkIGZvciBPYmplY3RpdmUtQyBvciBPYmplY3RpdmUtQysrLiAKK1RoZSBhdXRob3JpdGF0aXZlIG1hbnVhbCBvbiB0cmFkaXRpb25hbCBPYmplY3RpdmUtQyAoMS4wKSBpcworJmxkcXVvO09iamVjdC1PcmllbnRlZCBQcm9ncmFtbWluZyBhbmQgdGhlIE9iamVjdGl2ZS1DIExhbmd1YWdlJnJkcXVvOywKK2F2YWlsYWJsZSBhdCBhIG51bWJlciBvZiB3ZWIgc2l0ZXM6CisgICAgIDx1bD4KKzxsaT48YSBocmVmPSJodHRwOi8vd3d3LmdudXN0ZXAub3JnL3Jlc291cmNlcy9kb2N1bWVudGF0aW9uL09iamVjdGl2Q0Jvb2sucGRmIj5odHRwOi8vd3d3LmdudXN0ZXAub3JnL3Jlc291cmNlcy9kb2N1bWVudGF0aW9uL09iamVjdGl2Q0Jvb2sucGRmPC9hPgoraXMgdGhlIG9yaWdpbmFsIE5lWFRzdGVwIGRvY3VtZW50OworPGxpPjxhIGhyZWY9Imh0dHA6Ly9vYmpjLnRvb2RhcmtwYXJrLm5ldCI+aHR0cDovL29iamMudG9vZGFya3BhcmsubmV0PC9hPgoraXMgdGhlIHNhbWUgZG9jdW1lbnQgaW4gYW5vdGhlciBmb3JtYXQ7Cis8bGk+PGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vbWFjL2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9Db2NvYS9Db25jZXB0dWFsL09iamVjdGl2ZUMvIj5odHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9tYWMvbGlicmFyeS9kb2N1bWVudGF0aW9uL0NvY29hL0NvbmNlcHR1YWwvT2JqZWN0aXZlQy88L2E+CitoYXMgYW4gdXBkYXRlZCB2ZXJzaW9uIGJ1dCBtYWtlIHN1cmUgeW91IHNlYXJjaCBmb3IgJmxkcXVvO09iamVjdCBPcmllbnRlZCBQcm9ncmFtbWluZyBhbmQgdGhlIE9iamVjdGl2ZS1DIFByb2dyYW1taW5nIExhbmd1YWdlIDEuMCZyZHF1bzssCitub3QgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbmV3ZXIgJmxkcXVvO09iamVjdGl2ZS1DIDIuMCZyZHF1bzsgbGFuZ3VhZ2UKKzwvdWw+CisKKyA8cD5UaGUgT2JqZWN0aXZlLUMgZXhjZXB0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24gc3ludGF4ICh0aGF0IGlzLCB0aGUKK2tleXdvcmRzIEB0cnksIEB0aHJvdywgQGNhdGNoLCBAZmluYWxseSBhbmQgQHN5bmNocm9uaXplZCkgaXMKK3N1cHBvcnRlZCBieSBHQ0MgYW5kIGlzIGVuYWJsZWQgd2l0aCB0aGUgb3B0aW9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9iamMtZXhjZXB0aW9uczwvc3Bhbj48L3NhbXA+LiAgVGhlIHN5bnRheCBpcyBicmllZmx5IGRvY3VtZW50ZWQgaW4gdGhpcworbWFudWFsIGFuZCBpbiB0aGUgT2JqZWN0aXZlLUMgMi4wIG1hbnVhbHMgZnJvbSBBcHBsZS4KKworIDxwPlRoZSBPYmplY3RpdmUtQyAyLjAgbGFuZ3VhZ2UgZXh0ZW5zaW9ucyBhbmQgZmVhdHVyZXMgYXJlIGF1dG9tYXRpY2FsbHkKK2VuYWJsZWQ7IHRoZXkgaW5jbHVkZSBwcm9wZXJ0aWVzICh2aWEgdGhlIEBwcm9wZXJ0eSwgQHN5bnRoZXNpemUgYW5kCitAZHluYW1pYyBrZXl3b3JkcyksIGZhc3QgZW51bWVyYXRpb24gKG5vdCBhdmFpbGFibGUgaW4KK09iamVjdGl2ZS1DKyspLCBhdHRyaWJ1dGVzIGZvciBtZXRob2RzIChzdWNoIGFzIGRlcHJlY2F0ZWQsIG5vcmV0dXJuLAorc2VudGluZWwsIGZvcm1hdCksIHRoZSB1bnVzZWQgYXR0cmlidXRlIGZvciBtZXRob2QgYXJndW1lbnRzLCB0aGUKK0BwYWNrYWdlIGtleXdvcmQgZm9yIGluc3RhbmNlIHZhcmlhYmxlcyBhbmQgdGhlIEBvcHRpb25hbCBhbmQKK0ByZXF1aXJlZCBrZXl3b3JkcyBpbiBwcm90b2NvbHMuICBZb3UgY2FuIGRpc2FibGUgYWxsIHRoZXNlCitPYmplY3RpdmUtQyAyLjAgbGFuZ3VhZ2UgZXh0ZW5zaW9ucyB3aXRoIHRoZSBvcHRpb24KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mb2JqYy1zdGQ9b2JqYzE8L3NwYW4+PC9zYW1wPiwgd2hpY2ggY2F1c2VzIHRoZSBjb21waWxlciB0byByZWNvZ25pemUgdGhlCitzYW1lIE9iamVjdGl2ZS1DIGxhbmd1YWdlIHN5bnRheCByZWNvZ25pemVkIGJ5IEdDQyA0LjAsIGFuZCB0byBwcm9kdWNlCithbiBlcnJvciBpZiBvbmUgb2YgdGhlIG5ldyBmZWF0dXJlcyBpcyB1c2VkLgorCisgPHA+R0NDIGhhcyBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3Igbm9uLWZyYWdpbGUgaW5zdGFuY2UgdmFyaWFibGVzLgorCisgPHA+VGhlIGF1dGhvcml0YXRpdmUgbWFudWFsIG9uIE9iamVjdGl2ZS1DIDIuMCBpcyBhdmFpbGFibGUgZnJvbSBBcHBsZToKKyAgICAgPHVsPgorPGxpPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL21hYy9saWJyYXJ5L2RvY3VtZW50YXRpb24vQ29jb2EvQ29uY2VwdHVhbC9PYmplY3RpdmVDLyI+aHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vbWFjL2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9Db2NvYS9Db25jZXB0dWFsL09iamVjdGl2ZUMvPC9hPgorPC91bD4KKworIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGNvbmNlcm5pbmcgdGhlIGhpc3Rvcnkgb2YgT2JqZWN0aXZlLUMgdGhhdCBpcworYXZhaWxhYmxlIG9ubGluZSwgc2VlIDxhIGhyZWY9Imh0dHA6Ly9nY2MuZ251Lm9yZy9yZWFkaW5ncy5odG1sIj5odHRwOi8vZ2NjLmdudS5vcmcvcmVhZGluZ3MuaHRtbDwvYT4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjQgR28gbGFuZ3VhZ2U8L2gzPgorCis8cD5BcyBvZiB0aGUgR0NDIDQuNy4xIHJlbGVhc2UsIEdDQyBzdXBwb3J0cyB0aGUgR28gMSBsYW5ndWFnZSBzdGFuZGFyZCwKK2Rlc2NyaWJlZCBhdCA8YSBocmVmPSJodHRwOi8vZ29sYW5nLm9yZy9kb2MvZ28xLmh0bWwiPmh0dHA6Ly9nb2xhbmcub3JnL2RvYy9nbzEuaHRtbDwvYT4uCisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi41IFJlZmVyZW5jZXMgZm9yIG90aGVyIGxhbmd1YWdlczwvaDM+CisKKzxwPlNlZSA8YSBocmVmPSIuLi9nbmF0X3JtL2luZGV4Lmh0bWwjVG9wIj5HTkFUIFJlZmVyZW5jZSBNYW51YWw8L2E+LCBmb3IgaW5mb3JtYXRpb24gb24gc3RhbmRhcmQKK2NvbmZvcm1hbmNlIGFuZCBjb21wYXRpYmlsaXR5IG9mIHRoZSBBZGEgY29tcGlsZXIuCisKKyA8cD5TZWUgPGEgaHJlZj0iLi4vZ2ZvcnRyYW4vU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+LCBmb3IgZGV0YWlscworb2Ygc3RhbmRhcmRzIHN1cHBvcnRlZCBieSBHTlUgRm9ydHJhbi4KKworIDxwPlNlZSA8YSBocmVmPSIuLi9nY2ovQ29tcGF0aWJpbGl0eS5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHkgd2l0aCB0aGUgSmF2YSBQbGF0Zm9ybTwvYT4sCitmb3IgZGV0YWlscyBvZiBjb21wYXRpYmlsaXR5IGJldHdlZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjajwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgSmF2YSBQbGF0Zm9ybS4KKworPCEtLSBDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0NDIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBnY2MudGV4aS4gLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdGF0ZW1lbnQtRXhwcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RhdGVtZW50LUV4cHJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1MGVlZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RhdGVtZW50LUV4cHJzLmh0bWwKQEAgLTAsMCArMSwxNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN0YXRlbWVudCBFeHBycyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMb2NhbC1MYWJlbHMuaHRtbCNMb2NhbC1MYWJlbHMiIHRpdGxlPSJMb2NhbCBMYWJlbHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3RhdGVtZW50LUV4cHJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxvY2FsLUxhYmVscy5odG1sI0xvY2FsLUxhYmVscyI+TG9jYWwgTGFiZWxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjEgU3RhdGVtZW50cyBhbmQgRGVjbGFyYXRpb25zIGluIEV4cHJlc3Npb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50cy1pbnNpZGUtZXhwcmVzc2lvbnMtMjQwMSI+PC9hPjxhIG5hbWU9ImluZGV4LWRlY2xhcmF0aW9ucy1pbnNpZGUtZXhwcmVzc2lvbnMtMjQwMiI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cHJlc3Npb25zLWNvbnRhaW5pbmctc3RhdGVtZW50cy0yNDAzIj48L2E+PGEgbmFtZT0iaW5kZXgtbWFjcm9zXzAwMmMtc3RhdGVtZW50cy1pbi1leHByZXNzaW9ucy0yNDA0Ij48L2E+Cis8IS0tIHRoZSBhYm92ZSBzZWN0aW9uIHRpdGxlIHdyYXBwZWQgYW5kIGNhdXNlcyBhbiB1bmRlcmZ1bGwgaGJveC4uIGkgLS0+Cis8IS0tIGNoYW5nZWQgaXQgZnJvbSAid2l0aGluIiB0byAiaW4iLiAtbWV3IDRmZWI5MyAtLT4KK0EgY29tcG91bmQgc3RhdGVtZW50IGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIG1heSBhcHBlYXIgYXMgYW4gZXhwcmVzc2lvbgoraW4gR05VIEMuICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIGxvb3BzLCBzd2l0Y2hlcywgYW5kIGxvY2FsIHZhcmlhYmxlcword2l0aGluIGFuIGV4cHJlc3Npb24uCisKKyA8cD5SZWNhbGwgdGhhdCBhIGNvbXBvdW5kIHN0YXRlbWVudCBpcyBhIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgc3Vycm91bmRlZAorYnkgYnJhY2VzOyBpbiB0aGlzIGNvbnN0cnVjdCwgcGFyZW50aGVzZXMgZ28gYXJvdW5kIHRoZSBicmFjZXMuICBGb3IKK2V4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAoeyBpbnQgeSA9IGZvbyAoKTsgaW50IHo7CisgICAgICAgIGlmICh5ICZndDsgMCkgeiA9IHk7CisgICAgICAgIGVsc2UgeiA9IC0geTsKKyAgICAgICAgejsgfSkKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+aXMgYSB2YWxpZCAodGhvdWdoIHNsaWdodGx5IG1vcmUgY29tcGxleCB0aGFuIG5lY2Vzc2FyeSkgZXhwcmVzc2lvbgorZm9yIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiA8Y29kZT5mb28gKCk8L2NvZGU+LgorCisgPHA+VGhlIGxhc3QgdGhpbmcgaW4gdGhlIGNvbXBvdW5kIHN0YXRlbWVudCBzaG91bGQgYmUgYW4gZXhwcmVzc2lvbgorZm9sbG93ZWQgYnkgYSBzZW1pY29sb247IHRoZSB2YWx1ZSBvZiB0aGlzIHN1YmV4cHJlc3Npb24gc2VydmVzIGFzIHRoZQordmFsdWUgb2YgdGhlIGVudGlyZSBjb25zdHJ1Y3QuICAoSWYgeW91IHVzZSBzb21lIG90aGVyIGtpbmQgb2Ygc3RhdGVtZW50CitsYXN0IHdpdGhpbiB0aGUgYnJhY2VzLCB0aGUgY29uc3RydWN0IGhhcyB0eXBlIDxjb2RlPnZvaWQ8L2NvZGU+LCBhbmQgdGh1cworZWZmZWN0aXZlbHkgbm8gdmFsdWUuKQorCisgPHA+VGhpcyBmZWF0dXJlIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGluIG1ha2luZyBtYWNybyBkZWZpbml0aW9ucyAmbGRxdW87c2FmZSZyZHF1bzsgKHNvCit0aGF0IHRoZXkgZXZhbHVhdGUgZWFjaCBvcGVyYW5kIGV4YWN0bHkgb25jZSkuICBGb3IgZXhhbXBsZSwgdGhlCismbGRxdW87bWF4aW11bSZyZHF1bzsgZnVuY3Rpb24gaXMgY29tbW9ubHkgZGVmaW5lZCBhcyBhIG1hY3JvIGluIHN0YW5kYXJkIEMgYXMKK2ZvbGxvd3M6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIG1heChhLGIpICgoYSkgJmd0OyAoYikgPyAoYSkgOiAoYikpCis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPjxhIG5hbWU9ImluZGV4LXNpZGUtZWZmZWN0c18wMDJjLW1hY3JvLWFyZ3VtZW50LTI0MDUiPjwvYT5CdXQgdGhpcyBkZWZpbml0aW9uIGNvbXB1dGVzIGVpdGhlciA8dmFyPmE8L3Zhcj4gb3IgPHZhcj5iPC92YXI+IHR3aWNlLCB3aXRoIGJhZAorcmVzdWx0cyBpZiB0aGUgb3BlcmFuZCBoYXMgc2lkZSBlZmZlY3RzLiAgSW4gR05VIEMsIGlmIHlvdSBrbm93IHRoZQordHlwZSBvZiB0aGUgb3BlcmFuZHMgKGhlcmUgdGFrZW4gYXMgPGNvZGU+aW50PC9jb2RlPiksIHlvdSBjYW4gZGVmaW5lCit0aGUgbWFjcm8gc2FmZWx5IGFzIGZvbGxvd3M6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjZGVmaW5lIG1heGludChhLGIpIFwKKyAgICAgICAoe2ludCBfYSA9IChhKSwgX2IgPSAoYik7IF9hICZndDsgX2IgPyBfYSA6IF9iOyB9KQorPC9wcmU+CisgPHA+RW1iZWRkZWQgc3RhdGVtZW50cyBhcmUgbm90IGFsbG93ZWQgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMsIHN1Y2ggYXMKK3RoZSB2YWx1ZSBvZiBhbiBlbnVtZXJhdGlvbiBjb25zdGFudCwgdGhlIHdpZHRoIG9mIGEgYml0LWZpZWxkLCBvcgordGhlIGluaXRpYWwgdmFsdWUgb2YgYSBzdGF0aWMgdmFyaWFibGUuCisKKyA8cD5JZiB5b3UgZG9uJ3Qga25vdyB0aGUgdHlwZSBvZiB0aGUgb3BlcmFuZCwgeW91IGNhbiBzdGlsbCBkbyB0aGlzLCBidXQgeW91CittdXN0IHVzZSA8Y29kZT50eXBlb2Y8L2NvZGU+IChzZWUgPGEgaHJlZj0iVHlwZW9mLmh0bWwjVHlwZW9mIj5UeXBlb2Y8L2E+KS4KKworIDxwPkluIEcrKywgdGhlIHJlc3VsdCB2YWx1ZSBvZiBhIHN0YXRlbWVudCBleHByZXNzaW9uIHVuZGVyZ29lcyBhcnJheSBhbmQKK2Z1bmN0aW9uIHBvaW50ZXIgZGVjYXksIGFuZCBpcyByZXR1cm5lZCBieSB2YWx1ZSB0byB0aGUgZW5jbG9zaW5nCitleHByZXNzaW9uLiAgRm9yIGluc3RhbmNlLCBpZiA8Y29kZT5BPC9jb2RlPiBpcyBhIGNsYXNzLCB0aGVuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIEEgYTsKKyAgICAgCisgICAgICAgICAgICAgKHthO30pLkZvbyAoKQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5jb25zdHJ1Y3RzIGEgdGVtcG9yYXJ5IDxjb2RlPkE8L2NvZGU+IG9iamVjdCB0byBob2xkIHRoZSByZXN1bHQgb2YgdGhlCitzdGF0ZW1lbnQgZXhwcmVzc2lvbiwgYW5kIHRoYXQgaXMgdXNlZCB0byBpbnZva2UgPGNvZGU+Rm9vPC9jb2RlPi4gCitUaGVyZWZvcmUgdGhlIDxjb2RlPnRoaXM8L2NvZGU+IHBvaW50ZXIgb2JzZXJ2ZWQgYnkgPGNvZGU+Rm9vPC9jb2RlPiBpcyBub3QgdGhlCithZGRyZXNzIG9mIDxjb2RlPmE8L2NvZGU+LgorCisgPHA+SW4gYSBzdGF0ZW1lbnQgZXhwcmVzc2lvbiwgYW55IHRlbXBvcmFyaWVzIGNyZWF0ZWQgd2l0aGluIGEgc3RhdGVtZW50CithcmUgZGVzdHJveWVkIGF0IHRoYXQgc3RhdGVtZW50J3MgZW5kLiAgVGhpcyBtYWtlcyBzdGF0ZW1lbnQKK2V4cHJlc3Npb25zIGluc2lkZSBtYWNyb3Mgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gZnVuY3Rpb24gY2FsbHMuICBJbgordGhlIGxhdHRlciBjYXNlIHRlbXBvcmFyaWVzIGludHJvZHVjZWQgZHVyaW5nIGFyZ3VtZW50IGV2YWx1YXRpb24gYXJlCitkZXN0cm95ZWQgYXQgdGhlIGVuZCBvZiB0aGUgc3RhdGVtZW50IHRoYXQgaW5jbHVkZXMgdGhlIGZ1bmN0aW9uCitjYWxsLiAgSW4gdGhlIHN0YXRlbWVudCBleHByZXNzaW9uIGNhc2UgdGhleSBhcmUgZGVzdHJveWVkIGR1cmluZwordGhlIHN0YXRlbWVudCBleHByZXNzaW9uLiAgRm9yIGluc3RhbmNlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBtYWNybyhhKSAgKHtfX3R5cGVvZl9fKGEpIGIgPSAoYSk7IGIgKyAzOyB9KQorICAgICB0ZW1wbGF0ZSZsdDt0eXBlbmFtZSBUJmd0OyBUIGZ1bmN0aW9uKFQgYSkgeyBUIGIgPSBhOyByZXR1cm4gYiArIDM7IH0KKyAgICAgCisgICAgIHZvaWQgZm9vICgpCisgICAgIHsKKyAgICAgICBtYWNybyAoWCAoKSk7CisgICAgICAgZnVuY3Rpb24gKFggKCkpOworICAgICB9Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPmhhcyBkaWZmZXJlbnQgcGxhY2VzIHdoZXJlIHRlbXBvcmFyaWVzIGFyZSBkZXN0cm95ZWQuICBGb3IgdGhlCis8Y29kZT5tYWNybzwvY29kZT4gY2FzZSwgdGhlIHRlbXBvcmFyeSA8Y29kZT5YPC9jb2RlPiBpcyBkZXN0cm95ZWQganVzdCBhZnRlcgordGhlIGluaXRpYWxpemF0aW9uIG9mIDxjb2RlPmI8L2NvZGU+LiAgSW4gdGhlIDxjb2RlPmZ1bmN0aW9uPC9jb2RlPiBjYXNlIHRoYXQKK3RlbXBvcmFyeSBpcyBkZXN0cm95ZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKworIDxwPlRoZXNlIGNvbnNpZGVyYXRpb25zIG1lYW4gdGhhdCBpdCBpcyBwcm9iYWJseSBhIGJhZCBpZGVhIHRvIHVzZQorc3RhdGVtZW50IGV4cHJlc3Npb25zIG9mIHRoaXMgZm9ybSBpbiBoZWFkZXIgZmlsZXMgdGhhdCBhcmUgZGVzaWduZWQgdG8KK3dvcmsgd2l0aCBDKysuICAoTm90ZSB0aGF0IHNvbWUgdmVyc2lvbnMgb2YgdGhlIEdOVSBDIExpYnJhcnkgY29udGFpbmVkCitoZWFkZXIgZmlsZXMgdXNpbmcgc3RhdGVtZW50IGV4cHJlc3Npb25zIHRoYXQgbGVhZCB0byBwcmVjaXNlbHkgdGhpcworYnVnLikKKworIDxwPkp1bXBpbmcgaW50byBhIHN0YXRlbWVudCBleHByZXNzaW9uIHdpdGggPGNvZGU+Z290bzwvY29kZT4gb3IgdXNpbmcgYQorPGNvZGU+c3dpdGNoPC9jb2RlPiBzdGF0ZW1lbnQgb3V0c2lkZSB0aGUgc3RhdGVtZW50IGV4cHJlc3Npb24gd2l0aCBhCis8Y29kZT5jYXNlPC9jb2RlPiBvciA8Y29kZT5kZWZhdWx0PC9jb2RlPiBsYWJlbCBpbnNpZGUgdGhlIHN0YXRlbWVudCBleHByZXNzaW9uIGlzCitub3QgcGVybWl0dGVkLiAgSnVtcGluZyBpbnRvIGEgc3RhdGVtZW50IGV4cHJlc3Npb24gd2l0aCBhIGNvbXB1dGVkCis8Y29kZT5nb3RvPC9jb2RlPiAoc2VlIDxhIGhyZWY9IkxhYmVscy1hcy1WYWx1ZXMuaHRtbCNMYWJlbHMtYXMtVmFsdWVzIj5MYWJlbHMgYXMgVmFsdWVzPC9hPikgaGFzIHVuZGVmaW5lZCBiZWhhdmlvci4gCitKdW1waW5nIG91dCBvZiBhIHN0YXRlbWVudCBleHByZXNzaW9uIGlzIHBlcm1pdHRlZCwgYnV0IGlmIHRoZQorc3RhdGVtZW50IGV4cHJlc3Npb24gaXMgcGFydCBvZiBhIGxhcmdlciBleHByZXNzaW9uIHRoZW4gaXQgaXMKK3Vuc3BlY2lmaWVkIHdoaWNoIG90aGVyIHN1YmV4cHJlc3Npb25zIG9mIHRoYXQgZXhwcmVzc2lvbiBoYXZlIGJlZW4KK2V2YWx1YXRlZCBleGNlcHQgd2hlcmUgdGhlIGxhbmd1YWdlIGRlZmluaXRpb24gcmVxdWlyZXMgY2VydGFpbgorc3ViZXhwcmVzc2lvbnMgdG8gYmUgZXZhbHVhdGVkIGJlZm9yZSBvciBhZnRlciB0aGUgc3RhdGVtZW50CitleHByZXNzaW9uLiAgSW4gYW55IGNhc2UsIGFzIHdpdGggYSBmdW5jdGlvbiBjYWxsLCB0aGUgZXZhbHVhdGlvbiBvZiBhCitzdGF0ZW1lbnQgZXhwcmVzc2lvbiBpcyBub3QgaW50ZXJsZWF2ZWQgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBvdGhlcgorcGFydHMgb2YgdGhlIGNvbnRhaW5pbmcgZXhwcmVzc2lvbi4gIEZvciBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBmb28gKCksICgoeyBiYXIxICgpOyBnb3RvIGE7IDA7IH0pICsgYmFyMiAoKSksIGJheigpOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5jYWxscyA8Y29kZT5mb288L2NvZGU+IGFuZCA8Y29kZT5iYXIxPC9jb2RlPiBhbmQgZG9lcyBub3QgY2FsbCA8Y29kZT5iYXo8L2NvZGU+IGJ1dAorbWF5IG9yIG1heSBub3QgY2FsbCA8Y29kZT5iYXIyPC9jb2RlPi4gIElmIDxjb2RlPmJhcjI8L2NvZGU+IGlzIGNhbGxlZCwgaXQgaXMKK2NhbGxlZCBhZnRlciA8Y29kZT5mb288L2NvZGU+IGFuZCBiZWZvcmUgPGNvZGU+YmFyMTwvY29kZT4uCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1N0YXRlbWVudHMtaW1wbGVtZW50YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RhdGVtZW50cy1pbXBsZW1lbnRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMzc3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1N0YXRlbWVudHMtaW1wbGVtZW50YXRpb24uaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdGF0ZW1lbnRzIGltcGxlbWVudGF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIiB0aXRsZT0iQyBJbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRlY2xhcmF0b3JzLWltcGxlbWVudGF0aW9uLmh0bWwjRGVjbGFyYXRvcnMtaW1wbGVtZW50YXRpb24iIHRpdGxlPSJEZWNsYXJhdG9ycyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlByZXByb2Nlc3NpbmctZGlyZWN0aXZlcy1pbXBsZW1lbnRhdGlvbi5odG1sI1ByZXByb2Nlc3NpbmctZGlyZWN0aXZlcy1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IlByZXByb2Nlc3NpbmcgZGlyZWN0aXZlcyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdGF0ZW1lbnRzLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlByZXByb2Nlc3NpbmctZGlyZWN0aXZlcy1pbXBsZW1lbnRhdGlvbi5odG1sI1ByZXByb2Nlc3NpbmctZGlyZWN0aXZlcy1pbXBsZW1lbnRhdGlvbiI+UHJlcHJvY2Vzc2luZyBkaXJlY3RpdmVzIGltcGxlbWVudGF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRGVjbGFyYXRvcnMtaW1wbGVtZW50YXRpb24uaHRtbCNEZWNsYXJhdG9ycy1pbXBsZW1lbnRhdGlvbiI+RGVjbGFyYXRvcnMgaW1wbGVtZW50YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiI+QyBJbXBsZW1lbnRhdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMTIgU3RhdGVtZW50czwvaDM+CisKKyAgICAgPHVsPgorPGxpPjxjaXRlPlRoZSBtYXhpbXVtIG51bWJlciBvZiA8L2NpdGU+PGNvZGU+Y2FzZTwvY29kZT48Y2l0ZT4gdmFsdWVzIGluIGEgPC9jaXRlPjxjb2RlPnN3aXRjaDwvY29kZT48Y2l0ZT4KK3N0YXRlbWVudCAoQzkwIDYuNi40LjIpLjwvY2l0ZT4KKworICAgICA8cD5HQ0MgaXMgb25seSBsaW1pdGVkIGJ5IGF2YWlsYWJsZSBtZW1vcnkuCisKKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1N0YXRpYy1EZWZpbml0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdGF0aWMtRGVmaW5pdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGU1NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdGF0aWMtRGVmaW5pdGlvbnMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdGF0aWMgRGVmaW5pdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MuaHRtbCNDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncyIgdGl0bGU9IkMrKyBNaXN1bmRlcnN0YW5kaW5ncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik5hbWUtbG9va3VwLmh0bWwjTmFtZS1sb29rdXAiIHRpdGxlPSJOYW1lIGxvb2t1cCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdGF0aWMtRGVmaW5pdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTmFtZS1sb29rdXAuaHRtbCNOYW1lLWxvb2t1cCI+TmFtZSBsb29rdXA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzIj5DKysgTWlzdW5kZXJzdGFuZGluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4xMS43LjEgRGVjbGFyZSA8ZW0+YW5kPC9lbT4gRGVmaW5lIFN0YXRpYyBNZW1iZXJzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ18wMDJiXzAwMmItc3RhdGljLWRhdGFfMDAyYy1kZWNsYXJpbmctYW5kLWRlZmluaW5nLTM1NzAiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0aWMtZGF0YS1pbi1DXzAwMmJfMDAyYl8wMDJjLWRlY2xhcmluZy1hbmQtZGVmaW5pbmctMzU3MSI+PC9hPjxhIG5hbWU9ImluZGV4LWRlY2xhcmluZy1zdGF0aWMtZGF0YS1pbi1DXzAwMmJfMDAyYi0zNTcyIj48L2E+PGEgbmFtZT0iaW5kZXgtZGVmaW5pbmctc3RhdGljLWRhdGEtaW4tQ18wMDJiXzAwMmItMzU3MyI+PC9hPldoZW4gYSBjbGFzcyBoYXMgc3RhdGljIGRhdGEgbWVtYmVycywgaXQgaXMgbm90IGVub3VnaCB0byA8ZW0+ZGVjbGFyZTwvZW0+Cit0aGUgc3RhdGljIG1lbWJlcjsgeW91IG11c3QgYWxzbyA8ZW0+ZGVmaW5lPC9lbT4gaXQuICBGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGNsYXNzIEZvbworICAgICB7CisgICAgICAgLi4uCisgICAgICAgdm9pZCBtZXRob2QoKTsKKyAgICAgICBzdGF0aWMgaW50IGJhcjsKKyAgICAgfTsKKzwvcHJlPgorIDxwPlRoaXMgZGVjbGFyYXRpb24gb25seSBlc3RhYmxpc2hlcyB0aGF0IHRoZSBjbGFzcyA8Y29kZT5Gb288L2NvZGU+IGhhcyBhbgorPGNvZGU+aW50PC9jb2RlPiBuYW1lZCA8Y29kZT5Gb286OmJhcjwvY29kZT4sIGFuZCBhIG1lbWJlciBmdW5jdGlvbiBuYW1lZAorPGNvZGU+Rm9vOjptZXRob2Q8L2NvZGU+LiAgQnV0IHlvdSBzdGlsbCBuZWVkIHRvIGRlZmluZSA8ZW0+Ym90aDwvZW0+Cis8Y29kZT5tZXRob2Q8L2NvZGU+IGFuZCA8Y29kZT5iYXI8L2NvZGU+IGVsc2V3aGVyZS4gIEFjY29yZGluZyB0byB0aGUgSVNPCitzdGFuZGFyZCwgeW91IG11c3Qgc3VwcGx5IGFuIGluaXRpYWxpemVyIGluIG9uZSAoYW5kIG9ubHkgb25lKSBzb3VyY2UKK2ZpbGUsIHN1Y2ggYXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgRm9vOjpiYXIgPSAwOworPC9wcmU+CisgPHA+T3RoZXIgQysrIGNvbXBpbGVycyBtYXkgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlIHN0YW5kYXJkIGJlaGF2aW9yLiAKK0FzIGEgcmVzdWx0LCB3aGVuIHlvdSBzd2l0Y2ggdG8gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmcrKzwvc3Bhbj48L3NhbXA+IGZyb20gb25lIG9mIHRoZXNlIGNvbXBpbGVycywKK3lvdSBtYXkgZGlzY292ZXIgdGhhdCBhIHByb2dyYW0gdGhhdCBhcHBlYXJlZCB0byB3b3JrIGNvcnJlY3RseSBpbiBmYWN0Citkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBzdGFuZGFyZDogPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmcrKzwvc3Bhbj48L3NhbXA+IHJlcG9ydHMgYXMgdW5kZWZpbmVkCitzeW1ib2xzIGFueSBzdGF0aWMgZGF0YSBtZW1iZXJzIHRoYXQgbGFjayBkZWZpbml0aW9ucy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RydWN0dXJlXzAwMmRQYWNraW5nLVByYWdtYXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RydWN0dXJlXzAwMmRQYWNraW5nLVByYWdtYXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDgzMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdHJ1Y3R1cmVfMDAyZFBhY2tpbmctUHJhZ21hcy5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN0cnVjdHVyZS1QYWNraW5nIFByYWdtYXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiIHRpdGxlPSJQcmFnbWFzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3ltYm9sXzAwMmRSZW5hbWluZy1QcmFnbWFzLmh0bWwjU3ltYm9sXzAwMmRSZW5hbWluZy1QcmFnbWFzIiB0aXRsZT0iU3ltYm9sLVJlbmFtaW5nIFByYWdtYXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJXZWFrLVByYWdtYXMuaHRtbCNXZWFrLVByYWdtYXMiIHRpdGxlPSJXZWFrIFByYWdtYXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3RydWN0dXJlLVBhY2tpbmctUHJhZ21hcyI+PC9hPgorPGEgbmFtZT0iU3RydWN0dXJlXzAwMmRQYWNraW5nLVByYWdtYXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iV2Vhay1QcmFnbWFzLmh0bWwjV2Vhay1QcmFnbWFzIj5XZWFrIFByYWdtYXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMuaHRtbCNTeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMiPlN5bWJvbC1SZW5hbWluZyBQcmFnbWFzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiPlByYWdtYXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU4LjggU3RydWN0dXJlLVBhY2tpbmcgUHJhZ21hczwvaDQ+CisKKzxwPkZvciBjb21wYXRpYmlsaXR5IHdpdGggTWljcm9zb2Z0IFdpbmRvd3MgY29tcGlsZXJzLCBHQ0Mgc3VwcG9ydHMgYQorc2V0IG9mIDxjb2RlPiNwcmFnbWE8L2NvZGU+IGRpcmVjdGl2ZXMgdGhhdCBjaGFuZ2UgdGhlIG1heGltdW0gYWxpZ25tZW50IG9mCittZW1iZXJzIG9mIHN0cnVjdHVyZXMgKG90aGVyIHRoYW4gemVyby13aWR0aCBiaXQtZmllbGRzKSwgdW5pb25zLCBhbmQKK2NsYXNzZXMgc3Vic2VxdWVudGx5IGRlZmluZWQuIFRoZSA8dmFyPm48L3Zhcj4gdmFsdWUgYmVsb3cgYWx3YXlzIGlzIHJlcXVpcmVkCit0byBiZSBhIHNtYWxsIHBvd2VyIG9mIHR3byBhbmQgc3BlY2lmaWVzIHRoZSBuZXcgYWxpZ25tZW50IGluIGJ5dGVzLgorCisgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT48Y29kZT4jcHJhZ21hIHBhY2soPC9jb2RlPjx2YXI+bjwvdmFyPjxjb2RlPik8L2NvZGU+IHNpbXBseSBzZXRzIHRoZSBuZXcgYWxpZ25tZW50LiAKKzxsaT48Y29kZT4jcHJhZ21hIHBhY2soKTwvY29kZT4gc2V0cyB0aGUgYWxpZ25tZW50IHRvIHRoZSBvbmUgdGhhdCB3YXMgaW4KK2VmZmVjdCB3aGVuIGNvbXBpbGF0aW9uIHN0YXJ0ZWQgKHNlZSBhbHNvIGNvbW1hbmQtbGluZSBvcHRpb24KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGFjay1zdHJ1Y3RbPTwvc3Bhbj48dmFyPm48L3Zhcj48c3BhbiBjbGFzcz0ib3B0aW9uIj5dPC9zcGFuPjwvc2FtcD4gc2VlIDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPikuIAorPGxpPjxjb2RlPiNwcmFnbWEgcGFjayhwdXNoWyw8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+XSk8L2NvZGU+IHB1c2hlcyB0aGUgY3VycmVudCBhbGlnbm1lbnQKK3NldHRpbmcgb24gYW4gaW50ZXJuYWwgc3RhY2sgYW5kIHRoZW4gb3B0aW9uYWxseSBzZXRzIHRoZSBuZXcgYWxpZ25tZW50LiAKKzxsaT48Y29kZT4jcHJhZ21hIHBhY2socG9wKTwvY29kZT4gcmVzdG9yZXMgdGhlIGFsaWdubWVudCBzZXR0aW5nIHRvIHRoZSBvbmUKK3NhdmVkIGF0IHRoZSB0b3Agb2YgdGhlIGludGVybmFsIHN0YWNrIChhbmQgcmVtb3ZlcyB0aGF0IHN0YWNrIGVudHJ5KS4gCitOb3RlIHRoYXQgPGNvZGU+I3ByYWdtYSBwYWNrKFs8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+XSk8L2NvZGU+IGRvZXMgbm90IGluZmx1ZW5jZSB0aGlzIGludGVybmFsCitzdGFjazsgdGh1cyBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIDxjb2RlPiNwcmFnbWEgcGFjayhwdXNoKTwvY29kZT4gZm9sbG93ZWQgYnkKK211bHRpcGxlIDxjb2RlPiNwcmFnbWEgcGFjayg8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+KTwvY29kZT4gaW5zdGFuY2VzIGFuZCBmaW5hbGl6ZWQgYnkgYSBzaW5nbGUKKzxjb2RlPiNwcmFnbWEgcGFjayhwb3ApPC9jb2RlPi4KKyAgICAgIDwvb2w+CisKKyA8cD5Tb21lIHRhcmdldHMsIGUuZy4gaTM4NiBhbmQgUG93ZXJQQywgc3VwcG9ydCB0aGUgPGNvZGU+bXNfc3RydWN0PC9jb2RlPgorPGNvZGU+I3ByYWdtYTwvY29kZT4gd2hpY2ggbGF5cyBvdXQgYSBzdHJ1Y3R1cmUgYXMgdGhlIGRvY3VtZW50ZWQKKzxjb2RlPl9fYXR0cmlidXRlX18gKChtc19zdHJ1Y3QpKTwvY29kZT4uCisgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT48Y29kZT4jcHJhZ21hIG1zX3N0cnVjdCBvbjwvY29kZT4gdHVybnMgb24gdGhlIGxheW91dCBmb3Igc3RydWN0dXJlcworZGVjbGFyZWQuIAorPGxpPjxjb2RlPiNwcmFnbWEgbXNfc3RydWN0IG9mZjwvY29kZT4gdHVybnMgb2ZmIHRoZSBsYXlvdXQgZm9yIHN0cnVjdHVyZXMKK2RlY2xhcmVkLiAKKzxsaT48Y29kZT4jcHJhZ21hIG1zX3N0cnVjdCByZXNldDwvY29kZT4gZ29lcyBiYWNrIHRvIHRoZSBkZWZhdWx0IGxheW91dC4KKyAgICAgIDwvb2w+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1N0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3RydWN0dXJlcy11bmlvbnMtZW51bWVyYXRpb25zLWFuZC1iaXRfMDAyZGZpZWxkcy1pbXBsZW1lbnRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3M2RmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1N0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24uaHRtbApAQCAtMCwwICsxLDExOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3RydWN0dXJlcyB1bmlvbnMgZW51bWVyYXRpb25zIGFuZCBiaXQtZmllbGRzIGltcGxlbWVudGF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIiB0aXRsZT0iQyBJbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkhpbnRzLWltcGxlbWVudGF0aW9uLmh0bWwjSGludHMtaW1wbGVtZW50YXRpb24iIHRpdGxlPSJIaW50cyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlF1YWxpZmllcnMtaW1wbGVtZW50YXRpb24uaHRtbCNRdWFsaWZpZXJzLWltcGxlbWVudGF0aW9uIiB0aXRsZT0iUXVhbGlmaWVycyBpbXBsZW1lbnRhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdHJ1Y3R1cmVzLXVuaW9ucy1lbnVtZXJhdGlvbnMtYW5kLWJpdC1maWVsZHMtaW1wbGVtZW50YXRpb24iPjwvYT4KKzxhIG5hbWU9IlN0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUXVhbGlmaWVycy1pbXBsZW1lbnRhdGlvbi5odG1sI1F1YWxpZmllcnMtaW1wbGVtZW50YXRpb24iPlF1YWxpZmllcnMgaW1wbGVtZW50YXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJIaW50cy1pbXBsZW1lbnRhdGlvbi5odG1sI0hpbnRzLWltcGxlbWVudGF0aW9uIj5IaW50cyBpbXBsZW1lbnRhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj5DIEltcGxlbWVudGF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC45IFN0cnVjdHVyZXMsIHVuaW9ucywgZW51bWVyYXRpb25zLCBhbmQgYml0LWZpZWxkczwvaDM+CisKKyAgICAgPHVsPgorPGxpPjxjaXRlPkEgbWVtYmVyIG9mIGEgdW5pb24gb2JqZWN0IGlzIGFjY2Vzc2VkIHVzaW5nIGEgbWVtYmVyIG9mIGEKK2RpZmZlcmVudCB0eXBlIChDOTAgNi4zLjIuMykuPC9jaXRlPgorCisgICAgIDxwPlRoZSByZWxldmFudCBieXRlcyBvZiB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcmUgdHJlYXRlZCBhcworYW4gb2JqZWN0IG9mIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSBhY2Nlc3MuICBTZWUgPGEgaHJlZj0iVHlwZV8wMDJkcHVubmluZy5odG1sI1R5cGVfMDAyZHB1bm5pbmciPlR5cGUtcHVubmluZzwvYT4uICBUaGlzCittYXkgYmUgYSB0cmFwIHJlcHJlc2VudGF0aW9uLgorCisgICAgIDxsaT48Y2l0ZT5XaGV0aGVyIGEgJmxkcXVvO3BsYWluJnJkcXVvOyA8L2NpdGU+PGNvZGU+aW50PC9jb2RlPjxjaXRlPiBiaXQtZmllbGQgaXMgdHJlYXRlZCBhcyBhCis8L2NpdGU+PGNvZGU+c2lnbmVkIGludDwvY29kZT48Y2l0ZT4gYml0LWZpZWxkIG9yIGFzIGFuIDwvY2l0ZT48Y29kZT51bnNpZ25lZCBpbnQ8L2NvZGU+PGNpdGU+IGJpdC1maWVsZAorKEM5MCA2LjUuMiwgQzkwIDYuNS4yLjEsIEM5OSA2LjcuMiwgQzk5IDYuNy4yLjEpLjwvY2l0ZT4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1mdW5zaWduZWRfMDAyZGJpdGZpZWxkcy0yMzk1Ij48L2E+QnkgZGVmYXVsdCBpdCBpcyB0cmVhdGVkIGFzIDxjb2RlPnNpZ25lZCBpbnQ8L2NvZGU+IGJ1dCB0aGlzIG1heSBiZSBjaGFuZ2VkCitieSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnNpZ25lZC1iaXRmaWVsZHM8L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgPGxpPjxjaXRlPkFsbG93YWJsZSBiaXQtZmllbGQgdHlwZXMgb3RoZXIgdGhhbiA8L2NpdGU+PGNvZGU+X0Jvb2w8L2NvZGU+PGNpdGU+LCA8L2NpdGU+PGNvZGU+c2lnbmVkIGludDwvY29kZT48Y2l0ZT4sCithbmQgPC9jaXRlPjxjb2RlPnVuc2lnbmVkIGludDwvY29kZT48Y2l0ZT4gKEM5OSA2LjcuMi4xKS48L2NpdGU+CisKKyAgICAgPHA+Tm8gb3RoZXIgdHlwZXMgYXJlIHBlcm1pdHRlZCBpbiBzdHJpY3RseSBjb25mb3JtaW5nIG1vZGUuIAorPCEtLSBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gcmVzdHJpY3QgdGhlIHBlZHdhcm4gZm9yIG90aGVyIHR5cGVzIHRvIEM5MCAtLT4KKzwhLS0gbW9kZSBhbmQgZG9jdW1lbnQgdGhlIG90aGVyIHR5cGVzIGZvciBDOTkgbW9kZT8gLS0+CisKKyAgICAgPGxpPjxjaXRlPldoZXRoZXIgYSBiaXQtZmllbGQgY2FuIHN0cmFkZGxlIGEgc3RvcmFnZS11bml0IGJvdW5kYXJ5IChDOTAKKzYuNS4yLjEsIEM5OSA2LjcuMi4xKS48L2NpdGU+CisKKyAgICAgPHA+RGV0ZXJtaW5lZCBieSBBQkkuCisKKyAgICAgPGxpPjxjaXRlPlRoZSBvcmRlciBvZiBhbGxvY2F0aW9uIG9mIGJpdC1maWVsZHMgd2l0aGluIGEgdW5pdCAoQzkwCis2LjUuMi4xLCBDOTkgNi43LjIuMSkuPC9jaXRlPgorCisgICAgIDxwPkRldGVybWluZWQgYnkgQUJJLgorCisgICAgIDxsaT48Y2l0ZT5UaGUgYWxpZ25tZW50IG9mIG5vbi1iaXQtZmllbGQgbWVtYmVycyBvZiBzdHJ1Y3R1cmVzIChDOTAKKzYuNS4yLjEsIEM5OSA2LjcuMi4xKS48L2NpdGU+CisKKyAgICAgPHA+RGV0ZXJtaW5lZCBieSBBQkkuCisKKyAgICAgPGxpPjxjaXRlPlRoZSBpbnRlZ2VyIHR5cGUgY29tcGF0aWJsZSB3aXRoIGVhY2ggZW51bWVyYXRlZCB0eXBlIChDOTAKKzYuNS4yLjIsIEM5OSA2LjcuMi4yKS48L2NpdGU+CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZnNob3J0XzAwMmRlbnVtcy0yMzk2Ij48L2E+Tm9ybWFsbHksIHRoZSB0eXBlIGlzIDxjb2RlPnVuc2lnbmVkIGludDwvY29kZT4gaWYgdGhlcmUgYXJlIG5vIG5lZ2F0aXZlCit2YWx1ZXMgaW4gdGhlIGVudW1lcmF0aW9uLCBvdGhlcndpc2UgPGNvZGU+aW50PC9jb2RlPi4gIElmCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnNob3J0LWVudW1zPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLCB0aGVuIGlmIHRoZXJlIGFyZSBuZWdhdGl2ZSB2YWx1ZXMKK2l0IGlzIHRoZSBmaXJzdCBvZiA8Y29kZT5zaWduZWQgY2hhcjwvY29kZT4sIDxjb2RlPnNob3J0PC9jb2RlPiBhbmQgPGNvZGU+aW50PC9jb2RlPgordGhhdCBjYW4gcmVwcmVzZW50IGFsbCB0aGUgdmFsdWVzLCBvdGhlcndpc2UgaXQgaXMgdGhlIGZpcnN0IG9mCis8Y29kZT51bnNpZ25lZCBjaGFyPC9jb2RlPiwgPGNvZGU+dW5zaWduZWQgc2hvcnQ8L2NvZGU+IGFuZCA8Y29kZT51bnNpZ25lZCBpbnQ8L2NvZGU+Cit0aGF0IGNhbiByZXByZXNlbnQgYWxsIHRoZSB2YWx1ZXMuIAorPCEtLSBPbiBhIGZldyB1bnVzdWFsIHRhcmdldHMgd2l0aCA2NC1iaXQgaW50LCB0aGlzIGRvZXNuJ3QgYWdyZWUgd2l0aCAtLT4KKzwhLS0gdGhlIGNvZGUgYW5kIG9uZSBvZiB0aGUgdHlwZXMgYWNjZXNzZWQgdmlhIG1vZGUgYXR0cmlidXRlcyAod2hpY2ggLS0+Cis8IS0tIGFyZSBub3QgY3VycmVudGx5IGNvbnNpZGVyZWQgZXh0ZW5kZWQgaW50ZWdlciB0eXBlcykgbWF5IGJlIHVzZWQuIC0tPgorPCEtLSBJZiB0aGVzZSB0eXBlcyBhcmUgbWFkZSBleHRlbmRlZCBpbnRlZ2VyIHR5cGVzLCBpdCB3b3VsZCBzdGlsbCBiZSAtLT4KKzwhLS0gdGhlIGNhc2UgdGhhdCAtZnNob3J0LWVudW1zIHN0b3BzIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIC0tPgorPCEtLSBjb25mb3JtaW5nIHRvIEM5MCBvbiB0aG9zZSB0YXJnZXRzLiAtLT4KKworICAgICA8cD5PbiBzb21lIHRhcmdldHMsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2hvcnQtZW51bXM8L3NwYW4+PC9zYW1wPiBpcyB0aGUgZGVmYXVsdDsgdGhpcyBpcworZGV0ZXJtaW5lZCBieSB0aGUgQUJJLgorCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdWJtb2RlbC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1N1Ym1vZGVsLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjVlZTBmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdWJtb2RlbC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN1Ym1vZGVsIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIiB0aXRsZT0iSW52b2tpbmcgR0NDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVGFyZ2V0LU9wdGlvbnMuaHRtbCNUYXJnZXQtT3B0aW9ucyIgdGl0bGU9IlRhcmdldCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiIHRpdGxlPSJDb2RlIEdlbiBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlN1Ym1vZGVsLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUYXJnZXQtT3B0aW9ucy5odG1sI1RhcmdldC1PcHRpb25zIj5UYXJnZXQgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyI+SW52b2tpbmcgR0NDPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xNyBIYXJkd2FyZSBNb2RlbHMgYW5kIENvbmZpZ3VyYXRpb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3VibW9kZWwtb3B0aW9ucy0xMDc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3BlY2lmeWluZy1oYXJkd2FyZS1jb25maWctMTA3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWhhcmR3YXJlLW1vZGVscy1hbmQtY29uZmlndXJhdGlvbnNfMDAyYy1zcGVjaWZ5aW5nLTEwNzciPjwvYT48YSBuYW1lPSJpbmRleC1tYWNoaW5lLWRlcGVuZGVudC1vcHRpb25zLTEwNzgiPjwvYT4KK0VhY2ggdGFyZ2V0IG1hY2hpbmUgdHlwZXMgY2FuIGhhdmUgaXRzIG93bgorc3BlY2lhbCBvcHRpb25zLCBzdGFydGluZyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzssIHRvIGNob29zZSBhbW9uZyB2YXJpb3VzCitoYXJkd2FyZSBtb2RlbHMgb3IgY29uZmlndXJhdGlvbnMmbWRhc2g7Zm9yIGV4YW1wbGUsIDY4MDEwIHZzIDY4MDIwLAorZmxvYXRpbmcgY29wcm9jZXNzb3Igb3Igbm9uZS4gIEEgc2luZ2xlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZQorY29tcGlsZXIgY2FuIGNvbXBpbGUgZm9yIGFueSBtb2RlbCBvciBjb25maWd1cmF0aW9uLCBhY2NvcmRpbmcgdG8gdGhlCitvcHRpb25zIHNwZWNpZmllZC4KKworIDxwPlNvbWUgY29uZmlndXJhdGlvbnMgb2YgdGhlIGNvbXBpbGVyIGFsc28gc3VwcG9ydCBhZGRpdGlvbmFsIHNwZWNpYWwKK29wdGlvbnMsIHVzdWFsbHkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBjb21waWxlcnMgb24gdGhlIHNhbWUKK3BsYXRmb3JtLgorCis8IS0tIFRoaXMgbGlzdCBpcyBvcmRlcmVkIGFscGhhbnVtZXJpY2FsbHkgYnkgc3Vic2VjdGlvbiBuYW1lLiAtLT4KKzwhLS0gSXQgc2hvdWxkIGJlIHRoZSBzYW1lIG9yZGVyIGFuZCBzcGVsbGluZyBhcyB0aGVzZSBvcHRpb25zIGFyZSBsaXN0ZWQgLS0+Cis8IS0tIGluIE1hY2hpbmUgRGVwZW5kZW50IE9wdGlvbnMgLS0+Cis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj5BQXJjaDY0IE9wdGlvbnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucyI+QWRhcHRldmEgRXBpcGhhbnkgT3B0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkFSTS1PcHRpb25zLmh0bWwjQVJNLU9wdGlvbnMiPkFSTSBPcHRpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+QVZSIE9wdGlvbnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJCbGFja2Zpbi1PcHRpb25zLmh0bWwjQmxhY2tmaW4tT3B0aW9ucyI+QmxhY2tmaW4gT3B0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkM2WC1PcHRpb25zLmh0bWwjQzZYLU9wdGlvbnMiPkM2WCBPcHRpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj5DUklTIE9wdGlvbnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJDUjE2LU9wdGlvbnMuaHRtbCNDUjE2LU9wdGlvbnMiPkNSMTYgT3B0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkRhcndpbi1PcHRpb25zLmh0bWwjRGFyd2luLU9wdGlvbnMiPkRhcndpbiBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkRFQy1BbHBoYS1PcHRpb25zLmh0bWwjREVDLUFscGhhLU9wdGlvbnMiPkRFQyBBbHBoYSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkZSMzAtT3B0aW9ucy5odG1sI0ZSMzAtT3B0aW9ucyI+RlIzMCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPkZSViBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkdOVV8wMDJmTGludXgtT3B0aW9ucy5odG1sI0dOVV8wMDJmTGludXgtT3B0aW9ucyI+R05VL0xpbnV4IE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC1PcHRpb25zLmh0bWwjSDhfMDAyZjMwMC1PcHRpb25zIj5IOC8zMDAgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiPkhQUEEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBXaW5kb3dzIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+SUEtNjQgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJMTTMyLU9wdGlvbnMuaHRtbCNMTTMyLU9wdGlvbnMiPkxNMzIgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNMzJDLU9wdGlvbnMuaHRtbCNNMzJDLU9wdGlvbnMiPk0zMkMgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPk0zMlIvRCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik02ODB4MC1PcHRpb25zLmh0bWwjTTY4MHgwLU9wdGlvbnMiPk02ODB4MCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1Db3JlLU9wdGlvbnMuaHRtbCNNQ29yZS1PcHRpb25zIj5NQ29yZSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPk1lUCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1pY3JvQmxhemUtT3B0aW9ucy5odG1sI01pY3JvQmxhemUtT3B0aW9ucyI+TWljcm9CbGF6ZSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1JUFMtT3B0aW9ucy5odG1sI01JUFMtT3B0aW9ucyI+TUlQUyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+TU1JWCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1OMTAzMDAtT3B0aW9ucy5odG1sI01OMTAzMDAtT3B0aW9ucyI+TU4xMDMwMCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1veGllLU9wdGlvbnMuaHRtbCNNb3hpZS1PcHRpb25zIj5Nb3hpZSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0icGljb0NoaXAtT3B0aW9ucy5odG1sI3BpY29DaGlwLU9wdGlvbnMiPnBpY29DaGlwIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQy1PcHRpb25zLmh0bWwjUG93ZXJQQy1PcHRpb25zIj5Qb3dlclBDIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUkw3OC1PcHRpb25zLmh0bWwjUkw3OC1PcHRpb25zIj5STDc4IE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucy5odG1sI1JTXzAwMmY2MDAwLWFuZC1Qb3dlclBDLU9wdGlvbnMiPlJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJSWC1PcHRpb25zLmh0bWwjUlgtT3B0aW9ucyI+UlggT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucy5odG1sI1NfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zIj5TLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNTY29yZS1PcHRpb25zIj5TY29yZSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNILU9wdGlvbnMuaHRtbCNTSC1PcHRpb25zIj5TSCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNvbGFyaXMtMi1PcHRpb25zLmh0bWwjU29sYXJpcy0yLU9wdGlvbnMiPlNvbGFyaXMgMiBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj5TUEFSQyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNQVS1PcHRpb25zLmh0bWwjU1BVLU9wdGlvbnMiPlNQVSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlN5c3RlbS1WLU9wdGlvbnMuaHRtbCNTeXN0ZW0tVi1PcHRpb25zIj5TeXN0ZW0gViBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1PcHRpb25zIj5USUxFLUd4IE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVElMRVByby1PcHRpb25zLmh0bWwjVElMRVByby1PcHRpb25zIj5USUxFUHJvIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIj5WODUwIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVkFYLU9wdGlvbnMuaHRtbCNWQVgtT3B0aW9ucyI+VkFYIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVk1TLU9wdGlvbnMuaHRtbCNWTVMtT3B0aW9ucyI+Vk1TIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVnhXb3Jrcy1PcHRpb25zLmh0bWwjVnhXb3Jrcy1PcHRpb25zIj5WeFdvcmtzIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0ieDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjeDg2XzAwMmQ2NC1PcHRpb25zIj54ODYtNjQgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJYc3Rvcm15MTYtT3B0aW9ucy5odG1sI1hzdG9ybXkxNi1PcHRpb25zIj5Yc3Rvcm15MTYgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJ6U2VyaWVzLU9wdGlvbnMuaHRtbCN6U2VyaWVzLU9wdGlvbnMiPnpTZXJpZXMgT3B0aW9uczwvYT4KKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1N1YnNjcmlwdGluZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdWJzY3JpcHRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE2ZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TdWJzY3JpcHRpbmcuaHRtbApAQCAtMCwwICsxLDc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdWJzY3JpcHRpbmcgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXNjYXBlZC1OZXdsaW5lcy5odG1sI0VzY2FwZWQtTmV3bGluZXMiIHRpdGxlPSJFc2NhcGVkIE5ld2xpbmVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUG9pbnRlci1Bcml0aC5odG1sI1BvaW50ZXItQXJpdGgiIHRpdGxlPSJQb2ludGVyIEFyaXRoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlN1YnNjcmlwdGluZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQb2ludGVyLUFyaXRoLmh0bWwjUG9pbnRlci1Bcml0aCI+UG9pbnRlciBBcml0aDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVzY2FwZWQtTmV3bGluZXMuaHRtbCNFc2NhcGVkLU5ld2xpbmVzIj5Fc2NhcGVkIE5ld2xpbmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjIyIE5vbi1MdmFsdWUgQXJyYXlzIE1heSBIYXZlIFN1YnNjcmlwdHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdWJzY3JpcHRpbmctMjUzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5c18wMDJjLW5vbl8wMDJkbHZhbHVlLTI1MzciPjwvYT4KKzxhIG5hbWU9ImluZGV4LXN1YnNjcmlwdGluZy1hbmQtZnVuY3Rpb24tdmFsdWVzLTI1MzgiPjwvYT5JbiBJU08gQzk5LCBhcnJheXMgdGhhdCBhcmUgbm90IGx2YWx1ZXMgc3RpbGwgZGVjYXkgdG8gcG9pbnRlcnMsIGFuZAorbWF5IGJlIHN1YnNjcmlwdGVkLCBhbHRob3VnaCB0aGV5IG1heSBub3QgYmUgbW9kaWZpZWQgb3IgdXNlZCBhZnRlcgordGhlIG5leHQgc2VxdWVuY2UgcG9pbnQgYW5kIHRoZSB1bmFyeSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZhbXA7PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wZXJhdG9yIG1heSBub3QgYmUKK2FwcGxpZWQgdG8gdGhlbS4gIEFzIGFuIGV4dGVuc2lvbiwgR05VIEMgYWxsb3dzIHN1Y2ggYXJyYXlzIHRvIGJlCitzdWJzY3JpcHRlZCBpbiBDOTAgbW9kZSwgdGhvdWdoIG90aGVyd2lzZSB0aGV5IGRvIG5vdCBkZWNheSB0bworcG9pbnRlcnMgb3V0c2lkZSBDOTkgbW9kZS4gIEZvciBleGFtcGxlLAordGhpcyBpcyB2YWxpZCBpbiBHTlUgQyB0aG91Z2ggbm90IHZhbGlkIGluIEM5MDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0cnVjdCBmb28ge2ludCBhWzRdO307CisgICAgIAorICAgICBzdHJ1Y3QgZm9vIGYoKTsKKyAgICAgCisgICAgIGJhciAoaW50IGluZGV4KQorICAgICB7CisgICAgICAgcmV0dXJuIGYoKS5hW2luZGV4XTsKKyAgICAgfQorPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TeW1ib2xfMDAyZFJlbmFtaW5nLVByYWdtYXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3ltYm9sXzAwMmRSZW5hbWluZy1QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1N2U0OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3ltYm9sXzAwMmRSZW5hbWluZy1QcmFnbWFzLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3ltYm9sLVJlbmFtaW5nIFByYWdtYXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiIHRpdGxlPSJQcmFnbWFzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU29sYXJpcy1QcmFnbWFzLmh0bWwjU29sYXJpcy1QcmFnbWFzIiB0aXRsZT0iU29sYXJpcyBQcmFnbWFzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3RydWN0dXJlXzAwMmRQYWNraW5nLVByYWdtYXMuaHRtbCNTdHJ1Y3R1cmVfMDAyZFBhY2tpbmctUHJhZ21hcyIgdGl0bGU9IlN0cnVjdHVyZS1QYWNraW5nIFByYWdtYXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltYm9sLVJlbmFtaW5nLVByYWdtYXMiPjwvYT4KKzxhIG5hbWU9IlN5bWJvbF8wMDJkUmVuYW1pbmctUHJhZ21hcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTdHJ1Y3R1cmVfMDAyZFBhY2tpbmctUHJhZ21hcy5odG1sI1N0cnVjdHVyZV8wMDJkUGFja2luZy1QcmFnbWFzIj5TdHJ1Y3R1cmUtUGFja2luZyBQcmFnbWFzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU29sYXJpcy1QcmFnbWFzLmh0bWwjU29sYXJpcy1QcmFnbWFzIj5Tb2xhcmlzIFByYWdtYXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTguNyBTeW1ib2wtUmVuYW1pbmcgUHJhZ21hczwvaDQ+CisKKzxwPkZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFNvbGFyaXMgc3lzdGVtIGhlYWRlcnMsIEdDQworc3VwcG9ydHMgdHdvIDxjb2RlPiNwcmFnbWE8L2NvZGU+IGRpcmVjdGl2ZXMgdGhhdCBjaGFuZ2UgdGhlIG5hbWUgdXNlZCBpbgorYXNzZW1ibHkgZm9yIGEgZ2l2ZW4gZGVjbGFyYXRpb24uIFRvIGdldCB0aGlzIGVmZmVjdAorb24gYWxsIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgR0NDLCB1c2UgdGhlIGFzbSBsYWJlbHMgZXh0ZW5zaW9uIChzZWUgPGEgaHJlZj0iQXNtLUxhYmVscy5odG1sI0FzbS1MYWJlbHMiPkFzbSBMYWJlbHM8L2E+KS4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+cmVkZWZpbmVfZXh0bmFtZSA8L2NvZGU+PHZhcj5vbGRuYW1lPC92YXI+IDx2YXI+bmV3bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWFfMDAyYy1yZWRlZmluZV8wMDVmZXh0bmFtZS0zNDcyIj48L2E+CitUaGlzIHByYWdtYSBnaXZlcyB0aGUgQyBmdW5jdGlvbiA8dmFyPm9sZG5hbWU8L3Zhcj4gdGhlIGFzc2VtYmx5IHN5bWJvbAorPHZhcj5uZXduYW1lPC92YXI+LiAgVGhlIHByZXByb2Nlc3NvciBtYWNybyA8Y29kZT5fX1BSQUdNQV9SRURFRklORV9FWFROQU1FPC9jb2RlPgoraXMgZGVmaW5lZCBpZiB0aGlzIHByYWdtYSBpcyBhdmFpbGFibGUgKGN1cnJlbnRseSBvbiBhbGwgcGxhdGZvcm1zKS4gCis8L2RsPgorCisgPHA+VGhpcyBwcmFnbWEgYW5kIHRoZSBhc20gbGFiZWxzIGV4dGVuc2lvbiBpbnRlcmFjdCBpbiBhIGNvbXBsaWNhdGVkCittYW5uZXIuICBIZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB5b3UgbWF5IHdhbnQgdG8gYmUgYXdhcmUgb2YuCisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPkJvdGggcHJhZ21hcyBzaWxlbnRseSBhcHBseSBvbmx5IHRvIGRlY2xhcmF0aW9ucyB3aXRoIGV4dGVybmFsCitsaW5rYWdlLiAgQXNtIGxhYmVscyBkbyBub3QgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLgorCisgICAgIDxsaT5JbiBDKyssIGJvdGggcHJhZ21hcyBzaWxlbnRseSBhcHBseSBvbmx5IHRvIGRlY2xhcmF0aW9ucyB3aXRoCismbGRxdW87QyZyZHF1bzsgbGlua2FnZS4gIEFnYWluLCBhc20gbGFiZWxzIGRvIG5vdCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24uCisKKyAgICAgPGxpPklmIGFueSBvZiB0aGUgdGhyZWUgd2F5cyBvZiBjaGFuZ2luZyB0aGUgYXNzZW1ibHkgbmFtZSBvZiBhCitkZWNsYXJhdGlvbiBpcyBhcHBsaWVkIHRvIGEgZGVjbGFyYXRpb24gd2hvc2UgYXNzZW1ibHkgbmFtZSBoYXMKK2FscmVhZHkgYmVlbiBkZXRlcm1pbmVkIChlaXRoZXIgYnkgYSBwcmV2aW91cyB1c2Ugb2Ygb25lIG9mIHRoZXNlCitmZWF0dXJlcywgb3IgYmVjYXVzZSB0aGUgY29tcGlsZXIgbmVlZGVkIHRoZSBhc3NlbWJseSBuYW1lIGluIG9yZGVyIHRvCitnZW5lcmF0ZSBjb2RlKSwgYW5kIHRoZSBuZXcgbmFtZSBpcyBkaWZmZXJlbnQsIGEgd2FybmluZyBpc3N1ZXMgYW5kCit0aGUgbmFtZSBkb2VzIG5vdCBjaGFuZ2UuCisKKyAgICAgPGxpPlRoZSA8dmFyPm9sZG5hbWU8L3Zhcj4gdXNlZCBieSA8Y29kZT4jcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWU8L2NvZGU+IGlzCithbHdheXMgdGhlIEMtbGFuZ3VhZ2UgbmFtZS4KKyAgICAgIDwvb2w+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1N5bmNocm9uaXphdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TeW5jaHJvbml6YXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzhmZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TeW5jaHJvbml6YXRpb24uaHRtbApAQCAtMCwwICsxLDg0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TeW5jaHJvbml6YXRpb24gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIiB0aXRsZT0iT2JqZWN0aXZlLUMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFeGNlcHRpb25zLmh0bWwjRXhjZXB0aW9ucyIgdGl0bGU9IkV4Y2VwdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGYXN0LWVudW1lcmF0aW9uLmh0bWwjRmFzdC1lbnVtZXJhdGlvbiIgdGl0bGU9IkZhc3QgZW51bWVyYXRpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3luY2hyb25pemF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZhc3QtZW51bWVyYXRpb24uaHRtbCNGYXN0LWVudW1lcmF0aW9uIj5GYXN0IGVudW1lcmF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRXhjZXB0aW9ucy5odG1sI0V4Y2VwdGlvbnMiPkV4Y2VwdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPYmplY3RpdmVfMDAyZEMuaHRtbCNPYmplY3RpdmVfMDAyZEMiPk9iamVjdGl2ZS1DPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC44IFN5bmNocm9uaXphdGlvbjwvaDM+CisKKzxwPkdOVSBPYmplY3RpdmUtQyBwcm92aWRlcyBzdXBwb3J0IGZvciBzeW5jaHJvbml6ZWQgYmxvY2tzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBAc3luY2hyb25pemVkIChPYmpDQ2xhc3MgKmd1YXJkKSB7CisgICAgICAgICAuLi4KKyAgICAgICB9Cis8L3ByZT4KKyA8cD5VcG9uIGVudGVyaW5nIHRoZSA8Y29kZT5Ac3luY2hyb25pemVkPC9jb2RlPiBibG9jaywgYSB0aHJlYWQgb2YgZXhlY3V0aW9uCitzaGFsbCBmaXJzdCBjaGVjayB3aGV0aGVyIGEgbG9jayBoYXMgYmVlbiBwbGFjZWQgb24gdGhlIGNvcnJlc3BvbmRpbmcKKzxjb2RlPmd1YXJkPC9jb2RlPiBvYmplY3QgYnkgYW5vdGhlciB0aHJlYWQuICBJZiBpdCBoYXMsIHRoZSBjdXJyZW50IHRocmVhZAorc2hhbGwgd2FpdCB1bnRpbCB0aGUgb3RoZXIgdGhyZWFkIHJlbGlucXVpc2hlcyBpdHMgbG9jay4gIE9uY2UKKzxjb2RlPmd1YXJkPC9jb2RlPiBiZWNvbWVzIGF2YWlsYWJsZSwgdGhlIGN1cnJlbnQgdGhyZWFkIHdpbGwgcGxhY2UgaXRzIG93bgorbG9jayBvbiBpdCwgZXhlY3V0ZSB0aGUgY29kZSBjb250YWluZWQgaW4gdGhlIDxjb2RlPkBzeW5jaHJvbml6ZWQ8L2NvZGU+CitibG9jaywgYW5kIGZpbmFsbHkgcmVsaW5xdWlzaCB0aGUgbG9jayAodGhlcmVieSBtYWtpbmcgPGNvZGU+Z3VhcmQ8L2NvZGU+CithdmFpbGFibGUgdG8gb3RoZXIgdGhyZWFkcykuCisKKyA8cD5Vbmxpa2UgSmF2YSwgT2JqZWN0aXZlLUMgZG9lcyBub3QgYWxsb3cgZm9yIGVudGlyZSBtZXRob2RzIHRvIGJlCittYXJrZWQgPGNvZGU+QHN5bmNocm9uaXplZDwvY29kZT4uICBOb3RlIHRoYXQgdGhyb3dpbmcgZXhjZXB0aW9ucyBvdXQgb2YKKzxjb2RlPkBzeW5jaHJvbml6ZWQ8L2NvZGU+IGJsb2NrcyBpcyBhbGxvd2VkLCBhbmQgd2lsbCBjYXVzZSB0aGUgZ3VhcmRpbmcKK29iamVjdCB0byBiZSB1bmxvY2tlZCBwcm9wZXJseS4KKworIDxwPkJlY2F1c2Ugb2YgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHN5bmNocm9uaXphdGlvbiBhbmQgZXhjZXB0aW9uCitoYW5kbGluZywgeW91IGNhbiBvbmx5IHVzZSA8Y29kZT5Ac3luY2hyb25pemVkPC9jb2RlPiB3aGVuIGNvbXBpbGluZyB3aXRoCitleGNlcHRpb25zIGVuYWJsZWQsIHRoYXQgaXMgd2l0aCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZvYmpjLWV4Y2VwdGlvbnM8L3NwYW4+PC9zYW1wPi4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3lzdGVtLVYtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9TeXN0ZW0tVi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyNTRhNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvU3lzdGVtLVYtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN5c3RlbSBWIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyIgdGl0bGU9IlNQVSBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sI1RJTEVfMDAyZEd4LU9wdGlvbnMiIHRpdGxlPSJUSUxFLUd4IE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3lzdGVtLVYtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUxFXzAwMmRHeC1PcHRpb25zLmh0bWwjVElMRV8wMDJkR3gtT3B0aW9ucyI+VElMRS1HeCBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyI+U1BVIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuNDIgT3B0aW9ucyBmb3IgU3lzdGVtIFY8L2g0PgorCis8cD5UaGVzZSBhZGRpdGlvbmFsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiBTeXN0ZW0gViBSZWxlYXNlIDQgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgY29tcGlsZXJzIG9uIHRob3NlIHN5c3RlbXM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1HPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1HLTIyNDAiPjwvYT5DcmVhdGUgYSBzaGFyZWQgb2JqZWN0LiAKK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN5bWJvbGljPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXNoYXJlZDwvc3Bhbj48L3NhbXA+IGJlIHVzZWQgaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ReTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtUXktMjI0MSI+PC9hPklkZW50aWZ5IHRoZSB2ZXJzaW9ucyBvZiBlYWNoIHRvb2wgdXNlZCBieSB0aGUgY29tcGlsZXIsIGluIGEKKzxjb2RlPi5pZGVudDwvY29kZT4gYXNzZW1ibGVyIGRpcmVjdGl2ZSBpbiB0aGUgb3V0cHV0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVFuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Rbi0yMjQyIj48L2E+UmVmcmFpbiBmcm9tIGFkZGluZyA8Y29kZT4uaWRlbnQ8L2NvZGU+IGRpcmVjdGl2ZXMgdG8gdGhlIG91dHB1dCBmaWxlICh0aGlzIGlzCit0aGUgZGVmYXVsdCkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tWVAsPC9jb2RlPjx2YXI+ZGlyczwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1ZUC0yMjQzIj48L2E+U2VhcmNoIHRoZSBkaXJlY3RvcmllcyA8dmFyPmRpcnM8L3Zhcj4sIGFuZCBubyBvdGhlcnMsIGZvciBsaWJyYXJpZXMKK3NwZWNpZmllZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tWW0sPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LVltLTIyNDQiPjwvYT5Mb29rIGluIHRoZSBkaXJlY3RvcnkgPHZhcj5kaXI8L3Zhcj4gdG8gZmluZCB0aGUgTTQgcHJlcHJvY2Vzc29yLiAKK1RoZSBhc3NlbWJsZXIgdXNlcyB0aGlzIG9wdGlvbi4gCis8IS0tIFRoaXMgaXMgc3VwcG9zZWQgdG8gZ28gd2l0aCBhIC1ZZCBmb3IgcHJlZGVmaW5lZCBNNCBtYWNybyBmaWxlcywgYnV0IC0tPgorPCEtLSB0aGUgZ2VuZXJpYyBhc3NlbWJsZXIgdGhhdCBjb21lcyB3aXRoIFNvbGFyaXMgdGFrZXMganVzdCAtWW0uIC0tPgorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVEktQzZYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVEktQzZYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzM2NThhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9USS1DNlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJIEM2WCBCdWlsdC1pbiBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIiB0aXRsZT0iVGFyZ2V0IEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU1BVLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTUFUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlNQVSBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUxFXzAwMmRHeC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjVElMRV8wMDJkR3gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlRJTEUtR3ggQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJLUM2WC1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlRJLUM2WC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJTEVfMDAyZEd4LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5USUxFLUd4IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNQVS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU1BVLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlNQVSBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPlRhcmdldCBCdWlsdGluczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTYuMjEgVEkgQzZYIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPkdDQyBwcm92aWRlcyBpbnRyaW5zaWNzIHRvIGFjY2VzcyBjZXJ0YWluIGluc3RydWN0aW9ucyBvZiB0aGUgVEkgQzZYCitwcm9jZXNzb3JzLiAgVGhlc2UgaW50cmluc2ljcywgbGlzdGVkIGJlbG93LCBhcmUgYXZhaWxhYmxlIGFmdGVyCitpbmNsdXNpb24gb2YgdGhlIDxjb2RlPmM2eF9pbnRyaW5zaWNzLmg8L2NvZGU+IGhlYWRlciBmaWxlLiAgVGhleSBtYXAgZGlyZWN0bHkKK3RvIEM2WCBpbnN0cnVjdGlvbnMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAKKyAgICAgaW50IF9zYWRkIChpbnQsIGludCkKKyAgICAgaW50IF9zc3ViIChpbnQsIGludCkKKyAgICAgaW50IF9zYWRkMiAoaW50LCBpbnQpCisgICAgIGludCBfc3N1YjIgKGludCwgaW50KQorICAgICBsb25nIGxvbmcgX21weTIgKGludCwgaW50KQorICAgICBsb25nIGxvbmcgX3NtcHkyIChpbnQsIGludCkKKyAgICAgaW50IF9hZGQ0IChpbnQsIGludCkKKyAgICAgaW50IF9zdWI0IChpbnQsIGludCkKKyAgICAgaW50IF9zYWRkdTQgKGludCwgaW50KQorICAgICAKKyAgICAgaW50IF9zbXB5IChpbnQsIGludCkKKyAgICAgaW50IF9zbXB5aCAoaW50LCBpbnQpCisgICAgIGludCBfc21weWhsIChpbnQsIGludCkKKyAgICAgaW50IF9zbXB5bGggKGludCwgaW50KQorICAgICAKKyAgICAgaW50IF9zc2hsIChpbnQsIGludCkKKyAgICAgaW50IF9zdWJjIChpbnQsIGludCkKKyAgICAgCisgICAgIGludCBfYXZnMiAoaW50LCBpbnQpCisgICAgIGludCBfYXZndTQgKGludCwgaW50KQorICAgICAKKyAgICAgaW50IF9jbHJyIChpbnQsIGludCkKKyAgICAgaW50IF9leHRyIChpbnQsIGludCkKKyAgICAgaW50IF9leHRydSAoaW50LCBpbnQpCisgICAgIGludCBfYWJzIChpbnQpCisgICAgIGludCBfYWJzMiAoaW50KQorICAgICAKKzwvcHJlPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVElMRVByby1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RJTEVQcm8tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDcxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RJTEVQcm8tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJTEVQcm8gQnVpbHQtaW4gRnVuY3Rpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyIgdGl0bGU9IlRhcmdldCBCdWlsdGlucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJTEVfMDAyZEd4LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iVElMRS1HeCBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElMRVByby1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9IlRJTEVQcm8tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTEVfMDAyZEd4LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5USUxFLUd4IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni4yMyBUSUxFUHJvIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPkdDQyBwcm92aWRlcyBpbnRyaW5zaWNzIHRvIGFjY2VzcyBldmVyeSBpbnN0cnVjdGlvbiBvZiB0aGUgVElMRVBybworcHJvY2Vzc29yLiAgVGhlIGludHJpbnNpY3MgYXJlIG9mIHRoZSBmb3JtOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgCisgICAgIHVuc2lnbmVkIF9faW5zbl88dmFyPm9wPC92YXI+ICguLi4pCisgICAgIAorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij53aGVyZSA8dmFyPm9wPC92YXI+IGlzIHRoZSBuYW1lIG9mIHRoZSBpbnN0cnVjdGlvbi4gIFJlZmVyIHRvIHRoZSBJU0EgbWFudWFsCitmb3IgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgaW5zdHJ1Y3Rpb25zLgorCisgPHA+R0NDIGFsc28gcHJvdmlkZXMgaW50cmluc2ljcyB0byBkaXJlY3RseSBhY2Nlc3MgdGhlIG5ldHdvcmsgcmVnaXN0ZXJzLiAKK1RoZSBpbnRyaW5zaWNzIGFyZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIAorICAgICB1bnNpZ25lZCBfX3RpbGVfaWRuMF9yZWNlaXZlICh2b2lkKQorICAgICB1bnNpZ25lZCBfX3RpbGVfaWRuMV9yZWNlaXZlICh2b2lkKQorICAgICB1bnNpZ25lZCBfX3RpbGVfc25fcmVjZWl2ZSAodm9pZCkKKyAgICAgdW5zaWduZWQgX190aWxlX3VkbjBfcmVjZWl2ZSAodm9pZCkKKyAgICAgdW5zaWduZWQgX190aWxlX3VkbjFfcmVjZWl2ZSAodm9pZCkKKyAgICAgdW5zaWduZWQgX190aWxlX3VkbjJfcmVjZWl2ZSAodm9pZCkKKyAgICAgdW5zaWduZWQgX190aWxlX3VkbjNfcmVjZWl2ZSAodm9pZCkKKyAgICAgdm9pZCBfX3RpbGVfaWRuX3NlbmQgKHVuc2lnbmVkKQorICAgICB2b2lkIF9fdGlsZV9zbl9zZW5kICh1bnNpZ25lZCkKKyAgICAgdm9pZCBfX3RpbGVfdWRuX3NlbmQgKHVuc2lnbmVkKQorICAgICAKKzwvcHJlPgorIDxwPlRoZSBpbnRyaW5zaWMgPGNvZGU+dm9pZCBfX3RpbGVfbmV0d29ya19iYXJyaWVyICh2b2lkKTwvY29kZT4gaXMgdXNlZCB0bworZ3VhcmFudGVlIHRoYXQgbm8gbmV0d29yayBvcGVyYXRpb25zIGJlZm9yZSBpdCBhcmUgcmVvcmRlcmVkIHdpdGgKK3Rob3NlIGFmdGVyIGl0LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9USUxFUHJvLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVElMRVByby1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1ZTg3MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVElMRVByby1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElMRVBybyBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1PcHRpb25zIiB0aXRsZT0iVElMRS1HeCBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVjg1MC1PcHRpb25zLmh0bWwjVjg1MC1PcHRpb25zIiB0aXRsZT0iVjg1MCBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJTEVQcm8tT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPlY4NTAgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1PcHRpb25zIj5USUxFLUd4IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuNDQgVElMRVBybyBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtVElMRVByby1vcHRpb25zLTIyNTEiPjwvYT4KK1RoZXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIHRoZSBUSUxFUHJvOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1jcHUtMjI1MiI+PC9hPlNlbGVjdHMgdGhlIHR5cGUgb2YgQ1BVIHRvIGJlIHRhcmdldGVkLiAgQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZAordHlwZSBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnRpbGVwcm88L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTMyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tMzItMjI1MyI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIGEgMzItYml0IGVudmlyb25tZW50LCB3aGljaCBzZXRzIGludCwgbG9uZywgYW5kCitwb2ludGVyIHRvIDMyIGJpdHMuICBUaGlzIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBiZWhhdmlvciBzbyB0aGUgZmxhZworaXMgZXNzZW50aWFsbHkgaWdub3JlZC4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9USUxFXzAwMmRHeC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RJTEVfMDAyZEd4LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDg2NmMzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9USUxFXzAwMmRHeC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElMRS1HeCBCdWlsdC1pbiBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIiB0aXRsZT0iVGFyZ2V0IEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVEktQzZYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSS1DNlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IlRJIEM2WCBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSUxFUHJvLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSUxFUHJvLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJUSUxFUHJvIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSUxFLUd4LUJ1aWx0LWluLUZ1bmN0aW9ucyI+PC9hPgorPGEgbmFtZT0iVElMRV8wMDJkR3gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUxFUHJvLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSUxFUHJvLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlRJTEVQcm8gQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVEktQzZYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSS1DNlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+VEkgQzZYIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyI+VGFyZ2V0IEJ1aWx0aW5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41Ni4yMiBUSUxFLUd4IEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPkdDQyBwcm92aWRlcyBpbnRyaW5zaWNzIHRvIGFjY2VzcyBldmVyeSBpbnN0cnVjdGlvbiBvZiB0aGUgVElMRS1HeAorcHJvY2Vzc29yLiAgVGhlIGludHJpbnNpY3MgYXJlIG9mIHRoZSBmb3JtOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgCisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2luc25fPHZhcj5vcDwvdmFyPiAoLi4uKQorICAgICAKKzwvcHJlPgorIDxwPldoZXJlIDx2YXI+b3A8L3Zhcj4gaXMgdGhlIG5hbWUgb2YgdGhlIGluc3RydWN0aW9uLiAgUmVmZXIgdG8gdGhlIElTQSBtYW51YWwKK2ZvciB0aGUgY29tcGxldGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMuCisKKyA8cD5HQ0MgYWxzbyBwcm92aWRlcyBpbnRyaW5zaWNzIHRvIGRpcmVjdGx5IGFjY2VzcyB0aGUgbmV0d29yayByZWdpc3RlcnMuIAorVGhlIGludHJpbnNpY3MgYXJlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgCisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3RpbGVfaWRuMF9yZWNlaXZlICh2b2lkKQorICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX190aWxlX2lkbjFfcmVjZWl2ZSAodm9pZCkKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdGlsZV91ZG4wX3JlY2VpdmUgKHZvaWQpCisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3RpbGVfdWRuMV9yZWNlaXZlICh2b2lkKQorICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX190aWxlX3VkbjJfcmVjZWl2ZSAodm9pZCkKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdGlsZV91ZG4zX3JlY2VpdmUgKHZvaWQpCisgICAgIHZvaWQgX190aWxlX2lkbl9zZW5kICh1bnNpZ25lZCBsb25nIGxvbmcpCisgICAgIHZvaWQgX190aWxlX3Vkbl9zZW5kICh1bnNpZ25lZCBsb25nIGxvbmcpCisgICAgIAorPC9wcmU+CisgPHA+VGhlIGludHJpbnNpYyA8Y29kZT52b2lkIF9fdGlsZV9uZXR3b3JrX2JhcnJpZXIgKHZvaWQpPC9jb2RlPiBpcyB1c2VkIHRvCitndWFyYW50ZWUgdGhhdCBubyBuZXR3b3JrIG9wZXJhdGlvbnMgYmVmb3JlIGl0IGFyZSByZW9yZGVyZWQgd2l0aAordGhvc2UgYWZ0ZXIgaXQuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVElMRV8wMDJkR3gtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzAyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RJTEVfMDAyZEd4LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USUxFLUd4IE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3lzdGVtLVYtT3B0aW9ucy5odG1sI1N5c3RlbS1WLU9wdGlvbnMiIHRpdGxlPSJTeXN0ZW0gViBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVElMRVByby1PcHRpb25zLmh0bWwjVElMRVByby1PcHRpb25zIiB0aXRsZT0iVElMRVBybyBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRJTEUtR3gtT3B0aW9ucyI+PC9hPgorPGEgbmFtZT0iVElMRV8wMDJkR3gtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSUxFUHJvLU9wdGlvbnMuaHRtbCNUSUxFUHJvLU9wdGlvbnMiPlRJTEVQcm8gT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN5c3RlbS1WLU9wdGlvbnMuaHRtbCNTeXN0ZW0tVi1PcHRpb25zIj5TeXN0ZW0gViBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjQzIFRJTEUtR3ggT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTEVfMDAyZEd4LW9wdGlvbnMtMjI0NSI+PC9hPgorVGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgb24gdGhlIFRJTEUtR3g6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tY21vZGVsPXNtYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY21vZGVsXzAwM2RzbWFsbC0yMjQ2Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIHNtYWxsIG1vZGVsLiAgVGhlIGRpc3RhbmNlIGZvciBkaXJlY3QgY2FsbHMgaXMKK2xpbWl0ZWQgdG8gNTAwTSBpbiBlaXRoZXIgZGlyZWN0aW9uLiAgUEMtcmVsYXRpdmUgYWRkcmVzc2VzIGFyZSAzMgorYml0cy4gIEFic29sdXRlIGFkZHJlc3NlcyBzdXBwb3J0IHRoZSBmdWxsIGFkZHJlc3MgcmFuZ2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNtb2RlbD1sYXJnZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNtb2RlbF8wMDNkbGFyZ2UtMjI0NyI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBsYXJnZSBtb2RlbC4gIFRoZXJlIGlzIG5vIGxpbWl0YXRpb24gb24gY2FsbAorZGlzdGFuY2UsIHBjLXJlbGF0aXZlIGFkZHJlc3Nlcywgb3IgYWJzb2x1dGUgYWRkcmVzc2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jcHU9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY3B1LTIyNDgiPjwvYT5TZWxlY3RzIHRoZSB0eXBlIG9mIENQVSB0byBiZSB0YXJnZXRlZC4gIEN1cnJlbnRseSB0aGUgb25seSBzdXBwb3J0ZWQKK3R5cGUgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50aWxlZ3g8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTMyPC9jb2RlPjxkdD48Y29kZT4tbTY0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tMzItMjI0OSI+PC9hPjxhIG5hbWU9ImluZGV4LW02NC0yMjUwIj48L2E+R2VuZXJhdGUgY29kZSBmb3IgYSAzMi1iaXQgb3IgNjQtYml0IGVudmlyb25tZW50LiAgVGhlIDMyLWJpdAorZW52aXJvbm1lbnQgc2V0cyBpbnQsIGxvbmcsIGFuZCBwb2ludGVyIHRvIDMyIGJpdHMuICBUaGUgNjQtYml0CitlbnZpcm9ubWVudCBzZXRzIGludCB0byAzMiBiaXRzIGFuZCBsb25nIGFuZCBwb2ludGVyIHRvIDY0IGJpdHMuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVGFyZ2V0LUJ1aWx0aW5zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RhcmdldC1CdWlsdGlucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjRhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RhcmdldC1CdWlsdGlucy5odG1sCkBAIC0wLDAgKzEsODggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRhcmdldCBCdWlsdGlucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPdGhlci1CdWlsdGlucy5odG1sI090aGVyLUJ1aWx0aW5zIiB0aXRsZT0iT3RoZXIgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUYXJnZXQtRm9ybWF0LUNoZWNrcy5odG1sI1RhcmdldC1Gb3JtYXQtQ2hlY2tzIiB0aXRsZT0iVGFyZ2V0IEZvcm1hdCBDaGVja3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVGFyZ2V0LUJ1aWx0aW5zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRhcmdldC1Gb3JtYXQtQ2hlY2tzLmh0bWwjVGFyZ2V0LUZvcm1hdC1DaGVja3MiPlRhcmdldCBGb3JtYXQgQ2hlY2tzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3RoZXItQnVpbHRpbnMuaHRtbCNPdGhlci1CdWlsdGlucyI+T3RoZXIgQnVpbHRpbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNTYgQnVpbHQtaW4gRnVuY3Rpb25zIFNwZWNpZmljIHRvIFBhcnRpY3VsYXIgVGFyZ2V0IE1hY2hpbmVzPC9oMz4KKworPHA+T24gc29tZSB0YXJnZXQgbWFjaGluZXMsIEdDQyBzdXBwb3J0cyBtYW55IGJ1aWx0LWluIGZ1bmN0aW9ucyBzcGVjaWZpYwordG8gdGhvc2UgbWFjaGluZXMuICBHZW5lcmFsbHkgdGhlc2UgZ2VuZXJhdGUgY2FsbHMgdG8gc3BlY2lmaWMgbWFjaGluZQoraW5zdHJ1Y3Rpb25zLCBidXQgYWxsb3cgdGhlIGNvbXBpbGVyIHRvIHNjaGVkdWxlIHRob3NlIGNhbGxzLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQWxwaGEtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0FscGhhLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkFscGhhIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkFSTS1pV01NWHQtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0FSTS1pV01NWHQtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+QVJNIGlXTU1YdCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+QVJNIE5FT04gSW50cmluc2ljczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkFWUi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkFWUiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJCbGFja2Zpbi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjQmxhY2tmaW4tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+QmxhY2tmaW4gQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkZSLVYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNYODYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+WDg2IEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Ilg4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwjWDg2LXRyYW5zYWN0aW9uYWwtbWVtb3J5LWludHJpbnNpY3MiPlg4NiB0cmFuc2FjdGlvbmFsIG1lbW9yeSBpbnRyaW5zaWNzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iTUlQUy1EU1AtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk1JUFMgRFNQIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNSVBTLVBhaXJlZF8wMDJkU2luZ2xlLVN1cHBvcnQuaHRtbCNNSVBTLVBhaXJlZF8wMDJkU2luZ2xlLVN1cHBvcnQiPk1JUFMgUGFpcmVkLVNpbmdsZSBTdXBwb3J0PC9hPgorPGxpPjxhIGhyZWY9Ik1JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+TUlQUyBMb29uZ3NvbiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iT3RoZXItTUlQUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjT3RoZXItTUlQUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5PdGhlciBNSVBTIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJwaWNvQ2hpcC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjcGljb0NoaXAtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+cGljb0NoaXAgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IlBvd2VyUEMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1Bvd2VyUEMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+UG93ZXJQQyBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQy1BbHRpVmVjXzAwMmZWU1gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1Bvd2VyUEMtQWx0aVZlY18wMDJmVlNYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlBvd2VyUEMgQWx0aVZlYy9WU1ggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IlJYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5SWCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Uy8zOTAgU3lzdGVtIHogQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNILUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTSC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5TSCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU1BBUkMtVklTLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTUEFSQy1WSVMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+U1BBUkMgVklTIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJTUFUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NQVS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5TUFUgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IlRJLUM2WC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjVEktQzZYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlRJIEM2WCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVElMRV8wMDJkR3gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1RJTEVfMDAyZEd4LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlRJTEUtR3ggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1RJTEVQcm8tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+VElMRVBybyBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UYXJnZXQtRm9ybWF0LUNoZWNrcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UYXJnZXQtRm9ybWF0LUNoZWNrcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWU5MzcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RhcmdldC1Gb3JtYXQtQ2hlY2tzLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VGFyZ2V0IEZvcm1hdCBDaGVja3MgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIiB0aXRsZT0iVGFyZ2V0IEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiIHRpdGxlPSJQcmFnbWFzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRhcmdldC1Gb3JtYXQtQ2hlY2tzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIj5UYXJnZXQgQnVpbHRpbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNTcgRm9ybWF0IENoZWNrcyBTcGVjaWZpYyB0byBQYXJ0aWN1bGFyIFRhcmdldCBNYWNoaW5lczwvaDM+CisKKzxwPkZvciBzb21lIHRhcmdldCBtYWNoaW5lcywgR0NDIHN1cHBvcnRzIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUKK2Zvcm1hdCBhdHRyaWJ1dGUKKyhzZWUgPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkRlY2xhcmluZyBBdHRyaWJ1dGVzIG9mIEZ1bmN0aW9uczwvYT4pLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU29sYXJpcy1Gb3JtYXQtQ2hlY2tzLmh0bWwjU29sYXJpcy1Gb3JtYXQtQ2hlY2tzIj5Tb2xhcmlzIEZvcm1hdCBDaGVja3M8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJEYXJ3aW4tRm9ybWF0LUNoZWNrcy5odG1sI0Rhcndpbi1Gb3JtYXQtQ2hlY2tzIj5EYXJ3aW4gRm9ybWF0IENoZWNrczwvYT4KKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RhcmdldC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RhcmdldC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxMjkyZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVGFyZ2V0LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UYXJnZXQgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiIHRpdGxlPSJJbnZva2luZyBHQ0MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTcGVjLUZpbGVzLmh0bWwjU3BlYy1GaWxlcyIgdGl0bGU9IlNwZWMgRmlsZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVGFyZ2V0LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTcGVjLUZpbGVzLmh0bWwjU3BlYy1GaWxlcyI+U3BlYyBGaWxlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdDQy5odG1sI0ludm9raW5nLUdDQyI+SW52b2tpbmcgR0NDPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xNiBTcGVjaWZ5aW5nIFRhcmdldCBNYWNoaW5lIGFuZCBDb21waWxlciBWZXJzaW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdGFyZ2V0LW9wdGlvbnMtMTA2OSI+PC9hPjxhIG5hbWU9ImluZGV4LWNyb3NzLWNvbXBpbGluZy0xMDcwIj48L2E+PGEgbmFtZT0iaW5kZXgtc3BlY2lmeWluZy1tYWNoaW5lLXZlcnNpb24tMTA3MSI+PC9hPjxhIG5hbWU9ImluZGV4LXNwZWNpZnlpbmctY29tcGlsZXItdmVyc2lvbi1hbmQtdGFyZ2V0LW1hY2hpbmUtMTA3MiI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbXBpbGVyLXZlcnNpb25fMDAyYy1zcGVjaWZ5aW5nLTEwNzMiPjwvYT48YSBuYW1lPSJpbmRleC10YXJnZXQtbWFjaGluZV8wMDJjLXNwZWNpZnlpbmctMTA3NCI+PC9hPgorVGhlIHVzdWFsIHdheSB0byBydW4gR0NDIGlzIHRvIHJ1biB0aGUgZXhlY3V0YWJsZSBjYWxsZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+LCBvcgorPHNhbXA+PHZhcj5tYWNoaW5lPC92YXI+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPi1nY2M8L3NwYW4+PC9zYW1wPiB3aGVuIGNyb3NzLWNvbXBpbGluZywgb3IKKzxzYW1wPjx2YXI+bWFjaGluZTwvdmFyPjxzcGFuIGNsYXNzPSJjb21tYW5kIj4tZ2NjLTwvc3Bhbj48dmFyPnZlcnNpb248L3Zhcj48L3NhbXA+IHRvIHJ1biBhIHZlcnNpb24gb3RoZXIgdGhhbiB0aGUKK29uZSB0aGF0IHdhcyBpbnN0YWxsZWQgbGFzdC4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVGVtcGxhdGUtSW5zdGFudGlhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UZW1wbGF0ZS1JbnN0YW50aWF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1MWZjMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVGVtcGxhdGUtSW5zdGFudGlhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UZW1wbGF0ZSBJbnN0YW50aWF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIiB0aXRsZT0iQysrIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwMmJfMDAyYi1JbnRlcmZhY2UuaHRtbCNDXzAwMmJfMDAyYi1JbnRlcmZhY2UiIHRpdGxlPSJDKysgSW50ZXJmYWNlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sI0JvdW5kLW1lbWJlci1mdW5jdGlvbnMiIHRpdGxlPSJCb3VuZCBtZW1iZXIgZnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRlbXBsYXRlLUluc3RhbnRpYXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQm91bmQtbWVtYmVyLWZ1bmN0aW9ucy5odG1sI0JvdW5kLW1lbWJlci1mdW5jdGlvbnMiPkJvdW5kIG1lbWJlciBmdW5jdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDXzAwMmJfMDAyYi1JbnRlcmZhY2UuaHRtbCNDXzAwMmJfMDAyYi1JbnRlcmZhY2UiPkMrKyBJbnRlcmZhY2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjUgV2hlcmUncyB0aGUgVGVtcGxhdGU/PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdGVtcGxhdGUtaW5zdGFudGlhdGlvbi0zNTE3Ij48L2E+CitDKysgdGVtcGxhdGVzIGFyZSB0aGUgZmlyc3QgbGFuZ3VhZ2UgZmVhdHVyZSB0byByZXF1aXJlIG1vcmUKK2ludGVsbGlnZW5jZSBmcm9tIHRoZSBlbnZpcm9ubWVudCB0aGFuIG9uZSB1c3VhbGx5IGZpbmRzIG9uIGEgVU5JWAorc3lzdGVtLiAgU29tZWhvdyB0aGUgY29tcGlsZXIgYW5kIGxpbmtlciBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGVhY2gKK3RlbXBsYXRlIGluc3RhbmNlIG9jY3VycyBleGFjdGx5IG9uY2UgaW4gdGhlIGV4ZWN1dGFibGUgaWYgaXQgaXMgbmVlZGVkLAorYW5kIG5vdCBhdCBhbGwgb3RoZXJ3aXNlLiAgVGhlcmUgYXJlIHR3byBiYXNpYyBhcHByb2FjaGVzIHRvIHRoaXMKK3Byb2JsZW0sIHdoaWNoIGFyZSByZWZlcnJlZCB0byBhcyB0aGUgQm9ybGFuZCBtb2RlbCBhbmQgdGhlIENmcm9udCBtb2RlbC4KKworICAgICA8ZGw+Cis8ZHQ+Qm9ybGFuZCBtb2RlbDxkZD5Cb3JsYW5kIEMrKyBzb2x2ZWQgdGhlIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gcHJvYmxlbSBieSBhZGRpbmcgdGhlIGNvZGUKK2VxdWl2YWxlbnQgb2YgY29tbW9uIGJsb2NrcyB0byB0aGVpciBsaW5rZXI7IHRoZSBjb21waWxlciBlbWl0cyB0ZW1wbGF0ZQoraW5zdGFuY2VzIGluIGVhY2ggdHJhbnNsYXRpb24gdW5pdCB0aGF0IHVzZXMgdGhlbSwgYW5kIHRoZSBsaW5rZXIKK2NvbGxhcHNlcyB0aGVtIHRvZ2V0aGVyLiAgVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1vZGVsIGlzIHRoYXQgdGhlIGxpbmtlcgorb25seSBoYXMgdG8gY29uc2lkZXIgdGhlIG9iamVjdCBmaWxlcyB0aGVtc2VsdmVzOyB0aGVyZSBpcyBubyBleHRlcm5hbAorY29tcGxleGl0eSB0byB3b3JyeSBhYm91dC4gIFRoaXMgZGlzYWR2YW50YWdlIGlzIHRoYXQgY29tcGlsYXRpb24gdGltZQoraXMgaW5jcmVhc2VkIGJlY2F1c2UgdGhlIHRlbXBsYXRlIGNvZGUgaXMgYmVpbmcgY29tcGlsZWQgcmVwZWF0ZWRseS4gCitDb2RlIHdyaXR0ZW4gZm9yIHRoaXMgbW9kZWwgdGVuZHMgdG8gaW5jbHVkZSBkZWZpbml0aW9ucyBvZiBhbGwKK3RlbXBsYXRlcyBpbiB0aGUgaGVhZGVyIGZpbGUsIHNpbmNlIHRoZXkgbXVzdCBiZSBzZWVuIHRvIGJlCitpbnN0YW50aWF0ZWQuCisKKyAgICAgPGJyPjxkdD5DZnJvbnQgbW9kZWw8ZGQ+VGhlIEFUJmFtcDtUIEMrKyB0cmFuc2xhdG9yLCBDZnJvbnQsIHNvbHZlZCB0aGUgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorcHJvYmxlbSBieSBjcmVhdGluZyB0aGUgbm90aW9uIG9mIGEgdGVtcGxhdGUgcmVwb3NpdG9yeSwgYW4KK2F1dG9tYXRpY2FsbHkgbWFpbnRhaW5lZCBwbGFjZSB3aGVyZSB0ZW1wbGF0ZSBpbnN0YW5jZXMgYXJlIHN0b3JlZC4gIEEKK21vcmUgbW9kZXJuIHZlcnNpb24gb2YgdGhlIHJlcG9zaXRvcnkgd29ya3MgYXMgZm9sbG93czogQXMgaW5kaXZpZHVhbAorb2JqZWN0IGZpbGVzIGFyZSBidWlsdCwgdGhlIGNvbXBpbGVyIHBsYWNlcyBhbnkgdGVtcGxhdGUgZGVmaW5pdGlvbnMgYW5kCitpbnN0YW50aWF0aW9ucyBlbmNvdW50ZXJlZCBpbiB0aGUgcmVwb3NpdG9yeS4gIEF0IGxpbmsgdGltZSwgdGhlIGxpbmsKK3dyYXBwZXIgYWRkcyBpbiB0aGUgb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeSBhbmQgY29tcGlsZXMgYW55IG5lZWRlZAoraW5zdGFuY2VzIHRoYXQgd2VyZSBub3QgcHJldmlvdXNseSBlbWl0dGVkLiAgVGhlIGFkdmFudGFnZXMgb2YgdGhpcworbW9kZWwgYXJlIG1vcmUgb3B0aW1hbCBjb21waWxhdGlvbiBzcGVlZCBhbmQgdGhlIGFiaWxpdHkgdG8gdXNlIHRoZQorc3lzdGVtIGxpbmtlcjsgdG8gaW1wbGVtZW50IHRoZSBCb3JsYW5kIG1vZGVsIGEgY29tcGlsZXIgdmVuZG9yIGFsc28KK25lZWRzIHRvIHJlcGxhY2UgdGhlIGxpbmtlci4gIFRoZSBkaXNhZHZhbnRhZ2VzIGFyZSB2YXN0bHkgaW5jcmVhc2VkCitjb21wbGV4aXR5LCBhbmQgdGh1cyBwb3RlbnRpYWwgZm9yIGVycm9yOyBmb3Igc29tZSBjb2RlIHRoaXMgY2FuIGJlCitqdXN0IGFzIHRyYW5zcGFyZW50LCBidXQgaW4gcHJhY3RpY2UgaXQgY2FuIGJlZW4gdmVyeSBkaWZmaWN1bHQgdG8gYnVpbGQKK211bHRpcGxlIHByb2dyYW1zIGluIG9uZSBkaXJlY3RvcnkgYW5kIG9uZSBwcm9ncmFtIGluIG11bHRpcGxlCitkaXJlY3Rvcmllcy4gIENvZGUgd3JpdHRlbiBmb3IgdGhpcyBtb2RlbCB0ZW5kcyB0byBzZXBhcmF0ZSBkZWZpbml0aW9ucworb2Ygbm9uLWlubGluZSBtZW1iZXIgdGVtcGxhdGVzIGludG8gYSBzZXBhcmF0ZSBmaWxlLCB3aGljaCBzaG91bGQgYmUKK2NvbXBpbGVkIHNlcGFyYXRlbHkuIAorPC9kbD4KKworIDxwPldoZW4gdXNlZCB3aXRoIEdOVSBsZCB2ZXJzaW9uIDIuOCBvciBsYXRlciBvbiBhbiBFTEYgc3lzdGVtIHN1Y2ggYXMKK0dOVS9MaW51eCBvciBTb2xhcmlzIDIsIG9yIG9uIE1pY3Jvc29mdCBXaW5kb3dzLCBHKysgc3VwcG9ydHMgdGhlCitCb3JsYW5kIG1vZGVsLiAgT24gb3RoZXIgc3lzdGVtcywgRysrIGltcGxlbWVudHMgbmVpdGhlciBhdXRvbWF0aWMKK21vZGVsLgorCisgPHA+WW91IGhhdmUgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBkZWFsaW5nIHdpdGggdGVtcGxhdGUgaW5zdGFudGlhdGlvbnM6CisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPjxhIG5hbWU9ImluZGV4LWZyZXBvLTM1MTgiPjwvYT5Db21waWxlIHlvdXIgdGVtcGxhdGUtdXNpbmcgY29kZSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcmVwbzwvc3Bhbj48L3NhbXA+LiAgVGhlIGNvbXBpbGVyCitnZW5lcmF0ZXMgZmlsZXMgd2l0aCB0aGUgZXh0ZW5zaW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnJwbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBsaXN0aW5nIGFsbCBvZiB0aGUKK3RlbXBsYXRlIGluc3RhbnRpYXRpb25zIHVzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0IGZpbGVzIHRoYXQKK2NvdWxkIGJlIGluc3RhbnRpYXRlZCB0aGVyZTsgdGhlIGxpbmsgd3JhcHBlciwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb2xsZWN0Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK3RoZW4gdXBkYXRlcyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ucnBvPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZpbGVzIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHdoZXJlIHRvIHBsYWNlCit0aG9zZSBpbnN0YW50aWF0aW9ucyBhbmQgcmVidWlsZCBhbnkgYWZmZWN0ZWQgb2JqZWN0IGZpbGVzLiAgVGhlCitsaW5rLXRpbWUgb3ZlcmhlYWQgaXMgbmVnbGlnaWJsZSBhZnRlciB0aGUgZmlyc3QgcGFzcywgYXMgdGhlIGNvbXBpbGVyCitjb250aW51ZXMgdG8gcGxhY2UgdGhlIGluc3RhbnRpYXRpb25zIGluIHRoZSBzYW1lIGZpbGVzLgorCisgICAgIDxwPlRoaXMgaXMgeW91ciBiZXN0IG9wdGlvbiBmb3IgYXBwbGljYXRpb24gY29kZSB3cml0dGVuIGZvciB0aGUgQm9ybGFuZAorbW9kZWwsIGFzIGl0IGp1c3Qgd29ya3MuICBDb2RlIHdyaXR0ZW4gZm9yIHRoZSBDZnJvbnQgbW9kZWwKK25lZWRzIHRvIGJlIG1vZGlmaWVkIHNvIHRoYXQgdGhlIHRlbXBsYXRlIGRlZmluaXRpb25zIGFyZSBhdmFpbGFibGUgYXQKK29uZSBvciBtb3JlIHBvaW50cyBvZiBpbnN0YW50aWF0aW9uOyB1c3VhbGx5IHRoaXMgaXMgYXMgc2ltcGxlIGFzIGFkZGluZworPGNvZGU+I2luY2x1ZGUgJmx0O3RtZXRob2RzLmNjJmd0OzwvY29kZT4gdG8gdGhlIGVuZCBvZiBlYWNoIHRlbXBsYXRlIGhlYWRlci4KKworICAgICA8cD5Gb3IgbGlicmFyeSBjb2RlLCBpZiB5b3Ugd2FudCB0aGUgbGlicmFyeSB0byBwcm92aWRlIGFsbCBvZiB0aGUgdGVtcGxhdGUKK2luc3RhbnRpYXRpb25zIGl0IG5lZWRzLCBqdXN0IHRyeSB0byBsaW5rIGFsbCBvZiBpdHMgb2JqZWN0IGZpbGVzCit0b2dldGhlcjsgdGhlIGxpbmsgd2lsbCBmYWlsLCBidXQgY2F1c2UgdGhlIGluc3RhbnRpYXRpb25zIHRvIGJlCitnZW5lcmF0ZWQgYXMgYSBzaWRlIGVmZmVjdC4gIEJlIHdhcm5lZCwgaG93ZXZlciwgdGhhdCB0aGlzIG1heSBjYXVzZQorY29uZmxpY3RzIGlmIG11bHRpcGxlIGxpYnJhcmllcyB0cnkgdG8gcHJvdmlkZSB0aGUgc2FtZSBpbnN0YW50aWF0aW9ucy4gCitGb3IgZ3JlYXRlciBjb250cm9sLCB1c2UgZXhwbGljaXQgaW5zdGFudGlhdGlvbiBhcyBkZXNjcmliZWQgaW4gdGhlIG5leHQKK29wdGlvbi4KKworICAgICA8bGk+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmRpbXBsaWNpdF8wMDJkdGVtcGxhdGVzLTM1MTkiPjwvYT5Db21waWxlIHlvdXIgY29kZSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8taW1wbGljaXQtdGVtcGxhdGVzPC9zcGFuPjwvc2FtcD4gdG8gZGlzYWJsZSB0aGUKK2ltcGxpY2l0IGdlbmVyYXRpb24gb2YgdGVtcGxhdGUgaW5zdGFuY2VzLCBhbmQgZXhwbGljaXRseSBpbnN0YW50aWF0ZQorYWxsIHRoZSBvbmVzIHlvdSB1c2UuICBUaGlzIGFwcHJvYWNoIHJlcXVpcmVzIG1vcmUga25vd2xlZGdlIG9mIGV4YWN0bHkKK3doaWNoIGluc3RhbmNlcyB5b3UgbmVlZCB0aGFuIGRvIHRoZSBvdGhlcnMsIGJ1dCBpdCdzIGxlc3MKK215c3RlcmlvdXMgYW5kIGFsbG93cyBncmVhdGVyIGNvbnRyb2wuICBZb3UgY2FuIHNjYXR0ZXIgdGhlIGV4cGxpY2l0CitpbnN0YW50aWF0aW9ucyB0aHJvdWdob3V0IHlvdXIgcHJvZ3JhbSwgcGVyaGFwcyBwdXR0aW5nIHRoZW0gaW4gdGhlCit0cmFuc2xhdGlvbiB1bml0cyB3aGVyZSB0aGUgaW5zdGFuY2VzIGFyZSB1c2VkIG9yIHRoZSB0cmFuc2xhdGlvbiB1bml0cwordGhhdCBkZWZpbmUgdGhlIHRlbXBsYXRlcyB0aGVtc2VsdmVzOyB5b3UgY2FuIHB1dCBhbGwgb2YgdGhlIGV4cGxpY2l0CitpbnN0YW50aWF0aW9ucyB5b3UgbmVlZCBpbnRvIG9uZSBiaWcgZmlsZTsgb3IgeW91IGNhbiBjcmVhdGUgc21hbGwgZmlsZXMKK2xpa2UKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAjaW5jbHVkZSAiRm9vLmgiCisgICAgICAgICAgI2luY2x1ZGUgIkZvby5jYyIKKyAgICAgICAgICAKKyAgICAgICAgICB0ZW1wbGF0ZSBjbGFzcyBGb28mbHQ7aW50Jmd0OzsKKyAgICAgICAgICB0ZW1wbGF0ZSBvc3RyZWFtJmFtcDsgb3BlcmF0b3IgJmx0OyZsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zdHJlYW0mYW1wOywgY29uc3QgRm9vJmx0O2ludCZndDsmYW1wOyk7Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5mb3IgZWFjaCBvZiB0aGUgaW5zdGFuY2VzIHlvdSBuZWVkLCBhbmQgY3JlYXRlIGEgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorbGlicmFyeSBmcm9tIHRob3NlLgorCisgICAgIDxwPklmIHlvdSBhcmUgdXNpbmcgQ2Zyb250LW1vZGVsIGNvZGUsIHlvdSBjYW4gcHJvYmFibHkgZ2V0IGF3YXkgd2l0aCBub3QKK3VzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8taW1wbGljaXQtdGVtcGxhdGVzPC9zcGFuPjwvc2FtcD4gd2hlbiBjb21waWxpbmcgZmlsZXMgdGhhdCBkb24ndAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jaW5jbHVkZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0aGUgbWVtYmVyIHRlbXBsYXRlIGRlZmluaXRpb25zLgorCisgICAgIDxwPklmIHlvdSB1c2Ugb25lIGJpZyBmaWxlIHRvIGRvIHRoZSBpbnN0YW50aWF0aW9ucywgeW91IG1heSB3YW50IHRvCitjb21waWxlIGl0IHdpdGhvdXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1pbXBsaWNpdC10ZW1wbGF0ZXM8L3NwYW4+PC9zYW1wPiBzbyB5b3UgZ2V0IGFsbCBvZiB0aGUKK2luc3RhbmNlcyByZXF1aXJlZCBieSB5b3VyIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zIChidXQgbm90IGJ5IGFueQorb3RoZXIgZmlsZXMpIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpZnkgdGhlbSBhcyB3ZWxsLgorCisgICAgIDxwPlRoZSBJU08gQysrIDIwMTEgc3RhbmRhcmQgYWxsb3dzIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgZXhwbGljaXQKK2luc3RhbnRpYXRpb25zICh3aXRoIDxjb2RlPmV4dGVybjwvY29kZT4pLiBHKysgc3VwcG9ydHMgZXhwbGljaXQgaW5zdGFudGlhdGlvbgorZGVjbGFyYXRpb25zIGluIEMrKzk4IG1vZGUgYW5kIGhhcyBleHRlbmRlZCB0aGUgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorc3ludGF4IHRvIHN1cHBvcnQgaW5zdGFudGlhdGlvbiBvZiB0aGUgY29tcGlsZXIgc3VwcG9ydCBkYXRhIGZvciBhCit0ZW1wbGF0ZSBjbGFzcyAoaS5lLiB0aGUgdnRhYmxlKSB3aXRob3V0IGluc3RhbnRpYXRpbmcgYW55IG9mIGl0cworbWVtYmVycyAod2l0aCA8Y29kZT5pbmxpbmU8L2NvZGU+KSwgYW5kIGluc3RhbnRpYXRpb24gb2Ygb25seSB0aGUgc3RhdGljIGRhdGEKK21lbWJlcnMgb2YgYSB0ZW1wbGF0ZSBjbGFzcywgd2l0aG91dCB0aGUgc3VwcG9ydCBkYXRhIG9yIG1lbWJlcgorZnVuY3Rpb25zICh3aXRoICg8Y29kZT5zdGF0aWM8L2NvZGU+KToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBleHRlcm4gdGVtcGxhdGUgaW50IG1heCAoaW50LCBpbnQpOworICAgICAgICAgIGlubGluZSB0ZW1wbGF0ZSBjbGFzcyBGb28mbHQ7aW50Jmd0OzsKKyAgICAgICAgICBzdGF0aWMgdGVtcGxhdGUgY2xhc3MgRm9vJmx0O2ludCZndDs7Cis8L3ByZT4KKyAgICAgPGxpPkRvIG5vdGhpbmcuICBQcmV0ZW5kIEcrKyBkb2VzIGltcGxlbWVudCBhdXRvbWF0aWMgaW5zdGFudGlhdGlvbgorbWFuYWdlbWVudC4gIENvZGUgd3JpdHRlbiBmb3IgdGhlIEJvcmxhbmQgbW9kZWwgd29ya3MgZmluZSwgYnV0CitlYWNoIHRyYW5zbGF0aW9uIHVuaXQgY29udGFpbnMgaW5zdGFuY2VzIG9mIGVhY2ggb2YgdGhlIHRlbXBsYXRlcyBpdAordXNlcy4gIEluIGEgbGFyZ2UgcHJvZ3JhbSwgdGhpcyBjYW4gbGVhZCB0byBhbiB1bmFjY2VwdGFibGUgYW1vdW50IG9mIGNvZGUKK2R1cGxpY2F0aW9uLgorICAgICAgPC9vbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVGVtcG9yYXJpZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVGVtcG9yYXJpZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzgyZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UZW1wb3Jhcmllcy5odG1sCkBAIC0wLDAgKzEsMTA0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UZW1wb3JhcmllcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzIiB0aXRsZT0iQysrIE1pc3VuZGVyc3RhbmRpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTmFtZS1sb29rdXAuaHRtbCNOYW1lLWxvb2t1cCIgdGl0bGU9Ik5hbWUgbG9va3VwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29weS1Bc3NpZ25tZW50Lmh0bWwjQ29weS1Bc3NpZ25tZW50IiB0aXRsZT0iQ29weSBBc3NpZ25tZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRlbXBvcmFyaWVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvcHktQXNzaWdubWVudC5odG1sI0NvcHktQXNzaWdubWVudCI+Q29weSBBc3NpZ25tZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTmFtZS1sb29rdXAuaHRtbCNOYW1lLWxvb2t1cCI+TmFtZSBsb29rdXA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzIj5DKysgTWlzdW5kZXJzdGFuZGluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4xMS43LjMgVGVtcG9yYXJpZXMgTWF5IFZhbmlzaCBCZWZvcmUgWW91IEV4cGVjdDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXRlbXBvcmFyaWVzXzAwMmMtbGlmZXRpbWUtb2YtMzU3NyI+PC9hPjxhIG5hbWU9ImluZGV4LXBvcnRpb25zLW9mLXRlbXBvcmFyeS1vYmplY3RzXzAwMmMtcG9pbnRlcnMtdG8tMzU3OCI+PC9hPkl0IGlzIGRhbmdlcm91cyB0byB1c2UgcG9pbnRlcnMgb3IgcmVmZXJlbmNlcyB0byA8ZW0+cG9ydGlvbnM8L2VtPiBvZiBhCit0ZW1wb3Jhcnkgb2JqZWN0LiAgVGhlIGNvbXBpbGVyIG1heSB2ZXJ5IHdlbGwgZGVsZXRlIHRoZSBvYmplY3QgYmVmb3JlCit5b3UgZXhwZWN0IGl0IHRvLCBsZWF2aW5nIGEgcG9pbnRlciB0byBnYXJiYWdlLiAgVGhlIG1vc3QgY29tbW9uIHBsYWNlCit3aGVyZSB0aGlzIHByb2JsZW0gY3JvcHMgdXAgaXMgaW4gY2xhc3NlcyBsaWtlIHN0cmluZyBjbGFzc2VzLAorZXNwZWNpYWxseSBvbmVzIHRoYXQgZGVmaW5lIGEgY29udmVyc2lvbiBmdW5jdGlvbiB0byB0eXBlIDxjb2RlPmNoYXIgKjwvY29kZT4KK29yIDxjb2RlPmNvbnN0IGNoYXIgKjwvY29kZT4mbWRhc2g7d2hpY2ggaXMgb25lIHJlYXNvbiB3aHkgdGhlIHN0YW5kYXJkCis8Y29kZT5zdHJpbmc8L2NvZGU+IGNsYXNzIHJlcXVpcmVzIHlvdSB0byBjYWxsIHRoZSA8Y29kZT5jX3N0cjwvY29kZT4gbWVtYmVyCitmdW5jdGlvbi4gIEhvd2V2ZXIsIGFueSBjbGFzcyB0aGF0IHJldHVybnMgYSBwb2ludGVyIHRvIHNvbWUgaW50ZXJuYWwKK3N0cnVjdHVyZSBpcyBwb3RlbnRpYWxseSBzdWJqZWN0IHRvIHRoaXMgcHJvYmxlbS4KKworIDxwPkZvciBleGFtcGxlLCBhIHByb2dyYW0gbWF5IHVzZSBhIGZ1bmN0aW9uIDxjb2RlPnN0cmZ1bmM8L2NvZGU+IHRoYXQgcmV0dXJucworPGNvZGU+c3RyaW5nPC9jb2RlPiBvYmplY3RzLCBhbmQgYW5vdGhlciBmdW5jdGlvbiA8Y29kZT5jaGFyZnVuYzwvY29kZT4gdGhhdAorb3BlcmF0ZXMgb24gcG9pbnRlcnMgdG8gPGNvZGU+Y2hhcjwvY29kZT46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdHJpbmcgc3RyZnVuYyAoKTsKKyAgICAgdm9pZCBjaGFyZnVuYyAoY29uc3QgY2hhciAqKTsKKyAgICAgCisgICAgIHZvaWQKKyAgICAgZiAoKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqcCA9IHN0cmZ1bmMoKS5jX3N0cigpOworICAgICAgIC4uLgorICAgICAgIGNoYXJmdW5jIChwKTsKKyAgICAgICAuLi4KKyAgICAgICBjaGFyZnVuYyAocCk7CisgICAgIH0KKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+SW4gdGhpcyBzaXR1YXRpb24sIGl0IG1heSBzZWVtIHJlYXNvbmFibGUgdG8gc2F2ZSBhIHBvaW50ZXIgdG8gdGhlIEMKK3N0cmluZyByZXR1cm5lZCBieSB0aGUgPGNvZGU+Y19zdHI8L2NvZGU+IG1lbWJlciBmdW5jdGlvbiBhbmQgdXNlIHRoYXQgcmF0aGVyCit0aGFuIGNhbGwgPGNvZGU+Y19zdHI8L2NvZGU+IHJlcGVhdGVkbHkuICBIb3dldmVyLCB0aGUgdGVtcG9yYXJ5IHN0cmluZworY3JlYXRlZCBieSB0aGUgY2FsbCB0byA8Y29kZT5zdHJmdW5jPC9jb2RlPiBpcyBkZXN0cm95ZWQgYWZ0ZXIgPGNvZGU+cDwvY29kZT4gaXMKK2luaXRpYWxpemVkLCBhdCB3aGljaCBwb2ludCA8Y29kZT5wPC9jb2RlPiBpcyBsZWZ0IHBvaW50aW5nIHRvIGZyZWVkIG1lbW9yeS4KKworIDxwPkNvZGUgbGlrZSB0aGlzIG1heSBydW4gc3VjY2Vzc2Z1bGx5IHVuZGVyIHNvbWUgb3RoZXIgY29tcGlsZXJzLAorcGFydGljdWxhcmx5IG9ic29sZXRlIGNmcm9udC1iYXNlZCBjb21waWxlcnMgdGhhdCBkZWxldGUgdGVtcG9yYXJpZXMKK2Fsb25nIHdpdGggbm9ybWFsIGxvY2FsIHZhcmlhYmxlcy4gIEhvd2V2ZXIsIHRoZSBHTlUgQysrIGJlaGF2aW9yIGlzCitzdGFuZGFyZC1jb25mb3JtaW5nLCBzbyBpZiB5b3VyIHByb2dyYW0gZGVwZW5kcyBvbiBsYXRlIGRlc3RydWN0aW9uIG9mCit0ZW1wb3JhcmllcyBpdCBpcyBub3QgcG9ydGFibGUuCisKKyA8cD5UaGUgc2FmZSB3YXkgdG8gd3JpdGUgc3VjaCBjb2RlIGlzIHRvIGdpdmUgdGhlIHRlbXBvcmFyeSBhIG5hbWUsIHdoaWNoCitmb3JjZXMgaXQgdG8gcmVtYWluIHVudGlsIHRoZSBlbmQgb2YgdGhlIHNjb3BlIG9mIHRoZSBuYW1lLiAgRm9yCitleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgY29uc3Qgc3RyaW5nJmFtcDsgdG1wID0gc3RyZnVuYyAoKTsKKyAgICAgY2hhcmZ1bmMgKHRtcC5jX3N0ciAoKSk7Cis8L3ByZT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RocmVhZF8wMDJkTG9jYWwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVGhyZWFkXzAwMmRMb2NhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MDMxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RocmVhZF8wMDJkTG9jYWwuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VGhyZWFkLUxvY2FsIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlVubmFtZWQtRmllbGRzLmh0bWwjVW5uYW1lZC1GaWVsZHMiIHRpdGxlPSJVbm5hbWVkIEZpZWxkcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJpbmFyeS1jb25zdGFudHMuaHRtbCNCaW5hcnktY29uc3RhbnRzIiB0aXRsZT0iQmluYXJ5IGNvbnN0YW50cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUaHJlYWQtTG9jYWwiPjwvYT4KKzxhIG5hbWU9IlRocmVhZF8wMDJkTG9jYWwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQmluYXJ5LWNvbnN0YW50cy5odG1sI0JpbmFyeS1jb25zdGFudHMiPkJpbmFyeSBjb25zdGFudHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJVbm5hbWVkLUZpZWxkcy5odG1sI1VubmFtZWQtRmllbGRzIj5Vbm5hbWVkIEZpZWxkczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni42MCBUaHJlYWQtTG9jYWwgU3RvcmFnZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRocmVhZF8wMDJkTG9jYWwtU3RvcmFnZS0zNDg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBhY3JvbnltXzAwN2JUTFNfMDA3ZC0zNDg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDA1Zl8wMDVmdGhyZWFkXzAwN2QtMzQ5MCI+PC9hPgorVGhyZWFkLWxvY2FsIHN0b3JhZ2UgKDxhY3JvbnltPlRMUzwvYWNyb255bT4pIGlzIGEgbWVjaGFuaXNtIGJ5IHdoaWNoIHZhcmlhYmxlcworYXJlIGFsbG9jYXRlZCBzdWNoIHRoYXQgdGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIHRoZSB2YXJpYWJsZSBwZXIgZXh0YW50Cit0aHJlYWQuICBUaGUgcnVudGltZSBtb2RlbCBHQ0MgdXNlcyB0byBpbXBsZW1lbnQgdGhpcyBvcmlnaW5hdGVzCitpbiB0aGUgSUEtNjQgcHJvY2Vzc29yLXNwZWNpZmljIEFCSSwgYnV0IGhhcyBzaW5jZSBiZWVuIG1pZ3JhdGVkCit0byBvdGhlciBwcm9jZXNzb3JzIGFzIHdlbGwuICBJdCByZXF1aXJlcyBzaWduaWZpY2FudCBzdXBwb3J0IGZyb20KK3RoZSBsaW5rZXIgKDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+KSwgZHluYW1pYyBsaW5rZXIgKDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZC5zbzwvc3Bhbj48L3NhbXA+KSwgYW5kCitzeXN0ZW0gbGlicmFyaWVzICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGliYy5zbzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGlicHRocmVhZC5zbzwvc3Bhbj48L3NhbXA+KSwgc28gaXQKK2lzIG5vdCBhdmFpbGFibGUgZXZlcnl3aGVyZS4KKworIDxwPkF0IHRoZSB1c2VyIGxldmVsLCB0aGUgZXh0ZW5zaW9uIGlzIHZpc2libGUgd2l0aCBhIG5ldyBzdG9yYWdlCitjbGFzcyBrZXl3b3JkOiA8Y29kZT5fX3RocmVhZDwvY29kZT4uICBGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIF9fdGhyZWFkIGludCBpOworICAgICBleHRlcm4gX190aHJlYWQgc3RydWN0IHN0YXRlIHM7CisgICAgIHN0YXRpYyBfX3RocmVhZCBjaGFyICpwOworPC9wcmU+CisgPHA+VGhlIDxjb2RlPl9fdGhyZWFkPC9jb2RlPiBzcGVjaWZpZXIgbWF5IGJlIHVzZWQgYWxvbmUsIHdpdGggdGhlIDxjb2RlPmV4dGVybjwvY29kZT4KK29yIDxjb2RlPnN0YXRpYzwvY29kZT4gc3BlY2lmaWVycywgYnV0IHdpdGggbm8gb3RoZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIuIAorV2hlbiB1c2VkIHdpdGggPGNvZGU+ZXh0ZXJuPC9jb2RlPiBvciA8Y29kZT5zdGF0aWM8L2NvZGU+LCA8Y29kZT5fX3RocmVhZDwvY29kZT4gbXVzdCBhcHBlYXIKK2ltbWVkaWF0ZWx5IGFmdGVyIHRoZSBvdGhlciBzdG9yYWdlIGNsYXNzIHNwZWNpZmllci4KKworIDxwPlRoZSA8Y29kZT5fX3RocmVhZDwvY29kZT4gc3BlY2lmaWVyIG1heSBiZSBhcHBsaWVkIHRvIGFueSBnbG9iYWwsIGZpbGUtc2NvcGVkCitzdGF0aWMsIGZ1bmN0aW9uLXNjb3BlZCBzdGF0aWMsIG9yIHN0YXRpYyBkYXRhIG1lbWJlciBvZiBhIGNsYXNzLiAgSXQgbWF5Citub3QgYmUgYXBwbGllZCB0byBibG9jay1zY29wZWQgYXV0b21hdGljIG9yIG5vbi1zdGF0aWMgZGF0YSBtZW1iZXIuCisKKyA8cD5XaGVuIHRoZSBhZGRyZXNzLW9mIG9wZXJhdG9yIGlzIGFwcGxpZWQgdG8gYSB0aHJlYWQtbG9jYWwgdmFyaWFibGUsIGl0IGlzCitldmFsdWF0ZWQgYXQgcnVuIHRpbWUgYW5kIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgdGhyZWFkJ3MKK2luc3RhbmNlIG9mIHRoYXQgdmFyaWFibGUuICBBbiBhZGRyZXNzIHNvIG9idGFpbmVkIG1heSBiZSB1c2VkIGJ5IGFueQordGhyZWFkLiAgV2hlbiBhIHRocmVhZCB0ZXJtaW5hdGVzLCBhbnkgcG9pbnRlcnMgdG8gdGhyZWFkLWxvY2FsIHZhcmlhYmxlcworaW4gdGhhdCB0aHJlYWQgYmVjb21lIGludmFsaWQuCisKKyA8cD5ObyBzdGF0aWMgaW5pdGlhbGl6YXRpb24gbWF5IHJlZmVyIHRvIHRoZSBhZGRyZXNzIG9mIGEgdGhyZWFkLWxvY2FsIHZhcmlhYmxlLgorCisgPHA+SW4gQysrLCBpZiBhbiBpbml0aWFsaXplciBpcyBwcmVzZW50IGZvciBhIHRocmVhZC1sb2NhbCB2YXJpYWJsZSwgaXQgbXVzdAorYmUgYSA8dmFyPmNvbnN0YW50LWV4cHJlc3Npb248L3Zhcj4sIGFzIGRlZmluZWQgaW4gNS4xOS4yIG9mIHRoZSBBTlNJL0lTTyBDKysKK3N0YW5kYXJkLgorCisgPHA+U2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYWtrYWRpYS5vcmcvZHJlcHBlci90bHMucGRmIj5FTEYgSGFuZGxpbmcgRm9yIFRocmVhZC1Mb2NhbCBTdG9yYWdlPC9hPiBmb3IgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZgordGhlIGZvdXIgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgYWRkcmVzc2luZyBtb2RlbHMsIGFuZCBob3cgdGhlIHJ1bnRpbWUKK2lzIGV4cGVjdGVkIHRvIGZ1bmN0aW9uLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQzk5LVRocmVhZF8wMDJkTG9jYWwtRWRpdHMuaHRtbCNDOTktVGhyZWFkXzAwMmRMb2NhbC1FZGl0cyI+Qzk5IFRocmVhZC1Mb2NhbCBFZGl0czwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkNfMDAyYl8wMDJiOTgtVGhyZWFkXzAwMmRMb2NhbC1FZGl0cy5odG1sI0NfMDAyYl8wMDJiOTgtVGhyZWFkXzAwMmRMb2NhbC1FZGl0cyI+QysrOTggVGhyZWFkLUxvY2FsIEVkaXRzPC9hPgorPC91bD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVHJhZGl0aW9uYWwtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UcmFkaXRpb25hbC1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmZGQ3MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVHJhZGl0aW9uYWwtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSS5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRyYWRpdGlvbmFsIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSSIgdGl0bGU9IkdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1vZGVybi1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjTW9kZXJuLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkiIHRpdGxlPSJNb2Rlcm4gR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgQVBJIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRyYWRpdGlvbmFsLUdOVS1PYmplY3RpdmUtQy1ydW50aW1lLUFQSSI+PC9hPgorPGEgbmFtZT0iVHJhZGl0aW9uYWwtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSSI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1vZGVybi1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjTW9kZXJuLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkiPk1vZGVybiBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBBUEk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSSI+R05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgQVBJPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OC4xLjIgVHJhZGl0aW9uYWwgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgQVBJPC9oND4KKworPHA+VGhlIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIHVzZWQgdG8gcHJvdmlkZSBhIGRpZmZlcmVudCBBUEksIHdoaWNoIHdlCitjYWxsIHRoZSAmbGRxdW87dHJhZGl0aW9uYWwmcmRxdW87IEdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSS4gIEZ1bmN0aW9ucworYmVsb25naW5nIHRvIHRoaXMgQVBJIGFyZSBlYXN5IHRvIHJlY29nbml6ZSBiZWNhdXNlIHRoZXkgdXNlIGEKK2RpZmZlcmVudCBuYW1pbmcgY29udmVudGlvbiwgc3VjaCBhcyA8Y29kZT5jbGFzc19nZXRfc3VwZXJfY2xhc3MoKTwvY29kZT4KKyh0cmFkaXRpb25hbCBBUEkpIGluc3RlYWQgb2YgPGNvZGU+Y2xhc3NfZ2V0U3VwZXJjbGFzcygpPC9jb2RlPiAobW9kZXJuCitBUEkpLiAgU29mdHdhcmUgdXNpbmcgdGhpcyBBUEkgaW5jbHVkZXMgdGhlIGZpbGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5vYmpjL29iamMtYXBpLmg8L3NwYW4+PC9zYW1wPiB3aGVyZSBpdCBpcyBkZWNsYXJlZC4KKworIDxwPlN0YXJ0aW5nIHdpdGggR0NDIDQuNy4wLCB0aGUgdHJhZGl0aW9uYWwgR05VIHJ1bnRpbWUgQVBJIGlzIG5vIGxvbmdlcgorYXZhaWxhYmxlLgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UcmFuc2xhdGlvbi1pbXBsZW1lbnRhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UcmFuc2xhdGlvbi1pbXBsZW1lbnRhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MDA2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1RyYW5zbGF0aW9uLWltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VHJhbnNsYXRpb24gaW1wbGVtZW50YXRpb24gLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iIHRpdGxlPSJDIEltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRW52aXJvbm1lbnQtaW1wbGVtZW50YXRpb24uaHRtbCNFbnZpcm9ubWVudC1pbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkVudmlyb25tZW50IGltcGxlbWVudGF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRyYW5zbGF0aW9uLWltcGxlbWVudGF0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVudmlyb25tZW50LWltcGxlbWVudGF0aW9uLmh0bWwjRW52aXJvbm1lbnQtaW1wbGVtZW50YXRpb24iPkVudmlyb25tZW50IGltcGxlbWVudGF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1JbXBsZW1lbnRhdGlvbi5odG1sI0MtSW1wbGVtZW50YXRpb24iPkMgSW1wbGVtZW50YXRpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjEgVHJhbnNsYXRpb248L2gzPgorCisgICAgIDx1bD4KKzxsaT48Y2l0ZT5Ib3cgYSBkaWFnbm9zdGljIGlzIGlkZW50aWZpZWQgKEM5MCAzLjcsIEM5OSAzLjEwLCBDOTAgYW5kIEM5OSA1LjEuMS4zKS48L2NpdGU+CisKKyAgICAgPHA+RGlhZ25vc3RpY3MgY29uc2lzdCBvZiBhbGwgdGhlIG91dHB1dCBzZW50IHRvIHN0ZGVyciBieSBHQ0MuCisKKyAgICAgPGxpPjxjaXRlPldoZXRoZXIgZWFjaCBub25lbXB0eSBzZXF1ZW5jZSBvZiB3aGl0ZS1zcGFjZSBjaGFyYWN0ZXJzIG90aGVyIHRoYW4KK25ldy1saW5lIGlzIHJldGFpbmVkIG9yIHJlcGxhY2VkIGJ5IG9uZSBzcGFjZSBjaGFyYWN0ZXIgaW4gdHJhbnNsYXRpb24KK3BoYXNlIDMgKEM5MCBhbmQgQzk5IDUuMS4xLjIpLjwvY2l0ZT4KKworICAgICA8cD5TZWUgPGEgaHJlZj0iLi4vY3BwL0ltcGxlbWVudGF0aW9uXzAwMmRkZWZpbmVkLWJlaGF2aW9yLmh0bWwjSW1wbGVtZW50YXRpb25fMDAyZGRlZmluZWQtYmVoYXZpb3IiPkltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+LgorCis8L3VsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Ucm91YmxlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Ryb3VibGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjM1ZmJlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Ucm91YmxlLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VHJvdWJsZSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikdjb3YuaHRtbCNHY292IiB0aXRsZT0iR2NvdiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJ1Z3MuaHRtbCNCdWdzIiB0aXRsZT0iQnVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUcm91YmxlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJ1Z3MuaHRtbCNCdWdzIj5CdWdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR2Nvdi5odG1sI0djb3YiPkdjb3Y8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MTEgS25vd24gQ2F1c2VzIG9mIFRyb3VibGUgd2l0aCBHQ0M8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1idWdzXzAwMmMta25vd24tMzUzMyI+PC9hPjxhIG5hbWU9ImluZGV4LWluc3RhbGxhdGlvbi10cm91YmxlLTM1MzQiPjwvYT48YSBuYW1lPSJpbmRleC1rbm93bi1jYXVzZXMtb2YtdHJvdWJsZS0zNTM1Ij48L2E+CitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGtub3duIHByb2JsZW1zIHRoYXQgYWZmZWN0IHVzZXJzIG9mIEdDQy4gIE1vc3QKK29mIHRoZXNlIGFyZSBub3QgR0NDIGJ1Z3MgcGVyIHNlJm1kYXNoO2lmIHRoZXkgd2VyZSwgd2Ugd291bGQgZml4IHRoZW0uIAorQnV0IHRoZSByZXN1bHQgZm9yIGEgdXNlciBtYXkgYmUgbGlrZSB0aGUgcmVzdWx0IG9mIGEgYnVnLgorCisgPHA+U29tZSBvZiB0aGVzZSBwcm9ibGVtcyBhcmUgZHVlIHRvIGJ1Z3MgaW4gb3RoZXIgc29mdHdhcmUsIHNvbWUgYXJlCittaXNzaW5nIGZlYXR1cmVzIHRoYXQgYXJlIHRvbyBtdWNoIHdvcmsgdG8gYWRkLCBhbmQgc29tZSBhcmUgcGxhY2VzCit3aGVyZSBwZW9wbGUncyBvcGluaW9ucyBkaWZmZXIgYXMgdG8gd2hhdCBpcyBiZXN0LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQWN0dWFsLUJ1Z3MuaHRtbCNBY3R1YWwtQnVncyI+QWN0dWFsIEJ1Z3M8L2E+OiAgICAgICAgICBCdWdzIHdlIHdpbGwgZml4IGxhdGVyLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkludGVyb3BlcmF0aW9uLmh0bWwjSW50ZXJvcGVyYXRpb24iPkludGVyb3BlcmF0aW9uPC9hPjogICAgICAgUHJvYmxlbXMgdXNpbmcgR0NDIHdpdGggb3RoZXIgY29tcGlsZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdpdGggY2VydGFpbiBsaW5rZXJzLCBhc3NlbWJsZXJzIGFuZCBkZWJ1Z2dlcnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+OiAgICBHQ0MgaXMgaW5jb21wYXRpYmxlIHdpdGggdHJhZGl0aW9uYWwgQy4gCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJGaXhlZC1IZWFkZXJzLmh0bWwjRml4ZWQtSGVhZGVycyI+Rml4ZWQgSGVhZGVyczwvYT46ICAgICAgICBHQ0MgdXNlcyBjb3JyZWN0ZWQgdmVyc2lvbnMgb2Ygc3lzdGVtIGhlYWRlciBmaWxlcy4gCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIG5lY2Vzc2FyeSwgYnV0IGRvZXNuJ3QgYWx3YXlzIHdvcmsgc21vb3RobHkuIAorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iU3RhbmRhcmQtTGlicmFyaWVzLmh0bWwjU3RhbmRhcmQtTGlicmFyaWVzIj5TdGFuZGFyZCBMaWJyYXJpZXM8L2E+OiAgIEdDQyB1c2VzIHRoZSBzeXN0ZW0gQyBsaWJyYXJ5LCB3aGljaCBtaWdodCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsaWFudCB3aXRoIHRoZSBJU08gQyBzdGFuZGFyZC4gCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJEaXNhcHBvaW50bWVudHMuaHRtbCNEaXNhcHBvaW50bWVudHMiPkRpc2FwcG9pbnRtZW50czwvYT46ICAgICAgUmVncmV0dGFibGUgdGhpbmdzIHdlIGNhbid0IGNoYW5nZSwgYnV0IG5vdCBxdWl0ZSBidWdzLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9IkNfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzLmh0bWwjQ18wMDJiXzAwMmItTWlzdW5kZXJzdGFuZGluZ3MiPkMrKyBNaXN1bmRlcnN0YW5kaW5nczwvYT46ICBDb21tb24gbWlzdW5kZXJzdGFuZGluZ3Mgd2l0aCBHTlUgQysrLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI05vbl8wMDJkYnVncyI+Tm9uLWJ1Z3M8L2E+OiAgICAgICAgICAgICBUaGluZ3Mgd2UgdGhpbmsgYXJlIHJpZ2h0LCBidXQgc29tZSBvdGhlcnMgZGlzYWdyZWUuIAorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iV2FybmluZ3MtYW5kLUVycm9ycy5odG1sI1dhcm5pbmdzLWFuZC1FcnJvcnMiPldhcm5pbmdzIGFuZCBFcnJvcnM8L2E+OiAgV2hpY2ggcHJvYmxlbXMgaW4geW91ciBjb2RlIGdldCB3YXJuaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB3aGljaCBnZXQgZXJyb3JzLiAKKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGUtQXR0cmlidXRlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UeXBlLUF0dHJpYnV0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTY1ZmZiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9UeXBlLUF0dHJpYnV0ZXMuaHRtbApAQCAtMCwwICsxLDQxNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VHlwZSBBdHRyaWJ1dGVzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIiB0aXRsZT0iVmFyaWFibGUgQXR0cmlidXRlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFsaWdubWVudC5odG1sI0FsaWdubWVudCIgdGl0bGU9IkFsaWdubWVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUeXBlLUF0dHJpYnV0ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQWxpZ25tZW50Lmh0bWwjQWxpZ25tZW50Ij5BbGlnbm1lbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4zNyBTcGVjaWZ5aW5nIEF0dHJpYnV0ZXMgb2YgVHlwZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hdHRyaWJ1dGUtb2YtdHlwZXMtMjc3OCI+PC9hPjxhIG5hbWU9ImluZGV4LXR5cGUtYXR0cmlidXRlcy0yNzc5Ij48L2E+CitUaGUga2V5d29yZCA8Y29kZT5fX2F0dHJpYnV0ZV9fPC9jb2RlPiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgc3BlY2lhbAorYXR0cmlidXRlcyBvZiA8Y29kZT5zdHJ1Y3Q8L2NvZGU+IGFuZCA8Y29kZT51bmlvbjwvY29kZT4gdHlwZXMgd2hlbiB5b3UgZGVmaW5lCitzdWNoIHR5cGVzLiAgVGhpcyBrZXl3b3JkIGlzIGZvbGxvd2VkIGJ5IGFuIGF0dHJpYnV0ZSBzcGVjaWZpY2F0aW9uCitpbnNpZGUgZG91YmxlIHBhcmVudGhlc2VzLiAgU2V2ZW4gYXR0cmlidXRlcyBhcmUgY3VycmVudGx5IGRlZmluZWQgZm9yCit0eXBlczogPGNvZGU+YWxpZ25lZDwvY29kZT4sIDxjb2RlPnBhY2tlZDwvY29kZT4sIDxjb2RlPnRyYW5zcGFyZW50X3VuaW9uPC9jb2RlPiwKKzxjb2RlPnVudXNlZDwvY29kZT4sIDxjb2RlPmRlcHJlY2F0ZWQ8L2NvZGU+LCA8Y29kZT52aXNpYmlsaXR5PC9jb2RlPiwgYW5kCis8Y29kZT5tYXlfYWxpYXM8L2NvZGU+LiAgT3RoZXIgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCBmb3IgZnVuY3Rpb25zCisoc2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPikgYW5kIGZvciB2YXJpYWJsZXMgKHNlZSA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT4pLgorCisgPHA+WW91IG1heSBhbHNvIHNwZWNpZnkgYW55IG9uZSBvZiB0aGVzZSBhdHRyaWJ1dGVzIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fXzwvc3Bhbj48L3NhbXA+JnJzcXVvOworcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgaXRzIGtleXdvcmQuICBUaGlzIGFsbG93cyB5b3UgdG8gdXNlIHRoZXNlCithdHRyaWJ1dGVzIGluIGhlYWRlciBmaWxlcyB3aXRob3V0IGJlaW5nIGNvbmNlcm5lZCBhYm91dCBhIHBvc3NpYmxlCittYWNybyBvZiB0aGUgc2FtZSBuYW1lLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkgdXNlIDxjb2RlPl9fYWxpZ25lZF9fPC9jb2RlPgoraW5zdGVhZCBvZiA8Y29kZT5hbGlnbmVkPC9jb2RlPi4KKworIDxwPllvdSBtYXkgc3BlY2lmeSB0eXBlIGF0dHJpYnV0ZXMgaW4gYW4gZW51bSwgc3RydWN0IG9yIHVuaW9uIHR5cGUKK2RlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24sIG9yIGZvciBvdGhlciB0eXBlcyBpbiBhIDxjb2RlPnR5cGVkZWY8L2NvZGU+CitkZWNsYXJhdGlvbi4KKworIDxwPkZvciBhbiBlbnVtLCBzdHJ1Y3Qgb3IgdW5pb24gdHlwZSwgeW91IG1heSBzcGVjaWZ5IGF0dHJpYnV0ZXMgZWl0aGVyCitiZXR3ZWVuIHRoZSBlbnVtLCBzdHJ1Y3Qgb3IgdW5pb24gdGFnIGFuZCB0aGUgbmFtZSBvZiB0aGUgdHlwZSwgb3IKK2p1c3QgcGFzdCB0aGUgY2xvc2luZyBjdXJseSBicmFjZSBvZiB0aGUgPGVtPmRlZmluaXRpb248L2VtPi4gIFRoZQorZm9ybWVyIHN5bnRheCBpcyBwcmVmZXJyZWQuCisKKyA8cD5TZWUgPGEgaHJlZj0iQXR0cmlidXRlLVN5bnRheC5odG1sI0F0dHJpYnV0ZS1TeW50YXgiPkF0dHJpYnV0ZSBTeW50YXg8L2E+LCBmb3IgZGV0YWlscyBvZiB0aGUgZXhhY3Qgc3ludGF4IGZvciB1c2luZworYXR0cmlidXRlcy4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxpZ25lZF8wMDdkLWF0dHJpYnV0ZS0yNzgwIj48L2E+Cis8ZGw+PGR0Pjxjb2RlPmFsaWduZWQgKDwvY29kZT48dmFyPmFsaWdubWVudDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyBhIG1pbmltdW0gYWxpZ25tZW50IChpbiBieXRlcykgZm9yIHZhcmlhYmxlcworb2YgdGhlIHNwZWNpZmllZCB0eXBlLiAgRm9yIGV4YW1wbGUsIHRoZSBkZWNsYXJhdGlvbnM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IFMgeyBzaG9ydCBmWzNdOyB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOworICAgICAgICAgIHR5cGVkZWYgaW50IG1vcmVfYWxpZ25lZF9pbnQgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSk7Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5mb3JjZSB0aGUgY29tcGlsZXIgdG8gZW5zdXJlIChhcyBmYXIgYXMgaXQgY2FuKSB0aGF0IGVhY2ggdmFyaWFibGUgd2hvc2UKK3R5cGUgaXMgPGNvZGU+c3RydWN0IFM8L2NvZGU+IG9yIDxjb2RlPm1vcmVfYWxpZ25lZF9pbnQ8L2NvZGU+IGlzIGFsbG9jYXRlZCBhbmQKK2FsaWduZWQgPGVtPmF0IGxlYXN0PC9lbT4gb24gYSA4LWJ5dGUgYm91bmRhcnkuICBPbiBhIFNQQVJDLCBoYXZpbmcgYWxsCit2YXJpYWJsZXMgb2YgdHlwZSA8Y29kZT5zdHJ1Y3QgUzwvY29kZT4gYWxpZ25lZCB0byA4LWJ5dGUgYm91bmRhcmllcyBhbGxvd3MKK3RoZSBjb21waWxlciB0byB1c2UgdGhlIDxjb2RlPmxkZDwvY29kZT4gYW5kIDxjb2RlPnN0ZDwvY29kZT4gKGRvdWJsZXdvcmQgbG9hZCBhbmQKK3N0b3JlKSBpbnN0cnVjdGlvbnMgd2hlbiBjb3B5aW5nIG9uZSB2YXJpYWJsZSBvZiB0eXBlIDxjb2RlPnN0cnVjdCBTPC9jb2RlPiB0bworYW5vdGhlciwgdGh1cyBpbXByb3ZpbmcgcnVuLXRpbWUgZWZmaWNpZW5jeS4KKworICAgICA8cD5Ob3RlIHRoYXQgdGhlIGFsaWdubWVudCBvZiBhbnkgZ2l2ZW4gPGNvZGU+c3RydWN0PC9jb2RlPiBvciA8Y29kZT51bmlvbjwvY29kZT4gdHlwZQoraXMgcmVxdWlyZWQgYnkgdGhlIElTTyBDIHN0YW5kYXJkIHRvIGJlIGF0IGxlYXN0IGEgcGVyZmVjdCBtdWx0aXBsZSBvZgordGhlIGxvd2VzdCBjb21tb24gbXVsdGlwbGUgb2YgdGhlIGFsaWdubWVudHMgb2YgYWxsIG9mIHRoZSBtZW1iZXJzIG9mCit0aGUgPGNvZGU+c3RydWN0PC9jb2RlPiBvciA8Y29kZT51bmlvbjwvY29kZT4gaW4gcXVlc3Rpb24uICBUaGlzIG1lYW5zIHRoYXQgeW91IDxlbT5jYW48L2VtPgorZWZmZWN0aXZlbHkgYWRqdXN0IHRoZSBhbGlnbm1lbnQgb2YgYSA8Y29kZT5zdHJ1Y3Q8L2NvZGU+IG9yIDxjb2RlPnVuaW9uPC9jb2RlPgordHlwZSBieSBhdHRhY2hpbmcgYW4gPGNvZGU+YWxpZ25lZDwvY29kZT4gYXR0cmlidXRlIHRvIGFueSBvbmUgb2YgdGhlIG1lbWJlcnMKK29mIHN1Y2ggYSB0eXBlLCBidXQgdGhlIG5vdGF0aW9uIGlsbHVzdHJhdGVkIGluIHRoZSBleGFtcGxlIGFib3ZlIGlzIGEKK21vcmUgb2J2aW91cywgaW50dWl0aXZlLCBhbmQgcmVhZGFibGUgd2F5IHRvIHJlcXVlc3QgdGhlIGNvbXBpbGVyIHRvCithZGp1c3QgdGhlIGFsaWdubWVudCBvZiBhbiBlbnRpcmUgPGNvZGU+c3RydWN0PC9jb2RlPiBvciA8Y29kZT51bmlvbjwvY29kZT4gdHlwZS4KKworICAgICA8cD5BcyBpbiB0aGUgcHJlY2VkaW5nIGV4YW1wbGUsIHlvdSBjYW4gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBhbGlnbm1lbnQKKyhpbiBieXRlcykgdGhhdCB5b3Ugd2lzaCB0aGUgY29tcGlsZXIgdG8gdXNlIGZvciBhIGdpdmVuIDxjb2RlPnN0cnVjdDwvY29kZT4KK29yIDxjb2RlPnVuaW9uPC9jb2RlPiB0eXBlLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBsZWF2ZSBvdXQgdGhlIGFsaWdubWVudCBmYWN0b3IKK2FuZCBqdXN0IGFzayB0aGUgY29tcGlsZXIgdG8gYWxpZ24gYSB0eXBlIHRvIHRoZSBtYXhpbXVtCit1c2VmdWwgYWxpZ25tZW50IGZvciB0aGUgdGFyZ2V0IG1hY2hpbmUgeW91IGFyZSBjb21waWxpbmcgZm9yLiAgRm9yCitleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IFMgeyBzaG9ydCBmWzNdOyB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKSk7Cis8L3ByZT4KKyAgICAgPHA+V2hlbmV2ZXIgeW91IGxlYXZlIG91dCB0aGUgYWxpZ25tZW50IGZhY3RvciBpbiBhbiA8Y29kZT5hbGlnbmVkPC9jb2RlPgorYXR0cmlidXRlIHNwZWNpZmljYXRpb24sIHRoZSBjb21waWxlciBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIGFsaWdubWVudAorZm9yIHRoZSB0eXBlIHRvIHRoZSBsYXJnZXN0IGFsaWdubWVudCB0aGF0IGlzIGV2ZXIgdXNlZCBmb3IgYW55IGRhdGEKK3R5cGUgb24gdGhlIHRhcmdldCBtYWNoaW5lIHlvdSBhcmUgY29tcGlsaW5nIGZvci4gIERvaW5nIHRoaXMgY2FuIG9mdGVuCittYWtlIGNvcHkgb3BlcmF0aW9ucyBtb3JlIGVmZmljaWVudCwgYmVjYXVzZSB0aGUgY29tcGlsZXIgY2FuIHVzZQord2hhdGV2ZXIgaW5zdHJ1Y3Rpb25zIGNvcHkgdGhlIGJpZ2dlc3QgY2h1bmtzIG9mIG1lbW9yeSB3aGVuIHBlcmZvcm1pbmcKK2NvcGllcyB0byBvciBmcm9tIHRoZSB2YXJpYWJsZXMgdGhhdCBoYXZlIHR5cGVzIHRoYXQgeW91IGhhdmUgYWxpZ25lZAordGhpcyB3YXkuCisKKyAgICAgPHA+SW4gdGhlIGV4YW1wbGUgYWJvdmUsIGlmIHRoZSBzaXplIG9mIGVhY2ggPGNvZGU+c2hvcnQ8L2NvZGU+IGlzIDIgYnl0ZXMsIHRoZW4KK3RoZSBzaXplIG9mIHRoZSBlbnRpcmUgPGNvZGU+c3RydWN0IFM8L2NvZGU+IHR5cGUgaXMgNiBieXRlcy4gIFRoZSBzbWFsbGVzdAorcG93ZXIgb2YgdHdvIHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoYXQgaXMgOCwgc28gdGhlCitjb21waWxlciBzZXRzIHRoZSBhbGlnbm1lbnQgZm9yIHRoZSBlbnRpcmUgPGNvZGU+c3RydWN0IFM8L2NvZGU+IHR5cGUgdG8gOAorYnl0ZXMuCisKKyAgICAgPHA+Tm90ZSB0aGF0IGFsdGhvdWdoIHlvdSBjYW4gYXNrIHRoZSBjb21waWxlciB0byBzZWxlY3QgYSB0aW1lLWVmZmljaWVudAorYWxpZ25tZW50IGZvciBhIGdpdmVuIHR5cGUgYW5kIHRoZW4gZGVjbGFyZSBvbmx5IGluZGl2aWR1YWwgc3RhbmQtYWxvbmUKK29iamVjdHMgb2YgdGhhdCB0eXBlLCB0aGUgY29tcGlsZXIncyBhYmlsaXR5IHRvIHNlbGVjdCBhIHRpbWUtZWZmaWNpZW50CithbGlnbm1lbnQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBvbmx5IHdoZW4geW91IHBsYW4gdG8gY3JlYXRlIGFycmF5cyBvZgordmFyaWFibGVzIGhhdmluZyB0aGUgcmVsZXZhbnQgKGVmZmljaWVudGx5IGFsaWduZWQpIHR5cGUuICBJZiB5b3UKK2RlY2xhcmUgb3IgdXNlIGFycmF5cyBvZiB2YXJpYWJsZXMgb2YgYW4gZWZmaWNpZW50bHktYWxpZ25lZCB0eXBlLCB0aGVuCitpdCBpcyBsaWtlbHkgdGhhdCB5b3VyIHByb2dyYW0gYWxzbyBkb2VzIHBvaW50ZXIgYXJpdGhtZXRpYyAob3IKK3N1YnNjcmlwdGluZywgd2hpY2ggYW1vdW50cyB0byB0aGUgc2FtZSB0aGluZykgb24gcG9pbnRlcnMgdG8gdGhlCityZWxldmFudCB0eXBlLCBhbmQgdGhlIGNvZGUgdGhhdCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGZvciB0aGVzZQorcG9pbnRlciBhcml0aG1ldGljIG9wZXJhdGlvbnMgaXMgb2Z0ZW4gbW9yZSBlZmZpY2llbnQgZm9yCitlZmZpY2llbnRseS1hbGlnbmVkIHR5cGVzIHRoYW4gZm9yIG90aGVyIHR5cGVzLgorCisgICAgIDxwPlRoZSA8Y29kZT5hbGlnbmVkPC9jb2RlPiBhdHRyaWJ1dGUgY2FuIG9ubHkgaW5jcmVhc2UgdGhlIGFsaWdubWVudDsgYnV0IHlvdQorY2FuIGRlY3JlYXNlIGl0IGJ5IHNwZWNpZnlpbmcgPGNvZGU+cGFja2VkPC9jb2RlPiBhcyB3ZWxsLiAgU2VlIGJlbG93LgorCisgICAgIDxwPk5vdGUgdGhhdCB0aGUgZWZmZWN0aXZlbmVzcyBvZiA8Y29kZT5hbGlnbmVkPC9jb2RlPiBhdHRyaWJ1dGVzIG1heSBiZSBsaW1pdGVkCitieSBpbmhlcmVudCBsaW1pdGF0aW9ucyBpbiB5b3VyIGxpbmtlci4gIE9uIG1hbnkgc3lzdGVtcywgdGhlIGxpbmtlciBpcworb25seSBhYmxlIHRvIGFycmFuZ2UgZm9yIHZhcmlhYmxlcyB0byBiZSBhbGlnbmVkIHVwIHRvIGEgY2VydGFpbiBtYXhpbXVtCithbGlnbm1lbnQuICAoRm9yIHNvbWUgbGlua2VycywgdGhlIG1heGltdW0gc3VwcG9ydGVkIGFsaWdubWVudCBtYXkKK2JlIHZlcnkgdmVyeSBzbWFsbC4pICBJZiB5b3VyIGxpbmtlciBpcyBvbmx5IGFibGUgdG8gYWxpZ24gdmFyaWFibGVzCit1cCB0byBhIG1heGltdW0gb2YgOC1ieXRlIGFsaWdubWVudCwgdGhlbiBzcGVjaWZ5aW5nIDxjb2RlPmFsaWduZWQoMTYpPC9jb2RlPgoraW4gYW4gPGNvZGU+X19hdHRyaWJ1dGVfXzwvY29kZT4gc3RpbGwgb25seSBwcm92aWRlcyB5b3Ugd2l0aCA4LWJ5dGUKK2FsaWdubWVudC4gIFNlZSB5b3VyIGxpbmtlciBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+cGFja2VkPC9jb2RlPjxkZD5UaGlzIGF0dHJpYnV0ZSwgYXR0YWNoZWQgdG8gPGNvZGU+c3RydWN0PC9jb2RlPiBvciA8Y29kZT51bmlvbjwvY29kZT4gdHlwZQorZGVmaW5pdGlvbiwgc3BlY2lmaWVzIHRoYXQgZWFjaCBtZW1iZXIgKG90aGVyIHRoYW4gemVyby13aWR0aCBiaXQtZmllbGRzKQorb2YgdGhlIHN0cnVjdHVyZSBvciB1bmlvbiBpcyBwbGFjZWQgdG8gbWluaW1pemUgdGhlIG1lbW9yeSByZXF1aXJlZC4gIFdoZW4KK2F0dGFjaGVkIHRvIGFuIDxjb2RlPmVudW08L2NvZGU+IGRlZmluaXRpb24sIGl0IGluZGljYXRlcyB0aGF0IHRoZSBzbWFsbGVzdAoraW50ZWdyYWwgdHlwZSBzaG91bGQgYmUgdXNlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1mc2hvcnRfMDAyZGVudW1zLTI3ODEiPjwvYT5TcGVjaWZ5aW5nIHRoaXMgYXR0cmlidXRlIGZvciA8Y29kZT5zdHJ1Y3Q8L2NvZGU+IGFuZCA8Y29kZT51bmlvbjwvY29kZT4gdHlwZXMgaXMKK2VxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUgPGNvZGU+cGFja2VkPC9jb2RlPiBhdHRyaWJ1dGUgb24gZWFjaCBvZiB0aGUKK3N0cnVjdHVyZSBvciB1bmlvbiBtZW1iZXJzLiAgU3BlY2lmeWluZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzaG9ydC1lbnVtczwvc3Bhbj48L3NhbXA+CitmbGFnIG9uIHRoZSBsaW5lIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUgPGNvZGU+cGFja2VkPC9jb2RlPgorYXR0cmlidXRlIG9uIGFsbCA8Y29kZT5lbnVtPC9jb2RlPiBkZWZpbml0aW9ucy4KKworICAgICA8cD5JbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgPGNvZGU+c3RydWN0IG15X3BhY2tlZF9zdHJ1Y3Q8L2NvZGU+J3MgbWVtYmVycyBhcmUKK3BhY2tlZCBjbG9zZWx5IHRvZ2V0aGVyLCBidXQgdGhlIGludGVybmFsIGxheW91dCBvZiBpdHMgPGNvZGU+czwvY29kZT4gbWVtYmVyCitpcyBub3QgcGFja2VkJm1kYXNoO3RvIGRvIHRoYXQsIDxjb2RlPnN0cnVjdCBteV91bnBhY2tlZF9zdHJ1Y3Q8L2NvZGU+IG5lZWRzIHRvCitiZSBwYWNrZWQgdG9vLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHN0cnVjdCBteV91bnBhY2tlZF9zdHJ1Y3QKKyAgICAgICAgICAgeworICAgICAgICAgICAgICBjaGFyIGM7CisgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICB9OworICAgICAgICAgIAorICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIG15X3BhY2tlZF9zdHJ1Y3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGNoYXIgYzsKKyAgICAgICAgICAgICAgIGludCAgaTsKKyAgICAgICAgICAgICAgIHN0cnVjdCBteV91bnBhY2tlZF9zdHJ1Y3QgczsKKyAgICAgICAgICAgIH07Cis8L3ByZT4KKyAgICAgPHA+WW91IG1heSBvbmx5IHNwZWNpZnkgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGRlZmluaXRpb24gb2YgYW4gPGNvZGU+ZW51bTwvY29kZT4sCis8Y29kZT5zdHJ1Y3Q8L2NvZGU+IG9yIDxjb2RlPnVuaW9uPC9jb2RlPiwgbm90IG9uIGEgPGNvZGU+dHlwZWRlZjwvY29kZT4gdGhhdCBkb2VzIG5vdAorYWxzbyBkZWZpbmUgdGhlIGVudW1lcmF0ZWQgdHlwZSwgc3RydWN0dXJlIG9yIHVuaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dHJhbnNwYXJlbnRfdW5pb248L2NvZGU+PGRkPlRoaXMgYXR0cmlidXRlLCBhdHRhY2hlZCB0byBhIDxjb2RlPnVuaW9uPC9jb2RlPiB0eXBlIGRlZmluaXRpb24sIGluZGljYXRlcwordGhhdCBhbnkgZnVuY3Rpb24gcGFyYW1ldGVyIGhhdmluZyB0aGF0IHVuaW9uIHR5cGUgY2F1c2VzIGNhbGxzIHRvIHRoYXQKK2Z1bmN0aW9uIHRvIGJlIHRyZWF0ZWQgaW4gYSBzcGVjaWFsIHdheS4KKworICAgICA8cD5GaXJzdCwgdGhlIGFyZ3VtZW50IGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFuc3BhcmVudCB1bmlvbiB0eXBlIGNhbiBiZSBvZgorYW55IHR5cGUgaW4gdGhlIHVuaW9uOyBubyBjYXN0IGlzIHJlcXVpcmVkLiAgQWxzbywgaWYgdGhlIHVuaW9uIGNvbnRhaW5zCithIHBvaW50ZXIgdHlwZSwgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQgY2FuIGJlIGEgbnVsbCBwb2ludGVyCitjb25zdGFudCBvciBhIHZvaWQgcG9pbnRlciBleHByZXNzaW9uOyBhbmQgaWYgdGhlIHVuaW9uIGNvbnRhaW5zIGEgdm9pZAorcG9pbnRlciB0eXBlLCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCBjYW4gYmUgYW55IHBvaW50ZXIgZXhwcmVzc2lvbi4gCitJZiB0aGUgdW5pb24gbWVtYmVyIHR5cGUgaXMgYSBwb2ludGVyLCBxdWFsaWZpZXJzIGxpa2UgPGNvZGU+Y29uc3Q8L2NvZGU+IG9uCit0aGUgcmVmZXJlbmNlZCB0eXBlIG11c3QgYmUgcmVzcGVjdGVkLCBqdXN0IGFzIHdpdGggbm9ybWFsIHBvaW50ZXIKK2NvbnZlcnNpb25zLgorCisgICAgIDxwPlNlY29uZCwgdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gdXNpbmcgdGhlIGNhbGxpbmcKK2NvbnZlbnRpb25zIG9mIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHRyYW5zcGFyZW50IHVuaW9uLCBub3QgdGhlIGNhbGxpbmcKK2NvbnZlbnRpb25zIG9mIHRoZSB1bmlvbiBpdHNlbGYuICBBbGwgbWVtYmVycyBvZiB0aGUgdW5pb24gbXVzdCBoYXZlIHRoZQorc2FtZSBtYWNoaW5lIHJlcHJlc2VudGF0aW9uOyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhpcyBhcmd1bWVudCBwYXNzaW5nCit0byB3b3JrIHByb3Blcmx5LgorCisgICAgIDxwPlRyYW5zcGFyZW50IHVuaW9ucyBhcmUgZGVzaWduZWQgZm9yIGxpYnJhcnkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBtdWx0aXBsZQoraW50ZXJmYWNlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiAgRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlCis8Y29kZT53YWl0PC9jb2RlPiBmdW5jdGlvbiBtdXN0IGFjY2VwdCBlaXRoZXIgYSB2YWx1ZSBvZiB0eXBlIDxjb2RlPmludCAqPC9jb2RlPiB0bworY29tcGx5IHdpdGggUE9TSVgsIG9yIGEgdmFsdWUgb2YgdHlwZSA8Y29kZT51bmlvbiB3YWl0ICo8L2NvZGU+IHRvIGNvbXBseSB3aXRoCit0aGUgNC4xQlNEIGludGVyZmFjZS4gIElmIDxjb2RlPndhaXQ8L2NvZGU+J3MgcGFyYW1ldGVyIHdlcmUgPGNvZGU+dm9pZCAqPC9jb2RlPiwKKzxjb2RlPndhaXQ8L2NvZGU+IHdvdWxkIGFjY2VwdCBib3RoIGtpbmRzIG9mIGFyZ3VtZW50cywgYnV0IGl0IHdvdWxkIGFsc28KK2FjY2VwdCBhbnkgb3RoZXIgcG9pbnRlciB0eXBlIGFuZCB0aGlzIHdvdWxkIG1ha2UgYXJndW1lbnQgdHlwZSBjaGVja2luZworbGVzcyB1c2VmdWwuICBJbnN0ZWFkLCA8Y29kZT4mbHQ7c3lzL3dhaXQuaCZndDs8L2NvZGU+IG1pZ2h0IGRlZmluZSB0aGUgaW50ZXJmYWNlCithcyBmb2xsb3dzOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHR5cGVkZWYgdW5pb24gX19hdHRyaWJ1dGVfXyAoKF9fdHJhbnNwYXJlbnRfdW5pb25fXykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCAqX19pcDsKKyAgICAgICAgICAgICAgdW5pb24gd2FpdCAqX191cDsKKyAgICAgICAgICAgIH0gd2FpdF9zdGF0dXNfcHRyX3Q7CisgICAgICAgICAgCisgICAgICAgICAgcGlkX3Qgd2FpdCAod2FpdF9zdGF0dXNfcHRyX3QpOworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyBpbnRlcmZhY2UgYWxsb3dzIGVpdGhlciA8Y29kZT5pbnQgKjwvY29kZT4gb3IgPGNvZGU+dW5pb24gd2FpdCAqPC9jb2RlPgorYXJndW1lbnRzIHRvIGJlIHBhc3NlZCwgdXNpbmcgdGhlIDxjb2RlPmludCAqPC9jb2RlPiBjYWxsaW5nIGNvbnZlbnRpb24uIAorVGhlIHByb2dyYW0gY2FuIGNhbGwgPGNvZGU+d2FpdDwvY29kZT4gd2l0aCBhcmd1bWVudHMgb2YgZWl0aGVyIHR5cGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IHcxICgpIHsgaW50IHc7IHJldHVybiB3YWl0ICgmYW1wO3cpOyB9CisgICAgICAgICAgaW50IHcyICgpIHsgdW5pb24gd2FpdCB3OyByZXR1cm4gd2FpdCAoJmFtcDt3KTsgfQorPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+V2l0aCB0aGlzIGludGVyZmFjZSwgPGNvZGU+d2FpdDwvY29kZT4ncyBpbXBsZW1lbnRhdGlvbiBtaWdodCBsb29rIGxpa2UgdGhpczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwaWRfdCB3YWl0ICh3YWl0X3N0YXR1c19wdHJfdCBwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB3YWl0cGlkICgtMSwgcC5fX2lwLCAwKTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT51bnVzZWQ8L2NvZGU+PGRkPldoZW4gYXR0YWNoZWQgdG8gYSB0eXBlIChpbmNsdWRpbmcgYSA8Y29kZT51bmlvbjwvY29kZT4gb3IgYSA8Y29kZT5zdHJ1Y3Q8L2NvZGU+KSwKK3RoaXMgYXR0cmlidXRlIG1lYW5zIHRoYXQgdmFyaWFibGVzIG9mIHRoYXQgdHlwZSBhcmUgbWVhbnQgdG8gYXBwZWFyCitwb3NzaWJseSB1bnVzZWQuICBHQ0MgZG9lcyBub3QgcHJvZHVjZSBhIHdhcm5pbmcgZm9yIGFueSB2YXJpYWJsZXMgb2YKK3RoYXQgdHlwZSwgZXZlbiBpZiB0aGUgdmFyaWFibGUgYXBwZWFycyB0byBkbyBub3RoaW5nLiAgVGhpcyBpcyBvZnRlbgordGhlIGNhc2Ugd2l0aCBsb2NrIG9yIHRocmVhZCBjbGFzc2VzLCB3aGljaCBhcmUgdXN1YWxseSBkZWZpbmVkIGFuZCB0aGVuCitub3QgcmVmZXJlbmNlZCwgYnV0IGNvbnRhaW4gY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyB0aGF0IGhhdmUKK25vbnRyaXZpYWwgYm9va2tlZXBpbmcgZnVuY3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZGVwcmVjYXRlZDwvY29kZT48ZHQ+PGNvZGU+ZGVwcmVjYXRlZCAoPC9jb2RlPjx2YXI+bXNnPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+VGhlIDxjb2RlPmRlcHJlY2F0ZWQ8L2NvZGU+IGF0dHJpYnV0ZSByZXN1bHRzIGluIGEgd2FybmluZyBpZiB0aGUgdHlwZQoraXMgdXNlZCBhbnl3aGVyZSBpbiB0aGUgc291cmNlIGZpbGUuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGlkZW50aWZ5aW5nCit0eXBlcyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgYSBwcm9ncmFtLiAKK0lmIHBvc3NpYmxlLCB0aGUgd2FybmluZyBhbHNvIGluY2x1ZGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGVjbGFyYXRpb24KK29mIHRoZSBkZXByZWNhdGVkIHR5cGUsIHRvIGVuYWJsZSB1c2VycyB0byBlYXNpbHkgZmluZCBmdXJ0aGVyCitpbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhlIHR5cGUgaXMgZGVwcmVjYXRlZCwgb3Igd2hhdCB0aGV5IHNob3VsZCBkbworaW5zdGVhZC4gIE5vdGUgdGhhdCB0aGUgd2FybmluZ3Mgb25seSBvY2N1ciBmb3IgdXNlcyBhbmQgdGhlbiBvbmx5CitpZiB0aGUgdHlwZSBpcyBiZWluZyBhcHBsaWVkIHRvIGFuIGlkZW50aWZpZXIgdGhhdCBpdHNlbGYgaXMgbm90IGJlaW5nCitkZWNsYXJlZCBhcyBkZXByZWNhdGVkLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHR5cGVkZWYgaW50IFQxIF9fYXR0cmlidXRlX18gKChkZXByZWNhdGVkKSk7CisgICAgICAgICAgVDEgeDsKKyAgICAgICAgICB0eXBlZGVmIFQxIFQyOworICAgICAgICAgIFQyIHk7CisgICAgICAgICAgdHlwZWRlZiBUMSBUMyBfX2F0dHJpYnV0ZV9fICgoZGVwcmVjYXRlZCkpOworICAgICAgICAgIFQzIHogX19hdHRyaWJ1dGVfXyAoKGRlcHJlY2F0ZWQpKTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPnJlc3VsdHMgaW4gYSB3YXJuaW5nIG9uIGxpbmUgMiBhbmQgMyBidXQgbm90IGxpbmVzIDQsIDUsIG9yIDYuICBObword2FybmluZyBpcyBpc3N1ZWQgZm9yIGxpbmUgNCBiZWNhdXNlIFQyIGlzIG5vdCBleHBsaWNpdGx5CitkZXByZWNhdGVkLiAgTGluZSA1IGhhcyBubyB3YXJuaW5nIGJlY2F1c2UgVDMgaXMgZXhwbGljaXRseQorZGVwcmVjYXRlZC4gIFNpbWlsYXJseSBmb3IgbGluZSA2LiAgVGhlIG9wdGlvbmFsIDx2YXI+bXNnPC92YXI+Cithcmd1bWVudCwgd2hpY2ggbXVzdCBiZSBhIHN0cmluZywgaXMgcHJpbnRlZCBpbiB0aGUgd2FybmluZyBpZgorcHJlc2VudC4KKworICAgICA8cD5UaGUgPGNvZGU+ZGVwcmVjYXRlZDwvY29kZT4gYXR0cmlidXRlIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGZ1bmN0aW9ucyBhbmQKK3ZhcmlhYmxlcyAoc2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPiwgc2VlIDxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj5WYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPi4pCisKKyAgICAgPGJyPjxkdD48Y29kZT5tYXlfYWxpYXM8L2NvZGU+PGRkPkFjY2Vzc2VzIHRocm91Z2ggcG9pbnRlcnMgdG8gdHlwZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBhcmUgbm90IHN1YmplY3QKK3RvIHR5cGUtYmFzZWQgYWxpYXMgYW5hbHlzaXMsIGJ1dCBhcmUgaW5zdGVhZCBhc3N1bWVkIHRvIGJlIGFibGUgdG8gYWxpYXMKK2FueSBvdGhlciB0eXBlIG9mIG9iamVjdHMuIAorSW4gdGhlIGNvbnRleHQgb2Ygc2VjdGlvbiA2LjUgcGFyYWdyYXBoIDcgb2YgdGhlIEM5OSBzdGFuZGFyZCwKK2FuIGx2YWx1ZSBleHByZXNzaW9uCitkZXJlZmVyZW5jaW5nIHN1Y2ggYSBwb2ludGVyIGlzIHRyZWF0ZWQgbGlrZSBoYXZpbmcgYSBjaGFyYWN0ZXIgdHlwZS4gCitTZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzdHJpY3QtYWxpYXNpbmc8L3NwYW4+PC9zYW1wPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhbGlhc2luZyBpc3N1ZXMuIAorVGhpcyBleHRlbnNpb24gZXhpc3RzIHRvIHN1cHBvcnQgc29tZSB2ZWN0b3IgQVBJcywgaW4gd2hpY2ggcG9pbnRlcnMgdG8KK29uZSB2ZWN0b3IgdHlwZSBhcmUgcGVybWl0dGVkIHRvIGFsaWFzIHBvaW50ZXJzIHRvIGEgZGlmZmVyZW50IHZlY3RvciB0eXBlLgorCisgICAgIDxwPk5vdGUgdGhhdCBhbiBvYmplY3Qgb2YgYSB0eXBlIHdpdGggdGhpcyBhdHRyaWJ1dGUgZG9lcyBub3QgaGF2ZSBhbnkKK3NwZWNpYWwgc2VtYW50aWNzLgorCisgICAgIDxwPkV4YW1wbGUgb2YgdXNlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHR5cGVkZWYgc2hvcnQgX19hdHRyaWJ1dGVfXygoX19tYXlfYWxpYXNfXykpIHNob3J0X2E7CisgICAgICAgICAgCisgICAgICAgICAgaW50CisgICAgICAgICAgbWFpbiAodm9pZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgYSA9IDB4MTIzNDU2Nzg7CisgICAgICAgICAgICBzaG9ydF9hICpiID0gKHNob3J0X2EgKikgJmFtcDthOworICAgICAgICAgIAorICAgICAgICAgICAgYlsxXSA9IDA7CisgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYSA9PSAweDEyMzQ1Njc4KQorICAgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICAgIAorICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5JZiB5b3UgcmVwbGFjZWQgPGNvZGU+c2hvcnRfYTwvY29kZT4gd2l0aCA8Y29kZT5zaG9ydDwvY29kZT4gaW4gdGhlIHZhcmlhYmxlCitkZWNsYXJhdGlvbiwgdGhlIGFib3ZlIHByb2dyYW0gd291bGQgYWJvcnQgd2hlbiBjb21waWxlZCB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0cmljdC1hbGlhc2luZzwvc3Bhbj48L3NhbXA+LCB3aGljaCBpcyBvbiBieSBkZWZhdWx0IGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PMjwvc3Bhbj48L3NhbXA+IG9yCithYm92ZSBpbiByZWNlbnQgR0NDIHZlcnNpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dmlzaWJpbGl0eTwvY29kZT48ZGQ+SW4gQysrLCBhdHRyaWJ1dGUgdmlzaWJpbGl0eSAoc2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPikgY2FuIGFsc28gYmUKK2FwcGxpZWQgdG8gY2xhc3MsIHN0cnVjdCwgdW5pb24gYW5kIGVudW0gdHlwZXMuICBVbmxpa2Ugb3RoZXIgdHlwZQorYXR0cmlidXRlcywgdGhlIGF0dHJpYnV0ZSBtdXN0IGFwcGVhciBiZXR3ZWVuIHRoZSBpbml0aWFsIGtleXdvcmQgYW5kCit0aGUgbmFtZSBvZiB0aGUgdHlwZTsgaXQgY2Fubm90IGFwcGVhciBhZnRlciB0aGUgYm9keSBvZiB0aGUgdHlwZS4KKworICAgICA8cD5Ob3RlIHRoYXQgdGhlIHR5cGUgdmlzaWJpbGl0eSBpcyBhcHBsaWVkIHRvIHZhZ3VlIGxpbmthZ2UgZW50aXRpZXMKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgY2xhc3MgKHZ0YWJsZSwgdHlwZWluZm8gbm9kZSwgZXRjLikuICBJbgorcGFydGljdWxhciwgaWYgYSBjbGFzcyBpcyB0aHJvd24gYXMgYW4gZXhjZXB0aW9uIGluIG9uZSBzaGFyZWQgb2JqZWN0CithbmQgY2F1Z2h0IGluIGFub3RoZXIsIHRoZSBjbGFzcyBtdXN0IGhhdmUgZGVmYXVsdCB2aXNpYmlsaXR5LiAKK090aGVyd2lzZSB0aGUgdHdvIHNoYXJlZCBvYmplY3RzIGFyZSB1bmFibGUgdG8gdXNlIHRoZSBzYW1lCit0eXBlaW5mbyBub2RlIGFuZCBleGNlcHRpb24gaGFuZGxpbmcgd2lsbCBicmVhay4KKworIDwvZGw+CisKKyA8cD5UbyBzcGVjaWZ5IG11bHRpcGxlIGF0dHJpYnV0ZXMsIHNlcGFyYXRlIHRoZW0gYnkgY29tbWFzIHdpdGhpbiB0aGUKK2RvdWJsZSBwYXJlbnRoZXNlczogZm9yIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSwKK3BhY2tlZCkpPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMzcuMSBBUk0gVHlwZSBBdHRyaWJ1dGVzPC9oND4KKworPHA+T24gdGhvc2UgQVJNIHRhcmdldHMgdGhhdCBzdXBwb3J0IDxjb2RlPmRsbGltcG9ydDwvY29kZT4gKHN1Y2ggYXMgU3ltYmlhbgorT1MpLCB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+bm90c2hhcmVkPC9jb2RlPiBhdHRyaWJ1dGUgdG8gaW5kaWNhdGUgdGhhdCB0aGUKK3ZpcnR1YWwgdGFibGUgYW5kIG90aGVyIHNpbWlsYXIgZGF0YSBmb3IgYSBjbGFzcyBzaG91bGQgbm90IGJlCitleHBvcnRlZCBmcm9tIGEgRExMLiAgRm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBjbGFzcyBfX2RlY2xzcGVjKG5vdHNoYXJlZCkgQyB7CisgICAgIHB1YmxpYzoKKyAgICAgICBfX2RlY2xzcGVjKGRsbGltcG9ydCkgQygpOworICAgICAgIHZpcnR1YWwgdm9pZCBmKCk7CisgICAgIH0KKyAgICAgCisgICAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICAgICBDOjpDKCkge30KKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+SW4gdGhpcyBjb2RlLCA8Y29kZT5DOjpDPC9jb2RlPiBpcyBleHBvcnRlZCBmcm9tIHRoZSBjdXJyZW50IERMTCwgYnV0IHRoZQordmlydHVhbCB0YWJsZSBmb3IgPGNvZGU+QzwvY29kZT4gaXMgbm90IGV4cG9ydGVkLiAgKFlvdSBjYW4gdXNlCis8Y29kZT5fX2F0dHJpYnV0ZV9fPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPl9fZGVjbHNwZWM8L2NvZGU+IGlmIHlvdSBwcmVmZXIsIGJ1dAorbW9zdCBTeW1iaWFuIE9TIGNvZGUgdXNlcyA8Y29kZT5fX2RlY2xzcGVjPC9jb2RlPi4pCisKKyA8cD48YSBuYW1lPSJNZVAtVHlwZS1BdHRyaWJ1dGVzIj48L2E+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4zNy4yIE1lUCBUeXBlIEF0dHJpYnV0ZXM8L2g0PgorCis8cD5NYW55IG9mIHRoZSBNZVAgdmFyaWFibGUgYXR0cmlidXRlcyBtYXkgYmUgYXBwbGllZCB0byB0eXBlcyBhcyB3ZWxsLiAKK1NwZWNpZmljYWxseSwgdGhlIDxjb2RlPmJhc2VkPC9jb2RlPiwgPGNvZGU+dGlueTwvY29kZT4sIDxjb2RlPm5lYXI8L2NvZGU+LCBhbmQKKzxjb2RlPmZhcjwvY29kZT4gYXR0cmlidXRlcyBtYXkgYmUgYXBwbGllZCB0byBlaXRoZXIuICBUaGUgPGNvZGU+aW88L2NvZGU+IGFuZAorPGNvZGU+Y2I8L2NvZGU+IGF0dHJpYnV0ZXMgbWF5IG5vdCBiZSBhcHBsaWVkIHRvIHR5cGVzLgorCisgPHA+PGEgbmFtZT0iaTM4Ni1UeXBlLUF0dHJpYnV0ZXMiPjwvYT4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjM3LjMgaTM4NiBUeXBlIEF0dHJpYnV0ZXM8L2g0PgorCis8cD5Ud28gYXR0cmlidXRlcyBhcmUgY3VycmVudGx5IGRlZmluZWQgZm9yIGkzODYgY29uZmlndXJhdGlvbnM6Cis8Y29kZT5tc19zdHJ1Y3Q8L2NvZGU+IGFuZCA8Y29kZT5nY2Nfc3RydWN0PC9jb2RlPi4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+bXNfc3RydWN0PC9jb2RlPjxkdD48Y29kZT5nY2Nfc3RydWN0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym1zXzAwNWZzdHJ1Y3RfMDA3ZC0yNzgyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JnY2NfMDA1ZnN0cnVjdF8wMDdkLTI3ODMiPjwvYT4KK0lmIDxjb2RlPnBhY2tlZDwvY29kZT4gaXMgdXNlZCBvbiBhIHN0cnVjdHVyZSwgb3IgaWYgYml0LWZpZWxkcyBhcmUgdXNlZAoraXQgbWF5IGJlIHRoYXQgdGhlIE1pY3Jvc29mdCBBQkkgcGFja3MgdGhlbSBkaWZmZXJlbnRseQordGhhbiBHQ0Mgbm9ybWFsbHkgcGFja3MgdGhlbS4gIFBhcnRpY3VsYXJseSB3aGVuIG1vdmluZyBwYWNrZWQKK2RhdGEgYmV0d2VlbiBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aCBHQ0MgYW5kIHRoZSBuYXRpdmUgTWljcm9zb2Z0IGNvbXBpbGVyCisoZWl0aGVyIHZpYSBmdW5jdGlvbiBjYWxsIG9yIGFzIGRhdGEgaW4gYSBmaWxlKSwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBhY2Nlc3MKK2VpdGhlciBmb3JtYXQuCisKKyAgICAgPHA+Q3VycmVudGx5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tW25vLV1tcy1iaXRmaWVsZHM8L3NwYW4+PC9zYW1wPiBpcyBwcm92aWRlZCBmb3IgdGhlIE1pY3Jvc29mdCBXaW5kb3dzIFg4NgorY29tcGlsZXJzIHRvIG1hdGNoIHRoZSBuYXRpdmUgTWljcm9zb2Z0IGNvbXBpbGVyLiAKKzwvZGw+CisKKyA8cD48YSBuYW1lPSJQb3dlclBDLVR5cGUtQXR0cmlidXRlcyI+PC9hPgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMzcuNCBQb3dlclBDIFR5cGUgQXR0cmlidXRlczwvaDQ+CisKKzxwPlRocmVlIGF0dHJpYnV0ZXMgY3VycmVudGx5IGFyZSBkZWZpbmVkIGZvciBQb3dlclBDIGNvbmZpZ3VyYXRpb25zOgorPGNvZGU+YWx0aXZlYzwvY29kZT4sIDxjb2RlPm1zX3N0cnVjdDwvY29kZT4gYW5kIDxjb2RlPmdjY19zdHJ1Y3Q8L2NvZGU+LgorCisgPHA+Rm9yIGZ1bGwgZG9jdW1lbnRhdGlvbiBvZiB0aGUgPGNvZGU+bXNfc3RydWN0PC9jb2RlPiBhbmQgPGNvZGU+Z2NjX3N0cnVjdDwvY29kZT4KK2F0dHJpYnV0ZXMgcGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBpbiA8YSBocmVmPSJpMzg2LVR5cGUtQXR0cmlidXRlcy5odG1sI2kzODYtVHlwZS1BdHRyaWJ1dGVzIj5pMzg2IFR5cGUgQXR0cmlidXRlczwvYT4uCisKKyA8cD5UaGUgPGNvZGU+YWx0aXZlYzwvY29kZT4gYXR0cmlidXRlIGFsbG93cyBvbmUgdG8gZGVjbGFyZSBBbHRpVmVjIHZlY3RvciBkYXRhCit0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIEFsdGlWZWMgUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIE1hbnVhbC4gIFRoZQorYXR0cmlidXRlIHJlcXVpcmVzIGFuIGFyZ3VtZW50IHRvIHNwZWNpZnkgb25lIG9mIHRocmVlIHZlY3RvciB0eXBlczoKKzxjb2RlPnZlY3Rvcl9fPC9jb2RlPiwgPGNvZGU+cGl4ZWxfXzwvY29kZT4gKGFsd2F5cyBmb2xsb3dlZCBieSB1bnNpZ25lZCBzaG9ydCksCithbmQgPGNvZGU+Ym9vbF9fPC9jb2RlPiAoYWx3YXlzIGZvbGxvd2VkIGJ5IHVuc2lnbmVkKS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIF9fYXR0cmlidXRlX18oKGFsdGl2ZWModmVjdG9yX18pKSkKKyAgICAgX19hdHRyaWJ1dGVfXygoYWx0aXZlYyhwaXhlbF9fKSkpIHVuc2lnbmVkIHNob3J0CisgICAgIF9fYXR0cmlidXRlX18oKGFsdGl2ZWMoYm9vbF9fKSkpIHVuc2lnbmVkCis8L3ByZT4KKyA8cD5UaGVzZSBhdHRyaWJ1dGVzIG1haW5seSBhcmUgaW50ZW5kZWQgdG8gc3VwcG9ydCB0aGUgPGNvZGU+X192ZWN0b3I8L2NvZGU+LAorPGNvZGU+X19waXhlbDwvY29kZT4sIGFuZCA8Y29kZT5fX2Jvb2w8L2NvZGU+IEFsdGlWZWMga2V5d29yZHMuCisKKyA8cD48YSBuYW1lPSJTUFUtVHlwZS1BdHRyaWJ1dGVzIj48L2E+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4zNy41IFNQVSBUeXBlIEF0dHJpYnV0ZXM8L2g0PgorCis8cD5UaGUgU1BVIHN1cHBvcnRzIHRoZSA8Y29kZT5zcHVfdmVjdG9yPC9jb2RlPiBhdHRyaWJ1dGUgZm9yIHR5cGVzLiAgVGhpcyBhdHRyaWJ1dGUKK2FsbG93cyBvbmUgdG8gZGVjbGFyZSB2ZWN0b3IgZGF0YSB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIFNvbnkvVG9zaGliYS9JQk0gU1BVCitMYW5ndWFnZSBFeHRlbnNpb25zIFNwZWNpZmljYXRpb24uICBJdCBpcyBpbnRlbmRlZCB0byBzdXBwb3J0IHRoZQorPGNvZGU+X192ZWN0b3I8L2NvZGU+IGtleXdvcmQuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGUtVHJhaXRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGUtVHJhaXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhNjFjNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVHlwZS1UcmFpdHMuaHRtbApAQCAtMCwwICsxLDE3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VHlwZSBUcmFpdHMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiIHRpdGxlPSJDKysgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik5hbWVzcGFjZS1Bc3NvY2lhdGlvbi5odG1sI05hbWVzcGFjZS1Bc3NvY2lhdGlvbiIgdGl0bGU9Ik5hbWVzcGFjZSBBc3NvY2lhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkphdmEtRXhjZXB0aW9ucy5odG1sI0phdmEtRXhjZXB0aW9ucyIgdGl0bGU9IkphdmEgRXhjZXB0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUeXBlLVRyYWl0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJKYXZhLUV4Y2VwdGlvbnMuaHRtbCNKYXZhLUV4Y2VwdGlvbnMiPkphdmEgRXhjZXB0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik5hbWVzcGFjZS1Bc3NvY2lhdGlvbi5odG1sI05hbWVzcGFjZS1Bc3NvY2lhdGlvbiI+TmFtZXNwYWNlIEFzc29jaWF0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiPkMrKyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xMCBUeXBlIFRyYWl0czwvaDM+CisKKzxwPlRoZSBDKysgZnJvbnQgZW5kIGltcGxlbWVudHMgc3ludGFjdGljIGV4dGVuc2lvbnMgdGhhdCBhbGxvdworY29tcGlsZS10aW1lIGRldGVybWluYXRpb24gb2YKK3ZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzIG9mIGEgdHlwZSAob3Igb2YgYQorcGFpciBvZiB0eXBlcykuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPl9faGFzX25vdGhyb3dfYXNzaWduICh0eXBlKTwvY29kZT48ZGQ+SWYgPGNvZGU+dHlwZTwvY29kZT4gaXMgY29uc3QgcXVhbGlmaWVkIG9yIGlzIGEgcmVmZXJlbmNlIHR5cGUgdGhlbiB0aGUgdHJhaXQgaXMKK2ZhbHNlLiAgT3RoZXJ3aXNlIGlmIDxjb2RlPl9faGFzX3RyaXZpYWxfYXNzaWduICh0eXBlKTwvY29kZT4gaXMgdHJ1ZSB0aGVuIHRoZSB0cmFpdAoraXMgdHJ1ZSwgZWxzZSBpZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBhIGN2IGNsYXNzIG9yIHVuaW9uIHR5cGUgd2l0aCBjb3B5IGFzc2lnbm1lbnQKK29wZXJhdG9ycyB0aGF0IGFyZSBrbm93biBub3QgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIHRoZW4gdGhlIHRyYWl0IGlzIHRydWUsCitlbHNlIGl0IGlzIGZhbHNlLiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlIGEgY29tcGxldGUgdHlwZSwKKyhwb3NzaWJseSBjdi1xdWFsaWZpZWQpIDxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheSBvZiB1bmtub3duIGJvdW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19oYXNfbm90aHJvd19jb3B5ICh0eXBlKTwvY29kZT48ZGQ+SWYgPGNvZGU+X19oYXNfdHJpdmlhbF9jb3B5ICh0eXBlKTwvY29kZT4gaXMgdHJ1ZSB0aGVuIHRoZSB0cmFpdCBpcyB0cnVlLCBlbHNlIGlmCis8Y29kZT50eXBlPC9jb2RlPiBpcyBhIGN2IGNsYXNzIG9yIHVuaW9uIHR5cGUgd2l0aCBjb3B5IGNvbnN0cnVjdG9ycyB0aGF0CithcmUga25vd24gbm90IHRvIHRocm93IGFuIGV4Y2VwdGlvbiB0aGVuIHRoZSB0cmFpdCBpcyB0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLiAKK1JlcXVpcmVzOiA8Y29kZT50eXBlPC9jb2RlPiBzaGFsbCBiZSBhIGNvbXBsZXRlIHR5cGUsIChwb3NzaWJseSBjdi1xdWFsaWZpZWQpCis8Y29kZT52b2lkPC9jb2RlPiwgb3IgYW4gYXJyYXkgb2YgdW5rbm93biBib3VuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9faGFzX25vdGhyb3dfY29uc3RydWN0b3IgKHR5cGUpPC9jb2RlPjxkZD5JZiA8Y29kZT5fX2hhc190cml2aWFsX2NvbnN0cnVjdG9yICh0eXBlKTwvY29kZT4gaXMgdHJ1ZSB0aGVuIHRoZSB0cmFpdCBpcwordHJ1ZSwgZWxzZSBpZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBhIGN2IGNsYXNzIG9yIHVuaW9uIHR5cGUgKG9yIGFycmF5Cit0aGVyZW9mKSB3aXRoIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciB0aGF0IGlzIGtub3duIG5vdCB0byB0aHJvdyBhbgorZXhjZXB0aW9uIHRoZW4gdGhlIHRyYWl0IGlzIHRydWUsIGVsc2UgaXQgaXMgZmFsc2UuICBSZXF1aXJlczoKKzxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlIGEgY29tcGxldGUgdHlwZSwgKHBvc3NpYmx5IGN2LXF1YWxpZmllZCkKKzxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheSBvZiB1bmtub3duIGJvdW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19oYXNfdHJpdmlhbF9hc3NpZ24gKHR5cGUpPC9jb2RlPjxkZD5JZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBjb25zdCBxdWFsaWZpZWQgb3IgaXMgYSByZWZlcmVuY2UgdHlwZSB0aGVuIHRoZSB0cmFpdCBpcworZmFsc2UuICBPdGhlcndpc2UgaWYgPGNvZGU+X19pc19wb2QgKHR5cGUpPC9jb2RlPiBpcyB0cnVlIHRoZW4gdGhlIHRyYWl0IGlzCit0cnVlLCBlbHNlIGlmIDxjb2RlPnR5cGU8L2NvZGU+IGlzIGEgY3YgY2xhc3Mgb3IgdW5pb24gdHlwZSB3aXRoIGEgdHJpdmlhbAorY29weSBhc3NpZ25tZW50IChbY2xhc3MuY29weV0pIHRoZW4gdGhlIHRyYWl0IGlzIHRydWUsIGVsc2UgaXQgaXMKK2ZhbHNlLiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlIGEgY29tcGxldGUgdHlwZSwgKHBvc3NpYmx5Citjdi1xdWFsaWZpZWQpIDxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheSBvZiB1bmtub3duIGJvdW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19oYXNfdHJpdmlhbF9jb3B5ICh0eXBlKTwvY29kZT48ZGQ+SWYgPGNvZGU+X19pc19wb2QgKHR5cGUpPC9jb2RlPiBpcyB0cnVlIG9yIDxjb2RlPnR5cGU8L2NvZGU+IGlzIGEgcmVmZXJlbmNlIHR5cGUKK3RoZW4gdGhlIHRyYWl0IGlzIHRydWUsIGVsc2UgaWYgPGNvZGU+dHlwZTwvY29kZT4gaXMgYSBjdiBjbGFzcyBvciB1bmlvbiB0eXBlCit3aXRoIGEgdHJpdmlhbCBjb3B5IGNvbnN0cnVjdG9yIChbY2xhc3MuY29weV0pIHRoZW4gdGhlIHRyYWl0CitpcyB0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlIGEgY29tcGxldGUKK3R5cGUsIChwb3NzaWJseSBjdi1xdWFsaWZpZWQpIDxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheSBvZiB1bmtub3duIGJvdW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19oYXNfdHJpdmlhbF9jb25zdHJ1Y3RvciAodHlwZSk8L2NvZGU+PGRkPklmIDxjb2RlPl9faXNfcG9kICh0eXBlKTwvY29kZT4gaXMgdHJ1ZSB0aGVuIHRoZSB0cmFpdCBpcyB0cnVlLCBlbHNlIGlmCis8Y29kZT50eXBlPC9jb2RlPiBpcyBhIGN2IGNsYXNzIG9yIHVuaW9uIHR5cGUgKG9yIGFycmF5IHRoZXJlb2YpIHdpdGggYQordHJpdmlhbCBkZWZhdWx0IGNvbnN0cnVjdG9yIChbY2xhc3MuY3Rvcl0pIHRoZW4gdGhlIHRyYWl0IGlzIHRydWUsCitlbHNlIGl0IGlzIGZhbHNlLiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlIGEgY29tcGxldGUKK3R5cGUsIChwb3NzaWJseSBjdi1xdWFsaWZpZWQpIDxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheSBvZiB1bmtub3duIGJvdW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19oYXNfdHJpdmlhbF9kZXN0cnVjdG9yICh0eXBlKTwvY29kZT48ZGQ+SWYgPGNvZGU+X19pc19wb2QgKHR5cGUpPC9jb2RlPiBpcyB0cnVlIG9yIDxjb2RlPnR5cGU8L2NvZGU+IGlzIGEgcmVmZXJlbmNlIHR5cGUgdGhlbgordGhlIHRyYWl0IGlzIHRydWUsIGVsc2UgaWYgPGNvZGU+dHlwZTwvY29kZT4gaXMgYSBjdiBjbGFzcyBvciB1bmlvbiB0eXBlIChvcgorYXJyYXkgdGhlcmVvZikgd2l0aCBhIHRyaXZpYWwgZGVzdHJ1Y3RvciAoW2NsYXNzLmR0b3JdKSB0aGVuIHRoZSB0cmFpdAoraXMgdHJ1ZSwgZWxzZSBpdCBpcyBmYWxzZS4gIFJlcXVpcmVzOiA8Y29kZT50eXBlPC9jb2RlPiBzaGFsbCBiZSBhIGNvbXBsZXRlCit0eXBlLCAocG9zc2libHkgY3YtcXVhbGlmaWVkKSA8Y29kZT52b2lkPC9jb2RlPiwgb3IgYW4gYXJyYXkgb2YgdW5rbm93biBib3VuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9faGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvciAodHlwZSk8L2NvZGU+PGRkPklmIDxjb2RlPnR5cGU8L2NvZGU+IGlzIGEgY2xhc3MgdHlwZSB3aXRoIGEgdmlydHVhbCBkZXN0cnVjdG9yCisoW2NsYXNzLmR0b3JdKSB0aGVuIHRoZSB0cmFpdCBpcyB0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLiAgUmVxdWlyZXM6Cis8Y29kZT50eXBlPC9jb2RlPiBzaGFsbCBiZSBhIGNvbXBsZXRlIHR5cGUsIChwb3NzaWJseSBjdi1xdWFsaWZpZWQpCis8Y29kZT52b2lkPC9jb2RlPiwgb3IgYW4gYXJyYXkgb2YgdW5rbm93biBib3VuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9faXNfYWJzdHJhY3QgKHR5cGUpPC9jb2RlPjxkZD5JZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBhbiBhYnN0cmFjdCBjbGFzcyAoW2NsYXNzLmFic3RyYWN0XSkgdGhlbiB0aGUgdHJhaXQKK2lzIHRydWUsIGVsc2UgaXQgaXMgZmFsc2UuICBSZXF1aXJlczogPGNvZGU+dHlwZTwvY29kZT4gc2hhbGwgYmUgYSBjb21wbGV0ZQordHlwZSwgKHBvc3NpYmx5IGN2LXF1YWxpZmllZCkgPGNvZGU+dm9pZDwvY29kZT4sIG9yIGFuIGFycmF5IG9mIHVua25vd24gYm91bmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX2lzX2Jhc2Vfb2YgKGJhc2VfdHlwZSwgZGVyaXZlZF90eXBlKTwvY29kZT48ZGQ+SWYgPGNvZGU+YmFzZV90eXBlPC9jb2RlPiBpcyBhIGJhc2UgY2xhc3Mgb2YgPGNvZGU+ZGVyaXZlZF90eXBlPC9jb2RlPgorKFtjbGFzcy5kZXJpdmVkXSkgdGhlbiB0aGUgdHJhaXQgaXMgdHJ1ZSwgb3RoZXJ3aXNlIGl0IGlzIGZhbHNlLiAKK1RvcC1sZXZlbCBjdiBxdWFsaWZpY2F0aW9ucyBvZiA8Y29kZT5iYXNlX3R5cGU8L2NvZGU+IGFuZAorPGNvZGU+ZGVyaXZlZF90eXBlPC9jb2RlPiBhcmUgaWdub3JlZC4gIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyB0cmFpdCwgYQorY2xhc3MgdHlwZSBpcyBjb25zaWRlcmVkIGlzIG93biBiYXNlLiAgUmVxdWlyZXM6IGlmIDxjb2RlPl9faXNfY2xhc3MKKyhiYXNlX3R5cGUpPC9jb2RlPiBhbmQgPGNvZGU+X19pc19jbGFzcyAoZGVyaXZlZF90eXBlKTwvY29kZT4gYXJlIHRydWUgYW5kCis8Y29kZT5iYXNlX3R5cGU8L2NvZGU+IGFuZCA8Y29kZT5kZXJpdmVkX3R5cGU8L2NvZGU+IGFyZSBub3QgdGhlIHNhbWUgdHlwZQorKGRpc3JlZ2FyZGluZyBjdi1xdWFsaWZpZXJzKSwgPGNvZGU+ZGVyaXZlZF90eXBlPC9jb2RlPiBzaGFsbCBiZSBhIGNvbXBsZXRlCit0eXBlLiAgRGlhZ25vc3RpYyBpcyBwcm9kdWNlZCBpZiB0aGlzIHJlcXVpcmVtZW50IGlzIG5vdCBtZXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX2lzX2NsYXNzICh0eXBlKTwvY29kZT48ZGQ+SWYgPGNvZGU+dHlwZTwvY29kZT4gaXMgYSBjdiBjbGFzcyB0eXBlLCBhbmQgbm90IGEgdW5pb24gdHlwZQorKFtiYXNpYy5jb21wb3VuZF0pIHRoZSB0cmFpdCBpcyB0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19pc19lbXB0eSAodHlwZSk8L2NvZGU+PGRkPklmIDxjb2RlPl9faXNfY2xhc3MgKHR5cGUpPC9jb2RlPiBpcyBmYWxzZSB0aGVuIHRoZSB0cmFpdCBpcyBmYWxzZS4gCitPdGhlcndpc2UgPGNvZGU+dHlwZTwvY29kZT4gaXMgY29uc2lkZXJlZCBlbXB0eSBpZiBhbmQgb25seSBpZjogPGNvZGU+dHlwZTwvY29kZT4KK2hhcyBubyBub24tc3RhdGljIGRhdGEgbWVtYmVycywgb3IgYWxsIG5vbi1zdGF0aWMgZGF0YSBtZW1iZXJzLCBpZgorYW55LCBhcmUgYml0LWZpZWxkcyBvZiBsZW5ndGggMCwgYW5kIDxjb2RlPnR5cGU8L2NvZGU+IGhhcyBubyB2aXJ0dWFsCittZW1iZXJzLCBhbmQgPGNvZGU+dHlwZTwvY29kZT4gaGFzIG5vIHZpcnR1YWwgYmFzZSBjbGFzc2VzLCBhbmQgPGNvZGU+dHlwZTwvY29kZT4KK2hhcyBubyBiYXNlIGNsYXNzZXMgPGNvZGU+YmFzZV90eXBlPC9jb2RlPiBmb3Igd2hpY2gKKzxjb2RlPl9faXNfZW1wdHkgKGJhc2VfdHlwZSk8L2NvZGU+IGlzIGZhbHNlLiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsCitiZSBhIGNvbXBsZXRlIHR5cGUsIChwb3NzaWJseSBjdi1xdWFsaWZpZWQpIDxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheQorb2YgdW5rbm93biBib3VuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9faXNfZW51bSAodHlwZSk8L2NvZGU+PGRkPklmIDxjb2RlPnR5cGU8L2NvZGU+IGlzIGEgY3YgZW51bWVyYXRpb24gdHlwZSAoW2Jhc2ljLmNvbXBvdW5kXSkgdGhlIHRyYWl0IGlzCit0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19pc19saXRlcmFsX3R5cGUgKHR5cGUpPC9jb2RlPjxkZD5JZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBhIGxpdGVyYWwgdHlwZSAoW2Jhc2ljLnR5cGVzXSkgdGhlIHRyYWl0IGlzCit0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlIGEgY29tcGxldGUgdHlwZSwKKyhwb3NzaWJseSBjdi1xdWFsaWZpZWQpIDxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheSBvZiB1bmtub3duIGJvdW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19pc19wb2QgKHR5cGUpPC9jb2RlPjxkZD5JZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBhIGN2IFBPRCB0eXBlIChbYmFzaWMudHlwZXNdKSB0aGVuIHRoZSB0cmFpdCBpcyB0cnVlLAorZWxzZSBpdCBpcyBmYWxzZS4gIFJlcXVpcmVzOiA8Y29kZT50eXBlPC9jb2RlPiBzaGFsbCBiZSBhIGNvbXBsZXRlIHR5cGUsCisocG9zc2libHkgY3YtcXVhbGlmaWVkKSA8Y29kZT52b2lkPC9jb2RlPiwgb3IgYW4gYXJyYXkgb2YgdW5rbm93biBib3VuZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9faXNfcG9seW1vcnBoaWMgKHR5cGUpPC9jb2RlPjxkZD5JZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBhIHBvbHltb3JwaGljIGNsYXNzIChbY2xhc3MudmlydHVhbF0pIHRoZW4gdGhlIHRyYWl0CitpcyB0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlIGEgY29tcGxldGUKK3R5cGUsIChwb3NzaWJseSBjdi1xdWFsaWZpZWQpIDxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheSBvZiB1bmtub3duIGJvdW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19pc19zdGFuZGFyZF9sYXlvdXQgKHR5cGUpPC9jb2RlPjxkZD5JZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBhIHN0YW5kYXJkLWxheW91dCB0eXBlIChbYmFzaWMudHlwZXNdKSB0aGUgdHJhaXQgaXMKK3RydWUsIGVsc2UgaXQgaXMgZmFsc2UuICBSZXF1aXJlczogPGNvZGU+dHlwZTwvY29kZT4gc2hhbGwgYmUgYSBjb21wbGV0ZQordHlwZSwgKHBvc3NpYmx5IGN2LXF1YWxpZmllZCkgPGNvZGU+dm9pZDwvY29kZT4sIG9yIGFuIGFycmF5IG9mIHVua25vd24gYm91bmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5fX2lzX3RyaXZpYWwgKHR5cGUpPC9jb2RlPjxkZD5JZiA8Y29kZT50eXBlPC9jb2RlPiBpcyBhIHRyaXZpYWwgdHlwZSAoW2Jhc2ljLnR5cGVzXSkgdGhlIHRyYWl0IGlzCit0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlIGEgY29tcGxldGUKK3R5cGUsIChwb3NzaWJseSBjdi1xdWFsaWZpZWQpIDxjb2RlPnZvaWQ8L2NvZGU+LCBvciBhbiBhcnJheSBvZiB1bmtub3duIGJvdW5kLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X19pc191bmlvbiAodHlwZSk8L2NvZGU+PGRkPklmIDxjb2RlPnR5cGU8L2NvZGU+IGlzIGEgY3YgdW5pb24gdHlwZSAoW2Jhc2ljLmNvbXBvdW5kXSkgdGhlIHRyYWl0IGlzCit0cnVlLCBlbHNlIGl0IGlzIGZhbHNlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X191bmRlcmx5aW5nX3R5cGUgKHR5cGUpPC9jb2RlPjxkZD5UaGUgdW5kZXJseWluZyB0eXBlIG9mIDxjb2RlPnR5cGU8L2NvZGU+LiAgUmVxdWlyZXM6IDxjb2RlPnR5cGU8L2NvZGU+IHNoYWxsIGJlCithbiBlbnVtZXJhdGlvbiB0eXBlIChbZGNsLmVudW1dKS4KKworIDwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGUtZW5jb2RpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVHlwZS1lbmNvZGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYTc3YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGUtZW5jb2RpbmcuaHRtbApAQCAtMCwwICsxLDI1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VHlwZSBlbmNvZGluZyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPYmplY3RpdmVfMDAyZEMuaHRtbCNPYmplY3RpdmVfMDAyZEMiIHRpdGxlPSJPYmplY3RpdmUtQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkV4ZWN1dGluZy1jb2RlLWJlZm9yZS1tYWluLmh0bWwjRXhlY3V0aW5nLWNvZGUtYmVmb3JlLW1haW4iIHRpdGxlPSJFeGVjdXRpbmcgY29kZSBiZWZvcmUgbWFpbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdhcmJhZ2UtQ29sbGVjdGlvbi5odG1sI0dhcmJhZ2UtQ29sbGVjdGlvbiIgdGl0bGU9IkdhcmJhZ2UgQ29sbGVjdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUeXBlLWVuY29kaW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdhcmJhZ2UtQ29sbGVjdGlvbi5odG1sI0dhcmJhZ2UtQ29sbGVjdGlvbiI+R2FyYmFnZSBDb2xsZWN0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRXhlY3V0aW5nLWNvZGUtYmVmb3JlLW1haW4uaHRtbCNFeGVjdXRpbmctY29kZS1iZWZvcmUtbWFpbiI+RXhlY3V0aW5nIGNvZGUgYmVmb3JlIG1haW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPYmplY3RpdmVfMDAyZEMuaHRtbCNPYmplY3RpdmVfMDAyZEMiPk9iamVjdGl2ZS1DPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4zIFR5cGUgZW5jb2Rpbmc8L2gzPgorCis8cD5UaGlzIGlzIGFuIGFkdmFuY2VkIHNlY3Rpb24uICBUeXBlIGVuY29kaW5ncyBhcmUgdXNlZCBleHRlbnNpdmVseSBieQordGhlIGNvbXBpbGVyIGFuZCBieSB0aGUgcnVudGltZSwgYnV0IHlvdSBnZW5lcmFsbHkgZG8gbm90IG5lZWQgdG8ga25vdworYWJvdXQgdGhlbSB0byB1c2UgT2JqZWN0aXZlLUMuCisKKyA8cD5UaGUgT2JqZWN0aXZlLUMgY29tcGlsZXIgZ2VuZXJhdGVzIHR5cGUgZW5jb2RpbmdzIGZvciBhbGwgdGhlIHR5cGVzLiAKK1RoZXNlIHR5cGUgZW5jb2RpbmdzIGFyZSB1c2VkIGF0IHJ1bnRpbWUgdG8gZmluZCBvdXQgaW5mb3JtYXRpb24gYWJvdXQKK3NlbGVjdG9ycyBhbmQgbWV0aG9kcyBhbmQgYWJvdXQgb2JqZWN0cyBhbmQgY2xhc3Nlcy4KKworIDxwPlRoZSB0eXBlcyBhcmUgZW5jb2RlZCBpbiB0aGUgZm9sbG93aW5nIHdheToKKworPCEtLSBAc3AgMSAtLT4KKyA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+X0Jvb2w8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+QjwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPmNoYXI8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+YzwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPnVuc2lnbmVkIGNoYXI8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+QzwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPnNob3J0PC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPnM8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj48Y29kZT51bnNpZ25lZCBzaG9ydDwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT5TPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+aW50PC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPmk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj48Y29kZT51bnNpZ25lZCBpbnQ8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+STwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPmxvbmc8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+bDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPnVuc2lnbmVkIGxvbmc8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+TDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPmxvbmcgbG9uZzwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT5xPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+dW5zaWduZWQgbG9uZyBsb25nPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPlE8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj48Y29kZT5mbG9hdDwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT5mPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+ZG91YmxlPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPmQ8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj48Y29kZT5sb25nIGRvdWJsZTwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT5EPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+dm9pZDwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT52PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+aWQ8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+QDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPkNsYXNzPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPiM8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj48Y29kZT5TRUw8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+OjwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPmNoYXIqPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPio8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj48Y29kZT5lbnVtPC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPmFuIDxjb2RlPmVudW08L2NvZGU+IGlzIGVuY29kZWQgZXhhY3RseSBhcyB0aGUgaW50ZWdlciB0eXBlIHRoYXQgdGhlIGNvbXBpbGVyIHVzZXMgZm9yIGl0LCB3aGljaCBkZXBlbmRzIG9uIHRoZSBlbnVtZXJhdGlvbgordmFsdWVzLiAgT2Z0ZW4gdGhlIGNvbXBpbGVyIHVzZXJzIDxjb2RlPnVuc2lnbmVkIGludDwvY29kZT4sIHdoaWNoIGlzIHRoZW4gZW5jb2RlZCBhcyA8Y29kZT5JPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj51bmtub3duIHR5cGUKKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT4/PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Q29tcGxleCB0eXBlcworPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPmo8L2NvZGU+IGZvbGxvd2VkIGJ5IHRoZSBpbm5lciB0eXBlLiAgRm9yIGV4YW1wbGUgPGNvZGU+X0NvbXBsZXggZG91YmxlPC9jb2RlPiBpcyBlbmNvZGVkIGFzICJqZCIuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Yml0LWZpZWxkcworPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPmI8L2NvZGU+IGZvbGxvd2VkIGJ5IHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgYml0LWZpZWxkLCB0aGUgdHlwZSBvZiB0aGUgYml0LWZpZWxkIGFuZCB0aGUgc2l6ZSBvZiB0aGUgYml0LWZpZWxkICh0aGUgYml0LWZpZWxkcyBlbmNvZGluZyB3YXMgY2hhbmdlZCBmcm9tIHRoZSBOZVhUJ3MgY29tcGlsZXIgZW5jb2RpbmcsIHNlZSBiZWxvdykKKyA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKzwhLS0gQHNwIDEgLS0+CisgPHA+VGhlIGVuY29kaW5nIG9mIGJpdC1maWVsZHMgaGFzIGNoYW5nZWQgdG8gYWxsb3cgYml0LWZpZWxkcyB0byBiZQorcHJvcGVybHkgaGFuZGxlZCBieSB0aGUgcnVudGltZSBmdW5jdGlvbnMgdGhhdCBjb21wdXRlIHNpemVzIGFuZAorYWxpZ25tZW50cyBvZiB0eXBlcyB0aGF0IGNvbnRhaW4gYml0LWZpZWxkcy4gIFRoZSBwcmV2aW91cyBlbmNvZGluZworY29udGFpbmVkIG9ubHkgdGhlIHNpemUgb2YgdGhlIGJpdC1maWVsZC4gIFVzaW5nIG9ubHkgdGhpcyBpbmZvcm1hdGlvbgoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlbGlhYmx5IGNvbXB1dGUgdGhlIHNpemUgb2NjdXBpZWQgYnkgdGhlCitiaXQtZmllbGQuICBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IGluIHRoZSBwcmVzZW5jZSBvZiB0aGUgQm9laG0ncworZ2FyYmFnZSBjb2xsZWN0b3IgYmVjYXVzZSB0aGUgb2JqZWN0cyBhcmUgYWxsb2NhdGVkIHVzaW5nIHRoZSB0eXBlZAorbWVtb3J5IGZhY2lsaXR5IGF2YWlsYWJsZSBpbiB0aGlzIGNvbGxlY3Rvci4gIFRoZSB0eXBlZCBtZW1vcnkKK2FsbG9jYXRpb24gcmVxdWlyZXMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIHBvaW50ZXJzIGFyZSBsb2NhdGVkCitpbnNpZGUgdGhlIG9iamVjdC4KKworIDxwPlRoZSBwb3NpdGlvbiBpbiB0aGUgYml0LWZpZWxkIGlzIHRoZSBwb3NpdGlvbiwgY291bnRpbmcgaW4gYml0cywgb2YgdGhlCitiaXQgY2xvc2VzdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuCisKKyA8cD5UaGUgbm9uLWF0b21pYyB0eXBlcyBhcmUgZW5jb2RlZCBhcyBmb2xsb3dzOgorCis8IS0tIEBzcCAxIC0tPgorIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5wb2ludGVycworPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Xjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb2xsb3dlZCBieSB0aGUgcG9pbnRlZCB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPmFycmF5cworPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Wzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSBmb2xsb3dlZCBieSB0aGUgdHlwZSBvZiB0aGUgZWxlbWVudHMgZm9sbG93ZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5dPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5zdHJ1Y3R1cmVzCis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj57PC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3R1cmUgKG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Pzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpZiB0aGUgc3RydWN0dXJlIGlzIHVubmFtZWQpLCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjwvc2FtcD4mcnNxdW87IHNpZ24sIHRoZSB0eXBlIG9mIHRoZSBtZW1iZXJzIGFuZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPn08L3NwYW4+PC9zYW1wPiZyc3F1bzsKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPnVuaW9ucworPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUgc3RydWN0dXJlIChvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj88L3NwYW4+PC9zYW1wPiZyc3F1bzsgaWYgdGhlIHVuaW9uIGlzIHVubmFtZWQpLCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjwvc2FtcD4mcnNxdW87IHNpZ24sIHRoZSB0eXBlIG9mIHRoZSBtZW1iZXJzIGZvbGxvd2VkIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+KTwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+dmVjdG9ycworPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+IVs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9sbG93ZWQgYnkgdGhlIHZlY3Rvcl9zaXplICh0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbXBvc2luZyB0aGUgdmVjdG9yKSBmb2xsb3dlZCBieSBhIGNvbW1hLCBmb2xsb3dlZCBieSB0aGUgYWxpZ25tZW50IChpbiBieXRlcykgb2YgdGhlIHZlY3RvciwgZm9sbG93ZWQgYnkgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGZvbGxvd2VkIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XTwvc3Bhbj48L3NhbXA+JnJzcXVvOworIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworIDxwPkhlcmUgYXJlIHNvbWUgdHlwZXMgYW5kIHRoZWlyIGVuY29kaW5ncywgYXMgdGhleSBhcmUgZ2VuZXJhdGVkIGJ5IHRoZQorY29tcGlsZXIgb24gYW4gaTM4NiBtYWNoaW5lOgorCisgPHByZSBjbGFzcz0ic3AiPgorCis8L3ByZT4KKyA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+T2JqZWN0aXZlLUMgdHlwZQorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPkNvbXBpbGVyIGVuY29kaW5nCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgYVsxMF07Cis8L3ByZT4KKyA8cD48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+WzEwaV08L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdHJ1Y3QgeworICAgICAgIGludCBpOworICAgICAgIGZsb2F0IGZbM107CisgICAgICAgaW50IGE6MzsKKyAgICAgICBpbnQgYjoyOworICAgICAgIGNoYXIgYzsKKyAgICAgfQorPC9wcmU+CisgPHA+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPns/PWlbM2ZdYjEyOGkzYjEzMWkyY308L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgYSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDE2KSkpOworPC9wcmU+CisgPHA+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPiFbMTYsMTZpXTwvY29kZT4gKGFsaWdubWVudCB3b3VsZCBkZXBlbmQgb24gdGhlIG1hY2hpbmUpCisgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgPHByZSBjbGFzcz0ic3AiPgorCis8L3ByZT4KKworSW4gYWRkaXRpb24gdG8gdGhlIHR5cGVzIHRoZSBjb21waWxlciBhbHNvIGVuY29kZXMgdGhlIHR5cGUKK3NwZWNpZmllcnMuICBUaGUgdGFibGUgYmVsb3cgZGVzY3JpYmVzIHRoZSBlbmNvZGluZyBvZiB0aGUgY3VycmVudAorT2JqZWN0aXZlLUMgdHlwZSBzcGVjaWZpZXJzOgorCisgPHByZSBjbGFzcz0ic3AiPgorCis8L3ByZT4KKyA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3BlY2lmaWVyCis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+RW5jb2RpbmcKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPmNvbnN0PC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPnI8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj48Y29kZT5pbjwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT5uPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+aW5vdXQ8L2NvZGU+Cis8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+TjwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPjxjb2RlPm91dDwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT5vPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+Ynljb3B5PC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPk88L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj48Y29kZT5ieXJlZjwvY29kZT4KKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj48Y29kZT5SPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+PGNvZGU+b25ld2F5PC9jb2RlPgorPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPlY8L2NvZGU+CisgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgPHByZSBjbGFzcz0ic3AiPgorCis8L3ByZT4KKworVGhlIHR5cGUgc3BlY2lmaWVycyBhcmUgZW5jb2RlZCBqdXN0IGJlZm9yZSB0aGUgdHlwZS4gIFVubGlrZSB0eXBlcworaG93ZXZlciwgdGhlIHR5cGUgc3BlY2lmaWVycyBhcmUgb25seSBlbmNvZGVkIHdoZW4gdGhleSBhcHBlYXIgaW4gbWV0aG9kCithcmd1bWVudCB0eXBlcy4KKworIDxwPk5vdGUgaG93IDxjb2RlPmNvbnN0PC9jb2RlPiBpbnRlcmFjdHMgd2l0aCBwb2ludGVyczoKKworIDxwcmUgY2xhc3M9InNwIj4KKworPC9wcmU+CisgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPk9iamVjdGl2ZS1DIHR5cGUKKzwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzUlIj5Db21waWxlciBlbmNvZGluZworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgY29uc3QgaW50Cis8L3ByZT4KKyA8cD48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+cmk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBjb25zdCBpbnQqCis8L3ByZT4KKyA8cD48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+PGNvZGU+XnJpPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgaW50ICpjb25zdAorPC9wcmU+CisgPHA+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3NSUiPjxjb2RlPnJeaTwvY29kZT4KKyA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyA8cHJlIGNsYXNzPSJzcCI+CisKKzwvcHJlPgorCis8Y29kZT5jb25zdCBpbnQqPC9jb2RlPiBpcyBhIHBvaW50ZXIgdG8gYSA8Y29kZT5jb25zdCBpbnQ8L2NvZGU+LCBhbmQgc28gaXMKK2VuY29kZWQgYXMgPGNvZGU+XnJpPC9jb2RlPi4gIDxjb2RlPmludCogY29uc3Q8L2NvZGU+LCBpbnN0ZWFkLCBpcyBhIDxjb2RlPmNvbnN0PC9jb2RlPgorcG9pbnRlciB0byBhbiA8Y29kZT5pbnQ8L2NvZGU+LCBhbmQgc28gaXMgZW5jb2RlZCBhcyA8Y29kZT5yXmk8L2NvZGU+LgorCisgPHA+RmluYWxseSwgdGhlcmUgaXMgYSBjb21wbGljYXRpb24gd2hlbiBlbmNvZGluZyA8Y29kZT5jb25zdCBjaGFyICo8L2NvZGU+Cit2ZXJzdXMgPGNvZGU+Y2hhciAqIGNvbnN0PC9jb2RlPi4gIEJlY2F1c2UgPGNvZGU+Y2hhciAqPC9jb2RlPiBpcyBlbmNvZGVkIGFzCis8Y29kZT4qPC9jb2RlPiBhbmQgbm90IGFzIDxjb2RlPl5jPC9jb2RlPiwgdGhlcmUgaXMgbm8gd2F5IHRvIGV4cHJlc3MgdGhlIGZhY3QKK3RoYXQgPGNvZGU+cjwvY29kZT4gYXBwbGllcyB0byB0aGUgcG9pbnRlciBvciB0byB0aGUgcG9pbnRlZS4KKworIDxwPkhlbmNlLCBpdCBpcyBhc3N1bWVkIGFzIGEgY29udmVudGlvbiB0aGF0IDxjb2RlPnIqPC9jb2RlPiBtZWFucyA8Y29kZT5jb25zdAorY2hhciAqPC9jb2RlPiAoc2luY2UgaXQgaXMgd2hhdCBpcyBtb3N0IG9mdGVuIG1lYW50KSwgYW5kIHRoZXJlIGlzIG5vIHdheSB0bworZW5jb2RlIDxjb2RlPmNoYXIgKmNvbnN0PC9jb2RlPi4gIDxjb2RlPmNoYXIgKmNvbnN0PC9jb2RlPiB3b3VsZCBzaW1wbHkgYmUgZW5jb2RlZAorYXMgPGNvZGU+KjwvY29kZT4sIGFuZCB0aGUgPGNvZGU+Y29uc3Q8L2NvZGU+IGlzIGxvc3QuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJMZWdhY3ktdHlwZS1lbmNvZGluZy5odG1sI0xlZ2FjeS10eXBlLWVuY29kaW5nIj5MZWdhY3kgdHlwZSBlbmNvZGluZzwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Il8wMDQwZW5jb2RlLmh0bWwjZ190XzAwNDBlbmNvZGUiPkBlbmNvZGU8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJNZXRob2Qtc2lnbmF0dXJlcy5odG1sI01ldGhvZC1zaWduYXR1cmVzIj5NZXRob2Qgc2lnbmF0dXJlczwvYT4KKzwvdWw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGVfMDAyZHB1bm5pbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVHlwZV8wMDJkcHVubmluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2N2Y5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGVfMDAyZHB1bm5pbmcuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9T3B0aW1pemUtT3B0aW9ucy5odG1sI1R5cGUlMmRwdW5uaW5nIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVHlwZW9mLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGVvZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYWI5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1R5cGVvZi5odG1sCkBAIC0wLDAgKzEsMTU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UeXBlb2YgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29uc3RydWN0aW5nLUNhbGxzLmh0bWwjQ29uc3RydWN0aW5nLUNhbGxzIiB0aXRsZT0iQ29uc3RydWN0aW5nIENhbGxzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjQ29uZGl0aW9uYWxzIiB0aXRsZT0iQ29uZGl0aW9uYWxzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlR5cGVvZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiPkNvbmRpdGlvbmFsczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvbnN0cnVjdGluZy1DYWxscy5odG1sI0NvbnN0cnVjdGluZy1DYWxscyI+Q29uc3RydWN0aW5nIENhbGxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjYgUmVmZXJyaW5nIHRvIGEgVHlwZSB3aXRoIDxjb2RlPnR5cGVvZjwvY29kZT48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC10eXBlb2YtMjQyMiI+PC9hPjxhIG5hbWU9ImluZGV4LXNpemVvZi0yNDIzIj48L2E+PGEgbmFtZT0iaW5kZXgtbWFjcm9zXzAwMmMtdHlwZXMtb2YtYXJndW1lbnRzLTI0MjQiPjwvYT4KK0Fub3RoZXIgd2F5IHRvIHJlZmVyIHRvIHRoZSB0eXBlIG9mIGFuIGV4cHJlc3Npb24gaXMgd2l0aCA8Y29kZT50eXBlb2Y8L2NvZGU+LiAKK1RoZSBzeW50YXggb2YgdXNpbmcgb2YgdGhpcyBrZXl3b3JkIGxvb2tzIGxpa2UgPGNvZGU+c2l6ZW9mPC9jb2RlPiwgYnV0IHRoZQorY29uc3RydWN0IGFjdHMgc2VtYW50aWNhbGx5IGxpa2UgYSB0eXBlIG5hbWUgZGVmaW5lZCB3aXRoIDxjb2RlPnR5cGVkZWY8L2NvZGU+LgorCisgPHA+VGhlcmUgYXJlIHR3byB3YXlzIG9mIHdyaXRpbmcgdGhlIGFyZ3VtZW50IHRvIDxjb2RlPnR5cGVvZjwvY29kZT46IHdpdGggYW4KK2V4cHJlc3Npb24gb3Igd2l0aCBhIHR5cGUuICBIZXJlIGlzIGFuIGV4YW1wbGUgd2l0aCBhbiBleHByZXNzaW9uOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZW9mICh4WzBdKDEpKQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGlzIGFzc3VtZXMgdGhhdCA8Y29kZT54PC9jb2RlPiBpcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBmdW5jdGlvbnM7Cit0aGUgdHlwZSBkZXNjcmliZWQgaXMgdGhhdCBvZiB0aGUgdmFsdWVzIG9mIHRoZSBmdW5jdGlvbnMuCisKKyA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgd2l0aCBhIHR5cGVuYW1lIGFzIHRoZSBhcmd1bWVudDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHR5cGVvZiAoaW50ICopCis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkhlcmUgdGhlIHR5cGUgZGVzY3JpYmVkIGlzIHRoYXQgb2YgcG9pbnRlcnMgdG8gPGNvZGU+aW50PC9jb2RlPi4KKworIDxwPklmIHlvdSBhcmUgd3JpdGluZyBhIGhlYWRlciBmaWxlIHRoYXQgbXVzdCB3b3JrIHdoZW4gaW5jbHVkZWQgaW4gSVNPIEMKK3Byb2dyYW1zLCB3cml0ZSA8Y29kZT5fX3R5cGVvZl9fPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPnR5cGVvZjwvY29kZT4uIAorU2VlIDxhIGhyZWY9IkFsdGVybmF0ZS1LZXl3b3Jkcy5odG1sI0FsdGVybmF0ZS1LZXl3b3JkcyI+QWx0ZXJuYXRlIEtleXdvcmRzPC9hPi4KKworIDxwPkEgPGNvZGU+dHlwZW9mPC9jb2RlPiBjb25zdHJ1Y3QgY2FuIGJlIHVzZWQgYW55d2hlcmUgYSB0eXBlZGVmIG5hbWUgY2FuIGJlCit1c2VkLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGl0IGluIGEgZGVjbGFyYXRpb24sIGluIGEgY2FzdCwgb3IgaW5zaWRlCitvZiA8Y29kZT5zaXplb2Y8L2NvZGU+IG9yIDxjb2RlPnR5cGVvZjwvY29kZT4uCisKKyA8cD5UaGUgb3BlcmFuZCBvZiA8Y29kZT50eXBlb2Y8L2NvZGU+IGlzIGV2YWx1YXRlZCBmb3IgaXRzIHNpZGUgZWZmZWN0cyBpZiBhbmQKK29ubHkgaWYgaXQgaXMgYW4gZXhwcmVzc2lvbiBvZiB2YXJpYWJseSBtb2RpZmllZCB0eXBlIG9yIHRoZSBuYW1lIG9mCitzdWNoIGEgdHlwZS4KKworIDxwPjxjb2RlPnR5cGVvZjwvY29kZT4gaXMgb2Z0ZW4gdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGgKK3N0YXRlbWVudCBleHByZXNzaW9ucyAoc2VlIDxhIGhyZWY9IlN0YXRlbWVudC1FeHBycy5odG1sI1N0YXRlbWVudC1FeHBycyI+U3RhdGVtZW50IEV4cHJzPC9hPikuIAorSGVyZSBpcyBob3cgdGhlIHR3byB0b2dldGhlciBjYW4KK2JlIHVzZWQgdG8gZGVmaW5lIGEgc2FmZSAmbGRxdW87bWF4aW11bSZyZHF1bzsgbWFjcm8gd2hpY2ggb3BlcmF0ZXMgb24gYW55Cithcml0aG1ldGljIHR5cGUgYW5kIGV2YWx1YXRlcyBlYWNoIG9mIGl0cyBhcmd1bWVudHMgZXhhY3RseSBvbmNlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBtYXgoYSxiKSBcCisgICAgICAgKHsgdHlwZW9mIChhKSBfYSA9IChhKTsgXAorICAgICAgICAgICB0eXBlb2YgKGIpIF9iID0gKGIpOyBcCisgICAgICAgICBfYSAmZ3Q7IF9iID8gX2EgOiBfYjsgfSkKKzwvcHJlPgorIDxwPjxhIG5hbWU9ImluZGV4LXVuZGVyc2NvcmVzLWluLXZhcmlhYmxlcy1pbi1tYWNyb3MtMjQyNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwc2FtcF8wMDdiXzAwNWZfMDA3ZC1pbi12YXJpYWJsZXMtaW4tbWFjcm9zLTI0MjYiPjwvYT48YSBuYW1lPSJpbmRleC1sb2NhbC12YXJpYWJsZXMtaW4tbWFjcm9zLTI0MjciPjwvYT48YSBuYW1lPSJpbmRleC12YXJpYWJsZXNfMDAyYy1sb2NhbF8wMDJjLWluLW1hY3Jvcy0yNDI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWFjcm9zXzAwMmMtbG9jYWwtdmFyaWFibGVzLWluLTI0MjkiPjwvYT4KK1RoZSByZWFzb24gZm9yIHVzaW5nIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCB1bmRlcnNjb3JlcyBmb3IgdGhlIGxvY2FsCit2YXJpYWJsZXMgaXMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdmFyaWFibGUgbmFtZXMgdGhhdCBvY2N1ciB3aXRoaW4gdGhlCitleHByZXNzaW9ucyB0aGF0IGFyZSBzdWJzdGl0dXRlZCBmb3IgPGNvZGU+YTwvY29kZT4gYW5kIDxjb2RlPmI8L2NvZGU+LiAgRXZlbnR1YWxseSB3ZQoraG9wZSB0byBkZXNpZ24gYSBuZXcgZm9ybSBvZiBkZWNsYXJhdGlvbiBzeW50YXggdGhhdCBhbGxvd3MgeW91IHRvIGRlY2xhcmUKK3ZhcmlhYmxlcyB3aG9zZSBzY29wZXMgc3RhcnQgb25seSBhZnRlciB0aGVpciBpbml0aWFsaXplcnM7IHRoaXMgd2lsbCBiZSBhCittb3JlIHJlbGlhYmxlIHdheSB0byBwcmV2ZW50IHN1Y2ggY29uZmxpY3RzLgorCis8cCBjbGFzcz0ibm9pbmRlbnQiPlNvbWUgbW9yZSBleGFtcGxlcyBvZiB0aGUgdXNlIG9mIDxjb2RlPnR5cGVvZjwvY29kZT46CisKKyAgICAgPHVsPgorPGxpPlRoaXMgZGVjbGFyZXMgPGNvZGU+eTwvY29kZT4gd2l0aCB0aGUgdHlwZSBvZiB3aGF0IDxjb2RlPng8L2NvZGU+IHBvaW50cyB0by4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB0eXBlb2YgKCp4KSB5OworPC9wcmU+CisgICAgIDxsaT5UaGlzIGRlY2xhcmVzIDxjb2RlPnk8L2NvZGU+IGFzIGFuIGFycmF5IG9mIHN1Y2ggdmFsdWVzLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHR5cGVvZiAoKngpIHlbNF07Cis8L3ByZT4KKyAgICAgPGxpPlRoaXMgZGVjbGFyZXMgPGNvZGU+eTwvY29kZT4gYXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gY2hhcmFjdGVyczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB0eXBlb2YgKHR5cGVvZiAoY2hhciAqKVs0XSkgeTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkl0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyB0cmFkaXRpb25hbCBDIGRlY2xhcmF0aW9uOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGNoYXIgKnlbNF07Cis8L3ByZT4KKyAgICAgPHA+VG8gc2VlIHRoZSBtZWFuaW5nIG9mIHRoZSBkZWNsYXJhdGlvbiB1c2luZyA8Y29kZT50eXBlb2Y8L2NvZGU+LCBhbmQgd2h5IGl0CittaWdodCBiZSBhIHVzZWZ1bCB3YXkgdG8gd3JpdGUsIHJld3JpdGUgaXQgd2l0aCB0aGVzZSBtYWNyb3M6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgI2RlZmluZSBwb2ludGVyKFQpICB0eXBlb2YoVCAqKQorICAgICAgICAgICNkZWZpbmUgYXJyYXkoVCwgTikgdHlwZW9mKFQgW05dKQorPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+Tm93IHRoZSBkZWNsYXJhdGlvbiBjYW4gYmUgcmV3cml0dGVuIHRoaXMgd2F5OgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGFycmF5IChwb2ludGVyIChjaGFyKSwgNCkgeTsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRodXMsIDxjb2RlPmFycmF5IChwb2ludGVyIChjaGFyKSwgNCk8L2NvZGU+IGlzIHRoZSB0eXBlIG9mIGFycmF5cyBvZiA0Citwb2ludGVycyB0byA8Y29kZT5jaGFyPC9jb2RlPi4gCis8L3VsPgorCisgPHA+PGVtPkNvbXBhdGliaWxpdHkgTm90ZTo8L2VtPiBJbiBhZGRpdGlvbiB0byA8Y29kZT50eXBlb2Y8L2NvZGU+LCBHQ0MgMiBzdXBwb3J0ZWQKK2EgbW9yZSBsaW1pdGVkIGV4dGVuc2lvbiB0aGF0IHBlcm1pdHRlZCBvbmUgdG8gd3JpdGUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHR5cGVkZWYgPHZhcj5UPC92YXI+ID0gPHZhcj5leHByPC92YXI+OworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij53aXRoIHRoZSBlZmZlY3Qgb2YgZGVjbGFyaW5nIDx2YXI+VDwvdmFyPiB0byBoYXZlIHRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uCis8dmFyPmV4cHI8L3Zhcj4uICBUaGlzIGV4dGVuc2lvbiBkb2VzIG5vdCB3b3JrIHdpdGggR0NDIDMgKHZlcnNpb25zIGJldHdlZW4KKzMuMCBhbmQgMy4yIGNyYXNoOyAzLjIuMSBhbmQgbGF0ZXIgZ2l2ZSBhbiBlcnJvcikuICBDb2RlIHRoYXQKK3JlbGllcyBvbiBpdCBzaG91bGQgYmUgcmV3cml0dGVuIHRvIHVzZSA8Y29kZT50eXBlb2Y8L2NvZGU+OgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZWRlZiB0eXBlb2YoPHZhcj5leHByPC92YXI+KSA8dmFyPlQ8L3Zhcj47Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgd29ya3Mgd2l0aCBhbGwgdmVyc2lvbnMgb2YgR0NDLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Vbm5hbWVkLUZpZWxkcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Vbm5hbWVkLUZpZWxkcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTVlODIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1VubmFtZWQtRmllbGRzLmh0bWwKQEAgLTAsMCArMSwxMjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlVubmFtZWQgRmllbGRzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIiB0aXRsZT0iUHJhZ21hcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIiB0aXRsZT0iVGhyZWFkLUxvY2FsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlVubmFtZWQtRmllbGRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIj5UaHJlYWQtTG9jYWw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni41OSBVbm5hbWVkIHN0cnVjdC91bmlvbiBmaWVsZHMgd2l0aGluIHN0cnVjdHMvdW5pb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdHJ1Y3RfMDA3ZC0zNDg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bmlvbl8wMDdkLTM0ODUiPjwvYT4KK0FzIHBlcm1pdHRlZCBieSBJU08gQzExIGFuZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNvbXBpbGVycywKK0dDQyBhbGxvd3MgeW91IHRvIGRlZmluZQorYSBzdHJ1Y3R1cmUgb3IgdW5pb24gdGhhdCBjb250YWlucywgYXMgZmllbGRzLCBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMKK3dpdGhvdXQgbmFtZXMuICBGb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0cnVjdCB7CisgICAgICAgaW50IGE7CisgICAgICAgdW5pb24geworICAgICAgICAgaW50IGI7CisgICAgICAgICBmbG9hdCBjOworICAgICAgIH07CisgICAgICAgaW50IGQ7CisgICAgIH0gZm9vOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5JbiB0aGlzIGV4YW1wbGUsIHlvdSBhcmUgYWJsZSB0byBhY2Nlc3MgbWVtYmVycyBvZiB0aGUgdW5uYW1lZAordW5pb24gd2l0aCBjb2RlIGxpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mb28uYjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIE5vdGUgdGhhdCBvbmx5IHVubmFtZWQgc3RydWN0cyBhbmQKK3VuaW9ucyBhcmUgYWxsb3dlZCwgeW91IG1heSBub3QgaGF2ZSwgZm9yIGV4YW1wbGUsIGFuIHVubmFtZWQKKzxjb2RlPmludDwvY29kZT4uCisKKyA8cD5Zb3UgbXVzdCBuZXZlciBjcmVhdGUgc3VjaCBzdHJ1Y3R1cmVzIHRoYXQgY2F1c2UgYW1iaWd1b3VzIGZpZWxkIGRlZmluaXRpb25zLiAKK0ZvciBleGFtcGxlLCBpbiB0aGlzIHN0cnVjdHVyZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0cnVjdCB7CisgICAgICAgaW50IGE7CisgICAgICAgc3RydWN0IHsKKyAgICAgICAgIGludCBhOworICAgICAgIH07CisgICAgIH0gZm9vOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5pdCBpcyBhbWJpZ3VvdXMgd2hpY2ggPGNvZGU+YTwvY29kZT4gaXMgYmVpbmcgcmVmZXJyZWQgdG8gd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvby5hPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1RoZSBjb21waWxlciBnaXZlcyBlcnJvcnMgZm9yIHN1Y2ggY29uc3RydWN0cy4KKworIDxwPjxhIG5hbWU9ImluZGV4LWZtc18wMDJkZXh0ZW5zaW9ucy0zNDg2Ij48L2E+VW5sZXNzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbXMtZXh0ZW5zaW9uczwvc3Bhbj48L3NhbXA+IGlzIHVzZWQsIHRoZSB1bm5hbWVkIGZpZWxkIG11c3QgYmUgYQorc3RydWN0dXJlIG9yIHVuaW9uIGRlZmluaXRpb24gd2l0aG91dCBhIHRhZyAoZm9yIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RydWN0Cit7IGludCBhOyB9Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOykuICBJZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm1zLWV4dGVuc2lvbnM8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLCB0aGUgZmllbGQgbWF5CithbHNvIGJlIGEgZGVmaW5pdGlvbiB3aXRoIGEgdGFnIHN1Y2ggYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdHJ1Y3QgZm9vIHsgaW50IGE7Cit9Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYSByZWZlcmVuY2UgdG8gYSBwcmV2aW91c2x5IGRlZmluZWQgc3RydWN0dXJlIG9yIHVuaW9uIHN1Y2ggYXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RydWN0IGZvbzs8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yIGEgcmVmZXJlbmNlIHRvIGEgPGNvZGU+dHlwZWRlZjwvY29kZT4gbmFtZSBmb3IgYQorcHJldmlvdXNseSBkZWZpbmVkIHN0cnVjdHVyZSBvciB1bmlvbiB0eXBlLgorCisgPHA+PGEgbmFtZT0iaW5kZXgtZnBsYW45XzAwMmRleHRlbnNpb25zLTM0ODciPjwvYT5UaGUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcGxhbjktZXh0ZW5zaW9uczwvc3Bhbj48L3NhbXA+IGVuYWJsZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbXMtZXh0ZW5zaW9uczwvc3Bhbj48L3NhbXA+IGFzIHdlbGwgYXMgdHdvIG90aGVyIGV4dGVuc2lvbnMuICBGaXJzdCwgYQorcG9pbnRlciB0byBhIHN0cnVjdHVyZSBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhIHBvaW50ZXIgdG8gYW4KK2Fub255bW91cyBmaWVsZCBmb3IgYXNzaWdubWVudHMgYW5kIGZ1bmN0aW9uIGNhbGxzLiAgRm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdHJ1Y3QgczEgeyBpbnQgYTsgfTsKKyAgICAgc3RydWN0IHMyIHsgc3RydWN0IHMxOyB9OworICAgICBleHRlcm4gdm9pZCBmMSAoc3RydWN0IHMxICopOworICAgICB2b2lkIGYyIChzdHJ1Y3QgczIgKnApIHsgZjEgKHApOyB9Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPkluIHRoZSBjYWxsIHRvIDxjb2RlPmYxPC9jb2RlPiBpbnNpZGUgPGNvZGU+ZjI8L2NvZGU+LCB0aGUgcG9pbnRlciA8Y29kZT5wPC9jb2RlPiBpcworY29udmVydGVkIGludG8gYSBwb2ludGVyIHRvIHRoZSBhbm9ueW1vdXMgZmllbGQuCisKKyA8cD5TZWNvbmQsIHdoZW4gdGhlIHR5cGUgb2YgYW4gYW5vbnltb3VzIGZpZWxkIGlzIGEgPGNvZGU+dHlwZWRlZjwvY29kZT4gZm9yIGEKKzxjb2RlPnN0cnVjdDwvY29kZT4gb3IgPGNvZGU+dW5pb248L2NvZGU+LCBjb2RlIG1heSByZWZlciB0byB0aGUgZmllbGQgdXNpbmcgdGhlCituYW1lIG9mIHRoZSA8Y29kZT50eXBlZGVmPC9jb2RlPi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHR5cGVkZWYgc3RydWN0IHsgaW50IGE7IH0gczE7CisgICAgIHN0cnVjdCBzMiB7IHMxOyB9OworICAgICBzMSBmMSAoc3RydWN0IHMyICpwKSB7IHJldHVybiBwLSZndDtzMTsgfQorPC9wcmU+CisgPHA+VGhlc2UgdXNhZ2VzIGFyZSBvbmx5IHBlcm1pdHRlZCB3aGVuIHRoZXkgYXJlIG5vdCBhbWJpZ3VvdXMuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1VzaW5nLWZhc3QtZW51bWVyYXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVXNpbmctZmFzdC1lbnVtZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmFmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1VzaW5nLWZhc3QtZW51bWVyYXRpb24uaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Vc2luZyBmYXN0IGVudW1lcmF0aW9uIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkZhc3QtZW51bWVyYXRpb24uaHRtbCNGYXN0LWVudW1lcmF0aW9uIiB0aXRsZT0iRmFzdCBlbnVtZXJhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImM5OV8wMDJkbGlrZS1mYXN0LWVudW1lcmF0aW9uLXN5bnRheC5odG1sI2M5OV8wMDJkbGlrZS1mYXN0LWVudW1lcmF0aW9uLXN5bnRheCIgdGl0bGU9ImM5OS1saWtlIGZhc3QgZW51bWVyYXRpb24gc3ludGF4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlVzaW5nLWZhc3QtZW51bWVyYXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iYzk5XzAwMmRsaWtlLWZhc3QtZW51bWVyYXRpb24tc3ludGF4Lmh0bWwjYzk5XzAwMmRsaWtlLWZhc3QtZW51bWVyYXRpb24tc3ludGF4Ij5jOTktbGlrZSBmYXN0IGVudW1lcmF0aW9uIHN5bnRheDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkZhc3QtZW51bWVyYXRpb24uaHRtbCNGYXN0LWVudW1lcmF0aW9uIj5GYXN0IGVudW1lcmF0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OC45LjEgVXNpbmcgZmFzdCBlbnVtZXJhdGlvbjwvaDQ+CisKKzxwPkdOVSBPYmplY3RpdmUtQyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgZmFzdCBlbnVtZXJhdGlvbiBzeW50YXg6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIGlkIGFycmF5ID0gLi4uOworICAgICAgIGlkIG9iamVjdDsKKyAgICAgCisgICAgICAgZm9yIChvYmplY3QgaW4gYXJyYXkpCisgICAgICAgeworICAgICAgICAgLyogRG8gc29tZXRoaW5nIHdpdGggJ29iamVjdCcgKi8KKyAgICAgICB9Cis8L3ByZT4KKyA8cD48Y29kZT5hcnJheTwvY29kZT4gbmVlZHMgdG8gYmUgYW4gT2JqZWN0aXZlLUMgb2JqZWN0ICh1c3VhbGx5IGEgY29sbGVjdGlvbgorb2JqZWN0LCBmb3IgZXhhbXBsZSBhbiBhcnJheSwgYSBkaWN0aW9uYXJ5IG9yIGEgc2V0KSB3aGljaCBpbXBsZW1lbnRzCit0aGUgJmxkcXVvO0Zhc3QgRW51bWVyYXRpb24gUHJvdG9jb2wmcmRxdW87IChzZWUgYmVsb3cpLiAgSWYgeW91IGFyZSB1c2luZyBhCitGb3VuZGF0aW9uIGxpYnJhcnkgc3VjaCBhcyBHTlVzdGVwIEJhc2Ugb3IgQXBwbGUgQ29jb2EgRm91bmRhdGlvbiwgYWxsCitjb2xsZWN0aW9uIG9iamVjdHMgaW4gdGhlIGxpYnJhcnkgaW1wbGVtZW50IHRoaXMgcHJvdG9jb2wgYW5kIGNhbiBiZQordXNlZCBpbiB0aGlzIHdheS4KKworIDxwPlRoZSBjb2RlIGFib3ZlIHdvdWxkIGl0ZXJhdGUgb3ZlciBhbGwgb2JqZWN0cyBpbiA8Y29kZT5hcnJheTwvY29kZT4uICBGb3IKK2VhY2ggb2YgdGhlbSwgaXQgYXNzaWducyBpdCB0byA8Y29kZT5vYmplY3Q8L2NvZGU+LCB0aGVuIGV4ZWN1dGVzIHRoZQorPGNvZGU+RG8gc29tZXRoaW5nIHdpdGggJ29iamVjdCc8L2NvZGU+IHN0YXRlbWVudHMuCisKKyA8cD5IZXJlIGlzIGEgZnVsbHkgd29ya2VkLW91dCBleGFtcGxlIHVzaW5nIGEgRm91bmRhdGlvbiBsaWJyYXJ5ICh3aGljaAorcHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPk5TQXJyYXk8L2NvZGU+LCA8Y29kZT5OU1N0cmluZzwvY29kZT4gYW5kCis8Y29kZT5OU0xvZzwvY29kZT4pOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBOU0FycmF5ICphcnJheSA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IEAiMSIsIEAiMiIsIEAiMyIsIG5pbF07CisgICAgICAgTlNTdHJpbmcgKm9iamVjdDsKKyAgICAgCisgICAgICAgZm9yIChvYmplY3QgaW4gYXJyYXkpCisgICAgICAgICBOU0xvZyAoQCJJdGVyYXRpbmcgb3ZlciAlQCIsIG9iamVjdCk7Cis8L3ByZT4KKyA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVjg1MC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Y4NTAtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzI0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Y4NTAtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WODUwIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElMRVByby1PcHRpb25zLmh0bWwjVElMRVByby1PcHRpb25zIiB0aXRsZT0iVElMRVBybyBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVkFYLU9wdGlvbnMuaHRtbCNWQVgtT3B0aW9ucyIgdGl0bGU9IlZBWCBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlY4NTAtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWQVgtT3B0aW9ucy5odG1sI1ZBWC1PcHRpb25zIj5WQVggT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTEVQcm8tT3B0aW9ucy5odG1sI1RJTEVQcm8tT3B0aW9ucyI+VElMRVBybyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjQ1IFY4NTAgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVY4NTAtT3B0aW9ucy0yMjU0Ij48L2E+CitUaGVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIFY4NTAgaW1wbGVtZW50YXRpb25zOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbWxvbmctY2FsbHM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbG9uZy1jYWxsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxvbmdfMDAyZGNhbGxzLTIyNTUiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGxvbmdfMDAyZGNhbGxzLTIyNTYiPjwvYT5UcmVhdCBhbGwgY2FsbHMgYXMgYmVpbmcgZmFyIGF3YXkgKG5lYXIpLiAgSWYgY2FsbHMgYXJlIGFzc3VtZWQgdG8gYmUKK2ZhciBhd2F5LCB0aGUgY29tcGlsZXIgYWx3YXlzIGxvYWRzIHRoZSBmdW5jdGlvbidzIGFkZHJlc3MgaW50byBhCityZWdpc3RlciwgYW5kIGNhbGxzIGluZGlyZWN0IHRocm91Z2ggdGhlIHBvaW50ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLWVwPC9jb2RlPjxkdD48Y29kZT4tbWVwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGVwLTIyNTciPjwvYT48YSBuYW1lPSJpbmRleC1tZXAtMjI1OCI+PC9hPkRvIG5vdCBvcHRpbWl6ZSAoZG8gb3B0aW1pemUpIGJhc2ljIGJsb2NrcyB0aGF0IHVzZSB0aGUgc2FtZSBpbmRleAorcG9pbnRlciA0IG9yIG1vcmUgdGltZXMgdG8gY29weSBwb2ludGVyIGludG8gdGhlIDxjb2RlPmVwPC9jb2RlPiByZWdpc3RlciwgYW5kCit1c2UgdGhlIHNob3J0ZXIgPGNvZGU+c2xkPC9jb2RlPiBhbmQgPGNvZGU+c3N0PC9jb2RlPiBpbnN0cnVjdGlvbnMuICBUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1lcDwvc3Bhbj48L3NhbXA+CitvcHRpb24gaXMgb24gYnkgZGVmYXVsdCBpZiB5b3Ugb3B0aW1pemUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbW5vLXByb2xvZy1mdW5jdGlvbjwvY29kZT48ZHQ+PGNvZGU+LW1wcm9sb2ctZnVuY3Rpb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkcHJvbG9nXzAwMmRmdW5jdGlvbi0yMjU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbXByb2xvZ18wMDJkZnVuY3Rpb24tMjI2MCI+PC9hPkRvIG5vdCB1c2UgKGRvIHVzZSkgZXh0ZXJuYWwgZnVuY3Rpb25zIHRvIHNhdmUgYW5kIHJlc3RvcmUgcmVnaXN0ZXJzCithdCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIG9mIGEgZnVuY3Rpb24uICBUaGUgZXh0ZXJuYWwgZnVuY3Rpb25zCithcmUgc2xvd2VyLCBidXQgdXNlIGxlc3MgY29kZSBzcGFjZSBpZiBtb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHNhdmVzCit0aGUgc2FtZSBudW1iZXIgb2YgcmVnaXN0ZXJzLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcHJvbG9nLWZ1bmN0aW9uPC9zcGFuPjwvc2FtcD4gb3B0aW9uCitpcyBvbiBieSBkZWZhdWx0IGlmIHlvdSBvcHRpbWl6ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc3BhY2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zcGFjZS0yMjYxIj48L2E+VHJ5IHRvIG1ha2UgdGhlIGNvZGUgYXMgc21hbGwgYXMgcG9zc2libGUuICBBdCBwcmVzZW50LCB0aGlzIGp1c3QgdHVybnMKK29uIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWVwPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcHJvbG9nLWZ1bmN0aW9uPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdGRhPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRkYS0yMjYyIj48L2E+UHV0IHN0YXRpYyBvciBnbG9iYWwgdmFyaWFibGVzIHdob3NlIHNpemUgaXMgPHZhcj5uPC92YXI+IGJ5dGVzIG9yIGxlc3MgaW50bwordGhlIHRpbnkgZGF0YSBhcmVhIHRoYXQgcmVnaXN0ZXIgPGNvZGU+ZXA8L2NvZGU+IHBvaW50cyB0by4gIFRoZSB0aW55IGRhdGEKK2FyZWEgY2FuIGhvbGQgdXAgdG8gMjU2IGJ5dGVzIGluIHRvdGFsICgxMjggYnl0ZXMgZm9yIGJ5dGUgcmVmZXJlbmNlcykuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNkYT08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1zZGEtMjI2MyI+PC9hPlB1dCBzdGF0aWMgb3IgZ2xvYmFsIHZhcmlhYmxlcyB3aG9zZSBzaXplIGlzIDx2YXI+bjwvdmFyPiBieXRlcyBvciBsZXNzIGludG8KK3RoZSBzbWFsbCBkYXRhIGFyZWEgdGhhdCByZWdpc3RlciA8Y29kZT5ncDwvY29kZT4gcG9pbnRzIHRvLiAgVGhlIHNtYWxsIGRhdGEKK2FyZWEgY2FuIGhvbGQgdXAgdG8gNjQga2lsb2J5dGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW16ZGE9PC9jb2RlPjx2YXI+bjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1temRhLTIyNjQiPjwvYT5QdXQgc3RhdGljIG9yIGdsb2JhbCB2YXJpYWJsZXMgd2hvc2Ugc2l6ZSBpcyA8dmFyPm48L3Zhcj4gYnl0ZXMgb3IgbGVzcyBpbnRvCit0aGUgZmlyc3QgMzIga2lsb2J5dGVzIG9mIG1lbW9yeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdjg1MDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXY4NTAtMjI2NSI+PC9hPlNwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyB0aGUgVjg1MC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdjg1MGUzdjU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW12ODUwZTN2NS0yMjY2Ij48L2E+U3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRTNWNS4gIFRoZSBwcmVwcm9jZXNzb3IKK2NvbnN0YW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X192ODUwZTN2NV9fPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGRlZmluZWQgaWYgdGhpcyBvcHRpb24gaXMgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdjg1MGUydjQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW12ODUwZTJ2NC0yMjY3Ij48L2E+U3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRTNWNS4gIFRoaXMgaXMgYW4gYWxpYXMgZm9yCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12ODUwZTN2NTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdjg1MGUydjM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW12ODUwZTJ2My0yMjY4Ij48L2E+U3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRTJWMy4gIFRoZSBwcmVwcm9jZXNzb3IKK2NvbnN0YW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X192ODUwZTJ2M19fPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGRlZmluZWQgaWYgdGhpcyBvcHRpb24gaXMgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdjg1MGUyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdjg1MGUyLTIyNjkiPjwvYT5TcGVjaWZ5IHRoYXQgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgdGhlIFY4NTBFMi4gIFRoZSBwcmVwcm9jZXNzb3IKK2NvbnN0YW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X192ODUwZTJfXzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBkZWZpbmVkIGlmIHRoaXMgb3B0aW9uIGlzIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXY4NTBlMTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXY4NTBlMS0yMjcwIj48L2E+U3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRTEuICBUaGUgcHJlcHJvY2Vzc29yCitjb25zdGFudHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX3Y4NTBlMV9fPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fdjg1MGVfXzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgZGVmaW5lZCBpZgordGhpcyBvcHRpb24gaXMgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdjg1MGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdjg1MGVzLTIyNzEiPjwvYT5TcGVjaWZ5IHRoYXQgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgdGhlIFY4NTBFUy4gIFRoaXMgaXMgYW4gYWxpYXMgZm9yCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12ODUwZTE8L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXY4NTBlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdjg1MGUtMjI3MiI+PC9hPlNwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyB0aGUgVjg1MEUuICBUaGUgcHJlcHJvY2Vzc29yCitjb25zdGFudCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fdjg1MGVfXzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBkZWZpbmVkIGlmIHRoaXMgb3B0aW9uIGlzIHVzZWQuCisKKyAgICAgPHA+SWYgbmVpdGhlciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXY4NTA8L3NwYW4+PC9zYW1wPiBub3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12ODUwZTwvc3Bhbj48L3NhbXA+IG5vciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXY4NTBlMTwvc3Bhbj48L3NhbXA+Citub3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12ODUwZTI8L3NwYW4+PC9zYW1wPiBub3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW12ODUwZTJ2Mzwvc3Bhbj48L3NhbXA+IG5vciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXY4NTBlM3Y1PC9zcGFuPjwvc2FtcD4KK2FyZSBkZWZpbmVkIHRoZW4gYSBkZWZhdWx0IHRhcmdldCBwcm9jZXNzb3IgaXMgY2hvc2VuIGFuZCB0aGUKK3JlbGV2YW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X192ODUwKl9fPC9zcGFuPjwvc2FtcD4mcnNxdW87IHByZXByb2Nlc3NvciBjb25zdGFudCBpcyBkZWZpbmVkLgorCisgICAgIDxwPlRoZSBwcmVwcm9jZXNzb3IgY29uc3RhbnRzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X192ODUwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fdjg1MV9fPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBhbHdheXMKK2RlZmluZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggcHJvY2Vzc29yIHZhcmlhbnQgaXMgdGhlIHRhcmdldC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZGlzYWJsZS1jYWxsdDwvY29kZT48ZHQ+PGNvZGU+LW1uby1kaXNhYmxlLWNhbGx0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZGlzYWJsZV8wMDJkY2FsbHQtMjI3MyI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZGlzYWJsZV8wMDJkY2FsbHQtMjI3NCI+PC9hPlRoaXMgb3B0aW9uIHN1cHByZXNzZXMgZ2VuZXJhdGlvbiBvZiB0aGUgPGNvZGU+Q0FMTFQ8L2NvZGU+IGluc3RydWN0aW9uIGZvciB0aGUKK3Y4NTBlLCB2ODUwZTEsIHY4NTBlMiwgdjg1MGUydjMgYW5kIHY4NTBlM3Y1IGZsYXZvcnMgb2YgdGhlIHY4NTAKK2FyY2hpdGVjdHVyZS4KKworICAgICA8cD5UaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUgUkg4NTAgQUJJIGlzCitpbiB1c2UgKHNlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJoODUwLWFiaTwvc3Bhbj48L3NhbXA+KSwgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUKK0dDQyBBQkkgaXMgaW4gdXNlLiAgSWYgPGNvZGU+Q0FMTFQ8L2NvZGU+IGluc3RydWN0aW9ucyBhcmUgYmVpbmcgZ2VuZXJhdGVkCit0aGVuIHRoZSBDIHByZXByb2Nlc3NvciBzeW1ib2wgPGNvZGU+X19WODUwX0NBTExUX188L2NvZGU+IHdpbGwgYmUgZGVmaW5lZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmVsYXg8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tcmVsYXg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1yZWxheC0yMjc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRyZWxheC0yMjc2Ij48L2E+UGFzcyBvbiAob3IgZG8gbm90IHBhc3Mgb24pIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlbGF4PC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbgordG8gdGhlIGFzc2VtYmxlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbG9uZy1qdW1wczwvY29kZT48ZHQ+PGNvZGU+LW1uby1sb25nLWp1bXBzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbG9uZ18wMDJkanVtcHMtMjI3NyI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbG9uZ18wMDJkanVtcHMtMjI3OCI+PC9hPkRpc2FibGUgKG9yIHJlLWVuYWJsZSkgdGhlIGdlbmVyYXRpb24gb2YgUEMtcmVsYXRpdmUganVtcCBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNvZnQtZmxvYXQ8L2NvZGU+PGR0Pjxjb2RlPi1taGFyZC1mbG9hdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNvZnRfMDAyZGZsb2F0LTIyNzkiPjwvYT48YSBuYW1lPSJpbmRleC1taGFyZF8wMDJkZmxvYXQtMjI4MCI+PC9hPkRpc2FibGUgKG9yIHJlLWVuYWJsZSkgdGhlIGdlbmVyYXRpb24gb2YgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQKK2luc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgc2lnbmlmaWNhbnQgd2hlbiB0aGUgdGFyZ2V0CithcmNoaXRlY3R1cmUgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5WODUwRTJWMzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciBoaWdoZXIuICBJZiBoYXJkd2FyZSBmbG9hdGluZyBwb2ludAoraW5zdHJ1Y3Rpb25zIGFyZSBiZWluZyBnZW5lcmF0ZWQgdGhlbiB0aGUgQyBwcmVwcm9jZXNzb3Igc3ltYm9sCis8Y29kZT5fX0ZQVV9PS19fPC9jb2RlPiB3aWxsIGJlIGRlZmluZWQsIG90aGVyd2lzZSB0aGUgc3ltYm9sCis8Y29kZT5fX05PX0ZQVV9fPC9jb2RlPiB3aWxsIGJlIGRlZmluZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvb3A8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1sb29wLTIyODEiPjwvYT5FbmFibGVzIHRoZSB1c2Ugb2YgdGhlIGUzdjUgTE9PUCBpbnN0cnVjdGlvbi4gIFRoZSB1c2Ugb2YgdGhpcworaW5zdHJ1Y3Rpb24gaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRoZSBlM3Y1IGFyY2hpdGVjdHVyZSBpcworc2VsZWN0ZWQgYmVjYXVzZSBpdHMgdXNlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmg4NTAtYWJpPC9jb2RlPjxkdD48Y29kZT4tbWdoczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXJoODUwXzAwMmRhYmktMjI4MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1naHMtMjI4MyI+PC9hPkVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFJIODUwIHZlcnNpb24gb2YgdGhlIFY4NTAgQUJJLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuICBXaXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUgQUJJIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6CisKKyAgICAgICAgICA8dWw+Cis8bGk+SW50ZWdlciBzaXplZCBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgYXJlIHJldHVybmVkIHZpYSBhIG1lbW9yeSBwb2ludGVyCityYXRoZXIgdGhhbiBhIHJlZ2lzdGVyLgorCisgICAgICAgICAgPGxpPkxhcmdlIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyAobW9yZSB0aGFuIDggYnl0ZXMgaW4gc2l6ZSkgYXJlIHBhc3NlZCBieQordmFsdWUuCisKKyAgICAgICAgICA8bGk+RnVuY3Rpb25zIGFyZSBhbGlnbmVkIHRvIDE2LWJpdCBib3VuZGFyaWVzLgorCisgICAgICAgICAgPGxpPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbThieXRlLWFsaWduPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBzdXBwb3J0ZWQuCisKKyAgICAgICAgICA8bGk+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZGlzYWJsZS1jYWxsdDwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24gaXMgZW5hYmxlZCBieQorZGVmYXVsdC4gIFRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWRpc2FibGUtY2FsbHQ8L3NwYW4+PC9zYW1wPiBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIG5vdAorc3VwcG9ydGVkLiAKKzwvdWw+CisKKyAgICAgPHA+V2hlbiB0aGlzIHZlcnNpb24gb2YgdGhlIEFCSSBpcyBlbmFibGVkIHRoZSBDIHByZXByb2Nlc3NvciBzeW1ib2wKKzxjb2RlPl9fVjg1MF9SSDg1MF9BQklfXzwvY29kZT4gaXMgZGVmaW5lZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZ2NjLWFiaTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWdjY18wMDJkYWJpLTIyODQiPjwvYT5FbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBvbGQgR0NDIHZlcnNpb24gb2YgdGhlIFY4NTAgQUJJLiAgV2l0aCB0aGlzCit2ZXJzaW9uIG9mIHRoZSBBQkkgdGhlIGZvbGxvd2luZyBydWxlcyBhcHBseToKKworICAgICAgICAgIDx1bD4KKzxsaT5JbnRlZ2VyIHNpemVkIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBhcmUgcmV0dXJuZWQgaW4gcmVnaXN0ZXIgPGNvZGU+cjEwPC9jb2RlPi4KKworICAgICAgICAgIDxsaT5MYXJnZSBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgKG1vcmUgdGhhbiA4IGJ5dGVzIGluIHNpemUpIGFyZSBwYXNzZWQgYnkKK3JlZmVyZW5jZS4KKworICAgICAgICAgIDxsaT5GdW5jdGlvbnMgYXJlIGFsaWduZWQgdG8gMzItYml0IGJvdW5kYXJpZXMsIHVubGVzcyBvcHRpbWl6aW5nIGZvcgorc2l6ZS4KKworICAgICAgICAgIDxsaT5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW04Ynl0ZS1hbGlnbjwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24gaXMgbm90IHN1cHBvcnRlZC4KKworICAgICAgICAgIDxsaT5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1kaXNhYmxlLWNhbGx0PC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBzdXBwb3J0ZWQgYnV0IG5vdAorZW5hYmxlZCBieSBkZWZhdWx0LiAKKzwvdWw+CisKKyAgICAgPHA+V2hlbiB0aGlzIHZlcnNpb24gb2YgdGhlIEFCSSBpcyBlbmFibGVkIHRoZSBDIHByZXByb2Nlc3NvciBzeW1ib2wKKzxjb2RlPl9fVjg1MF9HQ0NfQUJJX188L2NvZGU+IGlzIGRlZmluZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbThieXRlLWFsaWduPC9jb2RlPjxkdD48Y29kZT4tbW5vLThieXRlLWFsaWduPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tOGJ5dGVfMDAyZGFsaWduLTIyODUiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZDhieXRlXzAwMmRhbGlnbi0yMjg2Ij48L2E+RW5hYmxlcyBzdXBwb3J0IGZvciA8Y29kZT5kb3VibGVzPC9jb2RlPiBhbmQgPGNvZGU+bG9uZyBsb25nPC9jb2RlPiB0eXBlcyB0byBiZQorYWxpZ25lZCBvbiA4LWJ5dGUgYm91bmRhcmllcy4gIFRoZSBkZWZhdWx0IGlzIHRvIHJlc3RyaWN0IHRoZQorYWxpZ25tZW50IG9mIGFsbCBvYmplY3RzIHRvIGF0IG1vc3QgNC1ieXRlcy4gIFdoZW4KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tOGJ5dGUtYWxpZ248L3NwYW4+PC9zYW1wPiBpcyBpbiBlZmZlY3QgdGhlIEMgcHJlcHJvY2Vzc29yIHN5bWJvbAorPGNvZGU+X19WODUwXzhCWVRFX0FMSUdOX188L2NvZGU+IHdpbGwgYmUgZGVmaW5lZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYmlnLXN3aXRjaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWJpZ18wMDJkc3dpdGNoLTIyODciPjwvYT5HZW5lcmF0ZSBjb2RlIHN1aXRhYmxlIGZvciBiaWcgc3dpdGNoIHRhYmxlcy4gIFVzZSB0aGlzIG9wdGlvbiBvbmx5IGlmCit0aGUgYXNzZW1ibGVyL2xpbmtlciBjb21wbGFpbiBhYm91dCBvdXQgb2YgcmFuZ2UgYnJhbmNoZXMgd2l0aGluIGEgc3dpdGNoCit0YWJsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYXBwLXJlZ3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1hcHBfMDAyZHJlZ3MtMjI4OCI+PC9hPlRoaXMgb3B0aW9uIGNhdXNlcyByMiBhbmQgcjUgdG8gYmUgdXNlZCBpbiB0aGUgY29kZSBnZW5lcmF0ZWQgYnkKK3RoZSBjb21waWxlci4gIFRoaXMgc2V0dGluZyBpcyB0aGUgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tYXBwLXJlZ3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYXBwXzAwMmRyZWdzLTIyODkiPjwvYT5UaGlzIG9wdGlvbiBjYXVzZXMgcjIgYW5kIHI1IHRvIGJlIHRyZWF0ZWQgYXMgZml4ZWQgcmVnaXN0ZXJzLgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVkFYLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVkFYLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmNjMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9WQVgtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNzIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZBWCBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyIgdGl0bGU9IlY4NTAgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZNUy1PcHRpb25zLmh0bWwjVk1TLU9wdGlvbnMiIHRpdGxlPSJWTVMgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWQVgtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWTVMtT3B0aW9ucy5odG1sI1ZNUy1PcHRpb25zIj5WTVMgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlY4NTAtT3B0aW9ucy5odG1sI1Y4NTAtT3B0aW9ucyI+Vjg1MCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjQ2IFZBWCBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtVkFYLW9wdGlvbnMtMjI5MCI+PC9hPgorVGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgVkFYOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbXVuaXg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW11bml4LTIyOTEiPjwvYT5EbyBub3Qgb3V0cHV0IGNlcnRhaW4ganVtcCBpbnN0cnVjdGlvbnMgKDxjb2RlPmFvYmxlcTwvY29kZT4gYW5kIHNvIG9uKQordGhhdCB0aGUgVW5peCBhc3NlbWJsZXIgZm9yIHRoZSBWQVggY2Fubm90IGhhbmRsZSBhY3Jvc3MgbG9uZworcmFuZ2VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1nbnU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1nbnUtMjI5MiI+PC9hPkRvIG91dHB1dCB0aG9zZSBqdW1wIGluc3RydWN0aW9ucywgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUKK0dOVSBhc3NlbWJsZXIgaXMgYmVpbmcgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWctMjI5MyI+PC9hPk91dHB1dCBjb2RlIGZvciBHLWZvcm1hdCBmbG9hdGluZy1wb2ludCBudW1iZXJzIGluc3RlYWQgb2YgRC1mb3JtYXQuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVk1TLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVk1TLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDk5ODk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9WTVMtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZNUyBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZBWC1PcHRpb25zLmh0bWwjVkFYLU9wdGlvbnMiIHRpdGxlPSJWQVggT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZ4V29ya3MtT3B0aW9ucy5odG1sI1Z4V29ya3MtT3B0aW9ucyIgdGl0bGU9IlZ4V29ya3MgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWTVMtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWeFdvcmtzLU9wdGlvbnMuaHRtbCNWeFdvcmtzLU9wdGlvbnMiPlZ4V29ya3MgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZBWC1PcHRpb25zLmh0bWwjVkFYLU9wdGlvbnMiPlZBWCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjQ3IFZNUyBPcHRpb25zPC9oND4KKworPHA+VGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgVk1TIGltcGxlbWVudGF0aW9uczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW12bXMtcmV0dXJuLWNvZGVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdm1zXzAwMmRyZXR1cm5fMDAyZGNvZGVzLTIyOTQiPjwvYT5SZXR1cm4gVk1TIGNvbmRpdGlvbiBjb2RlcyBmcm9tIDxjb2RlPm1haW48L2NvZGU+LiBUaGUgZGVmYXVsdCBpcyB0byByZXR1cm4gUE9TSVgtc3R5bGUKK2NvbmRpdGlvbiAoZS5nLiBlcnJvcikgY29kZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWRlYnVnLW1haW49PC9jb2RlPjx2YXI+cHJlZml4PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1kZWJ1Z18wMDJkbWFpbl8wMDNkXzAwNDB2YXJfMDA3YnByZWZpeF8wMDdkLTIyOTUiPjwvYT5GbGFnIHRoZSBmaXJzdCByb3V0aW5lIHdob3NlIG5hbWUgc3RhcnRzIHdpdGggPHZhcj5wcmVmaXg8L3Zhcj4gYXMgdGhlIG1haW4KK3JvdXRpbmUgZm9yIHRoZSBkZWJ1Z2dlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbWFsbG9jNjQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tYWxsb2M2NC0yMjk2Ij48L2E+RGVmYXVsdCB0byA2NC1iaXQgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBvaW50ZXItc2l6ZT08L2NvZGU+PHZhcj5zaXplPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbXBvaW50ZXJfMDAyZHNpemVfMDAzZF8wMDQwdmFyXzAwN2JzaXplXzAwN2QtMjI5NyI+PC9hPlNldCB0aGUgZGVmYXVsdCBzaXplIG9mIHBvaW50ZXJzLiBQb3NzaWJsZSBvcHRpb25zIGZvciA8dmFyPnNpemU8L3Zhcj4gYXJlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjMyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2hvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIDMyIGJpdCBwb2ludGVycywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj42NDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2ZvciA2NCBiaXQgcG9pbnRlcnMsIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBzdXBwb3J0aW5nIG9ubHkgMzIgYml0IHBvaW50ZXJzLiAKK1RoZSBsYXRlciBvcHRpb24gZGlzYWJsZXMgPGNvZGU+cHJhZ21hIHBvaW50ZXJfc2l6ZTwvY29kZT4uIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVmFndWUtTGlua2FnZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9WYWd1ZS1MaW5rYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4NTdjNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVmFndWUtTGlua2FnZS5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WYWd1ZSBMaW5rYWdlIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNfMDAyYl8wMDJiLUV4dGVuc2lvbnMuaHRtbCNDXzAwMmJfMDAyYi1FeHRlbnNpb25zIiB0aXRsZT0iQysrIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSZXN0cmljdGVkLVBvaW50ZXJzLmh0bWwjUmVzdHJpY3RlZC1Qb2ludGVycyIgdGl0bGU9IlJlc3RyaWN0ZWQgUG9pbnRlcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDXzAwMmJfMDAyYi1JbnRlcmZhY2UuaHRtbCNDXzAwMmJfMDAyYi1JbnRlcmZhY2UiIHRpdGxlPSJDKysgSW50ZXJmYWNlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlZhZ3VlLUxpbmthZ2UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5DKysgSW50ZXJmYWNlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUmVzdHJpY3RlZC1Qb2ludGVycy5odG1sI1Jlc3RyaWN0ZWQtUG9pbnRlcnMiPlJlc3RyaWN0ZWQgUG9pbnRlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjMgVmFndWUgTGlua2FnZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXZhZ3VlLWxpbmthZ2UtMzUwMSI+PC9hPgorVGhlcmUgYXJlIHNldmVyYWwgY29uc3RydWN0cyBpbiBDKysgdGhhdCByZXF1aXJlIHNwYWNlIGluIHRoZSBvYmplY3QKK2ZpbGUgYnV0IGFyZSBub3QgY2xlYXJseSB0aWVkIHRvIGEgc2luZ2xlIHRyYW5zbGF0aW9uIHVuaXQuICBXZSBzYXkgdGhhdAordGhlc2UgY29uc3RydWN0cyBoYXZlICZsZHF1bzt2YWd1ZSBsaW5rYWdlJnJkcXVvOy4gIFR5cGljYWxseSBzdWNoIGNvbnN0cnVjdHMgYXJlCitlbWl0dGVkIHdoZXJldmVyIHRoZXkgYXJlIG5lZWRlZCwgdGhvdWdoIHNvbWV0aW1lcyB3ZSBjYW4gYmUgbW9yZQorY2xldmVyLgorCisgICAgIDxkbD4KKzxkdD5JbmxpbmUgRnVuY3Rpb25zPGRkPklubGluZSBmdW5jdGlvbnMgYXJlIHR5cGljYWxseSBkZWZpbmVkIGluIGEgaGVhZGVyIGZpbGUgd2hpY2ggY2FuIGJlCitpbmNsdWRlZCBpbiBtYW55IGRpZmZlcmVudCBjb21waWxhdGlvbnMuICBIb3BlZnVsbHkgdGhleSBjYW4gdXN1YWxseSBiZQoraW5saW5lZCwgYnV0IHNvbWV0aW1lcyBhbiBvdXQtb2YtbGluZSBjb3B5IGlzIG5lY2Vzc2FyeSwgaWYgdGhlIGFkZHJlc3MKK29mIHRoZSBmdW5jdGlvbiBpcyB0YWtlbiBvciBpZiBpbmxpbmluZyBmYWlscy4gIEluIGdlbmVyYWwsIHdlIGVtaXQgYW4KK291dC1vZi1saW5lIGNvcHkgaW4gYWxsIHRyYW5zbGF0aW9uIHVuaXRzIHdoZXJlIG9uZSBpcyBuZWVkZWQuICBBcyBhbgorZXhjZXB0aW9uLCB3ZSBvbmx5IGVtaXQgaW5saW5lIHZpcnR1YWwgZnVuY3Rpb25zIHdpdGggdGhlIHZ0YWJsZSwgc2luY2UKK2l0IGFsd2F5cyByZXF1aXJlcyBhIGNvcHkuCisKKyAgICAgPHA+TG9jYWwgc3RhdGljIHZhcmlhYmxlcyBhbmQgc3RyaW5nIGNvbnN0YW50cyB1c2VkIGluIGFuIGlubGluZSBmdW5jdGlvbgorYXJlIGFsc28gY29uc2lkZXJlZCB0byBoYXZlIHZhZ3VlIGxpbmthZ2UsIHNpbmNlIHRoZXkgbXVzdCBiZSBzaGFyZWQKK2JldHdlZW4gYWxsIGlubGluZWQgYW5kIG91dC1vZi1saW5lIGluc3RhbmNlcyBvZiB0aGUgZnVuY3Rpb24uCisKKyAgICAgPGJyPjxkdD5WVGFibGVzPGRkPjxhIG5hbWU9ImluZGV4LXZ0YWJsZS0zNTAyIj48L2E+QysrIHZpcnR1YWwgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiBtb3N0IGNvbXBpbGVycyB1c2luZyBhIGxvb2t1cAordGFibGUsIGtub3duIGFzIGEgdnRhYmxlLiAgVGhlIHZ0YWJsZSBjb250YWlucyBwb2ludGVycyB0byB0aGUgdmlydHVhbAorZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IGEgY2xhc3MsIGFuZCBlYWNoIG9iamVjdCBvZiB0aGUgY2xhc3MgY29udGFpbnMgYQorcG9pbnRlciB0byBpdHMgdnRhYmxlIChvciB2dGFibGVzLCBpbiBzb21lIG11bHRpcGxlLWluaGVyaXRhbmNlCitzaXR1YXRpb25zKS4gIElmIHRoZSBjbGFzcyBkZWNsYXJlcyBhbnkgbm9uLWlubGluZSwgbm9uLXB1cmUgdmlydHVhbAorZnVuY3Rpb25zLCB0aGUgZmlyc3Qgb25lIGlzIGNob3NlbiBhcyB0aGUgJmxkcXVvO2tleSBtZXRob2QmcmRxdW87IGZvciB0aGUgY2xhc3MsCithbmQgdGhlIHZ0YWJsZSBpcyBvbmx5IGVtaXR0ZWQgaW4gdGhlIHRyYW5zbGF0aW9uIHVuaXQgd2hlcmUgdGhlIGtleQorbWV0aG9kIGlzIGRlZmluZWQuCisKKyAgICAgPHA+PGVtPk5vdGU6PC9lbT4gSWYgdGhlIGNob3NlbiBrZXkgbWV0aG9kIGlzIGxhdGVyIGRlZmluZWQgYXMgaW5saW5lLCB0aGUKK3Z0YWJsZSBpcyBzdGlsbCBlbWl0dGVkIGluIGV2ZXJ5IHRyYW5zbGF0aW9uIHVuaXQgdGhhdCBkZWZpbmVzIGl0LiAKK01ha2Ugc3VyZSB0aGF0IGFueSBpbmxpbmUgdmlydHVhbHMgYXJlIGRlY2xhcmVkIGlubGluZSBpbiB0aGUgY2xhc3MKK2JvZHksIGV2ZW4gaWYgdGhleSBhcmUgbm90IGRlZmluZWQgdGhlcmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT50eXBlX2luZm88L2NvZGU+IG9iamVjdHM8ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0eXBlXzAwNWZpbmZvXzAwN2QtMzUwMyI+PC9hPjxhIG5hbWU9ImluZGV4LVJUVEktMzUwNCI+PC9hPkMrKyByZXF1aXJlcyBpbmZvcm1hdGlvbiBhYm91dCB0eXBlcyB0byBiZSB3cml0dGVuIG91dCBpbiBvcmRlciB0bworaW1wbGVtZW50ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZHluYW1pY19jYXN0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnR5cGVpZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLiAKK0ZvciBwb2x5bW9ycGhpYyBjbGFzc2VzIChjbGFzc2VzIHdpdGggdmlydHVhbCBmdW5jdGlvbnMpLCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50eXBlX2luZm88L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29iamVjdCBpcyB3cml0dGVuIG91dCBhbG9uZyB3aXRoIHRoZSB2dGFibGUgc28gdGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmR5bmFtaWNfY2FzdDwvc3Bhbj48L3NhbXA+JnJzcXVvOworY2FuIGRldGVybWluZSB0aGUgZHluYW1pYyB0eXBlIG9mIGEgY2xhc3Mgb2JqZWN0IGF0IHJ1biB0aW1lLiAgRm9yIGFsbAorb3RoZXIgdHlwZXMsIHdlIHdyaXRlIG91dCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50eXBlX2luZm88L3NwYW4+PC9zYW1wPiZyc3F1bzsgb2JqZWN0IHdoZW4gaXQgaXMgdXNlZDogd2hlbgorYXBwbHlpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50eXBlaWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gYW4gZXhwcmVzc2lvbiwgdGhyb3dpbmcgYW4gb2JqZWN0LCBvcgorcmVmZXJyaW5nIHRvIGEgdHlwZSBpbiBhIGNhdGNoIGNsYXVzZSBvciBleGNlcHRpb24gc3BlY2lmaWNhdGlvbi4KKworICAgICA8YnI+PGR0PlRlbXBsYXRlIEluc3RhbnRpYXRpb25zPGRkPk1vc3QgZXZlcnl0aGluZyBpbiB0aGlzIHNlY3Rpb24gYWxzbyBhcHBsaWVzIHRvIHRlbXBsYXRlIGluc3RhbnRpYXRpb25zLAorYnV0IHRoZXJlIGFyZSBvdGhlciBvcHRpb25zIGFzIHdlbGwuIAorU2VlIDxhIGhyZWY9IlRlbXBsYXRlLUluc3RhbnRpYXRpb24uaHRtbCNUZW1wbGF0ZS1JbnN0YW50aWF0aW9uIj5XaGVyZSdzIHRoZSBUZW1wbGF0ZT88L2E+LgorCisgPC9kbD4KKworIDxwPldoZW4gdXNlZCB3aXRoIEdOVSBsZCB2ZXJzaW9uIDIuOCBvciBsYXRlciBvbiBhbiBFTEYgc3lzdGVtIHN1Y2ggYXMKK0dOVS9MaW51eCBvciBTb2xhcmlzIDIsIG9yIG9uIE1pY3Jvc29mdCBXaW5kb3dzLCBkdXBsaWNhdGUgY29waWVzIG9mCit0aGVzZSBjb25zdHJ1Y3RzIHdpbGwgYmUgZGlzY2FyZGVkIGF0IGxpbmsgdGltZS4gIFRoaXMgaXMga25vd24gYXMKK0NPTURBVCBzdXBwb3J0LgorCisgPHA+T24gdGFyZ2V0cyB0aGF0IGRvbid0IHN1cHBvcnQgQ09NREFULCBidXQgZG8gc3VwcG9ydCB3ZWFrIHN5bWJvbHMsIEdDQwordXNlcyB0aGVtLiAgVGhpcyB3YXkgb25lIGNvcHkgb3ZlcnJpZGVzIGFsbCB0aGUgb3RoZXJzLCBidXQKK3RoZSB1bnVzZWQgY29waWVzIHN0aWxsIHRha2UgdXAgc3BhY2UgaW4gdGhlIGV4ZWN1dGFibGUuCisKKyA8cD5Gb3IgdGFyZ2V0cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGVpdGhlciBDT01EQVQgb3Igd2VhayBzeW1ib2xzLAorbW9zdCBlbnRpdGllcyB3aXRoIHZhZ3VlIGxpbmthZ2UgYXJlIGVtaXR0ZWQgYXMgbG9jYWwgc3ltYm9scyB0bworYXZvaWQgZHVwbGljYXRlIGRlZmluaXRpb24gZXJyb3JzIGZyb20gdGhlIGxpbmtlci4gIFRoaXMgZG9lcyBub3QgaGFwcGVuCitmb3IgbG9jYWwgc3RhdGljcyBpbiBpbmxpbmVzLCBob3dldmVyLCBhcyBoYXZpbmcgbXVsdGlwbGUgY29waWVzCithbG1vc3QgY2VydGFpbmx5IGJyZWFrcyB0aGluZ3MuCisKKyA8cD5TZWUgPGEgaHJlZj0iQ18wMDJiXzAwMmItSW50ZXJmYWNlLmh0bWwjQ18wMDJiXzAwMmItSW50ZXJmYWNlIj5EZWNsYXJhdGlvbnMgYW5kIERlZmluaXRpb25zIGluIE9uZSBIZWFkZXI8L2E+LCBmb3IKK2Fub3RoZXIgd2F5IHRvIGNvbnRyb2wgcGxhY2VtZW50IG9mIHRoZXNlIGNvbnN0cnVjdHMuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVmFyaWFibGUtQXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMzFiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbApAQCAtMCwwICsxLDYxMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VmFyaWFibGUgQXR0cmlidXRlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDaGFyYWN0ZXItRXNjYXBlcy5odG1sI0NoYXJhY3Rlci1Fc2NhcGVzIiB0aXRsZT0iQ2hhcmFjdGVyIEVzY2FwZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiIHRpdGxlPSJUeXBlIEF0dHJpYnV0ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVmFyaWFibGUtQXR0cmlidXRlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPlR5cGUgQXR0cmlidXRlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNoYXJhY3Rlci1Fc2NhcGVzLmh0bWwjQ2hhcmFjdGVyLUVzY2FwZXMiPkNoYXJhY3RlciBFc2NhcGVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjM2IFNwZWNpZnlpbmcgQXR0cmlidXRlcyBvZiBWYXJpYWJsZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hdHRyaWJ1dGUtb2YtdmFyaWFibGVzLTI3NTUiPjwvYT48YSBuYW1lPSJpbmRleC12YXJpYWJsZS1hdHRyaWJ1dGVzLTI3NTYiPjwvYT4KK1RoZSBrZXl3b3JkIDxjb2RlPl9fYXR0cmlidXRlX188L2NvZGU+IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBzcGVjaWFsCithdHRyaWJ1dGVzIG9mIHZhcmlhYmxlcyBvciBzdHJ1Y3R1cmUgZmllbGRzLiAgVGhpcyBrZXl3b3JkIGlzIGZvbGxvd2VkCitieSBhbiBhdHRyaWJ1dGUgc3BlY2lmaWNhdGlvbiBpbnNpZGUgZG91YmxlIHBhcmVudGhlc2VzLiAgU29tZQorYXR0cmlidXRlcyBhcmUgY3VycmVudGx5IGRlZmluZWQgZ2VuZXJpY2FsbHkgZm9yIHZhcmlhYmxlcy4gCitPdGhlciBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIGZvciB2YXJpYWJsZXMgb24gcGFydGljdWxhciB0YXJnZXQKK3N5c3RlbXMuICBPdGhlciBhdHRyaWJ1dGVzIGFyZSBhdmFpbGFibGUgZm9yIGZ1bmN0aW9ucworKHNlZSA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4pIGFuZCBmb3IgdHlwZXMgKHNlZSA8YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPlR5cGUgQXR0cmlidXRlczwvYT4pLiAKK090aGVyIGZyb250IGVuZHMgbWlnaHQgZGVmaW5lIG1vcmUgYXR0cmlidXRlcworKHNlZSA8YSBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+RXh0ZW5zaW9ucyB0byB0aGUgQysrIExhbmd1YWdlPC9hPikuCisKKyA8cD5Zb3UgbWF5IGFsc28gc3BlY2lmeSBhdHRyaWJ1dGVzIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fXzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmVjZWRpbmcgYW5kIGZvbGxvd2luZworZWFjaCBrZXl3b3JkLiAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGVtIGluIGhlYWRlciBmaWxlcyB3aXRob3V0CitiZWluZyBjb25jZXJuZWQgYWJvdXQgYSBwb3NzaWJsZSBtYWNybyBvZiB0aGUgc2FtZSBuYW1lLiAgRm9yIGV4YW1wbGUsCit5b3UgbWF5IHVzZSA8Y29kZT5fX2FsaWduZWRfXzwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT5hbGlnbmVkPC9jb2RlPi4KKworIDxwPlNlZSA8YSBocmVmPSJBdHRyaWJ1dGUtU3ludGF4Lmh0bWwjQXR0cmlidXRlLVN5bnRheCI+QXR0cmlidXRlIFN5bnRheDwvYT4sIGZvciBkZXRhaWxzIG9mIHRoZSBleGFjdCBzeW50YXggZm9yIHVzaW5nCithdHRyaWJ1dGVzLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JhbGlnbmVkXzAwN2QtYXR0cmlidXRlLTI3NTciPjwvYT4KKzxkbD48ZHQ+PGNvZGU+YWxpZ25lZCAoPC9jb2RlPjx2YXI+YWxpZ25tZW50PC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+VGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGEgbWluaW11bSBhbGlnbm1lbnQgZm9yIHRoZSB2YXJpYWJsZSBvcgorc3RydWN0dXJlIGZpZWxkLCBtZWFzdXJlZCBpbiBieXRlcy4gIEZvciBleGFtcGxlLCB0aGUgZGVjbGFyYXRpb246CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IHggX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpID0gMDsKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmNhdXNlcyB0aGUgY29tcGlsZXIgdG8gYWxsb2NhdGUgdGhlIGdsb2JhbCB2YXJpYWJsZSA8Y29kZT54PC9jb2RlPiBvbiBhCisxNi1ieXRlIGJvdW5kYXJ5LiAgT24gYSA2ODA0MCwgdGhpcyBjb3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKK2FuIDxjb2RlPmFzbTwvY29kZT4gZXhwcmVzc2lvbiB0byBhY2Nlc3MgdGhlIDxjb2RlPm1vdmUxNjwvY29kZT4gaW5zdHJ1Y3Rpb24gd2hpY2gKK3JlcXVpcmVzIDE2LWJ5dGUgYWxpZ25lZCBvcGVyYW5kcy4KKworICAgICA8cD5Zb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgYWxpZ25tZW50IG9mIHN0cnVjdHVyZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdG8KK2NyZWF0ZSBhIGRvdWJsZS13b3JkIGFsaWduZWQgPGNvZGU+aW50PC9jb2RlPiBwYWlyLCB5b3UgY291bGQgd3JpdGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IGZvbyB7IGludCB4WzJdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOyB9OworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byBjcmVhdGluZyBhIHVuaW9uIHdpdGggYSA8Y29kZT5kb3VibGU8L2NvZGU+IG1lbWJlciwKK3doaWNoIGZvcmNlcyB0aGUgdW5pb24gdG8gYmUgZG91YmxlLXdvcmQgYWxpZ25lZC4KKworICAgICA8cD5BcyBpbiB0aGUgcHJlY2VkaW5nIGV4YW1wbGVzLCB5b3UgY2FuIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgYWxpZ25tZW50CisoaW4gYnl0ZXMpIHRoYXQgeW91IHdpc2ggdGhlIGNvbXBpbGVyIHRvIHVzZSBmb3IgYSBnaXZlbiB2YXJpYWJsZSBvcgorc3RydWN0dXJlIGZpZWxkLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBsZWF2ZSBvdXQgdGhlIGFsaWdubWVudCBmYWN0b3IKK2FuZCBqdXN0IGFzayB0aGUgY29tcGlsZXIgdG8gYWxpZ24gYSB2YXJpYWJsZSBvciBmaWVsZCB0byB0aGUKK2RlZmF1bHQgYWxpZ25tZW50IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSB5b3UgYXJlIGNvbXBpbGluZyBmb3IuIAorVGhlIGRlZmF1bHQgYWxpZ25tZW50IGlzIHN1ZmZpY2llbnQgZm9yIGFsbCBzY2FsYXIgdHlwZXMsIGJ1dCBtYXkgbm90IGJlCitlbm91Z2ggZm9yIGFsbCB2ZWN0b3IgdHlwZXMgb24gYSB0YXJnZXQgdGhhdCBzdXBwb3J0cyB2ZWN0b3Igb3BlcmF0aW9ucy4gCitUaGUgZGVmYXVsdCBhbGlnbm1lbnQgaXMgZml4ZWQgZm9yIGEgcGFydGljdWxhciB0YXJnZXQgQUJJLgorCisgICAgIDxwPkdDQyBhbHNvIHByb3ZpZGVzIGEgdGFyZ2V0IHNwZWNpZmljIG1hY3JvIDxjb2RlPl9fQklHR0VTVF9BTElHTk1FTlRfXzwvY29kZT4sCit3aGljaCBpcyB0aGUgbGFyZ2VzdCBhbGlnbm1lbnQgZXZlciB1c2VkIGZvciBhbnkgZGF0YSB0eXBlIG9uIHRoZQordGFyZ2V0IG1hY2hpbmUgeW91IGFyZSBjb21waWxpbmcgZm9yLiAgRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBzaG9ydCBhcnJheVszXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoX19CSUdHRVNUX0FMSUdOTUVOVF9fKSkpOworPC9wcmU+CisgICAgIDxwPlRoZSBjb21waWxlciBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIGFsaWdubWVudCBmb3IgdGhlIGRlY2xhcmVkCit2YXJpYWJsZSBvciBmaWVsZCB0byA8Y29kZT5fX0JJR0dFU1RfQUxJR05NRU5UX188L2NvZGU+LiAgRG9pbmcgdGhpcyBjYW4KK29mdGVuIG1ha2UgY29weSBvcGVyYXRpb25zIG1vcmUgZWZmaWNpZW50LCBiZWNhdXNlIHRoZSBjb21waWxlciBjYW4KK3VzZSB3aGF0ZXZlciBpbnN0cnVjdGlvbnMgY29weSB0aGUgYmlnZ2VzdCBjaHVua3Mgb2YgbWVtb3J5IHdoZW4KK3BlcmZvcm1pbmcgY29waWVzIHRvIG9yIGZyb20gdGhlIHZhcmlhYmxlcyBvciBmaWVsZHMgdGhhdCB5b3UgaGF2ZQorYWxpZ25lZCB0aGlzIHdheS4gIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YgPGNvZGU+X19CSUdHRVNUX0FMSUdOTUVOVF9fPC9jb2RlPgorbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gY29tbWFuZC1saW5lIG9wdGlvbnMuCisKKyAgICAgPHA+V2hlbiB1c2VkIG9uIGEgc3RydWN0LCBvciBzdHJ1Y3QgbWVtYmVyLCB0aGUgPGNvZGU+YWxpZ25lZDwvY29kZT4gYXR0cmlidXRlIGNhbgorb25seSBpbmNyZWFzZSB0aGUgYWxpZ25tZW50OyBpbiBvcmRlciB0byBkZWNyZWFzZSBpdCwgdGhlIDxjb2RlPnBhY2tlZDwvY29kZT4KK2F0dHJpYnV0ZSBtdXN0IGJlIHNwZWNpZmllZCBhcyB3ZWxsLiAgV2hlbiB1c2VkIGFzIHBhcnQgb2YgYSB0eXBlZGVmLCB0aGUKKzxjb2RlPmFsaWduZWQ8L2NvZGU+IGF0dHJpYnV0ZSBjYW4gYm90aCBpbmNyZWFzZSBhbmQgZGVjcmVhc2UgYWxpZ25tZW50LCBhbmQKK3NwZWNpZnlpbmcgdGhlIDxjb2RlPnBhY2tlZDwvY29kZT4gYXR0cmlidXRlIGdlbmVyYXRlcyBhIHdhcm5pbmcuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSBlZmZlY3RpdmVuZXNzIG9mIDxjb2RlPmFsaWduZWQ8L2NvZGU+IGF0dHJpYnV0ZXMgbWF5IGJlIGxpbWl0ZWQKK2J5IGluaGVyZW50IGxpbWl0YXRpb25zIGluIHlvdXIgbGlua2VyLiAgT24gbWFueSBzeXN0ZW1zLCB0aGUgbGlua2VyIGlzCitvbmx5IGFibGUgdG8gYXJyYW5nZSBmb3IgdmFyaWFibGVzIHRvIGJlIGFsaWduZWQgdXAgdG8gYSBjZXJ0YWluIG1heGltdW0KK2FsaWdubWVudC4gIChGb3Igc29tZSBsaW5rZXJzLCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYWxpZ25tZW50IG1heQorYmUgdmVyeSB2ZXJ5IHNtYWxsLikgIElmIHlvdXIgbGlua2VyIGlzIG9ubHkgYWJsZSB0byBhbGlnbiB2YXJpYWJsZXMKK3VwIHRvIGEgbWF4aW11bSBvZiA4LWJ5dGUgYWxpZ25tZW50LCB0aGVuIHNwZWNpZnlpbmcgPGNvZGU+YWxpZ25lZCgxNik8L2NvZGU+CitpbiBhbiA8Y29kZT5fX2F0dHJpYnV0ZV9fPC9jb2RlPiBzdGlsbCBvbmx5IHByb3ZpZGVzIHlvdSB3aXRoIDgtYnl0ZQorYWxpZ25tZW50LiAgU2VlIHlvdXIgbGlua2VyIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisKKyAgICAgPHA+VGhlIDxjb2RlPmFsaWduZWQ8L2NvZGU+IGF0dHJpYnV0ZSBjYW4gYWxzbyBiZSB1c2VkIGZvciBmdW5jdGlvbnMKKyhzZWUgPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+LikKKworICAgICA8YnI+PGR0Pjxjb2RlPmNsZWFudXAgKDwvY29kZT48dmFyPmNsZWFudXBfZnVuY3Rpb248L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNsZWFudXBfMDA3ZC1hdHRyaWJ1dGUtMjc1OCI+PC9hPlRoZSA8Y29kZT5jbGVhbnVwPC9jb2RlPiBhdHRyaWJ1dGUgcnVucyBhIGZ1bmN0aW9uIHdoZW4gdGhlIHZhcmlhYmxlIGdvZXMKK291dCBvZiBzY29wZS4gIFRoaXMgYXR0cmlidXRlIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYXV0byBmdW5jdGlvbgorc2NvcGUgdmFyaWFibGVzOyBpdCBtYXkgbm90IGJlIGFwcGxpZWQgdG8gcGFyYW1ldGVycyBvciB2YXJpYWJsZXMKK3dpdGggc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uICBUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIG9uZSBwYXJhbWV0ZXIsCithIHBvaW50ZXIgdG8gYSB0eXBlIGNvbXBhdGlibGUgd2l0aCB0aGUgdmFyaWFibGUuICBUaGUgcmV0dXJuIHZhbHVlCitvZiB0aGUgZnVuY3Rpb24gKGlmIGFueSkgaXMgaWdub3JlZC4KKworICAgICA8cD5JZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmV4Y2VwdGlvbnM8L3NwYW4+PC9zYW1wPiBpcyBlbmFibGVkLCB0aGVuIDx2YXI+Y2xlYW51cF9mdW5jdGlvbjwvdmFyPgoraXMgcnVuIGR1cmluZyB0aGUgc3RhY2sgdW53aW5kaW5nIHRoYXQgaGFwcGVucyBkdXJpbmcgdGhlCitwcm9jZXNzaW5nIG9mIHRoZSBleGNlcHRpb24uICBOb3RlIHRoYXQgdGhlIDxjb2RlPmNsZWFudXA8L2NvZGU+IGF0dHJpYnV0ZQorZG9lcyBub3QgYWxsb3cgdGhlIGV4Y2VwdGlvbiB0byBiZSBjYXVnaHQsIG9ubHkgdG8gcGVyZm9ybSBhbiBhY3Rpb24uIAorSXQgaXMgdW5kZWZpbmVkIHdoYXQgaGFwcGVucyBpZiA8dmFyPmNsZWFudXBfZnVuY3Rpb248L3Zhcj4gZG9lcyBub3QKK3JldHVybiBub3JtYWxseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNvbW1vbjwvY29kZT48ZHQ+PGNvZGU+bm9jb21tb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiY29tbW9uXzAwN2QtYXR0cmlidXRlLTI3NTkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vY29tbW9uXzAwN2QtYXR0cmlidXRlLTI3NjAiPjwvYT48YSBuYW1lPSJpbmRleC1mY29tbW9uLTI3NjEiPjwvYT48YSBuYW1lPSJpbmRleC1mbm9fMDAyZGNvbW1vbi0yNzYyIj48L2E+VGhlIDxjb2RlPmNvbW1vbjwvY29kZT4gYXR0cmlidXRlIHJlcXVlc3RzIEdDQyB0byBwbGFjZSBhIHZhcmlhYmxlIGluCismbGRxdW87Y29tbW9uJnJkcXVvOyBzdG9yYWdlLiAgVGhlIDxjb2RlPm5vY29tbW9uPC9jb2RlPiBhdHRyaWJ1dGUgcmVxdWVzdHMgdGhlCitvcHBvc2l0ZSZtZGFzaDt0byBhbGxvY2F0ZSBzcGFjZSBmb3IgaXQgZGlyZWN0bHkuCisKKyAgICAgPHA+VGhlc2UgYXR0cmlidXRlcyBvdmVycmlkZSB0aGUgZGVmYXVsdCBjaG9zZW4gYnkgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWNvbW1vbjwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNvbW1vbjwvc3Bhbj48L3NhbXA+IGZsYWdzIHJlc3BlY3RpdmVseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmRlcHJlY2F0ZWQ8L2NvZGU+PGR0Pjxjb2RlPmRlcHJlY2F0ZWQgKDwvY29kZT48dmFyPm1zZzwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZGVwcmVjYXRlZF8wMDdkLWF0dHJpYnV0ZS0yNzYzIj48L2E+VGhlIDxjb2RlPmRlcHJlY2F0ZWQ8L2NvZGU+IGF0dHJpYnV0ZSByZXN1bHRzIGluIGEgd2FybmluZyBpZiB0aGUgdmFyaWFibGUKK2lzIHVzZWQgYW55d2hlcmUgaW4gdGhlIHNvdXJjZSBmaWxlLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiBpZGVudGlmeWluZwordmFyaWFibGVzIHRoYXQgYXJlIGV4cGVjdGVkIHRvIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBhCitwcm9ncmFtLiAgVGhlIHdhcm5pbmcgYWxzbyBpbmNsdWRlcyB0aGUgbG9jYXRpb24gb2YgdGhlIGRlY2xhcmF0aW9uCitvZiB0aGUgZGVwcmVjYXRlZCB2YXJpYWJsZSwgdG8gZW5hYmxlIHVzZXJzIHRvIGVhc2lseSBmaW5kIGZ1cnRoZXIKK2luZm9ybWF0aW9uIGFib3V0IHdoeSB0aGUgdmFyaWFibGUgaXMgZGVwcmVjYXRlZCwgb3Igd2hhdCB0aGV5IHNob3VsZAorZG8gaW5zdGVhZC4gIE5vdGUgdGhhdCB0aGUgd2FybmluZyBvbmx5IG9jY3VycyBmb3IgdXNlczoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBleHRlcm4gaW50IG9sZF92YXIgX19hdHRyaWJ1dGVfXyAoKGRlcHJlY2F0ZWQpKTsKKyAgICAgICAgICBleHRlcm4gaW50IG9sZF92YXI7CisgICAgICAgICAgaW50IG5ld19mbiAoKSB7IHJldHVybiBvbGRfdmFyOyB9Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5yZXN1bHRzIGluIGEgd2FybmluZyBvbiBsaW5lIDMgYnV0IG5vdCBsaW5lIDIuICBUaGUgb3B0aW9uYWwgPHZhcj5tc2c8L3Zhcj4KK2FyZ3VtZW50LCB3aGljaCBtdXN0IGJlIGEgc3RyaW5nLCBpcyBwcmludGVkIGluIHRoZSB3YXJuaW5nIGlmCitwcmVzZW50LgorCisgICAgIDxwPlRoZSA8Y29kZT5kZXByZWNhdGVkPC9jb2RlPiBhdHRyaWJ1dGUgY2FuIGFsc28gYmUgdXNlZCBmb3IgZnVuY3Rpb25zIGFuZAordHlwZXMgKHNlZSA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4sIHNlZSA8YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPlR5cGUgQXR0cmlidXRlczwvYT4uKQorCisgICAgIDxicj48ZHQ+PGNvZGU+bW9kZSAoPC9jb2RlPjx2YXI+bW9kZTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibW9kZV8wMDdkLWF0dHJpYnV0ZS0yNzY0Ij48L2E+VGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBkYXRhIHR5cGUgZm9yIHRoZSBkZWNsYXJhdGlvbiZtZGFzaDt3aGljaGV2ZXIKK3R5cGUgY29ycmVzcG9uZHMgdG8gdGhlIG1vZGUgPHZhcj5tb2RlPC92YXI+LiAgVGhpcyBpbiBlZmZlY3QgbGV0cyB5b3UKK3JlcXVlc3QgYW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCB0eXBlIGFjY29yZGluZyB0byBpdHMgd2lkdGguCisKKyAgICAgPHA+WW91IG1heSBhbHNvIHNwZWNpZnkgYSBtb2RlIG9mIDxjb2RlPmJ5dGU8L2NvZGU+IG9yIDxjb2RlPl9fYnl0ZV9fPC9jb2RlPiB0bworaW5kaWNhdGUgdGhlIG1vZGUgY29ycmVzcG9uZGluZyB0byBhIG9uZS1ieXRlIGludGVnZXIsIDxjb2RlPndvcmQ8L2NvZGU+IG9yCis8Y29kZT5fX3dvcmRfXzwvY29kZT4gZm9yIHRoZSBtb2RlIG9mIGEgb25lLXdvcmQgaW50ZWdlciwgYW5kIDxjb2RlPnBvaW50ZXI8L2NvZGU+CitvciA8Y29kZT5fX3BvaW50ZXJfXzwvY29kZT4gZm9yIHRoZSBtb2RlIHVzZWQgdG8gcmVwcmVzZW50IHBvaW50ZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+cGFja2VkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnBhY2tlZF8wMDdkLWF0dHJpYnV0ZS0yNzY1Ij48L2E+VGhlIDxjb2RlPnBhY2tlZDwvY29kZT4gYXR0cmlidXRlIHNwZWNpZmllcyB0aGF0IGEgdmFyaWFibGUgb3Igc3RydWN0dXJlIGZpZWxkCitzaG91bGQgaGF2ZSB0aGUgc21hbGxlc3QgcG9zc2libGUgYWxpZ25tZW50Jm1kYXNoO29uZSBieXRlIGZvciBhIHZhcmlhYmxlLAorYW5kIG9uZSBiaXQgZm9yIGEgZmllbGQsIHVubGVzcyB5b3Ugc3BlY2lmeSBhIGxhcmdlciB2YWx1ZSB3aXRoIHRoZQorPGNvZGU+YWxpZ25lZDwvY29kZT4gYXR0cmlidXRlLgorCisgICAgIDxwPkhlcmUgaXMgYSBzdHJ1Y3R1cmUgaW4gd2hpY2ggdGhlIGZpZWxkIDxjb2RlPng8L2NvZGU+IGlzIHBhY2tlZCwgc28gdGhhdCBpdAoraW1tZWRpYXRlbHkgZm9sbG93cyA8Y29kZT5hPC9jb2RlPjoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBzdHJ1Y3QgZm9vCisgICAgICAgICAgeworICAgICAgICAgICAgY2hhciBhOworICAgICAgICAgICAgaW50IHhbMl0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworICAgICAgICAgIH07Cis8L3ByZT4KKyAgICAgPHA+PGVtPk5vdGU6PC9lbT4gVGhlIDQuMSwgNC4yIGFuZCA0LjMgc2VyaWVzIG9mIEdDQyBpZ25vcmUgdGhlCis8Y29kZT5wYWNrZWQ8L2NvZGU+IGF0dHJpYnV0ZSBvbiBiaXQtZmllbGRzIG9mIHR5cGUgPGNvZGU+Y2hhcjwvY29kZT4uICBUaGlzIGhhcworYmVlbiBmaXhlZCBpbiBHQ0MgNC40IGJ1dCB0aGUgY2hhbmdlIGNhbiBsZWFkIHRvIGRpZmZlcmVuY2VzIGluIHRoZQorc3RydWN0dXJlIGxheW91dC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZgorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwYWNrZWQtYml0ZmllbGQtY29tcGF0PC9zcGFuPjwvc2FtcD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5zZWN0aW9uICgiPC9jb2RlPjx2YXI+c2VjdGlvbi1uYW1lPC92YXI+PGNvZGU+Iik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic2VjdGlvbl8wMDdkLXZhcmlhYmxlLWF0dHJpYnV0ZS0yNzY2Ij48L2E+Tm9ybWFsbHksIHRoZSBjb21waWxlciBwbGFjZXMgdGhlIG9iamVjdHMgaXQgZ2VuZXJhdGVzIGluIHNlY3Rpb25zIGxpa2UKKzxjb2RlPmRhdGE8L2NvZGU+IGFuZCA8Y29kZT5ic3M8L2NvZGU+LiAgU29tZXRpbWVzLCBob3dldmVyLCB5b3UgbmVlZCBhZGRpdGlvbmFsIHNlY3Rpb25zLAorb3IgeW91IG5lZWQgY2VydGFpbiBwYXJ0aWN1bGFyIHZhcmlhYmxlcyB0byBhcHBlYXIgaW4gc3BlY2lhbCBzZWN0aW9ucywKK2ZvciBleGFtcGxlIHRvIG1hcCB0byBzcGVjaWFsIGhhcmR3YXJlLiAgVGhlIDxjb2RlPnNlY3Rpb248L2NvZGU+CithdHRyaWJ1dGUgc3BlY2lmaWVzIHRoYXQgYSB2YXJpYWJsZSAob3IgZnVuY3Rpb24pIGxpdmVzIGluIGEgcGFydGljdWxhcgorc2VjdGlvbi4gIEZvciBleGFtcGxlLCB0aGlzIHNtYWxsIHByb2dyYW0gdXNlcyBzZXZlcmFsIHNwZWNpZmljIHNlY3Rpb24gbmFtZXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IGR1YXJ0IGEgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCJEVUFSVF9BIikpKSA9IHsgMCB9OworICAgICAgICAgIHN0cnVjdCBkdWFydCBiIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiRFVBUlRfQiIpKSkgPSB7IDAgfTsKKyAgICAgICAgICBjaGFyIHN0YWNrWzEwMDAwXSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIlNUQUNLIikpKSA9IHsgMCB9OworICAgICAgICAgIGludCBpbml0X2RhdGEgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCJJTklUREFUQSIpKSk7CisgICAgICAgICAgCisgICAgICAgICAgbWFpbigpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj5Jbml0aWFsaXplIHN0YWNrIHBvaW50ZXI8L3NwYW4+ICovCisgICAgICAgICAgICBpbml0X3NwIChzdGFjayArIHNpemVvZiAoc3RhY2spKTsKKyAgICAgICAgICAKKyAgICAgICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+SW5pdGlhbGl6ZSBpbml0aWFsaXplZCBkYXRhPC9zcGFuPiAqLworICAgICAgICAgICAgbWVtY3B5ICgmYW1wO2luaXRfZGF0YSwgJmFtcDtkYXRhLCAmYW1wO2VkYXRhIC0gJmFtcDtkYXRhKTsKKyAgICAgICAgICAKKyAgICAgICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+VHVybiBvbiB0aGUgc2VyaWFsIHBvcnRzPC9zcGFuPiAqLworICAgICAgICAgICAgaW5pdF9kdWFydCAoJmFtcDthKTsKKyAgICAgICAgICAgIGluaXRfZHVhcnQgKCZhbXA7Yik7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+VXNlIHRoZSA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRyaWJ1dGUgd2l0aAorPGVtPmdsb2JhbDwvZW0+IHZhcmlhYmxlcyBhbmQgbm90IDxlbT5sb2NhbDwvZW0+IHZhcmlhYmxlcywKK2FzIHNob3duIGluIHRoZSBleGFtcGxlLgorCisgICAgIDxwPllvdSBtYXkgdXNlIHRoZSA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRyaWJ1dGUgd2l0aCBpbml0aWFsaXplZCBvcgordW5pbml0aWFsaXplZCBnbG9iYWwgdmFyaWFibGVzIGJ1dCB0aGUgbGlua2VyIHJlcXVpcmVzCitlYWNoIG9iamVjdCBiZSBkZWZpbmVkIG9uY2UsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHVuaW5pdGlhbGl6ZWQKK3ZhcmlhYmxlcyB0ZW50YXRpdmVseSBnbyBpbiB0aGUgPGNvZGU+Y29tbW9uPC9jb2RlPiAob3IgPGNvZGU+YnNzPC9jb2RlPikgc2VjdGlvbgorYW5kIGNhbiBiZSBtdWx0aXBseSAmbGRxdW87ZGVmaW5lZCZyZHF1bzsuICBVc2luZyB0aGUgPGNvZGU+c2VjdGlvbjwvY29kZT4gYXR0cmlidXRlCitjaGFuZ2VzIHdoYXQgc2VjdGlvbiB0aGUgdmFyaWFibGUgZ29lcyBpbnRvIGFuZCBtYXkgY2F1c2UgdGhlCitsaW5rZXIgdG8gaXNzdWUgYW4gZXJyb3IgaWYgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBoYXMgbXVsdGlwbGUKK2RlZmluaXRpb25zLiAgWW91IGNhbiBmb3JjZSBhIHZhcmlhYmxlIHRvIGJlIGluaXRpYWxpemVkIHdpdGggdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWNvbW1vbjwvc3Bhbj48L3NhbXA+IGZsYWcgb3IgdGhlIDxjb2RlPm5vY29tbW9uPC9jb2RlPiBhdHRyaWJ1dGUuCisKKyAgICAgPHA+U29tZSBmaWxlIGZvcm1hdHMgZG8gbm90IHN1cHBvcnQgYXJiaXRyYXJ5IHNlY3Rpb25zIHNvIHRoZSA8Y29kZT5zZWN0aW9uPC9jb2RlPgorYXR0cmlidXRlIGlzIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4gCitJZiB5b3UgbmVlZCB0byBtYXAgdGhlIGVudGlyZSBjb250ZW50cyBvZiBhIG1vZHVsZSB0byBhIHBhcnRpY3VsYXIKK3NlY3Rpb24sIGNvbnNpZGVyIHVzaW5nIHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBsaW5rZXIgaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNoYXJlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzaGFyZWRfMDA3ZC12YXJpYWJsZS1hdHRyaWJ1dGUtMjc2NyI+PC9hPk9uIE1pY3Jvc29mdCBXaW5kb3dzLCBpbiBhZGRpdGlvbiB0byBwdXR0aW5nIHZhcmlhYmxlIGRlZmluaXRpb25zIGluIGEgbmFtZWQKK3NlY3Rpb24sIHRoZSBzZWN0aW9uIGNhbiBhbHNvIGJlIHNoYXJlZCBhbW9uZyBhbGwgcnVubmluZyBjb3BpZXMgb2YgYW4KK2V4ZWN1dGFibGUgb3IgRExMLiAgRm9yIGV4YW1wbGUsIHRoaXMgc21hbGwgcHJvZ3JhbSBkZWZpbmVzIHNoYXJlZCBkYXRhCitieSBwdXR0aW5nIGl0IGluIGEgbmFtZWQgc2VjdGlvbiA8Y29kZT5zaGFyZWQ8L2NvZGU+IGFuZCBtYXJraW5nIHRoZSBzZWN0aW9uCitzaGFyZWFibGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IGZvbyBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uICgic2hhcmVkIiksIHNoYXJlZCkpID0gMDsKKyAgICAgICAgICAKKyAgICAgICAgICBpbnQKKyAgICAgICAgICBtYWluKCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiA8c3BhbiBjbGFzcz0icm9tYW4iPlJlYWQgYW5kIHdyaXRlIGZvby4gIEFsbCBydW5uaW5nCisgICAgICAgICAgICAgICBjb3BpZXMgc2VlIHRoZSBzYW1lIHZhbHVlLjwvc3Bhbj4gICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5Zb3UgbWF5IG9ubHkgdXNlIHRoZSA8Y29kZT5zaGFyZWQ8L2NvZGU+IGF0dHJpYnV0ZSBhbG9uZyB3aXRoIDxjb2RlPnNlY3Rpb248L2NvZGU+CithdHRyaWJ1dGUgd2l0aCBhIGZ1bGx5LWluaXRpYWxpemVkIGdsb2JhbCBkZWZpbml0aW9uIGJlY2F1c2Ugb2YgdGhlIHdheQorbGlua2VycyB3b3JrLiAgU2VlIDxjb2RlPnNlY3Rpb248L2NvZGU+IGF0dHJpYnV0ZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICA8cD5UaGUgPGNvZGU+c2hhcmVkPC9jb2RlPiBhdHRyaWJ1dGUgaXMgb25seSBhdmFpbGFibGUgb24gTWljcm9zb2Z0IFdpbmRvd3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT50bHNfbW9kZWwgKCI8L2NvZGU+PHZhcj50bHNfbW9kZWw8L3Zhcj48Y29kZT4iKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J0bHNfMDA1Zm1vZGVsXzAwN2QtYXR0cmlidXRlLTI3NjgiPjwvYT5UaGUgPGNvZGU+dGxzX21vZGVsPC9jb2RlPiBhdHRyaWJ1dGUgc2V0cyB0aHJlYWQtbG9jYWwgc3RvcmFnZSBtb2RlbAorKHNlZSA8YSBocmVmPSJUaHJlYWRfMDAyZExvY2FsLmh0bWwjVGhyZWFkXzAwMmRMb2NhbCI+VGhyZWFkLUxvY2FsPC9hPikgb2YgYSBwYXJ0aWN1bGFyIDxjb2RlPl9fdGhyZWFkPC9jb2RlPiB2YXJpYWJsZSwKK292ZXJyaWRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ0bHMtbW9kZWw9PC9zcGFuPjwvc2FtcD4gY29tbWFuZC1saW5lIHN3aXRjaCBvbiBhIHBlci12YXJpYWJsZQorYmFzaXMuIAorVGhlIDx2YXI+dGxzX21vZGVsPC92YXI+IGFyZ3VtZW50IHNob3VsZCBiZSBvbmUgb2YgPGNvZGU+Z2xvYmFsLWR5bmFtaWM8L2NvZGU+LAorPGNvZGU+bG9jYWwtZHluYW1pYzwvY29kZT4sIDxjb2RlPmluaXRpYWwtZXhlYzwvY29kZT4gb3IgPGNvZGU+bG9jYWwtZXhlYzwvY29kZT4uCisKKyAgICAgPHA+Tm90IGFsbCB0YXJnZXRzIHN1cHBvcnQgdGhpcyBhdHRyaWJ1dGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT51bnVzZWQ8L2NvZGU+PGRkPlRoaXMgYXR0cmlidXRlLCBhdHRhY2hlZCB0byBhIHZhcmlhYmxlLCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBtZWFudAordG8gYmUgcG9zc2libHkgdW51c2VkLiAgR0NDIGRvZXMgbm90IHByb2R1Y2UgYSB3YXJuaW5nIGZvciB0aGlzCit2YXJpYWJsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnVzZWQ8L2NvZGU+PGRkPlRoaXMgYXR0cmlidXRlLCBhdHRhY2hlZCB0byBhIHZhcmlhYmxlLCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBtdXN0IGJlCitlbWl0dGVkIGV2ZW4gaWYgaXQgYXBwZWFycyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBub3QgcmVmZXJlbmNlZC4KKworICAgICA8cD5XaGVuIGFwcGxpZWQgdG8gYSBzdGF0aWMgZGF0YSBtZW1iZXIgb2YgYSBDKysgY2xhc3MgdGVtcGxhdGUsIHRoZQorYXR0cmlidXRlIGFsc28gbWVhbnMgdGhhdCB0aGUgbWVtYmVyIGlzIGluc3RhbnRpYXRlZCBpZiB0aGUKK2NsYXNzIGl0c2VsZiBpcyBpbnN0YW50aWF0ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT52ZWN0b3Jfc2l6ZSAoPC9jb2RlPjx2YXI+Ynl0ZXM8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5UaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHZlY3RvciBzaXplIGZvciB0aGUgdmFyaWFibGUsIG1lYXN1cmVkIGluCitieXRlcy4gIEZvciBleGFtcGxlLCB0aGUgZGVjbGFyYXRpb246CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IGZvbyBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDE2KSkpOworPC9wcmU+CisgICAgIDxwIGNsYXNzPSJub2luZGVudCI+Y2F1c2VzIHRoZSBjb21waWxlciB0byBzZXQgdGhlIG1vZGUgZm9yIDxjb2RlPmZvbzwvY29kZT4sIHRvIGJlIDE2IGJ5dGVzLAorZGl2aWRlZCBpbnRvIDxjb2RlPmludDwvY29kZT4gc2l6ZWQgdW5pdHMuICBBc3N1bWluZyBhIDMyLWJpdCBpbnQgKGEgdmVjdG9yIG9mCis0IHVuaXRzIG9mIDQgYnl0ZXMpLCB0aGUgY29ycmVzcG9uZGluZyBtb2RlIG9mIDxjb2RlPmZvbzwvY29kZT4gaXMgVjRTSS4KKworICAgICA8cD5UaGlzIGF0dHJpYnV0ZSBpcyBvbmx5IGFwcGxpY2FibGUgdG8gaW50ZWdyYWwgYW5kIGZsb2F0IHNjYWxhcnMsCithbHRob3VnaCBhcnJheXMsIHBvaW50ZXJzLCBhbmQgZnVuY3Rpb24gcmV0dXJuIHZhbHVlcyBhcmUgYWxsb3dlZCBpbgorY29uanVuY3Rpb24gd2l0aCB0aGlzIGNvbnN0cnVjdC4KKworICAgICA8cD5BZ2dyZWdhdGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgYXJlIGludmFsaWQsIGV2ZW4gaWYgdGhleSBhcmUgb2YgdGhlIHNhbWUKK3NpemUgYXMgYSBjb3JyZXNwb25kaW5nIHNjYWxhci4gIEZvciBleGFtcGxlLCB0aGUgZGVjbGFyYXRpb246CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IFMgeyBpbnQgYTsgfTsKKyAgICAgICAgICBzdHJ1Y3QgUyAgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKSBmb287Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5pcyBpbnZhbGlkIGV2ZW4gaWYgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpcyB0aGUgc2FtZSBhcyB0aGUgc2l6ZSBvZgordGhlIDxjb2RlPmludDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5zZWxlY3Rhbnk8L2NvZGU+PGRkPlRoZSA8Y29kZT5zZWxlY3Rhbnk8L2NvZGU+IGF0dHJpYnV0ZSBjYXVzZXMgYW4gaW5pdGlhbGl6ZWQgZ2xvYmFsIHZhcmlhYmxlIHRvCitoYXZlIGxpbmstb25jZSBzZW1hbnRpY3MuICBXaGVuIG11bHRpcGxlIGRlZmluaXRpb25zIG9mIHRoZSB2YXJpYWJsZSBhcmUKK2VuY291bnRlcmVkIGJ5IHRoZSBsaW5rZXIsIHRoZSBmaXJzdCBpcyBzZWxlY3RlZCBhbmQgdGhlIHJlbWFpbmRlciBhcmUKK2Rpc2NhcmRlZC4gIEZvbGxvd2luZyB1c2FnZSBieSB0aGUgTWljcm9zb2Z0IGNvbXBpbGVyLCB0aGUgbGlua2VyIGlzIHRvbGQKKzxlbT5ub3Q8L2VtPiB0byB3YXJuIGFib3V0IHNpemUgb3IgY29udGVudCBkaWZmZXJlbmNlcyBvZiB0aGUgbXVsdGlwbGUKK2RlZmluaXRpb25zLgorCisgICAgIDxwPkFsdGhvdWdoIHRoZSBwcmltYXJ5IHVzYWdlIG9mIHRoaXMgYXR0cmlidXRlIGlzIGZvciBQT0QgdHlwZXMsIHRoZQorYXR0cmlidXRlIGNhbiBhbHNvIGJlIGFwcGxpZWQgdG8gZ2xvYmFsIEMrKyBvYmplY3RzIHRoYXQgYXJlIGluaXRpYWxpemVkCitieSBhIGNvbnN0cnVjdG9yLiAgSW4gdGhpcyBjYXNlLCB0aGUgc3RhdGljIGluaXRpYWxpemF0aW9uIGFuZCBkZXN0cnVjdGlvbgorY29kZSBmb3IgdGhlIG9iamVjdCBpcyBlbWl0dGVkIGluIGVhY2ggdHJhbnNsYXRpb24gZGVmaW5pbmcgdGhlIG9iamVjdCwKK2J1dCB0aGUgY2FsbHMgdG8gdGhlIGNvbnN0cnVjdG9yIGFuZCBkZXN0cnVjdG9yIGFyZSBwcm90ZWN0ZWQgYnkgYQorbGluay1vbmNlIGd1YXJkIHZhcmlhYmxlLgorCisgICAgIDxwPlRoZSA8Y29kZT5zZWxlY3Rhbnk8L2NvZGU+IGF0dHJpYnV0ZSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBNaWNyb3NvZnQgV2luZG93cwordGFyZ2V0cy4gIFlvdSBjYW4gdXNlIDxjb2RlPl9fZGVjbHNwZWMgKHNlbGVjdGFueSk8L2NvZGU+IGFzIGEgc3lub255bSBmb3IKKzxjb2RlPl9fYXR0cmlidXRlX18gKChzZWxlY3RhbnkpKTwvY29kZT4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlcgorY29tcGlsZXJzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+d2VhazwvY29kZT48ZGQ+VGhlIDxjb2RlPndlYWs8L2NvZGU+IGF0dHJpYnV0ZSBpcyBkZXNjcmliZWQgaW4gPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+ZGxsaW1wb3J0PC9jb2RlPjxkZD5UaGUgPGNvZGU+ZGxsaW1wb3J0PC9jb2RlPiBhdHRyaWJ1dGUgaXMgZGVzY3JpYmVkIGluIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmRsbGV4cG9ydDwvY29kZT48ZGQ+VGhlIDxjb2RlPmRsbGV4cG9ydDwvY29kZT4gYXR0cmlidXRlIGlzIGRlc2NyaWJlZCBpbiA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4uCisKKyA8L2RsPgorCisgPHA+PGEgbmFtZT0iQVZSLVZhcmlhYmxlLUF0dHJpYnV0ZXMiPjwvYT4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjM2LjEgQVZSIFZhcmlhYmxlIEF0dHJpYnV0ZXM8L2g0PgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5wcm9nbWVtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnByb2dtZW1fMDA3ZC1BVlItdmFyaWFibGUtYXR0cmlidXRlLTI3NjkiPjwvYT5UaGUgPGNvZGU+cHJvZ21lbTwvY29kZT4gYXR0cmlidXRlIGlzIHVzZWQgb24gdGhlIEFWUiB0byBwbGFjZSByZWFkLW9ubHkKK2RhdGEgaW4gdGhlIG5vbi12b2xhdGlsZSBwcm9ncmFtIG1lbW9yeSAoZmxhc2gpLiBUaGUgPGNvZGU+cHJvZ21lbTwvY29kZT4KK2F0dHJpYnV0ZSBhY2NvbXBsaXNoZXMgdGhpcyBieSBwdXR0aW5nIHJlc3BlY3RpdmUgdmFyaWFibGVzIGludG8gYQorc2VjdGlvbiB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoIDxjb2RlPi5wcm9nbWVtPC9jb2RlPi4KKworICAgICA8cD5UaGlzIGF0dHJpYnV0ZSB3b3JrcyBzaW1pbGFyIHRvIHRoZSA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRyaWJ1dGUKK2J1dCBhZGRzIGFkZGl0aW9uYWwgY2hlY2tpbmcuIE5vdGljZSB0aGF0IGp1c3QgbGlrZSB0aGUKKzxjb2RlPnNlY3Rpb248L2NvZGU+IGF0dHJpYnV0ZSwgPGNvZGU+cHJvZ21lbTwvY29kZT4gYWZmZWN0cyB0aGUgbG9jYXRpb24KK29mIHRoZSBkYXRhIGJ1dCBub3QgaG93IHRoaXMgZGF0YSBpcyBhY2Nlc3NlZC4KKworICAgICA8cD5JbiBvcmRlciB0byByZWFkIGRhdGEgbG9jYXRlZCB3aXRoIHRoZSA8Y29kZT5wcm9nbWVtPC9jb2RlPiBhdHRyaWJ1dGUKKyhpbmxpbmUpIGFzc2VtYmxlciBtdXN0IGJlIHVzZWQuCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC8qIFVzZSBjdXN0b20gbWFjcm9zIGZyb20gPGEgaHJlZj0iaHR0cDovL25vbmdudS5vcmcvYXZyLWxpYmMvdXNlci1tYW51YWwvIj5BVlItTGliQzwvYT48IS0tIC9AdyAtLT4gKi8KKyAgICAgICAgICAjaW5jbHVkZSAmbHQ7YXZyL3BnbXNwYWNlLmgmZ3Q7CisgICAgICAgICAgCisgICAgICAgICAgLyogTG9jYXRlIHZhciBpbiBmbGFzaCBtZW1vcnkgKi8KKyAgICAgICAgICBjb25zdCBpbnQgdmFyWzJdIFBST0dNRU0gPSB7IDEsIDIgfTsKKyAgICAgICAgICAKKyAgICAgICAgICBpbnQgcmVhZF92YXIgKGludCBpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogQWNjZXNzIHZhcltdIGJ5IGFjY2Vzc29yIG1hY3JvIGZyb20gYXZyL3BnbXNwYWNlLmggKi8KKyAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBnbV9yZWFkX3dvcmQgKCZhbXA7IHZhcltpXSk7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwPkFWUiBpcyBhIEhhcnZhcmQgYXJjaGl0ZWN0dXJlIHByb2Nlc3NvciBhbmQgZGF0YSBhbmQgcmVhZC1vbmx5IGRhdGEKK25vcm1hbGx5IHJlc2lkZXMgaW4gdGhlIGRhdGEgbWVtb3J5IChSQU0pLgorCisgICAgIDxwPlNlZSBhbHNvIHRoZSA8YSBocmVmPSJBVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNBVlItTmFtZWQtQWRkcmVzcy1TcGFjZXMiPkFWUiBOYW1lZCBBZGRyZXNzIFNwYWNlczwvYT4gc2VjdGlvbiBmb3IKK2FuIGFsdGVybmF0ZSB3YXkgdG8gbG9jYXRlIGFuZCBhY2Nlc3MgZGF0YSBpbiBmbGFzaCBtZW1vcnkuIAorPC9kbD4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjM2LjIgQmxhY2tmaW4gVmFyaWFibGUgQXR0cmlidXRlczwvaDQ+CisKKzxwPlRocmVlIGF0dHJpYnV0ZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGZvciB0aGUgQmxhY2tmaW4uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPmwxX2RhdGE8L2NvZGU+PGR0Pjxjb2RlPmwxX2RhdGFfQTwvY29kZT48ZHQ+PGNvZGU+bDFfZGF0YV9CPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmwxXzAwNWZkYXRhXzAwN2QtdmFyaWFibGUtYXR0cmlidXRlLTI3NzAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmwxXzAwNWZkYXRhXzAwNWZBXzAwN2QtdmFyaWFibGUtYXR0cmlidXRlLTI3NzEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmwxXzAwNWZkYXRhXzAwNWZCXzAwN2QtdmFyaWFibGUtYXR0cmlidXRlLTI3NzIiPjwvYT5Vc2UgdGhlc2UgYXR0cmlidXRlcyBvbiB0aGUgQmxhY2tmaW4gdG8gcGxhY2UgdGhlIHZhcmlhYmxlIGludG8gTDEgRGF0YSBTUkFNLiAKK1ZhcmlhYmxlcyB3aXRoIDxjb2RlPmwxX2RhdGE8L2NvZGU+IGF0dHJpYnV0ZSBhcmUgcHV0IGludG8gdGhlIHNwZWNpZmljIHNlY3Rpb24KK25hbWVkIDxjb2RlPi5sMS5kYXRhPC9jb2RlPi4gVGhvc2Ugd2l0aCA8Y29kZT5sMV9kYXRhX0E8L2NvZGU+IGF0dHJpYnV0ZSBhcmUgcHV0IGludG8KK3RoZSBzcGVjaWZpYyBzZWN0aW9uIG5hbWVkIDxjb2RlPi5sMS5kYXRhLkE8L2NvZGU+LiBUaG9zZSB3aXRoIDxjb2RlPmwxX2RhdGFfQjwvY29kZT4KK2F0dHJpYnV0ZSBhcmUgcHV0IGludG8gdGhlIHNwZWNpZmljIHNlY3Rpb24gbmFtZWQgPGNvZGU+LmwxLmRhdGEuQjwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5sMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JsMl8wMDdkLXZhcmlhYmxlLWF0dHJpYnV0ZS0yNzczIj48L2E+VXNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBCbGFja2ZpbiB0byBwbGFjZSB0aGUgdmFyaWFibGUgaW50byBMMiBTUkFNLiAKK1ZhcmlhYmxlcyB3aXRoIDxjb2RlPmwyPC9jb2RlPiBhdHRyaWJ1dGUgYXJlIHB1dCBpbnRvIHRoZSBzcGVjaWZpYyBzZWN0aW9uCituYW1lZCA8Y29kZT4ubDIuZGF0YTwvY29kZT4uIAorPC9kbD4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjM2LjMgTTMyUi9EIFZhcmlhYmxlIEF0dHJpYnV0ZXM8L2g0PgorCis8cD5PbmUgYXR0cmlidXRlIGlzIGN1cnJlbnRseSBkZWZpbmVkIGZvciB0aGUgTTMyUi9ELgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5tb2RlbCAoPC9jb2RlPjx2YXI+bW9kZWwtbmFtZTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXZhcmlhYmxlLWFkZHJlc3NhYmlsaXR5LW9uLXRoZS1NMzJSXzAwMmZELTI3NzQiPjwvYT5Vc2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIE0zMlIvRCB0byBzZXQgdGhlIGFkZHJlc3NhYmlsaXR5IG9mIGFuIG9iamVjdC4gCitUaGUgaWRlbnRpZmllciA8dmFyPm1vZGVsLW5hbWU8L3Zhcj4gaXMgb25lIG9mIDxjb2RlPnNtYWxsPC9jb2RlPiwgPGNvZGU+bWVkaXVtPC9jb2RlPiwKK29yIDxjb2RlPmxhcmdlPC9jb2RlPiwgcmVwcmVzZW50aW5nIGVhY2ggb2YgdGhlIGNvZGUgbW9kZWxzLgorCisgICAgIDxwPlNtYWxsIG1vZGVsIG9iamVjdHMgbGl2ZSBpbiB0aGUgbG93ZXIgMTZNQiBvZiBtZW1vcnkgKHNvIHRoYXQgdGhlaXIKK2FkZHJlc3NlcyBjYW4gYmUgbG9hZGVkIHdpdGggdGhlIDxjb2RlPmxkMjQ8L2NvZGU+IGluc3RydWN0aW9uKS4KKworICAgICA8cD5NZWRpdW0gYW5kIGxhcmdlIG1vZGVsIG9iamVjdHMgbWF5IGxpdmUgYW55d2hlcmUgaW4gdGhlIDMyLWJpdCBhZGRyZXNzIHNwYWNlCisodGhlIGNvbXBpbGVyIGdlbmVyYXRlcyA8Y29kZT5zZXRoL2FkZDM8L2NvZGU+IGluc3RydWN0aW9ucyB0byBsb2FkIHRoZWlyCithZGRyZXNzZXMpLiAKKzwvZGw+CisKKyA8cD48YSBuYW1lPSJNZVAtVmFyaWFibGUtQXR0cmlidXRlcyI+PC9hPgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMzYuNCBNZVAgVmFyaWFibGUgQXR0cmlidXRlczwvaDQ+CisKKzxwPlRoZSBNZVAgdGFyZ2V0IGhhcyBhIG51bWJlciBvZiBhZGRyZXNzaW5nIG1vZGVzIGFuZCBidXNzZXMuICBUaGUKKzxjb2RlPm5lYXI8L2NvZGU+IHNwYWNlIHNwYW5zIHRoZSBzdGFuZGFyZCBtZW1vcnkgc3BhY2UncyBmaXJzdCAxNiBtZWdhYnl0ZXMKKygyNCBiaXRzKS4gIFRoZSA8Y29kZT5mYXI8L2NvZGU+IHNwYWNlIHNwYW5zIHRoZSBlbnRpcmUgMzItYml0IG1lbW9yeSBzcGFjZS4gCitUaGUgPGNvZGU+YmFzZWQ8L2NvZGU+IHNwYWNlIGlzIGEgMTI4LWJ5dGUgcmVnaW9uIGluIHRoZSBtZW1vcnkgc3BhY2UgdGhhdAoraXMgYWRkcmVzc2VkIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT4kdHA8L2NvZGU+IHJlZ2lzdGVyLiAgVGhlIDxjb2RlPnRpbnk8L2NvZGU+CitzcGFjZSBpcyBhIDY1NTM2LWJ5dGUgcmVnaW9uIHJlbGF0aXZlIHRvIHRoZSA8Y29kZT4kZ3A8L2NvZGU+IHJlZ2lzdGVyLiAgSW4KK2FkZGl0aW9uIHRvIHRoZXNlIG1lbW9yeSByZWdpb25zLCB0aGUgTWVQIHRhcmdldCBoYXMgYSBzZXBhcmF0ZSAxNi1iaXQKK2NvbnRyb2wgYnVzIHdoaWNoIGlzIHNwZWNpZmllZCB3aXRoIDxjb2RlPmNiPC9jb2RlPiBhdHRyaWJ1dGVzLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5iYXNlZDwvY29kZT48ZGQ+QW55IHZhcmlhYmxlIHdpdGggdGhlIDxjb2RlPmJhc2VkPC9jb2RlPiBhdHRyaWJ1dGUgaXMgYXNzaWduZWQgdG8gdGhlCis8Y29kZT4uYmFzZWQ8L2NvZGU+IHNlY3Rpb24sIGFuZCBpcyBhY2Nlc3NlZCB3aXRoIHJlbGF0aXZlIHRvIHRoZQorPGNvZGU+JHRwPC9jb2RlPiByZWdpc3Rlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRpbnk8L2NvZGU+PGRkPkxpa2V3aXNlLCB0aGUgPGNvZGU+dGlueTwvY29kZT4gYXR0cmlidXRlIGFzc2lnbmVkIHZhcmlhYmxlcyB0byB0aGUKKzxjb2RlPi50aW55PC9jb2RlPiBzZWN0aW9uLCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+JGdwPC9jb2RlPiByZWdpc3Rlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPm5lYXI8L2NvZGU+PGRkPlZhcmlhYmxlcyB3aXRoIHRoZSA8Y29kZT5uZWFyPC9jb2RlPiBhdHRyaWJ1dGUgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhZGRyZXNzZXMKK3RoYXQgZml0IGluIGEgMjQtYml0IGFkZHJlc3NpbmcgbW9kZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIGxhcmdlCit2YXJpYWJsZXMgKDxjb2RlPi1tdGlueT00PC9jb2RlPiBpcyB0aGUgZGVmYXVsdCkgYnV0IHRoaXMgYXR0cmlidXRlIGNhbgorb3ZlcnJpZGUgPGNvZGU+LW10aW55PTwvY29kZT4gZm9yIHNtYWxsIHZhcmlhYmxlcywgb3Igb3ZlcnJpZGUgPGNvZGU+LW1sPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmZhcjwvY29kZT48ZGQ+VmFyaWFibGVzIHdpdGggdGhlIDxjb2RlPmZhcjwvY29kZT4gYXR0cmlidXRlIGFyZSBhZGRyZXNzZWQgdXNpbmcgYSBmdWxsCiszMi1iaXQgYWRkcmVzcy4gIFNpbmNlIHRoaXMgY292ZXJzIHRoZSBlbnRpcmUgbWVtb3J5IHNwYWNlLCB0aGlzCithbGxvd3MgbW9kdWxlcyB0byBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHdoZXJlIHZhcmlhYmxlcyBtaWdodCBiZQorc3RvcmVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+aW88L2NvZGU+PGR0Pjxjb2RlPmlvICg8L2NvZGU+PHZhcj5hZGRyPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+VmFyaWFibGVzIHdpdGggdGhlIDxjb2RlPmlvPC9jb2RlPiBhdHRyaWJ1dGUgYXJlIHVzZWQgdG8gYWRkcmVzcworbWVtb3J5LW1hcHBlZCBwZXJpcGhlcmFscy4gIElmIGFuIGFkZHJlc3MgaXMgc3BlY2lmaWVkLCB0aGUgdmFyaWFibGUKK2lzIGFzc2lnbmVkIHRoYXQgYWRkcmVzcywgZWxzZSBpdCBpcyBub3QgYXNzaWduZWQgYW4gYWRkcmVzcyAoaXQgaXMKK2Fzc3VtZWQgc29tZSBvdGhlciBtb2R1bGUgYXNzaWducyBhbiBhZGRyZXNzKS4gIEV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IHRpbWVyX2NvdW50IF9fYXR0cmlidXRlX18oKGlvKDB4MTIzKSkpOworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+Y2I8L2NvZGU+PGR0Pjxjb2RlPmNiICg8L2NvZGU+PHZhcj5hZGRyPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+VmFyaWFibGVzIHdpdGggdGhlIDxjb2RlPmNiPC9jb2RlPiBhdHRyaWJ1dGUgYXJlIHVzZWQgdG8gYWNjZXNzIHRoZSBjb250cm9sCitidXMsIHVzaW5nIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zLiAgPGNvZGU+YWRkcjwvY29kZT4gaW5kaWNhdGVzIHRoZSBjb250cm9sIGJ1cworYWRkcmVzcy4gIEV4YW1wbGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IGNwdV9jbG9jayBfX2F0dHJpYnV0ZV9fKChjYigweDEyMykpKTsKKzwvcHJlPgorICAgICA8L2RsPgorCisgPHA+PGEgbmFtZT0iaTM4Ni1WYXJpYWJsZS1BdHRyaWJ1dGVzIj48L2E+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4zNi41IGkzODYgVmFyaWFibGUgQXR0cmlidXRlczwvaDQ+CisKKzxwPlR3byBhdHRyaWJ1dGVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZCBmb3IgaTM4NiBjb25maWd1cmF0aW9uczoKKzxjb2RlPm1zX3N0cnVjdDwvY29kZT4gYW5kIDxjb2RlPmdjY19zdHJ1Y3Q8L2NvZGU+CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPm1zX3N0cnVjdDwvY29kZT48ZHQ+PGNvZGU+Z2NjX3N0cnVjdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jtc18wMDVmc3RydWN0XzAwN2QtYXR0cmlidXRlLTI3NzUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmdjY18wMDVmc3RydWN0XzAwN2QtYXR0cmlidXRlLTI3NzYiPjwvYT4KK0lmIDxjb2RlPnBhY2tlZDwvY29kZT4gaXMgdXNlZCBvbiBhIHN0cnVjdHVyZSwgb3IgaWYgYml0LWZpZWxkcyBhcmUgdXNlZCwKK2l0IG1heSBiZSB0aGF0IHRoZSBNaWNyb3NvZnQgQUJJIGxheXMgb3V0IHRoZSBzdHJ1Y3R1cmUgZGlmZmVyZW50bHkKK3RoYW4gdGhlIHdheSBHQ0Mgbm9ybWFsbHkgZG9lcy4gIFBhcnRpY3VsYXJseSB3aGVuIG1vdmluZyBwYWNrZWQKK2RhdGEgYmV0d2VlbiBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aCBHQ0MgYW5kIHRoZSBuYXRpdmUgTWljcm9zb2Z0IGNvbXBpbGVyCisoZWl0aGVyIHZpYSBmdW5jdGlvbiBjYWxsIG9yIGFzIGRhdGEgaW4gYSBmaWxlKSwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBhY2Nlc3MKK2VpdGhlciBmb3JtYXQuCisKKyAgICAgPHA+Q3VycmVudGx5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tW25vLV1tcy1iaXRmaWVsZHM8L3NwYW4+PC9zYW1wPiBpcyBwcm92aWRlZCBmb3IgdGhlIE1pY3Jvc29mdCBXaW5kb3dzIFg4NgorY29tcGlsZXJzIHRvIG1hdGNoIHRoZSBuYXRpdmUgTWljcm9zb2Z0IGNvbXBpbGVyLgorCisgICAgIDxwPlRoZSBNaWNyb3NvZnQgc3RydWN0dXJlIGxheW91dCBhbGdvcml0aG0gaXMgZmFpcmx5IHNpbXBsZSB3aXRoIHRoZSBleGNlcHRpb24KK29mIHRoZSBiaXQtZmllbGQgcGFja2luZy4gCitUaGUgcGFkZGluZyBhbmQgYWxpZ25tZW50IG9mIG1lbWJlcnMgb2Ygc3RydWN0dXJlcyBhbmQgd2hldGhlciBhIGJpdC1maWVsZAorY2FuIHN0cmFkZGxlIGEgc3RvcmFnZS11bml0IGJvdW5kYXJ5IGFyZSBkZXRlcm1pbmUgYnkgdGhlc2UgcnVsZXM6CisKKyAgICAgICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+U3RydWN0dXJlIG1lbWJlcnMgYXJlIHN0b3JlZCBzZXF1ZW50aWFsbHkgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlCitkZWNsYXJlZDogdGhlIGZpcnN0IG1lbWJlciBoYXMgdGhlIGxvd2VzdCBtZW1vcnkgYWRkcmVzcyBhbmQgdGhlIGxhc3QgbWVtYmVyCit0aGUgaGlnaGVzdC4KKworICAgICAgICAgIDxsaT5FdmVyeSBkYXRhIG9iamVjdCBoYXMgYW4gYWxpZ25tZW50IHJlcXVpcmVtZW50LiAgVGhlIGFsaWdubWVudCByZXF1aXJlbWVudAorZm9yIGFsbCBkYXRhIGV4Y2VwdCBzdHJ1Y3R1cmVzLCB1bmlvbnMsIGFuZCBhcnJheXMgaXMgZWl0aGVyIHRoZSBzaXplIG9mIHRoZQorb2JqZWN0IG9yIHRoZSBjdXJyZW50IHBhY2tpbmcgc2l6ZSAoc3BlY2lmaWVkIHdpdGggZWl0aGVyIHRoZQorPGNvZGU+YWxpZ25lZDwvY29kZT4gYXR0cmlidXRlIG9yIHRoZSA8Y29kZT5wYWNrPC9jb2RlPiBwcmFnbWEpLAord2hpY2hldmVyIGlzIGxlc3MuICBGb3Igc3RydWN0dXJlcywgdW5pb25zLCBhbmQgYXJyYXlzLAordGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBpcyB0aGUgbGFyZ2VzdCBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgaXRzIG1lbWJlcnMuIAorRXZlcnkgb2JqZWN0IGlzIGFsbG9jYXRlZCBhbiBvZmZzZXQgc28gdGhhdDoKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgb2Zmc2V0ICUgYWxpZ25tZW50X3JlcXVpcmVtZW50ID09IDAKKzwvcHJlPgorICAgICAgICAgIDxsaT5BZGphY2VudCBiaXQtZmllbGRzIGFyZSBwYWNrZWQgaW50byB0aGUgc2FtZSAxLSwgMi0sIG9yIDQtYnl0ZSBhbGxvY2F0aW9uCit1bml0IGlmIHRoZSBpbnRlZ3JhbCB0eXBlcyBhcmUgdGhlIHNhbWUgc2l6ZSBhbmQgaWYgdGhlIG5leHQgYml0LWZpZWxkIGZpdHMKK2ludG8gdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiB1bml0IHdpdGhvdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IGltcG9zZWQgYnkgdGhlCitjb21tb24gYWxpZ25tZW50IHJlcXVpcmVtZW50cyBvZiB0aGUgYml0LWZpZWxkcy4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPk1TVkMgaW50ZXJwcmV0cyB6ZXJvLWxlbmd0aCBiaXQtZmllbGRzIGluIHRoZSBmb2xsb3dpbmcgd2F5czoKKworICAgICAgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5JZiBhIHplcm8tbGVuZ3RoIGJpdC1maWVsZCBpcyBpbnNlcnRlZCBiZXR3ZWVuIHR3byBiaXQtZmllbGRzIHRoYXQKK2FyZSBub3JtYWxseSBjb2FsZXNjZWQsIHRoZSBiaXQtZmllbGRzIGFyZSBub3QgY29hbGVzY2VkLgorCisgICAgICAgICAgPHA+Rm9yIGV4YW1wbGU6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIHN0cnVjdAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmZfMSA6IDEyOworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyA6IDA7CisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJmXzIgOiAxMjsKKyAgICAgICAgICAgICAgICB9IHQxOworPC9wcmU+CisgICAgICAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGUgc2l6ZSBvZiA8Y29kZT50MTwvY29kZT4gaXMgOCBieXRlcyB3aXRoIHRoZSB6ZXJvLWxlbmd0aCBiaXQtZmllbGQuICBJZiB0aGUKK3plcm8tbGVuZ3RoIGJpdC1maWVsZCB3ZXJlIHJlbW92ZWQsIDxjb2RlPnQxPC9jb2RlPidzIHNpemUgd291bGQgYmUgNCBieXRlcy4KKworICAgICAgICAgIDxsaT5JZiBhIHplcm8tbGVuZ3RoIGJpdC1maWVsZCBpcyBpbnNlcnRlZCBhZnRlciBhIGJpdC1maWVsZCwgPGNvZGU+Zm9vPC9jb2RlPiwgYW5kIHRoZQorYWxpZ25tZW50IG9mIHRoZSB6ZXJvLWxlbmd0aCBiaXQtZmllbGQgaXMgZ3JlYXRlciB0aGFuIHRoZSBtZW1iZXIgdGhhdCBmb2xsb3dzIGl0LAorPGNvZGU+YmFyPC9jb2RlPiwgPGNvZGU+YmFyPC9jb2RlPiBpcyBhbGlnbmVkIGFzIHRoZSB0eXBlIG9mIHRoZSB6ZXJvLWxlbmd0aCBiaXQtZmllbGQuCisKKyAgICAgICAgICA8cD5Gb3IgZXhhbXBsZToKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2hhciBmb28gOiA0OworICAgICAgICAgICAgICAgICAgc2hvcnQgOiAwOworICAgICAgICAgICAgICAgICAgY2hhciBiYXI7CisgICAgICAgICAgICAgICAgfSB0MjsKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2hhciBmb28gOiA0OworICAgICAgICAgICAgICAgICAgc2hvcnQgOiAwOworICAgICAgICAgICAgICAgICAgZG91YmxlIGJhcjsKKyAgICAgICAgICAgICAgICB9IHQzOworPC9wcmU+CisgICAgICAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5Gb3IgPGNvZGU+dDI8L2NvZGU+LCA8Y29kZT5iYXI8L2NvZGU+IGlzIHBsYWNlZCBhdCBvZmZzZXQgMiwgcmF0aGVyIHRoYW4gb2Zmc2V0IDEuIAorQWNjb3JkaW5nbHksIHRoZSBzaXplIG9mIDxjb2RlPnQyPC9jb2RlPiBpcyA0LiAgRm9yIDxjb2RlPnQzPC9jb2RlPiwgdGhlIHplcm8tbGVuZ3RoCitiaXQtZmllbGQgZG9lcyBub3QgYWZmZWN0IHRoZSBhbGlnbm1lbnQgb2YgPGNvZGU+YmFyPC9jb2RlPiBvciwgYXMgYSByZXN1bHQsIHRoZSBzaXplCitvZiB0aGUgc3RydWN0dXJlLgorCisgICAgICAgICAgPHA+VGFraW5nIHRoaXMgaW50byBhY2NvdW50LCBpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGUgZm9sbG93aW5nOgorCisgICAgICAgICAgICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+SWYgYSB6ZXJvLWxlbmd0aCBiaXQtZmllbGQgZm9sbG93cyBhIG5vcm1hbCBiaXQtZmllbGQsIHRoZSB0eXBlIG9mIHRoZQoremVyby1sZW5ndGggYml0LWZpZWxkIG1heSBhZmZlY3QgdGhlIGFsaWdubWVudCBvZiB0aGUgc3RydWN0dXJlIGFzIHdob2xlLiBGb3IKK2V4YW1wbGUsIDxjb2RlPnQyPC9jb2RlPiBoYXMgYSBzaXplIG9mIDQgYnl0ZXMsIHNpbmNlIHRoZSB6ZXJvLWxlbmd0aCBiaXQtZmllbGQgZm9sbG93cyBhCitub3JtYWwgYml0LWZpZWxkLCBhbmQgaXMgb2YgdHlwZSBzaG9ydC4KKworICAgICAgICAgICAgICAgPGxpPkV2ZW4gaWYgYSB6ZXJvLWxlbmd0aCBiaXQtZmllbGQgaXMgbm90IGZvbGxvd2VkIGJ5IGEgbm9ybWFsIGJpdC1maWVsZCwgaXQgbWF5CitzdGlsbCBhZmZlY3QgdGhlIGFsaWdubWVudCBvZiB0aGUgc3RydWN0dXJlOgorCisgICAgICAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgICAgICAgc3RydWN0CisgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZm9vIDogNjsKKyAgICAgICAgICAgICAgICAgICAgICAgbG9uZyA6IDA7CisgICAgICAgICAgICAgICAgICAgICB9IHQ0OworPC9wcmU+CisgICAgICAgICAgICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkhlcmUsIDxjb2RlPnQ0PC9jb2RlPiB0YWtlcyB1cCA0IGJ5dGVzLgorICAgICAgICAgICAgICAgPC9vbD4KKworICAgICAgICAgIDxsaT5aZXJvLWxlbmd0aCBiaXQtZmllbGRzIGZvbGxvd2luZyBub24tYml0LWZpZWxkIG1lbWJlcnMgYXJlIGlnbm9yZWQ6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIHN0cnVjdAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNoYXIgZm9vOworICAgICAgICAgICAgICAgICAgbG9uZyA6IDA7CisgICAgICAgICAgICAgICAgICBjaGFyIGJhcjsKKyAgICAgICAgICAgICAgICB9IHQ1OworPC9wcmU+CisgICAgICAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5IZXJlLCA8Y29kZT50NTwvY29kZT4gdGFrZXMgdXAgMiBieXRlcy4KKyAgICAgICAgICA8L29sPgorPC9kbD4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjM2LjYgUG93ZXJQQyBWYXJpYWJsZSBBdHRyaWJ1dGVzPC9oND4KKworPHA+VGhyZWUgYXR0cmlidXRlcyBjdXJyZW50bHkgYXJlIGRlZmluZWQgZm9yIFBvd2VyUEMgY29uZmlndXJhdGlvbnM6Cis8Y29kZT5hbHRpdmVjPC9jb2RlPiwgPGNvZGU+bXNfc3RydWN0PC9jb2RlPiBhbmQgPGNvZGU+Z2NjX3N0cnVjdDwvY29kZT4uCisKKyA8cD5Gb3IgZnVsbCBkb2N1bWVudGF0aW9uIG9mIHRoZSBzdHJ1Y3QgYXR0cmlidXRlcyBwbGVhc2Ugc2VlIHRoZQorZG9jdW1lbnRhdGlvbiBpbiA8YSBocmVmPSJpMzg2LVZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNpMzg2LVZhcmlhYmxlLUF0dHJpYnV0ZXMiPmkzODYgVmFyaWFibGUgQXR0cmlidXRlczwvYT4uCisKKyA8cD5Gb3IgZG9jdW1lbnRhdGlvbiBvZiA8Y29kZT5hbHRpdmVjPC9jb2RlPiBhdHRyaWJ1dGUgcGxlYXNlIHNlZSB0aGUKK2RvY3VtZW50YXRpb24gaW4gPGEgaHJlZj0iUG93ZXJQQy1UeXBlLUF0dHJpYnV0ZXMuaHRtbCNQb3dlclBDLVR5cGUtQXR0cmlidXRlcyI+UG93ZXJQQyBUeXBlIEF0dHJpYnV0ZXM8L2E+LgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMzYuNyBTUFUgVmFyaWFibGUgQXR0cmlidXRlczwvaDQ+CisKKzxwPlRoZSBTUFUgc3VwcG9ydHMgdGhlIDxjb2RlPnNwdV92ZWN0b3I8L2NvZGU+IGF0dHJpYnV0ZSBmb3IgdmFyaWFibGVzLiAgRm9yCitkb2N1bWVudGF0aW9uIG9mIHRoaXMgYXR0cmlidXRlIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gaW4KKzxhIGhyZWY9IlNQVS1UeXBlLUF0dHJpYnV0ZXMuaHRtbCNTUFUtVHlwZS1BdHRyaWJ1dGVzIj5TUFUgVHlwZSBBdHRyaWJ1dGVzPC9hPi4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjM2LjggWHN0b3JteTE2IFZhcmlhYmxlIEF0dHJpYnV0ZXM8L2g0PgorCis8cD5PbmUgYXR0cmlidXRlIGlzIGN1cnJlbnRseSBkZWZpbmVkIGZvciB4c3Rvcm15MTYgY29uZmlndXJhdGlvbnM6Cis8Y29kZT5iZWxvdzEwMDwvY29kZT4uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPmJlbG93MTAwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmJlbG93MTAwXzAwN2QtYXR0cmlidXRlLTI3NzciPjwvYT4KK0lmIGEgdmFyaWFibGUgaGFzIHRoZSA8Y29kZT5iZWxvdzEwMDwvY29kZT4gYXR0cmlidXRlICg8Y29kZT5CRUxPVzEwMDwvY29kZT4gaXMKK2FsbG93ZWQgYWxzbyksIEdDQyBwbGFjZXMgdGhlIHZhcmlhYmxlIGluIHRoZSBmaXJzdCAweDEwMCBieXRlcyBvZgorbWVtb3J5IGFuZCB1c2Ugc3BlY2lhbCBvcGNvZGVzIHRvIGFjY2VzcyBpdC4gIFN1Y2ggdmFyaWFibGVzIGFyZQorcGxhY2VkIGluIGVpdGhlciB0aGUgPGNvZGU+LmJzc19iZWxvdzEwMDwvY29kZT4gc2VjdGlvbiBvciB0aGUKKzxjb2RlPi5kYXRhX2JlbG93MTAwPC9jb2RlPiBzZWN0aW9uLgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVmFyaWFibGUtTGVuZ3RoLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ZhcmlhYmxlLUxlbmd0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YWM1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ZhcmlhYmxlLUxlbmd0aC5odG1sCkBAIC0wLDAgKzEsMTI0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WYXJpYWJsZSBMZW5ndGggLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRW1wdHktU3RydWN0dXJlcy5odG1sI0VtcHR5LVN0cnVjdHVyZXMiIHRpdGxlPSJFbXB0eSBTdHJ1Y3R1cmVzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVmFyaWFkaWMtTWFjcm9zLmh0bWwjVmFyaWFkaWMtTWFjcm9zIiB0aXRsZT0iVmFyaWFkaWMgTWFjcm9zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlZhcmlhYmxlLUxlbmd0aCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWYXJpYWRpYy1NYWNyb3MuaHRtbCNWYXJpYWRpYy1NYWNyb3MiPlZhcmlhZGljIE1hY3JvczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVtcHR5LVN0cnVjdHVyZXMuaHRtbCNFbXB0eS1TdHJ1Y3R1cmVzIj5FbXB0eSBTdHJ1Y3R1cmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjE5IEFycmF5cyBvZiBWYXJpYWJsZSBMZW5ndGg8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC12YXJpYWJsZV8wMDJkbGVuZ3RoLWFycmF5cy0yNTIyIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlzLW9mLXZhcmlhYmxlLWxlbmd0aC0yNTIzIj48L2E+PGEgbmFtZT0iaW5kZXgtVkxBcy0yNTI0Ij48L2E+CitWYXJpYWJsZS1sZW5ndGggYXV0b21hdGljIGFycmF5cyBhcmUgYWxsb3dlZCBpbiBJU08gQzk5LCBhbmQgYXMgYW4KK2V4dGVuc2lvbiBHQ0MgYWNjZXB0cyB0aGVtIGluIEM5MCBtb2RlIGFuZCBpbiBDKysuICBUaGVzZSBhcnJheXMgYXJlCitkZWNsYXJlZCBsaWtlIGFueSBvdGhlciBhdXRvbWF0aWMgYXJyYXlzLCBidXQgd2l0aCBhIGxlbmd0aCB0aGF0IGlzIG5vdAorYSBjb25zdGFudCBleHByZXNzaW9uLiAgVGhlIHN0b3JhZ2UgaXMgYWxsb2NhdGVkIGF0IHRoZSBwb2ludCBvZgorZGVjbGFyYXRpb24gYW5kIGRlYWxsb2NhdGVkIHdoZW4gdGhlIGJsb2NrIHNjb3BlIGNvbnRhaW5pbmcgdGhlIGRlY2xhcmF0aW9uCitleGl0cy4gIEZvcgorZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIEZJTEUgKgorICAgICBjb25jYXRfZm9wZW4gKGNoYXIgKnMxLCBjaGFyICpzMiwgY2hhciAqbW9kZSkKKyAgICAgeworICAgICAgIGNoYXIgc3RyW3N0cmxlbiAoczEpICsgc3RybGVuIChzMikgKyAxXTsKKyAgICAgICBzdHJjcHkgKHN0ciwgczEpOworICAgICAgIHN0cmNhdCAoc3RyLCBzMik7CisgICAgICAgcmV0dXJuIGZvcGVuIChzdHIsIG1vZGUpOworICAgICB9Cis8L3ByZT4KKyA8cD48YSBuYW1lPSJpbmRleC1zY29wZS1vZi1hLXZhcmlhYmxlLWxlbmd0aC1hcnJheS0yNTI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmFyaWFibGVfMDAyZGxlbmd0aC1hcnJheS1zY29wZS0yNTI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGVhbGxvY2F0aW5nLXZhcmlhYmxlLWxlbmd0aC1hcnJheXMtMjUyNyI+PC9hPkp1bXBpbmcgb3IgYnJlYWtpbmcgb3V0IG9mIHRoZSBzY29wZSBvZiB0aGUgYXJyYXkgbmFtZSBkZWFsbG9jYXRlcyB0aGUKK3N0b3JhZ2UuICBKdW1waW5nIGludG8gdGhlIHNjb3BlIGlzIG5vdCBhbGxvd2VkOyB5b3UgZ2V0IGFuIGVycm9yCittZXNzYWdlIGZvciBpdC4KKworIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiYWxsb2NhXzAwN2QtdnMtdmFyaWFibGVfMDAyZGxlbmd0aC1hcnJheXMtMjUyOCI+PC9hPllvdSBjYW4gdXNlIHRoZSBmdW5jdGlvbiA8Y29kZT5hbGxvY2E8L2NvZGU+IHRvIGdldCBhbiBlZmZlY3QgbXVjaCBsaWtlCit2YXJpYWJsZS1sZW5ndGggYXJyYXlzLiAgVGhlIGZ1bmN0aW9uIDxjb2RlPmFsbG9jYTwvY29kZT4gaXMgYXZhaWxhYmxlIGluCittYW55IG90aGVyIEMgaW1wbGVtZW50YXRpb25zIChidXQgbm90IGluIGFsbCkuICBPbiB0aGUgb3RoZXIgaGFuZCwKK3ZhcmlhYmxlLWxlbmd0aCBhcnJheXMgYXJlIG1vcmUgZWxlZ2FudC4KKworIDxwPlRoZXJlIGFyZSBvdGhlciBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZXNlIHR3byBtZXRob2RzLiAgU3BhY2UgYWxsb2NhdGVkCit3aXRoIDxjb2RlPmFsbG9jYTwvY29kZT4gZXhpc3RzIHVudGlsIHRoZSBjb250YWluaW5nIDxlbT5mdW5jdGlvbjwvZW0+IHJldHVybnMuIAorVGhlIHNwYWNlIGZvciBhIHZhcmlhYmxlLWxlbmd0aCBhcnJheSBpcyBkZWFsbG9jYXRlZCBhcyBzb29uIGFzIHRoZSBhcnJheQorbmFtZSdzIHNjb3BlIGVuZHMuICAoSWYgeW91IHVzZSBib3RoIHZhcmlhYmxlLWxlbmd0aCBhcnJheXMgYW5kCis8Y29kZT5hbGxvY2E8L2NvZGU+IGluIHRoZSBzYW1lIGZ1bmN0aW9uLCBkZWFsbG9jYXRpb24gb2YgYSB2YXJpYWJsZS1sZW5ndGggYXJyYXkKK2Fsc28gZGVhbGxvY2F0ZXMgYW55dGhpbmcgbW9yZSByZWNlbnRseSBhbGxvY2F0ZWQgd2l0aCA8Y29kZT5hbGxvY2E8L2NvZGU+LikKKworIDxwPllvdSBjYW4gYWxzbyB1c2UgdmFyaWFibGUtbGVuZ3RoIGFycmF5cyBhcyBhcmd1bWVudHMgdG8gZnVuY3Rpb25zOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RydWN0IGVudHJ5CisgICAgIHRlc3RlciAoaW50IGxlbiwgY2hhciBkYXRhW2xlbl1bbGVuXSkKKyAgICAgeworICAgICAgIC8qIDxzcGFuIGNsYXNzPSJyb21hbiI+Li4uPC9zcGFuPiAqLworICAgICB9Cis8L3ByZT4KKyA8cD5UaGUgbGVuZ3RoIG9mIGFuIGFycmF5IGlzIGNvbXB1dGVkIG9uY2Ugd2hlbiB0aGUgc3RvcmFnZSBpcyBhbGxvY2F0ZWQKK2FuZCBpcyByZW1lbWJlcmVkIGZvciB0aGUgc2NvcGUgb2YgdGhlIGFycmF5IGluIGNhc2UgeW91IGFjY2VzcyBpdCB3aXRoCis8Y29kZT5zaXplb2Y8L2NvZGU+LgorCisgPHA+SWYgeW91IHdhbnQgdG8gcGFzcyB0aGUgYXJyYXkgZmlyc3QgYW5kIHRoZSBsZW5ndGggYWZ0ZXJ3YXJkLCB5b3UgY2FuCit1c2UgYSBmb3J3YXJkIGRlY2xhcmF0aW9uIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCZtZGFzaDthbm90aGVyIEdOVSBleHRlbnNpb24uCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdHJ1Y3QgZW50cnkKKyAgICAgdGVzdGVyIChpbnQgbGVuOyBjaGFyIGRhdGFbbGVuXVtsZW5dLCBpbnQgbGVuKQorICAgICB7CisgICAgICAgLyogPHNwYW4gY2xhc3M9InJvbWFuIj4uLi48L3NwYW4+ICovCisgICAgIH0KKzwvcHJlPgorIDxwPjxhIG5hbWU9ImluZGV4LXBhcmFtZXRlci1mb3J3YXJkLWRlY2xhcmF0aW9uLTI1MjkiPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnQgbGVuPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJlZm9yZSB0aGUgc2VtaWNvbG9uIGlzIGEgPGRmbj5wYXJhbWV0ZXIgZm9yd2FyZAorZGVjbGFyYXRpb248L2Rmbj4sIGFuZCBpdCBzZXJ2ZXMgdGhlIHB1cnBvc2Ugb2YgbWFraW5nIHRoZSBuYW1lIDxjb2RlPmxlbjwvY29kZT4KK2tub3duIHdoZW4gdGhlIGRlY2xhcmF0aW9uIG9mIDxjb2RlPmRhdGE8L2NvZGU+IGlzIHBhcnNlZC4KKworIDxwPllvdSBjYW4gd3JpdGUgYW55IG51bWJlciBvZiBzdWNoIHBhcmFtZXRlciBmb3J3YXJkIGRlY2xhcmF0aW9ucyBpbiB0aGUKK3BhcmFtZXRlciBsaXN0LiAgVGhleSBjYW4gYmUgc2VwYXJhdGVkIGJ5IGNvbW1hcyBvciBzZW1pY29sb25zLCBidXQgdGhlCitsYXN0IG9uZSBtdXN0IGVuZCB3aXRoIGEgc2VtaWNvbG9uLCB3aGljaCBpcyBmb2xsb3dlZCBieSB0aGUgJmxkcXVvO3JlYWwmcmRxdW87CitwYXJhbWV0ZXIgZGVjbGFyYXRpb25zLiAgRWFjaCBmb3J3YXJkIGRlY2xhcmF0aW9uIG11c3QgbWF0Y2ggYSAmbGRxdW87cmVhbCZyZHF1bzsKK2RlY2xhcmF0aW9uIGluIHBhcmFtZXRlciBuYW1lIGFuZCBkYXRhIHR5cGUuICBJU08gQzk5IGRvZXMgbm90IHN1cHBvcnQKK3BhcmFtZXRlciBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVmFyaWFkaWMtTWFjcm9zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ZhcmlhZGljLU1hY3Jvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NDg5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ZhcmlhZGljLU1hY3Jvcy5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WYXJpYWRpYyBNYWNyb3MgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVmFyaWFibGUtTGVuZ3RoLmh0bWwjVmFyaWFibGUtTGVuZ3RoIiB0aXRsZT0iVmFyaWFibGUgTGVuZ3RoIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRXNjYXBlZC1OZXdsaW5lcy5odG1sI0VzY2FwZWQtTmV3bGluZXMiIHRpdGxlPSJFc2NhcGVkIE5ld2xpbmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlZhcmlhZGljLU1hY3JvcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFc2NhcGVkLU5ld2xpbmVzLmh0bWwjRXNjYXBlZC1OZXdsaW5lcyI+RXNjYXBlZCBOZXdsaW5lczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZhcmlhYmxlLUxlbmd0aC5odG1sI1ZhcmlhYmxlLUxlbmd0aCI+VmFyaWFibGUgTGVuZ3RoPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjIwIE1hY3JvcyB3aXRoIGEgVmFyaWFibGUgTnVtYmVyIG9mIEFyZ3VtZW50cy48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC12YXJpYWJsZS1udW1iZXItb2YtYXJndW1lbnRzLTI1MzAiPjwvYT48YSBuYW1lPSJpbmRleC1tYWNyby13aXRoLXZhcmlhYmxlLWFyZ3VtZW50cy0yNTMxIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVzdC1hcmd1bWVudC1fMDAyOGluLW1hY3JvXzAwMjktMjUzMiI+PC9hPjxhIG5hbWU9ImluZGV4LXZhcmlhZGljLW1hY3Jvcy0yNTMzIj48L2E+CitJbiB0aGUgSVNPIEMgc3RhbmRhcmQgb2YgMTk5OSwgYSBtYWNybyBjYW4gYmUgZGVjbGFyZWQgdG8gYWNjZXB0IGEKK3ZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMgbXVjaCBhcyBhIGZ1bmN0aW9uIGNhbi4gIFRoZSBzeW50YXggZm9yCitkZWZpbmluZyB0aGUgbWFjcm8gaXMgc2ltaWxhciB0byB0aGF0IG9mIGEgZnVuY3Rpb24uICBIZXJlIGlzIGFuCitleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2RlZmluZSBkZWJ1Zyhmb3JtYXQsIC4uLikgZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQsIF9fVkFfQVJHU19fKQorPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5IZXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Li4uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGEgPGRmbj52YXJpYWJsZSBhcmd1bWVudDwvZGZuPi4gIEluIHRoZSBpbnZvY2F0aW9uIG9mCitzdWNoIGEgbWFjcm8sIGl0IHJlcHJlc2VudHMgdGhlIHplcm8gb3IgbW9yZSB0b2tlbnMgdW50aWwgdGhlIGNsb3NpbmcKK3BhcmVudGhlc2lzIHRoYXQgZW5kcyB0aGUgaW52b2NhdGlvbiwgaW5jbHVkaW5nIGFueSBjb21tYXMuICBUaGlzIHNldCBvZgordG9rZW5zIHJlcGxhY2VzIHRoZSBpZGVudGlmaWVyIDxjb2RlPl9fVkFfQVJHU19fPC9jb2RlPiBpbiB0aGUgbWFjcm8gYm9keQord2hlcmV2ZXIgaXQgYXBwZWFycy4gIFNlZSB0aGUgQ1BQIG1hbnVhbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworIDxwPkdDQyBoYXMgbG9uZyBzdXBwb3J0ZWQgdmFyaWFkaWMgbWFjcm9zLCBhbmQgdXNlZCBhIGRpZmZlcmVudCBzeW50YXggdGhhdAorYWxsb3dlZCB5b3UgdG8gZ2l2ZSBhIG5hbWUgdG8gdGhlIHZhcmlhYmxlIGFyZ3VtZW50cyBqdXN0IGxpa2UgYW55IG90aGVyCithcmd1bWVudC4gIEhlcmUgaXMgYW4gZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgZGVidWcoZm9ybWF0LCBhcmdzLi4uKSBmcHJpbnRmIChzdGRlcnIsIGZvcm1hdCwgYXJncykKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+VGhpcyBpcyBpbiBhbGwgd2F5cyBlcXVpdmFsZW50IHRvIHRoZSBJU08gQyBleGFtcGxlIGFib3ZlLCBidXQgYXJndWFibHkKK21vcmUgcmVhZGFibGUgYW5kIGRlc2NyaXB0aXZlLgorCisgPHA+R05VIENQUCBoYXMgdHdvIGZ1cnRoZXIgdmFyaWFkaWMgbWFjcm8gZXh0ZW5zaW9ucywgYW5kIHBlcm1pdHMgdGhlbSB0bworYmUgdXNlZCB3aXRoIGVpdGhlciBvZiB0aGUgYWJvdmUgZm9ybXMgb2YgbWFjcm8gZGVmaW5pdGlvbi4KKworIDxwPkluIHN0YW5kYXJkIEMsIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gbGVhdmUgdGhlIHZhcmlhYmxlIGFyZ3VtZW50IG91dAorZW50aXJlbHk7IGJ1dCB5b3UgYXJlIGFsbG93ZWQgdG8gcGFzcyBhbiBlbXB0eSBhcmd1bWVudC4gIEZvciBleGFtcGxlLAordGhpcyBpbnZvY2F0aW9uIGlzIGludmFsaWQgaW4gSVNPIEMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29tbWEgYWZ0ZXIKK3RoZSBzdHJpbmc6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBkZWJ1ZyAoIkEgbWVzc2FnZSIpCis8L3ByZT4KKyA8cD5HTlUgQ1BQIHBlcm1pdHMgeW91IHRvIGNvbXBsZXRlbHkgb21pdCB0aGUgdmFyaWFibGUgYXJndW1lbnRzIGluIHRoaXMKK3dheS4gIEluIHRoZSBhYm92ZSBleGFtcGxlcywgdGhlIGNvbXBpbGVyIHdvdWxkIGNvbXBsYWluLCB0aG91Z2ggc2luY2UKK3RoZSBleHBhbnNpb24gb2YgdGhlIG1hY3JvIHN0aWxsIGhhcyB0aGUgZXh0cmEgY29tbWEgYWZ0ZXIgdGhlIGZvcm1hdAorc3RyaW5nLgorCisgPHA+VG8gaGVscCBzb2x2ZSB0aGlzIHByb2JsZW0sIENQUCBiZWhhdmVzIHNwZWNpYWxseSBmb3IgdmFyaWFibGUgYXJndW1lbnRzCit1c2VkIHdpdGggdGhlIHRva2VuIHBhc3RlIG9wZXJhdG9yLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSWYgaW5zdGVhZCB5b3Ugd3JpdGUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICNkZWZpbmUgZGVidWcoZm9ybWF0LCAuLi4pIGZwcmludGYgKHN0ZGVyciwgZm9ybWF0LCAjIyBfX1ZBX0FSR1NfXykKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+YW5kIGlmIHRoZSB2YXJpYWJsZSBhcmd1bWVudHMgYXJlIG9taXR0ZWQgb3IgZW1wdHksIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiMjPC9zcGFuPjwvc2FtcD4mcnNxdW87CitvcGVyYXRvciBjYXVzZXMgdGhlIHByZXByb2Nlc3NvciB0byByZW1vdmUgdGhlIGNvbW1hIGJlZm9yZSBpdC4gIElmIHlvdQorZG8gcHJvdmlkZSBzb21lIHZhcmlhYmxlIGFyZ3VtZW50cyBpbiB5b3VyIG1hY3JvIGludm9jYXRpb24sIEdOVSBDUFAKK2RvZXMgbm90IGNvbXBsYWluIGFib3V0IHRoZSBwYXN0ZSBvcGVyYXRpb24gYW5kIGluc3RlYWQgcGxhY2VzIHRoZQordmFyaWFibGUgYXJndW1lbnRzIGFmdGVyIHRoZSBjb21tYS4gIEp1c3QgbGlrZSBhbnkgb3RoZXIgcGFzdGVkIG1hY3JvCithcmd1bWVudCwgdGhlc2UgYXJndW1lbnRzIGFyZSBub3QgbWFjcm8gZXhwYW5kZWQuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ZlY3Rvci1FeHRlbnNpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1ZlY3Rvci1FeHRlbnNpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyMzg2MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVmVjdG9yLUV4dGVuc2lvbnMuaHRtbApAQCAtMCwwICsxLDIwMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VmVjdG9yIEV4dGVuc2lvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIiB0aXRsZT0iQyBFeHRlbnNpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUmV0dXJuLUFkZHJlc3MuaHRtbCNSZXR1cm4tQWRkcmVzcyIgdGl0bGU9IlJldHVybiBBZGRyZXNzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT2Zmc2V0b2YuaHRtbCNPZmZzZXRvZiIgdGl0bGU9Ik9mZnNldG9mIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlZlY3Rvci1FeHRlbnNpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9mZnNldG9mLmh0bWwjT2Zmc2V0b2YiPk9mZnNldG9mPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUmV0dXJuLUFkZHJlc3MuaHRtbCNSZXR1cm4tQWRkcmVzcyI+UmV0dXJuIEFkZHJlc3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNDkgVXNpbmcgVmVjdG9yIEluc3RydWN0aW9ucyB0aHJvdWdoIEJ1aWx0LWluIEZ1bmN0aW9uczwvaDM+CisKKzxwPk9uIHNvbWUgdGFyZ2V0cywgdGhlIGluc3RydWN0aW9uIHNldCBjb250YWlucyBTSU1EIHZlY3RvciBpbnN0cnVjdGlvbnMgd2hpY2gKK29wZXJhdGUgb24gbXVsdGlwbGUgdmFsdWVzIGNvbnRhaW5lZCBpbiBvbmUgbGFyZ2UgcmVnaXN0ZXIgYXQgdGhlIHNhbWUgdGltZS4gCitGb3IgZXhhbXBsZSwgb24gdGhlIGkzODYgdGhlIE1NWCwgM0ROb3chIGFuZCBTU0UgZXh0ZW5zaW9ucyBjYW4gYmUgdXNlZAordGhpcyB3YXkuCisKKyA8cD5UaGUgZmlyc3Qgc3RlcCBpbiB1c2luZyB0aGVzZSBleHRlbnNpb25zIGlzIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBkYXRhCit0eXBlcy4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgdXNpbmcgYW4gYXBwcm9wcmlhdGUgPGNvZGU+dHlwZWRlZjwvY29kZT46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB0eXBlZGVmIGludCB2NHNpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7Cis8L3ByZT4KKyA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZSA8Y29kZT5pbnQ8L2NvZGU+IHR5cGUgc3BlY2lmaWVzIHRoZSBiYXNlIHR5cGUsIHdoaWxlIHRoZSBhdHRyaWJ1dGUgc3BlY2lmaWVzCit0aGUgdmVjdG9yIHNpemUgZm9yIHRoZSB2YXJpYWJsZSwgbWVhc3VyZWQgaW4gYnl0ZXMuICBGb3IgZXhhbXBsZSwgdGhlCitkZWNsYXJhdGlvbiBhYm92ZSBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIHNldCB0aGUgbW9kZSBmb3IgdGhlIDxjb2RlPnY0c2k8L2NvZGU+Cit0eXBlIHRvIGJlIDE2IGJ5dGVzIHdpZGUgYW5kIGRpdmlkZWQgaW50byA8Y29kZT5pbnQ8L2NvZGU+IHNpemVkIHVuaXRzLiAgRm9yCithIDMyLWJpdCA8Y29kZT5pbnQ8L2NvZGU+IHRoaXMgbWVhbnMgYSB2ZWN0b3Igb2YgNCB1bml0cyBvZiA0IGJ5dGVzLCBhbmQgdGhlCitjb3JyZXNwb25kaW5nIG1vZGUgb2YgPGNvZGU+Zm9vPC9jb2RlPiBpcyA8YWNyb255bT5WNFNJPC9hY3JvbnltPi4KKworIDxwPlRoZSA8Y29kZT52ZWN0b3Jfc2l6ZTwvY29kZT4gYXR0cmlidXRlIGlzIG9ubHkgYXBwbGljYWJsZSB0byBpbnRlZ3JhbCBhbmQKK2Zsb2F0IHNjYWxhcnMsIGFsdGhvdWdoIGFycmF5cywgcG9pbnRlcnMsIGFuZCBmdW5jdGlvbiByZXR1cm4gdmFsdWVzCithcmUgYWxsb3dlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgY29uc3RydWN0LiBPbmx5IHNpemVzIHRoYXQgYXJlCithIHBvd2VyIG9mIHR3byBhcmUgY3VycmVudGx5IGFsbG93ZWQuCisKKyA8cD5BbGwgdGhlIGJhc2ljIGludGVnZXIgdHlwZXMgY2FuIGJlIHVzZWQgYXMgYmFzZSB0eXBlcywgYm90aCBhcyBzaWduZWQKK2FuZCBhcyB1bnNpZ25lZDogPGNvZGU+Y2hhcjwvY29kZT4sIDxjb2RlPnNob3J0PC9jb2RlPiwgPGNvZGU+aW50PC9jb2RlPiwgPGNvZGU+bG9uZzwvY29kZT4sCis8Y29kZT5sb25nIGxvbmc8L2NvZGU+LiAgSW4gYWRkaXRpb24sIDxjb2RlPmZsb2F0PC9jb2RlPiBhbmQgPGNvZGU+ZG91YmxlPC9jb2RlPiBjYW4gYmUKK3VzZWQgdG8gYnVpbGQgZmxvYXRpbmctcG9pbnQgdmVjdG9yIHR5cGVzLgorCisgPHA+U3BlY2lmeWluZyBhIGNvbWJpbmF0aW9uIHRoYXQgaXMgbm90IHZhbGlkIGZvciB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUKK2NhdXNlcyBHQ0MgdG8gc3ludGhlc2l6ZSB0aGUgaW5zdHJ1Y3Rpb25zIHVzaW5nIGEgbmFycm93ZXIgbW9kZS4gCitGb3IgZXhhbXBsZSwgaWYgeW91IHNwZWNpZnkgYSB2YXJpYWJsZSBvZiB0eXBlIDxjb2RlPlY0U0k8L2NvZGU+IGFuZCB5b3VyCithcmNoaXRlY3R1cmUgZG9lcyBub3QgYWxsb3cgZm9yIHRoaXMgc3BlY2lmaWMgU0lNRCB0eXBlLCBHQ0MKK3Byb2R1Y2VzIGNvZGUgdGhhdCB1c2VzIDQgPGNvZGU+U0lzPC9jb2RlPi4KKworIDxwPlRoZSB0eXBlcyBkZWZpbmVkIGluIHRoaXMgbWFubmVyIGNhbiBiZSB1c2VkIHdpdGggYSBzdWJzZXQgb2Ygbm9ybWFsIEMKK29wZXJhdGlvbnMuICBDdXJyZW50bHksIEdDQyBhbGxvd3MgdXNpbmcgdGhlIGZvbGxvd2luZyBvcGVyYXRvcnMKK29uIHRoZXNlIHR5cGVzOiA8Y29kZT4rLCAtLCAqLCAvLCB1bmFyeSBtaW51cywgXiwgfCwgJmFtcDssIH4sICU8L2NvZGU+LgorCisgPHA+VGhlIG9wZXJhdGlvbnMgYmVoYXZlIGxpa2UgQysrIDxjb2RlPnZhbGFycmF5czwvY29kZT4uICBBZGRpdGlvbiBpcyBkZWZpbmVkIGFzCit0aGUgYWRkaXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgb2YgdGhlIG9wZXJhbmRzLiAgRm9yCitleGFtcGxlLCBpbiB0aGUgY29kZSBiZWxvdywgZWFjaCBvZiB0aGUgNCBlbGVtZW50cyBpbiA8dmFyPmE8L3Zhcj4gaXMKK2FkZGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIDQgZWxlbWVudHMgaW4gPHZhcj5iPC92YXI+IGFuZCB0aGUgcmVzdWx0aW5nCit2ZWN0b3IgaXMgc3RvcmVkIGluIDx2YXI+YzwvdmFyPi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHR5cGVkZWYgaW50IHY0c2kgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsKKyAgICAgCisgICAgIHY0c2kgYSwgYiwgYzsKKyAgICAgCisgICAgIGMgPSBhICsgYjsKKzwvcHJlPgorIDxwPlN1YnRyYWN0aW9uLCBtdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIGFuZCB0aGUgbG9naWNhbCBvcGVyYXRpb25zCitvcGVyYXRlIGluIGEgc2ltaWxhciBtYW5uZXIuICBMaWtld2lzZSwgdGhlIHJlc3VsdCBvZiB1c2luZyB0aGUgdW5hcnkKK21pbnVzIG9yIGNvbXBsZW1lbnQgb3BlcmF0b3JzIG9uIGEgdmVjdG9yIHR5cGUgaXMgYSB2ZWN0b3Igd2hvc2UKK2VsZW1lbnRzIGFyZSB0aGUgbmVnYXRpdmUgb3IgY29tcGxlbWVudGVkIHZhbHVlcyBvZiB0aGUgY29ycmVzcG9uZGluZworZWxlbWVudHMgaW4gdGhlIG9wZXJhbmQuCisKKyA8cD5JdCBpcyBwb3NzaWJsZSB0byB1c2Ugc2hpZnRpbmcgb3BlcmF0b3JzIDxjb2RlPiZsdDsmbHQ7PC9jb2RlPiwgPGNvZGU+Jmd0OyZndDs8L2NvZGU+IG9uCitpbnRlZ2VyLXR5cGUgdmVjdG9ycy4gVGhlIG9wZXJhdGlvbiBpcyBkZWZpbmVkIGFzIGZvbGxvd2luZzogPGNvZGU+e2EwLAorYTEsIC4uLiwgYW59ICZndDsmZ3Q7IHtiMCwgYjEsIC4uLiwgYm59ID09IHthMCAmZ3Q7Jmd0OyBiMCwgYTEgJmd0OyZndDsgYjEsCisuLi4sIGFuICZndDsmZ3Q7IGJufTwvY29kZT4uIFZlY3RvciBvcGVyYW5kcyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mCitlbGVtZW50cy4KKworIDxwPkZvciBjb252ZW5pZW5jZSwgaXQgaXMgYWxsb3dlZCB0byB1c2UgYSBiaW5hcnkgdmVjdG9yIG9wZXJhdGlvbgord2hlcmUgb25lIG9wZXJhbmQgaXMgYSBzY2FsYXIuIEluIHRoYXQgY2FzZSB0aGUgY29tcGlsZXIgdHJhbnNmb3JtcwordGhlIHNjYWxhciBvcGVyYW5kIGludG8gYSB2ZWN0b3Igd2hlcmUgZWFjaCBlbGVtZW50IGlzIHRoZSBzY2FsYXIgZnJvbQordGhlIG9wZXJhdGlvbi4gVGhlIHRyYW5zZm9ybWF0aW9uIGhhcHBlbnMgb25seSBpZiB0aGUgc2NhbGFyIGNvdWxkIGJlCitzYWZlbHkgY29udmVydGVkIHRvIHRoZSB2ZWN0b3ItZWxlbWVudCB0eXBlLiAKK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHR5cGVkZWYgaW50IHY0c2kgX19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplICgxNikpKTsKKyAgICAgCisgICAgIHY0c2kgYSwgYiwgYzsKKyAgICAgbG9uZyBsOworICAgICAKKyAgICAgYSA9IGIgKyAxOyAgICAvKiBhID0gYiArIHsxLDEsMSwxfTsgKi8KKyAgICAgYSA9IDIgKiBiOyAgICAvKiBhID0gezIsMiwyLDJ9ICogYjsgKi8KKyAgICAgCisgICAgIGEgPSBsICsgYTsgICAgLyogRXJyb3IsIGNhbm5vdCBjb252ZXJ0IGxvbmcgdG8gaW50LiAqLworPC9wcmU+CisgPHA+VmVjdG9ycyBjYW4gYmUgc3Vic2NyaXB0ZWQgYXMgaWYgdGhlIHZlY3RvciB3ZXJlIGFuIGFycmF5IHdpdGgKK3RoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cyBhbmQgYmFzZSB0eXBlLiAgT3V0IG9mIGJvdW5kIGFjY2Vzc2VzCitpbnZva2UgdW5kZWZpbmVkIGJlaGF2aW9yIGF0IHJ1biB0aW1lLiAgV2FybmluZ3MgZm9yIG91dCBvZiBib3VuZAorYWNjZXNzZXMgZm9yIHZlY3RvciBzdWJzY3JpcHRpb24gY2FuIGJlIGVuYWJsZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhcnJheS1ib3VuZHM8L3NwYW4+PC9zYW1wPi4KKworIDxwPlZlY3RvciBjb21wYXJpc29uIGlzIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGNvbXBhcmlzb24KK29wZXJhdG9yczogPGNvZGU+PT0sICE9LCAmbHQ7LCAmbHQ7PSwgJmd0OywgJmd0Oz08L2NvZGU+LiBDb21wYXJpc29uIG9wZXJhbmRzIGNhbiBiZQordmVjdG9yIGV4cHJlc3Npb25zIG9mIGludGVnZXItdHlwZSBvciByZWFsLXR5cGUuIENvbXBhcmlzb24gYmV0d2VlbgoraW50ZWdlci10eXBlIHZlY3RvcnMgYW5kIHJlYWwtdHlwZSB2ZWN0b3JzIGFyZSBub3Qgc3VwcG9ydGVkLiAgVGhlCityZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gaXMgYSB2ZWN0b3Igb2YgdGhlIHNhbWUgd2lkdGggYW5kIG51bWJlciBvZgorZWxlbWVudHMgYXMgdGhlIGNvbXBhcmlzb24gb3BlcmFuZHMgd2l0aCBhIHNpZ25lZCBpbnRlZ3JhbCBlbGVtZW50Cit0eXBlLgorCisgPHA+VmVjdG9ycyBhcmUgY29tcGFyZWQgZWxlbWVudC13aXNlIHByb2R1Y2luZyAwIHdoZW4gY29tcGFyaXNvbiBpcyBmYWxzZQorYW5kIC0xIChjb25zdGFudCBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZSB3aGVyZSBhbGwgYml0cyBhcmUgc2V0KQorb3RoZXJ3aXNlLiBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB0eXBlZGVmIGludCB2NHNpIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7CisgICAgIAorICAgICB2NHNpIGEgPSB7MSwyLDMsNH07CisgICAgIHY0c2kgYiA9IHszLDIsMSw0fTsKKyAgICAgdjRzaSBjOworICAgICAKKyAgICAgYyA9IGEgJmd0OyAgYjsgICAgIC8qIFRoZSByZXN1bHQgd291bGQgYmUgezAsIDAsLTEsIDB9ICAqLworICAgICBjID0gYSA9PSBiOyAgICAgLyogVGhlIHJlc3VsdCB3b3VsZCBiZSB7MCwtMSwgMCwtMX0gICovCis8L3ByZT4KKyA8cD5WZWN0b3Igc2h1ZmZsaW5nIGlzIGF2YWlsYWJsZSB1c2luZyBmdW5jdGlvbnMKKzxjb2RlPl9fYnVpbHRpbl9zaHVmZmxlICh2ZWMsIG1hc2spPC9jb2RlPiBhbmQKKzxjb2RlPl9fYnVpbHRpbl9zaHVmZmxlICh2ZWMwLCB2ZWMxLCBtYXNrKTwvY29kZT4uIAorQm90aCBmdW5jdGlvbnMgY29uc3RydWN0IGEgcGVybXV0YXRpb24gb2YgZWxlbWVudHMgZnJvbSBvbmUgb3IgdHdvCit2ZWN0b3JzIGFuZCByZXR1cm4gYSB2ZWN0b3Igb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgaW5wdXQgdmVjdG9yKHMpLiAKK1RoZSA8dmFyPm1hc2s8L3Zhcj4gaXMgYW4gaW50ZWdyYWwgdmVjdG9yIHdpdGggdGhlIHNhbWUgd2lkdGggKDx2YXI+VzwvdmFyPikKK2FuZCBlbGVtZW50IGNvdW50ICg8dmFyPk48L3Zhcj4pIGFzIHRoZSBvdXRwdXQgdmVjdG9yLgorCisgPHA+VGhlIGVsZW1lbnRzIG9mIHRoZSBpbnB1dCB2ZWN0b3JzIGFyZSBudW1iZXJlZCBpbiBtZW1vcnkgb3JkZXJpbmcgb2YKKzx2YXI+dmVjMDwvdmFyPiBiZWdpbm5pbmcgYXQgMCBhbmQgPHZhcj52ZWMxPC92YXI+IGJlZ2lubmluZyBhdCA8dmFyPk48L3Zhcj4uICBUaGUKK2VsZW1lbnRzIG9mIDx2YXI+bWFzazwvdmFyPiBhcmUgY29uc2lkZXJlZCBtb2R1bG8gPHZhcj5OPC92YXI+IGluIHRoZSBzaW5nbGUtb3BlcmFuZAorY2FzZSBhbmQgbW9kdWxvIDIqPHZhcj5OPC92YXI+IGluIHRoZSB0d28tb3BlcmFuZCBjYXNlLgorCisgPHA+Q29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlLAorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdHlwZWRlZiBpbnQgdjRzaSBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDE2KSkpOworICAgICAKKyAgICAgdjRzaSBhID0gezEsMiwzLDR9OworICAgICB2NHNpIGIgPSB7NSw2LDcsOH07CisgICAgIHY0c2kgbWFzazEgPSB7MCwxLDEsM307CisgICAgIHY0c2kgbWFzazIgPSB7MCw0LDIsNX07CisgICAgIHY0c2kgcmVzOworICAgICAKKyAgICAgcmVzID0gX19idWlsdGluX3NodWZmbGUgKGEsIG1hc2sxKTsgICAgICAgLyogcmVzIGlzIHsxLDIsMiw0fSAgKi8KKyAgICAgcmVzID0gX19idWlsdGluX3NodWZmbGUgKGEsIGIsIG1hc2syKTsgICAgLyogcmVzIGlzIHsxLDUsMyw2fSAgKi8KKzwvcHJlPgorIDxwPk5vdGUgdGhhdCA8Y29kZT5fX2J1aWx0aW5fc2h1ZmZsZTwvY29kZT4gaXMgaW50ZW50aW9uYWxseSBzZW1hbnRpY2FsbHkKK2NvbXBhdGlibGUgd2l0aCB0aGUgT3BlbkNMIDxjb2RlPnNodWZmbGU8L2NvZGU+IGFuZCA8Y29kZT5zaHVmZmxlMjwvY29kZT4gZnVuY3Rpb25zLgorCisgPHA+WW91IGNhbiBkZWNsYXJlIHZhcmlhYmxlcyBhbmQgdXNlIHRoZW0gaW4gZnVuY3Rpb24gY2FsbHMgYW5kIHJldHVybnMsIGFzCit3ZWxsIGFzIGluIGFzc2lnbm1lbnRzIGFuZCBzb21lIGNhc3RzLiAgWW91IGNhbiBzcGVjaWZ5IGEgdmVjdG9yIHR5cGUgYXMKK2EgcmV0dXJuIHR5cGUgZm9yIGEgZnVuY3Rpb24uICBWZWN0b3IgdHlwZXMgY2FuIGFsc28gYmUgdXNlZCBhcyBmdW5jdGlvbgorYXJndW1lbnRzLiAgSXQgaXMgcG9zc2libGUgdG8gY2FzdCBmcm9tIG9uZSB2ZWN0b3IgdHlwZSB0byBhbm90aGVyLAorcHJvdmlkZWQgdGhleSBhcmUgb2YgdGhlIHNhbWUgc2l6ZSAoaW4gZmFjdCwgeW91IGNhbiBhbHNvIGNhc3QgdmVjdG9ycwordG8gYW5kIGZyb20gb3RoZXIgZGF0YXR5cGVzIG9mIHRoZSBzYW1lIHNpemUpLgorCisgPHA+WW91IGNhbm5vdCBvcGVyYXRlIGJldHdlZW4gdmVjdG9ycyBvZiBkaWZmZXJlbnQgbGVuZ3RocyBvciBkaWZmZXJlbnQKK3NpZ25lZG5lc3Mgd2l0aG91dCBhIGNhc3QuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Zpc2liaWxpdHktUHJhZ21hcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9WaXNpYmlsaXR5LVByYWdtYXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQ1NTJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9WaXNpYmlsaXR5LVByYWdtYXMuaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WaXNpYmlsaXR5IFByYWdtYXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUHJhZ21hcy5odG1sI1ByYWdtYXMiIHRpdGxlPSJQcmFnbWFzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGlhZ25vc3RpYy1QcmFnbWFzLmh0bWwjRGlhZ25vc3RpYy1QcmFnbWFzIiB0aXRsZT0iRGlhZ25vc3RpYyBQcmFnbWFzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMuaHRtbCNQdXNoXzAwMmZQb3AtTWFjcm8tUHJhZ21hcyIgdGl0bGU9IlB1c2gvUG9wIE1hY3JvIFByYWdtYXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVmlzaWJpbGl0eS1QcmFnbWFzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlB1c2hfMDAyZlBvcC1NYWNyby1QcmFnbWFzLmh0bWwjUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMiPlB1c2gvUG9wIE1hY3JvIFByYWdtYXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEaWFnbm9zdGljLVByYWdtYXMuaHRtbCNEaWFnbm9zdGljLVByYWdtYXMiPkRpYWdub3N0aWMgUHJhZ21hczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIj5QcmFnbWFzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni41OC4xMSBWaXNpYmlsaXR5IFByYWdtYXM8L2g0PgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4jcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goPC9jb2RlPjx2YXI+dmlzaWJpbGl0eTwvdmFyPjxjb2RlPik8L2NvZGU+PGR0Pjxjb2RlPiNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wcmFnbWFfMDAyYy12aXNpYmlsaXR5LTM0NzYiPjwvYT4KK1RoaXMgcHJhZ21hIGFsbG93cyB0aGUgdXNlciB0byBzZXQgdGhlIHZpc2liaWxpdHkgZm9yIG11bHRpcGxlCitkZWNsYXJhdGlvbnMgd2l0aG91dCBoYXZpbmcgdG8gZ2l2ZSBlYWNoIGEgdmlzaWJpbGl0eSBhdHRyaWJ1dGUKK1NlZSA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4sIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHZpc2liaWxpdHkgYW5kCit0aGUgYXR0cmlidXRlIHN5bnRheC4KKworICAgICA8cD5JbiBDKyssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I3ByYWdtYSBHQ0MgdmlzaWJpbGl0eTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhZmZlY3RzIG9ubHkgbmFtZXNwYWNlLXNjb3BlCitkZWNsYXJhdGlvbnMuICBDbGFzcyBtZW1iZXJzIGFuZCB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMgYXJlIG5vdAorYWZmZWN0ZWQ7IGlmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSB2aXNpYmlsaXR5IGZvciBhIHBhcnRpY3VsYXIKK21lbWJlciBvciBpbnN0YW50aWF0aW9uLCB5b3UgbXVzdCB1c2UgYW4gYXR0cmlidXRlLgorCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9Wb2xhdGlsZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVm9sYXRpbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxZGNmNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVm9sYXRpbGVzLmh0bWwKQEAgLTAsMCArMSwxMjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZvbGF0aWxlcyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbmxpbmUuaHRtbCNJbmxpbmUiIHRpdGxlPSJJbmxpbmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFeHRlbmRlZC1Bc20uaHRtbCNFeHRlbmRlZC1Bc20iIHRpdGxlPSJFeHRlbmRlZCBBc20iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVm9sYXRpbGVzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI0V4dGVuZGVkLUFzbSI+RXh0ZW5kZWQgQXNtPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIj5JbmxpbmU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNDAgV2hlbiBpcyBhIFZvbGF0aWxlIE9iamVjdCBBY2Nlc3NlZD88L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hY2Nlc3Npbmctdm9sYXRpbGVzLTI4MDAiPjwvYT48YSBuYW1lPSJpbmRleC12b2xhdGlsZS1yZWFkLTI4MDEiPjwvYT48YSBuYW1lPSJpbmRleC12b2xhdGlsZS13cml0ZS0yODAyIj48L2E+PGEgbmFtZT0iaW5kZXgtdm9sYXRpbGUtYWNjZXNzLTI4MDMiPjwvYT4KK0MgaGFzIHRoZSBjb25jZXB0IG9mIHZvbGF0aWxlIG9iamVjdHMuICBUaGVzZSBhcmUgbm9ybWFsbHkgYWNjZXNzZWQgYnkKK3BvaW50ZXJzIGFuZCB1c2VkIGZvciBhY2Nlc3NpbmcgaGFyZHdhcmUgb3IgaW50ZXItdGhyZWFkCitjb21tdW5pY2F0aW9uLiAgVGhlIHN0YW5kYXJkIGVuY291cmFnZXMgY29tcGlsZXJzIHRvIHJlZnJhaW4gZnJvbQorb3B0aW1pemF0aW9ucyBjb25jZXJuaW5nIGFjY2Vzc2VzIHRvIHZvbGF0aWxlIG9iamVjdHMsIGJ1dCBsZWF2ZXMgaXQKK2ltcGxlbWVudGF0aW9uIGRlZmluZWQgYXMgdG8gd2hhdCBjb25zdGl0dXRlcyBhIHZvbGF0aWxlIGFjY2Vzcy4gIFRoZQorbWluaW11bSByZXF1aXJlbWVudCBpcyB0aGF0IGF0IGEgc2VxdWVuY2UgcG9pbnQgYWxsIHByZXZpb3VzIGFjY2Vzc2VzCit0byB2b2xhdGlsZSBvYmplY3RzIGhhdmUgc3RhYmlsaXplZCBhbmQgbm8gc3Vic2VxdWVudCBhY2Nlc3NlcyBoYXZlCitvY2N1cnJlZC4gIFRodXMgYW4gaW1wbGVtZW50YXRpb24gaXMgZnJlZSB0byByZW9yZGVyIGFuZCBjb21iaW5lCit2b2xhdGlsZSBhY2Nlc3NlcyB0aGF0IG9jY3VyIGJldHdlZW4gc2VxdWVuY2UgcG9pbnRzLCBidXQgY2Fubm90IGRvCitzbyBmb3IgYWNjZXNzZXMgYWNyb3NzIGEgc2VxdWVuY2UgcG9pbnQuICBUaGUgdXNlIG9mIHZvbGF0aWxlIGRvZXMKK25vdCBhbGxvdyB5b3UgdG8gdmlvbGF0ZSB0aGUgcmVzdHJpY3Rpb24gb24gdXBkYXRpbmcgb2JqZWN0cyBtdWx0aXBsZQordGltZXMgYmV0d2VlbiB0d28gc2VxdWVuY2UgcG9pbnRzLgorCisgPHA+QWNjZXNzZXMgdG8gbm9uLXZvbGF0aWxlIG9iamVjdHMgYXJlIG5vdCBvcmRlcmVkIHdpdGggcmVzcGVjdCB0bwordm9sYXRpbGUgYWNjZXNzZXMuICBZb3UgY2Fubm90IHVzZSBhIHZvbGF0aWxlIG9iamVjdCBhcyBhIG1lbW9yeQorYmFycmllciB0byBvcmRlciBhIHNlcXVlbmNlIG9mIHdyaXRlcyB0byBub24tdm9sYXRpbGUgbWVtb3J5LiAgRm9yCitpbnN0YW5jZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCAqcHRyID0gPHZhcj5zb21ldGhpbmc8L3Zhcj47CisgICAgIHZvbGF0aWxlIGludCB2b2JqOworICAgICAqcHRyID0gPHZhcj5zb21ldGhpbmc8L3Zhcj47CisgICAgIHZvYmogPSAxOworPC9wcmU+CisgPHAgY2xhc3M9Im5vaW5kZW50Ij5Vbmxlc3MgPHZhcj4qcHRyPC92YXI+IGFuZCA8dmFyPnZvYmo8L3Zhcj4gY2FuIGJlIGFsaWFzZWQsIGl0IGlzIG5vdCBndWFyYW50ZWVkCit0aGF0IHRoZSB3cml0ZSB0byA8dmFyPipwdHI8L3Zhcj4gb2NjdXJzIGJ5IHRoZSB0aW1lIHRoZSB1cGRhdGUKK29mIDx2YXI+dm9iajwvdmFyPiBoYXBwZW5zLiAgSWYgeW91IG5lZWQgdGhpcyBndWFyYW50ZWUsIHlvdSBtdXN0IHVzZQorYSBzdHJvbmdlciBtZW1vcnkgYmFycmllciBzdWNoIGFzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgaW50ICpwdHIgPSA8dmFyPnNvbWV0aGluZzwvdmFyPjsKKyAgICAgdm9sYXRpbGUgaW50IHZvYmo7CisgICAgICpwdHIgPSA8dmFyPnNvbWV0aGluZzwvdmFyPjsKKyAgICAgYXNtIHZvbGF0aWxlICgiIiA6IDogOiAibWVtb3J5Iik7CisgICAgIHZvYmogPSAxOworPC9wcmU+CisgPHA+QSBzY2FsYXIgdm9sYXRpbGUgb2JqZWN0IGlzIHJlYWQgd2hlbiBpdCBpcyBhY2Nlc3NlZCBpbiBhIHZvaWQgY29udGV4dDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHZvbGF0aWxlIGludCAqc3JjID0gPHZhcj5zb21ldmFsdWU8L3Zhcj47CisgICAgICpzcmM7Cis8L3ByZT4KKyA8cD5TdWNoIGV4cHJlc3Npb25zIGFyZSBydmFsdWVzLCBhbmQgR0NDIGltcGxlbWVudHMgdGhpcyBhcyBhCityZWFkIG9mIHRoZSB2b2xhdGlsZSBvYmplY3QgYmVpbmcgcG9pbnRlZCB0by4KKworIDxwPkFzc2lnbm1lbnRzIGFyZSBhbHNvIGV4cHJlc3Npb25zIGFuZCBoYXZlIGFuIHJ2YWx1ZS4gIEhvd2V2ZXIgd2hlbgorYXNzaWduaW5nIHRvIGEgc2NhbGFyIHZvbGF0aWxlLCB0aGUgdm9sYXRpbGUgb2JqZWN0IGlzIG5vdCByZXJlYWQsCityZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lvbidzIHJ2YWx1ZSBpcyB1c2VkIG9yCitub3QuICBJZiB0aGUgYXNzaWdubWVudCdzIHJ2YWx1ZSBpcyB1c2VkLCB0aGUgdmFsdWUgaXMgdGhhdCBhc3NpZ25lZAordG8gdGhlIHZvbGF0aWxlIG9iamVjdC4gIEZvciBpbnN0YW5jZSwgdGhlcmUgaXMgbm8gcmVhZCBvZiA8dmFyPnZvYmo8L3Zhcj4KK2luIGFsbCB0aGUgZm9sbG93aW5nIGNhc2VzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgaW50IG9iajsKKyAgICAgdm9sYXRpbGUgaW50IHZvYmo7CisgICAgIHZvYmogPSA8dmFyPnNvbWV0aGluZzwvdmFyPjsKKyAgICAgb2JqID0gdm9iaiA9IDx2YXI+c29tZXRoaW5nPC92YXI+OworICAgICBvYmogPyB2b2JqID0gPHZhcj5vbmV0aGluZzwvdmFyPiA6IHZvYmogPSA8dmFyPmFub3RoZXJ0aGluZzwvdmFyPjsKKyAgICAgb2JqID0gKDx2YXI+c29tZXRoaW5nPC92YXI+LCB2b2JqID0gPHZhcj5hbm90aGVydGhpbmc8L3Zhcj4pOworPC9wcmU+CisgPHA+SWYgeW91IG5lZWQgdG8gcmVhZCB0aGUgdm9sYXRpbGUgb2JqZWN0IGFmdGVyIGFuIGFzc2lnbm1lbnQgaGFzCitvY2N1cnJlZCwgeW91IG11c3QgdXNlIGEgc2VwYXJhdGUgZXhwcmVzc2lvbiB3aXRoIGFuIGludGVydmVuaW5nCitzZXF1ZW5jZSBwb2ludC4KKworIDxwPkFzIGJpdC1maWVsZHMgYXJlIG5vdCBpbmRpdmlkdWFsbHkgYWRkcmVzc2FibGUsIHZvbGF0aWxlIGJpdC1maWVsZHMgbWF5CitiZSBpbXBsaWNpdGx5IHJlYWQgd2hlbiB3cml0dGVuIHRvLCBvciB3aGVuIGFkamFjZW50IGJpdC1maWVsZHMgYXJlCithY2Nlc3NlZC4gIEJpdC1maWVsZCBvcGVyYXRpb25zIG1heSBiZSBvcHRpbWl6ZWQgc3VjaCB0aGF0IGFkamFjZW50CitiaXQtZmllbGRzIGFyZSBvbmx5IHBhcnRpYWxseSBhY2Nlc3NlZCwgaWYgdGhleSBzdHJhZGRsZSBhIHN0b3JhZ2UgdW5pdAorYm91bmRhcnkuICBGb3IgdGhlc2UgcmVhc29ucyBpdCBpcyB1bndpc2UgdG8gdXNlIHZvbGF0aWxlIGJpdC1maWVsZHMgdG8KK2FjY2VzcyBoYXJkd2FyZS4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvVnhXb3Jrcy1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Z4V29ya3MtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZTNlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1Z4V29ya3MtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZ4V29ya3MgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJWTVMtT3B0aW9ucy5odG1sI1ZNUy1PcHRpb25zIiB0aXRsZT0iVk1TIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ4ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCN4ODZfMDAyZDY0LU9wdGlvbnMiIHRpdGxlPSJ4ODYtNjQgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWeFdvcmtzLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ieDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwjeDg2XzAwMmQ2NC1PcHRpb25zIj54ODYtNjQgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZNUy1PcHRpb25zLmh0bWwjVk1TLU9wdGlvbnMiPlZNUyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjQ4IFZ4V29ya3MgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVZ4V29ya3MtT3B0aW9ucy0yMjk4Ij48L2E+CitUaGUgb3B0aW9ucyBpbiB0aGlzIHNlY3Rpb24gYXJlIGRlZmluZWQgZm9yIGFsbCBWeFdvcmtzIHRhcmdldHMuIAorT3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFyZSBsaXN0ZWQgd2l0aCB0aGUgb3RoZXIKK29wdGlvbnMgZm9yIHRoYXQgdGFyZ2V0LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tbXJ0cDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXJ0cC0yMjk5Ij48L2E+R0NDIGNhbiBnZW5lcmF0ZSBjb2RlIGZvciBib3RoIFZ4V29ya3Mga2VybmVscyBhbmQgcmVhbCB0aW1lIHByb2Nlc3NlcworKFJUUHMpLiAgVGhpcyBvcHRpb24gc3dpdGNoZXMgZnJvbSB0aGUgZm9ybWVyIHRvIHRoZSBsYXR0ZXIuICBJdCBhbHNvCitkZWZpbmVzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gPGNvZGU+X19SVFBfXzwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm9uLXN0YXRpYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbm9uXzAwMmRzdGF0aWMtMjMwMCI+PC9hPkxpbmsgYW4gUlRQIGV4ZWN1dGFibGUgYWdhaW5zdCBzaGFyZWQgbGlicmFyaWVzIHJhdGhlciB0aGFuIHN0YXRpYworbGlicmFyaWVzLiAgVGhlIG9wdGlvbnMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0YXRpYzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc2hhcmVkPC9zcGFuPjwvc2FtcD4gY2FuCithbHNvIGJlIHVzZWQgZm9yIFJUUHMgKHNlZSA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT4pOyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RhdGljPC9zcGFuPjwvc2FtcD4KK2lzIHRoZSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUJzdGF0aWM8L2NvZGU+PGR0Pjxjb2RlPi1CZHluYW1pYzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtQnN0YXRpYy0yMzAxIj48L2E+PGEgbmFtZT0iaW5kZXgtQmR5bmFtaWMtMjMwMiI+PC9hPlRoZXNlIG9wdGlvbnMgYXJlIHBhc3NlZCBkb3duIHRvIHRoZSBsaW5rZXIuICBUaGV5IGFyZSBkZWZpbmVkIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIERpYWIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tWGJpbmQtbGF6eTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtWGJpbmRfMDAyZGxhenktMjMwMyI+PC9hPkVuYWJsZSBsYXp5IGJpbmRpbmcgb2YgZnVuY3Rpb24gY2FsbHMuICBUaGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2wsLXosbm93PC9zcGFuPjwvc2FtcD4gYW5kIGlzIGRlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBEaWFiLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVhiaW5kLW5vdzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtWGJpbmRfMDAyZG5vdy0yMzA0Ij48L2E+RGlzYWJsZSBsYXp5IGJpbmRpbmcgb2YgZnVuY3Rpb24gY2FsbHMuICBUaGlzIG9wdGlvbiBpcyB0aGUgZGVmYXVsdCBhbmQKK2lzIGRlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBEaWFiLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1dhcm5pbmctT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9XYXJuaW5nLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODk5NDFlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9XYXJuaW5nLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDE0MTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPldhcm5pbmcgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiIHRpdGxlPSJJbnZva2luZyBHQ0MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zLmh0bWwjTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucyIgdGl0bGU9Ikxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIiB0aXRsZT0iRGVidWdnaW5nIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iV2FybmluZy1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTGFuZ3VhZ2UtSW5kZXBlbmRlbnQtT3B0aW9ucy5odG1sI0xhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMiPkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkludm9raW5nIEdDQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuOCBPcHRpb25zIHRvIFJlcXVlc3Qgb3IgU3VwcHJlc3MgV2FybmluZ3M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zLXRvLWNvbnRyb2wtd2FybmluZ3MtMjQzIj48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZy1tZXNzYWdlcy0yNDQiPjwvYT48YSBuYW1lPSJpbmRleC1tZXNzYWdlc18wMDJjLXdhcm5pbmctMjQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3VwcHJlc3Npbmctd2FybmluZ3MtMjQ2Ij48L2E+CitXYXJuaW5ncyBhcmUgZGlhZ25vc3RpYyBtZXNzYWdlcyB0aGF0IHJlcG9ydCBjb25zdHJ1Y3Rpb25zIHRoYXQKK2FyZSBub3QgaW5oZXJlbnRseSBlcnJvbmVvdXMgYnV0IHRoYXQgYXJlIHJpc2t5IG9yIHN1Z2dlc3QgdGhlcmUKK21heSBoYXZlIGJlZW4gYW4gZXJyb3IuCisKKyA8cD5UaGUgZm9sbG93aW5nIGxhbmd1YWdlLWluZGVwZW5kZW50IG9wdGlvbnMgZG8gbm90IGVuYWJsZSBzcGVjaWZpYword2FybmluZ3MgYnV0IGNvbnRyb2wgdGhlIGtpbmRzIG9mIGRpYWdub3N0aWNzIHByb2R1Y2VkIGJ5IEdDQy4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LXN5bnRheC1jaGVja2luZy0yNDciPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LWZzeW50YXgtb25seTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZnN5bnRheF8wMDJkb25seS0yNDgiPjwvYT5DaGVjayB0aGUgY29kZSBmb3Igc3ludGF4IGVycm9ycywgYnV0IGRvbid0IGRvIGFueXRoaW5nIGJleW9uZCB0aGF0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZtYXgtZXJyb3JzPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZm1heF8wMDJkZXJyb3JzLTI0OSI+PC9hPkxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3IgbWVzc2FnZXMgdG8gPHZhcj5uPC92YXI+LCBhdCB3aGljaCBwb2ludAorR0NDIGJhaWxzIG91dCByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIHNvdXJjZQorY29kZS4gIElmIDx2YXI+bjwvdmFyPiBpcyAwICh0aGUgZGVmYXVsdCksIHRoZXJlIGlzIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIKK29mIGVycm9yIG1lc3NhZ2VzIHByb2R1Y2VkLiAgSWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmYXRhbC1lcnJvcnM8L3NwYW4+PC9zYW1wPiBpcyBhbHNvCitzcGVjaWZpZWQsIHRoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmYXRhbC1lcnJvcnM8L3NwYW4+PC9zYW1wPiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhpcworb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXctMjUwIj48L2E+SW5oaWJpdCBhbGwgd2FybmluZyBtZXNzYWdlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XZXJyb3I8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdlcnJvci0yNTEiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGVycm9yLTI1MiI+PC9hPk1ha2UgYWxsIHdhcm5pbmdzIGludG8gZXJyb3JzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdlcnJvcj08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdlcnJvcl8wMDNkLTI1MyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkZXJyb3JfMDAzZC0yNTQiPjwvYT5NYWtlIHRoZSBzcGVjaWZpZWQgd2FybmluZyBpbnRvIGFuIGVycm9yLiAgVGhlIHNwZWNpZmllciBmb3IgYSB3YXJuaW5nCitpcyBhcHBlbmRlZDsgZm9yIGV4YW1wbGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdlcnJvcj1zd2l0Y2g8L3NwYW4+PC9zYW1wPiB0dXJucyB0aGUgd2FybmluZ3MKK2NvbnRyb2xsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdzd2l0Y2g8L3NwYW4+PC9zYW1wPiBpbnRvIGVycm9ycy4gIFRoaXMgc3dpdGNoIHRha2VzIGEKK25lZ2F0aXZlIGZvcm0sIHRvIGJlIHVzZWQgdG8gbmVnYXRlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXJyb3I8L3NwYW4+PC9zYW1wPiBmb3Igc3BlY2lmaWMKK3dhcm5pbmdzOyBmb3IgZXhhbXBsZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLWVycm9yPXN3aXRjaDwvc3Bhbj48L3NhbXA+IG1ha2VzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3N3aXRjaDwvc3Bhbj48L3NhbXA+IHdhcm5pbmdzIG5vdCBiZSBlcnJvcnMsIGV2ZW4gd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Vycm9yPC9zcGFuPjwvc2FtcD4KK2lzIGluIGVmZmVjdC4KKworICAgICA8cD5UaGUgd2FybmluZyBtZXNzYWdlIGZvciBlYWNoIGNvbnRyb2xsYWJsZSB3YXJuaW5nIGluY2x1ZGVzIHRoZQorb3B0aW9uIHRoYXQgY29udHJvbHMgdGhlIHdhcm5pbmcuICBUaGF0IG9wdGlvbiBjYW4gdGhlbiBiZSB1c2VkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXJyb3I9PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tZXJyb3I9PC9zcGFuPjwvc2FtcD4gYXMgZGVzY3JpYmVkIGFib3ZlLiAKKyhQcmludGluZyBvZiB0aGUgb3B0aW9uIGluIHRoZSB3YXJuaW5nIG1lc3NhZ2UgY2FuIGJlIGRpc2FibGVkIHVzaW5nIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1kaWFnbm9zdGljcy1zaG93LW9wdGlvbjwvc3Bhbj48L3NhbXA+IGZsYWcuKQorCisgICAgIDxwPk5vdGUgdGhhdCBzcGVjaWZ5aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXJyb3I9PC9zcGFuPjwvc2FtcD48dmFyPmZvbzwvdmFyPiBhdXRvbWF0aWNhbGx5IGltcGxpZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XPC9zcGFuPjwvc2FtcD48dmFyPmZvbzwvdmFyPi4gIEhvd2V2ZXIsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tZXJyb3I9PC9zcGFuPjwvc2FtcD48dmFyPmZvbzwvdmFyPiBkb2VzIG5vdAoraW1wbHkgYW55dGhpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2ZhdGFsLWVycm9yczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2ZhdGFsXzAwMmRlcnJvcnMtMjU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRmYXRhbF8wMDJkZXJyb3JzLTI1NiI+PC9hPlRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gYWJvcnQgY29tcGlsYXRpb24gb24gdGhlIGZpcnN0IGVycm9yCitvY2N1cnJlZCByYXRoZXIgdGhhbiB0cnlpbmcgdG8ga2VlcCBnb2luZyBhbmQgcHJpbnRpbmcgZnVydGhlciBlcnJvcgorbWVzc2FnZXMuCisKKyA8L2RsPgorCisgPHA+WW91IGNhbiByZXF1ZXN0IG1hbnkgc3BlY2lmaWMgd2FybmluZ3Mgd2l0aCBvcHRpb25zIGJlZ2lubmluZyB3aXRoCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1XPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBmb3IgZXhhbXBsZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2ltcGxpY2l0PC9zcGFuPjwvc2FtcD4gdG8gcmVxdWVzdCB3YXJuaW5ncyBvbgoraW1wbGljaXQgZGVjbGFyYXRpb25zLiAgRWFjaCBvZiB0aGVzZSBzcGVjaWZpYyB3YXJuaW5nIG9wdGlvbnMgYWxzbworaGFzIGEgbmVnYXRpdmUgZm9ybSBiZWdpbm5pbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tV25vLTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byB0dXJuIG9mZiB3YXJuaW5nczsgZm9yCitleGFtcGxlLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLWltcGxpY2l0PC9zcGFuPjwvc2FtcD4uICBUaGlzIG1hbnVhbCBsaXN0cyBvbmx5IG9uZSBvZiB0aGUKK3R3byBmb3Jtcywgd2hpY2hldmVyIGlzIG5vdCB0aGUgZGVmYXVsdC4gIEZvciBmdXJ0aGVyCitsYW5ndWFnZS1zcGVjaWZpYyBvcHRpb25zIGFsc28gcmVmZXIgdG8gPGEgaHJlZj0iQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zLmh0bWwjQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5DKysgRGlhbGVjdCBPcHRpb25zPC9hPiBhbmQKKzxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+LgorCisgPHA+V2hlbiBhbiB1bnJlY29nbml6ZWQgd2FybmluZyBvcHRpb24gaXMgcmVxdWVzdGVkIChlLmcuLAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bmtub3duLXdhcm5pbmc8L3NwYW4+PC9zYW1wPiksIEdDQyBlbWl0cyBhIGRpYWdub3N0aWMgc3RhdGluZwordGhhdCB0aGUgb3B0aW9uIGlzIG5vdCByZWNvZ25pemVkLiAgSG93ZXZlciwgaWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tPC9zcGFuPjwvc2FtcD4gZm9ybQoraXMgdXNlZCwgdGhlIGJlaGF2aW9yIGlzIHNsaWdodGx5IGRpZmZlcmVudDogbm8gZGlhZ25vc3RpYyBpcworcHJvZHVjZWQgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tdW5rbm93bi13YXJuaW5nPC9zcGFuPjwvc2FtcD4gdW5sZXNzIG90aGVyIGRpYWdub3N0aWNzCithcmUgYmVpbmcgcHJvZHVjZWQuICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIG5ldyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMKK3dpdGggb2xkIGNvbXBpbGVycywgYnV0IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLCB0aGUgY29tcGlsZXIKK3dhcm5zIHRoYXQgYW4gdW5yZWNvZ25pemVkIG9wdGlvbiBpcyBwcmVzZW50LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tV3BlZGFudGljPC9jb2RlPjxkdD48Y29kZT4tcGVkYW50aWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LXBlZGFudGljLTI1NyI+PC9hPjxhIG5hbWU9ImluZGV4LVdwZWRhbnRpYy0yNTgiPjwvYT5Jc3N1ZSBhbGwgdGhlIHdhcm5pbmdzIGRlbWFuZGVkIGJ5IHN0cmljdCBJU08gQyBhbmQgSVNPIEMrKzsKK3JlamVjdCBhbGwgcHJvZ3JhbXMgdGhhdCB1c2UgZm9yYmlkZGVuIGV4dGVuc2lvbnMsIGFuZCBzb21lIG90aGVyCitwcm9ncmFtcyB0aGF0IGRvIG5vdCBmb2xsb3cgSVNPIEMgYW5kIElTTyBDKysuICBGb3IgSVNPIEMsIGZvbGxvd3MgdGhlCit2ZXJzaW9uIG9mIHRoZSBJU08gQyBzdGFuZGFyZCBzcGVjaWZpZWQgYnkgYW55IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gdXNlZC4KKworICAgICA8cD5WYWxpZCBJU08gQyBhbmQgSVNPIEMrKyBwcm9ncmFtcyBzaG91bGQgY29tcGlsZSBwcm9wZXJseSB3aXRoIG9yIHdpdGhvdXQKK3RoaXMgb3B0aW9uICh0aG91Z2ggYSByYXJlIGZldyByZXF1aXJlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1hbnNpPC9zcGFuPjwvc2FtcD4gb3IgYQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBzcGVjaWZ5aW5nIHRoZSByZXF1aXJlZCB2ZXJzaW9uIG9mIElTTyBDKS4gIEhvd2V2ZXIsCit3aXRob3V0IHRoaXMgb3B0aW9uLCBjZXJ0YWluIEdOVSBleHRlbnNpb25zIGFuZCB0cmFkaXRpb25hbCBDIGFuZCBDKysKK2ZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQgYXMgd2VsbC4gIFdpdGggdGhpcyBvcHRpb24sIHRoZXkgYXJlIHJlamVjdGVkLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XcGVkYW50aWM8L3NwYW4+PC9zYW1wPiBkb2VzIG5vdCBjYXVzZSB3YXJuaW5nIG1lc3NhZ2VzIGZvciB1c2Ugb2YgdGhlCithbHRlcm5hdGUga2V5d29yZHMgd2hvc2UgbmFtZXMgYmVnaW4gYW5kIGVuZCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X188L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBQZWRhbnRpYword2FybmluZ3MgYXJlIGFsc28gZGlzYWJsZWQgaW4gdGhlIGV4cHJlc3Npb24gdGhhdCBmb2xsb3dzCis8Y29kZT5fX2V4dGVuc2lvbl9fPC9jb2RlPi4gIEhvd2V2ZXIsIG9ubHkgc3lzdGVtIGhlYWRlciBmaWxlcyBzaG91bGQgdXNlCit0aGVzZSBlc2NhcGUgcm91dGVzOyBhcHBsaWNhdGlvbiBwcm9ncmFtcyBzaG91bGQgYXZvaWQgdGhlbS4gCitTZWUgPGEgaHJlZj0iQWx0ZXJuYXRlLUtleXdvcmRzLmh0bWwjQWx0ZXJuYXRlLUtleXdvcmRzIj5BbHRlcm5hdGUgS2V5d29yZHM8L2E+LgorCisgICAgIDxwPlNvbWUgdXNlcnMgdHJ5IHRvIHVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3BlZGFudGljPC9zcGFuPjwvc2FtcD4gdG8gY2hlY2sgcHJvZ3JhbXMgZm9yIHN0cmljdCBJU08KK0MgY29uZm9ybWFuY2UuICBUaGV5IHNvb24gZmluZCB0aGF0IGl0IGRvZXMgbm90IGRvIHF1aXRlIHdoYXQgdGhleSB3YW50OgoraXQgZmluZHMgc29tZSBub24tSVNPIHByYWN0aWNlcywgYnV0IG5vdCBhbGwmbWRhc2g7b25seSB0aG9zZSBmb3Igd2hpY2gKK0lTTyBDIDxlbT5yZXF1aXJlczwvZW0+IGEgZGlhZ25vc3RpYywgYW5kIHNvbWUgb3RoZXJzIGZvciB3aGljaAorZGlhZ25vc3RpY3MgaGF2ZSBiZWVuIGFkZGVkLgorCisgICAgIDxwPkEgZmVhdHVyZSB0byByZXBvcnQgYW55IGZhaWx1cmUgdG8gY29uZm9ybSB0byBJU08gQyBtaWdodCBiZSB1c2VmdWwgaW4KK3NvbWUgaW5zdGFuY2VzLCBidXQgd291bGQgcmVxdWlyZSBjb25zaWRlcmFibGUgYWRkaXRpb25hbCB3b3JrIGFuZCB3b3VsZAorYmUgcXVpdGUgZGlmZmVyZW50IGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwZWRhbnRpYzwvc3Bhbj48L3NhbXA+LiAgV2UgZG9uJ3QgaGF2ZSBwbGFucyB0bworc3VwcG9ydCBzdWNoIGEgZmVhdHVyZSBpbiB0aGUgbmVhciBmdXR1cmUuCisKKyAgICAgPHA+V2hlcmUgdGhlIHN0YW5kYXJkIHNwZWNpZmllZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ8L3NwYW4+PC9zYW1wPiByZXByZXNlbnRzIGEgR05VCitleHRlbmRlZCBkaWFsZWN0IG9mIEMsIHN1Y2ggYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnU5MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdudTk5PC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGVyZSBpcyBhCitjb3JyZXNwb25kaW5nIDxkZm4+YmFzZSBzdGFuZGFyZDwvZGZuPiwgdGhlIHZlcnNpb24gb2YgSVNPIEMgb24gd2hpY2ggdGhlIEdOVQorZXh0ZW5kZWQgZGlhbGVjdCBpcyBiYXNlZC4gIFdhcm5pbmdzIGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwZWRhbnRpYzwvc3Bhbj48L3NhbXA+IGFyZSBnaXZlbgord2hlcmUgdGhleSBhcmUgcmVxdWlyZWQgYnkgdGhlIGJhc2Ugc3RhbmRhcmQuICAoSXQgZG9lcyBub3QgbWFrZSBzZW5zZQorZm9yIHN1Y2ggd2FybmluZ3MgdG8gYmUgZ2l2ZW4gb25seSBmb3IgZmVhdHVyZXMgbm90IGluIHRoZSBzcGVjaWZpZWQgR05VCitDIGRpYWxlY3QsIHNpbmNlIGJ5IGRlZmluaXRpb24gdGhlIEdOVSBkaWFsZWN0cyBvZiBDIGluY2x1ZGUgYWxsCitmZWF0dXJlcyB0aGUgY29tcGlsZXIgc3VwcG9ydHMgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9uLCBhbmQgdGhlcmUgd291bGQgYmUKK25vdGhpbmcgdG8gd2FybiBhYm91dC4pCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcGVkYW50aWMtZXJyb3JzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1wZWRhbnRpY18wMDJkZXJyb3JzLTI1OSI+PC9hPkxpa2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwZWRhbnRpYzwvc3Bhbj48L3NhbXA+LCBleGNlcHQgdGhhdCBlcnJvcnMgYXJlIHByb2R1Y2VkIHJhdGhlciB0aGFuCit3YXJuaW5ncy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XYWxsLTI2MCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkYWxsLTI2MSI+PC9hPlRoaXMgZW5hYmxlcyBhbGwgdGhlIHdhcm5pbmdzIGFib3V0IGNvbnN0cnVjdGlvbnMgdGhhdCBzb21lIHVzZXJzCitjb25zaWRlciBxdWVzdGlvbmFibGUsIGFuZCB0aGF0IGFyZSBlYXN5IHRvIGF2b2lkIChvciBtb2RpZnkgdG8KK3ByZXZlbnQgdGhlIHdhcm5pbmcpLCBldmVuIGluIGNvbmp1bmN0aW9uIHdpdGggbWFjcm9zLiAgVGhpcyBhbHNvCitlbmFibGVzIHNvbWUgbGFuZ3VhZ2Utc3BlY2lmaWMgd2FybmluZ3MgZGVzY3JpYmVkIGluIDxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+QysrIERpYWxlY3QgT3B0aW9uczwvYT4gYW5kIDxhIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNPYmplY3RpdmVfMDAyZEMtYW5kLU9iamVjdGl2ZV8wMDJkQ18wMDJiXzAwMmItRGlhbGVjdC1PcHRpb25zIj5PYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0IE9wdGlvbnM8L2E+LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4gdHVybnMgb24gdGhlIGZvbGxvd2luZyB3YXJuaW5nIGZsYWdzOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1XYWRkcmVzcyAgIAorICAgICAgICAgIC1XYXJyYXktYm91bmRzIDxzcGFuIGNsYXNzPSJyb21hbiI+KG9ubHkgd2l0aDwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD48c3BhbiBjbGFzcz0icm9tYW4iPik8L3NwYW4+ICAKKyAgICAgICAgICAtV2MrKzExLWNvbXBhdCAgCisgICAgICAgICAgLVdjaGFyLXN1YnNjcmlwdHMgIAorICAgICAgICAgIC1XZW51bS1jb21wYXJlIDxzcGFuIGNsYXNzPSJyb21hbiI+KGluIEMvT2JqQzsgdGhpcyBpcyBvbiBieSBkZWZhdWx0IGluIEMrKyk8L3NwYW4+IAorICAgICAgICAgIC1XaW1wbGljaXQtaW50IDxzcGFuIGNsYXNzPSJyb21hbiI+KEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpPC9zcGFuPiAKKyAgICAgICAgICAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIDxzcGFuIGNsYXNzPSJyb21hbiI+KEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpPC9zcGFuPiAKKyAgICAgICAgICAtV2NvbW1lbnQgIAorICAgICAgICAgIC1XZm9ybWF0ICAgCisgICAgICAgICAgLVdtYWluIDxzcGFuIGNsYXNzPSJyb21hbiI+KG9ubHkgZm9yIEMvT2JqQyBhbmQgdW5sZXNzPC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZyZWVzdGFuZGluZzwvc3Bhbj48L3NhbXA+PHNwYW4gY2xhc3M9InJvbWFuIj4pPC9zcGFuPiAgCisgICAgICAgICAgLVdtYXliZS11bmluaXRpYWxpemVkIAorICAgICAgICAgIC1XbWlzc2luZy1icmFjZXMgPHNwYW4gY2xhc3M9InJvbWFuIj4ob25seSBmb3IgQy9PYmpDKTwvc3Bhbj4gCisgICAgICAgICAgLVdub25udWxsICAKKyAgICAgICAgICAtV3BhcmVudGhlc2VzICAKKyAgICAgICAgICAtV3BvaW50ZXItc2lnbiAgCisgICAgICAgICAgLVdyZW9yZGVyICAgCisgICAgICAgICAgLVdyZXR1cm4tdHlwZSAgCisgICAgICAgICAgLVdzZXF1ZW5jZS1wb2ludCAgCisgICAgICAgICAgLVdzaWduLWNvbXBhcmUgPHNwYW4gY2xhc3M9InJvbWFuIj4ob25seSBpbiBDKyspPC9zcGFuPiAgCisgICAgICAgICAgLVdzdHJpY3QtYWxpYXNpbmcgIAorICAgICAgICAgIC1Xc3RyaWN0LW92ZXJmbG93PTEgIAorICAgICAgICAgIC1Xc3dpdGNoICAKKyAgICAgICAgICAtV3RyaWdyYXBocyAgCisgICAgICAgICAgLVd1bmluaXRpYWxpemVkICAKKyAgICAgICAgICAtV3Vua25vd24tcHJhZ21hcyAgCisgICAgICAgICAgLVd1bnVzZWQtZnVuY3Rpb24gIAorICAgICAgICAgIC1XdW51c2VkLWxhYmVsICAgICAKKyAgICAgICAgICAtV3VudXNlZC12YWx1ZSAgICAgCisgICAgICAgICAgLVd1bnVzZWQtdmFyaWFibGUgIAorICAgICAgICAgIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIAorICAgICAgICAgIAorPC9wcmU+CisgICAgIDxwPk5vdGUgdGhhdCBzb21lIHdhcm5pbmcgZmxhZ3MgYXJlIG5vdCBpbXBsaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uICBTb21lIG9mCit0aGVtIHdhcm4gYWJvdXQgY29uc3RydWN0aW9ucyB0aGF0IHVzZXJzIGdlbmVyYWxseSBkbyBub3QgY29uc2lkZXIKK3F1ZXN0aW9uYWJsZSwgYnV0IHdoaWNoIG9jY2FzaW9uYWxseSB5b3UgbWlnaHQgd2lzaCB0byBjaGVjayBmb3I7CitvdGhlcnMgd2FybiBhYm91dCBjb25zdHJ1Y3Rpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBvciBoYXJkIHRvIGF2b2lkIGluCitzb21lIGNhc2VzLCBhbmQgdGhlcmUgaXMgbm8gc2ltcGxlIHdheSB0byBtb2RpZnkgdGhlIGNvZGUgdG8gc3VwcHJlc3MKK3RoZSB3YXJuaW5nLiBTb21lIG9mIHRoZW0gYXJlIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+IGJ1dCBtYW55IG9mCit0aGVtIG11c3QgYmUgZW5hYmxlZCBpbmRpdmlkdWFsbHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2V4dHJhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XLTI2MiI+PC9hPjxhIG5hbWU9ImluZGV4LVdleHRyYS0yNjMiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGV4dHJhLTI2NCI+PC9hPlRoaXMgZW5hYmxlcyBzb21lIGV4dHJhIHdhcm5pbmcgZmxhZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uIChUaGlzIG9wdGlvbiB1c2VkIHRvIGJlIGNhbGxlZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVzwvc3Bhbj48L3NhbXA+LiAgVGhlIG9sZGVyCituYW1lIGlzIHN0aWxsIHN1cHBvcnRlZCwgYnV0IHRoZSBuZXdlciBuYW1lIGlzIG1vcmUgZGVzY3JpcHRpdmUuKQorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1XY2xvYmJlcmVkICAKKyAgICAgICAgICAtV2VtcHR5LWJvZHkgIAorICAgICAgICAgIC1XaWdub3JlZC1xdWFsaWZpZXJzIAorICAgICAgICAgIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgIAorICAgICAgICAgIC1XbWlzc2luZy1wYXJhbWV0ZXItdHlwZSA8c3BhbiBjbGFzcz0icm9tYW4iPihDIG9ubHkpPC9zcGFuPiAgCisgICAgICAgICAgLVdvbGQtc3R5bGUtZGVjbGFyYXRpb24gPHNwYW4gY2xhc3M9InJvbWFuIj4oQyBvbmx5KTwvc3Bhbj4gIAorICAgICAgICAgIC1Xb3ZlcnJpZGUtaW5pdCAgCisgICAgICAgICAgLVdzaWduLWNvbXBhcmUgIAorICAgICAgICAgIC1XdHlwZS1saW1pdHMgIAorICAgICAgICAgIC1XdW5pbml0aWFsaXplZCAgCisgICAgICAgICAgLVd1bnVzZWQtcGFyYW1ldGVyIDxzcGFuIGNsYXNzPSJyb21hbiI+KG9ubHkgd2l0aDwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bnVzZWQ8L3NwYW4+PC9zYW1wPiA8c3BhbiBjbGFzcz0icm9tYW4iPm9yPC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+PHNwYW4gY2xhc3M9InJvbWFuIj4pPC9zcGFuPiAKKyAgICAgICAgICAtV3VudXNlZC1idXQtc2V0LXBhcmFtZXRlciA8c3BhbiBjbGFzcz0icm9tYW4iPihvbmx5IHdpdGg8L3NwYW4+IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdW51c2VkPC9zcGFuPjwvc2FtcD4gPHNwYW4gY2xhc3M9InJvbWFuIj5vcjwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPjxzcGFuIGNsYXNzPSJyb21hbiI+KTwvc3Bhbj4gIAorICAgICAgICAgIAorPC9wcmU+CisgICAgIDxwPlRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+IGFsc28gcHJpbnRzIHdhcm5pbmcgbWVzc2FnZXMgZm9yIHRoZQorZm9sbG93aW5nIGNhc2VzOgorCisgICAgICAgICAgPHVsPgorPGxpPkEgcG9pbnRlciBpcyBjb21wYXJlZCBhZ2FpbnN0IGludGVnZXIgemVybyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7PTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mZ3Q7PTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICAgICAgIDxsaT4oQysrIG9ubHkpIEFuIGVudW1lcmF0b3IgYW5kIGEgbm9uLWVudW1lcmF0b3IgYm90aCBhcHBlYXIgaW4gYQorY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KKworICAgICAgICAgIDxsaT4oQysrIG9ubHkpIEFtYmlndW91cyB2aXJ0dWFsIGJhc2VzLgorCisgICAgICAgICAgPGxpPihDKysgb25seSkgU3Vic2NyaXB0aW5nIGFuIGFycmF5IHRoYXQgaGFzIGJlZW4gZGVjbGFyZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZWdpc3Rlcjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICAgICAgIDxsaT4oQysrIG9ubHkpIFRha2luZyB0aGUgYWRkcmVzcyBvZiBhIHZhcmlhYmxlIHRoYXQgaGFzIGJlZW4gZGVjbGFyZWQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVnaXN0ZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgICAgICA8bGk+KEMrKyBvbmx5KSBBIGJhc2UgY2xhc3MgaXMgbm90IGluaXRpYWxpemVkIGluIGEgZGVyaXZlZCBjbGFzcydzIGNvcHkKK2NvbnN0cnVjdG9yLgorCisgICAgIDwvdWw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2NoYXItc3Vic2NyaXB0czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2NoYXJfMDAyZHN1YnNjcmlwdHMtMjY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRjaGFyXzAwMmRzdWJzY3JpcHRzLTI2NiI+PC9hPldhcm4gaWYgYW4gYXJyYXkgc3Vic2NyaXB0IGhhcyB0eXBlIDxjb2RlPmNoYXI8L2NvZGU+LiAgVGhpcyBpcyBhIGNvbW1vbiBjYXVzZQorb2YgZXJyb3IsIGFzIHByb2dyYW1tZXJzIG9mdGVuIGZvcmdldCB0aGF0IHRoaXMgdHlwZSBpcyBzaWduZWQgb24gc29tZQorbWFjaGluZXMuIAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XY29tbWVudDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2NvbW1lbnQtMjY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRjb21tZW50LTI2OCI+PC9hPldhcm4gd2hlbmV2ZXIgYSBjb21tZW50LXN0YXJ0IHNlcXVlbmNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lyo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXBwZWFycyBpbiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lyo8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2NvbW1lbnQsIG9yIHdoZW5ldmVyIGEgQmFja3NsYXNoLU5ld2xpbmUgYXBwZWFycyBpbiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ly88L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWVudC4gCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1jb3ZlcmFnZS1taXNtYXRjaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRjb3ZlcmFnZV8wMDJkbWlzbWF0Y2gtMjY5Ij48L2E+V2FybiBpZiBmZWVkYmFjayBwcm9maWxlcyBkbyBub3QgbWF0Y2ggd2hlbiB1c2luZyB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcHJvZmlsZS11c2U8L3NwYW4+PC9zYW1wPiBvcHRpb24uIAorSWYgYSBzb3VyY2UgZmlsZSBpcyBjaGFuZ2VkIGJldHdlZW4gY29tcGlsaW5nIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZwcm9maWxlLWdlbjwvc3Bhbj48L3NhbXA+IGFuZAord2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnByb2ZpbGUtdXNlPC9zcGFuPjwvc2FtcD4sIHRoZSBmaWxlcyB3aXRoIHRoZSBwcm9maWxlIGZlZWRiYWNrIGNhbiBmYWlsCit0byBtYXRjaCB0aGUgc291cmNlIGZpbGUgYW5kIEdDQyBjYW5ub3QgdXNlIHRoZSBwcm9maWxlIGZlZWRiYWNrCitpbmZvcm1hdGlvbi4gIEJ5IGRlZmF1bHQsIHRoaXMgd2FybmluZyBpcyBlbmFibGVkIGFuZCBpcyB0cmVhdGVkIGFzIGFuCitlcnJvci4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tY292ZXJhZ2UtbWlzbWF0Y2g8L3NwYW4+PC9zYW1wPiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoZQord2FybmluZyBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLWVycm9yPWNvdmVyYWdlLW1pc21hdGNoPC9zcGFuPjwvc2FtcD4gY2FuIGJlIHVzZWQgdG8KK2Rpc2FibGUgdGhlIGVycm9yLiAgRGlzYWJsaW5nIHRoZSBlcnJvciBmb3IgdGhpcyB3YXJuaW5nIGNhbiByZXN1bHQgaW4KK3Bvb3JseSBvcHRpbWl6ZWQgY29kZSBhbmQgaXMgdXNlZnVsIG9ubHkgaW4gdGhlCitjYXNlIG9mIHZlcnkgbWlub3IgY2hhbmdlcyBzdWNoIGFzIGJ1ZyBmaXhlcyB0byBhbiBleGlzdGluZyBjb2RlLWJhc2UuIAorQ29tcGxldGVseSBkaXNhYmxpbmcgdGhlIHdhcm5pbmcgaXMgbm90IHJlY29tbWVuZGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1jcHA8L2NvZGU+PGRkPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMsIE9iamVjdGl2ZS1DLCBDKyssIE9iamVjdGl2ZS1DKysgYW5kIEZvcnRyYW4gb25seSk8L3NwYW4+CisKKyAgICAgPHA+U3VwcHJlc3Mgd2FybmluZyBtZXNzYWdlcyBlbWl0dGVkIGJ5IDxjb2RlPiN3YXJuaW5nPC9jb2RlPiBkaXJlY3RpdmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdkb3VibGUtcHJvbW90aW9uIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDLCBDKyssIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1XZG91YmxlXzAwMmRwcm9tb3Rpb24tMjcwIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRkb3VibGVfMDAyZHByb21vdGlvbi0yNzEiPjwvYT5HaXZlIGEgd2FybmluZyB3aGVuIGEgdmFsdWUgb2YgdHlwZSA8Y29kZT5mbG9hdDwvY29kZT4gaXMgaW1wbGljaXRseQorcHJvbW90ZWQgdG8gPGNvZGU+ZG91YmxlPC9jb2RlPi4gIENQVXMgd2l0aCBhIDMyLWJpdCAmbGRxdW87c2luZ2xlLXByZWNpc2lvbiZyZHF1bzsKK2Zsb2F0aW5nLXBvaW50IHVuaXQgaW1wbGVtZW50IDxjb2RlPmZsb2F0PC9jb2RlPiBpbiBoYXJkd2FyZSwgYnV0IGVtdWxhdGUKKzxjb2RlPmRvdWJsZTwvY29kZT4gaW4gc29mdHdhcmUuICBPbiBzdWNoIGEgbWFjaGluZSwgZG9pbmcgY29tcHV0YXRpb25zCit1c2luZyA8Y29kZT5kb3VibGU8L2NvZGU+IHZhbHVlcyBpcyBtdWNoIG1vcmUgZXhwZW5zaXZlIGJlY2F1c2Ugb2YgdGhlCitvdmVyaGVhZCByZXF1aXJlZCBmb3Igc29mdHdhcmUgZW11bGF0aW9uLgorCisgICAgIDxwPkl0IGlzIGVhc3kgdG8gYWNjaWRlbnRhbGx5IGRvIGNvbXB1dGF0aW9ucyB3aXRoIDxjb2RlPmRvdWJsZTwvY29kZT4gYmVjYXVzZQorZmxvYXRpbmctcG9pbnQgbGl0ZXJhbHMgYXJlIGltcGxpY2l0bHkgb2YgdHlwZSA8Y29kZT5kb3VibGU8L2NvZGU+LiAgRm9yCitleGFtcGxlLCBpbjoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgZmxvYXQgYXJlYShmbG9hdCByYWRpdXMpCisgICAgICAgICAgeworICAgICAgICAgICAgIHJldHVybiAzLjE0MTU5ICogcmFkaXVzICogcmFkaXVzOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8cD50aGUgY29tcGlsZXIgcGVyZm9ybXMgdGhlIGVudGlyZSBjb21wdXRhdGlvbiB3aXRoIDxjb2RlPmRvdWJsZTwvY29kZT4KK2JlY2F1c2UgdGhlIGZsb2F0aW5nLXBvaW50IGxpdGVyYWwgaXMgYSA8Y29kZT5kb3VibGU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdmb3JtYXQ8L2NvZGU+PGR0Pjxjb2RlPi1XZm9ybWF0PTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtV2Zvcm1hdC0yNzIiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGZvcm1hdC0yNzMiPjwvYT48YSBuYW1lPSJpbmRleC1mZnJlZXN0YW5kaW5nLTI3NCI+PC9hPjxhIG5hbWU9ImluZGV4LWZub18wMDJkYnVpbHRpbi0yNzUiPjwvYT48YSBuYW1lPSJpbmRleC1XZm9ybWF0XzAwM2QtMjc2Ij48L2E+Q2hlY2sgY2FsbHMgdG8gPGNvZGU+cHJpbnRmPC9jb2RlPiBhbmQgPGNvZGU+c2NhbmY8L2NvZGU+LCBldGMuLCB0byBtYWtlIHN1cmUgdGhhdAordGhlIGFyZ3VtZW50cyBzdXBwbGllZCBoYXZlIHR5cGVzIGFwcHJvcHJpYXRlIHRvIHRoZSBmb3JtYXQgc3RyaW5nCitzcGVjaWZpZWQsIGFuZCB0aGF0IHRoZSBjb252ZXJzaW9ucyBzcGVjaWZpZWQgaW4gdGhlIGZvcm1hdCBzdHJpbmcgbWFrZQorc2Vuc2UuICBUaGlzIGluY2x1ZGVzIHN0YW5kYXJkIGZ1bmN0aW9ucywgYW5kIG90aGVycyBzcGVjaWZpZWQgYnkgZm9ybWF0CithdHRyaWJ1dGVzIChzZWUgPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+KSwgaW4gdGhlIDxjb2RlPnByaW50ZjwvY29kZT4sCis8Y29kZT5zY2FuZjwvY29kZT4sIDxjb2RlPnN0cmZ0aW1lPC9jb2RlPiBhbmQgPGNvZGU+c3RyZm1vbjwvY29kZT4gKGFuIFgvT3BlbiBleHRlbnNpb24sCitub3QgaW4gdGhlIEMgc3RhbmRhcmQpIGZhbWlsaWVzIChvciBvdGhlciB0YXJnZXQtc3BlY2lmaWMgZmFtaWxpZXMpLiAKK1doaWNoIGZ1bmN0aW9ucyBhcmUgY2hlY2tlZCB3aXRob3V0IGZvcm1hdCBhdHRyaWJ1dGVzIGhhdmluZyBiZWVuCitzcGVjaWZpZWQgZGVwZW5kcyBvbiB0aGUgc3RhbmRhcmQgdmVyc2lvbiBzZWxlY3RlZCwgYW5kIHN1Y2ggY2hlY2tzIG9mCitmdW5jdGlvbnMgd2l0aG91dCB0aGUgYXR0cmlidXRlIHNwZWNpZmllZCBhcmUgZGlzYWJsZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnJlZXN0YW5kaW5nPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1idWlsdGluPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhlIGZvcm1hdHMgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgZm9ybWF0IGZlYXR1cmVzIHN1cHBvcnRlZCBieSBHTlUKK2xpYmMgdmVyc2lvbiAyLjIuICBUaGVzZSBpbmNsdWRlIGFsbCBJU08gQzkwIGFuZCBDOTkgZmVhdHVyZXMsIGFzIHdlbGwKK2FzIGZlYXR1cmVzIGZyb20gdGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24gYW5kIHNvbWUgQlNEIGFuZCBHTlUKK2V4dGVuc2lvbnMuICBPdGhlciBsaWJyYXJ5IGltcGxlbWVudGF0aW9ucyBtYXkgbm90IHN1cHBvcnQgYWxsIHRoZXNlCitmZWF0dXJlczsgR0NDIGRvZXMgbm90IHN1cHBvcnQgd2FybmluZyBhYm91dCBmZWF0dXJlcyB0aGF0IGdvIGJleW9uZCBhCitwYXJ0aWN1bGFyIGxpYnJhcnkncyBsaW1pdGF0aW9ucy4gIEhvd2V2ZXIsIGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XcGVkYW50aWM8L3NwYW4+PC9zYW1wPiBpcyB1c2VkCit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0PC9zcGFuPjwvc2FtcD4sIHdhcm5pbmdzIGFyZSBnaXZlbiBhYm91dCBmb3JtYXQgZmVhdHVyZXMgbm90CitpbiB0aGUgc2VsZWN0ZWQgc3RhbmRhcmQgdmVyc2lvbiAoYnV0IG5vdCBmb3IgPGNvZGU+c3RyZm1vbjwvY29kZT4gZm9ybWF0cywKK3NpbmNlIHRob3NlIGFyZSBub3QgaW4gYW55IHZlcnNpb24gb2YgdGhlIEMgc3RhbmRhcmQpLiAgU2VlIDxhIGhyZWY9IkMtRGlhbGVjdC1PcHRpb25zLmh0bWwjQy1EaWFsZWN0LU9wdGlvbnMiPk9wdGlvbnMgQ29udHJvbGxpbmcgQyBEaWFsZWN0PC9hPi4KKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT4tV2Zvcm1hdD0xPC9jb2RlPjxkdD48Y29kZT4tV2Zvcm1hdDwvY29kZT48ZGQ+T3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0PC9zcGFuPjwvc2FtcD4gaXMgZXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Zvcm1hdD0xPC9zcGFuPjwvc2FtcD4sIGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby1mb3JtYXQ8L3NwYW4+PC9zYW1wPiBpcyBlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0PTA8L3NwYW4+PC9zYW1wPi4gIFNpbmNlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Zvcm1hdDwvc3Bhbj48L3NhbXA+IGFsc28gY2hlY2tzIGZvciBudWxsIGZvcm1hdCBhcmd1bWVudHMgZm9yIHNldmVyYWwKK2Z1bmN0aW9ucywgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQ8L3NwYW4+PC9zYW1wPiBhbHNvIGltcGxpZXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdub25udWxsPC9zcGFuPjwvc2FtcD4uICBTb21lCithc3BlY3RzIG9mIHRoaXMgbGV2ZWwgb2YgZm9ybWF0IGNoZWNraW5nIGNhbiBiZSBkaXNhYmxlZCBieSB0aGUKK29wdGlvbnM6IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tZm9ybWF0LWNvbnRhaW5zLW51bDwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby1mb3JtYXQtZXh0cmEtYXJnczwvc3Bhbj48L3NhbXA+LCBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby1mb3JtYXQtemVyby1sZW5ndGg8L3NwYW4+PC9zYW1wPi4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Zvcm1hdDwvc3Bhbj48L3NhbXA+IGlzIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LVduby1mb3JtYXQtY29udGFpbnMtbnVsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGZvcm1hdF8wMDJkY29udGFpbnNfMDAyZG51bC0yNzciPjwvYT48YSBuYW1lPSJpbmRleC1XZm9ybWF0XzAwMmRjb250YWluc18wMDJkbnVsLTI3OCI+PC9hPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0PC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLCBkbyBub3Qgd2FybiBhYm91dCBmb3JtYXQgc3RyaW5ncyB0aGF0Citjb250YWluIE5VTCBieXRlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LVduby1mb3JtYXQtZXh0cmEtYXJnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRmb3JtYXRfMDAyZGV4dHJhXzAwMmRhcmdzLTI3OSI+PC9hPjxhIG5hbWU9ImluZGV4LVdmb3JtYXRfMDAyZGV4dHJhXzAwMmRhcmdzLTI4MCI+PC9hPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0PC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLCBkbyBub3Qgd2FybiBhYm91dCBleGNlc3MgYXJndW1lbnRzIHRvIGEKKzxjb2RlPnByaW50ZjwvY29kZT4gb3IgPGNvZGU+c2NhbmY8L2NvZGU+IGZvcm1hdCBmdW5jdGlvbi4gIFRoZSBDIHN0YW5kYXJkIHNwZWNpZmllcwordGhhdCBzdWNoIGFyZ3VtZW50cyBhcmUgaWdub3JlZC4KKworICAgICAgICAgIDxwPldoZXJlIHRoZSB1bnVzZWQgYXJndW1lbnRzIGxpZSBiZXR3ZWVuIHVzZWQgYXJndW1lbnRzIHRoYXQgYXJlCitzcGVjaWZpZWQgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3BlcmFuZCBudW1iZXIgc3BlY2lmaWNhdGlvbnMsIG5vcm1hbGx5Cit3YXJuaW5ncyBhcmUgc3RpbGwgZ2l2ZW4sIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBjb3VsZCBub3Qga25vdyB3aGF0Cit0eXBlIHRvIHBhc3MgdG8gPGNvZGU+dmFfYXJnPC9jb2RlPiB0byBza2lwIHRoZSB1bnVzZWQgYXJndW1lbnRzLiAgSG93ZXZlciwKK2luIHRoZSBjYXNlIG9mIDxjb2RlPnNjYW5mPC9jb2RlPiBmb3JtYXRzLCB0aGlzIG9wdGlvbiBzdXBwcmVzc2VzIHRoZQord2FybmluZyBpZiB0aGUgdW51c2VkIGFyZ3VtZW50cyBhcmUgYWxsIHBvaW50ZXJzLCBzaW5jZSB0aGUgU2luZ2xlCitVbml4IFNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHN1Y2ggdW51c2VkIGFyZ3VtZW50cyBhcmUgYWxsb3dlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LVduby1mb3JtYXQtemVyby1sZW5ndGg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdub18wMDJkZm9ybWF0XzAwMmR6ZXJvXzAwMmRsZW5ndGgtMjgxIj48L2E+PGEgbmFtZT0iaW5kZXgtV2Zvcm1hdF8wMDJkemVyb18wMDJkbGVuZ3RoLTI4MiI+PC9hPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0PC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLCBkbyBub3Qgd2FybiBhYm91dCB6ZXJvLWxlbmd0aCBmb3JtYXRzLiAKK1RoZSBDIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHplcm8tbGVuZ3RoIGZvcm1hdHMgYXJlIGFsbG93ZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1XZm9ybWF0PTI8L2NvZGU+PGRkPkVuYWJsZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Zvcm1hdDwvc3Bhbj48L3NhbXA+IHBsdXMgYWRkaXRpb25hbCBmb3JtYXQgY2hlY2tzLiAgQ3VycmVudGx5CitlcXVpdmFsZW50IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0IC1XZm9ybWF0LW5vbmxpdGVyYWwgLVdmb3JtYXQtc2VjdXJpdHkKKy1XZm9ybWF0LXkyazwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tV2Zvcm1hdC1ub25saXRlcmFsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XZm9ybWF0XzAwMmRub25saXRlcmFsLTI4MyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkZm9ybWF0XzAwMmRub25saXRlcmFsLTI4NCI+PC9hPklmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0PC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLCBhbHNvIHdhcm4gaWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMgbm90IGEKK3N0cmluZyBsaXRlcmFsIGFuZCBzbyBjYW5ub3QgYmUgY2hlY2tlZCwgdW5sZXNzIHRoZSBmb3JtYXQgZnVuY3Rpb24KK3Rha2VzIGl0cyBmb3JtYXQgYXJndW1lbnRzIGFzIGEgPGNvZGU+dmFfbGlzdDwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1XZm9ybWF0LXNlY3VyaXR5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XZm9ybWF0XzAwMmRzZWN1cml0eS0yODUiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGZvcm1hdF8wMDJkc2VjdXJpdHktMjg2Ij48L2E+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQ8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQsIGFsc28gd2FybiBhYm91dCB1c2VzIG9mIGZvcm1hdAorZnVuY3Rpb25zIHRoYXQgcmVwcmVzZW50IHBvc3NpYmxlIHNlY3VyaXR5IHByb2JsZW1zLiAgQXQgcHJlc2VudCwgdGhpcword2FybnMgYWJvdXQgY2FsbHMgdG8gPGNvZGU+cHJpbnRmPC9jb2RlPiBhbmQgPGNvZGU+c2NhbmY8L2NvZGU+IGZ1bmN0aW9ucyB3aGVyZSB0aGUKK2Zvcm1hdCBzdHJpbmcgaXMgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZXJlIGFyZSBubyBmb3JtYXQgYXJndW1lbnRzLAorYXMgaW4gPGNvZGU+cHJpbnRmIChmb28pOzwvY29kZT4uICBUaGlzIG1heSBiZSBhIHNlY3VyaXR5IGhvbGUgaWYgdGhlIGZvcm1hdAorc3RyaW5nIGNhbWUgZnJvbSB1bnRydXN0ZWQgaW5wdXQgYW5kIGNvbnRhaW5zICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JW48L3NwYW4+PC9zYW1wPiZyc3F1bzsuICAoVGhpcyBpcworY3VycmVudGx5IGEgc3Vic2V0IG9mIHdoYXQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQtbm9ubGl0ZXJhbDwvc3Bhbj48L3NhbXA+IHdhcm5zIGFib3V0LCBidXQKK2luIGZ1dHVyZSB3YXJuaW5ncyBtYXkgYmUgYWRkZWQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQtc2VjdXJpdHk8L3NwYW4+PC9zYW1wPiB0aGF0IGFyZSBub3QKK2luY2x1ZGVkIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZm9ybWF0LW5vbmxpdGVyYWw8L3NwYW4+PC9zYW1wPi4pCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi1XZm9ybWF0LXkyazwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2Zvcm1hdF8wMDJkeTJrLTI4NyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkZm9ybWF0XzAwMmR5MmstMjg4Ij48L2E+SWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQ8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQsIGFsc28gd2FybiBhYm91dCA8Y29kZT5zdHJmdGltZTwvY29kZT4KK2Zvcm1hdHMgdGhhdCBtYXkgeWllbGQgb25seSBhIHR3by1kaWdpdCB5ZWFyLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vbm51bGw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdub25udWxsLTI4OSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbm9ubnVsbC0yOTAiPjwvYT5XYXJuIGFib3V0IHBhc3NpbmcgYSBudWxsIHBvaW50ZXIgZm9yIGFyZ3VtZW50cyBtYXJrZWQgYXMKK3JlcXVpcmluZyBhIG5vbi1udWxsIHZhbHVlIGJ5IHRoZSA8Y29kZT5ub25udWxsPC9jb2RlPiBmdW5jdGlvbiBhdHRyaWJ1dGUuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdub25udWxsPC9zcGFuPjwvc2FtcD4gaXMgaW5jbHVkZWQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQ8L3NwYW4+PC9zYW1wPi4gIEl0CitjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby1ub25udWxsPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdpbml0LXNlbGYgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMsIEMrKywgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdpbml0XzAwMmRzZWxmLTI5MSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkaW5pdF8wMDJkc2VsZi0yOTIiPjwvYT5XYXJuIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHRoYXQgYXJlIGluaXRpYWxpemVkIHdpdGggdGhlbXNlbHZlcy4gCitOb3RlIHRoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bmluaXRpYWxpemVkPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxwPkZvciBleGFtcGxlLCBHQ0Mgd2FybnMgYWJvdXQgPGNvZGU+aTwvY29kZT4gYmVpbmcgdW5pbml0aWFsaXplZCBpbiB0aGUKK2ZvbGxvd2luZyBzbmlwcGV0IG9ubHkgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2luaXQtc2VsZjwvc3Bhbj48L3NhbXA+IGhhcyBiZWVuIHNwZWNpZmllZDoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IGYoKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8cD5UaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+IGluIEMrKy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XaW1wbGljaXQtaW50IDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV2ltcGxpY2l0XzAwMmRpbnQtMjkzIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRpbXBsaWNpdF8wMDJkaW50LTI5NCI+PC9hPldhcm4gd2hlbiBhIGRlY2xhcmF0aW9uIGRvZXMgbm90IHNwZWNpZnkgYSB0eXBlLiAKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV2ltcGxpY2l0XzAwMmRmdW5jdGlvbl8wMDJkZGVjbGFyYXRpb24tMjk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRpbXBsaWNpdF8wMDJkZnVuY3Rpb25fMDAyZGRlY2xhcmF0aW9uLTI5NiI+PC9hPkdpdmUgYSB3YXJuaW5nIHdoZW5ldmVyIGEgZnVuY3Rpb24gaXMgdXNlZCBiZWZvcmUgYmVpbmcgZGVjbGFyZWQuIEluCitDOTkgbW9kZSAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jOTk8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWdudTk5PC9zcGFuPjwvc2FtcD4pLCB0aGlzIHdhcm5pbmcgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhbmQgaXQgaXMgbWFkZSBpbnRvIGFuIGVycm9yIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcGVkYW50aWMtZXJyb3JzPC9zcGFuPjwvc2FtcD4uIFRoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2ltcGxpY2l0IDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV2ltcGxpY2l0LTI5NyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkaW1wbGljaXQtMjk4Ij48L2E+U2FtZSBhcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2ltcGxpY2l0LWludDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uPC9zcGFuPjwvc2FtcD4uIAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XaWdub3JlZC1xdWFsaWZpZXJzIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBDKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdpZ25vcmVkXzAwMmRxdWFsaWZpZXJzLTI5OSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkaWdub3JlZF8wMDJkcXVhbGlmaWVycy0zMDAiPjwvYT5XYXJuIGlmIHRoZSByZXR1cm4gdHlwZSBvZiBhIGZ1bmN0aW9uIGhhcyBhIHR5cGUgcXVhbGlmaWVyCitzdWNoIGFzIDxjb2RlPmNvbnN0PC9jb2RlPi4gIEZvciBJU08gQyBzdWNoIGEgdHlwZSBxdWFsaWZpZXIgaGFzIG5vIGVmZmVjdCwKK3NpbmNlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBhIGZ1bmN0aW9uIGlzIG5vdCBhbiBsdmFsdWUuIAorRm9yIEMrKywgdGhlIHdhcm5pbmcgaXMgb25seSBlbWl0dGVkIGZvciBzY2FsYXIgdHlwZXMgb3IgPGNvZGU+dm9pZDwvY29kZT4uIAorSVNPIEMgcHJvaGliaXRzIHF1YWxpZmllZCA8Y29kZT52b2lkPC9jb2RlPiByZXR1cm4gdHlwZXMgb24gZnVuY3Rpb24KK2RlZmluaXRpb25zLCBzbyBzdWNoIHJldHVybiB0eXBlcyBhbHdheXMgcmVjZWl2ZSBhIHdhcm5pbmcKK2V2ZW4gd2l0aG91dCB0aGlzIG9wdGlvbi4KKworICAgICA8cD5UaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXh0cmE8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XbWFpbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV21haW4tMzAxIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRtYWluLTMwMiI+PC9hPldhcm4gaWYgdGhlIHR5cGUgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tYWluPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHN1c3BpY2lvdXMuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1haW48L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2hvdWxkIGJlCithIGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZSwgcmV0dXJuaW5nIGludCwgdGFraW5nIGVpdGhlciB6ZXJvCithcmd1bWVudHMsIHR3bywgb3IgdGhyZWUgYXJndW1lbnRzIG9mIGFwcHJvcHJpYXRlIHR5cGVzLiAgVGhpcyB3YXJuaW5nCitpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gQysrIGFuZCBpcyBlbmFibGVkIGJ5IGVpdGhlciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+CitvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3BlZGFudGljPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV21pc3NpbmctYnJhY2VzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XbWlzc2luZ18wMDJkYnJhY2VzLTMwMyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbWlzc2luZ18wMDJkYnJhY2VzLTMwNCI+PC9hPldhcm4gaWYgYW4gYWdncmVnYXRlIG9yIHVuaW9uIGluaXRpYWxpemVyIGlzIG5vdCBmdWxseSBicmFja2V0ZWQuICBJbgordGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgaW5pdGlhbGl6ZXIgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBub3QgZnVsbHkKK2JyYWNrZXRlZCwgYnV0IHRoYXQgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Yjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBmdWxseSBicmFja2V0ZWQuICBUaGlzIHdhcm5pbmcgaXMKK2VuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPiBpbiBDLgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGludCBhWzJdWzJdID0geyAwLCAxLCAyLCAzIH07CisgICAgICAgICAgaW50IGJbMl1bMl0gPSB7IHsgMCwgMSB9LCB7IDIsIDMgfSB9OworPC9wcmU+CisgICAgIDxwPlRoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV21pc3NpbmctaW5jbHVkZS1kaXJzIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDLCBDKyssIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1XbWlzc2luZ18wMDJkaW5jbHVkZV8wMDJkZGlycy0zMDUiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG1pc3NpbmdfMDAyZGluY2x1ZGVfMDAyZGRpcnMtMzA2Ij48L2E+V2FybiBpZiBhIHVzZXItc3VwcGxpZWQgaW5jbHVkZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3BhcmVudGhlc2VzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XcGFyZW50aGVzZXMtMzA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRwYXJlbnRoZXNlcy0zMDgiPjwvYT5XYXJuIGlmIHBhcmVudGhlc2VzIGFyZSBvbWl0dGVkIGluIGNlcnRhaW4gY29udGV4dHMsIHN1Y2gKK2FzIHdoZW4gdGhlcmUgaXMgYW4gYXNzaWdubWVudCBpbiBhIGNvbnRleHQgd2hlcmUgYSB0cnV0aCB2YWx1ZQoraXMgZXhwZWN0ZWQsIG9yIHdoZW4gb3BlcmF0b3JzIGFyZSBuZXN0ZWQgd2hvc2UgcHJlY2VkZW5jZSBwZW9wbGUKK29mdGVuIGdldCBjb25mdXNlZCBhYm91dC4KKworICAgICA8cD5BbHNvIHdhcm4gaWYgYSBjb21wYXJpc29uIGxpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54Jmx0Oz15Jmx0Oz16PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcnM7IHRoaXMgaXMKK2VxdWl2YWxlbnQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4oeCZsdDs9eSA/IDEgOiAwKSAmbHQ7PSB6PC9zcGFuPjwvc2FtcD4mcnNxdW87LCB3aGljaCBpcyBhIGRpZmZlcmVudAoraW50ZXJwcmV0YXRpb24gZnJvbSB0aGF0IG9mIG9yZGluYXJ5IG1hdGhlbWF0aWNhbCBub3RhdGlvbi4KKworICAgICA8cD5BbHNvIHdhcm4gYWJvdXQgY29uc3RydWN0aW9ucyB3aGVyZSB0aGVyZSBtYXkgYmUgY29uZnVzaW9uIHRvIHdoaWNoCis8Y29kZT5pZjwvY29kZT4gc3RhdGVtZW50IGFuIDxjb2RlPmVsc2U8L2NvZGU+IGJyYW5jaCBiZWxvbmdzLiAgSGVyZSBpcyBhbiBleGFtcGxlIG9mCitzdWNoIGEgY2FzZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoYSkKKyAgICAgICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgZm9vICgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBiYXIgKCk7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxwPkluIEMvQysrLCBldmVyeSA8Y29kZT5lbHNlPC9jb2RlPiBicmFuY2ggYmVsb25ncyB0byB0aGUgaW5uZXJtb3N0IHBvc3NpYmxlCis8Y29kZT5pZjwvY29kZT4gc3RhdGVtZW50LCB3aGljaCBpbiB0aGlzIGV4YW1wbGUgaXMgPGNvZGU+aWYgKGIpPC9jb2RlPi4gIFRoaXMgaXMKK29mdGVuIG5vdCB3aGF0IHRoZSBwcm9ncmFtbWVyIGV4cGVjdGVkLCBhcyBpbGx1c3RyYXRlZCBpbiB0aGUgYWJvdmUKK2V4YW1wbGUgYnkgaW5kZW50YXRpb24gdGhlIHByb2dyYW1tZXIgY2hvc2UuICBXaGVuIHRoZXJlIGlzIHRoZQorcG90ZW50aWFsIGZvciB0aGlzIGNvbmZ1c2lvbiwgR0NDIGlzc3VlcyBhIHdhcm5pbmcgd2hlbiB0aGlzIGZsYWcKK2lzIHNwZWNpZmllZC4gIFRvIGVsaW1pbmF0ZSB0aGUgd2FybmluZywgYWRkIGV4cGxpY2l0IGJyYWNlcyBhcm91bmQKK3RoZSBpbm5lcm1vc3QgPGNvZGU+aWY8L2NvZGU+IHN0YXRlbWVudCBzbyB0aGVyZSBpcyBubyB3YXkgdGhlIDxjb2RlPmVsc2U8L2NvZGU+CitjYW4gYmVsb25nIHRvIHRoZSBlbmNsb3NpbmcgPGNvZGU+aWY8L2NvZGU+LiAgVGhlIHJlc3VsdGluZyBjb2RlCitsb29rcyBsaWtlIHRoaXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgeworICAgICAgICAgICAgaWYgKGEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYikKKyAgICAgICAgICAgICAgICAgIGZvbyAoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBiYXIgKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHA+QWxzbyB3YXJuIGZvciBkYW5nZXJvdXMgdXNlcyBvZiB0aGUgR05VIGV4dGVuc2lvbiB0bworPGNvZGU+Pzo8L2NvZGU+IHdpdGggb21pdHRlZCBtaWRkbGUgb3BlcmFuZC4gV2hlbiB0aGUgY29uZGl0aW9uCitpbiB0aGUgPGNvZGU+PzwvY29kZT46IG9wZXJhdG9yIGlzIGEgYm9vbGVhbiBleHByZXNzaW9uLCB0aGUgb21pdHRlZCB2YWx1ZSBpcworYWx3YXlzIDEuICBPZnRlbiBwcm9ncmFtbWVycyBleHBlY3QgaXQgdG8gYmUgYSB2YWx1ZSBjb21wdXRlZAoraW5zaWRlIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIGluc3RlYWQuCisKKyAgICAgPHA+VGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xc2VxdWVuY2UtcG9pbnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdzZXF1ZW5jZV8wMDJkcG9pbnQtMzA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRzZXF1ZW5jZV8wMDJkcG9pbnQtMzEwIj48L2E+V2FybiBhYm91dCBjb2RlIHRoYXQgbWF5IGhhdmUgdW5kZWZpbmVkIHNlbWFudGljcyBiZWNhdXNlIG9mIHZpb2xhdGlvbnMKK29mIHNlcXVlbmNlIHBvaW50IHJ1bGVzIGluIHRoZSBDIGFuZCBDKysgc3RhbmRhcmRzLgorCisgICAgIDxwPlRoZSBDIGFuZCBDKysgc3RhbmRhcmRzIGRlZmluZSB0aGUgb3JkZXIgaW4gd2hpY2ggZXhwcmVzc2lvbnMgaW4gYSBDL0MrKworcHJvZ3JhbSBhcmUgZXZhbHVhdGVkIGluIHRlcm1zIG9mIDxkZm4+c2VxdWVuY2UgcG9pbnRzPC9kZm4+LCB3aGljaCByZXByZXNlbnQKK2EgcGFydGlhbCBvcmRlcmluZyBiZXR3ZWVuIHRoZSBleGVjdXRpb24gb2YgcGFydHMgb2YgdGhlIHByb2dyYW06IHRob3NlCitleGVjdXRlZCBiZWZvcmUgdGhlIHNlcXVlbmNlIHBvaW50LCBhbmQgdGhvc2UgZXhlY3V0ZWQgYWZ0ZXIgaXQuICBUaGVzZQorb2NjdXIgYWZ0ZXIgdGhlIGV2YWx1YXRpb24gb2YgYSBmdWxsIGV4cHJlc3Npb24gKG9uZSB3aGljaCBpcyBub3QgcGFydAorb2YgYSBsYXJnZXIgZXhwcmVzc2lvbiksIGFmdGVyIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBmaXJzdCBvcGVyYW5kIG9mIGEKKzxjb2RlPiZhbXA7JmFtcDs8L2NvZGU+LCA8Y29kZT58fDwvY29kZT4sIDxjb2RlPj8gOjwvY29kZT4gb3IgPGNvZGU+LDwvY29kZT4gKGNvbW1hKSBvcGVyYXRvciwgYmVmb3JlIGEKK2Z1bmN0aW9uIGlzIGNhbGxlZCAoYnV0IGFmdGVyIHRoZSBldmFsdWF0aW9uIG9mIGl0cyBhcmd1bWVudHMgYW5kIHRoZQorZXhwcmVzc2lvbiBkZW5vdGluZyB0aGUgY2FsbGVkIGZ1bmN0aW9uKSwgYW5kIGluIGNlcnRhaW4gb3RoZXIgcGxhY2VzLiAKK090aGVyIHRoYW4gYXMgZXhwcmVzc2VkIGJ5IHRoZSBzZXF1ZW5jZSBwb2ludCBydWxlcywgdGhlIG9yZGVyIG9mCitldmFsdWF0aW9uIG9mIHN1YmV4cHJlc3Npb25zIG9mIGFuIGV4cHJlc3Npb24gaXMgbm90IHNwZWNpZmllZC4gIEFsbAordGhlc2UgcnVsZXMgZGVzY3JpYmUgb25seSBhIHBhcnRpYWwgb3JkZXIgcmF0aGVyIHRoYW4gYSB0b3RhbCBvcmRlciwKK3NpbmNlLCBmb3IgZXhhbXBsZSwgaWYgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGhpbiBvbmUgZXhwcmVzc2lvbgord2l0aCBubyBzZXF1ZW5jZSBwb2ludCBiZXR3ZWVuIHRoZW0sIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZnVuY3Rpb25zCithcmUgY2FsbGVkIGlzIG5vdCBzcGVjaWZpZWQuICBIb3dldmVyLCB0aGUgc3RhbmRhcmRzIGNvbW1pdHRlZSBoYXZlCitydWxlZCB0aGF0IGZ1bmN0aW9uIGNhbGxzIGRvIG5vdCBvdmVybGFwLgorCisgICAgIDxwPkl0IGlzIG5vdCBzcGVjaWZpZWQgd2hlbiBiZXR3ZWVuIHNlcXVlbmNlIHBvaW50cyBtb2RpZmljYXRpb25zIHRvIHRoZQordmFsdWVzIG9mIG9iamVjdHMgdGFrZSBlZmZlY3QuICBQcm9ncmFtcyB3aG9zZSBiZWhhdmlvciBkZXBlbmRzIG9uIHRoaXMKK2hhdmUgdW5kZWZpbmVkIGJlaGF2aW9yOyB0aGUgQyBhbmQgQysrIHN0YW5kYXJkcyBzcGVjaWZ5IHRoYXQgJmxkcXVvO0JldHdlZW4KK3RoZSBwcmV2aW91cyBhbmQgbmV4dCBzZXF1ZW5jZSBwb2ludCBhbiBvYmplY3Qgc2hhbGwgaGF2ZSBpdHMgc3RvcmVkCit2YWx1ZSBtb2RpZmllZCBhdCBtb3N0IG9uY2UgYnkgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbi4gCitGdXJ0aGVybW9yZSwgdGhlIHByaW9yIHZhbHVlIHNoYWxsIGJlIHJlYWQgb25seSB0byBkZXRlcm1pbmUgdGhlIHZhbHVlCit0byBiZSBzdG9yZWQuJnJkcXVvOy4gIElmIGEgcHJvZ3JhbSBicmVha3MgdGhlc2UgcnVsZXMsIHRoZSByZXN1bHRzIG9uIGFueQorcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBhcmUgZW50aXJlbHkgdW5wcmVkaWN0YWJsZS4KKworICAgICA8cD5FeGFtcGxlcyBvZiBjb2RlIHdpdGggdW5kZWZpbmVkIGJlaGF2aW9yIGFyZSA8Y29kZT5hID0gYSsrOzwvY29kZT4sIDxjb2RlPmFbbl0KKz0gYltuKytdPC9jb2RlPiBhbmQgPGNvZGU+YVtpKytdID0gaTs8L2NvZGU+LiAgU29tZSBtb3JlIGNvbXBsaWNhdGVkIGNhc2VzIGFyZSBub3QKK2RpYWdub3NlZCBieSB0aGlzIG9wdGlvbiwgYW5kIGl0IG1heSBnaXZlIGFuIG9jY2FzaW9uYWwgZmFsc2UgcG9zaXRpdmUKK3Jlc3VsdCwgYnV0IGluIGdlbmVyYWwgaXQgaGFzIGJlZW4gZm91bmQgZmFpcmx5IGVmZmVjdGl2ZSBhdCBkZXRlY3RpbmcKK3RoaXMgc29ydCBvZiBwcm9ibGVtIGluIHByb2dyYW1zLgorCisgICAgIDxwPlRoZSBzdGFuZGFyZCBpcyB3b3JkZWQgY29uZnVzaW5nbHksIHRoZXJlZm9yZSB0aGVyZSBpcyBzb21lIGRlYmF0ZQorb3ZlciB0aGUgcHJlY2lzZSBtZWFuaW5nIG9mIHRoZSBzZXF1ZW5jZSBwb2ludCBydWxlcyBpbiBzdWJ0bGUgY2FzZXMuIAorTGlua3MgdG8gZGlzY3Vzc2lvbnMgb2YgdGhlIHByb2JsZW0sIGluY2x1ZGluZyBwcm9wb3NlZCBmb3JtYWwKK2RlZmluaXRpb25zLCBtYXkgYmUgZm91bmQgb24gdGhlIEdDQyByZWFkaW5ncyBwYWdlLCBhdAorPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL3JlYWRpbmdzLmh0bWwiPmh0dHA6Ly9nY2MuZ251Lm9yZy9yZWFkaW5ncy5odG1sPC9hPi4KKworICAgICA8cD5UaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+IGZvciBDIGFuZCBDKysuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vLXJldHVybi1sb2NhbC1hZGRyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHJldHVybl8wMDJkbG9jYWxfMDAyZGFkZHItMzExIj48L2E+PGEgbmFtZT0iaW5kZXgtV3JldHVybl8wMDJkbG9jYWxfMDAyZGFkZHItMzEyIj48L2E+RG8gbm90IHdhcm4gYWJvdXQgcmV0dXJuaW5nIGEgcG9pbnRlciAob3IgaW4gQysrLCBhIHJlZmVyZW5jZSkgdG8gYQordmFyaWFibGUgdGhhdCBnb2VzIG91dCBvZiBzY29wZSBhZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XcmV0dXJuLXR5cGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdyZXR1cm5fMDAyZHR5cGUtMzEzIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRyZXR1cm5fMDAyZHR5cGUtMzE0Ij48L2E+V2FybiB3aGVuZXZlciBhIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aCBhIHJldHVybiB0eXBlIHRoYXQgZGVmYXVsdHMKK3RvIDxjb2RlPmludDwvY29kZT4uICBBbHNvIHdhcm4gYWJvdXQgYW55IDxjb2RlPnJldHVybjwvY29kZT4gc3RhdGVtZW50IHdpdGggbm8KK3JldHVybiB2YWx1ZSBpbiBhIGZ1bmN0aW9uIHdob3NlIHJldHVybiB0eXBlIGlzIG5vdCA8Y29kZT52b2lkPC9jb2RlPgorKGZhbGxpbmcgb2ZmIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkgaXMgY29uc2lkZXJlZCByZXR1cm5pbmcKK3dpdGhvdXQgYSB2YWx1ZSksIGFuZCBhYm91dCBhIDxjb2RlPnJldHVybjwvY29kZT4gc3RhdGVtZW50IHdpdGggYW4KK2V4cHJlc3Npb24gaW4gYSBmdW5jdGlvbiB3aG9zZSByZXR1cm4gdHlwZSBpcyA8Y29kZT52b2lkPC9jb2RlPi4KKworICAgICA8cD5Gb3IgQysrLCBhIGZ1bmN0aW9uIHdpdGhvdXQgcmV0dXJuIHR5cGUgYWx3YXlzIHByb2R1Y2VzIGEgZGlhZ25vc3RpYworbWVzc2FnZSwgZXZlbiB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tcmV0dXJuLXR5cGU8L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQuICBUaGUgb25seQorZXhjZXB0aW9ucyBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tYWluPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBzeXN0ZW0gaGVhZGVycy4KKworICAgICA8cD5UaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdzd2l0Y2g8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdzd2l0Y2gtMzE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRzd2l0Y2gtMzE2Ij48L2E+V2FybiB3aGVuZXZlciBhIDxjb2RlPnN3aXRjaDwvY29kZT4gc3RhdGVtZW50IGhhcyBhbiBpbmRleCBvZiBlbnVtZXJhdGVkIHR5cGUKK2FuZCBsYWNrcyBhIDxjb2RlPmNhc2U8L2NvZGU+IGZvciBvbmUgb3IgbW9yZSBvZiB0aGUgbmFtZWQgY29kZXMgb2YgdGhhdAorZW51bWVyYXRpb24uICAoVGhlIHByZXNlbmNlIG9mIGEgPGNvZGU+ZGVmYXVsdDwvY29kZT4gbGFiZWwgcHJldmVudHMgdGhpcword2FybmluZy4pICA8Y29kZT5jYXNlPC9jb2RlPiBsYWJlbHMgb3V0c2lkZSB0aGUgZW51bWVyYXRpb24gcmFuZ2UgYWxzbworcHJvdm9rZSB3YXJuaW5ncyB3aGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgKGV2ZW4gaWYgdGhlcmUgaXMgYQorPGNvZGU+ZGVmYXVsdDwvY29kZT4gbGFiZWwpLiAKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N3aXRjaC1kZWZhdWx0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc3dpdGNoXzAwMmRkZWZhdWx0LTMxNyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc3dpdGNoXzAwMmRkZWZhdWx0LTMxOCI+PC9hPldhcm4gd2hlbmV2ZXIgYSA8Y29kZT5zd2l0Y2g8L2NvZGU+IHN0YXRlbWVudCBkb2VzIG5vdCBoYXZlIGEgPGNvZGU+ZGVmYXVsdDwvY29kZT4KK2Nhc2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N3aXRjaC1lbnVtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc3dpdGNoXzAwMmRlbnVtLTMxOSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc3dpdGNoXzAwMmRlbnVtLTMyMCI+PC9hPldhcm4gd2hlbmV2ZXIgYSA8Y29kZT5zd2l0Y2g8L2NvZGU+IHN0YXRlbWVudCBoYXMgYW4gaW5kZXggb2YgZW51bWVyYXRlZCB0eXBlCithbmQgbGFja3MgYSA8Y29kZT5jYXNlPC9jb2RlPiBmb3Igb25lIG9yIG1vcmUgb2YgdGhlIG5hbWVkIGNvZGVzIG9mIHRoYXQKK2VudW1lcmF0aW9uLiAgPGNvZGU+Y2FzZTwvY29kZT4gbGFiZWxzIG91dHNpZGUgdGhlIGVudW1lcmF0aW9uIHJhbmdlIGFsc28KK3Byb3Zva2Ugd2FybmluZ3Mgd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLiAgVGhlIG9ubHkgZGlmZmVyZW5jZQorYmV0d2VlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3N3aXRjaDwvc3Bhbj48L3NhbXA+IGFuZCB0aGlzIG9wdGlvbiBpcyB0aGF0IHRoaXMgb3B0aW9uIGdpdmVzIGEKK3dhcm5pbmcgYWJvdXQgYW4gb21pdHRlZCBlbnVtZXJhdGlvbiBjb2RlIGV2ZW4gaWYgdGhlcmUgaXMgYQorPGNvZGU+ZGVmYXVsdDwvY29kZT4gbGFiZWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N5bmMtbmFuZCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQyBhbmQgQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1Xc3luY18wMDJkbmFuZC0zMjEiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHN5bmNfMDAyZG5hbmQtMzIyIj48L2E+V2FybiB3aGVuIDxjb2RlPl9fc3luY19mZXRjaF9hbmRfbmFuZDwvY29kZT4gYW5kIDxjb2RlPl9fc3luY19uYW5kX2FuZF9mZXRjaDwvY29kZT4KK2J1aWx0LWluIGZ1bmN0aW9ucyBhcmUgdXNlZC4gIFRoZXNlIGZ1bmN0aW9ucyBjaGFuZ2VkIHNlbWFudGljcyBpbiBHQ0MgNC40LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd0cmlncmFwaHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd0cmlncmFwaHMtMzIzIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR0cmlncmFwaHMtMzI0Ij48L2E+V2FybiBpZiBhbnkgdHJpZ3JhcGhzIGFyZSBlbmNvdW50ZXJlZCB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgbWVhbmluZyBvZgordGhlIHByb2dyYW0gKHRyaWdyYXBocyB3aXRoaW4gY29tbWVudHMgYXJlIG5vdCB3YXJuZWQgYWJvdXQpLiAKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VudXNlZC1idXQtc2V0LXBhcmFtZXRlcjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3VudXNlZF8wMDJkYnV0XzAwMmRzZXRfMDAyZHBhcmFtZXRlci0zMjUiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHVudXNlZF8wMDJkYnV0XzAwMmRzZXRfMDAyZHBhcmFtZXRlci0zMjYiPjwvYT5XYXJuIHdoZW5ldmVyIGEgZnVuY3Rpb24gcGFyYW1ldGVyIGlzIGFzc2lnbmVkIHRvLCBidXQgb3RoZXJ3aXNlIHVudXNlZAorKGFzaWRlIGZyb20gaXRzIGRlY2xhcmF0aW9uKS4KKworICAgICA8cD5UbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVudXNlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdHRyaWJ1dGUKKyhzZWUgPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+KS4KKworICAgICA8cD5UaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdW51c2VkPC9zcGFuPjwvc2FtcD4gdG9nZXRoZXIgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd1bnVzZWQtYnV0LXNldC12YXJpYWJsZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3VudXNlZF8wMDJkYnV0XzAwMmRzZXRfMDAyZHZhcmlhYmxlLTMyNyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkdW51c2VkXzAwMmRidXRfMDAyZHNldF8wMDJkdmFyaWFibGUtMzI4Ij48L2E+V2FybiB3aGVuZXZlciBhIGxvY2FsIHZhcmlhYmxlIGlzIGFzc2lnbmVkIHRvLCBidXQgb3RoZXJ3aXNlIHVudXNlZAorKGFzaWRlIGZyb20gaXRzIGRlY2xhcmF0aW9uKS4gCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPlRvIHN1cHByZXNzIHRoaXMgd2FybmluZyB1c2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dW51c2VkPC9zcGFuPjwvc2FtcD4mcnNxdW87IGF0dHJpYnV0ZQorKHNlZSA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT4pLgorCisgICAgIDxwPlRoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bnVzZWQ8L3NwYW4+PC9zYW1wPiwgd2hpY2ggaXMgZW5hYmxlZAorYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdW51c2VkLWZ1bmN0aW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XdW51c2VkXzAwMmRmdW5jdGlvbi0zMjkiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHVudXNlZF8wMDJkZnVuY3Rpb24tMzMwIj48L2E+V2FybiB3aGVuZXZlciBhIHN0YXRpYyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBidXQgbm90IGRlZmluZWQgb3IgYQorbm9uLWlubGluZSBzdGF0aWMgZnVuY3Rpb24gaXMgdW51c2VkLiAKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VudXNlZC1sYWJlbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3VudXNlZF8wMDJkbGFiZWwtMzMxIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR1bnVzZWRfMDAyZGxhYmVsLTMzMiI+PC9hPldhcm4gd2hlbmV2ZXIgYSBsYWJlbCBpcyBkZWNsYXJlZCBidXQgbm90IHVzZWQuIAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVudXNlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdHRyaWJ1dGUKKyhzZWUgPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdW51c2VkLWxvY2FsLXR5cGVkZWZzIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDLCBPYmplY3RpdmUtQywgQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1XdW51c2VkXzAwMmRsb2NhbF8wMDJkdHlwZWRlZnMtMzMzIj48L2E+V2FybiB3aGVuIGEgdHlwZWRlZiBsb2NhbGx5IGRlZmluZWQgaW4gYSBmdW5jdGlvbiBpcyBub3QgdXNlZC4gCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd1bnVzZWQtcGFyYW1ldGVyPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XdW51c2VkXzAwMmRwYXJhbWV0ZXItMzM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR1bnVzZWRfMDAyZHBhcmFtZXRlci0zMzUiPjwvYT5XYXJuIHdoZW5ldmVyIGEgZnVuY3Rpb24gcGFyYW1ldGVyIGlzIHVudXNlZCBhc2lkZSBmcm9tIGl0cyBkZWNsYXJhdGlvbi4KKworICAgICA8cD5UbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVudXNlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdHRyaWJ1dGUKKyhzZWUgPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8tdW51c2VkLXJlc3VsdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3VudXNlZF8wMDJkcmVzdWx0LTMzNiI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkdW51c2VkXzAwMmRyZXN1bHQtMzM3Ij48L2E+RG8gbm90IHdhcm4gaWYgYSBjYWxsZXIgb2YgYSBmdW5jdGlvbiBtYXJrZWQgd2l0aCBhdHRyaWJ1dGUKKzxjb2RlPndhcm5fdW51c2VkX3Jlc3VsdDwvY29kZT4gKHNlZSA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4pIGRvZXMgbm90IHVzZQoraXRzIHJldHVybiB2YWx1ZS4gVGhlIGRlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bnVzZWQtcmVzdWx0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VudXNlZC12YXJpYWJsZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3VudXNlZF8wMDJkdmFyaWFibGUtMzM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR1bnVzZWRfMDAyZHZhcmlhYmxlLTMzOSI+PC9hPldhcm4gd2hlbmV2ZXIgYSBsb2NhbCB2YXJpYWJsZSBvciBub24tY29uc3RhbnQgc3RhdGljIHZhcmlhYmxlIGlzIHVudXNlZAorYXNpZGUgZnJvbSBpdHMgZGVjbGFyYXRpb24uIAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnVudXNlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdHRyaWJ1dGUKKyhzZWUgPGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPlZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdW51c2VkLXZhbHVlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XdW51c2VkXzAwMmR2YWx1ZS0zNDAiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHVudXNlZF8wMDJkdmFsdWUtMzQxIj48L2E+V2FybiB3aGVuZXZlciBhIHN0YXRlbWVudCBjb21wdXRlcyBhIHJlc3VsdCB0aGF0IGlzIGV4cGxpY2l0bHkgbm90Cit1c2VkLiBUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgY2FzdCB0aGUgdW51c2VkIGV4cHJlc3Npb24gdG8KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dm9pZDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gVGhpcyBpbmNsdWRlcyBhbiBleHByZXNzaW9uLXN0YXRlbWVudCBvciB0aGUgbGVmdC1oYW5kCitzaWRlIG9mIGEgY29tbWEgZXhwcmVzc2lvbiB0aGF0IGNvbnRhaW5zIG5vIHNpZGUgZWZmZWN0cy4gRm9yIGV4YW1wbGUsCithbiBleHByZXNzaW9uIHN1Y2ggYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj54W2ksal08L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2F1c2VzIGEgd2FybmluZywgd2hpbGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+eFsodm9pZClpLGpdPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRvZXMgbm90LgorCisgICAgIDxwPlRoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VudXNlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3VudXNlZC0zNDIiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHVudXNlZC0zNDMiPjwvYT5BbGwgdGhlIGFib3ZlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdW51c2VkPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBjb21iaW5lZC4KKworICAgICA8cD5JbiBvcmRlciB0byBnZXQgYSB3YXJuaW5nIGFib3V0IGFuIHVudXNlZCBmdW5jdGlvbiBwYXJhbWV0ZXIsIHlvdSBtdXN0CitlaXRoZXIgc3BlY2lmeSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2V4dHJhIC1XdW51c2VkPC9zcGFuPjwvc2FtcD4gKG5vdGUgdGhhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+IGltcGxpZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdW51c2VkPC9zcGFuPjwvc2FtcD4pLCBvciBzZXBhcmF0ZWx5IHNwZWNpZnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bnVzZWQtcGFyYW1ldGVyPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VuaW5pdGlhbGl6ZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd1bmluaXRpYWxpemVkLTM0NCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkdW5pbml0aWFsaXplZC0zNDUiPjwvYT5XYXJuIGlmIGFuIGF1dG9tYXRpYyB2YXJpYWJsZSBpcyB1c2VkIHdpdGhvdXQgZmlyc3QgYmVpbmcgaW5pdGlhbGl6ZWQKK29yIGlmIGEgdmFyaWFibGUgbWF5IGJlIGNsb2JiZXJlZCBieSBhIDxjb2RlPnNldGptcDwvY29kZT4gY2FsbC4gSW4gQysrLAord2FybiBpZiBhIG5vbi1zdGF0aWMgcmVmZXJlbmNlIG9yIG5vbi1zdGF0aWMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb25zdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtZW1iZXIKK2FwcGVhcnMgaW4gYSBjbGFzcyB3aXRob3V0IGNvbnN0cnVjdG9ycy4KKworICAgICA8cD5JZiB5b3Ugd2FudCB0byB3YXJuIGFib3V0IGNvZGUgdGhhdCB1c2VzIHRoZSB1bmluaXRpYWxpemVkIHZhbHVlIG9mIHRoZQordmFyaWFibGUgaW4gaXRzIG93biBpbml0aWFsaXplciwgdXNlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2luaXQtc2VsZjwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8cD5UaGVzZSB3YXJuaW5ncyBvY2N1ciBmb3IgaW5kaXZpZHVhbCB1bmluaXRpYWxpemVkIG9yIGNsb2JiZXJlZAorZWxlbWVudHMgb2Ygc3RydWN0dXJlLCB1bmlvbiBvciBhcnJheSB2YXJpYWJsZXMgYXMgd2VsbCBhcyBmb3IKK3ZhcmlhYmxlcyB0aGF0IGFyZSB1bmluaXRpYWxpemVkIG9yIGNsb2JiZXJlZCBhcyBhIHdob2xlLiAgVGhleSBkbworbm90IG9jY3VyIGZvciB2YXJpYWJsZXMgb3IgZWxlbWVudHMgZGVjbGFyZWQgPGNvZGU+dm9sYXRpbGU8L2NvZGU+LiAgQmVjYXVzZQordGhlc2Ugd2FybmluZ3MgZGVwZW5kIG9uIG9wdGltaXphdGlvbiwgdGhlIGV4YWN0IHZhcmlhYmxlcyBvciBlbGVtZW50cworZm9yIHdoaWNoIHRoZXJlIGFyZSB3YXJuaW5ncyBkZXBlbmRzIG9uIHRoZSBwcmVjaXNlIG9wdGltaXphdGlvbgorb3B0aW9ucyBhbmQgdmVyc2lvbiBvZiBHQ0MgdXNlZC4KKworICAgICA8cD5Ob3RlIHRoYXQgdGhlcmUgbWF5IGJlIG5vIHdhcm5pbmcgYWJvdXQgYSB2YXJpYWJsZSB0aGF0IGlzIHVzZWQgb25seQordG8gY29tcHV0ZSBhIHZhbHVlIHRoYXQgaXRzZWxmIGlzIG5ldmVyIHVzZWQsIGJlY2F1c2Ugc3VjaAorY29tcHV0YXRpb25zIG1heSBiZSBkZWxldGVkIGJ5IGRhdGEgZmxvdyBhbmFseXNpcyBiZWZvcmUgdGhlIHdhcm5pbmdzCithcmUgcHJpbnRlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XbWF5YmUtdW5pbml0aWFsaXplZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV21heWJlXzAwMmR1bmluaXRpYWxpemVkLTM0NiI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbWF5YmVfMDAyZHVuaW5pdGlhbGl6ZWQtMzQ3Ij48L2E+Rm9yIGFuIGF1dG9tYXRpYyB2YXJpYWJsZSwgaWYgdGhlcmUgZXhpc3RzIGEgcGF0aCBmcm9tIHRoZSBmdW5jdGlvbgorZW50cnkgdG8gYSB1c2Ugb2YgdGhlIHZhcmlhYmxlIHRoYXQgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB0aGVyZSBleGlzdAorc29tZSBvdGhlciBwYXRocyBmb3Igd2hpY2ggdGhlIHZhcmlhYmxlIGlzIG5vdCBpbml0aWFsaXplZCwgdGhlIGNvbXBpbGVyCitlbWl0cyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IHByb3ZlIHRoZSB1bmluaXRpYWxpemVkIHBhdGhzIGFyZSBub3QKK2V4ZWN1dGVkIGF0IHJ1biB0aW1lLiBUaGVzZSB3YXJuaW5ncyBhcmUgbWFkZSBvcHRpb25hbCBiZWNhdXNlIEdDQyBpcworbm90IHNtYXJ0IGVub3VnaCB0byBzZWUgYWxsIHRoZSByZWFzb25zIHdoeSB0aGUgY29kZSBtaWdodCBiZSBjb3JyZWN0CitpbiBzcGl0ZSBvZiBhcHBlYXJpbmcgdG8gaGF2ZSBhbiBlcnJvci4gIEhlcmUgaXMgb25lIGV4YW1wbGUgb2YgaG93Cit0aGlzIGNhbiBoYXBwZW46CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICBzd2l0Y2ggKHkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiB4ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyOiB4ID0gNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiB4ID0gNTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9vICh4KTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5JZiB0aGUgdmFsdWUgb2YgPGNvZGU+eTwvY29kZT4gaXMgYWx3YXlzIDEsIDIgb3IgMywgdGhlbiA8Y29kZT54PC9jb2RlPiBpcworYWx3YXlzIGluaXRpYWxpemVkLCBidXQgR0NDIGRvZXNuJ3Qga25vdyB0aGlzLiBUbyBzdXBwcmVzcyB0aGUKK3dhcm5pbmcsIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSBkZWZhdWx0IGNhc2Ugd2l0aCBhc3NlcnQoMCkgb3IKK3NpbWlsYXIgY29kZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmxvbmdqbXBfMDA3ZC13YXJuaW5ncy0zNDgiPjwvYT5UaGlzIG9wdGlvbiBhbHNvIHdhcm5zIHdoZW4gYSBub24tdm9sYXRpbGUgYXV0b21hdGljIHZhcmlhYmxlIG1pZ2h0IGJlCitjaGFuZ2VkIGJ5IGEgY2FsbCB0byA8Y29kZT5sb25nam1wPC9jb2RlPi4gIFRoZXNlIHdhcm5pbmdzIGFzIHdlbGwgYXJlIHBvc3NpYmxlCitvbmx5IGluIG9wdGltaXppbmcgY29tcGlsYXRpb24uCisKKyAgICAgPHA+VGhlIGNvbXBpbGVyIHNlZXMgb25seSB0aGUgY2FsbHMgdG8gPGNvZGU+c2V0am1wPC9jb2RlPi4gIEl0IGNhbm5vdCBrbm93Cit3aGVyZSA8Y29kZT5sb25nam1wPC9jb2RlPiB3aWxsIGJlIGNhbGxlZDsgaW4gZmFjdCwgYSBzaWduYWwgaGFuZGxlciBjb3VsZAorY2FsbCBpdCBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvZGUuICBBcyBhIHJlc3VsdCwgeW91IG1heSBnZXQgYSB3YXJuaW5nCitldmVuIHdoZW4gdGhlcmUgaXMgaW4gZmFjdCBubyBwcm9ibGVtIGJlY2F1c2UgPGNvZGU+bG9uZ2ptcDwvY29kZT4gY2Fubm90CitpbiBmYWN0IGJlIGNhbGxlZCBhdCB0aGUgcGxhY2UgdGhhdCB3b3VsZCBjYXVzZSBhIHByb2JsZW0uCisKKyAgICAgPHA+U29tZSBzcHVyaW91cyB3YXJuaW5ncyBjYW4gYmUgYXZvaWRlZCBpZiB5b3UgZGVjbGFyZSBhbGwgdGhlIGZ1bmN0aW9ucworeW91IHVzZSB0aGF0IG5ldmVyIHJldHVybiBhcyA8Y29kZT5ub3JldHVybjwvY29kZT4uICBTZWUgPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+LgorCisgICAgIDxwPlRoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd1bmtub3duLXByYWdtYXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd1bmtub3duXzAwMmRwcmFnbWFzLTM0OSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkdW5rbm93bl8wMDJkcHJhZ21hcy0zNTAiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nLWZvci11bmtub3duLXByYWdtYXMtMzUxIj48L2E+PGEgbmFtZT0iaW5kZXgtdW5rbm93bi1wcmFnbWFzXzAwMmMtd2FybmluZy0zNTIiPjwvYT48YSBuYW1lPSJpbmRleC1wcmFnbWFzXzAwMmMtd2FybmluZy1vZi11bmtub3duLTM1MyI+PC9hPldhcm4gd2hlbiBhIDxjb2RlPiNwcmFnbWE8L2NvZGU+IGRpcmVjdGl2ZSBpcyBlbmNvdW50ZXJlZCB0aGF0IGlzIG5vdCB1bmRlcnN0b29kIGJ5CitHQ0MuICBJZiB0aGlzIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgdXNlZCwgd2FybmluZ3MgYXJlIGV2ZW4gaXNzdWVkCitmb3IgdW5rbm93biBwcmFnbWFzIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuICBUaGlzIGlzIG5vdCB0aGUgY2FzZSBpZgordGhlIHdhcm5pbmdzIGFyZSBvbmx5IGVuYWJsZWQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4gY29tbWFuZC1saW5lIG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8tcHJhZ21hczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRwcmFnbWFzLTM1NCI+PC9hPjxhIG5hbWU9ImluZGV4LVdwcmFnbWFzLTM1NSI+PC9hPkRvIG5vdCB3YXJuIGFib3V0IG1pc3VzZXMgb2YgcHJhZ21hcywgc3VjaCBhcyBpbmNvcnJlY3QgcGFyYW1ldGVycywKK2ludmFsaWQgc3ludGF4LCBvciBjb25mbGljdHMgYmV0d2VlbiBwcmFnbWFzLiAgU2VlIGFsc28KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdW5rbm93bi1wcmFnbWFzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N0cmljdC1hbGlhc2luZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3N0cmljdF8wMDJkYWxpYXNpbmctMzU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRzdHJpY3RfMDAyZGFsaWFzaW5nLTM1NyI+PC9hPlRoaXMgb3B0aW9uIGlzIG9ubHkgYWN0aXZlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzdHJpY3QtYWxpYXNpbmc8L3NwYW4+PC9zYW1wPiBpcyBhY3RpdmUuIAorSXQgd2FybnMgYWJvdXQgY29kZSB0aGF0IG1pZ2h0IGJyZWFrIHRoZSBzdHJpY3QgYWxpYXNpbmcgcnVsZXMgdGhhdCB0aGUKK2NvbXBpbGVyIGlzIHVzaW5nIGZvciBvcHRpbWl6YXRpb24uICBUaGUgd2FybmluZyBkb2VzIG5vdCBjYXRjaCBhbGwKK2Nhc2VzLCBidXQgZG9lcyBhdHRlbXB0IHRvIGNhdGNoIHRoZSBtb3JlIGNvbW1vbiBwaXRmYWxscy4gIEl0IGlzCitpbmNsdWRlZCBpbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+LiAKK0l0IGlzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdzdHJpY3QtYWxpYXNpbmc9Mzwvc3Bhbj48L3NhbXA+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N0cmljdC1hbGlhc2luZz1uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc3RyaWN0XzAwMmRhbGlhc2luZ18wMDNkbi0zNTgiPjwvYT5UaGlzIG9wdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc3RyaWN0LWFsaWFzaW5nPC9zcGFuPjwvc2FtcD4gaXMgYWN0aXZlLiAKK0l0IHdhcm5zIGFib3V0IGNvZGUgdGhhdCBtaWdodCBicmVhayB0aGUgc3RyaWN0IGFsaWFzaW5nIHJ1bGVzIHRoYXQgdGhlCitjb21waWxlciBpcyB1c2luZyBmb3Igb3B0aW1pemF0aW9uLiAKK0hpZ2hlciBsZXZlbHMgY29ycmVzcG9uZCB0byBoaWdoZXIgYWNjdXJhY3kgKGZld2VyIGZhbHNlIHBvc2l0aXZlcykuIAorSGlnaGVyIGxldmVscyBhbHNvIGNvcnJlc3BvbmQgdG8gbW9yZSBlZmZvcnQsIHNpbWlsYXIgdG8gdGhlIHdheSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+Cit3b3Jrcy4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3N0cmljdC1hbGlhc2luZzwvc3Bhbj48L3NhbXA+IGlzIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdzdHJpY3QtYWxpYXNpbmc9Mzwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPkxldmVsIDE6IE1vc3QgYWdncmVzc2l2ZSwgcXVpY2ssIGxlYXN0IGFjY3VyYXRlLiAKK1Bvc3NpYmx5IHVzZWZ1bCB3aGVuIGhpZ2hlciBsZXZlbHMKK2RvIG5vdCB3YXJuIGJ1dCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0cmljdC1hbGlhc2luZzwvc3Bhbj48L3NhbXA+IHN0aWxsIGJyZWFrcyB0aGUgY29kZSwgYXMgaXQgaGFzIHZlcnkgZmV3CitmYWxzZSBuZWdhdGl2ZXMuICBIb3dldmVyLCBpdCBoYXMgbWFueSBmYWxzZSBwb3NpdGl2ZXMuIAorV2FybnMgZm9yIGFsbCBwb2ludGVyIGNvbnZlcnNpb25zIGJldHdlZW4gcG9zc2libHkgaW5jb21wYXRpYmxlIHR5cGVzLAorZXZlbiBpZiBuZXZlciBkZXJlZmVyZW5jZWQuICBSdW5zIGluIHRoZSBmcm9udCBlbmQgb25seS4KKworICAgICA8cD5MZXZlbCAyOiBBZ2dyZXNzaXZlLCBxdWljaywgbm90IHRvbyBwcmVjaXNlLiAKK01heSBzdGlsbCBoYXZlIG1hbnkgZmFsc2UgcG9zaXRpdmVzIChub3QgYXMgbWFueSBhcyBsZXZlbCAxIHRob3VnaCksCithbmQgZmV3IGZhbHNlIG5lZ2F0aXZlcyAoYnV0IHBvc3NpYmx5IG1vcmUgdGhhbiBsZXZlbCAxKS4gCitVbmxpa2UgbGV2ZWwgMSwgaXQgb25seSB3YXJucyB3aGVuIGFuIGFkZHJlc3MgaXMgdGFrZW4uICBXYXJucyBhYm91dAoraW5jb21wbGV0ZSB0eXBlcy4gIFJ1bnMgaW4gdGhlIGZyb250IGVuZCBvbmx5LgorCisgICAgIDxwPkxldmVsIDMgKGRlZmF1bHQgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xc3RyaWN0LWFsaWFzaW5nPC9zcGFuPjwvc2FtcD4pOgorU2hvdWxkIGhhdmUgdmVyeSBmZXcgZmFsc2UgcG9zaXRpdmVzIGFuZCBmZXcgZmFsc2UKK25lZ2F0aXZlcy4gIFNsaWdodGx5IHNsb3dlciB0aGFuIGxldmVscyAxIG9yIDIgd2hlbiBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZC4gCitUYWtlcyBjYXJlIG9mIHRoZSBjb21tb24gcHVuK2RlcmVmZXJlbmNlIHBhdHRlcm4gaW4gdGhlIGZyb250IGVuZDoKKzxjb2RlPiooaW50KikmYW1wO3NvbWVfZmxvYXQ8L2NvZGU+LiAKK0lmIG9wdGltaXphdGlvbiBpcyBlbmFibGVkLCBpdCBhbHNvIHJ1bnMgaW4gdGhlIGJhY2sgZW5kLCB3aGVyZSBpdCBkZWFscword2l0aCBtdWx0aXBsZSBzdGF0ZW1lbnQgY2FzZXMgdXNpbmcgZmxvdy1zZW5zaXRpdmUgcG9pbnRzLXRvIGluZm9ybWF0aW9uLiAKK09ubHkgd2FybnMgd2hlbiB0aGUgY29udmVydGVkIHBvaW50ZXIgaXMgZGVyZWZlcmVuY2VkLiAKK0RvZXMgbm90IHdhcm4gYWJvdXQgaW5jb21wbGV0ZSB0eXBlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xc3RyaWN0LW92ZXJmbG93PC9jb2RlPjxkdD48Y29kZT4tV3N0cmljdC1vdmVyZmxvdz08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LVdzdHJpY3RfMDAyZG92ZXJmbG93LTM1OSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc3RyaWN0XzAwMmRvdmVyZmxvdy0zNjAiPjwvYT5UaGlzIG9wdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc3RyaWN0LW92ZXJmbG93PC9zcGFuPjwvc2FtcD4gaXMgYWN0aXZlLiAKK0l0IHdhcm5zIGFib3V0IGNhc2VzIHdoZXJlIHRoZSBjb21waWxlciBvcHRpbWl6ZXMgYmFzZWQgb24gdGhlCithc3N1bXB0aW9uIHRoYXQgc2lnbmVkIG92ZXJmbG93IGRvZXMgbm90IG9jY3VyLiAgTm90ZSB0aGF0IGl0IGRvZXMgbm90Cit3YXJuIGFib3V0IGFsbCBjYXNlcyB3aGVyZSB0aGUgY29kZSBtaWdodCBvdmVyZmxvdzogaXQgb25seSB3YXJucworYWJvdXQgY2FzZXMgd2hlcmUgdGhlIGNvbXBpbGVyIGltcGxlbWVudHMgc29tZSBvcHRpbWl6YXRpb24uICBUaHVzCit0aGlzIHdhcm5pbmcgZGVwZW5kcyBvbiB0aGUgb3B0aW1pemF0aW9uIGxldmVsLgorCisgICAgIDxwPkFuIG9wdGltaXphdGlvbiB0aGF0IGFzc3VtZXMgdGhhdCBzaWduZWQgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIgaXMKK3BlcmZlY3RseSBzYWZlIGlmIHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBhcmUgc3VjaCB0aGF0CitvdmVyZmxvdyBuZXZlciBkb2VzLCBpbiBmYWN0LCBvY2N1ci4gIFRoZXJlZm9yZSB0aGlzIHdhcm5pbmcgY2FuCitlYXNpbHkgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlOiBhIHdhcm5pbmcgYWJvdXQgY29kZSB0aGF0IGlzIG5vdAorYWN0dWFsbHkgYSBwcm9ibGVtLiAgVG8gaGVscCBmb2N1cyBvbiBpbXBvcnRhbnQgaXNzdWVzLCBzZXZlcmFsCit3YXJuaW5nIGxldmVscyBhcmUgZGVmaW5lZC4gIE5vIHdhcm5pbmdzIGFyZSBpc3N1ZWQgZm9yIHRoZSB1c2Ugb2YKK3VuZGVmaW5lZCBzaWduZWQgb3ZlcmZsb3cgd2hlbiBlc3RpbWF0aW5nIGhvdyBtYW55IGl0ZXJhdGlvbnMgYSBsb29wCityZXF1aXJlcywgaW4gcGFydGljdWxhciB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgYSBsb29wIHdpbGwgYmUKK2V4ZWN1dGVkIGF0IGFsbC4KKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT4tV3N0cmljdC1vdmVyZmxvdz0xPC9jb2RlPjxkZD5XYXJuIGFib3V0IGNhc2VzIHRoYXQgYXJlIGJvdGggcXVlc3Rpb25hYmxlIGFuZCBlYXN5IHRvIGF2b2lkLiAgRm9yCitleGFtcGxlLCAgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0cmljdC1vdmVyZmxvdzwvc3Bhbj48L3NhbXA+LCB0aGUgY29tcGlsZXIgc2ltcGxpZmllcworPGNvZGU+eCArIDEgJmd0OyB4PC9jb2RlPiB0byA8Y29kZT4xPC9jb2RlPi4gIFRoaXMgbGV2ZWwgb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xc3RyaWN0LW92ZXJmbG93PC9zcGFuPjwvc2FtcD4gaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+OyBoaWdoZXIgbGV2ZWxzCithcmUgbm90LCBhbmQgbXVzdCBiZSBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LVdzdHJpY3Qtb3ZlcmZsb3c9MjwvY29kZT48ZGQ+QWxzbyB3YXJuIGFib3V0IG90aGVyIGNhc2VzIHdoZXJlIGEgY29tcGFyaXNvbiBpcyBzaW1wbGlmaWVkIHRvIGEKK2NvbnN0YW50LiAgRm9yIGV4YW1wbGU6IDxjb2RlPmFicyAoeCkgJmd0Oz0gMDwvY29kZT4uICBUaGlzIGNhbiBvbmx5IGJlCitzaW1wbGlmaWVkIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzdHJpY3Qtb3ZlcmZsb3c8L3NwYW4+PC9zYW1wPiBpcyBpbiBlZmZlY3QsIGJlY2F1c2UKKzxjb2RlPmFicyAoSU5UX01JTik8L2NvZGU+IG92ZXJmbG93cyB0byA8Y29kZT5JTlRfTUlOPC9jb2RlPiwgd2hpY2ggaXMgbGVzcyB0aGFuCit6ZXJvLiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdzdHJpY3Qtb3ZlcmZsb3c8L3NwYW4+PC9zYW1wPiAod2l0aCBubyBsZXZlbCkgaXMgdGhlIHNhbWUgYXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xc3RyaWN0LW92ZXJmbG93PTI8L3NwYW4+PC9zYW1wPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LVdzdHJpY3Qtb3ZlcmZsb3c9MzwvY29kZT48ZGQ+QWxzbyB3YXJuIGFib3V0IG90aGVyIGNhc2VzIHdoZXJlIGEgY29tcGFyaXNvbiBpcyBzaW1wbGlmaWVkLiAgRm9yCitleGFtcGxlOiA8Y29kZT54ICsgMSAmZ3Q7IDE8L2NvZGU+IGlzIHNpbXBsaWZpZWQgdG8gPGNvZGU+eCAmZ3Q7IDA8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tV3N0cmljdC1vdmVyZmxvdz00PC9jb2RlPjxkZD5BbHNvIHdhcm4gYWJvdXQgb3RoZXIgc2ltcGxpZmljYXRpb25zIG5vdCBjb3ZlcmVkIGJ5IHRoZSBhYm92ZSBjYXNlcy4gCitGb3IgZXhhbXBsZTogPGNvZGU+KHggKiAxMCkgLyA1PC9jb2RlPiBpcyBzaW1wbGlmaWVkIHRvIDxjb2RlPnggKiAyPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LVdzdHJpY3Qtb3ZlcmZsb3c9NTwvY29kZT48ZGQ+QWxzbyB3YXJuIGFib3V0IGNhc2VzIHdoZXJlIHRoZSBjb21waWxlciByZWR1Y2VzIHRoZSBtYWduaXR1ZGUgb2YgYQorY29uc3RhbnQgaW52b2x2ZWQgaW4gYSBjb21wYXJpc29uLiAgRm9yIGV4YW1wbGU6IDxjb2RlPnggKyAyICZndDsgeTwvY29kZT4gaXMKK3NpbXBsaWZpZWQgdG8gPGNvZGU+eCArIDEgJmd0Oz0geTwvY29kZT4uICBUaGlzIGlzIHJlcG9ydGVkIG9ubHkgYXQgdGhlCitoaWdoZXN0IHdhcm5pbmcgbGV2ZWwgYmVjYXVzZSB0aGlzIHNpbXBsaWZpY2F0aW9uIGFwcGxpZXMgdG8gbWFueQorY29tcGFyaXNvbnMsIHNvIHRoaXMgd2FybmluZyBsZXZlbCBnaXZlcyBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mCitmYWxzZSBwb3NpdGl2ZXMuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xc3VnZ2VzdC1hdHRyaWJ1dGU9PC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+Wzwvc3Bhbj48Y29kZT5wdXJlPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+fDwvc3Bhbj48Y29kZT5jb25zdDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPnw8L3NwYW4+PGNvZGU+bm9yZXR1cm48L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj58PC9zcGFuPjxjb2RlPmZvcm1hdDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdzdWdnZXN0XzAwMmRhdHRyaWJ1dGVfMDAzZC0zNjEiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHN1Z2dlc3RfMDAyZGF0dHJpYnV0ZV8wMDNkLTM2MiI+PC9hPldhcm4gZm9yIGNhc2VzIHdoZXJlIGFkZGluZyBhbiBhdHRyaWJ1dGUgbWF5IGJlIGJlbmVmaWNpYWwuIFRoZQorYXR0cmlidXRlcyBjdXJyZW50bHkgc3VwcG9ydGVkIGFyZSBsaXN0ZWQgYmVsb3cuCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LVdzdWdnZXN0LWF0dHJpYnV0ZT1wdXJlPC9jb2RlPjxkdD48Y29kZT4tV3N1Z2dlc3QtYXR0cmlidXRlPWNvbnN0PC9jb2RlPjxkdD48Y29kZT4tV3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc3VnZ2VzdF8wMDJkYXR0cmlidXRlXzAwM2RwdXJlLTM2MyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc3VnZ2VzdF8wMDJkYXR0cmlidXRlXzAwM2RwdXJlLTM2NCI+PC9hPjxhIG5hbWU9ImluZGV4LVdzdWdnZXN0XzAwMmRhdHRyaWJ1dGVfMDAzZGNvbnN0LTM2NSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc3VnZ2VzdF8wMDJkYXR0cmlidXRlXzAwM2Rjb25zdC0zNjYiPjwvYT48YSBuYW1lPSJpbmRleC1Xc3VnZ2VzdF8wMDJkYXR0cmlidXRlXzAwM2Rub3JldHVybi0zNjciPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHN1Z2dlc3RfMDAyZGF0dHJpYnV0ZV8wMDNkbm9yZXR1cm4tMzY4Ij48L2E+CitXYXJuIGFib3V0IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNhbmRpZGF0ZXMgZm9yIGF0dHJpYnV0ZXMKKzxjb2RlPnB1cmU8L2NvZGU+LCA8Y29kZT5jb25zdDwvY29kZT4gb3IgPGNvZGU+bm9yZXR1cm48L2NvZGU+LiAgVGhlIGNvbXBpbGVyIG9ubHkgd2FybnMgZm9yCitmdW5jdGlvbnMgdmlzaWJsZSBpbiBvdGhlciBjb21waWxhdGlvbiB1bml0cyBvciAoaW4gdGhlIGNhc2Ugb2YgPGNvZGU+cHVyZTwvY29kZT4gYW5kCis8Y29kZT5jb25zdDwvY29kZT4pIGlmIGl0IGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG5vcm1hbGx5LiBBIGZ1bmN0aW9uCityZXR1cm5zIG5vcm1hbGx5IGlmIGl0IGRvZXNuJ3QgY29udGFpbiBhbiBpbmZpbml0ZSBsb29wIG9yIHJldHVybiBhYm5vcm1hbGx5CitieSB0aHJvd2luZywgY2FsbGluZyA8Y29kZT5hYm9ydCgpPC9jb2RlPiBvciB0cmFwcGluZy4gIFRoaXMgYW5hbHlzaXMgcmVxdWlyZXMgb3B0aW9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmlwYS1wdXJlLWNvbnN0PC9zcGFuPjwvc2FtcD4sIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+IGFuZAoraGlnaGVyLiAgSGlnaGVyIG9wdGltaXphdGlvbiBsZXZlbHMgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YgdGhlIGFuYWx5c2lzLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4tV3N1Z2dlc3QtYXR0cmlidXRlPWZvcm1hdDwvY29kZT48ZHQ+PGNvZGU+LVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdzdWdnZXN0XzAwMmRhdHRyaWJ1dGVfMDAzZGZvcm1hdC0zNjkiPjwvYT48YSBuYW1lPSJpbmRleC1XbWlzc2luZ18wMDJkZm9ybWF0XzAwMmRhdHRyaWJ1dGUtMzcwIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRzdWdnZXN0XzAwMmRhdHRyaWJ1dGVfMDAzZGZvcm1hdC0zNzEiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG1pc3NpbmdfMDAyZGZvcm1hdF8wMDJkYXR0cmlidXRlLTM3MiI+PC9hPjxhIG5hbWU9ImluZGV4LVdmb3JtYXQtMzczIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRmb3JtYXQtMzc0Ij48L2E+CitXYXJuIGFib3V0IGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgbWlnaHQgYmUgY2FuZGlkYXRlcyBmb3IgPGNvZGU+Zm9ybWF0PC9jb2RlPgorYXR0cmlidXRlcy4gIE5vdGUgdGhlc2UgYXJlIG9ubHkgcG9zc2libGUgY2FuZGlkYXRlcywgbm90IGFic29sdXRlIG9uZXMuIAorR0NDIGd1ZXNzZXMgdGhhdCBmdW5jdGlvbiBwb2ludGVycyB3aXRoIDxjb2RlPmZvcm1hdDwvY29kZT4gYXR0cmlidXRlcyB0aGF0CithcmUgdXNlZCBpbiBhc3NpZ25tZW50LCBpbml0aWFsaXphdGlvbiwgcGFyYW1ldGVyIHBhc3Npbmcgb3IgcmV0dXJuCitzdGF0ZW1lbnRzIHNob3VsZCBoYXZlIGEgY29ycmVzcG9uZGluZyA8Y29kZT5mb3JtYXQ8L2NvZGU+IGF0dHJpYnV0ZSBpbiB0aGUKK3Jlc3VsdGluZyB0eXBlLiAgSS5lLiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIGFzc2lnbm1lbnQgb3IKK2luaXRpYWxpemF0aW9uLCB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyIHZhcmlhYmxlLCBvciB0aGUgcmV0dXJuIHR5cGUKK29mIHRoZSBjb250YWluaW5nIGZ1bmN0aW9uIHJlc3BlY3RpdmVseSBzaG91bGQgYWxzbyBoYXZlIGEgPGNvZGU+Zm9ybWF0PC9jb2RlPgorYXR0cmlidXRlIHRvIGF2b2lkIHRoZSB3YXJuaW5nLgorCisgICAgICAgICAgPHA+R0NDIGFsc28gd2FybnMgYWJvdXQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdGhhdCBtaWdodCBiZQorY2FuZGlkYXRlcyBmb3IgPGNvZGU+Zm9ybWF0PC9jb2RlPiBhdHRyaWJ1dGVzLiAgQWdhaW4sIHRoZXNlIGFyZSBvbmx5Citwb3NzaWJsZSBjYW5kaWRhdGVzLiAgR0NDIGd1ZXNzZXMgdGhhdCA8Y29kZT5mb3JtYXQ8L2NvZGU+IGF0dHJpYnV0ZXMKK21pZ2h0IGJlIGFwcHJvcHJpYXRlIGZvciBhbnkgZnVuY3Rpb24gdGhhdCBjYWxscyBhIGZ1bmN0aW9uIGxpa2UKKzxjb2RlPnZwcmludGY8L2NvZGU+IG9yIDxjb2RlPnZzY2FuZjwvY29kZT4sIGJ1dCB0aGlzIG1pZ2h0IG5vdCBhbHdheXMgYmUgdGhlCitjYXNlLCBhbmQgc29tZSBmdW5jdGlvbnMgZm9yIHdoaWNoIDxjb2RlPmZvcm1hdDwvY29kZT4gYXR0cmlidXRlcyBhcmUKK2FwcHJvcHJpYXRlIG1heSBub3QgYmUgZGV0ZWN0ZWQuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYXJyYXktYm91bmRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGFycmF5XzAwMmRib3VuZHMtMzc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtV2FycmF5XzAwMmRib3VuZHMtMzc2Ij48L2E+VGhpcyBvcHRpb24gaXMgb25seSBhY3RpdmUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnRyZWUtdnJwPC9zcGFuPjwvc2FtcD4gaXMgYWN0aXZlCisoZGVmYXVsdCBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU8yPC9zcGFuPjwvc2FtcD4gYW5kIGFib3ZlKS4gSXQgd2FybnMgYWJvdXQgc3Vic2NyaXB0cyB0byBhcnJheXMKK3RoYXQgYXJlIGFsd2F5cyBvdXQgb2YgYm91bmRzLiBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1kaXYtYnktemVybzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRkaXZfMDAyZGJ5XzAwMmR6ZXJvLTM3NyI+PC9hPjxhIG5hbWU9ImluZGV4LVdkaXZfMDAyZGJ5XzAwMmR6ZXJvLTM3OCI+PC9hPkRvIG5vdCB3YXJuIGFib3V0IGNvbXBpbGUtdGltZSBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8uICBGbG9hdGluZy1wb2ludAorZGl2aXNpb24gYnkgemVybyBpcyBub3Qgd2FybmVkIGFib3V0LCBhcyBpdCBjYW4gYmUgYSBsZWdpdGltYXRlIHdheSBvZgorb2J0YWluaW5nIGluZmluaXRpZXMgYW5kIE5hTnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N5c3RlbS1oZWFkZXJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc3lzdGVtXzAwMmRoZWFkZXJzLTM3OSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc3lzdGVtXzAwMmRoZWFkZXJzLTM4MCI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzLWZyb20tc3lzdGVtLWhlYWRlcnMtMzgxIj48L2E+PGEgbmFtZT0iaW5kZXgtc3lzdGVtLWhlYWRlcnNfMDAyYy13YXJuaW5ncy1mcm9tLTM4MiI+PC9hPlByaW50IHdhcm5pbmcgbWVzc2FnZXMgZm9yIGNvbnN0cnVjdHMgZm91bmQgaW4gc3lzdGVtIGhlYWRlciBmaWxlcy4gCitXYXJuaW5ncyBmcm9tIHN5c3RlbSBoZWFkZXJzIGFyZSBub3JtYWxseSBzdXBwcmVzc2VkLCBvbiB0aGUgYXNzdW1wdGlvbgordGhhdCB0aGV5IHVzdWFsbHkgZG8gbm90IGluZGljYXRlIHJlYWwgcHJvYmxlbXMgYW5kIHdvdWxkIG9ubHkgbWFrZSB0aGUKK2NvbXBpbGVyIG91dHB1dCBoYXJkZXIgdG8gcmVhZC4gIFVzaW5nIHRoaXMgY29tbWFuZC1saW5lIG9wdGlvbiB0ZWxscworR0NDIHRvIGVtaXQgd2FybmluZ3MgZnJvbSBzeXN0ZW0gaGVhZGVycyBhcyBpZiB0aGV5IG9jY3VycmVkIGluIHVzZXIKK2NvZGUuICBIb3dldmVyLCBub3RlIHRoYXQgdXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMKK29wdGlvbiBkb2VzIDxlbT5ub3Q8L2VtPiB3YXJuIGFib3V0IHVua25vd24gcHJhZ21hcyBpbiBzeXN0ZW0KK2hlYWRlcnMmbWRhc2g7Zm9yIHRoYXQsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdW5rbm93bi1wcmFnbWFzPC9zcGFuPjwvc2FtcD4gbXVzdCBhbHNvIGJlIHVzZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3RyYW1wb2xpbmVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XdHJhbXBvbGluZXMtMzgzIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR0cmFtcG9saW5lcy0zODQiPjwvYT4gV2FybiBhYm91dCB0cmFtcG9saW5lcyBnZW5lcmF0ZWQgZm9yIHBvaW50ZXJzIHRvIG5lc3RlZCBmdW5jdGlvbnMuCisKKyAgICAgPHA+QSB0cmFtcG9saW5lIGlzIGEgc21hbGwgcGllY2Ugb2YgZGF0YSBvciBjb2RlIHRoYXQgaXMgY3JlYXRlZCBhdCBydW4KKyB0aW1lIG9uIHRoZSBzdGFjayB3aGVuIHRoZSBhZGRyZXNzIG9mIGEgbmVzdGVkIGZ1bmN0aW9uIGlzIHRha2VuLCBhbmQKKyBpcyB1c2VkIHRvIGNhbGwgdGhlIG5lc3RlZCBmdW5jdGlvbiBpbmRpcmVjdGx5LiAgRm9yIHNvbWUgdGFyZ2V0cywgaXQKKyBpcyBtYWRlIHVwIG9mIGRhdGEgb25seSBhbmQgdGh1cyByZXF1aXJlcyBubyBzcGVjaWFsIHRyZWF0bWVudC4gIEJ1dCwKKyBmb3IgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrCisgdG8gYmUgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdmbG9hdC1lcXVhbDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2Zsb2F0XzAwMmRlcXVhbC0zODUiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGZsb2F0XzAwMmRlcXVhbC0zODYiPjwvYT5XYXJuIGlmIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgdXNlZCBpbiBlcXVhbGl0eSBjb21wYXJpc29ucy4KKworICAgICA8cD5UaGUgaWRlYSBiZWhpbmQgdGhpcyBpcyB0aGF0IHNvbWV0aW1lcyBpdCBpcyBjb252ZW5pZW50IChmb3IgdGhlCitwcm9ncmFtbWVyKSB0byBjb25zaWRlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYXMgYXBwcm94aW1hdGlvbnMgdG8KK2luZmluaXRlbHkgcHJlY2lzZSByZWFsIG51bWJlcnMuICBJZiB5b3UgYXJlIGRvaW5nIHRoaXMsIHRoZW4geW91IG5lZWQKK3RvIGNvbXB1dGUgKGJ5IGFuYWx5emluZyB0aGUgY29kZSwgb3IgaW4gc29tZSBvdGhlciB3YXkpIHRoZSBtYXhpbXVtIG9yCitsaWtlbHkgbWF4aW11bSBlcnJvciB0aGF0IHRoZSBjb21wdXRhdGlvbiBpbnRyb2R1Y2VzLCBhbmQgYWxsb3cgZm9yIGl0Cit3aGVuIHBlcmZvcm1pbmcgY29tcGFyaXNvbnMgKGFuZCB3aGVuIHByb2R1Y2luZyBvdXRwdXQsIGJ1dCB0aGF0J3MgYQorZGlmZmVyZW50IHByb2JsZW0pLiAgSW4gcGFydGljdWxhciwgaW5zdGVhZCBvZiB0ZXN0aW5nIGZvciBlcXVhbGl0eSwgeW91CitzaG91bGQgY2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhlIHR3byB2YWx1ZXMgaGF2ZSByYW5nZXMgdGhhdCBvdmVybGFwOyBhbmQKK3RoaXMgaXMgZG9uZSB3aXRoIHRoZSByZWxhdGlvbmFsIG9wZXJhdG9ycywgc28gZXF1YWxpdHkgY29tcGFyaXNvbnMgYXJlCitwcm9iYWJseSBtaXN0YWtlbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdHJhZGl0aW9uYWwgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1XdHJhZGl0aW9uYWwtMzg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR0cmFkaXRpb25hbC0zODgiPjwvYT5XYXJuIGFib3V0IGNlcnRhaW4gY29uc3RydWN0cyB0aGF0IGJlaGF2ZSBkaWZmZXJlbnRseSBpbiB0cmFkaXRpb25hbCBhbmQKK0lTTyBDLiAgQWxzbyB3YXJuIGFib3V0IElTTyBDIGNvbnN0cnVjdHMgdGhhdCBoYXZlIG5vIHRyYWRpdGlvbmFsIEMKK2VxdWl2YWxlbnQsIGFuZC9vciBwcm9ibGVtYXRpYyBjb25zdHJ1Y3RzIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQuCisKKyAgICAgICAgICA8dWw+Cis8bGk+TWFjcm8gcGFyYW1ldGVycyB0aGF0IGFwcGVhciB3aXRoaW4gc3RyaW5nIGxpdGVyYWxzIGluIHRoZSBtYWNybyBib2R5LiAKK0luIHRyYWRpdGlvbmFsIEMgbWFjcm8gcmVwbGFjZW1lbnQgdGFrZXMgcGxhY2Ugd2l0aGluIHN0cmluZyBsaXRlcmFscywKK2J1dCBpbiBJU08gQyBpdCBkb2VzIG5vdC4KKworICAgICAgICAgIDxsaT5JbiB0cmFkaXRpb25hbCBDLCBzb21lIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGRpZCBub3QgZXhpc3QuIAorVHJhZGl0aW9uYWwgcHJlcHJvY2Vzc29ycyBvbmx5IGNvbnNpZGVyZWQgYSBsaW5lIHRvIGJlIGEgZGlyZWN0aXZlCitpZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFwcGVhcmVkIGluIGNvbHVtbiAxIG9uIHRoZSBsaW5lLiAgVGhlcmVmb3JlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3RyYWRpdGlvbmFsPC9zcGFuPjwvc2FtcD4gd2FybnMgYWJvdXQgZGlyZWN0aXZlcyB0aGF0IHRyYWRpdGlvbmFsIEMKK3VuZGVyc3RhbmRzIGJ1dCBpZ25vcmVzIGJlY2F1c2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Izwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkb2VzIG5vdCBhcHBlYXIgYXMgdGhlCitmaXJzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUuICBJdCBhbHNvIHN1Z2dlc3RzIHlvdSBoaWRlIGRpcmVjdGl2ZXMgbGlrZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jcHJhZ21hPC9zcGFuPjwvc2FtcD4mcnNxdW87IG5vdCB1bmRlcnN0b29kIGJ5IHRyYWRpdGlvbmFsIEMgYnkgaW5kZW50aW5nIHRoZW0uICBTb21lCit0cmFkaXRpb25hbCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHJlY29nbml6ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbGlmPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBzbyB0aGlzIG9wdGlvbgorc3VnZ2VzdHMgYXZvaWRpbmcgaXQgYWx0b2dldGhlci4KKworICAgICAgICAgIDxsaT5BIGZ1bmN0aW9uLWxpa2UgbWFjcm8gdGhhdCBhcHBlYXJzIHdpdGhvdXQgYXJndW1lbnRzLgorCisgICAgICAgICAgPGxpPlRoZSB1bmFyeSBwbHVzIG9wZXJhdG9yLgorCisgICAgICAgICAgPGxpPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW50ZWdlciBjb25zdGFudCBzdWZmaXgsIG9yIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZsb2F0aW5nLXBvaW50Citjb25zdGFudCBzdWZmaXhlcy4gIChUcmFkaXRpb25hbCBDIGRvZXMgc3VwcG9ydCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5MPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN1ZmZpeCBvbiBpbnRlZ2VyCitjb25zdGFudHMuKSAgTm90ZSwgdGhlc2Ugc3VmZml4ZXMgYXBwZWFyIGluIG1hY3JvcyBkZWZpbmVkIGluIHRoZSBzeXN0ZW0KK2hlYWRlcnMgb2YgbW9zdCBtb2Rlcm4gc3lzdGVtcywgZS5nLiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fTUlOPC9zcGFuPjwvc2FtcD4mcnNxdW87LyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X01BWDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtYWNyb3MgaW4gPGNvZGU+Jmx0O2xpbWl0cy5oJmd0OzwvY29kZT4uIAorVXNlIG9mIHRoZXNlIG1hY3JvcyBpbiB1c2VyIGNvZGUgbWlnaHQgbm9ybWFsbHkgbGVhZCB0byBzcHVyaW91cword2FybmluZ3MsIGhvd2V2ZXIgR0NDJ3MgaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3IgaGFzIGVub3VnaCBjb250ZXh0IHRvCithdm9pZCB3YXJuaW5nIGluIHRoZXNlIGNhc2VzLgorCisgICAgICAgICAgPGxpPkEgZnVuY3Rpb24gZGVjbGFyZWQgZXh0ZXJuYWwgaW4gb25lIGJsb2NrIGFuZCB0aGVuIHVzZWQgYWZ0ZXIgdGhlIGVuZCBvZgordGhlIGJsb2NrLgorCisgICAgICAgICAgPGxpPkEgPGNvZGU+c3dpdGNoPC9jb2RlPiBzdGF0ZW1lbnQgaGFzIGFuIG9wZXJhbmQgb2YgdHlwZSA8Y29kZT5sb25nPC9jb2RlPi4KKworICAgICAgICAgIDxsaT5BIG5vbi08Y29kZT5zdGF0aWM8L2NvZGU+IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZvbGxvd3MgYSA8Y29kZT5zdGF0aWM8L2NvZGU+IG9uZS4gCitUaGlzIGNvbnN0cnVjdCBpcyBub3QgYWNjZXB0ZWQgYnkgc29tZSB0cmFkaXRpb25hbCBDIGNvbXBpbGVycy4KKworICAgICAgICAgIDxsaT5UaGUgSVNPIHR5cGUgb2YgYW4gaW50ZWdlciBjb25zdGFudCBoYXMgYSBkaWZmZXJlbnQgd2lkdGggb3IKK3NpZ25lZG5lc3MgZnJvbSBpdHMgdHJhZGl0aW9uYWwgdHlwZS4gIFRoaXMgd2FybmluZyBpcyBvbmx5IGlzc3VlZCBpZgordGhlIGJhc2Ugb2YgdGhlIGNvbnN0YW50IGlzIHRlbi4gIEkuZS4gaGV4YWRlY2ltYWwgb3Igb2N0YWwgdmFsdWVzLCB3aGljaAordHlwaWNhbGx5IHJlcHJlc2VudCBiaXQgcGF0dGVybnMsIGFyZSBub3Qgd2FybmVkIGFib3V0LgorCisgICAgICAgICAgPGxpPlVzYWdlIG9mIElTTyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBpcyBkZXRlY3RlZC4KKworICAgICAgICAgIDxsaT5Jbml0aWFsaXphdGlvbiBvZiBhdXRvbWF0aWMgYWdncmVnYXRlcy4KKworICAgICAgICAgIDxsaT5JZGVudGlmaWVyIGNvbmZsaWN0cyB3aXRoIGxhYmVscy4gIFRyYWRpdGlvbmFsIEMgbGFja3MgYSBzZXBhcmF0ZQorbmFtZXNwYWNlIGZvciBsYWJlbHMuCisKKyAgICAgICAgICA8bGk+SW5pdGlhbGl6YXRpb24gb2YgdW5pb25zLiAgSWYgdGhlIGluaXRpYWxpemVyIGlzIHplcm8sIHRoZSB3YXJuaW5nIGlzCitvbWl0dGVkLiAgVGhpcyBpcyBkb25lIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHplcm8gaW5pdGlhbGl6ZXIgaW4KK3VzZXIgY29kZSBhcHBlYXJzIGNvbmRpdGlvbmVkIG9uIGUuZy4gPGNvZGU+X19TVERDX188L2NvZGU+IHRvIGF2b2lkIG1pc3NpbmcKK2luaXRpYWxpemVyIHdhcm5pbmdzIGFuZCByZWxpZXMgb24gZGVmYXVsdCBpbml0aWFsaXphdGlvbiB0byB6ZXJvIGluIHRoZQordHJhZGl0aW9uYWwgQyBjYXNlLgorCisgICAgICAgICAgPGxpPkNvbnZlcnNpb25zIGJ5IHByb3RvdHlwZXMgYmV0d2VlbiBmaXhlZC9mbG9hdGluZy1wb2ludCB2YWx1ZXMgYW5kIHZpY2UKK3ZlcnNhLiAgVGhlIGFic2VuY2Ugb2YgdGhlc2UgcHJvdG90eXBlcyB3aGVuIGNvbXBpbGluZyB3aXRoIHRyYWRpdGlvbmFsCitDIGNhdXNlcyBzZXJpb3VzIHByb2JsZW1zLiAgVGhpcyBpcyBhIHN1YnNldCBvZiB0aGUgcG9zc2libGUKK2NvbnZlcnNpb24gd2FybmluZ3M7IGZvciB0aGUgZnVsbCBzZXQgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdHJhZGl0aW9uYWwtY29udmVyc2lvbjwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGxpPlVzZSBvZiBJU08gQyBzdHlsZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoaXMgd2FybmluZyBpbnRlbnRpb25hbGx5IGlzCis8ZW0+bm90PC9lbT4gaXNzdWVkIGZvciBwcm90b3R5cGUgZGVjbGFyYXRpb25zIG9yIHZhcmlhZGljIGZ1bmN0aW9ucworYmVjYXVzZSB0aGVzZSBJU08gQyBmZWF0dXJlcyBhcHBlYXIgaW4geW91ciBjb2RlIHdoZW4gdXNpbmcKK2xpYmliZXJ0eSdzIHRyYWRpdGlvbmFsIEMgY29tcGF0aWJpbGl0eSBtYWNyb3MsIDxjb2RlPlBBUkFNUzwvY29kZT4gYW5kCis8Y29kZT5WUEFSQU1TPC9jb2RlPi4gIFRoaXMgd2FybmluZyBpcyBhbHNvIGJ5cGFzc2VkIGZvciBuZXN0ZWQgZnVuY3Rpb25zCitiZWNhdXNlIHRoYXQgZmVhdHVyZSBpcyBhbHJlYWR5IGEgR0NDIGV4dGVuc2lvbiBhbmQgdGh1cyBub3QgcmVsZXZhbnQgdG8KK3RyYWRpdGlvbmFsIEMgY29tcGF0aWJpbGl0eS4gCis8L3VsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd0cmFkaXRpb25hbC1jb252ZXJzaW9uIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV3RyYWRpdGlvbmFsXzAwMmRjb252ZXJzaW9uLTM4OSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkdHJhZGl0aW9uYWxfMDAyZGNvbnZlcnNpb24tMzkwIj48L2E+V2FybiBpZiBhIHByb3RvdHlwZSBjYXVzZXMgYSB0eXBlIGNvbnZlcnNpb24gdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0Cit3b3VsZCBoYXBwZW4gdG8gdGhlIHNhbWUgYXJndW1lbnQgaW4gdGhlIGFic2VuY2Ugb2YgYSBwcm90b3R5cGUuICBUaGlzCitpbmNsdWRlcyBjb252ZXJzaW9ucyBvZiBmaXhlZCBwb2ludCB0byBmbG9hdGluZyBhbmQgdmljZSB2ZXJzYSwgYW5kCitjb252ZXJzaW9ucyBjaGFuZ2luZyB0aGUgd2lkdGggb3Igc2lnbmVkbmVzcyBvZiBhIGZpeGVkLXBvaW50IGFyZ3VtZW50CitleGNlcHQgd2hlbiB0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdCBwcm9tb3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQyBhbmQgT2JqZWN0aXZlLUMgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdkZWNsYXJhdGlvbl8wMDJkYWZ0ZXJfMDAyZHN0YXRlbWVudC0zOTEiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGRlY2xhcmF0aW9uXzAwMmRhZnRlcl8wMDJkc3RhdGVtZW50LTM5MiI+PC9hPldhcm4gd2hlbiBhIGRlY2xhcmF0aW9uIGlzIGZvdW5kIGFmdGVyIGEgc3RhdGVtZW50IGluIGEgYmxvY2suICBUaGlzCitjb25zdHJ1Y3QsIGtub3duIGZyb20gQysrLCB3YXMgaW50cm9kdWNlZCB3aXRoIElTTyBDOTkgYW5kIGlzIGJ5IGRlZmF1bHQKK2FsbG93ZWQgaW4gR0NDLiAgSXQgaXMgbm90IHN1cHBvcnRlZCBieSBJU08gQzkwIGFuZCB3YXMgbm90IHN1cHBvcnRlZCBieQorR0NDIHZlcnNpb25zIGJlZm9yZSBHQ0MgMy4wLiAgU2VlIDxhIGhyZWY9Ik1peGVkLURlY2xhcmF0aW9ucy5odG1sI01peGVkLURlY2xhcmF0aW9ucyI+TWl4ZWQgRGVjbGFyYXRpb25zPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdW5kZWY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd1bmRlZi0zOTMiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHVuZGVmLTM5NCI+PC9hPldhcm4gaWYgYW4gdW5kZWZpbmVkIGlkZW50aWZpZXIgaXMgZXZhbHVhdGVkIGluIGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+I2lmPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8tZW5kaWYtbGFiZWxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGVuZGlmXzAwMmRsYWJlbHMtMzk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtV2VuZGlmXzAwMmRsYWJlbHMtMzk2Ij48L2E+RG8gbm90IHdhcm4gd2hlbmV2ZXIgYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4jZWxzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciBhbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiNlbmRpZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgZm9sbG93ZWQgYnkgdGV4dC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xc2hhZG93PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc2hhZG93LTM5NyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc2hhZG93LTM5OCI+PC9hPldhcm4gd2hlbmV2ZXIgYSBsb2NhbCB2YXJpYWJsZSBvciB0eXBlIGRlY2xhcmF0aW9uIHNoYWRvd3MgYW5vdGhlciB2YXJpYWJsZSwKK3BhcmFtZXRlciwgdHlwZSwgb3IgY2xhc3MgbWVtYmVyIChpbiBDKyspLCBvciB3aGVuZXZlciBhIGJ1aWx0LWluIGZ1bmN0aW9uCitpcyBzaGFkb3dlZC4gTm90ZSB0aGF0IGluIEMrKywgdGhlIGNvbXBpbGVyIHdhcm5zIGlmIGEgbG9jYWwgdmFyaWFibGUKK3NoYWRvd3MgYW4gZXhwbGljaXQgdHlwZWRlZiwgYnV0IG5vdCBpZiBpdCBzaGFkb3dzIGEgc3RydWN0L2NsYXNzL2VudW0uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2xhcmdlci10aGFuPTwvY29kZT48dmFyPmxlbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1XbGFyZ2VyXzAwMmR0aGFuXzAwM2RfMDA0MHZhcl8wMDdibGVuXzAwN2QtMzk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtV2xhcmdlcl8wMDJkdGhhbl8wMDJkXzAwNDB2YXJfMDA3Ymxlbl8wMDdkLTQwMCI+PC9hPldhcm4gd2hlbmV2ZXIgYW4gb2JqZWN0IG9mIGxhcmdlciB0aGFuIDx2YXI+bGVuPC92YXI+IGJ5dGVzIGlzIGRlZmluZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2ZyYW1lLWxhcmdlci10aGFuPTwvY29kZT48dmFyPmxlbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1XZnJhbWVfMDAyZGxhcmdlcl8wMDJkdGhhbi00MDEiPjwvYT5XYXJuIGlmIHRoZSBzaXplIG9mIGEgZnVuY3Rpb24gZnJhbWUgaXMgbGFyZ2VyIHRoYW4gPHZhcj5sZW48L3Zhcj4gYnl0ZXMuIAorVGhlIGNvbXB1dGF0aW9uIGRvbmUgdG8gZGV0ZXJtaW5lIHRoZSBzdGFjayBmcmFtZSBzaXplIGlzIGFwcHJveGltYXRlCithbmQgbm90IGNvbnNlcnZhdGl2ZS4gCitUaGUgYWN0dWFsIHJlcXVpcmVtZW50cyBtYXkgYmUgc29tZXdoYXQgZ3JlYXRlciB0aGFuIDx2YXI+bGVuPC92YXI+CitldmVuIGlmIHlvdSBkbyBub3QgZ2V0IGEgd2FybmluZy4gIEluIGFkZGl0aW9uLCBhbnkgc3BhY2UgYWxsb2NhdGVkCit2aWEgPGNvZGU+YWxsb2NhPC9jb2RlPiwgdmFyaWFibGUtbGVuZ3RoIGFycmF5cywgb3IgcmVsYXRlZCBjb25zdHJ1Y3RzCitpcyBub3QgaW5jbHVkZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4gZGV0ZXJtaW5pbmcKK3doZXRoZXIgb3Igbm90IHRvIGlzc3VlIGEgd2FybmluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8tZnJlZS1ub25oZWFwLW9iamVjdDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRmcmVlXzAwMmRub25oZWFwXzAwMmRvYmplY3QtNDAyIj48L2E+PGEgbmFtZT0iaW5kZXgtV2ZyZWVfMDAyZG5vbmhlYXBfMDAyZG9iamVjdC00MDMiPjwvYT5EbyBub3Qgd2FybiB3aGVuIGF0dGVtcHRpbmcgdG8gZnJlZSBhbiBvYmplY3QgdGhhdCB3YXMgbm90IGFsbG9jYXRlZAorb24gdGhlIGhlYXAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N0YWNrLXVzYWdlPTwvY29kZT48dmFyPmxlbjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1Xc3RhY2tfMDAyZHVzYWdlLTQwNCI+PC9hPldhcm4gaWYgdGhlIHN0YWNrIHVzYWdlIG9mIGEgZnVuY3Rpb24gbWlnaHQgYmUgbGFyZ2VyIHRoYW4gPHZhcj5sZW48L3Zhcj4gYnl0ZXMuIAorVGhlIGNvbXB1dGF0aW9uIGRvbmUgdG8gZGV0ZXJtaW5lIHRoZSBzdGFjayB1c2FnZSBpcyBjb25zZXJ2YXRpdmUuIAorQW55IHNwYWNlIGFsbG9jYXRlZCB2aWEgPGNvZGU+YWxsb2NhPC9jb2RlPiwgdmFyaWFibGUtbGVuZ3RoIGFycmF5cywgb3IgcmVsYXRlZAorY29uc3RydWN0cyBpcyBpbmNsdWRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCB0bworaXNzdWUgYSB3YXJuaW5nLgorCisgICAgIDxwPlRoZSBtZXNzYWdlIGlzIGluIGtlZXBpbmcgd2l0aCB0aGUgb3V0cHV0IG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc3RhY2stdXNhZ2U8L3NwYW4+PC9zYW1wPi4KKworICAgICAgICAgIDx1bD4KKzxsaT5JZiB0aGUgc3RhY2sgdXNhZ2UgaXMgZnVsbHkgc3RhdGljIGJ1dCBleGNlZWRzIHRoZSBzcGVjaWZpZWQgYW1vdW50LCBpdCdzOgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAgIHdhcm5pbmc6IHN0YWNrIHVzYWdlIGlzIDExMjAgYnl0ZXMKKzwvcHJlPgorICAgICAgICAgIDxsaT5JZiB0aGUgc3RhY2sgdXNhZ2UgaXMgKHBhcnRseSkgZHluYW1pYyBidXQgYm91bmRlZCwgaXQnczoKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgICB3YXJuaW5nOiBzdGFjayB1c2FnZSBtaWdodCBiZSAxNjQ4IGJ5dGVzCis8L3ByZT4KKyAgICAgICAgICA8bGk+SWYgdGhlIHN0YWNrIHVzYWdlIGlzIChwYXJ0bHkpIGR5bmFtaWMgYW5kIG5vdCBib3VuZGVkLCBpdCdzOgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAgIHdhcm5pbmc6IHN0YWNrIHVzYWdlIG1pZ2h0IGJlIHVuYm91bmRlZAorPC9wcmU+CisgICAgICAgICAgPC91bD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3Vuc2FmZV8wMDJkbG9vcF8wMDJkb3B0aW1pemF0aW9ucy00MDUiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHVuc2FmZV8wMDJkbG9vcF8wMDJkb3B0aW1pemF0aW9ucy00MDYiPjwvYT5XYXJuIGlmIHRoZSBsb29wIGNhbm5vdCBiZSBvcHRpbWl6ZWQgYmVjYXVzZSB0aGUgY29tcGlsZXIgY2Fubm90Cithc3N1bWUgYW55dGhpbmcgb24gdGhlIGJvdW5kcyBvZiB0aGUgbG9vcCBpbmRpY2VzLiAgV2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zPC9zcGFuPjwvc2FtcD4gd2FybiBpZiB0aGUgY29tcGlsZXIgbWFrZXMKK3N1Y2ggYXNzdW1wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vLXBlZGFudGljLW1zLWZvcm1hdCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oTWluR1cgdGFyZ2V0cyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRwZWRhbnRpY18wMDJkbXNfMDAyZGZvcm1hdC00MDciPjwvYT48YSBuYW1lPSJpbmRleC1XcGVkYW50aWNfMDAyZG1zXzAwMmRmb3JtYXQtNDA4Ij48L2E+V2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdmb3JtYXQ8L3NwYW4+PC9zYW1wPgorYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+IHdpdGhvdXQgR05VIGV4dGVuc2lvbnMsIHRoaXMgb3B0aW9uCitkaXNhYmxlcyB0aGUgd2FybmluZ3MgYWJvdXQgbm9uLUlTTyA8Y29kZT5wcmludGY8L2NvZGU+IC8gPGNvZGU+c2NhbmY8L2NvZGU+IGZvcm1hdAord2lkdGggc3BlY2lmaWVycyA8Y29kZT5JMzI8L2NvZGU+LCA8Y29kZT5JNjQ8L2NvZGU+LCBhbmQgPGNvZGU+STwvY29kZT4gdXNlZCBvbiBXaW5kb3dzIHRhcmdldHMsCit3aGljaCBkZXBlbmQgb24gdGhlIE1TIHJ1bnRpbWUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3BvaW50ZXItYXJpdGg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdwb2ludGVyXzAwMmRhcml0aC00MDkiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHBvaW50ZXJfMDAyZGFyaXRoLTQxMCI+PC9hPldhcm4gYWJvdXQgYW55dGhpbmcgdGhhdCBkZXBlbmRzIG9uIHRoZSAmbGRxdW87c2l6ZSBvZiZyZHF1bzsgYSBmdW5jdGlvbiB0eXBlIG9yCitvZiA8Y29kZT52b2lkPC9jb2RlPi4gIEdOVSBDIGFzc2lnbnMgdGhlc2UgdHlwZXMgYSBzaXplIG9mIDEsIGZvcgorY29udmVuaWVuY2UgaW4gY2FsY3VsYXRpb25zIHdpdGggPGNvZGU+dm9pZCAqPC9jb2RlPiBwb2ludGVycyBhbmQgcG9pbnRlcnMKK3RvIGZ1bmN0aW9ucy4gIEluIEMrKywgd2FybiBhbHNvIHdoZW4gYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24gaW52b2x2ZXMKKzxjb2RlPk5VTEw8L2NvZGU+LiAgVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3BlZGFudGljPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3R5cGUtbGltaXRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XdHlwZV8wMDJkbGltaXRzLTQxMSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkdHlwZV8wMDJkbGltaXRzLTQxMiI+PC9hPldhcm4gaWYgYSBjb21wYXJpc29uIGlzIGFsd2F5cyB0cnVlIG9yIGFsd2F5cyBmYWxzZSBkdWUgdG8gdGhlIGxpbWl0ZWQKK3JhbmdlIG9mIHRoZSBkYXRhIHR5cGUsIGJ1dCBkbyBub3Qgd2FybiBmb3IgY29uc3RhbnQgZXhwcmVzc2lvbnMuICBGb3IKK2V4YW1wbGUsIHdhcm4gaWYgYW4gdW5zaWduZWQgdmFyaWFibGUgaXMgY29tcGFyZWQgYWdhaW5zdCB6ZXJvIHdpdGgKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs9PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdiYWQtZnVuY3Rpb24tY2FzdCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQyBhbmQgT2JqZWN0aXZlLUMgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdiYWRfMDAyZGZ1bmN0aW9uXzAwMmRjYXN0LTQxMyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkYmFkXzAwMmRmdW5jdGlvbl8wMDJkY2FzdC00MTQiPjwvYT5XYXJuIHdoZW5ldmVyIGEgZnVuY3Rpb24gY2FsbCBpcyBjYXN0IHRvIGEgbm9uLW1hdGNoaW5nIHR5cGUuIAorRm9yIGV4YW1wbGUsIHdhcm4gaWYgPGNvZGU+aW50IG1hbGxvYygpPC9jb2RlPiBpcyBjYXN0IHRvIDxjb2RlPmFueXRoaW5nICo8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdjKystY29tcGF0IDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+V2FybiBhYm91dCBJU08gQyBjb25zdHJ1Y3RzIHRoYXQgYXJlIG91dHNpZGUgb2YgdGhlIGNvbW1vbiBzdWJzZXQgb2YKK0lTTyBDIGFuZCBJU08gQysrLCBlLmcuIHJlcXVlc3QgZm9yIGltcGxpY2l0IGNvbnZlcnNpb24gZnJvbQorPGNvZGU+dm9pZCAqPC9jb2RlPiB0byBhIHBvaW50ZXIgdG8gbm9uLTxjb2RlPnZvaWQ8L2NvZGU+IHR5cGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2MrKzExLWNvbXBhdCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD5XYXJuIGFib3V0IEMrKyBjb25zdHJ1Y3RzIHdob3NlIG1lYW5pbmcgZGlmZmVycyBiZXR3ZWVuIElTTyBDKysgMTk5OAorYW5kIElTTyBDKysgMjAxMSwgZS5nLiwgaWRlbnRpZmllcnMgaW4gSVNPIEMrKyAxOTk4IHRoYXQgYXJlIGtleXdvcmRzCitpbiBJU08gQysrIDIwMTEuICBUaGlzIHdhcm5pbmcgdHVybnMgb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduYXJyb3dpbmc8L3NwYW4+PC9zYW1wPiBhbmQgaXMKK2VuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XY2FzdC1xdWFsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XY2FzdF8wMDJkcXVhbC00MTUiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGNhc3RfMDAyZHF1YWwtNDE2Ij48L2E+V2FybiB3aGVuZXZlciBhIHBvaW50ZXIgaXMgY2FzdCBzbyBhcyB0byByZW1vdmUgYSB0eXBlIHF1YWxpZmllciBmcm9tCit0aGUgdGFyZ2V0IHR5cGUuICBGb3IgZXhhbXBsZSwgd2FybiBpZiBhIDxjb2RlPmNvbnN0IGNoYXIgKjwvY29kZT4gaXMgY2FzdAordG8gYW4gb3JkaW5hcnkgPGNvZGU+Y2hhciAqPC9jb2RlPi4KKworICAgICA8cD5BbHNvIHdhcm4gd2hlbiBtYWtpbmcgYSBjYXN0IHRoYXQgaW50cm9kdWNlcyBhIHR5cGUgcXVhbGlmaWVyIGluIGFuCit1bnNhZmUgd2F5LiAgRm9yIGV4YW1wbGUsIGNhc3RpbmcgPGNvZGU+Y2hhciAqKjwvY29kZT4gdG8gPGNvZGU+Y29uc3QgY2hhciAqKjwvY29kZT4KK2lzIHVuc2FmZSwgYXMgaW4gdGhpcyBleGFtcGxlOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgLyogcCBpcyBjaGFyICoqIHZhbHVlLiAgKi8KKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKipxID0gKGNvbnN0IGNoYXIgKiopIHA7CisgICAgICAgICAgICAvKiBBc3NpZ25tZW50IG9mIHJlYWRvbmx5IHN0cmluZyB0byBjb25zdCBjaGFyICogaXMgT0suICAqLworICAgICAgICAgICAgKnEgPSAic3RyaW5nIjsKKyAgICAgICAgICAgIC8qIE5vdyBjaGFyKiogcG9pbnRlciBwb2ludHMgdG8gcmVhZC1vbmx5IG1lbW9yeS4gICovCisgICAgICAgICAgICAqKnAgPSAnYic7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4tV2Nhc3QtYWxpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdjYXN0XzAwMmRhbGlnbi00MTciPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGNhc3RfMDAyZGFsaWduLTQxOCI+PC9hPldhcm4gd2hlbmV2ZXIgYSBwb2ludGVyIGlzIGNhc3Qgc3VjaCB0aGF0IHRoZSByZXF1aXJlZCBhbGlnbm1lbnQgb2YgdGhlCit0YXJnZXQgaXMgaW5jcmVhc2VkLiAgRm9yIGV4YW1wbGUsIHdhcm4gaWYgYSA8Y29kZT5jaGFyICo8L2NvZGU+IGlzIGNhc3QgdG8KK2FuIDxjb2RlPmludCAqPC9jb2RlPiBvbiBtYWNoaW5lcyB3aGVyZSBpbnRlZ2VycyBjYW4gb25seSBiZSBhY2Nlc3NlZCBhdAordHdvLSBvciBmb3VyLWJ5dGUgYm91bmRhcmllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xd3JpdGUtc3RyaW5nczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3dyaXRlXzAwMmRzdHJpbmdzLTQxOSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkd3JpdGVfMDAyZHN0cmluZ3MtNDIwIj48L2E+V2hlbiBjb21waWxpbmcgQywgZ2l2ZSBzdHJpbmcgY29uc3RhbnRzIHRoZSB0eXBlIDxjb2RlPmNvbnN0CitjaGFyWzwvY29kZT48dmFyPmxlbmd0aDwvdmFyPjxjb2RlPl08L2NvZGU+IHNvIHRoYXQgY29weWluZyB0aGUgYWRkcmVzcyBvZiBvbmUgaW50byBhCitub24tPGNvZGU+Y29uc3Q8L2NvZGU+IDxjb2RlPmNoYXIgKjwvY29kZT4gcG9pbnRlciBwcm9kdWNlcyBhIHdhcm5pbmcuICBUaGVzZQord2FybmluZ3MgaGVscCB5b3UgZmluZCBhdCBjb21waWxlIHRpbWUgY29kZSB0aGF0IGNhbiB0cnkgdG8gd3JpdGUKK2ludG8gYSBzdHJpbmcgY29uc3RhbnQsIGJ1dCBvbmx5IGlmIHlvdSBoYXZlIGJlZW4gdmVyeSBjYXJlZnVsIGFib3V0Cit1c2luZyA8Y29kZT5jb25zdDwvY29kZT4gaW4gZGVjbGFyYXRpb25zIGFuZCBwcm90b3R5cGVzLiAgT3RoZXJ3aXNlLCBpdCBpcworanVzdCBhIG51aXNhbmNlLiBUaGlzIGlzIHdoeSB3ZSBkaWQgbm90IG1ha2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPiByZXF1ZXN0Cit0aGVzZSB3YXJuaW5ncy4KKworICAgICA8cD5XaGVuIGNvbXBpbGluZyBDKyssIHdhcm4gYWJvdXQgdGhlIGRlcHJlY2F0ZWQgY29udmVyc2lvbiBmcm9tIHN0cmluZworbGl0ZXJhbHMgdG8gPGNvZGU+Y2hhciAqPC9jb2RlPi4gIFRoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIEMrKworcHJvZ3JhbXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2Nsb2JiZXJlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2Nsb2JiZXJlZC00MjEiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGNsb2JiZXJlZC00MjIiPjwvYT5XYXJuIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBiZSBjaGFuZ2VkIGJ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9uZ2ptcDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52Zm9yazwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdjb252ZXJzaW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XY29udmVyc2lvbi00MjMiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGNvbnZlcnNpb24tNDI0Ij48L2E+V2FybiBmb3IgaW1wbGljaXQgY29udmVyc2lvbnMgdGhhdCBtYXkgYWx0ZXIgYSB2YWx1ZS4gVGhpcyBpbmNsdWRlcworY29udmVyc2lvbnMgYmV0d2VlbiByZWFsIGFuZCBpbnRlZ2VyLCBsaWtlIDxjb2RlPmFicyAoeCk8L2NvZGU+IHdoZW4KKzxjb2RlPng8L2NvZGU+IGlzIDxjb2RlPmRvdWJsZTwvY29kZT47IGNvbnZlcnNpb25zIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCwKK2xpa2UgPGNvZGU+dW5zaWduZWQgdWkgPSAtMTwvY29kZT47IGFuZCBjb252ZXJzaW9ucyB0byBzbWFsbGVyIHR5cGVzLCBsaWtlCis8Y29kZT5zcXJ0ZiAoTV9QSSk8L2NvZGU+LiBEbyBub3Qgd2FybiBmb3IgZXhwbGljaXQgY2FzdHMgbGlrZSA8Y29kZT5hYnMKKygoaW50KSB4KTwvY29kZT4gYW5kIDxjb2RlPnVpID0gKHVuc2lnbmVkKSAtMTwvY29kZT4sIG9yIGlmIHRoZSB2YWx1ZSBpcyBub3QKK2NoYW5nZWQgYnkgdGhlIGNvbnZlcnNpb24gbGlrZSBpbiA8Y29kZT5hYnMgKDIuMCk8L2NvZGU+LiAgV2FybmluZ3MgYWJvdXQKK2NvbnZlcnNpb25zIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCBpbnRlZ2VycyBjYW4gYmUgZGlzYWJsZWQgYnkKK3VzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tc2lnbi1jb252ZXJzaW9uPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+Rm9yIEMrKywgYWxzbyB3YXJuIGZvciBjb25mdXNpbmcgb3ZlcmxvYWQgcmVzb2x1dGlvbiBmb3IgdXNlci1kZWZpbmVkCitjb252ZXJzaW9uczsgYW5kIGNvbnZlcnNpb25zIHRoYXQgbmV2ZXIgdXNlIGEgdHlwZSBjb252ZXJzaW9uCitvcGVyYXRvcjogY29udmVyc2lvbnMgdG8gPGNvZGU+dm9pZDwvY29kZT4sIHRoZSBzYW1lIHR5cGUsIGEgYmFzZSBjbGFzcyBvciBhCityZWZlcmVuY2UgdG8gdGhlbS4gV2FybmluZ3MgYWJvdXQgY29udmVyc2lvbnMgYmV0d2VlbiBzaWduZWQgYW5kCit1bnNpZ25lZCBpbnRlZ2VycyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCBpbiBDKysgdW5sZXNzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3NpZ24tY29udmVyc2lvbjwvc3Bhbj48L3NhbXA+IGlzIGV4cGxpY2l0bHkgZW5hYmxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8tY29udmVyc2lvbi1udWxsIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDKysgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdjb252ZXJzaW9uXzAwMmRudWxsLTQyNSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkY29udmVyc2lvbl8wMDJkbnVsbC00MjYiPjwvYT5EbyBub3Qgd2FybiBmb3IgY29udmVyc2lvbnMgYmV0d2VlbiA8Y29kZT5OVUxMPC9jb2RlPiBhbmQgbm9uLXBvaW50ZXIKK3R5cGVzLiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2NvbnZlcnNpb24tbnVsbDwvc3Bhbj48L3NhbXA+IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XemVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMrKyBhbmQgT2JqZWN0aXZlLUMrKyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV3plcm9fMDAyZGFzXzAwMmRudWxsXzAwMmRwb2ludGVyXzAwMmRjb25zdGFudC00MjciPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHplcm9fMDAyZGFzXzAwMmRudWxsXzAwMmRwb2ludGVyXzAwMmRjb25zdGFudC00MjgiPjwvYT5XYXJuIHdoZW4gYSBsaXRlcmFsICcwJyBpcyB1c2VkIGFzIG51bGwgcG9pbnRlciBjb25zdGFudC4gIFRoaXMgY2FuCitiZSB1c2VmdWwgdG8gZmFjaWxpdGF0ZSB0aGUgY29udmVyc2lvbiB0byA8Y29kZT5udWxscHRyPC9jb2RlPiBpbiBDKysxMS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdXNlbGVzcy1jYXN0IDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDKysgYW5kIE9iamVjdGl2ZS1DKysgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVd1c2VsZXNzXzAwMmRjYXN0LTQyOSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkdXNlbGVzc18wMDJkY2FzdC00MzAiPjwvYT5XYXJuIHdoZW4gYW4gZXhwcmVzc2lvbiBpcyBjYXN0ZWQgdG8gaXRzIG93biB0eXBlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdlbXB0eS1ib2R5PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XZW1wdHlfMDAyZGJvZHktNDMxIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRlbXB0eV8wMDJkYm9keS00MzIiPjwvYT5XYXJuIGlmIGFuIGVtcHR5IGJvZHkgb2NjdXJzIGluIGFuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aWY8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZWxzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRvCit3aGlsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzdGF0ZW1lbnQuICBUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXh0cmE8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XZW51bS1jb21wYXJlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XZW51bV8wMDJkY29tcGFyZS00MzMiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGVudW1fMDAyZGNvbXBhcmUtNDM0Ij48L2E+V2FybiBhYm91dCBhIGNvbXBhcmlzb24gYmV0d2VlbiB2YWx1ZXMgb2YgZGlmZmVyZW50IGVudW1lcmF0ZWQgdHlwZXMuIAorSW4gQysrIGVudW1lcmFsIG1pc21hdGNoZXMgaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgYXJlIGFsc28KK2RpYWdub3NlZCBhbmQgdGhlIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAgSW4gQyB0aGlzIHdhcm5pbmcgaXMKK2VuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XanVtcC1taXNzZXMtaW5pdCA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQywgT2JqZWN0aXZlLUMgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdqdW1wXzAwMmRtaXNzZXNfMDAyZGluaXQtNDM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRqdW1wXzAwMmRtaXNzZXNfMDAyZGluaXQtNDM2Ij48L2E+V2FybiBpZiBhIDxjb2RlPmdvdG88L2NvZGU+IHN0YXRlbWVudCBvciBhIDxjb2RlPnN3aXRjaDwvY29kZT4gc3RhdGVtZW50IGp1bXBzCitmb3J3YXJkIGFjcm9zcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSB2YXJpYWJsZSwgb3IganVtcHMgYmFja3dhcmQgdG8gYQorbGFiZWwgYWZ0ZXIgdGhlIHZhcmlhYmxlIGhhcyBiZWVuIGluaXRpYWxpemVkLiAgVGhpcyBvbmx5IHdhcm5zIGFib3V0Cit2YXJpYWJsZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGV5IGFyZSBkZWNsYXJlZC4gIFRoaXMgd2FybmluZyBpcworb25seSBzdXBwb3J0ZWQgZm9yIEMgYW5kIE9iamVjdGl2ZS1DOyBpbiBDKysgdGhpcyBzb3J0IG9mIGJyYW5jaCBpcyBhbgorZXJyb3IgaW4gYW55IGNhc2UuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdqdW1wLW1pc3Nlcy1pbml0PC9zcGFuPjwvc2FtcD4gaXMgaW5jbHVkZWQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdjKystY29tcGF0PC9zcGFuPjwvc2FtcD4uICBJdAorY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tanVtcC1taXNzZXMtaW5pdDwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xc2lnbi1jb21wYXJlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc2lnbl8wMDJkY29tcGFyZS00MzciPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHNpZ25fMDAyZGNvbXBhcmUtNDM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZy1mb3ItY29tcGFyaXNvbi1vZi1zaWduZWQtYW5kLXVuc2lnbmVkLXZhbHVlcy00MzkiPjwvYT48YSBuYW1lPSJpbmRleC1jb21wYXJpc29uLW9mLXNpZ25lZC1hbmQtdW5zaWduZWQtdmFsdWVzXzAwMmMtd2FybmluZy00NDAiPjwvYT48YSBuYW1lPSJpbmRleC1zaWduZWQtYW5kLXVuc2lnbmVkLXZhbHVlc18wMDJjLWNvbXBhcmlzb24td2FybmluZy00NDEiPjwvYT5XYXJuIHdoZW4gYSBjb21wYXJpc29uIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCB2YWx1ZXMgY291bGQgcHJvZHVjZQorYW4gaW5jb3JyZWN0IHJlc3VsdCB3aGVuIHRoZSBzaWduZWQgdmFsdWUgaXMgY29udmVydGVkIHRvIHVuc2lnbmVkLiAKK1RoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+OyB0byBnZXQgdGhlIG90aGVyIHdhcm5pbmdzCitvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2V4dHJhPC9zcGFuPjwvc2FtcD4gd2l0aG91dCB0aGlzIHdhcm5pbmcsIHVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2V4dHJhIC1Xbm8tc2lnbi1jb21wYXJlPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3NpZ24tY29udmVyc2lvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3NpZ25fMDAyZGNvbnZlcnNpb24tNDQyIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRzaWduXzAwMmRjb252ZXJzaW9uLTQ0MyI+PC9hPldhcm4gZm9yIGltcGxpY2l0IGNvbnZlcnNpb25zIHRoYXQgbWF5IGNoYW5nZSB0aGUgc2lnbiBvZiBhbiBpbnRlZ2VyCit2YWx1ZSwgbGlrZSBhc3NpZ25pbmcgYSBzaWduZWQgaW50ZWdlciBleHByZXNzaW9uIHRvIGFuIHVuc2lnbmVkCitpbnRlZ2VyIHZhcmlhYmxlLiBBbiBleHBsaWNpdCBjYXN0IHNpbGVuY2VzIHRoZSB3YXJuaW5nLiBJbiBDLCB0aGlzCitvcHRpb24gaXMgZW5hYmxlZCBhbHNvIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XY29udmVyc2lvbjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdzaXplb2ZfMDAyZHBvaW50ZXJfMDAyZG1lbWFjY2Vzcy00NDQiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHNpemVvZl8wMDJkcG9pbnRlcl8wMDJkbWVtYWNjZXNzLTQ0NSI+PC9hPldhcm4gZm9yIHN1c3BpY2lvdXMgbGVuZ3RoIHBhcmFtZXRlcnMgdG8gY2VydGFpbiBzdHJpbmcgYW5kIG1lbW9yeSBidWlsdC1pbgorZnVuY3Rpb25zIGlmIHRoZSBhcmd1bWVudCB1c2VzIDxjb2RlPnNpemVvZjwvY29kZT4uICBUaGlzIHdhcm5pbmcgd2FybnMgZS5nLiAKK2Fib3V0IDxjb2RlPm1lbXNldCAocHRyLCAwLCBzaXplb2YgKHB0cikpOzwvY29kZT4gaWYgPGNvZGU+cHRyPC9jb2RlPiBpcyBub3QgYW4gYXJyYXksCitidXQgYSBwb2ludGVyLCBhbmQgc3VnZ2VzdHMgYSBwb3NzaWJsZSBmaXgsIG9yIGFib3V0Cis8Y29kZT5tZW1jcHkgKCZhbXA7Zm9vLCBwdHIsIHNpemVvZiAoJmFtcDtmb28pKTs8L2NvZGU+LiAgVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2FkZHJlc3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdhZGRyZXNzLTQ0NiI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkYWRkcmVzcy00NDciPjwvYT5XYXJuIGFib3V0IHN1c3BpY2lvdXMgdXNlcyBvZiBtZW1vcnkgYWRkcmVzc2VzLiBUaGVzZSBpbmNsdWRlIHVzaW5nCit0aGUgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIGluIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiwgc3VjaCBhcworPGNvZGU+dm9pZCBmdW5jKHZvaWQpOyBpZiAoZnVuYyk8L2NvZGU+LCBhbmQgY29tcGFyaXNvbnMgYWdhaW5zdCB0aGUgbWVtb3J5CithZGRyZXNzIG9mIGEgc3RyaW5nIGxpdGVyYWwsIHN1Y2ggYXMgPGNvZGU+aWYgKHggPT0gImFiYyIpPC9jb2RlPi4gIFN1Y2gKK3VzZXMgdHlwaWNhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBlcnJvcjogdGhlIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbgorYWx3YXlzIGV2YWx1YXRlcyB0byB0cnVlLCBzbyB0aGVpciB1c2UgaW4gYSBjb25kaXRpb25hbCB1c3VhbGx5CitpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtbWVyIGZvcmdvdCB0aGUgcGFyZW50aGVzZXMgaW4gYSBmdW5jdGlvbgorY2FsbDsgYW5kIGNvbXBhcmlzb25zIGFnYWluc3Qgc3RyaW5nIGxpdGVyYWxzIHJlc3VsdCBpbiB1bnNwZWNpZmllZAorYmVoYXZpb3IgYW5kIGFyZSBub3QgcG9ydGFibGUgaW4gQywgc28gdGhleSB1c3VhbGx5IGluZGljYXRlIHRoYXQgdGhlCitwcm9ncmFtbWVyIGludGVuZGVkIHRvIHVzZSA8Y29kZT5zdHJjbXA8L2NvZGU+LiAgVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2xvZ2ljYWwtb3A8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdsb2dpY2FsXzAwMmRvcC00NDgiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGxvZ2ljYWxfMDAyZG9wLTQ0OSI+PC9hPldhcm4gYWJvdXQgc3VzcGljaW91cyB1c2VzIG9mIGxvZ2ljYWwgb3BlcmF0b3JzIGluIGV4cHJlc3Npb25zLiAKK1RoaXMgaW5jbHVkZXMgdXNpbmcgbG9naWNhbCBvcGVyYXRvcnMgaW4gY29udGV4dHMgd2hlcmUgYQorYml0LXdpc2Ugb3BlcmF0b3IgaXMgbGlrZWx5IHRvIGJlIGV4cGVjdGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdhZ2dyZWdhdGUtcmV0dXJuPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XYWdncmVnYXRlXzAwMmRyZXR1cm4tNDUwIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRhZ2dyZWdhdGVfMDAyZHJldHVybi00NTEiPjwvYT5XYXJuIGlmIGFueSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gc3RydWN0dXJlcyBvciB1bmlvbnMgYXJlIGRlZmluZWQgb3IKK2NhbGxlZC4gIChJbiBsYW5ndWFnZXMgd2hlcmUgeW91IGNhbiByZXR1cm4gYW4gYXJyYXksIHRoaXMgYWxzbyBlbGljaXRzCithIHdhcm5pbmcuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1hZ2dyZXNzaXZlLWxvb3Atb3B0aW1pemF0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRhZ2dyZXNzaXZlXzAwMmRsb29wXzAwMmRvcHRpbWl6YXRpb25zLTQ1MiI+PC9hPjxhIG5hbWU9ImluZGV4LVdhZ2dyZXNzaXZlXzAwMmRsb29wXzAwMmRvcHRpbWl6YXRpb25zLTQ1MyI+PC9hPldhcm4gaWYgaW4gYSBsb29wIHdpdGggY29uc3RhbnQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdGhlIGNvbXBpbGVyIGRldGVjdHMKK3VuZGVmaW5lZCBiZWhhdmlvciBpbiBzb21lIHN0YXRlbWVudCBkdXJpbmcgb25lIG9yIG1vcmUgb2YgdGhlIGl0ZXJhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vLWF0dHJpYnV0ZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdub18wMDJkYXR0cmlidXRlcy00NTQiPjwvYT48YSBuYW1lPSJpbmRleC1XYXR0cmlidXRlcy00NTUiPjwvYT5EbyBub3Qgd2FybiBpZiBhbiB1bmV4cGVjdGVkIDxjb2RlPl9fYXR0cmlidXRlX188L2NvZGU+IGlzIHVzZWQsIHN1Y2ggYXMKK3VucmVjb2duaXplZCBhdHRyaWJ1dGVzLCBmdW5jdGlvbiBhdHRyaWJ1dGVzIGFwcGxpZWQgdG8gdmFyaWFibGVzLAorZXRjLiAgVGhpcyBkb2VzIG5vdCBzdG9wIGVycm9ycyBmb3IgaW5jb3JyZWN0IHVzZSBvZiBzdXBwb3J0ZWQKK2F0dHJpYnV0ZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vLWJ1aWx0aW4tbWFjcm8tcmVkZWZpbmVkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGJ1aWx0aW5fMDAyZG1hY3JvXzAwMmRyZWRlZmluZWQtNDU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtV2J1aWx0aW5fMDAyZG1hY3JvXzAwMmRyZWRlZmluZWQtNDU3Ij48L2E+RG8gbm90IHdhcm4gaWYgY2VydGFpbiBidWlsdC1pbiBtYWNyb3MgYXJlIHJlZGVmaW5lZC4gIFRoaXMgc3VwcHJlc3Nlcword2FybmluZ3MgZm9yIHJlZGVmaW5pdGlvbiBvZiA8Y29kZT5fX1RJTUVTVEFNUF9fPC9jb2RlPiwgPGNvZGU+X19USU1FX188L2NvZGU+LAorPGNvZGU+X19EQVRFX188L2NvZGU+LCA8Y29kZT5fX0ZJTEVfXzwvY29kZT4sIGFuZCA8Y29kZT5fX0JBU0VfRklMRV9fPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xc3RyaWN0LXByb3RvdHlwZXMgPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1Xc3RyaWN0XzAwMmRwcm90b3R5cGVzLTQ1OCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkc3RyaWN0XzAwMmRwcm90b3R5cGVzLTQ1OSI+PC9hPldhcm4gaWYgYSBmdW5jdGlvbiBpcyBkZWNsYXJlZCBvciBkZWZpbmVkIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUKK2FyZ3VtZW50IHR5cGVzLiAgKEFuIG9sZC1zdHlsZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIHBlcm1pdHRlZCB3aXRob3V0CithIHdhcm5pbmcgaWYgcHJlY2VkZWQgYnkgYSBkZWNsYXJhdGlvbiB0aGF0IHNwZWNpZmllcyB0aGUgYXJndW1lbnQKK3R5cGVzLikKKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV29sZF8wMDJkc3R5bGVfMDAyZGRlY2xhcmF0aW9uLTQ2MCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkb2xkXzAwMmRzdHlsZV8wMDJkZGVjbGFyYXRpb24tNDYxIj48L2E+V2FybiBmb3Igb2Jzb2xlc2NlbnQgdXNhZ2VzLCBhY2NvcmRpbmcgdG8gdGhlIEMgU3RhbmRhcmQsIGluIGEKK2RlY2xhcmF0aW9uLiBGb3IgZXhhbXBsZSwgd2FybiBpZiBzdG9yYWdlLWNsYXNzIHNwZWNpZmllcnMgbGlrZQorPGNvZGU+c3RhdGljPC9jb2RlPiBhcmUgbm90IHRoZSBmaXJzdCB0aGluZ3MgaW4gYSBkZWNsYXJhdGlvbi4gIFRoaXMgd2FybmluZworaXMgYWxzbyBlbmFibGVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXh0cmE8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xb2xkLXN0eWxlLWRlZmluaXRpb24gPC9jb2RlPjxzcGFuIGNsYXNzPSJyb21hbiI+KEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1Xb2xkXzAwMmRzdHlsZV8wMDJkZGVmaW5pdGlvbi00NjIiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG9sZF8wMDJkc3R5bGVfMDAyZGRlZmluaXRpb24tNDYzIj48L2E+V2FybiBpZiBhbiBvbGQtc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyB1c2VkLiAgQSB3YXJuaW5nIGlzIGdpdmVuCitldmVuIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgcHJvdG90eXBlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdtaXNzaW5nLXBhcmFtZXRlci10eXBlIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV21pc3NpbmdfMDAyZHBhcmFtZXRlcl8wMDJkdHlwZS00NjQiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG1pc3NpbmdfMDAyZHBhcmFtZXRlcl8wMDJkdHlwZS00NjUiPjwvYT5BIGZ1bmN0aW9uIHBhcmFtZXRlciBpcyBkZWNsYXJlZCB3aXRob3V0IGEgdHlwZSBzcGVjaWZpZXIgaW4gSyZhbXA7Ui1zdHlsZQorZnVuY3Rpb25zOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHZvaWQgZm9vKGJhcikgeyB9Cis8L3ByZT4KKyAgICAgPHA+VGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2V4dHJhPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV21pc3NpbmctcHJvdG90eXBlcyA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQyBhbmQgT2JqZWN0aXZlLUMgb25seSk8L3NwYW4+PGRkPjxhIG5hbWU9ImluZGV4LVdtaXNzaW5nXzAwMmRwcm90b3R5cGVzLTQ2NiI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbWlzc2luZ18wMDJkcHJvdG90eXBlcy00NjciPjwvYT5XYXJuIGlmIGEgZ2xvYmFsIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aG91dCBhIHByZXZpb3VzIHByb3RvdHlwZQorZGVjbGFyYXRpb24uICBUaGlzIHdhcm5pbmcgaXMgaXNzdWVkIGV2ZW4gaWYgdGhlIGRlZmluaXRpb24gaXRzZWxmCitwcm92aWRlcyBhIHByb3RvdHlwZS4gIFVzZSB0aGlzIG9wdGlvbiB0byBkZXRlY3QgZ2xvYmFsIGZ1bmN0aW9ucwordGhhdCBkbyBub3QgaGF2ZSBhIG1hdGNoaW5nIHByb3RvdHlwZSBkZWNsYXJhdGlvbiBpbiBhIGhlYWRlciBmaWxlLiAKK1RoaXMgb3B0aW9uIGlzIG5vdCB2YWxpZCBmb3IgQysrIGJlY2F1c2UgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworcHJvdmlkZSBwcm90b3R5cGVzIGFuZCBhIG5vbi1tYXRjaGluZyBkZWNsYXJhdGlvbiB3aWxsIGRlY2xhcmUgYW4KK292ZXJsb2FkIHJhdGhlciB0aGFuIGNvbmZsaWN0IHdpdGggYW4gZWFybGllciBkZWNsYXJhdGlvbi4gCitVc2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdtaXNzaW5nLWRlY2xhcmF0aW9uczwvc3Bhbj48L3NhbXA+IHRvIGRldGVjdCBtaXNzaW5nIGRlY2xhcmF0aW9ucyBpbiBDKysuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV21pc3NpbmctZGVjbGFyYXRpb25zPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XbWlzc2luZ18wMDJkZGVjbGFyYXRpb25zLTQ2OCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbWlzc2luZ18wMDJkZGVjbGFyYXRpb25zLTQ2OSI+PC9hPldhcm4gaWYgYSBnbG9iYWwgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRob3V0IGEgcHJldmlvdXMgZGVjbGFyYXRpb24uIAorRG8gc28gZXZlbiBpZiB0aGUgZGVmaW5pdGlvbiBpdHNlbGYgcHJvdmlkZXMgYSBwcm90b3R5cGUuIAorVXNlIHRoaXMgb3B0aW9uIHRvIGRldGVjdCBnbG9iYWwgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBkZWNsYXJlZCBpbgoraGVhZGVyIGZpbGVzLiAgSW4gQywgbm8gd2FybmluZ3MgYXJlIGlzc3VlZCBmb3IgZnVuY3Rpb25zIHdpdGggcHJldmlvdXMKK25vbi1wcm90b3R5cGUgZGVjbGFyYXRpb25zOyB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdtaXNzaW5nLXByb3RvdHlwZTwvc3Bhbj48L3NhbXA+IHRvIGRldGVjdAorbWlzc2luZyBwcm90b3R5cGVzLiAgSW4gQysrLCBubyB3YXJuaW5ncyBhcmUgaXNzdWVkIGZvciBmdW5jdGlvbiB0ZW1wbGF0ZXMsCitvciBmb3IgaW5saW5lIGZ1bmN0aW9ucywgb3IgZm9yIGZ1bmN0aW9ucyBpbiBhbm9ueW1vdXMgbmFtZXNwYWNlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdtaXNzaW5nXzAwMmRmaWVsZF8wMDJkaW5pdGlhbGl6ZXJzLTQ3MCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbWlzc2luZ18wMDJkZmllbGRfMDAyZGluaXRpYWxpemVycy00NzEiPjwvYT48YSBuYW1lPSJpbmRleC1XLTQ3MiI+PC9hPjxhIG5hbWU9ImluZGV4LVdleHRyYS00NzMiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGV4dHJhLTQ3NCI+PC9hPldhcm4gaWYgYSBzdHJ1Y3R1cmUncyBpbml0aWFsaXplciBoYXMgc29tZSBmaWVsZHMgbWlzc2luZy4gIEZvcgorZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIGNhdXNlcyBzdWNoIGEgd2FybmluZywgYmVjYXVzZQorPGNvZGU+eC5oPC9jb2RlPiBpcyBpbXBsaWNpdGx5IHplcm86CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IHMgeyBpbnQgZiwgZywgaDsgfTsKKyAgICAgICAgICBzdHJ1Y3QgcyB4ID0geyAzLCA0IH07Cis8L3ByZT4KKyAgICAgPHA+VGhpcyBvcHRpb24gZG9lcyBub3Qgd2FybiBhYm91dCBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgc28gdGhlIGZvbGxvd2luZworbW9kaWZpY2F0aW9uIGRvZXMgbm90IHRyaWdnZXIgYSB3YXJuaW5nOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHN0cnVjdCBzIHsgaW50IGYsIGcsIGg7IH07CisgICAgICAgICAgc3RydWN0IHMgeCA9IHsgLmYgPSAzLCAuZyA9IDQgfTsKKzwvcHJlPgorICAgICA8cD5UaGlzIHdhcm5pbmcgaXMgaW5jbHVkZWQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+LiAgVG8gZ2V0IG90aGVyIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXh0cmE8L3NwYW4+PC9zYW1wPgord2FybmluZ3Mgd2l0aG91dCB0aGlzIG9uZSwgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXh0cmEgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVyczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1tdWx0aWNoYXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbXVsdGljaGFyLTQ3NSI+PC9hPjxhIG5hbWU9ImluZGV4LVdtdWx0aWNoYXItNDc2Ij48L2E+RG8gbm90IHdhcm4gaWYgYSBtdWx0aWNoYXJhY3RlciBjb25zdGFudCAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4nRk9PRic8L3NwYW4+PC9zYW1wPiZyc3F1bzspIGlzIHVzZWQuIAorVXN1YWxseSB0aGV5IGluZGljYXRlIGEgdHlwbyBpbiB0aGUgdXNlcidzIGNvZGUsIGFzIHRoZXkgaGF2ZQoraW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZXMsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gcG9ydGFibGUgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm9ybWFsaXplZD0mbHQ7bm9uZXxpZHxuZmN8bmZrYyZndDs8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdub3JtYWxpemVkXzAwM2QtNDc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtTkZDLTQ3OCI+PC9hPjxhIG5hbWU9ImluZGV4LU5GS0MtNDc5Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2hhcmFjdGVyLXNldF8wMDJjLWlucHV0LW5vcm1hbGl6YXRpb24tNDgwIj48L2E+SW4gSVNPIEMgYW5kIElTTyBDKyssIHR3byBpZGVudGlmaWVycyBhcmUgZGlmZmVyZW50IGlmIHRoZXkgYXJlCitkaWZmZXJlbnQgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMuICBIb3dldmVyLCBzb21ldGltZXMgd2hlbiBjaGFyYWN0ZXJzCitvdXRzaWRlIHRoZSBiYXNpYyBBU0NJSSBjaGFyYWN0ZXIgc2V0IGFyZSB1c2VkLCB5b3UgY2FuIGhhdmUgdHdvCitkaWZmZXJlbnQgY2hhcmFjdGVyIHNlcXVlbmNlcyB0aGF0IGxvb2sgdGhlIHNhbWUuICBUbyBhdm9pZCBjb25mdXNpb24sCit0aGUgSVNPIDEwNjQ2IHN0YW5kYXJkIHNldHMgb3V0IHNvbWUgPGRmbj5ub3JtYWxpemF0aW9uIHJ1bGVzPC9kZm4+IHdoaWNoCit3aGVuIGFwcGxpZWQgZW5zdXJlIHRoYXQgdHdvIHNlcXVlbmNlcyB0aGF0IGxvb2sgdGhlIHNhbWUgYXJlIHR1cm5lZCBpbnRvCit0aGUgc2FtZSBzZXF1ZW5jZS4gIEdDQyBjYW4gd2FybiB5b3UgaWYgeW91IGFyZSB1c2luZyBpZGVudGlmaWVycyB0aGF0CitoYXZlIG5vdCBiZWVuIG5vcm1hbGl6ZWQ7IHRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoYXQgd2FybmluZy4KKworICAgICA8cD5UaGVyZSBhcmUgZm91ciBsZXZlbHMgb2Ygd2FybmluZyBzdXBwb3J0ZWQgYnkgR0NDLiAgVGhlIGRlZmF1bHQgaXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm9ybWFsaXplZD1uZmM8L3NwYW4+PC9zYW1wPiwgd2hpY2ggd2FybnMgYWJvdXQgYW55IGlkZW50aWZpZXIgdGhhdCBpcworbm90IGluIHRoZSBJU08gMTA2NDYgJmxkcXVvO0MmcmRxdW87IG5vcm1hbGl6ZWQgZm9ybSwgPGRmbj5ORkM8L2Rmbj4uICBORkMgaXMgdGhlCityZWNvbW1lbmRlZCBmb3JtIGZvciBtb3N0IHVzZXMuCisKKyAgICAgPHA+VW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHNvbWUgY2hhcmFjdGVycyBhbGxvd2VkIGluIGlkZW50aWZpZXJzIGJ5CitJU08gQyBhbmQgSVNPIEMrKyB0aGF0LCB3aGVuIHR1cm5lZCBpbnRvIE5GQywgYXJlIG5vdCBhbGxvd2VkIGluCitpZGVudGlmaWVycy4gIFRoYXQgaXMsIHRoZXJlJ3Mgbm8gd2F5IHRvIHVzZSB0aGVzZSBzeW1ib2xzIGluIHBvcnRhYmxlCitJU08gQyBvciBDKysgYW5kIGhhdmUgYWxsIHlvdXIgaWRlbnRpZmllcnMgaW4gTkZDLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm9ybWFsaXplZD1pZDwvc3Bhbj48L3NhbXA+IHN1cHByZXNzZXMgdGhlIHdhcm5pbmcgZm9yIHRoZXNlIGNoYXJhY3RlcnMuIAorSXQgaXMgaG9wZWQgdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIHN0YW5kYXJkcyBpbnZvbHZlZCB3aWxsIGNvcnJlY3QKK3RoaXMsIHdoaWNoIGlzIHdoeSB0aGlzIG9wdGlvbiBpcyBub3QgdGhlIGRlZmF1bHQuCisKKyAgICAgPHA+WW91IGNhbiBzd2l0Y2ggdGhlIHdhcm5pbmcgb2ZmIGZvciBhbGwgY2hhcmFjdGVycyBieSB3cml0aW5nCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vcm1hbGl6ZWQ9bm9uZTwvc3Bhbj48L3NhbXA+LiAgWW91IHNob3VsZCBvbmx5IGRvIHRoaXMgaWYgeW91CithcmUgdXNpbmcgc29tZSBvdGhlciBub3JtYWxpemF0aW9uIHNjaGVtZSAobGlrZSAmbGRxdW87RCZyZHF1bzspLCBiZWNhdXNlCitvdGhlcndpc2UgeW91IGNhbiBlYXNpbHkgY3JlYXRlIGJ1Z3MgdGhhdCBhcmUgbGl0ZXJhbGx5IGltcG9zc2libGUgdG8gc2VlLgorCisgICAgIDxwPlNvbWUgY2hhcmFjdGVycyBpbiBJU08gMTA2NDYgaGF2ZSBkaXN0aW5jdCBtZWFuaW5ncyBidXQgbG9vayBpZGVudGljYWwKK2luIHNvbWUgZm9udHMgb3IgZGlzcGxheSBtZXRob2RvbG9naWVzLCBlc3BlY2lhbGx5IG9uY2UgZm9ybWF0dGluZyBoYXMKK2JlZW4gYXBwbGllZC4gIEZvciBpbnN0YW5jZSA8Y29kZT5cdTIwN0Y8L2NvZGU+LCAmbGRxdW87U1VQRVJTQ1JJUFQgTEFUSU4gU01BTEwKK0xFVFRFUiBOJnJkcXVvOywgZGlzcGxheXMganVzdCBsaWtlIGEgcmVndWxhciA8Y29kZT5uPC9jb2RlPiB0aGF0IGhhcyBiZWVuCitwbGFjZWQgaW4gYSBzdXBlcnNjcmlwdC4gIElTTyAxMDY0NiBkZWZpbmVzIHRoZSA8ZGZuPk5GS0M8L2Rmbj4KK25vcm1hbGl6YXRpb24gc2NoZW1lIHRvIGNvbnZlcnQgYWxsIHRoZXNlIGludG8gYSBzdGFuZGFyZCBmb3JtIGFzCit3ZWxsLCBhbmQgR0NDIHdhcm5zIGlmIHlvdXIgY29kZSBpcyBub3QgaW4gTkZLQyBpZiB5b3UgdXNlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vcm1hbGl6ZWQ9bmZrYzwvc3Bhbj48L3NhbXA+LiAgVGhpcyB3YXJuaW5nIGlzIGNvbXBhcmFibGUgdG8gd2FybmluZworYWJvdXQgZXZlcnkgaWRlbnRpZmllciB0aGF0IGNvbnRhaW5zIHRoZSBsZXR0ZXIgTyBiZWNhdXNlIGl0IG1pZ2h0IGJlCitjb25mdXNlZCB3aXRoIHRoZSBkaWdpdCAwLCBhbmQgc28gaXMgbm90IHRoZSBkZWZhdWx0LCBidXQgbWF5IGJlCit1c2VmdWwgYXMgYSBsb2NhbCBjb2RpbmcgY29udmVudGlvbiBpZiB0aGUgcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQKK2Nhbm5vdCBiZSBmaXhlZCB0byBkaXNwbGF5IHRoZXNlIGNoYXJhY3RlcnMgZGlzdGluY3RseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8tZGVwcmVjYXRlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRkZXByZWNhdGVkLTQ4MSI+PC9hPjxhIG5hbWU9ImluZGV4LVdkZXByZWNhdGVkLTQ4MiI+PC9hPkRvIG5vdCB3YXJuIGFib3V0IHVzYWdlIG9mIGRlcHJlY2F0ZWQgZmVhdHVyZXMuICBTZWUgPGEgaHJlZj0iRGVwcmVjYXRlZC1GZWF0dXJlcy5odG1sI0RlcHJlY2F0ZWQtRmVhdHVyZXMiPkRlcHJlY2F0ZWQgRmVhdHVyZXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRkZXByZWNhdGVkXzAwMmRkZWNsYXJhdGlvbnMtNDgzIj48L2E+PGEgbmFtZT0iaW5kZXgtV2RlcHJlY2F0ZWRfMDAyZGRlY2xhcmF0aW9ucy00ODQiPjwvYT5EbyBub3Qgd2FybiBhYm91dCB1c2VzIG9mIGZ1bmN0aW9ucyAoc2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPiksCit2YXJpYWJsZXMgKHNlZSA8YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+VmFyaWFibGUgQXR0cmlidXRlczwvYT4pLCBhbmQgdHlwZXMgKHNlZSA8YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPlR5cGUgQXR0cmlidXRlczwvYT4pIG1hcmtlZCBhcyBkZXByZWNhdGVkIGJ5IHVzaW5nIHRoZSA8Y29kZT5kZXByZWNhdGVkPC9jb2RlPgorYXR0cmlidXRlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1vdmVyZmxvdzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRvdmVyZmxvdy00ODUiPjwvYT48YSBuYW1lPSJpbmRleC1Xb3ZlcmZsb3ctNDg2Ij48L2E+RG8gbm90IHdhcm4gYWJvdXQgY29tcGlsZS10aW1lIG92ZXJmbG93IGluIGNvbnN0YW50IGV4cHJlc3Npb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdvdmVycmlkZS1pbml0IDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV292ZXJyaWRlXzAwMmRpbml0LTQ4NyI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkb3ZlcnJpZGVfMDAyZGluaXQtNDg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtVy00ODkiPjwvYT48YSBuYW1lPSJpbmRleC1XZXh0cmEtNDkwIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRleHRyYS00OTEiPjwvYT5XYXJuIGlmIGFuIGluaXRpYWxpemVkIGZpZWxkIHdpdGhvdXQgc2lkZSBlZmZlY3RzIGlzIG92ZXJyaWRkZW4gd2hlbgordXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKHNlZSA8YSBocmVmPSJEZXNpZ25hdGVkLUluaXRzLmh0bWwjRGVzaWduYXRlZC1Jbml0cyI+RGVzaWduYXRlZCBJbml0aWFsaXplcnM8L2E+KS4KKworICAgICA8cD5UaGlzIHdhcm5pbmcgaXMgaW5jbHVkZWQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+LiAgVG8gZ2V0IG90aGVyCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2V4dHJhPC9zcGFuPjwvc2FtcD4gd2FybmluZ3Mgd2l0aG91dCB0aGlzIG9uZSwgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XZXh0cmEKKy1Xbm8tb3ZlcnJpZGUtaW5pdDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdwYWNrZWQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdwYWNrZWQtNDkyIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRwYWNrZWQtNDkzIj48L2E+V2FybiBpZiBhIHN0cnVjdHVyZSBpcyBnaXZlbiB0aGUgcGFja2VkIGF0dHJpYnV0ZSwgYnV0IHRoZSBwYWNrZWQKK2F0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IG9uIHRoZSBsYXlvdXQgb3Igc2l6ZSBvZiB0aGUgc3RydWN0dXJlLiAKK1N1Y2ggc3RydWN0dXJlcyBtYXkgYmUgbWlzLWFsaWduZWQgZm9yIGxpdHRsZSBiZW5lZml0LiAgRm9yCitpbnN0YW5jZSwgaW4gdGhpcyBjb2RlLCB0aGUgdmFyaWFibGUgPGNvZGU+Zi54PC9jb2RlPiBpbiA8Y29kZT5zdHJ1Y3QgYmFyPC9jb2RlPgoraXMgbWlzYWxpZ25lZCBldmVuIHRob3VnaCA8Y29kZT5zdHJ1Y3QgYmFyPC9jb2RlPiBkb2VzIG5vdCBpdHNlbGYKK2hhdmUgdGhlIHBhY2tlZCBhdHRyaWJ1dGU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IGZvbyB7CisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIGNoYXIgYSwgYiwgYywgZDsKKyAgICAgICAgICB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworICAgICAgICAgIHN0cnVjdCBiYXIgeworICAgICAgICAgICAgY2hhciB6OworICAgICAgICAgICAgc3RydWN0IGZvbyBmOworICAgICAgICAgIH07Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT4tV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdwYWNrZWRfMDAyZGJpdGZpZWxkXzAwMmRjb21wYXQtNDk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRwYWNrZWRfMDAyZGJpdGZpZWxkXzAwMmRjb21wYXQtNDk1Ij48L2E+VGhlIDQuMSwgNC4yIGFuZCA0LjMgc2VyaWVzIG9mIEdDQyBpZ25vcmUgdGhlIDxjb2RlPnBhY2tlZDwvY29kZT4gYXR0cmlidXRlCitvbiBiaXQtZmllbGRzIG9mIHR5cGUgPGNvZGU+Y2hhcjwvY29kZT4uICBUaGlzIGhhcyBiZWVuIGZpeGVkIGluIEdDQyA0LjQgYnV0Cit0aGUgY2hhbmdlIGNhbiBsZWFkIHRvIGRpZmZlcmVuY2VzIGluIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0LiAgR0NDCitpbmZvcm1zIHlvdSB3aGVuIHRoZSBvZmZzZXQgb2Ygc3VjaCBhIGZpZWxkIGhhcyBjaGFuZ2VkIGluIEdDQyA0LjQuIAorRm9yIGV4YW1wbGUgdGhlcmUgaXMgbm8gbG9uZ2VyIGEgNC1iaXQgcGFkZGluZyBiZXR3ZWVuIGZpZWxkIDxjb2RlPmE8L2NvZGU+CithbmQgPGNvZGU+YjwvY29kZT4gaW4gdGhpcyBzdHJ1Y3R1cmU6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3RydWN0IGZvbworICAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgYTo0OworICAgICAgICAgICAgY2hhciBiOjg7CisgICAgICAgICAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cis8L3ByZT4KKyAgICAgPHA+VGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIFVzZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby1wYWNrZWQtYml0ZmllbGQtY29tcGF0PC9zcGFuPjwvc2FtcD4gdG8gZGlzYWJsZSB0aGlzIHdhcm5pbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3BhZGRlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3BhZGRlZC00OTYiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHBhZGRlZC00OTciPjwvYT5XYXJuIGlmIHBhZGRpbmcgaXMgaW5jbHVkZWQgaW4gYSBzdHJ1Y3R1cmUsIGVpdGhlciB0byBhbGlnbiBhbiBlbGVtZW50CitvZiB0aGUgc3RydWN0dXJlIG9yIHRvIGFsaWduIHRoZSB3aG9sZSBzdHJ1Y3R1cmUuICBTb21ldGltZXMgd2hlbiB0aGlzCitoYXBwZW5zIGl0IGlzIHBvc3NpYmxlIHRvIHJlYXJyYW5nZSB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3R1cmUgdG8KK3JlZHVjZSB0aGUgcGFkZGluZyBhbmQgc28gbWFrZSB0aGUgc3RydWN0dXJlIHNtYWxsZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3JlZHVuZGFudC1kZWNsczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3JlZHVuZGFudF8wMDJkZGVjbHMtNDk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRyZWR1bmRhbnRfMDAyZGRlY2xzLTQ5OSI+PC9hPldhcm4gaWYgYW55dGhpbmcgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc2NvcGUsIGV2ZW4gaW4KK2Nhc2VzIHdoZXJlIG11bHRpcGxlIGRlY2xhcmF0aW9uIGlzIHZhbGlkIGFuZCBjaGFuZ2VzIG5vdGhpbmcuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25lc3RlZC1leHRlcm5zIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV25lc3RlZF8wMDJkZXh0ZXJucy01MDAiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG5lc3RlZF8wMDJkZXh0ZXJucy01MDEiPjwvYT5XYXJuIGlmIGFuIDxjb2RlPmV4dGVybjwvY29kZT4gZGVjbGFyYXRpb24gaXMgZW5jb3VudGVyZWQgd2l0aGluIGEgZnVuY3Rpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vLWluaGVyaXRlZC12YXJpYWRpYy1jdG9yPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1XaW5oZXJpdGVkXzAwMmR2YXJpYWRpY18wMDJkY3Rvci01MDIiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGluaGVyaXRlZF8wMDJkdmFyaWFkaWNfMDAyZGN0b3ItNTAzIj48L2E+U3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgdXNlIG9mIEMrKzExIGluaGVyaXRpbmcgY29uc3RydWN0b3JzIHdoZW4gdGhlCitiYXNlIGNsYXNzIGluaGVyaXRlZCBmcm9tIGhhcyBhIEMgdmFyaWFkaWMgY29uc3RydWN0b3I7IHRoZSB3YXJuaW5nIGlzCitvbiBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIGVsbGlwc2lzIGlzIG5vdCBpbmhlcml0ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2lubGluZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2lubGluZS01MDQiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGlubGluZS01MDUiPjwvYT5XYXJuIGlmIGEgZnVuY3Rpb24gdGhhdCBpcyBkZWNsYXJlZCBhcyBpbmxpbmUgY2Fubm90IGJlIGlubGluZWQuIAorRXZlbiB3aXRoIHRoaXMgb3B0aW9uLCB0aGUgY29tcGlsZXIgZG9lcyBub3Qgd2FybiBhYm91dCBmYWlsdXJlcyB0bworaW5saW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiBzeXN0ZW0gaGVhZGVycy4KKworICAgICA8cD5UaGUgY29tcGlsZXIgdXNlcyBhIHZhcmlldHkgb2YgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QKK3RvIGlubGluZSBhIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZSBjb21waWxlciB0YWtlcyBpbnRvIGFjY291bnQKK3RoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBpbmxpbmVkIGFuZCB0aGUgYW1vdW50IG9mIGlubGluaW5nCit0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4gIFRoZXJlZm9yZSwKK3NlZW1pbmdseSBpbnNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIHNvdXJjZSBwcm9ncmFtIGNhbiBjYXVzZSB0aGUKK3dhcm5pbmdzIHByb2R1Y2VkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XaW5saW5lPC9zcGFuPjwvc2FtcD4gdG8gYXBwZWFyIG9yIGRpc2FwcGVhci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xbm8taW52YWxpZC1vZmZzZXRvZiA8L2NvZGU+PHNwYW4gY2xhc3M9InJvbWFuIj4oQysrIGFuZCBPYmplY3RpdmUtQysrIG9ubHkpPC9zcGFuPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGludmFsaWRfMDAyZG9mZnNldG9mLTUwNiI+PC9hPjxhIG5hbWU9ImluZGV4LVdpbnZhbGlkXzAwMmRvZmZzZXRvZi01MDciPjwvYT5TdXBwcmVzcyB3YXJuaW5ncyBmcm9tIGFwcGx5aW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9mZnNldG9mPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1hY3JvIHRvIGEgbm9uLVBPRAordHlwZS4gIEFjY29yZGluZyB0byB0aGUgMTk5OCBJU08gQysrIHN0YW5kYXJkLCBhcHBseWluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9mZnNldG9mPC9zcGFuPjwvc2FtcD4mcnNxdW87Cit0byBhIG5vbi1QT0QgdHlwZSBpcyB1bmRlZmluZWQuICBJbiBleGlzdGluZyBDKysgaW1wbGVtZW50YXRpb25zLAoraG93ZXZlciwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vZmZzZXRvZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0eXBpY2FsbHkgZ2l2ZXMgbWVhbmluZ2Z1bCByZXN1bHRzIGV2ZW4gd2hlbgorYXBwbGllZCB0byBjZXJ0YWluIGtpbmRzIG9mIG5vbi1QT0QgdHlwZXMgKHN1Y2ggYXMgYSBzaW1wbGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3RydWN0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRoYXQgZmFpbHMgdG8gYmUgYSBQT0QgdHlwZSBvbmx5IGJ5IHZpcnR1ZSBvZiBoYXZpbmcgYQorY29uc3RydWN0b3IpLiAgVGhpcyBmbGFnIGlzIGZvciB1c2VycyB3aG8gYXJlIGF3YXJlIHRoYXQgdGhleSBhcmUKK3dyaXRpbmcgbm9ucG9ydGFibGUgY29kZSBhbmQgd2hvIGhhdmUgZGVsaWJlcmF0ZWx5IGNob3NlbiB0byBpZ25vcmUgdGhlCit3YXJuaW5nIGFib3V0IGl0LgorCisgICAgIDxwPlRoZSByZXN0cmljdGlvbnMgb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vZmZzZXRvZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBtYXkgYmUgcmVsYXhlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uCitvZiB0aGUgQysrIHN0YW5kYXJkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1pbnQtdG8tcG9pbnRlci1jYXN0PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGludF8wMDJkdG9fMDAyZHBvaW50ZXJfMDAyZGNhc3QtNTA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtV2ludF8wMDJkdG9fMDAyZHBvaW50ZXJfMDAyZGNhc3QtNTA5Ij48L2E+U3VwcHJlc3Mgd2FybmluZ3MgZnJvbSBjYXN0cyB0byBwb2ludGVyIHR5cGUgb2YgYW4gaW50ZWdlciBvZiBhCitkaWZmZXJlbnQgc2l6ZS4gSW4gQysrLCBjYXN0aW5nIHRvIGEgcG9pbnRlciB0eXBlIG9mIHNtYWxsZXIgc2l6ZSBpcworYW4gZXJyb3IuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPldpbnQtdG8tcG9pbnRlci1jYXN0PC9zcGFuPjwvc2FtcD4gaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1wb2ludGVyLXRvLWludC1jYXN0IDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRwb2ludGVyXzAwMmR0b18wMDJkaW50XzAwMmRjYXN0LTUxMCI+PC9hPjxhIG5hbWU9ImluZGV4LVdwb2ludGVyXzAwMmR0b18wMDJkaW50XzAwMmRjYXN0LTUxMSI+PC9hPlN1cHByZXNzIHdhcm5pbmdzIGZyb20gY2FzdHMgZnJvbSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0eXBlIG9mIGEKK2RpZmZlcmVudCBzaXplLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdpbnZhbGlkLXBjaDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2ludmFsaWRfMDAyZHBjaC01MTIiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZGludmFsaWRfMDAyZHBjaC01MTMiPjwvYT5XYXJuIGlmIGEgcHJlY29tcGlsZWQgaGVhZGVyIChzZWUgPGEgaHJlZj0iUHJlY29tcGlsZWQtSGVhZGVycy5odG1sI1ByZWNvbXBpbGVkLUhlYWRlcnMiPlByZWNvbXBpbGVkIEhlYWRlcnM8L2E+KSBpcyBmb3VuZCBpbgordGhlIHNlYXJjaCBwYXRoIGJ1dCBjYW4ndCBiZSB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdsb25nLWxvbmc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdsb25nXzAwMmRsb25nLTUxNCI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkbG9uZ18wMDJkbG9uZy01MTUiPjwvYT5XYXJuIGlmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9uZyBsb25nPC9zcGFuPjwvc2FtcD4mcnNxdW87IHR5cGUgaXMgdXNlZC4gIFRoaXMgaXMgZW5hYmxlZCBieSBlaXRoZXIKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XcGVkYW50aWM8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3RyYWRpdGlvbmFsPC9zcGFuPjwvc2FtcD4gaW4gSVNPIEM5MCBhbmQgQysrOTgKK21vZGVzLiAgVG8gaW5oaWJpdCB0aGUgd2FybmluZyBtZXNzYWdlcywgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tbG9uZy1sb25nPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3ZhcmlhZGljLW1hY3JvczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3ZhcmlhZGljXzAwMmRtYWNyb3MtNTE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR2YXJpYWRpY18wMDJkbWFjcm9zLTUxNyI+PC9hPldhcm4gaWYgdmFyaWFkaWMgbWFjcm9zIGFyZSB1c2VkIGluIHBlZGFudGljIElTTyBDOTAgbW9kZSwgb3IgdGhlIEdOVQorYWx0ZXJuYXRlIHN5bnRheCB3aGVuIGluIHBlZGFudGljIElTTyBDOTkgbW9kZS4gIFRoaXMgaXMgZGVmYXVsdC4gCitUbyBpbmhpYml0IHRoZSB3YXJuaW5nIG1lc3NhZ2VzLCB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby12YXJpYWRpYy1tYWNyb3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XdmFyYXJnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3ZhcmFyZ3MtNTE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR2YXJhcmdzLTUxOSI+PC9hPldhcm4gdXBvbiBxdWVzdGlvbmFibGUgdXNhZ2Ugb2YgdGhlIG1hY3JvcyB1c2VkIHRvIGhhbmRsZSB2YXJpYWJsZQorYXJndW1lbnRzIGxpa2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52YV9zdGFydDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoaXMgaXMgZGVmYXVsdC4gIFRvIGluaGliaXQgdGhlCit3YXJuaW5nIG1lc3NhZ2VzLCB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby12YXJhcmdzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3ZlY3Rvci1vcGVyYXRpb24tcGVyZm9ybWFuY2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd2ZWN0b3JfMDAyZG9wZXJhdGlvbl8wMDJkcGVyZm9ybWFuY2UtNTIwIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR2ZWN0b3JfMDAyZG9wZXJhdGlvbl8wMDJkcGVyZm9ybWFuY2UtNTIxIj48L2E+V2FybiBpZiB2ZWN0b3Igb3BlcmF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCB2aWEgU0lNRCBjYXBhYmlsaXRpZXMgb2YgdGhlCithcmNoaXRlY3R1cmUuICBNYWlubHkgdXNlZnVsIGZvciB0aGUgcGVyZm9ybWFuY2UgdHVuaW5nLiAKK1ZlY3RvciBvcGVyYXRpb24gY2FuIGJlIGltcGxlbWVudGVkIDxjb2RlPnBpZWNld2lzZTwvY29kZT4sIHdoaWNoIG1lYW5zIHRoYXQgdGhlCitzY2FsYXIgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbiBldmVyeSB2ZWN0b3IgZWxlbWVudDsKKzxjb2RlPmluIHBhcmFsbGVsPC9jb2RlPiwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdmVjdG9yIG9wZXJhdGlvbiBpcyBpbXBsZW1lbnRlZAordXNpbmcgc2NhbGFycyBvZiB3aWRlciB0eXBlLCB3aGljaCBub3JtYWxseSBpcyBtb3JlIHBlcmZvcm1hbmNlIGVmZmljaWVudDsKK2FuZCA8Y29kZT5hcyBhIHNpbmdsZSBzY2FsYXI8L2NvZGU+LCB3aGljaCBtZWFucyB0aGF0IHZlY3RvciBmaXRzIGludG8gYQorc2NhbGFyIHR5cGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV25vLXZpcnR1YWwtbW92ZS1hc3NpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd2aXJ0dWFsXzAwMmRtb3ZlXzAwMmRhc3NpZ24tNTIyIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmR2aXJ0dWFsXzAwMmRtb3ZlXzAwMmRhc3NpZ24tNTIzIj48L2E+U3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgaW5oZXJpdGluZyBmcm9tIGEgdmlydHVhbCBiYXNlIHdpdGggYQorbm9uLXRyaXZpYWwgQysrMTEgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLiAgVGhpcyBpcyBkYW5nZXJvdXMgYmVjYXVzZQoraWYgdGhlIHZpcnR1YWwgYmFzZSBpcyByZWFjaGFibGUgYWxvbmcgbW9yZSB0aGFuIG9uZSBwYXRoLCBpdCB3aWxsIGJlCittb3ZlZCBtdWx0aXBsZSB0aW1lcywgd2hpY2ggY2FuIG1lYW4gYm90aCBvYmplY3RzIGVuZCB1cCBpbiB0aGUKK21vdmVkLWZyb20gc3RhdGUuICBJZiB0aGUgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yIGlzIHdyaXR0ZW4gdG8gYXZvaWQKK21vdmluZyBmcm9tIGEgbW92ZWQtZnJvbSBvYmplY3QsIHRoaXMgd2FybmluZyBjYW4gYmUgZGlzYWJsZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3ZsYTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV3ZsYS01MjQiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHZsYS01MjUiPjwvYT5XYXJuIGlmIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBpcyB1c2VkIGluIHRoZSBjb2RlLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tdmxhPC9zcGFuPjwvc2FtcD4gcHJldmVudHMgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XcGVkYW50aWM8L3NwYW4+PC9zYW1wPiB3YXJuaW5nIG9mCit0aGUgdmFyaWFibGUgbGVuZ3RoIGFycmF5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd2b2xhdGlsZS1yZWdpc3Rlci12YXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVd2b2xhdGlsZV8wMDJkcmVnaXN0ZXJfMDAyZHZhci01MjYiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHZvbGF0aWxlXzAwMmRyZWdpc3Rlcl8wMDJkdmFyLTUyNyI+PC9hPldhcm4gaWYgYSByZWdpc3RlciB2YXJpYWJsZSBpcyBkZWNsYXJlZCB2b2xhdGlsZS4gIFRoZSB2b2xhdGlsZQorbW9kaWZpZXIgZG9lcyBub3QgaW5oaWJpdCBhbGwgb3B0aW1pemF0aW9ucyB0aGF0IG1heSBlbGltaW5hdGUgcmVhZHMKK2FuZC9vciB3cml0ZXMgdG8gcmVnaXN0ZXIgdmFyaWFibGVzLiAgVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2Rpc2FibGVkLW9wdGltaXphdGlvbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtV2Rpc2FibGVkXzAwMmRvcHRpbWl6YXRpb24tNTI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRkaXNhYmxlZF8wMDJkb3B0aW1pemF0aW9uLTUyOSI+PC9hPldhcm4gaWYgYSByZXF1ZXN0ZWQgb3B0aW1pemF0aW9uIHBhc3MgaXMgZGlzYWJsZWQuICBUaGlzIHdhcm5pbmcgZG9lcworbm90IGdlbmVyYWxseSBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIGFueXRoaW5nIHdyb25nIHdpdGggeW91ciBjb2RlOyBpdAorbWVyZWx5IGluZGljYXRlcyB0aGF0IEdDQydzIG9wdGltaXplcnMgYXJlIHVuYWJsZSB0byBoYW5kbGUgdGhlIGNvZGUKK2VmZmVjdGl2ZWx5LiAgT2Z0ZW4sIHRoZSBwcm9ibGVtIGlzIHRoYXQgeW91ciBjb2RlIGlzIHRvbyBiaWcgb3IgdG9vCitjb21wbGV4OyBHQ0MgcmVmdXNlcyB0byBvcHRpbWl6ZSBwcm9ncmFtcyB3aGVuIHRoZSBvcHRpbWl6YXRpb24KK2l0c2VsZiBpcyBsaWtlbHkgdG8gdGFrZSBpbm9yZGluYXRlIGFtb3VudHMgb2YgdGltZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XcG9pbnRlci1zaWduIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV3BvaW50ZXJfMDAyZHNpZ24tNTMwIj48L2E+PGEgbmFtZT0iaW5kZXgtV25vXzAwMmRwb2ludGVyXzAwMmRzaWduLTUzMSI+PC9hPldhcm4gZm9yIHBvaW50ZXIgYXJndW1lbnQgcGFzc2luZyBvciBhc3NpZ25tZW50IHdpdGggZGlmZmVyZW50IHNpZ25lZG5lc3MuIAorVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIEMgYW5kIE9iamVjdGl2ZS1DLiAgSXQgaXMgaW1wbGllZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPiBhbmQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwZWRhbnRpYzwvc3Bhbj48L3NhbXA+LCB3aGljaCBjYW4gYmUgZGlzYWJsZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby1wb2ludGVyLXNpZ248L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1Xc3RhY2stcHJvdGVjdG9yPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xc3RhY2tfMDAyZHByb3RlY3Rvci01MzIiPjwvYT48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZHN0YWNrXzAwMmRwcm90ZWN0b3ItNTMzIj48L2E+VGhpcyBvcHRpb24gaXMgb25seSBhY3RpdmUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnN0YWNrLXByb3RlY3Rvcjwvc3Bhbj48L3NhbXA+IGlzIGFjdGl2ZS4gIEl0Cit3YXJucyBhYm91dCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHByb3RlY3RlZCBhZ2FpbnN0IHN0YWNrIHNtYXNoaW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVduby1tdWRmbGFwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1Xbm9fMDAyZG11ZGZsYXAtNTM0Ij48L2E+U3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RydWN0cyB0aGF0IGNhbm5vdCBiZSBpbnN0cnVtZW50ZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbXVkZmxhcDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdvdmVybGVuZ3RoLXN0cmluZ3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVdvdmVybGVuZ3RoXzAwMmRzdHJpbmdzLTUzNSI+PC9hPjxhIG5hbWU9ImluZGV4LVdub18wMDJkb3Zlcmxlbmd0aF8wMDJkc3RyaW5ncy01MzYiPjwvYT5XYXJuIGFib3V0IHN0cmluZyBjb25zdGFudHMgdGhhdCBhcmUgbG9uZ2VyIHRoYW4gdGhlICZsZHF1bzttaW5pbXVtCittYXhpbXVtJnJkcXVvOyBsZW5ndGggc3BlY2lmaWVkIGluIHRoZSBDIHN0YW5kYXJkLiAgTW9kZXJuIGNvbXBpbGVycworZ2VuZXJhbGx5IGFsbG93IHN0cmluZyBjb25zdGFudHMgdGhhdCBhcmUgbXVjaCBsb25nZXIgdGhhbiB0aGUKK3N0YW5kYXJkJ3MgbWluaW11bSBsaW1pdCwgYnV0IHZlcnkgcG9ydGFibGUgcHJvZ3JhbXMgc2hvdWxkIGF2b2lkCit1c2luZyBsb25nZXIgc3RyaW5ncy4KKworICAgICA8cD5UaGUgbGltaXQgYXBwbGllcyA8ZW0+YWZ0ZXI8L2VtPiBzdHJpbmcgY29uc3RhbnQgY29uY2F0ZW5hdGlvbiwgYW5kIGRvZXMKK25vdCBjb3VudCB0aGUgdHJhaWxpbmcgTlVMLiAgSW4gQzkwLCB0aGUgbGltaXQgd2FzIDUwOSBjaGFyYWN0ZXJzOyBpbgorQzk5LCBpdCB3YXMgcmFpc2VkIHRvIDQwOTUuICBDKys5OCBkb2VzIG5vdCBzcGVjaWZ5IGEgbm9ybWF0aXZlCittaW5pbXVtIG1heGltdW0sIHNvIHdlIGRvIG5vdCBkaWFnbm9zZSBvdmVybGVuZ3RoIHN0cmluZ3MgaW4gQysrLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGltcGxpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdwZWRhbnRpYzwvc3Bhbj48L3NhbXA+LCBhbmQgY2FuIGJlIGRpc2FibGVkIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tb3Zlcmxlbmd0aC1zdHJpbmdzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3Vuc3VmZml4ZWQtZmxvYXQtY29uc3RhbnRzIDwvY29kZT48c3BhbiBjbGFzcz0icm9tYW4iPihDIGFuZCBPYmplY3RpdmUtQyBvbmx5KTwvc3Bhbj48ZGQ+PGEgbmFtZT0iaW5kZXgtV3Vuc3VmZml4ZWRfMDAyZGZsb2F0XzAwMmRjb25zdGFudHMtNTM3Ij48L2E+CitJc3N1ZSBhIHdhcm5pbmcgZm9yIGFueSBmbG9hdGluZyBjb25zdGFudCB0aGF0IGRvZXMgbm90IGhhdmUKK2Egc3VmZml4LiAgV2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdzeXN0ZW0taGVhZGVyczwvc3Bhbj48L3NhbXA+IGl0Cit3YXJucyBhYm91dCBzdWNoIGNvbnN0YW50cyBpbiBzeXN0ZW0gaGVhZGVyIGZpbGVzLiAgVGhpcyBjYW4gYmUgdXNlZnVsCit3aGVuIHByZXBhcmluZyBjb2RlIHRvIHVzZSB3aXRoIHRoZSA8Y29kZT5GTE9BVF9DT05TVF9ERUNJTUFMNjQ8L2NvZGU+IHByYWdtYQorZnJvbSB0aGUgZGVjaW1hbCBmbG9hdGluZy1wb2ludCBleHRlbnNpb24gdG8gQzk5LiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1dhcm5pbmdzLWFuZC1FcnJvcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvV2FybmluZ3MtYW5kLUVycm9ycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMWNmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1dhcm5pbmdzLWFuZC1FcnJvcnMuaHRtbApAQCAtMCwwICsxLDk0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5XYXJuaW5ncyBhbmQgRXJyb3JzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRyb3VibGUuaHRtbCNUcm91YmxlIiB0aXRsZT0iVHJvdWJsZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik5vbl8wMDJkYnVncy5odG1sI05vbl8wMDJkYnVncyIgdGl0bGU9Ik5vbi1idWdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ildhcm5pbmdzLWFuZC1FcnJvcnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJOb25fMDAyZGJ1Z3MuaHRtbCNOb25fMDAyZGJ1Z3MiPk5vbi1idWdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiPlRyb3VibGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMS45IFdhcm5pbmcgTWVzc2FnZXMgYW5kIEVycm9yIE1lc3NhZ2VzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXJyb3ItbWVzc2FnZXMtMzU4NyI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzLXZzLWVycm9ycy0zNTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWVzc2FnZXNfMDAyYy13YXJuaW5nLWFuZC1lcnJvci0zNTg5Ij48L2E+VGhlIEdOVSBjb21waWxlciBjYW4gcHJvZHVjZSB0d28ga2luZHMgb2YgZGlhZ25vc3RpY3M6IGVycm9ycyBhbmQKK3dhcm5pbmdzLiAgRWFjaCBraW5kIGhhcyBhIGRpZmZlcmVudCBwdXJwb3NlOgorCisgICAgIDx1bD4KKzxsaT48ZGZuPkVycm9yczwvZGZuPiByZXBvcnQgcHJvYmxlbXMgdGhhdCBtYWtlIGl0IGltcG9zc2libGUgdG8gY29tcGlsZSB5b3VyCitwcm9ncmFtLiAgR0NDIHJlcG9ydHMgZXJyb3JzIHdpdGggdGhlIHNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUKK251bWJlciB3aGVyZSB0aGUgcHJvYmxlbSBpcyBhcHBhcmVudC4KKworICAgICA8bGk+PGRmbj5XYXJuaW5nczwvZGZuPiByZXBvcnQgb3RoZXIgdW51c3VhbCBjb25kaXRpb25zIGluIHlvdXIgY29kZSB0aGF0Cis8ZW0+bWF5PC9lbT4gaW5kaWNhdGUgYSBwcm9ibGVtLCBhbHRob3VnaCBjb21waWxhdGlvbiBjYW4gKGFuZCBkb2VzKQorcHJvY2VlZC4gIFdhcm5pbmcgbWVzc2FnZXMgYWxzbyByZXBvcnQgdGhlIHNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUKK251bWJlciwgYnV0IGluY2x1ZGUgdGhlIHRleHQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53YXJuaW5nOjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBkaXN0aW5ndWlzaCB0aGVtCitmcm9tIGVycm9yIG1lc3NhZ2VzLiAKKzwvdWw+CisKKyA8cD5XYXJuaW5ncyBtYXkgaW5kaWNhdGUgZGFuZ2VyIHBvaW50cyB3aGVyZSB5b3Ugc2hvdWxkIGNoZWNrIHRvIG1ha2Ugc3VyZQordGhhdCB5b3VyIHByb2dyYW0gcmVhbGx5IGRvZXMgd2hhdCB5b3UgaW50ZW5kOyBvciB0aGUgdXNlIG9mIG9ic29sZXRlCitmZWF0dXJlczsgb3IgdGhlIHVzZSBvZiBub25zdGFuZGFyZCBmZWF0dXJlcyBvZiBHTlUgQyBvciBDKysuICBNYW55Cit3YXJuaW5ncyBhcmUgaXNzdWVkIG9ubHkgaWYgeW91IGFzayBmb3IgdGhlbSwgd2l0aCBvbmUgb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XPC9zcGFuPjwvc2FtcD4KK29wdGlvbnMgKGZvciBpbnN0YW5jZSwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbGw8L3NwYW4+PC9zYW1wPiByZXF1ZXN0cyBhIHZhcmlldHkgb2YgdXNlZnVsCit3YXJuaW5ncykuCisKKyA8cD48YSBuYW1lPSJpbmRleC1wZWRhbnRpYy0zNTkwIj48L2E+PGEgbmFtZT0iaW5kZXgtcGVkYW50aWNfMDAyZGVycm9ycy0zNTkxIj48L2E+R0NDIGFsd2F5cyB0cmllcyB0byBjb21waWxlIHlvdXIgcHJvZ3JhbSBpZiBwb3NzaWJsZTsgaXQgbmV2ZXIKK2dyYXR1aXRvdXNseSByZWplY3RzIGEgcHJvZ3JhbSB3aG9zZSBtZWFuaW5nIGlzIGNsZWFyIG1lcmVseSBiZWNhdXNlCisoZm9yIGluc3RhbmNlKSBpdCBmYWlscyB0byBjb25mb3JtIHRvIGEgc3RhbmRhcmQuICBJbiBzb21lIGNhc2VzLAoraG93ZXZlciwgdGhlIEMgYW5kIEMrKyBzdGFuZGFyZHMgc3BlY2lmeSB0aGF0IGNlcnRhaW4gZXh0ZW5zaW9ucyBhcmUKK2ZvcmJpZGRlbiwgYW5kIGEgZGlhZ25vc3RpYyA8ZW0+bXVzdDwvZW0+IGJlIGlzc3VlZCBieSBhIGNvbmZvcm1pbmcKK2NvbXBpbGVyLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0ZWxscyBHQ0MgdG8gaXNzdWUgd2FybmluZ3MgaW4KK3N1Y2ggY2FzZXM7IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYy1lcnJvcnM8L3NwYW4+PC9zYW1wPiBzYXlzIHRvIG1ha2UgdGhlbSBlcnJvcnMgaW5zdGVhZC4gCitUaGlzIGRvZXMgbm90IG1lYW4gdGhhdCA8ZW0+YWxsPC9lbT4gbm9uLUlTTyBjb25zdHJ1Y3RzIGdldCB3YXJuaW5ncworb3IgZXJyb3JzLgorCisgPHA+U2VlIDxhIGhyZWY9Ildhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+T3B0aW9ucyB0byBSZXF1ZXN0IG9yIFN1cHByZXNzIFdhcm5pbmdzPC9hPiwgZm9yCittb3JlIGRldGFpbCBvbiB0aGVzZSBhbmQgcmVsYXRlZCBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKworPCEtLSBDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gLS0+Cis8IS0tIFRoaXMgaXMgcGFydCBvZiB0aGUgR0NDIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBnY2MudGV4aS4gLS0+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9XZWFrLVByYWdtYXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvV2Vhay1QcmFnbWFzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1MWYyYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvV2Vhay1QcmFnbWFzLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+V2VhayBQcmFnbWFzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlByYWdtYXMuaHRtbCNQcmFnbWFzIiB0aXRsZT0iUHJhZ21hcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlN0cnVjdHVyZV8wMDJkUGFja2luZy1QcmFnbWFzLmh0bWwjU3RydWN0dXJlXzAwMmRQYWNraW5nLVByYWdtYXMiIHRpdGxlPSJTdHJ1Y3R1cmUtUGFja2luZyBQcmFnbWFzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRGlhZ25vc3RpYy1QcmFnbWFzLmh0bWwjRGlhZ25vc3RpYy1QcmFnbWFzIiB0aXRsZT0iRGlhZ25vc3RpYyBQcmFnbWFzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IldlYWstUHJhZ21hcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEaWFnbm9zdGljLVByYWdtYXMuaHRtbCNEaWFnbm9zdGljLVByYWdtYXMiPkRpYWdub3N0aWMgUHJhZ21hczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN0cnVjdHVyZV8wMDJkUGFja2luZy1QcmFnbWFzLmh0bWwjU3RydWN0dXJlXzAwMmRQYWNraW5nLVByYWdtYXMiPlN0cnVjdHVyZS1QYWNraW5nIFByYWdtYXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+UHJhZ21hczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTguOSBXZWFrIFByYWdtYXM8L2g0PgorCis8cD5Gb3IgY29tcGF0aWJpbGl0eSB3aXRoIFNWUjQsIEdDQyBzdXBwb3J0cyBhIHNldCBvZiA8Y29kZT4jcHJhZ21hPC9jb2RlPgorZGlyZWN0aXZlcyBmb3IgZGVjbGFyaW5nIHN5bWJvbHMgdG8gYmUgd2VhaywgYW5kIGRlZmluaW5nIHdlYWsKK2FsaWFzZXMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiNwcmFnbWEgd2VhayA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtcHJhZ21hXzAwMmMtd2Vhay0zNDczIj48L2E+VGhpcyBwcmFnbWEgZGVjbGFyZXMgPHZhcj5zeW1ib2w8L3Zhcj4gdG8gYmUgd2VhaywgYXMgaWYgdGhlIGRlY2xhcmF0aW9uCitoYWQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgc2FtZSBuYW1lLiAgVGhlIHByYWdtYSBtYXkgYXBwZWFyIGJlZm9yZQorb3IgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uIG9mIDx2YXI+c3ltYm9sPC92YXI+LiAgSXQgaXMgbm90IGFuIGVycm9yIGZvcgorPHZhcj5zeW1ib2w8L3Zhcj4gdG8gbmV2ZXIgYmUgZGVmaW5lZCBhdCBhbGwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4jcHJhZ21hIHdlYWsgPC9jb2RlPjx2YXI+c3ltYm9sMTwvdmFyPjxjb2RlPiA9IDwvY29kZT48dmFyPnN5bWJvbDI8L3Zhcj48ZGQ+VGhpcyBwcmFnbWEgZGVjbGFyZXMgPHZhcj5zeW1ib2wxPC92YXI+IHRvIGJlIGEgd2VhayBhbGlhcyBvZiA8dmFyPnN5bWJvbDI8L3Zhcj4uIAorSXQgaXMgYW4gZXJyb3IgaWYgPHZhcj5zeW1ib2wyPC92YXI+IGlzIG5vdCBkZWZpbmVkIGluIHRoZSBjdXJyZW50Cit0cmFuc2xhdGlvbiB1bml0LiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1doYXQteW91LWNhbi1hbmQtd2hhdC15b3UtY2Fubm90LWRvLWluLV8wMDJibG9hZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9XaGF0LXlvdS1jYW4tYW5kLXdoYXQteW91LWNhbm5vdC1kby1pbi1fMDAyYmxvYWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzc2NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9XaGF0LXlvdS1jYW4tYW5kLXdoYXQteW91LWNhbm5vdC1kby1pbi1fMDAyYmxvYWQuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+V2hhdCB5b3UgY2FuIGFuZCB3aGF0IHlvdSBjYW5ub3QgZG8gaW4gK2xvYWQgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXhlY3V0aW5nLWNvZGUtYmVmb3JlLW1haW4uaHRtbCNFeGVjdXRpbmctY29kZS1iZWZvcmUtbWFpbiIgdGl0bGU9IkV4ZWN1dGluZyBjb2RlIGJlZm9yZSBtYWluIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IldoYXQteW91LWNhbi1hbmQtd2hhdC15b3UtY2Fubm90LWRvLWluLStsb2FkIj48L2E+Cis8YSBuYW1lPSJXaGF0LXlvdS1jYW4tYW5kLXdoYXQteW91LWNhbm5vdC1kby1pbi1fMDAyYmxvYWQiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeGVjdXRpbmctY29kZS1iZWZvcmUtbWFpbi5odG1sI0V4ZWN1dGluZy1jb2RlLWJlZm9yZS1tYWluIj5FeGVjdXRpbmcgY29kZSBiZWZvcmUgbWFpbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjguMi4xIFdoYXQgeW91IGNhbiBhbmQgd2hhdCB5b3UgY2Fubm90IGRvIGluIDxjb2RlPitsb2FkPC9jb2RlPjwvaDQ+CisKKzxwPjxjb2RlPitsb2FkPC9jb2RlPiBpcyB0byBiZSB1c2VkIG9ubHkgYXMgYSBsYXN0IHJlc29ydC4gIEJlY2F1c2UgaXQgaXMKK2V4ZWN1dGVkIHZlcnkgZWFybHksIG1vc3Qgb2YgdGhlIE9iamVjdGl2ZS1DIHJ1bnRpbWUgbWFjaGluZXJ5IHdpbGwKK25vdCBiZSByZWFkeSB3aGVuIDxjb2RlPitsb2FkPC9jb2RlPiBpcyBleGVjdXRlZDsgaGVuY2UgPGNvZGU+K2xvYWQ8L2NvZGU+IHdvcmtzCitiZXN0IGZvciBleGVjdXRpbmcgQyBjb2RlIHRoYXQgaXMgaW5kZXBlbmRlbnQgb24gdGhlIE9iamVjdGl2ZS1DCitydW50aW1lLgorCisgPHA+VGhlIDxjb2RlPitsb2FkPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgR05VIHJ1bnRpbWUgZ3VhcmFudGVlcyB5b3UgdGhlCitmb2xsb3dpbmcgdGhpbmdzOgorCisgICAgIDx1bD4KKzxsaT55b3UgY2FuIHdyaXRlIHdoYXRldmVyIEMgY29kZSB5b3UgbGlrZTsKKworICAgICA8bGk+eW91IGNhbiBhbGxvY2F0ZSBhbmQgc2VuZCBtZXNzYWdlcyB0byBvYmplY3RzIHdob3NlIGNsYXNzIGlzIGltcGxlbWVudGVkCitpbiB0aGUgc2FtZSBmaWxlOworCisgICAgIDxsaT50aGUgPGNvZGU+K2xvYWQ8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIGFsbCBzdXBlciBjbGFzc2VzIG9mIGEgY2xhc3MgYXJlCitleGVjdXRlZCBiZWZvcmUgdGhlIDxjb2RlPitsb2FkPC9jb2RlPiBvZiB0aGF0IGNsYXNzIGlzIGV4ZWN1dGVkOworCisgICAgIDxsaT50aGUgPGNvZGU+K2xvYWQ8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIGEgY2xhc3MgaXMgZXhlY3V0ZWQgYmVmb3JlIHRoZQorPGNvZGU+K2xvYWQ8L2NvZGU+IGltcGxlbWVudGF0aW9uIG9mIGFueSBjYXRlZ29yeS4KKworIDwvdWw+CisKKyA8cD5JbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIHRoaW5ncywgZXZlbiBpZiB0aGV5IGNhbiB3b3JrIGluIGEKK3BhcnRpY3VsYXIgY2FzZSwgYXJlIG5vdCBndWFyYW50ZWVkOgorCisgICAgIDx1bD4KKzxsaT5hbGxvY2F0aW9uIG9mIG9yIHNlbmRpbmcgbWVzc2FnZXMgdG8gYXJiaXRyYXJ5IG9iamVjdHM7CisKKyAgICAgPGxpPmFsbG9jYXRpb24gb2Ygb3Igc2VuZGluZyBtZXNzYWdlcyB0byBvYmplY3RzIHdob3NlIGNsYXNzZXMgaGF2ZSBhCitjYXRlZ29yeSBpbXBsZW1lbnRlZCBpbiB0aGUgc2FtZSBmaWxlOworCisgICAgIDxsaT5zZW5kaW5nIG1lc3NhZ2VzIHRvIE9iamVjdGl2ZS1DIGNvbnN0YW50IHN0cmluZ3MgKDxjb2RlPkAidGhpcyBpcyBhCitjb25zdGFudCBzdHJpbmciPC9jb2RlPik7CisKKyA8L3VsPgorCisgPHA+WW91IHNob3VsZCBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHJlY2VpdmluZyA8Y29kZT4rbG9hZDwvY29kZT4gaW4gc2libGluZworY2xhc3NlcyB3aGVuIHlvdSB3cml0ZSA8Y29kZT4rbG9hZDwvY29kZT4gb2YgYSBjbGFzcy4gIFRoZSBvcmRlciBpbiB3aGljaAorc2libGluZyBjbGFzc2VzIHJlY2VpdmUgPGNvZGU+K2xvYWQ8L2NvZGU+IGlzIG5vdCBndWFyYW50ZWVkLgorCisgPHA+VGhlIG9yZGVyIGluIHdoaWNoIDxjb2RlPitsb2FkPC9jb2RlPiBhbmQgPGNvZGU+K2luaXRpYWxpemU8L2NvZGU+IGFyZSBjYWxsZWQgY291bGQKK2JlIHByb2JsZW1hdGljIGlmIHRoaXMgbWF0dGVycy4gIElmIHlvdSBkb24ndCBhbGxvY2F0ZSBvYmplY3RzIGluc2lkZQorPGNvZGU+K2xvYWQ8L2NvZGU+LCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgPGNvZGU+K2xvYWQ8L2NvZGU+IGlzIGNhbGxlZCBiZWZvcmUKKzxjb2RlPitpbml0aWFsaXplPC9jb2RlPi4gIElmIHlvdSBjcmVhdGUgYW4gb2JqZWN0IGluc2lkZSA8Y29kZT4rbG9hZDwvY29kZT4gdGhlCis8Y29kZT4raW5pdGlhbGl6ZTwvY29kZT4gbWV0aG9kIG9mIG9iamVjdCdzIGNsYXNzIGlzIGludm9rZWQgZXZlbiBpZgorPGNvZGU+K2xvYWQ8L2NvZGU+IHdhcyBub3QgaW52b2tlZC4gIE5vdGUgaWYgeW91IGV4cGxpY2l0bHkgY2FsbCA8Y29kZT4rbG9hZDwvY29kZT4KK29uIGEgY2xhc3MsIDxjb2RlPitpbml0aWFsaXplPC9jb2RlPiB3aWxsIGJlIGNhbGxlZCBmaXJzdC4gIFRvIGF2b2lkIHBvc3NpYmxlCitwcm9ibGVtcyB0cnkgdG8gaW1wbGVtZW50IG9ubHkgb25lIG9mIHRoZXNlIG1ldGhvZHMuCisKKyA8cD5UaGUgPGNvZGU+K2xvYWQ8L2NvZGU+IG1ldGhvZCBpcyBhbHNvIGludm9rZWQgd2hlbiBhIGJ1bmRsZSBpcyBkeW5hbWljYWxseQorbG9hZGVkIGludG8geW91ciBydW5uaW5nIHByb2dyYW0uICBUaGlzIGhhcHBlbnMgYXV0b21hdGljYWxseSB3aXRob3V0IGFueQoraW50ZXJ2ZW5pbmcgb3BlcmF0aW9uIGZyb20geW91LiAgV2hlbiB5b3Ugd3JpdGUgYnVuZGxlcyBhbmQgeW91IG5lZWQgdG8KK3dyaXRlIDxjb2RlPitsb2FkPC9jb2RlPiB5b3UgY2FuIHNhZmVseSBjcmVhdGUgYW5kIHNlbmQgbWVzc2FnZXMgdG8gb2JqZWN0cyB3aG9zZQorY2xhc3NlcyBhbHJlYWR5IGV4aXN0IGluIHRoZSBydW5uaW5nIHByb2dyYW0uICBUaGUgc2FtZSByZXN0cmljdGlvbnMgYXMKK2Fib3ZlIGFwcGx5IHRvIGNsYXNzZXMgZGVmaW5lZCBpbiBidW5kbGUuCisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1d0cmlncmFwaHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvV3RyaWdyYXBocy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OGM5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1d0cmlncmFwaHMuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9UHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNXdHJpZ3JhcGhzIj4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjUyMzA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9YODYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTMzNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WDg2IEJ1aWx0LWluIEZ1bmN0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiIHRpdGxlPSJUYXJnZXQgQnVpbHRpbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGUl8wMDJkVi1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyIgdGl0bGU9IkZSLVYgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWDg2LXRyYW5zYWN0aW9uYWwtbWVtb3J5LWludHJpbnNpY3MuaHRtbCNYODYtdHJhbnNhY3Rpb25hbC1tZW1vcnktaW50cmluc2ljcyIgdGl0bGU9Ilg4NiB0cmFuc2FjdGlvbmFsIG1lbW9yeSBpbnRyaW5zaWNzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ilg4Ni1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ilg4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwjWDg2LXRyYW5zYWN0aW9uYWwtbWVtb3J5LWludHJpbnNpY3MiPlg4NiB0cmFuc2FjdGlvbmFsIG1lbW9yeSBpbnRyaW5zaWNzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPkZSLVYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIj5UYXJnZXQgQnVpbHRpbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjU2LjcgWDg2IEJ1aWx0LWluIEZ1bmN0aW9uczwvaDQ+CisKKzxwPlRoZXNlIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgaTM4NiBhbmQgeDg2LTY0IGZhbWlseQorb2YgY29tcHV0ZXJzLCBkZXBlbmRpbmcgb24gdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyB1c2VkLgorCisgPHA+SWYgeW91IHNwZWNpZnkgY29tbWFuZC1saW5lIHN3aXRjaGVzIHN1Y2ggYXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc2U8L3NwYW4+PC9zYW1wPiwKK3RoZSBjb21waWxlciBjb3VsZCB1c2UgdGhlIGV4dGVuZGVkIGluc3RydWN0aW9uIHNldHMgZXZlbiBpZiB0aGUgYnVpbHQtaW5zCithcmUgbm90IHVzZWQgZXhwbGljaXRseSBpbiB0aGUgcHJvZ3JhbS4gIEZvciB0aGlzIHJlYXNvbiwgYXBwbGljYXRpb25zCit0aGF0IHBlcmZvcm0gcnVuLXRpbWUgQ1BVIGRldGVjdGlvbiBtdXN0IGNvbXBpbGUgc2VwYXJhdGUgZmlsZXMgZm9yIGVhY2gKK3N1cHBvcnRlZCBhcmNoaXRlY3R1cmUsIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBmbGFncy4gIEluIHBhcnRpY3VsYXIsCit0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDUFUgZGV0ZWN0aW9uIGNvZGUgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQKK3RoZXNlIG9wdGlvbnMuCisKKyA8cD5UaGUgZm9sbG93aW5nIG1hY2hpbmUgbW9kZXMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGggTU1YIGJ1aWx0LWluIGZ1bmN0aW9ucworKHNlZSA8YSBocmVmPSJWZWN0b3ItRXh0ZW5zaW9ucy5odG1sI1ZlY3Rvci1FeHRlbnNpb25zIj5WZWN0b3IgRXh0ZW5zaW9uczwvYT4pOiA8Y29kZT5WMlNJPC9jb2RlPiBmb3IgYSB2ZWN0b3Igb2YgdHdvIDMyLWJpdCBpbnRlZ2VycywKKzxjb2RlPlY0SEk8L2NvZGU+IGZvciBhIHZlY3RvciBvZiBmb3VyIDE2LWJpdCBpbnRlZ2VycywgYW5kIDxjb2RlPlY4UUk8L2NvZGU+IGZvciBhCit2ZWN0b3Igb2YgZWlnaHQgOC1iaXQgaW50ZWdlcnMuICBTb21lIG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgb3BlcmF0ZSBvbgorTU1YIHJlZ2lzdGVycyBhcyBhIHdob2xlIDY0LWJpdCBlbnRpdHksIHRoZXNlIHVzZSA8Y29kZT5WMURJPC9jb2RlPiBhcyB0aGVpciBtb2RlLgorCisgPHA+SWYgM0ROb3chIGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQsIDxjb2RlPlYyU0Y8L2NvZGU+IGlzIHVzZWQgYXMgYSBtb2RlIGZvciBhIHZlY3Rvcgorb2YgdHdvIDMyLWJpdCBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisKKyA8cD5JZiBTU0UgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCwgPGNvZGU+VjRTRjwvY29kZT4gaXMgdXNlZCBmb3IgYSB2ZWN0b3Igb2YgZm91ciAzMi1iaXQKK2Zsb2F0aW5nLXBvaW50IHZhbHVlcy4gIFNvbWUgaW5zdHJ1Y3Rpb25zIHVzZSBhIHZlY3RvciBvZiBmb3VyIDMyLWJpdAoraW50ZWdlcnMsIHRoZXNlIHVzZSA8Y29kZT5WNFNJPC9jb2RlPi4gIEZpbmFsbHksIHNvbWUgaW5zdHJ1Y3Rpb25zIG9wZXJhdGUgb24gYW4KK2VudGlyZSB2ZWN0b3IgcmVnaXN0ZXIsIGludGVycHJldGluZyBpdCBhcyBhIDEyOC1iaXQgaW50ZWdlciwgdGhlc2UgdXNlIG1vZGUKKzxjb2RlPlRJPC9jb2RlPi4KKworIDxwPkluIDY0LWJpdCBtb2RlLCB0aGUgeDg2LTY0IGZhbWlseSBvZiBwcm9jZXNzb3JzIHVzZXMgYWRkaXRpb25hbCBidWlsdC1pbgorZnVuY3Rpb25zIGZvciBlZmZpY2llbnQgdXNlIG9mIDxjb2RlPlRGPC9jb2RlPiAoPGNvZGU+X19mbG9hdDEyODwvY29kZT4pIDEyOC1iaXQKK2Zsb2F0aW5nIHBvaW50IGFuZCA8Y29kZT5UQzwvY29kZT4gMTI4LWJpdCBjb21wbGV4IGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKworIDxwPlRoZSBmb2xsb3dpbmcgZmxvYXRpbmctcG9pbnQgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gNjQtYml0Cittb2RlLiAgQWxsIG9mIHRoZW0gaW1wbGVtZW50IHRoZSBmdW5jdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBfX2Zsb2F0MTI4IF9fYnVpbHRpbl9mYWJzcSAoX19mbG9hdDEyOCkKKyAgICAgX19mbG9hdDEyOCBfX2J1aWx0aW5fY29weXNpZ25xIChfX2Zsb2F0MTI4LCBfX2Zsb2F0MTI4KQorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbiBpcyBhbHdheXMgYXZhaWxhYmxlLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT52b2lkIF9fYnVpbHRpbl9pYTMyX3BhdXNlICh2b2lkKTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5wYXVzZTwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiB3aXRoIGEgY29tcGlsZXIgbWVtb3J5CitiYXJyaWVyLiAKKzwvZGw+CisKKyA8cD5UaGUgZm9sbG93aW5nIGZsb2F0aW5nLXBvaW50IGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgbWFkZSBhdmFpbGFibGUgaW4gdGhlCis2NC1iaXQgbW9kZS4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+X19mbG9hdDEyOCBfX2J1aWx0aW5faW5mcSAodm9pZCk8L2NvZGU+PGRkPlNpbWlsYXIgdG8gPGNvZGU+X19idWlsdGluX2luZjwvY29kZT4sIGV4Y2VwdCB0aGUgcmV0dXJuIHR5cGUgaXMgPGNvZGU+X19mbG9hdDEyODwvY29kZT4uIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1ZmluZnEtMzQwNyI+PC9hPgorPGJyPjxkdD48Y29kZT5fX2Zsb2F0MTI4IF9fYnVpbHRpbl9odWdlX3ZhbHEgKHZvaWQpPC9jb2RlPjxkZD5TaW1pbGFyIHRvIDxjb2RlPl9fYnVpbHRpbl9odWdlX3ZhbDwvY29kZT4sIGV4Y2VwdCB0aGUgcmV0dXJuIHR5cGUgaXMgPGNvZGU+X19mbG9hdDEyODwvY29kZT4uIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmJ1aWx0aW5fMDA1Zmh1Z2VfMDA1ZnZhbHEtMzQwOCI+PC9hPjwvZGw+CisKKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIGF2YWlsYWJsZSBhbmQgY2FuIGJlIHVzZWQgdG8KK2NoZWNrIHRoZSB0YXJnZXQgcGxhdGZvcm0gdHlwZS4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2J1aWx0aW5fY3B1X2luaXQ8L2I+ICg8dmFyPnZvaWQ8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmY3B1XzAwNWZpbml0LTM0MDkiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIHJ1bnMgdGhlIENQVSBkZXRlY3Rpb24gY29kZSB0byBjaGVjayB0aGUgdHlwZSBvZiBDUFUgYW5kIHRoZQorZmVhdHVyZXMgc3VwcG9ydGVkLiAgVGhpcyBidWlsdC1pbiBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbnZva2VkIGFsb25nIHdpdGggdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucwordG8gY2hlY2sgQ1BVIHR5cGUgYW5kIGZlYXR1cmVzLCA8Y29kZT5fX2J1aWx0aW5fY3B1X2lzPC9jb2RlPiBhbmQKKzxjb2RlPl9fYnVpbHRpbl9jcHVfc3VwcG9ydHM8L2NvZGU+LCBvbmx5IHdoZW4gdXNlZCBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMKK2V4ZWN1dGVkIGJlZm9yZSBhbnkgY29uc3RydWN0b3JzIGFyZSBjYWxsZWQuICBUaGUgQ1BVIGRldGVjdGlvbiBjb2RlIGlzCithdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGluIGEgdmVyeSBoaWdoIHByaW9yaXR5IGNvbnN0cnVjdG9yLgorCisgICAgICA8cD5Gb3IgZXhhbXBsZSwgdGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgdXNlZCBpbiA8Y29kZT5pZnVuYzwvY29kZT4gcmVzb2x2ZXJzIHRoYXQKK2NoZWNrIGZvciBDUFUgdHlwZSB1c2luZyB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIDxjb2RlPl9fYnVpbHRpbl9jcHVfaXM8L2NvZGU+CithbmQgPGNvZGU+X19idWlsdGluX2NwdV9zdXBwb3J0czwvY29kZT4sIG9yIGluIGNvbnN0cnVjdG9ycyBvbiB0YXJnZXRzIHRoYXQKK2Rvbid0IHN1cHBvcnQgY29uc3RydWN0b3IgcHJpb3JpdHkuCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIAorICAgICAgICAgIHN0YXRpYyB2b2lkICgqcmVzb2x2ZV9tZW1jcHkgKHZvaWQpKSAodm9pZCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvLyBpZnVuYyByZXNvbHZlcnMgZmlyZSBiZWZvcmUgY29uc3RydWN0b3JzLCBleHBsaWNpdGx5IGNhbGwgdGhlIGluaXQKKyAgICAgICAgICAgIC8vIGZ1bmN0aW9uLgorICAgICAgICAgICAgX19idWlsdGluX2NwdV9pbml0ICgpOworICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJzc3NlMyIpKQorICAgICAgICAgICAgICByZXR1cm4gc3NzZTNfbWVtY3B5OyAvLyBzdXBlciBmYXN0IG1lbWNweSB3aXRoIHNzc2UzIGluc3RydWN0aW9ucy4KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfbWVtY3B5OworICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICB2b2lkICptZW1jcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpCisgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoaWZ1bmMgKCJyZXNvbHZlX21lbWNweSIpKSk7Cis8L3ByZT4KKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogaW50IDxiPl9fYnVpbHRpbl9jcHVfaXM8L2I+ICg8dmFyPmNvbnN0IGNoYXIgKmNwdW5hbWU8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYnVpbHRpbl8wMDVmY3B1XzAwNWZpcy0zNDEwIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgaW50ZWdlciBpZiB0aGUgcnVuLXRpbWUgQ1BVCitpcyBvZiB0eXBlIDx2YXI+Y3B1bmFtZTwvdmFyPgorYW5kIHJldHVybnMgPGNvZGU+MDwvY29kZT4gb3RoZXJ3aXNlLiBUaGUgZm9sbG93aW5nIENQVSBuYW1lcyBjYW4gYmUgZGV0ZWN0ZWQ6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnRlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBDUFUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXRvbTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBBdG9tIENQVS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3JlMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBDb3JlIDIgQ1BVLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcmVpNzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBDb3JlIGk3IENQVS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZWhhbGVtPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkludGVsIENvcmUgaTcgTmVoYWxlbSBDUFUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+d2VzdG1lcmU8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW50ZWwgQ29yZSBpNyBXZXN0bWVyZSBDUFUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2FuZHlicmlkZ2U8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW50ZWwgQ29yZSBpNyBTYW5keSBCcmlkZ2UgQ1BVLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFtZDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BTUQgQ1BVLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFtZGZhbTEwaDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BTUQgRmFtaWx5IDEwaCBDUFUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmFyY2Vsb25hPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFNRCBGYW1pbHkgMTBoIEJhcmNlbG9uYSBDUFUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2hhbmdoYWk8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QU1EIEZhbWlseSAxMGggU2hhbmdoYWkgQ1BVLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlzdGFuYnVsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFNRCBGYW1pbHkgMTBoIElzdGFuYnVsIENQVS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5idHZlcjE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QU1EIEZhbWlseSAxNGggQ1BVLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFtZGZhbTE1aDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BTUQgRmFtaWx5IDE1aCBDUFUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmR2ZXIxPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFNRCBGYW1pbHkgMTVoIEJ1bGxkb3plciB2ZXJzaW9uIDEuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmR2ZXIyPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFNRCBGYW1pbHkgMTVoIEJ1bGxkb3plciB2ZXJzaW9uIDIuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmR2ZXIzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFNRCBGYW1pbHkgMTVoIEJ1bGxkb3plciB2ZXJzaW9uIDMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnR2ZXIyPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFNRCBGYW1pbHkgMTZoIENQVS4gCis8L2RsPgorCisgICAgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGU6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGlmIChfX2J1aWx0aW5fY3B1X2lzICgiY29yZWk3IikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICBkb19jb3JlaTcgKCk7IC8vIENvcmUgaTcgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgZG9fZ2VuZXJpYyAoKTsgLy8gR2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIH0KKzwvcHJlPgorICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBpbnQgPGI+X19idWlsdGluX2NwdV9zdXBwb3J0czwvYj4gKDx2YXI+Y29uc3QgY2hhciAqZmVhdHVyZTwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZidWlsdGluXzAwNWZjcHVfMDA1ZnN1cHBvcnRzLTM0MTEiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHRoZSBydW4tdGltZSBDUFUKK3N1cHBvcnRzIDx2YXI+ZmVhdHVyZTwvdmFyPgorYW5kIHJldHVybnMgPGNvZGU+MDwvY29kZT4gb3RoZXJ3aXNlLiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGNhbiBiZSBkZXRlY3RlZDoKKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNtb3Y8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Q01PViBpbnN0cnVjdGlvbi4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bW14PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPk1NWCBpbnN0cnVjdGlvbnMuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvcGNudDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5QT1BDTlQgaW5zdHJ1Y3Rpb24uIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNzZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TU0UgaW5zdHJ1Y3Rpb25zLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc2UyPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlNTRTIgaW5zdHJ1Y3Rpb25zLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc2UzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlNTRTMgaW5zdHJ1Y3Rpb25zLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc3NlMzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TU1NFMyBpbnN0cnVjdGlvbnMuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNzZTQuMTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TU0U0LjEgaW5zdHJ1Y3Rpb25zLiAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc2U0LjI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+U1NFNC4yIGluc3RydWN0aW9ucy4gCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXZ4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFWWCBpbnN0cnVjdGlvbnMuIAorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmF2eDI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QVZYMiBpbnN0cnVjdGlvbnMuIAorPC9kbD4KKworICAgICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBpZiAoX19idWlsdGluX2NwdV9zdXBwb3J0cyAoInBvcGNudCIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgYXNtKCJwb3BjbnQgJTEsJTAiIDogIj1yIihjb3VudCkgOiAicm0iKG4pIDogImNjIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgY291bnQgPSBnZW5lcmljX2NvdW50Yml0cyAobik7IC8vZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICAgIH0KKzwvcHJlPgorICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIG1hZGUgYXZhaWxhYmxlIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbW14PC9zcGFuPjwvc2FtcD4uIAorQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wYWRkYiAodjhxaSwgdjhxaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9wYWRkdyAodjRoaSwgdjRoaSkKKyAgICAgdjJzaSBfX2J1aWx0aW5faWEzMl9wYWRkZCAodjJzaSwgdjJzaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wc3ViYiAodjhxaSwgdjhxaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9wc3VidyAodjRoaSwgdjRoaSkKKyAgICAgdjJzaSBfX2J1aWx0aW5faWEzMl9wc3ViZCAodjJzaSwgdjJzaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wYWRkc2IgKHY4cWksIHY4cWkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcGFkZHN3ICh2NGhpLCB2NGhpKQorICAgICB2OHFpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYiAodjhxaSwgdjhxaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9wc3Vic3cgKHY0aGksIHY0aGkpCisgICAgIHY4cWkgX19idWlsdGluX2lhMzJfcGFkZHVzYiAodjhxaSwgdjhxaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3ICh2NGhpLCB2NGhpKQorICAgICB2OHFpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IgKHY4cWksIHY4cWkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHN1YnVzdyAodjRoaSwgdjRoaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9wbXVsbHcgKHY0aGksIHY0aGkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcG11bGh3ICh2NGhpLCB2NGhpKQorICAgICBkaSBfX2J1aWx0aW5faWEzMl9wYW5kIChkaSwgZGkpCisgICAgIGRpIF9fYnVpbHRpbl9pYTMyX3BhbmRuIChkaSxkaSkKKyAgICAgZGkgX19idWlsdGluX2lhMzJfcG9yIChkaSwgZGkpCisgICAgIGRpIF9fYnVpbHRpbl9pYTMyX3B4b3IgKGRpLCBkaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wY21wZXFiICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9pYTMyX3BjbXBlcXcgKHY0aGksIHY0aGkpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcGNtcGVxZCAodjJzaSwgdjJzaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wY21wZ3RiICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9pYTMyX3BjbXBndHcgKHY0aGksIHY0aGkpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcGNtcGd0ZCAodjJzaSwgdjJzaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wdW5wY2toYncgKHY4cWksIHY4cWkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHVucGNraHdkICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2hkcSAodjJzaSwgdjJzaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsYncgKHY4cWksIHY4cWkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHVucGNrbHdkICh2NGhpLCB2NGhpKQorICAgICB2MnNpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2xkcSAodjJzaSwgdjJzaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YiAodjRoaSwgdjRoaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9wYWNrc3NkdyAodjJzaSwgdjJzaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wYWNrdXN3YiAodjRoaSwgdjRoaSkKKyAgICAgCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHNsbHcgKHY0aGksIHY0aGkpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcHNsbGQgKHYyc2ksIHYyc2kpCisgICAgIHYxZGkgX19idWlsdGluX2lhMzJfcHNsbHEgKHYxZGksIHYxZGkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHNybHcgKHY0aGksIHY0aGkpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcHNybGQgKHYyc2ksIHYyc2kpCisgICAgIHYxZGkgX19idWlsdGluX2lhMzJfcHNybHEgKHYxZGksIHYxZGkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHNyYXcgKHY0aGksIHY0aGkpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcHNyYWQgKHYyc2ksIHYyc2kpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHNsbHdpICh2NGhpLCBpbnQpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcHNsbGRpICh2MnNpLCBpbnQpCisgICAgIHYxZGkgX19idWlsdGluX2lhMzJfcHNsbHFpICh2MWRpLCBpbnQpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHNybHdpICh2NGhpLCBpbnQpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcHNybGRpICh2MnNpLCBpbnQpCisgICAgIHYxZGkgX19idWlsdGluX2lhMzJfcHNybHFpICh2MWRpLCBpbnQpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcHNyYXdpICh2NGhpLCBpbnQpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcHNyYWRpICh2MnNpLCBpbnQpCisgICAgIAorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIG1hZGUgYXZhaWxhYmxlIGVpdGhlciB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNzZTwvc3Bhbj48L3NhbXA+LCBvciB3aXRoIGEgY29tYmluYXRpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW0zZG5vdzwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPWF0aGxvbjwvc3Bhbj48L3NhbXA+LiAgQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUKK2luc3RydWN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUgbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHY0aGkgX19idWlsdGluX2lhMzJfcG11bGh1dyAodjRoaSwgdjRoaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wYXZnYiAodjhxaSwgdjhxaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9wYXZndyAodjRoaSwgdjRoaSkKKyAgICAgdjFkaSBfX2J1aWx0aW5faWEzMl9wc2FkYncgKHY4cWksIHY4cWkpCisgICAgIHY4cWkgX19idWlsdGluX2lhMzJfcG1heHViICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdyAodjRoaSwgdjRoaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wbWludWIgKHY4cWksIHY4cWkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcG1pbnN3ICh2NGhpLCB2NGhpKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGV4dHJ3ICh2NGhpLCBpbnQpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcGluc3J3ICh2NGhpLCBpbnQsIGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Btb3Ztc2tiICh2OHFpKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21hc2ttb3ZxICh2OHFpLCB2OHFpLCBjaGFyICopCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfbW92bnRxIChkaSAqLCBkaSkKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl9zZmVuY2UgKHZvaWQpCis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc2U8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLiAKK0FsbCBvZiB0aGVtIGdlbmVyYXRlIHRoZSBtYWNoaW5lIGluc3RydWN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUgbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCBfX2J1aWx0aW5faWEzMl9jb21pZXEgKHY0c2YsIHY0c2YpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9jb21pbmVxICh2NHNmLCB2NHNmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfY29taWx0ICh2NHNmLCB2NHNmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfY29taWxlICh2NHNmLCB2NHNmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfY29taWd0ICh2NHNmLCB2NHNmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfY29taWdlICh2NHNmLCB2NHNmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdWNvbWllcSAodjRzZiwgdjRzZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Vjb21pbmVxICh2NHNmLCB2NHNmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdWNvbWlsdCAodjRzZiwgdjRzZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Vjb21pbGUgKHY0c2YsIHY0c2YpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl91Y29taWd0ICh2NHNmLCB2NHNmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdWNvbWlnZSAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9hZGRwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9zdWJwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9tdWxwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9kaXZwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9hZGRzcyAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9zdWJzcyAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9tdWxzcyAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9kaXZzcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBlcXBzICh2NHNmLCB2NHNmKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2NtcGx0cHMgKHY0c2YsIHY0c2YpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY21wbGVwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBndHBzICh2NHNmLCB2NHNmKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2NtcGdlcHMgKHY0c2YsIHY0c2YpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY21wdW5vcmRwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBuZXFwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBubHRwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBubGVwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBuZ3RwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBuZ2VwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBvcmRwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXBlcXNzICh2NHNmLCB2NHNmKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2NtcGx0c3MgKHY0c2YsIHY0c2YpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY21wbGVzcyAodjRzZiwgdjRzZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9jbXB1bm9yZHNzICh2NHNmLCB2NHNmKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2NtcG5lcXNzICh2NHNmLCB2NHNmKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2NtcG5sdHMgKHY0c2YsIHY0c2YpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY21wbmxlc3MgKHY0c2YsIHY0c2YpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY21wb3Jkc3MgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfbWF4cHMgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfbWF4c3MgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfbWlucHMgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfbWluc3MgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfYW5kcHMgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfYW5kbnBzICh2NHNmLCB2NHNmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX29ycHMgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfeG9ycHMgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfbW92c3MgKHY0c2YsIHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfbW92aGxwcyAodjRzZiwgdjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9tb3ZsaHBzICh2NHNmLCB2NHNmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX3VucGNraHBzICh2NHNmLCB2NHNmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX3VucGNrbHBzICh2NHNmLCB2NHNmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2N2dHBpMnBzICh2NHNmLCB2MnNpKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2N2dHNpMnNzICh2NHNmLCBpbnQpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfY3Z0cHMycGkgKHY0c2YpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9jdnRzczJzaSAodjRzZikKKyAgICAgdjJzaSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycGkgKHY0c2YpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9jdnR0c3Myc2kgKHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfcmNwcHMgKHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfcnNxcnRwcyAodjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9zcXJ0cHMgKHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfcmNwc3MgKHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfcnNxcnRzcyAodjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9zcXJ0c3MgKHY0c2YpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfc2h1ZnBzICh2NHNmLCB2NHNmLCBpbnQpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfbW92bnRwcyAoZmxvYXQgKiwgdjRzZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX21vdm1za3BzICh2NHNmKQorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3NlPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+djRzZiBfX2J1aWx0aW5faWEzMl9sb2FkYXBzIChmbG9hdCAqKTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5tb3ZhcHM8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gYXMgYSBsb2FkIGZyb20gbWVtb3J5LiAKKzxicj48ZHQ+PGNvZGU+dm9pZCBfX2J1aWx0aW5faWEzMl9zdG9yZWFwcyAoZmxvYXQgKiwgdjRzZik8L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgPGNvZGU+bW92YXBzPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIGFzIGEgc3RvcmUgdG8gbWVtb3J5LiAKKzxicj48ZHQ+PGNvZGU+djRzZiBfX2J1aWx0aW5faWEzMl9sb2FkdXBzIChmbG9hdCAqKTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5tb3Z1cHM8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gYXMgYSBsb2FkIGZyb20gbWVtb3J5LiAKKzxicj48ZHQ+PGNvZGU+dm9pZCBfX2J1aWx0aW5faWEzMl9zdG9yZXVwcyAoZmxvYXQgKiwgdjRzZik8L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgPGNvZGU+bW92dXBzPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIGFzIGEgc3RvcmUgdG8gbWVtb3J5LiAKKzxicj48ZHQ+PGNvZGU+djRzZiBfX2J1aWx0aW5faWEzMl9sb2Fkc3NzIChmbG9hdCAqKTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5tb3ZzczwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiBhcyBhIGxvYWQgZnJvbSBtZW1vcnkuIAorPGJyPjxkdD48Y29kZT52b2lkIF9fYnVpbHRpbl9pYTMyX3N0b3Jlc3MgKGZsb2F0ICosIHY0c2YpPC9jb2RlPjxkZD5HZW5lcmF0ZXMgdGhlIDxjb2RlPm1vdnNzPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIGFzIGEgc3RvcmUgdG8gbWVtb3J5LiAKKzxicj48ZHQ+PGNvZGU+djRzZiBfX2J1aWx0aW5faWEzMl9sb2FkaHBzICh2NHNmLCBjb25zdCB2MnNmICopPC9jb2RlPjxkZD5HZW5lcmF0ZXMgdGhlIDxjb2RlPm1vdmhwczwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiBhcyBhIGxvYWQgZnJvbSBtZW1vcnkuIAorPGJyPjxkdD48Y29kZT52NHNmIF9fYnVpbHRpbl9pYTMyX2xvYWRscHMgKHY0c2YsIGNvbnN0IHYyc2YgKik8L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgPGNvZGU+bW92bHBzPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIGFzIGEgbG9hZCBmcm9tIG1lbW9yeQorPGJyPjxkdD48Y29kZT52b2lkIF9fYnVpbHRpbl9pYTMyX3N0b3JlaHBzICh2MnNmICosIHY0c2YpPC9jb2RlPjxkZD5HZW5lcmF0ZXMgdGhlIDxjb2RlPm1vdmhwczwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiBhcyBhIHN0b3JlIHRvIG1lbW9yeS4gCis8YnI+PGR0Pjxjb2RlPnZvaWQgX19idWlsdGluX2lhMzJfc3RvcmVscHMgKHYyc2YgKiwgdjRzZik8L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgPGNvZGU+bW92bHBzPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uIGFzIGEgc3RvcmUgdG8gbWVtb3J5LiAKKzwvZGw+CisKKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc2UyPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gCitBbGwgb2YgdGhlbSBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQgX19idWlsdGluX2lhMzJfY29taXNkZXEgKHYyZGYsIHYyZGYpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9jb21pc2RsdCAodjJkZiwgdjJkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX2NvbWlzZGxlICh2MmRmLCB2MmRmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfY29taXNkZ3QgKHYyZGYsIHYyZGYpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9jb21pc2RnZSAodjJkZiwgdjJkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX2NvbWlzZG5lcSAodjJkZiwgdjJkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RlcSAodjJkZiwgdjJkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RsdCAodjJkZiwgdjJkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RsZSAodjJkZiwgdjJkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RndCAodjJkZiwgdjJkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RnZSAodjJkZiwgdjJkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Vjb21pc2RuZXEgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wZXFwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jbXBsdHBkICh2MmRmLCB2MmRmKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2NtcGxlcGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wZ3RwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jbXBnZXBkICh2MmRmLCB2MmRmKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2NtcHVub3JkcGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wbmVxcGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wbmx0cGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wbmxlcGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wbmd0cGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wbmdlcGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wb3JkcGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wZXFzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jbXBsdHNkICh2MmRmLCB2MmRmKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2NtcGxlc2QgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wdW5vcmRzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jbXBuZXFzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jbXBubHRzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jbXBubGVzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jbXBvcmRzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wYWRkcSAodjJkaSwgdjJkaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wc3VicSAodjJkaSwgdjJkaSkKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9hZGRwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9zdWJwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9tdWxwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9kaXZwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9hZGRzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9zdWJzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9tdWxzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9kaXZzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9taW5wZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9tYXhwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9taW5zZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9tYXhzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9hbmRwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9hbmRucGQgKHYyZGYsIHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfb3JwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl94b3JwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9tb3ZzZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl91bnBja2hwZCAodjJkZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl91bnBja2xwZCAodjJkZiwgdjJkZikKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfcGFkZGIxMjggKHYxNnFpLCB2MTZxaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wYWRkdzEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wYWRkZDEyOCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wYWRkcTEyOCAodjJkaSwgdjJkaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfcHN1YmIxMjggKHYxNnFpLCB2MTZxaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wc3VidzEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wc3ViZDEyOCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wc3VicTEyOCAodjJkaSwgdjJkaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wbXVsbHcxMjggKHY4aGksIHY4aGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcG11bGh3MTI4ICh2OGhpLCB2OGhpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3BhbmQxMjggKHYyZGksIHYyZGkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcGFuZG4xMjggKHYyZGksIHYyZGkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcG9yMTI4ICh2MmRpLCB2MmRpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3B4b3IxMjggKHYyZGksIHYyZGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3BhdmdiMTI4ICh2MTZxaSwgdjE2cWkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcGF2Z3cxMjggKHY4aGksIHY4aGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3BjbXBlcWIxMjggKHYxNnFpLCB2MTZxaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wY21wZXF3MTI4ICh2OGhpLCB2OGhpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BjbXBlcWQxMjggKHY0c2ksIHY0c2kpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3BjbXBndGIxMjggKHYxNnFpLCB2MTZxaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wY21wZ3R3MTI4ICh2OGhpLCB2OGhpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BjbXBndGQxMjggKHY0c2ksIHY0c2kpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3BtYXh1YjEyOCAodjE2cWksIHYxNnFpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3BtYXhzdzEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfcG1pbnViMTI4ICh2MTZxaSwgdjE2cWkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcG1pbnN3MTI4ICh2OGhpLCB2OGhpKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl9wdW5wY2toYncxMjggKHYxNnFpLCB2MTZxaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wdW5wY2tod2QxMjggKHY4aGksIHY4aGkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfcHVucGNraGRxMTI4ICh2NHNpLCB2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2hxZHExMjggKHYyZGksIHYyZGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2xidzEyOCAodjE2cWksIHYxNnFpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsZHExMjggKHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcHVucGNrbHFkcTEyOCAodjJkaSwgdjJkaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfcGFja3Nzd2IxMjggKHY4aGksIHY4aGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcGFja3NzZHcxMjggKHY0c2ksIHY0c2kpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3BhY2t1c3diMTI4ICh2OGhpLCB2OGhpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3BtdWxodXcxMjggKHY4aGksIHY4aGkpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfbWFza21vdmRxdSAodjE2cWksIHYxNnFpKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2xvYWR1cGQgKGRvdWJsZSAqKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBkIChkb3VibGUgKiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9sb2FkaHBkICh2MmRmLCBkb3VibGUgY29uc3QgKikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9sb2FkbHBkICh2MmRmLCBkb3VibGUgY29uc3QgKikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX21vdm1za3BkICh2MmRmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcG1vdm1za2IxMjggKHYxNnFpKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21vdm50aSAoaW50ICosIGludCkKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl9tb3ZudGk2NCAobG9uZyBsb25nIGludCAqLCBsb25nIGxvbmcgaW50KQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21vdm50cGQgKGRvdWJsZSAqLCB2MmRmKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21vdm50ZHEgKHYyZGYgKiwgdjJkZikKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wc2h1ZmQgKHY0c2ksIGludCkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wc2h1Zmx3ICh2OGhpLCBpbnQpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcHNodWZodyAodjhoaSwgaW50KQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3BzYWRidzEyOCAodjE2cWksIHYxNnFpKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX3NxcnRwZCAodjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9zcXJ0c2QgKHYyZGYpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfc2h1ZnBkICh2MmRmLCB2MmRmLCBpbnQpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQgKHY0c2kpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfY3Z0ZHEycHMgKHY0c2kpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY3Z0cGQyZHEgKHYyZGYpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfY3Z0cGQycGkgKHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfY3Z0cGQycHMgKHYyZGYpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxICh2MmRmKQorICAgICB2MnNpIF9fYnVpbHRpbl9pYTMyX2N2dHRwZDJwaSAodjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jdnRwaTJwZCAodjJzaSkKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX2N2dHNkMnNpICh2MmRmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfY3Z0dHNkMnNpICh2MmRmKQorICAgICBsb25nIGxvbmcgX19idWlsdGluX2lhMzJfY3Z0c2Qyc2k2NCAodjJkZikKKyAgICAgbG9uZyBsb25nIF9fYnVpbHRpbl9pYTMyX2N2dHRzZDJzaTY0ICh2MmRmKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMmRxICh2NHNmKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBkICh2NHNmKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcSAodjRzZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jdnRzaTJzZCAodjJkZiwgaW50KQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2N2dHNpNjQyc2QgKHYyZGYsIGxvbmcgbG9uZykKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9jdnRzZDJzcyAodjRzZiwgdjJkZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9jdnRzczJzZCAodjJkZiwgdjRzZikKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl9jbGZsdXNoIChjb25zdCB2b2lkICopCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfbGZlbmNlICh2b2lkKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21mZW5jZSAodm9pZCkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfbG9hZGRxdSAoY29uc3QgY2hhciAqKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1IChjaGFyICosIHYxNnFpKQorICAgICB2MWRpIF9fYnVpbHRpbl9pYTMyX3BtdWx1ZHEgKHYyc2ksIHYyc2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcG11bHVkcTEyOCAodjRzaSwgdjRzaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wc2xsdzEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wc2xsZDEyOCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wc2xscTEyOCAodjJkaSwgdjJkaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wc3JsdzEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wc3JsZDEyOCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wc3JscTEyOCAodjJkaSwgdjJkaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wc3JhdzEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wc3JhZDEyOCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wc2xsZHFpMTI4ICh2MmRpLCBpbnQpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcHNsbHdpMTI4ICh2OGhpLCBpbnQpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfcHNsbGRpMTI4ICh2NHNpLCBpbnQpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcHNsbHFpMTI4ICh2MmRpLCBpbnQpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcHNybGRxaTEyOCAodjJkaSwgaW50KQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3Bzcmx3aTEyOCAodjhoaSwgaW50KQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BzcmxkaTEyOCAodjRzaSwgaW50KQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3BzcmxxaTEyOCAodjJkaSwgaW50KQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3BzcmF3aTEyOCAodjhoaSwgaW50KQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BzcmFkaTEyOCAodjRzaSwgaW50KQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BtYWRkd2QxMjggKHY4aGksIHY4aGkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfbW92cTEyOCAodjJkaSkKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNzZTM8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLiAKK0FsbCBvZiB0aGVtIGdlbmVyYXRlIHRoZSBtYWNoaW5lIGluc3RydWN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUgbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHYyZGYgX19idWlsdGluX2lhMzJfYWRkc3VicGQgKHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfYWRkc3VicHMgKHY0c2YsIHY0c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfaGFkZHBkICh2MmRmLCB2MmRmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2hhZGRwcyAodjRzZiwgdjRzZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9oc3VicGQgKHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfaHN1YnBzICh2NHNmLCB2NHNmKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl9sZGRxdSAoY2hhciBjb25zdCAqKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21vbml0b3IgKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfbW92ZGR1cCAodjJkZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9tb3ZzaGR1cCAodjRzZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9tb3ZzbGR1cCAodjRzZikKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl9td2FpdCAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc2UzPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+djJkZiBfX2J1aWx0aW5faWEzMl9sb2FkZGR1cCAoZG91YmxlIGNvbnN0ICopPC9jb2RlPjxkZD5HZW5lcmF0ZXMgdGhlIDxjb2RlPm1vdmRkdXA8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gYXMgYSBsb2FkIGZyb20gbWVtb3J5LiAKKzwvZGw+CisKKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc3NlMzwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuIAorQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lCit3aXRoIE1NWCByZWdpc3RlcnMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2MnNpIF9fYnVpbHRpbl9pYTMyX3BoYWRkZCAodjJzaSwgdjJzaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9waGFkZHcgKHY0aGksIHY0aGkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcGhhZGRzdyAodjRoaSwgdjRoaSkKKyAgICAgdjJzaSBfX2J1aWx0aW5faWEzMl9waHN1YmQgKHYyc2ksIHYyc2kpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcGhzdWJ3ICh2NGhpLCB2NGhpKQorICAgICB2NGhpIF9fYnVpbHRpbl9pYTMyX3Boc3Vic3cgKHY0aGksIHY0aGkpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3ICh2OHFpLCB2OHFpKQorICAgICB2NGhpIF9fYnVpbHRpbl9pYTMyX3BtdWxocnN3ICh2NGhpLCB2NGhpKQorICAgICB2OHFpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYiAodjhxaSwgdjhxaSkKKyAgICAgdjhxaSBfX2J1aWx0aW5faWEzMl9wc2lnbmIgKHY4cWksIHY4cWkpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcHNpZ25kICh2MnNpLCB2MnNpKQorICAgICB2NGhpIF9fYnVpbHRpbl9pYTMyX3BzaWdudyAodjRoaSwgdjRoaSkKKyAgICAgdjFkaSBfX2J1aWx0aW5faWEzMl9wYWxpZ25yICh2MWRpLCB2MWRpLCBpbnQpCisgICAgIHY4cWkgX19idWlsdGluX2lhMzJfcGFic2IgKHY4cWkpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcGFic2QgKHYyc2kpCisgICAgIHY0aGkgX19idWlsdGluX2lhMzJfcGFic3cgKHY0aGkpCis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc3NlMzwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuIAorQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lCit3aXRoIFNTRSByZWdpc3RlcnMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BoYWRkZDEyOCAodjRzaSwgdjRzaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9waGFkZHcxMjggKHY4aGksIHY4aGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcGhhZGRzdzEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9waHN1YmQxMjggKHY0c2ksIHY0c2kpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcGhzdWJ3MTI4ICh2OGhpLCB2OGhpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3Boc3Vic3cxMjggKHY4aGksIHY4aGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcG1hZGR1YnN3MTI4ICh2MTZxaSwgdjE2cWkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcG11bGhyc3cxMjggKHY4aGksIHY4aGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjEyOCAodjE2cWksIHYxNnFpKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl9wc2lnbmIxMjggKHYxNnFpLCB2MTZxaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wc2lnbmQxMjggKHY0c2ksIHY0c2kpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcHNpZ253MTI4ICh2OGhpLCB2OGhpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3BhbGlnbnIxMjggKHYyZGksIHYyZGksIGludCkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfcGFic2IxMjggKHYxNnFpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BhYnNkMTI4ICh2NHNpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3BhYnN3MTI4ICh2OGhpKQorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3NlNC4xPC9zcGFuPjwvc2FtcD4gaXMKK3VzZWQuICBBbGwgb2YgdGhlbSBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhlCituYW1lLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9ibGVuZHBkICh2MmRmLCB2MmRmLCBjb25zdCBpbnQpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfYmxlbmRwcyAodjRzZiwgdjRzZiwgY29uc3QgaW50KQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2JsZW5kdnBkICh2MmRmLCB2MmRmLCB2MmRmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2JsZW5kdnBzICh2NHNmLCB2NHNmLCB2NHNmKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2RwcGQgKHYyZGYsIHYyZGYsIGNvbnN0IGludCkKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9kcHBzICh2NHNmLCB2NHNmLCBjb25zdCBpbnQpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfaW5zZXJ0cHMxMjggKHY0c2YsIHY0c2YsIGNvbnN0IGludCkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9tb3ZudGRxYSAodjJkaSAqKTsKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfbXBzYWRidzEyOCAodjE2cWksIHYxNnFpLCBjb25zdCBpbnQpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcGFja3VzZHcxMjggKHY0c2ksIHY0c2kpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3BibGVuZHZiMTI4ICh2MTZxaSwgdjE2cWksIHYxNnFpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3BibGVuZHcxMjggKHY4aGksIHY4aGksIGNvbnN0IGludCkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wY21wZXFxICh2MmRpLCB2MmRpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3BobWlucG9zdXcxMjggKHY4aGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3BtYXhzYjEyOCAodjE2cWksIHYxNnFpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BtYXhzZDEyOCAodjRzaSwgdjRzaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wbWF4dWQxMjggKHY0c2ksIHY0c2kpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfcG1heHV3MTI4ICh2OGhpLCB2OGhpKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl9wbWluc2IxMjggKHYxNnFpLCB2MTZxaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wbWluc2QxMjggKHY0c2ksIHY0c2kpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfcG1pbnVkMTI4ICh2NHNpLCB2NHNpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3BtaW51dzEyOCAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wbW92c3hiZDEyOCAodjE2cWkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcG1vdnN4YnExMjggKHYxNnFpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJ3MTI4ICh2MTZxaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wbW92c3hkcTEyOCAodjRzaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wbW92c3h3ZDEyOCAodjhoaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wbW92c3h3cTEyOCAodjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wbW92enhiZDEyOCAodjE2cWkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcG1vdnp4YnExMjggKHYxNnFpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJ3MTI4ICh2MTZxaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wbW92enhkcTEyOCAodjRzaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wbW92enh3ZDEyOCAodjhoaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wbW92enh3cTEyOCAodjhoaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wbXVsZHExMjggKHY0c2ksIHY0c2kpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfcG11bGxkMTI4ICh2NHNpLCB2NHNpKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcHRlc3RjMTI4ICh2MmRpLCB2MmRpKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcHRlc3RuemMxMjggKHYyZGksIHYyZGkpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9wdGVzdHoxMjggKHYyZGksIHYyZGkpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfcm91bmRwZCAodjJkZiwgY29uc3QgaW50KQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX3JvdW5kcHMgKHY0c2YsIGNvbnN0IGludCkKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9yb3VuZHNkICh2MmRmLCB2MmRmLCBjb25zdCBpbnQpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfcm91bmRzcyAodjRzZiwgdjRzZiwgY29uc3QgaW50KQorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3NlNC4xPC9zcGFuPjwvc2FtcD4gaXMKK3VzZWQuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnY0c2YgX19idWlsdGluX2lhMzJfdmVjX3NldF92NHNmICh2NHNmLCBmbG9hdCwgY29uc3QgaW50KTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5pbnNlcnRwczwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbi4gCis8YnI+PGR0Pjxjb2RlPmludCBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3YxNnFpICh2MTZxaSwgY29uc3QgaW50KTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5wZXh0cmI8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24uIAorPGJyPjxkdD48Y29kZT52MTZxaSBfX2J1aWx0aW5faWEzMl92ZWNfc2V0X3YxNnFpICh2MTZxaSwgaW50LCBjb25zdCBpbnQpPC9jb2RlPjxkZD5HZW5lcmF0ZXMgdGhlIDxjb2RlPnBpbnNyYjwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbi4gCis8YnI+PGR0Pjxjb2RlPnY0c2kgX19idWlsdGluX2lhMzJfdmVjX3NldF92NHNpICh2NHNpLCBpbnQsIGNvbnN0IGludCk8L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgPGNvZGU+cGluc3JkPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uLiAKKzxicj48ZHQ+PGNvZGU+djJkaSBfX2J1aWx0aW5faWEzMl92ZWNfc2V0X3YyZGkgKHYyZGksIGxvbmcgbG9uZywgY29uc3QgaW50KTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5waW5zcnE8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24gaW4gNjRiaXQgbW9kZS4gCis8L2RsPgorCisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGNoYW5nZWQgdG8gZ2VuZXJhdGUgbmV3IFNTRTQuMQoraW5zdHJ1Y3Rpb25zIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc2U0LjE8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5mbG9hdCBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3Y0c2YgKHY0c2YsIGNvbnN0IGludCk8L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgPGNvZGU+ZXh0cmFjdHBzPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uLiAKKzxicj48ZHQ+PGNvZGU+aW50IF9fYnVpbHRpbl9pYTMyX3ZlY19leHRfdjRzaSAodjRzaSwgY29uc3QgaW50KTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5wZXh0cmQ8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24uIAorPGJyPjxkdD48Y29kZT5sb25nIGxvbmcgX19idWlsdGluX2lhMzJfdmVjX2V4dF92MmRpICh2MmRpLCBjb25zdCBpbnQpPC9jb2RlPjxkZD5HZW5lcmF0ZXMgdGhlIDxjb2RlPnBleHRycTwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiBpbiA2NGJpdCBtb2RlLiAKKzwvZGw+CisKKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc2U0LjI8L3NwYW4+PC9zYW1wPiBpcwordXNlZC4gIEFsbCBvZiB0aGVtIGdlbmVyYXRlIHRoZSBtYWNoaW5lIGluc3RydWN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUKK25hbWUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl9wY21wZXN0cm0xMjggKHYxNnFpLCBpbnQsIHYxNnFpLCBpbnQsIGNvbnN0IGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3BjbXBlc3RyaTEyOCAodjE2cWksIGludCwgdjE2cWksIGludCwgY29uc3QgaW50KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGNtcGVzdHJpYTEyOCAodjE2cWksIGludCwgdjE2cWksIGludCwgY29uc3QgaW50KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGNtcGVzdHJpYzEyOCAodjE2cWksIGludCwgdjE2cWksIGludCwgY29uc3QgaW50KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGNtcGVzdHJpbzEyOCAodjE2cWksIGludCwgdjE2cWksIGludCwgY29uc3QgaW50KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGNtcGVzdHJpczEyOCAodjE2cWksIGludCwgdjE2cWksIGludCwgY29uc3QgaW50KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGNtcGVzdHJpejEyOCAodjE2cWksIGludCwgdjE2cWksIGludCwgY29uc3QgaW50KQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl9wY21waXN0cm0xMjggKHYxNnFpLCB2MTZxaSwgY29uc3QgaW50KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGNtcGlzdHJpMTI4ICh2MTZxaSwgdjE2cWksIGNvbnN0IGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3BjbXBpc3RyaWExMjggKHYxNnFpLCB2MTZxaSwgY29uc3QgaW50KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGNtcGlzdHJpYzEyOCAodjE2cWksIHYxNnFpLCBjb25zdCBpbnQpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9wY21waXN0cmlvMTI4ICh2MTZxaSwgdjE2cWksIGNvbnN0IGludCkKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3BjbXBpc3RyaXMxMjggKHYxNnFpLCB2MTZxaSwgY29uc3QgaW50KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcGNtcGlzdHJpejEyOCAodjE2cWksIHYxNnFpLCBjb25zdCBpbnQpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfcGNtcGd0cSAodjJkaSwgdjJkaSkKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNzZTQuMjwvc3Bhbj48L3NhbXA+IGlzCit1c2VkLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT51bnNpZ25lZCBpbnQgX19idWlsdGluX2lhMzJfY3JjMzJxaSAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBjaGFyKTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5jcmMzMmI8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24uIAorPGJyPjxkdD48Y29kZT51bnNpZ25lZCBpbnQgX19idWlsdGluX2lhMzJfY3JjMzJoaSAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBzaG9ydCk8L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgPGNvZGU+Y3JjMzJ3PC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uLiAKKzxicj48ZHQ+PGNvZGU+dW5zaWduZWQgaW50IF9fYnVpbHRpbl9pYTMyX2NyYzMyc2kgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5jcmMzMmw8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24uIAorPGJyPjxkdD48Y29kZT51bnNpZ25lZCBsb25nIGxvbmcgX19idWlsdGluX2lhMzJfY3JjMzJkaSAodW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpPC9jb2RlPjxkZD5HZW5lcmF0ZXMgdGhlIDxjb2RlPmNyYzMycTwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbi4gCis8L2RsPgorCisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGNoYW5nZWQgdG8gZ2VuZXJhdGUgbmV3IFNTRTQuMgoraW5zdHJ1Y3Rpb25zIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zc2U0LjI8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5pbnQgX19idWlsdGluX3BvcGNvdW50ICh1bnNpZ25lZCBpbnQpPC9jb2RlPjxkZD5HZW5lcmF0ZXMgdGhlIDxjb2RlPnBvcGNudGw8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24uIAorPGJyPjxkdD48Y29kZT5pbnQgX19idWlsdGluX3BvcGNvdW50bCAodW5zaWduZWQgbG9uZyk8L2NvZGU+PGRkPkdlbmVyYXRlcyB0aGUgPGNvZGU+cG9wY250bDwvY29kZT4gb3IgPGNvZGU+cG9wY250cTwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbiwKK2RlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiA8Y29kZT51bnNpZ25lZCBsb25nPC9jb2RlPi4gCis8YnI+PGR0Pjxjb2RlPmludCBfX2J1aWx0aW5fcG9wY291bnRsbCAodW5zaWduZWQgbG9uZyBsb25nKTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5wb3BjbnRxPC9jb2RlPiBtYWNoaW5lIGluc3RydWN0aW9uLiAKKzwvZGw+CisKKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hdng8L3NwYW4+PC9zYW1wPiBpcwordXNlZC4gQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZQorbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHY0ZGYgX19idWlsdGluX2lhMzJfYWRkcGQyNTYgKHY0ZGYsdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9hZGRwczI1NiAodjhzZix2OHNmKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX2FkZHN1YnBkMjU2ICh2NGRmLHY0ZGYpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfYWRkc3VicHMyNTYgKHY4c2YsdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9hbmRucGQyNTYgKHY0ZGYsdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9hbmRucHMyNTYgKHY4c2YsdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9hbmRwZDI1NiAodjRkZix2NGRmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX2FuZHBzMjU2ICh2OHNmLHY4c2YpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfYmxlbmRwZDI1NiAodjRkZix2NGRmLGludCkKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9ibGVuZHBzMjU2ICh2OHNmLHY4c2YsaW50KQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX2JsZW5kdnBkMjU2ICh2NGRmLHY0ZGYsdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9ibGVuZHZwczI1NiAodjhzZix2OHNmLHY4c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wcGQgKHYyZGYsdjJkZixpbnQpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfY21wcGQyNTYgKHY0ZGYsdjRkZixpbnQpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfY21wcHMgKHY0c2YsdjRzZixpbnQpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfY21wcHMyNTYgKHY4c2YsdjhzZixpbnQpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfY21wc2QgKHYyZGYsdjJkZixpbnQpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfY21wc3MgKHY0c2YsdjRzZixpbnQpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfY3Z0ZHEycGQyNTYgKHY0c2kpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfY3Z0ZHEycHMyNTYgKHY4c2kpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY3Z0cGQyZHEyNTYgKHY0ZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfY3Z0cGQycHMyNTYgKHY0ZGYpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfY3Z0cHMyZHEyNTYgKHY4c2YpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfY3Z0cHMycGQyNTYgKHY0c2YpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfY3Z0dHBkMmRxMjU2ICh2NGRmKQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcTI1NiAodjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9kaXZwZDI1NiAodjRkZix2NGRmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX2RpdnBzMjU2ICh2OHNmLHY4c2YpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfZHBwczI1NiAodjhzZix2OHNmLGludCkKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9oYWRkcGQyNTYgKHY0ZGYsdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9oYWRkcHMyNTYgKHY4c2YsdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9oc3VicGQyNTYgKHY0ZGYsdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9oc3VicHMyNTYgKHY4c2YsdjhzZikKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfbGRkcXUyNTYgKHBjY2hhcikKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfbG9hZGRxdTI1NiAocGNjaGFyKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX2xvYWR1cGQyNTYgKHBjZG91YmxlKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX2xvYWR1cHMyNTYgKHBjZmxvYXQpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfbWFza2xvYWRwZCAocGN2MmRmLHYyZGYpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfbWFza2xvYWRwZDI1NiAocGN2NGRmLHY0ZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfbWFza2xvYWRwcyAocGN2NHNmLHY0c2YpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfbWFza2xvYWRwczI1NiAocGN2OHNmLHY4c2YpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcGQgKHB2MmRmLHYyZGYsdjJkZikKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVwZDI1NiAocHY0ZGYsdjRkZix2NGRmKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZXBzIChwdjRzZix2NHNmLHY0c2YpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcHMyNTYgKHB2OHNmLHY4c2YsdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9tYXhwZDI1NiAodjRkZix2NGRmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX21heHBzMjU2ICh2OHNmLHY4c2YpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfbWlucGQyNTYgKHY0ZGYsdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9taW5wczI1NiAodjhzZix2OHNmKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX21vdmRkdXAyNTYgKHY0ZGYpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9tb3Ztc2twZDI1NiAodjRkZikKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX21vdm1za3BzMjU2ICh2OHNmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX21vdnNoZHVwMjU2ICh2OHNmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX21vdnNsZHVwMjU2ICh2OHNmKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX211bHBkMjU2ICh2NGRmLHY0ZGYpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfbXVscHMyNTYgKHY4c2YsdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9vcnBkMjU2ICh2NGRmLHY0ZGYpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfb3JwczI1NiAodjhzZix2OHNmKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX3BkX3BkMjU2ICh2NGRmKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX3BkMjU2X3BkICh2MmRmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX3BzX3BzMjU2ICh2OHNmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX3BzMjU2X3BzICh2NHNmKQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcHRlc3RjMjU2ICh2NGRpLHY0ZGkscHRlc3QpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl9wdGVzdG56YzI1NiAodjRkaSx2NGRpLHB0ZXN0KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfcHRlc3R6MjU2ICh2NGRpLHY0ZGkscHRlc3QpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfcmNwcHMyNTYgKHY4c2YpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfcm91bmRwZDI1NiAodjRkZixpbnQpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfcm91bmRwczI1NiAodjhzZixpbnQpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfcnNxcnRwc19ucjI1NiAodjhzZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9yc3FydHBzMjU2ICh2OHNmKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX3NodWZwZDI1NiAodjRkZix2NGRmLGludCkKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9zaHVmcHMyNTYgKHY4c2YsdjhzZixpbnQpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfc2lfc2kyNTYgKHY4c2kpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfc2kyNTZfc2kgKHY0c2kpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfc3FydHBkMjU2ICh2NGRmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX3NxcnRwc19ucjI1NiAodjhzZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9zcXJ0cHMyNTYgKHY4c2YpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfc3RvcmVkcXUyNTYgKHBjaGFyLHYzMnFpKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX3N0b3JldXBkMjU2IChwZG91YmxlLHY0ZGYpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfc3RvcmV1cHMyNTYgKHBmbG9hdCx2OHNmKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX3N1YnBkMjU2ICh2NGRmLHY0ZGYpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfc3VicHMyNTYgKHY4c2YsdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl91bnBja2hwZDI1NiAodjRkZix2NGRmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX3VucGNraHBzMjU2ICh2OHNmLHY4c2YpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfdW5wY2tscGQyNTYgKHY0ZGYsdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl91bnBja2xwczI1NiAodjhzZix2OHNmKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX3Zicm9hZGNhc3RmMTI4X3BkMjU2IChwY3YyZGYpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfdmJyb2FkY2FzdGYxMjhfcHMyNTYgKHBjdjRzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl92YnJvYWRjYXN0c2QyNTYgKHBjZG91YmxlKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX3Zicm9hZGNhc3RzcyAocGNmbG9hdCkKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl92YnJvYWRjYXN0c3MyNTYgKHBjZmxvYXQpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfdmV4dHJhY3RmMTI4X3BkMjU2ICh2NGRmLGludCkKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl92ZXh0cmFjdGYxMjhfcHMyNTYgKHY4c2YsaW50KQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3ZleHRyYWN0ZjEyOF9zaTI1NiAodjhzaSxpbnQpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfdmluc2VydGYxMjhfcGQyNTYgKHY0ZGYsdjJkZixpbnQpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfdmluc2VydGYxMjhfcHMyNTYgKHY4c2YsdjRzZixpbnQpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfdmluc2VydGYxMjhfc2kyNTYgKHY4c2ksdjRzaSxpbnQpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfdnBlcm0yZjEyOF9wZDI1NiAodjRkZix2NGRmLGludCkKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl92cGVybTJmMTI4X3BzMjU2ICh2OHNmLHY4c2YsaW50KQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX3ZwZXJtMmYxMjhfc2kyNTYgKHY4c2ksdjhzaSxpbnQpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfdnBlcm1pbDJwZCAodjJkZix2MmRmLHYyZGksaW50KQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWwycGQyNTYgKHY0ZGYsdjRkZix2NGRpLGludCkKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl92cGVybWlsMnBzICh2NHNmLHY0c2YsdjRzaSxpbnQpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfdnBlcm1pbDJwczI1NiAodjhzZix2OHNmLHY4c2ksaW50KQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWxwZCAodjJkZixpbnQpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfdnBlcm1pbHBkMjU2ICh2NGRmLGludCkKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl92cGVybWlscHMgKHY0c2YsaW50KQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX3ZwZXJtaWxwczI1NiAodjhzZixpbnQpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkICh2MmRmLHYyZGkpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBkMjU2ICh2NGRmLHY0ZGkpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzICh2NHNmLHY0c2kpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfdnBlcm1pbHZhcnBzMjU2ICh2OHNmLHY4c2kpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl92dGVzdGNwZCAodjJkZix2MmRmLHB0ZXN0KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdnRlc3RjcGQyNTYgKHY0ZGYsdjRkZixwdGVzdCkKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Z0ZXN0Y3BzICh2NHNmLHY0c2YscHRlc3QpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl92dGVzdGNwczI1NiAodjhzZix2OHNmLHB0ZXN0KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdnRlc3RuemNwZCAodjJkZix2MmRmLHB0ZXN0KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdnRlc3RuemNwZDI1NiAodjRkZix2NGRmLHB0ZXN0KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdnRlc3RuemNwcyAodjRzZix2NHNmLHB0ZXN0KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdnRlc3RuemNwczI1NiAodjhzZix2OHNmLHB0ZXN0KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdnRlc3R6cGQgKHYyZGYsdjJkZixwdGVzdCkKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Z0ZXN0enBkMjU2ICh2NGRmLHY0ZGYscHRlc3QpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl92dGVzdHpwcyAodjRzZix2NHNmLHB0ZXN0KQorICAgICBpbnQgX19idWlsdGluX2lhMzJfdnRlc3R6cHMyNTYgKHY4c2YsdjhzZixwdGVzdCkKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl92emVyb2FsbCAodm9pZCkKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl92emVyb3VwcGVyICh2b2lkKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX3hvcnBkMjU2ICh2NGRmLHY0ZGYpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfeG9ycHMyNTYgKHY4c2YsdjhzZikKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWF2eDI8L3NwYW4+PC9zYW1wPiBpcwordXNlZC4gQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZQorbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX21wc2FkYncyNTYgKHYzMnFpLHYzMnFpLHYzMnFpLGludCkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcGFic2IyNTYgKHYzMnFpKQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wYWJzdzI1NiAodjE2aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcGFic2QyNTYgKHY4c2kpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc2R3MjU2ICh2OHNpLHY4c2kpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3BhY2tzc3diMjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcGFja3VzZHcyNTYgKHY4c2ksdjhzaSkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcGFja3Vzd2IyNTYgKHYxNmhpLHYxNmhpKQorICAgICB2MzJxaSBfX2J1aWx0aW5faWEzMl9wYWRkYjI1NiAodjMycWksdjMycWkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BhZGR3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wYWRkZDI1NiAodjhzaSx2OHNpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3BhZGRxMjU2ICh2NGRpLHY0ZGkpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYjI1NiAodjMycWksdjMycWkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BhZGRzdzI1NiAodjE2aGksdjE2aGkpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3BhZGR1c2IyNTYgKHYzMnFpLHYzMnFpKQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wYWRkdXN3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9wYWxpZ25yMjU2ICh2NGRpLHY0ZGksaW50KQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX2FuZHNpMjU2ICh2NGRpLHY0ZGkpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfYW5kbm90c2kyNTYgKHY0ZGksdjRkaSkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcGF2Z2IyNTYgKHYzMnFpLHYzMnFpKQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wYXZndzI1NiAodjE2aGksdjE2aGkpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3BibGVuZHZiMjU2ICh2MzJxaSx2MzJxaSx2MzJxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcGJsZW5kdzI1NiAodjE2aGksdjE2aGksaW50KQorICAgICB2MzJxaSBfX2J1aWx0aW5faWEzMl9wY21wZXFiMjU2ICh2MzJxaSx2MzJxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcGNtcGVxdzI1NiAodjE2aGksdjE2aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcGNtcGVxZDI1NiAoYzhzaSx2OHNpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3BjbXBlcXEyNTYgKHY0ZGksdjRkaSkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcGNtcGd0YjI1NiAodjMycWksdjMycWkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BjbXBndHcyNTYgKDE2aGksdjE2aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcGNtcGd0ZDI1NiAodjhzaSx2OHNpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3BjbXBndHEyNTYgKHY0ZGksdjRkaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcGhhZGR3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9waGFkZGQyNTYgKHY4c2ksdjhzaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcGhhZGRzdzI1NiAodjE2aGksdjE2aGkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3Boc3VidzI1NiAodjE2aGksdjE2aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcGhzdWJkMjU2ICh2OHNpLHY4c2kpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3Boc3Vic3cyNTYgKHYxNmhpLHYxNmhpKQorICAgICB2MzJxaSBfX2J1aWx0aW5faWEzMl9wbWFkZHVic3cyNTYgKHYzMnFpLHYzMnFpKQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wbWFkZHdkMjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcG1heHNiMjU2ICh2MzJxaSx2MzJxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcG1heHN3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wbWF4c2QyNTYgKHY4c2ksdjhzaSkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcG1heHViMjU2ICh2MzJxaSx2MzJxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcG1heHV3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wbWF4dWQyNTYgKHY4c2ksdjhzaSkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcG1pbnNiMjU2ICh2MzJxaSx2MzJxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcG1pbnN3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wbWluc2QyNTYgKHY4c2ksdjhzaSkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcG1pbnViMjU2ICh2MzJxaSx2MzJxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcG1pbnV3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wbWludWQyNTYgKHY4c2ksdjhzaSkKKyAgICAgaW50IF9fYnVpbHRpbl9pYTMyX3Btb3Ztc2tiMjU2ICh2MzJxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcG1vdnN4YncyNTYgKHYxNnFpKQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX3Btb3ZzeGJkMjU2ICh2MTZxaSkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9wbW92c3hicTI1NiAodjE2cWkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcG1vdnN4d2QyNTYgKHY4aGkpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcG1vdnN4d3EyNTYgKHY4aGkpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcG1vdnN4ZHEyNTYgKHY0c2kpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGJ3MjU2ICh2MTZxaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wbW92enhiZDI1NiAodjE2cWkpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcG1vdnp4YnEyNTYgKHYxNnFpKQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdkMjU2ICh2OGhpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eHdxMjU2ICh2OGhpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3Btb3Z6eGRxMjU2ICh2NHNpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3BtdWxkcTI1NiAodjhzaSx2OHNpKQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wbXVsaHJzdzI1NiAodjE2aGksIHYxNmhpKQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wbXVsaHV3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcG11bGh3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcG11bGx3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wbXVsbGQyNTYgKHY4c2ksdjhzaSkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9wbXVsdWRxMjU2ICh2OHNpLHY4c2kpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcG9yMjU2ICh2NGRpLHY0ZGkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BzYWRidzI1NiAodjMycWksdjMycWkpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3BzaHVmYjI1NiAodjMycWksdjMycWkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcHNodWZkMjU2ICh2OHNpLGludCkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcHNodWZodzI1NiAodjE2aGksaW50KQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wc2h1Zmx3MjU2ICh2MTZoaSxpbnQpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3BzaWduYjI1NiAodjMycWksdjMycWkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BzaWdudzI1NiAodjE2aGksdjE2aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcHNpZ25kMjU2ICh2OHNpLHY4c2kpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcHNsbGRxaTI1NiAodjRkaSxpbnQpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BzbGx3aTI1NiAoMTZoaSxpbnQpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BzbGx3MjU2KHYxNmhpLHY4aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcHNsbGRpMjU2ICh2OHNpLGludCkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wc2xsZDI1Nih2OHNpLHY0c2kpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcHNsbHFpMjU2ICh2NGRpLGludCkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9wc2xscTI1Nih2NGRpLHYyZGkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BzcmF3aTI1NiAodjE2aGksaW50KQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wc3JhdzI1NiAodjE2aGksdjhoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wc3JhZGkyNTYgKHY4c2ksaW50KQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX3BzcmFkMjU2ICh2OHNpLHY0c2kpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcHNybGRxaTI1NiAodjRkaSwgaW50KQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wc3Jsd2kyNTYgKHYxNmhpLGludCkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcHNybHcyNTYgKHYxNmhpLHY4aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcHNybGRpMjU2ICh2OHNpLGludCkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wc3JsZDI1NiAodjhzaSx2NHNpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3BzcmxxaTI1NiAodjRkaSxpbnQpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcHNybHEyNTYodjRkaSx2MmRpKQorICAgICB2MzJxaSBfX2J1aWx0aW5faWEzMl9wc3ViYjI1NiAodjMycWksdjMycWkpCisgICAgIHYzMmhpIF9fYnVpbHRpbl9pYTMyX3BzdWJ3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wc3ViZDI1NiAodjhzaSx2OHNpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3BzdWJxMjU2ICh2NGRpLHY0ZGkpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3BzdWJzYjI1NiAodjMycWksdjMycWkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3BzdWJzdzI1NiAodjE2aGksdjE2aGkpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IyNTYgKHYzMnFpLHYzMnFpKQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl9wc3VidXN3MjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjMycWkgX19idWlsdGluX2lhMzJfcHVucGNraGJ3MjU2ICh2MzJxaSx2MzJxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcHVucGNraHdkMjU2ICh2MTZoaSx2MTZoaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wdW5wY2toZHEyNTYgKHY4c2ksdjhzaSkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9wdW5wY2tocWRxMjU2ICh2NGRpLHY0ZGkpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2xidzI1NiAodjMycWksdjMycWkpCisgICAgIHYxNmhpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDI1NiAodjE2aGksdjE2aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcHVucGNrbGRxMjU2ICh2OHNpLHY4c2kpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcHVucGNrbHFkcTI1NiAodjRkaSx2NGRpKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3B4b3IyNTYgKHY0ZGksdjRkaSkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9tb3ZudGRxYTI1NiAocHY0ZGkpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfdmJyb2FkY2FzdHNzX3BzICh2NHNmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX3Zicm9hZGNhc3Rzc19wczI1NiAodjRzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl92YnJvYWRjYXN0c2RfcGQyNTYgKHYyZGYpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfdmJyb2FkY2FzdHNpMjU2ICh2MmRpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3BibGVuZGQxMjggKHY0c2ksdjRzaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wYmxlbmRkMjU2ICh2OHNpLHY4c2kpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RiMjU2ICh2MTZxaSkKKyAgICAgdjE2aGkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHcyNTYgKHY4aGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdGQyNTYgKHY0c2kpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcGJyb2FkY2FzdHEyNTYgKHYyZGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3Bicm9hZGNhc3RiMTI4ICh2MTZxaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0dzEyOCAodjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0ZDEyOCAodjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9wYnJvYWRjYXN0cTEyOCAodjJkaSkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9wZXJtdmFyc2kyNTYgKHY4c2ksdjhzaSkKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9wZXJtZGYyNTYgKHY0ZGYsaW50KQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX3Blcm12YXJzZjI1NiAodjhzZix2OHNmKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3Blcm1kaTI1NiAodjRkaSxpbnQpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfcGVybXRpMjU2ICh2NGRpLHY0ZGksaW50KQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX2V4dHJhY3QxMjhpMjU2ICh2NGRpLGludCkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9pbnNlcnQxMjhpMjU2ICh2NGRpLHYyZGksaW50KQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX21hc2tsb2FkZDI1NiAocGN2OHNpLHY4c2kpCisgICAgIHY0ZGkgX19idWlsdGluX2lhMzJfbWFza2xvYWRxMjU2IChwY3Y0ZGksdjRkaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9tYXNrbG9hZGQgKHBjdjRzaSx2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX21hc2tsb2FkcSAocGN2MmRpLHYyZGkpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfbWFza3N0b3JlZDI1NiAocHY4c2ksdjhzaSx2OHNpKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21hc2tzdG9yZXEyNTYgKHB2NGRpLHY0ZGksdjRkaSkKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl9tYXNrc3RvcmVkIChwdjRzaSx2NHNpLHY0c2kpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfbWFza3N0b3JlcSAocHYyZGksdjJkaSx2MmRpKQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX3BzbGx2OHNpICh2OHNpLHY4c2kpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfcHNsbHY0c2kgKHY0c2ksdjRzaSkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9wc2xsdjRkaSAodjRkaSx2NGRpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3BzbGx2MmRpICh2MmRpLHYyZGkpCisgICAgIHY4c2kgX19idWlsdGluX2lhMzJfcHNyYXY4c2kgKHY4c2ksdjhzaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl9wc3JhdjRzaSAodjRzaSx2NHNpKQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2OHNpICh2OHNpLHY4c2kpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfcHNybHY0c2kgKHY0c2ksdjRzaSkKKyAgICAgdjRkaSBfX2J1aWx0aW5faWEzMl9wc3JsdjRkaSAodjRkaSx2NGRpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3Bzcmx2MmRpICh2MmRpLHYyZGkpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfZ2F0aGVyc2l2MmRmICh2MmRmLCBwY2RvdWJsZSx2NHNpLHYyZGYsaW50KQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjRkZiAodjRkZiwgcGNkb3VibGUsdjRzaSx2NGRmLGludCkKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9nYXRoZXJkaXYyZGYgKHYyZGYsIHBjZG91YmxlLHYyZGksdjJkZixpbnQpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfZ2F0aGVyZGl2NGRmICh2NGRmLCBwY2RvdWJsZSx2NGRpLHY0ZGYsaW50KQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjRzZiAodjRzZiwgcGNmbG9hdCx2NHNpLHY0c2YsaW50KQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjhzZiAodjhzZiwgcGNmbG9hdCx2OHNpLHY4c2YsaW50KQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjRzZiAodjRzZiwgcGNmbG9hdCx2MmRpLHY0c2YsaW50KQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjRzZjI1NiAodjRzZiwgcGNmbG9hdCx2NGRpLHY0c2YsaW50KQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjJkaSAodjJkaSwgcGNpbnQ2NCx2NHNpLHYyZGksaW50KQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjRkaSAodjRkaSwgcGNpbnQ2NCx2NHNpLHY0ZGksaW50KQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjJkaSAodjJkaSwgcGNpbnQ2NCx2MmRpLHYyZGksaW50KQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjRkaSAodjRkaSwgcGNpbnQ2NCx2NGRpLHY0ZGksaW50KQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2dhdGhlcnNpdjRzaSAodjRzaSwgcGNpbnQsdjRzaSx2NHNpLGludCkKKyAgICAgdjhzaSBfX2J1aWx0aW5faWEzMl9nYXRoZXJzaXY4c2kgKHY4c2ksIHBjaW50LHY4c2ksdjhzaSxpbnQpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfZ2F0aGVyZGl2NHNpICh2NHNpLCBwY2ludCx2MmRpLHY0c2ksaW50KQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX2dhdGhlcmRpdjRzaTI1NiAodjRzaSwgcGNpbnQsdjRkaSx2NHNpLGludCkKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFlczwvc3Bhbj48L3NhbXA+IGlzCit1c2VkLiAgQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZQorbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHYyZGkgX19idWlsdGluX2lhMzJfYWVzZW5jMTI4ICh2MmRpLCB2MmRpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX2Flc2VuY2xhc3QxMjggKHYyZGksIHYyZGkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfYWVzZGVjMTI4ICh2MmRpLCB2MmRpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX2Flc2RlY2xhc3QxMjggKHYyZGksIHYyZGkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfYWVza2V5Z2VuYXNzaXN0MTI4ICh2MmRpLCBjb25zdCBpbnQpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfYWVzaW1jMTI4ICh2MmRpKQorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbiBpcyBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXBjbG11bDwvc3Bhbj48L3NhbXA+IGlzCit1c2VkLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT52MmRpIF9fYnVpbHRpbl9pYTMyX3BjbG11bHFkcTEyOCAodjJkaSwgdjJkaSwgY29uc3QgaW50KTwvY29kZT48ZGQ+R2VuZXJhdGVzIHRoZSA8Y29kZT5wY2xtdWxxZHE8L2NvZGU+IG1hY2hpbmUgaW5zdHJ1Y3Rpb24uIAorPC9kbD4KKworIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb24gaXMgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mc2dzYmFzZTwvc3Bhbj48L3NhbXA+IGlzCit1c2VkLiAgQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZQorbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHVuc2lnbmVkIGludCBfX2J1aWx0aW5faWEzMl9yZGZzYmFzZTMyICh2b2lkKQorICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX19idWlsdGluX2lhMzJfcmRmc2Jhc2U2NCAodm9pZCkKKyAgICAgdW5zaWduZWQgaW50IF9fYnVpbHRpbl9pYTMyX3JkZ3NiYXNlMzIgKHZvaWQpCisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2J1aWx0aW5faWEzMl9yZGdzYmFzZTY0ICh2b2lkKQorICAgICB2b2lkIF93cml0ZWZzYmFzZV91MzIgKHVuc2lnbmVkIGludCkKKyAgICAgdm9pZCBfd3JpdGVmc2Jhc2VfdTY0ICh1bnNpZ25lZCBsb25nIGxvbmcpCisgICAgIHZvaWQgX3dyaXRlZ3NiYXNlX3UzMiAodW5zaWduZWQgaW50KQorICAgICB2b2lkIF93cml0ZWdzYmFzZV91NjQgKHVuc2lnbmVkIGxvbmcgbG9uZykKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb24gaXMgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1yZHJuZDwvc3Bhbj48L3NhbXA+IGlzCit1c2VkLiAgQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZQorbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHVuc2lnbmVkIGludCBfX2J1aWx0aW5faWEzMl9yZHJhbmQxNl9zdGVwICh1bnNpZ25lZCBzaG9ydCAqKQorICAgICB1bnNpZ25lZCBpbnQgX19idWlsdGluX2lhMzJfcmRyYW5kMzJfc3RlcCAodW5zaWduZWQgaW50ICopCisgICAgIHVuc2lnbmVkIGludCBfX2J1aWx0aW5faWEzMl9yZHJhbmQ2NF9zdGVwICh1bnNpZ25lZCBsb25nIGxvbmcgKikKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNzZTRhPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gCitBbGwgb2YgdGhlbSBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21vdm50c2QgKGRvdWJsZSAqLCB2MmRmKQorICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX21vdm50c3MgKGZsb2F0ICosIHY0c2YpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfZXh0cnEgICh2MmRpLCB2MTZxaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl9leHRycWkgKHYyZGksIGNvbnN0IHVuc2lnbmVkIGludCwgY29uc3QgdW5zaWduZWQgaW50KQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX2luc2VydHEgKHYyZGksIHYyZGkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfaW5zZXJ0cWkgKHYyZGksIHYyZGksIGNvbnN0IHVuc2lnbmVkIGludCwgY29uc3QgdW5zaWduZWQgaW50KQorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1teG9wPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX3ZmcmN6cGQgKHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfdmZyY3pwcyAodjRzZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl92ZnJjenNkICh2MmRmLCB2MmRmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX3ZmcmN6c3MgKHY0c2YsIHY0c2YpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfdmZyY3pwZDI1NiAodjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl92ZnJjenBzMjU2ICh2OHNmKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwY21vdiAodjJkaSwgdjJkaSwgdjJkaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGNtb3ZfdjJkaSAodjJkaSwgdjJkaSwgdjJkaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGNtb3ZfdjRzaSAodjRzaSwgdjRzaSwgdjRzaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cGNtb3ZfdjhoaSAodjhoaSwgdjhoaSwgdjhoaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfdnBjbW92X3YxNnFpICh2MTZxaSwgdjE2cWksIHYxNnFpKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX3ZwY21vdl92MmRmICh2MmRmLCB2MmRmLCB2MmRmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX3ZwY21vdl92NHNmICh2NHNmLCB2NHNmLCB2NHNmKQorICAgICB2NGRpIF9fYnVpbHRpbl9pYTMyX3ZwY21vdl92NGRpMjU2ICh2NGRpLCB2NGRpLCB2NGRpKQorICAgICB2OHNpIF9fYnVpbHRpbl9pYTMyX3ZwY21vdl92OHNpMjU2ICh2OHNpLCB2OHNpLCB2OHNpKQorICAgICB2MTZoaSBfX2J1aWx0aW5faWEzMl92cGNtb3ZfdjE2aGkyNTYgKHYxNmhpLCB2MTZoaSwgdjE2aGkpCisgICAgIHYzMnFpIF9fYnVpbHRpbl9pYTMyX3ZwY21vdl92MzJxaTI1NiAodjMycWksIHYzMnFpLCB2MzJxaSkKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl92cGNtb3ZfdjRkZjI1NiAodjRkZiwgdjRkZiwgdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl92cGNtb3ZfdjhzZjI1NiAodjhzZiwgdjhzZiwgdjhzZikKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfdnBjb21lcWIgKHYxNnFpLCB2MTZxaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cGNvbWVxdyAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGNvbWVxZCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGNvbWVxcSAodjJkaSwgdjJkaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfdnBjb21lcXViICh2MTZxaSwgdjE2cWkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBjb21lcXVkICh2NHNpLCB2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZXF1cSAodjJkaSwgdjJkaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cGNvbWVxdXcgKHY4aGksIHY4aGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBjb21lcXcgKHY4aGksIHY4aGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZmFsc2ViICh2MTZxaSwgdjE2cWkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBjb21mYWxzZWQgKHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBjb21mYWxzZXEgKHYyZGksIHYyZGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZmFsc2V1YiAodjE2cWksIHYxNnFpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZmFsc2V1ZCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGNvbWZhbHNldXEgKHYyZGksIHYyZGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBjb21mYWxzZXV3ICh2OGhpLCB2OGhpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZmFsc2V3ICh2OGhpLCB2OGhpKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl92cGNvbWdlYiAodjE2cWksIHYxNnFpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZ2VkICh2NHNpLCB2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZ2VxICh2MmRpLCB2MmRpKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl92cGNvbWdldWIgKHYxNnFpLCB2MTZxaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGNvbWdldWQgKHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBjb21nZXVxICh2MmRpLCB2MmRpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZ2V1dyAodjhoaSwgdjhoaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cGNvbWdldyAodjhoaSwgdjhoaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfdnBjb21ndGIgKHYxNnFpLCB2MTZxaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGNvbWd0ZCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGNvbWd0cSAodjJkaSwgdjJkaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfdnBjb21ndHViICh2MTZxaSwgdjE2cWkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBjb21ndHVkICh2NHNpLCB2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwY29tZ3R1cSAodjJkaSwgdjJkaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cGNvbWd0dXcgKHY4aGksIHY4aGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBjb21ndHcgKHY4aGksIHY4aGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3ZwY29tbGViICh2MTZxaSwgdjE2cWkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBjb21sZWQgKHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBjb21sZXEgKHYyZGksIHYyZGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3ZwY29tbGV1YiAodjE2cWksIHYxNnFpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3ZwY29tbGV1ZCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGNvbWxldXEgKHYyZGksIHYyZGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBjb21sZXV3ICh2OGhpLCB2OGhpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3ZwY29tbGV3ICh2OGhpLCB2OGhpKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl92cGNvbWx0YiAodjE2cWksIHYxNnFpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3ZwY29tbHRkICh2NHNpLCB2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwY29tbHRxICh2MmRpLCB2MmRpKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl92cGNvbWx0dWIgKHYxNnFpLCB2MTZxaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGNvbWx0dWQgKHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBjb21sdHVxICh2MmRpLCB2MmRpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3ZwY29tbHR1dyAodjhoaSwgdjhoaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cGNvbWx0dyAodjhoaSwgdjhoaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfdnBjb21uZWIgKHYxNnFpLCB2MTZxaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGNvbW5lZCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGNvbW5lcSAodjJkaSwgdjJkaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfdnBjb21uZXViICh2MTZxaSwgdjE2cWkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBjb21uZXVkICh2NHNpLCB2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwY29tbmV1cSAodjJkaSwgdjJkaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cGNvbW5ldXcgKHY4aGksIHY4aGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBjb21uZXcgKHY4aGksIHY4aGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3ZwY29tdHJ1ZWIgKHYxNnFpLCB2MTZxaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGNvbXRydWVkICh2NHNpLCB2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwY29tdHJ1ZXEgKHYyZGksIHYyZGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3ZwY29tdHJ1ZXViICh2MTZxaSwgdjE2cWkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBjb210cnVldWQgKHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBjb210cnVldXEgKHYyZGksIHYyZGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBjb210cnVldXcgKHY4aGksIHY4aGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBjb210cnVldyAodjhoaSwgdjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGhhZGRiZCAodjE2cWkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBoYWRkYnEgKHYxNnFpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3ZwaGFkZGJ3ICh2MTZxaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGhhZGRkcSAodjRzaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGhhZGR1YmQgKHYxNnFpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwaGFkZHVicSAodjE2cWkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBoYWRkdWJ3ICh2MTZxaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGhhZGR1ZHEgKHY0c2kpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBoYWRkdXdkICh2OGhpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwaGFkZHV3cSAodjhoaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cGhhZGR3ZCAodjhoaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cGhhZGR3cSAodjhoaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cGhzdWJidyAodjE2cWkpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBoc3ViZHEgKHY0c2kpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBoc3Vid2QgKHY4aGkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBtYWNzZGQgKHY0c2ksIHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBtYWNzZHFoICh2NHNpLCB2NHNpLCB2MmRpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3ZwbWFjc2RxbCAodjRzaSwgdjRzaSwgdjJkaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cG1hY3NzZGQgKHY0c2ksIHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBtYWNzc2RxaCAodjRzaSwgdjRzaSwgdjJkaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cG1hY3NzZHFsICh2NHNpLCB2NHNpLCB2MmRpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3ZwbWFjc3N3ZCAodjhoaSwgdjhoaSwgdjRzaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cG1hY3Nzd3cgKHY4aGksIHY4aGksIHY4aGkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBtYWNzd2QgKHY4aGksIHY4aGksIHY0c2kpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBtYWNzd3cgKHY4aGksIHY4aGksIHY4aGkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnBtYWRjc3N3ZCAodjhoaSwgdjhoaSwgdjRzaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cG1hZGNzd2QgKHY4aGksIHY4aGksIHY0c2kpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3ZwcGVybSAodjE2cWksIHYxNnFpLCB2MTZxaSkKKyAgICAgdjE2cWkgX19idWlsdGluX2lhMzJfdnByb3RiICh2MTZxaSwgdjE2cWkpCisgICAgIHY0c2kgX19idWlsdGluX2lhMzJfdnByb3RkICh2NHNpLCB2NHNpKQorICAgICB2MmRpIF9fYnVpbHRpbl9pYTMyX3Zwcm90cSAodjJkaSwgdjJkaSkKKyAgICAgdjhoaSBfX2J1aWx0aW5faWEzMl92cHJvdHcgKHY4aGksIHY4aGkpCisgICAgIHYxNnFpIF9fYnVpbHRpbl9pYTMyX3Zwc2hhYiAodjE2cWksIHYxNnFpKQorICAgICB2NHNpIF9fYnVpbHRpbl9pYTMyX3Zwc2hhZCAodjRzaSwgdjRzaSkKKyAgICAgdjJkaSBfX2J1aWx0aW5faWEzMl92cHNoYXEgKHYyZGksIHYyZGkpCisgICAgIHY4aGkgX19idWlsdGluX2lhMzJfdnBzaGF3ICh2OGhpLCB2OGhpKQorICAgICB2MTZxaSBfX2J1aWx0aW5faWEzMl92cHNobGIgKHYxNnFpLCB2MTZxaSkKKyAgICAgdjRzaSBfX2J1aWx0aW5faWEzMl92cHNobGQgKHY0c2ksIHY0c2kpCisgICAgIHYyZGkgX19idWlsdGluX2lhMzJfdnBzaGxxICh2MmRpLCB2MmRpKQorICAgICB2OGhpIF9fYnVpbHRpbl9pYTMyX3Zwc2hsdyAodjhoaSwgdjhoaSkKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWZtYTQ8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLiAKK0FsbCBvZiB0aGVtIGdlbmVyYXRlIHRoZSBtYWNoaW5lIGluc3RydWN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUgbmFtZQord2l0aCBNTVggcmVnaXN0ZXJzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9mbWFkZHBkICh2MmRmLCB2MmRmLCB2MmRmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2ZtYWRkcHMgKHY0c2YsIHY0c2YsIHY0c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfZm1hZGRzZCAodjJkZiwgdjJkZiwgdjJkZikKKyAgICAgdjRzZiBfX2J1aWx0aW5faWEzMl9mbWFkZHNzICh2NHNmLCB2NHNmLCB2NHNmKQorICAgICB2MmRmIF9fYnVpbHRpbl9pYTMyX2Ztc3VicGQgKHYyZGYsIHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfZm1zdWJwcyAodjRzZiwgdjRzZiwgdjRzZikKKyAgICAgdjJkZiBfX2J1aWx0aW5faWEzMl9mbXN1YnNkICh2MmRmLCB2MmRmLCB2MmRmKQorICAgICB2NHNmIF9fYnVpbHRpbl9pYTMyX2Ztc3Vic3MgKHY0c2YsIHY0c2YsIHY0c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfZm5tYWRkcGQgKHYyZGYsIHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfZm5tYWRkcHMgKHY0c2YsIHY0c2YsIHY0c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfZm5tYWRkc2QgKHYyZGYsIHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfZm5tYWRkc3MgKHY0c2YsIHY0c2YsIHY0c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfZm5tc3VicGQgKHYyZGYsIHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfZm5tc3VicHMgKHY0c2YsIHY0c2YsIHY0c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfZm5tc3Vic2QgKHYyZGYsIHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfZm5tc3Vic3MgKHY0c2YsIHY0c2YsIHY0c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfZm1hZGRzdWJwZCAgKHYyZGYsIHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfZm1hZGRzdWJwcyAgKHY0c2YsIHY0c2YsIHY0c2YpCisgICAgIHYyZGYgX19idWlsdGluX2lhMzJfZm1zdWJhZGRwZCAgKHYyZGYsIHYyZGYsIHYyZGYpCisgICAgIHY0c2YgX19idWlsdGluX2lhMzJfZm1zdWJhZGRwcyAgKHY0c2YsIHY0c2YsIHY0c2YpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfZm1hZGRwZDI1NiAodjRkZiwgdjRkZiwgdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9mbWFkZHBzMjU2ICh2OHNmLCB2OHNmLCB2OHNmKQorICAgICB2NGRmIF9fYnVpbHRpbl9pYTMyX2Ztc3VicGQyNTYgKHY0ZGYsIHY0ZGYsIHY0ZGYpCisgICAgIHY4c2YgX19idWlsdGluX2lhMzJfZm1zdWJwczI1NiAodjhzZiwgdjhzZiwgdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9mbm1hZGRwZDI1NiAodjRkZiwgdjRkZiwgdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9mbm1hZGRwczI1NiAodjhzZiwgdjhzZiwgdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9mbm1zdWJwZDI1NiAodjRkZiwgdjRkZiwgdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9mbm1zdWJwczI1NiAodjhzZiwgdjhzZiwgdjhzZikKKyAgICAgdjRkZiBfX2J1aWx0aW5faWEzMl9mbWFkZHN1YnBkMjU2ICh2NGRmLCB2NGRmLCB2NGRmKQorICAgICB2OHNmIF9fYnVpbHRpbl9pYTMyX2ZtYWRkc3VicHMyNTYgKHY4c2YsIHY4c2YsIHY4c2YpCisgICAgIHY0ZGYgX19idWlsdGluX2lhMzJfZm1zdWJhZGRwZDI1NiAodjRkZiwgdjRkZiwgdjRkZikKKyAgICAgdjhzZiBfX2J1aWx0aW5faWEzMl9mbXN1YmFkZHBzMjU2ICh2OHNmLCB2OHNmLCB2OHNmKQorICAgICAKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWx3cDwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX2xsd3BjYjE2ICh2b2lkICopOworICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX2xsd3BjYjMyICh2b2lkICopOworICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX2xsd3BjYjY0ICh2b2lkICopOworICAgICB2b2lkICogX19idWlsdGluX2lhMzJfbGx3cGNiMTYgKHZvaWQpOworICAgICB2b2lkICogX19idWlsdGluX2lhMzJfbGx3cGNiMzIgKHZvaWQpOworICAgICB2b2lkICogX19idWlsdGluX2lhMzJfbGx3cGNiNjQgKHZvaWQpOworICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX2x3cHZhbDE2ICh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBzaG9ydCkKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl9sd3B2YWwzMiAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl9sd3B2YWw2NCAodW5zaWduZWQgX19pbnQ2NCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCisgICAgIHVuc2lnbmVkIGNoYXIgX19idWlsdGluX2lhMzJfbHdwaW5zMTYgKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIHNob3J0KQorICAgICB1bnNpZ25lZCBjaGFyIF9fYnVpbHRpbl9pYTMyX2x3cGluczMyICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQorICAgICB1bnNpZ25lZCBjaGFyIF9fYnVpbHRpbl9pYTMyX2x3cGluczY0ICh1bnNpZ25lZCBfX2ludDY0LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWJtaTwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuIAorQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lLgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHVuc2lnbmVkIGludCBfX2J1aWx0aW5faWEzMl9iZXh0cl91MzIodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX19idWlsdGluX2lhMzJfYmV4dHJfdTY0ICh1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZyk7Cis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1ibWkyPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gCitBbGwgb2YgdGhlbSBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUuCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdW5zaWduZWQgaW50IF9iemhpX3UzMiAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpCisgICAgIHVuc2lnbmVkIGludCBfcGRlcF91MzIgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQorICAgICB1bnNpZ25lZCBpbnQgX3BleHRfdTMyICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9iemhpX3U2NCAodW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpCisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfcGRlcF91NjQgKHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nKQorICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX3BleHRfdTY0ICh1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZykKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWx6Y250PC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gCitBbGwgb2YgdGhlbSBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUuCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdW5zaWduZWQgc2hvcnQgX19idWlsdGluX2lhMzJfbHpjbnRfMTYodW5zaWduZWQgc2hvcnQpOworICAgICB1bnNpZ25lZCBpbnQgX19idWlsdGluX2lhMzJfbHpjbnRfdTMyKHVuc2lnbmVkIGludCk7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2J1aWx0aW5faWEzMl9semNudF91NjQgKHVuc2lnbmVkIGxvbmcgbG9uZyk7Cis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10Ym08L3NwYW4+PC9zYW1wPiBpcyB1c2VkLiAKK0JvdGggb2YgdGhlbSBnZW5lcmF0ZSB0aGUgaW1tZWRpYXRlIGZvcm0gb2YgdGhlIGJleHRyIG1hY2hpbmUgaW5zdHJ1Y3Rpb24uCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgdW5zaWduZWQgaW50IF9fYnVpbHRpbl9pYTMyX2JleHRyaV91MzIgKHVuc2lnbmVkIGludCwgY29uc3QgdW5zaWduZWQgaW50KTsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fYnVpbHRpbl9pYTMyX2JleHRyaV91NjQgKHVuc2lnbmVkIGxvbmcgbG9uZywgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nKTsKKzwvcHJlPgorIDxwPlRoZSBmb2xsb3dpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTNkbm93PC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gCitBbGwgb2YgdGhlbSBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICB2b2lkIF9fYnVpbHRpbl9pYTMyX2ZlbW1zICh2b2lkKQorICAgICB2OHFpIF9fYnVpbHRpbl9pYTMyX3Bhdmd1c2IgKHY4cWksIHY4cWkpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcGYyaWQgKHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZhY2MgKHYyc2YsIHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZhZGQgKHYyc2YsIHYyc2YpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcGZjbXBlcSAodjJzZiwgdjJzZikKKyAgICAgdjJzaSBfX2J1aWx0aW5faWEzMl9wZmNtcGdlICh2MnNmLCB2MnNmKQorICAgICB2MnNpIF9fYnVpbHRpbl9pYTMyX3BmY21wZ3QgKHYyc2YsIHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZtYXggKHYyc2YsIHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZtaW4gKHYyc2YsIHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZtdWwgKHYyc2YsIHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZyY3AgKHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZyY3BpdDEgKHYyc2YsIHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZyY3BpdDIgKHYyc2YsIHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZyc3FydCAodjJzZikKKyAgICAgdjJzZiBfX2J1aWx0aW5faWEzMl9wZnJzcXJ0aXQxICh2MnNmLCB2MnNmKQorICAgICB2MnNmIF9fYnVpbHRpbl9pYTMyX3Bmc3ViICh2MnNmLCB2MnNmKQorICAgICB2MnNmIF9fYnVpbHRpbl9pYTMyX3Bmc3ViciAodjJzZiwgdjJzZikKKyAgICAgdjJzZiBfX2J1aWx0aW5faWEzMl9waTJmZCAodjJzaSkKKyAgICAgdjRoaSBfX2J1aWx0aW5faWEzMl9wbXVsaHJ3ICh2NGhpLCB2NGhpKQorPC9wcmU+CisgPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGJvdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW0zZG5vdzwvc3Bhbj48L3NhbXA+CithbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPWF0aGxvbjwvc3Bhbj48L3NhbXA+IGFyZSB1c2VkLiAgQWxsIG9mIHRoZW0gZ2VuZXJhdGUgdGhlIG1hY2hpbmUKK2luc3RydWN0aW9uIHRoYXQgaXMgcGFydCBvZiB0aGUgbmFtZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHYyc2kgX19idWlsdGluX2lhMzJfcGYyaXcgKHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGZuYWNjICh2MnNmLCB2MnNmKQorICAgICB2MnNmIF9fYnVpbHRpbl9pYTMyX3BmcG5hY2MgKHYyc2YsIHYyc2YpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcGkyZncgKHYyc2kpCisgICAgIHYyc2YgX19idWlsdGluX2lhMzJfcHN3YXBkc2YgKHYyc2YpCisgICAgIHYyc2kgX19idWlsdGluX2lhMzJfcHN3YXBkc2kgKHYyc2kpCis8L3ByZT4KKyA8cD5UaGUgZm9sbG93aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1ydG08L3NwYW4+PC9zYW1wPiBpcyB1c2VkCitUaGV5IGFyZSB1c2VkIGZvciByZXN0cmljdGVkIHRyYW5zYWN0aW9uYWwgbWVtb3J5LiBUaGVzZSBhcmUgdGhlIGludGVybmFsCitsb3cgbGV2ZWwgZnVuY3Rpb25zLiBOb3JtYWxseSB0aGUgZnVuY3Rpb25zIGluCis8YSBocmVmPSJYODYtdHJhbnNhY3Rpb25hbC1tZW1vcnktaW50cmluc2ljcy5odG1sI1g4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzIj5YODYgdHJhbnNhY3Rpb25hbCBtZW1vcnkgaW50cmluc2ljczwvYT4gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGludCBfX2J1aWx0aW5faWEzMl94YmVnaW4gKCkKKyAgICAgdm9pZCBfX2J1aWx0aW5faWEzMl94ZW5kICgpCisgICAgIHZvaWQgX19idWlsdGluX2lhMzJfeGFib3J0IChzdGF0dXMpCisgICAgIGludCBfX2J1aWx0aW5faWEzMl94dGVzdCAoKQorPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9YODYtdHJhbnNhY3Rpb25hbC1tZW1vcnktaW50cmluc2ljcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9YODYtdHJhbnNhY3Rpb25hbC1tZW1vcnktaW50cmluc2ljcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YTc2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1g4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwKQEAgLTAsMCArMSwxMjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlg4NiB0cmFuc2FjdGlvbmFsIG1lbW9yeSBpbnRyaW5zaWNzIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRhcmdldC1CdWlsdGlucy5odG1sI1RhcmdldC1CdWlsdGlucyIgdGl0bGU9IlRhcmdldCBCdWlsdGlucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJYODYgQnVpbHQtaW4gRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUlQUy1EU1AtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJNSVBTIERTUCBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iWDg2LXRyYW5zYWN0aW9uYWwtbWVtb3J5LWludHJpbnNpY3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlQUy1EU1AtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPk1JUFMgRFNQIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPlg4NiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPlRhcmdldCBCdWlsdGluczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTYuOCBYODYgdHJhbnNhY3Rpb24gbWVtb3J5IGludHJpbnNpY3M8L2g0PgorCis8cD5IYXJkd2FyZSB0cmFuc2FjdGlvbmFsIG1lbW9yeSBpbnRyaW5zaWNzIGZvciBpMzg2LiBUaGVzZSBhbGxvdyB0byB1c2UKK21lbW9yeSB0cmFuc2FjdGlvbnMgd2l0aCBSVE0gKFJlc3RyaWN0ZWQgVHJhbnNhY3Rpb25hbCBNZW1vcnkpLiAKK0ZvciB1c2luZyBITEUgKEhhcmR3YXJlIExvY2sgRWxpc2lvbikgc2VlIDxhIGhyZWY9Ing4Ni1zcGVjaWZpYy1tZW1vcnktbW9kZWwtZXh0ZW5zaW9ucy1mb3ItdHJhbnNhY3Rpb25hbC1tZW1vcnkuaHRtbCN4ODYtc3BlY2lmaWMtbWVtb3J5LW1vZGVsLWV4dGVuc2lvbnMtZm9yLXRyYW5zYWN0aW9uYWwtbWVtb3J5Ij54ODYgc3BlY2lmaWMgbWVtb3J5IG1vZGVsIGV4dGVuc2lvbnMgZm9yIHRyYW5zYWN0aW9uYWwgbWVtb3J5PC9hPiBpbnN0ZWFkLiAKK1RoaXMgc3VwcG9ydCBpcyBlbmFibGVkIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcnRtPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgPHA+QSBtZW1vcnkgdHJhbnNhY3Rpb24gY29tbWl0cyBhbGwgY2hhbmdlcyB0byBtZW1vcnkgaW4gYW4gYXRvbWljIHdheSwKK2FzIHZpc2libGUgdG8gb3RoZXIgdGhyZWFkcy4gSWYgdGhlIHRyYW5zYWN0aW9uIGZhaWxzIGl0IGlzIHJvbGxlZCBiYWNrCithbmQgYWxsIHNpZGUgZWZmZWN0cyBkaXNjYXJkZWQuCisKKyA8cD5HZW5lcmFsbHkgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYSBtZW1vcnkgdHJhbnNhY3Rpb24gZXZlciBzdWNlZWRzCithbmQgc3VpdGFibGUgZmFsbGJhY2sgY29kZSBhbHdheXMgbmVlZHMgdG8gYmUgc3VwcGxpZWQuCisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgUlRNIEZ1bmN0aW9uOiB1bnNpZ25lZCA8Yj5feGJlZ2luPC9iPiAoKTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ4YmVnaW4tMzQxMiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlN0YXJ0IGEgUlRNIChSZXN0cmljdGVkIFRyYW5zYWN0aW9uYWwgTWVtb3J5KSB0cmFuc2FjdGlvbi4gCitSZXR1cm5zIF9YQkVHSU5fU1RBUlRFRCB3aGVuIHRoZSB0cmFuc2FjdGlvbgorc3RhcnRlZCBzdWNjZXNzZnVsbHkgKG5vdGUgdGhpcyBpcyBub3QgMCwgc28gdGhlIGNvbnN0YW50IGhhcyB0byBiZQorZXhwbGljaXRlbHkgdGVzdGVkKS4gV2hlbiB0aGUgdHJhbnNhY3Rpb24gYWJvcnRzIGFsbCBzaWRlIGVmZmVjdHMKK2FyZSB1bmRvbmUgYW5kIGFuIGFib3J0IGNvZGUgaXMgcmV0dXJuZWQuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZQorYW55IHRyYW5zYWN0aW9uIGV2ZXIgc3VjY2VlZHMsIHNvIHRoZXJlIGFsd2F5cyBuZWVkcyB0byBiZSBhIHZhbGlkCit0ZXN0ZWQgZmFsbGJhY2sgcGF0aC4gCis8L3A+PC9ibG9ja3F1b3RlPjwvZGl2PgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2ltbWludHJpbi5oJmd0OworICAgICAKKyAgICAgaWYgKChzdGF0dXMgPSBfeGJlZ2luICgpKSA9PSBfWEJFR0lOX1NUQVJURUQpIHsKKyAgICAgICAgIC4uLiB0cmFuc2FjdGlvbiBjb2RlLi4uCisgICAgICAgICBfeGVuZCAoKTsKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgIC4uLiBub24gdHJhbnNhY3Rpb25hbCBmYWxsYmFjayBwYXRoLi4uCisgICAgIH0KKzwvcHJlPgorIDxwPlZhbGlkIGFib3J0IHN0YXR1cyBiaXRzICh3aGVuIHRoZSB2YWx1ZSBpcyBub3QgPGNvZGU+X1hCRUdJTl9TVEFSVEVEPC9jb2RlPikgYXJlOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5fWEFCT1JUX0VYUExJQ0lUPC9jb2RlPjxkZD5UcmFuc2FjdGlvbiBleHBsaWNpdGVseSBhYm9ydGVkIHdpdGggPGNvZGU+X3hhYm9ydDwvY29kZT4uIFRoZSBwYXJhbWV0ZXIgcGFzc2VkCit0byA8Y29kZT5feGFib3J0PC9jb2RlPiBpcyBhdmFpbGFibGUgd2l0aCA8Y29kZT5fWEFCT1JUX0NPREUoc3RhdHVzKTwvY29kZT4KKzxicj48ZHQ+PGNvZGU+X1hBQk9SVF9SRVRSWTwvY29kZT48ZGQ+VHJhbnNhY3Rpb24gcmV0cnkgaXMgcG9zc2libGUuIAorPGJyPjxkdD48Y29kZT5fWEFCT1JUX0NPTkZMSUNUPC9jb2RlPjxkZD5UcmFuc2FjdGlvbiBhYm9ydCBkdWUgdG8gYSBtZW1vcnkgY29uZmxpY3Qgd2l0aCBhbm90aGVyIHRocmVhZAorPGJyPjxkdD48Y29kZT5fWEFCT1JUX0NBUEFDSVRZPC9jb2RlPjxkZD5UcmFuc2FjdGlvbiBhYm9ydCBkdWUgdG8gdGhlIHRyYW5zYWN0aW9uIHVzaW5nIHRvbyBtdWNoIG1lbW9yeQorPGJyPjxkdD48Y29kZT5fWEFCT1JUX0RFQlVHPC9jb2RlPjxkZD5UcmFuc2FjdGlvbiBhYm9ydCBkdWUgdG8gYSBkZWJ1ZyB0cmFwCis8YnI+PGR0Pjxjb2RlPl9YQUJPUlRfTkVTVEVEPC9jb2RlPjxkZD5UcmFuc2FjdGlvbiBhYm9ydCBpbiBhIGlubmVyIG5lc3RlZCB0cmFuc2FjdGlvbgorPC9kbD4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBSVE0gRnVuY3Rpb246IHZvaWQgPGI+X3hlbmQ8L2I+ICgpPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnhlbmQtMzQxMyI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gV2hlbiBubyB0cmFuc2FjdGlvbiBpcyBhY3RpdmUgdGhpcyB3aWxsCitmYXVsdC4gQWxsIG1lbW9yeSBzaWRlIGVmZmVjdHMgb2YgdGhlIHRyYW5zYWN0aW9ucyB3aWxsIGJlY29tZSB2aXNpYmxlCit0byBvdGhlciB0aHJlYWRzIGluIGFuIGF0b21pYyBtYXR0ZXIuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBSVE0gRnVuY3Rpb246IGludCA8Yj5feHRlc3Q8L2I+ICgpPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Znh0ZXN0LTM0MTQiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5SZXR1cm4gYSB2YWx1ZSBub3QgemVybyB3aGVuIGEgdHJhbnNhY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSwgb3RoZXJ3aXNlIDAuIAorPC9wPjwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBSVE0gRnVuY3Rpb246IHZvaWQgPGI+X3hhYm9ydDwvYj4gKDx2YXI+c3RhdHVzPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ4YWJvcnQtMzQxNSI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPkFib3J0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiBXaGVuIG5vIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZSB0aGlzIGlzIGEgbm8tb3AuIAorc3RhdHVzIG11c3QgYmUgYSA4Yml0IGNvbnN0YW50LCB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBzdGF0dXMgY29kZSByZXR1cm5lZAorYnkgPGNvZGU+X3hiZWdpbjwvY29kZT4KKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1hzdG9ybXkxNi1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1hzdG9ybXkxNi1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxYThiNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvWHN0b3JteTE2LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Yc3Rvcm15MTYgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ4ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCN4ODZfMDAyZDY0LU9wdGlvbnMiIHRpdGxlPSJ4ODYtNjQgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiIHRpdGxlPSJYdGVuc2EgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYc3Rvcm15MTYtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIj5YdGVuc2EgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ing4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI3g4Nl8wMDJkNjQtT3B0aW9ucyI+eDg2LTY0IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuNTAgWHN0b3JteTE2IE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1Yc3Rvcm15MTYtT3B0aW9ucy0yMzA2Ij48L2E+CitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBYc3Rvcm15MTY6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tc2ltPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2ltLTIzMDciPjwvYT5DaG9vc2Ugc3RhcnR1cCBmaWxlcyBhbmQgbGlua2VyIHNjcmlwdCBzdWl0YWJsZSBmb3IgdGhlIHNpbXVsYXRvci4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9YdGVuc2EtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9YdGVuc2EtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNTRiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1h0ZW5zYS1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlh0ZW5zYSBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlhzdG9ybXkxNi1PcHRpb25zLmh0bWwjWHN0b3JteTE2LU9wdGlvbnMiIHRpdGxlPSJYc3Rvcm15MTYgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InpTZXJpZXMtT3B0aW9ucy5odG1sI3pTZXJpZXMtT3B0aW9ucyIgdGl0bGU9InpTZXJpZXMgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYdGVuc2EtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ6U2VyaWVzLU9wdGlvbnMuaHRtbCN6U2VyaWVzLU9wdGlvbnMiPnpTZXJpZXMgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlhzdG9ybXkxNi1PcHRpb25zLmh0bWwjWHN0b3JteTE2LU9wdGlvbnMiPlhzdG9ybXkxNiBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjUxIFh0ZW5zYSBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtWHRlbnNhLU9wdGlvbnMtMjMwOCI+PC9hPgorVGhlc2Ugb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGZvciBYdGVuc2EgdGFyZ2V0czoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1jb25zdDE2PC9jb2RlPjxkdD48Y29kZT4tbW5vLWNvbnN0MTY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jb25zdDE2LTIzMDkiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGNvbnN0MTYtMjMxMCI+PC9hPkVuYWJsZSBvciBkaXNhYmxlIHVzZSBvZiA8Y29kZT5DT05TVDE2PC9jb2RlPiBpbnN0cnVjdGlvbnMgZm9yIGxvYWRpbmcKK2NvbnN0YW50IHZhbHVlcy4gIFRoZSA8Y29kZT5DT05TVDE2PC9jb2RlPiBpbnN0cnVjdGlvbiBpcyBjdXJyZW50bHkgbm90IGEKK3N0YW5kYXJkIG9wdGlvbiBmcm9tIFRlbnNpbGljYS4gIFdoZW4gZW5hYmxlZCwgPGNvZGU+Q09OU1QxNjwvY29kZT4KK2luc3RydWN0aW9ucyBhcmUgYWx3YXlzIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIHN0YW5kYXJkIDxjb2RlPkwzMlI8L2NvZGU+CitpbnN0cnVjdGlvbnMuICBUaGUgdXNlIG9mIDxjb2RlPkNPTlNUMTY8L2NvZGU+IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbmx5IGlmCit0aGUgPGNvZGU+TDMyUjwvY29kZT4gaW5zdHJ1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZnVzZWQtbWFkZDwvY29kZT48ZHQ+PGNvZGU+LW1uby1mdXNlZC1tYWRkPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZnVzZWRfMDAyZG1hZGQtMjMxMSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZnVzZWRfMDAyZG1hZGQtMjMxMiI+PC9hPkVuYWJsZSBvciBkaXNhYmxlIHVzZSBvZiBmdXNlZCBtdWx0aXBseS9hZGQgYW5kIG11bHRpcGx5L3N1YnRyYWN0CitpbnN0cnVjdGlvbnMgaW4gdGhlIGZsb2F0aW5nLXBvaW50IG9wdGlvbi4gIFRoaXMgaGFzIG5vIGVmZmVjdCBpZiB0aGUKK2Zsb2F0aW5nLXBvaW50IG9wdGlvbiBpcyBub3QgYWxzbyBlbmFibGVkLiAgRGlzYWJsaW5nIGZ1c2VkIG11bHRpcGx5L2FkZAorYW5kIG11bHRpcGx5L3N1YnRyYWN0IGluc3RydWN0aW9ucyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIHVzZSBzZXBhcmF0ZQoraW5zdHJ1Y3Rpb25zIGZvciB0aGUgbXVsdGlwbHkgYW5kIGFkZC9zdWJ0cmFjdCBvcGVyYXRpb25zLiAgVGhpcyBtYXkgYmUKK2Rlc2lyYWJsZSBpbiBzb21lIGNhc2VzIHdoZXJlIHN0cmljdCBJRUVFIDc1NC1jb21wbGlhbnQgcmVzdWx0cyBhcmUKK3JlcXVpcmVkOiB0aGUgZnVzZWQgbXVsdGlwbHkgYWRkL3N1YnRyYWN0IGluc3RydWN0aW9ucyBkbyBub3Qgcm91bmQgdGhlCitpbnRlcm1lZGlhdGUgcmVzdWx0LCB0aGVyZWJ5IHByb2R1Y2luZyByZXN1bHRzIHdpdGggPGVtPm1vcmU8L2VtPiBiaXRzIG9mCitwcmVjaXNpb24gdGhhbiBzcGVjaWZpZWQgYnkgdGhlIElFRUUgc3RhbmRhcmQuICBEaXNhYmxpbmcgZnVzZWQgbXVsdGlwbHkKK2FkZC9zdWJ0cmFjdCBpbnN0cnVjdGlvbnMgYWxzbyBlbnN1cmVzIHRoYXQgdGhlIHByb2dyYW0gb3V0cHV0IGlzIG5vdAorc2Vuc2l0aXZlIHRvIHRoZSBjb21waWxlcidzIGFiaWxpdHkgdG8gY29tYmluZSBtdWx0aXBseSBhbmQgYWRkL3N1YnRyYWN0CitvcGVyYXRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zZXJpYWxpemUtdm9sYXRpbGU8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc2VyaWFsaXplLXZvbGF0aWxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc2VyaWFsaXplXzAwMmR2b2xhdGlsZS0yMzEzIj48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRzZXJpYWxpemVfMDAyZHZvbGF0aWxlLTIzMTQiPjwvYT5XaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIEdDQyBpbnNlcnRzIDxjb2RlPk1FTVc8L2NvZGU+IGluc3RydWN0aW9ucyBiZWZvcmUKKzxjb2RlPnZvbGF0aWxlPC9jb2RlPiBtZW1vcnkgcmVmZXJlbmNlcyB0byBndWFyYW50ZWUgc2VxdWVudGlhbCBjb25zaXN0ZW5jeS4gCitUaGUgZGVmYXVsdCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNlcmlhbGl6ZS12b2xhdGlsZTwvc3Bhbj48L3NhbXA+LiAgVXNlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXNlcmlhbGl6ZS12b2xhdGlsZTwvc3Bhbj48L3NhbXA+IHRvIG9taXQgdGhlIDxjb2RlPk1FTVc8L2NvZGU+IGluc3RydWN0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZm9yY2Utbm8tcGljPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZm9yY2VfMDAyZG5vXzAwMmRwaWMtMjMxNSI+PC9hPkZvciB0YXJnZXRzLCBsaWtlIEdOVS9MaW51eCwgd2hlcmUgYWxsIHVzZXItbW9kZSBYdGVuc2EgY29kZSBtdXN0IGJlCitwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIChQSUMpLCB0aGlzIG9wdGlvbiBkaXNhYmxlcyBQSUMgZm9yIGNvbXBpbGluZwora2VybmVsIGNvZGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRleHQtc2VjdGlvbi1saXRlcmFsczwvY29kZT48ZHQ+PGNvZGU+LW1uby10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW10ZXh0XzAwMmRzZWN0aW9uXzAwMmRsaXRlcmFscy0yMzE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmR0ZXh0XzAwMmRzZWN0aW9uXzAwMmRsaXRlcmFscy0yMzE3Ij48L2E+Q29udHJvbCB0aGUgdHJlYXRtZW50IG9mIGxpdGVyYWwgcG9vbHMuICBUaGUgZGVmYXVsdCBpcworPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L3NwYW4+PC9zYW1wPiwgd2hpY2ggcGxhY2VzIGxpdGVyYWxzIGluIGEgc2VwYXJhdGUKK3NlY3Rpb24gaW4gdGhlIG91dHB1dCBmaWxlLiAgVGhpcyBhbGxvd3MgdGhlIGxpdGVyYWwgcG9vbCB0byBiZSBwbGFjZWQKK2luIGEgZGF0YSBSQU0vUk9NLCBhbmQgaXQgYWxzbyBhbGxvd3MgdGhlIGxpbmtlciB0byBjb21iaW5lIGxpdGVyYWwKK3Bvb2xzIGZyb20gc2VwYXJhdGUgb2JqZWN0IGZpbGVzIHRvIHJlbW92ZSByZWR1bmRhbnQgbGl0ZXJhbHMgYW5kCitpbXByb3ZlIGNvZGUgc2l6ZS4gIFdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10ZXh0LXNlY3Rpb24tbGl0ZXJhbHM8L3NwYW4+PC9zYW1wPiwgdGhlIGxpdGVyYWxzCithcmUgaW50ZXJzcGVyc2VkIGluIHRoZSB0ZXh0IHNlY3Rpb24gaW4gb3JkZXIgdG8ga2VlcCB0aGVtIGFzIGNsb3NlIGFzCitwb3NzaWJsZSB0byB0aGVpciByZWZlcmVuY2VzLiAgVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IGZvciBsYXJnZSBhc3NlbWJseQorZmlsZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRhcmdldC1hbGlnbjwvY29kZT48ZHQ+PGNvZGU+LW1uby10YXJnZXQtYWxpZ248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW10YXJnZXRfMDAyZGFsaWduLTIzMTgiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHRhcmdldF8wMDJkYWxpZ24tMjMxOSI+PC9hPldoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgR0NDIGluc3RydWN0cyB0aGUgYXNzZW1ibGVyIHRvCithdXRvbWF0aWNhbGx5IGFsaWduIGluc3RydWN0aW9ucyB0byByZWR1Y2UgYnJhbmNoIHBlbmFsdGllcyBhdCB0aGUKK2V4cGVuc2Ugb2Ygc29tZSBjb2RlIGRlbnNpdHkuICBUaGUgYXNzZW1ibGVyIGF0dGVtcHRzIHRvIHdpZGVuIGRlbnNpdHkKK2luc3RydWN0aW9ucyB0byBhbGlnbiBicmFuY2ggdGFyZ2V0cyBhbmQgdGhlIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgY2FsbAoraW5zdHJ1Y3Rpb25zLiAgSWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcHJlY2VkaW5nIHNhZmUgZGVuc2l0eQoraW5zdHJ1Y3Rpb25zIHRvIGFsaWduIGEgdGFyZ2V0LCBubyB3aWRlbmluZyBpcyBwZXJmb3JtZWQuICBUaGUKK2RlZmF1bHQgaXMgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10YXJnZXQtYWxpZ248L3NwYW4+PC9zYW1wPi4gIFRoZXNlIG9wdGlvbnMgZG8gbm90IGFmZmVjdCB0aGUKK3RyZWF0bWVudCBvZiBhdXRvLWFsaWduZWQgaW5zdHJ1Y3Rpb25zIGxpa2UgPGNvZGU+TE9PUDwvY29kZT4sIHdoaWNoIHRoZQorYXNzZW1ibGVyIGFsd2F5cyBhbGlnbnMsIGVpdGhlciBieSB3aWRlbmluZyBkZW5zaXR5IGluc3RydWN0aW9ucyBvcgorYnkgaW5zZXJ0aW5nIE5PUCBpbnN0cnVjdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxvbmdjYWxsczwvY29kZT48ZHQ+PGNvZGU+LW1uby1sb25nY2FsbHM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1sb25nY2FsbHMtMjMyMCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkbG9uZ2NhbGxzLTIzMjEiPjwvYT5XaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIEdDQyBpbnN0cnVjdHMgdGhlIGFzc2VtYmxlciB0byB0cmFuc2xhdGUKK2RpcmVjdCBjYWxscyB0byBpbmRpcmVjdCBjYWxscyB1bmxlc3MgaXQgY2FuIGRldGVybWluZSB0aGF0IHRoZSB0YXJnZXQKK29mIGEgZGlyZWN0IGNhbGwgaXMgaW4gdGhlIHJhbmdlIGFsbG93ZWQgYnkgdGhlIGNhbGwgaW5zdHJ1Y3Rpb24uICBUaGlzCit0cmFuc2xhdGlvbiB0eXBpY2FsbHkgb2NjdXJzIGZvciBjYWxscyB0byBmdW5jdGlvbnMgaW4gb3RoZXIgc291cmNlCitmaWxlcy4gIFNwZWNpZmljYWxseSwgdGhlIGFzc2VtYmxlciB0cmFuc2xhdGVzIGEgZGlyZWN0IDxjb2RlPkNBTEw8L2NvZGU+CitpbnN0cnVjdGlvbiBpbnRvIGFuIDxjb2RlPkwzMlI8L2NvZGU+IGZvbGxvd2VkIGJ5IGEgPGNvZGU+Q0FMTFg8L2NvZGU+IGluc3RydWN0aW9uLiAKK1RoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tbG9uZ2NhbGxzPC9zcGFuPjwvc2FtcD4uICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCBpbgorcHJvZ3JhbXMgd2hlcmUgdGhlIGNhbGwgdGFyZ2V0IGNhbiBwb3RlbnRpYWxseSBiZSBvdXQgb2YgcmFuZ2UuICBUaGlzCitvcHRpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGFzc2VtYmxlciwgbm90IHRoZSBjb21waWxlciwgc28gdGhlCithc3NlbWJseSBjb2RlIGdlbmVyYXRlZCBieSBHQ0Mgc3RpbGwgc2hvd3MgZGlyZWN0IGNhbGwKK2luc3RydWN0aW9ucyZtZGFzaDtsb29rIGF0IHRoZSBkaXNhc3NlbWJsZWQgb2JqZWN0IGNvZGUgdG8gc2VlIHRoZSBhY3R1YWwKK2luc3RydWN0aW9ucy4gIE5vdGUgdGhhdCB0aGUgYXNzZW1ibGVyIHVzZXMgYW4gaW5kaXJlY3QgY2FsbCBmb3IKK2V2ZXJ5IGNyb3NzLWZpbGUgY2FsbCwgbm90IGp1c3QgdGhvc2UgdGhhdCByZWFsbHkgYXJlIG91dCBvZiByYW5nZS4gCis8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9aZXJvLUxlbmd0aC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9aZXJvLUxlbmd0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMGIwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL1plcm8tTGVuZ3RoLmh0bWwKQEAgLTAsMCArMSwxMzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlplcm8gTGVuZ3RoIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyIgdGl0bGU9IkMgRXh0ZW5zaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjTmFtZWQtQWRkcmVzcy1TcGFjZXMiIHRpdGxlPSJOYW1lZCBBZGRyZXNzIFNwYWNlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVtcHR5LVN0cnVjdHVyZXMuaHRtbCNFbXB0eS1TdHJ1Y3R1cmVzIiB0aXRsZT0iRW1wdHkgU3RydWN0dXJlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJaZXJvLUxlbmd0aCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFbXB0eS1TdHJ1Y3R1cmVzLmh0bWwjRW1wdHktU3RydWN0dXJlcyI+RW1wdHkgU3RydWN0dXJlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjTmFtZWQtQWRkcmVzcy1TcGFjZXMiPk5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjE3IEFycmF5cyBvZiBMZW5ndGggWmVybzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFycmF5cy1vZi1sZW5ndGgtemVyby0yNTE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtemVyb18wMDJkbGVuZ3RoLWFycmF5cy0yNTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGVuZ3RoXzAwMmR6ZXJvLWFycmF5cy0yNTE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmxleGlibGUtYXJyYXktbWVtYmVycy0yNTE5Ij48L2E+CitaZXJvLWxlbmd0aCBhcnJheXMgYXJlIGFsbG93ZWQgaW4gR05VIEMuICBUaGV5IGFyZSB2ZXJ5IHVzZWZ1bCBhcyB0aGUKK2xhc3QgZWxlbWVudCBvZiBhIHN0cnVjdHVyZSB0aGF0IGlzIHJlYWxseSBhIGhlYWRlciBmb3IgYSB2YXJpYWJsZS1sZW5ndGgKK29iamVjdDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHN0cnVjdCBsaW5lIHsKKyAgICAgICBpbnQgbGVuZ3RoOworICAgICAgIGNoYXIgY29udGVudHNbMF07CisgICAgIH07CisgICAgIAorICAgICBzdHJ1Y3QgbGluZSAqdGhpc2xpbmUgPSAoc3RydWN0IGxpbmUgKikKKyAgICAgICBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxpbmUpICsgdGhpc19sZW5ndGgpOworICAgICB0aGlzbGluZS0mZ3Q7bGVuZ3RoID0gdGhpc19sZW5ndGg7Cis8L3ByZT4KKyA8cD5JbiBJU08gQzkwLCB5b3Ugd291bGQgaGF2ZSB0byBnaXZlIDxjb2RlPmNvbnRlbnRzPC9jb2RlPiBhIGxlbmd0aCBvZiAxLCB3aGljaAorbWVhbnMgZWl0aGVyIHlvdSB3YXN0ZSBzcGFjZSBvciBjb21wbGljYXRlIHRoZSBhcmd1bWVudCB0byA8Y29kZT5tYWxsb2M8L2NvZGU+LgorCisgPHA+SW4gSVNPIEM5OSwgeW91IHdvdWxkIHVzZSBhIDxkZm4+ZmxleGlibGUgYXJyYXkgbWVtYmVyPC9kZm4+LCB3aGljaCBpcworc2xpZ2h0bHkgZGlmZmVyZW50IGluIHN5bnRheCBhbmQgc2VtYW50aWNzOgorCisgICAgIDx1bD4KKzxsaT5GbGV4aWJsZSBhcnJheSBtZW1iZXJzIGFyZSB3cml0dGVuIGFzIDxjb2RlPmNvbnRlbnRzW108L2NvZGU+IHdpdGhvdXQKK3RoZSA8Y29kZT4wPC9jb2RlPi4KKworICAgICA8bGk+RmxleGlibGUgYXJyYXkgbWVtYmVycyBoYXZlIGluY29tcGxldGUgdHlwZSwgYW5kIHNvIHRoZSA8Y29kZT5zaXplb2Y8L2NvZGU+CitvcGVyYXRvciBtYXkgbm90IGJlIGFwcGxpZWQuICBBcyBhIHF1aXJrIG9mIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgorb2YgemVyby1sZW5ndGggYXJyYXlzLCA8Y29kZT5zaXplb2Y8L2NvZGU+IGV2YWx1YXRlcyB0byB6ZXJvLgorCisgICAgIDxsaT5GbGV4aWJsZSBhcnJheSBtZW1iZXJzIG1heSBvbmx5IGFwcGVhciBhcyB0aGUgbGFzdCBtZW1iZXIgb2YgYQorPGNvZGU+c3RydWN0PC9jb2RlPiB0aGF0IGlzIG90aGVyd2lzZSBub24tZW1wdHkuCisKKyAgICAgPGxpPkEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIG9yIGEgdW5pb24gY29udGFpbmluZworc3VjaCBhIHN0cnVjdHVyZSAocG9zc2libHkgcmVjdXJzaXZlbHkpLCBtYXkgbm90IGJlIGEgbWVtYmVyIG9mIGEKK3N0cnVjdHVyZSBvciBhbiBlbGVtZW50IG9mIGFuIGFycmF5LiAgKEhvd2V2ZXIsIHRoZXNlIHVzZXMgYXJlCitwZXJtaXR0ZWQgYnkgR0NDIGFzIGV4dGVuc2lvbnMuKSAKKzwvdWw+CisKKyA8cD5HQ0MgdmVyc2lvbnMgYmVmb3JlIDMuMCBhbGxvd2VkIHplcm8tbGVuZ3RoIGFycmF5cyB0byBiZSBzdGF0aWNhbGx5Citpbml0aWFsaXplZCwgYXMgaWYgdGhleSB3ZXJlIGZsZXhpYmxlIGFycmF5cy4gIEluIGFkZGl0aW9uIHRvIHRob3NlCitjYXNlcyB0aGF0IHdlcmUgdXNlZnVsLCBpdCBhbHNvIGFsbG93ZWQgaW5pdGlhbGl6YXRpb25zIGluIHNpdHVhdGlvbnMKK3RoYXQgd291bGQgY29ycnVwdCBsYXRlciBkYXRhLiAgTm9uLWVtcHR5IGluaXRpYWxpemF0aW9uIG9mIHplcm8tbGVuZ3RoCithcnJheXMgaXMgbm93IHRyZWF0ZWQgbGlrZSBhbnkgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbW9yZSBpbml0aWFsaXplcgorZWxlbWVudHMgdGhhbiB0aGUgYXJyYXkgaG9sZHMsIGluIHRoYXQgYSBzdWl0YWJsZSB3YXJuaW5nIGFib3V0ICZsZHF1bztleGNlc3MKK2VsZW1lbnRzIGluIGFycmF5JnJkcXVvOyBpcyBnaXZlbiwgYW5kIHRoZSBleGNlc3MgZWxlbWVudHMgKGFsbCBvZiB0aGVtLCBpbgordGhpcyBjYXNlKSBhcmUgaWdub3JlZC4KKworIDxwPkluc3RlYWQgR0NDIGFsbG93cyBzdGF0aWMgaW5pdGlhbGl6YXRpb24gb2YgZmxleGlibGUgYXJyYXkgbWVtYmVycy4gCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZGVmaW5pbmcgYSBuZXcgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsCitzdHJ1Y3R1cmUgZm9sbG93ZWQgYnkgYW4gYXJyYXkgb2Ygc3VmZmljaWVudCBzaXplIHRvIGNvbnRhaW4gdGhlIGRhdGEuIAorRS5nLiBpbiB0aGUgZm9sbG93aW5nLCA8Y29kZT5mMTwvY29kZT4gaXMgY29uc3RydWN0ZWQgYXMgaWYgaXQgd2VyZSBkZWNsYXJlZAorbGlrZSA8Y29kZT5mMjwvY29kZT4uCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBzdHJ1Y3QgZjEgeworICAgICAgIGludCB4OyBpbnQgeVtdOworICAgICB9IGYxID0geyAxLCB7IDIsIDMsIDQgfSB9OworICAgICAKKyAgICAgc3RydWN0IGYyIHsKKyAgICAgICBzdHJ1Y3QgZjEgZjE7IGludCBkYXRhWzNdOworICAgICB9IGYyID0geyB7IDEgfSwgeyAyLCAzLCA0IH0gfTsKKzwvcHJlPgorIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIGNvbnZlbmllbmNlIG9mIHRoaXMgZXh0ZW5zaW9uIGlzIHRoYXQgPGNvZGU+ZjE8L2NvZGU+IGhhcyB0aGUgZGVzaXJlZAordHlwZSwgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gY29uc2lzdGVudGx5IHJlZmVyIHRvIDxjb2RlPmYyLmYxPC9jb2RlPi4KKworIDxwPlRoaXMgaGFzIHN5bW1ldHJ5IHdpdGggbm9ybWFsIHN0YXRpYyBhcnJheXMsIGluIHRoYXQgYW4gYXJyYXkgb2YKK3Vua25vd24gc2l6ZSBpcyBhbHNvIHdyaXR0ZW4gd2l0aCA8Y29kZT5bXTwvY29kZT4uCisKKyA8cD5PZiBjb3Vyc2UsIHRoaXMgZXh0ZW5zaW9uIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGV4dHJhIGRhdGEgY29tZXMgYXQKK3RoZSBlbmQgb2YgYSB0b3AtbGV2ZWwgb2JqZWN0LCBhcyBvdGhlcndpc2Ugd2Ugd291bGQgYmUgb3ZlcndyaXRpbmcKK2RhdGEgYXQgc3Vic2VxdWVudCBvZmZzZXRzLiAgVG8gYXZvaWQgdW5kdWUgY29tcGxpY2F0aW9uIGFuZCBjb25mdXNpb24KK3dpdGggaW5pdGlhbGl6YXRpb24gb2YgZGVlcGx5IG5lc3RlZCBhcnJheXMsIHdlIHNpbXBseSBkaXNhbGxvdyBhbnkKK25vbi1lbXB0eSBpbml0aWFsaXphdGlvbiBleGNlcHQgd2hlbiB0aGUgc3RydWN0dXJlIGlzIHRoZSB0b3AtbGV2ZWwKK29iamVjdC4gIEZvciBleGFtcGxlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgc3RydWN0IGZvbyB7IGludCB4OyBpbnQgeVtdOyB9OworICAgICBzdHJ1Y3QgYmFyIHsgc3RydWN0IGZvbyB6OyB9OworICAgICAKKyAgICAgc3RydWN0IGZvbyBhID0geyAxLCB7IDIsIDMsIDQgfSB9OyAgICAgICAgLy8gPHNwYW4gY2xhc3M9InJvbWFuIj5WYWxpZC48L3NwYW4+CisgICAgIHN0cnVjdCBiYXIgYiA9IHsgeyAxLCB7IDIsIDMsIDQgfSB9IH07ICAgIC8vIDxzcGFuIGNsYXNzPSJyb21hbiI+SW52YWxpZC48L3NwYW4+CisgICAgIHN0cnVjdCBiYXIgYyA9IHsgeyAxLCB7IH0gfSB9OyAgICAgICAgICAgIC8vIDxzcGFuIGNsYXNzPSJyb21hbiI+VmFsaWQuPC9zcGFuPgorICAgICBzdHJ1Y3QgZm9vIGRbMV0gPSB7IHsgMSB7IDIsIDMsIDQgfSB9IH07ICAvLyA8c3BhbiBjbGFzcz0icm9tYW4iPkludmFsaWQuPC9zcGFuPgorPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9fMDA0MGVuY29kZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9fMDA0MGVuY29kZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MGJmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL18wMDQwZW5jb2RlLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QEBlbmNvZGUgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVHlwZS1lbmNvZGluZy5odG1sI1R5cGUtZW5jb2RpbmciIHRpdGxlPSJUeXBlIGVuY29kaW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTGVnYWN5LXR5cGUtZW5jb2RpbmcuaHRtbCNMZWdhY3ktdHlwZS1lbmNvZGluZyIgdGl0bGU9IkxlZ2FjeSB0eXBlIGVuY29kaW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTWV0aG9kLXNpZ25hdHVyZXMuaHRtbCNNZXRob2Qtc2lnbmF0dXJlcyIgdGl0bGU9Ik1ldGhvZCBzaWduYXR1cmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IiU0MGVuY29kZSI+PC9hPgorPGEgbmFtZT0iZ190XzAwNDBlbmNvZGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTWV0aG9kLXNpZ25hdHVyZXMuaHRtbCNNZXRob2Qtc2lnbmF0dXJlcyI+TWV0aG9kIHNpZ25hdHVyZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMZWdhY3ktdHlwZS1lbmNvZGluZy5odG1sI0xlZ2FjeS10eXBlLWVuY29kaW5nIj5MZWdhY3kgdHlwZSBlbmNvZGluZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlR5cGUtZW5jb2RpbmcuaHRtbCNUeXBlLWVuY29kaW5nIj5UeXBlIGVuY29kaW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OC4zLjIgQGVuY29kZTwvaDQ+CisKKzxwPkdOVSBPYmplY3RpdmUtQyBzdXBwb3J0cyB0aGUgPGNvZGU+QGVuY29kZTwvY29kZT4gc3ludGF4IHRoYXQgYWxsb3dzIHlvdSB0bworY3JlYXRlIGEgdHlwZSBlbmNvZGluZyBmcm9tIGEgQy9PYmplY3RpdmUtQyB0eXBlLiAgRm9yIGV4YW1wbGUsCis8Y29kZT5AZW5jb2RlKGludCk8L2NvZGU+IGlzIGNvbXBpbGVkIGJ5IHRoZSBjb21waWxlciBpbnRvIDxjb2RlPiJpIjwvY29kZT4uCisKKyA8cD48Y29kZT5AZW5jb2RlPC9jb2RlPiBkb2VzIG5vdCBzdXBwb3J0IHR5cGUgcXVhbGlmaWVycyBvdGhlciB0aGFuCis8Y29kZT5jb25zdDwvY29kZT4uICBGb3IgZXhhbXBsZSwgPGNvZGU+QGVuY29kZShjb25zdCBjaGFyKik8L2NvZGU+IGlzIHZhbGlkIGFuZAoraXMgY29tcGlsZWQgaW50byA8Y29kZT4icioiPC9jb2RlPiwgd2hpbGUgPGNvZGU+QGVuY29kZShieWNvcHkgY2hhciAqKTwvY29kZT4gaXMKK2ludmFsaWQgYW5kIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvci4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9fMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2NDU3OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5fX2F0b21pYyBCdWlsdGlucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIiB0aXRsZT0iX19zeW5jIEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ieDg2LXNwZWNpZmljLW1lbW9yeS1tb2RlbC1leHRlbnNpb25zLWZvci10cmFuc2FjdGlvbmFsLW1lbW9yeS5odG1sI3g4Ni1zcGVjaWZpYy1tZW1vcnktbW9kZWwtZXh0ZW5zaW9ucy1mb3ItdHJhbnNhY3Rpb25hbC1tZW1vcnkiIHRpdGxlPSJ4ODYgc3BlY2lmaWMgbWVtb3J5IG1vZGVsIGV4dGVuc2lvbnMgZm9yIHRyYW5zYWN0aW9uYWwgbWVtb3J5Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Il9fYXRvbWljLUJ1aWx0aW5zIj48L2E+Cis8YSBuYW1lPSJnX3RfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ing4Ni1zcGVjaWZpYy1tZW1vcnktbW9kZWwtZXh0ZW5zaW9ucy1mb3ItdHJhbnNhY3Rpb25hbC1tZW1vcnkuaHRtbCN4ODYtc3BlY2lmaWMtbWVtb3J5LW1vZGVsLWV4dGVuc2lvbnMtZm9yLXRyYW5zYWN0aW9uYWwtbWVtb3J5Ij54ODYgc3BlY2lmaWMgbWVtb3J5IG1vZGVsIGV4dGVuc2lvbnMgZm9yIHRyYW5zYWN0aW9uYWwgbWVtb3J5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmc3luYy1CdWlsdGlucyI+X19zeW5jIEJ1aWx0aW5zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQy1FeHRlbnNpb25zLmh0bWwjQy1FeHRlbnNpb25zIj5DIEV4dGVuc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjUyIEJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IG1vZGVsIGF3YXJlIGF0b21pYyBvcGVyYXRpb25zPC9oMz4KKworPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMgYXBwcm94aW1hdGVseSBtYXRjaCB0aGUgcmVxdWlyZW1lbnRzIGZvcgorQysrMTEgbWVtb3J5IG1vZGVsLiBNYW55IGFyZSBzaW1pbGFyIHRvIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fc3luYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwcmVmaXhlZCBidWlsdC1pbgorZnVuY3Rpb25zLCBidXQgYWxsIGFsc28gaGF2ZSBhIG1lbW9yeSBtb2RlbCBwYXJhbWV0ZXIuICBUaGVzZSBhcmUgYWxsCitpZGVudGlmaWVkIGJ5IGJlaW5nIHByZWZpeGVkIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX2F0b21pYzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIG1vc3QgYXJlIG92ZXJsb2FkZWQKK3N1Y2ggdGhhdCB0aGV5IHdvcmsgd2l0aCBtdWx0aXBsZSB0eXBlcy4KKworIDxwPkdDQyBhbGxvd3MgYW55IGludGVncmFsIHNjYWxhciBvciBwb2ludGVyIHR5cGUgdGhhdCBpcyAxLCAyLCA0LCBvciA4CitieXRlcyBpbiBsZW5ndGguIDE2LWJ5dGUgaW50ZWdyYWwgdHlwZXMgYXJlIGFsc28gYWxsb3dlZCBpZgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fX2ludDEyODwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoc2VlIDxhIGhyZWY9Il8wMDVmXzAwNWZpbnQxMjguaHRtbCNnX3RfMDA1Zl8wMDVmaW50MTI4Ij5fX2ludDEyODwvYT4pIGlzIHN1cHBvcnRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLgorCisgPHA+VGFyZ2V0IGFyY2hpdGVjdHVyZXMgYXJlIGVuY291cmFnZWQgdG8gcHJvdmlkZSB0aGVpciBvd24gcGF0dGVybnMgZm9yCitlYWNoIG9mIHRoZXNlIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIElmIG5vIHRhcmdldCBpcyBwcm92aWRlZCwgdGhlIG9yaWdpbmFsCitub24tbWVtb3J5IG1vZGVsIHNldCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fc3luYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhdG9taWMgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZQordXRpbGl6ZWQsIGFsb25nIHdpdGggYW55IHJlcXVpcmVkIHN5bmNocm9uaXphdGlvbiBmZW5jZXMgc3Vycm91bmRpbmcgaXQgaW4KK29yZGVyIHRvIGFjaGlldmUgdGhlIHByb3BlciBiZWhhdmlvci4gIEV4ZWN1dGlvbiBpbiB0aGlzIGNhc2UgaXMgc3ViamVjdAordG8gdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIHRob3NlIGJ1aWx0LWluIGZ1bmN0aW9ucy4KKworIDxwPklmIHRoZXJlIGlzIG5vIHBhdHRlcm4gb3IgbWVjaGFuaXNtIHRvIHByb3ZpZGUgYSBsb2NrIGZyZWUgaW5zdHJ1Y3Rpb24KK3NlcXVlbmNlLCBhIGNhbGwgaXMgbWFkZSB0byBhbiBleHRlcm5hbCByb3V0aW5lIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycwordG8gYmUgcmVzb2x2ZWQgYXQgcnVuIHRpbWUuCisKKyA8cD5UaGUgZm91ciBub24tYXJpdGhtZXRpYyBmdW5jdGlvbnMgKGxvYWQsIHN0b3JlLCBleGNoYW5nZSwgYW5kCitjb21wYXJlX2V4Y2hhbmdlKSBhbGwgaGF2ZSBhIGdlbmVyaWMgdmVyc2lvbiBhcyB3ZWxsLiAgVGhpcyBnZW5lcmljCit2ZXJzaW9uIHdvcmtzIG9uIGFueSBkYXRhIHR5cGUuICBJZiB0aGUgZGF0YSB0eXBlIHNpemUgbWFwcyB0byBvbmUKK29mIHRoZSBpbnRlZ3JhbCBzaXplcyB0aGF0IG1heSBoYXZlIGxvY2sgZnJlZSBzdXBwb3J0LCB0aGUgZ2VuZXJpYwordmVyc2lvbiB1dGlsaXplcyB0aGUgbG9jayBmcmVlIGJ1aWx0LWluIGZ1bmN0aW9uLiAgT3RoZXJ3aXNlIGFuCitleHRlcm5hbCBjYWxsIGlzIGxlZnQgdG8gYmUgcmVzb2x2ZWQgYXQgcnVuIHRpbWUuICBUaGlzIGV4dGVybmFsIGNhbGwgaXMKK3RoZSBzYW1lIGZvcm1hdCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2l6ZV90PC9zcGFuPjwvc2FtcD4mcnNxdW87IHBhcmFtZXRlciBpbnNlcnRlZAorYXMgdGhlIGZpcnN0IHBhcmFtZXRlciBpbmRpY2F0aW5nIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgYmVpbmcgcG9pbnRlZCB0by4gCitBbGwgb2JqZWN0cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuCisKKyA8cD5UaGVyZSBhcmUgNiBkaWZmZXJlbnQgbWVtb3J5IG1vZGVscyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQuICBUaGVzZSBtYXAKK3RvIHRoZSBzYW1lIG5hbWVzIGluIHRoZSBDKysxMSBzdGFuZGFyZC4gIFJlZmVyIHRoZXJlIG9yIHRvIHRoZQorPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL3dpa2kvQXRvbWljL0dDQ01NL0F0b21pY1N5bmMiPkdDQyB3aWtpIG9uIGF0b21pYyBzeW5jaHJvbml6YXRpb248L2E+IGZvciBtb3JlIGRldGFpbGVkIGRlZmluaXRpb25zLiAgVGhlc2UgbWVtb3J5Cittb2RlbHMgaW50ZWdyYXRlIGJvdGggYmFycmllcnMgdG8gY29kZSBtb3Rpb24gYXMgd2VsbCBhcyBzeW5jaHJvbml6YXRpb24KK3JlcXVpcmVtZW50cyB3aXRoIG90aGVyIHRocmVhZHMuIFRoZXNlIGFyZSBsaXN0ZWQgaW4gYXBwcm94aW1hdGVseQorYXNjZW5kaW5nIG9yZGVyIG9mIHN0cmVuZ3RoLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSB0YXJnZXQgc3BlY2lmaWMKK2ZsYWdzIGZvciBtZW1vcnkgbW9kZWwgZmxhZ3MsIGxpa2UgSGFyZHdhcmUgTG9jayBFbGlzaW9uLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5fX0FUT01JQ19SRUxBWEVEPC9jb2RlPjxkZD5ObyBiYXJyaWVycyBvciBzeW5jaHJvbml6YXRpb24uIAorPGJyPjxkdD48Y29kZT5fX0FUT01JQ19DT05TVU1FPC9jb2RlPjxkZD5EYXRhIGRlcGVuZGVuY3kgb25seSBmb3IgYm90aCBiYXJyaWVyIGFuZCBzeW5jaHJvbml6YXRpb24gd2l0aCBhbm90aGVyCit0aHJlYWQuIAorPGJyPjxkdD48Y29kZT5fX0FUT01JQ19BQ1FVSVJFPC9jb2RlPjxkZD5CYXJyaWVyIHRvIGhvaXN0aW5nIG9mIGNvZGUgYW5kIHN5bmNocm9uaXplcyB3aXRoIHJlbGVhc2UgKG9yIHN0cm9uZ2VyKQorc2VtYW50aWMgc3RvcmVzIGZyb20gYW5vdGhlciB0aHJlYWQuIAorPGJyPjxkdD48Y29kZT5fX0FUT01JQ19SRUxFQVNFPC9jb2RlPjxkZD5CYXJyaWVyIHRvIHNpbmtpbmcgb2YgY29kZSBhbmQgc3luY2hyb25pemVzIHdpdGggYWNxdWlyZSAob3Igc3Ryb25nZXIpCitzZW1hbnRpYyBsb2FkcyBmcm9tIGFub3RoZXIgdGhyZWFkLiAKKzxicj48ZHQ+PGNvZGU+X19BVE9NSUNfQUNRX1JFTDwvY29kZT48ZGQ+RnVsbCBiYXJyaWVyIGluIGJvdGggZGlyZWN0aW9ucyBhbmQgc3luY2hyb25pemVzIHdpdGggYWNxdWlyZSBsb2FkcyBhbmQKK3JlbGVhc2Ugc3RvcmVzIGluIGFub3RoZXIgdGhyZWFkLiAKKzxicj48ZHQ+PGNvZGU+X19BVE9NSUNfU0VRX0NTVDwvY29kZT48ZGQ+RnVsbCBiYXJyaWVyIGluIGJvdGggZGlyZWN0aW9ucyBhbmQgc3luY2hyb25pemVzIHdpdGggYWNxdWlyZSBsb2FkcyBhbmQKK3JlbGVhc2Ugc3RvcmVzIGluIGFsbCB0aHJlYWRzLiAKKzwvZGw+CisKKyA8cD5XaGVuIGltcGxlbWVudGluZyBwYXR0ZXJucyBmb3IgdGhlc2UgYnVpbHQtaW4gZnVuY3Rpb25zLCB0aGUgbWVtb3J5IG1vZGVsCitwYXJhbWV0ZXIgY2FuIGJlIGlnbm9yZWQgYXMgbG9uZyBhcyB0aGUgcGF0dGVybiBpbXBsZW1lbnRzIHRoZSBtb3N0CityZXN0cmljdGl2ZSA8Y29kZT5fX0FUT01JQ19TRVFfQ1NUPC9jb2RlPiBtb2RlbC4gIEFueSBvZiB0aGUgb3RoZXIgbWVtb3J5IG1vZGVscworZXhlY3V0ZSBjb3JyZWN0bHkgd2l0aCB0aGlzIG1lbW9yeSBtb2RlbCBidXQgdGhleSBtYXkgbm90IGV4ZWN1dGUgYXMKK2VmZmljaWVudGx5IGFzIHRoZXkgY291bGQgd2l0aCBhIG1vcmUgYXBwcm9wcmlhdGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCityZWxheGVkIHJlcXVpcmVtZW50cy4KKworIDxwPk5vdGUgdGhhdCB0aGUgQysrMTEgc3RhbmRhcmQgYWxsb3dzIGZvciB0aGUgbWVtb3J5IG1vZGVsIHBhcmFtZXRlciB0byBiZQorZGV0ZXJtaW5lZCBhdCBydW4gdGltZSByYXRoZXIgdGhhbiBhdCBjb21waWxlIHRpbWUuICBUaGVzZSBidWlsdC1pbgorZnVuY3Rpb25zIG1hcCBhbnkgcnVuLXRpbWUgdmFsdWUgdG8gPGNvZGU+X19BVE9NSUNfU0VRX0NTVDwvY29kZT4gcmF0aGVyCit0aGFuIGludm9rZSBhIHJ1bnRpbWUgbGlicmFyeSBjYWxsIG9yIGlubGluZSBhIHN3aXRjaCBzdGF0ZW1lbnQuICBUaGlzIGlzCitzdGFuZGFyZCBjb21wbGlhbnQsIHNhZmUsIGFuZCB0aGUgc2ltcGxlc3QgYXBwcm9hY2ggZm9yIG5vdy4KKworIDxwPlRoZSBtZW1vcnkgbW9kZWwgcGFyYW1ldGVyIGlzIGEgc2lnbmVkIGludCwgYnV0IG9ubHkgdGhlIGxvd2VyIDggYml0cyBhcmUKK3Jlc2VydmVkIGZvciB0aGUgbWVtb3J5IG1vZGVsLiAgVGhlIHJlbWFpbmRlciBvZiB0aGUgc2lnbmVkIGludCBpcyByZXNlcnZlZAorZm9yIGZ1dHVyZSB1c2UgYW5kIHNob3VsZCBiZSAwLiAgVXNlIG9mIHRoZSBwcmVkZWZpbmVkIGF0b21pYyB2YWx1ZXMKK2Vuc3VyZXMgcHJvcGVyIHVzYWdlLgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiA8dmFyPnR5cGU8L3Zhcj4gPGI+X19hdG9taWNfbG9hZF9uPC9iPiAoPHZhcj50eXBlICpwdHIsIGludCBtZW1tb2RlbDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZmxvYWRfMDA1Zm4tMjkwOCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPjxwPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gaW1wbGVtZW50cyBhbiBhdG9taWMgbG9hZCBvcGVyYXRpb24uICBJdCByZXR1cm5zIHRoZQorY29udGVudHMgb2YgPGNvZGU+KjwvY29kZT48dmFyPnB0cjwvdmFyPi4KKworICAgICAgPHA+VGhlIHZhbGlkIG1lbW9yeSBtb2RlbCB2YXJpYW50cyBhcmUKKzxjb2RlPl9fQVRPTUlDX1JFTEFYRUQ8L2NvZGU+LCA8Y29kZT5fX0FUT01JQ19TRVFfQ1NUPC9jb2RlPiwgPGNvZGU+X19BVE9NSUNfQUNRVUlSRTwvY29kZT4sCithbmQgPGNvZGU+X19BVE9NSUNfQ09OU1VNRTwvY29kZT4uCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2F0b21pY19sb2FkPC9iPiAoPHZhcj50eXBlICpwdHIsIHR5cGUgKnJldCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmbG9hZC0yOTA5Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhpcyBpcyB0aGUgZ2VuZXJpYyB2ZXJzaW9uIG9mIGFuIGF0b21pYyBsb2FkLiAgSXQgcmV0dXJucyB0aGUKK2NvbnRlbnRzIG9mIDxjb2RlPio8L2NvZGU+PHZhcj5wdHI8L3Zhcj4gaW4gPGNvZGU+KjwvY29kZT48dmFyPnJldDwvdmFyPi4KKworICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYXRvbWljX3N0b3JlX248L2I+ICg8dmFyPnR5cGUgKnB0ciwgdHlwZSB2YWwsIGludCBtZW1tb2RlbDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZnN0b3JlXzAwNWZuLTI5MTAiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGJ1aWx0LWluIGZ1bmN0aW9uIGltcGxlbWVudHMgYW4gYXRvbWljIHN0b3JlIG9wZXJhdGlvbi4gIEl0IHdyaXRlcworPHZhcj52YWw8L3Zhcj4gaW50byA8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+LgorCisgICAgICA8cD5UaGUgdmFsaWQgbWVtb3J5IG1vZGVsIHZhcmlhbnRzIGFyZQorPGNvZGU+X19BVE9NSUNfUkVMQVhFRDwvY29kZT4sIDxjb2RlPl9fQVRPTUlDX1NFUV9DU1Q8L2NvZGU+LCBhbmQgPGNvZGU+X19BVE9NSUNfUkVMRUFTRTwvY29kZT4uCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2F0b21pY19zdG9yZTwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlICp2YWwsIGludCBtZW1tb2RlbDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZnN0b3JlLTI5MTEiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGlzIHRoZSBnZW5lcmljIHZlcnNpb24gb2YgYW4gYXRvbWljIHN0b3JlLiAgSXQgc3RvcmVzIHRoZSB2YWx1ZQorb2YgPGNvZGU+KjwvY29kZT48dmFyPnZhbDwvdmFyPiBpbnRvIDxjb2RlPio8L2NvZGU+PHZhcj5wdHI8L3Zhcj4uCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX2V4Y2hhbmdlX248L2I+ICg8dmFyPnR5cGUgKnB0ciwgdHlwZSB2YWwsIGludCBtZW1tb2RlbDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZmV4Y2hhbmdlXzAwNWZuLTI5MTIiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGJ1aWx0LWluIGZ1bmN0aW9uIGltcGxlbWVudHMgYW4gYXRvbWljIGV4Y2hhbmdlIG9wZXJhdGlvbi4gIEl0IHdyaXRlcworPHZhcj52YWw8L3Zhcj4gaW50byA8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+LCBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMgY29udGVudHMgb2YKKzxjb2RlPio8L2NvZGU+PHZhcj5wdHI8L3Zhcj4uCisKKyAgICAgIDxwPlRoZSB2YWxpZCBtZW1vcnkgbW9kZWwgdmFyaWFudHMgYXJlCis8Y29kZT5fX0FUT01JQ19SRUxBWEVEPC9jb2RlPiwgPGNvZGU+X19BVE9NSUNfU0VRX0NTVDwvY29kZT4sIDxjb2RlPl9fQVRPTUlDX0FDUVVJUkU8L2NvZGU+LAorPGNvZGU+X19BVE9NSUNfUkVMRUFTRTwvY29kZT4sIGFuZCA8Y29kZT5fX0FUT01JQ19BQ1FfUkVMPC9jb2RlPi4KKworICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYXRvbWljX2V4Y2hhbmdlPC9iPiAoPHZhcj50eXBlICpwdHIsIHR5cGUgKnZhbCwgdHlwZSAqcmV0LCBpbnQgbWVtbW9kZWw8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZleGNoYW5nZS0yOTEzIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhpcyBpcyB0aGUgZ2VuZXJpYyB2ZXJzaW9uIG9mIGFuIGF0b21pYyBleGNoYW5nZS4gIEl0IHN0b3JlcyB0aGUKK2NvbnRlbnRzIG9mIDxjb2RlPio8L2NvZGU+PHZhcj52YWw8L3Zhcj4gaW50byA8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+LiBUaGUgb3JpZ2luYWwgdmFsdWUKK29mIDxjb2RlPio8L2NvZGU+PHZhcj5wdHI8L3Zhcj4gaXMgY29waWVkIGludG8gPGNvZGU+KjwvY29kZT48dmFyPnJldDwvdmFyPi4KKworICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBib29sIDxiPl9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbjwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlICpleHBlY3RlZCwgdHlwZSBkZXNpcmVkLCBib29sIHdlYWssIGludCBzdWNjZXNzX21lbW1vZGVsLCBpbnQgZmFpbHVyZV9tZW1tb2RlbDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZmNvbXBhcmVfMDA1ZmV4Y2hhbmdlXzAwNWZuLTI5MTQiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT48cD5UaGlzIGJ1aWx0LWluIGZ1bmN0aW9uIGltcGxlbWVudHMgYW4gYXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlIG9wZXJhdGlvbi4gCitUaGlzIGNvbXBhcmVzIHRoZSBjb250ZW50cyBvZiA8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+IHdpdGggdGhlIGNvbnRlbnRzIG9mCis8Y29kZT4qPC9jb2RlPjx2YXI+ZXhwZWN0ZWQ8L3Zhcj4gYW5kIGlmIGVxdWFsLCB3cml0ZXMgPHZhcj5kZXNpcmVkPC92YXI+IGludG8KKzxjb2RlPio8L2NvZGU+PHZhcj5wdHI8L3Zhcj4uICBJZiB0aGV5IGFyZSBub3QgZXF1YWwsIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mCis8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+IGlzIHdyaXR0ZW4gaW50byA8Y29kZT4qPC9jb2RlPjx2YXI+ZXhwZWN0ZWQ8L3Zhcj4uICA8dmFyPndlYWs8L3Zhcj4gaXMgdHJ1ZQorZm9yIHdlYWsgY29tcGFyZV9leGNoYW5nZSwgYW5kIGZhbHNlIGZvciB0aGUgc3Ryb25nIHZhcmlhdGlvbi4gIE1hbnkgdGFyZ2V0cworb25seSBvZmZlciB0aGUgc3Ryb25nIHZhcmlhdGlvbiBhbmQgaWdub3JlIHRoZSBwYXJhbWV0ZXIuICBXaGVuIGluIGRvdWJ0LCB1c2UKK3RoZSBzdHJvbmcgdmFyaWF0aW9uLgorCisgICAgICA8cD5UcnVlIGlzIHJldHVybmVkIGlmIDx2YXI+ZGVzaXJlZDwvdmFyPiBpcyB3cml0dGVuIGludG8KKzxjb2RlPio8L2NvZGU+PHZhcj5wdHI8L3Zhcj4gYW5kIHRoZSBleGVjdXRpb24gaXMgY29uc2lkZXJlZCB0byBjb25mb3JtIHRvIHRoZQorbWVtb3J5IG1vZGVsIHNwZWNpZmllZCBieSA8dmFyPnN1Y2Nlc3NfbWVtbW9kZWw8L3Zhcj4uICBUaGVyZSBhcmUgbm8KK3Jlc3RyaWN0aW9ucyBvbiB3aGF0IG1lbW9yeSBtb2RlbCBjYW4gYmUgdXNlZCBoZXJlLgorCisgICAgICA8cD5GYWxzZSBpcyByZXR1cm5lZCBvdGhlcndpc2UsIGFuZCB0aGUgZXhlY3V0aW9uIGlzIGNvbnNpZGVyZWQgdG8gY29uZm9ybQordG8gPHZhcj5mYWlsdXJlX21lbW1vZGVsPC92YXI+LiBUaGlzIG1lbW9yeSBtb2RlbCBjYW5ub3QgYmUKKzxjb2RlPl9fQVRPTUlDX1JFTEVBU0U8L2NvZGU+IG5vciA8Y29kZT5fX0FUT01JQ19BQ1FfUkVMPC9jb2RlPi4gIEl0IGFsc28gY2Fubm90IGJlIGEKK3N0cm9uZ2VyIG1vZGVsIHRoYW4gdGhhdCBzcGVjaWZpZWQgYnkgPHZhcj5zdWNjZXNzX21lbW1vZGVsPC92YXI+LgorCisgICAgICA8L2Jsb2NrcXVvdGU+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImRlZnVuIj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IGJvb2wgPGI+X19hdG9taWNfY29tcGFyZV9leGNoYW5nZTwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlICpleHBlY3RlZCwgdHlwZSAqZGVzaXJlZCwgYm9vbCB3ZWFrLCBpbnQgc3VjY2Vzc19tZW1tb2RlbCwgaW50IGZhaWx1cmVfbWVtbW9kZWw8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZjb21wYXJlXzAwNWZleGNoYW5nZS0yOTE1Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBnZW5lcmljIHZlcnNpb24gb2YKKzxjb2RlPl9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2U8L2NvZGU+LiAgVGhlIGZ1bmN0aW9uIGlzIHZpcnR1YWxseSBpZGVudGljYWwgdG8KKzxjb2RlPl9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfbjwvY29kZT4sIGV4Y2VwdCB0aGUgZGVzaXJlZCB2YWx1ZSBpcyBhbHNvIGEKK3BvaW50ZXIuCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX2FkZF9mZXRjaDwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlIHZhbCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmYWRkXzAwNWZmZXRjaC0yOTE2Ij48L2E+PC92YXI+PGJyPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX3N1Yl9mZXRjaDwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlIHZhbCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmc3ViXzAwNWZmZXRjaC0yOTE3Ij48L2E+PC92YXI+PGJyPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX2FuZF9mZXRjaDwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlIHZhbCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmYW5kXzAwNWZmZXRjaC0yOTE4Ij48L2E+PC92YXI+PGJyPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX3hvcl9mZXRjaDwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlIHZhbCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmeG9yXzAwNWZmZXRjaC0yOTE5Ij48L2E+PC92YXI+PGJyPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX29yX2ZldGNoPC9iPiAoPHZhcj50eXBlICpwdHIsIHR5cGUgdmFsLCBpbnQgbWVtbW9kZWw8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZvcl8wMDVmZmV0Y2gtMjkyMCI+PC9hPjwvdmFyPjxicj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IDx2YXI+dHlwZTwvdmFyPiA8Yj5fX2F0b21pY19uYW5kX2ZldGNoPC9iPiAoPHZhcj50eXBlICpwdHIsIHR5cGUgdmFsLCBpbnQgbWVtbW9kZWw8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZuYW5kXzAwNWZmZXRjaC0yOTIxIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhlc2UgYnVpbHQtaW4gZnVuY3Rpb25zIHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBzdWdnZXN0ZWQgYnkgdGhlIG5hbWUsIGFuZAorcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gVGhhdCBpcywKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB7ICpwdHIgPHZhcj5vcDwvdmFyPj0gdmFsOyByZXR1cm4gKnB0cjsgfQorPC9wcmU+CisgICAgICA8cD5BbGwgbWVtb3J5IG1vZGVscyBhcmUgdmFsaWQuCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX2ZldGNoX2FkZDwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlIHZhbCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmZmV0Y2hfMDA1ZmFkZC0yOTIyIj48L2E+PC92YXI+PGJyPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX2ZldGNoX3N1YjwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlIHZhbCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmZmV0Y2hfMDA1ZnN1Yi0yOTIzIj48L2E+PC92YXI+PGJyPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX2ZldGNoX2FuZDwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlIHZhbCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmZmV0Y2hfMDA1ZmFuZC0yOTI0Ij48L2E+PC92YXI+PGJyPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX2ZldGNoX3hvcjwvYj4gKDx2YXI+dHlwZSAqcHRyLCB0eXBlIHZhbCwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmZmV0Y2hfMDA1Znhvci0yOTI1Ij48L2E+PC92YXI+PGJyPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogPHZhcj50eXBlPC92YXI+IDxiPl9fYXRvbWljX2ZldGNoX29yPC9iPiAoPHZhcj50eXBlICpwdHIsIHR5cGUgdmFsLCBpbnQgbWVtbW9kZWw8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZmZXRjaF8wMDVmb3ItMjkyNiI+PC9hPjwvdmFyPjxicj4KKyZtZGFzaDsgQnVpbHQtaW4gRnVuY3Rpb246IDx2YXI+dHlwZTwvdmFyPiA8Yj5fX2F0b21pY19mZXRjaF9uYW5kPC9iPiAoPHZhcj50eXBlICpwdHIsIHR5cGUgdmFsLCBpbnQgbWVtbW9kZWw8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZmZXRjaF8wMDVmbmFuZC0yOTI3Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+PHA+VGhlc2UgYnVpbHQtaW4gZnVuY3Rpb25zIHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBzdWdnZXN0ZWQgYnkgdGhlIG5hbWUsIGFuZAorcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IGhhZCBwcmV2aW91c2x5IGJlZW4gaW4gPGNvZGU+KjwvY29kZT48dmFyPnB0cjwvdmFyPi4gIFRoYXQgaXMsCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgeyB0bXAgPSAqcHRyOyAqcHRyIDx2YXI+b3A8L3Zhcj49IHZhbDsgcmV0dXJuIHRtcDsgfQorPC9wcmU+CisgICAgICA8cD5BbGwgbWVtb3J5IG1vZGVscyBhcmUgdmFsaWQuCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogYm9vbCA8Yj5fX2F0b21pY190ZXN0X2FuZF9zZXQ8L2I+ICg8dmFyPnZvaWQgKnB0ciwgaW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmdGVzdF8wMDVmYW5kXzAwNWZzZXQtMjkyOCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPgorICAgICAgPHA+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiBwZXJmb3JtcyBhbiBhdG9taWMgdGVzdC1hbmQtc2V0IG9wZXJhdGlvbiBvbgordGhlIGJ5dGUgYXQgPGNvZGU+KjwvY29kZT48dmFyPnB0cjwvdmFyPi4gIFRoZSBieXRlIGlzIHNldCB0byBzb21lIGltcGxlbWVudGF0aW9uCitkZWZpbmVkIG5vbnplcm8gJmxkcXVvO3NldCZyZHF1bzsgdmFsdWUgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYW5kIG9ubHkKK2lmIHRoZSBwcmV2aW91cyBjb250ZW50cyB3ZXJlICZsZHF1bztzZXQmcmRxdW87LiAKK0l0IHNob3VsZCBiZSBvbmx5IHVzZWQgZm9yIG9wZXJhbmRzIG9mIHR5cGUgPGNvZGU+Ym9vbDwvY29kZT4gb3IgPGNvZGU+Y2hhcjwvY29kZT4uIEZvcgorb3RoZXIgdHlwZXMgb25seSBwYXJ0IG9mIHRoZSB2YWx1ZSBtYXkgYmUgc2V0LgorCisgICAgICA8cD5BbGwgbWVtb3J5IG1vZGVscyBhcmUgdmFsaWQuCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2F0b21pY19jbGVhcjwvYj4gKDx2YXI+Ym9vbCAqcHRyLCBpbnQgbWVtbW9kZWw8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZjbGVhci0yOTI5Ij48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+CisgICAgICA8cD5UaGlzIGJ1aWx0LWluIGZ1bmN0aW9uIHBlcmZvcm1zIGFuIGF0b21pYyBjbGVhciBvcGVyYXRpb24gb24KKzxjb2RlPio8L2NvZGU+PHZhcj5wdHI8L3Zhcj4uICBBZnRlciB0aGUgb3BlcmF0aW9uLCA8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+IGNvbnRhaW5zIDAuIAorSXQgc2hvdWxkIGJlIG9ubHkgdXNlZCBmb3Igb3BlcmFuZHMgb2YgdHlwZSA8Y29kZT5ib29sPC9jb2RlPiBvciA8Y29kZT5jaGFyPC9jb2RlPiBhbmQKK2luIGNvbmp1bmN0aW9uIHdpdGggPGNvZGU+X19hdG9taWNfdGVzdF9hbmRfc2V0PC9jb2RlPi4gCitGb3Igb3RoZXIgdHlwZXMgaXQgbWF5IG9ubHkgY2xlYXIgcGFydGlhbGx5LiBJZiB0aGUgdHlwZSBpcyBub3QgPGNvZGU+Ym9vbDwvY29kZT4KK3ByZWZlciB1c2luZyA8Y29kZT5fX2F0b21pY19zdG9yZTwvY29kZT4uCisKKyAgICAgIDxwPlRoZSB2YWxpZCBtZW1vcnkgbW9kZWwgdmFyaWFudHMgYXJlCis8Y29kZT5fX0FUT01JQ19SRUxBWEVEPC9jb2RlPiwgPGNvZGU+X19BVE9NSUNfU0VRX0NTVDwvY29kZT4sIGFuZAorPGNvZGU+X19BVE9NSUNfUkVMRUFTRTwvY29kZT4uCisKKyAgICAgIDwvYmxvY2txdW90ZT48L2Rpdj4KKworPGRpdiBjbGFzcz0iZGVmdW4iPgorJm1kYXNoOyBCdWlsdC1pbiBGdW5jdGlvbjogdm9pZCA8Yj5fX2F0b21pY190aHJlYWRfZmVuY2U8L2I+ICg8dmFyPmludCBtZW1tb2RlbDwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZnRocmVhZF8wMDVmZmVuY2UtMjkzMCI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPgorICAgICAgPHA+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiBhY3RzIGFzIGEgc3luY2hyb25pemF0aW9uIGZlbmNlIGJldHdlZW4gdGhyZWFkcworYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtZW1vcnkgbW9kZWwuCisKKyAgICAgIDxwPkFsbCBtZW1vcnkgb3JkZXJzIGFyZSB2YWxpZC4KKworICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiB2b2lkIDxiPl9fYXRvbWljX3NpZ25hbF9mZW5jZTwvYj4gKDx2YXI+aW50IG1lbW1vZGVsPC92YXI+KTx2YXI+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmF0b21pY18wMDVmc2lnbmFsXzAwNWZmZW5jZS0yOTMxIj48L2E+PC92YXI+PGJyPgorPGJsb2NrcXVvdGU+CisgICAgICA8cD5UaGlzIGJ1aWx0LWluIGZ1bmN0aW9uIGFjdHMgYXMgYSBzeW5jaHJvbml6YXRpb24gZmVuY2UgYmV0d2VlbiBhIHRocmVhZAorYW5kIHNpZ25hbCBoYW5kbGVycyBiYXNlZCBpbiB0aGUgc2FtZSB0aHJlYWQuCisKKyAgICAgIDxwPkFsbCBtZW1vcnkgb3JkZXJzIGFyZSB2YWxpZC4KKworICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBib29sIDxiPl9fYXRvbWljX2Fsd2F5c19sb2NrX2ZyZWU8L2I+ICg8dmFyPnNpemVfdCBzaXplLCB2b2lkICpwdHI8L3Zhcj4pPHZhcj48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmYXRvbWljXzAwNWZhbHdheXNfMDA1ZmxvY2tfMDA1ZmZyZWUtMjkzMiI+PC9hPjwvdmFyPjxicj4KKzxibG9ja3F1b3RlPgorICAgICAgPHA+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgb2JqZWN0cyBvZiA8dmFyPnNpemU8L3Zhcj4gYnl0ZXMgYWx3YXlzCitnZW5lcmF0ZSBsb2NrIGZyZWUgYXRvbWljIGluc3RydWN0aW9ucyBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIAorPHZhcj5zaXplPC92YXI+IG11c3QgcmVzb2x2ZSB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBhbmQgdGhlIHJlc3VsdCBhbHNvCityZXNvbHZlcyB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudC4KKworICAgICAgPHA+PHZhcj5wdHI8L3Zhcj4gaXMgYW4gb3B0aW9uYWwgcG9pbnRlciB0byB0aGUgb2JqZWN0IHRoYXQgbWF5IGJlIHVzZWQgdG8gZGV0ZXJtaW5lCithbGlnbm1lbnQuICBBIHZhbHVlIG9mIDAgaW5kaWNhdGVzIHR5cGljYWwgYWxpZ25tZW50IHNob3VsZCBiZSB1c2VkLiAgVGhlCitjb21waWxlciBtYXkgYWxzbyBpZ25vcmUgdGhpcyBwYXJhbWV0ZXIuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaWYgKF9hdG9taWNfYWx3YXlzX2xvY2tfZnJlZSAoc2l6ZW9mIChsb25nIGxvbmcpLCAwKSkKKzwvcHJlPgorICAgICAgPC9ibG9ja3F1b3RlPjwvZGl2PgorCis8ZGl2IGNsYXNzPSJkZWZ1biI+CismbWRhc2g7IEJ1aWx0LWluIEZ1bmN0aW9uOiBib29sIDxiPl9fYXRvbWljX2lzX2xvY2tfZnJlZTwvYj4gKDx2YXI+c2l6ZV90IHNpemUsIHZvaWQgKnB0cjwvdmFyPik8dmFyPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZhdG9taWNfMDA1ZmlzXzAwNWZsb2NrXzAwNWZmcmVlLTI5MzMiPjwvYT48L3Zhcj48YnI+Cis8YmxvY2txdW90ZT4KKyAgICAgIDxwPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIG9iamVjdHMgb2YgPHZhcj5zaXplPC92YXI+IGJ5dGVzIGFsd2F5cworZ2VuZXJhdGUgbG9jayBmcmVlIGF0b21pYyBpbnN0cnVjdGlvbnMgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiAgSWYKK2l0IGlzIG5vdCBrbm93biB0byBiZSBsb2NrIGZyZWUgYSBjYWxsIGlzIG1hZGUgdG8gYSBydW50aW1lIHJvdXRpbmUgbmFtZWQKKzxjb2RlPl9fYXRvbWljX2lzX2xvY2tfZnJlZTwvY29kZT4uCisKKyAgICAgIDxwPjx2YXI+cHRyPC92YXI+IGlzIGFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIG9iamVjdCB0aGF0IG1heSBiZSB1c2VkIHRvIGRldGVybWluZQorYWxpZ25tZW50LiAgQSB2YWx1ZSBvZiAwIGluZGljYXRlcyB0eXBpY2FsIGFsaWdubWVudCBzaG91bGQgYmUgdXNlZC4gIFRoZQorY29tcGlsZXIgbWF5IGFsc28gaWdub3JlIHRoaXMgcGFyYW1ldGVyLiAKKzwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL18wMDVmXzAwNWZpbnQxMjguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvXzAwNWZfMDA1ZmludDEyOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMDYyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL18wMDVmXzAwNWZpbnQxMjguaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5fX2ludDEyOCAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiIHRpdGxlPSJDb25kaXRpb25hbHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMb25nLUxvbmcuaHRtbCNMb25nLUxvbmciIHRpdGxlPSJMb25nIExvbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iX19pbnQxMjgiPjwvYT4KKzxhIG5hbWU9ImdfdF8wMDVmXzAwNWZpbnQxMjgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTG9uZy1Mb25nLmh0bWwjTG9uZy1Mb25nIj5Mb25nIExvbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb25kaXRpb25hbHMuaHRtbCNDb25kaXRpb25hbHMiPkNvbmRpdGlvbmFsczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni44IDEyOC1iaXQgaW50ZWdlcnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDVmXzAwNWZpbnQxMjhfMDA3ZC1kYXRhLXR5cGVzLTI0MzciPjwvYT4KK0FzIGFuIGV4dGVuc2lvbiB0aGUgaW50ZWdlciBzY2FsYXIgdHlwZSA8Y29kZT5fX2ludDEyODwvY29kZT4gaXMgc3VwcG9ydGVkIGZvcgordGFyZ2V0cyB3aGljaCBoYXZlIGFuIGludGVnZXIgbW9kZSB3aWRlIGVub3VnaCB0byBob2xkIDEyOCBiaXRzLiAKK1NpbXBseSB3cml0ZSA8Y29kZT5fX2ludDEyODwvY29kZT4gZm9yIGEgc2lnbmVkIDEyOC1iaXQgaW50ZWdlciwgb3IKKzxjb2RlPnVuc2lnbmVkIF9faW50MTI4PC9jb2RlPiBmb3IgYW4gdW5zaWduZWQgMTI4LWJpdCBpbnRlZ2VyLiAgVGhlcmUgaXMgbm8KK3N1cHBvcnQgaW4gR0NDIGZvciBleHByZXNzaW5nIGFuIGludGVnZXIgY29uc3RhbnQgb2YgdHlwZSA8Y29kZT5fX2ludDEyODwvY29kZT4KK2ZvciB0YXJnZXRzIHdpdGggPGNvZGU+bG9uZyBsb25nPC9jb2RlPiBpbnRlZ2VyIGxlc3MgdGhhbiAxMjggYml0cyB3aWRlLgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9fMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9fMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOGYzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL18wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zLmh0bWwKQEAgLTAsMCArMSwxNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPl9fc3luYyBCdWlsdGlucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPZmZzZXRvZi5odG1sI09mZnNldG9mIiB0aXRsZT0iT2Zmc2V0b2YiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyIgdGl0bGU9Il9fYXRvbWljIEJ1aWx0aW5zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Il9fc3luYy1CdWlsdGlucyI+PC9hPgorPGEgbmFtZT0iZ190XzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT2Zmc2V0b2YuaHRtbCNPZmZzZXRvZiI+T2Zmc2V0b2Y8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNTEgTGVnYWN5IF9fc3luYyBCdWlsdC1pbiBGdW5jdGlvbnMgZm9yIEF0b21pYyBNZW1vcnkgQWNjZXNzPC9oMz4KKworPHA+VGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5jdGlvbnMKK2FyZSBpbnRlbmRlZCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhvc2UgZGVzY3JpYmVkCitpbiB0aGUgPGNpdGU+SW50ZWwgSXRhbml1bSBQcm9jZXNzb3Itc3BlY2lmaWMgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZTwvY2l0ZT4sCitzZWN0aW9uIDcuNC4gIEFzIHN1Y2gsIHRoZXkgZGVwYXJ0IGZyb20gdGhlIG5vcm1hbCBHQ0MgcHJhY3RpY2Ugb2YgdXNpbmcKK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9fYnVpbHRpbl88L3NwYW4+PC9zYW1wPiZyc3F1bzsgcHJlZml4LCBhbmQgZnVydGhlciB0aGF0IHRoZXkgYXJlIG92ZXJsb2FkZWQgc3VjaCB0aGF0Cit0aGV5IHdvcmsgb24gbXVsdGlwbGUgdHlwZXMuCisKKyA8cD5UaGUgZGVmaW5pdGlvbiBnaXZlbiBpbiB0aGUgSW50ZWwgZG9jdW1lbnRhdGlvbiBhbGxvd3Mgb25seSBmb3IgdGhlIHVzZSBvZgordGhlIHR5cGVzIDxjb2RlPmludDwvY29kZT4sIDxjb2RlPmxvbmc8L2NvZGU+LCA8Y29kZT5sb25nIGxvbmc8L2NvZGU+IGFzIHdlbGwgYXMgdGhlaXIgdW5zaWduZWQKK2NvdW50ZXJwYXJ0cy4gIEdDQyBhbGxvd3MgYW55IGludGVncmFsIHNjYWxhciBvciBwb2ludGVyIHR5cGUgdGhhdCBpcworMSwgMiwgNCBvciA4IGJ5dGVzIGluIGxlbmd0aC4KKworIDxwPk5vdCBhbGwgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IGFsbCB0YXJnZXQgcHJvY2Vzc29ycy4gIElmIGEgcGFydGljdWxhcgorb3BlcmF0aW9uIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBvbiB0aGUgdGFyZ2V0IHByb2Nlc3NvciwgYSB3YXJuaW5nIGlzCitnZW5lcmF0ZWQgYW5kIGEgY2FsbCBhbiBleHRlcm5hbCBmdW5jdGlvbiBpcyBnZW5lcmF0ZWQuICBUaGUgZXh0ZXJuYWwKK2Z1bmN0aW9uIGNhcnJpZXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgYnVpbHQtaW4gdmVyc2lvbiwKK3dpdGggYW4gYWRkaXRpb25hbCBzdWZmaXgKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Xzwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+JnJzcXVvOyB3aGVyZSA8dmFyPm48L3Zhcj4gaXMgdGhlIHNpemUgb2YgdGhlIGRhdGEgdHlwZS4KKworPCEtLSA/Pz8gU2hvdWxkIHdlIGhhdmUgYSBtZWNoYW5pc20gdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nPyAgVGhpcyBpcyBhbG1vc3QgLS0+Cis8IS0tIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIHRoZSBvcGVyYXRpb24gdW5kZXIgdGhlIGNvbnRyb2wgb2YgYW4gZXh0ZXJuYWwgLS0+Cis8IS0tIG11dGV4LiAtLT4KKyA8cD5JbiBtb3N0IGNhc2VzLCB0aGVzZSBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGNvbnNpZGVyZWQgYSA8ZGZuPmZ1bGwgYmFycmllcjwvZGZuPi4gCitUaGF0IGlzLAorbm8gbWVtb3J5IG9wZXJhbmQgaXMgbW92ZWQgYWNyb3NzIHRoZSBvcGVyYXRpb24sIGVpdGhlciBmb3J3YXJkIG9yCitiYWNrd2FyZC4gIEZ1cnRoZXIsIGluc3RydWN0aW9ucyBhcmUgaXNzdWVkIGFzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZQorcHJvY2Vzc29yIGZyb20gc3BlY3VsYXRpbmcgbG9hZHMgYWNyb3NzIHRoZSBvcGVyYXRpb24gYW5kIGZyb20gcXVldWluZyBzdG9yZXMKK2FmdGVyIHRoZSBvcGVyYXRpb24uCisKKyA8cD5BbGwgb2YgdGhlIHJvdXRpbmVzIGFyZSBkZXNjcmliZWQgaW4gdGhlIEludGVsIGRvY3VtZW50YXRpb24gdG8gdGFrZQorJmxkcXVvO2FuIG9wdGlvbmFsIGxpc3Qgb2YgdmFyaWFibGVzIHByb3RlY3RlZCBieSB0aGUgbWVtb3J5IGJhcnJpZXImcmRxdW87LiAgSXQncworbm90IGNsZWFyIHdoYXQgaXMgbWVhbnQgYnkgdGhhdDsgaXQgY291bGQgbWVhbiB0aGF0IDxlbT5vbmx5PC9lbT4gdGhlCitmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBwcm90ZWN0ZWQsIG9yIGl0IGNvdWxkIG1lYW4gdGhhdCB0aGVzZSB2YXJpYWJsZXMKK3Nob3VsZCBpbiBhZGRpdGlvbiBiZSBwcm90ZWN0ZWQuICBBdCBwcmVzZW50IEdDQyBpZ25vcmVzIHRoaXMgbGlzdCBhbmQKK3Byb3RlY3RzIGFsbCB2YXJpYWJsZXMgdGhhdCBhcmUgZ2xvYmFsbHkgYWNjZXNzaWJsZS4gIElmIGluIHRoZSBmdXR1cmUKK3dlIG1ha2Ugc29tZSB1c2Ugb2YgdGhpcyBsaXN0LCBhbiBlbXB0eSBsaXN0IHdpbGwgY29udGludWUgdG8gbWVhbiBhbGwKK2dsb2JhbGx5IGFjY2Vzc2libGUgdmFyaWFibGVzLgorCisgICAgIDxkbD4KKzxkdD48dmFyPnR5cGU8L3Zhcj48Y29kZT4gX19zeW5jX2ZldGNoX2FuZF9hZGQgKDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gKnB0ciwgPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiB2YWx1ZSwgLi4uKTwvY29kZT48ZHQ+PHZhcj50eXBlPC92YXI+PGNvZGU+IF9fc3luY19mZXRjaF9hbmRfc3ViICg8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+ICpwdHIsIDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gdmFsdWUsIC4uLik8L2NvZGU+PGR0Pjx2YXI+dHlwZTwvdmFyPjxjb2RlPiBfX3N5bmNfZmV0Y2hfYW5kX29yICg8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+ICpwdHIsIDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gdmFsdWUsIC4uLik8L2NvZGU+PGR0Pjx2YXI+dHlwZTwvdmFyPjxjb2RlPiBfX3N5bmNfZmV0Y2hfYW5kX2FuZCAoPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiAqcHRyLCA8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+IHZhbHVlLCAuLi4pPC9jb2RlPjxkdD48dmFyPnR5cGU8L3Zhcj48Y29kZT4gX19zeW5jX2ZldGNoX2FuZF94b3IgKDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gKnB0ciwgPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiB2YWx1ZSwgLi4uKTwvY29kZT48ZHQ+PHZhcj50eXBlPC92YXI+PGNvZGU+IF9fc3luY19mZXRjaF9hbmRfbmFuZCAoPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiAqcHRyLCA8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+IHZhbHVlLCAuLi4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmZmV0Y2hfMDA1ZmFuZF8wMDVmYWRkLTI4OTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmZmV0Y2hfMDA1ZmFuZF8wMDVmc3ViLTI4OTIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmZmV0Y2hfMDA1ZmFuZF8wMDVmb3ItMjg5MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZmZXRjaF8wMDVmYW5kXzAwNWZhbmQtMjg5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZmZXRjaF8wMDVmYW5kXzAwNWZ4b3ItMjg5NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZmZXRjaF8wMDVmYW5kXzAwNWZuYW5kLTI4OTYiPjwvYT5UaGVzZSBidWlsdC1pbiBmdW5jdGlvbnMgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIHN1Z2dlc3RlZCBieSB0aGUgbmFtZSwgYW5kCityZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IGhhZCBwcmV2aW91c2x5IGJlZW4gaW4gbWVtb3J5LiAgVGhhdCBpcywKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB7IHRtcCA9ICpwdHI7ICpwdHIgPHZhcj5vcDwvdmFyPj0gdmFsdWU7IHJldHVybiB0bXA7IH0KKyAgICAgICAgICB7IHRtcCA9ICpwdHI7ICpwdHIgPSB+KHRtcCAmYW1wOyB2YWx1ZSk7IHJldHVybiB0bXA7IH0gICAvLyBuYW5kCis8L3ByZT4KKyAgICAgPHA+PGVtPk5vdGU6PC9lbT4gR0NDIDQuNCBhbmQgbGF0ZXIgaW1wbGVtZW50IDxjb2RlPl9fc3luY19mZXRjaF9hbmRfbmFuZDwvY29kZT4KK2FzIDxjb2RlPipwdHIgPSB+KHRtcCAmYW1wOyB2YWx1ZSk8L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+KnB0ciA9IH50bXAgJmFtcDsgdmFsdWU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PHZhcj50eXBlPC92YXI+PGNvZGU+IF9fc3luY19hZGRfYW5kX2ZldGNoICg8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+ICpwdHIsIDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gdmFsdWUsIC4uLik8L2NvZGU+PGR0Pjx2YXI+dHlwZTwvdmFyPjxjb2RlPiBfX3N5bmNfc3ViX2FuZF9mZXRjaCAoPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiAqcHRyLCA8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+IHZhbHVlLCAuLi4pPC9jb2RlPjxkdD48dmFyPnR5cGU8L3Zhcj48Y29kZT4gX19zeW5jX29yX2FuZF9mZXRjaCAoPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiAqcHRyLCA8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+IHZhbHVlLCAuLi4pPC9jb2RlPjxkdD48dmFyPnR5cGU8L3Zhcj48Y29kZT4gX19zeW5jX2FuZF9hbmRfZmV0Y2ggKDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gKnB0ciwgPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiB2YWx1ZSwgLi4uKTwvY29kZT48ZHQ+PHZhcj50eXBlPC92YXI+PGNvZGU+IF9fc3luY194b3JfYW5kX2ZldGNoICg8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+ICpwdHIsIDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gdmFsdWUsIC4uLik8L2NvZGU+PGR0Pjx2YXI+dHlwZTwvdmFyPjxjb2RlPiBfX3N5bmNfbmFuZF9hbmRfZmV0Y2ggKDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gKnB0ciwgPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiB2YWx1ZSwgLi4uKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZmFkZF8wMDVmYW5kXzAwNWZmZXRjaC0yODk3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZnN1Yl8wMDVmYW5kXzAwNWZmZXRjaC0yODk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1Zm9yXzAwNWZhbmRfMDA1ZmZldGNoLTI4OTkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmYW5kXzAwNWZhbmRfMDA1ZmZldGNoLTI5MDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmeG9yXzAwNWZhbmRfMDA1ZmZldGNoLTI5MDEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmc3luY18wMDVmbmFuZF8wMDVmYW5kXzAwNWZmZXRjaC0yOTAyIj48L2E+VGhlc2UgYnVpbHQtaW4gZnVuY3Rpb25zIHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBzdWdnZXN0ZWQgYnkgdGhlIG5hbWUsIGFuZAorcmV0dXJuIHRoZSBuZXcgdmFsdWUuICBUaGF0IGlzLAorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHsgKnB0ciA8dmFyPm9wPC92YXI+PSB2YWx1ZTsgcmV0dXJuICpwdHI7IH0KKyAgICAgICAgICB7ICpwdHIgPSB+KCpwdHIgJmFtcDsgdmFsdWUpOyByZXR1cm4gKnB0cjsgfSAgIC8vIG5hbmQKKzwvcHJlPgorICAgICA8cD48ZW0+Tm90ZTo8L2VtPiBHQ0MgNC40IGFuZCBsYXRlciBpbXBsZW1lbnQgPGNvZGU+X19zeW5jX25hbmRfYW5kX2ZldGNoPC9jb2RlPgorYXMgPGNvZGU+KnB0ciA9IH4oKnB0ciAmYW1wOyB2YWx1ZSk8L2NvZGU+IGluc3RlYWQgb2YKKzxjb2RlPipwdHIgPSB+KnB0ciAmYW1wOyB2YWx1ZTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5ib29sIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gKnB0ciwgPC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxjb2RlPiBvbGR2YWwsIDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gbmV3dmFsLCAuLi4pPC9jb2RlPjxkdD48dmFyPnR5cGU8L3Zhcj48Y29kZT4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwICg8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+ICpwdHIsIDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gb2xkdmFsLCA8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+IG5ld3ZhbCwgLi4uKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZmJvb2xfMDA1ZmNvbXBhcmVfMDA1ZmFuZF8wMDVmc3dhcC0yOTAzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZnZhbF8wMDVmY29tcGFyZV8wMDVmYW5kXzAwNWZzd2FwLTI5MDQiPjwvYT5UaGVzZSBidWlsdC1pbiBmdW5jdGlvbnMgcGVyZm9ybSBhbiBhdG9taWMgY29tcGFyZSBhbmQgc3dhcC4gCitUaGF0IGlzLCBpZiB0aGUgY3VycmVudAordmFsdWUgb2YgPGNvZGU+KjwvY29kZT48dmFyPnB0cjwvdmFyPiBpcyA8dmFyPm9sZHZhbDwvdmFyPiwgdGhlbiB3cml0ZSA8dmFyPm5ld3ZhbDwvdmFyPiBpbnRvCis8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+LgorCisgICAgIDxwPlRoZSAmbGRxdW87Ym9vbCZyZHF1bzsgdmVyc2lvbiByZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmlzb24gaXMgc3VjY2Vzc2Z1bCBhbmQKKzx2YXI+bmV3dmFsPC92YXI+IGlzIHdyaXR0ZW4uICBUaGUgJmxkcXVvO3ZhbCZyZHF1bzsgdmVyc2lvbiByZXR1cm5zIHRoZSBjb250ZW50cworb2YgPGNvZGU+KjwvY29kZT48dmFyPnB0cjwvdmFyPiBiZWZvcmUgdGhlIG9wZXJhdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPl9fc3luY19zeW5jaHJvbml6ZSAoLi4uKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZnN5bmNocm9uaXplLTI5MDUiPjwvYT5UaGlzIGJ1aWx0LWluIGZ1bmN0aW9uIGlzc3VlcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIuCisKKyAgICAgPGJyPjxkdD48dmFyPnR5cGU8L3Zhcj48Y29kZT4gX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0ICg8L2NvZGU+PHZhcj50eXBlPC92YXI+PGNvZGU+ICpwdHIsIDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gdmFsdWUsIC4uLik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZzeW5jXzAwNWZsb2NrXzAwNWZ0ZXN0XzAwNWZhbmRfMDA1ZnNldC0yOTA2Ij48L2E+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiwgYXMgZGVzY3JpYmVkIGJ5IEludGVsLCBpcyBub3QgYSB0cmFkaXRpb25hbCB0ZXN0LWFuZC1zZXQKK29wZXJhdGlvbiwgYnV0IHJhdGhlciBhbiBhdG9taWMgZXhjaGFuZ2Ugb3BlcmF0aW9uLiAgSXQgd3JpdGVzIDx2YXI+dmFsdWU8L3Zhcj4KK2ludG8gPGNvZGU+KjwvY29kZT48dmFyPnB0cjwvdmFyPiwgYW5kIHJldHVybnMgdGhlIHByZXZpb3VzIGNvbnRlbnRzIG9mCis8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+LgorCisgICAgIDxwPk1hbnkgdGFyZ2V0cyBoYXZlIG9ubHkgbWluaW1hbCBzdXBwb3J0IGZvciBzdWNoIGxvY2tzLCBhbmQgZG8gbm90IHN1cHBvcnQKK2EgZnVsbCBleGNoYW5nZSBvcGVyYXRpb24uICBJbiB0aGlzIGNhc2UsIGEgdGFyZ2V0IG1heSBzdXBwb3J0IHJlZHVjZWQKK2Z1bmN0aW9uYWxpdHkgaGVyZSBieSB3aGljaCB0aGUgPGVtPm9ubHk8L2VtPiB2YWxpZCB2YWx1ZSB0byBzdG9yZSBpcyB0aGUKK2ltbWVkaWF0ZSBjb25zdGFudCAxLiAgVGhlIGV4YWN0IHZhbHVlIGFjdHVhbGx5IHN0b3JlZCBpbiA8Y29kZT4qPC9jb2RlPjx2YXI+cHRyPC92YXI+CitpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgorCisgICAgIDxwPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gaXMgbm90IGEgZnVsbCBiYXJyaWVyLAorYnV0IHJhdGhlciBhbiA8ZGZuPmFjcXVpcmUgYmFycmllcjwvZGZuPi4gCitUaGlzIG1lYW5zIHRoYXQgcmVmZXJlbmNlcyBhZnRlciB0aGUgb3BlcmF0aW9uIGNhbm5vdCBtb3ZlIHRvIChvciBiZQorc3BlY3VsYXRlZCB0bykgYmVmb3JlIHRoZSBvcGVyYXRpb24sIGJ1dCBwcmV2aW91cyBtZW1vcnkgc3RvcmVzIG1heSBub3QKK2JlIGdsb2JhbGx5IHZpc2libGUgeWV0LCBhbmQgcHJldmlvdXMgbWVtb3J5IGxvYWRzIG1heSBub3QgeWV0IGJlCitzYXRpc2ZpZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT52b2lkIF9fc3luY19sb2NrX3JlbGVhc2UgKDwvY29kZT48dmFyPnR5cGU8L3Zhcj48Y29kZT4gKnB0ciwgLi4uKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZnN5bmNfMDA1ZmxvY2tfMDA1ZnJlbGVhc2UtMjkwNyI+PC9hPlRoaXMgYnVpbHQtaW4gZnVuY3Rpb24gcmVsZWFzZXMgdGhlIGxvY2sgYWNxdWlyZWQgYnkKKzxjb2RlPl9fc3luY19sb2NrX3Rlc3RfYW5kX3NldDwvY29kZT4uIAorTm9ybWFsbHkgdGhpcyBtZWFucyB3cml0aW5nIHRoZSBjb25zdGFudCAwIHRvIDxjb2RlPio8L2NvZGU+PHZhcj5wdHI8L3Zhcj4uCisKKyAgICAgPHA+VGhpcyBidWlsdC1pbiBmdW5jdGlvbiBpcyBub3QgYSBmdWxsIGJhcnJpZXIsCitidXQgcmF0aGVyIGEgPGRmbj5yZWxlYXNlIGJhcnJpZXI8L2Rmbj4uIAorVGhpcyBtZWFucyB0aGF0IGFsbCBwcmV2aW91cyBtZW1vcnkgc3RvcmVzIGFyZSBnbG9iYWxseSB2aXNpYmxlLCBhbmQgYWxsCitwcmV2aW91cyBtZW1vcnkgbG9hZHMgaGF2ZSBiZWVuIHNhdGlzZmllZCwgYnV0IGZvbGxvd2luZyBtZW1vcnkgcmVhZHMKK2FyZSBub3QgcHJldmVudGVkIGZyb20gYmVpbmcgc3BlY3VsYXRlZCB0byBiZWZvcmUgdGhlIGJhcnJpZXIuIAorPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvYzk5XzAwMmRsaWtlLWZhc3QtZW51bWVyYXRpb24tc3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2M5OV8wMDJkbGlrZS1mYXN0LWVudW1lcmF0aW9uLXN5bnRheC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MWEyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2M5OV8wMDJkbGlrZS1mYXN0LWVudW1lcmF0aW9uLXN5bnRheC5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmM5OS1saWtlIGZhc3QgZW51bWVyYXRpb24gc3ludGF4IC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkZhc3QtZW51bWVyYXRpb24uaHRtbCNGYXN0LWVudW1lcmF0aW9uIiB0aXRsZT0iRmFzdCBlbnVtZXJhdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlVzaW5nLWZhc3QtZW51bWVyYXRpb24uaHRtbCNVc2luZy1mYXN0LWVudW1lcmF0aW9uIiB0aXRsZT0iVXNpbmcgZmFzdCBlbnVtZXJhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZhc3QtZW51bWVyYXRpb24tZGV0YWlscy5odG1sI0Zhc3QtZW51bWVyYXRpb24tZGV0YWlscyIgdGl0bGU9IkZhc3QgZW51bWVyYXRpb24gZGV0YWlscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjOTktbGlrZS1mYXN0LWVudW1lcmF0aW9uLXN5bnRheCI+PC9hPgorPGEgbmFtZT0iYzk5XzAwMmRsaWtlLWZhc3QtZW51bWVyYXRpb24tc3ludGF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZhc3QtZW51bWVyYXRpb24tZGV0YWlscy5odG1sI0Zhc3QtZW51bWVyYXRpb24tZGV0YWlscyI+RmFzdCBlbnVtZXJhdGlvbiBkZXRhaWxzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVXNpbmctZmFzdC1lbnVtZXJhdGlvbi5odG1sI1VzaW5nLWZhc3QtZW51bWVyYXRpb24iPlVzaW5nIGZhc3QgZW51bWVyYXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJGYXN0LWVudW1lcmF0aW9uLmh0bWwjRmFzdC1lbnVtZXJhdGlvbiI+RmFzdCBlbnVtZXJhdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjguOS4yIGM5OS1saWtlIGZhc3QgZW51bWVyYXRpb24gc3ludGF4PC9oND4KKworPHA+QSBjOTktbGlrZSBkZWNsYXJhdGlvbiBzeW50YXggaXMgYWxzbyBhbGxvd2VkOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBpZCBhcnJheSA9IC4uLjsKKyAgICAgCisgICAgICAgZm9yIChpZCBvYmplY3QgaW4gYXJyYXkpCisgICAgICAgeworICAgICAgICAgLyogRG8gc29tZXRoaW5nIHdpdGggJ29iamVjdCcgICovCisgICAgICAgfQorPC9wcmU+CisgPHA+dGhpcyBpcyBjb21wbGV0ZWx5IGVxdWl2YWxlbnQgdG86CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIGlkIGFycmF5ID0gLi4uOworICAgICAKKyAgICAgICB7CisgICAgICAgICBpZCBvYmplY3Q7CisgICAgICAgICBmb3IgKG9iamVjdCBpbiBhcnJheSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogRG8gc29tZXRoaW5nIHdpdGggJ29iamVjdCcgICovCisgICAgICAgICB9CisgICAgICAgfQorPC9wcmU+CisgPHA+YnV0IGNhbiBzYXZlIHNvbWUgdHlwaW5nLgorCisgPHA+Tm90ZSB0aGF0IHRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1jOTk8L3NwYW4+PC9zYW1wPiBpcyBub3QgcmVxdWlyZWQgdG8gYWxsb3cgdGhpcworc3ludGF4IGluIE9iamVjdGl2ZS1DLgorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvY29tcGF0aWJpbGl0eV8wMDVmYWxpYXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvY29tcGF0aWJpbGl0eV8wMDVmYWxpYXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGI3YzlhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9jb21wYXRpYmlsaXR5XzAwNWZhbGlhcy5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmNvbXBhdGliaWxpdHlfYWxpYXMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIiB0aXRsZT0iT2JqZWN0aXZlLUMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb25zdGFudC1zdHJpbmctb2JqZWN0cy5odG1sI0NvbnN0YW50LXN0cmluZy1vYmplY3RzIiB0aXRsZT0iQ29uc3RhbnQgc3RyaW5nIG9iamVjdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFeGNlcHRpb25zLmh0bWwjRXhjZXB0aW9ucyIgdGl0bGU9IkV4Y2VwdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY29tcGF0aWJpbGl0eV9hbGlhcyI+PC9hPgorPGEgbmFtZT0iY29tcGF0aWJpbGl0eV8wMDVmYWxpYXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXhjZXB0aW9ucy5odG1sI0V4Y2VwdGlvbnMiPkV4Y2VwdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb25zdGFudC1zdHJpbmctb2JqZWN0cy5odG1sI0NvbnN0YW50LXN0cmluZy1vYmplY3RzIj5Db25zdGFudCBzdHJpbmcgb2JqZWN0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik9iamVjdGl2ZV8wMDJkQy5odG1sI09iamVjdGl2ZV8wMDJkQyI+T2JqZWN0aXZlLUM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjYgY29tcGF0aWJpbGl0eV9hbGlhczwvaDM+CisKKzxwPlRoZSBrZXl3b3JkIDxjb2RlPkBjb21wYXRpYmlsaXR5X2FsaWFzPC9jb2RlPiBhbGxvd3MgeW91IHRvIGRlZmluZSBhIGNsYXNzIG5hbWUKK2FzIGVxdWl2YWxlbnQgdG8gYW5vdGhlciBjbGFzcyBuYW1lLiAgRm9yIGV4YW1wbGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBAY29tcGF0aWJpbGl0eV9hbGlhcyBXT0FwcGxpY2F0aW9uIEdTV0FwcGxpY2F0aW9uOworPC9wcmU+CisgPHA+dGVsbHMgdGhlIGNvbXBpbGVyIHRoYXQgZWFjaCB0aW1lIGl0IGVuY291bnRlcnMgPGNvZGU+V09BcHBsaWNhdGlvbjwvY29kZT4gYXMKK2EgY2xhc3MgbmFtZSwgaXQgc2hvdWxkIHJlcGxhY2UgaXQgd2l0aCA8Y29kZT5HU1dBcHBsaWNhdGlvbjwvY29kZT4gKHRoYXQgaXMsCis8Y29kZT5XT0FwcGxpY2F0aW9uPC9jb2RlPiBpcyBqdXN0IGFuIGFsaWFzIGZvciA8Y29kZT5HU1dBcHBsaWNhdGlvbjwvY29kZT4pLgorCisgPHA+VGhlcmUgYXJlIHNvbWUgY29uc3RyYWludHMgb24gaG93IHRoaXMgY2FuIGJlIHVzZWQmbWRhc2g7CisKKyAgICAgPHVsPgorPGxpPjxjb2RlPldPQXBwbGljYXRpb248L2NvZGU+ICh0aGUgYWxpYXMpIG11c3Qgbm90IGJlIGFuIGV4aXN0aW5nIGNsYXNzOworCisgICAgIDxsaT48Y29kZT5HU1dBcHBsaWNhdGlvbjwvY29kZT4gKHRoZSByZWFsIGNsYXNzKSBtdXN0IGJlIGFuIGV4aXN0aW5nIGNsYXNzLgorCisgPC91bD4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvY3BwLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvY3BwLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGJhZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9jcHAucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvY3BwaW50ZXJuYWxzLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvY3BwaW50ZXJuYWxzLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjIxZjRiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9jcHBpbnRlcm5hbHMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvZGFzaE1GLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2Rhc2hNRi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZTk5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2Rhc2hNRi5odG1sCkBAIC0wLDAgKzEgQEAKKzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IHVybD1QcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI2Rhc2hNRiI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2Zkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvZmRvbGxhcnNfMDAyZGluXzAwMmRpZGVudGlmaWVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGE2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2Zkb2xsYXJzXzAwMmRpbl8wMDJkaWRlbnRpZmllcnMuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9UHJlcHJvY2Vzc29yLU9wdGlvbnMuaHRtbCNmZG9sbGFycyUyZGluJTJkaWRlbnRpZmllcnMiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9nY2MucGRmIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9nY2MucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzI1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2djYy5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9nY2NpbnN0YWxsLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvZ2NjaW5zdGFsbC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkNjFhZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvZ2NjaW5zdGFsbC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9nY2NpbnQucGRmIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9nY2NpbnQucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYzMzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2djY2ludC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9nZm9ydHJhbi5wZGYgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2dmb3J0cmFuLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2Y2MjRjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9nZm9ydHJhbi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9pMzg2LVR5cGUtQXR0cmlidXRlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9pMzg2LVR5cGUtQXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDI2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2kzODYtVHlwZS1BdHRyaWJ1dGVzLmh0bWwKQEAgLTAsMCArMSBAQAorPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgdXJsPVR5cGUtQXR0cmlidXRlcy5odG1sI2kzODYlMjBUeXBlJTIwQXR0cmlidXRlcyI+CmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2kzODYtVmFyaWFibGUtQXR0cmlidXRlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9pMzg2LVZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRhNDVjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9pMzg2LVZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbApAQCAtMCwwICsxIEBACis8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyB1cmw9VmFyaWFibGUtQXR0cmlidXRlcy5odG1sI2kzODYlMjBWYXJpYWJsZSUyMEF0dHJpYnV0ZXMiPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9pMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk3MmFiMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvaTM4Ni1hbmQteDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw3NDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zIC0gVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIiB0aXRsZT0iU3VibW9kZWwgT3B0aW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyIgdGl0bGU9IkhQUEEgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwjaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMiIHRpdGxlPSJpMzg2IGFuZCB4ODYtNjQgV2luZG93cyBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtYW5kLXg4Ni02NC1PcHRpb25zIj48L2E+Cis8YSBuYW1lPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucyI+aTM4NiBhbmQgeDg2LTY0IFdpbmRvd3MgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkhQUEEtT3B0aW9ucy5odG1sI0hQUEEtT3B0aW9ucyI+SFBQQSBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjE2IEludGVsIDM4NiBhbmQgQU1EIHg4Ni02NCBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtaTM4Ni1PcHRpb25zLTE0MzciPjwvYT48YSBuYW1lPSJpbmRleC14ODZfMDAyZDY0LU9wdGlvbnMtMTQzOCI+PC9hPjxhIG5hbWU9ImluZGV4LUludGVsLTM4Ni1PcHRpb25zLTE0MzkiPjwvYT48YSBuYW1lPSJpbmRleC1BTUQteDg2XzAwMmQ2NC1PcHRpb25zLTE0NDAiPjwvYT4KK1RoZXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIGkzODYgYW5kIHg4Ni02NCBmYW1pbHkgb2YKK2NvbXB1dGVyczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1hcmNoPTwvY29kZT48dmFyPmNwdS10eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1hcmNoLTE0NDEiPjwvYT5HZW5lcmF0ZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBtYWNoaW5lIHR5cGUgPHZhcj5jcHUtdHlwZTwvdmFyPi4gIEluIGNvbnRyYXN0IHRvCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXR1bmU9PC9zcGFuPjx2YXI+Y3B1LXR5cGU8L3Zhcj48L3NhbXA+LCB3aGljaCBtZXJlbHkgdHVuZXMgdGhlIGdlbmVyYXRlZCBjb2RlCitmb3IgdGhlIHNwZWNpZmllZCA8dmFyPmNwdS10eXBlPC92YXI+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g9PC9zcGFuPjx2YXI+Y3B1LXR5cGU8L3Zhcj48L3NhbXA+IGFsbG93cyBHQ0MKK3RvIGdlbmVyYXRlIGNvZGUgdGhhdCBtYXkgbm90IHJ1biBhdCBhbGwgb24gcHJvY2Vzc29ycyBvdGhlciB0aGFuIHRoZSBvbmUKK2luZGljYXRlZC4gIFNwZWNpZnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPTwvc3Bhbj48dmFyPmNwdS10eXBlPC92YXI+PC9zYW1wPiBpbXBsaWVzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXR1bmU9PC9zcGFuPjx2YXI+Y3B1LXR5cGU8L3Zhcj48L3NhbXA+LgorCisgICAgIDxwPlRoZSBjaG9pY2VzIGZvciA8dmFyPmNwdS10eXBlPC92YXI+IGFyZToKKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5hdGl2ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5UaGlzIHNlbGVjdHMgdGhlIENQVSB0byBnZW5lcmF0ZSBjb2RlIGZvciBhdCBjb21waWxhdGlvbiB0aW1lIGJ5IGRldGVybWluaW5nCit0aGUgcHJvY2Vzc29yIHR5cGUgb2YgdGhlIGNvbXBpbGluZyBtYWNoaW5lLiAgVXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPW5hdGl2ZTwvc3Bhbj48L3NhbXA+CitlbmFibGVzIGFsbCBpbnN0cnVjdGlvbiBzdWJzZXRzIHN1cHBvcnRlZCBieSB0aGUgbG9jYWwgbWFjaGluZSAoaGVuY2UKK3RoZSByZXN1bHQgbWlnaHQgbm90IHJ1biBvbiBkaWZmZXJlbnQgbWFjaGluZXMpLiAgVXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPW5hdGl2ZTwvc3Bhbj48L3NhbXA+Citwcm9kdWNlcyBjb2RlIG9wdGltaXplZCBmb3IgdGhlIGxvY2FsIG1hY2hpbmUgdW5kZXIgdGhlIGNvbnN0cmFpbnRzCitvZiB0aGUgc2VsZWN0ZWQgaW5zdHJ1Y3Rpb24gc2V0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmkzODY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+T3JpZ2luYWwgSW50ZWwgaTM4NiBDUFUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTQ4Njwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBpNDg2IENQVS4gIChObyBzY2hlZHVsaW5nIGlzIGltcGxlbWVudGVkIGZvciB0aGlzIGNoaXAuKQorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmk1ODY8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wZW50aXVtPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkludGVsIFBlbnRpdW0gQ1BVIHdpdGggbm8gTU1YIHN1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cGVudGl1bS1tbXg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW50ZWwgUGVudGl1bSBNTVggQ1BVLCBiYXNlZCBvbiBQZW50aXVtIGNvcmUgd2l0aCBNTVggaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cGVudGl1bXBybzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBQZW50aXVtIFBybyBDUFUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aTY4Njwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5XaGVuIHVzZWQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiwgdGhlIFBlbnRpdW0gUHJvCitpbnN0cnVjdGlvbiBzZXQgaXMgdXNlZCwgc28gdGhlIGNvZGUgcnVucyBvbiBhbGwgaTY4NiBmYW1pbHkgY2hpcHMuIAorV2hlbiB1c2VkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPC9zcGFuPjwvc2FtcD4sIGl0IGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2VuZXJpYzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wZW50aXVtMjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBQZW50aXVtIElJIENQVSwgYmFzZWQgb24gUGVudGl1bSBQcm8gY29yZSB3aXRoIE1NWCBpbnN0cnVjdGlvbiBzZXQKK3N1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cGVudGl1bTM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wZW50aXVtM208L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW50ZWwgUGVudGl1bSBJSUkgQ1BVLCBiYXNlZCBvbiBQZW50aXVtIFBybyBjb3JlIHdpdGggTU1YIGFuZCBTU0UgaW5zdHJ1Y3Rpb24KK3NldCBzdXBwb3J0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBlbnRpdW0tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBQZW50aXVtIE07IGxvdy1wb3dlciB2ZXJzaW9uIG9mIEludGVsIFBlbnRpdW0gSUlJIENQVQord2l0aCBNTVgsIFNTRSBhbmQgU1NFMiBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIFVzZWQgYnkgQ2VudHJpbm8gbm90ZWJvb2tzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBlbnRpdW00PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cGVudGl1bTRtPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkludGVsIFBlbnRpdW0gNCBDUFUgd2l0aCBNTVgsIFNTRSBhbmQgU1NFMiBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5wcmVzY290dDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbXByb3ZlZCB2ZXJzaW9uIG9mIEludGVsIFBlbnRpdW0gNCBDUFUgd2l0aCBNTVgsIFNTRSwgU1NFMiBhbmQgU1NFMyBpbnN0cnVjdGlvbgorc2V0IHN1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9jb25hPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkltcHJvdmVkIHZlcnNpb24gb2YgSW50ZWwgUGVudGl1bSA0IENQVSB3aXRoIDY0LWJpdCBleHRlbnNpb25zLCBNTVgsIFNTRSwKK1NTRTIgYW5kIFNTRTMgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29yZTI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW50ZWwgQ29yZSAyIENQVSB3aXRoIDY0LWJpdCBleHRlbnNpb25zLCBNTVgsIFNTRSwgU1NFMiwgU1NFMyBhbmQgU1NTRTMKK2luc3RydWN0aW9uIHNldCBzdXBwb3J0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcmVpNzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBDb3JlIGk3IENQVSB3aXRoIDY0LWJpdCBleHRlbnNpb25zLCBNTVgsIFNTRSwgU1NFMiwgU1NFMywgU1NTRTMsIFNTRTQuMQorYW5kIFNTRTQuMiBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb3JlaTctYXZ4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkludGVsIENvcmUgaTcgQ1BVIHdpdGggNjQtYml0IGV4dGVuc2lvbnMsIE1NWCwgU1NFLCBTU0UyLCBTU0UzLCBTU1NFMywKK1NTRTQuMSwgU1NFNC4yLCBBVlgsIEFFUyBhbmQgUENMTVVMIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcmUtYXZ4LWk8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW50ZWwgQ29yZSBDUFUgd2l0aCA2NC1iaXQgZXh0ZW5zaW9ucywgTU1YLCBTU0UsIFNTRTIsIFNTRTMsIFNTU0UzLAorU1NFNC4xLCBTU0U0LjIsIEFWWCwgQUVTLCBQQ0xNVUwsIEZTR1NCQVNFLCBSRFJORCBhbmQgRjE2QyBpbnN0cnVjdGlvbgorc2V0IHN1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29yZS1hdngyPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkludGVsIENvcmUgQ1BVIHdpdGggNjQtYml0IGV4dGVuc2lvbnMsIE1PVkJFLCBNTVgsIFNTRSwgU1NFMiwgU1NFMywgU1NTRTMsCitTU0U0LjEsIFNTRTQuMiwgQVZYLCBBVlgyLCBBRVMsIFBDTE1VTCwgRlNHU0JBU0UsIFJEUk5ELCBGTUEsIEJNSSwgQk1JMgorYW5kIEYxNkMgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXRvbTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JbnRlbCBBdG9tIENQVSB3aXRoIDY0LWJpdCBleHRlbnNpb25zLCBNT1ZCRSwgTU1YLCBTU0UsIFNTRTIsIFNTRTMgYW5kIFNTU0UzCitpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5rNjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BTUQgSzYgQ1BVIHdpdGggTU1YIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPms2LTI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5rNi0zPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkltcHJvdmVkIHZlcnNpb25zIG9mIEFNRCBLNiBDUFUgd2l0aCBNTVggYW5kIDNETm93ISBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hdGhsb248L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hdGhsb24tdGJpcmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QU1EIEF0aGxvbiBDUFUgd2l0aCBNTVgsIDNkTk9XISwgZW5oYW5jZWQgM0ROb3chIGFuZCBTU0UgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zCitzdXBwb3J0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmF0aGxvbi00PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXRobG9uLXhwPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXRobG9uLW1wPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkltcHJvdmVkIEFNRCBBdGhsb24gQ1BVIHdpdGggTU1YLCAzRE5vdyEsIGVuaGFuY2VkIDNETm93ISBhbmQgZnVsbCBTU0UKK2luc3RydWN0aW9uIHNldCBzdXBwb3J0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPms4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b3B0ZXJvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmF0aGxvbjY0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXRobG9uLWZ4PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlByb2Nlc3NvcnMgYmFzZWQgb24gdGhlIEFNRCBLOCBjb3JlIHdpdGggeDg2LTY0IGluc3RydWN0aW9uIHNldCBzdXBwb3J0LAoraW5jbHVkaW5nIHRoZSBBTUQgT3B0ZXJvbiwgQXRobG9uIDY0LCBhbmQgQXRobG9uIDY0IEZYIHByb2Nlc3NvcnMuIAorKFRoaXMgc3VwZXJzZXRzIE1NWCwgU1NFLCBTU0UyLCAzRE5vdyEsIGVuaGFuY2VkIDNETm93ISBhbmQgNjQtYml0CitpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4pCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+azgtc3NlMzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9wdGVyb24tc3NlMzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmF0aGxvbjY0LXNzZTM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW1wcm92ZWQgdmVyc2lvbnMgb2YgQU1EIEs4IGNvcmVzIHdpdGggU1NFMyBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hbWRmYW0xMDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJhcmNlbG9uYTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5DUFVzIGJhc2VkIG9uIEFNRCBGYW1pbHkgMTBoIGNvcmVzIHdpdGggeDg2LTY0IGluc3RydWN0aW9uIHNldCBzdXBwb3J0LiAgKFRoaXMKK3N1cGVyc2V0cyBNTVgsIFNTRSwgU1NFMiwgU1NFMywgU1NFNEEsIDNETm93ISwgZW5oYW5jZWQgM0ROb3chLCBBQk0gYW5kIDY0LWJpdAoraW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuKQorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJkdmVyMTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5DUFVzIGJhc2VkIG9uIEFNRCBGYW1pbHkgMTVoIGNvcmVzIHdpdGggeDg2LTY0IGluc3RydWN0aW9uIHNldCBzdXBwb3J0LiAgKFRoaXMKK3N1cGVyc2V0cyBGTUE0LCBBVlgsIFhPUCwgTFdQLCBBRVMsIFBDTF9NVUwsIENYMTYsIE1NWCwgU1NFLCBTU0UyLCBTU0UzLCBTU0U0QSwKK1NTU0UzLCBTU0U0LjEsIFNTRTQuMiwgQUJNIGFuZCA2NC1iaXQgaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuKSAKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZHZlcjI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QU1EIEZhbWlseSAxNWggY29yZSBiYXNlZCBDUFVzIHdpdGggeDg2LTY0IGluc3RydWN0aW9uIHNldCBzdXBwb3J0LiAgKFRoaXMKK3N1cGVyc2V0cyBCTUksIFRCTSwgRjE2QywgRk1BLCBBVlgsIFhPUCwgTFdQLCBBRVMsIFBDTF9NVUwsIENYMTYsIE1NWCwgU1NFLAorU1NFMiwgU1NFMywgU1NFNEEsIFNTU0UzLCBTU0U0LjEsIFNTRTQuMiwgQUJNIGFuZCA2NC1iaXQgaW5zdHJ1Y3Rpb24gc2V0CitleHRlbnNpb25zLikgCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmR2ZXIzPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFNRCBGYW1pbHkgMTVoIGNvcmUgYmFzZWQgQ1BVcyB3aXRoIHg4Ni02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIChUaGlzCitzdXBlcnNldHMgQk1JLCBUQk0sIEYxNkMsIEZNQSwgQVZYLCBYT1AsIExXUCwgQUVTLCBQQ0xfTVVMLCBDWDE2LCBNTVgsIFNTRSwKK1NTRTIsIFNTRTMsIFNTRTRBLCBTU1NFMywgU1NFNC4xLCBTU0U0LjIsIEFCTSBhbmQgNjQtYml0IGluc3RydWN0aW9uIHNldAorZXh0ZW5zaW9ucy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5idHZlcjE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Q1BVcyBiYXNlZCBvbiBBTUQgRmFtaWx5IDE0aCBjb3JlcyB3aXRoIHg4Ni02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIChUaGlzCitzdXBlcnNldHMgTU1YLCBTU0UsIFNTRTIsIFNTRTMsIFNTU0UzLCBTU0U0QSwgQ1gxNiwgQUJNIGFuZCA2NC1iaXQKK2luc3RydWN0aW9uIHNldCBleHRlbnNpb25zLikKKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5idHZlcjI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Q1BVcyBiYXNlZCBvbiBBTUQgRmFtaWx5IDE2aCBjb3JlcyB3aXRoIHg4Ni02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gVGhpcworaW5jbHVkZXMgTU9WQkUsIEYxNkMsIEJNSSwgQVZYLCBQQ0xfTVVMLCBBRVMsIFNTRTQuMiwgU1NFNC4xLCBDWDE2LCBBQk0sCitTU0U0QSwgU1NTRTMsIFNTRTMsIFNTRTIsIFNTRSwgTU1YIGFuZCA2NC1iaXQgaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+d2luY2hpcC1jNjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5JRFQgV2luQ2hpcCBDNiBDUFUsIGRlYWx0IGluIHNhbWUgd2F5IGFzIGk0ODYgd2l0aCBhZGRpdGlvbmFsIE1NWCBpbnN0cnVjdGlvbgorc2V0IHN1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+d2luY2hpcDI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SURUIFdpbkNoaXAgMiBDUFUsIGRlYWx0IGluIHNhbWUgd2F5IGFzIGk0ODYgd2l0aCBhZGRpdGlvbmFsIE1NWCBhbmQgM0ROb3chIAoraW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YzM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VklBIEMzIENQVSB3aXRoIE1NWCBhbmQgM0ROb3chIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LiAgKE5vIHNjaGVkdWxpbmcgaXMKK2ltcGxlbWVudGVkIGZvciB0aGlzIGNoaXAuKQorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmMzLTI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+VklBIEMzLTIgKE5laGVtaWFoL0M1WEwpIENQVSB3aXRoIE1NWCBhbmQgU1NFIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LiAKKyhObyBzY2hlZHVsaW5nIGlzCitpbXBsZW1lbnRlZCBmb3IgdGhpcyBjaGlwLikKKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nZW9kZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BTUQgR2VvZGUgZW1iZWRkZWQgcHJvY2Vzc29yIHdpdGggTU1YIGFuZCAzRE5vdyEgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdHVuZT08L2NvZGU+PHZhcj5jcHUtdHlwZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tdHVuZS0xNDQyIj48L2E+VHVuZSB0byA8dmFyPmNwdS10eXBlPC92YXI+IGV2ZXJ5dGhpbmcgYXBwbGljYWJsZSBhYm91dCB0aGUgZ2VuZXJhdGVkIGNvZGUsIGV4Y2VwdAorZm9yIHRoZSBBQkkgYW5kIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGluc3RydWN0aW9ucy4gCitXaGlsZSBwaWNraW5nIGEgc3BlY2lmaWMgPHZhcj5jcHUtdHlwZTwvdmFyPiBzY2hlZHVsZXMgdGhpbmdzIGFwcHJvcHJpYXRlbHkKK2ZvciB0aGF0IHBhcnRpY3VsYXIgY2hpcCwgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGdlbmVyYXRlIGFueSBjb2RlIHRoYXQKK2Nhbm5vdCBydW4gb24gdGhlIGRlZmF1bHQgbWFjaGluZSB0eXBlIHVubGVzcyB5b3UgdXNlIGEKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD08L3NwYW4+PHZhcj5jcHUtdHlwZTwvdmFyPjwvc2FtcD4gb3B0aW9uLiAKK0ZvciBleGFtcGxlLCBpZiBHQ0MgaXMgY29uZmlndXJlZCBmb3IgaTY4Ni1wYy1saW51eC1nbnUKK3RoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPXBlbnRpdW00PC9zcGFuPjwvc2FtcD4gZ2VuZXJhdGVzIGNvZGUgdGhhdCBpcyB0dW5lZCBmb3IgUGVudGl1bSA0CitidXQgc3RpbGwgcnVucyBvbiBpNjg2IG1hY2hpbmVzLgorCisgICAgIDxwPlRoZSBjaG9pY2VzIGZvciA8dmFyPmNwdS10eXBlPC92YXI+IGFyZSB0aGUgc2FtZSBhcyBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4uIAorSW4gYWRkaXRpb24sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZTwvc3Bhbj48L3NhbXA+IHN1cHBvcnRzIGFuIGV4dHJhIGNob2ljZSBmb3IgPHZhcj5jcHUtdHlwZTwvdmFyPjoKKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdlbmVyaWM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+UHJvZHVjZSBjb2RlIG9wdGltaXplZCBmb3IgdGhlIG1vc3QgY29tbW9uIElBMzIvQU1ENjQvRU02NFQgcHJvY2Vzc29ycy4gCitJZiB5b3Uga25vdyB0aGUgQ1BVIG9uIHdoaWNoIHlvdXIgY29kZSB3aWxsIHJ1biwgdGhlbiB5b3Ugc2hvdWxkIHVzZQordGhlIGNvcnJlc3BvbmRpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGluc3RlYWQgb2YKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZT1nZW5lcmljPC9zcGFuPjwvc2FtcD4uICBCdXQsIGlmIHlvdSBkbyBub3Qga25vdyBleGFjdGx5IHdoYXQgQ1BVIHVzZXJzCitvZiB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgaGF2ZSwgdGhlbiB5b3Ugc2hvdWxkIHVzZSB0aGlzIG9wdGlvbi4KKworICAgICAgICAgIDxwPkFzIG5ldyBwcm9jZXNzb3JzIGFyZSBkZXBsb3llZCBpbiB0aGUgbWFya2V0cGxhY2UsIHRoZSBiZWhhdmlvciBvZiB0aGlzCitvcHRpb24gd2lsbCBjaGFuZ2UuICBUaGVyZWZvcmUsIGlmIHlvdSB1cGdyYWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZgorR0NDLCBjb2RlIGdlbmVyYXRpb24gY29udHJvbGxlZCBieSB0aGlzIG9wdGlvbiB3aWxsIGNoYW5nZSB0byByZWZsZWN0Cit0aGUgcHJvY2Vzc29ycwordGhhdCBhcmUgbW9zdCBjb21tb24gYXQgdGhlIHRpbWUgdGhhdCB2ZXJzaW9uIG9mIEdDQyBpcyByZWxlYXNlZC4KKworICAgICAgICAgIDxwPlRoZXJlIGlzIG5vIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD1nZW5lcmljPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGJlY2F1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hcmNoPC9zcGFuPjwvc2FtcD4KK2luZGljYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gc2V0IHRoZSBjb21waWxlciBjYW4gdXNlLCBhbmQgdGhlcmUgaXMgbm8KK2dlbmVyaWMgaW5zdHJ1Y3Rpb24gc2V0IGFwcGxpY2FibGUgdG8gYWxsIHByb2Nlc3NvcnMuICBJbiBjb250cmFzdCwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdHVuZTwvc3Bhbj48L3NhbXA+IGluZGljYXRlcyB0aGUgcHJvY2Vzc29yIChvciwgaW4gdGhpcyBjYXNlLCBjb2xsZWN0aW9uIG9mCitwcm9jZXNzb3JzKSBmb3Igd2hpY2ggdGhlIGNvZGUgaXMgb3B0aW1pemVkLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNwdT08L2NvZGU+PHZhcj5jcHUtdHlwZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY3B1LTE0NDMiPjwvYT5BIGRlcHJlY2F0ZWQgc3lub255bSBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW10dW5lPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWZwbWF0aD08L2NvZGU+PHZhcj51bml0PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1mcG1hdGgtMTQ0NCI+PC9hPkdlbmVyYXRlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgZm9yIHNlbGVjdGVkIHVuaXQgPHZhcj51bml0PC92YXI+LiAgVGhlIGNob2ljZXMKK2ZvciA8dmFyPnVuaXQ8L3Zhcj4gYXJlOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Mzg3PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlVzZSB0aGUgc3RhbmRhcmQgMzg3IGZsb2F0aW5nLXBvaW50IGNvcHJvY2Vzc29yIHByZXNlbnQgb24gdGhlIG1ham9yaXR5IG9mIGNoaXBzIGFuZAorZW11bGF0ZWQgb3RoZXJ3aXNlLiAgQ29kZSBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uIHJ1bnMgYWxtb3N0IGV2ZXJ5d2hlcmUuIAorVGhlIHRlbXBvcmFyeSByZXN1bHRzIGFyZSBjb21wdXRlZCBpbiA4MC1iaXQgcHJlY2lzaW9uIGluc3RlYWQgb2YgdGhlIHByZWNpc2lvbgorc3BlY2lmaWVkIGJ5IHRoZSB0eXBlLCByZXN1bHRpbmcgaW4gc2xpZ2h0bHkgZGlmZmVyZW50IHJlc3VsdHMgY29tcGFyZWQgdG8gbW9zdAorb2Ygb3RoZXIgY2hpcHMuICBTZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmbG9hdC1zdG9yZTwvc3Bhbj48L3NhbXA+IGZvciBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorCisgICAgICAgICAgPHA+VGhpcyBpcyB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yIGkzODYgY29tcGlsZXIuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3NlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlVzZSBzY2FsYXIgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIHByZXNlbnQgaW4gdGhlIFNTRSBpbnN0cnVjdGlvbiBzZXQuIAorVGhpcyBpbnN0cnVjdGlvbiBzZXQgaXMgc3VwcG9ydGVkIGJ5IFBlbnRpdW0gSUlJIGFuZCBuZXdlciBjaGlwcywKK2FuZCBpbiB0aGUgQU1EIGxpbmUKK2J5IEF0aGxvbi00LCBBdGhsb24gWFAgYW5kIEF0aGxvbiBNUCBjaGlwcy4gIFRoZSBlYXJsaWVyIHZlcnNpb24gb2YgdGhlIFNTRQoraW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnRzIG9ubHkgc2luZ2xlLXByZWNpc2lvbiBhcml0aG1ldGljLCB0aHVzIHRoZSBkb3VibGUgYW5kCitleHRlbmRlZC1wcmVjaXNpb24gYXJpdGhtZXRpYyBhcmUgc3RpbGwgZG9uZSB1c2luZyAzODcuICBBIGxhdGVyIHZlcnNpb24sIHByZXNlbnQKK29ubHkgaW4gUGVudGl1bSA0IGFuZCBBTUQgeDg2LTY0IGNoaXBzLCBzdXBwb3J0cyBkb3VibGUtcHJlY2lzaW9uCithcml0aG1ldGljIHRvby4KKworICAgICAgICAgIDxwPkZvciB0aGUgaTM4NiBjb21waWxlciwgeW91IG11c3QgdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaD08L3NwYW4+PHZhcj5jcHUtdHlwZTwvdmFyPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3NlPC9zcGFuPjwvc2FtcD4KK29yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tc3NlMjwvc3Bhbj48L3NhbXA+IHN3aXRjaGVzIHRvIGVuYWJsZSBTU0UgZXh0ZW5zaW9ucyBhbmQgbWFrZSB0aGlzIG9wdGlvbgorZWZmZWN0aXZlLiAgRm9yIHRoZSB4ODYtNjQgY29tcGlsZXIsIHRoZXNlIGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICAgICAgIDxwPlRoZSByZXN1bHRpbmcgY29kZSBzaG91bGQgYmUgY29uc2lkZXJhYmx5IGZhc3RlciBpbiB0aGUgbWFqb3JpdHkgb2YgY2FzZXMgYW5kIGF2b2lkCit0aGUgbnVtZXJpY2FsIGluc3RhYmlsaXR5IHByb2JsZW1zIG9mIDM4NyBjb2RlLCBidXQgbWF5IGJyZWFrIHNvbWUgZXhpc3RpbmcKK2NvZGUgdGhhdCBleHBlY3RzIHRlbXBvcmFyaWVzIHRvIGJlIDgwIGJpdHMuCisKKyAgICAgICAgICA8cD5UaGlzIGlzIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IgdGhlIHg4Ni02NCBjb21waWxlci4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zc2UsMzg3PC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c3NlKzM4Nzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJvdGg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QXR0ZW1wdCB0byB1dGlsaXplIGJvdGggaW5zdHJ1Y3Rpb24gc2V0cyBhdCBvbmNlLiAgVGhpcyBlZmZlY3RpdmVseSBkb3VibGVzIHRoZQorYW1vdW50IG9mIGF2YWlsYWJsZSByZWdpc3RlcnMsIGFuZCBvbiBjaGlwcyB3aXRoIHNlcGFyYXRlIGV4ZWN1dGlvbiB1bml0cyBmb3IKKzM4NyBhbmQgU1NFIHRoZSBleGVjdXRpb24gcmVzb3VyY2VzIHRvby4gIFVzZSB0aGlzIG9wdGlvbiB3aXRoIGNhcmUsIGFzIGl0IGlzCitzdGlsbCBleHBlcmltZW50YWwsIGJlY2F1c2UgdGhlIEdDQyByZWdpc3RlciBhbGxvY2F0b3IgZG9lcyBub3QgbW9kZWwgc2VwYXJhdGUKK2Z1bmN0aW9uYWwgdW5pdHMgd2VsbCwgcmVzdWx0aW5nIGluIHVuc3RhYmxlIHBlcmZvcm1hbmNlLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFzbT08L2NvZGU+PHZhcj5kaWFsZWN0PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1hc21fMDAzZF8wMDQwdmFyXzAwN2JkaWFsZWN0XzAwN2QtMTQ0NSI+PC9hPk91dHB1dCBhc3NlbWJseSBpbnN0cnVjdGlvbnMgdXNpbmcgc2VsZWN0ZWQgPHZhcj5kaWFsZWN0PC92YXI+LiAgU3VwcG9ydGVkCitjaG9pY2VzIGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludGVsPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXR0PC9zcGFuPjwvc2FtcD4mcnNxdW87ICh0aGUgZGVmYXVsdCkuICBEYXJ3aW4gZG9lcworbm90IHN1cHBvcnQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnRlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taWVlZS1mcDwvY29kZT48ZHQ+PGNvZGU+LW1uby1pZWVlLWZwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taWVlZV8wMDJkZnAtMTQ0NiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkaWVlZV8wMDJkZnAtMTQ0NyI+PC9hPkNvbnRyb2wgd2hldGhlciBvciBub3QgdGhlIGNvbXBpbGVyIHVzZXMgSUVFRSBmbG9hdGluZy1wb2ludAorY29tcGFyaXNvbnMuICBUaGVzZSBjb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSByZXN1bHQgb2YgYQorY29tcGFyaXNvbiBpcyB1bm9yZGVyZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNvZnQtZmxvYXQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1zb2Z0XzAwMmRmbG9hdC0xNDQ4Ij48L2E+R2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcgbGlicmFyeSBjYWxscyBmb3IgZmxvYXRpbmcgcG9pbnQuCisKKyAgICAgPHA+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiB0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IHBhcnQgb2YgR0NDLiAKK05vcm1hbGx5IHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBtYWNoaW5lJ3MgdXN1YWwgQyBjb21waWxlciBhcmUgdXNlZCwgYnV0Cit0aGlzIGNhbid0IGJlIGRvbmUgZGlyZWN0bHkgaW4gY3Jvc3MtY29tcGlsYXRpb24uICBZb3UgbXVzdCBtYWtlIHlvdXIKK293biBhcnJhbmdlbWVudHMgdG8gcHJvdmlkZSBzdWl0YWJsZSBsaWJyYXJ5IGZ1bmN0aW9ucyBmb3IKK2Nyb3NzLWNvbXBpbGF0aW9uLgorCisgICAgIDxwPk9uIG1hY2hpbmVzIHdoZXJlIGEgZnVuY3Rpb24gcmV0dXJucyBmbG9hdGluZy1wb2ludCByZXN1bHRzIGluIHRoZSA4MDM4NworcmVnaXN0ZXIgc3RhY2ssIHNvbWUgZmxvYXRpbmctcG9pbnQgb3Bjb2RlcyBtYXkgYmUgZW1pdHRlZCBldmVuIGlmCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXNvZnQtZmxvYXQ8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1uby1mcC1yZXQtaW4tMzg3PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGZwXzAwMmRyZXRfMDAyZGluXzAwMmQzODctMTQ0OSI+PC9hPkRvIG5vdCB1c2UgdGhlIEZQVSByZWdpc3RlcnMgZm9yIHJldHVybiB2YWx1ZXMgb2YgZnVuY3Rpb25zLgorCisgICAgIDxwPlRoZSB1c3VhbCBjYWxsaW5nIGNvbnZlbnRpb24gaGFzIGZ1bmN0aW9ucyByZXR1cm4gdmFsdWVzIG9mIHR5cGVzCis8Y29kZT5mbG9hdDwvY29kZT4gYW5kIDxjb2RlPmRvdWJsZTwvY29kZT4gaW4gYW4gRlBVIHJlZ2lzdGVyLCBldmVuIGlmIHRoZXJlCitpcyBubyBGUFUuICBUaGUgaWRlYSBpcyB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHNob3VsZCBlbXVsYXRlCithbiBGUFUuCisKKyAgICAgPHA+VGhlIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLWZwLXJldC1pbi0zODc8L3NwYW4+PC9zYW1wPiBjYXVzZXMgc3VjaCB2YWx1ZXMgdG8gYmUgcmV0dXJuZWQKK2luIG9yZGluYXJ5IENQVSByZWdpc3RlcnMgaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tZmFuY3ktbWF0aC0zODc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkZmFuY3lfMDAyZG1hdGhfMDAyZDM4Ny0xNDUwIj48L2E+U29tZSAzODcgZW11bGF0b3JzIGRvIG5vdCBzdXBwb3J0IHRoZSA8Y29kZT5zaW48L2NvZGU+LCA8Y29kZT5jb3M8L2NvZGU+IGFuZAorPGNvZGU+c3FydDwvY29kZT4gaW5zdHJ1Y3Rpb25zIGZvciB0aGUgMzg3LiAgU3BlY2lmeSB0aGlzIG9wdGlvbiB0byBhdm9pZAorZ2VuZXJhdGluZyB0aG9zZSBpbnN0cnVjdGlvbnMuICBUaGlzIG9wdGlvbiBpcyB0aGUgZGVmYXVsdCBvbiBGcmVlQlNELAorT3BlbkJTRCBhbmQgTmV0QlNELiAgVGhpcyBvcHRpb24gaXMgb3ZlcnJpZGRlbiB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYXJjaDwvc3Bhbj48L3NhbXA+CitpbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IENQVSBhbHdheXMgaGFzIGFuIEZQVSBhbmQgc28gdGhlCitpbnN0cnVjdGlvbiBkb2VzIG5vdCBuZWVkIGVtdWxhdGlvbi4gIFRoZXNlCitpbnN0cnVjdGlvbnMgYXJlIG5vdCBnZW5lcmF0ZWQgdW5sZXNzIHlvdSBhbHNvIHVzZSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mdW5zYWZlLW1hdGgtb3B0aW1pemF0aW9uczwvc3Bhbj48L3NhbXA+IHN3aXRjaC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWxpZ24tZG91YmxlPC9jb2RlPjxkdD48Y29kZT4tbW5vLWFsaWduLWRvdWJsZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFsaWduXzAwMmRkb3VibGUtMTQ1MSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkYWxpZ25fMDAyZGRvdWJsZS0xNDUyIj48L2E+Q29udHJvbCB3aGV0aGVyIEdDQyBhbGlnbnMgPGNvZGU+ZG91YmxlPC9jb2RlPiwgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+LCBhbmQKKzxjb2RlPmxvbmcgbG9uZzwvY29kZT4gdmFyaWFibGVzIG9uIGEgdHdvLXdvcmQgYm91bmRhcnkgb3IgYSBvbmUtd29yZAorYm91bmRhcnkuICBBbGlnbmluZyA8Y29kZT5kb3VibGU8L2NvZGU+IHZhcmlhYmxlcyBvbiBhIHR3by13b3JkIGJvdW5kYXJ5Citwcm9kdWNlcyBjb2RlIHRoYXQgcnVucyBzb21ld2hhdCBmYXN0ZXIgb24gYSBQZW50aXVtIGF0IHRoZQorZXhwZW5zZSBvZiBtb3JlIG1lbW9yeS4KKworICAgICA8cD5PbiB4ODYtNjQsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWxpZ24tZG91YmxlPC9zcGFuPjwvc2FtcD4gaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCisgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gaWYgeW91IHVzZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hbGlnbi1kb3VibGU8L3NwYW4+PC9zYW1wPiBzd2l0Y2gsCitzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdGhlIGFib3ZlIHR5cGVzIGFyZSBhbGlnbmVkIGRpZmZlcmVudGx5IHRoYW4KK3RoZSBwdWJsaXNoZWQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZSBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIDM4NgorYW5kIGFyZSBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBzdHJ1Y3R1cmVzIGluIGNvZGUgY29tcGlsZWQKK3dpdGhvdXQgdGhhdCBzd2l0Y2guCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbTk2Yml0LWxvbmctZG91YmxlPC9jb2RlPjxkdD48Y29kZT4tbTEyOGJpdC1sb25nLWRvdWJsZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbTk2Yml0XzAwMmRsb25nXzAwMmRkb3VibGUtMTQ1MyI+PC9hPjxhIG5hbWU9ImluZGV4LW0xMjhiaXRfMDAyZGxvbmdfMDAyZGRvdWJsZS0xNDU0Ij48L2E+VGhlc2Ugc3dpdGNoZXMgY29udHJvbCB0aGUgc2l6ZSBvZiA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4gdHlwZS4gIFRoZSBpMzg2CithcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlIHNwZWNpZmllcyB0aGUgc2l6ZSB0byBiZSA5NiBiaXRzLAorc28gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW05NmJpdC1sb25nLWRvdWJsZTwvc3Bhbj48L3NhbXA+IGlzIHRoZSBkZWZhdWx0IGluIDMyLWJpdCBtb2RlLgorCisgICAgIDxwPk1vZGVybiBhcmNoaXRlY3R1cmVzIChQZW50aXVtIGFuZCBuZXdlcikgcHJlZmVyIDxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPgordG8gYmUgYWxpZ25lZCB0byBhbiA4LSBvciAxNi1ieXRlIGJvdW5kYXJ5LiAgSW4gYXJyYXlzIG9yIHN0cnVjdHVyZXMKK2NvbmZvcm1pbmcgdG8gdGhlIEFCSSwgdGhpcyBpcyBub3QgcG9zc2libGUuICBTbyBzcGVjaWZ5aW5nCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTEyOGJpdC1sb25nLWRvdWJsZTwvc3Bhbj48L3NhbXA+IGFsaWducyA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4KK3RvIGEgMTYtYnl0ZSBib3VuZGFyeSBieSBwYWRkaW5nIHRoZSA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4gd2l0aCBhbiBhZGRpdGlvbmFsCiszMi1iaXQgemVyby4KKworICAgICA8cD5JbiB0aGUgeDg2LTY0IGNvbXBpbGVyLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTEyOGJpdC1sb25nLWRvdWJsZTwvc3Bhbj48L3NhbXA+IGlzIHRoZSBkZWZhdWx0IGNob2ljZSBhcworaXRzIEFCSSBzcGVjaWZpZXMgdGhhdCA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4gaXMgYWxpZ25lZCBvbiAxNi1ieXRlIGJvdW5kYXJ5LgorCisgICAgIDxwPk5vdGljZSB0aGF0IG5laXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBlbmFibGUgYW55IGV4dHJhIHByZWNpc2lvbiBvdmVyIHRoZSB4ODcKK3N0YW5kYXJkIG9mIDgwIGJpdHMgZm9yIGEgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+LgorCisgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gaWYgeW91IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB5b3VyIHRhcmdldCBBQkksIHRoaXMKK2NoYW5nZXMgdGhlIHNpemUgb2YKK3N0cnVjdHVyZXMgYW5kIGFycmF5cyBjb250YWluaW5nIDxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPiB2YXJpYWJsZXMsCithcyB3ZWxsIGFzIG1vZGlmeWluZyB0aGUgZnVuY3Rpb24gY2FsbGluZyBjb252ZW50aW9uIGZvciBmdW5jdGlvbnMgdGFraW5nCis8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4uICBIZW5jZSB0aGV5IGFyZSBub3QgYmluYXJ5LWNvbXBhdGlibGUKK3dpdGggY29kZSBjb21waWxlZCB3aXRob3V0IHRoYXQgc3dpdGNoLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1sb25nLWRvdWJsZS02NDwvY29kZT48ZHQ+PGNvZGU+LW1sb25nLWRvdWJsZS04MDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWxvbmdfMDAyZGRvdWJsZV8wMDJkNjQtMTQ1NSI+PC9hPjxhIG5hbWU9ImluZGV4LW1sb25nXzAwMmRkb3VibGVfMDAyZDgwLTE0NTYiPjwvYT5UaGVzZSBzd2l0Y2hlcyBjb250cm9sIHRoZSBzaXplIG9mIDxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPiB0eXBlLiBBIHNpemUKK29mIDY0IGJpdHMgbWFrZXMgdGhlIDxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPiB0eXBlIGVxdWl2YWxlbnQgdG8gdGhlIDxjb2RlPmRvdWJsZTwvY29kZT4KK3R5cGUuIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIEJpb25pYyBDIGxpYnJhcnkuCisKKyAgICAgPHA+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiBpZiB5b3Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHlvdXIgdGFyZ2V0IEFCSSwgdGhpcworY2hhbmdlcyB0aGUgc2l6ZSBvZgorc3RydWN0dXJlcyBhbmQgYXJyYXlzIGNvbnRhaW5pbmcgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+IHZhcmlhYmxlcywKK2FzIHdlbGwgYXMgbW9kaWZ5aW5nIHRoZSBmdW5jdGlvbiBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGZ1bmN0aW9ucyB0YWtpbmcKKzxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPi4gIEhlbmNlIHRoZXkgYXJlIG5vdCBiaW5hcnktY29tcGF0aWJsZQord2l0aCBjb2RlIGNvbXBpbGVkIHdpdGhvdXQgdGhhdCBzd2l0Y2guCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWxhcmdlLWRhdGEtdGhyZXNob2xkPTwvY29kZT48dmFyPnRocmVzaG9sZDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tbGFyZ2VfMDAyZGRhdGFfMDAyZHRocmVzaG9sZC0xNDU3Ij48L2E+V2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWNtb2RlbD1tZWRpdW08L3NwYW4+PC9zYW1wPiBpcyBzcGVjaWZpZWQsIGRhdGEgb2JqZWN0cyBsYXJnZXIgdGhhbgorPHZhcj50aHJlc2hvbGQ8L3Zhcj4gYXJlIHBsYWNlZCBpbiB0aGUgbGFyZ2UgZGF0YSBzZWN0aW9uLiAgVGhpcyB2YWx1ZSBtdXN0IGJlIHRoZQorc2FtZSBhY3Jvc3MgYWxsIG9iamVjdHMgbGlua2VkIGludG8gdGhlIGJpbmFyeSwgYW5kIGRlZmF1bHRzIHRvIDY1NTM1LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1ydGQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ydGQtMTQ1OCI+PC9hPlVzZSBhIGRpZmZlcmVudCBmdW5jdGlvbi1jYWxsaW5nIGNvbnZlbnRpb24sIGluIHdoaWNoIGZ1bmN0aW9ucyB0aGF0Cit0YWtlIGEgZml4ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyByZXR1cm4gd2l0aCB0aGUgPGNvZGU+cmV0IDwvY29kZT48dmFyPm51bTwvdmFyPgoraW5zdHJ1Y3Rpb24sIHdoaWNoIHBvcHMgdGhlaXIgYXJndW1lbnRzIHdoaWxlIHJldHVybmluZy4gIFRoaXMgc2F2ZXMgb25lCitpbnN0cnVjdGlvbiBpbiB0aGUgY2FsbGVyIHNpbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gcG9wIHRoZSBhcmd1bWVudHMKK3RoZXJlLgorCisgICAgIDxwPllvdSBjYW4gc3BlY2lmeSB0aGF0IGFuIGluZGl2aWR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhpcyBjYWxsaW5nCitzZXF1ZW5jZSB3aXRoIHRoZSBmdW5jdGlvbiBhdHRyaWJ1dGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdGRjYWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgWW91IGNhbiBhbHNvCitvdmVycmlkZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1ydGQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gYnkgdXNpbmcgdGhlIGZ1bmN0aW9uIGF0dHJpYnV0ZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jZGVjbDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFNlZSA8YSBocmVmPSJGdW5jdGlvbi1BdHRyaWJ1dGVzLmh0bWwjRnVuY3Rpb24tQXR0cmlidXRlcyI+RnVuY3Rpb24gQXR0cmlidXRlczwvYT4uCisKKyAgICAgPHA+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiB0aGlzIGNhbGxpbmcgY29udmVudGlvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb25lCitub3JtYWxseSB1c2VkIG9uIFVuaXgsIHNvIHlvdSBjYW5ub3QgdXNlIGl0IGlmIHlvdSBuZWVkIHRvIGNhbGwKK2xpYnJhcmllcyBjb21waWxlZCB3aXRoIHRoZSBVbml4IGNvbXBpbGVyLgorCisgICAgIDxwPkFsc28sIHlvdSBtdXN0IHByb3ZpZGUgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYWxsIGZ1bmN0aW9ucyB0aGF0Cit0YWtlIHZhcmlhYmxlIG51bWJlcnMgb2YgYXJndW1lbnRzIChpbmNsdWRpbmcgPGNvZGU+cHJpbnRmPC9jb2RlPik7CitvdGhlcndpc2UgaW5jb3JyZWN0IGNvZGUgaXMgZ2VuZXJhdGVkIGZvciBjYWxscyB0byB0aG9zZQorZnVuY3Rpb25zLgorCisgICAgIDxwPkluIGFkZGl0aW9uLCBzZXJpb3VzbHkgaW5jb3JyZWN0IGNvZGUgcmVzdWx0cyBpZiB5b3UgY2FsbCBhCitmdW5jdGlvbiB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cy4gIChOb3JtYWxseSwgZXh0cmEgYXJndW1lbnRzIGFyZQoraGFybWxlc3NseSBpZ25vcmVkLikKKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmVncGFybT08L2NvZGU+PHZhcj5udW08L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXJlZ3Bhcm0tMTQ1OSI+PC9hPkNvbnRyb2wgaG93IG1hbnkgcmVnaXN0ZXJzIGFyZSB1c2VkIHRvIHBhc3MgaW50ZWdlciBhcmd1bWVudHMuICBCeQorZGVmYXVsdCwgbm8gcmVnaXN0ZXJzIGFyZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLCBhbmQgYXQgbW9zdCAzCityZWdpc3RlcnMgY2FuIGJlIHVzZWQuICBZb3UgY2FuIGNvbnRyb2wgdGhpcyBiZWhhdmlvciBmb3IgYSBzcGVjaWZpYworZnVuY3Rpb24gYnkgdXNpbmcgdGhlIGZ1bmN0aW9uIGF0dHJpYnV0ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlZ3Bhcm08L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorU2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPi4KKworICAgICA8cD48c3Ryb25nPldhcm5pbmc6PC9zdHJvbmc+IGlmIHlvdSB1c2UgdGhpcyBzd2l0Y2gsIGFuZAorPHZhcj5udW08L3Zhcj4gaXMgbm9uemVybywgdGhlbiB5b3UgbXVzdCBidWlsZCBhbGwgbW9kdWxlcyB3aXRoIHRoZSBzYW1lCit2YWx1ZSwgaW5jbHVkaW5nIGFueSBsaWJyYXJpZXMuICBUaGlzIGluY2x1ZGVzIHRoZSBzeXN0ZW0gbGlicmFyaWVzIGFuZAorc3RhcnR1cCBtb2R1bGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zc2VyZWdwYXJtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tc3NlcmVncGFybS0xNDYwIj48L2E+VXNlIFNTRSByZWdpc3RlciBwYXNzaW5nIGNvbnZlbnRpb25zIGZvciBmbG9hdCBhbmQgZG91YmxlIGFyZ3VtZW50cworYW5kIHJldHVybiB2YWx1ZXMuICBZb3UgY2FuIGNvbnRyb2wgdGhpcyBiZWhhdmlvciBmb3IgYSBzcGVjaWZpYworZnVuY3Rpb24gYnkgdXNpbmcgdGhlIGZ1bmN0aW9uIGF0dHJpYnV0ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNzZXJlZ3Bhcm08L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorU2VlIDxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj5GdW5jdGlvbiBBdHRyaWJ1dGVzPC9hPi4KKworICAgICA8cD48c3Ryb25nPldhcm5pbmc6PC9zdHJvbmc+IGlmIHlvdSB1c2UgdGhpcyBzd2l0Y2ggdGhlbiB5b3UgbXVzdCBidWlsZCBhbGwKK21vZHVsZXMgd2l0aCB0aGUgc2FtZSB2YWx1ZSwgaW5jbHVkaW5nIGFueSBsaWJyYXJpZXMuICBUaGlzIGluY2x1ZGVzCit0aGUgc3lzdGVtIGxpYnJhcmllcyBhbmQgc3RhcnR1cCBtb2R1bGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW12ZWN0OC1yZXQtaW4tbWVtPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdmVjdDhfMDAyZHJldF8wMDJkaW5fMDAyZG1lbS0xNDYxIj48L2E+UmV0dXJuIDgtYnl0ZSB2ZWN0b3JzIGluIG1lbW9yeSBpbnN0ZWFkIG9mIE1NWCByZWdpc3RlcnMuICBUaGlzIGlzIHRoZQorZGVmYXVsdCBvbiBTb2xhcmlzJm5ic3A7OCBhbmQgOSBhbmQgVnhXb3JrcyB0byBtYXRjaCB0aGUgQUJJIG9mIHRoZSBTdW4KK1N0dWRpbyBjb21waWxlcnMgdW50aWwgdmVyc2lvbiAxMi4gIExhdGVyIGNvbXBpbGVyIHZlcnNpb25zIChzdGFydGluZword2l0aCBTdHVkaW8gMTIgVXBkYXRlJm5ic3A7MSkgZm9sbG93IHRoZSBBQkkgdXNlZCBieSBvdGhlciB4ODYgdGFyZ2V0cywgd2hpY2gKK2lzIHRoZSBkZWZhdWx0IG9uIFNvbGFyaXMmbmJzcDsxMCBhbmQgbGF0ZXIuICA8ZW0+T25seTwvZW0+IHVzZSB0aGlzIG9wdGlvbiBpZgoreW91IG5lZWQgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyBjb2RlIHByb2R1Y2VkIGJ5IHRob3NlCitwcmV2aW91cyBjb21waWxlciB2ZXJzaW9ucyBvciBvbGRlciB2ZXJzaW9ucyBvZiBHQ0MuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBjMzI8L2NvZGU+PGR0Pjxjb2RlPi1tcGM2NDwvY29kZT48ZHQ+PGNvZGU+LW1wYzgwPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcGMzMi0xNDYyIj48L2E+PGEgbmFtZT0iaW5kZXgtbXBjNjQtMTQ2MyI+PC9hPjxhIG5hbWU9ImluZGV4LW1wYzgwLTE0NjQiPjwvYT4KK1NldCA4MDM4NyBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24gdG8gMzIsIDY0IG9yIDgwIGJpdHMuICBXaGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGMzMjwvc3Bhbj48L3NhbXA+CitpcyBzcGVjaWZpZWQsIHRoZSBzaWduaWZpY2FuZHMgb2YgcmVzdWx0cyBvZiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZQorcm91bmRlZCB0byAyNCBiaXRzIChzaW5nbGUgcHJlY2lzaW9uKTsgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wYzY0PC9zcGFuPjwvc2FtcD4gcm91bmRzIHRoZQorc2lnbmlmaWNhbmRzIG9mIHJlc3VsdHMgb2YgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyB0byA1MyBiaXRzIChkb3VibGUKK3ByZWNpc2lvbikgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcGM4MDwvc3Bhbj48L3NhbXA+IHJvdW5kcyB0aGUgc2lnbmlmaWNhbmRzIG9mIHJlc3VsdHMgb2YKK2Zsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgdG8gNjQgYml0cyAoZXh0ZW5kZWQgZG91YmxlIHByZWNpc2lvbiksIHdoaWNoIGlzCit0aGUgZGVmYXVsdC4gIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBpbiBoaWdoZXIKK3ByZWNpc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW1tZXIgd2l0aG91dCBzZXR0aW5nIHRoZSBGUFUKK2NvbnRyb2wgd29yZCBleHBsaWNpdGx5LgorCisgICAgIDxwPlNldHRpbmcgdGhlIHJvdW5kaW5nIG9mIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgdG8gbGVzcyB0aGFuIHRoZSBkZWZhdWx0Cis4MCBiaXRzIGNhbiBzcGVlZCBzb21lIHByb2dyYW1zIGJ5IDIlIG9yIG1vcmUuICBOb3RlIHRoYXQgc29tZSBtYXRoZW1hdGljYWwKK2xpYnJhcmllcyBhc3N1bWUgdGhhdCBleHRlbmRlZC1wcmVjaXNpb24gKDgwLWJpdCkgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucworYXJlIGVuYWJsZWQgYnkgZGVmYXVsdDsgcm91dGluZXMgaW4gc3VjaCBsaWJyYXJpZXMgY291bGQgc3VmZmVyIHNpZ25pZmljYW50Citsb3NzIG9mIGFjY3VyYWN5LCB0eXBpY2FsbHkgdGhyb3VnaCBzby1jYWxsZWQgJmxkcXVvO2NhdGFzdHJvcGhpYyBjYW5jZWxsYXRpb24mcmRxdW87LAord2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcHJlY2lzaW9uIHRvIGxlc3MgdGhhbiBleHRlbmRlZCBwcmVjaXNpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXN0YWNrcmVhbGlnbjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXN0YWNrcmVhbGlnbi0xNDY1Ij48L2E+UmVhbGlnbiB0aGUgc3RhY2sgYXQgZW50cnkuICBPbiB0aGUgSW50ZWwgeDg2LCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1zdGFja3JlYWxpZ248L3NwYW4+PC9zYW1wPgorb3B0aW9uIGdlbmVyYXRlcyBhbiBhbHRlcm5hdGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIHRoYXQgcmVhbGlnbnMgdGhlCitydW4tdGltZSBzdGFjayBpZiBuZWNlc3NhcnkuICBUaGlzIHN1cHBvcnRzIG1peGluZyBsZWdhY3kgY29kZXMgdGhhdCBrZWVwCis0LWJ5dGUgc3RhY2sgYWxpZ25tZW50IHdpdGggbW9kZXJuIGNvZGVzIHRoYXQga2VlcCAxNi1ieXRlIHN0YWNrIGFsaWdubWVudCBmb3IKK1NTRSBjb21wYXRpYmlsaXR5LiAgU2VlIGFsc28gdGhlIGF0dHJpYnV0ZSA8Y29kZT5mb3JjZV9hbGlnbl9hcmdfcG9pbnRlcjwvY29kZT4sCithcHBsaWNhYmxlIHRvIGluZGl2aWR1YWwgZnVuY3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9PC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1wcmVmZXJyZWRfMDAyZHN0YWNrXzAwMmRib3VuZGFyeS0xNDY2Ij48L2E+QXR0ZW1wdCB0byBrZWVwIHRoZSBzdGFjayBib3VuZGFyeSBhbGlnbmVkIHRvIGEgMiByYWlzZWQgdG8gPHZhcj5udW08L3Zhcj4KK2J5dGUgYm91bmRhcnkuICBJZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeTwvc3Bhbj48L3NhbXA+IGlzIG5vdCBzcGVjaWZpZWQsCit0aGUgZGVmYXVsdCBpcyA0ICgxNiBieXRlcyBvciAxMjggYml0cykuCisKKyAgICAgPHA+PHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiBXaGVuIGdlbmVyYXRpbmcgY29kZSBmb3IgdGhlIHg4Ni02NCBhcmNoaXRlY3R1cmUgd2l0aAorU1NFIGV4dGVuc2lvbnMgZGlzYWJsZWQsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTM8L3NwYW4+PC9zYW1wPiBjYW4gYmUKK3VzZWQgdG8ga2VlcCB0aGUgc3RhY2sgYm91bmRhcnkgYWxpZ25lZCB0byA4IGJ5dGUgYm91bmRhcnkuICBTaW5jZQoreDg2LTY0IEFCSSByZXF1aXJlIDE2IGJ5dGUgc3RhY2sgYWxpZ25tZW50LCB0aGlzIGlzIEFCSSBpbmNvbXBhdGlibGUgYW5kCitpbnRlbmRlZCB0byBiZSB1c2VkIGluIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQgd2hlcmUgc3RhY2sgc3BhY2UgaXMKK2ltcG9ydGFudCBsaW1pdGF0aW9uLiAgVGhpcyBvcHRpb24gd2lsbCBsZWFkIHRvIHdyb25nIGNvZGUgd2hlbiBmdW5jdGlvbnMKK2NvbXBpbGVkIHdpdGggMTYgYnl0ZSBzdGFjayBhbGlnbm1lbnQgKHN1Y2ggYXMgZnVuY3Rpb25zIGZyb20gYSBzdGFuZGFyZAorbGlicmFyeSkgYXJlIGNhbGxlZCB3aXRoIG1pc2FsaWduZWQgc3RhY2suICBJbiB0aGlzIGNhc2UsIFNTRQoraW5zdHJ1Y3Rpb25zIG1heSBsZWFkIHRvIG1pc2FsaWduZWQgbWVtb3J5IGFjY2VzcyB0cmFwcy4gIEluIGFkZGl0aW9uLAordmFyaWFibGUgYXJndW1lbnRzIHdpbGwgYmUgaGFuZGxlZCBpbmNvcnJlY3RseSBmb3IgMTYgYnl0ZSBhbGlnbmVkCitvYmplY3RzIChpbmNsdWRpbmcgeDg3IGxvbmcgZG91YmxlIGFuZCBfX2ludDEyOCksIGxlYWRpbmcgdG8gd3JvbmcKK3Jlc3VsdHMuICBZb3UgbXVzdCBidWlsZCBhbGwgbW9kdWxlcyB3aXRoCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0zPC9zcGFuPjwvc2FtcD4sIGluY2x1ZGluZyBhbnkgbGlicmFyaWVzLiAgVGhpcworaW5jbHVkZXMgdGhlIHN5c3RlbSBsaWJyYXJpZXMgYW5kIHN0YXJ0dXAgbW9kdWxlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taW5jb21pbmctc3RhY2stYm91bmRhcnk9PC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW1pbmNvbWluZ18wMDJkc3RhY2tfMDAyZGJvdW5kYXJ5LTE0NjciPjwvYT5Bc3N1bWUgdGhlIGluY29taW5nIHN0YWNrIGlzIGFsaWduZWQgdG8gYSAyIHJhaXNlZCB0byA8dmFyPm51bTwvdmFyPiBieXRlCitib3VuZGFyeS4gIElmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1taW5jb21pbmctc3RhY2stYm91bmRhcnk8L3NwYW4+PC9zYW1wPiBpcyBub3Qgc3BlY2lmaWVkLAordGhlIG9uZSBzcGVjaWZpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLgorCisgICAgIDxwPk9uIFBlbnRpdW0gYW5kIFBlbnRpdW0gUHJvLCA8Y29kZT5kb3VibGU8L2NvZGU+IGFuZCA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4gdmFsdWVzCitzaG91bGQgYmUgYWxpZ25lZCB0byBhbiA4LWJ5dGUgYm91bmRhcnkgKHNlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFsaWduLWRvdWJsZTwvc3Bhbj48L3NhbXA+KSBvcgorc3VmZmVyIHNpZ25pZmljYW50IHJ1biB0aW1lIHBlcmZvcm1hbmNlIHBlbmFsdGllcy4gIE9uIFBlbnRpdW0gSUlJLCB0aGUKK1N0cmVhbWluZyBTSU1EIEV4dGVuc2lvbiAoU1NFKSBkYXRhIHR5cGUgPGNvZGU+X19tMTI4PC9jb2RlPiBtYXkgbm90IHdvcmsKK3Byb3Blcmx5IGlmIGl0IGlzIG5vdCAxNi1ieXRlIGFsaWduZWQuCisKKyAgICAgPHA+VG8gZW5zdXJlIHByb3BlciBhbGlnbm1lbnQgb2YgdGhpcyB2YWx1ZXMgb24gdGhlIHN0YWNrLCB0aGUgc3RhY2sgYm91bmRhcnkKK211c3QgYmUgYXMgYWxpZ25lZCBhcyB0aGF0IHJlcXVpcmVkIGJ5IGFueSB2YWx1ZSBzdG9yZWQgb24gdGhlIHN0YWNrLiAKK0Z1cnRoZXIsIGV2ZXJ5IGZ1bmN0aW9uIG11c3QgYmUgZ2VuZXJhdGVkIHN1Y2ggdGhhdCBpdCBrZWVwcyB0aGUgc3RhY2sKK2FsaWduZWQuICBUaHVzIGNhbGxpbmcgYSBmdW5jdGlvbiBjb21waWxlZCB3aXRoIGEgaGlnaGVyIHByZWZlcnJlZAorc3RhY2sgYm91bmRhcnkgZnJvbSBhIGZ1bmN0aW9uIGNvbXBpbGVkIHdpdGggYSBsb3dlciBwcmVmZXJyZWQgc3RhY2sKK2JvdW5kYXJ5IG1vc3QgbGlrZWx5IG1pc2FsaWducyB0aGUgc3RhY2suICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0CitsaWJyYXJpZXMgdGhhdCB1c2UgY2FsbGJhY2tzIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgc2V0dGluZy4KKworICAgICA8cD5UaGlzIGV4dHJhIGFsaWdubWVudCBkb2VzIGNvbnN1bWUgZXh0cmEgc3RhY2sgc3BhY2UsIGFuZCBnZW5lcmFsbHkKK2luY3JlYXNlcyBjb2RlIHNpemUuICBDb2RlIHRoYXQgaXMgc2Vuc2l0aXZlIHRvIHN0YWNrIHNwYWNlIHVzYWdlLCBzdWNoCithcyBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbHMsIG1heSB3YW50IHRvIHJlZHVjZSB0aGUKK3ByZWZlcnJlZCBhbGlnbm1lbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9Mjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1tbXg8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbW14PC9jb2RlPjxkdD48Y29kZT4tbXNzZTwvY29kZT48ZHQ+PGNvZGU+LW1uby1zc2U8L2NvZGU+PGR0Pjxjb2RlPi1tc3NlMjwvY29kZT48ZHQ+PGNvZGU+LW1uby1zc2UyPC9jb2RlPjxkdD48Y29kZT4tbXNzZTM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc3NlMzwvY29kZT48ZHQ+PGNvZGU+LW1zc3NlMzwvY29kZT48ZHQ+PGNvZGU+LW1uby1zc3NlMzwvY29kZT48ZHQ+PGNvZGU+LW1zc2U0LjE8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc3NlNC4xPC9jb2RlPjxkdD48Y29kZT4tbXNzZTQuMjwvY29kZT48ZHQ+PGNvZGU+LW1uby1zc2U0LjI8L2NvZGU+PGR0Pjxjb2RlPi1tc3NlNDwvY29kZT48ZHQ+PGNvZGU+LW1uby1zc2U0PC9jb2RlPjxkdD48Y29kZT4tbWF2eDwvY29kZT48ZHQ+PGNvZGU+LW1uby1hdng8L2NvZGU+PGR0Pjxjb2RlPi1tYXZ4MjwvY29kZT48ZHQ+PGNvZGU+LW1uby1hdngyPC9jb2RlPjxkdD48Y29kZT4tbWFlczwvY29kZT48ZHQ+PGNvZGU+LW1uby1hZXM8L2NvZGU+PGR0Pjxjb2RlPi1tcGNsbXVsPC9jb2RlPjxkdD48Y29kZT4tbW5vLXBjbG11bDwvY29kZT48ZHQ+PGNvZGU+LW1mc2dzYmFzZTwvY29kZT48ZHQ+PGNvZGU+LW1uby1mc2dzYmFzZTwvY29kZT48ZHQ+PGNvZGU+LW1yZHJuZDwvY29kZT48ZHQ+PGNvZGU+LW1uby1yZHJuZDwvY29kZT48ZHQ+PGNvZGU+LW1mMTZjPC9jb2RlPjxkdD48Y29kZT4tbW5vLWYxNmM8L2NvZGU+PGR0Pjxjb2RlPi1tZm1hPC9jb2RlPjxkdD48Y29kZT4tbW5vLWZtYTwvY29kZT48ZHQ+PGNvZGU+LW1zc2U0YTwvY29kZT48ZHQ+PGNvZGU+LW1uby1zc2U0YTwvY29kZT48ZHQ+PGNvZGU+LW1mbWE0PC9jb2RlPjxkdD48Y29kZT4tbW5vLWZtYTQ8L2NvZGU+PGR0Pjxjb2RlPi1teG9wPC9jb2RlPjxkdD48Y29kZT4tbW5vLXhvcDwvY29kZT48ZHQ+PGNvZGU+LW1sd3A8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tbHdwPC9jb2RlPjxkdD48Y29kZT4tbTNkbm93PC9jb2RlPjxkdD48Y29kZT4tbW5vLTNkbm93PC9jb2RlPjxkdD48Y29kZT4tbXBvcGNudDwvY29kZT48ZHQ+PGNvZGU+LW1uby1wb3BjbnQ8L2NvZGU+PGR0Pjxjb2RlPi1tYWJtPC9jb2RlPjxkdD48Y29kZT4tbW5vLWFibTwvY29kZT48ZHQ+PGNvZGU+LW1ibWk8L2NvZGU+PGR0Pjxjb2RlPi1tYm1pMjwvY29kZT48ZHQ+PGNvZGU+LW1uby1ibWk8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tYm1pMjwvY29kZT48ZHQ+PGNvZGU+LW1semNudDwvY29kZT48ZHQ+PGNvZGU+LW1uby1semNudDwvY29kZT48ZHQ+PGNvZGU+LW1ydG08L2NvZGU+PGR0Pjxjb2RlPi1tdGJtPC9jb2RlPjxkdD48Y29kZT4tbW5vLXRibTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbW1teC0xNDY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW5vXzAwMmRtbXgtMTQ2OSI+PC9hPjxhIG5hbWU9ImluZGV4LW1zc2UtMTQ3MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkc3NlLTE0NzEiPjwvYT48YSBuYW1lPSJpbmRleC1tM2Rub3ctMTQ3MiI+PC9hPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkM2Rub3ctMTQ3MyI+PC9hPlRoZXNlIHN3aXRjaGVzIGVuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgaW5zdHJ1Y3Rpb25zIGluIHRoZSBNTVgsIFNTRSwKK1NTRTIsIFNTRTMsIFNTU0UzLCBTU0U0LjEsIEFWWCwgQVZYMiwgQUVTLCBQQ0xNVUwsIEZTR1NCQVNFLCBSRFJORCwgRjE2QywKK0ZNQSwgU1NFNEEsIEZNQTQsIFhPUCwgTFdQLCBBQk0sIEJNSSwgQk1JMiwgTFpDTlQsIFJUTSBvciAzRE5vdyEgCitleHRlbmRlZCBpbnN0cnVjdGlvbiBzZXRzLiAKK1RoZXNlIGV4dGVuc2lvbnMgYXJlIGFsc28gYXZhaWxhYmxlIGFzIGJ1aWx0LWluIGZ1bmN0aW9uczogc2VlCis8YSBocmVmPSJYODYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1g4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5YODYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPiwgZm9yIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9ucyBlbmFibGVkIGFuZAorZGlzYWJsZWQgYnkgdGhlc2Ugc3dpdGNoZXMuCisKKyAgICAgPHA+VG8gZ2VuZXJhdGUgU1NFL1NTRTIgaW5zdHJ1Y3Rpb25zIGF1dG9tYXRpY2FsbHkgZnJvbSBmbG9hdGluZy1wb2ludAorY29kZSAoYXMgb3Bwb3NlZCB0byAzODcgaW5zdHJ1Y3Rpb25zKSwgc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnBtYXRoPXNzZTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPkdDQyBkZXByZXNzZXMgU1NFeCBpbnN0cnVjdGlvbnMgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWF2eDwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuIEluc3RlYWQsIGl0CitnZW5lcmF0ZXMgbmV3IEFWWCBpbnN0cnVjdGlvbnMgb3IgQVZYIGVxdWl2YWxlbmNlIGZvciBhbGwgU1NFeCBpbnN0cnVjdGlvbnMKK3doZW4gbmVlZGVkLgorCisgICAgIDxwPlRoZXNlIG9wdGlvbnMgZW5hYmxlIEdDQyB0byB1c2UgdGhlc2UgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zIGluCitnZW5lcmF0ZWQgY29kZSwgZXZlbiB3aXRob3V0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tZnBtYXRoPXNzZTwvc3Bhbj48L3NhbXA+LiAgQXBwbGljYXRpb25zIHRoYXQKK3BlcmZvcm0gcnVuLXRpbWUgQ1BVIGRldGVjdGlvbiBtdXN0IGNvbXBpbGUgc2VwYXJhdGUgZmlsZXMgZm9yIGVhY2gKK3N1cHBvcnRlZCBhcmNoaXRlY3R1cmUsIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBmbGFncy4gIEluIHBhcnRpY3VsYXIsCit0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDUFUgZGV0ZWN0aW9uIGNvZGUgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQKK3RoZXNlIG9wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNsZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNsZC0xNDc0Ij48L2E+VGhpcyBvcHRpb24gaW5zdHJ1Y3RzIEdDQyB0byBlbWl0IGEgPGNvZGU+Y2xkPC9jb2RlPiBpbnN0cnVjdGlvbiBpbiB0aGUgcHJvbG9ndWUKK29mIGZ1bmN0aW9ucyB0aGF0IHVzZSBzdHJpbmcgaW5zdHJ1Y3Rpb25zLiAgU3RyaW5nIGluc3RydWN0aW9ucyBkZXBlbmQgb24KK3RoZSBERiBmbGFnIHRvIHNlbGVjdCBiZXR3ZWVuIGF1dG9pbmNyZW1lbnQgb3IgYXV0b2RlY3JlbWVudCBtb2RlLiAgV2hpbGUgdGhlCitBQkkgc3BlY2lmaWVzIHRoZSBERiBmbGFnIHRvIGJlIGNsZWFyZWQgb24gZnVuY3Rpb24gZW50cnksIHNvbWUgb3BlcmF0aW5nCitzeXN0ZW1zIHZpb2xhdGUgdGhpcyBzcGVjaWZpY2F0aW9uIGJ5IG5vdCBjbGVhcmluZyB0aGUgREYgZmxhZyBpbiB0aGVpcgorZXhjZXB0aW9uIGRpc3BhdGNoZXJzLiAgVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGNhbiBiZSBpbnZva2VkIHdpdGggdGhlIERGIGZsYWcKK3NldCwgd2hpY2ggbGVhZHMgdG8gd3JvbmcgZGlyZWN0aW9uIG1vZGUgd2hlbiBzdHJpbmcgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkLiAKK1RoaXMgb3B0aW9uIGNhbiBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gMzItYml0IHg4NiB0YXJnZXRzIGJ5IGNvbmZpZ3VyaW5nCitHQ0Mgd2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1lbmFibGUtY2xkPC9zcGFuPjwvc2FtcD4gY29uZmlndXJlIG9wdGlvbi4gIEdlbmVyYXRpb24gb2YgPGNvZGU+Y2xkPC9jb2RlPgoraW5zdHJ1Y3Rpb25zIGNhbiBiZSBzdXBwcmVzc2VkIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tY2xkPC9zcGFuPjwvc2FtcD4gY29tcGlsZXIgb3B0aW9uCitpbiB0aGlzIGNhc2UuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXZ6ZXJvdXBwZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW12emVyb3VwcGVyLTE0NzUiPjwvYT5UaGlzIG9wdGlvbiBpbnN0cnVjdHMgR0NDIHRvIGVtaXQgYSA8Y29kZT52emVyb3VwcGVyPC9jb2RlPiBpbnN0cnVjdGlvbgorYmVmb3JlIGEgdHJhbnNmZXIgb2YgY29udHJvbCBmbG93IG91dCBvZiB0aGUgZnVuY3Rpb24gdG8gbWluaW1pemUKK3RoZSBBVlggdG8gU1NFIHRyYW5zaXRpb24gcGVuYWx0eSBhcyB3ZWxsIGFzIHJlbW92ZSB1bm5lY2Vzc2FyeSA8Y29kZT56ZXJvdXBwZXI8L2NvZGU+CitpbnRyaW5zaWNzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1wcmVmZXItYXZ4MTI4PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tcHJlZmVyXzAwMmRhdngxMjgtMTQ3NiI+PC9hPlRoaXMgb3B0aW9uIGluc3RydWN0cyBHQ0MgdG8gdXNlIDEyOC1iaXQgQVZYIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9mCisyNTYtYml0IEFWWCBpbnN0cnVjdGlvbnMgaW4gdGhlIGF1dG8tdmVjdG9yaXplci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY3gxNjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWN4MTYtMTQ3NyI+PC9hPlRoaXMgb3B0aW9uIGVuYWJsZXMgR0NDIHRvIGdlbmVyYXRlIDxjb2RlPkNNUFhDSEcxNkI8L2NvZGU+IGluc3RydWN0aW9ucy4gCis8Y29kZT5DTVBYQ0hHMTZCPC9jb2RlPiBhbGxvd3MgZm9yIGF0b21pYyBvcGVyYXRpb25zIG9uIDEyOC1iaXQgZG91YmxlIHF1YWR3b3JkCisob3Igb3dvcmQpIGRhdGEgdHlwZXMuIAorVGhpcyBpcyB1c2VmdWwgZm9yIGhpZ2gtcmVzb2x1dGlvbiBjb3VudGVycyB0aGF0IGNhbiBiZSB1cGRhdGVkCitieSBtdWx0aXBsZSBwcm9jZXNzb3JzIChvciBjb3JlcykuICBUaGlzIGluc3RydWN0aW9uIGlzIGdlbmVyYXRlZCBhcyBwYXJ0IG9mCithdG9taWMgYnVpbHQtaW4gZnVuY3Rpb25zOiBzZWUgPGEgaHJlZj0iXzAwNWZfMDA1ZnN5bmMtQnVpbHRpbnMuaHRtbCNnX3RfMDA1Zl8wMDVmc3luYy1CdWlsdGlucyI+X19zeW5jIEJ1aWx0aW5zPC9hPiBvcgorPGEgaHJlZj0iXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucy5odG1sI2dfdF8wMDVmXzAwNWZhdG9taWMtQnVpbHRpbnMiPl9fYXRvbWljIEJ1aWx0aW5zPC9hPiBmb3IgZGV0YWlscy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tc2FoZjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNhaGYtMTQ3OCI+PC9hPlRoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJhdGlvbiBvZiA8Y29kZT5TQUhGPC9jb2RlPiBpbnN0cnVjdGlvbnMgaW4gNjQtYml0IGNvZGUuIAorRWFybHkgSW50ZWwgUGVudGl1bSA0IENQVXMgd2l0aCBJbnRlbCA2NCBzdXBwb3J0LAorcHJpb3IgdG8gdGhlIGludHJvZHVjdGlvbiBvZiBQZW50aXVtIDQgRzEgc3RlcCBpbiBEZWNlbWJlciAyMDA1LAorbGFja2VkIHRoZSA8Y29kZT5MQUhGPC9jb2RlPiBhbmQgPGNvZGU+U0FIRjwvY29kZT4gaW5zdHJ1Y3Rpb25zCit3aGljaCB3ZXJlIHN1cHBvcnRlZCBieSBBTUQ2NC4gCitUaGVzZSBhcmUgbG9hZCBhbmQgc3RvcmUgaW5zdHJ1Y3Rpb25zLCByZXNwZWN0aXZlbHksIGZvciBjZXJ0YWluIHN0YXR1cyBmbGFncy4gCitJbiA2NC1iaXQgbW9kZSwgdGhlIDxjb2RlPlNBSEY8L2NvZGU+IGluc3RydWN0aW9uIGlzIHVzZWQgdG8gb3B0aW1pemUgPGNvZGU+Zm1vZDwvY29kZT4sCis8Y29kZT5kcmVtPC9jb2RlPiwgYW5kIDxjb2RlPnJlbWFpbmRlcjwvY29kZT4gYnVpbHQtaW4gZnVuY3Rpb25zOworc2VlIDxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPk90aGVyIEJ1aWx0aW5zPC9hPiBmb3IgZGV0YWlscy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbW92YmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1tb3ZiZS0xNDc5Ij48L2E+VGhpcyBvcHRpb24gZW5hYmxlcyB1c2Ugb2YgdGhlIDxjb2RlPm1vdmJlPC9jb2RlPiBpbnN0cnVjdGlvbiB0byBpbXBsZW1lbnQKKzxjb2RlPl9fYnVpbHRpbl9ic3dhcDMyPC9jb2RlPiBhbmQgPGNvZGU+X19idWlsdGluX2Jzd2FwNjQ8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jcmMzMjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNyYzMyLTE0ODAiPjwvYT5UaGlzIG9wdGlvbiBlbmFibGVzIGJ1aWx0LWluIGZ1bmN0aW9ucyA8Y29kZT5fX2J1aWx0aW5faWEzMl9jcmMzMnFpPC9jb2RlPiwKKzxjb2RlPl9fYnVpbHRpbl9pYTMyX2NyYzMyaGk8L2NvZGU+LCA8Y29kZT5fX2J1aWx0aW5faWEzMl9jcmMzMnNpPC9jb2RlPiBhbmQKKzxjb2RlPl9fYnVpbHRpbl9pYTMyX2NyYzMyZGk8L2NvZGU+IHRvIGdlbmVyYXRlIHRoZSA8Y29kZT5jcmMzMjwvY29kZT4gbWFjaGluZSBpbnN0cnVjdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tcmVjaXA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1yZWNpcC0xNDgxIj48L2E+VGhpcyBvcHRpb24gZW5hYmxlcyB1c2Ugb2YgPGNvZGU+UkNQU1M8L2NvZGU+IGFuZCA8Y29kZT5SU1FSVFNTPC9jb2RlPiBpbnN0cnVjdGlvbnMKKyhhbmQgdGhlaXIgdmVjdG9yaXplZCB2YXJpYW50cyA8Y29kZT5SQ1BQUzwvY29kZT4gYW5kIDxjb2RlPlJTUVJUUFM8L2NvZGU+KQord2l0aCBhbiBhZGRpdGlvbmFsIE5ld3Rvbi1SYXBoc29uIHN0ZXAKK3RvIGluY3JlYXNlIHByZWNpc2lvbiBpbnN0ZWFkIG9mIDxjb2RlPkRJVlNTPC9jb2RlPiBhbmQgPGNvZGU+U1FSVFNTPC9jb2RlPgorKGFuZCB0aGVpciB2ZWN0b3JpemVkCit2YXJpYW50cykgZm9yIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLiAgVGhlc2UgaW5zdHJ1Y3Rpb25zCithcmUgZ2VuZXJhdGVkIG9ubHkgd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnM8L3NwYW4+PC9zYW1wPiBpcyBlbmFibGVkCit0b2dldGhlciB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1maW5pdGUtbWF0aC1vbmx5PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tdHJhcHBpbmctbWF0aDwvc3Bhbj48L3NhbXA+LiAKK05vdGUgdGhhdCB3aGlsZSB0aGUgdGhyb3VnaHB1dCBvZiB0aGUgc2VxdWVuY2UgaXMgaGlnaGVyIHRoYW4gdGhlIHRocm91Z2hwdXQKK29mIHRoZSBub24tcmVjaXByb2NhbCBpbnN0cnVjdGlvbiwgdGhlIHByZWNpc2lvbiBvZiB0aGUgc2VxdWVuY2UgY2FuIGJlCitkZWNyZWFzZWQgYnkgdXAgdG8gMiB1bHAgKGkuZS4gdGhlIGludmVyc2Ugb2YgMS4wIGVxdWFscyAwLjk5OTk5OTk0KS4KKworICAgICA8cD5Ob3RlIHRoYXQgR0NDIGltcGxlbWVudHMgPGNvZGU+MS4wZi9zcXJ0Zig8L2NvZGU+PHZhcj54PC92YXI+PGNvZGU+KTwvY29kZT4gaW4gdGVybXMgb2YgPGNvZGU+UlNRUlRTUzwvY29kZT4KKyhvciA8Y29kZT5SU1FSVFBTPC9jb2RlPikgYWxyZWFkeSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZmFzdC1tYXRoPC9zcGFuPjwvc2FtcD4gKG9yIHRoZSBhYm92ZSBvcHRpb24KK2NvbWJpbmF0aW9uKSwgYW5kIGRvZXNuJ3QgbmVlZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlY2lwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+QWxzbyBub3RlIHRoYXQgR0NDIGVtaXRzIHRoZSBhYm92ZSBzZXF1ZW5jZSB3aXRoIGFkZGl0aW9uYWwgTmV3dG9uLVJhcGhzb24gc3RlcAorZm9yIHZlY3Rvcml6ZWQgc2luZ2xlLWZsb2F0IGRpdmlzaW9uIGFuZCB2ZWN0b3JpemVkIDxjb2RlPnNxcnRmKDwvY29kZT48dmFyPng8L3Zhcj48Y29kZT4pPC9jb2RlPgorYWxyZWFkeSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZmFzdC1tYXRoPC9zcGFuPjwvc2FtcD4gKG9yIHRoZSBhYm92ZSBvcHRpb24gY29tYmluYXRpb24pLCBhbmQKK2RvZXNuJ3QgbmVlZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlY2lwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXJlY2lwPTwvY29kZT48dmFyPm9wdDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tcmVjaXBfMDAzZG9wdC0xNDgyIj48L2E+VGhpcyBvcHRpb24gY29udHJvbHMgd2hpY2ggcmVjaXByb2NhbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMKK21heSBiZSB1c2VkLiAgPHZhcj5vcHQ8L3Zhcj4gaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcHRpb25zLCB3aGljaCBtYXkKK2JlIHByZWNlZGVkIGJ5IGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGludmVydCB0aGUgb3B0aW9uOgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBhbGwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRlZmF1bHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlIHRoZSBkZWZhdWx0IGluc3RydWN0aW9ucywgZXF1aXZhbGVudCB0byA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXJlY2lwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EaXNhYmxlIGFsbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMsIGVxdWl2YWxlbnQgdG8gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1uby1yZWNpcDwvc3Bhbj48L3NhbXA+LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRpdjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FbmFibGUgdGhlIGFwcHJveGltYXRpb24gZm9yIHNjYWxhciBkaXZpc2lvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj52ZWMtZGl2PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdmVjdG9yaXplZCBkaXZpc2lvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zcXJ0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSB0aGUgYXBwcm94aW1hdGlvbiBmb3Igc2NhbGFyIHNxdWFyZSByb290LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnZlYy1zcXJ0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdmVjdG9yaXplZCBzcXVhcmUgcm9vdC4gCis8L2RsPgorCisgICAgIDxwPlNvLCBmb3IgZXhhbXBsZSwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1yZWNpcD1hbGwsIXNxcnQ8L3NwYW4+PC9zYW1wPiBlbmFibGVzCithbGwgb2YgdGhlIHJlY2lwcm9jYWwgYXBwcm94aW1hdGlvbnMsIGV4Y2VwdCBmb3Igc3F1YXJlIHJvb3QuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXZlY2xpYmFiaT08L2NvZGU+PHZhcj50eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW12ZWNsaWJhYmktMTQ4MyI+PC9hPlNwZWNpZmllcyB0aGUgQUJJIHR5cGUgdG8gdXNlIGZvciB2ZWN0b3JpemluZyBpbnRyaW5zaWNzIHVzaW5nIGFuCitleHRlcm5hbCBsaWJyYXJ5LiAgU3VwcG9ydGVkIHZhbHVlcyBmb3IgPHZhcj50eXBlPC92YXI+IGFyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN2bWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2ZvciB0aGUgSW50ZWwgc2hvcnQKK3ZlY3RvciBtYXRoIGxpYnJhcnkgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWNtbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgdGhlIEFNRCBtYXRoIGNvcmUgbGlicmFyeS4gCitUbyB1c2UgdGhpcyBvcHRpb24sIGJvdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ0cmVlLXZlY3Rvcml6ZTwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zPC9zcGFuPjwvc2FtcD4gaGF2ZSB0byBiZSBlbmFibGVkLCBhbmQgYW4gU1ZNTCBvciBBQ01MCitBQkktY29tcGF0aWJsZSBsaWJyYXJ5IG11c3QgYmUgc3BlY2lmaWVkIGF0IGxpbmsgdGltZS4KKworICAgICA8cD5HQ0MgY3VycmVudGx5IGVtaXRzIGNhbGxzIHRvIDxjb2RlPnZtbGRFeHAyPC9jb2RlPiwKKzxjb2RlPnZtbGRMbjI8L2NvZGU+LCA8Y29kZT52bWxkTG9nMTAyPC9jb2RlPiwgPGNvZGU+dm1sZExvZzEwMjwvY29kZT4sIDxjb2RlPnZtbGRQb3cyPC9jb2RlPiwKKzxjb2RlPnZtbGRUYW5oMjwvY29kZT4sIDxjb2RlPnZtbGRUYW4yPC9jb2RlPiwgPGNvZGU+dm1sZEF0YW4yPC9jb2RlPiwgPGNvZGU+dm1sZEF0YW5oMjwvY29kZT4sCis8Y29kZT52bWxkQ2JydDI8L2NvZGU+LCA8Y29kZT52bWxkU2luaDI8L2NvZGU+LCA8Y29kZT52bWxkU2luMjwvY29kZT4sIDxjb2RlPnZtbGRBc2luaDI8L2NvZGU+LAorPGNvZGU+dm1sZEFzaW4yPC9jb2RlPiwgPGNvZGU+dm1sZENvc2gyPC9jb2RlPiwgPGNvZGU+dm1sZENvczI8L2NvZGU+LCA8Y29kZT52bWxkQWNvc2gyPC9jb2RlPiwKKzxjb2RlPnZtbGRBY29zMjwvY29kZT4sIDxjb2RlPnZtbHNFeHA0PC9jb2RlPiwgPGNvZGU+dm1sc0xuNDwvY29kZT4sIDxjb2RlPnZtbHNMb2cxMDQ8L2NvZGU+LAorPGNvZGU+dm1sc0xvZzEwNDwvY29kZT4sIDxjb2RlPnZtbHNQb3c0PC9jb2RlPiwgPGNvZGU+dm1sc1Rhbmg0PC9jb2RlPiwgPGNvZGU+dm1sc1RhbjQ8L2NvZGU+LAorPGNvZGU+dm1sc0F0YW40PC9jb2RlPiwgPGNvZGU+dm1sc0F0YW5oNDwvY29kZT4sIDxjb2RlPnZtbHNDYnJ0NDwvY29kZT4sIDxjb2RlPnZtbHNTaW5oNDwvY29kZT4sCis8Y29kZT52bWxzU2luNDwvY29kZT4sIDxjb2RlPnZtbHNBc2luaDQ8L2NvZGU+LCA8Y29kZT52bWxzQXNpbjQ8L2NvZGU+LCA8Y29kZT52bWxzQ29zaDQ8L2NvZGU+LAorPGNvZGU+dm1sc0NvczQ8L2NvZGU+LCA8Y29kZT52bWxzQWNvc2g0PC9jb2RlPiBhbmQgPGNvZGU+dm1sc0Fjb3M0PC9jb2RlPiBmb3IgY29ycmVzcG9uZGluZworZnVuY3Rpb24gdHlwZSB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdmVjbGliYWJpPXN2bWw8L3NwYW4+PC9zYW1wPiBpcyB1c2VkLCBhbmQgPGNvZGU+X192cmQyX3NpbjwvY29kZT4sCis8Y29kZT5fX3ZyZDJfY29zPC9jb2RlPiwgPGNvZGU+X192cmQyX2V4cDwvY29kZT4sIDxjb2RlPl9fdnJkMl9sb2c8L2NvZGU+LCA8Y29kZT5fX3ZyZDJfbG9nMjwvY29kZT4sCis8Y29kZT5fX3ZyZDJfbG9nMTA8L2NvZGU+LCA8Y29kZT5fX3ZyczRfc2luZjwvY29kZT4sIDxjb2RlPl9fdnJzNF9jb3NmPC9jb2RlPiwKKzxjb2RlPl9fdnJzNF9leHBmPC9jb2RlPiwgPGNvZGU+X192cnM0X2xvZ2Y8L2NvZGU+LCA8Y29kZT5fX3ZyczRfbG9nMmY8L2NvZGU+LAorPGNvZGU+X192cnM0X2xvZzEwZjwvY29kZT4gYW5kIDxjb2RlPl9fdnJzNF9wb3dmPC9jb2RlPiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdHlwZQord2hlbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXZlY2xpYmFiaT1hY21sPC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tYWJpPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFiaS0xNDg0Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBjYWxsaW5nIGNvbnZlbnRpb24uICBQZXJtaXNzaWJsZSB2YWx1ZXMKK2FyZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN5c3Y8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHRoZSBBQkkgdXNlZCBvbiBHTlUvTGludXggYW5kIG90aGVyIHN5c3RlbXMsIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgdGhlIE1pY3Jvc29mdCBBQkkuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIE1pY3Jvc29mdAorQUJJIHdoZW4gdGFyZ2V0aW5nIE1pY3Jvc29mdCBXaW5kb3dzIGFuZCB0aGUgU3lzViBBQkkgb24gYWxsIG90aGVyIHN5c3RlbXMuIAorWW91IGNhbiBjb250cm9sIHRoaXMgYmVoYXZpb3IgZm9yIGEgc3BlY2lmaWMgZnVuY3Rpb24gYnkKK3VzaW5nIHRoZSBmdW5jdGlvbiBhdHRyaWJ1dGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tc19hYmk8L3NwYW4+PC9zYW1wPiZyc3F1bzsvJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zeXN2X2FiaTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitTZWUgPGEgaHJlZj0iRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sI0Z1bmN0aW9uLUF0dHJpYnV0ZXMiPkZ1bmN0aW9uIEF0dHJpYnV0ZXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10bHMtZGlhbGVjdD08L2NvZGU+PHZhcj50eXBlPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LW10bHNfMDAyZGRpYWxlY3QtMTQ4NSI+PC9hPkdlbmVyYXRlIGNvZGUgdG8gYWNjZXNzIHRocmVhZC1sb2NhbCBzdG9yYWdlIHVzaW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdudTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnUyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbnZlbnRpb25zLiAgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIGNvbnNlcnZhdGl2ZSBkZWZhdWx0OworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnUyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIG1vcmUgZWZmaWNpZW50LCBidXQgaXQgbWF5IGFkZCBjb21waWxlLSBhbmQgcnVuLXRpbWUKK3JlcXVpcmVtZW50cyB0aGF0IGNhbm5vdCBiZSBzYXRpc2ZpZWQgb24gYWxsIHN5c3RlbXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXB1c2gtYXJnczwvY29kZT48ZHQ+PGNvZGU+LW1uby1wdXNoLWFyZ3M8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1wdXNoXzAwMmRhcmdzLTE0ODYiPjwvYT48YSBuYW1lPSJpbmRleC1tbm9fMDAyZHB1c2hfMDAyZGFyZ3MtMTQ4NyI+PC9hPlVzZSBQVVNIIG9wZXJhdGlvbnMgdG8gc3RvcmUgb3V0Z29pbmcgcGFyYW1ldGVycy4gIFRoaXMgbWV0aG9kIGlzIHNob3J0ZXIKK2FuZCB1c3VhbGx5IGVxdWFsbHkgZmFzdCBhcyBtZXRob2QgdXNpbmcgU1VCL01PViBvcGVyYXRpb25zIGFuZCBpcyBlbmFibGVkCitieSBkZWZhdWx0LiAgSW4gc29tZSBjYXNlcyBkaXNhYmxpbmcgaXQgbWF5IGltcHJvdmUgcGVyZm9ybWFuY2UgYmVjYXVzZSBvZgoraW1wcm92ZWQgc2NoZWR1bGluZyBhbmQgcmVkdWNlZCBkZXBlbmRlbmNpZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFjY3VtdWxhdGUtb3V0Z29pbmctYXJnczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFjY3VtdWxhdGVfMDAyZG91dGdvaW5nXzAwMmRhcmdzLTE0ODgiPjwvYT5JZiBlbmFibGVkLCB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIG91dGdvaW5nIGFyZ3VtZW50cyBpcworY29tcHV0ZWQgaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlLiAgVGhpcyBpcyBmYXN0ZXIgb24gbW9zdCBtb2Rlcm4gQ1BVcworYmVjYXVzZSBvZiByZWR1Y2VkIGRlcGVuZGVuY2llcywgaW1wcm92ZWQgc2NoZWR1bGluZyBhbmQgcmVkdWNlZCBzdGFjayB1c2FnZQord2hlbiB0aGUgcHJlZmVycmVkIHN0YWNrIGJvdW5kYXJ5IGlzIG5vdCBlcXVhbCB0byAyLiAgVGhlIGRyYXdiYWNrIGlzIGEgbm90YWJsZQoraW5jcmVhc2UgaW4gY29kZSBzaXplLiAgVGhpcyBzd2l0Y2ggaW1wbGllcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbW5vLXB1c2gtYXJnczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW10aHJlYWRzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tdGhyZWFkcy0xNDg5Ij48L2E+U3VwcG9ydCB0aHJlYWQtc2FmZSBleGNlcHRpb24gaGFuZGxpbmcgb24gTWluR1cuICBQcm9ncmFtcyB0aGF0IHJlbHkKK29uIHRocmVhZC1zYWZlIGV4Y2VwdGlvbiBoYW5kbGluZyBtdXN0IGNvbXBpbGUgYW5kIGxpbmsgYWxsIGNvZGUgd2l0aCB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tdGhyZWFkczwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gIFdoZW4gY29tcGlsaW5nLCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbXRocmVhZHM8L3NwYW4+PC9zYW1wPiBkZWZpbmVzCis8Y29kZT4tRF9NVDwvY29kZT47IHdoZW4gbGlua2luZywgaXQgbGlua3MgaW4gYSBzcGVjaWFsIHRocmVhZCBoZWxwZXIgbGlicmFyeQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWxtaW5nd3RocmQ8L3NwYW4+PC9zYW1wPiB3aGljaCBjbGVhbnMgdXAgcGVyLXRocmVhZCBleGNlcHRpb24taGFuZGxpbmcgZGF0YS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tYWxpZ24tc3RyaW5nb3BzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tbm9fMDAyZGFsaWduXzAwMmRzdHJpbmdvcHMtMTQ5MCI+PC9hPkRvIG5vdCBhbGlnbiB0aGUgZGVzdGluYXRpb24gb2YgaW5saW5lZCBzdHJpbmcgb3BlcmF0aW9ucy4gIFRoaXMgc3dpdGNoIHJlZHVjZXMKK2NvZGUgc2l6ZSBhbmQgaW1wcm92ZXMgcGVyZm9ybWFuY2UgaW4gY2FzZSB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBhbGlnbmVkLAorYnV0IEdDQyBkb2Vzbid0IGtub3cgYWJvdXQgaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWlubGluZS1hbGwtc3RyaW5nb3BzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1taW5saW5lXzAwMmRhbGxfMDAyZHN0cmluZ29wcy0xNDkxIj48L2E+QnkgZGVmYXVsdCBHQ0MgaW5saW5lcyBzdHJpbmcgb3BlcmF0aW9ucyBvbmx5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzCitrbm93biB0byBiZSBhbGlnbmVkIHRvIGxlYXN0IGEgNC1ieXRlIGJvdW5kYXJ5LiAKK1RoaXMgZW5hYmxlcyBtb3JlIGlubGluaW5nIGFuZCBpbmNyZWFzZXMgY29kZQorc2l6ZSwgYnV0IG1heSBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIGNvZGUgdGhhdCBkZXBlbmRzIG9uIGZhc3QKKzxjb2RlPm1lbWNweTwvY29kZT4sIDxjb2RlPnN0cmxlbjwvY29kZT4sCithbmQgPGNvZGU+bWVtc2V0PC9jb2RlPiBmb3Igc2hvcnQgbGVuZ3Rocy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1taW5saW5lLXN0cmluZ29wcy1keW5hbWljYWxseTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWlubGluZV8wMDJkc3RyaW5nb3BzXzAwMmRkeW5hbWljYWxseS0xNDkyIj48L2E+Rm9yIHN0cmluZyBvcGVyYXRpb25zIG9mIHVua25vd24gc2l6ZSwgdXNlIHJ1bi10aW1lIGNoZWNrcyB3aXRoCitpbmxpbmUgY29kZSBmb3Igc21hbGwgYmxvY2tzIGFuZCBhIGxpYnJhcnkgY2FsbCBmb3IgbGFyZ2UgYmxvY2tzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zdHJpbmdvcC1zdHJhdGVneT08L2NvZGU+PHZhcj5hbGc8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtbXN0cmluZ29wXzAwMmRzdHJhdGVneV8wMDNkXzAwNDB2YXJfMDA3YmFsZ18wMDdkLTE0OTMiPjwvYT5PdmVycmlkZSB0aGUgaW50ZXJuYWwgZGVjaXNpb24gaGV1cmlzdGljIGZvciB0aGUgcGFydGljdWxhciBhbGdvcml0aG0gdG8gdXNlCitmb3IgaW5saW5pbmcgc3RyaW5nIG9wZXJhdGlvbnMuICBUaGUgYWxsb3dlZCB2YWx1ZXMgZm9yIDx2YXI+YWxnPC92YXI+IGFyZToKKworICAgICAgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlcF9ieXRlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVwXzRieXRlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVwXzhieXRlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkV4cGFuZCB1c2luZyBpMzg2IDxjb2RlPnJlcDwvY29kZT4gcHJlZml4IG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ieXRlX2xvb3A8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb29wPC9zcGFuPjwvc2FtcD4mcnNxdW87PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dW5yb2xsZWRfbG9vcDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FeHBhbmQgaW50byBhbiBpbmxpbmUgbG9vcC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5saWJjYWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkFsd2F5cyB1c2UgYSBsaWJyYXJ5IGNhbGwuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1vbWl0XzAwMmRsZWFmXzAwMmRmcmFtZV8wMDJkcG9pbnRlci0xNDk0Ij48L2E+RG9uJ3Qga2VlcCB0aGUgZnJhbWUgcG9pbnRlciBpbiBhIHJlZ2lzdGVyIGZvciBsZWFmIGZ1bmN0aW9ucy4gIFRoaXMKK2F2b2lkcyB0aGUgaW5zdHJ1Y3Rpb25zIHRvIHNhdmUsIHNldCB1cCwgYW5kIHJlc3RvcmUgZnJhbWUgcG9pbnRlcnMgYW5kCittYWtlcyBhbiBleHRyYSByZWdpc3RlciBhdmFpbGFibGUgaW4gbGVhZiBmdW5jdGlvbnMuICBUaGUgb3B0aW9uCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm9taXQtbGVhZi1mcmFtZS1wb2ludGVyPC9zcGFuPjwvc2FtcD4gcmVtb3ZlcyB0aGUgZnJhbWUgcG9pbnRlciBmb3IgbGVhZiBmdW5jdGlvbnMsCit3aGljaCBtaWdodCBtYWtlIGRlYnVnZ2luZyBoYXJkZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRscy1kaXJlY3Qtc2VnLXJlZnM8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tdGxzLWRpcmVjdC1zZWctcmVmczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRsc18wMDJkZGlyZWN0XzAwMmRzZWdfMDAyZHJlZnMtMTQ5NSI+PC9hPkNvbnRyb2xzIHdoZXRoZXIgVExTIHZhcmlhYmxlcyBtYXkgYmUgYWNjZXNzZWQgd2l0aCBvZmZzZXRzIGZyb20gdGhlCitUTFMgc2VnbWVudCByZWdpc3RlciAoPGNvZGU+JWdzPC9jb2RlPiBmb3IgMzItYml0LCA8Y29kZT4lZnM8L2NvZGU+IGZvciA2NC1iaXQpLAorb3Igd2hldGhlciB0aGUgdGhyZWFkIGJhc2UgcG9pbnRlciBtdXN0IGJlIGFkZGVkLiAgV2hldGhlciBvciBub3QgdGhpcworaXMgdmFsaWQgZGVwZW5kcyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgYW5kIHdoZXRoZXIgaXQgbWFwcyB0aGUKK3NlZ21lbnQgdG8gY292ZXIgdGhlIGVudGlyZSBUTFMgYXJlYS4KKworICAgICA8cD5Gb3Igc3lzdGVtcyB0aGF0IHVzZSB0aGUgR05VIEMgTGlicmFyeSwgdGhlIGRlZmF1bHQgaXMgb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXNzZTJhdng8L2NvZGU+PGR0Pjxjb2RlPi1tbm8tc3NlMmF2eDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXNzZTJhdngtMTQ5NiI+PC9hPlNwZWNpZnkgdGhhdCB0aGUgYXNzZW1ibGVyIHNob3VsZCBlbmNvZGUgU1NFIGluc3RydWN0aW9ucyB3aXRoIFZFWAorcHJlZml4LiAgVGhlIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWF2eDwvc3Bhbj48L3NhbXA+IHR1cm5zIHRoaXMgb24gYnkgZGVmYXVsdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZmVudHJ5PC9jb2RlPjxkdD48Y29kZT4tbW5vLWZlbnRyeTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWZlbnRyeS0xNDk3Ij48L2E+SWYgcHJvZmlsaW5nIGlzIGFjdGl2ZSAoPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXBnPC9zcGFuPjwvc2FtcD4pLCBwdXQgdGhlIHByb2ZpbGluZworY291bnRlciBjYWxsIGJlZm9yZSB0aGUgcHJvbG9ndWUuIAorTm90ZTogT24geDg2IGFyY2hpdGVjdHVyZXMgdGhlIGF0dHJpYnV0ZSA8Y29kZT5tc19ob29rX3Byb2xvZ3VlPC9jb2RlPgoraXNuJ3QgcG9zc2libGUgYXQgdGhlIG1vbWVudCBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1mZW50cnk8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXBnPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbThiaXQtaWRpdjwvY29kZT48ZHQ+PGNvZGU+LW1uby04Yml0LWlkaXY8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdDhiaXRfMDAyZGlkaXYtMTQ5OCI+PC9hPk9uIHNvbWUgcHJvY2Vzc29ycywgbGlrZSBJbnRlbCBBdG9tLCA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGRpdmlkZSBpcworbXVjaCBmYXN0ZXIgdGhhbiAzMi1iaXQvNjQtYml0IGludGVnZXIgZGl2aWRlLiAgVGhpcyBvcHRpb24gZ2VuZXJhdGVzIGEKK3J1bi10aW1lIGNoZWNrLiAgSWYgYm90aCBkaXZpZGVuZCBhbmQgZGl2aXNvciBhcmUgd2l0aGluIHJhbmdlIG9mIDAKK3RvIDI1NSwgOC1iaXQgdW5zaWduZWQgaW50ZWdlciBkaXZpZGUgaXMgdXNlZCBpbnN0ZWFkIG9mCiszMi1iaXQvNjQtYml0IGludGVnZXIgZGl2aWRlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hdngyNTYtc3BsaXQtdW5hbGlnbmVkLWxvYWQ8L2NvZGU+PGR0Pjxjb2RlPi1tYXZ4MjU2LXNwbGl0LXVuYWxpZ25lZC1zdG9yZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtYXZ4MjU2XzAwMmRzcGxpdF8wMDJkdW5hbGlnbmVkXzAwMmRsb2FkLTE0OTkiPjwvYT48YSBuYW1lPSJpbmRleC1hdngyNTZfMDAyZHNwbGl0XzAwMmR1bmFsaWduZWRfMDAyZHN0b3JlLTE1MDAiPjwvYT5TcGxpdCAzMi1ieXRlIEFWWCB1bmFsaWduZWQgbG9hZCBhbmQgc3RvcmUuCisKKyA8L2RsPgorCisgPHA+VGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzd2l0Y2hlcyBhcmUgc3VwcG9ydGVkIGluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZQorb24geDg2LTY0IHByb2Nlc3NvcnMgaW4gNjQtYml0IGVudmlyb25tZW50cy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW0zMjwvY29kZT48ZHQ+PGNvZGU+LW02NDwvY29kZT48ZHQ+PGNvZGU+LW14MzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW0zMi0xNTAxIj48L2E+PGEgbmFtZT0iaW5kZXgtbTY0LTE1MDIiPjwvYT48YSBuYW1lPSJpbmRleC1teDMyLTE1MDMiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciBhIDMyLWJpdCBvciA2NC1iaXQgZW52aXJvbm1lbnQuIAorVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tMzI8L3NwYW4+PC9zYW1wPiBvcHRpb24gc2V0cyA8Y29kZT5pbnQ8L2NvZGU+LCA8Y29kZT5sb25nPC9jb2RlPiwgYW5kIHBvaW50ZXIgdHlwZXMKK3RvIDMyIGJpdHMsIGFuZAorZ2VuZXJhdGVzIGNvZGUgdGhhdCBydW5zIG9uIGFueSBpMzg2IHN5c3RlbS4KKworICAgICA8cD5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW02NDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBzZXRzIDxjb2RlPmludDwvY29kZT4gdG8gMzIgYml0cyBhbmQgPGNvZGU+bG9uZzwvY29kZT4gYW5kIHBvaW50ZXIKK3R5cGVzIHRvIDY0IGJpdHMsIGFuZCBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIHg4Ni02NCBhcmNoaXRlY3R1cmUuIAorRm9yIERhcndpbiBvbmx5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbTY0PC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFsc28gdHVybnMgb2ZmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXBpYzwvc3Bhbj48L3NhbXA+CithbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1keW5hbWljLW5vLXBpYzwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuCisKKyAgICAgPHA+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1teDMyPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHNldHMgPGNvZGU+aW50PC9jb2RlPiwgPGNvZGU+bG9uZzwvY29kZT4sIGFuZCBwb2ludGVyIHR5cGVzCit0byAzMiBiaXRzLCBhbmQKK2dlbmVyYXRlcyBjb2RlIGZvciB0aGUgeDg2LTY0IGFyY2hpdGVjdHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8tcmVkLXpvbmU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub18wMDJkcmVkXzAwMmR6b25lLTE1MDQiPjwvYT5EbyBub3QgdXNlIGEgc28tY2FsbGVkICZsZHF1bztyZWQgem9uZSZyZHF1bzsgZm9yIHg4Ni02NCBjb2RlLiAgVGhlIHJlZCB6b25lIGlzIG1hbmRhdGVkCitieSB0aGUgeDg2LTY0IEFCSTsgaXQgaXMgYSAxMjgtYnl0ZSBhcmVhIGJleW9uZCB0aGUgbG9jYXRpb24gb2YgdGhlCitzdGFjayBwb2ludGVyIHRoYXQgaXMgbm90IG1vZGlmaWVkIGJ5IHNpZ25hbCBvciBpbnRlcnJ1cHQgaGFuZGxlcnMKK2FuZCB0aGVyZWZvcmUgY2FuIGJlIHVzZWQgZm9yIHRlbXBvcmFyeSBkYXRhIHdpdGhvdXQgYWRqdXN0aW5nIHRoZSBzdGFjaworcG9pbnRlci4gIFRoZSBmbGFnIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbm8tcmVkLXpvbmU8L3NwYW4+PC9zYW1wPiBkaXNhYmxlcyB0aGlzIHJlZCB6b25lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jbW9kZWw9c21hbGw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jbW9kZWxfMDAzZHNtYWxsLTE1MDUiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgc21hbGwgY29kZSBtb2RlbDogdGhlIHByb2dyYW0gYW5kIGl0cyBzeW1ib2xzIG11c3QKK2JlIGxpbmtlZCBpbiB0aGUgbG93ZXIgMiBHQiBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gIFBvaW50ZXJzIGFyZSA2NCBiaXRzLiAKK1Byb2dyYW1zIGNhbiBiZSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IGxpbmtlZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK2NvZGUgbW9kZWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWNtb2RlbD1rZXJuZWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jbW9kZWxfMDAzZGtlcm5lbC0xNTA2Ij48L2E+R2VuZXJhdGUgY29kZSBmb3IgdGhlIGtlcm5lbCBjb2RlIG1vZGVsLiAgVGhlIGtlcm5lbCBydW5zIGluIHRoZQorbmVnYXRpdmUgMiBHQiBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gCitUaGlzIG1vZGVsIGhhcyB0byBiZSB1c2VkIGZvciBMaW51eCBrZXJuZWwgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tY21vZGVsPW1lZGl1bTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWNtb2RlbF8wMDNkbWVkaXVtLTE1MDciPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgbWVkaXVtIG1vZGVsOiB0aGUgcHJvZ3JhbSBpcyBsaW5rZWQgaW4gdGhlIGxvd2VyIDIKK0dCIG9mIHRoZSBhZGRyZXNzIHNwYWNlLiAgU21hbGwgc3ltYm9scyBhcmUgYWxzbyBwbGFjZWQgdGhlcmUuICBTeW1ib2xzCit3aXRoIHNpemVzIGxhcmdlciB0aGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tbGFyZ2UtZGF0YS10aHJlc2hvbGQ8L3NwYW4+PC9zYW1wPiBhcmUgcHV0IGludG8KK2xhcmdlIGRhdGEgb3IgQlNTIHNlY3Rpb25zIGFuZCBjYW4gYmUgbG9jYXRlZCBhYm92ZSAyR0IuICBQcm9ncmFtcyBjYW4KK2JlIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgbGlua2VkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1jbW9kZWw9bGFyZ2U8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1jbW9kZWxfMDAzZGxhcmdlLTE1MDgiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciB0aGUgbGFyZ2UgbW9kZWwuICBUaGlzIG1vZGVsIG1ha2VzIG5vIGFzc3VtcHRpb25zCithYm91dCBhZGRyZXNzZXMgYW5kIHNpemVzIG9mIHNlY3Rpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1hZGRyZXNzLW1vZGU9bG9uZzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFkZHJlc3NfMDAyZG1vZGVfMDAzZGxvbmctMTUwOSI+PC9hPkdlbmVyYXRlIGNvZGUgZm9yIGxvbmcgYWRkcmVzcyBtb2RlLiAgVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgNjQtYml0CithbmQgeDMyIGVudmlyb25tZW50cy4gIEl0IGlzIHRoZSBkZWZhdWx0IGFkZHJlc3MgbW9kZSBmb3IgNjQtYml0CitlbnZpcm9ubWVudHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbWFkZHJlc3MtbW9kZT1zaG9ydDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbWFkZHJlc3NfMDAyZG1vZGVfMDAzZHNob3J0LTE1MTAiPjwvYT5HZW5lcmF0ZSBjb2RlIGZvciBzaG9ydCBhZGRyZXNzIG1vZGUuICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciAzMi1iaXQKK2FuZCB4MzIgZW52aXJvbm1lbnRzLiAgSXQgaXMgdGhlIGRlZmF1bHQgYWRkcmVzcyBtb2RlIGZvciAzMi1iaXQgYW5kCit4MzIgZW52aXJvbm1lbnRzLiAKKzwvZGw+CisKKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVhZDA1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvaTM4Ni1hbmQteDg2XzAwMmQ2NC1XaW5kb3dzLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDExNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aTM4NiBhbmQgeDg2LTY0IFdpbmRvd3MgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiIHRpdGxlPSJpMzg2IGFuZCB4ODYtNjQgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiIHRpdGxlPSJJQS02NCBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImkzODYtYW5kLXg4Ni02NC1XaW5kb3dzLU9wdGlvbnMiPjwvYT4KKzxhIG5hbWU9ImkzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklBXzAwMmQ2NC1PcHRpb25zLmh0bWwjSUFfMDAyZDY0LU9wdGlvbnMiPklBLTY0IE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPlN1Ym1vZGVsIE9wdGlvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjE3LjE3IGkzODYgYW5kIHg4Ni02NCBXaW5kb3dzIE9wdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1pMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy0xNTExIj48L2E+CitUaGVzZSBhZGRpdGlvbmFsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgTWljcm9zb2Z0IFdpbmRvd3MgdGFyZ2V0czoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LW1jb25zb2xlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tY29uc29sZS0xNTEyIj48L2E+VGhpcyBvcHRpb24KK3NwZWNpZmllcyB0aGF0IGEgY29uc29sZSBhcHBsaWNhdGlvbiBpcyB0byBiZSBnZW5lcmF0ZWQsIGJ5CitpbnN0cnVjdGluZyB0aGUgbGlua2VyIHRvIHNldCB0aGUgUEUgaGVhZGVyIHN1YnN5c3RlbSB0eXBlCityZXF1aXJlZCBmb3IgY29uc29sZSBhcHBsaWNhdGlvbnMuIAorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBDeWd3aW4gYW5kIE1pbkdXIHRhcmdldHMgYW5kIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgb24gdGhvc2UgdGFyZ2V0cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tZGxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1tZGxsLTE1MTMiPjwvYT5UaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIEN5Z3dpbiBhbmQgTWluR1cgdGFyZ2V0cy4gIEl0CitzcGVjaWZpZXMgdGhhdCBhIERMTCZtZGFzaDthIGR5bmFtaWMgbGluayBsaWJyYXJ5Jm1kYXNoO2lzIHRvIGJlCitnZW5lcmF0ZWQsIGVuYWJsaW5nIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHJlcXVpcmVkIHJ1bnRpbWUKK3N0YXJ0dXAgb2JqZWN0IGFuZCBlbnRyeSBwb2ludC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm9wLWZ1bi1kbGxpbXBvcnQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW1ub3BfMDAyZGZ1bl8wMDJkZGxsaW1wb3J0LTE1MTQiPjwvYT5UaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIEN5Z3dpbiBhbmQgTWluR1cgdGFyZ2V0cy4gIEl0CitzcGVjaWZpZXMgdGhhdCB0aGUgPGNvZGU+ZGxsaW1wb3J0PC9jb2RlPiBhdHRyaWJ1dGUgc2hvdWxkIGJlIGlnbm9yZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXRocmVhZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXRocmVhZC0xNTE1Ij48L2E+VGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBNaW5HVyB0YXJnZXRzLiBJdCBzcGVjaWZpZXMKK3RoYXQgTWluR1ctc3BlY2lmaWMgdGhyZWFkIHN1cHBvcnQgaXMgdG8gYmUgdXNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tdW5pY29kZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXVuaWNvZGUtMTUxNiI+PC9hPlRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgTWluR1ctdzY0IHRhcmdldHMuICBJdCBjYXVzZXMKK3RoZSA8Y29kZT5VTklDT0RFPC9jb2RlPiBwcmVwcm9jZXNzb3IgbWFjcm8gdG8gYmUgcHJlZGVmaW5lZCwgYW5kCitjaG9vc2VzIFVuaWNvZGUtY2FwYWJsZSBydW50aW1lIHN0YXJ0dXAgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1td2luMzI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LW13aW4zMi0xNTE3Ij48L2E+VGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBDeWd3aW4gYW5kIE1pbkdXIHRhcmdldHMuICBJdAorc3BlY2lmaWVzIHRoYXQgdGhlIHR5cGljYWwgTWljcm9zb2Z0IFdpbmRvd3MgcHJlZGVmaW5lZCBtYWNyb3MgYXJlIHRvCitiZSBzZXQgaW4gdGhlIHByZS1wcm9jZXNzb3IsIGJ1dCBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGNob2ljZQorb2YgcnVudGltZSBsaWJyYXJ5L3N0YXJ0dXAgY29kZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1td2luZG93czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXdpbmRvd3MtMTUxOCI+PC9hPlRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgQ3lnd2luIGFuZCBNaW5HVyB0YXJnZXRzLiAgSXQKK3NwZWNpZmllcyB0aGF0IGEgR1VJIGFwcGxpY2F0aW9uIGlzIHRvIGJlIGdlbmVyYXRlZCBieQoraW5zdHJ1Y3RpbmcgdGhlIGxpbmtlciB0byBzZXQgdGhlIFBFIGhlYWRlciBzdWJzeXN0ZW0gdHlwZQorYXBwcm9wcmlhdGVseS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tc2V0LXN0YWNrLWV4ZWN1dGFibGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWZub18wMDJkc2V0XzAwMmRzdGFja18wMDJkZXhlY3V0YWJsZS0xNTE5Ij48L2E+VGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBNaW5HVyB0YXJnZXRzLiBJdCBzcGVjaWZpZXMgdGhhdAordGhlIGV4ZWN1dGFibGUgZmxhZyBmb3IgdGhlIHN0YWNrIHVzZWQgYnkgbmVzdGVkIGZ1bmN0aW9ucyBpc24ndAorc2V0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgYmluYXJpZXMgcnVubmluZyBpbiBrZXJuZWwgbW9kZSBvZgorTWljcm9zb2Z0IFdpbmRvd3MsIGFzIHRoZXJlIHRoZSBVc2VyMzIgQVBJLCB3aGljaCBpcyB1c2VkIHRvIHNldCBleGVjdXRhYmxlCitwcml2aWxlZ2VzLCBpc24ndCBhdmFpbGFibGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZndyaXRhYmxlLXJlbG9jYXRlZC1yZGF0YTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZm5vXzAwMmR3cml0YWJsZV8wMDJkcmVsb2NhdGVkXzAwMmRyZGF0YS0xNTIwIj48L2E+VGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBNaW5HVyBhbmQgQ3lnd2luIHRhcmdldHMuICBJdCBzcGVjaWZpZXMKK3RoYXQgcmVsb2NhdGVkLWRhdGEgaW4gcmVhZC1vbmx5IHNlY3Rpb24gaXMgcHV0IGludG8gLmRhdGEKK3NlY3Rpb24uICBUaGlzIGlzIGEgbmVjZXNzYXJ5IGZvciBvbGRlciBydW50aW1lcyBub3Qgc3VwcG9ydGluZworbW9kaWZpY2F0aW9uIG9mIC5yZGF0YSBzZWN0aW9ucyBmb3IgcHNldWRvLXJlbG9jYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbXBlLWFsaWduZWQtY29tbW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtbXBlXzAwMmRhbGlnbmVkXzAwMmRjb21tb25zLTE1MjEiPjwvYT5UaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIEN5Z3dpbiBhbmQgTWluR1cgdGFyZ2V0cy4gIEl0CitzcGVjaWZpZXMgdGhhdCB0aGUgR05VIGV4dGVuc2lvbiB0byB0aGUgUEUgZmlsZSBmb3JtYXQgdGhhdAorcGVybWl0cyB0aGUgY29ycmVjdCBhbGlnbm1lbnQgb2YgQ09NTU9OIHZhcmlhYmxlcyBzaG91bGQgYmUKK3VzZWQgd2hlbiBnZW5lcmF0aW5nIGNvZGUuICBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYKK0dDQyBkZXRlY3RzIHRoYXQgdGhlIHRhcmdldCBhc3NlbWJsZXIgZm91bmQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KK3N1cHBvcnRzIHRoZSBmZWF0dXJlLiAKKzwvZGw+CisKKyA8cD5TZWUgYWxzbyB1bmRlciA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPiBmb3Igc3RhbmRhcmQgb3B0aW9ucy4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvaW5kZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWVhZTBiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9pbmRleC5odG1sCkBAIC0wLDAgKzEsNjIzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Vc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iI1RvcCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgIkZ1bmRpbmcgRnJlZSBTb2Z0d2FyZSIsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCisiR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSB1c2Ugb2YgdGhlIEdOVSBjb21waWxlcnMuCisgPHByZSBjbGFzcz0ic3AiPgorCis8L3ByZT4KK0NvcHlyaWdodCAmY29weTsgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgPHA+UGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nICZsZHF1bztGdW5kaW5nIEZyZWUgU29mdHdhcmUmcmRxdW87LCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorJmxkcXVvO0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSZyZHF1bzsuCisKKyA8cD4oYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyA8cD5BIEdOVSBNYW51YWwKKworIDxwPihiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgPHA+WW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorIDxwcmUgY2xhc3M9InNwIj4KKworPC9wcmU+CisKKzxkaXYgY2xhc3M9InNob3J0Y29udGVudHMiPgorPGgyPlNob3J0IENvbnRlbnRzPC9oMj4KKzx1bD4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19Ub3AiPkludHJvZHVjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX0dfMDAyYl8wMDJiLWFuZC1HQ0MiPjEgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2VzIFN1cHBvcnRlZCBieSBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19TdGFuZGFyZHMiPjIgTGFuZ3VhZ2UgU3RhbmRhcmRzIFN1cHBvcnRlZCBieSBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19JbnZva2luZy1HQ0MiPjMgR0NDIENvbW1hbmQgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX0MtSW1wbGVtZW50YXRpb24iPjQgQyBJbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGJlaGF2aW9yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24iPjUgQysrIEltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19DLUV4dGVuc2lvbnMiPjYgRXh0ZW5zaW9ucyB0byB0aGUgQyBMYW5ndWFnZSBGYW1pbHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19DXzAwMmJfMDAyYi1FeHRlbnNpb25zIj43IEV4dGVuc2lvbnMgdG8gdGhlIEMrKyBMYW5ndWFnZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX09iamVjdGl2ZV8wMDJkQyI+OCBHTlUgT2JqZWN0aXZlLUMgZmVhdHVyZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19Db21wYXRpYmlsaXR5Ij45IEJpbmFyeSBDb21wYXRpYmlsaXR5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfR2NvdiI+MTAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiZtZGFzaDthIFRlc3QgQ292ZXJhZ2UgUHJvZ3JhbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX1Ryb3VibGUiPjExIEtub3duIENhdXNlcyBvZiBUcm91YmxlIHdpdGggR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfQnVncyI+MTIgUmVwb3J0aW5nIEJ1Z3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19TZXJ2aWNlIj4xMyBIb3cgVG8gR2V0IEhlbHAgd2l0aCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19Db250cmlidXRpbmciPjE0IENvbnRyaWJ1dGluZyB0byBHQ0MgRGV2ZWxvcG1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19GdW5kaW5nIj5GdW5kaW5nIEZyZWUgU29mdHdhcmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19HTlUtUHJvamVjdCI+VGhlIEdOVSBQcm9qZWN0IGFuZCBHTlUvTGludXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19Db3B5aW5nIj5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfQ29udHJpYnV0b3JzIj5Db250cmlidXRvcnMgdG8gR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfT3B0aW9uLUluZGV4Ij5PcHRpb24gSW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19LZXl3b3JkLUluZGV4Ij5LZXl3b3JkIEluZGV4PC9hPjwvbGk+Cis8L3VsPgorPC9kaXY+CisKKworCisgPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGgyPlRhYmxlIG9mIENvbnRlbnRzPC9oMj4KKzx1bD4KKzxsaT48YSBuYW1lPSJ0b2NfVG9wIiBocmVmPSJpbmRleC5odG1sI1RvcCI+SW50cm9kdWN0aW9uPC9hPgorPGxpPjxhIG5hbWU9InRvY19HXzAwMmJfMDAyYi1hbmQtR0NDIiBocmVmPSJHXzAwMmJfMDAyYi1hbmQtR0NDLmh0bWwjR18wMDJiXzAwMmItYW5kLUdDQyI+MSBQcm9ncmFtbWluZyBMYW5ndWFnZXMgU3VwcG9ydGVkIGJ5IEdDQzwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfU3RhbmRhcmRzIiBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPjIgTGFuZ3VhZ2UgU3RhbmRhcmRzIFN1cHBvcnRlZCBieSBHQ0M8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj4yLjEgQyBsYW5ndWFnZTwvYT4KKzxsaT48YSBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPjIuMiBDKysgbGFuZ3VhZ2U8L2E+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj4yLjMgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgbGFuZ3VhZ2VzPC9hPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+Mi40IEdvIGxhbmd1YWdlPC9hPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyI+Mi41IFJlZmVyZW5jZXMgZm9yIG90aGVyIGxhbmd1YWdlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfSW52b2tpbmctR0NDIiBocmVmPSJJbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPjMgR0NDIENvbW1hbmQgT3B0aW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJPcHRpb24tU3VtbWFyeS5odG1sI09wdGlvbi1TdW1tYXJ5Ij4zLjEgT3B0aW9uIFN1bW1hcnk8L2E+Cis8bGk+PGEgaHJlZj0iT3ZlcmFsbC1PcHRpb25zLmh0bWwjT3ZlcmFsbC1PcHRpb25zIj4zLjIgT3B0aW9ucyBDb250cm9sbGluZyB0aGUgS2luZCBvZiBPdXRwdXQ8L2E+Cis8bGk+PGEgaHJlZj0iSW52b2tpbmctR18wMDJiXzAwMmIuaHRtbCNJbnZva2luZy1HXzAwMmJfMDAyYiI+My4zIENvbXBpbGluZyBDKysgUHJvZ3JhbXM8L2E+Cis8bGk+PGEgaHJlZj0iQy1EaWFsZWN0LU9wdGlvbnMuaHRtbCNDLURpYWxlY3QtT3B0aW9ucyI+My40IE9wdGlvbnMgQ29udHJvbGxpbmcgQyBEaWFsZWN0PC9hPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI0NfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucyI+My41IE9wdGlvbnMgQ29udHJvbGxpbmcgQysrIERpYWxlY3Q8L2E+Cis8bGk+PGEgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLWFuZC1PYmplY3RpdmVfMDAyZENfMDAyYl8wMDJiLURpYWxlY3QtT3B0aW9ucy5odG1sI09iamVjdGl2ZV8wMDJkQy1hbmQtT2JqZWN0aXZlXzAwMmRDXzAwMmJfMDAyYi1EaWFsZWN0LU9wdGlvbnMiPjMuNiBPcHRpb25zIENvbnRyb2xsaW5nIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzPC9hPgorPGxpPjxhIGhyZWY9Ikxhbmd1YWdlLUluZGVwZW5kZW50LU9wdGlvbnMuaHRtbCNMYW5ndWFnZS1JbmRlcGVuZGVudC1PcHRpb25zIj4zLjcgT3B0aW9ucyB0byBDb250cm9sIERpYWdub3N0aWMgTWVzc2FnZXMgRm9ybWF0dGluZzwvYT4KKzxsaT48YSBocmVmPSJXYXJuaW5nLU9wdGlvbnMuaHRtbCNXYXJuaW5nLU9wdGlvbnMiPjMuOCBPcHRpb25zIHRvIFJlcXVlc3Qgb3IgU3VwcHJlc3MgV2FybmluZ3M8L2E+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+My45IE9wdGlvbnMgZm9yIERlYnVnZ2luZyBZb3VyIFByb2dyYW0gb3IgR0NDPC9hPgorPGxpPjxhIGhyZWY9Ik9wdGltaXplLU9wdGlvbnMuaHRtbCNPcHRpbWl6ZS1PcHRpb25zIj4zLjEwIE9wdGlvbnMgVGhhdCBDb250cm9sIE9wdGltaXphdGlvbjwvYT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzb3ItT3B0aW9ucy5odG1sI1ByZXByb2Nlc3Nvci1PcHRpb25zIj4zLjExIE9wdGlvbnMgQ29udHJvbGxpbmcgdGhlIFByZXByb2Nlc3NvcjwvYT4KKzxsaT48YSBocmVmPSJBc3NlbWJsZXItT3B0aW9ucy5odG1sI0Fzc2VtYmxlci1PcHRpb25zIj4zLjEyIFBhc3NpbmcgT3B0aW9ucyB0byB0aGUgQXNzZW1ibGVyPC9hPgorPGxpPjxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+My4xMyBPcHRpb25zIGZvciBMaW5raW5nPC9hPgorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiPjMuMTQgT3B0aW9ucyBmb3IgRGlyZWN0b3J5IFNlYXJjaDwvYT4KKzxsaT48YSBocmVmPSJTcGVjLUZpbGVzLmh0bWwjU3BlYy1GaWxlcyI+My4xNSBTcGVjaWZ5aW5nIHN1YnByb2Nlc3NlcyBhbmQgdGhlIHN3aXRjaGVzIHRvIHBhc3MgdG8gdGhlbTwvYT4KKzxsaT48YSBocmVmPSJUYXJnZXQtT3B0aW9ucy5odG1sI1RhcmdldC1PcHRpb25zIj4zLjE2IFNwZWNpZnlpbmcgVGFyZ2V0IE1hY2hpbmUgYW5kIENvbXBpbGVyIFZlcnNpb248L2E+Cis8bGk+PGEgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiPjMuMTcgSGFyZHdhcmUgTW9kZWxzIGFuZCBDb25maWd1cmF0aW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBQXJjaDY0LU9wdGlvbnMuaHRtbCNBQXJjaDY0LU9wdGlvbnMiPjMuMTcuMSBBQXJjaDY0IE9wdGlvbnM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQUFyY2g2NC1PcHRpb25zLmh0bWwjQUFyY2g2NC1PcHRpb25zIj4zLjE3LjEuMSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbWFyY2g8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1jcHU8L3NwYW4+PC9zYW1wPiBmZWF0dXJlIG1vZGlmaWVyczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBZGFwdGV2YS1FcGlwaGFueS1PcHRpb25zLmh0bWwjQWRhcHRldmEtRXBpcGhhbnktT3B0aW9ucyI+My4xNy4yIEFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU9wdGlvbnMuaHRtbCNBUk0tT3B0aW9ucyI+My4xNy4zIEFSTSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkFWUi1PcHRpb25zLmh0bWwjQVZSLU9wdGlvbnMiPjMuMTcuNCBBVlIgT3B0aW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj4zLjE3LjQuMSA8Y29kZT5FSU5EPC9jb2RlPiBhbmQgRGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxMjggS2kgQnl0ZXMgb2YgRmxhc2g8L2E+Cis8bGk+PGEgaHJlZj0iQVZSLU9wdGlvbnMuaHRtbCNBVlItT3B0aW9ucyI+My4xNy40LjIgSGFuZGxpbmcgb2YgdGhlIDxjb2RlPlJBTVBEPC9jb2RlPiwgPGNvZGU+UkFNUFg8L2NvZGU+LCA8Y29kZT5SQU1QWTwvY29kZT4gYW5kIDxjb2RlPlJBTVBaPC9jb2RlPiBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVyczwvYT4KKzxsaT48YSBocmVmPSJBVlItT3B0aW9ucy5odG1sI0FWUi1PcHRpb25zIj4zLjE3LjQuMyBBVlIgQnVpbHQtaW4gTWFjcm9zPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkJsYWNrZmluLU9wdGlvbnMuaHRtbCNCbGFja2Zpbi1PcHRpb25zIj4zLjE3LjUgQmxhY2tmaW4gT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJDNlgtT3B0aW9ucy5odG1sI0M2WC1PcHRpb25zIj4zLjE3LjYgQzZYIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iQ1JJUy1PcHRpb25zLmh0bWwjQ1JJUy1PcHRpb25zIj4zLjE3LjcgQ1JJUyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkNSMTYtT3B0aW9ucy5odG1sI0NSMTYtT3B0aW9ucyI+My4xNy44IENSMTYgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tT3B0aW9ucy5odG1sI0Rhcndpbi1PcHRpb25zIj4zLjE3LjkgRGFyd2luIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iREVDLUFscGhhLU9wdGlvbnMuaHRtbCNERUMtQWxwaGEtT3B0aW9ucyI+My4xNy4xMCBERUMgQWxwaGEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJGUjMwLU9wdGlvbnMuaHRtbCNGUjMwLU9wdGlvbnMiPjMuMTcuMTEgRlIzMCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkZSVi1PcHRpb25zLmh0bWwjRlJWLU9wdGlvbnMiPjMuMTcuMTIgRlJWIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iR05VXzAwMmZMaW51eC1PcHRpb25zLmh0bWwjR05VXzAwMmZMaW51eC1PcHRpb25zIj4zLjE3LjEzIEdOVS9MaW51eCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAtT3B0aW9ucy5odG1sI0g4XzAwMmYzMDAtT3B0aW9ucyI+My4xNy4xNCBIOC8zMDAgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJIUFBBLU9wdGlvbnMuaHRtbCNIUFBBLU9wdGlvbnMiPjMuMTcuMTUgSFBQQSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9ImkzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtT3B0aW9ucyI+My4xNy4xNiBJbnRlbCAzODYgYW5kIEFNRCB4ODYtNjQgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LVdpbmRvd3MtT3B0aW9ucy5odG1sI2kzODYtYW5kLXg4Nl8wMDJkNjQtV2luZG93cy1PcHRpb25zIj4zLjE3LjE3IGkzODYgYW5kIHg4Ni02NCBXaW5kb3dzIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iSUFfMDAyZDY0LU9wdGlvbnMuaHRtbCNJQV8wMDJkNjQtT3B0aW9ucyI+My4xNy4xOCBJQS02NCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkxNMzItT3B0aW9ucy5odG1sI0xNMzItT3B0aW9ucyI+My4xNy4xOSBMTTMyIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTTMyQy1PcHRpb25zLmh0bWwjTTMyQy1PcHRpb25zIj4zLjE3LjIwIE0zMkMgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNMzJSXzAwMmZELU9wdGlvbnMuaHRtbCNNMzJSXzAwMmZELU9wdGlvbnMiPjMuMTcuMjEgTTMyUi9EIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTTY4MHgwLU9wdGlvbnMuaHRtbCNNNjgweDAtT3B0aW9ucyI+My4xNy4yMiBNNjgweDAgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNQ29yZS1PcHRpb25zLmh0bWwjTUNvcmUtT3B0aW9ucyI+My4xNy4yMyBNQ29yZSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1lUC1PcHRpb25zLmh0bWwjTWVQLU9wdGlvbnMiPjMuMTcuMjQgTWVQIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTWljcm9CbGF6ZS1PcHRpb25zLmh0bWwjTWljcm9CbGF6ZS1PcHRpb25zIj4zLjE3LjI1IE1pY3JvQmxhemUgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNSVBTLU9wdGlvbnMuaHRtbCNNSVBTLU9wdGlvbnMiPjMuMTcuMjYgTUlQUyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1NSVgtT3B0aW9ucy5odG1sI01NSVgtT3B0aW9ucyI+My4xNy4yNyBNTUlYIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTU4xMDMwMC1PcHRpb25zLmh0bWwjTU4xMDMwMC1PcHRpb25zIj4zLjE3LjI4IE1OMTAzMDAgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNb3hpZS1PcHRpb25zLmh0bWwjTW94aWUtT3B0aW9ucyI+My4xNy4yOSBNb3hpZSBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+My4xNy4zMCBQRFAtMTEgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJwaWNvQ2hpcC1PcHRpb25zLmh0bWwjcGljb0NoaXAtT3B0aW9ucyI+My4xNy4zMSBwaWNvQ2hpcCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlBvd2VyUEMtT3B0aW9ucy5odG1sI1Bvd2VyUEMtT3B0aW9ucyI+My4xNy4zMiBQb3dlclBDIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUkw3OC1PcHRpb25zLmh0bWwjUkw3OC1PcHRpb25zIj4zLjE3LjMzIFJMNzggT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1PcHRpb25zLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtT3B0aW9ucyI+My4xNy4zNCBJQk0gUlMvNjAwMCBhbmQgUG93ZXJQQyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlJYLU9wdGlvbnMuaHRtbCNSWC1PcHRpb25zIj4zLjE3LjM1IFJYIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMuaHRtbCNTXzAwMmYzOTAtYW5kLXpTZXJpZXMtT3B0aW9ucyI+My4xNy4zNiBTLzM5MCBhbmQgelNlcmllcyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNjb3JlLU9wdGlvbnMuaHRtbCNTY29yZS1PcHRpb25zIj4zLjE3LjM3IFNjb3JlIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU0gtT3B0aW9ucy5odG1sI1NILU9wdGlvbnMiPjMuMTcuMzggU0ggT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJTb2xhcmlzLTItT3B0aW9ucy5odG1sI1NvbGFyaXMtMi1PcHRpb25zIj4zLjE3LjM5IFNvbGFyaXMgMiBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNQQVJDLU9wdGlvbnMuaHRtbCNTUEFSQy1PcHRpb25zIj4zLjE3LjQwIFNQQVJDIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU1BVLU9wdGlvbnMuaHRtbCNTUFUtT3B0aW9ucyI+My4xNy40MSBTUFUgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJTeXN0ZW0tVi1PcHRpb25zLmh0bWwjU3lzdGVtLVYtT3B0aW9ucyI+My4xNy40MiBPcHRpb25zIGZvciBTeXN0ZW0gVjwvYT4KKzxsaT48YSBocmVmPSJUSUxFXzAwMmRHeC1PcHRpb25zLmh0bWwjVElMRV8wMDJkR3gtT3B0aW9ucyI+My4xNy40MyBUSUxFLUd4IE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVElMRVByby1PcHRpb25zLmh0bWwjVElMRVByby1PcHRpb25zIj4zLjE3LjQ0IFRJTEVQcm8gT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJWODUwLU9wdGlvbnMuaHRtbCNWODUwLU9wdGlvbnMiPjMuMTcuNDUgVjg1MCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlZBWC1PcHRpb25zLmh0bWwjVkFYLU9wdGlvbnMiPjMuMTcuNDYgVkFYIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVk1TLU9wdGlvbnMuaHRtbCNWTVMtT3B0aW9ucyI+My4xNy40NyBWTVMgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJWeFdvcmtzLU9wdGlvbnMuaHRtbCNWeFdvcmtzLU9wdGlvbnMiPjMuMTcuNDggVnhXb3JrcyBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ing4Nl8wMDJkNjQtT3B0aW9ucy5odG1sI3g4Nl8wMDJkNjQtT3B0aW9ucyI+My4xNy40OSB4ODYtNjQgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJYc3Rvcm15MTYtT3B0aW9ucy5odG1sI1hzdG9ybXkxNi1PcHRpb25zIj4zLjE3LjUwIFhzdG9ybXkxNiBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS1PcHRpb25zLmh0bWwjWHRlbnNhLU9wdGlvbnMiPjMuMTcuNTEgWHRlbnNhIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0ielNlcmllcy1PcHRpb25zLmh0bWwjelNlcmllcy1PcHRpb25zIj4zLjE3LjUyIHpTZXJpZXMgT3B0aW9uczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+My4xOCBPcHRpb25zIGZvciBDb2RlIEdlbmVyYXRpb24gQ29udmVudGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj4zLjE5IEVudmlyb25tZW50IFZhcmlhYmxlcyBBZmZlY3RpbmcgR0NDPC9hPgorPGxpPjxhIGhyZWY9IlByZWNvbXBpbGVkLUhlYWRlcnMuaHRtbCNQcmVjb21waWxlZC1IZWFkZXJzIj4zLjIwIFVzaW5nIFByZWNvbXBpbGVkIEhlYWRlcnM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0MtSW1wbGVtZW50YXRpb24iIGhyZWY9IkMtSW1wbGVtZW50YXRpb24uaHRtbCNDLUltcGxlbWVudGF0aW9uIj40IEMgSW1wbGVtZW50YXRpb24tZGVmaW5lZCBiZWhhdmlvcjwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJUcmFuc2xhdGlvbi1pbXBsZW1lbnRhdGlvbi5odG1sI1RyYW5zbGF0aW9uLWltcGxlbWVudGF0aW9uIj40LjEgVHJhbnNsYXRpb248L2E+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQtaW1wbGVtZW50YXRpb24uaHRtbCNFbnZpcm9ubWVudC1pbXBsZW1lbnRhdGlvbiI+NC4yIEVudmlyb25tZW50PC9hPgorPGxpPjxhIGhyZWY9IklkZW50aWZpZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjSWRlbnRpZmllcnMtaW1wbGVtZW50YXRpb24iPjQuMyBJZGVudGlmaWVyczwvYT4KKzxsaT48YSBocmVmPSJDaGFyYWN0ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjQ2hhcmFjdGVycy1pbXBsZW1lbnRhdGlvbiI+NC40IENoYXJhY3RlcnM8L2E+Cis8bGk+PGEgaHJlZj0iSW50ZWdlcnMtaW1wbGVtZW50YXRpb24uaHRtbCNJbnRlZ2Vycy1pbXBsZW1lbnRhdGlvbiI+NC41IEludGVnZXJzPC9hPgorPGxpPjxhIGhyZWY9IkZsb2F0aW5nLXBvaW50LWltcGxlbWVudGF0aW9uLmh0bWwjRmxvYXRpbmctcG9pbnQtaW1wbGVtZW50YXRpb24iPjQuNiBGbG9hdGluZyBwb2ludDwvYT4KKzxsaT48YSBocmVmPSJBcnJheXMtYW5kLXBvaW50ZXJzLWltcGxlbWVudGF0aW9uLmh0bWwjQXJyYXlzLWFuZC1wb2ludGVycy1pbXBsZW1lbnRhdGlvbiI+NC43IEFycmF5cyBhbmQgcG9pbnRlcnM8L2E+Cis8bGk+PGEgaHJlZj0iSGludHMtaW1wbGVtZW50YXRpb24uaHRtbCNIaW50cy1pbXBsZW1lbnRhdGlvbiI+NC44IEhpbnRzPC9hPgorPGxpPjxhIGhyZWY9IlN0cnVjdHVyZXMtdW5pb25zLWVudW1lcmF0aW9ucy1hbmQtYml0XzAwMmRmaWVsZHMtaW1wbGVtZW50YXRpb24uaHRtbCNTdHJ1Y3R1cmVzLXVuaW9ucy1lbnVtZXJhdGlvbnMtYW5kLWJpdF8wMDJkZmllbGRzLWltcGxlbWVudGF0aW9uIj40LjkgU3RydWN0dXJlcywgdW5pb25zLCBlbnVtZXJhdGlvbnMsIGFuZCBiaXQtZmllbGRzPC9hPgorPGxpPjxhIGhyZWY9IlF1YWxpZmllcnMtaW1wbGVtZW50YXRpb24uaHRtbCNRdWFsaWZpZXJzLWltcGxlbWVudGF0aW9uIj40LjEwIFF1YWxpZmllcnM8L2E+Cis8bGk+PGEgaHJlZj0iRGVjbGFyYXRvcnMtaW1wbGVtZW50YXRpb24uaHRtbCNEZWNsYXJhdG9ycy1pbXBsZW1lbnRhdGlvbiI+NC4xMSBEZWNsYXJhdG9yczwvYT4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnRzLWltcGxlbWVudGF0aW9uLmh0bWwjU3RhdGVtZW50cy1pbXBsZW1lbnRhdGlvbiI+NC4xMiBTdGF0ZW1lbnRzPC9hPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctZGlyZWN0aXZlcy1pbXBsZW1lbnRhdGlvbi5odG1sI1ByZXByb2Nlc3NpbmctZGlyZWN0aXZlcy1pbXBsZW1lbnRhdGlvbiI+NC4xMyBQcmVwcm9jZXNzaW5nIGRpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgaHJlZj0iTGlicmFyeS1mdW5jdGlvbnMtaW1wbGVtZW50YXRpb24uaHRtbCNMaWJyYXJ5LWZ1bmN0aW9ucy1pbXBsZW1lbnRhdGlvbiI+NC4xNCBMaWJyYXJ5IGZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJBcmNoaXRlY3R1cmUtaW1wbGVtZW50YXRpb24uaHRtbCNBcmNoaXRlY3R1cmUtaW1wbGVtZW50YXRpb24iPjQuMTUgQXJjaGl0ZWN0dXJlPC9hPgorPGxpPjxhIGhyZWY9IkxvY2FsZV8wMDJkc3BlY2lmaWMtYmVoYXZpb3ItaW1wbGVtZW50YXRpb24uaHRtbCNMb2NhbGVfMDAyZHNwZWNpZmljLWJlaGF2aW9yLWltcGxlbWVudGF0aW9uIj40LjE2IExvY2FsZS1zcGVjaWZpYyBiZWhhdmlvcjwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24iIGhyZWY9IkNfMDAyYl8wMDJiLUltcGxlbWVudGF0aW9uLmh0bWwjQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24iPjUgQysrIEltcGxlbWVudGF0aW9uLWRlZmluZWQgYmVoYXZpb3I8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQ29uZGl0aW9uYWxseV8wMDJkc3VwcG9ydGVkLWJlaGF2aW9yLmh0bWwjQ29uZGl0aW9uYWxseV8wMDJkc3VwcG9ydGVkLWJlaGF2aW9yIj41LjEgQ29uZGl0aW9uYWxseS1zdXBwb3J0ZWQgYmVoYXZpb3I8L2E+Cis8bGk+PGEgaHJlZj0iRXhjZXB0aW9uLWhhbmRsaW5nLmh0bWwjRXhjZXB0aW9uLWhhbmRsaW5nIj41LjIgRXhjZXB0aW9uIGhhbmRsaW5nPC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19DLUV4dGVuc2lvbnMiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+NiBFeHRlbnNpb25zIHRvIHRoZSBDIExhbmd1YWdlIEZhbWlseTwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTdGF0ZW1lbnQtRXhwcnMuaHRtbCNTdGF0ZW1lbnQtRXhwcnMiPjYuMSBTdGF0ZW1lbnRzIGFuZCBEZWNsYXJhdGlvbnMgaW4gRXhwcmVzc2lvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTG9jYWwtTGFiZWxzLmh0bWwjTG9jYWwtTGFiZWxzIj42LjIgTG9jYWxseSBEZWNsYXJlZCBMYWJlbHM8L2E+Cis8bGk+PGEgaHJlZj0iTGFiZWxzLWFzLVZhbHVlcy5odG1sI0xhYmVscy1hcy1WYWx1ZXMiPjYuMyBMYWJlbHMgYXMgVmFsdWVzPC9hPgorPGxpPjxhIGhyZWY9Ik5lc3RlZC1GdW5jdGlvbnMuaHRtbCNOZXN0ZWQtRnVuY3Rpb25zIj42LjQgTmVzdGVkIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJDb25zdHJ1Y3RpbmctQ2FsbHMuaHRtbCNDb25zdHJ1Y3RpbmctQ2FsbHMiPjYuNSBDb25zdHJ1Y3RpbmcgRnVuY3Rpb24gQ2FsbHM8L2E+Cis8bGk+PGEgaHJlZj0iVHlwZW9mLmh0bWwjVHlwZW9mIj42LjYgUmVmZXJyaW5nIHRvIGEgVHlwZSB3aXRoIDxjb2RlPnR5cGVvZjwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iQ29uZGl0aW9uYWxzLmh0bWwjQ29uZGl0aW9uYWxzIj42LjcgQ29uZGl0aW9uYWxzIHdpdGggT21pdHRlZCBPcGVyYW5kczwvYT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmaW50MTI4Lmh0bWwjXzAwNWZfMDA1ZmludDEyOCI+Ni44IDEyOC1iaXQgaW50ZWdlcnM8L2E+Cis8bGk+PGEgaHJlZj0iTG9uZy1Mb25nLmh0bWwjTG9uZy1Mb25nIj42LjkgRG91YmxlLVdvcmQgSW50ZWdlcnM8L2E+Cis8bGk+PGEgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPjYuMTAgQ29tcGxleCBOdW1iZXJzPC9hPgorPGxpPjxhIGhyZWY9IkZsb2F0aW5nLVR5cGVzLmh0bWwjRmxvYXRpbmctVHlwZXMiPjYuMTEgQWRkaXRpb25hbCBGbG9hdGluZyBUeXBlczwvYT4KKzxsaT48YSBocmVmPSJIYWxmXzAwMmRQcmVjaXNpb24uaHRtbCNIYWxmXzAwMmRQcmVjaXNpb24iPjYuMTIgSGFsZi1QcmVjaXNpb24gRmxvYXRpbmcgUG9pbnQ8L2E+Cis8bGk+PGEgaHJlZj0iRGVjaW1hbC1GbG9hdC5odG1sI0RlY2ltYWwtRmxvYXQiPjYuMTMgRGVjaW1hbCBGbG9hdGluZyBUeXBlczwvYT4KKzxsaT48YSBocmVmPSJIZXgtRmxvYXRzLmh0bWwjSGV4LUZsb2F0cyI+Ni4xNCBIZXggRmxvYXRzPC9hPgorPGxpPjxhIGhyZWY9IkZpeGVkXzAwMmRQb2ludC5odG1sI0ZpeGVkXzAwMmRQb2ludCI+Ni4xNSBGaXhlZC1Qb2ludCBUeXBlczwvYT4KKzxsaT48YSBocmVmPSJOYW1lZC1BZGRyZXNzLVNwYWNlcy5odG1sI05hbWVkLUFkZHJlc3MtU3BhY2VzIj42LjE2IE5hbWVkIEFkZHJlc3MgU3BhY2VzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik5hbWVkLUFkZHJlc3MtU3BhY2VzLmh0bWwjTmFtZWQtQWRkcmVzcy1TcGFjZXMiPjYuMTYuMSBBVlIgTmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+Cis8bGk+PGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+Ni4xNi4yIE0zMkMgTmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+Cis8bGk+PGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+Ni4xNi4zIFJMNzggTmFtZWQgQWRkcmVzcyBTcGFjZXM8L2E+Cis8bGk+PGEgaHJlZj0iTmFtZWQtQWRkcmVzcy1TcGFjZXMuaHRtbCNOYW1lZC1BZGRyZXNzLVNwYWNlcyI+Ni4xNi40IFNQVSBOYW1lZCBBZGRyZXNzIFNwYWNlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJaZXJvLUxlbmd0aC5odG1sI1plcm8tTGVuZ3RoIj42LjE3IEFycmF5cyBvZiBMZW5ndGggWmVybzwvYT4KKzxsaT48YSBocmVmPSJFbXB0eS1TdHJ1Y3R1cmVzLmh0bWwjRW1wdHktU3RydWN0dXJlcyI+Ni4xOCBTdHJ1Y3R1cmVzIFdpdGggTm8gTWVtYmVyczwvYT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1MZW5ndGguaHRtbCNWYXJpYWJsZS1MZW5ndGgiPjYuMTkgQXJyYXlzIG9mIFZhcmlhYmxlIExlbmd0aDwvYT4KKzxsaT48YSBocmVmPSJWYXJpYWRpYy1NYWNyb3MuaHRtbCNWYXJpYWRpYy1NYWNyb3MiPjYuMjAgTWFjcm9zIHdpdGggYSBWYXJpYWJsZSBOdW1iZXIgb2YgQXJndW1lbnRzLjwvYT4KKzxsaT48YSBocmVmPSJFc2NhcGVkLU5ld2xpbmVzLmh0bWwjRXNjYXBlZC1OZXdsaW5lcyI+Ni4yMSBTbGlnaHRseSBMb29zZXIgUnVsZXMgZm9yIEVzY2FwZWQgTmV3bGluZXM8L2E+Cis8bGk+PGEgaHJlZj0iU3Vic2NyaXB0aW5nLmh0bWwjU3Vic2NyaXB0aW5nIj42LjIyIE5vbi1MdmFsdWUgQXJyYXlzIE1heSBIYXZlIFN1YnNjcmlwdHM8L2E+Cis8bGk+PGEgaHJlZj0iUG9pbnRlci1Bcml0aC5odG1sI1BvaW50ZXItQXJpdGgiPjYuMjMgQXJpdGhtZXRpYyBvbiA8Y29kZT52b2lkPC9jb2RlPi0gYW5kIEZ1bmN0aW9uLVBvaW50ZXJzPC9hPgorPGxpPjxhIGhyZWY9IkluaXRpYWxpemVycy5odG1sI0luaXRpYWxpemVycyI+Ni4yNCBOb24tQ29uc3RhbnQgSW5pdGlhbGl6ZXJzPC9hPgorPGxpPjxhIGhyZWY9IkNvbXBvdW5kLUxpdGVyYWxzLmh0bWwjQ29tcG91bmQtTGl0ZXJhbHMiPjYuMjUgQ29tcG91bmQgTGl0ZXJhbHM8L2E+Cis8bGk+PGEgaHJlZj0iRGVzaWduYXRlZC1Jbml0cy5odG1sI0Rlc2lnbmF0ZWQtSW5pdHMiPjYuMjYgRGVzaWduYXRlZCBJbml0aWFsaXplcnM8L2E+Cis8bGk+PGEgaHJlZj0iQ2FzZS1SYW5nZXMuaHRtbCNDYXNlLVJhbmdlcyI+Ni4yNyBDYXNlIFJhbmdlczwvYT4KKzxsaT48YSBocmVmPSJDYXN0LXRvLVVuaW9uLmh0bWwjQ2FzdC10by1VbmlvbiI+Ni4yOCBDYXN0IHRvIGEgVW5pb24gVHlwZTwvYT4KKzxsaT48YSBocmVmPSJNaXhlZC1EZWNsYXJhdGlvbnMuaHRtbCNNaXhlZC1EZWNsYXJhdGlvbnMiPjYuMjkgTWl4ZWQgRGVjbGFyYXRpb25zIGFuZCBDb2RlPC9hPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNGdW5jdGlvbi1BdHRyaWJ1dGVzIj42LjMwIERlY2xhcmluZyBBdHRyaWJ1dGVzIG9mIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJBdHRyaWJ1dGUtU3ludGF4Lmh0bWwjQXR0cmlidXRlLVN5bnRheCI+Ni4zMSBBdHRyaWJ1dGUgU3ludGF4PC9hPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLVByb3RvdHlwZXMuaHRtbCNGdW5jdGlvbi1Qcm90b3R5cGVzIj42LjMyIFByb3RvdHlwZXMgYW5kIE9sZC1TdHlsZSBGdW5jdGlvbiBEZWZpbml0aW9uczwvYT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1Db21tZW50cy5odG1sI0NfMDAyYl8wMDJiLUNvbW1lbnRzIj42LjMzIEMrKyBTdHlsZSBDb21tZW50czwvYT4KKzxsaT48YSBocmVmPSJEb2xsYXItU2lnbnMuaHRtbCNEb2xsYXItU2lnbnMiPjYuMzQgRG9sbGFyIFNpZ25zIGluIElkZW50aWZpZXIgTmFtZXM8L2E+Cis8bGk+PGEgaHJlZj0iQ2hhcmFjdGVyLUVzY2FwZXMuaHRtbCNDaGFyYWN0ZXItRXNjYXBlcyI+Ni4zNSBUaGUgQ2hhcmFjdGVyICZsdDtFU0MmZ3Q7IGluIENvbnN0YW50czwvYT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+Ni4zNiBTcGVjaWZ5aW5nIEF0dHJpYnV0ZXMgb2YgVmFyaWFibGVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj42LjM2LjEgQVZSIFZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPjYuMzYuMiBCbGFja2ZpbiBWYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj42LjM2LjMgTTMyUi9EIFZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtQXR0cmlidXRlcy5odG1sI1ZhcmlhYmxlLUF0dHJpYnV0ZXMiPjYuMzYuNCBNZVAgVmFyaWFibGUgQXR0cmlidXRlczwvYT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+Ni4zNi41IGkzODYgVmFyaWFibGUgQXR0cmlidXRlczwvYT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+Ni4zNi42IFBvd2VyUEMgVmFyaWFibGUgQXR0cmlidXRlczwvYT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1BdHRyaWJ1dGVzLmh0bWwjVmFyaWFibGUtQXR0cmlidXRlcyI+Ni4zNi43IFNQVSBWYXJpYWJsZSBBdHRyaWJ1dGVzPC9hPgorPGxpPjxhIGhyZWY9IlZhcmlhYmxlLUF0dHJpYnV0ZXMuaHRtbCNWYXJpYWJsZS1BdHRyaWJ1dGVzIj42LjM2LjggWHN0b3JteTE2IFZhcmlhYmxlIEF0dHJpYnV0ZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIj42LjM3IFNwZWNpZnlpbmcgQXR0cmlidXRlcyBvZiBUeXBlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJUeXBlLUF0dHJpYnV0ZXMuaHRtbCNUeXBlLUF0dHJpYnV0ZXMiPjYuMzcuMSBBUk0gVHlwZSBBdHRyaWJ1dGVzPC9hPgorPGxpPjxhIGhyZWY9IlR5cGUtQXR0cmlidXRlcy5odG1sI1R5cGUtQXR0cmlidXRlcyI+Ni4zNy4yIE1lUCBUeXBlIEF0dHJpYnV0ZXM8L2E+Cis8bGk+PGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIj42LjM3LjMgaTM4NiBUeXBlIEF0dHJpYnV0ZXM8L2E+Cis8bGk+PGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIj42LjM3LjQgUG93ZXJQQyBUeXBlIEF0dHJpYnV0ZXM8L2E+Cis8bGk+PGEgaHJlZj0iVHlwZS1BdHRyaWJ1dGVzLmh0bWwjVHlwZS1BdHRyaWJ1dGVzIj42LjM3LjUgU1BVIFR5cGUgQXR0cmlidXRlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBbGlnbm1lbnQuaHRtbCNBbGlnbm1lbnQiPjYuMzggSW5xdWlyaW5nIG9uIEFsaWdubWVudCBvZiBUeXBlcyBvciBWYXJpYWJsZXM8L2E+Cis8bGk+PGEgaHJlZj0iSW5saW5lLmh0bWwjSW5saW5lIj42LjM5IEFuIElubGluZSBGdW5jdGlvbiBpcyBBcyBGYXN0IEFzIGEgTWFjcm88L2E+Cis8bGk+PGEgaHJlZj0iVm9sYXRpbGVzLmh0bWwjVm9sYXRpbGVzIj42LjQwIFdoZW4gaXMgYSBWb2xhdGlsZSBPYmplY3QgQWNjZXNzZWQ/PC9hPgorPGxpPjxhIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI0V4dGVuZGVkLUFzbSI+Ni40MSBBc3NlbWJsZXIgSW5zdHJ1Y3Rpb25zIHdpdGggQyBFeHByZXNzaW9uIE9wZXJhbmRzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkV4dGVuZGVkLUFzbS5odG1sI0V4dGVuZGVkLUFzbSI+Ni40MS4xIFNpemUgb2YgYW4gPGNvZGU+YXNtPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJFeHRlbmRlZC1Bc20uaHRtbCNFeHRlbmRlZC1Bc20iPjYuNDEuMiBpMzg2IGZsb2F0aW5nLXBvaW50IGFzbSBvcGVyYW5kczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJDb25zdHJhaW50cy5odG1sI0NvbnN0cmFpbnRzIj42LjQyIENvbnN0cmFpbnRzIGZvciA8Y29kZT5hc208L2NvZGU+IE9wZXJhbmRzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Db25zdHJhaW50cy5odG1sI1NpbXBsZS1Db25zdHJhaW50cyI+Ni40Mi4xIFNpbXBsZSBDb25zdHJhaW50czwvYT4KKzxsaT48YSBocmVmPSJNdWx0aV8wMDJkQWx0ZXJuYXRpdmUuaHRtbCNNdWx0aV8wMDJkQWx0ZXJuYXRpdmUiPjYuNDIuMiBNdWx0aXBsZSBBbHRlcm5hdGl2ZSBDb25zdHJhaW50czwvYT4KKzxsaT48YSBocmVmPSJNb2RpZmllcnMuaHRtbCNNb2RpZmllcnMiPjYuNDIuMyBDb25zdHJhaW50IE1vZGlmaWVyIENoYXJhY3RlcnM8L2E+Cis8bGk+PGEgaHJlZj0iTWFjaGluZS1Db25zdHJhaW50cy5odG1sI01hY2hpbmUtQ29uc3RyYWludHMiPjYuNDIuNCBDb25zdHJhaW50cyBmb3IgUGFydGljdWxhciBNYWNoaW5lczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBc20tTGFiZWxzLmh0bWwjQXNtLUxhYmVscyI+Ni40MyBDb250cm9sbGluZyBOYW1lcyBVc2VkIGluIEFzc2VtYmxlciBDb2RlPC9hPgorPGxpPjxhIGhyZWY9IkV4cGxpY2l0LVJlZy1WYXJzLmh0bWwjRXhwbGljaXQtUmVnLVZhcnMiPjYuNDQgVmFyaWFibGVzIGluIFNwZWNpZmllZCBSZWdpc3RlcnM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iR2xvYmFsLVJlZy1WYXJzLmh0bWwjR2xvYmFsLVJlZy1WYXJzIj42LjQ0LjEgRGVmaW5pbmcgR2xvYmFsIFJlZ2lzdGVyIFZhcmlhYmxlczwvYT4KKzxsaT48YSBocmVmPSJMb2NhbC1SZWctVmFycy5odG1sI0xvY2FsLVJlZy1WYXJzIj42LjQ0LjIgU3BlY2lmeWluZyBSZWdpc3RlcnMgZm9yIExvY2FsIFZhcmlhYmxlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBbHRlcm5hdGUtS2V5d29yZHMuaHRtbCNBbHRlcm5hdGUtS2V5d29yZHMiPjYuNDUgQWx0ZXJuYXRlIEtleXdvcmRzPC9hPgorPGxpPjxhIGhyZWY9IkluY29tcGxldGUtRW51bXMuaHRtbCNJbmNvbXBsZXRlLUVudW1zIj42LjQ2IEluY29tcGxldGUgPGNvZGU+ZW51bTwvY29kZT4gVHlwZXM8L2E+Cis8bGk+PGEgaHJlZj0iRnVuY3Rpb24tTmFtZXMuaHRtbCNGdW5jdGlvbi1OYW1lcyI+Ni40NyBGdW5jdGlvbiBOYW1lcyBhcyBTdHJpbmdzPC9hPgorPGxpPjxhIGhyZWY9IlJldHVybi1BZGRyZXNzLmh0bWwjUmV0dXJuLUFkZHJlc3MiPjYuNDggR2V0dGluZyB0aGUgUmV0dXJuIG9yIEZyYW1lIEFkZHJlc3Mgb2YgYSBGdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJWZWN0b3ItRXh0ZW5zaW9ucy5odG1sI1ZlY3Rvci1FeHRlbnNpb25zIj42LjQ5IFVzaW5nIFZlY3RvciBJbnN0cnVjdGlvbnMgdGhyb3VnaCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iT2Zmc2V0b2YuaHRtbCNPZmZzZXRvZiI+Ni41MCBPZmZzZXRvZjwvYT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmc3luYy1CdWlsdGlucy5odG1sI18wMDVmXzAwNWZzeW5jLUJ1aWx0aW5zIj42LjUxIExlZ2FjeSBfX3N5bmMgQnVpbHQtaW4gRnVuY3Rpb25zIGZvciBBdG9taWMgTWVtb3J5IEFjY2VzczwvYT4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjXzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+Ni41MiBCdWlsdC1pbiBmdW5jdGlvbnMgZm9yIG1lbW9yeSBtb2RlbCBhd2FyZSBhdG9taWMgb3BlcmF0aW9uczwvYT4KKzxsaT48YSBocmVmPSJ4ODYtc3BlY2lmaWMtbWVtb3J5LW1vZGVsLWV4dGVuc2lvbnMtZm9yLXRyYW5zYWN0aW9uYWwtbWVtb3J5Lmh0bWwjeDg2LXNwZWNpZmljLW1lbW9yeS1tb2RlbC1leHRlbnNpb25zLWZvci10cmFuc2FjdGlvbmFsLW1lbW9yeSI+Ni41MyB4ODYgc3BlY2lmaWMgbWVtb3J5IG1vZGVsIGV4dGVuc2lvbnMgZm9yIHRyYW5zYWN0aW9uYWwgbWVtb3J5PC9hPgorPGxpPjxhIGhyZWY9Ik9iamVjdC1TaXplLUNoZWNraW5nLmh0bWwjT2JqZWN0LVNpemUtQ2hlY2tpbmciPjYuNTQgT2JqZWN0IFNpemUgQ2hlY2tpbmcgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik90aGVyLUJ1aWx0aW5zLmh0bWwjT3RoZXItQnVpbHRpbnMiPjYuNTUgT3RoZXIgQnVpbHQtaW4gRnVuY3Rpb25zIFByb3ZpZGVkIGJ5IEdDQzwvYT4KKzxsaT48YSBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPjYuNTYgQnVpbHQtaW4gRnVuY3Rpb25zIFNwZWNpZmljIHRvIFBhcnRpY3VsYXIgVGFyZ2V0IE1hY2hpbmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkFscGhhLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNBbHBoYS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj42LjU2LjEgQWxwaGEgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1pV01NWHQtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0FSTS1pV01NWHQtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni4yIEFSTSBpV01NWHQgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMgQVJNIE5FT04gSW50cmluc2ljczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjEgQWRkaXRpb248L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy4yIE11bHRpcGxpY2F0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMyBNdWx0aXBseS1hY2N1bXVsYXRlPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNCBNdWx0aXBseS1zdWJ0cmFjdDwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjUgRnVzZWQtbXVsdGlwbHktYWNjdW11bGF0ZTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjYgRnVzZWQtbXVsdGlwbHktc3VidHJhY3Q8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy43IFJvdW5kIHRvIGludGVncmFsICh0byBuZWFyZXN0LCB0aWVzIHRvIGV2ZW4pPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuOCBSb3VuZCB0byBpbnRlZ3JhbCAodG8gbmVhcmVzdCwgdGllcyBhd2F5IGZyb20gemVybyk8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy45IFJvdW5kIHRvIGludGVncmFsICh0b3dhcmRzICtJbmYpPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMTAgUm91bmQgdG8gaW50ZWdyYWwgKHRvd2FyZHMgLUluZik8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy4xMSBSb3VuZCB0byBpbnRlZ3JhbCAodG93YXJkcyAwKTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjEyIFN1YnRyYWN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMTMgQ29tcGFyaXNvbiAoZXF1YWwtdG8pPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMTQgQ29tcGFyaXNvbiAoZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvKTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjE1IENvbXBhcmlzb24gKGxlc3MtdGhhbi1vci1lcXVhbC10byk8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy4xNiBDb21wYXJpc29uIChncmVhdGVyLXRoYW4pPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMTcgQ29tcGFyaXNvbiAobGVzcy10aGFuKTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjE4IENvbXBhcmlzb24gKGFic29sdXRlIGdyZWF0ZXItdGhhbi1vci1lcXVhbC10byk8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy4xOSBDb21wYXJpc29uIChhYnNvbHV0ZSBsZXNzLXRoYW4tb3ItZXF1YWwtdG8pPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMjAgQ29tcGFyaXNvbiAoYWJzb2x1dGUgZ3JlYXRlci10aGFuKTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjIxIENvbXBhcmlzb24gKGFic29sdXRlIGxlc3MtdGhhbik8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy4yMiBUZXN0IGJpdHM8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy4yMyBBYnNvbHV0ZSBkaWZmZXJlbmNlPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMjQgQWJzb2x1dGUgZGlmZmVyZW5jZSBhbmQgYWNjdW11bGF0ZTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjI1IE1heGltdW08L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy4yNiBNaW5pbXVtPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMjcgUGFpcndpc2UgYWRkPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMjggUGFpcndpc2UgYWRkLCBzaW5nbGVfb3Bjb2RlIHdpZGVuIGFuZCBhY2N1bXVsYXRlPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMjkgRm9sZGluZyBtYXhpbXVtPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMzAgRm9sZGluZyBtaW5pbXVtPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMzEgUmVjaXByb2NhbCBzdGVwPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMzIgVmVjdG9yIHNoaWZ0IGxlZnQ8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy4zMyBWZWN0b3Igc2hpZnQgbGVmdCBieSBjb25zdGFudDwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjM0IFZlY3RvciBzaGlmdCByaWdodCBieSBjb25zdGFudDwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjM1IFZlY3RvciBzaGlmdCByaWdodCBieSBjb25zdGFudCBhbmQgYWNjdW11bGF0ZTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjM2IFZlY3RvciBzaGlmdCByaWdodCBhbmQgaW5zZXJ0PC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMzcgVmVjdG9yIHNoaWZ0IGxlZnQgYW5kIGluc2VydDwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjM4IEFic29sdXRlIHZhbHVlPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuMzkgTmVnYXRpb248L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy40MCBCaXR3aXNlIG5vdDwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjQxIENvdW50IGxlYWRpbmcgc2lnbiBiaXRzPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNDIgQ291bnQgbGVhZGluZyB6ZXJvczwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjQzIENvdW50IG51bWJlciBvZiBzZXQgYml0czwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjQ0IFJlY2lwcm9jYWwgZXN0aW1hdGU8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy40NSBSZWNpcHJvY2FsIHNxdWFyZS1yb290IGVzdGltYXRlPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNDYgR2V0IGxhbmVzIGZyb20gYSB2ZWN0b3I8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy40NyBTZXQgbGFuZXMgaW4gYSB2ZWN0b3I8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy40OCBDcmVhdGUgdmVjdG9yIGZyb20gbGl0ZXJhbCBiaXQgcGF0dGVybjwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjQ5IFNldCBhbGwgbGFuZXMgdG8gdGhlIHNhbWUgdmFsdWU8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy41MCBDb21iaW5pbmcgdmVjdG9yczwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjUxIFNwbGl0dGluZyB2ZWN0b3JzPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNTIgQ29udmVyc2lvbnM8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy41MyBNb3ZlLCBzaW5nbGVfb3Bjb2RlIG5hcnJvd2luZzwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjU0IE1vdmUsIHNpbmdsZV9vcGNvZGUgbG9uZzwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjU1IFRhYmxlIGxvb2t1cDwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjU2IEV4dGVuZGVkIHRhYmxlIGxvb2t1cDwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjU3IE11bHRpcGx5LCBsYW5lPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNTggTG9uZyBtdWx0aXBseSwgbGFuZTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjU5IFNhdHVyYXRpbmcgZG91YmxpbmcgbG9uZyBtdWx0aXBseSwgbGFuZTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjYwIFNhdHVyYXRpbmcgZG91YmxpbmcgbXVsdGlwbHkgaGlnaCwgbGFuZTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjYxIE11bHRpcGx5LWFjY3VtdWxhdGUsIGxhbmU8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy42MiBNdWx0aXBseS1zdWJ0cmFjdCwgbGFuZTwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjYzIFZlY3RvciBtdWx0aXBseSBieSBzY2FsYXI8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy42NCBWZWN0b3IgbG9uZyBtdWx0aXBseSBieSBzY2FsYXI8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy42NSBWZWN0b3Igc2F0dXJhdGluZyBkb3VibGluZyBsb25nIG11bHRpcGx5IGJ5IHNjYWxhcjwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjY2IFZlY3RvciBzYXR1cmF0aW5nIGRvdWJsaW5nIG11bHRpcGx5IGhpZ2ggYnkgc2NhbGFyPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNjcgVmVjdG9yIG11bHRpcGx5LWFjY3VtdWxhdGUgYnkgc2NhbGFyPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNjggVmVjdG9yIG11bHRpcGx5LXN1YnRyYWN0IGJ5IHNjYWxhcjwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjY5IFZlY3RvciBleHRyYWN0PC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNzAgUmV2ZXJzZSBlbGVtZW50czwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjcxIEJpdCBzZWxlY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy43MiBUcmFuc3Bvc2UgZWxlbWVudHM8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy43MyBaaXAgZWxlbWVudHM8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy43NCBVbnppcCBlbGVtZW50czwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjc1IEVsZW1lbnQvc3RydWN0dXJlIGxvYWRzLCBWTEQxIHZhcmlhbnRzPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNzYgRWxlbWVudC9zdHJ1Y3R1cmUgc3RvcmVzLCBWU1QxIHZhcmlhbnRzPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuNzcgRWxlbWVudC9zdHJ1Y3R1cmUgbG9hZHMsIFZMRDIgdmFyaWFudHM8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy43OCBFbGVtZW50L3N0cnVjdHVyZSBzdG9yZXMsIFZTVDIgdmFyaWFudHM8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy43OSBFbGVtZW50L3N0cnVjdHVyZSBsb2FkcywgVkxEMyB2YXJpYW50czwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjgwIEVsZW1lbnQvc3RydWN0dXJlIHN0b3JlcywgVlNUMyB2YXJpYW50czwvYT4KKzxsaT48YSBocmVmPSJBUk0tTkVPTi1JbnRyaW5zaWNzLmh0bWwjQVJNLU5FT04tSW50cmluc2ljcyI+Ni41Ni4zLjgxIEVsZW1lbnQvc3RydWN0dXJlIGxvYWRzLCBWTEQ0IHZhcmlhbnRzPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuODIgRWxlbWVudC9zdHJ1Y3R1cmUgc3RvcmVzLCBWU1Q0IHZhcmlhbnRzPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuODMgTG9naWNhbCBvcGVyYXRpb25zIChBTkQpPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuODQgTG9naWNhbCBvcGVyYXRpb25zIChPUik8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy44NSBMb2dpY2FsIG9wZXJhdGlvbnMgKGV4Y2x1c2l2ZSBPUik8L2E+Cis8bGk+PGEgaHJlZj0iQVJNLU5FT04tSW50cmluc2ljcy5odG1sI0FSTS1ORU9OLUludHJpbnNpY3MiPjYuNTYuMy44NiBMb2dpY2FsIG9wZXJhdGlvbnMgKEFORC1OT1QpPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuODcgTG9naWNhbCBvcGVyYXRpb25zIChPUi1OT1QpPC9hPgorPGxpPjxhIGhyZWY9IkFSTS1ORU9OLUludHJpbnNpY3MuaHRtbCNBUk0tTkVPTi1JbnRyaW5zaWNzIj42LjU2LjMuODggUmVpbnRlcnByZXQgY2FzdHM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iQVZSLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNBVlItQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni40IEFWUiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iQmxhY2tmaW4tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0JsYWNrZmluLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjYuNTYuNSBCbGFja2ZpbiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iRlJfMDAyZFYtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI0ZSXzAwMmRWLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjYuNTYuNiBGUi1WIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBcmd1bWVudC1UeXBlcy5odG1sI0FyZ3VtZW50LVR5cGVzIj42LjU2LjYuMSBBcmd1bWVudCBUeXBlczwvYT4KKzxsaT48YSBocmVmPSJEaXJlY3RseV8wMDJkbWFwcGVkLUludGVnZXItRnVuY3Rpb25zLmh0bWwjRGlyZWN0bHlfMDAyZG1hcHBlZC1JbnRlZ2VyLUZ1bmN0aW9ucyI+Ni41Ni42LjIgRGlyZWN0bHktbWFwcGVkIEludGVnZXIgRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IkRpcmVjdGx5XzAwMmRtYXBwZWQtTWVkaWEtRnVuY3Rpb25zLmh0bWwjRGlyZWN0bHlfMDAyZG1hcHBlZC1NZWRpYS1GdW5jdGlvbnMiPjYuNTYuNi4zIERpcmVjdGx5LW1hcHBlZCBNZWRpYSBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUmF3LXJlYWRfMDAyZndyaXRlLUZ1bmN0aW9ucy5odG1sI1Jhdy1yZWFkXzAwMmZ3cml0ZS1GdW5jdGlvbnMiPjYuNTYuNi40IFJhdyByZWFkL3dyaXRlIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJPdGhlci1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjT3RoZXItQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni42LjUgT3RoZXIgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ilg4Ni1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjWDg2LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjYuNTYuNyBYODYgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9Ilg4Ni10cmFuc2FjdGlvbmFsLW1lbW9yeS1pbnRyaW5zaWNzLmh0bWwjWDg2LXRyYW5zYWN0aW9uYWwtbWVtb3J5LWludHJpbnNpY3MiPjYuNTYuOCBYODYgdHJhbnNhY3Rpb24gbWVtb3J5IGludHJpbnNpY3M8L2E+Cis8bGk+PGEgaHJlZj0iTUlQUy1EU1AtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtRFNQLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjYuNTYuOSBNSVBTIERTUCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTUlQUy1QYWlyZWRfMDAyZFNpbmdsZS1TdXBwb3J0Lmh0bWwjTUlQUy1QYWlyZWRfMDAyZFNpbmdsZS1TdXBwb3J0Ij42LjU2LjEwIE1JUFMgUGFpcmVkLVNpbmdsZSBTdXBwb3J0PC9hPgorPGxpPjxhIGhyZWY9Ik1JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI01JUFMtTG9vbmdzb24tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni4xMSBNSVBTIExvb25nc29uIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJQYWlyZWRfMDAyZFNpbmdsZS1Bcml0aG1ldGljLmh0bWwjUGFpcmVkXzAwMmRTaW5nbGUtQXJpdGhtZXRpYyI+Ni41Ni4xMS4xIFBhaXJlZC1TaW5nbGUgQXJpdGhtZXRpYzwvYT4KKzxsaT48YSBocmVmPSJQYWlyZWRfMDAyZFNpbmdsZS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUGFpcmVkXzAwMmRTaW5nbGUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni4xMS4yIFBhaXJlZC1TaW5nbGUgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9Ik1JUFNfMDAyZDNELUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNNSVBTXzAwMmQzRC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj42LjU2LjExLjMgTUlQUy0zRCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iT3RoZXItTUlQUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjT3RoZXItTUlQUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj42LjU2LjEyIE90aGVyIE1JUFMgQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9InBpY29DaGlwLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNwaWNvQ2hpcC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj42LjU2LjEzIHBpY29DaGlwIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJQb3dlclBDLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNQb3dlclBDLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjYuNTYuMTQgUG93ZXJQQyBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQy1BbHRpVmVjXzAwMmZWU1gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1Bvd2VyUEMtQWx0aVZlY18wMDJmVlNYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjYuNTYuMTUgUG93ZXJQQyBBbHRpVmVjIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJSWC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni4xNiBSWCBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU18wMDJmMzkwLVN5c3RlbS16LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNTXzAwMmYzOTAtU3lzdGVtLXotQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni4xNyBTLzM5MCBTeXN0ZW0geiBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU0gtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NILUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjYuNTYuMTggU0ggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IlNQQVJDLVZJUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjU1BBUkMtVklTLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjYuNTYuMTkgU1BBUkMgVklTIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJTUFUtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1NQVS1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj42LjU2LjIwIFNQVSBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iVEktQzZYLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSS1DNlgtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni4yMSBUSSBDNlggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IlRJTEVfMDAyZEd4LUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNUSUxFXzAwMmRHeC1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj42LjU2LjIyIFRJTEUtR3ggQnVpbHQtaW4gRnVuY3Rpb25zPC9hPgorPGxpPjxhIGhyZWY9IlRJTEVQcm8tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI1RJTEVQcm8tQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+Ni41Ni4yMyBUSUxFUHJvIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJUYXJnZXQtRm9ybWF0LUNoZWNrcy5odG1sI1RhcmdldC1Gb3JtYXQtQ2hlY2tzIj42LjU3IEZvcm1hdCBDaGVja3MgU3BlY2lmaWMgdG8gUGFydGljdWxhciBUYXJnZXQgTWFjaGluZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iU29sYXJpcy1Gb3JtYXQtQ2hlY2tzLmh0bWwjU29sYXJpcy1Gb3JtYXQtQ2hlY2tzIj42LjU3LjEgU29sYXJpcyBGb3JtYXQgQ2hlY2tzPC9hPgorPGxpPjxhIGhyZWY9IkRhcndpbi1Gb3JtYXQtQ2hlY2tzLmh0bWwjRGFyd2luLUZvcm1hdC1DaGVja3MiPjYuNTcuMiBEYXJ3aW4gRm9ybWF0IENoZWNrczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJQcmFnbWFzLmh0bWwjUHJhZ21hcyI+Ni41OCBQcmFnbWFzIEFjY2VwdGVkIGJ5IEdDQzwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJBUk0tUHJhZ21hcy5odG1sI0FSTS1QcmFnbWFzIj42LjU4LjEgQVJNIFByYWdtYXM8L2E+Cis8bGk+PGEgaHJlZj0iTTMyQy1QcmFnbWFzLmh0bWwjTTMyQy1QcmFnbWFzIj42LjU4LjIgTTMyQyBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9Ik1lUC1QcmFnbWFzLmh0bWwjTWVQLVByYWdtYXMiPjYuNTguMyBNZVAgUHJhZ21hczwvYT4KKzxsaT48YSBocmVmPSJSU18wMDJmNjAwMC1hbmQtUG93ZXJQQy1QcmFnbWFzLmh0bWwjUlNfMDAyZjYwMDAtYW5kLVBvd2VyUEMtUHJhZ21hcyI+Ni41OC40IFJTLzYwMDAgYW5kIFBvd2VyUEMgUHJhZ21hczwvYT4KKzxsaT48YSBocmVmPSJEYXJ3aW4tUHJhZ21hcy5odG1sI0Rhcndpbi1QcmFnbWFzIj42LjU4LjUgRGFyd2luIFByYWdtYXM8L2E+Cis8bGk+PGEgaHJlZj0iU29sYXJpcy1QcmFnbWFzLmh0bWwjU29sYXJpcy1QcmFnbWFzIj42LjU4LjYgU29sYXJpcyBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9IlN5bWJvbF8wMDJkUmVuYW1pbmctUHJhZ21hcy5odG1sI1N5bWJvbF8wMDJkUmVuYW1pbmctUHJhZ21hcyI+Ni41OC43IFN5bWJvbC1SZW5hbWluZyBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9IlN0cnVjdHVyZV8wMDJkUGFja2luZy1QcmFnbWFzLmh0bWwjU3RydWN0dXJlXzAwMmRQYWNraW5nLVByYWdtYXMiPjYuNTguOCBTdHJ1Y3R1cmUtUGFja2luZyBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9IldlYWstUHJhZ21hcy5odG1sI1dlYWstUHJhZ21hcyI+Ni41OC45IFdlYWsgUHJhZ21hczwvYT4KKzxsaT48YSBocmVmPSJEaWFnbm9zdGljLVByYWdtYXMuaHRtbCNEaWFnbm9zdGljLVByYWdtYXMiPjYuNTguMTAgRGlhZ25vc3RpYyBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9IlZpc2liaWxpdHktUHJhZ21hcy5odG1sI1Zpc2liaWxpdHktUHJhZ21hcyI+Ni41OC4xMSBWaXNpYmlsaXR5IFByYWdtYXM8L2E+Cis8bGk+PGEgaHJlZj0iUHVzaF8wMDJmUG9wLU1hY3JvLVByYWdtYXMuaHRtbCNQdXNoXzAwMmZQb3AtTWFjcm8tUHJhZ21hcyI+Ni41OC4xMiBQdXNoL1BvcCBNYWNybyBQcmFnbWFzPC9hPgorPGxpPjxhIGhyZWY9IkZ1bmN0aW9uLVNwZWNpZmljLU9wdGlvbi1QcmFnbWFzLmh0bWwjRnVuY3Rpb24tU3BlY2lmaWMtT3B0aW9uLVByYWdtYXMiPjYuNTguMTMgRnVuY3Rpb24gU3BlY2lmaWMgT3B0aW9uIFByYWdtYXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iVW5uYW1lZC1GaWVsZHMuaHRtbCNVbm5hbWVkLUZpZWxkcyI+Ni41OSBVbm5hbWVkIHN0cnVjdC91bmlvbiBmaWVsZHMgd2l0aGluIHN0cnVjdHMvdW5pb25zPC9hPgorPGxpPjxhIGhyZWY9IlRocmVhZF8wMDJkTG9jYWwuaHRtbCNUaHJlYWRfMDAyZExvY2FsIj42LjYwIFRocmVhZC1Mb2NhbCBTdG9yYWdlPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkM5OS1UaHJlYWRfMDAyZExvY2FsLUVkaXRzLmh0bWwjQzk5LVRocmVhZF8wMDJkTG9jYWwtRWRpdHMiPjYuNjAuMSBJU08vSUVDIDk4OTk6MTk5OSBFZGl0cyBmb3IgVGhyZWFkLUxvY2FsIFN0b3JhZ2U8L2E+Cis8bGk+PGEgaHJlZj0iQ18wMDJiXzAwMmI5OC1UaHJlYWRfMDAyZExvY2FsLUVkaXRzLmh0bWwjQ18wMDJiXzAwMmI5OC1UaHJlYWRfMDAyZExvY2FsLUVkaXRzIj42LjYwLjIgSVNPL0lFQyAxNDg4MjoxOTk4IEVkaXRzIGZvciBUaHJlYWQtTG9jYWwgU3RvcmFnZTwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJCaW5hcnktY29uc3RhbnRzLmh0bWwjQmluYXJ5LWNvbnN0YW50cyI+Ni42MSBCaW5hcnkgY29uc3RhbnRzIHVzaW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjBiPC9zcGFuPjwvc2FtcD4mcnNxdW87IHByZWZpeDwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyIgaHJlZj0iQ18wMDJiXzAwMmItRXh0ZW5zaW9ucy5odG1sI0NfMDAyYl8wMDJiLUV4dGVuc2lvbnMiPjcgRXh0ZW5zaW9ucyB0byB0aGUgQysrIExhbmd1YWdlPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLVZvbGF0aWxlcy5odG1sI0NfMDAyYl8wMDJiLVZvbGF0aWxlcyI+Ny4xIFdoZW4gaXMgYSBWb2xhdGlsZSBDKysgT2JqZWN0IEFjY2Vzc2VkPzwvYT4KKzxsaT48YSBocmVmPSJSZXN0cmljdGVkLVBvaW50ZXJzLmh0bWwjUmVzdHJpY3RlZC1Qb2ludGVycyI+Ny4yIFJlc3RyaWN0aW5nIFBvaW50ZXIgQWxpYXNpbmc8L2E+Cis8bGk+PGEgaHJlZj0iVmFndWUtTGlua2FnZS5odG1sI1ZhZ3VlLUxpbmthZ2UiPjcuMyBWYWd1ZSBMaW5rYWdlPC9hPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLUludGVyZmFjZS5odG1sI0NfMDAyYl8wMDJiLUludGVyZmFjZSI+Ny40ICNwcmFnbWEgaW50ZXJmYWNlIGFuZCBpbXBsZW1lbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJUZW1wbGF0ZS1JbnN0YW50aWF0aW9uLmh0bWwjVGVtcGxhdGUtSW5zdGFudGlhdGlvbiI+Ny41IFdoZXJlJ3MgdGhlIFRlbXBsYXRlPzwvYT4KKzxsaT48YSBocmVmPSJCb3VuZC1tZW1iZXItZnVuY3Rpb25zLmh0bWwjQm91bmQtbWVtYmVyLWZ1bmN0aW9ucyI+Ny42IEV4dHJhY3RpbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBhIGJvdW5kIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkNfMDAyYl8wMDJiLUF0dHJpYnV0ZXMuaHRtbCNDXzAwMmJfMDAyYi1BdHRyaWJ1dGVzIj43LjcgQysrLVNwZWNpZmljIFZhcmlhYmxlLCBGdW5jdGlvbiwgYW5kIFR5cGUgQXR0cmlidXRlczwvYT4KKzxsaT48YSBocmVmPSJGdW5jdGlvbi1NdWx0aXZlcnNpb25pbmcuaHRtbCNGdW5jdGlvbi1NdWx0aXZlcnNpb25pbmciPjcuOCBGdW5jdGlvbiBNdWx0aXZlcnNpb25pbmc8L2E+Cis8bGk+PGEgaHJlZj0iTmFtZXNwYWNlLUFzc29jaWF0aW9uLmh0bWwjTmFtZXNwYWNlLUFzc29jaWF0aW9uIj43LjkgTmFtZXNwYWNlIEFzc29jaWF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlR5cGUtVHJhaXRzLmh0bWwjVHlwZS1UcmFpdHMiPjcuMTAgVHlwZSBUcmFpdHM8L2E+Cis8bGk+PGEgaHJlZj0iSmF2YS1FeGNlcHRpb25zLmh0bWwjSmF2YS1FeGNlcHRpb25zIj43LjExIEphdmEgRXhjZXB0aW9uczwvYT4KKzxsaT48YSBocmVmPSJEZXByZWNhdGVkLUZlYXR1cmVzLmh0bWwjRGVwcmVjYXRlZC1GZWF0dXJlcyI+Ny4xMiBEZXByZWNhdGVkIEZlYXR1cmVzPC9hPgorPGxpPjxhIGhyZWY9IkJhY2t3YXJkcy1Db21wYXRpYmlsaXR5Lmh0bWwjQmFja3dhcmRzLUNvbXBhdGliaWxpdHkiPjcuMTMgQmFja3dhcmRzIENvbXBhdGliaWxpdHk8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX09iamVjdGl2ZV8wMDJkQyIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIj44IEdOVSBPYmplY3RpdmUtQyBmZWF0dXJlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJHTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJLmh0bWwjR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSSI+OC4xIEdOVSBPYmplY3RpdmUtQyBydW50aW1lIEFQSTwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJNb2Rlcm4tR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lLUFQSS5odG1sI01vZGVybi1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJIj44LjEuMSBNb2Rlcm4gR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgQVBJPC9hPgorPGxpPjxhIGhyZWY9IlRyYWRpdGlvbmFsLUdOVS1PYmplY3RpdmVfMDAyZEMtcnVudGltZS1BUEkuaHRtbCNUcmFkaXRpb25hbC1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUtQVBJIj44LjEuMiBUcmFkaXRpb25hbCBHTlUgT2JqZWN0aXZlLUMgcnVudGltZSBBUEk8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iRXhlY3V0aW5nLWNvZGUtYmVmb3JlLW1haW4uaHRtbCNFeGVjdXRpbmctY29kZS1iZWZvcmUtbWFpbiI+OC4yIDxjb2RlPitsb2FkPC9jb2RlPjogRXhlY3V0aW5nIGNvZGUgYmVmb3JlIG1haW48L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iV2hhdC15b3UtY2FuLWFuZC13aGF0LXlvdS1jYW5ub3QtZG8taW4tXzAwMmJsb2FkLmh0bWwjV2hhdC15b3UtY2FuLWFuZC13aGF0LXlvdS1jYW5ub3QtZG8taW4tXzAwMmJsb2FkIj44LjIuMSBXaGF0IHlvdSBjYW4gYW5kIHdoYXQgeW91IGNhbm5vdCBkbyBpbiA8Y29kZT4rbG9hZDwvY29kZT48L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iVHlwZS1lbmNvZGluZy5odG1sI1R5cGUtZW5jb2RpbmciPjguMyBUeXBlIGVuY29kaW5nPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkxlZ2FjeS10eXBlLWVuY29kaW5nLmh0bWwjTGVnYWN5LXR5cGUtZW5jb2RpbmciPjguMy4xIExlZ2FjeSB0eXBlIGVuY29kaW5nPC9hPgorPGxpPjxhIGhyZWY9Il8wMDQwZW5jb2RlLmh0bWwjXzAwNDBlbmNvZGUiPjguMy4yIEBlbmNvZGU8L2E+Cis8bGk+PGEgaHJlZj0iTWV0aG9kLXNpZ25hdHVyZXMuaHRtbCNNZXRob2Qtc2lnbmF0dXJlcyI+OC4zLjMgTWV0aG9kIHNpZ25hdHVyZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iR2FyYmFnZS1Db2xsZWN0aW9uLmh0bWwjR2FyYmFnZS1Db2xsZWN0aW9uIj44LjQgR2FyYmFnZSBDb2xsZWN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkNvbnN0YW50LXN0cmluZy1vYmplY3RzLmh0bWwjQ29uc3RhbnQtc3RyaW5nLW9iamVjdHMiPjguNSBDb25zdGFudCBzdHJpbmcgb2JqZWN0czwvYT4KKzxsaT48YSBocmVmPSJjb21wYXRpYmlsaXR5XzAwNWZhbGlhcy5odG1sI2NvbXBhdGliaWxpdHlfMDA1ZmFsaWFzIj44LjYgY29tcGF0aWJpbGl0eV9hbGlhczwvYT4KKzxsaT48YSBocmVmPSJFeGNlcHRpb25zLmh0bWwjRXhjZXB0aW9ucyI+OC43IEV4Y2VwdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iU3luY2hyb25pemF0aW9uLmh0bWwjU3luY2hyb25pemF0aW9uIj44LjggU3luY2hyb25pemF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkZhc3QtZW51bWVyYXRpb24uaHRtbCNGYXN0LWVudW1lcmF0aW9uIj44LjkgRmFzdCBlbnVtZXJhdGlvbjwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJVc2luZy1mYXN0LWVudW1lcmF0aW9uLmh0bWwjVXNpbmctZmFzdC1lbnVtZXJhdGlvbiI+OC45LjEgVXNpbmcgZmFzdCBlbnVtZXJhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJjOTlfMDAyZGxpa2UtZmFzdC1lbnVtZXJhdGlvbi1zeW50YXguaHRtbCNjOTlfMDAyZGxpa2UtZmFzdC1lbnVtZXJhdGlvbi1zeW50YXgiPjguOS4yIGM5OS1saWtlIGZhc3QgZW51bWVyYXRpb24gc3ludGF4PC9hPgorPGxpPjxhIGhyZWY9IkZhc3QtZW51bWVyYXRpb24tZGV0YWlscy5odG1sI0Zhc3QtZW51bWVyYXRpb24tZGV0YWlscyI+OC45LjMgRmFzdCBlbnVtZXJhdGlvbiBkZXRhaWxzPC9hPgorPGxpPjxhIGhyZWY9IkZhc3QtZW51bWVyYXRpb24tcHJvdG9jb2wuaHRtbCNGYXN0LWVudW1lcmF0aW9uLXByb3RvY29sIj44LjkuNCBGYXN0IGVudW1lcmF0aW9uIHByb3RvY29sPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik1lc3NhZ2luZy13aXRoLXRoZS1HTlUtT2JqZWN0aXZlXzAwMmRDLXJ1bnRpbWUuaHRtbCNNZXNzYWdpbmctd2l0aC10aGUtR05VLU9iamVjdGl2ZV8wMDJkQy1ydW50aW1lIj44LjEwIE1lc3NhZ2luZyB3aXRoIHRoZSBHTlUgT2JqZWN0aXZlLUMgcnVudGltZTwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJEeW5hbWljYWxseS1yZWdpc3RlcmluZy1tZXRob2RzLmh0bWwjRHluYW1pY2FsbHktcmVnaXN0ZXJpbmctbWV0aG9kcyI+OC4xMC4xIER5bmFtaWNhbGx5IHJlZ2lzdGVyaW5nIG1ldGhvZHM8L2E+Cis8bGk+PGEgaHJlZj0iRm9yd2FyZGluZy1ob29rLmh0bWwjRm9yd2FyZGluZy1ob29rIj44LjEwLjIgRm9yd2FyZGluZyBob29rPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19Db21wYXRpYmlsaXR5IiBocmVmPSJDb21wYXRpYmlsaXR5Lmh0bWwjQ29tcGF0aWJpbGl0eSI+OSBCaW5hcnkgQ29tcGF0aWJpbGl0eTwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfR2NvdiIgaHJlZj0iR2Nvdi5odG1sI0djb3YiPjEwIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4mbWRhc2g7YSBUZXN0IENvdmVyYWdlIFByb2dyYW08L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iR2Nvdi1JbnRyby5odG1sI0djb3YtSW50cm8iPjEwLjEgSW50cm9kdWN0aW9uIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD48L2E+Cis8bGk+PGEgaHJlZj0iSW52b2tpbmctR2Nvdi5odG1sI0ludm9raW5nLUdjb3YiPjEwLjIgSW52b2tpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPjwvYT4KKzxsaT48YSBocmVmPSJHY292LWFuZC1PcHRpbWl6YXRpb24uaHRtbCNHY292LWFuZC1PcHRpbWl6YXRpb24iPjEwLjMgVXNpbmcgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPiB3aXRoIEdDQyBPcHRpbWl6YXRpb248L2E+Cis8bGk+PGEgaHJlZj0iR2Nvdi1EYXRhLUZpbGVzLmh0bWwjR2Nvdi1EYXRhLUZpbGVzIj4xMC40IEJyaWVmIGRlc2NyaXB0aW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY292PC9zcGFuPjwvc2FtcD4gZGF0YSBmaWxlczwvYT4KKzxsaT48YSBocmVmPSJDcm9zc18wMDJkcHJvZmlsaW5nLmh0bWwjQ3Jvc3NfMDAyZHByb2ZpbGluZyI+MTAuNSBEYXRhIGZpbGUgcmVsb2NhdGlvbiB0byBzdXBwb3J0IGNyb3NzLXByb2ZpbGluZzwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfVHJvdWJsZSIgaHJlZj0iVHJvdWJsZS5odG1sI1Ryb3VibGUiPjExIEtub3duIENhdXNlcyBvZiBUcm91YmxlIHdpdGggR0NDPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkFjdHVhbC1CdWdzLmh0bWwjQWN0dWFsLUJ1Z3MiPjExLjEgQWN0dWFsIEJ1Z3MgV2UgSGF2ZW4ndCBGaXhlZCBZZXQ8L2E+Cis8bGk+PGEgaHJlZj0iSW50ZXJvcGVyYXRpb24uaHRtbCNJbnRlcm9wZXJhdGlvbiI+MTEuMiBJbnRlcm9wZXJhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj4xMS4zIEluY29tcGF0aWJpbGl0aWVzIG9mIEdDQzwvYT4KKzxsaT48YSBocmVmPSJGaXhlZC1IZWFkZXJzLmh0bWwjRml4ZWQtSGVhZGVycyI+MTEuNCBGaXhlZCBIZWFkZXIgRmlsZXM8L2E+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmQtTGlicmFyaWVzLmh0bWwjU3RhbmRhcmQtTGlicmFyaWVzIj4xMS41IFN0YW5kYXJkIExpYnJhcmllczwvYT4KKzxsaT48YSBocmVmPSJEaXNhcHBvaW50bWVudHMuaHRtbCNEaXNhcHBvaW50bWVudHMiPjExLjYgRGlzYXBwb2ludG1lbnRzIGFuZCBNaXN1bmRlcnN0YW5kaW5nczwvYT4KKzxsaT48YSBocmVmPSJDXzAwMmJfMDAyYi1NaXN1bmRlcnN0YW5kaW5ncy5odG1sI0NfMDAyYl8wMDJiLU1pc3VuZGVyc3RhbmRpbmdzIj4xMS43IENvbW1vbiBNaXN1bmRlcnN0YW5kaW5ncyB3aXRoIEdOVSBDKys8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iU3RhdGljLURlZmluaXRpb25zLmh0bWwjU3RhdGljLURlZmluaXRpb25zIj4xMS43LjEgRGVjbGFyZSA8ZW0+YW5kPC9lbT4gRGVmaW5lIFN0YXRpYyBNZW1iZXJzPC9hPgorPGxpPjxhIGhyZWY9Ik5hbWUtbG9va3VwLmh0bWwjTmFtZS1sb29rdXAiPjExLjcuMiBOYW1lIGxvb2t1cCwgdGVtcGxhdGVzLCBhbmQgYWNjZXNzaW5nIG1lbWJlcnMgb2YgYmFzZSBjbGFzc2VzPC9hPgorPGxpPjxhIGhyZWY9IlRlbXBvcmFyaWVzLmh0bWwjVGVtcG9yYXJpZXMiPjExLjcuMyBUZW1wb3JhcmllcyBNYXkgVmFuaXNoIEJlZm9yZSBZb3UgRXhwZWN0PC9hPgorPGxpPjxhIGhyZWY9IkNvcHktQXNzaWdubWVudC5odG1sI0NvcHktQXNzaWdubWVudCI+MTEuNy40IEltcGxpY2l0IENvcHktQXNzaWdubWVudCBmb3IgVmlydHVhbCBCYXNlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJOb25fMDAyZGJ1Z3MuaHRtbCNOb25fMDAyZGJ1Z3MiPjExLjggQ2VydGFpbiBDaGFuZ2VzIFdlIERvbid0IFdhbnQgdG8gTWFrZTwvYT4KKzxsaT48YSBocmVmPSJXYXJuaW5ncy1hbmQtRXJyb3JzLmh0bWwjV2FybmluZ3MtYW5kLUVycm9ycyI+MTEuOSBXYXJuaW5nIE1lc3NhZ2VzIGFuZCBFcnJvciBNZXNzYWdlczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQnVncyIgaHJlZj0iQnVncy5odG1sI0J1Z3MiPjEyIFJlcG9ydGluZyBCdWdzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI0J1Zy1Dcml0ZXJpYSI+MTIuMSBIYXZlIFlvdSBGb3VuZCBhIEJ1Zz88L2E+Cis8bGk+PGEgaHJlZj0iQnVnLVJlcG9ydGluZy5odG1sI0J1Zy1SZXBvcnRpbmciPjEyLjIgSG93IGFuZCB3aGVyZSB0byBSZXBvcnQgQnVnczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfU2VydmljZSIgaHJlZj0iU2VydmljZS5odG1sI1NlcnZpY2UiPjEzIEhvdyBUbyBHZXQgSGVscCB3aXRoIEdDQzwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfQ29udHJpYnV0aW5nIiBocmVmPSJDb250cmlidXRpbmcuaHRtbCNDb250cmlidXRpbmciPjE0IENvbnRyaWJ1dGluZyB0byBHQ0MgRGV2ZWxvcG1lbnQ8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0Z1bmRpbmciIGhyZWY9IkZ1bmRpbmcuaHRtbCNGdW5kaW5nIj5GdW5kaW5nIEZyZWUgU29mdHdhcmU8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0dOVS1Qcm9qZWN0IiBocmVmPSJHTlUtUHJvamVjdC5odG1sI0dOVS1Qcm9qZWN0Ij5UaGUgR05VIFByb2plY3QgYW5kIEdOVS9MaW51eDwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfQ29weWluZyIgaHJlZj0iQ29weWluZy5odG1sI0NvcHlpbmciPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9hPgorPGxpPjxhIG5hbWU9InRvY19HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+QURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50czwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQ29udHJpYnV0b3JzIiBocmVmPSJDb250cmlidXRvcnMuaHRtbCNDb250cmlidXRvcnMiPkNvbnRyaWJ1dG9ycyB0byBHQ0M8L2E+Cis8bGk+PGEgbmFtZT0idG9jX09wdGlvbi1JbmRleCIgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4Ij5PcHRpb24gSW5kZXg8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0tleXdvcmQtSW5kZXgiIGhyZWY9IktleXdvcmQtSW5kZXguaHRtbCNLZXl3b3JkLUluZGV4Ij5LZXl3b3JkIEluZGV4PC9hPgorPC9saT48L3VsPgorPC9kaXY+CisKKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVG9wIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdfMDAyYl8wMDJiLWFuZC1HQ0MuaHRtbCNHXzAwMmJfMDAyYi1hbmQtR0NDIj5HKysgYW5kIEdDQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwjRElSIj4oRElSKTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkludHJvZHVjdGlvbjwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWludHJvZHVjdGlvbi0xIj48L2E+CitUaGlzIG1hbnVhbCBkb2N1bWVudHMgaG93IHRvIHVzZSB0aGUgR05VIGNvbXBpbGVycywKK2FzIHdlbGwgYXMgdGhlaXIgZmVhdHVyZXMgYW5kIGluY29tcGF0aWJpbGl0aWVzLCBhbmQgaG93IHRvIHJlcG9ydAorYnVncy4gIEl0IGNvcnJlc3BvbmRzIHRvIHRoZSBjb21waWxlcnMKKyhjcm9zc3Rvb2wtTkcgbGluYXJvLTEuMTMuMS00LjgtMjAxMy4xMSAtIExpbmFybyBHQ0MgMjAxMy4xMCkKK3ZlcnNpb24gNC44LjMuIAorVGhlIGludGVybmFscyBvZiB0aGUgR05VIGNvbXBpbGVycywgaW5jbHVkaW5nIGhvdyB0byBwb3J0IHRoZW0gdG8gbmV3Cit0YXJnZXRzIGFuZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byB3cml0ZSBmcm9udCBlbmRzIGZvciBuZXcKK2xhbmd1YWdlcywgYXJlIGRvY3VtZW50ZWQgaW4gYSBzZXBhcmF0ZSBtYW51YWwuICBTZWUgPGEgaHJlZj0iLi4vZ2NjaW50L2luZGV4Lmh0bWwjVG9wIj5JbnRyb2R1Y3Rpb248L2E+LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iR18wMDJiXzAwMmItYW5kLUdDQy5odG1sI0dfMDAyYl8wMDJiLWFuZC1HQ0MiPkcrKyBhbmQgR0NDPC9hPjogICAgICBZb3UgY2FuIGNvbXBpbGUgQyBvciBDKysgcHJvZ3JhbXMuIAorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+OiAgICAgICAgTGFuZ3VhZ2Ugc3RhbmRhcmRzIHN1cHBvcnRlZCBieSBHQ0MuIAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iSW52b2tpbmctR0NDLmh0bWwjSW52b2tpbmctR0NDIj5JbnZva2luZyBHQ0M8L2E+OiAgICAgQ29tbWFuZCBvcHRpb25zIHN1cHBvcnRlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdjYzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJDLUltcGxlbWVudGF0aW9uLmh0bWwjQy1JbXBsZW1lbnRhdGlvbiI+QyBJbXBsZW1lbnRhdGlvbjwvYT46ICBIb3cgR0NDIGltcGxlbWVudHMgdGhlIElTTyBDIHNwZWNpZmljYXRpb24uIAorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iQ18wMDJiXzAwMmItSW1wbGVtZW50YXRpb24uaHRtbCNDXzAwMmJfMDAyYi1JbXBsZW1lbnRhdGlvbiI+QysrIEltcGxlbWVudGF0aW9uPC9hPjogIEhvdyBHQ0MgaW1wbGVtZW50cyB0aGUgSVNPIEMrKyBzcGVjaWZpY2F0aW9uLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkMtRXh0ZW5zaW9ucy5odG1sI0MtRXh0ZW5zaW9ucyI+QyBFeHRlbnNpb25zPC9hPjogICAgIEdOVSBleHRlbnNpb25zIHRvIHRoZSBDIGxhbmd1YWdlIGZhbWlseS4gCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJDXzAwMmJfMDAyYi1FeHRlbnNpb25zLmh0bWwjQ18wMDJiXzAwMmItRXh0ZW5zaW9ucyI+QysrIEV4dGVuc2lvbnM8L2E+OiAgIEdOVSBleHRlbnNpb25zIHRvIHRoZSBDKysgbGFuZ3VhZ2UuIAorPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iT2JqZWN0aXZlXzAwMmRDLmh0bWwjT2JqZWN0aXZlXzAwMmRDIj5PYmplY3RpdmUtQzwvYT46ICAgICAgR05VIE9iamVjdGl2ZS1DIHJ1bnRpbWUgZmVhdHVyZXMuIAorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iQ29tcGF0aWJpbGl0eS5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk8L2E+OiAgICBCaW5hcnkgQ29tcGF0aWJpbGl0eQorPGxpPjxhIGhyZWY9Ikdjb3YuaHRtbCNHY292Ij5HY292PC9hPjogICAgICAgICAgICAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjb3Y8L3NwYW4+PC9zYW1wPi0tLWEgdGVzdCBjb3ZlcmFnZSBwcm9ncmFtLiAKKzxsaT48YSBocmVmPSJUcm91YmxlLmh0bWwjVHJvdWJsZSI+VHJvdWJsZTwvYT46ICAgICAgICAgIElmIHlvdSBoYXZlIHRyb3VibGUgdXNpbmcgR0NDLiAKKzxsaT48YSBocmVmPSJCdWdzLmh0bWwjQnVncyI+QnVnczwvYT46ICAgICAgICAgICAgIEhvdywgd2h5IGFuZCB3aGVyZSB0byByZXBvcnQgYnVncy4gCis8bGk+PGEgaHJlZj0iU2VydmljZS5odG1sI1NlcnZpY2UiPlNlcnZpY2U8L2E+OiAgICAgICAgICBIb3cgdG8gZmluZCBzdXBwbGllcnMgb2Ygc3VwcG9ydCBmb3IgR0NDLiAKKzxsaT48YSBocmVmPSJDb250cmlidXRpbmcuaHRtbCNDb250cmlidXRpbmciPkNvbnRyaWJ1dGluZzwvYT46ICAgICBIb3cgdG8gY29udHJpYnV0ZSB0byB0ZXN0aW5nIGFuZCBkZXZlbG9waW5nIEdDQy4KKworPGxpPjxhIGhyZWY9IkZ1bmRpbmcuaHRtbCNGdW5kaW5nIj5GdW5kaW5nPC9hPjogICAgICAgICAgSG93IHRvIGhlbHAgYXNzdXJlIGZ1bmRpbmcgZm9yIGZyZWUgc29mdHdhcmUuIAorPGxpPjxhIGhyZWY9IkdOVS1Qcm9qZWN0Lmh0bWwjR05VLVByb2plY3QiPkdOVSBQcm9qZWN0PC9hPjogICAgICBUaGUgR05VIFByb2plY3QgYW5kIEdOVS9MaW51eC4KKworPGxpPjxhIGhyZWY9IkNvcHlpbmcuaHRtbCNDb3B5aW5nIj5Db3B5aW5nPC9hPjogICAgICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2F5cworICAgICAgICAgICAgICAgICAgICBob3cgeW91IGNhbiBjb3B5IGFuZCBzaGFyZSBHQ0MuIAorPGxpPjxhIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPjogIEhvdyB5b3UgY2FuIGNvcHkgYW5kIHNoYXJlIHRoaXMgbWFudWFsLiAKKzxsaT48YSBocmVmPSJDb250cmlidXRvcnMuaHRtbCNDb250cmlidXRvcnMiPkNvbnRyaWJ1dG9yczwvYT46ICAgICBQZW9wbGUgd2hvIGhhdmUgY29udHJpYnV0ZWQgdG8gR0NDLgorCis8bGk+PGEgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4Ij5PcHRpb24gSW5kZXg8L2E+OiAgICAgSW5kZXggdG8gY29tbWFuZCBsaW5lIG9wdGlvbnMuIAorPGxpPjxhIGhyZWY9IktleXdvcmQtSW5kZXguaHRtbCNLZXl3b3JkLUluZGV4Ij5LZXl3b3JkIEluZGV4PC9hPjogICAgSW5kZXggb2YgY29uY2VwdHMgYW5kIHN5bWJvbCBuYW1lcy4gCis8L3VsPgorCis8IS0tIENvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAtLT4KKzwhLS0gVGhpcyBpcyBwYXJ0IG9mIHRoZSBHQ0MgbWFudWFsLiAtLT4KKzwhLS0gRm9yIGNvcHlpbmcgY29uZGl0aW9ucywgc2VlIHRoZSBmaWxlIGdjYy50ZXhpLiAtLT4KKyA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL3BpY29DaGlwLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvcGljb0NoaXAtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YjcwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL3BpY29DaGlwLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5waWNvQ2hpcCBCdWlsdC1pbiBGdW5jdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGFyZ2V0LUJ1aWx0aW5zLmh0bWwjVGFyZ2V0LUJ1aWx0aW5zIiB0aXRsZT0iVGFyZ2V0IEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3RoZXItTUlQUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjT3RoZXItTUlQUy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIiB0aXRsZT0iT3RoZXIgTUlQUyBCdWlsdC1pbiBGdW5jdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQb3dlclBDLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMuaHRtbCNQb3dlclBDLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiIHRpdGxlPSJQb3dlclBDIEJ1aWx0LWluIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk4OC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJwaWNvQ2hpcC1CdWlsdC1pbi1GdW5jdGlvbnMiPjwvYT4KKzxhIG5hbWU9InBpY29DaGlwLUJ1aWx0XzAwMmRpbi1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUG93ZXJQQy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zLmh0bWwjUG93ZXJQQy1CdWlsdF8wMDJkaW4tRnVuY3Rpb25zIj5Qb3dlclBDIEJ1aWx0LWluIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik90aGVyLU1JUFMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucy5odG1sI090aGVyLU1JUFMtQnVpbHRfMDAyZGluLUZ1bmN0aW9ucyI+T3RoZXIgTUlQUyBCdWlsdC1pbiBGdW5jdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUYXJnZXQtQnVpbHRpbnMuaHRtbCNUYXJnZXQtQnVpbHRpbnMiPlRhcmdldCBCdWlsdGluczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuNTYuMTMgcGljb0NoaXAgQnVpbHQtaW4gRnVuY3Rpb25zPC9oND4KKworPHA+R0NDIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byBzZWxlY3RlZCBtYWNoaW5lIGluc3RydWN0aW9ucyBmcm9tIHRoZQorcGljb0NoaXAgaW5zdHJ1Y3Rpb24gc2V0LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5pbnQgX19idWlsdGluX3NiYyAoaW50IDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+U2lnbiBiaXQgY291bnQuICBSZXR1cm4gdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiaXRzIGluIDx2YXI+dmFsdWU8L3Zhcj4KK3RoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgc2lnbiBiaXQuICBUaGUgcmVzdWx0IGlzIHRoZSBudW1iZXIgb2YKK2xlYWRpbmcgc2lnbiBiaXRzIG1pbnVzIG9uZSwgZ2l2aW5nIHRoZSBudW1iZXIgb2YgcmVkdW5kYW50IHNpZ24gYml0cyBpbgorPHZhcj52YWx1ZTwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmludCBfX2J1aWx0aW5fYnl0ZXN3YXAgKGludCA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPkJ5dGUgc3dhcC4gIFJldHVybiB0aGUgcmVzdWx0IG9mIHN3YXBwaW5nIHRoZSB1cHBlciBhbmQgbG93ZXIgYnl0ZXMgb2YKKzx2YXI+dmFsdWU8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5pbnQgX19idWlsdGluX2JyZXYgKGludCA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPkJpdCByZXZlcnNhbC4gIFJldHVybiB0aGUgcmVzdWx0IG9mIHJldmVyc2luZyB0aGUgYml0cyBpbgorPHZhcj52YWx1ZTwvdmFyPi4gIEJpdCAxNSBpcyBzd2FwcGVkIHdpdGggYml0IDAsIGJpdCAxNCBpcyBzd2FwcGVkIHdpdGggYml0IDEsCithbmQgc28gb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5pbnQgX19idWlsdGluX2FkZHMgKGludCA8L2NvZGU+PHZhcj54PC92YXI+PGNvZGU+LCBpbnQgPC9jb2RlPjx2YXI+eTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPlNhdHVyYXRpbmcgYWRkaXRpb24uICBSZXR1cm4gdGhlIHJlc3VsdCBvZiBhZGRpbmcgPHZhcj54PC92YXI+IGFuZCA8dmFyPnk8L3Zhcj4sCitzdG9yaW5nIHRoZSB2YWx1ZSAzMjc2NyBpZiB0aGUgcmVzdWx0IG92ZXJmbG93cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPmludCBfX2J1aWx0aW5fc3VicyAoaW50IDwvY29kZT48dmFyPng8L3Zhcj48Y29kZT4sIGludCA8L2NvZGU+PHZhcj55PC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+U2F0dXJhdGluZyBzdWJ0cmFjdGlvbi4gIFJldHVybiB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIDx2YXI+eTwvdmFyPiBmcm9tCis8dmFyPng8L3Zhcj4sIHN0b3JpbmcgdGhlIHZhbHVlICZtaW51czszMjc2OCBpZiB0aGUgcmVzdWx0IG92ZXJmbG93cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnZvaWQgX19idWlsdGluX2hhbHQgKHZvaWQpPC9jb2RlPjxkZD5IYWx0LiAgVGhlIHByb2Nlc3NvciBzdG9wcyBleGVjdXRpb24uICBUaGlzIGJ1aWx0LWluIGlzIHVzZWZ1bCBmb3IKK2ltcGxlbWVudGluZyBhc3NlcnRpb25zLgorCisgPC9kbD4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvcGljb0NoaXAtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy9waWNvQ2hpcC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExMGI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvcGljb0NoaXAtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsOTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnBpY29DaGlwIE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUERQXzAwMmQxMS1PcHRpb25zLmh0bWwjUERQXzAwMmQxMS1PcHRpb25zIiB0aXRsZT0iUERQLTExIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQb3dlclBDLU9wdGlvbnMuaHRtbCNQb3dlclBDLU9wdGlvbnMiIHRpdGxlPSJQb3dlclBDIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0icGljb0NoaXAtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQb3dlclBDLU9wdGlvbnMuaHRtbCNQb3dlclBDLU9wdGlvbnMiPlBvd2VyUEMgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBEUF8wMDJkMTEtT3B0aW9ucy5odG1sI1BEUF8wMDJkMTEtT3B0aW9ucyI+UERQLTExIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuMzEgcGljb0NoaXAgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXBpY29DaGlwLW9wdGlvbnMtMTkwMiI+PC9hPgorVGhlc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBwaWNvQ2hpcCBpbXBsZW1lbnRhdGlvbnM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1tYWU9PC9jb2RlPjx2YXI+YWVfdHlwZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1tY3B1LTE5MDMiPjwvYT5TZXQgdGhlIGluc3RydWN0aW9uIHNldCwgcmVnaXN0ZXIgc2V0LCBhbmQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZworcGFyYW1ldGVycyBmb3IgYXJyYXkgZWxlbWVudCB0eXBlIDx2YXI+YWVfdHlwZTwvdmFyPi4gIFN1cHBvcnRlZCB2YWx1ZXMKK2ZvciA8dmFyPmFlX3R5cGU8L3Zhcj4gYXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QU5ZPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk1VTDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TUFDPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWU9QU5ZPC9zcGFuPjwvc2FtcD4gc2VsZWN0cyBhIGNvbXBsZXRlbHkgZ2VuZXJpYyBBRSB0eXBlLiAgQ29kZQorZ2VuZXJhdGVkIHdpdGggdGhpcyBvcHRpb24gcnVucyBvbiBhbnkgb2YgdGhlIG90aGVyIEFFIHR5cGVzLiAgVGhlCitjb2RlIGlzIG5vdCBhcyBlZmZpY2llbnQgYXMgaXQgd291bGQgYmUgaWYgY29tcGlsZWQgZm9yIGEgc3BlY2lmaWMKK0FFIHR5cGUsIGFuZCBzb21lIHR5cGVzIG9mIG9wZXJhdGlvbiAoZS5nLiwgbXVsdGlwbGljYXRpb24pIGRvIG5vdAord29yayBwcm9wZXJseSBvbiBhbGwgdHlwZXMgb2YgQUUuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1hZT1NVUw8L3NwYW4+PC9zYW1wPiBzZWxlY3RzIGEgTVVMIEFFIHR5cGUuICBUaGlzIGlzIHRoZSBtb3N0IHVzZWZ1bCBBRSB0eXBlCitmb3IgY29tcGlsZWQgY29kZSwgYW5kIGlzIHRoZSBkZWZhdWx0LgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1tYWU9TUFDPC9zcGFuPjwvc2FtcD4gc2VsZWN0cyBhIERTUC1zdHlsZSBNQUMgQUUuICBDb2RlIGNvbXBpbGVkIHdpdGggdGhpcworb3B0aW9uIG1heSBzdWZmZXIgZnJvbSBwb29yIHBlcmZvcm1hbmNlIG9mIGJ5dGUgKGNoYXIpIG1hbmlwdWxhdGlvbiwKK3NpbmNlIHRoZSBEU1AgQUUgZG9lcyBub3QgcHJvdmlkZSBoYXJkd2FyZSBzdXBwb3J0IGZvciBieXRlIGxvYWQvc3RvcmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW1zeW1ib2wtYXMtYWRkcmVzczwvY29kZT48ZGQ+RW5hYmxlIHRoZSBjb21waWxlciB0byBkaXJlY3RseSB1c2UgYSBzeW1ib2wgbmFtZSBhcyBhbiBhZGRyZXNzIGluIGEKK2xvYWQvc3RvcmUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgZmlyc3QgbG9hZGluZyBpdCBpbnRvIGEKK3JlZ2lzdGVyLiAgVHlwaWNhbGx5LCB0aGUgdXNlIG9mIHRoaXMgb3B0aW9uIGdlbmVyYXRlcyBsYXJnZXIKK3Byb2dyYW1zLCB3aGljaCBydW4gZmFzdGVyIHRoYW4gd2hlbiB0aGUgb3B0aW9uIGlzbid0IHVzZWQuICBIb3dldmVyLCB0aGUKK3Jlc3VsdHMgdmFyeSBmcm9tIHByb2dyYW0gdG8gcHJvZ3JhbSwgc28gaXQgaXMgbGVmdCBhcyBhIHVzZXIgb3B0aW9uLAorcmF0aGVyIHRoYW4gYmVpbmcgcGVybWFuZW50bHkgZW5hYmxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1tbm8taW5lZmZpY2llbnQtd2FybmluZ3M8L2NvZGU+PGRkPkRpc2FibGVzIHdhcm5pbmdzIGFib3V0IHRoZSBnZW5lcmF0aW9uIG9mIGluZWZmaWNpZW50IGNvZGUuICBUaGVzZQord2FybmluZ3MgY2FuIGJlIGdlbmVyYXRlZCwgZm9yIGV4YW1wbGUsIHdoZW4gY29tcGlsaW5nIGNvZGUgdGhhdAorcGVyZm9ybXMgYnl0ZS1sZXZlbCBtZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGUgTUFDIEFFIHR5cGUuICBUaGUgTUFDIEFFIGhhcworbm8gaGFyZHdhcmUgc3VwcG9ydCBmb3IgYnl0ZS1sZXZlbCBtZW1vcnkgb3BlcmF0aW9ucywgc28gYWxsIGJ5dGUKK2xvYWQvc3RvcmVzIG11c3QgYmUgc3ludGhlc2l6ZWQgZnJvbSB3b3JkIGxvYWQvc3RvcmUgb3BlcmF0aW9ucy4gIFRoaXMgaXMKK2luZWZmaWNpZW50IGFuZCBhIHdhcm5pbmcgaXMgZ2VuZXJhdGVkIHRvIGluZGljYXRlCit0aGF0IHlvdSBzaG91bGQgcmV3cml0ZSB0aGUgY29kZSB0byBhdm9pZCBieXRlIG9wZXJhdGlvbnMsIG9yIHRvIHRhcmdldAorYW4gQUUgdHlwZSB0aGF0IGhhcyB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIHN1cHBvcnQuICBUaGlzIG9wdGlvbiBkaXNhYmxlcwordGhlc2Ugd2FybmluZ3MuCisKKyA8L2RsPgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy94ODYtc3BlY2lmaWMtbWVtb3J5LW1vZGVsLWV4dGVuc2lvbnMtZm9yLXRyYW5zYWN0aW9uYWwtbWVtb3J5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL3g4Ni1zcGVjaWZpYy1tZW1vcnktbW9kZWwtZXh0ZW5zaW9ucy1mb3ItdHJhbnNhY3Rpb25hbC1tZW1vcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2ViYWZhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy94ODYtc3BlY2lmaWMtbWVtb3J5LW1vZGVsLWV4dGVuc2lvbnMtZm9yLXRyYW5zYWN0aW9uYWwtbWVtb3J5Lmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+eDg2IHNwZWNpZmljIG1lbW9yeSBtb2RlbCBleHRlbnNpb25zIGZvciB0cmFuc2FjdGlvbmFsIG1lbW9yeSAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiIHRpdGxlPSJDIEV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyIgdGl0bGU9Il9fYXRvbWljIEJ1aWx0aW5zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyIgdGl0bGU9Ik9iamVjdCBTaXplIENoZWNraW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ing4Ni1zcGVjaWZpYy1tZW1vcnktbW9kZWwtZXh0ZW5zaW9ucy1mb3ItdHJhbnNhY3Rpb25hbC1tZW1vcnkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbCNPYmplY3QtU2l6ZS1DaGVja2luZyI+T2JqZWN0IFNpemUgQ2hlY2tpbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJfMDA1Zl8wMDVmYXRvbWljLUJ1aWx0aW5zLmh0bWwjZ190XzAwNWZfMDA1ZmF0b21pYy1CdWlsdGlucyI+X19hdG9taWMgQnVpbHRpbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDLUV4dGVuc2lvbnMuaHRtbCNDLUV4dGVuc2lvbnMiPkMgRXh0ZW5zaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuNTMgeDg2IHNwZWNpZmljIG1lbW9yeSBtb2RlbCBleHRlbnNpb25zIGZvciB0cmFuc2FjdGlvbmFsIG1lbW9yeTwvaDM+CisKKzxwPlRoZSBpMzg2IGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBhZGRpdGlvbmFsIG1lbW9yeSBvcmRlcmluZyBmbGFncwordG8gbWFyayBsb2NrIGNyaXRpY2FsIHNlY3Rpb25zIGZvciBoYXJkd2FyZSBsb2NrIGVsaXNpb24uIAorVGhlc2UgbXVzdCBiZSBzcGVjaWZpZWQgaW4gYWRkaXRpb24gdG8gYW4gZXhpc3RpbmcgbWVtb3J5IG1vZGVsIHRvCithdG9taWMgaW50cmluc2ljcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+X19BVE9NSUNfSExFX0FDUVVJUkU8L2NvZGU+PGRkPlN0YXJ0IGxvY2sgZWxpc2lvbiBvbiBhIGxvY2sgdmFyaWFibGUuIAorTWVtb3J5IG1vZGVsIG11c3QgYmUgPGNvZGU+X19BVE9NSUNfQUNRVUlSRTwvY29kZT4gb3Igc3Ryb25nZXIuIAorPGJyPjxkdD48Y29kZT5fX0FUT01JQ19ITEVfUkVMRUFTRTwvY29kZT48ZGQ+RW5kIGxvY2sgZWxpc2lvbiBvbiBhIGxvY2sgdmFyaWFibGUuIAorTWVtb3J5IG1vZGVsIG11c3QgYmUgPGNvZGU+X19BVE9NSUNfUkVMRUFTRTwvY29kZT4gb3Igc3Ryb25nZXIuIAorPC9kbD4KKworIDxwPldoZW4gYSBsb2NrIGFjcXVpcmUgZmFpbHMgaXQgaXMgcmVxdWlyZWQgZm9yIGdvb2QgcGVyZm9ybWFuY2UgdG8gYWJvcnQKK3RoZSB0cmFuc2FjdGlvbiBxdWlja2x5LiBUaGlzIGNhbiBiZSBkb25lIHdpdGggYSA8Y29kZT5fbW1fcGF1c2U8L2NvZGU+CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7aW1taW50cmluLmgmZ3Q7IC8vIEZvciBfbW1fcGF1c2UKKyAgICAgCisgICAgIGludCBsb2NrdmFyOworICAgICAKKyAgICAgLyogQWNxdWlyZSBsb2NrIHdpdGggbG9jayBlbGlzaW9uICovCisgICAgIHdoaWxlIChfX2F0b21pY19leGNoYW5nZV9uKCZhbXA7bG9ja3ZhciwgMSwgX19BVE9NSUNfQUNRVUlSRXxfX0FUT01JQ19ITEVfQUNRVUlSRSkpCisgICAgICAgICBfbW1fcGF1c2UoKTsgLyogQWJvcnQgZmFpbGVkIHRyYW5zYWN0aW9uICovCisgICAgIC4uLgorICAgICAvKiBGcmVlIGxvY2sgd2l0aCBsb2NrIGVsaXNpb24gKi8KKyAgICAgX19hdG9taWNfc3RvcmVfbigmYW1wO2xvY2t2YXIsIDAsIF9fQVRPTUlDX1JFTEVBU0V8X19BVE9NSUNfSExFX1JFTEVBU0UpOworPC9wcmU+CisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2djYy94ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MveDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhY2E4OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MveDg2XzAwMmQ2NC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+eDg2LTY0IE9wdGlvbnMgLSBVc2luZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQyk8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3VibW9kZWwtT3B0aW9ucy5odG1sI1N1Ym1vZGVsLU9wdGlvbnMiIHRpdGxlPSJTdWJtb2RlbCBPcHRpb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVnhXb3Jrcy1PcHRpb25zLmh0bWwjVnhXb3Jrcy1PcHRpb25zIiB0aXRsZT0iVnhXb3JrcyBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iWHN0b3JteTE2LU9wdGlvbnMuaHRtbCNYc3Rvcm15MTYtT3B0aW9ucyIgdGl0bGU9IlhzdG9ybXkxNiBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTg4LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ing4Ni02NC1PcHRpb25zIj48L2E+Cis8YSBuYW1lPSJ4ODZfMDAyZDY0LU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWHN0b3JteTE2LU9wdGlvbnMuaHRtbCNYc3Rvcm15MTYtT3B0aW9ucyI+WHN0b3JteTE2IE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWeFdvcmtzLU9wdGlvbnMuaHRtbCNWeFdvcmtzLU9wdGlvbnMiPlZ4V29ya3MgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN1Ym1vZGVsLU9wdGlvbnMuaHRtbCNTdWJtb2RlbC1PcHRpb25zIj5TdWJtb2RlbCBPcHRpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xNy40OSB4ODYtNjQgT3B0aW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXg4Nl8wMDJkNjQtb3B0aW9ucy0yMzA1Ij48L2E+CitUaGVzZSBhcmUgbGlzdGVkIHVuZGVyIFNlZSA8YSBocmVmPSJpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMuaHRtbCNpMzg2LWFuZC14ODZfMDAyZDY0LU9wdGlvbnMiPmkzODYgYW5kIHg4Ni02NCBPcHRpb25zPC9hPi4KKworIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nY2MvelNlcmllcy1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL3pTZXJpZXMtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzQ2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2NjL3pTZXJpZXMtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnpTZXJpZXMgT3B0aW9ucyAtIFVzaW5nIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVXNpbmcgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIChHQ0MpIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyIgdGl0bGU9IlN1Ym1vZGVsIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJYdGVuc2EtT3B0aW9ucy5odG1sI1h0ZW5zYS1PcHRpb25zIiB0aXRsZT0iWHRlbnNhIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5ODgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ielNlcmllcy1PcHRpb25zIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWHRlbnNhLU9wdGlvbnMuaHRtbCNYdGVuc2EtT3B0aW9ucyI+WHRlbnNhIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdWJtb2RlbC1PcHRpb25zLmh0bWwjU3VibW9kZWwtT3B0aW9ucyI+U3VibW9kZWwgT3B0aW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTcuNTIgelNlcmllcyBPcHRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtelNlcmllcy1vcHRpb25zLTIzMjIiPjwvYT4KK1RoZXNlIGFyZSBsaXN0ZWQgdW5kZXIgU2VlIDxhIGhyZWY9IlNfMDAyZjM5MC1hbmQtelNlcmllcy1PcHRpb25zLmh0bWwjU18wMDJmMzkwLWFuZC16U2VyaWVzLU9wdGlvbnMiPlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnM8L2E+LgorCisgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FCT1JULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUJPUlQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDFiOTAyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FCT1JULmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUJPUlQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW50cm9kdWN0aW9uLXRvLUludHJpbnNpY3MuaHRtbCNJbnRyb2R1Y3Rpb24tdG8tSW50cmluc2ljcyIgdGl0bGU9IkludHJvZHVjdGlvbiB0byBJbnRyaW5zaWNzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQUJTLmh0bWwjQUJTIiB0aXRsZT0iQUJTIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFCT1JUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFCUy5odG1sI0FCUyI+QUJTPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW50cm9kdWN0aW9uLXRvLUludHJpbnNpY3MuaHRtbCNJbnRyb2R1Y3Rpb24tdG8tSW50cmluc2ljcyI+SW50cm9kdWN0aW9uIHRvIEludHJpbnNpY3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMiA8Y29kZT5BQk9SVDwvY29kZT4gJm1kYXNoOyBBYm9ydCB0aGUgcHJvZ3JhbTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFCT1JULTM3MCI+PC9hPjxhIG5hbWU9ImluZGV4LXByb2dyYW0tdGVybWluYXRpb25fMDAyYy13aXRoLWNvcmUtZHVtcC0zNzEiPjwvYT48YSBuYW1lPSJpbmRleC10ZXJtaW5hdGUtcHJvZ3JhbV8wMDJjLXdpdGgtY29yZS1kdW1wLTM3MiI+PC9hPjxhIG5hbWU9ImluZGV4LWNvcmVfMDAyYy1kdW1wLTM3MyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkFCT1JUPC9jb2RlPiBjYXVzZXMgaW1tZWRpYXRlIHRlcm1pbmF0aW9uIG9mIHRoZSBwcm9ncmFtLiAgT24gb3BlcmF0aW5nCitzeXN0ZW1zIHRoYXQgc3VwcG9ydCBhIGNvcmUgZHVtcCwgPGNvZGU+QUJPUlQ8L2NvZGU+IHdpbGwgcHJvZHVjZSBhIGNvcmUgZHVtcC4gCitJdCB3aWxsIGFsc28gcHJpbnQgYSBiYWNrdHJhY2UsIHVubGVzcyA8Y29kZT4tZm5vLWJhY2t0cmFjZTwvY29kZT4gaXMgZ2l2ZW4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBBQk9SVDwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+RG9lcyBub3QgcmV0dXJuLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9hYm9ydAorICAgICAgICAgICAgaW50ZWdlciA6OiBpID0gMSwgaiA9IDIKKyAgICAgICAgICAgIGlmIChpIC89IGopIGNhbGwgYWJvcnQKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2Fib3J0Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iRVhJVC5odG1sI0VYSVQiPkVYSVQ8L2E+LCA8YSBocmVmPSJLSUxMLmh0bWwjS0lMTCI+S0lMTDwvYT4sIDxhIGhyZWY9IkJBQ0tUUkFDRS5odG1sI0JBQ0tUUkFDRSI+QkFDS1RSQUNFPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUJTLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUJTLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmOWMyNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BQlMuaHRtbApAQCAtMCwwICsxLDk4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BQlMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQUJPUlQuaHRtbCNBQk9SVCIgdGl0bGU9IkFCT1JUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQUNDRVNTLmh0bWwjQUNDRVNTIiB0aXRsZT0iQUNDRVNTIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFCUyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBQ0NFU1MuaHRtbCNBQ0NFU1MiPkFDQ0VTUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFCT1JULmh0bWwjQUJPUlQiPkFCT1JUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjMgPGNvZGU+QUJTPC9jb2RlPiAmbWRhc2g7IEFic29sdXRlIHZhbHVlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQUJTLTM3NCI+PC9hPjxhIG5hbWU9ImluZGV4LUNBQlMtMzc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtREFCUy0zNzYiPjwvYT48YSBuYW1lPSJpbmRleC1JQUJTLTM3NyI+PC9hPjxhIG5hbWU9ImluZGV4LVpBQlMtMzc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ0RBQlMtMzc5Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWJzb2x1dGUtdmFsdWUtMzgwIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QUJTKEEpPC9jb2RlPiBjb21wdXRlcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgPGNvZGU+QTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIsIGhhcyBvdmVybG9hZHMgdGhhdCBhcmUgR05VIGV4dGVuc2lvbnMKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQUJTKEEpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHNoYWxsIGJlIGFuIDxjb2RlPklOVEVHRVI8L2NvZGU+LAorPGNvZGU+UkVBTDwvY29kZT4sIG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQKK2tpbmQgYXMgdGhlIGFyZ3VtZW50IGV4Y2VwdCB0aGUgcmV0dXJuIHZhbHVlIGlzIDxjb2RlPlJFQUw8L2NvZGU+IGZvciBhCis8Y29kZT5DT01QTEVYPC9jb2RlPiBhcmd1bWVudC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfYWJzCisgICAgICAgICAgICBpbnRlZ2VyIDo6IGkgPSAtMQorICAgICAgICAgICAgcmVhbCA6OiB4ID0gLTEuZTAKKyAgICAgICAgICAgIGNvbXBsZXggOjogeiA9ICgtMS5lMCwwLmUwKQorICAgICAgICAgICAgaSA9IGFicyhpKQorICAgICAgICAgICAgeCA9IGFicyh4KQorICAgICAgICAgICAgeCA9IGFicyh6KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYWJzCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+QUJTKEEpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIEE8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNBQlMoQSk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg0KSBBPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5EQUJTKEEpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgQTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SUFCUyhBKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpIEE8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlpBQlMoQSk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KSBBPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNEQUJTKEEpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KSBBPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FDQ0VTUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FDQ0VTUy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjA4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUNDRVNTLmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFDQ0VTUyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBQlMuaHRtbCNBQlMiIHRpdGxlPSJBQlMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBQ0hBUi5odG1sI0FDSEFSIiB0aXRsZT0iQUNIQVIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQUNDRVNTIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFDSEFSLmh0bWwjQUNIQVIiPkFDSEFSPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQUJTLmh0bWwjQUJTIj5BQlM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNCA8Y29kZT5BQ0NFU1M8L2NvZGU+ICZtZGFzaDsgQ2hlY2tzIGZpbGUgYWNjZXNzIG1vZGVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQUNDRVNTLTM4MSI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtc3lzdGVtXzAwMmMtYWNjZXNzLW1vZGUtMzgyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QUNDRVNTKE5BTUUsIE1PREUpPC9jb2RlPiBjaGVja3Mgd2hldGhlciB0aGUgZmlsZSA8dmFyPk5BTUU8L3Zhcj4KK2V4aXN0cywgaXMgcmVhZGFibGUsIHdyaXRhYmxlIG9yIGV4ZWN1dGFibGUuIEV4Y2VwdCBmb3IgdGhlCitleGVjdXRhYmxlIGNoZWNrLCA8Y29kZT5BQ0NFU1M8L2NvZGU+IGNhbiBiZSByZXBsYWNlZCBieQorRm9ydHJhbiA5NSdzIDxjb2RlPklOUVVJUkU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEFDQ0VTUyhOQU1FLCBNT0RFKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk5BTUU8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNjYWxhciA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IG9mIGRlZmF1bHQga2luZCB3aXRoIHRoZQorZmlsZSBuYW1lLiBUYWlsaW5nIGJsYW5rIGFyZSBpZ25vcmVkIHVubGVzcyB0aGUgY2hhcmFjdGVyIDxjb2RlPmFjaGFyKDApPC9jb2RlPgoraXMgcHJlc2VudCwgdGhlbiBhbGwgY2hhcmFjdGVycyB1cCB0byBhbmQgZXhjbHVkaW5nIDxjb2RlPmFjaGFyKDApPC9jb2RlPiBhcmUKK3VzZWQgYXMgZmlsZSBuYW1lLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TU9ERTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2NhbGFyIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gb2YgZGVmYXVsdCBraW5kIHdpdGggdGhlCitmaWxlIGFjY2VzcyBtb2RlLCBtYXkgYmUgYW55IGNvbmNhdGVuYXRpb24gb2YgPGNvZGU+InIiPC9jb2RlPiAocmVhZGFibGUpLAorPGNvZGU+InciPC9jb2RlPiAod3JpdGFibGUpIGFuZCA8Y29kZT4ieCI8L2NvZGU+IChleGVjdXRhYmxlKSwgb3IgPGNvZGU+IiAiPC9jb2RlPiB0byBjaGVjaworZm9yIGV4aXN0ZW5jZS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5SZXR1cm5zIGEgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+LCB3aGljaCBpcyA8Y29kZT4wPC9jb2RlPiBpZiB0aGUgZmlsZSBpcworYWNjZXNzaWJsZSBpbiB0aGUgZ2l2ZW4gbW9kZTsgb3RoZXJ3aXNlIG9yIGlmIGFuIGludmFsaWQgYXJndW1lbnQKK2hhcyBiZWVuIGdpdmVuIGZvciA8Y29kZT5NT0RFPC9jb2RlPiB0aGUgdmFsdWUgPGNvZGU+MTwvY29kZT4gaXMgcmV0dXJuZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSBhY2Nlc3NfdGVzdAorICAgICAgICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgICAgICAgY2hhcmFjdGVyKGxlbj0qKSwgcGFyYW1ldGVyIDo6IGZpbGUgID0gJ3Rlc3QuZGF0JworICAgICAgICAgICAgY2hhcmFjdGVyKGxlbj0qKSwgcGFyYW1ldGVyIDo6IGZpbGUyID0gJ3Rlc3QuZGF0ICAnLy9hY2hhcigwKQorICAgICAgICAgICAgaWYoYWNjZXNzKGZpbGUsJyAnKSA9PSAwKSBwcmludCAqLCB0cmltKGZpbGUpLCcgaXMgZXhpc3RzJworICAgICAgICAgICAgaWYoYWNjZXNzKGZpbGUsJ3InKSA9PSAwKSBwcmludCAqLCB0cmltKGZpbGUpLCcgaXMgcmVhZGFibGUnCisgICAgICAgICAgICBpZihhY2Nlc3MoZmlsZSwndycpID09IDApIHByaW50ICosIHRyaW0oZmlsZSksJyBpcyB3cml0YWJsZScKKyAgICAgICAgICAgIGlmKGFjY2VzcyhmaWxlLCd4JykgPT0gMCkgcHJpbnQgKiwgdHJpbShmaWxlKSwnIGlzIGV4ZWN1dGFibGUnCisgICAgICAgICAgICBpZihhY2Nlc3MoZmlsZTIsJ3J3eCcpID09IDApICZhbXA7CisgICAgICAgICAgICAgIHByaW50ICosIHRyaW0oZmlsZTIpLCcgaXMgcmVhZGFibGUsIHdyaXRhYmxlIGFuZCBleGVjdXRhYmxlJworICAgICAgICAgIGVuZCBwcm9ncmFtIGFjY2Vzc190ZXN0Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BQ0hBUi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FDSEFSLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzExM2FmZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BQ0hBUi5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFDSEFSIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFDQ0VTUy5odG1sI0FDQ0VTUyIgdGl0bGU9IkFDQ0VTUyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFDT1MuaHRtbCNBQ09TIiB0aXRsZT0iQUNPUyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQ0hBUiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBQ09TLmh0bWwjQUNPUyI+QUNPUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFDQ0VTUy5odG1sI0FDQ0VTUyI+QUNDRVNTPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjUgPGNvZGU+QUNIQVI8L2NvZGU+ICZtZGFzaDsgQ2hhcmFjdGVyIGluIDxhY3JvbnltPkFTQ0lJPC9hY3JvbnltPiBjb2xsYXRpbmcgc2VxdWVuY2U8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1BQ0hBUi0zODMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGFjcm9ueW1fMDA3YkFTQ0lJXzAwN2QtY29sbGF0aW5nLXNlcXVlbmNlLTM4NCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbGxhdGluZy1zZXF1ZW5jZV8wMDJjLV8wMDQwYWNyb255bV8wMDdiQVNDSUlfMDA3ZC0zODUiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5BQ0hBUihJKTwvY29kZT4gcmV0dXJucyB0aGUgY2hhcmFjdGVyIGxvY2F0ZWQgYXQgcG9zaXRpb24gPGNvZGU+STwvY29kZT4KK2luIHRoZSA8YWNyb255bT5BU0NJSTwvYWNyb255bT4gY29sbGF0aW5nIHNlcXVlbmNlLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyLCB3aXRoIDx2YXI+S0lORDwvdmFyPiBhcmd1bWVudCBGb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEFDSEFSKEkgWywgS0lORF0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gd2l0aCBhIGxlbmd0aCBvZiBvbmUuIAorSWYgdGhlIDx2YXI+S0lORDwvdmFyPiBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9mIHRoZQorc3BlY2lmaWVkIGtpbmQgYW5kIG9mIHRoZSBkZWZhdWx0IGtpbmQgb3RoZXJ3aXNlLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9hY2hhcgorICAgICAgICAgICAgY2hhcmFjdGVyIGMKKyAgICAgICAgICAgIGMgPSBhY2hhcigzMikKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2FjaGFyCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+Tm90ZTwvZW0+OjxkZD5TZWUgPGEgaHJlZj0iSUNIQVIuaHRtbCNJQ0hBUiI+SUNIQVI8L2E+IGZvciBhIGRpc2N1c3Npb24gb2YgY29udmVydGluZyBiZXR3ZWVuIG51bWVyaWNhbCB2YWx1ZXMKK2FuZCBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9ucy4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDSEFSLmh0bWwjQ0hBUiI+Q0hBUjwvYT4sIDxhIGhyZWY9IklBQ0hBUi5odG1sI0lBQ0hBUiI+SUFDSEFSPC9hPiwgPGEgaHJlZj0iSUNIQVIuaHRtbCNJQ0hBUiI+SUNIQVI8L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BQ09TLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUNPUy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMGQ2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUNPUy5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFDT1MgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQUNIQVIuaHRtbCNBQ0hBUiIgdGl0bGU9IkFDSEFSIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQUNPU0guaHRtbCNBQ09TSCIgdGl0bGU9IkFDT1NIIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFDT1MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUNPU0guaHRtbCNBQ09TSCI+QUNPU0g8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBQ0hBUi5odG1sI0FDSEFSIj5BQ0hBUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC42IDxjb2RlPkFDT1M8L2NvZGU+ICZtZGFzaDsgQXJjY29zaW5lIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQUNPUy0zODYiPjwvYT48YSBuYW1lPSJpbmRleC1EQUNPUy0zODciPjwvYT48YSBuYW1lPSJpbmRleC10cmlnb25vbWV0cmljLWZ1bmN0aW9uXzAwMmMtY29zaW5lXzAwMmMtaW52ZXJzZS0zODgiPjwvYT48YSBuYW1lPSJpbmRleC1jb3NpbmVfMDAyYy1pbnZlcnNlLTM4OSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkFDT1MoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBhcmNjb3NpbmUgb2YgPHZhcj5YPC92YXI+IChpbnZlcnNlIG9mIDxjb2RlPkNPUyhYKTwvY29kZT4pLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyLCBmb3IgYSBjb21wbGV4IGFyZ3VtZW50IEZvcnRyYW4gMjAwOCBvciBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBBQ09TKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgZWl0aGVyIGJlIDxjb2RlPlJFQUw8L2NvZGU+IHdpdGggYSBtYWduaXR1ZGUgdGhhdCBpcworbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG9uZSAtIG9yIHRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uIAorVGhlIHJlYWwgcGFydCBvZiB0aGUgcmVzdWx0IGlzIGluIHJhZGlhbnMgYW5kIGxpZXMgaW4gdGhlIHJhbmdlCiswIFxsZXEgXFJlIFxhY29zKHgpIFxsZXEgXHBpLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9hY29zCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAwLjg2Nl84CisgICAgICAgICAgICB4ID0gYWNvcyh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYWNvcworPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5BQ09TKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRBQ09TKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+SW52ZXJzZSBmdW5jdGlvbjogPGEgaHJlZj0iQ09TLmh0bWwjQ09TIj5DT1M8L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BQ09TSC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FDT1NILmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3YjA1YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BQ09TSC5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFDT1NIIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFDT1MuaHRtbCNBQ09TIiB0aXRsZT0iQUNPUyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFESlVTVEwuaHRtbCNBREpVU1RMIiB0aXRsZT0iQURKVVNUTCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBQ09TSCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBREpVU1RMLmh0bWwjQURKVVNUTCI+QURKVVNUTDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFDT1MuaHRtbCNBQ09TIj5BQ09TPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjcgPGNvZGU+QUNPU0g8L2NvZGU+ICZtZGFzaDsgSW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZSBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFDT1NILTM5MCI+PC9hPjxhIG5hbWU9ImluZGV4LURBQ09TSC0zOTEiPjwvYT48YSBuYW1lPSJpbmRleC1hcmVhLWh5cGVyYm9saWMtY29zaW5lLTM5MiI+PC9hPjxhIG5hbWU9ImluZGV4LWludmVyc2UtaHlwZXJib2xpYy1jb3NpbmUtMzkzIj48L2E+PGEgbmFtZT0iaW5kZXgtaHlwZXJib2xpYy1mdW5jdGlvbl8wMDJjLWNvc2luZV8wMDJjLWludmVyc2UtMzk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29zaW5lXzAwMmMtaHlwZXJib2xpY18wMDJjLWludmVyc2UtMzk1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QUNPU0goWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lIG9mIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEFDT1NIKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4gb3IgPGNvZGU+Q09NUExFWDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBoYXMgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uIElmIDx2YXI+WDwvdmFyPiBpcworY29tcGxleCwgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSByZXN1bHQgaXMgaW4gcmFkaWFucyBhbmQgbGllcyBiZXR3ZWVuCisgMCBcbGVxIFxJbSBcYWNvc2goeCkgXGxlcSBccGkuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X2Fjb3NoCisgICAgICAgICAgICBSRUFMKDgpLCBESU1FTlNJT04oMykgOjogeCA9ICgvIDEuMCwgMi4wLCAzLjAgLykKKyAgICAgICAgICAgIFdSSVRFICgqLCopIEFDT1NIKHgpCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRBQ09TSChYKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+SW52ZXJzZSBmdW5jdGlvbjogPGEgaHJlZj0iQ09TSC5odG1sI0NPU0giPkNPU0g8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQURKVVNUTC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FESlVTVEwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2JiMGEyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FESlVTVEwuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BREpVU1RMIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFDT1NILmh0bWwjQUNPU0giIHRpdGxlPSJBQ09TSCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFESlVTVFIuaHRtbCNBREpVU1RSIiB0aXRsZT0iQURKVVNUUiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBREpVU1RMIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFESlVTVFIuaHRtbCNBREpVU1RSIj5BREpVU1RSPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQUNPU0guaHRtbCNBQ09TSCI+QUNPU0g8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguOCA8Y29kZT5BREpVU1RMPC9jb2RlPiAmbWRhc2g7IExlZnQgYWRqdXN0IGEgc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQURKVVNUTC0zOTYiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmdfMDAyYy1hZGp1c3QtbGVmdC0zOTciPjwvYT48YSBuYW1lPSJpbmRleC1hZGp1c3Qtc3RyaW5nLTM5OCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkFESlVTVEwoU1RSSU5HKTwvY29kZT4gd2lsbCBsZWZ0IGFkanVzdCBhIHN0cmluZyBieSByZW1vdmluZyBsZWFkaW5nIHNwYWNlcy4gCitTcGFjZXMgYXJlIGluc2VydGVkIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyBhcyBuZWVkZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5MCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQURKVVNUTChTVFJJTkcpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RSSU5HPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IGFuZCBvZiB0aGUgc2FtZSBraW5kIGFzCis8dmFyPlNUUklORzwvdmFyPiB3aGVyZSBsZWFkaW5nIHNwYWNlcyBhcmUgcmVtb3ZlZCBhbmQgdGhlIHNhbWUgbnVtYmVyIG9mCitzcGFjZXMgYXJlIGluc2VydGVkIG9uIHRoZSBlbmQgb2YgPHZhcj5TVFJJTkc8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2FkanVzdGwKKyAgICAgICAgICAgIGNoYXJhY3RlcihsZW49MjApIDo6IHN0ciA9ICcgICBnZm9ydHJhbicKKyAgICAgICAgICAgIHN0ciA9IGFkanVzdGwoc3RyKQorICAgICAgICAgICAgcHJpbnQgKiwgc3RyCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9hZGp1c3RsCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQURKVVNUUi5odG1sI0FESlVTVFIiPkFESlVTVFI8L2E+LCA8YSBocmVmPSJUUklNLmh0bWwjVFJJTSI+VFJJTTwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BREpVU1RSLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQURKVVNUUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZWU3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQURKVVNUUi5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFESlVTVFIgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQURKVVNUTC5odG1sI0FESlVTVEwiIHRpdGxlPSJBREpVU1RMIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQUlNQUcuaHRtbCNBSU1BRyIgdGl0bGU9IkFJTUFHIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFESlVTVFIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUlNQUcuaHRtbCNBSU1BRyI+QUlNQUc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBREpVU1RMLmh0bWwjQURKVVNUTCI+QURKVVNUTDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC45IDxjb2RlPkFESlVTVFI8L2NvZGU+ICZtZGFzaDsgUmlnaHQgYWRqdXN0IGEgc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQURKVVNUUi0zOTkiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmdfMDAyYy1hZGp1c3QtcmlnaHQtNDAwIj48L2E+PGEgbmFtZT0iaW5kZXgtYWRqdXN0LXN0cmluZy00MDEiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5BREpVU1RSKFNUUklORyk8L2NvZGU+IHdpbGwgcmlnaHQgYWRqdXN0IGEgc3RyaW5nIGJ5IHJlbW92aW5nIHRyYWlsaW5nIHNwYWNlcy4gCitTcGFjZXMgYXJlIGluc2VydGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIGFzIG5lZWRlZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBBREpVU1RSKFNUUklORyk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVFI8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gYW5kIG9mIHRoZSBzYW1lIGtpbmQgYXMKKzx2YXI+U1RSSU5HPC92YXI+IHdoZXJlIHRyYWlsaW5nIHNwYWNlcyBhcmUgcmVtb3ZlZCBhbmQgdGhlIHNhbWUgbnVtYmVyIG9mCitzcGFjZXMgYXJlIGluc2VydGVkIGF0IHRoZSBzdGFydCBvZiA8dmFyPlNUUklORzwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfYWRqdXN0cgorICAgICAgICAgICAgY2hhcmFjdGVyKGxlbj0yMCkgOjogc3RyID0gJ2dmb3J0cmFuJworICAgICAgICAgICAgc3RyID0gYWRqdXN0cihzdHIpCisgICAgICAgICAgICBwcmludCAqLCBzdHIKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2FkanVzdHIKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJBREpVU1RMLmh0bWwjQURKVVNUTCI+QURKVVNUTDwvYT4sIDxhIGhyZWY9IlRSSU0uaHRtbCNUUklNIj5UUklNPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FJTUFHLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUlNQUcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBmMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FJTUFHLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUlNQUcgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQURKVVNUUi5odG1sI0FESlVTVFIiIHRpdGxlPSJBREpVU1RSIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQUlOVC5odG1sI0FJTlQiIHRpdGxlPSJBSU5UIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFJTUFHIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFJTlQuaHRtbCNBSU5UIj5BSU5UPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQURKVVNUUi5odG1sI0FESlVTVFIiPkFESlVTVFI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTAgPGNvZGU+QUlNQUc8L2NvZGU+ICZtZGFzaDsgSW1hZ2luYXJ5IHBhcnQgb2YgY29tcGxleCBudW1iZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1BSU1BRy00MDIiPjwvYT48YSBuYW1lPSJpbmRleC1ESU1BRy00MDMiPjwvYT48YSBuYW1lPSJpbmRleC1JTUFHLTQwNCI+PC9hPjxhIG5hbWU9ImluZGV4LUlNQUdQQVJULTQwNSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbXBsZXgtbnVtYmVyc18wMDJjLWltYWdpbmFyeS1wYXJ0LTQwNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkFJTUFHKFopPC9jb2RlPiB5aWVsZHMgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGNvbXBsZXggYXJndW1lbnQgPGNvZGU+WjwvY29kZT4uIAorVGhlIDxjb2RlPklNQUcoWik8L2NvZGU+IGFuZCA8Y29kZT5JTUFHUEFSVChaKTwvY29kZT4gaW50cmluc2ljIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmc3Nzwvc3Bhbj48L3NhbXA+LCBhbmQgdGhlaXIgdXNlIGluIG5ldyBjb2RlIGlzCitzdHJvbmdseSBkaXNjb3VyYWdlZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlciwgaGFzIG92ZXJsb2FkcyB0aGF0IGFyZSBHTlUgZXh0ZW5zaW9ucworCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBBSU1BRyhaKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlo8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCBzaGFsbCBiZSA8Y29kZT5DT01QTEVYPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+UkVBTDwvY29kZT4gd2l0aCB0aGUKK2tpbmQgdHlwZSBwYXJhbWV0ZXIgb2YgdGhlIGFyZ3VtZW50LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9haW1hZworICAgICAgICAgICAgY29tcGxleCg0KSB6NAorICAgICAgICAgICAgY29tcGxleCg4KSB6OAorICAgICAgICAgICAgejQgPSBjbXBseCgxLmUwXzQsIDAuZTBfNCkKKyAgICAgICAgICAgIHo4ID0gY21wbHgoMC5lMF84LCAxLmUwXzgpCisgICAgICAgICAgICBwcmludCAqLCBhaW1hZyh6NCksIGRpbWFnKHo4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYWltYWcKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+QUlNQUcoWik8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYIFo8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMPC9jb2RlPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRJTUFHKFopPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KSBaPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5HTlUgZXh0ZW5zaW9uCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTUFHKFopPC9jb2RlPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVggWjwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUw8L2NvZGU+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SU1BR1BBUlQoWik8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYIFo8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMPC9jb2RlPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FJTlQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BSU5ULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3MmQzMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BSU5ULmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUlOVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBSU1BRy5odG1sI0FJTUFHIiB0aXRsZT0iQUlNQUciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBTEFSTS5odG1sI0FMQVJNIiB0aXRsZT0iQUxBUk0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQUlOVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBTEFSTS5odG1sI0FMQVJNIj5BTEFSTTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFJTUFHLmh0bWwjQUlNQUciPkFJTUFHPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjExIDxjb2RlPkFJTlQ8L2NvZGU+ICZtZGFzaDsgVHJ1bmNhdGUgdG8gYSB3aG9sZSBudW1iZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1BSU5ULTQwNyI+PC9hPjxhIG5hbWU9ImluZGV4LURJTlQtNDA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmxvb3ItNDA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtcm91bmRpbmdfMDAyYy1mbG9vci00MTAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5BSU5UKEEgWywgS0lORF0pPC9jb2RlPiB0cnVuY2F0ZXMgaXRzIGFyZ3VtZW50IHRvIGEgd2hvbGUgbnVtYmVyLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEFJTlQoQSBbLCBLSU5EXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BPC92YXI+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+IHdpdGggdGhlIGtpbmQgdHlwZSBwYXJhbWV0ZXIgb2YgdGhlCithcmd1bWVudCBpZiB0aGUgb3B0aW9uYWwgPHZhcj5LSU5EPC92YXI+IGlzIGFic2VudDsgb3RoZXJ3aXNlLCB0aGUga2luZAordHlwZSBwYXJhbWV0ZXIgd2lsbCBiZSBnaXZlbiBieSA8dmFyPktJTkQ8L3Zhcj4uICBJZiB0aGUgbWFnbml0dWRlIG9mCis8dmFyPlg8L3Zhcj4gaXMgbGVzcyB0aGFuIG9uZSwgPGNvZGU+QUlOVChYKTwvY29kZT4gcmV0dXJucyB6ZXJvLiAgSWYgdGhlCittYWduaXR1ZGUgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIG9uZSB0aGVuIGl0IHJldHVybnMgdGhlIGxhcmdlc3QKK3dob2xlIG51bWJlciB0aGF0IGRvZXMgbm90IGV4Y2VlZCBpdHMgbWFnbml0dWRlLiAgVGhlIHNpZ24gaXMgdGhlIHNhbWUKK2FzIHRoZSBzaWduIG9mIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfYWludAorICAgICAgICAgICAgcmVhbCg0KSB4NAorICAgICAgICAgICAgcmVhbCg4KSB4OAorICAgICAgICAgICAgeDQgPSAxLjIzNEUwXzQKKyAgICAgICAgICAgIHg4ID0gNC4zMjFfOAorICAgICAgICAgICAgcHJpbnQgKiwgYWludCh4NCksIGRpbnQoeDgpCisgICAgICAgICAgICB4OCA9IGFpbnQoeDQsOCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2FpbnQKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+QUlOVChBKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgQTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5ESU5UKEEpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBBPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FMQVJNLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUxBUk0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTVmMjMzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FMQVJNLmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUxBUk0gLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQUlOVC5odG1sI0FJTlQiIHRpdGxlPSJBSU5UIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQUxMLmh0bWwjQUxMIiB0aXRsZT0iQUxMIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFMQVJNIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFMTC5odG1sI0FMTCI+QUxMPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQUlOVC5odG1sI0FJTlQiPkFJTlQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTIgPGNvZGU+QUxBUk08L2NvZGU+ICZtZGFzaDsgRXhlY3V0ZSBhIHJvdXRpbmUgYWZ0ZXIgYSBnaXZlbiBkZWxheTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFMQVJNLTQxMSI+PC9hPjxhIG5hbWU9ImluZGV4LWRlbGF5ZWQtZXhlY3V0aW9uLTQxMiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkFMQVJNKFNFQ09ORFMsIEhBTkRMRVIgWywgU1RBVFVTXSk8L2NvZGU+IGNhdXNlcyBleHRlcm5hbCBzdWJyb3V0aW5lIDx2YXI+SEFORExFUjwvdmFyPgordG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgYSBkZWxheSBvZiA8dmFyPlNFQ09ORFM8L3Zhcj4gYnkgdXNpbmcgPGNvZGU+YWxhcm0oMik8L2NvZGU+IHRvCitzZXQgdXAgYSBzaWduYWwgYW5kIDxjb2RlPnNpZ25hbCgyKTwvY29kZT4gdG8gY2F0Y2ggaXQuIElmIDx2YXI+U1RBVFVTPC92YXI+IGlzCitzdXBwbGllZCwgaXQgd2lsbCBiZSByZXR1cm5lZCB3aXRoIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyByZW1haW5pbmcgdW50aWwKK2FueSBwcmV2aW91c2x5IHNjaGVkdWxlZCBhbGFybSB3YXMgZHVlIHRvIGJlIGRlbGl2ZXJlZCwgb3IgemVybyBpZiB0aGVyZQord2FzIG5vIHByZXZpb3VzbHkgc2NoZWR1bGVkIGFsYXJtLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPkNBTEwgQUxBUk0oU0VDT05EUywgSEFORExFUiBbLCBTVEFUVVNdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNFQ09ORFM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCBzaGFsbCBiZSBhIHNjYWxhcgorPGNvZGU+SU5URUdFUjwvY29kZT4uIEl0IGlzIDxjb2RlPklOVEVOVChJTik8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+SEFORExFUjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2lnbmFsIGhhbmRsZXIgKDxjb2RlPklOVEVHRVIgRlVOQ1RJT048L2NvZGU+IG9yCis8Y29kZT5TVUJST1VUSU5FPC9jb2RlPikgb3IgZHVtbXkvZ2xvYmFsIDxjb2RlPklOVEVHRVI8L2NvZGU+IHNjYWxhci4gVGhlIHNjYWxhcgordmFsdWVzIG1heSBiZSBlaXRoZXIgPGNvZGU+U0lHX0lHTj0xPC9jb2RlPiB0byBpZ25vcmUgdGhlIGFsYXJtIGdlbmVyYXRlZAorb3IgPGNvZGU+U0lHX0RGTD0wPC9jb2RlPiB0byBzZXQgdGhlIGRlZmF1bHQgYWN0aW9uLiBJdCBpcyA8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgPHZhcj5TVEFUVVM8L3Zhcj4gc2hhbGwgYmUgYSBzY2FsYXIKK3ZhcmlhYmxlIG9mIHRoZSBkZWZhdWx0IDxjb2RlPklOVEVHRVI8L2NvZGU+IGtpbmQuIEl0IGlzIDxjb2RlPklOVEVOVChPVVQpPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9hbGFybQorICAgICAgICAgICAgZXh0ZXJuYWwgaGFuZGxlcl9wcmludAorICAgICAgICAgICAgaW50ZWdlciBpCisgICAgICAgICAgICBjYWxsIGFsYXJtICgzLCBoYW5kbGVyX3ByaW50LCBpKQorICAgICAgICAgICAgcHJpbnQgKiwgaQorICAgICAgICAgICAgY2FsbCBzbGVlcCgxMCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2FsYXJtCis8L3ByZT4KKyAgICAgPHA+VGhpcyB3aWxsIGNhdXNlIHRoZSBleHRlcm5hbCByb3V0aW5lIDx2YXI+aGFuZGxlcl9wcmludDwvdmFyPiB0byBiZSBjYWxsZWQKK2FmdGVyIDMgc2Vjb25kcy4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUxMLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUxMLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwYjk3OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BTEwuaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QUxMIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFMQVJNLmh0bWwjQUxBUk0iIHRpdGxlPSJBTEFSTSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFMTE9DQVRFRC5odG1sI0FMTE9DQVRFRCIgdGl0bGU9IkFMTE9DQVRFRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBTEwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQUxMT0NBVEVELmh0bWwjQUxMT0NBVEVEIj5BTExPQ0FURUQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBTEFSTS5odG1sI0FMQVJNIj5BTEFSTTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMyA8Y29kZT5BTEw8L2NvZGU+ICZtZGFzaDsgQWxsIHZhbHVlcyBpbiA8dmFyPk1BU0s8L3Zhcj4gYWxvbmcgPHZhcj5ESU08L3Zhcj4gYXJlIHRydWU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1BTEwtNDEzIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1hcHBseS1jb25kaXRpb24tNDE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1jb25kaXRpb24tdGVzdGluZy00MTUiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5BTEwoTUFTSyBbLCBESU1dKTwvY29kZT4gZGV0ZXJtaW5lcyBpZiBhbGwgdGhlIHZhbHVlcyBhcmUgdHJ1ZSBpbiA8dmFyPk1BU0s8L3Zhcj4KK2luIHRoZSBhcnJheSBhbG9uZyBkaW1lbnNpb24gPHZhcj5ESU08L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEFMTChNQVNLIFssIERJTV0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHNoYWxsIGJlIDxjb2RlPkxPR0lDQUw8L2NvZGU+IGFuZAoraXQgc2hhbGwgbm90IGJlIHNjYWxhci4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkRJTTwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgPHZhcj5ESU08L3Zhcj4gc2hhbGwgYmUgYSBzY2FsYXIgaW50ZWdlcgord2l0aCBhIHZhbHVlIHRoYXQgbGllcyBiZXR3ZWVuIG9uZSBhbmQgdGhlIHJhbmsgb2YgPHZhcj5NQVNLPC92YXI+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPjxjb2RlPkFMTChNQVNLKTwvY29kZT4gcmV0dXJucyBhIHNjYWxhciB2YWx1ZSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+IHdoZXJlCit0aGUga2luZCB0eXBlIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBhcyB0aGUga2luZCB0eXBlIHBhcmFtZXRlciBvZgorPHZhcj5NQVNLPC92YXI+LiAgSWYgPHZhcj5ESU08L3Zhcj4gaXMgcHJlc2VudCwgdGhlbiA8Y29kZT5BTEwoTUFTSywgRElNKTwvY29kZT4gcmV0dXJucworYW4gYXJyYXkgd2l0aCB0aGUgcmFuayBvZiA8dmFyPk1BU0s8L3Zhcj4gbWludXMgMS4gIFRoZSBzaGFwZSBpcyBkZXRlcm1pbmVkIGZyb20KK3RoZSBzaGFwZSBvZiA8dmFyPk1BU0s8L3Zhcj4gd2hlcmUgdGhlIDx2YXI+RElNPC92YXI+IGRpbWVuc2lvbiBpcyBlbGlkZWQuCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+KEEpPGRkPjxjb2RlPkFMTChNQVNLKTwvY29kZT4gaXMgdHJ1ZSBpZiBhbGwgZWxlbWVudHMgb2YgPHZhcj5NQVNLPC92YXI+IGFyZSB0cnVlLiAKK0l0IGFsc28gaXMgdHJ1ZSBpZiA8dmFyPk1BU0s8L3Zhcj4gaGFzIHplcm8gc2l6ZTsgb3RoZXJ3aXNlLCBpdCBpcyBmYWxzZS4gCis8YnI+PGR0PihCKTxkZD5JZiB0aGUgcmFuayBvZiA8dmFyPk1BU0s8L3Zhcj4gaXMgb25lLCB0aGVuIDxjb2RlPkFMTChNQVNLLERJTSk8L2NvZGU+IGlzIGVxdWl2YWxlbnQKK3RvIDxjb2RlPkFMTChNQVNLKTwvY29kZT4uICBJZiB0aGUgcmFuayBpcyBncmVhdGVyIHRoYW4gb25lLCB0aGVuIDxjb2RlPkFMTChNQVNLLERJTSk8L2NvZGU+CitpcyBkZXRlcm1pbmVkIGJ5IGFwcGx5aW5nIDxjb2RlPkFMTDwvY29kZT4gdG8gdGhlIGFycmF5IHNlY3Rpb25zLiAKKzwvZGw+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2FsbAorICAgICAgICAgICAgbG9naWNhbCBsCisgICAgICAgICAgICBsID0gYWxsKCgvLnRydWUuLCAudHJ1ZS4sIC50cnVlLi8pKQorICAgICAgICAgICAgcHJpbnQgKiwgbAorICAgICAgICAgICAgY2FsbCBzZWN0aW9uCisgICAgICAgICAgICBjb250YWlucworICAgICAgICAgICAgICBzdWJyb3V0aW5lIHNlY3Rpb24KKyAgICAgICAgICAgICAgICBpbnRlZ2VyIGEoMiwzKSwgYigyLDMpCisgICAgICAgICAgICAgICAgYSA9IDEKKyAgICAgICAgICAgICAgICBiID0gMQorICAgICAgICAgICAgICAgIGIoMiwyKSA9IDIKKyAgICAgICAgICAgICAgICBwcmludCAqLCBhbGwoYSAuZXEuIGIsIDEpCisgICAgICAgICAgICAgICAgcHJpbnQgKiwgYWxsKGEgLmVxLiBiLCAyKQorICAgICAgICAgICAgICBlbmQgc3Vicm91dGluZSBzZWN0aW9uCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9hbGwKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUxMT0NBVEVELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQUxMT0NBVEVELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1ZTI3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BTExPQ0FURUQuaHRtbApAQCAtMCwwICsxLDkxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BTExPQ0FURUQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQUxMLmh0bWwjQUxMIiB0aXRsZT0iQUxMIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQU5ELmh0bWwjQU5EIiB0aXRsZT0iQU5EIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFMTE9DQVRFRCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBTkQuaHRtbCNBTkQiPkFORDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFMTC5odG1sI0FMTCI+QUxMPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE0IDxjb2RlPkFMTE9DQVRFRDwvY29kZT4gJm1kYXNoOyBTdGF0dXMgb2YgYW4gYWxsb2NhdGFibGUgZW50aXR5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQUxMT0NBVEVELTQxNiI+PC9hPjxhIG5hbWU9ImluZGV4LWFsbG9jYXRpb25fMDAyYy1zdGF0dXMtNDE3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QUxMT0NBVEVEKEFSUkFZKTwvY29kZT4gYW5kIDxjb2RlPkFMTE9DQVRFRChTQ0FMQVIpPC9jb2RlPiBjaGVjayB0aGUgYWxsb2NhdGlvbgorc3RhdHVzIG9mIDx2YXI+QVJSQVk8L3Zhcj4gYW5kIDx2YXI+U0NBTEFSPC92YXI+LCByZXNwZWN0aXZlbHkuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIuICBOb3RlLCB0aGUgPGNvZGU+U0NBTEFSPTwvY29kZT4ga2V5d29yZCBhbmQgYWxsb2NhdGFibGUKK3NjYWxhciBlbnRpdGllcyBhcmUgYXZhaWxhYmxlIGluIEZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IEFMTE9DQVRFRChBUlJBWSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBBTExPQ0FURUQoU0NBTEFSKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QVJSQVk8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSBhcmd1bWVudCBzaGFsbCBiZSBhbiA8Y29kZT5BTExPQ0FUQUJMRTwvY29kZT4gYXJyYXkuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TQ0FMQVI8L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIGFyZ3VtZW50IHNoYWxsIGJlIGFuIDxjb2RlPkFMTE9DQVRBQkxFPC9jb2RlPiBzY2FsYXIuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBhIHNjYWxhciA8Y29kZT5MT0dJQ0FMPC9jb2RlPiB3aXRoIHRoZSBkZWZhdWx0IGxvZ2ljYWwKK2tpbmQgdHlwZSBwYXJhbWV0ZXIuICBJZiB0aGUgYXJndW1lbnQgaXMgYWxsb2NhdGVkLCB0aGVuIHRoZSByZXN1bHQgaXMKKzxjb2RlPi5UUlVFLjwvY29kZT47IG90aGVyd2lzZSwgaXQgcmV0dXJucyA8Y29kZT4uRkFMU0UuPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9hbGxvY2F0ZWQKKyAgICAgICAgICAgIGludGVnZXIgOjogaSA9IDQKKyAgICAgICAgICAgIHJlYWwoNCksIGFsbG9jYXRhYmxlIDo6IHgoOikKKyAgICAgICAgICAgIGlmICgubm90LiBhbGxvY2F0ZWQoeCkpIGFsbG9jYXRlKHgoaSkpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9hbGxvY2F0ZWQKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQU5ELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQU5ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExNzE3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BTkQuaHRtbApAQCAtMCwwICsxLDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BTkQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQUxMT0NBVEVELmh0bWwjQUxMT0NBVEVEIiB0aXRsZT0iQUxMT0NBVEVEIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQU5JTlQuaHRtbCNBTklOVCIgdGl0bGU9IkFOSU5UIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFORCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBTklOVC5odG1sI0FOSU5UIj5BTklOVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFMTE9DQVRFRC5odG1sI0FMTE9DQVRFRCI+QUxMT0NBVEVEPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE1IDxjb2RlPkFORDwvY29kZT4gJm1kYXNoOyBCaXR3aXNlIGxvZ2ljYWwgQU5EPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQU5ELTQxOCI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHdpc2UtbG9naWNhbC1hbmQtNDE5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9naWNhbC1hbmRfMDAyYy1iaXR3aXNlLTQyMCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkJpdHdpc2UgbG9naWNhbCA8Y29kZT5BTkQ8L2NvZGU+LgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIHJvdXRpbmUgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKK0dOVSBGb3J0cmFuIDc3LiAgRm9yIGludGVnZXIgYXJndW1lbnRzLCBwcm9ncmFtbWVycyBzaG91bGQgY29uc2lkZXIKK3RoZSB1c2Ugb2YgdGhlIDxhIGhyZWY9IklBTkQuaHRtbCNJQU5EIj5JQU5EPC9hPiBpbnRyaW5zaWMgZGVmaW5lZCBieSB0aGUgRm9ydHJhbiBzdGFuZGFyZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQU5EKEksIEopPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgZWl0aGVyIGEgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+Cit0eXBlIG9yIGEgc2NhbGFyIDxjb2RlPkxPR0lDQUw8L2NvZGU+IHR5cGUuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5KPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSB0aGUgc2FtZSBhcyB0aGUgdHlwZSBvZiA8dmFyPkk8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB0eXBlIGlzIGVpdGhlciBhIHNjYWxhciA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvciBhIHNjYWxhcgorPGNvZGU+TE9HSUNBTDwvY29kZT4uICBJZiB0aGUga2luZCB0eXBlIHBhcmFtZXRlcnMgZGlmZmVyLCB0aGVuIHRoZQorc21hbGxlciBraW5kIHR5cGUgaXMgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gbGFyZ2VyIGtpbmQsIGFuZCB0aGUKK3JldHVybiBoYXMgdGhlIGxhcmdlciBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9hbmQKKyAgICAgICAgICAgIExPR0lDQUwgOjogVCA9IC5UUlVFLiwgRiA9IC5GQUxTRS4KKyAgICAgICAgICAgIElOVEVHRVIgOjogYSwgYgorICAgICAgICAgICAgREFUQSBhIC8gWidGJyAvLCBiIC8gWiczJyAvCisgICAgICAgICAgCisgICAgICAgICAgICBXUklURSAoKiwqKSBBTkQoVCwgVCksIEFORChULCBGKSwgQU5EKEYsIFQpLCBBTkQoRiwgRikKKyAgICAgICAgICAgIFdSSVRFICgqLCopIEFORChhLCBiKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBlbGVtZW50YWwgZnVuY3Rpb246IDxhIGhyZWY9IklBTkQuaHRtbCNJQU5EIj5JQU5EPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FOSU5ULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQU5JTlQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWJhOGRjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FOSU5ULmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QU5JTlQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQU5ELmh0bWwjQU5EIiB0aXRsZT0iQU5EIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQU5ZLmh0bWwjQU5ZIiB0aXRsZT0iQU5ZIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFOSU5UIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFOWS5odG1sI0FOWSI+QU5ZPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQU5ELmh0bWwjQU5EIj5BTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTYgPGNvZGU+QU5JTlQ8L2NvZGU+ICZtZGFzaDsgTmVhcmVzdCB3aG9sZSBudW1iZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1BTklOVC00MjEiPjwvYT48YSBuYW1lPSJpbmRleC1ETklOVC00MjIiPjwvYT48YSBuYW1lPSJpbmRleC1jZWlsaW5nLTQyMyI+PC9hPjxhIG5hbWU9ImluZGV4LXJvdW5kaW5nXzAwMmMtY2VpbGluZy00MjQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5BTklOVChBIFssIEtJTkRdKTwvY29kZT4gcm91bmRzIGl0cyBhcmd1bWVudCB0byB0aGUgbmVhcmVzdCB3aG9sZSBudW1iZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQU5JTlQoQSBbLCBLSU5EXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BPC92YXI+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIHJlYWwgd2l0aCB0aGUga2luZCB0eXBlIHBhcmFtZXRlciBvZiB0aGUKK2FyZ3VtZW50IGlmIHRoZSBvcHRpb25hbCA8dmFyPktJTkQ8L3Zhcj4gaXMgYWJzZW50OyBvdGhlcndpc2UsIHRoZSBraW5kCit0eXBlIHBhcmFtZXRlciB3aWxsIGJlIGdpdmVuIGJ5IDx2YXI+S0lORDwvdmFyPi4gIElmIDx2YXI+QTwvdmFyPiBpcyBncmVhdGVyIHRoYW4KK3plcm8sIDxjb2RlPkFOSU5UKEEpPC9jb2RlPiByZXR1cm5zIDxjb2RlPkFJTlQoWCswLjUpPC9jb2RlPi4gIElmIDx2YXI+QTwvdmFyPiBpcworbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gdGhlbiBpdCByZXR1cm5zIDxjb2RlPkFJTlQoWC0wLjUpPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfYW5pbnQKKyAgICAgICAgICAgIHJlYWwoNCkgeDQKKyAgICAgICAgICAgIHJlYWwoOCkgeDgKKyAgICAgICAgICAgIHg0ID0gMS4yMzRFMF80CisgICAgICAgICAgICB4OCA9IDQuMzIxXzgKKyAgICAgICAgICAgIHByaW50ICosIGFuaW50KHg0KSwgZG5pbnQoeDgpCisgICAgICAgICAgICB4OCA9IGFuaW50KHg0LDgpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9hbmludAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+QUlOVChBKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIEE8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+RE5JTlQoQSk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIEE8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQU5ZLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQU5ZLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2MjVmNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BTlkuaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QU5ZIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFOSU5ULmh0bWwjQU5JTlQiIHRpdGxlPSJBTklOVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFTSU4uaHRtbCNBU0lOIiB0aXRsZT0iQVNJTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBTlkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVNJTi5odG1sI0FTSU4iPkFTSU48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBTklOVC5odG1sI0FOSU5UIj5BTklOVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNyA8Y29kZT5BTlk8L2NvZGU+ICZtZGFzaDsgQW55IHZhbHVlIGluIDx2YXI+TUFTSzwvdmFyPiBhbG9uZyA8dmFyPkRJTTwvdmFyPiBpcyB0cnVlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQU5ZLTQyNSI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtYXBwbHktY29uZGl0aW9uLTQyNiI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtY29uZGl0aW9uLXRlc3RpbmctNDI3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QU5ZKE1BU0sgWywgRElNXSk8L2NvZGU+IGRldGVybWluZXMgaWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGxvZ2ljYWwgYXJyYXkKKzx2YXI+TUFTSzwvdmFyPiBhbG9uZyBkaW1lbnNpb24gPHZhcj5ESU08L3Zhcj4gYXJlIDxjb2RlPi5UUlVFLjwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEFOWShNQVNLIFssIERJTV0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHNoYWxsIGJlIDxjb2RlPkxPR0lDQUw8L2NvZGU+IGFuZAoraXQgc2hhbGwgbm90IGJlIHNjYWxhci4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkRJTTwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgPHZhcj5ESU08L3Zhcj4gc2hhbGwgYmUgYSBzY2FsYXIgaW50ZWdlcgord2l0aCBhIHZhbHVlIHRoYXQgbGllcyBiZXR3ZWVuIG9uZSBhbmQgdGhlIHJhbmsgb2YgPHZhcj5NQVNLPC92YXI+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPjxjb2RlPkFOWShNQVNLKTwvY29kZT4gcmV0dXJucyBhIHNjYWxhciB2YWx1ZSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+IHdoZXJlCit0aGUga2luZCB0eXBlIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBhcyB0aGUga2luZCB0eXBlIHBhcmFtZXRlciBvZgorPHZhcj5NQVNLPC92YXI+LiAgSWYgPHZhcj5ESU08L3Zhcj4gaXMgcHJlc2VudCwgdGhlbiA8Y29kZT5BTlkoTUFTSywgRElNKTwvY29kZT4gcmV0dXJucworYW4gYXJyYXkgd2l0aCB0aGUgcmFuayBvZiA8dmFyPk1BU0s8L3Zhcj4gbWludXMgMS4gIFRoZSBzaGFwZSBpcyBkZXRlcm1pbmVkIGZyb20KK3RoZSBzaGFwZSBvZiA8dmFyPk1BU0s8L3Zhcj4gd2hlcmUgdGhlIDx2YXI+RElNPC92YXI+IGRpbWVuc2lvbiBpcyBlbGlkZWQuCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+KEEpPGRkPjxjb2RlPkFOWShNQVNLKTwvY29kZT4gaXMgdHJ1ZSBpZiBhbnkgZWxlbWVudCBvZiA8dmFyPk1BU0s8L3Zhcj4gaXMgdHJ1ZTsKK290aGVyd2lzZSwgaXQgaXMgZmFsc2UuICBJdCBhbHNvIGlzIGZhbHNlIGlmIDx2YXI+TUFTSzwvdmFyPiBoYXMgemVybyBzaXplLiAKKzxicj48ZHQ+KEIpPGRkPklmIHRoZSByYW5rIG9mIDx2YXI+TUFTSzwvdmFyPiBpcyBvbmUsIHRoZW4gPGNvZGU+QU5ZKE1BU0ssRElNKTwvY29kZT4gaXMgZXF1aXZhbGVudAordG8gPGNvZGU+QU5ZKE1BU0spPC9jb2RlPi4gIElmIHRoZSByYW5rIGlzIGdyZWF0ZXIgdGhhbiBvbmUsIHRoZW4gPGNvZGU+QU5ZKE1BU0ssRElNKTwvY29kZT4KK2lzIGRldGVybWluZWQgYnkgYXBwbHlpbmcgPGNvZGU+QU5ZPC9jb2RlPiB0byB0aGUgYXJyYXkgc2VjdGlvbnMuIAorPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfYW55CisgICAgICAgICAgICBsb2dpY2FsIGwKKyAgICAgICAgICAgIGwgPSBhbnkoKC8udHJ1ZS4sIC50cnVlLiwgLnRydWUuLykpCisgICAgICAgICAgICBwcmludCAqLCBsCisgICAgICAgICAgICBjYWxsIHNlY3Rpb24KKyAgICAgICAgICAgIGNvbnRhaW5zCisgICAgICAgICAgICAgIHN1YnJvdXRpbmUgc2VjdGlvbgorICAgICAgICAgICAgICAgIGludGVnZXIgYSgyLDMpLCBiKDIsMykKKyAgICAgICAgICAgICAgICBhID0gMQorICAgICAgICAgICAgICAgIGIgPSAxCisgICAgICAgICAgICAgICAgYigyLDIpID0gMgorICAgICAgICAgICAgICAgIHByaW50ICosIGFueShhIC5lcS4gYiwgMSkKKyAgICAgICAgICAgICAgICBwcmludCAqLCBhbnkoYSAuZXEuIGIsIDIpCisgICAgICAgICAgICAgIGVuZCBzdWJyb3V0aW5lIHNlY3Rpb24KKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2FueQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BU0lOLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQVNJTi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWZkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQVNJTi5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFTSU4gLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQU5ZLmh0bWwjQU5ZIiB0aXRsZT0iQU5ZIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVNJTkguaHRtbCNBU0lOSCIgdGl0bGU9IkFTSU5IIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFTSU4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVNJTkguaHRtbCNBU0lOSCI+QVNJTkg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBTlkuaHRtbCNBTlkiPkFOWTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xOCA8Y29kZT5BU0lOPC9jb2RlPiAmbWRhc2g7IEFyY3NpbmUgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1BU0lOLTQyOCI+PC9hPjxhIG5hbWU9ImluZGV4LURBU0lOLTQyOSI+PC9hPjxhIG5hbWU9ImluZGV4LXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25fMDAyYy1zaW5lXzAwMmMtaW52ZXJzZS00MzAiPjwvYT48YSBuYW1lPSJpbmRleC1zaW5lXzAwMmMtaW52ZXJzZS00MzEiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5BU0lOKFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgYXJjc2luZSBvZiBpdHMgPHZhcj5YPC92YXI+IChpbnZlcnNlIG9mIDxjb2RlPlNJTihYKTwvY29kZT4pLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyLCBmb3IgYSBjb21wbGV4IGFyZ3VtZW50IEZvcnRyYW4gMjAwOCBvciBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBBU0lOKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgZWl0aGVyIDxjb2RlPlJFQUw8L2NvZGU+IGFuZCBhIG1hZ25pdHVkZSB0aGF0IGlzCitsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb25lIC0gb3IgYmUgPGNvZGU+Q09NUExFWDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIDx2YXI+WDwvdmFyPi4gCitUaGUgcmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQgaXMgaW4gcmFkaWFucyBhbmQgbGllcyBpbiB0aGUgcmFuZ2UKKy1ccGkvMiBcbGVxIFxSZSBcYXNpbih4KSBcbGVxIFxwaS8yLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9hc2luCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAwLjg2Nl84CisgICAgICAgICAgICB4ID0gYXNpbih4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYXNpbgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5BU0lOKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRBU0lOKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+SW52ZXJzZSBmdW5jdGlvbjogPGEgaHJlZj0iU0lOLmh0bWwjU0lOIj5TSU48L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BU0lOSC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FTSU5ILmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwNTNmMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BU0lOSC5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFTSU5IIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFTSU4uaHRtbCNBU0lOIiB0aXRsZT0iQVNJTiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFTU09DSUFURUQuaHRtbCNBU1NPQ0lBVEVEIiB0aXRsZT0iQVNTT0NJQVRFRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBU0lOSCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBU1NPQ0lBVEVELmh0bWwjQVNTT0NJQVRFRCI+QVNTT0NJQVRFRDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFTSU4uaHRtbCNBU0lOIj5BU0lOPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE5IDxjb2RlPkFTSU5IPC9jb2RlPiAmbWRhc2g7IEludmVyc2UgaHlwZXJib2xpYyBzaW5lIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQVNJTkgtNDMyIj48L2E+PGEgbmFtZT0iaW5kZXgtREFTSU5ILTQzMyI+PC9hPjxhIG5hbWU9ImluZGV4LWFyZWEtaHlwZXJib2xpYy1zaW5lLTQzNCI+PC9hPjxhIG5hbWU9ImluZGV4LWludmVyc2UtaHlwZXJib2xpYy1zaW5lLTQzNSI+PC9hPjxhIG5hbWU9ImluZGV4LWh5cGVyYm9saWMtZnVuY3Rpb25fMDAyYy1zaW5lXzAwMmMtaW52ZXJzZS00MzYiPjwvYT48YSBuYW1lPSJpbmRleC1zaW5lXzAwMmMtaHlwZXJib2xpY18wMDJjLWludmVyc2UtNDM3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QVNJTkgoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBvZiA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBBU0lOSChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+IG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyAgPHZhcj5YPC92YXI+LiBJZiA8dmFyPlg8L3Zhcj4gaXMKK2NvbXBsZXgsIHRoZSBpbWFnaW5hcnkgcGFydCBvZiB0aGUgcmVzdWx0IGlzIGluIHJhZGlhbnMgYW5kIGxpZXMgYmV0d2VlbgorLVxwaS8yIFxsZXEgXEltIFxhc2luaCh4KSBcbGVxIFxwaS8yLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9hc2luaAorICAgICAgICAgICAgUkVBTCg4KSwgRElNRU5TSU9OKDMpIDo6IHggPSAoLyAtMS4wLCAwLjAsIDEuMCAvKQorICAgICAgICAgICAgV1JJVEUgKCosKikgQVNJTkgoeCkKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+REFTSU5IKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5HTlUgZXh0ZW5zaW9uLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+SW52ZXJzZSBmdW5jdGlvbjogPGEgaHJlZj0iU0lOSC5odG1sI1NJTkgiPlNJTkg8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQVNTT0NJQVRFRC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FTU09DSUFURUQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzlmNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FTU09DSUFURUQuaHRtbApAQCAtMCwwICsxLDExNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVNTT0NJQVRFRCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBU0lOSC5odG1sI0FTSU5IIiB0aXRsZT0iQVNJTkgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBVEFOLmh0bWwjQVRBTiIgdGl0bGU9IkFUQU4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVNTT0NJQVRFRCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBVEFOLmh0bWwjQVRBTiI+QVRBTjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFTSU5ILmh0bWwjQVNJTkgiPkFTSU5IPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIwIDxjb2RlPkFTU09DSUFURUQ8L2NvZGU+ICZtZGFzaDsgU3RhdHVzIG9mIGEgcG9pbnRlciBvciBwb2ludGVyL3RhcmdldCBwYWlyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQVNTT0NJQVRFRC00MzgiPjwvYT48YSBuYW1lPSJpbmRleC1wb2ludGVyXzAwMmMtc3RhdHVzLTQzOSI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc29jaWF0aW9uLXN0YXR1cy00NDAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5BU1NPQ0lBVEVEKFBPSU5URVIgWywgVEFSR0VUXSk8L2NvZGU+IGRldGVybWluZXMgdGhlIHN0YXR1cyBvZiB0aGUgcG9pbnRlcgorPHZhcj5QT0lOVEVSPC92YXI+IG9yIGlmIDx2YXI+UE9JTlRFUjwvdmFyPiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCA8dmFyPlRBUkdFVDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQVNTT0NJQVRFRChQT0lOVEVSIFssIFRBUkdFVF0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UE9JTlRFUjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+PHZhcj5QT0lOVEVSPC92YXI+IHNoYWxsIGhhdmUgdGhlIDxjb2RlPlBPSU5URVI8L2NvZGU+IGF0dHJpYnV0ZQorYW5kIGl0IGNhbiBiZSBvZiBhbnkgdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlRBUkdFVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSA8dmFyPlRBUkdFVDwvdmFyPiBzaGFsbCBiZSBhIHBvaW50ZXIgb3IKK2EgdGFyZ2V0LiAgSXQgbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUsIGtpbmQgdHlwZSBwYXJhbWV0ZXIsIGFuZAorYXJyYXkgcmFuayBhcyA8dmFyPlBPSU5URVI8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KK1RoZSBhc3NvY2lhdGlvbiBzdGF0dXMgb2YgbmVpdGhlciA8dmFyPlBPSU5URVI8L3Zhcj4gbm9yIDx2YXI+VEFSR0VUPC92YXI+IHNoYWxsIGJlCit1bmRlZmluZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPjxjb2RlPkFTU09DSUFURUQoUE9JTlRFUik8L2NvZGU+IHJldHVybnMgYSBzY2FsYXIgdmFsdWUgb2YgdHlwZSA8Y29kZT5MT0dJQ0FMKDQpPC9jb2RlPi4gCitUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlczoKKyAgICAgICAgICA8ZGw+Cis8ZHQ+KEEpIFdoZW4gdGhlIG9wdGlvbmFsIDx2YXI+VEFSR0VUPC92YXI+IGlzIG5vdCBwcmVzZW50IHRoZW48ZGQ+PGNvZGU+QVNTT0NJQVRFRChQT0lOVEVSKTwvY29kZT4gaXMgdHJ1ZSBpZiA8dmFyPlBPSU5URVI8L3Zhcj4gaXMgYXNzb2NpYXRlZCB3aXRoIGEgdGFyZ2V0OyBvdGhlcndpc2UsIGl0IHJldHVybnMgZmFsc2UuIAorPGJyPjxkdD4oQikgSWYgPHZhcj5UQVJHRVQ8L3Zhcj4gaXMgcHJlc2VudCBhbmQgYSBzY2FsYXIgdGFyZ2V0LCB0aGUgcmVzdWx0IGlzIHRydWUgaWY8ZGQ+PHZhcj5UQVJHRVQ8L3Zhcj4gaXMgbm90IGEgemVyby1zaXplZCBzdG9yYWdlIHNlcXVlbmNlIGFuZCB0aGUgdGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCA8dmFyPlBPSU5URVI8L3Zhcj4gb2NjdXBpZXMgdGhlIHNhbWUgc3RvcmFnZSB1bml0cy4gIElmIDx2YXI+UE9JTlRFUjwvdmFyPiBpcworZGlzYXNzb2NpYXRlZCwgdGhlIHJlc3VsdCBpcyBmYWxzZS4gCis8YnI+PGR0PihDKSBJZiA8dmFyPlRBUkdFVDwvdmFyPiBpcyBwcmVzZW50IGFuZCBhbiBhcnJheSB0YXJnZXQsIHRoZSByZXN1bHQgaXMgdHJ1ZSBpZjxkZD48dmFyPlRBUkdFVDwvdmFyPiBhbmQgPHZhcj5QT0lOVEVSPC92YXI+IGhhdmUgdGhlIHNhbWUgc2hhcGUsIGFyZSBub3QgemVyby1zaXplZCBhcnJheXMsCithcmUgYXJyYXlzIHdob3NlIGVsZW1lbnRzIGFyZSBub3QgemVyby1zaXplZCBzdG9yYWdlIHNlcXVlbmNlcywgYW5kCis8dmFyPlRBUkdFVDwvdmFyPiBhbmQgPHZhcj5QT0lOVEVSPC92YXI+IG9jY3VweSB0aGUgc2FtZSBzdG9yYWdlIHVuaXRzIGluIGFycmF5IGVsZW1lbnQKK29yZGVyLiAKK0FzIGluIGNhc2UoQiksIHRoZSByZXN1bHQgaXMgZmFsc2UsIGlmIDx2YXI+UE9JTlRFUjwvdmFyPiBpcyBkaXNhc3NvY2lhdGVkLiAKKzxicj48ZHQ+KEQpIElmIDx2YXI+VEFSR0VUPC92YXI+IGlzIHByZXNlbnQgYW5kIGFuIHNjYWxhciBwb2ludGVyLCB0aGUgcmVzdWx0IGlzIHRydWU8ZGQ+aWYgPHZhcj5UQVJHRVQ8L3Zhcj4gaXMgYXNzb2NpYXRlZCB3aXRoIDx2YXI+UE9JTlRFUjwvdmFyPiwgdGhlIHRhcmdldCBhc3NvY2lhdGVkIHdpdGgKKzx2YXI+VEFSR0VUPC92YXI+IGFyZSBub3QgemVyby1zaXplZCBzdG9yYWdlIHNlcXVlbmNlcyBhbmQgb2NjdXB5IHRoZSBzYW1lIHN0b3JhZ2UKK3VuaXRzLiAKK1RoZSByZXN1bHQgaXMgZmFsc2UsIGlmIGVpdGhlciA8dmFyPlRBUkdFVDwvdmFyPiBvciA8dmFyPlBPSU5URVI8L3Zhcj4gaXMgZGlzYXNzb2NpYXRlZC4gCis8YnI+PGR0PihFKSBJZiA8dmFyPlRBUkdFVDwvdmFyPiBpcyBwcmVzZW50IGFuZCBhbiBhcnJheSBwb2ludGVyLCB0aGUgcmVzdWx0IGlzIHRydWUgaWY8ZGQ+dGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCA8dmFyPlBPSU5URVI8L3Zhcj4gYW5kIHRoZSB0YXJnZXQgYXNzb2NpYXRlZCB3aXRoIDx2YXI+VEFSR0VUPC92YXI+CitoYXZlIHRoZSBzYW1lIHNoYXBlLCBhcmUgbm90IHplcm8tc2l6ZWQgYXJyYXlzLCBhcmUgYXJyYXlzIHdob3NlIGVsZW1lbnRzIGFyZQorbm90IHplcm8tc2l6ZWQgc3RvcmFnZSBzZXF1ZW5jZXMsIGFuZCA8dmFyPlRBUkdFVDwvdmFyPiBhbmQgPHZhcj5QT0lOVEVSPC92YXI+IG9jY3VweQordGhlIHNhbWUgc3RvcmFnZSB1bml0cyBpbiBhcnJheSBlbGVtZW50IG9yZGVyLiAKK1RoZSByZXN1bHQgaXMgZmFsc2UsIGlmIGVpdGhlciA8dmFyPlRBUkdFVDwvdmFyPiBvciA8dmFyPlBPSU5URVI8L3Zhcj4gaXMgZGlzYXNzb2NpYXRlZC4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9hc3NvY2lhdGVkCisgICAgICAgICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgICAgICAgIHJlYWwsIHRhcmdldCAgOjogdGd0KDIpID0gKC8xLiwgMi4vKQorICAgICAgICAgICAgIHJlYWwsIHBvaW50ZXIgOjogcHRyKDopCisgICAgICAgICAgICAgcHRyID0mZ3Q7IHRndAorICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVkKHB0cikgICAgIC5lcXYuIC5mYWxzZS4pIGNhbGwgYWJvcnQKKyAgICAgICAgICAgICBpZiAoYXNzb2NpYXRlZChwdHIsdGd0KSAuZXF2LiAuZmFsc2UuKSBjYWxsIGFib3J0CisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9hc3NvY2lhdGVkCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iTlVMTC5odG1sI05VTEwiPk5VTEw8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQVRBTi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FUQU4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTA5Mjc3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FUQU4uaHRtbApAQCAtMCwwICsxLDEwMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVRBTiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBU1NPQ0lBVEVELmh0bWwjQVNTT0NJQVRFRCIgdGl0bGU9IkFTU09DSUFURUQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBVEFOMi5odG1sI0FUQU4yIiB0aXRsZT0iQVRBTjIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVRBTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBVEFOMi5odG1sI0FUQU4yIj5BVEFOMjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFTU09DSUFURUQuaHRtbCNBU1NPQ0lBVEVEIj5BU1NPQ0lBVEVEPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIxIDxjb2RlPkFUQU48L2NvZGU+ICZtZGFzaDsgQXJjdGFuZ2VudCBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFUQU4tNDQxIj48L2E+PGEgbmFtZT0iaW5kZXgtREFUQU4tNDQyIj48L2E+PGEgbmFtZT0iaW5kZXgtdHJpZ29ub21ldHJpYy1mdW5jdGlvbl8wMDJjLXRhbmdlbnRfMDAyYy1pbnZlcnNlLTQ0MyI+PC9hPjxhIG5hbWU9ImluZGV4LXRhbmdlbnRfMDAyYy1pbnZlcnNlLTQ0NCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkFUQU4oWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBhcmN0YW5nZW50IG9mIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlciwgZm9yIGEgY29tcGxleCBhcmd1bWVudCBhbmQgZm9yIHR3byBhcmd1bWVudHMKK0ZvcnRyYW4gMjAwOCBvciBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IEFUQU4oWCk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBBVEFOKFksIFgpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5SRUFMPC9jb2RlPiBvciA8Y29kZT5DT01QTEVYPC9jb2RlPjsKK2lmIDx2YXI+WTwvdmFyPiBpcyBwcmVzZW50LCA8dmFyPlg8L3Zhcj4gc2hhbGwgYmUgUkVBTC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlk8L3Zhcj4gc2hhbGwgYmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIDx2YXI+WDwvdmFyPi4gCitJZiA8dmFyPlk8L3Zhcj4gaXMgcHJlc2VudCwgdGhlIHJlc3VsdCBpcyBpZGVudGljYWwgdG8gPGNvZGU+QVRBTjIoWSxYKTwvY29kZT4uIAorT3RoZXJ3aXNlLCBpdCB0aGUgYXJjdXMgdGFuZ2VudCBvZiA8dmFyPlg8L3Zhcj4sIHdoZXJlIHRoZSByZWFsIHBhcnQgb2YKK3RoZSByZXN1bHQgaXMgaW4gcmFkaWFucyBhbmQgbGllcyBpbiB0aGUgcmFuZ2UKKy1ccGkvMiBcbGVxIFxSZSBcYXRhbih4KSBcbGVxIFxwaS8yLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9hdGFuCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAyLjg2Nl84CisgICAgICAgICAgICB4ID0gYXRhbih4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYXRhbgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5BVEFOKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRBVEFOKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+SW52ZXJzZSBmdW5jdGlvbjogPGEgaHJlZj0iVEFOLmh0bWwjVEFOIj5UQU48L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BVEFOMi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FUQU4yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhZGViMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BVEFOMi5odG1sCkBAIC0wLDAgKzEsMTAwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BVEFOMiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBVEFOLmh0bWwjQVRBTiIgdGl0bGU9IkFUQU4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBVEFOSC5odG1sI0FUQU5IIiB0aXRsZT0iQVRBTkgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVRBTjIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVRBTkguaHRtbCNBVEFOSCI+QVRBTkg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBVEFOLmh0bWwjQVRBTiI+QVRBTjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMiA8Y29kZT5BVEFOMjwvY29kZT4gJm1kYXNoOyBBcmN0YW5nZW50IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQVRBTjItNDQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtREFUQU4yLTQ0NiI+PC9hPjxhIG5hbWU9ImluZGV4LXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25fMDAyYy10YW5nZW50XzAwMmMtaW52ZXJzZS00NDciPjwvYT48YSBuYW1lPSJpbmRleC10YW5nZW50XzAwMmMtaW52ZXJzZS00NDgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5BVEFOMihZLCBYKTwvY29kZT4gY29tcHV0ZXMgdGhlIHByaW5jaXBhbCB2YWx1ZSBvZiB0aGUgYXJndW1lbnQKK2Z1bmN0aW9uIG9mIHRoZSBjb21wbGV4IG51bWJlciBYICsgaSBZLiBUaGlzIGZ1bmN0aW9uIGNhbgorYmUgdXNlZCB0byB0cmFuc2Zvcm0gZnJvbSBDYXJ0ZXNpYW4gaW50byBwb2xhciBjb29yZGluYXRlcyBhbmQKK2FsbG93cyB0byBkZXRlcm1pbmUgdGhlIGFuZ2xlIGluIHRoZSBjb3JyZWN0IHF1YWRyYW50LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEFUQU4yKFksIFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBhbmQga2luZCB0eXBlIHBhcmFtZXRlciBzaGFsbCBiZSB0aGUgc2FtZSBhcyA8dmFyPlk8L3Zhcj4uIAorSWYgPHZhcj5ZPC92YXI+IGlzIHplcm8sIHRoZW4gPHZhcj5YPC92YXI+IG11c3QgYmUgbm9uemVyby4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGhhcyB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIHR5cGUgcGFyYW1ldGVyIGFzIDx2YXI+WTwvdmFyPi4gSXQKK2lzIHRoZSBwcmluY2lwYWwgdmFsdWUgb2YgdGhlIGNvbXBsZXggbnVtYmVyIFggKyBpIFkuICBJZiA8dmFyPlg8L3Zhcj4KK2lzIG5vbnplcm8sIHRoZW4gaXQgbGllcyBpbiB0aGUgcmFuZ2UgLVxwaSBcbGUgXGF0YW4gKHgpIFxsZXEgXHBpLiAKK1RoZSBzaWduIGlzIHBvc2l0aXZlIGlmIDx2YXI+WTwvdmFyPiBpcyBwb3NpdGl2ZS4gIElmIDx2YXI+WTwvdmFyPiBpcyB6ZXJvLCB0aGVuCit0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8gaWYgPHZhcj5YPC92YXI+IGlzIHN0cmljdGx5IHBvc2l0aXZlLCBccGkgaWYKKzx2YXI+WDwvdmFyPiBpcyBuZWdhdGl2ZSBhbmQgPHZhcj5ZPC92YXI+IGlzIHBvc2l0aXZlIHplcm8gKG9yIHRoZSBwcm9jZXNzb3IgZG9lcworbm90IGhhbmRsZSBzaWduZWQgemVyb3MpLCBhbmQgLVxwaSBpZiA8dmFyPlg8L3Zhcj4gaXMgbmVnYXRpdmUgYW5kCis8dmFyPlk8L3Zhcj4gaXMgbmVnYXRpdmUgemVyby4gIEZpbmFsbHksIGlmIDx2YXI+WDwvdmFyPiBpcyB6ZXJvLCB0aGVuIHRoZQorbWFnbml0dWRlIG9mIHRoZSByZXN1bHQgaXMgXHBpLzIuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2F0YW4yCisgICAgICAgICAgICByZWFsKDQpIDo6IHggPSAxLmUwXzQsIHkgPSAwLjVlMF80CisgICAgICAgICAgICB4ID0gYXRhbjIoeSx4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYXRhbjIKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+QVRBTjIoWCwgWSk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KSBYLCBZPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5EQVRBTjIoWCwgWSk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFgsIFk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FUQU5ILmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQVRBTkguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTFhYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FUQU5ILmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVRBTkggLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVRBTjIuaHRtbCNBVEFOMiIgdGl0bGU9IkFUQU4yIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVRPTUlDXzAwNWZERUZJTkUuaHRtbCNBVE9NSUNfMDA1ZkRFRklORSIgdGl0bGU9IkFUT01JQ19ERUZJTkUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQVRBTkgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVRPTUlDXzAwNWZERUZJTkUuaHRtbCNBVE9NSUNfMDA1ZkRFRklORSI+QVRPTUlDX0RFRklORTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFUQU4yLmh0bWwjQVRBTjIiPkFUQU4yPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIzIDxjb2RlPkFUQU5IPC9jb2RlPiAmbWRhc2g7IEludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQVRBTkgtNDQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtREFUQU5ILTQ1MCI+PC9hPjxhIG5hbWU9ImluZGV4LWFyZWEtaHlwZXJib2xpYy10YW5nZW50LTQ1MSI+PC9hPjxhIG5hbWU9ImluZGV4LWludmVyc2UtaHlwZXJib2xpYy10YW5nZW50LTQ1MiI+PC9hPjxhIG5hbWU9ImluZGV4LWh5cGVyYm9saWMtZnVuY3Rpb25fMDAyYy10YW5nZW50XzAwMmMtaW52ZXJzZS00NTMiPjwvYT48YSBuYW1lPSJpbmRleC10YW5nZW50XzAwMmMtaHlwZXJib2xpY18wMDJjLWludmVyc2UtNDU0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QVRBTkgoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBBVEFOSChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+IG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaGFzIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uIElmIDx2YXI+WDwvdmFyPiBpcworY29tcGxleCwgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSByZXN1bHQgaXMgaW4gcmFkaWFucyBhbmQgbGllcyBiZXR3ZWVuCistXHBpLzIgXGxlcSBcSW0gXGF0YW5oKHgpIFxsZXEgXHBpLzIuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X2F0YW5oCisgICAgICAgICAgICBSRUFMLCBESU1FTlNJT04oMykgOjogeCA9ICgvIC0xLjAsIDAuMCwgMS4wIC8pCisgICAgICAgICAgICBXUklURSAoKiwqKSBBVEFOSCh4KQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5EQVRBTkgoWCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPkludmVyc2UgZnVuY3Rpb246IDxhIGhyZWY9IlRBTkguaHRtbCNUQU5IIj5UQU5IPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FUT01JQ18wMDVmREVGSU5FLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQVRPTUlDXzAwNWZERUZJTkUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWJmNmQyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FUT01JQ18wMDVmREVGSU5FLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QVRPTUlDX0RFRklORSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBVEFOSC5odG1sI0FUQU5IIiB0aXRsZT0iQVRBTkgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBVE9NSUNfMDA1ZlJFRi5odG1sI0FUT01JQ18wMDVmUkVGIiB0aXRsZT0iQVRPTUlDX1JFRiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBVE9NSUNfREVGSU5FIj48L2E+Cis8YSBuYW1lPSJBVE9NSUNfMDA1ZkRFRklORSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBVE9NSUNfMDA1ZlJFRi5odG1sI0FUT01JQ18wMDVmUkVGIj5BVE9NSUNfUkVGPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVRBTkguaHRtbCNBVEFOSCI+QVRBTkg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjQgPGNvZGU+QVRPTUlDX0RFRklORTwvY29kZT4gJm1kYXNoOyBTZXR0aW5nIGEgdmFyaWFibGUgYXRvbWljYWxseTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUFUT01JQ18wMDVmREVGSU5FLTQ1NSI+PC9hPjxhIG5hbWU9ImluZGV4LUF0b21pYy1zdWJyb3V0aW5lXzAwMmMtZGVmaW5lLTQ1NiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkFUT01JQ19ERUZJTkUoQVRPTSwgVkFMVUUpPC9jb2RlPiBkZWZpbmVzIHRoZSB2YXJpYWJsZSA8dmFyPkFUT008L3Zhcj4gd2l0aCB0aGUgdmFsdWUKKzx2YXI+VkFMVUU8L3Zhcj4gYXRvbWljYWxseS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+QXRvbWljIHN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBBVE9NSUNfREVGSU5FKEFUT00sIFZBTFVFKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkFUT008L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2NhbGFyIGNvYXJyYXkgb3IgY29pbmRleGVkIHZhcmlhYmxlIG9mIGVpdGhlciBpbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIHdpdGggPGNvZGU+QVRPTUlDX0lOVF9LSU5EPC9jb2RlPiBraW5kIG9yIGxvZ2ljYWwgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCA8Y29kZT5BVE9NSUNfTE9HSUNBTF9LSU5EPC9jb2RlPiBraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VkFMVVJFPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TY2FsYXIgYW5kIG9mIHRoZSBzYW1lIHR5cGUgYXMgPHZhcj5BVE9NPC92YXI+LiBJZiB0aGUga2luZAorICAgICAgICAgICAgICAgICAgICAgICAgaXMgZGlmZmVyZW50LCB0aGUgdmFsdWUgaXMgY29udmVydGVkIHRvIHRoZSBraW5kIG9mCisgICAgICAgICAgICAgICAgICAgICAgICA8dmFyPkFUT008L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIGF0b21pYworICAgICAgICAgICAgdXNlIGlzb19mb3J0cmFuX2VudgorICAgICAgICAgICAgaW50ZWdlcihhdG9taWNfaW50X2tpbmQpIDo6IGF0b21bKl0KKyAgICAgICAgICAgIGNhbGwgYXRvbWljX2RlZmluZSAoYXRvbVsxXSwgdGhpc19pbWFnZSgpKQorICAgICAgICAgIGVuZCBwcm9ncmFtIGF0b21pYworPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkFUT01JQ18wMDVmUkVGLmh0bWwjQVRPTUlDXzAwNWZSRUYiPkFUT01JQ19SRUY8L2E+LCA8YSBocmVmPSJJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOVi5odG1sI0lTT18wMDVmRk9SVFJBTl8wMDVmRU5WIj5JU09fRk9SVFJBTl9FTlY8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQVRPTUlDXzAwNWZSRUYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BVE9NSUNfMDA1ZlJFRi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNWU3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQVRPTUlDXzAwNWZSRUYuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BVE9NSUNfUkVGIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFUT01JQ18wMDVmREVGSU5FLmh0bWwjQVRPTUlDXzAwNWZERUZJTkUiIHRpdGxlPSJBVE9NSUNfREVGSU5FIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQkFDS1RSQUNFLmh0bWwjQkFDS1RSQUNFIiB0aXRsZT0iQkFDS1RSQUNFIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFUT01JQ19SRUYiPjwvYT4KKzxhIG5hbWU9IkFUT01JQ18wMDVmUkVGIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJBQ0tUUkFDRS5odG1sI0JBQ0tUUkFDRSI+QkFDS1RSQUNFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQVRPTUlDXzAwNWZERUZJTkUuaHRtbCNBVE9NSUNfMDA1ZkRFRklORSI+QVRPTUlDX0RFRklORTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yNSA8Y29kZT5BVE9NSUNfUkVGPC9jb2RlPiAmbWRhc2g7IE9idGFpbmluZyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBhdG9taWNhbGx5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQVRPTUlDXzAwNWZSRUYtNDU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtQXRvbWljLXN1YnJvdXRpbmVfMDAyYy1yZWZlcmVuY2UtNDU4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QVRPTUlDX0RFRklORShBVE9NLCBWQUxVRSk8L2NvZGU+IGF0b21pY2FsbHkgYXNzaWducyB0aGUgdmFsdWUgb2YgdGhlCit2YXJpYWJsZSA8dmFyPkFUT008L3Zhcj4gdG8gPHZhcj5WQUxVRTwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+QXRvbWljIHN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBBVE9NSUNfUkVGKFZBTFVFLCBBVE9NKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlZBTFVSRTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2NhbGFyIGFuZCBvZiB0aGUgc2FtZSB0eXBlIGFzIDx2YXI+QVRPTTwvdmFyPi4gSWYgdGhlIGtpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIGRpZmZlcmVudCwgdGhlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byB0aGUga2luZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgPHZhcj5BVE9NPC92YXI+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QVRPTTwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TY2FsYXIgY29hcnJheSBvciBjb2luZGV4ZWQgdmFyaWFibGUgb2YgZWl0aGVyIGludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgd2l0aCA8Y29kZT5BVE9NSUNfSU5UX0tJTkQ8L2NvZGU+IGtpbmQgb3IgbG9naWNhbCB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIDxjb2RlPkFUT01JQ19MT0dJQ0FMX0tJTkQ8L2NvZGU+IGtpbmQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIGF0b21pYworICAgICAgICAgICAgdXNlIGlzb19mb3J0cmFuX2VudgorICAgICAgICAgICAgbG9naWNhbChhdG9taWNfbG9naWNhbF9raW5kKSA6OiBhdG9tWypdCisgICAgICAgICAgICBsb2dpY2FsIDo6IHZhbAorICAgICAgICAgICAgY2FsbCBhdG9taWNfcmVmIChhdG9tLCAuZmFsc2UuKQorICAgICAgICAgICAgISAuLi4KKyAgICAgICAgICAgIGNhbGwgYXRvbWljX3JlZiAoYXRvbSwgdmFsKQorICAgICAgICAgICAgaWYgKHZhbCkgdGhlbgorICAgICAgICAgICAgICBwcmludCAqLCAiT2J0YWluZWQiCisgICAgICAgICAgICBlbmQgaWYKKyAgICAgICAgICBlbmQgcHJvZ3JhbSBhdG9taWMKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJBVE9NSUNfMDA1ZkRFRklORS5odG1sI0FUT01JQ18wMDVmREVGSU5FIj5BVE9NSUNfREVGSU5FPC9hPiwgPGEgaHJlZj0iSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlYuaHRtbCNJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOViI+SVNPX0ZPUlRSQU5fRU5WPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0Fib3V0LUdOVS1Gb3J0cmFuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQWJvdXQtR05VLUZvcnRyYW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDcwYjBiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0Fib3V0LUdOVS1Gb3J0cmFuLmh0bWwKQEAgLTAsMCArMSwxNTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFib3V0IEdOVSBGb3J0cmFuIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJvZHVjdGlvbi5odG1sI0ludHJvZHVjdGlvbiIgdGl0bGU9IkludHJvZHVjdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HQ0MuaHRtbCNHTlUtRm9ydHJhbi1hbmQtR0NDIiB0aXRsZT0iR05VIEZvcnRyYW4gYW5kIEdDQyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBYm91dC1HTlUtRm9ydHJhbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHTlUtRm9ydHJhbi1hbmQtR0NDLmh0bWwjR05VLUZvcnRyYW4tYW5kLUdDQyI+R05VIEZvcnRyYW4gYW5kIEdDQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJvZHVjdGlvbi5odG1sI0ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4xIEFib3V0IEdOVSBGb3J0cmFuPC9oMz4KKworPHA+VGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBGb3J0cmFuIDc3LCA5MCBhbmQgOTUgc3RhbmRhcmRzCitjb21wbGV0ZWx5LCBwYXJ0cyBvZiB0aGUgRm9ydHJhbiAyMDAzIGFuZCBGb3J0cmFuIDIwMDggc3RhbmRhcmRzLCBhbmQKK3NldmVyYWwgdmVuZG9yIGV4dGVuc2lvbnMuICBUaGUgZGV2ZWxvcG1lbnQgZ29hbCBpcyB0byBwcm92aWRlIHRoZQorZm9sbG93aW5nIGZlYXR1cmVzOgorCisgICAgIDx1bD4KKzxsaT5SZWFkIGEgdXNlcidzIHByb2dyYW0sCitzdG9yZWQgaW4gYSBmaWxlIGFuZCBjb250YWluaW5nIGluc3RydWN0aW9ucyB3cml0dGVuCitpbiBGb3J0cmFuIDc3LCBGb3J0cmFuIDkwLCBGb3J0cmFuIDk1LCBGb3J0cmFuIDIwMDMgb3IgRm9ydHJhbiAyMDA4LiAKK1RoaXMgZmlsZSBjb250YWlucyA8ZGZuPnNvdXJjZSBjb2RlPC9kZm4+LgorCisgICAgIDxsaT5UcmFuc2xhdGUgdGhlIHVzZXIncyBwcm9ncmFtIGludG8gaW5zdHJ1Y3Rpb25zIGEgY29tcHV0ZXIKK2NhbiBjYXJyeSBvdXQgbW9yZSBxdWlja2x5IHRoYW4gaXQgdGFrZXMgdG8gdHJhbnNsYXRlIHRoZQoraW5zdHJ1Y3Rpb25zIGluIHRoZSBmaXJzdAorcGxhY2UuICBUaGUgcmVzdWx0IGFmdGVyIGNvbXBpbGF0aW9uIG9mIGEgcHJvZ3JhbSBpcworPGRmbj5tYWNoaW5lIGNvZGU8L2Rmbj4sCitjb2RlIGRlc2lnbmVkIHRvIGJlIGVmZmljaWVudGx5IHRyYW5zbGF0ZWQgYW5kIHByb2Nlc3NlZAorYnkgYSBtYWNoaW5lIHN1Y2ggYXMgeW91ciBjb21wdXRlci4gCitIdW1hbnMgdXN1YWxseSBhcmUgbm90IGFzIGdvb2Qgd3JpdGluZyBtYWNoaW5lIGNvZGUKK2FzIHRoZXkgYXJlIGF0IHdyaXRpbmcgRm9ydHJhbiAob3IgQysrLCBBZGEsIG9yIEphdmEpLAorYmVjYXVzZSBpdCBpcyBlYXN5IHRvIG1ha2UgdGlueSBtaXN0YWtlcyB3cml0aW5nIG1hY2hpbmUgY29kZS4KKworICAgICA8bGk+UHJvdmlkZSB0aGUgdXNlciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWFzb25zIHdoeQordGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byBjcmVhdGUgYSBiaW5hcnkgZnJvbSB0aGUgc291cmNlIGNvZGUuIAorVXN1YWxseSB0aGlzIHdpbGwgYmUgdGhlIGNhc2UgaWYgdGhlIHNvdXJjZSBjb2RlIGlzIGZsYXdlZC4gCitUaGUgRm9ydHJhbiA5MCBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IHRoZSBjb21waWxlciBjYW4gcG9pbnQgb3V0CittaXN0YWtlcyB0byB0aGUgdXNlci4gCitBbiBpbmNvcnJlY3QgdXNhZ2Ugb2YgdGhlIGxhbmd1YWdlIGNhdXNlcyBhbiA8ZGZuPmVycm9yIG1lc3NhZ2U8L2Rmbj4uCisKKyAgICAgPHA+VGhlIGNvbXBpbGVyIHdpbGwgYWxzbyBhdHRlbXB0IHRvIGRpYWdub3NlIGNhc2VzIHdoZXJlIHRoZQordXNlcidzIHByb2dyYW0gY29udGFpbnMgYSBjb3JyZWN0IHVzYWdlIG9mIHRoZSBsYW5ndWFnZSwKK2J1dCBpbnN0cnVjdHMgdGhlIGNvbXB1dGVyIHRvIGRvIHNvbWV0aGluZyBxdWVzdGlvbmFibGUuIAorVGhpcyBraW5kIG9mIGRpYWdub3N0aWNzIG1lc3NhZ2UgaXMgY2FsbGVkIGEgPGRmbj53YXJuaW5nIG1lc3NhZ2U8L2Rmbj4uCisKKyAgICAgPGxpPlByb3ZpZGUgb3B0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRyYW5zbGF0aW9uIHBhc3NlcworZnJvbSB0aGUgc291cmNlIGNvZGUgdG8gbWFjaGluZSBjb2RlLiAKK1RoaXMgY2FuIGhlbHAgYSB1c2VyIG9mIHRoZSBjb21waWxlciB0byBmaW5kIHRoZSBjYXVzZSBvZgorY2VydGFpbiBidWdzIHdoaWNoIG1heSBub3QgYmUgb2J2aW91cyBpbiB0aGUgc291cmNlIGNvZGUsCitidXQgbWF5IGJlIG1vcmUgZWFzaWx5IGZvdW5kIGF0IGEgbG93ZXIgbGV2ZWwgY29tcGlsZXIgb3V0cHV0LiAKK0l0IGFsc28gaGVscHMgZGV2ZWxvcGVycyB0byBmaW5kIGJ1Z3MgaW4gdGhlIGNvbXBpbGVyIGl0c2VsZi4KKworICAgICA8bGk+UHJvdmlkZSBpbmZvcm1hdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSB0aGF0IGNhbgorbWFrZSBpdCBlYXNpZXIgdG8gZmluZCBidWdzIGluIHRoZSBwcm9ncmFtICh1c2luZyBhIGRlYnVnZ2luZyB0b29sLAorY2FsbGVkIGEgPGRmbj5kZWJ1Z2dlcjwvZGZuPiwgc3VjaCBhcyB0aGUgR05VIERlYnVnZ2VyIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZGI8L3NwYW4+PC9zYW1wPikuCisKKyAgICAgPGxpPkxvY2F0ZSBhbmQgZ2F0aGVyIG1hY2hpbmUgY29kZSBhbHJlYWR5IGdlbmVyYXRlZCB0bworcGVyZm9ybSBhY3Rpb25zIHJlcXVlc3RlZCBieSBzdGF0ZW1lbnRzIGluIHRoZSB1c2VyJ3MgcHJvZ3JhbS4gCitUaGlzIG1hY2hpbmUgY29kZSBpcyBvcmdhbml6ZWQgaW50byA8ZGZuPm1vZHVsZXM8L2Rmbj4gYW5kIGlzIGxvY2F0ZWQKK2FuZCA8ZGZuPmxpbmtlZDwvZGZuPiB0byB0aGUgdXNlciBwcm9ncmFtLiAKKzwvdWw+CisKKyAgIDxwPlRoZSBHTlUgRm9ydHJhbiBjb21waWxlciBjb25zaXN0cyBvZiBzZXZlcmFsIGNvbXBvbmVudHM6CisKKyAgICAgPHVsPgorPGxpPkEgdmVyc2lvbiBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+IGNvbW1hbmQKKyh3aGljaCBhbHNvIG1pZ2h0IGJlIGluc3RhbGxlZCBhcyB0aGUgc3lzdGVtJ3MgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmNjPC9zcGFuPjwvc2FtcD4gY29tbWFuZCkKK3RoYXQgYWxzbyB1bmRlcnN0YW5kcyBhbmQgYWNjZXB0cyBGb3J0cmFuIHNvdXJjZSBjb2RlLiAKK1RoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBpcyB0aGUgPGRmbj5kcml2ZXI8L2Rmbj4gcHJvZ3JhbSBmb3IKK2FsbCB0aGUgbGFuZ3VhZ2VzIGluIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKTsKK1dpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+LAoreW91IGNhbiBjb21waWxlIHRoZSBzb3VyY2UgY29kZSBvZiBhbnkgbGFuZ3VhZ2UgZm9yCit3aGljaCBhIGZyb250IGVuZCBpcyBhdmFpbGFibGUgaW4gR0NDLgorCisgICAgIDxsaT5UaGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBpdHNlbGYsCit3aGljaCBhbHNvIG1pZ2h0IGJlIGluc3RhbGxlZCBhcyB0aGUKK3N5c3RlbSdzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5mOTU8L3NwYW4+PC9zYW1wPiBjb21tYW5kLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGlzIGp1c3QgYW5vdGhlciBkcml2ZXIgcHJvZ3JhbSwKK2J1dCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBGb3J0cmFuIGNvbXBpbGVyIG9ubHkuIAorVGhlIGRpZmZlcmVuY2Ugd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gaXMgdGhhdCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPgord2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgdGhlIGNvcnJlY3QgbGlicmFyaWVzIHRvIHlvdXIgcHJvZ3JhbS4KKworICAgICA8bGk+QSBjb2xsZWN0aW9uIG9mIHJ1bi10aW1lIGxpYnJhcmllcy4gCitUaGVzZSBsaWJyYXJpZXMgY29udGFpbiB0aGUgbWFjaGluZSBjb2RlIG5lZWRlZCB0byBzdXBwb3J0CitjYXBhYmlsaXRpZXMgb2YgdGhlIEZvcnRyYW4gbGFuZ3VhZ2UgdGhhdCBhcmUgbm90IGRpcmVjdGx5Citwcm92aWRlZCBieSB0aGUgbWFjaGluZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGNvbXBpbGF0aW9uIHBoYXNlLAorc3VjaCBhcyBpbnRyaW5zaWMgZnVuY3Rpb25zIGFuZCBzdWJyb3V0aW5lcywKK2FuZCByb3V0aW5lcyBmb3IgaW50ZXJhY3Rpb24gd2l0aCBmaWxlcyBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIAorPCEtLSBhbmQgbWVjaGFuaXNtcyB0byBzcGF3biwgLS0+Cis8IS0tIHVubGVhc2ggYW5kIHBhdXNlIHRocmVhZHMgaW4gcGFyYWxsZWxpemVkIGNvZGUuIC0tPgorCisgICAgIDxsaT5UaGUgRm9ydHJhbiBjb21waWxlciBpdHNlbGYsICg8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Zjk1MTwvc3Bhbj48L3NhbXA+KS4gCitUaGlzIGlzIHRoZSBHTlUgRm9ydHJhbiBwYXJzZXIgYW5kIGNvZGUgZ2VuZXJhdG9yLAorbGlua2VkIHRvIGFuZCBpbnRlcmZhY2VkIHdpdGggdGhlIEdDQyBiYWNrZW5kIGxpYnJhcnkuIAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmY5NTE8L3NwYW4+PC9zYW1wPiAmbGRxdW87dHJhbnNsYXRlcyZyZHF1bzsgdGhlIHNvdXJjZSBjb2RlIHRvCithc3NlbWJsZXIgY29kZS4gIFlvdSB3b3VsZCB0eXBpY2FsbHkgbm90IHVzZSB0aGlzCitwcm9ncmFtIGRpcmVjdGx5OworaW5zdGVhZCwgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiBkcml2ZXIKK3Byb2dyYW1zIHdpbGwgY2FsbCBpdCBmb3IgeW91LiAKKzwvdWw+CisKKzwhLS0gIC0tPgorPCEtLSBHTlUgRm9ydHJhbiBhbmQgR0NDIC0tPgorPCEtLSAgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQWx0ZXJuYXRlLWNvbXBsZXgtZnVuY3Rpb24tc3ludGF4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQWx0ZXJuYXRlLWNvbXBsZXgtZnVuY3Rpb24tc3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxNGUyMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9BbHRlcm5hdGUtY29tcGxleC1mdW5jdGlvbi1zeW50YXguaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbHRlcm5hdGUgY29tcGxleCBmdW5jdGlvbiBzeW50YXggLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiIgdGl0bGU9IkV4dGVuc2lvbnMgbm90IGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVmFyaWFibGUtRk9STUFULWV4cHJlc3Npb25zLmh0bWwjVmFyaWFibGUtRk9STUFULWV4cHJlc3Npb25zIiB0aXRsZT0iVmFyaWFibGUgRk9STUFUIGV4cHJlc3Npb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFsdGVybmF0ZS1jb21wbGV4LWZ1bmN0aW9uLXN5bnRheCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucy5odG1sI1ZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucyI+VmFyaWFibGUgRk9STUFUIGV4cHJlc3Npb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjIuNCBBbHRlcm5hdGUgY29tcGxleCBmdW5jdGlvbiBzeW50YXg8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1Db21wbGV4LWZ1bmN0aW9uLTM1NCI+PC9hPgorU29tZSBGb3J0cmFuIGNvbXBpbGVycywgaW5jbHVkaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPiwgbGV0IHRoZSB1c2VyIGRlY2xhcmUKK2NvbXBsZXggZnVuY3Rpb25zIHdpdGggdGhlIHN5bnRheCA8Y29kZT5DT01QTEVYIEZVTkNUSU9OIG5hbWUqMTYoKTwvY29kZT4sIGFzCit3ZWxsIGFzIDxjb2RlPkNPTVBMRVgqMTYgRlVOQ1RJT04gbmFtZSgpPC9jb2RlPi4gIEJvdGggYXJlIG5vbi1zdGFuZGFyZCwgbGVnYWN5CitleHRlbnNpb25zLiAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gYWNjZXB0cyB0aGUgbGF0dGVyIGZvcm0sIHdoaWNoIGlzIG1vcmUKK2NvbW1vbiwgYnV0IG5vdCB0aGUgZm9ybWVyLgorCis8IS0tICAtLT4KKzwhLS0gTWl4ZWQtTGFuZ3VhZ2UgUHJvZ3JhbW1pbmcgLS0+Cis8IS0tICAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Bcmd1bWVudC1saXN0LWZ1bmN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0FyZ3VtZW50LWxpc3QtZnVuY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzMWQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Bcmd1bWVudC1saXN0LWZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFyZ3VtZW50IGxpc3QgZnVuY3Rpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik9wZW5NUC5odG1sI09wZW5NUCIgdGl0bGU9Ik9wZW5NUCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBcmd1bWVudC1saXN0LWZ1bmN0aW9ucyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9wZW5NUC5odG1sI09wZW5NUCI+T3Blbk1QPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjEuMTcgQXJndW1lbnQgbGlzdCBmdW5jdGlvbnMgPGNvZGU+JVZBTDwvY29kZT4sIDxjb2RlPiVSRUY8L2NvZGU+IGFuZCA8Y29kZT4lTE9DPC9jb2RlPjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFyZ3VtZW50LWxpc3QtZnVuY3Rpb25zLTM0NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjVWQUxfMDA3ZC0zNDUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI1UkVGXzAwN2QtMzQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNUxPQ18wMDdkLTM0NyI+PC9hPgorR05VIEZvcnRyYW4gc3VwcG9ydHMgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnMgPGNvZGU+JVZBTDwvY29kZT4sIDxjb2RlPiVSRUY8L2NvZGU+CithbmQgPGNvZGU+JUxPQzwvY29kZT4gc3RhdGVtZW50cywgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBnNzcuIAorSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGVzZSBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBjb2RlIHRoYXQgaXMKK2FjY2Vzc2luZyBmYWNpbGl0aWVzIG91dHNpZGUgb2YgR05VIEZvcnRyYW4sIHN1Y2ggYXMgb3BlcmF0aW5nIHN5c3RlbQorb3Igd2luZG93aW5nIGZhY2lsaXRpZXMuICBJdCBpcyBiZXN0IHRvIGNvbnN0cmFpbiBzdWNoIHVzZXMgdG8gaXNvbGF0ZWQKK3BvcnRpb25zIG9mIGEgcHJvZ3JhbSZuZGFzaDtwb3J0aW9ucyB0aGF0IGRlYWwgc3BlY2lmaWNhbGx5IGFuZCBleGNsdXNpdmVseQord2l0aCBsb3ctbGV2ZWwsIHN5c3RlbS1kZXBlbmRlbnQgZmFjaWxpdGllcy4gIFN1Y2ggcG9ydGlvbnMgbWlnaHQgd2VsbAorcHJvdmlkZSBhIHBvcnRhYmxlIGludGVyZmFjZSBmb3IgdXNlIGJ5IHRoZSBwcm9ncmFtIGFzIGEgd2hvbGUsIGJ1dCBhcmUKK3RoZW1zZWx2ZXMgbm90IHBvcnRhYmxlLCBhbmQgc2hvdWxkIGJlIHRob3JvdWdobHkgdGVzdGVkIGVhY2ggdGltZSB0aGV5CithcmUgcmVidWlsdCB1c2luZyBhIG5ldyBjb21waWxlciBvciB2ZXJzaW9uIG9mIGEgY29tcGlsZXIuCisKKyAgIDxwPjxjb2RlPiVWQUw8L2NvZGU+IHBhc3NlcyBhIHNjYWxhciBhcmd1bWVudCBieSB2YWx1ZSwgPGNvZGU+JVJFRjwvY29kZT4gcGFzc2VzIGl0IGJ5CityZWZlcmVuY2UgYW5kIDxjb2RlPiVMT0M8L2NvZGU+IHBhc3NlcyBpdHMgbWVtb3J5IGxvY2F0aW9uLiAgU2luY2UgZ2ZvcnRyYW4KK2FscmVhZHkgcGFzc2VzIHNjYWxhciBhcmd1bWVudHMgYnkgcmVmZXJlbmNlLCA8Y29kZT4lUkVGPC9jb2RlPiBpcyBpbiBlZmZlY3QKK2EgZG8tbm90aGluZy4gIDxjb2RlPiVMT0M8L2NvZGU+IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgYSBGb3J0cmFuIHBvaW50ZXIuCisKKyAgIDxwPkFuIGV4YW1wbGUgb2YgcGFzc2luZyBhbiBhcmd1bWVudCBieSB2YWx1ZSB0byBhIEMgc3Vicm91dGluZSBmb28uOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIEMKKyAgICAgQyBwcm90b3R5cGUgICAgICB2b2lkIGZvb18gKGZsb2F0IHgpOworICAgICBDCisgICAgICAgICAgIGV4dGVybmFsIGZvbworICAgICAgICAgICByZWFsKjQgeAorICAgICAgICAgICB4ID0gMy4xNDE1OQorICAgICAgICAgICBjYWxsIGZvbyAoJVZBTCAoeCkpCisgICAgICAgICAgIGVuZAorPC9wcmU+CisgICA8cD5Gb3IgZGV0YWlscyByZWZlciB0byB0aGUgZzc3IG1hbnVhbAorPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTMuNC42L2c3Ny9pbmRleC5odG1sI1RvcCI+aHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjLTMuNC42L2c3Ny9pbmRleC5odG1sI1RvcDwvYT4uCisKKyAgIDxwPkFsc28sIDxjb2RlPmNfYnlfdmFsLmY8L2NvZGU+IGFuZCBpdHMgcGFydG5lciA8Y29kZT5jX2J5X3ZhbC5jPC9jb2RlPiBvZiB0aGUKK0dOVSBGb3J0cmFuIHRlc3RzdWl0ZSBhcmUgd29ydGggYSBsb29rLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQkFDS1RSQUNFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQkFDS1RSQUNFLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3ZmFkZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CQUNLVFJBQ0UuaHRtbApAQCAtMCwwICsxLDc1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CQUNLVFJBQ0UgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQVRPTUlDXzAwNWZSRUYuaHRtbCNBVE9NSUNfMDA1ZlJFRiIgdGl0bGU9IkFUT01JQ19SRUYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJCRVNTRUxfMDA1ZkowLmh0bWwjQkVTU0VMXzAwNWZKMCIgdGl0bGU9IkJFU1NFTF9KMCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCQUNLVFJBQ0UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQkVTU0VMXzAwNWZKMC5odG1sI0JFU1NFTF8wMDVmSjAiPkJFU1NFTF9KMDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFUT01JQ18wMDVmUkVGLmh0bWwjQVRPTUlDXzAwNWZSRUYiPkFUT01JQ19SRUY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjYgPGNvZGU+QkFDS1RSQUNFPC9jb2RlPiAmbWRhc2g7IFNob3cgYSBiYWNrdHJhY2U8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1CQUNLVFJBQ0UtNDU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtYmFja3RyYWNlLTQ2MCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkJBQ0tUUkFDRTwvY29kZT4gc2hvd3MgYSBiYWNrdHJhY2UgYXQgYW4gYXJiaXRyYXJ5IHBsYWNlIGluIHVzZXIgY29kZS4gUHJvZ3JhbQorZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlcndhcmRzLiBUaGUgYmFja3RyYWNlIGluZm9ybWF0aW9uIGlzIHByaW50ZWQKK3RvIHRoZSB1bml0IGNvcnJlc3BvbmRpbmcgdG8gPGNvZGU+RVJST1JfVU5JVDwvY29kZT4gaW4gPGNvZGU+SVNPX0ZPUlRSQU5fRU5WPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgRXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIEJBQ0tUUkFDRTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+Tm9uZQorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkFCT1JULmh0bWwjQUJPUlQiPkFCT1JUPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JFU1NFTF8wMDVmSjAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZkowLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhNGQ0NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZkowLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkVTU0VMX0owIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJBQ0tUUkFDRS5odG1sI0JBQ0tUUkFDRSIgdGl0bGU9IkJBQ0tUUkFDRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJFU1NFTF8wMDVmSjEuaHRtbCNCRVNTRUxfMDA1ZkoxIiB0aXRsZT0iQkVTU0VMX0oxIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJFU1NFTF9KMCI+PC9hPgorPGEgbmFtZT0iQkVTU0VMXzAwNWZKMCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCRVNTRUxfMDA1ZkoxLmh0bWwjQkVTU0VMXzAwNWZKMSI+QkVTU0VMX0oxPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQkFDS1RSQUNFLmh0bWwjQkFDS1RSQUNFIj5CQUNLVFJBQ0U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjcgPGNvZGU+QkVTU0VMX0owPC9jb2RlPiAmbWRhc2g7IEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZCBvZiBvcmRlciAwPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQkVTU0VMXzAwNWZKMC00NjEiPjwvYT48YSBuYW1lPSJpbmRleC1CRVNKMC00NjIiPjwvYT48YSBuYW1lPSJpbmRleC1EQkVTSjAtNDYzIj48L2E+PGEgbmFtZT0iaW5kZXgtQmVzc2VsLWZ1bmN0aW9uXzAwMmMtZmlyc3Qta2luZC00NjQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5CRVNTRUxfSjAoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQgb2YKK29yZGVyIDAgb2YgPHZhcj5YPC92YXI+LiBUaGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgbmFtZQorPGNvZGU+QkVTSjA8L2NvZGU+IGFzIGEgR05VIGV4dGVuc2lvbi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEJFU1NFTF9KMChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+LCBhbmQgaXQgc2hhbGwgYmUgc2NhbGFyLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBhbmQgbGllcyBpbiB0aGUKK3JhbmdlICAtIDAuNDAyNy4uLiBcbGVxIEJlc3NlbCAoMCx4KSBcbGVxIDEuIEl0IGhhcyB0aGUgc2FtZQora2luZCBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2Jlc2owCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAwLjBfOAorICAgICAgICAgICAgeCA9IGJlc3NlbF9qMCh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYmVzajAKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+REJFU0owKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JFU1NFTF8wMDVmSjEuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZkoxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhOWZjZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZkoxLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkVTU0VMX0oxIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJFU1NFTF8wMDVmSjAuaHRtbCNCRVNTRUxfMDA1ZkowIiB0aXRsZT0iQkVTU0VMX0owIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQkVTU0VMXzAwNWZKTi5odG1sI0JFU1NFTF8wMDVmSk4iIHRpdGxlPSJCRVNTRUxfSk4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQkVTU0VMX0oxIj48L2E+Cis8YSBuYW1lPSJCRVNTRUxfMDA1ZkoxIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJFU1NFTF8wMDVmSk4uaHRtbCNCRVNTRUxfMDA1ZkpOIj5CRVNTRUxfSk48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCRVNTRUxfMDA1ZkowLmh0bWwjQkVTU0VMXzAwNWZKMCI+QkVTU0VMX0owPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjI4IDxjb2RlPkJFU1NFTF9KMTwvY29kZT4gJm1kYXNoOyBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQgb2Ygb3JkZXIgMTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUJFU1NFTF8wMDVmSjEtNDY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtQkVTSjEtNDY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtREJFU0oxLTQ2NyI+PC9hPjxhIG5hbWU9ImluZGV4LUJlc3NlbC1mdW5jdGlvbl8wMDJjLWZpcnN0LWtpbmQtNDY4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QkVTU0VMX0oxKFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kIG9mCitvcmRlciAxIG9mIDx2YXI+WDwvdmFyPi4gVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIG5hbWUKKzxjb2RlPkJFU0oxPC9jb2RlPiBhcyBhIEdOVSBleHRlbnNpb24uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4CisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEJFU1NFTF9KMShYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+LCBhbmQgaXQgc2hhbGwgYmUgc2NhbGFyLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBhbmQgaXQgbGllcyBpbiB0aGUKK3JhbmdlICAtIDAuNTgxOC4uLiBcbGVxIEJlc3NlbCAoMCx4KSBcbGVxIDAuNTgxOCAuIEl0IGhhcyB0aGUgc2FtZQora2luZCBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2Jlc2oxCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAxLjBfOAorICAgICAgICAgICAgeCA9IGJlc3NlbF9qMSh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYmVzajEKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRCRVNKMShYKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQkVTU0VMXzAwNWZKTi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JFU1NFTF8wMDVmSk4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGVhNGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JFU1NFTF8wMDVmSk4uaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkVTU0VMX0pOIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJFU1NFTF8wMDVmSjEuaHRtbCNCRVNTRUxfMDA1ZkoxIiB0aXRsZT0iQkVTU0VMX0oxIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQkVTU0VMXzAwNWZZMC5odG1sI0JFU1NFTF8wMDVmWTAiIHRpdGxlPSJCRVNTRUxfWTAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQkVTU0VMX0pOIj48L2E+Cis8YSBuYW1lPSJCRVNTRUxfMDA1ZkpOIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJFU1NFTF8wMDVmWTAuaHRtbCNCRVNTRUxfMDA1ZlkwIj5CRVNTRUxfWTA8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCRVNTRUxfMDA1ZkoxLmh0bWwjQkVTU0VMXzAwNWZKMSI+QkVTU0VMX0oxPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjI5IDxjb2RlPkJFU1NFTF9KTjwvY29kZT4gJm1kYXNoOyBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1CRVNTRUxfMDA1ZkpOLTQ2OSI+PC9hPjxhIG5hbWU9ImluZGV4LUJFU0pOLTQ3MCI+PC9hPjxhIG5hbWU9ImluZGV4LURCRVNKTi00NzEiPjwvYT48YSBuYW1lPSJpbmRleC1CZXNzZWwtZnVuY3Rpb25fMDAyYy1maXJzdC1raW5kLTQ3MiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkJFU1NFTF9KTihOLCBYKTwvY29kZT4gY29tcHV0ZXMgdGhlIEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZCBvZgorb3JkZXIgPHZhcj5OPC92YXI+IG9mIDx2YXI+WDwvdmFyPi4gVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIG5hbWUKKzxjb2RlPkJFU0pOPC9jb2RlPiBhcyBhIEdOVSBleHRlbnNpb24uICBJZiA8dmFyPk48L3Zhcj4gYW5kIDx2YXI+WDwvdmFyPiBhcmUgYXJyYXlzLAordGhlaXIgcmFua3MgYW5kIHNoYXBlcyBzaGFsbCBjb25mb3JtLgorCisgICAgIDxwPjxjb2RlPkJFU1NFTF9KTihOMSwgTjIsIFgpPC9jb2RlPiByZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIEJlc3NlbCBmdW5jdGlvbnMKK29mIHRoZSBmaXJzdCBraW5kIG9mIHRoZSBvcmRlcnMgPHZhcj5OMTwvdmFyPiB0byA8dmFyPk4yPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIsIG5lZ2F0aXZlIDx2YXI+TjwvdmFyPiBpcyBhbGxvd2VkIGFzIEdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24sIGV4Y2VwdCBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKzxjb2RlPkJFU1NFTF9KTihOMSwgTjIsIFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IEJFU1NFTF9KTihOLCBYKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IEJFU1NFTF9KTihOMSwgTjIsIFgpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvciBhbiBhcnJheSBvZiB0eXBlICA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk4xPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIG5vbi1uZWdhdGl2ZSBzY2FsYXIgb2YgdHlwZSAgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OMjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBub24tbmVnYXRpdmUgc2NhbGFyIG9mIHR5cGUgIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb3IgYW4gYXJyYXkgb2YgdHlwZSAgPGNvZGU+UkVBTDwvY29kZT47Citmb3IgPGNvZGU+QkVTU0VMX0pOKE4xLCBOMiwgWCk8L2NvZGU+IGl0IHNoYWxsIGJlIHNjYWxhci4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+UkVBTDwvY29kZT4uIEl0IGhhcyB0aGUgc2FtZQora2luZCBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+Tm90ZTwvZW0+OjxkZD5UaGUgdHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbiB1c2VzIGEgcmVjdXJyZW5jZSBhbGdvcml0aG0gd2hpY2ggbWlnaHQsCitmb3Igc29tZSB2YWx1ZXMgb2YgPHZhcj5YPC92YXI+LCBsZWFkIHRvIGRpZmZlcmVudCByZXN1bHRzIHRoYW4gY2FsbHMgdG8KK3RoZSBlbGVtZW50YWwgZnVuY3Rpb24uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2Jlc2puCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAxLjBfOAorICAgICAgICAgICAgeCA9IGJlc3NlbF9qbig1LHgpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9iZXNqbgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5EQkVTSk4oTiwgWCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSIE48L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgWDwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JFU1NFTF8wMDVmWTAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZlkwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiNDJhMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZlkwLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkVTU0VMX1kwIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJFU1NFTF8wMDVmSk4uaHRtbCNCRVNTRUxfMDA1ZkpOIiB0aXRsZT0iQkVTU0VMX0pOIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQkVTU0VMXzAwNWZZMS5odG1sI0JFU1NFTF8wMDVmWTEiIHRpdGxlPSJCRVNTRUxfWTEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQkVTU0VMX1kwIj48L2E+Cis8YSBuYW1lPSJCRVNTRUxfMDA1ZlkwIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJFU1NFTF8wMDVmWTEuaHRtbCNCRVNTRUxfMDA1ZlkxIj5CRVNTRUxfWTE8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjQkVTU0VMXzAwNWZKTiI+QkVTU0VMX0pOPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjMwIDxjb2RlPkJFU1NFTF9ZMDwvY29kZT4gJm1kYXNoOyBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kIG9mIG9yZGVyIDA8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1CRVNTRUxfMDA1ZlkwLTQ3MyI+PC9hPjxhIG5hbWU9ImluZGV4LUJFU1kwLTQ3NCI+PC9hPjxhIG5hbWU9ImluZGV4LURCRVNZMC00NzUiPjwvYT48YSBuYW1lPSJpbmRleC1CZXNzZWwtZnVuY3Rpb25fMDAyYy1zZWNvbmQta2luZC00NzYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5CRVNTRUxfWTAoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kIG9mCitvcmRlciAwIG9mIDx2YXI+WDwvdmFyPi4gVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIG5hbWUKKzxjb2RlPkJFU1kwPC9jb2RlPiBhcyBhIEdOVSBleHRlbnNpb24uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBCRVNTRUxfWTAoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5SRUFMPC9jb2RlPiwgYW5kIGl0IHNoYWxsIGJlIHNjYWxhci4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+UkVBTDwvY29kZT4uIEl0IGhhcyB0aGUgc2FtZQora2luZCBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2Jlc3kwCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAwLjBfOAorICAgICAgICAgICAgeCA9IGJlc3NlbF95MCh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYmVzeTAKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+REJFU1kwKFgpPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JFU1NFTF8wMDVmWTEuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZlkxLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkZjIyZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZlkxLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkVTU0VMX1kxIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJFU1NFTF8wMDVmWTAuaHRtbCNCRVNTRUxfMDA1ZlkwIiB0aXRsZT0iQkVTU0VMX1kwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQkVTU0VMXzAwNWZZTi5odG1sI0JFU1NFTF8wMDVmWU4iIHRpdGxlPSJCRVNTRUxfWU4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQkVTU0VMX1kxIj48L2E+Cis8YSBuYW1lPSJCRVNTRUxfMDA1ZlkxIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJFU1NFTF8wMDVmWU4uaHRtbCNCRVNTRUxfMDA1ZllOIj5CRVNTRUxfWU48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCRVNTRUxfMDA1ZlkwLmh0bWwjQkVTU0VMXzAwNWZZMCI+QkVTU0VMX1kwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjMxIDxjb2RlPkJFU1NFTF9ZMTwvY29kZT4gJm1kYXNoOyBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kIG9mIG9yZGVyIDE8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1CRVNTRUxfMDA1ZlkxLTQ3NyI+PC9hPjxhIG5hbWU9ImluZGV4LUJFU1kxLTQ3OCI+PC9hPjxhIG5hbWU9ImluZGV4LURCRVNZMS00NzkiPjwvYT48YSBuYW1lPSJpbmRleC1CZXNzZWwtZnVuY3Rpb25fMDAyYy1zZWNvbmQta2luZC00ODAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5CRVNTRUxfWTEoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kIG9mCitvcmRlciAxIG9mIDx2YXI+WDwvdmFyPi4gVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIG5hbWUKKzxjb2RlPkJFU1kxPC9jb2RlPiBhcyBhIEdOVSBleHRlbnNpb24uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBCRVNTRUxfWTEoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5SRUFMPC9jb2RlPiwgYW5kIGl0IHNoYWxsIGJlIHNjYWxhci4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+UkVBTDwvY29kZT4uIEl0IGhhcyB0aGUgc2FtZQora2luZCBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2Jlc3kxCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAxLjBfOAorICAgICAgICAgICAgeCA9IGJlc3NlbF95MSh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYmVzeTEKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+REJFU1kxKFgpPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JFU1NFTF8wMDVmWU4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZllOLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkMTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CRVNTRUxfMDA1ZllOLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJFU1NFTF9ZTiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCRVNTRUxfMDA1ZlkxLmh0bWwjQkVTU0VMXzAwNWZZMSIgdGl0bGU9IkJFU1NFTF9ZMSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJHRS5odG1sI0JHRSIgdGl0bGU9IkJHRSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCRVNTRUxfWU4iPjwvYT4KKzxhIG5hbWU9IkJFU1NFTF8wMDVmWU4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQkdFLmh0bWwjQkdFIj5CR0U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCRVNTRUxfMDA1ZlkxLmh0bWwjQkVTU0VMXzAwNWZZMSI+QkVTU0VMX1kxPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjMyIDxjb2RlPkJFU1NFTF9ZTjwvY29kZT4gJm1kYXNoOyBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQkVTU0VMXzAwNWZZTi00ODEiPjwvYT48YSBuYW1lPSJpbmRleC1CRVNZTi00ODIiPjwvYT48YSBuYW1lPSJpbmRleC1EQkVTWU4tNDgzIj48L2E+PGEgbmFtZT0iaW5kZXgtQmVzc2VsLWZ1bmN0aW9uXzAwMmMtc2Vjb25kLWtpbmQtNDg0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QkVTU0VMX1lOKE4sIFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZCBvZgorb3JkZXIgPHZhcj5OPC92YXI+IG9mIDx2YXI+WDwvdmFyPi4gVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIG5hbWUKKzxjb2RlPkJFU1lOPC9jb2RlPiBhcyBhIEdOVSBleHRlbnNpb24uICBJZiA8dmFyPk48L3Zhcj4gYW5kIDx2YXI+WDwvdmFyPiBhcmUgYXJyYXlzLAordGhlaXIgcmFua3MgYW5kIHNoYXBlcyBzaGFsbCBjb25mb3JtLgorCisgICAgIDxwPjxjb2RlPkJFU1NFTF9ZTihOMSwgTjIsIFgpPC9jb2RlPiByZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIEJlc3NlbCBmdW5jdGlvbnMKK29mIHRoZSBmaXJzdCBraW5kIG9mIHRoZSBvcmRlcnMgPHZhcj5OMTwvdmFyPiB0byA8dmFyPk4yPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIsIG5lZ2F0aXZlIDx2YXI+TjwvdmFyPiBpcyBhbGxvd2VkIGFzIEdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24sIGV4Y2VwdCBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKzxjb2RlPkJFU1NFTF9ZTihOMSwgTjIsIFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IEJFU1NFTF9ZTihOLCBYKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IEJFU1NFTF9ZTihOMSwgTjIsIFgpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvciBhbiBhcnJheSBvZiB0eXBlICA8Y29kZT5JTlRFR0VSPC9jb2RlPiAuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OMTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBub24tbmVnYXRpdmUgc2NhbGFyIG9mIHR5cGUgIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TjI8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgbm9uLW5lZ2F0aXZlIHNjYWxhciBvZiB0eXBlICA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIG9yIGFuIGFycmF5IG9mIHR5cGUgIDxjb2RlPlJFQUw8L2NvZGU+OworZm9yIDxjb2RlPkJFU1NFTF9ZTihOMSwgTjIsIFgpPC9jb2RlPiBpdCBzaGFsbCBiZSBzY2FsYXIuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LiBJdCBoYXMgdGhlIHNhbWUKK2tpbmQgYXMgPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPk5vdGU8L2VtPjo8ZGQ+VGhlIHRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24gdXNlcyBhIHJlY3VycmVuY2UgYWxnb3JpdGhtIHdoaWNoIG1pZ2h0LAorZm9yIHNvbWUgdmFsdWVzIG9mIDx2YXI+WDwvdmFyPiwgbGVhZCB0byBkaWZmZXJlbnQgcmVzdWx0cyB0aGFuIGNhbGxzIHRvCit0aGUgZWxlbWVudGFsIGZ1bmN0aW9uLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9iZXN5bgorICAgICAgICAgICAgcmVhbCg4KSA6OiB4ID0gMS4wXzgKKyAgICAgICAgICAgIHggPSBiZXNzZWxfeW4oNSx4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfYmVzeW4KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+REJFU1lOKE4sWCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSIE48L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CR0UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CR0UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDBiOWI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JHRS5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJHRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjQkVTU0VMXzAwNWZZTiIgdGl0bGU9IkJFU1NFTF9ZTiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJHVC5odG1sI0JHVCIgdGl0bGU9IkJHVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCR0UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQkdULmh0bWwjQkdUIj5CR1Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjQkVTU0VMXzAwNWZZTiI+QkVTU0VMX1lOPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjMzIDxjb2RlPkJHRTwvY29kZT4gJm1kYXNoOyBCaXR3aXNlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUJHRS00ODUiPjwvYT48YSBuYW1lPSJpbmRleC1iaXR3aXNlLWNvbXBhcmlzb24tNDg2Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGludGVncmFsIGlzIGEgYml0d2lzZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KK2Fub3RoZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBCR0UoSSwgSik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiA8Y29kZT5JTlRFR0VSPC9jb2RlPiB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+SjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZSwgYW5kIG9mIHRoZSBzYW1lIGtpbmQKK2FzIDx2YXI+STwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+TE9HSUNBTDwvY29kZT4gYW5kIG9mIHRoZSBkZWZhdWx0IGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQkdULmh0bWwjQkdUIj5CR1Q8L2E+LCA8YSBocmVmPSJCTEUuaHRtbCNCTEUiPkJMRTwvYT4sIDxhIGhyZWY9IkJMVC5odG1sI0JMVCI+QkxUPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JHVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JHVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMWNlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQkdULmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkdUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJHRS5odG1sI0JHRSIgdGl0bGU9IkJHRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJJVF8wMDVmU0laRS5odG1sI0JJVF8wMDVmU0laRSIgdGl0bGU9IkJJVF9TSVpFIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJHVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCSVRfMDA1ZlNJWkUuaHRtbCNCSVRfMDA1ZlNJWkUiPkJJVF9TSVpFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQkdFLmh0bWwjQkdFIj5CR0U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMzQgPGNvZGU+QkdUPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgZ3JlYXRlciB0aGFuPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQkdULTQ4NyI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHdpc2UtY29tcGFyaXNvbi00ODgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5EZXRlcm1pbmVzIHdoZXRoZXIgYW4gaW50ZWdyYWwgaXMgYSBiaXR3aXNlIGdyZWF0ZXIgdGhhbiBhbm90aGVyLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQkdUKEksIEopPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPko8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIDxjb2RlPklOVEVHRVI8L2NvZGU+IHR5cGUsIGFuZCBvZiB0aGUgc2FtZSBraW5kCithcyA8dmFyPkk8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+IGFuZCBvZiB0aGUgZGVmYXVsdCBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkJHRS5odG1sI0JHRSI+QkdFPC9hPiwgPGEgaHJlZj0iQkxFLmh0bWwjQkxFIj5CTEU8L2E+LCA8YSBocmVmPSJCTFQuaHRtbCNCTFQiPkJMVDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CSVRfMDA1ZlNJWkUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CSVRfMDA1ZlNJWkUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBiMGZiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JJVF8wMDVmU0laRS5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJJVF9TSVpFIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJHVC5odG1sI0JHVCIgdGl0bGU9IkJHVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJMRS5odG1sI0JMRSIgdGl0bGU9IkJMRSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCSVRfU0laRSI+PC9hPgorPGEgbmFtZT0iQklUXzAwNWZTSVpFIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJMRS5odG1sI0JMRSI+QkxFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQkdULmh0bWwjQkdUIj5CR1Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMzUgPGNvZGU+QklUX1NJWkU8L2NvZGU+ICZtZGFzaDsgQml0IHNpemUgaW5xdWlyeSBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUJJVF8wMDVmU0laRS00ODkiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzXzAwMmMtbnVtYmVyLW9mLTQ5MCI+PC9hPjxhIG5hbWU9ImluZGV4LXNpemUtb2YtYS12YXJpYWJsZV8wMDJjLWluLWJpdHMtNDkxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QklUX1NJWkUoSSk8L2NvZGU+IHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIChpbnRlZ2VyIHByZWNpc2lvbiBwbHVzIHNpZ24gYml0KQorcmVwcmVzZW50ZWQgYnkgdGhlIHR5cGUgb2YgPHZhcj5JPC92YXI+LiAgVGhlIHJlc3VsdCBvZiA8Y29kZT5CSVRfU0laRShJKTwvY29kZT4gaXMKK2luZGVwZW5kZW50IG9mIHRoZSBhY3R1YWwgdmFsdWUgb2YgPHZhcj5JPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBCSVRfU0laRShJKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9iaXRfc2l6ZQorICAgICAgICAgICAgICBpbnRlZ2VyIDo6IGkgPSAxMjMKKyAgICAgICAgICAgICAgaW50ZWdlciA6OiBzaXplCisgICAgICAgICAgICAgIHNpemUgPSBiaXRfc2l6ZShpKQorICAgICAgICAgICAgICBwcmludCAqLCBzaXplCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9iaXRfc2l6ZQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CTEUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9CTEUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmJmODNjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JMRS5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJMRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCSVRfMDA1ZlNJWkUuaHRtbCNCSVRfMDA1ZlNJWkUiIHRpdGxlPSJCSVRfU0laRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJMVC5odG1sI0JMVCIgdGl0bGU9IkJMVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCTEUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQkxULmh0bWwjQkxUIj5CTFQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCSVRfMDA1ZlNJWkUuaHRtbCNCSVRfMDA1ZlNJWkUiPkJJVF9TSVpFPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjM2IDxjb2RlPkJMRTwvY29kZT4gJm1kYXNoOyBCaXR3aXNlIGxlc3MgdGhhbiBvciBlcXVhbCB0bzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUJMRS00OTIiPjwvYT48YSBuYW1lPSJpbmRleC1iaXR3aXNlLWNvbXBhcmlzb24tNDkzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGludGVncmFsIGlzIGEgYml0d2lzZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KK2Fub3RoZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBCTEUoSSwgSik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiA8Y29kZT5JTlRFR0VSPC9jb2RlPiB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+SjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZSwgYW5kIG9mIHRoZSBzYW1lIGtpbmQKK2FzIDx2YXI+STwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+TE9HSUNBTDwvY29kZT4gYW5kIG9mIHRoZSBkZWZhdWx0IGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQkdULmh0bWwjQkdUIj5CR1Q8L2E+LCA8YSBocmVmPSJCR0UuaHRtbCNCR0UiPkJHRTwvYT4sIDxhIGhyZWY9IkJMVC5odG1sI0JMVCI+QkxUPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JMVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JMVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZmU5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQkxULmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkxUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJMRS5odG1sI0JMRSIgdGl0bGU9IkJMRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJURVNULmh0bWwjQlRFU1QiIHRpdGxlPSJCVEVTVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCTFQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQlRFU1QuaHRtbCNCVEVTVCI+QlRFU1Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCTEUuaHRtbCNCTEUiPkJMRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4zNyA8Y29kZT5CTFQ8L2NvZGU+ICZtZGFzaDsgQml0d2lzZSBsZXNzIHRoYW48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1CTFQtNDk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtYml0d2lzZS1jb21wYXJpc29uLTQ5NSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkRldGVybWluZXMgd2hldGhlciBhbiBpbnRlZ3JhbCBpcyBhIGJpdHdpc2UgbGVzcyB0aGFuIGFub3RoZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBCTFQoSSwgSik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiA8Y29kZT5JTlRFR0VSPC9jb2RlPiB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+SjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZSwgYW5kIG9mIHRoZSBzYW1lIGtpbmQKK2FzIDx2YXI+STwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+TE9HSUNBTDwvY29kZT4gYW5kIG9mIHRoZSBkZWZhdWx0IGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQkdFLmh0bWwjQkdFIj5CR0U8L2E+LCA8YSBocmVmPSJCR1QuaHRtbCNCR1QiPkJHVDwvYT4sIDxhIGhyZWY9IkJMRS5odG1sI0JMRSI+QkxFPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JPWi1saXRlcmFsLWNvbnN0YW50cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JPWi1saXRlcmFsLWNvbnN0YW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzYwMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQk9aLWxpdGVyYWwtY29uc3RhbnRzLmh0bWwKQEAgLTAsMCArMSwxMDQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkJPWiBsaXRlcmFsIGNvbnN0YW50cyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiIgdGl0bGU9IkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJfMDA0MGNvZGVfMDA3YlFfMDA3ZC1leHBvbmVudF8wMDJkbGV0dGVyLmh0bWwjZ190XzAwNDBjb2RlXzAwN2JRXzAwN2QtZXhwb25lbnRfMDAyZGxldHRlciIgdGl0bGU9IkBjb2Rle1F9IGV4cG9uZW50LWxldHRlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJlYWwtYXJyYXktaW5kaWNlcy5odG1sI1JlYWwtYXJyYXktaW5kaWNlcyIgdGl0bGU9IlJlYWwgYXJyYXkgaW5kaWNlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCT1otbGl0ZXJhbC1jb25zdGFudHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUmVhbC1hcnJheS1pbmRpY2VzLmh0bWwjUmVhbC1hcnJheS1pbmRpY2VzIj5SZWFsIGFycmF5IGluZGljZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJfMDAzY2NvZGVfMDAzZVFfMDAzY18wMDJmY29kZV8wMDNlLWV4cG9uZW50XzAwMmRsZXR0ZXIuaHRtbCNnX3RfMDAzY2NvZGVfMDAzZVFfMDAzY18wMDJmY29kZV8wMDNlLWV4cG9uZW50XzAwMmRsZXR0ZXIiPiZsdDtjb2RlJmd0O1EmbHQ7L2NvZGUmZ3Q7IGV4cG9uZW50LWxldHRlcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4xLjkgQk9aIGxpdGVyYWwgY29uc3RhbnRzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtQk9aLWxpdGVyYWwtY29uc3RhbnRzLTMzNSI+PC9hPgorQmVzaWRlcyBkZWNpbWFsIGNvbnN0YW50cywgRm9ydHJhbiBhbHNvIHN1cHBvcnRzIGJpbmFyeSAoPGNvZGU+YjwvY29kZT4pLAorb2N0YWwgKDxjb2RlPm88L2NvZGU+KSBhbmQgaGV4YWRlY2ltYWwgKDxjb2RlPno8L2NvZGU+KSBpbnRlZ2VyIGNvbnN0YW50cy4gIFRoZQorc3ludGF4IGlzOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByZWZpeCBxdW90ZSBkaWdpdHMgcXVvdGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdlcmUgdGhlIHByZWZpeCBpcworZWl0aGVyIDxjb2RlPmI8L2NvZGU+LCA8Y29kZT5vPC9jb2RlPiBvciA8Y29kZT56PC9jb2RlPiwgcXVvdGUgaXMgZWl0aGVyIDxjb2RlPic8L2NvZGU+IG9yCis8Y29kZT4iPC9jb2RlPiBhbmQgdGhlIGRpZ2l0cyBhcmUgZm9yIGJpbmFyeSA8Y29kZT4wPC9jb2RlPiBvciA8Y29kZT4xPC9jb2RlPiwgZm9yCitvY3RhbCBiZXR3ZWVuIDxjb2RlPjA8L2NvZGU+IGFuZCA8Y29kZT43PC9jb2RlPiwgYW5kIGZvciBoZXhhZGVjaW1hbCBiZXR3ZWVuCis8Y29kZT4wPC9jb2RlPiBhbmQgPGNvZGU+RjwvY29kZT4uICAoRXhhbXBsZTogPGNvZGU+YicwMTAxMTEwMSc8L2NvZGU+LikKKworICAgPHA+VXAgdG8gRm9ydHJhbiA5NSwgQk9aIGxpdGVyYWxzIHdlcmUgb25seSBhbGxvd2VkIHRvIGluaXRpYWxpemUKK2ludGVnZXIgdmFyaWFibGVzIGluIERBVEEgc3RhdGVtZW50cy4gIFNpbmNlIEZvcnRyYW4gMjAwMyBCT1ogbGl0ZXJhbHMKK2FyZSBhbHNvIGFsbG93ZWQgYXMgYXJndW1lbnQgb2YgPGNvZGU+UkVBTDwvY29kZT4sIDxjb2RlPkRCTEU8L2NvZGU+LCA8Y29kZT5JTlQ8L2NvZGU+CithbmQgPGNvZGU+Q01QTFg8L2NvZGU+OyB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGlmIHRoZSBpbnRlZ2VyIEJPWgorbGl0ZXJhbCBoYWQgYmVlbiBjb252ZXJ0ZWQgYnkgPGNvZGU+VFJBTlNGRVI8L2NvZGU+IHRvLCByZXNwZWN0aXZlbHksCis8Y29kZT5yZWFsPC9jb2RlPiwgPGNvZGU+ZG91YmxlIHByZWNpc2lvbjwvY29kZT4sIDxjb2RlPmludGVnZXI8L2NvZGU+IG9yIDxjb2RlPmNvbXBsZXg8L2NvZGU+LiAKK0FzIEdOVSBGb3J0cmFuIGV4dGVuc2lvbiB0aGUgaW50cmluc2ljIHByb2NlZHVyZXMgPGNvZGU+RkxPQVQ8L2NvZGU+LAorPGNvZGU+REZMT0FUPC9jb2RlPiwgPGNvZGU+Q09NUExFWDwvY29kZT4gYW5kIDxjb2RlPkRDTVBMWDwvY29kZT4gYXJlIHRyZWF0ZWQgYWxpa2UuCisKKyAgIDxwPkFzIGFuIGV4dGVuc2lvbiwgR05VIEZvcnRyYW4gYWxsb3dzIGhleGFkZWNpbWFsIEJPWiBsaXRlcmFsIGNvbnN0YW50cyB0bworYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSA8Y29kZT5YPC9jb2RlPiBwcmVmaXgsIGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZAorPGNvZGU+WjwvY29kZT4gcHJlZml4LiAgVGhlIEJPWiBsaXRlcmFsIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBieSBhZGRpbmcgYQorc3VmZml4IHRvIHRoZSBzdHJpbmcsIGZvciBleGFtcGxlLCA8Y29kZT5aJ0FCQyc8L2NvZGU+IGFuZCA8Y29kZT4nQUJDJ1o8L2NvZGU+IGFyZQorZXF1aXZhbGVudC4KKworICAgPHA+RnVydGhlcm1vcmUsIEdOVSBGb3J0cmFuIGFsbG93cyB1c2luZyBCT1ogbGl0ZXJhbCBjb25zdGFudHMgb3V0c2lkZQorREFUQSBzdGF0ZW1lbnRzIGFuZCB0aGUgZm91ciBpbnRyaW5zaWMgZnVuY3Rpb25zIGFsbG93ZWQgYnkgRm9ydHJhbiAyMDAzLiAKK0luIERBVEEgc3RhdGVtZW50cywgaW4gZGlyZWN0IGFzc2lnbm1lbnRzLCB3aGVyZSB0aGUgcmlnaHQtaGFuZCBzaWRlCitvbmx5IGNvbnRhaW5zIGEgQk9aIGxpdGVyYWwgY29uc3RhbnQsIGFuZCBmb3Igb2xkLXN0eWxlIGluaXRpYWxpemVycyBvZgordGhlIGZvcm0gPGNvZGU+aW50ZWdlciBpIC9vJzAxNzMnLzwvY29kZT4sIHRoZSBjb25zdGFudCBpcyB0cmFuc2ZlcnJlZAorYXMgaWYgPGNvZGU+VFJBTlNGRVI8L2NvZGU+IGhhZCBiZWVuIHVzZWQ7IGZvciA8Y29kZT5DT01QTEVYPC9jb2RlPiBudW1iZXJzLCBvbmx5Cit0aGUgcmVhbCBwYXJ0IGlzIGluaXRpYWxpemVkIHVubGVzcyA8Y29kZT5DTVBMWDwvY29kZT4gaXMgdXNlZC4gIEluIGFsbCBvdGhlcgorY2FzZXMsIHRoZSBCT1ogbGl0ZXJhbCBjb25zdGFudCBpcyBjb252ZXJ0ZWQgdG8gYW4gPGNvZGU+SU5URUdFUjwvY29kZT4gdmFsdWUgd2l0aAordGhlIGxhcmdlc3QgZGVjaW1hbCByZXByZXNlbnRhdGlvbi4gIFRoaXMgdmFsdWUgaXMgdGhlbiBjb252ZXJ0ZWQKK251bWVyaWNhbGx5IHRvIHRoZSB0eXBlIGFuZCBraW5kIG9mIHRoZSB2YXJpYWJsZSBpbiBxdWVzdGlvbi4gCisoRm9yIGluc3RhbmNlLCA8Y29kZT5yZWFsIDo6IHIgPSBiJzAwMDAwMDEnICsgMTwvY29kZT4gaW5pdGlhbGl6ZXMgPGNvZGU+cjwvY29kZT4KK3dpdGggPGNvZGU+Mi4wPC9jb2RlPi4pIEFzIGRpZmZlcmVudCBjb21waWxlcnMgaW1wbGVtZW50IHRoZSBleHRlbnNpb24KK2RpZmZlcmVudGx5LCBvbmUgc2hvdWxkIGJlIGNhcmVmdWwgd2hlbiBkb2luZyBiaXR3aXNlIGluaXRpYWxpemF0aW9uCitvZiBub24taW50ZWdlciB2YXJpYWJsZXMuCisKKyAgIDxwPk5vdGUgdGhhdCBpbml0aWFsaXppbmcgYW4gPGNvZGU+SU5URUdFUjwvY29kZT4gdmFyaWFibGUgd2l0aCBhIHN0YXRlbWVudCBzdWNoCithcyA8Y29kZT5EQVRBIGkvWidGRkZGRkZGRicvPC9jb2RlPiB3aWxsIGdpdmUgYW4gaW50ZWdlciBvdmVyZmxvdyBlcnJvciByYXRoZXIKK3RoYW4gdGhlIGRlc2lyZWQgcmVzdWx0IG9mIC0xIHdoZW4gPGNvZGU+aTwvY29kZT4gaXMgYSAzMi1iaXQgaW50ZWdlcgorb24gYSBzeXN0ZW0gdGhhdCBzdXBwb3J0cyA2NC1iaXQgaW50ZWdlcnMuICBUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZm5vLXJhbmdlLWNoZWNrPC9zcGFuPjwvc2FtcD4mcnNxdW87CitvcHRpb24gY2FuIGJlIHVzZWQgYXMgYSB3b3JrYXJvdW5kIGZvciBsZWdhY3kgY29kZSB0aGF0IGluaXRpYWxpemVzCitpbnRlZ2VycyBpbiB0aGlzIG1hbm5lci4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JURVNULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQlRFU1QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGExNmFlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0JURVNULmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QlRFU1QgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQkxULmh0bWwjQkxUIiB0aXRsZT0iQkxUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ18wMDVmQVNTT0NJQVRFRC5odG1sI0NfMDA1ZkFTU09DSUFURUQiIHRpdGxlPSJDX0FTU09DSUFURUQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQlRFU1QiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ18wMDVmQVNTT0NJQVRFRC5odG1sI0NfMDA1ZkFTU09DSUFURUQiPkNfQVNTT0NJQVRFRDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkJMVC5odG1sI0JMVCI+QkxUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjM4IDxjb2RlPkJURVNUPC9jb2RlPiAmbWRhc2g7IEJpdCB0ZXN0IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQlRFU1QtNDk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtYml0c18wMDJjLXRlc3RpbmctNDk3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+QlRFU1QoSSxQT1MpPC9jb2RlPiByZXR1cm5zIGxvZ2ljYWwgPGNvZGU+LlRSVUUuPC9jb2RlPiBpZiB0aGUgYml0IGF0IDx2YXI+UE9TPC92YXI+CitpbiA8dmFyPkk8L3Zhcj4gaXMgc2V0LiAgVGhlIGNvdW50aW5nIG9mIHRoZSBiaXRzIHN0YXJ0cyBhdCAwLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEJURVNUKEksIFBPUyk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlBPUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2J0ZXN0CisgICAgICAgICAgICAgIGludGVnZXIgOjogaSA9IDMyNzY4ICsgMTAyNCArIDY0CisgICAgICAgICAgICAgIGludGVnZXIgOjogcG9zCisgICAgICAgICAgICAgIGxvZ2ljYWwgOjogYm9vbAorICAgICAgICAgICAgICBkbyBwb3M9MCwxNgorICAgICAgICAgICAgICAgICAgYm9vbCA9IGJ0ZXN0KGksIHBvcykKKyAgICAgICAgICAgICAgICAgIHByaW50ICosIHBvcywgYm9vbAorICAgICAgICAgICAgICBlbmQgZG8KKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2J0ZXN0Cis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NFSUxJTkcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DRUlMSU5HLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1ZjljOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DRUlMSU5HLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q0VJTElORyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwNWZTSVpFT0YuaHRtbCNDXzAwNWZTSVpFT0YiIHRpdGxlPSJDX1NJWkVPRiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNIQVIuaHRtbCNDSEFSIiB0aXRsZT0iQ0hBUiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDRUlMSU5HIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNIQVIuaHRtbCNDSEFSIj5DSEFSPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ18wMDVmU0laRU9GLmh0bWwjQ18wMDVmU0laRU9GIj5DX1NJWkVPRjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC40NSA8Y29kZT5DRUlMSU5HPC9jb2RlPiAmbWRhc2g7IEludGVnZXIgY2VpbGluZyBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUNFSUxJTkctNTEyIj48L2E+PGEgbmFtZT0iaW5kZXgtY2VpbGluZy01MTMiPjwvYT48YSBuYW1lPSJpbmRleC1yb3VuZGluZ18wMDJjLWNlaWxpbmctNTE0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+Q0VJTElORyhBKTwvY29kZT4gcmV0dXJucyB0aGUgbGVhc3QgaW50ZWdlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gPHZhcj5BPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IENFSUxJTkcoQSBbLCBLSU5EXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5SRUFMPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPktJTkQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgQW4gPGNvZGU+SU5URUdFUjwvY29kZT4gaW5pdGlhbGl6YXRpb24KK2V4cHJlc3Npb24gaW5kaWNhdGluZyB0aGUga2luZCBwYXJhbWV0ZXIgb2YgdGhlIHJlc3VsdC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUihLSU5EKTwvY29kZT4gaWYgPHZhcj5LSU5EPC92YXI+IGlzIHByZXNlbnQKK2FuZCBhIGRlZmF1bHQta2luZCA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvdGhlcndpc2UuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2NlaWxpbmcKKyAgICAgICAgICAgICAgcmVhbCA6OiB4ID0gNjMuMjkKKyAgICAgICAgICAgICAgcmVhbCA6OiB5ID0gLTYzLjU5CisgICAgICAgICAgICAgIHByaW50ICosIGNlaWxpbmcoeCkgISByZXR1cm5zIDY0CisgICAgICAgICAgICAgIHByaW50ICosIGNlaWxpbmcoeSkgISByZXR1cm5zIC02MworICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfY2VpbGluZworPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkZMT09SLmh0bWwjRkxPT1IiPkZMT09SPC9hPiwgPGEgaHJlZj0iTklOVC5odG1sI05JTlQiPk5JTlQ8L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DSEFSLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ0hBUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTI5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ0hBUi5odG1sCkBAIC0wLDAgKzEsOTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNIQVIgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ0VJTElORy5odG1sI0NFSUxJTkciIHRpdGxlPSJDRUlMSU5HIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ0hESVIuaHRtbCNDSERJUiIgdGl0bGU9IkNIRElSIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNIQVIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ0hESVIuaHRtbCNDSERJUiI+Q0hESVI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDRUlMSU5HLmh0bWwjQ0VJTElORyI+Q0VJTElORzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC40NiA8Y29kZT5DSEFSPC9jb2RlPiAmbWRhc2g7IENoYXJhY3RlciBjb252ZXJzaW9uIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ0hBUi01MTUiPjwvYT48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8tY2hhcmFjdGVyLTUxNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNIQVIoSSBbLCBLSU5EXSk8L2NvZGU+IHJldHVybnMgdGhlIGNoYXJhY3RlciByZXByZXNlbnRlZCBieSB0aGUgaW50ZWdlciA8dmFyPkk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQ0hBUihJIFssIEtJTkRdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBBbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbml0aWFsaXphdGlvbgorZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBraW5kIHBhcmFtZXRlciBvZiB0aGUgcmVzdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5DSEFSQUNURVIoMSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2NoYXIKKyAgICAgICAgICAgICAgaW50ZWdlciA6OiBpID0gNzQKKyAgICAgICAgICAgICAgY2hhcmFjdGVyKDEpIDo6IGMKKyAgICAgICAgICAgICAgYyA9IGNoYXIoaSkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgaSwgYyAhIHJldHVybnMgJ0onCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9jaGFyCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DSEFSKEkpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SU5URUdFUiBJPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q0hBUkFDVEVSKExFTj0xKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkY3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPk5vdGU8L2VtPjo8ZGQ+U2VlIDxhIGhyZWY9IklDSEFSLmh0bWwjSUNIQVIiPklDSEFSPC9hPiBmb3IgYSBkaXNjdXNzaW9uIG9mIGNvbnZlcnRpbmcgYmV0d2VlbiBudW1lcmljYWwgdmFsdWVzCithbmQgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQUNIQVIuaHRtbCNBQ0hBUiI+QUNIQVI8L2E+LCA8YSBocmVmPSJJQUNIQVIuaHRtbCNJQUNIQVIiPklBQ0hBUjwvYT4sIDxhIGhyZWY9IklDSEFSLmh0bWwjSUNIQVIiPklDSEFSPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ0hESVIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DSERJUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjlkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ0hESVIuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DSERJUiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDSEFSLmh0bWwjQ0hBUiIgdGl0bGU9IkNIQVIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDSE1PRC5odG1sI0NITU9EIiB0aXRsZT0iQ0hNT0QiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ0hESVIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ0hNT0QuaHRtbCNDSE1PRCI+Q0hNT0Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDSEFSLmh0bWwjQ0hBUiI+Q0hBUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC40NyA8Y29kZT5DSERJUjwvY29kZT4gJm1kYXNoOyBDaGFuZ2Ugd29ya2luZyBkaXJlY3Rvcnk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1DSERJUi01MTciPjwvYT48YSBuYW1lPSJpbmRleC1zeXN0ZW1fMDAyYy13b3JraW5nLWRpcmVjdG9yeS01MTgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5DaGFuZ2UgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0byBhIHNwZWNpZmllZCBwYXRoLgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIHByb3ZpZGVkIGluIGJvdGggc3Vicm91dGluZSBhbmQgZnVuY3Rpb24gZm9ybXM7IGhvd2V2ZXIsCitvbmx5IG9uZSBmb3JtIGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBwcm9ncmFtIHVuaXQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+Q0FMTCBDSERJUihOQU1FIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gQ0hESVIoTkFNRSk8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk5BTUU8L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiBvZiBkZWZhdWx0CitraW5kIGFuZCBzaGFsbCBzcGVjaWZ5IGEgdmFsaWQgcGF0aCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIDxjb2RlPklOVEVHRVI8L2NvZGU+IHN0YXR1cyBmbGFnIG9mIHRoZSBkZWZhdWx0CitraW5kLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuZCBhIHN5c3RlbSBzcGVjaWZpYyBhbmQgbm9uemVybyBlcnJvciBjb2RlCitvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfY2hkaXIKKyAgICAgICAgICAgIENIQVJBQ1RFUihsZW49MjU1KSA6OiBwYXRoCisgICAgICAgICAgICBDQUxMIGdldGN3ZChwYXRoKQorICAgICAgICAgICAgV1JJVEUoKiwqKSBUUklNKHBhdGgpCisgICAgICAgICAgICBDQUxMIGNoZGlyKCIvdG1wIikKKyAgICAgICAgICAgIENBTEwgZ2V0Y3dkKHBhdGgpCisgICAgICAgICAgICBXUklURSgqLCopIFRSSU0ocGF0aCkKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkdFVENXRC5odG1sI0dFVENXRCI+R0VUQ1dEPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NITU9ELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ0hNT0QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY3ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NITU9ELmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNITU9EIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNIRElSLmh0bWwjQ0hESVIiIHRpdGxlPSJDSERJUiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNNUExYLmh0bWwjQ01QTFgiIHRpdGxlPSJDTVBMWCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDSE1PRCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDTVBMWC5odG1sI0NNUExYIj5DTVBMWDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNIRElSLmh0bWwjQ0hESVIiPkNIRElSPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjQ4IDxjb2RlPkNITU9EPC9jb2RlPiAmbWRhc2g7IENoYW5nZSBhY2Nlc3MgcGVybWlzc2lvbnMgb2YgZmlsZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1DSE1PRC01MTkiPjwvYT48YSBuYW1lPSJpbmRleC1maWxlLXN5c3RlbV8wMDJjLWNoYW5nZS1hY2Nlc3MtbW9kZS01MjAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5DSE1PRDwvY29kZT4gY2hhbmdlcyB0aGUgcGVybWlzc2lvbnMgb2YgYSBmaWxlLgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIHByb3ZpZGVkIGluIGJvdGggc3Vicm91dGluZSBhbmQgZnVuY3Rpb24gZm9ybXM7IGhvd2V2ZXIsCitvbmx5IG9uZSBmb3JtIGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBwcm9ncmFtIHVuaXQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+Q0FMTCBDSE1PRChOQU1FLCBNT0RFWywgU1RBVFVTXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5TVEFUVVMgPSBDSE1PRChOQU1FLCBNT0RFKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+Cis8dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OQU1FPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TY2FsYXIgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiBvZiBkZWZhdWx0IGtpbmQgd2l0aCB0aGUKK2ZpbGUgbmFtZS4gVHJhaWxpbmcgYmxhbmtzIGFyZSBpZ25vcmVkIHVubGVzcyB0aGUgY2hhcmFjdGVyCis8Y29kZT5hY2hhcigwKTwvY29kZT4gaXMgcHJlc2VudCwgdGhlbiBhbGwgY2hhcmFjdGVycyB1cCB0byBhbmQgZXhjbHVkaW5nCis8Y29kZT5hY2hhcigwKTwvY29kZT4gYXJlIHVzZWQgYXMgdGhlIGZpbGUgbmFtZS4KKworICAgICA8cD48YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk1PREU8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNjYWxhciA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IG9mIGRlZmF1bHQga2luZCBnaXZpbmcgdGhlCitmaWxlIHBlcm1pc3Npb24uIDx2YXI+TU9ERTwvdmFyPiB1c2VzIHRoZSBzYW1lIHN5bnRheCBhcyB0aGUgPGNvZGU+Y2htb2Q8L2NvZGU+IHV0aWxpdHkKK2FzIGRlZmluZWQgYnkgdGhlIFBPU0lYIHN0YW5kYXJkLiBUaGUgYXJndW1lbnQgc2hhbGwgZWl0aGVyIGJlIGEgc3RyaW5nIG9mCithIG5vbm5lZ2F0aXZlIG9jdGFsIG51bWJlciBvciBhIHN5bWJvbGljIG1vZGUuCisKKyAgICAgPHA+PGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVEFUVVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihvcHRpb25hbCkgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+LCB3aGljaCBpcworPGNvZGU+MDwvY29kZT4gb24gc3VjY2VzcyBhbmQgbm9uemVybyBvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+SW4gZWl0aGVyIHN5bnRheCwgPHZhcj5TVEFUVVM8L3Zhcj4gaXMgc2V0IHRvIDxjb2RlPjA8L2NvZGU+IG9uIHN1Y2Nlc3MgYW5kIG5vbnplcm8KK290aGVyd2lzZS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPjxjb2RlPkNITU9EPC9jb2RlPiBhcyBzdWJyb3V0aW5lCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gY2htb2RfdGVzdAorICAgICAgICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgICAgICAgaW50ZWdlciA6OiBzdGF0dXMKKyAgICAgICAgICAgIGNhbGwgY2htb2QoJ3Rlc3QuZGF0JywndSt4JyxzdGF0dXMpCisgICAgICAgICAgICBwcmludCAqLCAnU3RhdHVzOiAnLCBzdGF0dXMKKyAgICAgICAgICBlbmQgcHJvZ3JhbSBjaG1vZF90ZXN0Cis8L3ByZT4KKyAgICAgPHA+PGNvZGU+Q0hNT0Q8L2NvZGU+IGFzIGZ1bmN0aW9uOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIGNobW9kX3Rlc3QKKyAgICAgICAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgICAgICAgIGludGVnZXIgOjogc3RhdHVzCisgICAgICAgICAgICBzdGF0dXMgPSBjaG1vZCgndGVzdC5kYXQnLCd1K3gnKQorICAgICAgICAgICAgcHJpbnQgKiwgJ1N0YXR1czogJywgc3RhdHVzCisgICAgICAgICAgZW5kIHByb2dyYW0gY2htb2RfdGVzdAorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DTVBMWC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NNUExYLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiNGJlYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DTVBMWC5odG1sCkBAIC0wLDAgKzEsOTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNNUExYIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNITU9ELmh0bWwjQ0hNT0QiIHRpdGxlPSJDSE1PRCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC5odG1sI0NPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVCIgdGl0bGU9IkNPTU1BTkRfQVJHVU1FTlRfQ09VTlQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ01QTFgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5ULmh0bWwjQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5UIj5DT01NQU5EX0FSR1VNRU5UX0NPVU5UPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ0hNT0QuaHRtbCNDSE1PRCI+Q0hNT0Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNDkgPGNvZGU+Q01QTFg8L2NvZGU+ICZtZGFzaDsgQ29tcGxleCBjb252ZXJzaW9uIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ01QTFgtNTIxIj48L2E+PGEgbmFtZT0iaW5kZXgtY29tcGxleC1udW1iZXJzXzAwMmMtY29udmVyc2lvbi10by01MjIiPjwvYT48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8tY29tcGxleC01MjMiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5DTVBMWChYIFssIFkgWywgS0lORF1dKTwvY29kZT4gcmV0dXJucyBhIGNvbXBsZXggbnVtYmVyIHdoZXJlIDx2YXI+WDwvdmFyPiBpcyBjb252ZXJ0ZWQgdG8KK3RoZSByZWFsIGNvbXBvbmVudC4gIElmIDx2YXI+WTwvdmFyPiBpcyBwcmVzZW50IGl0IGlzIGNvbnZlcnRlZCB0byB0aGUgaW1hZ2luYXJ5Citjb21wb25lbnQuICBJZiA8dmFyPlk8L3Zhcj4gaXMgbm90IHByZXNlbnQgdGhlbiB0aGUgaW1hZ2luYXJ5IGNvbXBvbmVudCBpcyBzZXQgdG8KKzAuMC4gIElmIDx2YXI+WDwvdmFyPiBpcyBjb21wbGV4IHRoZW4gPHZhcj5ZPC92YXI+IG11c3Qgbm90IGJlIHByZXNlbnQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQ01QTFgoWCBbLCBZIFssIEtJTkRdXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBtYXkgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4sIDxjb2RlPlJFQUw8L2NvZGU+LAorb3IgPGNvZGU+Q09NUExFWDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ZPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWw7IG9ubHkgYWxsb3dlZCBpZiA8dmFyPlg8L3Zhcj4gaXMgbm90Cis8Y29kZT5DT01QTEVYPC9jb2RlPi4pICBNYXkgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IgPGNvZGU+UkVBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiA8Y29kZT5DT01QTEVYPC9jb2RlPiB0eXBlLCB3aXRoIGEga2luZCBlcXVhbCB0bworPHZhcj5LSU5EPC92YXI+IGlmIGl0IGlzIHNwZWNpZmllZC4gIElmIDx2YXI+S0lORDwvdmFyPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUKK3Jlc3VsdCBpcyBvZiB0aGUgZGVmYXVsdCA8Y29kZT5DT01QTEVYPC9jb2RlPiBraW5kLCByZWdhcmRsZXNzIG9mIHRoZSBraW5kcyBvZgorPHZhcj5YPC92YXI+IGFuZCA8dmFyPlk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2NtcGx4CisgICAgICAgICAgICAgIGludGVnZXIgOjogaSA9IDQyCisgICAgICAgICAgICAgIHJlYWwgOjogeCA9IDMuMTQKKyAgICAgICAgICAgICAgY29tcGxleCA6OiB6CisgICAgICAgICAgICAgIHogPSBjbXBseChpLCB4KQorICAgICAgICAgICAgICBwcmludCAqLCB6LCBjbXBseCh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfY21wbHgKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDT01QTEVYLmh0bWwjQ09NUExFWCI+Q09NUExFWDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDA2OGIzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNPTU1BTkRfQVJHVU1FTlRfQ09VTlQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ01QTFguaHRtbCNDTVBMWCIgdGl0bGU9IkNNUExYIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ09NUElMRVJfMDA1Zk9QVElPTlMuaHRtbCNDT01QSUxFUl8wMDVmT1BUSU9OUyIgdGl0bGU9IkNPTVBJTEVSX09QVElPTlMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ09NTUFORF9BUkdVTUVOVF9DT1VOVCI+PC9hPgorPGEgbmFtZT0iQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5UIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNPTVBJTEVSXzAwNWZPUFRJT05TLmh0bWwjQ09NUElMRVJfMDA1Zk9QVElPTlMiPkNPTVBJTEVSX09QVElPTlM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDTVBMWC5odG1sI0NNUExYIj5DTVBMWDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC41MCA8Y29kZT5DT01NQU5EX0FSR1VNRU5UX0NPVU5UPC9jb2RlPiAmbWRhc2g7IEdldCBudW1iZXIgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUNPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC01MjQiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tYW5kXzAwMmRsaW5lLWFyZ3VtZW50cy01MjUiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tYW5kXzAwMmRsaW5lLWFyZ3VtZW50c18wMDJjLW51bWJlci1vZi01MjYiPjwvYT48YSBuYW1lPSJpbmRleC1hcmd1bWVudHNfMDAyYy10by1wcm9ncmFtLTUyNyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNPTU1BTkRfQVJHVU1FTlRfQ09VTlQ8L2NvZGU+IHJldHVybnMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZQorY29tbWFuZCBsaW5lIHdoZW4gdGhlIGNvbnRhaW5pbmcgcHJvZ3JhbSB3YXMgaW52b2tlZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBDT01NQU5EX0FSR1VNRU5UX0NPVU5UKCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+Tm9uZQorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgYW4gPGNvZGU+SU5URUdFUjwvY29kZT4gb2YgZGVmYXVsdCBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9jb21tYW5kX2FyZ3VtZW50X2NvdW50CisgICAgICAgICAgICAgIGludGVnZXIgOjogY291bnQKKyAgICAgICAgICAgICAgY291bnQgPSBjb21tYW5kX2FyZ3VtZW50X2NvdW50KCkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgY291bnQKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2NvbW1hbmRfYXJndW1lbnRfY291bnQKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJHRVRfMDA1ZkNPTU1BTkQuaHRtbCNHRVRfMDA1ZkNPTU1BTkQiPkdFVF9DT01NQU5EPC9hPiwgPGEgaHJlZj0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sI0dFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQiPkdFVF9DT01NQU5EX0FSR1VNRU5UPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPTVBJTEVSXzAwNWZPUFRJT05TLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ09NUElMRVJfMDA1Zk9QVElPTlMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTg4NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPTVBJTEVSXzAwNWZPUFRJT05TLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q09NUElMRVJfT1BUSU9OUyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQuaHRtbCNDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQiIHRpdGxlPSJDT01NQU5EX0FSR1VNRU5UX0NPVU5UIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ09NUElMRVJfMDA1ZlZFUlNJT04uaHRtbCNDT01QSUxFUl8wMDVmVkVSU0lPTiIgdGl0bGU9IkNPTVBJTEVSX1ZFUlNJT04iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ09NUElMRVJfT1BUSU9OUyI+PC9hPgorPGEgbmFtZT0iQ09NUElMRVJfMDA1Zk9QVElPTlMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ09NUElMRVJfMDA1ZlZFUlNJT04uaHRtbCNDT01QSUxFUl8wMDVmVkVSU0lPTiI+Q09NUElMRVJfVkVSU0lPTjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC5odG1sI0NPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVCI+Q09NTUFORF9BUkdVTUVOVF9DT1VOVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC41MSA8Y29kZT5DT01QSUxFUl9PUFRJT05TPC9jb2RlPiAmbWRhc2g7IE9wdGlvbnMgcGFzc2VkIHRvIHRoZSBjb21waWxlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUNPTVBJTEVSXzAwNWZPUFRJT05TLTUyOCI+PC9hPjxhIG5hbWU9ImluZGV4LWZsYWdzLWlucXVpcnktZnVuY3Rpb24tNTI5Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9ucy1pbnF1aXJ5LWZ1bmN0aW9uLTUzMCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbXBpbGVyLWZsYWdzLWlucXVpcnktZnVuY3Rpb24tNTMxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+Q09NUElMRVJfT1BUSU9OUzwvY29kZT4gcmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSBvcHRpb25zIHVzZWQgZm9yCitjb21waWxpbmcuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4CisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbiBvZiB0aGUgbW9kdWxlIDxjb2RlPklTT19GT1JUUkFOX0VOVjwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+U1RSID0gQ09NUElMRVJfT1BUSU9OUygpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD5Ob25lLgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIGEgZGVmYXVsdC1raW5kIHN0cmluZyB3aXRoIHN5c3RlbS1kZXBlbmRlbnQgbGVuZ3RoLiAKK0l0IGNvbnRhaW5zIHRoZSBjb21waWxlciBmbGFncyB1c2VkIHRvIGNvbXBpbGUgdGhlIGZpbGUsIHdoaWNoIGNhbGxlZAordGhlIDxjb2RlPkNPTVBJTEVSX09QVElPTlM8L2NvZGU+IGludHJpbnNpYy4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICB1c2UgaXNvX2ZvcnRyYW5fZW52CisgICAgICAgICAgICAgcHJpbnQgJyg0YSknLCAnVGhpcyBmaWxlIHdhcyBjb21waWxlZCBieSAnLCAmYW1wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfdmVyc2lvbigpLCAnIHVzaW5nIHRoZSBvcHRpb25zICcsICZhbXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9vcHRpb25zKCkKKyAgICAgICAgICAgICBlbmQKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDT01QSUxFUl8wMDVmVkVSU0lPTi5odG1sI0NPTVBJTEVSXzAwNWZWRVJTSU9OIj5DT01QSUxFUl9WRVJTSU9OPC9hPiwgPGEgaHJlZj0iSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlYuaHRtbCNJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOViI+SVNPX0ZPUlRSQU5fRU5WPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPTVBJTEVSXzAwNWZWRVJTSU9OLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ09NUElMRVJfMDA1ZlZFUlNJT04uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzhlMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPTVBJTEVSXzAwNWZWRVJTSU9OLmh0bWwKQEAgLTAsMCArMSw4NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q09NUElMRVJfVkVSU0lPTiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDT01QSUxFUl8wMDVmT1BUSU9OUy5odG1sI0NPTVBJTEVSXzAwNWZPUFRJT05TIiB0aXRsZT0iQ09NUElMRVJfT1BUSU9OUyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNPTVBMRVguaHRtbCNDT01QTEVYIiB0aXRsZT0iQ09NUExFWCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDT01QSUxFUl9WRVJTSU9OIj48L2E+Cis8YSBuYW1lPSJDT01QSUxFUl8wMDVmVkVSU0lPTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDT01QTEVYLmh0bWwjQ09NUExFWCI+Q09NUExFWDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNPTVBJTEVSXzAwNWZPUFRJT05TLmh0bWwjQ09NUElMRVJfMDA1Zk9QVElPTlMiPkNPTVBJTEVSX09QVElPTlM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNTIgPGNvZGU+Q09NUElMRVJfVkVSU0lPTjwvY29kZT4gJm1kYXNoOyBDb21waWxlciB2ZXJzaW9uIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUNPTVBJTEVSXzAwNWZWRVJTSU9OLTUzMiI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbXBpbGVyXzAwMmMtbmFtZS1hbmQtdmVyc2lvbi01MzMiPjwvYT48YSBuYW1lPSJpbmRleC12ZXJzaW9uLW9mLXRoZS1jb21waWxlci01MzQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5DT01QSUxFUl9WRVJTSU9OPC9jb2RlPiByZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIG5hbWUgYW5kIHRoZQordmVyc2lvbiBvZiB0aGUgY29tcGlsZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4CisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbiBvZiB0aGUgbW9kdWxlIDxjb2RlPklTT19GT1JUUkFOX0VOVjwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+U1RSID0gQ09NUElMRVJfVkVSU0lPTigpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD5Ob25lLgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIGEgZGVmYXVsdC1raW5kIHN0cmluZyB3aXRoIHN5c3RlbS1kZXBlbmRlbnQgbGVuZ3RoLiAKK0l0IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjb21waWxlciBhbmQgaXRzIHZlcnNpb24gbnVtYmVyLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIHVzZSBpc29fZm9ydHJhbl9lbnYKKyAgICAgICAgICAgICBwcmludCAnKDRhKScsICdUaGlzIGZpbGUgd2FzIGNvbXBpbGVkIGJ5ICcsICZhbXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl92ZXJzaW9uKCksICcgdXNpbmcgdGhlIG9wdGlvbnMgJywgJmFtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyX29wdGlvbnMoKQorICAgICAgICAgICAgIGVuZAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkNPTVBJTEVSXzAwNWZPUFRJT05TLmh0bWwjQ09NUElMRVJfMDA1Zk9QVElPTlMiPkNPTVBJTEVSX09QVElPTlM8L2E+LCA8YSBocmVmPSJJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOVi5odG1sI0lTT18wMDVmRk9SVFJBTl8wMDVmRU5WIj5JU09fRk9SVFJBTl9FTlY8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ09NUExFWC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPTVBMRVguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzE4MWViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPTVBMRVguaHRtbApAQCAtMCwwICsxLDkzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DT01QTEVYIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNPTVBJTEVSXzAwNWZWRVJTSU9OLmh0bWwjQ09NUElMRVJfMDA1ZlZFUlNJT04iIHRpdGxlPSJDT01QSUxFUl9WRVJTSU9OIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ09OSkcuaHRtbCNDT05KRyIgdGl0bGU9IkNPTkpHIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNPTVBMRVgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ09OSkcuaHRtbCNDT05KRyI+Q09OSkc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDT01QSUxFUl8wMDVmVkVSU0lPTi5odG1sI0NPTVBJTEVSXzAwNWZWRVJTSU9OIj5DT01QSUxFUl9WRVJTSU9OPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjUzIDxjb2RlPkNPTVBMRVg8L2NvZGU+ICZtZGFzaDsgQ29tcGxleCBjb252ZXJzaW9uIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ09NUExFWC01MzUiPjwvYT48YSBuYW1lPSJpbmRleC1jb21wbGV4LW51bWJlcnNfMDAyYy1jb252ZXJzaW9uLXRvLTUzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnZlcnNpb25fMDAyYy10by1jb21wbGV4LTUzNyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNPTVBMRVgoWCwgWSk8L2NvZGU+IHJldHVybnMgYSBjb21wbGV4IG51bWJlciB3aGVyZSA8dmFyPlg8L3Zhcj4gaXMgY29udmVydGVkCit0byB0aGUgcmVhbCBjb21wb25lbnQgYW5kIDx2YXI+WTwvdmFyPiBpcyBjb252ZXJ0ZWQgdG8gdGhlIGltYWdpbmFyeQorY29tcG9uZW50LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQ09NUExFWChYLCBZKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIG1heSBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvciA8Y29kZT5SRUFMPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIG1heSBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvciA8Y29kZT5SRUFMPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5JZiA8dmFyPlg8L3Zhcj4gYW5kIDx2YXI+WTwvdmFyPiBhcmUgYm90aCBvZiA8Y29kZT5JTlRFR0VSPC9jb2RlPiB0eXBlLCB0aGVuIHRoZSByZXR1cm4KK3ZhbHVlIGlzIG9mIGRlZmF1bHQgPGNvZGU+Q09NUExFWDwvY29kZT4gdHlwZS4KKworICAgICA8cD5JZiA8dmFyPlg8L3Zhcj4gYW5kIDx2YXI+WTwvdmFyPiBhcmUgb2YgPGNvZGU+UkVBTDwvY29kZT4gdHlwZSwgb3Igb25lIGlzIG9mIDxjb2RlPlJFQUw8L2NvZGU+Cit0eXBlIGFuZCBvbmUgaXMgb2YgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIG9mCis8Y29kZT5DT01QTEVYPC9jb2RlPiB0eXBlIHdpdGggYSBraW5kIGVxdWFsIHRvIHRoYXQgb2YgdGhlIDxjb2RlPlJFQUw8L2NvZGU+Cithcmd1bWVudCB3aXRoIHRoZSBoaWdoZXN0IHByZWNpc2lvbi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfY29tcGxleAorICAgICAgICAgICAgICBpbnRlZ2VyIDo6IGkgPSA0MgorICAgICAgICAgICAgICByZWFsIDo6IHggPSAzLjE0CisgICAgICAgICAgICAgIHByaW50ICosIGNvbXBsZXgoaSwgeCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2NvbXBsZXgKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDTVBMWC5odG1sI0NNUExYIj5DTVBMWDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DT05KRy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPTkpHLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzODYwNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DT05KRy5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNPTkpHIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNPTVBMRVguaHRtbCNDT01QTEVYIiB0aXRsZT0iQ09NUExFWCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNPUy5odG1sI0NPUyIgdGl0bGU9IkNPUyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDT05KRyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDT1MuaHRtbCNDT1MiPkNPUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNPTVBMRVguaHRtbCNDT01QTEVYIj5DT01QTEVYPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjU0IDxjb2RlPkNPTkpHPC9jb2RlPiAmbWRhc2g7IENvbXBsZXggY29uanVnYXRlIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ09OSkctNTM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtRENPTkpHLTUzOSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbXBsZXgtY29uanVnYXRlLTU0MCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNPTkpHKFopPC9jb2RlPiByZXR1cm5zIHRoZSBjb25qdWdhdGUgb2YgPHZhcj5aPC92YXI+LiAgSWYgPHZhcj5aPC92YXI+IGlzIDxjb2RlPih4LCB5KTwvY29kZT4KK3RoZW4gdGhlIHJlc3VsdCBpcyA8Y29kZT4oeCwgLXkpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyLCBoYXMgb3ZlcmxvYWRzIHRoYXQgYXJlIEdOVSBleHRlbnNpb25zCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlogPSBDT05KRyhaKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlo8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5DT01QTEVYPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfY29uamcKKyAgICAgICAgICAgICAgY29tcGxleCA6OiB6ID0gKDIuMCwgMy4wKQorICAgICAgICAgICAgICBjb21wbGV4KDgpIDo6IGR6ID0gKDIuNzFfOCwgLTMuMTRfOCkKKyAgICAgICAgICAgICAgej0gY29uamcoeikKKyAgICAgICAgICAgICAgcHJpbnQgKiwgegorICAgICAgICAgICAgICBkeiA9IGRjb25qZyhkeikKKyAgICAgICAgICAgICAgcHJpbnQgKiwgZHoKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2NvbmpnCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT05KRyhaKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYIFo8L2NvZGU+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWDwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRDT05KRyhaKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCkgWjwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ09OVkVSVC1zcGVjaWZpZXIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DT05WRVJULXNwZWNpZmllci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDliNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ09OVkVSVC1zcGVjaWZpZXIuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q09OVkVSVCBzcGVjaWZpZXIgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iIHRpdGxlPSJFeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ3JheS1wb2ludGVycy5odG1sI0NyYXktcG9pbnRlcnMiIHRpdGxlPSJDcmF5IHBvaW50ZXJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3Blbk1QLmh0bWwjT3Blbk1QIiB0aXRsZT0iT3Blbk1QIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNPTlZFUlQtc3BlY2lmaWVyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9wZW5NUC5odG1sI09wZW5NUCI+T3Blbk1QPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ3JheS1wb2ludGVycy5odG1sI0NyYXktcG9pbnRlcnMiPkNyYXkgcG9pbnRlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMS4xNSA8Y29kZT5DT05WRVJUPC9jb2RlPiBzcGVjaWZpZXI8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkNPTlZFUlRfMDA3ZC1zcGVjaWZpZXItMzQyIj48L2E+CitHTlUgRm9ydHJhbiBhbGxvd3MgdGhlIGNvbnZlcnNpb24gb2YgdW5mb3JtYXR0ZWQgZGF0YSBiZXR3ZWVuIGxpdHRsZS0KK2FuZCBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIHRvIGZhY2lsaXRhdGUgbW92aW5nIG9mIGRhdGEKK2JldHdlZW4gZGlmZmVyZW50IHN5c3RlbXMuICBUaGUgY29udmVyc2lvbiBjYW4gYmUgaW5kaWNhdGVkIHdpdGgKK3RoZSA8Y29kZT5DT05WRVJUPC9jb2RlPiBzcGVjaWZpZXIgb24gdGhlIDxjb2RlPk9QRU48L2NvZGU+IHN0YXRlbWVudC4gCitTZWUgPGEgaHJlZj0iR0ZPUlRSQU5fMDA1ZkNPTlZFUlRfMDA1ZlVOSVQuaHRtbCNHRk9SVFJBTl8wMDVmQ09OVkVSVF8wMDVmVU5JVCI+R0ZPUlRSQU5fQ09OVkVSVF9VTklUPC9hPiwgZm9yIGFuIGFsdGVybmF0aXZlIHdheSBvZiBzcGVjaWZ5aW5nCit0aGUgZGF0YSBmb3JtYXQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICA8cD5WYWxpZCB2YWx1ZXMgZm9yIDxjb2RlPkNPTlZFUlQ8L2NvZGU+IGFyZToKKyAgICAgPHVsPgorPGxpPjxjb2RlPkNPTlZFUlQ9J05BVElWRSc8L2NvZGU+IFVzZSB0aGUgbmF0aXZlIGZvcm1hdC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuIAorPGxpPjxjb2RlPkNPTlZFUlQ9J1NXQVAnPC9jb2RlPiBTd2FwIGJldHdlZW4gbGl0dGxlLSBhbmQgYmlnLWVuZGlhbi4gCis8bGk+PGNvZGU+Q09OVkVSVD0nTElUVExFX0VORElBTic8L2NvZGU+IFVzZSB0aGUgbGl0dGxlLWVuZGlhbiByZXByZXNlbnRhdGlvbgorZm9yIHVuZm9ybWF0dGVkIGZpbGVzLiAKKzxsaT48Y29kZT5DT05WRVJUPSdCSUdfRU5ESUFOJzwvY29kZT4gVXNlIHRoZSBiaWctZW5kaWFuIHJlcHJlc2VudGF0aW9uIGZvcgordW5mb3JtYXR0ZWQgZmlsZXMuIAorPC91bD4KKworICAgPHA+VXNpbmcgdGhlIG9wdGlvbiBjb3VsZCBsb29rIGxpa2UgdGhpczoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIG9wZW4oZmlsZT0nYmlnLmRhdCcsZm9ybT0ndW5mb3JtYXR0ZWQnLGFjY2Vzcz0nc2VxdWVudGlhbCcsICZhbXA7CisgICAgICAgICAgICBjb252ZXJ0PSdiaWdfZW5kaWFuJykKKzwvcHJlPgorICAgPHA+VGhlIHZhbHVlIG9mIHRoZSBjb252ZXJzaW9uIGNhbiBiZSBxdWVyaWVkIGJ5IHVzaW5nCis8Y29kZT5JTlFVSVJFKENPTlZFUlQ9Y2gpPC9jb2RlPi4gIFRoZSB2YWx1ZXMgcmV0dXJuZWQgYXJlCis8Y29kZT4nQklHX0VORElBTic8L2NvZGU+IGFuZCA8Y29kZT4nTElUVExFX0VORElBTic8L2NvZGU+LgorCisgICA8cD48Y29kZT5DT05WRVJUPC9jb2RlPiB3b3JrcyBiZXR3ZWVuIGJpZy0gYW5kIGxpdHRsZS1lbmRpYW4gZm9yCis8Y29kZT5JTlRFR0VSPC9jb2RlPiB2YWx1ZXMgb2YgYWxsIHN1cHBvcnRlZCBraW5kcyBhbmQgZm9yIDxjb2RlPlJFQUw8L2NvZGU+CitvbiBJRUVFIHN5c3RlbXMgb2Yga2luZHMgNCBhbmQgOC4gIENvbnZlcnNpb24gYmV0d2VlbiBkaWZmZXJlbnQKKyZsZHF1bztleHRlbmRlZCBkb3VibGUmcmRxdW87IHR5cGVzIG9uIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIHN1Y2ggYXMKK202OGsgYW5kIHg4Nl82NCwgd2hpY2ggR05VIEZvcnRyYW4KK3N1cHBvcnRzIGFzIDxjb2RlPlJFQUwoS0lORD0xMCk8L2NvZGU+IGFuZCA8Y29kZT5SRUFMKEtJTkQ9MTYpPC9jb2RlPiwgd2lsbAorcHJvYmFibHkgbm90IHdvcmsuCisKKyAgIDxwPjxlbT5Ob3RlIHRoYXQgdGhlIHZhbHVlcyBzcGVjaWZpZWQgdmlhIHRoZSBHRk9SVFJBTl9DT05WRVJUX1VOSVQKK2Vudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgb3ZlcnJpZGUgdGhlIENPTlZFUlQgc3BlY2lmaWVyIGluIHRoZQorb3BlbiBzdGF0ZW1lbnQ8L2VtPi4gIFRoaXMgaXMgdG8gZ2l2ZSBjb250cm9sIG92ZXIgZGF0YSBmb3JtYXRzIHRvCit1c2VycyB3aG8gZG8gbm90IGhhdmUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZWlyIHByb2dyYW0gYXZhaWxhYmxlLgorCisgICA8cD5Vc2luZyBhbnl0aGluZyBidXQgdGhlIG5hdGl2ZSByZXByZXNlbnRhdGlvbiBmb3IgdW5mb3JtYXR0ZWQgZGF0YQorY2FycmllcyBhIHNpZ25pZmljYW50IHNwZWVkIG92ZXJoZWFkLiAgSWYgc3BlZWQgaW4gdGhpcyBhcmVhIG1hdHRlcnMKK3RvIHlvdSwgaXQgaXMgYmVzdCBpZiB5b3UgdXNlIHRoaXMgb25seSBmb3IgZGF0YSB0aGF0IG5lZWRzIHRvIGJlCitwb3J0YWJsZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPUy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NTIyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ09TLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q09TIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNPTkpHLmh0bWwjQ09OSkciIHRpdGxlPSJDT05KRyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNPU0guaHRtbCNDT1NIIiB0aXRsZT0iQ09TSCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDT1MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ09TSC5odG1sI0NPU0giPkNPU0g8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDT05KRy5odG1sI0NPTkpHIj5DT05KRzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC41NSA8Y29kZT5DT1M8L2NvZGU+ICZtZGFzaDsgQ29zaW5lIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ09TLTU0MSI+PC9hPjxhIG5hbWU9ImluZGV4LURDT1MtNTQyIj48L2E+PGEgbmFtZT0iaW5kZXgtQ0NPUy01NDMiPjwvYT48YSBuYW1lPSJpbmRleC1aQ09TLTU0NCI+PC9hPjxhIG5hbWU9ImluZGV4LUNEQ09TLTU0NSI+PC9hPjxhIG5hbWU9ImluZGV4LXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25fMDAyYy1jb3NpbmUtNTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29zaW5lLTU0NyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNPUyhYKTwvY29kZT4gY29tcHV0ZXMgdGhlIGNvc2luZSBvZiA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIsIGhhcyBvdmVybG9hZHMgdGhhdCBhcmUgR05VIGV4dGVuc2lvbnMKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQ09TKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4gb3IKKzxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uIFRoZSByZWFsIHBhcnQKK29mIHRoZSByZXN1bHQgaXMgaW4gcmFkaWFucy4gSWYgPHZhcj5YPC92YXI+IGlzIG9mIHRoZSB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LAordGhlIHJldHVybiB2YWx1ZSBsaWVzIGluIHRoZSByYW5nZSAgLTEgXGxlcSBcY29zICh4KSBcbGVxIDEuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2NvcworICAgICAgICAgICAgcmVhbCA6OiB4ID0gMC4wCisgICAgICAgICAgICB4ID0gY29zKHgpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9jb3MKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT1MoWCk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+RENPUyhYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNDT1MoWCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg0KSBYPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg0KTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5aQ09TKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCkgWDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5HTlUgZXh0ZW5zaW9uCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DRENPUyhYKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCkgWDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5HTlUgZXh0ZW5zaW9uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD5JbnZlcnNlIGZ1bmN0aW9uOiA8YSBocmVmPSJBQ09TLmh0bWwjQUNPUyI+QUNPUzwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NPU0guaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DT1NILmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5ZTBiNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DT1NILmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q09TSCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDT1MuaHRtbCNDT1MiIHRpdGxlPSJDT1MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDT1VOVC5odG1sI0NPVU5UIiB0aXRsZT0iQ09VTlQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ09TSCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDT1VOVC5odG1sI0NPVU5UIj5DT1VOVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNPUy5odG1sI0NPUyI+Q09TPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjU2IDxjb2RlPkNPU0g8L2NvZGU+ICZtZGFzaDsgSHlwZXJib2xpYyBjb3NpbmUgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1DT1NILTU0OCI+PC9hPjxhIG5hbWU9ImluZGV4LURDT1NILTU0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWh5cGVyYm9saWMtY29zaW5lLTU1MCI+PC9hPjxhIG5hbWU9ImluZGV4LWh5cGVyYm9saWMtZnVuY3Rpb25fMDAyYy1jb3NpbmUtNTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtY29zaW5lXzAwMmMtaHlwZXJib2xpYy01NTIiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5DT1NIKFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyLCBmb3IgYSBjb21wbGV4IGFyZ3VtZW50IEZvcnRyYW4gMjAwOCBvciBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5YID0gQ09TSChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+IG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaGFzIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uIElmIDx2YXI+WDwvdmFyPiBpcworY29tcGxleCwgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSByZXN1bHQgaXMgaW4gcmFkaWFucy4gSWYgPHZhcj5YPC92YXI+CitpcyA8Y29kZT5SRUFMPC9jb2RlPiwgdGhlIHJldHVybiB2YWx1ZSBoYXMgYSBsb3dlciBib3VuZCBvZiBvbmUsCitcY29zaCAoeCkgXGdlcSAxLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9jb3NoCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAxLjBfOAorICAgICAgICAgICAgeCA9IGNvc2goeCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2Nvc2gKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09TSChYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5EQ09TSChYKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPkludmVyc2UgZnVuY3Rpb246IDxhIGhyZWY9IkFDT1NILmh0bWwjQUNPU0giPkFDT1NIPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ09VTlQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DT1VOVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkN2QzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ09VTlQuaHRtbApAQCAtMCwwICsxLDExMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q09VTlQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ09TSC5odG1sI0NPU0giIHRpdGxlPSJDT1NIIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ1BVXzAwNWZUSU1FLmh0bWwjQ1BVXzAwNWZUSU1FIiB0aXRsZT0iQ1BVX1RJTUUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ09VTlQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ1BVXzAwNWZUSU1FLmh0bWwjQ1BVXzAwNWZUSU1FIj5DUFVfVElNRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNPU0guaHRtbCNDT1NIIj5DT1NIPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjU3IDxjb2RlPkNPVU5UPC9jb2RlPiAmbWRhc2g7IENvdW50IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ09VTlQtNTUzIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1jb25kaXRpb25hbGx5LWNvdW50LWVsZW1lbnRzLTU1NCI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtZWxlbWVudC1jb3VudGluZy01NTUiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLW51bWJlci1vZi1lbGVtZW50cy01NTYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD4KK0NvdW50cyB0aGUgbnVtYmVyIG9mIDxjb2RlPi5UUlVFLjwvY29kZT4gZWxlbWVudHMgaW4gYSBsb2dpY2FsIDx2YXI+TUFTSzwvdmFyPiwKK29yLCBpZiB0aGUgPHZhcj5ESU08L3Zhcj4gYXJndW1lbnQgaXMgc3VwcGxpZWQsIGNvdW50cyB0aGUgbnVtYmVyIG9mCitlbGVtZW50cyBhbG9uZyBlYWNoIHJvdyBvZiB0aGUgYXJyYXkgaW4gdGhlIDx2YXI+RElNPC92YXI+IGRpcmVjdGlvbi4gCitJZiB0aGUgYXJyYXkgaGFzIHplcm8gc2l6ZSwgb3IgYWxsIG9mIHRoZSBlbGVtZW50cyBvZiA8dmFyPk1BU0s8L3Zhcj4gYXJlCis8Y29kZT4uRkFMU0UuPC9jb2RlPiwgdGhlbiB0aGUgcmVzdWx0IGlzIDxjb2RlPjA8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyLCB3aXRoIDx2YXI+S0lORDwvdmFyPiBhcmd1bWVudCBGb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+VHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBDT1VOVChNQVNLIFssIERJTSwgS0lORF0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+TE9HSUNBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ESU08L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBBbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbml0aWFsaXphdGlvbgorZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBraW5kIHBhcmFtZXRlciBvZiB0aGUgcmVzdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2Yga2luZCA8dmFyPktJTkQ8L3Zhcj4uIElmCis8dmFyPktJTkQ8L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9mIGRlZmF1bHQgaW50ZWdlciBraW5kLiAKK0lmIDx2YXI+RElNPC92YXI+IGlzIHByZXNlbnQsIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgd2l0aCBhIHJhbmsgb25lIGxlc3MKK3RoYW4gdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwgYW5kIGEgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzaGFwZQorb2YgPHZhcj5BUlJBWTwvdmFyPiB3aXRoIHRoZSA8dmFyPkRJTTwvdmFyPiBkaW1lbnNpb24gcmVtb3ZlZC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfY291bnQKKyAgICAgICAgICAgICAgaW50ZWdlciwgZGltZW5zaW9uKDIsMykgOjogYSwgYgorICAgICAgICAgICAgICBsb2dpY2FsLCBkaW1lbnNpb24oMiwzKSA6OiBtYXNrCisgICAgICAgICAgICAgIGEgPSByZXNoYXBlKCAoLyAxLCAyLCAzLCA0LCA1LCA2IC8pLCAoLyAyLCAzIC8pKQorICAgICAgICAgICAgICBiID0gcmVzaGFwZSggKC8gMCwgNywgMywgNCwgNSwgOCAvKSwgKC8gMiwgMyAvKSkKKyAgICAgICAgICAgICAgcHJpbnQgJygzaTMpJywgYSgxLDopCisgICAgICAgICAgICAgIHByaW50ICcoM2kzKScsIGEoMiw6KQorICAgICAgICAgICAgICBwcmludCAqCisgICAgICAgICAgICAgIHByaW50ICcoM2kzKScsIGIoMSw6KQorICAgICAgICAgICAgICBwcmludCAnKDNpMyknLCBiKDIsOikKKyAgICAgICAgICAgICAgcHJpbnQgKgorICAgICAgICAgICAgICBtYXNrID0gYS5uZS5iCisgICAgICAgICAgICAgIHByaW50ICcoM2wzKScsIG1hc2soMSw6KQorICAgICAgICAgICAgICBwcmludCAnKDNsMyknLCBtYXNrKDIsOikKKyAgICAgICAgICAgICAgcHJpbnQgKgorICAgICAgICAgICAgICBwcmludCAnKDNpMyknLCBjb3VudChtYXNrKQorICAgICAgICAgICAgICBwcmludCAqCisgICAgICAgICAgICAgIHByaW50ICcoM2kzKScsIGNvdW50KG1hc2ssIDEpCisgICAgICAgICAgICAgIHByaW50ICoKKyAgICAgICAgICAgICAgcHJpbnQgJygzaTMpJywgY291bnQobWFzaywgMikKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2NvdW50Cis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NQVV8wMDVmVElNRS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NQVV8wMDVmVElNRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZmJlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ1BVXzAwNWZUSU1FLmh0bWwKQEAgLTAsMCArMSw5OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q1BVX1RJTUUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ09VTlQuaHRtbCNDT1VOVCIgdGl0bGU9IkNPVU5UIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ1NISUZULmh0bWwjQ1NISUZUIiB0aXRsZT0iQ1NISUZUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNQVV9USU1FIj48L2E+Cis8YSBuYW1lPSJDUFVfMDA1ZlRJTUUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ1NISUZULmh0bWwjQ1NISUZUIj5DU0hJRlQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDT1VOVC5odG1sI0NPVU5UIj5DT1VOVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC41OCA8Y29kZT5DUFVfVElNRTwvY29kZT4gJm1kYXNoOyBDUFUgZWxhcHNlZCB0aW1lIGluIHNlY29uZHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1DUFVfMDA1ZlRJTUUtNTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtdGltZV8wMDJjLWVsYXBzZWQtNTU4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyBhIDxjb2RlPlJFQUw8L2NvZGU+IHZhbHVlIHJlcHJlc2VudGluZyB0aGUgZWxhcHNlZCBDUFUgdGltZSBpbgorc2Vjb25kcy4gIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHNlZ21lbnRzIG9mIGNvZGUgdG8gZGV0ZXJtaW5lCitleGVjdXRpb24gdGltZS4KKworICAgICA8cD5JZiBhIHRpbWUgc291cmNlIGlzIGF2YWlsYWJsZSwgdGltZSB3aWxsIGJlIHJlcG9ydGVkIHdpdGggbWljcm9zZWNvbmQKK3Jlc29sdXRpb24uIElmIG5vIHRpbWUgc291cmNlIGlzIGF2YWlsYWJsZSwgPHZhcj5USU1FPC92YXI+IGlzIHNldCB0bworPGNvZGU+LTEuMDwvY29kZT4uCisKKyAgICAgPHA+Tm90ZSB0aGF0IDx2YXI+VElNRTwvdmFyPiBtYXkgY29udGFpbiBhLCBzeXN0ZW0gZGVwZW5kZW50LCBhcmJpdHJhcnkgb2Zmc2V0CithbmQgbWF5IG5vdCBzdGFydCB3aXRoIDxjb2RlPjAuMDwvY29kZT4uIEZvciA8Y29kZT5DUFVfVElNRTwvY29kZT4sIHRoZSBhYnNvbHV0ZQordmFsdWUgaXMgbWVhbmluZ2xlc3MsIG9ubHkgZGlmZmVyZW5jZXMgYmV0d2VlbiBzdWJzZXF1ZW50IGNhbGxzIHRvCit0aGlzIHN1YnJvdXRpbmUsIGFzIHNob3duIGluIHRoZSBleGFtcGxlIGJlbG93LCBzaG91bGQgYmUgdXNlZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBDUFVfVElNRShUSU1FKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlRJTUU8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+IHdpdGggPGNvZGU+SU5URU5UKE9VVCk8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPk5vbmUKKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfY3B1X3RpbWUKKyAgICAgICAgICAgICAgcmVhbCA6OiBzdGFydCwgZmluaXNoCisgICAgICAgICAgICAgIGNhbGwgY3B1X3RpbWUoc3RhcnQpCisgICAgICAgICAgICAgICAgICAhIHB1dCBjb2RlIHRvIHRlc3QgaGVyZQorICAgICAgICAgICAgICBjYWxsIGNwdV90aW1lKGZpbmlzaCkKKyAgICAgICAgICAgICAgcHJpbnQgJygiVGltZSA9ICIsZjYuMywiIHNlY29uZHMuIiknLGZpbmlzaC1zdGFydAorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfY3B1X3RpbWUKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJTWVNURU1fMDA1ZkNMT0NLLmh0bWwjU1lTVEVNXzAwNWZDTE9DSyI+U1lTVEVNX0NMT0NLPC9hPiwgPGEgaHJlZj0iREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwjREFURV8wMDVmQU5EXzAwNWZUSU1FIj5EQVRFX0FORF9USU1FPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NTSElGVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NTSElGVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YjM3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ1NISUZULmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q1NISUZUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNQVV8wMDVmVElNRS5odG1sI0NQVV8wMDVmVElNRSIgdGl0bGU9IkNQVV9USU1FIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSIgdGl0bGU9IkNUSU1FIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNTSElGVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDVElNRS5odG1sI0NUSU1FIj5DVElNRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNQVV8wMDVmVElNRS5odG1sI0NQVV8wMDVmVElNRSI+Q1BVX1RJTUU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNTkgPGNvZGU+Q1NISUZUPC9jb2RlPiAmbWRhc2g7IENpcmN1bGFyIHNoaWZ0IGVsZW1lbnRzIG9mIGFuIGFycmF5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ1NISUZULTU1OSI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtc2hpZnQtY2lyY3VsYXJseS01NjAiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLXBlcm11dGF0aW9uLTU2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtcm90YXRlLTU2MiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNTSElGVChBUlJBWSwgU0hJRlQgWywgRElNXSk8L2NvZGU+IHBlcmZvcm1zIGEgY2lyY3VsYXIgc2hpZnQgb24gZWxlbWVudHMgb2YKKzx2YXI+QVJSQVk8L3Zhcj4gYWxvbmcgdGhlIGRpbWVuc2lvbiBvZiA8dmFyPkRJTTwvdmFyPi4gIElmIDx2YXI+RElNPC92YXI+IGlzIG9taXR0ZWQgaXQgaXMKK3Rha2VuIHRvIGJlIDxjb2RlPjE8L2NvZGU+LiAgPHZhcj5ESU08L3Zhcj4gaXMgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbiB0aGUKK3JhbmdlIG9mIDEgXGxlcSBESU0gXGxlcSBuKSB3aGVyZSBuIGlzIHRoZSByYW5rIG9mIDx2YXI+QVJSQVk8L3Zhcj4uIAorSWYgdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiBpcyBvbmUsIHRoZW4gYWxsIGVsZW1lbnRzIG9mIDx2YXI+QVJSQVk8L3Zhcj4gYXJlIHNoaWZ0ZWQKK2J5IDx2YXI+U0hJRlQ8L3Zhcj4gcGxhY2VzLiAgSWYgcmFuayBpcyBncmVhdGVyIHRoYW4gb25lLCB0aGVuIGFsbCBjb21wbGV0ZSByYW5rIG9uZQorc2VjdGlvbnMgb2YgPHZhcj5BUlJBWTwvdmFyPiBhbG9uZyB0aGUgZ2l2ZW4gZGltZW5zaW9uIGFyZSBzaGlmdGVkLiAgRWxlbWVudHMKK3NoaWZ0ZWQgb3V0IG9uZSBlbmQgb2YgZWFjaCByYW5rIG9uZSBzZWN0aW9uIGFyZSBzaGlmdGVkIGJhY2sgaW4gdGhlIG90aGVyIGVuZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQ1NISUZUKEFSUkFZLCBTSElGVCBbLCBESU1dKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkFSUkFZPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgYW55IHR5cGUuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TSElGVDwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5SZXR1cm5zIGFuIGFycmF5IG9mIHNhbWUgdHlwZSBhbmQgcmFuayBhcyB0aGUgPHZhcj5BUlJBWTwvdmFyPiBhcmd1bWVudC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfY3NoaWZ0CisgICAgICAgICAgICAgIGludGVnZXIsIGRpbWVuc2lvbigzLDMpIDo6IGEKKyAgICAgICAgICAgICAgYSA9IHJlc2hhcGUoICgvIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgLyksICgvIDMsIDMgLykpCisgICAgICAgICAgICAgIHByaW50ICcoM2kzKScsIGEoMSw6KQorICAgICAgICAgICAgICBwcmludCAnKDNpMyknLCBhKDIsOikKKyAgICAgICAgICAgICAgcHJpbnQgJygzaTMpJywgYSgzLDopCisgICAgICAgICAgICAgIGEgPSBjc2hpZnQoYSwgU0hJRlQ9KC8xLCAyLCAtMS8pLCBESU09MikKKyAgICAgICAgICAgICAgcHJpbnQgKgorICAgICAgICAgICAgICBwcmludCAnKDNpMyknLCBhKDEsOikKKyAgICAgICAgICAgICAgcHJpbnQgJygzaTMpJywgYSgyLDopCisgICAgICAgICAgICAgIHByaW50ICcoM2kzKScsIGEoMyw6KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfY3NoaWZ0Cis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NUSU1FLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ1RJTUUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGRiZTliCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NUSU1FLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNUSU1FIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNTSElGVC5odG1sI0NTSElGVCIgdGl0bGU9IkNTSElGVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI0RBVEVfMDA1ZkFORF8wMDVmVElNRSIgdGl0bGU9IkRBVEVfQU5EX1RJTUUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ1RJTUUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwjREFURV8wMDVmQU5EXzAwNWZUSU1FIj5EQVRFX0FORF9USU1FPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ1NISUZULmh0bWwjQ1NISUZUIj5DU0hJRlQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNjAgPGNvZGU+Q1RJTUU8L2NvZGU+ICZtZGFzaDsgQ29udmVydCBhIHRpbWUgaW50byBhIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUNUSU1FLTU2MyI+PC9hPjxhIG5hbWU9ImluZGV4LXRpbWVfMDAyYy1jb252ZXJzaW9uLXRvLXN0cmluZy01NjQiPjwvYT48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8tc3RyaW5nLTU2NSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNUSU1FPC9jb2RlPiBjb252ZXJ0cyBhIHN5c3RlbSB0aW1lIHZhbHVlLCBzdWNoIGFzIHJldHVybmVkIGJ5Cis8Y29kZT5USU1FODwvY29kZT4sIHRvIGEgc3RyaW5nLiBVbmxlc3MgdGhlIGFwcGxpY2F0aW9uIGhhcyBjYWxsZWQKKzxjb2RlPnNldGxvY2FsZTwvY29kZT4sIHRoZSBvdXRwdXQgd2lsbCBiZSBpbiB0aGUgZGVmYXVsdCBsb2NhbGUsIG9mIGxlbmd0aAorMjQgYW5kIG9mIHRoZSBmb3JtICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U2F0IEF1ZyAxOSAxODoxMzoxNCAxOTk1PC9zcGFuPjwvc2FtcD4mcnNxdW87LiBJbiBvdGhlciBsb2NhbGVzLAorYSBsb25nZXIgc3RyaW5nIG1heSByZXN1bHQuCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgaW4gYm90aCBzdWJyb3V0aW5lIGFuZCBmdW5jdGlvbiBmb3JtczsgaG93ZXZlciwKK29ubHkgb25lIGZvcm0gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIHByb2dyYW0gdW5pdC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZSwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5DQUxMIENUSU1FKFRJTUUsIFJFU1VMVCk8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IENUSU1FKFRJTUUpPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VElNRTwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlJFU1VMVDwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiBhbmQKK29mIGRlZmF1bHQga2luZC4gSXQgaXMgYW4gPGNvZGU+SU5URU5UKE9VVCk8L2NvZGU+IGFyZ3VtZW50LiBJZiB0aGUgbGVuZ3RoCitvZiB0aGlzIHZhcmlhYmxlIGlzIHRvbyBzaG9ydCBmb3IgdGhlIHRpbWUgYW5kIGRhdGUgc3RyaW5nIHRvIGZpdAorY29tcGxldGVseSwgaXQgd2lsbCBiZSBibGFuayBvbiBwcm9jZWR1cmUgcmV0dXJuLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSBjb252ZXJ0ZWQgZGF0ZSBhbmQgdGltZSBhcyBhIHN0cmluZy4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfY3RpbWUKKyAgICAgICAgICAgICAgaW50ZWdlcig4KSA6OiBpCisgICAgICAgICAgICAgIGNoYXJhY3RlcihsZW49MzApIDo6IGRhdGUKKyAgICAgICAgICAgICAgaSA9IHRpbWU4KCkKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgISBEbyBzb21ldGhpbmcsIG1haW4gcGFydCBvZiB0aGUgcHJvZ3JhbQorICAgICAgICAgIAorICAgICAgICAgICAgICBjYWxsIGN0aW1lKGksZGF0ZSkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgJ1Byb2dyYW0gd2FzIHN0YXJ0ZWQgb24gJywgZGF0ZQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfY3RpbWUKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgQWxzbzwvZW0+OjxkZD48YSBocmVmPSJEQVRFXzAwNWZBTkRfMDA1ZlRJTUUuaHRtbCNEQVRFXzAwNWZBTkRfMDA1ZlRJTUUiPkRBVEVfQU5EX1RJTUU8L2E+LCA8YSBocmVmPSJHTVRJTUUuaHRtbCNHTVRJTUUiPkdNVElNRTwvYT4sIDxhIGhyZWY9IkxUSU1FLmh0bWwjTFRJTUUiPkxUSU1FPC9hPiwgPGEgaHJlZj0iVElNRS5odG1sI1RJTUUiPlRJTUU8L2E+LCA8YSBocmVmPSJUSU1FOC5odG1sI1RJTUU4Ij5USU1FODwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DXzAwNWZBU1NPQ0lBVEVELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ18wMDVmQVNTT0NJQVRFRC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjNkZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ18wMDVmQVNTT0NJQVRFRC5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNfQVNTT0NJQVRFRCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCVEVTVC5odG1sI0JURVNUIiB0aXRsZT0iQlRFU1QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDXzAwNWZGXzAwNWZQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUE9JTlRFUiIgdGl0bGU9IkNfRl9QT0lOVEVSIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNfQVNTT0NJQVRFRCI+PC9hPgorPGEgbmFtZT0iQ18wMDVmQVNTT0NJQVRFRCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDXzAwNWZGXzAwNWZQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUE9JTlRFUiI+Q19GX1BPSU5URVI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCVEVTVC5odG1sI0JURVNUIj5CVEVTVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4zOSA8Y29kZT5DX0FTU09DSUFURUQ8L2NvZGU+ICZtZGFzaDsgU3RhdHVzIG9mIGEgQyBwb2ludGVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ18wMDVmQVNTT0NJQVRFRC00OTgiPjwvYT48YSBuYW1lPSJpbmRleC1hc3NvY2lhdGlvbi1zdGF0dXNfMDAyYy1DLXBvaW50ZXItNDk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtcG9pbnRlcl8wMDJjLUMtYXNzb2NpYXRpb24tc3RhdHVzLTUwMCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNfQVNTT0NJQVRFRChjX3BydF8xWywgY19wdHJfMl0pPC9jb2RlPiBkZXRlcm1pbmVzIHRoZSBzdGF0dXMgb2YgdGhlIEMgcG9pbnRlcgorPHZhcj5jX3B0cl8xPC92YXI+IG9yIGlmIDx2YXI+Y19wdHJfMTwvdmFyPiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCA8dmFyPmNfcHRyXzI8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gQ19BU1NPQ0lBVEVEKGNfcHJ0XzFbLCBjX3B0cl8yXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5jX3B0cl8xPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TY2FsYXIgb2YgdGhlIHR5cGUgPGNvZGU+Q19QVFI8L2NvZGU+IG9yIDxjb2RlPkNfRlVOUFRSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPmNfcHRyXzI8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2NhbGFyIG9mIHRoZSBzYW1lIHR5cGUgYXMgPHZhcj5jX3B0cl8xPC92YXI+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5MT0dJQ0FMPC9jb2RlPjsgaXQgaXMgPGNvZGU+LmZhbHNlLjwvY29kZT4gaWYgZWl0aGVyCis8dmFyPmNfcHRyXzE8L3Zhcj4gaXMgYSBDIE5VTEwgcG9pbnRlciBvciBpZiA8dmFyPmNfcHRyMTwvdmFyPiBhbmQgPHZhcj5jX3B0cl8yPC92YXI+Citwb2ludCB0byBkaWZmZXJlbnQgYWRkcmVzc2VzLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHN1YnJvdXRpbmUgYXNzb2NpYXRpb25fdGVzdChhLGIpCisgICAgICAgICAgICB1c2UgaXNvX2NfYmluZGluZywgb25seTogY19hc3NvY2lhdGVkLCBjX2xvYywgY19wdHIKKyAgICAgICAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgICAgICAgIHJlYWwsIHBvaW50ZXIgOjogYQorICAgICAgICAgICAgdHlwZShjX3B0cikgOjogYgorICAgICAgICAgICAgaWYoY19hc3NvY2lhdGVkKGIsIGNfbG9jKGEpKSkgJmFtcDsKKyAgICAgICAgICAgICAgIHN0b3AgJ2IgYW5kIGEgZG8gbm90IHBvaW50IHRvIHNhbWUgdGFyZ2V0JworICAgICAgICAgIGVuZCBzdWJyb3V0aW5lIGFzc29jaWF0aW9uX3Rlc3QKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDXzAwNWZMT0MuaHRtbCNDXzAwNWZMT0MiPkNfTE9DPC9hPiwgPGEgaHJlZj0iQ18wMDVmRlVOTE9DLmh0bWwjQ18wMDVmRlVOTE9DIj5DX0ZVTkxPQzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DXzAwNWZGVU5MT0MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DXzAwNWZGVU5MT0MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjVkMjQwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NfMDA1ZkZVTkxPQy5odG1sCkBAIC0wLDAgKzEsMTAyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DX0ZVTkxPQyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwNWZGXzAwNWZQUk9DUE9JTlRFUi5odG1sI0NfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSIiB0aXRsZT0iQ19GX1BST0NQT0lOVEVSIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ18wMDVmTE9DLmh0bWwjQ18wMDVmTE9DIiB0aXRsZT0iQ19MT0MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ19GVU5MT0MiPjwvYT4KKzxhIG5hbWU9IkNfMDA1ZkZVTkxPQyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDXzAwNWZMT0MuaHRtbCNDXzAwNWZMT0MiPkNfTE9DPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQUk9DUE9JTlRFUiI+Q19GX1BST0NQT0lOVEVSPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjQyIDxjb2RlPkNfRlVOTE9DPC9jb2RlPiAmbWRhc2g7IE9idGFpbiB0aGUgQyBhZGRyZXNzIG9mIGEgcHJvY2VkdXJlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ18wMDVmRlVOTE9DLTUwNSI+PC9hPjxhIG5hbWU9ImluZGV4LXBvaW50ZXJfMDAyYy1DLWFkZHJlc3Mtb2YtcHJvY2VkdXJlcy01MDYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5DX0ZVTkxPQyh4KTwvY29kZT4gZGV0ZXJtaW5lcyB0aGUgQyBhZGRyZXNzIG9mIHRoZSBhcmd1bWVudC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBDX0ZVTkxPQyh4KTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPng8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPkludGVyb3BlcmFibGUgZnVuY3Rpb24gb3IgcG9pbnRlciB0byBzdWNoIGZ1bmN0aW9uLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5DX0ZVTlBUUjwvY29kZT4gYW5kIGNvbnRhaW5zIHRoZSBDIGFkZHJlc3MKK29mIHRoZSBhcmd1bWVudC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBtb2R1bGUgeAorICAgICAgICAgICAgdXNlIGlzb19jX2JpbmRpbmcKKyAgICAgICAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgICAgICBjb250YWlucworICAgICAgICAgICAgc3Vicm91dGluZSBzdWIoYSkgYmluZChjKQorICAgICAgICAgICAgICByZWFsKGNfZmxvYXQpIDo6IGEKKyAgICAgICAgICAgICAgYSA9IHNxcnQoYSkrNS4wCisgICAgICAgICAgICBlbmQgc3Vicm91dGluZSBzdWIKKyAgICAgICAgICBlbmQgbW9kdWxlIHgKKyAgICAgICAgICBwcm9ncmFtIG1haW4KKyAgICAgICAgICAgIHVzZSBpc29fY19iaW5kaW5nCisgICAgICAgICAgICB1c2UgeAorICAgICAgICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgICAgICAgaW50ZXJmYWNlCisgICAgICAgICAgICAgIHN1YnJvdXRpbmUgbXlfcm91dGluZShwKSBiaW5kKGMsbmFtZT0nbXlDX2Z1bmMnKQorICAgICAgICAgICAgICAgIGltcG9ydCA6OiBjX2Z1bnB0cgorICAgICAgICAgICAgICAgIHR5cGUoY19mdW5wdHIpLCBpbnRlbnQoaW4pIDo6IHAKKyAgICAgICAgICAgICAgZW5kIHN1YnJvdXRpbmUKKyAgICAgICAgICAgIGVuZCBpbnRlcmZhY2UKKyAgICAgICAgICAgIGNhbGwgbXlfcm91dGluZShjX2Z1bmxvYyhzdWIpKQorICAgICAgICAgIGVuZCBwcm9ncmFtIG1haW4KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDXzAwNWZBU1NPQ0lBVEVELmh0bWwjQ18wMDVmQVNTT0NJQVRFRCI+Q19BU1NPQ0lBVEVEPC9hPiwgPGEgaHJlZj0iQ18wMDVmTE9DLmh0bWwjQ18wMDVmTE9DIj5DX0xPQzwvYT4sIDxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQT0lOVEVSIj5DX0ZfUE9JTlRFUjwvYT4sIDxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIiPkNfRl9QUk9DUE9JTlRFUjwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DXzAwNWZGXzAwNWZQT0lOVEVSLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ18wMDVmRl8wMDVmUE9JTlRFUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzA0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ18wMDVmRl8wMDVmUE9JTlRFUi5odG1sCkBAIC0wLDAgKzEsMTAwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DX0ZfUE9JTlRFUiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwNWZBU1NPQ0lBVEVELmh0bWwjQ18wMDVmQVNTT0NJQVRFRCIgdGl0bGU9IkNfQVNTT0NJQVRFRCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIiIHRpdGxlPSJDX0ZfUFJPQ1BPSU5URVIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ19GX1BPSU5URVIiPjwvYT4KKzxhIG5hbWU9IkNfMDA1ZkZfMDA1ZlBPSU5URVIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQUk9DUE9JTlRFUiI+Q19GX1BST0NQT0lOVEVSPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ18wMDVmQVNTT0NJQVRFRC5odG1sI0NfMDA1ZkFTU09DSUFURUQiPkNfQVNTT0NJQVRFRDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC40MCA8Y29kZT5DX0ZfUE9JTlRFUjwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IEMgaW50byBGb3J0cmFuIHBvaW50ZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1DXzAwNWZGXzAwNWZQT0lOVEVSLTUwMSI+PC9hPjxhIG5hbWU9ImluZGV4LXBvaW50ZXJfMDAyYy1jb252ZXJ0LUMtdG8tRm9ydHJhbi01MDIiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5DX0ZfUE9JTlRFUihDUFRSLCBGUFRSWywgU0hBUEVdKTwvY29kZT4gYXNzaWducyB0aGUgdGFyZ2V0IG9mIHRoZSBDIHBvaW50ZXIKKzx2YXI+Q1BUUjwvdmFyPiB0byB0aGUgRm9ydHJhbiBwb2ludGVyIDx2YXI+RlBUUjwvdmFyPiBhbmQgc3BlY2lmaWVzIGl0cyBzaGFwZS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIENfRl9QT0lOVEVSKENQVFIsIEZQVFJbLCBTSEFQRV0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+Q1BUUjwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPnNjYWxhciBvZiB0aGUgdHlwZSA8Y29kZT5DX1BUUjwvY29kZT4uIEl0IGlzCis8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkZQVFI8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5wb2ludGVyIGludGVyb3BlcmFibGUgd2l0aCA8dmFyPmNwdHI8L3Zhcj4uIEl0IGlzCis8Y29kZT5JTlRFTlQoT1VUKTwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TSEFQRTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBSYW5rLW9uZSBhcnJheSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+Cit3aXRoIDxjb2RlPklOVEVOVChJTik8L2NvZGU+LiBJdCBzaGFsbCBiZSBwcmVzZW50CitpZiBhbmQgb25seSBpZiA8dmFyPmZwdHI8L3Zhcj4gaXMgYW4gYXJyYXkuIFRoZSBzaXplCittdXN0IGJlIGVxdWFsIHRvIHRoZSByYW5rIG9mIDx2YXI+ZnB0cjwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gbWFpbgorICAgICAgICAgICAgdXNlIGlzb19jX2JpbmRpbmcKKyAgICAgICAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgICAgICAgIGludGVyZmFjZQorICAgICAgICAgICAgICBzdWJyb3V0aW5lIG15X3JvdXRpbmUocCkgYmluZChjLG5hbWU9J215Q19mdW5jJykKKyAgICAgICAgICAgICAgICBpbXBvcnQgOjogY19wdHIKKyAgICAgICAgICAgICAgICB0eXBlKGNfcHRyKSwgaW50ZW50KG91dCkgOjogcAorICAgICAgICAgICAgICBlbmQgc3Vicm91dGluZQorICAgICAgICAgICAgZW5kIGludGVyZmFjZQorICAgICAgICAgICAgdHlwZShjX3B0cikgOjogY3B0cgorICAgICAgICAgICAgcmVhbCxwb2ludGVyIDo6IGEoOikKKyAgICAgICAgICAgIGNhbGwgbXlfcm91dGluZShjcHRyKQorICAgICAgICAgICAgY2FsbCBjX2ZfcG9pbnRlcihjcHRyLCBhLCBbMTJdKQorICAgICAgICAgIGVuZCBwcm9ncmFtIG1haW4KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDXzAwNWZMT0MuaHRtbCNDXzAwNWZMT0MiPkNfTE9DPC9hPiwgPGEgaHJlZj0iQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQUk9DUE9JTlRFUiI+Q19GX1BST0NQT0lOVEVSPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzM1MjhlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNfRl9QUk9DUE9JTlRFUiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDXzAwNWZGXzAwNWZQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUE9JTlRFUiIgdGl0bGU9IkNfRl9QT0lOVEVSIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ18wMDVmRlVOTE9DLmh0bWwjQ18wMDVmRlVOTE9DIiB0aXRsZT0iQ19GVU5MT0MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ19GX1BST0NQT0lOVEVSIj48L2E+Cis8YSBuYW1lPSJDXzAwNWZGXzAwNWZQUk9DUE9JTlRFUiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDXzAwNWZGVU5MT0MuaHRtbCNDXzAwNWZGVU5MT0MiPkNfRlVOTE9DPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ18wMDVmRl8wMDVmUE9JTlRFUi5odG1sI0NfMDA1ZkZfMDA1ZlBPSU5URVIiPkNfRl9QT0lOVEVSPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjQxIDxjb2RlPkNfRl9QUk9DUE9JTlRFUjwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IEMgaW50byBGb3J0cmFuIHByb2NlZHVyZSBwb2ludGVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVItNTAzIj48L2E+PGEgbmFtZT0iaW5kZXgtcG9pbnRlcl8wMDJjLUMtYWRkcmVzcy1vZi1wb2ludGVycy01MDQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5DX0ZfUFJPQ1BPSU5URVIoQ1BUUiwgRlBUUik8L2NvZGU+IEFzc2lnbiB0aGUgdGFyZ2V0IG9mIHRoZSBDIGZ1bmN0aW9uIHBvaW50ZXIKKzx2YXI+Q1BUUjwvdmFyPiB0byB0aGUgRm9ydHJhbiBwcm9jZWR1cmUgcG9pbnRlciA8dmFyPkZQVFI8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBDX0ZfUFJPQ1BPSU5URVIoY3B0ciwgZnB0cik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5DUFRSPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+c2NhbGFyIG9mIHRoZSB0eXBlIDxjb2RlPkNfRlVOUFRSPC9jb2RlPi4gSXQgaXMKKzxjb2RlPklOVEVOVChJTik8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RlBUUjwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPnByb2NlZHVyZSBwb2ludGVyIGludGVyb3BlcmFibGUgd2l0aCA8dmFyPmNwdHI8L3Zhcj4uIEl0IGlzCis8Y29kZT5JTlRFTlQoT1VUKTwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIG1haW4KKyAgICAgICAgICAgIHVzZSBpc29fY19iaW5kaW5nCisgICAgICAgICAgICBpbXBsaWNpdCBub25lCisgICAgICAgICAgICBhYnN0cmFjdCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgZnVuY3Rpb24gZnVuYyhhKQorICAgICAgICAgICAgICAgIGltcG9ydCA6OiBjX2Zsb2F0CisgICAgICAgICAgICAgICAgcmVhbChjX2Zsb2F0KSwgaW50ZW50KGluKSA6OiBhCisgICAgICAgICAgICAgICAgcmVhbChjX2Zsb2F0KSA6OiBmdW5jCisgICAgICAgICAgICAgIGVuZCBmdW5jdGlvbgorICAgICAgICAgICAgZW5kIGludGVyZmFjZQorICAgICAgICAgICAgaW50ZXJmYWNlCisgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRJdGVyRnVuYygpIGJpbmQoYyxuYW1lPSJnZXRJdGVyRnVuYyIpCisgICAgICAgICAgICAgICAgIGltcG9ydCA6OiBjX2Z1bnB0cgorICAgICAgICAgICAgICAgICB0eXBlKGNfZnVucHRyKSA6OiBnZXRJdGVyRnVuYworICAgICAgICAgICAgICAgZW5kIGZ1bmN0aW9uCisgICAgICAgICAgICBlbmQgaW50ZXJmYWNlCisgICAgICAgICAgICB0eXBlKGNfZnVucHRyKSA6OiBjZnVucHRyCisgICAgICAgICAgICBwcm9jZWR1cmUoZnVuYyksIHBvaW50ZXIgOjogbXlGdW5jCisgICAgICAgICAgICBjZnVucHRyID0gZ2V0SXRlckZ1bmMoKQorICAgICAgICAgICAgY2FsbCBjX2ZfcHJvY3BvaW50ZXIoY2Z1bnB0ciwgbXlGdW5jKQorICAgICAgICAgIGVuZCBwcm9ncmFtIG1haW4KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDXzAwNWZMT0MuaHRtbCNDXzAwNWZMT0MiPkNfTE9DPC9hPiwgPGEgaHJlZj0iQ18wMDVmRl8wMDVmUE9JTlRFUi5odG1sI0NfMDA1ZkZfMDA1ZlBPSU5URVIiPkNfRl9QT0lOVEVSPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NfMDA1ZkxPQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NfMDA1ZkxPQy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzI2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ18wMDVmTE9DLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q19MT0MgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ18wMDVmRlVOTE9DLmh0bWwjQ18wMDVmRlVOTE9DIiB0aXRsZT0iQ19GVU5MT0MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDXzAwNWZTSVpFT0YuaHRtbCNDXzAwNWZTSVpFT0YiIHRpdGxlPSJDX1NJWkVPRiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDX0xPQyI+PC9hPgorPGEgbmFtZT0iQ18wMDVmTE9DIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNfMDA1ZlNJWkVPRi5odG1sI0NfMDA1ZlNJWkVPRiI+Q19TSVpFT0Y8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDXzAwNWZGVU5MT0MuaHRtbCNDXzAwNWZGVU5MT0MiPkNfRlVOTE9DPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjQzIDxjb2RlPkNfTE9DPC9jb2RlPiAmbWRhc2g7IE9idGFpbiB0aGUgQyBhZGRyZXNzIG9mIGFuIG9iamVjdDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUNfMDA1ZkxPQy01MDciPjwvYT48YSBuYW1lPSJpbmRleC1wcm9jZWR1cmUtcG9pbnRlcl8wMDJjLWNvbnZlcnQtQy10by1Gb3J0cmFuLTUwOCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNfTE9DKFgpPC9jb2RlPiBkZXRlcm1pbmVzIHRoZSBDIGFkZHJlc3Mgb2YgdGhlIGFyZ3VtZW50LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IENfTE9DKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxMCUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9Ijc1JSI+U2hhbGwgaGF2ZSBlaXRoZXIgdGhlIFBPSU5URVIgb3IgVEFSR0VUIGF0dHJpYnV0ZS4gSXQgc2hhbGwgbm90IGJlIGEgY29pbmRleGVkIG9iamVjdC4gSXQgc2hhbGwgZWl0aGVyIGJlIGEgdmFyaWFibGUgd2l0aCBpbnRlcm9wZXJhYmxlIHR5cGUgYW5kIGtpbmQgdHlwZSBwYXJhbWV0ZXJzLCBvciBiZSBhIHNjYWxhciwgbm9ucG9seW1vcnBoaWMgdmFyaWFibGUgd2l0aCBubyBsZW5ndGggdHlwZSBwYXJhbWV0ZXJzLgorCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPkNfUFRSPC9jb2RlPiBhbmQgY29udGFpbnMgdGhlIEMgYWRkcmVzcworb2YgdGhlIGFyZ3VtZW50LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHN1YnJvdXRpbmUgYXNzb2NpYXRpb25fdGVzdChhLGIpCisgICAgICAgICAgICB1c2UgaXNvX2NfYmluZGluZywgb25seTogY19hc3NvY2lhdGVkLCBjX2xvYywgY19wdHIKKyAgICAgICAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgICAgICAgIHJlYWwsIHBvaW50ZXIgOjogYQorICAgICAgICAgICAgdHlwZShjX3B0cikgOjogYgorICAgICAgICAgICAgaWYoY19hc3NvY2lhdGVkKGIsIGNfbG9jKGEpKSkgJmFtcDsKKyAgICAgICAgICAgICAgIHN0b3AgJ2IgYW5kIGEgZG8gbm90IHBvaW50IHRvIHNhbWUgdGFyZ2V0JworICAgICAgICAgIGVuZCBzdWJyb3V0aW5lIGFzc29jaWF0aW9uX3Rlc3QKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDXzAwNWZBU1NPQ0lBVEVELmh0bWwjQ18wMDVmQVNTT0NJQVRFRCI+Q19BU1NPQ0lBVEVEPC9hPiwgPGEgaHJlZj0iQ18wMDVmRlVOTE9DLmh0bWwjQ18wMDVmRlVOTE9DIj5DX0ZVTkxPQzwvYT4sIDxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQT0lOVEVSIj5DX0ZfUE9JTlRFUjwvYT4sIDxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIiPkNfRl9QUk9DUE9JTlRFUjwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DXzAwNWZTSVpFT0YuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9DXzAwNWZTSVpFT0YuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRiMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NfMDA1ZlNJWkVPRi5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNfU0laRU9GIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNfMDA1ZkxPQy5odG1sI0NfMDA1ZkxPQyIgdGl0bGU9IkNfTE9DIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ0VJTElORy5odG1sI0NFSUxJTkciIHRpdGxlPSJDRUlMSU5HIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNfU0laRU9GIj48L2E+Cis8YSBuYW1lPSJDXzAwNWZTSVpFT0YiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ0VJTElORy5odG1sI0NFSUxJTkciPkNFSUxJTkc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDXzAwNWZMT0MuaHRtbCNDXzAwNWZMT0MiPkNfTE9DPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjQ0IDxjb2RlPkNfU0laRU9GPC9jb2RlPiAmbWRhc2g7IFNpemUgaW4gYnl0ZXMgb2YgYW4gZXhwcmVzc2lvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUNfMDA1ZlNJWkVPRi01MDkiPjwvYT48YSBuYW1lPSJpbmRleC1leHByZXNzaW9uLXNpemUtNTEwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2l6ZS1vZi1hbi1leHByZXNzaW9uLTUxMSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkNfU0laRU9GKFgpPC9jb2RlPiBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2Ygc3RvcmFnZSB0aGUKK2V4cHJlc3Npb24gPGNvZGU+WDwvY29kZT4gb2NjdXBpZXMuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4CisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbiBvZiB0aGUgbW9kdWxlIDxjb2RlPklTT19DX0JJTkRJTkc8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPk4gPSBDX1NJWkVPRihYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSBhcmd1bWVudCBzaGFsbCBiZSBhbiBpbnRlcm9wZXJhYmxlIGRhdGEgZW50aXR5LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSBpbnRlZ2VyIGFuZCBvZiB0aGUgc3lzdGVtLWRlcGVuZGVudCBraW5kCis8Y29kZT5DX1NJWkVfVDwvY29kZT4gKGZyb20gdGhlIDxjb2RlPklTT19DX0JJTkRJTkc8L2NvZGU+IG1vZHVsZSkuIEl0cyB2YWx1ZSBpcyB0aGUKK251bWJlciBvZiBieXRlcyBvY2N1cGllZCBieSB0aGUgYXJndW1lbnQuICBJZiB0aGUgYXJndW1lbnQgaGFzIHRoZQorPGNvZGU+UE9JTlRFUjwvY29kZT4gYXR0cmlidXRlLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBzdG9yYWdlIGFyZWEgcG9pbnRlZAordG8gaXMgcmV0dXJuZWQuICBJZiB0aGUgYXJndW1lbnQgaXMgb2YgYSBkZXJpdmVkIHR5cGUgd2l0aCA8Y29kZT5QT0lOVEVSPC9jb2RlPgorb3IgPGNvZGU+QUxMT0NBVEFCTEU8L2NvZGU+IGNvbXBvbmVudHMsIHRoZSByZXR1cm4gdmFsdWUgZG9lcyBub3QgYWNjb3VudCBmb3IKK3RoZSBzaXplcyBvZiB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IHRoZXNlIGNvbXBvbmVudHMuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgdXNlIGlzb19jX2JpbmRpbmcKKyAgICAgICAgICAgICBpbnRlZ2VyKGNfaW50KSA6OiBpCisgICAgICAgICAgICAgcmVhbChjX2Zsb2F0KSA6OiByLCBzKDUpCisgICAgICAgICAgICAgcHJpbnQgKiwgKGNfc2l6ZW9mKHMpL2Nfc2l6ZW9mKHIpID09IDUpCisgICAgICAgICAgICAgZW5kCis8L3ByZT4KKyAgICAgPHA+VGhlIGV4YW1wbGUgd2lsbCBwcmludCA8Y29kZT4uVFJVRS48L2NvZGU+IHVubGVzcyB5b3UgYXJlIHVzaW5nIGEgcGxhdGZvcm0KK3doZXJlIGRlZmF1bHQgPGNvZGU+UkVBTDwvY29kZT4gdmFyaWFibGVzIGFyZSB1bnVzdWFsbHkgcGFkZGVkLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlNJWkVPRi5odG1sI1NJWkVPRiI+U0laRU9GPC9hPiwgPGEgaHJlZj0iU1RPUkFHRV8wMDVmU0laRS5odG1sI1NUT1JBR0VfMDA1ZlNJWkUiPlNUT1JBR0VfU0laRTwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Db2RlLUdlbi1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ29kZS1HZW4tT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDk0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ29kZS1HZW4tT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMzk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db2RlIEdlbiBPcHRpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJ1bnRpbWUtT3B0aW9ucy5odG1sI1J1bnRpbWUtT3B0aW9ucyIgdGl0bGU9IlJ1bnRpbWUgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyIgdGl0bGU9IkVudmlyb25tZW50IFZhcmlhYmxlcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb2RlLUdlbi1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+RW52aXJvbm1lbnQgVmFyaWFibGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUnVudGltZS1PcHRpb25zLmh0bWwjUnVudGltZS1PcHRpb25zIj5SdW50aW1lIE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy1HTlUtRm9ydHJhbi5odG1sI0ludm9raW5nLUdOVS1Gb3J0cmFuIj5JbnZva2luZyBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuOSBPcHRpb25zIGZvciBjb2RlIGdlbmVyYXRpb24gY29udmVudGlvbnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb2RlLWdlbmVyYXRpb25fMDAyYy1jb252ZW50aW9ucy0yMzAiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtY29kZS1nZW5lcmF0aW9uLTIzMSI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1ydW5fMDAyZHRpbWUtMjMyIj48L2E+CitUaGVzZSBtYWNoaW5lLWluZGVwZW5kZW50IG9wdGlvbnMgY29udHJvbCB0aGUgaW50ZXJmYWNlIGNvbnZlbnRpb25zCit1c2VkIGluIGNvZGUgZ2VuZXJhdGlvbi4KKworICAgPHA+TW9zdCBvZiB0aGVtIGhhdmUgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXM7IHRoZSBuZWdhdGl2ZSBmb3JtCitvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZvbzwvc3Bhbj48L3NhbXA+IHdvdWxkIGJlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZm9vPC9zcGFuPjwvc2FtcD4uICBJbiB0aGUgdGFibGUgYmVsb3csIG9ubHkKK29uZSBvZiB0aGUgZm9ybXMgaXMgbGlzdGVkJm1kYXNoO3RoZSBvbmUgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0LiAgWW91CitjYW4gZmlndXJlIG91dCB0aGUgb3RoZXIgZm9ybSBieSBlaXRoZXIgcmVtb3ZpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+bm8tPC9zcGFuPjwvc2FtcD4gb3IgYWRkaW5nCitpdC4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZuby1hdXRvbWF0aWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZm5vXzAwMmRhdXRvbWF0aWNfMDA3ZC0yMzMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlNBVkVfMDA3ZC1zdGF0ZW1lbnQtMjM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50XzAwMmMtXzAwNDBjb2RlXzAwN2JTQVZFXzAwN2QtMjM1Ij48L2E+VHJlYXQgZWFjaCBwcm9ncmFtIHVuaXQgKGV4Y2VwdCB0aG9zZSBtYXJrZWQgYXMgUkVDVVJTSVZFKSBhcyBpZiB0aGUKKzxjb2RlPlNBVkU8L2NvZGU+IHN0YXRlbWVudCB3ZXJlIHNwZWNpZmllZCBmb3IgZXZlcnkgbG9jYWwgdmFyaWFibGUgYW5kIGFycmF5CityZWZlcmVuY2VkIGluIGl0LiBEb2VzIG5vdCBhZmZlY3QgY29tbW9uIGJsb2Nrcy4gKFNvbWUgRm9ydHJhbiBjb21waWxlcnMKK3Byb3ZpZGUgdGhpcyBvcHRpb24gdW5kZXIgdGhlIG5hbWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0YXRpYzwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zYXZlPC9zcGFuPjwvc2FtcD4uKSAKK1RoZSBkZWZhdWx0LCB3aGljaCBpcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmF1dG9tYXRpYzwvc3Bhbj48L3NhbXA+LCB1c2VzIHRoZSBzdGFjayBmb3IgbG9jYWwKK3ZhcmlhYmxlcyBzbWFsbGVyIHRoYW4gdGhlIHZhbHVlIGdpdmVuIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbWF4LXN0YWNrLXZhci1zaXplPC9zcGFuPjwvc2FtcD4uIAorVXNlIHRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZWN1cnNpdmU8L3NwYW4+PC9zYW1wPiB0byB1c2Ugbm8gc3RhdGljIG1lbW9yeS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZjJjPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1mZjJjLTIzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWNhbGxpbmctY29udmVudGlvbi0yMzciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3YmYyY18wMDdkLWNhbGxpbmctY29udmVudGlvbi0yMzgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ymc3N18wMDdkLWNhbGxpbmctY29udmVudGlvbi0yMzkiPjwvYT48YSBuYW1lPSJpbmRleC1saWJmMmMtY2FsbGluZy1jb252ZW50aW9uLTI0MCI+PC9hPkdlbmVyYXRlIGNvZGUgZGVzaWduZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGNvZGUgZ2VuZXJhdGVkCitieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Zzc3PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5mMmM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD5UaGUgY2FsbGluZyBjb252ZW50aW9ucyB1c2VkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPiAob3JpZ2luYWxseSBpbXBsZW1lbnRlZAoraW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmYyYzwvc3Bhbj48L3NhbXA+KSByZXF1aXJlIGZ1bmN0aW9ucyB0aGF0IHJldHVybiB0eXBlCitkZWZhdWx0IDxjb2RlPlJFQUw8L2NvZGU+IHRvIGFjdHVhbGx5IHJldHVybiB0aGUgQyB0eXBlIDxjb2RlPmRvdWJsZTwvY29kZT4sIGFuZAorZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHR5cGUgPGNvZGU+Q09NUExFWDwvY29kZT4gdG8gcmV0dXJuIHRoZSB2YWx1ZXMgdmlhIGFuCitleHRyYSBhcmd1bWVudCBpbiB0aGUgY2FsbGluZyBzZXF1ZW5jZSB0aGF0IHBvaW50cyB0byB3aGVyZSB0bworc3RvcmUgdGhlIHJldHVybiB2YWx1ZS4gIFVuZGVyIHRoZSBkZWZhdWx0IEdOVSBjYWxsaW5nIGNvbnZlbnRpb25zLCBzdWNoCitmdW5jdGlvbnMgc2ltcGx5IHJldHVybiB0aGVpciByZXN1bHRzIGFzIHRoZXkgd291bGQgaW4gR05VCitDJm1kYXNoO2RlZmF1bHQgPGNvZGU+UkVBTDwvY29kZT4gZnVuY3Rpb25zIHJldHVybiB0aGUgQyB0eXBlIDxjb2RlPmZsb2F0PC9jb2RlPiwgYW5kCis8Y29kZT5DT01QTEVYPC9jb2RlPiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBHTlUgQyB0eXBlIDxjb2RlPmNvbXBsZXg8L2NvZGU+LiAKK0FkZGl0aW9uYWxseSwgdGhpcyBvcHRpb24gaW1wbGllcyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZzZWNvbmQtdW5kZXJzY29yZTwvc3Bhbj48L3NhbXA+CitvcHRpb24sIHVubGVzcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXNlY29uZC11bmRlcnNjb3JlPC9zcGFuPjwvc2FtcD4gaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuCisKKyAgICAgPHA+VGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIGdlbmVyYXRpb24gb2YgY29kZSB0aGF0IGludGVyZmFjZXMgd2l0aAordGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5saWJnZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGxpYnJhcnkuCisKKyAgICAgPHA+PGVtPkNhdXRpb246PC9lbT4gSXQgaXMgbm90IGEgZ29vZCBpZGVhIHRvIG1peCBGb3J0cmFuIGNvZGUgY29tcGlsZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmMmM8L3NwYW4+PC9zYW1wPiB3aXRoIGNvZGUgY29tcGlsZWQgd2l0aCB0aGUgZGVmYXVsdCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWYyYzwvc3Bhbj48L3NhbXA+CitjYWxsaW5nIGNvbnZlbnRpb25zIGFzLCBjYWxsaW5nIDxjb2RlPkNPTVBMRVg8L2NvZGU+IG9yIGRlZmF1bHQgPGNvZGU+UkVBTDwvY29kZT4KK2Z1bmN0aW9ucyBiZXR3ZWVuIHByb2dyYW0gcGFydHMgd2hpY2ggd2VyZSBjb21waWxlZCB3aXRoIGRpZmZlcmVudAorY2FsbGluZyBjb252ZW50aW9ucyB3aWxsIGJyZWFrIGF0IGV4ZWN1dGlvbiB0aW1lLgorCisgICAgIDxwPjxlbT5DYXV0aW9uOjwvZW0+IFRoaXMgd2lsbCBicmVhayBjb2RlIHdoaWNoIHBhc3NlcyBpbnRyaW5zaWMgZnVuY3Rpb25zCitvZiB0eXBlIGRlZmF1bHQgPGNvZGU+UkVBTDwvY29kZT4gb3IgPGNvZGU+Q09NUExFWDwvY29kZT4gYXMgYWN0dWFsIGFyZ3VtZW50cywgYXMKK3RoZSBsaWJyYXJ5IGltcGxlbWVudGF0aW9ucyB1c2UgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZjJjPC9zcGFuPjwvc2FtcD4gY2FsbGluZyBjb252ZW50aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tdW5kZXJzY29yaW5nPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZub18wMDJkdW5kZXJzY29yaW5nXzAwN2QtMjQxIj48L2E+PGEgbmFtZT0iaW5kZXgtdW5kZXJzY29yZS0yNDIiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy11bmRlcnNjb3Jlcy0yNDMiPjwvYT48YSBuYW1lPSJpbmRleC10cmFuc2Zvcm1pbmctc3ltYm9sLW5hbWVzLTI0NCI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bWJvbC1uYW1lc18wMDJjLXRyYW5zZm9ybWluZy0yNDUiPjwvYT5EbyBub3QgdHJhbnNmb3JtIG5hbWVzIG9mIGVudGl0aWVzIHNwZWNpZmllZCBpbiB0aGUgRm9ydHJhbgorc291cmNlIGZpbGUgYnkgYXBwZW5kaW5nIHVuZGVyc2NvcmVzIHRvIHRoZW0uCisKKyAgICAgPHA+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVuZGVyc2NvcmluZzwvc3Bhbj48L3NhbXA+IGluIGVmZmVjdCwgR05VIEZvcnRyYW4gYXBwZW5kcyBvbmUKK3VuZGVyc2NvcmUgdG8gZXh0ZXJuYWwgbmFtZXMgd2l0aCBubyB1bmRlcnNjb3Jlcy4gIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUKK2NvbXBhdGliaWxpdHkgd2l0aCBjb2RlIHByb2R1Y2VkIGJ5IG1hbnkgVU5JWCBGb3J0cmFuIGNvbXBpbGVycy4KKworICAgICA8cD48ZW0+Q2F1dGlvbjwvZW0+OiBUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiBHTlUgRm9ydHJhbiBpcworaW5jb21wYXRpYmxlIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmYyYzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Zzc3PC9zcGFuPjwvc2FtcD4sIHBsZWFzZSB1c2UgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmYyYzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpZiB5b3Ugd2FudCBvYmplY3QgZmlsZXMgY29tcGlsZWQgd2l0aAorR05VIEZvcnRyYW4gdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9iamVjdCBjb2RlIGNyZWF0ZWQgd2l0aCB0aGVzZQordG9vbHMuCisKKyAgICAgPHA+VXNlIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tdW5kZXJzY29yaW5nPC9zcGFuPjwvc2FtcD4gaXMgbm90IHJlY29tbWVuZGVkIHVubGVzcyB5b3UgYXJlCitleHBlcmltZW50aW5nIHdpdGggaXNzdWVzIHN1Y2ggYXMgaW50ZWdyYXRpb24gb2YgR05VIEZvcnRyYW4gaW50bworZXhpc3Rpbmcgc3lzdGVtIGVudmlyb25tZW50cyAodmlzLSZhZ3JhdmU7LXZpcyBleGlzdGluZyBsaWJyYXJpZXMsIHRvb2xzLAorYW5kIHNvIG9uKS4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnVuZGVyc2NvcmluZzwvc3Bhbj48L3NhbXA+LCBhbmQgYXNzdW1pbmcgb3RoZXIgZGVmYXVsdHMgbGlrZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZjYXNlLWxvd2VyPC9zcGFuPjwvc2FtcD4gYW5kIHRoYXQgPGNvZGU+aigpPC9jb2RlPiBhbmQgPGNvZGU+bWF4X2NvdW50KCk8L2NvZGU+IGFyZQorZXh0ZXJuYWwgZnVuY3Rpb25zIHdoaWxlIDxjb2RlPm15X3ZhcjwvY29kZT4gYW5kIDxjb2RlPmx2YXI8L2NvZGU+IGFyZSBsb2NhbCB2YXJpYWJsZXMsCithIHN0YXRlbWVudCBsaWtlCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIEkgPSBKKCkgKyBNQVhfQ09VTlQgKE1ZX1ZBUiwgTFZBUikKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmlzIGltcGxlbWVudGVkIGFzIHNvbWV0aGluZyBha2luIHRvOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBpID0gal8oKSArIG1heF9jb3VudF9fKCZhbXA7bXlfdmFyX18sICZhbXA7bHZhcik7Cis8L3ByZT4KKyAgICAgPHA+V2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXVuZGVyc2NvcmluZzwvc3Bhbj48L3NhbXA+LCB0aGUgc2FtZSBzdGF0ZW1lbnQgaXMgaW1wbGVtZW50ZWQgYXM6CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaSA9IGooKSArIG1heF9jb3VudCgmYW1wO215X3ZhciwgJmFtcDtsdmFyKTsKKzwvcHJlPgorICAgICA8cD5Vc2Ugb2YgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby11bmRlcnNjb3Jpbmc8L3NwYW4+PC9zYW1wPiBhbGxvd3MgZGlyZWN0IHNwZWNpZmljYXRpb24gb2YKK3VzZXItZGVmaW5lZCBuYW1lcyB3aGlsZSBkZWJ1Z2dpbmcgYW5kIHdoZW4gaW50ZXJmYWNpbmcgR05VIEZvcnRyYW4KK2NvZGUgd2l0aCBvdGhlciBsYW5ndWFnZXMuCisKKyAgICAgPHA+Tm90ZSB0aGF0IGp1c3QgYmVjYXVzZSB0aGUgbmFtZXMgbWF0Y2ggZG9lcyA8ZW0+bm90PC9lbT4gbWVhbiB0aGF0IHRoZQoraW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IEdOVSBGb3J0cmFuIGZvciBhbiBleHRlcm5hbCBuYW1lIG1hdGNoZXMgdGhlCitpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgc29tZSBvdGhlciBsYW5ndWFnZSBmb3IgdGhhdCBzYW1lIG5hbWUuIAorVGhhdCBpcywgZ2V0dGluZyBjb2RlIHByb2R1Y2VkIGJ5IEdOVSBGb3J0cmFuIHRvIGxpbmsgdG8gY29kZSBwcm9kdWNlZAorYnkgc29tZSBvdGhlciBjb21waWxlciB1c2luZyB0aGlzIG9yIGFueSBvdGhlciBtZXRob2QgY2FuIGJlIG9ubHkgYQorc21hbGwgcGFydCBvZiB0aGUgb3ZlcmFsbCBzb2x1dGlvbiZtZGFzaDtnZXR0aW5nIHRoZSBjb2RlIGdlbmVyYXRlZCBieQorYm90aCBjb21waWxlcnMgdG8gYWdyZWUgb24gaXNzdWVzIG90aGVyIHRoYW4gbmFtaW5nIGNhbiByZXF1aXJlCitzaWduaWZpY2FudCBlZmZvcnQsIGFuZCwgdW5saWtlIG5hbWluZyBkaXNhZ3JlZW1lbnRzLCBsaW5rZXJzIG5vcm1hbGx5CitjYW5ub3QgZGV0ZWN0IGRpc2FncmVlbWVudHMgaW4gdGhlc2Ugb3RoZXIgYXJlYXMuCisKKyAgICAgPHA+QWxzbywgbm90ZSB0aGF0IHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby11bmRlcnNjb3Jpbmc8L3NwYW4+PC9zYW1wPiwgdGhlIGxhY2sgb2YgYXBwZW5kZWQKK3VuZGVyc2NvcmVzIGludHJvZHVjZXMgdGhlIHZlcnkgcmVhbCBwb3NzaWJpbGl0eSB0aGF0IGEgdXNlci1kZWZpbmVkCitleHRlcm5hbCBuYW1lIHdpbGwgY29uZmxpY3Qgd2l0aCBhIG5hbWUgaW4gYSBzeXN0ZW0gbGlicmFyeSwgd2hpY2gKK2NvdWxkIG1ha2UgZmluZGluZyB1bnJlc29sdmVkLXJlZmVyZW5jZSBidWdzIHF1aXRlIGRpZmZpY3VsdCBpbiBzb21lCitjYXNlcyZtZGFzaDt0aGV5IG1pZ2h0IG9jY3VyIGF0IHByb2dyYW0gcnVuIHRpbWUsIGFuZCBzaG93IHVwIG9ubHkgYXMKK2J1Z2d5IGJlaGF2aW9yIGF0IHJ1biB0aW1lLgorCisgICAgIDxwPkluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBHTlUgRm9ydHJhbiB3ZSBob3BlIHRvIGltcHJvdmUgbmFtaW5nIGFuZCBsaW5raW5nCitpc3N1ZXMgc28gdGhhdCBkZWJ1Z2dpbmcgYWx3YXlzIGludm9sdmVzIHVzaW5nIHRoZSBuYW1lcyBhcyB0aGV5IGFwcGVhcgoraW4gdGhlIHNvdXJjZSwgZXZlbiBpZiB0aGUgbmFtZXMgYXMgc2VlbiBieSB0aGUgbGlua2VyIGFyZSBtYW5nbGVkIHRvCitwcmV2ZW50IGFjY2lkZW50YWwgbGlua2luZyBiZXR3ZWVuIHByb2NlZHVyZXMgd2l0aCBpbmNvbXBhdGlibGUKK2ludGVyZmFjZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLXdob2xlLWZpbGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZm5vXzAwMmR3aG9sZV8wMDJkZmlsZV8wMDdkLTI0NiI+PC9hPlRoaXMgZmxhZyBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIHJlc29sdmUgYW5kIHRyYW5zbGF0ZSBlYWNoIHByb2NlZHVyZSBpbgorYSBmaWxlIHNlcGFyYXRlbHkuCisKKyAgICAgPHA+QnkgZGVmYXVsdCwgdGhlIHdob2xlIGZpbGUgaXMgcGFyc2VkIGFuZCBwbGFjZWQgaW4gYSBzaW5nbGUgZnJvbnQtZW5kIHRyZWUuIAorRHVyaW5nIHJlc29sdXRpb24sIGluIGFkZGl0aW9uIHRvIGFsbCB0aGUgdXN1YWwgY2hlY2tzIGFuZCBmaXh1cHMsIHJlZmVyZW5jZXMKK3RvIGV4dGVybmFsIHByb2NlZHVyZXMgdGhhdCBhcmUgaW4gdGhlIHNhbWUgZmlsZSBlZmZlY3QgcmVzb2x1dGlvbiBvZgordGhhdCBwcm9jZWR1cmUsIGlmIG5vdCBhbHJlYWR5IGRvbmUsIGFuZCBhIGNoZWNrIG9mIHRoZSBpbnRlcmZhY2VzLiAgVGhlCitkZXBlbmRlbmNlcyBhcmUgcmVzb2x2ZWQgYnkgY2hhbmdpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmaWxlIGlzCit0cmFuc2xhdGVkIGludG8gdGhlIGJhY2tlbmQgdHJlZS4gIFRodXMsIGEgcHJvY2VkdXJlIHRoYXQgaXMgcmVmZXJlbmNlZAoraXMgdHJhbnNsYXRlZCBiZWZvcmUgdGhlIHJlZmVyZW5jZSBhbmQgdGhlIGR1cGxpY2F0aW9uIG9mIGJhY2tlbmQgdHJlZQorZGVjbGFyYXRpb25zIGVsaW1pbmF0ZWQuCisKKyAgICAgPHA+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8td2hvbGUtZmlsZTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBtYXkgbGVhZCB0byB3cm9uZyBjb2RlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzZWNvbmQtdW5kZXJzY29yZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmc2Vjb25kXzAwMmR1bmRlcnNjb3JlXzAwN2QtMjQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtdW5kZXJzY29yZS0yNDgiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy11bmRlcnNjb3Jlcy0yNDkiPjwvYT48YSBuYW1lPSJpbmRleC10cmFuc2Zvcm1pbmctc3ltYm9sLW5hbWVzLTI1MCI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bWJvbC1uYW1lc18wMDJjLXRyYW5zZm9ybWluZy0yNTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3YmYyY18wMDdkLWNhbGxpbmctY29udmVudGlvbi0yNTIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ymc3N18wMDdkLWNhbGxpbmctY29udmVudGlvbi0yNTMiPjwvYT48YSBuYW1lPSJpbmRleC1saWJmMmMtY2FsbGluZy1jb252ZW50aW9uLTI1NCI+PC9hPkJ5IGRlZmF1bHQsIEdOVSBGb3J0cmFuIGFwcGVuZHMgYW4gdW5kZXJzY29yZSB0byBleHRlcm5hbAorbmFtZXMuICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIEdOVSBGb3J0cmFuIGFwcGVuZHMgdHdvCit1bmRlcnNjb3JlcyB0byBuYW1lcyB3aXRoIHVuZGVyc2NvcmVzIGFuZCBvbmUgdW5kZXJzY29yZSB0byBleHRlcm5hbCBuYW1lcword2l0aCBubyB1bmRlcnNjb3Jlcy4gIEdOVSBGb3J0cmFuIGFsc28gYXBwZW5kcyB0d28gdW5kZXJzY29yZXMgdG8KK2ludGVybmFsIG5hbWVzIHdpdGggdW5kZXJzY29yZXMgdG8gYXZvaWQgbmFtaW5nIGNvbGxpc2lvbnMgd2l0aCBleHRlcm5hbAorbmFtZXMuCisKKyAgICAgPHA+VGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXVuZGVyc2NvcmluZzwvc3Bhbj48L3NhbXA+IGlzCitpbiBlZmZlY3QuICBJdCBpcyBpbXBsaWVkIGJ5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmYyYzwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8cD5PdGhlcndpc2UsIHdpdGggdGhpcyBvcHRpb24sIGFuIGV4dGVybmFsIG5hbWUgc3VjaCBhcyA8Y29kZT5NQVhfQ09VTlQ8L2NvZGU+CitpcyBpbXBsZW1lbnRlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgbGluay10aW1lIGV4dGVybmFsIHN5bWJvbAorPGNvZGU+bWF4X2NvdW50X188L2NvZGU+LCBpbnN0ZWFkIG9mIDxjb2RlPm1heF9jb3VudF88L2NvZGU+LiAgVGhpcyBpcyByZXF1aXJlZAorZm9yIGNvbXBhdGliaWxpdHkgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Zzc3PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5mMmM8L3NwYW4+PC9zYW1wPiwgYW5kIGlzIGltcGxpZWQKK2J5IHVzZSBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmMmM8L3NwYW4+PC9zYW1wPiBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmNvYXJyYXk9PC9jb2RlPjx2YXI+Jmx0O2tleXdvcmQmZ3Q7PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmNvYXJyYXlfMDA3ZC0yNTUiPjwvYT48YSBuYW1lPSJpbmRleC1jb2FycmF5cy0yNTYiPjwvYT4KKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub25lPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRpc2FibGUgY29hcnJheSBzdXBwb3J0OyB1c2luZyBjb2FycmF5IGRlY2xhcmF0aW9ucyBhbmQgaW1hZ2UtY29udHJvbAorc3RhdGVtZW50cyB3aWxsIHByb2R1Y2UgYSBjb21waWxlLXRpbWUgZXJyb3IuIChEZWZhdWx0KQorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNpbmdsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TaW5nbGUtaW1hZ2UgbW9kZSwgaS5lLiA8Y29kZT5udW1faW1hZ2VzKCk8L2NvZGU+IGlzIGFsd2F5cyBvbmUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGliPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkxpYnJhcnktYmFzZWQgY29hcnJheSBwYXJhbGxlbGl6YXRpb247IGEgc3VpdGFibGUgR05VIEZvcnRyYW4gY29hcnJheQorbGlicmFyeSBuZWVkcyB0byBiZSBsaW5rZWQuIAorPC9kbD4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mY2hlY2s9PC9jb2RlPjx2YXI+Jmx0O2tleXdvcmQmZ3Q7PC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmNoZWNrXzAwN2QtMjU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1ib3VuZHMtY2hlY2tpbmctMjU4Ij48L2E+PGEgbmFtZT0iaW5kZXgtYm91bmRzLWNoZWNraW5nLTI1OSI+PC9hPjxhIG5hbWU9ImluZGV4LXBvaW50ZXItY2hlY2tpbmctMjYwIj48L2E+PGEgbmFtZT0iaW5kZXgtbWVtb3J5LWNoZWNraW5nLTI2MSI+PC9hPjxhIG5hbWU9ImluZGV4LXJhbmdlLWNoZWNraW5nLTI2MiI+PC9hPjxhIG5hbWU9ImluZGV4LXN1YnNjcmlwdC1jaGVja2luZy0yNjMiPjwvYT48YSBuYW1lPSJpbmRleC1jaGVja2luZy1zdWJzY3JpcHRzLTI2NCI+PC9hPjxhIG5hbWU9ImluZGV4LXJ1bl8wMDJkdGltZS1jaGVja2luZy0yNjUiPjwvYT48YSBuYW1lPSJpbmRleC1jaGVja2luZy1hcnJheS10ZW1wb3Jhcmllcy0yNjYiPjwvYT4KK0VuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBydW4tdGltZSBjaGVja3M7IHRoZSBhcmd1bWVudCBzaGFsbCBiZQorYSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiB0aGUgZm9sbG93aW5nIGtleXdvcmRzLgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWxsPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBhbGwgcnVuLXRpbWUgdGVzdCBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmNoZWNrPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJyYXktdGVtcHM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+V2FybnMgYXQgcnVuIHRpbWUgd2hlbiBmb3IgcGFzc2luZyBhbiBhY3R1YWwgYXJndW1lbnQgYSB0ZW1wb3JhcnkgYXJyYXkKK2hhZCB0byBiZSBnZW5lcmF0ZWQuIFRoZSBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgYnkgdGhpcyB3YXJuaW5nIGlzCitzb21ldGltZXMgdXNlZnVsIGluIG9wdGltaXphdGlvbiwgaW4gb3JkZXIgdG8gYXZvaWQgc3VjaCB0ZW1wb3Jhcmllcy4KKworICAgICAgICAgIDxwPk5vdGU6IFRoZSB3YXJuaW5nIGlzIG9ubHkgcHJpbnRlZCBvbmNlIHBlciBsb2NhdGlvbi4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ib3VuZHM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlIGdlbmVyYXRpb24gb2YgcnVuLXRpbWUgY2hlY2tzIGZvciBhcnJheSBzdWJzY3JpcHRzCithbmQgYWdhaW5zdCB0aGUgZGVjbGFyZWQgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuICBJdCBhbHNvCitjaGVja3MgYXJyYXkgaW5kaWNlcyBmb3IgYXNzdW1lZCBhbmQgZGVmZXJyZWQKK3NoYXBlIGFycmF5cyBhZ2FpbnN0IHRoZSBhY3R1YWwgYWxsb2NhdGVkIGJvdW5kcyBhbmQgZW5zdXJlcyB0aGF0IGFsbCBzdHJpbmcKK2xlbmd0aHMgYXJlIGVxdWFsIGZvciBjaGFyYWN0ZXIgYXJyYXkgY29uc3RydWN0b3JzIHdpdGhvdXQgYW4gZXhwbGljaXQKK3R5cGVzcGVjLgorCisgICAgICAgICAgPHA+U29tZSBjaGVja3MgcmVxdWlyZSB0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY2hlY2s9Ym91bmRzPC9zcGFuPjwvc2FtcD4gaXMgc2V0IGZvcgordGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBtYWluIHByb2dyYW0uCisKKyAgICAgICAgICA8cD5Ob3RlOiBJbiB0aGUgZnV0dXJlIHRoaXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBmb3JtcyBvZiBjaGVja2luZywgZS5nLiwKK2NoZWNraW5nIHN1YnN0cmluZyByZWZlcmVuY2VzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRvPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkVuYWJsZSBnZW5lcmF0aW9uIG9mIHJ1bi10aW1lIGNoZWNrcyBmb3IgaW52YWxpZCBtb2RpZmljYXRpb24gb2YgbG9vcAoraXRlcmF0aW9uIHZhcmlhYmxlcy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tZW08L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlIGdlbmVyYXRpb24gb2YgcnVuLXRpbWUgY2hlY2tzIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gCitOb3RlOiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgZXhwbGljaXQgYWxsb2NhdGlvbnMgdXNpbmcgdGhlCis8Y29kZT5BTExPQ0FURTwvY29kZT4gc3RhdGVtZW50LCB3aGljaCB3aWxsIGJlIGFsd2F5cyBjaGVja2VkLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnBvaW50ZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RW5hYmxlIGdlbmVyYXRpb24gb2YgcnVuLXRpbWUgY2hlY2tzIGZvciBwb2ludGVycyBhbmQgYWxsb2NhdGFibGVzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlY3Vyc2lvbjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5FbmFibGUgZ2VuZXJhdGlvbiBvZiBydW4tdGltZSBjaGVja3MgZm9yIHJlY3Vyc2l2ZWx5IGNhbGxlZCBzdWJyb3V0aW5lcyBhbmQKK2Z1bmN0aW9ucyB3aGljaCBhcmUgbm90IG1hcmtlZCBhcyByZWN1cnNpdmUuIFNlZSBhbHNvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcmVjdXJzaXZlPC9zcGFuPjwvc2FtcD4uIAorTm90ZTogVGhpcyBjaGVjayBkb2VzIG5vdCB3b3JrIGZvciBPcGVuTVAgcHJvZ3JhbXMgYW5kIGlzIGRpc2FibGVkIGlmIHVzZWQKK3RvZ2V0aGVyIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZWN1cnNpdmU8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZvcGVubXA8L3NwYW4+PC9zYW1wPi4gCis8L2RsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZib3VuZHMtY2hlY2s8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmJvdW5kc18wMDJkY2hlY2tfMDA3ZC0yNjciPjwvYT48IS0tIE5vdGU6IFRoaXMgb3B0aW9uIGlzIGFsc28gcmVmZXJyZWQgaW4gZ2NjJ3MgbWFucGFnZSAtLT4KK0RlcHJlY2F0ZWQgYWxpYXMgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY2hlY2s9Ym91bmRzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmNoZWNrLWFycmF5LXRlbXBvcmFyaWVzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZjaGVja18wMDJkYXJyYXlfMDAyZHRlbXBvcmFyaWVzXzAwN2QtMjY4Ij48L2E+RGVwcmVjYXRlZCBhbGlhcyBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZjaGVjaz1hcnJheS10ZW1wczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZtYXgtYXJyYXktY29uc3RydWN0b3I9PC9jb2RlPjx2YXI+bjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZtYXhfMDAyZGFycmF5XzAwMmRjb25zdHJ1Y3Rvcl8wMDdkLTI2OSI+PC9hPlRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGluY3JlYXNlIHRoZSB1cHBlciBsaW1pdCBwZXJtaXR0ZWQgaW4KK2FycmF5IGNvbnN0cnVjdG9ycy4gIFRoZSBjb2RlIGJlbG93IHJlcXVpcmVzIHRoaXMgb3B0aW9uIHRvIGV4cGFuZAordGhlIGFycmF5IGF0IGNvbXBpbGUgdGltZS4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3QKKyAgICAgICAgICBpbXBsaWNpdCBub25lCisgICAgICAgICAgaW50ZWdlciBqCisgICAgICAgICAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IG4gPSAxMDAwMDAKKyAgICAgICAgICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogaShuKSA9ICgvICgyKmosIGogPSAxLCBuKSAvKQorICAgICAgICAgIHByaW50ICcoMTAoSTAsMVgpKScsIGkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0Cis8L3ByZT4KKyAgICAgPHA+PGVtPkNhdXRpb246ICBUaGlzIG9wdGlvbiBjYW4gbGVhZCB0byBsb25nIGNvbXBpbGUgdGltZXMgYW5kIGV4Y2Vzc2l2ZWx5CitsYXJnZSBvYmplY3QgZmlsZXMuPC9lbT4KKworICAgICA8cD5UaGUgZGVmYXVsdCB2YWx1ZSBmb3IgPHZhcj5uPC92YXI+IGlzIDY1NTM1LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZtYXgtc3RhY2stdmFyLXNpemU9PC9jb2RlPjx2YXI+bjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZtYXhfMDAyZHN0YWNrXzAwMmR2YXJfMDAyZHNpemVfMDA3ZC0yNzAiPjwvYT5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGxhcmdlc3QgYXJyYXkgdGhhdCB3aWxsIGJlIHB1dAorb24gdGhlIHN0YWNrOyBpZiB0aGUgc2l6ZSBpcyBleGNlZWRlZCBzdGF0aWMgbWVtb3J5IGlzIHVzZWQgKGV4Y2VwdCBpbgorcHJvY2VkdXJlcyBtYXJrZWQgYXMgUkVDVVJTSVZFKS4gVXNlIHRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZWN1cnNpdmU8L3NwYW4+PC9zYW1wPiB0bworYWxsb3cgZm9yIHJlY3Vyc2l2ZSBwcm9jZWR1cmVzIHdoaWNoIGRvIG5vdCBoYXZlIGEgUkVDVVJTSVZFIGF0dHJpYnV0ZSBvcgorZm9yIHBhcmFsbGVsIHByb2dyYW1zLiBVc2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1hdXRvbWF0aWM8L3NwYW4+PC9zYW1wPiB0byBuZXZlciB1c2UgdGhlIHN0YWNrLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGN1cnJlbnRseSBvbmx5IGFmZmVjdHMgbG9jYWwgYXJyYXlzIGRlY2xhcmVkIHdpdGggY29uc3RhbnQKK2JvdW5kcywgYW5kIG1heSBub3QgYXBwbHkgdG8gYWxsIGNoYXJhY3RlciB2YXJpYWJsZXMuIAorRnV0dXJlIHZlcnNpb25zIG9mIEdOVSBGb3J0cmFuIG1heSBpbXByb3ZlIHRoaXMgYmVoYXZpb3IuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgdmFsdWUgZm9yIDx2YXI+bjwvdmFyPiBpcyAzMjc2OC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc3RhY2stYXJyYXlzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZzdGFja18wMDJkYXJyYXlzXzAwN2QtMjcxIj48L2E+QWRkaW5nIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSB0aGUgRm9ydHJhbiBjb21waWxlciBwdXQgYWxsIGxvY2FsIGFycmF5cywKK2V2ZW4gdGhvc2Ugb2YgdW5rbm93biBzaXplIG9udG8gc3RhY2sgbWVtb3J5LiAgSWYgeW91ciBwcm9ncmFtIHVzZXMgdmVyeQorbGFyZ2UgbG9jYWwgYXJyYXlzIGl0IGlzIHBvc3NpYmxlIHRoYXQgeW91IHdpbGwgaGF2ZSB0byBleHRlbmQgeW91ciBydW50aW1lCitsaW1pdHMgZm9yIHN0YWNrIG1lbW9yeSBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLiBUaGlzIGZsYWcgaXMgZW5hYmxlZAorYnkgZGVmYXVsdCBhdCBvcHRpbWl6YXRpb24gbGV2ZWwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LU9mYXN0PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnBhY2stZGVyaXZlZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcGFja18wMDJkZGVyaXZlZF8wMDdkLTI3MiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cnVjdHVyZS1wYWNraW5nLTI3MyI+PC9hPlRoaXMgb3B0aW9uIHRlbGxzIEdOVSBGb3J0cmFuIHRvIHBhY2sgZGVyaXZlZCB0eXBlIG1lbWJlcnMgYXMgY2xvc2VseSBhcworcG9zc2libGUuICBDb2RlIGNvbXBpbGVkIHdpdGggdGhpcyBvcHRpb24gaXMgbGlrZWx5IHRvIGJlIGluY29tcGF0aWJsZQord2l0aCBjb2RlIGNvbXBpbGVkIHdpdGhvdXQgdGhpcyBvcHRpb24sIGFuZCBtYXkgZXhlY3V0ZSBzbG93ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlcGFjay1hcnJheXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJlcGFja18wMDJkYXJyYXlzXzAwN2QtMjc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVwYWNraW5nLWFycmF5cy0yNzUiPjwvYT5JbiBzb21lIGNpcmN1bXN0YW5jZXMgR05VIEZvcnRyYW4gbWF5IHBhc3MgYXNzdW1lZCBzaGFwZSBhcnJheQorc2VjdGlvbnMgdmlhIGEgZGVzY3JpcHRvciBkZXNjcmliaW5nIGEgbm9uY29udGlndW91cyBhcmVhIG9mIG1lbW9yeS4gCitUaGlzIG9wdGlvbiBhZGRzIGNvZGUgdG8gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIHRvIHJlcGFjayB0aGUgZGF0YSBpbnRvCithIGNvbnRpZ3VvdXMgYmxvY2sgYXQgcnVudGltZS4KKworICAgICA8cD5UaGlzIHNob3VsZCByZXN1bHQgaW4gZmFzdGVyIGFjY2Vzc2VzIHRvIHRoZSBhcnJheS4gIEhvd2V2ZXIgaXQgY2FuIGludHJvZHVjZQorc2lnbmlmaWNhbnQgb3ZlcmhlYWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGwsIGVzcGVjaWFsbHkgIHdoZW4gdGhlIHBhc3NlZCBkYXRhCitpcyBub25jb250aWd1b3VzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZzaG9ydC1lbnVtczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmc2hvcnRfMDAyZGVudW1zXzAwN2QtMjc2Ij48L2E+VGhpcyBvcHRpb24gaXMgcHJvdmlkZWQgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBDIGNvZGUgdGhhdCB3YXMKK2NvbXBpbGVkIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2hvcnQtZW51bXM8L3NwYW4+PC9zYW1wPiBvcHRpb24uICBJdCB3aWxsIG1ha2UKK0dOVSBGb3J0cmFuIGNob29zZSB0aGUgc21hbGxlc3QgPGNvZGU+SU5URUdFUjwvY29kZT4ga2luZCBhIGdpdmVuCitlbnVtZXJhdG9yIHNldCB3aWxsIGZpdCBpbiwgYW5kIGdpdmUgYWxsIGl0cyBlbnVtZXJhdG9ycyB0aGlzIGtpbmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmV4dGVybmFsLWJsYXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmV4dGVybmFsXzAwMmRibGFzXzAwN2QtMjc3Ij48L2E+VGhpcyBvcHRpb24gd2lsbCBtYWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGdlbmVyYXRlIGNhbGxzIHRvIEJMQVMgZnVuY3Rpb25zCitmb3Igc29tZSBtYXRyaXggb3BlcmF0aW9ucyBsaWtlIDxjb2RlPk1BVE1VTDwvY29kZT4sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG93bgorYWxnb3JpdGhtcywgaWYgdGhlIHNpemUgb2YgdGhlIG1hdHJpY2VzIGludm9sdmVkIGlzIGxhcmdlciB0aGFuIGEgZ2l2ZW4KK2xpbWl0IChzZWUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZibGFzLW1hdG11bC1saW1pdDwvc3Bhbj48L3NhbXA+KS4gIFRoaXMgbWF5IGJlIHByb2ZpdGFibGUgaWYgYW4KK29wdGltaXplZCB2ZW5kb3IgQkxBUyBsaWJyYXJ5IGlzIGF2YWlsYWJsZS4gIFRoZSBCTEFTIGxpYnJhcnkgd2lsbCBoYXZlCit0byBiZSBzcGVjaWZpZWQgYXQgbGluayB0aW1lLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZibGFzLW1hdG11bC1saW1pdD08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmJsYXNfMDAyZG1hdG11bF8wMDJkbGltaXRfMDA3ZC0yNzgiPjwvYT5Pbmx5IHNpZ25pZmljYW50IHdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZleHRlcm5hbC1ibGFzPC9zcGFuPjwvc2FtcD4gaXMgaW4gZWZmZWN0LiAKK01hdHJpeCBtdWx0aXBsaWNhdGlvbiBvZiBtYXRyaWNlcyB3aXRoIHNpemUgbGFyZ2VyIHRoYW4gKG9yIGVxdWFsIHRvKSA8dmFyPm48L3Zhcj4KK3dpbGwgYmUgcGVyZm9ybWVkIGJ5IGNhbGxzIHRvIEJMQVMgZnVuY3Rpb25zLCB3aGlsZSBvdGhlcnMgd2lsbCBiZQoraGFuZGxlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiBpbnRlcm5hbCBhbGdvcml0aG1zLiBJZiB0aGUgbWF0cmljZXMKK2ludm9sdmVkIGFyZSBub3Qgc3F1YXJlLCB0aGUgc2l6ZSBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUKK2dlb21ldHJpYyBtZWFuIG9mIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcmd1bWVudCBhbmQgcmVzdWx0IG1hdHJpY2VzLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IHZhbHVlIGZvciA8dmFyPm48L3Zhcj4gaXMgMzAuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlY3Vyc2l2ZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcmVjdXJzaXZlXzAwN2QtMjc5Ij48L2E+QWxsb3cgaW5kaXJlY3QgcmVjdXJzaW9uIGJ5IGZvcmNpbmcgYWxsIGxvY2FsIGFycmF5cyB0byBiZSBhbGxvY2F0ZWQKK29uIHRoZSBzdGFjay4gVGhpcyBmbGFnIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbWF4LXN0YWNrLXZhci1zaXplPTwvc3Bhbj48L3NhbXA+IG9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYXV0b21hdGljPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmluaXQtbG9jYWwtemVybzwvY29kZT48ZHQ+PGNvZGU+LWZpbml0LWludGVnZXI9PC9jb2RlPjx2YXI+bjwvdmFyPjxkdD48Y29kZT4tZmluaXQtcmVhbD08L2NvZGU+PHZhcj4mbHQ7emVyb3xpbmZ8LWluZnxuYW58c25hbiZndDs8L3Zhcj48ZHQ+PGNvZGU+LWZpbml0LWxvZ2ljYWw9PC9jb2RlPjx2YXI+Jmx0O3RydWV8ZmFsc2UmZ3Q7PC92YXI+PGR0Pjxjb2RlPi1maW5pdC1jaGFyYWN0ZXI9PC9jb2RlPjx2YXI+bjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpbml0XzAwMmRsb2NhbF8wMDJkemVyb18wMDdkLTI4MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmluaXRfMDAyZGludGVnZXJfMDA3ZC0yODEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpbml0XzAwMmRyZWFsXzAwN2QtMjgyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmaW5pdF8wMDJkbG9naWNhbF8wMDdkLTI4MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmluaXRfMDAyZGNoYXJhY3Rlcl8wMDdkLTI4NCI+PC9hPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmluaXQtbG9jYWwtemVybzwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyIHRvCitpbml0aWFsaXplIGxvY2FsIDxjb2RlPklOVEVHRVI8L2NvZGU+LCA8Y29kZT5SRUFMPC9jb2RlPiwgYW5kIDxjb2RlPkNPTVBMRVg8L2NvZGU+Cit2YXJpYWJsZXMgdG8gemVybywgPGNvZGU+TE9HSUNBTDwvY29kZT4gdmFyaWFibGVzIHRvIGZhbHNlLCBhbmQKKzxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdmFyaWFibGVzIHRvIGEgc3RyaW5nIG9mIG51bGwgYnl0ZXMuICBGaW5lci1ncmFpbmVkCitpbml0aWFsaXphdGlvbiBvcHRpb25zIGFyZSBwcm92aWRlZCBieSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1maW5pdC1pbnRlZ2VyPTwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbml0LXJlYWw9PC9zcGFuPjx2YXI+Jmx0O3plcm98aW5mfC1pbmZ8bmFufHNuYW4mZ3Q7PC92YXI+PC9zYW1wPiAod2hpY2ggYWxzbyBpbml0aWFsaXplcwordGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBsb2NhbCA8Y29kZT5DT01QTEVYPC9jb2RlPiB2YXJpYWJsZXMpLAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbml0LWxvZ2ljYWw9PC9zcGFuPjx2YXI+Jmx0O3RydWV8ZmFsc2UmZ3Q7PC92YXI+PC9zYW1wPiwgYW5kCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmluaXQtY2hhcmFjdGVyPTwvc3Bhbj48dmFyPm48L3Zhcj48L3NhbXA+ICh3aGVyZSA8dmFyPm48L3Zhcj4gaXMgYW4gQVNDSUkgY2hhcmFjdGVyCit2YWx1ZSkgb3B0aW9ucy4gIFRoZXNlIG9wdGlvbnMgZG8gbm90IGluaXRpYWxpemUKKyAgICAgICAgICA8dWw+Cis8bGk+YWxsb2NhdGFibGUgYXJyYXlzCis8bGk+Y29tcG9uZW50cyBvZiBkZXJpdmVkIHR5cGUgdmFyaWFibGVzCis8bGk+dmFyaWFibGVzIHRoYXQgYXBwZWFyIGluIGFuIDxjb2RlPkVRVUlWQUxFTkNFPC9jb2RlPiBzdGF0ZW1lbnQuIAorPC91bD4KKyAgICAgKFRoZXNlIGxpbWl0YXRpb25zIG1heSBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcykuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmluaXQtcmVhbD1uYW48L3NwYW4+PC9zYW1wPiBvcHRpb24gaW5pdGlhbGl6ZXMgPGNvZGU+UkVBTDwvY29kZT4KK2FuZCA8Y29kZT5DT01QTEVYPC9jb2RlPiB2YXJpYWJsZXMgd2l0aCBhIHF1aWV0IE5hTi4gRm9yIGEgc2lnbmFsbGluZyBOYU4KK3VzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmluaXQtcmVhbD1zbmFuPC9zcGFuPjwvc2FtcD47IG5vdGUsIGhvd2V2ZXIsIHRoYXQgY29tcGlsZS10aW1lCitvcHRpbWl6YXRpb25zIG1heSBjb252ZXJ0IHRoZW0gaW50byBxdWlldCBOYU4gYW5kIHRoYXQgdHJhcHBpbmcKK25lZWRzIHRvIGJlIGVuYWJsZWQgKGUuZy4gdmlhIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnBlLXRyYXA8L3NwYW4+PC9zYW1wPikuCisKKyAgICAgPHA+RmluYWxseSwgbm90ZSB0aGF0IGVuYWJsaW5nIGFueSBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZpbml0LSo8L3NwYW4+PC9zYW1wPiBvcHRpb25zIHdpbGwKK3NpbGVuY2Ugd2FybmluZ3MgdGhhdCB3b3VsZCBoYXZlIGJlZW4gZW1pdHRlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3VuaW5pdGlhbGl6ZWQ8L3NwYW4+PC9zYW1wPgorZm9yIHRoZSBhZmZlY3RlZCBsb2NhbCB2YXJpYWJsZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmFsaWduLWNvbW1vbnM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmFsaWduXzAwMmRjb21tb25zXzAwN2QtMjg1Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWxpZ25tZW50LW9mLV8wMDQwY29kZV8wMDdiQ09NTU9OXzAwN2QtYmxvY2tzLTI4NiI+PC9hPkJ5IGRlZmF1bHQsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGVuZm9yY2VzIHByb3BlciBhbGlnbm1lbnQgb2YgYWxsIHZhcmlhYmxlcyBpbiBhCis8Y29kZT5DT01NT048L2NvZGU+IGJsb2NrIGJ5IHBhZGRpbmcgdGhlbSBhcyBuZWVkZWQuIE9uIGNlcnRhaW4gcGxhdGZvcm1zIHRoaXMgaXMgbWFuZGF0b3J5LAorb24gb3RoZXJzIGl0IGluY3JlYXNlcyBwZXJmb3JtYW5jZS4gSWYgYSA8Y29kZT5DT01NT048L2NvZGU+IGJsb2NrIGlzIG5vdCBkZWNsYXJlZCB3aXRoCitjb25zaXN0ZW50IGRhdGEgdHlwZXMgZXZlcnl3aGVyZSwgdGhpcyBwYWRkaW5nIGNhbiBjYXVzZSB0cm91YmxlLCBhbmQKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tYWxpZ24tY29tbW9uczwvc3Bhbj48L3NhbXA+IGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgYXV0b21hdGljIGFsaWdubWVudC4gVGhlCitzYW1lIGZvcm0gb2YgdGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCBmaWxlcyB0aGF0IHNoYXJlIGEgPGNvZGU+Q09NTU9OPC9jb2RlPiBibG9jay4gCitUbyBhdm9pZCBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3VlcyBpbiA8Y29kZT5DT01NT048L2NvZGU+IGJsb2NrcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gb3JkZXIKK29iamVjdHMgZnJvbSBsYXJnZXN0IHRvIHNtYWxsZXN0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZuby1wcm90ZWN0LXBhcmVuczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmbm9fMDAyZHByb3RlY3RfMDAyZHBhcmVuc18wMDdkLTI4NyI+PC9hPjxhIG5hbWU9ImluZGV4LXJlXzAwMmRhc3NvY2lhdGlvbi1vZi1wYXJlbnRoZXNpemVkLWV4cHJlc3Npb25zLTI4OCI+PC9hPkJ5IGRlZmF1bHQgdGhlIHBhcmVudGhlc2VzIGluIGV4cHJlc3Npb24gYXJlIGhvbm9yZWQgZm9yIGFsbCBvcHRpbWl6YXRpb24KK2xldmVscyBzdWNoIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGRvIGFueSByZS1hc3NvY2lhdGlvbi4gVXNpbmcKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tcHJvdGVjdC1wYXJlbnM8L3NwYW4+PC9zYW1wPiBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIHJlb3JkZXIgPGNvZGU+UkVBTDwvY29kZT4gYW5kCis8Y29kZT5DT01QTEVYPC9jb2RlPiBleHByZXNzaW9ucyB0byBwcm9kdWNlIGZhc3RlciBjb2RlLiBOb3RlIHRoYXQgZm9yIHRoZSByZS1hc3NvY2lhdGlvbgorb3B0aW1pemF0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tc2lnbmVkLXplcm9zPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tdHJhcHBpbmctbWF0aDwvc3Bhbj48L3NhbXA+CituZWVkIHRvIGJlIGluIGVmZmVjdC4gVGhlIHBhcmVudGhlc2VzIHByb3RlY3Rpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB1bmxlc3MKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1PZmFzdDwvc3Bhbj48L3NhbXA+IGlzIGdpdmVuLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZyZWFsbG9jLWxoczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcmVhbGxvY18wMDJkbGhzXzAwN2QtMjg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtUmVhbGxvY2F0ZS10aGUtTEhTLWluLWFzc2lnbm1lbnRzLTI5MCI+PC9hPkFuIGFsbG9jYXRhYmxlIGxlZnQtaGFuZCBzaWRlIG9mIGFuIGludHJpbnNpYyBhc3NpZ25tZW50IGlzIGF1dG9tYXRpY2FsbHkKKyhyZSlhbGxvY2F0ZWQgaWYgaXQgaXMgZWl0aGVyIHVuYWxsb2NhdGVkIG9yIGhhcyBhIGRpZmZlcmVudCBzaGFwZS4gVGhlCitvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGV4Y2VwdCB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Zjk1PC9zcGFuPjwvc2FtcD4gaXMgZ2l2ZW4uIFNlZQorYWxzbyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3JlYWxsb2MtbGhzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmFnZ3Jlc3NpdmUtZnVuY3Rpb24tZWxpbWluYXRpb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmFnZ3Jlc3NpdmVfMDAyZGZ1bmN0aW9uXzAwMmRlbGltaW5hdGlvbl8wMDdkLTI5MSI+PC9hPjxhIG5hbWU9ImluZGV4LUVsaW1pbmF0aW9uLW9mLWZ1bmN0aW9ucy13aXRoLWlkZW50aWNhbC1hcmd1bWVudC1saXN0cy0yOTIiPjwvYT5GdW5jdGlvbnMgd2l0aCBpZGVudGljYWwgYXJndW1lbnQgbGlzdHMgYXJlIGVsaW1pbmF0ZWQgd2l0aGluCitzdGF0ZW1lbnRzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBtYXJrZWQKKzxjb2RlPlBVUkU8L2NvZGU+IG9yIG5vdC4gRm9yIGV4YW1wbGUsIGluCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgYSA9IGYoYixjKSArIGYoYixjKQorPC9wcmU+CisgICAgIDxwPnRoZXJlIHdpbGwgb25seSBiZSBhIHNpbmdsZSBjYWxsIHRvIDxjb2RlPmY8L2NvZGU+LiAgVGhpcyBvcHRpb24gb25seSB3b3JrcworaWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmcm9udGVuZC1vcHRpbWl6ZTwvc3Bhbj48L3NhbXA+IGlzIGluIGVmZmVjdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZnJvbnRlbmQtb3B0aW1pemU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJvbnRlbmRfMDAyZG9wdGltaXplXzAwN2QtMjkzIj48L2E+PGEgbmFtZT0iaW5kZXgtRnJvbnRfMDAyZGVuZC1vcHRpbWl6YXRpb24tMjk0Ij48L2E+VGhpcyBvcHRpb24gcGVyZm9ybXMgZnJvbnQtZW5kIG9wdGltaXphdGlvbiwgYmFzZWQgb24gbWFuaXB1bGF0aW5nCitwYXJ0cyB0aGUgRm9ydHJhbiBwYXJzZSB0cmVlLiAgRW5hYmxlZCBieSBkZWZhdWx0IGJ5IGFueSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTzwvc3Bhbj48L3NhbXA+CitvcHRpb24uICBPcHRpbWl6YXRpb25zIGVuYWJsZWQgYnkgdGhpcyBvcHRpb24gaW5jbHVkZSBlbGltaW5hdGlvbiBvZgoraWRlbnRpY2FsIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiBleHByZXNzaW9ucywgcmVtb3ZpbmcgdW5uZWNlc3NhcnkKK2NhbGxzIHRvIDxjb2RlPlRSSU08L2NvZGU+IGluIGNvbXBhcmlzb25zIGFuZCBhc3NpZ25tZW50cyBhbmQgcmVwbGFjaW5nCis8Y29kZT5UUklNKGEpPC9jb2RlPiB3aXRoIDxjb2RlPmEoMTpMRU5fVFJJTShhKSk8L2NvZGU+LiAKK0l0IGNhbiBiZSBkZXNlbGVjdGVkIGJ5IHNwZWNpZnlpbmcgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZuby1mcm9udGVuZC1vcHRpbWl6ZTwvc3Bhbj48L3NhbXA+LiAKKzwvZGw+CisKKyAgIDxwPlNlZSA8YSBocmVmPSIuLi9nY2MvQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPk9wdGlvbnMgZm9yIENvZGUgR2VuZXJhdGlvbiBDb252ZW50aW9uczwvYT4sIGZvciBpbmZvcm1hdGlvbiBvbiBtb3JlIG9wdGlvbnMKK29mZmVyZWQgYnkgdGhlIEdCRQorc2hhcmVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4sIGFuZCBvdGhlciBHTlUgY29tcGlsZXJzLgorCis8IS0tIG1hbiBlbmQgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ29tbWFzLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NvbW1hcy1pbi1GT1JNQVQtc3BlY2lmaWNhdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjRmMTNiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NvbW1hcy1pbi1GT1JNQVQtc3BlY2lmaWNhdGlvbnMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db21tYXMgaW4gRk9STUFUIHNwZWNpZmljYXRpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlgtZm9ybWF0LWRlc2NyaXB0b3Itd2l0aG91dC1jb3VudC1maWVsZC5odG1sI1gtZm9ybWF0LWRlc2NyaXB0b3Itd2l0aG91dC1jb3VudC1maWVsZCIgdGl0bGU9IlggZm9ybWF0IGRlc2NyaXB0b3Igd2l0aG91dCBjb3VudCBmaWVsZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sI01pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucyIgdGl0bGU9Ik1pc3NpbmcgcGVyaW9kIGluIEZPUk1BVCBzcGVjaWZpY2F0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb21tYXMtaW4tRk9STUFULXNwZWNpZmljYXRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sI01pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucyI+TWlzc2luZyBwZXJpb2QgaW4gRk9STUFUIHNwZWNpZmljYXRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iWC1mb3JtYXQtZGVzY3JpcHRvci13aXRob3V0LWNvdW50LWZpZWxkLmh0bWwjWC1mb3JtYXQtZGVzY3JpcHRvci13aXRob3V0LWNvdW50LWZpZWxkIj5YIGZvcm1hdCBkZXNjcmlwdG9yIHdpdGhvdXQgY291bnQgZmllbGQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMS41IENvbW1hcyBpbiA8Y29kZT5GT1JNQVQ8L2NvZGU+IHNwZWNpZmljYXRpb25zPC9oND4KKworPHA+VG8gc3VwcG9ydCBsZWdhY3kgY29kZXMsIEdOVSBGb3J0cmFuIGFsbG93cyB0aGUgY29tbWEgc2VwYXJhdG9yCit0byBiZSBvbWl0dGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBhbmQgYWZ0ZXIgY2hhcmFjdGVyIHN0cmluZyBlZGl0CitkZXNjcmlwdG9ycyBpbiA8Y29kZT5GT1JNQVQ8L2NvZGU+IHN0YXRlbWVudHMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgUFJJTlQgMTAsIDIsIDMKKyAgICAgMTAgICAgIEZPUk1BVCAoJ0ZPTz0nSTEnIEJBUj0nSTIpCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Db21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Db21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTUyMDNiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NvbXBpbGVyLUNoYXJhY3RlcmlzdGljcy5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbXBpbGVyIENoYXJhY3RlcmlzdGljcyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzIiB0aXRsZT0iRm9ydHJhbiAyMDAzIGFuZCAyMDA4IHN0YXR1cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkV4dGVuc2lvbnMuaHRtbCNFeHRlbnNpb25zIiB0aXRsZT0iRXh0ZW5zaW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXh0ZW5zaW9ucy5odG1sI0V4dGVuc2lvbnMiPkV4dGVuc2lvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLWFuZC0yMDA4LXN0YXR1cyI+Rm9ydHJhbiAyMDAzIGFuZCAyMDA4IHN0YXR1czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj41IENvbXBpbGVyIENoYXJhY3RlcmlzdGljczwvaDI+CisKKzxwPlRoaXMgY2hhcHRlciBkZXNjcmliZXMgY2VydGFpbiBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIEdOVSBGb3J0cmFuCitjb21waWxlciwgdGhhdCBhcmUgbm90IHNwZWNpZmllZCBieSB0aGUgRm9ydHJhbiBzdGFuZGFyZCwgYnV0IHdoaWNoCittaWdodCBpbiBzb21lIHdheSBvciBhbm90aGVyIGJlY29tZSB2aXNpYmxlIHRvIHRoZSBwcm9ncmFtbWVyLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iS0lORC1UeXBlLVBhcmFtZXRlcnMuaHRtbCNLSU5ELVR5cGUtUGFyYW1ldGVycyI+S0lORCBUeXBlIFBhcmFtZXRlcnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJJbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcy5odG1sI0ludGVybmFsLXJlcHJlc2VudGF0aW9uLW9mLUxPR0lDQUwtdmFyaWFibGVzIj5JbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBMT0dJQ0FMIHZhcmlhYmxlczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlRocmVhZF8wMDJkc2FmZXR5LW9mLXRoZS1ydW50aW1lLWxpYnJhcnkuaHRtbCNUaHJlYWRfMDAyZHNhZmV0eS1vZi10aGUtcnVudGltZS1saWJyYXJ5Ij5UaHJlYWQtc2FmZXR5IG9mIHRoZSBydW50aW1lIGxpYnJhcnk8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJEYXRhLWNvbnNpc3RlbmN5LWFuZC1kdXJhYmlsaXR5Lmh0bWwjRGF0YS1jb25zaXN0ZW5jeS1hbmQtZHVyYWJpbGl0eSI+RGF0YSBjb25zaXN0ZW5jeSBhbmQgZHVyYWJpbGl0eTwvYT4KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Db250cmlidXRpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Db250cmlidXRpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTY1NDQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NvbnRyaWJ1dGluZy5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbnRyaWJ1dGluZyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkludHJpbnNpYy1Nb2R1bGVzLmh0bWwjSW50cmluc2ljLU1vZHVsZXMiIHRpdGxlPSJJbnRyaW5zaWMgTW9kdWxlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNvcHlpbmcuaHRtbCNDb3B5aW5nIiB0aXRsZT0iQ29weWluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb250cmlidXRpbmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ29weWluZy5odG1sI0NvcHlpbmciPkNvcHlpbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnRyaW5zaWMtTW9kdWxlcy5odG1sI0ludHJpbnNpYy1Nb2R1bGVzIj5JbnRyaW5zaWMgTW9kdWxlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJ1bm51bWJlcmVkIj5Db250cmlidXRpbmc8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1Db250cmlidXRpbmctMTE0MSI+PC9hPgorRnJlZSBzb2Z0d2FyZSBpcyBvbmx5IHBvc3NpYmxlIGlmIHBlb3BsZSBjb250cmlidXRlIHRvIGVmZm9ydHMKK3RvIGNyZWF0ZSBpdC4gCitXZSdyZSBhbHdheXMgaW4gbmVlZCBvZiBtb3JlIHBlb3BsZSBoZWxwaW5nIG91dCB3aXRoIGlkZWFzCithbmQgY29tbWVudHMsIHdyaXRpbmcgZG9jdW1lbnRhdGlvbiBhbmQgY29udHJpYnV0aW5nIGNvZGUuCisKKyAgIDxwPklmIHlvdSB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gR05VIEZvcnRyYW4sCitoYXZlIGEgbG9vayBhdCB0aGUgbG9uZyBsaXN0cyBvZiBwcm9qZWN0cyB5b3UgY2FuIHRha2Ugb24uIAorU29tZSBvZiB0aGVzZSBwcm9qZWN0cyBhcmUgc21hbGwsCitzb21lIG9mIHRoZW0gYXJlIGxhcmdlOworc29tZSBhcmUgY29tcGxldGVseSBvcnRob2dvbmFsIHRvIHRoZSByZXN0IG9mIHdoYXQgaXMKK2hhcHBlbmluZyBvbiBHTlUgRm9ydHJhbiwKK2J1dCBvdGhlcnMgYXJlICZsZHF1bzttYWluc3RyZWFtJnJkcXVvOyBwcm9qZWN0cyBpbiBuZWVkIG9mIGVudGh1c2lhc3RpYyBoYWNrZXJzLiAKK0FsbCBvZiB0aGVzZSBwcm9qZWN0cyBhcmUgaW1wb3J0YW50ISAKK1dlIHdpbGwgZXZlbnR1YWxseSBnZXQgYXJvdW5kIHRvIHRoZSB0aGluZ3MgaGVyZSwKK2J1dCB0aGV5IGFyZSBhbHNvIHRoaW5ncyBkb2FibGUgYnkgc29tZW9uZSB3aG8gaXMgd2lsbGluZyBhbmQgYWJsZS4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkNvbnRyaWJ1dG9ycy5odG1sI0NvbnRyaWJ1dG9ycyI+Q29udHJpYnV0b3JzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iUHJvamVjdHMuaHRtbCNQcm9qZWN0cyI+UHJvamVjdHM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJQcm9wb3NlZC1FeHRlbnNpb25zLmh0bWwjUHJvcG9zZWQtRXh0ZW5zaW9ucyI+UHJvcG9zZWQgRXh0ZW5zaW9uczwvYT4KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Db250cmlidXRvcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Db250cmlidXRvcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmMzNWNkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NvbnRyaWJ1dG9ycy5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Db250cmlidXRvcnMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29udHJpYnV0aW5nLmh0bWwjQ29udHJpYnV0aW5nIiB0aXRsZT0iQ29udHJpYnV0aW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJvamVjdHMuaHRtbCNQcm9qZWN0cyIgdGl0bGU9IlByb2plY3RzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvbnRyaWJ1dG9ycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQcm9qZWN0cy5odG1sI1Byb2plY3RzIj5Qcm9qZWN0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbnRyaWJ1dGluZy5odG1sI0NvbnRyaWJ1dGluZyI+Q29udHJpYnV0aW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Q29udHJpYnV0b3JzIHRvIEdOVSBGb3J0cmFuPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ29udHJpYnV0b3JzLTExNDIiPjwvYT48YSBuYW1lPSJpbmRleC1DcmVkaXRzLTExNDMiPjwvYT48YSBuYW1lPSJpbmRleC1BdXRob3JzLTExNDQiPjwvYT4KK01vc3Qgb2YgdGhlIHBhcnNlciB3YXMgaGFuZC1jcmFmdGVkIGJ5IDxlbT5BbmR5IFZhdWdodDwvZW0+LCB3aG8gaXMKK2Fsc28gdGhlIGluaXRpYXRvciBvZiB0aGUgd2hvbGUgcHJvamVjdC4gIFRoYW5rcyBBbmR5ISAKK01vc3Qgb2YgdGhlIGludGVyZmFjZSB3aXRoIEdDQyB3YXMgd3JpdHRlbiBieSA8ZW0+UGF1bCBCcm9vazwvZW0+LgorCisgICA8cD5UaGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGhhdmUgY29udHJpYnV0ZWQgY29kZSBhbmQvb3IKK2lkZWFzIGFuZCBzaWduaWZpY2FudCBoZWxwIHRvIHRoZSBHTlUgRm9ydHJhbiBwcm9qZWN0CisoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKToKKworICAgICA8dWw+Cis8bGk+SmFubmUgQmxvbXF2aXN0Cis8bGk+U3RldmVuIEJvc3NjaGVyCis8bGk+UGF1bCBCcm9vaworPGxpPlRvYmlhcyBCdXJudXMKKzxsaT5GcmFuJmNjZWRpbDtvaXMtWGF2aWVyIENvdWRlcnQKKzxsaT5CdWQgRGF2aXMKKzxsaT5KZXJyeSBEZUxpc2xlCis8bGk+RXJpayBFZGVsbWFubgorPGxpPkJlcm5oYXJkIEZpc2NoZXIKKzxsaT5EYW5pZWwgRnJhbmtlCis8bGk+UmljaGFyZCBHdWVudGhlcgorPGxpPlJpY2hhcmQgSGVuZGVyc29uCis8bGk+S2F0aGVyaW5lIEhvbGNvbWIKKzxsaT5KYWt1YiBKZWxpbmVrCis8bGk+TmllbHMgS3Jpc3RpYW4gQmVjaCBKZW5zZW4KKzxsaT5TdGV2ZW4gSm9obnNvbgorPGxpPlN0ZXZlbiBHLiBLYXJnbAorPGxpPlRob21hcyBLb2VuaWcKKzxsaT5Bc2hlciBMYW5ndG9uCis8bGk+SC4gSi4gTHUKKzxsaT5Ub29uIE1vZW5lCis8bGk+QnJvb2tzIE1vc2VzCis8bGk+QW5kcmV3IFBpbnNraQorPGxpPlRpbSBQcmluY2UKKzxsaT5DaHJpc3RvcGhlciBELiBSaWNrZXR0Cis8bGk+UmljaGFyZCBTYW5kaWZvcmQKKzxsaT5Ub2JpYXMgU2NobCZ1dW1sO3RlcgorPGxpPlJvZ2VyIFNheWxlCis8bGk+UGF1bCBUaG9tYXMKKzxsaT5BbmR5IFZhdWdodAorPGxpPkZlbmcgV2FuZworPGxpPkphbnVzIFdlaWwKKzxsaT5EYW5pZWwgS3JhZnQKKzwvdWw+CisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgYnVnIHJlcG9ydHMsCitzbWFsbGVyIG9yIGxhcmdlciBwYXRjaGVzLAorYW5kIG11Y2ggbmVlZGVkIGZlZWRiYWNrIGFuZCBlbmNvdXJhZ2VtZW50IGZvciB0aGUKK0dOVSBGb3J0cmFuIHByb2plY3Q6CisKKyAgICAgPHVsPgorPGxpPkJpbGwgQ2xvZGl1cworPGxpPkRvbWluaXF1ZSBkJ0h1bWkmZWdyYXZlO3JlcworPGxpPkthdGUgSGVkc3Ryb20KKzxsaT5FcmlrIFNjaG5ldHRlcgorPGxpPkpvb3N0IFZhbmRlVm9uZGVsZQorPC91bD4KKworICAgPHA+TWFueSBvdGhlciBpbmRpdmlkdWFscyBoYXZlIGhlbHBlZCBkZWJ1ZywKK3Rlc3QgYW5kIGltcHJvdmUgdGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVyIG92ZXIgdGhlIHBhc3QgZmV3IHllYXJzLAorYW5kIHdlIHdlbGNvbWUgeW91IHRvIGRvIHRoZSBzYW1lISAKK0lmIHlvdSBhbHJlYWR5IGhhdmUgZG9uZSBzbywKK2FuZCB5b3Ugd291bGQgbGlrZSB0byBzZWUgeW91ciBuYW1lIGxpc3RlZCBpbiB0aGUKK2xpc3QgYWJvdmUsIHBsZWFzZSBjb250YWN0IHVzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ29weWluZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NvcHlpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmZlMTRhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NvcHlpbmcuaHRtbApAQCAtMCwwICsxLDc1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29weWluZyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNvbnRyaWJ1dGluZy5odG1sI0NvbnRyaWJ1dGluZyIgdGl0bGU9IkNvbnRyaWJ1dGluZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgdGl0bGU9IkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb3B5aW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29udHJpYnV0aW5nLmh0bWwjQ29udHJpYnV0aW5nIj5Db250cmlidXRpbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzwhLS0gbWFuIGJlZ2luIERFU0NSSVBUSU9OIC0tPgorPGgyIGNsYXNzPSJ1bm51bWJlcmVkIj5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTwvaDI+CisKKzxkaXYgYWxpZ249ImNlbnRlciI+VmVyc2lvbiAzLCAyOSBKdW5lIDIwMDc8L2Rpdj4KKworPCEtLSBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgaW4gYW5vdGhlciBmaWxlLiAtLT4KKzxwcmUgY2xhc3M9ImRpc3BsYXkiPiAgICAgQ29weXJpZ2h0ICZjb3B5OyAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8YSBocmVmPSJodHRwOi8vZnNmLm9yZy8iPmh0dHA6Ly9mc2Yub3JnLzwvYT4KKyAgICAgCisgICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKzwvcHJlPgorICAgPGgzIGNsYXNzPSJoZWFkaW5nIj5QcmVhbWJsZTwvaDM+CisKKzxwPlRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCisKKyAgIDxwPlRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAordG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LAordGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20KK3RvIHNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbSZuZGFzaDt0byBtYWtlIHN1cmUgaXQgcmVtYWlucworZnJlZSBzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAordXNlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0CithcHBsaWVzIGFsc28gdG8gYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuICBZb3UKK2NhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgIDxwPldoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91Cit3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldworZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgIDxwPlRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdQordGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdQoraGF2ZSBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbQorb2Ygb3RoZXJzLgorCisgICA8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lCitmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywKK3JlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlCit0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgICA8cD5EZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6CisoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQorZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworICAgPHA+Rm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCit0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuICBGb3IgYm90aCB1c2VycycgYW5kCithdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzCitjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KK2F1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCisKKyAgIDxwPlNvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4KK21vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlCittYW51ZmFjdHVyZXIgY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZQorYWltIG9mIHByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZQorc3lzdGVtYXRpYyBwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvcgoraW5kaXZpZHVhbHMgdG8gdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuIAorVGhlcmVmb3JlLCB3ZSBoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZQorcHJhY3RpY2UgZm9yIHRob3NlIHByb2R1Y3RzLiAgSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluCitvdGhlciBkb21haW5zLCB3ZSBzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UKK2RvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZQorZnJlZWRvbSBvZiB1c2Vycy4KKworICAgPHA+RmluYWxseSwgZXZlcnkgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gCitTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2YKK3NvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoCit0byBhdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0KK2NvdWxkIG1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHRoZSBHUEwKK2Fzc3VyZXMgdGhhdCBwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4KKworICAgPHA+VGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKzxoMyBjbGFzcz0iaGVhZGluZyI+VEVSTVMgQU5EIENPTkRJVElPTlM8L2gzPgorCisgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MD4KKzxsaT5EZWZpbml0aW9ucy4KKworICAgICA8cD4mbGRxdW87VGhpcyBMaWNlbnNlJnJkcXVvOyByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAgICA8cD4mbGRxdW87Q29weXJpZ2h0JnJkcXVvOyBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcworb2Ygd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KKworICAgICA8cD4mbGRxdW87VGhlIFByb2dyYW0mcmRxdW87IHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAmbGRxdW87eW91JnJkcXVvOy4gICZsZHF1bztMaWNlbnNlZXMmcmRxdW87IGFuZAorJmxkcXVvO3JlY2lwaWVudHMmcmRxdW87IG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgorCisgICAgIDxwPlRvICZsZHF1bzttb2RpZnkmcmRxdW87IGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKK2luIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZgorYW4gZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAmbGRxdW87bW9kaWZpZWQgdmVyc2lvbiZyZHF1bzsgb2YKK3RoZSBlYXJsaWVyIHdvcmsgb3IgYSB3b3JrICZsZHF1bztiYXNlZCBvbiZyZHF1bzsgdGhlIGVhcmxpZXIgd29yay4KKworICAgICA8cD5BICZsZHF1bztjb3ZlcmVkIHdvcmsmcmRxdW87IG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0uCisKKyAgICAgPHA+VG8gJmxkcXVvO3Byb3BhZ2F0ZSZyZHF1bzsgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KKworICAgICA8cD5UbyAmbGRxdW87Y29udmV5JnJkcXVvOyBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCitwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyCit0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdAorY29udmV5aW5nLgorCisgICAgIDxwPkFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICZsZHF1bztBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzJnJkcXVvOyB0bwordGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCisgICAgIDxsaT5Tb3VyY2UgQ29kZS4KKworICAgICA8cD5UaGUgJmxkcXVvO3NvdXJjZSBjb2RlJnJkcXVvOyBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgJmxkcXVvO09iamVjdCBjb2RlJnJkcXVvOyBtZWFucyBhbnkgbm9uLXNvdXJjZSBmb3JtCitvZiBhIHdvcmsuCisKKyAgICAgPHA+QSAmbGRxdW87U3RhbmRhcmQgSW50ZXJmYWNlJnJkcXVvOyBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKK3N0YW5kYXJkIGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4gdGhlIGNhc2Ugb2YKK2ludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0CitpcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KKworICAgICA8cD5UaGUgJmxkcXVvO1N5c3RlbSBMaWJyYXJpZXMmcmRxdW87IG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlcgordGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKK3BhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3IKK0NvbXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdpdGggdGhhdAorTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCitpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiAgQQorJmxkcXVvO01ham9yIENvbXBvbmVudCZyZHF1bzssIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50Cisoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCisoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0bworcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuCisKKyAgICAgPHA+VGhlICZsZHF1bztDb3JyZXNwb25kaW5nIFNvdXJjZSZyZHF1bzsgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbAordGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZQord29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bworY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzCitTeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5IGF2YWlsYWJsZSBmcmVlCitwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKK3doaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZQoraW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IKK3RoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQorbGlua2VkIHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsCitzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQorc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgorCisgICAgIDxwPlRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMgY2FuCityZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuCisKKyAgICAgPHA+VGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0IHNhbWUKK3dvcmsuCisKKyAgICAgPGxpPkJhc2ljIFBlcm1pc3Npb25zLgorCisgICAgIDxwPkFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mCitjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZAorY29uZGl0aW9ucyBhcmUgbWV0LiAgVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZAorcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGEKK2NvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cworY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXIKK3JpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3LgorCisgICAgIDxwPllvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QgY29udmV5LAord2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zIGluIGZvcmNlLiAKK1lvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGhhdmluZwordGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3Ugd2l0aAorZmFjaWxpdGllcyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvIG5vdAorY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzIGZvcgoreW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uIGFuZAorY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YgeW91cgorY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuCisKKyAgICAgPHA+Q29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIgdGhlCitjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMAorbWFrZXMgaXQgdW5uZWNlc3NhcnkuCisKKyAgICAgPGxpPlByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCisKKyAgICAgPHA+Tm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCittZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUKKzExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgorc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAorbWVhc3VyZXMuCisKKyAgICAgPHA+V2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZAorY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaAorY2lyY3VtdmVudGlvbiBpcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aAorcmVzcGVjdCB0byB0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQKK29wZXJhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QKK3RoZSB3b3JrJ3MgdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZAorY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgorCisgICAgIDxsaT5Db252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgICAgIDxwPllvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgICAgIDxwPllvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgICAgPGxpPkNvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCisKKyAgICAgPHA+WW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bworcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKK3Rlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZQorY29uZGl0aW9uczoKKworICAgICAgICAgIDxvbCB0eXBlPWEgc3RhcnQ9MT4KKzxsaT5UaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQgaXQsCithbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KKworICAgICAgICAgIDxsaT5UaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcyByZWxlYXNlZAordW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uIDcuICBUaGlzCityZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvICZsZHF1bztrZWVwIGludGFjdCBhbGwKK25vdGljZXMmcmRxdW87LgorCisgICAgICAgICAgPGxpPllvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzIExpY2Vuc2UgdG8KK2FueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMgTGljZW5zZSB3aWxsCit0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3IGFkZGl0aW9uYWwgdGVybXMsCit0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5CithcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8gcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluCithbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUKK3NlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCisKKyAgICAgICAgICA8bGk+SWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkKK0FwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZQoraW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIgd29yaworbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgorICAgICAgICAgIDwvb2w+CisKKyAgICAgPHA+QSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAord29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywKK2FuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sCitpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCismbGRxdW87YWdncmVnYXRlJnJkcXVvOyBpZiB0aGUgY29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QKK3VzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMKK2JleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yaworaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIKK3BhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuCisKKyAgICAgPGxpPkNvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgorCisgICAgIDxwPllvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUgbWFjaGluZS1yZWFkYWJsZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gb25lIG9mIHRoZXNlCit3YXlzOgorCisgICAgICAgICAgPG9sIHR5cGU9YSBzdGFydD0xPgorPGxpPkNvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyhpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5Cit1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgICAgICAgIDxsaT5Db252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEgd3JpdHRlbgorb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzIGxvbmcgYXMgeW91CitvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QgbW9kZWwsIHRvIGdpdmUKK2FueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEgY29weSBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZSBwcm9kdWN0IHRoYXQgaXMKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQKK2ZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8gbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZQorY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcyBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzCit0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgorCisgICAgICAgICAgPGxpPkNvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIHdyaXR0ZW4KK29mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcyBhbHRlcm5hdGl2ZSBpcworYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQgb25seSBpZiB5b3UKK3JlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIHN1YnNlY3Rpb24KKzZiLgorCisgICAgICAgICAgPGxpPkNvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlCisoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCitmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvIGNvcHkKK3RoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbWF5IGJlCitvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KSB0aGF0IHN1cHBvcnRzCitlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluIGNsZWFyIGRpcmVjdGlvbnMKK25leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gCitSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbgorb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8KK3NhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgorCisgICAgICAgICAgPGxpPkNvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQgeW91CitpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZgordGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vIGNoYXJnZSB1bmRlcgorc3Vic2VjdGlvbiA2ZC4KKworICAgICAgICAgIDwvb2w+CisKKyAgICAgPHA+QSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgICAgIDxwPkEgJmxkcXVvO1VzZXIgUHJvZHVjdCZyZHF1bzsgaXMgZWl0aGVyICgxKSBhICZsZHF1bztjb25zdW1lciBwcm9kdWN0JnJkcXVvOywgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwKK2ZhbWlseSwgb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IKK2luY29ycG9yYXRpb24gaW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYQorY29uc3VtZXIgcHJvZHVjdCwgZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YKK2NvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhciBwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLAorJmxkcXVvO25vcm1hbGx5IHVzZWQmcmRxdW87IHJlZmVycyB0byBhIHR5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mCitwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMgb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5CitpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyIGFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQKK3RvIHVzZSwgdGhlIHByb2R1Y3QuICBBIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2YKK3doZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsIGNvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3IKK25vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudCB0aGUgb25seSBzaWduaWZpY2FudAorbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCisKKyAgICAgPHA+JmxkcXVvO0luc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiZyZHF1bzsgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLAorcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0bworaW5zdGFsbCBhbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIKK1Byb2R1Y3QgZnJvbSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlCitpbmZvcm1hdGlvbiBtdXN0IHN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZgordGhlIG1vZGlmaWVkIG9iamVjdCBjb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aAorc29sZWx5IGJlY2F1c2UgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCisKKyAgICAgPHA+SWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3IKK3NwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCitwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUKK1VzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGEKK2ZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZAorYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5CitpZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAorbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcworYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KKworICAgICA8cD5UaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhCityZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yCit1cGRhdGVzIGZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlCityZWNpcGllbnQsIG9yIGZvciB0aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yCitpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYSBuZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uCitpdHNlbGYgbWF0ZXJpYWxseSBhbmQgYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yaworb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZCBwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZQorbmV0d29yay4KKworICAgICA8cD5Db3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwKK2luIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKK2RvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCitzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IKK3VucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgorCisgICAgIDxsaT5BZGRpdGlvbmFsIFRlcm1zLgorCisgICAgIDxwPiZsZHF1bztBZGRpdGlvbmFsIHBlcm1pc3Npb25zJnJkcXVvOyBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuIAorQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbAorYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudAordGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKK2FwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkKK3VuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkKK3RoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKworICAgICA8cD5XaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uCityZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKK2l0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24KK3JlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQorYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLAorZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgorCisgICAgIDxwPk5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQorYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycworb2YgdGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6CisKKyAgICAgICAgICA8b2wgdHlwZT1hIHN0YXJ0PTE+Cis8bGk+RGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlIHRlcm1zCitvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvcgorCisgICAgICAgICAgPGxpPlJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvciBhdXRob3IKK2F0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzCitkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgICAgICAgIDxsaT5Qcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCityZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgorCisgICAgICAgICAgPGxpPkxpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKK2F1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgorCisgICAgICAgICAgPGxpPkRlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUgdHJhZGUKK25hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgorCisgICAgICAgICAgPGxpPlJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQgbWF0ZXJpYWwgYnkKK2FueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIGl0KSB3aXRoCitjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yIGFueQorbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uIHRob3NlCitsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCisgICAgICAgICAgPC9vbD4KKworICAgICA8cD5BbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAmbGRxdW87ZnVydGhlcgorcmVzdHJpY3Rpb25zJnJkcXVvOyB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gIElmIHRoZSBQcm9ncmFtIGFzIHlvdQorcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMKK2dvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgorcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucworYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzCitMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKK29mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzCitub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KKworICAgICA8cD5JZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91CittdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUKK2FkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZword2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KKworICAgICA8cD5BZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQorZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsgdGhlCithYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKworICAgICA8bGk+VGVybWluYXRpb24uCisKKyAgICAgPHA+WW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5Citwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKK3RoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQKK3BhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KKworICAgICA8cD5Ib3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBsaWNlbnNlCitmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksCit1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkKK3Rlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0IGhvbGRlcgorZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0bworNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCisgICAgIDxwPk1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCisgICAgIDxwPlRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKK21hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCisKKyAgICAgPGxpPkFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgICAgIDxwPllvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvciBydW4KK2EgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgICAgPGxpPkF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgICAgIDxwPkVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgICAgPHA+QW4gJmxkcXVvO2VudGl0eSB0cmFuc2FjdGlvbiZyZHF1bzsgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgICAgIDxwPllvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgICAgIDxsaT5QYXRlbnRzLgorCisgICAgIDxwPkEgJmxkcXVvO2NvbnRyaWJ1dG9yJnJkcXVvOyBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICZsZHF1bztjb250cmlidXRvciB2ZXJzaW9uJnJkcXVvOy4KKworICAgICA8cD5BIGNvbnRyaWJ1dG9yJ3MgJmxkcXVvO2Vzc2VudGlhbCBwYXRlbnQgY2xhaW1zJnJkcXVvOyBhcmUgYWxsIHBhdGVudCBjbGFpbXMgb3duZWQKK29yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICZsZHF1bztjb250cm9sJnJkcXVvOyBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorCisgICAgIDxwPkVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICAgICA8cD5JbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgJmxkcXVvO3BhdGVudCBsaWNlbnNlJnJkcXVvOyBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gJmxkcXVvO2dyYW50JnJkcXVvOyBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICAgICA8cD5JZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAmbGRxdW87S25vd2luZ2x5IHJlbHlpbmcmcmRxdW87IG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICAgICA8cD5JZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgICAgIDxwPkEgcGF0ZW50IGxpY2Vuc2UgaXMgJmxkcXVvO2Rpc2NyaW1pbmF0b3J5JnJkcXVvOyBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbiB0aGUKK3Njb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMgY29uZGl0aW9uZWQgb24KK3RoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkKK2dyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZCB3b3JrIGlmIHlvdQorYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMgaW4gdGhlCitidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQgdG8gdGhlCit0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nIHRoZQord29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUgcGFydGllcword2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeSBwYXRlbnQKK2xpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yayBjb252ZXllZCBieQoreW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkgZm9yIGFuZCBpbgorY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0IGNvbnRhaW4gdGhlCitjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsIG9yIHRoYXQgcGF0ZW50CitsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgICAgIDxwPk5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgICAgPGxpPk5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgICAgPHA+SWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5CithIGNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIKK3RoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhCitjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZQordG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UgdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nCitmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleSB0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZAorc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseQorZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCisKKyAgICAgPGxpPlVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgICAgPHA+Tm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQorcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAordW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCitzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlCitjb21iaW5hdGlvbiBhcyBzdWNoLgorCisgICAgIDxsaT5SZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KKworICAgICA8cD5UaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworICAgICA8cD5FYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlICZsZHF1bztvciBhbnkgbGF0ZXIgdmVyc2lvbiZyZHF1bzsgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmCit0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgICAgPHA+SWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucworb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MgcHVibGljCitzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIHZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UgdG8KK2Nob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBQcm9ncmFtLgorCisgICAgIDxwPkxhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50CitwZXJtaXNzaW9ucy4gIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55CithdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCitsYXRlciB2ZXJzaW9uLgorCisgICAgIDxsaT5EaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCisgICAgIDxwPlRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkKK0FQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKK0hPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAmbGRxdW87QVMgSVMmcmRxdW87IFdJVEhPVVQKK1dBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQKK1BFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFCitERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4KKworICAgICA8bGk+TGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKKyAgICAgPHA+SU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUgorQ09OVkVZUyBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCitBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQKK05PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IKK0xPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNCitUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUgorUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICAgIDxsaT5JbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgICAgPHA+SWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisgICAgIDwvb2w+CisKKzxoMyBjbGFzcz0iaGVhZGluZyI+RU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TPC9oMz4KKworPGgzIGNsYXNzPSJoZWFkaW5nIj5Ib3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXM8L2gzPgorCis8cD5JZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZQordGVybXMuCisKKyAgIDxwPlRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgJmxkcXVvO2NvcHlyaWdodCZyZHF1bzsgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDx2YXI+b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPC92YXI+CisgICAgIENvcHlyaWdodCAoQykgPHZhcj55ZWFyPC92YXI+IDx2YXI+bmFtZSBvZiBhdXRob3I8L3Zhcj4KKyAgICAgCisgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICAgICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAgIAorICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAKKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIj5odHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPC9hPi4KKzwvcHJlPgorICAgPHA+QWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgIDxwPklmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKK25vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDx2YXI+cHJvZ3JhbTwvdmFyPiBDb3B5cmlnaHQgKEMpIDx2YXI+eWVhcjwvdmFyPiA8dmFyPm5hbWUgb2YgYXV0aG9yPC92YXI+CisgICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zaG93IHc8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisgICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2hvdyBjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBkZXRhaWxzLgorPC9wcmU+CisgICA8cD5UaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2hvdyB3PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNob3cgYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzaG91bGQgc2hvdwordGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyCitwcm9ncmFtJ3MgY29tbWFuZHMgbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQKK3VzZSBhbiAmbGRxdW87YWJvdXQgYm94JnJkcXVvOy4KKworICAgPHA+WW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKK2lmIGFueSwgdG8gc2lnbiBhICZsZHF1bztjb3B5cmlnaHQgZGlzY2xhaW1lciZyZHF1bzsgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuIAorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKKzxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8iPmh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy88L2E+LgorCisgICA8cD5UaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91cgorcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZQorbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeQorYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dAorZmlyc3QsIHBsZWFzZSByZWFkIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3doeS1ub3QtbGdwbC5odG1sIj5odHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbDwvYT4uIAorPCEtLSBtYW4gZW5kIC0tPgorCis8IS0tICAtLT4KKzwhLS0gR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIC0tPgorPCEtLSAgLS0+Cis8IS0tIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGluY2x1c2lvbiBpbiB0aGUgaW5zdGFsbCBtYW51YWwuIC0tPgorPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vQ3JheS1wb2ludGVycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NyYXktcG9pbnRlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTdmNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0NyYXktcG9pbnRlcnMuaHRtbApAQCAtMCwwICsxLDE3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q3JheSBwb2ludGVycyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiIgdGl0bGU9IkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIb2xsZXJpdGgtY29uc3RhbnRzLXN1cHBvcnQuaHRtbCNIb2xsZXJpdGgtY29uc3RhbnRzLXN1cHBvcnQiIHRpdGxlPSJIb2xsZXJpdGggY29uc3RhbnRzIHN1cHBvcnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDT05WRVJULXNwZWNpZmllci5odG1sI0NPTlZFUlQtc3BlY2lmaWVyIiB0aXRsZT0iQ09OVkVSVCBzcGVjaWZpZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQ3JheS1wb2ludGVycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDT05WRVJULXNwZWNpZmllci5odG1sI0NPTlZFUlQtc3BlY2lmaWVyIj5DT05WRVJUIHNwZWNpZmllcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkhvbGxlcml0aC1jb25zdGFudHMtc3VwcG9ydC5odG1sI0hvbGxlcml0aC1jb25zdGFudHMtc3VwcG9ydCI+SG9sbGVyaXRoIGNvbnN0YW50cyBzdXBwb3J0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjEuMTQgQ3JheSBwb2ludGVyczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXBvaW50ZXJfMDAyYy1DcmF5LTM0MSI+PC9hPgorQ3JheSBwb2ludGVycyBhcmUgcGFydCBvZiBhIG5vbi1zdGFuZGFyZCBleHRlbnNpb24gdGhhdCBwcm92aWRlcyBhCitDLWxpa2UgcG9pbnRlciBpbiBGb3J0cmFuLiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgdGhyb3VnaCBhIHBhaXIgb2YKK3ZhcmlhYmxlczogYW4gaW50ZWdlciAicG9pbnRlciIgdGhhdCBob2xkcyBhIG1lbW9yeSBhZGRyZXNzLCBhbmQgYQorInBvaW50ZWUiIHRoYXQgaXMgdXNlZCB0byBkZXJlZmVyZW5jZSB0aGUgcG9pbnRlci4KKworICAgPHA+UG9pbnRlci9wb2ludGVlIHBhaXJzIGFyZSBkZWNsYXJlZCBpbiBzdGF0ZW1lbnRzIG9mIHRoZSBmb3JtOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgcG9pbnRlciAoICZsdDtwb2ludGVyJmd0OyAsICZsdDtwb2ludGVlJmd0OyApCis8L3ByZT4KKyAgIDxwPm9yLAorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgcG9pbnRlciAoICZsdDtwb2ludGVyMSZndDsgLCAmbHQ7cG9pbnRlZTEmZ3Q7ICksICggJmx0O3BvaW50ZXIyJmd0OyAsICZsdDtwb2ludGVlMiZndDsgKSwgLi4uCis8L3ByZT4KKyAgIDxwPlRoZSBwb2ludGVyIGlzIGFuIGludGVnZXIgdGhhdCBpcyBpbnRlbmRlZCB0byBob2xkIGEgbWVtb3J5IGFkZHJlc3MuIAorVGhlIHBvaW50ZWUgbWF5IGJlIGFuIGFycmF5IG9yIHNjYWxhci4gIEEgcG9pbnRlZSBjYW4gYmUgYW4gYXNzdW1lZAorc2l6ZSBhcnJheSZtZGFzaDt0aGF0IGlzLCB0aGUgbGFzdCBkaW1lbnNpb24gbWF5IGJlIGxlZnQgdW5zcGVjaWZpZWQgYnkKK3VzaW5nIGEgPGNvZGU+KjwvY29kZT4gaW4gcGxhY2Ugb2YgYSB2YWx1ZSZtZGFzaDtidXQgYSBwb2ludGVlIGNhbm5vdCBiZSBhbgorYXNzdW1lZCBzaGFwZSBhcnJheS4gIE5vIHNwYWNlIGlzIGFsbG9jYXRlZCBmb3IgdGhlIHBvaW50ZWUuCisKKyAgIDxwPlRoZSBwb2ludGVlIG1heSBoYXZlIGl0cyB0eXBlIGRlY2xhcmVkIGJlZm9yZSBvciBhZnRlciB0aGUgcG9pbnRlcgorc3RhdGVtZW50LCBhbmQgaXRzIGFycmF5IHNwZWNpZmljYXRpb24gKGlmIGFueSkgbWF5IGJlIGRlY2xhcmVkCitiZWZvcmUsIGR1cmluZywgb3IgYWZ0ZXIgdGhlIHBvaW50ZXIgc3RhdGVtZW50LiAgVGhlIHBvaW50ZXIgbWF5IGJlCitkZWNsYXJlZCBhcyBhbiBpbnRlZ2VyIHByaW9yIHRvIHRoZSBwb2ludGVyIHN0YXRlbWVudC4gIEhvd2V2ZXIsIHNvbWUKK21hY2hpbmVzIGhhdmUgZGVmYXVsdCBpbnRlZ2VyIHNpemVzIHRoYXQgYXJlIGRpZmZlcmVudCB0aGFuIHRoZSBzaXplCitvZiBhIHBvaW50ZXIsIGFuZCBzbyB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbm90IHBvcnRhYmxlOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgaW50ZWdlciBpcHQKKyAgICAgICAgICAgICBwb2ludGVyIChpcHQsIGlhcnIpCis8L3ByZT4KKyAgIDxwPklmIGEgcG9pbnRlciBpcyBkZWNsYXJlZCB3aXRoIGEga2luZCB0aGF0IGlzIHRvbyBzbWFsbCwgdGhlIGNvbXBpbGVyCit3aWxsIGlzc3VlIGEgd2FybmluZzsgdGhlIHJlc3VsdGluZyBiaW5hcnkgd2lsbCBwcm9iYWJseSBub3Qgd29yaworY29ycmVjdGx5LCBiZWNhdXNlIHRoZSBtZW1vcnkgYWRkcmVzc2VzIHN0b3JlZCBpbiB0aGUgcG9pbnRlcnMgbWF5IGJlCit0cnVuY2F0ZWQuICBJdCBpcyBzYWZlciB0byBvbWl0IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBhYm92ZSBleGFtcGxlOworaWYgZXhwbGljaXQgZGVjbGFyYXRpb24gb2YgaXB0J3MgdHlwZSBpcyBvbWl0dGVkLCB0aGVuIHRoZSBjb21waWxlcgord2lsbCBlbnN1cmUgdGhhdCBpcHQgaXMgYW4gaW50ZWdlciB2YXJpYWJsZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhCitwb2ludGVyLgorCisgICA8cD5Qb2ludGVyIGFyaXRobWV0aWMgaXMgdmFsaWQgd2l0aCBDcmF5IHBvaW50ZXJzLCBidXQgaXQgaXMgbm90IHRoZSBzYW1lCithcyBDIHBvaW50ZXIgYXJpdGhtZXRpYy4gIENyYXkgcG9pbnRlcnMgYXJlIGp1c3Qgb3JkaW5hcnkgaW50ZWdlcnMsIHNvCit0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgaG93IG1hbnkgYnl0ZXMgdG8gYWRkIHRvIGEKK3BvaW50ZXIgaW4gb3JkZXIgdG8gaW5jcmVtZW50IGl0LiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgcmVhbCB0YXJnZXQoMTApCisgICAgICAgICAgICAgcmVhbCBwb2ludGVlKDEwKQorICAgICAgICAgICAgIHBvaW50ZXIgKGlwdCwgcG9pbnRlZSkKKyAgICAgICAgICAgICBpcHQgPSBsb2MgKHRhcmdldCkKKyAgICAgICAgICAgICBpcHQgPSBpcHQgKyAxCis8L3ByZT4KKyAgIDxwPlRoZSBsYXN0IHN0YXRlbWVudCBkb2VzIG5vdCBzZXQgPGNvZGU+aXB0PC9jb2RlPiB0byB0aGUgYWRkcmVzcyBvZgorPGNvZGU+dGFyZ2V0KDEpPC9jb2RlPiwgYXMgaXQgd291bGQgaW4gQyBwb2ludGVyIGFyaXRobWV0aWMuICBBZGRpbmcgPGNvZGU+MTwvY29kZT4KK3RvIDxjb2RlPmlwdDwvY29kZT4ganVzdCBhZGRzIG9uZSBieXRlIHRvIHRoZSBhZGRyZXNzIHN0b3JlZCBpbiA8Y29kZT5pcHQ8L2NvZGU+LgorCisgICA8cD5BbnkgZXhwcmVzc2lvbiBpbnZvbHZpbmcgdGhlIHBvaW50ZWUgd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHVzZSB0aGUKK3ZhbHVlIHN0b3JlZCBpbiB0aGUgcG9pbnRlciBhcyB0aGUgYmFzZSBhZGRyZXNzLgorCisgICA8cD5UbyBnZXQgdGhlIGFkZHJlc3Mgb2YgZWxlbWVudHMsIHRoaXMgZXh0ZW5zaW9uIHByb3ZpZGVzIGFuIGludHJpbnNpYworZnVuY3Rpb24gPGNvZGU+TE9DKCk8L2NvZGU+LiAgVGhlIDxjb2RlPkxPQygpPC9jb2RlPiBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZQorPGNvZGU+JmFtcDs8L2NvZGU+IG9wZXJhdG9yIGluIEMsIGV4Y2VwdCB0aGUgYWRkcmVzcyBpcyBjYXN0IHRvIGFuIGludGVnZXIgdHlwZToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIHJlYWwgYXIoMTApCisgICAgICAgICAgICAgcG9pbnRlcihpcHQsIGFycHRlKDEwKSkKKyAgICAgICAgICAgICByZWFsIGFycHRlCisgICAgICAgICAgICAgaXB0ID0gbG9jKGFyKSAgISBNYWtlcyBhcnB0ZSBpcyBhbiBhbGlhcyBmb3IgYXIKKyAgICAgICAgICAgICBhcnB0ZSgxKSA9IDEuMCAhIFNldHMgYXIoMSkgdG8gMS4wCis8L3ByZT4KKyAgIDxwPlRoZSBwb2ludGVyIGNhbiBhbHNvIGJlIHNldCBieSBhIGNhbGwgdG8gdGhlIDxjb2RlPk1BTExPQzwvY29kZT4gaW50cmluc2ljCisoc2VlIDxhIGhyZWY9Ik1BTExPQy5odG1sI01BTExPQyI+TUFMTE9DPC9hPikuCisKKyAgIDxwPkNyYXkgcG9pbnRlZXMgb2Z0ZW4gYXJlIHVzZWQgdG8gYWxpYXMgYW4gZXhpc3RpbmcgdmFyaWFibGUuICBGb3IKK2V4YW1wbGU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICBpbnRlZ2VyIHRhcmdldCgxMCkKKyAgICAgICAgICAgICBpbnRlZ2VyIGlhcnIoMTApCisgICAgICAgICAgICAgcG9pbnRlciAoaXB0LCBpYXJyKQorICAgICAgICAgICAgIGlwdCA9IGxvYyh0YXJnZXQpCis8L3ByZT4KKyAgIDxwPkFzIGxvbmcgYXMgPGNvZGU+aXB0PC9jb2RlPiByZW1haW5zIHVuY2hhbmdlZCwgPGNvZGU+aWFycjwvY29kZT4gaXMgbm93IGFuIGFsaWFzIGZvcgorPGNvZGU+dGFyZ2V0PC9jb2RlPi4gIFRoZSBvcHRpbWl6ZXIsIGhvd2V2ZXIsIHdpbGwgbm90IGRldGVjdCB0aGlzIGFsaWFzaW5nLCBzbworaXQgaXMgdW5zYWZlIHRvIHVzZSA8Y29kZT5pYXJyPC9jb2RlPiBhbmQgPGNvZGU+dGFyZ2V0PC9jb2RlPiBzaW11bHRhbmVvdXNseS4gIFVzaW5nCithIHBvaW50ZWUgaW4gYW55IHdheSB0aGF0IHZpb2xhdGVzIHRoZSBGb3J0cmFuIGFsaWFzaW5nIHJ1bGVzIG9yCithc3N1bXB0aW9ucyBpcyBpbGxlZ2FsLiAgSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBhdm9pZCBkb2luZwordGhpczsgdGhlIGNvbXBpbGVyIHdvcmtzIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgbm8gc3VjaCBhbGlhc2luZworb2NjdXJzLgorCisgICA8cD5DcmF5IHBvaW50ZXJzIHdpbGwgd29yayBjb3JyZWN0bHkgd2hlbiB0aGVyZSBpcyBubyBhbGlhc2luZyAoaS5lLiwgd2hlbgordGhleSBhcmUgdXNlZCB0byBhY2Nlc3MgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmxvY2sgb2YgbWVtb3J5KSwgYW5kCithbHNvIGluIGFueSByb3V0aW5lIHdoZXJlIGEgcG9pbnRlZSBpcyB1c2VkLCBidXQgYW55IHZhcmlhYmxlIHdpdGggd2hpY2gKK2l0IHNoYXJlcyBzdG9yYWdlIGlzIG5vdCB1c2VkLiAgQ29kZSB0aGF0IHZpb2xhdGVzIHRoZXNlIHJ1bGVzIG1heSBub3QKK3J1biBhcyB0aGUgdXNlciBpbnRlbmRzLiAgVGhpcyBpcyBub3QgYSBidWcgaW4gdGhlIG9wdGltaXplcjsgYW55IGNvZGUKK3RoYXQgdmlvbGF0ZXMgdGhlIGFsaWFzaW5nIHJ1bGVzIGlzIGlsbGVnYWwuICAoTm90ZSB0aGF0IHRoaXMgaXMgbm90Cit1bmlxdWUgdG8gR05VIEZvcnRyYW47IGFueSBGb3J0cmFuIGNvbXBpbGVyIHRoYXQgc3VwcG9ydHMgQ3JheSBwb2ludGVycword2lsbCAmbGRxdW87aW5jb3JyZWN0bHkmcmRxdW87IG9wdGltaXplIGNvZGUgd2l0aCBpbGxlZ2FsIGFsaWFzaW5nLikKKworICAgPHA+VGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc3RyaWN0aW9ucyBvbiB0aGUgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSBhcHBsaWVkCit0byBDcmF5IHBvaW50ZXJzIGFuZCBwb2ludGVlcy4gIFBvaW50ZWVzIG1heSBub3QgaGF2ZSB0aGUKKzxjb2RlPkFMTE9DQVRBQkxFPC9jb2RlPiwgPGNvZGU+SU5URU5UPC9jb2RlPiwgPGNvZGU+T1BUSU9OQUw8L2NvZGU+LCA8Y29kZT5EVU1NWTwvY29kZT4sCis8Y29kZT5UQVJHRVQ8L2NvZGU+LCA8Y29kZT5JTlRSSU5TSUM8L2NvZGU+LCBvciA8Y29kZT5QT0lOVEVSPC9jb2RlPiBhdHRyaWJ1dGVzLiAgUG9pbnRlcnMKK21heSBub3QgaGF2ZSB0aGUgPGNvZGU+RElNRU5TSU9OPC9jb2RlPiwgPGNvZGU+UE9JTlRFUjwvY29kZT4sIDxjb2RlPlRBUkdFVDwvY29kZT4sCis8Y29kZT5BTExPQ0FUQUJMRTwvY29kZT4sIDxjb2RlPkVYVEVSTkFMPC9jb2RlPiwgb3IgPGNvZGU+SU5UUklOU0lDPC9jb2RlPiBhdHRyaWJ1dGVzLCBub3IKK21heSB0aGV5IGJlIGZ1bmN0aW9uIHJlc3VsdHMuICBQb2ludGVlcyBtYXkgbm90IG9jY3VyIGluIG1vcmUgdGhhbiBvbmUKK3BvaW50ZXIgc3RhdGVtZW50LiAgQSBwb2ludGVlIGNhbm5vdCBiZSBhIHBvaW50ZXIuICBQb2ludGVlcyBjYW5ub3Qgb2NjdXIKK2luIGVxdWl2YWxlbmNlLCBjb21tb24sIG9yIGRhdGEgc3RhdGVtZW50cy4KKworICAgPHA+QSBDcmF5IHBvaW50ZXIgbWF5IGFsc28gcG9pbnQgdG8gYSBmdW5jdGlvbiBvciBhIHN1YnJvdXRpbmUuICBGb3IKK2V4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZXhjZXJwdCBpcyB2YWxpZDoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgICBleHRlcm5hbCBzdWIKKyAgICAgICBwb2ludGVyIChzdWJwdHIsc3VicHRlKQorICAgICAgIGV4dGVybmFsIHN1YnB0ZQorICAgICAgIHN1YnB0ciA9IGxvYyhzdWIpCisgICAgICAgY2FsbCBzdWJwdGUoKQorICAgICAgIFsuLi5dCisgICAgICAgc3Vicm91dGluZSBzdWIKKyAgICAgICBbLi4uXQorICAgICAgIGVuZCBzdWJyb3V0aW5lIHN1YgorPC9wcmU+CisgICA8cD5BIHBvaW50ZXIgbWF5IGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgY291cnNlIG9mIGEgcHJvZ3JhbSwgYW5kIHRoaXMKK3dpbGwgY2hhbmdlIHRoZSBsb2NhdGlvbiB0byB3aGljaCB0aGUgcG9pbnRlZSByZWZlcnMuICBIb3dldmVyLCB3aGVuCitwb2ludGVlcyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cywgdGhleSBhcmUgdHJlYXRlZCBhcyBvcmRpbmFyeQordmFyaWFibGVzIGluIHRoZSBpbnZva2VkIGZ1bmN0aW9uLiAgU3Vic2VxdWVudCBjaGFuZ2VzIHRvIHRoZSBwb2ludGVyCit3aWxsIG5vdCBjaGFuZ2UgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgYXJyYXkgdGhhdCB3YXMgcGFzc2VkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiYmQxYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EQVRFXzAwNWZBTkRfMDA1ZlRJTUUuaHRtbApAQCAtMCwwICsxLDExNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+REFURV9BTkRfVElNRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDVElNRS5odG1sI0NUSU1FIiB0aXRsZT0iQ1RJTUUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEQkxFLmh0bWwjREJMRSIgdGl0bGU9IkRCTEUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iREFURV9BTkRfVElNRSI+PC9hPgorPGEgbmFtZT0iREFURV8wMDVmQU5EXzAwNWZUSU1FIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRCTEUuaHRtbCNEQkxFIj5EQkxFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+Q1RJTUU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNjEgPGNvZGU+REFURV9BTkRfVElNRTwvY29kZT4gJm1kYXNoOyBEYXRlIGFuZCB0aW1lIHN1YnJvdXRpbmU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1EQVRFXzAwNWZBTkRfMDA1ZlRJTUUtNTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGF0ZV8wMDJjLWN1cnJlbnQtNTY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtY3VycmVudC1kYXRlLTU2OCI+PC9hPjxhIG5hbWU9ImluZGV4LXRpbWVfMDAyYy1jdXJyZW50LTU2OSI+PC9hPjxhIG5hbWU9ImluZGV4LWN1cnJlbnQtdGltZS01NzAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5EQVRFX0FORF9USU1FKERBVEUsIFRJTUUsIFpPTkUsIFZBTFVFUyk8L2NvZGU+IGdldHMgdGhlIGNvcnJlc3BvbmRpbmcgZGF0ZSBhbmQKK3RpbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVhbC10aW1lIHN5c3RlbSBjbG9jay4gIDx2YXI+REFURTwvdmFyPiBpcworPGNvZGU+SU5URU5UKE9VVCk8L2NvZGU+IGFuZCBoYXMgZm9ybSBjY3l5bW1kZC4gIDx2YXI+VElNRTwvdmFyPiBpcyA8Y29kZT5JTlRFTlQoT1VUKTwvY29kZT4gYW5kCitoYXMgZm9ybSBoaG1tc3Muc3NzLiAgPHZhcj5aT05FPC92YXI+IGlzIDxjb2RlPklOVEVOVChPVVQpPC9jb2RlPiBhbmQgaGFzIGZvcm0gKCstKWhobW0sCityZXByZXNlbnRpbmcgdGhlIGRpZmZlcmVuY2Ugd2l0aCByZXNwZWN0IHRvIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIChVVEMpLiAKK1VuYXZhaWxhYmxlIHRpbWUgYW5kIGRhdGUgcGFyYW1ldGVycyByZXR1cm4gYmxhbmtzLgorCisgICAgIDxwPjx2YXI+VkFMVUVTPC92YXI+IGlzIDxjb2RlPklOVEVOVChPVVQpPC9jb2RlPiBhbmQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZzoKKworICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPjxjb2RlPlZBTFVFKDEpPC9jb2RlPjogPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPlRoZSB5ZWFyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+PGNvZGU+VkFMVUUoMik8L2NvZGU+OiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+VGhlIG1vbnRoCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+PGNvZGU+VkFMVUUoMyk8L2NvZGU+OiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+VGhlIGRheSBvZiB0aGUgbW9udGgKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj48Y29kZT5WQUxVRSg0KTwvY29kZT46IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5UaW1lIGRpZmZlcmVuY2Ugd2l0aCBVVEMgaW4gbWludXRlcworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPjxjb2RlPlZBTFVFKDUpPC9jb2RlPjogPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPlRoZSBob3VyIG9mIHRoZSBkYXkKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj48Y29kZT5WQUxVRSg2KTwvY29kZT46IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5UaGUgbWludXRlcyBvZiB0aGUgaG91cgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPjxjb2RlPlZBTFVFKDcpPC9jb2RlPjogPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPlRoZSBzZWNvbmRzIG9mIHRoZSBtaW51dGUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj48Y29kZT5WQUxVRSg4KTwvY29kZT46IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5UaGUgbWlsbGlzZWNvbmRzIG9mIHRoZSBzZWNvbmQKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIERBVEVfQU5EX1RJTUUoW0RBVEUsIFRJTUUsIFpPTkUsIFZBTFVFU10pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+REFURTwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgVGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+Q0hBUkFDVEVSKExFTj04KTwvY29kZT4KK29yIGxhcmdlciwgYW5kIG9mIGRlZmF1bHQga2luZC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlRJTUU8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPkNIQVJBQ1RFUihMRU49MTApPC9jb2RlPgorb3IgbGFyZ2VyLCBhbmQgb2YgZGVmYXVsdCBraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+Wk9ORTwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgVGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+Q0hBUkFDVEVSKExFTj01KTwvY29kZT4KK29yIGxhcmdlciwgYW5kIG9mIGRlZmF1bHQga2luZC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlZBTFVFUzwvdmFyPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVIoOCk8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPk5vbmUKKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfdGltZV9hbmRfZGF0ZQorICAgICAgICAgICAgICBjaGFyYWN0ZXIoOCkgIDo6IGRhdGUKKyAgICAgICAgICAgICAgY2hhcmFjdGVyKDEwKSA6OiB0aW1lCisgICAgICAgICAgICAgIGNoYXJhY3Rlcig1KSAgOjogem9uZQorICAgICAgICAgICAgICBpbnRlZ2VyLGRpbWVuc2lvbig4KSA6OiB2YWx1ZXMKKyAgICAgICAgICAgICAgISB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICAgICAgICBjYWxsIGRhdGVfYW5kX3RpbWUoZGF0ZSx0aW1lLHpvbmUsdmFsdWVzKQorICAgICAgICAgICAgICBjYWxsIGRhdGVfYW5kX3RpbWUoREFURT1kYXRlLFpPTkU9em9uZSkKKyAgICAgICAgICAgICAgY2FsbCBkYXRlX2FuZF90aW1lKFRJTUU9dGltZSkKKyAgICAgICAgICAgICAgY2FsbCBkYXRlX2FuZF90aW1lKFZBTFVFUz12YWx1ZXMpCisgICAgICAgICAgICAgIHByaW50ICcoYSwyeCxhLDJ4LGEpJywgZGF0ZSwgdGltZSwgem9uZQorICAgICAgICAgICAgICBwcmludCAnKDhpNSkpJywgdmFsdWVzCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF90aW1lX2FuZF9kYXRlCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQ1BVXzAwNWZUSU1FLmh0bWwjQ1BVXzAwNWZUSU1FIj5DUFVfVElNRTwvYT4sIDxhIGhyZWY9IlNZU1RFTV8wMDVmQ0xPQ0suaHRtbCNTWVNURU1fMDA1ZkNMT0NLIj5TWVNURU1fQ0xPQ0s8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vREJMRS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RCTEUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ZiZjkxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RCTEUuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EQkxFIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI0RBVEVfMDA1ZkFORF8wMDVmVElNRSIgdGl0bGU9IkRBVEVfQU5EX1RJTUUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEQ01QTFguaHRtbCNEQ01QTFgiIHRpdGxlPSJEQ01QTFgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iREJMRSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEQ01QTFguaHRtbCNEQ01QTFgiPkRDTVBMWDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI0RBVEVfMDA1ZkFORF8wMDVmVElNRSI+REFURV9BTkRfVElNRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC42MiA8Y29kZT5EQkxFPC9jb2RlPiAmbWRhc2g7IERvdWJsZSBjb252ZXJzaW9uIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtREJMRS01NzEiPjwvYT48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8tcmVhbC01NzIiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5EQkxFKEEpPC9jb2RlPiBDb252ZXJ0cyA8dmFyPkE8L3Zhcj4gdG8gZG91YmxlIHByZWNpc2lvbiByZWFsIHR5cGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gREJMRShBKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkE8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LCA8Y29kZT5SRUFMPC9jb2RlPiwKK29yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSBkb3VibGUgcHJlY2lzaW9uIHJlYWwuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2RibGUKKyAgICAgICAgICAgICAgcmVhbCAgICA6OiB4ID0gMi4xOAorICAgICAgICAgICAgICBpbnRlZ2VyIDo6IGkgPSA1CisgICAgICAgICAgICAgIGNvbXBsZXggOjogeiA9ICgyLjMsMS4xNCkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgZGJsZSh4KSwgZGJsZShpKSwgZGJsZSh6KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZGJsZQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlJFQUwuaHRtbCNSRUFMIj5SRUFMPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RDTVBMWC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RDTVBMWC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NzQzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRENNUExYLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RENNUExYIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRCTEUuaHRtbCNEQkxFIiB0aXRsZT0iREJMRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRJR0lUUy5odG1sI0RJR0lUUyIgdGl0bGU9IkRJR0lUUyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEQ01QTFgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRElHSVRTLmh0bWwjRElHSVRTIj5ESUdJVFM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEQkxFLmh0bWwjREJMRSI+REJMRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC42MyA8Y29kZT5EQ01QTFg8L2NvZGU+ICZtZGFzaDsgRG91YmxlIGNvbXBsZXggY29udmVyc2lvbiBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LURDTVBMWC01NzMiPjwvYT48YSBuYW1lPSJpbmRleC1jb21wbGV4LW51bWJlcnNfMDAyYy1jb252ZXJzaW9uLXRvLTU3NCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnZlcnNpb25fMDAyYy10by1jb21wbGV4LTU3NSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkRDTVBMWChYIFssWV0pPC9jb2RlPiByZXR1cm5zIGEgZG91YmxlIGNvbXBsZXggbnVtYmVyIHdoZXJlIDx2YXI+WDwvdmFyPiBpcworY29udmVydGVkIHRvIHRoZSByZWFsIGNvbXBvbmVudC4gIElmIDx2YXI+WTwvdmFyPiBpcyBwcmVzZW50IGl0IGlzIGNvbnZlcnRlZCB0byB0aGUKK2ltYWdpbmFyeSBjb21wb25lbnQuICBJZiA8dmFyPlk8L3Zhcj4gaXMgbm90IHByZXNlbnQgdGhlbiB0aGUgaW1hZ2luYXJ5IGNvbXBvbmVudCBpcworc2V0IHRvIDAuMC4gIElmIDx2YXI+WDwvdmFyPiBpcyBjb21wbGV4IHRoZW4gPHZhcj5ZPC92YXI+IG11c3Qgbm90IGJlIHByZXNlbnQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBEQ01QTFgoWCBbLCBZXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBtYXkgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4sIDxjb2RlPlJFQUw8L2NvZGU+LAorb3IgPGNvZGU+Q09NUExFWDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ZPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwgaWYgPHZhcj5YPC92YXI+IGlzIG5vdCA8Y29kZT5DT01QTEVYPC9jb2RlPi4pIE1heSBiZQorPGNvZGU+SU5URUdFUjwvY29kZT4gb3IgPGNvZGU+UkVBTDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPkNPTVBMRVgoOCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2RjbXBseAorICAgICAgICAgICAgICBpbnRlZ2VyIDo6IGkgPSA0MgorICAgICAgICAgICAgICByZWFsIDo6IHggPSAzLjE0CisgICAgICAgICAgICAgIGNvbXBsZXggOjogegorICAgICAgICAgICAgICB6ID0gY21wbHgoaSwgeCkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgZGNtcGx4KGkpCisgICAgICAgICAgICAgIHByaW50ICosIGRjbXBseCh4KQorICAgICAgICAgICAgICBwcmludCAqLCBkY21wbHgoeikKKyAgICAgICAgICAgICAgcHJpbnQgKiwgZGNtcGx4KHgsaSkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2RjbXBseAorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9ESUdJVFMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9ESUdJVFMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDlmOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RJR0lUUy5odG1sCkBAIC0wLDAgKzEsODggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRJR0lUUyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEQ01QTFguaHRtbCNEQ01QTFgiIHRpdGxlPSJEQ01QTFgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJESU0uaHRtbCNESU0iIHRpdGxlPSJESU0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRElHSVRTIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRJTS5odG1sI0RJTSI+RElNPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRENNUExYLmh0bWwjRENNUExYIj5EQ01QTFg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNjQgPGNvZGU+RElHSVRTPC9jb2RlPiAmbWRhc2g7IFNpZ25pZmljYW50IGJpbmFyeSBkaWdpdHMgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1ESUdJVFMtNTc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW9kZWwtcmVwcmVzZW50YXRpb25fMDAyYy1zaWduaWZpY2FudC1kaWdpdHMtNTc3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RElHSVRTKFgpPC9jb2RlPiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYmluYXJ5IGRpZ2l0cyBvZiB0aGUgaW50ZXJuYWwKK21vZGVsIHJlcHJlc2VudGF0aW9uIG9mIDx2YXI+WDwvdmFyPi4gIEZvciBleGFtcGxlLCBvbiBhIHN5c3RlbSB1c2luZyBhIDMyLWJpdAorZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24sIGEgZGVmYXVsdCByZWFsIG51bWJlciB3b3VsZCBsaWtlbHkgcmV0dXJuIDI0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBESUdJVFMoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBtYXkgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IgPGNvZGU+UkVBTDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9kaWdpdHMKKyAgICAgICAgICAgICAgaW50ZWdlciA6OiBpID0gMTIzNDUKKyAgICAgICAgICAgICAgcmVhbCA6OiB4ID0gMy4xNDMKKyAgICAgICAgICAgICAgcmVhbCg4KSA6OiB5ID0gMi4zMworICAgICAgICAgICAgICBwcmludCAqLCBkaWdpdHMoaSkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgZGlnaXRzKHgpCisgICAgICAgICAgICAgIHByaW50ICosIGRpZ2l0cyh5KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZGlnaXRzCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RJTS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RJTS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYzE3NmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRElNLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RElNIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRJR0lUUy5odG1sI0RJR0lUUyIgdGl0bGU9IkRJR0lUUyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRPVF8wMDVmUFJPRFVDVC5odG1sI0RPVF8wMDVmUFJPRFVDVCIgdGl0bGU9IkRPVF9QUk9EVUNUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRJTSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJET1RfMDA1ZlBST0RVQ1QuaHRtbCNET1RfMDA1ZlBST0RVQ1QiPkRPVF9QUk9EVUNUPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRElHSVRTLmh0bWwjRElHSVRTIj5ESUdJVFM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNjUgPGNvZGU+RElNPC9jb2RlPiAmbWRhc2g7IFBvc2l0aXZlIGRpZmZlcmVuY2U8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1ESU0tNTc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtSURJTS01NzkiPjwvYT48YSBuYW1lPSJpbmRleC1ERElNLTU4MCI+PC9hPjxhIG5hbWU9ImluZGV4LXBvc2l0aXZlLWRpZmZlcmVuY2UtNTgxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RElNKFgsWSk8L2NvZGU+IHJldHVybnMgdGhlIGRpZmZlcmVuY2UgPGNvZGU+WC1ZPC9jb2RlPiBpZiB0aGUgcmVzdWx0IGlzIHBvc2l0aXZlOworb3RoZXJ3aXNlIHJldHVybnMgemVyby4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBESU0oWCwgWSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvciA8Y29kZT5SRUFMPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ZPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIDx2YXI+WDwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IgPGNvZGU+UkVBTDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2RpbQorICAgICAgICAgICAgICBpbnRlZ2VyIDo6IGkKKyAgICAgICAgICAgICAgcmVhbCg4KSA6OiB4CisgICAgICAgICAgICAgIGkgPSBkaW0oNCwgMTUpCisgICAgICAgICAgICAgIHggPSBkaW0oNC4zNDVfOCwgMi4xMTFfOCkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgaQorICAgICAgICAgICAgICBwcmludCAqLCB4CisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9kaW0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+RElNKFgsWSk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KSBYLCBZPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JRElNKFgsWSk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpIFgsIFk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRESU0oWCxZKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgWCwgWTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRE9UXzAwNWZQUk9EVUNULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRE9UXzAwNWZQUk9EVUNULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmMjgxNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9ET1RfMDA1ZlBST0RVQ1QuaHRtbApAQCAtMCwwICsxLDk4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5ET1RfUFJPRFVDVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJESU0uaHRtbCNESU0iIHRpdGxlPSJESU0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEUFJPRC5odG1sI0RQUk9EIiB0aXRsZT0iRFBST0QiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRE9UX1BST0RVQ1QiPjwvYT4KKzxhIG5hbWU9IkRPVF8wMDVmUFJPRFVDVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEUFJPRC5odG1sI0RQUk9EIj5EUFJPRDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRJTS5odG1sI0RJTSI+RElNPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjY2IDxjb2RlPkRPVF9QUk9EVUNUPC9jb2RlPiAmbWRhc2g7IERvdCBwcm9kdWN0IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRE9UXzAwNWZQUk9EVUNULTU4MiI+PC9hPjxhIG5hbWU9ImluZGV4LWRvdC1wcm9kdWN0LTU4MyI+PC9hPjxhIG5hbWU9ImluZGV4LXZlY3Rvci1wcm9kdWN0LTU4NCI+PC9hPjxhIG5hbWU9ImluZGV4LXByb2R1Y3RfMDAyYy12ZWN0b3ItNTg1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RE9UX1BST0RVQ1QoVkVDVE9SX0EsIFZFQ1RPUl9CKTwvY29kZT4gY29tcHV0ZXMgdGhlIGRvdCBwcm9kdWN0IG11bHRpcGxpY2F0aW9uCitvZiB0d28gdmVjdG9ycyA8dmFyPlZFQ1RPUl9BPC92YXI+IGFuZCA8dmFyPlZFQ1RPUl9CPC92YXI+LiAgVGhlIHR3byB2ZWN0b3JzIG1heSBiZQorZWl0aGVyIG51bWVyaWMgb3IgbG9naWNhbCBhbmQgbXVzdCBiZSBhcnJheXMgb2YgcmFuayBvbmUgYW5kIG9mIGVxdWFsIHNpemUuIElmCit0aGUgdmVjdG9ycyBhcmUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IgPGNvZGU+UkVBTDwvY29kZT4sIHRoZSByZXN1bHQgaXMKKzxjb2RlPlNVTShWRUNUT1JfQSpWRUNUT1JfQik8L2NvZGU+LiBJZiB0aGUgdmVjdG9ycyBhcmUgPGNvZGU+Q09NUExFWDwvY29kZT4sIHRoZSByZXN1bHQKK2lzIDxjb2RlPlNVTShDT05KRyhWRUNUT1JfQSkqVkVDVE9SX0IpPC9jb2RlPi4gSWYgdGhlIHZlY3RvcnMgYXJlIDxjb2RlPkxPR0lDQUw8L2NvZGU+LAordGhlIHJlc3VsdCBpcyA8Y29kZT5BTlkoVkVDVE9SX0EgLkFORC4gVkVDVE9SX0IpPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gRE9UX1BST0RVQ1QoVkVDVE9SX0EsIFZFQ1RPUl9CKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlZFQ1RPUl9BPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSBudW1lcmljIG9yIDxjb2RlPkxPR0lDQUw8L2NvZGU+LCByYW5rIDEuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5WRUNUT1JfQjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgbnVtZXJpYyBpZiA8dmFyPlZFQ1RPUl9BPC92YXI+IGlzIG9mIG51bWVyaWMgdHlwZSBvciA8Y29kZT5MT0dJQ0FMPC9jb2RlPiBpZiA8dmFyPlZFQ1RPUl9BPC92YXI+IGlzIG9mIHR5cGUgPGNvZGU+TE9HSUNBTDwvY29kZT4uIDx2YXI+VkVDVE9SX0I8L3Zhcj4gc2hhbGwgYmUgYSByYW5rLW9uZSBhcnJheS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5JZiB0aGUgYXJndW1lbnRzIGFyZSBudW1lcmljLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc2NhbGFyIG9mIG51bWVyaWMgdHlwZSwKKzxjb2RlPklOVEVHRVI8L2NvZGU+LCA8Y29kZT5SRUFMPC9jb2RlPiwgb3IgPGNvZGU+Q09NUExFWDwvY29kZT4uICBJZiB0aGUgYXJndW1lbnRzIGFyZQorPGNvZGU+TE9HSUNBTDwvY29kZT4sIHRoZSByZXR1cm4gdmFsdWUgaXMgPGNvZGU+LlRSVUUuPC9jb2RlPiBvciA8Y29kZT4uRkFMU0UuPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZG90X3Byb2QKKyAgICAgICAgICAgICAgaW50ZWdlciwgZGltZW5zaW9uKDMpIDo6IGEsIGIKKyAgICAgICAgICAgICAgYSA9ICgvIDEsIDIsIDMgLykKKyAgICAgICAgICAgICAgYiA9ICgvIDQsIDUsIDYgLykKKyAgICAgICAgICAgICAgcHJpbnQgJygzaTMpJywgYQorICAgICAgICAgICAgICBwcmludCAqCisgICAgICAgICAgICAgIHByaW50ICcoM2kzKScsIGIKKyAgICAgICAgICAgICAgcHJpbnQgKgorICAgICAgICAgICAgICBwcmludCAqLCBkb3RfcHJvZHVjdChhLGIpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9kb3RfcHJvZAorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EUFJPRC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RQUk9ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM3MDViMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EUFJPRC5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRQUk9EIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRPVF8wMDVmUFJPRFVDVC5odG1sI0RPVF8wMDVmUFJPRFVDVCIgdGl0bGU9IkRPVF9QUk9EVUNUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRFJFQUwuaHRtbCNEUkVBTCIgdGl0bGU9IkRSRUFMIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRQUk9EIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRSRUFMLmh0bWwjRFJFQUwiPkRSRUFMPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRE9UXzAwNWZQUk9EVUNULmh0bWwjRE9UXzAwNWZQUk9EVUNUIj5ET1RfUFJPRFVDVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC42NyA8Y29kZT5EUFJPRDwvY29kZT4gJm1kYXNoOyBEb3VibGUgcHJvZHVjdCBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LURQUk9ELTU4NiI+PC9hPjxhIG5hbWU9ImluZGV4LXByb2R1Y3RfMDAyYy1kb3VibGVfMDAyZHByZWNpc2lvbi01ODciPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5EUFJPRChYLFkpPC9jb2RlPiByZXR1cm5zIHRoZSBwcm9kdWN0IDxjb2RlPlgqWTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gRFBST0QoWCwgWSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5SRUFMPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMKDgpPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZHByb2QKKyAgICAgICAgICAgICAgcmVhbCA6OiB4ID0gNS4yCisgICAgICAgICAgICAgIHJlYWwgOjogeSA9IDIuMworICAgICAgICAgICAgICByZWFsKDgpIDo6IGQKKyAgICAgICAgICAgICAgZCA9IGRwcm9kKHgseSkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgZAorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZHByb2QKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRQUk9EKFgsWSk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIFgsIFk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRFJFQUwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EUkVBTC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTk0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRFJFQUwuaHRtbApAQCAtMCwwICsxLDg0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EUkVBTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEUFJPRC5odG1sI0RQUk9EIiB0aXRsZT0iRFBST0QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEU0hJRlRMLmh0bWwjRFNISUZUTCIgdGl0bGU9IkRTSElGVEwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRFJFQUwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRFNISUZUTC5odG1sI0RTSElGVEwiPkRTSElGVEw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEUFJPRC5odG1sI0RQUk9EIj5EUFJPRDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC42OCA8Y29kZT5EUkVBTDwvY29kZT4gJm1kYXNoOyBEb3VibGUgcmVhbCBwYXJ0IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRFJFQUwtNTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29tcGxleC1udW1iZXJzXzAwMmMtcmVhbC1wYXJ0LTU4OSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkRSRUFMKFopPC9jb2RlPiByZXR1cm5zIHRoZSByZWFsIHBhcnQgb2YgY29tcGxleCB2YXJpYWJsZSA8dmFyPlo8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBEUkVBTChBKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkE8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPkNPTVBMRVgoOCk8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMKDgpPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZHJlYWwKKyAgICAgICAgICAgICAgY29tcGxleCg4KSA6OiB6ID0gKDEuM184LDcuMl84KQorICAgICAgICAgICAgICBwcmludCAqLCBkcmVhbCh6KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZHJlYWwKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJBSU1BRy5odG1sI0FJTUFHIj5BSU1BRzwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RTSElGVEwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EU0hJRlRMLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0Njc2MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EU0hJRlRMLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RFNISUZUTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEUkVBTC5odG1sI0RSRUFMIiB0aXRsZT0iRFJFQUwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEU0hJRlRSLmh0bWwjRFNISUZUUiIgdGl0bGU9IkRTSElGVFIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRFNISUZUTCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEU0hJRlRSLmh0bWwjRFNISUZUUiI+RFNISUZUUjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRSRUFMLmh0bWwjRFJFQUwiPkRSRUFMPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjY5IDxjb2RlPkRTSElGVEw8L2NvZGU+ICZtZGFzaDsgQ29tYmluZWQgbGVmdCBzaGlmdDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LURTSElGVEwtNTkwIj48L2E+PGEgbmFtZT0iaW5kZXgtbGVmdC1zaGlmdF8wMDJjLWNvbWJpbmVkLTU5MSI+PC9hPjxhIG5hbWU9ImluZGV4LXNoaWZ0XzAwMmMtbGVmdC01OTIiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5EU0hJRlRMKEksIEosIFNISUZUKTwvY29kZT4gY29tYmluZXMgYml0cyBvZiA8dmFyPkk8L3Zhcj4gYW5kIDx2YXI+SjwvdmFyPi4gVGhlCityaWdodG1vc3QgPHZhcj5TSElGVDwvdmFyPiBiaXRzIG9mIHRoZSByZXN1bHQgYXJlIHRoZSBsZWZ0bW9zdCA8dmFyPlNISUZUPC92YXI+CitiaXRzIG9mIDx2YXI+SjwvdmFyPiwgYW5kIHRoZSByZW1haW5pbmcgYml0cyBhcmUgdGhlIHJpZ2h0bW9zdCBiaXRzIG9mCis8dmFyPkk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBEU0hJRlRMKEksIEosIFNISUZUKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IgYSBCT1ogY29uc3RhbnQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5KPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9yIGEgQk9aIGNvbnN0YW50LiAKK0lmIGJvdGggPHZhcj5JPC92YXI+IGFuZCA8dmFyPko8L3Zhcj4gaGF2ZSBpbnRlZ2VyIHR5cGUsIHRoZW4gdGhleSBzaGFsbCBoYXZlCit0aGUgc2FtZSBraW5kIHR5cGUgcGFyYW1ldGVyLiA8dmFyPkk8L3Zhcj4gYW5kIDx2YXI+SjwvdmFyPiBzaGFsbCBub3QgYm90aCBiZQorQk9aIGNvbnN0YW50cy4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNISUZUPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiBJdCBzaGFsbAorYmUgbm9ubmVnYXRpdmUuICBJZiA8dmFyPkk8L3Zhcj4gaXMgbm90IGEgQk9aIGNvbnN0YW50LCB0aGVuIDx2YXI+U0hJRlQ8L3Zhcj4KK3NoYWxsIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA8Y29kZT5CSVRfU0laRShJKTwvY29kZT47IG90aGVyd2lzZSwKKzx2YXI+U0hJRlQ8L3Zhcj4gc2hhbGwgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDxjb2RlPkJJVF9TSVpFKEopPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5JZiBlaXRoZXIgPHZhcj5JPC92YXI+IG9yIDx2YXI+SjwvdmFyPiBpcyBhIEJPWiBjb25zdGFudCwgaXQgaXMgZmlyc3QgY29udmVydGVkCithcyBpZiBieSB0aGUgaW50cmluc2ljIGZ1bmN0aW9uIDxjb2RlPklOVDwvY29kZT4gdG8gYW4gaW50ZWdlciB0eXBlIHdpdGggdGhlCitraW5kIHR5cGUgcGFyYW1ldGVyIG9mIHRoZSBvdGhlci4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJEU0hJRlRSLmh0bWwjRFNISUZUUiI+RFNISUZUUjwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EU0hJRlRSLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRFNISUZUUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NmUzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRFNISUZUUi5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRTSElGVFIgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRFNISUZUTC5odG1sI0RTSElGVEwiIHRpdGxlPSJEU0hJRlRMIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRFRJTUUuaHRtbCNEVElNRSIgdGl0bGU9IkRUSU1FIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRTSElGVFIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRFRJTUUuaHRtbCNEVElNRSI+RFRJTUU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEU0hJRlRMLmh0bWwjRFNISUZUTCI+RFNISUZUTDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC43MCA8Y29kZT5EU0hJRlRSPC9jb2RlPiAmbWRhc2g7IENvbWJpbmVkIHJpZ2h0IHNoaWZ0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRFNISUZUUi01OTMiPjwvYT48YSBuYW1lPSJpbmRleC1yaWdodC1zaGlmdF8wMDJjLWNvbWJpbmVkLTU5NCI+PC9hPjxhIG5hbWU9ImluZGV4LXNoaWZ0XzAwMmMtcmlnaHQtNTk1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RFNISUZUUihJLCBKLCBTSElGVCk8L2NvZGU+IGNvbWJpbmVzIGJpdHMgb2YgPHZhcj5JPC92YXI+IGFuZCA8dmFyPko8L3Zhcj4uIFRoZQorbGVmdG1vc3QgPHZhcj5TSElGVDwvdmFyPiBiaXRzIG9mIHRoZSByZXN1bHQgYXJlIHRoZSByaWdodG1vc3QgPHZhcj5TSElGVDwvdmFyPgorYml0cyBvZiA8dmFyPkk8L3Zhcj4sIGFuZCB0aGUgcmVtYWluaW5nIGJpdHMgYXJlIHRoZSBsZWZ0bW9zdCBiaXRzIG9mCis8dmFyPko8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBEU0hJRlRSKEksIEosIFNISUZUKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IgYSBCT1ogY29uc3RhbnQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5KPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9yIGEgQk9aIGNvbnN0YW50LiAKK0lmIGJvdGggPHZhcj5JPC92YXI+IGFuZCA8dmFyPko8L3Zhcj4gaGF2ZSBpbnRlZ2VyIHR5cGUsIHRoZW4gdGhleSBzaGFsbCBoYXZlCit0aGUgc2FtZSBraW5kIHR5cGUgcGFyYW1ldGVyLiA8dmFyPkk8L3Zhcj4gYW5kIDx2YXI+SjwvdmFyPiBzaGFsbCBub3QgYm90aCBiZQorQk9aIGNvbnN0YW50cy4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNISUZUPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiBJdCBzaGFsbAorYmUgbm9ubmVnYXRpdmUuICBJZiA8dmFyPkk8L3Zhcj4gaXMgbm90IGEgQk9aIGNvbnN0YW50LCB0aGVuIDx2YXI+U0hJRlQ8L3Zhcj4KK3NoYWxsIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA8Y29kZT5CSVRfU0laRShJKTwvY29kZT47IG90aGVyd2lzZSwKKzx2YXI+U0hJRlQ8L3Zhcj4gc2hhbGwgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDxjb2RlPkJJVF9TSVpFKEopPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5JZiBlaXRoZXIgPHZhcj5JPC92YXI+IG9yIDx2YXI+SjwvdmFyPiBpcyBhIEJPWiBjb25zdGFudCwgaXQgaXMgZmlyc3QgY29udmVydGVkCithcyBpZiBieSB0aGUgaW50cmluc2ljIGZ1bmN0aW9uIDxjb2RlPklOVDwvY29kZT4gdG8gYW4gaW50ZWdlciB0eXBlIHdpdGggdGhlCitraW5kIHR5cGUgcGFyYW1ldGVyIG9mIHRoZSBvdGhlci4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJEU0hJRlRMLmh0bWwjRFNISUZUTCI+RFNISUZUTDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EVElNRS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RUSU1FLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzNjY5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EVElNRS5odG1sCkBAIC0wLDAgKzEsMTMwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EVElNRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEU0hJRlRSLmh0bWwjRFNISUZUUiIgdGl0bGU9IkRTSElGVFIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFT1NISUZULmh0bWwjRU9TSElGVCIgdGl0bGU9IkVPU0hJRlQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRFRJTUUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRU9TSElGVC5odG1sI0VPU0hJRlQiPkVPU0hJRlQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEU0hJRlRSLmh0bWwjRFNISUZUUiI+RFNISUZUUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC43MSA8Y29kZT5EVElNRTwvY29kZT4gJm1kYXNoOyBFeGVjdXRpb24gdGltZSBzdWJyb3V0aW5lIChvciBmdW5jdGlvbik8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1EVElNRS01OTYiPjwvYT48YSBuYW1lPSJpbmRleC10aW1lXzAwMmMtZWxhcHNlZC01OTciPjwvYT48YSBuYW1lPSJpbmRleC1lbGFwc2VkLXRpbWUtNTk4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RFRJTUUoVkFMVUVTLCBUSU1FKTwvY29kZT4gaW5pdGlhbGx5IHJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIG9mIHJ1bnRpbWUKK3NpbmNlIHRoZSBzdGFydCBvZiB0aGUgcHJvY2VzcydzIGV4ZWN1dGlvbiBpbiA8dmFyPlRJTUU8L3Zhcj4uICA8dmFyPlZBTFVFUzwvdmFyPgorcmV0dXJucyB0aGUgdXNlciBhbmQgc3lzdGVtIGNvbXBvbmVudHMgb2YgdGhpcyB0aW1lIGluIDxjb2RlPlZBTFVFUygxKTwvY29kZT4gYW5kCis8Y29kZT5WQUxVRVMoMik8L2NvZGU+IHJlc3BlY3RpdmVseS4gPHZhcj5USU1FPC92YXI+IGlzIGVxdWFsIHRvIDxjb2RlPlZBTFVFUygxKSArCitWQUxVRVMoMik8L2NvZGU+LgorCisgICAgIDxwPlN1YnNlcXVlbnQgaW52b2NhdGlvbnMgb2YgPGNvZGU+RFRJTUU8L2NvZGU+IHJldHVybiB2YWx1ZXMgYWNjdW11bGF0ZWQgc2luY2UgdGhlCitwcmV2aW91cyBpbnZvY2F0aW9uLgorCisgICAgIDxwPk9uIHNvbWUgc3lzdGVtcywgdGhlIHVuZGVybHlpbmcgdGltaW5ncyBhcmUgcmVwcmVzZW50ZWQgdXNpbmcgdHlwZXMgd2l0aAorc3VmZmljaWVudGx5IHNtYWxsIGxpbWl0cyB0aGF0IG92ZXJmbG93cyAod3JhcCBhcm91bmQpIGFyZSBwb3NzaWJsZSwgc3VjaCBhcworMzItYml0IHR5cGVzLiBUaGVyZWZvcmUsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhpcyBpbnRyaW5zaWMgbWlnaHQgYmUsIG9yCitiZWNvbWUsIG5lZ2F0aXZlLCBvciBudW1lcmljYWxseSBsZXNzIHRoYW4gcHJldmlvdXMgdmFsdWVzLCBkdXJpbmcgYSBzaW5nbGUKK3J1biBvZiB0aGUgY29tcGlsZWQgcHJvZ3JhbS4KKworICAgICA8cD5QbGVhc2Ugbm90ZSwgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRocmVhZCBzYWZlIGlmIHVzZWQgd2l0aGluIE9wZW5NUAorZGlyZWN0aXZlcywgaS5lLiwgaXRzIHN0YXRlIHdpbGwgYmUgY29uc2lzdGVudCB3aGlsZSBjYWxsZWQgZnJvbSBtdWx0aXBsZQordGhyZWFkcy4gSG93ZXZlciwgaWYgPGNvZGU+RFRJTUU8L2NvZGU+IGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMsIHRoZSByZXN1bHQKK2lzIHN0aWxsIHRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IGludm9jYXRpb24uIFRoaXMgbWF5IG5vdCBnaXZlIHRoZSBpbnRlbmRlZAorcmVzdWx0cy4gSWYgcG9zc2libGUsIHVzZSA8Y29kZT5DUFVfVElNRTwvY29kZT4gaW5zdGVhZC4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOyBob3dldmVyLAorb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxwPjx2YXI+VkFMVUVTPC92YXI+IGFuZCA8dmFyPlRJTUU8L3Zhcj4gYXJlIDxjb2RlPklOVEVOVChPVVQpPC9jb2RlPiBhbmQgcHJvdmlkZSB0aGUgZm9sbG93aW5nOgorCisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+PGNvZGU+VkFMVUVTKDEpPC9jb2RlPjogPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MCUiPlVzZXIgdGltZSBpbiBzZWNvbmRzLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzAlIj48Y29kZT5WQUxVRVMoMik8L2NvZGU+OiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQwJSI+U3lzdGVtIHRpbWUgaW4gc2Vjb25kcy4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+PGNvZGU+VElNRTwvY29kZT46IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDAlIj5SdW4gdGltZSBzaW5jZSBzdGFydCBpbiBzZWNvbmRzLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+Q0FMTCBEVElNRShWQUxVRVMsIFRJTUUpPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5USU1FID0gRFRJTUUoVkFMVUVTKTwvY29kZT4sIChub3QgcmVjb21tZW5kZWQpLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5WQUxVRVM8L3Zhcj48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTCg0KSwgRElNRU5TSU9OKDIpPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlRJTUU8L3Zhcj48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTCg0KTwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+RWxhcHNlZCB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGxhc3QgaW52b2NhdGlvbiBvciBzaW5jZSB0aGUgc3RhcnQgb2YgcHJvZ3JhbQorZXhlY3V0aW9uIGlmIG5vdCBjYWxsZWQgYmVmb3JlLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9kdGltZQorICAgICAgICAgICAgICBpbnRlZ2VyKDgpIDo6IGksIGoKKyAgICAgICAgICAgICAgcmVhbCwgZGltZW5zaW9uKDIpIDo6IHRhcnJheQorICAgICAgICAgICAgICByZWFsIDo6IHJlc3VsdAorICAgICAgICAgICAgICBjYWxsIGR0aW1lKHRhcnJheSwgcmVzdWx0KQorICAgICAgICAgICAgICBwcmludCAqLCByZXN1bHQKKyAgICAgICAgICAgICAgcHJpbnQgKiwgdGFycmF5KDEpCisgICAgICAgICAgICAgIHByaW50ICosIHRhcnJheSgyKQorICAgICAgICAgICAgICBkbyBpPTEsMTAwMDAwMDAwICAgICEgSnVzdCBhIGRlbGF5CisgICAgICAgICAgICAgICAgICBqID0gaSAqIGkgLSBpCisgICAgICAgICAgICAgIGVuZCBkbworICAgICAgICAgICAgICBjYWxsIGR0aW1lKHRhcnJheSwgcmVzdWx0KQorICAgICAgICAgICAgICBwcmludCAqLCByZXN1bHQKKyAgICAgICAgICAgICAgcHJpbnQgKiwgdGFycmF5KDEpCisgICAgICAgICAgICAgIHByaW50ICosIHRhcnJheSgyKQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZHRpbWUKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDUFVfMDA1ZlRJTUUuaHRtbCNDUFVfMDA1ZlRJTUUiPkNQVV9USU1FPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRGF0YS1jb25zaXN0ZW5jeS1hbmQtZHVyYWJpbGl0eS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RhdGEtY29uc2lzdGVuY3ktYW5kLWR1cmFiaWxpdHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzA1NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RhdGEtY29uc2lzdGVuY3ktYW5kLWR1cmFiaWxpdHkuaHRtbApAQCAtMCwwICsxLDEyOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGF0YSBjb25zaXN0ZW5jeSBhbmQgZHVyYWJpbGl0eSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbCNDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MiIHRpdGxlPSJDb21waWxlciBDaGFyYWN0ZXJpc3RpY3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUaHJlYWRfMDAyZHNhZmV0eS1vZi10aGUtcnVudGltZS1saWJyYXJ5Lmh0bWwjVGhyZWFkXzAwMmRzYWZldHktb2YtdGhlLXJ1bnRpbWUtbGlicmFyeSIgdGl0bGU9IlRocmVhZC1zYWZldHkgb2YgdGhlIHJ1bnRpbWUgbGlicmFyeSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEYXRhLWNvbnNpc3RlbmN5LWFuZC1kdXJhYmlsaXR5Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVGhyZWFkXzAwMmRzYWZldHktb2YtdGhlLXJ1bnRpbWUtbGlicmFyeS5odG1sI1RocmVhZF8wMDJkc2FmZXR5LW9mLXRoZS1ydW50aW1lLWxpYnJhcnkiPlRocmVhZC1zYWZldHkgb2YgdGhlIHJ1bnRpbWUgbGlicmFyeTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBpbGVyLUNoYXJhY3RlcmlzdGljcy5odG1sI0NvbXBpbGVyLUNoYXJhY3RlcmlzdGljcyI+Q29tcGlsZXIgQ2hhcmFjdGVyaXN0aWNzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS40IERhdGEgY29uc2lzdGVuY3kgYW5kIGR1cmFiaWxpdHk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb25zaXN0ZW5jeV8wMDJjLWR1cmFiaWxpdHktMzI4Ij48L2E+CitUaGlzIHNlY3Rpb24gY29udGFpbnMgYSBicmllZiBvdmVydmlldyBvZiBkYXRhIGFuZCBtZXRhZGF0YQorY29uc2lzdGVuY3kgYW5kIGR1cmFiaWxpdHkgaXNzdWVzIHdoZW4gZG9pbmcgSS9PLgorCisgICA8cD5XaXRoIHJlc3BlY3QgdG8gZHVyYWJpbGl0eSwgR05VIEZvcnRyYW4gbWFrZXMgbm8gZWZmb3J0IHRvIGVuc3VyZSB0aGF0CitkYXRhIGlzIGNvbW1pdHRlZCB0byBzdGFibGUgc3RvcmFnZS4gSWYgdGhpcyBpcyByZXF1aXJlZCwgdGhlIEdOVQorRm9ydHJhbiBwcm9ncmFtbWVyIGNhbiB1c2UgdGhlIGludHJpbnNpYyA8Y29kZT5GTlVNPC9jb2RlPiB0byByZXRyaWV2ZSB0aGUKK2xvdyBsZXZlbCBmaWxlIGRlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byBhbiBvcGVuIEZvcnRyYW4gdW5pdC4gVGhlbiwKK3VzaW5nIGUuZy4gdGhlIDxjb2RlPklTT19DX0JJTkRJTkc8L2NvZGU+IGZlYXR1cmUsIG9uZSBjYW4gY2FsbCB0aGUKK3VuZGVybHlpbmcgc3lzdGVtIGNhbGwgdG8gZmx1c2ggZGlydHkgZGF0YSB0byBzdGFibGUgc3RvcmFnZSwgc3VjaCBhcworPGNvZGU+ZnN5bmM8L2NvZGU+IG9uIFBPU0lYLCA8Y29kZT5fY29tbWl0PC9jb2RlPiBvbiBNaW5nVywgb3IgPGNvZGU+ZmNudGwoZmQsCitGX0ZVTExTWU5DLCAwKTwvY29kZT4gb24gTWFjIE9TIFguIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gY2FsbAorZnN5bmM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICEgRGVjbGFyZSB0aGUgaW50ZXJmYWNlIGZvciBQT1NJWCBmc3luYyBmdW5jdGlvbgorICAgICAgIGludGVyZmFjZQorICAgICAgICAgZnVuY3Rpb24gZnN5bmMgKGZkKSBiaW5kKGMsbmFtZT0iZnN5bmMiKQorICAgICAgICAgdXNlIGlzb19jX2JpbmRpbmcsIG9ubHk6IGNfaW50CisgICAgICAgICAgIGludGVnZXIoY19pbnQpLCB2YWx1ZSA6OiBmZAorICAgICAgICAgICBpbnRlZ2VyKGNfaW50KSA6OiBmc3luYworICAgICAgICAgZW5kIGZ1bmN0aW9uIGZzeW5jCisgICAgICAgZW5kIGludGVyZmFjZQorICAgICAKKyAgICAgICAhIFZhcmlhYmxlIGRlY2xhcmF0aW9uCisgICAgICAgaW50ZWdlciA6OiByZXQKKyAgICAgCisgICAgICAgISBPcGVuaW5nIHVuaXQgMTAKKyAgICAgICBvcGVuICgxMCxmaWxlPSJmb28iKQorICAgICAKKyAgICAgICAhIC4uLgorICAgICAgICEgUGVyZm9ybSBJL08gb24gdW5pdCAxMAorICAgICAgICEgLi4uCisgICAgIAorICAgICAgICEgRmx1c2ggYW5kIHN5bmMKKyAgICAgICBmbHVzaCgxMCkKKyAgICAgICByZXQgPSBmc3luYyhmbnVtKDEwKSkKKyAgICAgCisgICAgICAgISBIYW5kbGUgcG9zc2libGUgZXJyb3IKKyAgICAgICBpZiAocmV0IC89IDApIHN0b3AgIkVycm9yIGNhbGxpbmcgRlNZTkMiCis8L3ByZT4KKyAgIDxwPldpdGggcmVzcGVjdCB0byBjb25zaXN0ZW5jeSwgZm9yIHJlZ3VsYXIgZmlsZXMgR05VIEZvcnRyYW4gdXNlcworYnVmZmVyZWQgSS9PIGluIG9yZGVyIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuIFRoaXMgYnVmZmVyIGlzIGZsdXNoZWQKK2F1dG9tYXRpY2FsbHkgd2hlbiBmdWxsIGFuZCBpbiBzb21lIG90aGVyIHNpdHVhdGlvbnMsIGUuZy4gd2hlbgorY2xvc2luZyBhIHVuaXQuIEl0IGNhbiBhbHNvIGJlIGV4cGxpY2l0bHkgZmx1c2hlZCB3aXRoIHRoZQorPGNvZGU+RkxVU0g8L2NvZGU+IHN0YXRlbWVudC4gQWxzbywgdGhlIGJ1ZmZlcmluZyBjYW4gYmUgdHVybmVkIG9mZiB3aXRoIHRoZQorPGNvZGU+R0ZPUlRSQU5fVU5CVUZGRVJFRF9BTEw8L2NvZGU+IGFuZAorPGNvZGU+R0ZPUlRSQU5fVU5CVUZGRVJFRF9QUkVDT05ORUNURUQ8L2NvZGU+IGVudmlyb25tZW50IHZhcmlhYmxlcy4gU3BlY2lhbAorZmlsZXMsIHN1Y2ggYXMgdGVybWluYWxzIGFuZCBwaXBlcywgYXJlIGFsd2F5cyB1bmJ1ZmZlcmVkLiBTb21ldGltZXMsCitob3dldmVyLCBmdXJ0aGVyIHRoaW5ncyBtYXkgbmVlZCB0byBiZSBkb25lIGluIG9yZGVyIHRvIGFsbG93IG90aGVyCitwcm9jZXNzZXMgdG8gc2VlIGRhdGEgdGhhdCBHTlUgRm9ydHJhbiBoYXMgd3JpdHRlbiwgYXMgZm9sbG93cy4KKworICAgPHA+VGhlIFdpbmRvd3MgcGxhdGZvcm0gc3VwcG9ydHMgYSByZWxheGVkIG1ldGFkYXRhIGNvbnNpc3RlbmN5IG1vZGVsLAord2hlcmUgZmlsZSBtZXRhZGF0YSBpcyB3cml0dGVuIHRvIHRoZSBkaXJlY3RvcnkgbGF6aWx5LiBUaGlzIG1lYW5zCit0aGF0LCBmb3IgaW5zdGFuY2UsIHRoZSA8Y29kZT5kaXI8L2NvZGU+IGNvbW1hbmQgY2FuIHNob3cgYSBzdGFsZSBzaXplIGZvciBhCitmaWxlLiBPbmUgY2FuIGZvcmNlIGEgZGlyZWN0b3J5IG1ldGFkYXRhIHVwZGF0ZSBieSBjbG9zaW5nIHRoZSB1bml0LAorb3IgYnkgY2FsbGluZyA8Y29kZT5fY29tbWl0PC9jb2RlPiBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yLiBOb3RlLCB0aG91Z2gsCit0aGF0IDxjb2RlPl9jb21taXQ8L2NvZGU+IHdpbGwgZm9yY2UgYWxsIGRpcnR5IGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UsIHdoaWNoCitpcyBvZnRlbiBhIHZlcnkgc2xvdyBvcGVyYXRpb24uCisKKyAgIDxwPlRoZSBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpIGltcGxlbWVudHMgYSByZWxheGVkIGNvbnNpc3RlbmN5IG1vZGVsCitjYWxsZWQgb3Blbi10by1jbG9zZSBjb25zaXN0ZW5jeS4gQ2xvc2luZyBhIGZpbGUgZm9yY2VzIGRpcnR5IGRhdGEgYW5kCittZXRhZGF0YSB0byBiZSBmbHVzaGVkIHRvIHRoZSBzZXJ2ZXIsIGFuZCBvcGVuaW5nIGEgZmlsZSBmb3JjZXMgdGhlCitjbGllbnQgdG8gY29udGFjdCB0aGUgc2VydmVyIGluIG9yZGVyIHRvIHJldmFsaWRhdGUgY2FjaGVkCitkYXRhLiA8Y29kZT5mc3luYzwvY29kZT4gd2lsbCBhbHNvIGZvcmNlIGEgZmx1c2ggb2YgZGlydHkgZGF0YSBhbmQgbWV0YWRhdGEKK3RvIHRoZSBzZXJ2ZXIuIFNpbWlsYXIgdG8gPGNvZGU+b3BlbjwvY29kZT4gYW5kIDxjb2RlPmNsb3NlPC9jb2RlPiwgYWNxdWlyaW5nIGFuZAorcmVsZWFzaW5nIDxjb2RlPmZjbnRsPC9jb2RlPiBmaWxlIGxvY2tzLCBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHRoZW0sIHdpbGwKK2Fsc28gZm9yY2UgY2FjaGUgdmFsaWRhdGlvbiBhbmQgZmx1c2hpbmcgZGlydHkgZGF0YSBhbmQgbWV0YWRhdGEuCisKKzwhLS0gIC0tPgorPCEtLSBFeHRlbnNpb25zIC0tPgorPCEtLSAgLS0+Cis8IS0tIE1heWJlIHRoaXMgY2hhcHRlciBzaG91bGQgYmUgbWVyZ2VkIHdpdGggdGhlICdTdGFuZGFyZHMnIHNlY3Rpb24sIC0tPgorPCEtLSB3aGVuZXZlciB0aGF0IGlzIHdyaXR0ZW4gOi0pIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RlYnVnZ2luZy1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRGVidWdnaW5nLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDAwZGQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RlYnVnZ2luZy1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRlYnVnZ2luZyBPcHRpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIiB0aXRsZT0iRXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiIHRpdGxlPSJEaXJlY3RvcnkgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZWJ1Z2dpbmctT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiI+SW52b2tpbmcgR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjUgT3B0aW9ucyBmb3IgZGVidWdnaW5nIHlvdXIgcHJvZ3JhbSBvciBHTlUgRm9ydHJhbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1kZWJ1Z2dpbmctMTk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGVidWdnaW5nLWluZm9ybWF0aW9uLW9wdGlvbnMtMTk2Ij48L2E+CitHTlUgRm9ydHJhbiBoYXMgdmFyaW91cyBzcGVjaWFsIG9wdGlvbnMgdGhhdCBhcmUgdXNlZCBmb3IgZGVidWdnaW5nCitlaXRoZXIgeW91ciBwcm9ncmFtIG9yIHRoZSBHTlUgRm9ydHJhbiBjb21waWxlci4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZkdW1wLWZvcnRyYW4tb3JpZ2luYWw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmR1bXBfMDAyZGZvcnRyYW5fMDAyZG9yaWdpbmFsXzAwN2QtMTk3Ij48L2E+T3V0cHV0IHRoZSBpbnRlcm5hbCBwYXJzZSB0cmVlIGFmdGVyIHRyYW5zbGF0aW5nIHRoZSBzb3VyY2UgcHJvZ3JhbQoraW50byBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gIE9ubHkgcmVhbGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZQorR05VIEZvcnRyYW4gY29tcGlsZXIgaXRzZWxmLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkdW1wLW9wdGltaXplZC10cmVlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZkdW1wXzAwMmRmb3J0cmFuXzAwMmRvcHRpbWl6ZWRfMDA3ZC0xOTgiPjwvYT5PdXRwdXQgdGhlIHBhcnNlIHRyZWUgYWZ0ZXIgZnJvbnQtZW5kIG9wdGltaXphdGlvbi4gIE9ubHkgcmVhbGx5Cit1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUgR05VIEZvcnRyYW4gY29tcGlsZXIgaXRzZWxmLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmR1bXBfMDAyZHBhcnNlXzAwMmR0cmVlXzAwN2QtMTk5Ij48L2E+T3V0cHV0IHRoZSBpbnRlcm5hbCBwYXJzZSB0cmVlIGFmdGVyIHRyYW5zbGF0aW5nIHRoZSBzb3VyY2UgcHJvZ3JhbQoraW50byBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gIE9ubHkgcmVhbGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZQorR05VIEZvcnRyYW4gY29tcGlsZXIgaXRzZWxmLiAgVGhpcyBvcHRpb24gaXMgZGVwcmVjYXRlZDsgdXNlCis8Y29kZT4tZmR1bXAtZm9ydHJhbi1vcmlnaW5hbDwvY29kZT4gaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZnBlLXRyYXA9PC9jb2RlPjx2YXI+bGlzdDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZmcGVfMDAyZHRyYXBfMDAzZF8wMDdkXzAwNDB2YXJfMDA3Ymxpc3RfMDA3ZC0yMDAiPjwvYT5TcGVjaWZ5IGEgbGlzdCBvZiBmbG9hdGluZyBwb2ludCBleGNlcHRpb24gdHJhcHMgdG8gZW5hYmxlLiAgT24gbW9zdAorc3lzdGVtcywgaWYgYSBmbG9hdGluZyBwb2ludCBleGNlcHRpb24gb2NjdXJzIGFuZCB0aGUgdHJhcCBmb3IgdGhhdAorZXhjZXB0aW9uIGlzIGVuYWJsZWQsIGEgU0lHRlBFIHNpZ25hbCB3aWxsIGJlIHNlbnQgYW5kIHRoZSBwcm9ncmFtCitiZWluZyBhYm9ydGVkLCBwcm9kdWNpbmcgYSBjb3JlIGZpbGUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICA8dmFyPmxpc3Q8L3Zhcj4KK2lzIGEgKHBvc3NpYmx5IGVtcHR5KSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgZm9sbG93aW5nCitleGNlcHRpb25zOiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludmFsaWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKGludmFsaWQgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uLCBzdWNoIGFzCis8Y29kZT5TUVJUKC0xLjApPC9jb2RlPiksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+emVybzwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoZGl2aXNpb24gYnkgemVybyksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b3ZlcmZsb3c8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyhvdmVyZmxvdyBpbiBhIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbiksICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dW5kZXJmbG93PC9zcGFuPjwvc2FtcD4mcnNxdW87ICh1bmRlcmZsb3cKK2luIGEgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uKSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbmV4YWN0PC9zcGFuPjwvc2FtcD4mcnNxdW87IChsb3NzIG9mIHByZWNpc2lvbgorZHVyaW5nIG9wZXJhdGlvbiksIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmRlbm9ybWFsPC9zcGFuPjwvc2FtcD4mcnNxdW87IChvcGVyYXRpb24gcGVyZm9ybWVkIG9uIGEKK2Rlbm9ybWFsIHZhbHVlKS4gIFRoZSBmaXJzdCBmaXZlIGV4Y2VwdGlvbnMgY29ycmVzcG9uZCB0byB0aGUgZml2ZQorSUVFRSA3NTQgZXhjZXB0aW9ucywgd2hlcmVhcyB0aGUgbGFzdCBvbmUgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGVub3JtYWw8L3NwYW4+PC9zYW1wPiZyc3F1bzspIGlzIG5vdAorcGFydCBvZiB0aGUgSUVFRSA3NTQgc3RhbmRhcmQgYnV0IGlzIGF2YWlsYWJsZSBvbiBzb21lIGNvbW1vbgorYXJjaGl0ZWN0dXJlcyBzdWNoIGFzIHg4Ni4KKworICAgICA8cD5UaGUgZmlyc3QgdGhyZWUgZXhjZXB0aW9ucyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnZhbGlkPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnplcm88L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vdmVyZmxvdzwvc3Bhbj48L3NhbXA+JnJzcXVvOykgb2Z0ZW4gaW5kaWNhdGUgc2VyaW91cyBlcnJvcnMsIGFuZCB1bmxlc3MgdGhlIHByb2dyYW0KK2hhcyBwcm92aXNpb25zIGZvciBkZWFsaW5nIHdpdGggdGhlc2UgZXhjZXB0aW9ucywgZW5hYmxpbmcgdHJhcHMgZm9yCit0aGVzZSB0aHJlZSBleGNlcHRpb25zIGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhLgorCisgICAgIDxwPk1hbnksIGlmIG5vdCBtb3N0LCBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIGluY3VyIGxvc3Mgb2YgcHJlY2lzaW9uCitkdWUgdG8gcm91bmRpbmcsIGFuZCBoZW5jZSB0aGUgPGNvZGU+ZmZwZS10cmFwPWluZXhhY3Q8L2NvZGU+IGlzIGxpa2VseSB0bworYmUgdW5pbnRlcmVzdGluZyBpbiBwcmFjdGljZS4KKworICAgICA8cD5CeSBkZWZhdWx0IG5vIGV4Y2VwdGlvbiB0cmFwcyBhcmUgZW5hYmxlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mbm8tYmFja3RyYWNlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZub18wMDJkYmFja3RyYWNlXzAwN2QtMjAxIj48L2E+PGEgbmFtZT0iaW5kZXgtYmFja3RyYWNlLTIwMiI+PC9hPjxhIG5hbWU9ImluZGV4LXRyYWNlLTIwMyI+PC9hPldoZW4gYSBzZXJpb3VzIHJ1bnRpbWUgZXJyb3IgaXMgZW5jb3VudGVyZWQgb3IgYSBkZWFkbHkgc2lnbmFsIGlzCitlbWl0dGVkIChzZWdtZW50YXRpb24gZmF1bHQsIGlsbGVnYWwgaW5zdHJ1Y3Rpb24sIGJ1cyBlcnJvciwKK2Zsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiwgYW5kIHRoZSBvdGhlciBQT1NJWCBzaWduYWxzIHRoYXQgaGF2ZSB0aGUKK2FjdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvcmU8L3NwYW4+PC9zYW1wPiZyc3F1bzspLCB0aGUgRm9ydHJhbiBydW50aW1lIGxpYnJhcnkgdHJpZXMgdG8gb3V0cHV0IGEKK2JhY2t0cmFjZSBvZiB0aGUgZXJyb3IuIDxjb2RlPi1mbm8tYmFja3RyYWNlPC9jb2RlPiBkaXNhYmxlcyB0aGUgYmFja3RyYWNlCitnZW5lcmF0aW9uLiBUaGlzIG9wdGlvbiBvbmx5IGhhcyBpbmZsdWVuY2UgZm9yIGNvbXBpbGF0aW9uIG9mIHRoZQorRm9ydHJhbiBtYWluIHByb2dyYW0uCisKKyAgIDwvZGw+CisKKyAgIDxwPlNlZSA8YSBocmVmPSIuLi9nY2MvRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+T3B0aW9ucyBmb3IgRGVidWdnaW5nIFlvdXIgUHJvZ3JhbSBvciBHQ0M8L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorZGVidWdnaW5nIG9wdGlvbnMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EZXJpdmVkLVR5cGVzLWFuZC1zdHJ1Y3QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EZXJpdmVkLVR5cGVzLWFuZC1zdHJ1Y3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjVmZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0Rlcml2ZWQtVHlwZXMtYW5kLXN0cnVjdC5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRlcml2ZWQgVHlwZXMgYW5kIHN0cnVjdCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQy5odG1sI0ludGVyb3BlcmFiaWxpdHktd2l0aC1DIiB0aXRsZT0iSW50ZXJvcGVyYWJpbGl0eSB3aXRoIEMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbnRyaW5zaWMtVHlwZXMuaHRtbCNJbnRyaW5zaWMtVHlwZXMiIHRpdGxlPSJJbnRyaW5zaWMgVHlwZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnRlcm9wZXJhYmxlLUdsb2JhbC1WYXJpYWJsZXMuaHRtbCNJbnRlcm9wZXJhYmxlLUdsb2JhbC1WYXJpYWJsZXMiIHRpdGxlPSJJbnRlcm9wZXJhYmxlIEdsb2JhbCBWYXJpYWJsZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRGVyaXZlZC1UeXBlcy1hbmQtc3RydWN0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkludGVyb3BlcmFibGUtR2xvYmFsLVZhcmlhYmxlcy5odG1sI0ludGVyb3BlcmFibGUtR2xvYmFsLVZhcmlhYmxlcyI+SW50ZXJvcGVyYWJsZSBHbG9iYWwgVmFyaWFibGVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW50cmluc2ljLVR5cGVzLmh0bWwjSW50cmluc2ljLVR5cGVzIj5JbnRyaW5zaWMgVHlwZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQy5odG1sI0ludGVyb3BlcmFiaWxpdHktd2l0aC1DIj5JbnRlcm9wZXJhYmlsaXR5IHdpdGggQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjcuMS4yIERlcml2ZWQgVHlwZXMgYW5kIHN0cnVjdDwvaDQ+CisKKzxwPkZvciBjb21wYXRpYmlsaXR5IG9mIGRlcml2ZWQgdHlwZXMgd2l0aCA8Y29kZT5zdHJ1Y3Q8L2NvZGU+LCBvbmUgbmVlZHMgdG8gdXNlCit0aGUgPGNvZGU+QklORChDKTwvY29kZT4gYXR0cmlidXRlIGluIHRoZSB0eXBlIGRlY2xhcmF0aW9uLiAgRm9yIGluc3RhbmNlLCB0aGUKK2ZvbGxvd2luZyB0eXBlIGRlY2xhcmF0aW9uCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgVVNFIElTT19DX0JJTkRJTkcKKyAgICAgIFRZUEUsIEJJTkQoQykgOjogbXlUeXBlCisgICAgICAgIElOVEVHRVIoQ19JTlQpIDo6IGkxLCBpMgorICAgICAgICBJTlRFR0VSKENfU0lHTkVEX0NIQVIpIDo6IGkzCisgICAgICAgIFJFQUwoQ19ET1VCTEUpIDo6IGQxCisgICAgICAgIENPTVBMRVgoQ19GTE9BVF9DT01QTEVYKSA6OiBjMQorICAgICAgICBDSEFSQUNURVIoS0lORD1DX0NIQVIpIDo6IHN0cig1KQorICAgICAgRU5EIFRZUEUKKzwvcHJlPgorICAgPHA+bWF0Y2hlcyB0aGUgZm9sbG93aW5nIDxjb2RlPnN0cnVjdDwvY29kZT4gZGVjbGFyYXRpb24gaW4gQworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIHN0cnVjdCB7CisgICAgICAgIGludCBpMSwgaTI7CisgICAgICAgIC8qIE5vdGU6ICJjaGFyIiBtaWdodCBiZSBzaWduZWQgb3IgdW5zaWduZWQuICAqLworICAgICAgICBzaWduZWQgY2hhciBpMzsKKyAgICAgICAgZG91YmxlIGQxOworICAgICAgICBmbG9hdCBfQ29tcGxleCBjMTsKKyAgICAgICAgY2hhciBzdHJbNV07CisgICAgICB9IG15VHlwZTsKKzwvcHJlPgorICAgPHA+RGVyaXZlZCB0eXBlcyB3aXRoIHRoZSBDIGJpbmRpbmcgYXR0cmlidXRlIHNoYWxsIG5vdCBoYXZlIHRoZSA8Y29kZT5zZXF1ZW5jZTwvY29kZT4KK2F0dHJpYnV0ZSwgdHlwZSBwYXJhbWV0ZXJzLCB0aGUgPGNvZGU+ZXh0ZW5kczwvY29kZT4gYXR0cmlidXRlLCBub3IgdHlwZS1ib3VuZAorcHJvY2VkdXJlcy4gIEV2ZXJ5IGNvbXBvbmVudCBtdXN0IGJlIG9mIGludGVyb3BlcmFibGUgdHlwZSBhbmQga2luZCBhbmQgbWF5IG5vdAoraGF2ZSB0aGUgPGNvZGU+cG9pbnRlcjwvY29kZT4gb3IgPGNvZGU+YWxsb2NhdGFibGU8L2NvZGU+IGF0dHJpYnV0ZS4gIFRoZSBuYW1lcyBvZiB0aGUKK2NvbXBvbmVudHMgYXJlIGlycmVsZXZhbnQgZm9yIGludGVyb3BlcmFiaWxpdHkuCisKKyAgIDxwPkFzIHRoZXJlIGV4aXN0IG5vIGRpcmVjdCBGb3J0cmFuIGVxdWl2YWxlbnRzLCBuZWl0aGVyIHVuaW9ucyBub3Igc3RydWN0cword2l0aCBiaXQgZmllbGQgb3IgdmFyaWFibGUtbGVuZ3RoIGFycmF5IG1lbWJlcnMgYXJlIGludGVyb3BlcmFibGUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EaXJlY3RvcnktT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0RpcmVjdG9yeS1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzOTEzMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9EaXJlY3RvcnktT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkRpcmVjdG9yeSBPcHRpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiIHRpdGxlPSJEZWJ1Z2dpbmcgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyIgdGl0bGU9IkxpbmsgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEaXJlY3RvcnktT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiI+SW52b2tpbmcgR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjYgT3B0aW9ucyBmb3IgZGlyZWN0b3J5IHNlYXJjaDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRpcmVjdG9yeV8wMDJjLW9wdGlvbnMtMjA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLWRpcmVjdG9yeS1zZWFyY2gtMjA1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VhcmNoLXBhdGgtMjA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JJTkNMVURFXzAwN2QtZGlyZWN0aXZlLTIwNyI+PC9hPjxhIG5hbWU9ImluZGV4LWRpcmVjdGl2ZV8wMDJjLV8wMDQwY29kZV8wMDdiSU5DTFVERV8wMDdkLTIwOCI+PC9hPlRoZXNlIG9wdGlvbnMgYWZmZWN0IGhvdyBHTlUgRm9ydHJhbiBzZWFyY2hlcworZm9yIGZpbGVzIHNwZWNpZmllZCBieSB0aGUgPGNvZGU+SU5DTFVERTwvY29kZT4gZGlyZWN0aXZlIGFuZCB3aGVyZSBpdCBzZWFyY2hlcworZm9yIHByZXZpb3VzbHkgY29tcGlsZWQgbW9kdWxlcy4KKworICAgPHA+SXQgYWxzbyBhZmZlY3RzIHRoZSBzZWFyY2ggcGF0aHMgdXNlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Y3BwPC9zcGFuPjwvc2FtcD4gd2hlbiB1c2VkIHRvIHByZXByb2Nlc3MKK0ZvcnRyYW4gc291cmNlLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tSTwvY29kZT48dmFyPmRpcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YklfMDA3ZF8wMDQwdmFyXzAwN2JkaXJfMDA3ZC0yMDkiPjwvYT48YSBuYW1lPSJpbmRleC1kaXJlY3RvcnlfMDAyYy1zZWFyY2gtcGF0aHMtZm9yLWluY2x1c2lvbi0yMTAiPjwvYT48YSBuYW1lPSJpbmRleC1pbmNsdXNpb25fMDAyYy1kaXJlY3Rvcnktc2VhcmNoLXBhdGhzLWZvci0yMTEiPjwvYT48YSBuYW1lPSJpbmRleC1zZWFyY2gtcGF0aHNfMDAyYy1mb3ItaW5jbHVkZWQtZmlsZXMtMjEyIj48L2E+PGEgbmFtZT0iaW5kZXgtcGF0aHNfMDAyYy1zZWFyY2gtMjEzIj48L2E+PGEgbmFtZT0iaW5kZXgtbW9kdWxlLXNlYXJjaC1wYXRoLTIxNCI+PC9hPlRoZXNlIGFmZmVjdCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgPGNvZGU+SU5DTFVERTwvY29kZT4gZGlyZWN0aXZlCisoYXMgd2VsbCBhcyBvZiB0aGUgPGNvZGU+I2luY2x1ZGU8L2NvZGU+IGRpcmVjdGl2ZSBvZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmNwcDwvc3Bhbj48L3NhbXA+CitwcmVwcm9jZXNzb3IpLgorCisgICAgIDxwPkFsc28gbm90ZSB0aGF0IHRoZSBnZW5lcmFsIGJlaGF2aW9yIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1JPC9zcGFuPjwvc2FtcD4gYW5kCis8Y29kZT5JTkNMVURFPC9jb2RlPiBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IHdpdGgKKzxjb2RlPiNpbmNsdWRlPC9jb2RlPiBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmNwcDwvc3Bhbj48L3NhbXA+IHByZXByb2Nlc3Nvciwgd2l0aCByZWdhcmQgdG8KK2xvb2tpbmcgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5oZWFkZXIuZ2NjPC9zcGFuPjwvc2FtcD4gZmlsZXMgYW5kIG90aGVyIHN1Y2ggdGhpbmdzLgorCisgICAgIDxwPlRoaXMgcGF0aCBpcyBhbHNvIHVzZWQgdG8gc2VhcmNoIGZvciA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Lm1vZDwvc3Bhbj48L3NhbXA+IGZpbGVzIHdoZW4gcHJldmlvdXNseQorY29tcGlsZWQgbW9kdWxlcyBhcmUgcmVxdWlyZWQgYnkgYSA8Y29kZT5VU0U8L2NvZGU+IHN0YXRlbWVudC4KKworICAgICA8cD5TZWUgPGEgaHJlZj0iLi4vZ2NjL0RpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiPk9wdGlvbnMgZm9yIERpcmVjdG9yeSBTZWFyY2g8L2E+LCBmb3IgaW5mb3JtYXRpb24gb24gdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1KPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiSl8wMDdkXzAwNDB2YXJfMDA3YmRpcl8wMDdkLTIxNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiTV8wMDdkXzAwNDB2YXJfMDA3YmRpcl8wMDdkLTIxNiI+PC9hPjxhIG5hbWU9ImluZGV4LXBhdGhzXzAwMmMtc2VhcmNoLTIxNyI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZHVsZS1zZWFyY2gtcGF0aC0yMTgiPjwvYT5UaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hlcmUgdG8gcHV0IDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4ubW9kPC9zcGFuPjwvc2FtcD4gZmlsZXMgZm9yIGNvbXBpbGVkIG1vZHVsZXMuIAorSXQgaXMgYWxzbyBhZGRlZCB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2hlZCBieSBhbiA8Y29kZT5VU0U8L2NvZGU+CitzdGF0ZW1lbnQuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpbnRyaW5zaWMtbW9kdWxlcy1wYXRoIDwvY29kZT48dmFyPmRpcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpbnRyaW5zaWNfMDAyZG1vZHVsZXNfMDAyZHBhdGhfMDA3ZC1fMDA0MHZhcl8wMDdiZGlyXzAwN2QtMjE5Ij48L2E+PGEgbmFtZT0iaW5kZXgtcGF0aHNfMDAyYy1zZWFyY2gtMjIwIj48L2E+PGEgbmFtZT0iaW5kZXgtbW9kdWxlLXNlYXJjaC1wYXRoLTIyMSI+PC9hPlRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgcHJlLWNvbXBpbGVkIGludHJpbnNpYyBtb2R1bGVzLCBpZgordGhleSBhcmUgbm90IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGV4cGVjdGVkIGJ5IHRoZSBjb21waWxlci4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRU5DT0RFLWFuZC1ERUNPREUtc3RhdGVtZW50cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VOQ09ERS1hbmQtREVDT0RFLXN0YXRlbWVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGZmM2UxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VOQ09ERS1hbmQtREVDT0RFLXN0YXRlbWVudHMuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FTkNPREUgYW5kIERFQ09ERSBzdGF0ZW1lbnRzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iIHRpdGxlPSJFeHRlbnNpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNUUlVDVFVSRS1hbmQtUkVDT1JELmh0bWwjU1RSVUNUVVJFLWFuZC1SRUNPUkQiIHRpdGxlPSJTVFJVQ1RVUkUgYW5kIFJFQ09SRCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucy5odG1sI1ZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucyIgdGl0bGU9IlZhcmlhYmxlIEZPUk1BVCBleHByZXNzaW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFTkNPREUtYW5kLURFQ09ERS1zdGF0ZW1lbnRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucy5odG1sI1ZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucyI+VmFyaWFibGUgRk9STUFUIGV4cHJlc3Npb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU1RSVUNUVVJFLWFuZC1SRUNPUkQuaHRtbCNTVFJVQ1RVUkUtYW5kLVJFQ09SRCI+U1RSVUNUVVJFIGFuZCBSRUNPUkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMi4yIDxjb2RlPkVOQ09ERTwvY29kZT4gYW5kIDxjb2RlPkRFQ09ERTwvY29kZT4gc3RhdGVtZW50czwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiRU5DT0RFXzAwN2QtMzUxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JERUNPREVfMDA3ZC0zNTIiPjwvYT4KK0dOVSBGb3J0cmFuIGRvZXMgbm90IHN1cHBvcnQgdGhlIDxjb2RlPkVOQ09ERTwvY29kZT4gYW5kIDxjb2RlPkRFQ09ERTwvY29kZT4KK3N0YXRlbWVudHMuICBUaGVzZSBzdGF0ZW1lbnRzIGFyZSBiZXN0IHJlcGxhY2VkIGJ5IDxjb2RlPlJFQUQ8L2NvZGU+IGFuZAorPGNvZGU+V1JJVEU8L2NvZGU+IHN0YXRlbWVudHMgaW52b2x2aW5nIGludGVybmFsIGZpbGVzICg8Y29kZT5DSEFSQUNURVI8L2NvZGU+Cit2YXJpYWJsZXMgYW5kIGFycmF5cyksIHdoaWNoIGhhdmUgYmVlbiBwYXJ0IG9mIHRoZSBGb3J0cmFuIHN0YW5kYXJkIHNpbmNlCitGb3J0cmFuIDc3LiAgRm9yIGV4YW1wbGUsIHJlcGxhY2UgYSBjb2RlIGZyYWdtZW50IGxpa2UKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgIElOVEVHRVIqMSBMSU5FKDgwKQorICAgICAgICAgICBSRUFMIEEsIEIsIEMKKyAgICAgYyAgICAgLi4uIENvZGUgdGhhdCBzZXRzIExJTkUKKyAgICAgICAgICAgREVDT0RFICg4MCwgOTAwMCwgTElORSkgQSwgQiwgQworICAgICAgOTAwMCBGT1JNQVQgKDFYLCAzKEYxMC41KSkKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aXRoIHRoZSBmb2xsb3dpbmc6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICBDSEFSQUNURVIoTEVOPTgwKSBMSU5FCisgICAgICAgICAgIFJFQUwgQSwgQiwgQworICAgICBjICAgICAuLi4gQ29kZSB0aGF0IHNldHMgTElORQorICAgICAgICAgICBSRUFEIChVTklUPUxJTkUsIEZNVD05MDAwKSBBLCBCLCBDCisgICAgICA5MDAwIEZPUk1BVCAoMVgsIDMoRjEwLjUpKQorPC9wcmU+CisgICA8cD5TaW1pbGFybHksIHJlcGxhY2UgYSBjb2RlIGZyYWdtZW50IGxpa2UKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgIElOVEVHRVIqMSBMSU5FKDgwKQorICAgICAgICAgICBSRUFMIEEsIEIsIEMKKyAgICAgYyAgICAgLi4uIENvZGUgdGhhdCBzZXRzIEEsIEIgYW5kIEMKKyAgICAgICAgICAgRU5DT0RFICg4MCwgOTAwMCwgTElORSkgQSwgQiwgQworICAgICAgOTAwMCBGT1JNQVQgKDFYLCAnT1VUUFVUIElTICcsIDMoRjEwLjUpKQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPndpdGggdGhlIGZvbGxvd2luZzoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgIENIQVJBQ1RFUihMRU49ODApIExJTkUKKyAgICAgICAgICAgUkVBTCBBLCBCLCBDCisgICAgIGMgICAgIC4uLiBDb2RlIHRoYXQgc2V0cyBBLCBCIGFuZCBDCisgICAgICAgICAgIFdSSVRFIChVTklUPUxJTkUsIEZNVD05MDAwKSBBLCBCLCBDCisgICAgICA5MDAwIEZPUk1BVCAoMVgsICdPVVRQVVQgSVMgJywgMyhGMTAuNSkpCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FT1NISUZULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRU9TSElGVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyM2IyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRU9TSElGVC5odG1sCkBAIC0wLDAgKzEsMTA5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FT1NISUZUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRUSU1FLmh0bWwjRFRJTUUiIHRpdGxlPSJEVElNRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVQU0lMT04uaHRtbCNFUFNJTE9OIiB0aXRsZT0iRVBTSUxPTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFT1NISUZUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVQU0lMT04uaHRtbCNFUFNJTE9OIj5FUFNJTE9OPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRFRJTUUuaHRtbCNEVElNRSI+RFRJTUU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNzIgPGNvZGU+RU9TSElGVDwvY29kZT4gJm1kYXNoOyBFbmQtb2ZmIHNoaWZ0IGVsZW1lbnRzIG9mIGFuIGFycmF5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRU9TSElGVC01OTkiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLXNoaWZ0LTYwMCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkVPU0hJRlQoQVJSQVksIFNISUZUWywgQk9VTkRBUlksIERJTV0pPC9jb2RlPiBwZXJmb3JtcyBhbiBlbmQtb2ZmIHNoaWZ0IG9uCitlbGVtZW50cyBvZiA8dmFyPkFSUkFZPC92YXI+IGFsb25nIHRoZSBkaW1lbnNpb24gb2YgPHZhcj5ESU08L3Zhcj4uICBJZiA8dmFyPkRJTTwvdmFyPiBpcworb21pdHRlZCBpdCBpcyB0YWtlbiB0byBiZSA8Y29kZT4xPC9jb2RlPi4gIDx2YXI+RElNPC92YXI+IGlzIGEgc2NhbGFyIG9mIHR5cGUKKzxjb2RlPklOVEVHRVI8L2NvZGU+IGluIHRoZSByYW5nZSBvZiAxIFxsZXEgRElNIFxsZXEgbikgd2hlcmUgbiBpcyB0aGUKK3Jhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPi4gIElmIHRoZSByYW5rIG9mIDx2YXI+QVJSQVk8L3Zhcj4gaXMgb25lLCB0aGVuIGFsbCBlbGVtZW50cyBvZgorPHZhcj5BUlJBWTwvdmFyPiBhcmUgc2hpZnRlZCBieSA8dmFyPlNISUZUPC92YXI+IHBsYWNlcy4gIElmIHJhbmsgaXMgZ3JlYXRlciB0aGFuIG9uZSwKK3RoZW4gYWxsIGNvbXBsZXRlIHJhbmsgb25lIHNlY3Rpb25zIG9mIDx2YXI+QVJSQVk8L3Zhcj4gYWxvbmcgdGhlIGdpdmVuIGRpbWVuc2lvbiBhcmUKK3NoaWZ0ZWQuICBFbGVtZW50cyBzaGlmdGVkIG91dCBvbmUgZW5kIG9mIGVhY2ggcmFuayBvbmUgc2VjdGlvbiBhcmUgZHJvcHBlZC4gIElmCis8dmFyPkJPVU5EQVJZPC92YXI+IGlzIHByZXNlbnQgdGhlbiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZiBmcm9tIDx2YXI+Qk9VTkRBUlk8L3Zhcj4KK2lzIGNvcGllZCBiYWNrIGluIHRoZSBvdGhlciBlbmQuICBJZiA8dmFyPkJPVU5EQVJZPC92YXI+IGlzIG5vdCBwcmVzZW50IHRoZW4gdGhlCitmb2xsb3dpbmcgYXJlIGNvcGllZCBpbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgPHZhcj5BUlJBWTwvdmFyPi4KKworICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGVtPkFycmF5IFR5cGU8L2VtPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGVtPkJvdW5kYXJ5IFZhbHVlPC9lbT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPk51bWVyaWMgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj4wIG9mIHRoZSB0eXBlIGFuZCBraW5kIG9mIDx2YXI+QVJSQVk8L3Zhcj4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+TG9naWNhbCAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPi5GQUxTRS48L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPkNoYXJhY3Rlcig8dmFyPmxlbjwvdmFyPikgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjx2YXI+bGVuPC92YXI+IGJsYW5rcy4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+VHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBFT1NISUZUKEFSUkFZLCBTSElGVCBbLCBCT1VOREFSWSwgRElNXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPk1heSBiZSBhbnkgdHlwZSwgbm90IHNjYWxhci4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNISUZUPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5CT1VOREFSWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2FtZSB0eXBlIGFzIDx2YXI+QVJSQVk8L3Zhcj4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ESU08L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlJldHVybnMgYW4gYXJyYXkgb2Ygc2FtZSB0eXBlIGFuZCByYW5rIGFzIHRoZSA8dmFyPkFSUkFZPC92YXI+IGFyZ3VtZW50LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9lb3NoaWZ0CisgICAgICAgICAgICAgIGludGVnZXIsIGRpbWVuc2lvbigzLDMpIDo6IGEKKyAgICAgICAgICAgICAgYSA9IHJlc2hhcGUoICgvIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgLyksICgvIDMsIDMgLykpCisgICAgICAgICAgICAgIHByaW50ICcoM2kzKScsIGEoMSw6KQorICAgICAgICAgICAgICBwcmludCAnKDNpMyknLCBhKDIsOikKKyAgICAgICAgICAgICAgcHJpbnQgJygzaTMpJywgYSgzLDopCisgICAgICAgICAgICAgIGEgPSBFT1NISUZUKGEsIFNISUZUPSgvMSwgMiwgMS8pLCBCT1VOREFSWT0tNSwgRElNPTIpCisgICAgICAgICAgICAgIHByaW50ICoKKyAgICAgICAgICAgICAgcHJpbnQgJygzaTMpJywgYSgxLDopCisgICAgICAgICAgICAgIHByaW50ICcoM2kzKScsIGEoMiw6KQorICAgICAgICAgICAgICBwcmludCAnKDNpMyknLCBhKDMsOikKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2Vvc2hpZnQKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVBTSUxPTi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VQU0lMT04uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTNjNWZkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VQU0lMT04uaHRtbApAQCAtMCwwICsxLDg1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FUFNJTE9OIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVPU0hJRlQuaHRtbCNFT1NISUZUIiB0aXRsZT0iRU9TSElGVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVSRi5odG1sI0VSRiIgdGl0bGU9IkVSRiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFUFNJTE9OIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVSRi5odG1sI0VSRiI+RVJGPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRU9TSElGVC5odG1sI0VPU0hJRlQiPkVPU0hJRlQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNzMgPGNvZGU+RVBTSUxPTjwvY29kZT4gJm1kYXNoOyBFcHNpbG9uIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRVBTSUxPTi02MDEiPjwvYT48YSBuYW1lPSJpbmRleC1tb2RlbC1yZXByZXNlbnRhdGlvbl8wMDJjLWVwc2lsb24tNjAyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RVBTSUxPTihYKTwvY29kZT4gcmV0dXJucyB0aGUgc21hbGxlc3QgbnVtYmVyIDx2YXI+RTwvdmFyPiBvZiB0aGUgc2FtZSBraW5kCithcyA8dmFyPlg8L3Zhcj4gc3VjaCB0aGF0IDEgKyBFICZndDsgMS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gRVBTSUxPTihYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2Ygc2FtZSB0eXBlIGFzIHRoZSBhcmd1bWVudC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZXBzaWxvbgorICAgICAgICAgICAgICByZWFsIDo6IHggPSAzLjE0MworICAgICAgICAgICAgICByZWFsKDgpIDo6IHkgPSAyLjMzCisgICAgICAgICAgICAgIHByaW50ICosIEVQU0lMT04oeCkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgRVBTSUxPTih5KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZXBzaWxvbgorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FUkYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FUkYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU5MTA5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VSRi5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVSRiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFUFNJTE9OLmh0bWwjRVBTSUxPTiIgdGl0bGU9IkVQU0lMT04iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFUkZDLmh0bWwjRVJGQyIgdGl0bGU9IkVSRkMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRVJGIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVSRkMuaHRtbCNFUkZDIj5FUkZDPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRVBTSUxPTi5odG1sI0VQU0lMT04iPkVQU0lMT048L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNzQgPGNvZGU+RVJGPC9jb2RlPiAmbWRhc2g7IEVycm9yIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRVJGLTYwMyI+PC9hPjxhIG5hbWU9ImluZGV4LWVycm9yLWZ1bmN0aW9uLTYwNCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkVSRihYKTwvY29kZT4gY29tcHV0ZXMgdGhlIGVycm9yIGZ1bmN0aW9uIG9mIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEVSRihYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiwgb2YgdGhlIHNhbWUga2luZCBhcworPHZhcj5YPC92YXI+IGFuZCBsaWVzIGluIHRoZSByYW5nZSAtMSBcbGVxIGVyZiAoeCkgXGxlcSAxIC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZXJmCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAwLjE3XzgKKyAgICAgICAgICAgIHggPSBlcmYoeCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2VyZgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5ERVJGKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVJGQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VSRkMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzhjOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VSRkMuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FUkZDIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVSRi5odG1sI0VSRiIgdGl0bGU9IkVSRiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVSRkNfMDA1ZlNDQUxFRC5odG1sI0VSRkNfMDA1ZlNDQUxFRCIgdGl0bGU9IkVSRkNfU0NBTEVEIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVSRkMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRVJGQ18wMDVmU0NBTEVELmh0bWwjRVJGQ18wMDVmU0NBTEVEIj5FUkZDX1NDQUxFRDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVSRi5odG1sI0VSRiI+RVJGPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44Ljc1IDxjb2RlPkVSRkM8L2NvZGU+ICZtZGFzaDsgRXJyb3IgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1FUkZDLTYwNSI+PC9hPjxhIG5hbWU9ImluZGV4LWVycm9yLWZ1bmN0aW9uXzAwMmMtY29tcGxlbWVudGFyeS02MDYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5FUkZDKFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgY29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiBvZiA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBFUkZDKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+IGFuZCBvZiB0aGUgc2FtZSBraW5kIGFzIDx2YXI+WDwvdmFyPi4gCitJdCBsaWVzIGluIHRoZSByYW5nZSAgMCBcbGVxIGVyZmMgKHgpIFxsZXEgMiAuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2VyZmMKKyAgICAgICAgICAgIHJlYWwoOCkgOjogeCA9IDAuMTdfOAorICAgICAgICAgICAgeCA9IGVyZmMoeCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2VyZmMKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+REVSRkMoWCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VSRkNfMDA1ZlNDQUxFRC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VSRkNfMDA1ZlNDQUxFRC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTU5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVJGQ18wMDVmU0NBTEVELmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RVJGQ19TQ0FMRUQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRVJGQy5odG1sI0VSRkMiIHRpdGxlPSJFUkZDIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRVRJTUUuaHRtbCNFVElNRSIgdGl0bGU9IkVUSU1FIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVSRkNfU0NBTEVEIj48L2E+Cis8YSBuYW1lPSJFUkZDXzAwNWZTQ0FMRUQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRVRJTUUuaHRtbCNFVElNRSI+RVRJTUU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFUkZDLmh0bWwjRVJGQyI+RVJGQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC43NiA8Y29kZT5FUkZDX1NDQUxFRDwvY29kZT4gJm1kYXNoOyBFcnJvciBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUVSRkNfMDA1ZlNDQUxFRC02MDciPjwvYT48YSBuYW1lPSJpbmRleC1lcnJvci1mdW5jdGlvbl8wMDJjLWNvbXBsZW1lbnRhcnlfMDAyYy1leHBvbmVudGlhbGx5XzAwMmRzY2FsZWQtNjA4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RVJGQ19TQ0FMRUQoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbGx5LXNjYWxlZCBjb21wbGVtZW50YXJ5CitlcnJvciBmdW5jdGlvbiBvZiA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBFUkZDX1NDQUxFRChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBhbmQgb2YgdGhlIHNhbWUga2luZCBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2VyZmNfc2NhbGVkCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAwLjE3XzgKKyAgICAgICAgICAgIHggPSBlcmZjX3NjYWxlZCh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZXJmY19zY2FsZWQKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVRJTUUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FVElNRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDFiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVRJTUUuaHRtbApAQCAtMCwwICsxLDExOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RVRJTUUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRVJGQ18wMDVmU0NBTEVELmh0bWwjRVJGQ18wMDVmU0NBTEVEIiB0aXRsZT0iRVJGQ19TQ0FMRUQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FLmh0bWwjRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORSIgdGl0bGU9IkVYRUNVVEVfQ09NTUFORF9MSU5FIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVUSU1FIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUuaHRtbCNFWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FIj5FWEVDVVRFX0NPTU1BTkRfTElORTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVSRkNfMDA1ZlNDQUxFRC5odG1sI0VSRkNfMDA1ZlNDQUxFRCI+RVJGQ19TQ0FMRUQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNzcgPGNvZGU+RVRJTUU8L2NvZGU+ICZtZGFzaDsgRXhlY3V0aW9uIHRpbWUgc3Vicm91dGluZSAob3IgZnVuY3Rpb24pPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRVRJTUUtNjA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtdGltZV8wMDJjLWVsYXBzZWQtNjEwIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RVRJTUUoVkFMVUVTLCBUSU1FKTwvY29kZT4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgb2YgcnVudGltZQorc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9jZXNzJ3MgZXhlY3V0aW9uIGluIDx2YXI+VElNRTwvdmFyPi4gIDx2YXI+VkFMVUVTPC92YXI+CityZXR1cm5zIHRoZSB1c2VyIGFuZCBzeXN0ZW0gY29tcG9uZW50cyBvZiB0aGlzIHRpbWUgaW4gPGNvZGU+VkFMVUVTKDEpPC9jb2RlPiBhbmQKKzxjb2RlPlZBTFVFUygyKTwvY29kZT4gcmVzcGVjdGl2ZWx5LiA8dmFyPlRJTUU8L3Zhcj4gaXMgZXF1YWwgdG8gPGNvZGU+VkFMVUVTKDEpICsgVkFMVUVTKDIpPC9jb2RlPi4KKworICAgICA8cD5PbiBzb21lIHN5c3RlbXMsIHRoZSB1bmRlcmx5aW5nIHRpbWluZ3MgYXJlIHJlcHJlc2VudGVkIHVzaW5nIHR5cGVzIHdpdGgKK3N1ZmZpY2llbnRseSBzbWFsbCBsaW1pdHMgdGhhdCBvdmVyZmxvd3MgKHdyYXAgYXJvdW5kKSBhcmUgcG9zc2libGUsIHN1Y2ggYXMKKzMyLWJpdCB0eXBlcy4gVGhlcmVmb3JlLCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoaXMgaW50cmluc2ljIG1pZ2h0IGJlLCBvcgorYmVjb21lLCBuZWdhdGl2ZSwgb3IgbnVtZXJpY2FsbHkgbGVzcyB0aGFuIHByZXZpb3VzIHZhbHVlcywgZHVyaW5nIGEgc2luZ2xlCitydW4gb2YgdGhlIGNvbXBpbGVkIHByb2dyYW0uCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgaW4gYm90aCBzdWJyb3V0aW5lIGFuZCBmdW5jdGlvbiBmb3JtczsgaG93ZXZlciwKK29ubHkgb25lIGZvcm0gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIHByb2dyYW0gdW5pdC4KKworICAgICA8cD48dmFyPlZBTFVFUzwvdmFyPiBhbmQgPHZhcj5USU1FPC92YXI+IGFyZSA8Y29kZT5JTlRFTlQoT1VUKTwvY29kZT4gYW5kIHByb3ZpZGUgdGhlIGZvbGxvd2luZzoKKworICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPjxjb2RlPlZBTFVFUygxKTwvY29kZT46IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNjAlIj5Vc2VyIHRpbWUgaW4gc2Vjb25kcy4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjMwJSI+PGNvZGU+VkFMVUVTKDIpPC9jb2RlPjogPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI2MCUiPlN5c3RlbSB0aW1lIGluIHNlY29uZHMuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzMCUiPjxjb2RlPlRJTUU8L2NvZGU+OiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjYwJSI+UnVuIHRpbWUgc2luY2Ugc3RhcnQgaW4gc2Vjb25kcy4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgRVRJTUUoVkFMVUVTLCBUSU1FKTwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+VElNRSA9IEVUSU1FKFZBTFVFUyk8L2NvZGU+LCAobm90IHJlY29tbWVuZGVkKS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VkFMVUVTPC92YXI+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUwoNCksIERJTUVOU0lPTigyKTwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5USU1FPC92YXI+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUwoNCk8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPkVsYXBzZWQgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBzdGFydCBvZiBwcm9ncmFtIGV4ZWN1dGlvbi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZXRpbWUKKyAgICAgICAgICAgICAgaW50ZWdlcig4KSA6OiBpLCBqCisgICAgICAgICAgICAgIHJlYWwsIGRpbWVuc2lvbigyKSA6OiB0YXJyYXkKKyAgICAgICAgICAgICAgcmVhbCA6OiByZXN1bHQKKyAgICAgICAgICAgICAgY2FsbCBFVElNRSh0YXJyYXksIHJlc3VsdCkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgcmVzdWx0CisgICAgICAgICAgICAgIHByaW50ICosIHRhcnJheSgxKQorICAgICAgICAgICAgICBwcmludCAqLCB0YXJyYXkoMikKKyAgICAgICAgICAgICAgZG8gaT0xLDEwMDAwMDAwMCAgICAhIEp1c3QgYSBkZWxheQorICAgICAgICAgICAgICAgICAgaiA9IGkgKiBpIC0gaQorICAgICAgICAgICAgICBlbmQgZG8KKyAgICAgICAgICAgICAgY2FsbCBFVElNRSh0YXJyYXksIHJlc3VsdCkKKyAgICAgICAgICAgICAgcHJpbnQgKiwgcmVzdWx0CisgICAgICAgICAgICAgIHByaW50ICosIHRhcnJheSgxKQorICAgICAgICAgICAgICBwcmludCAqLCB0YXJyYXkoMikKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2V0aW1lCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQ1BVXzAwNWZUSU1FLmh0bWwjQ1BVXzAwNWZUSU1FIj5DUFVfVElNRTwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0ZjI0MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FLmh0bWwKQEAgLTAsMCArMSwxMjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVYRUNVVEVfQ09NTUFORF9MSU5FIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVUSU1FLmh0bWwjRVRJTUUiIHRpdGxlPSJFVElNRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVYSVQuaHRtbCNFWElUIiB0aXRsZT0iRVhJVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFWEVDVVRFX0NPTU1BTkRfTElORSI+PC9hPgorPGEgbmFtZT0iRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFWElULmh0bWwjRVhJVCI+RVhJVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVUSU1FLmh0bWwjRVRJTUUiPkVUSU1FPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44Ljc4IDxjb2RlPkVYRUNVVEVfQ09NTUFORF9MSU5FPC9jb2RlPiAmbWRhc2g7IEV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORS02MTEiPjwvYT48YSBuYW1lPSJpbmRleC1zeXN0ZW1fMDAyYy1zeXN0ZW0tY2FsbC02MTIiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tYW5kLWxpbmUtNjEzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RVhFQ1VURV9DT01NQU5EX0xJTkU8L2NvZGU+IHJ1bnMgYSBzaGVsbCBjb21tYW5kLCBzeW5jaHJvbm91c2x5IG9yCithc3luY2hyb25vdXNseS4KKworICAgICA8cD5UaGUgPGNvZGU+Q09NTUFORDwvY29kZT4gYXJndW1lbnQgaXMgcGFzc2VkIHRvIHRoZSBzaGVsbCBhbmQgZXhlY3V0ZWQsIHVzaW5nCit0aGUgQyBsaWJyYXJ5J3MgPGNvZGU+c3lzdGVtPC9jb2RlPiBjYWxsLiAgKFRoZSBzaGVsbCBpcyA8Y29kZT5zaDwvY29kZT4gb24gVW5peAorc3lzdGVtcywgYW5kIDxjb2RlPmNtZC5leGU8L2NvZGU+IG9uIFdpbmRvd3MuKSAgSWYgPGNvZGU+V0FJVDwvY29kZT4gaXMgcHJlc2VudAorYW5kIGhhcyB0aGUgdmFsdWUgZmFsc2UsIHRoZSBleGVjdXRpb24gb2YgdGhlIGNvbW1hbmQgaXMgYXN5bmNocm9ub3VzCitpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGl0OyBvdGhlcndpc2UsIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkCitzeW5jaHJvbm91c2x5LgorCisgICAgIDxwPlRoZSB0aHJlZSBsYXN0IGFyZ3VtZW50cyBhbGxvdyB0aGUgdXNlciB0byBnZXQgc3RhdHVzIGluZm9ybWF0aW9uLiAgQWZ0ZXIKK3N5bmNocm9ub3VzIGV4ZWN1dGlvbiwgPGNvZGU+RVhJVFNUQVQ8L2NvZGU+IGNvbnRhaW5zIHRoZSBpbnRlZ2VyIGV4aXQgY29kZSBvZgordGhlIGNvbW1hbmQsIGFzIHJldHVybmVkIGJ5IDxjb2RlPnN5c3RlbTwvY29kZT4uICA8Y29kZT5DTURTVEFUPC9jb2RlPiBpcyBzZXQgdG8gemVybworaWYgdGhlIGNvbW1hbmQgbGluZSB3YXMgZXhlY3V0ZWQgKHdoYXRldmVyIGl0cyBleGl0IHN0YXR1cyB3YXMpLiAKKzxjb2RlPkNNRE1TRzwvY29kZT4gaXMgYXNzaWduZWQgYW4gZXJyb3IgbWVzc2FnZSBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSA8Y29kZT5zeXN0ZW08L2NvZGU+IGZ1bmN0aW9uIG5lZWQgbm90IGJlIHRocmVhZC1zYWZlLiBJdCBpcwordGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0IDxjb2RlPnN5c3RlbTwvY29kZT4gaXMgbm90CitjYWxsZWQgY29uY3VycmVudGx5LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPkNBTEwgRVhFQ1VURV9DT01NQU5EX0xJTkUoQ09NTUFORCBbLCBXQUlULCBFWElUU1RBVCwgQ01EU1RBVCwgQ01ETVNHIF0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+Q09NTUFORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBkZWZhdWx0IDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gc2NhbGFyLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+V0FJVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBTaGFsbCBiZSBhIGRlZmF1bHQgPGNvZGU+TE9HSUNBTDwvY29kZT4gc2NhbGFyLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RVhJVFNUQVQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgYW4gPGNvZGU+SU5URUdFUjwvY29kZT4gb2YgdGhlCitkZWZhdWx0IGtpbmQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5DTURTVEFUPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9mIHRoZQorZGVmYXVsdCBraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+Q01ETVNHPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGFuIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gc2NhbGFyIG9mIHRoZQorZGVmYXVsdCBraW5kLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2V4ZWMKKyAgICAgICAgICAgIGludGVnZXIgOjogaQorICAgICAgICAgIAorICAgICAgICAgICAgY2FsbCBleGVjdXRlX2NvbW1hbmRfbGluZSAoImV4dGVybmFsX3Byb2cuZXhlIiwgZXhpdHN0YXQ9aSkKKyAgICAgICAgICAgIHByaW50ICosICJFeGl0IHN0YXR1cyBvZiBleHRlcm5hbF9wcm9nLmV4ZSB3YXMgIiwgaQorICAgICAgICAgIAorICAgICAgICAgICAgY2FsbCBleGVjdXRlX2NvbW1hbmRfbGluZSAoInJlaW5kZXhfZmlsZXMuZXhlIiwgd2FpdD0uZmFsc2UuKQorICAgICAgICAgICAgcHJpbnQgKiwgIk5vdyByZWluZGV4aW5nIGZpbGVzIGluIHRoZSBiYWNrZ3JvdW5kIgorICAgICAgICAgIAorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZXhlYworPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPk5vdGU8L2VtPjo8ZGQ+CitCZWNhdXNlIHRoaXMgaW50cmluc2ljIGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIHRoZSA8Y29kZT5zeXN0ZW08L2NvZGU+CitmdW5jdGlvbiBjYWxsLCBpdHMgYmVoYXZpb3Igd2l0aCByZXNwZWN0IHRvIHNpZ25hbGluZyBpcyBwcm9jZXNzb3IKK2RlcGVuZGVudC4gSW4gcGFydGljdWxhciwgb24gUE9TSVgtY29tcGxpYW50IHN5c3RlbXMsIHRoZSBTSUdJTlQgYW5kCitTSUdRVUlUIHNpZ25hbHMgd2lsbCBiZSBpZ25vcmVkLCBhbmQgdGhlIFNJR0NITEQgd2lsbCBiZSBibG9ja2VkLiBBcworc3VjaCwgaWYgdGhlIHBhcmVudCBwcm9jZXNzIGlzIHRlcm1pbmF0ZWQsIHRoZSBjaGlsZCBwcm9jZXNzIG1pZ2h0IG5vdCBiZQordGVybWluYXRlZCBhbG9uZ3NpZGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iU1lTVEVNLmh0bWwjU1lTVEVNIj5TWVNURU08L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVhJVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VYSVQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWJjNmE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VYSVQuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FWElUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUuaHRtbCNFWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FIiB0aXRsZT0iRVhFQ1VURV9DT01NQU5EX0xJTkUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFWFAuaHRtbCNFWFAiIHRpdGxlPSJFWFAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRVhJVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFWFAuaHRtbCNFWFAiPkVYUDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUuaHRtbCNFWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FIj5FWEVDVVRFX0NPTU1BTkRfTElORTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC43OSA8Y29kZT5FWElUPC9jb2RlPiAmbWRhc2g7IEV4aXQgdGhlIHByb2dyYW0gd2l0aCBzdGF0dXMuPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRVhJVC02MTQiPjwvYT48YSBuYW1lPSJpbmRleC1wcm9ncmFtLXRlcm1pbmF0aW9uLTYxNSI+PC9hPjxhIG5hbWU9ImluZGV4LXRlcm1pbmF0ZS1wcm9ncmFtLTYxNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkVYSVQ8L2NvZGU+IGNhdXNlcyBpbW1lZGlhdGUgdGVybWluYXRpb24gb2YgdGhlIHByb2dyYW0gd2l0aCBzdGF0dXMuICBJZiBzdGF0dXMKK2lzIG9taXR0ZWQgaXQgcmV0dXJucyB0aGUgY2Fub25pY2FsIDxlbT5zdWNjZXNzPC9lbT4gZm9yIHRoZSBzeXN0ZW0uICBBbGwgRm9ydHJhbgorSS9PIHVuaXRzIGFyZSBjbG9zZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBFWElUKFtTVEFUVVNdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gPGNvZGU+SU5URUdFUjwvY29kZT4gb2YgdGhlIGRlZmF1bHQga2luZC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD48Y29kZT5TVEFUVVM8L2NvZGU+IGlzIHBhc3NlZCB0byB0aGUgcGFyZW50IHByb2Nlc3Mgb24gZXhpdC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZXhpdAorICAgICAgICAgICAgaW50ZWdlciA6OiBTVEFUVVMgPSAwCisgICAgICAgICAgICBwcmludCAqLCAnVGhpcyBwcm9ncmFtIGlzIGdvaW5nIHRvIGV4aXQuJworICAgICAgICAgICAgY2FsbCBFWElUKFNUQVRVUykKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2V4aXQKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJBQk9SVC5odG1sI0FCT1JUIj5BQk9SVDwvYT4sIDxhIGhyZWY9IktJTEwuaHRtbCNLSUxMIj5LSUxMPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VYUC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0VYUC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTE0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVhQLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RVhQIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkVYSVQuaHRtbCNFWElUIiB0aXRsZT0iRVhJVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVYUE9ORU5ULmh0bWwjRVhQT05FTlQiIHRpdGxlPSJFWFBPTkVOVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFWFAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRVhQT05FTlQuaHRtbCNFWFBPTkVOVCI+RVhQT05FTlQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFWElULmh0bWwjRVhJVCI+RVhJVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC44MCA8Y29kZT5FWFA8L2NvZGU+ICZtZGFzaDsgRXhwb25lbnRpYWwgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1FWFAtNjE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtREVYUC02MTgiPjwvYT48YSBuYW1lPSJpbmRleC1DRVhQLTYxOSI+PC9hPjxhIG5hbWU9ImluZGV4LVpFWFAtNjIwIj48L2E+PGEgbmFtZT0iaW5kZXgtQ0RFWFAtNjIxIj48L2E+PGEgbmFtZT0iaW5kZXgtZXhwb25lbnRpYWwtZnVuY3Rpb24tNjIyIj48L2E+PGEgbmFtZT0iaW5kZXgtbG9nYXJpdGhtLWZ1bmN0aW9uXzAwMmMtaW52ZXJzZS02MjMiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5FWFAoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBiYXNlIGUgZXhwb25lbnRpYWwgb2YgPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyLCBoYXMgb3ZlcmxvYWRzIHRoYXQgYXJlIEdOVSBleHRlbnNpb25zCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEVYUChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+IG9yCis8Y29kZT5DT01QTEVYPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGhhcyBzYW1lIHR5cGUgYW5kIGtpbmQgYXMgPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9leHAKKyAgICAgICAgICAgIHJlYWwgOjogeCA9IDEuMAorICAgICAgICAgICAgeCA9IGV4cCh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZXhwCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+RVhQKFgpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIFg8L2NvZGU+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KTwvY29kZT4gICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRFWFAoWCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DRVhQKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoNCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDQpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+WkVYUChYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q0RFWFAoWCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVhQT05FTlQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FWFBPTkVOVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTZlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVhQT05FTlQuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FWFBPTkVOVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFWFAuaHRtbCNFWFAiIHRpdGxlPSJFWFAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFWFRFTkRTXzAwNWZUWVBFXzAwNWZPRi5odG1sI0VYVEVORFNfMDA1ZlRZUEVfMDA1Zk9GIiB0aXRsZT0iRVhURU5EU19UWVBFX09GIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVYUE9ORU5UIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkVYVEVORFNfMDA1ZlRZUEVfMDA1Zk9GLmh0bWwjRVhURU5EU18wMDVmVFlQRV8wMDVmT0YiPkVYVEVORFNfVFlQRV9PRjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVYUC5odG1sI0VYUCI+RVhQPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjgxIDxjb2RlPkVYUE9ORU5UPC9jb2RlPiAmbWRhc2g7IEV4cG9uZW50IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRVhQT05FTlQtNjI0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVhbC1udW1iZXJfMDAyYy1leHBvbmVudC02MjUiPjwvYT48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLWV4cG9uZW50LTYyNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkVYUE9ORU5UKFgpPC9jb2RlPiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQgcGFydCBvZiA8dmFyPlg8L3Zhcj4uIElmIDx2YXI+WDwvdmFyPgoraXMgemVybyB0aGUgdmFsdWUgcmV0dXJuZWQgaXMgemVyby4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBFWFBPTkVOVChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSBkZWZhdWx0IDxjb2RlPklOVEVHRVI8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9leHBvbmVudAorICAgICAgICAgICAgcmVhbCA6OiB4ID0gMS4wCisgICAgICAgICAgICBpbnRlZ2VyIDo6IGkKKyAgICAgICAgICAgIGkgPSBleHBvbmVudCh4KQorICAgICAgICAgICAgcHJpbnQgKiwgaQorICAgICAgICAgICAgcHJpbnQgKiwgZXhwb25lbnQoMC4wKQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfZXhwb25lbnQKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVhURU5EU18wMDVmVFlQRV8wMDVmT0YuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FWFRFTkRTXzAwNWZUWVBFXzAwNWZPRi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZGQwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRVhURU5EU18wMDVmVFlQRV8wMDVmT0YuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FWFRFTkRTX1RZUEVfT0YgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRVhQT05FTlQuaHRtbCNFWFBPTkVOVCIgdGl0bGU9IkVYUE9ORU5UIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRkRBVEUuaHRtbCNGREFURSIgdGl0bGU9IkZEQVRFIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVYVEVORFNfVFlQRV9PRiI+PC9hPgorPGEgbmFtZT0iRVhURU5EU18wMDVmVFlQRV8wMDVmT0YiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRkRBVEUuaHRtbCNGREFURSI+RkRBVEU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFWFBPTkVOVC5odG1sI0VYUE9ORU5UIj5FWFBPTkVOVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC44MiA8Y29kZT5FWFRFTkRTX1RZUEVfT0Y8L2NvZGU+ICZtZGFzaDsgIFF1ZXJ5IGR5bmFtaWMgdHlwZSBmb3IgZXh0ZW5zaW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRVhURU5EU18wMDVmVFlQRV8wMDVmT0YtNjI3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UXVlcnkgZHluYW1pYyB0eXBlIGZvciBleHRlbnNpb24uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gRVhURU5EU19UWVBFX09GKEEsIE1PTEQpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gb2JqZWN0IG9mIGV4dGVuc2libGUgZGVjbGFyZWQgdHlwZSBvcgordW5saW1pdGVkIHBvbHltb3JwaGljLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TU9MRDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gb2JqZWN0IG9mIGV4dGVuc2libGUgZGVjbGFyZWQgdHlwZSBvcgordW5saW1pdGVkIHBvbHltb3JwaGljLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgYSBzY2FsYXIgb2YgdHlwZSBkZWZhdWx0IGxvZ2ljYWwuIEl0IGlzIHRydWUgaWYgYW5kIG9ubHkgaWYKK3RoZSBkeW5hbWljIHR5cGUgb2YgQSBpcyBhbiBleHRlbnNpb24gdHlwZSBvZiB0aGUgZHluYW1pYyB0eXBlIG9mIE1PTEQuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iU0FNRV8wMDVmVFlQRV8wMDVmQVMuaHRtbCNTQU1FXzAwNWZUWVBFXzAwNWZBUyI+U0FNRV9UWVBFX0FTPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0Vudmlyb25tZW50LVZhcmlhYmxlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0Vudmlyb25tZW50LVZhcmlhYmxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMTU5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RW52aXJvbm1lbnQgVmFyaWFibGVzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIiB0aXRsZT0iQ29kZSBHZW4gT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iPkludm9raW5nIEdOVSBGb3J0cmFuPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xMCBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYWZmZWN0aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZW52aXJvbm1lbnQtdmFyaWFibGUtMjk1Ij48L2E+Cis8IS0tIG1hbiBiZWdpbiBFTlZJUk9OTUVOVCAtLT4KKworICAgPHA+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGNvbXBpbGVyIGN1cnJlbnRseSBkb2VzIG5vdCBtYWtlIHVzZSBvZiBhbnkgZW52aXJvbm1lbnQKK3ZhcmlhYmxlcyB0byBjb250cm9sIGl0cyBvcGVyYXRpb24gYWJvdmUgYW5kIGJleW9uZCB0aG9zZQordGhhdCBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPlNlZSA8YSBocmVmPSIuLi9nY2MvRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXMgQWZmZWN0aW5nIEdDQzwvYT4sIGZvciBpbmZvcm1hdGlvbiBvbiBlbnZpcm9ubWVudAordmFyaWFibGVzLgorCisgICA8cD5TZWUgPGEgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+LCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgYWZmZWN0IHRoZQorcnVuLXRpbWUgYmVoYXZpb3Igb2YgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBHTlUgRm9ydHJhbi4gCis8IS0tIG1hbiBlbmQgLS0+CisKKzwhLS0gIC0tPgorPCEtLSBSdW50aW1lIC0tPgorPCEtLSAgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTFmMTZmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDI1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9ucyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy1HTlUtRm9ydHJhbi5odG1sI0ludm9raW5nLUdOVS1Gb3J0cmFuIiB0aXRsZT0iSW52b2tpbmcgR05VIEZvcnRyYW4iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiIHRpdGxlPSJQcmVwcm9jZXNzaW5nIE9wdGlvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIiB0aXRsZT0iRGVidWdnaW5nIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiI+SW52b2tpbmcgR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjQgT3B0aW9ucyB0byByZXF1ZXN0IG9yIHN1cHByZXNzIGVycm9ycyBhbmQgd2FybmluZ3M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtd2FybmluZ3MtMTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLWVycm9ycy0xMTgiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nc18wMDJjLXN1cHByZXNzaW5nLTExOSI+PC9hPjxhIG5hbWU9ImluZGV4LW1lc3NhZ2VzXzAwMmMtZXJyb3ItMTIwIj48L2E+PGEgbmFtZT0iaW5kZXgtbWVzc2FnZXNfMDAyYy13YXJuaW5nLTEyMSI+PC9hPjxhIG5hbWU9ImluZGV4LXN1cHByZXNzaW5nLXdhcm5pbmdzLTEyMiI+PC9hPgorRXJyb3JzIGFyZSBkaWFnbm9zdGljIG1lc3NhZ2VzIHRoYXQgcmVwb3J0IHRoYXQgdGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVyCitjYW5ub3QgY29tcGlsZSB0aGUgcmVsZXZhbnQgcGllY2Ugb2Ygc291cmNlIGNvZGUuICBUaGUgY29tcGlsZXIgd2lsbAorY29udGludWUgdG8gcHJvY2VzcyB0aGUgcHJvZ3JhbSBpbiBhbiBhdHRlbXB0IHRvIHJlcG9ydCBmdXJ0aGVyIGVycm9ycwordG8gYWlkIGluIGRlYnVnZ2luZywgYnV0IHdpbGwgbm90IHByb2R1Y2UgYW55IGNvbXBpbGVkIG91dHB1dC4KKworICAgPHA+V2FybmluZ3MgYXJlIGRpYWdub3N0aWMgbWVzc2FnZXMgdGhhdCByZXBvcnQgY29uc3RydWN0aW9ucyB3aGljaAorYXJlIG5vdCBpbmhlcmVudGx5IGVycm9uZW91cyBidXQgd2hpY2ggYXJlIHJpc2t5IG9yIHN1Z2dlc3QgdGhlcmUgaXMKK2xpa2VseSB0byBiZSBhIGJ1ZyBpbiB0aGUgcHJvZ3JhbS4gIFVubGVzcyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2Vycm9yPC9zcGFuPjwvc2FtcD4gaXMgc3BlY2lmaWVkLAordGhleSBkbyBub3QgcHJldmVudCBjb21waWxhdGlvbiBvZiB0aGUgcHJvZ3JhbS4KKworICAgPHA+WW91IGNhbiByZXF1ZXN0IG1hbnkgc3BlY2lmaWMgd2FybmluZ3Mgd2l0aCBvcHRpb25zIGJlZ2lubmluZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tVzwvc3Bhbj48L3NhbXA+LAorZm9yIGV4YW1wbGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdpbXBsaWNpdDwvc3Bhbj48L3NhbXA+IHRvIHJlcXVlc3Qgd2FybmluZ3Mgb24gaW1wbGljaXQKK2RlY2xhcmF0aW9ucy4gIEVhY2ggb2YgdGhlc2Ugc3BlY2lmaWMgd2FybmluZyBvcHRpb25zIGFsc28gaGFzIGEKK25lZ2F0aXZlIGZvcm0gYmVnaW5uaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tPC9zcGFuPjwvc2FtcD4gdG8gdHVybiBvZmYgd2FybmluZ3M7Citmb3IgZXhhbXBsZSwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVduby1pbXBsaWNpdDwvc3Bhbj48L3NhbXA+LiAgVGhpcyBtYW51YWwgbGlzdHMgb25seSBvbmUgb2YgdGhlCit0d28gZm9ybXMsIHdoaWNoZXZlciBpcyBub3QgdGhlIGRlZmF1bHQuCisKKyAgIDxwPlRoZXNlIG9wdGlvbnMgY29udHJvbCB0aGUgYW1vdW50IGFuZCBraW5kcyBvZiBlcnJvcnMgYW5kIHdhcm5pbmdzIHByb2R1Y2VkCitieSBHTlUgRm9ydHJhbjoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZtYXgtZXJyb3JzPTwvY29kZT48dmFyPm48L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbWF4XzAwMmRlcnJvcnNfMDAzZF8wMDdkXzAwNDB2YXJfMDA3Ym5fMDA3ZC0xMjMiPjwvYT48YSBuYW1lPSJpbmRleC1lcnJvcnNfMDAyYy1saW1pdGluZy0xMjQiPjwvYT5MaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9yIG1lc3NhZ2VzIHRvIDx2YXI+bjwvdmFyPiwgYXQgd2hpY2ggcG9pbnQKK0dOVSBGb3J0cmFuIGJhaWxzIG91dCByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlCitzb3VyY2UgY29kZS4gIElmIDx2YXI+bjwvdmFyPiBpcyAwLCB0aGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGVycm9yCittZXNzYWdlcyBwcm9kdWNlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc3ludGF4LW9ubHk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZnN5bnRheF8wMDJkb25seV8wMDdkLTEyNSI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bnRheC1jaGVja2luZy0xMjYiPjwvYT5DaGVjayB0aGUgY29kZSBmb3Igc3ludGF4IGVycm9ycywgYnV0IGRvIG5vdCBhY3R1YWxseSBjb21waWxlIGl0LiAgVGhpcword2lsbCBnZW5lcmF0ZSBtb2R1bGUgZmlsZXMgZm9yIGVhY2ggbW9kdWxlIHByZXNlbnQgaW4gdGhlIGNvZGUsIGJ1dCBubworb3RoZXIgb3V0cHV0IGZpbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcGVkYW50aWM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdicGVkYW50aWNfMDA3ZC0xMjciPjwvYT5Jc3N1ZSB3YXJuaW5ncyBmb3IgdXNlcyBvZiBleHRlbnNpb25zIHRvIEZvcnRyYW4gOTUuIAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXBlZGFudGljPC9zcGFuPjwvc2FtcD4gYWxzbyBhcHBsaWVzIHRvIEMtbGFuZ3VhZ2UgY29uc3RydWN0cyB3aGVyZSB0aGV5CitvY2N1ciBpbiBHTlUgRm9ydHJhbiBzb3VyY2UgZmlsZXMsIHN1Y2ggYXMgdXNlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+XGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gYQorY2hhcmFjdGVyIGNvbnN0YW50IHdpdGhpbiBhIGRpcmVjdGl2ZSBsaWtlIDxjb2RlPiNpbmNsdWRlPC9jb2RlPi4KKworICAgICA8cD5WYWxpZCBGb3J0cmFuIDk1IHByb2dyYW1zIHNob3VsZCBjb21waWxlIHByb3Blcmx5IHdpdGggb3Igd2l0aG91dAordGhpcyBvcHRpb24uIAorSG93ZXZlciwgd2l0aG91dCB0aGlzIG9wdGlvbiwgY2VydGFpbiBHTlUgZXh0ZW5zaW9ucyBhbmQgdHJhZGl0aW9uYWwKK0ZvcnRyYW4gZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBhcyB3ZWxsLiAKK1dpdGggdGhpcyBvcHRpb24sIG1hbnkgb2YgdGhlbSBhcmUgcmVqZWN0ZWQuCisKKyAgICAgPHA+U29tZSB1c2VycyB0cnkgdG8gdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+IHRvIGNoZWNrIHByb2dyYW1zIGZvciBjb25mb3JtYW5jZS4gCitUaGV5IHNvb24gZmluZCB0aGF0IGl0IGRvZXMgbm90IGRvIHF1aXRlIHdoYXQgdGhleSB3YW50Jm1kYXNoO2l0IGZpbmRzIHNvbWUKK25vbnN0YW5kYXJkIHByYWN0aWNlcywgYnV0IG5vdCBhbGwuIAorSG93ZXZlciwgaW1wcm92ZW1lbnRzIHRvIEdOVSBGb3J0cmFuIGluIHRoaXMgYXJlYSBhcmUgd2VsY29tZS4KKworICAgICA8cD5UaGlzIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1mOTU8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9ZjIwMDM8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWYyMDA4PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tcGVkYW50aWMtZXJyb3JzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnBlZGFudGljXzAwMmRlcnJvcnNfMDA3ZC0xMjgiPjwvYT5MaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+LCBleGNlcHQgdGhhdCBlcnJvcnMgYXJlIHByb2R1Y2VkIHJhdGhlciB0aGFuCit3YXJuaW5ncy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYWxsPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldhbGxfMDA3ZC0xMjkiPjwvYT48YSBuYW1lPSJpbmRleC1hbGwtd2FybmluZ3MtMTMwIj48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy1hbGwtMTMxIj48L2E+RW5hYmxlcyBjb21tb25seSB1c2VkIHdhcm5pbmcgb3B0aW9ucyBwZXJ0YWluaW5nIHRvIHVzYWdlIHRoYXQKK3dlIHJlY29tbWVuZCBhdm9pZGluZyBhbmQgdGhhdCB3ZSBiZWxpZXZlIGFyZSBlYXN5IHRvIGF2b2lkLiAKK1RoaXMgY3VycmVudGx5IGluY2x1ZGVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxpYXNpbmc8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdhbXBlcnNhbmQ8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XY29udmVyc2lvbjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3N1cnByaXNpbmc8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdjLWJpbmRpbmctdHlwZTwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdpbnRyaW5zaWNzLXN0ZDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV25vLXRhYnM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdpbnRyaW5zaWMtc2hhZG93PC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2xpbmUtdHJ1bmNhdGlvbjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3RhcmdldC1saWZldGltZTwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdyZWFsLXEtY29uc3RhbnQ8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bnVzZWQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYWxpYXNpbmc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV2FsaWFzaW5nXzAwN2QtMTMyIj48L2E+PGEgbmFtZT0iaW5kZXgtYWxpYXNpbmctMTMzIj48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy1hbGlhc2luZy0xMzQiPjwvYT5XYXJuIGFib3V0IHBvc3NpYmxlIGFsaWFzaW5nIG9mIGR1bW15IGFyZ3VtZW50cy4gU3BlY2lmaWNhbGx5LCBpdCB3YXJucworaWYgdGhlIHNhbWUgYWN0dWFsIGFyZ3VtZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBhIGR1bW15IGFyZ3VtZW50IHdpdGgKKzxjb2RlPklOVEVOVChJTik8L2NvZGU+IGFuZCBhIGR1bW15IGFyZ3VtZW50IHdpdGggPGNvZGU+SU5URU5UKE9VVCk8L2NvZGU+IGluIGEgY2FsbAord2l0aCBhbiBleHBsaWNpdCBpbnRlcmZhY2UuCisKKyAgICAgPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHdpbGwgdHJpZ2dlciB0aGUgd2FybmluZy4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgc3Vicm91dGluZSBiYXIoYSxiKQorICAgICAgICAgICAgICAgIGludGVnZXIsIGludGVudChpbikgOjogYQorICAgICAgICAgICAgICAgIGludGVnZXIsIGludGVudChvdXQpIDo6IGIKKyAgICAgICAgICAgICAgZW5kIHN1YnJvdXRpbmUKKyAgICAgICAgICAgIGVuZCBpbnRlcmZhY2UKKyAgICAgICAgICAgIGludGVnZXIgOjogYQorICAgICAgICAgIAorICAgICAgICAgICAgY2FsbCBiYXIoYSxhKQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+LVdhbXBlcnNhbmQ8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV2FtcGVyc2FuZF8wMDdkLTEzNSI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtYW1wZXJzYW5kLTEzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjZfMDA3ZC0xMzciPjwvYT5XYXJuIGFib3V0IG1pc3NpbmcgYW1wZXJzYW5kIGluIGNvbnRpbnVlZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiBUaGUgd2FybmluZyBpcworZ2l2ZW4gd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FtcGVyc2FuZDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcGVkYW50aWM8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1mOTU8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9ZjIwMDM8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1mMjAwODwvc3Bhbj48L3NhbXA+LiBOb3RlOiBXaXRoIG5vIGFtcGVyc2FuZAorZ2l2ZW4gaW4gYSBjb250aW51ZWQgY2hhcmFjdGVyIGNvbnN0YW50LCBHTlUgRm9ydHJhbiBhc3N1bWVzIGNvbnRpbnVhdGlvbgorYXQgdGhlIGZpcnN0IG5vbi1jb21tZW50LCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGFtcGVyc2FuZAordGhhdCBpbml0aWF0ZWQgdGhlIGNvbnRpbnVhdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYXJyYXktdGVtcG9yYXJpZXM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV2FycmF5XzAwMmR0ZW1wb3Jhcmllc18wMDdkLTEzOCI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtYXJyYXktdGVtcG9yYXJpZXMtMTM5Ij48L2E+V2FybiBhYm91dCBhcnJheSB0ZW1wb3JhcmllcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgVGhlIGluZm9ybWF0aW9uCitnZW5lcmF0ZWQgYnkgdGhpcyB3YXJuaW5nIGlzIHNvbWV0aW1lcyB1c2VmdWwgaW4gb3B0aW1pemF0aW9uLCBpbiBvcmRlciB0bworYXZvaWQgc3VjaCB0ZW1wb3Jhcmllcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYy1iaW5kaW5nLXR5cGU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV2NfMDAyZGJpbmRpbmdfMDAyZHR5cGVfMDA3ZC0xNDAiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nXzAwMmMtQy1iaW5kaW5nLXR5cGUtMTQxIj48L2E+V2FybiBpZiB0aGUgYSB2YXJpYWJsZSBtaWdodCBub3QgYmUgQyBpbnRlcm9wZXJhYmxlLiAgSW4gcGFydGljdWxhciwgd2FybiBpZgordGhlIHZhcmlhYmxlIGhhcyBiZWVuIGRlY2xhcmVkIHVzaW5nIGFuIGludHJpbnNpYyB0eXBlIHdpdGggZGVmYXVsdCBraW5kCitpbnN0ZWFkIG9mIHVzaW5nIGEga2luZCBwYXJhbWV0ZXIgZGVmaW5lZCBmb3IgQyBpbnRlcm9wZXJhYmlsaXR5IGluIHRoZQoraW50cmluc2ljIDxjb2RlPklTT19DX0JpbmRpbmc8L2NvZGU+IG1vZHVsZS4gIFRoaXMgb3B0aW9uIGlzIGltcGxpZWQgYnkKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2NoYXJhY3Rlci10cnVuY2F0aW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldjaGFyYWN0ZXJfMDAyZHRydW5jYXRpb25fMDA3ZC0xNDIiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nc18wMDJjLWNoYXJhY3Rlci10cnVuY2F0aW9uLTE0MyI+PC9hPldhcm4gd2hlbiBhIGNoYXJhY3RlciBhc3NpZ25tZW50IHdpbGwgdHJ1bmNhdGUgdGhlIGFzc2lnbmVkIHN0cmluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XbGluZS10cnVuY2F0aW9uPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldsaW5lXzAwMmR0cnVuY2F0aW9uXzAwN2QtMTQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy1saW5lLXRydW5jYXRpb24tMTQ1Ij48L2E+V2FybiB3aGVuIGEgc291cmNlIGNvZGUgbGluZSB3aWxsIGJlIHRydW5jYXRlZC4gIFRoaXMgb3B0aW9uIGlzCitpbXBsaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2NvbnZlcnNpb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV2NvbnZlcnNpb25fMDA3ZC0xNDYiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nc18wMDJjLWNvbnZlcnNpb24tMTQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29udmVyc2lvbi0xNDgiPjwvYT5XYXJuIGFib3V0IGltcGxpY2l0IGNvbnZlcnNpb25zIHRoYXQgYXJlIGxpa2VseSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mCit0aGUgZXhwcmVzc2lvbiBhZnRlciBjb252ZXJzaW9uLiBJbXBsaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2NvbnZlcnNpb24tZXh0cmE8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV2NvbnZlcnNpb25fMDAyZGV4dHJhXzAwN2QtMTQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy1jb252ZXJzaW9uLTE1MCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnZlcnNpb24tMTUxIj48L2E+V2FybiBhYm91dCBpbXBsaWNpdCBjb252ZXJzaW9ucyBiZXR3ZWVuIGRpZmZlcmVudCB0eXBlcyBhbmQga2luZHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2V4dHJhPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldleHRyYV8wMDdkLTE1MiI+PC9hPjxhIG5hbWU9ImluZGV4LWV4dHJhLXdhcm5pbmdzLTE1MyI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtZXh0cmEtMTU0Ij48L2E+RW5hYmxlcyBzb21lIHdhcm5pbmcgb3B0aW9ucyBmb3IgdXNhZ2VzIG9mIGxhbmd1YWdlIGZlYXR1cmVzIHdoaWNoCittYXkgYmUgcHJvYmxlbWF0aWMuIFRoaXMgY3VycmVudGx5IGluY2x1ZGVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XY29tcGFyZS1yZWFsczwvc3Bhbj48L3NhbXA+CithbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bnVzZWQtcGFyYW1ldGVyPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2ltcGxpY2l0LWludGVyZmFjZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXaW1wbGljaXRfMDAyZGludGVyZmFjZV8wMDdkLTE1NSI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtaW1wbGljaXQtaW50ZXJmYWNlLTE1NiI+PC9hPldhcm4gaWYgYSBwcm9jZWR1cmUgaXMgY2FsbGVkIHdpdGhvdXQgYW4gZXhwbGljaXQgaW50ZXJmYWNlLiAKK05vdGUgdGhpcyBvbmx5IGNoZWNrcyB0aGF0IGFuIGV4cGxpY2l0IGludGVyZmFjZSBpcyBwcmVzZW50LiAgSXQgZG9lcyBub3QKK2NoZWNrIHRoYXQgdGhlIGRlY2xhcmVkIGludGVyZmFjZXMgYXJlIGNvbnNpc3RlbnQgYWNyb3NzIHByb2dyYW0gdW5pdHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2ltcGxpY2l0LXByb2NlZHVyZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXaW1wbGljaXRfMDAyZHByb2NlZHVyZV8wMDdkLTE1NyI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtaW1wbGljaXQtcHJvY2VkdXJlLTE1OCI+PC9hPldhcm4gaWYgYSBwcm9jZWR1cmUgaXMgY2FsbGVkIHRoYXQgaGFzIG5laXRoZXIgYW4gZXhwbGljaXQgaW50ZXJmYWNlCitub3IgaGFzIGJlZW4gZGVjbGFyZWQgYXMgPGNvZGU+RVhURVJOQUw8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdpbnRyaW5zaWNzLXN0ZDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXaW50cmluc2ljc18wMDJkc3RkXzAwN2QtMTU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy1ub25fMDAyZHN0YW5kYXJkLWludHJpbnNpY3MtMTYwIj48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy1pbnRyaW5zaWNzLW9mLW90aGVyLXN0YW5kYXJkcy0xNjEiPjwvYT5XYXJuIGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGZpbmRzIGEgcHJvY2VkdXJlIG5hbWVkIGxpa2UgYW4gaW50cmluc2ljIG5vdAorYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RhbmRhcmQgKHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZDwvc3Bhbj48L3NhbXA+KSBhbmQgdHJlYXRzCitpdCBhcyA8Y29kZT5FWFRFUk5BTDwvY29kZT4gcHJvY2VkdXJlIGJlY2F1c2Ugb2YgdGhpcy4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mYWxsLWludHJpbnNpY3M8L3NwYW4+PC9zYW1wPiBjYW4KK2JlIHVzZWQgdG8gbmV2ZXIgdHJpZ2dlciB0aGlzIGJlaGF2aW9yIGFuZCBhbHdheXMgbGluayB0byB0aGUgaW50cmluc2ljCityZWdhcmRsZXNzIG9mIHRoZSBzZWxlY3RlZCBzdGFuZGFyZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XcmVhbC1xLWNvbnN0YW50PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldyZWFsXzAwMmRxXzAwMmRjb25zdGFudF8wMDdkLTE2MiI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtXzAwNDBjb2RlXzAwN2JxXzAwN2QtZXhwb25lbnRfMDAyZGxldHRlci0xNjMiPjwvYT5Qcm9kdWNlIGEgd2FybmluZyBpZiBhIHJlYWwtbGl0ZXJhbC1jb25zdGFudCBjb250YWlucyBhIDxjb2RlPnE8L2NvZGU+CitleHBvbmVudC1sZXR0ZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3N1cnByaXNpbmc8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV3N1cnByaXNpbmdfMDA3ZC0xNjQiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nc18wMDJjLXN1c3BpY2lvdXMtY29kZS0xNjUiPjwvYT5Qcm9kdWNlIGEgd2FybmluZyB3aGVuICZsZHF1bztzdXNwaWNpb3VzJnJkcXVvOyBjb2RlIGNvbnN0cnVjdHMgYXJlIGVuY291bnRlcmVkLiAKK1doaWxlIHRlY2huaWNhbGx5IGxlZ2FsIHRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBoYXMgYmVlbiBtYWRlLgorCisgICAgIDxwPlRoaXMgY3VycmVudGx5IHByb2R1Y2VzIGEgd2FybmluZyB1bmRlciB0aGUgZm9sbG93aW5nIGNpcmN1bXN0YW5jZXM6CisKKyAgICAgICAgICA8dWw+Cis8bGk+QW4gSU5URUdFUiBTRUxFQ1QgY29uc3RydWN0IGhhcyBhIENBU0UgdGhhdCBjYW4gbmV2ZXIgYmUgbWF0Y2hlZCBhcyBpdHMKK2xvd2VyIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBpdHMgdXBwZXIgdmFsdWUuCisKKyAgICAgICAgICA8bGk+QSBMT0dJQ0FMIFNFTEVDVCBjb25zdHJ1Y3QgaGFzIHRocmVlIENBU0Ugc3RhdGVtZW50cy4KKworICAgICAgICAgIDxsaT5BIFRSQU5TRkVSIHNwZWNpZmllcyBhIHNvdXJjZSB0aGF0IGlzIHNob3J0ZXIgdGhhbiB0aGUgZGVzdGluYXRpb24uCisKKyAgICAgICAgICA8bGk+VGhlIHR5cGUgb2YgYSBmdW5jdGlvbiByZXN1bHQgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aCB0aGUgc2FtZSB0eXBlLiAgSWYKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+IG9yIHN0YW5kYXJkLWNvbmZvcm1pbmcgbW9kZSBpcyBlbmFibGVkLCB0aGlzIGlzIGFuIGVycm9yLgorCisgICAgICAgICAgPGxpPkEgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiB2YXJpYWJsZSBpcyBkZWNsYXJlZCB3aXRoIG5lZ2F0aXZlIGxlbmd0aC4gCis8L3VsPgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd0YWJzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yld0YWJzXzAwN2QtMTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy10YWJzLTE2NyI+PC9hPjxhIG5hbWU9ImluZGV4LXRhYnVsYXRvcnMtMTY4Ij48L2E+QnkgZGVmYXVsdCwgdGFicyBhcmUgYWNjZXB0ZWQgYXMgd2hpdGVzcGFjZSwgYnV0IHRhYnMgYXJlIG5vdCBtZW1iZXJzCitvZiB0aGUgRm9ydHJhbiBDaGFyYWN0ZXIgU2V0LiAgRm9yIGNvbnRpbnVhdGlvbiBsaW5lcywgYSB0YWIgZm9sbG93ZWQKK2J5IGEgZGlnaXQgYmV0d2VlbiAxIGFuZCA5IGlzIHN1cHBvcnRlZC4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tdGFiczwvc3Bhbj48L3NhbXA+IHdpbGwgY2F1c2UKK2Egd2FybmluZyB0byBiZSBpc3N1ZWQgaWYgYSB0YWIgaXMgZW5jb3VudGVyZWQuIE5vdGUsIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tdGFiczwvc3Bhbj48L3NhbXA+CitpcyBhY3RpdmUgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1wZWRhbnRpYzwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWY5NTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWYyMDAzPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWYyMDA4PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VuZGVyZmxvdzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXdW5kZXJmbG93XzAwN2QtMTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy11bmRlcmZsb3ctMTcwIj48L2E+PGEgbmFtZT0iaW5kZXgtdW5kZXJmbG93LTE3MSI+PC9hPlByb2R1Y2UgYSB3YXJuaW5nIHdoZW4gbnVtZXJpY2FsIGNvbnN0YW50IGV4cHJlc3Npb25zIGFyZQorZW5jb3VudGVyZWQsIHdoaWNoIHlpZWxkIGFuIFVOREVSRkxPVyBkdXJpbmcgY29tcGlsYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2ludHJpbnNpYy1zaGFkb3c8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV2ludHJpbnNpY18wMDJkc2hhZG93XzAwN2QtMTcyIj48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy1pbnRyaW5zaWMtMTczIj48L2E+PGEgbmFtZT0iaW5kZXgtaW50cmluc2ljLTE3NCI+PC9hPldhcm4gaWYgYSB1c2VyLWRlZmluZWQgcHJvY2VkdXJlIG9yIG1vZHVsZSBwcm9jZWR1cmUgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4KK2ludHJpbnNpYzsgaW4gdGhpcyBjYXNlLCBhbiBleHBsaWNpdCBpbnRlcmZhY2Ugb3IgPGNvZGU+RVhURVJOQUw8L2NvZGU+IG9yCis8Y29kZT5JTlRSSU5TSUM8L2NvZGU+IGRlY2xhcmF0aW9uIG1pZ2h0IGJlIG5lZWRlZCB0byBnZXQgY2FsbHMgbGF0ZXIgcmVzb2x2ZWQgdG8KK3RoZSBkZXNpcmVkIGludHJpbnNpYy9wcm9jZWR1cmUuICBUaGlzIG9wdGlvbiBpcyBpbXBsaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VudXNlZC1kdW1teS1hcmd1bWVudDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXdW51c2VkXzAwMmRkdW1teV8wMDJkYXJndW1lbnRfMDA3ZC0xNzUiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nc18wMDJjLXVudXNlZC1kdW1teS1hcmd1bWVudC0xNzYiPjwvYT48YSBuYW1lPSJpbmRleC11bnVzZWQtZHVtbXktYXJndW1lbnQtMTc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZHVtbXktYXJndW1lbnRfMDAyYy11bnVzZWQtMTc4Ij48L2E+V2FybiBhYm91dCB1bnVzZWQgZHVtbXkgYXJndW1lbnRzLiBUaGlzIG9wdGlvbiBpcyBpbXBsaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV3VudXNlZC1wYXJhbWV0ZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV3VudXNlZF8wMDJkcGFyYW1ldGVyXzAwN2QtMTc5Ij48L2E+PGEgbmFtZT0iaW5kZXgtd2FybmluZ3NfMDAyYy11bnVzZWQtcGFyYW1ldGVyLTE4MCI+PC9hPjxhIG5hbWU9ImluZGV4LXVudXNlZC1wYXJhbWV0ZXItMTgxIj48L2E+Q29udHJhcnkgdG8gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+J3MgbWVhbmluZyBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV3VudXNlZC1wYXJhbWV0ZXI8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+J3MgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBvcHRpb24gZG9lcyBub3Qgd2FybgorYWJvdXQgdW51c2VkIGR1bW15IGFyZ3VtZW50cyAoc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XdW51c2VkLWR1bW15LWFyZ3VtZW50PC9zcGFuPjwvc2FtcD4pLAorYnV0IGFib3V0IHVudXNlZCA8Y29kZT5QQVJBTUVURVI8L2NvZGU+IHZhbHVlcy4gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVd1bnVzZWQtcGFyYW1ldGVyPC9zcGFuPjwvc2FtcD4KK2lzIG5vdCBpbmNsdWRlZCBpbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tV2FsbDwvc3Bhbj48L3NhbXA+IGJ1dCBpcyBpbXBsaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsIC1XZXh0cmE8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XYWxpZ24tY29tbW9uczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXYWxpZ25fMDAyZGNvbW1vbnNfMDA3ZC0xODIiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nc18wMDJjLWFsaWdubWVudC1vZi1fMDA0MGNvZGVfMDA3YkNPTU1PTl8wMDdkLWJsb2Nrcy0xODMiPjwvYT48YSBuYW1lPSJpbmRleC1hbGlnbm1lbnQtb2YtXzAwNDBjb2RlXzAwN2JDT01NT05fMDA3ZC1ibG9ja3MtMTg0Ij48L2E+QnkgZGVmYXVsdCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gd2FybnMgYWJvdXQgYW55IG9jY2FzaW9uIG9mIHZhcmlhYmxlcyBiZWluZworcGFkZGVkIGZvciBwcm9wZXIgYWxpZ25tZW50IGluc2lkZSBhIDxjb2RlPkNPTU1PTjwvY29kZT4gYmxvY2suIFRoaXMgd2FybmluZyBjYW4gYmUgdHVybmVkCitvZmYgdmlhIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1Xbm8tYWxpZ24tY29tbW9uczwvc3Bhbj48L3NhbXA+LiBTZWUgYWxzbyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmFsaWduLWNvbW1vbnM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1XZnVuY3Rpb24tZWxpbWluYXRpb248L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV2Z1bmN0aW9uXzAwMmRlbGltaW5hdGlvbl8wMDdkLTE4NSI+PC9hPjxhIG5hbWU9ImluZGV4LWZ1bmN0aW9uLWVsaW1pbmF0aW9uLTE4NiI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtZnVuY3Rpb24tZWxpbWluYXRpb24tMTg3Ij48L2E+V2FybiBpZiBhbnkgY2FsbHMgdG8gZnVuY3Rpb25zIGFyZSBlbGltaW5hdGVkIGJ5IHRoZSBvcHRpbWl6YXRpb25zCitlbmFibGVkIGJ5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZyb250ZW5kLW9wdGltaXplPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdyZWFsbG9jLWxoczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXcmVhbGxvY18wMDJkbGhzXzAwN2QtMTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtUmVhbGxvY2F0ZS10aGUtTEhTLWluLWFzc2lnbm1lbnRzXzAwMmMtbm90aWZpY2F0aW9uLTE4OSI+PC9hPldhcm4gd2hlbiB0aGUgY29tcGlsZXIgbWlnaHQgaW5zZXJ0IGNvZGUgdG8gZm9yIGFsbG9jYXRpb24gb3IgcmVhbGxvY2F0aW9uIG9mCithbiBhbGxvY2F0YWJsZSBhcnJheSB2YXJpYWJsZSBvZiBpbnRyaW5zaWMgdHlwZSBpbiBpbnRyaW5zaWMgYXNzaWdubWVudHMuICBJbgoraG90IGxvb3BzLCB0aGUgRm9ydHJhbiAyMDAzIHJlYWxsb2NhdGlvbiBmZWF0dXJlIG1heSByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlLiAKK0lmIHRoZSBhcnJheSBpcyBhbHJlYWR5IGFsbG9jYXRlZCB3aXRoIHRoZSBjb3JyZWN0IHNoYXBlLCBjb25zaWRlciB1c2luZyBhCit3aG9sZS1hcnJheSBhcnJheS1zcGVjIChlLmcuIDxjb2RlPig6LDosOik8L2NvZGU+KSBmb3IgdGhlIHZhcmlhYmxlIG9uIHRoZSBsZWZ0LWhhbmQKK3NpZGUgdG8gcHJldmVudCB0aGUgcmVhbGxvY2F0aW9uIGNoZWNrLiBOb3RlIHRoYXQgaW4gc29tZSBjYXNlcyB0aGUgd2FybmluZworaXMgc2hvd24sIGV2ZW4gaWYgdGhlIGNvbXBpbGVyIHdpbGwgb3B0aW1pemUgcmVhbGxvY2F0aW9uIGNoZWNrcyBhd2F5LiAgRm9yCitpbnN0YW5jZSwgd2hlbiB0aGUgcmlnaHQtaGFuZCBzaWRlIGNvbnRhaW5zIHRoZSBzYW1lIHZhcmlhYmxlIG11bHRpcGxpZWQgYnkKK2Egc2NhbGFyLiAgU2VlIGFsc28gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZyZWFsbG9jLWxoczwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdyZWFsbG9jLWxocy1hbGw8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV3JlYWxsb2NfMDAyZGxoc18wMDJkYWxsXzAwN2QtMTkwIj48L2E+V2FybiB3aGVuIHRoZSBjb21waWxlciBpbnNlcnRzIGNvZGUgdG8gZm9yIGFsbG9jYXRpb24gb3IgcmVhbGxvY2F0aW9uIG9mIGFuCithbGxvY2F0YWJsZSB2YXJpYWJsZTsgdGhpcyBpbmNsdWRlcyBzY2FsYXJzIGFuZCBkZXJpdmVkIHR5cGVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVdjb21wYXJlLXJlYWxzPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yldjb21wYXJlXzAwMmRyZWFsc18wMDdkLTE5MSI+PC9hPldhcm4gd2hlbiBjb21wYXJpbmcgcmVhbCBvciBjb21wbGV4IHR5cGVzIGZvciBlcXVhbGl0eSBvciBpbmVxdWFsaXR5LiAKK1RoaXMgb3B0aW9uIGlzIGltcGxpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdleHRyYTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVd0YXJnZXQtbGlmZXRpbWU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiV3Rhcmd0XzAwMmRsaWZldGltZV8wMDdkLTE5MiI+PC9hPldhcm4gaWYgdGhlIHBvaW50ZXIgaW4gYSBwb2ludGVyIGFzc2lnbm1lbnQgbWlnaHQgYmUgbG9uZ2VyIHRoYW4gdGhlIGl0cwordGFyZ2V0LiBUaGlzIG9wdGlvbiBpcyBpbXBsaWVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XYWxsPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tV2Vycm9yPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldlcnJvcl8wMDdkLTE5MyI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtdG8tZXJyb3JzLTE5NCI+PC9hPlR1cm5zIGFsbCB3YXJuaW5ncyBpbnRvIGVycm9ycy4gCis8L2RsPgorCisgICA8cD5TZWUgPGEgaHJlZj0iLi4vZ2NjL1dhcm5pbmctT3B0aW9ucy5odG1sI1dhcm5pbmctT3B0aW9ucyI+T3B0aW9ucyB0byBSZXF1ZXN0IG9yIFN1cHByZXNzIEVycm9ycyBhbmQgV2FybmluZ3M8L2E+LCBmb3IgaW5mb3JtYXRpb24gb24KK21vcmUgb3B0aW9ucyBvZmZlcmVkIGJ5IHRoZSBHQkUgc2hhcmVkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4KK2FuZCBvdGhlciBHTlUgY29tcGlsZXJzLgorCisgICA8cD5Tb21lIG9mIHRoZXNlIGhhdmUgbm8gZWZmZWN0IHdoZW4gY29tcGlsaW5nIHByb2dyYW1zIHdyaXR0ZW4gaW4gRm9ydHJhbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhYWJkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHRlbnNpb25zLmh0bWwjRXh0ZW5zaW9ucyIgdGl0bGU9IkV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4dGVuc2lvbnMuaHRtbCNFeHRlbnNpb25zIj5FeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xIEV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1leHRlbnNpb25zXzAwMmMtaW1wbGVtZW50ZWQtMzMwIj48L2E+CitHTlUgRm9ydHJhbiBpbXBsZW1lbnRzIGEgbnVtYmVyIG9mIGV4dGVuc2lvbnMgb3ZlciBzdGFuZGFyZAorRm9ydHJhbi4gIFRoaXMgY2hhcHRlciBjb250YWlucyBpbmZvcm1hdGlvbiBvbiB0aGVpciBzeW50YXggYW5kCittZWFuaW5nLiAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gY2F0ZWdvcmllcyBvZiBHTlUgRm9ydHJhbgorZXh0ZW5zaW9ucywgdGhvc2UgdGhhdCBwcm92aWRlIGZ1bmN0aW9uYWxpdHkgYmV5b25kIHRoYXQgcHJvdmlkZWQKK2J5IGFueSBzdGFuZGFyZCwgYW5kIHRob3NlIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBHTlUgRm9ydHJhbgorcHVyZWx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IGNvbXBpbGVycy4gIEJ5IGRlZmF1bHQsCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWdudTwvc3Bhbj48L3NhbXA+IGFsbG93cyB0aGUgY29tcGlsZXIgdG8gYWNjZXB0IGJvdGggdHlwZXMgb2YKK2V4dGVuc2lvbnMsIGJ1dCB0byB3YXJuIGFib3V0IHRoZSB1c2Ugb2YgdGhlIGxhdHRlci4gIFNwZWNpZnlpbmcKK2VpdGhlciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWY5NTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWYyMDAzPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1mMjAwODwvc3Bhbj48L3NhbXA+CitkaXNhYmxlcyBib3RoIHR5cGVzIG9mIGV4dGVuc2lvbnMsIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWxlZ2FjeTwvc3Bhbj48L3NhbXA+IGFsbG93cyBib3RoCit3aXRob3V0IHdhcm5pbmcuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJPbGRfMDAyZHN0eWxlLWtpbmQtc3BlY2lmaWNhdGlvbnMuaHRtbCNPbGRfMDAyZHN0eWxlLWtpbmQtc3BlY2lmaWNhdGlvbnMiPk9sZC1zdHlsZSBraW5kIHNwZWNpZmljYXRpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iT2xkXzAwMmRzdHlsZS12YXJpYWJsZS1pbml0aWFsaXphdGlvbi5odG1sI09sZF8wMDJkc3R5bGUtdmFyaWFibGUtaW5pdGlhbGl6YXRpb24iPk9sZC1zdHlsZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbjwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkV4dGVuc2lvbnMtdG8tbmFtZWxpc3QuaHRtbCNFeHRlbnNpb25zLXRvLW5hbWVsaXN0Ij5FeHRlbnNpb25zIHRvIG5hbWVsaXN0PC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iWC1mb3JtYXQtZGVzY3JpcHRvci13aXRob3V0LWNvdW50LWZpZWxkLmh0bWwjWC1mb3JtYXQtZGVzY3JpcHRvci13aXRob3V0LWNvdW50LWZpZWxkIj5YIGZvcm1hdCBkZXNjcmlwdG9yIHdpdGhvdXQgY291bnQgZmllbGQ8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJDb21tYXMtaW4tRk9STUFULXNwZWNpZmljYXRpb25zLmh0bWwjQ29tbWFzLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucyI+Q29tbWFzIGluIEZPUk1BVCBzcGVjaWZpY2F0aW9uczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9Ik1pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sI01pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucyI+TWlzc2luZyBwZXJpb2QgaW4gRk9STUFUIHNwZWNpZmljYXRpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iSV8wMDJmTy1pdGVtLWxpc3RzLmh0bWwjSV8wMDJmTy1pdGVtLWxpc3RzIj5JL08gaXRlbSBsaXN0czwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Il8wMDNjY29kZV8wMDNlUV8wMDNjXzAwMmZjb2RlXzAwM2UtZXhwb25lbnRfMDAyZGxldHRlci5odG1sI2dfdF8wMDNjY29kZV8wMDNlUV8wMDNjXzAwMmZjb2RlXzAwM2UtZXhwb25lbnRfMDAyZGxldHRlciI+PGNvZGU+UTwvY29kZT4gZXhwb25lbnQtbGV0dGVyPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iQk9aLWxpdGVyYWwtY29uc3RhbnRzLmh0bWwjQk9aLWxpdGVyYWwtY29uc3RhbnRzIj5CT1ogbGl0ZXJhbCBjb25zdGFudHM8L2E+Cis8bGk+PGEgaHJlZj0iUmVhbC1hcnJheS1pbmRpY2VzLmh0bWwjUmVhbC1hcnJheS1pbmRpY2VzIj5SZWFsIGFycmF5IGluZGljZXM8L2E+Cis8bGk+PGEgaHJlZj0iVW5hcnktb3BlcmF0b3JzLmh0bWwjVW5hcnktb3BlcmF0b3JzIj5VbmFyeSBvcGVyYXRvcnM8L2E+Cis8bGk+PGEgaHJlZj0iSW1wbGljaXRseS1jb252ZXJ0LUxPR0lDQUwtYW5kLUlOVEVHRVItdmFsdWVzLmh0bWwjSW1wbGljaXRseS1jb252ZXJ0LUxPR0lDQUwtYW5kLUlOVEVHRVItdmFsdWVzIj5JbXBsaWNpdGx5IGNvbnZlcnQgTE9HSUNBTCBhbmQgSU5URUdFUiB2YWx1ZXM8L2E+Cis8bGk+PGEgaHJlZj0iSG9sbGVyaXRoLWNvbnN0YW50cy1zdXBwb3J0Lmh0bWwjSG9sbGVyaXRoLWNvbnN0YW50cy1zdXBwb3J0Ij5Ib2xsZXJpdGggY29uc3RhbnRzIHN1cHBvcnQ8L2E+Cis8bGk+PGEgaHJlZj0iQ3JheS1wb2ludGVycy5odG1sI0NyYXktcG9pbnRlcnMiPkNyYXkgcG9pbnRlcnM8L2E+Cis8bGk+PGEgaHJlZj0iQ09OVkVSVC1zcGVjaWZpZXIuaHRtbCNDT05WRVJULXNwZWNpZmllciI+Q09OVkVSVCBzcGVjaWZpZXI8L2E+Cis8bGk+PGEgaHJlZj0iT3Blbk1QLmh0bWwjT3Blbk1QIj5PcGVuTVA8L2E+Cis8bGk+PGEgaHJlZj0iQXJndW1lbnQtbGlzdC1mdW5jdGlvbnMuaHRtbCNBcmd1bWVudC1saXN0LWZ1bmN0aW9ucyI+QXJndW1lbnQgbGlzdCBmdW5jdGlvbnM8L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2E1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbApAQCAtMCwwICsxLDg0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FeHRlbnNpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHRlbnNpb25zLmh0bWwjRXh0ZW5zaW9ucyIgdGl0bGU9IkV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiIgdGl0bGU9IkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4dGVuc2lvbnMuaHRtbCNFeHRlbnNpb25zIj5FeHRlbnNpb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4yIEV4dGVuc2lvbnMgbm90IGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXh0ZW5zaW9uc18wMDJjLW5vdC1pbXBsZW1lbnRlZC0zNDgiPjwvYT4KK1RoZSBsb25nIGhpc3Rvcnkgb2YgdGhlIEZvcnRyYW4gbGFuZ3VhZ2UsIGl0cyB3aWRlIHVzZSBhbmQgYnJvYWQKK3VzZXJiYXNlLCB0aGUgbGFyZ2UgbnVtYmVyIG9mIGRpZmZlcmVudCBjb21waWxlciB2ZW5kb3JzIGFuZCB0aGUgbGFjayBvZgorc29tZSBmZWF0dXJlcyBjcnVjaWFsIHRvIHVzZXJzIGluIHRoZSBmaXJzdCBzdGFuZGFyZHMgaGF2ZSBsZWFkIHRvIHRoZQorZXhpc3RlbmNlIG9mIGEgbnVtYmVyIG9mIGltcG9ydGFudCBleHRlbnNpb25zIHRvIHRoZSBsYW5ndWFnZS4gIFdoaWxlCitzb21lIG9mIHRoZSBtb3N0IHVzZWZ1bCBvciBwb3B1bGFyIGV4dGVuc2lvbnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgR05VCitGb3J0cmFuIGNvbXBpbGVyLCBub3QgYWxsIGV4aXN0aW5nIGV4dGVuc2lvbnMgYXJlIHN1cHBvcnRlZC4gIFRoaXMgc2VjdGlvbgorYWltcyBhdCBsaXN0aW5nIHRoZXNlIGV4dGVuc2lvbnMgYW5kIG9mZmVyaW5nIGFkdmljZSBvbiBob3cgYmVzdCBtYWtlCitjb2RlIHRoYXQgdXNlcyB0aGVtIHJ1bm5pbmcgd2l0aCB0aGUgR05VIEZvcnRyYW4gY29tcGlsZXIuCisKKzwhLS0gTW9yZSBjYW4gYmUgZm91bmQgaGVyZTogLS0+Cis8IS0tICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MtMy40LjYvZzc3L01pc3NpbmctRmVhdHVyZXMuaHRtbCAtLT4KKzwhLS0gIHRoZSBsaXN0IG9mIEZvcnRyYW4gYW5kIGxpYmdmb3J0cmFuIGJ1Z3MgY2xvc2VkIGFzIFdPTlRGSVg6IC0tPgorPCEtLSBodHRwOi8vdGlueXVybC5jb20vMnU0aDV5IC0tPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlNUUlVDVFVSRS1hbmQtUkVDT1JELmh0bWwjU1RSVUNUVVJFLWFuZC1SRUNPUkQiPlNUUlVDVFVSRSBhbmQgUkVDT1JEPC9hPgorPCEtLSAqIFVOSU9OIGFuZCBNQVA6OiAtLT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkVOQ09ERS1hbmQtREVDT0RFLXN0YXRlbWVudHMuaHRtbCNFTkNPREUtYW5kLURFQ09ERS1zdGF0ZW1lbnRzIj5FTkNPREUgYW5kIERFQ09ERSBzdGF0ZW1lbnRzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVmFyaWFibGUtRk9STUFULWV4cHJlc3Npb25zLmh0bWwjVmFyaWFibGUtRk9STUFULWV4cHJlc3Npb25zIj5WYXJpYWJsZSBGT1JNQVQgZXhwcmVzc2lvbnM8L2E+Cis8IS0tICogUSBlZGl0IGRlc2NyaXB0b3I6OiAtLT4KKzwhLS0gKiBBVVRPTUFUSUMgc3RhdGVtZW50OjogLS0+Cis8IS0tICogVFlQRSBhbmQgQUNDRVBUIEkvTyBTdGF0ZW1lbnRzOjogLS0+Cis8IS0tICogLlhPUi4gb3BlcmF0b3I6OiAtLT4KKzwhLS0gKiBDQVJSSUFHRUNPTlRST0wsIERFRkFVTFRGSUxFLCBESVNQT1NFIGFuZCBSRUNPUkRUWVBFIEkvTyBzcGVjaWZpZXJzOjogLS0+Cis8IS0tICogT21pdHRlZCBhcmd1bWVudHMgaW4gcHJvY2VkdXJlIGNhbGw6OiAtLT4KKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkFsdGVybmF0ZS1jb21wbGV4LWZ1bmN0aW9uLXN5bnRheC5odG1sI0FsdGVybmF0ZS1jb21wbGV4LWZ1bmN0aW9uLXN5bnRheCI+QWx0ZXJuYXRlIGNvbXBsZXggZnVuY3Rpb24gc3ludGF4PC9hPgorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0V4dGVuc2lvbnMtdG8tbmFtZWxpc3QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FeHRlbnNpb25zLXRvLW5hbWVsaXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkODBlNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9FeHRlbnNpb25zLXRvLW5hbWVsaXN0Lmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkV4dGVuc2lvbnMgdG8gbmFtZWxpc3QgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iIHRpdGxlPSJFeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT2xkXzAwMmRzdHlsZS12YXJpYWJsZS1pbml0aWFsaXphdGlvbi5odG1sI09sZF8wMDJkc3R5bGUtdmFyaWFibGUtaW5pdGlhbGl6YXRpb24iIHRpdGxlPSJPbGQtc3R5bGUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJYLWZvcm1hdC1kZXNjcmlwdG9yLXdpdGhvdXQtY291bnQtZmllbGQuaHRtbCNYLWZvcm1hdC1kZXNjcmlwdG9yLXdpdGhvdXQtY291bnQtZmllbGQiIHRpdGxlPSJYIGZvcm1hdCBkZXNjcmlwdG9yIHdpdGhvdXQgY291bnQgZmllbGQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXh0ZW5zaW9ucy10by1uYW1lbGlzdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJYLWZvcm1hdC1kZXNjcmlwdG9yLXdpdGhvdXQtY291bnQtZmllbGQuaHRtbCNYLWZvcm1hdC1kZXNjcmlwdG9yLXdpdGhvdXQtY291bnQtZmllbGQiPlggZm9ybWF0IGRlc2NyaXB0b3Igd2l0aG91dCBjb3VudCBmaWVsZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9sZF8wMDJkc3R5bGUtdmFyaWFibGUtaW5pdGlhbGl6YXRpb24uaHRtbCNPbGRfMDAyZHN0eWxlLXZhcmlhYmxlLWluaXRpYWxpemF0aW9uIj5PbGQtc3R5bGUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMS4zIEV4dGVuc2lvbnMgdG8gbmFtZWxpc3Q8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1OYW1lbGlzdC0zMzIiPjwvYT4KK0dOVSBGb3J0cmFuIGZ1bGx5IHN1cHBvcnRzIHRoZSBGb3J0cmFuIDk1IHN0YW5kYXJkIGZvciBuYW1lbGlzdCBJL08KK2luY2x1ZGluZyBhcnJheSBxdWFsaWZpZXJzLCBzdWJzdHJpbmdzIGFuZCBmdWxseSBxdWFsaWZpZWQgZGVyaXZlZCB0eXBlcy4gCitUaGUgb3V0cHV0IGZyb20gYSBuYW1lbGlzdCB3cml0ZSBpcyBjb21wYXRpYmxlIHdpdGggbmFtZWxpc3QgcmVhZC4gIFRoZQorb3V0cHV0IGhhcyBhbGwgbmFtZXMgaW4gdXBwZXIgY2FzZSBhbmQgaW5kZW50YXRpb24gdG8gY29sdW1uIDEgYWZ0ZXIgdGhlCituYW1lbGlzdCBuYW1lLiAgVHdvIGV4dGVuc2lvbnMgYXJlIHBlcm1pdHRlZDoKKworICAgPHA+T2xkLXN0eWxlIHVzZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdGVhZCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZhbXA7PC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgJE1ZTk1MCisgICAgICBYKDopJVkoMikgPSAxLjAgMi4wIDMuMAorICAgICAgQ0goMTo0KSA9ICJhYmNkIgorICAgICAkRU5ECis8L3ByZT4KKyAgIDxwPkl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZSBkZWZhdWx0IHRlcm1pbmF0b3IgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJhdGhlciB0aGFuCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZhbXA7RU5EPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5RdWVyeWluZyBvZiB0aGUgbmFtZWxpc3Qgd2hlbiBpbnB1dHRpbmcgZnJvbSBzdGRpbi4gIEFmdGVyIGF0IGxlYXN0CitvbmUgc3BhY2UsIGVudGVyaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Pzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZW5kcyB0byBzdGRvdXQgdGhlIG5hbWVsaXN0IG5hbWUgYW5kIHRoZSBuYW1lcyBvZgordGhlIHZhcmlhYmxlcyBpbiB0aGUgbmFtZWxpc3Q6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgID8KKyAgICAgCisgICAgICZhbXA7bXlubWwKKyAgICAgIHgKKyAgICAgIHgleQorICAgICAgY2gKKyAgICAgJmFtcDtlbmQKKzwvcHJlPgorICAgPHA+RW50ZXJpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49Pzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvdXRwdXRzIHRoZSBuYW1lbGlzdCB0byBzdGRvdXQsIGFzIGlmCis8Y29kZT5XUklURSgqLE5NTCA9IG15bm1sKTwvY29kZT4gaGFkIGJlZW4gY2FsbGVkOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgID0/CisgICAgIAorICAgICAmYW1wO01ZTk1MCisgICAgICBYKDEpJVk9ICAwLjAwMDAwMCAgICAsICAxLjAwMDAwMCAgICAsICAwLjAwMDAwMCAgICAsCisgICAgICBYKDIpJVk9ICAwLjAwMDAwMCAgICAsICAyLjAwMDAwMCAgICAsICAwLjAwMDAwMCAgICAsCisgICAgICBYKDMpJVk9ICAwLjAwMDAwMCAgICAsICAzLjAwMDAwMCAgICAsICAwLjAwMDAwMCAgICAsCisgICAgICBDSD1hYmNkLCAgLworPC9wcmU+CisgICA8cD5UbyBhaWQgdGhpcyBkaWFsb2csIHdoZW4gaW5wdXQgaXMgZnJvbSBzdGRpbiwgZXJyb3JzIHNlbmQgdGhlaXIKK21lc3NhZ2VzIHRvIHN0ZGVyciBhbmQgZXhlY3V0aW9uIGNvbnRpbnVlcywgZXZlbiBpZiA8Y29kZT5JT1NUQVQ8L2NvZGU+IGlzIHNldC4KKworICAgPHA+PGNvZGU+UFJJTlQ8L2NvZGU+IG5hbWVsaXN0IGlzIHBlcm1pdHRlZC4gIFRoaXMgY2F1c2VzIGFuIGVycm9yIGlmCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWY5NTwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgUFJPR1JBTSB0ZXN0X3ByaW50CisgICAgICAgUkVBTCwgZGltZW5zaW9uICg0KSAgOjogIHggPSAoLzEuMCwgMi4wLCAzLjAsIDQuMC8pCisgICAgICAgTkFNRUxJU1QgL215bm1sLyB4CisgICAgICAgUFJJTlQgbXlubWwKKyAgICAgRU5EIFBST0dSQU0gdGVzdF9wcmludAorPC9wcmU+CisgICA8cD5FeHBhbmRlZCBuYW1lbGlzdCByZWFkcyBhcmUgcGVybWl0dGVkLiAgVGhpcyBjYXVzZXMgYW4gZXJyb3IgaWYKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9Zjk1PC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIGZpcnN0IGVsZW1lbnQKK29mIHRoZSBhcnJheSB3aWxsIGJlIGdpdmVuIHRoZSB2YWx1ZSAwLjAwIGFuZCB0aGUgdHdvIHN1Y2NlZWRpbmcKK2VsZW1lbnRzIHdpbGwgYmUgZ2l2ZW4gdGhlIHZhbHVlcyAxLjAwIGFuZCAyLjAwLgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICZhbXA7TVlOTUwKKyAgICAgICBYKDEsMSkgPSAwLjAwICwgMS4wMCAsIDIuMDAKKyAgICAgLworPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRXh0ZW5zaW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0V4dGVuc2lvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI5ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0V4dGVuc2lvbnMuaHRtbApAQCAtMCwwICsxLDcwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FeHRlbnNpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29tcGlsZXItQ2hhcmFjdGVyaXN0aWNzLmh0bWwjQ29tcGlsZXItQ2hhcmFjdGVyaXN0aWNzIiB0aXRsZT0iQ29tcGlsZXIgQ2hhcmFjdGVyaXN0aWNzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwjTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nIiB0aXRsZT0iTWl4ZWQtTGFuZ3VhZ2UgUHJvZ3JhbW1pbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXh0ZW5zaW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmcuaHRtbCNNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmciPk1peGVkLUxhbmd1YWdlIFByb2dyYW1taW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29tcGlsZXItQ2hhcmFjdGVyaXN0aWNzLmh0bWwjQ29tcGlsZXItQ2hhcmFjdGVyaXN0aWNzIj5Db21waWxlciBDaGFyYWN0ZXJpc3RpY3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NiBFeHRlbnNpb25zPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXh0ZW5zaW9ucy0zMjkiPjwvYT4KK1RoZSB0d28gc2VjdGlvbnMgYmVsb3cgZGV0YWlsIHRoZSBleHRlbnNpb25zIHRvIHN0YW5kYXJkIEZvcnRyYW4gdGhhdCBhcmUKK2ltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuLCBhcyB3ZWxsIGFzIHNvbWUgb2YgdGhlIHBvcHVsYXIgb3IKK2hpc3RvcmljYWxseSBpbXBvcnRhbnQgZXh0ZW5zaW9ucyB0aGF0IGFyZSBub3QgKG9yIG5vdCB5ZXQpIGltcGxlbWVudGVkLiAKK0ZvciB0aGUgbGF0dGVyIGNhc2UsIHdlIGV4cGxhaW4gdGhlIGFsdGVybmF0aXZlcyBhdmFpbGFibGUgdG8gR05VIEZvcnRyYW4KK3VzZXJzLCBpbmNsdWRpbmcgcmVwbGFjZW1lbnQgYnkgc3RhbmRhcmQtY29uZm9ybWluZyBjb2RlIG9yIEdOVQorZXh0ZW5zaW9ucy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRkRBVEUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GREFURS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTNiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRkRBVEUuaHRtbApAQCAtMCwwICsxLDEwMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RkRBVEUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRVhURU5EU18wMDVmVFlQRV8wMDVmT0YuaHRtbCNFWFRFTkRTXzAwNWZUWVBFXzAwNWZPRiIgdGl0bGU9IkVYVEVORFNfVFlQRV9PRiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZHRVQuaHRtbCNGR0VUIiB0aXRsZT0iRkdFVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGREFURSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGR0VULmh0bWwjRkdFVCI+RkdFVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkVYVEVORFNfMDA1ZlRZUEVfMDA1Zk9GLmh0bWwjRVhURU5EU18wMDVmVFlQRV8wMDVmT0YiPkVYVEVORFNfVFlQRV9PRjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC44MyA8Y29kZT5GREFURTwvY29kZT4gJm1kYXNoOyBHZXQgdGhlIGN1cnJlbnQgdGltZSBhcyBhIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUZEQVRFLTYyOCI+PC9hPjxhIG5hbWU9ImluZGV4LXRpbWVfMDAyYy1jdXJyZW50LTYyOSI+PC9hPjxhIG5hbWU9ImluZGV4LWN1cnJlbnQtdGltZS02MzAiPjwvYT48YSBuYW1lPSJpbmRleC1kYXRlXzAwMmMtY3VycmVudC02MzEiPjwvYT48YSBuYW1lPSJpbmRleC1jdXJyZW50LWRhdGUtNjMyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+RkRBVEUoREFURSk8L2NvZGU+IHJldHVybnMgdGhlIGN1cnJlbnQgZGF0ZSAodXNpbmcgdGhlIHNhbWUgZm9ybWF0IGFzCis8Y29kZT5DVElNRTwvY29kZT4pIGluIDx2YXI+REFURTwvdmFyPi4gSXQgaXMgZXF1aXZhbGVudCB0byA8Y29kZT5DQUxMIENUSU1FKERBVEUsCitUSU1FKCkpPC9jb2RlPi4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOyBob3dldmVyLAorb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgRkRBVEUoREFURSk8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkRBVEUgPSBGREFURSgpPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+REFURTwvdmFyPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gb2YgdGhlCitkZWZhdWx0IGtpbmQuIEl0IGlzIGFuIDxjb2RlPklOVEVOVChPVVQpPC9jb2RlPiBhcmd1bWVudC4gIElmIHRoZSBsZW5ndGggb2YKK3RoaXMgdmFyaWFibGUgaXMgdG9vIHNob3J0IGZvciB0aGUgZGF0ZSBhbmQgdGltZSBzdHJpbmcgdG8gZml0Citjb21wbGV0ZWx5LCBpdCB3aWxsIGJlIGJsYW5rIG9uIHByb2NlZHVyZSByZXR1cm4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBhcyBhIHN0cmluZy4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZmRhdGUKKyAgICAgICAgICAgICAgaW50ZWdlcig4KSA6OiBpLCBqCisgICAgICAgICAgICAgIGNoYXJhY3RlcihsZW49MzApIDo6IGRhdGUKKyAgICAgICAgICAgICAgY2FsbCBmZGF0ZShkYXRlKQorICAgICAgICAgICAgICBwcmludCAqLCAnUHJvZ3JhbSBzdGFydGVkIG9uICcsIGRhdGUKKyAgICAgICAgICAgICAgZG8gaSA9IDEsIDEwMDAwMDAwMCAhIEp1c3QgYSBkZWxheQorICAgICAgICAgICAgICAgICAgaiA9IGkgKiBpIC0gaQorICAgICAgICAgICAgICBlbmQgZG8KKyAgICAgICAgICAgICAgY2FsbCBmZGF0ZShkYXRlKQorICAgICAgICAgICAgICBwcmludCAqLCAnUHJvZ3JhbSBlbmRlZCBvbiAnLCBkYXRlCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9mZGF0ZQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI0RBVEVfMDA1ZkFORF8wMDVmVElNRSI+REFURV9BTkRfVElNRTwvYT4sIDxhIGhyZWY9IkNUSU1FLmh0bWwjQ1RJTUUiPkNUSU1FPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZHRVQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GR0VULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlZjdmMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GR0VULmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZHRVQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRkRBVEUuaHRtbCNGREFURSIgdGl0bGU9IkZEQVRFIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRkdFVEMuaHRtbCNGR0VUQyIgdGl0bGU9IkZHRVRDIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZHRVQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRkdFVEMuaHRtbCNGR0VUQyI+RkdFVEM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGREFURS5odG1sI0ZEQVRFIj5GREFURTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC44NCA8Y29kZT5GR0VUPC9jb2RlPiAmbWRhc2g7IFJlYWQgYSBzaW5nbGUgY2hhcmFjdGVyIGluIHN0cmVhbSBtb2RlIGZyb20gc3RkaW48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1GR0VULTYzMyI+PC9hPjxhIG5hbWU9ImluZGV4LXJlYWQtY2hhcmFjdGVyXzAwMmMtc3RyZWFtLW1vZGUtNjM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyZWFtLW1vZGVfMDAyYy1yZWFkLWNoYXJhY3Rlci02MzUiPjwvYT48YSBuYW1lPSJpbmRleC1maWxlLW9wZXJhdGlvbl8wMDJjLXJlYWQtY2hhcmFjdGVyLTYzNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJlYWQgYSBzaW5nbGUgY2hhcmFjdGVyIGluIHN0cmVhbSBtb2RlIGZyb20gc3RkaW4gYnkgYnlwYXNzaW5nIG5vcm1hbAorZm9ybWF0dGVkIG91dHB1dC4gU3RyZWFtIEkvTyBzaG91bGQgbm90IGJlIG1peGVkIHdpdGggbm9ybWFsIHJlY29yZC1vcmllbnRlZAorKGZvcm1hdHRlZCBvciB1bmZvcm1hdHRlZCkgSS9PIG9uIHRoZSBzYW1lIHVuaXQ7IHRoZSByZXN1bHRzIGFyZSB1bnByZWRpY3RhYmxlLgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIHByb3ZpZGVkIGluIGJvdGggc3Vicm91dGluZSBhbmQgZnVuY3Rpb24gZm9ybXM7IGhvd2V2ZXIsCitvbmx5IG9uZSBmb3JtIGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBwcm9ncmFtIHVuaXQuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSA8Y29kZT5GR0VUPC9jb2RlPiBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPi4gIEdOVSBGb3J0cmFuIHByb3ZpZGVzIHRoZSBGb3J0cmFuIDIwMDMgU3RyZWFtIGZhY2lsaXR5LiAKK1Byb2dyYW1tZXJzIHNob3VsZCBjb25zaWRlciB0aGUgdXNlIG9mIG5ldyBzdHJlYW0gSU8gZmVhdHVyZSBpbiBuZXcgY29kZQorZm9yIGZ1dHVyZSBwb3J0YWJpbGl0eS4gU2VlIGFsc28gPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgRkdFVChDIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gRkdFVChDKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QzwvdmFyPiAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IGFuZCBvZiBkZWZhdWx0CitraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHN0YXR1cyBmbGFnIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVuZC1vZi1maWxlLCBhbmQgYSBzeXN0ZW0gc3BlY2lmaWMgcG9zaXRpdmUKK2Vycm9yIGNvZGUgb3RoZXJ3aXNlLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X2ZnZXQKKyAgICAgICAgICAgIElOVEVHRVIsIFBBUkFNRVRFUiA6OiBzdHJsZW4gPSAxMDAKKyAgICAgICAgICAgIElOVEVHRVIgOjogc3RhdHVzLCBpID0gMQorICAgICAgICAgICAgQ0hBUkFDVEVSKGxlbj1zdHJsZW4pIDo6IHN0ciA9ICIiCisgICAgICAgICAgCisgICAgICAgICAgICBXUklURSAoKiwqKSAnRW50ZXIgdGV4dDonCisgICAgICAgICAgICBETworICAgICAgICAgICAgICBDQUxMIGZnZXQoc3RyKGk6aSksIHN0YXR1cykKKyAgICAgICAgICAgICAgaWYgKHN0YXR1cyAvPSAwIC5PUi4gaSAmZ3Q7IHN0cmxlbikgZXhpdAorICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgIEVORCBETworICAgICAgICAgICAgV1JJVEUgKCosKikgVFJJTShzdHIpCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJGR0VUQy5odG1sI0ZHRVRDIj5GR0VUQzwvYT4sIDxhIGhyZWY9IkZQVVQuaHRtbCNGUFVUIj5GUFVUPC9hPiwgPGEgaHJlZj0iRlBVVEMuaHRtbCNGUFVUQyI+RlBVVEM8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRkdFVEMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GR0VUQy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjRiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRkdFVEMuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RkdFVEMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRkdFVC5odG1sI0ZHRVQiIHRpdGxlPSJGR0VUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRkxPT1IuaHRtbCNGTE9PUiIgdGl0bGU9IkZMT09SIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZHRVRDIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZMT09SLmh0bWwjRkxPT1IiPkZMT09SPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRkdFVC5odG1sI0ZHRVQiPkZHRVQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguODUgPGNvZGU+RkdFVEM8L2NvZGU+ICZtZGFzaDsgUmVhZCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gc3RyZWFtIG1vZGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1GR0VUQy02MzciPjwvYT48YSBuYW1lPSJpbmRleC1yZWFkLWNoYXJhY3Rlcl8wMDJjLXN0cmVhbS1tb2RlLTYzOCI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmVhbS1tb2RlXzAwMmMtcmVhZC1jaGFyYWN0ZXItNjM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmlsZS1vcGVyYXRpb25fMDAyYy1yZWFkLWNoYXJhY3Rlci02NDAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZWFkIGEgc2luZ2xlIGNoYXJhY3RlciBpbiBzdHJlYW0gbW9kZSBieSBieXBhc3Npbmcgbm9ybWFsIGZvcm1hdHRlZCBvdXRwdXQuIAorU3RyZWFtIEkvTyBzaG91bGQgbm90IGJlIG1peGVkIHdpdGggbm9ybWFsIHJlY29yZC1vcmllbnRlZCAoZm9ybWF0dGVkIG9yCit1bmZvcm1hdHRlZCkgSS9PIG9uIHRoZSBzYW1lIHVuaXQ7IHRoZSByZXN1bHRzIGFyZSB1bnByZWRpY3RhYmxlLgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIHByb3ZpZGVkIGluIGJvdGggc3Vicm91dGluZSBhbmQgZnVuY3Rpb24gZm9ybXM7IGhvd2V2ZXIsCitvbmx5IG9uZSBmb3JtIGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBwcm9ncmFtIHVuaXQuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSA8Y29kZT5GR0VUPC9jb2RlPiBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Cit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPi4gIEdOVSBGb3J0cmFuIHByb3ZpZGVzIHRoZSBGb3J0cmFuIDIwMDMgU3RyZWFtIGZhY2lsaXR5LiAKK1Byb2dyYW1tZXJzIHNob3VsZCBjb25zaWRlciB0aGUgdXNlIG9mIG5ldyBzdHJlYW0gSU8gZmVhdHVyZSBpbiBuZXcgY29kZQorZm9yIGZ1dHVyZSBwb3J0YWJpbGl0eS4gU2VlIGFsc28gPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgRkdFVEMoVU5JVCwgQyBbLCBTVEFUVVNdKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlNUQVRVUyA9IEZHRVRDKFVOSVQsIEMpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5VTklUPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QzwvdmFyPiAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IGFuZCBvZiBkZWZhdWx0CitraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHN0YXR1cyBmbGFnIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVuZC1vZi1maWxlIGFuZCBhIHN5c3RlbSBzcGVjaWZpYyBwb3NpdGl2ZQorZXJyb3IgY29kZSBvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfZmdldGMKKyAgICAgICAgICAgIElOVEVHRVIgOjogZmQgPSA0Miwgc3RhdHVzCisgICAgICAgICAgICBDSEFSQUNURVIgOjogYworICAgICAgICAgIAorICAgICAgICAgICAgT1BFTihVTklUPWZkLCBGSUxFPSIvZXRjL3Bhc3N3ZCIsIEFDVElPTj0iUkVBRCIsIFNUQVRVUyA9ICJPTEQiKQorICAgICAgICAgICAgRE8KKyAgICAgICAgICAgICAgQ0FMTCBmZ2V0YyhmZCwgYywgc3RhdHVzKQorICAgICAgICAgICAgICBJRiAoc3RhdHVzIC89IDApIEVYSVQKKyAgICAgICAgICAgICAgY2FsbCBmcHV0KGMpCisgICAgICAgICAgICBFTkQgRE8KKyAgICAgICAgICAgIENMT1NFKFVOSVQ9ZmQpCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJGR0VULmh0bWwjRkdFVCI+RkdFVDwvYT4sIDxhIGhyZWY9IkZQVVQuaHRtbCNGUFVUIj5GUFVUPC9hPiwgPGEgaHJlZj0iRlBVVEMuaHRtbCNGUFVUQyI+RlBVVEM8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRkxPT1IuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GTE9PUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNTliYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRkxPT1IuaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GTE9PUiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGR0VUQy5odG1sI0ZHRVRDIiB0aXRsZT0iRkdFVEMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGTFVTSC5odG1sI0ZMVVNIIiB0aXRsZT0iRkxVU0giPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRkxPT1IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRkxVU0guaHRtbCNGTFVTSCI+RkxVU0g8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGR0VUQy5odG1sI0ZHRVRDIj5GR0VUQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC44NiA8Y29kZT5GTE9PUjwvY29kZT4gJm1kYXNoOyBJbnRlZ2VyIGZsb29yIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRkxPT1ItNjQxIj48L2E+PGEgbmFtZT0iaW5kZXgtZmxvb3ItNjQyIj48L2E+PGEgbmFtZT0iaW5kZXgtcm91bmRpbmdfMDAyYy1mbG9vci02NDMiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5GTE9PUihBKTwvY29kZT4gcmV0dXJucyB0aGUgZ3JlYXRlc3QgaW50ZWdlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEZMT09SKEEgWywgS0lORF0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVIoS0lORCk8L2NvZGU+IGlmIDx2YXI+S0lORDwvdmFyPiBpcyBwcmVzZW50CithbmQgb2YgZGVmYXVsdC1raW5kIDxjb2RlPklOVEVHRVI8L2NvZGU+IG90aGVyd2lzZS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZmxvb3IKKyAgICAgICAgICAgICAgcmVhbCA6OiB4ID0gNjMuMjkKKyAgICAgICAgICAgICAgcmVhbCA6OiB5ID0gLTYzLjU5CisgICAgICAgICAgICAgIHByaW50ICosIGZsb29yKHgpICEgcmV0dXJucyA2MworICAgICAgICAgICAgICBwcmludCAqLCBmbG9vcih5KSAhIHJldHVybnMgLTY0CisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9mbG9vcgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkNFSUxJTkcuaHRtbCNDRUlMSU5HIj5DRUlMSU5HPC9hPiwgPGEgaHJlZj0iTklOVC5odG1sI05JTlQiPk5JTlQ8L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GTFVTSC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZMVVNILmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiOTk2NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GTFVTSC5odG1sCkBAIC0wLDAgKzEsMTE0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GTFVTSCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGTE9PUi5odG1sI0ZMT09SIiB0aXRsZT0iRkxPT1IiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGTlVNLmh0bWwjRk5VTSIgdGl0bGU9IkZOVU0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRkxVU0giPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRk5VTS5odG1sI0ZOVU0iPkZOVU08L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGTE9PUi5odG1sI0ZMT09SIj5GTE9PUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC44NyA8Y29kZT5GTFVTSDwvY29kZT4gJm1kYXNoOyBGbHVzaCBJL08gdW5pdChzKTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUZMVVNILTY0NCI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtZmx1c2gtNjQ1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+Rmx1c2hlcyBGb3J0cmFuIHVuaXQocykgY3VycmVudGx5IG9wZW4gZm9yIG91dHB1dC4gV2l0aG91dCB0aGUgb3B0aW9uYWwKK2FyZ3VtZW50LCBhbGwgdW5pdHMgYXJlIGZsdXNoZWQsIG90aGVyd2lzZSBqdXN0IHRoZSB1bml0IHNwZWNpZmllZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIEZMVVNIKFVOSVQpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VU5JVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBUaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPk5vdGU8L2VtPjo8ZGQ+QmVnaW5uaW5nIHdpdGggdGhlIEZvcnRyYW4gMjAwMyBzdGFuZGFyZCwgdGhlcmUgaXMgYSA8Y29kZT5GTFVTSDwvY29kZT4KK3N0YXRlbWVudCB0aGF0IHNob3VsZCBiZSBwcmVmZXJyZWQgb3ZlciB0aGUgPGNvZGU+RkxVU0g8L2NvZGU+IGludHJpbnNpYy4KKworICAgICA8cD5UaGUgPGNvZGU+RkxVU0g8L2NvZGU+IGludHJpbnNpYyBhbmQgdGhlIEZvcnRyYW4gMjAwMyA8Y29kZT5GTFVTSDwvY29kZT4gc3RhdGVtZW50CitoYXZlIGlkZW50aWNhbCBlZmZlY3Q6IHRoZXkgZmx1c2ggdGhlIHJ1bnRpbWUgbGlicmFyeSdzIEkvTyBidWZmZXIgc28KK3RoYXQgdGhlIGRhdGEgYmVjb21lcyB2aXNpYmxlIHRvIG90aGVyIHByb2Nlc3Nlcy4gVGhpcyBkb2VzIG5vdCBndWFyYW50ZWUKK3RoYXQgdGhlIGRhdGEgaXMgY29tbWl0dGVkIHRvIGRpc2suCisKKyAgICAgPHA+T24gUE9TSVggc3lzdGVtcywgeW91IGNhbiByZXF1ZXN0IHRoYXQgYWxsIGRhdGEgaXMgdHJhbnNmZXJyZWQgIHRvICB0aGUKK3N0b3JhZ2UgZGV2aWNlIGJ5IGNhbGxpbmcgdGhlIDxjb2RlPmZzeW5jPC9jb2RlPiBmdW5jdGlvbiwgd2l0aCB0aGUgUE9TSVggZmlsZQorZGVzY3JpcHRvciBvZiB0aGUgSS9PIHVuaXQgYXMgYXJndW1lbnQgKHJldHJpZXZlZCB3aXRoIEdOVSBpbnRyaW5zaWMKKzxjb2RlPkZOVU08L2NvZGU+KS4gVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdzoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICEgRGVjbGFyZSB0aGUgaW50ZXJmYWNlIGZvciBQT1NJWCBmc3luYyBmdW5jdGlvbgorICAgICAgICAgICAgaW50ZXJmYWNlCisgICAgICAgICAgICAgIGZ1bmN0aW9uIGZzeW5jIChmZCkgYmluZChjLG5hbWU9ImZzeW5jIikKKyAgICAgICAgICAgICAgdXNlIGlzb19jX2JpbmRpbmcsIG9ubHk6IGNfaW50CisgICAgICAgICAgICAgICAgaW50ZWdlcihjX2ludCksIHZhbHVlIDo6IGZkCisgICAgICAgICAgICAgICAgaW50ZWdlcihjX2ludCkgOjogZnN5bmMKKyAgICAgICAgICAgICAgZW5kIGZ1bmN0aW9uIGZzeW5jCisgICAgICAgICAgICBlbmQgaW50ZXJmYWNlCisgICAgICAgICAgCisgICAgICAgICAgICAhIFZhcmlhYmxlIGRlY2xhcmF0aW9uCisgICAgICAgICAgICBpbnRlZ2VyIDo6IHJldAorICAgICAgICAgIAorICAgICAgICAgICAgISBPcGVuaW5nIHVuaXQgMTAKKyAgICAgICAgICAgIG9wZW4gKDEwLGZpbGU9ImZvbyIpCisgICAgICAgICAgCisgICAgICAgICAgICAhIC4uLgorICAgICAgICAgICAgISBQZXJmb3JtIEkvTyBvbiB1bml0IDEwCisgICAgICAgICAgICAhIC4uLgorICAgICAgICAgIAorICAgICAgICAgICAgISBGbHVzaCBhbmQgc3luYworICAgICAgICAgICAgZmx1c2goMTApCisgICAgICAgICAgICByZXQgPSBmc3luYyhmbnVtKDEwKSkKKyAgICAgICAgICAKKyAgICAgICAgICAgICEgSGFuZGxlIHBvc3NpYmxlIGVycm9yCisgICAgICAgICAgICBpZiAocmV0IC89IDApIHN0b3AgIkVycm9yIGNhbGxpbmcgRlNZTkMiCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZOVU0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GTlVNLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1ZjAxNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GTlVNLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Rk5VTSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGTFVTSC5odG1sI0ZMVVNIIiB0aXRsZT0iRkxVU0giPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGUFVULmh0bWwjRlBVVCIgdGl0bGU9IkZQVVQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRk5VTSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGUFVULmh0bWwjRlBVVCI+RlBVVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZMVVNILmh0bWwjRkxVU0giPkZMVVNIPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44Ljg4IDxjb2RlPkZOVU08L2NvZGU+ICZtZGFzaDsgRmlsZSBudW1iZXIgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1GTlVNLTY0NiI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtZmlsZS1udW1iZXItNjQ3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+Rk5VTShVTklUKTwvY29kZT4gcmV0dXJucyB0aGUgUE9TSVggZmlsZSBkZXNjcmlwdG9yIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZQorb3BlbiBGb3J0cmFuIEkvTyB1bml0IDxjb2RlPlVOSVQ8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5GdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBGTlVNKFVOSVQpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VU5JVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2ZudW0KKyAgICAgICAgICAgIGludGVnZXIgOjogaQorICAgICAgICAgICAgb3BlbiAodW5pdD0xMCwgc3RhdHVzID0gInNjcmF0Y2giKQorICAgICAgICAgICAgaSA9IGZudW0oMTApCisgICAgICAgICAgICBwcmludCAqLCBpCisgICAgICAgICAgICBjbG9zZSAoMTApCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9mbnVtCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZQVVQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GUFVULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3MjkzOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GUFVULmh0bWwKQEAgLTAsMCArMSwxMDEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZQVVQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRk5VTS5odG1sI0ZOVU0iIHRpdGxlPSJGTlVNIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRlBVVEMuaHRtbCNGUFVUQyIgdGl0bGU9IkZQVVRDIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZQVVQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRlBVVEMuaHRtbCNGUFVUQyI+RlBVVEM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGTlVNLmh0bWwjRk5VTSI+Rk5VTTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC44OSA8Y29kZT5GUFVUPC9jb2RlPiAmbWRhc2g7IFdyaXRlIGEgc2luZ2xlIGNoYXJhY3RlciBpbiBzdHJlYW0gbW9kZSB0byBzdGRvdXQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1GUFVULTY0OCI+PC9hPjxhIG5hbWU9ImluZGV4LXdyaXRlLWNoYXJhY3Rlcl8wMDJjLXN0cmVhbS1tb2RlLTY0OSI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmVhbS1tb2RlXzAwMmMtd3JpdGUtY2hhcmFjdGVyLTY1MCI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtd3JpdGUtY2hhcmFjdGVyLTY1MSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPldyaXRlIGEgc2luZ2xlIGNoYXJhY3RlciBpbiBzdHJlYW0gbW9kZSB0byBzdGRvdXQgYnkgYnlwYXNzaW5nIG5vcm1hbAorZm9ybWF0dGVkIG91dHB1dC4gU3RyZWFtIEkvTyBzaG91bGQgbm90IGJlIG1peGVkIHdpdGggbm9ybWFsIHJlY29yZC1vcmllbnRlZAorKGZvcm1hdHRlZCBvciB1bmZvcm1hdHRlZCkgSS9PIG9uIHRoZSBzYW1lIHVuaXQ7IHRoZSByZXN1bHRzIGFyZSB1bnByZWRpY3RhYmxlLgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIHByb3ZpZGVkIGluIGJvdGggc3Vicm91dGluZSBhbmQgZnVuY3Rpb24gZm9ybXM7IGhvd2V2ZXIsCitvbmx5IG9uZSBmb3JtIGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBwcm9ncmFtIHVuaXQuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSA8Y29kZT5GR0VUPC9jb2RlPiBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPi4gIEdOVSBGb3J0cmFuIHByb3ZpZGVzIHRoZSBGb3J0cmFuIDIwMDMgU3RyZWFtIGZhY2lsaXR5LiAKK1Byb2dyYW1tZXJzIHNob3VsZCBjb25zaWRlciB0aGUgdXNlIG9mIG5ldyBzdHJlYW0gSU8gZmVhdHVyZSBpbiBuZXcgY29kZQorZm9yIGZ1dHVyZSBwb3J0YWJpbGl0eS4gU2VlIGFsc28gPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgRlBVVChDIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gRlBVVChDKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QzwvdmFyPiAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IGFuZCBvZiBkZWZhdWx0CitraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHN0YXR1cyBmbGFnIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVuZC1vZi1maWxlIGFuZCBhIHN5c3RlbSBzcGVjaWZpYyBwb3NpdGl2ZQorZXJyb3IgY29kZSBvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfZnB1dAorICAgICAgICAgICAgQ0hBUkFDVEVSKGxlbj0xMCkgOjogc3RyID0gImdmb3J0cmFuIgorICAgICAgICAgICAgSU5URUdFUiA6OiBpCisgICAgICAgICAgICBETyBpID0gMSwgbGVuX3RyaW0oc3RyKQorICAgICAgICAgICAgICBDQUxMIGZwdXQoc3RyKGk6aSkpCisgICAgICAgICAgICBFTkQgRE8KKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkZQVVRDLmh0bWwjRlBVVEMiPkZQVVRDPC9hPiwgPGEgaHJlZj0iRkdFVC5odG1sI0ZHRVQiPkZHRVQ8L2E+LCA8YSBocmVmPSJGR0VUQy5odG1sI0ZHRVRDIj5GR0VUQzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GUFVUQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZQVVRDLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1Mzk2NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GUFVUQy5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GUFVUQyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGUFVULmh0bWwjRlBVVCIgdGl0bGU9IkZQVVQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGUkFDVElPTi5odG1sI0ZSQUNUSU9OIiB0aXRsZT0iRlJBQ1RJT04iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRlBVVEMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRlJBQ1RJT04uaHRtbCNGUkFDVElPTiI+RlJBQ1RJT048L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGUFVULmh0bWwjRlBVVCI+RlBVVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC45MCA8Y29kZT5GUFVUQzwvY29kZT4gJm1kYXNoOyBXcml0ZSBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gc3RyZWFtIG1vZGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1GUFVUQy02NTIiPjwvYT48YSBuYW1lPSJpbmRleC13cml0ZS1jaGFyYWN0ZXJfMDAyYy1zdHJlYW0tbW9kZS02NTMiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJlYW0tbW9kZV8wMDJjLXdyaXRlLWNoYXJhY3Rlci02NTQiPjwvYT48YSBuYW1lPSJpbmRleC1maWxlLW9wZXJhdGlvbl8wMDJjLXdyaXRlLWNoYXJhY3Rlci02NTUiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5Xcml0ZSBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gc3RyZWFtIG1vZGUgYnkgYnlwYXNzaW5nIG5vcm1hbCBmb3JtYXR0ZWQKK291dHB1dC4gU3RyZWFtIEkvTyBzaG91bGQgbm90IGJlIG1peGVkIHdpdGggbm9ybWFsIHJlY29yZC1vcmllbnRlZAorKGZvcm1hdHRlZCBvciB1bmZvcm1hdHRlZCkgSS9PIG9uIHRoZSBzYW1lIHVuaXQ7IHRoZSByZXN1bHRzIGFyZSB1bnByZWRpY3RhYmxlLgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIHByb3ZpZGVkIGluIGJvdGggc3Vicm91dGluZSBhbmQgZnVuY3Rpb24gZm9ybXM7IGhvd2V2ZXIsCitvbmx5IG9uZSBmb3JtIGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBwcm9ncmFtIHVuaXQuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoZSA8Y29kZT5GR0VUPC9jb2RlPiBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPi4gIEdOVSBGb3J0cmFuIHByb3ZpZGVzIHRoZSBGb3J0cmFuIDIwMDMgU3RyZWFtIGZhY2lsaXR5LiAKK1Byb2dyYW1tZXJzIHNob3VsZCBjb25zaWRlciB0aGUgdXNlIG9mIG5ldyBzdHJlYW0gSU8gZmVhdHVyZSBpbiBuZXcgY29kZQorZm9yIGZ1dHVyZSBwb3J0YWJpbGl0eS4gU2VlIGFsc28gPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgRlBVVEMoVU5JVCwgQyBbLCBTVEFUVVNdKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlNUQVRVUyA9IEZQVVRDKFVOSVQsIEMpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5VTklUPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QzwvdmFyPiAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IGFuZCBvZiBkZWZhdWx0CitraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHN0YXR1cyBmbGFnIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVuZC1vZi1maWxlIGFuZCBhIHN5c3RlbSBzcGVjaWZpYyBwb3NpdGl2ZQorZXJyb3IgY29kZSBvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfZnB1dGMKKyAgICAgICAgICAgIENIQVJBQ1RFUihsZW49MTApIDo6IHN0ciA9ICJnZm9ydHJhbiIKKyAgICAgICAgICAgIElOVEVHRVIgOjogZmQgPSA0MiwgaQorICAgICAgICAgIAorICAgICAgICAgICAgT1BFTihVTklUID0gZmQsIEZJTEUgPSAib3V0IiwgQUNUSU9OID0gIldSSVRFIiwgU1RBVFVTPSJORVciKQorICAgICAgICAgICAgRE8gaSA9IDEsIGxlbl90cmltKHN0cikKKyAgICAgICAgICAgICAgQ0FMTCBmcHV0YyhmZCwgc3RyKGk6aSkpCisgICAgICAgICAgICBFTkQgRE8KKyAgICAgICAgICAgIENMT1NFKGZkKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iRlBVVC5odG1sI0ZQVVQiPkZQVVQ8L2E+LCA8YSBocmVmPSJGR0VULmh0bWwjRkdFVCI+RkdFVDwvYT4sIDxhIGhyZWY9IkZHRVRDLmh0bWwjRkdFVEMiPkZHRVRDPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZSQUNUSU9OLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRlJBQ1RJT04uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjc1YjkwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZSQUNUSU9OLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RlJBQ1RJT04gLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRlBVVEMuaHRtbCNGUFVUQyIgdGl0bGU9IkZQVVRDIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRlJFRS5odG1sI0ZSRUUiIHRpdGxlPSJGUkVFIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZSQUNUSU9OIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZSRUUuaHRtbCNGUkVFIj5GUkVFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRlBVVEMuaHRtbCNGUFVUQyI+RlBVVEM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguOTEgPGNvZGU+RlJBQ1RJT048L2NvZGU+ICZtZGFzaDsgRnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBtb2RlbCByZXByZXNlbnRhdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUZSQUNUSU9OLTY1NiI+PC9hPjxhIG5hbWU9ImluZGV4LXJlYWwtbnVtYmVyXzAwMmMtZnJhY3Rpb24tNjU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1mcmFjdGlvbi02NTgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5GUkFDVElPTihYKTwvY29kZT4gcmV0dXJucyB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBtb2RlbAorcmVwcmVzZW50YXRpb24gb2YgPGNvZGU+WDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+WSA9IEZSQUNUSU9OKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHNoYWxsIGJlIGEgPGNvZGU+UkVBTDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIHRoZSBhcmd1bWVudC4gCitUaGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBtb2RlbCByZXByZXNlbnRhdGlvbiBvZiA8Y29kZT5YPC9jb2RlPiBpcyByZXR1cm5lZDsKK2l0IGlzIDxjb2RlPlggKiBSQURJWChYKSoqKC1FWFBPTkVOVChYKSk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9mcmFjdGlvbgorICAgICAgICAgICAgcmVhbCA6OiB4CisgICAgICAgICAgICB4ID0gMTc4LjEzODdlLTQKKyAgICAgICAgICAgIHByaW50ICosIGZyYWN0aW9uKHgpLCB4ICogcmFkaXgoeCkqKigtZXhwb25lbnQoeCkpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9mcmFjdGlvbgorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GUkVFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRlJFRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZWUxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRlJFRS5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZSRUUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRlJBQ1RJT04uaHRtbCNGUkFDVElPTiIgdGl0bGU9IkZSQUNUSU9OIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRlNFRUsuaHRtbCNGU0VFSyIgdGl0bGU9IkZTRUVLIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZSRUUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRlNFRUsuaHRtbCNGU0VFSyI+RlNFRUs8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGUkFDVElPTi5odG1sI0ZSQUNUSU9OIj5GUkFDVElPTjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC45MiA8Y29kZT5GUkVFPC9jb2RlPiAmbWRhc2g7IEZyZWVzIG1lbW9yeTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUZSRUUtNjU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtcG9pbnRlcl8wMDJjLWNyYXktNjYwIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+RnJlZXMgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IDxjb2RlPk1BTExPQzwvY29kZT4uIFRoZSA8Y29kZT5GUkVFPC9jb2RlPgoraW50cmluc2ljIGlzIGFuIGV4dGVuc2lvbiBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggQ3JheSBwb2ludGVycywgYW5kIGlzCitwcm92aWRlZCBpbiBHTlUgRm9ydHJhbiB0byBhbGxvdyB1c2VyIHRvIGNvbXBpbGUgbGVnYWN5IGNvZGUuIEZvcgorbmV3IGNvZGUgdXNpbmcgRm9ydHJhbiA5NSBwb2ludGVycywgdGhlIG1lbW9yeSBkZS1hbGxvY2F0aW9uIGludHJpbnNpYyBpcworPGNvZGU+REVBTExPQ0FURTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBGUkVFKFBUUik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5QVFI8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiBJdCByZXByZXNlbnRzIHRoZQorbG9jYXRpb24gb2YgdGhlIG1lbW9yeSB0aGF0IHNob3VsZCBiZSBkZS1hbGxvY2F0ZWQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+Tm9uZQorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+U2VlIDxjb2RlPk1BTExPQzwvY29kZT4gZm9yIGFuIGV4YW1wbGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iTUFMTE9DLmh0bWwjTUFMTE9DIj5NQUxMT0M8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRlNFRUsuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GU0VFSy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNGRkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRlNFRUsuaHRtbApAQCAtMCwwICsxLDEyMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RlNFRUsgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRlJFRS5odG1sI0ZSRUUiIHRpdGxlPSJGUkVFIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRlNUQVQuaHRtbCNGU1RBVCIgdGl0bGU9IkZTVEFUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZTRUVLIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZTVEFULmh0bWwjRlNUQVQiPkZTVEFUPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRlJFRS5odG1sI0ZSRUUiPkZSRUU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguOTMgPGNvZGU+RlNFRUs8L2NvZGU+ICZtZGFzaDsgTG93IGxldmVsIGZpbGUgcG9zaXRpb25pbmcgc3Vicm91dGluZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUZTRUVLLTY2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtc2Vlay02NjIiPjwvYT48YSBuYW1lPSJpbmRleC1maWxlLW9wZXJhdGlvbl8wMDJjLXBvc2l0aW9uLTY2MyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPk1vdmVzIDx2YXI+VU5JVDwvdmFyPiB0byB0aGUgc3BlY2lmaWVkIDx2YXI+T0ZGU0VUPC92YXI+LiBJZiA8dmFyPldIRU5DRTwvdmFyPgoraXMgc2V0IHRvIDAsIHRoZSA8dmFyPk9GRlNFVDwvdmFyPiBpcyB0YWtlbiBhcyBhbiBhYnNvbHV0ZSB2YWx1ZSA8Y29kZT5TRUVLX1NFVDwvY29kZT4sCitpZiBzZXQgdG8gMSwgPHZhcj5PRkZTRVQ8L3Zhcj4gaXMgdGFrZW4gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24KKzxjb2RlPlNFRUtfQ1VSPC9jb2RlPiwgYW5kIGlmIHNldCB0byAyIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgPGNvZGU+U0VFS19FTkQ8L2NvZGU+LiAKK09uIGVycm9yLCA8dmFyPlNUQVRVUzwvdmFyPiBpcyBzZXQgdG8gYSBub256ZXJvIHZhbHVlLiBJZiA8dmFyPlNUQVRVUzwvdmFyPiB0aGUgc2VlaworZmFpbHMgc2lsZW50bHkuCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgcm91dGluZSBpcyBub3QgZnVsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Zzc3PC9zcGFuPjwvc2FtcD4uIAorSW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmc3Nzwvc3Bhbj48L3NhbXA+LCB0aGUgPGNvZGU+RlNFRUs8L2NvZGU+IHRha2VzIGEgc3RhdGVtZW50IGxhYmVsIGluc3RlYWQgb2YgYQorPHZhcj5TVEFUVVM8L3Zhcj4gdmFyaWFibGUuIElmIEZTRUVLIGlzIHVzZWQgaW4gb2xkIGNvZGUsIGNoYW5nZQorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIENBTEwgRlNFRUsoVU5JVCwgT0ZGU0VULCBXSEVOQ0UsICpsYWJlbCkKKzwvcHJlPgorICAgICA8cD50bworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIElOVEVHRVIgOjogc3RhdHVzCisgICAgICAgICAgICBDQUxMIEZTRUVLKFVOSVQsIE9GRlNFVCwgV0hFTkNFLCBzdGF0dXMpCisgICAgICAgICAgICBJRiAoc3RhdHVzIC89IDApIEdPVE8gbGFiZWwKKzwvcHJlPgorICAgICA8cD5QbGVhc2Ugbm90ZSB0aGF0IEdOVSBGb3J0cmFuIHByb3ZpZGVzIHRoZSBGb3J0cmFuIDIwMDMgU3RyZWFtIGZhY2lsaXR5LiAKK1Byb2dyYW1tZXJzIHNob3VsZCBjb25zaWRlciB0aGUgdXNlIG9mIG5ldyBzdHJlYW0gSU8gZmVhdHVyZSBpbiBuZXcgY29kZQorZm9yIGZ1dHVyZSBwb3J0YWJpbGl0eS4gU2VlIGFsc28gPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPkNBTEwgRlNFRUsoVU5JVCwgT0ZGU0VULCBXSEVOQ0VbLCBTVEFUVVNdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlVOSVQ8L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk9GRlNFVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPldIRU5DRTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCitJdHMgdmFsdWUgc2hhbGwgYmUgZWl0aGVyIDAsIDEgb3IgMi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlCis8Y29kZT5JTlRFR0VSKDQpPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9mc2VlaworICAgICAgICAgICAgSU5URUdFUiwgUEFSQU1FVEVSIDo6IFNFRUtfU0VUID0gMCwgU0VFS19DVVIgPSAxLCBTRUVLX0VORCA9IDIKKyAgICAgICAgICAgIElOVEVHRVIgOjogZmQsIG9mZnNldCwgaWVycgorICAgICAgICAgIAorICAgICAgICAgICAgaWVyciAgID0gMAorICAgICAgICAgICAgb2Zmc2V0ID0gNQorICAgICAgICAgICAgZmQgICAgID0gMTAKKyAgICAgICAgICAKKyAgICAgICAgICAgIE9QRU4oVU5JVD1mZCwgRklMRT0iZnNlZWsudGVzdCIpCisgICAgICAgICAgICBDQUxMIEZTRUVLKGZkLCBvZmZzZXQsIFNFRUtfU0VULCBpZXJyKSAgISBtb3ZlIHRvIE9GRlNFVAorICAgICAgICAgICAgcHJpbnQgKiwgRlRFTEwoZmQpLCBpZXJyCisgICAgICAgICAgCisgICAgICAgICAgICBDQUxMIEZTRUVLKGZkLCAwLCBTRUVLX0VORCwgaWVycikgICAgICAgISBtb3ZlIHRvIGVuZAorICAgICAgICAgICAgcHJpbnQgKiwgRlRFTEwoZmQpLCBpZXJyCisgICAgICAgICAgCisgICAgICAgICAgICBDQUxMIEZTRUVLKGZkLCAwLCBTRUVLX1NFVCwgaWVycikgICAgICAgISBtb3ZlIHRvIGJlZ2lubmluZworICAgICAgICAgICAgcHJpbnQgKiwgRlRFTEwoZmQpLCBpZXJyCisgICAgICAgICAgCisgICAgICAgICAgICBDTE9TRShVTklUPWZkKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iRlRFTEwuaHRtbCNGVEVMTCI+RlRFTEw8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRlNUQVQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GU1RBVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjc0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRlNUQVQuaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GU1RBVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGU0VFSy5odG1sI0ZTRUVLIiB0aXRsZT0iRlNFRUsiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGVEVMTC5odG1sI0ZURUxMIiB0aXRsZT0iRlRFTEwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRlNUQVQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRlRFTEwuaHRtbCNGVEVMTCI+RlRFTEw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGU0VFSy5odG1sI0ZTRUVLIj5GU0VFSzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC45NCA8Y29kZT5GU1RBVDwvY29kZT4gJm1kYXNoOyBHZXQgZmlsZSBzdGF0dXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1GU1RBVC02NjQiPjwvYT48YSBuYW1lPSJpbmRleC1maWxlLXN5c3RlbV8wMDJjLWZpbGUtc3RhdHVzLTY2NSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkZTVEFUPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGEgaHJlZj0iU1RBVC5odG1sI1NUQVQiPlNUQVQ8L2E+LCBleGNlcHQgdGhhdCBpbmZvcm1hdGlvbiBhYm91dCBhbgorYWxyZWFkeSBvcGVuZWQgZmlsZSBpcyBvYnRhaW5lZC4KKworICAgICA8cD5UaGUgZWxlbWVudHMgaW4gPGNvZGU+VkFMVUVTPC9jb2RlPiBhcmUgdGhlIHNhbWUgYXMgZGVzY3JpYmVkIGJ5IDxhIGhyZWY9IlNUQVQuaHRtbCNTVEFUIj5TVEFUPC9hPi4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOyBob3dldmVyLAorb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgRlNUQVQoVU5JVCwgVkFMVUVTIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gRlNUQVQoVU5JVCwgVkFMVUVTKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VU5JVDwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5BbiBvcGVuIEkvTyB1bml0IG51bWJlciBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VkFMVUVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSKDQpLCBESU1FTlNJT04oMTMpPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzdGF0dXMgZmxhZyBvZiB0eXBlIDxjb2RlPklOVEVHRVIoNCk8L2NvZGU+LiBSZXR1cm5zIDAKK29uIHN1Y2Nlc3MgYW5kIGEgc3lzdGVtIHNwZWNpZmljIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD5TZWUgPGEgaHJlZj0iU1RBVC5odG1sI1NUQVQiPlNUQVQ8L2E+IGZvciBhbiBleGFtcGxlLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPlRvIHN0YXQgYSBsaW5rOiA8YSBocmVmPSJMU1RBVC5odG1sI0xTVEFUIj5MU1RBVDwvYT4sIHRvIHN0YXQgYSBmaWxlOiA8YSBocmVmPSJTVEFULmh0bWwjU1RBVCI+U1RBVDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GVEVMTC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZURUxMLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzMTI5MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GVEVMTC5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZURUxMIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZTVEFULmh0bWwjRlNUQVQiIHRpdGxlPSJGU1RBVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdBTU1BLmh0bWwjR0FNTUEiIHRpdGxlPSJHQU1NQSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGVEVMTCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHQU1NQS5odG1sI0dBTU1BIj5HQU1NQTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZTVEFULmh0bWwjRlNUQVQiPkZTVEFUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44Ljk1IDxjb2RlPkZURUxMPC9jb2RlPiAmbWRhc2g7IEN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtRlRFTEwtNjY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmlsZS1vcGVyYXRpb25fMDAyYy1wb3NpdGlvbi02NjciPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZXRyaWV2ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIGFuIG9wZW4gZmlsZS4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOyBob3dldmVyLAorb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgRlRFTEwoVU5JVCwgT0ZGU0VUKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPk9GRlNFVCA9IEZURUxMKFVOSVQpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5PRkZTRVQ8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VU5JVDwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5JbiBlaXRoZXIgc3ludGF4LCA8dmFyPk9GRlNFVDwvdmFyPiBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgb2Zmc2V0IG9mIHVuaXQKK251bWJlciA8dmFyPlVOSVQ8L3Zhcj4sIG9yIHRvIC0xIGlmIHRoZSB1bml0IGlzIG5vdCBjdXJyZW50bHkgb3Blbi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfZnRlbGwKKyAgICAgICAgICAgIElOVEVHRVIgOjogaQorICAgICAgICAgICAgT1BFTigxMCwgRklMRT0idGVtcC5kYXQiKQorICAgICAgICAgICAgQ0FMTCBmdGVsbCgxMCxpKQorICAgICAgICAgICAgV1JJVEUoKiwqKSBpCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJGU0VFSy5odG1sI0ZTRUVLIj5GU0VFSzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Gb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRm9ydHJhbi0yMDAzLWFuZC0yMDA4LXN0YXR1cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Yjg4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRm9ydHJhbi0yMDAzLWFuZC0yMDA4LXN0YXR1cy5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZvcnRyYW4gMjAwMyBhbmQgMjAwOCBzdGF0dXMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSdW50aW1lLmh0bWwjUnVudGltZSIgdGl0bGU9IlJ1bnRpbWUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbCNDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MiIHRpdGxlPSJDb21waWxlciBDaGFyYWN0ZXJpc3RpY3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRm9ydHJhbi0yMDAzLWFuZC0yMDA4LXN0YXR1cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbCNDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MiPkNvbXBpbGVyIENoYXJhY3RlcmlzdGljczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIj5SdW50aW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjQgRm9ydHJhbiAyMDAzIGFuZCAyMDA4IFN0YXR1czwvaDI+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLXN0YXR1cyI+Rm9ydHJhbiAyMDAzIHN0YXR1czwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkZvcnRyYW4tMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDgtc3RhdHVzIj5Gb3J0cmFuIDIwMDggc3RhdHVzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iVFMtMjkxMTMtc3RhdHVzLmh0bWwjVFMtMjkxMTMtc3RhdHVzIj5UUyAyOTExMyBzdGF0dXM8L2E+Cis8L3VsPgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGY2ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbApAQCAtMCwwICsxLDE3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Rm9ydHJhbiAyMDAzIHN0YXR1cyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLWFuZC0yMDA4LXN0YXR1cyIgdGl0bGU9IkZvcnRyYW4gMjAwMyBhbmQgMjAwOCBzdGF0dXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGb3J0cmFuLTIwMDgtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDA4LXN0YXR1cyIgdGl0bGU9IkZvcnRyYW4gMjAwOCBzdGF0dXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRm9ydHJhbi0yMDAzLXN0YXR1cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGb3J0cmFuLTIwMDgtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDA4LXN0YXR1cyI+Rm9ydHJhbiAyMDA4IHN0YXR1czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgYW5kIDIwMDggc3RhdHVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xIEZvcnRyYW4gMjAwMyBzdGF0dXM8L2gzPgorCis8cD5HTlUgRm9ydHJhbiBzdXBwb3J0cyBzZXZlcmFsIEZvcnRyYW4gMjAwMyBmZWF0dXJlczsgYW4gaW5jb21wbGV0ZQorbGlzdCBjYW4gYmUgZm91bmQgYmVsb3cuICBTZWUgYWxzbyB0aGUKKzxhIGhyZWY9Imh0dHA6Ly9nY2MuZ251Lm9yZy93aWtpL0ZvcnRyYW4yMDAzIj53aWtpIHBhZ2U8L2E+IGFib3V0IEZvcnRyYW4gMjAwMy4KKworICAgICA8dWw+Cis8bGk+UHJvY2VkdXJlIHBvaW50ZXJzIGluY2x1ZGluZyBwcm9jZWR1cmUtcG9pbnRlciBjb21wb25lbnRzIHdpdGgKKzxjb2RlPlBBU1M8L2NvZGU+IGF0dHJpYnV0ZS4KKworICAgICA8bGk+UHJvY2VkdXJlcyB3aGljaCBhcmUgYm91bmQgdG8gYSBkZXJpdmVkIHR5cGUgKHR5cGUtYm91bmQgcHJvY2VkdXJlcykKK2luY2x1ZGluZyA8Y29kZT5QQVNTPC9jb2RlPiwgPGNvZGU+UFJPQ0VEVVJFPC9jb2RlPiBhbmQgPGNvZGU+R0VORVJJQzwvY29kZT4sIGFuZAorb3BlcmF0b3JzIGJvdW5kIHRvIGEgdHlwZS4KKworICAgICA8bGk+QWJzdHJhY3QgaW50ZXJmYWNlcyBhbmQgdHlwZSBleHRlbnNpb24gd2l0aCB0aGUgcG9zc2liaWxpdHkgdG8KK292ZXJyaWRlIHR5cGUtYm91bmQgcHJvY2VkdXJlcyBvciB0byBoYXZlIGRlZmVycmVkIGJpbmRpbmcuCisKKyAgICAgPGxpPlBvbHltb3JwaGljIGVudGl0aWVzICgmbGRxdW87PGNvZGU+Q0xBU1M8L2NvZGU+JnJkcXVvOykgZm9yIGRlcml2ZWQgdHlwZXMgJm5kYXNoOyBpbmNsdWRpbmcKKzxjb2RlPlNBTUVfVFlQRV9BUzwvY29kZT4sIDxjb2RlPkVYVEVORFNfVFlQRV9PRjwvY29kZT4gYW5kIDxjb2RlPlNFTEVDVCBUWVBFPC9jb2RlPiBmb3IKK3NjYWxhcnMgYW5kIGFycmF5cywgaW5jbHVkaW5nIHVubGltaXRlZCBwb2x5bW9ycGhpc20uCisKKyAgICAgPGxpPkdlbmVyaWMgaW50ZXJmYWNlIG5hbWVzLCB3aGljaCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgZGVyaXZlZCB0eXBlcywKK2FyZSBub3cgc3VwcG9ydGVkLiBUaGlzIGFsbG93cyBvbmUgdG8gd3JpdGUgY29uc3RydWN0b3IgZnVuY3Rpb25zLiAgTm90ZQordGhhdCBGb3J0cmFuIGRvZXMgbm90IHN1cHBvcnQgc3RhdGljIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucy4gIEZvciBzdGF0aWMKK3ZhcmlhYmxlcywgb25seSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIG9yIHN0cnVjdHVyZS1jb25zdHJ1Y3RvcgoraW5pdGlhbGl6YXRpb24gYXJlIGF2YWlsYWJsZS4KKworICAgICA8bGk+VGhlIDxjb2RlPkFTU09DSUFURTwvY29kZT4gY29uc3RydWN0LgorCisgICAgIDxsaT5JbnRlcm9wZXJhYmlsaXR5IHdpdGggQyBpbmNsdWRpbmcgZW51bWVyYXRpb25zLAorCisgICAgIDxsaT5JbiBzdHJ1Y3R1cmUgY29uc3RydWN0b3JzIHRoZSBjb21wb25lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMgbWF5IGJlCitvbWl0dGVkLgorCisgICAgIDxsaT5FeHRlbnNpb25zIHRvIHRoZSA8Y29kZT5BTExPQ0FURTwvY29kZT4gc3RhdGVtZW50LCBhbGxvd2luZyBmb3IgYQordHlwZS1zcGVjaWZpY2F0aW9uIHdpdGggdHlwZSBwYXJhbWV0ZXIgYW5kIGZvciBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbgorZnJvbSBhIDxjb2RlPlNPVVJDRT08L2NvZGU+IGV4cHJlc3Npb247IDxjb2RlPkFMTE9DQVRFPC9jb2RlPiBhbmQgPGNvZGU+REVBTExPQ0FURTwvY29kZT4KK29wdGlvbmFsbHkgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2Ugc3RyaW5nIHZpYSA8Y29kZT5FUlJNU0c9PC9jb2RlPi4KKworICAgICA8bGk+UmVhbGxvY2F0aW9uIG9uIGFzc2lnbm1lbnQ6IElmIGFuIGludHJpbnNpYyBhc3NpZ25tZW50IGlzCit1c2VkLCBhbiBhbGxvY2F0YWJsZSB2YXJpYWJsZSBvbiB0aGUgbGVmdC1oYW5kIHNpZGUgaXMgYXV0b21hdGljYWxseSBhbGxvY2F0ZWQKKyhpZiB1bmFsbG9jYXRlZCkgb3IgcmVhbGxvY2F0ZWQgKGlmIHRoZSBzaGFwZSBpcyBkaWZmZXJlbnQpLiBDdXJyZW50bHksIHNjYWxhcgorZGVmZXJyZWQgY2hhcmFjdGVyIGxlbmd0aCBsZWZ0LWhhbmQgc2lkZXMgYXJlIGNvcnJlY3RseSBoYW5kbGVkIGJ1dCBhcnJheXMKK2FyZSBub3QgeWV0IGZ1bGx5IGltcGxlbWVudGVkLgorCisgICAgIDxsaT5UcmFuc2ZlcnJpbmcgb2YgYWxsb2NhdGlvbnMgdmlhIDxjb2RlPk1PVkVfQUxMT0M8L2NvZGU+LgorCisgICAgIDxsaT5UaGUgPGNvZGU+UFJJVkFURTwvY29kZT4gYW5kIDxjb2RlPlBVQkxJQzwvY29kZT4gYXR0cmlidXRlcyBtYXkgYmUgZ2l2ZW4gaW5kaXZpZHVhbGx5Cit0byBkZXJpdmVkLXR5cGUgY29tcG9uZW50cy4KKworICAgICA8bGk+SW4gcG9pbnRlciBhc3NpZ25tZW50cywgdGhlIGxvd2VyIGJvdW5kIG1heSBiZSBzcGVjaWZpZWQgYW5kCit0aGUgcmVtYXBwaW5nIG9mIGVsZW1lbnRzIGlzIHN1cHBvcnRlZC4KKworICAgICA8bGk+Rm9yIHBvaW50ZXJzIGFuIDxjb2RlPklOVEVOVDwvY29kZT4gbWF5IGJlIHNwZWNpZmllZCB3aGljaCBhZmZlY3QgdGhlCithc3NvY2lhdGlvbiBzdGF0dXMgbm90IHRoZSB2YWx1ZSBvZiB0aGUgcG9pbnRlciB0YXJnZXQuCisKKyAgICAgPGxpPkludHJpbnNpY3MgPGNvZGU+Y29tbWFuZF9hcmd1bWVudF9jb3VudDwvY29kZT4sIDxjb2RlPmdldF9jb21tYW5kPC9jb2RlPiwKKzxjb2RlPmdldF9jb21tYW5kX2FyZ3VtZW50PC9jb2RlPiwgYW5kIDxjb2RlPmdldF9lbnZpcm9ubWVudF92YXJpYWJsZTwvY29kZT4uCisKKyAgICAgPGxpPlN1cHBvcnQgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyAoSVNPIDEwNjQ2KSBhbmQgVVRGLTgsIGluY2x1ZGluZwordGhlIDxjb2RlPlNFTEVDVEVEX0NIQVJfS0lORDwvY29kZT4gYW5kIDxjb2RlPk5FV19MSU5FPC9jb2RlPiBpbnRyaW5zaWMgZnVuY3Rpb25zLgorCisgICAgIDxsaT5TdXBwb3J0IGZvciBiaW5hcnksIG9jdGFsIGFuZCBoZXhhZGVjaW1hbCAoQk9aKSBjb25zdGFudHMgaW4gdGhlCitpbnRyaW5zaWMgZnVuY3Rpb25zIDxjb2RlPklOVDwvY29kZT4sIDxjb2RlPlJFQUw8L2NvZGU+LCA8Y29kZT5DTVBMWDwvY29kZT4gYW5kIDxjb2RlPkRCTEU8L2NvZGU+LgorCisgICAgIDxsaT5TdXBwb3J0IGZvciBuYW1lbGlzdCB2YXJpYWJsZXMgd2l0aCBhbGxvY2F0YWJsZSBhbmQgcG9pbnRlcgorYXR0cmlidXRlIGFuZCBub25jb25zdGFudCBsZW5ndGggdHlwZSBwYXJhbWV0ZXIuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtY29uc3RydWN0b3JzLTI5NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwNWJfMDAyZV8wMDJlXzAwMmVfMDA1ZF8wMDdkLTI5OCI+PC9hPkFycmF5IGNvbnN0cnVjdG9ycyB1c2luZyBzcXVhcmUgYnJhY2tldHMuICBUaGF0IGlzLCA8Y29kZT5bLi4uXTwvY29kZT4gcmF0aGVyCit0aGFuIDxjb2RlPigvLi4uLyk8L2NvZGU+LiAgVHlwZS1zcGVjaWZpY2F0aW9uIGZvciBhcnJheSBjb25zdHJ1Y3RvcnMgbGlrZQorPGNvZGU+KC8gc29tZS10eXBlIDo6IC4uLiAvKTwvY29kZT4uCisKKyAgICAgPGxpPkV4dGVuc2lvbnMgdG8gdGhlIHNwZWNpZmljYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGV4cHJlc3Npb25zLAoraW5jbHVkaW5nIHRoZSBzdXBwb3J0IGZvciBpbnRyaW5zaWNzIHdpdGggcmVhbCBhbmQgY29tcGxleCBhcmd1bWVudHMuCisKKyAgICAgPGxpPlN1cHBvcnQgZm9yIHRoZSBhc3luY2hyb25vdXMgaW5wdXQvb3V0cHV0IHN5bnRheDsgaG93ZXZlciwgdGhlCitkYXRhIHRyYW5zZmVyIGlzIGN1cnJlbnRseSBhbHdheXMgc3luY2hyb25vdXNseSBwZXJmb3JtZWQuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiRkxVU0hfMDA3ZC1zdGF0ZW1lbnQtMjk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50XzAwMmMtXzAwNDBjb2RlXzAwN2JGTFVTSF8wMDdkLTMwMCI+PC9hPjxjb2RlPkZMVVNIPC9jb2RlPiBzdGF0ZW1lbnQuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiSU9NU0dfMDAzZF8wMDdkLXNwZWNpZmllci0zMDEiPjwvYT48Y29kZT5JT01TRz08L2NvZGU+IHNwZWNpZmllciBmb3IgSS9PIHN0YXRlbWVudHMuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiRU5VTV8wMDdkLXN0YXRlbWVudC0zMDIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkVOVU1FUkFUT1JfMDA3ZC1zdGF0ZW1lbnQtMzAzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50XzAwMmMtXzAwNDBjb2RlXzAwN2JFTlVNXzAwN2QtMzA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50XzAwMmMtXzAwNDBjb2RlXzAwN2JFTlVNRVJBVE9SXzAwN2QtMzA1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmc2hvcnRfMDAyZGVudW1zXzAwN2QtMzA2Ij48L2E+U3VwcG9ydCBmb3IgdGhlIGRlY2xhcmF0aW9uIG9mIGVudW1lcmF0aW9uIGNvbnN0YW50cyB2aWEgdGhlCis8Y29kZT5FTlVNPC9jb2RlPiBhbmQgPGNvZGU+RU5VTUVSQVRPUjwvY29kZT4gc3RhdGVtZW50cy4gIEludGVyb3BlcmFiaWxpdHkgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+IGlzIGd1YXJhbnRlZWQgYWxzbyBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+LWZzaG9ydC1lbnVtczwvc3Bhbj48L3NhbXA+IGNvbW1hbmQgbGluZSBvcHRpb24gaXMgZ2l2ZW4uCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LVRSLTE1NTgxLTMwNyI+PC9hPlRSIDE1NTgxOgorICAgICAgICAgIDx1bD4KKzxsaT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkFMTE9DQVRBQkxFXzAwN2QtZHVtbXktYXJndW1lbnRzLTMwOCI+PC9hPjxjb2RlPkFMTE9DQVRBQkxFPC9jb2RlPiBkdW1teSBhcmd1bWVudHMuIAorPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiQUxMT0NBVEFCTEVfMDA3ZC1mdW5jdGlvbi1yZXN1bHRzLTMwOSI+PC9hPjxjb2RlPkFMTE9DQVRBQkxFPC9jb2RlPiBmdW5jdGlvbiByZXN1bHRzCis8bGk+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBTExPQ0FUQUJMRV8wMDdkLWNvbXBvbmVudHMtb2YtZGVyaXZlZC10eXBlcy0zMTAiPjwvYT48Y29kZT5BTExPQ0FUQUJMRTwvY29kZT4gY29tcG9uZW50cyBvZiBkZXJpdmVkIHR5cGVzCis8L3VsPgorCisgICAgIDxsaT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlNUUkVBTV8wMDdkLUlfMDAyZk8tMzExIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBQ0NFU1NfMDAzZF8wMDI3U1RSRUFNXzAwMjdfMDA3ZC1JXzAwMmZPLTMxMiI+PC9hPlRoZSA8Y29kZT5PUEVOPC9jb2RlPiBzdGF0ZW1lbnQgc3VwcG9ydHMgdGhlIDxjb2RlPkFDQ0VTUz0nU1RSRUFNJzwvY29kZT4gc3BlY2lmaWVyLAorYWxsb3dpbmcgSS9PIHdpdGhvdXQgYW55IHJlY29yZCBzdHJ1Y3R1cmUuCisKKyAgICAgPGxpPk5hbWVsaXN0IGlucHV0L291dHB1dCBmb3IgaW50ZXJuYWwgZmlsZXMuCisKKyAgICAgPGxpPkZ1cnRoZXIgSS9PIGV4dGVuc2lvbnM6IFJvdW5kaW5nIGR1cmluZyBmb3JtYXR0ZWQgb3V0cHV0LCB1c2luZyBvZgorYSBkZWNpbWFsIGNvbW1hIGluc3RlYWQgb2YgYSBkZWNpbWFsIHBvaW50LCBzZXR0aW5nIHdoZXRoZXIgYSBwbHVzIHNpZ24KK3Nob3VsZCBhcHBlYXIgZm9yIHBvc2l0aXZlIG51bWJlcnMuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiUFJPVEVDVEVEXzAwN2Qtc3RhdGVtZW50LTMxMyI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiUFJPVEVDVEVEXzAwN2QtMzE0Ij48L2E+VGhlIDxjb2RlPlBST1RFQ1RFRDwvY29kZT4gc3RhdGVtZW50IGFuZCBhdHRyaWJ1dGUuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiVkFMVUVfMDA3ZC1zdGF0ZW1lbnQtMzE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50XzAwMmMtXzAwNDBjb2RlXzAwN2JWQUxVRV8wMDdkLTMxNiI+PC9hPlRoZSA8Y29kZT5WQUxVRTwvY29kZT4gc3RhdGVtZW50IGFuZCBhdHRyaWJ1dGUuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiVk9MQVRJTEVfMDA3ZC1zdGF0ZW1lbnQtMzE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RhdGVtZW50XzAwMmMtXzAwNDBjb2RlXzAwN2JWT0xBVElMRV8wMDdkLTMxOCI+PC9hPlRoZSA8Y29kZT5WT0xBVElMRTwvY29kZT4gc3RhdGVtZW50IGFuZCBhdHRyaWJ1dGUuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiSU1QT1JUXzAwN2Qtc3RhdGVtZW50LTMxOSI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiSU1QT1JUXzAwN2QtMzIwIj48L2E+VGhlIDxjb2RlPklNUE9SVDwvY29kZT4gc3RhdGVtZW50LCBhbGxvd2luZyB0byBpbXBvcnQKK2hvc3QtYXNzb2NpYXRlZCBkZXJpdmVkIHR5cGVzLgorCisgICAgIDxsaT5UaGUgaW50cmluc2ljIG1vZHVsZXMgPGNvZGU+SVNPX0ZPUlRSQU5fRU5WSVJPTk1FTlQ8L2NvZGU+IGlzIHN1cHBvcnRlZCwKK3doaWNoIGNvbnRhaW5zIHBhcmFtZXRlcnMgb2YgdGhlIEkvTyB1bml0cywgc3RvcmFnZSBzaXplcy4gQWRkaXRpb25hbGx5LAorcHJvY2VkdXJlcyBmb3IgQyBpbnRlcm9wZXJhYmlsaXR5IGFyZSBhdmFpbGFibGUgaW4gdGhlIDxjb2RlPklTT19DX0JJTkRJTkc8L2NvZGU+Cittb2R1bGUuCisKKyAgICAgPGxpPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiVVNFXzAwMmMtSU5UUklOU0lDXzAwN2Qtc3RhdGVtZW50LTMyMSI+PC9hPjxhIG5hbWU9ImluZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiVVNFXzAwMmMtSU5UUklOU0lDXzAwN2QtMzIyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOVl8wMDdkLXN0YXRlbWVudC0zMjMiPjwvYT48YSBuYW1lPSJpbmRleC1zdGF0ZW1lbnRfMDAyYy1fMDA0MGNvZGVfMDA3YklTT18wMDVmRk9SVFJBTl8wMDVmRU5WXzAwN2QtMzI0Ij48L2E+PGNvZGU+VVNFPC9jb2RlPiBzdGF0ZW1lbnQgd2l0aCA8Y29kZT5JTlRSSU5TSUM8L2NvZGU+IGFuZCA8Y29kZT5OT05fSU5UUklOU0lDPC9jb2RlPgorYXR0cmlidXRlOyBzdXBwb3J0ZWQgaW50cmluc2ljIG1vZHVsZXM6IDxjb2RlPklTT19GT1JUUkFOX0VOVjwvY29kZT4sCis8Y29kZT5JU09fQ19CSU5ESU5HPC9jb2RlPiwgPGNvZGU+T01QX0xJQjwvY29kZT4gYW5kIDxjb2RlPk9NUF9MSUJfS0lORFM8L2NvZGU+LgorCisgICAgIDxsaT5SZW5hbWluZyBvZiBvcGVyYXRvcnMgaW4gdGhlIDxjb2RlPlVTRTwvY29kZT4gc3RhdGVtZW50LgorCisgICA8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRm9ydHJhbi0yMDA4LXN0YXR1cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZvcnRyYW4tMjAwOC1zdGF0dXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzliYjljCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZvcnRyYW4tMjAwOC1zdGF0dXMuaHRtbApAQCAtMCwwICsxLDE2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Rm9ydHJhbiAyMDA4IHN0YXR1cyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLWFuZC0yMDA4LXN0YXR1cyIgdGl0bGU9IkZvcnRyYW4gMjAwMyBhbmQgMjAwOCBzdGF0dXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLXN0YXR1cyIgdGl0bGU9IkZvcnRyYW4gMjAwMyBzdGF0dXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUUy0yOTExMy1zdGF0dXMuaHRtbCNUUy0yOTExMy1zdGF0dXMiIHRpdGxlPSJUUyAyOTExMyBzdGF0dXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRm9ydHJhbi0yMDA4LXN0YXR1cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUUy0yOTExMy1zdGF0dXMuaHRtbCNUUy0yOTExMy1zdGF0dXMiPlRTIDI5MTEzIHN0YXR1czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRm9ydHJhbi0yMDAzLWFuZC0yMDA4LXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMiPkZvcnRyYW4gMjAwMyBhbmQgMjAwOCBzdGF0dXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjIgRm9ydHJhbiAyMDA4IHN0YXR1czwvaDM+CisKKzxwPlRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgRm9ydHJhbiBzdGFuZGFyZCBpcyBJU08vSUVDIDE1MzktMToyMDEwLCBpbmZvcm1hbGx5Citrbm93biBhcyBGb3J0cmFuIDIwMDguICBUaGUgb2ZmaWNpYWwgdmVyc2lvbiBpcyBhdmFpbGFibGUgZnJvbSBJbnRlcm5hdGlvbmFsCitPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAoSVNPKSBvciBpdHMgbmF0aW9uYWwgbWVtYmVyIG9yZ2FuaXphdGlvbnMuIAorVGhlIHRoZSBmaW5hbCBkcmFmdCAoRkRJUykgY2FuIGJlIGRvd25sb2FkZWQgZnJlZSBvZiBjaGFyZ2UgZnJvbQorPGEgaHJlZj0iaHR0cDovL3d3dy5uYWcuY28udWsvc2MyMndnNS9saW5rcy5odG1sIj5odHRwOi8vd3d3Lm5hZy5jby51ay9zYzIyd2c1L2xpbmtzLmh0bWw8L2E+LiAgRm9ydHJhbiBpcyBkZXZlbG9wZWQgYnkgdGhlCitXb3JraW5nIEdyb3VwIDUgb2YgU3ViLUNvbW1pdHRlZSAyMiBvZiB0aGUgSm9pbnQgVGVjaG5pY2FsIENvbW1pdHRlZSAxIG9mIHRoZQorSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiBhbmQgdGhlIEludGVybmF0aW9uYWwKK0VsZWN0cm90ZWNobmljYWwgQ29tbWlzc2lvbiAoSUVDKS4gIFRoaXMgZ3JvdXAgaXMga25vd24gYXMKKzxhIGhyZWY9Imh0dHA6Ly93d3cubmFnLmNvLnVrL3NjMjJ3ZzUvIj5XRzU8L2E+LgorCisgICA8cD5UaGUgR05VIEZvcnRyYW4gY29tcGlsZXIgc3VwcG9ydHMgc2V2ZXJhbCBvZiB0aGUgbmV3IGZlYXR1cmVzIG9mIEZvcnRyYW4gMjAwODsKK3RoZSA8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvd2lraS9Gb3J0cmFuMjAwOFN0YXR1cyI+d2lraTwvYT4gaGFzIHNvbWUgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBjdXJyZW50IEZvcnRyYW4gMjAwOCBpbXBsZW1lbnRhdGlvbiBzdGF0dXMuICBJbiBwYXJ0aWN1bGFyLCB0aGUKK2ZvbGxvd2luZyBpcyBpbXBsZW1lbnRlZC4KKworICAgICA8dWw+Cis8bGk+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9ZjIwMDg8L3NwYW4+PC9zYW1wPiBvcHRpb24gYW5kIHN1cHBvcnQgZm9yIHRoZSBmaWxlIGV4dGVuc2lvbnMKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZjA4PC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRjA4PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGxpPlRoZSA8Y29kZT5PUEVOPC9jb2RlPiBzdGF0ZW1lbnQgbm93IHN1cHBvcnRzIHRoZSA8Y29kZT5ORVdVTklUPTwvY29kZT4gb3B0aW9uLAord2hpY2ggcmV0dXJucyBhIHVuaXF1ZSBmaWxlIHVuaXQsIHRodXMgcHJldmVudGluZyBpbmFkdmVydGVudCB1c2Ugb2YgdGhlCitzYW1lIHVuaXQgaW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBwcm9ncmFtLgorCisgICAgIDxsaT5UaGUgPGNvZGU+ZzA8L2NvZGU+IGZvcm1hdCBkZXNjcmlwdG9yIGFuZCB1bmxpbWl0ZWQgZm9ybWF0IGl0ZW1zLgorCisgICAgIDxsaT5UaGUgbWF0aGVtYXRpY2FsIGludHJpbnNpY3MgPGNvZGU+QVNJTkg8L2NvZGU+LCA8Y29kZT5BQ09TSDwvY29kZT4sIDxjb2RlPkFUQU5IPC9jb2RlPiwKKzxjb2RlPkVSRjwvY29kZT4sIDxjb2RlPkVSRkM8L2NvZGU+LCA8Y29kZT5HQU1NQTwvY29kZT4sIDxjb2RlPkxPR19HQU1NQTwvY29kZT4sIDxjb2RlPkJFU1NFTF9KMDwvY29kZT4sCis8Y29kZT5CRVNTRUxfSjE8L2NvZGU+LCA8Y29kZT5CRVNTRUxfSk48L2NvZGU+LCA8Y29kZT5CRVNTRUxfWTA8L2NvZGU+LCA8Y29kZT5CRVNTRUxfWTE8L2NvZGU+LAorPGNvZGU+QkVTU0VMX1lOPC9jb2RlPiwgPGNvZGU+SFlQT1Q8L2NvZGU+LCA8Y29kZT5OT1JNMjwvY29kZT4sIGFuZCA8Y29kZT5FUkZDX1NDQUxFRDwvY29kZT4uCisKKyAgICAgPGxpPlVzaW5nIGNvbXBsZXggYXJndW1lbnRzIHdpdGggPGNvZGU+VEFOPC9jb2RlPiwgPGNvZGU+U0lOSDwvY29kZT4sIDxjb2RlPkNPU0g8L2NvZGU+LAorPGNvZGU+VEFOSDwvY29kZT4sIDxjb2RlPkFTSU48L2NvZGU+LCA8Y29kZT5BQ09TPC9jb2RlPiwgYW5kIDxjb2RlPkFUQU48L2NvZGU+IGlzIG5vdyBwb3NzaWJsZTsKKzxjb2RlPkFUQU48L2NvZGU+KDx2YXI+WTwvdmFyPiw8dmFyPlg8L3Zhcj4pIGlzIG5vdyBhbiBhbGlhcyBmb3IgPGNvZGU+QVRBTjI8L2NvZGU+KDx2YXI+WTwvdmFyPiw8dmFyPlg8L3Zhcj4pLgorCisgICAgIDxsaT5TdXBwb3J0IG9mIHRoZSA8Y29kZT5QQVJJVFk8L2NvZGU+IGludHJpbnNpYyBmdW5jdGlvbnMuCisKKyAgICAgPGxpPlRoZSBmb2xsb3dpbmcgYml0IGludHJpbnNpY3M6IDxjb2RlPkxFQURaPC9jb2RlPiBhbmQgPGNvZGU+VFJBSUxaPC9jb2RlPiBmb3IKK2NvdW50aW5nIHRoZSBudW1iZXIgb2YgbGVhZGluZyBhbmQgdHJhaWxpbmcgemVybyBiaXRzLCA8Y29kZT5QT1BDTlQ8L2NvZGU+IGFuZAorPGNvZGU+UE9QUEFSPC9jb2RlPiBmb3IgY291bnRpbmcgdGhlIG51bWJlciBvZiBvbmUgYml0cyBhbmQgcmV0dXJuaW5nIHRoZSBwYXJpdHk7Cis8Y29kZT5CR0U8L2NvZGU+LCA8Y29kZT5CR1Q8L2NvZGU+LCA8Y29kZT5CTEU8L2NvZGU+LCBhbmQgPGNvZGU+QkxUPC9jb2RlPiBmb3IgYml0d2lzZSBjb21wYXJpc29uczsKKzxjb2RlPkRTSElGVEw8L2NvZGU+IGFuZCA8Y29kZT5EU0hJRlRSPC9jb2RlPiBmb3IgY29tYmluZWQgbGVmdCBhbmQgcmlnaHQgc2hpZnRzLAorPGNvZGU+TUFTS0w8L2NvZGU+IGFuZCA8Y29kZT5NQVNLUjwvY29kZT4gZm9yIHNpbXBsZSBsZWZ0IGFuZCByaWdodCBqdXN0aWZpZWQgbWFza3MsCis8Y29kZT5NRVJHRV9CSVRTPC9jb2RlPiBmb3IgYSBiaXR3aXNlIG1lcmdlIHVzaW5nIGEgbWFzaywgPGNvZGU+U0hJRlRBPC9jb2RlPiwKKzxjb2RlPlNISUZUTDwvY29kZT4gYW5kIDxjb2RlPlNISUZUUjwvY29kZT4gZm9yIHNoaWZ0IG9wZXJhdGlvbnMsIGFuZCB0aGUKK3RyYW5zZm9ybWF0aW9uYWwgYml0IGludHJpbnNpY3MgPGNvZGU+SUFMTDwvY29kZT4sIDxjb2RlPklBTlk8L2NvZGU+IGFuZCA8Y29kZT5JUEFSSVRZPC9jb2RlPi4KKworICAgICA8bGk+U3VwcG9ydCBvZiB0aGUgPGNvZGU+RVhFQ1VURV9DT01NQU5EX0xJTkU8L2NvZGU+IGludHJpbnNpYyBzdWJyb3V0aW5lLgorCisgICAgIDxsaT5TdXBwb3J0IGZvciB0aGUgPGNvZGU+U1RPUkFHRV9TSVpFPC9jb2RlPiBpbnRyaW5zaWMgaW5xdWlyeSBmdW5jdGlvbi4KKworICAgICA8bGk+VGhlIDxjb2RlPklOVHs4LDE2LDMyfTwvY29kZT4gYW5kIDxjb2RlPlJFQUx7MzIsNjQsMTI4fTwvY29kZT4ga2luZCB0eXBlCitwYXJhbWV0ZXJzIGFuZCB0aGUgYXJyYXktdmFsdWVkIG5hbWVkIGNvbnN0YW50cyA8Y29kZT5JTlRFR0VSX0tJTkRTPC9jb2RlPiwKKzxjb2RlPkxPR0lDQUxfS0lORFM8L2NvZGU+LCA8Y29kZT5SRUFMX0tJTkRTPC9jb2RlPiBhbmQgPGNvZGU+Q0hBUkFDVEVSX0tJTkRTPC9jb2RlPiBvZgordGhlIGludHJpbnNpYyBtb2R1bGUgPGNvZGU+SVNPX0ZPUlRSQU5fRU5WPC9jb2RlPi4KKworICAgICA8bGk+VGhlIG1vZHVsZSBwcm9jZWR1cmVzIDxjb2RlPkNfU0laRU9GPC9jb2RlPiBvZiB0aGUgaW50cmluc2ljIG1vZHVsZQorPGNvZGU+SVNPX0NfQklORElOR1M8L2NvZGU+IGFuZCA8Y29kZT5DT01QSUxFUl9WRVJTSU9OPC9jb2RlPiBhbmQgPGNvZGU+Q09NUElMRVJfT1BUSU9OUzwvY29kZT4KK29mIDxjb2RlPklTT19GT1JUUkFOX0VOVjwvY29kZT4uCisKKyAgICAgPGxpPkNvYXJyYXkgc3VwcG9ydCBmb3Igc2VyaWFsIHByb2dyYW1zIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZjb2FycmF5PXNpbmdsZTwvc3Bhbj48L3NhbXA+IGZsYWcKK2FuZCBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgbXVsdGlwbGUgaW1hZ2VzIHdpdGggdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mY29hcnJheT1saWI8L3NwYW4+PC9zYW1wPgorZmxhZy4KKworICAgICA8bGk+VGhlIDxjb2RlPkRPIENPTkNVUlJFTlQ8L2NvZGU+IGNvbnN0cnVjdCBpcyBzdXBwb3J0ZWQuCisKKyAgICAgPGxpPlRoZSA8Y29kZT5CTE9DSzwvY29kZT4gY29uc3RydWN0IGlzIHN1cHBvcnRlZC4KKworICAgICA8bGk+VGhlIDxjb2RlPlNUT1A8L2NvZGU+IGFuZCB0aGUgbmV3IDxjb2RlPkVSUk9SIFNUT1A8L2NvZGU+IHN0YXRlbWVudHMgbm93CitzdXBwb3J0IGFsbCBjb25zdGFudCBleHByZXNzaW9ucy4KKworICAgICA8bGk+U3VwcG9ydCBmb3IgdGhlIDxjb2RlPkNPTlRJR1VPVVM8L2NvZGU+IGF0dHJpYnV0ZS4KKworICAgICA8bGk+U3VwcG9ydCBmb3IgPGNvZGU+QUxMT0NBVEU8L2NvZGU+IHdpdGggPGNvZGU+TU9MRDwvY29kZT4uCisKKyAgICAgPGxpPlN1cHBvcnQgZm9yIHRoZSA8Y29kZT5JTVBVUkU8L2NvZGU+IGF0dHJpYnV0ZSBmb3IgcHJvY2VkdXJlcywgd2hpY2gKK2FsbG93cyBmb3IgPGNvZGU+RUxFTUVOVEFMPC9jb2RlPiBwcm9jZWR1cmVzIHdpdGhvdXQgdGhlIHJlc3RyaWN0aW9ucyBvZgorPGNvZGU+UFVSRTwvY29kZT4uCisKKyAgICAgPGxpPk51bGwgcG9pbnRlcnMgKGluY2x1ZGluZyA8Y29kZT5OVUxMKCk8L2NvZGU+KSBhbmQgbm90LWFsbG9jYXRlZCB2YXJpYWJsZXMKK2NhbiBiZSB1c2VkIGFzIGFjdHVhbCBhcmd1bWVudCB0byBvcHRpb25hbCBub24tcG9pbnRlciwgbm9uLWFsbG9jYXRhYmxlCitkdW1teSBhcmd1bWVudHMsIGRlbm90aW5nIGFuIGFic2VudCBhcmd1bWVudC4KKworICAgICA8bGk+Tm9uLXBvaW50ZXIgdmFyaWFibGVzIHdpdGggPGNvZGU+VEFSR0VUPC9jb2RlPiBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgYXMKK2FjdHVhbCBhcmd1bWVudCB0byA8Y29kZT5QT0lOVEVSPC9jb2RlPiBkdW1taWVzIHdpdGggPGNvZGU+SU5URU5UKElOKTwvY29kZT4uCisKKyAgICAgPGxpPlBvaW50ZXJzIGluY2x1ZGluZyBwcm9jZWR1cmUgcG9pbnRlcnMgYW5kIHRob3NlIGluIGEgZGVyaXZlZAordHlwZSAocG9pbnRlciBjb21wb25lbnRzKSBjYW4gbm93IGJlIGluaXRpYWxpemVkIGJ5IGEgdGFyZ2V0IGluc3RlYWQKK29mIG9ubHkgYnkgPGNvZGU+TlVMTDwvY29kZT4uCisKKyAgICAgPGxpPlRoZSA8Y29kZT5FWElUPC9jb2RlPiBzdGF0ZW1lbnQgKHdpdGggY29uc3RydWN0LW5hbWUpIGNhbiBiZSBub3cgYmUKK3VzZWQgdG8gbGVhdmUgbm90IG9ubHkgdGhlIDxjb2RlPkRPPC9jb2RlPiBidXQgYWxzbyB0aGUgPGNvZGU+QVNTT0NJQVRFPC9jb2RlPiwKKzxjb2RlPkJMT0NLPC9jb2RlPiwgPGNvZGU+SUY8L2NvZGU+LCA8Y29kZT5TRUxFQ1QgQ0FTRTwvY29kZT4gYW5kIDxjb2RlPlNFTEVDVCBUWVBFPC9jb2RlPgorY29uc3RydWN0cy4KKworICAgICA8bGk+SW50ZXJuYWwgcHJvY2VkdXJlcyBjYW4gbm93IGJlIHVzZWQgYXMgYWN0dWFsIGFyZ3VtZW50LgorCisgICAgIDxsaT5NaW5vciBmZWF0dXJlczogb2Jzb2xlc2NlIGRpYWdub3N0aWNzIGZvciA8Y29kZT5FTlRSWTwvY29kZT4gd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1mMjAwODwvc3Bhbj48L3NhbXA+OyBhIGxpbmUgbWF5IHN0YXJ0IHdpdGggYSBzZW1pY29sb247IGZvciBpbnRlcm5hbAorYW5kIG1vZHVsZSBwcm9jZWR1cmVzIDxjb2RlPkVORDwvY29kZT4gY2FuIGJlIHVzZWQgaW5zdGVhZCBvZgorPGNvZGU+RU5EIFNVQlJPVVRJTkU8L2NvZGU+IGFuZCA8Y29kZT5FTkQgRlVOQ1RJT048L2NvZGU+OyA8Y29kZT5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2NvZGU+Citub3cgYWxzbyB0YWtlcyBhIDxjb2RlPlJBRElYPC9jb2RlPiBhcmd1bWVudDsgaW50cmluc2ljIHR5cGVzIGFyZSBzdXBwb3J0ZWQKK2ZvciA8Y29kZT5UWVBFPC9jb2RlPig8dmFyPmludHJpbnNpYy10eXBlLXNwZWM8L3Zhcj4pOyBtdWx0aXBsZSB0eXBlLWJvdW5kIHByb2NlZHVyZXMKK2NhbiBiZSBkZWNsYXJlZCBpbiBhIHNpbmdsZSA8Y29kZT5QUk9DRURVUkU8L2NvZGU+IHN0YXRlbWVudDsgaW1wbGllZC1zaGFwZQorYXJyYXlzIGFyZSBzdXBwb3J0ZWQgZm9yIG5hbWVkIGNvbnN0YW50cyAoPGNvZGU+UEFSQU1FVEVSPC9jb2RlPikuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjViYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSwyMDYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik9wdGlvbi1TdW1tYXJ5Lmh0bWwjT3B0aW9uLVN1bW1hcnkiIHRpdGxlPSJPcHRpb24gU3VtbWFyeSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyIgdGl0bGU9IlByZXByb2Nlc3NpbmcgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9wdGlvbi1TdW1tYXJ5Lmh0bWwjT3B0aW9uLVN1bW1hcnkiPk9wdGlvbiBTdW1tYXJ5PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiI+SW52b2tpbmcgR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjIgT3B0aW9ucyBjb250cm9sbGluZyBGb3J0cmFuIGRpYWxlY3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1kaWFsZWN0LW9wdGlvbnMtMTkiPjwvYT48YSBuYW1lPSJpbmRleC1sYW5ndWFnZV8wMDJjLWRpYWxlY3Qtb3B0aW9ucy0yMCI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1kaWFsZWN0LTIxIj48L2E+CitUaGUgZm9sbG93aW5nIG9wdGlvbnMgY29udHJvbCB0aGUgZGV0YWlscyBvZiB0aGUgRm9ydHJhbiBkaWFsZWN0CithY2NlcHRlZCBieSB0aGUgY29tcGlsZXI6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1mZnJlZS1mb3JtPC9jb2RlPjxkdD48Y29kZT4tZmZpeGVkLWZvcm08L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmZyZWVfMDAyZGZvcm1fMDA3ZC0yMiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZm5vXzAwMmRmaXhlZF8wMDJkZm9ybV8wMDdkLTIzIj48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLUZvcnRyYW4tZGlhbGVjdC0yNCI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtZm9ybWF0XzAwMmMtZnJlZS0yNSI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtZm9ybWF0XzAwMmMtZml4ZWQtMjYiPjwvYT5TcGVjaWZ5IHRoZSBsYXlvdXQgdXNlZCBieSB0aGUgc291cmNlIGZpbGUuICBUaGUgZnJlZSBmb3JtIGxheW91dAord2FzIGludHJvZHVjZWQgaW4gRm9ydHJhbiA5MC4gIEZpeGVkIGZvcm0gd2FzIHRyYWRpdGlvbmFsbHkgdXNlZCBpbgorb2xkZXIgRm9ydHJhbiBwcm9ncmFtcy4gIFdoZW4gbmVpdGhlciBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUgc291cmNlCitmb3JtIGlzIGRldGVybWluZWQgYnkgdGhlIGZpbGUgZXh0ZW5zaW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZhbGwtaW50cmluc2ljczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmYWxsXzAwMmRpbnRyaW5zaWNzXzAwN2QtMjciPjwvYT5UaGlzIG9wdGlvbiBjYXVzZXMgYWxsIGludHJpbnNpYyBwcm9jZWR1cmVzIChpbmNsdWRpbmcgdGhlIEdOVS1zcGVjaWZpYworZXh0ZW5zaW9ucykgdG8gYmUgYWNjZXB0ZWQuICBUaGlzIGNhbiBiZSB1c2VmdWwgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWY5NTwvc3Bhbj48L3NhbXA+IHRvCitmb3JjZSBzdGFuZGFyZC1jb21wbGlhbmNlIGJ1dCBnZXQgYWNjZXNzIHRvIHRoZSBmdWxsIHJhbmdlIG9mIGludHJpbnNpY3MKK2F2YWlsYWJsZSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+LiAgQXMgYSBjb25zZXF1ZW5jZSwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdpbnRyaW5zaWNzLXN0ZDwvc3Bhbj48L3NhbXA+Cit3aWxsIGJlIGlnbm9yZWQgYW5kIG5vIHVzZXItZGVmaW5lZCBwcm9jZWR1cmUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFueQoraW50cmluc2ljIHdpbGwgYmUgY2FsbGVkIGV4Y2VwdCB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgZGVjbGFyZWQgPGNvZGU+RVhURVJOQUw8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkLWxpbmVzLWFzLWNvZGU8L2NvZGU+PGR0Pjxjb2RlPi1mZC1saW5lcy1hcy1jb21tZW50czwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmZF8wMDJkbGluZXNfMDAyZGFzXzAwMmRjb2RlXzAwN2QtMjgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZkXzAwMmRsaW5lc18wMDJkYXNfMDAyZGNvbW1lbnRzXzAwN2QtMjkiPjwvYT5FbmFibGUgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGxpbmVzIGJlZ2lubmluZyB3aXRoIDxjb2RlPmQ8L2NvZGU+IG9yIDxjb2RlPkQ8L2NvZGU+CitpbiBmaXhlZCBmb3JtIHNvdXJjZXMuICBJZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkLWxpbmVzLWFzLWNvZGU8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMKK2dpdmVuIHRoZXkgYXJlIHRyZWF0ZWQgYXMgaWYgdGhlIGZpcnN0IGNvbHVtbiBjb250YWluZWQgYSBibGFuay4gIElmIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkLWxpbmVzLWFzLWNvbW1lbnRzPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIGdpdmVuLCB0aGV5IGFyZSB0cmVhdGVkIGFzCitjb21tZW50IGxpbmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZkZWZhdWx0LWRvdWJsZS04PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZkZWZhdWx0XzAwMmRkb3VibGVfMDAyZDhfMDA3ZC0zMCI+PC9hPlNldCB0aGUgPGNvZGU+RE9VQkxFIFBSRUNJU0lPTjwvY29kZT4gdHlwZSB0byBhbiA4IGJ5dGUgd2lkZSB0eXBlLiAgSWYKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZGVmYXVsdC1yZWFsLTg8L3NwYW4+PC9zYW1wPiBpcyBnaXZlbiwgPGNvZGU+RE9VQkxFIFBSRUNJU0lPTjwvY29kZT4gd291bGQKK2luc3RlYWQgYmUgcHJvbW90ZWQgdG8gMTYgYnl0ZXMgaWYgcG9zc2libGUsIGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmRlZmF1bHQtZG91YmxlLTg8L3NwYW4+PC9zYW1wPgorY2FuIGJlIHVzZWQgdG8gcHJldmVudCB0aGlzLiAgVGhlIGtpbmQgb2YgcmVhbCBjb25zdGFudHMgbGlrZSA8Y29kZT4xLmQwPC9jb2RlPiB3aWxsCitub3QgYmUgY2hhbmdlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmRlZmF1bHQtcmVhbC04PC9zcGFuPjwvc2FtcD4gdGhvdWdoLCBzbyBhbHNvCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmRlZmF1bHQtZG91YmxlLTg8L3NwYW4+PC9zYW1wPiBkb2VzIG5vdCBhZmZlY3QgaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZmRlZmF1bHQtaW50ZWdlci04PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZkZWZhdWx0XzAwMmRpbnRlZ2VyXzAwMmQ4XzAwN2QtMzEiPjwvYT5TZXQgdGhlIGRlZmF1bHQgaW50ZWdlciBhbmQgbG9naWNhbCB0eXBlcyB0byBhbiA4IGJ5dGUgd2lkZSB0eXBlLiAKK0RvIG5vdGhpbmcgaWYgdGhpcyBpcyBhbHJlYWR5IHRoZSBkZWZhdWx0LiAgVGhpcyBvcHRpb24gYWxzbyBhZmZlY3RzCit0aGUga2luZCBvZiBpbnRlZ2VyIGNvbnN0YW50cyBsaWtlIDxjb2RlPjQyPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZGVmYXVsdC1yZWFsLTg8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmRlZmF1bHRfMDAyZHJlYWxfMDAyZDhfMDA3ZC0zMiI+PC9hPlNldCB0aGUgZGVmYXVsdCByZWFsIHR5cGUgdG8gYW4gOCBieXRlIHdpZGUgdHlwZS4gCitEbyBub3RoaW5nIGlmIHRoaXMgaXMgYWxyZWFkeSB0aGUgZGVmYXVsdC4gIFRoaXMgb3B0aW9uIGFsc28gYWZmZWN0cwordGhlIGtpbmQgb2Ygbm9uLWRvdWJsZSByZWFsIGNvbnN0YW50cyBsaWtlIDxjb2RlPjEuMDwvY29kZT4sIGFuZCBkb2VzIHByb21vdGUKK3RoZSBkZWZhdWx0IHdpZHRoIG9mIDxjb2RlPkRPVUJMRSBQUkVDSVNJT048L2NvZGU+IHRvIDE2IGJ5dGVzIGlmIHBvc3NpYmxlLCB1bmxlc3MKKzxjb2RlPi1mZGVmYXVsdC1kb3VibGUtODwvY29kZT4gaXMgZ2l2ZW4sIHRvby4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZG9sbGFyLW9rPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZkb2xsYXJfMDAyZG9rXzAwN2QtMzMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI0XzAwN2QtMzQiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtbmFtZXMtMzUiPjwvYT48YSBuYW1lPSJpbmRleC1jaGFyYWN0ZXItc2V0LTM2Ij48L2E+QWxsb3cgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGEgdmFsaWQgbm9uLWZpcnN0IGNoYXJhY3RlciBpbiBhIHN5bWJvbCBuYW1lLiBTeW1ib2xzCit0aGF0IHN0YXJ0IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSByZWplY3RlZCBzaW5jZSBpdCBpcyB1bmNsZWFyIHdoaWNoIHJ1bGVzIHRvCithcHBseSB0byBpbXBsaWNpdCB0eXBpbmcgYXMgZGlmZmVyZW50IHZlbmRvcnMgaW1wbGVtZW50IGRpZmZlcmVudCBydWxlcy4gCitVc2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gPGNvZGU+SU1QTElDSVQ8L2NvZGU+IHN0YXRlbWVudHMgaXMgYWxzbyByZWplY3RlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mYmFja3NsYXNoPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmJhY2tzbGFzaF8wMDdkLTM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYmFja3NsYXNoLTM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXNjYXBlLWNoYXJhY3RlcnMtMzkiPjwvYT5DaGFuZ2UgdGhlIGludGVycHJldGF0aW9uIG9mIGJhY2tzbGFzaGVzIGluIHN0cmluZyBsaXRlcmFscyBmcm9tIGEgc2luZ2xlCitiYWNrc2xhc2ggY2hhcmFjdGVyIHRvICZsZHF1bztDLXN0eWxlJnJkcXVvOyBlc2NhcGUgY2hhcmFjdGVycy4gVGhlIGZvbGxvd2luZworY29tYmluYXRpb25zIGFyZSBleHBhbmRlZCA8Y29kZT5cYTwvY29kZT4sIDxjb2RlPlxiPC9jb2RlPiwgPGNvZGU+XGY8L2NvZGU+LCA8Y29kZT5cbjwvY29kZT4sCis8Y29kZT5ccjwvY29kZT4sIDxjb2RlPlx0PC9jb2RlPiwgPGNvZGU+XHY8L2NvZGU+LCA8Y29kZT5cXDwvY29kZT4sIGFuZCA8Y29kZT5cMDwvY29kZT4gdG8gdGhlIEFTQ0lJCitjaGFyYWN0ZXJzIGFsZXJ0LCBiYWNrc3BhY2UsIGZvcm0gZmVlZCwgbmV3bGluZSwgY2FycmlhZ2UgcmV0dXJuLAoraG9yaXpvbnRhbCB0YWIsIHZlcnRpY2FsIHRhYiwgYmFja3NsYXNoLCBhbmQgTlVMLCByZXNwZWN0aXZlbHkuIAorQWRkaXRpb25hbGx5LCA8Y29kZT5ceDwvY29kZT48dmFyPm5uPC92YXI+LCA8Y29kZT5cdTwvY29kZT48dmFyPm5ubm48L3Zhcj4gYW5kCis8Y29kZT5cVTwvY29kZT48dmFyPm5ubm5ubm5uPC92YXI+ICh3aGVyZSBlYWNoIDx2YXI+bjwvdmFyPiBpcyBhIGhleGFkZWNpbWFsIGRpZ2l0KSBhcmUKK3RyYW5zbGF0ZWQgaW50byB0aGUgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBjb2RlCitwb2ludHMuIEFsbCBvdGhlciBjb21iaW5hdGlvbnMgb2YgYSBjaGFyYWN0ZXIgcHJlY2VkZWQgYnkgXCBhcmUKK3VuZXhwYW5kZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm1vZHVsZS1wcml2YXRlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZtb2R1bGVfMDAyZHByaXZhdGVfMDA3ZC00MCI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZHVsZS1lbnRpdGllcy00MSI+PC9hPjxhIG5hbWU9ImluZGV4LXByaXZhdGUtNDIiPjwvYT5TZXQgdGhlIGRlZmF1bHQgYWNjZXNzaWJpbGl0eSBvZiBtb2R1bGUgZW50aXRpZXMgdG8gPGNvZGU+UFJJVkFURTwvY29kZT4uIAorVXNlLWFzc29jaWF0ZWQgZW50aXRpZXMgd2lsbCBub3QgYmUgYWNjZXNzaWJsZSB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseQorZGVjbGFyZWQgYXMgPGNvZGU+UFVCTElDPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZml4ZWQtbGluZS1sZW5ndGgtPC9jb2RlPjx2YXI+bjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZmaXhlZF8wMDJkbGluZV8wMDJkbGVuZ3RoXzAwMmRfMDA3ZF8wMDQwdmFyXzAwN2JuXzAwN2QtNDMiPjwvYT48YSBuYW1lPSJpbmRleC1maWxlLWZvcm1hdF8wMDJjLWZpeGVkLTQ0Ij48L2E+U2V0IGNvbHVtbiBhZnRlciB3aGljaCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkIGluIHR5cGljYWwgZml4ZWQtZm9ybQorbGluZXMgaW4gdGhlIHNvdXJjZSBmaWxlLCBhbmQgdGhyb3VnaCB3aGljaCBzcGFjZXMgYXJlIGFzc3VtZWQgKGFzCitpZiBwYWRkZWQgdG8gdGhhdCBsZW5ndGgpIGFmdGVyIHRoZSBlbmRzIG9mIHNob3J0IGZpeGVkLWZvcm0gbGluZXMuCisKKyAgICAgPHA+UG9wdWxhciB2YWx1ZXMgZm9yIDx2YXI+bjwvdmFyPiBpbmNsdWRlIDcyICh0aGUKK3N0YW5kYXJkIGFuZCB0aGUgZGVmYXVsdCksIDgwIChjYXJkIGltYWdlKSwgYW5kIDEzMiAoY29ycmVzcG9uZGluZwordG8gJmxkcXVvO2V4dGVuZGVkLXNvdXJjZSZyZHF1bzsgb3B0aW9ucyBpbiBzb21lIHBvcHVsYXIgY29tcGlsZXJzKS4gCis8dmFyPm48L3Zhcj4gbWF5IGFsc28gYmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub25lPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBtZWFuaW5nIHRoYXQgdGhlIGVudGlyZSBsaW5lIGlzIG1lYW5pbmdmdWwKK2FuZCB0aGF0IGNvbnRpbnVlZCBjaGFyYWN0ZXIgY29uc3RhbnRzIG5ldmVyIGhhdmUgaW1wbGljaXQgc3BhY2VzIGFwcGVuZGVkCit0byB0aGVtIHRvIGZpbGwgb3V0IHRoZSBsaW5lLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZml4ZWQtbGluZS1sZW5ndGgtMDwvc3Bhbj48L3NhbXA+IG1lYW5zIHRoZSBzYW1lIHRoaW5nIGFzCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZpeGVkLWxpbmUtbGVuZ3RoLW5vbmU8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mZnJlZS1saW5lLWxlbmd0aC08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmZyZWVfMDAyZGxpbmVfMDAyZGxlbmd0aF8wMDJkXzAwN2RfMDA0MHZhcl8wMDdibl8wMDdkLTQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmlsZS1mb3JtYXRfMDAyYy1mcmVlLTQ2Ij48L2E+U2V0IGNvbHVtbiBhZnRlciB3aGljaCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkIGluIHR5cGljYWwgZnJlZS1mb3JtCitsaW5lcyBpbiB0aGUgc291cmNlIGZpbGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEzMi4gCis8dmFyPm48L3Zhcj4gbWF5IGJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9uZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgbWVhbmluZyB0aGF0IHRoZSBlbnRpcmUgbGluZSBpcyBtZWFuaW5nZnVsLiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnJlZS1saW5lLWxlbmd0aC0wPC9zcGFuPjwvc2FtcD4gbWVhbnMgdGhlIHNhbWUgdGhpbmcgYXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mZnJlZS1saW5lLWxlbmd0aC1ub25lPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm1heC1pZGVudGlmaWVyLWxlbmd0aD08L2NvZGU+PHZhcj5uPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZm1heF8wMDJkaWRlbnRpZmllcl8wMDJkbGVuZ3RoXzAwM2RfMDA3ZF8wMDQwdmFyXzAwN2JuXzAwN2QtNDciPjwvYT5TcGVjaWZ5IHRoZSBtYXhpbXVtIGFsbG93ZWQgaWRlbnRpZmllciBsZW5ndGguIFR5cGljYWwgdmFsdWVzIGFyZQorMzEgKEZvcnRyYW4gOTUpIGFuZCA2MyAoRm9ydHJhbiAyMDAzIGFuZCBGb3J0cmFuIDIwMDgpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZpbXBsaWNpdC1ub25lPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpbXBsaWNpdF8wMDJkbm9uZV8wMDdkLTQ4Ij48L2E+U3BlY2lmeSB0aGF0IG5vIGltcGxpY2l0IHR5cGluZyBpcyBhbGxvd2VkLCB1bmxlc3Mgb3ZlcnJpZGRlbiBieSBleHBsaWNpdAorPGNvZGU+SU1QTElDSVQ8L2NvZGU+IHN0YXRlbWVudHMuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGFkZGluZworPGNvZGU+aW1wbGljaXQgbm9uZTwvY29kZT4gdG8gdGhlIHN0YXJ0IG9mIGV2ZXJ5IHByb2NlZHVyZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1maW50ZWdlci00LWludGVnZXItODwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmaW50ZWdlcl8wMDJkNF8wMDJkaW50ZWdlcl8wMDJkOF8wMDdkLTQ5Ij48L2E+UHJvbW90ZSBhbGwgPGNvZGU+SU5URUdFUihLSU5EPTQpPC9jb2RlPiBlbnRpdGllcyB0byBhbiA8Y29kZT5JTlRFR0VSKEtJTkQ9OCk8L2NvZGU+CitlbnRpdGllcy4gIElmIDxjb2RlPktJTkQ9ODwvY29kZT4gaXMgdW5hdmFpbGFibGUsIHRoZW4gYW4gZXJyb3Igd2lsbCBiZSBpc3N1ZWQuIAorVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlIGFuZCBtYXkgbm90IGJlIHN1aXRhYmxlIGZvciB5b3VyIGNvZGVzLiAKK0FyZWFzIG9mIHBvc3NpYmxlIGNvbmNlcm4gaW5jbHVkZSBjYWxscyB0byBleHRlcm5hbCBwcm9jZWR1cmVzLAorYWxpZ25tZW50IGluIDxjb2RlPkVRVUlWQUxFTkNFPC9jb2RlPiBhbmQvb3IgPGNvZGU+Q09NTU9OPC9jb2RlPiwgZ2VuZXJpYyBpbnRlcmZhY2VzLAorQk9aIGxpdGVyYWwgY29uc3RhbnQgY29udmVyc2lvbiwgYW5kIEkvTy4gIEluc3BlY3Rpb24gb2YgdGhlIGludGVybWVkaWF0ZQorcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyYW5zbGF0ZWQgRm9ydHJhbiBjb2RlLCBwcm9kdWNlZCBieQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZkdW1wLXRyZWUtb3JpZ2luYWw8L3NwYW4+PC9zYW1wPiwgaXMgc3VnZ2VzdGVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZjcmF5LXBvaW50ZXI8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZmNyYXlfMDAyZHBvaW50ZXJfMDA3ZC01MCI+PC9hPkVuYWJsZSB0aGUgQ3JheSBwb2ludGVyIGV4dGVuc2lvbiwgd2hpY2ggcHJvdmlkZXMgQy1saWtlIHBvaW50ZXIKK2Z1bmN0aW9uYWxpdHkuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm9wZW5tcDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmb3Blbm1wXzAwN2QtNTEiPjwvYT48YSBuYW1lPSJpbmRleC1PcGVuTVAtNTIiPjwvYT5FbmFibGUgdGhlIE9wZW5NUCBleHRlbnNpb25zLiAgVGhpcyBpbmNsdWRlcyBPcGVuTVAgPGNvZGU+ISRvbXA8L2NvZGU+IGRpcmVjdGl2ZXMKK2luIGZyZWUgZm9ybQorYW5kIDxjb2RlPmMkb21wPC9jb2RlPiwgPGNvZGU+KiRvbXA8L2NvZGU+IGFuZCA8Y29kZT4hJG9tcDwvY29kZT4gZGlyZWN0aXZlcyBpbiBmaXhlZCBmb3JtLAorPGNvZGU+ISQ8L2NvZGU+IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNlbnRpbmVscyBpbiBmcmVlIGZvcm0KK2FuZCA8Y29kZT5jJDwvY29kZT4sIDxjb2RlPiokPC9jb2RlPiBhbmQgPGNvZGU+ISQ8L2NvZGU+IHNlbnRpbmVscyBpbiBmaXhlZCBmb3JtLAorYW5kIHdoZW4gbGlua2luZyBhcnJhbmdlcyBmb3IgdGhlIE9wZW5NUCBydW50aW1lIGxpYnJhcnkgdG8gYmUgbGlua2VkCitpbi4gIFRoZSBvcHRpb24gPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZvcGVubXA8L3NwYW4+PC9zYW1wPiBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcmVjdXJzaXZlPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZm5vLXJhbmdlLWNoZWNrPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZyYW5nZV8wMDJkY2hlY2tfMDA3ZC01MyI+PC9hPkRpc2FibGUgcmFuZ2UgY2hlY2tpbmcgb24gcmVzdWx0cyBvZiBzaW1wbGlmaWNhdGlvbiBvZiBjb25zdGFudAorZXhwcmVzc2lvbnMgZHVyaW5nIGNvbXBpbGF0aW9uLiAgRm9yIGV4YW1wbGUsIEdOVSBGb3J0cmFuIHdpbGwgZ2l2ZQorYW4gZXJyb3IgYXQgY29tcGlsZSB0aW1lIHdoZW4gc2ltcGxpZnlpbmcgPGNvZGU+YSA9IDEuIC8gMDwvY29kZT4uIAorV2l0aCB0aGlzIG9wdGlvbiwgbm8gZXJyb3Igd2lsbCBiZSBnaXZlbiBhbmQgPGNvZGU+YTwvY29kZT4gd2lsbCBiZSBhc3NpZ25lZAordGhlIHZhbHVlIDxjb2RlPitJbmZpbml0eTwvY29kZT4uICBJZiBhbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBhIHZhbHVlCitvdXRzaWRlIG9mIHRoZSByZWxldmFudCByYW5nZSBvZiBbPGNvZGU+LUhVR0UoKTwvY29kZT46PGNvZGU+SFVHRSgpPC9jb2RlPl0sCit0aGVuIHRoZSBleHByZXNzaW9uIHdpbGwgYmUgcmVwbGFjZWQgYnkgPGNvZGU+LUluZjwvY29kZT4gb3IgPGNvZGU+K0luZjwvY29kZT4KK2FzIGFwcHJvcHJpYXRlLiAKK1NpbWlsYXJseSwgPGNvZGU+REFUQSBpL1onRkZGRkZGRkYnLzwvY29kZT4gd2lsbCByZXN1bHQgaW4gYW4gaW50ZWdlciBvdmVyZmxvdworb24gbW9zdCBzeXN0ZW1zLCBidXQgd2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLXJhbmdlLWNoZWNrPC9zcGFuPjwvc2FtcD4gdGhlIHZhbHVlIHdpbGwKKyZsZHF1bzt3cmFwIGFyb3VuZCZyZHF1bzsgYW5kIDxjb2RlPmk8L2NvZGU+IHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gLTEgaW5zdGVhZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mcmVhbC00LXJlYWwtODwvY29kZT48ZHQ+PGNvZGU+LWZyZWFsLTQtcmVhbC0xMDwvY29kZT48ZHQ+PGNvZGU+LWZyZWFsLTgtcmVhbC00PC9jb2RlPjxkdD48Y29kZT4tZnJlYWwtOC1yZWFsLTEwPC9jb2RlPjxkdD48Y29kZT4tZnJlYWwtOC1yZWFsLTE2PC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZyZWFsXzAwMmQ0XzAwMmRyZWFsXzAwMmQ4XzAwN2QtNTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZyZWFsXzAwMmQ0XzAwMmRyZWFsXzAwMmQxMF8wMDdkLTU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcmVhbF8wMDJkNF8wMDJkcmVhbF8wMDJkMTZfMDA3ZC01NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJlYWxfMDAyZDhfMDAyZHJlYWxfMDAyZDRfMDA3ZC01NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJlYWxfMDAyZDhfMDAyZHJlYWxfMDAyZDEwXzAwN2QtNTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZyZWFsXzAwMmQ4XzAwMmRyZWFsXzAwMmQxNl8wMDdkLTU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3B0aW9uc18wMDJjLXJlYWwta2luZC10eXBlLXByb21vdGlvbi02MCI+PC9hPlByb21vdGUgYWxsIDxjb2RlPlJFQUwoS0lORD1NKTwvY29kZT4gZW50aXRpZXMgdG8gPGNvZGU+UkVBTChLSU5EPU4pPC9jb2RlPiBlbnRpdGllcy4gCitJZiA8Y29kZT5SRUFMKEtJTkQ9Tik8L2NvZGU+IGlzIHVuYXZhaWxhYmxlLCB0aGVuIGFuIGVycm9yIHdpbGwgYmUgaXNzdWVkLiAKK0FsbCBvdGhlciByZWFsIGtpbmQgdHlwZXMgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb24uIAorVGhlc2Ugb3B0aW9ucyBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUgYW5kIG1heSBub3QgYmUgc3VpdGFibGUgZm9yIHlvdXIKK2NvZGVzLiAgQXJlYXMgb2YgcG9zc2libGUgY29uY2VybiBpbmNsdWRlIGNhbGxzIHRvIGV4dGVybmFsIHByb2NlZHVyZXMsCithbGlnbm1lbnQgaW4gPGNvZGU+RVFVSVZBTEVOQ0U8L2NvZGU+IGFuZC9vciA8Y29kZT5DT01NT048L2NvZGU+LCBnZW5lcmljIGludGVyZmFjZXMsCitCT1ogbGl0ZXJhbCBjb25zdGFudCBjb252ZXJzaW9uLCBhbmQgSS9PLiAgSW5zcGVjdGlvbiBvZiB0aGUgaW50ZXJtZWRpYXRlCityZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJhbnNsYXRlZCBGb3J0cmFuIGNvZGUsIHByb2R1Y2VkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmR1bXAtdHJlZS1vcmlnaW5hbDwvc3Bhbj48L3NhbXA+LCBpcyBzdWdnZXN0ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tc3RkPTwvY29kZT48dmFyPnN0ZDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YnN0ZF8wMDNkXzAwN2RfMDA0MHZhcl8wMDdic3RkXzAwN2Qtb3B0aW9uLTYxIj48L2E+U3BlY2lmeSB0aGUgc3RhbmRhcmQgdG8gd2hpY2ggdGhlIHByb2dyYW0gaXMgZXhwZWN0ZWQgdG8gY29uZm9ybSwgd2hpY2gKK21heSBiZSBvbmUgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mOTU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZjIwMDM8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZjIwMDg8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z251PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sZWdhY3k8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgPHZhcj5zdGQ8L3Zhcj4gaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbnU8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdoaWNoCitzcGVjaWZpZXMgYSBzdXBlcnNldCBvZiB0aGUgRm9ydHJhbiA5NSBzdGFuZGFyZCB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUKK2V4dGVuc2lvbnMgc3VwcG9ydGVkIGJ5IEdOVSBGb3J0cmFuLCBhbHRob3VnaCB3YXJuaW5ncyB3aWxsIGJlIGdpdmVuIGZvcgorb2Jzb2xldGUgZXh0ZW5zaW9ucyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZSBpbiBuZXcgY29kZS4gIFRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sZWdhY3k8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdmFsdWUgaXMgZXF1aXZhbGVudCBidXQgd2l0aG91dCB0aGUgd2FybmluZ3MgZm9yIG9ic29sZXRlCitleHRlbnNpb25zLCBhbmQgbWF5IGJlIHVzZWZ1bCBmb3Igb2xkIG5vbi1zdGFuZGFyZCBwcm9ncmFtcy4gIFRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mOTU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZjIwMDM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZjIwMDg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdmFsdWVzIHNwZWNpZnkgc3RyaWN0Citjb25mb3JtYW5jZSB0byB0aGUgRm9ydHJhbiA5NSwgRm9ydHJhbiAyMDAzIGFuZCBGb3J0cmFuIDIwMDggc3RhbmRhcmRzLAorcmVzcGVjdGl2ZWx5OyBlcnJvcnMgYXJlIGdpdmVuIGZvciBhbGwgZXh0ZW5zaW9ucyBiZXlvbmQgdGhlIHJlbGV2YW50CitsYW5ndWFnZSBzdGFuZGFyZCwgYW5kIHdhcm5pbmdzIGFyZSBnaXZlbiBmb3IgdGhlIEZvcnRyYW4gNzcgZmVhdHVyZXMKK3RoYXQgYXJlIHBlcm1pdHRlZCBidXQgb2Jzb2xlc2NlbnQgaW4gbGF0ZXIgc3RhbmRhcmRzLiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1zdGQ9ZjIwMDh0czwvc3Bhbj48L3NhbXA+JnJzcXVvOworYWxsb3dzIHRoZSBGb3J0cmFuIDIwMDggc3RhbmRhcmQgaW5jbHVkaW5nIHRoZSBhZGRpdGlvbnMgb2YgdGhlCitUZWNobmljYWwgU3BlY2lmaWNhdGlvbiAoVFMpIDI5MTEzIG9uIEZ1cnRoZXIgSW50ZXJvcGVyYWJpbGl0eSBvZiBGb3J0cmFuCit3aXRoIEMuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GdW5kaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRnVuZGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMDc0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vRnVuZGluZy5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GdW5kaW5nIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIiB0aXRsZT0iR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4IiB0aXRsZT0iT3B0aW9uIEluZGV4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZ1bmRpbmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3B0aW9uLUluZGV4Lmh0bWwjT3B0aW9uLUluZGV4Ij5PcHRpb24gSW5kZXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+Cis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkZ1bmRpbmcgRnJlZSBTb2Z0d2FyZTwvaDI+CisKKzxwPklmIHlvdSB3YW50IHRvIGhhdmUgbW9yZSBmcmVlIHNvZnR3YXJlIGEgZmV3IHllYXJzIGZyb20gbm93LCBpdCBtYWtlcworc2Vuc2UgZm9yIHlvdSB0byBoZWxwIGVuY291cmFnZSBwZW9wbGUgdG8gY29udHJpYnV0ZSBmdW5kcyBmb3IgaXRzCitkZXZlbG9wbWVudC4gIFRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCBrbm93biBpcyB0byBlbmNvdXJhZ2UKK2NvbW1lcmNpYWwgcmVkaXN0cmlidXRvcnMgdG8gZG9uYXRlLgorCisgICA8cD5Vc2VycyBvZiBmcmVlIHNvZnR3YXJlIHN5c3RlbXMgY2FuIGJvb3N0IHRoZSBwYWNlIG9mIGRldmVsb3BtZW50IGJ5CitlbmNvdXJhZ2luZyBmb3ItYS1mZWUgZGlzdHJpYnV0b3JzIHRvIGRvbmF0ZSBwYXJ0IG9mIHRoZWlyIHNlbGxpbmcgcHJpY2UKK3RvIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyZtZGFzaDt0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgb3RoZXJzLgorCisgICA8cD5UaGUgd2F5IHRvIGNvbnZpbmNlIGRpc3RyaWJ1dG9ycyB0byBkbyB0aGlzIGlzIHRvIGRlbWFuZCBpdCBhbmQgZXhwZWN0CitpdCBmcm9tIHRoZW0uICBTbyB3aGVuIHlvdSBjb21wYXJlIGRpc3RyaWJ1dG9ycywganVkZ2UgdGhlbSBwYXJ0bHkgYnkKK2hvdyBtdWNoIHRoZXkgZ2l2ZSB0byBmcmVlIHNvZnR3YXJlIGRldmVsb3BtZW50LiAgU2hvdyBkaXN0cmlidXRvcnMKK3RoZXkgbXVzdCBjb21wZXRlIHRvIGJlIHRoZSBvbmUgd2hvIGdpdmVzIHRoZSBtb3N0LgorCisgICA8cD5UbyBtYWtlIHRoaXMgYXBwcm9hY2ggd29yaywgeW91IG11c3QgaW5zaXN0IG9uIG51bWJlcnMgdGhhdCB5b3UgY2FuCitjb21wYXJlLCBzdWNoIGFzLCAmbGRxdW87V2Ugd2lsbCBkb25hdGUgdGVuIGRvbGxhcnMgdG8gdGhlIEZyb2JuaXR6IHByb2plY3QKK2ZvciBlYWNoIGRpc2sgc29sZC4mcmRxdW87ICBEb24ndCBiZSBzYXRpc2ZpZWQgd2l0aCBhIHZhZ3VlIHByb21pc2UsIHN1Y2ggYXMKKyZsZHF1bztBIHBvcnRpb24gb2YgdGhlIHByb2ZpdHMgYXJlIGRvbmF0ZWQsJnJkcXVvOyBzaW5jZSBpdCBkb2Vzbid0IGdpdmUgYSBiYXNpcworZm9yIGNvbXBhcmlzb24uCisKKyAgIDxwPkV2ZW4gYSBwcmVjaXNlIGZyYWN0aW9uICZsZHF1bztvZiB0aGUgcHJvZml0cyBmcm9tIHRoaXMgZGlzayZyZHF1bzsgaXMgbm90IHZlcnkKK21lYW5pbmdmdWwsIHNpbmNlIGNyZWF0aXZlIGFjY291bnRpbmcgYW5kIHVucmVsYXRlZCBidXNpbmVzcyBkZWNpc2lvbnMKK2NhbiBncmVhdGx5IGFsdGVyIHdoYXQgZnJhY3Rpb24gb2YgdGhlIHNhbGVzIHByaWNlIGNvdW50cyBhcyBwcm9maXQuIAorSWYgdGhlIHByaWNlIHlvdSBwYXkgaXMgJDUwLCB0ZW4gcGVyY2VudCBvZiB0aGUgcHJvZml0IGlzIHByb2JhYmx5CitsZXNzIHRoYW4gYSBkb2xsYXI7IGl0IG1pZ2h0IGJlIGEgZmV3IGNlbnRzLCBvciBub3RoaW5nIGF0IGFsbC4KKworICAgPHA+U29tZSByZWRpc3RyaWJ1dG9ycyBkbyBkZXZlbG9wbWVudCB3b3JrIHRoZW1zZWx2ZXMuICBUaGlzIGlzIHVzZWZ1bCB0b287CitidXQgdG8ga2VlcCBldmVyeW9uZSBob25lc3QsIHlvdSBuZWVkIHRvIGlucXVpcmUgaG93IG11Y2ggdGhleSBkbywgYW5kCit3aGF0IGtpbmQuICBTb21lIGtpbmRzIG9mIGRldmVsb3BtZW50IG1ha2UgbXVjaCBtb3JlIGxvbmctdGVybQorZGlmZmVyZW5jZSB0aGFuIG90aGVycy4gIEZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIHNlcGFyYXRlIHZlcnNpb24gb2YKK2EgcHJvZ3JhbSBjb250cmlidXRlcyB2ZXJ5IGxpdHRsZTsgbWFpbnRhaW5pbmcgdGhlIHN0YW5kYXJkIHZlcnNpb24gb2YgYQorcHJvZ3JhbSBmb3IgdGhlIHdob2xlIGNvbW11bml0eSBjb250cmlidXRlcyBtdWNoLiAgRWFzeSBuZXcgcG9ydHMKK2NvbnRyaWJ1dGUgbGl0dGxlLCBzaW5jZSBzb21lb25lIGVsc2Ugd291bGQgc3VyZWx5IGRvIHRoZW07IGRpZmZpY3VsdAorcG9ydHMgc3VjaCBhcyBhZGRpbmcgYSBuZXcgQ1BVIHRvIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiBjb250cmlidXRlIG1vcmU7CittYWpvciBuZXcgZmVhdHVyZXMgb3IgcGFja2FnZXMgY29udHJpYnV0ZSB0aGUgbW9zdC4KKworICAgPHA+QnkgZXN0YWJsaXNoaW5nIHRoZSBpZGVhIHRoYXQgc3VwcG9ydGluZyBmdXJ0aGVyIGRldmVsb3BtZW50IGlzICZsZHF1bzt0aGUKK3Byb3BlciB0aGluZyB0byBkbyZyZHF1bzsgd2hlbiBkaXN0cmlidXRpbmcgZnJlZSBzb2Z0d2FyZSBmb3IgYSBmZWUsIHdlIGNhbgorYXNzdXJlIGEgc3RlYWR5IGZsb3cgb2YgcmVzb3VyY2VzIGludG8gbWFraW5nIG1vcmUgZnJlZSBzb2Z0d2FyZS4gCis8IS0tIG1hbiBlbmQgLS0+CisKKzxwcmUgY2xhc3M9ImRpc3BsYXkiPiAgICAgPCEtLSBtYW4gYmVnaW4gQ09QWVJJR0hUIC0tPgorICAgICBDb3B5cmlnaHQgJmNvcHk7IDE5OTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIFZlcmJhdGltIGNvcHlpbmcgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBwZXJtaXR0ZWQKKyAgICAgd2l0aG91dCByb3lhbHR5OyBhbHRlcmF0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuCisgICAgIDwhLS0gbWFuIGVuZCAtLT4KKzwvcHJlPgorICAgPCEtLSAgLS0+Cis8IS0tIEluZGljZXMgLS0+Cis8IS0tICAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GdXJ0aGVyLUludGVyb3BlcmFiaWxpdHktb2YtRm9ydHJhbi13aXRoLUMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9GdXJ0aGVyLUludGVyb3BlcmFiaWxpdHktb2YtRm9ydHJhbi13aXRoLUMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmE4NzZjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0Z1cnRoZXItSW50ZXJvcGVyYWJpbGl0eS1vZi1Gb3J0cmFuLXdpdGgtQy5odG1sCkBAIC0wLDAgKzEsMTI0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GdXJ0aGVyIEludGVyb3BlcmFiaWxpdHkgb2YgRm9ydHJhbiB3aXRoIEMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMuaHRtbCNJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQyIgdGl0bGU9IkludGVyb3BlcmFiaWxpdHkgd2l0aCBDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iV29ya2luZy13aXRoLVBvaW50ZXJzLmh0bWwjV29ya2luZy13aXRoLVBvaW50ZXJzIiB0aXRsZT0iV29ya2luZyB3aXRoIFBvaW50ZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZ1cnRoZXItSW50ZXJvcGVyYWJpbGl0eS1vZi1Gb3J0cmFuLXdpdGgtQyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ildvcmtpbmctd2l0aC1Qb2ludGVycy5odG1sI1dvcmtpbmctd2l0aC1Qb2ludGVycyI+V29ya2luZyB3aXRoIFBvaW50ZXJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMuaHRtbCNJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQyI+SW50ZXJvcGVyYWJpbGl0eSB3aXRoIEM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj43LjEuNiBGdXJ0aGVyIEludGVyb3BlcmFiaWxpdHkgb2YgRm9ydHJhbiB3aXRoIEM8L2g0PgorCis8cD5UaGUgVGVjaG5pY2FsIFNwZWNpZmljYXRpb24gSVNPL0lFQyBUUyAyOTExMzoyMDEyIG9uIGZ1cnRoZXIKK2ludGVyb3BlcmFiaWxpdHkgb2YgRm9ydHJhbiB3aXRoIEMgZXh0ZW5kcyB0aGUgaW50ZXJvcGVyYWJpbGl0eSBzdXBwb3J0CitvZiBGb3J0cmFuIDIwMDMgYW5kIEZvcnRyYW4gMjAwOC4gQmVzaWRlcyByZW1vdmluZyBzb21lIHJlc3RyaWN0aW9ucworYW5kIGNvbnN0cmFpbnRzLCBpdCBhZGRzIGFzc3VtZWQtdHlwZSAoPGNvZGU+VFlQRSgqKTwvY29kZT4pIGFuZCBhc3N1bWVkLXJhbmsKKyg8Y29kZT5kaW1lbnNpb248L2NvZGU+KSB2YXJpYWJsZXMgYW5kIGFsbG93cyBmb3IgaW50ZXJvcGVyYWJpbGl0eSBvZgorYXNzdW1lZC1zaGFwZSwgYXNzdW1lZC1yYW5rIGFuZCBkZWZlcnJlZC1zaGFwZSBhcnJheXMsIGluY2x1ZGluZworYWxsb2NhdGFibGVzIGFuZCBwb2ludGVycy4KKworICAgPHA+Tm90ZTogQ3VycmVudGx5LCBHTlUgRm9ydHJhbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBhcnJheSBkZXNjcmlwdG9yCisoZG9wZSB2ZWN0b3IpIGFzIHNwZWNpZmllZCBpbiB0aGUgVGVjaG5pY2FsIFNwZWNpZmljYXRpb24sIGJ1dCB1c2VzCithbiBhcnJheSBkZXNjcmlwdG9yIHdpdGggZGlmZmVyZW50IGZpZWxkcy4gVGhlIENoYXNtIExhbmd1YWdlCitJbnRlcm9wZXJhYmlsaXR5IFRvb2xzLCA8YSBocmVmPSJodHRwOi8vY2hhc20taW50ZXJvcC5zb3VyY2Vmb3JnZS5uZXQvIj5odHRwOi8vY2hhc20taW50ZXJvcC5zb3VyY2Vmb3JnZS5uZXQvPC9hPiwKK3Byb3ZpZGUgYW4gaW50ZXJmYWNlIHRvIEdOVSBGb3J0cmFuJ3MgYXJyYXkgZGVzY3JpcHRvci4KKworICAgPHA+VGhlIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uIGFkZHMgdGhlIGZvbGxvd2luZyBuZXcgZmVhdHVyZXMsIHdoaWNoCithcmUgc3VwcG9ydGVkIGJ5IEdOVSBGb3J0cmFuOgorCisgICAgIDx1bD4KKzxsaT5UaGUgPGNvZGU+QVNZTkNIUk9OT1VTPC9jb2RlPiBhdHRyaWJ1dGUgaGFzIGJlZW4gY2xhcmlmaWVkIGFuZAorZXh0ZW5kZWQgdG8gYWxsb3cgaXRzIHVzZSB3aXRoIGFzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9uIGluCit1c2VyLXByb3ZpZGVkIGxpYnJhcmllcyBzdWNoIGFzIGluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUKK01lc3NhZ2UgUGFzc2luZyBJbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbi4KKworICAgICA8bGk+TWFueSBjb25zdHJhaW50cyBoYXZlIGJlZW4gcmVsYXhlZCwgaW4gcGFydGljdWxhciBmb3IKK3RoZSA8Y29kZT5DX0xPQzwvY29kZT4gYW5kIDxjb2RlPkNfRl9QT0lOVEVSPC9jb2RlPiBpbnRyaW5zaWNzLgorCisgICAgIDxsaT5UaGUgPGNvZGU+T1BUSU9OQUw8L2NvZGU+IGF0dHJpYnV0ZSBpcyBub3cgYWxsb3dlZCBmb3IgZHVtbXkKK2FyZ3VtZW50czsgYW4gYWJzZW50IGFyZ3VtZW50IG1hdGNoZXMgYSA8Y29kZT5OVUxMPC9jb2RlPiBwb2ludGVyLgorCisgICAgIDxsaT5Bc3N1bWVkIHR5cGVzICg8Y29kZT5UWVBFKCopPC9jb2RlPikgaGF2ZSBiZWVuIGFkZGVkLCB3aGljaCBtYXkKK29ubHkgYmUgdXNlZCBmb3IgZHVtbXkgYXJndW1lbnRzLiAgVGhleSBhcmUgdW5saW1pdGVkIHBvbHltb3JwaGljCitidXQgY29udHJhcnkgdG8gPGNvZGU+Q0xBU1MoKik8L2NvZGU+IHRoZXkgZG8gbm90IGNvbnRhaW4gYW55IHR5cGUKK2luZm9ybWF0aW9uLCBzaW1pbGFyIHRvIEMncyA8Y29kZT52b2lkICo8L2NvZGU+IHBvaW50ZXJzLiAgRXhwcmVzc2lvbnMKK29mIGFueSB0eXBlIGFuZCBraW5kIGNhbiBiZSBwYXNzZWQ7IHRodXMsIGl0IGNhbiBiZSB1c2VkIGFzCityZXBsYWNlbWVudCBmb3IgPGNvZGU+VFlQRShDX1BUUik8L2NvZGU+LCBhdm9pZGluZyB0aGUgdXNlIG9mCis8Y29kZT5DX0xPQzwvY29kZT4gaW4gdGhlIGNhbGxlci4KKworICAgICA8cD5Ob3RlLCBob3dldmVyLCB0aGF0IDxjb2RlPlRZUEUoKik8L2NvZGU+IG9ubHkgYWNjZXB0cyBzY2FsYXIgYXJndW1lbnRzLAordW5sZXNzIHRoZSA8Y29kZT5ESU1FTlNJT048L2NvZGU+IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgQXMKKzxjb2RlPkRJTUVOU0lPTigqKTwvY29kZT4gb25seSBzdXBwb3J0cyBhcnJheSAoaW5jbHVkaW5nIGFycmF5IGVsZW1lbnRzKSBidXQKK25vIHNjYWxhcnMsIGl0IGlzIG5vdCBhIGZ1bGwgcmVwbGFjZW1lbnQgZm9yIDxjb2RlPkNfTE9DPC9jb2RlPi4gIE9uIHRoZQorb3RoZXIgaGFuZCwgYXNzdW1lZC10eXBlIGFzc3VtZWQtcmFuayBkdW1teSBhcmd1bWVudHMKKyg8Y29kZT5UWVBFKCopLCBESU1FTlNJT04oLi4pPC9jb2RlPikgYWxsb3cgZm9yIGJvdGggc2NhbGFycyBhbmQgYXJyYXlzLCBidXQKK3JlcXVpcmUgc3BlY2lhbCBjb2RlIG9uIHRoZSBjYWxsZWUgc2lkZSB0byBoYW5kbGUgdGhlIGFycmF5IGRlc2NyaXB0b3IuCisKKyAgICAgPGxpPkFzc3VtZWQtc2hhcGUgYXJyYXlzICg8Y29kZT5ESU1FTlNJT04oLi4pPC9jb2RlPikgYXMgZHVtbXkgYXJndW1lbnQKK2FsbG93IHRoYXQgc2NhbGFycyBhbmQgYXJyYXlzIG9mIGFueSByYW5rIGNhbiBiZSBwYXNzZWQgYXMgYWN0dWFsCithcmd1bWVudC4gQXMgdGhlIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uIGRvZXMgbm90IHByb3ZpZGUgZm9yIGRpcmVjdAorbWVhbnMgdG8gb3BlcmF0ZSB3aXRoIHRoZW0sIHRoZXkgaGF2ZSB0byBiZSB1c2VkIGVpdGhlciBmcm9tIHRoZSBDIHNpZGUKK29yIGJlIGNvbnZlcnRlZCB1c2luZyA8Y29kZT5DX0xPQzwvY29kZT4gYW5kIDxjb2RlPkNfRl9QT0lOVEVSPC9jb2RlPiB0byBzY2FsYXJzCitvciBhcnJheXMgb2YgYSBzcGVjaWZpYyByYW5rLiBUaGUgcmFuayBjYW4gYmUgZGV0ZXJtaW5lZCB1c2luZyB0aGUKKzxjb2RlPlJBTks8L2NvZGU+IGludHJpbmlzaWMuIAorPC91bD4KKworICAgPHA+Q3VycmVudGx5IHVuaW1wbGVtZW50ZWQ6CisKKyAgICAgPHVsPgorPGxpPkdOVSBGb3J0cmFuIGFsd2F5cyB1c2VzIGFuIGFycmF5IGRlc2NyaXB0b3IsIHdoaWNoIGRvZXMgbm90CittYXRjaCB0aGUgb25lIG9mIHRoZSBUZWNobmljYWwgU3BlY2lmaWNhdGlvbi4gVGhlCis8Y29kZT5JU09fRm9ydHJhbl9iaW5kaW5nLmg8L2NvZGU+IGhlYWRlciBmaWxlIGFuZCB0aGUgQyBmdW5jdGlvbnMgaXQKK3NwZWNpZmllcyBhcmUgbm90IGF2YWlsYWJsZS4KKworICAgICA8bGk+VXNpbmcgYXNzdW1lZC1zaGFwZSwgYXNzdW1lZC1yYW5rIGFuZCBkZWZlcnJlZC1zaGFwZSBhcnJheXMgaW4KKzxjb2RlPkJJTkQoQyk8L2NvZGU+IHByb2NlZHVyZXMgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZC4gSW4gcGFydGljdWxhciwKK0MgaW50ZXJvcGVyYWJsZSBzdHJpbmdzIG9mIG90aGVyIGxlbmd0aCB0aGFuIG9uZSBhcmUgbm90IHN1cHBvcnRlZAorYXMgdGhpcyByZXF1aXJlcyB0aGUgbmV3IGFycmF5IGRlc2NyaXB0b3IuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dBTU1BLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0FNTUEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWRkYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dBTU1BLmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0FNTUEgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRlRFTEwuaHRtbCNGVEVMTCIgdGl0bGU9IkZURUxMIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR0VSUk9SLmh0bWwjR0VSUk9SIiB0aXRsZT0iR0VSUk9SIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdBTU1BIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdFUlJPUi5odG1sI0dFUlJPUiI+R0VSUk9SPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRlRFTEwuaHRtbCNGVEVMTCI+RlRFTEw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguOTYgPGNvZGU+R0FNTUE8L2NvZGU+ICZtZGFzaDsgR2FtbWEgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1HQU1NQS02NjgiPjwvYT48YSBuYW1lPSJpbmRleC1ER0FNTUEtNjY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtR2FtbWEtZnVuY3Rpb24tNjcwIj48L2E+PGEgbmFtZT0iaW5kZXgtRmFjdG9yaWFsLWZ1bmN0aW9uLTY3MSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkdBTU1BKFgpPC9jb2RlPiBjb21wdXRlcyBHYW1tYSAoXEdhbW1hKSBvZiA8dmFyPlg8L3Zhcj4uIEZvciBwb3NpdGl2ZSwKK2ludGVnZXIgdmFsdWVzIG9mIDx2YXI+WDwvdmFyPiB0aGUgR2FtbWEgZnVuY3Rpb24gc2ltcGxpZmllcyB0byB0aGUgZmFjdG9yaWFsCitmdW5jdGlvbiBcR2FtbWEoeCk9KHgtMSkhLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+WCA9IEdBTU1BKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBhbmQgbmVpdGhlciB6ZXJvCitub3IgYSBuZWdhdGl2ZSBpbnRlZ2VyLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBvZiB0aGUgc2FtZSBraW5kIGFzIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfZ2FtbWEKKyAgICAgICAgICAgIHJlYWwgOjogeCA9IDEuMAorICAgICAgICAgICAgeCA9IGdhbW1hKHgpICEgcmV0dXJucyAxLjAKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2dhbW1hCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkdBTU1BKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5HTlUgRXh0ZW5zaW9uCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5ER0FNTUEoWCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIEV4dGVuc2lvbgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+TG9nYXJpdGhtIG9mIHRoZSBHYW1tYSBmdW5jdGlvbjogPGEgaHJlZj0iTE9HXzAwNWZHQU1NQS5odG1sI0xPR18wMDVmR0FNTUEiPkxPR19HQU1NQTwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFUlJPUi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFUlJPUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYWM4YzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VSUk9SLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0VSUk9SIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdBTU1BLmh0bWwjR0FNTUEiIHRpdGxlPSJHQU1NQSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdFVEFSRy5odG1sI0dFVEFSRyIgdGl0bGU9IkdFVEFSRyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHRVJST1IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0VUQVJHLmh0bWwjR0VUQVJHIj5HRVRBUkc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHQU1NQS5odG1sI0dBTU1BIj5HQU1NQTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC45NyA8Y29kZT5HRVJST1I8L2NvZGU+ICZtZGFzaDsgR2V0IGxhc3Qgc3lzdGVtIGVycm9yIG1lc3NhZ2U8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1HRVJST1ItNjcyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3lzdGVtXzAwMmMtZXJyb3ItaGFuZGxpbmctNjczIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgc3lzdGVtIGVycm9yIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgbGFzdCBzeXN0ZW0gZXJyb3IuIAorVGhpcyByZXNlbWJsZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgPGNvZGU+c3RyZXJyb3IoMyk8L2NvZGU+IGluIEMuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBHRVJST1IoUkVTVUxUKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlJFU1VMVDwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiBhbmQgb2YgZGVmYXVsdAorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X2dlcnJvcgorICAgICAgICAgICAgQ0hBUkFDVEVSKGxlbj0xMDApIDo6IG1zZworICAgICAgICAgICAgQ0FMTCBnZXJyb3IobXNnKQorICAgICAgICAgICAgV1JJVEUoKiwqKSBtc2cKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IklFUlJOTy5odG1sI0lFUlJOTyI+SUVSUk5PPC9hPiwgPGEgaHJlZj0iUEVSUk9SLmh0bWwjUEVSUk9SIj5QRVJST1I8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUQVJHLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUQVJHLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjYzk3NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRBUkcuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0VUQVJHIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdFUlJPUi5odG1sI0dFUlJPUiIgdGl0bGU9IkdFUlJPUiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdFVF8wMDVmQ09NTUFORC5odG1sI0dFVF8wMDVmQ09NTUFORCIgdGl0bGU9IkdFVF9DT01NQU5EIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdFVEFSRyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHRVRfMDA1ZkNPTU1BTkQuaHRtbCNHRVRfMDA1ZkNPTU1BTkQiPkdFVF9DT01NQU5EPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0VSUk9SLmh0bWwjR0VSUk9SIj5HRVJST1I8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguOTggPGNvZGU+R0VUQVJHPC9jb2RlPiAmbWRhc2g7IEdldCBjb21tYW5kIGxpbmUgYXJndW1lbnRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtR0VUQVJHLTY3NCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbW1hbmRfMDAyZGxpbmUtYXJndW1lbnRzLTY3NSI+PC9hPjxhIG5hbWU9ImluZGV4LWFyZ3VtZW50c18wMDJjLXRvLXByb2dyYW0tNjc2Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0cmlldmUgdGhlIDx2YXI+UE9TPC92YXI+LXRoIGFyZ3VtZW50IHRoYXQgd2FzIHBhc3NlZCBvbiB0aGUKK2NvbW1hbmQgbGluZSB3aGVuIHRoZSBjb250YWluaW5nIHByb2dyYW0gd2FzIGludm9rZWQuCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgcm91dGluZSBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorR05VIEZvcnRyYW4gNzcuICBJbiBuZXcgY29kZSwgcHJvZ3JhbW1lcnMgc2hvdWxkIGNvbnNpZGVyIHRoZSB1c2Ugb2YKK3RoZSA8YSBocmVmPSJHRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5ULmh0bWwjR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVCI+R0VUX0NPTU1BTkRfQVJHVU1FTlQ8L2E+IGludHJpbnNpYyBkZWZpbmVkIGJ5IHRoZSBGb3J0cmFuIDIwMDMKK3N0YW5kYXJkLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPkNBTEwgR0VUQVJHKFBPUywgVkFMVUUpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UE9TPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG5vdCB3aWRlciB0aGFuCit0aGUgZGVmYXVsdCBpbnRlZ2VyIGtpbmQ7IDx2YXI+UE9TPC92YXI+IFxnZXEgMAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5WQUxVRTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IGFuZCBvZiBkZWZhdWx0CitraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VkFMVUU8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5BZnRlciA8Y29kZT5HRVRBUkc8L2NvZGU+IHJldHVybnMsIHRoZSA8dmFyPlZBTFVFPC92YXI+IGFyZ3VtZW50IGhvbGRzIHRoZQorPHZhcj5QT1M8L3Zhcj50aCBjb21tYW5kIGxpbmUgYXJndW1lbnQuIElmIDx2YXI+VkFMVUU8L3Zhcj4gY2FuIG5vdCBob2xkIHRoZQorYXJndW1lbnQsIGl0IGlzIHRydW5jYXRlZCB0byBmaXQgdGhlIGxlbmd0aCBvZiA8dmFyPlZBTFVFPC92YXI+LiBJZiB0aGVyZSBhcmUKK2xlc3MgdGhhbiA8dmFyPlBPUzwvdmFyPiBhcmd1bWVudHMgc3BlY2lmaWVkIGF0IHRoZSBjb21tYW5kIGxpbmUsIDx2YXI+VkFMVUU8L3Zhcj4KK3dpbGwgYmUgZmlsbGVkIHdpdGggYmxhbmtzLiBJZiA8dmFyPlBPUzwvdmFyPiA9IDAsIDx2YXI+VkFMVUU8L3Zhcj4gaXMgc2V0Cit0byB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSAob24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhpcyBmZWF0dXJlKS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfZ2V0YXJnCisgICAgICAgICAgICBJTlRFR0VSIDo6IGkKKyAgICAgICAgICAgIENIQVJBQ1RFUihsZW49MzIpIDo6IGFyZworICAgICAgICAgIAorICAgICAgICAgICAgRE8gaSA9IDEsIGlhcmdjKCkKKyAgICAgICAgICAgICAgQ0FMTCBnZXRhcmcoaSwgYXJnKQorICAgICAgICAgICAgICBXUklURSAoKiwqKSBhcmcKKyAgICAgICAgICAgIEVORCBETworICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+R05VIEZvcnRyYW4gNzcgY29tcGF0aWJpbGl0eSBmdW5jdGlvbjogPGEgaHJlZj0iSUFSR0MuaHRtbCNJQVJHQyI+SUFSR0M8L2E+CisKKyAgICAgPHA+Rm9ydHJhbiAyMDAzIGZ1bmN0aW9ucyBhbmQgc3Vicm91dGluZXM6IDxhIGhyZWY9IkdFVF8wMDVmQ09NTUFORC5odG1sI0dFVF8wMDVmQ09NTUFORCI+R0VUX0NPTU1BTkQ8L2E+LAorPGEgaHJlZj0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sI0dFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQiPkdFVF9DT01NQU5EX0FSR1VNRU5UPC9hPiwgPGEgaHJlZj0iQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5ULmh0bWwjQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5UIj5DT01NQU5EX0FSR1VNRU5UX0NPVU5UPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFVENXRC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFVENXRC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTYxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUQ1dELmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0VUQ1dEIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQuaHRtbCNHRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5UIiB0aXRsZT0iR0VUX0NPTU1BTkRfQVJHVU1FTlQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHRVRFTlYuaHRtbCNHRVRFTlYiIHRpdGxlPSJHRVRFTlYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR0VUQ1dEIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdFVEVOVi5odG1sI0dFVEVOViI+R0VURU5WPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sI0dFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQiPkdFVF9DT01NQU5EX0FSR1VNRU5UPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEwMSA8Y29kZT5HRVRDV0Q8L2NvZGU+ICZtZGFzaDsgR2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1HRVRDV0QtNjgzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3lzdGVtXzAwMmMtd29ya2luZy1kaXJlY3RvcnktNjg0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+R2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgaW4gYm90aCBzdWJyb3V0aW5lIGFuZCBmdW5jdGlvbiBmb3JtczsgaG93ZXZlciwKK29ubHkgb25lIGZvcm0gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIHByb2dyYW0gdW5pdC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZSwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5DQUxMIEdFVENXRChDIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gR0VUQ1dEKEMpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5DPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IGFuZCBvZiBkZWZhdWx0IGtpbmQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVEFUVVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc3RhdHVzIGZsYWcuIFJldHVybnMgMCBvbiBzdWNjZXNzLAorYSBzeXN0ZW0gc3BlY2lmaWMgYW5kIG5vbnplcm8gZXJyb3IgY29kZSBvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfZ2V0Y3dkCisgICAgICAgICAgICBDSEFSQUNURVIobGVuPTI1NSkgOjogY3dkCisgICAgICAgICAgICBDQUxMIGdldGN3ZChjd2QpCisgICAgICAgICAgICBXUklURSgqLCopIFRSSU0oY3dkKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQ0hESVIuaHRtbCNDSERJUiI+Q0hESVI8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VURU5WLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VURU5WLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmNGExNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRFTlYuaHRtbApAQCAtMCwwICsxLDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HRVRFTlYgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR0VUQ1dELmh0bWwjR0VUQ1dEIiB0aXRsZT0iR0VUQ1dEIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUuaHRtbCNHRVRfMDA1ZkVOVklST05NRU5UXzAwNWZWQVJJQUJMRSIgdGl0bGU9IkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHRVRFTlYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUuaHRtbCNHRVRfMDA1ZkVOVklST05NRU5UXzAwNWZWQVJJQUJMRSI+R0VUX0VOVklST05NRU5UX1ZBUklBQkxFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0VUQ1dELmh0bWwjR0VUQ1dEIj5HRVRDV0Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTAyIDxjb2RlPkdFVEVOVjwvY29kZT4gJm1kYXNoOyBHZXQgYW4gZW52aXJvbm1lbnRhbCB2YXJpYWJsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUdFVEVOVi02ODUiPjwvYT48YSBuYW1lPSJpbmRleC1lbnZpcm9ubWVudC12YXJpYWJsZS02ODYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5HZXQgdGhlIDx2YXI+VkFMVUU8L3Zhcj4gb2YgdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUgPHZhcj5OQU1FPC92YXI+LgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIHJvdXRpbmUgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKK0dOVSBGb3J0cmFuIDc3LiAgSW4gbmV3IGNvZGUsIHByb2dyYW1tZXJzIHNob3VsZCBjb25zaWRlciB0aGUgdXNlIG9mCit0aGUgPGEgaHJlZj0iR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUuaHRtbCNHRVRfMDA1ZkVOVklST05NRU5UXzAwNWZWQVJJQUJMRSI+R0VUX0VOVklST05NRU5UX1ZBUklBQkxFPC9hPiBpbnRyaW5zaWMgZGVmaW5lZCBieSB0aGUgRm9ydHJhbgorMjAwMyBzdGFuZGFyZC4KKworICAgICA8cD5Ob3RlIHRoYXQgPGNvZGU+R0VURU5WPC9jb2RlPiBuZWVkIG5vdCBiZSB0aHJlYWQtc2FmZS4gSXQgaXMgdGhlCityZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBlbnN1cmUgdGhhdCB0aGUgZW52aXJvbm1lbnQgaXMgbm90IGJlaW5nCit1cGRhdGVkIGNvbmN1cnJlbnRseSB3aXRoIGEgY2FsbCB0byB0aGUgPGNvZGU+R0VURU5WPC9jb2RlPiBpbnRyaW5zaWMuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBHRVRFTlYoTkFNRSwgVkFMVUUpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TkFNRTwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiBhbmQgb2YgZGVmYXVsdCBraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VkFMVUU8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiBhbmQgb2YgZGVmYXVsdCBraW5kLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlN0b3JlcyB0aGUgdmFsdWUgb2YgPHZhcj5OQU1FPC92YXI+IGluIDx2YXI+VkFMVUU8L3Zhcj4uIElmIDx2YXI+VkFMVUU8L3Zhcj4gaXMKK25vdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZGF0YSwgaXQgaXMgdHJ1bmNhdGVkLiBJZiA8dmFyPk5BTUU8L3Zhcj4KK2lzIG5vdCBzZXQsIDx2YXI+VkFMVUU8L3Zhcj4gd2lsbCBiZSBmaWxsZWQgd2l0aCBibGFua3MuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X2dldGVudgorICAgICAgICAgICAgQ0hBUkFDVEVSKGxlbj0yNTUpIDo6IGhvbWVkaXIKKyAgICAgICAgICAgIENBTEwgZ2V0ZW52KCJIT01FIiwgaG9tZWRpcikKKyAgICAgICAgICAgIFdSSVRFICgqLCopIFRSSU0oaG9tZWRpcikKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkdFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFLmh0bWwjR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUiPkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRTwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRHSUQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRHSUQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWEyN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFVEdJRC5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdFVEdJRCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHRVRfMDA1ZkVOVklST05NRU5UXzAwNWZWQVJJQUJMRS5odG1sI0dFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFIiB0aXRsZT0iR0VUX0VOVklST05NRU5UX1ZBUklBQkxFIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR0VUTE9HLmh0bWwjR0VUTE9HIiB0aXRsZT0iR0VUTE9HIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdFVEdJRCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHRVRMT0cuaHRtbCNHRVRMT0ciPkdFVExPRzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFLmh0bWwjR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUiPkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMDQgPGNvZGU+R0VUR0lEPC9jb2RlPiAmbWRhc2g7IEdyb3VwIElEIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtR0VUR0lELTY4OSI+PC9hPjxhIG5hbWU9ImluZGV4LXN5c3RlbV8wMDJjLWdyb3VwLUlELTY5MCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJldHVybnMgdGhlIG51bWVyaWNhbCBncm91cCBJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5GdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBHRVRHSUQoKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBvZiA8Y29kZT5HRVRHSUQ8L2NvZGU+IGlzIGFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9mIHRoZSBkZWZhdWx0CitraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+U2VlIDxjb2RlPkdFVFBJRDwvY29kZT4gZm9yIGFuIGV4YW1wbGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iR0VUUElELmh0bWwjR0VUUElEIj5HRVRQSUQ8L2E+LCA8YSBocmVmPSJHRVRVSUQuaHRtbCNHRVRVSUQiPkdFVFVJRDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRMT0cuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRMT0cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmEwYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFVExPRy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdFVExPRyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHRVRHSUQuaHRtbCNHRVRHSUQiIHRpdGxlPSJHRVRHSUQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHRVRQSUQuaHRtbCNHRVRQSUQiIHRpdGxlPSJHRVRQSUQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR0VUTE9HIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdFVFBJRC5odG1sI0dFVFBJRCI+R0VUUElEPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0VUR0lELmh0bWwjR0VUR0lEIj5HRVRHSUQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTA1IDxjb2RlPkdFVExPRzwvY29kZT4gJm1kYXNoOyBHZXQgbG9naW4gbmFtZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUdFVExPRy02OTEiPjwvYT48YSBuYW1lPSJpbmRleC1zeXN0ZW1fMDAyYy1sb2dpbi1uYW1lLTY5MiI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZ2luLW5hbWUtNjkzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+R2V0cyB0aGUgdXNlcm5hbWUgdW5kZXIgd2hpY2ggdGhlIHByb2dyYW0gaXMgcnVubmluZy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIEdFVExPRyhDKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiBhbmQgb2YgZGVmYXVsdCBraW5kLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlN0b3JlcyB0aGUgY3VycmVudCB1c2VyIG5hbWUgaW4gPHZhcj5MT0dJTjwvdmFyPi4gIChPbiBzeXN0ZW1zIHdoZXJlIFBPU0lYCitmdW5jdGlvbnMgPGNvZGU+Z2V0ZXVpZDwvY29kZT4gYW5kIDxjb2RlPmdldHB3dWlkPC9jb2RlPiBhcmUgbm90IGF2YWlsYWJsZSwgYW5kCit0aGUgPGNvZGU+Z2V0bG9naW48L2NvZGU+IGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBlaXRoZXIsIHRoaXMgd2lsbAorcmV0dXJuIGEgYmxhbmsgc3RyaW5nLikKKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIFRFU1RfR0VUTE9HCisgICAgICAgICAgICBDSEFSQUNURVIoMzIpIDo6IGxvZ2luCisgICAgICAgICAgICBDQUxMIEdFVExPRyhsb2dpbikKKyAgICAgICAgICAgIFdSSVRFKCosKikgbG9naW4KKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkdFVFVJRC5odG1sI0dFVFVJRCI+R0VUVUlEPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFVFBJRC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFVFBJRC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTg2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUUElELmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0VUUElEIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdFVExPRy5odG1sI0dFVExPRyIgdGl0bGU9IkdFVExPRyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdFVFVJRC5odG1sI0dFVFVJRCIgdGl0bGU9IkdFVFVJRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHRVRQSUQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0VUVUlELmh0bWwjR0VUVUlEIj5HRVRVSUQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHRVRMT0cuaHRtbCNHRVRMT0ciPkdFVExPRzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMDYgPGNvZGU+R0VUUElEPC9jb2RlPiAmbWRhc2g7IFByb2Nlc3MgSUQgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1HRVRQSUQtNjk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3lzdGVtXzAwMmMtcHJvY2Vzcy1JRC02OTUiPjwvYT48YSBuYW1lPSJpbmRleC1wcm9jZXNzLUlELTY5NiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJldHVybnMgdGhlIG51bWVyaWNhbCBwcm9jZXNzIGlkZW50aWZpZXIgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gR0VUUElEKCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgb2YgPGNvZGU+R0VUUElEPC9jb2RlPiBpcyBhbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvZiB0aGUgZGVmYXVsdAora2luZC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIGluZm8KKyAgICAgICAgICAgIHByaW50ICosICJUaGUgY3VycmVudCBwcm9jZXNzIElEIGlzICIsIGdldHBpZCgpCisgICAgICAgICAgICBwcmludCAqLCAiWW91ciBudW1lcmljYWwgdXNlciBJRCBpcyAiLCBnZXR1aWQoKQorICAgICAgICAgICAgcHJpbnQgKiwgIllvdXIgbnVtZXJpY2FsIGdyb3VwIElEIGlzICIsIGdldGdpZCgpCisgICAgICAgICAgZW5kIHByb2dyYW0gaW5mbworPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkdFVEdJRC5odG1sI0dFVEdJRCI+R0VUR0lEPC9hPiwgPGEgaHJlZj0iR0VUVUlELmh0bWwjR0VUVUlEIj5HRVRVSUQ8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUVUlELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUVUlELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViMTNiZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRVSUQuaHRtbApAQCAtMCwwICsxLDc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HRVRVSUQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR0VUUElELmh0bWwjR0VUUElEIiB0aXRsZT0iR0VUUElEIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR01USU1FLmh0bWwjR01USU1FIiB0aXRsZT0iR01USU1FIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdFVFVJRCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHTVRJTUUuaHRtbCNHTVRJTUUiPkdNVElNRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdFVFBJRC5odG1sI0dFVFBJRCI+R0VUUElEPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEwNyA8Y29kZT5HRVRVSUQ8L2NvZGU+ICZtZGFzaDsgVXNlciBJRCBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUdFVFVJRC02OTciPjwvYT48YSBuYW1lPSJpbmRleC1zeXN0ZW1fMDAyYy11c2VyLUlELTY5OCI+PC9hPjxhIG5hbWU9ImluZGV4LXVzZXItaWQtNjk5Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgbnVtZXJpY2FsIHVzZXIgSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gR0VUVUlEKCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgb2YgPGNvZGU+R0VUVUlEPC9jb2RlPiBpcyBhbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvZiB0aGUgZGVmYXVsdAora2luZC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPlNlZSA8Y29kZT5HRVRQSUQ8L2NvZGU+IGZvciBhbiBleGFtcGxlLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkdFVFBJRC5odG1sI0dFVFBJRCI+R0VUUElEPC9hPiwgPGEgaHJlZj0iR0VUTE9HLmh0bWwjR0VUTE9HIj5HRVRMT0c8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUXzAwNWZDT01NQU5ELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUXzAwNWZDT01NQU5ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwYjA4MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRfMDA1ZkNPTU1BTkQuaHRtbApAQCAtMCwwICsxLDk0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HRVRfQ09NTUFORCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHRVRBUkcuaHRtbCNHRVRBUkciIHRpdGxlPSJHRVRBUkciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5ULmh0bWwjR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVCIgdGl0bGU9IkdFVF9DT01NQU5EX0FSR1VNRU5UIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdFVF9DT01NQU5EIj48L2E+Cis8YSBuYW1lPSJHRVRfMDA1ZkNPTU1BTkQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sI0dFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQiPkdFVF9DT01NQU5EX0FSR1VNRU5UPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0VUQVJHLmh0bWwjR0VUQVJHIj5HRVRBUkc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguOTkgPGNvZGU+R0VUX0NPTU1BTkQ8L2NvZGU+ICZtZGFzaDsgR2V0IHRoZSBlbnRpcmUgY29tbWFuZCBsaW5lPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtR0VUXzAwNWZDT01NQU5ELTY3NyI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbW1hbmRfMDAyZGxpbmUtYXJndW1lbnRzLTY3OCI+PC9hPjxhIG5hbWU9ImluZGV4LWFyZ3VtZW50c18wMDJjLXRvLXByb2dyYW0tNjc5Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0cmlldmUgdGhlIGVudGlyZSBjb21tYW5kIGxpbmUgdGhhdCB3YXMgdXNlZCB0byBpbnZva2UgdGhlIHByb2dyYW0uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBHRVRfQ09NTUFORChbQ09NTUFORCwgTEVOR1RILCBTVEFUVVNdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkNPTU1BTkQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IGFuZAorb2YgZGVmYXVsdCBraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TEVOR1RIPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG9mCitkZWZhdWx0IGtpbmQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVEFUVVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YKK2RlZmF1bHQga2luZC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5JZiA8dmFyPkNPTU1BTkQ8L3Zhcj4gaXMgcHJlc2VudCwgc3RvcmVzIHRoZSBlbnRpcmUgY29tbWFuZCBsaW5lIHRoYXQgd2FzIHVzZWQKK3RvIGludm9rZSB0aGUgcHJvZ3JhbSBpbiA8dmFyPkNPTU1BTkQ8L3Zhcj4uIElmIDx2YXI+TEVOR1RIPC92YXI+IGlzIHByZXNlbnQsIGl0IGlzCithc3NpZ25lZCB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGxpbmUuIElmIDx2YXI+U1RBVFVTPC92YXI+IGlzIHByZXNlbnQsIGl0CitpcyBhc3NpZ25lZCAwIHVwb24gc3VjY2VzcyBvZiB0aGUgY29tbWFuZCwgLTEgaWYgPHZhcj5DT01NQU5EPC92YXI+IGlzIHRvbworc2hvcnQgdG8gc3RvcmUgdGhlIGNvbW1hbmQgbGluZSwgb3IgYSBwb3NpdGl2ZSB2YWx1ZSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9nZXRfY29tbWFuZAorICAgICAgICAgICAgQ0hBUkFDVEVSKGxlbj0yNTUpIDo6IGNtZAorICAgICAgICAgICAgQ0FMTCBnZXRfY29tbWFuZChjbWQpCisgICAgICAgICAgICBXUklURSAoKiwqKSBUUklNKGNtZCkKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkdFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQuaHRtbCNHRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5UIj5HRVRfQ09NTUFORF9BUkdVTUVOVDwvYT4sIDxhIGhyZWY9IkNPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC5odG1sI0NPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVCI+Q09NTUFORF9BUkdVTUVOVF9DT1VOVDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5ULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTU5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sCkBAIC0wLDAgKzEsMTEwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HRVRfQ09NTUFORF9BUkdVTUVOVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHRVRfMDA1ZkNPTU1BTkQuaHRtbCNHRVRfMDA1ZkNPTU1BTkQiIHRpdGxlPSJHRVRfQ09NTUFORCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdFVENXRC5odG1sI0dFVENXRCIgdGl0bGU9IkdFVENXRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHRVRfQ09NTUFORF9BUkdVTUVOVCI+PC9hPgorPGEgbmFtZT0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHRVRDV0QuaHRtbCNHRVRDV0QiPkdFVENXRDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdFVF8wMDVmQ09NTUFORC5odG1sI0dFVF8wMDVmQ09NTUFORCI+R0VUX0NPTU1BTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTAwIDxjb2RlPkdFVF9DT01NQU5EX0FSR1VNRU5UPC9jb2RlPiAmbWRhc2g7IEdldCBjb21tYW5kIGxpbmUgYXJndW1lbnRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC02ODAiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tYW5kXzAwMmRsaW5lLWFyZ3VtZW50cy02ODEiPjwvYT48YSBuYW1lPSJpbmRleC1hcmd1bWVudHNfMDAyYy10by1wcm9ncmFtLTY4MiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJldHJpZXZlIHRoZSA8dmFyPk5VTUJFUjwvdmFyPi10aCBhcmd1bWVudCB0aGF0IHdhcyBwYXNzZWQgb24gdGhlCitjb21tYW5kIGxpbmUgd2hlbiB0aGUgY29udGFpbmluZyBwcm9ncmFtIHdhcyBpbnZva2VkLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPkNBTEwgR0VUX0NPTU1BTkRfQVJHVU1FTlQoTlVNQkVSIFssIFZBTFVFLCBMRU5HVEgsIFNUQVRVU10pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TlVNQkVSPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZgorZGVmYXVsdCBraW5kLCA8dmFyPk5VTUJFUjwvdmFyPiBcZ2VxIDAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VkFMVUU8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPgorYW5kIG9mIGRlZmF1bHQga2luZC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkxFTkdUSDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBTaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+CithbmQgb2YgZGVmYXVsdCBraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4KK2FuZCBvZiBkZWZhdWx0IGtpbmQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+QWZ0ZXIgPGNvZGU+R0VUX0NPTU1BTkRfQVJHVU1FTlQ8L2NvZGU+IHJldHVybnMsIHRoZSA8dmFyPlZBTFVFPC92YXI+IGFyZ3VtZW50IGhvbGRzIHRoZQorPHZhcj5OVU1CRVI8L3Zhcj4tdGggY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBJZiA8dmFyPlZBTFVFPC92YXI+IGNhbiBub3QgaG9sZCB0aGUgYXJndW1lbnQsIGl0IGlzCit0cnVuY2F0ZWQgdG8gZml0IHRoZSBsZW5ndGggb2YgPHZhcj5WQUxVRTwvdmFyPi4gSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiA8dmFyPk5VTUJFUjwvdmFyPgorYXJndW1lbnRzIHNwZWNpZmllZCBhdCB0aGUgY29tbWFuZCBsaW5lLCA8dmFyPlZBTFVFPC92YXI+IHdpbGwgYmUgZmlsbGVkIHdpdGggYmxhbmtzLiAKK0lmIDx2YXI+TlVNQkVSPC92YXI+ID0gMCwgPHZhcj5WQUxVRTwvdmFyPiBpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gKG9uCitzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUpLiBUaGUgPHZhcj5MRU5HVEg8L3Zhcj4gYXJndW1lbnQgY29udGFpbnMgdGhlCitsZW5ndGggb2YgdGhlIDx2YXI+TlVNQkVSPC92YXI+LXRoIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gSWYgdGhlIGFyZ3VtZW50IHJldHJpZXZhbAorZmFpbHMsIDx2YXI+U1RBVFVTPC92YXI+IGlzIGEgcG9zaXRpdmUgbnVtYmVyOyBpZiA8dmFyPlZBTFVFPC92YXI+IGNvbnRhaW5zIGEgdHJ1bmNhdGVkCitjb21tYW5kIGxpbmUgYXJndW1lbnQsIDx2YXI+U1RBVFVTPC92YXI+IGlzIC0xOyBhbmQgb3RoZXJ3aXNlIHRoZSA8dmFyPlNUQVRVUzwvdmFyPiBpcworemVyby4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfZ2V0X2NvbW1hbmRfYXJndW1lbnQKKyAgICAgICAgICAgIElOVEVHRVIgOjogaQorICAgICAgICAgICAgQ0hBUkFDVEVSKGxlbj0zMikgOjogYXJnCisgICAgICAgICAgCisgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgRE8KKyAgICAgICAgICAgICAgQ0FMTCBnZXRfY29tbWFuZF9hcmd1bWVudChpLCBhcmcpCisgICAgICAgICAgICAgIElGIChMRU5fVFJJTShhcmcpID09IDApIEVYSVQKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgV1JJVEUgKCosKikgVFJJTShhcmcpCisgICAgICAgICAgICAgIGkgPSBpKzEKKyAgICAgICAgICAgIEVORCBETworICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iR0VUXzAwNWZDT01NQU5ELmh0bWwjR0VUXzAwNWZDT01NQU5EIj5HRVRfQ09NTUFORDwvYT4sIDxhIGhyZWY9IkNPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC5odG1sI0NPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVCI+Q09NTUFORF9BUkdVTUVOVF9DT1VOVDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRfMDA1ZkVOVklST05NRU5UXzAwNWZWQVJJQUJMRS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwYWUxOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRVRfMDA1ZkVOVklST05NRU5UXzAwNWZWQVJJQUJMRS5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HRVRfRU5WSVJPTk1FTlRfVkFSSUFCTEUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR0VURU5WLmh0bWwjR0VURU5WIiB0aXRsZT0iR0VURU5WIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR0VUR0lELmh0bWwjR0VUR0lEIiB0aXRsZT0iR0VUR0lEIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRSI+PC9hPgorPGEgbmFtZT0iR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0VUR0lELmh0bWwjR0VUR0lEIj5HRVRHSUQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHRVRFTlYuaHRtbCNHRVRFTlYiPkdFVEVOVjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMDMgPGNvZGU+R0VUX0VOVklST05NRU5UX1ZBUklBQkxFPC9jb2RlPiAmbWRhc2g7IEdldCBhbiBlbnZpcm9ubWVudGFsIHZhcmlhYmxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUtNjg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZW52aXJvbm1lbnQtdmFyaWFibGUtNjg4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+R2V0IHRoZSA8dmFyPlZBTFVFPC92YXI+IG9mIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIDx2YXI+TkFNRTwvdmFyPi4KKworICAgICA8cD5Ob3RlIHRoYXQgPGNvZGU+R0VUX0VOVklST05NRU5UX1ZBUklBQkxFPC9jb2RlPiBuZWVkIG5vdCBiZSB0aHJlYWQtc2FmZS4gSXQKK2lzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBlbnN1cmUgdGhhdCB0aGUgZW52aXJvbm1lbnQgaXMKK25vdCBiZWluZyB1cGRhdGVkIGNvbmN1cnJlbnRseSB3aXRoIGEgY2FsbCB0byB0aGUKKzxjb2RlPkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRTwvY29kZT4gaW50cmluc2ljLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPkNBTEwgR0VUX0VOVklST05NRU5UX1ZBUklBQkxFKE5BTUVbLCBWQUxVRSwgTEVOR1RILCBTVEFUVVMsIFRSSU1fTkFNRSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OQU1FPC92YXI+ICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPgorYW5kIG9mIGRlZmF1bHQga2luZC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlZBTFVFPC92YXI+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBTaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4KK2FuZCBvZiBkZWZhdWx0IGtpbmQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5MRU5HVEg8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPgorYW5kIG9mIGRlZmF1bHQga2luZC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBTaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+CithbmQgb2YgZGVmYXVsdCBraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VFJJTV9OQU1FPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+TE9HSUNBTDwvY29kZT4KK2FuZCBvZiBkZWZhdWx0IGtpbmQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+U3RvcmVzIHRoZSB2YWx1ZSBvZiA8dmFyPk5BTUU8L3Zhcj4gaW4gPHZhcj5WQUxVRTwvdmFyPi4gSWYgPHZhcj5WQUxVRTwvdmFyPiBpcworbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBkYXRhLCBpdCBpcyB0cnVuY2F0ZWQuIElmIDx2YXI+TkFNRTwvdmFyPgoraXMgbm90IHNldCwgPHZhcj5WQUxVRTwvdmFyPiB3aWxsIGJlIGZpbGxlZCB3aXRoIGJsYW5rcy4gQXJndW1lbnQgPHZhcj5MRU5HVEg8L3Zhcj4KK2NvbnRhaW5zIHRoZSBsZW5ndGggbmVlZGVkIGZvciBzdG9yaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA8dmFyPk5BTUU8L3Zhcj4KK29yIHplcm8gaWYgaXQgaXMgbm90IHByZXNlbnQuIDx2YXI+U1RBVFVTPC92YXI+IGlzIC0xIGlmIDx2YXI+VkFMVUU8L3Zhcj4gaXMgcHJlc2VudAorYnV0IHRvbyBzaG9ydCBmb3IgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlOyBpdCBpcyAxIGlmIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgZG9lcyBub3QgZXhpc3QgYW5kIDIgaWYgdGhlIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IGVudmlyb25tZW50Cit2YXJpYWJsZXM7IGluIGFsbCBvdGhlciBjYXNlcyA8dmFyPlNUQVRVUzwvdmFyPiBpcyB6ZXJvLiBJZiA8dmFyPlRSSU1fTkFNRTwvdmFyPiBpcworcHJlc2VudCB3aXRoIHRoZSB2YWx1ZSA8Y29kZT4uRkFMU0UuPC9jb2RlPiwgdGhlIHRyYWlsaW5nIGJsYW5rcyBpbiA8dmFyPk5BTUU8L3Zhcj4KK2FyZSBzaWduaWZpY2FudDsgb3RoZXJ3aXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorbmFtZS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfZ2V0ZW52CisgICAgICAgICAgICBDSEFSQUNURVIobGVuPTI1NSkgOjogaG9tZWRpcgorICAgICAgICAgICAgQ0FMTCBnZXRfZW52aXJvbm1lbnRfdmFyaWFibGUoIkhPTUUiLCBob21lZGlyKQorICAgICAgICAgICAgV1JJVEUgKCosKikgVFJJTShob21lZGlyKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZDT05WRVJUXzAwNWZVTklULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZkNPTlZFUlRfMDA1ZlVOSVQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODdkNzhjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZDT05WRVJUXzAwNWZVTklULmh0bWwKQEAgLTAsMCArMSwxMjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdGT1JUUkFOX0NPTlZFUlRfVU5JVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSdW50aW1lLmh0bWwjUnVudGltZSIgdGl0bGU9IlJ1bnRpbWUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHRk9SVFJBTl8wMDVmTElTVF8wMDVmU0VQQVJBVE9SLmh0bWwjR0ZPUlRSQU5fMDA1ZkxJU1RfMDA1ZlNFUEFSQVRPUiIgdGl0bGU9IkdGT1JUUkFOX0xJU1RfU0VQQVJBVE9SIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR0ZPUlRSQU5fMDA1ZkVSUk9SXzAwNWZCQUNLVFJBQ0UuaHRtbCNHRk9SVFJBTl8wMDVmRVJST1JfMDA1ZkJBQ0tUUkFDRSIgdGl0bGU9IkdGT1JUUkFOX0VSUk9SX0JBQ0tUUkFDRSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHRk9SVFJBTl9DT05WRVJUX1VOSVQiPjwvYT4KKzxhIG5hbWU9IkdGT1JUUkFOXzAwNWZDT05WRVJUXzAwNWZVTklUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdGT1JUUkFOXzAwNWZFUlJPUl8wMDVmQkFDS1RSQUNFLmh0bWwjR0ZPUlRSQU5fMDA1ZkVSUk9SXzAwNWZCQUNLVFJBQ0UiPkdGT1JUUkFOX0VSUk9SX0JBQ0tUUkFDRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdGT1JUUkFOXzAwNWZMSVNUXzAwNWZTRVBBUkFUT1IuaHRtbCNHRk9SVFJBTl8wMDVmTElTVF8wMDVmU0VQQVJBVE9SIj5HRk9SVFJBTl9MSVNUX1NFUEFSQVRPUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIj5SdW50aW1lPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xMSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HRk9SVFJBTl9DT05WRVJUX1VOSVQ8L3NwYW4+PC9zYW1wPiZtZGFzaDtTZXQgZW5kaWFubmVzcyBmb3IgdW5mb3JtYXR0ZWQgSS9PPC9oMz4KKworPHA+Qnkgc2V0dGluZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0ZPUlRSQU5fQ09OVkVSVF9VTklUPC9zcGFuPjwvc2FtcD4gdmFyaWFibGUsIGl0IGlzIHBvc3NpYmxlCit0byBjaGFuZ2UgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgZm9yIHVuZm9ybWF0dGVkIGZpbGVzLiAKK1RoZSBzeW50YXggZm9yIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HRk9SVFJBTl9DT05WRVJUX1VOSVQ8L3NwYW4+PC9zYW1wPiB2YXJpYWJsZSBpczoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBHRk9SVFJBTl9DT05WRVJUX1VOSVQ6IG1vZGUgfCBtb2RlICc7JyBleGNlcHRpb24gfCBleGNlcHRpb24gOworICAgICBtb2RlOiAnbmF0aXZlJyB8ICdzd2FwJyB8ICdiaWdfZW5kaWFuJyB8ICdsaXR0bGVfZW5kaWFuJyA7CisgICAgIGV4Y2VwdGlvbjogbW9kZSAnOicgdW5pdF9saXN0IHwgdW5pdF9saXN0IDsKKyAgICAgdW5pdF9saXN0OiB1bml0X3NwZWMgfCB1bml0X2xpc3QgdW5pdF9zcGVjIDsKKyAgICAgdW5pdF9zcGVjOiBJTlRFR0VSIHwgSU5URUdFUiAnLScgSU5URUdFUiA7Cis8L3ByZT4KKyAgIDxwPlRoZSB2YXJpYWJsZSBjb25zaXN0cyBvZiBhbiBvcHRpb25hbCBkZWZhdWx0IG1vZGUsIGZvbGxvd2VkIGJ5CithIGxpc3Qgb2Ygb3B0aW9uYWwgZXhjZXB0aW9ucywgd2hpY2ggYXJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zCitmcm9tIHRoZSBwcmVjZWRpbmcgZGVmYXVsdCBhbmQgZWFjaCBvdGhlci4gIEVhY2ggZXhjZXB0aW9uIGNvbnNpc3RzCitvZiBhIGZvcm1hdCBhbmQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB1bml0cy4gIFZhbGlkIHZhbHVlcyBmb3IKK3RoZSBtb2RlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSA8Y29kZT5DT05WRVJUPC9jb2RlPiBzcGVjaWZpZXI6CisKKyAgICAgPHVsPgorPGxpPjxjb2RlPk5BVElWRTwvY29kZT4gVXNlIHRoZSBuYXRpdmUgZm9ybWF0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4gCis8bGk+PGNvZGU+U1dBUDwvY29kZT4gU3dhcCBiZXR3ZWVuIGxpdHRsZS0gYW5kIGJpZy1lbmRpYW4uIAorPGxpPjxjb2RlPkxJVFRMRV9FTkRJQU48L2NvZGU+IFVzZSB0aGUgbGl0dGxlLWVuZGlhbiBmb3JtYXQKK2ZvciB1bmZvcm1hdHRlZCBmaWxlcy4gCis8bGk+PGNvZGU+QklHX0VORElBTjwvY29kZT4gVXNlIHRoZSBiaWctZW5kaWFuIGZvcm1hdCBmb3IgdW5mb3JtYXR0ZWQgZmlsZXMuIAorPC91bD4KKyAgIEEgbWlzc2luZyBtb2RlIGZvciBhbiBleGNlcHRpb24gaXMgdGFrZW4gdG8gbWVhbiA8Y29kZT5CSUdfRU5ESUFOPC9jb2RlPi4gCitFeGFtcGxlcyBvZiB2YWx1ZXMgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX0NPTlZFUlRfVU5JVDwvc3Bhbj48L3NhbXA+IGFyZToKKyAgICAgPHVsPgorPGxpPjxjb2RlPidiaWdfZW5kaWFuJzwvY29kZT4gIERvIGFsbCB1bmZvcm1hdHRlZCBJL08gaW4gYmlnX2VuZGlhbiBtb2RlLiAKKzxsaT48Y29kZT4nbGl0dGxlX2VuZGlhbjtuYXRpdmU6MTAtMjAsMjUnPC9jb2RlPiAgRG8gYWxsIHVuZm9ybWF0dGVkIEkvTworaW4gbGl0dGxlX2VuZGlhbiBtb2RlLCBleGNlcHQgZm9yIHVuaXRzIDEwIHRvIDIwIGFuZCAyNSwgd2hpY2ggYXJlIGluCituYXRpdmUgZm9ybWF0LiAKKzxsaT48Y29kZT4nMTAtMjAnPC9jb2RlPiAgVW5pdHMgMTAgdG8gMjAgYXJlIGJpZy1lbmRpYW4sIHRoZSByZXN0IGlzIG5hdGl2ZS4gCis8L3VsPgorCisgICA8cD5TZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2hvdWxkIGJlIGRvbmUgb24gdGhlIGNvbW1hbmQKK2xpbmUgb3IgdmlhIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+ZXhwb3J0PC9zcGFuPjwvc2FtcD4KK2NvbW1hbmQgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5zaDwvc3Bhbj48L3NhbXA+LWNvbXBhdGlibGUgc2hlbGxzIGFuZCB2aWEgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPnNldGVudjwvc3Bhbj48L3NhbXA+Citmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmNzaDwvc3Bhbj48L3NhbXA+LWNvbXBhdGlibGUgc2hlbGxzLgorCisgICA8cD5FeGFtcGxlIGZvciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+c2g8L3NwYW4+PC9zYW1wPjoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAkIGdmb3J0cmFuIGZvby5mOTAKKyAgICAgJCBHRk9SVFJBTl9DT05WRVJUX1VOSVQ9J2JpZ19lbmRpYW47bmF0aXZlOjEwLTIwJyAuL2Eub3V0Cis8L3ByZT4KKyAgIDxwPkV4YW1wbGUgY29kZSBmb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmNzaDwvc3Bhbj48L3NhbXA+OgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICUgZ2ZvcnRyYW4gZm9vLmY5MAorICAgICAlIHNldGVudiBHRk9SVFJBTl9DT05WRVJUX1VOSVQgJ2JpZ19lbmRpYW47bmF0aXZlOjEwLTIwJworICAgICAlIC4vYS5vdXQKKzwvcHJlPgorICAgPHA+VXNpbmcgYW55dGhpbmcgYnV0IHRoZSBuYXRpdmUgcmVwcmVzZW50YXRpb24gZm9yIHVuZm9ybWF0dGVkIGRhdGEKK2NhcnJpZXMgYSBzaWduaWZpY2FudCBzcGVlZCBvdmVyaGVhZC4gIElmIHNwZWVkIGluIHRoaXMgYXJlYSBtYXR0ZXJzCit0byB5b3UsIGl0IGlzIGJlc3QgaWYgeW91IHVzZSB0aGlzIG9ubHkgZm9yIGRhdGEgdGhhdCBuZWVkcyB0byBiZQorcG9ydGFibGUuCisKKyAgIDxwPlNlZSA8YSBocmVmPSJDT05WRVJULXNwZWNpZmllci5odG1sI0NPTlZFUlQtc3BlY2lmaWVyIj5DT05WRVJUIHNwZWNpZmllcjwvYT4sIGZvciBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BlY2lmeSB0aGUKK2RhdGEgcmVwcmVzZW50YXRpb24gZm9yIHVuZm9ybWF0dGVkIGZpbGVzLiAgU2VlIDxhIGhyZWY9IlJ1bnRpbWUtT3B0aW9ucy5odG1sI1J1bnRpbWUtT3B0aW9ucyI+UnVudGltZSBPcHRpb25zPC9hPiwgZm9yCitzZXR0aW5nIGEgZGVmYXVsdCBkYXRhIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgd2hvbGUgcHJvZ3JhbS4gIFRoZQorPGNvZGU+Q09OVkVSVDwvY29kZT4gc3BlY2lmaWVyIG92ZXJyaWRlcyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZjb252ZXJ0PC9zcGFuPjwvc2FtcD4gY29tcGlsZSBvcHRpb25zLgorCisgICA8cD48ZW0+Tm90ZSB0aGF0IHRoZSB2YWx1ZXMgc3BlY2lmaWVkIHZpYSB0aGUgR0ZPUlRSQU5fQ09OVkVSVF9VTklUCitlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIG92ZXJyaWRlIHRoZSBDT05WRVJUIHNwZWNpZmllciBpbiB0aGUKK29wZW4gc3RhdGVtZW50PC9lbT4uICBUaGlzIGlzIHRvIGdpdmUgY29udHJvbCBvdmVyIGRhdGEgZm9ybWF0cyB0bwordXNlcnMgd2hvIGRvIG5vdCBoYXZlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGVpciBwcm9ncmFtIGF2YWlsYWJsZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZERUZBVUxUXzAwNWZSRUNMLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZkRFRkFVTFRfMDA1ZlJFQ0wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU5YTAxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZERUZBVUxUXzAwNWZSRUNMLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0ZPUlRSQU5fREVGQVVMVF9SRUNMIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIiB0aXRsZT0iUnVudGltZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdGT1JUUkFOXzAwNWZPUFRJT05BTF8wMDVmUExVUy5odG1sI0dGT1JUUkFOXzAwNWZPUFRJT05BTF8wMDVmUExVUyIgdGl0bGU9IkdGT1JUUkFOX09QVElPTkFMX1BMVVMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHRk9SVFJBTl8wMDVmTElTVF8wMDVmU0VQQVJBVE9SLmh0bWwjR0ZPUlRSQU5fMDA1ZkxJU1RfMDA1ZlNFUEFSQVRPUiIgdGl0bGU9IkdGT1JUUkFOX0xJU1RfU0VQQVJBVE9SIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdGT1JUUkFOX0RFRkFVTFRfUkVDTCI+PC9hPgorPGEgbmFtZT0iR0ZPUlRSQU5fMDA1ZkRFRkFVTFRfMDA1ZlJFQ0wiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZkxJU1RfMDA1ZlNFUEFSQVRPUi5odG1sI0dGT1JUUkFOXzAwNWZMSVNUXzAwNWZTRVBBUkFUT1IiPkdGT1JUUkFOX0xJU1RfU0VQQVJBVE9SPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTLmh0bWwjR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTIj5HRk9SVFJBTl9PUFRJT05BTF9QTFVTPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjkgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0ZPUlRSQU5fREVGQVVMVF9SRUNMPC9zcGFuPjwvc2FtcD4mbWRhc2g7RGVmYXVsdCByZWNvcmQgbGVuZ3RoIGZvciBuZXcgZmlsZXM8L2gzPgorCis8cD5UaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgZGVmYXVsdCByZWNvcmQgbGVuZ3RoLCBpbgorYnl0ZXMsIGZvciBmaWxlcyB3aGljaCBhcmUgb3BlbmVkIHdpdGhvdXQgYSA8Y29kZT5SRUNMPC9jb2RlPiB0YWcgaW4gdGhlCis8Y29kZT5PUEVOPC9jb2RlPiBzdGF0ZW1lbnQuICBUaGlzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiAgVGhlCitkZWZhdWx0IHZhbHVlIGlzIDEwNzM3NDE4MjQgYnl0ZXMgKDEgR0IpLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZkVSUk9SXzAwNWZCQUNLVFJBQ0UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmRVJST1JfMDA1ZkJBQ0tUUkFDRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMGY0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZkVSUk9SXzAwNWZCQUNLVFJBQ0UuaHRtbApAQCAtMCwwICsxLDcwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HRk9SVFJBTl9FUlJPUl9CQUNLVFJBQ0UgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiIHRpdGxlPSJSdW50aW1lIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZkNPTlZFUlRfMDA1ZlVOSVQuaHRtbCNHRk9SVFJBTl8wMDVmQ09OVkVSVF8wMDVmVU5JVCIgdGl0bGU9IkdGT1JUUkFOX0NPTlZFUlRfVU5JVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHRk9SVFJBTl9FUlJPUl9CQUNLVFJBQ0UiPjwvYT4KKzxhIG5hbWU9IkdGT1JUUkFOXzAwNWZFUlJPUl8wMDVmQkFDS1RSQUNFIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0ZPUlRSQU5fMDA1ZkNPTlZFUlRfMDA1ZlVOSVQuaHRtbCNHRk9SVFJBTl8wMDVmQ09OVkVSVF8wMDVmVU5JVCI+R0ZPUlRSQU5fQ09OVkVSVF9VTklUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjEyIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX0VSUk9SX0JBQ0tUUkFDRTwvc3Bhbj48L3NhbXA+Jm1kYXNoO1Nob3cgYmFja3RyYWNlIG9uIHJ1bi10aW1lIGVycm9yczwvaDM+CisKKzxwPklmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HRk9SVFJBTl9FUlJPUl9CQUNLVFJBQ0U8L3NwYW4+PC9zYW1wPiB2YXJpYWJsZSBpcyBzZXQgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj55PC9zcGFuPjwvc2FtcD4mcnNxdW87LAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ZPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyAob25seSB0aGUgZmlyc3QgbGV0dGVyIGlzIHJlbGV2YW50KSB0aGVuIGEKK2JhY2t0cmFjZSBpcyBwcmludGVkIHdoZW4gYSBzZXJpb3VzIHJ1bi10aW1lIGVycm9yIG9jY3Vycy4gIFRvIGRpc2FibGUKK3RoZSBiYWNrdHJhY2luZywgc2V0IHRoZSB2YXJpYWJsZSB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm48L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK0RlZmF1bHQgaXMgdG8gcHJpbnQgYSBiYWNrdHJhY2UgdW5sZXNzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZm5vLWJhY2t0cmFjZTwvc3Bhbj48L3NhbXA+Citjb21waWxlIG9wdGlvbiB3YXMgdXNlZC4KKworPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Cis8IS0tIFBBUlQgSUk6IExBTkdVQUdFIFJFRkVSRU5DRSAtLT4KKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorPCEtLSAgLS0+Cis8IS0tIEZvcnRyYW4gMjAwMyBhbmQgMjAwOCBTdGF0dXMgLS0+Cis8IS0tICAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmTElTVF8wMDVmU0VQQVJBVE9SLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZkxJU1RfMDA1ZlNFUEFSQVRPUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZGEwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZkxJU1RfMDA1ZlNFUEFSQVRPUi5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdGT1JUUkFOX0xJU1RfU0VQQVJBVE9SIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIiB0aXRsZT0iUnVudGltZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdGT1JUUkFOXzAwNWZERUZBVUxUXzAwNWZSRUNMLmh0bWwjR0ZPUlRSQU5fMDA1ZkRFRkFVTFRfMDA1ZlJFQ0wiIHRpdGxlPSJHRk9SVFJBTl9ERUZBVUxUX1JFQ0wiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHRk9SVFJBTl8wMDVmQ09OVkVSVF8wMDVmVU5JVC5odG1sI0dGT1JUUkFOXzAwNWZDT05WRVJUXzAwNWZVTklUIiB0aXRsZT0iR0ZPUlRSQU5fQ09OVkVSVF9VTklUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdGT1JUUkFOX0xJU1RfU0VQQVJBVE9SIj48L2E+Cis8YSBuYW1lPSJHRk9SVFJBTl8wMDVmTElTVF8wMDVmU0VQQVJBVE9SIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdGT1JUUkFOXzAwNWZDT05WRVJUXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZkNPTlZFUlRfMDA1ZlVOSVQiPkdGT1JUUkFOX0NPTlZFUlRfVU5JVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdGT1JUUkFOXzAwNWZERUZBVUxUXzAwNWZSRUNMLmh0bWwjR0ZPUlRSQU5fMDA1ZkRFRkFVTFRfMDA1ZlJFQ0wiPkdGT1JUUkFOX0RFRkFVTFRfUkVDTDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIj5SdW50aW1lPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xMCA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HRk9SVFJBTl9MSVNUX1NFUEFSQVRPUjwvc3Bhbj48L3NhbXA+Jm1kYXNoO1NlcGFyYXRvciBmb3IgbGlzdCBvdXRwdXQ8L2gzPgorCis8cD5UaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgc2VwYXJhdG9yIHdoZW4gd3JpdGluZworbGlzdC1kaXJlY3RlZCBvdXRwdXQuICBJdCBtYXkgY29udGFpbiBhbnkgbnVtYmVyIG9mIHNwYWNlcyBhbmQKK2F0IG1vc3Qgb25lIGNvbW1hLiAgSWYgeW91IHNwZWNpZnkgdGhpcyBvbiB0aGUgY29tbWFuZCBsaW5lLAorYmUgc3VyZSB0byBxdW90ZSBzcGFjZXMsIGFzIGluCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgJCBHRk9SVFJBTl9MSVNUX1NFUEFSQVRPUj0nICAsICAnIC4vYS5vdXQKKzwvcHJlPgorICAgPHA+d2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+YS5vdXQ8L3NwYW4+PC9zYW1wPiBpcyB0aGUgY29tcGlsZWQgRm9ydHJhbiBwcm9ncmFtIHRoYXQgeW91IHdhbnQgdG8gcnVuLiAKK0RlZmF1bHQgaXMgYSBzaW5nbGUgc3BhY2UuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmT1BUSU9OQUxfMDA1ZlBMVVMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmT1BUSU9OQUxfMDA1ZlBMVVMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQxODBiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZPUFRJT05BTF8wMDVmUExVUy5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdGT1JUUkFOX09QVElPTkFMX1BMVVMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiIHRpdGxlPSJSdW50aW1lIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNIT1dfMDA1ZkxPQ1VTLmh0bWwjR0ZPUlRSQU5fMDA1ZlNIT1dfMDA1ZkxPQ1VTIiB0aXRsZT0iR0ZPUlRSQU5fU0hPV19MT0NVUyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdGT1JUUkFOXzAwNWZERUZBVUxUXzAwNWZSRUNMLmh0bWwjR0ZPUlRSQU5fMDA1ZkRFRkFVTFRfMDA1ZlJFQ0wiIHRpdGxlPSJHRk9SVFJBTl9ERUZBVUxUX1JFQ0wiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR0ZPUlRSQU5fT1BUSU9OQUxfUExVUyI+PC9hPgorPGEgbmFtZT0iR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdGT1JUUkFOXzAwNWZERUZBVUxUXzAwNWZSRUNMLmh0bWwjR0ZPUlRSQU5fMDA1ZkRFRkFVTFRfMDA1ZlJFQ0wiPkdGT1JUUkFOX0RFRkFVTFRfUkVDTDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdGT1JUUkFOXzAwNWZTSE9XXzAwNWZMT0NVUy5odG1sI0dGT1JUUkFOXzAwNWZTSE9XXzAwNWZMT0NVUyI+R0ZPUlRSQU5fU0hPV19MT0NVUzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIj5SdW50aW1lPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My44IDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX09QVElPTkFMX1BMVVM8L3NwYW4+PC9zYW1wPiZtZGFzaDtQcmludCBsZWFkaW5nICsgd2hlcmUgcGVybWl0dGVkPC9oMz4KKworPHA+SWYgdGhlIGZpcnN0IGxldHRlciBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+WTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssCithIHBsdXMgc2lnbiBpcyBwcmludGVkCit3aGVyZSBwZXJtaXR0ZWQgYnkgdGhlIEZvcnRyYW4gc3RhbmRhcmQuICBJZiB0aGUgZmlyc3QgbGV0dGVyCitpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm48L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGEgcGx1cyBzaWduIGlzIG5vdCBwcmludGVkCitpbiBtb3N0IGNhc2VzLiAgRGVmYXVsdCBpcyBub3QgdG8gcHJpbnQgcGx1cyBzaWducy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZTSE9XXzAwNWZMT0NVUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZTSE9XXzAwNWZMT0NVUy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODY0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZlNIT1dfMDA1ZkxPQ1VTLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0ZPUlRSQU5fU0hPV19MT0NVUyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSdW50aW1lLmh0bWwjUnVudGltZSIgdGl0bGU9IlJ1bnRpbWUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHRk9SVFJBTl8wMDVmVU5CVUZGRVJFRF8wMDVmUFJFQ09OTkVDVEVELmh0bWwjR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZlBSRUNPTk5FQ1RFRCIgdGl0bGU9IkdGT1JUUkFOX1VOQlVGRkVSRURfUFJFQ09OTkVDVEVEIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTLmh0bWwjR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTIiB0aXRsZT0iR0ZPUlRSQU5fT1BUSU9OQUxfUExVUyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHRk9SVFJBTl9TSE9XX0xPQ1VTIj48L2E+Cis8YSBuYW1lPSJHRk9SVFJBTl8wMDVmU0hPV18wMDVmTE9DVVMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTLmh0bWwjR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTIj5HRk9SVFJBTl9PUFRJT05BTF9QTFVTPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZlBSRUNPTk5FQ1RFRC5odG1sI0dGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZQUkVDT05ORUNURUQiPkdGT1JUUkFOX1VOQlVGRkVSRURfUFJFQ09OTkVDVEVEPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjcgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0ZPUlRSQU5fU0hPV19MT0NVUzwvc3Bhbj48L3NhbXA+Jm1kYXNoO1Nob3cgbG9jYXRpb24gZm9yIHJ1bnRpbWUgZXJyb3JzPC9oMz4KKworPHA+SWYgdGhlIGZpcnN0IGxldHRlciBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+WTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGZpbGVuYW1lIGFuZAorbGluZSBudW1iZXJzIGZvciBydW50aW1lIGVycm9ycyBhcmUgcHJpbnRlZC4gIElmIHRoZSBmaXJzdCBsZXR0ZXIgaXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5OPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgZG8gbm90IHByaW50IGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlcnMKK2ZvciBydW50aW1lIGVycm9ycy4gIFRoZSBkZWZhdWx0IGlzIHRvIHByaW50IHRoZSBsb2NhdGlvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZTVERFUlJfMDA1ZlVOSVQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmU1RERVJSXzAwNWZVTklULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM5MGY1OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmU1RERVJSXzAwNWZVTklULmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0ZPUlRSQU5fU1RERVJSX1VOSVQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiIHRpdGxlPSJSdW50aW1lIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNURE9VVF8wMDVmVU5JVC5odG1sI0dGT1JUUkFOXzAwNWZTVERPVVRfMDA1ZlVOSVQiIHRpdGxlPSJHRk9SVFJBTl9TVERPVVRfVU5JVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZBTEwuaHRtbCNHRk9SVFJBTl8wMDVmVU5CVUZGRVJFRF8wMDVmQUxMIiB0aXRsZT0iR0ZPUlRSQU5fVU5CVUZGRVJFRF9BTEwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR0ZPUlRSQU5fU1RERVJSX1VOSVQiPjwvYT4KKzxhIG5hbWU9IkdGT1JUUkFOXzAwNWZTVERFUlJfMDA1ZlVOSVQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZkFMTC5odG1sI0dGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZBTEwiPkdGT1JUUkFOX1VOQlVGRkVSRURfQUxMPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNURE9VVF8wMDVmVU5JVC5odG1sI0dGT1JUUkFOXzAwNWZTVERPVVRfMDA1ZlVOSVQiPkdGT1JUUkFOX1NURE9VVF9VTklUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjQgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0ZPUlRSQU5fU1RERVJSX1VOSVQ8L3NwYW4+PC9zYW1wPiZtZGFzaDtVbml0IG51bWJlciBmb3Igc3RhbmRhcmQgZXJyb3I8L2gzPgorCis8cD5UaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgdW5pdCBudW1iZXIKK3ByZWNvbm5lY3RlZCB0byBzdGFuZGFyZCBlcnJvci4gIFRoaXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZTVERJTl8wMDVmVU5JVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZTVERJTl8wMDVmVU5JVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YmUzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklULmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0ZPUlRSQU5fU1RESU5fVU5JVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSdW50aW1lLmh0bWwjUnVudGltZSIgdGl0bGU9IlJ1bnRpbWUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUTVBESVIuaHRtbCNUTVBESVIiIHRpdGxlPSJUTVBESVIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHRk9SVFJBTl8wMDVmU1RET1VUXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURE9VVF8wMDVmVU5JVCIgdGl0bGU9IkdGT1JUUkFOX1NURE9VVF9VTklUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdGT1JUUkFOX1NURElOX1VOSVQiPjwvYT4KKzxhIG5hbWU9IkdGT1JUUkFOXzAwNWZTVERJTl8wMDVmVU5JVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHRk9SVFJBTl8wMDVmU1RET1VUXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURE9VVF8wMDVmVU5JVCI+R0ZPUlRSQU5fU1RET1VUX1VOSVQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUTVBESVIuaHRtbCNUTVBESVIiPlRNUERJUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIj5SdW50aW1lPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX1NURElOX1VOSVQ8L3NwYW4+PC9zYW1wPiZtZGFzaDtVbml0IG51bWJlciBmb3Igc3RhbmRhcmQgaW5wdXQ8L2gzPgorCis8cD5UaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgdW5pdCBudW1iZXIKK3ByZWNvbm5lY3RlZCB0byBzdGFuZGFyZCBpbnB1dC4gIFRoaXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZTVERPVVRfMDA1ZlVOSVQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmU1RET1VUXzAwNWZVTklULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOWI5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmU1RET1VUXzAwNWZVTklULmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R0ZPUlRSQU5fU1RET1VUX1VOSVQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiIHRpdGxlPSJSdW50aW1lIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklUIiB0aXRsZT0iR0ZPUlRSQU5fU1RESU5fVU5JVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdGT1JUUkFOXzAwNWZTVERFUlJfMDA1ZlVOSVQuaHRtbCNHRk9SVFJBTl8wMDVmU1RERVJSXzAwNWZVTklUIiB0aXRsZT0iR0ZPUlRSQU5fU1RERVJSX1VOSVQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR0ZPUlRSQU5fU1RET1VUX1VOSVQiPjwvYT4KKzxhIG5hbWU9IkdGT1JUUkFOXzAwNWZTVERPVVRfMDA1ZlVOSVQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNUREVSUl8wMDVmVU5JVC5odG1sI0dGT1JUUkFOXzAwNWZTVERFUlJfMDA1ZlVOSVQiPkdGT1JUUkFOX1NUREVSUl9VTklUPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklUIj5HRk9SVFJBTl9TVERJTl9VTklUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjMgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0ZPUlRSQU5fU1RET1VUX1VOSVQ8L3NwYW4+PC9zYW1wPiZtZGFzaDtVbml0IG51bWJlciBmb3Igc3RhbmRhcmQgb3V0cHV0PC9oMz4KKworPHA+VGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIHVuaXQgbnVtYmVyCitwcmVjb25uZWN0ZWQgdG8gc3RhbmRhcmQgb3V0cHV0LiAgVGhpcyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZkFMTC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZBTEwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjQyNzUzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZBTEwuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HRk9SVFJBTl9VTkJVRkZFUkVEX0FMTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSdW50aW1lLmh0bWwjUnVudGltZSIgdGl0bGU9IlJ1bnRpbWUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHRk9SVFJBTl8wMDVmU1RERVJSXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNUREVSUl8wMDVmVU5JVCIgdGl0bGU9IkdGT1JUUkFOX1NUREVSUl9VTklUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZlBSRUNPTk5FQ1RFRC5odG1sI0dGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZQUkVDT05ORUNURUQiIHRpdGxlPSJHRk9SVFJBTl9VTkJVRkZFUkVEX1BSRUNPTk5FQ1RFRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJHRk9SVFJBTl9VTkJVRkZFUkVEX0FMTCI+PC9hPgorPGEgbmFtZT0iR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZkFMTCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJHRk9SVFJBTl8wMDVmVU5CVUZGRVJFRF8wMDVmUFJFQ09OTkVDVEVELmh0bWwjR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZlBSRUNPTk5FQ1RFRCI+R0ZPUlRSQU5fVU5CVUZGRVJFRF9QUkVDT05ORUNURUQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHRk9SVFJBTl8wMDVmU1RERVJSXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNUREVSUl8wMDVmVU5JVCI+R0ZPUlRSQU5fU1RERVJSX1VOSVQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSdW50aW1lLmh0bWwjUnVudGltZSI+UnVudGltZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HRk9SVFJBTl9VTkJVRkZFUkVEX0FMTDwvc3Bhbj48L3NhbXA+Jm1kYXNoO0RvIG5vdCBidWZmZXIgSS9PIG9uIGFsbCB1bml0czwvaDM+CisKKzxwPlRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udHJvbHMgd2hldGhlciBhbGwgSS9PIGlzIHVuYnVmZmVyZWQuICBJZgordGhlIGZpcnN0IGxldHRlciBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnk8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+WTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFsbCBJL08gaXMKK3VuYnVmZmVyZWQuICBUaGlzIHdpbGwgc2xvdyBkb3duIHNtYWxsIHNlcXVlbnRpYWwgcmVhZHMgYW5kIHdyaXRlcy4gIElmCit0aGUgZmlyc3QgbGV0dGVyIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5OPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgSS9PIGlzIGJ1ZmZlcmVkLiAKK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HRk9SVFJBTl8wMDVmVU5CVUZGRVJFRF8wMDVmUFJFQ09OTkVDVEVELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZlBSRUNPTk5FQ1RFRC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjBlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZlBSRUNPTk5FQ1RFRC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdGT1JUUkFOX1VOQlVGRkVSRURfUFJFQ09OTkVDVEVEIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIiB0aXRsZT0iUnVudGltZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZBTEwuaHRtbCNHRk9SVFJBTl8wMDVmVU5CVUZGRVJFRF8wMDVmQUxMIiB0aXRsZT0iR0ZPUlRSQU5fVU5CVUZGRVJFRF9BTEwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHRk9SVFJBTl8wMDVmU0hPV18wMDVmTE9DVVMuaHRtbCNHRk9SVFJBTl8wMDVmU0hPV18wMDVmTE9DVVMiIHRpdGxlPSJHRk9SVFJBTl9TSE9XX0xPQ1VTIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdGT1JUUkFOX1VOQlVGRkVSRURfUFJFQ09OTkVDVEVEIj48L2E+Cis8YSBuYW1lPSJHRk9SVFJBTl8wMDVmVU5CVUZGRVJFRF8wMDVmUFJFQ09OTkVDVEVEIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdGT1JUUkFOXzAwNWZTSE9XXzAwNWZMT0NVUy5odG1sI0dGT1JUUkFOXzAwNWZTSE9XXzAwNWZMT0NVUyI+R0ZPUlRSQU5fU0hPV19MT0NVUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZBTEwuaHRtbCNHRk9SVFJBTl8wMDVmVU5CVUZGRVJFRF8wMDVmQUxMIj5HRk9SVFJBTl9VTkJVRkZFUkVEX0FMTDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJ1bnRpbWUuaHRtbCNSdW50aW1lIj5SdW50aW1lPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My42IDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX1VOQlVGRkVSRURfUFJFQ09OTkVDVEVEPC9zcGFuPjwvc2FtcD4mbWRhc2g7RG8gbm90IGJ1ZmZlciBJL08gb24gcHJlY29ubmVjdGVkIHVuaXRzPC9oMz4KKworPHA+VGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVkIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX1VOQlVGRkVSRURfUFJFQ09OTkVDVEVEPC9zcGFuPjwvc2FtcD4gY29udHJvbHMKK3doZXRoZXIgSS9PIG9uIGEgcHJlY29ubmVjdGVkIHVuaXQgKGkuZS4gU1RET1VUIG9yIFNUREVSUikgaXMgdW5idWZmZXJlZC4gIElmCit0aGUgZmlyc3QgbGV0dGVyIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+eTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ZPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgSS9PIGlzIHVuYnVmZmVyZWQuICBUaGlzCit3aWxsIHNsb3cgZG93biBzbWFsbCBzZXF1ZW50aWFsIHJlYWRzIGFuZCB3cml0ZXMuICBJZiB0aGUgZmlyc3QgbGV0dGVyCitpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm48L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjA8L3NwYW4+PC9zYW1wPiZyc3F1bzssIEkvTyBpcyBidWZmZXJlZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HTVRJTUUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HTVRJTUUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGVkYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dNVElNRS5odG1sCkBAIC0wLDAgKzEsOTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdNVElNRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHRVRVSUQuaHRtbCNHRVRVSUQiIHRpdGxlPSJHRVRVSUQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIT1NUTk0uaHRtbCNIT1NUTk0iIHRpdGxlPSJIT1NUTk0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR01USU1FIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkhPU1ROTS5odG1sI0hPU1ROTSI+SE9TVE5NPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iR0VUVUlELmh0bWwjR0VUVUlEIj5HRVRVSUQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTA4IDxjb2RlPkdNVElNRTwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IHRpbWUgdG8gR01UIGluZm88L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1HTVRJTUUtNzAwIj48L2E+PGEgbmFtZT0iaW5kZXgtdGltZV8wMDJjLWNvbnZlcnNpb24tdG8tR01ULWluZm8tNzAxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+R2l2ZW4gYSBzeXN0ZW0gdGltZSB2YWx1ZSA8dmFyPlRJTUU8L3Zhcj4gKGFzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5USU1FODwvY29kZT4KK2ludHJpbnNpYyksIGZpbGxzIDx2YXI+VkFMVUVTPC92YXI+IHdpdGggdmFsdWVzIGV4dHJhY3RlZCBmcm9tIGl0IGFwcHJvcHJpYXRlCit0byB0aGUgVVRDIHRpbWUgem9uZSAoVW5pdmVyc2FsIENvb3JkaW5hdGVkIFRpbWUsIGFsc28ga25vd24gaW4gc29tZQorY291bnRyaWVzIGFzIEdNVCwgR3JlZW53aWNoIE1lYW4gVGltZSksIHVzaW5nIDxjb2RlPmdtdGltZSgzKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBHTVRJTUUoVElNRSwgVkFMVUVTKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlRJTUU8L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+QW4gPGNvZGU+SU5URUdFUjwvY29kZT4gc2NhbGFyIGV4cHJlc3Npb24KK2NvcnJlc3BvbmRpbmcgdG8gYSBzeXN0ZW0gdGltZSwgd2l0aCA8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlZBTFVFUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+QSBkZWZhdWx0IDxjb2RlPklOVEVHRVI8L2NvZGU+IGFycmF5IHdpdGggOSBlbGVtZW50cywKK3dpdGggPGNvZGU+SU5URU5UKE9VVCk8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSBlbGVtZW50cyBvZiA8dmFyPlZBTFVFUzwvdmFyPiBhcmUgYXNzaWduZWQgYXMgZm9sbG93czoKKyAgICAgICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+U2Vjb25kcyBhZnRlciB0aGUgbWludXRlLCByYW5nZSAwJm5kYXNoOzU5IG9yIDAmbmRhc2g7NjEgdG8gYWxsb3cgZm9yIGxlYXAKK3NlY29uZHMKKzxsaT5NaW51dGVzIGFmdGVyIHRoZSBob3VyLCByYW5nZSAwJm5kYXNoOzU5Cis8bGk+SG91cnMgcGFzdCBtaWRuaWdodCwgcmFuZ2UgMCZuZGFzaDsyMworPGxpPkRheSBvZiBtb250aCwgcmFuZ2UgMCZuZGFzaDszMQorPGxpPk51bWJlciBvZiBtb250aHMgc2luY2UgSmFudWFyeSwgcmFuZ2UgMCZuZGFzaDsxMgorPGxpPlllYXJzIHNpbmNlIDE5MDAKKzxsaT5OdW1iZXIgb2YgZGF5cyBzaW5jZSBTdW5kYXksIHJhbmdlIDAmbmRhc2g7NgorPGxpPkRheXMgc2luY2UgSmFudWFyeSAxCis8bGk+RGF5bGlnaHQgc2F2aW5ncyBpbmRpY2F0b3I6IHBvc2l0aXZlIGlmIGRheWxpZ2h0IHNhdmluZ3MgaXMgaW4KK2VmZmVjdCwgemVybyBpZiBub3QsIGFuZCBuZWdhdGl2ZSBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkNUSU1FLmh0bWwjQ1RJTUUiPkNUSU1FPC9hPiwgPGEgaHJlZj0iTFRJTUUuaHRtbCNMVElNRSI+TFRJTUU8L2E+LCA8YSBocmVmPSJUSU1FLmh0bWwjVElNRSI+VElNRTwvYT4sIDxhIGhyZWY9IlRJTUU4Lmh0bWwjVElNRTgiPlRJTUU4PC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR05VLUZvcnRyYW4tQ29tcGlsZXItRGlyZWN0aXZlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dOVS1Gb3J0cmFuLUNvbXBpbGVyLURpcmVjdGl2ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWQ5NmNlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0dOVS1Gb3J0cmFuLUNvbXBpbGVyLURpcmVjdGl2ZXMuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R05VIEZvcnRyYW4gQ29tcGlsZXIgRGlyZWN0aXZlcyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmcuaHRtbCNNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmciIHRpdGxlPSJNaXhlZC1MYW5ndWFnZSBQcm9ncmFtbWluZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkludGVyb3BlcmFiaWxpdHktd2l0aC1DLmh0bWwjSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMiIHRpdGxlPSJJbnRlcm9wZXJhYmlsaXR5IHdpdGggQyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik5vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0uaHRtbCNOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtIiB0aXRsZT0iTm9uLUZvcnRyYW4gTWFpbiBQcm9ncmFtIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdOVS1Gb3J0cmFuLUNvbXBpbGVyLURpcmVjdGl2ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbS5odG1sI05vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0iPk5vbi1Gb3J0cmFuIE1haW4gUHJvZ3JhbTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkludGVyb3BlcmFiaWxpdHktd2l0aC1DLmh0bWwjSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMiPkludGVyb3BlcmFiaWxpdHkgd2l0aCBDPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwjTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nIj5NaXhlZC1MYW5ndWFnZSBQcm9ncmFtbWluZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMiBHTlUgRm9ydHJhbiBDb21waWxlciBEaXJlY3RpdmVzPC9oMz4KKworPHA+VGhlIEZvcnRyYW4gc3RhbmRhcmQgZGVzY3JpYmVzIGhvdyBhIGNvbmZvcm1pbmcgcHJvZ3JhbSBzaGFsbAorYmVoYXZlOyBob3dldmVyLCB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gaXMgbm90IHN0YW5kYXJkaXplZC4gIEluIG9yZGVyCit0byBhbGxvdyB0aGUgdXNlciB0byBjaG9vc2Ugc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgY29tcGlsZXIKK2RpcmVjdGl2ZXMgY2FuIGJlIHVzZWQgdG8gc2V0IGF0dHJpYnV0ZXMgb2YgdmFyaWFibGVzIGFuZCBwcm9jZWR1cmVzCit3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkLiAgV2hldGhlciBhIGdpdmVuIGF0dHJpYnV0ZSBpcworc3VwcG9ydGVkIGFuZCBpdHMgZXhhY3QgZWZmZWN0cyBkZXBlbmQgb24gYm90aCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQKK29uIHRoZSBwcm9jZXNzb3I7IHNlZQorPGEgaHJlZj0iLi4vZ2NjL2luZGV4Lmh0bWwjVG9wIj5DIEV4dGVuc2lvbnM8L2E+Citmb3IgZGV0YWlscy4KKworICAgPHA+Rm9yIHByb2NlZHVyZXMgYW5kIHByb2NlZHVyZSBwb2ludGVycywgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGNhbgorYmUgdXNlZCB0byBjaGFuZ2UgdGhlIGNhbGxpbmcgY29udmVudGlvbjoKKworICAgICA8dWw+Cis8bGk+PGNvZGU+Q0RFQ0w8L2NvZGU+ICZuZGFzaDsgc3RhbmRhcmQgQyBjYWxsaW5nIGNvbnZlbnRpb24KKzxsaT48Y29kZT5TVERDQUxMPC9jb2RlPiAmbmRhc2g7IGNvbnZlbnRpb24gd2hlcmUgdGhlIGNhbGxlZCBwcm9jZWR1cmUgcG9wcyB0aGUgc3RhY2sKKzxsaT48Y29kZT5GQVNUQ0FMTDwvY29kZT4gJm5kYXNoOyBwYXJ0IG9mIHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB2aWEgcmVnaXN0ZXJzCitpbnN0ZWFkIHVzaW5nIHRoZSBzdGFjaworPC91bD4KKworICAgPHA+QmVzaWRlcyBjaGFuZ2luZyB0aGUgY2FsbGluZyBjb252ZW50aW9uLCB0aGUgYXR0cmlidXRlcyBhbHNvIGluZmx1ZW5jZQordGhlIGRlY29yYXRpb24gb2YgdGhlIHN5bWJvbCBuYW1lLCBlLmcuLCBieSBhIGxlYWRpbmcgdW5kZXJzY29yZSBvciBieQorYSB0cmFpbGluZyBhdC1zaWduIGZvbGxvd2VkIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgb24gdGhlIHN0YWNrLiAgV2hlbgorYXNzaWduaW5nIGEgcHJvY2VkdXJlIHRvIGEgcHJvY2VkdXJlIHBvaW50ZXIsIGJvdGggc2hvdWxkIHVzZSB0aGUgc2FtZQorY2FsbGluZyBjb252ZW50aW9uLgorCisgICA8cD5PbiBzb21lIHN5c3RlbXMsIHByb2NlZHVyZXMgYW5kIGdsb2JhbCB2YXJpYWJsZXMgKG1vZHVsZSB2YXJpYWJsZXMgYW5kCis8Y29kZT5DT01NT048L2NvZGU+IGJsb2NrcykgbmVlZCBzcGVjaWFsIGhhbmRsaW5nIHRvIGJlIGFjY2Vzc2libGUgd2hlbiB0aGV5CithcmUgaW4gYSBzaGFyZWQgbGlicmFyeS4gIFRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgYXZhaWxhYmxlOgorCisgICAgIDx1bD4KKzxsaT48Y29kZT5ETExFWFBPUlQ8L2NvZGU+ICZuZGFzaDsgcHJvdmlkZSBhIGdsb2JhbCBwb2ludGVyIHRvIGEgcG9pbnRlciBpbiB0aGUgRExMCis8bGk+PGNvZGU+RExMSU1QT1JUPC9jb2RlPiAmbmRhc2g7IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gb3IgdmFyaWFibGUgdXNpbmcgYSBnbG9iYWwgcG9pbnRlcgorPC91bD4KKworICAgPHA+VGhlIGF0dHJpYnV0ZXMgYXJlIHNwZWNpZmllZCB1c2luZyB0aGUgc3ludGF4CisKKyAgIDxwPjxjb2RlPiFHQ0MkIEFUVFJJQlVURVM8L2NvZGU+IDx2YXI+YXR0cmlidXRlLWxpc3Q8L3Zhcj4gPGNvZGU+Ojo8L2NvZGU+IDx2YXI+dmFyaWFibGUtbGlzdDwvdmFyPgorCisgICA8cD53aGVyZSBpbiBmcmVlLWZvcm0gc291cmNlIGNvZGUgb25seSB3aGl0ZXNwYWNlIGlzIGFsbG93ZWQgYmVmb3JlIDxjb2RlPiFHQ0MkPC9jb2RlPgorYW5kIGluIGZpeGVkLWZvcm0gc291cmNlIGNvZGUgPGNvZGU+IUdDQyQ8L2NvZGU+LCA8Y29kZT5jR0NDJDwvY29kZT4gb3IgPGNvZGU+KkdDQyQ8L2NvZGU+IHNoYWxsCitzdGFydCBpbiB0aGUgZmlyc3QgY29sdW1uLgorCisgICA8cD5Gb3IgcHJvY2VkdXJlcywgdGhlIGNvbXBpbGVyIGRpcmVjdGl2ZXMgc2hhbGwgYmUgcGxhY2VkIGludG8gdGhlIGJvZHkKK29mIHRoZSBwcm9jZWR1cmU7IGZvciB2YXJpYWJsZXMgYW5kIHByb2NlZHVyZSBwb2ludGVycywgdGhleSBzaGFsbCBiZSBpbgordGhlIHNhbWUgZGVjbGFyYXRpb24gcGFydCBhcyB0aGUgdmFyaWFibGUgb3IgcHJvY2VkdXJlIHBvaW50ZXIuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HTlUtRm9ydHJhbi1hbmQtRzc3Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR05VLUZvcnRyYW4tYW5kLUc3Ny5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGRlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR05VLUZvcnRyYW4tYW5kLUc3Ny5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdOVSBGb3J0cmFuIGFuZCBHNzcgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cm9kdWN0aW9uLmh0bWwjSW50cm9kdWN0aW9uIiB0aXRsZT0iSW50cm9kdWN0aW9uIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiIgdGl0bGU9IlByZXByb2Nlc3NpbmcgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJvamVjdC1TdGF0dXMuaHRtbCNQcm9qZWN0LVN0YXR1cyIgdGl0bGU9IlByb2plY3QgU3RhdHVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdOVS1Gb3J0cmFuLWFuZC1HNzciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUHJvamVjdC1TdGF0dXMuaHRtbCNQcm9qZWN0LVN0YXR1cyI+UHJvamVjdCBTdGF0dXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbi5odG1sI1ByZXByb2Nlc3NpbmctYW5kLWNvbmRpdGlvbmFsLWNvbXBpbGF0aW9uIj5QcmVwcm9jZXNzaW5nIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJvZHVjdGlvbi5odG1sI0ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS40IEdOVSBGb3J0cmFuIGFuZCBHNzc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1Gb3J0cmFuLTc3LTkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3Ymc3N18wMDdkLTEwIj48L2E+CitUaGUgR05VIEZvcnRyYW4gY29tcGlsZXIgaXMgdGhlIHN1Y2Nlc3NvciB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Zzc3PC9zcGFuPjwvc2FtcD4sIHRoZSBGb3J0cmFuCis3NyBmcm9udCBlbmQgaW5jbHVkZWQgaW4gR0NDIHByaW9yIHRvIHZlcnNpb24gNC4gIEl0IGlzIGFuIGVudGlyZWx5IG5ldworcHJvZ3JhbSB0aGF0IGhhcyBiZWVuIGRlc2lnbmVkIHRvIHByb3ZpZGUgRm9ydHJhbiA5NSBzdXBwb3J0IGFuZAorZXh0ZW5zaWJpbGl0eSBmb3IgZnV0dXJlIEZvcnRyYW4gbGFuZ3VhZ2Ugc3RhbmRhcmRzLCBhcyB3ZWxsIGFzIHByb3ZpZGluZworYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIEZvcnRyYW4gNzcgYW5kIG5lYXJseSBhbGwgb2YgdGhlIEdOVSBsYW5ndWFnZQorZXh0ZW5zaW9ucyBzdXBwb3J0ZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmc3Nzwvc3Bhbj48L3NhbXA+LgorCis8IS0tICAtLT4KKzwhLS0gUHJvamVjdCBTdGF0dXMgLS0+Cis8IS0tICAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HTlUtRm9ydHJhbi1hbmQtR0NDLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR05VLUZvcnRyYW4tYW5kLUdDQy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjA0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR05VLUZvcnRyYW4tYW5kLUdDQy5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkdOVSBGb3J0cmFuIGFuZCBHQ0MgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cm9kdWN0aW9uLmh0bWwjSW50cm9kdWN0aW9uIiB0aXRsZT0iSW50cm9kdWN0aW9uIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQWJvdXQtR05VLUZvcnRyYW4uaHRtbCNBYm91dC1HTlUtRm9ydHJhbiIgdGl0bGU9IkFib3V0IEdOVSBGb3J0cmFuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiIgdGl0bGU9IlByZXByb2Nlc3NpbmcgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdOVS1Gb3J0cmFuLWFuZC1HQ0MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiI+UHJlcHJvY2Vzc2luZyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBYm91dC1HTlUtRm9ydHJhbi5odG1sI0Fib3V0LUdOVS1Gb3J0cmFuIj5BYm91dCBHTlUgRm9ydHJhbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJvZHVjdGlvbi5odG1sI0ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4yIEdOVSBGb3J0cmFuIGFuZCBHQ0M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1HTlUtQ29tcGlsZXItQ29sbGVjdGlvbi0yIj48L2E+PGEgbmFtZT0iaW5kZXgtR0NDLTMiPjwvYT4KK0dOVSBGb3J0cmFuIGlzIGEgcGFydCBvZiBHQ0MsIHRoZSA8ZGZuPkdOVSBDb21waWxlciBDb2xsZWN0aW9uPC9kZm4+LiAgR0NDCitjb25zaXN0cyBvZiBhIGNvbGxlY3Rpb24gb2YgZnJvbnQgZW5kcyBmb3IgdmFyaW91cyBsYW5ndWFnZXMsIHdoaWNoCit0cmFuc2xhdGUgdGhlIHNvdXJjZSBjb2RlIGludG8gYSBsYW5ndWFnZS1pbmRlcGVuZGVudCBmb3JtIGNhbGxlZAorPGRmbj5HRU5FUklDPC9kZm4+LiAgVGhpcyBpcyB0aGVuIHByb2Nlc3NlZCBieSBhIGNvbW1vbiBtaWRkbGUgZW5kIHdoaWNoCitwcm92aWRlcyBvcHRpbWl6YXRpb24sIGFuZCB0aGVuIHBhc3NlZCB0byBvbmUgb2YgYSBjb2xsZWN0aW9uIG9mIGJhY2sKK2VuZHMgd2hpY2ggZ2VuZXJhdGUgY29kZSBmb3IgZGlmZmVyZW50IGNvbXB1dGVyIGFyY2hpdGVjdHVyZXMgYW5kCitvcGVyYXRpbmcgc3lzdGVtcy4KKworICAgPHA+RnVuY3Rpb25hbGx5LCB0aGlzIGlzIGltcGxlbWVudGVkIHdpdGggYSBkcml2ZXIgcHJvZ3JhbSAoPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+KQord2hpY2ggcHJvdmlkZXMgdGhlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIHRoZSBjb21waWxlci4gIEl0IGNhbGxzCit0aGUgcmVsZXZhbnQgY29tcGlsZXIgZnJvbnQtZW5kIHByb2dyYW0gKGUuZy4sIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5mOTUxPC9zcGFuPjwvc2FtcD4gZm9yCitGb3J0cmFuKSBmb3IgZWFjaCBmaWxlIGluIHRoZSBzb3VyY2UgY29kZSwgYW5kIHRoZW4gY2FsbHMgdGhlIGFzc2VtYmxlcgorYW5kIGxpbmtlciBhcyBhcHByb3ByaWF0ZSB0byBwcm9kdWNlIHRoZSBjb21waWxlZCBvdXRwdXQuICBJbiBhIGNvcHkgb2YKK0dDQyB3aGljaCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIEZvcnRyYW4gbGFuZ3VhZ2Ugc3VwcG9ydCBlbmFibGVkLAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+IHdpbGwgcmVjb2duaXplIGZpbGVzIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5mPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZm9yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZnRuPC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmY5MDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmY5NTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmYwMzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmYwODwvc3Bhbj48L3NhbXA+IGV4dGVuc2lvbnMgYXMKK0ZvcnRyYW4gc291cmNlIGNvZGUsIGFuZCBjb21waWxlIGl0IGFjY29yZGluZ2x5LiAgQSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPgorZHJpdmVyIHByb2dyYW0gaXMgYWxzbyBwcm92aWRlZCwgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nY2M8L3NwYW4+PC9zYW1wPgorZXhjZXB0IHRoYXQgaXQgYXV0b21hdGljYWxseSBsaW5rcyB0aGUgRm9ydHJhbiBydW50aW1lIGxpYnJhcmllcyBpbnRvIHRoZQorY29tcGlsZWQgcHJvZ3JhbS4KKworICAgPHA+U291cmNlIGZpbGVzIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5mPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZm9yPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZnBwPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZnRuPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRjwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5GT1I8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5GUFA8L3NwYW4+PC9zYW1wPiwgYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRlROPC9zcGFuPjwvc2FtcD4gZXh0ZW5zaW9ucyBhcmUgdHJlYXRlZCBhcyBmaXhlZCBmb3JtLiAKK1NvdXJjZSBmaWxlcyB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZjkwPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZjk1PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZjAzPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZjA4PC9zcGFuPjwvc2FtcD4sCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LkY5MDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LkY5NTwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LkYwMzwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LkYwODwvc3Bhbj48L3NhbXA+IGV4dGVuc2lvbnMgYXJlCit0cmVhdGVkIGFzIGZyZWUgZm9ybS4gIFRoZSBjYXBpdGFsaXplZCB2ZXJzaW9ucyBvZiBlaXRoZXIgZm9ybSBhcmUgcnVuCit0aHJvdWdoIHByZXByb2Nlc3NpbmcuICBTb3VyY2UgZmlsZXMgd2l0aCB0aGUgbG93ZXIgY2FzZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmZwcDwvc3Bhbj48L3NhbXA+CitleHRlbnNpb24gYXJlIGFsc28gcnVuIHRocm91Z2ggcHJlcHJvY2Vzc2luZy4KKworICAgPHA+VGhpcyBtYW51YWwgc3BlY2lmaWNhbGx5IGRvY3VtZW50cyB0aGUgRm9ydHJhbiBmcm9udCBlbmQsIHdoaWNoIGhhbmRsZXMKK3RoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSdzIHN5bnRheCBhbmQgc2VtYW50aWNzLiAgVGhlIGFzcGVjdHMgb2YgR0NDCit3aGljaCByZWxhdGUgdG8gdGhlIG9wdGltaXphdGlvbiBwYXNzZXMgYW5kIHRoZSBiYWNrLWVuZCBjb2RlIGdlbmVyYXRpb24KK2FyZSBkb2N1bWVudGVkIGluIHRoZSBHQ0MgbWFudWFsOyBzZWUKKzxhIGhyZWY9Ii4uL2djYy9pbmRleC5odG1sI1RvcCI+SW50cm9kdWN0aW9uPC9hPi4gCitUaGUgdHdvIG1hbnVhbHMgdG9nZXRoZXIgcHJvdmlkZSBhIGNvbXBsZXRlIHJlZmVyZW5jZSBmb3IgdGhlIEdOVQorRm9ydHJhbiBjb21waWxlci4KKworPCEtLSAgLS0+Cis8IS0tIFByZXByb2Nlc3NpbmcgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIC0tPgorPCEtLSAgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzMjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDUyNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29weWluZy5odG1sI0NvcHlpbmciIHRpdGxlPSJDb3B5aW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRnVuZGluZy5odG1sI0Z1bmRpbmciIHRpdGxlPSJGdW5kaW5nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGdW5kaW5nLmh0bWwjRnVuZGluZyI+RnVuZGluZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvcHlpbmcuaHRtbCNDb3B5aW5nIj5Db3B5aW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvaDI+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUZETF8wMDJjLUdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS0xMTQ1Ij48L2E+PGRpdiBhbGlnbj0iY2VudGVyIj5WZXJzaW9uIDEuMywgMyBOb3ZlbWJlciAyMDA4PC9kaXY+CisKKzxwcmUgY2xhc3M9ImRpc3BsYXkiPiAgICAgQ29weXJpZ2h0ICZjb3B5OyAyMDAwLCAyMDAxLCAyMDAyLCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA8YSBocmVmPSJodHRwOi8vZnNmLm9yZy8iPmh0dHA6Ly9mc2Yub3JnLzwvYT4KKyAgICAgCisgICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICAgICBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKzwvcHJlPgorICAgICA8b2wgdHlwZT0xIHN0YXJ0PTA+Cis8bGk+UFJFQU1CTEUKKworICAgICA8cD5UaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgPGRmbj5mcmVlPC9kZm4+IGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4gCitTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5Cit0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZQorZm9yIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuCisKKyAgICAgPHA+VGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAmbGRxdW87Y29weWxlZnQmcmRxdW87LCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKKyAgICAgPHA+V2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKyAgICAgPGxpPkFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKKyAgICAgPHA+VGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgJmxkcXVvO0RvY3VtZW50JnJkcXVvOywgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgJmxkcXVvO3lvdSZyZHF1bzsuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKKyAgICAgPHA+QSAmbGRxdW87TW9kaWZpZWQgVmVyc2lvbiZyZHF1bzsgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCisgICAgIDxwPkEgJmxkcXVvO1NlY29uZGFyeSBTZWN0aW9uJnJkcXVvOyBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24KK29mIHRoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbAorc3ViamVjdCAob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwKK2RpcmVjdGx5IHdpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4KK3BhcnQgYSB0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4KK2FueSBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKKyAgICAgPHA+VGhlICZsZHF1bztJbnZhcmlhbnQgU2VjdGlvbnMmcmRxdW87IGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKKyAgICAgPHA+VGhlICZsZHF1bztDb3ZlciBUZXh0cyZyZHF1bzsgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQSBGcm9udC1Db3ZlciBUZXh0IG1heQorYmUgYXQgbW9zdCA1IHdvcmRzLCBhbmQgYSBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgMjUgd29yZHMuCisKKyAgICAgPHA+QSAmbGRxdW87VHJhbnNwYXJlbnQmcmRxdW87IGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LiAKK0FuIGltYWdlIGZvcm1hdCBpcyBub3QgVHJhbnNwYXJlbnQgaWYgdXNlZCBmb3IgYW55IHN1YnN0YW50aWFsIGFtb3VudAorb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdCAmbGRxdW87VHJhbnNwYXJlbnQmcmRxdW87IGlzIGNhbGxlZCAmbGRxdW87T3BhcXVlJnJkcXVvOy4KKworICAgICA8cD5FeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorPHNwYW4gY2xhc3M9InNjIj5hc2NpaTwvc3Bhbj4gd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dAorZm9ybWF0LCA8YWNyb255bT5TR01MPC9hY3JvbnltPiBvciA8YWNyb255bT5YTUw8L2Fjcm9ueW0+IHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlCis8YWNyb255bT5EVEQ8L2Fjcm9ueW0+LCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4sCitQb3N0U2NyaXB0IG9yIDxhY3JvbnltPlBERjwvYWNyb255bT4gZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzCitvZiB0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgPGFjcm9ueW0+UE5HPC9hY3JvbnltPiwgPGFjcm9ueW0+WENGPC9hY3JvbnltPiBhbmQKKzxhY3JvbnltPkpQRzwvYWNyb255bT4uICBPcGFxdWUgZm9ybWF0cyBpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUKK3JlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5IHByb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgPGFjcm9ueW0+U0dNTDwvYWNyb255bT4gb3IKKzxhY3JvbnltPlhNTDwvYWNyb255bT4gZm9yIHdoaWNoIHRoZSA8YWNyb255bT5EVEQ8L2Fjcm9ueW0+IGFuZC9vciBwcm9jZXNzaW5nIHRvb2xzIGFyZQorbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUgbWFjaGluZS1nZW5lcmF0ZWQgPGFjcm9ueW0+SFRNTDwvYWNyb255bT4sCitQb3N0U2NyaXB0IG9yIDxhY3JvbnltPlBERjwvYWNyb255bT4gcHJvZHVjZWQgYnkgc29tZSB3b3JkIHByb2Nlc3NvcnMgZm9yCitvdXRwdXQgcHVycG9zZXMgb25seS4KKworICAgICA8cD5UaGUgJmxkcXVvO1RpdGxlIFBhZ2UmcmRxdW87IG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgJmxkcXVvO1RpdGxlIFBhZ2UmcmRxdW87IG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworICAgICA8cD5UaGUgJmxkcXVvO3B1Ymxpc2hlciZyZHF1bzsgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyBjb3BpZXMKK29mIHRoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLgorCisgICAgIDxwPkEgc2VjdGlvbiAmbGRxdW87RW50aXRsZWQgWFlaJnJkcXVvOyBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgJmxkcXVvO0Fja25vd2xlZGdlbWVudHMmcmRxdW87LAorJmxkcXVvO0RlZGljYXRpb25zJnJkcXVvOywgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzssIG9yICZsZHF1bztIaXN0b3J5JnJkcXVvOy4pICBUbyAmbGRxdW87UHJlc2VydmUgdGhlIFRpdGxlJnJkcXVvOworb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAmbGRxdW87RW50aXRsZWQgWFlaJnJkcXVvOyBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCisgICAgIDxwPlRoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgIDxsaT5WRVJCQVRJTSBDT1BZSU5HCisKKyAgICAgPHA+WW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCisgICAgIDxwPllvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZAoreW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKworICAgICA8bGk+Q09QWUlORyBJTiBRVUFOVElUWQorCisgICAgIDxwPklmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIChvciBjb3BpZXMgaW4gbWVkaWEgdGhhdCBjb21tb25seSBoYXZlCitwcmludGVkIGNvdmVycykgb2YgdGhlIERvY3VtZW50LCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kIHRoZQorRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUKK2NvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsIHRoZXNlIENvdmVyCitUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbgordGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseSBhbmQgbGVnaWJseSBpZGVudGlmeQoreW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudAordGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZAordmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uIAorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKKyAgICAgPHA+SWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAorbGVnaWJseSwgeW91IHNob3VsZCBwdXQgdGhlIGZpcnN0IG9uZXMgbGlzdGVkIChhcyBtYW55IGFzIGZpdAorcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8gYWRqYWNlbnQKK3BhZ2VzLgorCisgICAgIDxwPklmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4gCitJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywKK3doZW4geW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUKK3RoYXQgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkCitsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuCitPcGFxdWUgY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQKK2VkaXRpb24gdG8gdGhlIHB1YmxpYy4KKworICAgICA8cD5JdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8gZ2l2ZQordGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisKKyAgICAgPGxpPk1PRElGSUNBVElPTlMKKworICAgICA8cD5Zb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworICAgICAgICAgIDxvbCB0eXBlPUEgc3RhcnQ9MT4KKzxsaT5Vc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKK2Zyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KK29mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KK2lmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCisKKyAgICAgICAgICA8bGk+TGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCitWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAordW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorCisgICAgICAgICAgPGxpPlN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCitNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorCisgICAgICAgICAgPGxpPkFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKK2FkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KKworICAgICAgICAgIDxsaT5JbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKK2dpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKK2FuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZS4KKworICAgICAgICAgIDxsaT5JbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87SGlzdG9yeSZyZHF1bzssIFByZXNlcnZlIGl0cyBUaXRsZSwgYW5kIGFkZAordG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKK3RoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87IGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCitnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKK3B1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCit0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgJmxkcXVvO0hpc3RvcnkmcmRxdW87IHNlY3Rpb24uIAorWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCitwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCisKKyAgICAgICAgICA8bGk+Rm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOyBvciAmbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LCBQcmVzZXJ2ZQordGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsIHRoZQorc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMgYW5kL29yCitkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKK3VuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKK29yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KKworICAgICAgICAgIDxsaT5EZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzsuICBTdWNoIGEgc2VjdGlvbgorbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KKworICAgICAgICAgIDxsaT5EbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCAmbGRxdW87RW5kb3JzZW1lbnRzJnJkcXVvOyBvcgordG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorICAgICAgICAgIDwvb2w+CisKKyAgICAgPHA+SWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24ncyBsaWNlbnNlIG5vdGljZS4gCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworICAgICA8cD5Zb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzssIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMmbWRhc2g7Zm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKKyAgICAgPHA+WW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKKyAgICAgPHA+VGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKyAgICAgPGxpPkNPTUJJTklORyBET0NVTUVOVFMKKworICAgICA8cD5Zb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKKyAgICAgPHA+VGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLiAKK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKKyAgICAgPHA+SW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87SGlzdG9yeSZyZHF1bzsKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorJmxkcXVvO0hpc3RvcnkmcmRxdW87OyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzssCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzsuICBZb3UgbXVzdCBkZWxldGUgYWxsCitzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87RW5kb3JzZW1lbnRzLiZyZHF1bzsKKworICAgICA8bGk+Q09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKKyAgICAgPHA+WW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzCityZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGlzCitMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbgordGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgordmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgorCisgICAgIDxwPllvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQgZGlzdHJpYnV0ZQoraXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydCBhIGNvcHkgb2YgdGhpcworTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbAorb3RoZXIgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdCBkb2N1bWVudC4KKworICAgICA8bGk+QUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCisgICAgIDxwPkEgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlCithbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiAmbGRxdW87YWdncmVnYXRlJnJkcXVvOyBpZiB0aGUgY29weXJpZ2h0CityZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlIGxlZ2FsIHJpZ2h0cworb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAKK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCisgICAgIDxwPklmIHRoZSBDb3ZlciBUZXh0IHJlcXVpcmVtZW50IG9mIHNlY3Rpb24gMyBpcyBhcHBsaWNhYmxlIHRvIHRoZXNlCitjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YKK3RoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uCitjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSBEb2N1bWVudCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZSwgb3IgdGhlCitlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uIAorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisgICAgIDxsaT5UUkFOU0xBVElPTgorCisgICAgIDxwPlRyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuIAorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworICAgICA8cD5JZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOywKKyZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzssIG9yICZsZHF1bztIaXN0b3J5JnJkcXVvOywgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworICAgICA8bGk+VEVSTUlOQVRJT04KKworICAgICA8cD5Zb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50CitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIGl0IGlzIHZvaWQsIGFuZAord2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgICAgPHA+SG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgbGljZW5zZQorZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LAordW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5Cit0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIKK2ZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8KKzYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICAgICA8cD5Nb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICAgICA8cD5UZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCByZWNlaXB0IG9mIGEgY29weSBvZiBzb21lIG9yIGFsbCBvZiB0aGUgc2FtZSBtYXRlcmlhbCBkb2VzCitub3QgZ2l2ZSB5b3UgYW55IHJpZ2h0cyB0byB1c2UgaXQuCisKKyAgICAgPGxpPkZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKKyAgICAgPHA+VGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMKK29mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldwordmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgU2VlCis8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvIj5odHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvPC9hPi4KKworICAgICA8cD5FYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAmbGRxdW87b3IgYW55IGxhdGVyIHZlcnNpb24mcmRxdW87IGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQKK3NwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcworTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhCit2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZQorRG9jdW1lbnQuCisKKyAgICAgPGxpPlJFTElDRU5TSU5HCisKKyAgICAgPHA+JmxkcXVvO01hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiBTaXRlJnJkcXVvOyAob3IgJmxkcXVvO01NQyBTaXRlJnJkcXVvOykgbWVhbnMgYW55CitXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIgdGhhdCBwdWJsaXNoZXMgY29weXJpZ2h0YWJsZSB3b3JrcyBhbmQgYWxzbworcHJvdmlkZXMgcHJvbWluZW50IGZhY2lsaXRpZXMgZm9yIGFueWJvZHkgdG8gZWRpdCB0aG9zZSB3b3Jrcy4gIEEKK3B1YmxpYyB3aWtpIHRoYXQgYW55Ym9keSBjYW4gZWRpdCBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBzZXJ2ZXIuICBBCismbGRxdW87TWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uJnJkcXVvOyAob3IgJmxkcXVvO01NQyZyZHF1bzspIGNvbnRhaW5lZCBpbiB0aGUKK3NpdGUgbWVhbnMgYW55IHNldCBvZiBjb3B5cmlnaHRhYmxlIHdvcmtzIHRodXMgcHVibGlzaGVkIG9uIHRoZSBNTUMKK3NpdGUuCisKKyAgICAgPHA+JmxkcXVvO0NDLUJZLVNBJnJkcXVvOyBtZWFucyB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAKK2xpY2Vuc2UgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMgQ29ycG9yYXRpb24sIGEgbm90LWZvci1wcm9maXQKK2NvcnBvcmF0aW9uIHdpdGggYSBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgaW4gU2FuIEZyYW5jaXNjbywKK0NhbGlmb3JuaWEsIGFzIHdlbGwgYXMgZnV0dXJlIGNvcHlsZWZ0IHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZQorcHVibGlzaGVkIGJ5IHRoYXQgc2FtZSBvcmdhbml6YXRpb24uCisKKyAgICAgPHA+JmxkcXVvO0luY29ycG9yYXRlJnJkcXVvOyBtZWFucyB0byBwdWJsaXNoIG9yIHJlcHVibGlzaCBhIERvY3VtZW50LCBpbiB3aG9sZSBvcgoraW4gcGFydCwgYXMgcGFydCBvZiBhbm90aGVyIERvY3VtZW50LgorCisgICAgIDxwPkFuIE1NQyBpcyAmbGRxdW87ZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nJnJkcXVvOyBpZiBpdCBpcyBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCBhbmQgaWYgYWxsIHdvcmtzIHRoYXQgd2VyZSBmaXJzdCBwdWJsaXNoZWQgdW5kZXIgdGhpcyBMaWNlbnNlCitzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUKK29yIGluIHBhcnQgaW50byB0aGUgTU1DLCAoMSkgaGFkIG5vIGNvdmVyIHRleHRzIG9yIGludmFyaWFudCBzZWN0aW9ucywKK2FuZCAoMikgd2VyZSB0aHVzIGluY29ycG9yYXRlZCBwcmlvciB0byBOb3ZlbWJlciAxLCAyMDA4LgorCisgICAgIDxwPlRoZSBvcGVyYXRvciBvZiBhbiBNTUMgU2l0ZSBtYXkgcmVwdWJsaXNoIGFuIE1NQyBjb250YWluZWQgaW4gdGhlIHNpdGUKK3VuZGVyIENDLUJZLVNBIG9uIHRoZSBzYW1lIHNpdGUgYXQgYW55IHRpbWUgYmVmb3JlIEF1Z3VzdCAxLCAyMDA5LAorcHJvdmlkZWQgdGhlIE1NQyBpcyBlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmcuCisKKyAgICAgICAgPC9vbD4KKworPGgzIGNsYXNzPSJ1bm51bWJlcmVkc2VjIj5BRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzPC9oMz4KKworPHA+VG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBDb3B5cmlnaHQgKEMpICA8dmFyPnllYXI8L3Zhcj4gIDx2YXI+eW91ciBuYW1lPC92YXI+LgorICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworICAgICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIKKyAgICAgICBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVQorICAgICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCis8L3ByZT4KKyAgIDxwPklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAmbGRxdW87d2l0aC4uLlRleHRzLiZyZHF1bzsgbGluZSB3aXRoIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIDx2YXI+bGlzdCB0aGVpciB0aXRsZXM8L3Zhcj4sIHdpdGgKKyAgICAgICAgIHRoZSBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyA8dmFyPmxpc3Q8L3Zhcj4sIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzCisgICAgICAgICBiZWluZyA8dmFyPmxpc3Q8L3Zhcj4uCis8L3ByZT4KKyAgIDxwPklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCitjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUsIG1lcmdlIHRob3NlIHR3byBhbHRlcm5hdGl2ZXMgdG8gc3VpdCB0aGUKK3NpdHVhdGlvbi4KKworICAgPHA+SWYgeW91ciBkb2N1bWVudCBjb250YWlucyBub250cml2aWFsIGV4YW1wbGVzIG9mIHByb2dyYW0gY29kZSwgd2UKK3JlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YKK2ZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCit0byBwZXJtaXQgdGhlaXIgdXNlIGluIGZyZWUgc29mdHdhcmUuCisKKzwhLS0gTG9jYWwgVmFyaWFibGVzOiAtLT4KKzwhLS0gaXNwZWxsLWxvY2FsLXBkaWN0OiAiaXNwZWxsLWRpY3QiIC0tPgorPCEtLSBFbmQ6IC0tPgorPCEtLSBtYW4gZW5kIC0tPgorPCEtLSAgLS0+Cis8IS0tIEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZSAtLT4KKzwhLS0gIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0hPU1ROTS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0hPU1ROTS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYTg3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSE9TVE5NLmh0bWwKQEAgLTAsMCArMSw4NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SE9TVE5NIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdNVElNRS5odG1sI0dNVElNRSIgdGl0bGU9IkdNVElNRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkhVR0UuaHRtbCNIVUdFIiB0aXRsZT0iSFVHRSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIT1NUTk0iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSFVHRS5odG1sI0hVR0UiPkhVR0U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHTVRJTUUuaHRtbCNHTVRJTUUiPkdNVElNRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMDkgPGNvZGU+SE9TVE5NPC9jb2RlPiAmbWRhc2g7IEdldCBzeXN0ZW0gaG9zdCBuYW1lPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSE9TVE5NLTcwMiI+PC9hPjxhIG5hbWU9ImluZGV4LXN5c3RlbV8wMDJjLWhvc3QtbmFtZS03MDMiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZXRyaWV2ZXMgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc3lzdGVtIG9uIHdoaWNoIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcuCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgaW4gYm90aCBzdWJyb3V0aW5lIGFuZCBmdW5jdGlvbiBmb3JtczsgaG93ZXZlciwKK29ubHkgb25lIGZvcm0gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIHByb2dyYW0gdW5pdC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZSwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5DQUxMIEhPU1ROTShDIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gSE9TVE5NKE5BTUUpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5DPC92YXI+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gYW5kIG9mIGRlZmF1bHQga2luZC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc3RhdHVzIGZsYWcgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCitSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBzeXN0ZW0gc3BlY2lmaWMgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+SW4gZWl0aGVyIHN5bnRheCwgPHZhcj5OQU1FPC92YXI+IGlzIHNldCB0byB0aGUgY3VycmVudCBob3N0bmFtZSBpZiBpdCBjYW4KK2JlIG9idGFpbmVkLCBvciB0byBhIGJsYW5rIHN0cmluZyBvdGhlcndpc2UuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9IVUdFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSFVHRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNGFmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSFVHRS5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkhVR0UgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSE9TVE5NLmh0bWwjSE9TVE5NIiB0aXRsZT0iSE9TVE5NIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSFlQT1QuaHRtbCNIWVBPVCIgdGl0bGU9IkhZUE9UIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkhVR0UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSFlQT1QuaHRtbCNIWVBPVCI+SFlQT1Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJIT1NUTk0uaHRtbCNIT1NUTk0iPkhPU1ROTTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMTAgPGNvZGU+SFVHRTwvY29kZT4gJm1kYXNoOyBMYXJnZXN0IG51bWJlciBvZiBhIGtpbmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1IVUdFLTcwNCI+PC9hPjxhIG5hbWU9ImluZGV4LWxpbWl0c18wMDJjLWxhcmdlc3QtbnVtYmVyLTcwNSI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtbGFyZ2VzdC1udW1iZXItNzA2Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+SFVHRShYKTwvY29kZT4gcmV0dXJucyB0aGUgbGFyZ2VzdCBudW1iZXIgdGhhdCBpcyBub3QgYW4gaW5maW5pdHkgaW4KK3RoZSBtb2RlbCBvZiB0aGUgdHlwZSBvZiA8Y29kZT5YPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSFVHRShYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+UkVBTDwvY29kZT4gb3IgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIDx2YXI+WDwvdmFyPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9odWdlX3RpbnkKKyAgICAgICAgICAgIHByaW50ICosIGh1Z2UoMCksIGh1Z2UoMC4wKSwgaHVnZSgwLjBkMCkKKyAgICAgICAgICAgIHByaW50ICosIHRpbnkoMC4wKSwgdGlueSgwLjBkMCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2h1Z2VfdGlueQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9IWVBPVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0hZUE9ULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNmJlNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9IWVBPVC5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkhZUE9UIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkhVR0UuaHRtbCNIVUdFIiB0aXRsZT0iSFVHRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklBQ0hBUi5odG1sI0lBQ0hBUiIgdGl0bGU9IklBQ0hBUiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIWVBPVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJQUNIQVIuaHRtbCNJQUNIQVIiPklBQ0hBUjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkhVR0UuaHRtbCNIVUdFIj5IVUdFPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjExMSA8Y29kZT5IWVBPVDwvY29kZT4gJm1kYXNoOyBFdWNsaWRlYW4gZGlzdGFuY2UgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1IWVBPVC03MDciPjwvYT48YSBuYW1lPSJpbmRleC1FdWNsaWRlYW4tZGlzdGFuY2UtNzA4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+SFlQT1QoWCxZKTwvY29kZT4gaXMgdGhlIEV1Y2xpZGVhbiBkaXN0YW5jZSBmdW5jdGlvbi4gSXQgaXMgZXF1YWwgdG8KK1xzcXJ0WF4yICsgWV4yLCB3aXRob3V0IHVuZHVlIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IEhZUE9UKFgsIFkpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ZPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBhbmQga2luZCB0eXBlIHBhcmFtZXRlciBzaGFsbCBiZSB0aGUgc2FtZSBhcworPHZhcj5YPC92YXI+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaGFzIHRoZSBzYW1lIHR5cGUgYW5kIGtpbmQgdHlwZSBwYXJhbWV0ZXIgYXMgPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9oeXBvdAorICAgICAgICAgICAgcmVhbCg0KSA6OiB4ID0gMS5lMF80LCB5ID0gMC41ZTBfNAorICAgICAgICAgICAgeCA9IGh5cG90KHgseSkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2h5cG90Cis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0hvbGxlcml0aC1jb25zdGFudHMtc3VwcG9ydC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0hvbGxlcml0aC1jb25zdGFudHMtc3VwcG9ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MTcwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSG9sbGVyaXRoLWNvbnN0YW50cy1zdXBwb3J0Lmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SG9sbGVyaXRoIGNvbnN0YW50cyBzdXBwb3J0IC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkltcGxpY2l0bHktY29udmVydC1MT0dJQ0FMLWFuZC1JTlRFR0VSLXZhbHVlcy5odG1sI0ltcGxpY2l0bHktY29udmVydC1MT0dJQ0FMLWFuZC1JTlRFR0VSLXZhbHVlcyIgdGl0bGU9IkltcGxpY2l0bHkgY29udmVydCBMT0dJQ0FMIGFuZCBJTlRFR0VSIHZhbHVlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNyYXktcG9pbnRlcnMuaHRtbCNDcmF5LXBvaW50ZXJzIiB0aXRsZT0iQ3JheSBwb2ludGVycyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJIb2xsZXJpdGgtY29uc3RhbnRzLXN1cHBvcnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ3JheS1wb2ludGVycy5odG1sI0NyYXktcG9pbnRlcnMiPkNyYXkgcG9pbnRlcnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMuaHRtbCNJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMiPkltcGxpY2l0bHkgY29udmVydCBMT0dJQ0FMIGFuZCBJTlRFR0VSIHZhbHVlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4xLjEzIEhvbGxlcml0aCBjb25zdGFudHMgc3VwcG9ydDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUhvbGxlcml0aC1jb25zdGFudHMtMzQwIj48L2E+CitHTlUgRm9ydHJhbiBzdXBwb3J0cyBIb2xsZXJpdGggY29uc3RhbnRzIGluIGFzc2lnbm1lbnRzLCBmdW5jdGlvbgorYXJndW1lbnRzLCBhbmQgPGNvZGU+REFUQTwvY29kZT4gYW5kIDxjb2RlPkFTU0lHTjwvY29kZT4gc3RhdGVtZW50cy4gIEEgSG9sbGVyaXRoCitjb25zdGFudCBpcyB3cml0dGVuIGFzIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcHJlY2VkZWQgYnkgYW4gaW50ZWdlcgorY29uc3RhbnQgaW5kaWNhdGluZyB0aGUgY2hhcmFjdGVyIGNvdW50LCBhbmQgdGhlIGxldHRlciA8Y29kZT5IPC9jb2RlPiBvcgorPGNvZGU+aDwvY29kZT4sIGFuZCBzdG9yZWQgaW4gYnl0ZXdpc2UgZmFzaGlvbiBpbiBhIG51bWVyaWMgKDxjb2RlPklOVEVHRVI8L2NvZGU+LAorPGNvZGU+UkVBTDwvY29kZT4sIG9yIDxjb2RlPmNvbXBsZXg8L2NvZGU+KSBvciA8Y29kZT5MT0dJQ0FMPC9jb2RlPiB2YXJpYWJsZS4gIFRoZQorY29uc3RhbnQgd2lsbCBiZSBwYWRkZWQgb3IgdHJ1bmNhdGVkIHRvIGZpdCB0aGUgc2l6ZSBvZiB0aGUgdmFyaWFibGUgaW4KK3doaWNoIGl0IGlzIHN0b3JlZC4KKworICAgPHA+RXhhbXBsZXMgb2YgdmFsaWQgdXNlcyBvZiBIb2xsZXJpdGggY29uc3RhbnRzOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgIGNvbXBsZXgqMTYgeCgyKQorICAgICAgICAgICBkYXRhIHggLzE2SGFiY2RlZmdoaWprbG1ub3AsIDE2SHFyc3R1dnd4eXowMTIzNDUvCisgICAgICAgICAgIHgoMSkgPSAxNkhBQkNERUZHSElKS0xNTk9QCisgICAgICAgICAgIGNhbGwgZm9vICg0aCBhYmMpCis8L3ByZT4KKyAgIDxwPkludmFsaWQgSG9sbGVyaXRoIGNvbnN0YW50cyBleGFtcGxlczoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICBpbnRlZ2VyKjQgYQorICAgICAgICAgICBhID0gOEgxMjM0NTY3OCAhIFZhbGlkLCBidXQgdGhlIEhvbGxlcml0aCBjb25zdGFudCB3aWxsIGJlIHRydW5jYXRlZC4KKyAgICAgICAgICAgYSA9IDBIICAgICAgICAgISBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGlzIG5lZWRlZC4KKzwvcHJlPgorICAgPHA+SW4gZ2VuZXJhbCwgSG9sbGVyaXRoIGNvbnN0YW50cyB3ZXJlIHVzZWQgdG8gcHJvdmlkZSBhIHJ1ZGltZW50YXJ5CitmYWNpbGl0eSBmb3IgaGFuZGxpbmcgY2hhcmFjdGVyIHN0cmluZ3MgaW4gZWFybHkgRm9ydHJhbiBjb21waWxlcnMsCitwcmlvciB0byB0aGUgaW50cm9kdWN0aW9uIG9mIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdmFyaWFibGVzIGluIEZvcnRyYW4gNzc7CitpbiB0aG9zZSBjYXNlcywgdGhlIHN0YW5kYXJkLWNvbXBsaWFudCBlcXVpdmFsZW50IGlzIHRvIGNvbnZlcnQgdGhlCitwcm9ncmFtIHRvIHVzZSBwcm9wZXIgY2hhcmFjdGVyIHN0cmluZ3MuICBPbiBvY2Nhc2lvbiwgdGhlcmUgbWF5IGJlIGEKK2Nhc2Ugd2hlcmUgdGhlIGludGVudCBpcyBzcGVjaWZpY2FsbHkgdG8gaW5pdGlhbGl6ZSBhIG51bWVyaWMgdmFyaWFibGUKK3dpdGggYSBnaXZlbiBieXRlIHNlcXVlbmNlLiAgSW4gdGhlc2UgY2FzZXMsIHRoZSBzYW1lIHJlc3VsdCBjYW4gYmUKK29idGFpbmVkIGJ5IHVzaW5nIHRoZSA8Y29kZT5UUkFOU0ZFUjwvY29kZT4gc3RhdGVtZW50LCBhcyBpbiB0aGlzIGV4YW1wbGUuCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgSU5URUdFUihLSU5EPTQpIDo6IGEKKyAgICAgICAgICAgYSA9IFRSQU5TRkVSICgiYWJjZCIsIGEpICAgICAhIGVxdWl2YWxlbnQgdG86IGEgPSA0SGFiY2QKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lBQ0hBUi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lBQ0hBUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NTk4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUFDSEFSLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUFDSEFSIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkhZUE9ULmh0bWwjSFlQT1QiIHRpdGxlPSJIWVBPVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklBTEwuaHRtbCNJQUxMIiB0aXRsZT0iSUFMTCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJQUNIQVIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSUFMTC5odG1sI0lBTEwiPklBTEw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJIWVBPVC5odG1sI0hZUE9UIj5IWVBPVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMTIgPGNvZGU+SUFDSEFSPC9jb2RlPiAmbWRhc2g7IENvZGUgaW4gPGFjcm9ueW0+QVNDSUk8L2Fjcm9ueW0+IGNvbGxhdGluZyBzZXF1ZW5jZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUlBQ0hBUi03MDkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGFjcm9ueW1fMDA3YkFTQ0lJXzAwN2QtY29sbGF0aW5nLXNlcXVlbmNlLTcxMCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbGxhdGluZy1zZXF1ZW5jZV8wMDJjLV8wMDQwYWNyb255bV8wMDdiQVNDSUlfMDA3ZC03MTEiPjwvYT48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8taW50ZWdlci03MTIiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5JQUNIQVIoQyk8L2NvZGU+IHJldHVybnMgdGhlIGNvZGUgZm9yIHRoZSA8YWNyb255bT5BU0NJSTwvYWNyb255bT4gY2hhcmFjdGVyCitpbiB0aGUgZmlyc3QgY2hhcmFjdGVyIHBvc2l0aW9uIG9mIDxjb2RlPkM8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyLCB3aXRoIDx2YXI+S0lORDwvdmFyPiBhcmd1bWVudCBGb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IElBQ0hBUihDIFssIEtJTkRdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkM8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4sIHdpdGggPGNvZGU+SU5URU5UKElOKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBBbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbml0aWFsaXphdGlvbgorZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBraW5kIHBhcmFtZXRlciBvZiB0aGUgcmVzdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2Yga2luZCA8dmFyPktJTkQ8L3Zhcj4uIElmCis8dmFyPktJTkQ8L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9mIGRlZmF1bHQgaW50ZWdlciBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9pYWNoYXIKKyAgICAgICAgICAgIGludGVnZXIgaQorICAgICAgICAgICAgaSA9IGlhY2hhcignICcpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9pYWNoYXIKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5Ob3RlPC9lbT46PGRkPlNlZSA8YSBocmVmPSJJQ0hBUi5odG1sI0lDSEFSIj5JQ0hBUjwvYT4gZm9yIGEgZGlzY3Vzc2lvbiBvZiBjb252ZXJ0aW5nIGJldHdlZW4gbnVtZXJpY2FsIHZhbHVlcworYW5kIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb25zLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkFDSEFSLmh0bWwjQUNIQVIiPkFDSEFSPC9hPiwgPGEgaHJlZj0iQ0hBUi5odG1sI0NIQVIiPkNIQVI8L2E+LCA8YSBocmVmPSJJQ0hBUi5odG1sI0lDSEFSIj5JQ0hBUjwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lBTEwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JQUxMLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1NjE1NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JQUxMLmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklBTEwgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSUFDSEFSLmh0bWwjSUFDSEFSIiB0aXRsZT0iSUFDSEFSIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSUFORC5odG1sI0lBTkQiIHRpdGxlPSJJQU5EIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklBTEwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSUFORC5odG1sI0lBTkQiPklBTkQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJQUNIQVIuaHRtbCNJQUNIQVIiPklBQ0hBUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMTMgPGNvZGU+SUFMTDwvY29kZT4gJm1kYXNoOyBCaXR3aXNlIEFORCBvZiBhcnJheSBlbGVtZW50czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUlBTEwtNzEzIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1BTkQtNzE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtYml0c18wMDJjLUFORC1vZi1hcnJheS1lbGVtZW50cy03MTUiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZWR1Y2VzIHdpdGggYml0d2lzZSBBTkQgdGhlIGVsZW1lbnRzIG9mIDx2YXI+QVJSQVk8L3Zhcj4gYWxvbmcgZGltZW5zaW9uIDx2YXI+RElNPC92YXI+CitpZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGluIDx2YXI+TUFTSzwvdmFyPiBpcyA8Y29kZT5UUlVFPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+VHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IElBTEwoQVJSQVlbLCBNQVNLXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBJQUxMKEFSUkFZLCBESU1bLCBNQVNLXSk8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkFSUkFZPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhbiBhcnJheSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkRJTTwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUKKzxjb2RlPklOVEVHRVI8L2NvZGU+IHdpdGggYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgZnJvbSAxIHRvIG4sIHdoZXJlIG4KK2VxdWFscyB0aGUgcmFuayBvZiA8dmFyPkFSUkFZPC92YXI+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5MT0dJQ0FMPC9jb2RlPgorYW5kIGVpdGhlciBiZSBhIHNjYWxhciBvciBhbiBhcnJheSBvZiB0aGUgc2FtZSBzaGFwZSBhcyA8dmFyPkFSUkFZPC92YXI+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXN1bHQgaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyA8dmFyPkFSUkFZPC92YXI+LgorCisgICAgIDxwPklmIDx2YXI+RElNPC92YXI+IGlzIGFic2VudCwgYSBzY2FsYXIgd2l0aCB0aGUgYml0d2lzZSBBTEwgb2YgYWxsIGVsZW1lbnRzIGluCis8dmFyPkFSUkFZPC92YXI+IGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGFuIGFycmF5IG9mIHJhbmsgbi0xLCB3aGVyZSBuIGVxdWFscwordGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwgYW5kIGEgc2hhcGUgc2ltaWxhciB0byB0aGF0IG9mIDx2YXI+QVJSQVk8L3Zhcj4gd2l0aAorZGltZW5zaW9uIDx2YXI+RElNPC92YXI+IGRyb3BwZWQgaXMgcmV0dXJuZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X2lhbGwKKyAgICAgICAgICAgIElOVEVHRVIoMSkgOjogYSgyKQorICAgICAgICAgIAorICAgICAgICAgICAgYSgxKSA9IGInMDAxMDAxMDAnCisgICAgICAgICAgICBhKDIpID0gYicwMTEwMTAxMCcKKyAgICAgICAgICAKKyAgICAgICAgICAgICEgcHJpbnRzIDAwMTAwMDAwCisgICAgICAgICAgICBQUklOVCAnKGI4LjgpJywgSUFMTChhKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSUFOWS5odG1sI0lBTlkiPklBTlk8L2E+LCA8YSBocmVmPSJJUEFSSVRZLmh0bWwjSVBBUklUWSI+SVBBUklUWTwvYT4sIDxhIGhyZWY9IklBTkQuaHRtbCNJQU5EIj5JQU5EPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lBTkQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JQU5ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4YzUxNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JQU5ELmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUFORCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJQUxMLmh0bWwjSUFMTCIgdGl0bGU9IklBTEwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJQU5ZLmh0bWwjSUFOWSIgdGl0bGU9IklBTlkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUFORCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJQU5ZLmh0bWwjSUFOWSI+SUFOWTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklBTEwuaHRtbCNJQUxMIj5JQUxMPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjExNCA8Y29kZT5JQU5EPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgbG9naWNhbCBhbmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JQU5ELTcxNiI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHdpc2UtbG9naWNhbC1hbmQtNzE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9naWNhbC1hbmRfMDAyYy1iaXR3aXNlLTcxOCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkJpdHdpc2UgbG9naWNhbCA8Y29kZT5BTkQ8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IElBTkQoSSwgSik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPko8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LCBvZiB0aGUgc2FtZQora2luZCBhcyA8dmFyPkk8L3Zhcj4uICAoQXMgYSBHTlUgZXh0ZW5zaW9uLCBkaWZmZXJlbnQga2luZHMgYXJlIGFsc28KK3Blcm1pdHRlZC4pCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB0eXBlIGlzIDxjb2RlPklOVEVHRVI8L2NvZGU+LCBvZiB0aGUgc2FtZSBraW5kIGFzIHRoZQorYXJndW1lbnRzLiAgKElmIHRoZSBhcmd1bWVudCBraW5kcyBkaWZmZXIsIGl0IGlzIG9mIHRoZSBzYW1lIGtpbmQgYXMKK3RoZSBsYXJnZXIgYXJndW1lbnQuKQorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9pYW5kCisgICAgICAgICAgICBJTlRFR0VSIDo6IGEsIGIKKyAgICAgICAgICAgIERBVEEgYSAvIFonRicgLywgYiAvIFonMycgLworICAgICAgICAgICAgV1JJVEUgKCosKikgSUFORChhLCBiKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSU9SLmh0bWwjSU9SIj5JT1I8L2E+LCA8YSBocmVmPSJJRU9SLmh0bWwjSUVPUiI+SUVPUjwvYT4sIDxhIGhyZWY9IklCSVRTLmh0bWwjSUJJVFMiPklCSVRTPC9hPiwgPGEgaHJlZj0iSUJTRVQuaHRtbCNJQlNFVCI+SUJTRVQ8L2E+LCA8YSBocmVmPSJJQkNMUi5odG1sI0lCQ0xSIj5JQkNMUjwvYT4sIDxhIGhyZWY9Ik5PVC5odG1sI05PVCI+Tk9UPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUFOWS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lBTlkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Y4NmEzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lBTlkuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUFOWSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJQU5ELmh0bWwjSUFORCIgdGl0bGU9IklBTkQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJQVJHQy5odG1sI0lBUkdDIiB0aXRsZT0iSUFSR0MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUFOWSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJQVJHQy5odG1sI0lBUkdDIj5JQVJHQzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklBTkQuaHRtbCNJQU5EIj5JQU5EPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjExNSA8Y29kZT5JQU5ZPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgT1Igb2YgYXJyYXkgZWxlbWVudHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JQU5ZLTcxOSI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtT1ItNzIwIj48L2E+PGEgbmFtZT0iaW5kZXgtYml0c18wMDJjLU9SLW9mLWFycmF5LWVsZW1lbnRzLTcyMSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJlZHVjZXMgd2l0aCBiaXR3aXNlIE9SIChpbmNsdXNpdmUgb3IpIHRoZSBlbGVtZW50cyBvZiA8dmFyPkFSUkFZPC92YXI+IGFsb25nCitkaW1lbnNpb24gPHZhcj5ESU08L3Zhcj4gaWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiA8dmFyPk1BU0s8L3Zhcj4gaXMgPGNvZGU+VFJVRTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBJQU5ZKEFSUkFZWywgTUFTS10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+UkVTVUxUID0gSUFOWShBUlJBWSwgRElNWywgTUFTS10pPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ESU08L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlCis8Y29kZT5JTlRFR0VSPC9jb2RlPiB3aXRoIGEgdmFsdWUgaW4gdGhlIHJhbmdlIGZyb20gMSB0byBuLCB3aGVyZSBuCitlcXVhbHMgdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk1BU0s8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+TE9HSUNBTDwvY29kZT4KK2FuZCBlaXRoZXIgYmUgYSBzY2FsYXIgb3IgYW4gYXJyYXkgb2YgdGhlIHNhbWUgc2hhcGUgYXMgPHZhcj5BUlJBWTwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmVzdWx0IGlzIG9mIHRoZSBzYW1lIHR5cGUgYXMgPHZhcj5BUlJBWTwvdmFyPi4KKworICAgICA8cD5JZiA8dmFyPkRJTTwvdmFyPiBpcyBhYnNlbnQsIGEgc2NhbGFyIHdpdGggdGhlIGJpdHdpc2UgT1Igb2YgYWxsIGVsZW1lbnRzIGluCis8dmFyPkFSUkFZPC92YXI+IGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGFuIGFycmF5IG9mIHJhbmsgbi0xLCB3aGVyZSBuIGVxdWFscwordGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwgYW5kIGEgc2hhcGUgc2ltaWxhciB0byB0aGF0IG9mIDx2YXI+QVJSQVk8L3Zhcj4gd2l0aAorZGltZW5zaW9uIDx2YXI+RElNPC92YXI+IGRyb3BwZWQgaXMgcmV0dXJuZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X2lhbnkKKyAgICAgICAgICAgIElOVEVHRVIoMSkgOjogYSgyKQorICAgICAgICAgIAorICAgICAgICAgICAgYSgxKSA9IGInMDAxMDAxMDAnCisgICAgICAgICAgICBhKDIpID0gYicwMTEwMTAxMCcKKyAgICAgICAgICAKKyAgICAgICAgICAgICEgcHJpbnRzIDAxMTAxMTEwCisgICAgICAgICAgICBQUklOVCAnKGI4LjgpJywgSUFOWShhKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSVBBUklUWS5odG1sI0lQQVJJVFkiPklQQVJJVFk8L2E+LCA8YSBocmVmPSJJQUxMLmh0bWwjSUFMTCI+SUFMTDwvYT4sIDxhIGhyZWY9IklPUi5odG1sI0lPUiI+SU9SPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lBUkdDLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUFSR0MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2UzYzUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lBUkdDLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUFSR0MgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSUFOWS5odG1sI0lBTlkiIHRpdGxlPSJJQU5ZIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSUJDTFIuaHRtbCNJQkNMUiIgdGl0bGU9IklCQ0xSIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklBUkdDIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiPklCQ0xSPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSUFOWS5odG1sI0lBTlkiPklBTlk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTE2IDxjb2RlPklBUkdDPC9jb2RlPiAmbWRhc2g7IEdldCB0aGUgbnVtYmVyIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JQVJHQy03MjIiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tYW5kXzAwMmRsaW5lLWFyZ3VtZW50cy03MjMiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tYW5kXzAwMmRsaW5lLWFyZ3VtZW50c18wMDJjLW51bWJlci1vZi03MjQiPjwvYT48YSBuYW1lPSJpbmRleC1hcmd1bWVudHNfMDAyYy10by1wcm9ncmFtLTcyNSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPklBUkdDPC9jb2RlPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCBvbiB0aGUKK2NvbW1hbmQgbGluZSB3aGVuIHRoZSBjb250YWluaW5nIHByb2dyYW0gd2FzIGludm9rZWQuCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgcm91dGluZSBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorR05VIEZvcnRyYW4gNzcuICBJbiBuZXcgY29kZSwgcHJvZ3JhbW1lcnMgc2hvdWxkIGNvbnNpZGVyIHRoZSB1c2Ugb2YKK3RoZSA8YSBocmVmPSJDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQuaHRtbCNDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQiPkNPTU1BTkRfQVJHVU1FTlRfQ09VTlQ8L2E+IGludHJpbnNpYyBkZWZpbmVkIGJ5IHRoZSBGb3J0cmFuIDIwMDMKK3N0YW5kYXJkLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5GdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBJQVJHQygpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD5Ob25lLgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgbnVtYmVyIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIHR5cGUgPGNvZGU+SU5URUdFUig0KTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD5TZWUgPGEgaHJlZj0iR0VUQVJHLmh0bWwjR0VUQVJHIj5HRVRBUkc8L2E+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+R05VIEZvcnRyYW4gNzcgY29tcGF0aWJpbGl0eSBzdWJyb3V0aW5lOiA8YSBocmVmPSJHRVRBUkcuaHRtbCNHRVRBUkciPkdFVEFSRzwvYT4KKworICAgICA8cD5Gb3J0cmFuIDIwMDMgZnVuY3Rpb25zIGFuZCBzdWJyb3V0aW5lczogPGEgaHJlZj0iR0VUXzAwNWZDT01NQU5ELmh0bWwjR0VUXzAwNWZDT01NQU5EIj5HRVRfQ09NTUFORDwvYT4sCis8YSBocmVmPSJHRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5ULmh0bWwjR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVCI+R0VUX0NPTU1BTkRfQVJHVU1FTlQ8L2E+LCA8YSBocmVmPSJDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQuaHRtbCNDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQiPkNPTU1BTkRfQVJHVU1FTlRfQ09VTlQ8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUJDTFIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JQkNMUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDJiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUJDTFIuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JQkNMUiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJQVJHQy5odG1sI0lBUkdDIiB0aXRsZT0iSUFSR0MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJQklUUy5odG1sI0lCSVRTIiB0aXRsZT0iSUJJVFMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUJDTFIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSUJJVFMuaHRtbCNJQklUUyI+SUJJVFM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJQVJHQy5odG1sI0lBUkdDIj5JQVJHQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMTcgPGNvZGU+SUJDTFI8L2NvZGU+ICZtZGFzaDsgQ2xlYXIgYml0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSUJDTFItNzI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtYml0c18wMDJjLXVuc2V0LTcyNyI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHNfMDAyYy1jbGVhci03MjgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5JQkNMUjwvY29kZT4gcmV0dXJucyB0aGUgdmFsdWUgb2YgPHZhcj5JPC92YXI+IHdpdGggdGhlIGJpdCBhdCBwb3NpdGlvbgorPHZhcj5QT1M8L3Zhcj4gc2V0IHRvIHplcm8uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSUJDTFIoSSwgUE9TKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UE9TPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG9mIHRoZSBzYW1lIGtpbmQgYXMKKzx2YXI+STwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJJQklUUy5odG1sI0lCSVRTIj5JQklUUzwvYT4sIDxhIGhyZWY9IklCU0VULmh0bWwjSUJTRVQiPklCU0VUPC9hPiwgPGEgaHJlZj0iSUFORC5odG1sI0lBTkQiPklBTkQ8L2E+LCA8YSBocmVmPSJJT1IuaHRtbCNJT1IiPklPUjwvYT4sIDxhIGhyZWY9IklFT1IuaHRtbCNJRU9SIj5JRU9SPC9hPiwgPGEgaHJlZj0iTVZCSVRTLmh0bWwjTVZCSVRTIj5NVkJJVFM8L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JQklUUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lCSVRTLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYxNmU0MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JQklUUy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklCSVRTIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiIHRpdGxlPSJJQkNMUiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklCU0VULmh0bWwjSUJTRVQiIHRpdGxlPSJJQlNFVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJQklUUyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJQlNFVC5odG1sI0lCU0VUIj5JQlNFVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiPklCQ0xSPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjExOCA8Y29kZT5JQklUUzwvY29kZT4gJm1kYXNoOyBCaXQgZXh0cmFjdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUlCSVRTLTcyOSI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHNfMDAyYy1nZXQtNzMwIj48L2E+PGEgbmFtZT0iaW5kZXgtYml0c18wMDJjLWV4dHJhY3QtNzMxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+SUJJVFM8L2NvZGU+IGV4dHJhY3RzIGEgZmllbGQgb2YgbGVuZ3RoIDx2YXI+TEVOPC92YXI+IGZyb20gPHZhcj5JPC92YXI+LAorc3RhcnRpbmcgZnJvbSBiaXQgcG9zaXRpb24gPHZhcj5QT1M8L3Zhcj4gYW5kIGV4dGVuZGluZyBsZWZ0IGZvciA8dmFyPkxFTjwvdmFyPgorYml0cy4gIFRoZSByZXN1bHQgaXMgcmlnaHQtanVzdGlmaWVkIGFuZCB0aGUgcmVtYWluaW5nIGJpdHMgYXJlCit6ZXJvZWQuICBUaGUgdmFsdWUgb2YgPGNvZGU+UE9TK0xFTjwvY29kZT4gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCit2YWx1ZSA8Y29kZT5CSVRfU0laRShJKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSUJJVFMoSSwgUE9TLCBMRU4pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlBPUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5MRU48L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YgdGhlIHNhbWUga2luZCBhcworPHZhcj5JPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkJJVF8wMDVmU0laRS5odG1sI0JJVF8wMDVmU0laRSI+QklUX1NJWkU8L2E+LCA8YSBocmVmPSJJQkNMUi5odG1sI0lCQ0xSIj5JQkNMUjwvYT4sIDxhIGhyZWY9IklCU0VULmh0bWwjSUJTRVQiPklCU0VUPC9hPiwgPGEgaHJlZj0iSUFORC5odG1sI0lBTkQiPklBTkQ8L2E+LCA8YSBocmVmPSJJT1IuaHRtbCNJT1IiPklPUjwvYT4sIDxhIGhyZWY9IklFT1IuaHRtbCNJRU9SIj5JRU9SPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lCU0VULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUJTRVQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjhiNzVkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lCU0VULmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUJTRVQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSUJJVFMuaHRtbCNJQklUUyIgdGl0bGU9IklCSVRTIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSUNIQVIuaHRtbCNJQ0hBUiIgdGl0bGU9IklDSEFSIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklCU0VUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklDSEFSLmh0bWwjSUNIQVIiPklDSEFSPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSUJJVFMuaHRtbCNJQklUUyI+SUJJVFM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTE5IDxjb2RlPklCU0VUPC9jb2RlPiAmbWRhc2g7IFNldCBiaXQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JQlNFVC03MzIiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzXzAwMmMtc2V0LTczMyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPklCU0VUPC9jb2RlPiByZXR1cm5zIHRoZSB2YWx1ZSBvZiA8dmFyPkk8L3Zhcj4gd2l0aCB0aGUgYml0IGF0IHBvc2l0aW9uCis8dmFyPlBPUzwvdmFyPiBzZXQgdG8gb25lLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IElCU0VUKEksIFBPUyk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlBPUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgc2FtZSBraW5kIGFzCis8dmFyPkk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSUJDTFIuaHRtbCNJQkNMUiI+SUJDTFI8L2E+LCA8YSBocmVmPSJJQklUUy5odG1sI0lCSVRTIj5JQklUUzwvYT4sIDxhIGhyZWY9IklBTkQuaHRtbCNJQU5EIj5JQU5EPC9hPiwgPGEgaHJlZj0iSU9SLmh0bWwjSU9SIj5JT1I8L2E+LCA8YSBocmVmPSJJRU9SLmh0bWwjSUVPUiI+SUVPUjwvYT4sIDxhIGhyZWY9Ik1WQklUUy5odG1sI01WQklUUyI+TVZCSVRTPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUNIQVIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JQ0hBUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NDI1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUNIQVIuaHRtbApAQCAtMCwwICsxLDExNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SUNIQVIgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSUJTRVQuaHRtbCNJQlNFVCIgdGl0bGU9IklCU0VUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSURBVEUuaHRtbCNJREFURSIgdGl0bGU9IklEQVRFIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklDSEFSIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklEQVRFLmh0bWwjSURBVEUiPklEQVRFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSUJTRVQuaHRtbCNJQlNFVCI+SUJTRVQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTIwIDxjb2RlPklDSEFSPC9jb2RlPiAmbWRhc2g7IENoYXJhY3Rlci10by1pbnRlZ2VyIGNvbnZlcnNpb24gZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JQ0hBUi03MzQiPjwvYT48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8taW50ZWdlci03MzUiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5JQ0hBUihDKTwvY29kZT4gcmV0dXJucyB0aGUgY29kZSBmb3IgdGhlIGNoYXJhY3RlciBpbiB0aGUgZmlyc3QgY2hhcmFjdGVyCitwb3NpdGlvbiBvZiA8Y29kZT5DPC9jb2RlPiBpbiB0aGUgc3lzdGVtJ3MgbmF0aXZlIGNoYXJhY3RlciBzZXQuIAorVGhlIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gY2hhcmFjdGVycyBhbmQgdGhlaXIgY29kZXMgaXMgbm90IG5lY2Vzc2FyaWx5Cit0aGUgc2FtZSBhY3Jvc3MgZGlmZmVyZW50IEdOVSBGb3J0cmFuIGltcGxlbWVudGF0aW9ucy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlciwgd2l0aCA8dmFyPktJTkQ8L3Zhcj4gYXJndW1lbnQgRm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBJQ0hBUihDIFssIEtJTkRdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkM8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4sIHdpdGggPGNvZGU+SU5URU5UKElOKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBBbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbml0aWFsaXphdGlvbgorZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBraW5kIHBhcmFtZXRlciBvZiB0aGUgcmVzdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2Yga2luZCA8dmFyPktJTkQ8L3Zhcj4uIElmCis8dmFyPktJTkQ8L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9mIGRlZmF1bHQgaW50ZWdlciBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9pY2hhcgorICAgICAgICAgICAgaW50ZWdlciBpCisgICAgICAgICAgICBpID0gaWNoYXIoJyAnKQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfaWNoYXIKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklDSEFSKEMpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNIQVJBQ1RFUiBDPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPk5vdGU8L2VtPjo8ZGQ+Tm8gaW50cmluc2ljIGV4aXN0cyB0byBjb252ZXJ0IGJldHdlZW4gYSBudW1lcmljIHZhbHVlIGFuZCBhIGZvcm1hdHRlZAorY2hhcmFjdGVyIHN0cmluZyByZXByZXNlbnRhdGlvbiAmbmRhc2g7IGZvciBpbnN0YW5jZSwgZ2l2ZW4gdGhlCis8Y29kZT5DSEFSQUNURVI8L2NvZGU+IHZhbHVlIDxjb2RlPicxNTQnPC9jb2RlPiwgb2J0YWluaW5nIGFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9yCis8Y29kZT5SRUFMPC9jb2RlPiB2YWx1ZSB3aXRoIHRoZSB2YWx1ZSAxNTQsIG9yIHZpY2UgdmVyc2EuIEluc3RlYWQsIHRoaXMKK2Z1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQgYnkgaW50ZXJuYWwtZmlsZSBJL08sIGFzIGluIHRoZSBmb2xsb3dpbmcKK2V4YW1wbGU6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gcmVhZF92YWwKKyAgICAgICAgICAgIGludGVnZXIgdmFsdWUKKyAgICAgICAgICAgIGNoYXJhY3RlcihsZW49MTApIHN0cmluZywgc3RyaW5nMgorICAgICAgICAgICAgc3RyaW5nID0gJzE1NCcKKyAgICAgICAgICAKKyAgICAgICAgICAgICEgQ29udmVydCBhIHN0cmluZyB0byBhIG51bWVyaWMgdmFsdWUKKyAgICAgICAgICAgIHJlYWQgKHN0cmluZywnKEkxMCknKSB2YWx1ZQorICAgICAgICAgICAgcHJpbnQgKiwgdmFsdWUKKyAgICAgICAgICAKKyAgICAgICAgICAgICEgQ29udmVydCBhIHZhbHVlIHRvIGEgZm9ybWF0dGVkIHN0cmluZworICAgICAgICAgICAgd3JpdGUgKHN0cmluZzIsJyhJMTApJykgdmFsdWUKKyAgICAgICAgICAgIHByaW50ICosIHN0cmluZzIKKyAgICAgICAgICBlbmQgcHJvZ3JhbSByZWFkX3ZhbAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkFDSEFSLmh0bWwjQUNIQVIiPkFDSEFSPC9hPiwgPGEgaHJlZj0iQ0hBUi5odG1sI0NIQVIiPkNIQVI8L2E+LCA8YSBocmVmPSJJQUNIQVIuaHRtbCNJQUNIQVIiPklBQ0hBUjwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lEQVRFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSURBVEUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Q2NjhlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lEQVRFLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SURBVEUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSUNIQVIuaHRtbCNJQ0hBUiIgdGl0bGU9IklDSEFSIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSUVPUi5odG1sI0lFT1IiIHRpdGxlPSJJRU9SIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklEQVRFIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklFT1IuaHRtbCNJRU9SIj5JRU9SPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSUNIQVIuaHRtbCNJQ0hBUiI+SUNIQVI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTIxIDxjb2RlPklEQVRFPC9jb2RlPiAmbWRhc2g7IEdldCBjdXJyZW50IGxvY2FsIHRpbWUgc3Vicm91dGluZSAoZGF5L21vbnRoL3llYXIpPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSURBVEUtNzM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGF0ZV8wMDJjLWN1cnJlbnQtNzM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtY3VycmVudC1kYXRlLTczOCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPklEQVRFKFZBTFVFUyk8L2NvZGU+IEZpbGxzIDx2YXI+VkFMVUVTPC92YXI+IHdpdGggdGhlIG51bWVyaWNhbCB2YWx1ZXMgYXQgdGhlCitjdXJyZW50IGxvY2FsIHRpbWUuIFRoZSBkYXkgKGluIHRoZSByYW5nZSAxLTMxKSwgbW9udGggKGluIHRoZSByYW5nZSAxLTEyKSwKK2FuZCB5ZWFyIGFwcGVhciBpbiBlbGVtZW50cyAxLCAyLCBhbmQgMyBvZiA8dmFyPlZBTFVFUzwvdmFyPiwgcmVzcGVjdGl2ZWx5LiAKK1RoZSB5ZWFyIGhhcyBmb3VyIHNpZ25pZmljYW50IGRpZ2l0cy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIElEQVRFKFZBTFVFUyk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5WQUxVRVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVIsIERJTUVOU0lPTigzKTwvY29kZT4gYW5kCit0aGUga2luZCBzaGFsbCBiZSB0aGUgZGVmYXVsdCBpbnRlZ2VyIGtpbmQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+RG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9pZGF0ZQorICAgICAgICAgICAgaW50ZWdlciwgZGltZW5zaW9uKDMpIDo6IHRhcnJheQorICAgICAgICAgICAgY2FsbCBpZGF0ZSh0YXJyYXkpCisgICAgICAgICAgICBwcmludCAqLCB0YXJyYXkoMSkKKyAgICAgICAgICAgIHByaW50ICosIHRhcnJheSgyKQorICAgICAgICAgICAgcHJpbnQgKiwgdGFycmF5KDMpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9pZGF0ZQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JRU9SLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUVPUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzQwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUVPUi5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklFT1IgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSURBVEUuaHRtbCNJREFURSIgdGl0bGU9IklEQVRFIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSUVSUk5PLmh0bWwjSUVSUk5PIiB0aXRsZT0iSUVSUk5PIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklFT1IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSUVSUk5PLmh0bWwjSUVSUk5PIj5JRVJSTk88L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJREFURS5odG1sI0lEQVRFIj5JREFURTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMjIgPGNvZGU+SUVPUjwvY29kZT4gJm1kYXNoOyBCaXR3aXNlIGxvZ2ljYWwgZXhjbHVzaXZlIG9yPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSUVPUi03MzkiPjwvYT48YSBuYW1lPSJpbmRleC1iaXR3aXNlLWxvZ2ljYWwtZXhjbHVzaXZlLW9yLTc0MCI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZ2ljYWwtZXhjbHVzaXZlLW9yXzAwMmMtYml0d2lzZS03NDEiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5JRU9SPC9jb2RlPiByZXR1cm5zIHRoZSBiaXR3aXNlIEJvb2xlYW4gZXhjbHVzaXZlLU9SIG9mIDx2YXI+STwvdmFyPiBhbmQKKzx2YXI+SjwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBJRU9SKEksIEopPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5KPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiwgb2YgdGhlIHNhbWUKK2tpbmQgYXMgPHZhcj5JPC92YXI+LiAgKEFzIGEgR05VIGV4dGVuc2lvbiwgZGlmZmVyZW50IGtpbmRzIGFyZSBhbHNvCitwZXJtaXR0ZWQuKQorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdHlwZSBpcyA8Y29kZT5JTlRFR0VSPC9jb2RlPiwgb2YgdGhlIHNhbWUga2luZCBhcyB0aGUKK2FyZ3VtZW50cy4gIChJZiB0aGUgYXJndW1lbnQga2luZHMgZGlmZmVyLCBpdCBpcyBvZiB0aGUgc2FtZSBraW5kIGFzCit0aGUgbGFyZ2VyIGFyZ3VtZW50LikKKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJJT1IuaHRtbCNJT1IiPklPUjwvYT4sIDxhIGhyZWY9IklBTkQuaHRtbCNJQU5EIj5JQU5EPC9hPiwgPGEgaHJlZj0iSUJJVFMuaHRtbCNJQklUUyI+SUJJVFM8L2E+LCA8YSBocmVmPSJJQlNFVC5odG1sI0lCU0VUIj5JQlNFVDwvYT4sIDxhIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiPklCQ0xSPC9hPiwgPGEgaHJlZj0iTk9ULmh0bWwjTk9UIj5OT1Q8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUVSUk5PLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSUVSUk5PLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3MTdkOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JRVJSTk8uaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JRVJSTk8gLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSUVPUi5odG1sI0lFT1IiIHRpdGxlPSJJRU9SIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSU1BR0VfMDA1ZklOREVYLmh0bWwjSU1BR0VfMDA1ZklOREVYIiB0aXRsZT0iSU1BR0VfSU5ERVgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSUVSUk5PIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklNQUdFXzAwNWZJTkRFWC5odG1sI0lNQUdFXzAwNWZJTkRFWCI+SU1BR0VfSU5ERVg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJRU9SLmh0bWwjSUVPUiI+SUVPUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMjMgPGNvZGU+SUVSUk5PPC9jb2RlPiAmbWRhc2g7IEdldCB0aGUgbGFzdCBzeXN0ZW0gZXJyb3IgbnVtYmVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSUVSUk5PLTc0MiI+PC9hPjxhIG5hbWU9ImluZGV4LXN5c3RlbV8wMDJjLWVycm9yLWhhbmRsaW5nLTc0MyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJldHVybnMgdGhlIGxhc3Qgc3lzdGVtIGVycm9yIG51bWJlciwgYXMgZ2l2ZW4gYnkgdGhlIEMgPGNvZGU+ZXJybm88L2NvZGU+Cit2YXJpYWJsZS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSUVSUk5PKCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPk5vbmUuCisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YgdGhlIGRlZmF1bHQgaW50ZWdlcgora2luZC4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJQRVJST1IuaHRtbCNQRVJST1IiPlBFUlJPUjwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JTUFHRV8wMDVmSU5ERVguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JTUFHRV8wMDVmSU5ERVguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjZjODUwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lNQUdFXzAwNWZJTkRFWC5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklNQUdFX0lOREVYIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklFUlJOTy5odG1sI0lFUlJOTyIgdGl0bGU9IklFUlJOTyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklOREVYLWludHJpbnNpYy5odG1sI0lOREVYLWludHJpbnNpYyIgdGl0bGU9IklOREVYIGludHJpbnNpYyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJTUFHRV9JTkRFWCI+PC9hPgorPGEgbmFtZT0iSU1BR0VfMDA1ZklOREVYIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklOREVYLWludHJpbnNpYy5odG1sI0lOREVYLWludHJpbnNpYyI+SU5ERVggaW50cmluc2ljPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSUVSUk5PLmh0bWwjSUVSUk5PIj5JRVJSTk88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTI0IDxjb2RlPklNQUdFX0lOREVYPC9jb2RlPiAmbWRhc2g7IEZ1bmN0aW9uIHRoYXQgY29udmVydHMgYSBjb3N1YnNjcmlwdCB0byBhbiBpbWFnZSBpbmRleDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUlNQUdFXzAwNWZJTkRFWC03NDQiPjwvYT48YSBuYW1lPSJpbmRleC1jb2FycmF5XzAwMmMtXzAwNDBjb2RlXzAwN2JJTUFHRV8wMDVmSU5ERVhfMDA3ZC03NDUiPjwvYT48YSBuYW1lPSJpbmRleC1pbWFnZXNfMDAyYy1jb3N1YnNjcmlwdC10by1pbWFnZS1pbmRleC1jb252ZXJzaW9uLTc0NiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJldHVybnMgdGhlIGltYWdlIGluZGV4IGJlbG9uZ2luZyB0byBhIGNvc3Vic2NyaXB0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uLgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBJTUFHRV9JTkRFWChDT0FSUkFZLCBTVUIpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OiBOb25lLjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+Q09BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+Q29hcnJheSBvZiBhbnkgdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNVQjwvdmFyPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPmRlZmF1bHQgaW50ZWdlciByYW5rLTEgYXJyYXkgb2YgYSBzaXplIGVxdWFsIHRvCit0aGUgY29yYW5rIG9mIDx2YXI+Q09BUlJBWTwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5TY2FsYXIgZGVmYXVsdCBpbnRlZ2VyIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBpbWFnZSBpbmRleCB3aGljaCBjb3JyZXNwb25kcwordG8gdGhlIGNvc3Vic2NyaXB0cy4gRm9yIGludmFsaWQgY29zdWJzY3JpcHRzIHRoZSByZXN1bHQgaXMgemVyby4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBJTlRFR0VSIDo6IGFycmF5WzIsLTE6NCw4LCpdCisgICAgICAgICAgISBXcml0ZXMgIDI4IChvciAwIGlmIHRoZXJlIGFyZSBmZXdlciB0aGFuIDI4IGltYWdlcykKKyAgICAgICAgICBXUklURSAoKiwqKSBJTUFHRV9JTkRFWCAoYXJyYXksIFsyLDAsMywxXSkKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJUSElTXzAwNWZJTUFHRS5odG1sI1RISVNfMDA1ZklNQUdFIj5USElTX0lNQUdFPC9hPiwgPGEgaHJlZj0iTlVNXzAwNWZJTUFHRVMuaHRtbCNOVU1fMDA1ZklNQUdFUyI+TlVNX0lNQUdFUzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JTkRFWC1pbnRyaW5zaWMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JTkRFWC1pbnRyaW5zaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODY4MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lOREVYLWludHJpbnNpYy5odG1sCkBAIC0wLDAgKzEsOTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklOREVYIGludHJpbnNpYyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJTUFHRV8wMDVmSU5ERVguaHRtbCNJTUFHRV8wMDVmSU5ERVgiIHRpdGxlPSJJTUFHRV9JTkRFWCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklOVC5odG1sI0lOVCIgdGl0bGU9IklOVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJTkRFWC1pbnRyaW5zaWMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSU5ULmh0bWwjSU5UIj5JTlQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJTUFHRV8wMDVmSU5ERVguaHRtbCNJTUFHRV8wMDVmSU5ERVgiPklNQUdFX0lOREVYPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEyNSA8Y29kZT5JTkRFWDwvY29kZT4gJm1kYXNoOyBQb3NpdGlvbiBvZiBhIHN1YnN0cmluZyB3aXRoaW4gYSBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JTkRFWC03NDciPjwvYT48YSBuYW1lPSJpbmRleC1zdWJzdHJpbmctcG9zaXRpb24tNzQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nXzAwMmMtZmluZC1zdWJzdHJpbmctNzQ5Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHN0cmluZworPHZhcj5TVUJTVFJJTkc8L3Zhcj4gYXMgYSBzdWJzdHJpbmcgaW4gPHZhcj5TVFJJTkc8L3Zhcj4sIGNvdW50aW5nIGZyb20gb25lLiAgSWYKKzx2YXI+U1VCU1RSSU5HPC92YXI+IGlzIG5vdCBwcmVzZW50IGluIDx2YXI+U1RSSU5HPC92YXI+LCB6ZXJvIGlzIHJldHVybmVkLiAgSWYKK3RoZSA8dmFyPkJBQ0s8L3Zhcj4gYXJndW1lbnQgaXMgcHJlc2VudCBhbmQgdHJ1ZSwgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUKK3N0YXJ0IG9mIHRoZSBsYXN0IG9jY3VycmVuY2UgcmF0aGVyIHRoYW4gdGhlIGZpcnN0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyLCB3aXRoIDx2YXI+S0lORDwvdmFyPiBhcmd1bWVudCBGb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IElOREVYKFNUUklORywgU1VCU1RSSU5HIFssIEJBQ0sgWywgS0lORF1dKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUUklORzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiwgd2l0aAorPGNvZGU+SU5URU5UKElOKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1VCU1RSSU5HPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciA8Y29kZT5DSEFSQUNURVI8L2NvZGU+LCB3aXRoCis8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5CQUNLPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGEgc2NhbGFyIDxjb2RlPkxPR0lDQUw8L2NvZGU+LCB3aXRoCis8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiBraW5kIDx2YXI+S0lORDwvdmFyPi4gSWYKKzx2YXI+S0lORDwvdmFyPiBpcyBhYnNlbnQsIHRoZSByZXR1cm4gdmFsdWUgaXMgb2YgZGVmYXVsdCBpbnRlZ2VyIGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SU5ERVgoU1RSSU5HLCBTVUJTVFJJTkcpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlNDQU4uaHRtbCNTQ0FOIj5TQ0FOPC9hPiwgPGEgaHJlZj0iVkVSSUZZLmh0bWwjVkVSSUZZIj5WRVJJRlk8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSU5ULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSU5ULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI0NjBiYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JTlQuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SU5UIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklOREVYLWludHJpbnNpYy5odG1sI0lOREVYLWludHJpbnNpYyIgdGl0bGU9IklOREVYIGludHJpbnNpYyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklOVDIuaHRtbCNJTlQyIiB0aXRsZT0iSU5UMiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJTlQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSU5UMi5odG1sI0lOVDIiPklOVDI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJTkRFWC1pbnRyaW5zaWMuaHRtbCNJTkRFWC1pbnRyaW5zaWMiPklOREVYIGludHJpbnNpYzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMjYgPGNvZGU+SU5UPC9jb2RlPiAmbWRhc2g7IENvbnZlcnQgdG8gaW50ZWdlciB0eXBlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSU5ULTc1MCI+PC9hPjxhIG5hbWU9ImluZGV4LUlGSVgtNzUxIj48L2E+PGEgbmFtZT0iaW5kZXgtSURJTlQtNzUyIj48L2E+PGEgbmFtZT0iaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLWludGVnZXItNzUzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+Q29udmVydCB0byBpbnRlZ2VyIHR5cGUKKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBJTlQoQSBbLCBLSU5EKSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BPC92YXI+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LAorPGNvZGU+UkVBTDwvY29kZT4sIG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBBbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbml0aWFsaXphdGlvbgorZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBraW5kIHBhcmFtZXRlciBvZiB0aGUgcmVzdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gYSA8Y29kZT5JTlRFR0VSPC9jb2RlPiB2YXJpYWJsZSBvciBhcnJheSB1bmRlcgordGhlIGZvbGxvd2luZyBydWxlczoKKworICAgICAgICAgIDxkbD4KKzxkdD4oQSk8ZGQ+SWYgPHZhcj5BPC92YXI+IGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4sIDxjb2RlPklOVChBKSA9IEE8L2NvZGU+Cis8YnI+PGR0PihCKTxkZD5JZiA8dmFyPkE8L3Zhcj4gaXMgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBhbmQgfEF8ICZsdDsgMSwgPGNvZGU+SU5UKEEpPC9jb2RlPiBlcXVhbHMgPGNvZGU+MDwvY29kZT4uIAorSWYgfEF8IFxnZXEgMSwgdGhlbiA8Y29kZT5JTlQoQSk8L2NvZGU+IGVxdWFscyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQgZG9lcyBub3QgZXhjZWVkCit0aGUgcmFuZ2Ugb2YgPHZhcj5BPC92YXI+IGFuZCB3aG9zZSBzaWduIGlzIHRoZSBzYW1lIGFzIHRoZSBzaWduIG9mIDx2YXI+QTwvdmFyPi4gCis8YnI+PGR0PihDKTxkZD5JZiA8dmFyPkE8L3Zhcj4gaXMgb2YgdHlwZSA8Y29kZT5DT01QTEVYPC9jb2RlPiwgcnVsZSBCIGlzIGFwcGxpZWQgdG8gdGhlIHJlYWwgcGFydCBvZiA8dmFyPkE8L3Zhcj4uIAorPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfaW50CisgICAgICAgICAgICBpbnRlZ2VyIDo6IGkgPSA0MgorICAgICAgICAgICAgY29tcGxleCA6OiB6ID0gKC0zLjcsIDEuMCkKKyAgICAgICAgICAgIHByaW50ICosIGludChpKQorICAgICAgICAgICAgcHJpbnQgKiwgaW50KHopLCBpbnQoeiw4KQorICAgICAgICAgIGVuZCBwcm9ncmFtCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVChBKTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KSBBPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVEVHRVI8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SUZJWChBKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIEE8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SU5URUdFUjwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JRElOVChBKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgQTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSU5UMi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lOVDIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njk4OTg5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lOVDIuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JTlQyIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklOVC5odG1sI0lOVCIgdGl0bGU9IklOVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklOVDguaHRtbCNJTlQ4IiB0aXRsZT0iSU5UOCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJTlQyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklOVDguaHRtbCNJTlQ4Ij5JTlQ4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSU5ULmh0bWwjSU5UIj5JTlQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTI3IDxjb2RlPklOVDI8L2NvZGU+ICZtZGFzaDsgQ29udmVydCB0byAxNi1iaXQgaW50ZWdlciB0eXBlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSU5UMi03NTQiPjwvYT48YSBuYW1lPSJpbmRleC1TSE9SVC03NTUiPjwvYT48YSBuYW1lPSJpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8taW50ZWdlci03NTYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5Db252ZXJ0IHRvIGEgPGNvZGU+S0lORD0yPC9jb2RlPiBpbnRlZ2VyIHR5cGUuIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUKK3N0YW5kYXJkIDxjb2RlPklOVDwvY29kZT4gaW50cmluc2ljIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YKKzxjb2RlPktJTkQ9MjwvY29kZT4sIGFuZCBpcyBvbmx5IGluY2x1ZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworICAgICA8cD5UaGUgPGNvZGU+U0hPUlQ8L2NvZGU+IGludHJpbnNpYyBpcyBlcXVpdmFsZW50IHRvIDxjb2RlPklOVDI8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSU5UMihBKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkE8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4sCis8Y29kZT5SRUFMPC9jb2RlPiwgb3IgPGNvZGU+Q09NUExFWDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBhIDxjb2RlPklOVEVHRVIoMik8L2NvZGU+IHZhcmlhYmxlLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IklOVC5odG1sI0lOVCI+SU5UPC9hPiwgPGEgaHJlZj0iSU5UOC5odG1sI0lOVDgiPklOVDg8L2E+LCA8YSBocmVmPSJMT05HLmh0bWwjTE9ORyI+TE9ORzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JTlQ4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSU5UOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YWJlYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSU5UOC5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklOVDggLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSU5UMi5odG1sI0lOVDIiIHRpdGxlPSJJTlQyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSU9SLmh0bWwjSU9SIiB0aXRsZT0iSU9SIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklOVDgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSU9SLmh0bWwjSU9SIj5JT1I8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJTlQyLmh0bWwjSU5UMiI+SU5UMjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMjggPGNvZGU+SU5UODwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IHRvIDY0LWJpdCBpbnRlZ2VyIHR5cGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JTlQ4LTc1NyI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnZlcnNpb25fMDAyYy10by1pbnRlZ2VyLTc1OCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkNvbnZlcnQgdG8gYSA8Y29kZT5LSU5EPTg8L2NvZGU+IGludGVnZXIgdHlwZS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZQorc3RhbmRhcmQgPGNvZGU+SU5UPC9jb2RlPiBpbnRyaW5zaWMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudCBvZgorPGNvZGU+S0lORD04PC9jb2RlPiwgYW5kIGlzIG9ubHkgaW5jbHVkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSU5UOChBKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkE8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4sCis8Y29kZT5SRUFMPC9jb2RlPiwgb3IgPGNvZGU+Q09NUExFWDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBhIDxjb2RlPklOVEVHRVIoOCk8L2NvZGU+IHZhcmlhYmxlLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IklOVC5odG1sI0lOVCI+SU5UPC9hPiwgPGEgaHJlZj0iSU5UMi5odG1sI0lOVDIiPklOVDI8L2E+LCA8YSBocmVmPSJMT05HLmh0bWwjTE9ORyI+TE9ORzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JT1IuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JT1IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTg2M2EyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lPUi5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklPUiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJTlQ4Lmh0bWwjSU5UOCIgdGl0bGU9IklOVDgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJUEFSSVRZLmh0bWwjSVBBUklUWSIgdGl0bGU9IklQQVJJVFkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSU9SIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklQQVJJVFkuaHRtbCNJUEFSSVRZIj5JUEFSSVRZPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSU5UOC5odG1sI0lOVDgiPklOVDg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTI5IDxjb2RlPklPUjwvY29kZT4gJm1kYXNoOyBCaXR3aXNlIGxvZ2ljYWwgb3I8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JT1ItNzU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtYml0d2lzZS1sb2dpY2FsLW9yLTc2MCI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZ2ljYWwtb3JfMDAyYy1iaXR3aXNlLTc2MSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPklPUjwvY29kZT4gcmV0dXJucyB0aGUgYml0d2lzZSBCb29sZWFuIGluY2x1c2l2ZS1PUiBvZiA8dmFyPkk8L3Zhcj4gYW5kCis8dmFyPko8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSU9SKEksIEopPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5KPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiwgb2YgdGhlIHNhbWUKK2tpbmQgYXMgPHZhcj5JPC92YXI+LiAgKEFzIGEgR05VIGV4dGVuc2lvbiwgZGlmZmVyZW50IGtpbmRzIGFyZSBhbHNvCitwZXJtaXR0ZWQuKQorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdHlwZSBpcyA8Y29kZT5JTlRFR0VSPC9jb2RlPiwgb2YgdGhlIHNhbWUga2luZCBhcyB0aGUKK2FyZ3VtZW50cy4gIChJZiB0aGUgYXJndW1lbnQga2luZHMgZGlmZmVyLCBpdCBpcyBvZiB0aGUgc2FtZSBraW5kIGFzCit0aGUgbGFyZ2VyIGFyZ3VtZW50LikKKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJJRU9SLmh0bWwjSUVPUiI+SUVPUjwvYT4sIDxhIGhyZWY9IklBTkQuaHRtbCNJQU5EIj5JQU5EPC9hPiwgPGEgaHJlZj0iSUJJVFMuaHRtbCNJQklUUyI+SUJJVFM8L2E+LCA8YSBocmVmPSJJQlNFVC5odG1sI0lCU0VUIj5JQlNFVDwvYT4sIDxhIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiPklCQ0xSPC9hPiwgPGEgaHJlZj0iTk9ULmh0bWwjTk9UIj5OT1Q8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVBBUklUWS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lQQVJJVFkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDdiZmFjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lQQVJJVFkuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SVBBUklUWSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJT1IuaHRtbCNJT1IiIHRpdGxlPSJJT1IiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJUkFORC5odG1sI0lSQU5EIiB0aXRsZT0iSVJBTkQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSVBBUklUWSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJUkFORC5odG1sI0lSQU5EIj5JUkFORDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklPUi5odG1sI0lPUiI+SU9SPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEzMCA8Y29kZT5JUEFSSVRZPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgWE9SIG9mIGFycmF5IGVsZW1lbnRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSVBBUklUWS03NjIiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLXBhcml0eS03NjMiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLVhPUi03NjQiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzXzAwMmMtWE9SLW9mLWFycmF5LWVsZW1lbnRzLTc2NSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJlZHVjZXMgd2l0aCBiaXR3aXNlIFhPUiAoZXhjbHVzaXZlIG9yKSB0aGUgZWxlbWVudHMgb2YgPHZhcj5BUlJBWTwvdmFyPiBhbG9uZworZGltZW5zaW9uIDx2YXI+RElNPC92YXI+IGlmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaW4gPHZhcj5NQVNLPC92YXI+IGlzIDxjb2RlPlRSVUU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+UkVTVUxUID0gSVBBUklUWShBUlJBWVssIE1BU0tdKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IElQQVJJVFkoQVJSQVksIERJTVssIE1BU0tdKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QVJSQVk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGFuIGFycmF5IG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZQorPGNvZGU+SU5URUdFUjwvY29kZT4gd2l0aCBhIHZhbHVlIGluIHRoZSByYW5nZSBmcm9tIDEgdG8gbiwgd2hlcmUgbgorZXF1YWxzIHRoZSByYW5rIG9mIDx2YXI+QVJSQVk8L3Zhcj4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5NQVNLPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+CithbmQgZWl0aGVyIGJlIGEgc2NhbGFyIG9yIGFuIGFycmF5IG9mIHRoZSBzYW1lIHNoYXBlIGFzIDx2YXI+QVJSQVk8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJlc3VsdCBpcyBvZiB0aGUgc2FtZSB0eXBlIGFzIDx2YXI+QVJSQVk8L3Zhcj4uCisKKyAgICAgPHA+SWYgPHZhcj5ESU08L3Zhcj4gaXMgYWJzZW50LCBhIHNjYWxhciB3aXRoIHRoZSBiaXR3aXNlIFhPUiBvZiBhbGwgZWxlbWVudHMgaW4KKzx2YXI+QVJSQVk8L3Zhcj4gaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYW4gYXJyYXkgb2YgcmFuayBuLTEsIHdoZXJlIG4gZXF1YWxzCit0aGUgcmFuayBvZiA8dmFyPkFSUkFZPC92YXI+LCBhbmQgYSBzaGFwZSBzaW1pbGFyIHRvIHRoYXQgb2YgPHZhcj5BUlJBWTwvdmFyPiB3aXRoCitkaW1lbnNpb24gPHZhcj5ESU08L3Zhcj4gZHJvcHBlZCBpcyByZXR1cm5lZC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfaXBhcml0eQorICAgICAgICAgICAgSU5URUdFUigxKSA6OiBhKDIpCisgICAgICAgICAgCisgICAgICAgICAgICBhKDEpID0gYicwMDEwMDEwMCcKKyAgICAgICAgICAgIGEoMikgPSBiJzAxMTAxMDEwJworICAgICAgICAgIAorICAgICAgICAgICAgISBwcmludHMgMDEwMDExMTAKKyAgICAgICAgICAgIFBSSU5UICcoYjguOCknLCBJUEFSSVRZKGEpCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJJQU5ZLmh0bWwjSUFOWSI+SUFOWTwvYT4sIDxhIGhyZWY9IklBTEwuaHRtbCNJQUxMIj5JQUxMPC9hPiwgPGEgaHJlZj0iSUVPUi5odG1sI0lFT1IiPklFT1I8L2E+LCA8YSBocmVmPSJQQVJJVFkuaHRtbCNQQVJJVFkiPlBBUklUWTwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JUkFORC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lSQU5ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlZjMyNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JUkFORC5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklSQU5EIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklQQVJJVFkuaHRtbCNJUEFSSVRZIiB0aXRsZT0iSVBBUklUWSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklTXzAwNWZJT1NUQVRfMDA1ZkVORC5odG1sI0lTXzAwNWZJT1NUQVRfMDA1ZkVORCIgdGl0bGU9IklTX0lPU1RBVF9FTkQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSVJBTkQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSVNfMDA1ZklPU1RBVF8wMDVmRU5ELmh0bWwjSVNfMDA1ZklPU1RBVF8wMDVmRU5EIj5JU19JT1NUQVRfRU5EPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSVBBUklUWS5odG1sI0lQQVJJVFkiPklQQVJJVFk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTMxIDxjb2RlPklSQU5EPC9jb2RlPiAmbWRhc2g7IEludGVnZXIgcHNldWRvLXJhbmRvbSBudW1iZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JUkFORC03NjYiPjwvYT48YSBuYW1lPSJpbmRleC1yYW5kb20tbnVtYmVyLWdlbmVyYXRpb24tNzY3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+SVJBTkQoRkxBRyk8L2NvZGU+IHJldHVybnMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBmcm9tIGEgdW5pZm9ybQorZGlzdHJpYnV0aW9uIGJldHdlZW4gMCBhbmQgYSBzeXN0ZW0tZGVwZW5kZW50IGxpbWl0ICh3aGljaCBpcyBpbiBtb3N0CitjYXNlcyAyMTQ3NDgzNjQ3KS4gSWYgPHZhcj5GTEFHPC92YXI+IGlzIDAsIHRoZSBuZXh0IG51bWJlcgoraW4gdGhlIGN1cnJlbnQgc2VxdWVuY2UgaXMgcmV0dXJuZWQ7IGlmIDx2YXI+RkxBRzwvdmFyPiBpcyAxLCB0aGUgZ2VuZXJhdG9yCitpcyByZXN0YXJ0ZWQgYnkgPGNvZGU+Q0FMTCBTUkFORCgwKTwvY29kZT47IGlmIDx2YXI+RkxBRzwvdmFyPiBoYXMgYW55IG90aGVyIHZhbHVlLAoraXQgaXMgdXNlZCBhcyBhIG5ldyBzZWVkIHdpdGggPGNvZGU+U1JBTkQ8L2NvZGU+LgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIHJvdXRpbmUgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKK0dOVSBGb3J0cmFuIDc3LiBJdCBpbXBsZW1lbnRzIGEgc2ltcGxlIG1vZHVsbyBnZW5lcmF0b3IgYXMgcHJvdmlkZWQKK2J5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPi4gRm9yIG5ldyBjb2RlLCBvbmUgc2hvdWxkIGNvbnNpZGVyIHRoZSB1c2Ugb2YKKzxhIGhyZWY9IlJBTkRPTV8wMDVmTlVNQkVSLmh0bWwjUkFORE9NXzAwNWZOVU1CRVIiPlJBTkRPTV9OVU1CRVI8L2E+IGFzIGl0IGltcGxlbWVudHMgYSBzdXBlcmlvciBhbGdvcml0aG0uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IElSQU5EKEkpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgPGNvZGU+SU5URUdFUjwvY29kZT4gb2Yga2luZCA0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgPGNvZGU+SU5URUdFUihraW5kPTQpPC9jb2RlPiB0eXBlLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9pcmFuZAorICAgICAgICAgICAgaW50ZWdlcixwYXJhbWV0ZXIgOjogc2VlZCA9IDg2NDU2CisgICAgICAgICAgCisgICAgICAgICAgICBjYWxsIHNyYW5kKHNlZWQpCisgICAgICAgICAgICBwcmludCAqLCBpcmFuZCgpLCBpcmFuZCgpLCBpcmFuZCgpLCBpcmFuZCgpCisgICAgICAgICAgICBwcmludCAqLCBpcmFuZChzZWVkKSwgaXJhbmQoKSwgaXJhbmQoKSwgaXJhbmQoKQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfaXJhbmQKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNBVFRZLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNBVFRZLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzNzVkNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JU0FUVFkuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JU0FUVFkgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSVNfMDA1ZklPU1RBVF8wMDVmRU9SLmh0bWwjSVNfMDA1ZklPU1RBVF8wMDVmRU9SIiB0aXRsZT0iSVNfSU9TVEFUX0VPUiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklTSEZULmh0bWwjSVNIRlQiIHRpdGxlPSJJU0hGVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJU0FUVFkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSVNIRlQuaHRtbCNJU0hGVCI+SVNIRlQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJU18wMDVmSU9TVEFUXzAwNWZFT1IuaHRtbCNJU18wMDVmSU9TVEFUXzAwNWZFT1IiPklTX0lPU1RBVF9FT1I8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTM0IDxjb2RlPklTQVRUWTwvY29kZT4gJm1kYXNoOyBXaGV0aGVyIGEgdW5pdCBpcyBhIHRlcm1pbmFsIGRldmljZS48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JU0FUVFktNzcyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3lzdGVtXzAwMmMtdGVybWluYWwtNzczIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+RGV0ZXJtaW5lIHdoZXRoZXIgYSB1bml0IGlzIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsIGRldmljZS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSVNBVFRZKFVOSVQpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VU5JVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+UmV0dXJucyA8Y29kZT4uVFJVRS48L2NvZGU+IGlmIHRoZSA8dmFyPlVOSVQ8L3Zhcj4gaXMgY29ubmVjdGVkIHRvIGEgdGVybWluYWwKK2RldmljZSwgPGNvZGU+LkZBTFNFLjwvY29kZT4gb3RoZXJ3aXNlLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9pc2F0dHkKKyAgICAgICAgICAgIElOVEVHRVIoa2luZD0xKSA6OiB1bml0CisgICAgICAgICAgICBETyB1bml0ID0gMSwgMTAKKyAgICAgICAgICAgICAgd3JpdGUoKiwqKSBpc2F0dHkodW5pdD11bml0KQorICAgICAgICAgICAgRU5EIERPCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJUVFlOQU0uaHRtbCNUVFlOQU0iPlRUWU5BTTwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JU0hGVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lTSEZULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjNjNhMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JU0hGVC5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklTSEZUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklTQVRUWS5odG1sI0lTQVRUWSIgdGl0bGU9IklTQVRUWSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklTSEZUQy5odG1sI0lTSEZUQyIgdGl0bGU9IklTSEZUQyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJU0hGVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJU0hGVEMuaHRtbCNJU0hGVEMiPklTSEZUQzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklTQVRUWS5odG1sI0lTQVRUWSI+SVNBVFRZPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEzNSA8Y29kZT5JU0hGVDwvY29kZT4gJm1kYXNoOyBTaGlmdCBiaXRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtSVNIRlQtNzc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtYml0c18wMDJjLXNoaWZ0LTc3NSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPklTSEZUPC9jb2RlPiByZXR1cm5zIGEgdmFsdWUgY29ycmVzcG9uZGluZyB0byA8dmFyPkk8L3Zhcj4gd2l0aCBhbGwgb2YgdGhlCitiaXRzIHNoaWZ0ZWQgPHZhcj5TSElGVDwvdmFyPiBwbGFjZXMuICBBIHZhbHVlIG9mIDx2YXI+U0hJRlQ8L3Zhcj4gZ3JlYXRlciB0aGFuCit6ZXJvIGNvcnJlc3BvbmRzIHRvIGEgbGVmdCBzaGlmdCwgYSB2YWx1ZSBvZiB6ZXJvIGNvcnJlc3BvbmRzIHRvIG5vCitzaGlmdCwgYW5kIGEgdmFsdWUgbGVzcyB0aGFuIHplcm8gY29ycmVzcG9uZHMgdG8gYSByaWdodCBzaGlmdC4gIElmIHRoZQorYWJzb2x1dGUgdmFsdWUgb2YgPHZhcj5TSElGVDwvdmFyPiBpcyBncmVhdGVyIHRoYW4gPGNvZGU+QklUX1NJWkUoSSk8L2NvZGU+LCB0aGUKK3ZhbHVlIGlzIHVuZGVmaW5lZC4gIEJpdHMgc2hpZnRlZCBvdXQgZnJvbSB0aGUgbGVmdCBlbmQgb3IgcmlnaHQgZW5kIGFyZQorbG9zdDsgemVyb3MgYXJlIHNoaWZ0ZWQgaW4gZnJvbSB0aGUgb3Bwb3NpdGUgZW5kLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IElTSEZUKEksIFNISUZUKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U0hJRlQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YgdGhlIHNhbWUga2luZCBhcworPHZhcj5JPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IklTSEZUQy5odG1sI0lTSEZUQyI+SVNIRlRDPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lTSEZUQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lTSEZUQy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGRkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNIRlRDLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SVNIRlRDIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklTSEZULmh0bWwjSVNIRlQiIHRpdGxlPSJJU0hGVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklTTkFOLmh0bWwjSVNOQU4iIHRpdGxlPSJJU05BTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJU0hGVEMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSVNOQU4uaHRtbCNJU05BTiI+SVNOQU48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJU0hGVC5odG1sI0lTSEZUIj5JU0hGVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMzYgPGNvZGU+SVNIRlRDPC9jb2RlPiAmbWRhc2g7IFNoaWZ0IGJpdHMgY2lyY3VsYXJseTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUlTSEZUQy03NzYiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzXzAwMmMtc2hpZnQtY2lyY3VsYXItNzc3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+SVNIRlRDPC9jb2RlPiByZXR1cm5zIGEgdmFsdWUgY29ycmVzcG9uZGluZyB0byA8dmFyPkk8L3Zhcj4gd2l0aCB0aGUKK3JpZ2h0bW9zdCA8dmFyPlNJWkU8L3Zhcj4gYml0cyBzaGlmdGVkIGNpcmN1bGFybHkgPHZhcj5TSElGVDwvdmFyPiBwbGFjZXM7IHRoYXQKK2lzLCBiaXRzIHNoaWZ0ZWQgb3V0IG9uZSBlbmQgYXJlIHNoaWZ0ZWQgaW50byB0aGUgb3Bwb3NpdGUgZW5kLiAgQSB2YWx1ZQorb2YgPHZhcj5TSElGVDwvdmFyPiBncmVhdGVyIHRoYW4gemVybyBjb3JyZXNwb25kcyB0byBhIGxlZnQgc2hpZnQsIGEgdmFsdWUgb2YKK3plcm8gY29ycmVzcG9uZHMgdG8gbm8gc2hpZnQsIGFuZCBhIHZhbHVlIGxlc3MgdGhhbiB6ZXJvIGNvcnJlc3BvbmRzIHRvCithIHJpZ2h0IHNoaWZ0LiAgVGhlIGFic29sdXRlIHZhbHVlIG9mIDx2YXI+U0hJRlQ8L3Zhcj4gbXVzdCBiZSBsZXNzIHRoYW4KKzx2YXI+U0laRTwvdmFyPi4gIElmIHRoZSA8dmFyPlNJWkU8L3Zhcj4gYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgaXMgdGFrZW4gdG8gYmUKK2VxdWl2YWxlbnQgdG8gPGNvZGU+QklUX1NJWkUoSSk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IElTSEZUQyhJLCBTSElGVCBbLCBTSVpFXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNISUZUPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNJWkU8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgVGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT47Cit0aGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCis8Y29kZT5CSVRfU0laRShJKTwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgc2FtZSBraW5kIGFzCis8dmFyPkk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSVNIRlQuaHRtbCNJU0hGVCI+SVNIRlQ8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNOQU4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JU05BTi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNTVhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNOQU4uaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JU05BTiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJU0hGVEMuaHRtbCNJU0hGVEMiIHRpdGxlPSJJU0hGVEMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJVElNRS5odG1sI0lUSU1FIiB0aXRsZT0iSVRJTUUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSVNOQU4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSVRJTUUuaHRtbCNJVElNRSI+SVRJTUU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJU0hGVEMuaHRtbCNJU0hGVEMiPklTSEZUQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMzcgPGNvZGU+SVNOQU48L2NvZGU+ICZtZGFzaDsgVGVzdCBmb3IgYSBOYU48L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JU05BTi03NzgiPjwvYT48YSBuYW1lPSJpbmRleC1JRUVFXzAwMmMtSVNOQU4tNzc5Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+SVNOQU48L2NvZGU+IHRlc3RzIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBpcyBhbiBJRUVFCitOb3QtYS1OdW1iZXIgKE5hTikuIAorPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5JU05BTihYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlZhcmlhYmxlIG9mIHRoZSB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LgorCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+UmV0dXJucyBhIGRlZmF1bHQta2luZCA8Y29kZT5MT0dJQ0FMPC9jb2RlPi4gVGhlIHJldHVybmVkIHZhbHVlIGlzIDxjb2RlPlRSVUU8L2NvZGU+CitpZiA8dmFyPlg8L3Zhcj4gaXMgYSBOYU4gYW5kIDxjb2RlPkZBTFNFPC9jb2RlPiBvdGhlcndpc2UuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X25hbgorICAgICAgICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgICAgICAgcmVhbCA6OiB4CisgICAgICAgICAgICB4ID0gLTEuMAorICAgICAgICAgICAgeCA9IHNxcnQoeCkKKyAgICAgICAgICAgIGlmIChpc25hbih4KSkgc3RvcCAnIngiIGlzIGEgTmFOJworICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfbmFuCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lTT18wMDVmQ18wMDVmQklORElORy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lTT18wMDVmQ18wMDVmQklORElORy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2ZhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNPXzAwNWZDXzAwNWZCSU5ESU5HLmh0bWwKQEAgLTAsMCArMSwxNDIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklTT19DX0JJTkRJTkcgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLU1vZHVsZXMuaHRtbCNJbnRyaW5zaWMtTW9kdWxlcyIgdGl0bGU9IkludHJpbnNpYyBNb2R1bGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlYuaHRtbCNJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOViIgdGl0bGU9IklTT19GT1JUUkFOX0VOViI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik9wZW5NUC1Nb2R1bGVzLU9NUF8wMDVmTElCLWFuZC1PTVBfMDA1ZkxJQl8wMDVmS0lORFMuaHRtbCNPcGVuTVAtTW9kdWxlcy1PTVBfMDA1ZkxJQi1hbmQtT01QXzAwNWZMSUJfMDA1ZktJTkRTIiB0aXRsZT0iT3Blbk1QIE1vZHVsZXMgT01QX0xJQiBhbmQgT01QX0xJQl9LSU5EUyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJU09fQ19CSU5ESU5HIj48L2E+Cis8YSBuYW1lPSJJU09fMDA1ZkNfMDA1ZkJJTkRJTkciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3Blbk1QLU1vZHVsZXMtT01QXzAwNWZMSUItYW5kLU9NUF8wMDVmTElCXzAwNWZLSU5EUy5odG1sI09wZW5NUC1Nb2R1bGVzLU9NUF8wMDVmTElCLWFuZC1PTVBfMDA1ZkxJQl8wMDVmS0lORFMiPk9wZW5NUCBNb2R1bGVzIE9NUF9MSUIgYW5kIE9NUF9MSUJfS0lORFM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOVi5odG1sI0lTT18wMDVmRk9SVFJBTl8wMDVmRU5WIj5JU09fRk9SVFJBTl9FTlY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtTW9kdWxlcy5odG1sI0ludHJpbnNpYy1Nb2R1bGVzIj5JbnRyaW5zaWMgTW9kdWxlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMiA8Y29kZT5JU09fQ19CSU5ESU5HPC9jb2RlPjwvaDM+CisKKyAgICAgPGRsPgorPGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDMgYW5kIGxhdGVyLCBHTlUgZXh0ZW5zaW9ucworPC9kbD4KKworICAgPHA+VGhlIGZvbGxvd2luZyBpbnRyaW5zaWMgcHJvY2VkdXJlcyBhcmUgcHJvdmlkZWQgYnkgdGhlIG1vZHVsZTsgdGhlaXIKK2RlZmluaXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBzZWN0aW9uIEludHJpbnNpYyBQcm9jZWR1cmVzIG9mIHRoaXMKK21hbnVhbC4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+Q19BU1NPQ0lBVEVEPC9jb2RlPjxicj48ZHQ+PGNvZGU+Q19GX1BPSU5URVI8L2NvZGU+PGJyPjxkdD48Y29kZT5DX0ZfUFJPQ1BPSU5URVI8L2NvZGU+PGJyPjxkdD48Y29kZT5DX0ZVTkxPQzwvY29kZT48YnI+PGR0Pjxjb2RlPkNfTE9DPC9jb2RlPjxicj48ZHQ+PGNvZGU+Q19TSVpFT0Y8L2NvZGU+PGRkPjwvZGw+CisgICA8IS0tIFRPRE86IFZlcnRpY2FsIHNwYWNpbmcgYmV0d2VlbiBDX0ZVTkxPQyBhbmQgQ19MT0Mgd3JvbmcgaW4gUERGLCAtLT4KKzwhLS0gZG9uJ3QgcmVhbGx5IGtub3cgd2h5LiAtLT4KKworICAgPHA+VGhlIDxjb2RlPklTT19DX0JJTkRJTkc8L2NvZGU+IG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG5hbWVkIGNvbnN0YW50cyBvZgordHlwZSBkZWZhdWx0IGludGVnZXIsIHdoaWNoIGNhbiBiZSB1c2VkIGFzIEtJTkQgdHlwZSBwYXJhbWV0ZXJzLgorCisgICA8cD5JbiBhZGRpdGlvbiB0byB0aGUgaW50ZWdlciBuYW1lZCBjb25zdGFudHMgcmVxdWlyZWQgYnkgdGhlIEZvcnRyYW4gMjAwMworc3RhbmRhcmQgYW5kIDxjb2RlPkNfUFRSRElGRl9UPC9jb2RlPiBvZiBUUyAyOTExMywgR05VIEZvcnRyYW4gcHJvdmlkZXMgYXMgYW4KK2V4dGVuc2lvbiBuYW1lZCBjb25zdGFudHMgZm9yIHRoZSAxMjgtYml0IGludGVnZXIgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZQorQyBjb21waWxlcjogPGNvZGU+Q19JTlQxMjhfVCwgQ19JTlRfTEVBU1QxMjhfVCwgQ19JTlRfRkFTVDEyOF9UPC9jb2RlPi4gCitGdXJ0aGVybW9yZSwgaWYgPGNvZGU+X19mbG9hdDEyODwvY29kZT4gaXMgc3VwcG9ydGVkIGluIEMsIHRoZSBuYW1lZCBjb25zdGFudHMKKzxjb2RlPkNfRkxPQVQxMjgsIENfRkxPQVQxMjhfQ09NUExFWDwvY29kZT4gYXJlIGRlZmluZWQuCisKKyAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj5Gb3J0cmFuIFR5cGUgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj5OYW1lZCBjb25zdGFudCAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj5DIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj5FeHRlbnNpb24KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPklOVEVHRVI8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfSU5UPC9jb2RlPiAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPmludDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPklOVEVHRVI8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfU0hPUlQ8L2NvZGU+ICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPnNob3J0IGludDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPklOVEVHRVI8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfTE9ORzwvY29kZT4gICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPmxvbmcgaW50PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19MT05HX0xPTkc8L2NvZGU+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+bG9uZyBsb25nIGludDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPklOVEVHRVI8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfU0lHTkVEX0NIQVI8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPnNpZ25lZCBjaGFyPC9jb2RlPi88Y29kZT51bnNpZ25lZCBjaGFyPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19TSVpFX1Q8L2NvZGU+ICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+c2l6ZV90PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19JTlQ4X1Q8L2NvZGU+ICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+aW50OF90PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19JTlQxNl9UPC9jb2RlPiAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+aW50MTZfdDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPklOVEVHRVI8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfSU5UMzJfVDwvY29kZT4gICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPmludDMyX3Q8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0lOVDY0X1Q8L2NvZGU+ICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5pbnQ2NF90PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19JTlQxMjhfVDwvY29kZT4gICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+aW50MTI4X3Q8L2NvZGU+ICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj5FeHQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19JTlRfTEVBU1Q4X1Q8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+aW50X2xlYXN0OF90PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19JTlRfTEVBU1QxNl9UPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+aW50X2xlYXN0MTZfdDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPklOVEVHRVI8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfSU5UX0xFQVNUMzJfVDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPmludF9sZWFzdDMyX3Q8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0lOVF9MRUFTVDY0X1Q8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5pbnRfbGVhc3Q2NF90PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19JTlRfTEVBU1QxMjhfVDwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+aW50X2xlYXN0MTI4X3Q8L2NvZGU+ICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj5FeHQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19JTlRfRkFTVDhfVDwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+aW50X2Zhc3Q4X3Q8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0lOVF9GQVNUMTZfVDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5pbnRfZmFzdDE2X3Q8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0lOVF9GQVNUMzJfVDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5pbnRfZmFzdDMyX3Q8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0lOVF9GQVNUNjRfVDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5pbnRfZmFzdDY0X3Q8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0lOVF9GQVNUMTI4X1Q8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5pbnRfZmFzdDEyOF90PC9jb2RlPiAgICAgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPkV4dC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5JTlRFR0VSPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0lOVE1BWF9UPC9jb2RlPiAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5pbnRtYXhfdDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPklOVEVHRVI8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfSU5UUFRSX1Q8L2NvZGU+ICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPmludHB0cl90PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+SU5URUdFUjwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19QVFJESUZGX1Q8L2NvZGU+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+aW50cHRyX3Q8L2NvZGU+ICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj5UUyAyOTExMworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+UkVBTDwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19GTE9BVDwvY29kZT4gICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+ZmxvYXQ8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5SRUFMPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0RPVUJMRTwvY29kZT4gICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5kb3VibGU8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5SRUFMPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0xPTkdfRE9VQkxFPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5sb25nIGRvdWJsZTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPlJFQUw8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfRkxPQVQxMjg8L2NvZGU+ICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPl9fZmxvYXQxMjg8L2NvZGU+ICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+RXh0LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPkNPTVBMRVg8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfRkxPQVRfQ09NUExFWDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPmZsb2F0IF9Db21wbGV4PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+Q09NUExFWDwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19ET1VCTEVfQ09NUExFWDwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+ZG91YmxlIF9Db21wbGV4PC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+Q09NUExFWDwvY29kZT48L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Q19MT05HX0RPVUJMRV9DT01QTEVYPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5sb25nIGRvdWJsZSBfQ29tcGxleDwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPlJFQUw8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfRkxPQVQxMjhfQ09NUExFWDwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+X19mbG9hdDEyOCBfQ29tcGxleDwvY29kZT4gICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+RXh0LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPkxPR0lDQUw8L2NvZGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPkNfQk9PTDwvY29kZT4gICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIzNSUiPjxjb2RlPl9Cb29sPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+Q0hBUkFDVEVSPC9jb2RlPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMzUlIj48Y29kZT5DX0NIQVI8L2NvZGU+ICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjM1JSI+PGNvZGU+Y2hhcjwvY29kZT4KKyAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgPHA+QWRkaXRpb25hbGx5LCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgb2YgdHlwZSA8Y29kZT5DSEFSQUNURVIoS0lORD1DX0NIQVIpPC9jb2RlPgorYXJlIGRlZmluZWQuCisKKyAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPkMgZGVmaW5pdGlvbiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+VmFsdWUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNfTlVMTF9DSEFSPC9jb2RlPiAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+bnVsbCBjaGFyYWN0ZXIgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT4nXDAnPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q19BTEVSVDwvY29kZT4gICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj5hbGVydCAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPidcYSc8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DX0JBQ0tTUEFDRTwvY29kZT4gICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPmJhY2tzcGFjZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+J1xiJzwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNfRk9STV9GRUVEPC9jb2RlPiAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+Zm9ybSBmZWVkICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT4nXGYnPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q19ORVdfTElORTwvY29kZT4gICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj5uZXcgbGluZSAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPidcbic8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DX0NBUlJJQUdFX1JFVFVSTjwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI0NSUiPmNhcnJpYWdlIHJldHVybiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+J1xyJzwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNfSE9SSVpPTlRBTF9UQUI8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjQ1JSI+aG9yaXpvbnRhbCB0YWIgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT4nXHQnPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q19WRVJUSUNBTF9UQUI8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIj52ZXJ0aWNhbCB0YWIgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPidcdic8L2NvZGU+CisgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgIDxwPk1vcmVvdmVyLCB0aGUgZm9sbG93aW5nIHR3byBuYW1lZCBjb25zdGFudHMgYXJlIGRlZmluZWQ6CisKKyAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+VHlwZQorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q19OVUxMX1BUUjwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNfUFRSPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q19OVUxMX0ZVTlBUUjwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNfRlVOUFRSPC9jb2RlPgorICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICA8cD5Cb3RoIGFyZSBlcXVpdmFsZW50IHRvIHRoZSB2YWx1ZSA8Y29kZT5OVUxMPC9jb2RlPiBpbiBDLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JU09fMDA1ZkZPUlRSQU5fMDA1ZkVOVi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMGY4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlYuaHRtbApAQCAtMCwwICsxLDE0MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SVNPX0ZPUlRSQU5fRU5WIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Nb2R1bGVzLmh0bWwjSW50cmluc2ljLU1vZHVsZXMiIHRpdGxlPSJJbnRyaW5zaWMgTW9kdWxlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklTT18wMDVmQ18wMDVmQklORElORy5odG1sI0lTT18wMDVmQ18wMDVmQklORElORyIgdGl0bGU9IklTT19DX0JJTkRJTkciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSVNPX0ZPUlRSQU5fRU5WIj48L2E+Cis8YSBuYW1lPSJJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOViI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJU09fMDA1ZkNfMDA1ZkJJTkRJTkcuaHRtbCNJU09fMDA1ZkNfMDA1ZkJJTkRJTkciPklTT19DX0JJTkRJTkc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtTW9kdWxlcy5odG1sI0ludHJpbnNpYy1Nb2R1bGVzIj5JbnRyaW5zaWMgTW9kdWxlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMSA8Y29kZT5JU09fRk9SVFJBTl9FTlY8L2NvZGU+PC9oMz4KKworICAgICA8ZGw+Cis8ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIsIGV4Y2VwdCB3aGVuIG90aGVyd2lzZSBub3RlZAorPC9kbD4KKworICAgPHA+VGhlIDxjb2RlPklTT19GT1JUUkFOX0VOVjwvY29kZT4gbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgc2NhbGFyIGRlZmF1bHQtaW50ZWdlcgorbmFtZWQgY29uc3RhbnRzOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5BVE9NSUNfSU5UX0tJTkQ8L2NvZGU+OjxkZD5EZWZhdWx0LWtpbmQgaW50ZWdlciBjb25zdGFudCB0byBiZSB1c2VkIGFzIGtpbmQgcGFyYW1ldGVyIHdoZW4gZGVmaW5pbmcKK2ludGVnZXIgdmFyaWFibGVzIHVzZWQgaW4gYXRvbWljIG9wZXJhdGlvbnMuIChGb3J0cmFuIDIwMDggb3IgbGF0ZXIuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+QVRPTUlDX0xPR0lDQUxfS0lORDwvY29kZT46PGRkPkRlZmF1bHQta2luZCBpbnRlZ2VyIGNvbnN0YW50IHRvIGJlIHVzZWQgYXMga2luZCBwYXJhbWV0ZXIgd2hlbiBkZWZpbmluZworbG9naWNhbCB2YXJpYWJsZXMgdXNlZCBpbiBhdG9taWMgb3BlcmF0aW9ucy4gKEZvcnRyYW4gMjAwOCBvciBsYXRlci4pCisKKyAgICAgPGJyPjxkdD48Y29kZT5DSEFSQUNURVJfS0lORFM8L2NvZGU+OjxkZD5EZWZhdWx0LWtpbmQgaW50ZWdlciBjb25zdGFudCBhcnJheSBvZiByYW5rIG9uZSBjb250YWluaW5nIHRoZSBzdXBwb3J0ZWQga2luZAorcGFyYW1ldGVycyBvZiB0aGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiB0eXBlLiAoRm9ydHJhbiAyMDA4IG9yIGxhdGVyLikKKworICAgICA8YnI+PGR0Pjxjb2RlPkNIQVJBQ1RFUl9TVE9SQUdFX1NJWkU8L2NvZGU+OjxkZD5TaXplIGluIGJpdHMgb2YgdGhlIGNoYXJhY3RlciBzdG9yYWdlIHVuaXQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5FUlJPUl9VTklUPC9jb2RlPjo8ZGQ+SWRlbnRpZmllcyB0aGUgcHJlY29ubmVjdGVkIHVuaXQgdXNlZCBmb3IgZXJyb3IgcmVwb3J0aW5nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+RklMRV9TVE9SQUdFX1NJWkU8L2NvZGU+OjxkZD5TaXplIGluIGJpdHMgb2YgdGhlIGZpbGUtc3RvcmFnZSB1bml0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+SU5QVVRfVU5JVDwvY29kZT46PGRkPklkZW50aWZpZXMgdGhlIHByZWNvbm5lY3RlZCB1bml0IGlkZW50aWZpZWQgYnkgdGhlIGFzdGVyaXNrCisoPGNvZGU+KjwvY29kZT4pIGluIDxjb2RlPlJFQUQ8L2NvZGU+IHN0YXRlbWVudC4KKworICAgICA8YnI+PGR0Pjxjb2RlPklOVDg8L2NvZGU+LCA8Y29kZT5JTlQxNjwvY29kZT4sIDxjb2RlPklOVDMyPC9jb2RlPiwgPGNvZGU+SU5UNjQ8L2NvZGU+OjxkZD5LaW5kIHR5cGUgcGFyYW1ldGVycyB0byBzcGVjaWZ5IGFuIElOVEVHRVIgdHlwZSB3aXRoIGEgc3RvcmFnZQorc2l6ZSBvZiAxNiwgMzIsIGFuZCA2NCBiaXRzLiBJdCBpcyBuZWdhdGl2ZSBpZiBhIHRhcmdldCBwbGF0Zm9ybQorZG9lcyBub3Qgc3VwcG9ydCB0aGUgcGFydGljdWxhciBraW5kLiAoRm9ydHJhbiAyMDA4IG9yIGxhdGVyLikKKworICAgICA8YnI+PGR0Pjxjb2RlPklOVEVHRVJfS0lORFM8L2NvZGU+OjxkZD5EZWZhdWx0LWtpbmQgaW50ZWdlciBjb25zdGFudCBhcnJheSBvZiByYW5rIG9uZSBjb250YWluaW5nIHRoZSBzdXBwb3J0ZWQga2luZAorcGFyYW1ldGVycyBvZiB0aGUgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZS4gKEZvcnRyYW4gMjAwOCBvciBsYXRlci4pCisKKyAgICAgPGJyPjxkdD48Y29kZT5JT1NUQVRfRU5EPC9jb2RlPjo8ZGQ+VGhlIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSB2YXJpYWJsZSBwYXNzZWQgdG8gdGhlIDxjb2RlPklPU1RBVD08L2NvZGU+IHNwZWNpZmllciBvZgorYW4gaW5wdXQvb3V0cHV0IHN0YXRlbWVudCBpZiBhbiBlbmQtb2YtZmlsZSBjb25kaXRpb24gb2NjdXJyZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5JT1NUQVRfRU9SPC9jb2RlPjo8ZGQ+VGhlIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSB2YXJpYWJsZSBwYXNzZWQgdG8gdGhlIDxjb2RlPklPU1RBVD08L2NvZGU+IHNwZWNpZmllciBvZgorYW4gaW5wdXQvb3V0cHV0IHN0YXRlbWVudCBpZiBhbiBlbmQtb2YtcmVjb3JkIGNvbmRpdGlvbiBvY2N1cnJlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPklPU1RBVF9JTlFVSVJFX0lOVEVSTkFMX1VOSVQ8L2NvZGU+OjxkZD5TY2FsYXIgZGVmYXVsdC1pbnRlZ2VyIGNvbnN0YW50LCB1c2VkIGJ5IDxjb2RlPklOUVVJUkU8L2NvZGU+IGZvciB0aGUKKzxjb2RlPklPU1RBVD08L2NvZGU+IHNwZWNpZmllciB0byBkZW5vdGUgYW4gdGhhdCBhIHVuaXQgbnVtYmVyIGlkZW50aWZpZXMgYW4KK2ludGVybmFsIHVuaXQuIChGb3J0cmFuIDIwMDggb3IgbGF0ZXIuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+TlVNRVJJQ19TVE9SQUdFX1NJWkU8L2NvZGU+OjxkZD5UaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSBudW1lcmljIHN0b3JhZ2UgdW5pdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPkxPR0lDQUxfS0lORFM8L2NvZGU+OjxkZD5EZWZhdWx0LWtpbmQgaW50ZWdlciBjb25zdGFudCBhcnJheSBvZiByYW5rIG9uZSBjb250YWluaW5nIHRoZSBzdXBwb3J0ZWQga2luZAorcGFyYW1ldGVycyBvZiB0aGUgPGNvZGU+TE9HSUNBTDwvY29kZT4gdHlwZS4gKEZvcnRyYW4gMjAwOCBvciBsYXRlci4pCisKKyAgICAgPGJyPjxkdD48Y29kZT5PVVRQVVRfVU5JVDwvY29kZT46PGRkPklkZW50aWZpZXMgdGhlIHByZWNvbm5lY3RlZCB1bml0IGlkZW50aWZpZWQgYnkgdGhlIGFzdGVyaXNrCisoPGNvZGU+KjwvY29kZT4pIGluIDxjb2RlPldSSVRFPC9jb2RlPiBzdGF0ZW1lbnQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5SRUFMMzI8L2NvZGU+LCA8Y29kZT5SRUFMNjQ8L2NvZGU+LCA8Y29kZT5SRUFMMTI4PC9jb2RlPjo8ZGQ+S2luZCB0eXBlIHBhcmFtZXRlcnMgdG8gc3BlY2lmeSBhIFJFQUwgdHlwZSB3aXRoIGEgc3RvcmFnZQorc2l6ZSBvZiAzMiwgNjQsIGFuZCAxMjggYml0cy4gSXQgaXMgbmVnYXRpdmUgaWYgYSB0YXJnZXQgcGxhdGZvcm0KK2RvZXMgbm90IHN1cHBvcnQgdGhlIHBhcnRpY3VsYXIga2luZC4gKEZvcnRyYW4gMjAwOCBvciBsYXRlci4pCisKKyAgICAgPGJyPjxkdD48Y29kZT5SRUFMX0tJTkRTPC9jb2RlPjo8ZGQ+RGVmYXVsdC1raW5kIGludGVnZXIgY29uc3RhbnQgYXJyYXkgb2YgcmFuayBvbmUgY29udGFpbmluZyB0aGUgc3VwcG9ydGVkIGtpbmQKK3BhcmFtZXRlcnMgb2YgdGhlIDxjb2RlPlJFQUw8L2NvZGU+IHR5cGUuIChGb3J0cmFuIDIwMDggb3IgbGF0ZXIuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+U1RBVF9MT0NLRUQ8L2NvZGU+OjxkZD5TY2FsYXIgZGVmYXVsdC1pbnRlZ2VyIGNvbnN0YW50IHVzZWQgYXMgU1RBVD0gcmV0dXJuIHZhbHVlIGJ5IDxjb2RlPkxPQ0s8L2NvZGU+IHRvCitkZW5vdGUgdGhhdCB0aGUgbG9jayB2YXJpYWJsZSBpcyBsb2NrZWQgYnkgdGhlIGV4ZWN1dGluZyBpbWFnZS4gKEZvcnRyYW4gMjAwOAorb3IgbGF0ZXIuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+U1RBVF9MT0NLRURfT1RIRVJfSU1BR0U8L2NvZGU+OjxkZD5TY2FsYXIgZGVmYXVsdC1pbnRlZ2VyIGNvbnN0YW50IHVzZWQgYXMgU1RBVD0gcmV0dXJuIHZhbHVlIGJ5IDxjb2RlPlVOTE9DSzwvY29kZT4gdG8KK2Rlbm90ZSB0aGF0IHRoZSBsb2NrIHZhcmlhYmxlIGlzIGxvY2tlZCBieSBhbm90aGVyIGltYWdlLiAoRm9ydHJhbiAyMDA4IG9yCitsYXRlci4pCisKKyAgICAgPGJyPjxkdD48Y29kZT5TVEFUX1NUT1BQRURfSU1BR0U8L2NvZGU+OjxkZD5Qb3NpdGl2ZSwgc2NhbGFyIGRlZmF1bHQtaW50ZWdlciBjb25zdGFudCB1c2VkIGFzIFNUQVQ9IHJldHVybiB2YWx1ZSBpZiB0aGUKK2FyZ3VtZW50IGluIHRoZSBzdGF0ZW1lbnQgcmVxdWlyZXMgc3luY2hyb25pc2F0aW9uIHdpdGggYW4gaW1hZ2UsIHdoaWNoIGhhcworaW5pdGlhdGVkIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGUgZXhlY3V0aW9uLiAoRm9ydHJhbiAyMDA4IG9yIGxhdGVyLikKKworICAgICA8YnI+PGR0Pjxjb2RlPlNUQVRfVU5MT0NLRUQ8L2NvZGU+OjxkZD5TY2FsYXIgZGVmYXVsdC1pbnRlZ2VyIGNvbnN0YW50IHVzZWQgYXMgU1RBVD0gcmV0dXJuIHZhbHVlIGJ5IDxjb2RlPlVOTE9DSzwvY29kZT4gdG8KK2Rlbm90ZSB0aGF0IHRoZSBsb2NrIHZhcmlhYmxlIGlzIHVubG9ja2VkLiAoRm9ydHJhbiAyMDA4IG9yIGxhdGVyLikgCis8L2RsPgorCisgICA8cD5UaGUgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZGVyaXZlZCB0eXBlOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5MT0NLX1RZUEU8L2NvZGU+OjxkZD5EZXJpdmVkIHR5cGUgd2l0aCBwcml2YXRlIGNvbXBvbmVudHMgdG8gYmUgdXNlIHdpdGggdGhlIDxjb2RlPkxPQ0s8L2NvZGU+IGFuZAorPGNvZGU+VU5MT0NLPC9jb2RlPiBzdGF0ZW1lbnQuIEEgdmFyaWFibGUgb2YgaXRzIHR5cGUgaGFzIHRvIGJlIGFsd2F5cyBkZWNsYXJlZAorYXMgY29hcnJheSBhbmQgbWF5IG5vdCBhcHBlYXIgaW4gYSB2YXJpYWJsZS1kZWZpbml0aW9uIGNvbnRleHQuIAorKEZvcnRyYW4gMjAwOCBvciBsYXRlci4pIAorPC9kbD4KKworICAgPHA+VGhlIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaW50cmluc2ljIHByb2NlZHVyZXM6Cis8YSBocmVmPSJDT01QSUxFUl8wMDVmT1BUSU9OUy5odG1sI0NPTVBJTEVSXzAwNWZPUFRJT05TIj5DT01QSUxFUl9PUFRJT05TPC9hPiBhbmQgPGEgaHJlZj0iQ09NUElMRVJfMDA1ZlZFUlNJT04uaHRtbCNDT01QSUxFUl8wMDVmVkVSU0lPTiI+Q09NUElMRVJfVkVSU0lPTjwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JU18wMDVmSU9TVEFUXzAwNWZFTkQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JU18wMDVmSU9TVEFUXzAwNWZFTkQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmY0YzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lTXzAwNWZJT1NUQVRfMDA1ZkVORC5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklTX0lPU1RBVF9FTkQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSVJBTkQuaHRtbCNJUkFORCIgdGl0bGU9IklSQU5EIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSVNfMDA1ZklPU1RBVF8wMDVmRU9SLmh0bWwjSVNfMDA1ZklPU1RBVF8wMDVmRU9SIiB0aXRsZT0iSVNfSU9TVEFUX0VPUiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJU19JT1NUQVRfRU5EIj48L2E+Cis8YSBuYW1lPSJJU18wMDVmSU9TVEFUXzAwNWZFTkQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSVNfMDA1ZklPU1RBVF8wMDVmRU9SLmh0bWwjSVNfMDA1ZklPU1RBVF8wMDVmRU9SIj5JU19JT1NUQVRfRU9SPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSVJBTkQuaHRtbCNJUkFORCI+SVJBTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTMyIDxjb2RlPklTX0lPU1RBVF9FTkQ8L2NvZGU+ICZtZGFzaDsgVGVzdCBmb3IgZW5kLW9mLWZpbGUgdmFsdWU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JU18wMDVmSU9TVEFUXzAwNWZFTkQtNzY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JJT1NUQVRfMDA3ZF8wMDJjLWVuZC1vZi1maWxlLTc2OSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPklTX0lPU1RBVF9FTkQ8L2NvZGU+IHRlc3RzIHdoZXRoZXIgYW4gdmFyaWFibGUgaGFzIHRoZSB2YWx1ZSBvZiB0aGUgSS9PCitzdGF0dXMgJmxkcXVvO2VuZCBvZiBmaWxlJnJkcXVvOy4gVGhlIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gY29tcGFyaW5nIHRoZSB2YXJpYWJsZQord2l0aCB0aGUgPGNvZGU+SU9TVEFUX0VORDwvY29kZT4gcGFyYW1ldGVyIG9mIHRoZSBpbnRyaW5zaWMgbW9kdWxlCis8Y29kZT5JU09fRk9SVFJBTl9FTlY8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gSVNfSU9TVEFUX0VORChJKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHRoZSB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlJldHVybnMgYSA8Y29kZT5MT0dJQ0FMPC9jb2RlPiBvZiB0aGUgZGVmYXVsdCBraW5kLCB3aGljaCA8Y29kZT4uVFJVRS48L2NvZGU+IGlmCis8dmFyPkk8L3Zhcj4gaGFzIHRoZSB2YWx1ZSB3aGljaCBpbmRpY2F0ZXMgYW4gZW5kIG9mIGZpbGUgY29uZGl0aW9uIGZvcgorPGNvZGU+SU9TVEFUPTwvY29kZT4gc3BlY2lmaWVycywgYW5kIGlzIDxjb2RlPi5GQUxTRS48L2NvZGU+IG90aGVyd2lzZS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIGlvc3RhdAorICAgICAgICAgICAgSU1QTElDSVQgTk9ORQorICAgICAgICAgICAgSU5URUdFUiA6OiBzdGF0LCBpCisgICAgICAgICAgICBPUEVOKDg4LCBGSUxFPSd0ZXN0LmRhdCcpCisgICAgICAgICAgICBSRUFEKDg4LCAqLCBJT1NUQVQ9c3RhdCkgaQorICAgICAgICAgICAgSUYoSVNfSU9TVEFUX0VORChzdGF0KSkgU1RPUCAnRU5EIE9GIEZJTEUnCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNfMDA1ZklPU1RBVF8wMDVmRU9SLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVNfMDA1ZklPU1RBVF8wMDVmRU9SLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4NWE5MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JU18wMDVmSU9TVEFUXzAwNWZFT1IuaHRtbApAQCAtMCwwICsxLDkxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JU19JT1NUQVRfRU9SIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklTXzAwNWZJT1NUQVRfMDA1ZkVORC5odG1sI0lTXzAwNWZJT1NUQVRfMDA1ZkVORCIgdGl0bGU9IklTX0lPU1RBVF9FTkQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJU0FUVFkuaHRtbCNJU0FUVFkiIHRpdGxlPSJJU0FUVFkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSVNfSU9TVEFUX0VPUiI+PC9hPgorPGEgbmFtZT0iSVNfMDA1ZklPU1RBVF8wMDVmRU9SIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklTQVRUWS5odG1sI0lTQVRUWSI+SVNBVFRZPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSVNfMDA1ZklPU1RBVF8wMDVmRU5ELmh0bWwjSVNfMDA1ZklPU1RBVF8wMDVmRU5EIj5JU19JT1NUQVRfRU5EPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEzMyA8Y29kZT5JU19JT1NUQVRfRU9SPC9jb2RlPiAmbWRhc2g7IFRlc3QgZm9yIGVuZC1vZi1yZWNvcmQgdmFsdWU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JU18wMDVmSU9TVEFUXzAwNWZFT1ItNzcwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JJT1NUQVRfMDA3ZF8wMDJjLWVuZC1vZi1yZWNvcmQtNzcxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+SVNfSU9TVEFUX0VPUjwvY29kZT4gdGVzdHMgd2hldGhlciBhbiB2YXJpYWJsZSBoYXMgdGhlIHZhbHVlIG9mIHRoZSBJL08KK3N0YXR1cyAmbGRxdW87ZW5kIG9mIHJlY29yZCZyZHF1bzsuIFRoZSBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGNvbXBhcmluZyB0aGUKK3ZhcmlhYmxlIHdpdGggdGhlIDxjb2RlPklPU1RBVF9FT1I8L2NvZGU+IHBhcmFtZXRlciBvZiB0aGUgaW50cmluc2ljIG1vZHVsZQorPGNvZGU+SVNPX0ZPUlRSQU5fRU5WPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IElTX0lPU1RBVF9FT1IoSSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0aGUgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5SZXR1cm5zIGEgPGNvZGU+TE9HSUNBTDwvY29kZT4gb2YgdGhlIGRlZmF1bHQga2luZCwgd2hpY2ggPGNvZGU+LlRSVUUuPC9jb2RlPiBpZgorPHZhcj5JPC92YXI+IGhhcyB0aGUgdmFsdWUgd2hpY2ggaW5kaWNhdGVzIGFuIGVuZCBvZiBmaWxlIGNvbmRpdGlvbiBmb3IKKzxjb2RlPklPU1RBVD08L2NvZGU+IHNwZWNpZmllcnMsIGFuZCBpcyA8Y29kZT4uRkFMU0UuPC9jb2RlPiBvdGhlcndpc2UuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSBpb3N0YXQKKyAgICAgICAgICAgIElNUExJQ0lUIE5PTkUKKyAgICAgICAgICAgIElOVEVHRVIgOjogc3RhdCwgaSg1MCkKKyAgICAgICAgICAgIE9QRU4oODgsIEZJTEU9J3Rlc3QuZGF0JywgRk9STT0nVU5GT1JNQVRURUQnKQorICAgICAgICAgICAgUkVBRCg4OCwgSU9TVEFUPXN0YXQpIGkKKyAgICAgICAgICAgIElGKElTX0lPU1RBVF9FT1Ioc3RhdCkpIFNUT1AgJ0VORCBPRiBSRUNPUkQnCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVRJTUUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JVElNRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZWEwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSVRJTUUuaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JVElNRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJU05BTi5odG1sI0lTTkFOIiB0aXRsZT0iSVNOQU4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJLSUxMLmh0bWwjS0lMTCIgdGl0bGU9IktJTEwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSVRJTUUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iS0lMTC5odG1sI0tJTEwiPktJTEw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJU05BTi5odG1sI0lTTkFOIj5JU05BTjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xMzggPGNvZGU+SVRJTUU8L2NvZGU+ICZtZGFzaDsgR2V0IGN1cnJlbnQgbG9jYWwgdGltZSBzdWJyb3V0aW5lIChob3VyL21pbnV0ZXMvc2Vjb25kcyk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1JVElNRS03ODAiPjwvYT48YSBuYW1lPSJpbmRleC10aW1lXzAwMmMtY3VycmVudC03ODEiPjwvYT48YSBuYW1lPSJpbmRleC1jdXJyZW50LXRpbWUtNzgyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+SURBVEUoVkFMVUVTKTwvY29kZT4gRmlsbHMgPHZhcj5WQUxVRVM8L3Zhcj4gd2l0aCB0aGUgbnVtZXJpY2FsIHZhbHVlcyBhdCB0aGUKK2N1cnJlbnQgbG9jYWwgdGltZS4gVGhlIGhvdXIgKGluIHRoZSByYW5nZSAxLTI0KSwgbWludXRlIChpbiB0aGUgcmFuZ2UgMS02MCksCithbmQgc2Vjb25kcyAoaW4gdGhlIHJhbmdlIDEtNjApIGFwcGVhciBpbiBlbGVtZW50cyAxLCAyLCBhbmQgMyBvZiA8dmFyPlZBTFVFUzwvdmFyPiwKK3Jlc3BlY3RpdmVseS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIElUSU1FKFZBTFVFUyk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5WQUxVRVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVIsIERJTUVOU0lPTigzKTwvY29kZT4KK2FuZCB0aGUga2luZCBzaGFsbCBiZSB0aGUgZGVmYXVsdCBpbnRlZ2VyIGtpbmQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+RG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9pdGltZQorICAgICAgICAgICAgaW50ZWdlciwgZGltZW5zaW9uKDMpIDo6IHRhcnJheQorICAgICAgICAgICAgY2FsbCBpdGltZSh0YXJyYXkpCisgICAgICAgICAgICBwcmludCAqLCB0YXJyYXkoMSkKKyAgICAgICAgICAgIHByaW50ICosIHRhcnJheSgyKQorICAgICAgICAgICAgcHJpbnQgKiwgdGFycmF5KDMpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9pdGltZQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JXzAwMmZPLWl0ZW0tbGlzdHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JXzAwMmZPLWl0ZW0tbGlzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDg2YTJmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0lfMDAyZk8taXRlbS1saXN0cy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkkvTyBpdGVtIGxpc3RzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sI01pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucyIgdGl0bGU9Ik1pc3NpbmcgcGVyaW9kIGluIEZPUk1BVCBzcGVjaWZpY2F0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Il8wMDQwY29kZV8wMDdiUV8wMDdkLWV4cG9uZW50XzAwMmRsZXR0ZXIuaHRtbCNnX3RfMDA0MGNvZGVfMDA3YlFfMDA3ZC1leHBvbmVudF8wMDJkbGV0dGVyIiB0aXRsZT0iQGNvZGV7UX0gZXhwb25lbnQtbGV0dGVyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkklMmZPLWl0ZW0tbGlzdHMiPjwvYT4KKzxhIG5hbWU9IklfMDAyZk8taXRlbS1saXN0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJfMDAzY2NvZGVfMDAzZVFfMDAzY18wMDJmY29kZV8wMDNlLWV4cG9uZW50XzAwMmRsZXR0ZXIuaHRtbCNnX3RfMDAzY2NvZGVfMDAzZVFfMDAzY18wMDJmY29kZV8wMDNlLWV4cG9uZW50XzAwMmRsZXR0ZXIiPiZsdDtjb2RlJmd0O1EmbHQ7L2NvZGUmZ3Q7IGV4cG9uZW50LWxldHRlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sI01pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucyI+TWlzc2luZyBwZXJpb2QgaW4gRk9STUFUIHNwZWNpZmljYXRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjEuNyBJL08gaXRlbSBsaXN0czwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUlfMDAyZk8taXRlbS1saXN0cy0zMzMiPjwvYT4KK1RvIHN1cHBvcnQgbGVnYWN5IGNvZGVzLCBHTlUgRm9ydHJhbiBhbGxvd3MgdGhlIGlucHV0IGl0ZW0gbGlzdAorb2YgdGhlIDxjb2RlPlJFQUQ8L2NvZGU+IHN0YXRlbWVudCwgYW5kIHRoZSBvdXRwdXQgaXRlbSBsaXN0cyBvZiB0aGUKKzxjb2RlPldSSVRFPC9jb2RlPiBhbmQgPGNvZGU+UFJJTlQ8L2NvZGU+IHN0YXRlbWVudHMsIHRvIHN0YXJ0IHdpdGggYSBjb21tYS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ltcGxpY2l0bHktY29udmVydC1MT0dJQ0FMLWFuZC1JTlRFR0VSLXZhbHVlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ltcGxpY2l0bHktY29udmVydC1MT0dJQ0FMLWFuZC1JTlRFR0VSLXZhbHVlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjgwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW1wbGljaXRseS1jb252ZXJ0LUxPR0lDQUwtYW5kLUlOVEVHRVItdmFsdWVzLmh0bWwKQEAgLTAsMCArMSw3NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW1wbGljaXRseSBjb252ZXJ0IExPR0lDQUwgYW5kIElOVEVHRVIgdmFsdWVzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlVuYXJ5LW9wZXJhdG9ycy5odG1sI1VuYXJ5LW9wZXJhdG9ycyIgdGl0bGU9IlVuYXJ5IG9wZXJhdG9ycyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkhvbGxlcml0aC1jb25zdGFudHMtc3VwcG9ydC5odG1sI0hvbGxlcml0aC1jb25zdGFudHMtc3VwcG9ydCIgdGl0bGU9IkhvbGxlcml0aCBjb25zdGFudHMgc3VwcG9ydCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSG9sbGVyaXRoLWNvbnN0YW50cy1zdXBwb3J0Lmh0bWwjSG9sbGVyaXRoLWNvbnN0YW50cy1zdXBwb3J0Ij5Ib2xsZXJpdGggY29uc3RhbnRzIHN1cHBvcnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJVbmFyeS1vcGVyYXRvcnMuaHRtbCNVbmFyeS1vcGVyYXRvcnMiPlVuYXJ5IG9wZXJhdG9yczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4xLjEyIEltcGxpY2l0bHkgY29udmVydCA8Y29kZT5MT0dJQ0FMPC9jb2RlPiBhbmQgPGNvZGU+SU5URUdFUjwvY29kZT4gdmFsdWVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLWludGVnZXItMzM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLWxvZ2ljYWwtMzM5Ij48L2E+CitBcyBhbiBleHRlbnNpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgY29tcGlsZXJzLCBHTlUKK0ZvcnRyYW4gYWxsb3dzIHRoZSBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIDxjb2RlPkxPR0lDQUw8L2NvZGU+IHZhbHVlcyB0bworPGNvZGU+SU5URUdFUjwvY29kZT4gdmFsdWVzIGFuZCB2aWNlIHZlcnNhLiAgV2hlbiBjb252ZXJ0aW5nIGZyb20gYQorPGNvZGU+TE9HSUNBTDwvY29kZT4gdG8gYW4gPGNvZGU+SU5URUdFUjwvY29kZT4sIDxjb2RlPi5GQUxTRS48L2NvZGU+IGlzIGludGVycHJldGVkIGFzCit6ZXJvLCBhbmQgPGNvZGU+LlRSVUUuPC9jb2RlPiBpcyBpbnRlcnByZXRlZCBhcyBvbmUuICBXaGVuIGNvbnZlcnRpbmcgZnJvbQorPGNvZGU+SU5URUdFUjwvY29kZT4gdG8gPGNvZGU+TE9HSUNBTDwvY29kZT4sIHRoZSB2YWx1ZSB6ZXJvIGlzIGludGVycHJldGVkIGFzCis8Y29kZT4uRkFMU0UuPC9jb2RlPiBhbmQgYW55IG5vbnplcm8gdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgPGNvZGU+LlRSVUUuPC9jb2RlPi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgTE9HSUNBTCA6OiBsCisgICAgICAgICAgICAgbCA9IDEKKzwvcHJlPgorICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgSU5URUdFUiA6OiBpCisgICAgICAgICAgICAgaSA9IC5UUlVFLgorPC9wcmU+CisgICA8cD5Ib3dldmVyLCB0aGVyZSBpcyBubyBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIDxjb2RlPklOVEVHRVI8L2NvZGU+IHZhbHVlcyBpbgorPGNvZGU+aWY8L2NvZGU+LXN0YXRlbWVudHMsIG5vciBvZiA8Y29kZT5MT0dJQ0FMPC9jb2RlPiBvciA8Y29kZT5JTlRFR0VSPC9jb2RlPiB2YWx1ZXMKK2luIEkvTyBvcGVyYXRpb25zLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50ZXJuYWwtcmVwcmVzZW50YXRpb24tb2YtTE9HSUNBTC12YXJpYWJsZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTg2MjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50ZXJuYWwtcmVwcmVzZW50YXRpb24tb2YtTE9HSUNBTC12YXJpYWJsZXMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBMT0dJQ0FMIHZhcmlhYmxlcyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbCNDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MiIHRpdGxlPSJDb21waWxlciBDaGFyYWN0ZXJpc3RpY3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJLSU5ELVR5cGUtUGFyYW1ldGVycy5odG1sI0tJTkQtVHlwZS1QYXJhbWV0ZXJzIiB0aXRsZT0iS0lORCBUeXBlIFBhcmFtZXRlcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUaHJlYWRfMDAyZHNhZmV0eS1vZi10aGUtcnVudGltZS1saWJyYXJ5Lmh0bWwjVGhyZWFkXzAwMmRzYWZldHktb2YtdGhlLXJ1bnRpbWUtbGlicmFyeSIgdGl0bGU9IlRocmVhZC1zYWZldHkgb2YgdGhlIHJ1bnRpbWUgbGlicmFyeSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUaHJlYWRfMDAyZHNhZmV0eS1vZi10aGUtcnVudGltZS1saWJyYXJ5Lmh0bWwjVGhyZWFkXzAwMmRzYWZldHktb2YtdGhlLXJ1bnRpbWUtbGlicmFyeSI+VGhyZWFkLXNhZmV0eSBvZiB0aGUgcnVudGltZSBsaWJyYXJ5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iS0lORC1UeXBlLVBhcmFtZXRlcnMuaHRtbCNLSU5ELVR5cGUtUGFyYW1ldGVycyI+S0lORCBUeXBlIFBhcmFtZXRlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbCNDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MiPkNvbXBpbGVyIENoYXJhY3RlcmlzdGljczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMiBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBMT0dJQ0FMIHZhcmlhYmxlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxvZ2ljYWxfMDAyYy12YXJpYWJsZS1yZXByZXNlbnRhdGlvbi0zMjYiPjwvYT4KK1RoZSBGb3J0cmFuIHN0YW5kYXJkIGRvZXMgbm90IHNwZWNpZnkgaG93IHZhcmlhYmxlcyBvZiA8Y29kZT5MT0dJQ0FMPC9jb2RlPgordHlwZSBhcmUgcmVwcmVzZW50ZWQsIGJleW9uZCByZXF1aXJpbmcgdGhhdCA8Y29kZT5MT0dJQ0FMPC9jb2RlPiB2YXJpYWJsZXMKK29mIGRlZmF1bHQga2luZCBoYXZlIHRoZSBzYW1lIHN0b3JhZ2Ugc2l6ZSBhcyBkZWZhdWx0IDxjb2RlPklOVEVHRVI8L2NvZGU+CithbmQgPGNvZGU+UkVBTDwvY29kZT4gdmFyaWFibGVzLiAgVGhlIEdOVSBGb3J0cmFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzCithcyBmb2xsb3dzLgorCisgICA8cD5BIDxjb2RlPkxPR0lDQUwoS0lORD1OKTwvY29kZT4gdmFyaWFibGUgaXMgcmVwcmVzZW50ZWQgYXMgYW4KKzxjb2RlPklOVEVHRVIoS0lORD1OKTwvY29kZT4gdmFyaWFibGUsIGhvd2V2ZXIsIHdpdGggb25seSB0d28gcGVybWlzc2libGUKK3ZhbHVlczogPGNvZGU+MTwvY29kZT4gZm9yIDxjb2RlPi5UUlVFLjwvY29kZT4gYW5kIDxjb2RlPjA8L2NvZGU+IGZvcgorPGNvZGU+LkZBTFNFLjwvY29kZT4uICBBbnkgb3RoZXIgaW50ZWdlciB2YWx1ZSByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvci4KKworICAgPHA+Tm90ZSB0aGF0IGZvciBtaXhlZC1sYW5ndWFnZSBwcm9ncmFtbWluZyB1c2luZyB0aGUKKzxjb2RlPklTT19DX0JJTkRJTkc8L2NvZGU+IGZlYXR1cmUsIHRoZXJlIGlzIGEgPGNvZGU+Q19CT09MPC9jb2RlPiBraW5kIHRoYXQgY2FuCitiZSB1c2VkIHRvIGNyZWF0ZSA8Y29kZT5MT0dJQ0FMKEtJTkQ9Q19CT09MKTwvY29kZT4gdmFyaWFibGVzIHdoaWNoIGFyZQoraW50ZXJvcGVyYWJsZSB3aXRoIHRoZSBDOTkgX0Jvb2wgdHlwZS4gIFRoZSBDOTkgX0Jvb2wgdHlwZSBoYXMgYW4KK2ludGVybmFsIHJlcHJlc2VudGF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgQzk5IHN0YW5kYXJkLCB3aGljaCBpcworaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSBkZXNjcmlwdGlvbiwgaS5lLiB3aXRoIDEgZm9yIHRydWUgYW5kIDAgZm9yCitmYWxzZSBiZWluZyB0aGUgb25seSBwZXJtaXNzaWJsZSB2YWx1ZXMuICBUaHVzIHRoZSBpbnRlcm5hbAorcmVwcmVzZW50YXRpb24gb2YgPGNvZGU+TE9HSUNBTDwvY29kZT4gdmFyaWFibGVzIGluIEdOVSBGb3J0cmFuIGlzIGlkZW50aWNhbAordG8gQzk5IF9Cb29sLCBleGNlcHQgZm9yIGEgcG9zc2libGUgZGlmZmVyZW5jZSBpbiBzdG9yYWdlIHNpemUKK2RlcGVuZGluZyBvbiB0aGUga2luZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludGVyb3BlcmFiaWxpdHktd2l0aC1DLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2VmNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludGVyb3BlcmFiaWxpdHktd2l0aC1DLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW50ZXJvcGVyYWJpbGl0eSB3aXRoIEMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwjTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nIiB0aXRsZT0iTWl4ZWQtTGFuZ3VhZ2UgUHJvZ3JhbW1pbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHTlUtRm9ydHJhbi1Db21waWxlci1EaXJlY3RpdmVzLmh0bWwjR05VLUZvcnRyYW4tQ29tcGlsZXItRGlyZWN0aXZlcyIgdGl0bGU9IkdOVSBGb3J0cmFuIENvbXBpbGVyIERpcmVjdGl2ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR05VLUZvcnRyYW4tQ29tcGlsZXItRGlyZWN0aXZlcy5odG1sI0dOVS1Gb3J0cmFuLUNvbXBpbGVyLURpcmVjdGl2ZXMiPkdOVSBGb3J0cmFuIENvbXBpbGVyIERpcmVjdGl2ZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmcuaHRtbCNNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmciPk1peGVkLUxhbmd1YWdlIFByb2dyYW1taW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ny4xIEludGVyb3BlcmFiaWxpdHkgd2l0aCBDPC9oMz4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkludHJpbnNpYy1UeXBlcy5odG1sI0ludHJpbnNpYy1UeXBlcyI+SW50cmluc2ljIFR5cGVzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iRGVyaXZlZC1UeXBlcy1hbmQtc3RydWN0Lmh0bWwjRGVyaXZlZC1UeXBlcy1hbmQtc3RydWN0Ij5EZXJpdmVkIFR5cGVzIGFuZCBzdHJ1Y3Q8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJJbnRlcm9wZXJhYmxlLUdsb2JhbC1WYXJpYWJsZXMuaHRtbCNJbnRlcm9wZXJhYmxlLUdsb2JhbC1WYXJpYWJsZXMiPkludGVyb3BlcmFibGUgR2xvYmFsIFZhcmlhYmxlczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkludGVyb3BlcmFibGUtU3Vicm91dGluZXMtYW5kLUZ1bmN0aW9ucy5odG1sI0ludGVyb3BlcmFibGUtU3Vicm91dGluZXMtYW5kLUZ1bmN0aW9ucyI+SW50ZXJvcGVyYWJsZSBTdWJyb3V0aW5lcyBhbmQgRnVuY3Rpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iV29ya2luZy13aXRoLVBvaW50ZXJzLmh0bWwjV29ya2luZy13aXRoLVBvaW50ZXJzIj5Xb3JraW5nIHdpdGggUG9pbnRlcnM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJGdXJ0aGVyLUludGVyb3BlcmFiaWxpdHktb2YtRm9ydHJhbi13aXRoLUMuaHRtbCNGdXJ0aGVyLUludGVyb3BlcmFiaWxpdHktb2YtRm9ydHJhbi13aXRoLUMiPkZ1cnRoZXIgSW50ZXJvcGVyYWJpbGl0eSBvZiBGb3J0cmFuIHdpdGggQzwvYT4KKzwvdWw+CisKKzxwPlNpbmNlIEZvcnRyYW4gMjAwMyAoSVNPL0lFQyAxNTM5LTE6MjAwNChFKSkgdGhlcmUgaXMgYQorc3RhbmRhcmRpemVkIHdheSB0byBnZW5lcmF0ZSBwcm9jZWR1cmUgYW5kIGRlcml2ZWQtdHlwZQorZGVjbGFyYXRpb25zIGFuZCBnbG9iYWwgdmFyaWFibGVzIHdoaWNoIGFyZSBpbnRlcm9wZXJhYmxlIHdpdGggQworKElTTy9JRUMgOTg5OToxOTk5KS4gIFRoZSA8Y29kZT5iaW5kKEMpPC9jb2RlPiBhdHRyaWJ1dGUgaGFzIGJlZW4gYWRkZWQKK3RvIGluZm9ybSB0aGUgY29tcGlsZXIgdGhhdCBhIHN5bWJvbCBzaGFsbCBiZSBpbnRlcm9wZXJhYmxlIHdpdGggQzsKK2Fsc28sIHNvbWUgY29uc3RyYWludHMgYXJlIGFkZGVkLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBub3QKK2FsbCBDIGZlYXR1cmVzIGhhdmUgYSBGb3J0cmFuIGVxdWl2YWxlbnQgb3IgdmljZSB2ZXJzYS4gIEZvciBpbnN0YW5jZSwKK25laXRoZXIgQydzIHVuc2lnbmVkIGludGVnZXJzIG5vciBDJ3MgZnVuY3Rpb25zIHdpdGggdmFyaWFibGUgbnVtYmVyCitvZiBhcmd1bWVudHMgaGF2ZSBhbiBlcXVpdmFsZW50IGluIEZvcnRyYW4uCisKKyAgIDxwPk5vdGUgdGhhdCBhcnJheSBkaW1lbnNpb25zIGFyZSByZXZlcnNlbHkgb3JkZXJlZCBpbiBDIGFuZCB0aGF0IGFycmF5cyBpbgorQyBhbHdheXMgc3RhcnQgd2l0aCBpbmRleCAwIHdoaWxlIGluIEZvcnRyYW4gdGhleSBzdGFydCBieSBkZWZhdWx0IHdpdGgKKzEuICBUaHVzLCBhbiBhcnJheSBkZWNsYXJhdGlvbiA8Y29kZT5BKG4sbSk8L2NvZGU+IGluIEZvcnRyYW4gbWF0Y2hlcworPGNvZGU+QVttXVtuXTwvY29kZT4gaW4gQyBhbmQgYWNjZXNzaW5nIHRoZSBlbGVtZW50IDxjb2RlPkEoaSxqKTwvY29kZT4gbWF0Y2hlcworPGNvZGU+QVtqLTFdW2ktMV08L2NvZGU+LiAgVGhlIGVsZW1lbnQgZm9sbG93aW5nIDxjb2RlPkEoaSxqKTwvY29kZT4gKEM6IDxjb2RlPkFbai0xXVtpLTFdPC9jb2RlPjsKK2Fzc3VtaW5nIGkgJmx0OyBuKSBpbiBtZW1vcnkgaXMgPGNvZGU+QShpKzEsaik8L2NvZGU+IChDOiA8Y29kZT5BW2otMV1baV08L2NvZGU+KS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludGVyb3BlcmFibGUtR2xvYmFsLVZhcmlhYmxlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludGVyb3BlcmFibGUtR2xvYmFsLVZhcmlhYmxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjNhODkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50ZXJvcGVyYWJsZS1HbG9iYWwtVmFyaWFibGVzLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW50ZXJvcGVyYWJsZSBHbG9iYWwgVmFyaWFibGVzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludGVyb3BlcmFiaWxpdHktd2l0aC1DLmh0bWwjSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMiIHRpdGxlPSJJbnRlcm9wZXJhYmlsaXR5IHdpdGggQyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRlcml2ZWQtVHlwZXMtYW5kLXN0cnVjdC5odG1sI0Rlcml2ZWQtVHlwZXMtYW5kLXN0cnVjdCIgdGl0bGU9IkRlcml2ZWQgVHlwZXMgYW5kIHN0cnVjdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkludGVyb3BlcmFibGUtU3Vicm91dGluZXMtYW5kLUZ1bmN0aW9ucy5odG1sI0ludGVyb3BlcmFibGUtU3Vicm91dGluZXMtYW5kLUZ1bmN0aW9ucyIgdGl0bGU9IkludGVyb3BlcmFibGUgU3Vicm91dGluZXMgYW5kIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnRlcm9wZXJhYmxlLUdsb2JhbC1WYXJpYWJsZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW50ZXJvcGVyYWJsZS1TdWJyb3V0aW5lcy1hbmQtRnVuY3Rpb25zLmh0bWwjSW50ZXJvcGVyYWJsZS1TdWJyb3V0aW5lcy1hbmQtRnVuY3Rpb25zIj5JbnRlcm9wZXJhYmxlIFN1YnJvdXRpbmVzIGFuZCBGdW5jdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEZXJpdmVkLVR5cGVzLWFuZC1zdHJ1Y3QuaHRtbCNEZXJpdmVkLVR5cGVzLWFuZC1zdHJ1Y3QiPkRlcml2ZWQgVHlwZXMgYW5kIHN0cnVjdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludGVyb3BlcmFiaWxpdHktd2l0aC1DLmh0bWwjSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMiPkludGVyb3BlcmFiaWxpdHkgd2l0aCBDPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ny4xLjMgSW50ZXJvcGVyYWJsZSBHbG9iYWwgVmFyaWFibGVzPC9oND4KKworPHA+VmFyaWFibGVzIGNhbiBiZSBtYWRlIGFjY2Vzc2libGUgZnJvbSBDIHVzaW5nIHRoZSBDIGJpbmRpbmcgYXR0cmlidXRlLAorb3B0aW9uYWxseSB0b2dldGhlciB3aXRoIHNwZWNpZnlpbmcgYSBiaW5kaW5nIG5hbWUuICBUaG9zZSB2YXJpYWJsZXMKK2hhdmUgdG8gYmUgZGVjbGFyZWQgaW4gdGhlIGRlY2xhcmF0aW9uIHBhcnQgb2YgYSA8Y29kZT5NT0RVTEU8L2NvZGU+LAorYmUgb2YgaW50ZXJvcGVyYWJsZSB0eXBlLCBhbmQgaGF2ZSBuZWl0aGVyIHRoZSA8Y29kZT5wb2ludGVyPC9jb2RlPiBub3IKK3RoZSA8Y29kZT5hbGxvY2F0YWJsZTwvY29kZT4gYXR0cmlidXRlLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBNT0RVTEUgbQorICAgICAgICAgVVNFIG15VHlwZV9tb2R1bGUKKyAgICAgICAgIFVTRSBJU09fQ19CSU5ESU5HCisgICAgICAgICBpbnRlZ2VyKENfSU5UKSwgYmluZChDLCBuYW1lPSJfTXlQcm9qZWN0X2ZsYWdzIikgOjogZ2xvYmFsX2ZsYWcKKyAgICAgICAgIHR5cGUobXlUeXBlKSwgYmluZChDKSA6OiB0cAorICAgICAgIEVORCBNT0RVTEUKKzwvcHJlPgorICAgPHA+SGVyZSwgPGNvZGU+X015UHJvamVjdF9mbGFnczwvY29kZT4gaXMgdGhlIGNhc2Utc2Vuc2l0aXZlIG5hbWUgb2YgdGhlIHZhcmlhYmxlCithcyBzZWVuIGZyb20gQyBwcm9ncmFtcyB3aGlsZSA8Y29kZT5nbG9iYWxfZmxhZzwvY29kZT4gaXMgdGhlIGNhc2UtaW5zZW5zaXRpdmUKK25hbWUgYXMgc2VlbiBmcm9tIEZvcnRyYW4uICBJZiBubyBiaW5kaW5nIG5hbWUgaXMgc3BlY2lmaWVkLCBhcyBmb3IKKzx2YXI+dHA8L3Zhcj4sIHRoZSBDIGJpbmRpbmcgbmFtZSBpcyB0aGUgKGxvd2VyY2FzZSkgRm9ydHJhbiBiaW5kaW5nIG5hbWUuIAorSWYgYSBiaW5kaW5nIG5hbWUgaXMgc3BlY2lmaWVkLCBvbmx5IGEgc2luZ2xlIHZhcmlhYmxlIG1heSBiZSBhZnRlciB0aGUKK2RvdWJsZSBjb2xvbi4gIE5vdGUgb2Ygd2FybmluZzogWW91IGNhbm5vdCB1c2UgYSBnbG9iYWwgdmFyaWFibGUgdG8KK2FjY2VzcyA8dmFyPmVycm5vPC92YXI+IG9mIHRoZSBDIGxpYnJhcnkgYXMgdGhlIEMgc3RhbmRhcmQgYWxsb3dzIGl0IHRvIGJlCithIG1hY3JvLiAgVXNlIHRoZSA8Y29kZT5JRVJSTk88L2NvZGU+IGludHJpbnNpYyAoR05VIGV4dGVuc2lvbikgaW5zdGVhZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludGVyb3BlcmFibGUtU3Vicm91dGluZXMtYW5kLUZ1bmN0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludGVyb3BlcmFibGUtU3Vicm91dGluZXMtYW5kLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOTY2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50ZXJvcGVyYWJsZS1TdWJyb3V0aW5lcy1hbmQtRnVuY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwxNDUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludGVyb3BlcmFibGUgU3Vicm91dGluZXMgYW5kIEZ1bmN0aW9ucyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQy5odG1sI0ludGVyb3BlcmFiaWxpdHktd2l0aC1DIiB0aXRsZT0iSW50ZXJvcGVyYWJpbGl0eSB3aXRoIEMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbnRlcm9wZXJhYmxlLUdsb2JhbC1WYXJpYWJsZXMuaHRtbCNJbnRlcm9wZXJhYmxlLUdsb2JhbC1WYXJpYWJsZXMiIHRpdGxlPSJJbnRlcm9wZXJhYmxlIEdsb2JhbCBWYXJpYWJsZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJXb3JraW5nLXdpdGgtUG9pbnRlcnMuaHRtbCNXb3JraW5nLXdpdGgtUG9pbnRlcnMiIHRpdGxlPSJXb3JraW5nIHdpdGggUG9pbnRlcnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50ZXJvcGVyYWJsZS1TdWJyb3V0aW5lcy1hbmQtRnVuY3Rpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ildvcmtpbmctd2l0aC1Qb2ludGVycy5odG1sI1dvcmtpbmctd2l0aC1Qb2ludGVycyI+V29ya2luZyB3aXRoIFBvaW50ZXJzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW50ZXJvcGVyYWJsZS1HbG9iYWwtVmFyaWFibGVzLmh0bWwjSW50ZXJvcGVyYWJsZS1HbG9iYWwtVmFyaWFibGVzIj5JbnRlcm9wZXJhYmxlIEdsb2JhbCBWYXJpYWJsZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQy5odG1sI0ludGVyb3BlcmFiaWxpdHktd2l0aC1DIj5JbnRlcm9wZXJhYmlsaXR5IHdpdGggQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjcuMS40IEludGVyb3BlcmFibGUgU3Vicm91dGluZXMgYW5kIEZ1bmN0aW9uczwvaDQ+CisKKzxwPlN1YnJvdXRpbmVzIGFuZCBmdW5jdGlvbnMgaGF2ZSB0byBoYXZlIHRoZSA8Y29kZT5CSU5EKEMpPC9jb2RlPiBhdHRyaWJ1dGUgdG8KK2JlIGNvbXBhdGlibGUgd2l0aCBDLiAgVGhlIGR1bW15IGFyZ3VtZW50IGRlY2xhcmF0aW9uIGlzIHJlbGF0aXZlbHkKK3N0cmFpZ2h0Zm9yd2FyZC4gIEhvd2V2ZXIsIG9uZSBuZWVkcyB0byBiZSBjYXJlZnVsIGJlY2F1c2UgQyB1c2VzCitjYWxsLWJ5LXZhbHVlIGJ5IGRlZmF1bHQgd2hpbGUgRm9ydHJhbiBiZWhhdmVzIHVzdWFsbHkgc2ltaWxhciB0bworY2FsbC1ieS1yZWZlcmVuY2UuICBGdXJ0aGVybW9yZSwgc3RyaW5ncyBhbmQgcG9pbnRlcnMgYXJlIGhhbmRsZWQKK2RpZmZlcmVudGx5LiAgTm90ZSB0aGF0IGluIEZvcnRyYW4gMjAwMyBhbmQgMjAwOCBvbmx5IGV4cGxpY2l0IHNpemUKK2FuZCBhc3N1bWVkLXNpemUgYXJyYXlzIGFyZSBzdXBwb3J0ZWQgYnV0IG5vdCBhc3N1bWVkLXNoYXBlIG9yCitkZWZlcnJlZC1zaGFwZSAoaS5lLiBhbGxvY2F0YWJsZSBvciBwb2ludGVyKSBhcnJheXMuICBIb3dldmVyLCB0aG9zZQorYXJlIGFsbG93ZWQgc2luY2UgdGhlIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uIDI5MTEzLCBzZWUKKzxhIGhyZWY9IkZ1cnRoZXItSW50ZXJvcGVyYWJpbGl0eS1vZi1Gb3J0cmFuLXdpdGgtQy5odG1sI0Z1cnRoZXItSW50ZXJvcGVyYWJpbGl0eS1vZi1Gb3J0cmFuLXdpdGgtQyI+RnVydGhlciBJbnRlcm9wZXJhYmlsaXR5IG9mIEZvcnRyYW4gd2l0aCBDPC9hPgorCisgICA8cD5UbyBwYXNzIGEgdmFyaWFibGUgYnkgdmFsdWUsIHVzZSB0aGUgPGNvZGU+VkFMVUU8L2NvZGU+IGF0dHJpYnV0ZS4gCitUaHVzLCB0aGUgZm9sbG93aW5nIEMgcHJvdG90eXBlCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8Y29kZT5pbnQgZnVuYyhpbnQgaSwgaW50ICpqKTwvY29kZT4KKzwvcHJlPgorICAgPHA+bWF0Y2hlcyB0aGUgRm9ydHJhbiBkZWNsYXJhdGlvbgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBpbnRlZ2VyKGNfaW50KSBmdW5jdGlvbiBmdW5jKGksaikKKyAgICAgICAgIHVzZSBpc29fY19iaW5kaW5nLCBvbmx5OiBjX2ludAorICAgICAgICAgaW50ZWdlcihjX2ludCksIFZBTFVFIDo6IGkKKyAgICAgICAgIGludGVnZXIoY19pbnQpIDo6IGoKKzwvcHJlPgorICAgPHA+Tm90ZSB0aGF0IHBvaW50ZXIgYXJndW1lbnRzIGFsc28gZnJlcXVlbnRseSBuZWVkIHRoZSA8Y29kZT5WQUxVRTwvY29kZT4gYXR0cmlidXRlLAorc2VlIDxhIGhyZWY9Ildvcmtpbmctd2l0aC1Qb2ludGVycy5odG1sI1dvcmtpbmctd2l0aC1Qb2ludGVycyI+V29ya2luZyB3aXRoIFBvaW50ZXJzPC9hPi4KKworICAgPHA+U3RyaW5ncyBhcmUgaGFuZGxlZCBxdWl0ZSBkaWZmZXJlbnRseSBpbiBDIGFuZCBGb3J0cmFuLiAgSW4gQyBhIHN0cmluZworaXMgYSA8Y29kZT5OVUw8L2NvZGU+LXRlcm1pbmF0ZWQgYXJyYXkgb2YgY2hhcmFjdGVycyB3aGlsZSBpbiBGb3J0cmFuIGVhY2ggc3RyaW5nCitoYXMgYSBsZW5ndGggYXNzb2NpYXRlZCB3aXRoIGl0IGFuZCBpcyB0aHVzIG5vdCB0ZXJtaW5hdGVkIChieSBlLmcuIAorPGNvZGU+TlVMPC9jb2RlPikuICBGb3IgZXhhbXBsZSwgaWYgb25lIHdhbnRzIHRvIHVzZSB0aGUgZm9sbG93aW5nIEMgZnVuY3Rpb24sCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICAgIHZvaWQgcHJpbnRfQyhjaGFyICpzdHJpbmcpIC8qIGVxdWl2YWxlbnQ6IGNoYXIgc3RyaW5nW10gICovCisgICAgICAgeworICAgICAgICAgIHByaW50ZigiJXNcbiIsIHN0cmluZyk7CisgICAgICAgfQorPC9wcmU+CisgICA8cD50byBwcmludCAmbGRxdW87SGVsbG8gV29ybGQmcmRxdW87IGZyb20gRm9ydHJhbiwgb25lIGNhbiBjYWxsIGl0IHVzaW5nCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIHVzZSBpc29fY19iaW5kaW5nLCBvbmx5OiBDX0NIQVIsIENfTlVMTF9DSEFSCisgICAgICAgaW50ZXJmYWNlCisgICAgICAgICBzdWJyb3V0aW5lIHByaW50X2Moc3RyaW5nKSBiaW5kKEMsIG5hbWU9InByaW50X0MiKQorICAgICAgICAgICB1c2UgaXNvX2NfYmluZGluZywgb25seTogY19jaGFyCisgICAgICAgICAgIGNoYXJhY3RlcihraW5kPWNfY2hhcikgOjogc3RyaW5nKCopCisgICAgICAgICBlbmQgc3Vicm91dGluZSBwcmludF9jCisgICAgICAgZW5kIGludGVyZmFjZQorICAgICAgIGNhbGwgcHJpbnRfYyhDX0NIQVJfIkhlbGxvIFdvcmxkIi8vQ19OVUxMX0NIQVIpCis8L3ByZT4KKyAgIDxwPkFzIHRoZSBleGFtcGxlIHNob3dzLCBvbmUgbmVlZHMgdG8gZW5zdXJlIHRoYXQgdGhlCitzdHJpbmcgaXMgPGNvZGU+TlVMPC9jb2RlPiB0ZXJtaW5hdGVkLiAgQWRkaXRpb25hbGx5LCB0aGUgZHVtbXkgYXJndW1lbnQKKzx2YXI+c3RyaW5nPC92YXI+IG9mIDxjb2RlPnByaW50X0M8L2NvZGU+IGlzIGEgbGVuZ3RoLW9uZSBhc3N1bWVkLXNpemUKK2FycmF5OyB1c2luZyA8Y29kZT5jaGFyYWN0ZXIobGVuPSopPC9jb2RlPiBpcyBub3QgYWxsb3dlZC4gIFRoZSBleGFtcGxlCithYm92ZSB1c2VzIDxjb2RlPmNfY2hhcl8iSGVsbG8gV29ybGQiPC9jb2RlPiB0byBlbnN1cmUgdGhlIHN0cmluZworbGl0ZXJhbCBoYXMgdGhlIHJpZ2h0IHR5cGU7IHR5cGljYWxseSB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIKK2tpbmQgYW5kIDxjb2RlPmNfY2hhcjwvY29kZT4gYXJlIHRoZSBzYW1lIGFuZCB0aHVzIDxjb2RlPiJIZWxsbyBXb3JsZCI8L2NvZGU+CitpcyBlcXVpdmFsZW50LiAgSG93ZXZlciwgdGhlIHN0YW5kYXJkIGRvZXMgbm90IGd1YXJhbnRlZSB0aGlzLgorCisgICA8cD5UaGUgdXNlIG9mIHN0cmluZ3MgaXMgbm93IGZ1cnRoZXIgaWxsdXN0cmF0ZWQgdXNpbmcgdGhlIEMgbGlicmFyeQorZnVuY3Rpb24gPGNvZGU+c3RybmNweTwvY29kZT4sIHdob3NlIHByb3RvdHlwZSBpcworCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBjaGFyICpzdHJuY3B5KGNoYXIgKnJlc3RyaWN0IHMxLCBjb25zdCBjaGFyICpyZXN0cmljdCBzMiwgc2l6ZV90IG4pOworPC9wcmU+CisgICA8cD5UaGUgZnVuY3Rpb24gPGNvZGU+c3RybmNweTwvY29kZT4gY29waWVzIGF0IG1vc3QgPHZhcj5uPC92YXI+IGNoYXJhY3RlcnMgZnJvbQorc3RyaW5nIDx2YXI+czI8L3Zhcj4gdG8gPHZhcj5zMTwvdmFyPiBhbmQgcmV0dXJucyA8dmFyPnMxPC92YXI+LiAgSW4gdGhlIGZvbGxvd2luZworZXhhbXBsZSwgd2UgaWdub3JlIHRoZSByZXR1cm4gdmFsdWU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIHVzZSBpc29fY19iaW5kaW5nCisgICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgIGNoYXJhY3RlcihsZW49MzApIDo6IHN0cixzdHIyCisgICAgICAgaW50ZXJmYWNlCisgICAgICAgICAhIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHN0cm5jcHkgLSZndDsgc3Vicm91dGluZQorICAgICAgICAgISAicmVzdHJpY3QiIGlzIGFsd2F5cyBhc3N1bWVkIGlmIHdlIGRvIG5vdCBwYXNzIGEgcG9pbnRlcgorICAgICAgICAgc3Vicm91dGluZSBzdHJuY3B5KGRlc3QsIHNyYywgbikgYmluZChDKQorICAgICAgICAgICBpbXBvcnQKKyAgICAgICAgICAgY2hhcmFjdGVyKGtpbmQ9Y19jaGFyKSwgIGludGVudChvdXQpIDo6IGRlc3QoKikKKyAgICAgICAgICAgY2hhcmFjdGVyKGtpbmQ9Y19jaGFyKSwgIGludGVudChpbikgIDo6IHNyYygqKQorICAgICAgICAgICBpbnRlZ2VyKGNfc2l6ZV90KSwgdmFsdWUsIGludGVudChpbikgOjogbgorICAgICAgICAgZW5kIHN1YnJvdXRpbmUgc3RybmNweQorICAgICAgIGVuZCBpbnRlcmZhY2UKKyAgICAgICBzdHIgPSByZXBlYXQoJ1gnLDMwKSAhIEluaXRpYWxpemUgd2hvbGUgc3RyaW5nIHdpdGggJ1gnCisgICAgICAgY2FsbCBzdHJuY3B5KHN0ciwgY19jaGFyXyJIZWxsbyBXb3JsZCIvL0NfTlVMTF9DSEFSLCAmYW1wOworICAgICAgICAgICAgICAgICAgICBsZW4oY19jaGFyXyJIZWxsbyBXb3JsZCIsa2luZD1jX3NpemVfdCkpCisgICAgICAgcHJpbnQgJyhhKScsIHN0ciAhIHByaW50czogIkhlbGxvIFdvcmxkWFhYWFhYWFhYWFhYWFhYWFhYWCIKKyAgICAgICBlbmQKKzwvcHJlPgorICAgPHA+VGhlIGludHJpbnNpYyBwcm9jZWR1cmVzIGFyZSBkZXNjcmliZWQgaW4gPGEgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50cmluc2ljLU1vZHVsZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JbnRyaW5zaWMtTW9kdWxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMWZiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50cmluc2ljLU1vZHVsZXMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbnRyaW5zaWMgTW9kdWxlcyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNvbnRyaWJ1dGluZy5odG1sI0NvbnRyaWJ1dGluZyIgdGl0bGU9IkNvbnRyaWJ1dGluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnRyaW5zaWMtTW9kdWxlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb250cmlidXRpbmcuaHRtbCNDb250cmlidXRpbmciPkNvbnRyaWJ1dGluZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjkgSW50cmluc2ljIE1vZHVsZXM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1pbnRyaW5zaWMtTW9kdWxlcy0xMTQwIj48L2E+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJJU09fMDA1ZkZPUlRSQU5fMDA1ZkVOVi5odG1sI0lTT18wMDVmRk9SVFJBTl8wMDVmRU5WIj5JU09fRk9SVFJBTl9FTlY8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJJU09fMDA1ZkNfMDA1ZkJJTkRJTkcuaHRtbCNJU09fMDA1ZkNfMDA1ZkJJTkRJTkciPklTT19DX0JJTkRJTkc8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJPcGVuTVAtTW9kdWxlcy1PTVBfMDA1ZkxJQi1hbmQtT01QXzAwNWZMSUJfMDA1ZktJTkRTLmh0bWwjT3Blbk1QLU1vZHVsZXMtT01QXzAwNWZMSUItYW5kLU9NUF8wMDVmTElCXzAwNWZLSU5EUyI+T3Blbk1QIE1vZHVsZXMgT01QX0xJQiBhbmQgT01QX0xJQl9LSU5EUzwvYT4KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4YjA0NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludHJpbnNpYyBQcm9jZWR1cmVzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwjTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nIiB0aXRsZT0iTWl4ZWQtTGFuZ3VhZ2UgUHJvZ3JhbW1pbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnRyaW5zaWMtTW9kdWxlcy5odG1sI0ludHJpbnNpYy1Nb2R1bGVzIiB0aXRsZT0iSW50cmluc2ljIE1vZHVsZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50cmluc2ljLVByb2NlZHVyZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW50cmluc2ljLU1vZHVsZXMuaHRtbCNJbnRyaW5zaWMtTW9kdWxlcyI+SW50cmluc2ljIE1vZHVsZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmcuaHRtbCNNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmciPk1peGVkLUxhbmd1YWdlIFByb2dyYW1taW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjggSW50cmluc2ljIFByb2NlZHVyZXM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1pbnRyaW5zaWMtcHJvY2VkdXJlcy0zNjkiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkludHJvZHVjdGlvbi10by1JbnRyaW5zaWNzLmh0bWwjSW50cm9kdWN0aW9uLXRvLUludHJpbnNpY3MiPkludHJvZHVjdGlvbjwvYT46IDxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkFCT1JULmh0bWwjQUJPUlQiPjxjb2RlPkFCT1JUPC9jb2RlPjwvYT46IDxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkFCUy5odG1sI0FCUyI+PGNvZGU+QUJTPC9jb2RlPjwvYT46IDxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkFDQ0VTUy5odG1sI0FDQ0VTUyI+PGNvZGU+QUNDRVNTPC9jb2RlPjwvYT46IDxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkFDSEFSLmh0bWwjQUNIQVIiPjxjb2RlPkFDSEFSPC9jb2RlPjwvYT46IDxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkFDT1MuaHRtbCNBQ09TIj48Y29kZT5BQ09TPC9jb2RlPjwvYT46IDxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9IkFDT1NILmh0bWwjQUNPU0giPjxjb2RlPkFDT1NIPC9jb2RlPjwvYT46IDxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9IkFESlVTVEwuaHRtbCNBREpVU1RMIj48Y29kZT5BREpVU1RMPC9jb2RlPjwvYT46IDxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkFESlVTVFIuaHRtbCNBREpVU1RSIj48Y29kZT5BREpVU1RSPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJBSU1BRy5odG1sI0FJTUFHIj48Y29kZT5BSU1BRzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQUlOVC5odG1sI0FJTlQiPjxjb2RlPkFJTlQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkFMQVJNLmh0bWwjQUxBUk0iPjxjb2RlPkFMQVJNPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJBTEwuaHRtbCNBTEwiPjxjb2RlPkFMTDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQUxMT0NBVEVELmh0bWwjQUxMT0NBVEVEIj48Y29kZT5BTExPQ0FURUQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkFORC5odG1sI0FORCI+PGNvZGU+QU5EPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJBTklOVC5odG1sI0FOSU5UIj48Y29kZT5BTklOVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQU5ZLmh0bWwjQU5ZIj48Y29kZT5BTlk8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkFTSU4uaHRtbCNBU0lOIj48Y29kZT5BU0lOPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJBU0lOSC5odG1sI0FTSU5IIj48Y29kZT5BU0lOSDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQVNTT0NJQVRFRC5odG1sI0FTU09DSUFURUQiPjxjb2RlPkFTU09DSUFURUQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkFUQU4uaHRtbCNBVEFOIj48Y29kZT5BVEFOPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJBVEFOMi5odG1sI0FUQU4yIj48Y29kZT5BVEFOMjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQVRBTkguaHRtbCNBVEFOSCI+PGNvZGU+QVRBTkg8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkFUT01JQ18wMDVmREVGSU5FLmh0bWwjQVRPTUlDXzAwNWZERUZJTkUiPjxjb2RlPkFUT01JQ19ERUZJTkU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkFUT01JQ18wMDVmUkVGLmh0bWwjQVRPTUlDXzAwNWZSRUYiPjxjb2RlPkFUT01JQ19SRUY8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkJBQ0tUUkFDRS5odG1sI0JBQ0tUUkFDRSI+PGNvZGU+QkFDS1RSQUNFPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkowLmh0bWwjQkVTU0VMXzAwNWZKMCI+PGNvZGU+QkVTU0VMX0owPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkoxLmh0bWwjQkVTU0VMXzAwNWZKMSI+PGNvZGU+QkVTU0VMX0oxPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjQkVTU0VMXzAwNWZKTiI+PGNvZGU+QkVTU0VMX0pOPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZlkwLmh0bWwjQkVTU0VMXzAwNWZZMCI+PGNvZGU+QkVTU0VMX1kwPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZlkxLmh0bWwjQkVTU0VMXzAwNWZZMSI+PGNvZGU+QkVTU0VMX1kxPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjQkVTU0VMXzAwNWZZTiI+PGNvZGU+QkVTU0VMX1lOPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJCR0UuaHRtbCNCR0UiPjxjb2RlPkJHRTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQkdULmh0bWwjQkdUIj48Y29kZT5CR1Q8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkJJVF8wMDVmU0laRS5odG1sI0JJVF8wMDVmU0laRSI+PGNvZGU+QklUX1NJWkU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkJMRS5odG1sI0JMRSI+PGNvZGU+QkxFPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJCTFQuaHRtbCNCTFQiPjxjb2RlPkJMVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQlRFU1QuaHRtbCNCVEVTVCI+PGNvZGU+QlRFU1Q8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkNfMDA1ZkFTU09DSUFURUQuaHRtbCNDXzAwNWZBU1NPQ0lBVEVEIj48Y29kZT5DX0FTU09DSUFURUQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQT0lOVEVSIj48Y29kZT5DX0ZfUE9JTlRFUjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQUk9DUE9JTlRFUiI+PGNvZGU+Q19GX1BST0NQT0lOVEVSPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJDXzAwNWZGVU5MT0MuaHRtbCNDXzAwNWZGVU5MT0MiPjxjb2RlPkNfRlVOTE9DPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJDXzAwNWZMT0MuaHRtbCNDXzAwNWZMT0MiPjxjb2RlPkNfTE9DPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJDXzAwNWZTSVpFT0YuaHRtbCNDXzAwNWZTSVpFT0YiPjxjb2RlPkNfU0laRU9GPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJDRUlMSU5HLmh0bWwjQ0VJTElORyI+PGNvZGU+Q0VJTElORzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQ0hBUi5odG1sI0NIQVIiPjxjb2RlPkNIQVI8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkNIRElSLmh0bWwjQ0hESVIiPjxjb2RlPkNIRElSPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJDSE1PRC5odG1sI0NITU9EIj48Y29kZT5DSE1PRDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQ01QTFguaHRtbCNDTVBMWCI+PGNvZGU+Q01QTFg8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkNPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC5odG1sI0NPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVCI+PGNvZGU+Q09NTUFORF9BUkdVTUVOVF9DT1VOVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQ09NUElMRVJfMDA1Zk9QVElPTlMuaHRtbCNDT01QSUxFUl8wMDVmT1BUSU9OUyI+PGNvZGU+Q09NUElMRVJfT1BUSU9OUzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQ09NUElMRVJfMDA1ZlZFUlNJT04uaHRtbCNDT01QSUxFUl8wMDVmVkVSU0lPTiI+PGNvZGU+Q09NUElMRVJfVkVSU0lPTjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQ09NUExFWC5odG1sI0NPTVBMRVgiPjxjb2RlPkNPTVBMRVg8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkNPTkpHLmh0bWwjQ09OSkciPjxjb2RlPkNPTkpHPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJDT1MuaHRtbCNDT1MiPjxjb2RlPkNPUzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQ09TSC5odG1sI0NPU0giPjxjb2RlPkNPU0g8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkNPVU5ULmh0bWwjQ09VTlQiPjxjb2RlPkNPVU5UPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJDUFVfMDA1ZlRJTUUuaHRtbCNDUFVfMDA1ZlRJTUUiPjxjb2RlPkNQVV9USU1FPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJDU0hJRlQuaHRtbCNDU0hJRlQiPjxjb2RlPkNTSElGVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+PGNvZGU+Q1RJTUU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI0RBVEVfMDA1ZkFORF8wMDVmVElNRSI+PGNvZGU+REFURV9BTkRfVElNRTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iREJMRS5odG1sI0RCTEUiPjxjb2RlPkRCTEU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkRDTVBMWC5odG1sI0RDTVBMWCI+PGNvZGU+RENNUExYPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJESUdJVFMuaHRtbCNESUdJVFMiPjxjb2RlPkRJR0lUUzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRElNLmh0bWwjRElNIj48Y29kZT5ESU08L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkRPVF8wMDVmUFJPRFVDVC5odG1sI0RPVF8wMDVmUFJPRFVDVCI+PGNvZGU+RE9UX1BST0RVQ1Q8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkRQUk9ELmh0bWwjRFBST0QiPjxjb2RlPkRQUk9EPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJEUkVBTC5odG1sI0RSRUFMIj48Y29kZT5EUkVBTDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRFNISUZUTC5odG1sI0RTSElGVEwiPjxjb2RlPkRTSElGVEw8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkRTSElGVFIuaHRtbCNEU0hJRlRSIj48Y29kZT5EU0hJRlRSPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJEVElNRS5odG1sI0RUSU1FIj48Y29kZT5EVElNRTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRU9TSElGVC5odG1sI0VPU0hJRlQiPjxjb2RlPkVPU0hJRlQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkVQU0lMT04uaHRtbCNFUFNJTE9OIj48Y29kZT5FUFNJTE9OPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJFUkYuaHRtbCNFUkYiPjxjb2RlPkVSRjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRVJGQy5odG1sI0VSRkMiPjxjb2RlPkVSRkM8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkVSRkNfMDA1ZlNDQUxFRC5odG1sI0VSRkNfMDA1ZlNDQUxFRCI+PGNvZGU+RVJGQ19TQ0FMRUQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkVUSU1FLmh0bWwjRVRJTUUiPjxjb2RlPkVUSU1FPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJFWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FLmh0bWwjRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORSI+PGNvZGU+RVhFQ1VURV9DT01NQU5EX0xJTkU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkVYSVQuaHRtbCNFWElUIj48Y29kZT5FWElUPC9jb2RlPjwvYT4KKzxsaT48YSBocmVmPSJFWFAuaHRtbCNFWFAiPjxjb2RlPkVYUDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRVhQT05FTlQuaHRtbCNFWFBPTkVOVCI+PGNvZGU+RVhQT05FTlQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkVYVEVORFNfMDA1ZlRZUEVfMDA1Zk9GLmh0bWwjRVhURU5EU18wMDVmVFlQRV8wMDVmT0YiPjxjb2RlPkVYVEVORFNfVFlQRV9PRjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRkRBVEUuaHRtbCNGREFURSI+PGNvZGU+RkRBVEU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkZHRVQuaHRtbCNGR0VUIj48Y29kZT5GR0VUPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJGR0VUQy5odG1sI0ZHRVRDIj48Y29kZT5GR0VUQzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRkxPT1IuaHRtbCNGTE9PUiI+PGNvZGU+RkxPT1I8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkZMVVNILmh0bWwjRkxVU0giPjxjb2RlPkZMVVNIPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJGTlVNLmh0bWwjRk5VTSI+PGNvZGU+Rk5VTTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRlBVVC5odG1sI0ZQVVQiPjxjb2RlPkZQVVQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkZQVVRDLmh0bWwjRlBVVEMiPjxjb2RlPkZQVVRDPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJGUkFDVElPTi5odG1sI0ZSQUNUSU9OIj48Y29kZT5GUkFDVElPTjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRlJFRS5odG1sI0ZSRUUiPjxjb2RlPkZSRUU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkZTRUVLLmh0bWwjRlNFRUsiPjxjb2RlPkZTRUVLPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJGU1RBVC5odG1sI0ZTVEFUIj48Y29kZT5GU1RBVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iRlRFTEwuaHRtbCNGVEVMTCI+PGNvZGU+RlRFTEw8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkdBTU1BLmh0bWwjR0FNTUEiPjxjb2RlPkdBTU1BPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJHRVJST1IuaHRtbCNHRVJST1IiPjxjb2RlPkdFUlJPUjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iR0VUQVJHLmh0bWwjR0VUQVJHIj48Y29kZT5HRVRBUkc8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkdFVF8wMDVmQ09NTUFORC5odG1sI0dFVF8wMDVmQ09NTUFORCI+PGNvZGU+R0VUX0NPTU1BTkQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkdFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQuaHRtbCNHRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5UIj48Y29kZT5HRVRfQ09NTUFORF9BUkdVTUVOVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iR0VUQ1dELmh0bWwjR0VUQ1dEIj48Y29kZT5HRVRDV0Q8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkdFVEVOVi5odG1sI0dFVEVOViI+PGNvZGU+R0VURU5WPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJHRVRfMDA1ZkVOVklST05NRU5UXzAwNWZWQVJJQUJMRS5odG1sI0dFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFIj48Y29kZT5HRVRfRU5WSVJPTk1FTlRfVkFSSUFCTEU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkdFVEdJRC5odG1sI0dFVEdJRCI+PGNvZGU+R0VUR0lEPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJHRVRMT0cuaHRtbCNHRVRMT0ciPjxjb2RlPkdFVExPRzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iR0VUUElELmh0bWwjR0VUUElEIj48Y29kZT5HRVRQSUQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkdFVFVJRC5odG1sI0dFVFVJRCI+PGNvZGU+R0VUVUlEPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJHTVRJTUUuaHRtbCNHTVRJTUUiPjxjb2RlPkdNVElNRTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSE9TVE5NLmh0bWwjSE9TVE5NIj48Y29kZT5IT1NUTk08L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkhVR0UuaHRtbCNIVUdFIj48Y29kZT5IVUdFPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJIWVBPVC5odG1sI0hZUE9UIj48Y29kZT5IWVBPVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSUFDSEFSLmh0bWwjSUFDSEFSIj48Y29kZT5JQUNIQVI8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IklBTEwuaHRtbCNJQUxMIj48Y29kZT5JQUxMPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJQU5ELmh0bWwjSUFORCI+PGNvZGU+SUFORDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSUFOWS5odG1sI0lBTlkiPjxjb2RlPklBTlk8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IklBUkdDLmh0bWwjSUFSR0MiPjxjb2RlPklBUkdDPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJQkNMUi5odG1sI0lCQ0xSIj48Y29kZT5JQkNMUjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSUJJVFMuaHRtbCNJQklUUyI+PGNvZGU+SUJJVFM8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IklCU0VULmh0bWwjSUJTRVQiPjxjb2RlPklCU0VUPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJQ0hBUi5odG1sI0lDSEFSIj48Y29kZT5JQ0hBUjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSURBVEUuaHRtbCNJREFURSI+PGNvZGU+SURBVEU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IklFT1IuaHRtbCNJRU9SIj48Y29kZT5JRU9SPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJRVJSTk8uaHRtbCNJRVJSTk8iPjxjb2RlPklFUlJOTzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSU1BR0VfMDA1ZklOREVYLmh0bWwjSU1BR0VfMDA1ZklOREVYIj48Y29kZT5JTUFHRV9JTkRFWDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSU5ERVgtaW50cmluc2ljLmh0bWwjSU5ERVgtaW50cmluc2ljIj48Y29kZT5JTkRFWDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSU5ULmh0bWwjSU5UIj48Y29kZT5JTlQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IklOVDIuaHRtbCNJTlQyIj48Y29kZT5JTlQyPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJTlQ4Lmh0bWwjSU5UOCI+PGNvZGU+SU5UODwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSU9SLmh0bWwjSU9SIj48Y29kZT5JT1I8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IklQQVJJVFkuaHRtbCNJUEFSSVRZIj48Y29kZT5JUEFSSVRZPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJUkFORC5odG1sI0lSQU5EIj48Y29kZT5JUkFORDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSVNfMDA1ZklPU1RBVF8wMDVmRU5ELmh0bWwjSVNfMDA1ZklPU1RBVF8wMDVmRU5EIj48Y29kZT5JU19JT1NUQVRfRU5EPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJU18wMDVmSU9TVEFUXzAwNWZFT1IuaHRtbCNJU18wMDVmSU9TVEFUXzAwNWZFT1IiPjxjb2RlPklTX0lPU1RBVF9FT1I8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IklTQVRUWS5odG1sI0lTQVRUWSI+PGNvZGU+SVNBVFRZPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJU0hGVC5odG1sI0lTSEZUIj48Y29kZT5JU0hGVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iSVNIRlRDLmh0bWwjSVNIRlRDIj48Y29kZT5JU0hGVEM8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IklTTkFOLmh0bWwjSVNOQU4iPjxjb2RlPklTTkFOPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJJVElNRS5odG1sI0lUSU1FIj48Y29kZT5JVElNRTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iS0lMTC5odG1sI0tJTEwiPjxjb2RlPktJTEw8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IktJTkQuaHRtbCNLSU5EIj48Y29kZT5LSU5EPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJMQk9VTkQuaHRtbCNMQk9VTkQiPjxjb2RlPkxCT1VORDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTENPQk9VTkQuaHRtbCNMQ09CT1VORCI+PGNvZGU+TENPQk9VTkQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkxFQURaLmh0bWwjTEVBRFoiPjxjb2RlPkxFQURaPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJMRU4uaHRtbCNMRU4iPjxjb2RlPkxFTjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTEVOXzAwNWZUUklNLmh0bWwjTEVOXzAwNWZUUklNIj48Y29kZT5MRU5fVFJJTTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTEdFLmh0bWwjTEdFIj48Y29kZT5MR0U8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkxHVC5odG1sI0xHVCI+PGNvZGU+TEdUPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJMSU5LLmh0bWwjTElOSyI+PGNvZGU+TElOSzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTExFLmh0bWwjTExFIj48Y29kZT5MTEU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkxMVC5odG1sI0xMVCI+PGNvZGU+TExUPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJMTkJMTksuaHRtbCNMTkJMTksiPjxjb2RlPkxOQkxOSzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTE9DLmh0bWwjTE9DIj48Y29kZT5MT0M8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkxPRy5odG1sI0xPRyI+PGNvZGU+TE9HPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJMT0cxMC5odG1sI0xPRzEwIj48Y29kZT5MT0cxMDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTE9HXzAwNWZHQU1NQS5odG1sI0xPR18wMDVmR0FNTUEiPjxjb2RlPkxPR19HQU1NQTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTE9HSUNBTC5odG1sI0xPR0lDQUwiPjxjb2RlPkxPR0lDQUw8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkxPTkcuaHRtbCNMT05HIj48Y29kZT5MT05HPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJMU0hJRlQuaHRtbCNMU0hJRlQiPjxjb2RlPkxTSElGVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTFNUQVQuaHRtbCNMU1RBVCI+PGNvZGU+TFNUQVQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IkxUSU1FLmh0bWwjTFRJTUUiPjxjb2RlPkxUSU1FPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJNQUxMT0MuaHRtbCNNQUxMT0MiPjxjb2RlPk1BTExPQzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTUFTS0wuaHRtbCNNQVNLTCI+PGNvZGU+TUFTS0w8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik1BU0tSLmh0bWwjTUFTS1IiPjxjb2RlPk1BU0tSPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJNQVRNVUwuaHRtbCNNQVRNVUwiPjxjb2RlPk1BVE1VTDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTUFYLmh0bWwjTUFYIj48Y29kZT5NQVg8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik1BWEVYUE9ORU5ULmh0bWwjTUFYRVhQT05FTlQiPjxjb2RlPk1BWEVYUE9ORU5UPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJNQVhMT0MuaHRtbCNNQVhMT0MiPjxjb2RlPk1BWExPQzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTUFYVkFMLmh0bWwjTUFYVkFMIj48Y29kZT5NQVhWQUw8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik1DTE9DSy5odG1sI01DTE9DSyI+PGNvZGU+TUNMT0NLPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJNQ0xPQ0s4Lmh0bWwjTUNMT0NLOCI+PGNvZGU+TUNMT0NLODwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTUVSR0UuaHRtbCNNRVJHRSI+PGNvZGU+TUVSR0U8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik1FUkdFXzAwNWZCSVRTLmh0bWwjTUVSR0VfMDA1ZkJJVFMiPjxjb2RlPk1FUkdFX0JJVFM8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik1JTi5odG1sI01JTiI+PGNvZGU+TUlOPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJNSU5FWFBPTkVOVC5odG1sI01JTkVYUE9ORU5UIj48Y29kZT5NSU5FWFBPTkVOVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTUlOTE9DLmh0bWwjTUlOTE9DIj48Y29kZT5NSU5MT0M8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik1JTlZBTC5odG1sI01JTlZBTCI+PGNvZGU+TUlOVkFMPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJNT0QuaHRtbCNNT0QiPjxjb2RlPk1PRDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTU9EVUxPLmh0bWwjTU9EVUxPIj48Y29kZT5NT0RVTE88L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik1PVkVfMDA1ZkFMTE9DLmh0bWwjTU9WRV8wMDVmQUxMT0MiPjxjb2RlPk1PVkVfQUxMT0M8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik1WQklUUy5odG1sI01WQklUUyI+PGNvZGU+TVZCSVRTPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJORUFSRVNULmh0bWwjTkVBUkVTVCI+PGNvZGU+TkVBUkVTVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTkVXXzAwNWZMSU5FLmh0bWwjTkVXXzAwNWZMSU5FIj48Y29kZT5ORVdfTElORTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTklOVC5odG1sI05JTlQiPjxjb2RlPk5JTlQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik5PUk0yLmh0bWwjTk9STTIiPjxjb2RlPk5PUk0yPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJOT1QuaHRtbCNOT1QiPjxjb2RlPk5PVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iTlVMTC5odG1sI05VTEwiPjxjb2RlPk5VTEw8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik5VTV8wMDVmSU1BR0VTLmh0bWwjTlVNXzAwNWZJTUFHRVMiPjxjb2RlPk5VTV9JTUFHRVM8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9Ik9SLmh0bWwjT1IiPjxjb2RlPk9SPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJQQUNLLmh0bWwjUEFDSyI+PGNvZGU+UEFDSzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iUEFSSVRZLmh0bWwjUEFSSVRZIj48Y29kZT5QQVJJVFk8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlBFUlJPUi5odG1sI1BFUlJPUiI+PGNvZGU+UEVSUk9SPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJQT1BDTlQuaHRtbCNQT1BDTlQiPjxjb2RlPlBPUENOVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iUE9QUEFSLmh0bWwjUE9QUEFSIj48Y29kZT5QT1BQQVI8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlBSRUNJU0lPTi5odG1sI1BSRUNJU0lPTiI+PGNvZGU+UFJFQ0lTSU9OPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJQUkVTRU5ULmh0bWwjUFJFU0VOVCI+PGNvZGU+UFJFU0VOVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iUFJPRFVDVC5odG1sI1BST0RVQ1QiPjxjb2RlPlBST0RVQ1Q8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlJBRElYLmh0bWwjUkFESVgiPjxjb2RlPlJBRElYPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJSQU4uaHRtbCNSQU4iPjxjb2RlPlJBTjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iUkFORC5odG1sI1JBTkQiPjxjb2RlPlJBTkQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlJBTkRPTV8wMDVmTlVNQkVSLmh0bWwjUkFORE9NXzAwNWZOVU1CRVIiPjxjb2RlPlJBTkRPTV9OVU1CRVI8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlJBTkRPTV8wMDVmU0VFRC5odG1sI1JBTkRPTV8wMDVmU0VFRCI+PGNvZGU+UkFORE9NX1NFRUQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlJBTkdFLmh0bWwjUkFOR0UiPjxjb2RlPlJBTkdFPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJSQU5LLmh0bWwjUkFOSyI+PGNvZGU+UkFOSzwvY29kZT4gPC9hPjogPGxpPjxhIGhyZWY9IlJFQUwuaHRtbCNSRUFMIj48Y29kZT5SRUFMPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJSRU5BTUUuaHRtbCNSRU5BTUUiPjxjb2RlPlJFTkFNRTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iUkVQRUFULmh0bWwjUkVQRUFUIj48Y29kZT5SRVBFQVQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlJFU0hBUEUuaHRtbCNSRVNIQVBFIj48Y29kZT5SRVNIQVBFPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJSUlNQQUNJTkcuaHRtbCNSUlNQQUNJTkciPjxjb2RlPlJSU1BBQ0lORzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iUlNISUZULmh0bWwjUlNISUZUIj48Y29kZT5SU0hJRlQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNBTUVfMDA1ZlRZUEVfMDA1ZkFTLmh0bWwjU0FNRV8wMDVmVFlQRV8wMDVmQVMiPjxjb2RlPlNBTUVfVFlQRV9BUzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU0NBTEUuaHRtbCNTQ0FMRSI+PGNvZGU+U0NBTEU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNDQU4uaHRtbCNTQ0FOIj48Y29kZT5TQ0FOPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTRUNORFMuaHRtbCNTRUNORFMiPjxjb2RlPlNFQ05EUzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU0VDT05ELmh0bWwjU0VDT05EIj48Y29kZT5TRUNPTkQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQiPjxjb2RlPlNFTEVDVEVEX0NIQVJfS0lORDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQiPjxjb2RlPlNFTEVDVEVEX0lOVF9LSU5EPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5EIj48Y29kZT5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNFVF8wMDVmRVhQT05FTlQuaHRtbCNTRVRfMDA1ZkVYUE9ORU5UIj48Y29kZT5TRVRfRVhQT05FTlQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNIQVBFLmh0bWwjU0hBUEUiPjxjb2RlPlNIQVBFPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTSElGVEEuaHRtbCNTSElGVEEiPjxjb2RlPlNISUZUQTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU0hJRlRMLmh0bWwjU0hJRlRMIj48Y29kZT5TSElGVEw8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNISUZUUi5odG1sI1NISUZUUiI+PGNvZGU+U0hJRlRSPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTSUdOLmh0bWwjU0lHTiI+PGNvZGU+U0lHTjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU0lHTkFMLmh0bWwjU0lHTkFMIj48Y29kZT5TSUdOQUw8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNJTi5odG1sI1NJTiI+PGNvZGU+U0lOPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTSU5ILmh0bWwjU0lOSCI+PGNvZGU+U0lOSDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU0laRS5odG1sI1NJWkUiPjxjb2RlPlNJWkU8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNJWkVPRi5odG1sI1NJWkVPRiI+PGNvZGU+U0laRU9GPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTTEVFUC5odG1sI1NMRUVQIj48Y29kZT5TTEVFUDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU1BBQ0lORy5odG1sI1NQQUNJTkciPjxjb2RlPlNQQUNJTkc8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNQUkVBRC5odG1sI1NQUkVBRCI+PGNvZGU+U1BSRUFEPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTUVJULmh0bWwjU1FSVCI+PGNvZGU+U1FSVDwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU1JBTkQuaHRtbCNTUkFORCI+PGNvZGU+U1JBTkQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNUQVQuaHRtbCNTVEFUIj48Y29kZT5TVEFUPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTVE9SQUdFXzAwNWZTSVpFLmh0bWwjU1RPUkFHRV8wMDVmU0laRSI+PGNvZGU+U1RPUkFHRV9TSVpFPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTVU0uaHRtbCNTVU0iPjxjb2RlPlNVTTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iU1lNTE5LLmh0bWwjU1lNTE5LIj48Y29kZT5TWU1MTks8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlNZU1RFTS5odG1sI1NZU1RFTSI+PGNvZGU+U1lTVEVNPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJTWVNURU1fMDA1ZkNMT0NLLmh0bWwjU1lTVEVNXzAwNWZDTE9DSyI+PGNvZGU+U1lTVEVNX0NMT0NLPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJUQU4uaHRtbCNUQU4iPjxjb2RlPlRBTjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iVEFOSC5odG1sI1RBTkgiPjxjb2RlPlRBTkg8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlRISVNfMDA1ZklNQUdFLmh0bWwjVEhJU18wMDVmSU1BR0UiPjxjb2RlPlRISVNfSU1BR0U8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlRJTUUuaHRtbCNUSU1FIj48Y29kZT5USU1FPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJUSU1FOC5odG1sI1RJTUU4Ij48Y29kZT5USU1FODwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iVElOWS5odG1sI1RJTlkiPjxjb2RlPlRJTlk8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlRSQUlMWi5odG1sI1RSQUlMWiI+PGNvZGU+VFJBSUxaPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJUUkFOU0ZFUi5odG1sI1RSQU5TRkVSIj48Y29kZT5UUkFOU0ZFUjwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iVFJBTlNQT1NFLmh0bWwjVFJBTlNQT1NFIj48Y29kZT5UUkFOU1BPU0U8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlRSSU0uaHRtbCNUUklNIj48Y29kZT5UUklNPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJUVFlOQU0uaHRtbCNUVFlOQU0iPjxjb2RlPlRUWU5BTTwvY29kZT48L2E+Cis8bGk+PGEgaHJlZj0iVUJPVU5ELmh0bWwjVUJPVU5EIj48Y29kZT5VQk9VTkQ8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlVDT0JPVU5ELmh0bWwjVUNPQk9VTkQiPjxjb2RlPlVDT0JPVU5EPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJVTUFTSy5odG1sI1VNQVNLIj48Y29kZT5VTUFTSzwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iVU5MSU5LLmh0bWwjVU5MSU5LIj48Y29kZT5VTkxJTks8L2NvZGU+PC9hPjogPGxpPjxhIGhyZWY9IlVOUEFDSy5odG1sI1VOUEFDSyI+PGNvZGU+VU5QQUNLPC9jb2RlPjwvYT46IDxsaT48YSBocmVmPSJWRVJJRlkuaHRtbCNWRVJJRlkiPjxjb2RlPlZFUklGWTwvY29kZT48L2E+OiA8bGk+PGEgaHJlZj0iWE9SLmh0bWwjWE9SIj48Y29kZT5YT1I8L2NvZGU+PC9hPjogPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludHJpbnNpYy1UeXBlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludHJpbnNpYy1UeXBlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDFjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50cmluc2ljLVR5cGVzLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW50cmluc2ljIFR5cGVzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludGVyb3BlcmFiaWxpdHktd2l0aC1DLmh0bWwjSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMiIHRpdGxlPSJJbnRlcm9wZXJhYmlsaXR5IHdpdGggQyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRlcml2ZWQtVHlwZXMtYW5kLXN0cnVjdC5odG1sI0Rlcml2ZWQtVHlwZXMtYW5kLXN0cnVjdCIgdGl0bGU9IkRlcml2ZWQgVHlwZXMgYW5kIHN0cnVjdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnRyaW5zaWMtVHlwZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGVyaXZlZC1UeXBlcy1hbmQtc3RydWN0Lmh0bWwjRGVyaXZlZC1UeXBlcy1hbmQtc3RydWN0Ij5EZXJpdmVkIFR5cGVzIGFuZCBzdHJ1Y3Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQy5odG1sI0ludGVyb3BlcmFiaWxpdHktd2l0aC1DIj5JbnRlcm9wZXJhYmlsaXR5IHdpdGggQzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjcuMS4xIEludHJpbnNpYyBUeXBlczwvaDQ+CisKKzxwPkluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGV4YWN0bHkgdGhlIHNhbWUgdmFyaWFibGUgdHlwZSBhbmQga2luZCBpcyB1c2VkCitpbiBDIGFuZCBGb3J0cmFuLCB0aGUgbmFtZWQgY29uc3RhbnRzIHNoYWxsIGJlIHVzZWQgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlCis8Y29kZT5JU09fQ19CSU5ESU5HPC9jb2RlPiBpbnRyaW5zaWMgbW9kdWxlLiAgVGhhdCBtb2R1bGUgY29udGFpbnMgbmFtZWQgY29uc3RhbnRzCitmb3Iga2luZCBwYXJhbWV0ZXJzIGFuZCBjaGFyYWN0ZXIgbmFtZWQgY29uc3RhbnRzIGZvciB0aGUgZXNjYXBlIHNlcXVlbmNlcworaW4gQy4gIEZvciBhIGxpc3Qgb2YgdGhlIGNvbnN0YW50cywgc2VlIDxhIGhyZWY9IklTT18wMDVmQ18wMDVmQklORElORy5odG1sI0lTT18wMDVmQ18wMDVmQklORElORyI+SVNPX0NfQklORElORzwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JbnRyb2R1Y3Rpb24tdG8tSW50cmluc2ljcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludHJvZHVjdGlvbi10by1JbnRyaW5zaWNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4ODdlYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9JbnRyb2R1Y3Rpb24tdG8tSW50cmluc2ljcy5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludHJvZHVjdGlvbiB0byBJbnRyaW5zaWNzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFCT1JULmh0bWwjQUJPUlQiIHRpdGxlPSJBQk9SVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnRyb2R1Y3Rpb24tdG8tSW50cmluc2ljcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBQk9SVC5odG1sI0FCT1JUIj5BQk9SVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xIEludHJvZHVjdGlvbiB0byBpbnRyaW5zaWMgcHJvY2VkdXJlczwvaDM+CisKKzxwPlRoZSBpbnRyaW5zaWMgcHJvY2VkdXJlcyBwcm92aWRlZCBieSBHTlUgRm9ydHJhbiBpbmNsdWRlIGFsbCBvZiB0aGUKK2ludHJpbnNpYyBwcm9jZWR1cmVzIHJlcXVpcmVkIGJ5IHRoZSBGb3J0cmFuIDk1IHN0YW5kYXJkLCBhIHNldCBvZgoraW50cmluc2ljIHByb2NlZHVyZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggRzc3LCBhbmQgYQorc2VsZWN0aW9uIG9mIGludHJpbnNpYyBwcm9jZWR1cmVzIGZyb20gdGhlIEZvcnRyYW4gMjAwMyBhbmQgRm9ydHJhbiAyMDA4CitzdGFuZGFyZHMuICBBbnkgY29uZmxpY3QgYmV0d2VlbiBhIGRlc2NyaXB0aW9uIGhlcmUgYW5kIGEgZGVzY3JpcHRpb24gaW4KK2VpdGhlciB0aGUgRm9ydHJhbiA5NSBzdGFuZGFyZCwgdGhlIEZvcnRyYW4gMjAwMyBzdGFuZGFyZCBvciB0aGUgRm9ydHJhbgorMjAwOCBzdGFuZGFyZCBpcyB1bmludGVudGlvbmFsLCBhbmQgdGhlIHN0YW5kYXJkKHMpIHNob3VsZCBiZSBjb25zaWRlcmVkCithdXRob3JpdGF0aXZlLgorCisgICA8cD5UaGUgZW51bWVyYXRpb24gb2YgdGhlIDxjb2RlPktJTkQ8L2NvZGU+IHR5cGUgcGFyYW1ldGVyIGlzIHByb2Nlc3NvciBkZWZpbmVkIGluCit0aGUgRm9ydHJhbiA5NSBzdGFuZGFyZC4gIEdOVSBGb3J0cmFuIGRlZmluZXMgdGhlIGRlZmF1bHQgaW50ZWdlciB0eXBlIGFuZAorZGVmYXVsdCByZWFsIHR5cGUgYnkgPGNvZGU+SU5URUdFUihLSU5EPTQpPC9jb2RlPiBhbmQgPGNvZGU+UkVBTChLSU5EPTQpPC9jb2RlPiwKK3Jlc3BlY3RpdmVseS4gIFRoZSBzdGFuZGFyZCBtYW5kYXRlcyB0aGF0IGJvdGggZGF0YSB0eXBlcyBzaGFsbCBoYXZlCithbm90aGVyIGtpbmQsIHdoaWNoIGhhdmUgbW9yZSBwcmVjaXNpb24uICBPbiB0eXBpY2FsIHRhcmdldCBhcmNoaXRlY3R1cmVzCitzdXBwb3J0ZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4sIHRoaXMga2luZCB0eXBlIHBhcmFtZXRlciBpcyA8Y29kZT5LSU5EPTg8L2NvZGU+LiAKK0hlbmNlLCA8Y29kZT5SRUFMKEtJTkQ9OCk8L2NvZGU+IGFuZCA8Y29kZT5ET1VCTEUgUFJFQ0lTSU9OPC9jb2RlPiBhcmUgZXF1aXZhbGVudC4gCitJbiB0aGUgZGVzY3JpcHRpb24gb2YgZ2VuZXJpYyBpbnRyaW5zaWMgcHJvY2VkdXJlcywgdGhlIGtpbmQgdHlwZSBwYXJhbWV0ZXIKK3dpbGwgYmUgc3BlY2lmaWVkIGJ5IDxjb2RlPktJTkQ9KjwvY29kZT4sIGFuZCBpbiB0aGUgZGVzY3JpcHRpb24gb2Ygc3BlY2lmaWMKK25hbWVzIGZvciBhbiBpbnRyaW5zaWMgcHJvY2VkdXJlIHRoZSBraW5kIHR5cGUgcGFyYW1ldGVyIHdpbGwgYmUgZXhwbGljaXRseQorZ2l2ZW4gKGUuZy4sIDxjb2RlPlJFQUwoS0lORD00KTwvY29kZT4gb3IgPGNvZGU+UkVBTChLSU5EPTgpPC9jb2RlPikuICBGaW5hbGx5LCBmb3IKK2JyZXZpdHkgdGhlIG9wdGlvbmFsIDxjb2RlPktJTkQ9PC9jb2RlPiBzeW50YXggd2lsbCBiZSBvbWl0dGVkLgorCisgICA8cD5NYW55IG9mIHRoZSBpbnRyaW5zaWMgcHJvY2VkdXJlcyB0YWtlIG9uZSBvciBtb3JlIG9wdGlvbmFsIGFyZ3VtZW50cy4gCitUaGlzIGRvY3VtZW50IGZvbGxvd3MgdGhlIGNvbnZlbnRpb24gdXNlZCBpbiB0aGUgRm9ydHJhbiA5NSBzdGFuZGFyZCwKK2FuZCBkZW5vdGVzIHN1Y2ggYXJndW1lbnRzIGJ5IHNxdWFyZSBicmFja2V0cy4KKworICAgPHA+R05VIEZvcnRyYW4gb2ZmZXJzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWY5NTwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc3RkPWdudTwvc3Bhbj48L3NhbXA+IG9wdGlvbnMsCit3aGljaCBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUgc2V0IG9mIGludHJpbnNpYyBwcm9jZWR1cmVzIHRvIGEKK2dpdmVuIHN0YW5kYXJkLiAgQnkgZGVmYXVsdCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gc2V0cyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXN0ZD1nbnU8L3NwYW4+PC9zYW1wPgorb3B0aW9uLCBhbmQgc28gYWxsIGludHJpbnNpYyBwcm9jZWR1cmVzIGRlc2NyaWJlZCBoZXJlIGFyZSBhY2NlcHRlZC4gIFRoZXJlCitpcyBvbmUgY2F2ZWF0LiAgRm9yIGEgc2VsZWN0IGdyb3VwIG9mIGludHJpbnNpYyBwcm9jZWR1cmVzLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Zzc3PC9zcGFuPjwvc2FtcD4KK2ltcGxlbWVudGVkIGJvdGggYSBmdW5jdGlvbiBhbmQgYSBzdWJyb3V0aW5lLiAgQm90aCBjbGFzc2VzCitoYXZlIGJlZW4gaW1wbGVtZW50ZWQgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Cit3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPi4gIEl0IGlzIG5vdGVkIGhlcmUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYW5kIHN1YnJvdXRpbmVzCitjYW5ub3QgYmUgaW50ZXJtaXhlZCBpbiBhIGdpdmVuIHN1YnByb2dyYW0uICBJbiB0aGUgZGVzY3JpcHRpb25zIHRoYXQgZm9sbG93LAordGhlIGFwcGxpY2FibGUgc3RhbmRhcmQgZm9yIGVhY2ggaW50cmluc2ljIHByb2NlZHVyZSBpcyBub3RlZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludHJvZHVjdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludHJvZHVjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZDM2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW50cm9kdWN0aW9uLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW50cm9kdWN0aW9uIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaW5kZXguaHRtbCNUb3AiIHRpdGxlPSJUb3AiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnZva2luZy1HTlUtRm9ydHJhbi5odG1sI0ludm9raW5nLUdOVS1Gb3J0cmFuIiB0aXRsZT0iSW52b2tpbmcgR05VIEZvcnRyYW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iPkludm9raW5nIEdOVSBGb3J0cmFuPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xIEludHJvZHVjdGlvbjwvaDI+CisKKzwhLS0gVGhlIGZvbGxvd2luZyBkdXBsaWNhdGVzIHRoZSB0ZXh0IG9uIHRoZSBUZXhJbmZvIHRhYmxlIG9mIGNvbnRlbnRzLiAtLT4KKzxwPlRoZSBHTlUgRm9ydHJhbiBjb21waWxlciBmcm9udCBlbmQgd2FzCitkZXNpZ25lZCBpbml0aWFsbHkgYXMgYSBmcmVlIHJlcGxhY2VtZW50IGZvciwKK29yIGFsdGVybmF0aXZlIHRvLCB0aGUgVW5peCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Zjk1PC9zcGFuPjwvc2FtcD4gY29tbWFuZDsKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGlzIHRoZSBjb21tYW5kIHlvdSB3aWxsIHVzZSB0byBpbnZva2UgdGhlIGNvbXBpbGVyLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQWJvdXQtR05VLUZvcnRyYW4uaHRtbCNBYm91dC1HTlUtRm9ydHJhbiI+QWJvdXQgR05VIEZvcnRyYW48L2E+OiAgICAgV2hhdCB5b3Ugc2hvdWxkIGtub3cgYWJvdXQgdGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVyLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HQ0MuaHRtbCNHTlUtRm9ydHJhbi1hbmQtR0NDIj5HTlUgRm9ydHJhbiBhbmQgR0NDPC9hPjogICBZb3UgY2FuIGNvbXBpbGUgRm9ydHJhbiwgQywgb3Igb3RoZXIgcHJvZ3JhbXMuIAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiI+UHJlcHJvY2Vzc2luZyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb248L2E+OiAgVGhlIEZvcnRyYW4gcHJlcHJvY2Vzc29yCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJHTlUtRm9ydHJhbi1hbmQtRzc3Lmh0bWwjR05VLUZvcnRyYW4tYW5kLUc3NyI+R05VIEZvcnRyYW4gYW5kIEc3NzwvYT46ICAgV2h5IHdlIGNob3NlIHRvIHN0YXJ0IGZyb20gc2NyYXRjaC4gCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJQcm9qZWN0LVN0YXR1cy5odG1sI1Byb2plY3QtU3RhdHVzIj5Qcm9qZWN0IFN0YXR1czwvYT46ICAgICAgICBTdGF0dXMgb2YgR05VIEZvcnRyYW4sIHJvYWRtYXAsIHByb3Bvc2VkIGV4dGVuc2lvbnMuIAorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+OiAgICAgICAgICAgICBTdGFuZGFyZHMgc3VwcG9ydGVkIGJ5IEdOVSBGb3J0cmFuLiAKKzwvdWw+CisKKzwhLS0gIC0tPgorPCEtLSBBYm91dCBHTlUgRm9ydHJhbiAtLT4KKzwhLS0gIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTA0YmIyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0ludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwKQEAgLTAsMCArMSw5OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW52b2tpbmcgR05VIEZvcnRyYW4gLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iIHRpdGxlPSJJbnRyb2R1Y3Rpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSdW50aW1lLmh0bWwjUnVudGltZSIgdGl0bGU9IlJ1bnRpbWUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW52b2tpbmctR05VLUZvcnRyYW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4yIEdOVSBGb3J0cmFuIENvbW1hbmQgT3B0aW9uczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LUdOVS1Gb3J0cmFuLWNvbW1hbmQtb3B0aW9ucy0xNSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbW1hbmQtb3B0aW9ucy0xNiI+PC9hPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1fMDA0MGNvbW1hbmRfMDA3Ymdmb3J0cmFuXzAwN2QtY29tbWFuZC0xNyI+PC9hPgorPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+CisKKyAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiBjb21tYW5kIHN1cHBvcnRzIGFsbCB0aGUgb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gY29tbWFuZC4gIE9ubHkgb3B0aW9ucyBzcGVjaWZpYyB0byBHTlUgRm9ydHJhbiBhcmUgZG9jdW1lbnRlZAoraGVyZS4KKworICAgPHA+U2VlIDxhIGhyZWY9Ii4uL2djYy9JbnZva2luZy1HQ0MuaHRtbCNJbnZva2luZy1HQ0MiPkdDQyBDb21tYW5kIE9wdGlvbnM8L2E+LCBmb3IgaW5mb3JtYXRpb24KK29uIHRoZSBub24tRm9ydHJhbi1zcGVjaWZpYyBhc3BlY3RzIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gY29tbWFuZCAoYW5kLAordGhlcmVmb3JlLCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gY29tbWFuZCkuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1uZWdhdGl2ZS1mb3Jtcy0xOCI+PC9hPkFsbCBHQ0MgYW5kIEdOVSBGb3J0cmFuIG9wdGlvbnMKK2FyZSBhY2NlcHRlZCBib3RoIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGFuZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4KKyhhcyB3ZWxsIGFzIGFueSBvdGhlciBkcml2ZXJzIGJ1aWx0IGF0IHRoZSBzYW1lIHRpbWUsCitzdWNoIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nKys8L3NwYW4+PC9zYW1wPiksCitzaW5jZSBhZGRpbmcgR05VIEZvcnRyYW4gdG8gdGhlIEdDQyBkaXN0cmlidXRpb24KK2VuYWJsZXMgYWNjZXB0YW5jZSBvZiBHTlUgRm9ydHJhbiBvcHRpb25zCitieSBhbGwgb2YgdGhlIHJlbGV2YW50IGRyaXZlcnMuCisKKyAgIDxwPkluIHNvbWUgY2FzZXMsIG9wdGlvbnMgaGF2ZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXM7Cit0aGUgbmVnYXRpdmUgZm9ybSBvZiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZvbzwvc3Bhbj48L3NhbXA+IHdvdWxkIGJlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tZm9vPC9zcGFuPjwvc2FtcD4uIAorVGhpcyBtYW51YWwgZG9jdW1lbnRzIG9ubHkgb25lIG9mIHRoZXNlIHR3byBmb3Jtcywgd2hpY2hldmVyCitvbmUgaXMgbm90IHRoZSBkZWZhdWx0LiAKKzwhLS0gbWFuIGVuZCAtLT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik9wdGlvbi1TdW1tYXJ5Lmh0bWwjT3B0aW9uLVN1bW1hcnkiPk9wdGlvbiBTdW1tYXJ5PC9hPjogICAgICAgQnJpZWYgbGlzdCBvZiBhbGwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgZXhwbGFuYXRpb25zLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjogICBDb250cm9sbGluZyB0aGUgdmFyaWFudCBvZiBGb3J0cmFuIGxhbmd1YWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjogICBFbmFibGUgYW5kIGN1c3RvbWl6ZSBwcmVwcm9jZXNzaW5nLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjogICAgICBIb3cgcGlja3kgc2hvdWxkIHRoZSBjb21waWxlciBiZT8gCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT46ICAgIFN5bWJvbCB0YWJsZXMsIG1lYXN1cmVtZW50cywgYW5kIGRlYnVnZ2luZyBkdW1wcy4gCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT46ICAgIFdoZXJlIHRvIGZpbmQgbW9kdWxlIGZpbGVzCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9ucyA8L2E+OiAgICAgICAgSW5mbHVlbmNpbmcgdGhlIGxpbmtpbmcgc3RlcAorPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iUnVudGltZS1PcHRpb25zLmh0bWwjUnVudGltZS1PcHRpb25zIj5SdW50aW1lIE9wdGlvbnM8L2E+OiAgICAgIEluZmx1ZW5jaW5nIHJ1bnRpbWUgYmVoYXZpb3IKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjogICAgIFNwZWNpZnlpbmcgY29udmVudGlvbnMgZm9yIGZ1bmN0aW9uIGNhbGxzLCBkYXRhIGxheW91dAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlZ2lzdGVyIHVzYWdlLiAKKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNFbnZpcm9ubWVudC1WYXJpYWJsZXMiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT46ICBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4uIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0tJTEwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9LSUxMLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzNjBiMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9LSUxMLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+S0lMTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJVElNRS5odG1sI0lUSU1FIiB0aXRsZT0iSVRJTUUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJLSU5ELmh0bWwjS0lORCIgdGl0bGU9IktJTkQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iS0lMTCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJLSU5ELmh0bWwjS0lORCI+S0lORDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklUSU1FLmh0bWwjSVRJTUUiPklUSU1FPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEzOSA8Y29kZT5LSUxMPC9jb2RlPiAmbWRhc2g7IFNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtS0lMTC03ODMiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+Ojxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPlNlbmRzIHRoZSBzaWduYWwgc3BlY2lmaWVkIGJ5IDx2YXI+U0lHTkFMPC92YXI+IHRvIHRoZSBwcm9jZXNzIDx2YXI+UElEPC92YXI+LiAKK1NlZSA8Y29kZT5raWxsKDIpPC9jb2RlPi4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOyBob3dldmVyLAorb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+Q0FMTCBLSUxMKEMsIFZBTFVFIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gS0lMTChDLCBWQUxVRSk8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+LCB3aXRoCis8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5WQUxVRTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgPGNvZGU+SU5URUdFUjwvY29kZT4sIHdpdGgKKzxjb2RlPklOVEVOVChJTik8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzdGF0dXMgZmxhZyBvZiB0eXBlIDxjb2RlPklOVEVHRVIoNCk8L2NvZGU+IG9yCis8Y29kZT5JTlRFR0VSKDgpPC9jb2RlPi4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgc3lzdGVtLXNwZWNpZmljIGVycm9yIGNvZGUKK290aGVyd2lzZS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkFCT1JULmh0bWwjQUJPUlQiPkFCT1JUPC9hPiwgPGEgaHJlZj0iRVhJVC5odG1sI0VYSVQiPkVYSVQ8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vS0lORC1UeXBlLVBhcmFtZXRlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9LSU5ELVR5cGUtUGFyYW1ldGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mzc0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vS0lORC1UeXBlLVBhcmFtZXRlcnMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5LSU5EIFR5cGUgUGFyYW1ldGVycyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbCNDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MiIHRpdGxlPSJDb21waWxlciBDaGFyYWN0ZXJpc3RpY3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcy5odG1sI0ludGVybmFsLXJlcHJlc2VudGF0aW9uLW9mLUxPR0lDQUwtdmFyaWFibGVzIiB0aXRsZT0iSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgTE9HSUNBTCB2YXJpYWJsZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iS0lORC1UeXBlLVBhcmFtZXRlcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW50ZXJuYWwtcmVwcmVzZW50YXRpb24tb2YtTE9HSUNBTC12YXJpYWJsZXMuaHRtbCNJbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcyI+SW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgTE9HSUNBTCB2YXJpYWJsZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MuaHRtbCNDb21waWxlci1DaGFyYWN0ZXJpc3RpY3MiPkNvbXBpbGVyIENoYXJhY3RlcmlzdGljczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMSBLSU5EIFR5cGUgUGFyYW1ldGVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWtpbmQtMzI1Ij48L2E+CitUaGUgPGNvZGU+S0lORDwvY29kZT4gdHlwZSBwYXJhbWV0ZXJzIHN1cHBvcnRlZCBieSBHTlUgRm9ydHJhbiBmb3IgdGhlIHByaW1pdGl2ZQorZGF0YSB0eXBlcyBhcmU6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPklOVEVHRVI8L2NvZGU+PGRkPjEsIDIsIDQsIDgqLCAxNiosIGRlZmF1bHQ6IDQgKDEpCisKKyAgICAgPGJyPjxkdD48Y29kZT5MT0dJQ0FMPC9jb2RlPjxkZD4xLCAyLCA0LCA4KiwgMTYqLCBkZWZhdWx0OiA0ICgxKQorCisgICAgIDxicj48ZHQ+PGNvZGU+UkVBTDwvY29kZT48ZGQ+NCwgOCwgMTAqLCAxNiosIGRlZmF1bHQ6IDQgKDIpCisKKyAgICAgPGJyPjxkdD48Y29kZT5DT01QTEVYPC9jb2RlPjxkZD40LCA4LCAxMCosIDE2KiwgZGVmYXVsdDogNCAoMikKKworICAgICA8YnI+PGR0Pjxjb2RlPkNIQVJBQ1RFUjwvY29kZT48ZGQ+MSwgNCwgZGVmYXVsdDogMQorCisgICA8L2RsPgorCis8cCBjbGFzcz0ibm9pbmRlbnQiPiogPSBub3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zIDxicj4KKygxKSBVbmxlc3MgLWZkZWZhdWx0LWludGVnZXItOCBpcyB1c2VkIDxicj4KKygyKSBVbmxlc3MgLWZkZWZhdWx0LXJlYWwtOCBpcyB1c2VkCisKKzxwIGNsYXNzPSJub2luZGVudCI+VGhlIDxjb2RlPktJTkQ8L2NvZGU+IHZhbHVlIG1hdGNoZXMgdGhlIHN0b3JhZ2Ugc2l6ZSBpbiBieXRlcywgZXhjZXB0IGZvcgorPGNvZGU+Q09NUExFWDwvY29kZT4gd2hlcmUgdGhlIHN0b3JhZ2Ugc2l6ZSBpcyB0d2ljZSBhcyBtdWNoIChvciBib3RoIHJlYWwgYW5kCitpbWFnaW5hcnkgcGFydCBhcmUgYSByZWFsIHZhbHVlIG9mIHRoZSBnaXZlbiBzaXplKS4gIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZQordGhlIDxjb2RlPlNFTEVDVEVEX0NIQVJfS0lORDwvY29kZT4sIDxjb2RlPlNFTEVDVEVEX0lOVF9LSU5EPC9jb2RlPiBhbmQKKzxjb2RlPlNFTEVDVEVEX1JFQUxfS0lORDwvY29kZT4gaW50cmluc2ljcyBvciB0aGUgPGNvZGU+SU5UODwvY29kZT4sIDxjb2RlPklOVDE2PC9jb2RlPiwKKzxjb2RlPklOVDMyPC9jb2RlPiwgPGNvZGU+SU5UNjQ8L2NvZGU+LCA8Y29kZT5SRUFMMzI8L2NvZGU+LCA8Y29kZT5SRUFMNjQ8L2NvZGU+LCBhbmQgPGNvZGU+UkVBTDEyODwvY29kZT4KK3BhcmFtZXRlcnMgb2YgdGhlIDxjb2RlPklTT19GT1JUUkFOX0VOVjwvY29kZT4gbW9kdWxlIGluc3RlYWQgb2YgdGhlIGNvbmNyZXRlIHZhbHVlcy4gCitUaGUgYXZhaWxhYmxlIGtpbmQgcGFyYW1ldGVycyBjYW4gYmUgZm91bmQgaW4gdGhlIGNvbnN0YW50IGFycmF5cworPGNvZGU+Q0hBUkFDVEVSX0tJTkRTPC9jb2RlPiwgPGNvZGU+SU5URUdFUl9LSU5EUzwvY29kZT4sIDxjb2RlPkxPR0lDQUxfS0lORFM8L2NvZGU+IGFuZAorPGNvZGU+UkVBTF9LSU5EUzwvY29kZT4gaW4gdGhlIDxjb2RlPklTT19GT1JUUkFOX0VOVjwvY29kZT4gbW9kdWxlCisoc2VlIDxhIGhyZWY9IklTT18wMDVmRk9SVFJBTl8wMDVmRU5WLmh0bWwjSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlYiPklTT19GT1JUUkFOX0VOVjwvYT4pLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vS0lORC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0tJTkQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODc3MmFjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0tJTkQuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5LSU5EIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IktJTEwuaHRtbCNLSUxMIiB0aXRsZT0iS0lMTCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxCT1VORC5odG1sI0xCT1VORCIgdGl0bGU9IkxCT1VORCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJLSU5EIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxCT1VORC5odG1sI0xCT1VORCI+TEJPVU5EPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iS0lMTC5odG1sI0tJTEwiPktJTEw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTQwIDxjb2RlPktJTkQ8L2NvZGU+ICZtZGFzaDsgS2luZCBvZiBhbiBlbnRpdHk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1LSU5ELTc4NCI+PC9hPjxhIG5hbWU9ImluZGV4LWtpbmQtNzg1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+S0lORChYKTwvY29kZT4gcmV0dXJucyB0aGUga2luZCB2YWx1ZSBvZiB0aGUgZW50aXR5IDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+SyA9IEtJTkQoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+LCA8Y29kZT5JTlRFR0VSPC9jb2RlPiwKKzxjb2RlPlJFQUw8L2NvZGU+LCA8Y29kZT5DT01QTEVYPC9jb2RlPiBvciA8Y29kZT5DSEFSQUNURVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YgdGhlIGRlZmF1bHQKK2ludGVnZXIga2luZC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3Rfa2luZAorICAgICAgICAgICAgaW50ZWdlcixwYXJhbWV0ZXIgOjoga2MgPSBraW5kKCcgJykKKyAgICAgICAgICAgIGludGVnZXIscGFyYW1ldGVyIDo6IGtsID0ga2luZCgudHJ1ZS4pCisgICAgICAgICAgCisgICAgICAgICAgICBwcmludCAqLCAiVGhlIGRlZmF1bHQgY2hhcmFjdGVyIGtpbmQgaXMgIiwga2MKKyAgICAgICAgICAgIHByaW50ICosICJUaGUgZGVmYXVsdCBsb2dpY2FsIGtpbmQgaXMgIiwga2wKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2tpbmQKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vS2V5d29yZC1JbmRleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0tleXdvcmQtSW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQxZjdhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0tleXdvcmQtSW5kZXguaHRtbApAQCAtMCwwICsxLDEwNDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPktleXdvcmQgSW5kZXggLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcHRpb24tSW5kZXguaHRtbCNPcHRpb24tSW5kZXgiIHRpdGxlPSJPcHRpb24gSW5kZXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iS2V5d29yZC1JbmRleCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9wdGlvbi1JbmRleC5odG1sI09wdGlvbi1JbmRleCI+T3B0aW9uIEluZGV4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPktleXdvcmQgSW5kZXg8L2gyPgorCisKKworPHVsIGNsYXNzPSJpbmRleC1jcCIgY29tcGFjdD4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiXzAwMjRfMDA3ZC0zNCI+PGNvZGU+JDwvY29kZT48L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50LWxpc3QtZnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNUxPQ18wMDdkLTM0NyI+PGNvZGU+JUxPQzwvY29kZT48L2E+OiA8YSBocmVmPSJBcmd1bWVudC1saXN0LWZ1bmN0aW9ucy5odG1sI0FyZ3VtZW50LWxpc3QtZnVuY3Rpb25zIj5Bcmd1bWVudCBsaXN0IGZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50LWxpc3QtZnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNVJFRl8wMDdkLTM0NiI+PGNvZGU+JVJFRjwvY29kZT48L2E+OiA8YSBocmVmPSJBcmd1bWVudC1saXN0LWZ1bmN0aW9ucy5odG1sI0FyZ3VtZW50LWxpc3QtZnVuY3Rpb25zIj5Bcmd1bWVudCBsaXN0IGZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50LWxpc3QtZnVuY3Rpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JfMDAyNVZBTF8wMDdkLTM0NSI+PGNvZGU+JVZBTDwvY29kZT48L2E+OiA8YSBocmVmPSJBcmd1bWVudC1saXN0LWZ1bmN0aW9ucy5odG1sI0FyZ3VtZW50LWxpc3QtZnVuY3Rpb25zIj5Bcmd1bWVudCBsaXN0IGZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDI2XzAwN2QtMTM3Ij48Y29kZT4mYW1wOzwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yl8wMDViXzAwMmVfMDAyZV8wMDJlXzAwNWRfMDA3ZC0yOTgiPjxjb2RlPlsuLi5dPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZhcmdzLmh0bWwjaW5kZXgtZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZhcmdzLTM1NyI+PGNvZGU+X2dmb3J0cmFuX3NldF9hcmdzPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncy5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncyI+X2dmb3J0cmFuX3NldF9hcmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZjb252ZXJ0Lmh0bWwjaW5kZXgtZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZjb252ZXJ0LTM2MSI+PGNvZGU+X2dmb3J0cmFuX3NldF9jb252ZXJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydC5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydCI+X2dmb3J0cmFuX3NldF9jb252ZXJ0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUuaHRtbCNpbmRleC1nX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmZwZS0zNjUiPjxjb2RlPl9nZm9ydHJhbl9zZXRfZnBlPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmZnBlLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUiPl9nZm9ydHJhbl9zZXRfZnBlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLmh0bWwjaW5kZXgtZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLTM2NyI+PGNvZGU+X2dmb3J0cmFuX3NldF9tYXhfc3VicmVjb3JkX2xlbmd0aDwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm1heF8wMDVmc3VicmVjb3JkXzAwNWZsZW5ndGguaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm1heF8wMDVmc3VicmVjb3JkXzAwNWZsZW5ndGgiPl9nZm9ydHJhbl9zZXRfbWF4X3N1YnJlY29yZF9sZW5ndGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMtMzU5Ij48Y29kZT5fZ2ZvcnRyYW5fc2V0X29wdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZvcHRpb25zLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZvcHRpb25zIj5fZ2ZvcnRyYW5fc2V0X29wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyLmh0bWwjaW5kZXgtZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZyZWNvcmRfMDA1Zm1hcmtlci0zNjMiPjxjb2RlPl9nZm9ydHJhbl9zZXRfcmVjb3JkX21hcmtlcjwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZyZWNvcmRfMDA1Zm1hcmtlciI+X2dmb3J0cmFuX3NldF9yZWNvcmRfbWFya2VyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUJPUlQuaHRtbCNpbmRleC1BQk9SVC0zNzAiPjxjb2RlPkFCT1JUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFCT1JULmh0bWwjQUJPUlQiPkFCT1JUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUJTLmh0bWwjaW5kZXgtQUJTLTM3NCI+PGNvZGU+QUJTPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFCUy5odG1sI0FCUyI+QUJTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUJTLmh0bWwjaW5kZXgtYWJzb2x1dGUtdmFsdWUtMzgwIj5hYnNvbHV0ZSB2YWx1ZTwvYT46IDxhIGhyZWY9IkFCUy5odG1sI0FCUyI+QUJTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUNDRVNTLmh0bWwjaW5kZXgtQUNDRVNTLTM4MSI+PGNvZGU+QUNDRVNTPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFDQ0VTUy5odG1sI0FDQ0VTUyI+QUNDRVNTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiQUNDRVNTXzAwM2RfMDAyN1NUUkVBTV8wMDI3XzAwN2QtSV8wMDJmTy0zMTIiPjxjb2RlPkFDQ0VTUz0nU1RSRUFNJzwvY29kZT4gSS9PPC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQ0hBUi5odG1sI2luZGV4LUFDSEFSLTM4MyI+PGNvZGU+QUNIQVI8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUNIQVIuaHRtbCNBQ0hBUiI+QUNIQVI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQ09TLmh0bWwjaW5kZXgtQUNPUy0zODYiPjxjb2RlPkFDT1M8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUNPUy5odG1sI0FDT1MiPkFDT1M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQ09TSC5odG1sI2luZGV4LUFDT1NILTM5MCI+PGNvZGU+QUNPU0g8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUNPU0guaHRtbCNBQ09TSCI+QUNPU0g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBREpVU1RSLmh0bWwjaW5kZXgtYWRqdXN0LXN0cmluZy00MDEiPmFkanVzdCBzdHJpbmc8L2E+OiA8YSBocmVmPSJBREpVU1RSLmh0bWwjQURKVVNUUiI+QURKVVNUUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFESlVTVEwuaHRtbCNpbmRleC1hZGp1c3Qtc3RyaW5nLTM5OCI+YWRqdXN0IHN0cmluZzwvYT46IDxhIGhyZWY9IkFESlVTVEwuaHRtbCNBREpVU1RMIj5BREpVU1RMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQURKVVNUTC5odG1sI2luZGV4LUFESlVTVEwtMzk2Ij48Y29kZT5BREpVU1RMPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFESlVTVEwuaHRtbCNBREpVU1RMIj5BREpVU1RMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQURKVVNUUi5odG1sI2luZGV4LUFESlVTVFItMzk5Ij48Y29kZT5BREpVU1RSPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFESlVTVFIuaHRtbCNBREpVU1RSIj5BREpVU1RSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUlNQUcuaHRtbCNpbmRleC1BSU1BRy00MDIiPjxjb2RlPkFJTUFHPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFJTUFHLmh0bWwjQUlNQUciPkFJTUFHPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUlOVC5odG1sI2luZGV4LUFJTlQtNDA3Ij48Y29kZT5BSU5UPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFJTlQuaHRtbCNBSU5UIj5BSU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUxBUk0uaHRtbCNpbmRleC1BTEFSTS00MTEiPjxjb2RlPkFMQVJNPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFMQVJNLmh0bWwjQUxBUk0iPkFMQVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HXzAwNWZHQU1NQS5odG1sI2luZGV4LUFMR0FNQS04MzIiPjxjb2RlPkFMR0FNQTwvY29kZT48L2E+OiA8YSBocmVmPSJMT0dfMDA1ZkdBTU1BLmh0bWwjTE9HXzAwNWZHQU1NQSI+TE9HX0dBTU1BPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWFsaWFzaW5nLTEzMyI+YWxpYXNpbmc8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1hbGlnbm1lbnQtb2YtXzAwNDBjb2RlXzAwN2JDT01NT05fMDA3ZC1ibG9ja3MtMjg2Ij5hbGlnbm1lbnQgb2YgPGNvZGU+Q09NTU9OPC9jb2RlPiBibG9ja3M8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1hbGlnbm1lbnQtb2YtXzAwNDBjb2RlXzAwN2JDT01NT05fMDA3ZC1ibG9ja3MtMTg0Ij5hbGlnbm1lbnQgb2YgPGNvZGU+Q09NTU9OPC9jb2RlPiBibG9ja3M8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFMTC5odG1sI2luZGV4LUFMTC00MTMiPjxjb2RlPkFMTDwvY29kZT48L2E+OiA8YSBocmVmPSJBTEwuaHRtbCNBTEwiPkFMTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1hbGwtd2FybmluZ3MtMTMwIj5hbGwgd2FybmluZ3M8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkFMTE9DQVRBQkxFXzAwN2QtY29tcG9uZW50cy1vZi1kZXJpdmVkLXR5cGVzLTMxMCI+PGNvZGU+QUxMT0NBVEFCTEU8L2NvZGU+IGNvbXBvbmVudHMgb2YgZGVyaXZlZCB0eXBlczwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiQUxMT0NBVEFCTEVfMDA3ZC1kdW1teS1hcmd1bWVudHMtMzA4Ij48Y29kZT5BTExPQ0FUQUJMRTwvY29kZT4gZHVtbXkgYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBTExPQ0FUQUJMRV8wMDdkLWZ1bmN0aW9uLXJlc3VsdHMtMzA5Ij48Y29kZT5BTExPQ0FUQUJMRTwvY29kZT4gZnVuY3Rpb24gcmVzdWx0czwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUxMT0NBVEVELmh0bWwjaW5kZXgtQUxMT0NBVEVELTQxNiI+PGNvZGU+QUxMT0NBVEVEPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFMTE9DQVRFRC5odG1sI0FMTE9DQVRFRCI+QUxMT0NBVEVEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU9WRV8wMDVmQUxMT0MuaHRtbCNpbmRleC1hbGxvY2F0aW9uXzAwMmMtbW92aW5nLTkwMyI+YWxsb2NhdGlvbiwgbW92aW5nPC9hPjogPGEgaHJlZj0iTU9WRV8wMDVmQUxMT0MuaHRtbCNNT1ZFXzAwNWZBTExPQyI+TU9WRV9BTExPQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFMTE9DQVRFRC5odG1sI2luZGV4LWFsbG9jYXRpb25fMDAyYy1zdGF0dXMtNDE3Ij5hbGxvY2F0aW9uLCBzdGF0dXM8L2E+OiA8YSBocmVmPSJBTExPQ0FURUQuaHRtbCNBTExPQ0FURUQiPkFMTE9DQVRFRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxPRy5odG1sI2luZGV4LUFMT0ctODE2Ij48Y29kZT5BTE9HPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxPRy5odG1sI0xPRyI+TE9HPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HMTAuaHRtbCNpbmRleC1BTE9HMTAtODI1Ij48Y29kZT5BTE9HMTA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE9HMTAuaHRtbCNMT0cxMCI+TE9HMTA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQVguaHRtbCNpbmRleC1BTUFYMC04NTYiPjxjb2RlPkFNQVgwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1BWC5odG1sI01BWCI+TUFYPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFYLmh0bWwjaW5kZXgtQU1BWDEtODU4Ij48Y29kZT5BTUFYMTwvY29kZT48L2E+OiA8YSBocmVmPSJNQVguaHRtbCNNQVgiPk1BWDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JTi5odG1sI2luZGV4LUFNSU4wLTg4MSI+PGNvZGU+QU1JTjA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlOLmh0bWwjTUlOIj5NSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSU4uaHRtbCNpbmRleC1BTUlOMS04ODMiPjxjb2RlPkFNSU4xPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JTi5odG1sI01JTiI+TUlOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU9ELmh0bWwjaW5kZXgtQU1PRC04OTQiPjxjb2RlPkFNT0Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iTU9ELmh0bWwjTU9EIj5NT0Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBTkQuaHRtbCNpbmRleC1BTkQtNDE4Ij48Y29kZT5BTkQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQU5ELmh0bWwjQU5EIj5BTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBTklOVC5odG1sI2luZGV4LUFOSU5ULTQyMSI+PGNvZGU+QU5JTlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQU5JTlQuaHRtbCNBTklOVCI+QU5JTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBTlkuaHRtbCNpbmRleC1BTlktNDI1Ij48Y29kZT5BTlk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQU5ZLmh0bWwjQU5ZIj5BTlk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQ09TSC5odG1sI2luZGV4LWFyZWEtaHlwZXJib2xpYy1jb3NpbmUtMzkyIj5hcmVhIGh5cGVyYm9saWMgY29zaW5lPC9hPjogPGEgaHJlZj0iQUNPU0guaHRtbCNBQ09TSCI+QUNPU0g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBU0lOSC5odG1sI2luZGV4LWFyZWEtaHlwZXJib2xpYy1zaW5lLTQzNCI+YXJlYSBoeXBlcmJvbGljIHNpbmU8L2E+OiA8YSBocmVmPSJBU0lOSC5odG1sI0FTSU5IIj5BU0lOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFUQU5ILmh0bWwjaW5kZXgtYXJlYS1oeXBlcmJvbGljLXRhbmdlbnQtNDUxIj5hcmVhIGh5cGVyYm9saWMgdGFuZ2VudDwvYT46IDxhIGhyZWY9IkFUQU5ILmh0bWwjQVRBTkgiPkFUQU5IPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXJndW1lbnQtbGlzdC1mdW5jdGlvbnMuaHRtbCNpbmRleC1hcmd1bWVudC1saXN0LWZ1bmN0aW9ucy0zNDQiPmFyZ3VtZW50IGxpc3QgZnVuY3Rpb25zPC9hPjogPGEgaHJlZj0iQXJndW1lbnQtbGlzdC1mdW5jdGlvbnMuaHRtbCNBcmd1bWVudC1saXN0LWZ1bmN0aW9ucyI+QXJndW1lbnQgbGlzdCBmdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQVJHQy5odG1sI2luZGV4LWFyZ3VtZW50c18wMDJjLXRvLXByb2dyYW0tNzI1Ij5hcmd1bWVudHMsIHRvIHByb2dyYW08L2E+OiA8YSBocmVmPSJJQVJHQy5odG1sI0lBUkdDIj5JQVJHQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQuaHRtbCNpbmRleC1hcmd1bWVudHNfMDAyYy10by1wcm9ncmFtLTY4MiI+YXJndW1lbnRzLCB0byBwcm9ncmFtPC9hPjogPGEgaHJlZj0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sI0dFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQiPkdFVF9DT01NQU5EX0FSR1VNRU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR0VUXzAwNWZDT01NQU5ELmh0bWwjaW5kZXgtYXJndW1lbnRzXzAwMmMtdG8tcHJvZ3JhbS02NzkiPmFyZ3VtZW50cywgdG8gcHJvZ3JhbTwvYT46IDxhIGhyZWY9IkdFVF8wMDVmQ09NTUFORC5odG1sI0dFVF8wMDVmQ09NTUFORCI+R0VUX0NPTU1BTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRBUkcuaHRtbCNpbmRleC1hcmd1bWVudHNfMDAyYy10by1wcm9ncmFtLTY3NiI+YXJndW1lbnRzLCB0byBwcm9ncmFtPC9hPjogPGEgaHJlZj0iR0VUQVJHLmh0bWwjR0VUQVJHIj5HRVRBUkc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQuaHRtbCNpbmRleC1hcmd1bWVudHNfMDAyYy10by1wcm9ncmFtLTUyNyI+YXJndW1lbnRzLCB0byBwcm9ncmFtPC9hPjogPGEgaHJlZj0iQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5ULmh0bWwjQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5UIj5DT01NQU5EX0FSR1VNRU5UX0NPVU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1VNLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1hZGQtZWxlbWVudHMtMTA3OCI+YXJyYXksIGFkZCBlbGVtZW50czwvYT46IDxhIGhyZWY9IlNVTS5odG1sI1NVTSI+U1VNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFMTC5odG1sI2luZGV4LWFycmF5XzAwMmMtQU5ELTcxNCI+YXJyYXksIEFORDwvYT46IDxhIGhyZWY9IklBTEwuaHRtbCNJQUxMIj5JQUxMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQU5ZLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1hcHBseS1jb25kaXRpb24tNDI2Ij5hcnJheSwgYXBwbHkgY29uZGl0aW9uPC9hPjogPGEgaHJlZj0iQU5ZLmh0bWwjQU5ZIj5BTlk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBTEwuaHRtbCNpbmRleC1hcnJheV8wMDJjLWFwcGx5LWNvbmRpdGlvbi00MTQiPmFycmF5LCBhcHBseSBjb25kaXRpb248L2E+OiA8YSBocmVmPSJBTEwuaHRtbCNBTEwiPkFMTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1hcnJheV8wMDJjLWJvdW5kcy1jaGVja2luZy0yNTgiPmFycmF5LCBib3VuZHMgY2hlY2tpbmc8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJFU0hBUEUuaHRtbCNpbmRleC1hcnJheV8wMDJjLWNoYW5nZS1kaW1lbnNpb25zLTk4NSI+YXJyYXksIGNoYW5nZSBkaW1lbnNpb25zPC9hPjogPGEgaHJlZj0iUkVTSEFQRS5odG1sI1JFU0hBUEUiPlJFU0hBUEU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNRVJHRS5odG1sI2luZGV4LWFycmF5XzAwMmMtY29tYmluZS1hcnJheXMtODc2Ij5hcnJheSwgY29tYmluZSBhcnJheXM8L2E+OiA8YSBocmVmPSJNRVJHRS5odG1sI01FUkdFIj5NRVJHRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFOWS5odG1sI2luZGV4LWFycmF5XzAwMmMtY29uZGl0aW9uLXRlc3RpbmctNDI3Ij5hcnJheSwgY29uZGl0aW9uIHRlc3Rpbmc8L2E+OiA8YSBocmVmPSJBTlkuaHRtbCNBTlkiPkFOWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFMTC5odG1sI2luZGV4LWFycmF5XzAwMmMtY29uZGl0aW9uLXRlc3RpbmctNDE1Ij5hcnJheSwgY29uZGl0aW9uIHRlc3Rpbmc8L2E+OiA8YSBocmVmPSJBTEwuaHRtbCNBTEwiPkFMTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNVTS5odG1sI2luZGV4LWFycmF5XzAwMmMtY29uZGl0aW9uYWxseS1hZGQtZWxlbWVudHMtMTA3OSI+YXJyYXksIGNvbmRpdGlvbmFsbHkgYWRkIGVsZW1lbnRzPC9hPjogPGEgaHJlZj0iU1VNLmh0bWwjU1VNIj5TVU08L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT1VOVC5odG1sI2luZGV4LWFycmF5XzAwMmMtY29uZGl0aW9uYWxseS1jb3VudC1lbGVtZW50cy01NTQiPmFycmF5LCBjb25kaXRpb25hbGx5IGNvdW50IGVsZW1lbnRzPC9hPjogPGEgaHJlZj0iQ09VTlQuaHRtbCNDT1VOVCI+Q09VTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQUk9EVUNULmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1jb25kaXRpb25hbGx5LW11bHRpcGx5LWVsZW1lbnRzLTk1NCI+YXJyYXksIGNvbmRpdGlvbmFsbHkgbXVsdGlwbHkgZWxlbWVudHM8L2E+OiA8YSBocmVmPSJQUk9EVUNULmh0bWwjUFJPRFVDVCI+UFJPRFVDVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1hcnJheV8wMDJjLWNvbnN0cnVjdG9ycy0yOTciPmFycmF5LCBjb25zdHJ1Y3RvcnM8L2E+OiA8YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLXN0YXR1cyI+Rm9ydHJhbiAyMDAzIHN0YXR1czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNJWkUuaHRtbCNpbmRleC1hcnJheV8wMDJjLWNvdW50LWVsZW1lbnRzLTEwNDkiPmFycmF5LCBjb3VudCBlbGVtZW50czwvYT46IDxhIGhyZWY9IlNJWkUuaHRtbCNTSVpFIj5TSVpFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BSRUFELmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1kdXBsaWNhdGUtZGltZW5zaW9ucy0xMDYxIj5hcnJheSwgZHVwbGljYXRlIGRpbWVuc2lvbnM8L2E+OiA8YSBocmVmPSJTUFJFQUQuaHRtbCNTUFJFQUQiPlNQUkVBRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQUkVBRC5odG1sI2luZGV4LWFycmF5XzAwMmMtZHVwbGljYXRlLWVsZW1lbnRzLTEwNjAiPmFycmF5LCBkdXBsaWNhdGUgZWxlbWVudHM8L2E+OiA8YSBocmVmPSJTUFJFQUQuaHRtbCNTUFJFQUQiPlNQUkVBRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPVU5ULmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1lbGVtZW50LWNvdW50aW5nLTU1NSI+YXJyYXksIGVsZW1lbnQgY291bnRpbmc8L2E+OiA8YSBocmVmPSJDT1VOVC5odG1sI0NPVU5UIj5DT1VOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBBQ0suaHRtbCNpbmRleC1hcnJheV8wMDJjLWdhdGhlci1lbGVtZW50cy05MzUiPmFycmF5LCBnYXRoZXIgZWxlbWVudHM8L2E+OiA8YSBocmVmPSJQQUNLLmh0bWwjUEFDSyI+UEFDSzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlVOUEFDSy5odG1sI2luZGV4LWFycmF5XzAwMmMtaW5jcmVhc2UtZGltZW5zaW9uLTExMzMiPmFycmF5LCBpbmNyZWFzZSBkaW1lbnNpb248L2E+OiA8YSBocmVmPSJVTlBBQ0suaHRtbCNVTlBBQ0siPlVOUEFDSzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQUkVBRC5odG1sI2luZGV4LWFycmF5XzAwMmMtaW5jcmVhc2UtZGltZW5zaW9uLTEwNTkiPmFycmF5LCBpbmNyZWFzZSBkaW1lbnNpb248L2E+OiA8YSBocmVmPSJTUFJFQUQuaHRtbCNTUFJFQUQiPlNQUkVBRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlYWwtYXJyYXktaW5kaWNlcy5odG1sI2luZGV4LWFycmF5XzAwMmMtaW5kaWNlcy1vZi10eXBlLXJlYWwtMzM2Ij5hcnJheSwgaW5kaWNlcyBvZiB0eXBlIHJlYWw8L2E+OiA8YSBocmVmPSJSZWFsLWFycmF5LWluZGljZXMuaHRtbCNSZWFsLWFycmF5LWluZGljZXMiPlJlYWwgYXJyYXkgaW5kaWNlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1BWExPQy5odG1sI2luZGV4LWFycmF5XzAwMmMtbG9jYXRpb24tb2YtbWF4aW11bS1lbGVtZW50LTg2NCI+YXJyYXksIGxvY2F0aW9uIG9mIG1heGltdW0gZWxlbWVudDwvYT46IDxhIGhyZWY9Ik1BWExPQy5odG1sI01BWExPQyI+TUFYTE9DPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlOTE9DLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1sb2NhdGlvbi1vZi1taW5pbXVtLWVsZW1lbnQtODg5Ij5hcnJheSwgbG9jYXRpb24gb2YgbWluaW11bSBlbGVtZW50PC9hPjogPGEgaHJlZj0iTUlOTE9DLmh0bWwjTUlOTE9DIj5NSU5MT0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMQk9VTkQuaHRtbCNpbmRleC1hcnJheV8wMDJjLWxvd2VyLWJvdW5kLTc4NyI+YXJyYXksIGxvd2VyIGJvdW5kPC9hPjogPGEgaHJlZj0iTEJPVU5ELmh0bWwjTEJPVU5EIj5MQk9VTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQVhWQUwuaHRtbCNpbmRleC1hcnJheV8wMDJjLW1heGltdW0tdmFsdWUtODY2Ij5hcnJheSwgbWF4aW11bSB2YWx1ZTwvYT46IDxhIGhyZWY9Ik1BWFZBTC5odG1sI01BWFZBTCI+TUFYVkFMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUVSR0UuaHRtbCNpbmRleC1hcnJheV8wMDJjLW1lcmdlLWFycmF5cy04NzUiPmFycmF5LCBtZXJnZSBhcnJheXM8L2E+OiA8YSBocmVmPSJNRVJHRS5odG1sI01FUkdFIj5NRVJHRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JTlZBTC5odG1sI2luZGV4LWFycmF5XzAwMmMtbWluaW11bS12YWx1ZS04OTEiPmFycmF5LCBtaW5pbXVtIHZhbHVlPC9hPjogPGEgaHJlZj0iTUlOVkFMLmh0bWwjTUlOVkFMIj5NSU5WQUw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQUk9EVUNULmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1tdWx0aXBseS1lbGVtZW50cy05NTMiPmFycmF5LCBtdWx0aXBseSBlbGVtZW50czwvYT46IDxhIGhyZWY9IlBST0RVQ1QuaHRtbCNQUk9EVUNUIj5QUk9EVUNUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0laRS5odG1sI2luZGV4LWFycmF5XzAwMmMtbnVtYmVyLW9mLWVsZW1lbnRzLTEwNDgiPmFycmF5LCBudW1iZXIgb2YgZWxlbWVudHM8L2E+OiA8YSBocmVmPSJTSVpFLmh0bWwjU0laRSI+U0laRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPVU5ULmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1udW1iZXItb2YtZWxlbWVudHMtNTU2Ij5hcnJheSwgbnVtYmVyIG9mIGVsZW1lbnRzPC9hPjogPGEgaHJlZj0iQ09VTlQuaHRtbCNDT1VOVCI+Q09VTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQU5ZLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1PUi03MjAiPmFycmF5LCBPUjwvYT46IDxhIGhyZWY9IklBTlkuaHRtbCNJQU5ZIj5JQU5ZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUEFDSy5odG1sI2luZGV4LWFycmF5XzAwMmMtcGFja2luZy05MzMiPmFycmF5LCBwYWNraW5nPC9hPjogPGEgaHJlZj0iUEFDSy5odG1sI1BBQ0siPlBBQ0s8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUEFSSVRZLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1wYXJpdHktNzYzIj5hcnJheSwgcGFyaXR5PC9hPjogPGEgaHJlZj0iSVBBUklUWS5odG1sI0lQQVJJVFkiPklQQVJJVFk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDU0hJRlQuaHRtbCNpbmRleC1hcnJheV8wMDJjLXBlcm11dGF0aW9uLTU2MSI+YXJyYXksIHBlcm11dGF0aW9uPC9hPjogPGEgaHJlZj0iQ1NISUZULmh0bWwjQ1NISUZUIj5DU0hJRlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQUk9EVUNULmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1wcm9kdWN0LTk1MiI+YXJyYXksIHByb2R1Y3Q8L2E+OiA8YSBocmVmPSJQUk9EVUNULmh0bWwjUFJPRFVDVCI+UFJPRFVDVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBBQ0suaHRtbCNpbmRleC1hcnJheV8wMDJjLXJlZHVjZS1kaW1lbnNpb24tOTM0Ij5hcnJheSwgcmVkdWNlIGRpbWVuc2lvbjwvYT46IDxhIGhyZWY9IlBBQ0suaHRtbCNQQUNLIj5QQUNLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1NISUZULmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1yb3RhdGUtNTYyIj5hcnJheSwgcm90YXRlPC9hPjogPGEgaHJlZj0iQ1NISUZULmh0bWwjQ1NISUZUIj5DU0hJRlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJVTlBBQ0suaHRtbCNpbmRleC1hcnJheV8wMDJjLXNjYXR0ZXItZWxlbWVudHMtMTEzNCI+YXJyYXksIHNjYXR0ZXIgZWxlbWVudHM8L2E+OiA8YSBocmVmPSJVTlBBQ0suaHRtbCNVTlBBQ0siPlVOUEFDSzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNIQVBFLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1zaGFwZS0xMDE4Ij5hcnJheSwgc2hhcGU8L2E+OiA8YSBocmVmPSJTSEFQRS5odG1sI1NIQVBFIj5TSEFQRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVPU0hJRlQuaHRtbCNpbmRleC1hcnJheV8wMDJjLXNoaWZ0LTYwMCI+YXJyYXksIHNoaWZ0PC9hPjogPGEgaHJlZj0iRU9TSElGVC5odG1sI0VPU0hJRlQiPkVPU0hJRlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDU0hJRlQuaHRtbCNpbmRleC1hcnJheV8wMDJjLXNoaWZ0LWNpcmN1bGFybHktNTYwIj5hcnJheSwgc2hpZnQgY2lyY3VsYXJseTwvYT46IDxhIGhyZWY9IkNTSElGVC5odG1sI0NTSElGVCI+Q1NISUZUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0laRS5odG1sI2luZGV4LWFycmF5XzAwMmMtc2l6ZS0xMDQ3Ij5hcnJheSwgc2l6ZTwvYT46IDxhIGhyZWY9IlNJWkUuaHRtbCNTSVpFIj5TSVpFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1VNLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy1zdW0tMTA3NyI+YXJyYXksIHN1bTwvYT46IDxhIGhyZWY9IlNVTS5odG1sI1NVTSI+U1VNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkVTSEFQRS5odG1sI2luZGV4LWFycmF5XzAwMmMtdHJhbnNtb2dyaWZ5LTk4NiI+YXJyYXksIHRyYW5zbW9ncmlmeTwvYT46IDxhIGhyZWY9IlJFU0hBUEUuaHRtbCNSRVNIQVBFIj5SRVNIQVBFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVFJBTlNQT1NFLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy10cmFuc3Bvc2UtMTExNiI+YXJyYXksIHRyYW5zcG9zZTwvYT46IDxhIGhyZWY9IlRSQU5TUE9TRS5odG1sI1RSQU5TUE9TRSI+VFJBTlNQT1NFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVU5QQUNLLmh0bWwjaW5kZXgtYXJyYXlfMDAyYy11bnBhY2tpbmctMTEzMiI+YXJyYXksIHVucGFja2luZzwvYT46IDxhIGhyZWY9IlVOUEFDSy5odG1sI1VOUEFDSyI+VU5QQUNLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVUJPVU5ELmh0bWwjaW5kZXgtYXJyYXlfMDAyYy11cHBlci1ib3VuZC0xMTI0Ij5hcnJheSwgdXBwZXIgYm91bmQ8L2E+OiA8YSBocmVmPSJVQk9VTkQuaHRtbCNVQk9VTkQiPlVCT1VORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklQQVJJVFkuaHRtbCNpbmRleC1hcnJheV8wMDJjLVhPUi03NjQiPmFycmF5LCBYT1I8L2E+OiA8YSBocmVmPSJJUEFSSVRZLmh0bWwjSVBBUklUWSI+SVBBUklUWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBQ0hBUi5odG1sI2luZGV4LWdfdF8wMDQwYWNyb255bV8wMDdiQVNDSUlfMDA3ZC1jb2xsYXRpbmctc2VxdWVuY2UtNzEwIj48YWNyb255bT5BU0NJSTwvYWNyb255bT4gY29sbGF0aW5nIHNlcXVlbmNlPC9hPjogPGEgaHJlZj0iSUFDSEFSLmh0bWwjSUFDSEFSIj5JQUNIQVI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQ0hBUi5odG1sI2luZGV4LWdfdF8wMDQwYWNyb255bV8wMDdiQVNDSUlfMDA3ZC1jb2xsYXRpbmctc2VxdWVuY2UtMzg0Ij48YWNyb255bT5BU0NJSTwvYWNyb255bT4gY29sbGF0aW5nIHNlcXVlbmNlPC9hPjogPGEgaHJlZj0iQUNIQVIuaHRtbCNBQ0hBUiI+QUNIQVI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBU0lOLmh0bWwjaW5kZXgtQVNJTi00MjgiPjxjb2RlPkFTSU48L2NvZGU+PC9hPjogPGEgaHJlZj0iQVNJTi5odG1sI0FTSU4iPkFTSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJBU0lOSC5odG1sI2luZGV4LUFTSU5ILTQzMiI+PGNvZGU+QVNJTkg8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVNJTkguaHRtbCNBU0lOSCI+QVNJTkg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBU1NPQ0lBVEVELmh0bWwjaW5kZXgtQVNTT0NJQVRFRC00MzgiPjxjb2RlPkFTU09DSUFURUQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVNTT0NJQVRFRC5odG1sI0FTU09DSUFURUQiPkFTU09DSUFURUQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBU1NPQ0lBVEVELmh0bWwjaW5kZXgtYXNzb2NpYXRpb24tc3RhdHVzLTQ0MCI+YXNzb2NpYXRpb24gc3RhdHVzPC9hPjogPGEgaHJlZj0iQVNTT0NJQVRFRC5odG1sI0FTU09DSUFURUQiPkFTU09DSUFURUQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwNWZBU1NPQ0lBVEVELmh0bWwjaW5kZXgtYXNzb2NpYXRpb24tc3RhdHVzXzAwMmMtQy1wb2ludGVyLTQ5OSI+YXNzb2NpYXRpb24gc3RhdHVzLCBDIHBvaW50ZXI8L2E+OiA8YSBocmVmPSJDXzAwNWZBU1NPQ0lBVEVELmh0bWwjQ18wMDVmQVNTT0NJQVRFRCI+Q19BU1NPQ0lBVEVEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRBTi5odG1sI2luZGV4LUFUQU4tNDQxIj48Y29kZT5BVEFOPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFUQU4uaHRtbCNBVEFOIj5BVEFOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRBTjIuaHRtbCNpbmRleC1BVEFOMi00NDUiPjxjb2RlPkFUQU4yPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFUQU4yLmh0bWwjQVRBTjIiPkFUQU4yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRBTkguaHRtbCNpbmRleC1BVEFOSC00NDkiPjxjb2RlPkFUQU5IPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFUQU5ILmh0bWwjQVRBTkgiPkFUQU5IPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRPTUlDXzAwNWZERUZJTkUuaHRtbCNpbmRleC1BdG9taWMtc3Vicm91dGluZV8wMDJjLWRlZmluZS00NTYiPkF0b21pYyBzdWJyb3V0aW5lLCBkZWZpbmU8L2E+OiA8YSBocmVmPSJBVE9NSUNfMDA1ZkRFRklORS5odG1sI0FUT01JQ18wMDVmREVGSU5FIj5BVE9NSUNfREVGSU5FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRPTUlDXzAwNWZSRUYuaHRtbCNpbmRleC1BdG9taWMtc3Vicm91dGluZV8wMDJjLXJlZmVyZW5jZS00NTgiPkF0b21pYyBzdWJyb3V0aW5lLCByZWZlcmVuY2U8L2E+OiA8YSBocmVmPSJBVE9NSUNfMDA1ZlJFRi5odG1sI0FUT01JQ18wMDVmUkVGIj5BVE9NSUNfUkVGPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRPTUlDXzAwNWZERUZJTkUuaHRtbCNpbmRleC1BVE9NSUNfMDA1ZkRFRklORS00NTUiPjxjb2RlPkFUT01JQ19ERUZJTkU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVRPTUlDXzAwNWZERUZJTkUuaHRtbCNBVE9NSUNfMDA1ZkRFRklORSI+QVRPTUlDX0RFRklORTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFUT01JQ18wMDVmUkVGLmh0bWwjaW5kZXgtQVRPTUlDXzAwNWZSRUYtNDU3Ij48Y29kZT5BVE9NSUNfUkVGPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFUT01JQ18wMDVmUkVGLmh0bWwjQVRPTUlDXzAwNWZSRUYiPkFUT01JQ19SRUY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb250cmlidXRvcnMuaHRtbCNpbmRleC1BdXRob3JzLTExNDQiPkF1dGhvcnM8L2E+OiA8YSBocmVmPSJDb250cmlidXRvcnMuaHRtbCNDb250cmlidXRvcnMiPkNvbnRyaWJ1dG9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtYmFja3NsYXNoLTM4Ij5iYWNrc2xhc2g8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJBQ0tUUkFDRS5odG1sI2luZGV4LWJhY2t0cmFjZS00NjAiPmJhY2t0cmFjZTwvYT46IDxhIGhyZWY9IkJBQ0tUUkFDRS5odG1sI0JBQ0tUUkFDRSI+QkFDS1RSQUNFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkFDS1RSQUNFLmh0bWwjaW5kZXgtQkFDS1RSQUNFLTQ1OSI+PGNvZGU+QkFDS1RSQUNFPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJBQ0tUUkFDRS5odG1sI0JBQ0tUUkFDRSI+QkFDS1RSQUNFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1iYWNrdHJhY2UtMjAyIj5iYWNrdHJhY2U8L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxPRzEwLmh0bWwjaW5kZXgtYmFzZS0xMC1sb2dhcml0aG0tZnVuY3Rpb24tODI5Ij5iYXNlIDEwIGxvZ2FyaXRobSBmdW5jdGlvbjwvYT46IDxhIGhyZWY9IkxPRzEwLmh0bWwjTE9HMTAiPkxPRzEwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZKMC5odG1sI2luZGV4LUJFU0owLTQ2MiI+PGNvZGU+QkVTSjA8L2NvZGU+PC9hPjogPGEgaHJlZj0iQkVTU0VMXzAwNWZKMC5odG1sI0JFU1NFTF8wMDVmSjAiPkJFU1NFTF9KMDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJFU1NFTF8wMDVmSjEuaHRtbCNpbmRleC1CRVNKMS00NjYiPjxjb2RlPkJFU0oxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmSjEuaHRtbCNCRVNTRUxfMDA1ZkoxIj5CRVNTRUxfSjE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjaW5kZXgtQkVTSk4tNDcwIj48Y29kZT5CRVNKTjwvY29kZT48L2E+OiA8YSBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjQkVTU0VMXzAwNWZKTiI+QkVTU0VMX0pOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZKTi5odG1sI2luZGV4LUJlc3NlbC1mdW5jdGlvbl8wMDJjLWZpcnN0LWtpbmQtNDcyIj5CZXNzZWwgZnVuY3Rpb24sIGZpcnN0IGtpbmQ8L2E+OiA8YSBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjQkVTU0VMXzAwNWZKTiI+QkVTU0VMX0pOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZKMS5odG1sI2luZGV4LUJlc3NlbC1mdW5jdGlvbl8wMDJjLWZpcnN0LWtpbmQtNDY4Ij5CZXNzZWwgZnVuY3Rpb24sIGZpcnN0IGtpbmQ8L2E+OiA8YSBocmVmPSJCRVNTRUxfMDA1ZkoxLmh0bWwjQkVTU0VMXzAwNWZKMSI+QkVTU0VMX0oxPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZKMC5odG1sI2luZGV4LUJlc3NlbC1mdW5jdGlvbl8wMDJjLWZpcnN0LWtpbmQtNDY0Ij5CZXNzZWwgZnVuY3Rpb24sIGZpcnN0IGtpbmQ8L2E+OiA8YSBocmVmPSJCRVNTRUxfMDA1ZkowLmh0bWwjQkVTU0VMXzAwNWZKMCI+QkVTU0VMX0owPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZZTi5odG1sI2luZGV4LUJlc3NlbC1mdW5jdGlvbl8wMDJjLXNlY29uZC1raW5kLTQ4NCI+QmVzc2VsIGZ1bmN0aW9uLCBzZWNvbmQga2luZDwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmWU4uaHRtbCNCRVNTRUxfMDA1ZllOIj5CRVNTRUxfWU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZlkxLmh0bWwjaW5kZXgtQmVzc2VsLWZ1bmN0aW9uXzAwMmMtc2Vjb25kLWtpbmQtNDgwIj5CZXNzZWwgZnVuY3Rpb24sIHNlY29uZCBraW5kPC9hPjogPGEgaHJlZj0iQkVTU0VMXzAwNWZZMS5odG1sI0JFU1NFTF8wMDVmWTEiPkJFU1NFTF9ZMTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJFU1NFTF8wMDVmWTAuaHRtbCNpbmRleC1CZXNzZWwtZnVuY3Rpb25fMDAyYy1zZWNvbmQta2luZC00NzYiPkJlc3NlbCBmdW5jdGlvbiwgc2Vjb25kIGtpbmQ8L2E+OiA8YSBocmVmPSJCRVNTRUxfMDA1ZlkwLmh0bWwjQkVTU0VMXzAwNWZZMCI+QkVTU0VMX1kwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZKMC5odG1sI2luZGV4LUJFU1NFTF8wMDVmSjAtNDYxIj48Y29kZT5CRVNTRUxfSjA8L2NvZGU+PC9hPjogPGEgaHJlZj0iQkVTU0VMXzAwNWZKMC5odG1sI0JFU1NFTF8wMDVmSjAiPkJFU1NFTF9KMDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJFU1NFTF8wMDVmSjEuaHRtbCNpbmRleC1CRVNTRUxfMDA1ZkoxLTQ2NSI+PGNvZGU+QkVTU0VMX0oxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmSjEuaHRtbCNCRVNTRUxfMDA1ZkoxIj5CRVNTRUxfSjE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjaW5kZXgtQkVTU0VMXzAwNWZKTi00NjkiPjxjb2RlPkJFU1NFTF9KTjwvY29kZT48L2E+OiA8YSBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjQkVTU0VMXzAwNWZKTiI+QkVTU0VMX0pOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZZMC5odG1sI2luZGV4LUJFU1NFTF8wMDVmWTAtNDczIj48Y29kZT5CRVNTRUxfWTA8L2NvZGU+PC9hPjogPGEgaHJlZj0iQkVTU0VMXzAwNWZZMC5odG1sI0JFU1NFTF8wMDVmWTAiPkJFU1NFTF9ZMDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJFU1NFTF8wMDVmWTEuaHRtbCNpbmRleC1CRVNTRUxfMDA1ZlkxLTQ3NyI+PGNvZGU+QkVTU0VMX1kxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmWTEuaHRtbCNCRVNTRUxfMDA1ZlkxIj5CRVNTRUxfWTE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjaW5kZXgtQkVTU0VMXzAwNWZZTi00ODEiPjxjb2RlPkJFU1NFTF9ZTjwvY29kZT48L2E+OiA8YSBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjQkVTU0VMXzAwNWZZTiI+QkVTU0VMX1lOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZZMC5odG1sI2luZGV4LUJFU1kwLTQ3NCI+PGNvZGU+QkVTWTA8L2NvZGU+PC9hPjogPGEgaHJlZj0iQkVTU0VMXzAwNWZZMC5odG1sI0JFU1NFTF8wMDVmWTAiPkJFU1NFTF9ZMDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJFU1NFTF8wMDVmWTEuaHRtbCNpbmRleC1CRVNZMS00NzgiPjxjb2RlPkJFU1kxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmWTEuaHRtbCNCRVNTRUxfMDA1ZlkxIj5CRVNTRUxfWTE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjaW5kZXgtQkVTWU4tNDgyIj48Y29kZT5CRVNZTjwvY29kZT48L2E+OiA8YSBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjQkVTU0VMXzAwNWZZTiI+QkVTU0VMX1lOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkdFLmh0bWwjaW5kZXgtQkdFLTQ4NSI+PGNvZGU+QkdFPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJHRS5odG1sI0JHRSI+QkdFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkdULmh0bWwjaW5kZXgtQkdULTQ4NyI+PGNvZGU+QkdUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJHVC5odG1sI0JHVCI+QkdUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUE9QUEFSLmh0bWwjaW5kZXgtYmluYXJ5LXJlcHJlc2VudGF0aW9uLTk0NiI+YmluYXJ5IHJlcHJlc2VudGF0aW9uPC9hPjogPGEgaHJlZj0iUE9QUEFSLmh0bWwjUE9QUEFSIj5QT1BQQVI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQT1BDTlQuaHRtbCNpbmRleC1iaW5hcnktcmVwcmVzZW50YXRpb24tOTQzIj5iaW5hcnkgcmVwcmVzZW50YXRpb248L2E+OiA8YSBocmVmPSJQT1BDTlQuaHRtbCNQT1BDTlQiPlBPUENOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJJVF8wMDVmU0laRS5odG1sI2luZGV4LUJJVF8wMDVmU0laRS00ODkiPjxjb2RlPkJJVF9TSVpFPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJJVF8wMDVmU0laRS5odG1sI0JJVF8wMDVmU0laRSI+QklUX1NJWkU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQT1BDTlQuaHRtbCNpbmRleC1iaXRzLXNldC05NDQiPmJpdHMgc2V0PC9hPjogPGEgaHJlZj0iUE9QQ05ULmh0bWwjUE9QQ05UIj5QT1BDTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQUxMLmh0bWwjaW5kZXgtYml0c18wMDJjLUFORC1vZi1hcnJheS1lbGVtZW50cy03MTUiPmJpdHMsIEFORCBvZiBhcnJheSBlbGVtZW50czwvYT46IDxhIGhyZWY9IklBTEwuaHRtbCNJQUxMIj5JQUxMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUJDTFIuaHRtbCNpbmRleC1iaXRzXzAwMmMtY2xlYXItNzI4Ij5iaXRzLCBjbGVhcjwvYT46IDxhIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiPklCQ0xSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUJJVFMuaHRtbCNpbmRleC1iaXRzXzAwMmMtZXh0cmFjdC03MzEiPmJpdHMsIGV4dHJhY3Q8L2E+OiA8YSBocmVmPSJJQklUUy5odG1sI0lCSVRTIj5JQklUUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklCSVRTLmh0bWwjaW5kZXgtYml0c18wMDJjLWdldC03MzAiPmJpdHMsIGdldDwvYT46IDxhIGhyZWY9IklCSVRTLmh0bWwjSUJJVFMiPklCSVRTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUVSR0VfMDA1ZkJJVFMuaHRtbCNpbmRleC1iaXRzXzAwMmMtbWVyZ2UtODc4Ij5iaXRzLCBtZXJnZTwvYT46IDxhIGhyZWY9Ik1FUkdFXzAwNWZCSVRTLmh0bWwjTUVSR0VfMDA1ZkJJVFMiPk1FUkdFX0JJVFM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUUkFOU0ZFUi5odG1sI2luZGV4LWJpdHNfMDAyYy1tb3ZlLTExMTMiPmJpdHMsIG1vdmU8L2E+OiA8YSBocmVmPSJUUkFOU0ZFUi5odG1sI1RSQU5TRkVSIj5UUkFOU0ZFUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1WQklUUy5odG1sI2luZGV4LWJpdHNfMDAyYy1tb3ZlLTkwNSI+Yml0cywgbW92ZTwvYT46IDxhIGhyZWY9Ik1WQklUUy5odG1sI01WQklUUyI+TVZCSVRTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTk9ULmh0bWwjaW5kZXgtYml0c18wMDJjLW5lZ2F0ZS05MjAiPmJpdHMsIG5lZ2F0ZTwvYT46IDxhIGhyZWY9Ik5PVC5odG1sI05PVCI+Tk9UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQklUXzAwNWZTSVpFLmh0bWwjaW5kZXgtYml0c18wMDJjLW51bWJlci1vZi00OTAiPmJpdHMsIG51bWJlciBvZjwvYT46IDxhIGhyZWY9IkJJVF8wMDVmU0laRS5odG1sI0JJVF8wMDVmU0laRSI+QklUX1NJWkU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQU5ZLmh0bWwjaW5kZXgtYml0c18wMDJjLU9SLW9mLWFycmF5LWVsZW1lbnRzLTcyMSI+Yml0cywgT1Igb2YgYXJyYXkgZWxlbWVudHM8L2E+OiA8YSBocmVmPSJJQU5ZLmh0bWwjSUFOWSI+SUFOWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklCU0VULmh0bWwjaW5kZXgtYml0c18wMDJjLXNldC03MzMiPmJpdHMsIHNldDwvYT46IDxhIGhyZWY9IklCU0VULmh0bWwjSUJTRVQiPklCU0VUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVNIRlQuaHRtbCNpbmRleC1iaXRzXzAwMmMtc2hpZnQtNzc1Ij5iaXRzLCBzaGlmdDwvYT46IDxhIGhyZWY9IklTSEZULmh0bWwjSVNIRlQiPklTSEZUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVNIRlRDLmh0bWwjaW5kZXgtYml0c18wMDJjLXNoaWZ0LWNpcmN1bGFyLTc3NyI+Yml0cywgc2hpZnQgY2lyY3VsYXI8L2E+OiA8YSBocmVmPSJJU0hGVEMuaHRtbCNJU0hGVEMiPklTSEZUQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNISUZUTC5odG1sI2luZGV4LWJpdHNfMDAyYy1zaGlmdC1sZWZ0LTEwMjMiPmJpdHMsIHNoaWZ0IGxlZnQ8L2E+OiA8YSBocmVmPSJTSElGVEwuaHRtbCNTSElGVEwiPlNISUZUTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxTSElGVC5odG1sI2luZGV4LWJpdHNfMDAyYy1zaGlmdC1sZWZ0LTg0MCI+Yml0cywgc2hpZnQgbGVmdDwvYT46IDxhIGhyZWY9IkxTSElGVC5odG1sI0xTSElGVCI+TFNISUZUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hJRlRSLmh0bWwjaW5kZXgtYml0c18wMDJjLXNoaWZ0LXJpZ2h0LTEwMjYiPmJpdHMsIHNoaWZ0IHJpZ2h0PC9hPjogPGEgaHJlZj0iU0hJRlRSLmh0bWwjU0hJRlRSIj5TSElGVFI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSElGVEEuaHRtbCNpbmRleC1iaXRzXzAwMmMtc2hpZnQtcmlnaHQtMTAyMCI+Yml0cywgc2hpZnQgcmlnaHQ8L2E+OiA8YSBocmVmPSJTSElGVEEuaHRtbCNTSElGVEEiPlNISUZUQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJTSElGVC5odG1sI2luZGV4LWJpdHNfMDAyYy1zaGlmdC1yaWdodC05OTEiPmJpdHMsIHNoaWZ0IHJpZ2h0PC9hPjogPGEgaHJlZj0iUlNISUZULmh0bWwjUlNISUZUIj5SU0hJRlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCVEVTVC5odG1sI2luZGV4LWJpdHNfMDAyYy10ZXN0aW5nLTQ5NyI+Yml0cywgdGVzdGluZzwvYT46IDxhIGhyZWY9IkJURVNULmh0bWwjQlRFU1QiPkJURVNUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUJDTFIuaHRtbCNpbmRleC1iaXRzXzAwMmMtdW5zZXQtNzI3Ij5iaXRzLCB1bnNldDwvYT46IDxhIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiPklCQ0xSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVBBUklUWS5odG1sI2luZGV4LWJpdHNfMDAyYy1YT1Itb2YtYXJyYXktZWxlbWVudHMtNzY1Ij5iaXRzLCBYT1Igb2YgYXJyYXkgZWxlbWVudHM8L2E+OiA8YSBocmVmPSJJUEFSSVRZLmh0bWwjSVBBUklUWSI+SVBBUklUWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJMVC5odG1sI2luZGV4LWJpdHdpc2UtY29tcGFyaXNvbi00OTUiPmJpdHdpc2UgY29tcGFyaXNvbjwvYT46IDxhIGhyZWY9IkJMVC5odG1sI0JMVCI+QkxUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkxFLmh0bWwjaW5kZXgtYml0d2lzZS1jb21wYXJpc29uLTQ5MyI+Yml0d2lzZSBjb21wYXJpc29uPC9hPjogPGEgaHJlZj0iQkxFLmh0bWwjQkxFIj5CTEU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCR1QuaHRtbCNpbmRleC1iaXR3aXNlLWNvbXBhcmlzb24tNDg4Ij5iaXR3aXNlIGNvbXBhcmlzb248L2E+OiA8YSBocmVmPSJCR1QuaHRtbCNCR1QiPkJHVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJHRS5odG1sI2luZGV4LWJpdHdpc2UtY29tcGFyaXNvbi00ODYiPmJpdHdpc2UgY29tcGFyaXNvbjwvYT46IDxhIGhyZWY9IkJHRS5odG1sI0JHRSI+QkdFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFORC5odG1sI2luZGV4LWJpdHdpc2UtbG9naWNhbC1hbmQtNzE3Ij5iaXR3aXNlIGxvZ2ljYWwgYW5kPC9hPjogPGEgaHJlZj0iSUFORC5odG1sI0lBTkQiPklBTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBTkQuaHRtbCNpbmRleC1iaXR3aXNlLWxvZ2ljYWwtYW5kLTQxOSI+Yml0d2lzZSBsb2dpY2FsIGFuZDwvYT46IDxhIGhyZWY9IkFORC5odG1sI0FORCI+QU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWE9SLmh0bWwjaW5kZXgtYml0d2lzZS1sb2dpY2FsLWV4Y2x1c2l2ZS1vci0xMTM4Ij5iaXR3aXNlIGxvZ2ljYWwgZXhjbHVzaXZlIG9yPC9hPjogPGEgaHJlZj0iWE9SLmh0bWwjWE9SIj5YT1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJRU9SLmh0bWwjaW5kZXgtYml0d2lzZS1sb2dpY2FsLWV4Y2x1c2l2ZS1vci03NDAiPmJpdHdpc2UgbG9naWNhbCBleGNsdXNpdmUgb3I8L2E+OiA8YSBocmVmPSJJRU9SLmh0bWwjSUVPUiI+SUVPUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5PVC5odG1sI2luZGV4LWJpdHdpc2UtbG9naWNhbC1ub3QtOTIxIj5iaXR3aXNlIGxvZ2ljYWwgbm90PC9hPjogPGEgaHJlZj0iTk9ULmh0bWwjTk9UIj5OT1Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPUi5odG1sI2luZGV4LWJpdHdpc2UtbG9naWNhbC1vci05MzAiPmJpdHdpc2UgbG9naWNhbCBvcjwvYT46IDxhIGhyZWY9Ik9SLmh0bWwjT1IiPk9SPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU9SLmh0bWwjaW5kZXgtYml0d2lzZS1sb2dpY2FsLW9yLTc2MCI+Yml0d2lzZSBsb2dpY2FsIG9yPC9hPjogPGEgaHJlZj0iSU9SLmh0bWwjSU9SIj5JT1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCTEUuaHRtbCNpbmRleC1CTEUtNDkyIj48Y29kZT5CTEU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQkxFLmh0bWwjQkxFIj5CTEU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCTFQuaHRtbCNpbmRleC1CTFQtNDk0Ij48Y29kZT5CTFQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQkxULmh0bWwjQkxUIj5CTFQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtYm91bmRzLWNoZWNraW5nLTI1OSI+Ym91bmRzIGNoZWNraW5nPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCT1otbGl0ZXJhbC1jb25zdGFudHMuaHRtbCNpbmRleC1CT1otbGl0ZXJhbC1jb25zdGFudHMtMzM1Ij5CT1ogbGl0ZXJhbCBjb25zdGFudHM8L2E+OiA8YSBocmVmPSJCT1otbGl0ZXJhbC1jb25zdGFudHMuaHRtbCNCT1otbGl0ZXJhbC1jb25zdGFudHMiPkJPWiBsaXRlcmFsIGNvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJURVNULmh0bWwjaW5kZXgtQlRFU1QtNDk2Ij48Y29kZT5CVEVTVDwvY29kZT48L2E+OiA8YSBocmVmPSJCVEVTVC5odG1sI0JURVNUIj5CVEVTVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDA1ZkFTU09DSUFURUQuaHRtbCNpbmRleC1DXzAwNWZBU1NPQ0lBVEVELTQ5OCI+PGNvZGU+Q19BU1NPQ0lBVEVEPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDA1ZkFTU09DSUFURUQuaHRtbCNDXzAwNWZBU1NPQ0lBVEVEIj5DX0FTU09DSUFURUQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwNWZGXzAwNWZQT0lOVEVSLmh0bWwjaW5kZXgtQ18wMDVmRl8wMDVmUE9JTlRFUi01MDEiPjxjb2RlPkNfRl9QT0lOVEVSPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQT0lOVEVSIj5DX0ZfUE9JTlRFUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSLmh0bWwjaW5kZXgtQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVItNTAzIj48Y29kZT5DX0ZfUFJPQ1BPSU5URVI8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQUk9DUE9JTlRFUiI+Q19GX1BST0NQT0lOVEVSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDVmRlVOTE9DLmh0bWwjaW5kZXgtQ18wMDVmRlVOTE9DLTUwNSI+PGNvZGU+Q19GVU5MT0M8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ18wMDVmRlVOTE9DLmh0bWwjQ18wMDVmRlVOTE9DIj5DX0ZVTkxPQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDA1ZkxPQy5odG1sI2luZGV4LUNfMDA1ZkxPQy01MDciPjxjb2RlPkNfTE9DPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNfMDA1ZkxPQy5odG1sI0NfMDA1ZkxPQyI+Q19MT0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwNWZTSVpFT0YuaHRtbCNpbmRleC1DXzAwNWZTSVpFT0YtNTA5Ij48Y29kZT5DX1NJWkVPRjwvY29kZT48L2E+OiA8YSBocmVmPSJDXzAwNWZTSVpFT0YuaHRtbCNDXzAwNWZTSVpFT0YiPkNfU0laRU9GPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUJTLmh0bWwjaW5kZXgtQ0FCUy0zNzUiPjxjb2RlPkNBQlM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUJTLmh0bWwjQUJTIj5BQlM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtY2FsbGluZy1jb252ZW50aW9uLTIzNyI+Y2FsbGluZyBjb252ZW50aW9uPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT1MuaHRtbCNpbmRleC1DQ09TLTU0MyI+PGNvZGU+Q0NPUzwvY29kZT48L2E+OiA8YSBocmVmPSJDT1MuaHRtbCNDT1MiPkNPUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFCUy5odG1sI2luZGV4LUNEQUJTLTM3OSI+PGNvZGU+Q0RBQlM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUJTLmh0bWwjQUJTIj5BQlM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT1MuaHRtbCNpbmRleC1DRENPUy01NDUiPjxjb2RlPkNEQ09TPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNPUy5odG1sI0NPUyI+Q09TPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRVhQLmh0bWwjaW5kZXgtQ0RFWFAtNjIxIj48Y29kZT5DREVYUDwvY29kZT48L2E+OiA8YSBocmVmPSJFWFAuaHRtbCNFWFAiPkVYUDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxPRy5odG1sI2luZGV4LUNETE9HLTgyMCI+PGNvZGU+Q0RMT0c8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE9HLmh0bWwjTE9HIj5MT0c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSU4uaHRtbCNpbmRleC1DRFNJTi0xMDM4Ij48Y29kZT5DRFNJTjwvY29kZT48L2E+OiA8YSBocmVmPSJTSU4uaHRtbCNTSU4iPlNJTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNRUlQuaHRtbCNpbmRleC1DRFNRUlQtMTA2NiI+PGNvZGU+Q0RTUVJUPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNRUlQuaHRtbCNTUVJUIj5TUVJUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ0VJTElORy5odG1sI2luZGV4LWNlaWxpbmctNTEzIj5jZWlsaW5nPC9hPjogPGEgaHJlZj0iQ0VJTElORy5odG1sI0NFSUxJTkciPkNFSUxJTkc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDRUlMSU5HLmh0bWwjaW5kZXgtQ0VJTElORy01MTIiPjxjb2RlPkNFSUxJTkc8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ0VJTElORy5odG1sI0NFSUxJTkciPkNFSUxJTkc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBTklOVC5odG1sI2luZGV4LWNlaWxpbmctNDIzIj5jZWlsaW5nPC9hPjogPGEgaHJlZj0iQU5JTlQuaHRtbCNBTklOVCI+QU5JTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFWFAuaHRtbCNpbmRleC1DRVhQLTYxOSI+PGNvZGU+Q0VYUDwvY29kZT48L2E+OiA8YSBocmVmPSJFWFAuaHRtbCNFWFAiPkVYUDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNIQVIuaHRtbCNpbmRleC1DSEFSLTUxNSI+PGNvZGU+Q0hBUjwvY29kZT48L2E+OiA8YSBocmVmPSJDSEFSLmh0bWwjQ0hBUiI+Q0hBUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5ELmh0bWwjaW5kZXgtY2hhcmFjdGVyLWtpbmQtMTAwNSI+Y2hhcmFjdGVyIGtpbmQ8L2E+OiA8YSBocmVmPSJTRUxFQ1RFRF8wMDVmQ0hBUl8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5EIj5TRUxFQ1RFRF9DSEFSX0tJTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWNoYXJhY3Rlci1zZXQtMzYiPmNoYXJhY3RlciBzZXQ8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNIRElSLmh0bWwjaW5kZXgtQ0hESVItNTE3Ij48Y29kZT5DSERJUjwvY29kZT48L2E+OiA8YSBocmVmPSJDSERJUi5odG1sI0NIRElSIj5DSERJUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1jaGVja2luZy1hcnJheS10ZW1wb3Jhcmllcy0yNjYiPmNoZWNraW5nIGFycmF5IHRlbXBvcmFyaWVzPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtY2hlY2tpbmctc3Vic2NyaXB0cy0yNjQiPmNoZWNraW5nIHN1YnNjcmlwdHM8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNITU9ELmh0bWwjaW5kZXgtQ0hNT0QtNTE5Ij48Y29kZT5DSE1PRDwvY29kZT48L2E+OiA8YSBocmVmPSJDSE1PRC5odG1sI0NITU9EIj5DSE1PRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNZU1RFTV8wMDVmQ0xPQ0suaHRtbCNpbmRleC1jbG9jay10aWNrcy0xMDg4Ij5jbG9jayB0aWNrczwvYT46IDxhIGhyZWY9IlNZU1RFTV8wMDVmQ0xPQ0suaHRtbCNTWVNURU1fMDA1ZkNMT0NLIj5TWVNURU1fQ0xPQ0s8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ0xPQ0s4Lmh0bWwjaW5kZXgtY2xvY2stdGlja3MtODczIj5jbG9jayB0aWNrczwvYT46IDxhIGhyZWY9Ik1DTE9DSzguaHRtbCNNQ0xPQ0s4Ij5NQ0xPQ0s4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNMT0NLLmh0bWwjaW5kZXgtY2xvY2stdGlja3MtODcwIj5jbG9jayB0aWNrczwvYT46IDxhIGhyZWY9Ik1DTE9DSy5odG1sI01DTE9DSyI+TUNMT0NLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HLmh0bWwjaW5kZXgtQ0xPRy04MTgiPjxjb2RlPkNMT0c8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE9HLmh0bWwjTE9HIj5MT0c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDTVBMWC5odG1sI2luZGV4LUNNUExYLTUyMSI+PGNvZGU+Q01QTFg8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ01QTFguaHRtbCNDTVBMWCI+Q01QTFg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJTUFHRV8wMDVmSU5ERVguaHRtbCNpbmRleC1jb2FycmF5XzAwMmMtXzAwNDBjb2RlXzAwN2JJTUFHRV8wMDVmSU5ERVhfMDA3ZC03NDUiPmNvYXJyYXksIDxjb2RlPklNQUdFX0lOREVYPC9jb2RlPjwvYT46IDxhIGhyZWY9IklNQUdFXzAwNWZJTkRFWC5odG1sI0lNQUdFXzAwNWZJTkRFWCI+SU1BR0VfSU5ERVg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMQ09CT1VORC5odG1sI2luZGV4LWNvYXJyYXlfMDAyYy1sb3dlci1ib3VuZC03ODkiPmNvYXJyYXksIGxvd2VyIGJvdW5kPC9hPjogPGEgaHJlZj0iTENPQk9VTkQuaHRtbCNMQ09CT1VORCI+TENPQk9VTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOVU1fMDA1ZklNQUdFUy5odG1sI2luZGV4LWNvYXJyYXlfMDAyYy1fMDA0MGNvZGVfMDA3Yk5VTV8wMDVmSU1BR0VTXzAwN2QtOTI3Ij5jb2FycmF5LCA8Y29kZT5OVU1fSU1BR0VTPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik5VTV8wMDVmSU1BR0VTLmh0bWwjTlVNXzAwNWZJTUFHRVMiPk5VTV9JTUFHRVM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSElTXzAwNWZJTUFHRS5odG1sI2luZGV4LWNvYXJyYXlfMDAyYy1fMDA0MGNvZGVfMDA3YlRISVNfMDA1ZklNQUdFXzAwN2QtMTA5OSI+Y29hcnJheSwgPGNvZGU+VEhJU19JTUFHRTwvY29kZT48L2E+OiA8YSBocmVmPSJUSElTXzAwNWZJTUFHRS5odG1sI1RISVNfMDA1ZklNQUdFIj5USElTX0lNQUdFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVUNPQk9VTkQuaHRtbCNpbmRleC1jb2FycmF5XzAwMmMtdXBwZXItYm91bmQtMTEyNiI+Y29hcnJheSwgdXBwZXIgYm91bmQ8L2E+OiA8YSBocmVmPSJVQ09CT1VORC5odG1sI1VDT0JPVU5EIj5VQ09CT1VORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1jb2FycmF5cy0yNTYiPmNvYXJyYXlzPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtY29kZS1nZW5lcmF0aW9uXzAwMmMtY29udmVudGlvbnMtMjMwIj5jb2RlIGdlbmVyYXRpb24sIGNvbnZlbnRpb25zPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQUNIQVIuaHRtbCNpbmRleC1jb2xsYXRpbmctc2VxdWVuY2VfMDAyYy1fMDA0MGFjcm9ueW1fMDA3YkFTQ0lJXzAwN2QtNzExIj5jb2xsYXRpbmcgc2VxdWVuY2UsIDxhY3JvbnltPkFTQ0lJPC9hY3JvbnltPjwvYT46IDxhIGhyZWY9IklBQ0hBUi5odG1sI0lBQ0hBUiI+SUFDSEFSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUNIQVIuaHRtbCNpbmRleC1jb2xsYXRpbmctc2VxdWVuY2VfMDAyYy1fMDA0MGFjcm9ueW1fMDA3YkFTQ0lJXzAwN2QtMzg1Ij5jb2xsYXRpbmcgc2VxdWVuY2UsIDxhY3JvbnltPkFTQ0lJPC9hY3JvbnltPjwvYT46IDxhIGhyZWY9IkFDSEFSLmh0bWwjQUNIQVIiPkFDSEFSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORS5odG1sI2luZGV4LWNvbW1hbmQtbGluZS02MTMiPmNvbW1hbmQgbGluZTwvYT46IDxhIGhyZWY9IkVYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUuaHRtbCNFWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FIj5FWEVDVVRFX0NPTU1BTkRfTElORTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjaW5kZXgtY29tbWFuZC1vcHRpb25zLTE2Ij5jb21tYW5kIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJJbnZva2luZy1HTlUtRm9ydHJhbi5odG1sI0ludm9raW5nLUdOVS1Gb3J0cmFuIj5JbnZva2luZyBHTlUgRm9ydHJhbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBUkdDLmh0bWwjaW5kZXgtY29tbWFuZF8wMDJkbGluZS1hcmd1bWVudHMtNzIzIj5jb21tYW5kLWxpbmUgYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iSUFSR0MuaHRtbCNJQVJHQyI+SUFSR0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5ULmh0bWwjaW5kZXgtY29tbWFuZF8wMDJkbGluZS1hcmd1bWVudHMtNjgxIj5jb21tYW5kLWxpbmUgYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sI0dFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQiPkdFVF9DT01NQU5EX0FSR1VNRU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR0VUXzAwNWZDT01NQU5ELmh0bWwjaW5kZXgtY29tbWFuZF8wMDJkbGluZS1hcmd1bWVudHMtNjc4Ij5jb21tYW5kLWxpbmUgYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iR0VUXzAwNWZDT01NQU5ELmh0bWwjR0VUXzAwNWZDT01NQU5EIj5HRVRfQ09NTUFORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVEFSRy5odG1sI2luZGV4LWNvbW1hbmRfMDAyZGxpbmUtYXJndW1lbnRzLTY3NSI+Y29tbWFuZC1saW5lIGFyZ3VtZW50czwvYT46IDxhIGhyZWY9IkdFVEFSRy5odG1sI0dFVEFSRyI+R0VUQVJHPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5ULmh0bWwjaW5kZXgtY29tbWFuZF8wMDJkbGluZS1hcmd1bWVudHMtNTI1Ij5jb21tYW5kLWxpbmUgYXJndW1lbnRzPC9hPjogPGEgaHJlZj0iQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5ULmh0bWwjQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5UIj5DT01NQU5EX0FSR1VNRU5UX0NPVU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFSR0MuaHRtbCNpbmRleC1jb21tYW5kXzAwMmRsaW5lLWFyZ3VtZW50c18wMDJjLW51bWJlci1vZi03MjQiPmNvbW1hbmQtbGluZSBhcmd1bWVudHMsIG51bWJlciBvZjwvYT46IDxhIGhyZWY9IklBUkdDLmh0bWwjSUFSR0MiPklBUkdDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ09NTUFORF8wMDVmQVJHVU1FTlRfMDA1ZkNPVU5ULmh0bWwjaW5kZXgtY29tbWFuZF8wMDJkbGluZS1hcmd1bWVudHNfMDAyYy1udW1iZXItb2YtNTI2Ij5jb21tYW5kLWxpbmUgYXJndW1lbnRzLCBudW1iZXIgb2Y8L2E+OiA8YSBocmVmPSJDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQuaHRtbCNDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQiPkNPTU1BTkRfQVJHVU1FTlRfQ09VTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQuaHRtbCNpbmRleC1DT01NQU5EXzAwNWZBUkdVTUVOVF8wMDVmQ09VTlQtNTI0Ij48Y29kZT5DT01NQU5EX0FSR1VNRU5UX0NPVU5UPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC5odG1sI0NPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVCI+Q09NTUFORF9BUkdVTUVOVF9DT1VOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPTVBJTEVSXzAwNWZPUFRJT05TLmh0bWwjaW5kZXgtY29tcGlsZXItZmxhZ3MtaW5xdWlyeS1mdW5jdGlvbi01MzEiPmNvbXBpbGVyIGZsYWdzIGlucXVpcnkgZnVuY3Rpb248L2E+OiA8YSBocmVmPSJDT01QSUxFUl8wMDVmT1BUSU9OUy5odG1sI0NPTVBJTEVSXzAwNWZPUFRJT05TIj5DT01QSUxFUl9PUFRJT05TPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ09NUElMRVJfMDA1ZlZFUlNJT04uaHRtbCNpbmRleC1jb21waWxlcl8wMDJjLW5hbWUtYW5kLXZlcnNpb24tNTMzIj5jb21waWxlciwgbmFtZSBhbmQgdmVyc2lvbjwvYT46IDxhIGhyZWY9IkNPTVBJTEVSXzAwNWZWRVJTSU9OLmh0bWwjQ09NUElMRVJfMDA1ZlZFUlNJT04iPkNPTVBJTEVSX1ZFUlNJT048L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT01QSUxFUl8wMDVmT1BUSU9OUy5odG1sI2luZGV4LUNPTVBJTEVSXzAwNWZPUFRJT05TLTUyOCI+PGNvZGU+Q09NUElMRVJfT1BUSU9OUzwvY29kZT48L2E+OiA8YSBocmVmPSJDT01QSUxFUl8wMDVmT1BUSU9OUy5odG1sI0NPTVBJTEVSXzAwNWZPUFRJT05TIj5DT01QSUxFUl9PUFRJT05TPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ09NUElMRVJfMDA1ZlZFUlNJT04uaHRtbCNpbmRleC1DT01QSUxFUl8wMDVmVkVSU0lPTi01MzIiPjxjb2RlPkNPTVBJTEVSX1ZFUlNJT048L2NvZGU+PC9hPjogPGEgaHJlZj0iQ09NUElMRVJfMDA1ZlZFUlNJT04uaHRtbCNDT01QSUxFUl8wMDVmVkVSU0lPTiI+Q09NUElMRVJfVkVSU0lPTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPTVBMRVguaHRtbCNpbmRleC1DT01QTEVYLTUzNSI+PGNvZGU+Q09NUExFWDwvY29kZT48L2E+OiA8YSBocmVmPSJDT01QTEVYLmh0bWwjQ09NUExFWCI+Q09NUExFWDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPTkpHLmh0bWwjaW5kZXgtY29tcGxleC1jb25qdWdhdGUtNTQwIj5jb21wbGV4IGNvbmp1Z2F0ZTwvYT46IDxhIGhyZWY9IkNPTkpHLmh0bWwjQ09OSkciPkNPTkpHPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQWx0ZXJuYXRlLWNvbXBsZXgtZnVuY3Rpb24tc3ludGF4Lmh0bWwjaW5kZXgtQ29tcGxleC1mdW5jdGlvbi0zNTQiPkNvbXBsZXggZnVuY3Rpb248L2E+OiA8YSBocmVmPSJBbHRlcm5hdGUtY29tcGxleC1mdW5jdGlvbi1zeW50YXguaHRtbCNBbHRlcm5hdGUtY29tcGxleC1mdW5jdGlvbi1zeW50YXgiPkFsdGVybmF0ZSBjb21wbGV4IGZ1bmN0aW9uIHN5bnRheDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRDTVBMWC5odG1sI2luZGV4LWNvbXBsZXgtbnVtYmVyc18wMDJjLWNvbnZlcnNpb24tdG8tNTc0Ij5jb21wbGV4IG51bWJlcnMsIGNvbnZlcnNpb24gdG88L2E+OiA8YSBocmVmPSJEQ01QTFguaHRtbCNEQ01QTFgiPkRDTVBMWDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPTVBMRVguaHRtbCNpbmRleC1jb21wbGV4LW51bWJlcnNfMDAyYy1jb252ZXJzaW9uLXRvLTUzNiI+Y29tcGxleCBudW1iZXJzLCBjb252ZXJzaW9uIHRvPC9hPjogPGEgaHJlZj0iQ09NUExFWC5odG1sI0NPTVBMRVgiPkNPTVBMRVg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDTVBMWC5odG1sI2luZGV4LWNvbXBsZXgtbnVtYmVyc18wMDJjLWNvbnZlcnNpb24tdG8tNTIyIj5jb21wbGV4IG51bWJlcnMsIGNvbnZlcnNpb24gdG88L2E+OiA8YSBocmVmPSJDTVBMWC5odG1sI0NNUExYIj5DTVBMWDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFJTUFHLmh0bWwjaW5kZXgtY29tcGxleC1udW1iZXJzXzAwMmMtaW1hZ2luYXJ5LXBhcnQtNDA2Ij5jb21wbGV4IG51bWJlcnMsIGltYWdpbmFyeSBwYXJ0PC9hPjogPGEgaHJlZj0iQUlNQUcuaHRtbCNBSU1BRyI+QUlNQUc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSRUFMLmh0bWwjaW5kZXgtY29tcGxleC1udW1iZXJzXzAwMmMtcmVhbC1wYXJ0LTk3OCI+Y29tcGxleCBudW1iZXJzLCByZWFsIHBhcnQ8L2E+OiA8YSBocmVmPSJSRUFMLmh0bWwjUkVBTCI+UkVBTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRSRUFMLmh0bWwjaW5kZXgtY29tcGxleC1udW1iZXJzXzAwMmMtcmVhbC1wYXJ0LTU4OSI+Y29tcGxleCBudW1iZXJzLCByZWFsIHBhcnQ8L2E+OiA8YSBocmVmPSJEUkVBTC5odG1sI0RSRUFMIj5EUkVBTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctYW5kLWNvbmRpdGlvbmFsLWNvbXBpbGF0aW9uLmh0bWwjaW5kZXgtQ29uZGl0aW9uYWwtY29tcGlsYXRpb24tNiI+Q29uZGl0aW9uYWwgY29tcGlsYXRpb248L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbi5odG1sI1ByZXByb2Nlc3NpbmctYW5kLWNvbmRpdGlvbmFsLWNvbXBpbGF0aW9uIj5QcmVwcm9jZXNzaW5nIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPTkpHLmh0bWwjaW5kZXgtQ09OSkctNTM4Ij48Y29kZT5DT05KRzwvY29kZT48L2E+OiA8YSBocmVmPSJDT05KRy5odG1sI0NPTkpHIj5DT05KRzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRhdGEtY29uc2lzdGVuY3ktYW5kLWR1cmFiaWxpdHkuaHRtbCNpbmRleC1jb25zaXN0ZW5jeV8wMDJjLWR1cmFiaWxpdHktMzI4Ij5jb25zaXN0ZW5jeSwgZHVyYWJpbGl0eTwvYT46IDxhIGhyZWY9IkRhdGEtY29uc2lzdGVuY3ktYW5kLWR1cmFiaWxpdHkuaHRtbCNEYXRhLWNvbnNpc3RlbmN5LWFuZC1kdXJhYmlsaXR5Ij5EYXRhIGNvbnNpc3RlbmN5IGFuZCBkdXJhYmlsaXR5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29udHJpYnV0aW5nLmh0bWwjaW5kZXgtQ29udHJpYnV0aW5nLTExNDEiPkNvbnRyaWJ1dGluZzwvYT46IDxhIGhyZWY9IkNvbnRyaWJ1dGluZy5odG1sI0NvbnRyaWJ1dGluZyI+Q29udHJpYnV0aW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29udHJpYnV0b3JzLmh0bWwjaW5kZXgtQ29udHJpYnV0b3JzLTExNDIiPkNvbnRyaWJ1dG9yczwvYT46IDxhIGhyZWY9IkNvbnRyaWJ1dG9ycy5odG1sI0NvbnRyaWJ1dG9ycyI+Q29udHJpYnV0b3JzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWNvbnZlcnNpb24tMTQ4Ij5jb252ZXJzaW9uPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDSEFSLmh0bWwjaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLWNoYXJhY3Rlci01MTYiPmNvbnZlcnNpb24sIHRvIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkNIQVIuaHRtbCNDSEFSIj5DSEFSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRENNUExYLmh0bWwjaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLWNvbXBsZXgtNTc1Ij5jb252ZXJzaW9uLCB0byBjb21wbGV4PC9hPjogPGEgaHJlZj0iRENNUExYLmh0bWwjRENNUExYIj5EQ01QTFg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT01QTEVYLmh0bWwjaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLWNvbXBsZXgtNTM3Ij5jb252ZXJzaW9uLCB0byBjb21wbGV4PC9hPjogPGEgaHJlZj0iQ09NUExFWC5odG1sI0NPTVBMRVgiPkNPTVBMRVg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDTVBMWC5odG1sI2luZGV4LWNvbnZlcnNpb25fMDAyYy10by1jb21wbGV4LTUyMyI+Y29udmVyc2lvbiwgdG8gY29tcGxleDwvYT46IDxhIGhyZWY9IkNNUExYLmh0bWwjQ01QTFgiPkNNUExYPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9ORy5odG1sI2luZGV4LWNvbnZlcnNpb25fMDAyYy10by1pbnRlZ2VyLTgzOCI+Y29udmVyc2lvbiwgdG8gaW50ZWdlcjwvYT46IDxhIGhyZWY9IkxPTkcuaHRtbCNMT05HIj5MT05HPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU5UOC5odG1sI2luZGV4LWNvbnZlcnNpb25fMDAyYy10by1pbnRlZ2VyLTc1OCI+Y29udmVyc2lvbiwgdG8gaW50ZWdlcjwvYT46IDxhIGhyZWY9IklOVDguaHRtbCNJTlQ4Ij5JTlQ4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU5UMi5odG1sI2luZGV4LWNvbnZlcnNpb25fMDAyYy10by1pbnRlZ2VyLTc1NiI+Y29udmVyc2lvbiwgdG8gaW50ZWdlcjwvYT46IDxhIGhyZWY9IklOVDIuaHRtbCNJTlQyIj5JTlQyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU5ULmh0bWwjaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLWludGVnZXItNzUzIj5jb252ZXJzaW9uLCB0byBpbnRlZ2VyPC9hPjogPGEgaHJlZj0iSU5ULmh0bWwjSU5UIj5JTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJQ0hBUi5odG1sI2luZGV4LWNvbnZlcnNpb25fMDAyYy10by1pbnRlZ2VyLTczNSI+Y29udmVyc2lvbiwgdG8gaW50ZWdlcjwvYT46IDxhIGhyZWY9IklDSEFSLmh0bWwjSUNIQVIiPklDSEFSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFDSEFSLmh0bWwjaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLWludGVnZXItNzEyIj5jb252ZXJzaW9uLCB0byBpbnRlZ2VyPC9hPjogPGEgaHJlZj0iSUFDSEFSLmh0bWwjSUFDSEFSIj5JQUNIQVI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMuaHRtbCNpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8taW50ZWdlci0zMzgiPmNvbnZlcnNpb24sIHRvIGludGVnZXI8L2E+OiA8YSBocmVmPSJJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMuaHRtbCNJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMiPkltcGxpY2l0bHkgY29udmVydCBMT0dJQ0FMIGFuZCBJTlRFR0VSIHZhbHVlczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxPR0lDQUwuaHRtbCNpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8tbG9naWNhbC04MzYiPmNvbnZlcnNpb24sIHRvIGxvZ2ljYWw8L2E+OiA8YSBocmVmPSJMT0dJQ0FMLmh0bWwjTE9HSUNBTCI+TE9HSUNBTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkltcGxpY2l0bHktY29udmVydC1MT0dJQ0FMLWFuZC1JTlRFR0VSLXZhbHVlcy5odG1sI2luZGV4LWNvbnZlcnNpb25fMDAyYy10by1sb2dpY2FsLTMzOSI+Y29udmVyc2lvbiwgdG8gbG9naWNhbDwvYT46IDxhIGhyZWY9IkltcGxpY2l0bHktY29udmVydC1MT0dJQ0FMLWFuZC1JTlRFR0VSLXZhbHVlcy5odG1sI0ltcGxpY2l0bHktY29udmVydC1MT0dJQ0FMLWFuZC1JTlRFR0VSLXZhbHVlcyI+SW1wbGljaXRseSBjb252ZXJ0IExPR0lDQUwgYW5kIElOVEVHRVIgdmFsdWVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkVBTC5odG1sI2luZGV4LWNvbnZlcnNpb25fMDAyYy10by1yZWFsLTk3NyI+Y29udmVyc2lvbiwgdG8gcmVhbDwvYT46IDxhIGhyZWY9IlJFQUwuaHRtbCNSRUFMIj5SRUFMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREJMRS5odG1sI2luZGV4LWNvbnZlcnNpb25fMDAyYy10by1yZWFsLTU3MiI+Y29udmVyc2lvbiwgdG8gcmVhbDwvYT46IDxhIGhyZWY9IkRCTEUuaHRtbCNEQkxFIj5EQkxFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ1RJTUUuaHRtbCNpbmRleC1jb252ZXJzaW9uXzAwMmMtdG8tc3RyaW5nLTU2NSI+Y29udmVyc2lvbiwgdG8gc3RyaW5nPC9hPjogPGEgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+Q1RJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT05WRVJULXNwZWNpZmllci5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiQ09OVkVSVF8wMDdkLXNwZWNpZmllci0zNDIiPjxjb2RlPkNPTlZFUlQ8L2NvZGU+IHNwZWNpZmllcjwvYT46IDxhIGhyZWY9IkNPTlZFUlQtc3BlY2lmaWVyLmh0bWwjQ09OVkVSVC1zcGVjaWZpZXIiPkNPTlZFUlQgc3BlY2lmaWVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUJPUlQuaHRtbCNpbmRleC1jb3JlXzAwMmMtZHVtcC0zNzMiPmNvcmUsIGR1bXA8L2E+OiA8YSBocmVmPSJBQk9SVC5odG1sI0FCT1JUIj5BQk9SVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPUy5odG1sI2luZGV4LUNPUy01NDEiPjxjb2RlPkNPUzwvY29kZT48L2E+OiA8YSBocmVmPSJDT1MuaHRtbCNDT1MiPkNPUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPU0guaHRtbCNpbmRleC1DT1NILTU0OCI+PGNvZGU+Q09TSDwvY29kZT48L2E+OiA8YSBocmVmPSJDT1NILmh0bWwjQ09TSCI+Q09TSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPUy5odG1sI2luZGV4LWNvc2luZS01NDciPmNvc2luZTwvYT46IDxhIGhyZWY9IkNPUy5odG1sI0NPUyI+Q09TPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ09TSC5odG1sI2luZGV4LWNvc2luZV8wMDJjLWh5cGVyYm9saWMtNTUyIj5jb3NpbmUsIGh5cGVyYm9saWM8L2E+OiA8YSBocmVmPSJDT1NILmh0bWwjQ09TSCI+Q09TSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFDT1NILmh0bWwjaW5kZXgtY29zaW5lXzAwMmMtaHlwZXJib2xpY18wMDJjLWludmVyc2UtMzk1Ij5jb3NpbmUsIGh5cGVyYm9saWMsIGludmVyc2U8L2E+OiA8YSBocmVmPSJBQ09TSC5odG1sI0FDT1NIIj5BQ09TSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFDT1MuaHRtbCNpbmRleC1jb3NpbmVfMDAyYy1pbnZlcnNlLTM4OSI+Y29zaW5lLCBpbnZlcnNlPC9hPjogPGEgaHJlZj0iQUNPUy5odG1sI0FDT1MiPkFDT1M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT1VOVC5odG1sI2luZGV4LUNPVU5ULTU1MyI+PGNvZGU+Q09VTlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ09VTlQuaHRtbCNDT1VOVCI+Q09VTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1DUFAtNjQiPkNQUDwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNpbmRleC1DUFAtNCI+Q1BQPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiI+UHJlcHJvY2Vzc2luZyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUFVfMDA1ZlRJTUUuaHRtbCNpbmRleC1DUFVfMDA1ZlRJTUUtNTU3Ij48Y29kZT5DUFVfVElNRTwvY29kZT48L2E+OiA8YSBocmVmPSJDUFVfMDA1ZlRJTUUuaHRtbCNDUFVfMDA1ZlRJTUUiPkNQVV9USU1FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29udHJpYnV0b3JzLmh0bWwjaW5kZXgtQ3JlZGl0cy0xMTQzIj5DcmVkaXRzPC9hPjogPGEgaHJlZj0iQ29udHJpYnV0b3JzLmh0bWwjQ29udHJpYnV0b3JzIj5Db250cmlidXRvcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDU0hJRlQuaHRtbCNpbmRleC1DU0hJRlQtNTU5Ij48Y29kZT5DU0hJRlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1NISUZULmh0bWwjQ1NISUZUIj5DU0hJRlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSU4uaHRtbCNpbmRleC1DU0lOLTEwMzYiPjxjb2RlPkNTSU48L2NvZGU+PC9hPjogPGEgaHJlZj0iU0lOLmh0bWwjU0lOIj5TSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUVJULmh0bWwjaW5kZXgtQ1NRUlQtMTA2NCI+PGNvZGU+Q1NRUlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1FSVC5odG1sI1NRUlQiPlNRUlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDVElNRS5odG1sI2luZGV4LUNUSU1FLTU2MyI+PGNvZGU+Q1RJTUU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+Q1RJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJREFURS5odG1sI2luZGV4LWN1cnJlbnQtZGF0ZS03MzgiPmN1cnJlbnQgZGF0ZTwvYT46IDxhIGhyZWY9IklEQVRFLmh0bWwjSURBVEUiPklEQVRFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRkRBVEUuaHRtbCNpbmRleC1jdXJyZW50LWRhdGUtNjMyIj5jdXJyZW50IGRhdGU8L2E+OiA8YSBocmVmPSJGREFURS5odG1sI0ZEQVRFIj5GREFURTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI2luZGV4LWN1cnJlbnQtZGF0ZS01NjgiPmN1cnJlbnQgZGF0ZTwvYT46IDxhIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI0RBVEVfMDA1ZkFORF8wMDVmVElNRSI+REFURV9BTkRfVElNRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTUU4Lmh0bWwjaW5kZXgtY3VycmVudC10aW1lLTExMDYiPmN1cnJlbnQgdGltZTwvYT46IDxhIGhyZWY9IlRJTUU4Lmh0bWwjVElNRTgiPlRJTUU4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElNRS5odG1sI2luZGV4LWN1cnJlbnQtdGltZS0xMTAzIj5jdXJyZW50IHRpbWU8L2E+OiA8YSBocmVmPSJUSU1FLmh0bWwjVElNRSI+VElNRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklUSU1FLmh0bWwjaW5kZXgtY3VycmVudC10aW1lLTc4MiI+Y3VycmVudCB0aW1lPC9hPjogPGEgaHJlZj0iSVRJTUUuaHRtbCNJVElNRSI+SVRJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGREFURS5odG1sI2luZGV4LWN1cnJlbnQtdGltZS02MzAiPmN1cnJlbnQgdGltZTwvYT46IDxhIGhyZWY9IkZEQVRFLmh0bWwjRkRBVEUiPkZEQVRFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwjaW5kZXgtY3VycmVudC10aW1lLTU3MCI+Y3VycmVudCB0aW1lPC9hPjogPGEgaHJlZj0iREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwjREFURV8wMDVmQU5EXzAwNWZUSU1FIj5EQVRFX0FORF9USU1FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUJTLmh0bWwjaW5kZXgtREFCUy0zNzYiPjxjb2RlPkRBQlM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUJTLmh0bWwjQUJTIj5BQlM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQ09TLmh0bWwjaW5kZXgtREFDT1MtMzg3Ij48Y29kZT5EQUNPUzwvY29kZT48L2E+OiA8YSBocmVmPSJBQ09TLmh0bWwjQUNPUyI+QUNPUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFDT1NILmh0bWwjaW5kZXgtREFDT1NILTM5MSI+PGNvZGU+REFDT1NIPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFDT1NILmh0bWwjQUNPU0giPkFDT1NIPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVNJTi5odG1sI2luZGV4LURBU0lOLTQyOSI+PGNvZGU+REFTSU48L2NvZGU+PC9hPjogPGEgaHJlZj0iQVNJTi5odG1sI0FTSU4iPkFTSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJBU0lOSC5odG1sI2luZGV4LURBU0lOSC00MzMiPjxjb2RlPkRBU0lOSDwvY29kZT48L2E+OiA8YSBocmVmPSJBU0lOSC5odG1sI0FTSU5IIj5BU0lOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFUQU4uaHRtbCNpbmRleC1EQVRBTi00NDIiPjxjb2RlPkRBVEFOPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFUQU4uaHRtbCNBVEFOIj5BVEFOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRBTjIuaHRtbCNpbmRleC1EQVRBTjItNDQ2Ij48Y29kZT5EQVRBTjI8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVRBTjIuaHRtbCNBVEFOMiI+QVRBTjI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVEFOSC5odG1sI2luZGV4LURBVEFOSC00NTAiPjxjb2RlPkRBVEFOSDwvY29kZT48L2E+OiA8YSBocmVmPSJBVEFOSC5odG1sI0FUQU5IIj5BVEFOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklEQVRFLmh0bWwjaW5kZXgtZGF0ZV8wMDJjLWN1cnJlbnQtNzM3Ij5kYXRlLCBjdXJyZW50PC9hPjogPGEgaHJlZj0iSURBVEUuaHRtbCNJREFURSI+SURBVEU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGREFURS5odG1sI2luZGV4LWRhdGVfMDAyYy1jdXJyZW50LTYzMSI+ZGF0ZSwgY3VycmVudDwvYT46IDxhIGhyZWY9IkZEQVRFLmh0bWwjRkRBVEUiPkZEQVRFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwjaW5kZXgtZGF0ZV8wMDJjLWN1cnJlbnQtNTY3Ij5kYXRlLCBjdXJyZW50PC9hPjogPGEgaHJlZj0iREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwjREFURV8wMDVmQU5EXzAwNWZUSU1FIj5EQVRFX0FORF9USU1FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwjaW5kZXgtREFURV8wMDVmQU5EXzAwNWZUSU1FLTU2NiI+PGNvZGU+REFURV9BTkRfVElNRTwvY29kZT48L2E+OiA8YSBocmVmPSJEQVRFXzAwNWZBTkRfMDA1ZlRJTUUuaHRtbCNEQVRFXzAwNWZBTkRfMDA1ZlRJTUUiPkRBVEVfQU5EX1RJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkowLmh0bWwjaW5kZXgtREJFU0owLTQ2MyI+PGNvZGU+REJFU0owPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmSjAuaHRtbCNCRVNTRUxfMDA1ZkowIj5CRVNTRUxfSjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkoxLmh0bWwjaW5kZXgtREJFU0oxLTQ2NyI+PGNvZGU+REJFU0oxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmSjEuaHRtbCNCRVNTRUxfMDA1ZkoxIj5CRVNTRUxfSjE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjaW5kZXgtREJFU0pOLTQ3MSI+PGNvZGU+REJFU0pOPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmSk4uaHRtbCNCRVNTRUxfMDA1ZkpOIj5CRVNTRUxfSk48L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZlkwLmh0bWwjaW5kZXgtREJFU1kwLTQ3NSI+PGNvZGU+REJFU1kwPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmWTAuaHRtbCNCRVNTRUxfMDA1ZlkwIj5CRVNTRUxfWTA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZlkxLmh0bWwjaW5kZXgtREJFU1kxLTQ3OSI+PGNvZGU+REJFU1kxPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmWTEuaHRtbCNCRVNTRUxfMDA1ZlkxIj5CRVNTRUxfWTE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjaW5kZXgtREJFU1lOLTQ4MyI+PGNvZGU+REJFU1lOPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJFU1NFTF8wMDVmWU4uaHRtbCNCRVNTRUxfMDA1ZllOIj5CRVNTRUxfWU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJEQkxFLmh0bWwjaW5kZXgtREJMRS01NzEiPjxjb2RlPkRCTEU8L2NvZGU+PC9hPjogPGEgaHJlZj0iREJMRS5odG1sI0RCTEUiPkRCTEU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEQ01QTFguaHRtbCNpbmRleC1EQ01QTFgtNTczIj48Y29kZT5EQ01QTFg8L2NvZGU+PC9hPjogPGEgaHJlZj0iRENNUExYLmh0bWwjRENNUExYIj5EQ01QTFg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT05KRy5odG1sI2luZGV4LURDT05KRy01MzkiPjxjb2RlPkRDT05KRzwvY29kZT48L2E+OiA8YSBocmVmPSJDT05KRy5odG1sI0NPTkpHIj5DT05KRzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPUy5odG1sI2luZGV4LURDT1MtNTQyIj48Y29kZT5EQ09TPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNPUy5odG1sI0NPUyI+Q09TPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ09TSC5odG1sI2luZGV4LURDT1NILTU0OSI+PGNvZGU+RENPU0g8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ09TSC5odG1sI0NPU0giPkNPU0g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJESU0uaHRtbCNpbmRleC1ERElNLTU4MCI+PGNvZGU+RERJTTwvY29kZT48L2E+OiA8YSBocmVmPSJESU0uaHRtbCNESU0iPkRJTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZGVidWdnaW5nLWluZm9ybWF0aW9uLW9wdGlvbnMtMTk2Ij5kZWJ1Z2dpbmcgaW5mb3JtYXRpb24gb3B0aW9uczwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZGVidWdnaW5nXzAwMmMtcHJlcHJvY2Vzc29yLTcxIj5kZWJ1Z2dpbmcsIHByZXByb2Nlc3NvcjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRU5DT0RFLWFuZC1ERUNPREUtc3RhdGVtZW50cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiREVDT0RFXzAwN2QtMzUyIj48Y29kZT5ERUNPREU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRU5DT0RFLWFuZC1ERUNPREUtc3RhdGVtZW50cy5odG1sI0VOQ09ERS1hbmQtREVDT0RFLXN0YXRlbWVudHMiPkVOQ09ERSBhbmQgREVDT0RFIHN0YXRlbWVudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTTEVFUC5odG1sI2luZGV4LWRlbGF5ZWQtZXhlY3V0aW9uLTEwNTQiPmRlbGF5ZWQgZXhlY3V0aW9uPC9hPjogPGEgaHJlZj0iU0xFRVAuaHRtbCNTTEVFUCI+U0xFRVA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBTEFSTS5odG1sI2luZGV4LWRlbGF5ZWQtZXhlY3V0aW9uLTQxMiI+ZGVsYXllZCBleGVjdXRpb248L2E+OiA8YSBocmVmPSJBTEFSTS5odG1sI0FMQVJNIj5BTEFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVYUC5odG1sI2luZGV4LURFWFAtNjE4Ij48Y29kZT5ERVhQPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVYUC5odG1sI0VYUCI+RVhQPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkVBTC5odG1sI2luZGV4LURGTE9BVC05NzUiPjxjb2RlPkRGTE9BVDwvY29kZT48L2E+OiA8YSBocmVmPSJSRUFMLmh0bWwjUkVBTCI+UkVBTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdBTU1BLmh0bWwjaW5kZXgtREdBTU1BLTY2OSI+PGNvZGU+REdBTU1BPC9jb2RlPjwvYT46IDxhIGhyZWY9IkdBTU1BLmh0bWwjR0FNTUEiPkdBTU1BPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1kaWFsZWN0LW9wdGlvbnMtMTkiPmRpYWxlY3Qgb3B0aW9uczwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRElHSVRTLmh0bWwjaW5kZXgtRElHSVRTLTU3NiI+PGNvZGU+RElHSVRTPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRJR0lUUy5odG1sI0RJR0lUUyI+RElHSVRTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRElNLmh0bWwjaW5kZXgtRElNLTU3OCI+PGNvZGU+RElNPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRJTS5odG1sI0RJTSI+RElNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUlNQUcuaHRtbCNpbmRleC1ESU1BRy00MDMiPjxjb2RlPkRJTUFHPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFJTUFHLmh0bWwjQUlNQUciPkFJTUFHPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUlOVC5odG1sI2luZGV4LURJTlQtNDA4Ij48Y29kZT5ESU5UPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFJTlQuaHRtbCNBSU5UIj5BSU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1kaXJlY3RpdmVfMDAyYy1fMDA0MGNvZGVfMDA3YklOQ0xVREVfMDA3ZC0yMDgiPmRpcmVjdGl2ZSwgPGNvZGU+SU5DTFVERTwvY29kZT48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjaW5kZXgtZGlyZWN0b3J5XzAwMmMtb3B0aW9ucy0yMDQiPmRpcmVjdG9yeSwgb3B0aW9uczwvYT46IDxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiPkRpcmVjdG9yeSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1kaXJlY3RvcnlfMDAyYy1zZWFyY2gtcGF0aHMtZm9yLWluY2x1c2lvbi0yMTAiPmRpcmVjdG9yeSwgc2VhcmNoIHBhdGhzIGZvciBpbmNsdXNpb248L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1PRFVMTy5odG1sI2luZGV4LWRpdmlzaW9uXzAwMmMtbW9kdWxvLTkwMCI+ZGl2aXNpb24sIG1vZHVsbzwvYT46IDxhIGhyZWY9Ik1PRFVMTy5odG1sI01PRFVMTyI+TU9EVUxPPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU9ELmh0bWwjaW5kZXgtZGl2aXNpb25fMDAyYy1yZW1haW5kZXItODk3Ij5kaXZpc2lvbiwgcmVtYWluZGVyPC9hPjogPGEgaHJlZj0iTU9ELmh0bWwjTU9EIj5NT0Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMT0dfMDA1ZkdBTU1BLmh0bWwjaW5kZXgtRExHQU1BLTgzMyI+PGNvZGU+RExHQU1BPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxPR18wMDVmR0FNTUEuaHRtbCNMT0dfMDA1ZkdBTU1BIj5MT0dfR0FNTUE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMT0cuaHRtbCNpbmRleC1ETE9HLTgxNyI+PGNvZGU+RExPRzwvY29kZT48L2E+OiA8YSBocmVmPSJMT0cuaHRtbCNMT0ciPkxPRzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxPRzEwLmh0bWwjaW5kZXgtRExPRzEwLTgyNiI+PGNvZGU+RExPRzEwPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxPRzEwLmh0bWwjTE9HMTAiPkxPRzEwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFYLmh0bWwjaW5kZXgtRE1BWDEtODU5Ij48Y29kZT5ETUFYMTwvY29kZT48L2E+OiA8YSBocmVmPSJNQVguaHRtbCNNQVgiPk1BWDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JTi5odG1sI2luZGV4LURNSU4xLTg4NCI+PGNvZGU+RE1JTjE8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlOLmh0bWwjTUlOIj5NSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJNT0QuaHRtbCNpbmRleC1ETU9ELTg5NSI+PGNvZGU+RE1PRDwvY29kZT48L2E+OiA8YSBocmVmPSJNT0QuaHRtbCNNT0QiPk1PRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFOSU5ULmh0bWwjaW5kZXgtRE5JTlQtNDIyIj48Y29kZT5ETklOVDwvY29kZT48L2E+OiA8YSBocmVmPSJBTklOVC5odG1sI0FOSU5UIj5BTklOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRPVF8wMDVmUFJPRFVDVC5odG1sI2luZGV4LWRvdC1wcm9kdWN0LTU4MyI+ZG90IHByb2R1Y3Q8L2E+OiA8YSBocmVmPSJET1RfMDA1ZlBST0RVQ1QuaHRtbCNET1RfMDA1ZlBST0RVQ1QiPkRPVF9QUk9EVUNUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRE9UXzAwNWZQUk9EVUNULmh0bWwjaW5kZXgtRE9UXzAwNWZQUk9EVUNULTU4MiI+PGNvZGU+RE9UX1BST0RVQ1Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iRE9UXzAwNWZQUk9EVUNULmh0bWwjRE9UXzAwNWZQUk9EVUNUIj5ET1RfUFJPRFVDVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRQUk9ELmh0bWwjaW5kZXgtRFBST0QtNTg2Ij48Y29kZT5EUFJPRDwvY29kZT48L2E+OiA8YSBocmVmPSJEUFJPRC5odG1sI0RQUk9EIj5EUFJPRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRSRUFMLmh0bWwjaW5kZXgtRFJFQUwtNTg4Ij48Y29kZT5EUkVBTDwvY29kZT48L2E+OiA8YSBocmVmPSJEUkVBTC5odG1sI0RSRUFMIj5EUkVBTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRTSElGVEwuaHRtbCNpbmRleC1EU0hJRlRMLTU5MCI+PGNvZGU+RFNISUZUTDwvY29kZT48L2E+OiA8YSBocmVmPSJEU0hJRlRMLmh0bWwjRFNISUZUTCI+RFNISUZUTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRTSElGVFIuaHRtbCNpbmRleC1EU0hJRlRSLTU5MyI+PGNvZGU+RFNISUZUUjwvY29kZT48L2E+OiA8YSBocmVmPSJEU0hJRlRSLmh0bWwjRFNISUZUUiI+RFNISUZUUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNJR04uaHRtbCNpbmRleC1EU0lHTi0xMDMwIj48Y29kZT5EU0lHTjwvY29kZT48L2E+OiA8YSBocmVmPSJTSUdOLmh0bWwjU0lHTiI+U0lHTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNJTi5odG1sI2luZGV4LURTSU4tMTAzNSI+PGNvZGU+RFNJTjwvY29kZT48L2E+OiA8YSBocmVmPSJTSU4uaHRtbCNTSU4iPlNJTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNJTkguaHRtbCNpbmRleC1EU0lOSC0xMDQyIj48Y29kZT5EU0lOSDwvY29kZT48L2E+OiA8YSBocmVmPSJTSU5ILmh0bWwjU0lOSCI+U0lOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNRUlQuaHRtbCNpbmRleC1EU1FSVC0xMDYzIj48Y29kZT5EU1FSVDwvY29kZT48L2E+OiA8YSBocmVmPSJTUVJULmh0bWwjU1FSVCI+U1FSVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRBTi5odG1sI2luZGV4LURUQU4tMTA5MCI+PGNvZGU+RFRBTjwvY29kZT48L2E+OiA8YSBocmVmPSJUQU4uaHRtbCNUQU4iPlRBTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRBTkguaHRtbCNpbmRleC1EVEFOSC0xMDk0Ij48Y29kZT5EVEFOSDwvY29kZT48L2E+OiA8YSBocmVmPSJUQU5ILmh0bWwjVEFOSCI+VEFOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRUSU1FLmh0bWwjaW5kZXgtRFRJTUUtNTk2Ij48Y29kZT5EVElNRTwvY29kZT48L2E+OiA8YSBocmVmPSJEVElNRS5odG1sI0RUSU1FIj5EVElNRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1kdW1teS1hcmd1bWVudF8wMDJjLXVudXNlZC0xNzgiPmR1bW15IGFyZ3VtZW50LCB1bnVzZWQ8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNFQ09ORC5odG1sI2luZGV4LWVsYXBzZWQtdGltZS0xMDAzIj5lbGFwc2VkIHRpbWU8L2E+OiA8YSBocmVmPSJTRUNPTkQuaHRtbCNTRUNPTkQiPlNFQ09ORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNFQ05EUy5odG1sI2luZGV4LWVsYXBzZWQtdGltZS0xMDAwIj5lbGFwc2VkIHRpbWU8L2E+OiA8YSBocmVmPSJTRUNORFMuaHRtbCNTRUNORFMiPlNFQ05EUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRUSU1FLmh0bWwjaW5kZXgtZWxhcHNlZC10aW1lLTU5OCI+ZWxhcHNlZCB0aW1lPC9hPjogPGEgaHJlZj0iRFRJTUUuaHRtbCNEVElNRSI+RFRJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtRWxpbWluYXRpb24tb2YtZnVuY3Rpb25zLXdpdGgtaWRlbnRpY2FsLWFyZ3VtZW50LWxpc3RzLTI5MiI+RWxpbWluYXRpb24gb2YgZnVuY3Rpb25zIHdpdGggaWRlbnRpY2FsIGFyZ3VtZW50IGxpc3RzPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFTkNPREUtYW5kLURFQ09ERS1zdGF0ZW1lbnRzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JFTkNPREVfMDA3ZC0zNTEiPjxjb2RlPkVOQ09ERTwvY29kZT48L2E+OiA8YSBocmVmPSJFTkNPREUtYW5kLURFQ09ERS1zdGF0ZW1lbnRzLmh0bWwjRU5DT0RFLWFuZC1ERUNPREUtc3RhdGVtZW50cyI+RU5DT0RFIGFuZCBERUNPREUgc3RhdGVtZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkVOVU1fMDA3ZC1zdGF0ZW1lbnQtMzAyIj48Y29kZT5FTlVNPC9jb2RlPiBzdGF0ZW1lbnQ8L2E+OiA8YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLXN0YXR1cyI+Rm9ydHJhbiAyMDAzIHN0YXR1czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkVOVU1FUkFUT1JfMDA3ZC1zdGF0ZW1lbnQtMzAzIj48Y29kZT5FTlVNRVJBVE9SPC9jb2RlPiBzdGF0ZW1lbnQ8L2E+OiA8YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLXN0YXR1cyI+Rm9ydHJhbiAyMDAzIHN0YXR1czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFLmh0bWwjaW5kZXgtZW52aXJvbm1lbnQtdmFyaWFibGUtNjg4Ij5lbnZpcm9ubWVudCB2YXJpYWJsZTwvYT46IDxhIGhyZWY9IkdFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFLmh0bWwjR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUiPkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVEVOVi5odG1sI2luZGV4LWVudmlyb25tZW50LXZhcmlhYmxlLTY4NiI+ZW52aXJvbm1lbnQgdmFyaWFibGU8L2E+OiA8YSBocmVmPSJHRVRFTlYuaHRtbCNHRVRFTlYiPkdFVEVOVjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJ1bnRpbWUuaHRtbCNpbmRleC1lbnZpcm9ubWVudC12YXJpYWJsZS0yOTYiPmVudmlyb25tZW50IHZhcmlhYmxlPC9hPjogPGEgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC1WYXJpYWJsZXMuaHRtbCNpbmRleC1lbnZpcm9ubWVudC12YXJpYWJsZS0yOTUiPmVudmlyb25tZW50IHZhcmlhYmxlPC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQtVmFyaWFibGVzLmh0bWwjRW52aXJvbm1lbnQtVmFyaWFibGVzIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFT1NISUZULmh0bWwjaW5kZXgtRU9TSElGVC01OTkiPjxjb2RlPkVPU0hJRlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRU9TSElGVC5odG1sI0VPU0hJRlQiPkVPU0hJRlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFUFNJTE9OLmh0bWwjaW5kZXgtRVBTSUxPTi02MDEiPjxjb2RlPkVQU0lMT048L2NvZGU+PC9hPjogPGEgaHJlZj0iRVBTSUxPTi5odG1sI0VQU0lMT04iPkVQU0lMT048L2E+PC9saT4KKzxsaT48YSBocmVmPSJFUkYuaHRtbCNpbmRleC1FUkYtNjAzIj48Y29kZT5FUkY8L2NvZGU+PC9hPjogPGEgaHJlZj0iRVJGLmh0bWwjRVJGIj5FUkY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFUkZDLmh0bWwjaW5kZXgtRVJGQy02MDUiPjxjb2RlPkVSRkM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRVJGQy5odG1sI0VSRkMiPkVSRkM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFUkZDXzAwNWZTQ0FMRUQuaHRtbCNpbmRleC1FUkZDXzAwNWZTQ0FMRUQtNjA3Ij48Y29kZT5FUkZDX1NDQUxFRDwvY29kZT48L2E+OiA8YSBocmVmPSJFUkZDXzAwNWZTQ0FMRUQuaHRtbCNFUkZDXzAwNWZTQ0FMRUQiPkVSRkNfU0NBTEVEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRVJGLmh0bWwjaW5kZXgtZXJyb3ItZnVuY3Rpb24tNjA0Ij5lcnJvciBmdW5jdGlvbjwvYT46IDxhIGhyZWY9IkVSRi5odG1sI0VSRiI+RVJGPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRVJGQy5odG1sI2luZGV4LWVycm9yLWZ1bmN0aW9uXzAwMmMtY29tcGxlbWVudGFyeS02MDYiPmVycm9yIGZ1bmN0aW9uLCBjb21wbGVtZW50YXJ5PC9hPjogPGEgaHJlZj0iRVJGQy5odG1sI0VSRkMiPkVSRkM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFUkZDXzAwNWZTQ0FMRUQuaHRtbCNpbmRleC1lcnJvci1mdW5jdGlvbl8wMDJjLWNvbXBsZW1lbnRhcnlfMDAyYy1leHBvbmVudGlhbGx5XzAwMmRzY2FsZWQtNjA4Ij5lcnJvciBmdW5jdGlvbiwgY29tcGxlbWVudGFyeSwgZXhwb25lbnRpYWxseS1zY2FsZWQ8L2E+OiA8YSBocmVmPSJFUkZDXzAwNWZTQ0FMRUQuaHRtbCNFUkZDXzAwNWZTQ0FMRUQiPkVSRkNfU0NBTEVEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWVycm9yc18wMDJjLWxpbWl0aW5nLTEyNCI+ZXJyb3JzLCBsaW1pdGluZzwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1lc2NhcGUtY2hhcmFjdGVycy0zOSI+ZXNjYXBlIGNoYXJhY3RlcnM8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVUSU1FLmh0bWwjaW5kZXgtRVRJTUUtNjA5Ij48Y29kZT5FVElNRTwvY29kZT48L2E+OiA8YSBocmVmPSJFVElNRS5odG1sI0VUSU1FIj5FVElNRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhZUE9ULmh0bWwjaW5kZXgtRXVjbGlkZWFuLWRpc3RhbmNlLTcwOCI+RXVjbGlkZWFuIGRpc3RhbmNlPC9hPjogPGEgaHJlZj0iSFlQT1QuaHRtbCNIWVBPVCI+SFlQT1Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOT1JNMi5odG1sI2luZGV4LUV1Y2xpZGVhbi12ZWN0b3Itbm9ybS05MTYiPkV1Y2xpZGVhbiB2ZWN0b3Igbm9ybTwvYT46IDxhIGhyZWY9Ik5PUk0yLmh0bWwjTk9STTIiPk5PUk0yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORS5odG1sI2luZGV4LUVYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUtNjExIj48Y29kZT5FWEVDVVRFX0NPTU1BTkRfTElORTwvY29kZT48L2E+OiA8YSBocmVmPSJFWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FLmh0bWwjRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORSI+RVhFQ1VURV9DT01NQU5EX0xJTkU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFWElULmh0bWwjaW5kZXgtRVhJVC02MTQiPjxjb2RlPkVYSVQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRVhJVC5odG1sI0VYSVQiPkVYSVQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFWFAuaHRtbCNpbmRleC1FWFAtNjE3Ij48Y29kZT5FWFA8L2NvZGU+PC9hPjogPGEgaHJlZj0iRVhQLmh0bWwjRVhQIj5FWFA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFWFBPTkVOVC5odG1sI2luZGV4LUVYUE9ORU5ULTYyNCI+PGNvZGU+RVhQT05FTlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRVhQT05FTlQuaHRtbCNFWFBPTkVOVCI+RVhQT05FTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFWFAuaHRtbCNpbmRleC1leHBvbmVudGlhbC1mdW5jdGlvbi02MjIiPmV4cG9uZW50aWFsIGZ1bmN0aW9uPC9hPjogPGEgaHJlZj0iRVhQLmh0bWwjRVhQIj5FWFA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMT0cxMC5odG1sI2luZGV4LWV4cG9uZW50aWFsLWZ1bmN0aW9uXzAwMmMtaW52ZXJzZS04MjciPmV4cG9uZW50aWFsIGZ1bmN0aW9uLCBpbnZlcnNlPC9hPjogPGEgaHJlZj0iTE9HMTAuaHRtbCNMT0cxMCI+TE9HMTA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMT0cuaHRtbCNpbmRleC1leHBvbmVudGlhbC1mdW5jdGlvbl8wMDJjLWludmVyc2UtODIxIj5leHBvbmVudGlhbCBmdW5jdGlvbiwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkxPRy5odG1sI0xPRyI+TE9HPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0laRU9GLmh0bWwjaW5kZXgtZXhwcmVzc2lvbi1zaXplLTEwNTEiPmV4cHJlc3Npb24gc2l6ZTwvYT46IDxhIGhyZWY9IlNJWkVPRi5odG1sI1NJWkVPRiI+U0laRU9GPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDVmU0laRU9GLmh0bWwjaW5kZXgtZXhwcmVzc2lvbi1zaXplLTUxMCI+ZXhwcmVzc2lvbiBzaXplPC9hPjogPGEgaHJlZj0iQ18wMDVmU0laRU9GLmh0bWwjQ18wMDVmU0laRU9GIj5DX1NJWkVPRjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVYVEVORFNfMDA1ZlRZUEVfMDA1Zk9GLmh0bWwjaW5kZXgtRVhURU5EU18wMDVmVFlQRV8wMDVmT0YtNjI3Ij48Y29kZT5FWFRFTkRTX1RZUEVfT0Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iRVhURU5EU18wMDVmVFlQRV8wMDVmT0YuaHRtbCNFWFRFTkRTXzAwNWZUWVBFXzAwNWZPRiI+RVhURU5EU19UWVBFX09GPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXh0ZW5zaW9ucy5odG1sI2luZGV4LWV4dGVuc2lvbnMtMzI5Ij5leHRlbnNpb25zPC9hPjogPGEgaHJlZj0iRXh0ZW5zaW9ucy5odG1sI0V4dGVuc2lvbnMiPkV4dGVuc2lvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjaW5kZXgtZXh0ZW5zaW9uc18wMDJjLWltcGxlbWVudGVkLTMzMCI+ZXh0ZW5zaW9ucywgaW1wbGVtZW50ZWQ8L2E+OiA8YSBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjaW5kZXgtZXh0ZW5zaW9uc18wMDJjLW5vdC1pbXBsZW1lbnRlZC0zNDgiPmV4dGVuc2lvbnMsIG5vdCBpbXBsZW1lbnRlZDwvYT46IDxhIGhyZWY9IkV4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPkV4dGVuc2lvbnMgbm90IGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWV4dHJhLXdhcm5pbmdzLTE1MyI+ZXh0cmEgd2FybmluZ3M8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3YmYyY18wMDdkLWNhbGxpbmctY29udmVudGlvbi0yMzgiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5mMmM8L3NwYW4+PC9zYW1wPiBjYWxsaW5nIGNvbnZlbnRpb248L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdBTU1BLmh0bWwjaW5kZXgtRmFjdG9yaWFsLWZ1bmN0aW9uLTY3MSI+RmFjdG9yaWFsIGZ1bmN0aW9uPC9hPjogPGEgaHJlZj0iR0FNTUEuaHRtbCNHQU1NQSI+R0FNTUE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGREFURS5odG1sI2luZGV4LUZEQVRFLTYyOCI+PGNvZGU+RkRBVEU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRkRBVEUuaHRtbCNGREFURSI+RkRBVEU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNpbmRleC1GRExfMDAyYy1HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UtMTE0NSI+RkRMLCBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+OiA8YSBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZHRVQuaHRtbCNpbmRleC1GR0VULTYzMyI+PGNvZGU+RkdFVDwvY29kZT48L2E+OiA8YSBocmVmPSJGR0VULmh0bWwjRkdFVCI+RkdFVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZHRVRDLmh0bWwjaW5kZXgtRkdFVEMtNjM3Ij48Y29kZT5GR0VUQzwvY29kZT48L2E+OiA8YSBocmVmPSJGR0VUQy5odG1sI0ZHRVRDIj5GR0VUQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZmlsZS1mb3JtYXRfMDAyYy1maXhlZC0yNiI+ZmlsZSBmb3JtYXQsIGZpeGVkPC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWZpbGUtZm9ybWF0XzAwMmMtZnJlZS0yNSI+ZmlsZSBmb3JtYXQsIGZyZWU8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZOVU0uaHRtbCNpbmRleC1maWxlLW9wZXJhdGlvbl8wMDJjLWZpbGUtbnVtYmVyLTY0NyI+ZmlsZSBvcGVyYXRpb24sIGZpbGUgbnVtYmVyPC9hPjogPGEgaHJlZj0iRk5VTS5odG1sI0ZOVU0iPkZOVU08L2E+PC9saT4KKzxsaT48YSBocmVmPSJGTFVTSC5odG1sI2luZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtZmx1c2gtNjQ1Ij5maWxlIG9wZXJhdGlvbiwgZmx1c2g8L2E+OiA8YSBocmVmPSJGTFVTSC5odG1sI0ZMVVNIIj5GTFVTSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZURUxMLmh0bWwjaW5kZXgtZmlsZS1vcGVyYXRpb25fMDAyYy1wb3NpdGlvbi02NjciPmZpbGUgb3BlcmF0aW9uLCBwb3NpdGlvbjwvYT46IDxhIGhyZWY9IkZURUxMLmh0bWwjRlRFTEwiPkZURUxMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlNFRUsuaHRtbCNpbmRleC1maWxlLW9wZXJhdGlvbl8wMDJjLXBvc2l0aW9uLTY2MyI+ZmlsZSBvcGVyYXRpb24sIHBvc2l0aW9uPC9hPjogPGEgaHJlZj0iRlNFRUsuaHRtbCNGU0VFSyI+RlNFRUs8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGR0VUQy5odG1sI2luZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtcmVhZC1jaGFyYWN0ZXItNjQwIj5maWxlIG9wZXJhdGlvbiwgcmVhZCBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJGR0VUQy5odG1sI0ZHRVRDIj5GR0VUQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZHRVQuaHRtbCNpbmRleC1maWxlLW9wZXJhdGlvbl8wMDJjLXJlYWQtY2hhcmFjdGVyLTYzNiI+ZmlsZSBvcGVyYXRpb24sIHJlYWQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iRkdFVC5odG1sI0ZHRVQiPkZHRVQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGU0VFSy5odG1sI2luZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtc2Vlay02NjIiPmZpbGUgb3BlcmF0aW9uLCBzZWVrPC9hPjogPGEgaHJlZj0iRlNFRUsuaHRtbCNGU0VFSyI+RlNFRUs8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUFVUQy5odG1sI2luZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtd3JpdGUtY2hhcmFjdGVyLTY1NSI+ZmlsZSBvcGVyYXRpb24sIHdyaXRlIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkZQVVRDLmh0bWwjRlBVVEMiPkZQVVRDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlBVVC5odG1sI2luZGV4LWZpbGUtb3BlcmF0aW9uXzAwMmMtd3JpdGUtY2hhcmFjdGVyLTY1MSI+ZmlsZSBvcGVyYXRpb24sIHdyaXRlIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkZQVVQuaHRtbCNGUFVUIj5GUFVUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUNDRVNTLmh0bWwjaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1hY2Nlc3MtbW9kZS0zODIiPmZpbGUgc3lzdGVtLCBhY2Nlc3MgbW9kZTwvYT46IDxhIGhyZWY9IkFDQ0VTUy5odG1sI0FDQ0VTUyI+QUNDRVNTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ0hNT0QuaHRtbCNpbmRleC1maWxlLXN5c3RlbV8wMDJjLWNoYW5nZS1hY2Nlc3MtbW9kZS01MjAiPmZpbGUgc3lzdGVtLCBjaGFuZ2UgYWNjZXNzIG1vZGU8L2E+OiA8YSBocmVmPSJDSE1PRC5odG1sI0NITU9EIj5DSE1PRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNZTUxOSy5odG1sI2luZGV4LWZpbGUtc3lzdGVtXzAwMmMtY3JlYXRlLWxpbmstMTA4MiI+ZmlsZSBzeXN0ZW0sIGNyZWF0ZSBsaW5rPC9hPjogPGEgaHJlZj0iU1lNTE5LLmh0bWwjU1lNTE5LIj5TWU1MTks8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMSU5LLmh0bWwjaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1jcmVhdGUtbGluay04MDMiPmZpbGUgc3lzdGVtLCBjcmVhdGUgbGluazwvYT46IDxhIGhyZWY9IkxJTksuaHRtbCNMSU5LIj5MSU5LPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVU1BU0suaHRtbCNpbmRleC1maWxlLXN5c3RlbV8wMDJjLWZpbGUtY3JlYXRpb24tbWFzay0xMTI4Ij5maWxlIHN5c3RlbSwgZmlsZSBjcmVhdGlvbiBtYXNrPC9hPjogPGEgaHJlZj0iVU1BU0suaHRtbCNVTUFTSyI+VU1BU0s8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTVEFULmh0bWwjaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1maWxlLXN0YXR1cy0xMDczIj5maWxlIHN5c3RlbSwgZmlsZSBzdGF0dXM8L2E+OiA8YSBocmVmPSJTVEFULmh0bWwjU1RBVCI+U1RBVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxTVEFULmh0bWwjaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1maWxlLXN0YXR1cy04NDIiPmZpbGUgc3lzdGVtLCBmaWxlIHN0YXR1czwvYT46IDxhIGhyZWY9IkxTVEFULmh0bWwjTFNUQVQiPkxTVEFUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlNUQVQuaHRtbCNpbmRleC1maWxlLXN5c3RlbV8wMDJjLWZpbGUtc3RhdHVzLTY2NSI+ZmlsZSBzeXN0ZW0sIGZpbGUgc3RhdHVzPC9hPjogPGEgaHJlZj0iRlNUQVQuaHRtbCNGU1RBVCI+RlNUQVQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMSU5LLmh0bWwjaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1oYXJkLWxpbmstODA0Ij5maWxlIHN5c3RlbSwgaGFyZCBsaW5rPC9hPjogPGEgaHJlZj0iTElOSy5odG1sI0xJTksiPkxJTks8L2E+PC9saT4KKzxsaT48YSBocmVmPSJVTkxJTksuaHRtbCNpbmRleC1maWxlLXN5c3RlbV8wMDJjLXJlbW92ZS1maWxlLTExMzAiPmZpbGUgc3lzdGVtLCByZW1vdmUgZmlsZTwvYT46IDxhIGhyZWY9IlVOTElOSy5odG1sI1VOTElOSyI+VU5MSU5LPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkVOQU1FLmh0bWwjaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1yZW5hbWUtZmlsZS05ODAiPmZpbGUgc3lzdGVtLCByZW5hbWUgZmlsZTwvYT46IDxhIGhyZWY9IlJFTkFNRS5odG1sI1JFTkFNRSI+UkVOQU1FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1lNTE5LLmh0bWwjaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1zb2Z0LWxpbmstMTA4MyI+ZmlsZSBzeXN0ZW0sIHNvZnQgbGluazwvYT46IDxhIGhyZWY9IlNZTUxOSy5odG1sI1NZTUxOSyI+U1lNTE5LPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ09NUElMRVJfMDA1Zk9QVElPTlMuaHRtbCNpbmRleC1mbGFncy1pbnF1aXJ5LWZ1bmN0aW9uLTUyOSI+ZmxhZ3MgaW5xdWlyeSBmdW5jdGlvbjwvYT46IDxhIGhyZWY9IkNPTVBJTEVSXzAwNWZPUFRJT05TLmh0bWwjQ09NUElMRVJfMDA1Zk9QVElPTlMiPkNPTVBJTEVSX09QVElPTlM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSRUFMLmh0bWwjaW5kZXgtRkxPQVQtOTc0Ij48Y29kZT5GTE9BVDwvY29kZT48L2E+OiA8YSBocmVmPSJSRUFMLmh0bWwjUkVBTCI+UkVBTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVYUE9ORU5ULmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1leHBvbmVudC02MjYiPmZsb2F0aW5nIHBvaW50LCBleHBvbmVudDwvYT46IDxhIGhyZWY9IkVYUE9ORU5ULmh0bWwjRVhQT05FTlQiPkVYUE9ORU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlJBQ1RJT04uaHRtbCNpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLWZyYWN0aW9uLTY1OCI+ZmxvYXRpbmcgcG9pbnQsIGZyYWN0aW9uPC9hPjogPGEgaHJlZj0iRlJBQ1RJT04uaHRtbCNGUkFDVElPTiI+RlJBQ1RJT048L2E+PC9saT4KKzxsaT48YSBocmVmPSJORUFSRVNULmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1uZWFyZXN0LWRpZmZlcmVudC05MDgiPmZsb2F0aW5nIHBvaW50LCBuZWFyZXN0IGRpZmZlcmVudDwvYT46IDxhIGhyZWY9Ik5FQVJFU1QuaHRtbCNORUFSRVNUIj5ORUFSRVNUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBQ0lORy5odG1sI2luZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtcmVsYXRpdmUtc3BhY2luZy0xMDU3Ij5mbG9hdGluZyBwb2ludCwgcmVsYXRpdmUgc3BhY2luZzwvYT46IDxhIGhyZWY9IlNQQUNJTkcuaHRtbCNTUEFDSU5HIj5TUEFDSU5HPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUlJTUEFDSU5HLmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1yZWxhdGl2ZS1zcGFjaW5nLTk4OSI+ZmxvYXRpbmcgcG9pbnQsIHJlbGF0aXZlIHNwYWNpbmc8L2E+OiA8YSBocmVmPSJSUlNQQUNJTkcuaHRtbCNSUlNQQUNJTkciPlJSU1BBQ0lORzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNDQUxFLmh0bWwjaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1zY2FsZS05OTUiPmZsb2F0aW5nIHBvaW50LCBzY2FsZTwvYT46IDxhIGhyZWY9IlNDQUxFLmh0bWwjU0NBTEUiPlNDQUxFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0VUXzAwNWZFWFBPTkVOVC5odG1sI2luZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtc2V0LWV4cG9uZW50LTEwMTYiPmZsb2F0aW5nIHBvaW50LCBzZXQgZXhwb25lbnQ8L2E+OiA8YSBocmVmPSJTRVRfMDA1ZkVYUE9ORU5ULmh0bWwjU0VUXzAwNWZFWFBPTkVOVCI+U0VUX0VYUE9ORU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRkxPT1IuaHRtbCNpbmRleC1mbG9vci02NDIiPmZsb29yPC9hPjogPGEgaHJlZj0iRkxPT1IuaHRtbCNGTE9PUiI+RkxPT1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGTE9PUi5odG1sI2luZGV4LUZMT09SLTY0MSI+PGNvZGU+RkxPT1I8L2NvZGU+PC9hPjogPGEgaHJlZj0iRkxPT1IuaHRtbCNGTE9PUiI+RkxPT1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBSU5ULmh0bWwjaW5kZXgtZmxvb3ItNDA5Ij5mbG9vcjwvYT46IDxhIGhyZWY9IkFJTlQuaHRtbCNBSU5UIj5BSU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRkxVU0guaHRtbCNpbmRleC1GTFVTSC02NDQiPjxjb2RlPkZMVVNIPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZMVVNILmh0bWwjRkxVU0giPkZMVVNIPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiRkxVU0hfMDA3ZC1zdGF0ZW1lbnQtMjk5Ij48Y29kZT5GTFVTSDwvY29kZT4gc3RhdGVtZW50PC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGTlVNLmh0bWwjaW5kZXgtRk5VTS02NDYiPjxjb2RlPkZOVU08L2NvZGU+PC9hPjogPGEgaHJlZj0iRk5VTS5odG1sI0ZOVU0iPkZOVU08L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJpYWJsZS1GT1JNQVQtZXhwcmVzc2lvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkZPUk1BVF8wMDdkLTM1MyI+PGNvZGU+Rk9STUFUPC9jb2RlPjwvYT46IDxhIGhyZWY9IlZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucy5odG1sI1ZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucyI+VmFyaWFibGUgRk9STUFUIGV4cHJlc3Npb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR05VLUZvcnRyYW4tYW5kLUc3Ny5odG1sI2luZGV4LUZvcnRyYW4tNzctOSI+Rm9ydHJhbiA3NzwvYT46IDxhIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HNzcuaHRtbCNHTlUtRm9ydHJhbi1hbmQtRzc3Ij5HTlUgRm9ydHJhbiBhbmQgRzc3PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNpbmRleC1GUFAtNSI+RlBQPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiI+UHJlcHJvY2Vzc2luZyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUFVULmh0bWwjaW5kZXgtRlBVVC02NDgiPjxjb2RlPkZQVVQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlBVVC5odG1sI0ZQVVQiPkZQVVQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUFVUQy5odG1sI2luZGV4LUZQVVRDLTY1MiI+PGNvZGU+RlBVVEM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlBVVEMuaHRtbCNGUFVUQyI+RlBVVEM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUkFDVElPTi5odG1sI2luZGV4LUZSQUNUSU9OLTY1NiI+PGNvZGU+RlJBQ1RJT048L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJBQ1RJT04uaHRtbCNGUkFDVElPTiI+RlJBQ1RJT048L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUkVFLmh0bWwjaW5kZXgtRlJFRS02NTkiPjxjb2RlPkZSRUU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlJFRS5odG1sI0ZSRUUiPkZSRUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtRnJvbnRfMDAyZGVuZC1vcHRpbWl6YXRpb24tMjk0Ij5Gcm9udC1lbmQgb3B0aW1pemF0aW9uPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGU0VFSy5odG1sI2luZGV4LUZTRUVLLTY2MSI+PGNvZGU+RlNFRUs8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlNFRUsuaHRtbCNGU0VFSyI+RlNFRUs8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGU1RBVC5odG1sI2luZGV4LUZTVEFULTY2NCI+PGNvZGU+RlNUQVQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlNUQVQuaHRtbCNGU1RBVCI+RlNUQVQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGVEVMTC5odG1sI2luZGV4LUZURUxMLTY2NiI+PGNvZGU+RlRFTEw8L2NvZGU+PC9hPjogPGEgaHJlZj0iRlRFTEwuaHRtbCNGVEVMTCI+RlRFTEw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZnVuY3Rpb24tZWxpbWluYXRpb24tMTg2Ij5mdW5jdGlvbiBlbGltaW5hdGlvbjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR05VLUZvcnRyYW4tYW5kLUc3Ny5odG1sI2luZGV4LWdfdF8wMDQwY29tbWFuZF8wMDdiZzc3XzAwN2QtMTAiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPjwvYT46IDxhIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HNzcuaHRtbCNHTlUtRm9ydHJhbi1hbmQtRzc3Ij5HTlUgRm9ydHJhbiBhbmQgRzc3PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29tbWFuZF8wMDdiZzc3XzAwN2QtY2FsbGluZy1jb252ZW50aW9uLTIzOSI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmc3Nzwvc3Bhbj48L3NhbXA+IGNhbGxpbmcgY29udmVudGlvbjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR0FNTUEuaHRtbCNpbmRleC1HQU1NQS02NjgiPjxjb2RlPkdBTU1BPC9jb2RlPjwvYT46IDxhIGhyZWY9IkdBTU1BLmh0bWwjR0FNTUEiPkdBTU1BPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR0FNTUEuaHRtbCNpbmRleC1HYW1tYS1mdW5jdGlvbi02NzAiPkdhbW1hIGZ1bmN0aW9uPC9hPjogPGEgaHJlZj0iR0FNTUEuaHRtbCNHQU1NQSI+R0FNTUE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMT0dfMDA1ZkdBTU1BLmh0bWwjaW5kZXgtR2FtbWEtZnVuY3Rpb25fMDAyYy1sb2dhcml0aG0tb2YtODM0Ij5HYW1tYSBmdW5jdGlvbiwgbG9nYXJpdGhtIG9mPC9hPjogPGEgaHJlZj0iTE9HXzAwNWZHQU1NQS5odG1sI0xPR18wMDVmR0FNTUEiPkxPR19HQU1NQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HQ0MuaHRtbCNpbmRleC1HQ0MtMyI+R0NDPC9hPjogPGEgaHJlZj0iR05VLUZvcnRyYW4tYW5kLUdDQy5odG1sI0dOVS1Gb3J0cmFuLWFuZC1HQ0MiPkdOVSBGb3J0cmFuIGFuZCBHQ0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVJST1IuaHRtbCNpbmRleC1HRVJST1ItNjcyIj48Y29kZT5HRVJST1I8L2NvZGU+PC9hPjogPGEgaHJlZj0iR0VSUk9SLmh0bWwjR0VSUk9SIj5HRVJST1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRfMDA1ZkNPTU1BTkQuaHRtbCNpbmRleC1HRVRfMDA1ZkNPTU1BTkQtNjc3Ij48Y29kZT5HRVRfQ09NTUFORDwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRfMDA1ZkNPTU1BTkQuaHRtbCNHRVRfMDA1ZkNPTU1BTkQiPkdFVF9DT01NQU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sI2luZGV4LUdFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQtNjgwIj48Y29kZT5HRVRfQ09NTUFORF9BUkdVTUVOVDwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRfMDA1ZkNPTU1BTkRfMDA1ZkFSR1VNRU5ULmh0bWwjR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVCI+R0VUX0NPTU1BTkRfQVJHVU1FTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRfMDA1ZkVOVklST05NRU5UXzAwNWZWQVJJQUJMRS5odG1sI2luZGV4LUdFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFLTY4NyI+PGNvZGU+R0VUX0VOVklST05NRU5UX1ZBUklBQkxFPC9jb2RlPjwvYT46IDxhIGhyZWY9IkdFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFLmh0bWwjR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUiPkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVEFSRy5odG1sI2luZGV4LUdFVEFSRy02NzQiPjxjb2RlPkdFVEFSRzwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRBUkcuaHRtbCNHRVRBUkciPkdFVEFSRzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVENXRC5odG1sI2luZGV4LUdFVENXRC02ODMiPjxjb2RlPkdFVENXRDwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRDV0QuaHRtbCNHRVRDV0QiPkdFVENXRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVEVOVi5odG1sI2luZGV4LUdFVEVOVi02ODUiPjxjb2RlPkdFVEVOVjwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRFTlYuaHRtbCNHRVRFTlYiPkdFVEVOVjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVEdJRC5odG1sI2luZGV4LUdFVEdJRC02ODkiPjxjb2RlPkdFVEdJRDwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRHSUQuaHRtbCNHRVRHSUQiPkdFVEdJRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVExPRy5odG1sI2luZGV4LUdFVExPRy02OTEiPjxjb2RlPkdFVExPRzwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRMT0cuaHRtbCNHRVRMT0ciPkdFVExPRzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVFBJRC5odG1sI2luZGV4LUdFVFBJRC02OTQiPjxjb2RlPkdFVFBJRDwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRQSUQuaHRtbCNHRVRQSUQiPkdFVFBJRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVFVJRC5odG1sI2luZGV4LUdFVFVJRC02OTciPjxjb2RlPkdFVFVJRDwvY29kZT48L2E+OiA8YSBocmVmPSJHRVRVSUQuaHRtbCNHRVRVSUQiPkdFVFVJRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdNVElNRS5odG1sI2luZGV4LUdNVElNRS03MDAiPjxjb2RlPkdNVElNRTwvY29kZT48L2E+OiA8YSBocmVmPSJHTVRJTUUuaHRtbCNHTVRJTUUiPkdNVElNRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HQ0MuaHRtbCNpbmRleC1HTlUtQ29tcGlsZXItQ29sbGVjdGlvbi0yIj5HTlUgQ29tcGlsZXIgQ29sbGVjdGlvbjwvYT46IDxhIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HQ0MuaHRtbCNHTlUtRm9ydHJhbi1hbmQtR0NDIj5HTlUgRm9ydHJhbiBhbmQgR0NDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNpbmRleC1HTlUtRm9ydHJhbi1jb21tYW5kLW9wdGlvbnMtMTUiPkdOVSBGb3J0cmFuIGNvbW1hbmQgb3B0aW9uczwvYT46IDxhIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iPkludm9raW5nIEdOVSBGb3J0cmFuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSG9sbGVyaXRoLWNvbnN0YW50cy1zdXBwb3J0Lmh0bWwjaW5kZXgtSG9sbGVyaXRoLWNvbnN0YW50cy0zNDAiPkhvbGxlcml0aCBjb25zdGFudHM8L2E+OiA8YSBocmVmPSJIb2xsZXJpdGgtY29uc3RhbnRzLXN1cHBvcnQuaHRtbCNIb2xsZXJpdGgtY29uc3RhbnRzLXN1cHBvcnQiPkhvbGxlcml0aCBjb25zdGFudHMgc3VwcG9ydDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhPU1ROTS5odG1sI2luZGV4LUhPU1ROTS03MDIiPjxjb2RlPkhPU1ROTTwvY29kZT48L2E+OiA8YSBocmVmPSJIT1NUTk0uaHRtbCNIT1NUTk0iPkhPU1ROTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhVR0UuaHRtbCNpbmRleC1IVUdFLTcwNCI+PGNvZGU+SFVHRTwvY29kZT48L2E+OiA8YSBocmVmPSJIVUdFLmh0bWwjSFVHRSI+SFVHRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPU0guaHRtbCNpbmRleC1oeXBlcmJvbGljLWNvc2luZS01NTAiPmh5cGVyYm9saWMgY29zaW5lPC9hPjogPGEgaHJlZj0iQ09TSC5odG1sI0NPU0giPkNPU0g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT1NILmh0bWwjaW5kZXgtaHlwZXJib2xpYy1mdW5jdGlvbl8wMDJjLWNvc2luZS01NTEiPmh5cGVyYm9saWMgZnVuY3Rpb24sIGNvc2luZTwvYT46IDxhIGhyZWY9IkNPU0guaHRtbCNDT1NIIj5DT1NIPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUNPU0guaHRtbCNpbmRleC1oeXBlcmJvbGljLWZ1bmN0aW9uXzAwMmMtY29zaW5lXzAwMmMtaW52ZXJzZS0zOTQiPmh5cGVyYm9saWMgZnVuY3Rpb24sIGNvc2luZSwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkFDT1NILmh0bWwjQUNPU0giPkFDT1NIPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0lOSC5odG1sI2luZGV4LWh5cGVyYm9saWMtZnVuY3Rpb25fMDAyYy1zaW5lLTEwNDQiPmh5cGVyYm9saWMgZnVuY3Rpb24sIHNpbmU8L2E+OiA8YSBocmVmPSJTSU5ILmh0bWwjU0lOSCI+U0lOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFTSU5ILmh0bWwjaW5kZXgtaHlwZXJib2xpYy1mdW5jdGlvbl8wMDJjLXNpbmVfMDAyYy1pbnZlcnNlLTQzNiI+aHlwZXJib2xpYyBmdW5jdGlvbiwgc2luZSwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkFTSU5ILmh0bWwjQVNJTkgiPkFTSU5IPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEFOSC5odG1sI2luZGV4LWh5cGVyYm9saWMtZnVuY3Rpb25fMDAyYy10YW5nZW50LTEwOTYiPmh5cGVyYm9saWMgZnVuY3Rpb24sIHRhbmdlbnQ8L2E+OiA8YSBocmVmPSJUQU5ILmh0bWwjVEFOSCI+VEFOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFUQU5ILmh0bWwjaW5kZXgtaHlwZXJib2xpYy1mdW5jdGlvbl8wMDJjLXRhbmdlbnRfMDAyYy1pbnZlcnNlLTQ1MyI+aHlwZXJib2xpYyBmdW5jdGlvbiwgdGFuZ2VudCwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkFUQU5ILmh0bWwjQVRBTkgiPkFUQU5IPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0lOSC5odG1sI2luZGV4LWh5cGVyYm9saWMtc2luZS0xMDQzIj5oeXBlcmJvbGljIHNpbmU8L2E+OiA8YSBocmVmPSJTSU5ILmh0bWwjU0lOSCI+U0lOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRBTkguaHRtbCNpbmRleC1oeXBlcmJvbGljLXRhbmdlbnQtMTA5NSI+aHlwZXJib2xpYyB0YW5nZW50PC9hPjogPGEgaHJlZj0iVEFOSC5odG1sI1RBTkgiPlRBTkg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIWVBPVC5odG1sI2luZGV4LUhZUE9ULTcwNyI+PGNvZGU+SFlQT1Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iSFlQT1QuaHRtbCNIWVBPVCI+SFlQT1Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJXzAwMmZPLWl0ZW0tbGlzdHMuaHRtbCNpbmRleC1JXzAwMmZPLWl0ZW0tbGlzdHMtMzMzIj5JL08gaXRlbSBsaXN0czwvYT46IDxhIGhyZWY9IklfMDAyZk8taXRlbS1saXN0cy5odG1sI0lfMDAyZk8taXRlbS1saXN0cyI+SS9PIGl0ZW0gbGlzdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQlMuaHRtbCNpbmRleC1JQUJTLTM3NyI+PGNvZGU+SUFCUzwvY29kZT48L2E+OiA8YSBocmVmPSJBQlMuaHRtbCNBQlMiPkFCUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBQ0hBUi5odG1sI2luZGV4LUlBQ0hBUi03MDkiPjxjb2RlPklBQ0hBUjwvY29kZT48L2E+OiA8YSBocmVmPSJJQUNIQVIuaHRtbCNJQUNIQVIiPklBQ0hBUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBTEwuaHRtbCNpbmRleC1JQUxMLTcxMyI+PGNvZGU+SUFMTDwvY29kZT48L2E+OiA8YSBocmVmPSJJQUxMLmh0bWwjSUFMTCI+SUFMTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBTkQuaHRtbCNpbmRleC1JQU5ELTcxNiI+PGNvZGU+SUFORDwvY29kZT48L2E+OiA8YSBocmVmPSJJQU5ELmh0bWwjSUFORCI+SUFORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBTlkuaHRtbCNpbmRleC1JQU5ZLTcxOSI+PGNvZGU+SUFOWTwvY29kZT48L2E+OiA8YSBocmVmPSJJQU5ZLmh0bWwjSUFOWSI+SUFOWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklBUkdDLmh0bWwjaW5kZXgtSUFSR0MtNzIyIj48Y29kZT5JQVJHQzwvY29kZT48L2E+OiA8YSBocmVmPSJJQVJHQy5odG1sI0lBUkdDIj5JQVJHQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklCQ0xSLmh0bWwjaW5kZXgtSUJDTFItNzI2Ij48Y29kZT5JQkNMUjwvY29kZT48L2E+OiA8YSBocmVmPSJJQkNMUi5odG1sI0lCQ0xSIj5JQkNMUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklCSVRTLmh0bWwjaW5kZXgtSUJJVFMtNzI5Ij48Y29kZT5JQklUUzwvY29kZT48L2E+OiA8YSBocmVmPSJJQklUUy5odG1sI0lCSVRTIj5JQklUUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklCU0VULmh0bWwjaW5kZXgtSUJTRVQtNzMyIj48Y29kZT5JQlNFVDwvY29kZT48L2E+OiA8YSBocmVmPSJJQlNFVC5odG1sI0lCU0VUIj5JQlNFVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklDSEFSLmh0bWwjaW5kZXgtSUNIQVItNzM0Ij48Y29kZT5JQ0hBUjwvY29kZT48L2E+OiA8YSBocmVmPSJJQ0hBUi5odG1sI0lDSEFSIj5JQ0hBUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklEQVRFLmh0bWwjaW5kZXgtSURBVEUtNzM2Ij48Y29kZT5JREFURTwvY29kZT48L2E+OiA8YSBocmVmPSJJREFURS5odG1sI0lEQVRFIj5JREFURTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRJTS5odG1sI2luZGV4LUlESU0tNTc5Ij48Y29kZT5JRElNPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRJTS5odG1sI0RJTSI+RElNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU5ULmh0bWwjaW5kZXgtSURJTlQtNzUyIj48Y29kZT5JRElOVDwvY29kZT48L2E+OiA8YSBocmVmPSJJTlQuaHRtbCNJTlQiPklOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5JTlQuaHRtbCNpbmRleC1JRE5JTlQtOTEzIj48Y29kZT5JRE5JTlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTklOVC5odG1sI05JTlQiPk5JTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJU05BTi5odG1sI2luZGV4LUlFRUVfMDAyYy1JU05BTi03NzkiPklFRUUsIElTTkFOPC9hPjogPGEgaHJlZj0iSVNOQU4uaHRtbCNJU05BTiI+SVNOQU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJJRU9SLmh0bWwjaW5kZXgtSUVPUi03MzkiPjxjb2RlPklFT1I8L2NvZGU+PC9hPjogPGEgaHJlZj0iSUVPUi5odG1sI0lFT1IiPklFT1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJRVJSTk8uaHRtbCNpbmRleC1JRVJSTk8tNzQyIj48Y29kZT5JRVJSTk88L2NvZGU+PC9hPjogPGEgaHJlZj0iSUVSUk5PLmh0bWwjSUVSUk5PIj5JRVJSTk88L2E+PC9saT4KKzxsaT48YSBocmVmPSJJTlQuaHRtbCNpbmRleC1JRklYLTc1MSI+PGNvZGU+SUZJWDwvY29kZT48L2E+OiA8YSBocmVmPSJJTlQuaHRtbCNJTlQiPklOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFJTUFHLmh0bWwjaW5kZXgtSU1BRy00MDQiPjxjb2RlPklNQUc8L2NvZGU+PC9hPjogPGEgaHJlZj0iQUlNQUcuaHRtbCNBSU1BRyI+QUlNQUc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJTUFHRV8wMDVmSU5ERVguaHRtbCNpbmRleC1JTUFHRV8wMDVmSU5ERVgtNzQ0Ij48Y29kZT5JTUFHRV9JTkRFWDwvY29kZT48L2E+OiA8YSBocmVmPSJJTUFHRV8wMDVmSU5ERVguaHRtbCNJTUFHRV8wMDVmSU5ERVgiPklNQUdFX0lOREVYPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU1BR0VfMDA1ZklOREVYLmh0bWwjaW5kZXgtaW1hZ2VzXzAwMmMtY29zdWJzY3JpcHQtdG8taW1hZ2UtaW5kZXgtY29udmVyc2lvbi03NDYiPmltYWdlcywgY29zdWJzY3JpcHQgdG8gaW1hZ2UgaW5kZXggY29udmVyc2lvbjwvYT46IDxhIGhyZWY9IklNQUdFXzAwNWZJTkRFWC5odG1sI0lNQUdFXzAwNWZJTkRFWCI+SU1BR0VfSU5ERVg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSElTXzAwNWZJTUFHRS5odG1sI2luZGV4LWltYWdlc18wMDJjLWluZGV4LW9mLXRoaXMtaW1hZ2UtMTEwMCI+aW1hZ2VzLCBpbmRleCBvZiB0aGlzIGltYWdlPC9hPjogPGEgaHJlZj0iVEhJU18wMDVmSU1BR0UuaHRtbCNUSElTXzAwNWZJTUFHRSI+VEhJU19JTUFHRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5VTV8wMDVmSU1BR0VTLmh0bWwjaW5kZXgtaW1hZ2VzXzAwMmMtbnVtYmVyLW9mLTkyOCI+aW1hZ2VzLCBudW1iZXIgb2Y8L2E+OiA8YSBocmVmPSJOVU1fMDA1ZklNQUdFUy5odG1sI05VTV8wMDVmSU1BR0VTIj5OVU1fSU1BR0VTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUlNQUcuaHRtbCNpbmRleC1JTUFHUEFSVC00MDUiPjxjb2RlPklNQUdQQVJUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFJTUFHLmh0bWwjQUlNQUciPkFJTUFHPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiSU1QT1JUXzAwN2Qtc3RhdGVtZW50LTMxOSI+PGNvZGU+SU1QT1JUPC9jb2RlPiBzdGF0ZW1lbnQ8L2E+OiA8YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLXN0YXR1cyI+Rm9ydHJhbiAyMDAzIHN0YXR1czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JJTkNMVURFXzAwN2QtZGlyZWN0aXZlLTIwNyI+PGNvZGU+SU5DTFVERTwvY29kZT4gZGlyZWN0aXZlPC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI2luZGV4LWluY2x1c2lvbl8wMDJjLWRpcmVjdG9yeS1zZWFyY2gtcGF0aHMtZm9yLTIxMSI+aW5jbHVzaW9uLCBkaXJlY3Rvcnkgc2VhcmNoIHBhdGhzIGZvcjwvYT46IDxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiPkRpcmVjdG9yeSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU5ERVgtaW50cmluc2ljLmh0bWwjaW5kZXgtSU5ERVgtNzQ3Ij48Y29kZT5JTkRFWDwvY29kZT48L2E+OiA8YSBocmVmPSJJTkRFWC1pbnRyaW5zaWMuaHRtbCNJTkRFWC1pbnRyaW5zaWMiPklOREVYIGludHJpbnNpYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklOVC5odG1sI2luZGV4LUlOVC03NTAiPjxjb2RlPklOVDwvY29kZT48L2E+OiA8YSBocmVmPSJJTlQuaHRtbCNJTlQiPklOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklOVDIuaHRtbCNpbmRleC1JTlQyLTc1NCI+PGNvZGU+SU5UMjwvY29kZT48L2E+OiA8YSBocmVmPSJJTlQyLmh0bWwjSU5UMiI+SU5UMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklOVDguaHRtbCNpbmRleC1JTlQ4LTc1NyI+PGNvZGU+SU5UODwvY29kZT48L2E+OiA8YSBocmVmPSJJTlQ4Lmh0bWwjSU5UOCI+SU5UODwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQuaHRtbCNpbmRleC1pbnRlZ2VyLWtpbmQtMTAwOCI+aW50ZWdlciBraW5kPC9hPjogPGEgaHJlZj0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQiPlNFTEVDVEVEX0lOVF9LSU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwjaW5kZXgtSW50ZXJvcGVyYWJpbGl0eS0zNTUiPkludGVyb3BlcmFiaWxpdHk8L2E+OiA8YSBocmVmPSJNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmcuaHRtbCNNaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmciPk1peGVkLUxhbmd1YWdlIFByb2dyYW1taW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWludHJpbnNpYy0xNzQiPmludHJpbnNpYzwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW50cmluc2ljLU1vZHVsZXMuaHRtbCNpbmRleC1pbnRyaW5zaWMtTW9kdWxlcy0xMTQwIj5pbnRyaW5zaWMgTW9kdWxlczwvYT46IDxhIGhyZWY9IkludHJpbnNpYy1Nb2R1bGVzLmh0bWwjSW50cmluc2ljLU1vZHVsZXMiPkludHJpbnNpYyBNb2R1bGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNpbmRleC1pbnRyaW5zaWMtcHJvY2VkdXJlcy0zNjkiPmludHJpbnNpYyBwcm9jZWR1cmVzPC9hPjogPGEgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI2luZGV4LUludHJvZHVjdGlvbi0xIj5JbnRyb2R1Y3Rpb248L2E+OiA8YSBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUNPU0guaHRtbCNpbmRleC1pbnZlcnNlLWh5cGVyYm9saWMtY29zaW5lLTM5MyI+aW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZTwvYT46IDxhIGhyZWY9IkFDT1NILmh0bWwjQUNPU0giPkFDT1NIPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVNJTkguaHRtbCNpbmRleC1pbnZlcnNlLWh5cGVyYm9saWMtc2luZS00MzUiPmludmVyc2UgaHlwZXJib2xpYyBzaW5lPC9hPjogPGEgaHJlZj0iQVNJTkguaHRtbCNBU0lOSCI+QVNJTkg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVEFOSC5odG1sI2luZGV4LWludmVyc2UtaHlwZXJib2xpYy10YW5nZW50LTQ1MiI+aW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQ8L2E+OiA8YSBocmVmPSJBVEFOSC5odG1sI0FUQU5IIj5BVEFOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YklPTVNHXzAwM2RfMDA3ZC1zcGVjaWZpZXItMzAxIj48Y29kZT5JT01TRz08L2NvZGU+IHNwZWNpZmllcjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU9SLmh0bWwjaW5kZXgtSU9SLTc1OSI+PGNvZGU+SU9SPC9jb2RlPjwvYT46IDxhIGhyZWY9IklPUi5odG1sI0lPUiI+SU9SPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVNfMDA1ZklPU1RBVF8wMDVmRU5ELmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JJT1NUQVRfMDA3ZF8wMDJjLWVuZC1vZi1maWxlLTc2OSI+PGNvZGU+SU9TVEFUPC9jb2RlPiwgZW5kIG9mIGZpbGU8L2E+OiA8YSBocmVmPSJJU18wMDVmSU9TVEFUXzAwNWZFTkQuaHRtbCNJU18wMDVmSU9TVEFUXzAwNWZFTkQiPklTX0lPU1RBVF9FTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJU18wMDVmSU9TVEFUXzAwNWZFT1IuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YklPU1RBVF8wMDdkXzAwMmMtZW5kLW9mLXJlY29yZC03NzEiPjxjb2RlPklPU1RBVDwvY29kZT4sIGVuZCBvZiByZWNvcmQ8L2E+OiA8YSBocmVmPSJJU18wMDVmSU9TVEFUXzAwNWZFT1IuaHRtbCNJU18wMDVmSU9TVEFUXzAwNWZFT1IiPklTX0lPU1RBVF9FT1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUEFSSVRZLmh0bWwjaW5kZXgtSVBBUklUWS03NjIiPjxjb2RlPklQQVJJVFk8L2NvZGU+PC9hPjogPGEgaHJlZj0iSVBBUklUWS5odG1sI0lQQVJJVFkiPklQQVJJVFk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJUkFORC5odG1sI2luZGV4LUlSQU5ELTc2NiI+PGNvZGU+SVJBTkQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSVJBTkQuaHRtbCNJUkFORCI+SVJBTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJU18wMDVmSU9TVEFUXzAwNWZFTkQuaHRtbCNpbmRleC1JU18wMDVmSU9TVEFUXzAwNWZFTkQtNzY4Ij48Y29kZT5JU19JT1NUQVRfRU5EPC9jb2RlPjwvYT46IDxhIGhyZWY9IklTXzAwNWZJT1NUQVRfMDA1ZkVORC5odG1sI0lTXzAwNWZJT1NUQVRfMDA1ZkVORCI+SVNfSU9TVEFUX0VORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklTXzAwNWZJT1NUQVRfMDA1ZkVPUi5odG1sI2luZGV4LUlTXzAwNWZJT1NUQVRfMDA1ZkVPUi03NzAiPjxjb2RlPklTX0lPU1RBVF9FT1I8L2NvZGU+PC9hPjogPGEgaHJlZj0iSVNfMDA1ZklPU1RBVF8wMDVmRU9SLmh0bWwjSVNfMDA1ZklPU1RBVF8wMDVmRU9SIj5JU19JT1NUQVRfRU9SPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVNBVFRZLmh0bWwjaW5kZXgtSVNBVFRZLTc3MiI+PGNvZGU+SVNBVFRZPC9jb2RlPjwvYT46IDxhIGhyZWY9IklTQVRUWS5odG1sI0lTQVRUWSI+SVNBVFRZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVNIRlQuaHRtbCNpbmRleC1JU0hGVC03NzQiPjxjb2RlPklTSEZUPC9jb2RlPjwvYT46IDxhIGhyZWY9IklTSEZULmh0bWwjSVNIRlQiPklTSEZUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVNIRlRDLmh0bWwjaW5kZXgtSVNIRlRDLTc3NiI+PGNvZGU+SVNIRlRDPC9jb2RlPjwvYT46IDxhIGhyZWY9IklTSEZUQy5odG1sI0lTSEZUQyI+SVNIRlRDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0lHTi5odG1sI2luZGV4LUlTSUdOLTEwMjkiPjxjb2RlPklTSUdOPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNJR04uaHRtbCNTSUdOIj5TSUdOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVNOQU4uaHRtbCNpbmRleC1JU05BTi03NzgiPjxjb2RlPklTTkFOPC9jb2RlPjwvYT46IDxhIGhyZWY9IklTTkFOLmh0bWwjSVNOQU4iPklTTkFOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlZfMDA3ZC1zdGF0ZW1lbnQtMzIzIj48Y29kZT5JU09fRk9SVFJBTl9FTlY8L2NvZGU+IHN0YXRlbWVudDwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVRJTUUuaHRtbCNpbmRleC1JVElNRS03ODAiPjxjb2RlPklUSU1FPC9jb2RlPjwvYT46IDxhIGhyZWY9IklUSU1FLmh0bWwjSVRJTUUiPklUSU1FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iS0lMTC5odG1sI2luZGV4LUtJTEwtNzgzIj48Y29kZT5LSUxMPC9jb2RlPjwvYT46IDxhIGhyZWY9IktJTEwuaHRtbCNLSUxMIj5LSUxMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iS0lORC5odG1sI2luZGV4LWtpbmQtNzg1Ij5raW5kPC9hPjogPGEgaHJlZj0iS0lORC5odG1sI0tJTkQiPktJTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJLSU5ELmh0bWwjaW5kZXgtS0lORC03ODQiPjxjb2RlPktJTkQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iS0lORC5odG1sI0tJTkQiPktJTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJLSU5ELVR5cGUtUGFyYW1ldGVycy5odG1sI2luZGV4LWtpbmQtMzI1Ij5raW5kPC9hPjogPGEgaHJlZj0iS0lORC1UeXBlLVBhcmFtZXRlcnMuaHRtbCNLSU5ELVR5cGUtUGFyYW1ldGVycyI+S0lORCBUeXBlIFBhcmFtZXRlcnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTRUxFQ1RFRF8wMDVmQ0hBUl8wMDVmS0lORC5odG1sI2luZGV4LWtpbmRfMDAyYy1jaGFyYWN0ZXItMTAwNiI+a2luZCwgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQuaHRtbCNTRUxFQ1RFRF8wMDVmQ0hBUl8wMDVmS0lORCI+U0VMRUNURURfQ0hBUl9LSU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sI2luZGV4LWtpbmRfMDAyYy1pbnRlZ2VyLTEwMDkiPmtpbmQsIGludGVnZXI8L2E+OiA8YSBocmVmPSJTRUxFQ1RFRF8wMDVmSU5UXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORCI+U0VMRUNURURfSU5UX0tJTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPbGRfMDAyZHN0eWxlLWtpbmQtc3BlY2lmaWNhdGlvbnMuaHRtbCNpbmRleC1raW5kXzAwMmMtb2xkXzAwMmRzdHlsZS0zMzEiPmtpbmQsIG9sZC1zdHlsZTwvYT46IDxhIGhyZWY9Ik9sZF8wMDJkc3R5bGUta2luZC1zcGVjaWZpY2F0aW9ucy5odG1sI09sZF8wMDJkc3R5bGUta2luZC1zcGVjaWZpY2F0aW9ucyI+T2xkLXN0eWxlIGtpbmQgc3BlY2lmaWNhdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI2luZGV4LWtpbmRfMDAyYy1yZWFsLTEwMTIiPmtpbmQsIHJlYWw8L2E+OiA8YSBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5EIj5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOT1JNMi5odG1sI2luZGV4LUwyLXZlY3Rvci1ub3JtLTkxNyI+TDIgdmVjdG9yIG5vcm08L2E+OiA8YSBocmVmPSJOT1JNMi5odG1sI05PUk0yIj5OT1JNMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtbGFuZ3VhZ2VfMDAyYy1kaWFsZWN0LW9wdGlvbnMtMjAiPmxhbmd1YWdlLCBkaWFsZWN0IG9wdGlvbnM8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxCT1VORC5odG1sI2luZGV4LUxCT1VORC03ODYiPjxjb2RlPkxCT1VORDwvY29kZT48L2E+OiA8YSBocmVmPSJMQk9VTkQuaHRtbCNMQk9VTkQiPkxCT1VORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxDT0JPVU5ELmh0bWwjaW5kZXgtTENPQk9VTkQtNzg4Ij48Y29kZT5MQ09CT1VORDwvY29kZT48L2E+OiA8YSBocmVmPSJMQ09CT1VORC5odG1sI0xDT0JPVU5EIj5MQ09CT1VORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxFQURaLmh0bWwjaW5kZXgtTEVBRFotNzkwIj48Y29kZT5MRUFEWjwvY29kZT48L2E+OiA8YSBocmVmPSJMRUFEWi5odG1sI0xFQURaIj5MRUFEWjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRTSElGVEwuaHRtbCNpbmRleC1sZWZ0LXNoaWZ0XzAwMmMtY29tYmluZWQtNTkxIj5sZWZ0IHNoaWZ0LCBjb21iaW5lZDwvYT46IDxhIGhyZWY9IkRTSElGVEwuaHRtbCNEU0hJRlRMIj5EU0hJRlRMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTEVOLmh0bWwjaW5kZXgtTEVOLTc5MiI+PGNvZGU+TEVOPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxFTi5odG1sI0xFTiI+TEVOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTEVOXzAwNWZUUklNLmh0bWwjaW5kZXgtTEVOXzAwNWZUUklNLTc5NCI+PGNvZGU+TEVOX1RSSU08L2NvZGU+PC9hPjogPGEgaHJlZj0iTEVOXzAwNWZUUklNLmh0bWwjTEVOXzAwNWZUUklNIj5MRU5fVFJJTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxMVC5odG1sI2luZGV4LWxleGljYWwtY29tcGFyaXNvbi1vZi1zdHJpbmdzLTgwOSI+bGV4aWNhbCBjb21wYXJpc29uIG9mIHN0cmluZ3M8L2E+OiA8YSBocmVmPSJMTFQuaHRtbCNMTFQiPkxMVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxMRS5odG1sI2luZGV4LWxleGljYWwtY29tcGFyaXNvbi1vZi1zdHJpbmdzLTgwNiI+bGV4aWNhbCBjb21wYXJpc29uIG9mIHN0cmluZ3M8L2E+OiA8YSBocmVmPSJMTEUuaHRtbCNMTEUiPkxMRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxHVC5odG1sI2luZGV4LWxleGljYWwtY29tcGFyaXNvbi1vZi1zdHJpbmdzLTgwMCI+bGV4aWNhbCBjb21wYXJpc29uIG9mIHN0cmluZ3M8L2E+OiA8YSBocmVmPSJMR1QuaHRtbCNMR1QiPkxHVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxHRS5odG1sI2luZGV4LWxleGljYWwtY29tcGFyaXNvbi1vZi1zdHJpbmdzLTc5NyI+bGV4aWNhbCBjb21wYXJpc29uIG9mIHN0cmluZ3M8L2E+OiA8YSBocmVmPSJMR0UuaHRtbCNMR0UiPkxHRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxPR18wMDVmR0FNTUEuaHRtbCNpbmRleC1MR0FNTUEtODMxIj48Y29kZT5MR0FNTUE8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE9HXzAwNWZHQU1NQS5odG1sI0xPR18wMDVmR0FNTUEiPkxPR19HQU1NQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxHRS5odG1sI2luZGV4LUxHRS03OTYiPjxjb2RlPkxHRTwvY29kZT48L2E+OiA8YSBocmVmPSJMR0UuaHRtbCNMR0UiPkxHRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxHVC5odG1sI2luZGV4LUxHVC03OTkiPjxjb2RlPkxHVDwvY29kZT48L2E+OiA8YSBocmVmPSJMR1QuaHRtbCNMR1QiPkxHVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1saWJmMmMtY2FsbGluZy1jb252ZW50aW9uLTI0MCI+bGliZjJjIGNhbGxpbmcgY29udmVudGlvbjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZhcmdzLmh0bWwjaW5kZXgtbGliZ2ZvcnRyYW4taW5pdGlhbGl6YXRpb25fMDAyYy1zZXRfMDA1ZmFyZ3MtMzU4Ij5saWJnZm9ydHJhbiBpbml0aWFsaXphdGlvbiwgc2V0X2FyZ3M8L2E+OiA8YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmFyZ3MuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmFyZ3MiPl9nZm9ydHJhbl9zZXRfYXJnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydC5odG1sI2luZGV4LWxpYmdmb3J0cmFuLWluaXRpYWxpemF0aW9uXzAwMmMtc2V0XzAwNWZjb252ZXJ0LTM2MiI+bGliZ2ZvcnRyYW4gaW5pdGlhbGl6YXRpb24sIHNldF9jb252ZXJ0PC9hPjogPGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZjb252ZXJ0Lmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZjb252ZXJ0Ij5fZ2ZvcnRyYW5fc2V0X2NvbnZlcnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmZwZS5odG1sI2luZGV4LWxpYmdmb3J0cmFuLWluaXRpYWxpemF0aW9uXzAwMmMtc2V0XzAwNWZmcGUtMzY2Ij5saWJnZm9ydHJhbiBpbml0aWFsaXphdGlvbiwgc2V0X2ZwZTwvYT46IDxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmZnBlLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUiPl9nZm9ydHJhbl9zZXRfZnBlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLmh0bWwjaW5kZXgtbGliZ2ZvcnRyYW4taW5pdGlhbGl6YXRpb25fMDAyYy1zZXRfMDA1Zm1heF8wMDVmc3VicmVjb3JkXzAwNWZsZW5ndGgtMzY4Ij5saWJnZm9ydHJhbiBpbml0aWFsaXphdGlvbiwgc2V0X21heF9zdWJyZWNvcmRfbGVuZ3RoPC9hPjogPGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoIj5fZ2ZvcnRyYW5fc2V0X21heF9zdWJyZWNvcmRfbGVuZ3RoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZvcHRpb25zLmh0bWwjaW5kZXgtbGliZ2ZvcnRyYW4taW5pdGlhbGl6YXRpb25fMDAyYy1zZXRfMDA1Zm9wdGlvbnMtMzYwIj5saWJnZm9ydHJhbiBpbml0aWFsaXphdGlvbiwgc2V0X29wdGlvbnM8L2E+OiA8YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMiPl9nZm9ydHJhbl9zZXRfb3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXIuaHRtbCNpbmRleC1saWJnZm9ydHJhbi1pbml0aWFsaXphdGlvbl8wMDJjLXNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXItMzY0Ij5saWJnZm9ydHJhbiBpbml0aWFsaXphdGlvbiwgc2V0X3JlY29yZF9tYXJrZXI8L2E+OiA8YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZyZWNvcmRfMDA1Zm1hcmtlciI+X2dmb3J0cmFuX3NldF9yZWNvcmRfbWFya2VyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFVHRS5odG1sI2luZGV4LWxpbWl0c18wMDJjLWxhcmdlc3QtbnVtYmVyLTcwNSI+bGltaXRzLCBsYXJnZXN0IG51bWJlcjwvYT46IDxhIGhyZWY9IkhVR0UuaHRtbCNIVUdFIj5IVUdFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElOWS5odG1sI2luZGV4LWxpbWl0c18wMDJjLXNtYWxsZXN0LW51bWJlci0xMTA4Ij5saW1pdHMsIHNtYWxsZXN0IG51bWJlcjwvYT46IDxhIGhyZWY9IlRJTlkuaHRtbCNUSU5ZIj5USU5ZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTElOSy5odG1sI2luZGV4LUxJTkstODAyIj48Y29kZT5MSU5LPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxJTksuaHRtbCNMSU5LIj5MSU5LPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtbGlua2luZ18wMDJjLXN0YXRpYy0yMjMiPmxpbmtpbmcsIHN0YXRpYzwvYT46IDxhIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTExFLmh0bWwjaW5kZXgtTExFLTgwNSI+PGNvZGU+TExFPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxMRS5odG1sI0xMRSI+TExFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTExULmh0bWwjaW5kZXgtTExULTgwOCI+PGNvZGU+TExUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxMVC5odG1sI0xMVCI+TExUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE5CTE5LLmh0bWwjaW5kZXgtTE5CTE5LLTgxMSI+PGNvZGU+TE5CTE5LPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxOQkxOSy5odG1sI0xOQkxOSyI+TE5CTE5LPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9DLmh0bWwjaW5kZXgtTE9DLTgxMyI+PGNvZGU+TE9DPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxPQy5odG1sI0xPQyI+TE9DPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9DLmh0bWwjaW5kZXgtbG9jYXRpb24tb2YtYS12YXJpYWJsZS1pbi1tZW1vcnktODE0Ij5sb2NhdGlvbiBvZiBhIHZhcmlhYmxlIGluIG1lbW9yeTwvYT46IDxhIGhyZWY9IkxPQy5odG1sI0xPQyI+TE9DPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HLmh0bWwjaW5kZXgtTE9HLTgxNSI+PGNvZGU+TE9HPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxPRy5odG1sI0xPRyI+TE9HPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HMTAuaHRtbCNpbmRleC1MT0cxMC04MjQiPjxjb2RlPkxPRzEwPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxPRzEwLmh0bWwjTE9HMTAiPkxPRzEwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HXzAwNWZHQU1NQS5odG1sI2luZGV4LUxPR18wMDVmR0FNTUEtODMwIj48Y29kZT5MT0dfR0FNTUE8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE9HXzAwNWZHQU1NQS5odG1sI0xPR18wMDVmR0FNTUEiPkxPR19HQU1NQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxPRy5odG1sI2luZGV4LWxvZ2FyaXRobS1mdW5jdGlvbi04MjIiPmxvZ2FyaXRobSBmdW5jdGlvbjwvYT46IDxhIGhyZWY9IkxPRy5odG1sI0xPRyI+TE9HPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HMTAuaHRtbCNpbmRleC1sb2dhcml0aG0tZnVuY3Rpb24td2l0aC1iYXNlLTEwLTgyOCI+bG9nYXJpdGhtIGZ1bmN0aW9uIHdpdGggYmFzZSAxMDwvYT46IDxhIGhyZWY9IkxPRzEwLmh0bWwjTE9HMTAiPkxPRzEwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRVhQLmh0bWwjaW5kZXgtbG9nYXJpdGhtLWZ1bmN0aW9uXzAwMmMtaW52ZXJzZS02MjMiPmxvZ2FyaXRobSBmdW5jdGlvbiwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkVYUC5odG1sI0VYUCI+RVhQPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HSUNBTC5odG1sI2luZGV4LUxPR0lDQUwtODM1Ij48Y29kZT5MT0dJQ0FMPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxPR0lDQUwuaHRtbCNMT0dJQ0FMIj5MT0dJQ0FMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSUFORC5odG1sI2luZGV4LWxvZ2ljYWwtYW5kXzAwMmMtYml0d2lzZS03MTgiPmxvZ2ljYWwgYW5kLCBiaXR3aXNlPC9hPjogPGEgaHJlZj0iSUFORC5odG1sI0lBTkQiPklBTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBTkQuaHRtbCNpbmRleC1sb2dpY2FsLWFuZF8wMDJjLWJpdHdpc2UtNDIwIj5sb2dpY2FsIGFuZCwgYml0d2lzZTwvYT46IDxhIGhyZWY9IkFORC5odG1sI0FORCI+QU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWE9SLmh0bWwjaW5kZXgtbG9naWNhbC1leGNsdXNpdmUtb3JfMDAyYy1iaXR3aXNlLTExMzkiPmxvZ2ljYWwgZXhjbHVzaXZlIG9yLCBiaXR3aXNlPC9hPjogPGEgaHJlZj0iWE9SLmh0bWwjWE9SIj5YT1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJRU9SLmh0bWwjaW5kZXgtbG9naWNhbC1leGNsdXNpdmUtb3JfMDAyYy1iaXR3aXNlLTc0MSI+bG9naWNhbCBleGNsdXNpdmUgb3IsIGJpdHdpc2U8L2E+OiA8YSBocmVmPSJJRU9SLmh0bWwjSUVPUiI+SUVPUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5PVC5odG1sI2luZGV4LWxvZ2ljYWwtbm90XzAwMmMtYml0d2lzZS05MjIiPmxvZ2ljYWwgbm90LCBiaXR3aXNlPC9hPjogPGEgaHJlZj0iTk9ULmh0bWwjTk9UIj5OT1Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPUi5odG1sI2luZGV4LWxvZ2ljYWwtb3JfMDAyYy1iaXR3aXNlLTkzMSI+bG9naWNhbCBvciwgYml0d2lzZTwvYT46IDxhIGhyZWY9Ik9SLmh0bWwjT1IiPk9SPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU9SLmh0bWwjaW5kZXgtbG9naWNhbC1vcl8wMDJjLWJpdHdpc2UtNzYxIj5sb2dpY2FsIG9yLCBiaXR3aXNlPC9hPjogPGEgaHJlZj0iSU9SLmh0bWwjSU9SIj5JT1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcy5odG1sI2luZGV4LWxvZ2ljYWxfMDAyYy12YXJpYWJsZS1yZXByZXNlbnRhdGlvbi0zMjYiPmxvZ2ljYWwsIHZhcmlhYmxlIHJlcHJlc2VudGF0aW9uPC9hPjogPGEgaHJlZj0iSW50ZXJuYWwtcmVwcmVzZW50YXRpb24tb2YtTE9HSUNBTC12YXJpYWJsZXMuaHRtbCNJbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcyI+SW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgTE9HSUNBTCB2YXJpYWJsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRMT0cuaHRtbCNpbmRleC1sb2dpbi1uYW1lLTY5MyI+bG9naW4gbmFtZTwvYT46IDxhIGhyZWY9IkdFVExPRy5odG1sI0dFVExPRyI+R0VUTE9HPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9ORy5odG1sI2luZGV4LUxPTkctODM3Ij48Y29kZT5MT05HPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxPTkcuaHRtbCNMT05HIj5MT05HPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTFNISUZULmh0bWwjaW5kZXgtTFNISUZULTgzOSI+PGNvZGU+TFNISUZUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxTSElGVC5odG1sI0xTSElGVCI+TFNISUZUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTFNUQVQuaHRtbCNpbmRleC1MU1RBVC04NDEiPjxjb2RlPkxTVEFUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxTVEFULmh0bWwjTFNUQVQiPkxTVEFUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTFRJTUUuaHRtbCNpbmRleC1MVElNRS04NDMiPjxjb2RlPkxUSU1FPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxUSU1FLmh0bWwjTFRJTUUiPkxUSU1FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFMTE9DLmh0bWwjaW5kZXgtTUFMTE9DLTg0NSI+PGNvZGU+TUFMTE9DPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1BTExPQy5odG1sI01BTExPQyI+TUFMTE9DPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFTS0wuaHRtbCNpbmRleC1tYXNrXzAwMmMtbGVmdC1qdXN0aWZpZWQtODQ4Ij5tYXNrLCBsZWZ0IGp1c3RpZmllZDwvYT46IDxhIGhyZWY9Ik1BU0tMLmh0bWwjTUFTS0wiPk1BU0tMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFTS1IuaHRtbCNpbmRleC1tYXNrXzAwMmMtcmlnaHQtanVzdGlmaWVkLTg1MCI+bWFzaywgcmlnaHQganVzdGlmaWVkPC9hPjogPGEgaHJlZj0iTUFTS1IuaHRtbCNNQVNLUiI+TUFTS1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQVNLTC5odG1sI2luZGV4LU1BU0tMLTg0NyI+PGNvZGU+TUFTS0w8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUFTS0wuaHRtbCNNQVNLTCI+TUFTS0w8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQVNLUi5odG1sI2luZGV4LU1BU0tSLTg0OSI+PGNvZGU+TUFTS1I8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUFTS1IuaHRtbCNNQVNLUiI+TUFTS1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQVRNVUwuaHRtbCNpbmRleC1NQVRNVUwtODUxIj48Y29kZT5NQVRNVUw8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUFUTVVMLmh0bWwjTUFUTVVMIj5NQVRNVUw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQVRNVUwuaHRtbCNpbmRleC1tYXRyaXgtbXVsdGlwbGljYXRpb24tODUyIj5tYXRyaXggbXVsdGlwbGljYXRpb248L2E+OiA8YSBocmVmPSJNQVRNVUwuaHRtbCNNQVRNVUwiPk1BVE1VTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRSQU5TUE9TRS5odG1sI2luZGV4LW1hdHJpeF8wMDJjLXRyYW5zcG9zZS0xMTE3Ij5tYXRyaXgsIHRyYW5zcG9zZTwvYT46IDxhIGhyZWY9IlRSQU5TUE9TRS5odG1sI1RSQU5TUE9TRSI+VFJBTlNQT1NFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFYLmh0bWwjaW5kZXgtTUFYLTg1NCI+PGNvZGU+TUFYPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1BWC5odG1sI01BWCI+TUFYPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFYLmh0bWwjaW5kZXgtTUFYMC04NTUiPjxjb2RlPk1BWDA8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUFYLmh0bWwjTUFYIj5NQVg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQVguaHRtbCNpbmRleC1NQVgxLTg1NyI+PGNvZGU+TUFYMTwvY29kZT48L2E+OiA8YSBocmVmPSJNQVguaHRtbCNNQVgiPk1BWDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1BWEVYUE9ORU5ULmh0bWwjaW5kZXgtTUFYRVhQT05FTlQtODYxIj48Y29kZT5NQVhFWFBPTkVOVDwvY29kZT48L2E+OiA8YSBocmVmPSJNQVhFWFBPTkVOVC5odG1sI01BWEVYUE9ORU5UIj5NQVhFWFBPTkVOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1BWFZBTC5odG1sI2luZGV4LW1heGltdW0tdmFsdWUtODY3Ij5tYXhpbXVtIHZhbHVlPC9hPjogPGEgaHJlZj0iTUFYVkFMLmh0bWwjTUFYVkFMIj5NQVhWQUw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQVguaHRtbCNpbmRleC1tYXhpbXVtLXZhbHVlLTg2MCI+bWF4aW11bSB2YWx1ZTwvYT46IDxhIGhyZWY9Ik1BWC5odG1sI01BWCI+TUFYPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFYTE9DLmh0bWwjaW5kZXgtTUFYTE9DLTg2MyI+PGNvZGU+TUFYTE9DPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1BWExPQy5odG1sI01BWExPQyI+TUFYTE9DPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFYVkFMLmh0bWwjaW5kZXgtTUFYVkFMLTg2NSI+PGNvZGU+TUFYVkFMPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1BWFZBTC5odG1sI01BWFZBTCI+TUFYVkFMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNMT0NLLmh0bWwjaW5kZXgtTUNMT0NLLTg2OCI+PGNvZGU+TUNMT0NLPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1DTE9DSy5odG1sI01DTE9DSyI+TUNMT0NLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNMT0NLOC5odG1sI2luZGV4LU1DTE9DSzgtODcxIj48Y29kZT5NQ0xPQ0s4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1DTE9DSzguaHRtbCNNQ0xPQ0s4Ij5NQ0xPQ0s4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LW1lbW9yeS1jaGVja2luZy0yNjEiPm1lbW9yeSBjaGVja2luZzwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUVSR0UuaHRtbCNpbmRleC1NRVJHRS04NzQiPjxjb2RlPk1FUkdFPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1FUkdFLmh0bWwjTUVSR0UiPk1FUkdFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUVSR0VfMDA1ZkJJVFMuaHRtbCNpbmRleC1NRVJHRV8wMDVmQklUUy04NzciPjxjb2RlPk1FUkdFX0JJVFM8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUVSR0VfMDA1ZkJJVFMuaHRtbCNNRVJHRV8wMDVmQklUUyI+TUVSR0VfQklUUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1tZXNzYWdlc18wMDJjLWVycm9yLTEyMCI+bWVzc2FnZXMsIGVycm9yPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtbWVzc2FnZXNfMDAyYy13YXJuaW5nLTEyMSI+bWVzc2FnZXMsIHdhcm5pbmc8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JTi5odG1sI2luZGV4LU1JTi04NzkiPjxjb2RlPk1JTjwvY29kZT48L2E+OiA8YSBocmVmPSJNSU4uaHRtbCNNSU4iPk1JTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JTi5odG1sI2luZGV4LU1JTjAtODgwIj48Y29kZT5NSU4wPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1JTi5odG1sI01JTiI+TUlOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlOLmh0bWwjaW5kZXgtTUlOMS04ODIiPjxjb2RlPk1JTjE8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlOLmh0bWwjTUlOIj5NSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSU5FWFBPTkVOVC5odG1sI2luZGV4LU1JTkVYUE9ORU5ULTg4NiI+PGNvZGU+TUlORVhQT05FTlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTUlORVhQT05FTlQuaHRtbCNNSU5FWFBPTkVOVCI+TUlORVhQT05FTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNSU5WQUwuaHRtbCNpbmRleC1taW5pbXVtLXZhbHVlLTg5MiI+bWluaW11bSB2YWx1ZTwvYT46IDxhIGhyZWY9Ik1JTlZBTC5odG1sI01JTlZBTCI+TUlOVkFMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUlOLmh0bWwjaW5kZXgtbWluaW11bS12YWx1ZS04ODUiPm1pbmltdW0gdmFsdWU8L2E+OiA8YSBocmVmPSJNSU4uaHRtbCNNSU4iPk1JTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JTkxPQy5odG1sI2luZGV4LU1JTkxPQy04ODgiPjxjb2RlPk1JTkxPQzwvY29kZT48L2E+OiA8YSBocmVmPSJNSU5MT0MuaHRtbCNNSU5MT0MiPk1JTkxPQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JTlZBTC5odG1sI2luZGV4LU1JTlZBTC04OTAiPjxjb2RlPk1JTlZBTDwvY29kZT48L2E+OiA8YSBocmVmPSJNSU5WQUwuaHRtbCNNSU5WQUwiPk1JTlZBTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZy5odG1sI2luZGV4LU1peGVkXzAwMmRsYW5ndWFnZS1wcm9ncmFtbWluZy0zNTYiPk1peGVkLWxhbmd1YWdlIHByb2dyYW1taW5nPC9hPjogPGEgaHJlZj0iTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwjTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nIj5NaXhlZC1MYW5ndWFnZSBQcm9ncmFtbWluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1PRC5odG1sI2luZGV4LU1PRC04OTMiPjxjb2RlPk1PRDwvY29kZT48L2E+OiA8YSBocmVmPSJNT0QuaHRtbCNNT0QiPk1PRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJBRElYLmh0bWwjaW5kZXgtbW9kZWwtcmVwcmVzZW50YXRpb25fMDAyYy1iYXNlLTk1NyI+bW9kZWwgcmVwcmVzZW50YXRpb24sIGJhc2U8L2E+OiA8YSBocmVmPSJSQURJWC5odG1sI1JBRElYIj5SQURJWDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVQU0lMT04uaHRtbCNpbmRleC1tb2RlbC1yZXByZXNlbnRhdGlvbl8wMDJjLWVwc2lsb24tNjAyIj5tb2RlbCByZXByZXNlbnRhdGlvbiwgZXBzaWxvbjwvYT46IDxhIGhyZWY9IkVQU0lMT04uaHRtbCNFUFNJTE9OIj5FUFNJTE9OPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFVHRS5odG1sI2luZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtbGFyZ2VzdC1udW1iZXItNzA2Ij5tb2RlbCByZXByZXNlbnRhdGlvbiwgbGFyZ2VzdCBudW1iZXI8L2E+OiA8YSBocmVmPSJIVUdFLmh0bWwjSFVHRSI+SFVHRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1BWEVYUE9ORU5ULmh0bWwjaW5kZXgtbW9kZWwtcmVwcmVzZW50YXRpb25fMDAyYy1tYXhpbXVtLWV4cG9uZW50LTg2MiI+bW9kZWwgcmVwcmVzZW50YXRpb24sIG1heGltdW0gZXhwb25lbnQ8L2E+OiA8YSBocmVmPSJNQVhFWFBPTkVOVC5odG1sI01BWEVYUE9ORU5UIj5NQVhFWFBPTkVOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1JTkVYUE9ORU5ULmh0bWwjaW5kZXgtbW9kZWwtcmVwcmVzZW50YXRpb25fMDAyYy1taW5pbXVtLWV4cG9uZW50LTg4NyI+bW9kZWwgcmVwcmVzZW50YXRpb24sIG1pbmltdW0gZXhwb25lbnQ8L2E+OiA8YSBocmVmPSJNSU5FWFBPTkVOVC5odG1sI01JTkVYUE9ORU5UIj5NSU5FWFBPTkVOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBSRUNJU0lPTi5odG1sI2luZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtcHJlY2lzaW9uLTk0OSI+bW9kZWwgcmVwcmVzZW50YXRpb24sIHByZWNpc2lvbjwvYT46IDxhIGhyZWY9IlBSRUNJU0lPTi5odG1sI1BSRUNJU0lPTiI+UFJFQ0lTSU9OPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkFESVguaHRtbCNpbmRleC1tb2RlbC1yZXByZXNlbnRhdGlvbl8wMDJjLXJhZGl4LTk1OCI+bW9kZWwgcmVwcmVzZW50YXRpb24sIHJhZGl4PC9hPjogPGEgaHJlZj0iUkFESVguaHRtbCNSQURJWCI+UkFESVg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSQU5HRS5odG1sI2luZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtcmFuZ2UtOTY5Ij5tb2RlbCByZXByZXNlbnRhdGlvbiwgcmFuZ2U8L2E+OiA8YSBocmVmPSJSQU5HRS5odG1sI1JBTkdFIj5SQU5HRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRJR0lUUy5odG1sI2luZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtc2lnbmlmaWNhbnQtZGlnaXRzLTU3NyI+bW9kZWwgcmVwcmVzZW50YXRpb24sIHNpZ25pZmljYW50IGRpZ2l0czwvYT46IDxhIGhyZWY9IkRJR0lUUy5odG1sI0RJR0lUUyI+RElHSVRTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElOWS5odG1sI2luZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtc21hbGxlc3QtbnVtYmVyLTExMDkiPm1vZGVsIHJlcHJlc2VudGF0aW9uLCBzbWFsbGVzdCBudW1iZXI8L2E+OiA8YSBocmVmPSJUSU5ZLmh0bWwjVElOWSI+VElOWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtbW9kdWxlLWVudGl0aWVzLTQxIj5tb2R1bGUgZW50aXRpZXM8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjaW5kZXgtbW9kdWxlLXNlYXJjaC1wYXRoLTIxNCI+bW9kdWxlIHNlYXJjaCBwYXRoPC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNT0RVTE8uaHRtbCNpbmRleC1tb2R1bG8tODk5Ij5tb2R1bG88L2E+OiA8YSBocmVmPSJNT0RVTE8uaHRtbCNNT0RVTE8iPk1PRFVMTzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1PRFVMTy5odG1sI2luZGV4LU1PRFVMTy04OTgiPjxjb2RlPk1PRFVMTzwvY29kZT48L2E+OiA8YSBocmVmPSJNT0RVTE8uaHRtbCNNT0RVTE8iPk1PRFVMTzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1PVkVfMDA1ZkFMTE9DLmh0bWwjaW5kZXgtTU9WRV8wMDVmQUxMT0MtOTAxIj48Y29kZT5NT1ZFX0FMTE9DPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1PVkVfMDA1ZkFMTE9DLmh0bWwjTU9WRV8wMDVmQUxMT0MiPk1PVkVfQUxMT0M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNT1ZFXzAwNWZBTExPQy5odG1sI2luZGV4LW1vdmluZy1hbGxvY2F0aW9uLTkwMiI+bW92aW5nIGFsbG9jYXRpb248L2E+OiA8YSBocmVmPSJNT1ZFXzAwNWZBTExPQy5odG1sI01PVkVfMDA1ZkFMTE9DIj5NT1ZFX0FMTE9DPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUFJPRFVDVC5odG1sI2luZGV4LW11bHRpcGx5LWFycmF5LWVsZW1lbnRzLTk1NSI+bXVsdGlwbHkgYXJyYXkgZWxlbWVudHM8L2E+OiA8YSBocmVmPSJQUk9EVUNULmh0bWwjUFJPRFVDVCI+UFJPRFVDVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1WQklUUy5odG1sI2luZGV4LU1WQklUUy05MDQiPjxjb2RlPk1WQklUUzwvY29kZT48L2E+OiA8YSBocmVmPSJNVkJJVFMuaHRtbCNNVkJJVFMiPk1WQklUUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4dGVuc2lvbnMtdG8tbmFtZWxpc3QuaHRtbCNpbmRleC1OYW1lbGlzdC0zMzIiPk5hbWVsaXN0PC9hPjogPGEgaHJlZj0iRXh0ZW5zaW9ucy10by1uYW1lbGlzdC5odG1sI0V4dGVuc2lvbnMtdG8tbmFtZWxpc3QiPkV4dGVuc2lvbnMgdG8gbmFtZWxpc3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMT0cuaHRtbCNpbmRleC1uYXR1cmFsLWxvZ2FyaXRobS1mdW5jdGlvbi04MjMiPm5hdHVyYWwgbG9nYXJpdGhtIGZ1bmN0aW9uPC9hPjogPGEgaHJlZj0iTE9HLmh0bWwjTE9HIj5MT0c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJORUFSRVNULmh0bWwjaW5kZXgtTkVBUkVTVC05MDYiPjxjb2RlPk5FQVJFU1Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iTkVBUkVTVC5odG1sI05FQVJFU1QiPk5FQVJFU1Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJORVdfMDA1ZkxJTkUuaHRtbCNpbmRleC1ORVdfMDA1ZkxJTkUtOTA5Ij48Y29kZT5ORVdfTElORTwvY29kZT48L2E+OiA8YSBocmVmPSJORVdfMDA1ZkxJTkUuaHRtbCNORVdfMDA1ZkxJTkUiPk5FV19MSU5FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTkVXXzAwNWZMSU5FLmh0bWwjaW5kZXgtbmV3bGluZS05MTAiPm5ld2xpbmU8L2E+OiA8YSBocmVmPSJORVdfMDA1ZkxJTkUuaHRtbCNORVdfMDA1ZkxJTkUiPk5FV19MSU5FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTklOVC5odG1sI2luZGV4LU5JTlQtOTEyIj48Y29kZT5OSU5UPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik5JTlQuaHRtbCNOSU5UIj5OSU5UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTk9STTIuaHRtbCNpbmRleC1ub3JtXzAwMmMtRXVjbGlkZWFuLTkxOCI+bm9ybSwgRXVjbGlkZWFuPC9hPjogPGEgaHJlZj0iTk9STTIuaHRtbCNOT1JNMiI+Tk9STTI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOT1JNMi5odG1sI2luZGV4LU5PUk0yLTkxNSI+PGNvZGU+Tk9STTI8L2NvZGU+PC9hPjogPGEgaHJlZj0iTk9STTIuaHRtbCNOT1JNMiI+Tk9STTI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOT1QuaHRtbCNpbmRleC1OT1QtOTE5Ij48Y29kZT5OT1Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iTk9ULmh0bWwjTk9UIj5OT1Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOVUxMLmh0bWwjaW5kZXgtTlVMTC05MjMiPjxjb2RlPk5VTEw8L2NvZGU+PC9hPjogPGEgaHJlZj0iTlVMTC5odG1sI05VTEwiPk5VTEw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJOVU1fMDA1ZklNQUdFUy5odG1sI2luZGV4LU5VTV8wMDVmSU1BR0VTLTkyNiI+PGNvZGU+TlVNX0lNQUdFUzwvY29kZT48L2E+OiA8YSBocmVmPSJOVU1fMDA1ZklNQUdFUy5odG1sI05VTV8wMDVmSU1BR0VTIj5OVU1fSU1BR0VTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3Blbk1QLmh0bWwjaW5kZXgtT3Blbk1QLTM0MyI+T3Blbk1QPC9hPjogPGEgaHJlZj0iT3Blbk1QLmh0bWwjT3Blbk1QIj5PcGVuTVA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LU9wZW5NUC01MiI+T3Blbk1QPC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJVbmFyeS1vcGVyYXRvcnMuaHRtbCNpbmRleC1vcGVyYXRvcnNfMDAyYy11bmFyeS0zMzciPm9wZXJhdG9ycywgdW5hcnk8L2E+OiA8YSBocmVmPSJVbmFyeS1vcGVyYXRvcnMuaHRtbCNVbmFyeS1vcGVyYXRvcnMiPlVuYXJ5IG9wZXJhdG9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPTVBJTEVSXzAwNWZPUFRJT05TLmh0bWwjaW5kZXgtb3B0aW9ucy1pbnF1aXJ5LWZ1bmN0aW9uLTUzMCI+b3B0aW9ucyBpbnF1aXJ5IGZ1bmN0aW9uPC9hPjogPGEgaHJlZj0iQ09NUElMRVJfMDA1Zk9QVElPTlMuaHRtbCNDT01QSUxFUl8wMDVmT1BUSU9OUyI+Q09NUElMRVJfT1BUSU9OUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtY29kZS1nZW5lcmF0aW9uLTIzMSI+b3B0aW9ucywgY29kZSBnZW5lcmF0aW9uPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1kZWJ1Z2dpbmctMTk1Ij5vcHRpb25zLCBkZWJ1Z2dpbmc8L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLWRpYWxlY3QtMjEiPm9wdGlvbnMsIGRpYWxlY3Q8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLWRpcmVjdG9yeS1zZWFyY2gtMjA1Ij5vcHRpb25zLCBkaXJlY3Rvcnkgc2VhcmNoPC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLWVycm9ycy0xMTgiPm9wdGlvbnMsIGVycm9yczwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtRm9ydHJhbi1kaWFsZWN0LTI0Ij5vcHRpb25zLCBGb3J0cmFuIGRpYWxlY3Q8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLV8wMDQwY29tbWFuZF8wMDdiZ2ZvcnRyYW5fMDA3ZC1jb21tYW5kLTE3Ij5vcHRpb25zLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiBjb21tYW5kPC9hPjogPGEgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiI+SW52b2tpbmcgR05VIEZvcnRyYW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNpbmRleC1vcHRpb25zXzAwMmMtbGlua2luZy0yMjIiPm9wdGlvbnMsIGxpbmtpbmc8L2E+OiA8YSBocmVmPSJMaW5rLU9wdGlvbnMuaHRtbCNMaW5rLU9wdGlvbnMiPkxpbmsgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLW5lZ2F0aXZlLWZvcm1zLTE4Ij5vcHRpb25zLCBuZWdhdGl2ZSBmb3JtczwvYT46IDxhIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iPkludm9raW5nIEdOVSBGb3J0cmFuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLXByZXByb2Nlc3Nvci02MyI+b3B0aW9ucywgcHJlcHJvY2Vzc29yPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1yZWFsLWtpbmQtdHlwZS1wcm9tb3Rpb24tNjAiPm9wdGlvbnMsIHJlYWwga2luZCB0eXBlIHByb21vdGlvbjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnNfMDAyYy1ydW5fMDAyZHRpbWUtMjMyIj5vcHRpb25zLCBydW4tdGltZTwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUnVudGltZS1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLXJ1bnRpbWUtMjI1Ij5vcHRpb25zLCBydW50aW1lPC9hPjogPGEgaHJlZj0iUnVudGltZS1PcHRpb25zLmh0bWwjUnVudGltZS1PcHRpb25zIj5SdW50aW1lIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtb3B0aW9uc18wMDJjLXdhcm5pbmdzLTExNyI+b3B0aW9ucywgd2FybmluZ3M8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9SLmh0bWwjaW5kZXgtT1ItOTI5Ij48Y29kZT5PUjwvY29kZT48L2E+OiA8YSBocmVmPSJPUi5odG1sI09SIj5PUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5FV18wMDVmTElORS5odG1sI2luZGV4LW91dHB1dF8wMDJjLW5ld2xpbmUtOTExIj5vdXRwdXQsIG5ld2xpbmU8L2E+OiA8YSBocmVmPSJORVdfMDA1ZkxJTkUuaHRtbCNORVdfMDA1ZkxJTkUiPk5FV19MSU5FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUEFDSy5odG1sI2luZGV4LVBBQ0stOTMyIj48Y29kZT5QQUNLPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBBQ0suaHRtbCNQQUNLIj5QQUNLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUE9QUEFSLmh0bWwjaW5kZXgtcGFyaXR5LTk0NyI+cGFyaXR5PC9hPjogPGEgaHJlZj0iUE9QUEFSLmh0bWwjUE9QUEFSIj5QT1BQQVI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQQVJJVFkuaHRtbCNpbmRleC1QYXJpdHktOTM3Ij5QYXJpdHk8L2E+OiA8YSBocmVmPSJQQVJJVFkuaHRtbCNQQVJJVFkiPlBBUklUWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBBUklUWS5odG1sI2luZGV4LVBBUklUWS05MzYiPjxjb2RlPlBBUklUWTwvY29kZT48L2E+OiA8YSBocmVmPSJQQVJJVFkuaHRtbCNQQVJJVFkiPlBBUklUWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjaW5kZXgtcGF0aHNfMDAyYy1zZWFyY2gtMjEzIj5wYXRocywgc2VhcmNoPC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRVJST1IuaHRtbCNpbmRleC1QRVJST1ItOTQwIj48Y29kZT5QRVJST1I8L2NvZGU+PC9hPjogPGEgaHJlZj0iUEVSUk9SLmh0bWwjUEVSUk9SIj5QRVJST1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtcG9pbnRlci1jaGVja2luZy0yNjAiPnBvaW50ZXIgY2hlY2tpbmc8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSLmh0bWwjaW5kZXgtcG9pbnRlcl8wMDJjLUMtYWRkcmVzcy1vZi1wb2ludGVycy01MDQiPnBvaW50ZXIsIEMgYWRkcmVzcyBvZiBwb2ludGVyczwvYT46IDxhIGhyZWY9IkNfMDA1ZkZfMDA1ZlBST0NQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIiPkNfRl9QUk9DUE9JTlRFUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDA1ZkZVTkxPQy5odG1sI2luZGV4LXBvaW50ZXJfMDAyYy1DLWFkZHJlc3Mtb2YtcHJvY2VkdXJlcy01MDYiPnBvaW50ZXIsIEMgYWRkcmVzcyBvZiBwcm9jZWR1cmVzPC9hPjogPGEgaHJlZj0iQ18wMDVmRlVOTE9DLmh0bWwjQ18wMDVmRlVOTE9DIj5DX0ZVTkxPQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDA1ZkFTU09DSUFURUQuaHRtbCNpbmRleC1wb2ludGVyXzAwMmMtQy1hc3NvY2lhdGlvbi1zdGF0dXMtNTAwIj5wb2ludGVyLCBDIGFzc29jaWF0aW9uIHN0YXR1czwvYT46IDxhIGhyZWY9IkNfMDA1ZkFTU09DSUFURUQuaHRtbCNDXzAwNWZBU1NPQ0lBVEVEIj5DX0FTU09DSUFURUQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDXzAwNWZGXzAwNWZQT0lOVEVSLmh0bWwjaW5kZXgtcG9pbnRlcl8wMDJjLWNvbnZlcnQtQy10by1Gb3J0cmFuLTUwMiI+cG9pbnRlciwgY29udmVydCBDIHRvIEZvcnRyYW48L2E+OiA8YSBocmVmPSJDXzAwNWZGXzAwNWZQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUE9JTlRFUiI+Q19GX1BPSU5URVI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQUxMT0MuaHRtbCNpbmRleC1wb2ludGVyXzAwMmMtY3JheS04NDYiPnBvaW50ZXIsIGNyYXk8L2E+OiA8YSBocmVmPSJNQUxMT0MuaHRtbCNNQUxMT0MiPk1BTExPQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSRUUuaHRtbCNpbmRleC1wb2ludGVyXzAwMmMtY3JheS02NjAiPnBvaW50ZXIsIGNyYXk8L2E+OiA8YSBocmVmPSJGUkVFLmh0bWwjRlJFRSI+RlJFRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNyYXktcG9pbnRlcnMuaHRtbCNpbmRleC1wb2ludGVyXzAwMmMtQ3JheS0zNDEiPnBvaW50ZXIsIENyYXk8L2E+OiA8YSBocmVmPSJDcmF5LXBvaW50ZXJzLmh0bWwjQ3JheS1wb2ludGVycyI+Q3JheSBwb2ludGVyczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5VTEwuaHRtbCNpbmRleC1wb2ludGVyXzAwMmMtZGlzYXNzb2NpYXRlZC05MjUiPnBvaW50ZXIsIGRpc2Fzc29jaWF0ZWQ8L2E+OiA8YSBocmVmPSJOVUxMLmh0bWwjTlVMTCI+TlVMTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5VTEwuaHRtbCNpbmRleC1wb2ludGVyXzAwMmMtc3RhdHVzLTkyNCI+cG9pbnRlciwgc3RhdHVzPC9hPjogPGEgaHJlZj0iTlVMTC5odG1sI05VTEwiPk5VTEw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBU1NPQ0lBVEVELmh0bWwjaW5kZXgtcG9pbnRlcl8wMDJjLXN0YXR1cy00MzkiPnBvaW50ZXIsIHN0YXR1czwvYT46IDxhIGhyZWY9IkFTU09DSUFURUQuaHRtbCNBU1NPQ0lBVEVEIj5BU1NPQ0lBVEVEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUE9QQ05ULmh0bWwjaW5kZXgtUE9QQ05ULTk0MiI+PGNvZGU+UE9QQ05UPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBPUENOVC5odG1sI1BPUENOVCI+UE9QQ05UPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUE9QUEFSLmh0bWwjaW5kZXgtUE9QUEFSLTk0NSI+PGNvZGU+UE9QUEFSPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBPUFBBUi5odG1sI1BPUFBBUiI+UE9QUEFSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRElNLmh0bWwjaW5kZXgtcG9zaXRpdmUtZGlmZmVyZW5jZS01ODEiPnBvc2l0aXZlIGRpZmZlcmVuY2U8L2E+OiA8YSBocmVmPSJESU0uaHRtbCNESU0iPkRJTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBSRUNJU0lPTi5odG1sI2luZGV4LVBSRUNJU0lPTi05NDgiPjxjb2RlPlBSRUNJU0lPTjwvY29kZT48L2E+OiA8YSBocmVmPSJQUkVDSVNJT04uaHRtbCNQUkVDSVNJT04iPlBSRUNJU0lPTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctYW5kLWNvbmRpdGlvbmFsLWNvbXBpbGF0aW9uLmh0bWwjaW5kZXgtUHJlcHJvY2Vzc2luZy03Ij5QcmVwcm9jZXNzaW5nPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiI+UHJlcHJvY2Vzc2luZyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wcmVwcm9jZXNzaW5nXzAwMmMtYXNzZXJ0aW9uLTEwMSI+cHJlcHJvY2Vzc2luZywgYXNzZXJ0aW9uPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wcmVwcm9jZXNzaW5nXzAwMmMtZGVmaW5lLW1hY3Jvcy0xMDkiPnByZXByb2Nlc3NpbmcsIGRlZmluZSBtYWNyb3M8L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LXByZXByb2Nlc3NpbmdfMDAyYy1pbmNsdWRlLXBhdGgtODciPnByZXByb2Nlc3NpbmcsIGluY2x1ZGUgcGF0aDwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLWtlZXAtY29tbWVudHMtMTA1Ij5wcmVwcm9jZXNzaW5nLCBrZWVwIGNvbW1lbnRzPC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1wcmVwcm9jZXNzaW5nXzAwMmMtbm8tbGluZW1hcmtlcnMtMTE0Ij5wcmVwcm9jZXNzaW5nLCBubyBsaW5lbWFya2VyczwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLXVuZGVmaW5lLW1hY3Jvcy0xMTYiPnByZXByb2Nlc3NpbmcsIHVuZGVmaW5lIG1hY3JvczwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcHJlcHJvY2Vzc29yLTYyIj5wcmVwcm9jZXNzb3I8L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LXByZXByb2Nlc3Nvcl8wMDJjLWRlYnVnZ2luZy03MCI+cHJlcHJvY2Vzc29yLCBkZWJ1Z2dpbmc8L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LXByZXByb2Nlc3Nvcl8wMDJjLWRpc2FibGUtNjgiPnByZXByb2Nlc3NvciwgZGlzYWJsZTwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtcHJlcHJvY2Vzc29yXzAwMmMtZW5hYmxlLTY3Ij5wcmVwcm9jZXNzb3IsIGVuYWJsZTwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNpbmRleC1wcmVwcm9jZXNzb3JfMDAyYy1pbmNsdWRlLWZpbGUtaGFuZGxpbmctOCI+cHJlcHJvY2Vzc29yLCBpbmNsdWRlIGZpbGUgaGFuZGxpbmc8L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbi5odG1sI1ByZXByb2Nlc3NpbmctYW5kLWNvbmRpdGlvbmFsLWNvbXBpbGF0aW9uIj5QcmVwcm9jZXNzaW5nIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LXByZXByb2Nlc3Nvcl8wMDJjLXdvcmtpbmctZGlyZWN0b3J5LTg1Ij5wcmVwcm9jZXNzb3IsIHdvcmtpbmcgZGlyZWN0b3J5PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQUkVTRU5ULmh0bWwjaW5kZXgtUFJFU0VOVC05NTAiPjxjb2RlPlBSRVNFTlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUFJFU0VOVC5odG1sI1BSRVNFTlQiPlBSRVNFTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LXByaXZhdGUtNDIiPnByaXZhdGU8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNfMDA1ZkxPQy5odG1sI2luZGV4LXByb2NlZHVyZS1wb2ludGVyXzAwMmMtY29udmVydC1DLXRvLUZvcnRyYW4tNTA4Ij5wcm9jZWR1cmUgcG9pbnRlciwgY29udmVydCBDIHRvIEZvcnRyYW48L2E+OiA8YSBocmVmPSJDXzAwNWZMT0MuaHRtbCNDXzAwNWZMT0MiPkNfTE9DPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR0VUUElELmh0bWwjaW5kZXgtcHJvY2Vzcy1JRC02OTYiPnByb2Nlc3MgSUQ8L2E+OiA8YSBocmVmPSJHRVRQSUQuaHRtbCNHRVRQSUQiPkdFVFBJRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBST0RVQ1QuaHRtbCNpbmRleC1QUk9EVUNULTk1MSI+PGNvZGU+UFJPRFVDVDwvY29kZT48L2E+OiA8YSBocmVmPSJQUk9EVUNULmh0bWwjUFJPRFVDVCI+UFJPRFVDVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRQUk9ELmh0bWwjaW5kZXgtcHJvZHVjdF8wMDJjLWRvdWJsZV8wMDJkcHJlY2lzaW9uLTU4NyI+cHJvZHVjdCwgZG91YmxlLXByZWNpc2lvbjwvYT46IDxhIGhyZWY9IkRQUk9ELmh0bWwjRFBST0QiPkRQUk9EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUFUTVVMLmh0bWwjaW5kZXgtcHJvZHVjdF8wMDJjLW1hdHJpeC04NTMiPnByb2R1Y3QsIG1hdHJpeDwvYT46IDxhIGhyZWY9Ik1BVE1VTC5odG1sI01BVE1VTCI+TUFUTVVMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRE9UXzAwNWZQUk9EVUNULmh0bWwjaW5kZXgtcHJvZHVjdF8wMDJjLXZlY3Rvci01ODUiPnByb2R1Y3QsIHZlY3RvcjwvYT46IDxhIGhyZWY9IkRPVF8wMDVmUFJPRFVDVC5odG1sI0RPVF8wMDVmUFJPRFVDVCI+RE9UX1BST0RVQ1Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFWElULmh0bWwjaW5kZXgtcHJvZ3JhbS10ZXJtaW5hdGlvbi02MTUiPnByb2dyYW0gdGVybWluYXRpb248L2E+OiA8YSBocmVmPSJFWElULmh0bWwjRVhJVCI+RVhJVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFCT1JULmh0bWwjaW5kZXgtcHJvZ3JhbS10ZXJtaW5hdGlvbl8wMDJjLXdpdGgtY29yZS1kdW1wLTM3MSI+cHJvZ3JhbSB0ZXJtaW5hdGlvbiwgd2l0aCBjb3JlIGR1bXA8L2E+OiA8YSBocmVmPSJBQk9SVC5odG1sI0FCT1JUIj5BQk9SVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlBST1RFQ1RFRF8wMDdkLXN0YXRlbWVudC0zMTMiPjxjb2RlPlBST1RFQ1RFRDwvY29kZT4gc3RhdGVtZW50PC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDAzY2NvZGVfMDAzZVFfMDAzY18wMDJmY29kZV8wMDNlLWV4cG9uZW50XzAwMmRsZXR0ZXIuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlFfMDA3ZC1leHBvbmVudF8wMDJkbGV0dGVyLTMzNCI+PGNvZGU+UTwvY29kZT4gZXhwb25lbnQtbGV0dGVyPC9hPjogPGEgaHJlZj0iXzAwM2Njb2RlXzAwM2VRXzAwM2NfMDAyZmNvZGVfMDAzZS1leHBvbmVudF8wMDJkbGV0dGVyLmh0bWwjZ190XzAwM2Njb2RlXzAwM2VRXzAwM2NfMDAyZmNvZGVfMDAzZS1leHBvbmVudF8wMDJkbGV0dGVyIj4mbHQ7Y29kZSZndDtRJmx0Oy9jb2RlJmd0OyBleHBvbmVudC1sZXR0ZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSQURJWC5odG1sI2luZGV4LVJBRElYLTk1NiI+PGNvZGU+UkFESVg8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkFESVguaHRtbCNSQURJWCI+UkFESVg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI2luZGV4LXJhZGl4XzAwMmMtcmVhbC0xMDEzIj5yYWRpeCwgcmVhbDwvYT46IDxhIGhyZWY9IlNFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQiPlNFTEVDVEVEX1JFQUxfS0lORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJBTi5odG1sI2luZGV4LVJBTi05NTkiPjxjb2RlPlJBTjwvY29kZT48L2E+OiA8YSBocmVmPSJSQU4uaHRtbCNSQU4iPlJBTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJBTkQuaHRtbCNpbmRleC1SQU5ELTk2MSI+PGNvZGU+UkFORDwvY29kZT48L2E+OiA8YSBocmVmPSJSQU5ELmh0bWwjUkFORCI+UkFORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJBTkRPTV8wMDVmTlVNQkVSLmh0bWwjaW5kZXgtcmFuZG9tLW51bWJlci1nZW5lcmF0aW9uLTk2NCI+cmFuZG9tIG51bWJlciBnZW5lcmF0aW9uPC9hPjogPGEgaHJlZj0iUkFORE9NXzAwNWZOVU1CRVIuaHRtbCNSQU5ET01fMDA1Zk5VTUJFUiI+UkFORE9NX05VTUJFUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJBTkQuaHRtbCNpbmRleC1yYW5kb20tbnVtYmVyLWdlbmVyYXRpb24tOTYyIj5yYW5kb20gbnVtYmVyIGdlbmVyYXRpb248L2E+OiA8YSBocmVmPSJSQU5ELmh0bWwjUkFORCI+UkFORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJBTi5odG1sI2luZGV4LXJhbmRvbS1udW1iZXItZ2VuZXJhdGlvbi05NjAiPnJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbjwvYT46IDxhIGhyZWY9IlJBTi5odG1sI1JBTiI+UkFOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSVJBTkQuaHRtbCNpbmRleC1yYW5kb20tbnVtYmVyLWdlbmVyYXRpb24tNzY3Ij5yYW5kb20gbnVtYmVyIGdlbmVyYXRpb248L2E+OiA8YSBocmVmPSJJUkFORC5odG1sI0lSQU5EIj5JUkFORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNSQU5ELmh0bWwjaW5kZXgtcmFuZG9tLW51bWJlci1nZW5lcmF0aW9uXzAwMmMtc2VlZGluZy0xMDcwIj5yYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIHNlZWRpbmc8L2E+OiA8YSBocmVmPSJTUkFORC5odG1sI1NSQU5EIj5TUkFORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJBTkRPTV8wMDVmU0VFRC5odG1sI2luZGV4LXJhbmRvbS1udW1iZXItZ2VuZXJhdGlvbl8wMDJjLXNlZWRpbmctOTY2Ij5yYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIHNlZWRpbmc8L2E+OiA8YSBocmVmPSJSQU5ET01fMDA1ZlNFRUQuaHRtbCNSQU5ET01fMDA1ZlNFRUQiPlJBTkRPTV9TRUVEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkFORE9NXzAwNWZOVU1CRVIuaHRtbCNpbmRleC1SQU5ET01fMDA1Zk5VTUJFUi05NjMiPjxjb2RlPlJBTkRPTV9OVU1CRVI8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkFORE9NXzAwNWZOVU1CRVIuaHRtbCNSQU5ET01fMDA1Zk5VTUJFUiI+UkFORE9NX05VTUJFUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJBTkRPTV8wMDVmU0VFRC5odG1sI2luZGV4LVJBTkRPTV8wMDVmU0VFRC05NjUiPjxjb2RlPlJBTkRPTV9TRUVEPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJBTkRPTV8wMDVmU0VFRC5odG1sI1JBTkRPTV8wMDVmU0VFRCI+UkFORE9NX1NFRUQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSQU5HRS5odG1sI2luZGV4LVJBTkdFLTk2OCI+PGNvZGU+UkFOR0U8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkFOR0UuaHRtbCNSQU5HRSI+UkFOR0U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtcmFuZ2UtY2hlY2tpbmctMjYyIj5yYW5nZSBjaGVja2luZzwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkFOSy5odG1sI2luZGV4LXJhbmstOTcxIj5yYW5rPC9hPjogPGEgaHJlZj0iUkFOSy5odG1sI1JBTksiPlJBTks8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSQU5LLmh0bWwjaW5kZXgtUkFOSy05NzAiPjxjb2RlPlJBTks8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkFOSy5odG1sI1JBTksiPlJBTks8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtcmVfMDAyZGFzc29jaWF0aW9uLW9mLXBhcmVudGhlc2l6ZWQtZXhwcmVzc2lvbnMtMjg4Ij5yZS1hc3NvY2lhdGlvbiBvZiBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25zPC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGR0VUQy5odG1sI2luZGV4LXJlYWQtY2hhcmFjdGVyXzAwMmMtc3RyZWFtLW1vZGUtNjM4Ij5yZWFkIGNoYXJhY3Rlciwgc3RyZWFtIG1vZGU8L2E+OiA8YSBocmVmPSJGR0VUQy5odG1sI0ZHRVRDIj5GR0VUQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZHRVQuaHRtbCNpbmRleC1yZWFkLWNoYXJhY3Rlcl8wMDJjLXN0cmVhbS1tb2RlLTYzNCI+cmVhZCBjaGFyYWN0ZXIsIHN0cmVhbSBtb2RlPC9hPjogPGEgaHJlZj0iRkdFVC5odG1sI0ZHRVQiPkZHRVQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSRUFMLmh0bWwjaW5kZXgtUkVBTC05NzIiPjxjb2RlPlJFQUw8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkVBTC5odG1sI1JFQUwiPlJFQUw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI2luZGV4LXJlYWwta2luZC0xMDExIj5yZWFsIGtpbmQ8L2E+OiA8YSBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5EIj5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFWFBPTkVOVC5odG1sI2luZGV4LXJlYWwtbnVtYmVyXzAwMmMtZXhwb25lbnQtNjI1Ij5yZWFsIG51bWJlciwgZXhwb25lbnQ8L2E+OiA8YSBocmVmPSJFWFBPTkVOVC5odG1sI0VYUE9ORU5UIj5FWFBPTkVOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZSQUNUSU9OLmh0bWwjaW5kZXgtcmVhbC1udW1iZXJfMDAyYy1mcmFjdGlvbi02NTciPnJlYWwgbnVtYmVyLCBmcmFjdGlvbjwvYT46IDxhIGhyZWY9IkZSQUNUSU9OLmh0bWwjRlJBQ1RJT04iPkZSQUNUSU9OPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTkVBUkVTVC5odG1sI2luZGV4LXJlYWwtbnVtYmVyXzAwMmMtbmVhcmVzdC1kaWZmZXJlbnQtOTA3Ij5yZWFsIG51bWJlciwgbmVhcmVzdCBkaWZmZXJlbnQ8L2E+OiA8YSBocmVmPSJORUFSRVNULmh0bWwjTkVBUkVTVCI+TkVBUkVTVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQQUNJTkcuaHRtbCNpbmRleC1yZWFsLW51bWJlcl8wMDJjLXJlbGF0aXZlLXNwYWNpbmctMTA1NiI+cmVhbCBudW1iZXIsIHJlbGF0aXZlIHNwYWNpbmc8L2E+OiA8YSBocmVmPSJTUEFDSU5HLmh0bWwjU1BBQ0lORyI+U1BBQ0lORzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJSU1BBQ0lORy5odG1sI2luZGV4LXJlYWwtbnVtYmVyXzAwMmMtcmVsYXRpdmUtc3BhY2luZy05ODgiPnJlYWwgbnVtYmVyLCByZWxhdGl2ZSBzcGFjaW5nPC9hPjogPGEgaHJlZj0iUlJTUEFDSU5HLmh0bWwjUlJTUEFDSU5HIj5SUlNQQUNJTkc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTQ0FMRS5odG1sI2luZGV4LXJlYWwtbnVtYmVyXzAwMmMtc2NhbGUtOTk0Ij5yZWFsIG51bWJlciwgc2NhbGU8L2E+OiA8YSBocmVmPSJTQ0FMRS5odG1sI1NDQUxFIj5TQ0FMRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNFVF8wMDVmRVhQT05FTlQuaHRtbCNpbmRleC1yZWFsLW51bWJlcl8wMDJjLXNldC1leHBvbmVudC0xMDE1Ij5yZWFsIG51bWJlciwgc2V0IGV4cG9uZW50PC9hPjogPGEgaHJlZj0iU0VUXzAwNWZFWFBPTkVOVC5odG1sI1NFVF8wMDVmRVhQT05FTlQiPlNFVF9FWFBPTkVOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1SZWFsbG9jYXRlLXRoZS1MSFMtaW4tYXNzaWdubWVudHMtMjkwIj5SZWFsbG9jYXRlIHRoZSBMSFMgaW4gYXNzaWdubWVudHM8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1SZWFsbG9jYXRlLXRoZS1MSFMtaW4tYXNzaWdubWVudHNfMDAyYy1ub3RpZmljYXRpb24tMTg5Ij5SZWFsbG9jYXRlIHRoZSBMSFMgaW4gYXNzaWdubWVudHMsIG5vdGlmaWNhdGlvbjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkVBTC5odG1sI2luZGV4LVJFQUxQQVJULTk3MyI+PGNvZGU+UkVBTFBBUlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkVBTC5odG1sI1JFQUwiPlJFQUw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTVFJVQ1RVUkUtYW5kLVJFQ09SRC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiUkVDT1JEXzAwN2QtMzUwIj48Y29kZT5SRUNPUkQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1RSVUNUVVJFLWFuZC1SRUNPUkQuaHRtbCNTVFJVQ1RVUkUtYW5kLVJFQ09SRCI+U1RSVUNUVVJFIGFuZCBSRUNPUkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQQVJJVFkuaHRtbCNpbmRleC1SZWR1Y3Rpb25fMDAyYy1YT1ItOTM4Ij5SZWR1Y3Rpb24sIFhPUjwvYT46IDxhIGhyZWY9IlBBUklUWS5odG1sI1BBUklUWSI+UEFSSVRZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTU9ELmh0bWwjaW5kZXgtcmVtYWluZGVyLTg5NiI+cmVtYWluZGVyPC9hPjogPGEgaHJlZj0iTU9ELmh0bWwjTU9EIj5NT0Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSRU5BTUUuaHRtbCNpbmRleC1SRU5BTUUtOTc5Ij48Y29kZT5SRU5BTUU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkVOQU1FLmh0bWwjUkVOQU1FIj5SRU5BTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtcmVwYWNraW5nLWFycmF5cy0yNzUiPnJlcGFja2luZyBhcnJheXM8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJFUEVBVC5odG1sI2luZGV4LVJFUEVBVC05ODEiPjxjb2RlPlJFUEVBVDwvY29kZT48L2E+OiA8YSBocmVmPSJSRVBFQVQuaHRtbCNSRVBFQVQiPlJFUEVBVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJFU0hBUEUuaHRtbCNpbmRleC1SRVNIQVBFLTk4NCI+PGNvZGU+UkVTSEFQRTwvY29kZT48L2E+OiA8YSBocmVmPSJSRVNIQVBFLmh0bWwjUkVTSEFQRSI+UkVTSEFQRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRTSElGVFIuaHRtbCNpbmRleC1yaWdodC1zaGlmdF8wMDJjLWNvbWJpbmVkLTU5NCI+cmlnaHQgc2hpZnQsIGNvbWJpbmVkPC9hPjogPGEgaHJlZj0iRFNISUZUUi5odG1sI0RTSElGVFIiPkRTSElGVFI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUVJULmh0bWwjaW5kZXgtcm9vdC0xMDY3Ij5yb290PC9hPjogPGEgaHJlZj0iU1FSVC5odG1sI1NRUlQiPlNRUlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDRUlMSU5HLmh0bWwjaW5kZXgtcm91bmRpbmdfMDAyYy1jZWlsaW5nLTUxNCI+cm91bmRpbmcsIGNlaWxpbmc8L2E+OiA8YSBocmVmPSJDRUlMSU5HLmh0bWwjQ0VJTElORyI+Q0VJTElORzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFOSU5ULmh0bWwjaW5kZXgtcm91bmRpbmdfMDAyYy1jZWlsaW5nLTQyNCI+cm91bmRpbmcsIGNlaWxpbmc8L2E+OiA8YSBocmVmPSJBTklOVC5odG1sI0FOSU5UIj5BTklOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZMT09SLmh0bWwjaW5kZXgtcm91bmRpbmdfMDAyYy1mbG9vci02NDMiPnJvdW5kaW5nLCBmbG9vcjwvYT46IDxhIGhyZWY9IkZMT09SLmh0bWwjRkxPT1IiPkZMT09SPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQUlOVC5odG1sI2luZGV4LXJvdW5kaW5nXzAwMmMtZmxvb3ItNDEwIj5yb3VuZGluZywgZmxvb3I8L2E+OiA8YSBocmVmPSJBSU5ULmh0bWwjQUlOVCI+QUlOVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik5JTlQuaHRtbCNpbmRleC1yb3VuZGluZ18wMDJjLW5lYXJlc3Qtd2hvbGUtbnVtYmVyLTkxNCI+cm91bmRpbmcsIG5lYXJlc3Qgd2hvbGUgbnVtYmVyPC9hPjogPGEgaHJlZj0iTklOVC5odG1sI05JTlQiPk5JTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSUlNQQUNJTkcuaHRtbCNpbmRleC1SUlNQQUNJTkctOTg3Ij48Y29kZT5SUlNQQUNJTkc8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlJTUEFDSU5HLmh0bWwjUlJTUEFDSU5HIj5SUlNQQUNJTkc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSU0hJRlQuaHRtbCNpbmRleC1SU0hJRlQtOTkwIj48Y29kZT5SU0hJRlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUlNISUZULmh0bWwjUlNISUZUIj5SU0hJRlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtcnVuXzAwMmR0aW1lLWNoZWNraW5nLTI2NSI+cnVuLXRpbWUgY2hlY2tpbmc8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNBTUVfMDA1ZlRZUEVfMDA1ZkFTLmh0bWwjaW5kZXgtU0FNRV8wMDVmVFlQRV8wMDVmQVMtOTkyIj48Y29kZT5TQU1FX1RZUEVfQVM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0FNRV8wMDVmVFlQRV8wMDVmQVMuaHRtbCNTQU1FXzAwNWZUWVBFXzAwNWZBUyI+U0FNRV9UWVBFX0FTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiU0FWRV8wMDdkLXN0YXRlbWVudC0yMzQiPjxjb2RlPlNBVkU8L2NvZGU+IHN0YXRlbWVudDwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0NBTEUuaHRtbCNpbmRleC1TQ0FMRS05OTMiPjxjb2RlPlNDQUxFPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNDQUxFLmh0bWwjU0NBTEUiPlNDQUxFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0NBTi5odG1sI2luZGV4LVNDQU4tOTk2Ij48Y29kZT5TQ0FOPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNDQU4uaHRtbCNTQ0FOIj5TQ0FOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1zZWFyY2gtcGF0aC0yMDYiPnNlYXJjaCBwYXRoPC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI2luZGV4LXNlYXJjaC1wYXRoc18wMDJjLWZvci1pbmNsdWRlZC1maWxlcy0yMTIiPnNlYXJjaCBwYXRocywgZm9yIGluY2x1ZGVkIGZpbGVzPC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTRUNORFMuaHRtbCNpbmRleC1TRUNORFMtOTk4Ij48Y29kZT5TRUNORFM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0VDTkRTLmh0bWwjU0VDTkRTIj5TRUNORFM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTRUNPTkQuaHRtbCNpbmRleC1TRUNPTkQtMTAwMSI+PGNvZGU+U0VDT05EPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNFQ09ORC5odG1sI1NFQ09ORCI+U0VDT05EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1JBTkQuaHRtbCNpbmRleC1zZWVkaW5nLWEtcmFuZG9tLW51bWJlci1nZW5lcmF0b3ItMTA3MSI+c2VlZGluZyBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yPC9hPjogPGEgaHJlZj0iU1JBTkQuaHRtbCNTUkFORCI+U1JBTkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSQU5ET01fMDA1ZlNFRUQuaHRtbCNpbmRleC1zZWVkaW5nLWEtcmFuZG9tLW51bWJlci1nZW5lcmF0b3ItOTY3Ij5zZWVkaW5nIGEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I8L2E+OiA8YSBocmVmPSJSQU5ET01fMDA1ZlNFRUQuaHRtbCNSQU5ET01fMDA1ZlNFRUQiPlJBTkRPTV9TRUVEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQuaHRtbCNpbmRleC1TRUxFQ1RFRF8wMDVmQ0hBUl8wMDVmS0lORC0xMDA0Ij48Y29kZT5TRUxFQ1RFRF9DSEFSX0tJTkQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQuaHRtbCNTRUxFQ1RFRF8wMDVmQ0hBUl8wMDVmS0lORCI+U0VMRUNURURfQ0hBUl9LSU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sI2luZGV4LVNFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQtMTAwNyI+PGNvZGU+U0VMRUNURURfSU5UX0tJTkQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQiPlNFTEVDVEVEX0lOVF9LSU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQuaHRtbCNpbmRleC1TRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC0xMDEwIj48Y29kZT5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQuaHRtbCNTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORCI+U0VMRUNURURfUkVBTF9LSU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0VUXzAwNWZFWFBPTkVOVC5odG1sI2luZGV4LVNFVF8wMDVmRVhQT05FTlQtMTAxNCI+PGNvZGU+U0VUX0VYUE9ORU5UPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNFVF8wMDVmRVhQT05FTlQuaHRtbCNTRVRfMDA1ZkVYUE9ORU5UIj5TRVRfRVhQT05FTlQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSEFQRS5odG1sI2luZGV4LVNIQVBFLTEwMTciPjxjb2RlPlNIQVBFPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNIQVBFLmh0bWwjU0hBUEUiPlNIQVBFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hJRlRMLmh0bWwjaW5kZXgtc2hpZnRfMDAyYy1sZWZ0LTEwMjQiPnNoaWZ0LCBsZWZ0PC9hPjogPGEgaHJlZj0iU0hJRlRMLmh0bWwjU0hJRlRMIj5TSElGVEw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEU0hJRlRMLmh0bWwjaW5kZXgtc2hpZnRfMDAyYy1sZWZ0LTU5MiI+c2hpZnQsIGxlZnQ8L2E+OiA8YSBocmVmPSJEU0hJRlRMLmh0bWwjRFNISUZUTCI+RFNISUZUTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNISUZUUi5odG1sI2luZGV4LXNoaWZ0XzAwMmMtcmlnaHQtMTAyNyI+c2hpZnQsIHJpZ2h0PC9hPjogPGEgaHJlZj0iU0hJRlRSLmh0bWwjU0hJRlRSIj5TSElGVFI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEU0hJRlRSLmh0bWwjaW5kZXgtc2hpZnRfMDAyYy1yaWdodC01OTUiPnNoaWZ0LCByaWdodDwvYT46IDxhIGhyZWY9IkRTSElGVFIuaHRtbCNEU0hJRlRSIj5EU0hJRlRSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hJRlRBLmh0bWwjaW5kZXgtc2hpZnRfMDAyYy1yaWdodC13aXRoLWZpbGwtMTAyMSI+c2hpZnQsIHJpZ2h0IHdpdGggZmlsbDwvYT46IDxhIGhyZWY9IlNISUZUQS5odG1sI1NISUZUQSI+U0hJRlRBPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0hJRlRBLmh0bWwjaW5kZXgtU0hJRlRBLTEwMTkiPjxjb2RlPlNISUZUQTwvY29kZT48L2E+OiA8YSBocmVmPSJTSElGVEEuaHRtbCNTSElGVEEiPlNISUZUQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNISUZUTC5odG1sI2luZGV4LVNISUZUTC0xMDIyIj48Y29kZT5TSElGVEw8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0hJRlRMLmh0bWwjU0hJRlRMIj5TSElGVEw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSElGVFIuaHRtbCNpbmRleC1TSElGVFItMTAyNSI+PGNvZGU+U0hJRlRSPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNISUZUUi5odG1sI1NISUZUUiI+U0hJRlRSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU5UMi5odG1sI2luZGV4LVNIT1JULTc1NSI+PGNvZGU+U0hPUlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iSU5UMi5odG1sI0lOVDIiPklOVDI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSUdOLmh0bWwjaW5kZXgtU0lHTi0xMDI4Ij48Y29kZT5TSUdOPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNJR04uaHRtbCNTSUdOIj5TSUdOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0lHTi5odG1sI2luZGV4LXNpZ24tY29weWluZy0xMDMxIj5zaWduIGNvcHlpbmc8L2E+OiA8YSBocmVmPSJTSUdOLmh0bWwjU0lHTiI+U0lHTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNJR05BTC5odG1sI2luZGV4LVNJR05BTC0xMDMyIj48Y29kZT5TSUdOQUw8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0lHTkFMLmh0bWwjU0lHTkFMIj5TSUdOQUw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSU4uaHRtbCNpbmRleC1TSU4tMTAzNCI+PGNvZGU+U0lOPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNJTi5odG1sI1NJTiI+U0lOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0lOLmh0bWwjaW5kZXgtc2luZS0xMDQwIj5zaW5lPC9hPjogPGEgaHJlZj0iU0lOLmh0bWwjU0lOIj5TSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSU5ILmh0bWwjaW5kZXgtc2luZV8wMDJjLWh5cGVyYm9saWMtMTA0NSI+c2luZSwgaHlwZXJib2xpYzwvYT46IDxhIGhyZWY9IlNJTkguaHRtbCNTSU5IIj5TSU5IPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVNJTkguaHRtbCNpbmRleC1zaW5lXzAwMmMtaHlwZXJib2xpY18wMDJjLWludmVyc2UtNDM3Ij5zaW5lLCBoeXBlcmJvbGljLCBpbnZlcnNlPC9hPjogPGEgaHJlZj0iQVNJTkguaHRtbCNBU0lOSCI+QVNJTkg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBU0lOLmh0bWwjaW5kZXgtc2luZV8wMDJjLWludmVyc2UtNDMxIj5zaW5lLCBpbnZlcnNlPC9hPjogPGEgaHJlZj0iQVNJTi5odG1sI0FTSU4iPkFTSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSU5ILmh0bWwjaW5kZXgtU0lOSC0xMDQxIj48Y29kZT5TSU5IPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNJTkguaHRtbCNTSU5IIj5TSU5IPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0laRS5odG1sI2luZGV4LVNJWkUtMTA0NiI+PGNvZGU+U0laRTwvY29kZT48L2E+OiA8YSBocmVmPSJTSVpFLmh0bWwjU0laRSI+U0laRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJJVF8wMDVmU0laRS5odG1sI2luZGV4LXNpemUtb2YtYS12YXJpYWJsZV8wMDJjLWluLWJpdHMtNDkxIj5zaXplIG9mIGEgdmFyaWFibGUsIGluIGJpdHM8L2E+OiA8YSBocmVmPSJCSVRfMDA1ZlNJWkUuaHRtbCNCSVRfMDA1ZlNJWkUiPkJJVF9TSVpFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0laRU9GLmh0bWwjaW5kZXgtc2l6ZS1vZi1hbi1leHByZXNzaW9uLTEwNTIiPnNpemUgb2YgYW4gZXhwcmVzc2lvbjwvYT46IDxhIGhyZWY9IlNJWkVPRi5odG1sI1NJWkVPRiI+U0laRU9GPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ18wMDVmU0laRU9GLmh0bWwjaW5kZXgtc2l6ZS1vZi1hbi1leHByZXNzaW9uLTUxMSI+c2l6ZSBvZiBhbiBleHByZXNzaW9uPC9hPjogPGEgaHJlZj0iQ18wMDVmU0laRU9GLmh0bWwjQ18wMDVmU0laRU9GIj5DX1NJWkVPRjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNJWkVPRi5odG1sI2luZGV4LVNJWkVPRi0xMDUwIj48Y29kZT5TSVpFT0Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0laRU9GLmh0bWwjU0laRU9GIj5TSVpFT0Y8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTTEVFUC5odG1sI2luZGV4LVNMRUVQLTEwNTMiPjxjb2RlPlNMRUVQPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNMRUVQLmh0bWwjU0xFRVAiPlNMRUVQPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkVBTC5odG1sI2luZGV4LVNOR0wtOTc2Ij48Y29kZT5TTkdMPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJFQUwuaHRtbCNSRUFMIj5SRUFMPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BBQ0lORy5odG1sI2luZGV4LVNQQUNJTkctMTA1NSI+PGNvZGU+U1BBQ0lORzwvY29kZT48L2E+OiA8YSBocmVmPSJTUEFDSU5HLmh0bWwjU1BBQ0lORyI+U1BBQ0lORzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQUkVBRC5odG1sI2luZGV4LVNQUkVBRC0xMDU4Ij48Y29kZT5TUFJFQUQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BSRUFELmh0bWwjU1BSRUFEIj5TUFJFQUQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUVJULmh0bWwjaW5kZXgtU1FSVC0xMDYyIj48Y29kZT5TUVJUPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNRUlQuaHRtbCNTUVJUIj5TUVJUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1FSVC5odG1sI2luZGV4LXNxdWFyZV8wMDJkcm9vdC0xMDY4Ij5zcXVhcmUtcm9vdDwvYT46IDxhIGhyZWY9IlNRUlQuaHRtbCNTUVJUIj5TUVJUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1JBTkQuaHRtbCNpbmRleC1TUkFORC0xMDY5Ij48Y29kZT5TUkFORDwvY29kZT48L2E+OiA8YSBocmVmPSJTUkFORC5odG1sI1NSQU5EIj5TUkFORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0YW5kYXJkcy5odG1sI2luZGV4LVN0YW5kYXJkcy0xMSI+U3RhbmRhcmRzPC9hPjogPGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj5TdGFuZGFyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTVEFULmh0bWwjaW5kZXgtU1RBVC0xMDcyIj48Y29kZT5TVEFUPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNUQVQuaHRtbCNTVEFUIj5TVEFUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiRU5VTV8wMDdkLTMwNCI+c3RhdGVtZW50LCA8Y29kZT5FTlVNPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiRU5VTUVSQVRPUl8wMDdkLTMwNSI+c3RhdGVtZW50LCA8Y29kZT5FTlVNRVJBVE9SPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiRkxVU0hfMDA3ZC0zMDAiPnN0YXRlbWVudCwgPGNvZGU+RkxVU0g8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjaW5kZXgtc3RhdGVtZW50XzAwMmMtXzAwNDBjb2RlXzAwN2JJTVBPUlRfMDA3ZC0zMjAiPnN0YXRlbWVudCwgPGNvZGU+SU1QT1JUPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlZfMDA3ZC0zMjQiPnN0YXRlbWVudCwgPGNvZGU+SVNPX0ZPUlRSQU5fRU5WPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiUFJPVEVDVEVEXzAwN2QtMzE0Ij5zdGF0ZW1lbnQsIDxjb2RlPlBST1RFQ1RFRDwvY29kZT48L2E+OiA8YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLXN0YXR1cyI+Rm9ydHJhbiAyMDAzIHN0YXR1czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1zdGF0ZW1lbnRfMDAyYy1fMDA0MGNvZGVfMDA3YlNBVkVfMDA3ZC0yMzUiPnN0YXRlbWVudCwgPGNvZGU+U0FWRTwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1zdGF0ZW1lbnRfMDAyYy1fMDA0MGNvZGVfMDA3YlVTRV8wMDJjLUlOVFJJTlNJQ18wMDdkLTMyMiI+c3RhdGVtZW50LCA8Y29kZT5VU0UsIElOVFJJTlNJQzwvY29kZT48L2E+OiA8YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDAzLXN0YXR1cyI+Rm9ydHJhbiAyMDAzIHN0YXR1czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1zdGF0ZW1lbnRfMDAyYy1fMDA0MGNvZGVfMDA3YlZBTFVFXzAwN2QtMzE2Ij5zdGF0ZW1lbnQsIDxjb2RlPlZBTFVFPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LXN0YXRlbWVudF8wMDJjLV8wMDQwY29kZV8wMDdiVk9MQVRJTEVfMDA3ZC0zMTgiPnN0YXRlbWVudCwgPGNvZGU+Vk9MQVRJTEU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTVE9SQUdFXzAwNWZTSVpFLmh0bWwjaW5kZXgtc3RvcmFnZS1zaXplLTEwNzUiPnN0b3JhZ2Ugc2l6ZTwvYT46IDxhIGhyZWY9IlNUT1JBR0VfMDA1ZlNJWkUuaHRtbCNTVE9SQUdFXzAwNWZTSVpFIj5TVE9SQUdFX1NJWkU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTVE9SQUdFXzAwNWZTSVpFLmh0bWwjaW5kZXgtU1RPUkFHRV8wMDVmU0laRS0xMDc0Ij48Y29kZT5TVE9SQUdFX1NJWkU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1RPUkFHRV8wMDVmU0laRS5odG1sI1NUT1JBR0VfMDA1ZlNJWkUiPlNUT1JBR0VfU0laRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlNUUkVBTV8wMDdkLUlfMDAyZk8tMzExIj48Y29kZT5TVFJFQU08L2NvZGU+IEkvTzwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRkdFVEMuaHRtbCNpbmRleC1zdHJlYW0tbW9kZV8wMDJjLXJlYWQtY2hhcmFjdGVyLTYzOSI+c3RyZWFtIG1vZGUsIHJlYWQgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iRkdFVEMuaHRtbCNGR0VUQyI+RkdFVEM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGR0VULmh0bWwjaW5kZXgtc3RyZWFtLW1vZGVfMDAyYy1yZWFkLWNoYXJhY3Rlci02MzUiPnN0cmVhbSBtb2RlLCByZWFkIGNoYXJhY3RlcjwvYT46IDxhIGhyZWY9IkZHRVQuaHRtbCNGR0VUIj5GR0VUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlBVVEMuaHRtbCNpbmRleC1zdHJlYW0tbW9kZV8wMDJjLXdyaXRlLWNoYXJhY3Rlci02NTQiPnN0cmVhbSBtb2RlLCB3cml0ZSBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJGUFVUQy5odG1sI0ZQVVRDIj5GUFVUQzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZQVVQuaHRtbCNpbmRleC1zdHJlYW0tbW9kZV8wMDJjLXdyaXRlLWNoYXJhY3Rlci02NTAiPnN0cmVhbSBtb2RlLCB3cml0ZSBjaGFyYWN0ZXI8L2E+OiA8YSBocmVmPSJGUFVULmh0bWwjRlBVVCI+RlBVVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFESlVTVEwuaHRtbCNpbmRleC1zdHJpbmdfMDAyYy1hZGp1c3QtbGVmdC0zOTciPnN0cmluZywgYWRqdXN0IGxlZnQ8L2E+OiA8YSBocmVmPSJBREpVU1RMLmh0bWwjQURKVVNUTCI+QURKVVNUTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFESlVTVFIuaHRtbCNpbmRleC1zdHJpbmdfMDAyYy1hZGp1c3QtcmlnaHQtNDAwIj5zdHJpbmcsIGFkanVzdCByaWdodDwvYT46IDxhIGhyZWY9IkFESlVTVFIuaHRtbCNBREpVU1RSIj5BREpVU1RSPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTExULmh0bWwjaW5kZXgtc3RyaW5nXzAwMmMtY29tcGFyaXNvbi04MTAiPnN0cmluZywgY29tcGFyaXNvbjwvYT46IDxhIGhyZWY9IkxMVC5odG1sI0xMVCI+TExUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTExFLmh0bWwjaW5kZXgtc3RyaW5nXzAwMmMtY29tcGFyaXNvbi04MDciPnN0cmluZywgY29tcGFyaXNvbjwvYT46IDxhIGhyZWY9IkxMRS5odG1sI0xMRSI+TExFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTEdULmh0bWwjaW5kZXgtc3RyaW5nXzAwMmMtY29tcGFyaXNvbi04MDEiPnN0cmluZywgY29tcGFyaXNvbjwvYT46IDxhIGhyZWY9IkxHVC5odG1sI0xHVCI+TEdUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTEdFLmh0bWwjaW5kZXgtc3RyaW5nXzAwMmMtY29tcGFyaXNvbi03OTgiPnN0cmluZywgY29tcGFyaXNvbjwvYT46IDxhIGhyZWY9IkxHRS5odG1sI0xHRSI+TEdFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkVQRUFULmh0bWwjaW5kZXgtc3RyaW5nXzAwMmMtY29uY2F0ZW5hdGUtOTgzIj5zdHJpbmcsIGNvbmNhdGVuYXRlPC9hPjogPGEgaHJlZj0iUkVQRUFULmh0bWwjUkVQRUFUIj5SRVBFQVQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWRVJJRlkuaHRtbCNpbmRleC1zdHJpbmdfMDAyYy1maW5kLW1pc3Npbmctc2V0LTExMzYiPnN0cmluZywgZmluZCBtaXNzaW5nIHNldDwvYT46IDxhIGhyZWY9IlZFUklGWS5odG1sI1ZFUklGWSI+VkVSSUZZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE5CTE5LLmh0bWwjaW5kZXgtc3RyaW5nXzAwMmMtZmluZC1ub25fMDAyZGJsYW5rLWNoYXJhY3Rlci04MTIiPnN0cmluZywgZmluZCBub24tYmxhbmsgY2hhcmFjdGVyPC9hPjogPGEgaHJlZj0iTE5CTE5LLmh0bWwjTE5CTE5LIj5MTkJMTks8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTQ0FOLmh0bWwjaW5kZXgtc3RyaW5nXzAwMmMtZmluZC1zdWJzZXQtOTk3Ij5zdHJpbmcsIGZpbmQgc3Vic2V0PC9hPjogPGEgaHJlZj0iU0NBTi5odG1sI1NDQU4iPlNDQU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJJTkRFWC1pbnRyaW5zaWMuaHRtbCNpbmRleC1zdHJpbmdfMDAyYy1maW5kLXN1YnN0cmluZy03NDkiPnN0cmluZywgZmluZCBzdWJzdHJpbmc8L2E+OiA8YSBocmVmPSJJTkRFWC1pbnRyaW5zaWMuaHRtbCNJTkRFWC1pbnRyaW5zaWMiPklOREVYIGludHJpbnNpYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxFTi5odG1sI2luZGV4LXN0cmluZ18wMDJjLWxlbmd0aC03OTMiPnN0cmluZywgbGVuZ3RoPC9hPjogPGEgaHJlZj0iTEVOLmh0bWwjTEVOIj5MRU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJMRU5fMDA1ZlRSSU0uaHRtbCNpbmRleC1zdHJpbmdfMDAyYy1sZW5ndGhfMDAyYy13aXRob3V0LXRyYWlsaW5nLXdoaXRlc3BhY2UtNzk1Ij5zdHJpbmcsIGxlbmd0aCwgd2l0aG91dCB0cmFpbGluZyB3aGl0ZXNwYWNlPC9hPjogPGEgaHJlZj0iTEVOXzAwNWZUUklNLmh0bWwjTEVOXzAwNWZUUklNIj5MRU5fVFJJTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRSSU0uaHRtbCNpbmRleC1zdHJpbmdfMDAyYy1yZW1vdmUtdHJhaWxpbmctd2hpdGVzcGFjZS0xMTIwIj5zdHJpbmcsIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlPC9hPjogPGEgaHJlZj0iVFJJTS5odG1sI1RSSU0iPlRSSU08L2E+PC9saT4KKzxsaT48YSBocmVmPSJSRVBFQVQuaHRtbCNpbmRleC1zdHJpbmdfMDAyYy1yZXBlYXQtOTgyIj5zdHJpbmcsIHJlcGVhdDwvYT46IDxhIGhyZWY9IlJFUEVBVC5odG1sI1JFUEVBVCI+UkVQRUFUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MuaHRtbCNpbmRleC1zdHJpbmdzXzAwMmMtdmFyeWluZy1sZW5ndGgtMTQiPnN0cmluZ3MsIHZhcnlpbmcgbGVuZ3RoPC9hPjogPGEgaHJlZj0iVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MuaHRtbCNWYXJ5aW5nLUxlbmd0aC1DaGFyYWN0ZXItU3RyaW5ncyI+VmFyeWluZyBMZW5ndGggQ2hhcmFjdGVyIFN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTVFJVQ1RVUkUtYW5kLVJFQ09SRC5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiU1RSVUNUVVJFXzAwN2QtMzQ5Ij48Y29kZT5TVFJVQ1RVUkU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1RSVUNUVVJFLWFuZC1SRUNPUkQuaHRtbCNTVFJVQ1RVUkUtYW5kLVJFQ09SRCI+U1RSVUNUVVJFIGFuZCBSRUNPUkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtc3RydWN0dXJlLXBhY2tpbmctMjczIj5zdHJ1Y3R1cmUgcGFja2luZzwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LXN1YnNjcmlwdC1jaGVja2luZy0yNjMiPnN1YnNjcmlwdCBjaGVja2luZzwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSU5ERVgtaW50cmluc2ljLmh0bWwjaW5kZXgtc3Vic3RyaW5nLXBvc2l0aW9uLTc0OCI+c3Vic3RyaW5nIHBvc2l0aW9uPC9hPjogPGEgaHJlZj0iSU5ERVgtaW50cmluc2ljLmh0bWwjSU5ERVgtaW50cmluc2ljIj5JTkRFWCBpbnRyaW5zaWM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTVU0uaHRtbCNpbmRleC1TVU0tMTA3NiI+PGNvZGU+U1VNPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNVTS5odG1sI1NVTSI+U1VNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1VNLmh0bWwjaW5kZXgtc3VtLWFycmF5LWVsZW1lbnRzLTEwODAiPnN1bSBhcnJheSBlbGVtZW50czwvYT46IDxhIGhyZWY9IlNVTS5odG1sI1NVTSI+U1VNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXN1cHByZXNzaW5nLXdhcm5pbmdzLTEyMiI+c3VwcHJlc3Npbmcgd2FybmluZ3M8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtc3ltYm9sLW5hbWVzLTM1Ij5zeW1ib2wgbmFtZXM8L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1zeW1ib2wtbmFtZXNfMDAyYy10cmFuc2Zvcm1pbmctMjQ1Ij5zeW1ib2wgbmFtZXMsIHRyYW5zZm9ybWluZzwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LXN5bWJvbC1uYW1lc18wMDJjLXVuZGVyc2NvcmVzLTI0MyI+c3ltYm9sIG5hbWVzLCB1bmRlcnNjb3JlczwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1lNTE5LLmh0bWwjaW5kZXgtU1lNTE5LLTEwODEiPjxjb2RlPlNZTUxOSzwvY29kZT48L2E+OiA8YSBocmVmPSJTWU1MTksuaHRtbCNTWU1MTksiPlNZTUxOSzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1zeW50YXgtY2hlY2tpbmctMTI2Ij5zeW50YXggY2hlY2tpbmc8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNZU1RFTS5odG1sI2luZGV4LVNZU1RFTS0xMDg0Ij48Y29kZT5TWVNURU08L2NvZGU+PC9hPjogPGEgaHJlZj0iU1lTVEVNLmh0bWwjU1lTVEVNIj5TWVNURU08L2E+PC9saT4KKzxsaT48YSBocmVmPSJQRVJST1IuaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy1lcnJvci1oYW5kbGluZy05NDEiPnN5c3RlbSwgZXJyb3IgaGFuZGxpbmc8L2E+OiA8YSBocmVmPSJQRVJST1IuaHRtbCNQRVJST1IiPlBFUlJPUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklFUlJOTy5odG1sI2luZGV4LXN5c3RlbV8wMDJjLWVycm9yLWhhbmRsaW5nLTc0MyI+c3lzdGVtLCBlcnJvciBoYW5kbGluZzwvYT46IDxhIGhyZWY9IklFUlJOTy5odG1sI0lFUlJOTyI+SUVSUk5PPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR0VSUk9SLmh0bWwjaW5kZXgtc3lzdGVtXzAwMmMtZXJyb3ItaGFuZGxpbmctNjczIj5zeXN0ZW0sIGVycm9yIGhhbmRsaW5nPC9hPjogPGEgaHJlZj0iR0VSUk9SLmh0bWwjR0VSUk9SIj5HRVJST1I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRHSUQuaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy1ncm91cC1JRC02OTAiPnN5c3RlbSwgZ3JvdXAgSUQ8L2E+OiA8YSBocmVmPSJHRVRHSUQuaHRtbCNHRVRHSUQiPkdFVEdJRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhPU1ROTS5odG1sI2luZGV4LXN5c3RlbV8wMDJjLWhvc3QtbmFtZS03MDMiPnN5c3RlbSwgaG9zdCBuYW1lPC9hPjogPGEgaHJlZj0iSE9TVE5NLmh0bWwjSE9TVE5NIj5IT1NUTk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRMT0cuaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy1sb2dpbi1uYW1lLTY5MiI+c3lzdGVtLCBsb2dpbiBuYW1lPC9hPjogPGEgaHJlZj0iR0VUTE9HLmh0bWwjR0VUTE9HIj5HRVRMT0c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRQSUQuaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy1wcm9jZXNzLUlELTY5NSI+c3lzdGVtLCBwcm9jZXNzIElEPC9hPjogPGEgaHJlZj0iR0VUUElELmh0bWwjR0VUUElEIj5HRVRQSUQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSUdOQUwuaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy1zaWduYWwtaGFuZGxpbmctMTAzMyI+c3lzdGVtLCBzaWduYWwgaGFuZGxpbmc8L2E+OiA8YSBocmVmPSJTSUdOQUwuaHRtbCNTSUdOQUwiPlNJR05BTDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNZU1RFTS5odG1sI2luZGV4LXN5c3RlbV8wMDJjLXN5c3RlbS1jYWxsLTEwODUiPnN5c3RlbSwgc3lzdGVtIGNhbGw8L2E+OiA8YSBocmVmPSJTWVNURU0uaHRtbCNTWVNURU0iPlNZU1RFTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUuaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy1zeXN0ZW0tY2FsbC02MTIiPnN5c3RlbSwgc3lzdGVtIGNhbGw8L2E+OiA8YSBocmVmPSJFWEVDVVRFXzAwNWZDT01NQU5EXzAwNWZMSU5FLmh0bWwjRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORSI+RVhFQ1VURV9DT01NQU5EX0xJTkU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUVFlOQU0uaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy10ZXJtaW5hbC0xMTIyIj5zeXN0ZW0sIHRlcm1pbmFsPC9hPjogPGEgaHJlZj0iVFRZTkFNLmh0bWwjVFRZTkFNIj5UVFlOQU08L2E+PC9saT4KKzxsaT48YSBocmVmPSJJU0FUVFkuaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy10ZXJtaW5hbC03NzMiPnN5c3RlbSwgdGVybWluYWw8L2E+OiA8YSBocmVmPSJJU0FUVFkuaHRtbCNJU0FUVFkiPklTQVRUWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVFVJRC5odG1sI2luZGV4LXN5c3RlbV8wMDJjLXVzZXItSUQtNjk4Ij5zeXN0ZW0sIHVzZXIgSUQ8L2E+OiA8YSBocmVmPSJHRVRVSUQuaHRtbCNHRVRVSUQiPkdFVFVJRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkdFVENXRC5odG1sI2luZGV4LXN5c3RlbV8wMDJjLXdvcmtpbmctZGlyZWN0b3J5LTY4NCI+c3lzdGVtLCB3b3JraW5nIGRpcmVjdG9yeTwvYT46IDxhIGhyZWY9IkdFVENXRC5odG1sI0dFVENXRCI+R0VUQ1dEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ0hESVIuaHRtbCNpbmRleC1zeXN0ZW1fMDAyYy13b3JraW5nLWRpcmVjdG9yeS01MTgiPnN5c3RlbSwgd29ya2luZyBkaXJlY3Rvcnk8L2E+OiA8YSBocmVmPSJDSERJUi5odG1sI0NIRElSIj5DSERJUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNZU1RFTV8wMDVmQ0xPQ0suaHRtbCNpbmRleC1TWVNURU1fMDA1ZkNMT0NLLTEwODYiPjxjb2RlPlNZU1RFTV9DTE9DSzwvY29kZT48L2E+OiA8YSBocmVmPSJTWVNURU1fMDA1ZkNMT0NLLmh0bWwjU1lTVEVNXzAwNWZDTE9DSyI+U1lTVEVNX0NMT0NLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXRhYnVsYXRvcnMtMTY4Ij50YWJ1bGF0b3JzPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUQU4uaHRtbCNpbmRleC1UQU4tMTA4OSI+PGNvZGU+VEFOPC9jb2RlPjwvYT46IDxhIGhyZWY9IlRBTi5odG1sI1RBTiI+VEFOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEFOLmh0bWwjaW5kZXgtdGFuZ2VudC0xMDkyIj50YW5nZW50PC9hPjogPGEgaHJlZj0iVEFOLmh0bWwjVEFOIj5UQU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJUQU5ILmh0bWwjaW5kZXgtdGFuZ2VudF8wMDJjLWh5cGVyYm9saWMtMTA5NyI+dGFuZ2VudCwgaHlwZXJib2xpYzwvYT46IDxhIGhyZWY9IlRBTkguaHRtbCNUQU5IIj5UQU5IPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRBTkguaHRtbCNpbmRleC10YW5nZW50XzAwMmMtaHlwZXJib2xpY18wMDJjLWludmVyc2UtNDU0Ij50YW5nZW50LCBoeXBlcmJvbGljLCBpbnZlcnNlPC9hPjogPGEgaHJlZj0iQVRBTkguaHRtbCNBVEFOSCI+QVRBTkg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBVEFOMi5odG1sI2luZGV4LXRhbmdlbnRfMDAyYy1pbnZlcnNlLTQ0OCI+dGFuZ2VudCwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkFUQU4yLmh0bWwjQVRBTjIiPkFUQU4yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRBTi5odG1sI2luZGV4LXRhbmdlbnRfMDAyYy1pbnZlcnNlLTQ0NCI+dGFuZ2VudCwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkFUQU4uaHRtbCNBVEFOIj5BVEFOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEFOSC5odG1sI2luZGV4LVRBTkgtMTA5MyI+PGNvZGU+VEFOSDwvY29kZT48L2E+OiA8YSBocmVmPSJUQU5ILmh0bWwjVEFOSCI+VEFOSDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVYSVQuaHRtbCNpbmRleC10ZXJtaW5hdGUtcHJvZ3JhbS02MTYiPnRlcm1pbmF0ZSBwcm9ncmFtPC9hPjogPGEgaHJlZj0iRVhJVC5odG1sI0VYSVQiPkVYSVQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQk9SVC5odG1sI2luZGV4LXRlcm1pbmF0ZS1wcm9ncmFtXzAwMmMtd2l0aC1jb3JlLWR1bXAtMzcyIj50ZXJtaW5hdGUgcHJvZ3JhbSwgd2l0aCBjb3JlIGR1bXA8L2E+OiA8YSBocmVmPSJBQk9SVC5odG1sI0FCT1JUIj5BQk9SVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRISVNfMDA1ZklNQUdFLmh0bWwjaW5kZXgtVEhJU18wMDVmSU1BR0UtMTA5OCI+PGNvZGU+VEhJU19JTUFHRTwvY29kZT48L2E+OiA8YSBocmVmPSJUSElTXzAwNWZJTUFHRS5odG1sI1RISVNfMDA1ZklNQUdFIj5USElTX0lNQUdFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVGhyZWFkXzAwMmRzYWZldHktb2YtdGhlLXJ1bnRpbWUtbGlicmFyeS5odG1sI2luZGV4LXRocmVhZF8wMDJkc2FmZXR5XzAwMmMtdGhyZWFkcy0zMjciPnRocmVhZC1zYWZldHksIHRocmVhZHM8L2E+OiA8YSBocmVmPSJUaHJlYWRfMDAyZHNhZmV0eS1vZi10aGUtcnVudGltZS1saWJyYXJ5Lmh0bWwjVGhyZWFkXzAwMmRzYWZldHktb2YtdGhlLXJ1bnRpbWUtbGlicmFyeSI+VGhyZWFkLXNhZmV0eSBvZiB0aGUgcnVudGltZSBsaWJyYXJ5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElNRS5odG1sI2luZGV4LVRJTUUtMTEwMSI+PGNvZGU+VElNRTwvY29kZT48L2E+OiA8YSBocmVmPSJUSU1FLmh0bWwjVElNRSI+VElNRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNZU1RFTV8wMDVmQ0xPQ0suaHRtbCNpbmRleC10aW1lXzAwMmMtY2xvY2stdGlja3MtMTA4NyI+dGltZSwgY2xvY2sgdGlja3M8L2E+OiA8YSBocmVmPSJTWVNURU1fMDA1ZkNMT0NLLmh0bWwjU1lTVEVNXzAwNWZDTE9DSyI+U1lTVEVNX0NMT0NLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUNMT0NLOC5odG1sI2luZGV4LXRpbWVfMDAyYy1jbG9jay10aWNrcy04NzIiPnRpbWUsIGNsb2NrIHRpY2tzPC9hPjogPGEgaHJlZj0iTUNMT0NLOC5odG1sI01DTE9DSzgiPk1DTE9DSzg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNQ0xPQ0suaHRtbCNpbmRleC10aW1lXzAwMmMtY2xvY2stdGlja3MtODY5Ij50aW1lLCBjbG9jayB0aWNrczwvYT46IDxhIGhyZWY9Ik1DTE9DSy5odG1sI01DTE9DSyI+TUNMT0NLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iR01USU1FLmh0bWwjaW5kZXgtdGltZV8wMDJjLWNvbnZlcnNpb24tdG8tR01ULWluZm8tNzAxIj50aW1lLCBjb252ZXJzaW9uIHRvIEdNVCBpbmZvPC9hPjogPGEgaHJlZj0iR01USU1FLmh0bWwjR01USU1FIj5HTVRJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMVElNRS5odG1sI2luZGV4LXRpbWVfMDAyYy1jb252ZXJzaW9uLXRvLWxvY2FsLXRpbWUtaW5mby04NDQiPnRpbWUsIGNvbnZlcnNpb24gdG8gbG9jYWwgdGltZSBpbmZvPC9hPjogPGEgaHJlZj0iTFRJTUUuaHRtbCNMVElNRSI+TFRJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDVElNRS5odG1sI2luZGV4LXRpbWVfMDAyYy1jb252ZXJzaW9uLXRvLXN0cmluZy01NjQiPnRpbWUsIGNvbnZlcnNpb24gdG8gc3RyaW5nPC9hPjogPGEgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+Q1RJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSU1FOC5odG1sI2luZGV4LXRpbWVfMDAyYy1jdXJyZW50LTExMDUiPnRpbWUsIGN1cnJlbnQ8L2E+OiA8YSBocmVmPSJUSU1FOC5odG1sI1RJTUU4Ij5USU1FODwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTUUuaHRtbCNpbmRleC10aW1lXzAwMmMtY3VycmVudC0xMTAyIj50aW1lLCBjdXJyZW50PC9hPjogPGEgaHJlZj0iVElNRS5odG1sI1RJTUUiPlRJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJVElNRS5odG1sI2luZGV4LXRpbWVfMDAyYy1jdXJyZW50LTc4MSI+dGltZSwgY3VycmVudDwvYT46IDxhIGhyZWY9IklUSU1FLmh0bWwjSVRJTUUiPklUSU1FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRkRBVEUuaHRtbCNpbmRleC10aW1lXzAwMmMtY3VycmVudC02MjkiPnRpbWUsIGN1cnJlbnQ8L2E+OiA8YSBocmVmPSJGREFURS5odG1sI0ZEQVRFIj5GREFURTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI2luZGV4LXRpbWVfMDAyYy1jdXJyZW50LTU2OSI+dGltZSwgY3VycmVudDwvYT46IDxhIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI0RBVEVfMDA1ZkFORF8wMDVmVElNRSI+REFURV9BTkRfVElNRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNFQ09ORC5odG1sI2luZGV4LXRpbWVfMDAyYy1lbGFwc2VkLTEwMDIiPnRpbWUsIGVsYXBzZWQ8L2E+OiA8YSBocmVmPSJTRUNPTkQuaHRtbCNTRUNPTkQiPlNFQ09ORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNFQ05EUy5odG1sI2luZGV4LXRpbWVfMDAyYy1lbGFwc2VkLTk5OSI+dGltZSwgZWxhcHNlZDwvYT46IDxhIGhyZWY9IlNFQ05EUy5odG1sI1NFQ05EUyI+U0VDTkRTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRVRJTUUuaHRtbCNpbmRleC10aW1lXzAwMmMtZWxhcHNlZC02MTAiPnRpbWUsIGVsYXBzZWQ8L2E+OiA8YSBocmVmPSJFVElNRS5odG1sI0VUSU1FIj5FVElNRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRUSU1FLmh0bWwjaW5kZXgtdGltZV8wMDJjLWVsYXBzZWQtNTk3Ij50aW1lLCBlbGFwc2VkPC9hPjogPGEgaHJlZj0iRFRJTUUuaHRtbCNEVElNRSI+RFRJTUU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDUFVfMDA1ZlRJTUUuaHRtbCNpbmRleC10aW1lXzAwMmMtZWxhcHNlZC01NTgiPnRpbWUsIGVsYXBzZWQ8L2E+OiA8YSBocmVmPSJDUFVfMDA1ZlRJTUUuaHRtbCNDUFVfMDA1ZlRJTUUiPkNQVV9USU1FPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVElNRTguaHRtbCNpbmRleC1USU1FOC0xMTA0Ij48Y29kZT5USU1FODwvY29kZT48L2E+OiA8YSBocmVmPSJUSU1FOC5odG1sI1RJTUU4Ij5USU1FODwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRJTlkuaHRtbCNpbmRleC1USU5ZLTExMDciPjxjb2RlPlRJTlk8L2NvZGU+PC9hPjogPGEgaHJlZj0iVElOWS5odG1sI1RJTlkiPlRJTlk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjaW5kZXgtVFItMTU1ODEtMzA3Ij5UUiAxNTU4MTwvYT46IDxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC10cmFjZS0yMDMiPnRyYWNlPC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJUUkFJTFouaHRtbCNpbmRleC1UUkFJTFotMTExMCI+PGNvZGU+VFJBSUxaPC9jb2RlPjwvYT46IDxhIGhyZWY9IlRSQUlMWi5odG1sI1RSQUlMWiI+VFJBSUxaPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVFJBTlNGRVIuaHRtbCNpbmRleC1UUkFOU0ZFUi0xMTEyIj48Y29kZT5UUkFOU0ZFUjwvY29kZT48L2E+OiA8YSBocmVmPSJUUkFOU0ZFUi5odG1sI1RSQU5TRkVSIj5UUkFOU0ZFUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC10cmFuc2Zvcm1pbmctc3ltYm9sLW5hbWVzLTI0NCI+dHJhbnNmb3JtaW5nIHN5bWJvbCBuYW1lczwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVFJBTlNQT1NFLmh0bWwjaW5kZXgtdHJhbnNwb3NlLTExMTgiPnRyYW5zcG9zZTwvYT46IDxhIGhyZWY9IlRSQU5TUE9TRS5odG1sI1RSQU5TUE9TRSI+VFJBTlNQT1NFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVFJBTlNQT1NFLmh0bWwjaW5kZXgtVFJBTlNQT1NFLTExMTUiPjxjb2RlPlRSQU5TUE9TRTwvY29kZT48L2E+OiA8YSBocmVmPSJUUkFOU1BPU0UuaHRtbCNUUkFOU1BPU0UiPlRSQU5TUE9TRTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPUy5odG1sI2luZGV4LXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25fMDAyYy1jb3NpbmUtNTQ2Ij50cmlnb25vbWV0cmljIGZ1bmN0aW9uLCBjb3NpbmU8L2E+OiA8YSBocmVmPSJDT1MuaHRtbCNDT1MiPkNPUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFDT1MuaHRtbCNpbmRleC10cmlnb25vbWV0cmljLWZ1bmN0aW9uXzAwMmMtY29zaW5lXzAwMmMtaW52ZXJzZS0zODgiPnRyaWdvbm9tZXRyaWMgZnVuY3Rpb24sIGNvc2luZSwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkFDT1MuaHRtbCNBQ09TIj5BQ09TPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU0lOLmh0bWwjaW5kZXgtdHJpZ29ub21ldHJpYy1mdW5jdGlvbl8wMDJjLXNpbmUtMTAzOSI+dHJpZ29ub21ldHJpYyBmdW5jdGlvbiwgc2luZTwvYT46IDxhIGhyZWY9IlNJTi5odG1sI1NJTiI+U0lOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVNJTi5odG1sI2luZGV4LXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25fMDAyYy1zaW5lXzAwMmMtaW52ZXJzZS00MzAiPnRyaWdvbm9tZXRyaWMgZnVuY3Rpb24sIHNpbmUsIGludmVyc2U8L2E+OiA8YSBocmVmPSJBU0lOLmh0bWwjQVNJTiI+QVNJTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRBTi5odG1sI2luZGV4LXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25fMDAyYy10YW5nZW50LTEwOTEiPnRyaWdvbm9tZXRyaWMgZnVuY3Rpb24sIHRhbmdlbnQ8L2E+OiA8YSBocmVmPSJUQU4uaHRtbCNUQU4iPlRBTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFUQU4yLmh0bWwjaW5kZXgtdHJpZ29ub21ldHJpYy1mdW5jdGlvbl8wMDJjLXRhbmdlbnRfMDAyYy1pbnZlcnNlLTQ0NyI+dHJpZ29ub21ldHJpYyBmdW5jdGlvbiwgdGFuZ2VudCwgaW52ZXJzZTwvYT46IDxhIGhyZWY9IkFUQU4yLmh0bWwjQVRBTjIiPkFUQU4yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVRBTi5odG1sI2luZGV4LXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25fMDAyYy10YW5nZW50XzAwMmMtaW52ZXJzZS00NDMiPnRyaWdvbm9tZXRyaWMgZnVuY3Rpb24sIHRhbmdlbnQsIGludmVyc2U8L2E+OiA8YSBocmVmPSJBVEFOLmh0bWwjQVRBTiI+QVRBTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlRSSU0uaHRtbCNpbmRleC1UUklNLTExMTkiPjxjb2RlPlRSSU08L2NvZGU+PC9hPjogPGEgaHJlZj0iVFJJTS5odG1sI1RSSU0iPlRSSU08L2E+PC9saT4KKzxsaT48YSBocmVmPSJUVFlOQU0uaHRtbCNpbmRleC1UVFlOQU0tMTEyMSI+PGNvZGU+VFRZTkFNPC9jb2RlPjwvYT46IDxhIGhyZWY9IlRUWU5BTS5odG1sI1RUWU5BTSI+VFRZTkFNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVFJBTlNGRVIuaHRtbCNpbmRleC10eXBlLWNhc3QtMTExNCI+dHlwZSBjYXN0PC9hPjogPGEgaHJlZj0iVFJBTlNGRVIuaHRtbCNUUkFOU0ZFUiI+VFJBTlNGRVI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJVQk9VTkQuaHRtbCNpbmRleC1VQk9VTkQtMTEyMyI+PGNvZGU+VUJPVU5EPC9jb2RlPjwvYT46IDxhIGhyZWY9IlVCT1VORC5odG1sI1VCT1VORCI+VUJPVU5EPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVUNPQk9VTkQuaHRtbCNpbmRleC1VQ09CT1VORC0xMTI1Ij48Y29kZT5VQ09CT1VORDwvY29kZT48L2E+OiA8YSBocmVmPSJVQ09CT1VORC5odG1sI1VDT0JPVU5EIj5VQ09CT1VORDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlVNQVNLLmh0bWwjaW5kZXgtVU1BU0stMTEyNyI+PGNvZGU+VU1BU0s8L2NvZGU+PC9hPjogPGEgaHJlZj0iVU1BU0suaHRtbCNVTUFTSyI+VU1BU0s8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtdW5kZXJmbG93LTE3MSI+dW5kZXJmbG93PC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtdW5kZXJzY29yZS0yNDIiPnVuZGVyc2NvcmU8L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlVOTElOSy5odG1sI2luZGV4LVVOTElOSy0xMTI5Ij48Y29kZT5VTkxJTks8L2NvZGU+PC9hPjogPGEgaHJlZj0iVU5MSU5LLmh0bWwjVU5MSU5LIj5VTkxJTks8L2E+PC9saT4KKzxsaT48YSBocmVmPSJVTlBBQ0suaHRtbCNpbmRleC1VTlBBQ0stMTEzMSI+PGNvZGU+VU5QQUNLPC9jb2RlPjwvYT46IDxhIGhyZWY9IlVOUEFDSy5odG1sI1VOUEFDSyI+VU5QQUNLPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXVudXNlZC1kdW1teS1hcmd1bWVudC0xNzciPnVudXNlZCBkdW1teSBhcmd1bWVudDwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXVudXNlZC1wYXJhbWV0ZXItMTgxIj51bnVzZWQgcGFyYW1ldGVyPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVU0VfMDAyYy1JTlRSSU5TSUNfMDA3ZC1zdGF0ZW1lbnQtMzIxIj48Y29kZT5VU0UsIElOVFJJTlNJQzwvY29kZT4gc3RhdGVtZW50PC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJHRVRVSUQuaHRtbCNpbmRleC11c2VyLWlkLTY5OSI+dXNlciBpZDwvYT46IDxhIGhyZWY9IkdFVFVJRC5odG1sI0dFVFVJRCI+R0VUVUlEPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiVkFMVUVfMDA3ZC1zdGF0ZW1lbnQtMzE1Ij48Y29kZT5WQUxVRTwvY29kZT4gc3RhdGVtZW50PC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWYXJ5aW5nLUxlbmd0aC1DaGFyYWN0ZXItU3RyaW5ncy5odG1sI2luZGV4LVZhcnlpbmctbGVuZ3RoLWNoYXJhY3Rlci1zdHJpbmdzLTEyIj5WYXJ5aW5nIGxlbmd0aCBjaGFyYWN0ZXIgc3RyaW5nczwvYT46IDxhIGhyZWY9IlZhcnlpbmctTGVuZ3RoLUNoYXJhY3Rlci1TdHJpbmdzLmh0bWwjVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MiPlZhcnlpbmcgTGVuZ3RoIENoYXJhY3RlciBTdHJpbmdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MuaHRtbCNpbmRleC1WYXJ5aW5nLWxlbmd0aC1zdHJpbmdzLTEzIj5WYXJ5aW5nIGxlbmd0aCBzdHJpbmdzPC9hPjogPGEgaHJlZj0iVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MuaHRtbCNWYXJ5aW5nLUxlbmd0aC1DaGFyYWN0ZXItU3RyaW5ncyI+VmFyeWluZyBMZW5ndGggQ2hhcmFjdGVyIFN0cmluZ3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJET1RfMDA1ZlBST0RVQ1QuaHRtbCNpbmRleC12ZWN0b3ItcHJvZHVjdC01ODQiPnZlY3RvciBwcm9kdWN0PC9hPjogPGEgaHJlZj0iRE9UXzAwNWZQUk9EVUNULmh0bWwjRE9UXzAwNWZQUk9EVUNUIj5ET1RfUFJPRFVDVDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZFUklGWS5odG1sI2luZGV4LVZFUklGWS0xMTM1Ij48Y29kZT5WRVJJRlk8L2NvZGU+PC9hPjogPGEgaHJlZj0iVkVSSUZZLmh0bWwjVkVSSUZZIj5WRVJJRlk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDT01QSUxFUl8wMDVmVkVSU0lPTi5odG1sI2luZGV4LXZlcnNpb24tb2YtdGhlLWNvbXBpbGVyLTUzNCI+dmVyc2lvbiBvZiB0aGUgY29tcGlsZXI8L2E+OiA8YSBocmVmPSJDT01QSUxFUl8wMDVmVkVSU0lPTi5odG1sI0NPTVBJTEVSXzAwNWZWRVJTSU9OIj5DT01QSUxFUl9WRVJTSU9OPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiVk9MQVRJTEVfMDA3ZC1zdGF0ZW1lbnQtMzE3Ij48Y29kZT5WT0xBVElMRTwvY29kZT4gc3RhdGVtZW50PC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ18wMDJjLUMtYmluZGluZy10eXBlLTE0MSI+d2FybmluZywgQyBiaW5kaW5nIHR5cGU8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLWFsaWFzaW5nLTEzNCI+d2FybmluZ3MsIGFsaWFzaW5nPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1hbGlnbm1lbnQtb2YtXzAwNDBjb2RlXzAwN2JDT01NT05fMDA3ZC1ibG9ja3MtMTgzIj53YXJuaW5ncywgYWxpZ25tZW50IG9mIDxjb2RlPkNPTU1PTjwvY29kZT4gYmxvY2tzPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1hbGwtMTMxIj53YXJuaW5ncywgYWxsPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1hbXBlcnNhbmQtMTM2Ij53YXJuaW5ncywgYW1wZXJzYW5kPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1hcnJheS10ZW1wb3Jhcmllcy0xMzkiPndhcm5pbmdzLCBhcnJheSB0ZW1wb3JhcmllczwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtY2hhcmFjdGVyLXRydW5jYXRpb24tMTQzIj53YXJuaW5ncywgY2hhcmFjdGVyIHRydW5jYXRpb248L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLWNvbnZlcnNpb24tMTQ3Ij53YXJuaW5ncywgY29udmVyc2lvbjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtZXh0cmEtMTU0Ij53YXJuaW5ncywgZXh0cmE8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLWZ1bmN0aW9uLWVsaW1pbmF0aW9uLTE4NyI+d2FybmluZ3MsIGZ1bmN0aW9uIGVsaW1pbmF0aW9uPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1pbXBsaWNpdC1pbnRlcmZhY2UtMTU2Ij53YXJuaW5ncywgaW1wbGljaXQgaW50ZXJmYWNlPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1pbXBsaWNpdC1wcm9jZWR1cmUtMTU4Ij53YXJuaW5ncywgaW1wbGljaXQgcHJvY2VkdXJlPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1pbnRyaW5zaWMtMTczIj53YXJuaW5ncywgaW50cmluc2ljPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1pbnRyaW5zaWNzLW9mLW90aGVyLXN0YW5kYXJkcy0xNjEiPndhcm5pbmdzLCBpbnRyaW5zaWNzIG9mIG90aGVyIHN0YW5kYXJkczwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtbGluZS10cnVuY2F0aW9uLTE0NSI+d2FybmluZ3MsIGxpbmUgdHJ1bmNhdGlvbjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtbm9uXzAwMmRzdGFuZGFyZC1pbnRyaW5zaWNzLTE2MCI+d2FybmluZ3MsIG5vbi1zdGFuZGFyZCBpbnRyaW5zaWNzPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1fMDA0MGNvZGVfMDA3YnFfMDA3ZC1leHBvbmVudF8wMDJkbGV0dGVyLTE2MyI+d2FybmluZ3MsIDxjb2RlPnE8L2NvZGU+IGV4cG9uZW50LWxldHRlcjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtc3VwcHJlc3NpbmctMTE5Ij53YXJuaW5ncywgc3VwcHJlc3Npbmc8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLXN1c3BpY2lvdXMtY29kZS0xNjUiPndhcm5pbmdzLCBzdXNwaWNpb3VzIGNvZGU8L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLXRhYnMtMTY3Ij53YXJuaW5ncywgdGFiczwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtdG8tZXJyb3JzLTE5NCI+d2FybmluZ3MsIHRvIGVycm9yczwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtdW5kZXJmbG93LTE3MCI+d2FybmluZ3MsIHVuZGVyZmxvdzwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtdW51c2VkLWR1bW15LWFyZ3VtZW50LTE3NiI+d2FybmluZ3MsIHVudXNlZCBkdW1teSBhcmd1bWVudDwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtdW51c2VkLXBhcmFtZXRlci0xODAiPndhcm5pbmdzLCB1bnVzZWQgcGFyYW1ldGVyPC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGUFVUQy5odG1sI2luZGV4LXdyaXRlLWNoYXJhY3Rlcl8wMDJjLXN0cmVhbS1tb2RlLTY1MyI+d3JpdGUgY2hhcmFjdGVyLCBzdHJlYW0gbW9kZTwvYT46IDxhIGhyZWY9IkZQVVRDLmh0bWwjRlBVVEMiPkZQVVRDPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRlBVVC5odG1sI2luZGV4LXdyaXRlLWNoYXJhY3Rlcl8wMDJjLXN0cmVhbS1tb2RlLTY0OSI+d3JpdGUgY2hhcmFjdGVyLCBzdHJlYW0gbW9kZTwvYT46IDxhIGhyZWY9IkZQVVQuaHRtbCNGUFVUIj5GUFVUPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iWE9SLmh0bWwjaW5kZXgtWE9SLTExMzciPjxjb2RlPlhPUjwvY29kZT48L2E+OiA8YSBocmVmPSJYT1IuaHRtbCNYT1IiPlhPUjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBBUklUWS5odG1sI2luZGV4LVhPUi1yZWR1Y3Rpb24tOTM5Ij5YT1IgcmVkdWN0aW9uPC9hPjogPGEgaHJlZj0iUEFSSVRZLmh0bWwjUEFSSVRZIj5QQVJJVFk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBQlMuaHRtbCNpbmRleC1aQUJTLTM3OCI+PGNvZGU+WkFCUzwvY29kZT48L2E+OiA8YSBocmVmPSJBQlMuaHRtbCNBQlMiPkFCUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNPUy5odG1sI2luZGV4LVpDT1MtNTQ0Ij48Y29kZT5aQ09TPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNPUy5odG1sI0NPUyI+Q09TPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVFJBSUxaLmh0bWwjaW5kZXgtemVyby1iaXRzLTExMTEiPnplcm8gYml0czwvYT46IDxhIGhyZWY9IlRSQUlMWi5odG1sI1RSQUlMWiI+VFJBSUxaPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTEVBRFouaHRtbCNpbmRleC16ZXJvLWJpdHMtNzkxIj56ZXJvIGJpdHM8L2E+OiA8YSBocmVmPSJMRUFEWi5odG1sI0xFQURaIj5MRUFEWjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVYUC5odG1sI2luZGV4LVpFWFAtNjIwIj48Y29kZT5aRVhQPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVYUC5odG1sI0VYUCI+RVhQPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTE9HLmh0bWwjaW5kZXgtWkxPRy04MTkiPjxjb2RlPlpMT0c8L2NvZGU+PC9hPjogPGEgaHJlZj0iTE9HLmh0bWwjTE9HIj5MT0c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTSU4uaHRtbCNpbmRleC1aU0lOLTEwMzciPjxjb2RlPlpTSU48L2NvZGU+PC9hPjogPGEgaHJlZj0iU0lOLmh0bWwjU0lOIj5TSU48L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUVJULmh0bWwjaW5kZXgtWlNRUlQtMTA2NSI+PGNvZGU+WlNRUlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1FSVC5odG1sI1NRUlQiPlNRUlQ8L2E+PC9saT4KKyAgIDwvdWw+PC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xCT1VORC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xCT1VORC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzQxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTEJPVU5ELmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TEJPVU5EIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IktJTkQuaHRtbCNLSU5EIiB0aXRsZT0iS0lORCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxDT0JPVU5ELmh0bWwjTENPQk9VTkQiIHRpdGxlPSJMQ09CT1VORCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMQk9VTkQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTENPQk9VTkQuaHRtbCNMQ09CT1VORCI+TENPQk9VTkQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJLSU5ELmh0bWwjS0lORCI+S0lORDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNDEgPGNvZGU+TEJPVU5EPC9jb2RlPiAmbWRhc2g7IExvd2VyIGRpbWVuc2lvbiBib3VuZHMgb2YgYW4gYXJyYXk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1MQk9VTkQtNzg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1sb3dlci1ib3VuZC03ODciPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZXR1cm5zIHRoZSBsb3dlciBib3VuZHMgb2YgYW4gYXJyYXksIG9yIGEgc2luZ2xlIGxvd2VyIGJvdW5kCithbG9uZyB0aGUgPHZhcj5ESU08L3Zhcj4gZGltZW5zaW9uLiAKKzxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyLCB3aXRoIDx2YXI+S0lORDwvdmFyPiBhcmd1bWVudCBGb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBMQk9VTkQoQVJSQVkgWywgRElNIFssIEtJTkRdXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXksIG9mIGFueSB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGEgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBBbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbml0aWFsaXphdGlvbgorZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBraW5kIHBhcmFtZXRlciBvZiB0aGUgcmVzdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2Yga2luZCA8dmFyPktJTkQ8L3Zhcj4uIElmCis8dmFyPktJTkQ8L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9mIGRlZmF1bHQgaW50ZWdlciBraW5kLiAKK0lmIDx2YXI+RElNPC92YXI+IGlzIGFic2VudCwgdGhlIHJlc3VsdCBpcyBhbiBhcnJheSBvZiB0aGUgbG93ZXIgYm91bmRzIG9mCis8dmFyPkFSUkFZPC92YXI+LiAgSWYgPHZhcj5ESU08L3Zhcj4gaXMgcHJlc2VudCwgdGhlIHJlc3VsdCBpcyBhIHNjYWxhcgorY29ycmVzcG9uZGluZyB0byB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIGFycmF5IGFsb25nIHRoYXQgZGltZW5zaW9uLiAgSWYKKzx2YXI+QVJSQVk8L3Zhcj4gaXMgYW4gZXhwcmVzc2lvbiByYXRoZXIgdGhhbiBhIHdob2xlIGFycmF5IG9yIGFycmF5CitzdHJ1Y3R1cmUgY29tcG9uZW50LCBvciBpZiBpdCBoYXMgYSB6ZXJvIGV4dGVudCBhbG9uZyB0aGUgcmVsZXZhbnQKK2RpbWVuc2lvbiwgdGhlIGxvd2VyIGJvdW5kIGlzIHRha2VuIHRvIGJlIDEuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iVUJPVU5ELmh0bWwjVUJPVU5EIj5VQk9VTkQ8L2E+LCA8YSBocmVmPSJMQ09CT1VORC5odG1sI0xDT0JPVU5EIj5MQ09CT1VORDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MQ09CT1VORC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xDT0JPVU5ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxYzMzNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MQ09CT1VORC5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxDT0JPVU5EIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxCT1VORC5odG1sI0xCT1VORCIgdGl0bGU9IkxCT1VORCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxFQURaLmh0bWwjTEVBRFoiIHRpdGxlPSJMRUFEWiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMQ09CT1VORCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMRUFEWi5odG1sI0xFQURaIj5MRUFEWjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxCT1VORC5odG1sI0xCT1VORCI+TEJPVU5EPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE0MiA8Y29kZT5MQ09CT1VORDwvY29kZT4gJm1kYXNoOyBMb3dlciBjb2RpbWVuc2lvbiBib3VuZHMgb2YgYW4gYXJyYXk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1MQ09CT1VORC03ODgiPjwvYT48YSBuYW1lPSJpbmRleC1jb2FycmF5XzAwMmMtbG93ZXItYm91bmQtNzg5Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgbG93ZXIgYm91bmRzIG9mIGEgY29hcnJheSwgb3IgYSBzaW5nbGUgbG93ZXIgY29ib3VuZAorYWxvbmcgdGhlIDx2YXI+RElNPC92YXI+IGNvZGltZW5zaW9uLiAKKzxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IExDT0JPVU5EKENPQVJSQVkgWywgRElNIFssIEtJTkRdXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gY29hcnJheSwgb2YgYW55IHR5cGUuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ESU08L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgYSBzY2FsYXIgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiBraW5kIDx2YXI+S0lORDwvdmFyPi4gSWYKKzx2YXI+S0lORDwvdmFyPiBpcyBhYnNlbnQsIHRoZSByZXR1cm4gdmFsdWUgaXMgb2YgZGVmYXVsdCBpbnRlZ2VyIGtpbmQuIAorSWYgPHZhcj5ESU08L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IG9mIHRoZSBsb3dlciBjb2JvdW5kcyBvZgorPHZhcj5DT0FSUkFZPC92YXI+LiAgSWYgPHZhcj5ESU08L3Zhcj4gaXMgcHJlc2VudCwgdGhlIHJlc3VsdCBpcyBhIHNjYWxhcgorY29ycmVzcG9uZGluZyB0byB0aGUgbG93ZXIgY29ib3VuZCBvZiB0aGUgYXJyYXkgYWxvbmcgdGhhdCBjb2RpbWVuc2lvbi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJVQ09CT1VORC5odG1sI1VDT0JPVU5EIj5VQ09CT1VORDwvYT4sIDxhIGhyZWY9IkxCT1VORC5odG1sI0xCT1VORCI+TEJPVU5EPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xFQURaLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTEVBRFouaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWI1OWMzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xFQURaLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TEVBRFogLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTENPQk9VTkQuaHRtbCNMQ09CT1VORCIgdGl0bGU9IkxDT0JPVU5EIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTEVOLmh0bWwjTEVOIiB0aXRsZT0iTEVOIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxFQURaIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxFTi5odG1sI0xFTiI+TEVOPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTENPQk9VTkQuaHRtbCNMQ09CT1VORCI+TENPQk9VTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTQzIDxjb2RlPkxFQURaPC9jb2RlPiAmbWRhc2g7IE51bWJlciBvZiBsZWFkaW5nIHplcm8gYml0cyBvZiBhbiBpbnRlZ2VyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTEVBRFotNzkwIj48L2E+PGEgbmFtZT0iaW5kZXgtemVyby1iaXRzLTc5MSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPkxFQURaPC9jb2RlPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvIGJpdHMgb2YgYW4gaW50ZWdlci4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IExFQURaKEkpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBkZWZhdWx0IDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKK0lmIGFsbCB0aGUgYml0cyBvZiA8Y29kZT5JPC9jb2RlPiBhcmUgemVybywgdGhlIHJlc3VsdCB2YWx1ZSBpcyA8Y29kZT5CSVRfU0laRShJKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X2xlYWR6CisgICAgICAgICAgICBXUklURSAoKiwqKSBCSVRfU0laRSgxKSAgISBwcmludHMgMzIKKyAgICAgICAgICAgIFdSSVRFICgqLCopIExFQURaKDEpICAgICAhIHByaW50cyAzMQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQklUXzAwNWZTSVpFLmh0bWwjQklUXzAwNWZTSVpFIj5CSVRfU0laRTwvYT4sIDxhIGhyZWY9IlRSQUlMWi5odG1sI1RSQUlMWiI+VFJBSUxaPC9hPiwgPGEgaHJlZj0iUE9QQ05ULmh0bWwjUE9QQ05UIj5QT1BDTlQ8L2E+LCA8YSBocmVmPSJQT1BQQVIuaHRtbCNQT1BQQVIiPlBPUFBBUjwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MRU4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MRU4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTA3NDZkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xFTi5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxFTiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMRUFEWi5odG1sI0xFQURaIiB0aXRsZT0iTEVBRFoiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMRU5fMDA1ZlRSSU0uaHRtbCNMRU5fMDA1ZlRSSU0iIHRpdGxlPSJMRU5fVFJJTSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMRU4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTEVOXzAwNWZUUklNLmh0bWwjTEVOXzAwNWZUUklNIj5MRU5fVFJJTTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxFQURaLmh0bWwjTEVBRFoiPkxFQURaPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE0NCA8Y29kZT5MRU48L2NvZGU+ICZtZGFzaDsgTGVuZ3RoIG9mIGEgY2hhcmFjdGVyIGVudGl0eTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxFTi03OTIiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmdfMDAyYy1sZW5ndGgtNzkzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgY2hhcmFjdGVyIHN0cmluZy4gIElmIDx2YXI+U1RSSU5HPC92YXI+IGlzIGFuIGFycmF5LAordGhlIGxlbmd0aCBvZiBhbiBlbGVtZW50IG9mIDx2YXI+U1RSSU5HPC92YXI+IGlzIHJldHVybmVkLiAgTm90ZSB0aGF0Cis8dmFyPlNUUklORzwvdmFyPiBuZWVkIG5vdCBiZSBkZWZpbmVkIHdoZW4gdGhpcyBpbnRyaW5zaWMgaXMgaW52b2tlZCwgc2luY2UKK29ubHkgdGhlIGxlbmd0aCwgbm90IHRoZSBjb250ZW50LCBvZiA8dmFyPlNUUklORzwvdmFyPiBpcyBuZWVkZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIsIHdpdGggPHZhcj5LSU5EPC92YXI+IGFyZ3VtZW50IEZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPkwgPSBMRU4oU1RSSU5HIFssIEtJTkRdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUUklORzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb3IgYXJyYXkgb2YgdHlwZQorPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiwgd2l0aCA8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiBraW5kIDx2YXI+S0lORDwvdmFyPi4gSWYKKzx2YXI+S0lORDwvdmFyPiBpcyBhYnNlbnQsIHRoZSByZXR1cm4gdmFsdWUgaXMgb2YgZGVmYXVsdCBpbnRlZ2VyIGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkxFTihTVFJJTkcpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVEVHRVI8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iTEVOXzAwNWZUUklNLmh0bWwjTEVOXzAwNWZUUklNIj5MRU5fVFJJTTwvYT4sIDxhIGhyZWY9IkFESlVTVEwuaHRtbCNBREpVU1RMIj5BREpVU1RMPC9hPiwgPGEgaHJlZj0iQURKVVNUUi5odG1sI0FESlVTVFIiPkFESlVTVFI8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTEVOXzAwNWZUUklNLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTEVOXzAwNWZUUklNLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmYzZjZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MRU5fMDA1ZlRSSU0uaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MRU5fVFJJTSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMRU4uaHRtbCNMRU4iIHRpdGxlPSJMRU4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMR0UuaHRtbCNMR0UiIHRpdGxlPSJMR0UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTEVOX1RSSU0iPjwvYT4KKzxhIG5hbWU9IkxFTl8wMDVmVFJJTSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMR0UuaHRtbCNMR0UiPkxHRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxFTi5odG1sI0xFTiI+TEVOPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE0NSA8Y29kZT5MRU5fVFJJTTwvY29kZT4gJm1kYXNoOyBMZW5ndGggb2YgYSBjaGFyYWN0ZXIgZW50aXR5IHdpdGhvdXQgdHJhaWxpbmcgYmxhbmsgY2hhcmFjdGVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxFTl8wMDVmVFJJTS03OTQiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmdfMDAyYy1sZW5ndGhfMDAyYy13aXRob3V0LXRyYWlsaW5nLXdoaXRlc3BhY2UtNzk1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgY2hhcmFjdGVyIHN0cmluZywgaWdub3JpbmcgYW55IHRyYWlsaW5nIGJsYW5rcy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlciwgd2l0aCA8dmFyPktJTkQ8L3Zhcj4gYXJndW1lbnQgRm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBMRU5fVFJJTShTVFJJTkcgWywgS0lORF0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RSSU5HPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4sCit3aXRoIDxjb2RlPklOVEVOVChJTik8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPktJTkQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgQW4gPGNvZGU+SU5URUdFUjwvY29kZT4gaW5pdGlhbGl6YXRpb24KK2V4cHJlc3Npb24gaW5kaWNhdGluZyB0aGUga2luZCBwYXJhbWV0ZXIgb2YgdGhlIHJlc3VsdC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG9mIGtpbmQgPHZhcj5LSU5EPC92YXI+LiBJZgorPHZhcj5LSU5EPC92YXI+IGlzIGFic2VudCwgdGhlIHJldHVybiB2YWx1ZSBpcyBvZiBkZWZhdWx0IGludGVnZXIga2luZC4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJMRU4uaHRtbCNMRU4iPkxFTjwvYT4sIDxhIGhyZWY9IkFESlVTVEwuaHRtbCNBREpVU1RMIj5BREpVU1RMPC9hPiwgPGEgaHJlZj0iQURKVVNUUi5odG1sI0FESlVTVFIiPkFESlVTVFI8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTEdFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTEdFLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3ZmEyZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MR0UuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MR0UgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTEVOXzAwNWZUUklNLmh0bWwjTEVOXzAwNWZUUklNIiB0aXRsZT0iTEVOX1RSSU0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMR1QuaHRtbCNMR1QiIHRpdGxlPSJMR1QiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTEdFIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxHVC5odG1sI0xHVCI+TEdUPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTEVOXzAwNWZUUklNLmh0bWwjTEVOXzAwNWZUUklNIj5MRU5fVFJJTTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNDYgPGNvZGU+TEdFPC9jb2RlPiAmbWRhc2g7IExleGljYWwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTEdFLTc5NiI+PC9hPjxhIG5hbWU9ImluZGV4LWxleGljYWwtY29tcGFyaXNvbi1vZi1zdHJpbmdzLTc5NyI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmluZ18wMDJjLWNvbXBhcmlzb24tNzk4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIG9uZSBzdHJpbmcgaXMgbGV4aWNhbGx5IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bworYW5vdGhlciBzdHJpbmcsIHdoZXJlIHRoZSB0d28gc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGFpbmluZworQVNDSUkgY2hhcmFjdGVyIGNvZGVzLiAgSWYgdGhlIFN0cmluZyBBIGFuZCBTdHJpbmcgQiBhcmUgbm90IHRoZSBzYW1lCitsZW5ndGgsIHRoZSBzaG9ydGVyIGlzIGNvbXBhcmVkIGFzIGlmIHNwYWNlcyB3ZXJlIGFwcGVuZGVkIHRvIGl0IHRvIGZvcm0KK2EgdmFsdWUgdGhhdCBoYXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBsb25nZXIuCisKKyAgICAgPHA+SW4gZ2VuZXJhbCwgdGhlIGxleGljYWwgY29tcGFyaXNvbiBpbnRyaW5zaWNzIDxjb2RlPkxHRTwvY29kZT4sIDxjb2RlPkxHVDwvY29kZT4sCis8Y29kZT5MTEU8L2NvZGU+LCBhbmQgPGNvZGU+TExUPC9jb2RlPiBkaWZmZXIgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnRyaW5zaWMKK29wZXJhdG9ycyA8Y29kZT4uR0UuPC9jb2RlPiwgPGNvZGU+LkdULjwvY29kZT4sIDxjb2RlPi5MRS48L2NvZGU+LCBhbmQgPGNvZGU+LkxULjwvY29kZT4sIGluCit0aGF0IHRoZSBsYXR0ZXIgdXNlIHRoZSBwcm9jZXNzb3IncyBjaGFyYWN0ZXIgb3JkZXJpbmcgKHdoaWNoIGlzIG5vdAorQVNDSUkgb24gc29tZSB0YXJnZXRzKSwgd2hlcmVhcyB0aGUgZm9ybWVyIGFsd2F5cyB1c2UgdGhlIEFTQ0lJCitvcmRlcmluZy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBMR0UoU1RSSU5HX0EsIFNUUklOR19CKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUUklOR19BPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUUklOR19CPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdHlwZS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5SZXR1cm5zIDxjb2RlPi5UUlVFLjwvY29kZT4gaWYgPGNvZGU+U1RSSU5HX0EgJmd0Oz0gU1RSSU5HX0I8L2NvZGU+LCBhbmQgPGNvZGU+LkZBTFNFLjwvY29kZT4KK290aGVyd2lzZSwgYmFzZWQgb24gdGhlIEFTQ0lJIG9yZGVyaW5nLgorCisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5MR0UoU1RSSU5HX0EsIFNUUklOR19CKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5MT0dJQ0FMPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkxHVC5odG1sI0xHVCI+TEdUPC9hPiwgPGEgaHJlZj0iTExFLmh0bWwjTExFIj5MTEU8L2E+LCA8YSBocmVmPSJMTFQuaHRtbCNMTFQiPkxMVDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MR1QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MR1QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGFmZjgxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xHVC5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxHVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMR0UuaHRtbCNMR0UiIHRpdGxlPSJMR0UiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMSU5LLmh0bWwjTElOSyIgdGl0bGU9IkxJTksiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTEdUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxJTksuaHRtbCNMSU5LIj5MSU5LPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTEdFLmh0bWwjTEdFIj5MR0U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTQ3IDxjb2RlPkxHVDwvY29kZT4gJm1kYXNoOyBMZXhpY2FsIGdyZWF0ZXIgdGhhbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxHVC03OTkiPjwvYT48YSBuYW1lPSJpbmRleC1sZXhpY2FsLWNvbXBhcmlzb24tb2Ytc3RyaW5ncy04MDAiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmdfMDAyYy1jb21wYXJpc29uLTgwMSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkRldGVybWluZXMgd2hldGhlciBvbmUgc3RyaW5nIGlzIGxleGljYWxseSBncmVhdGVyIHRoYW4gYW5vdGhlciBzdHJpbmcsCit3aGVyZSB0aGUgdHdvIHN0cmluZ3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRhaW5pbmcgQVNDSUkgY2hhcmFjdGVyCitjb2Rlcy4gIElmIHRoZSBTdHJpbmcgQSBhbmQgU3RyaW5nIEIgYXJlIG5vdCB0aGUgc2FtZSBsZW5ndGgsIHRoZQorc2hvcnRlciBpcyBjb21wYXJlZCBhcyBpZiBzcGFjZXMgd2VyZSBhcHBlbmRlZCB0byBpdCB0byBmb3JtIGEgdmFsdWUKK3RoYXQgaGFzIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgbG9uZ2VyLgorCisgICAgIDxwPkluIGdlbmVyYWwsIHRoZSBsZXhpY2FsIGNvbXBhcmlzb24gaW50cmluc2ljcyA8Y29kZT5MR0U8L2NvZGU+LCA8Y29kZT5MR1Q8L2NvZGU+LAorPGNvZGU+TExFPC9jb2RlPiwgYW5kIDxjb2RlPkxMVDwvY29kZT4gZGlmZmVyIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgaW50cmluc2ljCitvcGVyYXRvcnMgPGNvZGU+LkdFLjwvY29kZT4sIDxjb2RlPi5HVC48L2NvZGU+LCA8Y29kZT4uTEUuPC9jb2RlPiwgYW5kIDxjb2RlPi5MVC48L2NvZGU+LCBpbgordGhhdCB0aGUgbGF0dGVyIHVzZSB0aGUgcHJvY2Vzc29yJ3MgY2hhcmFjdGVyIG9yZGVyaW5nICh3aGljaCBpcyBub3QKK0FTQ0lJIG9uIHNvbWUgdGFyZ2V0cyksIHdoZXJlYXMgdGhlIGZvcm1lciBhbHdheXMgdXNlIHRoZSBBU0NJSQorb3JkZXJpbmcuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTEdUKFNUUklOR19BLCBTVFJJTkdfQik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVFJJTkdfQTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgZGVmYXVsdCA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IHR5cGUuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVFJJTkdfQjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgZGVmYXVsdCA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IHR5cGUuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+UmV0dXJucyA8Y29kZT4uVFJVRS48L2NvZGU+IGlmIDxjb2RlPlNUUklOR19BICZndDsgU1RSSU5HX0I8L2NvZGU+LCBhbmQgPGNvZGU+LkZBTFNFLjwvY29kZT4KK290aGVyd2lzZSwgYmFzZWQgb24gdGhlIEFTQ0lJIG9yZGVyaW5nLgorCisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5MR1QoU1RSSU5HX0EsIFNUUklOR19CKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5MT0dJQ0FMPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkxHRS5odG1sI0xHRSI+TEdFPC9hPiwgPGEgaHJlZj0iTExFLmh0bWwjTExFIj5MTEU8L2E+LCA8YSBocmVmPSJMTFQuaHRtbCNMTFQiPkxMVDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MSU5LLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTElOSy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTVhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTElOSy5odG1sCkBAIC0wLDAgKzEsODggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxJTksgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTEdULmh0bWwjTEdUIiB0aXRsZT0iTEdUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTExFLmh0bWwjTExFIiB0aXRsZT0iTExFIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxJTksiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTExFLmh0bWwjTExFIj5MTEU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMR1QuaHRtbCNMR1QiPkxHVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNDggPGNvZGU+TElOSzwvY29kZT4gJm1kYXNoOyBDcmVhdGUgYSBoYXJkIGxpbms8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1MSU5LLTgwMiI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtc3lzdGVtXzAwMmMtY3JlYXRlLWxpbmstODAzIj48L2E+PGEgbmFtZT0iaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1oYXJkLWxpbmstODA0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+TWFrZXMgYSAoaGFyZCkgbGluayBmcm9tIGZpbGUgPHZhcj5QQVRIMTwvdmFyPiB0byA8dmFyPlBBVEgyPC92YXI+LiBBIG51bGwKK2NoYXJhY3RlciAoPGNvZGU+Q0hBUigwKTwvY29kZT4pIGNhbiBiZSB1c2VkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgbmFtZXMgaW4KKzx2YXI+UEFUSDE8L3Zhcj4gYW5kIDx2YXI+UEFUSDI8L3Zhcj47IG90aGVyd2lzZSwgdHJhaWxpbmcgYmxhbmtzIGluIHRoZSBmaWxlCituYW1lcyBhcmUgaWdub3JlZC4gIElmIHRoZSA8dmFyPlNUQVRVUzwvdmFyPiBhcmd1bWVudCBpcyBzdXBwbGllZCwgaXQKK2NvbnRhaW5zIDAgb24gc3VjY2VzcyBvciBhIG5vbnplcm8gZXJyb3IgY29kZSB1cG9uIHJldHVybjsgc2VlCis8Y29kZT5saW5rKDIpPC9jb2RlPi4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOworaG93ZXZlciwgb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgTElOSyhQQVRIMSwgUEFUSDIgWywgU1RBVFVTXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5TVEFUVVMgPSBMSU5LKFBBVEgxLCBQQVRIMik8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlBBVEgxPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlBBVEgyPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBTaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPklOVEVHRVI8L2NvZGU+IHR5cGUuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJTWU1MTksuaHRtbCNTWU1MTksiPlNZTUxOSzwvYT4sIDxhIGhyZWY9IlVOTElOSy5odG1sI1VOTElOSyI+VU5MSU5LPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xMRS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xMRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNTg0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTExFLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TExFIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxJTksuaHRtbCNMSU5LIiB0aXRsZT0iTElOSyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxMVC5odG1sI0xMVCIgdGl0bGU9IkxMVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMTEUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTExULmh0bWwjTExUIj5MTFQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMSU5LLmh0bWwjTElOSyI+TElOSzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNDkgPGNvZGU+TExFPC9jb2RlPiAmbWRhc2g7IExleGljYWwgbGVzcyB0aGFuIG9yIGVxdWFsPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTExFLTgwNSI+PC9hPjxhIG5hbWU9ImluZGV4LWxleGljYWwtY29tcGFyaXNvbi1vZi1zdHJpbmdzLTgwNiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmluZ18wMDJjLWNvbXBhcmlzb24tODA3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIG9uZSBzdHJpbmcgaXMgbGV4aWNhbGx5IGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbm90aGVyCitzdHJpbmcsIHdoZXJlIHRoZSB0d28gc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGFpbmluZyBBU0NJSQorY2hhcmFjdGVyIGNvZGVzLiAgSWYgdGhlIFN0cmluZyBBIGFuZCBTdHJpbmcgQiBhcmUgbm90IHRoZSBzYW1lIGxlbmd0aCwKK3RoZSBzaG9ydGVyIGlzIGNvbXBhcmVkIGFzIGlmIHNwYWNlcyB3ZXJlIGFwcGVuZGVkIHRvIGl0IHRvIGZvcm0gYSB2YWx1ZQordGhhdCBoYXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBsb25nZXIuCisKKyAgICAgPHA+SW4gZ2VuZXJhbCwgdGhlIGxleGljYWwgY29tcGFyaXNvbiBpbnRyaW5zaWNzIDxjb2RlPkxHRTwvY29kZT4sIDxjb2RlPkxHVDwvY29kZT4sCis8Y29kZT5MTEU8L2NvZGU+LCBhbmQgPGNvZGU+TExUPC9jb2RlPiBkaWZmZXIgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnRyaW5zaWMKK29wZXJhdG9ycyA8Y29kZT4uR0UuPC9jb2RlPiwgPGNvZGU+LkdULjwvY29kZT4sIDxjb2RlPi5MRS48L2NvZGU+LCBhbmQgPGNvZGU+LkxULjwvY29kZT4sIGluCit0aGF0IHRoZSBsYXR0ZXIgdXNlIHRoZSBwcm9jZXNzb3IncyBjaGFyYWN0ZXIgb3JkZXJpbmcgKHdoaWNoIGlzIG5vdAorQVNDSUkgb24gc29tZSB0YXJnZXRzKSwgd2hlcmVhcyB0aGUgZm9ybWVyIGFsd2F5cyB1c2UgdGhlIEFTQ0lJCitvcmRlcmluZy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBMTEUoU1RSSU5HX0EsIFNUUklOR19CKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUUklOR19BPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUUklOR19CPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdHlwZS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5SZXR1cm5zIDxjb2RlPi5UUlVFLjwvY29kZT4gaWYgPGNvZGU+U1RSSU5HX0EgJmx0Oz0gU1RSSU5HX0I8L2NvZGU+LCBhbmQgPGNvZGU+LkZBTFNFLjwvY29kZT4KK290aGVyd2lzZSwgYmFzZWQgb24gdGhlIEFTQ0lJIG9yZGVyaW5nLgorCisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5MTEUoU1RSSU5HX0EsIFNUUklOR19CKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5MT0dJQ0FMPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkxHRS5odG1sI0xHRSI+TEdFPC9hPiwgPGEgaHJlZj0iTEdULmh0bWwjTEdUIj5MR1Q8L2E+LCA8YSBocmVmPSJMTFQuaHRtbCNMTFQiPkxMVDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MTFQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MTFQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODgxNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xMVC5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxMVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMTEUuaHRtbCNMTEUiIHRpdGxlPSJMTEUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMTkJMTksuaHRtbCNMTkJMTksiIHRpdGxlPSJMTkJMTksiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTExUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxOQkxOSy5odG1sI0xOQkxOSyI+TE5CTE5LPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTExFLmh0bWwjTExFIj5MTEU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTUwIDxjb2RlPkxMVDwvY29kZT4gJm1kYXNoOyBMZXhpY2FsIGxlc3MgdGhhbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxMVC04MDgiPjwvYT48YSBuYW1lPSJpbmRleC1sZXhpY2FsLWNvbXBhcmlzb24tb2Ytc3RyaW5ncy04MDkiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmdfMDAyYy1jb21wYXJpc29uLTgxMCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkRldGVybWluZXMgd2hldGhlciBvbmUgc3RyaW5nIGlzIGxleGljYWxseSBsZXNzIHRoYW4gYW5vdGhlciBzdHJpbmcsCit3aGVyZSB0aGUgdHdvIHN0cmluZ3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRhaW5pbmcgQVNDSUkgY2hhcmFjdGVyCitjb2Rlcy4gIElmIHRoZSBTdHJpbmcgQSBhbmQgU3RyaW5nIEIgYXJlIG5vdCB0aGUgc2FtZSBsZW5ndGgsIHRoZQorc2hvcnRlciBpcyBjb21wYXJlZCBhcyBpZiBzcGFjZXMgd2VyZSBhcHBlbmRlZCB0byBpdCB0byBmb3JtIGEgdmFsdWUKK3RoYXQgaGFzIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgbG9uZ2VyLgorCisgICAgIDxwPkluIGdlbmVyYWwsIHRoZSBsZXhpY2FsIGNvbXBhcmlzb24gaW50cmluc2ljcyA8Y29kZT5MR0U8L2NvZGU+LCA8Y29kZT5MR1Q8L2NvZGU+LAorPGNvZGU+TExFPC9jb2RlPiwgYW5kIDxjb2RlPkxMVDwvY29kZT4gZGlmZmVyIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgaW50cmluc2ljCitvcGVyYXRvcnMgPGNvZGU+LkdFLjwvY29kZT4sIDxjb2RlPi5HVC48L2NvZGU+LCA8Y29kZT4uTEUuPC9jb2RlPiwgYW5kIDxjb2RlPi5MVC48L2NvZGU+LCBpbgordGhhdCB0aGUgbGF0dGVyIHVzZSB0aGUgcHJvY2Vzc29yJ3MgY2hhcmFjdGVyIG9yZGVyaW5nICh3aGljaCBpcyBub3QKK0FTQ0lJIG9uIHNvbWUgdGFyZ2V0cyksIHdoZXJlYXMgdGhlIGZvcm1lciBhbHdheXMgdXNlIHRoZSBBU0NJSQorb3JkZXJpbmcuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTExUKFNUUklOR19BLCBTVFJJTkdfQik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVFJJTkdfQTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgZGVmYXVsdCA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IHR5cGUuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVFJJTkdfQjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgZGVmYXVsdCA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IHR5cGUuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+UmV0dXJucyA8Y29kZT4uVFJVRS48L2NvZGU+IGlmIDxjb2RlPlNUUklOR19BICZsdDsgU1RSSU5HX0I8L2NvZGU+LCBhbmQgPGNvZGU+LkZBTFNFLjwvY29kZT4KK290aGVyd2lzZSwgYmFzZWQgb24gdGhlIEFTQ0lJIG9yZGVyaW5nLgorCisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5MTFQoU1RSSU5HX0EsIFNUUklOR19CKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5MT0dJQ0FMPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkxHRS5odG1sI0xHRSI+TEdFPC9hPiwgPGEgaHJlZj0iTEdULmh0bWwjTEdUIj5MR1Q8L2E+LCA8YSBocmVmPSJMTEUuaHRtbCNMTEUiPkxMRTwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MTkJMTksuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MTkJMTksuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg5ODkyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xOQkxOSy5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxOQkxOSyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMTFQuaHRtbCNMTFQiIHRpdGxlPSJMTFQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMT0MuaHRtbCNMT0MiIHRpdGxlPSJMT0MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTE5CTE5LIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxPQy5odG1sI0xPQyI+TE9DPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTExULmh0bWwjTExUIj5MTFQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTUxIDxjb2RlPkxOQkxOSzwvY29kZT4gJm1kYXNoOyBJbmRleCBvZiB0aGUgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIGluIGEgc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTE5CTE5LLTgxMSI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmluZ18wMDJjLWZpbmQtbm9uXzAwMmRibGFuay1jaGFyYWN0ZXItODEyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgY2hhcmFjdGVyIHN0cmluZywgaWdub3JpbmcgYW55IHRyYWlsaW5nIGJsYW5rcy4gCitUaGlzIGlzIGlkZW50aWNhbCB0byB0aGUgc3RhbmRhcmQgPGNvZGU+TEVOX1RSSU08L2NvZGU+IGludHJpbnNpYywgYW5kIGlzIG9ubHkKK2luY2x1ZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IExOQkxOSyhTVFJJTkcpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RSSU5HPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4sCit3aXRoIDxjb2RlPklOVEVOVChJTik8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiA8Y29kZT5JTlRFR0VSKGtpbmQ9NCk8L2NvZGU+IHR5cGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSU5ERVgtaW50cmluc2ljLmh0bWwjSU5ERVgtaW50cmluc2ljIj5JTkRFWCBpbnRyaW5zaWM8L2E+LCA8YSBocmVmPSJMRU5fMDA1ZlRSSU0uaHRtbCNMRU5fMDA1ZlRSSU0iPkxFTl9UUklNPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xPQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xPQy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDc2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTE9DLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TE9DIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxOQkxOSy5odG1sI0xOQkxOSyIgdGl0bGU9IkxOQkxOSyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxPRy5odG1sI0xPRyIgdGl0bGU9IkxPRyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMT0MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTE9HLmh0bWwjTE9HIj5MT0c8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMTkJMTksuaHRtbCNMTkJMTksiPkxOQkxOSzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNTIgPGNvZGU+TE9DPC9jb2RlPiAmbWRhc2g7IFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgYSB2YXJpYWJsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxPQy04MTMiPjwvYT48YSBuYW1lPSJpbmRleC1sb2NhdGlvbi1vZi1hLXZhcmlhYmxlLWluLW1lbW9yeS04MTQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5MT0MoWCk8L2NvZGU+IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgPHZhcj5YPC92YXI+IGFzIGFuIGludGVnZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTE9DKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VmFyaWFibGUgb2YgYW55IHR5cGUuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LCB3aXRoIGEgPGNvZGU+S0lORDwvY29kZT4KK2NvcnJlc3BvbmRpbmcgdG8gdGhlIHNpemUgKGluIGJ5dGVzKSBvZiBhIG1lbW9yeSBhZGRyZXNzIG9uIHRoZSB0YXJnZXQKK21hY2hpbmUuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2xvYworICAgICAgICAgICAgaW50ZWdlciA6OiBpCisgICAgICAgICAgICByZWFsIDo6IHIKKyAgICAgICAgICAgIGkgPSBsb2MocikKKyAgICAgICAgICAgIHByaW50ICosIGkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2xvYworPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MT0cuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MT0cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGI5ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xPRy5odG1sCkBAIC0wLDAgKzEsOTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxPRyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMT0MuaHRtbCNMT0MiIHRpdGxlPSJMT0MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMT0cxMC5odG1sI0xPRzEwIiB0aXRsZT0iTE9HMTAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTE9HIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxPRzEwLmh0bWwjTE9HMTAiPkxPRzEwPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTE9DLmh0bWwjTE9DIj5MT0M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTUzIDxjb2RlPkxPRzwvY29kZT4gJm1kYXNoOyBOYXR1cmFsIGxvZ2FyaXRobSBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxPRy04MTUiPjwvYT48YSBuYW1lPSJpbmRleC1BTE9HLTgxNiI+PC9hPjxhIG5hbWU9ImluZGV4LURMT0ctODE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ0xPRy04MTgiPjwvYT48YSBuYW1lPSJpbmRleC1aTE9HLTgxOSI+PC9hPjxhIG5hbWU9ImluZGV4LUNETE9HLTgyMCI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cG9uZW50aWFsLWZ1bmN0aW9uXzAwMmMtaW52ZXJzZS04MjEiPjwvYT48YSBuYW1lPSJpbmRleC1sb2dhcml0aG0tZnVuY3Rpb24tODIyIj48L2E+PGEgbmFtZT0iaW5kZXgtbmF0dXJhbC1sb2dhcml0aG0tZnVuY3Rpb24tODIzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+TE9HKFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgPHZhcj5YPC92YXI+LCBpLmUuIHRoZQorbG9nYXJpdGhtIHRvIHRoZSBiYXNlIGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTE9HKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+UkVBTDwvY29kZT4gb3IKKzxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBvciA8Y29kZT5DT01QTEVYPC9jb2RlPi4gCitUaGUga2luZCB0eXBlIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBhcyA8dmFyPlg8L3Zhcj4uIAorSWYgPHZhcj5YPC92YXI+IGlzIDxjb2RlPkNPTVBMRVg8L2NvZGU+LCB0aGUgaW1hZ2luYXJ5IHBhcnQgXG9tZWdhIGlzIGluIHRoZSByYW5nZQorLVxwaSBcbGVxIFxvbWVnYSBcbGVxIFxwaS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfbG9nCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAyLjcxODI4MTgyODQ1OTA0NTFfOAorICAgICAgICAgICAgY29tcGxleCA6OiB6ID0gKDEuMCwgMi4wKQorICAgICAgICAgICAgeCA9IGxvZyh4KSAgICAhIHdpbGwgeWllbGQgKGFwcHJveGltYXRlbHkpIDEKKyAgICAgICAgICAgIHogPSBsb2coeikKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X2xvZworPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5BTE9HKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Zjk1LCBnbnUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRMT0coWCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5mOTUsIGdudQorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q0xPRyhYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDQpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg0KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPmY5NSwgZ251Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5aTE9HKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Zjk1LCBnbnUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNETE9HKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5mOTUsIGdudQorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTE9HMTAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MT0cxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZGIyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTE9HMTAuaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MT0cxMCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMT0cuaHRtbCNMT0ciIHRpdGxlPSJMT0ciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMT0dfMDA1ZkdBTU1BLmh0bWwjTE9HXzAwNWZHQU1NQSIgdGl0bGU9IkxPR19HQU1NQSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMT0cxMCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMT0dfMDA1ZkdBTU1BLmh0bWwjTE9HXzAwNWZHQU1NQSI+TE9HX0dBTU1BPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTE9HLmh0bWwjTE9HIj5MT0c8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTU0IDxjb2RlPkxPRzEwPC9jb2RlPiAmbWRhc2g7IEJhc2UgMTAgbG9nYXJpdGhtIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTE9HMTAtODI0Ij48L2E+PGEgbmFtZT0iaW5kZXgtQUxPRzEwLTgyNSI+PC9hPjxhIG5hbWU9ImluZGV4LURMT0cxMC04MjYiPjwvYT48YSBuYW1lPSJpbmRleC1leHBvbmVudGlhbC1mdW5jdGlvbl8wMDJjLWludmVyc2UtODI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9nYXJpdGhtLWZ1bmN0aW9uLXdpdGgtYmFzZS0xMC04MjgiPjwvYT48YSBuYW1lPSJpbmRleC1iYXNlLTEwLWxvZ2FyaXRobS1mdW5jdGlvbi04MjkiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5MT0cxMChYKTwvY29kZT4gY29tcHV0ZXMgdGhlIGJhc2UgMTAgbG9nYXJpdGhtIG9mIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBMT0cxMChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBvciA8Y29kZT5DT01QTEVYPC9jb2RlPi4gCitUaGUga2luZCB0eXBlIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X2xvZzEwCisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAxMC4wXzgKKyAgICAgICAgICAgIHggPSBsb2cxMCh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfbG9nMTAKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+QUxPRzEwKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRMT0cxMChYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MT0dJQ0FMLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTE9HSUNBTC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDQ3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTE9HSUNBTC5odG1sCkBAIC0wLDAgKzEsODEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxPR0lDQUwgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTE9HXzAwNWZHQU1NQS5odG1sI0xPR18wMDVmR0FNTUEiIHRpdGxlPSJMT0dfR0FNTUEiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMT05HLmh0bWwjTE9ORyIgdGl0bGU9IkxPTkciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTE9HSUNBTCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMT05HLmh0bWwjTE9ORyI+TE9ORzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxPR18wMDVmR0FNTUEuaHRtbCNMT0dfMDA1ZkdBTU1BIj5MT0dfR0FNTUE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTU2IDxjb2RlPkxPR0lDQUw8L2NvZGU+ICZtZGFzaDsgQ29udmVydCB0byBsb2dpY2FsIHR5cGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1MT0dJQ0FMLTgzNSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnZlcnNpb25fMDAyYy10by1sb2dpY2FsLTgzNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkNvbnZlcnRzIG9uZSBraW5kIG9mIDxjb2RlPkxPR0lDQUw8L2NvZGU+IHZhcmlhYmxlIHRvIGFub3RoZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTE9HSUNBTChMIFssIEtJTkRdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkw8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPkxPR0lDQUw8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBBbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbml0aWFsaXphdGlvbgorZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBraW5kIHBhcmFtZXRlciBvZiB0aGUgcmVzdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgYSA8Y29kZT5MT0dJQ0FMPC9jb2RlPiB2YWx1ZSBlcXVhbCB0byA8dmFyPkw8L3Zhcj4sIHdpdGggYQora2luZCBjb3JyZXNwb25kaW5nIHRvIDx2YXI+S0lORDwvdmFyPiwgb3Igb2YgdGhlIGRlZmF1bHQgbG9naWNhbCBraW5kIGlmCis8dmFyPktJTkQ8L3Zhcj4gaXMgbm90IGdpdmVuLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IklOVC5odG1sI0lOVCI+SU5UPC9hPiwgPGEgaHJlZj0iUkVBTC5odG1sI1JFQUwiPlJFQUw8L2E+LCA8YSBocmVmPSJDTVBMWC5odG1sI0NNUExYIj5DTVBMWDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9MT0dfMDA1ZkdBTU1BLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTE9HXzAwNWZHQU1NQS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTE9HXzAwNWZHQU1NQS5odG1sCkBAIC0wLDAgKzEsOTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxPR19HQU1NQSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMT0cxMC5odG1sI0xPRzEwIiB0aXRsZT0iTE9HMTAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMT0dJQ0FMLmh0bWwjTE9HSUNBTCIgdGl0bGU9IkxPR0lDQUwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTE9HX0dBTU1BIj48L2E+Cis8YSBuYW1lPSJMT0dfMDA1ZkdBTU1BIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxPR0lDQUwuaHRtbCNMT0dJQ0FMIj5MT0dJQ0FMPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTE9HMTAuaHRtbCNMT0cxMCI+TE9HMTA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTU1IDxjb2RlPkxPR19HQU1NQTwvY29kZT4gJm1kYXNoOyBMb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTE9HXzAwNWZHQU1NQS04MzAiPjwvYT48YSBuYW1lPSJpbmRleC1MR0FNTUEtODMxIj48L2E+PGEgbmFtZT0iaW5kZXgtQUxHQU1BLTgzMiI+PC9hPjxhIG5hbWU9ImluZGV4LURMR0FNQS04MzMiPjwvYT48YSBuYW1lPSJpbmRleC1HYW1tYS1mdW5jdGlvbl8wMDJjLWxvZ2FyaXRobS1vZi04MzQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5MT0dfR0FNTUEoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgYWJzb2x1dGUgdmFsdWUKK29mIHRoZSBHYW1tYSAoXEdhbW1hKSBmdW5jdGlvbi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlggPSBMT0dfR0FNTUEoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+IGFuZCBuZWl0aGVyIHplcm8KK25vciBhIG5lZ2F0aXZlIGludGVnZXIuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+IG9mIHRoZSBzYW1lIGtpbmQgYXMgPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9sb2dfZ2FtbWEKKyAgICAgICAgICAgIHJlYWwgOjogeCA9IDEuMAorICAgICAgICAgICAgeCA9IGxnYW1tYSh4KSAhIHJldHVybnMgMC4wCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9sb2dfZ2FtbWEKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+TEdBTU1BKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KSBYPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBFeHRlbnNpb24KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkFMR0FNQShYKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5HTlUgRXh0ZW5zaW9uCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5ETEdBTUEoWCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIEV4dGVuc2lvbgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+R2FtbWEgZnVuY3Rpb246IDxhIGhyZWY9IkdBTU1BLmh0bWwjR0FNTUEiPkdBTU1BPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTE9ORy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xPTkcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Y4MWI1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xPTkcuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5MT05HIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxPR0lDQUwuaHRtbCNMT0dJQ0FMIiB0aXRsZT0iTE9HSUNBTCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxTSElGVC5odG1sI0xTSElGVCIgdGl0bGU9IkxTSElGVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMT05HIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxTSElGVC5odG1sI0xTSElGVCI+TFNISUZUPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTE9HSUNBTC5odG1sI0xPR0lDQUwiPkxPR0lDQUw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTU3IDxjb2RlPkxPTkc8L2NvZGU+ICZtZGFzaDsgQ29udmVydCB0byBpbnRlZ2VyIHR5cGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1MT05HLTgzNyI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnZlcnNpb25fMDAyYy10by1pbnRlZ2VyLTgzOCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkNvbnZlcnQgdG8gYSA8Y29kZT5LSU5EPTQ8L2NvZGU+IGludGVnZXIgdHlwZSwgd2hpY2ggaXMgdGhlIHNhbWUgc2l6ZSBhcyBhIEMKKzxjb2RlPmxvbmc8L2NvZGU+IGludGVnZXIuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHN0YW5kYXJkIDxjb2RlPklOVDwvY29kZT4KK2ludHJpbnNpYyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50IG9mIDxjb2RlPktJTkQ9NDwvY29kZT4sIGFuZCBpcyBvbmx5CitpbmNsdWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBMT05HKEEpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiwKKzxjb2RlPlJFQUw8L2NvZGU+LCBvciA8Y29kZT5DT01QTEVYPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIGEgPGNvZGU+SU5URUdFUig0KTwvY29kZT4gdmFyaWFibGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSU5ULmh0bWwjSU5UIj5JTlQ8L2E+LCA8YSBocmVmPSJJTlQyLmh0bWwjSU5UMiI+SU5UMjwvYT4sIDxhIGhyZWY9IklOVDguaHRtbCNJTlQ4Ij5JTlQ4PC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xTSElGVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xTSElGVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkODk3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTFNISUZULmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TFNISUZUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxPTkcuaHRtbCNMT05HIiB0aXRsZT0iTE9ORyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxTVEFULmh0bWwjTFNUQVQiIHRpdGxlPSJMU1RBVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMU0hJRlQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTFNUQVQuaHRtbCNMU1RBVCI+TFNUQVQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMT05HLmh0bWwjTE9ORyI+TE9ORzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNTggPGNvZGU+TFNISUZUPC9jb2RlPiAmbWRhc2g7IExlZnQgc2hpZnQgYml0czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxTSElGVC04MzkiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzXzAwMmMtc2hpZnQtbGVmdC04NDAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5MU0hJRlQ8L2NvZGU+IHJldHVybnMgYSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIDx2YXI+STwvdmFyPiB3aXRoIGFsbCBvZiB0aGUKK2JpdHMgc2hpZnRlZCBsZWZ0IGJ5IDx2YXI+U0hJRlQ8L3Zhcj4gcGxhY2VzLiAgSWYgdGhlIGFic29sdXRlIHZhbHVlIG9mCis8dmFyPlNISUZUPC92YXI+IGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT5CSVRfU0laRShJKTwvY29kZT4sIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQuIAorQml0cyBzaGlmdGVkIG91dCBmcm9tIHRoZSBsZWZ0IGVuZCBhcmUgbG9zdDsgemVyb3MgYXJlIHNoaWZ0ZWQgaW4gZnJvbQordGhlIG9wcG9zaXRlIGVuZC4KKworICAgICA8cD5UaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkgdGhlIDxjb2RlPklTSEZUPC9jb2RlPiBpbnRyaW5zaWMsIHdoaWNoCitpcyBzdGFuZGFyZCBpbiBGb3J0cmFuIDk1IGFuZCBsYXRlciwgYW5kIHRoZSA8Y29kZT5TSElGVEw8L2NvZGU+IGludHJpbnNpYywKK3doaWNoIGlzIHN0YW5kYXJkIGluIEZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBMU0hJRlQoSSwgU0hJRlQpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TSElGVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgc2FtZSBraW5kIGFzCis8dmFyPkk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSVNIRlQuaHRtbCNJU0hGVCI+SVNIRlQ8L2E+LCA8YSBocmVmPSJJU0hGVEMuaHRtbCNJU0hGVEMiPklTSEZUQzwvYT4sIDxhIGhyZWY9IlJTSElGVC5odG1sI1JTSElGVCI+UlNISUZUPC9hPiwgPGEgaHJlZj0iU0hJRlRBLmh0bWwjU0hJRlRBIj5TSElGVEE8L2E+LCA8YSBocmVmPSJTSElGVEwuaHRtbCNTSElGVEwiPlNISUZUTDwvYT4sCis8YSBocmVmPSJTSElGVFIuaHRtbCNTSElGVFIiPlNISUZUUjwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xTVEFULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTFNUQVQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ZlOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xTVEFULmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TFNUQVQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTFNISUZULmh0bWwjTFNISUZUIiB0aXRsZT0iTFNISUZUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTFRJTUUuaHRtbCNMVElNRSIgdGl0bGU9IkxUSU1FIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxTVEFUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxUSU1FLmh0bWwjTFRJTUUiPkxUSU1FPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTFNISUZULmh0bWwjTFNISUZUIj5MU0hJRlQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTU5IDxjb2RlPkxTVEFUPC9jb2RlPiAmbWRhc2g7IEdldCBmaWxlIHN0YXR1czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUxTVEFULTg0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtc3lzdGVtXzAwMmMtZmlsZS1zdGF0dXMtODQyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+TFNUQVQ8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8YSBocmVmPSJTVEFULmh0bWwjU1RBVCI+U1RBVDwvYT4sIGV4Y2VwdCB0aGF0IGlmIHBhdGggaXMgYQorc3ltYm9saWMgbGluaywgdGhlbiB0aGUgbGluayBpdHNlbGYgaXMgc3RhdHRlZCwgbm90IHRoZSBmaWxlIHRoYXQgaXQKK3JlZmVycyB0by4KKworICAgICA8cD5UaGUgZWxlbWVudHMgaW4gPGNvZGU+VkFMVUVTPC9jb2RlPiBhcmUgdGhlIHNhbWUgYXMgZGVzY3JpYmVkIGJ5IDxhIGhyZWY9IlNUQVQuaHRtbCNTVEFUIj5TVEFUPC9hPi4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOworaG93ZXZlciwgb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgTFNUQVQoTkFNRSwgVkFMVUVTIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gTFNUQVQoTkFNRSwgVkFMVUVTKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TkFNRTwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IG9mIHRoZSBkZWZhdWx0CitraW5kLCBhIHZhbGlkIHBhdGggd2l0aGluIHRoZSBmaWxlIHN5c3RlbS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlZBTFVFUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUig0KSwgRElNRU5TSU9OKDEzKTwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVEFUVVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc3RhdHVzIGZsYWcgb2YgdHlwZSA8Y29kZT5JTlRFR0VSKDQpPC9jb2RlPi4gCitSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgYSBzeXN0ZW0gc3BlY2lmaWMgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPlNlZSA8YSBocmVmPSJTVEFULmh0bWwjU1RBVCI+U1RBVDwvYT4gZm9yIGFuIGV4YW1wbGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+VG8gc3RhdCBhbiBvcGVuIGZpbGU6IDxhIGhyZWY9IkZTVEFULmh0bWwjRlNUQVQiPkZTVEFUPC9hPiwgdG8gc3RhdCBhIGZpbGU6IDxhIGhyZWY9IlNUQVQuaHRtbCNTVEFUIj5TVEFUPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xUSU1FLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTFRJTUUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2YzZmUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xUSU1FLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TFRJTUUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTFNUQVQuaHRtbCNMU1RBVCIgdGl0bGU9IkxTVEFUIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUFMTE9DLmh0bWwjTUFMTE9DIiB0aXRsZT0iTUFMTE9DIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkxUSU1FIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1BTExPQy5odG1sI01BTExPQyI+TUFMTE9DPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTFNUQVQuaHRtbCNMU1RBVCI+TFNUQVQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTYwIDxjb2RlPkxUSU1FPC9jb2RlPiAmbWRhc2g7IENvbnZlcnQgdGltZSB0byBsb2NhbCB0aW1lIGluZm88L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1MVElNRS04NDMiPjwvYT48YSBuYW1lPSJpbmRleC10aW1lXzAwMmMtY29udmVyc2lvbi10by1sb2NhbC10aW1lLWluZm8tODQ0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+R2l2ZW4gYSBzeXN0ZW0gdGltZSB2YWx1ZSA8dmFyPlRJTUU8L3Zhcj4gKGFzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5USU1FODwvY29kZT4KK2ludHJpbnNpYyksIGZpbGxzIDx2YXI+VkFMVUVTPC92YXI+IHdpdGggdmFsdWVzIGV4dHJhY3RlZCBmcm9tIGl0IGFwcHJvcHJpYXRlCit0byB0aGUgbG9jYWwgdGltZSB6b25lIHVzaW5nIDxjb2RlPmxvY2FsdGltZSgzKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBMVElNRShUSU1FLCBWQUxVRVMpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VElNRTwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPkFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IHNjYWxhciBleHByZXNzaW9uCitjb3JyZXNwb25kaW5nIHRvIGEgc3lzdGVtIHRpbWUsIHdpdGggPGNvZGU+SU5URU5UKElOKTwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5WQUxVRVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPkEgZGVmYXVsdCA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhcnJheSB3aXRoIDkgZWxlbWVudHMsCit3aXRoIDxjb2RlPklOVEVOVChPVVQpPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgZWxlbWVudHMgb2YgPHZhcj5WQUxVRVM8L3Zhcj4gYXJlIGFzc2lnbmVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPlNlY29uZHMgYWZ0ZXIgdGhlIG1pbnV0ZSwgcmFuZ2UgMCZuZGFzaDs1OSBvciAwJm5kYXNoOzYxIHRvIGFsbG93IGZvciBsZWFwCitzZWNvbmRzCis8bGk+TWludXRlcyBhZnRlciB0aGUgaG91ciwgcmFuZ2UgMCZuZGFzaDs1OQorPGxpPkhvdXJzIHBhc3QgbWlkbmlnaHQsIHJhbmdlIDAmbmRhc2g7MjMKKzxsaT5EYXkgb2YgbW9udGgsIHJhbmdlIDAmbmRhc2g7MzEKKzxsaT5OdW1iZXIgb2YgbW9udGhzIHNpbmNlIEphbnVhcnksIHJhbmdlIDAmbmRhc2g7MTIKKzxsaT5ZZWFycyBzaW5jZSAxOTAwCis8bGk+TnVtYmVyIG9mIGRheXMgc2luY2UgU3VuZGF5LCByYW5nZSAwJm5kYXNoOzYKKzxsaT5EYXlzIHNpbmNlIEphbnVhcnkgMQorPGxpPkRheWxpZ2h0IHNhdmluZ3MgaW5kaWNhdG9yOiBwb3NpdGl2ZSBpZiBkYXlsaWdodCBzYXZpbmdzIGlzIGluCitlZmZlY3QsIHplcm8gaWYgbm90LCBhbmQgbmVnYXRpdmUgaWYgdGhlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgICAgPC9vbD4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDVElNRS5odG1sI0NUSU1FIj5DVElNRTwvYT4sIDxhIGhyZWY9IkdNVElNRS5odG1sI0dNVElNRSI+R01USU1FPC9hPiwgPGEgaHJlZj0iVElNRS5odG1sI1RJTUUiPlRJTUU8L2E+LCA8YSBocmVmPSJUSU1FOC5odG1sI1RJTUU4Ij5USU1FODwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xpbmstT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL0xpbmstT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOWM2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTGluay1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TGluayBPcHRpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjRGlyZWN0b3J5LU9wdGlvbnMiIHRpdGxlPSJEaXJlY3RvcnkgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJ1bnRpbWUtT3B0aW9ucy5odG1sI1J1bnRpbWUtT3B0aW9ucyIgdGl0bGU9IlJ1bnRpbWUgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMaW5rLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUnVudGltZS1PcHRpb25zLmh0bWwjUnVudGltZS1PcHRpb25zIj5SdW50aW1lIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iPkludm9raW5nIEdOVSBGb3J0cmFuPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi43IEluZmx1ZW5jaW5nIHRoZSBsaW5raW5nIHN0ZXA8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtbGlua2luZy0yMjIiPjwvYT48YSBuYW1lPSJpbmRleC1saW5raW5nXzAwMmMtc3RhdGljLTIyMyI+PC9hPgorVGhlc2Ugb3B0aW9ucyBjb21lIGludG8gcGxheSB3aGVuIHRoZSBjb21waWxlciBsaW5rcyBvYmplY3QgZmlsZXMgaW50byBhbgorZXhlY3V0YWJsZSBvdXRwdXQgZmlsZS4gVGhleSBhcmUgbWVhbmluZ2xlc3MgaWYgdGhlIGNvbXBpbGVyIGlzIG5vdCBkb2luZworYSBsaW5rIHN0ZXAuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1zdGF0aWMtbGliZ2ZvcnRyYW48L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdic3RhdGljXzAwMmRsaWJnZm9ydHJhbl8wMDdkLTIyNCI+PC9hPk9uIHN5c3RlbXMgdGhhdCBwcm92aWRlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJnZm9ydHJhbjwvc3Bhbj48L3NhbXA+IGFzIGEgc2hhcmVkIGFuZCBhIHN0YXRpYworbGlicmFyeSwgdGhpcyBvcHRpb24gZm9yY2VzIHRoZSB1c2Ugb2YgdGhlIHN0YXRpYyB2ZXJzaW9uLiBJZiBubworc2hhcmVkIHZlcnNpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gd2FzIGJ1aWx0IHdoZW4gdGhlIGNvbXBpbGVyIHdhcworY29uZmlndXJlZCwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUFMTE9DLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUFMTE9DLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjMjVhNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQUxMT0MuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUFMTE9DIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxUSU1FLmh0bWwjTFRJTUUiIHRpdGxlPSJMVElNRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1BU0tMLmh0bWwjTUFTS0wiIHRpdGxlPSJNQVNLTCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNQUxMT0MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUFTS0wuaHRtbCNNQVNLTCI+TUFTS0w8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMVElNRS5odG1sI0xUSU1FIj5MVElNRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNjEgPGNvZGU+TUFMTE9DPC9jb2RlPiAmbWRhc2g7IEFsbG9jYXRlIGR5bmFtaWMgbWVtb3J5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTUFMTE9DLTg0NSI+PC9hPjxhIG5hbWU9ImluZGV4LXBvaW50ZXJfMDAyYy1jcmF5LTg0NiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPk1BTExPQyhTSVpFKTwvY29kZT4gYWxsb2NhdGVzIDx2YXI+U0laRTwvdmFyPiBieXRlcyBvZiBkeW5hbWljIG1lbW9yeSBhbmQKK3JldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkuIFRoZSA8Y29kZT5NQUxMT0M8L2NvZGU+IGludHJpbnNpYworaXMgYW4gZXh0ZW5zaW9uIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBDcmF5IHBvaW50ZXJzLCBhbmQgaXMgcHJvdmlkZWQKK2luIEdOVSBGb3J0cmFuIHRvIGFsbG93IHRoZSB1c2VyIHRvIGNvbXBpbGUgbGVnYWN5IGNvZGUuIEZvciBuZXcgY29kZQordXNpbmcgRm9ydHJhbiA5NSBwb2ludGVycywgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGludHJpbnNpYyBpcworPGNvZGU+QUxMT0NBVEU8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5GdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5QVFIgPSBNQUxMT0MoU0laRSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TSVpFPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUihLKTwvY29kZT4sIHdpdGggPHZhcj5LPC92YXI+IHN1Y2ggdGhhdAordmFyaWFibGVzIG9mIHR5cGUgPGNvZGU+SU5URUdFUihLKTwvY29kZT4gaGF2ZSB0aGUgc2FtZSBzaXplIGFzCitDIHBvaW50ZXJzICg8Y29kZT5zaXplb2Yodm9pZCAqKTwvY29kZT4pLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+VGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDxjb2RlPk1BTExPQzwvY29kZT4gYW5kCis8Y29kZT5GUkVFPC9jb2RlPiB3aXRoIENyYXkgcG9pbnRlcnMuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X21hbGxvYworICAgICAgICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgICAgICAgaW50ZWdlciBpCisgICAgICAgICAgICByZWFsKjggeCgqKSwgegorICAgICAgICAgICAgcG9pbnRlcihwdHJfeCx4KQorICAgICAgICAgIAorICAgICAgICAgICAgcHRyX3ggPSBtYWxsb2MoMjAqOCkKKyAgICAgICAgICAgIGRvIGkgPSAxLCAyMAorICAgICAgICAgICAgICB4KGkpID0gc3FydCgxLjBkMCAvIGkpCisgICAgICAgICAgICBlbmQgZG8KKyAgICAgICAgICAgIHogPSAwCisgICAgICAgICAgICBkbyBpID0gMSwgMjAKKyAgICAgICAgICAgICAgeiA9IHogKyB4KGkpCisgICAgICAgICAgICAgIHByaW50ICosIHoKKyAgICAgICAgICAgIGVuZCBkbworICAgICAgICAgICAgY2FsbCBmcmVlKHB0cl94KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfbWFsbG9jCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iRlJFRS5odG1sI0ZSRUUiPkZSRUU8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUFTS0wuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQVNLTC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYjA0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUFTS0wuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NQVNLTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNQUxMT0MuaHRtbCNNQUxMT0MiIHRpdGxlPSJNQUxMT0MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNQVNLUi5odG1sI01BU0tSIiB0aXRsZT0iTUFTS1IiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUFTS0wiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUFTS1IuaHRtbCNNQVNLUiI+TUFTS1I8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNQUxMT0MuaHRtbCNNQUxMT0MiPk1BTExPQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNjIgPGNvZGU+TUFTS0w8L2NvZGU+ICZtZGFzaDsgTGVmdCBqdXN0aWZpZWQgbWFzazwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1BU0tMLTg0NyI+PC9hPjxhIG5hbWU9ImluZGV4LW1hc2tfMDAyYy1sZWZ0LWp1c3RpZmllZC04NDgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5NQVNLTChJWywgS0lORF0pPC9jb2RlPiBoYXMgaXRzIGxlZnRtb3N0IDx2YXI+STwvdmFyPiBiaXRzIHNldCB0byAxLCBhbmQgdGhlCityZW1haW5pbmcgYml0cyBzZXQgdG8gMC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IE1BU0tMKElbLCBLSU5EXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgY29uc3RhbnQgZXhwcmVzc2lvbiBvZiB0eXBlCis8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uIElmIDx2YXI+S0lORDwvdmFyPiBpcyBwcmVzZW50LCBpdAorc3BlY2lmaWVzIHRoZSBraW5kIHZhbHVlIG9mIHRoZSByZXR1cm4gdHlwZTsgb3RoZXJ3aXNlLCBpdCBpcyBvZiB0aGUKK2RlZmF1bHQgaW50ZWdlciBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9Ik1BU0tSLmh0bWwjTUFTS1IiPk1BU0tSPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01BU0tSLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUFTS1IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Q4YTk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01BU0tSLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUFTS1IgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTUFTS0wuaHRtbCNNQVNLTCIgdGl0bGU9Ik1BU0tMIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUFUTVVMLmh0bWwjTUFUTVVMIiB0aXRsZT0iTUFUTVVMIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1BU0tSIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1BVE1VTC5odG1sI01BVE1VTCI+TUFUTVVMPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUFTS0wuaHRtbCNNQVNLTCI+TUFTS0w8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTYzIDxjb2RlPk1BU0tSPC9jb2RlPiAmbWRhc2g7IFJpZ2h0IGp1c3RpZmllZCBtYXNrPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTUFTS1ItODQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWFza18wMDJjLXJpZ2h0LWp1c3RpZmllZC04NTAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5NQVNLTChJWywgS0lORF0pPC9jb2RlPiBoYXMgaXRzIHJpZ2h0bW9zdCA8dmFyPkk8L3Zhcj4gYml0cyBzZXQgdG8gMSwgYW5kIHRoZQorcmVtYWluaW5nIGJpdHMgc2V0IHRvIDAuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBNQVNLUihJWywgS0lORF0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPktJTkQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIGNvbnN0YW50IGV4cHJlc3Npb24gb2YgdHlwZQorPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiBJZiA8dmFyPktJTkQ8L3Zhcj4gaXMgcHJlc2VudCwgaXQKK3NwZWNpZmllcyB0aGUga2luZCB2YWx1ZSBvZiB0aGUgcmV0dXJuIHR5cGU7IG90aGVyd2lzZSwgaXQgaXMgb2YgdGhlCitkZWZhdWx0IGludGVnZXIga2luZC4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJNQVNLTC5odG1sI01BU0tMIj5NQVNLTDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQVRNVUwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQVRNVUwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZlNTdjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01BVE1VTC5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1BVE1VTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNQVNLUi5odG1sI01BU0tSIiB0aXRsZT0iTUFTS1IiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNQVguaHRtbCNNQVgiIHRpdGxlPSJNQVgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUFUTVVMIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1BWC5odG1sI01BWCI+TUFYPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUFTS1IuaHRtbCNNQVNLUiI+TUFTS1I8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTY0IDxjb2RlPk1BVE1VTDwvY29kZT4gJm1kYXNoOyBtYXRyaXggbXVsdGlwbGljYXRpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NQVRNVUwtODUxIj48L2E+PGEgbmFtZT0iaW5kZXgtbWF0cml4LW11bHRpcGxpY2F0aW9uLTg1MiI+PC9hPjxhIG5hbWU9ImluZGV4LXByb2R1Y3RfMDAyYy1tYXRyaXgtODUzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UGVyZm9ybXMgYSBtYXRyaXggbXVsdGlwbGljYXRpb24gb24gbnVtZXJpYyBvciBsb2dpY2FsIGFyZ3VtZW50cy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTUFUTVVMKE1BVFJJWF9BLCBNQVRSSVhfQik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5NQVRSSVhfQTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+QW4gYXJyYXkgb2YgPGNvZGU+SU5URUdFUjwvY29kZT4sCis8Y29kZT5SRUFMPC9jb2RlPiwgPGNvZGU+Q09NUExFWDwvY29kZT4sIG9yIDxjb2RlPkxPR0lDQUw8L2NvZGU+IHR5cGUsIHdpdGggYSByYW5rIG9mCitvbmUgb3IgdHdvLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFUUklYX0I8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPkFuIGFycmF5IG9mIDxjb2RlPklOVEVHRVI8L2NvZGU+LAorPGNvZGU+UkVBTDwvY29kZT4sIG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+IHR5cGUgaWYgPHZhcj5NQVRSSVhfQTwvdmFyPiBpcyBvZiBhIG51bWVyaWMKK3R5cGU7IG90aGVyd2lzZSwgYW4gYXJyYXkgb2YgPGNvZGU+TE9HSUNBTDwvY29kZT4gdHlwZS4gVGhlIHJhbmsgc2hhbGwgYmUgb25lCitvciB0d28sIGFuZCB0aGUgZmlyc3QgKG9yIG9ubHkpIGRpbWVuc2lvbiBvZiA8dmFyPk1BVFJJWF9CPC92YXI+IHNoYWxsIGJlCitlcXVhbCB0byB0aGUgbGFzdCAob3Igb25seSkgZGltZW5zaW9uIG9mIDx2YXI+TUFUUklYX0E8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIG1hdHJpeCBwcm9kdWN0IG9mIDx2YXI+TUFUUklYX0E8L3Zhcj4gYW5kIDx2YXI+TUFUUklYX0I8L3Zhcj4uICBUaGUgdHlwZSBhbmQKK2tpbmQgb2YgdGhlIHJlc3VsdCBmb2xsb3cgdGhlIHVzdWFsIHR5cGUgYW5kIGtpbmQgcHJvbW90aW9uIHJ1bGVzLCBhcworZm9yIHRoZSA8Y29kZT4qPC9jb2RlPiBvciA8Y29kZT4uQU5ELjwvY29kZT4gb3BlcmF0b3JzLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQVguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQVguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWM5MzUzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01BWC5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1BWCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNQVRNVUwuaHRtbCNNQVRNVUwiIHRpdGxlPSJNQVRNVUwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNQVhFWFBPTkVOVC5odG1sI01BWEVYUE9ORU5UIiB0aXRsZT0iTUFYRVhQT05FTlQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUFYIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1BWEVYUE9ORU5ULmh0bWwjTUFYRVhQT05FTlQiPk1BWEVYUE9ORU5UPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUFUTVVMLmh0bWwjTUFUTVVMIj5NQVRNVUw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTY1IDxjb2RlPk1BWDwvY29kZT4gJm1kYXNoOyBNYXhpbXVtIHZhbHVlIG9mIGFuIGFyZ3VtZW50IGxpc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NQVgtODU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtTUFYMC04NTUiPjwvYT48YSBuYW1lPSJpbmRleC1BTUFYMC04NTYiPjwvYT48YSBuYW1lPSJpbmRleC1NQVgxLTg1NyI+PC9hPjxhIG5hbWU9ImluZGV4LUFNQVgxLTg1OCI+PC9hPjxhIG5hbWU9ImluZGV4LURNQVgxLTg1OSI+PC9hPjxhIG5hbWU9ImluZGV4LW1heGltdW0tdmFsdWUtODYwIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgYXJndW1lbnQgd2l0aCB0aGUgbGFyZ2VzdCAobW9zdCBwb3NpdGl2ZSkgdmFsdWUuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTUFYKEExLCBBMiBbLCBBMyBbLCAuLi5dXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BMTwvdmFyPiAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IKKzxjb2RlPlJFQUw8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTI8L3Zhcj4sIDx2YXI+QTM8L3Zhcj4sIC4uLiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+QW4gZXhwcmVzc2lvbiBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kCithcyA8dmFyPkExPC92YXI+LiAgKEFzIGEgR05VIGV4dGVuc2lvbiwgYXJndW1lbnRzIG9mIGRpZmZlcmVudCBraW5kcyBhcmUKK3Blcm1pdHRlZC4pCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgbWF4aW11bSB2YWx1ZSBhbW9uZyB0aGUgYXJndW1lbnRzLAorYW5kIGhhcyB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKworICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TdGFuZGFyZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+TUFYMChBMSk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SU5URUdFUig0KSBBMTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVEVHRVIoNCk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5BTUFYMChBMSk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpIEExPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTChNQVgoWCkpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPk1BWDEoQTEpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwgQTE8L2NvZGU+ICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlQoTUFYKFgpKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+QU1BWDEoQTEpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KSBBMTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5ETUFYMShBMSk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIEExPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9Ik1BWExPQy5odG1sI01BWExPQyI+TUFYTE9DPC9hPiA8YSBocmVmPSJNQVhWQUwuaHRtbCNNQVhWQUwiPk1BWFZBTDwvYT4sIDxhIGhyZWY9Ik1JTi5odG1sI01JTiI+TUlOPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUFYRVhQT05FTlQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQVhFWFBPTkVOVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOTU4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUFYRVhQT05FTlQuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NQVhFWFBPTkVOVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNQVguaHRtbCNNQVgiIHRpdGxlPSJNQVgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNQVhMT0MuaHRtbCNNQVhMT0MiIHRpdGxlPSJNQVhMT0MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUFYRVhQT05FTlQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUFYTE9DLmh0bWwjTUFYTE9DIj5NQVhMT0M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNQVguaHRtbCNNQVgiPk1BWDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNjYgPGNvZGU+TUFYRVhQT05FTlQ8L2NvZGU+ICZtZGFzaDsgTWF4aW11bSBleHBvbmVudCBvZiBhIHJlYWwga2luZDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1BWEVYUE9ORU5ULTg2MSI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtbWF4aW11bS1leHBvbmVudC04NjIiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5NQVhFWFBPTkVOVChYKTwvY29kZT4gcmV0dXJucyB0aGUgbWF4aW11bSBleHBvbmVudCBpbiB0aGUgbW9kZWwgb2YgdGhlCit0eXBlIG9mIDxjb2RlPlg8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBNQVhFWFBPTkVOVChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+UkVBTDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgZGVmYXVsdCBpbnRlZ2VyCitraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gZXhwb25lbnRzCisgICAgICAgICAgICByZWFsKGtpbmQ9NCkgOjogeAorICAgICAgICAgICAgcmVhbChraW5kPTgpIDo6IHkKKyAgICAgICAgICAKKyAgICAgICAgICAgIHByaW50ICosIG1pbmV4cG9uZW50KHgpLCBtYXhleHBvbmVudCh4KQorICAgICAgICAgICAgcHJpbnQgKiwgbWluZXhwb25lbnQoeSksIG1heGV4cG9uZW50KHkpCisgICAgICAgICAgZW5kIHByb2dyYW0gZXhwb25lbnRzCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01BWExPQy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01BWExPQy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZmMzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUFYTE9DLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1BWExPQyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNQVhFWFBPTkVOVC5odG1sI01BWEVYUE9ORU5UIiB0aXRsZT0iTUFYRVhQT05FTlQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNQVhWQUwuaHRtbCNNQVhWQUwiIHRpdGxlPSJNQVhWQUwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUFYTE9DIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1BWFZBTC5odG1sI01BWFZBTCI+TUFYVkFMPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUFYRVhQT05FTlQuaHRtbCNNQVhFWFBPTkVOVCI+TUFYRVhQT05FTlQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTY3IDxjb2RlPk1BWExPQzwvY29kZT4gJm1kYXNoOyBMb2NhdGlvbiBvZiB0aGUgbWF4aW11bSB2YWx1ZSB3aXRoaW4gYW4gYXJyYXk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NQVhMT0MtODYzIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1sb2NhdGlvbi1vZi1tYXhpbXVtLWVsZW1lbnQtODY0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+RGV0ZXJtaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5IHdpdGggdGhlIG1heGltdW0KK3ZhbHVlLCBvciwgaWYgdGhlIDx2YXI+RElNPC92YXI+IGFyZ3VtZW50IGlzIHN1cHBsaWVkLCBkZXRlcm1pbmVzIHRoZQorbG9jYXRpb25zIG9mIHRoZSBtYXhpbXVtIGVsZW1lbnQgYWxvbmcgZWFjaCByb3cgb2YgdGhlIGFycmF5IGluIHRoZQorPHZhcj5ESU08L3Zhcj4gZGlyZWN0aW9uLiAgSWYgPHZhcj5NQVNLPC92YXI+IGlzIHByZXNlbnQsIG9ubHkgdGhlIGVsZW1lbnRzIGZvcgord2hpY2ggPHZhcj5NQVNLPC92YXI+IGlzIDxjb2RlPi5UUlVFLjwvY29kZT4gYXJlIGNvbnNpZGVyZWQuICBJZiBtb3JlIHRoYW4gb25lCitlbGVtZW50IGluIHRoZSBhcnJheSBoYXMgdGhlIG1heGltdW0gdmFsdWUsIHRoZSBsb2NhdGlvbiByZXR1cm5lZCBpcwordGhhdCBvZiB0aGUgZmlyc3Qgc3VjaCBlbGVtZW50IGluIGFycmF5IGVsZW1lbnQgb3JkZXIuICBJZiB0aGUgYXJyYXkgaGFzCit6ZXJvIHNpemUsIG9yIGFsbCBvZiB0aGUgZWxlbWVudHMgb2YgPHZhcj5NQVNLPC92YXI+IGFyZSA8Y29kZT4uRkFMU0UuPC9jb2RlPiwgdGhlbgordGhlIHJlc3VsdCBpcyBhbiBhcnJheSBvZiB6ZXJvZXMuICBTaW1pbGFybHksIGlmIDx2YXI+RElNPC92YXI+IGlzIHN1cHBsaWVkCithbmQgYWxsIG9mIHRoZSBlbGVtZW50cyBvZiA8dmFyPk1BU0s8L3Zhcj4gYWxvbmcgYSBnaXZlbiByb3cgYXJlIHplcm8sIHRoZQorcmVzdWx0IHZhbHVlIGZvciB0aGF0IHJvdyBpcyB6ZXJvLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+VHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IE1BWExPQyhBUlJBWSwgRElNIFssIE1BU0tdKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IE1BWExPQyhBUlJBWSBbLCBNQVNLXSk8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkFSUkFZPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhbiBhcnJheSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9yCis8Y29kZT5SRUFMPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkRJTTwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUKKzxjb2RlPklOVEVHRVI8L2NvZGU+LCB3aXRoIGEgdmFsdWUgYmV0d2VlbiBvbmUgYW5kIHRoZSByYW5rIG9mIDx2YXI+QVJSQVk8L3Zhcj4sCitpbmNsdXNpdmUuICBJdCBtYXkgbm90IGJlIGFuIG9wdGlvbmFsIGR1bW15IGFyZ3VtZW50LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGFuIGFycmF5IG9mIHR5cGUgPGNvZGU+TE9HSUNBTDwvY29kZT4sCithbmQgY29uZm9ybWFibGUgd2l0aCA8dmFyPkFSUkFZPC92YXI+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPklmIDx2YXI+RElNPC92YXI+IGlzIGFic2VudCwgdGhlIHJlc3VsdCBpcyBhIHJhbmstb25lIGFycmF5IHdpdGggYSBsZW5ndGgKK2VxdWFsIHRvIHRoZSByYW5rIG9mIDx2YXI+QVJSQVk8L3Zhcj4uICBJZiA8dmFyPkRJTTwvdmFyPiBpcyBwcmVzZW50LCB0aGUgcmVzdWx0CitpcyBhbiBhcnJheSB3aXRoIGEgcmFuayBvbmUgbGVzcyB0aGFuIHRoZSByYW5rIG9mIDx2YXI+QVJSQVk8L3Zhcj4sIGFuZCBhCitzaXplIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNpemUgb2YgPHZhcj5BUlJBWTwvdmFyPiB3aXRoIHRoZSA8dmFyPkRJTTwvdmFyPgorZGltZW5zaW9uIHJlbW92ZWQuICBJZiA8dmFyPkRJTTwvdmFyPiBpcyBwcmVzZW50IGFuZCA8dmFyPkFSUkFZPC92YXI+IGhhcyBhIHJhbmsKK29mIG9uZSwgdGhlIHJlc3VsdCBpcyBhIHNjYWxhci4gIEluIGFsbCBjYXNlcywgdGhlIHJlc3VsdCBpcyBvZiBkZWZhdWx0Cis8Y29kZT5JTlRFR0VSPC9jb2RlPiB0eXBlLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9Ik1BWC5odG1sI01BWCI+TUFYPC9hPiwgPGEgaHJlZj0iTUFYVkFMLmh0bWwjTUFYVkFMIj5NQVhWQUw8L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQVhWQUwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQVhWQUwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkyNDQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01BWFZBTC5odG1sCkBAIC0wLDAgKzEsOTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1BWFZBTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNQVhMT0MuaHRtbCNNQVhMT0MiIHRpdGxlPSJNQVhMT0MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNQ0xPQ0suaHRtbCNNQ0xPQ0siIHRpdGxlPSJNQ0xPQ0siPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUFYVkFMIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1DTE9DSy5odG1sI01DTE9DSyI+TUNMT0NLPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUFYTE9DLmh0bWwjTUFYTE9DIj5NQVhMT0M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTY4IDxjb2RlPk1BWFZBTDwvY29kZT4gJm1kYXNoOyBNYXhpbXVtIHZhbHVlIG9mIGFuIGFycmF5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTUFYVkFMLTg2NSI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtbWF4aW11bS12YWx1ZS04NjYiPjwvYT48YSBuYW1lPSJpbmRleC1tYXhpbXVtLXZhbHVlLTg2NyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkRldGVybWluZXMgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGVsZW1lbnRzIGluIGFuIGFycmF5IHZhbHVlLCBvciwgaWYKK3RoZSA8dmFyPkRJTTwvdmFyPiBhcmd1bWVudCBpcyBzdXBwbGllZCwgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSB2YWx1ZSBhbG9uZworZWFjaCByb3cgb2YgdGhlIGFycmF5IGluIHRoZSA8dmFyPkRJTTwvdmFyPiBkaXJlY3Rpb24uICBJZiA8dmFyPk1BU0s8L3Zhcj4gaXMKK3ByZXNlbnQsIG9ubHkgdGhlIGVsZW1lbnRzIGZvciB3aGljaCA8dmFyPk1BU0s8L3Zhcj4gaXMgPGNvZGU+LlRSVUUuPC9jb2RlPiBhcmUKK2NvbnNpZGVyZWQuICBJZiB0aGUgYXJyYXkgaGFzIHplcm8gc2l6ZSwgb3IgYWxsIG9mIHRoZSBlbGVtZW50cyBvZgorPHZhcj5NQVNLPC92YXI+IGFyZSA8Y29kZT4uRkFMU0UuPC9jb2RlPiwgdGhlbiB0aGUgcmVzdWx0IGlzIDxjb2RlPi1IVUdFKEFSUkFZKTwvY29kZT4KK2lmIDx2YXI+QVJSQVk8L3Zhcj4gaXMgbnVtZXJpYywgb3IgYSBzdHJpbmcgb2YgbnVsbHMgaWYgPHZhcj5BUlJBWTwvdmFyPiBpcyBvZiBjaGFyYWN0ZXIKK3R5cGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+UkVTVUxUID0gTUFYVkFMKEFSUkFZLCBESU0gWywgTUFTS10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+UkVTVUxUID0gTUFYVkFMKEFSUkFZIFssIE1BU0tdKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QVJSQVk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGFuIGFycmF5IG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IKKzxjb2RlPlJFQUw8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZQorPGNvZGU+SU5URUdFUjwvY29kZT4sIHdpdGggYSB2YWx1ZSBiZXR3ZWVuIG9uZSBhbmQgdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwKK2luY2x1c2l2ZS4gIEl0IG1heSBub3QgYmUgYW4gb3B0aW9uYWwgZHVtbXkgYXJndW1lbnQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5NQVNLPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgdHlwZSA8Y29kZT5MT0dJQ0FMPC9jb2RlPiwKK2FuZCBjb25mb3JtYWJsZSB3aXRoIDx2YXI+QVJSQVk8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+SWYgPHZhcj5ESU08L3Zhcj4gaXMgYWJzZW50LCBvciBpZiA8dmFyPkFSUkFZPC92YXI+IGhhcyBhIHJhbmsgb2Ygb25lLCB0aGUgcmVzdWx0CitpcyBhIHNjYWxhci4gIElmIDx2YXI+RElNPC92YXI+IGlzIHByZXNlbnQsIHRoZSByZXN1bHQgaXMgYW4gYXJyYXkgd2l0aCBhCityYW5rIG9uZSBsZXNzIHRoYW4gdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwgYW5kIGEgc2l6ZSBjb3JyZXNwb25kaW5nIHRvCit0aGUgc2l6ZSBvZiA8dmFyPkFSUkFZPC92YXI+IHdpdGggdGhlIDx2YXI+RElNPC92YXI+IGRpbWVuc2lvbiByZW1vdmVkLiAgSW4gYWxsCitjYXNlcywgdGhlIHJlc3VsdCBpcyBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIDx2YXI+QVJSQVk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iTUFYLmh0bWwjTUFYIj5NQVg8L2E+LCA8YSBocmVmPSJNQVhMT0MuaHRtbCNNQVhMT0MiPk1BWExPQzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQ0xPQ0suaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQ0xPQ0suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzdkNGUzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01DTE9DSy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1DTE9DSyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNQVhWQUwuaHRtbCNNQVhWQUwiIHRpdGxlPSJNQVhWQUwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNQ0xPQ0s4Lmh0bWwjTUNMT0NLOCIgdGl0bGU9Ik1DTE9DSzgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUNMT0NLIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1DTE9DSzguaHRtbCNNQ0xPQ0s4Ij5NQ0xPQ0s4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUFYVkFMLmh0bWwjTUFYVkFMIj5NQVhWQUw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTY5IDxjb2RlPk1DTE9DSzwvY29kZT4gJm1kYXNoOyBUaW1lIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTUNMT0NLLTg2OCI+PC9hPjxhIG5hbWU9ImluZGV4LXRpbWVfMDAyYy1jbG9jay10aWNrcy04NjkiPjwvYT48YSBuYW1lPSJpbmRleC1jbG9jay10aWNrcy04NzAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xvY2sgdGlja3Mgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9jZXNzLCBiYXNlZAorb24gdGhlIGZ1bmN0aW9uIDxjb2RlPmNsb2NrKDMpPC9jb2RlPiBpbiB0aGUgQyBzdGFuZGFyZCBsaWJyYXJ5LgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIG5vdCBmdWxseSBwb3J0YWJsZSwgc3VjaCBhcyB0byBzeXN0ZW1zIHdpdGggMzItYml0Cis8Y29kZT5JTlRFR0VSPC9jb2RlPiB0eXBlcyBidXQgc3VwcG9ydGluZyB0aW1lcyB3aWRlciB0aGFuIDMyIGJpdHMuIFRoZXJlZm9yZSwKK3RoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhpcyBpbnRyaW5zaWMgbWlnaHQgYmUsIG9yIGJlY29tZSwgbmVnYXRpdmUsIG9yCitudW1lcmljYWxseSBsZXNzIHRoYW4gcHJldmlvdXMgdmFsdWVzLCBkdXJpbmcgYSBzaW5nbGUgcnVuIG9mIHRoZQorY29tcGlsZWQgcHJvZ3JhbS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTUNMT0NLKCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSKDQpPC9jb2RlPiwgZXF1YWwgdG8gdGhlCitudW1iZXIgb2YgY2xvY2sgdGlja3Mgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9jZXNzLCBvciA8Y29kZT4tMTwvY29kZT4gaWYKK3RoZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCA8Y29kZT5jbG9jaygzKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+Q1RJTUU8L2E+LCA8YSBocmVmPSJHTVRJTUUuaHRtbCNHTVRJTUUiPkdNVElNRTwvYT4sIDxhIGhyZWY9IkxUSU1FLmh0bWwjTFRJTUUiPkxUSU1FPC9hPiwgPGEgaHJlZj0iTUNMT0NLLmh0bWwjTUNMT0NLIj5NQ0xPQ0s8L2E+LCA8YSBocmVmPSJUSU1FLmh0bWwjVElNRSI+VElNRTwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01DTE9DSzguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQ0xPQ0s4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0NWM5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NQ0xPQ0s4Lmh0bWwKQEAgLTAsMCArMSw4NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUNMT0NLOCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNQ0xPQ0suaHRtbCNNQ0xPQ0siIHRpdGxlPSJNQ0xPQ0siPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNRVJHRS5odG1sI01FUkdFIiB0aXRsZT0iTUVSR0UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUNMT0NLOCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNRVJHRS5odG1sI01FUkdFIj5NRVJHRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1DTE9DSy5odG1sI01DTE9DSyI+TUNMT0NLPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE3MCA8Y29kZT5NQ0xPQ0s4PC9jb2RlPiAmbWRhc2g7IFRpbWUgZnVuY3Rpb24gKDY0LWJpdCk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NQ0xPQ0s4LTg3MSI+PC9hPjxhIG5hbWU9ImluZGV4LXRpbWVfMDAyYy1jbG9jay10aWNrcy04NzIiPjwvYT48YSBuYW1lPSJpbmRleC1jbG9jay10aWNrcy04NzMiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xvY2sgdGlja3Mgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9jZXNzLCBiYXNlZAorb24gdGhlIGZ1bmN0aW9uIDxjb2RlPmNsb2NrKDMpPC9jb2RlPiBpbiB0aGUgQyBzdGFuZGFyZCBsaWJyYXJ5LgorCisgICAgIDxwPjxlbT5XYXJuaW5nOjwvZW0+IHRoaXMgaW50cmluc2ljIGRvZXMgbm90IGluY3JlYXNlIHRoZSByYW5nZSBvZiB0aGUgdGltaW5nCit2YWx1ZXMgb3ZlciB0aGF0IHJldHVybmVkIGJ5IDxjb2RlPmNsb2NrKDMpPC9jb2RlPi4gT24gYSBzeXN0ZW0gd2l0aCBhIDMyLWJpdAorPGNvZGU+Y2xvY2soMyk8L2NvZGU+LCA8Y29kZT5NQ0xPQ0s4PC9jb2RlPiB3aWxsIHJldHVybiBhIDMyLWJpdCB2YWx1ZSwgZXZlbiB0aG91Z2gKK2l0IGlzIGNvbnZlcnRlZCB0byBhIDY0LWJpdCA8Y29kZT5JTlRFR0VSKDgpPC9jb2RlPiB2YWx1ZS4gVGhhdCBtZWFucworb3ZlcmZsb3dzIG9mIHRoZSAzMi1iaXQgdmFsdWUgY2FuIHN0aWxsIG9jY3VyLiBUaGVyZWZvcmUsIHRoZSB2YWx1ZXMKK3JldHVybmVkIGJ5IHRoaXMgaW50cmluc2ljIG1pZ2h0IGJlIG9yIGJlY29tZSBuZWdhdGl2ZSBvciBudW1lcmljYWxseQorbGVzcyB0aGFuIHByZXZpb3VzIHZhbHVlcyBkdXJpbmcgYSBzaW5nbGUgcnVuIG9mIHRoZSBjb21waWxlZCBwcm9ncmFtLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5GdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBNQ0xPQ0s4KCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSKDgpPC9jb2RlPiwgZXF1YWwgdG8gdGhlCitudW1iZXIgb2YgY2xvY2sgdGlja3Mgc2luY2UgdGhlIHN0YXJ0IG9mIHRoZSBwcm9jZXNzLCBvciA8Y29kZT4tMTwvY29kZT4gaWYKK3RoZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCA8Y29kZT5jbG9jaygzKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+Q1RJTUU8L2E+LCA8YSBocmVmPSJHTVRJTUUuaHRtbCNHTVRJTUUiPkdNVElNRTwvYT4sIDxhIGhyZWY9IkxUSU1FLmh0bWwjTFRJTUUiPkxUSU1FPC9hPiwgPGEgaHJlZj0iTUNMT0NLLmh0bWwjTUNMT0NLIj5NQ0xPQ0s8L2E+LCA8YSBocmVmPSJUSU1FOC5odG1sI1RJTUU4Ij5USU1FODwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01FUkdFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUVSR0UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNmZmZiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01FUkdFLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUVSR0UgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTUNMT0NLOC5odG1sI01DTE9DSzgiIHRpdGxlPSJNQ0xPQ0s4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUVSR0VfMDA1ZkJJVFMuaHRtbCNNRVJHRV8wMDVmQklUUyIgdGl0bGU9Ik1FUkdFX0JJVFMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUVSR0UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUVSR0VfMDA1ZkJJVFMuaHRtbCNNRVJHRV8wMDVmQklUUyI+TUVSR0VfQklUUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1DTE9DSzguaHRtbCNNQ0xPQ0s4Ij5NQ0xPQ0s4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE3MSA8Y29kZT5NRVJHRTwvY29kZT4gJm1kYXNoOyBNZXJnZSB2YXJpYWJsZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NRVJHRS04NzQiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLW1lcmdlLWFycmF5cy04NzUiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLWNvbWJpbmUtYXJyYXlzLTg3NiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlNlbGVjdCB2YWx1ZXMgZnJvbSB0d28gYXJyYXlzIGFjY29yZGluZyB0byBhIGxvZ2ljYWwgbWFzay4gIFRoZSByZXN1bHQKK2lzIGVxdWFsIHRvIDx2YXI+VFNPVVJDRTwvdmFyPiBpZiA8dmFyPk1BU0s8L3Zhcj4gaXMgPGNvZGU+LlRSVUUuPC9jb2RlPiwgb3IgZXF1YWwgdG8KKzx2YXI+RlNPVVJDRTwvdmFyPiBpZiBpdCBpcyA8Y29kZT4uRkFMU0UuPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBNRVJHRShUU09VUkNFLCBGU09VUkNFLCBNQVNLKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlRTT1VSQ0U8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPk1heSBiZSBvZiBhbnkgdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkZTT1VSQ0U8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kIHR5cGUgcGFyYW1ldGVycworYXMgPHZhcj5UU09VUkNFPC92YXI+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5MT0dJQ0FMPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmVzdWx0IGlzIG9mIHRoZSBzYW1lIHR5cGUgYW5kIHR5cGUgcGFyYW1ldGVycyBhcyA8dmFyPlRTT1VSQ0U8L3Zhcj4uCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NRVJHRV8wMDVmQklUUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01FUkdFXzAwNWZCSVRTLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzY2RiMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NRVJHRV8wMDVmQklUUy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1FUkdFX0JJVFMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTUVSR0UuaHRtbCNNRVJHRSIgdGl0bGU9Ik1FUkdFIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUlOLmh0bWwjTUlOIiB0aXRsZT0iTUlOIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1FUkdFX0JJVFMiPjwvYT4KKzxhIG5hbWU9Ik1FUkdFXzAwNWZCSVRTIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1JTi5odG1sI01JTiI+TUlOPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTUVSR0UuaHRtbCNNRVJHRSI+TUVSR0U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTcyIDxjb2RlPk1FUkdFX0JJVFM8L2NvZGU+ICZtZGFzaDsgTWVyZ2Ugb2YgYml0cyB1bmRlciBtYXNrPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTUVSR0VfMDA1ZkJJVFMtODc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYml0c18wMDJjLW1lcmdlLTg3OCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPk1FUkdFX0JJVFMoSSwgSiwgTUFTSyk8L2NvZGU+IG1lcmdlcyB0aGUgYml0cyBvZiA8dmFyPkk8L3Zhcj4gYW5kIDx2YXI+SjwvdmFyPgorYXMgZGV0ZXJtaW5lZCBieSB0aGUgbWFzay4gIFRoZSBpLXRoIGJpdCBvZiB0aGUgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZQoraS10aCBiaXQgb2YgPHZhcj5JPC92YXI+IGlmIHRoZSBpLXRoIGJpdCBvZiA8dmFyPk1BU0s8L3Zhcj4gaXMgMTsgaXQgaXMgZXF1YWwgdG8KK3RoZSBpLXRoIGJpdCBvZiA8dmFyPko8L3Zhcj4gb3RoZXJ3aXNlLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTUVSR0VfQklUUyhJLCBKLCBNQVNLKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5KPC92YXI+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgc2FtZQora2luZCBhcyA8dmFyPkk8L3Zhcj4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5NQVNLPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgc2FtZQora2luZCBhcyA8dmFyPkk8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJlc3VsdCBpcyBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIDx2YXI+STwvdmFyPi4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01JTi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01JTi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjZhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUlOLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUlOIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1FUkdFXzAwNWZCSVRTLmh0bWwjTUVSR0VfMDA1ZkJJVFMiIHRpdGxlPSJNRVJHRV9CSVRTIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTUlORVhQT05FTlQuaHRtbCNNSU5FWFBPTkVOVCIgdGl0bGU9Ik1JTkVYUE9ORU5UIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1JTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNSU5FWFBPTkVOVC5odG1sI01JTkVYUE9ORU5UIj5NSU5FWFBPTkVOVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1FUkdFXzAwNWZCSVRTLmh0bWwjTUVSR0VfMDA1ZkJJVFMiPk1FUkdFX0JJVFM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTczIDxjb2RlPk1JTjwvY29kZT4gJm1kYXNoOyBNaW5pbXVtIHZhbHVlIG9mIGFuIGFyZ3VtZW50IGxpc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NSU4tODc5Ij48L2E+PGEgbmFtZT0iaW5kZXgtTUlOMC04ODAiPjwvYT48YSBuYW1lPSJpbmRleC1BTUlOMC04ODEiPjwvYT48YSBuYW1lPSJpbmRleC1NSU4xLTg4MiI+PC9hPjxhIG5hbWU9ImluZGV4LUFNSU4xLTg4MyI+PC9hPjxhIG5hbWU9ImluZGV4LURNSU4xLTg4NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1pbmltdW0tdmFsdWUtODg1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgYXJndW1lbnQgd2l0aCB0aGUgc21hbGxlc3QgKG1vc3QgbmVnYXRpdmUpIHZhbHVlLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IE1JTihBMSwgQTIgWywgQTMsIC4uLl0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTE8L3Zhcj4gICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9yCis8Y29kZT5SRUFMPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkEyPC92YXI+LCA8dmFyPkEzPC92YXI+LCAuLi4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPkFuIGV4cHJlc3Npb24gb2YgdGhlIHNhbWUgdHlwZSBhbmQga2luZAorYXMgPHZhcj5BMTwvdmFyPi4gIChBcyBhIEdOVSBleHRlbnNpb24sIGFyZ3VtZW50cyBvZiBkaWZmZXJlbnQga2luZHMgYXJlCitwZXJtaXR0ZWQuKQorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIG1heGltdW0gdmFsdWUgYW1vbmcgdGhlIGFyZ3VtZW50cywKK2FuZCBoYXMgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiB0eXBlICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPk1JTjAoQTEpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpIEExPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SU5URUdFUig0KTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+QU1JTjAoQTEpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVEVHRVIoNCkgQTE8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5NSU4xKEExKTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCBBMTwvY29kZT4gICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVEVHRVIoNCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkFNSU4xKEExKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIEExPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KTwvY29kZT4gICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+RE1JTjEoQTEpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgQTE8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gNzcgYW5kIGxhdGVyCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJNQVguaHRtbCNNQVgiPk1BWDwvYT4sIDxhIGhyZWY9Ik1JTkxPQy5odG1sI01JTkxPQyI+TUlOTE9DPC9hPiwgPGEgaHJlZj0iTUlOVkFMLmh0bWwjTUlOVkFMIj5NSU5WQUw8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUlORVhQT05FTlQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NSU5FWFBPTkVOVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NGE2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUlORVhQT05FTlQuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NSU5FWFBPTkVOVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNSU4uaHRtbCNNSU4iIHRpdGxlPSJNSU4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNSU5MT0MuaHRtbCNNSU5MT0MiIHRpdGxlPSJNSU5MT0MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTUlORVhQT05FTlQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlOTE9DLmh0bWwjTUlOTE9DIj5NSU5MT0M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSU4uaHRtbCNNSU4iPk1JTjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNzQgPGNvZGU+TUlORVhQT05FTlQ8L2NvZGU+ICZtZGFzaDsgTWluaW11bSBleHBvbmVudCBvZiBhIHJlYWwga2luZDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1JTkVYUE9ORU5ULTg4NiI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtbWluaW11bS1leHBvbmVudC04ODciPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5NSU5FWFBPTkVOVChYKTwvY29kZT4gcmV0dXJucyB0aGUgbWluaW11bSBleHBvbmVudCBpbiB0aGUgbW9kZWwgb2YgdGhlCit0eXBlIG9mIDxjb2RlPlg8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBNSU5FWFBPTkVOVChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+UkVBTDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgZGVmYXVsdCBpbnRlZ2VyCitraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+U2VlIDxjb2RlPk1BWEVYUE9ORU5UPC9jb2RlPiBmb3IgYW4gZXhhbXBsZS4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUlOTE9DLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUlOTE9DLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4N2NiMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NSU5MT0MuaHRtbApAQCAtMCwwICsxLDEwMyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUlOTE9DIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JTkVYUE9ORU5ULmh0bWwjTUlORVhQT05FTlQiIHRpdGxlPSJNSU5FWFBPTkVOVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1JTlZBTC5odG1sI01JTlZBTCIgdGl0bGU9Ik1JTlZBTCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSU5MT0MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTUlOVkFMLmh0bWwjTUlOVkFMIj5NSU5WQUw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSU5FWFBPTkVOVC5odG1sI01JTkVYUE9ORU5UIj5NSU5FWFBPTkVOVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNzUgPGNvZGU+TUlOTE9DPC9jb2RlPiAmbWRhc2g7IExvY2F0aW9uIG9mIHRoZSBtaW5pbXVtIHZhbHVlIHdpdGhpbiBhbiBhcnJheTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1JTkxPQy04ODgiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLWxvY2F0aW9uLW9mLW1pbmltdW0tZWxlbWVudC04ODkiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5EZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgYXJyYXkgd2l0aCB0aGUgbWluaW11bQordmFsdWUsIG9yLCBpZiB0aGUgPHZhcj5ESU08L3Zhcj4gYXJndW1lbnQgaXMgc3VwcGxpZWQsIGRldGVybWluZXMgdGhlCitsb2NhdGlvbnMgb2YgdGhlIG1pbmltdW0gZWxlbWVudCBhbG9uZyBlYWNoIHJvdyBvZiB0aGUgYXJyYXkgaW4gdGhlCis8dmFyPkRJTTwvdmFyPiBkaXJlY3Rpb24uICBJZiA8dmFyPk1BU0s8L3Zhcj4gaXMgcHJlc2VudCwgb25seSB0aGUgZWxlbWVudHMgZm9yCit3aGljaCA8dmFyPk1BU0s8L3Zhcj4gaXMgPGNvZGU+LlRSVUUuPC9jb2RlPiBhcmUgY29uc2lkZXJlZC4gIElmIG1vcmUgdGhhbiBvbmUKK2VsZW1lbnQgaW4gdGhlIGFycmF5IGhhcyB0aGUgbWluaW11bSB2YWx1ZSwgdGhlIGxvY2F0aW9uIHJldHVybmVkIGlzCit0aGF0IG9mIHRoZSBmaXJzdCBzdWNoIGVsZW1lbnQgaW4gYXJyYXkgZWxlbWVudCBvcmRlci4gIElmIHRoZSBhcnJheSBoYXMKK3plcm8gc2l6ZSwgb3IgYWxsIG9mIHRoZSBlbGVtZW50cyBvZiA8dmFyPk1BU0s8L3Zhcj4gYXJlIDxjb2RlPi5GQUxTRS48L2NvZGU+LCB0aGVuCit0aGUgcmVzdWx0IGlzIGFuIGFycmF5IG9mIHplcm9lcy4gIFNpbWlsYXJseSwgaWYgPHZhcj5ESU08L3Zhcj4gaXMgc3VwcGxpZWQKK2FuZCBhbGwgb2YgdGhlIGVsZW1lbnRzIG9mIDx2YXI+TUFTSzwvdmFyPiBhbG9uZyBhIGdpdmVuIHJvdyBhcmUgemVybywgdGhlCityZXN1bHQgdmFsdWUgZm9yIHRoYXQgcm93IGlzIHplcm8uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+UkVTVUxUID0gTUlOTE9DKEFSUkFZLCBESU0gWywgTUFTS10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+UkVTVUxUID0gTUlOTE9DKEFSUkFZIFssIE1BU0tdKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QVJSQVk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGFuIGFycmF5IG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gb3IKKzxjb2RlPlJFQUw8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZQorPGNvZGU+SU5URUdFUjwvY29kZT4sIHdpdGggYSB2YWx1ZSBiZXR3ZWVuIG9uZSBhbmQgdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwKK2luY2x1c2l2ZS4gIEl0IG1heSBub3QgYmUgYW4gb3B0aW9uYWwgZHVtbXkgYXJndW1lbnQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5NQVNLPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgdHlwZSA8Y29kZT5MT0dJQ0FMPC9jb2RlPiwKK2FuZCBjb25mb3JtYWJsZSB3aXRoIDx2YXI+QVJSQVk8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+SWYgPHZhcj5ESU08L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmVzdWx0IGlzIGEgcmFuay1vbmUgYXJyYXkgd2l0aCBhIGxlbmd0aAorZXF1YWwgdG8gdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPi4gIElmIDx2YXI+RElNPC92YXI+IGlzIHByZXNlbnQsIHRoZSByZXN1bHQKK2lzIGFuIGFycmF5IHdpdGggYSByYW5rIG9uZSBsZXNzIHRoYW4gdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwgYW5kIGEKK3NpemUgY29ycmVzcG9uZGluZyB0byB0aGUgc2l6ZSBvZiA8dmFyPkFSUkFZPC92YXI+IHdpdGggdGhlIDx2YXI+RElNPC92YXI+CitkaW1lbnNpb24gcmVtb3ZlZC4gIElmIDx2YXI+RElNPC92YXI+IGlzIHByZXNlbnQgYW5kIDx2YXI+QVJSQVk8L3Zhcj4gaGFzIGEgcmFuaworb2Ygb25lLCB0aGUgcmVzdWx0IGlzIGEgc2NhbGFyLiAgSW4gYWxsIGNhc2VzLCB0aGUgcmVzdWx0IGlzIG9mIGRlZmF1bHQKKzxjb2RlPklOVEVHRVI8L2NvZGU+IHR5cGUuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iTUlOLmh0bWwjTUlOIj5NSU48L2E+LCA8YSBocmVmPSJNSU5WQUwuaHRtbCNNSU5WQUwiPk1JTlZBTDwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01JTlZBTC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01JTlZBTC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjODhiNDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTUlOVkFMLmh0bWwKQEAgLTAsMCArMSw5OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TUlOVkFMIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JTkxPQy5odG1sI01JTkxPQyIgdGl0bGU9Ik1JTkxPQyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1PRC5odG1sI01PRCIgdGl0bGU9Ik1PRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNSU5WQUwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTU9ELmh0bWwjTU9EIj5NT0Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSU5MT0MuaHRtbCNNSU5MT0MiPk1JTkxPQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNzYgPGNvZGU+TUlOVkFMPC9jb2RlPiAmbWRhc2g7IE1pbmltdW0gdmFsdWUgb2YgYW4gYXJyYXk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NSU5WQUwtODkwIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1taW5pbXVtLXZhbHVlLTg5MSI+PC9hPjxhIG5hbWU9ImluZGV4LW1pbmltdW0tdmFsdWUtODkyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+RGV0ZXJtaW5lcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgZWxlbWVudHMgaW4gYW4gYXJyYXkgdmFsdWUsIG9yLCBpZgordGhlIDx2YXI+RElNPC92YXI+IGFyZ3VtZW50IGlzIHN1cHBsaWVkLCBkZXRlcm1pbmVzIHRoZSBtaW5pbXVtIHZhbHVlIGFsb25nCitlYWNoIHJvdyBvZiB0aGUgYXJyYXkgaW4gdGhlIDx2YXI+RElNPC92YXI+IGRpcmVjdGlvbi4gIElmIDx2YXI+TUFTSzwvdmFyPiBpcworcHJlc2VudCwgb25seSB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIDx2YXI+TUFTSzwvdmFyPiBpcyA8Y29kZT4uVFJVRS48L2NvZGU+IGFyZQorY29uc2lkZXJlZC4gIElmIHRoZSBhcnJheSBoYXMgemVybyBzaXplLCBvciBhbGwgb2YgdGhlIGVsZW1lbnRzIG9mCis8dmFyPk1BU0s8L3Zhcj4gYXJlIDxjb2RlPi5GQUxTRS48L2NvZGU+LCB0aGVuIHRoZSByZXN1bHQgaXMgPGNvZGU+SFVHRShBUlJBWSk8L2NvZGU+IGlmCis8dmFyPkFSUkFZPC92YXI+IGlzIG51bWVyaWMsIG9yIGEgc3RyaW5nIG9mIDxjb2RlPkNIQVIoMjU1KTwvY29kZT4gY2hhcmFjdGVycyBpZgorPHZhcj5BUlJBWTwvdmFyPiBpcyBvZiBjaGFyYWN0ZXIgdHlwZS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBNSU5WQUwoQVJSQVksIERJTSBbLCBNQVNLXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBNSU5WQUwoQVJSQVkgWywgTUFTS10pPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvcgorPGNvZGU+UkVBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ESU08L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBTaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlCis8Y29kZT5JTlRFR0VSPC9jb2RlPiwgd2l0aCBhIHZhbHVlIGJldHdlZW4gb25lIGFuZCB0aGUgcmFuayBvZiA8dmFyPkFSUkFZPC92YXI+LAoraW5jbHVzaXZlLiAgSXQgbWF5IG5vdCBiZSBhbiBvcHRpb25hbCBkdW1teSBhcmd1bWVudC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk1BU0s8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhbiBhcnJheSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+LAorYW5kIGNvbmZvcm1hYmxlIHdpdGggPHZhcj5BUlJBWTwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5JZiA8dmFyPkRJTTwvdmFyPiBpcyBhYnNlbnQsIG9yIGlmIDx2YXI+QVJSQVk8L3Zhcj4gaGFzIGEgcmFuayBvZiBvbmUsIHRoZSByZXN1bHQKK2lzIGEgc2NhbGFyLiAgSWYgPHZhcj5ESU08L3Zhcj4gaXMgcHJlc2VudCwgdGhlIHJlc3VsdCBpcyBhbiBhcnJheSB3aXRoIGEKK3Jhbmsgb25lIGxlc3MgdGhhbiB0aGUgcmFuayBvZiA8dmFyPkFSUkFZPC92YXI+LCBhbmQgYSBzaXplIGNvcnJlc3BvbmRpbmcgdG8KK3RoZSBzaXplIG9mIDx2YXI+QVJSQVk8L3Zhcj4gd2l0aCB0aGUgPHZhcj5ESU08L3Zhcj4gZGltZW5zaW9uIHJlbW92ZWQuICBJbiBhbGwKK2Nhc2VzLCB0aGUgcmVzdWx0IGlzIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGtpbmQgYXMgPHZhcj5BUlJBWTwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJNSU4uaHRtbCNNSU4iPk1JTjwvYT4sIDxhIGhyZWY9Ik1JTkxPQy5odG1sI01JTkxPQyI+TUlOTE9DPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTU9ELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTU9ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxZjQ3NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NT0QuaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TU9EIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1JTlZBTC5odG1sI01JTlZBTCIgdGl0bGU9Ik1JTlZBTCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1PRFVMTy5odG1sI01PRFVMTyIgdGl0bGU9Ik1PRFVMTyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNT0QiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTU9EVUxPLmh0bWwjTU9EVUxPIj5NT0RVTE88L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNSU5WQUwuaHRtbCNNSU5WQUwiPk1JTlZBTDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xNzcgPGNvZGU+TU9EPC9jb2RlPiAmbWRhc2g7IFJlbWFpbmRlciBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1PRC04OTMiPjwvYT48YSBuYW1lPSJpbmRleC1BTU9ELTg5NCI+PC9hPjxhIG5hbWU9ImluZGV4LURNT0QtODk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVtYWluZGVyLTg5NiI+PC9hPjxhIG5hbWU9ImluZGV4LWRpdmlzaW9uXzAwMmMtcmVtYWluZGVyLTg5NyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPk1PRChBLFApPC9jb2RlPiBjb21wdXRlcyB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBvZiBBIGJ5IFAuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTU9EKEEsIFApPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvciA8Y29kZT5SRUFMPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlA8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGtpbmQgYXMgPHZhcj5BPC92YXI+CithbmQgbm90IGVxdWFsIHRvIHplcm8uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcmVzdWx0IG9mIDxjb2RlPkEgLSAoSU5UKEEvUCkgKiBQKTwvY29kZT4uIFRoZSB0eXBlCithbmQga2luZCBvZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFyZ3VtZW50cy4gVGhlCityZXR1cm5lZCB2YWx1ZSBoYXMgdGhlIHNhbWUgc2lnbiBhcyBBIGFuZCBhIG1hZ25pdHVkZSBsZXNzIHRoYW4gdGhlCittYWduaXR1ZGUgb2YgUC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfbW9kCisgICAgICAgICAgICBwcmludCAqLCBtb2QoMTcsMykKKyAgICAgICAgICAgIHByaW50ICosIG1vZCgxNy41LDUuNSkKKyAgICAgICAgICAgIHByaW50ICosIG1vZCgxNy41ZDAsNS41KQorICAgICAgICAgICAgcHJpbnQgKiwgbW9kKDE3LjUsNS41ZDApCisgICAgICAgICAgCisgICAgICAgICAgICBwcmludCAqLCBtb2QoLTE3LDMpCisgICAgICAgICAgICBwcmludCAqLCBtb2QoLTE3LjUsNS41KQorICAgICAgICAgICAgcHJpbnQgKiwgbW9kKC0xNy41ZDAsNS41KQorICAgICAgICAgICAgcHJpbnQgKiwgbW9kKC0xNy41LDUuNWQwKQorICAgICAgICAgIAorICAgICAgICAgICAgcHJpbnQgKiwgbW9kKDE3LC0zKQorICAgICAgICAgICAgcHJpbnQgKiwgbW9kKDE3LjUsLTUuNSkKKyAgICAgICAgICAgIHByaW50ICosIG1vZCgxNy41ZDAsLTUuNSkKKyAgICAgICAgICAgIHByaW50ICosIG1vZCgxNy41LC01LjVkMCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X21vZAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnRzICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPk1PRChBLFApPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVEVHRVIgQSxQPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SU5URUdFUjwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5BTU9EKEEsUCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIEEsUDwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+RE1PRChBLFApPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBBLFA8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9Ik1PRFVMTy5odG1sI01PRFVMTyI+TU9EVUxPPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTU9EVUxPLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTU9EVUxPLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2MzM4NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NT0RVTE8uaHRtbApAQCAtMCwwICsxLDEwMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TU9EVUxPIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1PRC5odG1sI01PRCIgdGl0bGU9Ik1PRCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1PVkVfMDA1ZkFMTE9DLmh0bWwjTU9WRV8wMDVmQUxMT0MiIHRpdGxlPSJNT1ZFX0FMTE9DIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1PRFVMTyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNT1ZFXzAwNWZBTExPQy5odG1sI01PVkVfMDA1ZkFMTE9DIj5NT1ZFX0FMTE9DPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTU9ELmh0bWwjTU9EIj5NT0Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTc4IDxjb2RlPk1PRFVMTzwvY29kZT4gJm1kYXNoOyBNb2R1bG8gZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NT0RVTE8tODk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW9kdWxvLTg5OSI+PC9hPjxhIG5hbWU9ImluZGV4LWRpdmlzaW9uXzAwMmMtbW9kdWxvLTkwMCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPk1PRFVMTyhBLFApPC9jb2RlPiBjb21wdXRlcyB0aGUgPHZhcj5BPC92YXI+IG1vZHVsbyA8dmFyPlA8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTU9EVUxPKEEsIFApPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvciA8Y29kZT5SRUFMPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlA8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGtpbmQgYXMgPHZhcj5BPC92YXI+LiAKK0l0IHNoYWxsIG5vdCBiZSB6ZXJvLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSB0eXBlIGFuZCBraW5kIG9mIHRoZSByZXN1bHQgYXJlIHRob3NlIG9mIHRoZSBhcmd1bWVudHMuCisgICAgICAgICAgPGRsPgorPGR0PklmIDx2YXI+QTwvdmFyPiBhbmQgPHZhcj5QPC92YXI+IGFyZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+OjxkZD48Y29kZT5NT0RVTE8oQSxQKTwvY29kZT4gaGFzIHRoZSB2YWx1ZSA8dmFyPlI8L3Zhcj4gc3VjaCB0aGF0IDxjb2RlPkE9USpQK1I8L2NvZGU+LCB3aGVyZQorPHZhcj5RPC92YXI+IGlzIGFuIGludGVnZXIgYW5kIDx2YXI+UjwvdmFyPiBpcyBiZXR3ZWVuIDAgKGluY2x1c2l2ZSkgYW5kIDx2YXI+UDwvdmFyPgorKGV4Y2x1c2l2ZSkuIAorPGJyPjxkdD5JZiA8dmFyPkE8L3Zhcj4gYW5kIDx2YXI+UDwvdmFyPiBhcmUgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPjo8ZGQ+PGNvZGU+TU9EVUxPKEEsUCk8L2NvZGU+IGhhcyB0aGUgdmFsdWUgb2YgPGNvZGU+QSAtIEZMT09SIChBIC8gUCkgKiBQPC9jb2RlPi4gCis8L2RsPgorICAgICBUaGUgcmV0dXJuZWQgdmFsdWUgaGFzIHRoZSBzYW1lIHNpZ24gYXMgUCBhbmQgYSBtYWduaXR1ZGUgbGVzcyB0aGFuCit0aGUgbWFnbml0dWRlIG9mIFAuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X21vZHVsbworICAgICAgICAgICAgcHJpbnQgKiwgbW9kdWxvKDE3LDMpCisgICAgICAgICAgICBwcmludCAqLCBtb2R1bG8oMTcuNSw1LjUpCisgICAgICAgICAgCisgICAgICAgICAgICBwcmludCAqLCBtb2R1bG8oLTE3LDMpCisgICAgICAgICAgICBwcmludCAqLCBtb2R1bG8oLTE3LjUsNS41KQorICAgICAgICAgIAorICAgICAgICAgICAgcHJpbnQgKiwgbW9kdWxvKDE3LC0zKQorICAgICAgICAgICAgcHJpbnQgKiwgbW9kdWxvKDE3LjUsLTUuNSkKKyAgICAgICAgICBlbmQgcHJvZ3JhbQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9Ik1PRC5odG1sI01PRCI+TU9EPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTU9WRV8wMDVmQUxMT0MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9NT1ZFXzAwNWZBTExPQy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZmRlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTU9WRV8wMDVmQUxMT0MuaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NT1ZFX0FMTE9DIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1PRFVMTy5odG1sI01PRFVMTyIgdGl0bGU9Ik1PRFVMTyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1WQklUUy5odG1sI01WQklUUyIgdGl0bGU9Ik1WQklUUyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNT1ZFX0FMTE9DIj48L2E+Cis8YSBuYW1lPSJNT1ZFXzAwNWZBTExPQyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNVkJJVFMuaHRtbCNNVkJJVFMiPk1WQklUUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1PRFVMTy5odG1sI01PRFVMTyI+TU9EVUxPPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE3OSA8Y29kZT5NT1ZFX0FMTE9DPC9jb2RlPiAmbWRhc2g7IE1vdmUgYWxsb2NhdGlvbiBmcm9tIG9uZSBvYmplY3QgdG8gYW5vdGhlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LU1PVkVfMDA1ZkFMTE9DLTkwMSI+PC9hPjxhIG5hbWU9ImluZGV4LW1vdmluZy1hbGxvY2F0aW9uLTkwMiI+PC9hPjxhIG5hbWU9ImluZGV4LWFsbG9jYXRpb25fMDAyYy1tb3ZpbmctOTAzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+TU9WRV9BTExPQyhGUk9NLCBUTyk8L2NvZGU+IG1vdmVzIHRoZSBhbGxvY2F0aW9uIGZyb20gPHZhcj5GUk9NPC92YXI+IHRvCis8dmFyPlRPPC92YXI+LiAgPHZhcj5GUk9NPC92YXI+IHdpbGwgYmVjb21lIGRlYWxsb2NhdGVkIGluIHRoZSBwcm9jZXNzLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5QdXJlIHN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBNT1ZFX0FMTE9DKEZST00sIFRPKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkZST008L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj48Y29kZT5BTExPQ0FUQUJMRTwvY29kZT4sIDxjb2RlPklOVEVOVChJTk9VVCk8L2NvZGU+LCBtYXkgYmUKK29mIGFueSB0eXBlIGFuZCBraW5kLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VE88L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPjxjb2RlPkFMTE9DQVRBQkxFPC9jb2RlPiwgPGNvZGU+SU5URU5UKE9VVCk8L2NvZGU+LCBzaGFsbCBiZQorb2YgdGhlIHNhbWUgdHlwZSwga2luZCBhbmQgcmFuayBhcyA8dmFyPkZST008L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+Tm9uZQorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9tb3ZlX2FsbG9jCisgICAgICAgICAgICAgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IGEoOiksIGIoOikKKyAgICAgICAgICAKKyAgICAgICAgICAgICAgYWxsb2NhdGUoYSgzKSkKKyAgICAgICAgICAgICAgYSA9IFsgMSwgMiwgMyBdCisgICAgICAgICAgICAgIGNhbGwgbW92ZV9hbGxvYyhhLCBiKQorICAgICAgICAgICAgICBwcmludCAqLCBhbGxvY2F0ZWQoYSksIGFsbG9jYXRlZChiKQorICAgICAgICAgICAgICBwcmludCAqLCBiCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9tb3ZlX2FsbG9jCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01WQklUUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01WQklUUy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOWYwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTVZCSVRTLmh0bWwKQEAgLTAsMCArMSw4NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TVZCSVRTIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1PVkVfMDA1ZkFMTE9DLmh0bWwjTU9WRV8wMDVmQUxMT0MiIHRpdGxlPSJNT1ZFX0FMTE9DIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTkVBUkVTVC5odG1sI05FQVJFU1QiIHRpdGxlPSJORUFSRVNUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1WQklUUyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJORUFSRVNULmh0bWwjTkVBUkVTVCI+TkVBUkVTVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1PVkVfMDA1ZkFMTE9DLmh0bWwjTU9WRV8wMDVmQUxMT0MiPk1PVkVfQUxMT0M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTgwIDxjb2RlPk1WQklUUzwvY29kZT4gJm1kYXNoOyBNb3ZlIGJpdHMgZnJvbSBvbmUgaW50ZWdlciB0byBhbm90aGVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTVZCSVRTLTkwNCI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHNfMDAyYy1tb3ZlLTkwNSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPk1vdmVzIDx2YXI+TEVOPC92YXI+IGJpdHMgZnJvbSBwb3NpdGlvbnMgPHZhcj5GUk9NUE9TPC92YXI+IHRocm91Z2gKKzxjb2RlPkZST01QT1MrTEVOLTE8L2NvZGU+IG9mIDx2YXI+RlJPTTwvdmFyPiB0byBwb3NpdGlvbnMgPHZhcj5UT1BPUzwvdmFyPiB0aHJvdWdoCis8Y29kZT5UT1BPUytMRU4tMTwvY29kZT4gb2YgPHZhcj5UTzwvdmFyPi4gVGhlIHBvcnRpb24gb2YgYXJndW1lbnQgPHZhcj5UTzwvdmFyPiBub3QKK2FmZmVjdGVkIGJ5IHRoZSBtb3ZlbWVudCBvZiBiaXRzIGlzIHVuY2hhbmdlZC4gVGhlIHZhbHVlcyBvZgorPGNvZGU+RlJPTVBPUytMRU4tMTwvY29kZT4gYW5kIDxjb2RlPlRPUE9TK0xFTi0xPC9jb2RlPiBtdXN0IGJlIGxlc3MgdGhhbgorPGNvZGU+QklUX1NJWkUoRlJPTSk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIHN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBNVkJJVFMoRlJPTSwgRlJPTVBPUywgTEVOLCBUTywgVE9QT1MpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RlJPTTwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5GUk9NUE9TPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkxFTjwvdmFyPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VE88L3Zhcj4gICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4sIG9mIHRoZQorc2FtZSBraW5kIGFzIDx2YXI+RlJPTTwvdmFyPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlRPUE9TPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSUJDTFIuaHRtbCNJQkNMUiI+SUJDTFI8L2E+LCA8YSBocmVmPSJJQlNFVC5odG1sI0lCU0VUIj5JQlNFVDwvYT4sIDxhIGhyZWY9IklCSVRTLmh0bWwjSUJJVFMiPklCSVRTPC9hPiwgPGEgaHJlZj0iSUFORC5odG1sI0lBTkQiPklBTkQ8L2E+LCA8YSBocmVmPSJJT1IuaHRtbCNJT1IiPklPUjwvYT4sIDxhIGhyZWY9IklFT1IuaHRtbCNJRU9SIj5JRU9SPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjIyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTWlzc2luZy1wZXJpb2QtaW4tRk9STUFULXNwZWNpZmljYXRpb25zLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWlzc2luZyBwZXJpb2QgaW4gRk9STUFUIHNwZWNpZmljYXRpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNvbW1hcy1pbi1GT1JNQVQtc3BlY2lmaWNhdGlvbnMuaHRtbCNDb21tYXMtaW4tRk9STUFULXNwZWNpZmljYXRpb25zIiB0aXRsZT0iQ29tbWFzIGluIEZPUk1BVCBzcGVjaWZpY2F0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklfMDAyZk8taXRlbS1saXN0cy5odG1sI0lfMDAyZk8taXRlbS1saXN0cyIgdGl0bGU9IkkvTyBpdGVtIGxpc3RzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1pc3NpbmctcGVyaW9kLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJXzAwMmZPLWl0ZW0tbGlzdHMuaHRtbCNJXzAwMmZPLWl0ZW0tbGlzdHMiPkkvTyBpdGVtIGxpc3RzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29tbWFzLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sI0NvbW1hcy1pbi1GT1JNQVQtc3BlY2lmaWNhdGlvbnMiPkNvbW1hcyBpbiBGT1JNQVQgc3BlY2lmaWNhdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMS42IE1pc3NpbmcgcGVyaW9kIGluIDxjb2RlPkZPUk1BVDwvY29kZT4gc3BlY2lmaWNhdGlvbnM8L2g0PgorCis8cD5UbyBzdXBwb3J0IGxlZ2FjeSBjb2RlcywgR05VIEZvcnRyYW4gYWxsb3dzIG1pc3NpbmcgcGVyaW9kcyBpbiBmb3JtYXQKK3NwZWNpZmljYXRpb25zIGlmIGFuZCBvbmx5IGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9bGVnYWN5PC9zcGFuPjwvc2FtcD4gaXMgZ2l2ZW4gb24gdGhlCitjb21tYW5kIGxpbmUuICBUaGlzIGlzIGNvbnNpZGVyZWQgbm9uLWNvbmZvcm1pbmcgY29kZSBhbmQgaXMKK2Rpc2NvdXJhZ2VkLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIFJFQUwgOjogdmFsdWUKKyAgICAgICAgICAgIFJFQUQoKiwxMCkgdmFsdWUKKyAgICAgMTAgICAgIEZPUk1BVCAoJ0Y0JykKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL01peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNGUwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWl4ZWQtTGFuZ3VhZ2UgUHJvZ3JhbW1pbmcgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFeHRlbnNpb25zLmh0bWwjRXh0ZW5zaW9ucyIgdGl0bGU9IkV4dGVuc2lvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTWl4ZWQtTGFuZ3VhZ2UtUHJvZ3JhbW1pbmciPjwvYT4KKzxhIG5hbWU9Ik1peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkV4dGVuc2lvbnMuaHRtbCNFeHRlbnNpb25zIj5FeHRlbnNpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjcgTWl4ZWQtTGFuZ3VhZ2UgUHJvZ3JhbW1pbmc8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1JbnRlcm9wZXJhYmlsaXR5LTM1NSI+PC9hPjxhIG5hbWU9ImluZGV4LU1peGVkXzAwMmRsYW5ndWFnZS1wcm9ncmFtbWluZy0zNTYiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkludGVyb3BlcmFiaWxpdHktd2l0aC1DLmh0bWwjSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMiPkludGVyb3BlcmFiaWxpdHkgd2l0aCBDPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iR05VLUZvcnRyYW4tQ29tcGlsZXItRGlyZWN0aXZlcy5odG1sI0dOVS1Gb3J0cmFuLUNvbXBpbGVyLURpcmVjdGl2ZXMiPkdOVSBGb3J0cmFuIENvbXBpbGVyIERpcmVjdGl2ZXM8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwjTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbSI+Tm9uLUZvcnRyYW4gTWFpbiBQcm9ncmFtPC9hPgorPC91bD4KKworICAgPHA+VGhpcyBjaGFwdGVyIGlzIGFib3V0IG1peGVkLWxhbmd1YWdlIGludGVyb3BlcmFiaWxpdHksIGJ1dCBhbHNvIGFwcGxpZXMKK2lmIG9uZSBsaW5rcyBGb3J0cmFuIGNvZGUgY29tcGlsZWQgYnkgZGlmZmVyZW50IGNvbXBpbGVycy4gIEluIG1vc3QgY2FzZXMsCit1c2Ugb2YgdGhlIEMgQmluZGluZyBmZWF0dXJlcyBvZiB0aGUgRm9ydHJhbiAyMDAzIHN0YW5kYXJkIGlzIHN1ZmZpY2llbnQsCithbmQgdGhlaXIgdXNlIGlzIGhpZ2hseSByZWNvbW1lbmRlZC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05FQVJFU1QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9ORUFSRVNULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1Mjc3MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9ORUFSRVNULmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TkVBUkVTVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNVkJJVFMuaHRtbCNNVkJJVFMiIHRpdGxlPSJNVkJJVFMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJORVdfMDA1ZkxJTkUuaHRtbCNORVdfMDA1ZkxJTkUiIHRpdGxlPSJORVdfTElORSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJORUFSRVNUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik5FV18wMDVmTElORS5odG1sI05FV18wMDVmTElORSI+TkVXX0xJTkU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNVkJJVFMuaHRtbCNNVkJJVFMiPk1WQklUUzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xODEgPGNvZGU+TkVBUkVTVDwvY29kZT4gJm1kYXNoOyBOZWFyZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTkVBUkVTVC05MDYiPjwvYT48YSBuYW1lPSJpbmRleC1yZWFsLW51bWJlcl8wMDJjLW5lYXJlc3QtZGlmZmVyZW50LTkwNyI+PC9hPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtbmVhcmVzdC1kaWZmZXJlbnQtOTA4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+TkVBUkVTVChYLCBTKTwvY29kZT4gcmV0dXJucyB0aGUgcHJvY2Vzc29yLXJlcHJlc2VudGFibGUgbnVtYmVyIG5lYXJlc3QKK3RvIDxjb2RlPlg8L2NvZGU+IGluIHRoZSBkaXJlY3Rpb24gaW5kaWNhdGVkIGJ5IHRoZSBzaWduIG9mIDxjb2RlPlM8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IE5FQVJFU1QoWCwgUyk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPiBhbmQKK25vdCBlcXVhbCB0byB6ZXJvLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyA8Y29kZT5YPC9jb2RlPi4gSWYgPGNvZGU+UzwvY29kZT4gaXMKK3Bvc2l0aXZlLCA8Y29kZT5ORUFSRVNUPC9jb2RlPiByZXR1cm5zIHRoZSBwcm9jZXNzb3ItcmVwcmVzZW50YWJsZSBudW1iZXIKK2dyZWF0ZXIgdGhhbiA8Y29kZT5YPC9jb2RlPiBhbmQgbmVhcmVzdCB0byBpdC4gSWYgPGNvZGU+UzwvY29kZT4gaXMgbmVnYXRpdmUsCis8Y29kZT5ORUFSRVNUPC9jb2RlPiByZXR1cm5zIHRoZSBwcm9jZXNzb3ItcmVwcmVzZW50YWJsZSBudW1iZXIgc21hbGxlciB0aGFuCis8Y29kZT5YPC9jb2RlPiBhbmQgbmVhcmVzdCB0byBpdC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfbmVhcmVzdAorICAgICAgICAgICAgcmVhbCA6OiB4LCB5CisgICAgICAgICAgICB4ID0gbmVhcmVzdCg0Mi4wLCAxLjApCisgICAgICAgICAgICB5ID0gbmVhcmVzdCg0Mi4wLCAtMS4wKQorICAgICAgICAgICAgd3JpdGUgKCosIigzKEcyMC4xNSkpIikgeCwgeSwgeCAtIHkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X25lYXJlc3QKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTkVXXzAwNWZMSU5FLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTkVXXzAwNWZMSU5FLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0N2ViOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9ORVdfMDA1ZkxJTkUuaHRtbApAQCAtMCwwICsxLDg1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5ORVdfTElORSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJORUFSRVNULmh0bWwjTkVBUkVTVCIgdGl0bGU9Ik5FQVJFU1QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJOSU5ULmh0bWwjTklOVCIgdGl0bGU9Ik5JTlQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTkVXX0xJTkUiPjwvYT4KKzxhIG5hbWU9Ik5FV18wMDVmTElORSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJOSU5ULmh0bWwjTklOVCI+TklOVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik5FQVJFU1QuaHRtbCNORUFSRVNUIj5ORUFSRVNUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE4MiA8Y29kZT5ORVdfTElORTwvY29kZT4gJm1kYXNoOyBOZXcgbGluZSBjaGFyYWN0ZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1ORVdfMDA1ZkxJTkUtOTA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbmV3bGluZS05MTAiPjwvYT48YSBuYW1lPSJpbmRleC1vdXRwdXRfMDAyYy1uZXdsaW5lLTkxMSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPk5FV19MSU5FKEMpPC9jb2RlPiByZXR1cm5zIHRoZSBuZXctbGluZSBjaGFyYWN0ZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTkVXX0xJTkUoQyk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5DPC92YXI+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgYXJndW1lbnQgc2hhbGwgYmUgYSBzY2FsYXIgb3IgYXJyYXkgb2YgdGhlCit0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+UmV0dXJucyBhIDx2YXI+Q0hBUkFDVEVSPC92YXI+IHNjYWxhciBvZiBsZW5ndGggb25lIHdpdGggdGhlIG5ldy1saW5lIGNoYXJhY3RlciBvZgordGhlIHNhbWUga2luZCBhcyBwYXJhbWV0ZXIgPHZhcj5DPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gbmV3bGluZQorICAgICAgICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgICAgICAgd3JpdGUoKiwnKEEpJykgJ1RoaXMgaXMgcmVjb3JkIDEuJy8vTkVXX0xJTkUoJ0EnKS8vJ1RoaXMgaXMgcmVjb3JkIDIuJworICAgICAgICAgIGVuZCBwcm9ncmFtIG5ld2xpbmUKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTklOVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05JTlQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Y4MWQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05JTlQuaHRtbApAQCAtMCwwICsxLDk3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5OSU5UIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik5FV18wMDVmTElORS5odG1sI05FV18wMDVmTElORSIgdGl0bGU9Ik5FV19MSU5FIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTk9STTIuaHRtbCNOT1JNMiIgdGl0bGU9Ik5PUk0yIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5JTlQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTk9STTIuaHRtbCNOT1JNMiI+Tk9STTI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJORVdfMDA1ZkxJTkUuaHRtbCNORVdfMDA1ZkxJTkUiPk5FV19MSU5FPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE4MyA8Y29kZT5OSU5UPC9jb2RlPiAmbWRhc2g7IE5lYXJlc3Qgd2hvbGUgbnVtYmVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTklOVC05MTIiPjwvYT48YSBuYW1lPSJpbmRleC1JRE5JTlQtOTEzIj48L2E+PGEgbmFtZT0iaW5kZXgtcm91bmRpbmdfMDAyYy1uZWFyZXN0LXdob2xlLW51bWJlci05MTQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5OSU5UKEEpPC9jb2RlPiByb3VuZHMgaXRzIGFyZ3VtZW50IHRvIHRoZSBuZWFyZXN0IHdob2xlIG51bWJlci4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlciwgd2l0aCA8dmFyPktJTkQ8L3Zhcj4gYXJndW1lbnQgRm9ydHJhbiA5MCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTklOVChBIFssIEtJTkRdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkE8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCBzaGFsbCBiZSA8Y29kZT5SRUFMPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPktJTkQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgQW4gPGNvZGU+SU5URUdFUjwvY29kZT4gaW5pdGlhbGl6YXRpb24KK2V4cHJlc3Npb24gaW5kaWNhdGluZyB0aGUga2luZCBwYXJhbWV0ZXIgb2YgdGhlIHJlc3VsdC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5SZXR1cm5zIDx2YXI+QTwvdmFyPiB3aXRoIHRoZSBmcmFjdGlvbmFsIHBvcnRpb24gb2YgaXRzIG1hZ25pdHVkZSBlbGltaW5hdGVkIGJ5Cityb3VuZGluZyB0byB0aGUgbmVhcmVzdCB3aG9sZSBudW1iZXIgYW5kIHdpdGggaXRzIHNpZ24gcHJlc2VydmVkLAorY29udmVydGVkIHRvIGFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9mIHRoZSBkZWZhdWx0IGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X25pbnQKKyAgICAgICAgICAgIHJlYWwoNCkgeDQKKyAgICAgICAgICAgIHJlYWwoOCkgeDgKKyAgICAgICAgICAgIHg0ID0gMS4yMzRFMF80CisgICAgICAgICAgICB4OCA9IDQuMzIxXzgKKyAgICAgICAgICAgIHByaW50ICosIG5pbnQoeDQpLCBpZG5pbnQoeDgpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9uaW50Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPlJldHVybiBUeXBlICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPk5JTlQoQSk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgQTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+SU5URUdFUjwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JRE5JTlQoQSk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIEE8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVEVHRVI8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQ0VJTElORy5odG1sI0NFSUxJTkciPkNFSUxJTkc8L2E+LCA8YSBocmVmPSJGTE9PUi5odG1sI0ZMT09SIj5GTE9PUjwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05PUk0yLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTk9STTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODYxYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05PUk0yLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Tk9STTIgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTklOVC5odG1sI05JTlQiIHRpdGxlPSJOSU5UIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTk9ULmh0bWwjTk9UIiB0aXRsZT0iTk9UIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5PUk0yIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik5PVC5odG1sI05PVCI+Tk9UPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTklOVC5odG1sI05JTlQiPk5JTlQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTg0IDxjb2RlPk5PUk0yPC9jb2RlPiAmbWRhc2g7IEV1Y2xpZGVhbiB2ZWN0b3Igbm9ybXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1OT1JNMi05MTUiPjwvYT48YSBuYW1lPSJpbmRleC1FdWNsaWRlYW4tdmVjdG9yLW5vcm0tOTE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtTDItdmVjdG9yLW5vcm0tOTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbm9ybV8wMDJjLUV1Y2xpZGVhbi05MTgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5DYWxjdWxhdGVzIHRoZSBFdWNsaWRlYW4gdmVjdG9yIG5vcm0gKExfMiBub3JtKSBvZgorb2YgPHZhcj5BUlJBWTwvdmFyPiBhbG9uZyBkaW1lbnNpb24gPHZhcj5ESU08L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBOT1JNMihBUlJBWVssIERJTV0pPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgdHlwZSA8Y29kZT5SRUFMPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ESU08L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlCis8Y29kZT5JTlRFR0VSPC9jb2RlPiB3aXRoIGEgdmFsdWUgaW4gdGhlIHJhbmdlIGZyb20gMSB0byBuLCB3aGVyZSBuCitlcXVhbHMgdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmVzdWx0IGlzIG9mIHRoZSBzYW1lIHR5cGUgYXMgPHZhcj5BUlJBWTwvdmFyPi4KKworICAgICA8cD5JZiA8dmFyPkRJTTwvdmFyPiBpcyBhYnNlbnQsIGEgc2NhbGFyIHdpdGggdGhlIHNxdWFyZSByb290IG9mIHRoZSBzdW0gb2YgYWxsCitlbGVtZW50cyBpbiA8dmFyPkFSUkFZPC92YXI+IHNxdWFyZWQgIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGFuIGFycmF5IG9mCityYW5rIG4tMSwgd2hlcmUgbiBlcXVhbHMgdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwgYW5kIGEKK3NoYXBlIHNpbWlsYXIgdG8gdGhhdCBvZiA8dmFyPkFSUkFZPC92YXI+IHdpdGggZGltZW5zaW9uIDx2YXI+RElNPC92YXI+IGRyb3BwZWQKK2lzIHJldHVybmVkLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9zdW0KKyAgICAgICAgICAgIFJFQUwgOjogeCg1KSA9IFsgcmVhbCA6OiAxLCAyLCAzLCA0LCA1IF0KKyAgICAgICAgICAgIHByaW50ICosIE5PUk0yKHgpICAhID0gc3FydCg1NS4pIH4gNy40MTYKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9OT1QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9OT1QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmY0NDZjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05PVC5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk5PVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJOT1JNMi5odG1sI05PUk0yIiB0aXRsZT0iTk9STTIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJOVUxMLmh0bWwjTlVMTCIgdGl0bGU9Ik5VTEwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTk9UIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik5VTEwuaHRtbCNOVUxMIj5OVUxMPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTk9STTIuaHRtbCNOT1JNMiI+Tk9STTI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTg1IDxjb2RlPk5PVDwvY29kZT4gJm1kYXNoOyBMb2dpY2FsIG5lZ2F0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTk9ULTkxOSI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHNfMDAyYy1uZWdhdGUtOTIwIj48L2E+PGEgbmFtZT0iaW5kZXgtYml0d2lzZS1sb2dpY2FsLW5vdC05MjEiPjwvYT48YSBuYW1lPSJpbmRleC1sb2dpY2FsLW5vdF8wMDJjLWJpdHdpc2UtOTIyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+Tk9UPC9jb2RlPiByZXR1cm5zIHRoZSBiaXR3aXNlIEJvb2xlYW4gaW52ZXJzZSBvZiA8dmFyPkk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTk9UKEkpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB0eXBlIGlzIDxjb2RlPklOVEVHRVI8L2NvZGU+LCBvZiB0aGUgc2FtZSBraW5kIGFzIHRoZQorYXJndW1lbnQuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSUFORC5odG1sI0lBTkQiPklBTkQ8L2E+LCA8YSBocmVmPSJJRU9SLmh0bWwjSUVPUiI+SUVPUjwvYT4sIDxhIGhyZWY9IklPUi5odG1sI0lPUiI+SU9SPC9hPiwgPGEgaHJlZj0iSUJJVFMuaHRtbCNJQklUUyI+SUJJVFM8L2E+LCA8YSBocmVmPSJJQlNFVC5odG1sI0lCU0VUIj5JQlNFVDwvYT4sIDxhIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiPklCQ0xSPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTlVMTC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05VTEwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTEyYWJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05VTEwuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5OVUxMIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik5PVC5odG1sI05PVCIgdGl0bGU9Ik5PVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik5VTV8wMDVmSU1BR0VTLmh0bWwjTlVNXzAwNWZJTUFHRVMiIHRpdGxlPSJOVU1fSU1BR0VTIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5VTEwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTlVNXzAwNWZJTUFHRVMuaHRtbCNOVU1fMDA1ZklNQUdFUyI+TlVNX0lNQUdFUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik5PVC5odG1sI05PVCI+Tk9UPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE4NiA8Y29kZT5OVUxMPC9jb2RlPiAmbWRhc2g7IEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBkaXNhc3NvY2lhdGVkIHBvaW50ZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1OVUxMLTkyMyI+PC9hPjxhIG5hbWU9ImluZGV4LXBvaW50ZXJfMDAyYy1zdGF0dXMtOTI0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcG9pbnRlcl8wMDJjLWRpc2Fzc29jaWF0ZWQtOTI1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyBhIGRpc2Fzc29jaWF0ZWQgcG9pbnRlci4KKworICAgICA8cD5JZiA8dmFyPk1PTEQ8L3Zhcj4gaXMgcHJlc2VudCwgYSBkaXNhc3NvY2lhdGVkIHBvaW50ZXIgb2YgdGhlIHNhbWUgdHlwZSBpcworcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgdHlwZSBpcyBkZXRlcm1pbmVkIGJ5IGNvbnRleHQuCisKKyAgICAgPHA+SW4gRm9ydHJhbiA5NSwgPHZhcj5NT0xEPC92YXI+IGlzIG9wdGlvbmFsLiBQbGVhc2Ugbm90ZSB0aGF0IEZvcnRyYW4gMjAwMworaW5jbHVkZXMgY2FzZXMgd2hlcmUgaXQgaXMgcmVxdWlyZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlBUUiA9Jmd0OyBOVUxMKFtNT0xEXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5NT0xEPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIGEgcG9pbnRlciBvZiBhbnkgYXNzb2NpYXRpb24KK3N0YXR1cyBhbmQgb2YgYW55IHR5cGUuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+QSBkaXNhc3NvY2lhdGVkIHBvaW50ZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUkVBTCwgUE9JTlRFUiwgRElNRU5TSU9OKDopIDo6IFZFQyA9Jmd0OyBOVUxMICgpCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQVNTT0NJQVRFRC5odG1sI0FTU09DSUFURUQiPkFTU09DSUFURUQ8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTlVNXzAwNWZJTUFHRVMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9OVU1fMDA1ZklNQUdFUy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MjgzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vTlVNXzAwNWZJTUFHRVMuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5OVU1fSU1BR0VTIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik5VTEwuaHRtbCNOVUxMIiB0aXRsZT0iTlVMTCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik9SLmh0bWwjT1IiIHRpdGxlPSJPUiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJOVU1fSU1BR0VTIj48L2E+Cis8YSBuYW1lPSJOVU1fMDA1ZklNQUdFUyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPUi5odG1sI09SIj5PUjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik5VTEwuaHRtbCNOVUxMIj5OVUxMPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE4NyA8Y29kZT5OVU1fSU1BR0VTPC9jb2RlPiAmbWRhc2g7IEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGltYWdlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LU5VTV8wMDVmSU1BR0VTLTkyNiI+PC9hPjxhIG5hbWU9ImluZGV4LWNvYXJyYXlfMDAyYy1fMDA0MGNvZGVfMDA3Yk5VTV8wMDVmSU1BR0VTXzAwN2QtOTI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW1hZ2VzXzAwMmMtbnVtYmVyLW9mLTkyOCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJldHVybnMgdGhlIG51bWJlciBvZiBpbWFnZXMuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gTlVNX0lNQUdFUygpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OiBOb25lLgorPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlNjYWxhciBkZWZhdWx0LWtpbmQgaW50ZWdlci4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBJTlRFR0VSIDo6IHZhbHVlWypdCisgICAgICAgICAgSU5URUdFUiA6OiBpCisgICAgICAgICAgdmFsdWUgPSBUSElTX0lNQUdFKCkKKyAgICAgICAgICBTWU5DIEFMTAorICAgICAgICAgIElGIChUSElTX0lNQUdFKCkgPT0gMSkgVEhFTgorICAgICAgICAgICAgRE8gaSA9IDEsIE5VTV9JTUFHRVMoKQorICAgICAgICAgICAgICBXUklURSgqLCcoMihhLGkwKSknKSAndmFsdWVbJywgaSwgJ10gaXMgJywgdmFsdWVbaV0KKyAgICAgICAgICAgIEVORCBETworICAgICAgICAgIEVORCBJRgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlRISVNfMDA1ZklNQUdFLmh0bWwjVEhJU18wMDVmSU1BR0UiPlRISVNfSU1BR0U8L2E+LCA8YSBocmVmPSJJTUFHRV8wMDVmSU5ERVguaHRtbCNJTUFHRV8wMDVmSU5ERVgiPklNQUdFX0lOREVYPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL05vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Ob25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiYWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Ob25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Tm9uLUZvcnRyYW4gTWFpbiBQcm9ncmFtIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZy5odG1sI01peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZyIgdGl0bGU9Ik1peGVkLUxhbmd1YWdlIFByb2dyYW1taW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iR05VLUZvcnRyYW4tQ29tcGlsZXItRGlyZWN0aXZlcy5odG1sI0dOVS1Gb3J0cmFuLUNvbXBpbGVyLURpcmVjdGl2ZXMiIHRpdGxlPSJHTlUgRm9ydHJhbiBDb21waWxlciBEaXJlY3RpdmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik5vbi1Gb3J0cmFuLU1haW4tUHJvZ3JhbSI+PC9hPgorPGEgbmFtZT0iTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbSI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdOVS1Gb3J0cmFuLUNvbXBpbGVyLURpcmVjdGl2ZXMuaHRtbCNHTlUtRm9ydHJhbi1Db21waWxlci1EaXJlY3RpdmVzIj5HTlUgRm9ydHJhbiBDb21waWxlciBEaXJlY3RpdmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwjTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nIj5NaXhlZC1MYW5ndWFnZSBQcm9ncmFtbWluZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMyBOb24tRm9ydHJhbiBNYWluIFByb2dyYW08L2gzPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZhcmdzLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZhcmdzIj5fZ2ZvcnRyYW5fc2V0X2FyZ3M8L2E+OiAgU2F2ZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMiPl9nZm9ydHJhbl9zZXRfb3B0aW9uczwvYT46ICBTZXQgbGlicmFyeSBvcHRpb24gZmxhZ3MKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydC5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydCI+X2dmb3J0cmFuX3NldF9jb252ZXJ0PC9hPjogIFNldCBlbmRpYW4gY29udmVyc2lvbgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZyZWNvcmRfMDA1Zm1hcmtlci5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXIiPl9nZm9ydHJhbl9zZXRfcmVjb3JkX21hcmtlcjwvYT46ICBTZXQgbGVuZ3RoIG9mIHJlY29yZCBtYXJrZXJzCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmZwZS5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmZnBlIj5fZ2ZvcnRyYW5fc2V0X2ZwZTwvYT46ICBTZXQgd2hlbiBhIEZsb2F0aW5nIFBvaW50IEV4Y2VwdGlvbiBzaG91bGQgYmUgcmFpc2VkCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm1heF8wMDVmc3VicmVjb3JkXzAwNWZsZW5ndGguaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm1heF8wMDVmc3VicmVjb3JkXzAwNWZsZW5ndGgiPl9nZm9ydHJhbl9zZXRfbWF4X3N1YnJlY29yZF9sZW5ndGg8L2E+OiAgU2V0IHN1YnJlY29yZCBsZW5ndGgKKzwvdWw+CisKKzxwPkV2ZW4gaWYgeW91IGFyZSBkb2luZyBtaXhlZC1sYW5ndWFnZSBwcm9ncmFtbWluZywgaXQgaXMgdmVyeQorbGlrZWx5IHRoYXQgeW91IGRvIG5vdCBuZWVkIHRvIGtub3cgb3IgdXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzCitzZWN0aW9uLiAgU2luY2UgaXQgaXMgYWJvdXQgdGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiBHTlUgRm9ydHJhbiwKK2l0IG1heSBhbHNvIGNoYW5nZSBpbiBHQ0MgbWlub3IgcmVsZWFzZXMuCisKKyAgIDxwPldoZW4geW91IGNvbXBpbGUgYSA8Y29kZT5QUk9HUkFNPC9jb2RlPiB3aXRoIEdOVSBGb3J0cmFuLCBhIGZ1bmN0aW9uCit3aXRoIHRoZSBuYW1lIDxjb2RlPm1haW48L2NvZGU+IChpbiB0aGUgc3ltYm9sIHRhYmxlIG9mIHRoZSBvYmplY3QgZmlsZSkKK2lzIGdlbmVyYXRlZCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGxpYmdmb3J0cmFuIGxpYnJhcnkgYW5kIHRoZW4KK2NhbGxzIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aGljaCB1c2VzIHRoZSBuYW1lIDxjb2RlPk1BSU5fXzwvY29kZT4sIGZvcgoraGlzdG9yaWMgcmVhc29ucy4gIElmIHlvdSBsaW5rIEdOVSBGb3J0cmFuIGNvbXBpbGVkIHByb2NlZHVyZXMKK3RvLCBlLmcuLCBhIEMgb3IgQysrIHByb2dyYW0gb3IgdG8gYSBGb3J0cmFuIHByb2dyYW0gY29tcGlsZWQgYnkKK2EgZGlmZmVyZW50IGNvbXBpbGVyLCB0aGUgbGliZ2ZvcnRyYW4gbGlicmFyeSBpcyBub3QgaW5pdGlhbGl6ZWQKK2FuZCB0aHVzIGEgZmV3IGludHJpbnNpYyBwcm9jZWR1cmVzIGRvIG5vdCB3b3JrIHByb3Blcmx5LCBlLmcuIAordGhvc2UgZm9yIG9idGFpbmluZyB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKworICAgPHA+VGhlcmVmb3JlLCBpZiB5b3VyIDxjb2RlPlBST0dSQU08L2NvZGU+IGlzIG5vdCBjb21waWxlZCB3aXRoCitHTlUgRm9ydHJhbiBhbmQgdGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVkIHByb2NlZHVyZXMgcmVxdWlyZQoraW50cmluc2ljcyByZWx5aW5nIG9uIHRoZSBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLCB5b3UgbmVlZCB0bworaW5pdGlhbGl6ZSB0aGUgbGlicmFyeSB5b3Vyc2VsZi4gIFVzaW5nIHRoZSBkZWZhdWx0IG9wdGlvbnMsCitnZm9ydHJhbiBjYWxscyA8Y29kZT5fZ2ZvcnRyYW5fc2V0X2FyZ3M8L2NvZGU+IGFuZAorPGNvZGU+X2dmb3J0cmFuX3NldF9vcHRpb25zPC9jb2RlPi4gIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZm9ybWVyCitpcyBuZWVkZWQgaWYgdGhlIGNhbGxlZCBwcm9jZWR1cmVzIGFjY2VzcyB0aGUgY29tbWFuZCBsaW5lCisoYW5kIGZvciBiYWNrdHJhY2luZyk7IHRoZSBsYXR0ZXIgc2V0cyBzb21lIGZsYWdzIGJhc2VkIG9uIHRoZQorc3RhbmRhcmQgY2hvc2VuIG9yIHRvIGVuYWJsZSBiYWNrdHJhY2luZy4gIEluIHR5cGljYWwgcHJvZ3JhbXMsCitpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwgYW55IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgorCisgICA8cD5JZiB5b3VyIDxjb2RlPlBST0dSQU08L2NvZGU+IGlzIGNvbXBpbGVkIHdpdGggR05VIEZvcnRyYW4sIHlvdSBzaGFsbAorbm90IGNhbGwgYW55IG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLiAgVGhlIGxpYmdmb3J0cmFuCitpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIHNob3duIGluIEMgc3ludGF4IGJ1dCB1c2luZyBDCitiaW5kaW5ncyB0aGV5IGFyZSBhbHNvIGFjY2Vzc2libGUgZnJvbSBGb3J0cmFuLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT1IuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9PUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMmQ5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT1IuaHRtbApAQCAtMCwwICsxLDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PUiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJOVU1fMDA1ZklNQUdFUy5odG1sI05VTV8wMDVmSU1BR0VTIiB0aXRsZT0iTlVNX0lNQUdFUyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlBBQ0suaHRtbCNQQUNLIiB0aXRsZT0iUEFDSyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPUiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQQUNLLmh0bWwjUEFDSyI+UEFDSzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik5VTV8wMDVmSU1BR0VTLmh0bWwjTlVNXzAwNWZJTUFHRVMiPk5VTV9JTUFHRVM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTg4IDxjb2RlPk9SPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgbG9naWNhbCBPUjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LU9SLTkyOSI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHdpc2UtbG9naWNhbC1vci05MzAiPjwvYT48YSBuYW1lPSJpbmRleC1sb2dpY2FsLW9yXzAwMmMtYml0d2lzZS05MzEiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5CaXR3aXNlIGxvZ2ljYWwgPGNvZGU+T1I8L2NvZGU+LgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIHJvdXRpbmUgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKK0dOVSBGb3J0cmFuIDc3LiAgRm9yIGludGVnZXIgYXJndW1lbnRzLCBwcm9ncmFtbWVycyBzaG91bGQgY29uc2lkZXIKK3RoZSB1c2Ugb2YgdGhlIDxhIGhyZWY9IklPUi5odG1sI0lPUiI+SU9SPC9hPiBpbnRyaW5zaWMgZGVmaW5lZCBieSB0aGUgRm9ydHJhbiBzdGFuZGFyZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gT1IoSSwgSik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSBlaXRoZXIgYSBzY2FsYXIgPGNvZGU+SU5URUdFUjwvY29kZT4KK3R5cGUgb3IgYSBzY2FsYXIgPGNvZGU+TE9HSUNBTDwvY29kZT4gdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPko8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB0eXBlIG9mIDx2YXI+SjwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHR5cGUgaXMgZWl0aGVyIGEgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9yIGEgc2NhbGFyCis8Y29kZT5MT0dJQ0FMPC9jb2RlPi4gIElmIHRoZSBraW5kIHR5cGUgcGFyYW1ldGVycyBkaWZmZXIsIHRoZW4gdGhlCitzbWFsbGVyIGtpbmQgdHlwZSBpcyBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byBsYXJnZXIga2luZCwgYW5kIHRoZQorcmV0dXJuIGhhcyB0aGUgbGFyZ2VyIGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X29yCisgICAgICAgICAgICBMT0dJQ0FMIDo6IFQgPSAuVFJVRS4sIEYgPSAuRkFMU0UuCisgICAgICAgICAgICBJTlRFR0VSIDo6IGEsIGIKKyAgICAgICAgICAgIERBVEEgYSAvIFonRicgLywgYiAvIFonMycgLworICAgICAgICAgIAorICAgICAgICAgICAgV1JJVEUgKCosKikgT1IoVCwgVCksIE9SKFQsIEYpLCBPUihGLCBUKSwgT1IoRiwgRikKKyAgICAgICAgICAgIFdSSVRFICgqLCopIE9SKGEsIGIpCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD5Gb3J0cmFuIDk1IGVsZW1lbnRhbCBmdW5jdGlvbjogPGEgaHJlZj0iSU9SLmh0bWwjSU9SIj5JT1I8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT2xkXzAwMmRzdHlsZS1raW5kLXNwZWNpZmljYXRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT2xkXzAwMmRzdHlsZS1raW5kLXNwZWNpZmljYXRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjMTMzMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9PbGRfMDAyZHN0eWxlLWtpbmQtc3BlY2lmaWNhdGlvbnMuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PbGQtc3R5bGUga2luZCBzcGVjaWZpY2F0aW9ucyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiIgdGl0bGU9IkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPbGRfMDAyZHN0eWxlLXZhcmlhYmxlLWluaXRpYWxpemF0aW9uLmh0bWwjT2xkXzAwMmRzdHlsZS12YXJpYWJsZS1pbml0aWFsaXphdGlvbiIgdGl0bGU9Ik9sZC1zdHlsZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPbGQtc3R5bGUta2luZC1zcGVjaWZpY2F0aW9ucyI+PC9hPgorPGEgbmFtZT0iT2xkXzAwMmRzdHlsZS1raW5kLXNwZWNpZmljYXRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9sZF8wMDJkc3R5bGUtdmFyaWFibGUtaW5pdGlhbGl6YXRpb24uaHRtbCNPbGRfMDAyZHN0eWxlLXZhcmlhYmxlLWluaXRpYWxpemF0aW9uIj5PbGQtc3R5bGUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMS4xIE9sZC1zdHlsZSBraW5kIHNwZWNpZmljYXRpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgta2luZF8wMDJjLW9sZF8wMDJkc3R5bGUtMzMxIj48L2E+CitHTlUgRm9ydHJhbiBhbGxvd3Mgb2xkLXN0eWxlIGtpbmQgc3BlY2lmaWNhdGlvbnMgaW4gZGVjbGFyYXRpb25zLiAgVGhlc2UKK2xvb2sgbGlrZToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICBUWVBFU1BFQypzaXplIHgseSx6Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+d2hlcmUgPGNvZGU+VFlQRVNQRUM8L2NvZGU+IGlzIGEgYmFzaWMgdHlwZSAoPGNvZGU+SU5URUdFUjwvY29kZT4sIDxjb2RlPlJFQUw8L2NvZGU+LAorZXRjLiksIGFuZCB3aGVyZSA8Y29kZT5zaXplPC9jb2RlPiBpcyBhIGJ5dGUgY291bnQgY29ycmVzcG9uZGluZyB0byB0aGUKK3N0b3JhZ2Ugc2l6ZSBvZiBhIHZhbGlkIGtpbmQgZm9yIHRoYXQgdHlwZS4gIChGb3IgPGNvZGU+Q09NUExFWDwvY29kZT4KK3ZhcmlhYmxlcywgPGNvZGU+c2l6ZTwvY29kZT4gaXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHJlYWwgYW5kIGltYWdpbmFyeQorcGFydHMuKSAgVGhlIHN0YXRlbWVudCB0aGVuIGRlY2xhcmVzIDxjb2RlPng8L2NvZGU+LCA8Y29kZT55PC9jb2RlPiBhbmQgPGNvZGU+ejwvY29kZT4gdG8KK2JlIG9mIHR5cGUgPGNvZGU+VFlQRVNQRUM8L2NvZGU+IHdpdGggdGhlIGFwcHJvcHJpYXRlIGtpbmQuICBUaGlzIGlzCitlcXVpdmFsZW50IHRvIHRoZSBzdGFuZGFyZC1jb25mb3JtaW5nIGRlY2xhcmF0aW9uCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgVFlQRVNQRUMoaykgeCx5LHoKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij53aGVyZSA8Y29kZT5rPC9jb2RlPiBpcyB0aGUga2luZCBwYXJhbWV0ZXIgc3VpdGFibGUgZm9yIHRoZSBpbnRlbmRlZCBwcmVjaXNpb24uICBBcwora2luZCBwYXJhbWV0ZXJzIGFyZSBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQsIHVzZSB0aGUgPGNvZGU+S0lORDwvY29kZT4sCis8Y29kZT5TRUxFQ1RFRF9JTlRfS0lORDwvY29kZT4gYW5kIDxjb2RlPlNFTEVDVEVEX1JFQUxfS0lORDwvY29kZT4gaW50cmluc2ljcyB0byByZXRyaWV2ZQordGhlIGNvcnJlY3QgdmFsdWUsIGZvciBpbnN0YW5jZSA8Y29kZT5SRUFMKjggeDwvY29kZT4gY2FuIGJlIHJlcGxhY2VkIGJ5OgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIElOVEVHRVIsIFBBUkFNRVRFUiA6OiBkYmwgPSBLSU5EKDEuMGQwKQorICAgICBSRUFMKEtJTkQ9ZGJsKSA6OiB4Cis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9PbGRfMDAyZHN0eWxlLXZhcmlhYmxlLWluaXRpYWxpemF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT2xkXzAwMmRzdHlsZS12YXJpYWJsZS1pbml0aWFsaXphdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmI4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT2xkXzAwMmRzdHlsZS12YXJpYWJsZS1pbml0aWFsaXphdGlvbi5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk9sZC1zdHlsZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiIgdGl0bGU9IkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPbGRfMDAyZHN0eWxlLWtpbmQtc3BlY2lmaWNhdGlvbnMuaHRtbCNPbGRfMDAyZHN0eWxlLWtpbmQtc3BlY2lmaWNhdGlvbnMiIHRpdGxlPSJPbGQtc3R5bGUga2luZCBzcGVjaWZpY2F0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkV4dGVuc2lvbnMtdG8tbmFtZWxpc3QuaHRtbCNFeHRlbnNpb25zLXRvLW5hbWVsaXN0IiB0aXRsZT0iRXh0ZW5zaW9ucyB0byBuYW1lbGlzdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPbGQtc3R5bGUtdmFyaWFibGUtaW5pdGlhbGl6YXRpb24iPjwvYT4KKzxhIG5hbWU9Ik9sZF8wMDJkc3R5bGUtdmFyaWFibGUtaW5pdGlhbGl6YXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXh0ZW5zaW9ucy10by1uYW1lbGlzdC5odG1sI0V4dGVuc2lvbnMtdG8tbmFtZWxpc3QiPkV4dGVuc2lvbnMgdG8gbmFtZWxpc3Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPbGRfMDAyZHN0eWxlLWtpbmQtc3BlY2lmaWNhdGlvbnMuaHRtbCNPbGRfMDAyZHN0eWxlLWtpbmQtc3BlY2lmaWNhdGlvbnMiPk9sZC1zdHlsZSBraW5kIHNwZWNpZmljYXRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjEuMiBPbGQtc3R5bGUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb248L2g0PgorCis8cD5HTlUgRm9ydHJhbiBhbGxvd3Mgb2xkLXN0eWxlIGluaXRpYWxpemF0aW9uIG9mIHZhcmlhYmxlcyBvZiB0aGUKK2Zvcm06Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgSU5URUdFUiBpLzEvLGovMi8KKyAgICAgICAgICAgUkVBTCB4KDIsMikgLzMqMC4sMS4vCis8L3ByZT4KKyAgIDxwPlRoZSBzeW50YXggZm9yIHRoZSBpbml0aWFsaXplcnMgaXMgYXMgZm9yIHRoZSA8Y29kZT5EQVRBPC9jb2RlPiBzdGF0ZW1lbnQsIGJ1dAordW5saWtlIGluIGEgPGNvZGU+REFUQTwvY29kZT4gc3RhdGVtZW50LCBhbiBpbml0aWFsaXplciBvbmx5IGFwcGxpZXMgdG8gdGhlCit2YXJpYWJsZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlIGluaXRpYWxpemF0aW9uLiAgSW4gb3RoZXIgd29yZHMsCitzb21ldGhpbmcgbGlrZSA8Y29kZT5JTlRFR0VSIEksSi8yLDMvPC9jb2RlPiBpcyBub3QgdmFsaWQuICBUaGlzIHN0eWxlIG9mCitpbml0aWFsaXphdGlvbiBpcyBvbmx5IGFsbG93ZWQgaW4gZGVjbGFyYXRpb25zIHdpdGhvdXQgZG91YmxlIGNvbG9ucworKDxjb2RlPjo6PC9jb2RlPik7IHRoZSBkb3VibGUgY29sb25zIHdlcmUgaW50cm9kdWNlZCBpbiBGb3J0cmFuIDkwLCB3aGljaCBhbHNvCitpbnRyb2R1Y2VkIGEgc3RhbmRhcmQgc3ludGF4IGZvciBpbml0aWFsaXppbmcgdmFyaWFibGVzIGluIHR5cGUKK2RlY2xhcmF0aW9ucy4KKworICAgPHA+RXhhbXBsZXMgb2Ygc3RhbmRhcmQtY29uZm9ybWluZyBjb2RlIGVxdWl2YWxlbnQgdG8gdGhlIGFib3ZlIGV4YW1wbGUKK2FyZToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAhIEZvcnRyYW4gOTAKKyAgICAgICAgICAgSU5URUdFUiA6OiBpID0gMSwgaiA9IDIKKyAgICAgICAgICAgUkVBTCA6OiB4KDIsMikgPSBSRVNIQVBFKCgvMC4sMC4sMC4sMS4vKSxTSEFQRSh4KSkKKyAgICAgISBGb3J0cmFuIDc3CisgICAgICAgICAgIElOVEVHRVIgaSwgagorICAgICAgICAgICBSRUFMIHgoMiwyKQorICAgICAgICAgICBEQVRBIGkvMS8sIGovMi8sIHgvMyowLiwxLi8KKzwvcHJlPgorICAgPHA+Tm90ZSB0aGF0IHZhcmlhYmxlcyB3aGljaCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBkZWNsYXJhdGlvbnMKK29yIGluIDxjb2RlPkRBVEE8L2NvZGU+IHN0YXRlbWVudHMgYXV0b21hdGljYWxseSBhY3F1aXJlIHRoZSA8Y29kZT5TQVZFPC9jb2RlPgorYXR0cmlidXRlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT3Blbk1QLU1vZHVsZXMtT01QXzAwNWZMSUItYW5kLU9NUF8wMDVmTElCXzAwNWZLSU5EUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL09wZW5NUC1Nb2R1bGVzLU9NUF8wMDVmTElCLWFuZC1PTVBfMDA1ZkxJQl8wMDVmS0lORFMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGI2YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL09wZW5NUC1Nb2R1bGVzLU9NUF8wMDVmTElCLWFuZC1PTVBfMDA1ZkxJQl8wMDVmS0lORFMuaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PcGVuTVAgTW9kdWxlcyBPTVBfTElCIGFuZCBPTVBfTElCX0tJTkRTIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Nb2R1bGVzLmh0bWwjSW50cmluc2ljLU1vZHVsZXMiIHRpdGxlPSJJbnRyaW5zaWMgTW9kdWxlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklTT18wMDVmQ18wMDVmQklORElORy5odG1sI0lTT18wMDVmQ18wMDVmQklORElORyIgdGl0bGU9IklTT19DX0JJTkRJTkciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3Blbk1QLU1vZHVsZXMtT01QX0xJQi1hbmQtT01QX0xJQl9LSU5EUyI+PC9hPgorPGEgbmFtZT0iT3Blbk1QLU1vZHVsZXMtT01QXzAwNWZMSUItYW5kLU9NUF8wMDVmTElCXzAwNWZLSU5EUyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklTT18wMDVmQ18wMDVmQklORElORy5odG1sI0lTT18wMDVmQ18wMDVmQklORElORyI+SVNPX0NfQklORElORzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Nb2R1bGVzLmh0bWwjSW50cmluc2ljLU1vZHVsZXMiPkludHJpbnNpYyBNb2R1bGVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4zIE9wZW5NUCBNb2R1bGVzIDxjb2RlPk9NUF9MSUI8L2NvZGU+IGFuZCA8Y29kZT5PTVBfTElCX0tJTkRTPC9jb2RlPjwvaDM+CisKKyAgICAgPGRsPgorPGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5PcGVuTVAgQXBwbGljYXRpb24gUHJvZ3JhbSBJbnRlcmZhY2UgdjMuMQorPC9kbD4KKworICAgPHA+VGhlIE9wZW5NUCBGb3J0cmFuIHJ1bnRpbWUgbGlicmFyeSByb3V0aW5lcyBhcmUgcHJvdmlkZWQgYm90aCBpbgorYSBmb3JtIG9mIHR3byBGb3J0cmFuIDkwIG1vZHVsZXMsIG5hbWVkIDxjb2RlPk9NUF9MSUI8L2NvZGU+IGFuZAorPGNvZGU+T01QX0xJQl9LSU5EUzwvY29kZT4sIGFuZCBpbiBhIGZvcm0gb2YgYSBGb3J0cmFuIDxjb2RlPmluY2x1ZGU8L2NvZGU+IGZpbGUgbmFtZWQKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5vbXBfbGliLmg8L3NwYW4+PC9zYW1wPi4gVGhlIHByb2NlZHVyZXMgcHJvdmlkZWQgYnkgPGNvZGU+T01QX0xJQjwvY29kZT4gY2FuIGJlIGZvdW5kCitpbiB0aGUgPGEgaHJlZj0iLi4vbGliZ29tcC9pbmRleC5odG1sI1RvcCI+SW50cm9kdWN0aW9uPC9hPiBtYW51YWwsCit0aGUgbmFtZWQgY29uc3RhbnRzIGRlZmluZWQgaW4gdGhlIG1vZHVsZXMgYXJlIGxpc3RlZAorYmVsb3cuCisKKyAgIDxwPkZvciBkZXRhaWxzIHJlZmVyIHRvIHRoZSBhY3R1YWwKKzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbm1wLm9yZy9tcC1kb2N1bWVudHMvc3BlYzMxLnBkZiI+T3Blbk1QIEFwcGxpY2F0aW9uIFByb2dyYW0gSW50ZXJmYWNlIHYzLjE8L2E+LgorCisgICA8cD48Y29kZT5PTVBfTElCX0tJTkRTPC9jb2RlPiBwcm92aWRlcyB0aGUgZm9sbG93aW5nIHNjYWxhciBkZWZhdWx0LWludGVnZXIKK25hbWVkIGNvbnN0YW50czoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+b21wX2xvY2tfa2luZDwvY29kZT48YnI+PGR0Pjxjb2RlPm9tcF9uZXN0X2xvY2tfa2luZDwvY29kZT48YnI+PGR0Pjxjb2RlPm9tcF9zY2hlZF9raW5kPC9jb2RlPjxkZD48L2RsPgorCisgICA8cD48Y29kZT5PTVBfTElCPC9jb2RlPiBwcm92aWRlcyB0aGUgc2NhbGFyIGRlZmF1bHQtaW50ZWdlcgorbmFtZWQgY29uc3RhbnQgPGNvZGU+b3Blbm1wX3ZlcnNpb248L2NvZGU+IHdpdGggYSB2YWx1ZSBvZiB0aGUgZm9ybQorPHZhcj55eXl5bW08L3Zhcj4sIHdoZXJlIDxjb2RlPnl5eXk8L2NvZGU+IGlzIHRoZSB5ZWFyIGFuZCA8dmFyPm1tPC92YXI+IHRoZSBtb250aAorb2YgdGhlIE9wZW5NUCB2ZXJzaW9uOyBmb3IgT3Blbk1QIHYzLjEgdGhlIHZhbHVlIGlzIDxjb2RlPjIwMTEwNzwvY29kZT4uCisKKyAgIDxwPkFuZCB0aGUgZm9sbG93aW5nIHNjYWxhciBpbnRlZ2VyIG5hbWVkIGNvbnN0YW50cyBvZiB0aGUKK2tpbmQgPGNvZGU+b21wX3NjaGVkX2tpbmQ8L2NvZGU+OgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5vbXBfc2NoZWRfc3RhdGljPC9jb2RlPjxicj48ZHQ+PGNvZGU+b21wX3NjaGVkX2R5bmFtaWM8L2NvZGU+PGJyPjxkdD48Y29kZT5vbXBfc2NoZWRfZ3VpZGVkPC9jb2RlPjxicj48ZHQ+PGNvZGU+b21wX3NjaGVkX2F1dG88L2NvZGU+PGRkPjwvZGw+CisKKzwhLS0gIC0tPgorPCEtLSBDb250cmlidXRpbmcgLS0+Cis8IS0tICAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9PcGVuTVAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9PcGVuTVAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDdjMDE3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL09wZW5NUC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PcGVuTVAgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iIHRpdGxlPSJFeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ09OVkVSVC1zcGVjaWZpZXIuaHRtbCNDT05WRVJULXNwZWNpZmllciIgdGl0bGU9IkNPTlZFUlQgc3BlY2lmaWVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQXJndW1lbnQtbGlzdC1mdW5jdGlvbnMuaHRtbCNBcmd1bWVudC1saXN0LWZ1bmN0aW9ucyIgdGl0bGU9IkFyZ3VtZW50IGxpc3QgZnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik9wZW5NUCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBcmd1bWVudC1saXN0LWZ1bmN0aW9ucy5odG1sI0FyZ3VtZW50LWxpc3QtZnVuY3Rpb25zIj5Bcmd1bWVudCBsaXN0IGZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNPTlZFUlQtc3BlY2lmaWVyLmh0bWwjQ09OVkVSVC1zcGVjaWZpZXIiPkNPTlZFUlQgc3BlY2lmaWVyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjEuMTYgT3Blbk1QPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtT3Blbk1QLTM0MyI+PC9hPgorT3Blbk1QIChPcGVuIE11bHRpLVByb2Nlc3NpbmcpIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgKEFQSSkgdGhhdCBzdXBwb3J0cyBtdWx0aS1wbGF0Zm9ybSBzaGFyZWQgbWVtb3J5CittdWx0aXByb2Nlc3NpbmcgcHJvZ3JhbW1pbmcgaW4gQy9DKysgYW5kIEZvcnRyYW4gb24gbWFueQorYXJjaGl0ZWN0dXJlcywgaW5jbHVkaW5nIFVuaXggYW5kIE1pY3Jvc29mdCBXaW5kb3dzIHBsYXRmb3Jtcy4gCitJdCBjb25zaXN0cyBvZiBhIHNldCBvZiBjb21waWxlciBkaXJlY3RpdmVzLCBsaWJyYXJ5IHJvdXRpbmVzLAorYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGluZmx1ZW5jZSBydW4tdGltZSBiZWhhdmlvci4KKworICAgPHA+R05VIEZvcnRyYW4gc3RyaXZlcyB0byBiZSBjb21wYXRpYmxlIHRvIHRoZQorPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVubXAub3JnL21wLWRvY3VtZW50cy9zcGVjMzEucGRmIj5PcGVuTVAgQXBwbGljYXRpb24gUHJvZ3JhbSBJbnRlcmZhY2UgdjMuMTwvYT4uCisKKyAgIDxwPlRvIGVuYWJsZSB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgT3Blbk1QIGRpcmVjdGl2ZSA8Y29kZT4hJG9tcDwvY29kZT4gaW4KK2ZyZWUtZm9ybSBzb3VyY2UgY29kZTsgdGhlIDxjb2RlPmMkb21wPC9jb2RlPiwgPGNvZGU+KiRvbXA8L2NvZGU+IGFuZCA8Y29kZT4hJG9tcDwvY29kZT4KK2RpcmVjdGl2ZXMgaW4gZml4ZWQgZm9ybTsgdGhlIDxjb2RlPiEkPC9jb2RlPiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzZW50aW5lbHMKK2luIGZyZWUgZm9ybTsgYW5kIHRoZSA8Y29kZT5jJDwvY29kZT4sIDxjb2RlPiokPC9jb2RlPiBhbmQgPGNvZGU+ISQ8L2NvZGU+IHNlbnRpbmVscworaW4gZml4ZWQgZm9ybSwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gbmVlZHMgdG8gYmUgaW52b2tlZCB3aXRoIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZvcGVubXA8L3NwYW4+PC9zYW1wPi4gIFRoaXMgYWxzbyBhcnJhbmdlcyBmb3IgYXV0b21hdGljIGxpbmtpbmcgb2YgdGhlCitHTlUgT3Blbk1QIHJ1bnRpbWUgbGlicmFyeSA8YSBocmVmPSIuLi9saWJnb21wL2luZGV4Lmh0bWwjVG9wIj5saWJnb21wPC9hPi4KKworICAgPHA+VGhlIE9wZW5NUCBGb3J0cmFuIHJ1bnRpbWUgbGlicmFyeSByb3V0aW5lcyBhcmUgcHJvdmlkZWQgYm90aCBpbiBhCitmb3JtIG9mIGEgRm9ydHJhbiA5MCBtb2R1bGUgbmFtZWQgPGNvZGU+b21wX2xpYjwvY29kZT4gYW5kIGluIGEgZm9ybSBvZgorYSBGb3J0cmFuIDxjb2RlPmluY2x1ZGU8L2NvZGU+IGZpbGUgbmFtZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm9tcF9saWIuaDwvc3Bhbj48L3NhbXA+LgorCisgICA8cD5BbiBleGFtcGxlIG9mIGEgcGFyYWxsZWxpemVkIGxvb3AgdGFrZW4gZnJvbSBBcHBlbmRpeCBBLjEgb2YKK3RoZSBPcGVuTVAgQXBwbGljYXRpb24gUHJvZ3JhbSBJbnRlcmZhY2UgdjIuNToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBTVUJST1VUSU5FIEExKE4sIEEsIEIpCisgICAgICAgSU5URUdFUiBJLCBOCisgICAgICAgUkVBTCBCKE4pLCBBKE4pCisgICAgICEkT01QIFBBUkFMTEVMIERPICFJIGlzIHByaXZhdGUgYnkgZGVmYXVsdAorICAgICAgIERPIEk9MixOCisgICAgICAgICBCKEkpID0gKEEoSSkgKyBBKEktMSkpIC8gMi4wCisgICAgICAgRU5ERE8KKyAgICAgISRPTVAgRU5EIFBBUkFMTEVMIERPCisgICAgIEVORCBTVUJST1VUSU5FIEExCis8L3ByZT4KKyAgIDxwPlBsZWFzZSBub3RlOgorICAgICA8dWw+Cis8bGk+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZvcGVubXA8L3NwYW4+PC9zYW1wPiBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mcmVjdXJzaXZlPC9zcGFuPjwvc2FtcD4sIGkuZS4sIGFsbCBsb2NhbCBhcnJheXMKK3dpbGwgYmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjay4gIFdoZW4gcG9ydGluZyBleGlzdGluZyBjb2RlIHRvIE9wZW5NUCwKK3RoaXMgbWF5IGxlYWQgdG8gc3VycHJpc2luZyByZXN1bHRzLCBlc3BlY2lhbGx5IHRvIHNlZ21lbnRhdGlvbiBmYXVsdHMKK2lmIHRoZSBzdGFja3NpemUgaXMgbGltaXRlZC4KKworICAgICA8bGk+T24gZ2xpYmMtYmFzZWQgc3lzdGVtcywgT3Blbk1QIGVuYWJsZWQgYXBwbGljYXRpb25zIGNhbm5vdCBiZSBzdGF0aWNhbGx5CitsaW5rZWQgZHVlIHRvIGxpbWl0YXRpb25zIG9mIHRoZSB1bmRlcmx5aW5nIHB0aHJlYWRzLWltcGxlbWVudGF0aW9uLiAgSXQKK21pZ2h0IGJlIHBvc3NpYmxlIHRvIGdldCBhIHdvcmtpbmcgc29sdXRpb24gaWYKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj4tV2wsLS13aG9sZS1hcmNoaXZlIC1scHRocmVhZCAtV2wsLS1uby13aG9sZS1hcmNoaXZlPC9zcGFuPjwvc2FtcD4gaXMgYWRkZWQKK3RvIHRoZSBjb21tYW5kIGxpbmUuICBIb3dldmVyLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdjYzwvc3Bhbj48L3NhbXA+IGFuZAordGh1cyBub3QgcmVjb21tZW5kZWQuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL09wdGlvbi1JbmRleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL09wdGlvbi1JbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZmZkZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT3B0aW9uLUluZGV4Lmh0bWwKQEAgLTAsMCArMSwxODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk9wdGlvbiBJbmRleCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZ1bmRpbmcuaHRtbCNGdW5kaW5nIiB0aXRsZT0iRnVuZGluZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IktleXdvcmQtSW5kZXguaHRtbCNLZXl3b3JkLUluZGV4IiB0aXRsZT0iS2V5d29yZCBJbmRleCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPcHRpb24tSW5kZXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iS2V5d29yZC1JbmRleC5odG1sI0tleXdvcmQtSW5kZXgiPktleXdvcmQgSW5kZXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGdW5kaW5nLmh0bWwjRnVuZGluZyI+RnVuZGluZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJ1bm51bWJlcmVkIj5PcHRpb24gSW5kZXg8L2gyPgorCis8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPidzIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZSBpbmRleGVkIGhlcmUgd2l0aG91dCBhbnkKK2luaXRpYWwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS08L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBXaGVyZSBhbiBvcHRpb24gaGFzIGJvdGggcG9zaXRpdmUgYW5kCituZWdhdGl2ZSBmb3JtcyAoc3VjaCBhcyAtZm9wdGlvbiBhbmQgLWZuby1vcHRpb24pLCByZWxldmFudCBlbnRyaWVzIGluCit0aGUgbWFudWFsIGFyZSBpbmRleGVkIHVuZGVyIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGZvcm07IGl0IG1heSBzb21ldGltZXMKK2JlIHVzZWZ1bCB0byBsb29rIHVwIGJvdGggZm9ybXMuCisKKzx1bCBjbGFzcz0iaW5kZXgtb3AiIGNvbXBhY3Q+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBXzAwMmRfMDA0MHZhcl8wMDdicHJlZGljYXRlXzAwN2RfMDAzZF8wMDQwdmFyXzAwN2JhbnN3ZXJfMDA3ZF8wMDdkLTEwMiI+PGNvZGU+QS08L2NvZGU+PHZhcj5wcmVkaWNhdGU8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+YW5zd2VyPC92YXI+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkFfMDA0MHZhcl8wMDdicHJlZGljYXRlXzAwN2RfMDAzZF8wMDQwdmFyXzAwN2JhbnN3ZXJfMDA3ZF8wMDdkLTEwMCI+PGNvZGU+QTwvY29kZT48dmFyPnByZWRpY2F0ZTwvdmFyPjxjb2RlPj08L2NvZGU+PHZhcj5hbnN3ZXI8L3Zhcj48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JiYWNrc2xhc2hfMDA3ZC0zNyI+PGNvZGU+YmFja3NsYXNoPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JDXzAwN2QtMTA0Ij48Y29kZT5DPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JDQ18wMDdkLTEwNiI+PGNvZGU+Q0M8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmNwcF8wMDdkLTY1Ij48Y29kZT5jcHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmREXzAwN2QtNzIiPjxjb2RlPmREPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkSV8wMDdkLTgxIj48Y29kZT5kSTwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZE1fMDA3ZC02OSI+PGNvZGU+ZE08L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmROXzAwN2QtNzUiPjxjb2RlPmROPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JEXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZF8wMDdkLTEwOCI+PGNvZGU+RDwvY29kZT48dmFyPm5hbWU8L3Zhcj48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiRF8wMDQwdmFyXzAwN2JuYW1lXzAwN2RfMDAzZF8wMDQwdmFyXzAwN2JkZWZpbml0aW9uXzAwN2RfMDA3ZC0xMTAiPjxjb2RlPkQ8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmRlZmluaXRpb248L3Zhcj48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZFVfMDA3ZC03OCI+PGNvZGU+ZFU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmYWdncmVzc2l2ZV8wMDJkZnVuY3Rpb25fMDAyZGVsaW1pbmF0aW9uXzAwN2QtMjkxIj48Y29kZT5mYWdncmVzc2l2ZS1mdW5jdGlvbi1lbGltaW5hdGlvbjwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZhbGlnbl8wMDJkY29tbW9uc18wMDdkLTI4NSI+PGNvZGU+ZmFsaWduLWNvbW1vbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmFsbF8wMDJkaW50cmluc2ljc18wMDdkLTI3Ij48Y29kZT5mYWxsLWludHJpbnNpY3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmYmxhc18wMDJkbWF0bXVsXzAwMmRsaW1pdF8wMDdkLTI3OCI+PGNvZGU+ZmJsYXMtbWF0bXVsLWxpbWl0PC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmJvdW5kc18wMDJkY2hlY2tfMDA3ZC0yNjciPjxjb2RlPmZib3VuZHMtY2hlY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmY2hlY2tfMDA3ZC0yNTciPjxjb2RlPmZjaGVjazwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZjaGVja18wMDJkYXJyYXlfMDAyZHRlbXBvcmFyaWVzXzAwN2QtMjY4Ij48Y29kZT5mY2hlY2stYXJyYXktdGVtcG9yYXJpZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmY29hcnJheV8wMDdkLTI1NSI+PGNvZGU+ZmNvYXJyYXk8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSdW50aW1lLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZjb252ZXJ0XzAwM2RfMDA3ZF8wMDQwdmFyXzAwN2Jjb252ZXJzaW9uXzAwN2QtMjI2Ij48Y29kZT5mY29udmVydD08L2NvZGU+PHZhcj5jb252ZXJzaW9uPC92YXI+PC9hPjogPGEgaHJlZj0iUnVudGltZS1PcHRpb25zLmh0bWwjUnVudGltZS1PcHRpb25zIj5SdW50aW1lIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmNyYXlfMDAyZHBvaW50ZXJfMDA3ZC01MCI+PGNvZGU+ZmNyYXktcG9pbnRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmZF8wMDJkbGluZXNfMDAyZGFzXzAwMmRjb2RlXzAwN2QtMjgiPjxjb2RlPmZkLWxpbmVzLWFzLWNvZGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmRfMDAyZGxpbmVzXzAwMmRhc18wMDJkY29tbWVudHNfMDA3ZC0yOSI+PGNvZGU+ZmQtbGluZXMtYXMtY29tbWVudHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmRlZmF1bHRfMDAyZGRvdWJsZV8wMDJkOF8wMDdkLTMwIj48Y29kZT5mZGVmYXVsdC1kb3VibGUtODwvY29kZT48L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmZGVmYXVsdF8wMDJkaW50ZWdlcl8wMDJkOF8wMDdkLTMxIj48Y29kZT5mZGVmYXVsdC1pbnRlZ2VyLTg8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmRlZmF1bHRfMDAyZHJlYWxfMDAyZDhfMDA3ZC0zMiI+PGNvZGU+ZmRlZmF1bHQtcmVhbC04PC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZkb2xsYXJfMDAyZG9rXzAwN2QtMzMiPjxjb2RlPmZkb2xsYXItb2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmR1bXBfMDAyZGZvcnRyYW5fMDAyZG9wdGltaXplZF8wMDdkLTE5OCI+PGNvZGU+ZmR1bXAtZm9ydHJhbi1vcHRpbWl6ZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+RGVidWdnaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmR1bXBfMDAyZGZvcnRyYW5fMDAyZG9yaWdpbmFsXzAwN2QtMTk3Ij48Y29kZT5mZHVtcC1mb3J0cmFuLW9yaWdpbmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZkdW1wXzAwMmRwYXJzZV8wMDJkdHJlZV8wMDdkLTE5OSI+PGNvZGU+ZmR1bXAtcGFyc2UtdHJlZTwvY29kZT48L2E+OiA8YSBocmVmPSJEZWJ1Z2dpbmctT3B0aW9ucy5odG1sI0RlYnVnZ2luZy1PcHRpb25zIj5EZWJ1Z2dpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZleHRlcm5hbF8wMDJkYmxhc18wMDdkLTI3NyI+PGNvZGU+ZmV4dGVybmFsLWJsYXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZmYyYy0yMzYiPjxjb2RlPmZmMmM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmZpeGVkXzAwMmRsaW5lXzAwMmRsZW5ndGhfMDAyZF8wMDdkXzAwNDB2YXJfMDA3Ym5fMDA3ZC00MyI+PGNvZGU+ZmZpeGVkLWxpbmUtbGVuZ3RoLTwvY29kZT48dmFyPm48L3Zhcj48L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmZnBlXzAwMmR0cmFwXzAwM2RfMDA3ZF8wMDQwdmFyXzAwN2JsaXN0XzAwN2QtMjAwIj48Y29kZT5mZnBlLXRyYXA9PC9jb2RlPjx2YXI+bGlzdDwvdmFyPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZmcmVlXzAwMmRmb3JtXzAwN2QtMjIiPjxjb2RlPmZmcmVlLWZvcm08L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmZyZWVfMDAyZGxpbmVfMDAyZGxlbmd0aF8wMDJkXzAwN2RfMDA0MHZhcl8wMDdibl8wMDdkLTQ1Ij48Y29kZT5mZnJlZS1saW5lLWxlbmd0aC08L2NvZGU+PHZhcj5uPC92YXI+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmltcGxpY2l0XzAwMmRub25lXzAwN2QtNDgiPjxjb2RlPmZpbXBsaWNpdC1ub25lPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmluaXRfMDAyZGNoYXJhY3Rlcl8wMDdkLTI4NCI+PGNvZGU+ZmluaXQtY2hhcmFjdGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZmluaXRfMDAyZGludGVnZXJfMDA3ZC0yODEiPjxjb2RlPmZpbml0LWludGVnZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmaW5pdF8wMDJkbG9jYWxfMDAyZHplcm9fMDA3ZC0yODAiPjxjb2RlPmZpbml0LWxvY2FsLXplcm88L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmaW5pdF8wMDJkbG9naWNhbF8wMDdkLTI4MyI+PGNvZGU+ZmluaXQtbG9naWNhbDwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpbml0XzAwMmRyZWFsXzAwN2QtMjgyIj48Y29kZT5maW5pdC1yZWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpbnRlZ2VyXzAwMmQ0XzAwMmRpbnRlZ2VyXzAwMmQ4XzAwN2QtNDkiPjxjb2RlPmZpbnRlZ2VyLTQtaW50ZWdlci04PC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZpbnRyaW5zaWNfMDAyZG1vZHVsZXNfMDAyZHBhdGhfMDA3ZC1fMDA0MHZhcl8wMDdiZGlyXzAwN2QtMjE5Ij48Y29kZT5maW50cmluc2ljLW1vZHVsZXMtcGF0aCA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZtYXhfMDAyZGFycmF5XzAwMmRjb25zdHJ1Y3Rvcl8wMDdkLTI2OSI+PGNvZGU+Zm1heC1hcnJheS1jb25zdHJ1Y3RvcjwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZtYXhfMDAyZGVycm9yc18wMDNkXzAwN2RfMDA0MHZhcl8wMDdibl8wMDdkLTEyMyI+PGNvZGU+Zm1heC1lcnJvcnM9PC9jb2RlPjx2YXI+bjwvdmFyPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZtYXhfMDAyZGlkZW50aWZpZXJfMDAyZGxlbmd0aF8wMDNkXzAwN2RfMDA0MHZhcl8wMDdibl8wMDdkLTQ3Ij48Y29kZT5mbWF4LWlkZW50aWZpZXItbGVuZ3RoPTwvY29kZT48dmFyPm48L3Zhcj48L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZtYXhfMDAyZHN0YWNrXzAwMmR2YXJfMDAyZHNpemVfMDA3ZC0yNzAiPjxjb2RlPmZtYXgtc3RhY2stdmFyLXNpemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSdW50aW1lLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZtYXhfMDAyZHN1YnJlY29yZF8wMDJkbGVuZ3RoXzAwM2RfMDA3ZF8wMDQwdmFyXzAwN2JsZW5ndGhfMDA3ZC0yMjgiPjxjb2RlPmZtYXgtc3VicmVjb3JkLWxlbmd0aD08L2NvZGU+PHZhcj5sZW5ndGg8L3Zhcj48L2E+OiA8YSBocmVmPSJSdW50aW1lLU9wdGlvbnMuaHRtbCNSdW50aW1lLU9wdGlvbnMiPlJ1bnRpbWUgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbW9kdWxlXzAwMmRwcml2YXRlXzAwN2QtNDAiPjxjb2RlPmZtb2R1bGUtcHJpdmF0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZub18wMDJkYXV0b21hdGljXzAwN2QtMjMzIj48Y29kZT5mbm8tYXV0b21hdGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZub18wMDJkYmFja3RyYWNlXzAwN2QtMjAxIj48Y29kZT5mbm8tYmFja3RyYWNlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPkRlYnVnZ2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZub18wMDJkZml4ZWRfMDAyZGZvcm1fMDA3ZC0yMyI+PGNvZGU+Zm5vLWZpeGVkLWZvcm08L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmbm9fMDAyZHByb3RlY3RfMDAyZHBhcmVuc18wMDdkLTI4NyI+PGNvZGU+Zm5vLXByb3RlY3QtcGFyZW5zPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZm5vXzAwMmR1bmRlcnNjb3JpbmdfMDA3ZC0yNDEiPjxjb2RlPmZuby11bmRlcnNjb3Jpbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmbm9fMDAyZHdob2xlXzAwMmRmaWxlXzAwN2QtMjQ2Ij48Y29kZT5mbm8td2hvbGUtZmlsZTwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmb3Blbm1wXzAwN2QtNTEiPjxjb2RlPmZvcGVubXA8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcGFja18wMDJkZGVyaXZlZF8wMDdkLTI3MiI+PGNvZGU+ZnBhY2stZGVyaXZlZDwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZnBwXzAwN2QtNjYiPjxjb2RlPmZwcDwvY29kZT48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcmFuZ2VfMDAyZGNoZWNrXzAwN2QtNTMiPjxjb2RlPmZyYW5nZS1jaGVjazwvY29kZT48L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcmVhbF8wMDJkNF8wMDJkcmVhbF8wMDJkMTBfMDA3ZC01NSI+PGNvZGU+ZnJlYWwtNC1yZWFsLTEwPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZyZWFsXzAwMmQ0XzAwMmRyZWFsXzAwMmQxNl8wMDdkLTU2Ij48Y29kZT5mcmVhbC00LXJlYWwtMTY8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJlYWxfMDAyZDRfMDAyZHJlYWxfMDAyZDhfMDA3ZC01NCI+PGNvZGU+ZnJlYWwtNC1yZWFsLTg8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNGb3J0cmFuLURpYWxlY3QtT3B0aW9ucyI+Rm9ydHJhbiBEaWFsZWN0IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJlYWxfMDAyZDhfMDAyZHJlYWxfMDAyZDEwXzAwN2QtNTgiPjxjb2RlPmZyZWFsLTgtcmVhbC0xMDwvY29kZT48L2E+OiA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcmVhbF8wMDJkOF8wMDJkcmVhbF8wMDJkMTZfMDA3ZC01OSI+PGNvZGU+ZnJlYWwtOC1yZWFsLTE2PC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZyZWFsXzAwMmQ4XzAwMmRyZWFsXzAwMmQ0XzAwN2QtNTciPjxjb2RlPmZyZWFsLTgtcmVhbC00PC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJlYWxsb2NfMDAyZGxoc18wMDdkLTI4OSI+PGNvZGU+ZnJlYWxsb2MtbGhzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUnVudGltZS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcmVjb3JkXzAwMmRtYXJrZXJfMDAzZF8wMDdkXzAwNDB2YXJfMDA3Ymxlbmd0aF8wMDdkLTIyNyI+PGNvZGU+ZnJlY29yZC1tYXJrZXI9PC9jb2RlPjx2YXI+bGVuZ3RoPC92YXI+PC9hPjogPGEgaHJlZj0iUnVudGltZS1PcHRpb25zLmh0bWwjUnVudGltZS1PcHRpb25zIj5SdW50aW1lIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmcmVjdXJzaXZlXzAwN2QtMjc5Ij48Y29kZT5mcmVjdXJzaXZlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj5Db2RlIEdlbiBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJlcGFja18wMDJkYXJyYXlzXzAwN2QtMjc0Ij48Y29kZT5mcmVwYWNrLWFycmF5czwvY29kZT48L2E+OiA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZyb250ZW5kXzAwMmRvcHRpbWl6ZV8wMDdkLTI5MyI+PGNvZGU+ZnJvbnRlbmQtb3B0aW1pemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmc2Vjb25kXzAwMmR1bmRlcnNjb3JlXzAwN2QtMjQ3Ij48Y29kZT5mc2Vjb25kLXVuZGVyc2NvcmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLTIwMDMtc3RhdHVzLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmc2hvcnRfMDAyZGVudW1zXzAwN2QtMzA2Ij48Y29kZT5mc2hvcnQtZW51bXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPkZvcnRyYW4gMjAwMyBzdGF0dXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmc2hvcnRfMDAyZGVudW1zXzAwN2QtMjc2Ij48Y29kZT5mc2hvcnQtZW51bXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSdW50aW1lLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZzaWduXzAwMmR6ZXJvXzAwN2QtMjI5Ij48Y29kZT5mc2lnbi16ZXJvPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJ1bnRpbWUtT3B0aW9ucy5odG1sI1J1bnRpbWUtT3B0aW9ucyI+UnVudGltZSBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiZnN0YWNrXzAwMmRhcnJheXNfMDA3ZC0yNzEiPjxjb2RlPmZzdGFjay1hcnJheXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPkNvZGUgR2VuIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jmc3ludGF4XzAwMmRvbmx5XzAwN2QtMTI1Ij48Y29kZT5mc3ludGF4LW9ubHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZ3b3JraW5nXzAwMmRkaXJlY3RvcnlfMDA3ZC04NCI+PGNvZGU+ZndvcmtpbmctZGlyZWN0b3J5PC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JIXzAwN2QtMTEyIj48Y29kZT5IPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YklfMDA3ZF8wMDQwdmFyXzAwN2JkaXJfMDA3ZC0yMDkiPjxjb2RlPkk8L2NvZGU+PHZhcj5kaXI8L3Zhcj48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaWRpcmFmdGVyLV8wMDQwdmFyXzAwN2JkaXJfMDA3ZF8wMDdkLTg2Ij48Y29kZT5pZGlyYWZ0ZXIgPC9jb2RlPjx2YXI+ZGlyPC92YXI+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmltdWx0aWxpYi1fMDA0MHZhcl8wMDdiZGlyXzAwN2RfMDA3ZC04OCI+PGNvZGU+aW11bHRpbGliIDwvY29kZT48dmFyPmRpcjwvdmFyPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpcHJlZml4LV8wMDQwdmFyXzAwN2JwcmVmaXhfMDA3ZF8wMDdkLTkwIj48Y29kZT5pcHJlZml4IDwvY29kZT48dmFyPnByZWZpeDwvdmFyPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JpcXVvdGUtXzAwNDB2YXJfMDA3YmRpcl8wMDdkXzAwN2QtOTQiPjxjb2RlPmlxdW90ZSA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiaXN5c3Jvb3QtXzAwNDB2YXJfMDA3YmRpcl8wMDdkXzAwN2QtOTIiPjxjb2RlPmlzeXNyb290IDwvY29kZT48dmFyPmRpcjwvdmFyPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jpc3lzdGVtLV8wMDQwdmFyXzAwN2JkaXJfMDA3ZF8wMDdkLTk2Ij48Y29kZT5pc3lzdGVtIDwvY29kZT48dmFyPmRpcjwvdmFyPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkpfMDA3ZF8wMDQwdmFyXzAwN2JkaXJfMDA3ZC0yMTUiPjxjb2RlPko8L2NvZGU+PHZhcj5kaXI8L3Zhcj48L2E+OiA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5EaXJlY3RvcnkgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkRpcmVjdG9yeS1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JNXzAwN2RfMDA0MHZhcl8wMDdiZGlyXzAwN2QtMjE2Ij48Y29kZT5NPC9jb2RlPjx2YXI+ZGlyPC92YXI+PC9hPjogPGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+RGlyZWN0b3J5IE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym5vc3RkaW5jXzAwN2QtOTgiPjxjb2RlPm5vc3RkaW5jPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JQXzAwN2QtMTEzIj48Y29kZT5QPC9jb2RlPjwvYT46IDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdicGVkYW50aWNfMDA3ZC0xMjciPjxjb2RlPnBlZGFudGljPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdicGVkYW50aWNfMDAyZGVycm9yc18wMDdkLTEyOCI+PGNvZGU+cGVkYW50aWMtZXJyb3JzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JzdGF0aWNfMDAyZGxpYmdmb3J0cmFuXzAwN2QtMjI0Ij48Y29kZT5zdGF0aWMtbGliZ2ZvcnRyYW48L2NvZGU+PC9hPjogPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5MaW5rIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdic3RkXzAwM2RfMDA3ZF8wMDQwdmFyXzAwN2JzdGRfMDA3ZC1vcHRpb24tNjEiPjxjb2RlPnN0ZD08L2NvZGU+PHZhcj5zdGQ8L3Zhcj48Y29kZT4gb3B0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPkZvcnRyYW4gRGlhbGVjdCBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JVXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZF8wMDdkLTExNSI+PGNvZGU+VTwvY29kZT48dmFyPm5hbWU8L3Zhcj48L2E+OiA8YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPlByZXByb2Nlc3NpbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdidW5kZWZfMDA3ZC05OSI+PGNvZGU+dW5kZWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwjUHJlcHJvY2Vzc2luZy1PcHRpb25zIj5QcmVwcm9jZXNzaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXYWxpYXNpbmdfMDA3ZC0xMzIiPjxjb2RlPldhbGlhc2luZzwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldhbGlnbl8wMDJkY29tbW9uc18wMDdkLTE4MiI+PGNvZGU+V2FsaWduLWNvbW1vbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXYWxsXzAwN2QtMTI5Ij48Y29kZT5XYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV2FtcGVyc2FuZF8wMDdkLTEzNSI+PGNvZGU+V2FtcGVyc2FuZDwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldhcnJheV8wMDJkdGVtcG9yYXJpZXNfMDA3ZC0xMzgiPjxjb2RlPldhcnJheS10ZW1wb3JhcmllczwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldjXzAwMmRiaW5kaW5nXzAwMmR0eXBlXzAwN2QtMTQwIj48Y29kZT5XYy1iaW5kaW5nLXR5cGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXY2hhcmFjdGVyXzAwMmR0cnVuY2F0aW9uXzAwN2QtMTQyIj48Y29kZT5XY2hhcmFjdGVyLXRydW5jYXRpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXY29tcGFyZV8wMDJkcmVhbHNfMDA3ZC0xOTEiPjxjb2RlPldjb21wYXJlLXJlYWxzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV2NvbnZlcnNpb25fMDA3ZC0xNDYiPjxjb2RlPldjb252ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV2NvbnZlcnNpb25fMDAyZGV4dHJhXzAwN2QtMTQ5Ij48Y29kZT5XY29udmVyc2lvbi1leHRyYTwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldlcnJvcl8wMDdkLTE5MyI+PGNvZGU+V2Vycm9yPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV2V4dHJhXzAwN2QtMTUyIj48Y29kZT5XZXh0cmE8L2NvZGU+PC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXZnVuY3Rpb25fMDAyZGVsaW1pbmF0aW9uXzAwN2QtMTg1Ij48Y29kZT5XZnVuY3Rpb24tZWxpbWluYXRpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JXaW1wbGljaXRfMDAyZGludGVyZmFjZV8wMDdkLTE1NSI+PGNvZGU+V2ltcGxpY2l0LWludGVyZmFjZTwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldpbXBsaWNpdF8wMDJkcHJvY2VkdXJlXzAwN2QtMTU3Ij48Y29kZT5XaW1wbGljaXQtcHJvY2VkdXJlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV2ludHJpbnNpY18wMDJkc2hhZG93XzAwN2QtMTcyIj48Y29kZT5XaW50cmluc2ljLXNoYWRvdzwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldpbnRyaW5zaWNzXzAwMmRzdGRfMDA3ZC0xNTkiPjxjb2RlPldpbnRyaW5zaWNzLXN0ZDwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YldsaW5lXzAwMmR0cnVuY2F0aW9uXzAwN2QtMTQ0Ij48Y29kZT5XbGluZS10cnVuY2F0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV3JlYWxfMDAyZHFfMDAyZGNvbnN0YW50XzAwN2QtMTYyIj48Y29kZT5XcmVhbC1xLWNvbnN0YW50PC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV3JlYWxsb2NfMDAyZGxoc18wMDdkLTE4OCI+PGNvZGU+V3JlYWxsb2MtbGhzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV3JlYWxsb2NfMDAyZGxoc18wMDJkYWxsXzAwN2QtMTkwIj48Y29kZT5XcmVhbGxvYy1saHMtYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV3N1cnByaXNpbmdfMDA3ZC0xNjQiPjxjb2RlPldzdXJwcmlzaW5nPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV3RhYnNfMDA3ZC0xNjYiPjxjb2RlPld0YWJzPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV3Rhcmd0XzAwMmRsaWZldGltZV8wMDdkLTE5MiI+PGNvZGU+V3Rhcmd0LWxpZmV0aW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj5FcnJvciBhbmQgV2FybmluZyBPcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiV3VuZGVyZmxvd18wMDdkLTE2OSI+PGNvZGU+V3VuZGVyZmxvdzwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yld1bnVzZWRfMDAyZGR1bW15XzAwMmRhcmd1bWVudF8wMDdkLTE3NSI+PGNvZGU+V3VudXNlZC1kdW1teS1hcmd1bWVudDwvY29kZT48L2E+OiA8YSBocmVmPSJFcnJvci1hbmQtV2FybmluZy1PcHRpb25zLmh0bWwjRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucyI+RXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3Yld1bnVzZWRfMDAyZHBhcmFtZXRlcl8wMDdkLTE3OSI+PGNvZGU+V3VudXNlZC1wYXJhbWV0ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+PC9saT4KKyAgIDwvdWw+ICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL09wdGlvbi1TdW1tYXJ5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vT3B0aW9uLVN1bW1hcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGIwNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL09wdGlvbi1TdW1tYXJ5Lmh0bWwKQEAgLTAsMCArMSwxMjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk9wdGlvbiBTdW1tYXJ5IC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiIHRpdGxlPSJGb3J0cmFuIERpYWxlY3QgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPcHRpb24tU3VtbWFyeSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iPkludm9raW5nIEdOVSBGb3J0cmFuPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xIE9wdGlvbiBzdW1tYXJ5PC9oMz4KKworPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKzxwPkhlcmUgaXMgYSBzdW1tYXJ5IG9mIGFsbCB0aGUgb3B0aW9ucyBzcGVjaWZpYyB0byBHTlUgRm9ydHJhbiwgZ3JvdXBlZAorYnkgdHlwZS4gIEV4cGxhbmF0aW9ucyBhcmUgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworICAgICA8ZGw+Cis8ZHQ+PGVtPkZvcnRyYW4gTGFuZ3VhZ2UgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5PcHRpb25zIGNvbnRyb2xsaW5nIEZvcnRyYW4gZGlhbGVjdDwvYT4uCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1mYWxsLWludHJpbnNpY3MgLWZiYWNrc2xhc2ggLWZjcmF5LXBvaW50ZXIgLWZkLWxpbmVzLWFzLWNvZGUgCisgICAgICAgICAgLWZkLWxpbmVzLWFzLWNvbW1lbnRzIC1mZGVmYXVsdC1kb3VibGUtOCAtZmRlZmF1bHQtaW50ZWdlci04IAorICAgICAgICAgIC1mZGVmYXVsdC1yZWFsLTggLWZkb2xsYXItb2sgLWZmaXhlZC1saW5lLWxlbmd0aC08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLWZmaXhlZC1saW5lLWxlbmd0aC1ub25lIC1mZnJlZS1mb3JtIC1mZnJlZS1saW5lLWxlbmd0aC08dmFyPm48L3Zhcj4gCisgICAgICAgICAgLWZmcmVlLWxpbmUtbGVuZ3RoLW5vbmUgLWZpbXBsaWNpdC1ub25lIC1maW50ZWdlci00LWludGVnZXItOCAKKyAgICAgICAgICAtZm1heC1pZGVudGlmaWVyLWxlbmd0aCAtZm1vZHVsZS1wcml2YXRlIC1mbm8tZml4ZWQtZm9ybSAtZm5vLXJhbmdlLWNoZWNrIAorICAgICAgICAgIC1mb3Blbm1wIC1mcmVhbC00LXJlYWwtMTAgLWZyZWFsLTQtcmVhbC0xNiAtZnJlYWwtNC1yZWFsLTggCisgICAgICAgICAgLWZyZWFsLTgtcmVhbC0xMCAtZnJlYWwtOC1yZWFsLTE2IC1mcmVhbC04LXJlYWwtNCAtc3RkPTx2YXI+c3RkPC92YXI+CisgICAgICAgICAgCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+UHJlcHJvY2Vzc2luZyBPcHRpb25zPC9lbT48ZGQ+U2VlIDxhIGhyZWY9IlByZXByb2Nlc3NpbmctT3B0aW9ucy5odG1sI1ByZXByb2Nlc3NpbmctT3B0aW9ucyI+RW5hYmxlIGFuZCBjdXN0b21pemUgcHJlcHJvY2Vzc2luZzwvYT4uCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1BLTx2YXI+cXVlc3Rpb248L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPls8L3NwYW4+PTx2YXI+YW5zd2VyPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5dPC9zcGFuPgorICAgICAgICAgIC1BPHZhcj5xdWVzdGlvbjwvdmFyPj08dmFyPmFuc3dlcjwvdmFyPiAtQyAtQ0MgLUQ8dmFyPm1hY3JvPC92YXI+PHNwYW4gY2xhc3M9InJvbWFuIj5bPC9zcGFuPj08dmFyPmRlZm48L3Zhcj48c3BhbiBjbGFzcz0icm9tYW4iPl08L3NwYW4+CisgICAgICAgICAgLUggLVAgCisgICAgICAgICAgLVU8dmFyPm1hY3JvPC92YXI+IC1jcHAgLWREIC1kSSAtZE0gLWROIC1kVSAtZndvcmtpbmctZGlyZWN0b3J5CisgICAgICAgICAgLWltdWx0aWxpYiA8dmFyPmRpcjwvdmFyPiAKKyAgICAgICAgICAtaXByZWZpeCA8dmFyPmZpbGU8L3Zhcj4gLWlxdW90ZSAtaXN5c3Jvb3QgPHZhcj5kaXI8L3Zhcj4gLWlzeXN0ZW0gPHZhcj5kaXI8L3Zhcj4gLW5vY3BwCisgICAgICAgICAgLW5vc3RkaW5jIAorICAgICAgICAgIC11bmRlZgorICAgICAgICAgIAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2VtPjxkZD5TZWUgPGEgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPk9wdGlvbnMgdG8gcmVxdWVzdCBvciBzdXBwcmVzcyBlcnJvcnMgYW5kIHdhcm5pbmdzPC9hPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLVdhbGlhc2luZyAtV2FsbCAtV2FtcGVyc2FuZCAtV2FycmF5LWJvdW5kcworICAgICAgICAgIC1XYy1iaW5kaW5nLXR5cGUgLVdjaGFyYWN0ZXItdHJ1bmNhdGlvbiAKKyAgICAgICAgICAtV2NvbnZlcnNpb24gLVdmdW5jdGlvbi1lbGltaW5hdGlvbiAtV2ltcGxpY2l0LWludGVyZmFjZSAKKyAgICAgICAgICAtV2ltcGxpY2l0LXByb2NlZHVyZSAtV2ludHJpbnNpYy1zaGFkb3cgLVdpbnRyaW5zaWNzLXN0ZCAKKyAgICAgICAgICAtV2xpbmUtdHJ1bmNhdGlvbiAtV25vLWFsaWduLWNvbW1vbnMgLVduby10YWJzIC1XcmVhbC1xLWNvbnN0YW50IAorICAgICAgICAgIC1Xc3VycHJpc2luZyAtV3VuZGVyZmxvdyAtV3VudXNlZC1wYXJhbWV0ZXIgLVdyZWFsbG9jLWxocyBXcmVhbGxvYy1saHMtYWxsIAorICAgICAgICAgIC1XdGFyZ2V0LWxpZmV0aW1lIC1mbWF4LWVycm9ycz08dmFyPm48L3Zhcj4gLWZzeW50YXgtb25seSAtcGVkYW50aWMgLXBlZGFudGljLWVycm9ycworICAgICAgICAgIAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPkRlYnVnZ2luZyBPcHRpb25zPC9lbT48ZGQ+U2VlIDxhIGhyZWY9IkRlYnVnZ2luZy1PcHRpb25zLmh0bWwjRGVidWdnaW5nLU9wdGlvbnMiPk9wdGlvbnMgZm9yIGRlYnVnZ2luZyB5b3VyIHByb2dyYW0gb3IgR05VIEZvcnRyYW48L2E+LgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtZmJhY2t0cmFjZSAtZmR1bXAtZm9ydHJhbi1vcHRpbWl6ZWQgLWZkdW1wLWZvcnRyYW4tb3JpZ2luYWwgCisgICAgICAgICAgLWZkdW1wLXBhcnNlLXRyZWUgLWZmcGUtdHJhcD08dmFyPmxpc3Q8L3Zhcj4KKyAgICAgICAgICAKKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5EaXJlY3RvcnkgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJEaXJlY3RvcnktT3B0aW9ucy5odG1sI0RpcmVjdG9yeS1PcHRpb25zIj5PcHRpb25zIGZvciBkaXJlY3Rvcnkgc2VhcmNoPC9hPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLUk8dmFyPmRpcjwvdmFyPiAgLUo8dmFyPmRpcjwvdmFyPiAtZmludHJpbnNpYy1tb2R1bGVzLXBhdGggPHZhcj5kaXI8L3Zhcj4KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5MaW5rIE9wdGlvbnM8L2VtPjxkZD5TZWUgPGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj5PcHRpb25zIGZvciBpbmZsdWVuY2luZyB0aGUgbGlua2luZyBzdGVwPC9hPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgLXN0YXRpYy1saWJnZm9ydHJhbgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlJ1bnRpbWUgT3B0aW9uczwvZW0+PGRkPlNlZSA8YSBocmVmPSJSdW50aW1lLU9wdGlvbnMuaHRtbCNSdW50aW1lLU9wdGlvbnMiPk9wdGlvbnMgZm9yIGluZmx1ZW5jaW5nIHJ1bnRpbWUgYmVoYXZpb3I8L2E+LgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAtZmNvbnZlcnQ9PHZhcj5jb252ZXJzaW9uPC92YXI+IC1mbWF4LXN1YnJlY29yZC1sZW5ndGg9PHZhcj5sZW5ndGg8L3Zhcj4gCisgICAgICAgICAgLWZyZWNvcmQtbWFya2VyPTx2YXI+bGVuZ3RoPC92YXI+IC1mc2lnbi16ZXJvCisgICAgICAgICAgCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+Q29kZSBHZW5lcmF0aW9uIE9wdGlvbnM8L2VtPjxkZD5TZWUgPGEgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiPk9wdGlvbnMgZm9yIGNvZGUgZ2VuZXJhdGlvbiBjb252ZW50aW9uczwvYT4uCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIC1mYWdncmVzc2l2ZS1mdW5jdGlvbi1lbGltaW5hdGlvbiAtZmJsYXMtbWF0bXVsLWxpbWl0PTx2YXI+bjwvdmFyPiAKKyAgICAgICAgICAtZmJvdW5kcy1jaGVjayAtZmNoZWNrLWFycmF5LXRlbXBvcmFyaWVzIAorICAgICAgICAgIC1mY2hlY2s9PHZhcj4mbHQ7YWxsfGFycmF5LXRlbXBzfGJvdW5kc3xkb3xtZW18cG9pbnRlcnxyZWN1cnNpb24mZ3Q7PC92YXI+IAorICAgICAgICAgIC1mY29hcnJheT08dmFyPiZsdDtub25lfHNpbmdsZXxsaWImZ3Q7PC92YXI+IC1mZXh0ZXJuYWwtYmxhcyAtZmYyYworICAgICAgICAgIC1mZnJvbnRlbmQtb3B0aW1pemUgCisgICAgICAgICAgLWZpbml0LWNoYXJhY3Rlcj08dmFyPm48L3Zhcj4gLWZpbml0LWludGVnZXI9PHZhcj5uPC92YXI+IC1maW5pdC1sb2NhbC16ZXJvIAorICAgICAgICAgIC1maW5pdC1sb2dpY2FsPTx2YXI+Jmx0O3RydWV8ZmFsc2UmZ3Q7PC92YXI+CisgICAgICAgICAgLWZpbml0LXJlYWw9PHZhcj4mbHQ7emVyb3xpbmZ8LWluZnxuYW58c25hbiZndDs8L3Zhcj4gCisgICAgICAgICAgLWZtYXgtYXJyYXktY29uc3RydWN0b3I9PHZhcj5uPC92YXI+IC1mbWF4LXN0YWNrLXZhci1zaXplPTx2YXI+bjwvdmFyPgorICAgICAgICAgIC1mbm8tYWxpZ24tY29tbW9ucyAKKyAgICAgICAgICAtZm5vLWF1dG9tYXRpYyAtZm5vLXByb3RlY3QtcGFyZW5zIC1mbm8tdW5kZXJzY29yaW5nIC1mbm8td2hvbGUtZmlsZSAKKyAgICAgICAgICAtZnNlY29uZC11bmRlcnNjb3JlIC1mcGFjay1kZXJpdmVkIC1mcmVhbGxvYy1saHMgLWZyZWN1cnNpdmUgCisgICAgICAgICAgLWZyZXBhY2stYXJyYXlzIC1mc2hvcnQtZW51bXMgLWZzdGFjay1hcnJheXMKKyAgICAgICAgICAKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUEFDSy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1BBQ0suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGRjNmYwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1BBQ0suaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UEFDSyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPUi5odG1sI09SIiB0aXRsZT0iT1IiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQQVJJVFkuaHRtbCNQQVJJVFkiIHRpdGxlPSJQQVJJVFkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUEFDSyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQQVJJVFkuaHRtbCNQQVJJVFkiPlBBUklUWTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik9SLmh0bWwjT1IiPk9SPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE4OSA8Y29kZT5QQUNLPC9jb2RlPiAmbWRhc2g7IFBhY2sgYW4gYXJyYXkgaW50byBhbiBhcnJheSBvZiByYW5rIG9uZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVBBQ0stOTMyIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1wYWNraW5nLTkzMyI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtcmVkdWNlLWRpbWVuc2lvbi05MzQiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLWdhdGhlci1lbGVtZW50cy05MzUiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5TdG9yZXMgdGhlIGVsZW1lbnRzIG9mIDx2YXI+QVJSQVk8L3Zhcj4gaW4gYW4gYXJyYXkgb2YgcmFuayBvbmUuCisKKyAgICAgPHA+VGhlIGJlZ2lubmluZyBvZiB0aGUgcmVzdWx0aW5nIGFycmF5IGlzIG1hZGUgdXAgb2YgZWxlbWVudHMgd2hvc2UgPHZhcj5NQVNLPC92YXI+CitlcXVhbHMgPGNvZGU+VFJVRTwvY29kZT4uIEFmdGVyd2FyZHMsIHBvc2l0aW9ucyBhcmUgZmlsbGVkIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbQorPHZhcj5WRUNUT1I8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFBBQ0soQVJSQVksIE1BU0tbLFZFQ1RPUl08L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGFuIGFycmF5IG9mIGFueSB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhbiBhcnJheSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+IGFuZAorb2YgdGhlIHNhbWUgc2l6ZSBhcyA8dmFyPkFSUkFZPC92YXI+LiBBbHRlcm5hdGl2ZWx5LCBpdCBtYXkgYmUgYSA8Y29kZT5MT0dJQ0FMPC9jb2RlPgorc2NhbGFyLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VkVDVE9SPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIHR5cGUKK2FzIDx2YXI+QVJSQVk8L3Zhcj4gYW5kIG9mIHJhbmsgb25lLiBJZiBwcmVzZW50LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluCis8dmFyPlZFQ1RPUjwvdmFyPiBzaGFsbCBiZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiB0cnVlIGVsZW1lbnRzCitpbiA8dmFyPk1BU0s8L3Zhcj4uIElmIDx2YXI+TUFTSzwvdmFyPiBpcyBzY2FsYXIsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4KKzx2YXI+VkVDVE9SPC92YXI+IHNoYWxsIGJlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluCis8dmFyPkFSUkFZPC92YXI+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXN1bHQgaXMgYW4gYXJyYXkgb2YgcmFuayBvbmUgYW5kIHRoZSBzYW1lIHR5cGUgYXMgdGhhdCBvZiA8dmFyPkFSUkFZPC92YXI+LiAKK0lmIDx2YXI+VkVDVE9SPC92YXI+IGlzIHByZXNlbnQsIHRoZSByZXN1bHQgc2l6ZSBpcyB0aGF0IG9mIDx2YXI+VkVDVE9SPC92YXI+LCB0aGUKK251bWJlciBvZiA8Y29kZT5UUlVFPC9jb2RlPiB2YWx1ZXMgaW4gPHZhcj5NQVNLPC92YXI+IG90aGVyd2lzZS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPkdhdGhlcmluZyBub256ZXJvIGVsZW1lbnRzIGZyb20gYW4gYXJyYXk6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9wYWNrXzEKKyAgICAgICAgICAgIElOVEVHRVIgOjogbSg2KQorICAgICAgICAgICAgbSA9ICgvIDEsIDAsIDAsIDAsIDUsIDAgLykKKyAgICAgICAgICAgIFdSSVRFKCosIEZNVD0iKDYoSTAsICcgJykpIikgcGFjayhtLCBtIC89IDApICAhICIxIDUiCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8cD5HYXRoZXJpbmcgbm9uemVybyBlbGVtZW50cyBmcm9tIGFuIGFycmF5IGFuZCBhcHBlbmRpbmcgZWxlbWVudHMgZnJvbSA8dmFyPlZFQ1RPUjwvdmFyPjoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X3BhY2tfMgorICAgICAgICAgICAgSU5URUdFUiA6OiBtKDQpCisgICAgICAgICAgICBtID0gKC8gMSwgMCwgMCwgMiAvKQorICAgICAgICAgICAgV1JJVEUoKiwgRk1UPSIoNChJMCwgJyAnKSkiKSBwYWNrKG0sIG0gLz0gMCwgKC8gMCwgMCwgMywgNCAvKSkgICEgIjEgMiAzIDQiCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJVTlBBQ0suaHRtbCNVTlBBQ0siPlVOUEFDSzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9QQVJJVFkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9QQVJJVFkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQyYmQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1BBUklUWS5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlBBUklUWSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQQUNLLmh0bWwjUEFDSyIgdGl0bGU9IlBBQ0siPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQRVJST1IuaHRtbCNQRVJST1IiIHRpdGxlPSJQRVJST1IiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUEFSSVRZIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBFUlJPUi5odG1sI1BFUlJPUiI+UEVSUk9SPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUEFDSy5odG1sI1BBQ0siPlBBQ0s8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTkwIDxjb2RlPlBBUklUWTwvY29kZT4gJm1kYXNoOyBSZWR1Y3Rpb24gd2l0aCBleGNsdXNpdmUgT1I8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1QQVJJVFktOTM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtUGFyaXR5LTkzNyI+PC9hPjxhIG5hbWU9ImluZGV4LVJlZHVjdGlvbl8wMDJjLVhPUi05MzgiPjwvYT48YSBuYW1lPSJpbmRleC1YT1ItcmVkdWN0aW9uLTkzOSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkNhbGN1bGF0ZXMgdGhlIHBhcml0eSwgaS5lLiB0aGUgcmVkdWN0aW9uIHVzaW5nIDxjb2RlPi5YT1IuPC9jb2RlPiwKK29mIDx2YXI+TUFTSzwvdmFyPiBhbG9uZyBkaW1lbnNpb24gPHZhcj5ESU08L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBQQVJJVFkoTUFTS1ssIERJTV0pPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5MT0dJQ0FMPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhbiBhcnJheSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkRJTTwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUKKzxjb2RlPklOVEVHRVI8L2NvZGU+IHdpdGggYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgZnJvbSAxIHRvIG4sIHdoZXJlIG4KK2VxdWFscyB0aGUgcmFuayBvZiA8dmFyPk1BU0s8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJlc3VsdCBpcyBvZiB0aGUgc2FtZSB0eXBlIGFzIDx2YXI+TUFTSzwvdmFyPi4KKworICAgICA8cD5JZiA8dmFyPkRJTTwvdmFyPiBpcyBhYnNlbnQsIGEgc2NhbGFyIHdpdGggdGhlIHBhcml0eSBvZiBhbGwgZWxlbWVudHMgaW4KKzx2YXI+TUFTSzwvdmFyPiBpcyByZXR1cm5lZCwgaS5lLiB0cnVlIGlmIGFuIG9kZCBudW1iZXIgb2YgZWxlbWVudHMgaXMKKzxjb2RlPi50cnVlLjwvY29kZT4gYW5kIGZhbHNlIG90aGVyd2lzZS4gIElmIDx2YXI+RElNPC92YXI+IGlzIHByZXNlbnQsIGFuIGFycmF5CitvZiByYW5rIG4tMSwgd2hlcmUgbiBlcXVhbHMgdGhlIHJhbmsgb2YgPHZhcj5BUlJBWTwvdmFyPiwKK2FuZCBhIHNoYXBlIHNpbWlsYXIgdG8gdGhhdCBvZiA8dmFyPk1BU0s8L3Zhcj4gd2l0aCBkaW1lbnNpb24gPHZhcj5ESU08L3Zhcj4KK2Ryb3BwZWQgaXMgcmV0dXJuZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X3N1bQorICAgICAgICAgICAgTE9HSUNBTCA6OiB4KDIpID0gWyAudHJ1ZS4sIC5mYWxzZS4gXQorICAgICAgICAgICAgcHJpbnQgKiwgUEFSSVRZKHgpICEgcHJpbnRzICJUIiAodHJ1ZSkuCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUEVSUk9SLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUEVSUk9SLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4MzdmYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9QRVJST1IuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QRVJST1IgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUEFSSVRZLmh0bWwjUEFSSVRZIiB0aXRsZT0iUEFSSVRZIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUE9QQ05ULmh0bWwjUE9QQ05UIiB0aXRsZT0iUE9QQ05UIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBFUlJPUiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQT1BDTlQuaHRtbCNQT1BDTlQiPlBPUENOVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBBUklUWS5odG1sI1BBUklUWSI+UEFSSVRZPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE5MSA8Y29kZT5QRVJST1I8L2NvZGU+ICZtZGFzaDsgUHJpbnQgc3lzdGVtIGVycm9yIG1lc3NhZ2U8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1QRVJST1ItOTQwIj48L2E+PGEgbmFtZT0iaW5kZXgtc3lzdGVtXzAwMmMtZXJyb3ItaGFuZGxpbmctOTQxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UHJpbnRzIChvbiB0aGUgQyA8Y29kZT5zdGRlcnI8L2NvZGU+IHN0cmVhbSkgYSBuZXdsaW5lLXRlcm1pbmF0ZWQgZXJyb3IKK21lc3NhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgbGFzdCBzeXN0ZW0gZXJyb3IuIFRoaXMgaXMgcHJlZml4ZWQgYnkKKzx2YXI+U1RSSU5HPC92YXI+LCBhIGNvbG9uIGFuZCBhIHNwYWNlLiBTZWUgPGNvZGU+cGVycm9yKDMpPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIFBFUlJPUihTVFJJTkcpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RSSU5HPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5BIHNjYWxhciBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gYW5kIG9mIHRoZQorZGVmYXVsdCBraW5kLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iSUVSUk5PLmh0bWwjSUVSUk5PIj5JRVJSTk88L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUE9QQ05ULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUE9QQ05ULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5OWJlNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9QT1BDTlQuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QT1BDTlQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUEVSUk9SLmh0bWwjUEVSUk9SIiB0aXRsZT0iUEVSUk9SIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUE9QUEFSLmh0bWwjUE9QUEFSIiB0aXRsZT0iUE9QUEFSIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBPUENOVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQT1BQQVIuaHRtbCNQT1BQQVIiPlBPUFBBUjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBFUlJPUi5odG1sI1BFUlJPUiI+UEVSUk9SPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE5MiA8Y29kZT5QT1BDTlQ8L2NvZGU+ICZtZGFzaDsgTnVtYmVyIG9mIGJpdHMgc2V0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtUE9QQ05ULTk0MiI+PC9hPjxhIG5hbWU9ImluZGV4LWJpbmFyeS1yZXByZXNlbnRhdGlvbi05NDMiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzLXNldC05NDQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5QT1BDTlQoSSk8L2NvZGU+IHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIHNldCAoJzEnIGJpdHMpIGluIHRoZSBiaW5hcnkKK3JlcHJlc2VudGF0aW9uIG9mIDxjb2RlPkk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gUE9QQ05UKEkpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG9mIHRoZSBkZWZhdWx0IGludGVnZXIKK2tpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iUE9QUEFSLmh0bWwjUE9QUEFSIj5QT1BQQVI8L2E+LCA8YSBocmVmPSJMRUFEWi5odG1sI0xFQURaIj5MRUFEWjwvYT4sIDxhIGhyZWY9IlRSQUlMWi5odG1sI1RSQUlMWiI+VFJBSUxaPC9hPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9wb3B1bGF0aW9uCisgICAgICAgICAgICBwcmludCAqLCBwb3BjbnQoMTI3KSwgICAgICAgcG9wcGFyKDEyNykKKyAgICAgICAgICAgIHByaW50ICosIHBvcGNudChodWdlKDBfNCkpLCBwb3BwYXIoaHVnZSgwXzQpKQorICAgICAgICAgICAgcHJpbnQgKiwgcG9wY250KGh1Z2UoMF84KSksIHBvcHBhcihodWdlKDBfOCkpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9wb3B1bGF0aW9uCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1BPUFBBUi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1BPUFBBUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNmY2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUE9QUEFSLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UE9QUEFSIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBPUENOVC5odG1sI1BPUENOVCIgdGl0bGU9IlBPUENOVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlBSRUNJU0lPTi5odG1sI1BSRUNJU0lPTiIgdGl0bGU9IlBSRUNJU0lPTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQT1BQQVIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUFJFQ0lTSU9OLmh0bWwjUFJFQ0lTSU9OIj5QUkVDSVNJT048L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQT1BDTlQuaHRtbCNQT1BDTlQiPlBPUENOVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xOTMgPGNvZGU+UE9QUEFSPC9jb2RlPiAmbWRhc2g7IFBhcml0eSBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtUE9QUEFSLTk0NSI+PC9hPjxhIG5hbWU9ImluZGV4LWJpbmFyeS1yZXByZXNlbnRhdGlvbi05NDYiPjwvYT48YSBuYW1lPSJpbmRleC1wYXJpdHktOTQ3Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+UE9QUEFSKEkpPC9jb2RlPiByZXR1cm5zIHBhcml0eSBvZiB0aGUgaW50ZWdlciA8Y29kZT5JPC9jb2RlPiwgaS5lLiB0aGUgcGFyaXR5CitvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0ICgnMScgYml0cykgaW4gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZgorPGNvZGU+STwvY29kZT4uIEl0IGlzIGVxdWFsIHRvIDAgaWYgPGNvZGU+STwvY29kZT4gaGFzIGFuIGV2ZW4gbnVtYmVyIG9mIGJpdHMgc2V0LAorYW5kIDEgZm9yIGFuIG9kZCBudW1iZXIgb2YgJzEnIGJpdHMuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBQT1BQQVIoSSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YgdGhlIGRlZmF1bHQgaW50ZWdlcgora2luZC4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJQT1BDTlQuaHRtbCNQT1BDTlQiPlBPUENOVDwvYT4sIDxhIGhyZWY9IkxFQURaLmh0bWwjTEVBRFoiPkxFQURaPC9hPiwgPGEgaHJlZj0iVFJBSUxaLmh0bWwjVFJBSUxaIj5UUkFJTFo8L2E+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X3BvcHVsYXRpb24KKyAgICAgICAgICAgIHByaW50ICosIHBvcGNudCgxMjcpLCAgICAgICBwb3BwYXIoMTI3KQorICAgICAgICAgICAgcHJpbnQgKiwgcG9wY250KGh1Z2UoMF80KSksIHBvcHBhcihodWdlKDBfNCkpCisgICAgICAgICAgICBwcmludCAqLCBwb3BjbnQoaHVnZSgwXzgpKSwgcG9wcGFyKGh1Z2UoMF84KSkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X3BvcHVsYXRpb24KKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUFJFQ0lTSU9OLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUFJFQ0lTSU9OLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjNWM2YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9QUkVDSVNJT04uaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QUkVDSVNJT04gLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUE9QUEFSLmh0bWwjUE9QUEFSIiB0aXRsZT0iUE9QUEFSIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUFJFU0VOVC5odG1sI1BSRVNFTlQiIHRpdGxlPSJQUkVTRU5UIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBSRUNJU0lPTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQUkVTRU5ULmh0bWwjUFJFU0VOVCI+UFJFU0VOVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBPUFBBUi5odG1sI1BPUFBBUiI+UE9QUEFSPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE5NCA8Y29kZT5QUkVDSVNJT048L2NvZGU+ICZtZGFzaDsgRGVjaW1hbCBwcmVjaXNpb24gb2YgYSByZWFsIGtpbmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1QUkVDSVNJT04tOTQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW9kZWwtcmVwcmVzZW50YXRpb25fMDAyYy1wcmVjaXNpb24tOTQ5Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+UFJFQ0lTSU9OKFgpPC9jb2RlPiByZXR1cm5zIHRoZSBkZWNpbWFsIHByZWNpc2lvbiBpbiB0aGUgbW9kZWwgb2YgdGhlCit0eXBlIG9mIDxjb2RlPlg8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBQUkVDSVNJT04oWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+IG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YgdGhlIGRlZmF1bHQgaW50ZWdlcgora2luZC4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5EIj5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2E+LCA8YSBocmVmPSJSQU5HRS5odG1sI1JBTkdFIj5SQU5HRTwvYT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHByZWNfYW5kX3JhbmdlCisgICAgICAgICAgICByZWFsKGtpbmQ9NCkgOjogeCgyKQorICAgICAgICAgICAgY29tcGxleChraW5kPTgpIDo6IHkKKyAgICAgICAgICAKKyAgICAgICAgICAgIHByaW50ICosIHByZWNpc2lvbih4KSwgcmFuZ2UoeCkKKyAgICAgICAgICAgIHByaW50ICosIHByZWNpc2lvbih5KSwgcmFuZ2UoeSkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSBwcmVjX2FuZF9yYW5nZQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9QUkVTRU5ULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUFJFU0VOVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZmZkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUFJFU0VOVC5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlBSRVNFTlQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUFJFQ0lTSU9OLmh0bWwjUFJFQ0lTSU9OIiB0aXRsZT0iUFJFQ0lTSU9OIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUFJPRFVDVC5odG1sI1BST0RVQ1QiIHRpdGxlPSJQUk9EVUNUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBSRVNFTlQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUFJPRFVDVC5odG1sI1BST0RVQ1QiPlBST0RVQ1Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQUkVDSVNJT04uaHRtbCNQUkVDSVNJT04iPlBSRUNJU0lPTjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xOTUgPGNvZGU+UFJFU0VOVDwvY29kZT4gJm1kYXNoOyBEZXRlcm1pbmUgd2hldGhlciBhbiBvcHRpb25hbCBkdW1teSBhcmd1bWVudCBpcyBzcGVjaWZpZWQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1QUkVTRU5ULTk1MCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkRldGVybWluZXMgd2hldGhlciBhbiBvcHRpb25hbCBkdW1teSBhcmd1bWVudCBpcyBwcmVzZW50LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBQUkVTRU5UKEEpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+TWF5IGJlIG9mIGFueSB0eXBlIGFuZCBtYXkgYmUgYSBwb2ludGVyLCBzY2FsYXIgb3IgYXJyYXkKK3ZhbHVlLCBvciBhIGR1bW15IHByb2NlZHVyZS4gSXQgc2hhbGwgYmUgdGhlIG5hbWUgb2YgYW4gb3B0aW9uYWwgZHVtbXkgYXJndW1lbnQKK2FjY2Vzc2libGUgd2l0aGluIHRoZSBjdXJyZW50IHN1YnJvdXRpbmUgb3IgZnVuY3Rpb24uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+UmV0dXJucyBlaXRoZXIgPGNvZGU+VFJVRTwvY29kZT4gaWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IDx2YXI+QTwvdmFyPiBpcyBwcmVzZW50LCBvcgorPGNvZGU+RkFMU0U8L2NvZGU+IG90aGVyd2lzZS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfcHJlc2VudAorICAgICAgICAgICAgV1JJVEUoKiwqKSBmKCksIGYoNDIpICAgICAgISAiRiBUIgorICAgICAgICAgIENPTlRBSU5TCisgICAgICAgICAgICBMT0dJQ0FMIEZVTkNUSU9OIGYoeCkKKyAgICAgICAgICAgICAgSU5URUdFUiwgSU5URU5UKElOKSwgT1BUSU9OQUwgOjogeAorICAgICAgICAgICAgICBmID0gUFJFU0VOVCh4KQorICAgICAgICAgICAgRU5EIEZVTkNUSU9OCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUFJPRFVDVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1BST0RVQ1QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTA1M2RiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1BST0RVQ1QuaHRtbApAQCAtMCwwICsxLDk5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QUk9EVUNUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBSRVNFTlQuaHRtbCNQUkVTRU5UIiB0aXRsZT0iUFJFU0VOVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJBRElYLmh0bWwjUkFESVgiIHRpdGxlPSJSQURJWCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQUk9EVUNUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJBRElYLmh0bWwjUkFESVgiPlJBRElYPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUFJFU0VOVC5odG1sI1BSRVNFTlQiPlBSRVNFTlQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTk2IDxjb2RlPlBST0RVQ1Q8L2NvZGU+ICZtZGFzaDsgUHJvZHVjdCBvZiBhcnJheSBlbGVtZW50czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVBST0RVQ1QtOTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1wcm9kdWN0LTk1MiI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtbXVsdGlwbHktZWxlbWVudHMtOTUzIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1jb25kaXRpb25hbGx5LW11bHRpcGx5LWVsZW1lbnRzLTk1NCI+PC9hPjxhIG5hbWU9ImluZGV4LW11bHRpcGx5LWFycmF5LWVsZW1lbnRzLTk1NSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPk11bHRpcGxpZXMgdGhlIGVsZW1lbnRzIG9mIDx2YXI+QVJSQVk8L3Zhcj4gYWxvbmcgZGltZW5zaW9uIDx2YXI+RElNPC92YXI+IGlmCit0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGluIDx2YXI+TUFTSzwvdmFyPiBpcyA8Y29kZT5UUlVFPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBQUk9EVUNUKEFSUkFZWywgTUFTS10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+UkVTVUxUID0gUFJPRFVDVChBUlJBWSwgRElNWywgTUFTS10pPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiwKKzxjb2RlPlJFQUw8L2NvZGU+IG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZQorPGNvZGU+SU5URUdFUjwvY29kZT4gd2l0aCBhIHZhbHVlIGluIHRoZSByYW5nZSBmcm9tIDEgdG8gbiwgd2hlcmUgbgorZXF1YWxzIHRoZSByYW5rIG9mIDx2YXI+QVJSQVk8L3Zhcj4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5NQVNLPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+CithbmQgZWl0aGVyIGJlIGEgc2NhbGFyIG9yIGFuIGFycmF5IG9mIHRoZSBzYW1lIHNoYXBlIGFzIDx2YXI+QVJSQVk8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJlc3VsdCBpcyBvZiB0aGUgc2FtZSB0eXBlIGFzIDx2YXI+QVJSQVk8L3Zhcj4uCisKKyAgICAgPHA+SWYgPHZhcj5ESU08L3Zhcj4gaXMgYWJzZW50LCBhIHNjYWxhciB3aXRoIHRoZSBwcm9kdWN0IG9mIGFsbCBlbGVtZW50cyBpbgorPHZhcj5BUlJBWTwvdmFyPiBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhbiBhcnJheSBvZiByYW5rIG4tMSwgd2hlcmUgbiBlcXVhbHMKK3RoZSByYW5rIG9mIDx2YXI+QVJSQVk8L3Zhcj4sIGFuZCBhIHNoYXBlIHNpbWlsYXIgdG8gdGhhdCBvZiA8dmFyPkFSUkFZPC92YXI+IHdpdGgKK2RpbWVuc2lvbiA8dmFyPkRJTTwvdmFyPiBkcm9wcGVkIGlzIHJldHVybmVkLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9wcm9kdWN0CisgICAgICAgICAgICBJTlRFR0VSIDo6IHgoNSkgPSAoLyAxLCAyLCAzLCA0ICw1IC8pCisgICAgICAgICAgICBwcmludCAqLCBQUk9EVUNUKHgpICAgICAgICAgICAgICAgICAgICAhIGFsbCBlbGVtZW50cywgcHJvZHVjdCA9IDEyMAorICAgICAgICAgICAgcHJpbnQgKiwgUFJPRFVDVCh4LCBNQVNLPU1PRCh4LCAyKT09MSkgISBvZGQgZWxlbWVudHMsIHByb2R1Y3QgPSAxNQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iU1VNLmh0bWwjU1VNIj5TVU08L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUHJlcHJvY2Vzc2luZy1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyOTRmZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9QcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDIxNyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UHJlcHJvY2Vzc2luZyBPcHRpb25zIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiIHRpdGxlPSJGb3J0cmFuIERpYWxlY3QgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIiB0aXRsZT0iRXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXJyb3ItYW5kLVdhcm5pbmctT3B0aW9ucy5odG1sI0Vycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMiPkVycm9yIGFuZCBXYXJuaW5nIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGb3J0cmFuLURpYWxlY3QtT3B0aW9ucy5odG1sI0ZvcnRyYW4tRGlhbGVjdC1PcHRpb25zIj5Gb3J0cmFuIERpYWxlY3QgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iPkludm9raW5nIEdOVSBGb3J0cmFuPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4zIEVuYWJsZSBhbmQgY3VzdG9taXplIHByZXByb2Nlc3Npbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1wcmVwcm9jZXNzb3ItNjIiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zXzAwMmMtcHJlcHJvY2Vzc29yLTYzIj48L2E+PGEgbmFtZT0iaW5kZXgtQ1BQLTY0Ij48L2E+CitQcmVwcm9jZXNzb3IgcmVsYXRlZCBvcHRpb25zLiBTZWUgc2VjdGlvbgorPGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiI+UHJlcHJvY2Vzc2luZyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb248L2E+IGZvciBtb3JlIGRldGFpbGVkCitpbmZvcm1hdGlvbiBvbiBwcmVwcm9jZXNzaW5nIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxkbD4KKzxkdD48Y29kZT4tY3BwPC9jb2RlPjxkdD48Y29kZT4tbm9jcHA8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiY3BwXzAwN2QtNjUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZwcF8wMDdkLTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc29yXzAwMmMtZW5hYmxlLTY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc29yXzAwMmMtZGlzYWJsZS02OCI+PC9hPkVuYWJsZSBwcmVwcm9jZXNzaW5nLiBUaGUgcHJlcHJvY2Vzc29yIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCBpZgordGhlIGZpbGUgZXh0ZW5zaW9uIGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uZnBwPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRlBQPC9zcGFuPjwvc2FtcD4sICA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LkY8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5GT1I8L3NwYW4+PC9zYW1wPiwKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRlROPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRjkwPC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRjk1PC9zcGFuPjwvc2FtcD4sIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRjAzPC9zcGFuPjwvc2FtcD4gb3IgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5GMDg8L3NwYW4+PC9zYW1wPi4gVXNlCit0aGlzIG9wdGlvbiB0byBtYW51YWxseSBlbmFibGUgcHJlcHJvY2Vzc2luZyBvZiBhbnkga2luZCBvZiBGb3J0cmFuIGZpbGUuCisKKyAgICAgPHA+VG8gZGlzYWJsZSBwcmVwcm9jZXNzaW5nIG9mIGZpbGVzIHdpdGggYW55IG9mIHRoZSBhYm92ZSBsaXN0ZWQgZXh0ZW5zaW9ucywKK3VzZSB0aGUgbmVnYXRpdmUgZm9ybTogPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW5vY3BwPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhlIHByZXByb2Nlc3NvciBpcyBydW4gaW4gdHJhZGl0aW9uYWwgbW9kZS4gQW55IHJlc3RyaWN0aW9ucyBvZiB0aGUKK2ZpbGUtZm9ybWF0LCBlc3BlY2lhbGx5IHRoZSBsaW1pdHMgb24gbGluZSBsZW5ndGgsIGFwcGx5IGZvcgorcHJlcHJvY2Vzc2VkIG91dHB1dCBhcyB3ZWxsLCBzbyBpdCBtaWdodCBiZSBhZHZpc2FibGUgdG8gdXNlIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZmcmVlLWxpbmUtbGVuZ3RoLW5vbmU8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZmZpeGVkLWxpbmUtbGVuZ3RoLW5vbmU8L3NwYW4+PC9zYW1wPgorb3B0aW9ucy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1kTTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkTV8wMDdkLTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc29yXzAwMmMtZGVidWdnaW5nLTcwIj48L2E+PGEgbmFtZT0iaW5kZXgtZGVidWdnaW5nXzAwMmMtcHJlcHJvY2Vzc29yLTcxIj48L2E+SW5zdGVhZCBvZiB0aGUgbm9ybWFsIG91dHB1dCwgZ2VuZXJhdGUgYSBsaXN0IG9mIDxjb2RlPicjZGVmaW5lJzwvY29kZT4KK2RpcmVjdGl2ZXMgZm9yIGFsbCB0aGUgbWFjcm9zIGRlZmluZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlCitwcmVwcm9jZXNzb3IsIGluY2x1ZGluZyBwcmVkZWZpbmVkIG1hY3Jvcy4gVGhpcyBnaXZlcyB5b3UgYSB3YXkKK29mIGZpbmRpbmcgb3V0IHdoYXQgaXMgcHJlZGVmaW5lZCBpbiB5b3VyIHZlcnNpb24gb2YgdGhlIHByZXByb2Nlc3Nvci4gCitBc3N1bWluZyB5b3UgaGF2ZSBubyBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5mb28uZjkwPC9zcGFuPjwvc2FtcD4sIHRoZSBjb21tYW5kCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgdG91Y2ggZm9vLmY5MDsgZ2ZvcnRyYW4gLWNwcCAtRSAtZE0gZm9vLmY5MAorPC9wcmU+CisgICAgIDxwPndpbGwgc2hvdyBhbGwgdGhlIHByZWRlZmluZWQgbWFjcm9zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWREPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmREXzAwN2QtNzIiPjwvYT48YSBuYW1lPSJpbmRleC1wcmVwcm9jZXNzb3JfMDAyYy1kZWJ1Z2dpbmctNzMiPjwvYT48YSBuYW1lPSJpbmRleC1kZWJ1Z2dpbmdfMDAyYy1wcmVwcm9jZXNzb3ItNzQiPjwvYT5MaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1kTTwvc3Bhbj48L3NhbXA+IGV4Y2VwdCBpbiB0d28gcmVzcGVjdHM6IGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlCitwcmVkZWZpbmVkIG1hY3JvcywgYW5kIGl0IG91dHB1dHMgYm90aCB0aGUgPGNvZGU+I2RlZmluZTwvY29kZT4gZGlyZWN0aXZlcworYW5kIHRoZSByZXN1bHQgb2YgcHJlcHJvY2Vzc2luZy4gQm90aCBraW5kcyBvZiBvdXRwdXQgZ28gdG8gdGhlCitzdGFuZGFyZCBvdXRwdXQgZmlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1kTjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkTl8wMDdkLTc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc29yXzAwMmMtZGVidWdnaW5nLTc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZGVidWdnaW5nXzAwMmMtcHJlcHJvY2Vzc29yLTc3Ij48L2E+TGlrZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZEQ8L3NwYW4+PC9zYW1wPiwgYnV0IGVtaXQgb25seSB0aGUgbWFjcm8gbmFtZXMsIG5vdCB0aGVpciBleHBhbnNpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWRVPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmRVXzAwN2QtNzgiPjwvYT48YSBuYW1lPSJpbmRleC1wcmVwcm9jZXNzb3JfMDAyYy1kZWJ1Z2dpbmctNzkiPjwvYT48YSBuYW1lPSJpbmRleC1kZWJ1Z2dpbmdfMDAyYy1wcmVwcm9jZXNzb3ItODAiPjwvYT5MaWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPmREPC9zcGFuPjwvc2FtcD4gZXhjZXB0IHRoYXQgb25seSBtYWNyb3MgdGhhdCBhcmUgZXhwYW5kZWQsIG9yIHdob3NlCitkZWZpbmVkbmVzcyBpcyB0ZXN0ZWQgaW4gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFyZSBvdXRwdXQ7IHRoZQorb3V0cHV0IGlzIGRlbGF5ZWQgdW50aWwgdGhlIHVzZSBvciB0ZXN0IG9mIHRoZSBtYWNybzsgYW5kIDxjb2RlPicjdW5kZWYnPC9jb2RlPgorZGlyZWN0aXZlcyBhcmUgYWxzbyBvdXRwdXQgZm9yIG1hY3JvcyB0ZXN0ZWQgYnV0IHVuZGVmaW5lZCBhdCB0aGUgdGltZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1kSTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JkSV8wMDdkLTgxIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc29yXzAwMmMtZGVidWdnaW5nLTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtZGVidWdnaW5nXzAwMmMtcHJlcHJvY2Vzc29yLTgzIj48L2E+T3V0cHV0IDxjb2RlPicjaW5jbHVkZSc8L2NvZGU+IGRpcmVjdGl2ZXMgaW4gYWRkaXRpb24gdG8gdGhlIHJlc3VsdAorb2YgcHJlcHJvY2Vzc2luZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1md29ya2luZy1kaXJlY3Rvcnk8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZndvcmtpbmdfMDAyZGRpcmVjdG9yeV8wMDdkLTg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc29yXzAwMmMtd29ya2luZy1kaXJlY3RvcnktODUiPjwvYT5FbmFibGUgZ2VuZXJhdGlvbiBvZiBsaW5lbWFya2VycyBpbiB0aGUgcHJlcHJvY2Vzc29yIG91dHB1dCB0aGF0IHdpbGwKK2xldCB0aGUgY29tcGlsZXIga25vdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhdCB0aGUgdGltZSBvZgorcHJlcHJvY2Vzc2luZy4gV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgcHJlcHJvY2Vzc29yIHdpbGwgZW1pdCwKK2FmdGVyIHRoZSBpbml0aWFsIGxpbmVtYXJrZXIsIGEgc2Vjb25kIGxpbmVtYXJrZXIgd2l0aCB0aGUgY3VycmVudAord29ya2luZyBkaXJlY3RvcnkgZm9sbG93ZWQgYnkgdHdvIHNsYXNoZXMuIEdDQyB3aWxsIHVzZSB0aGlzIGRpcmVjdG9yeSwKK3doZW4gaXQgaXMgcHJlc2VudCBpbiB0aGUgcHJlcHJvY2Vzc2VkIGlucHV0LCBhcyB0aGUgZGlyZWN0b3J5IGVtaXR0ZWQKK2FzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGluIHNvbWUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvcm1hdHMuIAorVGhpcyBvcHRpb24gaXMgaW1wbGljaXRseSBlbmFibGVkIGlmIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBlbmFibGVkLAorYnV0IHRoaXMgY2FuIGJlIGluaGliaXRlZCB3aXRoIHRoZSBuZWdhdGVkIGZvcm0KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8td29ya2luZy1kaXJlY3Rvcnk8L3NwYW4+PC9zYW1wPi4gSWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1QPC9zcGFuPjwvc2FtcD4gZmxhZyBpcyBwcmVzZW50CitpbiB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LCBzaW5jZSBubyA8Y29kZT4jbGluZTwvY29kZT4KK2RpcmVjdGl2ZXMgYXJlIGVtaXR0ZWQgd2hhdHNvZXZlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pZGlyYWZ0ZXIgPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaWRpcmFmdGVyLV8wMDQwdmFyXzAwN2JkaXJfMDA3ZF8wMDdkLTg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLWluY2x1ZGUtcGF0aC04NyI+PC9hPlNlYXJjaCA8dmFyPmRpcjwvdmFyPiBmb3IgaW5jbHVkZSBmaWxlcywgYnV0IGRvIGl0IGFmdGVyIGFsbCBkaXJlY3Rvcmllcworc3BlY2lmaWVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBhbmQgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcyBoYXZlCitiZWVuIGV4aGF1c3RlZC4gPHZhcj5kaXI8L3Zhcj4gaXMgdHJlYXRlZCBhcyBhIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yeS4gCitJZiBkaXIgYmVnaW5zIHdpdGggPGNvZGU+PTwvY29kZT4sIHRoZW4gdGhlIDxjb2RlPj08L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQgYnkKK3RoZSBzeXNyb290IHByZWZpeDsgc2VlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3lzcm9vdDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4taXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pbXVsdGlsaWIgPC9jb2RlPjx2YXI+ZGlyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiaW11bHRpbGliLV8wMDQwdmFyXzAwN2JkaXJfMDA3ZF8wMDdkLTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLWluY2x1ZGUtcGF0aC04OSI+PC9hPlVzZSA8dmFyPmRpcjwvdmFyPiBhcyBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGFyZ2V0LXNwZWNpZmljCitDKysgaGVhZGVycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pcHJlZml4IDwvY29kZT48dmFyPnByZWZpeDwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlwcmVmaXgtXzAwNDB2YXJfMDA3YnByZWZpeF8wMDdkXzAwN2QtOTAiPjwvYT48YSBuYW1lPSJpbmRleC1wcmVwcm9jZXNzaW5nXzAwMmMtaW5jbHVkZS1wYXRoLTkxIj48L2E+U3BlY2lmeSA8dmFyPnByZWZpeDwvdmFyPiBhcyB0aGUgcHJlZml4IGZvciBzdWJzZXF1ZW50IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1pd2l0aHByZWZpeDwvc3Bhbj48L3NhbXA+CitvcHRpb25zLiBJZiB0aGUgPHZhcj5wcmVmaXg8L3Zhcj4gcmVwcmVzZW50cyBhIGRpcmVjdG9yeSwgeW91IHNob3VsZCBpbmNsdWRlCit0aGUgZmluYWwgPGNvZGU+Jy8nPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1pc3lzcm9vdCA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jpc3lzcm9vdC1fMDA0MHZhcl8wMDdiZGlyXzAwN2RfMDA3ZC05MiI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXByb2Nlc3NpbmdfMDAyYy1pbmNsdWRlLXBhdGgtOTMiPjwvYT5UaGlzIG9wdGlvbiBpcyBsaWtlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBvcHRpb24sIGJ1dCBhcHBsaWVzIG9ubHkgdG8KK2hlYWRlciBmaWxlcy4gU2VlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBvcHRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4taXF1b3RlIDwvY29kZT48dmFyPmRpcjwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmlxdW90ZS1fMDA0MHZhcl8wMDdiZGlyXzAwN2RfMDA3ZC05NCI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXByb2Nlc3NpbmdfMDAyYy1pbmNsdWRlLXBhdGgtOTUiPjwvYT5TZWFyY2ggPHZhcj5kaXI8L3Zhcj4gb25seSBmb3IgaGVhZGVyIGZpbGVzIHJlcXVlc3RlZCB3aXRoIDxjb2RlPiNpbmNsdWRlICJmaWxlIjwvY29kZT47Cit0aGV5IGFyZSBub3Qgc2VhcmNoZWQgZm9yIDxjb2RlPiNpbmNsdWRlICZsdDtmaWxlJmd0OzwvY29kZT4sIGJlZm9yZSBhbGwgZGlyZWN0b3JpZXMKK3NwZWNpZmllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGFuZCBiZWZvcmUgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4gSWYKKzx2YXI+ZGlyPC92YXI+IGJlZ2lucyB3aXRoIDxjb2RlPj08L2NvZGU+LCB0aGVuIHRoZSA8Y29kZT49PC9jb2RlPiB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZQorc3lzcm9vdCBwcmVmaXg7IHNlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlzeXNyb290PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4taXN5c3RlbSA8L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2Jpc3lzdGVtLV8wMDQwdmFyXzAwN2JkaXJfMDA3ZF8wMDdkLTk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLWluY2x1ZGUtcGF0aC05NyI+PC9hPlNlYXJjaCA8dmFyPmRpcjwvdmFyPiBmb3IgaGVhZGVyIGZpbGVzLCBhZnRlciBhbGwgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tSTwvc3Bhbj48L3NhbXA+IGJ1dCBiZWZvcmUgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4gTWFyayBpdCBhcyBhCitzeXN0ZW0gZGlyZWN0b3J5LCBzbyB0aGF0IGl0IGdldHMgdGhlIHNhbWUgc3BlY2lhbCB0cmVhdG1lbnQgYXMgaXMKK2FwcGxpZWQgdG8gdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4gSWYgPHZhcj5kaXI8L3Zhcj4gYmVnaW5zIHdpdGgKKzxjb2RlPj08L2NvZGU+LCB0aGVuIHRoZSA8Y29kZT49PC9jb2RlPiB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBzeXNyb290IHByZWZpeDsKK3NlZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWlzeXNyb290PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tbm9zdGRpbmM8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdibm9zdGRpbmNfMDA3ZC05OCI+PC9hPkRvIG5vdCBzZWFyY2ggdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcyBmb3IgaGVhZGVyIGZpbGVzLiBPbmx5Cit0aGUgZGlyZWN0b3JpZXMgeW91IGhhdmUgc3BlY2lmaWVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUk8L3NwYW4+PC9zYW1wPiBvcHRpb25zIChhbmQgdGhlCitkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZSwgaWYgYXBwcm9wcmlhdGUpIGFyZSBzZWFyY2hlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi11bmRlZjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2J1bmRlZl8wMDdkLTk5Ij48L2E+RG8gbm90IHByZWRlZmluZSBhbnkgc3lzdGVtLXNwZWNpZmljIG9yIEdDQy1zcGVjaWZpYyBtYWNyb3MuIAorVGhlIHN0YW5kYXJkIHByZWRlZmluZWQgbWFjcm9zIHJlbWFpbiBkZWZpbmVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUE8L2NvZGU+PHZhcj5wcmVkaWNhdGU8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+YW5zd2VyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiQV8wMDQwdmFyXzAwN2JwcmVkaWNhdGVfMDA3ZF8wMDNkXzAwNDB2YXJfMDA3YmFuc3dlcl8wMDdkXzAwN2QtMTAwIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLWFzc2VydGlvbi0xMDEiPjwvYT5NYWtlIGFuIGFzc2VydGlvbiB3aXRoIHRoZSBwcmVkaWNhdGUgPHZhcj5wcmVkaWNhdGU8L3Zhcj4gYW5kIGFuc3dlciA8dmFyPmFuc3dlcjwvdmFyPi4gCitUaGlzIGZvcm0gaXMgcHJlZmVycmVkIHRvIHRoZSBvbGRlciBmb3JtIC1BIHByZWRpY2F0ZShhbnN3ZXIpLCB3aGljaCBpcyBzdGlsbAorc3VwcG9ydGVkLCBiZWNhdXNlIGl0IGRvZXMgbm90IHVzZSBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tQS08L2NvZGU+PHZhcj5wcmVkaWNhdGU8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+YW5zd2VyPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiQV8wMDJkXzAwNDB2YXJfMDA3YnByZWRpY2F0ZV8wMDdkXzAwM2RfMDA0MHZhcl8wMDdiYW5zd2VyXzAwN2RfMDA3ZC0xMDIiPjwvYT48YSBuYW1lPSJpbmRleC1wcmVwcm9jZXNzaW5nXzAwMmMtYXNzZXJ0aW9uLTEwMyI+PC9hPkNhbmNlbCBhbiBhc3NlcnRpb24gd2l0aCB0aGUgcHJlZGljYXRlIDx2YXI+cHJlZGljYXRlPC92YXI+IGFuZCBhbnN3ZXIgPHZhcj5hbnN3ZXI8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tQzwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JDXzAwN2QtMTA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLWtlZXAtY29tbWVudHMtMTA1Ij48L2E+RG8gbm90IGRpc2NhcmQgY29tbWVudHMuIEFsbCBjb21tZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dAorZmlsZSwgZXhjZXB0IGZvciBjb21tZW50cyBpbiBwcm9jZXNzZWQgZGlyZWN0aXZlcywgd2hpY2ggYXJlIGRlbGV0ZWQKK2Fsb25nIHdpdGggdGhlIGRpcmVjdGl2ZS4KKworICAgICA8cD5Zb3Ugc2hvdWxkIGJlIHByZXBhcmVkIGZvciBzaWRlIGVmZmVjdHMgd2hlbiB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tQzwvc3Bhbj48L3NhbXA+OyBpdCBjYXVzZXMKK3RoZSBwcmVwcm9jZXNzb3IgdG8gdHJlYXQgY29tbWVudHMgYXMgdG9rZW5zIGluIHRoZWlyIG93biByaWdodC4gRm9yIGV4YW1wbGUsCitjb21tZW50cyBhcHBlYXJpbmcgYXQgdGhlIHN0YXJ0IG9mIHdoYXQgd291bGQgYmUgYSBkaXJlY3RpdmUgbGluZSBoYXZlIHRoZQorZWZmZWN0IG9mIHR1cm5pbmcgdGhhdCBsaW5lIGludG8gYW4gb3JkaW5hcnkgc291cmNlIGxpbmUsIHNpbmNlIHRoZSBmaXJzdAordG9rZW4gb24gdGhlIGxpbmUgaXMgbm8gbG9uZ2VyIGEgPGNvZGU+JyMnPC9jb2RlPi4KKworICAgICA8cD5XYXJuaW5nOiB0aGlzIGN1cnJlbnRseSBoYW5kbGVzIEMtU3R5bGUgY29tbWVudHMgb25seS4gVGhlIHByZXByb2Nlc3NvcgorZG9lcyBub3QgeWV0IHJlY29nbml6ZSBGb3J0cmFuLXN0eWxlIGNvbW1lbnRzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUNDPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkNDXzAwN2QtMTA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLWtlZXAtY29tbWVudHMtMTA3Ij48L2E+RG8gbm90IGRpc2NhcmQgY29tbWVudHMsIGluY2x1ZGluZyBkdXJpbmcgbWFjcm8gZXhwYW5zaW9uLiBUaGlzIGlzIGxpa2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1DPC9zcGFuPjwvc2FtcD4sIGV4Y2VwdCB0aGF0IGNvbW1lbnRzIGNvbnRhaW5lZCB3aXRoaW4gbWFjcm9zIGFyZSBhbHNvIHBhc3NlZAordGhyb3VnaCB0byB0aGUgb3V0cHV0IGZpbGUgd2hlcmUgdGhlIG1hY3JvIGlzIGV4cGFuZGVkLgorCisgICAgIDxwPkluIGFkZGl0aW9uIHRvIHRoZSBzaWRlLWVmZmVjdHMgb2YgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1DPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUNDPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBjYXVzZXMgYWxsIEMrKy1zdHlsZSBjb21tZW50cyBpbnNpZGUgYSBtYWNybyB0byBiZSBjb252ZXJ0ZWQgdG8gQy1zdHlsZQorY29tbWVudHMuIFRoaXMgaXMgdG8gcHJldmVudCBsYXRlciB1c2Ugb2YgdGhhdCBtYWNybyBmcm9tIGluYWR2ZXJ0ZW50bHkKK2NvbW1lbnRpbmcgb3V0IHRoZSByZW1haW5kZXIgb2YgdGhlIHNvdXJjZSBsaW5lLiBUaGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUNDPC9zcGFuPjwvc2FtcD4gb3B0aW9uCitpcyBnZW5lcmFsbHkgdXNlZCB0byBzdXBwb3J0IGxpbnQgY29tbWVudHMuCisKKyAgICAgPHA+V2FybmluZzogdGhpcyBjdXJyZW50bHkgaGFuZGxlcyBDLSBhbmQgQysrLVN0eWxlIGNvbW1lbnRzIG9ubHkuIFRoZQorcHJlcHJvY2Vzc29yIGRvZXMgbm90IHlldCByZWNvZ25pemUgRm9ydHJhbi1zdHlsZSBjb21tZW50cy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1EPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkRfMDA0MHZhcl8wMDdibmFtZV8wMDdkXzAwN2QtMTA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLWRlZmluZS1tYWNyb3MtMTA5Ij48L2E+UHJlZGVmaW5lIG5hbWUgYXMgYSBtYWNybywgd2l0aCBkZWZpbml0aW9uIDxjb2RlPjE8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUQ8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmRlZmluaXRpb248L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JEXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZF8wMDNkXzAwNDB2YXJfMDA3YmRlZmluaXRpb25fMDA3ZF8wMDdkLTExMCI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXByb2Nlc3NpbmdfMDAyYy1kZWZpbmUtbWFjcm9zLTExMSI+PC9hPlRoZSBjb250ZW50cyBvZiA8dmFyPmRlZmluaXRpb248L3Zhcj4gYXJlIHRva2VuaXplZCBhbmQgcHJvY2Vzc2VkIGFzIGlmIHRoZXkKK2FwcGVhcmVkIGR1cmluZyB0cmFuc2xhdGlvbiBwaGFzZSB0aHJlZSBpbiBhIDxjb2RlPicjZGVmaW5lJzwvY29kZT4gZGlyZWN0aXZlLiAKK0luIHBhcnRpY3VsYXIsIHRoZSBkZWZpbml0aW9uIHdpbGwgYmUgdHJ1bmNhdGVkIGJ5IGVtYmVkZGVkIG5ld2xpbmUKK2NoYXJhY3RlcnMuCisKKyAgICAgPHA+SWYgeW91IGFyZSBpbnZva2luZyB0aGUgcHJlcHJvY2Vzc29yIGZyb20gYSBzaGVsbCBvciBzaGVsbC1saWtlIHByb2dyYW0KK3lvdSBtYXkgbmVlZCB0byB1c2UgdGhlIHNoZWxsJ3MgcXVvdGluZyBzeW50YXggdG8gcHJvdGVjdCBjaGFyYWN0ZXJzIHN1Y2gKK2FzIHNwYWNlcyB0aGF0IGhhdmUgYSBtZWFuaW5nIGluIHRoZSBzaGVsbCBzeW50YXguCisKKyAgICAgPHA+SWYgeW91IHdpc2ggdG8gZGVmaW5lIGEgZnVuY3Rpb24tbGlrZSBtYWNybyBvbiB0aGUgY29tbWFuZCBsaW5lLCB3cml0ZQoraXRzIGFyZ3VtZW50IGxpc3Qgd2l0aCBzdXJyb3VuZGluZyBwYXJlbnRoZXNlcyBiZWZvcmUgdGhlIGVxdWFscyBzaWduCisoaWYgYW55KS4gUGFyZW50aGVzZXMgYXJlIG1lYW5pbmdmdWwgdG8gbW9zdCBzaGVsbHMsIHNvIHlvdSB3aWxsIG5lZWQKK3RvIHF1b3RlIHRoZSBvcHRpb24uIFdpdGggc2ggYW5kIGNzaCwgPGNvZGU+LUQnbmFtZShhcmdzLi4uKT1kZWZpbml0aW9uJzwvY29kZT4KK3dvcmtzLgorCisgICAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1EPC9zcGFuPjwvc2FtcD4gYW5kIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1VPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlciB0aGV5IGFyZQorZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gQWxsIC1pbWFjcm9zIGZpbGUgYW5kIC1pbmNsdWRlIGZpbGUgb3B0aW9ucworYXJlIHByb2Nlc3NlZCBhZnRlciBhbGwgLUQgYW5kIC1VIG9wdGlvbnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tSDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JIXzAwN2QtMTEyIj48L2E+UHJpbnQgdGhlIG5hbWUgb2YgZWFjaCBoZWFkZXIgZmlsZSB1c2VkLCBpbiBhZGRpdGlvbiB0byBvdGhlciBub3JtYWwKK2FjdGl2aXRpZXMuIEVhY2ggbmFtZSBpcyBpbmRlbnRlZCB0byBzaG93IGhvdyBkZWVwIGluIHRoZSA8Y29kZT4nI2luY2x1ZGUnPC9jb2RlPgorc3RhY2sgaXQgaXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tUDwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JQXzAwN2QtMTEzIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLW5vLWxpbmVtYXJrZXJzLTExNCI+PC9hPkluaGliaXQgZ2VuZXJhdGlvbiBvZiBsaW5lbWFya2VycyBpbiB0aGUgb3V0cHV0IGZyb20gdGhlIHByZXByb2Nlc3Nvci4gCitUaGlzIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhlIHByZXByb2Nlc3NvciBvbiBzb21ldGhpbmcgdGhhdAoraXMgbm90IEMgY29kZSwgYW5kIHdpbGwgYmUgc2VudCB0byBhIHByb2dyYW0gd2hpY2ggbWlnaHQgYmUgY29uZnVzZWQKK2J5IHRoZSBsaW5lbWFya2Vycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1VPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlVfMDA0MHZhcl8wMDdibmFtZV8wMDdkXzAwN2QtMTE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJlcHJvY2Vzc2luZ18wMDJjLXVuZGVmaW5lLW1hY3Jvcy0xMTYiPjwvYT5DYW5jZWwgYW55IHByZXZpb3VzIGRlZmluaXRpb24gb2YgPHZhcj5uYW1lPC92YXI+LCBlaXRoZXIgYnVpbHQgaW4gb3IgcHJvdmlkZWQKK3dpdGggYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRDwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9QcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2E4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QcmVwcm9jZXNzaW5nIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iIHRpdGxlPSJJbnRyb2R1Y3Rpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJHTlUtRm9ydHJhbi1hbmQtR0NDLmh0bWwjR05VLUZvcnRyYW4tYW5kLUdDQyIgdGl0bGU9IkdOVSBGb3J0cmFuIGFuZCBHQ0MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJHTlUtRm9ydHJhbi1hbmQtRzc3Lmh0bWwjR05VLUZvcnRyYW4tYW5kLUc3NyIgdGl0bGU9IkdOVSBGb3J0cmFuIGFuZCBHNzciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR05VLUZvcnRyYW4tYW5kLUc3Ny5odG1sI0dOVS1Gb3J0cmFuLWFuZC1HNzciPkdOVSBGb3J0cmFuIGFuZCBHNzc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHTlUtRm9ydHJhbi1hbmQtR0NDLmh0bWwjR05VLUZvcnRyYW4tYW5kLUdDQyI+R05VIEZvcnRyYW4gYW5kIEdDQzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJvZHVjdGlvbi5odG1sI0ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4zIFByZXByb2Nlc3NpbmcgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtQ1BQLTQiPjwvYT48YSBuYW1lPSJpbmRleC1GUFAtNSI+PC9hPjxhIG5hbWU9ImluZGV4LUNvbmRpdGlvbmFsLWNvbXBpbGF0aW9uLTYiPjwvYT48YSBuYW1lPSJpbmRleC1QcmVwcm9jZXNzaW5nLTciPjwvYT48YSBuYW1lPSJpbmRleC1wcmVwcm9jZXNzb3JfMDAyYy1pbmNsdWRlLWZpbGUtaGFuZGxpbmctOCI+PC9hPgorTWFueSBGb3J0cmFuIGNvbXBpbGVycyBpbmNsdWRpbmcgR05VIEZvcnRyYW4gYWxsb3cgcGFzc2luZyB0aGUgc291cmNlIGNvZGUKK3Rocm91Z2ggYSBDIHByZXByb2Nlc3NvciAoQ1BQOyBzb21ldGltZXMgYWxzbyBjYWxsZWQgdGhlIEZvcnRyYW4gcHJlcHJvY2Vzc29yLAorRlBQKSB0byBhbGxvdyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uICBJbiB0aGUgY2FzZSBvZiBHTlUgRm9ydHJhbiwKK3RoaXMgaXMgdGhlIEdOVSBDIFByZXByb2Nlc3NvciBpbiB0aGUgdHJhZGl0aW9uYWwgbW9kZS4gIE9uIHN5c3RlbXMgd2l0aAorY2FzZS1wcmVzZXJ2aW5nIGZpbGUgbmFtZXMsIHRoZSBwcmVwcm9jZXNzb3IgaXMgYXV0b21hdGljYWxseSBpbnZva2VkIGlmIHRoZQorZmlsZW5hbWUgZXh0ZW5zaW9uIGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4uRjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LkZPUjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LkZUTjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LmZwcDwvc3Bhbj48L3NhbXA+LAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5GUFA8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5GOTA8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5GOTU8L3NwYW4+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5GMDM8L3NwYW4+PC9zYW1wPiBvciA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+LkYwODwvc3Bhbj48L3NhbXA+LiAgVG8gbWFudWFsbHkKK2ludm9rZSB0aGUgcHJlcHJvY2Vzc29yIG9uIGFueSBmaWxlLCB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWNwcDwvc3Bhbj48L3NhbXA+LCB0byBkaXNhYmxlCitwcmVwcm9jZXNzaW5nIG9uIGZpbGVzIHdoZXJlIHRoZSBwcmVwcm9jZXNzb3IgaXMgcnVuIGF1dG9tYXRpY2FsbHksIHVzZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW5vY3BwPC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPklmIGEgcHJlcHJvY2Vzc2VkIGZpbGUgaW5jbHVkZXMgYW5vdGhlciBmaWxlIHdpdGggdGhlIEZvcnRyYW4gPGNvZGU+SU5DTFVERTwvY29kZT4KK3N0YXRlbWVudCwgdGhlIGluY2x1ZGVkIGZpbGUgaXMgbm90IHByZXByb2Nlc3NlZC4gIFRvIHByZXByb2Nlc3MgaW5jbHVkZWQKK2ZpbGVzLCB1c2UgdGhlIGVxdWl2YWxlbnQgcHJlcHJvY2Vzc29yIHN0YXRlbWVudCA8Y29kZT4jaW5jbHVkZTwvY29kZT4uCisKKyAgIDxwPklmIEdOVSBGb3J0cmFuIGludm9rZXMgdGhlIHByZXByb2Nlc3NvciwgPGNvZGU+X19HRk9SVFJBTl9fPC9jb2RlPgoraXMgZGVmaW5lZCBhbmQgPGNvZGU+X19HTlVDX188L2NvZGU+LCA8Y29kZT5fX0dOVUNfTUlOT1JfXzwvY29kZT4gYW5kCis8Y29kZT5fX0dOVUNfUEFUQ0hMRVZFTF9fPC9jb2RlPiBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHZlcnNpb24gb2YgdGhlCitjb21waWxlci4gIFNlZSA8YSBocmVmPSIuLi9jcHAvaW5kZXguaHRtbCNUb3AiPk92ZXJ2aWV3PC9hPiBmb3IgZGV0YWlscy4KKworICAgPHA+V2hpbGUgQ1BQIGlzIHRoZSBkZS1mYWN0byBzdGFuZGFyZCBmb3IgcHJlcHJvY2Vzc2luZyBGb3J0cmFuIGNvZGUsCitQYXJ0IDMgb2YgdGhlIEZvcnRyYW4gOTUgc3RhbmRhcmQgKElTTy9JRUMgMTUzOS0zOjE5OTgpIGRlZmluZXMKK0NvbmRpdGlvbmFsIENvbXBpbGF0aW9uLCB3aGljaCBpcyBub3Qgd2lkZWx5IHVzZWQgYW5kIG5vdCBkaXJlY3RseQorc3VwcG9ydGVkIGJ5IHRoZSBHTlUgRm9ydHJhbiBjb21waWxlci4gIFlvdSBjYW4gdXNlIHRoZSBwcm9ncmFtIGNvY28KK3RvIHByZXByb2Nlc3Mgc3VjaCBmaWxlcyAoPGEgaHJlZj0iaHR0cDovL3d3dy5kYW5pZWxsbmFnbGUuY29tL2NvY28uaHRtbCI+aHR0cDovL3d3dy5kYW5pZWxsbmFnbGUuY29tL2NvY28uaHRtbDwvYT4pLgorCis8IS0tICAtLT4KKzwhLS0gR05VIEZvcnRyYW4gYW5kIEc3NyAtLT4KKzwhLS0gIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1Byb2plY3QtU3RhdHVzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUHJvamVjdC1TdGF0dXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDhhZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1Byb2plY3QtU3RhdHVzLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByb2plY3QgU3RhdHVzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJvZHVjdGlvbi5odG1sI0ludHJvZHVjdGlvbiIgdGl0bGU9IkludHJvZHVjdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HNzcuaHRtbCNHTlUtRm9ydHJhbi1hbmQtRzc3IiB0aXRsZT0iR05VIEZvcnRyYW4gYW5kIEc3NyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlN0YW5kYXJkcy5odG1sI1N0YW5kYXJkcyIgdGl0bGU9IlN0YW5kYXJkcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQcm9qZWN0LVN0YXR1cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HNzcuaHRtbCNHTlUtRm9ydHJhbi1hbmQtRzc3Ij5HTlUgRm9ydHJhbiBhbmQgRzc3PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cm9kdWN0aW9uLmh0bWwjSW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjUgUHJvamVjdCBTdGF0dXM8L2gzPgorCis8YmxvY2txdW90ZT4KK0FzIHNvb24gYXMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4gY2FuIHBhcnNlIGFsbCBvZiB0aGUgc3RhdGVtZW50cyBjb3JyZWN0bHksCitpdCB3aWxsIGJlIGluIHRoZSAmbGRxdW87bGFydmEmcmRxdW87IHN0YXRlLiAKK1doZW4gd2UgZ2VuZXJhdGUgY29kZSwgdGhlICZsZHF1bztwdXBwYSZyZHF1bzsgc3RhdGUuIAorV2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiBpcyBkb25lLAord2UnbGwgc2VlIGlmIGl0IHdpbGwgYmUgYSBiZWF1dGlmdWwgYnV0dGVyZmx5LAorb3IganVzdCBhIGJpZyBidWcuLi4uCisKKyAgIDxwPiZuZGFzaDtBbmR5IFZhdWdodCwgQXByaWwgMjAwMAorPC9ibG9ja3F1b3RlPgorCisgICA8cD5UaGUgc3RhcnQgb2YgdGhlIEdOVSBGb3J0cmFuIDk1IHByb2plY3Qgd2FzIGFubm91bmNlZCBvbgordGhlIEdDQyBob21lcGFnZSBpbiBNYXJjaCAxOCwgMjAwMAorKGV2ZW4gdGhvdWdoIEFuZHkgaGFkIGFscmVhZHkgYmVlbiB3b3JraW5nIG9uIGl0IGZvciBhIHdoaWxlLAorb2YgY291cnNlKS4KKworICAgPHA+VGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVyIGlzIGFibGUgdG8gY29tcGlsZSBuZWFybHkgYWxsCitzdGFuZGFyZC1jb21wbGlhbnQgRm9ydHJhbiA5NSwgRm9ydHJhbiA5MCwgYW5kIEZvcnRyYW4gNzcgcHJvZ3JhbXMsCitpbmNsdWRpbmcgYSBudW1iZXIgb2Ygc3RhbmRhcmQgYW5kIG5vbi1zdGFuZGFyZCBleHRlbnNpb25zLCBhbmQgY2FuIGJlCit1c2VkIG9uIHJlYWwtd29ybGQgcHJvZ3JhbXMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMKK2luY2x1ZGUgT3Blbk1QLCBDcmF5LXN0eWxlIHBvaW50ZXJzLCBhbmQgc2V2ZXJhbCBGb3J0cmFuIDIwMDMgYW5kIEZvcnRyYW4KKzIwMDggZmVhdHVyZXMsIGluY2x1ZGluZyBUUiAxNTU4MS4gIEhvd2V2ZXIsIGl0IGlzIHN0aWxsIHVuZGVyCitkZXZlbG9wbWVudCBhbmQgaGFzIGEgZmV3IHJlbWFpbmluZyByb3VnaCBlZGdlcy4KKworICAgPHA+QXQgcHJlc2VudCwgdGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVyIHBhc3NlcyB0aGUKKzxhIGhyZWY9Imh0dHA6Ly93d3cuZm9ydHJhbi0yMDAwLmNvbS9Bcm5hdWRSZWNpcGVzL2ZjdnMyMV9mOTUuaHRtbCI+TklTVCBGb3J0cmFuIDc3IFRlc3QgU3VpdGU8L2E+LCBhbmQgcHJvZHVjZXMgYWNjZXB0YWJsZSByZXN1bHRzIG9uIHRoZQorPGEgaHJlZj0iaHR0cDovL3d3dy5uZXRsaWIub3JnL2xhcGFjay9mYXEuaHRtbCMxLjIxIj5MQVBBQ0sgVGVzdCBTdWl0ZTwvYT4uIAorSXQgYWxzbyBwcm92aWRlcyByZXNwZWN0YWJsZSBwZXJmb3JtYW5jZSBvbgordGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cucG9seWhlZHJvbi5jb20vcGIwNS5odG1sIj5Qb2x5aGVkcm9uIEZvcnRyYW4gY29tcGlsZXIgYmVuY2htYXJrczwvYT4gYW5kIHRoZQorPGEgaHJlZj0iaHR0cDovL3d3dy5sbG5sLmdvdi9hc2NpX2JlbmNobWFya3MvYXNjaS9saW1pdGVkL2xmay9SRUFETUUuaHRtbCI+TGl2ZXJtb3JlIEZvcnRyYW4gS2VybmVscyB0ZXN0PC9hPi4gIEl0IGhhcyBiZWVuIHVzZWQgdG8gY29tcGlsZSBhIG51bWJlciBvZgorbGFyZ2UgcmVhbC13b3JsZCBwcm9ncmFtcywgaW5jbHVkaW5nCis8YSBocmVmPSJodHRwOi8vbXlzaXRlLnZlcml6b24ubmV0L3NlcnZlYWxsL21vZW5lLnBkZiI+dGhlIEhJUkxBTSB3ZWF0aGVyLWZvcmVjYXN0aW5nIGNvZGU8L2E+IGFuZAorPGEgaHJlZj0iaHR0cDovL3d3dy50aGVvY2hlbS51d2EuZWR1LmF1L3RvbnRvLyI+dGhlIFRvbnRvIHF1YW50dW0gY2hlbWlzdHJ5IHBhY2thZ2U8L2E+OyBzZWUgPGEgaHJlZj0iaHR0cDovL2djYy5nbnUub3JnL3dpa2kvR2ZvcnRyYW5BcHBzIj5odHRwOi8vZ2NjLmdudS5vcmcvd2lraS9HZm9ydHJhbkFwcHM8L2E+IGZvciBhbgorZXh0ZW5kZWQgbGlzdC4KKworICAgPHA+QW1vbmcgb3RoZXIgdGhpbmdzLCB0aGUgR05VIEZvcnRyYW4gY29tcGlsZXIgaXMgaW50ZW5kZWQgYXMgYSByZXBsYWNlbWVudAorZm9yIEc3Ny4gIEF0IHRoaXMgcG9pbnQsIG5lYXJseSBhbGwgcHJvZ3JhbXMgdGhhdCBjb3VsZCBiZSBjb21waWxlZCB3aXRoCitHNzcgY2FuIGJlIGNvbXBpbGVkIHdpdGggR05VIEZvcnRyYW4sIGFsdGhvdWdoIHRoZXJlIGFyZSBhIGZldyBtaW5vciBrbm93bgorcmVncmVzc2lvbnMuCisKKyAgIDxwPlRoZSBwcmltYXJ5IHdvcmsgcmVtYWluaW5nIHRvIGJlIGRvbmUgb24gR05VIEZvcnRyYW4gZmFsbHMgaW50byB0aHJlZQorY2F0ZWdvcmllczogYnVnIGZpeGluZyAocHJpbWFyaWx5IHJlZ2FyZGluZyB0aGUgdHJlYXRtZW50IG9mIGludmFsaWQgY29kZQorYW5kIHByb3ZpZGluZyB1c2VmdWwgZXJyb3IgbWVzc2FnZXMpLCBpbXByb3ZpbmcgdGhlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMKK2FuZCB0aGUgcGVyZm9ybWFuY2Ugb2YgY29tcGlsZWQgY29kZSwgYW5kIGV4dGVuZGluZyB0aGUgY29tcGlsZXIgdG8gc3VwcG9ydAorZnV0dXJlIHN0YW5kYXJkcyZtZGFzaDtpbiBwYXJ0aWN1bGFyLCBGb3J0cmFuIDIwMDMgYW5kIEZvcnRyYW4gMjAwOC4KKworPCEtLSAgLS0+Cis8IS0tIFN0YW5kYXJkcyAtLT4KKzwhLS0gIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1Byb2plY3RzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUHJvamVjdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGVmMGNlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1Byb2plY3RzLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UHJvamVjdHMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29udHJpYnV0aW5nLmh0bWwjQ29udHJpYnV0aW5nIiB0aXRsZT0iQ29udHJpYnV0aW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29udHJpYnV0b3JzLmh0bWwjQ29udHJpYnV0b3JzIiB0aXRsZT0iQ29udHJpYnV0b3JzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUHJvcG9zZWQtRXh0ZW5zaW9ucy5odG1sI1Byb3Bvc2VkLUV4dGVuc2lvbnMiIHRpdGxlPSJQcm9wb3NlZCBFeHRlbnNpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlByb2plY3RzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlByb3Bvc2VkLUV4dGVuc2lvbnMuaHRtbCNQcm9wb3NlZC1FeHRlbnNpb25zIj5Qcm9wb3NlZCBFeHRlbnNpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29udHJpYnV0b3JzLmh0bWwjQ29udHJpYnV0b3JzIj5Db250cmlidXRvcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb250cmlidXRpbmcuaHRtbCNDb250cmlidXRpbmciPkNvbnRyaWJ1dGluZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPlByb2plY3RzPC9oMz4KKworICAgICA8ZGw+Cis8ZHQ+PGVtPkhlbHAgYnVpbGQgdGhlIHRlc3Qgc3VpdGU8L2VtPjxkZD5Tb2xpY2l0IG1vcmUgY29kZSBmb3IgZG9uYXRpb24gdG8gdGhlIHRlc3Qgc3VpdGU6IHRoZSBtb3JlIGV4dGVuc2l2ZSB0aGUKK3Rlc3RzdWl0ZSwgdGhlIHNtYWxsZXIgdGhlIHJpc2sgb2YgYnJlYWtpbmcgdGhpbmdzIGluIHRoZSBmdXR1cmUhIFdlIGNhbgora2VlcCBjb2RlIHByaXZhdGUgb24gcmVxdWVzdC4KKworICAgICA8YnI+PGR0PjxlbT5CdWcgaHVudGluZy9zcXVpc2hpbmc8L2VtPjxkZD5GaW5kIGJ1Z3MgYW5kIHdyaXRlIG1vcmUgdGVzdCBjYXNlcyEgVGVzdCBjYXNlcyBhcmUgZXNwZWNpYWxseSB2ZXJ5Cit3ZWxjb21lLCBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byBjb25jZW50cmF0ZSBvbiBmaXhpbmcgYnVncyBpbnN0ZWFkIG9mCitpc29sYXRpbmcgdGhlbS4gIEdvaW5nIHRocm91Z2ggdGhlIGJ1Z3ppbGxhIGRhdGFiYXNlIGF0Cis8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvIj5odHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvPC9hPiB0byByZWR1Y2UgdGVzdGNhc2VzIHBvc3RlZCB0aGVyZSBhbmQKK2FkZCBtb3JlIGluZm9ybWF0aW9uIChmb3IgZXhhbXBsZSwgZm9yIHdoaWNoIHZlcnNpb24gZG9lcyB0aGUgdGVzdGNhc2UKK3dvcmssIGZvciB3aGljaCB2ZXJzaW9ucyBkb2VzIGl0IGZhaWw/KSBpcyBhbHNvIHZlcnkgaGVscGZ1bC4KKworPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1Byb3Bvc2VkLUV4dGVuc2lvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Qcm9wb3NlZC1FeHRlbnNpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwM2I2MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Qcm9wb3NlZC1FeHRlbnNpb25zLmh0bWwKQEAgLTAsMCArMSwxMjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByb3Bvc2VkIEV4dGVuc2lvbnMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29udHJpYnV0aW5nLmh0bWwjQ29udHJpYnV0aW5nIiB0aXRsZT0iQ29udHJpYnV0aW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUHJvamVjdHMuaHRtbCNQcm9qZWN0cyIgdGl0bGU9IlByb2plY3RzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlByb3Bvc2VkLUV4dGVuc2lvbnMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQcm9qZWN0cy5odG1sI1Byb2plY3RzIj5Qcm9qZWN0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbnRyaWJ1dGluZy5odG1sI0NvbnRyaWJ1dGluZyI+Q29udHJpYnV0aW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+UHJvcG9zZWQgRXh0ZW5zaW9uczwvaDM+CisKKzxwPkhlcmUncyBhIGxpc3Qgb2YgcHJvcG9zZWQgZXh0ZW5zaW9ucyBmb3IgdGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVyLCBpbiBubyBwYXJ0aWN1bGFyCitvcmRlci4gIE1vc3Qgb2YgdGhlc2UgYXJlIG5lY2Vzc2FyeSB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGgKK2V4aXN0aW5nIEZvcnRyYW4gY29tcGlsZXJzLCBidXQgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhlIG9mZmljaWFsCitKMyBGb3J0cmFuIDk1IHN0YW5kYXJkLgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPkNvbXBpbGVyIGV4dGVuc2lvbnM6PC9oND4KKworICAgICA8dWw+Cis8bGk+VXNlci1zcGVjaWZpZWQgYWxpZ25tZW50IHJ1bGVzIGZvciBzdHJ1Y3R1cmVzLgorCisgICAgIDxsaT5BdXRvbWF0aWNhbGx5IGV4dGVuZCBzaW5nbGUgcHJlY2lzaW9uIGNvbnN0YW50cyB0byBkb3VibGUuCisKKyAgICAgPGxpPkNvbXBpbGUgY29kZSB0aGF0IGNvbnNlcnZlcyBtZW1vcnkgYnkgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBjb21tb24gYW5kCittb2R1bGUgc3RvcmFnZSBlaXRoZXIgb24gc3RhY2sgb3IgaGVhcC4KKworICAgICA8bGk+Q29tcGlsZSBmbGFnIHRvIGdlbmVyYXRlIGNvZGUgZm9yIGFycmF5IGNvbmZvcm1hbmNlIGNoZWNraW5nIChzdWdnZXN0IC1DQykuCisKKyAgICAgPGxpPlVzZXIgY29udHJvbCBvZiBzeW1ib2wgbmFtZXMgKHVuZGVyc2NvcmVzLCBldGMpLgorCisgICAgIDxsaT5Db21waWxlIHNldHRpbmcgZm9yIG1heGltdW0gc2l6ZSBvZiBzdGFjayBmcmFtZSBzaXplIGJlZm9yZSBzcGlsbGluZworcGFydHMgdG8gc3RhdGljIG9yIGhlYXAuCisKKyAgICAgPGxpPkZsYWcgdG8gZm9yY2UgbG9jYWwgdmFyaWFibGVzIGludG8gc3RhdGljIHNwYWNlLgorCisgICAgIDxsaT5GbGFnIHRvIGZvcmNlIGxvY2FsIHZhcmlhYmxlcyBvbnRvIHN0YWNrLiAKKzwvdWw+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+RW52aXJvbm1lbnQgT3B0aW9uczwvaDQ+CisKKyAgICAgPHVsPgorPGxpPlBsdWdnYWJsZSBsaWJyYXJ5IG1vZHVsZXMgZm9yIHJhbmRvbSBudW1iZXJzLCBsaW5lYXIgYWxnZWJyYS4gCitMQSBzaG91bGQgdXNlIEJMQVMgY2FsbGluZyBjb252ZW50aW9ucy4KKworICAgICA8bGk+RW52aXJvbm1lbnQgdmFyaWFibGVzIGNvbnRyb2xsaW5nIGFjdGlvbnMgb24gYXJpdGhtZXRpYyBleGNlcHRpb25zIGxpa2UKK292ZXJmbG93LCB1bmRlcmZsb3csIHByZWNpc2lvbiBsb3NzJm1kYXNoO0dlbmVyYXRlIE5hTiwgYWJvcnQsIGRlZmF1bHQuIAorYWN0aW9uLgorCisgICAgIDxsaT5TZXQgcHJlY2lzaW9uIGZvciBmcCB1bml0cyB0aGF0IHN1cHBvcnQgaXQgKGkzODcpLgorCisgICAgIDxsaT5WYXJpYWJsZSBmb3Igc2V0dGluZyBmcCByb3VuZGluZyBtb2RlLgorCisgICAgIDxsaT5WYXJpYWJsZSB0byBmaWxsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHdpdGggYSB1c2VyLWRlZmluZWQgYml0CitwYXR0ZXJuLgorCisgICAgIDxsaT5FbnZpcm9ubWVudCB2YXJpYWJsZSBjb250cm9sbGluZyBmaWxlbmFtZSB0aGF0IGlzIG9wZW5lZCBmb3IgdGhhdCB1bml0CitudW1iZXIuCisKKyAgICAgPGxpPkVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNsZWFyL3RyYXNoIG1lbW9yeSBiZWluZyBmcmVlZC4KKworICAgICA8bGk+RW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY29udHJvbCB0cmFjaW5nIG9mIGFsbG9jYXRpb25zIGFuZCBmcmVlcy4KKworICAgICA8bGk+RW52aXJvbm1lbnQgdmFyaWFibGUgdG8gZGlzcGxheSBhbGxvY2F0ZWQgbWVtb3J5IGF0IG5vcm1hbCBwcm9ncmFtIGVuZC4KKworICAgICA8bGk+RW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGZpbGVuYW1lIGZvciAqIElPLXVuaXQuCisKKyAgICAgPGxpPkVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0ZW1wb3JhcnkgZmlsZSBkaXJlY3RvcnkuCisKKyAgICAgPGxpPkVudmlyb25tZW50IHZhcmlhYmxlIGZvcmNpbmcgc3RhbmRhcmQgb3V0cHV0IHRvIGJlIGxpbmUgYnVmZmVyZWQgKFVuaXgpLgorCis8L3VsPgorCis8IS0tICAtLT4KKzwhLS0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgLS0+Cis8IS0tICAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQURJWC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JBRElYLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5NzhlMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQURJWC5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJBRElYIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBST0RVQ1QuaHRtbCNQUk9EVUNUIiB0aXRsZT0iUFJPRFVDVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJBTi5odG1sI1JBTiIgdGl0bGU9IlJBTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSQURJWCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSQU4uaHRtbCNSQU4iPlJBTjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBST0RVQ1QuaHRtbCNQUk9EVUNUIj5QUk9EVUNUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjE5NyA8Y29kZT5SQURJWDwvY29kZT4gJm1kYXNoOyBCYXNlIG9mIGEgbW9kZWwgbnVtYmVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtUkFESVgtOTU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW9kZWwtcmVwcmVzZW50YXRpb25fMDAyYy1iYXNlLTk1NyI+PC9hPjxhIG5hbWU9ImluZGV4LW1vZGVsLXJlcHJlc2VudGF0aW9uXzAwMmMtcmFkaXgtOTU4Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+UkFESVgoWCk8L2NvZGU+IHJldHVybnMgdGhlIGJhc2Ugb2YgdGhlIG1vZGVsIHJlcHJlc2VudGluZyB0aGUgZW50aXR5IDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gUkFESVgoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9yIDxjb2RlPlJFQUw8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgZGVmYXVsdAoraW50ZWdlciBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlNFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQiPlNFTEVDVEVEX1JFQUxfS0lORDwvYT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfcmFkaXgKKyAgICAgICAgICAgIHByaW50ICosICJUaGUgcmFkaXggZm9yIHRoZSBkZWZhdWx0IGludGVnZXIga2luZCBpcyIsIHJhZGl4KDApCisgICAgICAgICAgICBwcmludCAqLCAiVGhlIHJhZGl4IGZvciB0aGUgZGVmYXVsdCByZWFsIGtpbmQgaXMiLCByYWRpeCgwLjApCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9yYWRpeAorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTkxMzNlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JBTi5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJBTiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSQURJWC5odG1sI1JBRElYIiB0aXRsZT0iUkFESVgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSQU5ELmh0bWwjUkFORCIgdGl0bGU9IlJBTkQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUkFOIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJBTkQuaHRtbCNSQU5EIj5SQU5EPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUkFESVguaHRtbCNSQURJWCI+UkFESVg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMTk4IDxjb2RlPlJBTjwvY29kZT4gJm1kYXNoOyBSZWFsIHBzZXVkby1yYW5kb20gbnVtYmVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtUkFOLTk1OSI+PC9hPjxhIG5hbWU9ImluZGV4LXJhbmRvbS1udW1iZXItZ2VuZXJhdGlvbi05NjAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5Gb3IgY29tcGF0aWJpbGl0eSB3aXRoIEhQIEZPUlRSQU4gNzcvaVgsIHRoZSA8Y29kZT5SQU48L2NvZGU+IGludHJpbnNpYyBpcworcHJvdmlkZWQgYXMgYW4gYWxpYXMgZm9yIDxjb2RlPlJBTkQ8L2NvZGU+LiAgU2VlIDxhIGhyZWY9IlJBTkQuaHRtbCNSQU5EIj5SQU5EPC9hPiBmb3IgY29tcGxldGUKK2RvY3VtZW50YXRpb24uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iUkFORC5odG1sI1JBTkQiPlJBTkQ8L2E+LCA8YSBocmVmPSJSQU5ET01fMDA1Zk5VTUJFUi5odG1sI1JBTkRPTV8wMDVmTlVNQkVSIj5SQU5ET01fTlVNQkVSPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JBTkQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU5ELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlODk2MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU5ELmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UkFORCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSQU4uaHRtbCNSQU4iIHRpdGxlPSJSQU4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSQU5ET01fMDA1Zk5VTUJFUi5odG1sI1JBTkRPTV8wMDVmTlVNQkVSIiB0aXRsZT0iUkFORE9NX05VTUJFUiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSQU5EIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJBTkRPTV8wMDVmTlVNQkVSLmh0bWwjUkFORE9NXzAwNWZOVU1CRVIiPlJBTkRPTV9OVU1CRVI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSQU4uaHRtbCNSQU4iPlJBTjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xOTkgPGNvZGU+UkFORDwvY29kZT4gJm1kYXNoOyBSZWFsIHBzZXVkby1yYW5kb20gbnVtYmVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtUkFORC05NjEiPjwvYT48YSBuYW1lPSJpbmRleC1yYW5kb20tbnVtYmVyLWdlbmVyYXRpb24tOTYyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+UkFORChGTEFHKTwvY29kZT4gcmV0dXJucyBhIHBzZXVkby1yYW5kb20gbnVtYmVyIGZyb20gYSB1bmlmb3JtCitkaXN0cmlidXRpb24gYmV0d2VlbiAwIGFuZCAxLiBJZiA8dmFyPkZMQUc8L3Zhcj4gaXMgMCwgdGhlIG5leHQgbnVtYmVyCitpbiB0aGUgY3VycmVudCBzZXF1ZW5jZSBpcyByZXR1cm5lZDsgaWYgPHZhcj5GTEFHPC92YXI+IGlzIDEsIHRoZSBnZW5lcmF0b3IKK2lzIHJlc3RhcnRlZCBieSA8Y29kZT5DQUxMIFNSQU5EKDApPC9jb2RlPjsgaWYgPHZhcj5GTEFHPC92YXI+IGhhcyBhbnkgb3RoZXIgdmFsdWUsCitpdCBpcyB1c2VkIGFzIGEgbmV3IHNlZWQgd2l0aCA8Y29kZT5TUkFORDwvY29kZT4uCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgcm91dGluZSBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorR05VIEZvcnRyYW4gNzcuIEl0IGltcGxlbWVudHMgYSBzaW1wbGUgbW9kdWxvIGdlbmVyYXRvciBhcyBwcm92aWRlZAorYnkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmc3Nzwvc3Bhbj48L3NhbXA+LiBGb3IgbmV3IGNvZGUsIG9uZSBzaG91bGQgY29uc2lkZXIgdGhlIHVzZSBvZgorPGEgaHJlZj0iUkFORE9NXzAwNWZOVU1CRVIuaHRtbCNSQU5ET01fMDA1Zk5VTUJFUiI+UkFORE9NX05VTUJFUjwvYT4gYXMgaXQgaW1wbGVtZW50cyBhIHN1cGVyaW9yIGFsZ29yaXRobS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gUkFORChJKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+IG9mIGtpbmQgNC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIDxjb2RlPlJFQUw8L2NvZGU+IHR5cGUgYW5kIHRoZSBkZWZhdWx0IGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X3JhbmQKKyAgICAgICAgICAgIGludGVnZXIscGFyYW1ldGVyIDo6IHNlZWQgPSA4NjQ1NgorICAgICAgICAgIAorICAgICAgICAgICAgY2FsbCBzcmFuZChzZWVkKQorICAgICAgICAgICAgcHJpbnQgKiwgcmFuZCgpLCByYW5kKCksIHJhbmQoKSwgcmFuZCgpCisgICAgICAgICAgICBwcmludCAqLCByYW5kKHNlZWQpLCByYW5kKCksIHJhbmQoKSwgcmFuZCgpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9yYW5kCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iU1JBTkQuaHRtbCNTUkFORCI+U1JBTkQ8L2E+LCA8YSBocmVmPSJSQU5ET01fMDA1Zk5VTUJFUi5odG1sI1JBTkRPTV8wMDVmTlVNQkVSIj5SQU5ET01fTlVNQkVSPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkFORE9NXzAwNWZOVU1CRVIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU5ET01fMDA1Zk5VTUJFUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYmM2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkFORE9NXzAwNWZOVU1CRVIuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UkFORE9NX05VTUJFUiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSQU5ELmh0bWwjUkFORCIgdGl0bGU9IlJBTkQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSQU5ET01fMDA1ZlNFRUQuaHRtbCNSQU5ET01fMDA1ZlNFRUQiIHRpdGxlPSJSQU5ET01fU0VFRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSQU5ET01fTlVNQkVSIj48L2E+Cis8YSBuYW1lPSJSQU5ET01fMDA1Zk5VTUJFUiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSQU5ET01fMDA1ZlNFRUQuaHRtbCNSQU5ET01fMDA1ZlNFRUQiPlJBTkRPTV9TRUVEPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUkFORC5odG1sI1JBTkQiPlJBTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjAwIDxjb2RlPlJBTkRPTV9OVU1CRVI8L2NvZGU+ICZtZGFzaDsgUHNldWRvLXJhbmRvbSBudW1iZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1SQU5ET01fMDA1Zk5VTUJFUi05NjMiPjwvYT48YSBuYW1lPSJpbmRleC1yYW5kb20tbnVtYmVyLWdlbmVyYXRpb24tOTY0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyBhIHNpbmdsZSBwc2V1ZG9yYW5kb20gbnVtYmVyIG9yIGFuIGFycmF5IG9mIHBzZXVkb3JhbmRvbSBudW1iZXJzCitmcm9tIHRoZSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvdmVyIHRoZSByYW5nZSAgMCBcbGVxIHggJmx0OyAxLgorCisgICAgIDxwPlRoZSBydW50aW1lLWxpYnJhcnkgaW1wbGVtZW50cyBHZW9yZ2UgTWFyc2FnbGlhJ3MgS0lTUyAoS2VlcCBJdCBTaW1wbGUKK1N0dXBpZCkgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKFJORykuIFRoaXMgUk5HIGNvbWJpbmVzOgorICAgICAgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5UaGUgY29uZ3J1ZW50aWFsIGdlbmVyYXRvciB4KG4pID0gNjkwNjkgXGNkb3QgeChuLTEpICsgMTMyNzIxNzg4NQord2l0aCBhIHBlcmlvZCBvZiAyXjMyLAorPGxpPkEgMy1zaGlmdCBzaGlmdC1yZWdpc3RlciBnZW5lcmF0b3Igd2l0aCBhIHBlcmlvZCBvZiAyXjMyIC0gMSwKKzxsaT5Ud28gMTYtYml0IG11bHRpcGx5LXdpdGgtY2FycnkgZ2VuZXJhdG9ycyB3aXRoIGEgcGVyaW9kIG9mCis1OTcyNzMxODI5NjQ4NDI0OTcgJmd0OyAyXjU5LgorICAgICAgICAgIDwvb2w+CitUaGUgb3ZlcmFsbCBwZXJpb2QgZXhjZWVkcyAyXjEyMy4KKworICAgICA8cD5QbGVhc2Ugbm90ZSwgdGhpcyBSTkcgaXMgdGhyZWFkIHNhZmUgaWYgdXNlZCB3aXRoaW4gT3Blbk1QIGRpcmVjdGl2ZXMsCitpLmUuLCBpdHMgc3RhdGUgd2lsbCBiZSBjb25zaXN0ZW50IHdoaWxlIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMuIAorSG93ZXZlciwgdGhlIEtJU1MgZ2VuZXJhdG9yIGRvZXMgbm90IGNyZWF0ZSByYW5kb20gbnVtYmVycyBpbiBwYXJhbGxlbAorZnJvbSBtdWx0aXBsZSBzb3VyY2VzLCBidXQgaW4gc2VxdWVuY2UgZnJvbSBhIHNpbmdsZSBzb3VyY2UuIElmIGFuCitPcGVuTVAtZW5hYmxlZCBhcHBsaWNhdGlvbiBoZWF2aWx5IHJlbGllcyBvbiByYW5kb20gbnVtYmVycywgb25lIHNob3VsZAorY29uc2lkZXIgZW1wbG95aW5nIGEgZGVkaWNhdGVkIHBhcmFsbGVsIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGluc3RlYWQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJBTkRPTV9OVU1CRVIoSEFSVkVTVCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5IQVJWRVNUPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvciBhbiBhcnJheSBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X3JhbmRvbV9udW1iZXIKKyAgICAgICAgICAgIFJFQUwgOjogcig1LDUpCisgICAgICAgICAgICBDQUxMIGluaXRfcmFuZG9tX3NlZWQoKSAgICAgICAgICEgc2VlIGV4YW1wbGUgb2YgUkFORE9NX1NFRUQKKyAgICAgICAgICAgIENBTEwgUkFORE9NX05VTUJFUihyKQorICAgICAgICAgIGVuZCBwcm9ncmFtCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iUkFORE9NXzAwNWZTRUVELmh0bWwjUkFORE9NXzAwNWZTRUVEIj5SQU5ET01fU0VFRDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU5ET01fMDA1ZlNFRUQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU5ET01fMDA1ZlNFRUQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTZmZDgzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JBTkRPTV8wMDVmU0VFRC5odG1sCkBAIC0wLDAgKzEsMTQzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SQU5ET01fU0VFRCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSQU5ET01fMDA1Zk5VTUJFUi5odG1sI1JBTkRPTV8wMDVmTlVNQkVSIiB0aXRsZT0iUkFORE9NX05VTUJFUiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJBTkdFLmh0bWwjUkFOR0UiIHRpdGxlPSJSQU5HRSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSQU5ET01fU0VFRCI+PC9hPgorPGEgbmFtZT0iUkFORE9NXzAwNWZTRUVEIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJBTkdFLmh0bWwjUkFOR0UiPlJBTkdFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUkFORE9NXzAwNWZOVU1CRVIuaHRtbCNSQU5ET01fMDA1Zk5VTUJFUiI+UkFORE9NX05VTUJFUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMDEgPGNvZGU+UkFORE9NX1NFRUQ8L2NvZGU+ICZtZGFzaDsgSW5pdGlhbGl6ZSBhIHBzZXVkby1yYW5kb20gbnVtYmVyIHNlcXVlbmNlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtUkFORE9NXzAwNWZTRUVELTk2NSI+PC9hPjxhIG5hbWU9ImluZGV4LXJhbmRvbS1udW1iZXItZ2VuZXJhdGlvbl8wMDJjLXNlZWRpbmctOTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VlZGluZy1hLXJhbmRvbS1udW1iZXItZ2VuZXJhdG9yLTk2NyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJlc3RhcnRzIG9yIHF1ZXJpZXMgdGhlIHN0YXRlIG9mIHRoZSBwc2V1ZG9yYW5kb20gbnVtYmVyIGdlbmVyYXRvciB1c2VkIGJ5Cis8Y29kZT5SQU5ET01fTlVNQkVSPC9jb2RlPi4KKworICAgICA8cD5JZiA8Y29kZT5SQU5ET01fU0VFRDwvY29kZT4gaXMgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLCBpdCBpcyBpbml0aWFsaXplZAordG8gYSBkZWZhdWx0IHN0YXRlLiBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgdG8gaW5pdGlhbGl6ZSB0aGUKK3JhbmRvbSBzZWVkIHdpdGggYSB2YXJ5aW5nIHNlZWQgaW4gb3JkZXIgdG8gZW5zdXJlIGEgZGlmZmVyZW50IHJhbmRvbQorbnVtYmVyIHNlcXVlbmNlIGZvciBlYWNoIGludm9jYXRpb24gb2YgdGhlIHByb2dyYW0uIE5vdGUgdGhhdCBzZXR0aW5nCithbnkgb2YgdGhlIHNlZWQgdmFsdWVzIHRvIHplcm8gc2hvdWxkIGJlIGF2b2lkZWQgYXMgaXQgY2FuIHJlc3VsdCBpbgorcG9vciBxdWFsaXR5IHJhbmRvbSBudW1iZXJzIGJlaW5nIGdlbmVyYXRlZC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBSQU5ET01fU0VFRChbU0laRSwgUFVULCBHRVRdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNJWkU8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgYSBzY2FsYXIgYW5kIG9mIHR5cGUgZGVmYXVsdAorPGNvZGU+SU5URUdFUjwvY29kZT4sIHdpdGggPGNvZGU+SU5URU5UKE9VVCk8L2NvZGU+LiBJdCBzcGVjaWZpZXMgdGhlIG1pbmltdW0gc2l6ZQorb2YgdGhlIGFycmF5cyB1c2VkIHdpdGggdGhlIDx2YXI+UFVUPC92YXI+IGFuZCA8dmFyPkdFVDwvdmFyPiBhcmd1bWVudHMuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5QVVQ8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGFuIGFycmF5IG9mIHR5cGUgZGVmYXVsdAorPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIHJhbmsgb25lLiBJdCBpcyA8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPiBhbmQgdGhlIHNpemUgb2YKK3RoZSBhcnJheSBtdXN0IGJlIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgdGhlCis8dmFyPlNJWkU8L3Zhcj4gYXJndW1lbnQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5HRVQ8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGFuIGFycmF5IG9mIHR5cGUgZGVmYXVsdAorPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIHJhbmsgb25lLiBJdCBpcyA8Y29kZT5JTlRFTlQoT1VUKTwvY29kZT4gYW5kIHRoZSBzaXplCitvZiB0aGUgYXJyYXkgbXVzdCBiZSBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIHJldHVybmVkIGJ5Cit0aGUgPHZhcj5TSVpFPC92YXI+IGFyZ3VtZW50LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgc3Vicm91dGluZSBpbml0X3JhbmRvbV9zZWVkKCkKKyAgICAgICAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgICAgICAgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IHNlZWQoOikKKyAgICAgICAgICAgIGludGVnZXIgOjogaSwgbiwgdW4sIGlzdGF0LCBkdCg4KSwgcGlkLCB0KDIpLCBzCisgICAgICAgICAgICBpbnRlZ2VyKDgpIDo6IGNvdW50LCB0bXMKKyAgICAgICAgICAKKyAgICAgICAgICAgIGNhbGwgcmFuZG9tX3NlZWQoc2l6ZSA9IG4pCisgICAgICAgICAgICBhbGxvY2F0ZShzZWVkKG4pKQorICAgICAgICAgICAgISBGaXJzdCB0cnkgaWYgdGhlIE9TIHByb3ZpZGVzIGEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAgICAgIG9wZW4obmV3dW5pdD11biwgZmlsZT0iL2Rldi91cmFuZG9tIiwgYWNjZXNzPSJzdHJlYW0iLCAmYW1wOworICAgICAgICAgICAgICAgICBmb3JtPSJ1bmZvcm1hdHRlZCIsIGFjdGlvbj0icmVhZCIsIHN0YXR1cz0ib2xkIiwgaW9zdGF0PWlzdGF0KQorICAgICAgICAgICAgaWYgKGlzdGF0ID09IDApIHRoZW4KKyAgICAgICAgICAgICAgIHJlYWQodW4pIHNlZWQKKyAgICAgICAgICAgICAgIGNsb3NlKHVuKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgISBGYWxsYmFjayB0byBYT1I6aW5nIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBpZC4gVGhlIFBJRCBpcworICAgICAgICAgICAgICAgISB1c2VmdWwgaW4gY2FzZSBvbmUgbGF1bmNoZXMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lCisgICAgICAgICAgICAgICAhIHByb2dyYW0gaW4gcGFyYWxsZWwuCisgICAgICAgICAgICAgICBjYWxsIHN5c3RlbV9jbG9jayhjb3VudCkKKyAgICAgICAgICAgICAgIGlmIChjb3VudCAvPSAwKSB0aGVuCisgICAgICAgICAgICAgICAgICB0ID0gdHJhbnNmZXIoY291bnQsIHQpCisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjYWxsIGRhdGVfYW5kX3RpbWUodmFsdWVzPWR0KQorICAgICAgICAgICAgICAgICAgdG1zID0gKGR0KDEpIC0gMTk3MCkgKiAzNjVfOCAqIDI0ICogNjAgKiA2MCAqIDEwMDAgJmFtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgKyBkdCgyKSAqIDMxXzggKiAyNCAqIDYwICogNjAgKiAxMDAwICZhbXA7CisgICAgICAgICAgICAgICAgICAgICAgICsgZHQoMykgKiAyNCAqIDYwICogNjAgKiA2MCAqIDEwMDAgJmFtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgKyBkdCg1KSAqIDYwICogNjAgKiAxMDAwICZhbXA7CisgICAgICAgICAgICAgICAgICAgICAgICsgZHQoNikgKiA2MCAqIDEwMDAgKyBkdCg3KSAqIDEwMDAgJmFtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgKyBkdCg4KQorICAgICAgICAgICAgICAgICAgdCA9IHRyYW5zZmVyKHRtcywgdCkKKyAgICAgICAgICAgICAgIGVuZCBpZgorICAgICAgICAgICAgICAgcyA9IGllb3IodCgxKSwgdCgyKSkKKyAgICAgICAgICAgICAgIHBpZCA9IGdldHBpZCgpICsgMTA5OTI3OSAhIEFkZCBhIHByaW1lCisgICAgICAgICAgICAgICBzID0gaWVvcihzLCBwaWQpCisgICAgICAgICAgICAgICBpZiAobiAmZ3Q7PSAzKSB0aGVuCisgICAgICAgICAgICAgICAgICBzZWVkKDEpID0gdCgxKSArIDM2MjY5CisgICAgICAgICAgICAgICAgICBzZWVkKDIpID0gdCgyKSArIDcyNTUxCisgICAgICAgICAgICAgICAgICBzZWVkKDMpID0gcGlkCisgICAgICAgICAgICAgICAgICBpZiAobiAmZ3Q7IDMpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgIHNlZWQoNDopID0gcyArIDM3ICogKC8gKGksIGkgPSAwLCBuIC0gNCkgLykKKyAgICAgICAgICAgICAgICAgIGVuZCBpZgorICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc2VlZCA9IHMgKyAzNyAqICgvIChpLCBpID0gMCwgbiAtIDEgKSAvKQorICAgICAgICAgICAgICAgZW5kIGlmCisgICAgICAgICAgICBlbmQgaWYKKyAgICAgICAgICAgIGNhbGwgcmFuZG9tX3NlZWQocHV0PXNlZWQpCisgICAgICAgICAgZW5kIHN1YnJvdXRpbmUgaW5pdF9yYW5kb21fc2VlZAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlJBTkRPTV8wMDVmTlVNQkVSLmh0bWwjUkFORE9NXzAwNWZOVU1CRVIiPlJBTkRPTV9OVU1CRVI8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkFOR0UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU5HRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODY2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkFOR0UuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SQU5HRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSQU5ET01fMDA1ZlNFRUQuaHRtbCNSQU5ET01fMDA1ZlNFRUQiIHRpdGxlPSJSQU5ET01fU0VFRCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJBTksuaHRtbCNSQU5LIiB0aXRsZT0iUkFOSyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSQU5HRSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSQU5LLmh0bWwjUkFOSyI+UkFOSzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJBTkRPTV8wMDVmU0VFRC5odG1sI1JBTkRPTV8wMDVmU0VFRCI+UkFORE9NX1NFRUQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjAyIDxjb2RlPlJBTkdFPC9jb2RlPiAmbWRhc2g7IERlY2ltYWwgZXhwb25lbnQgcmFuZ2U8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1SQU5HRS05NjgiPjwvYT48YSBuYW1lPSJpbmRleC1tb2RlbC1yZXByZXNlbnRhdGlvbl8wMDJjLXJhbmdlLTk2OSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlJBTkdFKFgpPC9jb2RlPiByZXR1cm5zIHRoZSBkZWNpbWFsIGV4cG9uZW50IHJhbmdlIGluIHRoZSBtb2RlbCBvZiB0aGUKK3R5cGUgb2YgPGNvZGU+WDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFJBTkdFKFgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiwgPGNvZGU+UkVBTDwvY29kZT4KK29yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YgdGhlIGRlZmF1bHQgaW50ZWdlcgora2luZC4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5EIj5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2E+LCA8YSBocmVmPSJQUkVDSVNJT04uaHRtbCNQUkVDSVNJT04iPlBSRUNJU0lPTjwvYT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPlNlZSA8Y29kZT5QUkVDSVNJT048L2NvZGU+IGZvciBhbiBleGFtcGxlLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SQU5LLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkFOSy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDczMWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkFOSy5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJBTksgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUkFOR0UuaHRtbCNSQU5HRSIgdGl0bGU9IlJBTkdFIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUkVBTC5odG1sI1JFQUwiIHRpdGxlPSJSRUFMIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJBTksiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUkVBTC5odG1sI1JFQUwiPlJFQUw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSQU5HRS5odG1sI1JBTkdFIj5SQU5HRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMDMgPGNvZGU+UkFOSzwvY29kZT4gJm1kYXNoOyBSYW5rIG9mIGEgZGF0YSBvYmplY3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1SQU5LLTk3MCI+PC9hPjxhIG5hbWU9ImluZGV4LXJhbmstOTcxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+UkFOSyhBKTwvY29kZT4gcmV0dXJucyB0aGUgcmFuayBvZiBhIHNjYWxhciBvciBhcnJheSBkYXRhIG9iamVjdC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5UZWNobmljYWwgU3BlY2lmaWNhdGlvbiAoVFMpIDI5MTEzCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBSQU5HRShBKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkE8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPmNhbiBiZSBvZiBhbnkgdHlwZQorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2YgdGhlIGRlZmF1bHQgaW50ZWdlcgora2luZC4gRm9yIGFycmF5cywgdGhlaXIgcmFuayBpcyByZXR1cm5lZDsgZm9yIHNjYWxhcnMgemVybyBpcyByZXR1cm5lZC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfcmFuaworICAgICAgICAgICAgaW50ZWdlciA6OiBhCisgICAgICAgICAgICByZWFsLCBhbGxvY2F0YWJsZSA6OiBiKDosOikKKyAgICAgICAgICAKKyAgICAgICAgICAgIHByaW50ICosIHJhbmsoYSksIHJhbmsoYikgISBQcmludHM6ICAwICAzCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9yYW5rCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JFQUwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SRUFMLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmMTczMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SRUFMLmh0bWwKQEAgLTAsMCArMSwxMTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJFQUwgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUkFOSy5odG1sI1JBTksiIHRpdGxlPSJSQU5LIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUkVOQU1FLmh0bWwjUkVOQU1FIiB0aXRsZT0iUkVOQU1FIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJFQUwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUkVOQU1FLmh0bWwjUkVOQU1FIj5SRU5BTUU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSQU5LLmh0bWwjUkFOSyI+UkFOSzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMDQgPGNvZGU+UkVBTDwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IHRvIHJlYWwgdHlwZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJFQUwtOTcyIj48L2E+PGEgbmFtZT0iaW5kZXgtUkVBTFBBUlQtOTczIj48L2E+PGEgbmFtZT0iaW5kZXgtRkxPQVQtOTc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtREZMT0FULTk3NSI+PC9hPjxhIG5hbWU9ImluZGV4LVNOR0wtOTc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29udmVyc2lvbl8wMDJjLXRvLXJlYWwtOTc3Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29tcGxleC1udW1iZXJzXzAwMmMtcmVhbC1wYXJ0LTk3OCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlJFQUwoQSBbLCBLSU5EXSk8L2NvZGU+IGNvbnZlcnRzIGl0cyBhcmd1bWVudCA8dmFyPkE8L3Zhcj4gdG8gYSByZWFsIHR5cGUuICBUaGUKKzxjb2RlPlJFQUxQQVJUPC9jb2RlPiBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nNzc8L3NwYW4+PC9zYW1wPiwKK2FuZCBpdHMgdXNlIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gNzcgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+UkVTVUxUID0gUkVBTChBIFssIEtJTkRdKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlJFU1VMVCA9IFJFQUxQQVJUKFopPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BPC92YXI+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiwgPGNvZGU+UkVBTDwvY29kZT4sIG9yCis8Y29kZT5DT01QTEVYPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPktJTkQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgQW4gPGNvZGU+SU5URUdFUjwvY29kZT4gaW5pdGlhbGl6YXRpb24KK2V4cHJlc3Npb24gaW5kaWNhdGluZyB0aGUga2luZCBwYXJhbWV0ZXIgb2YgdGhlIHJlc3VsdC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGVzZSBmdW5jdGlvbnMgcmV0dXJuIGEgPGNvZGU+UkVBTDwvY29kZT4gdmFyaWFibGUgb3IgYXJyYXkgdW5kZXIKK3RoZSBmb2xsb3dpbmcgcnVsZXM6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+KEEpPGRkPjxjb2RlPlJFQUwoQSk8L2NvZGU+IGlzIGNvbnZlcnRlZCB0byBhIGRlZmF1bHQgcmVhbCB0eXBlIGlmIDx2YXI+QTwvdmFyPiBpcyBhbgoraW50ZWdlciBvciByZWFsIHZhcmlhYmxlLiAKKzxicj48ZHQ+KEIpPGRkPjxjb2RlPlJFQUwoQSk8L2NvZGU+IGlzIGNvbnZlcnRlZCB0byBhIHJlYWwgdHlwZSB3aXRoIHRoZSBraW5kIHR5cGUgcGFyYW1ldGVyCitvZiA8dmFyPkE8L3Zhcj4gaWYgPHZhcj5BPC92YXI+IGlzIGEgY29tcGxleCB2YXJpYWJsZS4gCis8YnI+PGR0PihDKTxkZD48Y29kZT5SRUFMKEEsIEtJTkQpPC9jb2RlPiBpcyBjb252ZXJ0ZWQgdG8gYSByZWFsIHR5cGUgd2l0aCBraW5kIHR5cGUKK3BhcmFtZXRlciA8dmFyPktJTkQ8L3Zhcj4gaWYgPHZhcj5BPC92YXI+IGlzIGEgY29tcGxleCwgaW50ZWdlciwgb3IgcmVhbAordmFyaWFibGUuIAorPC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfcmVhbAorICAgICAgICAgICAgY29tcGxleCA6OiB4ID0gKDEuMCwgMi4wKQorICAgICAgICAgICAgcHJpbnQgKiwgcmVhbCh4KSwgcmVhbCh4LDgpLCByZWFscGFydCh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfcmVhbAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+QXJndW1lbnQgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5GTE9BVChBKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRGTE9BVChBKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklOVEVHRVIoNCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5HTlUgZXh0ZW5zaW9uCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5TTkdMKEEpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkRCTEUuaHRtbCNEQkxFIj5EQkxFPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkVOQU1FLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkVOQU1FLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI2ZDVhZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SRU5BTUUuaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SRU5BTUUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUkVBTC5odG1sI1JFQUwiIHRpdGxlPSJSRUFMIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUkVQRUFULmh0bWwjUkVQRUFUIiB0aXRsZT0iUkVQRUFUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJFTkFNRSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSRVBFQVQuaHRtbCNSRVBFQVQiPlJFUEVBVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJFQUwuaHRtbCNSRUFMIj5SRUFMPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIwNSA8Y29kZT5SRU5BTUU8L2NvZGU+ICZtZGFzaDsgUmVuYW1lIGEgZmlsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJFTkFNRS05NzkiPjwvYT48YSBuYW1lPSJpbmRleC1maWxlLXN5c3RlbV8wMDJjLXJlbmFtZS1maWxlLTk4MCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJlbmFtZXMgYSBmaWxlIGZyb20gZmlsZSA8dmFyPlBBVEgxPC92YXI+IHRvIDx2YXI+UEFUSDI8L3Zhcj4uIEEgbnVsbAorY2hhcmFjdGVyICg8Y29kZT5DSEFSKDApPC9jb2RlPikgY2FuIGJlIHVzZWQgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBuYW1lcyBpbgorPHZhcj5QQVRIMTwvdmFyPiBhbmQgPHZhcj5QQVRIMjwvdmFyPjsgb3RoZXJ3aXNlLCB0cmFpbGluZyBibGFua3MgaW4gdGhlIGZpbGUKK25hbWVzIGFyZSBpZ25vcmVkLiAgSWYgdGhlIDx2YXI+U1RBVFVTPC92YXI+IGFyZ3VtZW50IGlzIHN1cHBsaWVkLCBpdAorY29udGFpbnMgMCBvbiBzdWNjZXNzIG9yIGEgbm9uemVybyBlcnJvciBjb2RlIHVwb24gcmV0dXJuOyBzZWUKKzxjb2RlPnJlbmFtZSgyKTwvY29kZT4uCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgaW4gYm90aCBzdWJyb3V0aW5lIGFuZCBmdW5jdGlvbiBmb3JtczsKK2hvd2V2ZXIsIG9ubHkgb25lIGZvcm0gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIHByb2dyYW0gdW5pdC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZSwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5DQUxMIFJFTkFNRShQQVRIMSwgUEFUSDIgWywgU1RBVFVTXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5TVEFUVVMgPSBSRU5BTUUoUEFUSDEsIFBBVEgyKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UEFUSDE8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIGRlZmF1bHQgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UEFUSDI8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIGRlZmF1bHQgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIG9mIGRlZmF1bHQgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkxJTksuaHRtbCNMSU5LIj5MSU5LPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkVQRUFULmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkVQRUFULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiMWJjZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SRVBFQVQuaHRtbApAQCAtMCwwICsxLDgzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SRVBFQVQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUkVOQU1FLmh0bWwjUkVOQU1FIiB0aXRsZT0iUkVOQU1FIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUkVTSEFQRS5odG1sI1JFU0hBUEUiIHRpdGxlPSJSRVNIQVBFIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJFUEVBVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSRVNIQVBFLmh0bWwjUkVTSEFQRSI+UkVTSEFQRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJFTkFNRS5odG1sI1JFTkFNRSI+UkVOQU1FPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIwNiA8Y29kZT5SRVBFQVQ8L2NvZGU+ICZtZGFzaDsgUmVwZWF0ZWQgc3RyaW5nIGNvbmNhdGVuYXRpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1SRVBFQVQtOTgxIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nXzAwMmMtcmVwZWF0LTk4MiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cmluZ18wMDJjLWNvbmNhdGVuYXRlLTk4MyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkNvbmNhdGVuYXRlcyA8dmFyPk5DT1BJRVM8L3Zhcj4gY29waWVzIG9mIGEgc3RyaW5nLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+VHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBSRVBFQVQoU1RSSU5HLCBOQ09QSUVTKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUUklORzwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIHNjYWxhciBhbmQgb2YgdHlwZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TkNPUElFUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgc2NhbGFyIGFuZCBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPkEgbmV3IHNjYWxhciBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gYnVpbHQgdXAgZnJvbSA8dmFyPk5DT1BJRVM8L3Zhcj4gY29waWVzCitvZiA8dmFyPlNUUklORzwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3RfcmVwZWF0CisgICAgICAgICAgICB3cml0ZSgqLCopIHJlcGVhdCgieCIsIDUpICAgISAieHh4eHgiCisgICAgICAgICAgZW5kIHByb2dyYW0KKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUkVTSEFQRS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JFU0hBUEUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTU5MzVlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JFU0hBUEUuaHRtbApAQCAtMCwwICsxLDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SRVNIQVBFIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJFUEVBVC5odG1sI1JFUEVBVCIgdGl0bGU9IlJFUEVBVCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJSU1BBQ0lORy5odG1sI1JSU1BBQ0lORyIgdGl0bGU9IlJSU1BBQ0lORyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSRVNIQVBFIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJSU1BBQ0lORy5odG1sI1JSU1BBQ0lORyI+UlJTUEFDSU5HPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUkVQRUFULmh0bWwjUkVQRUFUIj5SRVBFQVQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjA3IDxjb2RlPlJFU0hBUEU8L2NvZGU+ICZtZGFzaDsgRnVuY3Rpb24gdG8gcmVzaGFwZSBhbiBhcnJheTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJFU0hBUEUtOTg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1jaGFuZ2UtZGltZW5zaW9ucy05ODUiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLXRyYW5zbW9ncmlmeS05ODYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZXNoYXBlcyA8dmFyPlNPVVJDRTwvdmFyPiB0byBjb3JyZXNwb25kIHRvIDx2YXI+U0hBUEU8L3Zhcj4uIElmIG5lY2Vzc2FyeSwKK3RoZSBuZXcgYXJyYXkgbWF5IGJlIHBhZGRlZCB3aXRoIGVsZW1lbnRzIGZyb20gPHZhcj5QQUQ8L3Zhcj4gb3IgcGVybXV0ZWQKK2FzIGRlZmluZWQgYnkgPHZhcj5PUkRFUjwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gUkVTSEFQRShTT1VSQ0UsIFNIQVBFWywgUEFELCBPUkRFUl0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U09VUkNFPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhbiBhcnJheSBvZiBhbnkgdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNIQVBFPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgYW4KK2FycmF5IG9mIHJhbmsgb25lLiBJdHMgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUgb3IgemVyby4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlBBRDwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZQordHlwZSBhcyA8dmFyPlNPVVJDRTwvdmFyPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk9SREVSPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+CithbmQgYW4gYXJyYXkgb2YgdGhlIHNhbWUgc2hhcGUgYXMgPHZhcj5TSEFQRTwvdmFyPi4gSXRzIHZhbHVlcyBzaGFsbAorYmUgYSBwZXJtdXRhdGlvbiBvZiB0aGUgbnVtYmVycyBmcm9tIDEgdG8gbiwgd2hlcmUgbiBpcyB0aGUgc2l6ZSBvZgorPHZhcj5TSEFQRTwvdmFyPi4gSWYgPHZhcj5PUkRFUjwvdmFyPiBpcyBhYnNlbnQsIHRoZSBuYXR1cmFsIG9yZGVyaW5nIHNoYWxsCitiZSBhc3N1bWVkLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXN1bHQgaXMgYW4gYXJyYXkgb2Ygc2hhcGUgPHZhcj5TSEFQRTwvdmFyPiB3aXRoIHRoZSBzYW1lIHR5cGUgYXMKKzx2YXI+U09VUkNFPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9yZXNoYXBlCisgICAgICAgICAgICBJTlRFR0VSLCBESU1FTlNJT04oNCkgOjogeAorICAgICAgICAgICAgV1JJVEUoKiwqKSBTSEFQRSh4KSAgICAgICAgICAgICAgICAgICAgICAgISBwcmludHMgIjQiCisgICAgICAgICAgICBXUklURSgqLCopIFNIQVBFKFJFU0hBUEUoeCwgKC8yLCAyLykpKSAgICAhIHByaW50cyAiMiAyIgorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iU0hBUEUuaHRtbCNTSEFQRSI+U0hBUEU8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUlJTUEFDSU5HLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUlJTUEFDSU5HLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyMDJhZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SUlNQQUNJTkcuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SUlNQQUNJTkcgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUkVTSEFQRS5odG1sI1JFU0hBUEUiIHRpdGxlPSJSRVNIQVBFIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUlNISUZULmh0bWwjUlNISUZUIiB0aXRsZT0iUlNISUZUIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJSU1BBQ0lORyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSU0hJRlQuaHRtbCNSU0hJRlQiPlJTSElGVDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJFU0hBUEUuaHRtbCNSRVNIQVBFIj5SRVNIQVBFPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIwOCA8Y29kZT5SUlNQQUNJTkc8L2NvZGU+ICZtZGFzaDsgUmVjaXByb2NhbCBvZiB0aGUgcmVsYXRpdmUgc3BhY2luZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJSU1BBQ0lORy05ODciPjwvYT48YSBuYW1lPSJpbmRleC1yZWFsLW51bWJlcl8wMDJjLXJlbGF0aXZlLXNwYWNpbmctOTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1yZWxhdGl2ZS1zcGFjaW5nLTk4OSI+PC9hPgorCisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+UlJTUEFDSU5HKFgpPC9jb2RlPiByZXR1cm5zIHRoZSAgcmVjaXByb2NhbCBvZiB0aGUgcmVsYXRpdmUgc3BhY2luZyBvZgorbW9kZWwgbnVtYmVycyBuZWFyIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBSUlNQQUNJTkcoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uIAorVGhlIHZhbHVlIHJldHVybmVkIGlzIGVxdWFsIHRvCis8Y29kZT5BQlMoRlJBQ1RJT04oWCkpICogRkxPQVQoUkFESVgoWCkpKipESUdJVFMoWCk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlNQQUNJTkcuaHRtbCNTUEFDSU5HIj5TUEFDSU5HPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JTSElGVC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1JTSElGVC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmE1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUlNISUZULmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UlNISUZUIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlJSU1BBQ0lORy5odG1sI1JSU1BBQ0lORyIgdGl0bGU9IlJSU1BBQ0lORyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNBTUVfMDA1ZlRZUEVfMDA1ZkFTLmh0bWwjU0FNRV8wMDVmVFlQRV8wMDVmQVMiIHRpdGxlPSJTQU1FX1RZUEVfQVMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUlNISUZUIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNBTUVfMDA1ZlRZUEVfMDA1ZkFTLmh0bWwjU0FNRV8wMDVmVFlQRV8wMDVmQVMiPlNBTUVfVFlQRV9BUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJSU1BBQ0lORy5odG1sI1JSU1BBQ0lORyI+UlJTUEFDSU5HPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIwOSA8Y29kZT5SU0hJRlQ8L2NvZGU+ICZtZGFzaDsgUmlnaHQgc2hpZnQgYml0czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJTSElGVC05OTAiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzXzAwMmMtc2hpZnQtcmlnaHQtOTkxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+UlNISUZUPC9jb2RlPiByZXR1cm5zIGEgdmFsdWUgY29ycmVzcG9uZGluZyB0byA8dmFyPkk8L3Zhcj4gd2l0aCBhbGwgb2YgdGhlCitiaXRzIHNoaWZ0ZWQgcmlnaHQgYnkgPHZhcj5TSElGVDwvdmFyPiBwbGFjZXMuICBJZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YKKzx2YXI+U0hJRlQ8L3Zhcj4gaXMgZ3JlYXRlciB0aGFuIDxjb2RlPkJJVF9TSVpFKEkpPC9jb2RlPiwgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZC4gCitCaXRzIHNoaWZ0ZWQgb3V0IGZyb20gdGhlIHJpZ2h0IGVuZCBhcmUgbG9zdC4gVGhlIGZpbGwgaXMgYXJpdGhtZXRpYzogdGhlCitiaXRzIHNoaWZ0ZWQgaW4gZnJvbSB0aGUgbGVmdCBlbmQgYXJlIGVxdWFsIHRvIHRoZSBsZWZ0bW9zdCBiaXQsIHdoaWNoIGluCit0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uIGlzIHRoZSBzaWduIGJpdC4KKworICAgICA8cD5UaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkgdGhlIDxjb2RlPlNISUZUQTwvY29kZT4gaW50cmluc2ljLCB3aGljaAoraXMgc3RhbmRhcmQgaW4gRm9ydHJhbiAyMDA4IGFuZCBsYXRlci4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFJTSElGVChJLCBTSElGVCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNISUZUPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG9mIHRoZSBzYW1lIGtpbmQgYXMKKzx2YXI+STwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJJU0hGVC5odG1sI0lTSEZUIj5JU0hGVDwvYT4sIDxhIGhyZWY9IklTSEZUQy5odG1sI0lTSEZUQyI+SVNIRlRDPC9hPiwgPGEgaHJlZj0iTFNISUZULmh0bWwjTFNISUZUIj5MU0hJRlQ8L2E+LCA8YSBocmVmPSJTSElGVEEuaHRtbCNTSElGVEEiPlNISUZUQTwvYT4sIDxhIGhyZWY9IlNISUZUUi5odG1sI1NISUZUUiI+U0hJRlRSPC9hPiwKKzxhIGhyZWY9IlNISUZUTC5odG1sI1NISUZUTCI+U0hJRlRMPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUmVhbC1hcnJheS1pbmRpY2VzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUmVhbC1hcnJheS1pbmRpY2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwNTE4YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SZWFsLWFycmF5LWluZGljZXMuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SZWFsIGFycmF5IGluZGljZXMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iIHRpdGxlPSJFeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQk9aLWxpdGVyYWwtY29uc3RhbnRzLmh0bWwjQk9aLWxpdGVyYWwtY29uc3RhbnRzIiB0aXRsZT0iQk9aIGxpdGVyYWwgY29uc3RhbnRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVW5hcnktb3BlcmF0b3JzLmh0bWwjVW5hcnktb3BlcmF0b3JzIiB0aXRsZT0iVW5hcnkgb3BlcmF0b3JzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJlYWwtYXJyYXktaW5kaWNlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJVbmFyeS1vcGVyYXRvcnMuaHRtbCNVbmFyeS1vcGVyYXRvcnMiPlVuYXJ5IG9wZXJhdG9yczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkJPWi1saXRlcmFsLWNvbnN0YW50cy5odG1sI0JPWi1saXRlcmFsLWNvbnN0YW50cyI+Qk9aIGxpdGVyYWwgY29uc3RhbnRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjEuMTAgUmVhbCBhcnJheSBpbmRpY2VzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1pbmRpY2VzLW9mLXR5cGUtcmVhbC0zMzYiPjwvYT4KK0FzIGFuIGV4dGVuc2lvbiwgR05VIEZvcnRyYW4gYWxsb3dzIHRoZSB1c2Ugb2YgPGNvZGU+UkVBTDwvY29kZT4gZXhwcmVzc2lvbnMKK29yIHZhcmlhYmxlcyBhcyBhcnJheSBpbmRpY2VzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUnVudGltZS1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vUnVudGltZS1PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1NjBiMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SdW50aW1lLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDkxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SdW50aW1lIE9wdGlvbnMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiIgdGl0bGU9Ikludm9raW5nIEdOVSBGb3J0cmFuIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIiB0aXRsZT0iTGluayBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29kZS1HZW4tT3B0aW9ucy5odG1sI0NvZGUtR2VuLU9wdGlvbnMiIHRpdGxlPSJDb2RlIEdlbiBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJ1bnRpbWUtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxpbmstT3B0aW9ucy5odG1sI0xpbmstT3B0aW9ucyI+TGluayBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiI+SW52b2tpbmcgR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjggSW5mbHVlbmNpbmcgcnVudGltZSBiZWhhdmlvcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9wdGlvbnNfMDAyYy1ydW50aW1lLTIyNSI+PC9hPgorVGhlc2Ugb3B0aW9ucyBhZmZlY3QgdGhlIHJ1bnRpbWUgYmVoYXZpb3Igb2YgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBHTlUgRm9ydHJhbi4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWZjb252ZXJ0PTwvY29kZT48dmFyPmNvbnZlcnNpb248L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmY29udmVydF8wMDNkXzAwN2RfMDA0MHZhcl8wMDdiY29udmVyc2lvbl8wMDdkLTIyNiI+PC9hPlNwZWNpZnkgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgZm9yIHVuZm9ybWF0dGVkIGZpbGVzLiAgVmFsaWQKK3ZhbHVlcyBmb3IgY29udmVyc2lvbiBhcmU6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmF0aXZlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGUgZGVmYXVsdDsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zd2FwPC9zcGFuPjwvc2FtcD4mcnNxdW87LAorc3dhcCBiZXR3ZWVuIGJpZy0gYW5kIGxpdHRsZS1lbmRpYW47ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmlnLWVuZGlhbjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdXNlIGJpZy1lbmRpYW4KK3JlcHJlc2VudGF0aW9uIGZvciB1bmZvcm1hdHRlZCBmaWxlczsgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5saXR0bGUtZW5kaWFuPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB1c2UgbGl0dGxlLWVuZGlhbgorcmVwcmVzZW50YXRpb24gZm9yIHVuZm9ybWF0dGVkIGZpbGVzLgorCisgICAgIDxwPjxlbT5UaGlzIG9wdGlvbiBoYXMgYW4gZWZmZWN0IG9ubHkgd2hlbiB1c2VkIGluIHRoZSBtYWluIHByb2dyYW0uIAorVGhlIDwvZW0+PGNvZGU+Q09OVkVSVDwvY29kZT48ZW0+IHNwZWNpZmllciBhbmQgdGhlIEdGT1JUUkFOX0NPTlZFUlRfVU5JVCBlbnZpcm9ubWVudAordmFyaWFibGUgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3BlY2lmaWVkIGJ5IDwvZW0+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LWZjb252ZXJ0PC9zcGFuPjwvc2FtcD48ZW0+LjwvZW0+CisKKyAgICAgPGJyPjxkdD48Y29kZT4tZnJlY29yZC1tYXJrZXI9PC9jb2RlPjx2YXI+bGVuZ3RoPC92YXI+PGRkPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiZnJlY29yZF8wMDJkbWFya2VyXzAwM2RfMDA3ZF8wMDQwdmFyXzAwN2JsZW5ndGhfMDA3ZC0yMjciPjwvYT5TcGVjaWZ5IHRoZSBsZW5ndGggb2YgcmVjb3JkIG1hcmtlcnMgZm9yIHVuZm9ybWF0dGVkIGZpbGVzLiAKK1ZhbGlkIHZhbHVlcyBmb3IgPHZhcj5sZW5ndGg8L3Zhcj4gYXJlIDQgYW5kIDguICBEZWZhdWx0IGlzIDQuIAorPGVtPlRoaXMgaXMgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgdmVyc2lvbnMgb2YgPC9lbT48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiwKK3doaWNoIHNwZWNpZmllZCBhIGRlZmF1bHQgcmVjb3JkIG1hcmtlciBsZW5ndGggb2YgOCBvbiBtb3N0CitzeXN0ZW1zLiAgSWYgeW91IHdhbnQgdG8gcmVhZCBvciB3cml0ZSBmaWxlcyBjb21wYXRpYmxlCit3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4sIHVzZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tZnJlY29yZC1tYXJrZXI9ODwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWZtYXgtc3VicmVjb3JkLWxlbmd0aD08L2NvZGU+PHZhcj5sZW5ndGg8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JmbWF4XzAwMmRzdWJyZWNvcmRfMDAyZGxlbmd0aF8wMDNkXzAwN2RfMDA0MHZhcl8wMDdibGVuZ3RoXzAwN2QtMjI4Ij48L2E+U3BlY2lmeSB0aGUgbWF4aW11bSBsZW5ndGggZm9yIGEgc3VicmVjb3JkLiAgVGhlIG1heGltdW0gcGVybWl0dGVkCit2YWx1ZSBmb3IgbGVuZ3RoIGlzIDIxNDc0ODM2MzksIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQuICBPbmx5CityZWFsbHkgdXNlZnVsIGZvciB1c2UgYnkgdGhlIGdmb3J0cmFuIHRlc3RzdWl0ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1mc2lnbi16ZXJvPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmZzaWduXzAwMmR6ZXJvXzAwN2QtMjI5Ij48L2E+V2hlbiBlbmFibGVkLCBmbG9hdGluZyBwb2ludCBudW1iZXJzIG9mIHZhbHVlIHplcm8gd2l0aCB0aGUgc2lnbiBiaXQgc2V0CithcmUgd3JpdHRlbiBhcyBuZWdhdGl2ZSBudW1iZXIgaW4gZm9ybWF0dGVkIG91dHB1dCBhbmQgdHJlYXRlZCBhcworbmVnYXRpdmUgaW4gdGhlIDxjb2RlPlNJR048L2NvZGU+IGludHJpbnNpYy4gIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mbm8tc2lnbi16ZXJvPC9zcGFuPjwvc2FtcD4gZG9lcyBub3QKK3ByaW50IHRoZSBuZWdhdGl2ZSBzaWduIG9mIHplcm8gdmFsdWVzIChvciB2YWx1ZXMgcm91bmRlZCB0byB6ZXJvIGZvciBJL08pCithbmQgcmVnYXJkcyB6ZXJvIGFzIHBvc2l0aXZlIG51bWJlciBpbiB0aGUgPGNvZGU+U0lHTjwvY29kZT4gaW50cmluc2ljIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIEZvcnRyYW4gNzcuIFRoZSBkZWZhdWx0IGlzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1mc2lnbi16ZXJvPC9zcGFuPjwvc2FtcD4uIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1J1bnRpbWUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SdW50aW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwNmU5YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9SdW50aW1lLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UnVudGltZSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iIHRpdGxlPSJJbnZva2luZyBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzIiB0aXRsZT0iRm9ydHJhbiAyMDAzIGFuZCAyMDA4IHN0YXR1cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSdW50aW1lIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgYW5kIDIwMDggc3RhdHVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiI+SW52b2tpbmcgR05VIEZvcnRyYW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MyBSdW50aW1lOiAgSW5mbHVlbmNpbmcgcnVudGltZSBiZWhhdmlvciB3aXRoIGVudmlyb25tZW50IHZhcmlhYmxlczwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LWVudmlyb25tZW50LXZhcmlhYmxlLTI5NiI+PC9hPgorVGhlIGJlaGF2aW9yIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiBjYW4gYmUgaW5mbHVlbmNlZCBieQorZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCisgICA8cD5NYWxmb3JtZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iVE1QRElSLmh0bWwjVE1QRElSIj5UTVBESVI8L2E+OiAgRGlyZWN0b3J5IGZvciBzY3JhdGNoIGZpbGVzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJHRk9SVFJBTl8wMDVmU1RESU5fMDA1ZlVOSVQuaHRtbCNHRk9SVFJBTl8wMDVmU1RESU5fMDA1ZlVOSVQiPkdGT1JUUkFOX1NURElOX1VOSVQ8L2E+OiAgVW5pdCBudW1iZXIgZm9yIHN0YW5kYXJkIGlucHV0Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJHRk9SVFJBTl8wMDVmU1RET1VUXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURE9VVF8wMDVmVU5JVCI+R0ZPUlRSQU5fU1RET1VUX1VOSVQ8L2E+OiAgVW5pdCBudW1iZXIgZm9yIHN0YW5kYXJkIG91dHB1dAorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNUREVSUl8wMDVmVU5JVC5odG1sI0dGT1JUUkFOXzAwNWZTVERFUlJfMDA1ZlVOSVQiPkdGT1JUUkFOX1NUREVSUl9VTklUPC9hPjogIFVuaXQgbnVtYmVyIGZvciBzdGFuZGFyZCBlcnJvcgorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZkFMTC5odG1sI0dGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZBTEwiPkdGT1JUUkFOX1VOQlVGRkVSRURfQUxMPC9hPjogIERvIG5vdCBidWZmZXIgSS9PIGZvciBhbGwgdW5pdHMuIAorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZlBSRUNPTk5FQ1RFRC5odG1sI0dGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZQUkVDT05ORUNURUQiPkdGT1JUUkFOX1VOQlVGRkVSRURfUFJFQ09OTkVDVEVEPC9hPjogIERvIG5vdCBidWZmZXIgSS9PIGZvciBwcmVjb25uZWN0ZWQgdW5pdHMuIAorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNIT1dfMDA1ZkxPQ1VTLmh0bWwjR0ZPUlRSQU5fMDA1ZlNIT1dfMDA1ZkxPQ1VTIj5HRk9SVFJBTl9TSE9XX0xPQ1VTPC9hPjogICBTaG93IGxvY2F0aW9uIGZvciBydW50aW1lIGVycm9ycworPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTLmh0bWwjR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTIj5HRk9SVFJBTl9PUFRJT05BTF9QTFVTPC9hPjogIFByaW50IGxlYWRpbmcgKyB3aGVyZSBwZXJtaXR0ZWQKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkdGT1JUUkFOXzAwNWZERUZBVUxUXzAwNWZSRUNMLmh0bWwjR0ZPUlRSQU5fMDA1ZkRFRkFVTFRfMDA1ZlJFQ0wiPkdGT1JUUkFOX0RFRkFVTFRfUkVDTDwvYT46ICBEZWZhdWx0IHJlY29yZCBsZW5ndGggZm9yIG5ldyBmaWxlcworPGxpPjxhIGhyZWY9IkdGT1JUUkFOXzAwNWZMSVNUXzAwNWZTRVBBUkFUT1IuaHRtbCNHRk9SVFJBTl8wMDVmTElTVF8wMDVmU0VQQVJBVE9SIj5HRk9SVFJBTl9MSVNUX1NFUEFSQVRPUjwvYT46ICAgU2VwYXJhdG9yIGZvciBsaXN0IG91dHB1dAorPGxpPjxhIGhyZWY9IkdGT1JUUkFOXzAwNWZDT05WRVJUXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZkNPTlZFUlRfMDA1ZlVOSVQiPkdGT1JUUkFOX0NPTlZFUlRfVU5JVDwvYT46ICAgU2V0IGVuZGlhbm5lc3MgZm9yIHVuZm9ybWF0dGVkIEkvTworPGxpPjxhIGhyZWY9IkdGT1JUUkFOXzAwNWZFUlJPUl8wMDVmQkFDS1RSQUNFLmh0bWwjR0ZPUlRSQU5fMDA1ZkVSUk9SXzAwNWZCQUNLVFJBQ0UiPkdGT1JUUkFOX0VSUk9SX0JBQ0tUUkFDRTwvYT46ICBTaG93IGJhY2t0cmFjZSBvbiBydW4tdGltZSBlcnJvcnMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TQU1FXzAwNWZUWVBFXzAwNWZBUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NBTUVfMDA1ZlRZUEVfMDA1ZkFTLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5MzdiOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TQU1FXzAwNWZUWVBFXzAwNWZBUy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNBTUVfVFlQRV9BUyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJSU0hJRlQuaHRtbCNSU0hJRlQiIHRpdGxlPSJSU0hJRlQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTQ0FMRS5odG1sI1NDQUxFIiB0aXRsZT0iU0NBTEUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0FNRV9UWVBFX0FTIj48L2E+Cis8YSBuYW1lPSJTQU1FXzAwNWZUWVBFXzAwNWZBUyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTQ0FMRS5odG1sI1NDQUxFIj5TQ0FMRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJTSElGVC5odG1sI1JTSElGVCI+UlNISUZUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIxMCA8Y29kZT5TQU1FX1RZUEVfQVM8L2NvZGU+ICZtZGFzaDsgIFF1ZXJ5IGR5bmFtaWMgdHlwZXMgZm9yIGVxdWFsaXR5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0FNRV8wMDVmVFlQRV8wMDVmQVMtOTkyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UXVlcnkgZHluYW1pYyB0eXBlcyBmb3IgZXF1YWxpdHkuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gU0FNRV9UWVBFX0FTKEEsIEIpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gb2JqZWN0IG9mIGV4dGVuc2libGUgZGVjbGFyZWQgdHlwZSBvcgordW5saW1pdGVkIHBvbHltb3JwaGljLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gb2JqZWN0IG9mIGV4dGVuc2libGUgZGVjbGFyZWQgdHlwZSBvcgordW5saW1pdGVkIHBvbHltb3JwaGljLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgYSBzY2FsYXIgb2YgdHlwZSBkZWZhdWx0IGxvZ2ljYWwuIEl0IGlzIHRydWUgaWYgYW5kCitvbmx5IGlmIHRoZSBkeW5hbWljIHR5cGUgb2YgQSBpcyB0aGUgc2FtZSBhcyB0aGUgZHluYW1pYyB0eXBlIG9mIEIuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iRVhURU5EU18wMDVmVFlQRV8wMDVmT0YuaHRtbCNFWFRFTkRTXzAwNWZUWVBFXzAwNWZPRiI+RVhURU5EU19UWVBFX09GPC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0NBTEUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TQ0FMRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjM3YTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0NBTEUuaHRtbApAQCAtMCwwICsxLDg1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TQ0FMRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTQU1FXzAwNWZUWVBFXzAwNWZBUy5odG1sI1NBTUVfMDA1ZlRZUEVfMDA1ZkFTIiB0aXRsZT0iU0FNRV9UWVBFX0FTIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0NBTi5odG1sI1NDQU4iIHRpdGxlPSJTQ0FOIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNDQUxFIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNDQU4uaHRtbCNTQ0FOIj5TQ0FOPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0FNRV8wMDVmVFlQRV8wMDVmQVMuaHRtbCNTQU1FXzAwNWZUWVBFXzAwNWZBUyI+U0FNRV9UWVBFX0FTPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIxMSA8Y29kZT5TQ0FMRTwvY29kZT4gJm1kYXNoOyBTY2FsZSBhIHJlYWwgdmFsdWU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TQ0FMRS05OTMiPjwvYT48YSBuYW1lPSJpbmRleC1yZWFsLW51bWJlcl8wMDJjLXNjYWxlLTk5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWZsb2F0aW5nLXBvaW50XzAwMmMtc2NhbGUtOTk1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+U0NBTEUoWCxJKTwvY29kZT4gcmV0dXJucyA8Y29kZT5YICogUkFESVgoWCkqKkk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFNDQUxFKFgsIEkpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+WDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHNoYWxsIGJlIGEgPGNvZGU+UkVBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgc2hhbGwgYmUgYSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGtpbmQgYXMgPHZhcj5YPC92YXI+LiAKK0l0cyB2YWx1ZSBpcyA8Y29kZT5YICogUkFESVgoWCkqKkk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9zY2FsZQorICAgICAgICAgICAgcmVhbCA6OiB4ID0gMTc4LjEzODdlLTQKKyAgICAgICAgICAgIGludGVnZXIgOjogaSA9IDUKKyAgICAgICAgICAgIHByaW50ICosIHNjYWxlKHgsaSksIHgqcmFkaXgoeCkqKmkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X3NjYWxlCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NDQU4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TQ0FOLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYwZDRiNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TQ0FOLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0NBTiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTQ0FMRS5odG1sI1NDQUxFIiB0aXRsZT0iU0NBTEUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTRUNORFMuaHRtbCNTRUNORFMiIHRpdGxlPSJTRUNORFMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0NBTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTRUNORFMuaHRtbCNTRUNORFMiPlNFQ05EUzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNDQUxFLmh0bWwjU0NBTEUiPlNDQUxFPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIxMiA8Y29kZT5TQ0FOPC9jb2RlPiAmbWRhc2g7IFNjYW4gYSBzdHJpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0NBTi05OTYiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpbmdfMDAyYy1maW5kLXN1YnNldC05OTciPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5TY2FucyBhIDx2YXI+U1RSSU5HPC92YXI+IGZvciBhbnkgb2YgdGhlIGNoYXJhY3RlcnMgaW4gYSA8dmFyPlNFVDwvdmFyPgorb2YgY2hhcmFjdGVycy4KKworICAgICA8cD5JZiA8dmFyPkJBQ0s8L3Zhcj4gaXMgZWl0aGVyIGFic2VudCBvciBlcXVhbHMgPGNvZGU+RkFMU0U8L2NvZGU+LCB0aGlzIGZ1bmN0aW9uCityZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVmdG1vc3QgY2hhcmFjdGVyIG9mIDx2YXI+U1RSSU5HPC92YXI+IHRoYXQgaXMKK2luIDx2YXI+U0VUPC92YXI+LiBJZiA8dmFyPkJBQ0s8L3Zhcj4gZXF1YWxzIDxjb2RlPlRSVUU8L2NvZGU+LCB0aGUgcmlnaHRtb3N0IHBvc2l0aW9uCitpcyByZXR1cm5lZC4gSWYgbm8gY2hhcmFjdGVyIG9mIDx2YXI+U0VUPC92YXI+IGlzIGZvdW5kIGluIDx2YXI+U1RSSU5HPC92YXI+LCB0aGUKK3Jlc3VsdCBpcyB6ZXJvLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyLCB3aXRoIDx2YXI+S0lORDwvdmFyPiBhcmd1bWVudCBGb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFNDQU4oU1RSSU5HLCBTRVRbLCBCQUNLIFssIEtJTkRdXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TVFJJTkc8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNFVDwvdmFyPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QkFDSzwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+TE9HSUNBTDwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgQW4gPGNvZGU+SU5URUdFUjwvY29kZT4gaW5pdGlhbGl6YXRpb24KK2V4cHJlc3Npb24gaW5kaWNhdGluZyB0aGUga2luZCBwYXJhbWV0ZXIgb2YgdGhlIHJlc3VsdC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG9mIGtpbmQgPHZhcj5LSU5EPC92YXI+LiBJZgorPHZhcj5LSU5EPC92YXI+IGlzIGFic2VudCwgdGhlIHJldHVybiB2YWx1ZSBpcyBvZiBkZWZhdWx0IGludGVnZXIga2luZC4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3Rfc2NhbgorICAgICAgICAgICAgV1JJVEUoKiwqKSBTQ0FOKCJGT1JUUkFOIiwgIkFPIikgICAgICAgICAgISAyLCBmb3VuZCAnTycKKyAgICAgICAgICAgIFdSSVRFKCosKikgU0NBTigiRk9SVFJBTiIsICJBTyIsIC5UUlVFLikgICEgNiwgZm91bmQgJ0EnCisgICAgICAgICAgICBXUklURSgqLCopIFNDQU4oIkZPUlRSQU4iLCAiQysrIikgICAgICAgICAhIDAsIGZvdW5kIG5vbmUKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IklOREVYLWludHJpbnNpYy5odG1sI0lOREVYLWludHJpbnNpYyI+SU5ERVggaW50cmluc2ljPC9hPiwgPGEgaHJlZj0iVkVSSUZZLmh0bWwjVkVSSUZZIj5WRVJJRlk8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0VDTkRTLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0VDTkRTLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIxY2UxNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TRUNORFMuaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TRUNORFMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU0NBTi5odG1sI1NDQU4iIHRpdGxlPSJTQ0FOIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0VDT05ELmh0bWwjU0VDT05EIiB0aXRsZT0iU0VDT05EIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNFQ05EUyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTRUNPTkQuaHRtbCNTRUNPTkQiPlNFQ09ORDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNDQU4uaHRtbCNTQ0FOIj5TQ0FOPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIxMyA8Y29kZT5TRUNORFM8L2NvZGU+ICZtZGFzaDsgVGltZSBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNFQ05EUy05OTgiPjwvYT48YSBuYW1lPSJpbmRleC10aW1lXzAwMmMtZWxhcHNlZC05OTkiPjwvYT48YSBuYW1lPSJpbmRleC1lbGFwc2VkLXRpbWUtMTAwMCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNFQ05EUyhYKTwvY29kZT4gZ2V0cyB0aGUgdGltZSBpbiBzZWNvbmRzIGZyb20gdGhlIHJlYWwtdGltZSBzeXN0ZW0gY2xvY2suIAorPHZhcj5YPC92YXI+IGlzIGEgcmVmZXJlbmNlIHRpbWUsIGFsc28gaW4gc2Vjb25kcy4gSWYgdGhpcyBpcyB6ZXJvLCB0aGUgdGltZSBpbgorc2Vjb25kcyBmcm9tIG1pZG5pZ2h0IGlzIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIGlzIG5vbi1zdGFuZGFyZCBhbmQgaXRzCit1c2UgaXMgZGlzY291cmFnZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFNFQ05EUyAoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5UPC92YXI+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5SRUFMKDQpPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUwoNCk8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPk5vbmUKKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3Rfc2VjbmRzCisgICAgICAgICAgICAgIGludGVnZXIgOjogaQorICAgICAgICAgICAgICByZWFsKDQpIDo6IHQxLCB0MgorICAgICAgICAgICAgICBwcmludCAqLCBzZWNuZHMgKDAuMCkgICAhIHNlY29uZHMgc2luY2UgbWlkbmlnaHQKKyAgICAgICAgICAgICAgdDEgPSBzZWNuZHMgKDAuMCkgICAgICAgISByZWZlcmVuY2UgdGltZQorICAgICAgICAgICAgICBkbyBpID0gMSwgMTAwMDAwMDAgICAgICAhIGRvIHNvbWV0aGluZworICAgICAgICAgICAgICBlbmQgZG8KKyAgICAgICAgICAgICAgdDIgPSBzZWNuZHMgKHQxKSAgICAgICAgISBlbGFwc2VkIHRpbWUKKyAgICAgICAgICAgICAgcHJpbnQgKiwgIlNvbWV0aGluZyB0b29rICIsIHQyLCAiIHNlY29uZHMuIgorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3Rfc2VjbmRzCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFQ09ORC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFQ09ORC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOGY4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0VDT05ELmh0bWwKQEAgLTAsMCArMSw4OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0VDT05EIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNFQ05EUy5odG1sI1NFQ05EUyIgdGl0bGU9IlNFQ05EUyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQiIHRpdGxlPSJTRUxFQ1RFRF9DSEFSX0tJTkQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0VDT05EIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQiPlNFTEVDVEVEX0NIQVJfS0lORDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNFQ05EUy5odG1sI1NFQ05EUyI+U0VDTkRTPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIxNCA8Y29kZT5TRUNPTkQ8L2NvZGU+ICZtZGFzaDsgQ1BVIHRpbWUgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TRUNPTkQtMTAwMSI+PC9hPjxhIG5hbWU9ImluZGV4LXRpbWVfMDAyYy1lbGFwc2VkLTEwMDIiPjwvYT48YSBuYW1lPSJpbmRleC1lbGFwc2VkLXRpbWUtMTAwMyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJldHVybnMgYSA8Y29kZT5SRUFMKDQpPC9jb2RlPiB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGVsYXBzZWQgQ1BVIHRpbWUgaW4KK3NlY29uZHMuICBUaGlzIHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgdGhlIHN0YW5kYXJkCis8Y29kZT5DUFVfVElNRTwvY29kZT4gaW50cmluc2ljLCBhbmQgaXMgb25seSBpbmNsdWRlZCBmb3IgYmFja3dhcmRzCitjb21wYXRpYmlsaXR5LgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIHByb3ZpZGVkIGluIGJvdGggc3Vicm91dGluZSBhbmQgZnVuY3Rpb24gZm9ybXM7Citob3dldmVyLCBvbmx5IG9uZSBmb3JtIGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBwcm9ncmFtIHVuaXQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+Q0FMTCBTRUNPTkQoVElNRSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5USU1FID0gU0VDT05EKCk8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlRJTUU8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUwoNCk8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPkluIGVpdGhlciBzeW50YXgsIDx2YXI+VElNRTwvdmFyPiBpcyBzZXQgdG8gdGhlIHByb2Nlc3MncyBjdXJyZW50IHJ1bnRpbWUgaW4KK3NlY29uZHMuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQ1BVXzAwNWZUSU1FLmh0bWwjQ1BVXzAwNWZUSU1FIj5DUFVfVElNRTwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5ELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjE0MjcxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5ELmh0bWwKQEAgLTAsMCArMSwxMDEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNFTEVDVEVEX0NIQVJfS0lORCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTRUNPTkQuaHRtbCNTRUNPTkQiIHRpdGxlPSJTRUNPTkQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTRUxFQ1RFRF8wMDVmSU5UXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORCIgdGl0bGU9IlNFTEVDVEVEX0lOVF9LSU5EIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNFTEVDVEVEX0NIQVJfS0lORCI+PC9hPgorPGEgbmFtZT0iU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQiPlNFTEVDVEVEX0lOVF9LSU5EPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0VDT05ELmh0bWwjU0VDT05EIj5TRUNPTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjE1IDxjb2RlPlNFTEVDVEVEX0NIQVJfS0lORDwvY29kZT4gJm1kYXNoOyBDaG9vc2UgY2hhcmFjdGVyIGtpbmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TRUxFQ1RFRF8wMDVmQ0hBUl8wMDVmS0lORC0xMDA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2hhcmFjdGVyLWtpbmQtMTAwNSI+PC9hPjxhIG5hbWU9ImluZGV4LWtpbmRfMDAyYy1jaGFyYWN0ZXItMTAwNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPgorPGNvZGU+U0VMRUNURURfQ0hBUl9LSU5EKE5BTUUpPC9jb2RlPiByZXR1cm5zIHRoZSBraW5kIHZhbHVlIGZvciB0aGUgY2hhcmFjdGVyCitzZXQgbmFtZWQgPHZhcj5OQU1FPC92YXI+LCBpZiBhIGNoYXJhY3RlciBzZXQgd2l0aCBzdWNoIGEgbmFtZSBpcyBzdXBwb3J0ZWQsCitvciAtMSBvdGhlcndpc2UuIEN1cnJlbnRseSwgc3VwcG9ydGVkIGNoYXJhY3RlciBzZXRzIGluY2x1ZGUKKyZsZHF1bztBU0NJSSZyZHF1bzsgYW5kICZsZHF1bztERUZBVUxUJnJkcXVvOywgd2hpY2ggYXJlIGVxdWl2YWxlbnQsIGFuZCAmbGRxdW87SVNPXzEwNjQ2JnJkcXVvOworKFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0LCBVQ1MtNCkgd2hpY2ggaXMgY29tbW9ubHkga25vd24gYXMgVW5pY29kZS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+VHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBTRUxFQ1RFRF9DSEFSX0tJTkQoTkFNRSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OQU1FPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBhbmQgb2YgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHR5cGUuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIGNoYXJhY3Rlcl9raW5kCisgICAgICAgICAgICB1c2UgaXNvX2ZvcnRyYW5fZW52CisgICAgICAgICAgICBpbXBsaWNpdCBub25lCisgICAgICAgICAgICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogYXNjaWkgPSBzZWxlY3RlZF9jaGFyX2tpbmQgKCJhc2NpaSIpCisgICAgICAgICAgICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogdWNzNCAgPSBzZWxlY3RlZF9jaGFyX2tpbmQgKCdJU09fMTA2NDYnKQorICAgICAgICAgIAorICAgICAgICAgICAgY2hhcmFjdGVyKGtpbmQ9YXNjaWksIGxlbj0yNikgOjogYWxwaGFiZXQKKyAgICAgICAgICAgIGNoYXJhY3RlcihraW5kPXVjczQsICBsZW49MzApIDo6IGhlbGxvX3dvcmxkCisgICAgICAgICAgCisgICAgICAgICAgICBhbHBoYWJldCA9IGFzY2lpXyJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKyAgICAgICAgICAgIGhlbGxvX3dvcmxkID0gdWNzNF8nSGVsbG8gV29ybGQgYW5kIE5pIEhhbyAtLSAnICZhbXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXIgKGludCAoeic0RjYwJyksIHVjczQpICAgICAmYW1wOworICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyIChpbnQgKHonNTk3RCcpLCB1Y3M0KQorICAgICAgICAgIAorICAgICAgICAgICAgd3JpdGUgKCosKikgYWxwaGFiZXQKKyAgICAgICAgICAKKyAgICAgICAgICAgIG9wZW4gKG91dHB1dF91bml0LCBlbmNvZGluZz0nVVRGLTgnKQorICAgICAgICAgICAgd3JpdGUgKCosKikgdHJpbSAoaGVsbG9fd29ybGQpCisgICAgICAgICAgZW5kIHByb2dyYW0gY2hhcmFjdGVyX2tpbmQKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNjMjMwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQuaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TRUxFQ1RFRF9JTlRfS0lORCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTRUxFQ1RFRF8wMDVmQ0hBUl8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5EIiB0aXRsZT0iU0VMRUNURURfQ0hBUl9LSU5EIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQuaHRtbCNTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORCIgdGl0bGU9IlNFTEVDVEVEX1JFQUxfS0lORCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTRUxFQ1RFRF9JTlRfS0lORCI+PC9hPgorPGEgbmFtZT0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5EIj5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTRUxFQ1RFRF8wMDVmQ0hBUl8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5EIj5TRUxFQ1RFRF9DSEFSX0tJTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjE2IDxjb2RlPlNFTEVDVEVEX0lOVF9LSU5EPC9jb2RlPiAmbWRhc2g7IENob29zZSBpbnRlZ2VyIGtpbmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TRUxFQ1RFRF8wMDVmSU5UXzAwNWZLSU5ELTEwMDciPjwvYT48YSBuYW1lPSJpbmRleC1pbnRlZ2VyLWtpbmQtMTAwOCI+PC9hPjxhIG5hbWU9ImluZGV4LWtpbmRfMDAyYy1pbnRlZ2VyLTEwMDkiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5TRUxFQ1RFRF9JTlRfS0lORChSKTwvY29kZT4gcmV0dXJuIHRoZSBraW5kIHZhbHVlIG9mIHRoZSBzbWFsbGVzdCBpbnRlZ2VyCit0eXBlIHRoYXQgY2FuIHJlcHJlc2VudCBhbGwgdmFsdWVzIHJhbmdpbmcgZnJvbSAtMTBeUiAoZXhjbHVzaXZlKQordG8gMTBeUiAoZXhjbHVzaXZlKS4gSWYgdGhlcmUgaXMgbm8gaW50ZWdlciBraW5kIHRoYXQgYWNjb21tb2RhdGVzCit0aGlzIHJhbmdlLCA8Y29kZT5TRUxFQ1RFRF9JTlRfS0lORDwvY29kZT4gcmV0dXJucyAtMS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gU0VMRUNURURfSU5UX0tJTkQoUik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5SPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBhbmQgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gbGFyZ2VfaW50ZWdlcnMKKyAgICAgICAgICAgIGludGVnZXIscGFyYW1ldGVyIDo6IGs1ID0gc2VsZWN0ZWRfaW50X2tpbmQoNSkKKyAgICAgICAgICAgIGludGVnZXIscGFyYW1ldGVyIDo6IGsxNSA9IHNlbGVjdGVkX2ludF9raW5kKDE1KQorICAgICAgICAgICAgaW50ZWdlcihraW5kPWs1KSA6OiBpNQorICAgICAgICAgICAgaW50ZWdlcihraW5kPWsxNSkgOjogaTE1CisgICAgICAgICAgCisgICAgICAgICAgICBwcmludCAqLCBodWdlKGk1KSwgaHVnZShpMTUpCisgICAgICAgICAgCisgICAgICAgICAgICAhIFRoZSBmb2xsb3dpbmcgaW5lcXVhbGl0aWVzIGFyZSBhbHdheXMgdHJ1ZQorICAgICAgICAgICAgcHJpbnQgKiwgaHVnZShpNSkgJmd0Oz0gMTBfazUqKjUtMQorICAgICAgICAgICAgcHJpbnQgKiwgaHVnZShpMTUpICZndDs9IDEwX2sxNSoqMTUtMQorICAgICAgICAgIGVuZCBwcm9ncmFtIGxhcmdlX2ludGVnZXJzCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5ELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzIwM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5ELmh0bWwKQEAgLTAsMCArMSwxMTQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNFTEVDVEVEX1JFQUxfS0lORCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTRUxFQ1RFRF8wMDVmSU5UXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORCIgdGl0bGU9IlNFTEVDVEVEX0lOVF9LSU5EIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0VUXzAwNWZFWFBPTkVOVC5odG1sI1NFVF8wMDVmRVhQT05FTlQiIHRpdGxlPSJTRVRfRVhQT05FTlQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0VMRUNURURfUkVBTF9LSU5EIj48L2E+Cis8YSBuYW1lPSJTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTRVRfMDA1ZkVYUE9ORU5ULmh0bWwjU0VUXzAwNWZFWFBPTkVOVCI+U0VUX0VYUE9ORU5UPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQiPlNFTEVDVEVEX0lOVF9LSU5EPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIxNyA8Y29kZT5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2NvZGU+ICZtZGFzaDsgQ2hvb3NlIHJlYWwga2luZDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5ELTEwMTAiPjwvYT48YSBuYW1lPSJpbmRleC1yZWFsLWtpbmQtMTAxMSI+PC9hPjxhIG5hbWU9ImluZGV4LWtpbmRfMDAyYy1yZWFsLTEwMTIiPjwvYT48YSBuYW1lPSJpbmRleC1yYWRpeF8wMDJjLXJlYWwtMTAxMyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNFTEVDVEVEX1JFQUxfS0lORChQLFIpPC9jb2RlPiByZXR1cm5zIHRoZSBraW5kIHZhbHVlIG9mIGEgcmVhbCBkYXRhIHR5cGUKK3dpdGggZGVjaW1hbCBwcmVjaXNpb24gb2YgYXQgbGVhc3QgPGNvZGU+UDwvY29kZT4gZGlnaXRzLCBleHBvbmVudCByYW5nZSBvZgorYXQgbGVhc3QgPGNvZGU+UjwvY29kZT4sIGFuZCB3aXRoIGEgcmFkaXggb2YgPGNvZGU+UkFESVg8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyLCB3aXRoIDxjb2RlPlJBRElYPC9jb2RlPiBGb3J0cmFuIDIwMDggb3IgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFNFTEVDVEVEX1JFQUxfS0lORChbUCwgUiwgUkFESVhdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlA8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgYW5kIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5SPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIGEgc2NhbGFyIGFuZCBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UkFESVg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgYW5kIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KK0JlZm9yZSBGb3J0cmFuIDIwMDgsIGF0IGxlYXN0IG9uZSBvZiB0aGUgYXJndW1lbnRzIDx2YXI+UjwvdmFyPiBvciA8dmFyPlA8L3Zhcj4gc2hhbGwKK2JlIHByZXNlbnQ7IHNpbmNlIEZvcnRyYW4gMjAwOCwgdGhleSBhcmUgYXNzdW1lZCB0byBiZSB6ZXJvIGlmIGFic2VudC4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+Cis8Y29kZT5TRUxFQ1RFRF9SRUFMX0tJTkQ8L2NvZGU+IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBraW5kIHR5cGUgcGFyYW1ldGVyIG9mCithIHJlYWwgZGF0YSB0eXBlIHdpdGggZGVjaW1hbCBwcmVjaXNpb24gb2YgYXQgbGVhc3QgPGNvZGU+UDwvY29kZT4gZGlnaXRzLCBhCitkZWNpbWFsIGV4cG9uZW50IHJhbmdlIG9mIGF0IGxlYXN0IDxjb2RlPlI8L2NvZGU+LCBhbmQgd2l0aCB0aGUgcmVxdWVzdGVkCis8Y29kZT5SQURJWDwvY29kZT4uIElmIHRoZSA8Y29kZT5SQURJWDwvY29kZT4gcGFyYW1ldGVyIGlzIGFic2VudCwgcmVhbCBraW5kcyB3aXRoCithbnkgcmFkaXggY2FuIGJlIHJldHVybmVkLiBJZiBtb3JlIHRoYW4gb25lIHJlYWwgZGF0YSB0eXBlIG1lZXQgdGhlCitjcml0ZXJpYSwgdGhlIGtpbmQgb2YgdGhlIGRhdGEgdHlwZSB3aXRoIHRoZSBzbWFsbGVzdCBkZWNpbWFsIHByZWNpc2lvbgoraXMgcmV0dXJuZWQuIElmIG5vIHJlYWwgZGF0YSB0eXBlIG1hdGNoZXMgdGhlIGNyaXRlcmlhLCB0aGUgcmVzdWx0IGlzCisgICAgICAgICAgPGRsPgorPGR0Pi0xIGlmIHRoZSBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBhIHJlYWwgZGF0YSB0eXBlIHdpdGggYTxkZD5wcmVjaXNpb24gZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDxjb2RlPlA8L2NvZGU+LCBidXQgdGhlIDxjb2RlPlI8L2NvZGU+IGFuZAorPGNvZGU+UkFESVg8L2NvZGU+IHJlcXVpcmVtZW50cyBjYW4gYmUgZnVsZmlsbGVkCis8YnI+PGR0Pi0yIGlmIHRoZSBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBhIHJlYWwgdHlwZSB3aXRoIGFuIGV4cG9uZW50PGRkPnJhbmdlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA8Y29kZT5SPC9jb2RlPiwgYnV0IDxjb2RlPlA8L2NvZGU+IGFuZCA8Y29kZT5SQURJWDwvY29kZT4KK2FyZSBmdWxmaWxsYWJsZQorPGJyPjxkdD4tMyBpZiA8Y29kZT5SQURJWDwvY29kZT4gYnV0IG5vdCA8Y29kZT5QPC9jb2RlPiBhbmQgPGNvZGU+UjwvY29kZT4gcmVxdWlyZW1lbnRzPGRkPmFyZSBmdWxmaWxsYWJsZQorPGJyPjxkdD4tNCBpZiA8Y29kZT5SQURJWDwvY29kZT4gYW5kIGVpdGhlciA8Y29kZT5QPC9jb2RlPiBvciA8Y29kZT5SPC9jb2RlPiByZXF1aXJlbWVudHM8ZGQ+YXJlIGZ1bGZpbGxhYmxlCis8YnI+PGR0Pi01IGlmIHRoZXJlIGlzIG5vIHJlYWwgdHlwZSB3aXRoIHRoZSBnaXZlbiA8Y29kZT5SQURJWDwvY29kZT48ZGQ+PC9kbD4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJQUkVDSVNJT04uaHRtbCNQUkVDSVNJT04iPlBSRUNJU0lPTjwvYT4sIDxhIGhyZWY9IlJBTkdFLmh0bWwjUkFOR0UiPlJBTkdFPC9hPiwgPGEgaHJlZj0iUkFESVguaHRtbCNSQURJWCI+UkFESVg8L2E+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSByZWFsX2tpbmRzCisgICAgICAgICAgICBpbnRlZ2VyLHBhcmFtZXRlciA6OiBwNiA9IHNlbGVjdGVkX3JlYWxfa2luZCg2KQorICAgICAgICAgICAgaW50ZWdlcixwYXJhbWV0ZXIgOjogcDEwcjEwMCA9IHNlbGVjdGVkX3JlYWxfa2luZCgxMCwxMDApCisgICAgICAgICAgICBpbnRlZ2VyLHBhcmFtZXRlciA6OiByNDAwID0gc2VsZWN0ZWRfcmVhbF9raW5kKHI9NDAwKQorICAgICAgICAgICAgcmVhbChraW5kPXA2KSA6OiB4CisgICAgICAgICAgICByZWFsKGtpbmQ9cDEwcjEwMCkgOjogeQorICAgICAgICAgICAgcmVhbChraW5kPXI0MDApIDo6IHoKKyAgICAgICAgICAKKyAgICAgICAgICAgIHByaW50ICosIHByZWNpc2lvbih4KSwgcmFuZ2UoeCkKKyAgICAgICAgICAgIHByaW50ICosIHByZWNpc2lvbih5KSwgcmFuZ2UoeSkKKyAgICAgICAgICAgIHByaW50ICosIHByZWNpc2lvbih6KSwgcmFuZ2UoeikKKyAgICAgICAgICBlbmQgcHJvZ3JhbSByZWFsX2tpbmRzCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NFVF8wMDVmRVhQT05FTlQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TRVRfMDA1ZkVYUE9ORU5ULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiNDY3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TRVRfMDA1ZkVYUE9ORU5ULmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0VUX0VYUE9ORU5UIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNFTEVDVEVEXzAwNWZSRUFMXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQiIHRpdGxlPSJTRUxFQ1RFRF9SRUFMX0tJTkQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSEFQRS5odG1sI1NIQVBFIiB0aXRsZT0iU0hBUEUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0VUX0VYUE9ORU5UIj48L2E+Cis8YSBuYW1lPSJTRVRfMDA1ZkVYUE9ORU5UIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNIQVBFLmh0bWwjU0hBUEUiPlNIQVBFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQuaHRtbCNTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORCI+U0VMRUNURURfUkVBTF9LSU5EPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIxOCA8Y29kZT5TRVRfRVhQT05FTlQ8L2NvZGU+ICZtZGFzaDsgU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgbW9kZWw8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TRVRfMDA1ZkVYUE9ORU5ULTEwMTQiPjwvYT48YSBuYW1lPSJpbmRleC1yZWFsLW51bWJlcl8wMDJjLXNldC1leHBvbmVudC0xMDE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmxvYXRpbmctcG9pbnRfMDAyYy1zZXQtZXhwb25lbnQtMTAxNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNFVF9FWFBPTkVOVChYLCBJKTwvY29kZT4gcmV0dXJucyB0aGUgcmVhbCBudW1iZXIgd2hvc2UgZnJhY3Rpb25hbCBwYXJ0CitpcyB0aGF0IHRoYXQgb2YgPHZhcj5YPC92YXI+IGFuZCB3aG9zZSBleHBvbmVudCBwYXJ0IGlzIDx2YXI+STwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBTRVRfRVhQT05FTlQoWCwgSSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGtpbmQgYXMgPHZhcj5YPC92YXI+LiAKK1RoZSByZWFsIG51bWJlciB3aG9zZSBmcmFjdGlvbmFsIHBhcnQKK2lzIHRoYXQgdGhhdCBvZiA8dmFyPlg8L3Zhcj4gYW5kIHdob3NlIGV4cG9uZW50IHBhcnQgaWYgPHZhcj5JPC92YXI+IGlzIHJldHVybmVkOworaXQgaXMgPGNvZGU+RlJBQ1RJT04oWCkgKiBSQURJWChYKSoqSTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X3NldGV4cAorICAgICAgICAgICAgUkVBTCA6OiB4ID0gMTc4LjEzODdlLTQKKyAgICAgICAgICAgIElOVEVHRVIgOjogaSA9IDE3CisgICAgICAgICAgICBQUklOVCAqLCBTRVRfRVhQT05FTlQoeCwgaSksIEZSQUNUSU9OKHgpICogUkFESVgoeCkqKmkKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSEFQRS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NIQVBFLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5NWEzMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSEFQRS5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNIQVBFIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNFVF8wMDVmRVhQT05FTlQuaHRtbCNTRVRfMDA1ZkVYUE9ORU5UIiB0aXRsZT0iU0VUX0VYUE9ORU5UIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0hJRlRBLmh0bWwjU0hJRlRBIiB0aXRsZT0iU0hJRlRBIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNIQVBFIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNISUZUQS5odG1sI1NISUZUQSI+U0hJRlRBPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0VUXzAwNWZFWFBPTkVOVC5odG1sI1NFVF8wMDVmRVhQT05FTlQiPlNFVF9FWFBPTkVOVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMTkgPGNvZGU+U0hBUEU8L2NvZGU+ICZtZGFzaDsgRGV0ZXJtaW5lIHRoZSBzaGFwZSBvZiBhbiBhcnJheTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNIQVBFLTEwMTciPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLXNoYXBlLTEwMTgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5EZXRlcm1pbmVzIHRoZSBzaGFwZSBvZiBhbiBhcnJheS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlciwgd2l0aCA8dmFyPktJTkQ8L3Zhcj4gYXJndW1lbnQgRm9ydHJhbiAyMDAzIGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gU0hBUEUoU09VUkNFIFssIEtJTkRdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNPVVJDRTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb3Igc2NhbGFyIG9mIGFueSB0eXBlLiAKK0lmIDx2YXI+U09VUkNFPC92YXI+IGlzIGEgcG9pbnRlciBpdCBtdXN0IGJlIGFzc29jaWF0ZWQgYW5kIGFsbG9jYXRhYmxlCithcnJheXMgbXVzdCBiZSBhbGxvY2F0ZWQuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgQW4gPGNvZGU+SU5URUdFUjwvY29kZT4gaW5pdGlhbGl6YXRpb24KK2V4cHJlc3Npb24gaW5kaWNhdGluZyB0aGUga2luZCBwYXJhbWV0ZXIgb2YgdGhlIHJlc3VsdC4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5BbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhcnJheSBvZiByYW5rIG9uZSB3aXRoIGFzIG1hbnkgZWxlbWVudHMgYXMgPHZhcj5TT1VSQ0U8L3Zhcj4KK2hhcyBkaW1lbnNpb25zLiBUaGUgZWxlbWVudHMgb2YgdGhlIHJlc3VsdGluZyBhcnJheSBjb3JyZXNwb25kIHRvIHRoZSBleHRlbmQKK29mIDx2YXI+U09VUkNFPC92YXI+IGFsb25nIHRoZSByZXNwZWN0aXZlIGRpbWVuc2lvbnMuIElmIDx2YXI+U09VUkNFPC92YXI+IGlzIGEgc2NhbGFyLAordGhlIHJlc3VsdCBpcyB0aGUgcmFuayBvbmUgYXJyYXkgb2Ygc2l6ZSB6ZXJvLiBJZiA8dmFyPktJTkQ8L3Zhcj4gaXMgYWJzZW50LCB0aGUKK3JldHVybiB2YWx1ZSBoYXMgdGhlIGRlZmF1bHQgaW50ZWdlciBraW5kIG90aGVyd2lzZSB0aGUgc3BlY2lmaWVkIGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X3NoYXBlCisgICAgICAgICAgICBJTlRFR0VSLCBESU1FTlNJT04oLTE6MSwgLTE6MikgOjogQQorICAgICAgICAgICAgV1JJVEUoKiwqKSBTSEFQRShBKSAgICAgICAgICAgICAhICgvIDMsIDQgLykKKyAgICAgICAgICAgIFdSSVRFKCosKikgU0laRShTSEFQRSg0MikpICAgICAgISAoLyAvKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iUkVTSEFQRS5odG1sI1JFU0hBUEUiPlJFU0hBUEU8L2E+LCA8YSBocmVmPSJTSVpFLmh0bWwjU0laRSI+U0laRTwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSElGVEEuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSElGVEEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODJkYzEyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NISUZUQS5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNISUZUQSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSEFQRS5odG1sI1NIQVBFIiB0aXRsZT0iU0hBUEUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSElGVEwuaHRtbCNTSElGVEwiIHRpdGxlPSJTSElGVEwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0hJRlRBIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNISUZUTC5odG1sI1NISUZUTCI+U0hJRlRMPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0hBUEUuaHRtbCNTSEFQRSI+U0hBUEU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjIwIDxjb2RlPlNISUZUQTwvY29kZT4gJm1kYXNoOyBSaWdodCBzaGlmdCB3aXRoIGZpbGw8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TSElGVEEtMTAxOSI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHNfMDAyYy1zaGlmdC1yaWdodC0xMDIwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2hpZnRfMDAyYy1yaWdodC13aXRoLWZpbGwtMTAyMSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNISUZUQTwvY29kZT4gcmV0dXJucyBhIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gPHZhcj5JPC92YXI+IHdpdGggYWxsIG9mIHRoZQorYml0cyBzaGlmdGVkIHJpZ2h0IGJ5IDx2YXI+U0hJRlQ8L3Zhcj4gcGxhY2VzLiAgSWYgdGhlIGFic29sdXRlIHZhbHVlIG9mCis8dmFyPlNISUZUPC92YXI+IGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT5CSVRfU0laRShJKTwvY29kZT4sIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQuIAorQml0cyBzaGlmdGVkIG91dCBmcm9tIHRoZSByaWdodCBlbmQgYXJlIGxvc3QuIFRoZSBmaWxsIGlzIGFyaXRobWV0aWM6IHRoZQorYml0cyBzaGlmdGVkIGluIGZyb20gdGhlIGxlZnQgZW5kIGFyZSBlcXVhbCB0byB0aGUgbGVmdG1vc3QgYml0LCB3aGljaCBpbgordHdvJ3MgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbiBpcyB0aGUgc2lnbiBiaXQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBTSElGVEEoSSwgU0hJRlQpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TSElGVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+VGhlIHR5cGUgc2hhbGwgYmUgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiB0aGUgc2FtZSBraW5kIGFzCis8dmFyPkk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iU0hJRlRMLmh0bWwjU0hJRlRMIj5TSElGVEw8L2E+LCA8YSBocmVmPSJTSElGVFIuaHRtbCNTSElGVFIiPlNISUZUUjwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSElGVEwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSElGVEwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQ5YzczCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NISUZUTC5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNISUZUTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSElGVEEuaHRtbCNTSElGVEEiIHRpdGxlPSJTSElGVEEiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSElGVFIuaHRtbCNTSElGVFIiIHRpdGxlPSJTSElGVFIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0hJRlRMIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNISUZUUi5odG1sI1NISUZUUiI+U0hJRlRSPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0hJRlRBLmh0bWwjU0hJRlRBIj5TSElGVEE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjIxIDxjb2RlPlNISUZUTDwvY29kZT4gJm1kYXNoOyBMZWZ0IHNoaWZ0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0hJRlRMLTEwMjIiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzXzAwMmMtc2hpZnQtbGVmdC0xMDIzIj48L2E+PGEgbmFtZT0iaW5kZXgtc2hpZnRfMDAyYy1sZWZ0LTEwMjQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5TSElGVEw8L2NvZGU+IHJldHVybnMgYSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIDx2YXI+STwvdmFyPiB3aXRoIGFsbCBvZiB0aGUKK2JpdHMgc2hpZnRlZCBsZWZ0IGJ5IDx2YXI+U0hJRlQ8L3Zhcj4gcGxhY2VzLiAgSWYgdGhlIGFic29sdXRlIHZhbHVlIG9mCis8dmFyPlNISUZUPC92YXI+IGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT5CSVRfU0laRShJKTwvY29kZT4sIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQuIAorQml0cyBzaGlmdGVkIG91dCBmcm9tIHRoZSBsZWZ0IGVuZCBhcmUgbG9zdCwgYW5kIGJpdHMgc2hpZnRlZCBpbiBmcm9tCit0aGUgcmlnaHQgZW5kIGFyZSBzZXQgdG8gMC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFNISUZUTChJLCBTSElGVCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNISUZUPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG9mIHRoZSBzYW1lIGtpbmQgYXMKKzx2YXI+STwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJTSElGVEEuaHRtbCNTSElGVEEiPlNISUZUQTwvYT4sIDxhIGhyZWY9IlNISUZUUi5odG1sI1NISUZUUiI+U0hJRlRSPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NISUZUUi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NISUZUUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODY0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0hJRlRSLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0hJRlRSIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNISUZUTC5odG1sI1NISUZUTCIgdGl0bGU9IlNISUZUTCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNJR04uaHRtbCNTSUdOIiB0aXRsZT0iU0lHTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSElGVFIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU0lHTi5odG1sI1NJR04iPlNJR048L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSElGVEwuaHRtbCNTSElGVEwiPlNISUZUTDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMjIgPGNvZGU+U0hJRlRSPC9jb2RlPiAmbWRhc2g7IFJpZ2h0IHNoaWZ0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0hJRlRSLTEwMjUiPjwvYT48YSBuYW1lPSJpbmRleC1iaXRzXzAwMmMtc2hpZnQtcmlnaHQtMTAyNiI+PC9hPjxhIG5hbWU9ImluZGV4LXNoaWZ0XzAwMmMtcmlnaHQtMTAyNyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNISUZUUjwvY29kZT4gcmV0dXJucyBhIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gPHZhcj5JPC92YXI+IHdpdGggYWxsIG9mIHRoZQorYml0cyBzaGlmdGVkIHJpZ2h0IGJ5IDx2YXI+U0hJRlQ8L3Zhcj4gcGxhY2VzLiAgSWYgdGhlIGFic29sdXRlIHZhbHVlIG9mCis8dmFyPlNISUZUPC92YXI+IGlzIGdyZWF0ZXIgdGhhbiA8Y29kZT5CSVRfU0laRShJKTwvY29kZT4sIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQuIAorQml0cyBzaGlmdGVkIG91dCBmcm9tIHRoZSByaWdodCBlbmQgYXJlIGxvc3QsIGFuZCBiaXRzIHNoaWZ0ZWQgaW4gZnJvbQordGhlIGxlZnQgZW5kIGFyZSBzZXQgdG8gMC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDIwMDggYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFNISUZUUihJLCBTSElGVCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNISUZUPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4gYW5kIG9mIHRoZSBzYW1lIGtpbmQgYXMKKzx2YXI+STwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJTSElGVEEuaHRtbCNTSElGVEEiPlNISUZUQTwvYT4sIDxhIGhyZWY9IlNISUZUTC5odG1sI1NISUZUTCI+U0hJRlRMPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NJR04uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSUdOLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5NjY1YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSUdOLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0lHTiAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSElGVFIuaHRtbCNTSElGVFIiIHRpdGxlPSJTSElGVFIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSUdOQUwuaHRtbCNTSUdOQUwiIHRpdGxlPSJTSUdOQUwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0lHTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSUdOQUwuaHRtbCNTSUdOQUwiPlNJR05BTDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNISUZUUi5odG1sI1NISUZUUiI+U0hJRlRSPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIyMyA8Y29kZT5TSUdOPC9jb2RlPiAmbWRhc2g7IFNpZ24gY29weWluZyBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNJR04tMTAyOCI+PC9hPjxhIG5hbWU9ImluZGV4LUlTSUdOLTEwMjkiPjwvYT48YSBuYW1lPSJpbmRleC1EU0lHTi0xMDMwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2lnbi1jb3B5aW5nLTEwMzEiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5TSUdOKEEsQik8L2NvZGU+IHJldHVybnMgdGhlIHZhbHVlIG9mIDx2YXI+QTwvdmFyPiB3aXRoIHRoZSBzaWduIG9mIDx2YXI+QjwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBTSUdOKEEsIEIpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvciA8Y29kZT5SRUFMPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5CPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBraW5kIGFzIDx2YXI+QTwvdmFyPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSBraW5kIG9mIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhhdCBvZiA8dmFyPkE8L3Zhcj4gYW5kIDx2YXI+QjwvdmFyPi4gCitJZiBCXGdlIDAgdGhlbiB0aGUgcmVzdWx0IGlzIDxjb2RlPkFCUyhBKTwvY29kZT4sIGVsc2UKK2l0IGlzIDxjb2RlPi1BQlMoQSk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9zaWduCisgICAgICAgICAgICBwcmludCAqLCBzaWduKC0xMiwxKQorICAgICAgICAgICAgcHJpbnQgKiwgc2lnbigtMTIsMCkKKyAgICAgICAgICAgIHByaW50ICosIHNpZ24oLTEyLC0xKQorICAgICAgICAgIAorICAgICAgICAgICAgcHJpbnQgKiwgc2lnbigtMTIuLDEuKQorICAgICAgICAgICAgcHJpbnQgKiwgc2lnbigtMTIuLDAuKQorICAgICAgICAgICAgcHJpbnQgKiwgc2lnbigtMTIuLC0xLikKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X3NpZ24KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TcGVjaWZpYyBuYW1lczwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPk5hbWUgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudHMgICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlNJR04oQSxCKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIEEsIEI8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Zjc3LCBnbnUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPklTSUdOKEEsQik8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpIEEsIEI8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5JTlRFR0VSKDQpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Zjc3LCBnbnUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRTSUdOKEEsQik8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIEEsIEI8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Zjc3LCBnbnUKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NJR05BTC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NJR05BTC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjczNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0lHTkFMLmh0bWwKQEAgLTAsMCArMSwxMDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNJR05BTCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTSUdOLmh0bWwjU0lHTiIgdGl0bGU9IlNJR04iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTSU4uaHRtbCNTSU4iIHRpdGxlPSJTSU4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU0lHTkFMIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNJTi5odG1sI1NJTiI+U0lOPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0lHTi5odG1sI1NJR04iPlNJR048L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjI0IDxjb2RlPlNJR05BTDwvY29kZT4gJm1kYXNoOyBTaWduYWwgaGFuZGxpbmcgc3Vicm91dGluZSAob3IgZnVuY3Rpb24pPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0lHTkFMLTEwMzIiPjwvYT48YSBuYW1lPSJpbmRleC1zeXN0ZW1fMDAyYy1zaWduYWwtaGFuZGxpbmctMTAzMyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNJR05BTChOVU1CRVIsIEhBTkRMRVIgWywgU1RBVFVTXSk8L2NvZGU+IGNhdXNlcyBleHRlcm5hbCBzdWJyb3V0aW5lCis8dmFyPkhBTkRMRVI8L3Zhcj4gdG8gYmUgZXhlY3V0ZWQgd2l0aCBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50IHdoZW4gc2lnbmFsCis8dmFyPk5VTUJFUjwvdmFyPiBvY2N1cnMuICBJZiA8dmFyPkhBTkRMRVI8L3Zhcj4gaXMgYW4gaW50ZWdlciwgaXQgY2FuIGJlIHVzZWQgdG8KK3R1cm4gb2ZmIGhhbmRsaW5nIG9mIHNpZ25hbCA8dmFyPk5VTUJFUjwvdmFyPiBvciByZXZlcnQgdG8gaXRzIGRlZmF1bHQKK2FjdGlvbi4gIFNlZSA8Y29kZT5zaWduYWwoMik8L2NvZGU+LgorCisgICAgIDxwPklmIDxjb2RlPlNJR05BTDwvY29kZT4gaXMgY2FsbGVkIGFzIGEgc3Vicm91dGluZSBhbmQgdGhlIDx2YXI+U1RBVFVTPC92YXI+IGFyZ3VtZW50CitpcyBzdXBwbGllZCwgaXQgaXMgc2V0IHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBieSA8Y29kZT5zaWduYWwoMik8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgU0lHTkFMKE5VTUJFUiwgSEFORExFUiBbLCBTVEFUVVNdKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlNUQVRVUyA9IFNJR05BTChOVU1CRVIsIEhBTkRMRVIpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OVU1CRVI8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIGludGVnZXIsIHdpdGggPGNvZGU+SU5URU5UKElOKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+SEFORExFUjwvdmFyPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaWduYWwgaGFuZGxlciAoPGNvZGU+SU5URUdFUiBGVU5DVElPTjwvY29kZT4gb3IKKzxjb2RlPlNVQlJPVVRJTkU8L2NvZGU+KSBvciBkdW1teS9nbG9iYWwgPGNvZGU+SU5URUdFUjwvY29kZT4gc2NhbGFyLiAKKzxjb2RlPklOVEVHRVI8L2NvZGU+LiBJdCBpcyA8Y29kZT5JTlRFTlQoSU4pPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSA8dmFyPlNUQVRVUzwvdmFyPiBzaGFsbCBiZSBhIHNjYWxhcgoraW50ZWdlci4gSXQgaGFzIDxjb2RlPklOVEVOVChPVVQpPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorPCEtLSBUT0RPOiBXaGF0IHNob3VsZCB0aGUgaW50ZXJmYWNlIG9mIHRoZSBoYW5kbGVyIGJlPyAgRG9lcyBpdCB0YWtlIGFyZ3VtZW50cz8gLS0+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSA8Y29kZT5TSUdOQUw8L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IDxjb2RlPnNpZ25hbCgyKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X3NpZ25hbAorICAgICAgICAgICAgaW50cmluc2ljIHNpZ25hbAorICAgICAgICAgICAgZXh0ZXJuYWwgaGFuZGxlcl9wcmludAorICAgICAgICAgIAorICAgICAgICAgICAgY2FsbCBzaWduYWwgKDEyLCBoYW5kbGVyX3ByaW50KQorICAgICAgICAgICAgY2FsbCBzaWduYWwgKDEwLCAxKQorICAgICAgICAgIAorICAgICAgICAgICAgY2FsbCBzbGVlcCAoMzApCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9zaWduYWwKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0lOLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0lOLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3MTgyYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSU4uaHRtbApAQCAtMCwwICsxLDkzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TSU4gLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU0lHTkFMLmh0bWwjU0lHTkFMIiB0aXRsZT0iU0lHTkFMIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0lOSC5odG1sI1NJTkgiIHRpdGxlPSJTSU5IIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNJTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTSU5ILmh0bWwjU0lOSCI+U0lOSDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNJR05BTC5odG1sI1NJR05BTCI+U0lHTkFMPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIyNSA8Y29kZT5TSU48L2NvZGU+ICZtZGFzaDsgU2luZSBmdW5jdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNJTi0xMDM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtRFNJTi0xMDM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ1NJTi0xMDM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtWlNJTi0xMDM3Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ0RTSU4tMTAzOCI+PC9hPjxhIG5hbWU9ImluZGV4LXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25fMDAyYy1zaW5lLTEwMzkiPjwvYT48YSBuYW1lPSJpbmRleC1zaW5lLTEwNDAiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5TSU4oWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBzaW5lIG9mIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPkVsZW1lbnRhbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBTSU4oWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5SRUFMPC9jb2RlPiBvcgorPGNvZGU+Q09NUExFWDwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBoYXMgc2FtZSB0eXBlIGFuZCBraW5kIGFzIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBwcm9ncmFtIHRlc3Rfc2luCisgICAgICAgICAgICByZWFsIDo6IHggPSAwLjAKKyAgICAgICAgICAgIHggPSBzaW4oeCkKKyAgICAgICAgICBlbmQgcHJvZ3JhbSB0ZXN0X3NpbgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5TSU4oWCk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Zjc3LCBnbnUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRTSU4oWCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5mOTUsIGdudQorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q1NJTihYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDQpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg0KTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPmY5NSwgZ251Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5aU0lOKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Zjk1LCBnbnUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNEU0lOKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5mOTUsIGdudQorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQVNJTi5odG1sI0FTSU4iPkFTSU48L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0lOSC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NJTkguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGExZWZhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NJTkguaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TSU5IIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNJTi5odG1sI1NJTiIgdGl0bGU9IlNJTiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNJWkUuaHRtbCNTSVpFIiB0aXRsZT0iU0laRSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSU5IIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNJWkUuaHRtbCNTSVpFIj5TSVpFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0lOLmh0bWwjU0lOIj5TSU48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjI2IDxjb2RlPlNJTkg8L2NvZGU+ICZtZGFzaDsgSHlwZXJib2xpYyBzaW5lIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0lOSC0xMDQxIj48L2E+PGEgbmFtZT0iaW5kZXgtRFNJTkgtMTA0MiI+PC9hPjxhIG5hbWU9ImluZGV4LWh5cGVyYm9saWMtc2luZS0xMDQzIj48L2E+PGEgbmFtZT0iaW5kZXgtaHlwZXJib2xpYy1mdW5jdGlvbl8wMDJjLXNpbmUtMTA0NCI+PC9hPjxhIG5hbWU9ImluZGV4LXNpbmVfMDAyYy1oeXBlcmJvbGljLTEwNDUiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5TSU5IKFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlciwgZm9yIGEgY29tcGxleCBhcmd1bWVudCBGb3J0cmFuIDIwMDggb3IgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gU0lOSChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+IG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaGFzIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X3NpbmgKKyAgICAgICAgICAgIHJlYWwoOCkgOjogeCA9IC0gMS4wXzgKKyAgICAgICAgICAgIHggPSBzaW5oKHgpCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9zaW5oCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+U3RhbmRhcmQKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlNJTkgoWCk8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+RFNJTkgoWCk8L2NvZGU+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJBU0lOSC5odG1sI0FTSU5IIj5BU0lOSDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TSVpFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0laRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZGM0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0laRS5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNJWkUgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU0lOSC5odG1sI1NJTkgiIHRpdGxlPSJTSU5IIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU0laRU9GLmh0bWwjU0laRU9GIiB0aXRsZT0iU0laRU9GIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNJWkUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU0laRU9GLmh0bWwjU0laRU9GIj5TSVpFT0Y8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSU5ILmh0bWwjU0lOSCI+U0lOSDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMjcgPGNvZGU+U0laRTwvY29kZT4gJm1kYXNoOyBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYW4gYXJyYXk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TSVpFLTEwNDYiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLXNpemUtMTA0NyI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtbnVtYmVyLW9mLWVsZW1lbnRzLTEwNDgiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLWNvdW50LWVsZW1lbnRzLTEwNDkiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5EZXRlcm1pbmUgdGhlIGV4dGVudCBvZiA8dmFyPkFSUkFZPC92YXI+IGFsb25nIGEgc3BlY2lmaWVkIGRpbWVuc2lvbiA8dmFyPkRJTTwvdmFyPiwKK29yIHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4gPHZhcj5BUlJBWTwvdmFyPiBpZiA8dmFyPkRJTTwvdmFyPiBpcyBhYnNlbnQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIsIHdpdGggPHZhcj5LSU5EPC92YXI+IGFyZ3VtZW50IEZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFNJWkUoQVJSQVlbLCBESU0gWywgS0lORF1dKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkFSUkFZPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhbiBhcnJheSBvZiBhbnkgdHlwZS4gSWYgPHZhcj5BUlJBWTwvdmFyPiBpcworYSBwb2ludGVyIGl0IG11c3QgYmUgYXNzb2NpYXRlZCBhbmQgYWxsb2NhdGFibGUgYXJyYXlzIG11c3QgYmUgYWxsb2NhdGVkLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPgorYW5kIGl0cyB2YWx1ZSBzaGFsbCBiZSBpbiB0aGUgcmFuZ2UgZnJvbSAxIHRvIG4sIHdoZXJlIG4gZXF1YWxzIHRoZSByYW5rCitvZiA8dmFyPkFSUkFZPC92YXI+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBBbiA8Y29kZT5JTlRFR0VSPC9jb2RlPiBpbml0aWFsaXphdGlvbgorZXhwcmVzc2lvbiBpbmRpY2F0aW5nIHRoZSBraW5kIHBhcmFtZXRlciBvZiB0aGUgcmVzdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiBhbmQgb2Yga2luZCA8dmFyPktJTkQ8L3Zhcj4uIElmCis8dmFyPktJTkQ8L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9mIGRlZmF1bHQgaW50ZWdlciBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9zaXplCisgICAgICAgICAgICBXUklURSgqLCopIFNJWkUoKC8gMSwgMiAvKSkgICAgISAyCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJTSEFQRS5odG1sI1NIQVBFIj5TSEFQRTwvYT4sIDxhIGhyZWY9IlJFU0hBUEUuaHRtbCNSRVNIQVBFIj5SRVNIQVBFPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NJWkVPRi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NJWkVPRi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYjU0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0laRU9GLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0laRU9GIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNJWkUuaHRtbCNTSVpFIiB0aXRsZT0iU0laRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNMRUVQLmh0bWwjU0xFRVAiIHRpdGxlPSJTTEVFUCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTSVpFT0YiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU0xFRVAuaHRtbCNTTEVFUCI+U0xFRVA8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTSVpFLmh0bWwjU0laRSI+U0laRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMjggPGNvZGU+U0laRU9GPC9jb2RlPiAmbWRhc2g7IFNpemUgaW4gYnl0ZXMgb2YgYW4gZXhwcmVzc2lvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNJWkVPRi0xMDUwIj48L2E+PGEgbmFtZT0iaW5kZXgtZXhwcmVzc2lvbi1zaXplLTEwNTEiPjwvYT48YSBuYW1lPSJpbmRleC1zaXplLW9mLWFuLWV4cHJlc3Npb24tMTA1MiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNJWkVPRihYKTwvY29kZT4gY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHN0b3JhZ2UgdGhlCitleHByZXNzaW9uIDxjb2RlPlg8L2NvZGU+IG9jY3VwaWVzLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnRyaW5zaWMgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+TiA9IFNJWkVPRihYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSBhcmd1bWVudCBzaGFsbCBiZSBvZiBhbnkgdHlwZSwgcmFuayBvciBzaGFwZS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgaW50ZWdlciBhbmQgb2YgdGhlIHN5c3RlbS1kZXBlbmRlbnQga2luZAorPHZhcj5DX1NJWkVfVDwvdmFyPiAoZnJvbSB0aGUgPHZhcj5JU09fQ19CSU5ESU5HPC92YXI+IG1vZHVsZSkuIEl0cyB2YWx1ZSBpcyB0aGUKK251bWJlciBvZiBieXRlcyBvY2N1cGllZCBieSB0aGUgYXJndW1lbnQuICBJZiB0aGUgYXJndW1lbnQgaGFzIHRoZQorPGNvZGU+UE9JTlRFUjwvY29kZT4gYXR0cmlidXRlLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBzdG9yYWdlIGFyZWEgcG9pbnRlZAordG8gaXMgcmV0dXJuZWQuICBJZiB0aGUgYXJndW1lbnQgaXMgb2YgYSBkZXJpdmVkIHR5cGUgd2l0aCA8Y29kZT5QT0lOVEVSPC9jb2RlPgorb3IgPGNvZGU+QUxMT0NBVEFCTEU8L2NvZGU+IGNvbXBvbmVudHMsIHRoZSByZXR1cm4gdmFsdWUgZG9lcyBub3QgYWNjb3VudCBmb3IKK3RoZSBzaXplcyBvZiB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IHRoZXNlIGNvbXBvbmVudHMuIElmIHRoZSBhcmd1bWVudCBpcworcG9seW1vcnBoaWMsIHRoZSBzaXplIGFjY29yZGluZyB0byB0aGUgZGVjbGFyZWQgdHlwZSBpcyByZXR1cm5lZC4gVGhlIGFyZ3VtZW50CittYXkgbm90IGJlIGEgcHJvY2VkdXJlIG9yIHByb2NlZHVyZSBwb2ludGVyLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgIGludGVnZXIgOjogaQorICAgICAgICAgICAgIHJlYWwgOjogciwgcyg1KQorICAgICAgICAgICAgIHByaW50ICosIChzaXplb2Yocykvc2l6ZW9mKHIpID09IDUpCisgICAgICAgICAgICAgZW5kCis8L3ByZT4KKyAgICAgPHA+VGhlIGV4YW1wbGUgd2lsbCBwcmludCA8Y29kZT4uVFJVRS48L2NvZGU+IHVubGVzcyB5b3UgYXJlIHVzaW5nIGEgcGxhdGZvcm0KK3doZXJlIGRlZmF1bHQgPGNvZGU+UkVBTDwvY29kZT4gdmFyaWFibGVzIGFyZSB1bnVzdWFsbHkgcGFkZGVkLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkNfMDA1ZlNJWkVPRi5odG1sI0NfMDA1ZlNJWkVPRiI+Q19TSVpFT0Y8L2E+LCA8YSBocmVmPSJTVE9SQUdFXzAwNWZTSVpFLmh0bWwjU1RPUkFHRV8wMDVmU0laRSI+U1RPUkFHRV9TSVpFPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NMRUVQLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU0xFRVAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGZjYzFlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NMRUVQLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U0xFRVAgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU0laRU9GLmh0bWwjU0laRU9GIiB0aXRsZT0iU0laRU9GIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU1BBQ0lORy5odG1sI1NQQUNJTkciIHRpdGxlPSJTUEFDSU5HIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNMRUVQIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNQQUNJTkcuaHRtbCNTUEFDSU5HIj5TUEFDSU5HPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU0laRU9GLmh0bWwjU0laRU9GIj5TSVpFT0Y8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjI5IDxjb2RlPlNMRUVQPC9jb2RlPiAmbWRhc2g7IFNsZWVwIGZvciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzZWNvbmRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0xFRVAtMTA1MyI+PC9hPjxhIG5hbWU9ImluZGV4LWRlbGF5ZWQtZXhlY3V0aW9uLTEwNTQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5DYWxsaW5nIHRoaXMgc3Vicm91dGluZSBjYXVzZXMgdGhlIHByb2Nlc3MgdG8gcGF1c2UgZm9yIDx2YXI+U0VDT05EUzwvdmFyPiBzZWNvbmRzLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPkNBTEwgU0xFRVAoU0VDT05EUyk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TRUNPTkRTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPklOVEVHRVI8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X3NsZWVwCisgICAgICAgICAgICBjYWxsIHNsZWVwKDUpCisgICAgICAgICAgZW5kCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NQQUNJTkcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TUEFDSU5HLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmODI0YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TUEFDSU5HLmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U1BBQ0lORyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTTEVFUC5odG1sI1NMRUVQIiB0aXRsZT0iU0xFRVAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTUFJFQUQuaHRtbCNTUFJFQUQiIHRpdGxlPSJTUFJFQUQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1BBQ0lORyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTUFJFQUQuaHRtbCNTUFJFQUQiPlNQUkVBRDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNMRUVQLmh0bWwjU0xFRVAiPlNMRUVQPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIzMCA8Y29kZT5TUEFDSU5HPC9jb2RlPiAmbWRhc2g7IFNtYWxsZXN0IGRpc3RhbmNlIGJldHdlZW4gdHdvIG51bWJlcnMgb2YgYSBnaXZlbiB0eXBlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU1BBQ0lORy0xMDU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVhbC1udW1iZXJfMDAyYy1yZWxhdGl2ZS1zcGFjaW5nLTEwNTYiPjwvYT48YSBuYW1lPSJpbmRleC1mbG9hdGluZy1wb2ludF8wMDJjLXJlbGF0aXZlLXNwYWNpbmctMTA1NyI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkRldGVybWluZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGFyZ3VtZW50IDx2YXI+WDwvdmFyPiBhbmQgdGhlIG5lYXJlc3QKK2FkamFjZW50IG51bWJlciBvZiB0aGUgc2FtZSB0eXBlLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFNQQUNJTkcoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXN1bHQgaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgaW5wdXQgYXJndW1lbnQgPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9zcGFjaW5nCisgICAgICAgICAgICBJTlRFR0VSLCBQQVJBTUVURVIgOjogU0dMID0gU0VMRUNURURfUkVBTF9LSU5EKHA9Niwgcj0zNykKKyAgICAgICAgICAgIElOVEVHRVIsIFBBUkFNRVRFUiA6OiBEQkwgPSBTRUxFQ1RFRF9SRUFMX0tJTkQocD0xMywgcj0yMDApCisgICAgICAgICAgCisgICAgICAgICAgICBXUklURSgqLCopIHNwYWNpbmcoMS4wX1NHTCkgICAgICAhICIxLjE5MjA5MjlFLTA3IiAgICAgICAgICBvbiBpNjg2CisgICAgICAgICAgICBXUklURSgqLCopIHNwYWNpbmcoMS4wX0RCTCkgICAgICAhICIyLjIyMDQ0NjA0OTI1MDMxM0UtMDE2IiBvbiBpNjg2CisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJSUlNQQUNJTkcuaHRtbCNSUlNQQUNJTkciPlJSU1BBQ0lORzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TUFJFQUQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TUFJFQUQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmY2OWU1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NQUkVBRC5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNQUkVBRCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTUEFDSU5HLmh0bWwjU1BBQ0lORyIgdGl0bGU9IlNQQUNJTkciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTUVJULmh0bWwjU1FSVCIgdGl0bGU9IlNRUlQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1BSRUFEIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNRUlQuaHRtbCNTUVJUIj5TUVJUPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU1BBQ0lORy5odG1sI1NQQUNJTkciPlNQQUNJTkc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjMxIDxjb2RlPlNQUkVBRDwvY29kZT4gJm1kYXNoOyBBZGQgYSBkaW1lbnNpb24gdG8gYW4gYXJyYXk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TUFJFQUQtMTA1OCI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtaW5jcmVhc2UtZGltZW5zaW9uLTEwNTkiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLWR1cGxpY2F0ZS1lbGVtZW50cy0xMDYwIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1kdXBsaWNhdGUtZGltZW5zaW9ucy0xMDYxIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmVwbGljYXRlcyBhIDx2YXI+U09VUkNFPC92YXI+IGFycmF5IDx2YXI+TkNPUElFUzwvdmFyPiB0aW1lcyBhbG9uZyBhIHNwZWNpZmllZAorZGltZW5zaW9uIDx2YXI+RElNPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+VHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBTUFJFQUQoU09VUkNFLCBESU0sIE5DT1BJRVMpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U09VUkNFPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb3IgYW4gYXJyYXkgb2YgYW55IHR5cGUgYW5kCithIHJhbmsgbGVzcyB0aGFuIHNldmVuLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPiB3aXRoIGEKK3ZhbHVlIGluIHRoZSByYW5nZSBmcm9tIDEgdG8gbisxLCB3aGVyZSBuIGVxdWFscyB0aGUgcmFuayBvZiA8dmFyPlNPVVJDRTwvdmFyPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk5DT1BJRVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJlc3VsdCBpcyBhbiBhcnJheSBvZiB0aGUgc2FtZSB0eXBlIGFzIDx2YXI+U09VUkNFPC92YXI+IGFuZCBoYXMgcmFuayBuKzEKK3doZXJlIG4gZXF1YWxzIHRoZSByYW5rIG9mIDx2YXI+U09VUkNFPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9zcHJlYWQKKyAgICAgICAgICAgIElOVEVHRVIgOjogYSA9IDEsIGIoMikgPSAoLyAxLCAyIC8pCisgICAgICAgICAgICBXUklURSgqLCopIFNQUkVBRChBLCAxLCAyKSAgICAgICAgICAgICEgIjEgMSIKKyAgICAgICAgICAgIFdSSVRFKCosKikgU1BSRUFEKEIsIDEsIDIpICAgICAgICAgICAgISAiMSAxIDIgMiIKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlVOUEFDSy5odG1sI1VOUEFDSyI+VU5QQUNLPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NRUlQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TUVJULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0YjY5MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TUVJULmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U1FSVCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTUFJFQUQuaHRtbCNTUFJFQUQiIHRpdGxlPSJTUFJFQUQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTUkFORC5odG1sI1NSQU5EIiB0aXRsZT0iU1JBTkQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1FSVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTUkFORC5odG1sI1NSQU5EIj5TUkFORDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNQUkVBRC5odG1sI1NQUkVBRCI+U1BSRUFEPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIzMiA8Y29kZT5TUVJUPC9jb2RlPiAmbWRhc2g7IFNxdWFyZS1yb290IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU1FSVC0xMDYyIj48L2E+PGEgbmFtZT0iaW5kZXgtRFNRUlQtMTA2MyI+PC9hPjxhIG5hbWU9ImluZGV4LUNTUVJULTEwNjQiPjwvYT48YSBuYW1lPSJpbmRleC1aU1FSVC0xMDY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtQ0RTUVJULTEwNjYiPjwvYT48YSBuYW1lPSJpbmRleC1yb290LTEwNjciPjwvYT48YSBuYW1lPSJpbmRleC1zcXVhcmVfMDAyZHJvb3QtMTA2OCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNRUlQoWCk8L2NvZGU+IGNvbXB1dGVzIHRoZSBzcXVhcmUgcm9vdCBvZiA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gU1FSVChYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+IG9yCis8Y29kZT5DT01QTEVYPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIG9mIHR5cGUgPGNvZGU+UkVBTDwvY29kZT4gb3IgPGNvZGU+Q09NUExFWDwvY29kZT4uIAorVGhlIGtpbmQgdHlwZSBwYXJhbWV0ZXIgaXMgdGhlIHNhbWUgYXMgPHZhcj5YPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIHByb2dyYW0gdGVzdF9zcXJ0CisgICAgICAgICAgICByZWFsKDgpIDo6IHggPSAyLjBfOAorICAgICAgICAgICAgY29tcGxleCA6OiB6ID0gKDEuMCwgMi4wKQorICAgICAgICAgICAgeCA9IHNxcnQoeCkKKyAgICAgICAgICAgIHogPSBzcXJ0KHopCisgICAgICAgICAgZW5kIHByb2dyYW0gdGVzdF9zcXJ0Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5TUVJUKFgpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpIFg8L2NvZGU+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg0KTwvY29kZT4gICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5EU1FSVChYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpIFg8L2NvZGU+ICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KTwvY29kZT4gICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DU1FSVChYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDQpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg0KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5aU1FSVChYKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDgpIFg8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+Q09NUExFWCg4KTwvY29kZT4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkdOVSBleHRlbnNpb24KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNEU1FSVChYKTwvY29kZT4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkNPTVBMRVgoOCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5DT01QTEVYKDgpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+R05VIGV4dGVuc2lvbgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU1JBTkQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TUkFORC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZmY3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU1JBTkQuaHRtbApAQCAtMCwwICsxLDkwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TUkFORCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTUVJULmh0bWwjU1FSVCIgdGl0bGU9IlNRUlQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTVEFULmh0bWwjU1RBVCIgdGl0bGU9IlNUQVQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1JBTkQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU1RBVC5odG1sI1NUQVQiPlNUQVQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTUVJULmh0bWwjU1FSVCI+U1FSVDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMzMgPGNvZGU+U1JBTkQ8L2NvZGU+ICZtZGFzaDsgUmVpbml0aWFsaXplIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNSQU5ELTEwNjkiPjwvYT48YSBuYW1lPSJpbmRleC1yYW5kb20tbnVtYmVyLWdlbmVyYXRpb25fMDAyYy1zZWVkaW5nLTEwNzAiPjwvYT48YSBuYW1lPSJpbmRleC1zZWVkaW5nLWEtcmFuZG9tLW51bWJlci1nZW5lcmF0b3ItMTA3MSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlNSQU5EPC9jb2RlPiByZWluaXRpYWxpemVzIHRoZSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKK2NhbGxlZCBieSA8Y29kZT5SQU5EPC9jb2RlPiBhbmQgPGNvZGU+SVJBTkQ8L2NvZGU+LiBUaGUgbmV3IHNlZWQgdXNlZCBieSB0aGUKK2dlbmVyYXRvciBpcyBzcGVjaWZpZWQgYnkgdGhlIHJlcXVpcmVkIGFyZ3VtZW50IDx2YXI+U0VFRDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZQorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5DQUxMIFNSQU5EKFNFRUQpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U0VFRDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgPGNvZGU+SU5URUdFUihraW5kPTQpPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5Eb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD5TZWUgPGNvZGU+UkFORDwvY29kZT4gYW5kIDxjb2RlPklSQU5EPC9jb2RlPiBmb3IgZXhhbXBsZXMuCisKKyAgICAgPGJyPjxkdD48ZW0+Tm90ZXM8L2VtPjo8ZGQ+VGhlIEZvcnRyYW4gMjAwMyBzdGFuZGFyZCBzcGVjaWZpZXMgdGhlIGludHJpbnNpYyA8Y29kZT5SQU5ET01fU0VFRDwvY29kZT4gdG8KK2luaXRpYWxpemUgdGhlIHBzZXVkby1yYW5kb20gbnVtYmVycyBnZW5lcmF0b3IgYW5kIDxjb2RlPlJBTkRPTV9OVU1CRVI8L2NvZGU+Cit0byBnZW5lcmF0ZSBwc2V1ZG8tcmFuZG9tIG51bWJlcnMuIFBsZWFzZSBub3RlIHRoYXQgaW4KK0dOVSBGb3J0cmFuLCB0aGVzZSB0d28gc2V0cyBvZiBpbnRyaW5zaWNzICg8Y29kZT5SQU5EPC9jb2RlPiwKKzxjb2RlPklSQU5EPC9jb2RlPiBhbmQgPGNvZGU+U1JBTkQ8L2NvZGU+IG9uIHRoZSBvbmUgaGFuZCwgPGNvZGU+UkFORE9NX05VTUJFUjwvY29kZT4gYW5kCis8Y29kZT5SQU5ET01fU0VFRDwvY29kZT4gb24gdGhlIG90aGVyIGhhbmQpIGFjY2VzcyB0d28gaW5kZXBlbmRlbnQKK3BzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMuCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iUkFORC5odG1sI1JBTkQiPlJBTkQ8L2E+LCA8YSBocmVmPSJSQU5ET01fMDA1ZlNFRUQuaHRtbCNSQU5ET01fMDA1ZlNFRUQiPlJBTkRPTV9TRUVEPC9hPiwgPGEgaHJlZj0iUkFORE9NXzAwNWZOVU1CRVIuaHRtbCNSQU5ET01fMDA1Zk5VTUJFUiI+UkFORE9NX05VTUJFUjwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NUQVQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TVEFULmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEzODVjYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TVEFULmh0bWwKQEAgLTAsMCArMSwxMzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNUQVQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU1JBTkQuaHRtbCNTUkFORCIgdGl0bGU9IlNSQU5EIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU1RPUkFHRV8wMDVmU0laRS5odG1sI1NUT1JBR0VfMDA1ZlNJWkUiIHRpdGxlPSJTVE9SQUdFX1NJWkUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1RBVCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTVE9SQUdFXzAwNWZTSVpFLmh0bWwjU1RPUkFHRV8wMDVmU0laRSI+U1RPUkFHRV9TSVpFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU1JBTkQuaHRtbCNTUkFORCI+U1JBTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjM0IDxjb2RlPlNUQVQ8L2NvZGU+ICZtZGFzaDsgR2V0IGZpbGUgc3RhdHVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU1RBVC0xMDcyIj48L2E+PGEgbmFtZT0iaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1maWxlLXN0YXR1cy0xMDczIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+VGhpcyBmdW5jdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZS4gTm8gcGVybWlzc2lvbnMgYXJlIHJlcXVpcmVkIG9uCit0aGUgZmlsZSBpdHNlbGYsIGJ1dCBleGVjdXRlIChzZWFyY2gpIHBlcm1pc3Npb24gaXMgcmVxdWlyZWQgb24gYWxsIG9mIHRoZQorZGlyZWN0b3JpZXMgaW4gcGF0aCB0aGF0IGxlYWQgdG8gdGhlIGZpbGUuCisKKyAgICAgPHA+VGhlIGVsZW1lbnRzIHRoYXQgYXJlIG9idGFpbmVkIGFuZCBzdG9yZWQgaW4gdGhlIGFycmF5IDxjb2RlPlZBTFVFUzwvY29kZT46CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5WQUxVRVMoMSk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPkRldmljZSBJRAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+VkFMVUVTKDIpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5Jbm9kZSBudW1iZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPlZBTFVFUygzKTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+RmlsZSBtb2RlCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5WQUxVRVMoNCk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPk51bWJlciBvZiBsaW5rcworPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+VkFMVUVTKDUpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5Pd25lcidzIHVpZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+VkFMVUVTKDYpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5Pd25lcidzIGdpZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+VkFMVUVTKDcpPC9jb2RlPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5JRCBvZiBkZXZpY2UgY29udGFpbmluZyBkaXJlY3RvcnkgZW50cnkgZm9yIGZpbGUgKDAgaWYgbm90IGF2YWlsYWJsZSkKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPlZBTFVFUyg4KTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+RmlsZSBzaXplIChieXRlcykKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPlZBTFVFUyg5KTwvY29kZT4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+TGFzdCBhY2Nlc3MgdGltZQorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+VkFMVUVTKDEwKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5MYXN0IG1vZGlmaWNhdGlvbiB0aW1lCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48Y29kZT5WQUxVRVMoMTEpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPkxhc3QgZmlsZSBzdGF0dXMgY2hhbmdlIHRpbWUKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjxjb2RlPlZBTFVFUygxMik8L2NvZGU+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+UHJlZmVycmVkIEkvTyBibG9jayBzaXplICgtMSBpZiBub3QgYXZhaWxhYmxlKQorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PGNvZGU+VkFMVUVTKDEzKTwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5OdW1iZXIgb2YgYmxvY2tzIGFsbG9jYXRlZCAoLTEgaWYgbm90IGF2YWlsYWJsZSkKKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxwPk5vdCBhbGwgdGhlc2UgZWxlbWVudHMgYXJlIHJlbGV2YW50IG9uIGFsbCBzeXN0ZW1zLiAKK0lmIGFuIGVsZW1lbnQgaXMgbm90IHJlbGV2YW50LCBpdCBpcyByZXR1cm5lZCBhcyAwLgorCisgICAgIDxwPlRoaXMgaW50cmluc2ljIGlzIHByb3ZpZGVkIGluIGJvdGggc3Vicm91dGluZSBhbmQgZnVuY3Rpb24gZm9ybXM7IGhvd2V2ZXIsCitvbmx5IG9uZSBmb3JtIGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBwcm9ncmFtIHVuaXQuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+R05VIGV4dGVuc2lvbgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+Q0FMTCBTVEFUKE5BTUUsIFZBTFVFUyBbLCBTVEFUVVNdKTwvY29kZT4KKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPlNUQVRVUyA9IFNUQVQoTkFNRSwgVkFMVUVTKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TkFNRTwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+LCBvZiB0aGUKK2RlZmF1bHQga2luZCBhbmQgYSB2YWxpZCBwYXRoIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5WQUxVRVM8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPklOVEVHRVIoNCksIERJTUVOU0lPTigxMyk8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHN0YXR1cyBmbGFnIG9mIHR5cGUgPGNvZGU+SU5URUdFUig0KTwvY29kZT4uIFJldHVybnMgMAorb24gc3VjY2VzcyBhbmQgYSBzeXN0ZW0gc3BlY2lmaWMgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3Rfc3RhdAorICAgICAgICAgICAgSU5URUdFUiwgRElNRU5TSU9OKDEzKSA6OiBidWZmCisgICAgICAgICAgICBJTlRFR0VSIDo6IHN0YXR1cworICAgICAgICAgIAorICAgICAgICAgICAgQ0FMTCBTVEFUKCIvZXRjL3Bhc3N3ZCIsIGJ1ZmYsIHN0YXR1cykKKyAgICAgICAgICAKKyAgICAgICAgICAgIElGIChzdGF0dXMgPT0gMCkgVEhFTgorICAgICAgICAgICAgICBXUklURSAoKiwgRk1UPSIoJ0RldmljZSBJRDonLCAgICAgICAgICAgICAgIFQzMCwgSTE5KSIpIGJ1ZmYoMSkKKyAgICAgICAgICAgICAgV1JJVEUgKCosIEZNVD0iKCdJbm9kZSBudW1iZXI6JywgICAgICAgICAgICBUMzAsIEkxOSkiKSBidWZmKDIpCisgICAgICAgICAgICAgIFdSSVRFICgqLCBGTVQ9IignRmlsZSBtb2RlIChvY3RhbCk6JywgICAgICAgVDMwLCBPMTkpIikgYnVmZigzKQorICAgICAgICAgICAgICBXUklURSAoKiwgRk1UPSIoJ051bWJlciBvZiBsaW5rczonLCAgICAgICAgIFQzMCwgSTE5KSIpIGJ1ZmYoNCkKKyAgICAgICAgICAgICAgV1JJVEUgKCosIEZNVD0iKCdPd25lcicncyB1aWQ6JywgICAgICAgICAgICBUMzAsIEkxOSkiKSBidWZmKDUpCisgICAgICAgICAgICAgIFdSSVRFICgqLCBGTVQ9IignT3duZXInJ3MgZ2lkOicsICAgICAgICAgICAgVDMwLCBJMTkpIikgYnVmZig2KQorICAgICAgICAgICAgICBXUklURSAoKiwgRk1UPSIoJ0RldmljZSB3aGVyZSBsb2NhdGVkOicsICAgIFQzMCwgSTE5KSIpIGJ1ZmYoNykKKyAgICAgICAgICAgICAgV1JJVEUgKCosIEZNVD0iKCdGaWxlIHNpemU6JywgICAgICAgICAgICAgICBUMzAsIEkxOSkiKSBidWZmKDgpCisgICAgICAgICAgICAgIFdSSVRFICgqLCBGTVQ9IignTGFzdCBhY2Nlc3MgdGltZTonLCAgICAgICAgVDMwLCBBMTkpIikgQ1RJTUUoYnVmZig5KSkKKyAgICAgICAgICAgICAgV1JJVEUgKCosIEZNVD0iKCdMYXN0IG1vZGlmaWNhdGlvbiB0aW1lJywgICBUMzAsIEExOSkiKSBDVElNRShidWZmKDEwKSkKKyAgICAgICAgICAgICAgV1JJVEUgKCosIEZNVD0iKCdMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZTonLCBUMzAsIEExOSkiKSBDVElNRShidWZmKDExKSkKKyAgICAgICAgICAgICAgV1JJVEUgKCosIEZNVD0iKCdQcmVmZXJyZWQgYmxvY2sgc2l6ZTonLCAgICBUMzAsIEkxOSkiKSBidWZmKDEyKQorICAgICAgICAgICAgICBXUklURSAoKiwgRk1UPSIoJ05vLiBvZiBibG9ja3MgYWxsb2NhdGVkOicsIFQzMCwgSTE5KSIpIGJ1ZmYoMTMpCisgICAgICAgICAgICBFTkQgSUYKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPlRvIHN0YXQgYW4gb3BlbiBmaWxlOiA8YSBocmVmPSJGU1RBVC5odG1sI0ZTVEFUIj5GU1RBVDwvYT4sIHRvIHN0YXQgYSBsaW5rOiA8YSBocmVmPSJMU1RBVC5odG1sI0xTVEFUIj5MU1RBVDwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TVE9SQUdFXzAwNWZTSVpFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU1RPUkFHRV8wMDVmU0laRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2M1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU1RPUkFHRV8wMDVmU0laRS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNUT1JBR0VfU0laRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTVEFULmh0bWwjU1RBVCIgdGl0bGU9IlNUQVQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTVU0uaHRtbCNTVU0iIHRpdGxlPSJTVU0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1RPUkFHRV9TSVpFIj48L2E+Cis8YSBuYW1lPSJTVE9SQUdFXzAwNWZTSVpFIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNVTS5odG1sI1NVTSI+U1VNPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU1RBVC5odG1sI1NUQVQiPlNUQVQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjM1IDxjb2RlPlNUT1JBR0VfU0laRTwvY29kZT4gJm1kYXNoOyBTdG9yYWdlIHNpemUgaW4gYml0czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNUT1JBR0VfMDA1ZlNJWkUtMTA3NCI+PC9hPjxhIG5hbWU9ImluZGV4LXN0b3JhZ2Utc2l6ZS0xMDc1Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgc3RvcmFnZSBzaXplIG9mIGFyZ3VtZW50IDx2YXI+QTwvdmFyPiBpbiBiaXRzLiAKKzxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKzxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPklucXVpcnkgZnVuY3Rpb24KKzxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBTVE9SQUdFX1NJWkUoQSBbLCBLSU5EXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvciBhcnJheSBvZiBhbnkgdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPktJTkQ8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgaW50ZWdlciBjb25zdGFudCBleHByZXNzaW9uLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIFZhbHVlPC9lbT46PGRkPlRoZSByZXN1bHQgaXMgYSBzY2FsYXIgaW50ZWdlciB3aXRoIHRoZSBraW5kIHR5cGUgcGFyYW1ldGVyIHNwZWNpZmllZCBieSBLSU5ECisob3IgZGVmYXVsdCBpbnRlZ2VyIHR5cGUgaWYgS0lORCBpcyBtaXNzaW5nKS4gVGhlIHJlc3VsdCB2YWx1ZSBpcyB0aGUgc2l6ZQorZXhwcmVzc2VkIGluIGJpdHMgZm9yIGFuIGVsZW1lbnQgb2YgYW4gYXJyYXkgdGhhdCBoYXMgdGhlIGR5bmFtaWMgdHlwZSBhbmQgdHlwZQorcGFyYW1ldGVycyBvZiBBLgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkNfMDA1ZlNJWkVPRi5odG1sI0NfMDA1ZlNJWkVPRiI+Q19TSVpFT0Y8L2E+LCA8YSBocmVmPSJTSVpFT0YuaHRtbCNTSVpFT0YiPlNJWkVPRjwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TVFJVQ1RVUkUtYW5kLVJFQ09SRC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NUUlVDVFVSRS1hbmQtUkVDT1JELmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhYWIzYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TVFJVQ1RVUkUtYW5kLVJFQ09SRC5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TVFJVQ1RVUkUgYW5kIFJFQ09SRCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFTkNPREUtYW5kLURFQ09ERS1zdGF0ZW1lbnRzLmh0bWwjRU5DT0RFLWFuZC1ERUNPREUtc3RhdGVtZW50cyIgdGl0bGU9IkVOQ09ERSBhbmQgREVDT0RFIHN0YXRlbWVudHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1RSVUNUVVJFLWFuZC1SRUNPUkQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRU5DT0RFLWFuZC1ERUNPREUtc3RhdGVtZW50cy5odG1sI0VOQ09ERS1hbmQtREVDT0RFLXN0YXRlbWVudHMiPkVOQ09ERSBhbmQgREVDT0RFIHN0YXRlbWVudHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMi4xIDxjb2RlPlNUUlVDVFVSRTwvY29kZT4gYW5kIDxjb2RlPlJFQ09SRDwvY29kZT48L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlNUUlVDVFVSRV8wMDdkLTM0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiUkVDT1JEXzAwN2QtMzUwIj48L2E+CitSZWNvcmQgc3RydWN0dXJlcyBhcmUgYSBwcmUtRm9ydHJhbi05MCB2ZW5kb3IgZXh0ZW5zaW9uIHRvIGNyZWF0ZQordXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSBkYXRhIHR5cGVzLiAgR05VIEZvcnRyYW4gZG9lcyBub3Qgc3VwcG9ydAorcmVjb3JkIHN0cnVjdHVyZXMsIG9ubHkgRm9ydHJhbiA5MCdzICZsZHF1bztkZXJpdmVkIHR5cGVzJnJkcXVvOywgd2hpY2ggaGF2ZQorYSBkaWZmZXJlbnQgc3ludGF4LgorCisgICA8cD5JbiBtYW55IGNhc2VzLCByZWNvcmQgc3RydWN0dXJlcyBjYW4gZWFzaWx5IGJlIGNvbnZlcnRlZCB0byBkZXJpdmVkIHR5cGVzLiAKK1RvIGNvbnZlcnQsIHJlcGxhY2UgPGNvZGU+U1RSVUNUVVJFIC88L2NvZGU+PHZhcj5zdHJ1Y3R1cmUtbmFtZTwvdmFyPjxjb2RlPi88L2NvZGU+CitieSA8Y29kZT5UWVBFPC9jb2RlPiA8dmFyPnR5cGUtbmFtZTwvdmFyPi4gIEFkZGl0aW9uYWxseSwgcmVwbGFjZQorPGNvZGU+UkVDT1JEIC88L2NvZGU+PHZhcj5zdHJ1Y3R1cmUtbmFtZTwvdmFyPjxjb2RlPi88L2NvZGU+IGJ5Cis8Y29kZT5UWVBFKDwvY29kZT48dmFyPnR5cGUtbmFtZTwvdmFyPjxjb2RlPik8L2NvZGU+LiBGaW5hbGx5LCBpbiB0aGUgY29tcG9uZW50IGFjY2VzcywKK3JlcGxhY2UgdGhlIHBlcmlvZCAoPGNvZGU+LjwvY29kZT4pIGJ5IHRoZSBwZXJjZW50IHNpZ24gKDxjb2RlPiU8L2NvZGU+KS4KKworICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIG9mIGNvZGUgdXNpbmcgdGhlIG5vbiBwb3J0YWJsZSByZWNvcmQgc3RydWN0dXJlIHN5bnRheDoKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAhIERlY2xhcmluZyBhIHN0cnVjdHVyZSBuYW1lZCBgYGl0ZW0nJyBhbmQgY29udGFpbmluZyB0aHJlZSBmaWVsZHM6CisgICAgICEgYW4gaW50ZWdlciBJRCwgYW4gZGVzY3JpcHRpb24gc3RyaW5nIGFuZCBhIGZsb2F0aW5nLXBvaW50IHByaWNlLgorICAgICBTVFJVQ1RVUkUgL2l0ZW0vCisgICAgICAgSU5URUdFUiBpZAorICAgICAgIENIQVJBQ1RFUihMRU49MjAwKSBkZXNjcmlwdGlvbgorICAgICAgIFJFQUwgcHJpY2UKKyAgICAgRU5EIFNUUlVDVFVSRQorICAgICAKKyAgICAgISBEZWZpbmUgdHdvIHZhcmlhYmxlcywgYW4gc2luZ2xlIHJlY29yZCBvZiB0eXBlIGBgaXRlbScnCisgICAgICEgbmFtZWQgYGBwZWFyJycsIGFuZCBhbiBhcnJheSBvZiBpdGVtcyBuYW1lZCBgYHN0b3JlX2NhdGFsb2cnJworICAgICBSRUNPUkQgL2l0ZW0vIHBlYXIsIHN0b3JlX2NhdGFsb2coMTAwKQorICAgICAKKyAgICAgISBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBmaWVsZHMgb2YgYm90aCB2YXJpYWJsZXMKKyAgICAgcGVhci5pZCA9IDkyMzE2CisgICAgIHBlYXIuZGVzY3JpcHRpb24gPSAianVpY3kgRCdBbmpvdSBwZWFyIgorICAgICBwZWFyLnByaWNlID0gMC4xNQorICAgICBzdG9yZV9jYXRhbG9nKDcpLmlkID0gNzgzMQorICAgICBzdG9yZV9jYXRhbG9nKDcpLmRlc2NyaXB0aW9uID0gIm1pbGsgYm90dGxlIgorICAgICBzdG9yZV9jYXRhbG9nKDcpLnByaWNlID0gMS4yCisgICAgIAorICAgICAhIFdlIGNhbiBhbHNvIG1hbmlwdWxhdGUgdGhlIHdob2xlIHN0cnVjdHVyZQorICAgICBzdG9yZV9jYXRhbG9nKDEyKSA9IHBlYXIKKyAgICAgcHJpbnQgKiwgc3RvcmVfY2F0YWxvZygxMikKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGlzIGNvZGUgY2FuIGVhc2lseSBiZSByZXdyaXR0ZW4gaW4gdGhlIEZvcnRyYW4gOTAgc3ludGF4IGFzIGZvbGxvd2luZzoKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAhIGBgU1RSVUNUVVJFIC9uYW1lLyAuLi4gRU5EIFNUUlVDVFVSRScnIGJlY29tZXMKKyAgICAgISBgYFRZUEUgbmFtZSAuLi4gRU5EIFRZUEUnJworICAgICBUWVBFIGl0ZW0KKyAgICAgICBJTlRFR0VSIGlkCisgICAgICAgQ0hBUkFDVEVSKExFTj0yMDApIGRlc2NyaXB0aW9uCisgICAgICAgUkVBTCBwcmljZQorICAgICBFTkQgVFlQRQorICAgICAKKyAgICAgISBgYFJFQ09SRCAvbmFtZS8gdmFyaWFibGUnJyBiZWNvbWVzIGBgVFlQRShuYW1lKSB2YXJpYWJsZScnCisgICAgIFRZUEUoaXRlbSkgcGVhciwgc3RvcmVfY2F0YWxvZygxMDApCisgICAgIAorICAgICAhIEluc3RlYWQgb2YgdXNpbmcgYSBkb3QgKC4pIHRvIGFjY2VzcyBmaWVsZHMgb2YgYSByZWNvcmQsIHRoZQorICAgICAhIHN0YW5kYXJkIHN5bnRheCB1c2VzIGEgcGVyY2VudCBzaWduICglKQorICAgICBwZWFyJWlkID0gOTIzMTYKKyAgICAgcGVhciVkZXNjcmlwdGlvbiA9ICJqdWljeSBEJ0Fuam91IHBlYXIiCisgICAgIHBlYXIlcHJpY2UgPSAwLjE1CisgICAgIHN0b3JlX2NhdGFsb2coNyklaWQgPSA3ODMxCisgICAgIHN0b3JlX2NhdGFsb2coNyklZGVzY3JpcHRpb24gPSAibWlsayBib3R0bGUiCisgICAgIHN0b3JlX2NhdGFsb2coNyklcHJpY2UgPSAxLjIKKyAgICAgCisgICAgICEgQXNzaWdubWVudHMgb2YgYSB3aG9sZSB2YXJpYWJsZSBkbyBub3QgY2hhbmdlCisgICAgIHN0b3JlX2NhdGFsb2coMTIpID0gcGVhcgorICAgICBwcmludCAqLCBzdG9yZV9jYXRhbG9nKDEyKQorPC9wcmU+CisgICA8IS0tIEBub2RlIFVOSU9OIGFuZCBNQVAgLS0+Cis8IS0tIEBzdWJzZWN0aW9uIEBjb2Rle1VOSU9OfSBhbmQgQGNvZGV7TUFQfSAtLT4KKzwhLS0gQGNpbmRleCBAY29kZXtVTklPTn0gLS0+Cis8IS0tIEBjaW5kZXggQGNvZGV7TUFQfSAtLT4KKzwhLS0gRm9yIGhlbHAgd3JpdGluZyB0aGlzIG9uZSwgc2VlIC0tPgorPCEtLSBodHRwOi8vd3d3LmVuZy51bWQuZWR1L35uc3cvZW5jaDI1MC9mb3J0cmFuMS5odG0jVU5JT04gYW5kIC0tPgorPCEtLSBodHRwOi8vd3d3LnRhY2MudXRleGFzLmVkdS9zZXJ2aWNlcy91c2VyZ3VpZGVzL3BnaS9wZ2l3c191Zy9wZ2kzMnUwNi5odG0gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU1VNLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU1VNLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgwNjBmNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TVU0uaHRtbApAQCAtMCwwICsxLDk5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TVU0gLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU1RPUkFHRV8wMDVmU0laRS5odG1sI1NUT1JBR0VfMDA1ZlNJWkUiIHRpdGxlPSJTVE9SQUdFX1NJWkUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTWU1MTksuaHRtbCNTWU1MTksiIHRpdGxlPSJTWU1MTksiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU1VNIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNZTUxOSy5odG1sI1NZTUxOSyI+U1lNTE5LPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU1RPUkFHRV8wMDVmU0laRS5odG1sI1NUT1JBR0VfMDA1ZlNJWkUiPlNUT1JBR0VfU0laRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMzYgPGNvZGU+U1VNPC9jb2RlPiAmbWRhc2g7IFN1bSBvZiBhcnJheSBlbGVtZW50czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVNVTS0xMDc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1zdW0tMTA3NyI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtYWRkLWVsZW1lbnRzLTEwNzgiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLWNvbmRpdGlvbmFsbHktYWRkLWVsZW1lbnRzLTEwNzkiPjwvYT48YSBuYW1lPSJpbmRleC1zdW0tYXJyYXktZWxlbWVudHMtMTA4MCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPkFkZHMgdGhlIGVsZW1lbnRzIG9mIDx2YXI+QVJSQVk8L3Zhcj4gYWxvbmcgZGltZW5zaW9uIDx2YXI+RElNPC92YXI+IGlmCit0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGluIDx2YXI+TUFTSzwvdmFyPiBpcyA8Y29kZT5UUlVFPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBTVU0oQVJSQVlbLCBNQVNLXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBTVU0oQVJSQVksIERJTVssIE1BU0tdKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+QVJSQVk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIGFuIGFycmF5IG9mIHR5cGUgPGNvZGU+SU5URUdFUjwvY29kZT4sCis8Y29kZT5SRUFMPC9jb2RlPiBvciA8Y29kZT5DT01QTEVYPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkRJTTwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUKKzxjb2RlPklOVEVHRVI8L2NvZGU+IHdpdGggYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgZnJvbSAxIHRvIG4sIHdoZXJlIG4KK2VxdWFscyB0aGUgcmFuayBvZiA8dmFyPkFSUkFZPC92YXI+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5MT0dJQ0FMPC9jb2RlPgorYW5kIGVpdGhlciBiZSBhIHNjYWxhciBvciBhbiBhcnJheSBvZiB0aGUgc2FtZSBzaGFwZSBhcyA8dmFyPkFSUkFZPC92YXI+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXN1bHQgaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyA8dmFyPkFSUkFZPC92YXI+LgorCisgICAgIDxwPklmIDx2YXI+RElNPC92YXI+IGlzIGFic2VudCwgYSBzY2FsYXIgd2l0aCB0aGUgc3VtIG9mIGFsbCBlbGVtZW50cyBpbiA8dmFyPkFSUkFZPC92YXI+CitpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhbiBhcnJheSBvZiByYW5rIG4tMSwgd2hlcmUgbiBlcXVhbHMgdGhlIHJhbmsgb2YKKzx2YXI+QVJSQVk8L3Zhcj4sIGFuZCBhIHNoYXBlIHNpbWlsYXIgdG8gdGhhdCBvZiA8dmFyPkFSUkFZPC92YXI+IHdpdGggZGltZW5zaW9uIDx2YXI+RElNPC92YXI+Citkcm9wcGVkIGlzIHJldHVybmVkLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9zdW0KKyAgICAgICAgICAgIElOVEVHRVIgOjogeCg1KSA9ICgvIDEsIDIsIDMsIDQgLDUgLykKKyAgICAgICAgICAgIHByaW50ICosIFNVTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICEgYWxsIGVsZW1lbnRzLCBzdW0gPSAxNQorICAgICAgICAgICAgcHJpbnQgKiwgU1VNKHgsIE1BU0s9TU9EKHgsIDIpPT0xKSAgICAgISBvZGQgZWxlbWVudHMsIHN1bSA9IDkKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlBST0RVQ1QuaHRtbCNQUk9EVUNUIj5QUk9EVUNUPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NZTUxOSy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NZTUxOSy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzkxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU1lNTE5LLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U1lNTE5LIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNVTS5odG1sI1NVTSIgdGl0bGU9IlNVTSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNZU1RFTS5odG1sI1NZU1RFTSIgdGl0bGU9IlNZU1RFTSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTWU1MTksiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU1lTVEVNLmh0bWwjU1lTVEVNIj5TWVNURU08L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTVU0uaHRtbCNTVU0iPlNVTTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMzcgPGNvZGU+U1lNTE5LPC9jb2RlPiAmbWRhc2g7IENyZWF0ZSBhIHN5bWJvbGljIGxpbms8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TWU1MTkstMTA4MSI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtc3lzdGVtXzAwMmMtY3JlYXRlLWxpbmstMTA4MiI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtc3lzdGVtXzAwMmMtc29mdC1saW5rLTEwODMiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5NYWtlcyBhIHN5bWJvbGljIGxpbmsgZnJvbSBmaWxlIDx2YXI+UEFUSDE8L3Zhcj4gdG8gPHZhcj5QQVRIMjwvdmFyPi4gQSBudWxsCitjaGFyYWN0ZXIgKDxjb2RlPkNIQVIoMCk8L2NvZGU+KSBjYW4gYmUgdXNlZCB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIG5hbWVzIGluCis8dmFyPlBBVEgxPC92YXI+IGFuZCA8dmFyPlBBVEgyPC92YXI+OyBvdGhlcndpc2UsIHRyYWlsaW5nIGJsYW5rcyBpbiB0aGUgZmlsZQorbmFtZXMgYXJlIGlnbm9yZWQuICBJZiB0aGUgPHZhcj5TVEFUVVM8L3Zhcj4gYXJndW1lbnQgaXMgc3VwcGxpZWQsIGl0Citjb250YWlucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBub256ZXJvIGVycm9yIGNvZGUgdXBvbiByZXR1cm47IHNlZQorPGNvZGU+c3ltbGluaygyKTwvY29kZT4uICBJZiB0aGUgc3lzdGVtIGRvZXMgbm90IHN1cHBseSA8Y29kZT5zeW1saW5rKDIpPC9jb2RlPiwKKzxjb2RlPkVOT1NZUzwvY29kZT4gaXMgcmV0dXJuZWQuCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgaXMgcHJvdmlkZWQgaW4gYm90aCBzdWJyb3V0aW5lIGFuZCBmdW5jdGlvbiBmb3JtczsKK2hvd2V2ZXIsIG9ubHkgb25lIGZvcm0gY2FuIGJlIHVzZWQgaW4gYW55IGdpdmVuIHByb2dyYW0gdW5pdC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZSwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5DQUxMIFNZTUxOSyhQQVRIMSwgUEFUSDIgWywgU1RBVFVTXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5TVEFUVVMgPSBTWU1MTksoUEFUSDEsIFBBVEgyKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UEFUSDE8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIGRlZmF1bHQgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+UEFUSDI8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIGRlZmF1bHQgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIG9mIGRlZmF1bHQgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkxJTksuaHRtbCNMSU5LIj5MSU5LPC9hPiwgPGEgaHJlZj0iVU5MSU5LLmh0bWwjVU5MSU5LIj5VTkxJTks8L2E+CisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TWVNURU0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TWVNURU0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2E3NmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NZU1RFTS5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNZU1RFTSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTWU1MTksuaHRtbCNTWU1MTksiIHRpdGxlPSJTWU1MTksiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTWVNURU1fMDA1ZkNMT0NLLmh0bWwjU1lTVEVNXzAwNWZDTE9DSyIgdGl0bGU9IlNZU1RFTV9DTE9DSyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTWVNURU0iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU1lTVEVNXzAwNWZDTE9DSy5odG1sI1NZU1RFTV8wMDVmQ0xPQ0siPlNZU1RFTV9DTE9DSzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNZTUxOSy5odG1sI1NZTUxOSyI+U1lNTE5LPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIzOCA8Y29kZT5TWVNURU08L2NvZGU+ICZtZGFzaDsgRXhlY3V0ZSBhIHNoZWxsIGNvbW1hbmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TWVNURU0tMTA4NCI+PC9hPjxhIG5hbWU9ImluZGV4LXN5c3RlbV8wMDJjLXN5c3RlbS1jYWxsLTEwODUiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5QYXNzZXMgdGhlIGNvbW1hbmQgPHZhcj5DT01NQU5EPC92YXI+IHRvIGEgc2hlbGwgKHNlZSA8Y29kZT5zeXN0ZW0oMyk8L2NvZGU+KS4gSWYKK2FyZ3VtZW50IDx2YXI+U1RBVFVTPC92YXI+IGlzIHByZXNlbnQsIGl0IGNvbnRhaW5zIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorPGNvZGU+c3lzdGVtKDMpPC9jb2RlPiwgd2hpY2ggaXMgcHJlc3VtYWJseSAwIGlmIHRoZSBzaGVsbCBjb21tYW5kIHN1Y2NlZWRlZC4gCitOb3RlIHRoYXQgd2hpY2ggc2hlbGwgaXMgdXNlZCB0byBpbnZva2UgdGhlIGNvbW1hbmQgaXMgc3lzdGVtLWRlcGVuZGVudAorYW5kIGVudmlyb25tZW50LWRlcGVuZGVudC4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOworaG93ZXZlciwgb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxwPk5vdGUgdGhhdCB0aGUgPGNvZGU+c3lzdGVtPC9jb2RlPiBmdW5jdGlvbiBuZWVkIG5vdCBiZSB0aHJlYWQtc2FmZS4gSXQgaXMKK3RoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBlbnN1cmUgdGhhdCA8Y29kZT5zeXN0ZW08L2NvZGU+IGlzIG5vdAorY2FsbGVkIGNvbmN1cnJlbnRseS4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZSwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5DQUxMIFNZU1RFTShDT01NQU5EIFssIFNUQVRVU10pPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+U1RBVFVTID0gU1lTVEVNKENPTU1BTkQpPC9jb2RlPgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5DT01NQU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiBkZWZhdWx0IDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4gdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlNUQVRVUzwvdmFyPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgb2YgZGVmYXVsdCA8Y29kZT5JTlRFR0VSPC9jb2RlPiB0eXBlLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORS5odG1sI0VYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUiPkVYRUNVVEVfQ09NTUFORF9MSU5FPC9hPiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgRm9ydHJhbiAyMDA4IHN0YW5kYXJkCithbmQgc2hvdWxkIGNvbnNpZGVyZWQgaW4gbmV3IGNvZGUgZm9yIGZ1dHVyZSBwb3J0YWJpbGl0eS4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vU1lTVEVNXzAwNWZDTE9DSy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NZU1RFTV8wMDVmQ0xPQ0suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ4YWUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1NZU1RFTV8wMDVmQ0xPQ0suaHRtbApAQCAtMCwwICsxLDEwOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U1lTVEVNX0NMT0NLIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNZU1RFTS5odG1sI1NZU1RFTSIgdGl0bGU9IlNZU1RFTSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRBTi5odG1sI1RBTiIgdGl0bGU9IlRBTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTWVNURU1fQ0xPQ0siPjwvYT4KKzxhIG5hbWU9IlNZU1RFTV8wMDVmQ0xPQ0siPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVEFOLmh0bWwjVEFOIj5UQU48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTWVNURU0uaHRtbCNTWVNURU0iPlNZU1RFTTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yMzkgPGNvZGU+U1lTVEVNX0NMT0NLPC9jb2RlPiAmbWRhc2g7IFRpbWUgZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TWVNURU1fMDA1ZkNMT0NLLTEwODYiPjwvYT48YSBuYW1lPSJpbmRleC10aW1lXzAwMmMtY2xvY2stdGlja3MtMTA4NyI+PC9hPjxhIG5hbWU9ImluZGV4LWNsb2NrLXRpY2tzLTEwODgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5EZXRlcm1pbmVzIHRoZSA8dmFyPkNPVU5UPC92YXI+IG9mIGEgcHJvY2Vzc29yIGNsb2NrIHNpbmNlIGFuIHVuc3BlY2lmaWVkCit0aW1lIGluIHRoZSBwYXN0IG1vZHVsbyA8dmFyPkNPVU5UX01BWDwvdmFyPiwgPHZhcj5DT1VOVF9SQVRFPC92YXI+IGRldGVybWluZXMKK3RoZSBudW1iZXIgb2YgY2xvY2sgdGlja3MgcGVyIHNlY29uZC4gIElmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBhIGhpZ2gKK3Jlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLCB0aGF0IGNsb2NrIGlzIHVzZWQgYW5kIGNhbiBwcm92aWRlIHVwIHRvCituYW5vc2Vjb25kIHJlc29sdXRpb24uICBJZiBhIGhpZ2ggcmVzb2x1dGlvbiBtb25vdG9uaWMgY2xvY2sgaXMgbm90CithdmFpbGFibGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBmYWxscyBiYWNrIHRvIGEgcG90ZW50aWFsbHkgbG93ZXIKK3Jlc29sdXRpb24gcmVhbHRpbWUgY2xvY2suCisKKyAgICAgPHA+PHZhcj5DT1VOVF9SQVRFPC92YXI+IGlzIHN5c3RlbSBkZXBlbmRlbnQgYW5kIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0aGUKK2FyZ3VtZW50cy4gRm9yIDx2YXI+a2luZD00PC92YXI+IGFyZ3VtZW50cywgPHZhcj5DT1VOVDwvdmFyPiB1c3VhbGx5IHJlcHJlc2VudHMKK21pbGxpc2Vjb25kcywgd2hpbGUgZm9yIDx2YXI+a2luZD04PC92YXI+IGFyZ3VtZW50cywgPHZhcj5DT1VOVDwvdmFyPiB0eXBpY2FsbHkKK3JlcHJlc2VudHMgbWljcm8tIG9yIG5hbm9zZWNvbmRzLiA8dmFyPkNPVU5UX01BWDwvdmFyPiB1c3VhbGx5IGVxdWFscworPGNvZGU+SFVHRShDT1VOVF9NQVgpPC9jb2RlPi4KKworICAgICA8cD5JZiB0aGVyZSBpcyBubyBjbG9jaywgPHZhcj5DT1VOVDwvdmFyPiBpcyBzZXQgdG8gPGNvZGU+LUhVR0UoQ09VTlQpPC9jb2RlPiwgYW5kCis8dmFyPkNPVU5UX1JBVEU8L3Zhcj4gYW5kIDx2YXI+Q09VTlRfTUFYPC92YXI+IGFyZSBzZXQgdG8gemVyby4KKworICAgICA8cD5XaGVuIHJ1bm5pbmcgb24gYSBwbGF0Zm9ybSB1c2luZyB0aGUgR05VIEMgbGlicmFyeSAoZ2xpYmMpLCBvciBhCitkZXJpdmF0aXZlIHRoZXJlb2YsIHRoZSBoaWdoIHJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrIGlzIGF2YWlsYWJsZQorb25seSB3aGVuIGxpbmtpbmcgd2l0aCB0aGUgPHZhcj5ydDwvdmFyPiBsaWJyYXJ5LiAgVGhpcyBjYW4gYmUgZG9uZQorZXhwbGljaXRseSBieSBhZGRpbmcgdGhlIDxjb2RlPi1scnQ8L2NvZGU+IGZsYWcgd2hlbiBsaW5raW5nIHRoZQorYXBwbGljYXRpb24sIGJ1dCBpcyBhbHNvIGRvbmUgaW1wbGljaXRseSB3aGVuIHVzaW5nIE9wZW5NUC4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlN1YnJvdXRpbmUKKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+Q0FMTCBTWVNURU1fQ0xPQ0soW0NPVU5ULCBDT1VOVF9SQVRFLCBDT1VOVF9NQVhdKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkNPVU5UPC92YXI+ICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZQorPGNvZGU+SU5URUdFUjwvY29kZT4gd2l0aCA8Y29kZT5JTlRFTlQoT1VUKTwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5DT1VOVF9SQVRFPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIHNoYWxsIGJlIGEgc2NhbGFyIG9mIHR5cGUKKzxjb2RlPklOVEVHRVI8L2NvZGU+IHdpdGggPGNvZGU+SU5URU5UKE9VVCk8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+Q09VTlRfTUFYPC92YXI+ICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlCis8Y29kZT5JTlRFR0VSPC9jb2RlPiB3aXRoIDxjb2RlPklOVEVOVChPVVQpPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF9zeXN0ZW1fY2xvY2sKKyAgICAgICAgICAgIElOVEVHRVIgOjogY291bnQsIGNvdW50X3JhdGUsIGNvdW50X21heAorICAgICAgICAgICAgQ0FMTCBTWVNURU1fQ0xPQ0soY291bnQsIGNvdW50X3JhdGUsIGNvdW50X21heCkKKyAgICAgICAgICAgIFdSSVRFKCosKikgY291bnQsIGNvdW50X3JhdGUsIGNvdW50X21heAorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iREFURV8wMDVmQU5EXzAwNWZUSU1FLmh0bWwjREFURV8wMDVmQU5EXzAwNWZUSU1FIj5EQVRFX0FORF9USU1FPC9hPiwgPGEgaHJlZj0iQ1BVXzAwNWZUSU1FLmh0bWwjQ1BVXzAwNWZUSU1FIj5DUFVfVElNRTwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TdGFuZGFyZHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9TdGFuZGFyZHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmNhN2JhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1N0YW5kYXJkcy5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN0YW5kYXJkcyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iIHRpdGxlPSJJbnRyb2R1Y3Rpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQcm9qZWN0LVN0YXR1cy5odG1sI1Byb2plY3QtU3RhdHVzIiB0aXRsZT0iUHJvamVjdCBTdGF0dXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3RhbmRhcmRzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUHJvamVjdC1TdGF0dXMuaHRtbCNQcm9qZWN0LVN0YXR1cyI+UHJvamVjdCBTdGF0dXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNiBTdGFuZGFyZHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1TdGFuZGFyZHMtMTEiPjwvYT4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlZhcnlpbmctTGVuZ3RoLUNoYXJhY3Rlci1TdHJpbmdzLmh0bWwjVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MiPlZhcnlpbmcgTGVuZ3RoIENoYXJhY3RlciBTdHJpbmdzPC9hPgorPC91bD4KKworICAgPHA+VGhlIEdOVSBGb3J0cmFuIGNvbXBpbGVyIGltcGxlbWVudHMKK0lTTy9JRUMgMTUzOToxOTk3IChGb3J0cmFuIDk1KS4gIEFzIHN1Y2gsIGl0IGNhbiBhbHNvIGNvbXBpbGUgZXNzZW50aWFsbHkgYWxsCitzdGFuZGFyZC1jb21wbGlhbnQgRm9ydHJhbiA5MCBhbmQgRm9ydHJhbiA3NyBwcm9ncmFtcy4gICBJdCBhbHNvIHN1cHBvcnRzCit0aGUgSVNPL0lFQyBUUi0xNTU4MSBlbmhhbmNlbWVudHMgdG8gYWxsb2NhdGFibGUgYXJyYXlzLgorCisgICA8cD5HTlUgRm9ydHJhbiBhbHNvIGhhdmUgYSBwYXJ0aWFsIHN1cHBvcnQgZm9yIElTTy9JRUMgMTUzOS0xOjIwMDQgKEZvcnRyYW4KKzIwMDMpLCBJU08vSUVDIDE1MzktMToyMDEwIChGb3J0cmFuIDIwMDgpLCB0aGUgVGVjaG5pY2FsIFNwZWNpZmljYXRpb24KKzxjb2RlPkZ1cnRoZXIgSW50ZXJvcGVyYWJpbGl0eSBvZiBGb3J0cmFuIHdpdGggQzwvY29kZT4gKElTTy9JRUMgVFMgMjkxMTM6MjAxMikuIAorRnVsbCBzdXBwb3J0IG9mIHRob3NlIHN0YW5kYXJkcyBhbmQgZnV0dXJlIEZvcnRyYW4gc3RhbmRhcmRzIGlzIHBsYW5uZWQuIAorVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBzdXBwb3J0IGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUKKzxhIGhyZWY9IkZvcnRyYW4tMjAwMy1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgc3RhdHVzPC9hPiwgPGEgaHJlZj0iRm9ydHJhbi0yMDA4LXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwOC1zdGF0dXMiPkZvcnRyYW4gMjAwOCBzdGF0dXM8L2E+IGFuZAorPGEgaHJlZj0iVFMtMjkxMTMtc3RhdHVzLmh0bWwjVFMtMjkxMTMtc3RhdHVzIj5UUyAyOTExMyBzdGF0dXM8L2E+IHNlY3Rpb25zIG9mIHRoZSBkb2N1bWVudGF0aW9uLgorCisgICA8cD5BZGRpdGlvbmFsbHksIHRoZSBHTlUgRm9ydHJhbiBjb21waWxlcnMgc3VwcG9ydHMgdGhlIE9wZW5NUCBzcGVjaWZpY2F0aW9uCisodmVyc2lvbiAzLjEsIDxhIGhyZWY9Imh0dHA6Ly9vcGVubXAub3JnL3dwL29wZW5tcC1zcGVjaWZpY2F0aW9ucy8iPmh0dHA6Ly9vcGVubXAub3JnL3dwL29wZW5tcC1zcGVjaWZpY2F0aW9ucy88L2E+KS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RBTi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RBTi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjEyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVEFOLmh0bWwKQEAgLTAsMCArMSw4OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VEFOIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNZU1RFTV8wMDVmQ0xPQ0suaHRtbCNTWVNURU1fMDA1ZkNMT0NLIiB0aXRsZT0iU1lTVEVNX0NMT0NLIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVEFOSC5odG1sI1RBTkgiIHRpdGxlPSJUQU5IIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRBTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUQU5ILmh0bWwjVEFOSCI+VEFOSDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNZU1RFTV8wMDVmQ0xPQ0suaHRtbCNTWVNURU1fMDA1ZkNMT0NLIj5TWVNURU1fQ0xPQ0s8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjQwIDxjb2RlPlRBTjwvY29kZT4gJm1kYXNoOyBUYW5nZW50IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVEFOLTEwODkiPjwvYT48YSBuYW1lPSJpbmRleC1EVEFOLTEwOTAiPjwvYT48YSBuYW1lPSJpbmRleC10cmlnb25vbWV0cmljLWZ1bmN0aW9uXzAwMmMtdGFuZ2VudC0xMDkxIj48L2E+PGEgbmFtZT0iaW5kZXgtdGFuZ2VudC0xMDkyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+VEFOKFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgdGFuZ2VudCBvZiA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA3NyBhbmQgbGF0ZXIsIGZvciBhIGNvbXBsZXggYXJndW1lbnQgRm9ydHJhbiAyMDA4IG9yIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+RWxlbWVudGFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFRBTihYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlRoZSB0eXBlIHNoYWxsIGJlIDxjb2RlPlJFQUw8L2NvZGU+IG9yIDxjb2RlPkNPTVBMRVg8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaGFzIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X3RhbgorICAgICAgICAgICAgcmVhbCg4KSA6OiB4ID0gMC4xNjVfOAorICAgICAgICAgICAgeCA9IHRhbih4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfdGFuCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U3BlY2lmaWMgbmFtZXM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5OYW1lICAgICAgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPkFyZ3VtZW50ICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5SZXR1cm4gdHlwZSAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5UQU4oWCk8L2NvZGU+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5EVEFOKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJBVEFOLmh0bWwjQVRBTiI+QVRBTjwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UQU5ILmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVEFOSC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmU0OGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVEFOSC5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRBTkggLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVEFOLmh0bWwjVEFOIiB0aXRsZT0iVEFOIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVEhJU18wMDVmSU1BR0UuaHRtbCNUSElTXzAwNWZJTUFHRSIgdGl0bGU9IlRISVNfSU1BR0UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVEFOSCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUSElTXzAwNWZJTUFHRS5odG1sI1RISVNfMDA1ZklNQUdFIj5USElTX0lNQUdFPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVEFOLmh0bWwjVEFOIj5UQU48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjQxIDxjb2RlPlRBTkg8L2NvZGU+ICZtZGFzaDsgSHlwZXJib2xpYyB0YW5nZW50IGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVEFOSC0xMDkzIj48L2E+PGEgbmFtZT0iaW5kZXgtRFRBTkgtMTA5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWh5cGVyYm9saWMtdGFuZ2VudC0xMDk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtaHlwZXJib2xpYy1mdW5jdGlvbl8wMDJjLXRhbmdlbnQtMTA5NiI+PC9hPjxhIG5hbWU9ImluZGV4LXRhbmdlbnRfMDAyYy1oeXBlcmJvbGljLTEwOTciPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5UQU5IKFgpPC9jb2RlPiBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIDx2YXI+WDwvdmFyPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDc3IGFuZCBsYXRlciwgZm9yIGEgY29tcGxleCBhcmd1bWVudCBGb3J0cmFuIDIwMDggb3IgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+WCA9IFRBTkgoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSA8Y29kZT5SRUFMPC9jb2RlPiBvciA8Y29kZT5DT01QTEVYPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGhhcyBzYW1lIHR5cGUgYW5kIGtpbmQgYXMgPHZhcj5YPC92YXI+LiBJZiA8dmFyPlg8L3Zhcj4gaXMKK2NvbXBsZXgsIHRoZSBpbWFnaW5hcnkgcGFydCBvZiB0aGUgcmVzdWx0IGlzIGluIHJhZGlhbnMuIElmIDx2YXI+WDwvdmFyPgoraXMgPGNvZGU+UkVBTDwvY29kZT4sIHRoZSByZXR1cm4gdmFsdWUgbGllcyBpbiB0aGUgcmFuZ2UKKyAtIDEgXGxlcSB0YW5oKHgpIFxsZXEgMSAuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgcHJvZ3JhbSB0ZXN0X3RhbmgKKyAgICAgICAgICAgIHJlYWwoOCkgOjogeCA9IDIuMV84CisgICAgICAgICAgICB4ID0gdGFuaCh4KQorICAgICAgICAgIGVuZCBwcm9ncmFtIHRlc3RfdGFuaAorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNwZWNpZmljIG5hbWVzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+TmFtZSAgICAgICAgICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj5Bcmd1bWVudCAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+UmV0dXJuIHR5cGUgICAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlN0YW5kYXJkCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5UQU5IKFgpPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoNCkgWDwvY29kZT4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjAlIj48Y29kZT5SRUFMKDQpPC9jb2RlPiAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPkRUQU5IKFgpPC9jb2RlPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjIwJSI+PGNvZGU+UkVBTCg4KSBYPC9jb2RlPiAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMCUiPjxjb2RlPlJFQUwoOCk8L2NvZGU+ICAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQVRBTkguaHRtbCNBVEFOSCI+QVRBTkg8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVEhJU18wMDVmSU1BR0UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9USElTXzAwNWZJTUFHRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNjUyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVEhJU18wMDVmSU1BR0UuaHRtbApAQCAtMCwwICsxLDEwMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VEhJU19JTUFHRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUQU5ILmh0bWwjVEFOSCIgdGl0bGU9IlRBTkgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSU1FLmh0bWwjVElNRSIgdGl0bGU9IlRJTUUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVEhJU19JTUFHRSI+PC9hPgorPGEgbmFtZT0iVEhJU18wMDVmSU1BR0UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElNRS5odG1sI1RJTUUiPlRJTUU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUQU5ILmh0bWwjVEFOSCI+VEFOSDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yNDIgPGNvZGU+VEhJU19JTUFHRTwvY29kZT4gJm1kYXNoOyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNvc3Vic2NyaXB0IGluZGV4IG9mIHRoaXMgaW1hZ2U8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1USElTXzAwNWZJTUFHRS0xMDk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29hcnJheV8wMDJjLV8wMDQwY29kZV8wMDdiVEhJU18wMDVmSU1BR0VfMDA3ZC0xMDk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW1hZ2VzXzAwMmMtaW5kZXgtb2YtdGhpcy1pbWFnZS0xMTAwIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgY29zdWJzY3JpcHQgZm9yIHRoaXMgaW1hZ2UuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiAyMDA4IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBUSElTX0lNQUdFKCk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5SRVNVTFQgPSBUSElTX0lNQUdFKENPQVJSQVkgWywgRElNXSk8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkNPQVJSQVk8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPkNvYXJyYXkgb2YgYW55IHR5cGUgIChvcHRpb25hbDsgaWYgPHZhcj5ESU08L3Zhcj4KK3ByZXNlbnQsIHJlcXVpcmVkKS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkRJTTwvdmFyPiAgICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPmRlZmF1bHQgaW50ZWdlciBzY2FsYXIgKG9wdGlvbmFsKS4gSWYgcHJlc2VudCwKKzx2YXI+RElNPC92YXI+IHNoYWxsIGJlIGJldHdlZW4gb25lIGFuZCB0aGUgY29yYW5rIG9mIDx2YXI+Q09BUlJBWTwvdmFyPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5EZWZhdWx0IGludGVnZXIuIElmIDx2YXI+Q09BUlJBWTwvdmFyPiBpcyBub3QgcHJlc2VudCwgaXQgaXMgc2NhbGFyIGFuZCBpdHMgdmFsdWUKK2lzIHRoZSBpbmRleCBvZiB0aGUgaW52b2tpbmcgaW1hZ2UuIE90aGVyd2lzZSwgaWYgPHZhcj5ESU08L3Zhcj4gaXMgbm90IHByZXNlbnQsCithIHJhbmstMSBhcnJheSB3aXRoIGNvcmFuayBlbGVtZW50cyBpcyByZXR1cm5lZCwgY29udGFpbmluZyB0aGUgY29zdWJzY3JpcHRzCitmb3IgPHZhcj5DT0FSUkFZPC92YXI+IHNwZWNpZnlpbmcgdGhlIGludm9raW5nIGltYWdlLiBJZiA8dmFyPkRJTTwvdmFyPiBpcyBwcmVzZW50LAorYSBzY2FsYXIgaXMgcmV0dXJuZWQsIHdpdGggdGhlIHZhbHVlIG9mIHRoZSA8dmFyPkRJTTwvdmFyPiBlbGVtZW50IG9mCis8Y29kZT5USElTX0lNQUdFKENPQVJSQVkpPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBJTlRFR0VSIDo6IHZhbHVlWypdCisgICAgICAgICAgSU5URUdFUiA6OiBpCisgICAgICAgICAgdmFsdWUgPSBUSElTX0lNQUdFKCkKKyAgICAgICAgICBTWU5DIEFMTAorICAgICAgICAgIElGIChUSElTX0lNQUdFKCkgPT0gMSkgVEhFTgorICAgICAgICAgICAgRE8gaSA9IDEsIE5VTV9JTUFHRVMoKQorICAgICAgICAgICAgICBXUklURSgqLCcoMihhLGkwKSknKSAndmFsdWVbJywgaSwgJ10gaXMgJywgdmFsdWVbaV0KKyAgICAgICAgICAgIEVORCBETworICAgICAgICAgIEVORCBJRgorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9Ik5VTV8wMDVmSU1BR0VTLmh0bWwjTlVNXzAwNWZJTUFHRVMiPk5VTV9JTUFHRVM8L2E+LCA8YSBocmVmPSJJTUFHRV8wMDVmSU5ERVguaHRtbCNJTUFHRV8wMDVmSU5ERVgiPklNQUdFX0lOREVYPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RJTUUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9USU1FLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0MmZkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9USU1FLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElNRSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSElTXzAwNWZJTUFHRS5odG1sI1RISVNfMDA1ZklNQUdFIiB0aXRsZT0iVEhJU19JTUFHRSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRJTUU4Lmh0bWwjVElNRTgiIHRpdGxlPSJUSU1FOCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUSU1FIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlRJTUU4Lmh0bWwjVElNRTgiPlRJTUU4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVEhJU18wMDVmSU1BR0UuaHRtbCNUSElTXzAwNWZJTUFHRSI+VEhJU19JTUFHRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yNDMgPGNvZGU+VElNRTwvY29kZT4gJm1kYXNoOyBUaW1lIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVElNRS0xMTAxIj48L2E+PGEgbmFtZT0iaW5kZXgtdGltZV8wMDJjLWN1cnJlbnQtMTEwMiI+PC9hPjxhIG5hbWU9ImluZGV4LWN1cnJlbnQtdGltZS0xMTAzIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+UmV0dXJucyB0aGUgY3VycmVudCB0aW1lIGVuY29kZWQgYXMgYW4gaW50ZWdlciAoaW4gdGhlIG1hbm5lciBvZiB0aGUKK2Z1bmN0aW9uIDxjb2RlPnRpbWUoMyk8L2NvZGU+IGluIHRoZSBDIHN0YW5kYXJkIGxpYnJhcnkpLiBUaGlzIHZhbHVlIGlzCitzdWl0YWJsZSBmb3IgcGFzc2luZyB0byA8Y29kZT5DVElNRTwvY29kZT4sIDxjb2RlPkdNVElNRTwvY29kZT4sIGFuZCA8Y29kZT5MVElNRTwvY29kZT4uCisKKyAgICAgPHA+VGhpcyBpbnRyaW5zaWMgaXMgbm90IGZ1bGx5IHBvcnRhYmxlLCBzdWNoIGFzIHRvIHN5c3RlbXMgd2l0aCAzMi1iaXQKKzxjb2RlPklOVEVHRVI8L2NvZGU+IHR5cGVzIGJ1dCBzdXBwb3J0aW5nIHRpbWVzIHdpZGVyIHRoYW4gMzIgYml0cy4gVGhlcmVmb3JlLAordGhlIHZhbHVlcyByZXR1cm5lZCBieSB0aGlzIGludHJpbnNpYyBtaWdodCBiZSwgb3IgYmVjb21lLCBuZWdhdGl2ZSwgb3IKK251bWVyaWNhbGx5IGxlc3MgdGhhbiBwcmV2aW91cyB2YWx1ZXMsIGR1cmluZyBhIHNpbmdsZSBydW4gb2YgdGhlCitjb21waWxlZCBwcm9ncmFtLgorCisgICAgIDxwPlNlZSA8YSBocmVmPSJUSU1FOC5odG1sI1RJTUU4Ij5USU1FODwvYT4sIGZvciBpbmZvcm1hdGlvbiBvbiBhIHNpbWlsYXIgaW50cmluc2ljIHRoYXQgbWlnaHQgYmUKK3BvcnRhYmxlIHRvIG1vcmUgR05VIEZvcnRyYW4gaW1wbGVtZW50YXRpb25zLCB0aG91Z2ggdG8gZmV3ZXIgRm9ydHJhbgorY29tcGlsZXJzLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5GdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBUSU1FKCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSKDQpPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJDVElNRS5odG1sI0NUSU1FIj5DVElNRTwvYT4sIDxhIGhyZWY9IkdNVElNRS5odG1sI0dNVElNRSI+R01USU1FPC9hPiwgPGEgaHJlZj0iTFRJTUUuaHRtbCNMVElNRSI+TFRJTUU8L2E+LCA8YSBocmVmPSJNQ0xPQ0suaHRtbCNNQ0xPQ0siPk1DTE9DSzwvYT4sIDxhIGhyZWY9IlRJTUU4Lmh0bWwjVElNRTgiPlRJTUU4PC9hPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVElNRTguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9USU1FOC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMGViYTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVElNRTguaHRtbApAQCAtMCwwICsxLDg0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5USU1FOCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSU1FLmh0bWwjVElNRSIgdGl0bGU9IlRJTUUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSU5ZLmh0bWwjVElOWSIgdGl0bGU9IlRJTlkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElNRTgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVElOWS5odG1sI1RJTlkiPlRJTlk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSU1FLmh0bWwjVElNRSI+VElNRTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yNDQgPGNvZGU+VElNRTg8L2NvZGU+ICZtZGFzaDsgVGltZSBmdW5jdGlvbiAoNjQtYml0KTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTUU4LTExMDQiPjwvYT48YSBuYW1lPSJpbmRleC10aW1lXzAwMmMtY3VycmVudC0xMTA1Ij48L2E+PGEgbmFtZT0iaW5kZXgtY3VycmVudC10aW1lLTExMDYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZXR1cm5zIHRoZSBjdXJyZW50IHRpbWUgZW5jb2RlZCBhcyBhbiBpbnRlZ2VyIChpbiB0aGUgbWFubmVyIG9mIHRoZQorZnVuY3Rpb24gPGNvZGU+dGltZSgzKTwvY29kZT4gaW4gdGhlIEMgc3RhbmRhcmQgbGlicmFyeSkuIFRoaXMgdmFsdWUgaXMKK3N1aXRhYmxlIGZvciBwYXNzaW5nIHRvIDxjb2RlPkNUSU1FPC9jb2RlPiwgPGNvZGU+R01USU1FPC9jb2RlPiwgYW5kIDxjb2RlPkxUSU1FPC9jb2RlPi4KKworICAgICA8cD48ZW0+V2FybmluZzo8L2VtPiB0aGlzIGludHJpbnNpYyBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgcmFuZ2Ugb2YgdGhlIHRpbWluZwordmFsdWVzIG92ZXIgdGhhdCByZXR1cm5lZCBieSA8Y29kZT50aW1lKDMpPC9jb2RlPi4gT24gYSBzeXN0ZW0gd2l0aCBhIDMyLWJpdAorPGNvZGU+dGltZSgzKTwvY29kZT4sIDxjb2RlPlRJTUU4PC9jb2RlPiB3aWxsIHJldHVybiBhIDMyLWJpdCB2YWx1ZSwgZXZlbiB0aG91Z2gKK2l0IGlzIGNvbnZlcnRlZCB0byBhIDY0LWJpdCA8Y29kZT5JTlRFR0VSKDgpPC9jb2RlPiB2YWx1ZS4gVGhhdCBtZWFucworb3ZlcmZsb3dzIG9mIHRoZSAzMi1iaXQgdmFsdWUgY2FuIHN0aWxsIG9jY3VyLiBUaGVyZWZvcmUsIHRoZSB2YWx1ZXMKK3JldHVybmVkIGJ5IHRoaXMgaW50cmluc2ljIG1pZ2h0IGJlIG9yIGJlY29tZSBuZWdhdGl2ZSBvciBudW1lcmljYWxseQorbGVzcyB0aGFuIHByZXZpb3VzIHZhbHVlcyBkdXJpbmcgYSBzaW5nbGUgcnVuIG9mIHRoZSBjb21waWxlZCBwcm9ncmFtLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5GdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBUSU1FOCgpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmV0dXJuIHZhbHVlIGlzIGEgc2NhbGFyIG9mIHR5cGUgPGNvZGU+SU5URUdFUig4KTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+Q1RJTUU8L2E+LCA8YSBocmVmPSJHTVRJTUUuaHRtbCNHTVRJTUUiPkdNVElNRTwvYT4sIDxhIGhyZWY9IkxUSU1FLmh0bWwjTFRJTUUiPkxUSU1FPC9hPiwgPGEgaHJlZj0iTUNMT0NLOC5odG1sI01DTE9DSzgiPk1DTE9DSzg8L2E+LCA8YSBocmVmPSJUSU1FLmh0bWwjVElNRSI+VElNRTwvYT4KKworICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RJTlkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9USU5ZLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZhZTc1OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9USU5ZLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VElOWSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUSU1FOC5odG1sI1RJTUU4IiB0aXRsZT0iVElNRTgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUUkFJTFouaHRtbCNUUkFJTFoiIHRpdGxlPSJUUkFJTFoiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVElOWSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUUkFJTFouaHRtbCNUUkFJTFoiPlRSQUlMWjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTUU4Lmh0bWwjVElNRTgiPlRJTUU4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjI0NSA8Y29kZT5USU5ZPC9jb2RlPiAmbWRhc2g7IFNtYWxsZXN0IHBvc2l0aXZlIG51bWJlciBvZiBhIHJlYWwga2luZDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRJTlktMTEwNyI+PC9hPjxhIG5hbWU9ImluZGV4LWxpbWl0c18wMDJjLXNtYWxsZXN0LW51bWJlci0xMTA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW9kZWwtcmVwcmVzZW50YXRpb25fMDAyYy1zbWFsbGVzdC1udW1iZXItMTEwOSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlRJTlkoWCk8L2NvZGU+IHJldHVybnMgdGhlIHNtYWxsZXN0IHBvc2l0aXZlIChub24gemVybykgbnVtYmVyCitpbiB0aGUgbW9kZWwgb2YgdGhlIHR5cGUgb2YgPGNvZGU+WDwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFRJTlkoWCk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5YPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPlJFQUw8L2NvZGU+LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+UmV0dXJuIHZhbHVlPC9lbT46PGRkPlRoZSByZXR1cm4gdmFsdWUgaXMgb2YgdGhlIHNhbWUgdHlwZSBhbmQga2luZCBhcyA8dmFyPlg8L3Zhcj4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPlNlZSA8Y29kZT5IVUdFPC9jb2RlPiBmb3IgYW4gZXhhbXBsZS4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVE1QRElSLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVE1QRElSLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxYjMzOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UTVBESVIuaHRtbApAQCAtMCwwICsxLDcxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UTVBESVIgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiIHRpdGxlPSJSdW50aW1lIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklUIiB0aXRsZT0iR0ZPUlRSQU5fU1RESU5fVU5JVCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUTVBESVIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklUIj5HRk9SVFJBTl9TVERJTl9VTklUPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjEgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+VE1QRElSPC9zcGFuPjwvc2FtcD4mbWRhc2g7RGlyZWN0b3J5IGZvciBzY3JhdGNoIGZpbGVzPC9oMz4KKworPHA+V2hlbiBvcGVuaW5nIGEgZmlsZSB3aXRoIDxjb2RlPlNUQVRVUz0nU0NSQVRDSCc8L2NvZGU+LCBHTlUgRm9ydHJhbiB0cmllcyB0bworY3JlYXRlIHRoZSBmaWxlIGluIG9uZSBvZiB0aGUgcG90ZW50aWFsIGRpcmVjdG9yaWVzIGJ5IHRlc3RpbmcgZWFjaAorZGlyZWN0b3J5IGluIHRoZSBvcmRlciBiZWxvdy4KKworICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+VGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPlRNUERJUjwvc3Bhbj48L3NhbXA+LCBpZiBpdCBleGlzdHMuCisKKyAgICAgPGxpPk9uIHRoZSBNaW5HVyB0YXJnZXQsIHRoZSBkaXJlY3RvcnkgcmV0dXJuZWQgYnkgdGhlIDxjb2RlPkdldFRlbXBQYXRoPC9jb2RlPgorZnVuY3Rpb24uIEFsdGVybmF0aXZlbHksIG9uIHRoZSBDeWd3aW4gdGFyZ2V0LCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+VE1QPC9zcGFuPjwvc2FtcD4gYW5kCis8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5URU1QPC9zcGFuPjwvc2FtcD4gZW52aXJvbm1lbnQgdmFyaWFibGVzLCBpZiB0aGV5IGV4aXN0LCBpbiB0aGF0IG9yZGVyLgorCisgICAgIDxsaT5UaGUgPGNvZGU+UF90bXBkaXI8L2NvZGU+IG1hY3JvIGlmIGl0IGlzIGRlZmluZWQsIG90aGVyd2lzZSB0aGUgZGlyZWN0b3J5Cis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+L3RtcDwvc3Bhbj48L3NhbXA+LgorICAgICAgICA8L29sPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVFJBSUxaLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVFJBSUxaLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlZTkxNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UUkFJTFouaHRtbApAQCAtMCwwICsxLDgzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UUkFJTFogLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVElOWS5odG1sI1RJTlkiIHRpdGxlPSJUSU5ZIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVFJBTlNGRVIuaHRtbCNUUkFOU0ZFUiIgdGl0bGU9IlRSQU5TRkVSIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRSQUlMWiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUUkFOU0ZFUi5odG1sI1RSQU5TRkVSIj5UUkFOU0ZFUjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRJTlkuaHRtbCNUSU5ZIj5USU5ZPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjI0NiA8Y29kZT5UUkFJTFo8L2NvZGU+ICZtZGFzaDsgTnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBvZiBhbiBpbnRlZ2VyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVFJBSUxaLTExMTAiPjwvYT48YSBuYW1lPSJpbmRleC16ZXJvLWJpdHMtMTExMSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPlRSQUlMWjwvY29kZT4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBvZiBhbiBpbnRlZ2VyLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gVFJBSUxaKEkpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+STwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBkZWZhdWx0IDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKK0lmIGFsbCB0aGUgYml0cyBvZiA8Y29kZT5JPC9jb2RlPiBhcmUgemVybywgdGhlIHJlc3VsdCB2YWx1ZSBpcyA8Y29kZT5CSVRfU0laRShJKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X3RyYWlsegorICAgICAgICAgICAgV1JJVEUgKCosKikgVFJBSUxaKDgpICAhIHByaW50cyAzCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJCSVRfMDA1ZlNJWkUuaHRtbCNCSVRfMDA1ZlNJWkUiPkJJVF9TSVpFPC9hPiwgPGEgaHJlZj0iTEVBRFouaHRtbCNMRUFEWiI+TEVBRFo8L2E+LCA8YSBocmVmPSJQT1BQQVIuaHRtbCNQT1BQQVIiPlBPUFBBUjwvYT4sIDxhIGhyZWY9IlBPUENOVC5odG1sI1BPUENOVCI+UE9QQ05UPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RSQU5TRkVSLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVFJBTlNGRVIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2QwYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RSQU5TRkVSLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRSQU5TRkVSIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRSQUlMWi5odG1sI1RSQUlMWiIgdGl0bGU9IlRSQUlMWiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRSQU5TUE9TRS5odG1sI1RSQU5TUE9TRSIgdGl0bGU9IlRSQU5TUE9TRSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUUkFOU0ZFUiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUUkFOU1BPU0UuaHRtbCNUUkFOU1BPU0UiPlRSQU5TUE9TRTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRSQUlMWi5odG1sI1RSQUlMWiI+VFJBSUxaPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjI0NyA8Y29kZT5UUkFOU0ZFUjwvY29kZT4gJm1kYXNoOyBUcmFuc2ZlciBiaXQgcGF0dGVybnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1UUkFOU0ZFUi0xMTEyIj48L2E+PGEgbmFtZT0iaW5kZXgtYml0c18wMDJjLW1vdmUtMTExMyI+PC9hPjxhIG5hbWU9ImluZGV4LXR5cGUtY2FzdC0xMTE0Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+SW50ZXJwcmV0cyB0aGUgYml0d2lzZSByZXByZXNlbnRhdGlvbiBvZiA8dmFyPlNPVVJDRTwvdmFyPiBpbiBtZW1vcnkgYXMgaWYgaXQKK2lzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhIHZhcmlhYmxlIG9yIGFycmF5IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHR5cGUKK3BhcmFtZXRlcnMgYXMgPHZhcj5NT0xEPC92YXI+LgorCisgICAgIDxwPlRoaXMgaXMgYXBwcm94aW1hdGVseSBlcXVpdmFsZW50IHRvIHRoZSBDIGNvbmNlcHQgb2YgPGVtPmNhc3Rpbmc8L2VtPiBvbmUKK3R5cGUgdG8gYW5vdGhlci4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gVFJBTlNGRVIoU09VUkNFLCBNT0xEWywgU0laRV0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U09VUkNFPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvciBhbiBhcnJheSBvZiBhbnkgdHlwZS4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk1PTEQ8L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb3IgYW4gYXJyYXkgb2YgYW55IHR5cGUuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TSVpFPC92YXI+ICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgc2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZQorPGNvZGU+SU5URUdFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJlc3VsdCBoYXMgdGhlIHNhbWUgdHlwZSBhcyA8dmFyPk1PTEQ8L3Zhcj4sIHdpdGggdGhlIGJpdCBsZXZlbAorcmVwcmVzZW50YXRpb24gb2YgPHZhcj5TT1VSQ0U8L3Zhcj4uICBJZiA8dmFyPlNJWkU8L3Zhcj4gaXMgcHJlc2VudCwgdGhlIHJlc3VsdCBpcworYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgb2YgbGVuZ3RoIDx2YXI+U0laRTwvdmFyPi4gIElmIDx2YXI+U0laRTwvdmFyPiBpcyBhYnNlbnQKK2J1dCA8dmFyPk1PTEQ8L3Zhcj4gaXMgYW4gYXJyYXkgKG9mIGFueSBzaXplIG9yIHNoYXBlKSwgdGhlIHJlc3VsdCBpcyBhIG9uZS0KK2RpbWVuc2lvbmFsIGFycmF5IG9mIHRoZSBtaW5pbXVtIGxlbmd0aCBuZWVkZWQgdG8gY29udGFpbiB0aGUgZW50aXJldHkKK29mIHRoZSBiaXR3aXNlIHJlcHJlc2VudGF0aW9uIG9mIDx2YXI+U09VUkNFPC92YXI+LiAgIElmIDx2YXI+U0laRTwvdmFyPiBpcyBhYnNlbnQKK2FuZCA8dmFyPk1PTEQ8L3Zhcj4gaXMgYSBzY2FsYXIsIHRoZSByZXN1bHQgaXMgYSBzY2FsYXIuCisKKyAgICAgPHA+SWYgdGhlIGJpdHdpc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3VsdCBpcyBsb25nZXIgdGhhbiB0aGF0IG9mCis8dmFyPlNPVVJDRTwvdmFyPiwgdGhlbiB0aGUgbGVhZGluZyBiaXRzIG9mIHRoZSByZXN1bHQgY29ycmVzcG9uZCB0byB0aG9zZSBvZgorPHZhcj5TT1VSQ0U8L3Zhcj4gYW5kIGFueSB0cmFpbGluZyBiaXRzIGFyZSBmaWxsZWQgYXJiaXRyYXJpbHkuCisKKyAgICAgPHA+V2hlbiB0aGUgcmVzdWx0aW5nIGJpdCByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQKK3JlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgb2YgdGhlIHNhbWUgdHlwZSBhcyA8dmFyPk1PTEQ8L3Zhcj4sIHRoZSByZXN1bHRzCithcmUgdW5kZWZpbmVkLCBhbmQgc3Vic2VxdWVudCBvcGVyYXRpb25zIG9uIHRoZSByZXN1bHQgY2Fubm90IGJlCitndWFyYW50ZWVkIHRvIHByb2R1Y2Ugc2Vuc2libGUgYmVoYXZpb3IuICBGb3IgZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8KK2NyZWF0ZSA8Y29kZT5MT0dJQ0FMPC9jb2RlPiB2YXJpYWJsZXMgZm9yIHdoaWNoIDx2YXI+VkFSPC92YXI+IGFuZAorPGNvZGU+Lk5PVC48L2NvZGU+PHZhcj5WQVI8L3Zhcj4gYm90aCBhcHBlYXIgdG8gYmUgdHJ1ZS4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfdHJhbnNmZXIKKyAgICAgICAgICAgIGludGVnZXIgOjogeCA9IDIxNDMyODkzNDQKKyAgICAgICAgICAgIHByaW50ICosIHRyYW5zZmVyKHgsIDEuMCkgICAgISBwcmludHMgIk5hTiIgb24gaTY4NgorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RSQU5TUE9TRS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RSQU5TUE9TRS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MDVkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVFJBTlNQT1NFLmh0bWwKQEAgLTAsMCArMSw3NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VFJBTlNQT1NFIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRSQU5TRkVSLmh0bWwjVFJBTlNGRVIiIHRpdGxlPSJUUkFOU0ZFUiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRSSU0uaHRtbCNUUklNIiB0aXRsZT0iVFJJTSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUUkFOU1BPU0UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVFJJTS5odG1sI1RSSU0iPlRSSU08L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUUkFOU0ZFUi5odG1sI1RSQU5TRkVSIj5UUkFOU0ZFUjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yNDggPGNvZGU+VFJBTlNQT1NFPC9jb2RlPiAmbWRhc2g7IFRyYW5zcG9zZSBhbiBhcnJheSBvZiByYW5rIHR3bzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVRSQU5TUE9TRS0xMTE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy10cmFuc3Bvc2UtMTExNiI+PC9hPjxhIG5hbWU9ImluZGV4LW1hdHJpeF8wMDJjLXRyYW5zcG9zZS0xMTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtdHJhbnNwb3NlLTExMTgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5UcmFuc3Bvc2UgYW4gYXJyYXkgb2YgcmFuayB0d28uIEVsZW1lbnQgKGksIGopIG9mIHRoZSByZXN1bHQgaGFzIHRoZSB2YWx1ZQorPGNvZGU+TUFUUklYKGosIGkpPC9jb2RlPiwgZm9yIGFsbCBpLCBqLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+VHJhbnNmb3JtYXRpb25hbCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBUUkFOU1BPU0UoTUFUUklYKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk1BVFJJWDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgYW55IHR5cGUgYW5kIGhhdmUgYSByYW5rIG9mIHR3by4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlJldHVybiB2YWx1ZTwvZW0+OjxkZD5UaGUgcmVzdWx0IGhhcyB0aGUgc2FtZSB0eXBlIGFzIDx2YXI+TUFUUklYPC92YXI+LCBhbmQgaGFzIHNoYXBlCis8Y29kZT4oLyBtLCBuIC8pPC9jb2RlPiBpZiA8dmFyPk1BVFJJWDwvdmFyPiBoYXMgc2hhcGUgPGNvZGU+KC8gbiwgbSAvKTwvY29kZT4uIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RSSU0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UUklNLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4NmY5YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UUklNLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VFJJTSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUUkFOU1BPU0UuaHRtbCNUUkFOU1BPU0UiIHRpdGxlPSJUUkFOU1BPU0UiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUVFlOQU0uaHRtbCNUVFlOQU0iIHRpdGxlPSJUVFlOQU0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVFJJTSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUVFlOQU0uaHRtbCNUVFlOQU0iPlRUWU5BTTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlRSQU5TUE9TRS5odG1sI1RSQU5TUE9TRSI+VFJBTlNQT1NFPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjI0OSA8Y29kZT5UUklNPC9jb2RlPiAmbWRhc2g7IFJlbW92ZSB0cmFpbGluZyBibGFuayBjaGFyYWN0ZXJzIG9mIGEgc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVFJJTS0xMTE5Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nXzAwMmMtcmVtb3ZlLXRyYWlsaW5nLXdoaXRlc3BhY2UtMTEyMCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJlbW92ZXMgdHJhaWxpbmcgYmxhbmsgY2hhcmFjdGVycyBvZiBhIHN0cmluZy4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5Gb3J0cmFuIDk1IGFuZCBsYXRlcgorCisgICAgIDxicj48ZHQ+PGVtPkNsYXNzPC9lbT46PGRkPlRyYW5zZm9ybWF0aW9uYWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gVFJJTShTVFJJTkcpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RSSU5HPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+QSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5DSEFSQUNURVI8L2NvZGU+IHdoaWNoIGxlbmd0aCBpcyB0aGF0IG9mIDx2YXI+U1RSSU5HPC92YXI+CitsZXNzIHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgYmxhbmtzLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF90cmltCisgICAgICAgICAgICBDSEFSQUNURVIobGVuPTEwKSwgUEFSQU1FVEVSIDo6IHMgPSAiR0ZPUlRSQU4gICIKKyAgICAgICAgICAgIFdSSVRFKCosKikgTEVOKHMpLCBMRU4oVFJJTShzKSkgICEgIjEwIDgiLCB3aXRoL3dpdGhvdXQgdHJhaWxpbmcgYmxhbmtzCisgICAgICAgICAgRU5EIFBST0dSQU0KKzwvcHJlPgorICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJBREpVU1RMLmh0bWwjQURKVVNUTCI+QURKVVNUTDwvYT4sIDxhIGhyZWY9IkFESlVTVFIuaHRtbCNBREpVU1RSIj5BREpVU1RSPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RTLTI5MTEzLXN0YXR1cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RTLTI5MTEzLXN0YXR1cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDc5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVFMtMjkxMTMtc3RhdHVzLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VFMgMjkxMTMgc3RhdHVzIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzIiB0aXRsZT0iRm9ydHJhbiAyMDAzIGFuZCAyMDA4IHN0YXR1cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZvcnRyYW4tMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDgtc3RhdHVzIiB0aXRsZT0iRm9ydHJhbiAyMDA4IHN0YXR1cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUUy0yOTExMy1zdGF0dXMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJGb3J0cmFuLTIwMDgtc3RhdHVzLmh0bWwjRm9ydHJhbi0yMDA4LXN0YXR1cyI+Rm9ydHJhbiAyMDA4IHN0YXR1czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgYW5kIDIwMDggc3RhdHVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4zIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uIDI5MTEzIFN0YXR1czwvaDM+CisKKzxwPkdOVSBGb3J0cmFuIHN1cHBvcnRzIHNvbWUgb2YgdGhlIG5ldyBmZWF0dXJlcyBvZiB0aGUgVGVjaG5pY2FsCitTcGVjaWZpY2F0aW9uIChUUykgMjkxMTMgb24gRnVydGhlciBJbnRlcm9wZXJhYmlsaXR5IG9mIEZvcnRyYW4gd2l0aCBDLiAKK1RoZSA8YSBocmVmPSJodHRwOi8vZ2NjLmdudS5vcmcvd2lraS9UUzI5MTEzU3RhdHVzIj53aWtpPC9hPiBoYXMgc29tZSBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGN1cnJlbnQgVFMgMjkxMTMgaW1wbGVtZW50YXRpb24gc3RhdHVzLiAgSW4gcGFydGljdWxhciwgdGhlCitmb2xsb3dpbmcgaXMgaW1wbGVtZW50ZWQuCisKKyAgIDxwPlNlZSBhbHNvIDxhIGhyZWY9IkZ1cnRoZXItSW50ZXJvcGVyYWJpbGl0eS1vZi1Gb3J0cmFuLXdpdGgtQy5odG1sI0Z1cnRoZXItSW50ZXJvcGVyYWJpbGl0eS1vZi1Gb3J0cmFuLXdpdGgtQyI+RnVydGhlciBJbnRlcm9wZXJhYmlsaXR5IG9mIEZvcnRyYW4gd2l0aCBDPC9hPi4KKworICAgICA8dWw+Cis8bGk+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zdGQ9ZjIwMDh0czwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8bGk+VGhlIDxjb2RlPk9QVElPTkFMPC9jb2RlPiBhdHRyaWJ1dGUgaXMgYWxsb3dlZCBmb3IgZHVtbXkgYXJndW1lbnRzCitvZiA8Y29kZT5CSU5EKEMpIHByb2NlZHVyZXMuPC9jb2RlPgorCisgICAgIDxsaT5UaGUgPGNvZGU+UkFOSzwvY29kZT4gaW50cmluc2ljIGlzIHN1cHBvcnRlZC4KKworICAgICA8bGk+R05VIEZvcnRyYW4ncyBpbXBsZW1lbnRhdGlvbiBmb3IgdmFyaWFibGVzIHdpdGggPGNvZGU+QVNZTkNIUk9OT1VTPC9jb2RlPgorYXR0cmlidXRlIGlzIGNvbXBhdGlibGUgd2l0aCBUUyAyOTExMy4KKworICAgICA8bGk+QXNzdW1lZCB0eXBlcyAoPGNvZGU+VFlQRSgqKTwvY29kZT4uCisKKyAgICAgPGxpPkFzc3VtZWQtcmFuayAoPGNvZGU+RElNRU5TSU9OKC4uKTwvY29kZT4pLiBIb3dldmVyLCB0aGUgYXJyYXkgZGVzY3JpcHRvcgorb2YgdGhlIFRTIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiAKKzwvdWw+CisKKzwhLS0gIC0tPgorPCEtLSBDb21waWxlciBDaGFyYWN0ZXJpc3RpY3MgLS0+Cis8IS0tICAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UVFlOQU0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UVFlOQU0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjFmOTBhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RUWU5BTS5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRUWU5BTSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUUklNLmh0bWwjVFJJTSIgdGl0bGU9IlRSSU0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJVQk9VTkQuaHRtbCNVQk9VTkQiIHRpdGxlPSJVQk9VTkQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVFRZTkFNIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlVCT1VORC5odG1sI1VCT1VORCI+VUJPVU5EPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVFJJTS5odG1sI1RSSU0iPlRSSU08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjUwIDxjb2RlPlRUWU5BTTwvY29kZT4gJm1kYXNoOyBHZXQgdGhlIG5hbWUgb2YgYSB0ZXJtaW5hbCBkZXZpY2UuPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVFRZTkFNLTExMjEiPjwvYT48YSBuYW1lPSJpbmRleC1zeXN0ZW1fMDAyYy10ZXJtaW5hbC0xMTIyIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+R2V0IHRoZSBuYW1lIG9mIGEgdGVybWluYWwgZGV2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwKK3NlZSA8Y29kZT50dHluYW1lKDMpPC9jb2RlPi4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOworaG93ZXZlciwgb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgVFRZTkFNKFVOSVQsIE5BTUUpPC9jb2RlPgorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjgwJSI+PGNvZGU+TkFNRSA9IFRUWU5BTShVTklUKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+VU5JVDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5OQU1FPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBQUk9HUkFNIHRlc3RfdHR5bmFtCisgICAgICAgICAgICBJTlRFR0VSIDo6IHVuaXQKKyAgICAgICAgICAgIERPIHVuaXQgPSAxLCAxMAorICAgICAgICAgICAgICBJRiAoaXNhdHR5KHVuaXQ9dW5pdCkpIHdyaXRlKCosKikgdHR5bmFtKHVuaXQpCisgICAgICAgICAgICBFTkQgRE8KKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IklTQVRUWS5odG1sI0lTQVRUWSI+SVNBVFRZPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1RocmVhZF8wMDJkc2FmZXR5LW9mLXRoZS1ydW50aW1lLWxpYnJhcnkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UaHJlYWRfMDAyZHNhZmV0eS1vZi10aGUtcnVudGltZS1saWJyYXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2ZjUwNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9UaHJlYWRfMDAyZHNhZmV0eS1vZi10aGUtcnVudGltZS1saWJyYXJ5Lmh0bWwKQEAgLTAsMCArMSw4NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VGhyZWFkLXNhZmV0eSBvZiB0aGUgcnVudGltZSBsaWJyYXJ5IC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBpbGVyLUNoYXJhY3RlcmlzdGljcy5odG1sI0NvbXBpbGVyLUNoYXJhY3RlcmlzdGljcyIgdGl0bGU9IkNvbXBpbGVyIENoYXJhY3RlcmlzdGljcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkludGVybmFsLXJlcHJlc2VudGF0aW9uLW9mLUxPR0lDQUwtdmFyaWFibGVzLmh0bWwjSW50ZXJuYWwtcmVwcmVzZW50YXRpb24tb2YtTE9HSUNBTC12YXJpYWJsZXMiIHRpdGxlPSJJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBMT0dJQ0FMIHZhcmlhYmxlcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRhdGEtY29uc2lzdGVuY3ktYW5kLWR1cmFiaWxpdHkuaHRtbCNEYXRhLWNvbnNpc3RlbmN5LWFuZC1kdXJhYmlsaXR5IiB0aXRsZT0iRGF0YSBjb25zaXN0ZW5jeSBhbmQgZHVyYWJpbGl0eSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJUaHJlYWQtc2FmZXR5LW9mLXRoZS1ydW50aW1lLWxpYnJhcnkiPjwvYT4KKzxhIG5hbWU9IlRocmVhZF8wMDJkc2FmZXR5LW9mLXRoZS1ydW50aW1lLWxpYnJhcnkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGF0YS1jb25zaXN0ZW5jeS1hbmQtZHVyYWJpbGl0eS5odG1sI0RhdGEtY29uc2lzdGVuY3ktYW5kLWR1cmFiaWxpdHkiPkRhdGEgY29uc2lzdGVuY3kgYW5kIGR1cmFiaWxpdHk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcy5odG1sI0ludGVybmFsLXJlcHJlc2VudGF0aW9uLW9mLUxPR0lDQUwtdmFyaWFibGVzIj5JbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBMT0dJQ0FMIHZhcmlhYmxlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBpbGVyLUNoYXJhY3RlcmlzdGljcy5odG1sI0NvbXBpbGVyLUNoYXJhY3RlcmlzdGljcyI+Q29tcGlsZXIgQ2hhcmFjdGVyaXN0aWNzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4zIFRocmVhZC1zYWZldHkgb2YgdGhlIHJ1bnRpbWUgbGlicmFyeTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXRocmVhZF8wMDJkc2FmZXR5XzAwMmMtdGhyZWFkcy0zMjciPjwvYT4KK0dOVSBGb3J0cmFuIGNhbiBiZSB1c2VkIGluIHByb2dyYW1zIHdpdGggbXVsdGlwbGUgdGhyZWFkcywgZS5nLiBieQordXNpbmcgT3Blbk1QLCBieSBjYWxsaW5nIE9TIHRocmVhZCBoYW5kbGluZyBmdW5jdGlvbnMgdmlhIHRoZQorPGNvZGU+SVNPX0NfQklORElORzwvY29kZT4gZmFjaWxpdHksIG9yIGJ5IEdOVSBGb3J0cmFuIGNvbXBpbGVkIGxpYnJhcnkgY29kZQorYmVpbmcgY2FsbGVkIGZyb20gYSBtdWx0aS10aHJlYWRlZCBwcm9ncmFtLgorCisgICA8cD5UaGUgR05VIEZvcnRyYW4gcnVudGltZSBsaWJyYXJ5LCAoPGNvZGU+bGliZ2ZvcnRyYW48L2NvZGU+KSwgc3VwcG9ydHMgYmVpbmcKK2NhbGxlZCBjb25jdXJyZW50bHkgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIHdpdGggdGhlIGZvbGxvd2luZworZXhjZXB0aW9ucy4KKworICAgPHA+RHVyaW5nIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24sIHRoZSBDIDxjb2RlPmdldGVudjwvY29kZT4gZnVuY3Rpb24gaXMgdXNlZCwKK3doaWNoIG5lZWQgbm90IGJlIHRocmVhZC1zYWZlLiAgU2ltaWxhcmx5LCB0aGUgPGNvZGU+Z2V0ZW52PC9jb2RlPgorZnVuY3Rpb24gaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIDxjb2RlPkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRTwvY29kZT4gYW5kCis8Y29kZT5HRVRFTlY8L2NvZGU+IGludHJpbnNpY3MuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVzZXIgdG8KK2Vuc3VyZSB0aGF0IHRoZSBlbnZpcm9ubWVudCBpcyBub3QgYmVpbmcgdXBkYXRlZCBjb25jdXJyZW50bHkgd2hlbiBhbnkKK29mIHRoZXNlIGFjdGlvbnMgYXJlIHRha2luZyBwbGFjZS4KKworICAgPHA+VGhlIDxjb2RlPkVYRUNVVEVfQ09NTUFORF9MSU5FPC9jb2RlPiBhbmQgPGNvZGU+U1lTVEVNPC9jb2RlPiBpbnRyaW5zaWNzIGFyZQoraW1wbGVtZW50ZWQgd2l0aCB0aGUgPGNvZGU+c3lzdGVtPC9jb2RlPiBmdW5jdGlvbiwgd2hpY2ggbmVlZCBub3QgYmUKK3RocmVhZC1zYWZlLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGF0Cis8Y29kZT5zeXN0ZW08L2NvZGU+IGlzIG5vdCBjYWxsZWQgY29uY3VycmVudGx5LgorCisgICA8cD5GaW5hbGx5LCBmb3IgcGxhdGZvcm1zIG5vdCBzdXBwb3J0aW5nIHRocmVhZC1zYWZlIFBPU0lYIGZ1bmN0aW9ucywKK2Z1cnRoZXIgZnVuY3Rpb25hbGl0eSBtaWdodCBub3QgYmUgdGhyZWFkLXNhZmUuICBGb3IgZGV0YWlscywgcGxlYXNlCitjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9VQk9VTkQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9VQk9VTkQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVjNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1VCT1VORC5odG1sCkBAIC0wLDAgKzEsODggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlVCT1VORCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJUVFlOQU0uaHRtbCNUVFlOQU0iIHRpdGxlPSJUVFlOQU0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJVQ09CT1VORC5odG1sI1VDT0JPVU5EIiB0aXRsZT0iVUNPQk9VTkQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVUJPVU5EIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlVDT0JPVU5ELmh0bWwjVUNPQk9VTkQiPlVDT0JPVU5EPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVFRZTkFNLmh0bWwjVFRZTkFNIj5UVFlOQU08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjUxIDxjb2RlPlVCT1VORDwvY29kZT4gJm1kYXNoOyBVcHBlciBkaW1lbnNpb24gYm91bmRzIG9mIGFuIGFycmF5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVUJPVU5ELTExMjMiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLXVwcGVyLWJvdW5kLTExMjQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5SZXR1cm5zIHRoZSB1cHBlciBib3VuZHMgb2YgYW4gYXJyYXksIG9yIGEgc2luZ2xlIHVwcGVyIGJvdW5kCithbG9uZyB0aGUgPHZhcj5ESU08L3Zhcj4gZGltZW5zaW9uLiAKKzxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gOTUgYW5kIGxhdGVyLCB3aXRoIDx2YXI+S0lORDwvdmFyPiBhcmd1bWVudCBGb3J0cmFuIDIwMDMgYW5kIGxhdGVyCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+SW5xdWlyeSBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBVQk9VTkQoQVJSQVkgWywgRElNIFssIEtJTkRdXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXksIG9mIGFueSB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RElNPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIGEgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPjwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiBraW5kIDx2YXI+S0lORDwvdmFyPi4gSWYKKzx2YXI+S0lORDwvdmFyPiBpcyBhYnNlbnQsIHRoZSByZXR1cm4gdmFsdWUgaXMgb2YgZGVmYXVsdCBpbnRlZ2VyIGtpbmQuIAorSWYgPHZhcj5ESU08L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IG9mIHRoZSB1cHBlciBib3VuZHMgb2YKKzx2YXI+QVJSQVk8L3Zhcj4uICBJZiA8dmFyPkRJTTwvdmFyPiBpcyBwcmVzZW50LCB0aGUgcmVzdWx0IGlzIGEgc2NhbGFyCitjb3JyZXNwb25kaW5nIHRvIHRoZSB1cHBlciBib3VuZCBvZiB0aGUgYXJyYXkgYWxvbmcgdGhhdCBkaW1lbnNpb24uICBJZgorPHZhcj5BUlJBWTwvdmFyPiBpcyBhbiBleHByZXNzaW9uIHJhdGhlciB0aGFuIGEgd2hvbGUgYXJyYXkgb3IgYXJyYXkKK3N0cnVjdHVyZSBjb21wb25lbnQsIG9yIGlmIGl0IGhhcyBhIHplcm8gZXh0ZW50IGFsb25nIHRoZSByZWxldmFudAorZGltZW5zaW9uLCB0aGUgdXBwZXIgYm91bmQgaXMgdGFrZW4gdG8gYmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyBhbG9uZwordGhlIHJlbGV2YW50IGRpbWVuc2lvbi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJMQk9VTkQuaHRtbCNMQk9VTkQiPkxCT1VORDwvYT4sIDxhIGhyZWY9IkxDT0JPVU5ELmh0bWwjTENPQk9VTkQiPkxDT0JPVU5EPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1VDT0JPVU5ELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVUNPQk9VTkQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmFiOTBiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1VDT0JPVU5ELmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VUNPQk9VTkQgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVUJPVU5ELmh0bWwjVUJPVU5EIiB0aXRsZT0iVUJPVU5EIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVU1BU0suaHRtbCNVTUFTSyIgdGl0bGU9IlVNQVNLIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlVDT0JPVU5EIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlVNQVNLLmh0bWwjVU1BU0siPlVNQVNLPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVUJPVU5ELmh0bWwjVUJPVU5EIj5VQk9VTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjUyIDxjb2RlPlVDT0JPVU5EPC9jb2RlPiAmbWRhc2g7IFVwcGVyIGNvZGltZW5zaW9uIGJvdW5kcyBvZiBhbiBhcnJheTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVVDT0JPVU5ELTExMjUiPjwvYT48YSBuYW1lPSJpbmRleC1jb2FycmF5XzAwMmMtdXBwZXItYm91bmQtMTEyNiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPlJldHVybnMgdGhlIHVwcGVyIGNvYm91bmRzIG9mIGEgY29hcnJheSwgb3IgYSBzaW5nbGUgdXBwZXIgY29ib3VuZAorYWxvbmcgdGhlIDx2YXI+RElNPC92YXI+IGNvZGltZW5zaW9uLiAKKzxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkZvcnRyYW4gMjAwOCBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5JbnF1aXJ5IGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFVDT0JPVU5EKENPQVJSQVkgWywgRElNIFssIEtJTkRdXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5BUlJBWTwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gY29hcnJheSwgb2YgYW55IHR5cGUuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5ESU08L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPihPcHRpb25hbCkgU2hhbGwgYmUgYSBzY2FsYXIgPGNvZGU+SU5URUdFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5LSU5EPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiBraW5kIDx2YXI+S0lORDwvdmFyPi4gSWYKKzx2YXI+S0lORDwvdmFyPiBpcyBhYnNlbnQsIHRoZSByZXR1cm4gdmFsdWUgaXMgb2YgZGVmYXVsdCBpbnRlZ2VyIGtpbmQuIAorSWYgPHZhcj5ESU08L3Zhcj4gaXMgYWJzZW50LCB0aGUgcmVzdWx0IGlzIGFuIGFycmF5IG9mIHRoZSBsb3dlciBjb2JvdW5kcyBvZgorPHZhcj5DT0FSUkFZPC92YXI+LiAgSWYgPHZhcj5ESU08L3Zhcj4gaXMgcHJlc2VudCwgdGhlIHJlc3VsdCBpcyBhIHNjYWxhcgorY29ycmVzcG9uZGluZyB0byB0aGUgbG93ZXIgY29ib3VuZCBvZiB0aGUgYXJyYXkgYWxvbmcgdGhhdCBjb2RpbWVuc2lvbi4KKworICAgICA8YnI+PGR0PjxlbT5TZWUgYWxzbzwvZW0+OjxkZD48YSBocmVmPSJMQ09CT1VORC5odG1sI0xDT0JPVU5EIj5MQ09CT1VORDwvYT4sIDxhIGhyZWY9IkxCT1VORC5odG1sI0xCT1VORCI+TEJPVU5EPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1VNQVNLLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVU1BU0suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzVjYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1VNQVNLLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VU1BU0sgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVUNPQk9VTkQuaHRtbCNVQ09CT1VORCIgdGl0bGU9IlVDT0JPVU5EIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVU5MSU5LLmh0bWwjVU5MSU5LIiB0aXRsZT0iVU5MSU5LIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlVNQVNLIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlVOTElOSy5odG1sI1VOTElOSyI+VU5MSU5LPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVUNPQk9VTkQuaHRtbCNVQ09CT1VORCI+VUNPQk9VTkQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjUzIDxjb2RlPlVNQVNLPC9jb2RlPiAmbWRhc2g7IFNldCB0aGUgZmlsZSBjcmVhdGlvbiBtYXNrPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVU1BU0stMTEyNyI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtc3lzdGVtXzAwMmMtZmlsZS1jcmVhdGlvbi1tYXNrLTExMjgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5TZXRzIHRoZSBmaWxlIGNyZWF0aW9uIG1hc2sgdG8gPHZhcj5NQVNLPC92YXI+LiBJZiBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgaXQKK3JldHVybnMgdGhlIG9sZCB2YWx1ZS4gSWYgY2FsbGVkIGFzIGEgc3Vicm91dGluZSBhbmQgYXJndW1lbnQgPHZhcj5PTEQ8L3Zhcj4KK2lmIGl0IGlzIHN1cHBsaWVkLCBpdCBpcyBzZXQgdG8gdGhlIG9sZCB2YWx1ZS4gU2VlIDxjb2RlPnVtYXNrKDIpPC9jb2RlPi4KKworICAgICA8YnI+PGR0PjxlbT5TdGFuZGFyZDwvZW0+OjxkZD5HTlUgZXh0ZW5zaW9uCisKKyAgICAgPGJyPjxkdD48ZW0+Q2xhc3M8L2VtPjo8ZGQ+U3Vicm91dGluZSwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5DQUxMIFVNQVNLKE1BU0sgWywgT0xEXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5PTEQgPSBVTUFTSyhNQVNLKTwvY29kZT4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYSBzY2FsYXIgb2YgdHlwZSA8Y29kZT5JTlRFR0VSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPk9MRDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBTaGFsbCBiZSBhIHNjYWxhciBvZiB0eXBlCis8Y29kZT5JTlRFR0VSPC9jb2RlPi4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVU5MSU5LLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVU5MSU5LLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhNzQ0YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9VTkxJTksuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5VTkxJTksgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVU1BU0suaHRtbCNVTUFTSyIgdGl0bGU9IlVNQVNLIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVU5QQUNLLmh0bWwjVU5QQUNLIiB0aXRsZT0iVU5QQUNLIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlVOTElOSyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJVTlBBQ0suaHRtbCNVTlBBQ0siPlVOUEFDSzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlVNQVNLLmh0bWwjVU1BU0siPlVNQVNLPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjI1NCA8Y29kZT5VTkxJTks8L2NvZGU+ICZtZGFzaDsgUmVtb3ZlIGEgZmlsZSBmcm9tIHRoZSBmaWxlIHN5c3RlbTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVVOTElOSy0xMTI5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmlsZS1zeXN0ZW1fMDAyYy1yZW1vdmUtZmlsZS0xMTMwIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+VW5saW5rcyB0aGUgZmlsZSA8dmFyPlBBVEg8L3Zhcj4uIEEgbnVsbCBjaGFyYWN0ZXIgKDxjb2RlPkNIQVIoMCk8L2NvZGU+KSBjYW4gYmUKK3VzZWQgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBuYW1lIGluIDx2YXI+UEFUSDwvdmFyPjsgb3RoZXJ3aXNlLCB0cmFpbGluZworYmxhbmtzIGluIHRoZSBmaWxlIG5hbWUgYXJlIGlnbm9yZWQuICBJZiB0aGUgPHZhcj5TVEFUVVM8L3Zhcj4gYXJndW1lbnQgaXMKK3N1cHBsaWVkLCBpdCBjb250YWlucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBub256ZXJvIGVycm9yIGNvZGUgdXBvbiByZXR1cm47CitzZWUgPGNvZGU+dW5saW5rKDIpPC9jb2RlPi4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyBpcyBwcm92aWRlZCBpbiBib3RoIHN1YnJvdXRpbmUgYW5kIGZ1bmN0aW9uIGZvcm1zOworaG93ZXZlciwgb25seSBvbmUgZm9ybSBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gcHJvZ3JhbSB1bml0LgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5TdWJyb3V0aW5lLCBmdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI4MCUiPjxjb2RlPkNBTEwgVU5MSU5LKFBBVEggWywgU1RBVFVTXSk8L2NvZGU+Cis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iODAlIj48Y29kZT5TVEFUVVMgPSBVTkxJTksoUEFUSCk8L2NvZGU+CisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlBBVEg8L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIGRlZmF1bHQgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPiB0eXBlLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RBVFVTPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIFNoYWxsIGJlIG9mIGRlZmF1bHQgPGNvZGU+SU5URUdFUjwvY29kZT4gdHlwZS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IkxJTksuaHRtbCNMSU5LIj5MSU5LPC9hPiwgPGEgaHJlZj0iU1lNTE5LLmh0bWwjU1lNTE5LIj5TWU1MTks8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVU5QQUNLLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVU5QQUNLLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1M2MzMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9VTlBBQ0suaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5VTlBBQ0sgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyIgdGl0bGU9IkludHJpbnNpYyBQcm9jZWR1cmVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVU5MSU5LLmh0bWwjVU5MSU5LIiB0aXRsZT0iVU5MSU5LIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iVkVSSUZZLmh0bWwjVkVSSUZZIiB0aXRsZT0iVkVSSUZZIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlVOUEFDSyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJWRVJJRlkuaHRtbCNWRVJJRlkiPlZFUklGWTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlVOTElOSy5odG1sI1VOTElOSyI+VU5MSU5LPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjI1NSA8Y29kZT5VTlBBQ0s8L2NvZGU+ICZtZGFzaDsgVW5wYWNrIGFuIGFycmF5IG9mIHJhbmsgb25lIGludG8gYW4gYXJyYXk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1VTlBBQ0stMTEzMSI+PC9hPjxhIG5hbWU9ImluZGV4LWFycmF5XzAwMmMtdW5wYWNraW5nLTExMzIiPjwvYT48YSBuYW1lPSJpbmRleC1hcnJheV8wMDJjLWluY3JlYXNlLWRpbWVuc2lvbi0xMTMzIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJyYXlfMDAyYy1zY2F0dGVyLWVsZW1lbnRzLTExMzQiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD5TdG9yZSB0aGUgZWxlbWVudHMgb2YgPHZhcj5WRUNUT1I8L3Zhcj4gaW4gYW4gYXJyYXkgb2YgaGlnaGVyIHJhbmsuCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5UcmFuc2Zvcm1hdGlvbmFsIGZ1bmN0aW9uCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPlJFU1VMVCA9IFVOUEFDSyhWRUNUT1IsIE1BU0ssIEZJRUxEKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPlZFQ1RPUjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U2hhbGwgYmUgYW4gYXJyYXkgb2YgYW55IHR5cGUgYW5kIHJhbmsgb25lLiBJdAorc2hhbGwgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IGVsZW1lbnRzIGFzIDx2YXI+TUFTSzwvdmFyPiBoYXMgPGNvZGU+VFJVRTwvY29kZT4gdmFsdWVzLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+TUFTSzwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBhbiBhcnJheSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+RklFTEQ8L3Zhcj4gIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0aGUgc2FtZSB0eXBlIGFzIDx2YXI+VkVDVE9SPC92YXI+IGFuZCBoYXZlCit0aGUgc2FtZSBzaGFwZSBhcyA8dmFyPk1BU0s8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJlc3VsdGluZyBhcnJheSBjb3JyZXNwb25kcyB0byA8dmFyPkZJRUxEPC92YXI+IHdpdGggPGNvZGU+VFJVRTwvY29kZT4gZWxlbWVudHMKK29mIDx2YXI+TUFTSzwvdmFyPiByZXBsYWNlZCBieSB2YWx1ZXMgZnJvbSA8dmFyPlZFQ1RPUjwvdmFyPiBpbiBhcnJheSBlbGVtZW50IG9yZGVyLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF91bnBhY2sKKyAgICAgICAgICAgIGludGVnZXIgOjogdmVjdG9yKDIpICA9ICgvMSwxLykKKyAgICAgICAgICAgIGxvZ2ljYWwgOjogbWFzayg0KSAgPSAoLyAuVFJVRS4sIC5GQUxTRS4sIC5GQUxTRS4sIC5UUlVFLiAvKQorICAgICAgICAgICAgaW50ZWdlciA6OiBmaWVsZCgyLDIpID0gMCwgdW5pdHkoMiwyKQorICAgICAgICAgIAorICAgICAgICAgICAgISByZXN1bHQ6IHVuaXR5IG1hdHJpeAorICAgICAgICAgICAgdW5pdHkgPSB1bnBhY2sodmVjdG9yLCByZXNoYXBlKG1hc2ssICgvMiwyLykpLCBmaWVsZCkKKyAgICAgICAgICBFTkQgUFJPR1JBTQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGVtPlNlZSBhbHNvPC9lbT46PGRkPjxhIGhyZWY9IlBBQ0suaHRtbCNQQUNLIj5QQUNLPC9hPiwgPGEgaHJlZj0iU1BSRUFELmh0bWwjU1BSRUFEIj5TUFJFQUQ8L2E+Cis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVW5hcnktb3BlcmF0b3JzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVW5hcnktb3BlcmF0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlNTVmMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9VbmFyeS1vcGVyYXRvcnMuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5VbmFyeSBvcGVyYXRvcnMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iIHRpdGxlPSJFeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUmVhbC1hcnJheS1pbmRpY2VzLmh0bWwjUmVhbC1hcnJheS1pbmRpY2VzIiB0aXRsZT0iUmVhbCBhcnJheSBpbmRpY2VzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW1wbGljaXRseS1jb252ZXJ0LUxPR0lDQUwtYW5kLUlOVEVHRVItdmFsdWVzLmh0bWwjSW1wbGljaXRseS1jb252ZXJ0LUxPR0lDQUwtYW5kLUlOVEVHRVItdmFsdWVzIiB0aXRsZT0iSW1wbGljaXRseSBjb252ZXJ0IExPR0lDQUwgYW5kIElOVEVHRVIgdmFsdWVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlVuYXJ5LW9wZXJhdG9ycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMuaHRtbCNJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMiPkltcGxpY2l0bHkgY29udmVydCBMT0dJQ0FMIGFuZCBJTlRFR0VSIHZhbHVlczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlJlYWwtYXJyYXktaW5kaWNlcy5odG1sI1JlYWwtYXJyYXktaW5kaWNlcyI+UmVhbCBhcnJheSBpbmRpY2VzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPkV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj42LjEuMTEgVW5hcnkgb3BlcmF0b3JzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3BlcmF0b3JzXzAwMmMtdW5hcnktMzM3Ij48L2E+CitBcyBhbiBleHRlbnNpb24sIEdOVSBGb3J0cmFuIGFsbG93cyB1bmFyeSBwbHVzIGFuZCB1bmFyeSBtaW51cyBvcGVyYXRvcnMKK3RvIGFwcGVhciBhcyB0aGUgc2Vjb25kIG9wZXJhbmQgb2YgYmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0b3JzIHdpdGhvdXQKK3RoZSBuZWVkIGZvciBwYXJlbnRoZXNpcy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICBYID0gWSAqIC1aCis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9WRVJJRlkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9WRVJJRlkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDBlNjhjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1ZFUklGWS5odG1sCkBAIC0wLDAgKzEsOTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZFUklGWSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIiB0aXRsZT0iSW50cmluc2ljIFByb2NlZHVyZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJVTlBBQ0suaHRtbCNVTlBBQ0siIHRpdGxlPSJVTlBBQ0siPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJYT1IuaHRtbCNYT1IiIHRpdGxlPSJYT1IiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVkVSSUZZIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlhPUi5odG1sI1hPUiI+WE9SPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVU5QQUNLLmh0bWwjVU5QQUNLIj5VTlBBQ0s8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnRyaW5zaWMtUHJvY2VkdXJlcy5odG1sI0ludHJpbnNpYy1Qcm9jZWR1cmVzIj5JbnRyaW5zaWMgUHJvY2VkdXJlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguMjU2IDxjb2RlPlZFUklGWTwvY29kZT4gJm1kYXNoOyBTY2FuIGEgc3RyaW5nIGZvciBjaGFyYWN0ZXJzIG5vdCBhIGdpdmVuIHNldDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LVZFUklGWS0xMTM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nXzAwMmMtZmluZC1taXNzaW5nLXNldC0xMTM2Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+VmVyaWZpZXMgdGhhdCBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gPHZhcj5TVFJJTkc8L3Zhcj4gYmVsb25nIHRvIHRoZSBzZXQgb2YKK2NoYXJhY3RlcnMgaW4gPHZhcj5TRVQ8L3Zhcj4uCisKKyAgICAgPHA+SWYgPHZhcj5CQUNLPC92YXI+IGlzIGVpdGhlciBhYnNlbnQgb3IgZXF1YWxzIDxjb2RlPkZBTFNFPC9jb2RlPiwgdGhpcyBmdW5jdGlvbgorcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGxlZnRtb3N0IGNoYXJhY3RlciBvZiA8dmFyPlNUUklORzwvdmFyPiB0aGF0IGlzCitub3QgaW4gPHZhcj5TRVQ8L3Zhcj4uIElmIDx2YXI+QkFDSzwvdmFyPiBlcXVhbHMgPGNvZGU+VFJVRTwvY29kZT4sIHRoZSByaWdodG1vc3QKK3Bvc2l0aW9uIGlzIHJldHVybmVkLiBJZiBhbGwgY2hhcmFjdGVycyBvZiA8dmFyPlNUUklORzwvdmFyPiBhcmUgZm91bmQgaW4KKzx2YXI+U0VUPC92YXI+LCB0aGUgcmVzdWx0IGlzIHplcm8uCisKKyAgICAgPGJyPjxkdD48ZW0+U3RhbmRhcmQ8L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBhbmQgbGF0ZXIsIHdpdGggPHZhcj5LSU5EPC92YXI+IGFyZ3VtZW50IEZvcnRyYW4gMjAwMyBhbmQgbGF0ZXIKKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5FbGVtZW50YWwgZnVuY3Rpb24KKworICAgICA8YnI+PGR0PjxlbT5TeW50YXg8L2VtPjo8ZGQ+PGNvZGU+UkVTVUxUID0gVkVSSUZZKFNUUklORywgU0VUWywgQkFDSyBbLCBLSU5EXV0pPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+U1RSSU5HPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5TaGFsbCBiZSBvZiB0eXBlIDxjb2RlPkNIQVJBQ1RFUjwvY29kZT4uIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5TRVQ8L3Zhcj4gICAgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlNoYWxsIGJlIG9mIHR5cGUgPGNvZGU+Q0hBUkFDVEVSPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPkJBQ0s8L3Zhcj4gICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+KE9wdGlvbmFsKSBzaGFsbCBiZSBvZiB0eXBlIDxjb2RlPkxPR0lDQUw8L2NvZGU+LiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+S0lORDwvdmFyPiAgIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj4oT3B0aW9uYWwpIEFuIDxjb2RlPklOVEVHRVI8L2NvZGU+IGluaXRpYWxpemF0aW9uCitleHByZXNzaW9uIGluZGljYXRpbmcgdGhlIGtpbmQgcGFyYW1ldGVyIG9mIHRoZSByZXN1bHQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB2YWx1ZSBpcyBvZiB0eXBlIDxjb2RlPklOVEVHRVI8L2NvZGU+IGFuZCBvZiBraW5kIDx2YXI+S0lORDwvdmFyPi4gSWYKKzx2YXI+S0lORDwvdmFyPiBpcyBhYnNlbnQsIHRoZSByZXR1cm4gdmFsdWUgaXMgb2YgZGVmYXVsdCBpbnRlZ2VyIGtpbmQuCisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgUFJPR1JBTSB0ZXN0X3ZlcmlmeQorICAgICAgICAgICAgV1JJVEUoKiwqKSBWRVJJRlkoIkZPUlRSQU4iLCAiQU8iKSAgICAgICAgICAgISAxLCBmb3VuZCAnRicKKyAgICAgICAgICAgIFdSSVRFKCosKikgVkVSSUZZKCJGT1JUUkFOIiwgIkZPTyIpICAgICAgICAgICEgMywgZm91bmQgJ1InCisgICAgICAgICAgICBXUklURSgqLCopIFZFUklGWSgiRk9SVFJBTiIsICJDKysiKSAgICAgICAgICAhIDEsIGZvdW5kICdGJworICAgICAgICAgICAgV1JJVEUoKiwqKSBWRVJJRlkoIkZPUlRSQU4iLCAiQysrIiwgLlRSVUUuKSAgISA3LCBmb3VuZCAnTicKKyAgICAgICAgICAgIFdSSVRFKCosKikgVkVSSUZZKCJGT1JUUkFOIiwgIkZPUlRSQU4iKSAgICAgICEgMCcgZm91bmQgbm9uZQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+PGEgaHJlZj0iU0NBTi5odG1sI1NDQU4iPlNDQU48L2E+LCA8YSBocmVmPSJJTkRFWC1pbnRyaW5zaWMuaHRtbCNJTkRFWC1pbnRyaW5zaWMiPklOREVYIGludHJpbnNpYzwvYT4KKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9WYXJpYWJsZS1GT1JNQVQtZXhwcmVzc2lvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9WYXJpYWJsZS1GT1JNQVQtZXhwcmVzc2lvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTkyZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1ZhcmlhYmxlLUZPUk1BVC1leHByZXNzaW9ucy5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZhcmlhYmxlIEZPUk1BVCBleHByZXNzaW9ucyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBub3QgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW4iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFTkNPREUtYW5kLURFQ09ERS1zdGF0ZW1lbnRzLmh0bWwjRU5DT0RFLWFuZC1ERUNPREUtc3RhdGVtZW50cyIgdGl0bGU9IkVOQ09ERSBhbmQgREVDT0RFIHN0YXRlbWVudHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBbHRlcm5hdGUtY29tcGxleC1mdW5jdGlvbi1zeW50YXguaHRtbCNBbHRlcm5hdGUtY29tcGxleC1mdW5jdGlvbi1zeW50YXgiIHRpdGxlPSJBbHRlcm5hdGUgY29tcGxleCBmdW5jdGlvbiBzeW50YXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVmFyaWFibGUtRk9STUFULWV4cHJlc3Npb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFsdGVybmF0ZS1jb21wbGV4LWZ1bmN0aW9uLXN5bnRheC5odG1sI0FsdGVybmF0ZS1jb21wbGV4LWZ1bmN0aW9uLXN5bnRheCI+QWx0ZXJuYXRlIGNvbXBsZXggZnVuY3Rpb24gc3ludGF4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRU5DT0RFLWFuZC1ERUNPREUtc3RhdGVtZW50cy5odG1sI0VOQ09ERS1hbmQtREVDT0RFLXN0YXRlbWVudHMiPkVOQ09ERSBhbmQgREVDT0RFIHN0YXRlbWVudHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLW5vdC1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbi5odG1sI0V4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMi4zIFZhcmlhYmxlIDxjb2RlPkZPUk1BVDwvY29kZT4gZXhwcmVzc2lvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkZPUk1BVF8wMDdkLTM1MyI+PC9hPgorQSB2YXJpYWJsZSA8Y29kZT5GT1JNQVQ8L2NvZGU+IGV4cHJlc3Npb24gaXMgZm9ybWF0IHN0YXRlbWVudCB3aGljaCBpbmNsdWRlcworYW5nbGUgYnJhY2tldHMgZW5jbG9zaW5nIGEgRm9ydHJhbiBleHByZXNzaW9uOiA8Y29kZT5GT1JNQVQoSSZsdDtOJmd0Oyk8L2NvZGU+LiAgR05VCitGb3J0cmFuIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBsZWdhY3kgZXh0ZW5zaW9uLiAgVGhlIGVmZmVjdCBvZiB2YXJpYWJsZQorZm9ybWF0IGV4cHJlc3Npb25zIGNhbiBiZSByZXByb2R1Y2VkIGJ5IHVzaW5nIHRoZSBtb3JlIHBvd2VyZnVsIChhbmQKK3N0YW5kYXJkKSBjb21iaW5hdGlvbiBvZiBpbnRlcm5hbCBvdXRwdXQgYW5kIHN0cmluZyBmb3JtYXRzLiAgRm9yIGV4YW1wbGUsCityZXBsYWNlIGEgY29kZSBmcmFnbWVudCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICBXUklURSg2LDIwKSBJTlQxCisgICAgICAyMCAgIEZPUk1BVChJJmx0O04rMSZndDspCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+d2l0aCB0aGUgZm9sbG93aW5nOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYyAgICAgVmFyaWFibGUgZGVjbGFyYXRpb24KKyAgICAgICAgICAgQ0hBUkFDVEVSKExFTj0yMCkgRk1UCisgICAgIGMKKyAgICAgYyAgICAgT3RoZXIgY29kZSBoZXJlLi4uCisgICAgIGMKKyAgICAgICAgICAgV1JJVEUoRk1ULCcoIihJIiwgSTAsICIpIiknKSBOKzEKKyAgICAgICAgICAgV1JJVEUoNixGTVQpIElOVDEKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5vciB3aXRoOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYyAgICAgVmFyaWFibGUgZGVjbGFyYXRpb24KKyAgICAgICAgICAgQ0hBUkFDVEVSKExFTj0yMCkgRk1UCisgICAgIGMKKyAgICAgYyAgICAgT3RoZXIgY29kZSBoZXJlLi4uCisgICAgIGMKKyAgICAgICAgICAgV1JJVEUoRk1ULCopIE4rMQorICAgICAgICAgICBXUklURSg2LCIoSSIgLy8gQURKVVNUTChGTVQpIC8vICIpIikgSU5UMQorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9WYXJ5aW5nLUxlbmd0aC1DaGFyYWN0ZXItU3RyaW5ncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDcyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MuaHRtbApAQCAtMCwwICsxLDc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5WYXJ5aW5nIExlbmd0aCBDaGFyYWN0ZXIgU3RyaW5ncyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiIHRpdGxlPSJTdGFuZGFyZHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MiPjwvYT4KKzxwPgorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGFuZGFyZHMuaHRtbCNTdGFuZGFyZHMiPlN0YW5kYXJkczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjEuNi4xIFZhcnlpbmcgTGVuZ3RoIENoYXJhY3RlciBTdHJpbmdzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtVmFyeWluZy1sZW5ndGgtY2hhcmFjdGVyLXN0cmluZ3MtMTIiPjwvYT48YSBuYW1lPSJpbmRleC1WYXJ5aW5nLWxlbmd0aC1zdHJpbmdzLTEzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaW5nc18wMDJjLXZhcnlpbmctbGVuZ3RoLTE0Ij48L2E+CitUaGUgRm9ydHJhbiA5NSBzdGFuZGFyZCBzcGVjaWZpZXMgaW4gUGFydCAyIChJU08vSUVDIDE1MzktMjoyMDAwKQordmFyeWluZyBsZW5ndGggY2hhcmFjdGVyIHN0cmluZ3MuICBXaGlsZSBHTlUgRm9ydHJhbiBjdXJyZW50bHkgZG9lcyBub3QKK3N1cHBvcnQgc3VjaCBzdHJpbmdzIGRpcmVjdGx5LCB0aGVyZSBleGlzdCB0d28gRm9ydHJhbiBpbXBsZW1lbnRhdGlvbnMKK2ZvciB0aGVtLCB3aGljaCB3b3JrIHdpdGggR05VIEZvcnRyYW4uICBUaGV5IGNhbiBiZSBmb3VuZCBhdAorPGEgaHJlZj0iaHR0cDovL3d3dy5mb3J0cmFuLmNvbS9pc29fdmFyeWluZ19zdHJpbmcuZjk1Ij5odHRwOi8vd3d3LmZvcnRyYW4uY29tL2lzb192YXJ5aW5nX3N0cmluZy5mOTU8L2E+IGFuZCBhdAorPGEgaHJlZj0iZnRwOi8vZnRwLm5hZy5jby51ay9zYzIyd2c1L0lTT19WQVJZSU5HX1NUUklORy8iPmZ0cDovL2Z0cC5uYWcuY28udWsvc2MyMndnNS9JU09fVkFSWUlOR19TVFJJTkcvPC9hPi4KKworICAgPHA+RGVmZXJyZWQtbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmdzIG9mIEZvcnRyYW4gMjAwMyBzdXBwb3J0cyBwYXJ0IG9mCit0aGUgZmVhdHVyZXMgb2YgPGNvZGU+SVNPX1ZBUllJTkdfU1RSSU5HPC9jb2RlPiBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMKK3JlcGxhY2VtZW50LiAoTmFtZWx5LCBhbGxvY2F0YWJsZSBvciBwb2ludGVycyBvZiB0aGUgdHlwZQorPGNvZGU+Y2hhcmFjdGVyKGxlbj06KTwvY29kZT4uKQorCis8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKzwhLS0gUEFSVCBJOiBJTlZPQ0FUSU9OIFJFRkVSRU5DRSAtLT4KKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorPCEtLSAgLS0+Cis8IS0tIENvbXBpbGVyIE9wdGlvbnMgLS0+Cis8IS0tICAtLT4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIC0tPgorPCEtLSBUaGlzIGlzIHBhcnQgb2YgdGhlIEdOVSBGb3J0cmFuIG1hbnVhbC4gLS0+Cis8IS0tIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBnZm9ydHJhbi50ZXhpLiAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Xb3JraW5nLXdpdGgtUG9pbnRlcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9Xb3JraW5nLXdpdGgtUG9pbnRlcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDIwZjIxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1dvcmtpbmctd2l0aC1Qb2ludGVycy5odG1sCkBAIC0wLDAgKzEsMTk4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Xb3JraW5nIHdpdGggUG9pbnRlcnMgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMuaHRtbCNJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQyIgdGl0bGU9IkludGVyb3BlcmFiaWxpdHkgd2l0aCBDIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW50ZXJvcGVyYWJsZS1TdWJyb3V0aW5lcy1hbmQtRnVuY3Rpb25zLmh0bWwjSW50ZXJvcGVyYWJsZS1TdWJyb3V0aW5lcy1hbmQtRnVuY3Rpb25zIiB0aXRsZT0iSW50ZXJvcGVyYWJsZSBTdWJyb3V0aW5lcyBhbmQgRnVuY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRnVydGhlci1JbnRlcm9wZXJhYmlsaXR5LW9mLUZvcnRyYW4td2l0aC1DLmh0bWwjRnVydGhlci1JbnRlcm9wZXJhYmlsaXR5LW9mLUZvcnRyYW4td2l0aC1DIiB0aXRsZT0iRnVydGhlciBJbnRlcm9wZXJhYmlsaXR5IG9mIEZvcnRyYW4gd2l0aCBDIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ildvcmtpbmctd2l0aC1Qb2ludGVycyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGdXJ0aGVyLUludGVyb3BlcmFiaWxpdHktb2YtRm9ydHJhbi13aXRoLUMuaHRtbCNGdXJ0aGVyLUludGVyb3BlcmFiaWxpdHktb2YtRm9ydHJhbi13aXRoLUMiPkZ1cnRoZXIgSW50ZXJvcGVyYWJpbGl0eSBvZiBGb3J0cmFuIHdpdGggQzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkludGVyb3BlcmFibGUtU3Vicm91dGluZXMtYW5kLUZ1bmN0aW9ucy5odG1sI0ludGVyb3BlcmFibGUtU3Vicm91dGluZXMtYW5kLUZ1bmN0aW9ucyI+SW50ZXJvcGVyYWJsZSBTdWJyb3V0aW5lcyBhbmQgRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW50ZXJvcGVyYWJpbGl0eS13aXRoLUMuaHRtbCNJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQyI+SW50ZXJvcGVyYWJpbGl0eSB3aXRoIEM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj43LjEuNSBXb3JraW5nIHdpdGggUG9pbnRlcnM8L2g0PgorCis8cD5DIHBvaW50ZXJzIGFyZSByZXByZXNlbnRlZCBpbiBGb3J0cmFuIHZpYSB0aGUgc3BlY2lhbCBvcGFxdWUgZGVyaXZlZCB0eXBlCis8Y29kZT50eXBlKGNfcHRyKTwvY29kZT4gKHdpdGggcHJpdmF0ZSBjb21wb25lbnRzKS4gIFRodXMgb25lIG5lZWRzIHRvCit1c2UgaW50cmluc2ljIGNvbnZlcnNpb24gcHJvY2VkdXJlcyB0byBjb252ZXJ0IGZyb20gb3IgdG8gQyBwb2ludGVycy4KKworICAgPHA+Rm9yIHNvbWUgYXBwbGljYXRpb25zLCB1c2luZyBhbiBhc3N1bWVkIHR5cGUgKDxjb2RlPlRZUEUoKik8L2NvZGU+KSBjYW4gYmUgYW4KK2FsdGVybmF0aXZlIHRvIGEgQyBwb2ludGVyOyBzZWUKKzxhIGhyZWY9IkZ1cnRoZXItSW50ZXJvcGVyYWJpbGl0eS1vZi1Gb3J0cmFuLXdpdGgtQy5odG1sI0Z1cnRoZXItSW50ZXJvcGVyYWJpbGl0eS1vZi1Gb3J0cmFuLXdpdGgtQyI+RnVydGhlciBJbnRlcm9wZXJhYmlsaXR5IG9mIEZvcnRyYW4gd2l0aCBDPC9hPi4KKworICAgPHA+Rm9yIGV4YW1wbGUsCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIHVzZSBpc29fY19iaW5kaW5nCisgICAgICAgdHlwZShjX3B0cikgOjogY3B0cjEsIGNwdHIyCisgICAgICAgaW50ZWdlciwgdGFyZ2V0IDo6IGFycmF5KDcpLCBzY2FsYXIKKyAgICAgICBpbnRlZ2VyLCBwb2ludGVyIDo6IHBhKDopLCBwcworICAgICAgIGNwdHIxID0gY19sb2MoYXJyYXkoMSkpICEgVGhlIHByb2dyYW1tZXIgbmVlZHMgdG8gZW5zdXJlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISBhcnJheSBpcyBjb250aWd1b3VzIGlmIHJlcXVpcmVkIGJ5IHRoZSBDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISBwcm9jZWR1cmUKKyAgICAgICBjcHRyMiA9IGNfbG9jKHNjYWxhcikKKyAgICAgICBjYWxsIGNfZl9wb2ludGVyKGNwdHIyLCBwcykKKyAgICAgICBjYWxsIGNfZl9wb2ludGVyKGNwdHIyLCBwYSwgc2hhcGU9WzddKQorPC9wcmU+CisgICA8cD5XaGVuIGNvbnZlcnRpbmcgQyB0byBGb3J0cmFuIGFycmF5cywgdGhlIG9uZS1kaW1lbnNpb25hbCA8Y29kZT5TSEFQRTwvY29kZT4gYXJndW1lbnQKK2hhcyB0byBiZSBwYXNzZWQuCisKKyAgIDxwPklmIGEgcG9pbnRlciBpcyBhIGR1bW15LWFyZ3VtZW50IG9mIGFuIGludGVyb3BlcmFibGUgcHJvY2VkdXJlLCBpdCB1c3VhbGx5CitoYXMgdG8gYmUgZGVjbGFyZWQgdXNpbmcgdGhlIDxjb2RlPlZBTFVFPC9jb2RlPiBhdHRyaWJ1dGUuICA8Y29kZT52b2lkKjwvY29kZT4KK21hdGNoZXMgPGNvZGU+VFlQRShDX1BUUiksIFZBTFVFPC9jb2RlPiwgd2hpbGUgPGNvZGU+VFlQRShDX1BUUik8L2NvZGU+IGFsb25lCittYXRjaGVzIDxjb2RlPnZvaWQqKjwvY29kZT4uCisKKyAgIDxwPlByb2NlZHVyZSBwb2ludGVycyBhcmUgaGFuZGxlZCBhbmFsb2dvdXNseSB0byBwb2ludGVyczsgdGhlIEMgdHlwZSBpcworPGNvZGU+VFlQRShDX0ZVTlBUUik8L2NvZGU+IGFuZCB0aGUgaW50cmluc2ljIGNvbnZlcnNpb24gcHJvY2VkdXJlcyBhcmUKKzxjb2RlPkNfRl9QUk9DUE9JTlRFUjwvY29kZT4gYW5kIDxjb2RlPkNfRlVOTE9DPC9jb2RlPi4KKworICAgPHA+TGV0IHVzIGNvbnNpZGVyIHR3byBleGFtcGxlcyBvZiBhY3R1YWxseSBwYXNzaW5nIGEgcHJvY2VkdXJlIHBvaW50ZXIgZnJvbQorQyB0byBGb3J0cmFuIGFuZCB2aWNlIHZlcnNhLiAgTm90ZSB0aGF0IHRoZXNlIGV4YW1wbGVzIGFyZSBhbHNvIHZlcnkKK3NpbWlsYXIgdG8gcGFzc2luZyBvcmRpbmFyeSBwb2ludGVycyBiZXR3ZWVuIGJvdGggbGFuZ3VhZ2VzLiBGaXJzdCwKK2NvbnNpZGVyIHRoaXMgY29kZSBpbiBDOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLyogUHJvY2VkdXJlIGltcGxlbWVudGVkIGluIEZvcnRyYW4uICAqLworICAgICB2b2lkIGdldF92YWx1ZXMgKHZvaWQgKCopKGRvdWJsZSkpOworICAgICAKKyAgICAgLyogQ2FsbC1iYWNrIHJvdXRpbmUgd2Ugd2FudCBjYWxsZWQgZnJvbSBGb3J0cmFuLiAgKi8KKyAgICAgdm9pZAorICAgICBwcmludF9pdCAoZG91YmxlIHgpCisgICAgIHsKKyAgICAgICBwcmludGYgKCJOdW1iZXIgaXMgJWYuXG4iLCB4KTsKKyAgICAgfQorICAgICAKKyAgICAgLyogQ2FsbCBGb3J0cmFuIHJvdXRpbmUgYW5kIHBhc3MgY2FsbC1iYWNrIHRvIGl0LiAgKi8KKyAgICAgdm9pZAorICAgICBmb29iYXIgKCkKKyAgICAgeworICAgICAgIGdldF92YWx1ZXMgKCZhbXA7cHJpbnRfaXQpOworICAgICB9Cis8L3ByZT4KKyAgIDxwPkEgbWF0Y2hpbmcgaW1wbGVtZW50YXRpb24gZm9yIDxjb2RlPmdldF92YWx1ZXM8L2NvZGU+IGluIEZvcnRyYW4sIHRoYXQgY29ycmVjdGx5CityZWNlaXZlcyB0aGUgcHJvY2VkdXJlIHBvaW50ZXIgZnJvbSBDIGFuZCBpcyBhYmxlIHRvIGNhbGwgaXQsIGlzIGdpdmVuCitpbiB0aGUgZm9sbG93aW5nIDxjb2RlPk1PRFVMRTwvY29kZT46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBNT0RVTEUgbQorICAgICAgIElNUExJQ0lUIE5PTkUKKyAgICAgCisgICAgICAgISBEZWZpbmUgaW50ZXJmYWNlIG9mIGNhbGwtYmFjayByb3V0aW5lLgorICAgICAgIEFCU1RSQUNUIElOVEVSRkFDRQorICAgICAgICAgU1VCUk9VVElORSBjYWxsYmFjayAoeCkKKyAgICAgICAgICAgVVNFLCBJTlRSSU5TSUMgOjogSVNPX0NfQklORElORworICAgICAgICAgICBSRUFMKEtJTkQ9Q19ET1VCTEUpLCBJTlRFTlQoSU4pLCBWQUxVRSA6OiB4CisgICAgICAgICBFTkQgU1VCUk9VVElORSBjYWxsYmFjaworICAgICAgIEVORCBJTlRFUkZBQ0UKKyAgICAgCisgICAgIENPTlRBSU5TCisgICAgIAorICAgICAgICEgRGVmaW5lIEMtYm91bmQgcHJvY2VkdXJlLgorICAgICAgIFNVQlJPVVRJTkUgZ2V0X3ZhbHVlcyAoY3Byb2MpIEJJTkQoQykKKyAgICAgICAgIFVTRSwgSU5UUklOU0lDIDo6IElTT19DX0JJTkRJTkcKKyAgICAgICAgIFRZUEUoQ19GVU5QVFIpLCBJTlRFTlQoSU4pLCBWQUxVRSA6OiBjcHJvYworICAgICAKKyAgICAgICAgIFBST0NFRFVSRShjYWxsYmFjayksIFBPSU5URVIgOjogcHJvYworICAgICAKKyAgICAgICAgICEgQ29udmVydCBDIHRvIEZvcnRyYW4gcHJvY2VkdXJlIHBvaW50ZXIuCisgICAgICAgICBDQUxMIENfRl9QUk9DUE9JTlRFUiAoY3Byb2MsIHByb2MpCisgICAgIAorICAgICAgICAgISBDYWxsIGl0LgorICAgICAgICAgQ0FMTCBwcm9jICgxLjBfQ19ET1VCTEUpCisgICAgICAgICBDQUxMIHByb2MgKC00Mi4wX0NfRE9VQkxFKQorICAgICAgICAgQ0FMTCBwcm9jICgxOC4xMl9DX0RPVUJMRSkKKyAgICAgICBFTkQgU1VCUk9VVElORSBnZXRfdmFsdWVzCisgICAgIAorICAgICBFTkQgTU9EVUxFIG0KKzwvcHJlPgorICAgPHA+TmV4dCwgd2Ugd2FudCB0byBjYWxsIGEgQyByb3V0aW5lIHRoYXQgZXhwZWN0cyBhIHByb2NlZHVyZSBwb2ludGVyIGFyZ3VtZW50CithbmQgcGFzcyBpdCBhIEZvcnRyYW4gcHJvY2VkdXJlICh3aGljaCBjbGVhcmx5IG11c3QgYmUgaW50ZXJvcGVyYWJsZSEpLiAKK0FnYWluLCB0aGUgQyBmdW5jdGlvbiBtYXkgYmU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBpbnQKKyAgICAgY2FsbF9pdCAoaW50ICgqZnVuYykoaW50KSwgaW50IGFyZykKKyAgICAgeworICAgICAgIHJldHVybiBmdW5jIChhcmcpOworICAgICB9Cis8L3ByZT4KKyAgIDxwPkl0IGNhbiBiZSB1c2VkIGFzIGluIHRoZSBmb2xsb3dpbmcgRm9ydHJhbiBjb2RlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgTU9EVUxFIG0KKyAgICAgICBVU0UsIElOVFJJTlNJQyA6OiBJU09fQ19CSU5ESU5HCisgICAgICAgSU1QTElDSVQgTk9ORQorICAgICAKKyAgICAgICAhIERlZmluZSBpbnRlcmZhY2Ugb2YgQyBmdW5jdGlvbi4KKyAgICAgICBJTlRFUkZBQ0UKKyAgICAgICAgIElOVEVHRVIoS0lORD1DX0lOVCkgRlVOQ1RJT04gY2FsbF9pdCAoZnVuYywgYXJnKSBCSU5EKEMpCisgICAgICAgICAgIFVTRSwgSU5UUklOU0lDIDo6IElTT19DX0JJTkRJTkcKKyAgICAgICAgICAgVFlQRShDX0ZVTlBUUiksIElOVEVOVChJTiksIFZBTFVFIDo6IGZ1bmMKKyAgICAgICAgICAgSU5URUdFUihLSU5EPUNfSU5UKSwgSU5URU5UKElOKSwgVkFMVUUgOjogYXJnCisgICAgICAgICBFTkQgRlVOQ1RJT04gY2FsbF9pdAorICAgICAgIEVORCBJTlRFUkZBQ0UKKyAgICAgCisgICAgIENPTlRBSU5TCisgICAgIAorICAgICAgICEgRGVmaW5lIHByb2NlZHVyZSBwYXNzZWQgdG8gQyBmdW5jdGlvbi4KKyAgICAgICAhIEl0IG11c3QgYmUgaW50ZXJvcGVyYWJsZSEKKyAgICAgICBJTlRFR0VSKEtJTkQ9Q19JTlQpIEZVTkNUSU9OIGRvdWJsZV9pdCAoYXJnKSBCSU5EKEMpCisgICAgICAgICBJTlRFR0VSKEtJTkQ9Q19JTlQpLCBJTlRFTlQoSU4pLCBWQUxVRSA6OiBhcmcKKyAgICAgICAgIGRvdWJsZV9pdCA9IGFyZyArIGFyZworICAgICAgIEVORCBGVU5DVElPTiBkb3VibGVfaXQKKyAgICAgCisgICAgICAgISBDYWxsIEMgZnVuY3Rpb24uCisgICAgICAgU1VCUk9VVElORSBmb29iYXIgKCkKKyAgICAgICAgIFRZUEUoQ19GVU5QVFIpIDo6IGNwcm9jCisgICAgICAgICBJTlRFR0VSKEtJTkQ9Q19JTlQpIDo6IGkKKyAgICAgCisgICAgICAgICAhIEdldCBDIHByb2NlZHVyZSBwb2ludGVyLgorICAgICAgICAgY3Byb2MgPSBDX0ZVTkxPQyAoZG91YmxlX2l0KQorICAgICAKKyAgICAgICAgICEgVXNlIGl0LgorICAgICAgICAgRE8gaSA9IDFfQ19JTlQsIDEwX0NfSU5UCisgICAgICAgICAgIFBSSU5UICosIGNhbGxfaXQgKGNwcm9jLCBpKQorICAgICAgICAgRU5EIERPCisgICAgICAgRU5EIFNVQlJPVVRJTkUgZm9vYmFyCisgICAgIAorICAgICBFTkQgTU9EVUxFIG0KKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1gtZm9ybWF0LWRlc2NyaXB0b3Itd2l0aG91dC1jb3VudC1maWVsZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1gtZm9ybWF0LWRlc2NyaXB0b3Itd2l0aG91dC1jb3VudC1maWVsZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OTE2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vWC1mb3JtYXQtZGVzY3JpcHRvci13aXRob3V0LWNvdW50LWZpZWxkLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WCBmb3JtYXQgZGVzY3JpcHRvciB3aXRob3V0IGNvdW50IGZpZWxkIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkV4dGVuc2lvbnMtdG8tbmFtZWxpc3QuaHRtbCNFeHRlbnNpb25zLXRvLW5hbWVsaXN0IiB0aXRsZT0iRXh0ZW5zaW9ucyB0byBuYW1lbGlzdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNvbW1hcy1pbi1GT1JNQVQtc3BlY2lmaWNhdGlvbnMuaHRtbCNDb21tYXMtaW4tRk9STUFULXNwZWNpZmljYXRpb25zIiB0aXRsZT0iQ29tbWFzIGluIEZPUk1BVCBzcGVjaWZpY2F0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYLWZvcm1hdC1kZXNjcmlwdG9yLXdpdGhvdXQtY291bnQtZmllbGQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ29tbWFzLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucy5odG1sI0NvbW1hcy1pbi1GT1JNQVQtc3BlY2lmaWNhdGlvbnMiPkNvbW1hcyBpbiBGT1JNQVQgc3BlY2lmaWNhdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFeHRlbnNpb25zLXRvLW5hbWVsaXN0Lmh0bWwjRXh0ZW5zaW9ucy10by1uYW1lbGlzdCI+RXh0ZW5zaW9ucyB0byBuYW1lbGlzdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIj5FeHRlbnNpb25zIGltcGxlbWVudGVkIGluIEdOVSBGb3J0cmFuPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ni4xLjQgPGNvZGU+WDwvY29kZT4gZm9ybWF0IGRlc2NyaXB0b3Igd2l0aG91dCBjb3VudCBmaWVsZDwvaDQ+CisKKzxwPlRvIHN1cHBvcnQgbGVnYWN5IGNvZGVzLCBHTlUgRm9ydHJhbiBwZXJtaXRzIHRoZSBjb3VudCBmaWVsZCBvZiB0aGUKKzxjb2RlPlg8L2NvZGU+IGVkaXQgZGVzY3JpcHRvciBpbiA8Y29kZT5GT1JNQVQ8L2NvZGU+IHN0YXRlbWVudHMgdG8gYmUgb21pdHRlZC4gCitXaGVuIG9taXR0ZWQsIHRoZSBjb3VudCBpcyBpbXBsaWNpdGx5IGFzc3VtZWQgdG8gYmUgb25lLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIFBSSU5UIDEwLCAyLCAzCisgICAgIDEwICAgICBGT1JNQVQgKEkxLCBYLCBJMSkKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1hPUi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL1hPUi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTVhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vWE9SLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+WE9SIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiIHRpdGxlPSJJbnRyaW5zaWMgUHJvY2VkdXJlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlZFUklGWS5odG1sI1ZFUklGWSIgdGl0bGU9IlZFUklGWSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYT1IiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJWRVJJRlkuaHRtbCNWRVJJRlkiPlZFUklGWTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPkludHJpbnNpYyBQcm9jZWR1cmVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4yNTcgPGNvZGU+WE9SPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgbG9naWNhbCBleGNsdXNpdmUgT1I8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1YT1ItMTEzNyI+PC9hPjxhIG5hbWU9ImluZGV4LWJpdHdpc2UtbG9naWNhbC1leGNsdXNpdmUtb3ItMTEzOCI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZ2ljYWwtZXhjbHVzaXZlLW9yXzAwMmMtYml0d2lzZS0xMTM5Ij48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+Qml0d2lzZSBsb2dpY2FsIGV4Y2x1c2l2ZSBvci4KKworICAgICA8cD5UaGlzIGludHJpbnNpYyByb3V0aW5lIGlzIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCitHTlUgRm9ydHJhbiA3Ny4gIEZvciBpbnRlZ2VyIGFyZ3VtZW50cywgcHJvZ3JhbW1lcnMgc2hvdWxkIGNvbnNpZGVyCit0aGUgdXNlIG9mIHRoZSA8YSBocmVmPSJJRU9SLmh0bWwjSUVPUiI+SUVPUjwvYT4gaW50cmluc2ljIGFuZCBmb3IgbG9naWNhbCBhcmd1bWVudHMgdGhlCis8Y29kZT4uTkVRVi48L2NvZGU+IG9wZXJhdG9yLCB3aGljaCBhcmUgYm90aCBkZWZpbmVkIGJ5IHRoZSBGb3J0cmFuIHN0YW5kYXJkLgorCisgICAgIDxicj48ZHQ+PGVtPlN0YW5kYXJkPC9lbT46PGRkPkdOVSBleHRlbnNpb24KKworICAgICA8YnI+PGR0PjxlbT5DbGFzczwvZW0+OjxkZD5GdW5jdGlvbgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT5SRVNVTFQgPSBYT1IoSSwgSik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5JPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSBlaXRoZXIgIGEgc2NhbGFyIDxjb2RlPklOVEVHRVI8L2NvZGU+Cit0eXBlIG9yIGEgc2NhbGFyIDxjb2RlPkxPR0lDQUw8L2NvZGU+IHR5cGUuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5KPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgdHlwZSBzaGFsbCBiZSB0aGUgc2FtZSBhcyB0aGUgdHlwZSBvZiA8dmFyPkk8L3Zhcj4uCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5SZXR1cm4gdmFsdWU8L2VtPjo8ZGQ+VGhlIHJldHVybiB0eXBlIGlzIGVpdGhlciBhIHNjYWxhciA8Y29kZT5JTlRFR0VSPC9jb2RlPiBvciBhIHNjYWxhcgorPGNvZGU+TE9HSUNBTDwvY29kZT4uICBJZiB0aGUga2luZCB0eXBlIHBhcmFtZXRlcnMgZGlmZmVyLCB0aGVuIHRoZQorc21hbGxlciBraW5kIHR5cGUgaXMgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gbGFyZ2VyIGtpbmQsIGFuZCB0aGUKK3JldHVybiBoYXMgdGhlIGxhcmdlciBraW5kLgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFBST0dSQU0gdGVzdF94b3IKKyAgICAgICAgICAgIExPR0lDQUwgOjogVCA9IC5UUlVFLiwgRiA9IC5GQUxTRS4KKyAgICAgICAgICAgIElOVEVHRVIgOjogYSwgYgorICAgICAgICAgICAgREFUQSBhIC8gWidGJyAvLCBiIC8gWiczJyAvCisgICAgICAgICAgCisgICAgICAgICAgICBXUklURSAoKiwqKSBYT1IoVCwgVCksIFhPUihULCBGKSwgWE9SKEYsIFQpLCBYT1IoRiwgRikKKyAgICAgICAgICAgIFdSSVRFICgqLCopIFhPUihhLCBiKQorICAgICAgICAgIEVORCBQUk9HUkFNCis8L3ByZT4KKyAgICAgPGJyPjxkdD48ZW0+U2VlIGFsc288L2VtPjo8ZGQ+Rm9ydHJhbiA5NSBlbGVtZW50YWwgZnVuY3Rpb246IDxhIGhyZWY9IklFT1IuaHRtbCNJRU9SIj5JRU9SPC9hPgorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL18wMDNjY29kZV8wMDNlUV8wMDNjXzAwMmZjb2RlXzAwM2UtZXhwb25lbnRfMDAyZGxldHRlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL18wMDNjY29kZV8wMDNlUV8wMDNjXzAwMmZjb2RlXzAwM2UtZXhwb25lbnRfMDAyZGxldHRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OWViOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwM2Njb2RlXzAwM2VRXzAwM2NfMDAyZmNvZGVfMDAzZS1leHBvbmVudF8wMDJkbGV0dGVyLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QGNvZGV7UX0gZXhwb25lbnQtbGV0dGVyIC0gVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4dGVuc2lvbnMtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4uaHRtbCNFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuIiB0aXRsZT0iRXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklfMDAyZk8taXRlbS1saXN0cy5odG1sI0lfMDAyZk8taXRlbS1saXN0cyIgdGl0bGU9IkkvTyBpdGVtIGxpc3RzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQk9aLWxpdGVyYWwtY29uc3RhbnRzLmh0bWwjQk9aLWxpdGVyYWwtY29uc3RhbnRzIiB0aXRsZT0iQk9aIGxpdGVyYWwgY29uc3RhbnRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IiUzY2NvZGUlM2VRJTNjJTJmY29kZSUzZS1leHBvbmVudC1sZXR0ZXIiPjwvYT4KKzxhIG5hbWU9ImdfdF8wMDNjY29kZV8wMDNlUV8wMDNjXzAwMmZjb2RlXzAwM2UtZXhwb25lbnRfMDAyZGxldHRlciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCT1otbGl0ZXJhbC1jb25zdGFudHMuaHRtbCNCT1otbGl0ZXJhbC1jb25zdGFudHMiPkJPWiBsaXRlcmFsIGNvbnN0YW50czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklfMDAyZk8taXRlbS1saXN0cy5odG1sI0lfMDAyZk8taXRlbS1saXN0cyI+SS9PIGl0ZW0gbGlzdHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+RXh0ZW5zaW9ucyBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjYuMS44IDxjb2RlPlE8L2NvZGU+IGV4cG9uZW50LWxldHRlcjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiUV8wMDdkLWV4cG9uZW50XzAwMmRsZXR0ZXItMzM0Ij48L2E+CitHTlUgRm9ydHJhbiBhY2NlcHRzIHJlYWwgbGl0ZXJhbCBjb25zdGFudHMgd2l0aCBhbiBleHBvbmVudC1sZXR0ZXIKK29mIDxjb2RlPlE8L2NvZGU+LCBmb3IgZXhhbXBsZSwgPGNvZGU+MS4yM1E0NTwvY29kZT4uICBUaGUgY29uc3RhbnQgaXMgaW50ZXJwcmV0ZWQKK2FzIGEgPGNvZGU+UkVBTCgxNik8L2NvZGU+IGVudGl0eSBvbiB0YXJnZXRzIHRoYXQgc3VwcG9ydCB0aGlzIHR5cGUuICBJZgordGhlIHRhcmdldCBkb2VzIG5vdCBzdXBwb3J0IDxjb2RlPlJFQUwoMTYpPC9jb2RlPiBidXQgaGFzIGEgPGNvZGU+UkVBTCgxMCk8L2NvZGU+Cit0eXBlLCB0aGVuIHRoZSByZWFsLWxpdGVyYWwtY29uc3RhbnQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhCis8Y29kZT5SRUFMKDEwKTwvY29kZT4gZW50aXR5LiAgSW4gdGhlIGFic2VuY2Ugb2YgPGNvZGU+UkVBTCgxNik8L2NvZGU+IGFuZAorPGNvZGU+UkVBTCgxMCk8L2NvZGU+LCBhbiBlcnJvciB3aWxsIG9jY3VyLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZhcmdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZhcmdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ4ZjQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9fMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmFyZ3MuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5fZ2ZvcnRyYW5fc2V0X2FyZ3MgLSBUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXI8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoZSBHTlUgRm9ydHJhbiBDb21waWxlciI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbS5odG1sI05vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0iIHRpdGxlPSJOb24tRm9ydHJhbiBNYWluIFByb2dyYW0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMiIHRpdGxlPSJfZ2ZvcnRyYW5fc2V0X29wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIGBgRnVuZGluZyBGcmVlIFNvZnR3YXJlJycsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCitgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCisoYSkgVGhlIEZTRidzIEZyb250LUNvdmVyIFRleHQgaXM6CisKKyAgICAgQSBHTlUgTWFudWFsCisKKyhiKSBUaGUgRlNGJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorCisgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKKyAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKKyAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iX2dmb3J0cmFuX3NldF9hcmdzIj48L2E+Cis8YSBuYW1lPSJnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmFyZ3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZvcHRpb25zLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZvcHRpb25zIj5fZ2ZvcnRyYW5fc2V0X29wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwjTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbSI+Tm9uLUZvcnRyYW4gTWFpbiBQcm9ncmFtPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Ny4zLjEgPGNvZGU+X2dmb3J0cmFuX3NldF9hcmdzPC9jb2RlPiAmbWRhc2g7IFNhdmUgY29tbWFuZC1saW5lIGFyZ3VtZW50czwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncy0zNTciPjwvYT48YSBuYW1lPSJpbmRleC1saWJnZm9ydHJhbi1pbml0aWFsaXphdGlvbl8wMDJjLXNldF8wMDVmYXJncy0zNTgiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5fZ2ZvcnRyYW5fc2V0X2FyZ3M8L2NvZGU+IHNhdmVzIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzOyB0aGlzCitpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBpZiBhbnkgb2YgdGhlIGNvbW1hbmQtbGluZSBpbnRyaW5zaWNzCitpcyBjYWxsZWQuICBBZGRpdGlvbmFsbHksIGl0IHNoYWxsIGJlIGNhbGxlZCBpZiBiYWNrdHJhY2luZyBpcworZW5hYmxlZCAoc2VlIDxjb2RlPl9nZm9ydHJhbl9zZXRfb3B0aW9uczwvY29kZT4pLgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT52b2lkIF9nZm9ydHJhbl9zZXRfYXJncyAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5hcmdjPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5udW1iZXIgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHN0cmluZ3MKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+YXJndjwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+dGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudCBzdHJpbmdzOyBhcmd2WzBdCitpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUgaXRzZWxmLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsaWJnZm9ydHJhbi4gICovCisgICAgICAgICAgICBfZ2ZvcnRyYW5fc2V0X2FyZ3MgKGFyZ2MsIGFyZ3YpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9fMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmNvbnZlcnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9fMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmNvbnZlcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGI5NWMxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL18wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydC5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPl9nZm9ydHJhbl9zZXRfY29udmVydCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwjTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbSIgdGl0bGU9Ik5vbi1Gb3J0cmFuIE1haW4gUHJvZ3JhbSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmb3B0aW9ucy5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmb3B0aW9ucyIgdGl0bGU9Il9nZm9ydHJhbl9zZXRfb3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXIuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyIiB0aXRsZT0iX2dmb3J0cmFuX3NldF9yZWNvcmRfbWFya2VyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBgYEZ1bmRpbmcgRnJlZSBTb2Z0d2FyZScnLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworKGEpIFRoZSBGU0YncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorCisgICAgIEEgR05VIE1hbnVhbAorCisoYikgVGhlIEZTRidzIEJhY2stQ292ZXIgVGV4dCBpczoKKworICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCisgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCisgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Il9nZm9ydHJhbl9zZXRfY29udmVydCI+PC9hPgorPGEgbmFtZT0iZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZjb252ZXJ0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXIuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyIj5fZ2ZvcnRyYW5fc2V0X3JlY29yZF9tYXJrZXI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMiPl9nZm9ydHJhbl9zZXRfb3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik5vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0uaHRtbCNOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtIj5Ob24tRm9ydHJhbiBNYWluIFByb2dyYW08L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj43LjMuMyA8Y29kZT5fZ2ZvcnRyYW5fc2V0X2NvbnZlcnQ8L2NvZGU+ICZtZGFzaDsgU2V0IGVuZGlhbiBjb252ZXJzaW9uPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZjb252ZXJ0LTM2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWxpYmdmb3J0cmFuLWluaXRpYWxpemF0aW9uXzAwMmMtc2V0XzAwNWZjb252ZXJ0LTM2MiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPl9nZm9ydHJhbl9zZXRfY29udmVydDwvY29kZT4gc2V0IHRoZSByZXByZXNlbnRhdGlvbiBvZiBkYXRhIGZvcgordW5mb3JtYXR0ZWQgZmlsZXMuCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPnZvaWQgX2dmb3J0cmFuX3NldF9jb252ZXJ0IChpbnQgY29udik8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5jb252PC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5FbmRpYW4gY29udmVyc2lvbiwgcG9zc2libGUgdmFsdWVzOgorR0ZDX0NPTlZFUlRfTkFUSVZFICgwLCBkZWZhdWx0KSwgR0ZDX0NPTlZFUlRfU1dBUCAoMSksCitHRkNfQ09OVkVSVF9CSUcgKDIpLCBHRkNfQ09OVkVSVF9MSVRUTEUgKDMpLgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsaWJnZm9ydHJhbi4gICovCisgICAgICAgICAgICBfZ2ZvcnRyYW5fc2V0X2FyZ3MgKGFyZ2MsIGFyZ3YpOworICAgICAgICAgICAgX2dmb3J0cmFuX3NldF9jb252ZXJ0ICgxKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9fMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmZwZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MzJlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUuaHRtbApAQCAtMCwwICsxLDg3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5fZ2ZvcnRyYW5fc2V0X2ZwZSAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwjTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbSIgdGl0bGU9Ik5vbi1Gb3J0cmFuIE1haW4gUHJvZ3JhbSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXIuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyIiB0aXRsZT0iX2dmb3J0cmFuX3NldF9yZWNvcmRfbWFya2VyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoIiB0aXRsZT0iX2dmb3J0cmFuX3NldF9tYXhfc3VicmVjb3JkX2xlbmd0aCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJfZ2ZvcnRyYW5fc2V0X2ZwZSI+PC9hPgorPGEgbmFtZT0iZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoIj5fZ2ZvcnRyYW5fc2V0X21heF9zdWJyZWNvcmRfbGVuZ3RoPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZyZWNvcmRfMDA1Zm1hcmtlci5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXIiPl9nZm9ydHJhbl9zZXRfcmVjb3JkX21hcmtlcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik5vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0uaHRtbCNOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtIj5Ob24tRm9ydHJhbiBNYWluIFByb2dyYW08L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj43LjMuNSA8Y29kZT5fZ2ZvcnRyYW5fc2V0X2ZwZTwvY29kZT4gJm1kYXNoOyBFbmFibGUgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIHRyYXBzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUtMzY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGliZ2ZvcnRyYW4taW5pdGlhbGl6YXRpb25fMDAyYy1zZXRfMDA1ZmZwZS0zNjYiPjwvYT4KKyAgICAgPGRsPgorPGR0PjxlbT5EZXNjcmlwdGlvbjwvZW0+OjxkZD48Y29kZT5fZ2ZvcnRyYW5fc2V0X2ZwZTwvY29kZT4gZW5hYmxlcyBmbG9hdGluZyBwb2ludCBleGNlcHRpb24gdHJhcHMgZm9yCit0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbnMuICBPbiBtb3N0IHN5c3RlbXMsIHRoaXMgd2lsbCByZXN1bHQgaW4gYQorU0lHRlBFIHNpZ25hbCBiZWluZyBzZW50IGFuZCB0aGUgcHJvZ3JhbSBiZWluZyBhYm9ydGVkLgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT52b2lkIF9nZm9ydHJhbl9zZXRfZnBlIChpbnQgdmFsKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPm9wdGlvbjwvdmFyPlswXSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+SUVFRSBleGNlcHRpb25zLiAgUG9zc2libGUgdmFsdWVzIGFyZQorKGJpdHdpc2Ugb3ItZWQpIHplcm8gKDAsIGRlZmF1bHQpIG5vIHRyYXBwaW5nLAorPGNvZGU+R0ZDX0ZQRV9JTlZBTElEPC9jb2RlPiAoMSksIDxjb2RlPkdGQ19GUEVfREVOT1JNQUw8L2NvZGU+ICgyKSwKKzxjb2RlPkdGQ19GUEVfWkVSTzwvY29kZT4gKDQpLCA8Y29kZT5HRkNfRlBFX09WRVJGTE9XPC9jb2RlPiAoOCksCis8Y29kZT5HRkNfRlBFX1VOREVSRkxPVzwvY29kZT4gKDE2KSwgYW5kIDxjb2RlPkdGQ19GUEVfSU5FWEFDVDwvY29kZT4gKDMyKS4KKyAgICAgPGJyPjwvdGQ+PC90cj48L3RhYmxlPgorCisgICAgIDxicj48ZHQ+PGVtPkV4YW1wbGU8L2VtPjo8ZGQ+CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbGliZ2ZvcnRyYW4uICAqLworICAgICAgICAgICAgX2dmb3J0cmFuX3NldF9hcmdzIChhcmdjLCBhcmd2KTsKKyAgICAgICAgICAgIC8qIEZQRSBmb3IgaW52YWxpZCBvcGVyYXRpb25zIHN1Y2ggYXMgU1FSVCgtMS4wKS4gICovCisgICAgICAgICAgICBfZ2ZvcnRyYW5fc2V0X2ZwZSAoMSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL18wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmbWF4XzAwNWZzdWJyZWNvcmRfMDA1Zmxlbmd0aC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL18wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmbWF4XzAwNWZzdWJyZWNvcmRfMDA1Zmxlbmd0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDI3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+X2dmb3J0cmFuX3NldF9tYXhfc3VicmVjb3JkX2xlbmd0aCAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwjTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbSIgdGl0bGU9Ik5vbi1Gb3J0cmFuIE1haW4gUHJvZ3JhbSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmZnBlLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUiIHRpdGxlPSJfZ2ZvcnRyYW5fc2V0X2ZwZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJfZ2ZvcnRyYW5fc2V0X21heF9zdWJyZWNvcmRfbGVuZ3RoIj48L2E+Cis8YSBuYW1lPSJnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm1heF8wMDVmc3VicmVjb3JkXzAwNWZsZW5ndGgiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmZwZS5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmZnBlIj5fZ2ZvcnRyYW5fc2V0X2ZwZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik5vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0uaHRtbCNOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtIj5Ob24tRm9ydHJhbiBNYWluIFByb2dyYW08L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj43LjMuNiA8Y29kZT5fZ2ZvcnRyYW5fc2V0X21heF9zdWJyZWNvcmRfbGVuZ3RoPC9jb2RlPiAmbWRhc2g7IFNldCBzdWJyZWNvcmQgbGVuZ3RoPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLTM2NyI+PC9hPjxhIG5hbWU9ImluZGV4LWxpYmdmb3J0cmFuLWluaXRpYWxpemF0aW9uXzAwMmMtc2V0XzAwNWZtYXhfMDA1ZnN1YnJlY29yZF8wMDVmbGVuZ3RoLTM2OCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPl9nZm9ydHJhbl9zZXRfbWF4X3N1YnJlY29yZF9sZW5ndGg8L2NvZGU+IHNldCB0aGUgbWF4aW11bSBsZW5ndGgKK2ZvciBhIHN1YnJlY29yZC4gIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHRlc3RpbmcgYW5kCitkZWJ1Z2dpbmcgb2YgdW5mb3JtYXR0ZWQgSS9PLgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT52b2lkIF9nZm9ydHJhbl9zZXRfbWF4X3N1YnJlY29yZF9sZW5ndGggKGludCB2YWwpPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGVtPkFyZ3VtZW50czwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+dmFsPC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj50aGUgbWF4aW11bSBsZW5ndGggZm9yIGEgc3VicmVjb3JkOwordGhlIG1heGltdW0gcGVybWl0dGVkIHZhbHVlIGlzIDIxNDc0ODM2MzksIHdoaWNoIGlzIGFsc28KK3RoZSBkZWZhdWx0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsaWJnZm9ydHJhbi4gICovCisgICAgICAgICAgICBfZ2ZvcnRyYW5fc2V0X2FyZ3MgKGFyZ2MsIGFyZ3YpOworICAgICAgICAgICAgX2dmb3J0cmFuX3NldF9tYXhfc3VicmVjb3JkX2xlbmd0aCAoOCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPC9kbD4KKworPCEtLSBJbnRyaW5zaWMgUHJvY2VkdXJlcyAtLT4KKzwhLS0gIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL18wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmb3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dmb3J0cmFuL18wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmb3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjVkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZvcHRpb25zLmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPl9nZm9ydHJhbl9zZXRfb3B0aW9ucyAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwjTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbSIgdGl0bGU9Ik5vbi1Gb3J0cmFuIE1haW4gUHJvZ3JhbSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncy5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncyIgdGl0bGU9Il9nZm9ydHJhbl9zZXRfYXJncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydC5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydCIgdGl0bGU9Il9nZm9ydHJhbl9zZXRfY29udmVydCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJfZ2ZvcnRyYW5fc2V0X29wdGlvbnMiPjwvYT4KKzxhIG5hbWU9ImdfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmb3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmNvbnZlcnQuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmNvbnZlcnQiPl9nZm9ydHJhbl9zZXRfY29udmVydDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncy5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncyI+X2dmb3J0cmFuX3NldF9hcmdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbS5odG1sI05vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0iPk5vbi1Gb3J0cmFuIE1haW4gUHJvZ3JhbTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjcuMy4yIDxjb2RlPl9nZm9ydHJhbl9zZXRfb3B0aW9uczwvY29kZT4gJm1kYXNoOyBTZXQgbGlicmFyeSBvcHRpb24gZmxhZ3M8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMtMzU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGliZ2ZvcnRyYW4taW5pdGlhbGl6YXRpb25fMDAyYy1zZXRfMDA1Zm9wdGlvbnMtMzYwIj48L2E+CisgICAgIDxkbD4KKzxkdD48ZW0+RGVzY3JpcHRpb248L2VtPjo8ZGQ+PGNvZGU+X2dmb3J0cmFuX3NldF9vcHRpb25zPC9jb2RlPiBzZXRzIHNldmVyYWwgZmxhZ3MgcmVsYXRlZCB0byB0aGUgRm9ydHJhbgorc3RhbmRhcmQgdG8gYmUgdXNlZCwgd2hldGhlciBiYWNrdHJhY2luZyBzaG91bGQgYmUgZW5hYmxlZAorYW5kIHdoZXRoZXIgcmFuZ2UgY2hlY2tzIHNob3VsZCBiZSBwZXJmb3JtZWQuICBUaGUgc3ludGF4IGFsbG93cyBmb3IKK3Vwd2FyZCBjb21wYXRpYmlsaXR5IHNpbmNlIHRoZSBudW1iZXIgb2YgcGFzc2VkIGZsYWdzIGlzIHNwZWNpZmllZDsgZm9yCitub24tcGFzc2VkIGZsYWdzLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkLiAgU2VlIGFsc28KK3NlZSA8YSBocmVmPSJDb2RlLUdlbi1PcHRpb25zLmh0bWwjQ29kZS1HZW4tT3B0aW9ucyI+Q29kZSBHZW4gT3B0aW9uczwvYT4uICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgZmxhZ3MgYXJlIGFjdHVhbGx5Cit1c2VkLgorCisgICAgIDxicj48ZHQ+PGVtPlN5bnRheDwvZW0+OjxkZD48Y29kZT52b2lkIF9nZm9ydHJhbl9zZXRfb3B0aW9ucyAoaW50IG51bSwgaW50IG9wdGlvbnNbXSk8L2NvZGU+CisKKyAgICAgPGJyPjxkdD48ZW0+QXJndW1lbnRzPC9lbT46PGRkPgorICAgICA8cD48dGFibGUgc3VtbWFyeT0iIj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5udW08L3Zhcj4gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPm51bWJlciBvZiBvcHRpb25zIHBhc3NlZAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5hcmd2PC92YXI+IDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5UaGUgbGlzdCBvZiBmbGFnIHZhbHVlcworICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+b3B0aW9uIGZsYWcgbGlzdDwvZW0+OjxkZD4KKyAgICAgPHA+PHRhYmxlIHN1bW1hcnk9IiI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+b3B0aW9uPC92YXI+WzBdIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5BbGxvd2VkIHN0YW5kYXJkOyBjYW4gZ2l2ZSBydW4tdGltZSBlcnJvcnMKK2lmIGUuZy4gYW4gaW5wdXQtb3V0cHV0IGVkaXQgZGVzY3JpcHRvciBpcyBpbnZhbGlkIGluIGEgZ2l2ZW4gc3RhbmRhcmQuIAorUG9zc2libGUgdmFsdWVzIGFyZSAoYml0d2lzZSBvci1lZCkgPGNvZGU+R0ZDX1NURF9GNzc8L2NvZGU+ICgxKSwKKzxjb2RlPkdGQ19TVERfRjk1X09CUzwvY29kZT4gKDIpLCA8Y29kZT5HRkNfU1REX0Y5NV9ERUw8L2NvZGU+ICg0KSwgPGNvZGU+R0ZDX1NURF9GOTU8L2NvZGU+CisoOCksIDxjb2RlPkdGQ19TVERfRjIwMDM8L2NvZGU+ICgxNiksIDxjb2RlPkdGQ19TVERfR05VPC9jb2RlPiAoMzIpLAorPGNvZGU+R0ZDX1NURF9MRUdBQ1k8L2NvZGU+ICg2NCksIDxjb2RlPkdGQ19TVERfRjIwMDg8L2NvZGU+ICgxMjgpLAorPGNvZGU+R0ZDX1NURF9GMjAwOF9PQlM8L2NvZGU+ICgyNTYpIGFuZCBHRkNfU1REX0YyMDA4X1RTICg1MTIpLiBEZWZhdWx0OgorPGNvZGU+R0ZDX1NURF9GOTVfT0JTIHwgR0ZDX1NURF9GOTVfREVMIHwgR0ZDX1NURF9GOTUgfCBHRkNfU1REX0YyMDAzCit8IEdGQ19TVERfRjIwMDggfCBHRkNfU1REX0YyMDA4X1RTIHwgR0ZDX1NURF9GMjAwOF9PQlMgfCBHRkNfU1REX0Y3NworfCBHRkNfU1REX0dOVSB8IEdGQ19TVERfTEVHQUNZPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPm9wdGlvbjwvdmFyPlsxXSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+U3RhbmRhcmQtd2FybmluZyBmbGFnOyBwcmludHMgYSB3YXJuaW5nIHRvCitzdGFuZGFyZCBlcnJvci4gIERlZmF1bHQ6IDxjb2RlPkdGQ19TVERfRjk1X0RFTCB8IEdGQ19TVERfTEVHQUNZPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPm9wdGlvbjwvdmFyPlsyXSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+SWYgbm9uIHplcm8sIGVuYWJsZSBwZWRhbnRpYyBjaGVja2luZy4gCitEZWZhdWx0OiBvZmYuIAorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjE1JSI+PHZhcj5vcHRpb248L3Zhcj5bM10gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSI3MCUiPlVudXNlZC4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPm9wdGlvbjwvdmFyPls0XSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+SWYgbm9uIHplcm8sIGVuYWJsZSBiYWNrdHJhY2luZyBvbiBydW4tdGltZQorZXJyb3JzLiAgRGVmYXVsdDogb2ZmLiAKK05vdGU6IEluc3RhbGxzIGEgc2lnbmFsIGhhbmRsZXIgYW5kIHJlcXVpcmVzIGNvbW1hbmQtbGluZQoraW5pdGlhbGl6YXRpb24gdXNpbmcgPGNvZGU+X2dmb3J0cmFuX3NldF9hcmdzPC9jb2RlPi4gCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPm9wdGlvbjwvdmFyPls1XSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+SWYgbm9uIHplcm8sIHN1cHBvcnRzIHNpZ25lZCB6ZXJvcy4gCitEZWZhdWx0OiBlbmFibGVkLiAKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNSUiPjx2YXI+b3B0aW9uPC92YXI+WzZdIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNzAlIj5FbmFibGVzIHJ1bi10aW1lIGNoZWNraW5nLiAgUG9zc2libGUgdmFsdWVzCithcmUgKGJpdHdpc2Ugb3ItZWQpOiBHRkNfUlRDSEVDS19CT1VORFMgKDEpLCBHRkNfUlRDSEVDS19BUlJBWV9URU1QUyAoMiksCitHRkNfUlRDSEVDS19SRUNVUlNJT04gKDQpLCBHRkNfUlRDSEVDS19ETyAoMTYpLCBHRkNfUlRDSEVDS19QT0lOVEVSICgzMikuIAorRGVmYXVsdDogZGlzYWJsZWQuCisgICAgIDxicj48L3RkPjwvdHI+PC90YWJsZT4KKworICAgICA8YnI+PGR0PjxlbT5FeGFtcGxlPC9lbT46PGRkPgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIC8qIFVzZSBnZm9ydHJhbiA0LjggZGVmYXVsdCBvcHRpb25zLiAgKi8KKyAgICAgICAgICAgIHN0YXRpYyBpbnQgb3B0aW9uc1tdID0gezY4LCA1MTEsIDAsIDAsIDEsIDEsIDB9OworICAgICAgICAgICAgX2dmb3J0cmFuX3NldF9vcHRpb25zICg3LCAmYW1wO29wdGlvbnMpOworPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9fMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZyZWNvcmRfMDA1Zm1hcmtlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MmFjNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZyZWNvcmRfMDA1Zm1hcmtlci5odG1sCkBAIC0wLDAgKzEsODIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPl9nZm9ydHJhbl9zZXRfcmVjb3JkX21hcmtlciAtIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlcjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtLmh0bWwjTm9uXzAwMmRGb3J0cmFuLU1haW4tUHJvZ3JhbSIgdGl0bGU9Ik5vbi1Gb3J0cmFuIE1haW4gUHJvZ3JhbSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydC5odG1sI2dfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmY29udmVydCIgdGl0bGU9Il9nZm9ydHJhbl9zZXRfY29udmVydCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmZnBlLmh0bWwjZ190XzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUiIHRpdGxlPSJfZ2ZvcnRyYW5fc2V0X2ZwZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK0NvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgYGBGdW5kaW5nIEZyZWUgU29mdHdhcmUnJywgdGhlIEZyb250LUNvdmVyCitUZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKQorKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKK2BgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJfZ2ZvcnRyYW5fc2V0X3JlY29yZF9tYXJrZXIiPjwvYT4KKzxhIG5hbWU9ImdfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZmcGUuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmZwZSI+X2dmb3J0cmFuX3NldF9mcGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmNvbnZlcnQuaHRtbCNnX3RfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmNvbnZlcnQiPl9nZm9ydHJhbl9zZXRfY29udmVydDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik5vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0uaHRtbCNOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtIj5Ob24tRm9ydHJhbiBNYWluIFByb2dyYW08L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj43LjMuNCA8Y29kZT5fZ2ZvcnRyYW5fc2V0X3JlY29yZF9tYXJrZXI8L2NvZGU+ICZtZGFzaDsgU2V0IGxlbmd0aCBvZiByZWNvcmQgbWFya2VyczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXItMzYzIj48L2E+PGEgbmFtZT0iaW5kZXgtbGliZ2ZvcnRyYW4taW5pdGlhbGl6YXRpb25fMDAyYy1zZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyLTM2NCI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPkRlc2NyaXB0aW9uPC9lbT46PGRkPjxjb2RlPl9nZm9ydHJhbl9zZXRfcmVjb3JkX21hcmtlcjwvY29kZT4gc2V0cyB0aGUgbGVuZ3RoIG9mIHJlY29yZCBtYXJrZXJzCitmb3IgdW5mb3JtYXR0ZWQgZmlsZXMuCisKKyAgICAgPGJyPjxkdD48ZW0+U3ludGF4PC9lbT46PGRkPjxjb2RlPnZvaWQgX2dmb3J0cmFuX3NldF9yZWNvcmRfbWFya2VyIChpbnQgdmFsKTwvY29kZT4KKworICAgICA8YnI+PGR0PjxlbT5Bcmd1bWVudHM8L2VtPjo8ZGQ+CisgICAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMTUlIj48dmFyPnZhbDwvdmFyPiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjcwJSI+TGVuZ3RoIG9mIHRoZSByZWNvcmQgbWFya2VyOyB2YWxpZCB2YWx1ZXMKK2FyZSA0IGFuZCA4LiAgRGVmYXVsdCBpcyA0LgorICAgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CisKKyAgICAgPGJyPjxkdD48ZW0+RXhhbXBsZTwvZW0+OjxkZD4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBsaWJnZm9ydHJhbi4gICovCisgICAgICAgICAgICBfZ2ZvcnRyYW5fc2V0X2FyZ3MgKGFyZ2MsIGFyZ3YpOworICAgICAgICAgICAgX2dmb3J0cmFuX3NldF9yZWNvcmRfbWFya2VyICg4KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vaW5kZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9nZm9ydHJhbi9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTU3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ2ZvcnRyYW4vaW5kZXguaHRtbApAQCAtMCwwICsxLDUyMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJUaGUgR05VIEZvcnRyYW4gQ29tcGlsZXIiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9IiNUb3AiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nICJGdW5kaW5nIEZyZWUgU29mdHdhcmUiLCB0aGUgRnJvbnQtQ292ZXIKK1RleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpCisoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorIkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKKyhhKSBUaGUgRlNGJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKworICAgICBBIEdOVSBNYW51YWwKKworKGIpIFRoZSBGU0YncyBCYWNrLUNvdmVyIFRleHQgaXM6CisKKyAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50Li0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxIGNsYXNzPSJzZXR0aXRsZSI+VGhlIEdOVSBGb3J0cmFuIENvbXBpbGVyPC9oMT4KKzxkaXYgY2xhc3M9InNob3J0Y29udGVudHMiPgorPGgyPlNob3J0IENvbnRlbnRzPC9oMj4KKzx1bD4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19Ub3AiPkludHJvZHVjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX0ludHJvZHVjdGlvbiI+MSBJbnRyb2R1Y3Rpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19JbnZva2luZy1HTlUtRm9ydHJhbiI+MiBHTlUgRm9ydHJhbiBDb21tYW5kIE9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19SdW50aW1lIj4zIFJ1bnRpbWU6ICBJbmZsdWVuY2luZyBydW50aW1lIGJlaGF2aW9yIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfRm9ydHJhbi0yMDAzLWFuZC0yMDA4LXN0YXR1cyI+NCBGb3J0cmFuIDIwMDMgYW5kIDIwMDggU3RhdHVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfQ29tcGlsZXItQ2hhcmFjdGVyaXN0aWNzIj41IENvbXBpbGVyIENoYXJhY3RlcmlzdGljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX0V4dGVuc2lvbnMiPjYgRXh0ZW5zaW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX01peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZyI+NyBNaXhlZC1MYW5ndWFnZSBQcm9ncmFtbWluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX0ludHJpbnNpYy1Qcm9jZWR1cmVzIj44IEludHJpbnNpYyBQcm9jZWR1cmVzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfSW50cmluc2ljLU1vZHVsZXMiPjkgSW50cmluc2ljIE1vZHVsZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19Db250cmlidXRpbmciPkNvbnRyaWJ1dGluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX0NvcHlpbmciPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCN0b2NfR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19GdW5kaW5nIj5GdW5kaW5nIEZyZWUgU29mdHdhcmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmRleC5odG1sI3RvY19PcHRpb24tSW5kZXgiPk9wdGlvbiBJbmRleDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwjdG9jX0tleXdvcmQtSW5kZXgiPktleXdvcmQgSW5kZXg8L2E+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKworCisKKyAgIDxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKzxoMj5UYWJsZSBvZiBDb250ZW50czwvaDI+Cis8dWw+Cis8bGk+PGEgbmFtZT0idG9jX1RvcCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPkludHJvZHVjdGlvbjwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfSW50cm9kdWN0aW9uIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPjEgSW50cm9kdWN0aW9uPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkFib3V0LUdOVS1Gb3J0cmFuLmh0bWwjQWJvdXQtR05VLUZvcnRyYW4iPjEuMSBBYm91dCBHTlUgRm9ydHJhbjwvYT4KKzxsaT48YSBocmVmPSJHTlUtRm9ydHJhbi1hbmQtR0NDLmh0bWwjR05VLUZvcnRyYW4tYW5kLUdDQyI+MS4yIEdOVSBGb3J0cmFuIGFuZCBHQ0M8L2E+Cis8bGk+PGEgaHJlZj0iUHJlcHJvY2Vzc2luZy1hbmQtY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbCNQcmVwcm9jZXNzaW5nLWFuZC1jb25kaXRpb25hbC1jb21waWxhdGlvbiI+MS4zIFByZXByb2Nlc3NpbmcgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkdOVS1Gb3J0cmFuLWFuZC1HNzcuaHRtbCNHTlUtRm9ydHJhbi1hbmQtRzc3Ij4xLjQgR05VIEZvcnRyYW4gYW5kIEc3NzwvYT4KKzxsaT48YSBocmVmPSJQcm9qZWN0LVN0YXR1cy5odG1sI1Byb2plY3QtU3RhdHVzIj4xLjUgUHJvamVjdCBTdGF0dXM8L2E+Cis8bGk+PGEgaHJlZj0iU3RhbmRhcmRzLmh0bWwjU3RhbmRhcmRzIj4xLjYgU3RhbmRhcmRzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlZhcnlpbmctTGVuZ3RoLUNoYXJhY3Rlci1TdHJpbmdzLmh0bWwjVmFyeWluZy1MZW5ndGgtQ2hhcmFjdGVyLVN0cmluZ3MiPjEuNi4xIFZhcnlpbmcgTGVuZ3RoIENoYXJhY3RlciBTdHJpbmdzPC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19JbnZva2luZy1HTlUtRm9ydHJhbiIgaHJlZj0iSW52b2tpbmctR05VLUZvcnRyYW4uaHRtbCNJbnZva2luZy1HTlUtRm9ydHJhbiI+MiBHTlUgRm9ydHJhbiBDb21tYW5kIE9wdGlvbnM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT3B0aW9uLVN1bW1hcnkuaHRtbCNPcHRpb24tU3VtbWFyeSI+Mi4xIE9wdGlvbiBzdW1tYXJ5PC9hPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tRGlhbGVjdC1PcHRpb25zLmh0bWwjRm9ydHJhbi1EaWFsZWN0LU9wdGlvbnMiPjIuMiBPcHRpb25zIGNvbnRyb2xsaW5nIEZvcnRyYW4gZGlhbGVjdDwvYT4KKzxsaT48YSBocmVmPSJQcmVwcm9jZXNzaW5nLU9wdGlvbnMuaHRtbCNQcmVwcm9jZXNzaW5nLU9wdGlvbnMiPjIuMyBFbmFibGUgYW5kIGN1c3RvbWl6ZSBwcmVwcm9jZXNzaW5nPC9hPgorPGxpPjxhIGhyZWY9IkVycm9yLWFuZC1XYXJuaW5nLU9wdGlvbnMuaHRtbCNFcnJvci1hbmQtV2FybmluZy1PcHRpb25zIj4yLjQgT3B0aW9ucyB0byByZXF1ZXN0IG9yIHN1cHByZXNzIGVycm9ycyBhbmQgd2FybmluZ3M8L2E+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLU9wdGlvbnMuaHRtbCNEZWJ1Z2dpbmctT3B0aW9ucyI+Mi41IE9wdGlvbnMgZm9yIGRlYnVnZ2luZyB5b3VyIHByb2dyYW0gb3IgR05VIEZvcnRyYW48L2E+Cis8bGk+PGEgaHJlZj0iRGlyZWN0b3J5LU9wdGlvbnMuaHRtbCNEaXJlY3RvcnktT3B0aW9ucyI+Mi42IE9wdGlvbnMgZm9yIGRpcmVjdG9yeSBzZWFyY2g8L2E+Cis8bGk+PGEgaHJlZj0iTGluay1PcHRpb25zLmh0bWwjTGluay1PcHRpb25zIj4yLjcgSW5mbHVlbmNpbmcgdGhlIGxpbmtpbmcgc3RlcDwvYT4KKzxsaT48YSBocmVmPSJSdW50aW1lLU9wdGlvbnMuaHRtbCNSdW50aW1lLU9wdGlvbnMiPjIuOCBJbmZsdWVuY2luZyBydW50aW1lIGJlaGF2aW9yPC9hPgorPGxpPjxhIGhyZWY9IkNvZGUtR2VuLU9wdGlvbnMuaHRtbCNDb2RlLUdlbi1PcHRpb25zIj4yLjkgT3B0aW9ucyBmb3IgY29kZSBnZW5lcmF0aW9uIGNvbnZlbnRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50LVZhcmlhYmxlcy5odG1sI0Vudmlyb25tZW50LVZhcmlhYmxlcyI+Mi4xMCBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYWZmZWN0aW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5nZm9ydHJhbjwvc3Bhbj48L3NhbXA+PC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19SdW50aW1lIiBocmVmPSJSdW50aW1lLmh0bWwjUnVudGltZSI+MyBSdW50aW1lOiAgSW5mbHVlbmNpbmcgcnVudGltZSBiZWhhdmlvciB3aXRoIGVudmlyb25tZW50IHZhcmlhYmxlczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJUTVBESVIuaHRtbCNUTVBESVIiPjMuMSA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5UTVBESVI8L3NwYW4+PC9zYW1wPiZtZGFzaDtEaXJlY3RvcnkgZm9yIHNjcmF0Y2ggZmlsZXM8L2E+Cis8bGk+PGEgaHJlZj0iR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURElOXzAwNWZVTklUIj4zLjIgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0ZPUlRSQU5fU1RESU5fVU5JVDwvc3Bhbj48L3NhbXA+Jm1kYXNoO1VuaXQgbnVtYmVyIGZvciBzdGFuZGFyZCBpbnB1dDwvYT4KKzxsaT48YSBocmVmPSJHRk9SVFJBTl8wMDVmU1RET1VUXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNURE9VVF8wMDVmVU5JVCI+My4zIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX1NURE9VVF9VTklUPC9zcGFuPjwvc2FtcD4mbWRhc2g7VW5pdCBudW1iZXIgZm9yIHN0YW5kYXJkIG91dHB1dDwvYT4KKzxsaT48YSBocmVmPSJHRk9SVFJBTl8wMDVmU1RERVJSXzAwNWZVTklULmh0bWwjR0ZPUlRSQU5fMDA1ZlNUREVSUl8wMDVmVU5JVCI+My40IDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX1NUREVSUl9VTklUPC9zcGFuPjwvc2FtcD4mbWRhc2g7VW5pdCBudW1iZXIgZm9yIHN0YW5kYXJkIGVycm9yPC9hPgorPGxpPjxhIGhyZWY9IkdGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZBTEwuaHRtbCNHRk9SVFJBTl8wMDVmVU5CVUZGRVJFRF8wMDVmQUxMIj4zLjUgPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0ZPUlRSQU5fVU5CVUZGRVJFRF9BTEw8L3NwYW4+PC9zYW1wPiZtZGFzaDtEbyBub3QgYnVmZmVyIEkvTyBvbiBhbGwgdW5pdHM8L2E+Cis8bGk+PGEgaHJlZj0iR0ZPUlRSQU5fMDA1ZlVOQlVGRkVSRURfMDA1ZlBSRUNPTk5FQ1RFRC5odG1sI0dGT1JUUkFOXzAwNWZVTkJVRkZFUkVEXzAwNWZQUkVDT05ORUNURUQiPjMuNiA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HRk9SVFJBTl9VTkJVRkZFUkVEX1BSRUNPTk5FQ1RFRDwvc3Bhbj48L3NhbXA+Jm1kYXNoO0RvIG5vdCBidWZmZXIgSS9PIG9uIHByZWNvbm5lY3RlZCB1bml0czwvYT4KKzxsaT48YSBocmVmPSJHRk9SVFJBTl8wMDVmU0hPV18wMDVmTE9DVVMuaHRtbCNHRk9SVFJBTl8wMDVmU0hPV18wMDVmTE9DVVMiPjMuNyA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HRk9SVFJBTl9TSE9XX0xPQ1VTPC9zcGFuPjwvc2FtcD4mbWRhc2g7U2hvdyBsb2NhdGlvbiBmb3IgcnVudGltZSBlcnJvcnM8L2E+Cis8bGk+PGEgaHJlZj0iR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTLmh0bWwjR0ZPUlRSQU5fMDA1Zk9QVElPTkFMXzAwNWZQTFVTIj4zLjggPHNhbXA+PHNwYW4gY2xhc3M9ImVudiI+R0ZPUlRSQU5fT1BUSU9OQUxfUExVUzwvc3Bhbj48L3NhbXA+Jm1kYXNoO1ByaW50IGxlYWRpbmcgKyB3aGVyZSBwZXJtaXR0ZWQ8L2E+Cis8bGk+PGEgaHJlZj0iR0ZPUlRSQU5fMDA1ZkRFRkFVTFRfMDA1ZlJFQ0wuaHRtbCNHRk9SVFJBTl8wMDVmREVGQVVMVF8wMDVmUkVDTCI+My45IDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX0RFRkFVTFRfUkVDTDwvc3Bhbj48L3NhbXA+Jm1kYXNoO0RlZmF1bHQgcmVjb3JkIGxlbmd0aCBmb3IgbmV3IGZpbGVzPC9hPgorPGxpPjxhIGhyZWY9IkdGT1JUUkFOXzAwNWZMSVNUXzAwNWZTRVBBUkFUT1IuaHRtbCNHRk9SVFJBTl8wMDVmTElTVF8wMDVmU0VQQVJBVE9SIj4zLjEwIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX0xJU1RfU0VQQVJBVE9SPC9zcGFuPjwvc2FtcD4mbWRhc2g7U2VwYXJhdG9yIGZvciBsaXN0IG91dHB1dDwvYT4KKzxsaT48YSBocmVmPSJHRk9SVFJBTl8wMDVmQ09OVkVSVF8wMDVmVU5JVC5odG1sI0dGT1JUUkFOXzAwNWZDT05WRVJUXzAwNWZVTklUIj4zLjExIDxzYW1wPjxzcGFuIGNsYXNzPSJlbnYiPkdGT1JUUkFOX0NPTlZFUlRfVU5JVDwvc3Bhbj48L3NhbXA+Jm1kYXNoO1NldCBlbmRpYW5uZXNzIGZvciB1bmZvcm1hdHRlZCBJL088L2E+Cis8bGk+PGEgaHJlZj0iR0ZPUlRSQU5fMDA1ZkVSUk9SXzAwNWZCQUNLVFJBQ0UuaHRtbCNHRk9SVFJBTl8wMDVmRVJST1JfMDA1ZkJBQ0tUUkFDRSI+My4xMiA8c2FtcD48c3BhbiBjbGFzcz0iZW52Ij5HRk9SVFJBTl9FUlJPUl9CQUNLVFJBQ0U8L3NwYW4+PC9zYW1wPiZtZGFzaDtTaG93IGJhY2t0cmFjZSBvbiBydW4tdGltZSBlcnJvcnM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0ZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMiIGhyZWY9IkZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzIj40IEZvcnRyYW4gMjAwMyBhbmQgMjAwOCBTdGF0dXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iRm9ydHJhbi0yMDAzLXN0YXR1cy5odG1sI0ZvcnRyYW4tMjAwMy1zdGF0dXMiPjQuMSBGb3J0cmFuIDIwMDMgc3RhdHVzPC9hPgorPGxpPjxhIGhyZWY9IkZvcnRyYW4tMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDgtc3RhdHVzIj40LjIgRm9ydHJhbiAyMDA4IHN0YXR1czwvYT4KKzxsaT48YSBocmVmPSJUUy0yOTExMy1zdGF0dXMuaHRtbCNUUy0yOTExMy1zdGF0dXMiPjQuMyBUZWNobmljYWwgU3BlY2lmaWNhdGlvbiAyOTExMyBTdGF0dXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0NvbXBpbGVyLUNoYXJhY3RlcmlzdGljcyIgaHJlZj0iQ29tcGlsZXItQ2hhcmFjdGVyaXN0aWNzLmh0bWwjQ29tcGlsZXItQ2hhcmFjdGVyaXN0aWNzIj41IENvbXBpbGVyIENoYXJhY3RlcmlzdGljczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJLSU5ELVR5cGUtUGFyYW1ldGVycy5odG1sI0tJTkQtVHlwZS1QYXJhbWV0ZXJzIj41LjEgS0lORCBUeXBlIFBhcmFtZXRlcnM8L2E+Cis8bGk+PGEgaHJlZj0iSW50ZXJuYWwtcmVwcmVzZW50YXRpb24tb2YtTE9HSUNBTC12YXJpYWJsZXMuaHRtbCNJbnRlcm5hbC1yZXByZXNlbnRhdGlvbi1vZi1MT0dJQ0FMLXZhcmlhYmxlcyI+NS4yIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIExPR0lDQUwgdmFyaWFibGVzPC9hPgorPGxpPjxhIGhyZWY9IlRocmVhZF8wMDJkc2FmZXR5LW9mLXRoZS1ydW50aW1lLWxpYnJhcnkuaHRtbCNUaHJlYWRfMDAyZHNhZmV0eS1vZi10aGUtcnVudGltZS1saWJyYXJ5Ij41LjMgVGhyZWFkLXNhZmV0eSBvZiB0aGUgcnVudGltZSBsaWJyYXJ5PC9hPgorPGxpPjxhIGhyZWY9IkRhdGEtY29uc2lzdGVuY3ktYW5kLWR1cmFiaWxpdHkuaHRtbCNEYXRhLWNvbnNpc3RlbmN5LWFuZC1kdXJhYmlsaXR5Ij41LjQgRGF0YSBjb25zaXN0ZW5jeSBhbmQgZHVyYWJpbGl0eTwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfRXh0ZW5zaW9ucyIgaHJlZj0iRXh0ZW5zaW9ucy5odG1sI0V4dGVuc2lvbnMiPjYgRXh0ZW5zaW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJFeHRlbnNpb25zLWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1pbXBsZW1lbnRlZC1pbi1HTlUtRm9ydHJhbiI+Ni4xIEV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgaW4gR05VIEZvcnRyYW48L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT2xkXzAwMmRzdHlsZS1raW5kLXNwZWNpZmljYXRpb25zLmh0bWwjT2xkXzAwMmRzdHlsZS1raW5kLXNwZWNpZmljYXRpb25zIj42LjEuMSBPbGQtc3R5bGUga2luZCBzcGVjaWZpY2F0aW9uczwvYT4KKzxsaT48YSBocmVmPSJPbGRfMDAyZHN0eWxlLXZhcmlhYmxlLWluaXRpYWxpemF0aW9uLmh0bWwjT2xkXzAwMmRzdHlsZS12YXJpYWJsZS1pbml0aWFsaXphdGlvbiI+Ni4xLjIgT2xkLXN0eWxlIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkV4dGVuc2lvbnMtdG8tbmFtZWxpc3QuaHRtbCNFeHRlbnNpb25zLXRvLW5hbWVsaXN0Ij42LjEuMyBFeHRlbnNpb25zIHRvIG5hbWVsaXN0PC9hPgorPGxpPjxhIGhyZWY9IlgtZm9ybWF0LWRlc2NyaXB0b3Itd2l0aG91dC1jb3VudC1maWVsZC5odG1sI1gtZm9ybWF0LWRlc2NyaXB0b3Itd2l0aG91dC1jb3VudC1maWVsZCI+Ni4xLjQgPGNvZGU+WDwvY29kZT4gZm9ybWF0IGRlc2NyaXB0b3Igd2l0aG91dCBjb3VudCBmaWVsZDwvYT4KKzxsaT48YSBocmVmPSJDb21tYXMtaW4tRk9STUFULXNwZWNpZmljYXRpb25zLmh0bWwjQ29tbWFzLWluLUZPUk1BVC1zcGVjaWZpY2F0aW9ucyI+Ni4xLjUgQ29tbWFzIGluIDxjb2RlPkZPUk1BVDwvY29kZT4gc3BlY2lmaWNhdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTWlzc2luZy1wZXJpb2QtaW4tRk9STUFULXNwZWNpZmljYXRpb25zLmh0bWwjTWlzc2luZy1wZXJpb2QtaW4tRk9STUFULXNwZWNpZmljYXRpb25zIj42LjEuNiBNaXNzaW5nIHBlcmlvZCBpbiA8Y29kZT5GT1JNQVQ8L2NvZGU+IHNwZWNpZmljYXRpb25zPC9hPgorPGxpPjxhIGhyZWY9IklfMDAyZk8taXRlbS1saXN0cy5odG1sI0lfMDAyZk8taXRlbS1saXN0cyI+Ni4xLjcgSS9PIGl0ZW0gbGlzdHM8L2E+Cis8bGk+PGEgaHJlZj0iXzAwM2Njb2RlXzAwM2VRXzAwM2NfMDAyZmNvZGVfMDAzZS1leHBvbmVudF8wMDJkbGV0dGVyLmh0bWwjXzAwM2Njb2RlXzAwM2VRXzAwM2NfMDAyZmNvZGVfMDAzZS1leHBvbmVudF8wMDJkbGV0dGVyIj42LjEuOCA8Y29kZT5RPC9jb2RlPiBleHBvbmVudC1sZXR0ZXI8L2E+Cis8bGk+PGEgaHJlZj0iQk9aLWxpdGVyYWwtY29uc3RhbnRzLmh0bWwjQk9aLWxpdGVyYWwtY29uc3RhbnRzIj42LjEuOSBCT1ogbGl0ZXJhbCBjb25zdGFudHM8L2E+Cis8bGk+PGEgaHJlZj0iUmVhbC1hcnJheS1pbmRpY2VzLmh0bWwjUmVhbC1hcnJheS1pbmRpY2VzIj42LjEuMTAgUmVhbCBhcnJheSBpbmRpY2VzPC9hPgorPGxpPjxhIGhyZWY9IlVuYXJ5LW9wZXJhdG9ycy5odG1sI1VuYXJ5LW9wZXJhdG9ycyI+Ni4xLjExIFVuYXJ5IG9wZXJhdG9yczwvYT4KKzxsaT48YSBocmVmPSJJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMuaHRtbCNJbXBsaWNpdGx5LWNvbnZlcnQtTE9HSUNBTC1hbmQtSU5URUdFUi12YWx1ZXMiPjYuMS4xMiBJbXBsaWNpdGx5IGNvbnZlcnQgPGNvZGU+TE9HSUNBTDwvY29kZT4gYW5kIDxjb2RlPklOVEVHRVI8L2NvZGU+IHZhbHVlczwvYT4KKzxsaT48YSBocmVmPSJIb2xsZXJpdGgtY29uc3RhbnRzLXN1cHBvcnQuaHRtbCNIb2xsZXJpdGgtY29uc3RhbnRzLXN1cHBvcnQiPjYuMS4xMyBIb2xsZXJpdGggY29uc3RhbnRzIHN1cHBvcnQ8L2E+Cis8bGk+PGEgaHJlZj0iQ3JheS1wb2ludGVycy5odG1sI0NyYXktcG9pbnRlcnMiPjYuMS4xNCBDcmF5IHBvaW50ZXJzPC9hPgorPGxpPjxhIGhyZWY9IkNPTlZFUlQtc3BlY2lmaWVyLmh0bWwjQ09OVkVSVC1zcGVjaWZpZXIiPjYuMS4xNSA8Y29kZT5DT05WRVJUPC9jb2RlPiBzcGVjaWZpZXI8L2E+Cis8bGk+PGEgaHJlZj0iT3Blbk1QLmh0bWwjT3Blbk1QIj42LjEuMTYgT3Blbk1QPC9hPgorPGxpPjxhIGhyZWY9IkFyZ3VtZW50LWxpc3QtZnVuY3Rpb25zLmh0bWwjQXJndW1lbnQtbGlzdC1mdW5jdGlvbnMiPjYuMS4xNyBBcmd1bWVudCBsaXN0IGZ1bmN0aW9ucyA8Y29kZT4lVkFMPC9jb2RlPiwgPGNvZGU+JVJFRjwvY29kZT4gYW5kIDxjb2RlPiVMT0M8L2NvZGU+PC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkV4dGVuc2lvbnMtbm90LWltcGxlbWVudGVkLWluLUdOVS1Gb3J0cmFuLmh0bWwjRXh0ZW5zaW9ucy1ub3QtaW1wbGVtZW50ZWQtaW4tR05VLUZvcnRyYW4iPjYuMiBFeHRlbnNpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiBHTlUgRm9ydHJhbjwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTVFJVQ1RVUkUtYW5kLVJFQ09SRC5odG1sI1NUUlVDVFVSRS1hbmQtUkVDT1JEIj42LjIuMSA8Y29kZT5TVFJVQ1RVUkU8L2NvZGU+IGFuZCA8Y29kZT5SRUNPUkQ8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IkVOQ09ERS1hbmQtREVDT0RFLXN0YXRlbWVudHMuaHRtbCNFTkNPREUtYW5kLURFQ09ERS1zdGF0ZW1lbnRzIj42LjIuMiA8Y29kZT5FTkNPREU8L2NvZGU+IGFuZCA8Y29kZT5ERUNPREU8L2NvZGU+IHN0YXRlbWVudHM8L2E+Cis8bGk+PGEgaHJlZj0iVmFyaWFibGUtRk9STUFULWV4cHJlc3Npb25zLmh0bWwjVmFyaWFibGUtRk9STUFULWV4cHJlc3Npb25zIj42LjIuMyBWYXJpYWJsZSA8Y29kZT5GT1JNQVQ8L2NvZGU+IGV4cHJlc3Npb25zPC9hPgorPGxpPjxhIGhyZWY9IkFsdGVybmF0ZS1jb21wbGV4LWZ1bmN0aW9uLXN5bnRheC5odG1sI0FsdGVybmF0ZS1jb21wbGV4LWZ1bmN0aW9uLXN5bnRheCI+Ni4yLjQgQWx0ZXJuYXRlIGNvbXBsZXggZnVuY3Rpb24gc3ludGF4PC9hPgorPC9saT48L3VsPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19NaXhlZF8wMDJkTGFuZ3VhZ2UtUHJvZ3JhbW1pbmciIGhyZWY9Ik1peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZy5odG1sI01peGVkXzAwMmRMYW5ndWFnZS1Qcm9ncmFtbWluZyI+NyBNaXhlZC1MYW5ndWFnZSBQcm9ncmFtbWluZzwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJJbnRlcm9wZXJhYmlsaXR5LXdpdGgtQy5odG1sI0ludGVyb3BlcmFiaWxpdHktd2l0aC1DIj43LjEgSW50ZXJvcGVyYWJpbGl0eSB3aXRoIEM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iSW50cmluc2ljLVR5cGVzLmh0bWwjSW50cmluc2ljLVR5cGVzIj43LjEuMSBJbnRyaW5zaWMgVHlwZXM8L2E+Cis8bGk+PGEgaHJlZj0iRGVyaXZlZC1UeXBlcy1hbmQtc3RydWN0Lmh0bWwjRGVyaXZlZC1UeXBlcy1hbmQtc3RydWN0Ij43LjEuMiBEZXJpdmVkIFR5cGVzIGFuZCBzdHJ1Y3Q8L2E+Cis8bGk+PGEgaHJlZj0iSW50ZXJvcGVyYWJsZS1HbG9iYWwtVmFyaWFibGVzLmh0bWwjSW50ZXJvcGVyYWJsZS1HbG9iYWwtVmFyaWFibGVzIj43LjEuMyBJbnRlcm9wZXJhYmxlIEdsb2JhbCBWYXJpYWJsZXM8L2E+Cis8bGk+PGEgaHJlZj0iSW50ZXJvcGVyYWJsZS1TdWJyb3V0aW5lcy1hbmQtRnVuY3Rpb25zLmh0bWwjSW50ZXJvcGVyYWJsZS1TdWJyb3V0aW5lcy1hbmQtRnVuY3Rpb25zIj43LjEuNCBJbnRlcm9wZXJhYmxlIFN1YnJvdXRpbmVzIGFuZCBGdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iV29ya2luZy13aXRoLVBvaW50ZXJzLmh0bWwjV29ya2luZy13aXRoLVBvaW50ZXJzIj43LjEuNSBXb3JraW5nIHdpdGggUG9pbnRlcnM8L2E+Cis8bGk+PGEgaHJlZj0iRnVydGhlci1JbnRlcm9wZXJhYmlsaXR5LW9mLUZvcnRyYW4td2l0aC1DLmh0bWwjRnVydGhlci1JbnRlcm9wZXJhYmlsaXR5LW9mLUZvcnRyYW4td2l0aC1DIj43LjEuNiBGdXJ0aGVyIEludGVyb3BlcmFiaWxpdHkgb2YgRm9ydHJhbiB3aXRoIEM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iR05VLUZvcnRyYW4tQ29tcGlsZXItRGlyZWN0aXZlcy5odG1sI0dOVS1Gb3J0cmFuLUNvbXBpbGVyLURpcmVjdGl2ZXMiPjcuMiBHTlUgRm9ydHJhbiBDb21waWxlciBEaXJlY3RpdmVzPC9hPgorPGxpPjxhIGhyZWY9Ik5vbl8wMDJkRm9ydHJhbi1NYWluLVByb2dyYW0uaHRtbCNOb25fMDAyZEZvcnRyYW4tTWFpbi1Qcm9ncmFtIj43LjMgTm9uLUZvcnRyYW4gTWFpbiBQcm9ncmFtPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncy5odG1sI18wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmYXJncyI+Ny4zLjEgPGNvZGU+X2dmb3J0cmFuX3NldF9hcmdzPC9jb2RlPiAmbWRhc2g7IFNhdmUgY29tbWFuZC1saW5lIGFyZ3VtZW50czwvYT4KKzxsaT48YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMuaHRtbCNfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1Zm9wdGlvbnMiPjcuMy4yIDxjb2RlPl9nZm9ydHJhbl9zZXRfb3B0aW9uczwvY29kZT4gJm1kYXNoOyBTZXQgbGlicmFyeSBvcHRpb24gZmxhZ3M8L2E+Cis8bGk+PGEgaHJlZj0iXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZjb252ZXJ0Lmh0bWwjXzAwNWZnZm9ydHJhbl8wMDVmc2V0XzAwNWZjb252ZXJ0Ij43LjMuMyA8Y29kZT5fZ2ZvcnRyYW5fc2V0X2NvbnZlcnQ8L2NvZGU+ICZtZGFzaDsgU2V0IGVuZGlhbiBjb252ZXJzaW9uPC9hPgorPGxpPjxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmcmVjb3JkXzAwNWZtYXJrZXIuaHRtbCNfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZnJlY29yZF8wMDVmbWFya2VyIj43LjMuNCA8Y29kZT5fZ2ZvcnRyYW5fc2V0X3JlY29yZF9tYXJrZXI8L2NvZGU+ICZtZGFzaDsgU2V0IGxlbmd0aCBvZiByZWNvcmQgbWFya2VyczwvYT4KKzxsaT48YSBocmVmPSJfMDA1Zmdmb3J0cmFuXzAwNWZzZXRfMDA1ZmZwZS5odG1sI18wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmZnBlIj43LjMuNSA8Y29kZT5fZ2ZvcnRyYW5fc2V0X2ZwZTwvY29kZT4gJm1kYXNoOyBFbmFibGUgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIHRyYXBzPC9hPgorPGxpPjxhIGhyZWY9Il8wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmbWF4XzAwNWZzdWJyZWNvcmRfMDA1Zmxlbmd0aC5odG1sI18wMDVmZ2ZvcnRyYW5fMDA1ZnNldF8wMDVmbWF4XzAwNWZzdWJyZWNvcmRfMDA1Zmxlbmd0aCI+Ny4zLjYgPGNvZGU+X2dmb3J0cmFuX3NldF9tYXhfc3VicmVjb3JkX2xlbmd0aDwvY29kZT4gJm1kYXNoOyBTZXQgc3VicmVjb3JkIGxlbmd0aDwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfSW50cmluc2ljLVByb2NlZHVyZXMiIGhyZWY9IkludHJpbnNpYy1Qcm9jZWR1cmVzLmh0bWwjSW50cmluc2ljLVByb2NlZHVyZXMiPjggSW50cmluc2ljIFByb2NlZHVyZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iSW50cm9kdWN0aW9uLXRvLUludHJpbnNpY3MuaHRtbCNJbnRyb2R1Y3Rpb24tdG8tSW50cmluc2ljcyI+OC4xIEludHJvZHVjdGlvbiB0byBpbnRyaW5zaWMgcHJvY2VkdXJlczwvYT4KKzxsaT48YSBocmVmPSJBQk9SVC5odG1sI0FCT1JUIj44LjIgPGNvZGU+QUJPUlQ8L2NvZGU+ICZtZGFzaDsgQWJvcnQgdGhlIHByb2dyYW08L2E+Cis8bGk+PGEgaHJlZj0iQUJTLmh0bWwjQUJTIj44LjMgPGNvZGU+QUJTPC9jb2RlPiAmbWRhc2g7IEFic29sdXRlIHZhbHVlPC9hPgorPGxpPjxhIGhyZWY9IkFDQ0VTUy5odG1sI0FDQ0VTUyI+OC40IDxjb2RlPkFDQ0VTUzwvY29kZT4gJm1kYXNoOyBDaGVja3MgZmlsZSBhY2Nlc3MgbW9kZXM8L2E+Cis8bGk+PGEgaHJlZj0iQUNIQVIuaHRtbCNBQ0hBUiI+OC41IDxjb2RlPkFDSEFSPC9jb2RlPiAmbWRhc2g7IENoYXJhY3RlciBpbiA8YWNyb255bT5BU0NJSTwvYWNyb255bT4gY29sbGF0aW5nIHNlcXVlbmNlPC9hPgorPGxpPjxhIGhyZWY9IkFDT1MuaHRtbCNBQ09TIj44LjYgPGNvZGU+QUNPUzwvY29kZT4gJm1kYXNoOyBBcmNjb3NpbmUgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQUNPU0guaHRtbCNBQ09TSCI+OC43IDxjb2RlPkFDT1NIPC9jb2RlPiAmbWRhc2g7IEludmVyc2UgaHlwZXJib2xpYyBjb3NpbmUgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQURKVVNUTC5odG1sI0FESlVTVEwiPjguOCA8Y29kZT5BREpVU1RMPC9jb2RlPiAmbWRhc2g7IExlZnQgYWRqdXN0IGEgc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9IkFESlVTVFIuaHRtbCNBREpVU1RSIj44LjkgPGNvZGU+QURKVVNUUjwvY29kZT4gJm1kYXNoOyBSaWdodCBhZGp1c3QgYSBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0iQUlNQUcuaHRtbCNBSU1BRyI+OC4xMCA8Y29kZT5BSU1BRzwvY29kZT4gJm1kYXNoOyBJbWFnaW5hcnkgcGFydCBvZiBjb21wbGV4IG51bWJlcjwvYT4KKzxsaT48YSBocmVmPSJBSU5ULmh0bWwjQUlOVCI+OC4xMSA8Y29kZT5BSU5UPC9jb2RlPiAmbWRhc2g7IFRydW5jYXRlIHRvIGEgd2hvbGUgbnVtYmVyPC9hPgorPGxpPjxhIGhyZWY9IkFMQVJNLmh0bWwjQUxBUk0iPjguMTIgPGNvZGU+QUxBUk08L2NvZGU+ICZtZGFzaDsgRXhlY3V0ZSBhIHJvdXRpbmUgYWZ0ZXIgYSBnaXZlbiBkZWxheTwvYT4KKzxsaT48YSBocmVmPSJBTEwuaHRtbCNBTEwiPjguMTMgPGNvZGU+QUxMPC9jb2RlPiAmbWRhc2g7IEFsbCB2YWx1ZXMgaW4gPHZhcj5NQVNLPC92YXI+IGFsb25nIDx2YXI+RElNPC92YXI+IGFyZSB0cnVlPC9hPgorPGxpPjxhIGhyZWY9IkFMTE9DQVRFRC5odG1sI0FMTE9DQVRFRCI+OC4xNCA8Y29kZT5BTExPQ0FURUQ8L2NvZGU+ICZtZGFzaDsgU3RhdHVzIG9mIGFuIGFsbG9jYXRhYmxlIGVudGl0eTwvYT4KKzxsaT48YSBocmVmPSJBTkQuaHRtbCNBTkQiPjguMTUgPGNvZGU+QU5EPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgbG9naWNhbCBBTkQ8L2E+Cis8bGk+PGEgaHJlZj0iQU5JTlQuaHRtbCNBTklOVCI+OC4xNiA8Y29kZT5BTklOVDwvY29kZT4gJm1kYXNoOyBOZWFyZXN0IHdob2xlIG51bWJlcjwvYT4KKzxsaT48YSBocmVmPSJBTlkuaHRtbCNBTlkiPjguMTcgPGNvZGU+QU5ZPC9jb2RlPiAmbWRhc2g7IEFueSB2YWx1ZSBpbiA8dmFyPk1BU0s8L3Zhcj4gYWxvbmcgPHZhcj5ESU08L3Zhcj4gaXMgdHJ1ZTwvYT4KKzxsaT48YSBocmVmPSJBU0lOLmh0bWwjQVNJTiI+OC4xOCA8Y29kZT5BU0lOPC9jb2RlPiAmbWRhc2g7IEFyY3NpbmUgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQVNJTkguaHRtbCNBU0lOSCI+OC4xOSA8Y29kZT5BU0lOSDwvY29kZT4gJm1kYXNoOyBJbnZlcnNlIGh5cGVyYm9saWMgc2luZSBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJBU1NPQ0lBVEVELmh0bWwjQVNTT0NJQVRFRCI+OC4yMCA8Y29kZT5BU1NPQ0lBVEVEPC9jb2RlPiAmbWRhc2g7IFN0YXR1cyBvZiBhIHBvaW50ZXIgb3IgcG9pbnRlci90YXJnZXQgcGFpcjwvYT4KKzxsaT48YSBocmVmPSJBVEFOLmh0bWwjQVRBTiI+OC4yMSA8Y29kZT5BVEFOPC9jb2RlPiAmbWRhc2g7IEFyY3RhbmdlbnQgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQVRBTjIuaHRtbCNBVEFOMiI+OC4yMiA8Y29kZT5BVEFOMjwvY29kZT4gJm1kYXNoOyBBcmN0YW5nZW50IGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkFUQU5ILmh0bWwjQVRBTkgiPjguMjMgPGNvZGU+QVRBTkg8L2NvZGU+ICZtZGFzaDsgSW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQVRPTUlDXzAwNWZERUZJTkUuaHRtbCNBVE9NSUNfMDA1ZkRFRklORSI+OC4yNCA8Y29kZT5BVE9NSUNfREVGSU5FPC9jb2RlPiAmbWRhc2g7IFNldHRpbmcgYSB2YXJpYWJsZSBhdG9taWNhbGx5PC9hPgorPGxpPjxhIGhyZWY9IkFUT01JQ18wMDVmUkVGLmh0bWwjQVRPTUlDXzAwNWZSRUYiPjguMjUgPGNvZGU+QVRPTUlDX1JFRjwvY29kZT4gJm1kYXNoOyBPYnRhaW5pbmcgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgYXRvbWljYWxseTwvYT4KKzxsaT48YSBocmVmPSJCQUNLVFJBQ0UuaHRtbCNCQUNLVFJBQ0UiPjguMjYgPGNvZGU+QkFDS1RSQUNFPC9jb2RlPiAmbWRhc2g7IFNob3cgYSBiYWNrdHJhY2U8L2E+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZKMC5odG1sI0JFU1NFTF8wMDVmSjAiPjguMjcgPGNvZGU+QkVTU0VMX0owPC9jb2RlPiAmbWRhc2g7IEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZCBvZiBvcmRlciAwPC9hPgorPGxpPjxhIGhyZWY9IkJFU1NFTF8wMDVmSjEuaHRtbCNCRVNTRUxfMDA1ZkoxIj44LjI4IDxjb2RlPkJFU1NFTF9KMTwvY29kZT4gJm1kYXNoOyBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQgb2Ygb3JkZXIgMTwvYT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZkpOLmh0bWwjQkVTU0VMXzAwNWZKTiI+OC4yOSA8Y29kZT5CRVNTRUxfSk48L2NvZGU+ICZtZGFzaDsgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kPC9hPgorPGxpPjxhIGhyZWY9IkJFU1NFTF8wMDVmWTAuaHRtbCNCRVNTRUxfMDA1ZlkwIj44LjMwIDxjb2RlPkJFU1NFTF9ZMDwvY29kZT4gJm1kYXNoOyBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kIG9mIG9yZGVyIDA8L2E+Cis8bGk+PGEgaHJlZj0iQkVTU0VMXzAwNWZZMS5odG1sI0JFU1NFTF8wMDVmWTEiPjguMzEgPGNvZGU+QkVTU0VMX1kxPC9jb2RlPiAmbWRhc2g7IEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQgb2Ygb3JkZXIgMTwvYT4KKzxsaT48YSBocmVmPSJCRVNTRUxfMDA1ZllOLmh0bWwjQkVTU0VMXzAwNWZZTiI+OC4zMiA8Y29kZT5CRVNTRUxfWU48L2NvZGU+ICZtZGFzaDsgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZDwvYT4KKzxsaT48YSBocmVmPSJCR0UuaHRtbCNCR0UiPjguMzMgPGNvZGU+QkdFPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvPC9hPgorPGxpPjxhIGhyZWY9IkJHVC5odG1sI0JHVCI+OC4zNCA8Y29kZT5CR1Q8L2NvZGU+ICZtZGFzaDsgQml0d2lzZSBncmVhdGVyIHRoYW48L2E+Cis8bGk+PGEgaHJlZj0iQklUXzAwNWZTSVpFLmh0bWwjQklUXzAwNWZTSVpFIj44LjM1IDxjb2RlPkJJVF9TSVpFPC9jb2RlPiAmbWRhc2g7IEJpdCBzaXplIGlucXVpcnkgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQkxFLmh0bWwjQkxFIj44LjM2IDxjb2RlPkJMRTwvY29kZT4gJm1kYXNoOyBCaXR3aXNlIGxlc3MgdGhhbiBvciBlcXVhbCB0bzwvYT4KKzxsaT48YSBocmVmPSJCTFQuaHRtbCNCTFQiPjguMzcgPGNvZGU+QkxUPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgbGVzcyB0aGFuPC9hPgorPGxpPjxhIGhyZWY9IkJURVNULmh0bWwjQlRFU1QiPjguMzggPGNvZGU+QlRFU1Q8L2NvZGU+ICZtZGFzaDsgQml0IHRlc3QgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQ18wMDVmQVNTT0NJQVRFRC5odG1sI0NfMDA1ZkFTU09DSUFURUQiPjguMzkgPGNvZGU+Q19BU1NPQ0lBVEVEPC9jb2RlPiAmbWRhc2g7IFN0YXR1cyBvZiBhIEMgcG9pbnRlcjwvYT4KKzxsaT48YSBocmVmPSJDXzAwNWZGXzAwNWZQT0lOVEVSLmh0bWwjQ18wMDVmRl8wMDVmUE9JTlRFUiI+OC40MCA8Y29kZT5DX0ZfUE9JTlRFUjwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IEMgaW50byBGb3J0cmFuIHBvaW50ZXI8L2E+Cis8bGk+PGEgaHJlZj0iQ18wMDVmRl8wMDVmUFJPQ1BPSU5URVIuaHRtbCNDXzAwNWZGXzAwNWZQUk9DUE9JTlRFUiI+OC40MSA8Y29kZT5DX0ZfUFJPQ1BPSU5URVI8L2NvZGU+ICZtZGFzaDsgQ29udmVydCBDIGludG8gRm9ydHJhbiBwcm9jZWR1cmUgcG9pbnRlcjwvYT4KKzxsaT48YSBocmVmPSJDXzAwNWZGVU5MT0MuaHRtbCNDXzAwNWZGVU5MT0MiPjguNDIgPGNvZGU+Q19GVU5MT0M8L2NvZGU+ICZtZGFzaDsgT2J0YWluIHRoZSBDIGFkZHJlc3Mgb2YgYSBwcm9jZWR1cmU8L2E+Cis8bGk+PGEgaHJlZj0iQ18wMDVmTE9DLmh0bWwjQ18wMDVmTE9DIj44LjQzIDxjb2RlPkNfTE9DPC9jb2RlPiAmbWRhc2g7IE9idGFpbiB0aGUgQyBhZGRyZXNzIG9mIGFuIG9iamVjdDwvYT4KKzxsaT48YSBocmVmPSJDXzAwNWZTSVpFT0YuaHRtbCNDXzAwNWZTSVpFT0YiPjguNDQgPGNvZGU+Q19TSVpFT0Y8L2NvZGU+ICZtZGFzaDsgU2l6ZSBpbiBieXRlcyBvZiBhbiBleHByZXNzaW9uPC9hPgorPGxpPjxhIGhyZWY9IkNFSUxJTkcuaHRtbCNDRUlMSU5HIj44LjQ1IDxjb2RlPkNFSUxJTkc8L2NvZGU+ICZtZGFzaDsgSW50ZWdlciBjZWlsaW5nIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkNIQVIuaHRtbCNDSEFSIj44LjQ2IDxjb2RlPkNIQVI8L2NvZGU+ICZtZGFzaDsgQ2hhcmFjdGVyIGNvbnZlcnNpb24gZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQ0hESVIuaHRtbCNDSERJUiI+OC40NyA8Y29kZT5DSERJUjwvY29kZT4gJm1kYXNoOyBDaGFuZ2Ugd29ya2luZyBkaXJlY3Rvcnk8L2E+Cis8bGk+PGEgaHJlZj0iQ0hNT0QuaHRtbCNDSE1PRCI+OC40OCA8Y29kZT5DSE1PRDwvY29kZT4gJm1kYXNoOyBDaGFuZ2UgYWNjZXNzIHBlcm1pc3Npb25zIG9mIGZpbGVzPC9hPgorPGxpPjxhIGhyZWY9IkNNUExYLmh0bWwjQ01QTFgiPjguNDkgPGNvZGU+Q01QTFg8L2NvZGU+ICZtZGFzaDsgQ29tcGxleCBjb252ZXJzaW9uIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkNPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVC5odG1sI0NPTU1BTkRfMDA1ZkFSR1VNRU5UXzAwNWZDT1VOVCI+OC41MCA8Y29kZT5DT01NQU5EX0FSR1VNRU5UX0NPVU5UPC9jb2RlPiAmbWRhc2g7IEdldCBudW1iZXIgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50czwvYT4KKzxsaT48YSBocmVmPSJDT01QSUxFUl8wMDVmT1BUSU9OUy5odG1sI0NPTVBJTEVSXzAwNWZPUFRJT05TIj44LjUxIDxjb2RlPkNPTVBJTEVSX09QVElPTlM8L2NvZGU+ICZtZGFzaDsgT3B0aW9ucyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyPC9hPgorPGxpPjxhIGhyZWY9IkNPTVBJTEVSXzAwNWZWRVJTSU9OLmh0bWwjQ09NUElMRVJfMDA1ZlZFUlNJT04iPjguNTIgPGNvZGU+Q09NUElMRVJfVkVSU0lPTjwvY29kZT4gJm1kYXNoOyBDb21waWxlciB2ZXJzaW9uIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJDT01QTEVYLmh0bWwjQ09NUExFWCI+OC41MyA8Y29kZT5DT01QTEVYPC9jb2RlPiAmbWRhc2g7IENvbXBsZXggY29udmVyc2lvbiBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJDT05KRy5odG1sI0NPTkpHIj44LjU0IDxjb2RlPkNPTkpHPC9jb2RlPiAmbWRhc2g7IENvbXBsZXggY29uanVnYXRlIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkNPUy5odG1sI0NPUyI+OC41NSA8Y29kZT5DT1M8L2NvZGU+ICZtZGFzaDsgQ29zaW5lIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkNPU0guaHRtbCNDT1NIIj44LjU2IDxjb2RlPkNPU0g8L2NvZGU+ICZtZGFzaDsgSHlwZXJib2xpYyBjb3NpbmUgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iQ09VTlQuaHRtbCNDT1VOVCI+OC41NyA8Y29kZT5DT1VOVDwvY29kZT4gJm1kYXNoOyBDb3VudCBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJDUFVfMDA1ZlRJTUUuaHRtbCNDUFVfMDA1ZlRJTUUiPjguNTggPGNvZGU+Q1BVX1RJTUU8L2NvZGU+ICZtZGFzaDsgQ1BVIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzPC9hPgorPGxpPjxhIGhyZWY9IkNTSElGVC5odG1sI0NTSElGVCI+OC41OSA8Y29kZT5DU0hJRlQ8L2NvZGU+ICZtZGFzaDsgQ2lyY3VsYXIgc2hpZnQgZWxlbWVudHMgb2YgYW4gYXJyYXk8L2E+Cis8bGk+PGEgaHJlZj0iQ1RJTUUuaHRtbCNDVElNRSI+OC42MCA8Y29kZT5DVElNRTwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IGEgdGltZSBpbnRvIGEgc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9IkRBVEVfMDA1ZkFORF8wMDVmVElNRS5odG1sI0RBVEVfMDA1ZkFORF8wMDVmVElNRSI+OC42MSA8Y29kZT5EQVRFX0FORF9USU1FPC9jb2RlPiAmbWRhc2g7IERhdGUgYW5kIHRpbWUgc3Vicm91dGluZTwvYT4KKzxsaT48YSBocmVmPSJEQkxFLmh0bWwjREJMRSI+OC42MiA8Y29kZT5EQkxFPC9jb2RlPiAmbWRhc2g7IERvdWJsZSBjb252ZXJzaW9uIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkRDTVBMWC5odG1sI0RDTVBMWCI+OC42MyA8Y29kZT5EQ01QTFg8L2NvZGU+ICZtZGFzaDsgRG91YmxlIGNvbXBsZXggY29udmVyc2lvbiBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJESUdJVFMuaHRtbCNESUdJVFMiPjguNjQgPGNvZGU+RElHSVRTPC9jb2RlPiAmbWRhc2g7IFNpZ25pZmljYW50IGJpbmFyeSBkaWdpdHMgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iRElNLmh0bWwjRElNIj44LjY1IDxjb2RlPkRJTTwvY29kZT4gJm1kYXNoOyBQb3NpdGl2ZSBkaWZmZXJlbmNlPC9hPgorPGxpPjxhIGhyZWY9IkRPVF8wMDVmUFJPRFVDVC5odG1sI0RPVF8wMDVmUFJPRFVDVCI+OC42NiA8Y29kZT5ET1RfUFJPRFVDVDwvY29kZT4gJm1kYXNoOyBEb3QgcHJvZHVjdCBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJEUFJPRC5odG1sI0RQUk9EIj44LjY3IDxjb2RlPkRQUk9EPC9jb2RlPiAmbWRhc2g7IERvdWJsZSBwcm9kdWN0IGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkRSRUFMLmh0bWwjRFJFQUwiPjguNjggPGNvZGU+RFJFQUw8L2NvZGU+ICZtZGFzaDsgRG91YmxlIHJlYWwgcGFydCBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJEU0hJRlRMLmh0bWwjRFNISUZUTCI+OC42OSA8Y29kZT5EU0hJRlRMPC9jb2RlPiAmbWRhc2g7IENvbWJpbmVkIGxlZnQgc2hpZnQ8L2E+Cis8bGk+PGEgaHJlZj0iRFNISUZUUi5odG1sI0RTSElGVFIiPjguNzAgPGNvZGU+RFNISUZUUjwvY29kZT4gJm1kYXNoOyBDb21iaW5lZCByaWdodCBzaGlmdDwvYT4KKzxsaT48YSBocmVmPSJEVElNRS5odG1sI0RUSU1FIj44LjcxIDxjb2RlPkRUSU1FPC9jb2RlPiAmbWRhc2g7IEV4ZWN1dGlvbiB0aW1lIHN1YnJvdXRpbmUgKG9yIGZ1bmN0aW9uKTwvYT4KKzxsaT48YSBocmVmPSJFT1NISUZULmh0bWwjRU9TSElGVCI+OC43MiA8Y29kZT5FT1NISUZUPC9jb2RlPiAmbWRhc2g7IEVuZC1vZmYgc2hpZnQgZWxlbWVudHMgb2YgYW4gYXJyYXk8L2E+Cis8bGk+PGEgaHJlZj0iRVBTSUxPTi5odG1sI0VQU0lMT04iPjguNzMgPGNvZGU+RVBTSUxPTjwvY29kZT4gJm1kYXNoOyBFcHNpbG9uIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkVSRi5odG1sI0VSRiI+OC43NCA8Y29kZT5FUkY8L2NvZGU+ICZtZGFzaDsgRXJyb3IgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iRVJGQy5odG1sI0VSRkMiPjguNzUgPGNvZGU+RVJGQzwvY29kZT4gJm1kYXNoOyBFcnJvciBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJFUkZDXzAwNWZTQ0FMRUQuaHRtbCNFUkZDXzAwNWZTQ0FMRUQiPjguNzYgPGNvZGU+RVJGQ19TQ0FMRUQ8L2NvZGU+ICZtZGFzaDsgRXJyb3IgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iRVRJTUUuaHRtbCNFVElNRSI+OC43NyA8Y29kZT5FVElNRTwvY29kZT4gJm1kYXNoOyBFeGVjdXRpb24gdGltZSBzdWJyb3V0aW5lIChvciBmdW5jdGlvbik8L2E+Cis8bGk+PGEgaHJlZj0iRVhFQ1VURV8wMDVmQ09NTUFORF8wMDVmTElORS5odG1sI0VYRUNVVEVfMDA1ZkNPTU1BTkRfMDA1ZkxJTkUiPjguNzggPGNvZGU+RVhFQ1VURV9DT01NQU5EX0xJTkU8L2NvZGU+ICZtZGFzaDsgRXhlY3V0ZSBhIHNoZWxsIGNvbW1hbmQ8L2E+Cis8bGk+PGEgaHJlZj0iRVhJVC5odG1sI0VYSVQiPjguNzkgPGNvZGU+RVhJVDwvY29kZT4gJm1kYXNoOyBFeGl0IHRoZSBwcm9ncmFtIHdpdGggc3RhdHVzLjwvYT4KKzxsaT48YSBocmVmPSJFWFAuaHRtbCNFWFAiPjguODAgPGNvZGU+RVhQPC9jb2RlPiAmbWRhc2g7IEV4cG9uZW50aWFsIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkVYUE9ORU5ULmh0bWwjRVhQT05FTlQiPjguODEgPGNvZGU+RVhQT05FTlQ8L2NvZGU+ICZtZGFzaDsgRXhwb25lbnQgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iRVhURU5EU18wMDVmVFlQRV8wMDVmT0YuaHRtbCNFWFRFTkRTXzAwNWZUWVBFXzAwNWZPRiI+OC44MiA8Y29kZT5FWFRFTkRTX1RZUEVfT0Y8L2NvZGU+ICZtZGFzaDsgIFF1ZXJ5IGR5bmFtaWMgdHlwZSBmb3IgZXh0ZW5zaW9uPC9hPgorPGxpPjxhIGhyZWY9IkZEQVRFLmh0bWwjRkRBVEUiPjguODMgPGNvZGU+RkRBVEU8L2NvZGU+ICZtZGFzaDsgR2V0IHRoZSBjdXJyZW50IHRpbWUgYXMgYSBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0iRkdFVC5odG1sI0ZHRVQiPjguODQgPGNvZGU+RkdFVDwvY29kZT4gJm1kYXNoOyBSZWFkIGEgc2luZ2xlIGNoYXJhY3RlciBpbiBzdHJlYW0gbW9kZSBmcm9tIHN0ZGluPC9hPgorPGxpPjxhIGhyZWY9IkZHRVRDLmh0bWwjRkdFVEMiPjguODUgPGNvZGU+RkdFVEM8L2NvZGU+ICZtZGFzaDsgUmVhZCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gc3RyZWFtIG1vZGU8L2E+Cis8bGk+PGEgaHJlZj0iRkxPT1IuaHRtbCNGTE9PUiI+OC44NiA8Y29kZT5GTE9PUjwvY29kZT4gJm1kYXNoOyBJbnRlZ2VyIGZsb29yIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkZMVVNILmh0bWwjRkxVU0giPjguODcgPGNvZGU+RkxVU0g8L2NvZGU+ICZtZGFzaDsgRmx1c2ggSS9PIHVuaXQocyk8L2E+Cis8bGk+PGEgaHJlZj0iRk5VTS5odG1sI0ZOVU0iPjguODggPGNvZGU+Rk5VTTwvY29kZT4gJm1kYXNoOyBGaWxlIG51bWJlciBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJGUFVULmh0bWwjRlBVVCI+OC44OSA8Y29kZT5GUFVUPC9jb2RlPiAmbWRhc2g7IFdyaXRlIGEgc2luZ2xlIGNoYXJhY3RlciBpbiBzdHJlYW0gbW9kZSB0byBzdGRvdXQ8L2E+Cis8bGk+PGEgaHJlZj0iRlBVVEMuaHRtbCNGUFVUQyI+OC45MCA8Y29kZT5GUFVUQzwvY29kZT4gJm1kYXNoOyBXcml0ZSBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gc3RyZWFtIG1vZGU8L2E+Cis8bGk+PGEgaHJlZj0iRlJBQ1RJT04uaHRtbCNGUkFDVElPTiI+OC45MSA8Y29kZT5GUkFDVElPTjwvY29kZT4gJm1kYXNoOyBGcmFjdGlvbmFsIHBhcnQgb2YgdGhlIG1vZGVsIHJlcHJlc2VudGF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkZSRUUuaHRtbCNGUkVFIj44LjkyIDxjb2RlPkZSRUU8L2NvZGU+ICZtZGFzaDsgRnJlZXMgbWVtb3J5PC9hPgorPGxpPjxhIGhyZWY9IkZTRUVLLmh0bWwjRlNFRUsiPjguOTMgPGNvZGU+RlNFRUs8L2NvZGU+ICZtZGFzaDsgTG93IGxldmVsIGZpbGUgcG9zaXRpb25pbmcgc3Vicm91dGluZTwvYT4KKzxsaT48YSBocmVmPSJGU1RBVC5odG1sI0ZTVEFUIj44Ljk0IDxjb2RlPkZTVEFUPC9jb2RlPiAmbWRhc2g7IEdldCBmaWxlIHN0YXR1czwvYT4KKzxsaT48YSBocmVmPSJGVEVMTC5odG1sI0ZURUxMIj44Ljk1IDxjb2RlPkZURUxMPC9jb2RlPiAmbWRhc2g7IEN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkdBTU1BLmh0bWwjR0FNTUEiPjguOTYgPGNvZGU+R0FNTUE8L2NvZGU+ICZtZGFzaDsgR2FtbWEgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iR0VSUk9SLmh0bWwjR0VSUk9SIj44Ljk3IDxjb2RlPkdFUlJPUjwvY29kZT4gJm1kYXNoOyBHZXQgbGFzdCBzeXN0ZW0gZXJyb3IgbWVzc2FnZTwvYT4KKzxsaT48YSBocmVmPSJHRVRBUkcuaHRtbCNHRVRBUkciPjguOTggPGNvZGU+R0VUQVJHPC9jb2RlPiAmbWRhc2g7IEdldCBjb21tYW5kIGxpbmUgYXJndW1lbnRzPC9hPgorPGxpPjxhIGhyZWY9IkdFVF8wMDVmQ09NTUFORC5odG1sI0dFVF8wMDVmQ09NTUFORCI+OC45OSA8Y29kZT5HRVRfQ09NTUFORDwvY29kZT4gJm1kYXNoOyBHZXQgdGhlIGVudGlyZSBjb21tYW5kIGxpbmU8L2E+Cis8bGk+PGEgaHJlZj0iR0VUXzAwNWZDT01NQU5EXzAwNWZBUkdVTUVOVC5odG1sI0dFVF8wMDVmQ09NTUFORF8wMDVmQVJHVU1FTlQiPjguMTAwIDxjb2RlPkdFVF9DT01NQU5EX0FSR1VNRU5UPC9jb2RlPiAmbWRhc2g7IEdldCBjb21tYW5kIGxpbmUgYXJndW1lbnRzPC9hPgorPGxpPjxhIGhyZWY9IkdFVENXRC5odG1sI0dFVENXRCI+OC4xMDEgPGNvZGU+R0VUQ1dEPC9jb2RlPiAmbWRhc2g7IEdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5PC9hPgorPGxpPjxhIGhyZWY9IkdFVEVOVi5odG1sI0dFVEVOViI+OC4xMDIgPGNvZGU+R0VURU5WPC9jb2RlPiAmbWRhc2g7IEdldCBhbiBlbnZpcm9ubWVudGFsIHZhcmlhYmxlPC9hPgorPGxpPjxhIGhyZWY9IkdFVF8wMDVmRU5WSVJPTk1FTlRfMDA1ZlZBUklBQkxFLmh0bWwjR0VUXzAwNWZFTlZJUk9OTUVOVF8wMDVmVkFSSUFCTEUiPjguMTAzIDxjb2RlPkdFVF9FTlZJUk9OTUVOVF9WQVJJQUJMRTwvY29kZT4gJm1kYXNoOyBHZXQgYW4gZW52aXJvbm1lbnRhbCB2YXJpYWJsZTwvYT4KKzxsaT48YSBocmVmPSJHRVRHSUQuaHRtbCNHRVRHSUQiPjguMTA0IDxjb2RlPkdFVEdJRDwvY29kZT4gJm1kYXNoOyBHcm91cCBJRCBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJHRVRMT0cuaHRtbCNHRVRMT0ciPjguMTA1IDxjb2RlPkdFVExPRzwvY29kZT4gJm1kYXNoOyBHZXQgbG9naW4gbmFtZTwvYT4KKzxsaT48YSBocmVmPSJHRVRQSUQuaHRtbCNHRVRQSUQiPjguMTA2IDxjb2RlPkdFVFBJRDwvY29kZT4gJm1kYXNoOyBQcm9jZXNzIElEIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkdFVFVJRC5odG1sI0dFVFVJRCI+OC4xMDcgPGNvZGU+R0VUVUlEPC9jb2RlPiAmbWRhc2g7IFVzZXIgSUQgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iR01USU1FLmh0bWwjR01USU1FIj44LjEwOCA8Y29kZT5HTVRJTUU8L2NvZGU+ICZtZGFzaDsgQ29udmVydCB0aW1lIHRvIEdNVCBpbmZvPC9hPgorPGxpPjxhIGhyZWY9IkhPU1ROTS5odG1sI0hPU1ROTSI+OC4xMDkgPGNvZGU+SE9TVE5NPC9jb2RlPiAmbWRhc2g7IEdldCBzeXN0ZW0gaG9zdCBuYW1lPC9hPgorPGxpPjxhIGhyZWY9IkhVR0UuaHRtbCNIVUdFIj44LjExMCA8Y29kZT5IVUdFPC9jb2RlPiAmbWRhc2g7IExhcmdlc3QgbnVtYmVyIG9mIGEga2luZDwvYT4KKzxsaT48YSBocmVmPSJIWVBPVC5odG1sI0hZUE9UIj44LjExMSA8Y29kZT5IWVBPVDwvY29kZT4gJm1kYXNoOyBFdWNsaWRlYW4gZGlzdGFuY2UgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iSUFDSEFSLmh0bWwjSUFDSEFSIj44LjExMiA8Y29kZT5JQUNIQVI8L2NvZGU+ICZtZGFzaDsgQ29kZSBpbiA8YWNyb255bT5BU0NJSTwvYWNyb255bT4gY29sbGF0aW5nIHNlcXVlbmNlPC9hPgorPGxpPjxhIGhyZWY9IklBTEwuaHRtbCNJQUxMIj44LjExMyA8Y29kZT5JQUxMPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgQU5EIG9mIGFycmF5IGVsZW1lbnRzPC9hPgorPGxpPjxhIGhyZWY9IklBTkQuaHRtbCNJQU5EIj44LjExNCA8Y29kZT5JQU5EPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgbG9naWNhbCBhbmQ8L2E+Cis8bGk+PGEgaHJlZj0iSUFOWS5odG1sI0lBTlkiPjguMTE1IDxjb2RlPklBTlk8L2NvZGU+ICZtZGFzaDsgQml0d2lzZSBPUiBvZiBhcnJheSBlbGVtZW50czwvYT4KKzxsaT48YSBocmVmPSJJQVJHQy5odG1sI0lBUkdDIj44LjExNiA8Y29kZT5JQVJHQzwvY29kZT4gJm1kYXNoOyBHZXQgdGhlIG51bWJlciBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzPC9hPgorPGxpPjxhIGhyZWY9IklCQ0xSLmh0bWwjSUJDTFIiPjguMTE3IDxjb2RlPklCQ0xSPC9jb2RlPiAmbWRhc2g7IENsZWFyIGJpdDwvYT4KKzxsaT48YSBocmVmPSJJQklUUy5odG1sI0lCSVRTIj44LjExOCA8Y29kZT5JQklUUzwvY29kZT4gJm1kYXNoOyBCaXQgZXh0cmFjdGlvbjwvYT4KKzxsaT48YSBocmVmPSJJQlNFVC5odG1sI0lCU0VUIj44LjExOSA8Y29kZT5JQlNFVDwvY29kZT4gJm1kYXNoOyBTZXQgYml0PC9hPgorPGxpPjxhIGhyZWY9IklDSEFSLmh0bWwjSUNIQVIiPjguMTIwIDxjb2RlPklDSEFSPC9jb2RlPiAmbWRhc2g7IENoYXJhY3Rlci10by1pbnRlZ2VyIGNvbnZlcnNpb24gZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iSURBVEUuaHRtbCNJREFURSI+OC4xMjEgPGNvZGU+SURBVEU8L2NvZGU+ICZtZGFzaDsgR2V0IGN1cnJlbnQgbG9jYWwgdGltZSBzdWJyb3V0aW5lIChkYXkvbW9udGgveWVhcik8L2E+Cis8bGk+PGEgaHJlZj0iSUVPUi5odG1sI0lFT1IiPjguMTIyIDxjb2RlPklFT1I8L2NvZGU+ICZtZGFzaDsgQml0d2lzZSBsb2dpY2FsIGV4Y2x1c2l2ZSBvcjwvYT4KKzxsaT48YSBocmVmPSJJRVJSTk8uaHRtbCNJRVJSTk8iPjguMTIzIDxjb2RlPklFUlJOTzwvY29kZT4gJm1kYXNoOyBHZXQgdGhlIGxhc3Qgc3lzdGVtIGVycm9yIG51bWJlcjwvYT4KKzxsaT48YSBocmVmPSJJTUFHRV8wMDVmSU5ERVguaHRtbCNJTUFHRV8wMDVmSU5ERVgiPjguMTI0IDxjb2RlPklNQUdFX0lOREVYPC9jb2RlPiAmbWRhc2g7IEZ1bmN0aW9uIHRoYXQgY29udmVydHMgYSBjb3N1YnNjcmlwdCB0byBhbiBpbWFnZSBpbmRleDwvYT4KKzxsaT48YSBocmVmPSJJTkRFWC1pbnRyaW5zaWMuaHRtbCNJTkRFWC1pbnRyaW5zaWMiPjguMTI1IDxjb2RlPklOREVYPC9jb2RlPiAmbWRhc2g7IFBvc2l0aW9uIG9mIGEgc3Vic3RyaW5nIHdpdGhpbiBhIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJJTlQuaHRtbCNJTlQiPjguMTI2IDxjb2RlPklOVDwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IHRvIGludGVnZXIgdHlwZTwvYT4KKzxsaT48YSBocmVmPSJJTlQyLmh0bWwjSU5UMiI+OC4xMjcgPGNvZGU+SU5UMjwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IHRvIDE2LWJpdCBpbnRlZ2VyIHR5cGU8L2E+Cis8bGk+PGEgaHJlZj0iSU5UOC5odG1sI0lOVDgiPjguMTI4IDxjb2RlPklOVDg8L2NvZGU+ICZtZGFzaDsgQ29udmVydCB0byA2NC1iaXQgaW50ZWdlciB0eXBlPC9hPgorPGxpPjxhIGhyZWY9IklPUi5odG1sI0lPUiI+OC4xMjkgPGNvZGU+SU9SPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgbG9naWNhbCBvcjwvYT4KKzxsaT48YSBocmVmPSJJUEFSSVRZLmh0bWwjSVBBUklUWSI+OC4xMzAgPGNvZGU+SVBBUklUWTwvY29kZT4gJm1kYXNoOyBCaXR3aXNlIFhPUiBvZiBhcnJheSBlbGVtZW50czwvYT4KKzxsaT48YSBocmVmPSJJUkFORC5odG1sI0lSQU5EIj44LjEzMSA8Y29kZT5JUkFORDwvY29kZT4gJm1kYXNoOyBJbnRlZ2VyIHBzZXVkby1yYW5kb20gbnVtYmVyPC9hPgorPGxpPjxhIGhyZWY9IklTXzAwNWZJT1NUQVRfMDA1ZkVORC5odG1sI0lTXzAwNWZJT1NUQVRfMDA1ZkVORCI+OC4xMzIgPGNvZGU+SVNfSU9TVEFUX0VORDwvY29kZT4gJm1kYXNoOyBUZXN0IGZvciBlbmQtb2YtZmlsZSB2YWx1ZTwvYT4KKzxsaT48YSBocmVmPSJJU18wMDVmSU9TVEFUXzAwNWZFT1IuaHRtbCNJU18wMDVmSU9TVEFUXzAwNWZFT1IiPjguMTMzIDxjb2RlPklTX0lPU1RBVF9FT1I8L2NvZGU+ICZtZGFzaDsgVGVzdCBmb3IgZW5kLW9mLXJlY29yZCB2YWx1ZTwvYT4KKzxsaT48YSBocmVmPSJJU0FUVFkuaHRtbCNJU0FUVFkiPjguMTM0IDxjb2RlPklTQVRUWTwvY29kZT4gJm1kYXNoOyBXaGV0aGVyIGEgdW5pdCBpcyBhIHRlcm1pbmFsIGRldmljZS48L2E+Cis8bGk+PGEgaHJlZj0iSVNIRlQuaHRtbCNJU0hGVCI+OC4xMzUgPGNvZGU+SVNIRlQ8L2NvZGU+ICZtZGFzaDsgU2hpZnQgYml0czwvYT4KKzxsaT48YSBocmVmPSJJU0hGVEMuaHRtbCNJU0hGVEMiPjguMTM2IDxjb2RlPklTSEZUQzwvY29kZT4gJm1kYXNoOyBTaGlmdCBiaXRzIGNpcmN1bGFybHk8L2E+Cis8bGk+PGEgaHJlZj0iSVNOQU4uaHRtbCNJU05BTiI+OC4xMzcgPGNvZGU+SVNOQU48L2NvZGU+ICZtZGFzaDsgVGVzdCBmb3IgYSBOYU48L2E+Cis8bGk+PGEgaHJlZj0iSVRJTUUuaHRtbCNJVElNRSI+OC4xMzggPGNvZGU+SVRJTUU8L2NvZGU+ICZtZGFzaDsgR2V0IGN1cnJlbnQgbG9jYWwgdGltZSBzdWJyb3V0aW5lIChob3VyL21pbnV0ZXMvc2Vjb25kcyk8L2E+Cis8bGk+PGEgaHJlZj0iS0lMTC5odG1sI0tJTEwiPjguMTM5IDxjb2RlPktJTEw8L2NvZGU+ICZtZGFzaDsgU2VuZCBhIHNpZ25hbCB0byBhIHByb2Nlc3M8L2E+Cis8bGk+PGEgaHJlZj0iS0lORC5odG1sI0tJTkQiPjguMTQwIDxjb2RlPktJTkQ8L2NvZGU+ICZtZGFzaDsgS2luZCBvZiBhbiBlbnRpdHk8L2E+Cis8bGk+PGEgaHJlZj0iTEJPVU5ELmh0bWwjTEJPVU5EIj44LjE0MSA8Y29kZT5MQk9VTkQ8L2NvZGU+ICZtZGFzaDsgTG93ZXIgZGltZW5zaW9uIGJvdW5kcyBvZiBhbiBhcnJheTwvYT4KKzxsaT48YSBocmVmPSJMQ09CT1VORC5odG1sI0xDT0JPVU5EIj44LjE0MiA8Y29kZT5MQ09CT1VORDwvY29kZT4gJm1kYXNoOyBMb3dlciBjb2RpbWVuc2lvbiBib3VuZHMgb2YgYW4gYXJyYXk8L2E+Cis8bGk+PGEgaHJlZj0iTEVBRFouaHRtbCNMRUFEWiI+OC4xNDMgPGNvZGU+TEVBRFo8L2NvZGU+ICZtZGFzaDsgTnVtYmVyIG9mIGxlYWRpbmcgemVybyBiaXRzIG9mIGFuIGludGVnZXI8L2E+Cis8bGk+PGEgaHJlZj0iTEVOLmh0bWwjTEVOIj44LjE0NCA8Y29kZT5MRU48L2NvZGU+ICZtZGFzaDsgTGVuZ3RoIG9mIGEgY2hhcmFjdGVyIGVudGl0eTwvYT4KKzxsaT48YSBocmVmPSJMRU5fMDA1ZlRSSU0uaHRtbCNMRU5fMDA1ZlRSSU0iPjguMTQ1IDxjb2RlPkxFTl9UUklNPC9jb2RlPiAmbWRhc2g7IExlbmd0aCBvZiBhIGNoYXJhY3RlciBlbnRpdHkgd2l0aG91dCB0cmFpbGluZyBibGFuayBjaGFyYWN0ZXJzPC9hPgorPGxpPjxhIGhyZWY9IkxHRS5odG1sI0xHRSI+OC4xNDYgPGNvZGU+TEdFPC9jb2RlPiAmbWRhc2g7IExleGljYWwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsPC9hPgorPGxpPjxhIGhyZWY9IkxHVC5odG1sI0xHVCI+OC4xNDcgPGNvZGU+TEdUPC9jb2RlPiAmbWRhc2g7IExleGljYWwgZ3JlYXRlciB0aGFuPC9hPgorPGxpPjxhIGhyZWY9IkxJTksuaHRtbCNMSU5LIj44LjE0OCA8Y29kZT5MSU5LPC9jb2RlPiAmbWRhc2g7IENyZWF0ZSBhIGhhcmQgbGluazwvYT4KKzxsaT48YSBocmVmPSJMTEUuaHRtbCNMTEUiPjguMTQ5IDxjb2RlPkxMRTwvY29kZT4gJm1kYXNoOyBMZXhpY2FsIGxlc3MgdGhhbiBvciBlcXVhbDwvYT4KKzxsaT48YSBocmVmPSJMTFQuaHRtbCNMTFQiPjguMTUwIDxjb2RlPkxMVDwvY29kZT4gJm1kYXNoOyBMZXhpY2FsIGxlc3MgdGhhbjwvYT4KKzxsaT48YSBocmVmPSJMTkJMTksuaHRtbCNMTkJMTksiPjguMTUxIDxjb2RlPkxOQkxOSzwvY29kZT4gJm1kYXNoOyBJbmRleCBvZiB0aGUgbGFzdCBub24tYmxhbmsgY2hhcmFjdGVyIGluIGEgc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9IkxPQy5odG1sI0xPQyI+OC4xNTIgPGNvZGU+TE9DPC9jb2RlPiAmbWRhc2g7IFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgYSB2YXJpYWJsZTwvYT4KKzxsaT48YSBocmVmPSJMT0cuaHRtbCNMT0ciPjguMTUzIDxjb2RlPkxPRzwvY29kZT4gJm1kYXNoOyBOYXR1cmFsIGxvZ2FyaXRobSBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJMT0cxMC5odG1sI0xPRzEwIj44LjE1NCA8Y29kZT5MT0cxMDwvY29kZT4gJm1kYXNoOyBCYXNlIDEwIGxvZ2FyaXRobSBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJMT0dfMDA1ZkdBTU1BLmh0bWwjTE9HXzAwNWZHQU1NQSI+OC4xNTUgPGNvZGU+TE9HX0dBTU1BPC9jb2RlPiAmbWRhc2g7IExvZ2FyaXRobSBvZiB0aGUgR2FtbWEgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iTE9HSUNBTC5odG1sI0xPR0lDQUwiPjguMTU2IDxjb2RlPkxPR0lDQUw8L2NvZGU+ICZtZGFzaDsgQ29udmVydCB0byBsb2dpY2FsIHR5cGU8L2E+Cis8bGk+PGEgaHJlZj0iTE9ORy5odG1sI0xPTkciPjguMTU3IDxjb2RlPkxPTkc8L2NvZGU+ICZtZGFzaDsgQ29udmVydCB0byBpbnRlZ2VyIHR5cGU8L2E+Cis8bGk+PGEgaHJlZj0iTFNISUZULmh0bWwjTFNISUZUIj44LjE1OCA8Y29kZT5MU0hJRlQ8L2NvZGU+ICZtZGFzaDsgTGVmdCBzaGlmdCBiaXRzPC9hPgorPGxpPjxhIGhyZWY9IkxTVEFULmh0bWwjTFNUQVQiPjguMTU5IDxjb2RlPkxTVEFUPC9jb2RlPiAmbWRhc2g7IEdldCBmaWxlIHN0YXR1czwvYT4KKzxsaT48YSBocmVmPSJMVElNRS5odG1sI0xUSU1FIj44LjE2MCA8Y29kZT5MVElNRTwvY29kZT4gJm1kYXNoOyBDb252ZXJ0IHRpbWUgdG8gbG9jYWwgdGltZSBpbmZvPC9hPgorPGxpPjxhIGhyZWY9Ik1BTExPQy5odG1sI01BTExPQyI+OC4xNjEgPGNvZGU+TUFMTE9DPC9jb2RlPiAmbWRhc2g7IEFsbG9jYXRlIGR5bmFtaWMgbWVtb3J5PC9hPgorPGxpPjxhIGhyZWY9Ik1BU0tMLmh0bWwjTUFTS0wiPjguMTYyIDxjb2RlPk1BU0tMPC9jb2RlPiAmbWRhc2g7IExlZnQganVzdGlmaWVkIG1hc2s8L2E+Cis8bGk+PGEgaHJlZj0iTUFTS1IuaHRtbCNNQVNLUiI+OC4xNjMgPGNvZGU+TUFTS1I8L2NvZGU+ICZtZGFzaDsgUmlnaHQganVzdGlmaWVkIG1hc2s8L2E+Cis8bGk+PGEgaHJlZj0iTUFUTVVMLmh0bWwjTUFUTVVMIj44LjE2NCA8Y29kZT5NQVRNVUw8L2NvZGU+ICZtZGFzaDsgbWF0cml4IG11bHRpcGxpY2F0aW9uPC9hPgorPGxpPjxhIGhyZWY9Ik1BWC5odG1sI01BWCI+OC4xNjUgPGNvZGU+TUFYPC9jb2RlPiAmbWRhc2g7IE1heGltdW0gdmFsdWUgb2YgYW4gYXJndW1lbnQgbGlzdDwvYT4KKzxsaT48YSBocmVmPSJNQVhFWFBPTkVOVC5odG1sI01BWEVYUE9ORU5UIj44LjE2NiA8Y29kZT5NQVhFWFBPTkVOVDwvY29kZT4gJm1kYXNoOyBNYXhpbXVtIGV4cG9uZW50IG9mIGEgcmVhbCBraW5kPC9hPgorPGxpPjxhIGhyZWY9Ik1BWExPQy5odG1sI01BWExPQyI+OC4xNjcgPGNvZGU+TUFYTE9DPC9jb2RlPiAmbWRhc2g7IExvY2F0aW9uIG9mIHRoZSBtYXhpbXVtIHZhbHVlIHdpdGhpbiBhbiBhcnJheTwvYT4KKzxsaT48YSBocmVmPSJNQVhWQUwuaHRtbCNNQVhWQUwiPjguMTY4IDxjb2RlPk1BWFZBTDwvY29kZT4gJm1kYXNoOyBNYXhpbXVtIHZhbHVlIG9mIGFuIGFycmF5PC9hPgorPGxpPjxhIGhyZWY9Ik1DTE9DSy5odG1sI01DTE9DSyI+OC4xNjkgPGNvZGU+TUNMT0NLPC9jb2RlPiAmbWRhc2g7IFRpbWUgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iTUNMT0NLOC5odG1sI01DTE9DSzgiPjguMTcwIDxjb2RlPk1DTE9DSzg8L2NvZGU+ICZtZGFzaDsgVGltZSBmdW5jdGlvbiAoNjQtYml0KTwvYT4KKzxsaT48YSBocmVmPSJNRVJHRS5odG1sI01FUkdFIj44LjE3MSA8Y29kZT5NRVJHRTwvY29kZT4gJm1kYXNoOyBNZXJnZSB2YXJpYWJsZXM8L2E+Cis8bGk+PGEgaHJlZj0iTUVSR0VfMDA1ZkJJVFMuaHRtbCNNRVJHRV8wMDVmQklUUyI+OC4xNzIgPGNvZGU+TUVSR0VfQklUUzwvY29kZT4gJm1kYXNoOyBNZXJnZSBvZiBiaXRzIHVuZGVyIG1hc2s8L2E+Cis8bGk+PGEgaHJlZj0iTUlOLmh0bWwjTUlOIj44LjE3MyA8Y29kZT5NSU48L2NvZGU+ICZtZGFzaDsgTWluaW11bSB2YWx1ZSBvZiBhbiBhcmd1bWVudCBsaXN0PC9hPgorPGxpPjxhIGhyZWY9Ik1JTkVYUE9ORU5ULmh0bWwjTUlORVhQT05FTlQiPjguMTc0IDxjb2RlPk1JTkVYUE9ORU5UPC9jb2RlPiAmbWRhc2g7IE1pbmltdW0gZXhwb25lbnQgb2YgYSByZWFsIGtpbmQ8L2E+Cis8bGk+PGEgaHJlZj0iTUlOTE9DLmh0bWwjTUlOTE9DIj44LjE3NSA8Y29kZT5NSU5MT0M8L2NvZGU+ICZtZGFzaDsgTG9jYXRpb24gb2YgdGhlIG1pbmltdW0gdmFsdWUgd2l0aGluIGFuIGFycmF5PC9hPgorPGxpPjxhIGhyZWY9Ik1JTlZBTC5odG1sI01JTlZBTCI+OC4xNzYgPGNvZGU+TUlOVkFMPC9jb2RlPiAmbWRhc2g7IE1pbmltdW0gdmFsdWUgb2YgYW4gYXJyYXk8L2E+Cis8bGk+PGEgaHJlZj0iTU9ELmh0bWwjTU9EIj44LjE3NyA8Y29kZT5NT0Q8L2NvZGU+ICZtZGFzaDsgUmVtYWluZGVyIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9Ik1PRFVMTy5odG1sI01PRFVMTyI+OC4xNzggPGNvZGU+TU9EVUxPPC9jb2RlPiAmbWRhc2g7IE1vZHVsbyBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJNT1ZFXzAwNWZBTExPQy5odG1sI01PVkVfMDA1ZkFMTE9DIj44LjE3OSA8Y29kZT5NT1ZFX0FMTE9DPC9jb2RlPiAmbWRhc2g7IE1vdmUgYWxsb2NhdGlvbiBmcm9tIG9uZSBvYmplY3QgdG8gYW5vdGhlcjwvYT4KKzxsaT48YSBocmVmPSJNVkJJVFMuaHRtbCNNVkJJVFMiPjguMTgwIDxjb2RlPk1WQklUUzwvY29kZT4gJm1kYXNoOyBNb3ZlIGJpdHMgZnJvbSBvbmUgaW50ZWdlciB0byBhbm90aGVyPC9hPgorPGxpPjxhIGhyZWY9Ik5FQVJFU1QuaHRtbCNORUFSRVNUIj44LjE4MSA8Y29kZT5ORUFSRVNUPC9jb2RlPiAmbWRhc2g7IE5lYXJlc3QgcmVwcmVzZW50YWJsZSBudW1iZXI8L2E+Cis8bGk+PGEgaHJlZj0iTkVXXzAwNWZMSU5FLmh0bWwjTkVXXzAwNWZMSU5FIj44LjE4MiA8Y29kZT5ORVdfTElORTwvY29kZT4gJm1kYXNoOyBOZXcgbGluZSBjaGFyYWN0ZXI8L2E+Cis8bGk+PGEgaHJlZj0iTklOVC5odG1sI05JTlQiPjguMTgzIDxjb2RlPk5JTlQ8L2NvZGU+ICZtZGFzaDsgTmVhcmVzdCB3aG9sZSBudW1iZXI8L2E+Cis8bGk+PGEgaHJlZj0iTk9STTIuaHRtbCNOT1JNMiI+OC4xODQgPGNvZGU+Tk9STTI8L2NvZGU+ICZtZGFzaDsgRXVjbGlkZWFuIHZlY3RvciBub3JtczwvYT4KKzxsaT48YSBocmVmPSJOT1QuaHRtbCNOT1QiPjguMTg1IDxjb2RlPk5PVDwvY29kZT4gJm1kYXNoOyBMb2dpY2FsIG5lZ2F0aW9uPC9hPgorPGxpPjxhIGhyZWY9Ik5VTEwuaHRtbCNOVUxMIj44LjE4NiA8Y29kZT5OVUxMPC9jb2RlPiAmbWRhc2g7IEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBkaXNhc3NvY2lhdGVkIHBvaW50ZXI8L2E+Cis8bGk+PGEgaHJlZj0iTlVNXzAwNWZJTUFHRVMuaHRtbCNOVU1fMDA1ZklNQUdFUyI+OC4xODcgPGNvZGU+TlVNX0lNQUdFUzwvY29kZT4gJm1kYXNoOyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZiBpbWFnZXM8L2E+Cis8bGk+PGEgaHJlZj0iT1IuaHRtbCNPUiI+OC4xODggPGNvZGU+T1I8L2NvZGU+ICZtZGFzaDsgQml0d2lzZSBsb2dpY2FsIE9SPC9hPgorPGxpPjxhIGhyZWY9IlBBQ0suaHRtbCNQQUNLIj44LjE4OSA8Y29kZT5QQUNLPC9jb2RlPiAmbWRhc2g7IFBhY2sgYW4gYXJyYXkgaW50byBhbiBhcnJheSBvZiByYW5rIG9uZTwvYT4KKzxsaT48YSBocmVmPSJQQVJJVFkuaHRtbCNQQVJJVFkiPjguMTkwIDxjb2RlPlBBUklUWTwvY29kZT4gJm1kYXNoOyBSZWR1Y3Rpb24gd2l0aCBleGNsdXNpdmUgT1I8L2E+Cis8bGk+PGEgaHJlZj0iUEVSUk9SLmh0bWwjUEVSUk9SIj44LjE5MSA8Y29kZT5QRVJST1I8L2NvZGU+ICZtZGFzaDsgUHJpbnQgc3lzdGVtIGVycm9yIG1lc3NhZ2U8L2E+Cis8bGk+PGEgaHJlZj0iUE9QQ05ULmh0bWwjUE9QQ05UIj44LjE5MiA8Y29kZT5QT1BDTlQ8L2NvZGU+ICZtZGFzaDsgTnVtYmVyIG9mIGJpdHMgc2V0PC9hPgorPGxpPjxhIGhyZWY9IlBPUFBBUi5odG1sI1BPUFBBUiI+OC4xOTMgPGNvZGU+UE9QUEFSPC9jb2RlPiAmbWRhc2g7IFBhcml0eSBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0PC9hPgorPGxpPjxhIGhyZWY9IlBSRUNJU0lPTi5odG1sI1BSRUNJU0lPTiI+OC4xOTQgPGNvZGU+UFJFQ0lTSU9OPC9jb2RlPiAmbWRhc2g7IERlY2ltYWwgcHJlY2lzaW9uIG9mIGEgcmVhbCBraW5kPC9hPgorPGxpPjxhIGhyZWY9IlBSRVNFTlQuaHRtbCNQUkVTRU5UIj44LjE5NSA8Y29kZT5QUkVTRU5UPC9jb2RlPiAmbWRhc2g7IERldGVybWluZSB3aGV0aGVyIGFuIG9wdGlvbmFsIGR1bW15IGFyZ3VtZW50IGlzIHNwZWNpZmllZDwvYT4KKzxsaT48YSBocmVmPSJQUk9EVUNULmh0bWwjUFJPRFVDVCI+OC4xOTYgPGNvZGU+UFJPRFVDVDwvY29kZT4gJm1kYXNoOyBQcm9kdWN0IG9mIGFycmF5IGVsZW1lbnRzPC9hPgorPGxpPjxhIGhyZWY9IlJBRElYLmh0bWwjUkFESVgiPjguMTk3IDxjb2RlPlJBRElYPC9jb2RlPiAmbWRhc2g7IEJhc2Ugb2YgYSBtb2RlbCBudW1iZXI8L2E+Cis8bGk+PGEgaHJlZj0iUkFOLmh0bWwjUkFOIj44LjE5OCA8Y29kZT5SQU48L2NvZGU+ICZtZGFzaDsgUmVhbCBwc2V1ZG8tcmFuZG9tIG51bWJlcjwvYT4KKzxsaT48YSBocmVmPSJSQU5ELmh0bWwjUkFORCI+OC4xOTkgPGNvZGU+UkFORDwvY29kZT4gJm1kYXNoOyBSZWFsIHBzZXVkby1yYW5kb20gbnVtYmVyPC9hPgorPGxpPjxhIGhyZWY9IlJBTkRPTV8wMDVmTlVNQkVSLmh0bWwjUkFORE9NXzAwNWZOVU1CRVIiPjguMjAwIDxjb2RlPlJBTkRPTV9OVU1CRVI8L2NvZGU+ICZtZGFzaDsgUHNldWRvLXJhbmRvbSBudW1iZXI8L2E+Cis8bGk+PGEgaHJlZj0iUkFORE9NXzAwNWZTRUVELmh0bWwjUkFORE9NXzAwNWZTRUVEIj44LjIwMSA8Y29kZT5SQU5ET01fU0VFRDwvY29kZT4gJm1kYXNoOyBJbml0aWFsaXplIGEgcHNldWRvLXJhbmRvbSBudW1iZXIgc2VxdWVuY2U8L2E+Cis8bGk+PGEgaHJlZj0iUkFOR0UuaHRtbCNSQU5HRSI+OC4yMDIgPGNvZGU+UkFOR0U8L2NvZGU+ICZtZGFzaDsgRGVjaW1hbCBleHBvbmVudCByYW5nZTwvYT4KKzxsaT48YSBocmVmPSJSQU5LLmh0bWwjUkFOSyI+OC4yMDMgPGNvZGU+UkFOSzwvY29kZT4gJm1kYXNoOyBSYW5rIG9mIGEgZGF0YSBvYmplY3Q8L2E+Cis8bGk+PGEgaHJlZj0iUkVBTC5odG1sI1JFQUwiPjguMjA0IDxjb2RlPlJFQUw8L2NvZGU+ICZtZGFzaDsgQ29udmVydCB0byByZWFsIHR5cGU8L2E+Cis8bGk+PGEgaHJlZj0iUkVOQU1FLmh0bWwjUkVOQU1FIj44LjIwNSA8Y29kZT5SRU5BTUU8L2NvZGU+ICZtZGFzaDsgUmVuYW1lIGEgZmlsZTwvYT4KKzxsaT48YSBocmVmPSJSRVBFQVQuaHRtbCNSRVBFQVQiPjguMjA2IDxjb2RlPlJFUEVBVDwvY29kZT4gJm1kYXNoOyBSZXBlYXRlZCBzdHJpbmcgY29uY2F0ZW5hdGlvbjwvYT4KKzxsaT48YSBocmVmPSJSRVNIQVBFLmh0bWwjUkVTSEFQRSI+OC4yMDcgPGNvZGU+UkVTSEFQRTwvY29kZT4gJm1kYXNoOyBGdW5jdGlvbiB0byByZXNoYXBlIGFuIGFycmF5PC9hPgorPGxpPjxhIGhyZWY9IlJSU1BBQ0lORy5odG1sI1JSU1BBQ0lORyI+OC4yMDggPGNvZGU+UlJTUEFDSU5HPC9jb2RlPiAmbWRhc2g7IFJlY2lwcm9jYWwgb2YgdGhlIHJlbGF0aXZlIHNwYWNpbmc8L2E+Cis8bGk+PGEgaHJlZj0iUlNISUZULmh0bWwjUlNISUZUIj44LjIwOSA8Y29kZT5SU0hJRlQ8L2NvZGU+ICZtZGFzaDsgUmlnaHQgc2hpZnQgYml0czwvYT4KKzxsaT48YSBocmVmPSJTQU1FXzAwNWZUWVBFXzAwNWZBUy5odG1sI1NBTUVfMDA1ZlRZUEVfMDA1ZkFTIj44LjIxMCA8Y29kZT5TQU1FX1RZUEVfQVM8L2NvZGU+ICZtZGFzaDsgIFF1ZXJ5IGR5bmFtaWMgdHlwZXMgZm9yIGVxdWFsaXR5PC9hPgorPGxpPjxhIGhyZWY9IlNDQUxFLmh0bWwjU0NBTEUiPjguMjExIDxjb2RlPlNDQUxFPC9jb2RlPiAmbWRhc2g7IFNjYWxlIGEgcmVhbCB2YWx1ZTwvYT4KKzxsaT48YSBocmVmPSJTQ0FOLmh0bWwjU0NBTiI+OC4yMTIgPGNvZGU+U0NBTjwvY29kZT4gJm1kYXNoOyBTY2FuIGEgc3RyaW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBzZXQgb2YgY2hhcmFjdGVyczwvYT4KKzxsaT48YSBocmVmPSJTRUNORFMuaHRtbCNTRUNORFMiPjguMjEzIDxjb2RlPlNFQ05EUzwvY29kZT4gJm1kYXNoOyBUaW1lIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlNFQ09ORC5odG1sI1NFQ09ORCI+OC4yMTQgPGNvZGU+U0VDT05EPC9jb2RlPiAmbWRhc2g7IENQVSB0aW1lIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlNFTEVDVEVEXzAwNWZDSEFSXzAwNWZLSU5ELmh0bWwjU0VMRUNURURfMDA1ZkNIQVJfMDA1ZktJTkQiPjguMjE1IDxjb2RlPlNFTEVDVEVEX0NIQVJfS0lORDwvY29kZT4gJm1kYXNoOyBDaG9vc2UgY2hhcmFjdGVyIGtpbmQ8L2E+Cis8bGk+PGEgaHJlZj0iU0VMRUNURURfMDA1ZklOVF8wMDVmS0lORC5odG1sI1NFTEVDVEVEXzAwNWZJTlRfMDA1ZktJTkQiPjguMjE2IDxjb2RlPlNFTEVDVEVEX0lOVF9LSU5EPC9jb2RlPiAmbWRhc2g7IENob29zZSBpbnRlZ2VyIGtpbmQ8L2E+Cis8bGk+PGEgaHJlZj0iU0VMRUNURURfMDA1ZlJFQUxfMDA1ZktJTkQuaHRtbCNTRUxFQ1RFRF8wMDVmUkVBTF8wMDVmS0lORCI+OC4yMTcgPGNvZGU+U0VMRUNURURfUkVBTF9LSU5EPC9jb2RlPiAmbWRhc2g7IENob29zZSByZWFsIGtpbmQ8L2E+Cis8bGk+PGEgaHJlZj0iU0VUXzAwNWZFWFBPTkVOVC5odG1sI1NFVF8wMDVmRVhQT05FTlQiPjguMjE4IDxjb2RlPlNFVF9FWFBPTkVOVDwvY29kZT4gJm1kYXNoOyBTZXQgdGhlIGV4cG9uZW50IG9mIHRoZSBtb2RlbDwvYT4KKzxsaT48YSBocmVmPSJTSEFQRS5odG1sI1NIQVBFIj44LjIxOSA8Y29kZT5TSEFQRTwvY29kZT4gJm1kYXNoOyBEZXRlcm1pbmUgdGhlIHNoYXBlIG9mIGFuIGFycmF5PC9hPgorPGxpPjxhIGhyZWY9IlNISUZUQS5odG1sI1NISUZUQSI+OC4yMjAgPGNvZGU+U0hJRlRBPC9jb2RlPiAmbWRhc2g7IFJpZ2h0IHNoaWZ0IHdpdGggZmlsbDwvYT4KKzxsaT48YSBocmVmPSJTSElGVEwuaHRtbCNTSElGVEwiPjguMjIxIDxjb2RlPlNISUZUTDwvY29kZT4gJm1kYXNoOyBMZWZ0IHNoaWZ0PC9hPgorPGxpPjxhIGhyZWY9IlNISUZUUi5odG1sI1NISUZUUiI+OC4yMjIgPGNvZGU+U0hJRlRSPC9jb2RlPiAmbWRhc2g7IFJpZ2h0IHNoaWZ0PC9hPgorPGxpPjxhIGhyZWY9IlNJR04uaHRtbCNTSUdOIj44LjIyMyA8Y29kZT5TSUdOPC9jb2RlPiAmbWRhc2g7IFNpZ24gY29weWluZyBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJTSUdOQUwuaHRtbCNTSUdOQUwiPjguMjI0IDxjb2RlPlNJR05BTDwvY29kZT4gJm1kYXNoOyBTaWduYWwgaGFuZGxpbmcgc3Vicm91dGluZSAob3IgZnVuY3Rpb24pPC9hPgorPGxpPjxhIGhyZWY9IlNJTi5odG1sI1NJTiI+OC4yMjUgPGNvZGU+U0lOPC9jb2RlPiAmbWRhc2g7IFNpbmUgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iU0lOSC5odG1sI1NJTkgiPjguMjI2IDxjb2RlPlNJTkg8L2NvZGU+ICZtZGFzaDsgSHlwZXJib2xpYyBzaW5lIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlNJWkUuaHRtbCNTSVpFIj44LjIyNyA8Y29kZT5TSVpFPC9jb2RlPiAmbWRhc2g7IERldGVybWluZSB0aGUgc2l6ZSBvZiBhbiBhcnJheTwvYT4KKzxsaT48YSBocmVmPSJTSVpFT0YuaHRtbCNTSVpFT0YiPjguMjI4IDxjb2RlPlNJWkVPRjwvY29kZT4gJm1kYXNoOyBTaXplIGluIGJ5dGVzIG9mIGFuIGV4cHJlc3Npb248L2E+Cis8bGk+PGEgaHJlZj0iU0xFRVAuaHRtbCNTTEVFUCI+OC4yMjkgPGNvZGU+U0xFRVA8L2NvZGU+ICZtZGFzaDsgU2xlZXAgZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNlY29uZHM8L2E+Cis8bGk+PGEgaHJlZj0iU1BBQ0lORy5odG1sI1NQQUNJTkciPjguMjMwIDxjb2RlPlNQQUNJTkc8L2NvZGU+ICZtZGFzaDsgU21hbGxlc3QgZGlzdGFuY2UgYmV0d2VlbiB0d28gbnVtYmVycyBvZiBhIGdpdmVuIHR5cGU8L2E+Cis8bGk+PGEgaHJlZj0iU1BSRUFELmh0bWwjU1BSRUFEIj44LjIzMSA8Y29kZT5TUFJFQUQ8L2NvZGU+ICZtZGFzaDsgQWRkIGEgZGltZW5zaW9uIHRvIGFuIGFycmF5PC9hPgorPGxpPjxhIGhyZWY9IlNRUlQuaHRtbCNTUVJUIj44LjIzMiA8Y29kZT5TUVJUPC9jb2RlPiAmbWRhc2g7IFNxdWFyZS1yb290IGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlNSQU5ELmh0bWwjU1JBTkQiPjguMjMzIDxjb2RlPlNSQU5EPC9jb2RlPiAmbWRhc2g7IFJlaW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3I8L2E+Cis8bGk+PGEgaHJlZj0iU1RBVC5odG1sI1NUQVQiPjguMjM0IDxjb2RlPlNUQVQ8L2NvZGU+ICZtZGFzaDsgR2V0IGZpbGUgc3RhdHVzPC9hPgorPGxpPjxhIGhyZWY9IlNUT1JBR0VfMDA1ZlNJWkUuaHRtbCNTVE9SQUdFXzAwNWZTSVpFIj44LjIzNSA8Y29kZT5TVE9SQUdFX1NJWkU8L2NvZGU+ICZtZGFzaDsgU3RvcmFnZSBzaXplIGluIGJpdHM8L2E+Cis8bGk+PGEgaHJlZj0iU1VNLmh0bWwjU1VNIj44LjIzNiA8Y29kZT5TVU08L2NvZGU+ICZtZGFzaDsgU3VtIG9mIGFycmF5IGVsZW1lbnRzPC9hPgorPGxpPjxhIGhyZWY9IlNZTUxOSy5odG1sI1NZTUxOSyI+OC4yMzcgPGNvZGU+U1lNTE5LPC9jb2RlPiAmbWRhc2g7IENyZWF0ZSBhIHN5bWJvbGljIGxpbms8L2E+Cis8bGk+PGEgaHJlZj0iU1lTVEVNLmh0bWwjU1lTVEVNIj44LjIzOCA8Y29kZT5TWVNURU08L2NvZGU+ICZtZGFzaDsgRXhlY3V0ZSBhIHNoZWxsIGNvbW1hbmQ8L2E+Cis8bGk+PGEgaHJlZj0iU1lTVEVNXzAwNWZDTE9DSy5odG1sI1NZU1RFTV8wMDVmQ0xPQ0siPjguMjM5IDxjb2RlPlNZU1RFTV9DTE9DSzwvY29kZT4gJm1kYXNoOyBUaW1lIGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlRBTi5odG1sI1RBTiI+OC4yNDAgPGNvZGU+VEFOPC9jb2RlPiAmbWRhc2g7IFRhbmdlbnQgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iVEFOSC5odG1sI1RBTkgiPjguMjQxIDxjb2RlPlRBTkg8L2NvZGU+ICZtZGFzaDsgSHlwZXJib2xpYyB0YW5nZW50IGZ1bmN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IlRISVNfMDA1ZklNQUdFLmh0bWwjVEhJU18wMDVmSU1BR0UiPjguMjQyIDxjb2RlPlRISVNfSU1BR0U8L2NvZGU+ICZtZGFzaDsgRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjb3N1YnNjcmlwdCBpbmRleCBvZiB0aGlzIGltYWdlPC9hPgorPGxpPjxhIGhyZWY9IlRJTUUuaHRtbCNUSU1FIj44LjI0MyA8Y29kZT5USU1FPC9jb2RlPiAmbWRhc2g7IFRpbWUgZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0iVElNRTguaHRtbCNUSU1FOCI+OC4yNDQgPGNvZGU+VElNRTg8L2NvZGU+ICZtZGFzaDsgVGltZSBmdW5jdGlvbiAoNjQtYml0KTwvYT4KKzxsaT48YSBocmVmPSJUSU5ZLmh0bWwjVElOWSI+OC4yNDUgPGNvZGU+VElOWTwvY29kZT4gJm1kYXNoOyBTbWFsbGVzdCBwb3NpdGl2ZSBudW1iZXIgb2YgYSByZWFsIGtpbmQ8L2E+Cis8bGk+PGEgaHJlZj0iVFJBSUxaLmh0bWwjVFJBSUxaIj44LjI0NiA8Y29kZT5UUkFJTFo8L2NvZGU+ICZtZGFzaDsgTnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0cyBvZiBhbiBpbnRlZ2VyPC9hPgorPGxpPjxhIGhyZWY9IlRSQU5TRkVSLmh0bWwjVFJBTlNGRVIiPjguMjQ3IDxjb2RlPlRSQU5TRkVSPC9jb2RlPiAmbWRhc2g7IFRyYW5zZmVyIGJpdCBwYXR0ZXJuczwvYT4KKzxsaT48YSBocmVmPSJUUkFOU1BPU0UuaHRtbCNUUkFOU1BPU0UiPjguMjQ4IDxjb2RlPlRSQU5TUE9TRTwvY29kZT4gJm1kYXNoOyBUcmFuc3Bvc2UgYW4gYXJyYXkgb2YgcmFuayB0d288L2E+Cis8bGk+PGEgaHJlZj0iVFJJTS5odG1sI1RSSU0iPjguMjQ5IDxjb2RlPlRSSU08L2NvZGU+ICZtZGFzaDsgUmVtb3ZlIHRyYWlsaW5nIGJsYW5rIGNoYXJhY3RlcnMgb2YgYSBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0iVFRZTkFNLmh0bWwjVFRZTkFNIj44LjI1MCA8Y29kZT5UVFlOQU08L2NvZGU+ICZtZGFzaDsgR2V0IHRoZSBuYW1lIG9mIGEgdGVybWluYWwgZGV2aWNlLjwvYT4KKzxsaT48YSBocmVmPSJVQk9VTkQuaHRtbCNVQk9VTkQiPjguMjUxIDxjb2RlPlVCT1VORDwvY29kZT4gJm1kYXNoOyBVcHBlciBkaW1lbnNpb24gYm91bmRzIG9mIGFuIGFycmF5PC9hPgorPGxpPjxhIGhyZWY9IlVDT0JPVU5ELmh0bWwjVUNPQk9VTkQiPjguMjUyIDxjb2RlPlVDT0JPVU5EPC9jb2RlPiAmbWRhc2g7IFVwcGVyIGNvZGltZW5zaW9uIGJvdW5kcyBvZiBhbiBhcnJheTwvYT4KKzxsaT48YSBocmVmPSJVTUFTSy5odG1sI1VNQVNLIj44LjI1MyA8Y29kZT5VTUFTSzwvY29kZT4gJm1kYXNoOyBTZXQgdGhlIGZpbGUgY3JlYXRpb24gbWFzazwvYT4KKzxsaT48YSBocmVmPSJVTkxJTksuaHRtbCNVTkxJTksiPjguMjU0IDxjb2RlPlVOTElOSzwvY29kZT4gJm1kYXNoOyBSZW1vdmUgYSBmaWxlIGZyb20gdGhlIGZpbGUgc3lzdGVtPC9hPgorPGxpPjxhIGhyZWY9IlVOUEFDSy5odG1sI1VOUEFDSyI+OC4yNTUgPGNvZGU+VU5QQUNLPC9jb2RlPiAmbWRhc2g7IFVucGFjayBhbiBhcnJheSBvZiByYW5rIG9uZSBpbnRvIGFuIGFycmF5PC9hPgorPGxpPjxhIGhyZWY9IlZFUklGWS5odG1sI1ZFUklGWSI+OC4yNTYgPGNvZGU+VkVSSUZZPC9jb2RlPiAmbWRhc2g7IFNjYW4gYSBzdHJpbmcgZm9yIGNoYXJhY3RlcnMgbm90IGEgZ2l2ZW4gc2V0PC9hPgorPGxpPjxhIGhyZWY9IlhPUi5odG1sI1hPUiI+OC4yNTcgPGNvZGU+WE9SPC9jb2RlPiAmbWRhc2g7IEJpdHdpc2UgbG9naWNhbCBleGNsdXNpdmUgT1I8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0ludHJpbnNpYy1Nb2R1bGVzIiBocmVmPSJJbnRyaW5zaWMtTW9kdWxlcy5odG1sI0ludHJpbnNpYy1Nb2R1bGVzIj45IEludHJpbnNpYyBNb2R1bGVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IklTT18wMDVmRk9SVFJBTl8wMDVmRU5WLmh0bWwjSVNPXzAwNWZGT1JUUkFOXzAwNWZFTlYiPjkuMSA8Y29kZT5JU09fRk9SVFJBTl9FTlY8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9IklTT18wMDVmQ18wMDVmQklORElORy5odG1sI0lTT18wMDVmQ18wMDVmQklORElORyI+OS4yIDxjb2RlPklTT19DX0JJTkRJTkc8L2NvZGU+PC9hPgorPGxpPjxhIGhyZWY9Ik9wZW5NUC1Nb2R1bGVzLU9NUF8wMDVmTElCLWFuZC1PTVBfMDA1ZkxJQl8wMDVmS0lORFMuaHRtbCNPcGVuTVAtTW9kdWxlcy1PTVBfMDA1ZkxJQi1hbmQtT01QXzAwNWZMSUJfMDA1ZktJTkRTIj45LjMgT3Blbk1QIE1vZHVsZXMgPGNvZGU+T01QX0xJQjwvY29kZT4gYW5kIDxjb2RlPk9NUF9MSUJfS0lORFM8L2NvZGU+PC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19Db250cmlidXRpbmciIGhyZWY9IkNvbnRyaWJ1dGluZy5odG1sI0NvbnRyaWJ1dGluZyI+Q29udHJpYnV0aW5nPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkNvbnRyaWJ1dG9ycy5odG1sI0NvbnRyaWJ1dG9ycyI+Q29udHJpYnV0b3JzIHRvIEdOVSBGb3J0cmFuPC9hPgorPGxpPjxhIGhyZWY9IlByb2plY3RzLmh0bWwjUHJvamVjdHMiPlByb2plY3RzPC9hPgorPGxpPjxhIGhyZWY9IlByb3Bvc2VkLUV4dGVuc2lvbnMuaHRtbCNQcm9wb3NlZC1FeHRlbnNpb25zIj5Qcm9wb3NlZCBFeHRlbnNpb25zPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlByb3Bvc2VkLUV4dGVuc2lvbnMuaHRtbCNQcm9wb3NlZC1FeHRlbnNpb25zIj5Db21waWxlciBleHRlbnNpb25zOjwvYT4KKzxsaT48YSBocmVmPSJQcm9wb3NlZC1FeHRlbnNpb25zLmh0bWwjUHJvcG9zZWQtRXh0ZW5zaW9ucyI+RW52aXJvbm1lbnQgT3B0aW9uczwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQ29weWluZyIgaHJlZj0iQ29weWluZy5odG1sI0NvcHlpbmciPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9hPgorPGxpPjxhIG5hbWU9InRvY19HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+QURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50czwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfRnVuZGluZyIgaHJlZj0iRnVuZGluZy5odG1sI0Z1bmRpbmciPkZ1bmRpbmcgRnJlZSBTb2Z0d2FyZTwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfT3B0aW9uLUluZGV4IiBocmVmPSJPcHRpb24tSW5kZXguaHRtbCNPcHRpb24tSW5kZXgiPk9wdGlvbiBJbmRleDwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfS2V5d29yZC1JbmRleCIgaHJlZj0iS2V5d29yZC1JbmRleC5odG1sI0tleXdvcmQtSW5kZXgiPktleXdvcmQgSW5kZXg8L2E+Cis8L2xpPjwvdWw+Cis8L2Rpdj4KKworPCEtLSAgLS0+Cis8IS0tIFRleEluZm8gdGFibGUgb2YgY29udGVudHMuIC0tPgorPCEtLSAgLS0+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRvcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwjZGlyIj4oZGlyKTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkludHJvZHVjdGlvbjwvaDI+CisKKzxwPjxhIG5hbWU9ImluZGV4LUludHJvZHVjdGlvbi0xIj48L2E+CitUaGlzIG1hbnVhbCBkb2N1bWVudHMgdGhlIHVzZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiwKK3RoZSBHTlUgRm9ydHJhbiBjb21waWxlci4gIFlvdSBjYW4gZmluZCBpbiB0aGlzIG1hbnVhbCBob3cgdG8gaW52b2tlCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2ZvcnRyYW48L3NwYW4+PC9zYW1wPiwgYXMgd2VsbCBhcyBpdHMgZmVhdHVyZXMgYW5kIGluY29tcGF0aWJpbGl0aWVzLgorCis8IS0tIFdoZW4geW91IGFkZCBhIG5ldyBtZW51IGl0ZW0sIHBsZWFzZSBrZWVwIHRoZSByaWdodCBoYW5kIC0tPgorPCEtLSBhbGlnbmVkIHRvIHRoZSBzYW1lIGNvbHVtbi4gIERvIG5vdCB1c2UgdGFicy4gIFRoaXMgcHJvdmlkZXMgLS0+Cis8IS0tIGJldHRlciBmb3JtYXR0aW5nLiAtLT4KKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT4KKworPC9saT48L3VsPgorPHA+UGFydCBJOiBJbnZva2luZyBHTlUgRm9ydHJhbgorPC9wPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Ikludm9raW5nLUdOVS1Gb3J0cmFuLmh0bWwjSW52b2tpbmctR05VLUZvcnRyYW4iPkludm9raW5nIEdOVSBGb3J0cmFuPC9hPjogIENvbW1hbmQgb3B0aW9ucyBzdXBwb3J0ZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmdmb3J0cmFuPC9zcGFuPjwvc2FtcD4uIAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iUnVudGltZS5odG1sI1J1bnRpbWUiPlJ1bnRpbWU8L2E+OiAgICAgICAgICAgICAgIEluZmx1ZW5jaW5nIHJ1bnRpbWUgYmVoYXZpb3Igd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKzwvbGk+PC91bD4KKzxwPlBhcnQgSUk6IExhbmd1YWdlIFJlZmVyZW5jZQorPC9wPgorPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkZvcnRyYW4tMjAwMy1hbmQtMjAwOC1zdGF0dXMuaHRtbCNGb3J0cmFuLTIwMDMtYW5kLTIwMDgtc3RhdHVzIj5Gb3J0cmFuIDIwMDMgYW5kIDIwMDggc3RhdHVzPC9hPjogICBGb3J0cmFuIDIwMDMgYW5kIDIwMDggZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IEdOVSBGb3J0cmFuLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkNvbXBpbGVyLUNoYXJhY3RlcmlzdGljcy5odG1sI0NvbXBpbGVyLUNoYXJhY3RlcmlzdGljcyI+Q29tcGlsZXIgQ2hhcmFjdGVyaXN0aWNzPC9hPjogICAgICAgVXNlci12aXNpYmxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIAorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iRXh0ZW5zaW9ucy5odG1sI0V4dGVuc2lvbnMiPkV4dGVuc2lvbnM8L2E+OiAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlIGV4dGVuc2lvbnMgaW1wbGVtZW50ZWQgYnkgR05VIEZvcnRyYW4uIAorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nLmh0bWwjTWl4ZWRfMDAyZExhbmd1YWdlLVByb2dyYW1taW5nIj5NaXhlZC1MYW5ndWFnZSBQcm9ncmFtbWluZzwvYT46ICAgICBJbnRlcm9wZXJhYmlsaXR5IHdpdGggQworPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iSW50cmluc2ljLVByb2NlZHVyZXMuaHRtbCNJbnRyaW5zaWMtUHJvY2VkdXJlcyI+SW50cmluc2ljIFByb2NlZHVyZXM8L2E+OiAgSW50cmluc2ljIHByb2NlZHVyZXMgc3VwcG9ydGVkIGJ5IEdOVSBGb3J0cmFuLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkludHJpbnNpYy1Nb2R1bGVzLmh0bWwjSW50cmluc2ljLU1vZHVsZXMiPkludHJpbnNpYyBNb2R1bGVzPC9hPjogICAgIEludHJpbnNpYyBtb2R1bGVzIHN1cHBvcnRlZCBieSBHTlUgRm9ydHJhbi4KKworPGxpPjxhIGhyZWY9IkNvbnRyaWJ1dGluZy5odG1sI0NvbnRyaWJ1dGluZyI+Q29udHJpYnV0aW5nPC9hPjogICAgICAgICAgSG93IHlvdSBjYW4gaGVscC4gCis8bGk+PGEgaHJlZj0iQ29weWluZy5odG1sI0NvcHlpbmciPkNvcHlpbmc8L2E+OiAgICAgICAgICAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNheXMKKyAgICAgICAgICAgICAgICAgICAgICAgICBob3cgeW91IGNhbiBjb3B5IGFuZCBzaGFyZSBHTlUgRm9ydHJhbi4gCis8bGk+PGEgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHlvdSBjYW4gY29weSBhbmQgc2hhcmUgdGhpcyBtYW51YWwuIAorPGxpPjxhIGhyZWY9IkZ1bmRpbmcuaHRtbCNGdW5kaW5nIj5GdW5kaW5nPC9hPjogICAgICAgICAgICAgICBIb3cgdG8gaGVscCBhc3N1cmUgY29udGludWVkIHdvcmsgZm9yIGZyZWUgc29mdHdhcmUuIAorPGxpPjxhIGhyZWY9Ik9wdGlvbi1JbmRleC5odG1sI09wdGlvbi1JbmRleCI+T3B0aW9uIEluZGV4PC9hPjogICAgICAgICAgSW5kZXggb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMKKzxsaT48YSBocmVmPSJLZXl3b3JkLUluZGV4Lmh0bWwjS2V5d29yZC1JbmRleCI+S2V5d29yZCBJbmRleDwvYT46ICAgICAgICAgSW5kZXggb2YgY29uY2VwdHMKKzwvdWw+CisKKzwhLS0gIC0tPgorPCEtLSBJbnRyb2R1Y3Rpb24gLS0+Cis8IS0tICAtLT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0FuYWx5c2lzLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0FuYWx5c2lzLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmNiNTNlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvQW5hbHlzaXMtT3B0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTE5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BbmFseXNpcyBPcHRpb25zIC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik91dHB1dC1PcHRpb25zLmh0bWwjT3V0cHV0LU9wdGlvbnMiIHRpdGxlPSJPdXRwdXQgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1pc2NlbGxhbmVvdXMtT3B0aW9ucy5odG1sI01pc2NlbGxhbmVvdXMtT3B0aW9ucyIgdGl0bGU9Ik1pc2NlbGxhbmVvdXMgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBbmFseXNpcy1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1pc2NlbGxhbmVvdXMtT3B0aW9ucy5odG1sI01pc2NlbGxhbmVvdXMtT3B0aW9ucyI+TWlzY2VsbGFuZW91cyBPcHRpb25zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3V0cHV0LU9wdGlvbnMuaHRtbCNPdXRwdXQtT3B0aW9ucyI+T3V0cHV0IE9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMiBBbmFseXNpcyBPcHRpb25zPC9oMz4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWE8L2NvZGU+PGR0Pjxjb2RlPi0tbm8tc3RhdGljPC9jb2RlPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gY2F1c2VzIDxjb2RlPmdwcm9mPC9jb2RlPiB0byBzdXBwcmVzcyB0aGUgcHJpbnRpbmcgb2YKK3N0YXRpY2FsbHkgZGVjbGFyZWQgKHByaXZhdGUpIGZ1bmN0aW9ucy4gIChUaGVzZSBhcmUgZnVuY3Rpb25zIHdob3NlCituYW1lcyBhcmUgbm90IGxpc3RlZCBhcyBnbG9iYWwsIGFuZCB3aGljaCBhcmUgbm90IHZpc2libGUgb3V0c2lkZSB0aGUKK2ZpbGUvZnVuY3Rpb24vYmxvY2sgd2hlcmUgdGhleSB3ZXJlIGRlZmluZWQuKSAgVGltZSBzcGVudCBpbiB0aGVzZQorZnVuY3Rpb25zLCBjYWxscyB0by9mcm9tIHRoZW0sIGV0Yy4sIHdpbGwgYWxsIGJlIGF0dHJpYnV0ZWQgdG8gdGhlCitmdW5jdGlvbiB0aGF0IHdhcyBsb2FkZWQgZGlyZWN0bHkgYmVmb3JlIGl0IGluIHRoZSBleGVjdXRhYmxlIGZpbGUuIAorPCEtLSBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBVbml4IEBjb2Rle2dwcm9mfSwgYnV0IGEgYmFkIGlkZWEuIC0tPgorVGhpcyBvcHRpb24gYWZmZWN0cyBib3RoIHRoZSBmbGF0IHByb2ZpbGUgYW5kIHRoZSBjYWxsIGdyYXBoLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWM8L2NvZGU+PGR0Pjxjb2RlPi0tc3RhdGljLWNhbGwtZ3JhcGg8L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1jPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYXVzZXMgdGhlIGNhbGwgZ3JhcGggb2YgdGhlIHByb2dyYW0gdG8gYmUKK2F1Z21lbnRlZCBieSBhIGhldXJpc3RpYyB3aGljaCBleGFtaW5lcyB0aGUgdGV4dCBzcGFjZSBvZiB0aGUgb2JqZWN0CitmaWxlIGFuZCBpZGVudGlmaWVzIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSBiaW5hcnkgbWFjaGluZSBjb2RlLiAKK1NpbmNlIG5vcm1hbCBjYWxsIGdyYXBoIHJlY29yZHMgYXJlIG9ubHkgZ2VuZXJhdGVkIHdoZW4gZnVuY3Rpb25zIGFyZQorZW50ZXJlZCwgdGhpcyBvcHRpb24gaWRlbnRpZmllcyBjaGlsZHJlbiB0aGF0IGNvdWxkIGhhdmUgYmVlbiBjYWxsZWQsCitidXQgbmV2ZXIgd2VyZS4gIENhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbm90IGNvbXBpbGVkIHdpdGgKK3Byb2ZpbGluZyBlbmFibGVkIGFyZSBhbHNvIGlkZW50aWZpZWQsIGJ1dCBvbmx5IGlmIHN5bWJvbCB0YWJsZQorZW50cmllcyBhcmUgcHJlc2VudCBmb3IgdGhlbS4gCitDYWxscyB0byBkeW5hbWljIGxpYnJhcnkgcm91dGluZXMgYXJlIHR5cGljYWxseSA8ZW0+bm90PC9lbT4gZm91bmQKK2J5IHRoaXMgb3B0aW9uLiAKK1BhcmVudHMgb3IgY2hpbGRyZW4gaWRlbnRpZmllZCB2aWEgdGhpcyBoZXVyaXN0aWMKK2FyZSBpbmRpY2F0ZWQgaW4gdGhlIGNhbGwgZ3JhcGggd2l0aCBjYWxsIGNvdW50cyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tRDwvY29kZT48ZHQ+PGNvZGU+LS1pZ25vcmUtbm9uLWZ1bmN0aW9uczwvY29kZT48ZGQ+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gaWdub3JlIHN5bWJvbHMgd2hpY2gKK2FyZSBub3Qga25vd24gdG8gYmUgZnVuY3Rpb25zLiAgVGhpcyBvcHRpb24gd2lsbCBnaXZlIG1vcmUgYWNjdXJhdGUKK3Byb2ZpbGUgZGF0YSBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIHN1cHBvcnRlZCAoU29sYXJpcyBhbmQgSFBVWCBmb3IKK2V4YW1wbGUpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWsgPC9jb2RlPjx2YXI+ZnJvbTwvdmFyPjxjb2RlPi88L2NvZGU+PHZhcj50bzwvdmFyPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tazwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gYWxsb3dzIHlvdSB0byBkZWxldGUgZnJvbSB0aGUgY2FsbCBncmFwaCBhbnkgYXJjcyBmcm9tCitzeW1ib2xzIG1hdGNoaW5nIHN5bXNwZWMgPHZhcj5mcm9tPC92YXI+IHRvIHRob3NlIG1hdGNoaW5nIHN5bXNwZWMgPHZhcj50bzwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1sPC9jb2RlPjxkdD48Y29kZT4tLWxpbmU8L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1sPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBlbmFibGVzIGxpbmUtYnktbGluZSBwcm9maWxpbmcsIHdoaWNoIGNhdXNlcworaGlzdG9ncmFtIGhpdHMgdG8gYmUgY2hhcmdlZCB0byBpbmRpdmlkdWFsIHNvdXJjZSBjb2RlIGxpbmVzLAoraW5zdGVhZCBvZiBmdW5jdGlvbnMuICBUaGlzIGZlYXR1cmUgb25seSB3b3JrcyB3aXRoIHByb2dyYW1zIGNvbXBpbGVkCitieSBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgPGNvZGU+Z2NjPC9jb2RlPiBjb21waWxlci4gIE5ld2VyIHZlcnNpb25zIG9mCis8Y29kZT5nY2M8L2NvZGU+IGFyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIDxjb2RlPmdjb3Y8L2NvZGU+IHRvb2wgaW5zdGVhZC4KKworICAgICA8cD5JZiB0aGUgcHJvZ3JhbSB3YXMgY29tcGlsZWQgd2l0aCBiYXNpYy1ibG9jayBjb3VudGluZyBlbmFibGVkLAordGhpcyBvcHRpb24gd2lsbCBhbHNvIGlkZW50aWZ5IGhvdyBtYW55IHRpbWVzIGVhY2ggbGluZSBvZgorY29kZSB3YXMgZXhlY3V0ZWQuIAorV2hpbGUgbGluZS1ieS1saW5lIHByb2ZpbGluZyBjYW4gaGVscCBpc29sYXRlIHdoZXJlIGluIGEgbGFyZ2UgZnVuY3Rpb24KK2EgcHJvZ3JhbSBpcyBzcGVuZGluZyBpdHMgdGltZSwgaXQgYWxzbyBzaWduaWZpY2FudGx5IGluY3JlYXNlcwordGhlIHJ1bm5pbmcgdGltZSBvZiA8Y29kZT5ncHJvZjwvY29kZT4sIGFuZCBtYWduaWZpZXMgc3RhdGlzdGljYWwKK2luYWNjdXJhY2llcy4gCitTZWUgPGEgaHJlZj0iU2FtcGxpbmctRXJyb3IuaHRtbCNTYW1wbGluZy1FcnJvciI+U3RhdGlzdGljYWwgU2FtcGxpbmcgRXJyb3I8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LW0gPC9jb2RlPjx2YXI+bnVtPC92YXI+PGR0Pjxjb2RlPi0tbWluLWNvdW50PTwvY29kZT48dmFyPm51bTwvdmFyPjxkZD5UaGlzIG9wdGlvbiBhZmZlY3RzIGV4ZWN1dGlvbiBjb3VudCBvdXRwdXQgb25seS4gCitTeW1ib2xzIHRoYXQgYXJlIGV4ZWN1dGVkIGxlc3MgdGhhbiA8dmFyPm51bTwvdmFyPiB0aW1lcyBhcmUgc3VwcHJlc3NlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1uPC9jb2RlPjx2YXI+c3ltc3BlYzwvdmFyPjxkdD48Y29kZT4tLXRpbWU9PC9jb2RlPjx2YXI+c3ltc3BlYzwvdmFyPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gY2F1c2VzIDxjb2RlPmdwcm9mPC9jb2RlPiwgaW4gaXRzIGNhbGwgZ3JhcGggYW5hbHlzaXMsCit0byBvbmx5IHByb3BhZ2F0ZSB0aW1lcyBmb3Igc3ltYm9scyBtYXRjaGluZyA8dmFyPnN5bXNwZWM8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tTjwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48ZHQ+PGNvZGU+LS1uby10aW1lPTwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48ZGQ+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW48L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4sIGluIGl0cyBjYWxsIGdyYXBoIGFuYWx5c2lzLAorbm90IHRvIHByb3BhZ2F0ZSB0aW1lcyBmb3Igc3ltYm9scyBtYXRjaGluZyA8dmFyPnN5bXNwZWM8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tUzwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGR0Pjxjb2RlPi0tZXh0ZXJuYWwtc3ltYm9sLXRhYmxlPTwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1TPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYXVzZXMgPGNvZGU+Z3Byb2Y8L2NvZGU+IHRvIHJlYWQgYW4gZXh0ZXJuYWwgc3ltYm9sIHRhYmxlCitmaWxlLCBzdWNoIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4vcHJvYy9rYWxsc3ltczwvc3Bhbj48L3NhbXA+LCByYXRoZXIgdGhhbiByZWFkIHRoZSBzeW1ib2wgdGFibGUKK2Zyb20gdGhlIGdpdmVuIG9iamVjdCBmaWxlICh0aGUgZGVmYXVsdCBpcyA8Y29kZT5hLm91dDwvY29kZT4pLiBUaGlzIGlzIHVzZWZ1bAorZm9yIHByb2ZpbGluZyBrZXJuZWwgbW9kdWxlcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi16PC9jb2RlPjxkdD48Y29kZT4tLWRpc3BsYXktdW51c2VkLWZ1bmN0aW9uczwvY29kZT48ZGQ+SWYgeW91IGdpdmUgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCA8Y29kZT5ncHJvZjwvY29kZT4gd2lsbCBtZW50aW9uIGFsbAorZnVuY3Rpb25zIGluIHRoZSBmbGF0IHByb2ZpbGUsIGV2ZW4gdGhvc2UgdGhhdCB3ZXJlIG5ldmVyIGNhbGxlZCwgYW5kCit0aGF0IGhhZCBubyB0aW1lIHNwZW50IGluIHRoZW0uICBUaGlzIGlzIHVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gZm9yIGRpc2NvdmVyaW5nIHdoaWNoIHJvdXRpbmVzIHdlcmUgbmV2ZXIgY2FsbGVkLgorCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9Bbm5vdGF0ZWQtU291cmNlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9Bbm5vdGF0ZWQtU291cmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0MzQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0Fubm90YXRlZC1Tb3VyY2UuaHRtbApAQCAtMCwwICsxLDEyOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QW5ub3RhdGVkIFNvdXJjZSAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiIHRpdGxlPSJPdXRwdXQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMaW5lXzAwMmRieV8wMDJkbGluZS5odG1sI0xpbmVfMDAyZGJ5XzAwMmRsaW5lIiB0aXRsZT0iTGluZS1ieS1saW5lIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFubm90YXRlZC1Tb3VyY2UiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMaW5lXzAwMmRieV8wMDJkbGluZS5odG1sI0xpbmVfMDAyZGJ5XzAwMmRsaW5lIj5MaW5lLWJ5LWxpbmU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiPk91dHB1dDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuNCBUaGUgQW5ub3RhdGVkIFNvdXJjZSBMaXN0aW5nPC9oMz4KKworPHA+PGNvZGU+Z3Byb2Y8L2NvZGU+J3MgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdHJpZ2dlcnMgYW4gYW5ub3RhdGVkIHNvdXJjZSBsaXN0aW5nLAord2hpY2ggbGlzdHMgdGhlIHByb2dyYW0ncyBzb3VyY2UgY29kZSwgZWFjaCBmdW5jdGlvbiBsYWJlbGVkIHdpdGggdGhlCitudW1iZXIgb2YgdGltZXMgaXQgd2FzIGNhbGxlZC4gIFlvdSBtYXkgYWxzbyBuZWVkIHRvIHNwZWNpZnkgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1JPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiwgaWYgPGNvZGU+Z3Byb2Y8L2NvZGU+IGNhbid0IGZpbmQgdGhlIHNvdXJjZSBjb2RlIGZpbGVzLgorCisgICA8cD5XaXRoIG9sZGVyIHZlcnNpb25zIG9mIDxjb2RlPmdjYzwvY29kZT4gY29tcGlsaW5nIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nY2MgLi4uIC1nCistcGcgLWE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXVnbWVudHMgeW91ciBwcm9ncmFtIHdpdGggYmFzaWMtYmxvY2sgY291bnRpbmcgY29kZSwgaW4KK2FkZGl0aW9uIHRvIGZ1bmN0aW9uIGNvdW50aW5nIGNvZGUuICBUaGlzIGVuYWJsZXMgPGNvZGU+Z3Byb2Y8L2NvZGU+IHRvCitkZXRlcm1pbmUgaG93IG1hbnkgdGltZXMgZWFjaCBsaW5lIG9mIGNvZGUgd2FzIGV4ZWN1dGVkLiAgV2l0aCBuZXdlcgordmVyc2lvbnMgb2YgPGNvZGU+Z2NjPC9jb2RlPiBzdXBwb3J0IGZvciBkaXNwbGF5aW5nIGJhc2ljLWJsb2NrIGNvdW50cyBpcworcHJvdmlkZWQgYnkgdGhlIDxjb2RlPmdjb3Y8L2NvZGU+IHByb2dyYW0uCisKKyAgIDxwPkZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLCB0YWtlbiBmcm9tIGd6aXAsCit3aXRoIGxpbmUgbnVtYmVycyBhZGRlZDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAxIHVsZyB1cGRjcmMocywgbikKKyAgICAgIDIgICAgIHVjaCAqczsKKyAgICAgIDMgICAgIHVuc2lnbmVkIG47CisgICAgICA0IHsKKyAgICAgIDUgICAgIHJlZ2lzdGVyIHVsZyBjOworICAgICAgNgorICAgICAgNyAgICAgc3RhdGljIHVsZyBjcmMgPSAodWxnKTB4ZmZmZmZmZmZMOworICAgICAgOAorICAgICAgOSAgICAgaWYgKHMgPT0gTlVMTCkgeworICAgICAxMCAgICAgICAgIGMgPSAweGZmZmZmZmZmTDsKKyAgICAgMTEgICAgIH0gZWxzZSB7CisgICAgIDEyICAgICAgICAgYyA9IGNyYzsKKyAgICAgMTMgICAgICAgICBpZiAobikgZG8geworICAgICAxNCAgICAgICAgICAgICBjID0gY3JjXzMyX3RhYlsuLi5dOworICAgICAxNSAgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgIDE2ICAgICB9CisgICAgIDE3ICAgICBjcmMgPSBjOworICAgICAxOCAgICAgcmV0dXJuIGMgXiAweGZmZmZmZmZmTDsKKyAgICAgMTkgfQorICAgICAKKzwvcHJlPgorICAgPHA+PGNvZGU+dXBkY3JjPC9jb2RlPiBoYXMgYXQgbGVhc3QgZml2ZSBiYXNpYy1ibG9ja3MuIAorT25lIGlzIHRoZSBmdW5jdGlvbiBpdHNlbGYuICBUaGUKKzxjb2RlPmlmPC9jb2RlPiBzdGF0ZW1lbnQgb24gbGluZSA5IGdlbmVyYXRlcyB0d28gbW9yZSBiYXNpYy1ibG9ja3MsIG9uZQorZm9yIGVhY2ggYnJhbmNoIG9mIHRoZSA8Y29kZT5pZjwvY29kZT4uICBBIGZvdXJ0aCBiYXNpYy1ibG9jayByZXN1bHRzIGZyb20KK3RoZSA8Y29kZT5pZjwvY29kZT4gb24gbGluZSAxMywgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgPGNvZGU+ZG88L2NvZGU+IGxvb3AgZm9ybQordGhlIGZpZnRoIGJhc2ljLWJsb2NrLiAgVGhlIGNvbXBpbGVyIG1heSBhbHNvIGdlbmVyYXRlIGFkZGl0aW9uYWwKK2Jhc2ljLWJsb2NrcyB0byBoYW5kbGUgdmFyaW91cyBzcGVjaWFsIGNhc2VzLgorCisgICA8cD5BIHByb2dyYW0gYXVnbWVudGVkIGZvciBiYXNpYy1ibG9jayBjb3VudGluZyBjYW4gYmUgYW5hbHl6ZWQgd2l0aAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ncHJvZiAtbCAtQTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4teDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gaXMgYWxzbyBoZWxwZnVsLAordG8gZW5zdXJlIHRoYXQgZWFjaCBsaW5lIG9mIGNvZGUgaXMgbGFiZWxlZCBhdCBsZWFzdCBvbmNlLiAKK0hlcmUgaXMgPGNvZGU+dXBkY3JjPC9jb2RlPidzCithbm5vdGF0ZWQgc291cmNlIGxpc3RpbmcgZm9yIGEgc2FtcGxlIDxjb2RlPmd6aXA8L2NvZGU+IHJ1bjoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAgICAgICB1bGcgdXBkY3JjKHMsIG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgdWNoICpzOworICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG47CisgICAgICAgICAgICAgICAgIDIgLSZndDt7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgdWxnIGM7CisgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB1bGcgY3JjID0gKHVsZykweGZmZmZmZmZmTDsKKyAgICAgCisgICAgICAgICAgICAgICAgIDIgLSZndDsgICAgaWYgKHMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAxIC0mZ3Q7ICAgICAgICBjID0gMHhmZmZmZmZmZkw7CisgICAgICAgICAgICAgICAgIDEgLSZndDsgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgMSAtJmd0OyAgICAgICAgYyA9IGNyYzsKKyAgICAgICAgICAgICAgICAgMSAtJmd0OyAgICAgICAgaWYgKG4pIGRvIHsKKyAgICAgICAgICAgICAyNjMxMiAtJmd0OyAgICAgICAgICAgIGMgPSBjcmNfMzJfdGFiWy4uLl07CisgICAgIDI2MzEyLDEsMjYzMTEgLSZndDsgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAyIC0mZ3Q7ICAgIGNyYyA9IGM7CisgICAgICAgICAgICAgICAgIDIgLSZndDsgICAgcmV0dXJuIGMgXiAweGZmZmZmZmZmTDsKKyAgICAgICAgICAgICAgICAgMiAtJmd0O30KKzwvcHJlPgorICAgPHA+SW4gdGhpcyBleGFtcGxlLCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB0d2ljZSwgcGFzc2luZyBvbmNlIHRocm91Z2gKK2VhY2ggYnJhbmNoIG9mIHRoZSA8Y29kZT5pZjwvY29kZT4gc3RhdGVtZW50LiAgVGhlIGJvZHkgb2YgdGhlIDxjb2RlPmRvPC9jb2RlPgorbG9vcCB3YXMgZXhlY3V0ZWQgYSB0b3RhbCBvZiAyNjMxMiB0aW1lcy4gIE5vdGUgaG93IHRoZSA8Y29kZT53aGlsZTwvY29kZT4KK3N0YXRlbWVudCBpcyBhbm5vdGF0ZWQuICBJdCBiZWdhbiBleGVjdXRpb24gMjYzMTIgdGltZXMsIG9uY2UgZm9yCitlYWNoIGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBsb29wLiAgT25lIG9mIHRob3NlIHRpbWVzICh0aGUgbGFzdCB0aW1lKQoraXQgZXhpdGVkLCB3aGlsZSBpdCBicmFuY2hlZCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgMjYzMTEgdGltZXMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0Fzc3VtcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9Bc3N1bXB0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDZjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9Bc3N1bXB0aW9ucy5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFzc3VtcHRpb25zIC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkluYWNjdXJhY3kuaHRtbCNJbmFjY3VyYWN5IiB0aXRsZT0iSW5hY2N1cmFjeSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNhbXBsaW5nLUVycm9yLmh0bWwjU2FtcGxpbmctRXJyb3IiIHRpdGxlPSJTYW1wbGluZyBFcnJvciI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJBc3N1bXB0aW9ucyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNhbXBsaW5nLUVycm9yLmh0bWwjU2FtcGxpbmctRXJyb3IiPlNhbXBsaW5nIEVycm9yPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW5hY2N1cmFjeS5odG1sI0luYWNjdXJhY3kiPkluYWNjdXJhY3k8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjIgRXN0aW1hdGluZyA8Y29kZT5jaGlsZHJlbjwvY29kZT4gVGltZXM8L2gzPgorCis8cD5Tb21lIG9mIHRoZSBmaWd1cmVzIGluIHRoZSBjYWxsIGdyYXBoIGFyZSBlc3RpbWF0ZXMmbWRhc2g7Zm9yIGV4YW1wbGUsIHRoZQorPGNvZGU+Y2hpbGRyZW48L2NvZGU+IHRpbWUgdmFsdWVzIGFuZCBhbGwgdGhlIHRpbWUgZmlndXJlcyBpbiBjYWxsZXIgYW5kCitzdWJyb3V0aW5lIGxpbmVzLgorCisgICA8cD5UaGVyZSBpcyBubyBkaXJlY3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgbWVhc3VyZW1lbnRzIGluIHRoZSBwcm9maWxlCitkYXRhIGl0c2VsZi4gIEluc3RlYWQsIDxjb2RlPmdwcm9mPC9jb2RlPiBlc3RpbWF0ZXMgdGhlbSBieSBtYWtpbmcgYW4gYXNzdW1wdGlvbgorYWJvdXQgeW91ciBwcm9ncmFtIHRoYXQgbWlnaHQgb3IgbWlnaHQgbm90IGJlIHRydWUuCisKKyAgIDxwPlRoZSBhc3N1bXB0aW9uIG1hZGUgaXMgdGhhdCB0aGUgYXZlcmFnZSB0aW1lIHNwZW50IGluIGVhY2ggY2FsbCB0byBhbnkKK2Z1bmN0aW9uIDxjb2RlPmZvbzwvY29kZT4gaXMgbm90IGNvcnJlbGF0ZWQgd2l0aCB3aG8gY2FsbGVkIDxjb2RlPmZvbzwvY29kZT4uICBJZgorPGNvZGU+Zm9vPC9jb2RlPiB1c2VkIDUgc2Vjb25kcyBpbiBhbGwsIGFuZCAyLzUgb2YgdGhlIGNhbGxzIHRvIDxjb2RlPmZvbzwvY29kZT4gY2FtZQorZnJvbSA8Y29kZT5hPC9jb2RlPiwgdGhlbiA8Y29kZT5mb288L2NvZGU+IGNvbnRyaWJ1dGVzIDIgc2Vjb25kcyB0byA8Y29kZT5hPC9jb2RlPidzCis8Y29kZT5jaGlsZHJlbjwvY29kZT4gdGltZSwgYnkgYXNzdW1wdGlvbi4KKworICAgPHA+VGhpcyBhc3N1bXB0aW9uIGlzIHVzdWFsbHkgdHJ1ZSBlbm91Z2gsIGJ1dCBmb3Igc29tZSBwcm9ncmFtcyBpdCBpcyBmYXIKK2Zyb20gdHJ1ZS4gIFN1cHBvc2UgdGhhdCA8Y29kZT5mb288L2NvZGU+IHJldHVybnMgdmVyeSBxdWlja2x5IHdoZW4gaXRzIGFyZ3VtZW50CitpcyB6ZXJvOyBzdXBwb3NlIHRoYXQgPGNvZGU+YTwvY29kZT4gYWx3YXlzIHBhc3NlcyB6ZXJvIGFzIGFuIGFyZ3VtZW50LCB3aGlsZQorb3RoZXIgY2FsbGVycyBvZiA8Y29kZT5mb288L2NvZGU+IHBhc3Mgb3RoZXIgYXJndW1lbnRzLiAgSW4gdGhpcyBwcm9ncmFtLCBhbGwgdGhlCit0aW1lIHNwZW50IGluIDxjb2RlPmZvbzwvY29kZT4gaXMgaW4gdGhlIGNhbGxzIGZyb20gY2FsbGVycyBvdGhlciB0aGFuIDxjb2RlPmE8L2NvZGU+LiAKK0J1dCA8Y29kZT5ncHJvZjwvY29kZT4gaGFzIG5vIHdheSBvZiBrbm93aW5nIHRoaXM7IGl0IHdpbGwgYmxpbmRseSBhbmQKK2luY29ycmVjdGx5IGNoYXJnZSAyIHNlY29uZHMgb2YgdGltZSBpbiA8Y29kZT5mb288L2NvZGU+IHRvIHRoZSBjaGlsZHJlbiBvZgorPGNvZGU+YTwvY29kZT4uCisKKzwhLS0gRklYTUUgLSBoYXMgdGhpcyBiZWVuIGZpeGVkPyAtLT4KKyAgIDxwPldlIGhvcGUgc29tZSBkYXkgdG8gcHV0IG1vcmUgY29tcGxldGUgZGF0YSBpbnRvIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nbW9uLm91dDwvc3Bhbj48L3NhbXA+LCBzbyB0aGF0Cit0aGlzIGFzc3VtcHRpb24gaXMgbm8gbG9uZ2VyIG5lZWRlZCwgaWYgd2UgY2FuIGZpZ3VyZSBvdXQgaG93LiAgRm9yIHRoZQorbm92aWNlLCB0aGUgZXN0aW1hdGVkIGZpZ3VyZXMgYXJlIHVzdWFsbHkgbW9yZSB1c2VmdWwgdGhhbiBtaXNsZWFkaW5nLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9DYWxsLUdyYXBoLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9DYWxsLUdyYXBoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjZTg4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0NhbGwtR3JhcGguaHRtbApAQCAtMCwwICsxLDExMiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q2FsbCBHcmFwaCAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiIHRpdGxlPSJPdXRwdXQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGbGF0LVByb2ZpbGUuaHRtbCNGbGF0LVByb2ZpbGUiIHRpdGxlPSJGbGF0IFByb2ZpbGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMaW5lXzAwMmRieV8wMDJkbGluZS5odG1sI0xpbmVfMDAyZGJ5XzAwMmRsaW5lIiB0aXRsZT0iTGluZS1ieS1saW5lIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNhbGwtR3JhcGgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTGluZV8wMDJkYnlfMDAyZGxpbmUuaHRtbCNMaW5lXzAwMmRieV8wMDJkbGluZSI+TGluZS1ieS1saW5lPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRmxhdC1Qcm9maWxlLmh0bWwjRmxhdC1Qcm9maWxlIj5GbGF0IFByb2ZpbGU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiPk91dHB1dDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMiBUaGUgQ2FsbCBHcmFwaDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNhbGwtZ3JhcGgtMiI+PC9hPgorVGhlIDxkZm4+Y2FsbCBncmFwaDwvZGZuPiBzaG93cyBob3cgbXVjaCB0aW1lIHdhcyBzcGVudCBpbiBlYWNoIGZ1bmN0aW9uCithbmQgaXRzIGNoaWxkcmVuLiAgRnJvbSB0aGlzIGluZm9ybWF0aW9uLCB5b3UgY2FuIGZpbmQgZnVuY3Rpb25zIHRoYXQsCit3aGlsZSB0aGV5IHRoZW1zZWx2ZXMgbWF5IG5vdCBoYXZlIHVzZWQgbXVjaCB0aW1lLCBjYWxsZWQgb3RoZXIKK2Z1bmN0aW9ucyB0aGF0IGRpZCB1c2UgdW51c3VhbCBhbW91bnRzIG9mIHRpbWUuCisKKyAgIDxwPkhlcmUgaXMgYSBzYW1wbGUgY2FsbCBmcm9tIGEgc21hbGwgcHJvZ3JhbS4gIFRoaXMgY2FsbCBjYW1lIGZyb20gdGhlCitzYW1lIDxjb2RlPmdwcm9mPC9jb2RlPiBydW4gYXMgdGhlIGZsYXQgcHJvZmlsZSBleGFtcGxlIGluIHRoZSBwcmV2aW91cworc2VjdGlvbi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGdyYW51bGFyaXR5OiBlYWNoIHNhbXBsZSBoaXQgY292ZXJzIDIgYnl0ZShzKSBmb3IgMjAuMDAlIG9mIDAuMDUgc2Vjb25kcworICAgICAKKyAgICAgaW5kZXggJSB0aW1lICAgIHNlbGYgIGNoaWxkcmVuICAgIGNhbGxlZCAgICAgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0O3Nwb250YW5lb3VzJmd0OworICAgICBbMV0gICAgMTAwLjAgICAgMC4wMCAgICAwLjA1ICAgICAgICAgICAgICAgICBzdGFydCBbMV0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wNSAgICAgICAxLzEgICAgICAgICAgIG1haW4gWzJdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8yICAgICAgICAgICBvbl9leGl0IFsyOF0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgICAxLzEgICAgICAgICAgIGV4aXQgWzU5XQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEvMSAgICAgICAgICAgc3RhcnQgWzFdCisgICAgIFsyXSAgICAxMDAuMCAgICAwLjAwICAgIDAuMDUgICAgICAgMSAgICAgICAgIG1haW4gWzJdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDUgICAgICAgMS8xICAgICAgICAgICByZXBvcnQgWzNdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDUgICAgICAgMS8xICAgICAgICAgICBtYWluIFsyXQorICAgICBbM10gICAgMTAwLjAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEgICAgICAgICByZXBvcnQgWzNdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDMgICAgICAgOC84ICAgICAgICAgICB0aW1lbG9jYWwgWzZdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDEgICAgICAgMS8xICAgICAgICAgICBwcmludCBbOV0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMSAgICAgICA5LzkgICAgICAgICAgIGZnZXRzIFsxMl0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgIDEyLzM0ICAgICAgICAgIHN0cm5jbXAgJmx0O2N5Y2xlIDEmZ3Q7IFs0MF0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgICA4LzggICAgICAgICAgIGxvb2t1cCBbMjBdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8xICAgICAgICAgICBmb3BlbiBbMjFdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgOC84ICAgICAgICAgICBjaGV3dGltZSBbMjRdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgOC8xNiAgICAgICAgICBza2lwc3BhY2UgWzQ0XQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBbNF0gICAgIDU5LjggICAgMC4wMSAgICAgICAgMC4wMiAgICAgICA4KzQ3MiAgICAgJmx0O2N5Y2xlIDIgYXMgYSB3aG9sZSZndDsgWzRdCisgICAgICAgICAgICAgICAgICAgICAwLjAxICAgICAgICAwLjAyICAgICAyNDQrMjYwICAgICAgICAgb2ZmdGltZSAmbHQ7Y3ljbGUgMiZndDsgWzddCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgICAgICAwLjAwICAgICAyMzYrMSAgICAgICAgICAgdHpzZXQgJmx0O2N5Y2xlIDImZ3Q7IFsyNl0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzwvcHJlPgorICAgPHA+VGhlIGxpbmVzIGZ1bGwgb2YgZGFzaGVzIGRpdmlkZSB0aGlzIHRhYmxlIGludG8gPGRmbj5lbnRyaWVzPC9kZm4+LCBvbmUgZm9yIGVhY2gKK2Z1bmN0aW9uLiAgRWFjaCBlbnRyeSBoYXMgb25lIG9yIG1vcmUgbGluZXMuCisKKyAgIDxwPkluIGVhY2ggZW50cnksIHRoZSBwcmltYXJ5IGxpbmUgaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB3aXRoIGFuIGluZGV4IG51bWJlcgoraW4gc3F1YXJlIGJyYWNrZXRzLiAgVGhlIGVuZCBvZiB0aGlzIGxpbmUgc2F5cyB3aGljaCBmdW5jdGlvbiB0aGUgZW50cnkgaXMKK2Zvci4gIFRoZSBwcmVjZWRpbmcgbGluZXMgaW4gdGhlIGVudHJ5IGRlc2NyaWJlIHRoZSBjYWxsZXJzIG9mIHRoaXMKK2Z1bmN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGxpbmVzIGRlc2NyaWJlIGl0cyBzdWJyb3V0aW5lcyAoYWxzbyBjYWxsZWQKKzxkZm4+Y2hpbGRyZW48L2Rmbj4gd2hlbiB3ZSBzcGVhayBvZiB0aGUgY2FsbCBncmFwaCkuCisKKyAgIDxwPlRoZSBlbnRyaWVzIGFyZSBzb3J0ZWQgYnkgdGltZSBzcGVudCBpbiB0aGUgZnVuY3Rpb24gYW5kIGl0cyBzdWJyb3V0aW5lcy4KKworICAgPHA+VGhlIGludGVybmFsIHByb2ZpbGluZyBmdW5jdGlvbiA8Y29kZT5tY291bnQ8L2NvZGU+IChzZWUgPGEgaHJlZj0iRmxhdC1Qcm9maWxlLmh0bWwjRmxhdC1Qcm9maWxlIj5UaGUgRmxhdCBQcm9maWxlPC9hPikgaXMgbmV2ZXIgbWVudGlvbmVkIGluIHRoZSBjYWxsIGdyYXBoLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iUHJpbWFyeS5odG1sI1ByaW1hcnkiPlByaW1hcnk8L2E+OiAgICAgICAgRGV0YWlscyBvZiB0aGUgcHJpbWFyeSBsaW5lJ3MgY29udGVudHMuIAorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iQ2FsbGVycy5odG1sI0NhbGxlcnMiPkNhbGxlcnM8L2E+OiAgICAgICAgRGV0YWlscyBvZiBjYWxsZXItbGluZXMnIGNvbnRlbnRzLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlN1YnJvdXRpbmVzLmh0bWwjU3Vicm91dGluZXMiPlN1YnJvdXRpbmVzPC9hPjogICAgRGV0YWlscyBvZiBzdWJyb3V0aW5lLWxpbmVzJyBjb250ZW50cy4gCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJDeWNsZXMuaHRtbCNDeWNsZXMiPkN5Y2xlczwvYT46ICAgICAgICAgV2hlbiB0aGVyZSBhcmUgY3ljbGVzIG9mIHJlY3Vyc2lvbiwKKyAgICAgICAgICAgICAgICAgICBzdWNoIGFzIDxjb2RlPmE8L2NvZGU+IGNhbGxzIDxjb2RlPmI8L2NvZGU+IGNhbGxzIDxjb2RlPmE8L2NvZGU+Li4uIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvQ2FsbGVycy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvQ2FsbGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZGJhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9DYWxsZXJzLmh0bWwKQEAgLTAsMCArMSwxMDEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNhbGxlcnMgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ2FsbC1HcmFwaC5odG1sI0NhbGwtR3JhcGgiIHRpdGxlPSJDYWxsIEdyYXBoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUHJpbWFyeS5odG1sI1ByaW1hcnkiIHRpdGxlPSJQcmltYXJ5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3Vicm91dGluZXMuaHRtbCNTdWJyb3V0aW5lcyIgdGl0bGU9IlN1YnJvdXRpbmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNhbGxlcnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3Vicm91dGluZXMuaHRtbCNTdWJyb3V0aW5lcyI+U3Vicm91dGluZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQcmltYXJ5Lmh0bWwjUHJpbWFyeSI+UHJpbWFyeTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNhbGwtR3JhcGguaHRtbCNDYWxsLUdyYXBoIj5DYWxsIEdyYXBoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+NS4yLjIgTGluZXMgZm9yIGEgRnVuY3Rpb24ncyBDYWxsZXJzPC9oND4KKworPHA+QSBmdW5jdGlvbidzIGVudHJ5IGhhcyBhIGxpbmUgZm9yIGVhY2ggZnVuY3Rpb24gaXQgd2FzIGNhbGxlZCBieS4gCitUaGVzZSBsaW5lcycgZmllbGRzIGNvcnJlc3BvbmQgdG8gdGhlIGZpZWxkcyBvZiB0aGUgcHJpbWFyeSBsaW5lLCBidXQKK3RoZWlyIG1lYW5pbmdzIGFyZSBkaWZmZXJlbnQgYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW5jZSBpbiBjb250ZXh0LgorCisgICA8cD5Gb3IgcmVmZXJlbmNlLCB3ZSByZXBlYXQgdHdvIGxpbmVzIGZyb20gdGhlIGVudHJ5IGZvciB0aGUgZnVuY3Rpb24KKzxjb2RlPnJlcG9ydDwvY29kZT4sIHRoZSBwcmltYXJ5IGxpbmUgYW5kIG9uZSBjYWxsZXItbGluZSBwcmVjZWRpbmcgaXQsIHRvZ2V0aGVyCit3aXRoIHRoZSBoZWFkaW5nIGxpbmUgdGhhdCBzaG93cyB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGluZGV4ICAlIHRpbWUgICAgc2VsZiAgY2hpbGRyZW4gY2FsbGVkICAgICBuYW1lCisgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEvMSAgICAgICAgICAgbWFpbiBbMl0KKyAgICAgWzNdICAgIDEwMC4wICAgIDAuMDAgICAgMC4wNSAgICAgICAxICAgICAgICAgcmVwb3J0IFszXQorPC9wcmU+CisgICA8cD5IZXJlIGFyZSB0aGUgbWVhbmluZ3Mgb2YgdGhlIGZpZWxkcyBpbiB0aGUgY2FsbGVyLWxpbmUgZm9yIDxjb2RlPnJlcG9ydDwvY29kZT4KK2NhbGxlZCBmcm9tIDxjb2RlPm1haW48L2NvZGU+OgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5zZWxmPC9jb2RlPjxkZD5BbiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gPGNvZGU+cmVwb3J0PC9jb2RlPiBpdHNlbGYgd2hlbiBpdCB3YXMKK2NhbGxlZCBmcm9tIDxjb2RlPm1haW48L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hpbGRyZW48L2NvZGU+PGRkPkFuIGVzdGltYXRlIG9mIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCBpbiBzdWJyb3V0aW5lcyBvZiA8Y29kZT5yZXBvcnQ8L2NvZGU+Cit3aGVuIDxjb2RlPnJlcG9ydDwvY29kZT4gd2FzIGNhbGxlZCBmcm9tIDxjb2RlPm1haW48L2NvZGU+LgorCisgICAgIDxwPlRoZSBzdW0gb2YgdGhlIDxjb2RlPnNlbGY8L2NvZGU+IGFuZCA8Y29kZT5jaGlsZHJlbjwvY29kZT4gZmllbGRzIGlzIGFuIGVzdGltYXRlCitvZiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd2l0aGluIGNhbGxzIHRvIDxjb2RlPnJlcG9ydDwvY29kZT4gZnJvbSA8Y29kZT5tYWluPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNhbGxlZDwvY29kZT48ZGQ+VHdvIG51bWJlcnM6IHRoZSBudW1iZXIgb2YgdGltZXMgPGNvZGU+cmVwb3J0PC9jb2RlPiB3YXMgY2FsbGVkIGZyb20gPGNvZGU+bWFpbjwvY29kZT4sCitmb2xsb3dlZCBieSB0aGUgdG90YWwgbnVtYmVyIG9mIG5vbi1yZWN1cnNpdmUgY2FsbHMgdG8gPGNvZGU+cmVwb3J0PC9jb2RlPiBmcm9tCithbGwgaXRzIGNhbGxlcnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5uYW1lIGFuZCBpbmRleCBudW1iZXI8L2NvZGU+PGRkPlRoZSBuYW1lIG9mIHRoZSBjYWxsZXIgb2YgPGNvZGU+cmVwb3J0PC9jb2RlPiB0byB3aGljaCB0aGlzIGxpbmUgYXBwbGllcywKK2ZvbGxvd2VkIGJ5IHRoZSBjYWxsZXIncyBpbmRleCBudW1iZXIuCisKKyAgICAgPHA+Tm90IGFsbCBmdW5jdGlvbnMgaGF2ZSBlbnRyaWVzIGluIHRoZSBjYWxsIGdyYXBoOyBzb21lCitvcHRpb25zIHRvIDxjb2RlPmdwcm9mPC9jb2RlPiByZXF1ZXN0IHRoZSBvbWlzc2lvbiBvZiBjZXJ0YWluIGZ1bmN0aW9ucy4gCitXaGVuIGEgY2FsbGVyIGhhcyBubyBlbnRyeSBvZiBpdHMgb3duLCBpdCBzdGlsbCBoYXMgY2FsbGVyLWxpbmVzCitpbiB0aGUgZW50cmllcyBvZiB0aGUgZnVuY3Rpb25zIGl0IGNhbGxzLgorCisgICAgIDxwPklmIHRoZSBjYWxsZXIgaXMgcGFydCBvZiBhIHJlY3Vyc2lvbiBjeWNsZSwgdGhlIGN5Y2xlIG51bWJlciBpcworcHJpbnRlZCBiZXR3ZWVuIHRoZSBuYW1lIGFuZCB0aGUgaW5kZXggbnVtYmVyLiAKKzwvZGw+CisKKyAgIDxwPklmIHRoZSBpZGVudGl0eSBvZiB0aGUgY2FsbGVycyBvZiBhIGZ1bmN0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCBhCitkdW1teSBjYWxsZXItbGluZSBpcyBwcmludGVkIHdoaWNoIGhhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDtzcG9udGFuZW91cyZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgdGhlCismbGRxdW87Y2FsbGVyJ3MgbmFtZSZyZHF1bzsgYW5kIGFsbCBvdGhlciBmaWVsZHMgYmxhbmsuICBUaGlzIGNhbiBoYXBwZW4gZm9yCitzaWduYWwgaGFuZGxlcnMuIAorPCEtLSBXaGF0IGlmIHNvbWUgY2FsbHMgaGF2ZSBkZXRlcm1pbmFibGUgY2FsbGVycycgbmFtZXMgYnV0IG5vdCBhbGw/IC0tPgorPCEtLSBGSVhNRSAtIHN0aWxsIHJlbGV2YW50PyAtLT4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvQ29tcGlsaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9Db21waWxpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRjYWU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvQ29tcGlsaW5nLmh0bWwKQEAgLTAsMCArMSwxMzcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkNvbXBpbGluZyAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkludHJvZHVjdGlvbi5odG1sI0ludHJvZHVjdGlvbiIgdGl0bGU9IkludHJvZHVjdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkV4ZWN1dGluZy5odG1sI0V4ZWN1dGluZyIgdGl0bGU9IkV4ZWN1dGluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJDb21waWxpbmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXhlY3V0aW5nLmh0bWwjRXhlY3V0aW5nIj5FeGVjdXRpbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4yIENvbXBpbGluZyBhIFByb2dyYW0gZm9yIFByb2ZpbGluZzwvaDI+CisKKzxwPlRoZSBmaXJzdCBzdGVwIGluIGdlbmVyYXRpbmcgcHJvZmlsZSBpbmZvcm1hdGlvbiBmb3IgeW91ciBwcm9ncmFtIGlzCit0byBjb21waWxlIGFuZCBsaW5rIGl0IHdpdGggcHJvZmlsaW5nIGVuYWJsZWQuCisKKyAgIDxwPlRvIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBmb3IgcHJvZmlsaW5nLCBzcGVjaWZ5IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gd2hlbgoreW91IHJ1biB0aGUgY29tcGlsZXIuICAoVGhpcyBpcyBpbiBhZGRpdGlvbiB0byB0aGUgb3B0aW9ucyB5b3Ugbm9ybWFsbHkKK3VzZS4pCisKKyAgIDxwPlRvIGxpbmsgdGhlIHByb2dyYW0gZm9yIHByb2ZpbGluZywgaWYgeW91IHVzZSBhIGNvbXBpbGVyIHN1Y2ggYXMgPGNvZGU+Y2M8L2NvZGU+Cit0byBkbyB0aGUgbGlua2luZywgc2ltcGx5IHNwZWNpZnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcGc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gYWRkaXRpb24gdG8geW91ciB1c3VhbAorb3B0aW9ucy4gIFRoZSBzYW1lIG9wdGlvbiwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcGc8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGFsdGVycyBlaXRoZXIgY29tcGlsYXRpb24gb3IgbGlua2luZwordG8gZG8gd2hhdCBpcyBuZWNlc3NhcnkgZm9yIHByb2ZpbGluZy4gIEhlcmUgYXJlIGV4YW1wbGVzOgorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIGNjIC1nIC1jIG15cHJvZy5jIHV0aWxzLmMgLXBnCisgICAgIGNjIC1vIG15cHJvZyBteXByb2cubyB1dGlscy5vIC1wZworPC9wcmU+CisgICA8cD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcGc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGFsc28gd29ya3Mgd2l0aCBhIGNvbW1hbmQgdGhhdCBib3RoIGNvbXBpbGVzIGFuZCBsaW5rczoKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBjYyAtbyBteXByb2cgbXlwcm9nLmMgdXRpbHMuYyAtZyAtcGcKKzwvcHJlPgorICAgPHA+Tm90ZTogVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXBnPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBtdXN0IGJlIHBhcnQgb2YgeW91ciBjb21waWxhdGlvbiBvcHRpb25zCithcyB3ZWxsIGFzIHlvdXIgbGluayBvcHRpb25zLiAgSWYgaXQgaXMgbm90IHRoZW4gbm8gY2FsbC1ncmFwaCBkYXRhCit3aWxsIGJlIGdhdGhlcmVkIGFuZCB3aGVuIHlvdSBydW4gPGNvZGU+Z3Byb2Y8L2NvZGU+IHlvdSB3aWxsIGdldCBhbiBlcnJvcgorbWVzc2FnZSBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgZ3Byb2Y6IGdtb24ub3V0IGZpbGUgaXMgbWlzc2luZyBjYWxsLWdyYXBoIGRhdGEKKzwvcHJlPgorICAgPHA+SWYgeW91IGFkZCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tUTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzd2l0Y2ggdG8gc3VwcHJlc3MgdGhlIHByaW50aW5nIG9mIHRoZSBjYWxsCitncmFwaCBkYXRhIHlvdSB3aWxsIHN0aWxsIGJlIGFibGUgdG8gc2VlIHRoZSB0aW1lIHNhbXBsZXM6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgRmxhdCBwcm9maWxlOgorICAgICAKKyAgICAgRWFjaCBzYW1wbGUgY291bnRzIGFzIDAuMDEgc2Vjb25kcy4KKyAgICAgICAlICAgY3VtdWxhdGl2ZSAgIHNlbGYgICAgICAgICAgICAgIHNlbGYgICAgIHRvdGFsCisgICAgICB0aW1lICAgc2Vjb25kcyAgIHNlY29uZHMgICAgY2FsbHMgIFRzL2NhbGwgIFRzL2NhbGwgIG5hbWUKKyAgICAgIDQ0LjEyICAgICAgMC4wNyAgICAgMC4wNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemF6TG9vcAorICAgICAgMzUuMjkgICAgICAwLjE0ICAgICAwLjA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluCisgICAgICAyMC41OSAgICAgIDAuMTcgICAgIDAuMDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhek1pbGxpb24KKzwvcHJlPgorICAgPHA+SWYgeW91IHJ1biB0aGUgbGlua2VyIDxjb2RlPmxkPC9jb2RlPiBkaXJlY3RseSBpbnN0ZWFkIG9mIHRocm91Z2ggYSBjb21waWxlcgorc3VjaCBhcyA8Y29kZT5jYzwvY29kZT4sIHlvdSBtYXkgaGF2ZSB0byBzcGVjaWZ5IGEgcHJvZmlsaW5nIHN0YXJ0dXAgZmlsZQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdjcnQwLm88L3NwYW4+PC9zYW1wPiBhcyB0aGUgZmlyc3QgaW5wdXQgZmlsZSBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBzdGFydHVwCitmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jcnQwLm88L3NwYW4+PC9zYW1wPi4gIEluIGFkZGl0aW9uLCB5b3Ugd291bGQgcHJvYmFibHkgd2FudCB0bworc3BlY2lmeSB0aGUgcHJvZmlsaW5nIEMgbGlicmFyeSwgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmNfcC5hPC9zcGFuPjwvc2FtcD4sIGJ5IHdyaXRpbmcKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWxjX3A8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5zdGVhZCBvZiB0aGUgdXN1YWwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbGM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGlzIGlzIG5vdCBhYnNvbHV0ZWx5CituZWNlc3NhcnksIGJ1dCBkb2luZyB0aGlzIGdpdmVzIHlvdSBudW1iZXItb2YtY2FsbHMgaW5mb3JtYXRpb24gZm9yCitzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucyBzdWNoIGFzIDxjb2RlPnJlYWQ8L2NvZGU+IGFuZCA8Y29kZT5vcGVuPC9jb2RlPi4gIEZvcgorZXhhbXBsZToKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBsZCAtbyBteXByb2cgL2xpYi9nY3J0MC5vIG15cHJvZy5vIHV0aWxzLm8gLWxjX3AKKzwvcHJlPgorICAgPHA+SWYgeW91IGFyZSBydW5uaW5nIHRoZSBwcm9ncmFtIG9uIGEgc3lzdGVtIHdoaWNoIHN1cHBvcnRzIHNoYXJlZAorbGlicmFyaWVzIHlvdSBtYXkgcnVuIGludG8gcHJvYmxlbXMgd2l0aCB0aGUgcHJvZmlsaW5nIHN1cHBvcnQgY29kZSBpbgorYSBzaGFyZWQgbGlicmFyeSBiZWluZyBjYWxsZWQgYmVmb3JlIHRoYXQgbGlicmFyeSBoYXMgYmVlbiBmdWxseQoraW5pdGlhbGlzZWQuICBUaGlzIGlzIHVzdWFsbHkgZGV0ZWN0ZWQgYnkgdGhlIHByb2dyYW0gZW5jb3VudGVyaW5nIGEKK3NlZ21lbnRhdGlvbiBmYXVsdCBhcyBzb29uIGFzIGl0IGlzIHJ1bi4gIFRoZSBzb2x1dGlvbiBpcyB0byBsaW5rCithZ2FpbnN0IGEgc3RhdGljIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgY29udGFpbmluZyB0aGUgcHJvZmlsaW5nCitzdXBwb3J0IGNvZGUsIHdoaWNoIGZvciA8Y29kZT5nY2M8L2NvZGU+IHVzZXJzIGNhbiBiZSBkb25lIHZpYSB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXN0YXRpYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1zdGF0aWMtbGliZ2NjPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24uICBGb3IKK2V4YW1wbGU6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgZ2NjIC1nIC1wZyAtc3RhdGljLWxpYmdjYyBteXByb2cuYyB1dGlscy5jIC1vIG15cHJvZworPC9wcmU+CisgICA8cD5JZiB5b3UgY29tcGlsZSBvbmx5IHNvbWUgb2YgdGhlIG1vZHVsZXMgb2YgdGhlIHByb2dyYW0gd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wZzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgeW91CitjYW4gc3RpbGwgcHJvZmlsZSB0aGUgcHJvZ3JhbSwgYnV0IHlvdSB3b24ndCBnZXQgY29tcGxldGUgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBtb2R1bGVzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRob3V0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXBnPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIG9ubHkgaW5mb3JtYXRpb24KK3lvdSBnZXQgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhvc2UgbW9kdWxlcyBpcyB0aGUgdG90YWwgdGltZSBzcGVudCBpbiB0aGVtOwordGhlcmUgaXMgbm8gcmVjb3JkIG9mIGhvdyBtYW55IHRpbWVzIHRoZXkgd2VyZSBjYWxsZWQsIG9yIGZyb20gd2hlcmUuICBUaGlzCit3aWxsIG5vdCBhZmZlY3QgdGhlIGZsYXQgcHJvZmlsZSAoZXhjZXB0IHRoYXQgdGhlIDxjb2RlPmNhbGxzPC9jb2RlPiBmaWVsZCBmb3IKK3RoZSBmdW5jdGlvbnMgd2lsbCBiZSBibGFuayksIGJ1dCB3aWxsIGdyZWF0bHkgcmVkdWNlIHRoZSB1c2VmdWxuZXNzIG9mIHRoZQorY2FsbCBncmFwaC4KKworICAgPHA+SWYgeW91IHdpc2ggdG8gcGVyZm9ybSBsaW5lLWJ5LWxpbmUgcHJvZmlsaW5nIHlvdSBzaG91bGQgdXNlIHRoZQorPGNvZGU+Z2NvdjwvY29kZT4gdG9vbCBpbnN0ZWFkIG9mIDxjb2RlPmdwcm9mPC9jb2RlPi4gIFNlZSB0aGF0IHRvb2wncyBtYW51YWwgb3IKK2luZm8gcGFnZXMgZm9yIG1vcmUgZGV0YWlscyBvZiBob3cgdG8gZG8gdGhpcy4KKworICAgPHA+Tm90ZSwgb2xkZXIgdmVyc2lvbnMgb2YgPGNvZGU+Z2NjPC9jb2RlPiBwcm9kdWNlIGxpbmUtYnktbGluZSBwcm9maWxpbmcKK2luZm9ybWF0aW9uIHRoYXQgd29ya3Mgd2l0aCA8Y29kZT5ncHJvZjwvY29kZT4gcmF0aGVyIHRoYW4gPGNvZGU+Z2NvdjwvY29kZT4gc28KK3RoZXJlIGlzIHN0aWxsIHN1cHBvcnQgZm9yIGRpc3BsYXlpbmcgdGhpcyBraW5kIG9mIGluZm9ybWF0aW9uIGluCis8Y29kZT5ncHJvZjwvY29kZT4uIFNlZSA8YSBocmVmPSJMaW5lXzAwMmRieV8wMDJkbGluZS5odG1sI0xpbmVfMDAyZGJ5XzAwMmRsaW5lIj5MaW5lLWJ5LWxpbmUgUHJvZmlsaW5nPC9hPi4KKworICAgPHA+SXQgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCA8Y29kZT5nY2M8L2NvZGU+IGltcGxlbWVudHMgYQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZmluc3RydW1lbnQtZnVuY3Rpb25zPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24gd2hpY2ggd2lsbCBpbnNlcnQKK2NhbGxzIHRvIHNwZWNpYWwgdXNlciBzdXBwbGllZCBpbnN0cnVtZW50YXRpb24gcm91dGluZXMgYXQgdGhlIGVudHJ5CithbmQgZXhpdCBvZiBldmVyeSBmdW5jdGlvbiBpbiB0aGVpciBwcm9ncmFtLiAgVGhpcyBjYW4gYmUgdXNlZCB0bworaW1wbGVtZW50IGFuIGFsdGVybmF0aXZlIHByb2ZpbGluZyBzY2hlbWUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0N5Y2xlcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvQ3ljbGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyZjU0MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0N5Y2xlcy5odG1sCkBAIC0wLDAgKzEsMTc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DeWNsZXMgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ2FsbC1HcmFwaC5odG1sI0NhbGwtR3JhcGgiIHRpdGxlPSJDYWxsIEdyYXBoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3Vicm91dGluZXMuaHRtbCNTdWJyb3V0aW5lcyIgdGl0bGU9IlN1YnJvdXRpbmVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkN5Y2xlcyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN1YnJvdXRpbmVzLmh0bWwjU3Vicm91dGluZXMiPlN1YnJvdXRpbmVzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ2FsbC1HcmFwaC5odG1sI0NhbGwtR3JhcGgiPkNhbGwgR3JhcGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj41LjIuNCBIb3cgTXV0dWFsbHkgUmVjdXJzaXZlIEZ1bmN0aW9ucyBBcmUgRGVzY3JpYmVkPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtY3ljbGUtMyI+PC9hPjxhIG5hbWU9ImluZGV4LXJlY3Vyc2lvbi1jeWNsZS00Ij48L2E+CitUaGUgZ3JhcGggbWF5IGJlIGNvbXBsaWNhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiA8ZGZuPmN5Y2xlcyBvZgorcmVjdXJzaW9uPC9kZm4+IGluIHRoZSBjYWxsIGdyYXBoLiAgQSBjeWNsZSBleGlzdHMgaWYgYSBmdW5jdGlvbiBjYWxscworYW5vdGhlciBmdW5jdGlvbiB0aGF0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBjYWxscyAob3IgYXBwZWFycyB0bworY2FsbCkgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGU6IGlmIDxjb2RlPmE8L2NvZGU+IGNhbGxzIDxjb2RlPmI8L2NvZGU+LAorYW5kIDxjb2RlPmI8L2NvZGU+IGNhbGxzIDxjb2RlPmE8L2NvZGU+LCB0aGVuIDxjb2RlPmE8L2NvZGU+IGFuZCA8Y29kZT5iPC9jb2RlPiBmb3JtIGEgY3ljbGUuCisKKyAgIDxwPldoZW5ldmVyIHRoZXJlIGFyZSBjYWxsIHBhdGhzIGJvdGggd2F5cyBiZXR3ZWVuIGEgcGFpciBvZiBmdW5jdGlvbnMsIHRoZXkKK2JlbG9uZyB0byB0aGUgc2FtZSBjeWNsZS4gIElmIDxjb2RlPmE8L2NvZGU+IGFuZCA8Y29kZT5iPC9jb2RlPiBjYWxsIGVhY2ggb3RoZXIgYW5kCis8Y29kZT5iPC9jb2RlPiBhbmQgPGNvZGU+YzwvY29kZT4gY2FsbCBlYWNoIG90aGVyLCBhbGwgdGhyZWUgbWFrZSBvbmUgY3ljbGUuICBOb3RlIHRoYXQKK2V2ZW4gaWYgPGNvZGU+YjwvY29kZT4gb25seSBjYWxscyA8Y29kZT5hPC9jb2RlPiBpZiBpdCB3YXMgbm90IGNhbGxlZCBmcm9tIDxjb2RlPmE8L2NvZGU+LAorPGNvZGU+Z3Byb2Y8L2NvZGU+IGNhbm5vdCBkZXRlcm1pbmUgdGhpcywgc28gPGNvZGU+YTwvY29kZT4gYW5kIDxjb2RlPmI8L2NvZGU+IGFyZSBzdGlsbAorY29uc2lkZXJlZCBhIGN5Y2xlLgorCisgICA8cD5UaGUgY3ljbGVzIGFyZSBudW1iZXJlZCB3aXRoIGNvbnNlY3V0aXZlIGludGVnZXJzLiAgV2hlbiBhIGZ1bmN0aW9uCitiZWxvbmdzIHRvIGEgY3ljbGUsIGVhY2ggdGltZSB0aGUgZnVuY3Rpb24gbmFtZSBhcHBlYXJzIGluIHRoZSBjYWxsIGdyYXBoCitpdCBpcyBmb2xsb3dlZCBieSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDtjeWNsZSA8L3NwYW4+PHZhcj5udW1iZXI8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+VGhlIHJlYXNvbiBjeWNsZXMgbWF0dGVyIGlzIHRoYXQgdGhleSBtYWtlIHRoZSB0aW1lIHZhbHVlcyBpbiB0aGUgY2FsbAorZ3JhcGggcGFyYWRveGljYWwuICBUaGUgJmxkcXVvO3RpbWUgc3BlbnQgaW4gY2hpbGRyZW4mcmRxdW87IG9mIDxjb2RlPmE8L2NvZGU+IHNob3VsZAoraW5jbHVkZSB0aGUgdGltZSBzcGVudCBpbiBpdHMgc3Vicm91dGluZSA8Y29kZT5iPC9jb2RlPiBhbmQgaW4gPGNvZGU+YjwvY29kZT4ncworc3Vicm91dGluZXMmbWRhc2g7YnV0IG9uZSBvZiA8Y29kZT5iPC9jb2RlPidzIHN1YnJvdXRpbmVzIGlzIDxjb2RlPmE8L2NvZGU+ISAgSG93IG11Y2ggb2YKKzxjb2RlPmE8L2NvZGU+J3MgdGltZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGNoaWxkcmVuIG9mIDxjb2RlPmE8L2NvZGU+LCB3aGVuCis8Y29kZT5hPC9jb2RlPiBpcyBpbmRpcmVjdGx5IHJlY3Vyc2l2ZT8KKworICAgPHA+VGhlIHdheSA8Y29kZT5ncHJvZjwvY29kZT4gcmVzb2x2ZXMgdGhpcyBwYXJhZG94IGlzIGJ5IGNyZWF0aW5nIGEgc2luZ2xlIGVudHJ5Citmb3IgdGhlIGN5Y2xlIGFzIGEgd2hvbGUuICBUaGUgcHJpbWFyeSBsaW5lIG9mIHRoaXMgZW50cnkgZGVzY3JpYmVzIHRoZQordG90YWwgdGltZSBzcGVudCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb25zIG9mIHRoZSBjeWNsZS4gIFRoZQorJmxkcXVvO3N1YnJvdXRpbmVzJnJkcXVvOyBvZiB0aGUgY3ljbGUgYXJlIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9ucyBvZiB0aGUgY3ljbGUsIGFuZAorYWxsIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZW0uICBUaGUgJmxkcXVvO2NhbGxlcnMmcmRxdW87IG9mCit0aGUgY3ljbGUgYXJlIHRoZSBmdW5jdGlvbnMsIG91dHNpZGUgdGhlIGN5Y2xlLCB0aGF0IGNhbGxlZCBmdW5jdGlvbnMgaW4KK3RoZSBjeWNsZS4KKworICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIHBvcnRpb24gb2YgYSBjYWxsIGdyYXBoIHdoaWNoIHNob3dzIGEgY3ljbGUgY29udGFpbmluZworZnVuY3Rpb25zIDxjb2RlPmE8L2NvZGU+IGFuZCA8Y29kZT5iPC9jb2RlPi4gIFRoZSBjeWNsZSB3YXMgZW50ZXJlZCBieSBhIGNhbGwgdG8KKzxjb2RlPmE8L2NvZGU+IGZyb20gPGNvZGU+bWFpbjwvY29kZT47IGJvdGggPGNvZGU+YTwvY29kZT4gYW5kIDxjb2RlPmI8L2NvZGU+IGNhbGxlZCA8Y29kZT5jPC9jb2RlPi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGluZGV4ICAlIHRpbWUgICAgc2VsZiAgY2hpbGRyZW4gY2FsbGVkICAgICBuYW1lCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAxLjc3ICAgICAgICAwICAgIDEvMSAgICAgICAgbWFpbiBbMl0KKyAgICAgWzNdICAgICA5MS43MSAgICAxLjc3ICAgICAgICAwICAgIDErNSAgICAmbHQ7Y3ljbGUgMSBhcyBhIHdob2xlJmd0OyBbM10KKyAgICAgICAgICAgICAgICAgICAgICAxLjAyICAgICAgICAwICAgIDMgICAgICAgICAgYiAmbHQ7Y3ljbGUgMSZndDsgWzRdCisgICAgICAgICAgICAgICAgICAgICAgMC43NSAgICAgICAgMCAgICAyICAgICAgICAgIGEgJmx0O2N5Y2xlIDEmZ3Q7IFs1XQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAgIGEgJmx0O2N5Y2xlIDEmZ3Q7IFs1XQorICAgICBbNF0gICAgIDUyLjg1ICAgIDEuMDIgICAgICAgIDAgICAgMCAgICAgIGIgJmx0O2N5Y2xlIDEmZ3Q7IFs0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICBhICZsdDtjeWNsZSAxJmd0OyBbNV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAwICAgIDMvNiAgICAgICAgYyBbNl0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgIDEuNzcgICAgICAgIDAgICAgMS8xICAgICAgICBtYWluIFsyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICBiICZsdDtjeWNsZSAxJmd0OyBbNF0KKyAgICAgWzVdICAgICAzOC44NiAgICAwLjc1ICAgICAgICAwICAgIDEgICAgICBhICZsdDtjeWNsZSAxJmd0OyBbNV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgYiAmbHQ7Y3ljbGUgMSZndDsgWzRdCisgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgMCAgICAzLzYgICAgICAgIGMgWzZdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij4oVGhlIGVudGlyZSBjYWxsIGdyYXBoIGZvciB0aGlzIHByb2dyYW0gY29udGFpbnMgaW4gYWRkaXRpb24gYW4gZW50cnkgZm9yCis8Y29kZT5tYWluPC9jb2RlPiwgd2hpY2ggY2FsbHMgPGNvZGU+YTwvY29kZT4sIGFuZCBhbiBlbnRyeSBmb3IgPGNvZGU+YzwvY29kZT4sIHdpdGggY2FsbGVycworPGNvZGU+YTwvY29kZT4gYW5kIDxjb2RlPmI8L2NvZGU+LikKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGluZGV4ICAlIHRpbWUgICAgc2VsZiAgY2hpbGRyZW4gY2FsbGVkICAgICBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsdDtzcG9udGFuZW91cyZndDsKKyAgICAgWzFdICAgIDEwMC4wMCAgICAgICAwICAgICAxLjkzICAgIDAgICAgICBzdGFydCBbMV0KKyAgICAgICAgICAgICAgICAgICAgICAwLjE2ICAgICAxLjc3ICAgIDEvMSAgICAgICAgbWFpbiBbMl0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgIDAuMTYgICAgIDEuNzcgICAgMS8xICAgICAgICBzdGFydCBbMV0KKyAgICAgWzJdICAgIDEwMC4wMCAgICAwLjE2ICAgICAxLjc3ICAgIDEgICAgICBtYWluIFsyXQorICAgICAgICAgICAgICAgICAgICAgIDEuNzcgICAgICAgIDAgICAgMS8xICAgICAgICBhICZsdDtjeWNsZSAxJmd0OyBbNV0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgIDEuNzcgICAgICAgIDAgICAgMS8xICAgICAgICBtYWluIFsyXQorICAgICBbM10gICAgIDkxLjcxICAgIDEuNzcgICAgICAgIDAgICAgMSs1ICAgICZsdDtjeWNsZSAxIGFzIGEgd2hvbGUmZ3Q7IFszXQorICAgICAgICAgICAgICAgICAgICAgIDEuMDIgICAgICAgIDAgICAgMyAgICAgICAgICBiICZsdDtjeWNsZSAxJmd0OyBbNF0KKyAgICAgICAgICAgICAgICAgICAgICAwLjc1ICAgICAgICAwICAgIDIgICAgICAgICAgYSAmbHQ7Y3ljbGUgMSZndDsgWzVdCisgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgMCAgICA2LzYgICAgICAgIGMgWzZdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgYSAmbHQ7Y3ljbGUgMSZndDsgWzVdCisgICAgIFs0XSAgICAgNTIuODUgICAgMS4wMiAgICAgICAgMCAgICAwICAgICAgYiAmbHQ7Y3ljbGUgMSZndDsgWzRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIGEgJmx0O2N5Y2xlIDEmZ3Q7IFs1XQorICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgIDAgICAgMy82ICAgICAgICBjIFs2XQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgMS43NyAgICAgICAgMCAgICAxLzEgICAgICAgIG1haW4gWzJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICAgICAgIGIgJmx0O2N5Y2xlIDEmZ3Q7IFs0XQorICAgICBbNV0gICAgIDM4Ljg2ICAgIDAuNzUgICAgICAgIDAgICAgMSAgICAgIGEgJmx0O2N5Y2xlIDEmZ3Q7IFs1XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgICAgICAgICBiICZsdDtjeWNsZSAxJmd0OyBbNF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAwICAgIDMvNiAgICAgICAgYyBbNl0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgIDAgICAgMy82ICAgICAgICBiICZsdDtjeWNsZSAxJmd0OyBbNF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAwICAgIDMvNiAgICAgICAgYSAmbHQ7Y3ljbGUgMSZndDsgWzVdCisgICAgIFs2XSAgICAgIDAuMDAgICAgICAgMCAgICAgICAgMCAgICA2ICAgICAgYyBbNl0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPC9wcmU+CisgICA8cD5UaGUgPGNvZGU+c2VsZjwvY29kZT4gZmllbGQgb2YgdGhlIGN5Y2xlJ3MgcHJpbWFyeSBsaW5lIGlzIHRoZSB0b3RhbCB0aW1lCitzcGVudCBpbiBhbGwgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgY3ljbGUuICBJdCBlcXVhbHMgdGhlIHN1bSBvZiB0aGUKKzxjb2RlPnNlbGY8L2NvZGU+IGZpZWxkcyBmb3IgdGhlIGluZGl2aWR1YWwgZnVuY3Rpb25zIGluIHRoZSBjeWNsZSwgZm91bmQKK2luIHRoZSBlbnRyeSBpbiB0aGUgc3Vicm91dGluZSBsaW5lcyBmb3IgdGhlc2UgZnVuY3Rpb25zLgorCisgICA8cD5UaGUgPGNvZGU+Y2hpbGRyZW48L2NvZGU+IGZpZWxkcyBvZiB0aGUgY3ljbGUncyBwcmltYXJ5IGxpbmUgYW5kIHN1YnJvdXRpbmUgbGluZXMKK2NvdW50IG9ubHkgc3Vicm91dGluZXMgb3V0c2lkZSB0aGUgY3ljbGUuICBFdmVuIHRob3VnaCA8Y29kZT5hPC9jb2RlPiBjYWxscworPGNvZGU+YjwvY29kZT4sIHRoZSB0aW1lIHNwZW50IGluIHRob3NlIGNhbGxzIHRvIDxjb2RlPmI8L2NvZGU+IGlzIG5vdCBjb3VudGVkIGluCis8Y29kZT5hPC9jb2RlPidzIDxjb2RlPmNoaWxkcmVuPC9jb2RlPiB0aW1lLiAgVGh1cywgd2UgZG8gbm90IGVuY291bnRlciB0aGUgcHJvYmxlbSBvZgord2hhdCB0byBkbyB3aGVuIHRoZSB0aW1lIGluIHRob3NlIGNhbGxzIHRvIDxjb2RlPmI8L2NvZGU+IGluY2x1ZGVzIGluZGlyZWN0CityZWN1cnNpdmUgY2FsbHMgYmFjayB0byA8Y29kZT5hPC9jb2RlPi4KKworICAgPHA+VGhlIDxjb2RlPmNoaWxkcmVuPC9jb2RlPiBmaWVsZCBvZiBhIGNhbGxlci1saW5lIGluIHRoZSBjeWNsZSdzIGVudHJ5IGVzdGltYXRlcwordGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IDxlbT5pbiB0aGUgd2hvbGUgY3ljbGU8L2VtPiwgYW5kIGl0cyBvdGhlcgorc3Vicm91dGluZXMsIG9uIHRoZSB0aW1lcyB3aGVuIHRoYXQgY2FsbGVyIGNhbGxlZCBhIGZ1bmN0aW9uIGluIHRoZSBjeWNsZS4KKworICAgPHA+VGhlIDxjb2RlPmNhbGxlZDwvY29kZT4gZmllbGQgaW4gdGhlIHByaW1hcnkgbGluZSBmb3IgdGhlIGN5Y2xlIGhhcyB0d28gbnVtYmVyczoKK2ZpcnN0LCB0aGUgbnVtYmVyIG9mIHRpbWVzIGZ1bmN0aW9ucyBpbiB0aGUgY3ljbGUgd2VyZSBjYWxsZWQgYnkgZnVuY3Rpb25zCitvdXRzaWRlIHRoZSBjeWNsZTsgc2Vjb25kLCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZXkgd2VyZSBjYWxsZWQgYnkKK2Z1bmN0aW9ucyBpbiB0aGUgY3ljbGUgKGluY2x1ZGluZyB0aW1lcyB3aGVuIGEgZnVuY3Rpb24gaW4gdGhlIGN5Y2xlIGNhbGxzCitpdHNlbGYpLiAgVGhpcyBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIHRoZSB1c3VhbCBzcGxpdCBpbnRvIG5vbi1yZWN1cnNpdmUgYW5kCityZWN1cnNpdmUgY2FsbHMuCisKKyAgIDxwPlRoZSA8Y29kZT5jYWxsZWQ8L2NvZGU+IGZpZWxkIG9mIGEgc3Vicm91dGluZS1saW5lIGZvciBhIGN5Y2xlIG1lbWJlciBpbiB0aGUKK2N5Y2xlJ3MgZW50cnkgc2F5cyBob3cgbWFueSB0aW1lIHRoYXQgZnVuY3Rpb24gd2FzIGNhbGxlZCBmcm9tIGZ1bmN0aW9ucyBpbgordGhlIGN5Y2xlLiAgVGhlIHRvdGFsIG9mIGFsbCB0aGVzZSBpcyB0aGUgc2Vjb25kIG51bWJlciBpbiB0aGUgcHJpbWFyeSBsaW5lJ3MKKzxjb2RlPmNhbGxlZDwvY29kZT4gZmllbGQuCisKKyAgIDxwPkluIHRoZSBpbmRpdmlkdWFsIGVudHJ5IGZvciBhIGZ1bmN0aW9uIGluIGEgY3ljbGUsIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4KK3RoZSBzYW1lIGN5Y2xlIGNhbiBhcHBlYXIgYXMgc3Vicm91dGluZXMgYW5kIGFzIGNhbGxlcnMuICBUaGVzZSBsaW5lcyBzaG93Citob3cgbWFueSB0aW1lcyBlYWNoIGZ1bmN0aW9uIGluIHRoZSBjeWNsZSBjYWxsZWQgb3Igd2FzIGNhbGxlZCBmcm9tIGVhY2ggb3RoZXIKK2Z1bmN0aW9uIGluIHRoZSBjeWNsZS4gIFRoZSA8Y29kZT5zZWxmPC9jb2RlPiBhbmQgPGNvZGU+Y2hpbGRyZW48L2NvZGU+IGZpZWxkcyBpbiB0aGVzZQorbGluZXMgYXJlIGJsYW5rIGJlY2F1c2Ugb2YgdGhlIGRpZmZpY3VsdHkgb2YgZGVmaW5pbmcgbWVhbmluZ3MgZm9yIHRoZW0KK3doZW4gcmVjdXJzaW9uIGlzIGdvaW5nIG9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9EZWJ1Z2dpbmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0RlYnVnZ2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1M2RhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9EZWJ1Z2dpbmcuaHRtbApAQCAtMCwwICsxLDc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EZWJ1Z2dpbmcgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRGV0YWlscy5odG1sI0RldGFpbHMiIHRpdGxlPSJEZXRhaWxzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW50ZXJuYWxzLmh0bWwjSW50ZXJuYWxzIiB0aXRsZT0iSW50ZXJuYWxzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRlYnVnZ2luZyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkludGVybmFscy5odG1sI0ludGVybmFscyI+SW50ZXJuYWxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRGV0YWlscy5odG1sI0RldGFpbHMiPkRldGFpbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjQgRGVidWdnaW5nIDxjb2RlPmdwcm9mPC9jb2RlPjwvaDM+CisKKzxwPklmIDxjb2RlPmdwcm9mPC9jb2RlPiB3YXMgY29tcGlsZWQgd2l0aCBkZWJ1Z2dpbmcgZW5hYmxlZCwKK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1kPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0cmlnZ2VycyBkZWJ1Z2dpbmcgb3V0cHV0CisodG8gc3Rkb3V0KSB3aGljaCBjYW4gYmUgaGVscGZ1bCBpbiB1bmRlcnN0YW5kaW5nIGl0cyBvcGVyYXRpb24uIAorVGhlIGRlYnVnZ2luZyBudW1iZXIgc3BlY2lmaWVkIGlzIGludGVycHJldGVkIGFzIGEgc3VtIG9mIHRoZSBmb2xsb3dpbmcKK29wdGlvbnM6CisKKyAgICAgPGRsPgorPGR0PjIgLSBUb3BvbG9naWNhbCBzb3J0PGRkPk1vbml0b3IgZGVwdGgtZmlyc3QgbnVtYmVyaW5nIG9mIHN5bWJvbHMgZHVyaW5nIGNhbGwgZ3JhcGggYW5hbHlzaXMKKzxicj48ZHQ+NCAtIEN5Y2xlczxkZD5TaG93cyBzeW1ib2xzIGFzIHRoZXkgYXJlIGlkZW50aWZpZWQgYXMgY3ljbGUgaGVhZHMKKzxicj48ZHQ+MTYgLSBUYWxseWluZzxkZD5BcyB0aGUgY2FsbCBncmFwaCBhcmNzIGFyZSByZWFkLCBzaG93IGVhY2ggYXJjIGFuZCBob3cKK3RoZSB0b3RhbCBjYWxscyB0byBlYWNoIGZ1bmN0aW9uIGFyZSB0YWxsaWVkCis8YnI+PGR0PjMyIC0gQ2FsbCBncmFwaCBhcmMgc29ydGluZzxkZD5EZXRhaWxzIHNvcnRpbmcgaW5kaXZpZHVhbCBwYXJlbnRzL2NoaWxkcmVuIHdpdGhpbiBlYWNoIGNhbGwgZ3JhcGggZW50cnkKKzxicj48ZHQ+NjQgLSBSZWFkaW5nIGhpc3RvZ3JhbSBhbmQgY2FsbCBncmFwaCByZWNvcmRzPGRkPlNob3dzIGFkZHJlc3MgcmFuZ2VzIG9mIGhpc3RvZ3JhbXMgYXMgdGhleSBhcmUgcmVhZCwgYW5kIGVhY2gKK2NhbGwgZ3JhcGggYXJjCis8YnI+PGR0PjEyOCAtIFN5bWJvbCB0YWJsZTxkZD5SZWFkaW5nLCBjbGFzc2lmeWluZywgYW5kIHNvcnRpbmcgdGhlIHN5bWJvbCB0YWJsZSBmcm9tIHRoZSBvYmplY3QgZmlsZS4gCitGb3IgbGluZS1ieS1saW5lIHByb2ZpbGluZyAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24pLCBhbHNvIHNob3dzIGxpbmUgbnVtYmVycworYmVpbmcgYXNzaWduZWQgdG8gbWVtb3J5IGFkZHJlc3Nlcy4gCis8YnI+PGR0PjI1NiAtIFN0YXRpYyBjYWxsIGdyYXBoPGRkPlRyYWNlIG9wZXJhdGlvbiBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1jPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbgorPGJyPjxkdD41MTIgLSBTeW1ib2wgdGFibGUgYW5kIGFyYyB0YWJsZSBsb29rdXBzPGRkPkRldGFpbCBvcGVyYXRpb24gb2YgbG9va3VwIHJvdXRpbmVzCis8YnI+PGR0PjEwMjQgLSBDYWxsIGdyYXBoIHByb3BhZ2F0aW9uPGRkPlNob3dzIGhvdyBmdW5jdGlvbiB0aW1lcyBhcmUgcHJvcGFnYXRlZCBhbG9uZyB0aGUgY2FsbCBncmFwaAorPGJyPjxkdD4yMDQ4IC0gQmFzaWMtYmxvY2tzPGRkPlNob3dzIGJhc2ljLWJsb2NrIHJlY29yZHMgYXMgdGhleSBhcmUgcmVhZCBmcm9tIHByb2ZpbGUgZGF0YQorKG9ubHkgbWVhbmluZ2Z1bCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uKQorPGJyPjxkdD40MDk2IC0gU3ltc3BlY3M8ZGQ+U2hvd3Mgc3ltc3BlYy10by1zeW1ib2wgcGF0dGVybiBtYXRjaGluZyBvcGVyYXRpb24KKzxicj48ZHQ+ODE5MiAtIEFubm90YXRlIHNvdXJjZTxkZD5UcmFja3Mgb3BlcmF0aW9uIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9EZXByZWNhdGVkLU9wdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0RlcHJlY2F0ZWQtT3B0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYjM5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9EZXByZWNhdGVkLU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDk0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5EZXByZWNhdGVkIE9wdGlvbnMgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTWlzY2VsbGFuZW91cy1PcHRpb25zLmh0bWwjTWlzY2VsbGFuZW91cy1PcHRpb25zIiB0aXRsZT0iTWlzY2VsbGFuZW91cyBPcHRpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltc3BlY3MuaHRtbCNTeW1zcGVjcyIgdGl0bGU9IlN5bXNwZWNzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkRlcHJlY2F0ZWQtT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTeW1zcGVjcy5odG1sI1N5bXNwZWNzIj5TeW1zcGVjczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik1pc2NlbGxhbmVvdXMtT3B0aW9ucy5odG1sI01pc2NlbGxhbmVvdXMtT3B0aW9ucyI+TWlzY2VsbGFuZW91cyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjQgRGVwcmVjYXRlZCBPcHRpb25zPC9oMz4KKworPHA+VGhlc2Ugb3B0aW9ucyBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBuZXdlciB2ZXJzaW9ucyB0aGF0IHVzZSBzeW1zcGVjcy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+LWUgPC9jb2RlPjx2YXI+ZnVuY3Rpb25fbmFtZTwvdmFyPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZSA8L3NwYW4+PHZhcj5mdW5jdGlvbjwvdmFyPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0ZWxscyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gbm90IHByaW50CitpbmZvcm1hdGlvbiBhYm91dCB0aGUgZnVuY3Rpb24gPHZhcj5mdW5jdGlvbl9uYW1lPC92YXI+IChhbmQgaXRzCitjaGlsZHJlbjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4pIGluIHRoZSBjYWxsIGdyYXBoLiAgVGhlIGZ1bmN0aW9uIHdpbGwgc3RpbGwgYmUgbGlzdGVkCithcyBhIGNoaWxkIG9mIGFueSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBidXQgaXRzIGluZGV4IG51bWJlciB3aWxsIGJlCitzaG93biBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPltub3QgcHJpbnRlZF08L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBNb3JlIHRoYW4gb25lICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIG1heSBiZQorZ2l2ZW47IG9ubHkgb25lIDx2YXI+ZnVuY3Rpb25fbmFtZTwvdmFyPiBtYXkgYmUgaW5kaWNhdGVkIHdpdGggZWFjaCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1lPC9zcGFuPjwvc2FtcD4mcnNxdW87CitvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tRSA8L2NvZGU+PHZhcj5mdW5jdGlvbl9uYW1lPC92YXI+PGRkPlRoZSA8Y29kZT4tRSA8L2NvZGU+PHZhcj5mdW5jdGlvbjwvdmFyPiBvcHRpb24gd29ya3MgbGlrZSB0aGUgPGNvZGU+LWU8L2NvZGU+IG9wdGlvbiwgYnV0Cit0aW1lIHNwZW50IGluIHRoZSBmdW5jdGlvbiAoYW5kIGNoaWxkcmVuIHdobyB3ZXJlIG5vdCBjYWxsZWQgZnJvbQorYW55d2hlcmUgZWxzZSksIHdpbGwgbm90IGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgcGVyY2VudGFnZXMtb2YtdGltZSBmb3IKK3RoZSBjYWxsIGdyYXBoLiAgTW9yZSB0aGFuIG9uZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1FPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBtYXkgYmUgZ2l2ZW47IG9ubHkgb25lCis8dmFyPmZ1bmN0aW9uX25hbWU8L3Zhcj4gbWF5IGJlIGluZGljYXRlZCB3aXRoIGVhY2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tZiA8L2NvZGU+PHZhcj5mdW5jdGlvbl9uYW1lPC92YXI+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1mIDwvc3Bhbj48dmFyPmZ1bmN0aW9uPC92YXI+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gbGltaXQgdGhlCitjYWxsIGdyYXBoIHRvIHRoZSBmdW5jdGlvbiA8dmFyPmZ1bmN0aW9uX25hbWU8L3Zhcj4gYW5kIGl0cyBjaGlsZHJlbiAoYW5kCit0aGVpciBjaGlsZHJlbjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4pLiAgTW9yZSB0aGFuIG9uZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1mPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBtYXkgYmUgZ2l2ZW47Citvbmx5IG9uZSA8dmFyPmZ1bmN0aW9uX25hbWU8L3Zhcj4gbWF5IGJlIGluZGljYXRlZCB3aXRoIGVhY2ggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZjwvc3Bhbj48L3NhbXA+JnJzcXVvOworb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LUYgPC9jb2RlPjx2YXI+ZnVuY3Rpb25fbmFtZTwvdmFyPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRiA8L3NwYW4+PHZhcj5mdW5jdGlvbjwvdmFyPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB3b3JrcyBsaWtlIHRoZSA8Y29kZT4tZjwvY29kZT4gb3B0aW9uLCBidXQKK29ubHkgdGltZSBzcGVudCBpbiB0aGUgZnVuY3Rpb24gYW5kIGl0cyBjaGlsZHJlbiAoYW5kIHRoZWlyCitjaGlsZHJlbjxzbWFsbCBjbGFzcz0iZG90cyI+Li4uPC9zbWFsbD4pIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgdG90YWwtdGltZSBhbmQKK3BlcmNlbnRhZ2VzLW9mLXRpbWUgZm9yIHRoZSBjYWxsIGdyYXBoLiAgTW9yZSB0aGFuIG9uZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1GPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbgorbWF5IGJlIGdpdmVuOyBvbmx5IG9uZSA8dmFyPmZ1bmN0aW9uX25hbWU8L3Zhcj4gbWF5IGJlIGluZGljYXRlZCB3aXRoIGVhY2gKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIG92ZXJyaWRlcyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24uCisKKyAgIDwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKyAgIDxwPk5vdGUgdGhhdCBvbmx5IG9uZSBmdW5jdGlvbiBjYW4gYmUgc3BlY2lmaWVkIHdpdGggZWFjaCA8Y29kZT4tZTwvY29kZT4sCis8Y29kZT4tRTwvY29kZT4sIDxjb2RlPi1mPC9jb2RlPiBvciA8Y29kZT4tRjwvY29kZT4gb3B0aW9uLiAgVG8gc3BlY2lmeSBtb3JlIHRoYW4gb25lCitmdW5jdGlvbiwgdXNlIG11bHRpcGxlIG9wdGlvbnMuICBGb3IgZXhhbXBsZSwgdGhpcyBjb21tYW5kOgorCis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgIGdwcm9mIC1lIGJvcmluZyAtZiBmb28gLWYgYmFyIG15cHJvZ3JhbSAmZ3Q7IGdwcm9mLm91dHB1dAorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmxpc3RzIGluIHRoZSBjYWxsIGdyYXBoIGFsbCBmdW5jdGlvbnMgdGhhdCB3ZXJlIHJlYWNoZWQgZnJvbSBlaXRoZXIKKzxjb2RlPmZvbzwvY29kZT4gb3IgPGNvZGU+YmFyPC9jb2RlPiBhbmQgd2VyZSBub3QgcmVhY2hhYmxlIGZyb20gPGNvZGU+Ym9yaW5nPC9jb2RlPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvRGV0YWlscy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvRGV0YWlscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzdjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9EZXRhaWxzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RGV0YWlscyAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiIHRpdGxlPSJJbmNvbXBhdGliaWxpdGllcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgdGl0bGU9IkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEZXRhaWxzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyI+SW5jb21wYXRpYmlsaXRpZXM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+OSBEZXRhaWxzIG9mIFByb2ZpbGluZzwvaDI+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJJbXBsZW1lbnRhdGlvbi5odG1sI0ltcGxlbWVudGF0aW9uIj5JbXBsZW1lbnRhdGlvbjwvYT46ICAgICAgIEhvdyBhIHByb2dyYW0gY29sbGVjdHMgcHJvZmlsaW5nIGluZm9ybWF0aW9uCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJGaWxlLUZvcm1hdC5odG1sI0ZpbGUtRm9ybWF0Ij5GaWxlIEZvcm1hdDwvYT46ICAgICAgICAgIEZvcm1hdCBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdtb24ub3V0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGZpbGVzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJJbnRlcm5hbHMuaHRtbCNJbnRlcm5hbHMiPkludGVybmFsczwvYT46ICAgICAgICAgICAgPGNvZGU+Z3Byb2Y8L2NvZGU+J3MgaW50ZXJuYWwgb3BlcmF0aW9uCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJEZWJ1Z2dpbmcuaHRtbCNEZWJ1Z2dpbmciPkRlYnVnZ2luZzwvYT46ICAgICAgICAgICAgVXNpbmcgPGNvZGU+Z3Byb2Y8L2NvZGU+J3MgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24KKzwvdWw+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0V4ZWN1dGluZy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvRXhlY3V0aW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2ZjVjNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0V4ZWN1dGluZy5odG1sCkBAIC0wLDAgKzEsMTAxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FeGVjdXRpbmcgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDb21waWxpbmcuaHRtbCNDb21waWxpbmciIHRpdGxlPSJDb21waWxpbmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIiB0aXRsZT0iSW52b2tpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBncHJvZiBwcm9maWxlciBvZiB0aGUgR05VIHN5c3RlbS4KKworQ29weXJpZ2h0IChDKSAxOTg4LCAxOTkyLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLAorMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRXhlY3V0aW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ29tcGlsaW5nLmh0bWwjQ29tcGlsaW5nIj5Db21waWxpbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MyBFeGVjdXRpbmcgdGhlIFByb2dyYW08L2gyPgorCis8cD5PbmNlIHRoZSBwcm9ncmFtIGlzIGNvbXBpbGVkIGZvciBwcm9maWxpbmcsIHlvdSBtdXN0IHJ1biBpdCBpbiBvcmRlciB0bworZ2VuZXJhdGUgdGhlIGluZm9ybWF0aW9uIHRoYXQgPGNvZGU+Z3Byb2Y8L2NvZGU+IG5lZWRzLiAgU2ltcGx5IHJ1biB0aGUgcHJvZ3JhbQorYXMgdXN1YWwsIHVzaW5nIHRoZSBub3JtYWwgYXJndW1lbnRzLCBmaWxlIG5hbWVzLCBldGMuICBUaGUgcHJvZ3JhbSBzaG91bGQKK3J1biBub3JtYWxseSwgcHJvZHVjaW5nIHRoZSBzYW1lIG91dHB1dCBhcyB1c3VhbC4gIEl0IHdpbGwsIGhvd2V2ZXIsIHJ1bgorc29tZXdoYXQgc2xvd2VyIHRoYW4gbm9ybWFsIGJlY2F1c2Ugb2YgdGhlIHRpbWUgc3BlbnQgY29sbGVjdGluZyBhbmQKK3dyaXRpbmcgdGhlIHByb2ZpbGUgZGF0YS4KKworICAgPHA+VGhlIHdheSB5b3UgcnVuIHRoZSBwcm9ncmFtJm1kYXNoO3RoZSBhcmd1bWVudHMgYW5kIGlucHV0IHRoYXQgeW91IGdpdmUKK2l0Jm1kYXNoO21heSBoYXZlIGEgZHJhbWF0aWMgZWZmZWN0IG9uIHdoYXQgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24gc2hvd3MuICBUaGUKK3Byb2ZpbGUgZGF0YSB3aWxsIGRlc2NyaWJlIHRoZSBwYXJ0cyBvZiB0aGUgcHJvZ3JhbSB0aGF0IHdlcmUgYWN0aXZhdGVkIGZvcgordGhlIHBhcnRpY3VsYXIgaW5wdXQgeW91IHVzZS4gIEZvciBleGFtcGxlLCBpZiB0aGUgZmlyc3QgY29tbWFuZCB5b3UgZ2l2ZQordG8geW91ciBwcm9ncmFtIGlzIHRvIHF1aXQsIHRoZSBwcm9maWxlIGRhdGEgd2lsbCBzaG93IHRoZSB0aW1lIHVzZWQgaW4KK2luaXRpYWxpemF0aW9uIGFuZCBpbiBjbGVhbnVwLCBidXQgbm90IG11Y2ggZWxzZS4KKworICAgPHA+WW91ciBwcm9ncmFtIHdpbGwgd3JpdGUgdGhlIHByb2ZpbGUgZGF0YSBpbnRvIGEgZmlsZSBjYWxsZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdtb24ub3V0PC9zcGFuPjwvc2FtcD4KK2p1c3QgYmVmb3JlIGV4aXRpbmcuICBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgZmlsZSBjYWxsZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdtb24ub3V0PC9zcGFuPjwvc2FtcD4sCitpdHMgY29udGVudHMgYXJlIG92ZXJ3cml0dGVuLiAgVGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byB0ZWxsIHRoZQorcHJvZ3JhbSB0byB3cml0ZSB0aGUgcHJvZmlsZSBkYXRhIHVuZGVyIGEgZGlmZmVyZW50IG5hbWUsIGJ1dCB5b3UgY2FuIHJlbmFtZQordGhlIGZpbGUgYWZ0ZXJ3YXJkcyBpZiB5b3UgYXJlIGNvbmNlcm5lZCB0aGF0IGl0IG1heSBiZSBvdmVyd3JpdHRlbi4KKworICAgPHA+SW4gb3JkZXIgdG8gd3JpdGUgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nbW9uLm91dDwvc3Bhbj48L3NhbXA+IGZpbGUgcHJvcGVybHksIHlvdXIgcHJvZ3JhbSBtdXN0IGV4aXQKK25vcm1hbGx5OiBieSByZXR1cm5pbmcgZnJvbSA8Y29kZT5tYWluPC9jb2RlPiBvciBieSBjYWxsaW5nIDxjb2RlPmV4aXQ8L2NvZGU+LiAgQ2FsbGluZwordGhlIGxvdy1sZXZlbCBmdW5jdGlvbiA8Y29kZT5fZXhpdDwvY29kZT4gZG9lcyBub3Qgd3JpdGUgdGhlIHByb2ZpbGUgZGF0YSwgYW5kCituZWl0aGVyIGRvZXMgYWJub3JtYWwgdGVybWluYXRpb24gZHVlIHRvIGFuIHVuaGFuZGxlZCBzaWduYWwuCisKKyAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Z21vbi5vdXQ8L3NwYW4+PC9zYW1wPiBmaWxlIGlzIHdyaXR0ZW4gaW4gdGhlIHByb2dyYW0ncyA8ZW0+Y3VycmVudCB3b3JraW5nCitkaXJlY3Rvcnk8L2VtPiBhdCB0aGUgdGltZSBpdCBleGl0cy4gIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3VyIHByb2dyYW0gY2FsbHMKKzxjb2RlPmNoZGlyPC9jb2RlPiwgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nbW9uLm91dDwvc3Bhbj48L3NhbXA+IGZpbGUgd2lsbCBiZSBsZWZ0IGluIHRoZSBsYXN0IGRpcmVjdG9yeQoreW91ciBwcm9ncmFtIDxjb2RlPmNoZGlyPC9jb2RlPidkIHRvLiAgSWYgeW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSBpbgordGhpcyBkaXJlY3RvcnksIHRoZSBmaWxlIGlzIG5vdCB3cml0dGVuLCBhbmQgeW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuCisKKyAgIDxwPk9sZGVyIHZlcnNpb25zIG9mIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gcHJvZmlsaW5nIGxpYnJhcnkgbWF5IGFsc28gd3JpdGUgYSBmaWxlCitjYWxsZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmJiLm91dDwvc3Bhbj48L3NhbXA+LiAgVGhpcyBmaWxlLCBpZiBwcmVzZW50LCBjb250YWlucyBhbiBodW1hbi1yZWFkYWJsZQorbGlzdGluZyBvZiB0aGUgYmFzaWMtYmxvY2sgZXhlY3V0aW9uIGNvdW50cy4gIFVuZm9ydHVuYXRlbHksIHRoZQorYXBwZWFyYW5jZSBvZiBhIGh1bWFuLXJlYWRhYmxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5iYi5vdXQ8L3NwYW4+PC9zYW1wPiBtZWFucyB0aGUgYmFzaWMtYmxvY2sKK2NvdW50cyBkaWRuJ3QgZ2V0IHdyaXR0ZW4gaW50byA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Z21vbi5vdXQ8L3NwYW4+PC9zYW1wPi4gCitUaGUgUGVybCBzY3JpcHQgPGNvZGU+YmJjb252LnBsPC9jb2RlPiwgaW5jbHVkZWQgd2l0aCB0aGUgPGNvZGU+Z3Byb2Y8L2NvZGU+Citzb3VyY2UgZGlzdHJpYnV0aW9uLCB3aWxsIGNvbnZlcnQgYSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YmIub3V0PC9zcGFuPjwvc2FtcD4gZmlsZSBpbnRvCithIGZvcm1hdCByZWFkYWJsZSBieSA8Y29kZT5ncHJvZjwvY29kZT4uICBJbnZva2UgaXQgbGlrZSB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgYmJjb252LnBsICZsdDsgYmIub3V0ICZndDsgPHZhcj5iaC1kYXRhPC92YXI+Cis8L3ByZT4KKyAgIDxwPlRoaXMgdHJhbnNsYXRlcyB0aGUgaW5mb3JtYXRpb24gaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmJiLm91dDwvc3Bhbj48L3NhbXA+IGludG8gYSBmb3JtIHRoYXQKKzxjb2RlPmdwcm9mPC9jb2RlPiBjYW4gdW5kZXJzdGFuZC4gIEJ1dCB5b3Ugc3RpbGwgbmVlZCB0byB0ZWxsIDxjb2RlPmdwcm9mPC9jb2RlPgorYWJvdXQgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHRyYW5zbGF0ZWQgaW5mb3JtYXRpb24uICBUbyBkbyB0aGF0LCBpbmNsdWRlCis8dmFyPmJiLWRhdGE8L3Zhcj4gb24gdGhlIDxjb2RlPmdwcm9mPC9jb2RlPiBjb21tYW5kIGxpbmUsIDxlbT5hbG9uZyB3aXRoCis8L2VtPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nbW9uLm91dDwvc3Bhbj48L3NhbXA+LCBsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBncHJvZiA8dmFyPm9wdGlvbnM8L3Zhcj4gPHZhcj5leGVjdXRhYmxlLWZpbGU8L3Zhcj4gZ21vbi5vdXQgPHZhcj5iYi1kYXRhPC92YXI+IFs8dmFyPnlldC1tb3JlLXByb2ZpbGUtZGF0YS1maWxlczwvdmFyPi4uLl0gWyZndDsgPHZhcj5vdXRmaWxlPC92YXI+XQorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9GaWxlLUZvcm1hdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvRmlsZS1Gb3JtYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWEwY2U4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvRmlsZS1Gb3JtYXQuaHRtbApAQCAtMCwwICsxLDEyOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RmlsZSBGb3JtYXQgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRGV0YWlscy5odG1sI0RldGFpbHMiIHRpdGxlPSJEZXRhaWxzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW1wbGVtZW50YXRpb24uaHRtbCNJbXBsZW1lbnRhdGlvbiIgdGl0bGU9IkltcGxlbWVudGF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW50ZXJuYWxzLmh0bWwjSW50ZXJuYWxzIiB0aXRsZT0iSW50ZXJuYWxzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZpbGUtRm9ybWF0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkludGVybmFscy5odG1sI0ludGVybmFscyI+SW50ZXJuYWxzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW1wbGVtZW50YXRpb24uaHRtbCNJbXBsZW1lbnRhdGlvbiI+SW1wbGVtZW50YXRpb248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEZXRhaWxzLmh0bWwjRGV0YWlscyI+RGV0YWlsczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMiBQcm9maWxpbmcgRGF0YSBGaWxlIEZvcm1hdDwvaDM+CisKKzxwPlRoZSBvbGQgQlNELWRlcml2ZWQgZmlsZSBmb3JtYXQgdXNlZCBmb3IgcHJvZmlsZSBkYXRhIGRvZXMgbm90IGNvbnRhaW4gYQorbWFnaWMgY29va2llIHRoYXQgYWxsb3dzIHRvIGNoZWNrIHdoZXRoZXIgYSBkYXRhIGZpbGUgcmVhbGx5IGlzIGEKKzxjb2RlPmdwcm9mPC9jb2RlPiBmaWxlLiAgRnVydGhlcm1vcmUsIGl0IGRvZXMgbm90IHByb3ZpZGUgYSB2ZXJzaW9uIG51bWJlciwgdGh1cworcmVuZGVyaW5nIGNoYW5nZXMgdG8gdGhlIGZpbGUgZm9ybWF0IGFsbW9zdCBpbXBvc3NpYmxlLiAgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmdwcm9mPC9jb2RlPgordXNlcyBhIG5ldyBmaWxlIGZvcm1hdCB0aGF0IHByb3ZpZGVzIHRoZXNlIGZlYXR1cmVzLiAgRm9yIGJhY2t3YXJkCitjb21wYXRpYmlsaXR5LCA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPGNvZGU+Z3Byb2Y8L2NvZGU+IGNvbnRpbnVlcyB0byBzdXBwb3J0IHRoZSBvbGQgQlNELWRlcml2ZWQKK2Zvcm1hdCwgYnV0IG5vdCBhbGwgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCB3aXRoIGl0LiAgRm9yIGV4YW1wbGUsCitiYXNpYy1ibG9jayBleGVjdXRpb24gY291bnRzIGNhbm5vdCBiZSBhY2NvbW1vZGF0ZWQgYnkgdGhlIG9sZCBmaWxlCitmb3JtYXQuCisKKyAgIDxwPlRoZSBuZXcgZmlsZSBmb3JtYXQgaXMgZGVmaW5lZCBpbiBoZWFkZXIgZmlsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Z21vbl9vdXQuaDwvc3Bhbj48L3NhbXA+LiAgSXQKK2NvbnNpc3RzIG9mIGEgaGVhZGVyIGNvbnRhaW5pbmcgdGhlIG1hZ2ljIGNvb2tpZSBhbmQgYSB2ZXJzaW9uIG51bWJlciwKK2FzIHdlbGwgYXMgc29tZSBzcGFyZSBieXRlcyBhdmFpbGFibGUgZm9yIGZ1dHVyZSBleHRlbnNpb25zLiAgQWxsIGRhdGEKK2luIGEgcHJvZmlsZSBkYXRhIGZpbGUgaXMgaW4gdGhlIG5hdGl2ZSBmb3JtYXQgb2YgdGhlIHRhcmdldCBmb3Igd2hpY2gKK3RoZSBwcm9maWxlIHdhcyBjb2xsZWN0ZWQuICA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPGNvZGU+Z3Byb2Y8L2NvZGU+IGFkYXB0cyBhdXRvbWF0aWNhbGx5Cit0byB0aGUgYnl0ZS1vcmRlciBpbiB1c2UuCisKKyAgIDxwPkluIHRoZSBuZXcgZmlsZSBmb3JtYXQsIHRoZSBoZWFkZXIgaXMgZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBvZgorcmVjb3Jkcy4gIEN1cnJlbnRseSwgdGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCByZWNvcmQgdHlwZXM6IGhpc3RvZ3JhbQorcmVjb3JkcywgY2FsbC1ncmFwaCBhcmMgcmVjb3JkcywgYW5kIGJhc2ljLWJsb2NrIGV4ZWN1dGlvbiBjb3VudAorcmVjb3Jkcy4gIEVhY2ggZmlsZSBjYW4gY29udGFpbiBhbnkgbnVtYmVyIG9mIGVhY2ggcmVjb3JkIHR5cGUuICBXaGVuCityZWFkaW5nIGEgZmlsZSwgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmdwcm9mPC9jb2RlPiB3aWxsIGVuc3VyZSByZWNvcmRzIG9mIHRoZSBzYW1lIHR5cGUgYXJlCitjb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlciBhbmQgY29tcHV0ZSB0aGUgdW5pb24gb2YgYWxsIHJlY29yZHMuICBGb3IKK2V4YW1wbGUsIGZvciBiYXNpYy1ibG9jayBleGVjdXRpb24gY291bnRzLCB0aGUgdW5pb24gaXMgc2ltcGx5IHRoZSBzdW0KK29mIGFsbCBleGVjdXRpb24gY291bnRzIGZvciBlYWNoIGJhc2ljLWJsb2NrLgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjkuMi4xIEhpc3RvZ3JhbSBSZWNvcmRzPC9oND4KKworPHA+SGlzdG9ncmFtIHJlY29yZHMgY29uc2lzdCBvZiBhIGhlYWRlciB0aGF0IGlzIGZvbGxvd2VkIGJ5IGFuIGFycmF5IG9mCitiaW5zLiAgVGhlIGhlYWRlciBjb250YWlucyB0aGUgdGV4dC1zZWdtZW50IHJhbmdlIHRoYXQgdGhlIGhpc3RvZ3JhbQorc3BhbnMsIHRoZSBzaXplIG9mIHRoZSBoaXN0b2dyYW0gaW4gYnl0ZXMgKHVubGlrZSBpbiB0aGUgb2xkIEJTRAorZm9ybWF0LCB0aGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNpemUgb2YgdGhlIGhlYWRlciksIHRoZSByYXRlIG9mIHRoZQorcHJvZmlsaW5nIGNsb2NrLCBhbmQgdGhlIHBoeXNpY2FsIGRpbWVuc2lvbiB0aGF0IHRoZSBiaW4gY291bnRzCityZXByZXNlbnQgYWZ0ZXIgYmVpbmcgc2NhbGVkIGJ5IHRoZSBwcm9maWxpbmcgY2xvY2sgcmF0ZS4gIFRoZQorcGh5c2ljYWwgZGltZW5zaW9uIGlzIHNwZWNpZmllZCBpbiB0d28gcGFydHM6IGEgbG9uZyBuYW1lIG9mIHVwIHRvIDE1CitjaGFyYWN0ZXJzIGFuZCBhIHNpbmdsZSBjaGFyYWN0ZXIgYWJicmV2aWF0aW9uLiAgRm9yIGV4YW1wbGUsIGEKK2hpc3RvZ3JhbSByZXByZXNlbnRpbmcgcmVhbC10aW1lIHdvdWxkIHNwZWNpZnkgdGhlIGxvbmcgbmFtZSBhcworJmxkcXVvO3NlY29uZHMmcmRxdW87IGFuZCB0aGUgYWJicmV2aWF0aW9uIGFzICZsZHF1bztzJnJkcXVvOy4gIFRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgZm9yCithcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBwZXJmb3JtYW5jZSBtb25pdG9yIGhhcmR3YXJlICh3aGljaCwKK2ZvcnR1bmF0ZWx5LCBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkgY29tbW9uKS4gIEZvciBleGFtcGxlLCB1bmRlciBERUMKK09TRi8xLCB0aGUgJmxkcXVvO3Vwcm9maWxlJnJkcXVvOyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHByb2R1Y2UgYSBoaXN0b2dyYW0gb2YsCitzYXksIGluc3RydWN0aW9uIGNhY2hlIG1pc3Nlcy4gIEluIHRoaXMgY2FzZSwgdGhlIGRpbWVuc2lvbiBpbiB0aGUKK2hpc3RvZ3JhbSBoZWFkZXIgY291bGQgYmUgc2V0IHRvICZsZHF1bztpLWNhY2hlIG1pc3NlcyZyZHF1bzsgYW5kIHRoZSBhYmJyZXZpYXRpb24KK2NvdWxkIGJlIHNldCB0byAmbGRxdW87MSZyZHF1bzsgKGJlY2F1c2UgaXQgaXMgc2ltcGx5IGEgY291bnQsIG5vdCBhIHBoeXNpY2FsCitkaW1lbnNpb24pLiAgQWxzbywgdGhlIHByb2ZpbGluZyByYXRlIHdvdWxkIGhhdmUgdG8gYmUgc2V0IHRvIDEgaW4KK3RoaXMgY2FzZS4KKworICAgPHA+SGlzdG9ncmFtIGJpbnMgYXJlIDE2LWJpdCBudW1iZXJzIGFuZCBlYWNoIGJpbiByZXByZXNlbnQgYW4gZXF1YWwKK2Ftb3VudCBvZiB0ZXh0LXNwYWNlLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0ZXh0LXNlZ21lbnQgaXMgb25lCit0aG91c2FuZCBieXRlcyBsb25nIGFuZCBpZiB0aGVyZSBhcmUgdGVuIGJpbnMgaW4gdGhlIGhpc3RvZ3JhbSwgZWFjaAorYmluIHJlcHJlc2VudHMgb25lIGh1bmRyZWQgYnl0ZXMuCisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+OS4yLjIgQ2FsbC1HcmFwaCBSZWNvcmRzPC9oND4KKworPHA+Q2FsbC1ncmFwaCByZWNvcmRzIGhhdmUgYSBmb3JtYXQgdGhhdCBpcyBpZGVudGljYWwgdG8gdGhlIG9uZSB1c2VkIGluCit0aGUgQlNELWRlcml2ZWQgZmlsZSBmb3JtYXQuICBJdCBjb25zaXN0cyBvZiBhbiBhcmMgaW4gdGhlIGNhbGwgZ3JhcGgKK2FuZCBhIGNvdW50IGluZGljYXRpbmcgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgYXJjIHdhcyB0cmF2ZXJzZWQKK2R1cmluZyBwcm9ncmFtIGV4ZWN1dGlvbi4gIEFyY3MgYXJlIHNwZWNpZmllZCBieSBhIHBhaXIgb2YgYWRkcmVzc2VzOgordGhlIGZpcnN0IG11c3QgYmUgd2l0aGluIGNhbGxlcidzIGZ1bmN0aW9uIGFuZCB0aGUgc2Vjb25kIG11c3QgYmUKK3dpdGhpbiB0aGUgY2FsbGVlJ3MgZnVuY3Rpb24uICBXaGVuIHBlcmZvcm1pbmcgcHJvZmlsaW5nIGF0IHRoZQorZnVuY3Rpb24gbGV2ZWwsIHRoZXNlIGFkZHJlc3NlcyBjYW4gcG9pbnQgYW55d2hlcmUgd2l0aGluIHRoZQorcmVzcGVjdGl2ZSBmdW5jdGlvbi4gIEhvd2V2ZXIsIHdoZW4gcHJvZmlsaW5nIGF0IHRoZSBsaW5lLWxldmVsLCBpdCBpcworYmV0dGVyIGlmIHRoZSBhZGRyZXNzZXMgYXJlIGFzIGNsb3NlIHRvIHRoZSBjYWxsLXNpdGUvZW50cnktcG9pbnQgYXMKK3Bvc3NpYmxlLiAgVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBsaW5lLWxldmVsIGNhbGwtZ3JhcGggaXMgYWJsZSB0bworaWRlbnRpZnkgZXhhY3RseSB3aGljaCBsaW5lIG9mIHNvdXJjZSBjb2RlIHBlcmZvcm1lZCBjYWxscyB0byBhCitmdW5jdGlvbi4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj45LjIuMyBCYXNpYy1CbG9jayBFeGVjdXRpb24gQ291bnQgUmVjb3JkczwvaDQ+CisKKzxwPkJhc2ljLWJsb2NrIGV4ZWN1dGlvbiBjb3VudCByZWNvcmRzIGNvbnNpc3Qgb2YgYSBoZWFkZXIgZm9sbG93ZWQgYnkgYQorc2VxdWVuY2Ugb2YgYWRkcmVzcy9jb3VudCBwYWlycy4gIFRoZSBoZWFkZXIgc2ltcGx5IHNwZWNpZmllcyB0aGUKK2xlbmd0aCBvZiB0aGUgc2VxdWVuY2UuICBJbiBhbiBhZGRyZXNzL2NvdW50IHBhaXIsIHRoZSBhZGRyZXNzCitpZGVudGlmaWVzIGEgYmFzaWMtYmxvY2sgYW5kIHRoZSBjb3VudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lcwordGhhdCBiYXNpYy1ibG9jayB3YXMgZXhlY3V0ZWQuICBBbnkgYWRkcmVzcyB3aXRoaW4gdGhlIGJhc2ljLWFkZHJlc3MgY2FuCitiZSB1c2VkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9GbGF0LVByb2ZpbGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0ZsYXQtUHJvZmlsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YTNhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9GbGF0LVByb2ZpbGUuaHRtbApAQCAtMCwwICsxLDE1MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RmxhdCBQcm9maWxlIC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik91dHB1dC5odG1sI091dHB1dCIgdGl0bGU9Ik91dHB1dCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNhbGwtR3JhcGguaHRtbCNDYWxsLUdyYXBoIiB0aXRsZT0iQ2FsbCBHcmFwaCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGbGF0LVByb2ZpbGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ2FsbC1HcmFwaC5odG1sI0NhbGwtR3JhcGgiPkNhbGwgR3JhcGg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiPk91dHB1dDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMSBUaGUgRmxhdCBQcm9maWxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxhdC1wcm9maWxlLTEiPjwvYT4KK1RoZSA8ZGZuPmZsYXQgcHJvZmlsZTwvZGZuPiBzaG93cyB0aGUgdG90YWwgYW1vdW50IG9mIHRpbWUgeW91ciBwcm9ncmFtCitzcGVudCBleGVjdXRpbmcgZWFjaCBmdW5jdGlvbi4gIFVubGVzcyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tejwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gaXMgZ2l2ZW4sCitmdW5jdGlvbnMgd2l0aCBubyBhcHBhcmVudCB0aW1lIHNwZW50IGluIHRoZW0sIGFuZCBubyBhcHBhcmVudCBjYWxscwordG8gdGhlbSwgYXJlIG5vdCBtZW50aW9uZWQuICBOb3RlIHRoYXQgaWYgYSBmdW5jdGlvbiB3YXMgbm90IGNvbXBpbGVkCitmb3IgcHJvZmlsaW5nLCBhbmQgZGlkbid0IHJ1biBsb25nIGVub3VnaCB0byBzaG93IHVwIG9uIHRoZSBwcm9ncmFtCitjb3VudGVyIGhpc3RvZ3JhbSwgaXQgd2lsbCBiZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgZnVuY3Rpb24gdGhhdAord2FzIG5ldmVyIGNhbGxlZC4KKworICAgPHA+VGhpcyBpcyBwYXJ0IG9mIGEgZmxhdCBwcm9maWxlIGZvciBhIHNtYWxsIHByb2dyYW06CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBGbGF0IHByb2ZpbGU6CisgICAgIAorICAgICBFYWNoIHNhbXBsZSBjb3VudHMgYXMgMC4wMSBzZWNvbmRzLgorICAgICAgICUgICBjdW11bGF0aXZlICAgc2VsZiAgICAgICAgICAgICAgc2VsZiAgICAgdG90YWwKKyAgICAgIHRpbWUgICBzZWNvbmRzICAgc2Vjb25kcyAgICBjYWxscyAgbXMvY2FsbCAgbXMvY2FsbCAgbmFtZQorICAgICAgMzMuMzQgICAgICAwLjAyICAgICAwLjAyICAgICA3MjA4ICAgICAwLjAwICAgICAwLjAwICBvcGVuCisgICAgICAxNi42NyAgICAgIDAuMDMgICAgIDAuMDEgICAgICAyNDQgICAgIDAuMDQgICAgIDAuMTIgIG9mZnRpbWUKKyAgICAgIDE2LjY3ICAgICAgMC4wNCAgICAgMC4wMSAgICAgICAgOCAgICAgMS4yNSAgICAgMS4yNSAgbWVtY2NweQorICAgICAgMTYuNjcgICAgICAwLjA1ICAgICAwLjAxICAgICAgICA3ICAgICAxLjQzICAgICAxLjQzICB3cml0ZQorICAgICAgMTYuNjcgICAgICAwLjA2ICAgICAwLjAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY291bnQKKyAgICAgICAwLjAwICAgICAgMC4wNiAgICAgMC4wMCAgICAgIDIzNiAgICAgMC4wMCAgICAgMC4wMCAgdHpzZXQKKyAgICAgICAwLjAwICAgICAgMC4wNiAgICAgMC4wMCAgICAgIDE5MiAgICAgMC4wMCAgICAgMC4wMCAgdG9sb3dlcgorICAgICAgIDAuMDAgICAgICAwLjA2ICAgICAwLjAwICAgICAgIDQ3ICAgICAwLjAwICAgICAwLjAwICBzdHJsZW4KKyAgICAgICAwLjAwICAgICAgMC4wNiAgICAgMC4wMCAgICAgICA0NSAgICAgMC4wMCAgICAgMC4wMCAgc3RyY2hyCisgICAgICAgMC4wMCAgICAgIDAuMDYgICAgIDAuMDAgICAgICAgIDEgICAgIDAuMDAgICAgNTAuMDAgIG1haW4KKyAgICAgICAwLjAwICAgICAgMC4wNiAgICAgMC4wMCAgICAgICAgMSAgICAgMC4wMCAgICAgMC4wMCAgbWVtY3B5CisgICAgICAgMC4wMCAgICAgIDAuMDYgICAgIDAuMDAgICAgICAgIDEgICAgIDAuMDAgICAgMTAuMTEgIHByaW50CisgICAgICAgMC4wMCAgICAgIDAuMDYgICAgIDAuMDAgICAgICAgIDEgICAgIDAuMDAgICAgIDAuMDAgIHByb2ZpbAorICAgICAgIDAuMDAgICAgICAwLjA2ICAgICAwLjAwICAgICAgICAxICAgICAwLjAwICAgIDUwLjAwICByZXBvcnQKKyAgICAgLi4uCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIGZ1bmN0aW9ucyBhcmUgc29ydGVkIGZpcnN0IGJ5IGRlY3JlYXNpbmcgcnVuLXRpbWUgc3BlbnQgaW4gdGhlbSwKK3RoZW4gYnkgZGVjcmVhc2luZyBudW1iZXIgb2YgY2FsbHMsIHRoZW4gYWxwaGFiZXRpY2FsbHkgYnkgbmFtZS4gIFRoZQorZnVuY3Rpb25zICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWNvdW50PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnByb2ZpbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgcGFydCBvZiB0aGUgcHJvZmlsaW5nCithcHBhcmF0dXMgYW5kIGFwcGVhciBpbiBldmVyeSBmbGF0IHByb2ZpbGU7IHRoZWlyIHRpbWUgZ2l2ZXMgYSBtZWFzdXJlIG9mCit0aGUgYW1vdW50IG9mIG92ZXJoZWFkIGR1ZSB0byBwcm9maWxpbmcuCisKKyAgIDxwPkp1c3QgYmVmb3JlIHRoZSBjb2x1bW4gaGVhZGVycywgYSBzdGF0ZW1lbnQgYXBwZWFycyBpbmRpY2F0aW5nCitob3cgbXVjaCB0aW1lIGVhY2ggc2FtcGxlIGNvdW50ZWQgYXMuIAorVGhpcyA8ZGZuPnNhbXBsaW5nIHBlcmlvZDwvZGZuPiBlc3RpbWF0ZXMgdGhlIG1hcmdpbiBvZiBlcnJvciBpbiBlYWNoIG9mIHRoZSB0aW1lCitmaWd1cmVzLiAgQSB0aW1lIGZpZ3VyZSB0aGF0IGlzIG5vdCBtdWNoIGxhcmdlciB0aGFuIHRoaXMgaXMgbm90CityZWxpYWJsZS4gIEluIHRoaXMgZXhhbXBsZSwgZWFjaCBzYW1wbGUgY291bnRlZCBhcyAwLjAxIHNlY29uZHMsCitzdWdnZXN0aW5nIGEgMTAwIEh6IHNhbXBsaW5nIHJhdGUuIAorVGhlIHByb2dyYW0ncyB0b3RhbCBleGVjdXRpb24gdGltZSB3YXMgMC4wNgorc2Vjb25kcywgYXMgaW5kaWNhdGVkIGJ5IHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmN1bXVsYXRpdmUgc2Vjb25kczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmaWVsZC4gIFNpbmNlCitlYWNoIHNhbXBsZSBjb3VudGVkIGZvciAwLjAxIHNlY29uZHMsIHRoaXMgbWVhbnMgb25seSBzaXggc2FtcGxlcword2VyZSB0YWtlbiBkdXJpbmcgdGhlIHJ1bi4gIFR3byBvZiB0aGUgc2FtcGxlcyBvY2N1cnJlZCB3aGlsZSB0aGUKK3Byb2dyYW0gd2FzIGluIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9wZW48L3NwYW4+PC9zYW1wPiZyc3F1bzsgZnVuY3Rpb24sIGFzIGluZGljYXRlZCBieSB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2VsZiBzZWNvbmRzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZpZWxkLiAgRWFjaCBvZiB0aGUgb3RoZXIgZm91ciBzYW1wbGVzCitvY2N1cnJlZCBvbmUgZWFjaCBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9mZnRpbWU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWVtY2NweTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj53cml0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOywKK2FuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1jb3VudDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitTaW5jZSBvbmx5IHNpeCBzYW1wbGVzIHdlcmUgdGFrZW4sIG5vbmUgb2YgdGhlc2UgdmFsdWVzIGNhbgorYmUgcmVnYXJkZWQgYXMgcGFydGljdWxhcmx5IHJlbGlhYmxlLiAKK0luIGFub3RoZXIgcnVuLAordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2VsZiBzZWNvbmRzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZpZWxkIGZvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tY291bnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWlnaHQgd2VsbCBiZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjAuMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wLjAyPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1NlZSA8YSBocmVmPSJTYW1wbGluZy1FcnJvci5odG1sI1NhbXBsaW5nLUVycm9yIj5TdGF0aXN0aWNhbCBTYW1wbGluZyBFcnJvcjwvYT4sCitmb3IgYSBjb21wbGV0ZSBkaXNjdXNzaW9uLgorCisgICA8cD5UaGUgcmVtYWluaW5nIGZ1bmN0aW9ucyBpbiB0aGUgbGlzdGluZyAodGhvc2Ugd2hvc2UKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+c2VsZiBzZWNvbmRzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZpZWxkIGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MC4wMDwvc3Bhbj48L3NhbXA+JnJzcXVvOykgZGlkbid0IGFwcGVhcgoraW4gdGhlIGhpc3RvZ3JhbSBzYW1wbGVzIGF0IGFsbC4gIEhvd2V2ZXIsIHRoZSBjYWxsIGdyYXBoCitpbmRpY2F0ZWQgdGhhdCB0aGV5IHdlcmUgY2FsbGVkLCBzbyB0aGVyZWZvcmUgdGhleSBhcmUgbGlzdGVkLAorc29ydGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgYnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y2FsbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZmllbGQuIAorQ2xlYXJseSBzb21lIHRpbWUgd2FzIHNwZW50IGV4ZWN1dGluZyB0aGVzZSBmdW5jdGlvbnMsCitidXQgdGhlIHBhdWNpdHkgb2YgaGlzdG9ncmFtIHNhbXBsZXMgcHJldmVudHMgYW55CitkZXRlcm1pbmF0aW9uIG9mIGhvdyBtdWNoIHRpbWUgZWFjaCB0b29rLgorCisgICA8cD5IZXJlIGlzIHdoYXQgdGhlIGZpZWxkcyBpbiBlYWNoIGxpbmUgbWVhbjoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JSB0aW1lPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBleGVjdXRpb24gdGltZSB5b3VyIHByb2dyYW0gc3BlbnQKK2luIHRoaXMgZnVuY3Rpb24uICBUaGVzZSBzaG91bGQgYWxsIGFkZCB1cCB0byAxMDAlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y3VtdWxhdGl2ZSBzZWNvbmRzPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSBjdW11bGF0aXZlIHRvdGFsIG51bWJlciBvZiBzZWNvbmRzIHRoZSBjb21wdXRlciBzcGVudAorZXhlY3V0aW5nIHRoaXMgZnVuY3Rpb25zLCBwbHVzIHRoZSB0aW1lIHNwZW50IGluIGFsbCB0aGUgZnVuY3Rpb25zCithYm92ZSB0aGlzIG9uZSBpbiB0aGlzIHRhYmxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+c2VsZiBzZWNvbmRzPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBhY2NvdW50ZWQgZm9yIGJ5IHRoaXMgZnVuY3Rpb24gYWxvbmUuIAorVGhlIGZsYXQgcHJvZmlsZSBsaXN0aW5nIGlzIHNvcnRlZCBmaXJzdCBieSB0aGlzIG51bWJlci4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNhbGxzPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgdGltZXMgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQuICBJZiB0aGUKK2Z1bmN0aW9uIHdhcyBuZXZlciBjYWxsZWQsIG9yIHRoZSBudW1iZXIgb2YgdGltZXMgaXQgd2FzIGNhbGxlZCBjYW5ub3QKK2JlIGRldGVybWluZWQgKHByb2JhYmx5IGJlY2F1c2UgdGhlIGZ1bmN0aW9uIHdhcyBub3QgY29tcGlsZWQgd2l0aAorcHJvZmlsaW5nIGVuYWJsZWQpLCB0aGUgPGRmbj5jYWxsczwvZGZuPiBmaWVsZCBpcyBibGFuay4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNlbGYgbXMvY2FsbDwvY29kZT48ZGQ+VGhpcyByZXByZXNlbnRzIHRoZSBhdmVyYWdlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc3BlbnQgaW4gdGhpcworZnVuY3Rpb24gcGVyIGNhbGwsIGlmIHRoaXMgZnVuY3Rpb24gaXMgcHJvZmlsZWQuICBPdGhlcndpc2UsIHRoaXMgZmllbGQKK2lzIGJsYW5rIGZvciB0aGlzIGZ1bmN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dG90YWwgbXMvY2FsbDwvY29kZT48ZGQ+VGhpcyByZXByZXNlbnRzIHRoZSBhdmVyYWdlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc3BlbnQgaW4gdGhpcworZnVuY3Rpb24gYW5kIGl0cyBkZXNjZW5kYW50cyBwZXIgY2FsbCwgaWYgdGhpcyBmdW5jdGlvbiBpcyBwcm9maWxlZC4gCitPdGhlcndpc2UsIHRoaXMgZmllbGQgaXMgYmxhbmsgZm9yIHRoaXMgZnVuY3Rpb24uIAorVGhpcyBpcyB0aGUgb25seSBmaWVsZCBpbiB0aGUgZmxhdCBwcm9maWxlIHRoYXQgdXNlcyBjYWxsIGdyYXBoIGFuYWx5c2lzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+bmFtZTwvY29kZT48ZGQ+VGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uICAgVGhlIGZsYXQgcHJvZmlsZSBpcyBzb3J0ZWQgYnkgdGhpcworZmllbGQgYWxwaGFiZXRpY2FsbHkgYWZ0ZXIgdGhlIDxkZm4+c2VsZiBzZWNvbmRzPC9kZm4+IGFuZCA8ZGZuPmNhbGxzPC9kZm4+CitmaWVsZHMgYXJlIHNvcnRlZC4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTFhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDUxNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRGV0YWlscy5odG1sI0RldGFpbHMiIHRpdGxlPSJEZXRhaWxzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkRldGFpbHMuaHRtbCNEZXRhaWxzIj5EZXRhaWxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImFwcGVuZGl4Ij5BcHBlbmRpeCBBIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvaDI+CisKKzwhLS0gVGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZS4gLS0+Cis8ZGl2IGFsaWduPSJjZW50ZXIiPlZlcnNpb24gMS4zLCAzIE5vdmVtYmVyIDIwMDg8L2Rpdj4KKworPCEtLSBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgd2l0aGluIGFub3RoZXIgZG9jdW1lbnQsIC0tPgorPCEtLSBoZW5jZSBubyBzZWN0aW9uaW5nIGNvbW1hbmQgb3IgQG5vZGUuIC0tPgorPHByZSBjbGFzcz0iZGlzcGxheSI+ICAgICBDb3B5cmlnaHQgJmNvcHk7IDIwMDAsIDIwMDEsIDIwMDIsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDxhIGhyZWY9Imh0dHA6Ly9mc2Yub3JnLyI+aHR0cDovL2ZzZi5vcmcvPC9hPgorICAgICAKKyAgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgICAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorPC9wcmU+CisgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MD4KKzxsaT5QUkVBTUJMRQorCisgICAgIDxwPlRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCA8ZGZuPmZyZWU8L2Rmbj4gaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LiAKK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworICAgICA8cD5UaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICZsZHF1bztjb3B5bGVmdCZyZHF1bzssIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworICAgICA8cD5XZSBoYXZlIGRlc2lnbmVkIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byB1c2UgaXQgZm9yIG1hbnVhbHMgZm9yIGZyZWUKK3NvZnR3YXJlLCBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhIGZyZWUKK3Byb2dyYW0gc2hvdWxkIGNvbWUgd2l0aCBtYW51YWxzIHByb3ZpZGluZyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHRoZQorc29mdHdhcmUgZG9lcy4gIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgbWFudWFsczsKK2l0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLCByZWdhcmRsZXNzIG9mIHN1YmplY3QgbWF0dGVyIG9yCit3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIHByaW50ZWQgYm9vay4gIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UKK3ByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKworICAgICA8bGk+QVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworICAgICA8cD5UaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWFudWFsIG9yIG90aGVyIHdvcmssIGluIGFueSBtZWRpdW0sIHRoYXQKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZSBncmFudHMgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVubGltaXRlZCBpbiBkdXJhdGlvbiwgdG8gdXNlIHRoYXQKK3dvcmsgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGhlcmVpbi4gIFRoZSAmbGRxdW87RG9jdW1lbnQmcmRxdW87LCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhCitsaWNlbnNlZSwgYW5kIGlzIGFkZHJlc3NlZCBhcyAmbGRxdW87eW91JnJkcXVvOy4gIFlvdSBhY2NlcHQgdGhlIGxpY2Vuc2UgaWYgeW91Citjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgd29yayBpbiBhIHdheSByZXF1aXJpbmcgcGVybWlzc2lvbgordW5kZXIgY29weXJpZ2h0IGxhdy4KKworICAgICA8cD5BICZsZHF1bztNb2RpZmllZCBWZXJzaW9uJnJkcXVvOyBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKKyAgICAgPHA+QSAmbGRxdW87U2Vjb25kYXJ5IFNlY3Rpb24mcmRxdW87IGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbgorb2YgdGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsCitzdWJqZWN0IChvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbAorZGlyZWN0bHkgd2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbgorcGFydCBhIHRleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbgorYW55IG1hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworICAgICA8cD5UaGUgJmxkcXVvO0ludmFyaWFudCBTZWN0aW9ucyZyZHF1bzsgYXJlIGNlcnRhaW4gU2Vjb25kYXJ5IFNlY3Rpb25zIHdob3NlIHRpdGxlcworYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZQordGhhdCBzYXlzIHRoYXQgdGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIElmIGEKK3NlY3Rpb24gZG9lcyBub3QgZml0IHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIFNlY29uZGFyeSB0aGVuIGl0IGlzIG5vdAorYWxsb3dlZCB0byBiZSBkZXNpZ25hdGVkIGFzIEludmFyaWFudC4gIFRoZSBEb2N1bWVudCBtYXkgY29udGFpbiB6ZXJvCitJbnZhcmlhbnQgU2VjdGlvbnMuICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3QgaWRlbnRpZnkgYW55IEludmFyaWFudAorU2VjdGlvbnMgdGhlbiB0aGVyZSBhcmUgbm9uZS4KKworICAgICA8cD5UaGUgJmxkcXVvO0NvdmVyIFRleHRzJnJkcXVvOyBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwKK2FzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQKK3RoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBIEZyb250LUNvdmVyIFRleHQgbWF5CitiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworICAgICA8cD5BICZsZHF1bztUcmFuc3BhcmVudCZyZHF1bzsgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuIAorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90ICZsZHF1bztUcmFuc3BhcmVudCZyZHF1bzsgaXMgY2FsbGVkICZsZHF1bztPcGFxdWUmcmRxdW87LgorCisgICAgIDxwPkV4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCis8c3BhbiBjbGFzcz0ic2MiPmFzY2lpPC9zcGFuPiB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0Citmb3JtYXQsIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IG9yIDxhY3JvbnltPlhNTDwvYWNyb255bT4gdXNpbmcgYSBwdWJsaWNseSBhdmFpbGFibGUKKzxhY3JvbnltPkRURDwvYWNyb255bT4sIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZSA8YWNyb255bT5IVE1MPC9hY3JvbnltPiwKK1Bvc3RTY3JpcHQgb3IgPGFjcm9ueW0+UERGPC9hY3JvbnltPiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMKK29mIHRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSA8YWNyb255bT5QTkc8L2Fjcm9ueW0+LCA8YWNyb255bT5YQ0Y8L2Fjcm9ueW0+IGFuZAorPGFjcm9ueW0+SlBHPC9hY3JvbnltPi4gIE9wYXF1ZSBmb3JtYXRzIGluY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZQorcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkgcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCA8YWNyb255bT5TR01MPC9hY3JvbnltPiBvcgorPGFjcm9ueW0+WE1MPC9hY3JvbnltPiBmb3Igd2hpY2ggdGhlIDxhY3JvbnltPkRURDwvYWNyb255bT4gYW5kL29yIHByb2Nlc3NpbmcgdG9vbHMgYXJlCitub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSwgYW5kIHRoZSBtYWNoaW5lLWdlbmVyYXRlZCA8YWNyb255bT5IVE1MPC9hY3JvbnltPiwKK1Bvc3RTY3JpcHQgb3IgPGFjcm9ueW0+UERGPC9hY3JvbnltPiBwcm9kdWNlZCBieSBzb21lIHdvcmQgcHJvY2Vzc29ycyBmb3IKK291dHB1dCBwdXJwb3NlcyBvbmx5LgorCisgICAgIDxwPlRoZSAmbGRxdW87VGl0bGUgUGFnZSZyZHF1bzsgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAorcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZSBtYXRlcmlhbAordGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbiB0aGUgdGl0bGUgcGFnZS4gIEZvciB3b3JrcyBpbgorZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCAmbGRxdW87VGl0bGUgUGFnZSZyZHF1bzsgbWVhbnMKK3RoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlIHdvcmsncyB0aXRsZSwKK3ByZWNlZGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIHRoZSB0ZXh0LgorCisgICAgIDxwPlRoZSAmbGRxdW87cHVibGlzaGVyJnJkcXVvOyBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIGNvcGllcworb2YgdGhlIERvY3VtZW50IHRvIHRoZSBwdWJsaWMuCisKKyAgICAgPHA+QSBzZWN0aW9uICZsZHF1bztFbnRpdGxlZCBYWVomcmRxdW87IG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzssCismbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LCAmbGRxdW87RW5kb3JzZW1lbnRzJnJkcXVvOywgb3IgJmxkcXVvO0hpc3RvcnkmcmRxdW87LikgIFRvICZsZHF1bztQcmVzZXJ2ZSB0aGUgVGl0bGUmcmRxdW87CitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICZsZHF1bztFbnRpdGxlZCBYWVomcmRxdW87IGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKKyAgICAgPHA+VGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZSB3aGljaAorc3RhdGVzIHRoYXQgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50LiAgVGhlc2UgV2FycmFudHkKK0Rpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzCitMaWNlbnNlLCBidXQgb25seSBhcyByZWdhcmRzIGRpc2NsYWltaW5nIHdhcnJhbnRpZXM6IGFueSBvdGhlcgoraW1wbGljYXRpb24gdGhhdCB0aGVzZSBXYXJyYW50eSBEaXNjbGFpbWVycyBtYXkgaGF2ZSBpcyB2b2lkIGFuZCBoYXMKK25vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgPGxpPlZFUkJBVElNIENPUFlJTkcKKworICAgICA8cD5Zb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgorY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZSBhcHBsaWVzCit0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91IGFkZCBubyBvdGhlcgorY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IHVzZQordGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlcgorY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLCB5b3UgbWF5IGFjY2VwdAorY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuICBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaAorbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdyB0aGUgY29uZGl0aW9ucyBpbiBzZWN0aW9uIDMuCisKKyAgICAgPHA+WW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisgICAgIDxsaT5DT1BZSU5HIElOIFFVQU5USVRZCisKKyAgICAgPHA+SWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4gCitDb3B5aW5nIHdpdGggY2hhbmdlcyBsaW1pdGVkIHRvIHRoZSBjb3ZlcnMsIGFzIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZQordGhlIHRpdGxlIG9mIHRoZSBEb2N1bWVudCBhbmQgc2F0aXNmeSB0aGVzZSBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZAorYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy4KKworICAgICA8cD5JZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKKyAgICAgPHA+SWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9jb2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLiAKK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCisgICAgIDxwPkl0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlCit0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKworICAgICA8bGk+TU9ESUZJQ0FUSU9OUworCisgICAgIDxwPllvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCisgICAgICAgICAgPG9sIHR5cGU9QSBzdGFydD0xPgorPGxpPlVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgoraWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KKworICAgICAgICAgIDxsaT5MaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCityZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQKK1ZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCit1bmxlc3MgdGhleSByZWxlYXNlIHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCisKKyAgICAgICAgICA8bGk+U3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKK01vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCisKKyAgICAgICAgICA8bGk+QWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucworYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorCisgICAgICAgICAgPGxpPkluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucworYW5kIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlLgorCisgICAgICAgICAgPGxpPkluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztIaXN0b3J5JnJkcXVvOywgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCit0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCitwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgordGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87SGlzdG9yeSZyZHF1bzsgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lCitzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMKK2dpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkCitWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgorcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UKK3RoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yIHByZXZpb3VzIHZlcnNpb25zCitpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSAmbGRxdW87SGlzdG9yeSZyZHF1bzsgc2VjdGlvbi4gCitZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CitsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKK3B1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KKworICAgICAgICAgIDxsaT5Gb3IgYW55IHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0Fja25vd2xlZGdlbWVudHMmcmRxdW87IG9yICZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzssIFByZXNlcnZlCit0aGUgVGl0bGUgb2YgdGhlIHNlY3Rpb24sIGFuZCBwcmVzZXJ2ZSBpbiB0aGUgc2VjdGlvbiBhbGwgdGhlCitzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cyBhbmQvb3IKK2RlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAordW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gIFNlY3Rpb24gbnVtYmVycworb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorCisgICAgICAgICAgPGxpPkRlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87RW5kb3JzZW1lbnRzJnJkcXVvOy4gIFN1Y2ggYSBzZWN0aW9uCittYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCisgICAgICAgICAgPGxpPkRvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87IG9yCit0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCisgICAgICAgICAgPC9vbD4KKworICAgICA8cD5JZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbidzIGxpY2Vuc2Ugbm90aWNlLiAKK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorCisgICAgIDxwPllvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87RW5kb3JzZW1lbnRzJnJkcXVvOywgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcyZtZGFzaDtmb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcworYmVlbiBhcHByb3ZlZCBieSBhbiBvcmdhbml6YXRpb24gYXMgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBvZiBhCitzdGFuZGFyZC4KKworICAgICA8cD5Zb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKworICAgICA8cD5UaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworICAgICA8bGk+Q09NQklOSU5HIERPQ1VNRU5UUworCisgICAgIDxwPllvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworICAgICA8cD5UaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuIAorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworICAgICA8cD5JbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICZsZHF1bztIaXN0b3J5JnJkcXVvOworaW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIEVudGl0bGVkCismbGRxdW87SGlzdG9yeSZyZHF1bzs7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOywKK2FuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0RlZGljYXRpb25zJnJkcXVvOy4gIFlvdSBtdXN0IGRlbGV0ZSBhbGwKK3NlY3Rpb25zIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMuJnJkcXVvOworCisgICAgIDxsaT5DT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworICAgICA8cD5Zb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlciBkb2N1bWVudHMKK3JlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwgY29waWVzIG9mIHRoaXMKK0xpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weSB0aGF0IGlzIGluY2x1ZGVkIGluCit0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yCit2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cyBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuCisKKyAgICAgPHA+WW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlCitpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEgY29weSBvZiB0aGlzCitMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsCitvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorCisgICAgIDxsaT5BR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTCisKKyAgICAgPHA+QSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICZsZHF1bzthZ2dyZWdhdGUmcmRxdW87IGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuIAorV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoIGFyZSBub3QgdGhlbXNlbHZlcworZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRG9jdW1lbnQuCisKKyAgICAgPHA+SWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4gCitPdGhlcndpc2UgdGhleSBtdXN0IGFwcGVhciBvbiBwcmludGVkIGNvdmVycyB0aGF0IGJyYWNrZXQgdGhlIHdob2xlCithZ2dyZWdhdGUuCisKKyAgICAgPGxpPlRSQU5TTEFUSU9OCisKKyAgICAgPHA+VHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CitkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNC4gCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKK3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCisgICAgIDxwPklmIGEgc2VjdGlvbiBpbiB0aGUgRG9jdW1lbnQgaXMgRW50aXRsZWQgJmxkcXVvO0Fja25vd2xlZGdlbWVudHMmcmRxdW87LAorJmxkcXVvO0RlZGljYXRpb25zJnJkcXVvOywgb3IgJmxkcXVvO0hpc3RvcnkmcmRxdW87LCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8gUHJlc2VydmUKK2l0cyBUaXRsZSAoc2VjdGlvbiAxKSB3aWxsIHR5cGljYWxseSByZXF1aXJlIGNoYW5naW5nIHRoZSBhY3R1YWwKK3RpdGxlLgorCisgICAgIDxsaT5URVJNSU5BVElPTgorCisgICAgIDxwPllvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQKK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgaXQgaXMgdm9pZCwgYW5kCit3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgICA8cD5Ib3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBsaWNlbnNlCitmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksCit1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkKK3Rlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0IGhvbGRlcgorZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0bworNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCisgICAgIDxwPk1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCisgICAgIDxwPlRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHJlY2VpcHQgb2YgYSBjb3B5IG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBzYW1lIG1hdGVyaWFsIGRvZXMKK25vdCBnaXZlIHlvdSBhbnkgcmlnaHRzIHRvIHVzZSBpdC4KKworICAgICA8bGk+RlVUVVJFIFJFVklTSU9OUyBPRiBUSElTIExJQ0VOU0UKKworICAgICA8cD5UaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucworb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKKzxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8iPmh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC88L2E+LgorCisgICAgIDxwPkVhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAKK0lmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlICZsZHF1bztvciBhbnkgbGF0ZXIgdmVyc2lvbiZyZHF1bzsgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbgorbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdAorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudAorc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzCitMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEKK3ZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlCitEb2N1bWVudC4KKworICAgICA8bGk+UkVMSUNFTlNJTkcKKworICAgICA8cD4mbGRxdW87TWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIFNpdGUmcmRxdW87IChvciAmbGRxdW87TU1DIFNpdGUmcmRxdW87KSBtZWFucyBhbnkKK1dvcmxkIFdpZGUgV2ViIHNlcnZlciB0aGF0IHB1Ymxpc2hlcyBjb3B5cmlnaHRhYmxlIHdvcmtzIGFuZCBhbHNvCitwcm92aWRlcyBwcm9taW5lbnQgZmFjaWxpdGllcyBmb3IgYW55Ym9keSB0byBlZGl0IHRob3NlIHdvcmtzLiAgQQorcHVibGljIHdpa2kgdGhhdCBhbnlib2R5IGNhbiBlZGl0IGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIHNlcnZlci4gIEEKKyZsZHF1bztNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24mcmRxdW87IChvciAmbGRxdW87TU1DJnJkcXVvOykgY29udGFpbmVkIGluIHRoZQorc2l0ZSBtZWFucyBhbnkgc2V0IG9mIGNvcHlyaWdodGFibGUgd29ya3MgdGh1cyBwdWJsaXNoZWQgb24gdGhlIE1NQworc2l0ZS4KKworICAgICA8cD4mbGRxdW87Q0MtQlktU0EmcmRxdW87IG1lYW5zIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDMuMAorbGljZW5zZSBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucyBDb3Jwb3JhdGlvbiwgYSBub3QtZm9yLXByb2ZpdAorY29ycG9yYXRpb24gd2l0aCBhIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBpbiBTYW4gRnJhbmNpc2NvLAorQ2FsaWZvcm5pYSwgYXMgd2VsbCBhcyBmdXR1cmUgY29weWxlZnQgdmVyc2lvbnMgb2YgdGhhdCBsaWNlbnNlCitwdWJsaXNoZWQgYnkgdGhhdCBzYW1lIG9yZ2FuaXphdGlvbi4KKworICAgICA8cD4mbGRxdW87SW5jb3Jwb3JhdGUmcmRxdW87IG1lYW5zIHRvIHB1Ymxpc2ggb3IgcmVwdWJsaXNoIGEgRG9jdW1lbnQsIGluIHdob2xlIG9yCitpbiBwYXJ0LCBhcyBwYXJ0IG9mIGFub3RoZXIgRG9jdW1lbnQuCisKKyAgICAgPHA+QW4gTU1DIGlzICZsZHF1bztlbGlnaWJsZSBmb3IgcmVsaWNlbnNpbmcmcmRxdW87IGlmIGl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIGFuZCBpZiBhbGwgd29ya3MgdGhhdCB3ZXJlIGZpcnN0IHB1Ymxpc2hlZCB1bmRlciB0aGlzIExpY2Vuc2UKK3NvbWV3aGVyZSBvdGhlciB0aGFuIHRoaXMgTU1DLCBhbmQgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCBpbiB3aG9sZQorb3IgaW4gcGFydCBpbnRvIHRoZSBNTUMsICgxKSBoYWQgbm8gY292ZXIgdGV4dHMgb3IgaW52YXJpYW50IHNlY3Rpb25zLAorYW5kICgyKSB3ZXJlIHRodXMgaW5jb3Jwb3JhdGVkIHByaW9yIHRvIE5vdmVtYmVyIDEsIDIwMDguCisKKyAgICAgPHA+VGhlIG9wZXJhdG9yIG9mIGFuIE1NQyBTaXRlIG1heSByZXB1Ymxpc2ggYW4gTU1DIGNvbnRhaW5lZCBpbiB0aGUgc2l0ZQordW5kZXIgQ0MtQlktU0Egb24gdGhlIHNhbWUgc2l0ZSBhdCBhbnkgdGltZSBiZWZvcmUgQXVndXN0IDEsIDIwMDksCitwcm92aWRlZCB0aGUgTU1DIGlzIGVsaWdpYmxlIGZvciByZWxpY2Vuc2luZy4KKworICAgICAgICA8L29sPgorCis8aDMgY2xhc3M9ImhlYWRpbmciPkFEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHM8L2gzPgorCis8cD5UbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIENvcHlyaWdodCAoQykgIDx2YXI+eWVhcjwvdmFyPiAgPHZhcj55b3VyIG5hbWU8L3Zhcj4uCisgICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCisgICAgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlcgorICAgICAgIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkIGBgR05VCisgICAgICAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKzwvcHJlPgorICAgPHA+SWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICZsZHF1bzt3aXRoPHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPlRleHRzLiZyZHF1bzsgbGluZSB3aXRoIHRoaXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIDx2YXI+bGlzdCB0aGVpciB0aXRsZXM8L3Zhcj4sIHdpdGgKKyAgICAgICAgIHRoZSBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyA8dmFyPmxpc3Q8L3Zhcj4sIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzCisgICAgICAgICBiZWluZyA8dmFyPmxpc3Q8L3Zhcj4uCis8L3ByZT4KKyAgIDxwPklmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCitjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUsIG1lcmdlIHRob3NlIHR3byBhbHRlcm5hdGl2ZXMgdG8gc3VpdCB0aGUKK3NpdHVhdGlvbi4KKworICAgPHA+SWYgeW91ciBkb2N1bWVudCBjb250YWlucyBub250cml2aWFsIGV4YW1wbGVzIG9mIHByb2dyYW0gY29kZSwgd2UKK3JlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YKK2ZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCit0byBwZXJtaXQgdGhlaXIgdXNlIGluIGZyZWUgc29mdHdhcmUuCisKKzwhLS0gTG9jYWwgVmFyaWFibGVzOiAtLT4KKzwhLS0gaXNwZWxsLWxvY2FsLXBkaWN0OiAiaXNwZWxsLWRpY3QiIC0tPgorPCEtLSBFbmQ6IC0tPgorPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvSG93LWRvLUlfMDAzZi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvSG93LWRvLUlfMDAzZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTkzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9Ib3ctZG8tSV8wMDNmLmh0bWwKQEAgLTAsMCArMSw4OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SG93IGRvIEk/IC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW5hY2N1cmFjeS5odG1sI0luYWNjdXJhY3kiIHRpdGxlPSJJbmFjY3VyYWN5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW5jb21wYXRpYmlsaXRpZXMuaHRtbCNJbmNvbXBhdGliaWxpdGllcyIgdGl0bGU9IkluY29tcGF0aWJpbGl0aWVzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikhvdy1kby1JJTNmIj48L2E+Cis8YSBuYW1lPSJIb3ctZG8tSV8wMDNmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSW5hY2N1cmFjeS5odG1sI0luYWNjdXJhY3kiPkluYWNjdXJhY3k8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NyBBbnN3ZXJzIHRvIENvbW1vbiBRdWVzdGlvbnM8L2gyPgorCisgICAgIDxkbD4KKzxkdD5Ib3cgY2FuIEkgZ2V0IG1vcmUgZXhhY3QgaW5mb3JtYXRpb24gYWJvdXQgaG90IHNwb3RzIGluIG15IHByb2dyYW0/PGRkPgorTG9va2luZyBhdCB0aGUgcGVyLWxpbmUgY2FsbCBjb3VudHMgb25seSB0ZWxscyBwYXJ0IG9mIHRoZSBzdG9yeS4gCitCZWNhdXNlIDxjb2RlPmdwcm9mPC9jb2RlPiBjYW4gb25seSByZXBvcnQgY2FsbCB0aW1lcyBhbmQgY291bnRzIGJ5IGZ1bmN0aW9uLAordGhlIGJlc3Qgd2F5IHRvIGdldCBmaW5lci1ncmFpbmVkIGluZm9ybWF0aW9uIG9uIHdoZXJlIHRoZSBwcm9ncmFtCitpcyBzcGVuZGluZyBpdHMgdGltZSBpcyB0byByZS1mYWN0b3IgbGFyZ2UgZnVuY3Rpb25zIGludG8gc2VxdWVuY2VzCitvZiBjYWxscyB0byBzbWFsbGVyIG9uZXMuICBCZXdhcmUgaG93ZXZlciB0aGF0IHRoaXMgY2FuIGludHJvZHVjZQorYXJ0aWZpY2lhbCBob3Qgc3BvdHMgc2luY2UgY29tcGlsaW5nIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcGc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWRkcyBhIHNpZ25pZmljYW50CitvdmVyaGVhZCB0byBmdW5jdGlvbiBjYWxscy4gIEFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIGlzIHRvIHVzZSBhCitub24taW50cnVzaXZlIHByb2ZpbGVyLCBlLmcuIG9wcm9maWxlLgorCisgICAgIDxicj48ZHQ+SG93IGRvIEkgZmluZCB3aGljaCBsaW5lcyBpbiBteSBwcm9ncmFtIHdlcmUgZXhlY3V0ZWQgdGhlIG1vc3QgdGltZXM/PGRkPgorVXNlIHRoZSA8Y29kZT5nY292PC9jb2RlPiBwcm9ncmFtLgorCisgICAgIDxicj48ZHQ+SG93IGRvIEkgZmluZCB3aGljaCBsaW5lcyBpbiBteSBwcm9ncmFtIGNhbGxlZCBhIHBhcnRpY3VsYXIgZnVuY3Rpb24/PGRkPgorVXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z3Byb2YgLWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kIGxvb2t1cCB0aGUgZnVuY3Rpb24gaW4gdGhlIGNhbGwgZ3JhcGguIAorVGhlIGNhbGxlcnMgd2lsbCBiZSBicm9rZW4gZG93biBieSBmdW5jdGlvbiBhbmQgbGluZSBudW1iZXIuCisKKyAgICAgPGJyPjxkdD5Ib3cgZG8gSSBhbmFseXplIGEgcHJvZ3JhbSB0aGF0IHJ1bnMgZm9yIGxlc3MgdGhhbiBhIHNlY29uZD88ZGQ+CitUcnkgdXNpbmcgYSBzaGVsbCBzY3JpcHQgbGlrZSB0aGlzIG9uZToKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgZm9yIGkgaW4gYHNlcSAxIDEwMGA7IGRvCisgICAgICAgICAgICBmYXN0cHJvZworICAgICAgICAgICAgbXYgZ21vbi5vdXQgZ21vbi5vdXQuJGkKKyAgICAgICAgICBkb25lCisgICAgICAgICAgCisgICAgICAgICAgZ3Byb2YgLXMgZmFzdHByb2cgZ21vbi5vdXQuKgorICAgICAgICAgIAorICAgICAgICAgIGdwcm9mIGZhc3Rwcm9nIGdtb24uc3VtCis8L3ByZT4KKyAgICAgPHA+SWYgeW91ciBwcm9ncmFtIGlzIGNvbXBsZXRlbHkgZGV0ZXJtaW5pc3RpYywgYWxsIHRoZSBjYWxsIGNvdW50cword2lsbCBiZSBzaW1wbGUgbXVsdGlwbGVzIG9mIDEwMCAoaS5lLiwgYSBmdW5jdGlvbiBjYWxsZWQgb25jZSBpbgorZWFjaCBydW4gd2lsbCBhcHBlYXIgd2l0aCBhIGNhbGwgY291bnQgb2YgMTAwKS4KKworPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvSW1wbGVtZW50YXRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0ltcGxlbWVudGF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlNDVlMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0ltcGxlbWVudGF0aW9uLmh0bWwKQEAgLTAsMCArMSwxNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkltcGxlbWVudGF0aW9uIC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkRldGFpbHMuaHRtbCNEZXRhaWxzIiB0aXRsZT0iRGV0YWlscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZpbGUtRm9ybWF0Lmh0bWwjRmlsZS1Gb3JtYXQiIHRpdGxlPSJGaWxlIEZvcm1hdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbXBsZW1lbnRhdGlvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGaWxlLUZvcm1hdC5odG1sI0ZpbGUtRm9ybWF0Ij5GaWxlIEZvcm1hdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkRldGFpbHMuaHRtbCNEZXRhaWxzIj5EZXRhaWxzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OS4xIEltcGxlbWVudGF0aW9uIG9mIFByb2ZpbGluZzwvaDM+CisKKzxwPlByb2ZpbGluZyB3b3JrcyBieSBjaGFuZ2luZyBob3cgZXZlcnkgZnVuY3Rpb24gaW4geW91ciBwcm9ncmFtIGlzIGNvbXBpbGVkCitzbyB0aGF0IHdoZW4gaXQgaXMgY2FsbGVkLCBpdCB3aWxsIHN0YXNoIGF3YXkgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZQoraXQgd2FzIGNhbGxlZCBmcm9tLiAgRnJvbSB0aGlzLCB0aGUgcHJvZmlsZXIgY2FuIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbgorY2FsbGVkIGl0LCBhbmQgY2FuIGNvdW50IGhvdyBtYW55IHRpbWVzIGl0IHdhcyBjYWxsZWQuICBUaGlzIGNoYW5nZSBpcyBtYWRlCitieSB0aGUgY29tcGlsZXIgd2hlbiB5b3VyIHByb2dyYW0gaXMgY29tcGlsZWQgd2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcGc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLAord2hpY2ggY2F1c2VzIGV2ZXJ5IGZ1bmN0aW9uIHRvIGNhbGwgPGNvZGU+bWNvdW50PC9jb2RlPgorKG9yIDxjb2RlPl9tY291bnQ8L2NvZGU+LCBvciA8Y29kZT5fX21jb3VudDwvY29kZT4sIGRlcGVuZGluZyBvbiB0aGUgT1MgYW5kIGNvbXBpbGVyKQorYXMgb25lIG9mIGl0cyBmaXJzdCBvcGVyYXRpb25zLgorCisgICA8cD5UaGUgPGNvZGU+bWNvdW50PC9jb2RlPiByb3V0aW5lLCBpbmNsdWRlZCBpbiB0aGUgcHJvZmlsaW5nIGxpYnJhcnksCitpcyByZXNwb25zaWJsZSBmb3IgcmVjb3JkaW5nIGluIGFuIGluLW1lbW9yeSBjYWxsIGdyYXBoIHRhYmxlCitib3RoIGl0cyBwYXJlbnQgcm91dGluZSAodGhlIGNoaWxkKSBhbmQgaXRzIHBhcmVudCdzIHBhcmVudC4gIFRoaXMgaXMKK3R5cGljYWxseSBkb25lIGJ5IGV4YW1pbmluZyB0aGUgc3RhY2sgZnJhbWUgdG8gZmluZCBib3RoCit0aGUgYWRkcmVzcyBvZiB0aGUgY2hpbGQsIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gdGhlIG9yaWdpbmFsIHBhcmVudC4gCitTaW5jZSB0aGlzIGlzIGEgdmVyeSBtYWNoaW5lLWRlcGVuZGVudCBvcGVyYXRpb24sIDxjb2RlPm1jb3VudDwvY29kZT4KK2l0c2VsZiBpcyB0eXBpY2FsbHkgYSBzaG9ydCBhc3NlbWJseS1sYW5ndWFnZSBzdHViIHJvdXRpbmUKK3RoYXQgZXh0cmFjdHMgdGhlIHJlcXVpcmVkCitpbmZvcm1hdGlvbiwgYW5kIHRoZW4gY2FsbHMgPGNvZGU+X19tY291bnRfaW50ZXJuYWw8L2NvZGU+CisoYSBub3JtYWwgQyBmdW5jdGlvbikgd2l0aCB0d28gYXJndW1lbnRzJm1kYXNoOzxjb2RlPmZyb21wYzwvY29kZT4gYW5kIDxjb2RlPnNlbGZwYzwvY29kZT4uIAorPGNvZGU+X19tY291bnRfaW50ZXJuYWw8L2NvZGU+IGlzIHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZwordGhlIGluLW1lbW9yeSBjYWxsIGdyYXBoLCB3aGljaCByZWNvcmRzIDxjb2RlPmZyb21wYzwvY29kZT4sIDxjb2RlPnNlbGZwYzwvY29kZT4sCithbmQgdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIG9mIHRoZXNlIGNhbGwgYXJjcyB3YXMgdHJhdmVyc2VkLgorCisgICA8cD5HQ0MgVmVyc2lvbiAyIHByb3ZpZGVzIGEgbWFnaWNhbCBmdW5jdGlvbiAoPGNvZGU+X19idWlsdGluX3JldHVybl9hZGRyZXNzPC9jb2RlPiksCit3aGljaCBhbGxvd3MgYSBnZW5lcmljIDxjb2RlPm1jb3VudDwvY29kZT4gZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKK3JlcXVpcmVkIGluZm9ybWF0aW9uIGZyb20gdGhlIHN0YWNrIGZyYW1lLiAgSG93ZXZlciwgb24gc29tZQorYXJjaGl0ZWN0dXJlcywgbW9zdCBub3RhYmx5IHRoZSBTUEFSQywgdXNpbmcgdGhpcyBidWlsdGluIGNhbiBiZQordmVyeSBjb21wdXRhdGlvbmFsbHkgZXhwZW5zaXZlLCBhbmQgYW4gYXNzZW1ibHkgbGFuZ3VhZ2UgdmVyc2lvbgorb2YgPGNvZGU+bWNvdW50PC9jb2RlPiBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorCisgICA8cD5OdW1iZXItb2YtY2FsbHMgaW5mb3JtYXRpb24gZm9yIGxpYnJhcnkgcm91dGluZXMgaXMgY29sbGVjdGVkIGJ5IHVzaW5nIGEKK3NwZWNpYWwgdmVyc2lvbiBvZiB0aGUgQyBsaWJyYXJ5LiAgVGhlIHByb2dyYW1zIGluIGl0IGFyZSB0aGUgc2FtZSBhcyBpbgordGhlIHVzdWFsIEMgbGlicmFyeSwgYnV0IHRoZXkgd2VyZSBjb21waWxlZCB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXBnPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSWYgeW91CitsaW5rIHlvdXIgcHJvZ3JhbSB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2NjIC4uLiAtcGc8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGl0IGF1dG9tYXRpY2FsbHkgdXNlcyB0aGUKK3Byb2ZpbGluZyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICA8cD5Qcm9maWxpbmcgYWxzbyBpbnZvbHZlcyB3YXRjaGluZyB5b3VyIHByb2dyYW0gYXMgaXQgcnVucywgYW5kIGtlZXBpbmcgYQoraGlzdG9ncmFtIG9mIHdoZXJlIHRoZSBwcm9ncmFtIGNvdW50ZXIgaGFwcGVucyB0byBiZSBldmVyeSBub3cgYW5kIHRoZW4uIAorVHlwaWNhbGx5IHRoZSBwcm9ncmFtIGNvdW50ZXIgaXMgbG9va2VkIGF0IGFyb3VuZCAxMDAgdGltZXMgcGVyIHNlY29uZCBvZgorcnVuIHRpbWUsIGJ1dCB0aGUgZXhhY3QgZnJlcXVlbmN5IG1heSB2YXJ5IGZyb20gc3lzdGVtIHRvIHN5c3RlbS4KKworICAgPHA+VGhpcyBpcyBkb25lIGlzIG9uZSBvZiB0d28gd2F5cy4gIE1vc3QgVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zCitwcm92aWRlIGEgPGNvZGU+cHJvZmlsKCk8L2NvZGU+IHN5c3RlbSBjYWxsLCB3aGljaCByZWdpc3RlcnMgYSBtZW1vcnkKK2FycmF5IHdpdGggdGhlIGtlcm5lbCwgYWxvbmcgd2l0aCBhIHNjYWxlCitmYWN0b3IgdGhhdCBkZXRlcm1pbmVzIGhvdyB0aGUgcHJvZ3JhbSdzIGFkZHJlc3Mgc3BhY2UgbWFwcworaW50byB0aGUgYXJyYXkuIAorVHlwaWNhbCBzY2FsaW5nIHZhbHVlcyBjYXVzZSBldmVyeSAyIHRvIDggYnl0ZXMgb2YgYWRkcmVzcyBzcGFjZQordG8gbWFwIGludG8gYSBzaW5nbGUgYXJyYXkgc2xvdC4gCitPbiBldmVyeSB0aWNrIG9mIHRoZSBzeXN0ZW0gY2xvY2sKKyhhc3N1bWluZyB0aGUgcHJvZmlsZWQgcHJvZ3JhbSBpcyBydW5uaW5nKSwgdGhlIHZhbHVlIG9mIHRoZQorcHJvZ3JhbSBjb3VudGVyIGlzIGV4YW1pbmVkIGFuZCB0aGUgY29ycmVzcG9uZGluZyBzbG90IGluCit0aGUgbWVtb3J5IGFycmF5IGlzIGluY3JlbWVudGVkLiAgU2luY2UgdGhpcyBpcyBkb25lIGluIHRoZSBrZXJuZWwsCit3aGljaCBoYWQgdG8gaW50ZXJydXB0IHRoZSBwcm9jZXNzIGFueXdheSB0byBoYW5kbGUgdGhlIGNsb2NrCitpbnRlcnJ1cHQsIHZlcnkgbGl0dGxlIGFkZGl0aW9uYWwgc3lzdGVtIG92ZXJoZWFkIGlzIHJlcXVpcmVkLgorCisgICA8cD5Ib3dldmVyLCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLCBtb3N0IG5vdGFibHkgTGludXggMi4wIChhbmQgZWFybGllciksCitkbyBub3QgcHJvdmlkZSBhIDxjb2RlPnByb2ZpbCgpPC9jb2RlPiBzeXN0ZW0gY2FsbC4gIE9uIHN1Y2ggYSBzeXN0ZW0sCithcnJhbmdlbWVudHMgYXJlIG1hZGUgZm9yIHRoZSBrZXJuZWwgdG8gcGVyaW9kaWNhbGx5IGRlbGl2ZXIKK2Egc2lnbmFsIHRvIHRoZSBwcm9jZXNzICh0eXBpY2FsbHkgdmlhIDxjb2RlPnNldGl0aW1lcigpPC9jb2RlPiksCit3aGljaCB0aGVuIHBlcmZvcm1zIHRoZSBzYW1lIG9wZXJhdGlvbiBvZiBleGFtaW5pbmcgdGhlCitwcm9ncmFtIGNvdW50ZXIgYW5kIGluY3JlbWVudGluZyBhIHNsb3QgaW4gdGhlIG1lbW9yeSBhcnJheS4gCitTaW5jZSB0aGlzIG1ldGhvZCByZXF1aXJlcyBhIHNpZ25hbCB0byBiZSBkZWxpdmVyZWQgdG8KK3VzZXIgc3BhY2UgZXZlcnkgdGltZSBhIHNhbXBsZSBpcyB0YWtlbiwgaXQgdXNlcyBjb25zaWRlcmFibHkKK21vcmUgb3ZlcmhlYWQgdGhhbiBrZXJuZWwtYmFzZWQgcHJvZmlsaW5nLiAgQWxzbywgZHVlIHRvIHRoZQorYWRkZWQgZGVsYXkgcmVxdWlyZWQgdG8gZGVsaXZlciB0aGUgc2lnbmFsLCB0aGlzIG1ldGhvZCBpcworbGVzcyBhY2N1cmF0ZSBhcyB3ZWxsLgorCisgICA8cD5BIHNwZWNpYWwgc3RhcnR1cCByb3V0aW5lIGFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoZSBoaXN0b2dyYW0gYW5kCitlaXRoZXIgY2FsbHMgPGNvZGU+cHJvZmlsKCk8L2NvZGU+IG9yIHNldHMgdXAKK2EgY2xvY2sgc2lnbmFsIGhhbmRsZXIuIAorVGhpcyByb3V0aW5lICg8Y29kZT5tb25zdGFydHVwPC9jb2RlPikgY2FuIGJlIGludm9rZWQgaW4gc2V2ZXJhbCB3YXlzLiAKK09uIExpbnV4IHN5c3RlbXMsIGEgc3BlY2lhbCBwcm9maWxpbmcgc3RhcnR1cCBmaWxlIDxjb2RlPmdjcnQwLm88L2NvZGU+LAord2hpY2ggaW52b2tlcyA8Y29kZT5tb25zdGFydHVwPC9jb2RlPiBiZWZvcmUgPGNvZGU+bWFpbjwvY29kZT4sCitpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgPGNvZGU+Y3J0MC5vPC9jb2RlPi4gCitVc2Ugb2YgdGhpcyBzcGVjaWFsIHN0YXJ0dXAgZmlsZSBpcyBvbmUgb2YgdGhlIGVmZmVjdHMKK29mIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2NjIC4uLiAtcGc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gbGluay4gCitPbiBTUEFSQyBzeXN0ZW1zLCBubyBzcGVjaWFsIHN0YXJ0dXAgZmlsZXMgYXJlIHVzZWQuIAorUmF0aGVyLCB0aGUgPGNvZGU+bWNvdW50PC9jb2RlPiByb3V0aW5lLCB3aGVuIGl0IGlzIGludm9rZWQgZm9yCit0aGUgZmlyc3QgdGltZSAodHlwaWNhbGx5IHdoZW4gPGNvZGU+bWFpbjwvY29kZT4gaXMgY2FsbGVkKSwKK2NhbGxzIDxjb2RlPm1vbnN0YXJ0dXA8L2NvZGU+LgorCisgICA8cD5JZiB0aGUgY29tcGlsZXIncyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1hPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB3YXMgdXNlZCwgYmFzaWMtYmxvY2sgY291bnRpbmcKK2lzIGFsc28gZW5hYmxlZC4gIEVhY2ggb2JqZWN0IGZpbGUgaXMgdGhlbiBjb21waWxlZCB3aXRoIGEgc3RhdGljIGFycmF5CitvZiBjb3VudHMsIGluaXRpYWxseSB6ZXJvLiAKK0luIHRoZSBleGVjdXRhYmxlIGNvZGUsIGV2ZXJ5IHRpbWUgYSBuZXcgYmFzaWMtYmxvY2sgYmVnaW5zCisoaS5lLiwgd2hlbiBhbiA8Y29kZT5pZjwvY29kZT4gc3RhdGVtZW50IGFwcGVhcnMpLCBhbiBleHRyYSBpbnN0cnVjdGlvbgoraXMgaW5zZXJ0ZWQgdG8gaW5jcmVtZW50IHRoZSBjb3JyZXNwb25kaW5nIGNvdW50IGluIHRoZSBhcnJheS4gCitBdCBjb21waWxlIHRpbWUsIGEgcGFpcmVkIGFycmF5IHdhcyBjb25zdHJ1Y3RlZCB0aGF0IHJlY29yZGVkCit0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiBlYWNoIGJhc2ljLWJsb2NrLiAgVGFrZW4gdG9nZXRoZXIsCit0aGUgdHdvIGFycmF5cyByZWNvcmQgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgZXZlcnkgYmFzaWMtYmxvY2ssCithbG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgdGltZXMgaXQgd2FzIGV4ZWN1dGVkLgorCisgICA8cD5UaGUgcHJvZmlsaW5nIGxpYnJhcnkgYWxzbyBpbmNsdWRlcyBhIGZ1bmN0aW9uICg8Y29kZT5tY2xlYW51cDwvY29kZT4pIHdoaWNoIGlzCit0eXBpY2FsbHkgcmVnaXN0ZXJlZCB1c2luZyA8Y29kZT5hdGV4aXQoKTwvY29kZT4gdG8gYmUgY2FsbGVkIGFzIHRoZQorcHJvZ3JhbSBleGl0cywgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIHRoZSBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nbW9uLm91dDwvc3Bhbj48L3NhbXA+LiAKK1Byb2ZpbGluZyBpcyB0dXJuZWQgb2ZmLCB2YXJpb3VzIGhlYWRlcnMgYXJlIG91dHB1dCwgYW5kIHRoZSBoaXN0b2dyYW0KK2lzIHdyaXR0ZW4sIGZvbGxvd2VkIGJ5IHRoZSBjYWxsLWdyYXBoIGFyY3MgYW5kIHRoZSBiYXNpYy1ibG9jayBjb3VudHMuCisKKyAgIDxwPlRoZSBvdXRwdXQgZnJvbSA8Y29kZT5ncHJvZjwvY29kZT4gZ2l2ZXMgbm8gaW5kaWNhdGlvbiBvZiBwYXJ0cyBvZiB5b3VyIHByb2dyYW0gdGhhdAorYXJlIGxpbWl0ZWQgYnkgSS9PIG9yIHN3YXBwaW5nIGJhbmR3aWR0aC4gIFRoaXMgaXMgYmVjYXVzZSBzYW1wbGVzIG9mIHRoZQorcHJvZ3JhbSBjb3VudGVyIGFyZSB0YWtlbiBhdCBmaXhlZCBpbnRlcnZhbHMgb2YgdGhlIHByb2dyYW0ncyBydW4gdGltZS4gCitUaGVyZWZvcmUsIHRoZQordGltZSBtZWFzdXJlbWVudHMgaW4gPGNvZGU+Z3Byb2Y8L2NvZGU+IG91dHB1dCBzYXkgbm90aGluZyBhYm91dCB0aW1lIHRoYXQgeW91cgorcHJvZ3JhbSB3YXMgbm90IHJ1bm5pbmcuICBGb3IgZXhhbXBsZSwgYSBwYXJ0IG9mIHRoZSBwcm9ncmFtIHRoYXQgY3JlYXRlcworc28gbXVjaCBkYXRhIHRoYXQgaXQgY2Fubm90IGFsbCBmaXQgaW4gcGh5c2ljYWwgbWVtb3J5IGF0IG9uY2UgbWF5IHJ1biB2ZXJ5CitzbG93bHkgZHVlIHRvIHRocmFzaGluZywgYnV0IDxjb2RlPmdwcm9mPC9jb2RlPiB3aWxsIHNheSBpdCB1c2VzIGxpdHRsZSB0aW1lLiAgT24KK3RoZSBvdGhlciBoYW5kLCBzYW1wbGluZyBieSBydW4gdGltZSBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IHRoZSBhbW91bnQgb2YKK2xvYWQgZHVlIHRvIG90aGVyIHVzZXJzIHdvbid0IGRpcmVjdGx5IGFmZmVjdCB0aGUgb3V0cHV0IHlvdSBnZXQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0luYWNjdXJhY3kuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0luYWNjdXJhY3kuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk2ZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvSW5hY2N1cmFjeS5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkluYWNjdXJhY3kgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiIHRpdGxlPSJPdXRwdXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIb3ctZG8tSV8wMDNmLmh0bWwjSG93LWRvLUlfMDAzZiIgdGl0bGU9IkhvdyBkbyBJPyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbmFjY3VyYWN5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ikhvdy1kby1JXzAwM2YuaHRtbCNIb3ctZG8tSV8wMDNmIj5Ib3cgZG8gST88L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiPk91dHB1dDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj42IEluYWNjdXJhY3kgb2YgPGNvZGU+Z3Byb2Y8L2NvZGU+IE91dHB1dDwvaDI+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJTYW1wbGluZy1FcnJvci5odG1sI1NhbXBsaW5nLUVycm9yIj5TYW1wbGluZyBFcnJvcjwvYT46ICAgICAgIFN0YXRpc3RpY2FsIG1hcmdpbnMgb2YgZXJyb3IKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkFzc3VtcHRpb25zLmh0bWwjQXNzdW1wdGlvbnMiPkFzc3VtcHRpb25zPC9hPjogICAgICAgICAgRXN0aW1hdGluZyBjaGlsZHJlbiB0aW1lcworPC91bD4KKworPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvSW5jb21wYXRpYmlsaXRpZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0luY29tcGF0aWJpbGl0aWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwODg2MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0luY29tcGF0aWJpbGl0aWVzLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5jb21wYXRpYmlsaXRpZXMgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJIb3ctZG8tSV8wMDNmLmh0bWwjSG93LWRvLUlfMDAzZiIgdGl0bGU9IkhvdyBkbyBJPyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRldGFpbHMuaHRtbCNEZXRhaWxzIiB0aXRsZT0iRGV0YWlscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbmNvbXBhdGliaWxpdGllcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJEZXRhaWxzLmh0bWwjRGV0YWlscyI+RGV0YWlsczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikhvdy1kby1JXzAwM2YuaHRtbCNIb3ctZG8tSV8wMDNmIj5Ib3cgZG8gST88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+OCBJbmNvbXBhdGliaWxpdGllcyB3aXRoIFVuaXggPGNvZGU+Z3Byb2Y8L2NvZGU+PC9oMj4KKworPHA+PHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmdwcm9mPC9jb2RlPiBhbmQgQmVya2VsZXkgVW5peCA8Y29kZT5ncHJvZjwvY29kZT4gdXNlIHRoZSBzYW1lIGRhdGEKK2ZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdtb24ub3V0PC9zcGFuPjwvc2FtcD4sIGFuZCBwcm92aWRlIGVzc2VudGlhbGx5IHRoZSBzYW1lIGluZm9ybWF0aW9uLiAgQnV0Cit0aGVyZSBhcmUgYSBmZXcgZGlmZmVyZW5jZXMuCisKKyAgICAgPHVsPgorPGxpPjxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8Y29kZT5ncHJvZjwvY29kZT4gdXNlcyBhIG5ldywgZ2VuZXJhbGl6ZWQgZmlsZSBmb3JtYXQgd2l0aCBzdXBwb3J0Citmb3IgYmFzaWMtYmxvY2sgZXhlY3V0aW9uIGNvdW50cyBhbmQgbm9uLXJlYWx0aW1lIGhpc3RvZ3JhbXMuICBBIG1hZ2ljCitjb29raWUgYW5kIHZlcnNpb24gbnVtYmVyIGFsbG93cyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gZWFzaWx5IGlkZW50aWZ5CituZXcgc3R5bGUgZmlsZXMuICBPbGQgQlNELXN0eWxlIGZpbGVzIGNhbiBzdGlsbCBiZSByZWFkLiAKK1NlZSA8YSBocmVmPSJGaWxlLUZvcm1hdC5odG1sI0ZpbGUtRm9ybWF0Ij5Qcm9maWxpbmcgRGF0YSBGaWxlIEZvcm1hdDwvYT4uCisKKyAgICAgPGxpPkZvciBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiwgVW5peCA8Y29kZT5ncHJvZjwvY29kZT4gbGlzdHMgdGhlIGZ1bmN0aW9uIGFzIGEKK3BhcmVudCBhbmQgYXMgYSBjaGlsZCwgd2l0aCBhIDxjb2RlPmNhbGxzPC9jb2RlPiBmaWVsZCB0aGF0IGxpc3RzIHRoZSBudW1iZXIKK29mIHJlY3Vyc2l2ZSBjYWxscy4gIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8Y29kZT5ncHJvZjwvY29kZT4gb21pdHMgdGhlc2UgbGluZXMgYW5kIHB1dHMKK3RoZSBudW1iZXIgb2YgcmVjdXJzaXZlIGNhbGxzIGluIHRoZSBwcmltYXJ5IGxpbmUuCisKKyAgICAgPGxpPldoZW4gYSBmdW5jdGlvbiBpcyBzdXBwcmVzc2VkIGZyb20gdGhlIGNhbGwgZ3JhcGggd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1lPC9zcGFuPjwvc2FtcD4mcnNxdW87LCA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4KKzxjb2RlPmdwcm9mPC9jb2RlPiBzdGlsbCBsaXN0cyBpdCBhcyBhIHN1YnJvdXRpbmUgb2YgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdC4KKworICAgICA8bGk+PHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmdwcm9mPC9jb2RlPiBhY2NlcHRzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1rPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpdGggaXRzIGFyZ3VtZW50CitpbiB0aGUgZm9ybSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZyb20vdG88L3NwYW4+PC9zYW1wPiZyc3F1bzssIGluc3RlYWQgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mcm9tIHRvPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5JbiB0aGUgYW5ub3RhdGVkIHNvdXJjZSBsaXN0aW5nLAoraWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2ljIGJsb2NrcyBvbiB0aGUgc2FtZSBsaW5lLAorPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmdwcm9mPC9jb2RlPiBwcmludHMgYWxsIG9mIHRoZWlyIGNvdW50cywgc2VwYXJhdGVkIGJ5IGNvbW1hcy4KKworICAgICA8bGk+VGhlIGJsdXJicywgZmllbGQgd2lkdGhzLCBhbmQgb3V0cHV0IGZvcm1hdHMgYXJlIGRpZmZlcmVudC4gIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPgorPGNvZGU+Z3Byb2Y8L2NvZGU+IHByaW50cyBibHVyYnMgYWZ0ZXIgdGhlIHRhYmxlcywgc28gdGhhdCB5b3UgY2FuIHNlZSB0aGUKK3RhYmxlcyB3aXRob3V0IHNraXBwaW5nIHRoZSBibHVyYnMuIAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvSW50ZXJuYWxzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9JbnRlcm5hbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTM1OTE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvSW50ZXJuYWxzLmh0bWwKQEAgLTAsMCArMSwyMjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludGVybmFscyAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJEZXRhaWxzLmh0bWwjRGV0YWlscyIgdGl0bGU9IkRldGFpbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJGaWxlLUZvcm1hdC5odG1sI0ZpbGUtRm9ybWF0IiB0aXRsZT0iRmlsZSBGb3JtYXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEZWJ1Z2dpbmcuaHRtbCNEZWJ1Z2dpbmciIHRpdGxlPSJEZWJ1Z2dpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBncHJvZiBwcm9maWxlciBvZiB0aGUgR05VIHN5c3RlbS4KKworQ29weXJpZ2h0IChDKSAxOTg4LCAxOTkyLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLAorMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50ZXJuYWxzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRlYnVnZ2luZy5odG1sI0RlYnVnZ2luZyI+RGVidWdnaW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRmlsZS1Gb3JtYXQuaHRtbCNGaWxlLUZvcm1hdCI+RmlsZSBGb3JtYXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJEZXRhaWxzLmh0bWwjRGV0YWlscyI+RGV0YWlsczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjkuMyA8Y29kZT5ncHJvZjwvY29kZT4ncyBJbnRlcm5hbCBPcGVyYXRpb248L2gzPgorCis8cD5MaWtlIG1vc3QgcHJvZ3JhbXMsIDxjb2RlPmdwcm9mPC9jb2RlPiBiZWdpbnMgYnkgcHJvY2Vzc2luZyBpdHMgb3B0aW9ucy4gCitEdXJpbmcgdGhpcyBzdGFnZSwgaXQgbWF5IGJ1aWxkaW5nIGl0cyBzeW1zcGVjIGxpc3QKKyg8Y29kZT5zeW1faWRzLmM6c3ltX2lkX2FkZDwvY29kZT4pLCBpZgorb3B0aW9ucyBhcmUgc3BlY2lmaWVkIHdoaWNoIHVzZSBzeW1zcGVjcy4gCis8Y29kZT5ncHJvZjwvY29kZT4gbWFpbnRhaW5zIGEgc2luZ2xlIGxpbmtlZCBsaXN0IG9mIHN5bXNwZWNzLAord2hpY2ggd2lsbCBldmVudHVhbGx5IGdldCB0dXJuZWQgaW50byAxMiBzeW1ib2wgdGFibGVzLAorb3JnYW5pemVkIGludG8gc2l4IGluY2x1ZGUvZXhjbHVkZSBwYWlycyZtZGFzaDtvbmUKK3BhaXIgZWFjaCBmb3IgdGhlIGZsYXQgcHJvZmlsZSAoSU5DTF9GTEFUL0VYQ0xfRkxBVCksCit0aGUgY2FsbCBncmFwaCBhcmNzIChJTkNMX0FSQ1MvRVhDTF9BUkNTKSwKK3ByaW50aW5nIGluIHRoZSBjYWxsIGdyYXBoIChJTkNMX0dSQVBIL0VYQ0xfR1JBUEgpLAordGltaW5nIHByb3BhZ2F0aW9uIGluIHRoZSBjYWxsIGdyYXBoIChJTkNMX1RJTUUvRVhDTF9USU1FKSwKK3RoZSBhbm5vdGF0ZWQgc291cmNlIGxpc3RpbmcgKElOQ0xfQU5OTy9FWENMX0FOTk8pLAorYW5kIHRoZSBleGVjdXRpb24gY291bnQgbGlzdGluZyAoSU5DTF9FWEVDL0VYQ0xfRVhFQykuCisKKyAgIDxwPkFmdGVyIG9wdGlvbiBwcm9jZXNzaW5nLCA8Y29kZT5ncHJvZjwvY29kZT4gZmluaXNoZXMKK2J1aWxkaW5nIHRoZSBzeW1zcGVjIGxpc3QgYnkgYWRkaW5nIGFsbCB0aGUgc3ltc3BlY3MgaW4KKzxjb2RlPmRlZmF1bHRfZXhjbHVkZWRfbGlzdDwvY29kZT4gdG8gdGhlIGV4Y2x1ZGUgbGlzdHMKK0VYQ0xfVElNRSBhbmQgRVhDTF9HUkFQSCwgYW5kIGlmIGxpbmUtYnktbGluZSBwcm9maWxpbmcgaXMgc3BlY2lmaWVkLAorRVhDTF9GTEFUIGFzIHdlbGwuIAorVGhlc2UgZGVmYXVsdCBleGNsdWRlcyBhcmUgbm90IGFkZGVkIHRvIEVYQ0xfQU5OTywgRVhDTF9BUkNTLCBhbmQgRVhDTF9FWEVDLgorCisgICA8cD5OZXh0LCB0aGUgQkZEIGxpYnJhcnkgaXMgY2FsbGVkIHRvIG9wZW4gdGhlIG9iamVjdCBmaWxlLAordmVyaWZ5IHRoYXQgaXQgaXMgYW4gb2JqZWN0IGZpbGUsCithbmQgcmVhZCBpdHMgc3ltYm9sIHRhYmxlICg8Y29kZT5jb3JlLmM6Y29yZV9pbml0PC9jb2RlPiksCit1c2luZyA8Y29kZT5iZmRfY2Fub25pY2FsaXplX3N5bXRhYjwvY29kZT4gYWZ0ZXIgbWFsbG9jaW5nCithbiBhcHByb3ByaWF0ZWx5IHNpemVkIGFycmF5IG9mIHN5bWJvbHMuICBBdCB0aGlzIHBvaW50LAorZnVuY3Rpb24gbWFwcGluZ3MgYXJlIHJlYWQgKGlmIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZmlsZS1vcmRlcmluZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24KK2hhcyBiZWVuIHNwZWNpZmllZCksIGFuZCB0aGUgY29yZSB0ZXh0IHNwYWNlIGlzIHJlYWQgaW50bworbWVtb3J5IChpZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gd2FzIGdpdmVuKS4KKworICAgPHA+PGNvZGU+Z3Byb2Y8L2NvZGU+J3Mgb3duIHN5bWJvbCB0YWJsZSwgYW4gYXJyYXkgb2YgU3ltIHN0cnVjdHVyZXMsCitpcyBub3cgYnVpbHQuIAorVGhpcyBpcyBkb25lIGluIG9uZSBvZiB0d28gd2F5cywgYnkgb25lIG9mIHR3byByb3V0aW5lcywgZGVwZW5kaW5nCitvbiB3aGV0aGVyIGxpbmUtYnktbGluZSBwcm9maWxpbmcgKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uKSBoYXMgYmVlbgorZW5hYmxlZC4gCitGb3Igbm9ybWFsIHByb2ZpbGluZywgdGhlIEJGRCBjYW5vbmljYWwgc3ltYm9sIHRhYmxlIGlzIHNjYW5uZWQuIAorRm9yIGxpbmUtYnktbGluZSBwcm9maWxpbmcsIGV2ZXJ5Cit0ZXh0IHNwYWNlIGFkZHJlc3MgaXMgZXhhbWluZWQsIGFuZCBhIG5ldyBzeW1ib2wgdGFibGUgZW50cnkKK2dldHMgY3JlYXRlZCBldmVyeSB0aW1lIHRoZSBsaW5lIG51bWJlciBjaGFuZ2VzLiAKK0luIGVpdGhlciBjYXNlLCB0d28gcGFzc2VzIGFyZSBtYWRlIHRocm91Z2ggdGhlIHN5bWJvbAordGFibGUmbWRhc2g7b25lIHRvIGNvdW50IHRoZSBzaXplIG9mIHRoZSBzeW1ib2wgdGFibGUgcmVxdWlyZWQsCithbmQgdGhlIG90aGVyIHRvIGFjdHVhbGx5IHJlYWQgdGhlIHN5bWJvbHMuICBJbiBiZXR3ZWVuIHRoZQordHdvIHBhc3NlcywgYSBzaW5nbGUgYXJyYXkgb2YgdHlwZSA8Y29kZT5TeW08L2NvZGU+IGlzIGNyZWF0ZWQgb2YKK3RoZSBhcHByb3ByaWF0ZSBsZW5ndGguIAorRmluYWxseSwgPGNvZGU+c3ltdGFiLmM6c3ltdGFiX2ZpbmFsaXplPC9jb2RlPgoraXMgY2FsbGVkIHRvIHNvcnQgdGhlIHN5bWJvbCB0YWJsZSBhbmQgcmVtb3ZlIGR1cGxpY2F0ZSBlbnRyaWVzCisoZW50cmllcyB3aXRoIHRoZSBzYW1lIG1lbW9yeSBhZGRyZXNzKS4KKworICAgPHA+VGhlIHN5bWJvbCB0YWJsZSBtdXN0IGJlIGEgY29udGlndW91cyBhcnJheSBmb3IgdHdvIHJlYXNvbnMuIAorRmlyc3QsIHRoZSA8Y29kZT5xc29ydDwvY29kZT4gbGlicmFyeSBmdW5jdGlvbiAod2hpY2ggc29ydHMgYW4gYXJyYXkpCit3aWxsIGJlIHVzZWQgdG8gc29ydCB0aGUgc3ltYm9sIHRhYmxlLiAKK0Fsc28sIHRoZSBzeW1ib2wgbG9va3VwIHJvdXRpbmUgKDxjb2RlPnN5bXRhYi5jOnN5bV9sb29rdXA8L2NvZGU+KSwKK3doaWNoIGZpbmRzIHN5bWJvbHMKK2Jhc2VkIG9uIG1lbW9yeSBhZGRyZXNzLCB1c2VzIGEgYmluYXJ5IHNlYXJjaCBhbGdvcml0aG0KK3doaWNoIHJlcXVpcmVzIHRoZSBzeW1ib2wgdGFibGUgdG8gYmUgYSBzb3J0ZWQgYXJyYXkuIAorRnVuY3Rpb24gc3ltYm9scyBhcmUgaW5kaWNhdGVkIHdpdGggYW4gPGNvZGU+aXNfZnVuYzwvY29kZT4gZmxhZy4gCitMaW5lIG51bWJlciBzeW1ib2xzIGhhdmUgbm8gc3BlY2lhbCBmbGFncyBzZXQuIAorQWRkaXRpb25hbGx5LCBhIHN5bWJvbCBjYW4gaGF2ZSBhbiA8Y29kZT5pc19zdGF0aWM8L2NvZGU+IGZsYWcKK3RvIGluZGljYXRlIHRoYXQgaXQgaXMgYSBsb2NhbCBzeW1ib2wuCisKKyAgIDxwPldpdGggdGhlIHN5bWJvbCB0YWJsZSByZWFkLCB0aGUgc3ltc3BlY3MgY2FuIG5vdyBiZSB0cmFuc2xhdGVkCitpbnRvIFN5bXMgKDxjb2RlPnN5bV9pZHMuYzpzeW1faWRfcGFyc2U8L2NvZGU+KS4gIFJlbWVtYmVyIHRoYXQgYSBzaW5nbGUKK3N5bXNwZWMgY2FuIG1hdGNoIG11bHRpcGxlIHN5bWJvbHMuIAorQW4gYXJyYXkgb2Ygc3ltYm9sIHRhYmxlcworKDxjb2RlPnN5bXM8L2NvZGU+KSBpcyBjcmVhdGVkLCBlYWNoIGVudHJ5IG9mIHdoaWNoIGlzIGEgc3ltYm9sIHRhYmxlCitvZiBTeW1zIHRvIGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkIGZyb20gYSBwYXJ0aWN1bGFyIGxpc3RpbmcuIAorVGhlIG1hc3RlciBzeW1ib2wgdGFibGUgYW5kIHRoZSBzeW1zcGVjcyBhcmUgZXhhbWluZWQgYnkgbmVzdGVkCitsb29wcywgYW5kIGV2ZXJ5IHN5bWJvbCB0aGF0IG1hdGNoZXMgYSBzeW1zcGVjIGlzIGluc2VydGVkCitpbnRvIHRoZSBhcHByb3ByaWF0ZSBzeW1zIHRhYmxlLiAgVGhpcyBpcyBkb25lIHR3aWNlLCBvbmNlIHRvCitjb3VudCB0aGUgc2l6ZSBvZiBlYWNoIHJlcXVpcmVkIHN5bWJvbCB0YWJsZSwgYW5kIGFnYWluIHRvIGJ1aWxkCit0aGUgdGFibGVzLCB3aGljaCBoYXZlIGJlZW4gbWFsbG9jZWQgYmV0d2VlbiBwYXNzZXMuIAorRnJvbSBub3cgb24sIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3ltYm9sIGlzIG9uIGFuIGluY2x1ZGUKK29yIGV4Y2x1ZGUgc3ltc3BlYyBsaXN0LCA8Y29kZT5ncHJvZjwvY29kZT4gc2ltcGx5IHVzZXMgaXRzCitzdGFuZGFyZCBzeW1ib2wgbG9va3VwIHJvdXRpbmUgb24gdGhlIGFwcHJvcHJpYXRlIHRhYmxlCitpbiB0aGUgPGNvZGU+c3ltczwvY29kZT4gYXJyYXkuCisKKyAgIDxwPk5vdyB0aGUgcHJvZmlsZSBkYXRhIGZpbGUocykgdGhlbXNlbHZlcyBhcmUgcmVhZAorKDxjb2RlPmdtb25faW8uYzpnbW9uX291dF9yZWFkPC9jb2RlPiksCitmaXJzdCBieSBjaGVja2luZyBmb3IgYSBuZXctc3R5bGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nbW9uLm91dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBoZWFkZXIsCit0aGVuIGFzc3VtaW5nIHRoaXMgaXMgYW4gb2xkLXN0eWxlIEJTRCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdtb24ub3V0PC9zcGFuPjwvc2FtcD4mcnNxdW87CitpZiB0aGUgbWFnaWMgbnVtYmVyIHRlc3QgZmFpbGVkLgorCisgICA8cD5OZXctc3R5bGUgaGlzdG9ncmFtIHJlY29yZHMgYXJlIHJlYWQgYnkgPGNvZGU+aGlzdC5jOmhpc3RfcmVhZF9yZWM8L2NvZGU+LiAKK0ZvciB0aGUgZmlyc3QgaGlzdG9ncmFtIHJlY29yZCwgYWxsb2NhdGUgYSBtZW1vcnkgYXJyYXkgdG8gaG9sZAorYWxsIHRoZSBiaW5zLCBhbmQgcmVhZCB0aGVtIGluLiAKK1doZW4gbXVsdGlwbGUgcHJvZmlsZSBkYXRhIGZpbGVzIChvciBmaWxlcyB3aXRoIG11bHRpcGxlIGhpc3RvZ3JhbQorcmVjb3JkcykgYXJlIHJlYWQsIHRoZSBtZW1vcnkgcmFuZ2VzIG9mIGVhY2ggcGFpciBvZiBoaXN0b2dyYW0gcmVjb3JkcworbXVzdCBiZSBlaXRoZXIgZXF1YWwsIG9yIG5vbi1vdmVybGFwcGluZy4gIEZvciBlYWNoIHBhaXIgb2YgaGlzdG9ncmFtCityZWNvcmRzLCB0aGUgcmVzb2x1dGlvbiAobWVtb3J5IHJlZ2lvbiBzaXplIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZgorYmlucykgbXVzdCBiZSB0aGUgc2FtZS4gIFRoZSB0aW1lIHVuaXQgbXVzdCBiZSB0aGUgc2FtZSBmb3IgYWxsCitoaXN0b2dyYW0gcmVjb3Jkcy4gSWYgdGhlIGFib3ZlIGNvbnRhaW50cyBhcmUgbWV0LCBhbGwgaGlzdG9ncmFtcworZm9yIHRoZSBzYW1lIG1lbW9yeSByYW5nZSBhcmUgbWVyZ2VkLgorCisgICA8cD5BcyBlYWNoIGNhbGwgZ3JhcGggcmVjb3JkIGlzIHJlYWQgKDxjb2RlPmNhbGxfZ3JhcGguYzpjZ19yZWFkX3JlYzwvY29kZT4pLAordGhlIHBhcmVudCBhbmQgY2hpbGQgYWRkcmVzc2VzCithcmUgbWF0Y2hlZCB0byBzeW1ib2wgdGFibGUgZW50cmllcywgYW5kIGEgY2FsbCBncmFwaCBhcmMgaXMKK2NyZWF0ZWQgYnkgPGNvZGU+Y2dfYXJjcy5jOmFyY19hZGQ8L2NvZGU+LCB1bmxlc3MgdGhlIGFyYyBmYWlscyBhIHN5bXNwZWMKK2NoZWNrIGFnYWluc3QgSU5DTF9BUkNTL0VYQ0xfQVJDUy4gIEFzIGVhY2ggYXJjIGlzIGFkZGVkLAorYSBsaW5rZWQgbGlzdCBpcyBtYWludGFpbmVkIG9mIHRoZSBwYXJlbnQncyBjaGlsZCBhcmNzLCBhbmQgb2YgdGhlIGNoaWxkJ3MKK3BhcmVudCBhcmNzLiAKK0JvdGggdGhlIGNoaWxkJ3MgY2FsbCBjb3VudCBhbmQgdGhlIGFyYydzIGNhbGwgY291bnQgYXJlCitpbmNyZW1lbnRlZCBieSB0aGUgcmVjb3JkJ3MgY2FsbCBjb3VudC4KKworICAgPHA+QmFzaWMtYmxvY2sgcmVjb3JkcyBhcmUgcmVhZCAoPGNvZGU+YmFzaWNfYmxvY2tzLmM6YmJfcmVhZF9yZWM8L2NvZGU+KSwKK2J1dCBvbmx5IGlmIGxpbmUtYnktbGluZSBwcm9maWxpbmcgaGFzIGJlZW4gc2VsZWN0ZWQuIAorRWFjaCBiYXNpYy1ibG9jayBhZGRyZXNzIGlzIG1hdGNoZWQgdG8gYSBjb3JyZXNwb25kaW5nIGxpbmUKK3N5bWJvbCBpbiB0aGUgc3ltYm9sIHRhYmxlLCBhbmQgYW4gZW50cnkgbWFkZSBpbiB0aGUgc3ltYm9sJ3MKK2JiX2FkZHIgYW5kIGJiX2NhbGxzIGFycmF5cy4gIEFnYWluLCBpZiBtdWx0aXBsZSBiYXNpYy1ibG9jaworcmVjb3JkcyBhcmUgcHJlc2VudCBmb3IgdGhlIHNhbWUgYWRkcmVzcywgdGhlIGNhbGwgY291bnRzCithcmUgY3VtdWxhdGl2ZS4KKworICAgPHA+QSBnbW9uLnN1bSBmaWxlIGlzIGR1bXBlZCwgaWYgcmVxdWVzdGVkICg8Y29kZT5nbW9uX2lvLmM6Z21vbl9vdXRfd3JpdGU8L2NvZGU+KS4KKworICAgPHA+SWYgaGlzdG9ncmFtcyB3ZXJlIHByZXNlbnQgaW4gdGhlIGRhdGEgZmlsZXMsIGFzc2lnbiB0aGVtIHRvIHN5bWJvbHMKKyg8Y29kZT5oaXN0LmM6aGlzdF9hc3NpZ25fc2FtcGxlczwvY29kZT4pIGJ5IGl0ZXJhdGluZyBvdmVyIGFsbCB0aGUgc2FtcGxlCitiaW5zIGFuZCBhc3NpZ25pbmcgdGhlbSB0byBzeW1ib2xzLiAgU2luY2UgdGhlIHN5bWJvbCB0YWJsZQoraXMgc29ydGVkIGluIG9yZGVyIG9mIGFzY2VuZGluZyBtZW1vcnkgYWRkcmVzc2VzLCB3ZSBjYW4KK3NpbXBsZSBmb2xsb3cgYWxvbmcgaW4gdGhlIHN5bWJvbCB0YWJsZSBhcyB3ZSBtYWtlIG91ciBwYXNzCitvdmVyIHRoZSBzYW1wbGUgYmlucy4gCitUaGlzIHN0ZXAgaW5jbHVkZXMgYSBzeW1zcGVjIGNoZWNrIGFnYWluc3QgSU5DTF9GTEFUL0VYQ0xfRkxBVC4gCitEZXBlbmRpbmcgb24gdGhlIGhpc3RvZ3JhbQorc2NhbGUgZmFjdG9yLCBhIHNhbXBsZSBiaW4gbWF5IHNwYW4gbXVsdGlwbGUgc3ltYm9scywKK2luIHdoaWNoIGNhc2UgYSBmcmFjdGlvbiBvZiB0aGUgc2FtcGxlIGNvdW50IGlzIGFsbG9jYXRlZAordG8gZWFjaCBzeW1ib2wsIHByb3BvcnRpb25hbCB0byB0aGUgZGVncmVlIG9mIG92ZXJsYXAuIAorVGhpcyBlZmZlY3QgaXMgcmFyZSBmb3Igbm9ybWFsIHByb2ZpbGluZywgYnV0IG92ZXJsYXBzCithcmUgbW9yZSBjb21tb24gZHVyaW5nIGxpbmUtYnktbGluZSBwcm9maWxpbmcsIGFuZCBjYW4KK2NhdXNlIGVhY2ggb2YgdHdvIGFkamFjZW50IGxpbmVzIHRvIGJlIGNyZWRpdGVkIHdpdGggaGFsZgorYSBoaXQsIGZvciBleGFtcGxlLgorCisgICA8cD5JZiBjYWxsIGdyYXBoIGRhdGEgaXMgcHJlc2VudCwgPGNvZGU+Y2dfYXJjcy5jOmNnX2Fzc2VtYmxlPC9jb2RlPiBpcyBjYWxsZWQuIAorRmlyc3QsIGlmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2FzIHNwZWNpZmllZCwgYSBtYWNoaW5lLWRlcGVuZGVudAorcm91dGluZSAoPGNvZGU+ZmluZF9jYWxsPC9jb2RlPikgc2NhbnMgdGhyb3VnaCBlYWNoIHN5bWJvbCdzIG1hY2hpbmUgY29kZSwKK2xvb2tpbmcgZm9yIHN1YnJvdXRpbmUgY2FsbCBpbnN0cnVjdGlvbnMsIGFuZCBhZGRpbmcgdGhlbQordG8gdGhlIGNhbGwgZ3JhcGggd2l0aCBhIHplcm8gY2FsbCBjb3VudC4gCitBIHRvcG9sb2dpY2FsIHNvcnQgaXMgcGVyZm9ybWVkIGJ5IGRlcHRoLWZpcnN0IG51bWJlcmluZworYWxsIHRoZSBzeW1ib2xzICg8Y29kZT5jZ19kZm4uYzpjZ19kZm48L2NvZGU+KSwgc28gdGhhdAorY2hpbGRyZW4gYXJlIGFsd2F5cyBudW1iZXJlZCBsZXNzIHRoYW4gdGhlaXIgcGFyZW50cywKK3RoZW4gbWFraW5nIGEgYXJyYXkgb2YgcG9pbnRlcnMgaW50byB0aGUgc3ltYm9sIHRhYmxlIGFuZCBzb3J0aW5nIGl0IGludG8KK251bWVyaWNhbCBvcmRlciwgd2hpY2ggaXMgcmV2ZXJzZSB0b3BvbG9naWNhbAorb3JkZXIgKGNoaWxkcmVuIGFwcGVhciBiZWZvcmUgcGFyZW50cykuIAorQ3ljbGVzIGFyZSBhbHNvIGRldGVjdGVkIGF0IHRoaXMgcG9pbnQsIGFsbCBtZW1iZXJzCitvZiB3aGljaCBhcmUgYXNzaWduZWQgdGhlIHNhbWUgdG9wb2xvZ2ljYWwgbnVtYmVyLiAKK1R3byBwYXNzZXMgYXJlIG5vdyBtYWRlIHRocm91Z2ggdGhpcyBzb3J0ZWQgYXJyYXkgb2Ygc3ltYm9sIHBvaW50ZXJzLiAKK1RoZSBmaXJzdCBwYXNzLCBmcm9tIGVuZCB0byBiZWdpbm5pbmcgKHBhcmVudHMgdG8gY2hpbGRyZW4pLAorY29tcHV0ZXMgdGhlIGZyYWN0aW9uIG9mIGNoaWxkIHRpbWUgdG8gcHJvcGFnYXRlIHRvIGVhY2ggcGFyZW50CithbmQgYSBwcmludCBmbGFnLiAKK1RoZSBwcmludCBmbGFnIHJlZmxlY3RzIHN5bXNwZWMgaGFuZGxpbmcgb2YgSU5DTF9HUkFQSC9FWENMX0dSQVBILAord2l0aCBhIHBhcmVudCdzIGluY2x1ZGUgb3IgZXhjbHVkZSAocHJpbnQgb3Igbm8gcHJpbnQpIHByb3BlcnR5CitiZWluZyBwcm9wYWdhdGVkIHRvIGl0cyBjaGlsZHJlbiwgdW5sZXNzIHRoZXkgdGhlbXNlbHZlcyBleHBsaWNpdGx5IGFwcGVhcgoraW4gSU5DTF9HUkFQSCBvciBFWENMX0dSQVBILiAKK0Egc2Vjb25kIHBhc3MsIGZyb20gYmVnaW5uaW5nIHRvIGVuZCAoY2hpbGRyZW4gdG8gcGFyZW50cykgYWN0dWFsbHkKK3Byb3BhZ2F0ZXMgdGhlIHRpbWluZ3MgYWxvbmcgdGhlIGNhbGwgZ3JhcGgsIHN1YmplY3QKK3RvIGEgY2hlY2sgYWdhaW5zdCBJTkNMX1RJTUUvRVhDTF9USU1FLiAKK1dpdGggdGhlIHByaW50IGZsYWcsIGZyYWN0aW9ucywgYW5kIHRpbWluZ3Mgbm93IHN0b3JlZCBpbiB0aGUgc3ltYm9sCitzdHJ1Y3R1cmVzLCB0aGUgdG9wb2xvZ2ljYWwgc29ydCBhcnJheSBpcyBub3cgZGlzY2FyZGVkLCBhbmQgYQorbmV3IGFycmF5IG9mIHBvaW50ZXJzIGlzIGFzc2VtYmxlZCwgdGhpcyB0aW1lIHNvcnRlZCBieSBwcm9wYWdhdGVkIHRpbWUuCisKKyAgIDxwPkZpbmFsbHksIHByaW50IHRoZSB2YXJpb3VzIG91dHB1dHMgdGhlIHVzZXIgcmVxdWVzdGVkLCB3aGljaCBpcyBub3cgZmFpcmx5CitzdHJhaWdodGZvcndhcmQuICBUaGUgY2FsbCBncmFwaCAoPGNvZGU+Y2dfcHJpbnQuYzpjZ19wcmludDwvY29kZT4pIGFuZAorZmxhdCBwcm9maWxlICg8Y29kZT5oaXN0LmM6aGlzdF9wcmludDwvY29kZT4pIGFyZSByZWd1cmdpdGF0aW9ucyBvZiB2YWx1ZXMKK2FscmVhZHkgY29tcHV0ZWQuICBUaGUgYW5ub3RhdGVkIHNvdXJjZSBsaXN0aW5nCisoPGNvZGU+YmFzaWNfYmxvY2tzLmM6cHJpbnRfYW5ub3RhdGVkX3NvdXJjZTwvY29kZT4pIHVzZXMgYmFzaWMtYmxvY2sKK2luZm9ybWF0aW9uLCBpZiBwcmVzZW50LCB0byBsYWJlbCBlYWNoIGxpbmUgb2YgY29kZSB3aXRoIGNhbGwgY291bnRzLAorb3RoZXJ3aXNlIG9ubHkgdGhlIGZ1bmN0aW9uIGNhbGwgY291bnRzIGFyZSBwcmVzZW50ZWQuCisKKyAgIDxwPlRoZSBmdW5jdGlvbiBvcmRlcmluZyBjb2RlIGlzIG1hcmdpbmFsbHkgd2VsbCBkb2N1bWVudGVkCitpbiB0aGUgc291cmNlIGNvZGUgaXRzZWxmICg8Y29kZT5jZ19wcmludC5jPC9jb2RlPikuICBCYXNpY2FsbHksCit0aGUgZnVuY3Rpb25zIHdpdGggdGhlIG1vc3QgdXNlIGFuZCB0aGUgbW9zdCBwYXJlbnRzIGFyZQorcGxhY2VkIGZpcnN0LCBmb2xsb3dlZCBieSBvdGhlciBmdW5jdGlvbnMgd2l0aCB0aGUgbW9zdCB1c2UsCitmb2xsb3dlZCBieSBsb3dlciB1c2UgZnVuY3Rpb25zLCBmb2xsb3dlZCBieSB1bnVzZWQgZnVuY3Rpb25zCithdCB0aGUgZW5kLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9JbnRyb2R1Y3Rpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0ludHJvZHVjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNjQwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9JbnRyb2R1Y3Rpb24uaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW50cm9kdWN0aW9uIC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaW5kZXguaHRtbCNUb3AiIHRpdGxlPSJUb3AiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDb21waWxpbmcuaHRtbCNDb21waWxpbmciIHRpdGxlPSJDb21waWxpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBncHJvZiBwcm9maWxlciBvZiB0aGUgR05VIHN5c3RlbS4KKworQ29weXJpZ2h0IChDKSAxOTg4LCAxOTkyLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLAorMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvbXBpbGluZy5odG1sI0NvbXBpbGluZyI+Q29tcGlsaW5nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xIEludHJvZHVjdGlvbiB0byBQcm9maWxpbmc8L2gyPgorCis8cD5Qcm9maWxpbmcgYWxsb3dzIHlvdSB0byBsZWFybiB3aGVyZSB5b3VyIHByb2dyYW0gc3BlbnQgaXRzIHRpbWUgYW5kIHdoaWNoCitmdW5jdGlvbnMgY2FsbGVkIHdoaWNoIG90aGVyIGZ1bmN0aW9ucyB3aGlsZSBpdCB3YXMgZXhlY3V0aW5nLiAgVGhpcworaW5mb3JtYXRpb24gY2FuIHNob3cgeW91IHdoaWNoIHBpZWNlcyBvZiB5b3VyIHByb2dyYW0gYXJlIHNsb3dlciB0aGFuIHlvdQorZXhwZWN0ZWQsIGFuZCBtaWdodCBiZSBjYW5kaWRhdGVzIGZvciByZXdyaXRpbmcgdG8gbWFrZSB5b3VyIHByb2dyYW0KK2V4ZWN1dGUgZmFzdGVyLiAgSXQgY2FuIGFsc28gdGVsbCB5b3Ugd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQgbW9yZQorb3IgbGVzcyBvZnRlbiB0aGFuIHlvdSBleHBlY3RlZC4gIFRoaXMgbWF5IGhlbHAgeW91IHNwb3QgYnVncyB0aGF0IGhhZAorb3RoZXJ3aXNlIGJlZW4gdW5ub3RpY2VkLgorCisgICA8cD5TaW5jZSB0aGUgcHJvZmlsZXIgdXNlcyBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgZHVyaW5nIHRoZSBhY3R1YWwgZXhlY3V0aW9uCitvZiB5b3VyIHByb2dyYW0sIGl0IGNhbiBiZSB1c2VkIG9uIHByb2dyYW1zIHRoYXQgYXJlIHRvbyBsYXJnZSBvciB0b28KK2NvbXBsZXggdG8gYW5hbHl6ZSBieSByZWFkaW5nIHRoZSBzb3VyY2UuICBIb3dldmVyLCBob3cgeW91ciBwcm9ncmFtIGlzIHJ1bgord2lsbCBhZmZlY3QgdGhlIGluZm9ybWF0aW9uIHRoYXQgc2hvd3MgdXAgaW4gdGhlIHByb2ZpbGUgZGF0YS4gIElmIHlvdQorZG9uJ3QgdXNlIHNvbWUgZmVhdHVyZSBvZiB5b3VyIHByb2dyYW0gd2hpbGUgaXQgaXMgYmVpbmcgcHJvZmlsZWQsIG5vCitwcm9maWxlIGluZm9ybWF0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGF0IGZlYXR1cmUuCisKKyAgIDxwPlByb2ZpbGluZyBoYXMgc2V2ZXJhbCBzdGVwczoKKworICAgICA8dWw+Cis8bGk+WW91IG11c3QgY29tcGlsZSBhbmQgbGluayB5b3VyIHByb2dyYW0gd2l0aCBwcm9maWxpbmcgZW5hYmxlZC4gCitTZWUgPGEgaHJlZj0iQ29tcGlsaW5nLmh0bWwjQ29tcGlsaW5nIj5Db21waWxpbmcgYSBQcm9ncmFtIGZvciBQcm9maWxpbmc8L2E+LgorCisgICAgIDxsaT5Zb3UgbXVzdCBleGVjdXRlIHlvdXIgcHJvZ3JhbSB0byBnZW5lcmF0ZSBhIHByb2ZpbGUgZGF0YSBmaWxlLiAKK1NlZSA8YSBocmVmPSJFeGVjdXRpbmcuaHRtbCNFeGVjdXRpbmciPkV4ZWN1dGluZyB0aGUgUHJvZ3JhbTwvYT4uCisKKyAgICAgPGxpPllvdSBtdXN0IHJ1biA8Y29kZT5ncHJvZjwvY29kZT4gdG8gYW5hbHl6ZSB0aGUgcHJvZmlsZSBkYXRhLiAKK1NlZSA8YSBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj48Y29kZT5ncHJvZjwvY29kZT4gQ29tbWFuZCBTdW1tYXJ5PC9hPi4gCis8L3VsPgorCisgICA8cD5UaGUgbmV4dCB0aHJlZSBjaGFwdGVycyBleHBsYWluIHRoZXNlIHN0ZXBzIGluIGdyZWF0ZXIgZGV0YWlsLgorCis8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiAtLT4KKyAgIDxwPlNldmVyYWwgZm9ybXMgb2Ygb3V0cHV0IGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgYW5hbHlzaXMuCisKKyAgIDxwPlRoZSA8ZGZuPmZsYXQgcHJvZmlsZTwvZGZuPiBzaG93cyBob3cgbXVjaCB0aW1lIHlvdXIgcHJvZ3JhbSBzcGVudCBpbiBlYWNoIGZ1bmN0aW9uLAorYW5kIGhvdyBtYW55IHRpbWVzIHRoYXQgZnVuY3Rpb24gd2FzIGNhbGxlZC4gIElmIHlvdSBzaW1wbHkgd2FudCB0byBrbm93Cit3aGljaCBmdW5jdGlvbnMgYnVybiBtb3N0IG9mIHRoZSBjeWNsZXMsIGl0IGlzIHN0YXRlZCBjb25jaXNlbHkgaGVyZS4gCitTZWUgPGEgaHJlZj0iRmxhdC1Qcm9maWxlLmh0bWwjRmxhdC1Qcm9maWxlIj5UaGUgRmxhdCBQcm9maWxlPC9hPi4KKworICAgPHA+VGhlIDxkZm4+Y2FsbCBncmFwaDwvZGZuPiBzaG93cywgZm9yIGVhY2ggZnVuY3Rpb24sIHdoaWNoIGZ1bmN0aW9ucyBjYWxsZWQgaXQsIHdoaWNoCitvdGhlciBmdW5jdGlvbnMgaXQgY2FsbGVkLCBhbmQgaG93IG1hbnkgdGltZXMuICBUaGVyZSBpcyBhbHNvIGFuIGVzdGltYXRlCitvZiBob3cgbXVjaCB0aW1lIHdhcyBzcGVudCBpbiB0aGUgc3Vicm91dGluZXMgb2YgZWFjaCBmdW5jdGlvbi4gIFRoaXMgY2FuCitzdWdnZXN0IHBsYWNlcyB3aGVyZSB5b3UgbWlnaHQgdHJ5IHRvIGVsaW1pbmF0ZSBmdW5jdGlvbiBjYWxscyB0aGF0IHVzZSBhCitsb3Qgb2YgdGltZS4gIFNlZSA8YSBocmVmPSJDYWxsLUdyYXBoLmh0bWwjQ2FsbC1HcmFwaCI+VGhlIENhbGwgR3JhcGg8L2E+LgorCisgICA8cD5UaGUgPGRmbj5hbm5vdGF0ZWQgc291cmNlPC9kZm4+IGxpc3RpbmcgaXMgYSBjb3B5IG9mIHRoZSBwcm9ncmFtJ3MKK3NvdXJjZSBjb2RlLCBsYWJlbGVkIHdpdGggdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIGxpbmUgb2YgdGhlCitwcm9ncmFtIHdhcyBleGVjdXRlZC4gIFNlZSA8YSBocmVmPSJBbm5vdGF0ZWQtU291cmNlLmh0bWwjQW5ub3RhdGVkLVNvdXJjZSI+VGhlIEFubm90YXRlZCBTb3VyY2UgTGlzdGluZzwvYT4uIAorPCEtLSBtYW4gZW5kIC0tPgorCisgICA8cD5UbyBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgcHJvZmlsaW5nIHdvcmtzLCB5b3UgbWF5IHdpc2ggdG8gcmVhZAorYSBkZXNjcmlwdGlvbiBvZiBpdHMgaW1wbGVtZW50YXRpb24uIAorU2VlIDxhIGhyZWY9IkltcGxlbWVudGF0aW9uLmh0bWwjSW1wbGVtZW50YXRpb24iPkltcGxlbWVudGF0aW9uIG9mIFByb2ZpbGluZzwvYT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0ludm9raW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9JbnZva2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjZjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9JbnZva2luZy5odG1sCkBAIC0wLDAgKzEsODIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludm9raW5nIC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXhlY3V0aW5nLmh0bWwjRXhlY3V0aW5nIiB0aXRsZT0iRXhlY3V0aW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3V0cHV0Lmh0bWwjT3V0cHV0IiB0aXRsZT0iT3V0cHV0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikludm9raW5nIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik91dHB1dC5odG1sI091dHB1dCI+T3V0cHV0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRXhlY3V0aW5nLmh0bWwjRXhlY3V0aW5nIj5FeGVjdXRpbmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NCA8Y29kZT5ncHJvZjwvY29kZT4gQ29tbWFuZCBTdW1tYXJ5PC9oMj4KKworPHA+QWZ0ZXIgeW91IGhhdmUgYSBwcm9maWxlIGRhdGEgZmlsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Z21vbi5vdXQ8L3NwYW4+PC9zYW1wPiwgeW91IGNhbiBydW4gPGNvZGU+Z3Byb2Y8L2NvZGU+Cit0byBpbnRlcnByZXQgdGhlIGluZm9ybWF0aW9uIGluIGl0LiAgVGhlIDxjb2RlPmdwcm9mPC9jb2RlPiBwcm9ncmFtIHByaW50cyBhCitmbGF0IHByb2ZpbGUgYW5kIGEgY2FsbCBncmFwaCBvbiBzdGFuZGFyZCBvdXRwdXQuICBUeXBpY2FsbHkgeW91IHdvdWxkCityZWRpcmVjdCB0aGUgb3V0cHV0IG9mIDxjb2RlPmdwcm9mPC9jb2RlPiBpbnRvIGEgZmlsZSB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+WW91IHJ1biA8Y29kZT5ncHJvZjwvY29kZT4gbGlrZSB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgZ3Byb2YgPHZhcj5vcHRpb25zPC92YXI+IFs8dmFyPmV4ZWN1dGFibGUtZmlsZTwvdmFyPiBbPHZhcj5wcm9maWxlLWRhdGEtZmlsZXM8L3Zhcj4uLi5dXSBbJmd0OyA8dmFyPm91dGZpbGU8L3Zhcj5dCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+SGVyZSBzcXVhcmUtYnJhY2tldHMgaW5kaWNhdGUgb3B0aW9uYWwgYXJndW1lbnRzLgorCisgICA8cD5JZiB5b3Ugb21pdCB0aGUgZXhlY3V0YWJsZSBmaWxlIG5hbWUsIHRoZSBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hLm91dDwvc3Bhbj48L3NhbXA+IGlzIHVzZWQuICBJZgoreW91IGdpdmUgbm8gcHJvZmlsZSBkYXRhIGZpbGUgbmFtZSwgdGhlIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdtb24ub3V0PC9zcGFuPjwvc2FtcD4gaXMgdXNlZC4gIElmCithbnkgZmlsZSBpcyBub3QgaW4gdGhlIHByb3BlciBmb3JtYXQsIG9yIGlmIHRoZSBwcm9maWxlIGRhdGEgZmlsZSBkb2VzIG5vdAorYXBwZWFyIHRvIGJlbG9uZyB0byB0aGUgZXhlY3V0YWJsZSBmaWxlLCBhbiBlcnJvciBtZXNzYWdlIGlzIHByaW50ZWQuCisKKyAgIDxwPllvdSBjYW4gZ2l2ZSBtb3JlIHRoYW4gb25lIHByb2ZpbGUgZGF0YSBmaWxlIGJ5IGVudGVyaW5nIGFsbCB0aGVpciBuYW1lcworYWZ0ZXIgdGhlIGV4ZWN1dGFibGUgZmlsZSBuYW1lOyB0aGVuIHRoZSBzdGF0aXN0aWNzIGluIGFsbCB0aGUgZGF0YSBmaWxlcworYXJlIHN1bW1lZCB0b2dldGhlci4KKworICAgPHA+VGhlIG9yZGVyIG9mIHRoZXNlIG9wdGlvbnMgZG9lcyBub3QgbWF0dGVyLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iT3V0cHV0LU9wdGlvbnMuaHRtbCNPdXRwdXQtT3B0aW9ucyI+T3V0cHV0IE9wdGlvbnM8L2E+OiAgICAgICBDb250cm9sbGluZyA8Y29kZT5ncHJvZjwvY29kZT4ncyBvdXRwdXQgc3R5bGUKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkFuYWx5c2lzLU9wdGlvbnMuaHRtbCNBbmFseXNpcy1PcHRpb25zIj5BbmFseXNpcyBPcHRpb25zPC9hPjogICAgIENvbnRyb2xsaW5nIGhvdyA8Y29kZT5ncHJvZjwvY29kZT4gYW5hbHl6ZXMgaXRzIGRhdGEKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9Ik1pc2NlbGxhbmVvdXMtT3B0aW9ucy5odG1sI01pc2NlbGxhbmVvdXMtT3B0aW9ucyI+TWlzY2VsbGFuZW91cyBPcHRpb25zPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iRGVwcmVjYXRlZC1PcHRpb25zLmh0bWwjRGVwcmVjYXRlZC1PcHRpb25zIj5EZXByZWNhdGVkIE9wdGlvbnM8L2E+OiAgIE9wdGlvbnMgeW91IG5vIGxvbmdlciBuZWVkIHRvIHVzZSwgYnV0IHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSBiZWVuIHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5Cis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJTeW1zcGVjcy5odG1sI1N5bXNwZWNzIj5TeW1zcGVjczwvYT46ICAgICAgICAgICAgIFNwZWNpZnlpbmcgZnVuY3Rpb25zIHRvIGluY2x1ZGUgb3IgZXhjbHVkZQorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvTGluZV8wMDJkYnlfMDAyZGxpbmUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0xpbmVfMDAyZGJ5XzAwMmRsaW5lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkZGEwOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL0xpbmVfMDAyZGJ5XzAwMmRsaW5lLmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxpbmUtYnktbGluZSAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiIHRpdGxlPSJPdXRwdXQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDYWxsLUdyYXBoLmh0bWwjQ2FsbC1HcmFwaCIgdGl0bGU9IkNhbGwgR3JhcGgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBbm5vdGF0ZWQtU291cmNlLmh0bWwjQW5ub3RhdGVkLVNvdXJjZSIgdGl0bGU9IkFubm90YXRlZCBTb3VyY2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBncHJvZiBwcm9maWxlciBvZiB0aGUgR05VIHN5c3RlbS4KKworQ29weXJpZ2h0IChDKSAxOTg4LCAxOTkyLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLAorMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTGluZS1ieS1saW5lIj48L2E+Cis8YSBuYW1lPSJMaW5lXzAwMmRieV8wMDJkbGluZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJBbm5vdGF0ZWQtU291cmNlLmh0bWwjQW5ub3RhdGVkLVNvdXJjZSI+QW5ub3RhdGVkIFNvdXJjZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNhbGwtR3JhcGguaHRtbCNDYWxsLUdyYXBoIj5DYWxsIEdyYXBoPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT3V0cHV0Lmh0bWwjT3V0cHV0Ij5PdXRwdXQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjMgTGluZS1ieS1saW5lIFByb2ZpbGluZzwvaDM+CisKKzxwPjxjb2RlPmdwcm9mPC9jb2RlPidzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyB0aGUgcHJvZ3JhbSB0byBwZXJmb3JtCis8ZGZuPmxpbmUtYnktbGluZTwvZGZuPiBwcm9maWxpbmcuICBJbiB0aGlzIG1vZGUsIGhpc3RvZ3JhbQorc2FtcGxlcyBhcmUgYXNzaWduZWQgbm90IHRvIGZ1bmN0aW9ucywgYnV0IHRvIGluZGl2aWR1YWwKK2xpbmVzIG9mIHNvdXJjZSBjb2RlLiAgVGhpcyBvbmx5IHdvcmtzIHdpdGggcHJvZ3JhbXMgY29tcGlsZWQgd2l0aAorb2xkZXIgdmVyc2lvbnMgb2YgdGhlIDxjb2RlPmdjYzwvY29kZT4gY29tcGlsZXIuICBOZXdlciB2ZXJzaW9ucyBvZiA8Y29kZT5nY2M8L2NvZGU+Cit1c2UgYSBkaWZmZXJlbnQgcHJvZ3JhbSAtIDxjb2RlPmdjb3Y8L2NvZGU+IC0gdG8gZGlzcGxheSBsaW5lLWJ5LWxpbmUKK3Byb2ZpbGluZyBpbmZvcm1hdGlvbi4KKworICAgPHA+V2l0aCB0aGUgb2xkZXIgdmVyc2lvbnMgb2YgPGNvZGU+Z2NjPC9jb2RlPiB0aGUgcHJvZ3JhbSB1c3VhbGx5IGhhcyB0byBiZQorY29tcGlsZWQgd2l0aCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBpbiBhZGRpdGlvbiB0byAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wZzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgaW4gb3JkZXIKK3RvIGdlbmVyYXRlIGRlYnVnZ2luZyBzeW1ib2xzIGZvciB0cmFja2luZyBzb3VyY2UgY29kZSBsaW5lcy4gCitOb3RlLCBpbiBtdWNoIG9sZGVyIHZlcnNpb25zIG9mIDxjb2RlPmdjYzwvY29kZT4gdGhlIHByb2dyYW0gaGFkIHRvIGJlCitjb21waWxlZCB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1hPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24gYXMgd2VsbC4KKworICAgPHA+VGhlIGZsYXQgcHJvZmlsZSBpcyB0aGUgbW9zdCB1c2VmdWwgb3V0cHV0IHRhYmxlCitpbiBsaW5lLWJ5LWxpbmUgbW9kZS4gCitUaGUgY2FsbCBncmFwaCBpc24ndCBhcyB1c2VmdWwgYXMgbm9ybWFsLCBzaW5jZQordGhlIGN1cnJlbnQgdmVyc2lvbiBvZiA8Y29kZT5ncHJvZjwvY29kZT4gZG9lcyBub3QgcHJvcGFnYXRlCitjYWxsIGdyYXBoIGFyY3MgZnJvbSBzb3VyY2UgY29kZSBsaW5lcyB0byB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uLiAKK1RoZSBjYWxsIGdyYXBoIGRvZXMsIGhvd2V2ZXIsIHNob3cgZWFjaCBsaW5lIG9mIGNvZGUKK3RoYXQgY2FsbGVkIGVhY2ggZnVuY3Rpb24sIGFsb25nIHdpdGggYSBjb3VudC4KKworICAgPHA+SGVyZSBpcyBhIHNlY3Rpb24gb2YgPGNvZGU+Z3Byb2Y8L2NvZGU+J3Mgb3V0cHV0LCB3aXRob3V0IGxpbmUtYnktbGluZSBwcm9maWxpbmcuIAorTm90ZSB0aGF0IDxjb2RlPmN0X2luaXQ8L2NvZGU+IGFjY291bnRlZCBmb3IgZm91ciBoaXN0b2dyYW0gaGl0cywgYW5kCisxMzMyNyBjYWxscyB0byA8Y29kZT5pbml0X2Jsb2NrPC9jb2RlPi4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIEZsYXQgcHJvZmlsZToKKyAgICAgCisgICAgIEVhY2ggc2FtcGxlIGNvdW50cyBhcyAwLjAxIHNlY29uZHMuCisgICAgICAgJSAgIGN1bXVsYXRpdmUgICBzZWxmICAgICAgICAgICAgICBzZWxmICAgICB0b3RhbAorICAgICAgdGltZSAgIHNlY29uZHMgICBzZWNvbmRzICAgIGNhbGxzICB1cy9jYWxsICB1cy9jYWxsICBuYW1lCisgICAgICAzMC43NyAgICAgIDAuMTMgICAgIDAuMDQgICAgIDYzMzUgICAgIDYuMzEgICAgIDYuMzEgIGN0X2luaXQKKyAgICAgCisgICAgIAorICAgICAJCSAgICAgQ2FsbCBncmFwaCAoZXhwbGFuYXRpb24gZm9sbG93cykKKyAgICAgCisgICAgIAorICAgICBncmFudWxhcml0eTogZWFjaCBzYW1wbGUgaGl0IGNvdmVycyA0IGJ5dGUocykgZm9yIDcuNjklIG9mIDAuMTMgc2Vjb25kcworICAgICAKKyAgICAgaW5kZXggJSB0aW1lICAgIHNlbGYgIGNoaWxkcmVuICAgIGNhbGxlZCAgICAgbmFtZQorICAgICAKKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgICAxLzEzNDk2ICAgICAgIG5hbWVfdG9vX2xvbmcKKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgIDQwLzEzNDk2ICAgICAgIGRlZmxhdGUKKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgMTI4LzEzNDk2ICAgICAgIGRlZmxhdGVfZmFzdAorICAgICAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgMTMzMjcvMTM0OTYgICAgICAgY3RfaW5pdAorICAgICBbN10gICAgICAwLjAgICAgMC4wMCAgICAwLjAwICAgMTM0OTYgICAgICAgICBpbml0X2Jsb2NrCisgICAgIAorPC9wcmU+CisgICA8cD5Ob3cgbGV0J3MgbG9vayBhdCBzb21lIG9mIDxjb2RlPmdwcm9mPC9jb2RlPidzIG91dHB1dCBmcm9tIHRoZSBzYW1lIHByb2dyYW0gcnVuLAordGhpcyB0aW1lIHdpdGggbGluZS1ieS1saW5lIHByb2ZpbGluZyBlbmFibGVkLiAgTm90ZSB0aGF0IDxjb2RlPmN0X2luaXQ8L2NvZGU+J3MKK2ZvdXIgaGlzdG9ncmFtIGhpdHMgYXJlIGJyb2tlbiBkb3duIGludG8gZm91ciBsaW5lcyBvZiBzb3VyY2UgY29kZSZtZGFzaDtvbmUgaGl0CitvY2N1cnJlZCBvbiBlYWNoIG9mIGxpbmVzIDM0OSwgMzUxLCAzODIgYW5kIDM4NS4gIEluIHRoZSBjYWxsIGdyYXBoLAorbm90ZSBob3cKKzxjb2RlPmN0X2luaXQ8L2NvZGU+J3MgMTMzMjcgY2FsbHMgdG8gPGNvZGU+aW5pdF9ibG9jazwvY29kZT4gYXJlIGJyb2tlbiBkb3duCitpbnRvIG9uZSBjYWxsIGZyb20gbGluZSAzOTYsIDMwNzEgY2FsbHMgZnJvbSBsaW5lIDM4NCwgMzczMCBjYWxscworZnJvbSBsaW5lIDM4NSwgYW5kIDY1MjUgY2FsbHMgZnJvbSAzODcuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBGbGF0IHByb2ZpbGU6CisgICAgIAorICAgICBFYWNoIHNhbXBsZSBjb3VudHMgYXMgMC4wMSBzZWNvbmRzLgorICAgICAgICUgICBjdW11bGF0aXZlICAgc2VsZgorICAgICAgdGltZSAgIHNlY29uZHMgICBzZWNvbmRzICAgIGNhbGxzICBuYW1lCisgICAgICAgNy42OSAgICAgIDAuMTAgICAgIDAuMDEgICAgICAgICAgIGN0X2luaXQgKHRyZWVzLmM6MzQ5KQorICAgICAgIDcuNjkgICAgICAwLjExICAgICAwLjAxICAgICAgICAgICBjdF9pbml0ICh0cmVlcy5jOjM1MSkKKyAgICAgICA3LjY5ICAgICAgMC4xMiAgICAgMC4wMSAgICAgICAgICAgY3RfaW5pdCAodHJlZXMuYzozODIpCisgICAgICAgNy42OSAgICAgIDAuMTMgICAgIDAuMDEgICAgICAgICAgIGN0X2luaXQgKHRyZWVzLmM6Mzg1KQorICAgICAKKyAgICAgCisgICAgIAkJICAgICBDYWxsIGdyYXBoIChleHBsYW5hdGlvbiBmb2xsb3dzKQorICAgICAKKyAgICAgCisgICAgIGdyYW51bGFyaXR5OiBlYWNoIHNhbXBsZSBoaXQgY292ZXJzIDQgYnl0ZShzKSBmb3IgNy42OSUgb2YgMC4xMyBzZWNvbmRzCisgICAgIAorICAgICAgICUgdGltZSAgICBzZWxmICBjaGlsZHJlbiAgICBjYWxsZWQgICAgIG5hbWUKKyAgICAgCisgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgICAxLzEzNDk2ICAgICAgIG5hbWVfdG9vX2xvbmcgKGd6aXAuYzoxNDQwKQorICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8xMzQ5NiAgICAgICBkZWZsYXRlIChkZWZsYXRlLmM6NzYzKQorICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8xMzQ5NiAgICAgICBjdF9pbml0ICh0cmVlcy5jOjM5NikKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgIDIvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjcyNykKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgIDQvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjY4NikKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgIDUvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjY3NSkKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgMTIvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjY3OSkKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgMTYvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjczMCkKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAxMjgvMTM0OTYgICAgICAgZGVmbGF0ZV9mYXN0IChkZWZsYXRlLmM6NjU0KQorICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgMzA3MS8xMzQ5NiAgICAgICBjdF9pbml0ICh0cmVlcy5jOjM4NCkKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgIDM3MzAvMTM0OTYgICAgICAgY3RfaW5pdCAodHJlZXMuYzozODUpCisgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICA2NTI1LzEzNDk2ICAgICAgIGN0X2luaXQgKHRyZWVzLmM6Mzg3KQorICAgICBbNl0gIDAuMCAgICAwLjAwICAgIDAuMDAgICAxMzQ5NiAgICAgICAgIGluaXRfYmxvY2sgKHRyZWVzLmM6NDA4KQorICAgICAKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvTWlzY2VsbGFuZW91cy1PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9NaXNjZWxsYW5lb3VzLU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTdmMDlkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvTWlzY2VsbGFuZW91cy1PcHRpb25zLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWlzY2VsbGFuZW91cyBPcHRpb25zIC0gR05VIGdwcm9mPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJHTlUgZ3Byb2YiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkFuYWx5c2lzLU9wdGlvbnMuaHRtbCNBbmFseXNpcy1PcHRpb25zIiB0aXRsZT0iQW5hbHlzaXMgT3B0aW9ucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkRlcHJlY2F0ZWQtT3B0aW9ucy5odG1sI0RlcHJlY2F0ZWQtT3B0aW9ucyIgdGl0bGU9IkRlcHJlY2F0ZWQgT3B0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNaXNjZWxsYW5lb3VzLU9wdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRGVwcmVjYXRlZC1PcHRpb25zLmh0bWwjRGVwcmVjYXRlZC1PcHRpb25zIj5EZXByZWNhdGVkIE9wdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBbmFseXNpcy1PcHRpb25zLmh0bWwjQW5hbHlzaXMtT3B0aW9ucyI+QW5hbHlzaXMgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4zIE1pc2NlbGxhbmVvdXMgT3B0aW9uczwvaDM+CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1kWzwvY29kZT48dmFyPm51bTwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi0tZGVidWdbPTwvY29kZT48dmFyPm51bTwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1kIDwvc3Bhbj48dmFyPm51bTwvdmFyPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBzcGVjaWZpZXMgZGVidWdnaW5nIG9wdGlvbnMuIAorSWYgPHZhcj5udW08L3Zhcj4gaXMgbm90IHNwZWNpZmllZCwgZW5hYmxlIGFsbCBkZWJ1Z2dpbmcuIAorU2VlIDxhIGhyZWY9IkRlYnVnZ2luZy5odG1sI0RlYnVnZ2luZyI+RGVidWdnaW5nIDxjb2RlPmdwcm9mPC9jb2RlPjwvYT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4taDwvY29kZT48ZHQ+PGNvZGU+LS1oZWxwPC9jb2RlPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4taDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gcHJpbnRzIGNvbW1hbmQgbGluZSB1c2FnZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1PPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkdD48Y29kZT4tLWZpbGUtZm9ybWF0PTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+U2VsZWN0cyB0aGUgZm9ybWF0IG9mIHRoZSBwcm9maWxlIGRhdGEgZmlsZXMuICBSZWNvZ25pemVkIGZvcm1hdHMgYXJlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmF1dG88L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHRoZSBkZWZhdWx0KSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ic2Q8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+NC40YnNkPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1hZ2ljPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cHJvZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAobm90IHlldCBzdXBwb3J0ZWQpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXM8L2NvZGU+PGR0Pjxjb2RlPi0tc3VtPC9jb2RlPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gY2F1c2VzIDxjb2RlPmdwcm9mPC9jb2RlPiB0byBzdW1tYXJpemUgdGhlIGluZm9ybWF0aW9uCitpbiB0aGUgcHJvZmlsZSBkYXRhIGZpbGVzIGl0IHJlYWQgaW4sIGFuZCB3cml0ZSBvdXQgYSBwcm9maWxlIGRhdGEKK2ZpbGUgY2FsbGVkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nbW9uLnN1bTwvc3Bhbj48L3NhbXA+LCB3aGljaCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIGZyb20KK3RoZSBwcm9maWxlIGRhdGEgZmlsZXMgdGhhdCA8Y29kZT5ncHJvZjwvY29kZT4gcmVhZCBpbi4gIFRoZSBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nbW9uLnN1bTwvc3Bhbj48L3NhbXA+CittYXkgYmUgb25lIG9mIHRoZSBzcGVjaWZpZWQgaW5wdXQgZmlsZXM7IHRoZSBlZmZlY3Qgb2YgdGhpcyBpcyB0bworbWVyZ2UgdGhlIGRhdGEgaW4gdGhlIG90aGVyIGlucHV0IGZpbGVzIGludG8gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdtb24uc3VtPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+RXZlbnR1YWxseSB5b3UgY2FuIHJ1biA8Y29kZT5ncHJvZjwvY29kZT4gYWdhaW4gd2l0aG91dCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1zPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGFuYWx5emUgdGhlCitjdW11bGF0aXZlIGRhdGEgaW4gdGhlIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmdtb24uc3VtPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPGJyPjxkdD48Y29kZT4tdjwvY29kZT48ZHQ+PGNvZGU+LS12ZXJzaW9uPC9jb2RlPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tdjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmbGFnIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gcHJpbnQgdGhlIGN1cnJlbnQgdmVyc2lvbgorbnVtYmVyLCBhbmQgdGhlbiBleGl0LgorCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9PdXRwdXQtT3B0aW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvT3V0cHV0LU9wdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTJjYzlkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvT3V0cHV0LU9wdGlvbnMuaHRtbApAQCAtMCwwICsxLDE5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3V0cHV0IE9wdGlvbnMgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyIgdGl0bGU9Ikludm9raW5nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQW5hbHlzaXMtT3B0aW9ucy5odG1sI0FuYWx5c2lzLU9wdGlvbnMiIHRpdGxlPSJBbmFseXNpcyBPcHRpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik91dHB1dC1PcHRpb25zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkFuYWx5c2lzLU9wdGlvbnMuaHRtbCNBbmFseXNpcy1PcHRpb25zIj5BbmFseXNpcyBPcHRpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjEgT3V0cHV0IE9wdGlvbnM8L2gzPgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorPHA+VGhlc2Ugb3B0aW9ucyBzcGVjaWZ5IHdoaWNoIG9mIHNldmVyYWwgb3V0cHV0IGZvcm1hdHMKKzxjb2RlPmdwcm9mPC9jb2RlPiBzaG91bGQgcHJvZHVjZS4KKworICAgPHA+TWFueSBvZiB0aGVzZSBvcHRpb25zIHRha2UgYW4gb3B0aW9uYWwgPGRmbj5zeW1zcGVjPC9kZm4+IHRvIHNwZWNpZnkKK2Z1bmN0aW9ucyB0byBiZSBpbmNsdWRlZCBvciBleGNsdWRlZC4gIFRoZXNlIG9wdGlvbnMgY2FuIGJlCitzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMsIHdpdGggZGlmZmVyZW50IHN5bXNwZWNzLCB0byBpbmNsdWRlCitvciBleGNsdWRlIHNldHMgb2Ygc3ltYm9scy4gIFNlZSA8YSBocmVmPSJTeW1zcGVjcy5odG1sI1N5bXNwZWNzIj5TeW1zcGVjczwvYT4uCisKKyAgIDxwPlNwZWNpZnlpbmcgYW55IG9mIHRoZXNlIG9wdGlvbnMgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0ICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wIC1xPC9zcGFuPjwvc2FtcD4mcnNxdW87KSwKK3doaWNoIHByaW50cyBhIGZsYXQgcHJvZmlsZSBhbmQgY2FsbCBncmFwaCBhbmFseXNpcworZm9yIGFsbCBmdW5jdGlvbnMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPi1BWzwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4tLWFubm90YXRlZC1zb3VyY2VbPTwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gY2F1c2VzIDxjb2RlPmdwcm9mPC9jb2RlPiB0byBwcmludCBhbm5vdGF0ZWQgc291cmNlIGNvZGUuIAorSWYgPHZhcj5zeW1zcGVjPC92YXI+IGlzIHNwZWNpZmllZCwgcHJpbnQgb3V0cHV0IG9ubHkgZm9yIG1hdGNoaW5nIHN5bWJvbHMuIAorU2VlIDxhIGhyZWY9IkFubm90YXRlZC1Tb3VyY2UuaHRtbCNBbm5vdGF0ZWQtU291cmNlIj5UaGUgQW5ub3RhdGVkIFNvdXJjZSBMaXN0aW5nPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1iPC9jb2RlPjxkdD48Y29kZT4tLWJyaWVmPC9jb2RlPjxkZD5JZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gaXMgZ2l2ZW4sIDxjb2RlPmdwcm9mPC9jb2RlPiBkb2Vzbid0IHByaW50IHRoZQordmVyYm9zZSBibHVyYnMgdGhhdCB0cnkgdG8gZXhwbGFpbiB0aGUgbWVhbmluZyBvZiBhbGwgb2YgdGhlIGZpZWxkcyBpbgordGhlIHRhYmxlcy4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBpbnRlbmQgdG8gcHJpbnQgb3V0IHRoZSBvdXRwdXQsIG9yCithcmUgdGlyZWQgb2Ygc2VlaW5nIHRoZSBibHVyYnMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tQ1s8L2NvZGU+PHZhcj5zeW1zcGVjPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+LS1leGVjLWNvdW50c1s9PC9jb2RlPjx2YXI+c3ltc3BlYzwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1DPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYXVzZXMgPGNvZGU+Z3Byb2Y8L2NvZGU+IHRvCitwcmludCBhIHRhbGx5IG9mIGZ1bmN0aW9ucyBhbmQgdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIHdhcyBjYWxsZWQuIAorSWYgPHZhcj5zeW1zcGVjPC92YXI+IGlzIHNwZWNpZmllZCwgcHJpbnQgdGFsbHkgb25seSBmb3IgbWF0Y2hpbmcgc3ltYm9scy4KKworICAgICA8cD5JZiB0aGUgcHJvZmlsZSBkYXRhIGZpbGUgY29udGFpbnMgYmFzaWMtYmxvY2sgY291bnQgcmVjb3Jkcywgc3BlY2lmeWluZwordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLCBhbG9uZyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUM8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdpbGwgY2F1c2UgYmFzaWMtYmxvY2sKK2V4ZWN1dGlvbiBjb3VudHMgdG8gYmUgdGFsbGllZCBhbmQgZGlzcGxheWVkLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LWk8L2NvZGU+PGR0Pjxjb2RlPi0tZmlsZS1pbmZvPC9jb2RlPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4taTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gY2F1c2VzIDxjb2RlPmdwcm9mPC9jb2RlPiB0byBkaXNwbGF5IHN1bW1hcnkgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBwcm9maWxlIGRhdGEgZmlsZShzKSBhbmQgdGhlbiBleGl0LiAgVGhlIG51bWJlciBvZiBoaXN0b2dyYW0sCitjYWxsIGdyYXBoLCBhbmQgYmFzaWMtYmxvY2sgY291bnQgcmVjb3JkcyBpcyBkaXNwbGF5ZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tSSA8L2NvZGU+PHZhcj5kaXJzPC92YXI+PGR0Pjxjb2RlPi0tZGlyZWN0b3J5LXBhdGg9PC9jb2RlPjx2YXI+ZGlyczwvdmFyPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tSTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gc3BlY2lmaWVzIGEgbGlzdCBvZiBzZWFyY2ggZGlyZWN0b3JpZXMgaW4KK3doaWNoIHRvIGZpbmQgc291cmNlIGZpbGVzLiAgRW52aXJvbm1lbnQgdmFyaWFibGUgPHZhcj5HUFJPRl9QQVRIPC92YXI+CitjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbnZleSB0aGlzIGluZm9ybWF0aW9uLiAKK1VzZWQgbW9zdGx5IGZvciBhbm5vdGF0ZWQgc291cmNlIG91dHB1dC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1KWzwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4tLW5vLWFubm90YXRlZC1zb3VyY2VbPTwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tSjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gY2F1c2VzIDxjb2RlPmdwcm9mPC9jb2RlPiBub3QgdG8KK3ByaW50IGFubm90YXRlZCBzb3VyY2UgY29kZS4gCitJZiA8dmFyPnN5bXNwZWM8L3Zhcj4gaXMgc3BlY2lmaWVkLCA8Y29kZT5ncHJvZjwvY29kZT4gcHJpbnRzIGFubm90YXRlZCBzb3VyY2UsCitidXQgZXhjbHVkZXMgbWF0Y2hpbmcgc3ltYm9scy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1MPC9jb2RlPjxkdD48Y29kZT4tLXByaW50LXBhdGg8L2NvZGU+PGRkPk5vcm1hbGx5LCBzb3VyY2UgZmlsZW5hbWVzIGFyZSBwcmludGVkIHdpdGggdGhlIHBhdGgKK2NvbXBvbmVudCBzdXBwcmVzc2VkLiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4KK3RvIHByaW50IHRoZSBmdWxsIHBhdGhuYW1lIG9mCitzb3VyY2UgZmlsZW5hbWVzLCB3aGljaCBpcyBkZXRlcm1pbmVkCitmcm9tIHN5bWJvbGljIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgaW1hZ2UgZmlsZQorYW5kIGlzIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyCit3YXMgaW52b2tlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1wWzwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4tLWZsYXQtcHJvZmlsZVs9PC9jb2RlPjx2YXI+c3ltc3BlYzwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYXVzZXMgPGNvZGU+Z3Byb2Y8L2NvZGU+IHRvIHByaW50IGEgZmxhdCBwcm9maWxlLiAKK0lmIDx2YXI+c3ltc3BlYzwvdmFyPiBpcyBzcGVjaWZpZWQsIHByaW50IGZsYXQgcHJvZmlsZSBvbmx5IGZvciBtYXRjaGluZyBzeW1ib2xzLiAKK1NlZSA8YSBocmVmPSJGbGF0LVByb2ZpbGUuaHRtbCNGbGF0LVByb2ZpbGUiPlRoZSBGbGF0IFByb2ZpbGU8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVBbPC9jb2RlPjx2YXI+c3ltc3BlYzwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi0tbm8tZmxhdC1wcm9maWxlWz08L2NvZGU+PHZhcj5zeW1zcGVjPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gc3VwcHJlc3MgcHJpbnRpbmcgYSBmbGF0IHByb2ZpbGUuIAorSWYgPHZhcj5zeW1zcGVjPC92YXI+IGlzIHNwZWNpZmllZCwgPGNvZGU+Z3Byb2Y8L2NvZGU+IHByaW50cyBhIGZsYXQgcHJvZmlsZSwKK2J1dCBleGNsdWRlcyBtYXRjaGluZyBzeW1ib2xzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXFbPC9jb2RlPjx2YXI+c3ltc3BlYzwvdmFyPjxjb2RlPl08L2NvZGU+PGR0Pjxjb2RlPi0tZ3JhcGhbPTwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gY2F1c2VzIDxjb2RlPmdwcm9mPC9jb2RlPiB0byBwcmludCB0aGUgY2FsbCBncmFwaCBhbmFseXNpcy4gCitJZiA8dmFyPnN5bXNwZWM8L3Zhcj4gaXMgc3BlY2lmaWVkLCBwcmludCBjYWxsIGdyYXBoIG9ubHkgZm9yIG1hdGNoaW5nIHN5bWJvbHMKK2FuZCB0aGVpciBjaGlsZHJlbi4gCitTZWUgPGEgaHJlZj0iQ2FsbC1HcmFwaC5odG1sI0NhbGwtR3JhcGgiPlRoZSBDYWxsIEdyYXBoPC9hPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1RWzwvY29kZT48dmFyPnN5bXNwZWM8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4tLW5vLWdyYXBoWz08L2NvZGU+PHZhcj5zeW1zcGVjPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gc3VwcHJlc3MgcHJpbnRpbmcgdGhlCitjYWxsIGdyYXBoLiAKK0lmIDx2YXI+c3ltc3BlYzwvdmFyPiBpcyBzcGVjaWZpZWQsIDxjb2RlPmdwcm9mPC9jb2RlPiBwcmludHMgYSBjYWxsIGdyYXBoLAorYnV0IGV4Y2x1ZGVzIG1hdGNoaW5nIHN5bWJvbHMuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tdDwvY29kZT48ZHQ+PGNvZGU+LS10YWJsZS1sZW5ndGg9PC9jb2RlPjx2YXI+bnVtPC92YXI+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi10PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYXVzZXMgdGhlIDx2YXI+bnVtPC92YXI+IG1vc3QgYWN0aXZlIHNvdXJjZSBsaW5lcyBpbgorZWFjaCBzb3VyY2UgZmlsZSB0byBiZSBsaXN0ZWQgd2hlbiBzb3VyY2UgYW5ub3RhdGlvbiBpcyBlbmFibGVkLiAgVGhlCitkZWZhdWx0IGlzIDEwLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXk8L2NvZGU+PGR0Pjxjb2RlPi0tc2VwYXJhdGUtZmlsZXM8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGFmZmVjdHMgYW5ub3RhdGVkIHNvdXJjZSBvdXRwdXQgb25seS4gCitOb3JtYWxseSwgPGNvZGU+Z3Byb2Y8L2NvZGU+IHByaW50cyBhbm5vdGF0ZWQgc291cmNlIGZpbGVzCit0byBzdGFuZGFyZC1vdXRwdXQuICBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsCithbm5vdGF0ZWQgc291cmNlIGZvciBhIGZpbGUgbmFtZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnBhdGgvPC9zcGFuPjx2YXI+ZmlsZW5hbWU8L3Zhcj48L3NhbXA+CitpcyBnZW5lcmF0ZWQgaW4gdGhlIGZpbGUgPHNhbXA+PHZhcj5maWxlbmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4tYW5uPC9zcGFuPjwvc2FtcD4uICBJZiB0aGUgdW5kZXJseWluZworZmlsZSBzeXN0ZW0gd291bGQgdHJ1bmNhdGUgPHNhbXA+PHZhcj5maWxlbmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4tYW5uPC9zcGFuPjwvc2FtcD4gc28gdGhhdCBpdAorb3ZlcndyaXRlcyB0aGUgb3JpZ2luYWwgPHNhbXA+PHZhcj5maWxlbmFtZTwvdmFyPjwvc2FtcD4sIDxjb2RlPmdwcm9mPC9jb2RlPiBnZW5lcmF0ZXMKK2Fubm90YXRlZCBzb3VyY2UgaW4gdGhlIGZpbGUgPHNhbXA+PHZhcj5maWxlbmFtZTwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uYW5uPC9zcGFuPjwvc2FtcD4gaW5zdGVhZCAoaWYgdGhlCitvcmlnaW5hbCBmaWxlIG5hbWUgaGFzIGFuIGV4dGVuc2lvbiwgdGhhdCBleHRlbnNpb24gaXMgPGVtPnJlcGxhY2VkPC9lbT4KK3dpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi5hbm48L3NwYW4+PC9zYW1wPikuCisKKyAgICAgPGJyPjxkdD48Y29kZT4tWls8L2NvZGU+PHZhcj5zeW1zcGVjPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+LS1uby1leGVjLWNvdW50c1s9PC9jb2RlPjx2YXI+c3ltc3BlYzwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1aPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYXVzZXMgPGNvZGU+Z3Byb2Y8L2NvZGU+IG5vdCB0bworcHJpbnQgYSB0YWxseSBvZiBmdW5jdGlvbnMgYW5kIHRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCB3YXMgY2FsbGVkLiAKK0lmIDx2YXI+c3ltc3BlYzwvdmFyPiBpcyBzcGVjaWZpZWQsIHByaW50IHRhbGx5LCBidXQgZXhjbHVkZSBtYXRjaGluZyBzeW1ib2xzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXI8L2NvZGU+PGR0Pjxjb2RlPi0tZnVuY3Rpb24tb3JkZXJpbmc8L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZnVuY3Rpb24tb3JkZXJpbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gcHJpbnQgYQorc3VnZ2VzdGVkIGZ1bmN0aW9uIG9yZGVyaW5nIGZvciB0aGUgcHJvZ3JhbSBiYXNlZCBvbiBwcm9maWxpbmcgZGF0YS4gCitUaGlzIG9wdGlvbiBzdWdnZXN0cyBhbiBvcmRlcmluZyB3aGljaCBtYXkgaW1wcm92ZSBwYWdpbmcsIHRsYiBhbmQKK2NhY2hlIGJlaGF2aW9yIGZvciB0aGUgcHJvZ3JhbSBvbiBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgYXJiaXRyYXJ5CitvcmRlcmluZyBvZiBmdW5jdGlvbnMgaW4gYW4gZXhlY3V0YWJsZS4KKworICAgICA8cD5UaGUgZXhhY3QgZGV0YWlscyBvZiBob3cgdG8gZm9yY2UgdGhlIGxpbmtlciB0byBwbGFjZSBmdW5jdGlvbnMKK2luIGEgcGFydGljdWxhciBvcmRlciBpcyBzeXN0ZW0gZGVwZW5kZW50IGFuZCBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMKK21hbnVhbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1SIDwvY29kZT48dmFyPm1hcF9maWxlPC92YXI+PGR0Pjxjb2RlPi0tZmlsZS1vcmRlcmluZyA8L2NvZGU+PHZhcj5tYXBfZmlsZTwvdmFyPjxkZD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWZpbGUtb3JkZXJpbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhdXNlcyA8Y29kZT5ncHJvZjwvY29kZT4gdG8gcHJpbnQgYQorc3VnZ2VzdGVkIC5vIGxpbmsgbGluZSBvcmRlcmluZyBmb3IgdGhlIHByb2dyYW0gYmFzZWQgb24gcHJvZmlsaW5nIGRhdGEuIAorVGhpcyBvcHRpb24gc3VnZ2VzdHMgYW4gb3JkZXJpbmcgd2hpY2ggbWF5IGltcHJvdmUgcGFnaW5nLCB0bGIgYW5kCitjYWNoZSBiZWhhdmlvciBmb3IgdGhlIHByb2dyYW0gb24gc3lzdGVtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBhcmJpdHJhcnkKK29yZGVyaW5nIG9mIGZ1bmN0aW9ucyBpbiBhbiBleGVjdXRhYmxlLgorCisgICAgIDxwPlVzZSBvZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmd1bWVudCBpcyBoaWdobHkgcmVjb21tZW5kZWQgd2l0aCB0aGlzIG9wdGlvbi4KKworICAgICA8cD5UaGUgPHZhcj5tYXBfZmlsZTwvdmFyPiBhcmd1bWVudCBpcyBhIHBhdGhuYW1lIHRvIGEgZmlsZSB3aGljaCBwcm92aWRlcworZnVuY3Rpb24gbmFtZSB0byBvYmplY3QgZmlsZSBtYXBwaW5ncy4gIFRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgaXMgc2ltaWxhciB0bwordGhlIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSA8Y29kZT5ubTwvY29kZT4uCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgYy1wYXJzZS5vOjAwMDAwMDAwIFQgeXlwYXJzZQorICAgICAgICAgIGMtcGFyc2UubzowMDAwMDAwNCBDIHl5ZXJyZmxhZworICAgICAgICAgIGMtbGFuZy5vOjAwMDAwMDAwIFQgbWF5YmVfb2JqY19tZXRob2RfbmFtZQorICAgICAgICAgIGMtbGFuZy5vOjAwMDAwMDAwIFQgcHJpbnRfbGFuZ19zdGF0aXN0aWNzCisgICAgICAgICAgYy1sYW5nLm86MDAwMDAwMDAgVCByZWNvZ25pemVfb2JqY19rZXl3b3JkCisgICAgICAgICAgYy1kZWNsLm86MDAwMDAwMDAgVCBwcmludF9sYW5nX2lkZW50aWZpZXIKKyAgICAgICAgICBjLWRlY2wubzowMDAwMDAwMCBUIHByaW50X2xhbmdfdHlwZQorICAgICAgICAgIC4uLgorPC9wcmU+CisgICAgIDxwPlRvIGNyZWF0ZSBhIDx2YXI+bWFwX2ZpbGU8L3Zhcj4gd2l0aCA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPGNvZGU+bm08L2NvZGU+LCB0eXBlIGEgY29tbWFuZCBsaWtlCis8a2JkPm5tIC0tZXh0ZXJuLW9ubHkgLS1kZWZpbmVkLW9ubHkgLXYgLS1wcmludC1maWxlLW5hbWUgcHJvZ3JhbS1uYW1lPC9rYmQ+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+LVQ8L2NvZGU+PGR0Pjxjb2RlPi0tdHJhZGl0aW9uYWw8L2NvZGU+PGRkPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1UPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYXVzZXMgPGNvZGU+Z3Byb2Y8L2NvZGU+IHRvIHByaW50IGl0cyBvdXRwdXQgaW4KKyZsZHF1bzt0cmFkaXRpb25hbCZyZHF1bzsgQlNEIHN0eWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+LXcgPC9jb2RlPjx2YXI+d2lkdGg8L3Zhcj48ZHQ+PGNvZGU+LS13aWR0aD08L2NvZGU+PHZhcj53aWR0aDwvdmFyPjxkZD5TZXRzIHdpZHRoIG9mIG91dHB1dCBsaW5lcyB0byA8dmFyPndpZHRoPC92YXI+LiAKK0N1cnJlbnRseSBvbmx5IHVzZWQgd2hlbiBwcmludGluZyB0aGUgZnVuY3Rpb24gaW5kZXggYXQgdGhlIGJvdHRvbQorb2YgdGhlIGNhbGwgZ3JhcGguCisKKyAgICAgPGJyPjxkdD48Y29kZT4teDwvY29kZT48ZHQ+PGNvZGU+LS1hbGwtbGluZXM8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGFmZmVjdHMgYW5ub3RhdGVkIHNvdXJjZSBvdXRwdXQgb25seS4gCitCeSBkZWZhdWx0LCBvbmx5IHRoZSBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgYmFzaWMtYmxvY2sKK2FyZSBhbm5vdGF0ZWQuICBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGV2ZXJ5IGxpbmUgaW4KK2EgYmFzaWMtYmxvY2sgaXMgYW5ub3RhdGVkIGJ5IHJlcGVhdGluZyB0aGUgYW5ub3RhdGlvbiBmb3IgdGhlCitmaXJzdCBsaW5lLiAgVGhpcyBiZWhhdmlvciBpcyBzaW1pbGFyIHRvIDxjb2RlPnRjb3Y8L2NvZGU+J3MgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi0tZGVtYW5nbGVbPTwvY29kZT48dmFyPnN0eWxlPC92YXI+PGNvZGU+XTwvY29kZT48ZHQ+PGNvZGU+LS1uby1kZW1hbmdsZTwvY29kZT48ZGQ+VGhlc2Ugb3B0aW9ucyBjb250cm9sIHdoZXRoZXIgQysrIHN5bWJvbCBuYW1lcyBzaG91bGQgYmUgZGVtYW5nbGVkIHdoZW4KK3ByaW50aW5nIG91dHB1dC4gIFRoZSBkZWZhdWx0IGlzIHRvIGRlbWFuZ2xlIHN5bWJvbHMuICBUaGUKKzxjb2RlPi0tbm8tZGVtYW5nbGU8L2NvZGU+IG9wdGlvbiBtYXkgYmUgdXNlZCB0byB0dXJuIG9mZiBkZW1hbmdsaW5nLiBEaWZmZXJlbnQKK2NvbXBpbGVycyBoYXZlIGRpZmZlcmVudCBtYW5nbGluZyBzdHlsZXMuICBUaGUgb3B0aW9uYWwgZGVtYW5nbGluZyBzdHlsZQorYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlIGRlbWFuZ2xpbmcgc3R5bGUgZm9yIHlvdXIKK2NvbXBpbGVyLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL091dHB1dC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvT3V0cHV0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxYTgxZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL091dHB1dC5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk91dHB1dCAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciIHRpdGxlPSJJbnZva2luZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkluYWNjdXJhY3kuaHRtbCNJbmFjY3VyYWN5IiB0aXRsZT0iSW5hY2N1cmFjeSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKy0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPdXRwdXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW5hY2N1cmFjeS5odG1sI0luYWNjdXJhY3kiPkluYWNjdXJhY3k8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj5JbnZva2luZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj41IEludGVycHJldGluZyA8Y29kZT5ncHJvZjwvY29kZT4ncyBPdXRwdXQ8L2gyPgorCis8cD48Y29kZT5ncHJvZjwvY29kZT4gY2FuIHByb2R1Y2Ugc2V2ZXJhbCBkaWZmZXJlbnQgb3V0cHV0IHN0eWxlcywgdGhlCittb3N0IGltcG9ydGFudCBvZiB3aGljaCBhcmUgZGVzY3JpYmVkIGJlbG93LiAgVGhlIHNpbXBsZXN0IG91dHB1dAorc3R5bGVzIChmaWxlIGluZm9ybWF0aW9uLCBleGVjdXRpb24gY291bnQsIGFuZCBmdW5jdGlvbiBhbmQgZmlsZSBvcmRlcmluZykKK2FyZSBub3QgZGVzY3JpYmVkIGhlcmUsIGJ1dCBhcmUgZG9jdW1lbnRlZCB3aXRoIHRoZSByZXNwZWN0aXZlIG9wdGlvbnMKK3RoYXQgdHJpZ2dlciB0aGVtLiAKK1NlZSA8YSBocmVmPSJPdXRwdXQtT3B0aW9ucy5odG1sI091dHB1dC1PcHRpb25zIj5PdXRwdXQgT3B0aW9uczwvYT4uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJGbGF0LVByb2ZpbGUuaHRtbCNGbGF0LVByb2ZpbGUiPkZsYXQgUHJvZmlsZTwvYT46ICAgICAgICAgVGhlIGZsYXQgcHJvZmlsZSBzaG93cyBob3cgbXVjaCB0aW1lIHdhcyBzcGVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGluZyBkaXJlY3RseSBpbiBlYWNoIGZ1bmN0aW9uLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkNhbGwtR3JhcGguaHRtbCNDYWxsLUdyYXBoIj5DYWxsIEdyYXBoPC9hPjogICAgICAgICAgIFRoZSBjYWxsIGdyYXBoIHNob3dzIHdoaWNoIGZ1bmN0aW9ucyBjYWxsZWQgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMsIGFuZCBob3cgbXVjaCB0aW1lIGVhY2ggZnVuY3Rpb24gdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gaXRzIHN1YnJvdXRpbmUgY2FsbHMgYXJlIGluY2x1ZGVkLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkxpbmVfMDAyZGJ5XzAwMmRsaW5lLmh0bWwjTGluZV8wMDJkYnlfMDAyZGxpbmUiPkxpbmUtYnktbGluZTwvYT46ICAgICAgICAgPGNvZGU+Z3Byb2Y8L2NvZGU+IGNhbiBhbmFseXplIGluZGl2aWR1YWwgc291cmNlIGNvZGUgbGluZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkFubm90YXRlZC1Tb3VyY2UuaHRtbCNBbm5vdGF0ZWQtU291cmNlIj5Bbm5vdGF0ZWQgU291cmNlPC9hPjogICAgIFRoZSBhbm5vdGF0ZWQgc291cmNlIGxpc3RpbmcgZGlzcGxheXMgc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbGVkIHdpdGggZXhlY3V0aW9uIGNvdW50cworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvUHJpbWFyeS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvUHJpbWFyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTQyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9QcmltYXJ5Lmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlByaW1hcnkgLSBHTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ2FsbC1HcmFwaC5odG1sI0NhbGwtR3JhcGgiIHRpdGxlPSJDYWxsIEdyYXBoIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ2FsbGVycy5odG1sI0NhbGxlcnMiIHRpdGxlPSJDYWxsZXJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgZ3Byb2YgcHJvZmlsZXIgb2YgdGhlIEdOVSBzeXN0ZW0uCisKK0NvcHlyaWdodCAoQykgMTk4OCwgMTk5MiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywKKzIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4KKworLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlByaW1hcnkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ2FsbGVycy5odG1sI0NhbGxlcnMiPkNhbGxlcnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDYWxsLUdyYXBoLmh0bWwjQ2FsbC1HcmFwaCI+Q2FsbCBHcmFwaDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjUuMi4xIFRoZSBQcmltYXJ5IExpbmU8L2g0PgorCis8cD5UaGUgPGRmbj5wcmltYXJ5IGxpbmU8L2Rmbj4gaW4gYSBjYWxsIGdyYXBoIGVudHJ5IGlzIHRoZSBsaW5lIHRoYXQKK2Rlc2NyaWJlcyB0aGUgZnVuY3Rpb24gd2hpY2ggdGhlIGVudHJ5IGlzIGFib3V0IGFuZCBnaXZlcyB0aGUgb3ZlcmFsbAorc3RhdGlzdGljcyBmb3IgdGhpcyBmdW5jdGlvbi4KKworICAgPHA+Rm9yIHJlZmVyZW5jZSwgd2UgcmVwZWF0IHRoZSBwcmltYXJ5IGxpbmUgZnJvbSB0aGUgZW50cnkgZm9yIGZ1bmN0aW9uCis8Y29kZT5yZXBvcnQ8L2NvZGU+IGluIG91ciBtYWluIGV4YW1wbGUsIHRvZ2V0aGVyIHdpdGggdGhlIGhlYWRpbmcgbGluZSB0aGF0CitzaG93cyB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGluZGV4ICAlIHRpbWUgICAgc2VsZiAgY2hpbGRyZW4gY2FsbGVkICAgICBuYW1lCisgICAgIC4uLgorICAgICBbM10gICAgMTAwLjAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEgICAgICAgICByZXBvcnQgWzNdCis8L3ByZT4KKyAgIDxwPkhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIGluIHRoZSBwcmltYXJ5IGxpbmUgbWVhbjoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+aW5kZXg8L2NvZGU+PGRkPkVudHJpZXMgYXJlIG51bWJlcmVkIHdpdGggY29uc2VjdXRpdmUgaW50ZWdlcnMuICBFYWNoIGZ1bmN0aW9uCit0aGVyZWZvcmUgaGFzIGFuIGluZGV4IG51bWJlciwgd2hpY2ggYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIGl0cworcHJpbWFyeSBsaW5lLgorCisgICAgIDxwPkVhY2ggY3Jvc3MtcmVmZXJlbmNlIHRvIGEgZnVuY3Rpb24sIGFzIGEgY2FsbGVyIG9yIHN1YnJvdXRpbmUgb2YKK2Fub3RoZXIsIGdpdmVzIGl0cyBpbmRleCBudW1iZXIgYXMgd2VsbCBhcyBpdHMgbmFtZS4gIFRoZSBpbmRleCBudW1iZXIKK2d1aWRlcyB5b3UgaWYgeW91IHdpc2ggdG8gbG9vayBmb3IgdGhlIGVudHJ5IGZvciB0aGF0IGZ1bmN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JSB0aW1lPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCB0aW1lIHRoYXQgd2FzIHNwZW50IGluIHRoaXMKK2Z1bmN0aW9uLCBpbmNsdWRpbmcgdGltZSBzcGVudCBpbiBzdWJyb3V0aW5lcyBjYWxsZWQgZnJvbSB0aGlzCitmdW5jdGlvbi4KKworICAgICA8cD5UaGUgdGltZSBzcGVudCBpbiB0aGlzIGZ1bmN0aW9uIGlzIGNvdW50ZWQgYWdhaW4gZm9yIHRoZSBjYWxsZXJzIG9mCit0aGlzIGZ1bmN0aW9uLiAgVGhlcmVmb3JlLCBhZGRpbmcgdXAgdGhlc2UgcGVyY2VudGFnZXMgaXMgbWVhbmluZ2xlc3MuCisKKyAgICAgPGJyPjxkdD48Y29kZT5zZWxmPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSB0b3RhbCBhbW91bnQgb2YgdGltZSBzcGVudCBpbiB0aGlzIGZ1bmN0aW9uLiAgVGhpcworc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0aGUgbnVtYmVyIHByaW50ZWQgaW4gdGhlIDxjb2RlPnNlY29uZHM8L2NvZGU+IGZpZWxkCitmb3IgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZmxhdCBwcm9maWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hpbGRyZW48L2NvZGU+PGRkPlRoaXMgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lIHNwZW50IGluIHRoZSBzdWJyb3V0aW5lIGNhbGxzIG1hZGUgYnkKK3RoaXMgZnVuY3Rpb24uICBUaGlzIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgc3VtIG9mIGFsbCB0aGUgPGNvZGU+c2VsZjwvY29kZT4KK2FuZCA8Y29kZT5jaGlsZHJlbjwvY29kZT4gZW50cmllcyBvZiB0aGUgY2hpbGRyZW4gbGlzdGVkIGRpcmVjdGx5IGJlbG93IHRoaXMKK2Z1bmN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2FsbGVkPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQuCisKKyAgICAgPHA+SWYgdGhlIGZ1bmN0aW9uIGNhbGxlZCBpdHNlbGYgcmVjdXJzaXZlbHksIHRoZXJlIGFyZSB0d28gbnVtYmVycywKK3NlcGFyYXRlZCBieSBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFRoZSBmaXJzdCBudW1iZXIgY291bnRzIG5vbi1yZWN1cnNpdmUgY2FsbHMsCithbmQgdGhlIHNlY29uZCBjb3VudHMgcmVjdXJzaXZlIGNhbGxzLgorCisgICAgIDxwPkluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgZnVuY3Rpb24gPGNvZGU+cmVwb3J0PC9jb2RlPiB3YXMgY2FsbGVkIG9uY2UgZnJvbQorPGNvZGU+bWFpbjwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5uYW1lPC9jb2RlPjxkZD5UaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgVGhlIGluZGV4IG51bWJlciBpcworcmVwZWF0ZWQgYWZ0ZXIgaXQuCisKKyAgICAgPHA+SWYgdGhlIGZ1bmN0aW9uIGlzIHBhcnQgb2YgYSBjeWNsZSBvZiByZWN1cnNpb24sIHRoZSBjeWNsZSBudW1iZXIgaXMKK3ByaW50ZWQgYmV0d2VlbiB0aGUgZnVuY3Rpb24ncyBuYW1lIGFuZCB0aGUgaW5kZXggbnVtYmVyCisoc2VlIDxhIGhyZWY9IkN5Y2xlcy5odG1sI0N5Y2xlcyI+SG93IE11dHVhbGx5IFJlY3Vyc2l2ZSBGdW5jdGlvbnMgQXJlIERlc2NyaWJlZDwvYT4pLiAKK0ZvciBleGFtcGxlLCBpZiBmdW5jdGlvbiA8Y29kZT5nbnVycjwvY29kZT4gaXMgcGFydCBvZgorY3ljbGUgbnVtYmVyIG9uZSwgYW5kIGhhcyBpbmRleCBudW1iZXIgdHdlbHZlLCBpdHMgcHJpbWFyeSBsaW5lIHdvdWxkCitiZSBlbmQgbGlrZSB0aGlzOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBnbnVyciAmbHQ7Y3ljbGUgMSZndDsgWzEyXQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL1NhbXBsaW5nLUVycm9yLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9TYW1wbGluZy1FcnJvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTNjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9TYW1wbGluZy1FcnJvci5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TYW1wbGluZyBFcnJvciAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbmFjY3VyYWN5Lmh0bWwjSW5hY2N1cmFjeSIgdGl0bGU9IkluYWNjdXJhY3kiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJBc3N1bXB0aW9ucy5odG1sI0Fzc3VtcHRpb25zIiB0aXRsZT0iQXNzdW1wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBncHJvZiBwcm9maWxlciBvZiB0aGUgR05VIHN5c3RlbS4KKworQ29weXJpZ2h0IChDKSAxOTg4LCAxOTkyLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLAorMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2FtcGxpbmctRXJyb3IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXNzdW1wdGlvbnMuaHRtbCNBc3N1bXB0aW9ucyI+QXNzdW1wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbmFjY3VyYWN5Lmh0bWwjSW5hY2N1cmFjeSI+SW5hY2N1cmFjeTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMSBTdGF0aXN0aWNhbCBTYW1wbGluZyBFcnJvcjwvaDM+CisKKzxwPlRoZSBydW4tdGltZSBmaWd1cmVzIHRoYXQgPGNvZGU+Z3Byb2Y8L2NvZGU+IGdpdmVzIHlvdSBhcmUgYmFzZWQgb24gYSBzYW1wbGluZworcHJvY2Vzcywgc28gdGhleSBhcmUgc3ViamVjdCB0byBzdGF0aXN0aWNhbCBpbmFjY3VyYWN5LiAgSWYgYSBmdW5jdGlvbiBydW5zCitvbmx5IGEgc21hbGwgYW1vdW50IG9mIHRpbWUsIHNvIHRoYXQgb24gdGhlIGF2ZXJhZ2UgdGhlIHNhbXBsaW5nIHByb2Nlc3MKK291Z2h0IHRvIGNhdGNoIHRoYXQgZnVuY3Rpb24gaW4gdGhlIGFjdCBvbmx5IG9uY2UsIHRoZXJlIGlzIGEgcHJldHR5IGdvb2QKK2NoYW5jZSBpdCB3aWxsIGFjdHVhbGx5IGZpbmQgdGhhdCBmdW5jdGlvbiB6ZXJvIHRpbWVzLCBvciB0d2ljZS4KKworICAgPHA+QnkgY29udHJhc3QsIHRoZSBudW1iZXItb2YtY2FsbHMgYW5kIGJhc2ljLWJsb2NrIGZpZ3VyZXMgYXJlIGRlcml2ZWQKK2J5IGNvdW50aW5nLCBub3Qgc2FtcGxpbmcuICBUaGV5IGFyZSBjb21wbGV0ZWx5IGFjY3VyYXRlIGFuZCB3aWxsIG5vdAordmFyeSBmcm9tIHJ1biB0byBydW4gaWYgeW91ciBwcm9ncmFtIGlzIGRldGVybWluaXN0aWMgYW5kIHNpbmdsZQordGhyZWFkZWQuICBJbiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMsIG9yIHNpbmdsZSB0aHJlYWRlZAorYXBwbGljYXRpb25zIHRoYXQgbGluayB3aXRoIG11bHRpLXRocmVhZGVkIGxpYnJhcmllcywgdGhlIGNvdW50cyBhcmUKK29ubHkgZGV0ZXJtaW5pc3RpYyBpZiB0aGUgY291bnRpbmcgZnVuY3Rpb24gaXMgdGhyZWFkLXNhZmUuICAoTm90ZToKK2Jld2FyZSB0aGF0IHRoZSBtY291bnQgY291bnRpbmcgZnVuY3Rpb24gaW4gZ2xpYmMgaXMgPGVtPm5vdDwvZW0+Cit0aHJlYWQtc2FmZSkuICBTZWUgPGEgaHJlZj0iSW1wbGVtZW50YXRpb24uaHRtbCNJbXBsZW1lbnRhdGlvbiI+SW1wbGVtZW50YXRpb24gb2YgUHJvZmlsaW5nPC9hPi4KKworICAgPHA+VGhlIDxkZm4+c2FtcGxpbmcgcGVyaW9kPC9kZm4+IHRoYXQgaXMgcHJpbnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmbGF0Citwcm9maWxlIHNheXMgaG93IG9mdGVuIHNhbXBsZXMgYXJlIHRha2VuLiAgVGhlIHJ1bGUgb2YgdGh1bWIgaXMgdGhhdCBhCitydW4tdGltZSBmaWd1cmUgaXMgYWNjdXJhdGUgaWYgaXQgaXMgY29uc2lkZXJhYmx5IGJpZ2dlciB0aGFuIHRoZSBzYW1wbGluZworcGVyaW9kLgorCisgICA8cD5UaGUgYWN0dWFsIGFtb3VudCBvZiBlcnJvciBjYW4gYmUgcHJlZGljdGVkLiAKK0ZvciA8dmFyPm48L3Zhcj4gc2FtcGxlcywgdGhlIDxlbT5leHBlY3RlZDwvZW0+IGVycm9yCitpcyB0aGUgc3F1YXJlLXJvb3Qgb2YgPHZhcj5uPC92YXI+LiAgRm9yIGV4YW1wbGUsCitpZiB0aGUgc2FtcGxpbmcgcGVyaW9kIGlzIDAuMDEgc2Vjb25kcyBhbmQgPGNvZGU+Zm9vPC9jb2RlPidzIHJ1bi10aW1lIGlzIDEgc2Vjb25kLAorPHZhcj5uPC92YXI+IGlzIDEwMCBzYW1wbGVzICgxIHNlY29uZC8wLjAxIHNlY29uZHMpLCBzcXJ0KDx2YXI+bjwvdmFyPikgaXMgMTAgc2FtcGxlcywgc28KK3RoZSBleHBlY3RlZCBlcnJvciBpbiA8Y29kZT5mb288L2NvZGU+J3MgcnVuLXRpbWUgaXMgMC4xIHNlY29uZHMgKDEwKjAuMDEgc2Vjb25kcyksCitvciB0ZW4gcGVyY2VudCBvZiB0aGUgb2JzZXJ2ZWQgdmFsdWUuIAorQWdhaW4sIGlmIHRoZSBzYW1wbGluZyBwZXJpb2QgaXMgMC4wMSBzZWNvbmRzIGFuZCA8Y29kZT5iYXI8L2NvZGU+J3MgcnVuLXRpbWUgaXMKKzEwMCBzZWNvbmRzLCA8dmFyPm48L3Zhcj4gaXMgMTAwMDAgc2FtcGxlcywgc3FydCg8dmFyPm48L3Zhcj4pIGlzIDEwMCBzYW1wbGVzLCBzbwordGhlIGV4cGVjdGVkIGVycm9yIGluIDxjb2RlPmJhcjwvY29kZT4ncyBydW4tdGltZSBpcyAxIHNlY29uZCwKK29yIG9uZSBwZXJjZW50IG9mIHRoZSBvYnNlcnZlZCB2YWx1ZS4gCitJdCBpcyBsaWtlbHkgdG8KK3ZhcnkgdGhpcyBtdWNoIDxlbT5vbiB0aGUgYXZlcmFnZTwvZW0+IGZyb20gb25lIHByb2ZpbGluZyBydW4gdG8gdGhlIG5leHQuIAorKDxlbT5Tb21ldGltZXM8L2VtPiBpdCB3aWxsIHZhcnkgbW9yZS4pCisKKyAgIDxwPlRoaXMgZG9lcyBub3QgbWVhbiB0aGF0IGEgc21hbGwgcnVuLXRpbWUgZmlndXJlIGlzIGRldm9pZCBvZiBpbmZvcm1hdGlvbi4gCitJZiB0aGUgcHJvZ3JhbSdzIDxlbT50b3RhbDwvZW0+IHJ1bi10aW1lIGlzIGxhcmdlLCBhIHNtYWxsIHJ1bi10aW1lIGZvciBvbmUKK2Z1bmN0aW9uIGRvZXMgdGVsbCB5b3UgdGhhdCB0aGF0IGZ1bmN0aW9uIHVzZWQgYW4gaW5zaWduaWZpY2FudCBmcmFjdGlvbiBvZgordGhlIHdob2xlIHByb2dyYW0ncyB0aW1lLiAgVXN1YWxseSB0aGlzIG1lYW5zIGl0IGlzIG5vdCB3b3J0aCBvcHRpbWl6aW5nLgorCisgICA8cD5PbmUgd2F5IHRvIGdldCBtb3JlIGFjY3VyYWN5IGlzIHRvIGdpdmUgeW91ciBwcm9ncmFtIG1vcmUgKGJ1dCBzaW1pbGFyKQoraW5wdXQgZGF0YSBzbyBpdCB3aWxsIHRha2UgbG9uZ2VyLiAgQW5vdGhlciB3YXkgaXMgdG8gY29tYmluZSB0aGUgZGF0YSBmcm9tCitzZXZlcmFsIHJ1bnMsIHVzaW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1zPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBvZiA8Y29kZT5ncHJvZjwvY29kZT4uICBIZXJlIGlzIGhvdzoKKworICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+UnVuIHlvdXIgcHJvZ3JhbSBvbmNlLgorCisgICAgIDxsaT5Jc3N1ZSB0aGUgY29tbWFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm12IGdtb24ub3V0IGdtb24uc3VtPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxsaT5SdW4geW91ciBwcm9ncmFtIGFnYWluLCB0aGUgc2FtZSBhcyBiZWZvcmUuCisKKyAgICAgPGxpPk1lcmdlIHRoZSBuZXcgZGF0YSBpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Z21vbi5vdXQ8L3NwYW4+PC9zYW1wPiBpbnRvIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5nbW9uLnN1bTwvc3Bhbj48L3NhbXA+IHdpdGggdGhpcyBjb21tYW5kOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBncHJvZiAtcyA8dmFyPmV4ZWN1dGFibGUtZmlsZTwvdmFyPiBnbW9uLm91dCBnbW9uLnN1bQorPC9wcmU+CisgICAgIDxsaT5SZXBlYXQgdGhlIGxhc3QgdHdvIHN0ZXBzIGFzIG9mdGVuIGFzIHlvdSB3aXNoLgorCisgICAgIDxsaT5BbmFseXplIHRoZSBjdW11bGF0aXZlIGRhdGEgdXNpbmcgdGhpcyBjb21tYW5kOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBncHJvZiA8dmFyPmV4ZWN1dGFibGUtZmlsZTwvdmFyPiBnbW9uLnN1bSAmZ3Q7IDx2YXI+b3V0cHV0LWZpbGU8L3Zhcj4KKzwvcHJlPgorICAgICA8L29sPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9TdWJyb3V0aW5lcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvU3Vicm91dGluZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDc4NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvU3Vicm91dGluZXMuaHRtbApAQCAtMCwwICsxLDkyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdWJyb3V0aW5lcyAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDYWxsLUdyYXBoLmh0bWwjQ2FsbC1HcmFwaCIgdGl0bGU9IkNhbGwgR3JhcGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDYWxsZXJzLmh0bWwjQ2FsbGVycyIgdGl0bGU9IkNhbGxlcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJDeWNsZXMuaHRtbCNDeWNsZXMiIHRpdGxlPSJDeWNsZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBncHJvZiBwcm9maWxlciBvZiB0aGUgR05VIHN5c3RlbS4KKworQ29weXJpZ2h0IChDKSAxOTg4LCAxOTkyLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLAorMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3Vicm91dGluZXMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ3ljbGVzLmh0bWwjQ3ljbGVzIj5DeWNsZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDYWxsZXJzLmh0bWwjQ2FsbGVycyI+Q2FsbGVyczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNhbGwtR3JhcGguaHRtbCNDYWxsLUdyYXBoIj5DYWxsIEdyYXBoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+NS4yLjMgTGluZXMgZm9yIGEgRnVuY3Rpb24ncyBTdWJyb3V0aW5lczwvaDQ+CisKKzxwPkEgZnVuY3Rpb24ncyBlbnRyeSBoYXMgYSBsaW5lIGZvciBlYWNoIG9mIGl0cyBzdWJyb3V0aW5lcyZtZGFzaDtpbiBvdGhlcgord29yZHMsIGEgbGluZSBmb3IgZWFjaCBvdGhlciBmdW5jdGlvbiB0aGF0IGl0IGNhbGxlZC4gIFRoZXNlIGxpbmVzJworZmllbGRzIGNvcnJlc3BvbmQgdG8gdGhlIGZpZWxkcyBvZiB0aGUgcHJpbWFyeSBsaW5lLCBidXQgdGhlaXIgbWVhbmluZ3MKK2FyZSBkaWZmZXJlbnQgYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW5jZSBpbiBjb250ZXh0LgorCisgICA8cD5Gb3IgcmVmZXJlbmNlLCB3ZSByZXBlYXQgdHdvIGxpbmVzIGZyb20gdGhlIGVudHJ5IGZvciB0aGUgZnVuY3Rpb24KKzxjb2RlPm1haW48L2NvZGU+LCB0aGUgcHJpbWFyeSBsaW5lIGFuZCBhIGxpbmUgZm9yIGEgc3Vicm91dGluZSwgdG9nZXRoZXIKK3dpdGggdGhlIGhlYWRpbmcgbGluZSB0aGF0IHNob3dzIHRoZSBuYW1lcyBvZiB0aGUgZmllbGRzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgaW5kZXggICUgdGltZSAgICBzZWxmICBjaGlsZHJlbiBjYWxsZWQgICAgIG5hbWUKKyAgICAgLi4uCisgICAgIFsyXSAgICAxMDAuMCAgICAwLjAwICAgIDAuMDUgICAgICAgMSAgICAgICAgIG1haW4gWzJdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDUgICAgICAgMS8xICAgICAgICAgICByZXBvcnQgWzNdCis8L3ByZT4KKyAgIDxwPkhlcmUgYXJlIHRoZSBtZWFuaW5ncyBvZiB0aGUgZmllbGRzIGluIHRoZSBzdWJyb3V0aW5lLWxpbmUgZm9yIDxjb2RlPm1haW48L2NvZGU+CitjYWxsaW5nIDxjb2RlPnJlcG9ydDwvY29kZT46CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnNlbGY8L2NvZGU+PGRkPkFuIGVzdGltYXRlIG9mIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCBkaXJlY3RseSB3aXRoaW4gPGNvZGU+cmVwb3J0PC9jb2RlPgord2hlbiA8Y29kZT5yZXBvcnQ8L2NvZGU+IHdhcyBjYWxsZWQgZnJvbSA8Y29kZT5tYWluPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNoaWxkcmVuPC9jb2RlPjxkZD5BbiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gc3Vicm91dGluZXMgb2YgPGNvZGU+cmVwb3J0PC9jb2RlPgord2hlbiA8Y29kZT5yZXBvcnQ8L2NvZGU+IHdhcyBjYWxsZWQgZnJvbSA8Y29kZT5tYWluPC9jb2RlPi4KKworICAgICA8cD5UaGUgc3VtIG9mIHRoZSA8Y29kZT5zZWxmPC9jb2RlPiBhbmQgPGNvZGU+Y2hpbGRyZW48L2NvZGU+IGZpZWxkcyBpcyBhbiBlc3RpbWF0ZQorb2YgdGhlIHRvdGFsIHRpbWUgc3BlbnQgaW4gY2FsbHMgdG8gPGNvZGU+cmVwb3J0PC9jb2RlPiBmcm9tIDxjb2RlPm1haW48L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2FsbGVkPC9jb2RlPjxkZD5Ud28gbnVtYmVycywgdGhlIG51bWJlciBvZiBjYWxscyB0byA8Y29kZT5yZXBvcnQ8L2NvZGU+IGZyb20gPGNvZGU+bWFpbjwvY29kZT4KK2ZvbGxvd2VkIGJ5IHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9uLXJlY3Vyc2l2ZSBjYWxscyB0byA8Y29kZT5yZXBvcnQ8L2NvZGU+LiAKK1RoaXMgcmF0aW8gaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IG11Y2ggb2YgPGNvZGU+cmVwb3J0PC9jb2RlPidzIDxjb2RlPnNlbGY8L2NvZGU+CithbmQgPGNvZGU+Y2hpbGRyZW48L2NvZGU+IHRpbWUgZ2V0cyBjcmVkaXRlZCB0byA8Y29kZT5tYWluPC9jb2RlPi4gCitTZWUgPGEgaHJlZj0iQXNzdW1wdGlvbnMuaHRtbCNBc3N1bXB0aW9ucyI+RXN0aW1hdGluZyA8Y29kZT5jaGlsZHJlbjwvY29kZT4gVGltZXM8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+bmFtZTwvY29kZT48ZGQ+VGhlIG5hbWUgb2YgdGhlIHN1YnJvdXRpbmUgb2YgPGNvZGU+bWFpbjwvY29kZT4gdG8gd2hpY2ggdGhpcyBsaW5lIGFwcGxpZXMsCitmb2xsb3dlZCBieSB0aGUgc3Vicm91dGluZSdzIGluZGV4IG51bWJlci4KKworICAgICA8cD5JZiB0aGUgY2FsbGVyIGlzIHBhcnQgb2YgYSByZWN1cnNpb24gY3ljbGUsIHRoZSBjeWNsZSBudW1iZXIgaXMKK3ByaW50ZWQgYmV0d2VlbiB0aGUgbmFtZSBhbmQgdGhlIGluZGV4IG51bWJlci4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9TeW1zcGVjcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvU3ltc3BlY3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjExMDE1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2dwcm9mLmh0bWwvU3ltc3BlY3MuaHRtbApAQCAtMCwwICsxLDk0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TeW1zcGVjcyAtIEdOVSBncHJvZjwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR05VIGdwcm9mIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIiB0aXRsZT0iSW52b2tpbmciPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJEZXByZWNhdGVkLU9wdGlvbnMuaHRtbCNEZXByZWNhdGVkLU9wdGlvbnMiIHRpdGxlPSJEZXByZWNhdGVkIE9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBncHJvZiBwcm9maWxlciBvZiB0aGUgR05VIHN5c3RlbS4KKworQ29weXJpZ2h0IChDKSAxOTg4LCAxOTkyLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLAorMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltc3BlY3MiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJEZXByZWNhdGVkLU9wdGlvbnMuaHRtbCNEZXByZWNhdGVkLU9wdGlvbnMiPkRlcHJlY2F0ZWQgT3B0aW9uczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9raW5nLmh0bWwjSW52b2tpbmciPkludm9raW5nPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC41IFN5bXNwZWNzPC9oMz4KKworPHA+TWFueSBvZiB0aGUgb3V0cHV0IG9wdGlvbnMgYWxsb3cgZnVuY3Rpb25zIHRvIGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkCit1c2luZyA8ZGZuPnN5bXNwZWNzPC9kZm4+IChzeW1ib2wgc3BlY2lmaWNhdGlvbnMpLCB3aGljaCBvYnNlcnZlIHRoZQorZm9sbG93aW5nIHN5bnRheDoKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgIGZpbGVuYW1lX2NvbnRhaW5pbmdfYV9kb3QKKyAgICAgfCBmdW5jbmFtZV9ub3RfY29udGFpbmluZ19hX2RvdAorICAgICB8IGxpbmVudW1iZXIKKyAgICAgfCAoIFsgYW55X2ZpbGVuYW1lIF0gYDonICggYW55X2Z1bmNuYW1lIHwgbGluZW51bWJlciApICkKKzwvcHJlPgorICAgPHA+SGVyZSBhcmUgc29tZSBzYW1wbGUgc3ltc3BlY3M6CisKKyAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWFpbi5jPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlNlbGVjdHMgZXZlcnl0aGluZyBpbiBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5tYWluLmM8L3NwYW4+PC9zYW1wPiZtZGFzaDt0aGUKK2RvdCBpbiB0aGUgc3RyaW5nIHRlbGxzIDxjb2RlPmdwcm9mPC9jb2RlPiB0byBpbnRlcnByZXQKK3RoZSBzdHJpbmcgYXMgYSBmaWxlbmFtZSwgcmF0aGVyIHRoYW4gYXMKK2EgZnVuY3Rpb24gbmFtZS4gIFRvIHNlbGVjdCBhIGZpbGUgd2hvc2UKK25hbWUgZG9lcyBub3QgY29udGFpbiBhIGRvdCwgYSB0cmFpbGluZyBjb2xvbgorc2hvdWxkIGJlIHNwZWNpZmllZC4gIEZvciBleGFtcGxlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9kZDo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMKK2ludGVycHJldGVkIGFzIHRoZSBmaWxlIG5hbWVkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5vZGQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWFpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TZWxlY3RzIGFsbCBmdW5jdGlvbnMgbmFtZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tYWluPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPk5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIG5hbWUKK2JlY2F1c2Ugc29tZSBvZiB0aGUgZGVmaW5pdGlvbnMgbWF5IGJlIGxvY2FsIChpLmUuLCBzdGF0aWMpLiAgVW5sZXNzIGEKK2Z1bmN0aW9uIG5hbWUgaXMgdW5pcXVlIGluIGEgcHJvZ3JhbSwgeW91IG11c3QgdXNlIHRoZSBjb2xvbiBub3RhdGlvbgorZXhwbGFpbmVkIGJlbG93IHRvIHNwZWNpZnkgYSBmdW5jdGlvbiBmcm9tIGEgc3BlY2lmaWMgc291cmNlIGZpbGUuCisKKyAgICAgPHA+U29tZXRpbWVzLCBmdW5jdGlvbiBuYW1lcyBjb250YWluIGRvdHMuICBJbiBzdWNoIGNhc2VzLCBpdCBpcyBuZWNlc3NhcnkKK3RvIGFkZCBhIGxlYWRpbmcgY29sb24gdG8gdGhlIG5hbWUuICBGb3IgZXhhbXBsZSwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46Lm11bDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWxlY3RzCitmdW5jdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5tdWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+SW4gc29tZSBvYmplY3QgZmlsZSBmb3JtYXRzLCBzeW1ib2xzIGhhdmUgYSBsZWFkaW5nIHVuZGVyc2NvcmUuIAorPGNvZGU+Z3Byb2Y8L2NvZGU+IHdpbGwgbm9ybWFsbHkgbm90IHByaW50IHRoZXNlIHVuZGVyc2NvcmVzLiAgV2hlbiB5b3UgbmFtZSBhCitzeW1ib2wgaW4gYSBzeW1zcGVjLCB5b3Ugc2hvdWxkIHR5cGUgaXQgZXhhY3RseSBhcyA8Y29kZT5ncHJvZjwvY29kZT4gcHJpbnRzCitpdCBpbiBpdHMgb3V0cHV0LiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjb21waWxlciBwcm9kdWNlcyBhIHN5bWJvbAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fbWFpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmcm9tIHlvdXIgPGNvZGU+bWFpbjwvY29kZT4gZnVuY3Rpb24sIDxjb2RlPmdwcm9mPC9jb2RlPiBzdGlsbCBwcmludHMKK2l0IGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWFpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBpdHMgb3V0cHV0LCBzbyB5b3Ugc2hvdWxkIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1haW48L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4KK3N5bXNwZWNzLgorCisgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tYWluLmM6bWFpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TZWxlY3RzIGZ1bmN0aW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWFpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5tYWluLmM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWFpbi5jOjEzNDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TZWxlY3RzIGxpbmUgMTM0IGluIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm1haW4uYzwvc3Bhbj48L3NhbXA+LiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9ncHJvZi5odG1sL2luZGV4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzM2QwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvZ3Byb2YuaHRtbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTMxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5HTlUgZ3Byb2Y8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdOVSBncHJvZiI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iI1RvcCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIGdwcm9mIHByb2ZpbGVyIG9mIHRoZSBHTlUgc3lzdGVtLgorCitDb3B5cmlnaHQgKEMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkICJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiLgorCistLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMSBjbGFzcz0ic2V0dGl0bGUiPkdOVSBncHJvZjwvaDE+CisgICA8ZGl2IGNsYXNzPSJjb250ZW50cyI+Cis8aDI+VGFibGUgb2YgQ29udGVudHM8L2gyPgorPHVsPgorPGxpPjxhIG5hbWU9InRvY19Ub3AiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Qcm9maWxpbmcgYSBQcm9ncmFtOiBXaGVyZSBEb2VzIEl0IFNwZW5kIEl0cyBUaW1lPzwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfSW50cm9kdWN0aW9uIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPjEgSW50cm9kdWN0aW9uIHRvIFByb2ZpbGluZzwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfQ29tcGlsaW5nIiBocmVmPSJDb21waWxpbmcuaHRtbCNDb21waWxpbmciPjIgQ29tcGlsaW5nIGEgUHJvZ3JhbSBmb3IgUHJvZmlsaW5nPC9hPgorPGxpPjxhIG5hbWU9InRvY19FeGVjdXRpbmciIGhyZWY9IkV4ZWN1dGluZy5odG1sI0V4ZWN1dGluZyI+MyBFeGVjdXRpbmcgdGhlIFByb2dyYW08L2E+Cis8bGk+PGEgbmFtZT0idG9jX0ludm9raW5nIiBocmVmPSJJbnZva2luZy5odG1sI0ludm9raW5nIj40IDxjb2RlPmdwcm9mPC9jb2RlPiBDb21tYW5kIFN1bW1hcnk8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LU9wdGlvbnMuaHRtbCNPdXRwdXQtT3B0aW9ucyI+NC4xIE91dHB1dCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IkFuYWx5c2lzLU9wdGlvbnMuaHRtbCNBbmFseXNpcy1PcHRpb25zIj40LjIgQW5hbHlzaXMgT3B0aW9uczwvYT4KKzxsaT48YSBocmVmPSJNaXNjZWxsYW5lb3VzLU9wdGlvbnMuaHRtbCNNaXNjZWxsYW5lb3VzLU9wdGlvbnMiPjQuMyBNaXNjZWxsYW5lb3VzIE9wdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iRGVwcmVjYXRlZC1PcHRpb25zLmh0bWwjRGVwcmVjYXRlZC1PcHRpb25zIj40LjQgRGVwcmVjYXRlZCBPcHRpb25zPC9hPgorPGxpPjxhIGhyZWY9IlN5bXNwZWNzLmh0bWwjU3ltc3BlY3MiPjQuNSBTeW1zcGVjczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfT3V0cHV0IiBocmVmPSJPdXRwdXQuaHRtbCNPdXRwdXQiPjUgSW50ZXJwcmV0aW5nIDxjb2RlPmdwcm9mPC9jb2RlPidzIE91dHB1dDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJGbGF0LVByb2ZpbGUuaHRtbCNGbGF0LVByb2ZpbGUiPjUuMSBUaGUgRmxhdCBQcm9maWxlPC9hPgorPGxpPjxhIGhyZWY9IkNhbGwtR3JhcGguaHRtbCNDYWxsLUdyYXBoIj41LjIgVGhlIENhbGwgR3JhcGg8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iUHJpbWFyeS5odG1sI1ByaW1hcnkiPjUuMi4xIFRoZSBQcmltYXJ5IExpbmU8L2E+Cis8bGk+PGEgaHJlZj0iQ2FsbGVycy5odG1sI0NhbGxlcnMiPjUuMi4yIExpbmVzIGZvciBhIEZ1bmN0aW9uJ3MgQ2FsbGVyczwvYT4KKzxsaT48YSBocmVmPSJTdWJyb3V0aW5lcy5odG1sI1N1YnJvdXRpbmVzIj41LjIuMyBMaW5lcyBmb3IgYSBGdW5jdGlvbidzIFN1YnJvdXRpbmVzPC9hPgorPGxpPjxhIGhyZWY9IkN5Y2xlcy5odG1sI0N5Y2xlcyI+NS4yLjQgSG93IE11dHVhbGx5IFJlY3Vyc2l2ZSBGdW5jdGlvbnMgQXJlIERlc2NyaWJlZDwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJMaW5lXzAwMmRieV8wMDJkbGluZS5odG1sI0xpbmVfMDAyZGJ5XzAwMmRsaW5lIj41LjMgTGluZS1ieS1saW5lIFByb2ZpbGluZzwvYT4KKzxsaT48YSBocmVmPSJBbm5vdGF0ZWQtU291cmNlLmh0bWwjQW5ub3RhdGVkLVNvdXJjZSI+NS40IFRoZSBBbm5vdGF0ZWQgU291cmNlIExpc3Rpbmc8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0luYWNjdXJhY3kiIGhyZWY9IkluYWNjdXJhY3kuaHRtbCNJbmFjY3VyYWN5Ij42IEluYWNjdXJhY3kgb2YgPGNvZGU+Z3Byb2Y8L2NvZGU+IE91dHB1dDwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJTYW1wbGluZy1FcnJvci5odG1sI1NhbXBsaW5nLUVycm9yIj42LjEgU3RhdGlzdGljYWwgU2FtcGxpbmcgRXJyb3I8L2E+Cis8bGk+PGEgaHJlZj0iQXNzdW1wdGlvbnMuaHRtbCNBc3N1bXB0aW9ucyI+Ni4yIEVzdGltYXRpbmcgPGNvZGU+Y2hpbGRyZW48L2NvZGU+IFRpbWVzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19Ib3ctZG8tSV8wMDNmIiBocmVmPSJIb3ctZG8tSV8wMDNmLmh0bWwjSG93LWRvLUlfMDAzZiI+NyBBbnN3ZXJzIHRvIENvbW1vbiBRdWVzdGlvbnM8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0luY29tcGF0aWJpbGl0aWVzIiBocmVmPSJJbmNvbXBhdGliaWxpdGllcy5odG1sI0luY29tcGF0aWJpbGl0aWVzIj44IEluY29tcGF0aWJpbGl0aWVzIHdpdGggVW5peCA8Y29kZT5ncHJvZjwvY29kZT48L2E+Cis8bGk+PGEgbmFtZT0idG9jX0RldGFpbHMiIGhyZWY9IkRldGFpbHMuaHRtbCNEZXRhaWxzIj45IERldGFpbHMgb2YgUHJvZmlsaW5nPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkltcGxlbWVudGF0aW9uLmh0bWwjSW1wbGVtZW50YXRpb24iPjkuMSBJbXBsZW1lbnRhdGlvbiBvZiBQcm9maWxpbmc8L2E+Cis8bGk+PGEgaHJlZj0iRmlsZS1Gb3JtYXQuaHRtbCNGaWxlLUZvcm1hdCI+OS4yIFByb2ZpbGluZyBEYXRhIEZpbGUgRm9ybWF0PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkZpbGUtRm9ybWF0Lmh0bWwjRmlsZS1Gb3JtYXQiPjkuMi4xIEhpc3RvZ3JhbSBSZWNvcmRzPC9hPgorPGxpPjxhIGhyZWY9IkZpbGUtRm9ybWF0Lmh0bWwjRmlsZS1Gb3JtYXQiPjkuMi4yIENhbGwtR3JhcGggUmVjb3JkczwvYT4KKzxsaT48YSBocmVmPSJGaWxlLUZvcm1hdC5odG1sI0ZpbGUtRm9ybWF0Ij45LjIuMyBCYXNpYy1CbG9jayBFeGVjdXRpb24gQ291bnQgUmVjb3JkczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJJbnRlcm5hbHMuaHRtbCNJbnRlcm5hbHMiPjkuMyA8Y29kZT5ncHJvZjwvY29kZT4ncyBJbnRlcm5hbCBPcGVyYXRpb248L2E+Cis8bGk+PGEgaHJlZj0iRGVidWdnaW5nLmh0bWwjRGVidWdnaW5nIj45LjQgRGVidWdnaW5nIDxjb2RlPmdwcm9mPC9jb2RlPjwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkFwcGVuZGl4IEEgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9hPgorPC9saT48L3VsPgorPC9kaXY+CisKKworCis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRvcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwjZGlyIj4oZGlyKTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPlByb2ZpbGluZyBhIFByb2dyYW06IFdoZXJlIERvZXMgSXQgU3BlbmQgSXRzIFRpbWU/PC9oMj4KKworPHA+VGhpcyBtYW51YWwgZGVzY3JpYmVzIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gcHJvZmlsZXIsIDxjb2RlPmdwcm9mPC9jb2RlPiwgYW5kIGhvdyB5b3UKK2NhbiB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRzIG9mIGEgcHJvZ3JhbSBhcmUgdGFraW5nIG1vc3Qgb2YgdGhlCitleGVjdXRpb24gdGltZS4gIFdlIGFzc3VtZSB0aGF0IHlvdSBrbm93IGhvdyB0byB3cml0ZSwgY29tcGlsZSwgYW5kCitleGVjdXRlIHByb2dyYW1zLiAgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmdwcm9mPC9jb2RlPiB3YXMgd3JpdHRlbiBieSBKYXkgRmVubGFzb24uCisKKyAgIDxwPlRoaXMgbWFudWFsIGlzIGZvciA8Y29kZT5ncHJvZjwvY29kZT4KKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworICAgPHA+VGhpcyBkb2N1bWVudCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlCitEb2N1bWVudGF0aW9uIExpY2Vuc2UgdmVyc2lvbiAxLjMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQKK2luIHRoZSBzZWN0aW9uIGVudGl0bGVkICZsZHF1bztHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UmcmRxdW87LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iSW50cm9kdWN0aW9uLmh0bWwjSW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+OiAgICAgICAgIFdoYXQgcHJvZmlsaW5nIG1lYW5zLCBhbmQgd2h5IGl0IGlzIHVzZWZ1bC4KKworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iQ29tcGlsaW5nLmh0bWwjQ29tcGlsaW5nIj5Db21waWxpbmc8L2E+OiAgICAgICAgICAgIEhvdyB0byBjb21waWxlIHlvdXIgcHJvZ3JhbSBmb3IgcHJvZmlsaW5nLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkV4ZWN1dGluZy5odG1sI0V4ZWN1dGluZyI+RXhlY3V0aW5nPC9hPjogICAgICAgICAgICBFeGVjdXRpbmcgeW91ciBwcm9ncmFtIHRvIGdlbmVyYXRlIHByb2ZpbGUgZGF0YQorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iSW52b2tpbmcuaHRtbCNJbnZva2luZyI+SW52b2tpbmc8L2E+OiAgICAgICAgICAgICBIb3cgdG8gcnVuIDxjb2RlPmdwcm9mPC9jb2RlPiwgYW5kIGl0cyBvcHRpb25zCisKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9Ik91dHB1dC5odG1sI091dHB1dCI+T3V0cHV0PC9hPjogICAgICAgICAgICAgICBJbnRlcnByZXRpbmcgPGNvZGU+Z3Byb2Y8L2NvZGU+J3Mgb3V0cHV0CisKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IkluYWNjdXJhY3kuaHRtbCNJbmFjY3VyYWN5Ij5JbmFjY3VyYWN5PC9hPjogICAgICAgICAgIFBvdGVudGlhbCBwcm9ibGVtcyB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJIb3ctZG8tSV8wMDNmLmh0bWwjSG93LWRvLUlfMDAzZiI+SG93IGRvIEk/PC9hPjogICAgICAgICAgICBBbnN3ZXJzIHRvIGNvbW1vbiBxdWVzdGlvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9IkluY29tcGF0aWJpbGl0aWVzLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMiPkluY29tcGF0aWJpbGl0aWVzPC9hPjogICAgKGJldHdlZW4gPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IDxjb2RlPmdwcm9mPC9jb2RlPiBhbmQgVW5peCA8Y29kZT5ncHJvZjwvY29kZT4uKSAKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkRldGFpbHMuaHRtbCNEZXRhaWxzIj5EZXRhaWxzPC9hPjogICAgICAgICAgICAgIERldGFpbHMgb2YgaG93IHByb2ZpbGluZyBpcyBkb25lCis8bGk+PGEgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+OiAgIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQVJNLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9BUk0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2QwZjIzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQVJNLmh0bWwKQEAgLTAsMCArMSwyMDkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkFSTSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTTY4SEMxMV8wMDJmNjhIQzEyLmh0bWwjTTY4SEMxMV8wMDJmNjhIQzEyIiB0aXRsZT0iTTY4SEMxMS82OEhDMTIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJIUFBBLUVMRjMyLmh0bWwjSFBQQS1FTEYzMiIgdGl0bGU9IkhQUEEgRUxGMzIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFSTSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJIUFBBLUVMRjMyLmh0bWwjSFBQQS1FTEYzMiI+SFBQQSBFTEYzMjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik02OEhDMTFfMDAyZjY4SEMxMi5odG1sI002OEhDMTFfMDAyZjY4SEMxMiI+TTY4SEMxMS82OEhDMTI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50Ij5NYWNoaW5lIERlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgdGhlIEFSTSBmYW1pbHk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1BUk0taW50ZXJ3b3JraW5nLXN1cHBvcnQtNTg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHN1cHBvcnRfMDAyZG9sZF8wMDJkY29kZS01ODUiPjwvYT5Gb3IgdGhlIEFSTSwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gd2lsbCBnZW5lcmF0ZSBjb2RlIHN0dWJzIHRvIGFsbG93IGZ1bmN0aW9ucyBjYWxscworYmV0d2VlbiBBUk0gYW5kIFRodW1iIGNvZGUuICBUaGVzZSBzdHVicyBvbmx5IHdvcmsgd2l0aCBjb2RlIHRoYXQgaGFzCitiZWVuIGNvbXBpbGVkIGFuZCBhc3NlbWJsZWQgd2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXRodW1iLWludGVyd29yazwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kCitsaW5lIG9wdGlvbi4gIElmIGl0IGlzIG5lY2Vzc2FyeSB0byBsaW5rIHdpdGggb2xkIEFSTSBvYmplY3QgZmlsZXMgb3IKK2xpYnJhcmllcywgd2hpY2ggaGF2ZSBub3QgYmVlbiBjb21waWxlZCB3aXRoIHRoZSAtbXRodW1iLWludGVyd29yaworb3B0aW9uIHRoZW4gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1zdXBwb3J0LW9sZC1jb2RlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBzd2l0Y2ggc2hvdWxkIGJlCitnaXZlbiB0byB0aGUgbGlua2VyLiAgVGhpcyB3aWxsIG1ha2UgaXQgZ2VuZXJhdGUgbGFyZ2VyIHN0dWIgZnVuY3Rpb25zCit3aGljaCB3aWxsIHdvcmsgd2l0aCBub24taW50ZXJ3b3JraW5nIGF3YXJlIEFSTSBjb2RlLiAgTm90ZSwgaG93ZXZlciwKK3RoZSBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBnZW5lcmF0aW5nIHN0dWJzIGZvciBmdW5jdGlvbiBjYWxscyB0bworbm9uLWludGVyd29ya2luZyBhd2FyZSBUaHVtYiBjb2RlLgorCisgICA8cD48YSBuYW1lPSJpbmRleC10aHVtYi1lbnRyeS1wb2ludC01ODYiPjwvYT48YSBuYW1lPSJpbmRleC1lbnRyeS1wb2ludF8wMDJjLXRodW1iLTU4NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR0aHVtYl8wMDJkZW50cnlfMDAzZF8wMDQwdmFyXzAwN2JlbnRyeV8wMDdkLTU4OCI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tdGh1bWItZW50cnk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3dpdGNoIGlzIGEgZHVwbGljYXRlIG9mIHRoZSBnZW5lcmljCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZW50cnk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3dpdGNoLCBpbiB0aGF0IGl0IHNldHMgdGhlIHByb2dyYW0ncyBzdGFydGluZyBhZGRyZXNzLiAKK0J1dCBpdCBhbHNvIHNldHMgdGhlIGJvdHRvbSBiaXQgb2YgdGhlIGFkZHJlc3MsIHNvIHRoYXQgaXQgY2FuIGJlCiticmFuY2hlZCB0byB1c2luZyBhIEJYIGluc3RydWN0aW9uLCBhbmQgdGhlIHByb2dyYW0gd2lsbCBzdGFydAorZXhlY3V0aW5nIGluIFRodW1iIG1vZGUgc3RyYWlnaHQgYXdheS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtUEUtaW1wb3J0LXRhYmxlLXByZWZpeGluZy01ODkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkdXNlXzAwMmRudWxfMDAyZHByZWZpeGVkXzAwMmRpbXBvcnRfMDAyZHRhYmxlcy01OTAiPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXVzZS1udWwtcHJlZml4ZWQtaW1wb3J0LXRhYmxlczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzd2l0Y2ggaXMgc3BlY2lmeWluZywgdGhhdAordGhlIGltcG9ydCB0YWJsZXMgaWRhdGE0IGFuZCBpZGF0YTUgaGF2ZSB0byBiZSBnZW5lcmF0ZWQgd2l0aCBhIHplcm8KK2VsZW1lbXQgcHJlZml4IGZvciBpbXBvcnQgbGlicmFyaWVzLiBUaGlzIGlzIHRoZSBvbGQgc3R5bGUgdG8gZ2VuZXJhdGUKK2ltcG9ydCB0YWJsZXMuIEJ5IGRlZmF1bHQgdGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtQkU4LTU5MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRiZTgtNTkyIj48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1iZTg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3dpdGNoIGluc3RydWN0cyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0byBnZW5lcmF0ZSBCRTggZm9ybWF0CitleGVjdXRhYmxlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgd2hlbiBsaW5raW5nIGJpZy1lbmRpYW4gb2JqZWN0cy4gCitUaGUgcmVzdWx0aW5nIGltYWdlIHdpbGwgY29udGFpbiBiaWctZW5kaWFuIGRhdGEgYW5kIGxpdHRsZS1lbmRpYW4gY29kZS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtVEFSR0VUMS01OTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkdGFyZ2V0MV8wMDJkcmVsLTU5NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR0YXJnZXQxXzAwMmRhYnMtNTk1Ij48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9BUk1fVEFSR0VUMTwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWxvY2F0aW9uIGlzIHR5cGljYWxseSB1c2VkIGZvciBlbnRyaWVzIGluIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaW5pdF9hcnJheTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLiAgSXQgaXMgaW50ZXJwcmV0ZWQgYXMgZWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9BUk1fUkVMMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9BUk1fQUJTMzI8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0LiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS10YXJnZXQxLXJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOworYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS10YXJnZXQxLWFiczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzd2l0Y2hlcyBvdmVycmlkZSB0aGUgZGVmYXVsdC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtVEFSR0VUMi01OTYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkdGFyZ2V0Ml8wMDNkXzAwNDB2YXJfMDA3YnR5cGVfMDA3ZC01OTciPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXRhcmdldDI9dHlwZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzd2l0Y2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gb2YgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQVJNX1RBUkdFVDI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVsb2NhdGlvbi4gIFZhbGlkIHZhbHVlcyBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50eXBlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCB0aGVpcgorbWVhbmluZ3MsIGFuZCB0YXJnZXQgZGVmYXVsdHMgYXJlIGFzIGZvbGxvd3M6CisgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQVJNX1JFTDMyPC9zcGFuPjwvc2FtcD4mcnNxdW87IChhcm0qLSotZWxmLCBhcm0qLSotZWFiaSkKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hYnM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5SX0FSTV9BQlMzMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyAoYXJtKi0qLXN5bWJpYW5lbGYpCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z290LXJlbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQVJNX0dPVF9QUkVMPC9zcGFuPjwvc2FtcD4mcnNxdW87IChhcm0qLSotbGludXgsIGFybSotKi0qYnNkKQorPC9kbD4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtRklYXzAwNWZWNEJYLTU5OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRmaXhfMDAyZHY0YngtNTk5Ij48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ul9BUk1fVjRCWDwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZWxvY2F0aW9uIChkZWZpbmVkIGJ5IHRoZSBBUk0gQUFFTEYKK3NwZWNpZmljYXRpb24pIGVuYWJsZXMgb2JqZWN0cyBjb21waWxlZCBmb3IgdGhlIEFSTXY0IGFyY2hpdGVjdHVyZSB0byBiZQoraW50ZXJ3b3JraW5nLXNhZmUgd2hlbiBsaW5rZWQgd2l0aCBvdGhlciBvYmplY3RzIGNvbXBpbGVkIGZvciBBUk12NHQsIGJ1dAorYWxzbyBhbGxvd3MgcHVyZSBBUk12NCBiaW5hcmllcyB0byBiZSBidWlsdCBmcm9tIHRoZSBzYW1lIEFSTXY0IG9iamVjdHMuCisKKyAgIDxwPkluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHN3aXRjaCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZpeC12NGJ4PC9zcGFuPjwvc2FtcD4gbXVzdCBiZSBwYXNzZWQgdG8gdGhlCitsaW5rZXIsIHdoaWNoIGNhdXNlcyB2NHQgPGNvZGU+Qlggck08L2NvZGU+IGluc3RydWN0aW9ucyB0byBiZSByZXdyaXR0ZW4gYXMKKzxjb2RlPk1PViBQQyxyTTwvY29kZT4sIHNpbmNlIHY0IHByb2Nlc3NvcnMgZG8gbm90IGhhdmUgYSA8Y29kZT5CWDwvY29kZT4gaW5zdHJ1Y3Rpb24uCisKKyAgIDxwPkluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIHN3aXRjaCBzaG91bGQgbm90IGJlIHVzZWQsIGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJfQVJNX1Y0Qlg8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3JlbG9jYXRpb25zIGFyZSBpZ25vcmVkLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1GSVhfMDA1ZlY0QlhfMDA1ZklOVEVSV09SS0lORy02MDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZml4XzAwMmR2NGJ4XzAwMmRpbnRlcndvcmtpbmctNjAxIj48L2E+UmVwbGFjZSA8Y29kZT5CWCByTTwvY29kZT4gaW5zdHJ1Y3Rpb25zIGlkZW50aWZpZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5SX0FSTV9WNEJYPC9zcGFuPjwvc2FtcD4mcnNxdW87CityZWxvY2F0aW9ucyB3aXRoIGEgYnJhbmNoIHRvIHRoZSBmb2xsb3dpbmcgdmVuZWVyOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgVFNUIHJNLCAjMQorICAgICBNT1ZFUSBQQywgck0KKyAgICAgQlggUm4KKzwvcHJlPgorICAgPHA+VGhpcyBhbGxvd3MgZ2VuZXJhdGlvbiBvZiBsaWJyYXJpZXMvYXBwbGljYXRpb25zIHRoYXQgd29yayBvbiBBUk12NCBjb3JlcworYW5kIGFyZSBzdGlsbCBpbnRlcndvcmtpbmcgc2FmZS4gIE5vdGUgdGhhdCB0aGUgYWJvdmUgdmVuZWVyIGNsb2JiZXJzIHRoZQorY29uZGl0aW9uIGZsYWdzLCBzbyBtYXkgY2F1c2UgaW5jb3JyZWN0IHByb2dybSBiZWhhdmlvciBpbiByYXJlIGNhc2VzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1VU0VfMDA1ZkJMWC02MDIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkdXNlXzAwMmRibHgtNjAzIj48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS11c2UtYmx4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHN3aXRjaCBlbmFibGVzIHRoZSBsaW5rZXIgdG8gdXNlIEFSTS9UaHVtYgorQkxYIGluc3RydWN0aW9ucyAoYXZhaWxhYmxlIG9uIEFSTXY1dCBhbmQgYWJvdmUpIGluIHZhcmlvdXMKK3NpdHVhdGlvbnMuIEN1cnJlbnRseSBpdCBpcyB1c2VkIHRvIHBlcmZvcm0gY2FsbHMgdmlhIHRoZSBQTFQgZnJvbSBUaHVtYgorY29kZSB1c2luZyBCTFggcmF0aGVyIHRoYW4gdXNpbmcgQlggYW5kIGEgbW9kZS1zd2l0Y2hpbmcgc3R1YiBiZWZvcmUKK2VhY2ggUExUIGVudHJ5LiBUaGlzIHNob3VsZCBsZWFkIHRvIHN1Y2ggY2FsbHMgZXhlY3V0aW5nIHNsaWdodGx5IGZhc3Rlci4KKworICAgPHA+VGhpcyBvcHRpb24gaXMgZW5hYmxlZCBpbXBsaWNpdGx5IGZvciBTeW1iaWFuT1MsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KK3NwZWNpZnkgaXQgaWYgeW91IGFyZSB1c2luZyB0aGF0IHRhcmdldC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtVkZQMTFfMDA1ZkRFTk9STV8wMDVmRklYLTYwNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR2ZnAxMV8wMDJkZGVub3JtXzAwMmRmaXgtNjA1Ij48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS12ZnAxMS1kZW5vcm0tZml4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHN3aXRjaCBlbmFibGVzIGEgbGluay10aW1lIHdvcmthcm91bmQgZm9yIGEKK2J1ZyBpbiBjZXJ0YWluIFZGUDExIGNvcHJvY2Vzc29yIGhhcmR3YXJlLCB3aGljaCBzb21ldGltZXMgYWxsb3dzCitpbnN0cnVjdGlvbnMgd2l0aCBkZW5vcm0gb3BlcmFuZHMgKHdoaWNoIG11c3QgYmUgaGFuZGxlZCBieSBzdXBwb3J0IGNvZGUpCit0byBoYXZlIHRob3NlIG9wZXJhbmRzIG92ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgaW5zdHJ1Y3Rpb25zIGJlZm9yZQordGhlIHN1cHBvcnQgY29kZSBjYW4gcmVhZCB0aGUgaW50ZW5kZWQgdmFsdWVzLgorCisgICA8cD5UaGUgYnVnIG1heSBiZSBhdm9pZGVkIGluIHNjYWxhciBtb2RlIGlmIHlvdSBhbGxvdyBhdCBsZWFzdCBvbmUKK2ludGVydmVuaW5nIGluc3RydWN0aW9uIGJldHdlZW4gYSBWRlAxMSBpbnN0cnVjdGlvbiB3aGljaCB1c2VzIGEgcmVnaXN0ZXIKK2FuZCBhbm90aGVyIGluc3RydWN0aW9uIHdoaWNoIHdyaXRlcyB0byB0aGUgc2FtZSByZWdpc3Rlciwgb3IgYXQgbGVhc3QgdHdvCitpbnRlcnZlbmluZyBpbnN0cnVjdGlvbnMgaWYgdmVjdG9yIG1vZGUgaXMgaW4gdXNlLiBUaGUgYnVnIG9ubHkgYWZmZWN0cworZnVsbC1jb21wbGlhbmNlIGZsb2F0aW5nLXBvaW50IG1vZGU6IHlvdSBkbyBub3QgbmVlZCB0aGlzIHdvcmthcm91bmQgaWYKK3lvdSBhcmUgdXNpbmcgInJ1bmZhc3QiIG1vZGUuIFBsZWFzZSBjb250YWN0IEFSTSBmb3IgZnVydGhlciBkZXRhaWxzLgorCisgICA8cD5JZiB5b3Uga25vdyB5b3UgYXJlIHVzaW5nIGJ1Z2d5IFZGUDExIGhhcmR3YXJlLCB5b3UgY2FuCitlbmFibGUgdGhpcyB3b3JrYXJvdW5kIGJ5IHNwZWNpZnlpbmcgdGhlIGxpbmtlciBvcHRpb24KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS12ZnAtZGVub3JtLWZpeD1zY2FsYXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaWYgeW91IGFyZSB1c2luZyB0aGUgVkZQMTEgc2NhbGFyCittb2RlIG9ubHksIG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS12ZnAtZGVub3JtLWZpeD12ZWN0b3I8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaWYgeW91IGFyZSB1c2luZwordmVjdG9yIG1vZGUgKHRoZSBsYXR0ZXIgYWxzbyB3b3JrcyBmb3Igc2NhbGFyIGNvZGUpLiBUaGUgZGVmYXVsdCBpcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXZmcC1kZW5vcm0tZml4PW5vbmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPklmIHRoZSB3b3JrYXJvdW5kIGlzIGVuYWJsZWQsIGluc3RydWN0aW9ucyBhcmUgc2Nhbm5lZCBmb3IKK3BvdGVudGlhbGx5LXRyb3VibGVzb21lIHNlcXVlbmNlcywgYW5kIGEgdmVuZWVyIGlzIGNyZWF0ZWQgZm9yIGVhY2gKK3N1Y2ggc2VxdWVuY2Ugd2hpY2ggbWF5IHRyaWdnZXIgdGhlIGVycmF0dW0uIFRoZSB2ZW5lZXIgY29uc2lzdHMgb2YgdGhlCitmaXJzdCBpbnN0cnVjdGlvbiBvZiB0aGUgc2VxdWVuY2UgYW5kIGEgYnJhbmNoIGJhY2sgdG8gdGhlIHN1YnNlcXVlbnQKK2luc3RydWN0aW9uLiBUaGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gaXMgdGhlbiByZXBsYWNlZCB3aXRoIGEgYnJhbmNoIHRvCit0aGUgdmVuZWVyLiBUaGUgZXh0cmEgY3ljbGVzIHJlcXVpcmVkIHRvIGNhbGwgYW5kIHJldHVybiBmcm9tIHRoZSB2ZW5lZXIKK2FyZSBzdWZmaWNpZW50IHRvIGF2b2lkIHRoZSBlcnJhdHVtIGluIGJvdGggdGhlIHNjYWxhciBhbmQgdmVjdG9yIGNhc2VzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1BUk0xMTc2LWVycmF0dW0td29ya2Fyb3VuZC02MDYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZml4XzAwMmRhcm0xMTc2LTYwNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkZml4XzAwMmRhcm0xMTc2LTYwOCI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZml4LWFybTExNzY8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3dpdGNoIGVuYWJsZXMgYSBsaW5rLXRpbWUgd29ya2Fyb3VuZCBmb3IgYW4gZXJyYXR1bQoraW4gY2VydGFpbiBBUk0xMTc2IHByb2Nlc3NvcnMuICBUaGUgd29ya2Fyb3VuZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgeW91CithcmUgdGFyZ2V0dGluZyBBUk0gdjYgKGV4Y2x1ZGluZyBBUk0gdjZUMikgb3IgZWFybGllci4gIEl0IGNhbiBiZSBkaXNhYmxlZAordW5jb25kaXRpb25hbGx5IGJ5IHNwZWNpZnlpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLWZpeC1hcm0xMTc2PC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5GdXJ0aGVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgJmxkcXVvO0FSTTExNzZKWi1TIGFuZCBBUk0xMTc2SlpGLVMKK1Byb2dyYW1tZXIgQWR2aWNlIE5vdGljZSZyZHF1bzsgYXZhaWxhYmxlIG9uIHRoZSBBUk0gZG9jdW1lbnRhaW9uIHdlYnNpdGUgYXQ6CitodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tLy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTk9fMDA1ZkVOVU1fMDA1ZlNJWkVfMDA1ZldBUk5JTkctNjA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRlbnVtXzAwMmRzaXplXzAwMmR3YXJuaW5nLTYxMCI+PC9hPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLWVudW0tc2l6ZS13YXJuaW5nPC9zcGFuPjwvc2FtcD4gc3dpdGNoIHByZXZlbnRzIHRoZSBsaW5rZXIgZnJvbQord2FybmluZyB3aGVuIGxpbmtpbmcgb2JqZWN0IGZpbGVzIHRoYXQgc3BlY2lmeSBpbmNvbXBhdGlibGUgRUFCSQorZW51bWVyYXRpb24gc2l6ZSBhdHRyaWJ1dGVzLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhpcyBzd2l0Y2ggZW5hYmxlZCwKK2xpbmtpbmcgb2YgYW4gb2JqZWN0IGZpbGUgdXNpbmcgMzItYml0IGVudW1lcmF0aW9uIHZhbHVlcyB3aXRoIGFub3RoZXIKK3VzaW5nIGVudW1lcmF0aW9uIHZhbHVlcyBmaXR0ZWQgaW50byB0aGUgc21hbGxlc3QgcG9zc2libGUgc3BhY2Ugd2lsbAorbm90IGJlIGRpYWdub3NlZC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTk9fMDA1ZldDSEFSXzAwNWZTSVpFXzAwNWZXQVJOSU5HLTYxMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkd2NoYXJfMDAyZHNpemVfMDAyZHdhcm5pbmctNjEyIj48L2E+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8td2NoYXItc2l6ZS13YXJuaW5nPC9zcGFuPjwvc2FtcD4gc3dpdGNoIHByZXZlbnRzIHRoZSBsaW5rZXIgZnJvbQord2FybmluZyB3aGVuIGxpbmtpbmcgb2JqZWN0IGZpbGVzIHRoYXQgc3BlY2lmeSBpbmNvbXBhdGlibGUgRUFCSQorPGNvZGU+d2NoYXJfdDwvY29kZT4gc2l6ZSBhdHRyaWJ1dGVzLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhpcyBzd2l0Y2ggZW5hYmxlZCwKK2xpbmtpbmcgb2YgYW4gb2JqZWN0IGZpbGUgdXNpbmcgMzItYml0IDxjb2RlPndjaGFyX3Q8L2NvZGU+IHZhbHVlcyB3aXRoIGFub3RoZXIKK3VzaW5nIDE2LWJpdCA8Y29kZT53Y2hhcl90PC9jb2RlPiB2YWx1ZXMgd2lsbCBub3QgYmUgZGlhZ25vc2VkLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1QSUNfMDA1ZlZFTkVFUi02MTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkcGljXzAwMmR2ZW5lZXItNjE0Ij48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1waWMtdmVuZWVyPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN3aXRjaCBtYWtlcyB0aGUgbGlua2VyIHVzZSBQSUMgc2VxdWVuY2VzIGZvcgorQVJNL1RodW1iIGludGVyd29ya2luZyB2ZW5lZXJzLCBldmVuIGlmIHRoZSByZXN0IG9mIHRoZSBiaW5hcnkKK2lzIG5vdCBQSUMuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyBvbiB1Q2xpbnV4IHRhcmdldHMgd2hlcmUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1lbWl0LXJlbG9jczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB1c2VkIHRvIGdlbmVyYXRlIHJlbG9jYXRhYmxlIGJpbmFyaWVzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1TVFVCXzAwNWZHUk9VUF8wMDVmU0laRS02MTUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkc3R1Yl8wMDJkZ3JvdXBfMDAyZHNpemVfMDAzZF8wMDQwdmFyXzAwN2JOXzAwN2QtNjE2Ij48L2E+VGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYW5kIGluc2VydCBzbWFsbCBzZXF1ZW5jZXMgb2YKK2NvZGUgaW50byBhIGxpbmtlZCBBUk0gRUxGIGV4ZWN1dGFibGUgd2hlbmV2ZXIgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvCitwZXJmb3JtIGEgZnVuY3Rpb24gY2FsbCB0byBhIHN5bWJvbCB0aGF0IGlzIHRvbyBmYXIgYXdheS4gIFRoZQorcGxhY2VtZW50IG9mIHRoZXNlIHNlcXVlbmNlcyBvZiBpbnN0cnVjdGlvbnMgLSBjYWxsZWQgc3R1YnMgLSBpcworY29udHJvbGxlZCBieSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0dWItZ3JvdXAtc2l6ZT1OPC9zcGFuPjwvc2FtcD4uIAorVGhlIHBsYWNlbWVudCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhIHBvb3IgY2hvaWNlIGNhbiBjcmVhdGUgYSBuZWVkIGZvcgorZHVwbGljYXRlIHN0dWJzLCBpbmNyZWFzaW5nIHRoZSBjb2RlIHNpencuICBUaGUgbGlua2VyIHdpbGwgdHJ5IHRvCitncm91cCBzdHVicyB0b2dldGhlciBpbiBvcmRlciB0byByZWR1Y2UgaW50ZXJydXB0aW9ucyB0byB0aGUgZmxvdyBvZgorY29kZSwgYnV0IGl0IG5lZWRzIGd1aWRhbmNlIGFzIHRvIGhvdyBiaWcgdGhlc2UgZ3JvdXBzIHNob3VsZCBiZSBhbmQKK3doZXJlIHRoZXkgc2hvdWxkIGJlIHBsYWNlZC4KKworICAgPHA+VGhlIHZhbHVlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlIHBhcmFtZXRlciB0byB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3R1Yi1ncm91cC1zaXplPTwvc3Bhbj48L3NhbXA+IG9wdGlvbiBjb250cm9scyB3aGVyZSB0aGUgc3R1YiBncm91cHMgYXJlCitwbGFjZWQuICBJZiBpdCBpcyBuZWdhdGl2ZSB0aGVuIGFsbCBzdHVicyBhcmUgcGxhY2VkIGFmdGVyIHRoZSBmaXJzdAorYnJhbmNoIHRoYXQgbmVlZHMgdGhlbS4gIElmIGl0IGlzIHBvc2l0aXZlIHRoZW4gdGhlIHN0dWJzIGNhbiBiZQorcGxhY2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGJyYW5jaGVzIHRoYXQgbmVlZCB0aGVtLiAgSWYgdGhlCit2YWx1ZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk48L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgMSAoZWl0aGVyICsxIG9yIC0xKSB0aGVuIHRoZSBsaW5rZXIgd2lsbCBjaG9vc2UKK2V4YWN0bHkgd2hlcmUgdG8gcGxhY2UgZ3JvdXBzIG9mIHN0dWJzLCB1c2luZyBpdHMgYnVpbHQgaW4gaGV1cmlzdGljcy4gCitBIHZhbHVlIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBncmVhdGVyIHRoYW4gMSAob3Igc21hbGxlciB0aGFuIC0xKSB0ZWxscyB0aGUKK2xpbmtlciB0aGF0IGEgc2luZ2xlIGdyb3VwIG9mIHN0dWJzIGNhbiBzZXJ2aWNlIGF0IG1vc3QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5OPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJ5dGVzCitmcm9tIHRoZSBpbnB1dCBzZWN0aW9ucy4KKworICAgPHA+VGhlIGRlZmF1bHQsIGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3R1Yi1ncm91cC1zaXplPTwvc3Bhbj48L3NhbXA+IGlzIG5vdCBzcGVjaWZpZWQsIGlzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk4gPSArMTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+RmFyY2FsbHMgc3R1YnMgaW5zZXJ0aW9uIGlzIGZ1bGx5IHN1cHBvcnRlZCBmb3IgdGhlIEFSTS1FQUJJIHRhcmdldAorb25seSwgYmVjYXVzZSBpdCByZWxpZXMgb24gb2JqZWN0IGZpbGVzIHByb3BlcnRpZXMgbm90IHByZXNlbnQKK290aGVyd2lzZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQXNzaWdubWVudHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0Fzc2lnbm1lbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllOGY2YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0Fzc2lnbm1lbnRzLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QXNzaWdubWVudHMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIiB0aXRsZT0iU2NyaXB0cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNpbXBsZS1Db21tYW5kcy5odG1sI1NpbXBsZS1Db21tYW5kcyIgdGl0bGU9IlNpbXBsZSBDb21tYW5kcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiIHRpdGxlPSJTRUNUSU9OUyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQXNzaWdubWVudHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyI+U0VDVElPTlM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTaW1wbGUtQ29tbWFuZHMuaHRtbCNTaW1wbGUtQ29tbWFuZHMiPlNpbXBsZSBDb21tYW5kczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIj5TY3JpcHRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My41IEFzc2lnbmluZyBWYWx1ZXMgdG8gU3ltYm9sczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFzc2lnbm1lbnQtaW4tc2NyaXB0cy0zOTMiPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtZGVmaW5pdGlvbl8wMDJjLXNjcmlwdHMtMzk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmFyaWFibGVzXzAwMmMtZGVmaW5pbmctMzk1Ij48L2E+WW91IG1heSBhc3NpZ24gYSB2YWx1ZSB0byBhIHN5bWJvbCBpbiBhIGxpbmtlciBzY3JpcHQuICBUaGlzIHdpbGwgZGVmaW5lCit0aGUgc3ltYm9sIGFuZCBwbGFjZSBpdCBpbnRvIHRoZSBzeW1ib2wgdGFibGUgd2l0aCBhIGdsb2JhbCBzY29wZS4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlNpbXBsZS1Bc3NpZ25tZW50cy5odG1sI1NpbXBsZS1Bc3NpZ25tZW50cyI+U2ltcGxlIEFzc2lnbm1lbnRzPC9hPjogCQlTaW1wbGUgQXNzaWdubWVudHMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkhJRERFTi5odG1sI0hJRERFTiI+SElEREVOPC9hPjogCQkJSElEREVOCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJQUk9WSURFLmh0bWwjUFJPVklERSI+UFJPVklERTwvYT46IAkJCVBST1ZJREUKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IlBST1ZJREVfMDA1ZkhJRERFTi5odG1sI1BST1ZJREVfMDA1ZkhJRERFTiI+UFJPVklERV9ISURERU48L2E+OiAJCVBST1ZJREVfSElEREVOCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJTb3VyY2UtQ29kZS1SZWZlcmVuY2UuaHRtbCNTb3VyY2UtQ29kZS1SZWZlcmVuY2UiPlNvdXJjZSBDb2RlIFJlZmVyZW5jZTwvYT46IAlIb3cgdG8gdXNlIGEgbGlua2VyIHNjcmlwdCBkZWZpbmVkIHN5bWJvbCBpbiBzb3VyY2UgY29kZQorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQkZELWluZm9ybWF0aW9uLWxvc3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0JGRC1pbmZvcm1hdGlvbi1sb3NzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3Y2NmNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0JGRC1pbmZvcm1hdGlvbi1sb3NzLmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkZEIGluZm9ybWF0aW9uIGxvc3MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkJGRC1vdXRsaW5lLmh0bWwjQkZELW91dGxpbmUiIHRpdGxlPSJCRkQgb3V0bGluZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkNhbm9uaWNhbC1mb3JtYXQuaHRtbCNDYW5vbmljYWwtZm9ybWF0IiB0aXRsZT0iQ2Fub25pY2FsIGZvcm1hdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQkZELWluZm9ybWF0aW9uLWxvc3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ2Fub25pY2FsLWZvcm1hdC5odG1sI0Nhbm9uaWNhbC1mb3JtYXQiPkNhbm9uaWNhbCBmb3JtYXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJCRkQtb3V0bGluZS5odG1sI0JGRC1vdXRsaW5lIj5CRkQgb3V0bGluZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjUuMS4xIEluZm9ybWF0aW9uIExvc3M8L2g0PgorCis8cD48ZW0+SW5mb3JtYXRpb24gY2FuIGJlIGxvc3QgZHVyaW5nIG91dHB1dC48L2VtPiBUaGUgb3V0cHV0IGZvcm1hdHMKK3N1cHBvcnRlZCBieSBCRkQgZG8gbm90IHByb3ZpZGUgaWRlbnRpY2FsIGZhY2lsaXRpZXMsIGFuZAoraW5mb3JtYXRpb24gd2hpY2ggY2FuIGJlIGRlc2NyaWJlZCBpbiBvbmUgZm9ybSBoYXMgbm93aGVyZSB0byBnbyBpbgorYW5vdGhlciBmb3JtYXQuIE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgYWxpZ25tZW50IGluZm9ybWF0aW9uIGluCis8Y29kZT5iLm91dDwvY29kZT4uIFRoZXJlIGlzIG5vd2hlcmUgaW4gYW4gPGNvZGU+YS5vdXQ8L2NvZGU+IGZvcm1hdCBmaWxlIHRvIHN0b3JlCithbGlnbm1lbnQgaW5mb3JtYXRpb24gb24gdGhlIGNvbnRhaW5lZCBkYXRhLCBzbyB3aGVuIGEgZmlsZSBpcyBsaW5rZWQKK2Zyb20gPGNvZGU+Yi5vdXQ8L2NvZGU+IGFuZCBhbiA8Y29kZT5hLm91dDwvY29kZT4gaW1hZ2UgaXMgcHJvZHVjZWQsIGFsaWdubWVudAoraW5mb3JtYXRpb24gd2lsbCBub3QgcHJvcGFnYXRlIHRvIHRoZSBvdXRwdXQgZmlsZS4gKFRoZSBsaW5rZXIgd2lsbAorc3RpbGwgdXNlIHRoZSBhbGlnbm1lbnQgaW5mb3JtYXRpb24gaW50ZXJuYWxseSwgc28gdGhlIGxpbmsgaXMgcGVyZm9ybWVkCitjb3JyZWN0bHkpLgorCisgICA8cD5Bbm90aGVyIGV4YW1wbGUgaXMgQ09GRiBzZWN0aW9uIG5hbWVzLiBDT0ZGIGZpbGVzIG1heSBjb250YWluIGFuCit1bmxpbWl0ZWQgbnVtYmVyIG9mIHNlY3Rpb25zLCBlYWNoIG9uZSB3aXRoIGEgdGV4dHVhbCBzZWN0aW9uIG5hbWUuIElmCit0aGUgdGFyZ2V0IG9mIHRoZSBsaW5rIGlzIGEgZm9ybWF0IHdoaWNoIGRvZXMgbm90IGhhdmUgbWFueSBzZWN0aW9ucyAoZS5nLiwKKzxjb2RlPmEub3V0PC9jb2RlPikgb3IgaGFzIHNlY3Rpb25zIHdpdGhvdXQgbmFtZXMgKGUuZy4sIHRoZSBPYXN5cyBmb3JtYXQpLCB0aGUKK2xpbmsgY2Fubm90IGJlIGRvbmUgc2ltcGx5LiBZb3UgY2FuIGNpcmN1bXZlbnQgdGhpcyBwcm9ibGVtIGJ5CitkZXNjcmliaW5nIHRoZSBkZXNpcmVkIGlucHV0LXRvLW91dHB1dCBzZWN0aW9uIG1hcHBpbmcgd2l0aCB0aGUgbGlua2VyIGNvbW1hbmQKK2xhbmd1YWdlLgorCisgICA8cD48ZW0+SW5mb3JtYXRpb24gY2FuIGJlIGxvc3QgZHVyaW5nIGNhbm9uaWNhbGl6YXRpb24uPC9lbT4gVGhlIEJGRAoraW50ZXJuYWwgY2Fub25pY2FsIGZvcm0gb2YgdGhlIGV4dGVybmFsIGZvcm1hdHMgaXMgbm90IGV4aGF1c3RpdmU7IHRoZXJlCithcmUgc3RydWN0dXJlcyBpbiBpbnB1dCBmb3JtYXRzIGZvciB3aGljaCB0aGVyZSBpcyBubyBkaXJlY3QKK3JlcHJlc2VudGF0aW9uIGludGVybmFsbHkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIEJGRCBiYWNrIGVuZHMKK2Nhbm5vdCBtYWludGFpbiBhbGwgcG9zc2libGUgZGF0YSByaWNobmVzcyB0aHJvdWdoIHRoZSB0cmFuc2Zvcm1hdGlvbgorYmV0d2VlbiBleHRlcm5hbCB0byBpbnRlcm5hbCBhbmQgYmFjayB0byBleHRlcm5hbCBmb3JtYXRzLgorCisgICA8cD5UaGlzIGxpbWl0YXRpb24gaXMgb25seSBhIHByb2JsZW0gd2hlbiBhbiBhcHBsaWNhdGlvbiByZWFkcyBvbmUKK2Zvcm1hdCBhbmQgd3JpdGVzIGFub3RoZXIuICBFYWNoIEJGRCBiYWNrIGVuZCBpcyByZXNwb25zaWJsZSBmb3IKK21haW50YWluaW5nIGFzIG11Y2ggZGF0YSBhcyBwb3NzaWJsZSwgYW5kIHRoZSBpbnRlcm5hbCBCRkQKK2Nhbm9uaWNhbCBmb3JtIGhhcyBzdHJ1Y3R1cmVzIHdoaWNoIGFyZSBvcGFxdWUgdG8gdGhlIEJGRCBjb3JlLAorYW5kIGV4cG9ydGVkIG9ubHkgdG8gdGhlIGJhY2sgZW5kcy4gV2hlbiBhIGZpbGUgaXMgcmVhZCBpbiBvbmUgZm9ybWF0LAordGhlIGNhbm9uaWNhbCBmb3JtIGlzIGdlbmVyYXRlZCBmb3IgQkZEIGFuZCB0aGUgYXBwbGljYXRpb24uIEF0IHRoZQorc2FtZSB0aW1lLCB0aGUgYmFjayBlbmQgc2F2ZXMgYXdheSBhbnkgaW5mb3JtYXRpb24gd2hpY2ggbWF5IG90aGVyd2lzZQorYmUgbG9zdC4gSWYgdGhlIGRhdGEgaXMgdGhlbiB3cml0dGVuIGJhY2sgaW4gdGhlIHNhbWUgZm9ybWF0LCB0aGUgYmFjaworZW5kIHJvdXRpbmUgd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGUgY2Fub25pY2FsIGZvcm0gcHJvdmlkZWQgYnkgdGhlCitCRkQgY29yZSBhcyB3ZWxsIGFzIHRoZSBpbmZvcm1hdGlvbiBpdCBwcmVwYXJlZCBlYXJsaWVyLiAgU2luY2UKK3RoZXJlIGlzIGEgZ3JlYXQgZGVhbCBvZiBjb21tb25hbGl0eSBiZXR3ZWVuIGJhY2sgZW5kcywKK3RoZXJlIGlzIG5vIGluZm9ybWF0aW9uIGxvc3Qgd2hlbgorbGlua2luZyBvciBjb3B5aW5nIGJpZyBlbmRpYW4gQ09GRiB0byBsaXR0bGUgZW5kaWFuIENPRkYsIG9yIDxjb2RlPmEub3V0PC9jb2RlPiB0bworPGNvZGU+Yi5vdXQ8L2NvZGU+LiAgV2hlbiBhIG1peHR1cmUgb2YgZm9ybWF0cyBpcyBsaW5rZWQsIHRoZSBpbmZvcm1hdGlvbiBpcworb25seSBsb3N0IGZyb20gdGhlIGZpbGVzIHdob3NlIGZvcm1hdCBkaWZmZXJzIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9CRkQtb3V0bGluZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQkZELW91dGxpbmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE3MDkxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQkZELW91dGxpbmUuaHRtbApAQCAtMCwwICsxLDczIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CRkQgb3V0bGluZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQkZELmh0bWwjQkZEIiB0aXRsZT0iQkZEIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCRkQtb3V0bGluZSI+PC9hPgorPHA+CitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkJGRC5odG1sI0JGRCI+QkZEPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4xIEhvdyBJdCBXb3JrczogQW4gT3V0bGluZSBvZiBCRkQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vcGVuaW5nLW9iamVjdC1maWxlcy03MDMiPjwvYT48IS0tIFRoaXMgc3VtbWFyeSBvZiBCRkQgaXMgc2hhcmVkIGJ5IHRoZSBCRkQgYW5kIExEIGRvY3MuIC0tPgorV2hlbiBhbiBvYmplY3QgZmlsZSBpcyBvcGVuZWQsIEJGRCBzdWJyb3V0aW5lcyBhdXRvbWF0aWNhbGx5IGRldGVybWluZQordGhlIGZvcm1hdCBvZiB0aGUgaW5wdXQgb2JqZWN0IGZpbGUuICBUaGV5IHRoZW4gYnVpbGQgYSBkZXNjcmlwdG9yIGluCittZW1vcnkgd2l0aCBwb2ludGVycyB0byByb3V0aW5lcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgZWxlbWVudHMgb2YKK3RoZSBvYmplY3QgZmlsZSdzIGRhdGEgc3RydWN0dXJlcy4KKworICAgPHA+QXMgZGlmZmVyZW50IGluZm9ybWF0aW9uIGZyb20gdGhlIG9iamVjdCBmaWxlcyBpcyByZXF1aXJlZCwKK0JGRCByZWFkcyBmcm9tIGRpZmZlcmVudCBzZWN0aW9ucyBvZiB0aGUgZmlsZSBhbmQgcHJvY2Vzc2VzIHRoZW0uIAorRm9yIGV4YW1wbGUsIGEgdmVyeSBjb21tb24gb3BlcmF0aW9uIGZvciB0aGUgbGlua2VyIGlzIHByb2Nlc3Npbmcgc3ltYm9sCit0YWJsZXMuICBFYWNoIEJGRCBiYWNrIGVuZCBwcm92aWRlcyBhIHJvdXRpbmUgZm9yIGNvbnZlcnRpbmcKK2JldHdlZW4gdGhlIG9iamVjdCBmaWxlJ3MgcmVwcmVzZW50YXRpb24gb2Ygc3ltYm9scyBhbmQgYW4gaW50ZXJuYWwKK2Nhbm9uaWNhbCBmb3JtYXQuIFdoZW4gdGhlIGxpbmtlciBhc2tzIGZvciB0aGUgc3ltYm9sIHRhYmxlIG9mIGFuIG9iamVjdAorZmlsZSwgaXQgY2FsbHMgdGhyb3VnaCBhIG1lbW9yeSBwb2ludGVyIHRvIHRoZSByb3V0aW5lIGZyb20gdGhlCityZWxldmFudCBCRkQgYmFjayBlbmQgd2hpY2ggcmVhZHMgYW5kIGNvbnZlcnRzIHRoZSB0YWJsZSBpbnRvIGEgY2Fub25pY2FsCitmb3JtLiAgVGhlIGxpbmtlciB0aGVuIG9wZXJhdGVzIHVwb24gdGhlIGNhbm9uaWNhbCBmb3JtLiBXaGVuIHRoZSBsaW5rIGlzCitmaW5pc2hlZCBhbmQgdGhlIGxpbmtlciB3cml0ZXMgdGhlIG91dHB1dCBmaWxlJ3Mgc3ltYm9sIHRhYmxlLAorYW5vdGhlciBCRkQgYmFjayBlbmQgcm91dGluZSBpcyBjYWxsZWQgdG8gdGFrZSB0aGUgbmV3bHkKK2NyZWF0ZWQgc3ltYm9sIHRhYmxlIGFuZCBjb252ZXJ0IGl0IGludG8gdGhlIGNob3NlbiBvdXRwdXQgZm9ybWF0LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iQkZELWluZm9ybWF0aW9uLWxvc3MuaHRtbCNCRkQtaW5mb3JtYXRpb24tbG9zcyI+QkZEIGluZm9ybWF0aW9uIGxvc3M8L2E+OiAJSW5mb3JtYXRpb24gTG9zcworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iQ2Fub25pY2FsLWZvcm1hdC5odG1sI0Nhbm9uaWNhbC1mb3JtYXQiPkNhbm9uaWNhbCBmb3JtYXQ8L2E+OiAJCVRoZSBCRkQJY2Fub25pY2FsIG9iamVjdC1maWxlIGZvcm1hdAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQkZELmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9CRkQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc0Nzc0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQkZELmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QkZEIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiIHRpdGxlPSJSZXBvcnRpbmcgQnVncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iQkZEIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiPlJlcG9ydGluZyBCdWdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCI+TWFjaGluZSBEZXBlbmRlbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NSBCRkQ8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1iYWNrLWVuZC02OTciPjwvYT48YSBuYW1lPSJpbmRleC1vYmplY3QtZmlsZS1tYW5hZ2VtZW50LTY5OCI+PC9hPjxhIG5hbWU9ImluZGV4LW9iamVjdC1mb3JtYXRzLWF2YWlsYWJsZS02OTkiPjwvYT48YSBuYW1lPSJpbmRleC1vYmpkdW1wLV8wMDJkaS03MDAiPjwvYT5UaGUgbGlua2VyIGFjY2Vzc2VzIG9iamVjdCBhbmQgYXJjaGl2ZSBmaWxlcyB1c2luZyB0aGUgQkZEIGxpYnJhcmllcy4gCitUaGVzZSBsaWJyYXJpZXMgYWxsb3cgdGhlIGxpbmtlciB0byB1c2UgdGhlIHNhbWUgcm91dGluZXMgdG8gb3BlcmF0ZSBvbgorb2JqZWN0IGZpbGVzIHdoYXRldmVyIHRoZSBvYmplY3QgZmlsZSBmb3JtYXQuICBBIGRpZmZlcmVudCBvYmplY3QgZmlsZQorZm9ybWF0IGNhbiBiZSBzdXBwb3J0ZWQgc2ltcGx5IGJ5IGNyZWF0aW5nIGEgbmV3IEJGRCBiYWNrIGVuZCBhbmQgYWRkaW5nCitpdCB0byB0aGUgbGlicmFyeS4gIFRvIGNvbnNlcnZlIHJ1bnRpbWUgbWVtb3J5LCBob3dldmVyLCB0aGUgbGlua2VyIGFuZAorYXNzb2NpYXRlZCB0b29scyBhcmUgdXN1YWxseSBjb25maWd1cmVkIHRvIHN1cHBvcnQgb25seSBhIHN1YnNldCBvZiB0aGUKK29iamVjdCBmaWxlIGZvcm1hdHMgYXZhaWxhYmxlLiAgWW91IGNhbiB1c2UgPGNvZGU+b2JqZHVtcCAtaTwvY29kZT4KKyhzZWUgPGEgaHJlZj0iLi4vYmludXRpbHMvb2JqZHVtcC5odG1sI29iamR1bXAiPm9iamR1bXA8L2E+KSB0bworbGlzdCBhbGwgdGhlIGZvcm1hdHMgYXZhaWxhYmxlIGZvciB5b3VyIGNvbmZpZ3VyYXRpb24uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUJGRC1yZXF1aXJlbWVudHMtNzAxIj48L2E+PGEgbmFtZT0iaW5kZXgtcmVxdWlyZW1lbnRzLWZvci1CRkQtNzAyIj48L2E+QXMgd2l0aCBtb3N0IGltcGxlbWVudGF0aW9ucywgQkZEIGlzIGEgY29tcHJvbWlzZSBiZXR3ZWVuCitzZXZlcmFsIGNvbmZsaWN0aW5nIHJlcXVpcmVtZW50cy4gVGhlIG1ham9yIGZhY3RvciBpbmZsdWVuY2luZworQkZEIGRlc2lnbiB3YXMgZWZmaWNpZW5jeTogYW55IHRpbWUgdXNlZCBjb252ZXJ0aW5nIGJldHdlZW4KK2Zvcm1hdHMgaXMgdGltZSB3aGljaCB3b3VsZCBub3QgaGF2ZSBiZWVuIHNwZW50IGhhZCBCRkQgbm90CitiZWVuIGludm9sdmVkLiBUaGlzIGlzIHBhcnRseSBvZmZzZXQgYnkgYWJzdHJhY3Rpb24gcGF5YmFjazsgc2luY2UKK0JGRCBzaW1wbGlmaWVzIGFwcGxpY2F0aW9ucyBhbmQgYmFjayBlbmRzLCBtb3JlIHRpbWUgYW5kIGNhcmUKK21heSBiZSBzcGVudCBvcHRpbWl6aW5nIGFsZ29yaXRobXMgZm9yIGEgZ3JlYXRlciBzcGVlZC4KKworICAgPHA+T25lIG1pbm9yIGFydGlmYWN0IG9mIHRoZSBCRkQgc29sdXRpb24gd2hpY2ggeW91IHNob3VsZCBiZWFyIGluCittaW5kIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGluZm9ybWF0aW9uIGxvc3MuICBUaGVyZSBhcmUgdHdvIHBsYWNlcyB3aGVyZQordXNlZnVsIGluZm9ybWF0aW9uIGNhbiBiZSBsb3N0IHVzaW5nIHRoZSBCRkQgbWVjaGFuaXNtOiBkdXJpbmcKK2NvbnZlcnNpb24gYW5kIGR1cmluZyBvdXRwdXQuIFNlZSA8YSBocmVmPSJCRkQtaW5mb3JtYXRpb24tbG9zcy5odG1sI0JGRC1pbmZvcm1hdGlvbi1sb3NzIj5CRkQgaW5mb3JtYXRpb24gbG9zczwvYT4uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJCRkQtb3V0bGluZS5odG1sI0JGRC1vdXRsaW5lIj5CRkQgb3V0bGluZTwvYT46ICAgICAgICAgICAgICAgICAgSG93IGl0IHdvcmtzOiBhbiBvdXRsaW5lIG9mIEJGRAorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQmFzaWMtU2NyaXB0LUNvbmNlcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9CYXNpYy1TY3JpcHQtQ29uY2VwdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmI3M2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQmFzaWMtU2NyaXB0LUNvbmNlcHRzLmh0bWwKQEAgLTAsMCArMSw5OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QmFzaWMgU2NyaXB0IENvbmNlcHRzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyIgdGl0bGU9IlNjcmlwdHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTY3JpcHQtRm9ybWF0Lmh0bWwjU2NyaXB0LUZvcm1hdCIgdGl0bGU9IlNjcmlwdCBGb3JtYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJhc2ljLVNjcmlwdC1Db25jZXB0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTY3JpcHQtRm9ybWF0Lmh0bWwjU2NyaXB0LUZvcm1hdCI+U2NyaXB0IEZvcm1hdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIj5TY3JpcHRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xIEJhc2ljIExpbmtlciBTY3JpcHQgQ29uY2VwdHM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1saW5rZXItc2NyaXB0LWNvbmNlcHRzLTM0MyI+PC9hPldlIG5lZWQgdG8gZGVmaW5lIHNvbWUgYmFzaWMgY29uY2VwdHMgYW5kIHZvY2FidWxhcnkgaW4gb3JkZXIgdG8KK2Rlc2NyaWJlIHRoZSBsaW5rZXIgc2NyaXB0IGxhbmd1YWdlLgorCisgICA8cD5UaGUgbGlua2VyIGNvbWJpbmVzIGlucHV0IGZpbGVzIGludG8gYSBzaW5nbGUgb3V0cHV0IGZpbGUuICBUaGUgb3V0cHV0CitmaWxlIGFuZCBlYWNoIGlucHV0IGZpbGUgYXJlIGluIGEgc3BlY2lhbCBkYXRhIGZvcm1hdCBrbm93biBhcyBhbgorPGRmbj5vYmplY3QgZmlsZSBmb3JtYXQ8L2Rmbj4uICBFYWNoIGZpbGUgaXMgY2FsbGVkIGFuIDxkZm4+b2JqZWN0IGZpbGU8L2Rmbj4uIAorVGhlIG91dHB1dCBmaWxlIGlzIG9mdGVuIGNhbGxlZCBhbiA8ZGZuPmV4ZWN1dGFibGU8L2Rmbj4sIGJ1dCBmb3Igb3VyCitwdXJwb3NlcyB3ZSB3aWxsIGFsc28gY2FsbCBpdCBhbiBvYmplY3QgZmlsZS4gIEVhY2ggb2JqZWN0IGZpbGUgaGFzLAorYW1vbmcgb3RoZXIgdGhpbmdzLCBhIGxpc3Qgb2YgPGRmbj5zZWN0aW9uczwvZGZuPi4gIFdlIHNvbWV0aW1lcyByZWZlciB0byBhCitzZWN0aW9uIGluIGFuIGlucHV0IGZpbGUgYXMgYW4gPGRmbj5pbnB1dCBzZWN0aW9uPC9kZm4+OyBzaW1pbGFybHksIGEgc2VjdGlvbgoraW4gdGhlIG91dHB1dCBmaWxlIGlzIGFuIDxkZm4+b3V0cHV0IHNlY3Rpb248L2Rmbj4uCisKKyAgIDxwPkVhY2ggc2VjdGlvbiBpbiBhbiBvYmplY3QgZmlsZSBoYXMgYSBuYW1lIGFuZCBhIHNpemUuICBNb3N0IHNlY3Rpb25zCithbHNvIGhhdmUgYW4gYXNzb2NpYXRlZCBibG9jayBvZiBkYXRhLCBrbm93biBhcyB0aGUgPGRmbj5zZWN0aW9uCitjb250ZW50czwvZGZuPi4gIEEgc2VjdGlvbiBtYXkgYmUgbWFya2VkIGFzIDxkZm4+bG9hZGFibGU8L2Rmbj4sIHdoaWNoIG1lYW4gdGhhdAordGhlIGNvbnRlbnRzIHNob3VsZCBiZSBsb2FkZWQgaW50byBtZW1vcnkgd2hlbiB0aGUgb3V0cHV0IGZpbGUgaXMgcnVuLiAKK0Egc2VjdGlvbiB3aXRoIG5vIGNvbnRlbnRzIG1heSBiZSA8ZGZuPmFsbG9jYXRhYmxlPC9kZm4+LCB3aGljaCBtZWFucyB0aGF0IGFuCithcmVhIGluIG1lbW9yeSBzaG91bGQgYmUgc2V0IGFzaWRlLCBidXQgbm90aGluZyBpbiBwYXJ0aWN1bGFyIHNob3VsZCBiZQorbG9hZGVkIHRoZXJlIChpbiBzb21lIGNhc2VzIHRoaXMgbWVtb3J5IG11c3QgYmUgemVyb2VkIG91dCkuICBBIHNlY3Rpb24KK3doaWNoIGlzIG5laXRoZXIgbG9hZGFibGUgbm9yIGFsbG9jYXRhYmxlIHR5cGljYWxseSBjb250YWlucyBzb21lIHNvcnQKK29mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKworICAgPHA+RXZlcnkgbG9hZGFibGUgb3IgYWxsb2NhdGFibGUgb3V0cHV0IHNlY3Rpb24gaGFzIHR3byBhZGRyZXNzZXMuICBUaGUKK2ZpcnN0IGlzIHRoZSA8ZGZuPlZNQTwvZGZuPiwgb3IgdmlydHVhbCBtZW1vcnkgYWRkcmVzcy4gIFRoaXMgaXMgdGhlIGFkZHJlc3MKK3RoZSBzZWN0aW9uIHdpbGwgaGF2ZSB3aGVuIHRoZSBvdXRwdXQgZmlsZSBpcyBydW4uICBUaGUgc2Vjb25kIGlzIHRoZQorPGRmbj5MTUE8L2Rmbj4sIG9yIGxvYWQgbWVtb3J5IGFkZHJlc3MuICBUaGlzIGlzIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZQorc2VjdGlvbiB3aWxsIGJlIGxvYWRlZC4gIEluIG1vc3QgY2FzZXMgdGhlIHR3byBhZGRyZXNzZXMgd2lsbCBiZSB0aGUKK3NhbWUuICBBbiBleGFtcGxlIG9mIHdoZW4gdGhleSBtaWdodCBiZSBkaWZmZXJlbnQgaXMgd2hlbiBhIGRhdGEgc2VjdGlvbgoraXMgbG9hZGVkIGludG8gUk9NLCBhbmQgdGhlbiBjb3BpZWQgaW50byBSQU0gd2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgdXAKKyh0aGlzIHRlY2huaXF1ZSBpcyBvZnRlbiB1c2VkIHRvIGluaXRpYWxpemUgZ2xvYmFsIHZhcmlhYmxlcyBpbiBhIFJPTQorYmFzZWQgc3lzdGVtKS4gIEluIHRoaXMgY2FzZSB0aGUgUk9NIGFkZHJlc3Mgd291bGQgYmUgdGhlIExNQSwgYW5kIHRoZQorUkFNIGFkZHJlc3Mgd291bGQgYmUgdGhlIFZNQS4KKworICAgPHA+WW91IGNhbiBzZWUgdGhlIHNlY3Rpb25zIGluIGFuIG9iamVjdCBmaWxlIGJ5IHVzaW5nIHRoZSA8Y29kZT5vYmpkdW1wPC9jb2RlPgorcHJvZ3JhbSB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1oPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbi4KKworICAgPHA+RXZlcnkgb2JqZWN0IGZpbGUgYWxzbyBoYXMgYSBsaXN0IG9mIDxkZm4+c3ltYm9sczwvZGZuPiwga25vd24gYXMgdGhlCis8ZGZuPnN5bWJvbCB0YWJsZTwvZGZuPi4gIEEgc3ltYm9sIG1heSBiZSBkZWZpbmVkIG9yIHVuZGVmaW5lZC4gIEVhY2ggc3ltYm9sCitoYXMgYSBuYW1lLCBhbmQgZWFjaCBkZWZpbmVkIHN5bWJvbCBoYXMgYW4gYWRkcmVzcywgYW1vbmcgb3RoZXIKK2luZm9ybWF0aW9uLiAgSWYgeW91IGNvbXBpbGUgYSBDIG9yIEMrKyBwcm9ncmFtIGludG8gYW4gb2JqZWN0IGZpbGUsIHlvdQord2lsbCBnZXQgYSBkZWZpbmVkIHN5bWJvbCBmb3IgZXZlcnkgZGVmaW5lZCBmdW5jdGlvbiBhbmQgZ2xvYmFsIG9yCitzdGF0aWMgdmFyaWFibGUuICBFdmVyeSB1bmRlZmluZWQgZnVuY3Rpb24gb3IgZ2xvYmFsIHZhcmlhYmxlIHdoaWNoIGlzCityZWZlcmVuY2VkIGluIHRoZSBpbnB1dCBmaWxlIHdpbGwgYmVjb21lIGFuIHVuZGVmaW5lZCBzeW1ib2wuCisKKyAgIDxwPllvdSBjYW4gc2VlIHRoZSBzeW1ib2xzIGluIGFuIG9iamVjdCBmaWxlIGJ5IHVzaW5nIHRoZSA8Y29kZT5ubTwvY29kZT4KK3Byb2dyYW0sIG9yIGJ5IHVzaW5nIHRoZSA8Y29kZT5vYmpkdW1wPC9jb2RlPiBwcm9ncmFtIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29wdGlvbi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQnVnLUNyaXRlcmlhLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9CdWctQ3JpdGVyaWEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2IyYzlmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQnVnLUNyaXRlcmlhLmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QnVnIENyaXRlcmlhIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIiB0aXRsZT0iUmVwb3J0aW5nIEJ1Z3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjQnVnLVJlcG9ydGluZyIgdGl0bGU9IkJ1ZyBSZXBvcnRpbmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkJ1Zy1Dcml0ZXJpYSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjQnVnLVJlcG9ydGluZyI+QnVnIFJlcG9ydGluZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiPlJlcG9ydGluZyBCdWdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xIEhhdmUgWW91IEZvdW5kIGEgQnVnPzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWJ1Zy1jcml0ZXJpYS03MDgiPjwvYT4KK0lmIHlvdSBhcmUgbm90IHN1cmUgd2hldGhlciB5b3UgaGF2ZSBmb3VuZCBhIGJ1ZywgaGVyZSBhcmUgc29tZSBndWlkZWxpbmVzOgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZmF0YWwtc2lnbmFsLTcwOSI+PC9hPgorPGEgbmFtZT0iaW5kZXgtbGlua2VyLWNyYXNoLTcxMCI+PC9hPgorPGEgbmFtZT0iaW5kZXgtY3Jhc2gtb2YtbGlua2VyLTcxMSI+PC9hPgorPHVsPjxsaT5JZiB0aGUgbGlua2VyIGdldHMgYSBmYXRhbCBzaWduYWwsIGZvciBhbnkgaW5wdXQgd2hhdGV2ZXIsIHRoYXQgaXMgYQorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYnVnLiAgUmVsaWFibGUgbGlua2VycyBuZXZlciBjcmFzaC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1lcnJvci1vbi12YWxpZC1pbnB1dC03MTIiPjwvYT48bGk+SWYgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gcHJvZHVjZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdmFsaWQgaW5wdXQsIHRoYXQgaXMgYSBidWcuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtaW52YWxpZC1pbnB1dC03MTMiPjwvYT48bGk+SWYgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gZG9lcyBub3QgcHJvZHVjZSBhbiBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIGlucHV0LCB0aGF0CittYXkgYmUgYSBidWcuICBJbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGUgbGlua2VyIGNhbiBub3QgdmVyaWZ5IHRoYXQKK29iamVjdCBmaWxlcyBhcmUgY29ycmVjdC4KKworICAgICA8bGk+SWYgeW91IGFyZSBhbiBleHBlcmllbmNlZCB1c2VyIG9mIGxpbmtlcnMsIHlvdXIgc3VnZ2VzdGlvbnMgZm9yCitpbXByb3ZlbWVudCBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhcmUgd2VsY29tZSBpbiBhbnkgY2FzZS4gCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9CdWctUmVwb3J0aW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9CdWctUmVwb3J0aW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlODMwYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0J1Zy1SZXBvcnRpbmcuaHRtbApAQCAtMCwwICsxLDIwMCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+QnVnIFJlcG9ydGluZyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyIgdGl0bGU9IlJlcG9ydGluZyBCdWdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIiB0aXRsZT0iQnVnIENyaXRlcmlhIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCdWctUmVwb3J0aW5nIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMiBIb3cgdG8gUmVwb3J0IEJ1Z3M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1idWctcmVwb3J0cy03MTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvbW1hbmRfMDA3YmxkXzAwN2QtYnVnc18wMDJjLXJlcG9ydGluZy03MTUiPjwvYT4KK0EgbnVtYmVyIG9mIGNvbXBhbmllcyBhbmQgaW5kaXZpZHVhbHMgb2ZmZXIgc3VwcG9ydCBmb3IgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+Citwcm9kdWN0cy4gIElmIHlvdSBvYnRhaW5lZCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBmcm9tIGEgc3VwcG9ydCBvcmdhbml6YXRpb24sIHdlCityZWNvbW1lbmQgeW91IGNvbnRhY3QgdGhhdCBvcmdhbml6YXRpb24gZmlyc3QuCisKKyAgIDxwPllvdSBjYW4gZmluZCBjb250YWN0IGluZm9ybWF0aW9uIGZvciBtYW55IHN1cHBvcnQgY29tcGFuaWVzIGFuZAoraW5kaXZpZHVhbHMgaW4gdGhlIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmV0Yy9TRVJWSUNFPC9zcGFuPjwvc2FtcD4gaW4gdGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBFbWFjcworZGlzdHJpYnV0aW9uLgorCisgICA8cD5PdGhlcndpc2UsIHNlbmQgYnVnIHJlcG9ydHMgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHRvCis8YSBocmVmPSJodHRwOi8vd3d3LnNvdXJjZXdhcmUub3JnL2J1Z3ppbGxhLyI+aHR0cDovL3d3dy5zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS88L2E+LgorCisgICA8cD5UaGUgZnVuZGFtZW50YWwgcHJpbmNpcGxlIG9mIHJlcG9ydGluZyBidWdzIHVzZWZ1bGx5IGlzIHRoaXM6Cis8c3Ryb25nPnJlcG9ydCBhbGwgdGhlIGZhY3RzPC9zdHJvbmc+LiAgSWYgeW91IGFyZSBub3Qgc3VyZSB3aGV0aGVyIHRvIHN0YXRlIGEKK2ZhY3Qgb3IgbGVhdmUgaXQgb3V0LCBzdGF0ZSBpdCEKKworICAgPHA+T2Z0ZW4gcGVvcGxlIG9taXQgZmFjdHMgYmVjYXVzZSB0aGV5IHRoaW5rIHRoZXkga25vdyB3aGF0IGNhdXNlcyB0aGUKK3Byb2JsZW0gYW5kIGFzc3VtZSB0aGF0IHNvbWUgZGV0YWlscyBkbyBub3QgbWF0dGVyLiAgVGh1cywgeW91IG1pZ2h0Cithc3N1bWUgdGhhdCB0aGUgbmFtZSBvZiBhIHN5bWJvbCB5b3UgdXNlIGluIGFuIGV4YW1wbGUgZG9lcyBub3QKK21hdHRlci4gIFdlbGwsIHByb2JhYmx5IGl0IGRvZXMgbm90LCBidXQgb25lIGNhbm5vdCBiZSBzdXJlLiAgUGVyaGFwcwordGhlIGJ1ZyBpcyBhIHN0cmF5IG1lbW9yeSByZWZlcmVuY2Ugd2hpY2ggaGFwcGVucyB0byBmZXRjaCBmcm9tIHRoZQorbG9jYXRpb24gd2hlcmUgdGhhdCBuYW1lIGlzIHN0b3JlZCBpbiBtZW1vcnk7IHBlcmhhcHMsIGlmIHRoZSBuYW1lCit3ZXJlIGRpZmZlcmVudCwgdGhlIGNvbnRlbnRzIG9mIHRoYXQgbG9jYXRpb24gd291bGQgZm9vbCB0aGUgbGlua2VyCitpbnRvIGRvaW5nIHRoZSByaWdodCB0aGluZyBkZXNwaXRlIHRoZSBidWcuICBQbGF5IGl0IHNhZmUgYW5kIGdpdmUgYQorc3BlY2lmaWMsIGNvbXBsZXRlIGV4YW1wbGUuICBUaGF0IGlzIHRoZSBlYXNpZXN0IHRoaW5nIGZvciB5b3UgdG8gZG8sCithbmQgdGhlIG1vc3QgaGVscGZ1bC4KKworICAgPHA+S2VlcCBpbiBtaW5kIHRoYXQgdGhlIHB1cnBvc2Ugb2YgYSBidWcgcmVwb3J0IGlzIHRvIGVuYWJsZSB1cyB0byBmaXgKK3RoZSBidWcgaWYgaXQgaXMgbmV3IHRvIHVzLiAgVGhlcmVmb3JlLCBhbHdheXMgd3JpdGUgeW91ciBidWcgcmVwb3J0cworb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgYnVnIGhhcyBub3QgYmVlbiByZXBvcnRlZCBwcmV2aW91c2x5LgorCisgICA8cD5Tb21ldGltZXMgcGVvcGxlIGdpdmUgYSBmZXcgc2tldGNoeSBmYWN0cyBhbmQgYXNrLCAmbGRxdW87RG9lcyB0aGlzIHJpbmcgYQorYmVsbD8mcmRxdW87ICBUaGlzIGNhbm5vdCBoZWxwIHVzIGZpeCBhIGJ1Zywgc28gaXQgaXMgYmFzaWNhbGx5IHVzZWxlc3MuICBXZQorcmVzcG9uZCBieSBhc2tpbmcgZm9yIGVub3VnaCBkZXRhaWxzIHRvIGVuYWJsZSB1cyB0byBpbnZlc3RpZ2F0ZS4gCitZb3UgbWlnaHQgYXMgd2VsbCBleHBlZGl0ZSBtYXR0ZXJzIGJ5IHNlbmRpbmcgdGhlbSB0byBiZWdpbiB3aXRoLgorCisgICA8cD5UbyBlbmFibGUgdXMgdG8gZml4IHRoZSBidWcsIHlvdSBzaG91bGQgaW5jbHVkZSBhbGwgdGhlc2UgdGhpbmdzOgorCisgICAgIDx1bD4KKzxsaT5UaGUgdmVyc2lvbiBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPi4gIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFubm91bmNlcyBpdCBpZiB5b3Ugc3RhcnQgaXQgd2l0aAordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS12ZXJzaW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZ3VtZW50LgorCisgICAgIDxwPldpdGhvdXQgdGhpcywgd2Ugd2lsbCBub3Qga25vdyB3aGV0aGVyIHRoZXJlIGlzIGFueSBwb2ludCBpbiBsb29raW5nIGZvcgordGhlIGJ1ZyBpbiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxsaT5BbnkgcGF0Y2hlcyB5b3UgbWF5IGhhdmUgYXBwbGllZCB0byB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gc291cmNlLCBpbmNsdWRpbmcgYW55CitwYXRjaGVzIG1hZGUgdG8gdGhlIDxjb2RlPkJGRDwvY29kZT4gbGlicmFyeS4KKworICAgICA8bGk+VGhlIHR5cGUgb2YgbWFjaGluZSB5b3UgYXJlIHVzaW5nLCBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSBhbmQKK3ZlcnNpb24gbnVtYmVyLgorCisgICAgIDxsaT5XaGF0IGNvbXBpbGVyIChhbmQgaXRzIHZlcnNpb24pIHdhcyB1c2VkIHRvIGNvbXBpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4mbWRhc2g7ZS5nLiAKKyZsZHF1bzs8Y29kZT5nY2MtMi43PC9jb2RlPiZyZHF1bzsuCisKKyAgICAgPGxpPlRoZSBjb21tYW5kIGFyZ3VtZW50cyB5b3UgZ2F2ZSB0aGUgbGlua2VyIHRvIGxpbmsgeW91ciBleGFtcGxlIGFuZAorb2JzZXJ2ZSB0aGUgYnVnLiAgVG8gZ3VhcmFudGVlIHlvdSB3aWxsIG5vdCBvbWl0IHNvbWV0aGluZyBpbXBvcnRhbnQsCitsaXN0IHRoZW0gYWxsLiAgQSBjb3B5IG9mIHRoZSBNYWtlZmlsZSAob3IgdGhlIG91dHB1dCBmcm9tIG1ha2UpIGlzCitzdWZmaWNpZW50LgorCisgICAgIDxwPklmIHdlIHdlcmUgdG8gdHJ5IHRvIGd1ZXNzIHRoZSBhcmd1bWVudHMsIHdlIHdvdWxkIHByb2JhYmx5IGd1ZXNzIHdyb25nCithbmQgdGhlbiB3ZSBtaWdodCBub3QgZW5jb3VudGVyIHRoZSBidWcuCisKKyAgICAgPGxpPkEgY29tcGxldGUgaW5wdXQgZmlsZSwgb3Igc2V0IG9mIGlucHV0IGZpbGVzLCB0aGF0IHdpbGwgcmVwcm9kdWNlIHRoZQorYnVnLiAgSXQgaXMgZ2VuZXJhbGx5IG1vc3QgaGVscGZ1bCB0byBzZW5kIHRoZSBhY3R1YWwgb2JqZWN0IGZpbGVzCitwcm92aWRlZCB0aGF0IHRoZXkgYXJlIHJlYXNvbmFibHkgc21hbGwuICBTYXkgbm8gbW9yZSB0aGFuIDEwSy4gIEZvcgorYmlnZ2VyIGZpbGVzIHlvdSBjYW4gZWl0aGVyIG1ha2UgdGhlbSBhdmFpbGFibGUgYnkgRlRQIG9yIEhUVFAgb3IgZWxzZQorc3RhdGUgdGhhdCB5b3UgYXJlIHdpbGxpbmcgdG8gc2VuZCB0aGUgb2JqZWN0IGZpbGUocykgdG8gd2hvbWV2ZXIKK3JlcXVlc3RzIHRoZW0uICAoTm90ZSAtIHlvdXIgZW1haWwgd2lsbCBiZSBnb2luZyB0byBhIG1haWxpbmcgbGlzdCwgc28KK3dlIGRvIG5vdCB3YW50IHRvIGNsb2cgaXQgdXAgd2l0aCBsYXJnZSBhdHRhY2htZW50cykuICBCdXQgc21hbGwKK2F0dGFjaG1lbnRzIGFyZSBiZXN0LgorCisgICAgIDxwPklmIHRoZSBzb3VyY2UgZmlsZXMgd2VyZSBhc3NlbWJsZWQgdXNpbmcgPGNvZGU+Z2FzPC9jb2RlPiBvciBjb21waWxlZCB1c2luZworPGNvZGU+Z2NjPC9jb2RlPiwgdGhlbiBpdCBtYXkgYmUgT0sgdG8gc2VuZCB0aGUgc291cmNlIGZpbGVzIHJhdGhlciB0aGFuIHRoZQorb2JqZWN0IGZpbGVzLiAgSW4gdGhpcyBjYXNlLCBiZSBzdXJlIHRvIHNheSBleGFjdGx5IHdoYXQgdmVyc2lvbiBvZgorPGNvZGU+Z2FzPC9jb2RlPiBvciA8Y29kZT5nY2M8L2NvZGU+IHdhcyB1c2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdCBmaWxlcy4gIEFsc28gc2F5Citob3cgPGNvZGU+Z2FzPC9jb2RlPiBvciA8Y29kZT5nY2M8L2NvZGU+IHdlcmUgY29uZmlndXJlZC4KKworICAgICA8bGk+QSBkZXNjcmlwdGlvbiBvZiB3aGF0IGJlaGF2aW9yIHlvdSBvYnNlcnZlIHRoYXQgeW91IGJlbGlldmUgaXMKK2luY29ycmVjdC4gIEZvciBleGFtcGxlLCAmbGRxdW87SXQgZ2V0cyBhIGZhdGFsIHNpZ25hbC4mcmRxdW87CisKKyAgICAgPHA+T2YgY291cnNlLCBpZiB0aGUgYnVnIGlzIHRoYXQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gZ2V0cyBhIGZhdGFsIHNpZ25hbCwgdGhlbiB3ZQord2lsbCBjZXJ0YWlubHkgbm90aWNlIGl0LiAgQnV0IGlmIHRoZSBidWcgaXMgaW5jb3JyZWN0IG91dHB1dCwgd2UgbWlnaHQKK25vdCBub3RpY2UgdW5sZXNzIGl0IGlzIGdsYXJpbmdseSB3cm9uZy4gIFlvdSBtaWdodCBhcyB3ZWxsIG5vdCBnaXZlIHVzCithIGNoYW5jZSB0byBtYWtlIGEgbWlzdGFrZS4KKworICAgICA8cD5FdmVuIGlmIHRoZSBwcm9ibGVtIHlvdSBleHBlcmllbmNlIGlzIGEgZmF0YWwgc2lnbmFsLCB5b3Ugc2hvdWxkIHN0aWxsCitzYXkgc28gZXhwbGljaXRseS4gIFN1cHBvc2Ugc29tZXRoaW5nIHN0cmFuZ2UgaXMgZ29pbmcgb24sIHN1Y2ggYXMsIHlvdXIKK2NvcHkgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gaXMgb3V0IG9mIHN5bmMsIG9yIHlvdSBoYXZlIGVuY291bnRlcmVkIGEgYnVnIGluIHRoZQorQyBsaWJyYXJ5IG9uIHlvdXIgc3lzdGVtLiAgKFRoaXMgaGFzIGhhcHBlbmVkISkgIFlvdXIgY29weSBtaWdodCBjcmFzaAorYW5kIG91cnMgd291bGQgbm90LiAgSWYgeW91IHRvbGQgdXMgdG8gZXhwZWN0IGEgY3Jhc2gsIHRoZW4gd2hlbiBvdXJzCitmYWlscyB0byBjcmFzaCwgd2Ugd291bGQga25vdyB0aGF0IHRoZSBidWcgd2FzIG5vdCBoYXBwZW5pbmcgZm9yIHVzLiAgSWYKK3lvdSBoYWQgbm90IHRvbGQgdXMgdG8gZXhwZWN0IGEgY3Jhc2gsIHRoZW4gd2Ugd291bGQgbm90IGJlIGFibGUgdG8gZHJhdworYW55IGNvbmNsdXNpb24gZnJvbSBvdXIgb2JzZXJ2YXRpb25zLgorCisgICAgIDxsaT5JZiB5b3Ugd2lzaCB0byBzdWdnZXN0IGNoYW5nZXMgdG8gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHNvdXJjZSwgc2VuZCB1cyBjb250ZXh0CitkaWZmcywgYXMgZ2VuZXJhdGVkIGJ5IDxjb2RlPmRpZmY8L2NvZGU+IHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWM8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9yCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1wPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbi4gIEFsd2F5cyBzZW5kIGRpZmZzIGZyb20gdGhlIG9sZCBmaWxlIHRvIHRoZSBuZXcgZmlsZS4gCitJZiB5b3UgZXZlbiBkaXNjdXNzIHNvbWV0aGluZyBpbiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gc291cmNlLCByZWZlciB0byBpdCBieQorY29udGV4dCwgbm90IGJ5IGxpbmUgbnVtYmVyLgorCisgICAgIDxwPlRoZSBsaW5lIG51bWJlcnMgaW4gb3VyIGRldmVsb3BtZW50IHNvdXJjZXMgd2lsbCBub3QgbWF0Y2ggdGhvc2UgaW4geW91cgorc291cmNlcy4gIFlvdXIgbGluZSBudW1iZXJzIHdvdWxkIGNvbnZleSBubyB1c2VmdWwgaW5mb3JtYXRpb24gdG8gdXMuIAorPC91bD4KKworICAgPHA+SGVyZSBhcmUgc29tZSB0aGluZ3MgdGhhdCBhcmUgbm90IG5lY2Vzc2FyeToKKworICAgICA8dWw+Cis8bGk+QSBkZXNjcmlwdGlvbiBvZiB0aGUgZW52ZWxvcGUgb2YgdGhlIGJ1Zy4KKworICAgICA8cD5PZnRlbiBwZW9wbGUgd2hvIGVuY291bnRlciBhIGJ1ZyBzcGVuZCBhIGxvdCBvZiB0aW1lIGludmVzdGlnYXRpbmcKK3doaWNoIGNoYW5nZXMgdG8gdGhlIGlucHV0IGZpbGUgd2lsbCBtYWtlIHRoZSBidWcgZ28gYXdheSBhbmQgd2hpY2gKK2NoYW5nZXMgd2lsbCBub3QgYWZmZWN0IGl0LgorCisgICAgIDxwPlRoaXMgaXMgb2Z0ZW4gdGltZSBjb25zdW1pbmcgYW5kIG5vdCB2ZXJ5IHVzZWZ1bCwgYmVjYXVzZSB0aGUgd2F5IHdlCit3aWxsIGZpbmQgdGhlIGJ1ZyBpcyBieSBydW5uaW5nIGEgc2luZ2xlIGV4YW1wbGUgdW5kZXIgdGhlIGRlYnVnZ2VyCit3aXRoIGJyZWFrcG9pbnRzLCBub3QgYnkgcHVyZSBkZWR1Y3Rpb24gZnJvbSBhIHNlcmllcyBvZiBleGFtcGxlcy4gCitXZSByZWNvbW1lbmQgdGhhdCB5b3Ugc2F2ZSB5b3VyIHRpbWUgZm9yIHNvbWV0aGluZyBlbHNlLgorCisgICAgIDxwPk9mIGNvdXJzZSwgaWYgeW91IGNhbiBmaW5kIGEgc2ltcGxlciBleGFtcGxlIHRvIHJlcG9ydCA8ZW0+aW5zdGVhZDwvZW0+CitvZiB0aGUgb3JpZ2luYWwgb25lLCB0aGF0IGlzIGEgY29udmVuaWVuY2UgZm9yIHVzLiAgRXJyb3JzIGluIHRoZQorb3V0cHV0IHdpbGwgYmUgZWFzaWVyIHRvIHNwb3QsIHJ1bm5pbmcgdW5kZXIgdGhlIGRlYnVnZ2VyIHdpbGwgdGFrZQorbGVzcyB0aW1lLCBhbmQgc28gb24uCisKKyAgICAgPHA+SG93ZXZlciwgc2ltcGxpZmljYXRpb24gaXMgbm90IHZpdGFsOyBpZiB5b3UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcywKK3JlcG9ydCB0aGUgYnVnIGFueXdheSBhbmQgc2VuZCB1cyB0aGUgZW50aXJlIHRlc3QgY2FzZSB5b3UgdXNlZC4KKworICAgICA8bGk+QSBwYXRjaCBmb3IgdGhlIGJ1Zy4KKworICAgICA8cD5BIHBhdGNoIGZvciB0aGUgYnVnIGRvZXMgaGVscCB1cyBpZiBpdCBpcyBhIGdvb2Qgb25lLiAgQnV0IGRvIG5vdCBvbWl0Cit0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSB0ZXN0IGNhc2UsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQKK2EgcGF0Y2ggaXMgYWxsIHdlIG5lZWQuICBXZSBtaWdodCBzZWUgcHJvYmxlbXMgd2l0aCB5b3VyIHBhdGNoIGFuZCBkZWNpZGUKK3RvIGZpeCB0aGUgcHJvYmxlbSBhbm90aGVyIHdheSwgb3Igd2UgbWlnaHQgbm90IHVuZGVyc3RhbmQgaXQgYXQgYWxsLgorCisgICAgIDxwPlNvbWV0aW1lcyB3aXRoIGEgcHJvZ3JhbSBhcyBjb21wbGljYXRlZCBhcyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBpdCBpcyB2ZXJ5IGhhcmQgdG8KK2NvbnN0cnVjdCBhbiBleGFtcGxlIHRoYXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGZvbGxvdyBhIGNlcnRhaW4gcGF0aAordGhyb3VnaCB0aGUgY29kZS4gIElmIHlvdSBkbyBub3Qgc2VuZCB1cyB0aGUgZXhhbXBsZSwgd2Ugd2lsbCBub3QgYmUKK2FibGUgdG8gY29uc3RydWN0IG9uZSwgc28gd2Ugd2lsbCBub3QgYmUgYWJsZSB0byB2ZXJpZnkgdGhhdCB0aGUgYnVnIGlzCitmaXhlZC4KKworICAgICA8cD5BbmQgaWYgd2UgY2Fubm90IHVuZGVyc3RhbmQgd2hhdCBidWcgeW91IGFyZSB0cnlpbmcgdG8gZml4LCBvciB3aHkgeW91cgorcGF0Y2ggc2hvdWxkIGJlIGFuIGltcHJvdmVtZW50LCB3ZSB3aWxsIG5vdCBpbnN0YWxsIGl0LiAgQSB0ZXN0IGNhc2Ugd2lsbAoraGVscCB1cyB0byB1bmRlcnN0YW5kLgorCisgICAgIDxsaT5BIGd1ZXNzIGFib3V0IHdoYXQgdGhlIGJ1ZyBpcyBvciB3aGF0IGl0IGRlcGVuZHMgb24uCisKKyAgICAgPHA+U3VjaCBndWVzc2VzIGFyZSB1c3VhbGx5IHdyb25nLiAgRXZlbiB3ZSBjYW5ub3QgZ3Vlc3MgcmlnaHQgYWJvdXQgc3VjaAordGhpbmdzIHdpdGhvdXQgZmlyc3QgdXNpbmcgdGhlIGRlYnVnZ2VyIHRvIGZpbmQgdGhlIGZhY3RzLiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0J1aWx0aW4tRnVuY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9CdWlsdGluLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMmRmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9CdWlsdGluLUZ1bmN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjI4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5CdWlsdGluIEZ1bmN0aW9ucyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyIgdGl0bGU9IkV4cHJlc3Npb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXhwcmVzc2lvbi1TZWN0aW9uLmh0bWwjRXhwcmVzc2lvbi1TZWN0aW9uIiB0aXRsZT0iRXhwcmVzc2lvbiBTZWN0aW9uIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJCdWlsdGluLUZ1bmN0aW9ucyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI0V4cHJlc3Npb24tU2VjdGlvbiI+RXhwcmVzc2lvbiBTZWN0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjEwLjkgQnVpbHRpbiBGdW5jdGlvbnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1mdW5jdGlvbnMtaW4tZXhwcmVzc2lvbnMtNTMzIj48L2E+VGhlIGxpbmtlciBzY3JpcHQgbGFuZ3VhZ2UgaW5jbHVkZXMgYSBudW1iZXIgb2YgYnVpbHRpbiBmdW5jdGlvbnMgZm9yCit1c2UgaW4gbGlua2VyIHNjcmlwdCBleHByZXNzaW9ucy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+QUJTT0xVVEUoPC9jb2RlPjx2YXI+ZXhwPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtQUJTT0xVVEVfMDAyOF8wMDQwdmFyXzAwN2JleHBfMDA3ZF8wMDI5LTUzNCI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cHJlc3Npb25fMDAyYy1hYnNvbHV0ZS01MzUiPjwvYT5SZXR1cm4gdGhlIGFic29sdXRlIChub24tcmVsb2NhdGFibGUsIGFzIG9wcG9zZWQgdG8gbm9uLW5lZ2F0aXZlKSB2YWx1ZQorb2YgdGhlIGV4cHJlc3Npb24gPHZhcj5leHA8L3Zhcj4uICBQcmltYXJpbHkgdXNlZnVsIHRvIGFzc2lnbiBhbiBhYnNvbHV0ZQordmFsdWUgdG8gYSBzeW1ib2wgd2l0aGluIGEgc2VjdGlvbiBkZWZpbml0aW9uLCB3aGVyZSBzeW1ib2wgdmFsdWVzIGFyZQorbm9ybWFsbHkgc2VjdGlvbiByZWxhdGl2ZS4gIFNlZSA8YSBocmVmPSJFeHByZXNzaW9uLVNlY3Rpb24uaHRtbCNFeHByZXNzaW9uLVNlY3Rpb24iPkV4cHJlc3Npb24gU2VjdGlvbjwvYT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5BRERSKDwvY29kZT48dmFyPnNlY3Rpb248L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1BRERSXzAwMjhfMDA0MHZhcl8wMDdic2VjdGlvbl8wMDdkXzAwMjktNTM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbi1hZGRyZXNzLWluLWV4cHJlc3Npb24tNTM3Ij48L2E+UmV0dXJuIHRoZSBhZGRyZXNzIChWTUEpIG9mIHRoZSBuYW1lZCA8dmFyPnNlY3Rpb248L3Zhcj4uICBZb3VyCitzY3JpcHQgbXVzdCBwcmV2aW91c2x5IGhhdmUgZGVmaW5lZCB0aGUgbG9jYXRpb24gb2YgdGhhdCBzZWN0aW9uLiAgSW4KK3RoZSBmb2xsb3dpbmcgZXhhbXBsZSwgPGNvZGU+c3RhcnRfb2Zfb3V0cHV0XzE8L2NvZGU+LCA8Y29kZT5zeW1ib2xfMTwvY29kZT4gYW5kCis8Y29kZT5zeW1ib2xfMjwvY29kZT4gYXJlIGFzc2lnbmVkIGVxdWl2YWxlbnQgdmFsdWVzLCBleGNlcHQgdGhhdAorPGNvZGU+c3ltYm9sXzE8L2NvZGU+IHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIDxjb2RlPi5vdXRwdXQxPC9jb2RlPiBzZWN0aW9uIHdoaWxlCit0aGUgb3RoZXIgdHdvIHdpbGwgYmUgYWJzb2x1dGU6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFNFQ1RJT05TIHsgLi4uCisgICAgICAgICAgICAub3V0cHV0MSA6CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhcnRfb2Zfb3V0cHV0XzEgPSBBQlNPTFVURSguKTsKKyAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC5vdXRwdXQgOgorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN5bWJvbF8xID0gQUREUigub3V0cHV0MSk7CisgICAgICAgICAgICAgIHN5bWJvbF8yID0gc3RhcnRfb2Zfb3V0cHV0XzE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAuLi4gfQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+QUxJR04oPC9jb2RlPjx2YXI+YWxpZ248L3Zhcj48Y29kZT4pPC9jb2RlPjxkdD48Y29kZT5BTElHTig8L2NvZGU+PHZhcj5leHA8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+YWxpZ248L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1BTElHTl8wMDI4XzAwNDB2YXJfMDA3YmFsaWduXzAwN2RfMDAyOS01MzgiPjwvYT48YSBuYW1lPSJpbmRleC1BTElHTl8wMDI4XzAwNDB2YXJfMDA3YmV4cF8wMDdkXzAwMmNfMDA0MHZhcl8wMDdiYWxpZ25fMDA3ZF8wMDI5LTUzOSI+PC9hPjxhIG5hbWU9ImluZGV4LXJvdW5kLXVwLWxvY2F0aW9uLWNvdW50ZXItNTQwIj48L2E+PGEgbmFtZT0iaW5kZXgtYWxpZ24tbG9jYXRpb24tY291bnRlci01NDEiPjwvYT48YSBuYW1lPSJpbmRleC1yb3VuZC11cC1leHByZXNzaW9uLTU0MiI+PC9hPjxhIG5hbWU9ImluZGV4LWFsaWduLWV4cHJlc3Npb24tNTQzIj48L2E+UmV0dXJuIHRoZSBsb2NhdGlvbiBjb3VudGVyICg8Y29kZT4uPC9jb2RlPikgb3IgYXJiaXRyYXJ5IGV4cHJlc3Npb24gYWxpZ25lZAordG8gdGhlIG5leHQgPHZhcj5hbGlnbjwvdmFyPiBib3VuZGFyeS4gIFRoZSBzaW5nbGUgb3BlcmFuZCA8Y29kZT5BTElHTjwvY29kZT4KK2RvZXNuJ3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgbG9jYXRpb24gY291bnRlciZtZGFzaDtpdCBqdXN0IGRvZXMKK2FyaXRobWV0aWMgb24gaXQuICBUaGUgdHdvIG9wZXJhbmQgPGNvZGU+QUxJR048L2NvZGU+IGFsbG93cyBhbiBhcmJpdHJhcnkKK2V4cHJlc3Npb24gdG8gYmUgYWxpZ25lZCB1cHdhcmRzICg8Y29kZT5BTElHTig8L2NvZGU+PHZhcj5hbGlnbjwvdmFyPjxjb2RlPik8L2NvZGU+IGlzCitlcXVpdmFsZW50IHRvIDxjb2RlPkFMSUdOKC4sIDwvY29kZT48dmFyPmFsaWduPC92YXI+PGNvZGU+KTwvY29kZT4pLgorCisgICAgIDxwPkhlcmUgaXMgYW4gZXhhbXBsZSB3aGljaCBhbGlnbnMgdGhlIG91dHB1dCA8Y29kZT4uZGF0YTwvY29kZT4gc2VjdGlvbiB0byB0aGUKK25leHQgPGNvZGU+MHgyMDAwPC9jb2RlPiBieXRlIGJvdW5kYXJ5IGFmdGVyIHRoZSBwcmVjZWRpbmcgc2VjdGlvbiBhbmQgc2V0cyBhCit2YXJpYWJsZSB3aXRoaW4gdGhlIHNlY3Rpb24gdG8gdGhlIG5leHQgPGNvZGU+MHg4MDAwPC9jb2RlPiBib3VuZGFyeSBhZnRlciB0aGUKK2lucHV0IHNlY3Rpb25zOgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBTRUNUSU9OUyB7IC4uLgorICAgICAgICAgICAgLmRhdGEgQUxJR04oMHgyMDAwKTogeworICAgICAgICAgICAgICAqKC5kYXRhKQorICAgICAgICAgICAgICB2YXJpYWJsZSA9IEFMSUdOKDB4ODAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgLi4uIH0KKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZSBmaXJzdCB1c2Ugb2YgPGNvZGU+QUxJR048L2NvZGU+IGluIHRoaXMgZXhhbXBsZSBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mCithIHNlY3Rpb24gYmVjYXVzZSBpdCBpcyB1c2VkIGFzIHRoZSBvcHRpb25hbCA8dmFyPmFkZHJlc3M8L3Zhcj4gYXR0cmlidXRlIG9mCithIHNlY3Rpb24gZGVmaW5pdGlvbiAoc2VlIDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUFkZHJlc3MuaHRtbCNPdXRwdXQtU2VjdGlvbi1BZGRyZXNzIj5PdXRwdXQgU2VjdGlvbiBBZGRyZXNzPC9hPikuICBUaGUgc2Vjb25kIHVzZQorb2YgPGNvZGU+QUxJR048L2NvZGU+IGlzIHVzZWQgdG8gZGVmaW5lcyB0aGUgdmFsdWUgb2YgYSBzeW1ib2wuCisKKyAgICAgPHA+VGhlIGJ1aWx0aW4gZnVuY3Rpb24gPGNvZGU+TkVYVDwvY29kZT4gaXMgY2xvc2VseSByZWxhdGVkIHRvIDxjb2RlPkFMSUdOPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPkFMSUdOT0YoPC9jb2RlPjx2YXI+c2VjdGlvbjwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUFMSUdOT0ZfMDAyOF8wMDQwdmFyXzAwN2JzZWN0aW9uXzAwN2RfMDAyOS01NDQiPjwvYT48YSBuYW1lPSJpbmRleC1zZWN0aW9uLWFsaWdubWVudC01NDUiPjwvYT5SZXR1cm4gdGhlIGFsaWdubWVudCBpbiBieXRlcyBvZiB0aGUgbmFtZWQgPHZhcj5zZWN0aW9uPC92YXI+LCBpZiB0aGF0IHNlY3Rpb24gaGFzCitiZWVuIGFsbG9jYXRlZC4gIElmIHRoZSBzZWN0aW9uIGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgd2hlbiB0aGlzIGlzCitldmFsdWF0ZWQsIHRoZSBsaW5rZXIgd2lsbCByZXBvcnQgYW4gZXJyb3IuIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwKK3RoZSBhbGlnbm1lbnQgb2YgdGhlIDxjb2RlPi5vdXRwdXQ8L2NvZGU+IHNlY3Rpb24gaXMgc3RvcmVkIGFzIHRoZSBmaXJzdAordmFsdWUgaW4gdGhhdCBzZWN0aW9uLgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBTRUNUSU9OU3sgLi4uCisgICAgICAgICAgICAub3V0cHV0IHsKKyAgICAgICAgICAgICAgTE9ORyAoQUxJR05PRiAoLm91dHB1dCkpCisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICB9CisgICAgICAgICAgLi4uIH0KKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPkJMT0NLKDwvY29kZT48dmFyPmV4cDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUJMT0NLXzAwMjhfMDA0MHZhcl8wMDdiZXhwXzAwN2RfMDAyOS01NDYiPjwvYT5UaGlzIGlzIGEgc3lub255bSBmb3IgPGNvZGU+QUxJR048L2NvZGU+LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxpbmtlcgorc2NyaXB0cy4gIEl0IGlzIG1vc3Qgb2Z0ZW4gc2VlbiB3aGVuIHNldHRpbmcgdGhlIGFkZHJlc3Mgb2YgYW4gb3V0cHV0CitzZWN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+REFUQV9TRUdNRU5UX0FMSUdOKDwvY29kZT48dmFyPm1heHBhZ2VzaXplPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5jb21tb25wYWdlc2l6ZTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LURBVEFfMDA1ZlNFR01FTlRfMDA1ZkFMSUdOXzAwMjhfMDA0MHZhcl8wMDdibWF4cGFnZXNpemVfMDA3ZF8wMDJjLV8wMDQwdmFyXzAwN2Jjb21tb25wYWdlc2l6ZV8wMDdkXzAwMjktNTQ3Ij48L2E+VGhpcyBpcyBlcXVpdmFsZW50IHRvIGVpdGhlcgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAoQUxJR04oPHZhcj5tYXhwYWdlc2l6ZTwvdmFyPikgKyAoLiAmYW1wOyAoPHZhcj5tYXhwYWdlc2l6ZTwvdmFyPiAtIDEpKSkKKzwvcHJlPgorICAgICA8cD5vcgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAoQUxJR04oPHZhcj5tYXhwYWdlc2l6ZTwvdmFyPikgKyAoLiAmYW1wOyAoPHZhcj5tYXhwYWdlc2l6ZTwvdmFyPiAtIDx2YXI+Y29tbW9ucGFnZXNpemU8L3Zhcj4pKSkKKzwvcHJlPgorICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBsYXR0ZXIgdXNlcyBmZXdlciA8dmFyPmNvbW1vbnBhZ2VzaXplPC92YXI+IHNpemVkIHBhZ2VzCitmb3IgdGhlIGRhdGEgc2VnbWVudCAoYXJlYSBiZXR3ZWVuIHRoZSByZXN1bHQgb2YgdGhpcyBleHByZXNzaW9uIGFuZAorPGNvZGU+REFUQV9TRUdNRU5UX0VORDwvY29kZT4pIHRoYW4gdGhlIGZvcm1lciBvciBub3QuIAorSWYgdGhlIGxhdHRlciBmb3JtIGlzIHVzZWQsIGl0IG1lYW5zIDx2YXI+Y29tbW9ucGFnZXNpemU8L3Zhcj4gYnl0ZXMgb2YgcnVudGltZQorbWVtb3J5IHdpbGwgYmUgc2F2ZWQgYXQgdGhlIGV4cGVuc2Ugb2YgdXAgdG8gPHZhcj5jb21tb25wYWdlc2l6ZTwvdmFyPiB3YXN0ZWQKK2J5dGVzIGluIHRoZSBvbi1kaXNrIGZpbGUuCisKKyAgICAgPHA+VGhpcyBleHByZXNzaW9uIGNhbiBvbmx5IGJlIHVzZWQgZGlyZWN0bHkgaW4gPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmRzLCBub3QgaW4KK2FueSBvdXRwdXQgc2VjdGlvbiBkZXNjcmlwdGlvbnMgYW5kIG9ubHkgb25jZSBpbiB0aGUgbGlua2VyIHNjcmlwdC4gCis8dmFyPmNvbW1vbnBhZ2VzaXplPC92YXI+IHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsIHRvIDx2YXI+bWF4cGFnZXNpemU8L3Zhcj4gYW5kIHNob3VsZAorYmUgdGhlIHN5c3RlbSBwYWdlIHNpemUgdGhlIG9iamVjdCB3YW50cyB0byBiZSBvcHRpbWl6ZWQgZm9yICh3aGlsZSBzdGlsbAord29ya2luZyBvbiBzeXN0ZW0gcGFnZSBzaXplcyB1cCB0byA8dmFyPm1heHBhZ2VzaXplPC92YXI+KS4KKworICAgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkV4YW1wbGU6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgLiA9IERBVEFfU0VHTUVOVF9BTElHTigweDEwMDAwLCAweDIwMDApOworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+REFUQV9TRUdNRU5UX0VORCg8L2NvZGU+PHZhcj5leHA8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1EQVRBXzAwNWZTRUdNRU5UXzAwNWZFTkRfMDAyOF8wMDQwdmFyXzAwN2JleHBfMDA3ZF8wMDI5LTU0OCI+PC9hPlRoaXMgZGVmaW5lcyB0aGUgZW5kIG9mIGRhdGEgc2VnbWVudCBmb3IgPGNvZGU+REFUQV9TRUdNRU5UX0FMSUdOPC9jb2RlPgorZXZhbHVhdGlvbiBwdXJwb3Nlcy4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgIC4gPSBEQVRBX1NFR01FTlRfRU5EKC4pOworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+REFUQV9TRUdNRU5UX1JFTFJPX0VORCg8L2NvZGU+PHZhcj5vZmZzZXQ8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmV4cDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LURBVEFfMDA1ZlNFR01FTlRfMDA1ZlJFTFJPXzAwNWZFTkRfMDAyOF8wMDQwdmFyXzAwN2JvZmZzZXRfMDA3ZF8wMDJjLV8wMDQwdmFyXzAwN2JleHBfMDA3ZF8wMDI5LTU0OSI+PC9hPlRoaXMgZGVmaW5lcyB0aGUgZW5kIG9mIHRoZSA8Y29kZT5QVF9HTlVfUkVMUk88L2NvZGU+IHNlZ21lbnQgd2hlbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4teiByZWxybzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gaXMgdXNlZC4gIFNlY29uZCBhcmd1bWVudCBpcyByZXR1cm5lZC4gCitXaGVuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXogcmVscm88L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGlzIG5vdCBwcmVzZW50LCA8Y29kZT5EQVRBX1NFR01FTlRfUkVMUk9fRU5EPC9jb2RlPgorZG9lcyBub3RoaW5nLCBvdGhlcndpc2UgPGNvZGU+REFUQV9TRUdNRU5UX0FMSUdOPC9jb2RlPiBpcyBwYWRkZWQgc28gdGhhdAorPHZhcj5leHA8L3Zhcj4gKyA8dmFyPm9mZnNldDwvdmFyPiBpcyBhbGlnbmVkIHRvIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgcGFnZQorYm91bmRhcnkgZm9yIHBhcnRpY3VsYXIgdGFyZ2V0LiAgSWYgcHJlc2VudCBpbiB0aGUgbGlua2VyIHNjcmlwdCwKK2l0IG11c3QgYWx3YXlzIGNvbWUgaW4gYmV0d2VlbiA8Y29kZT5EQVRBX1NFR01FTlRfQUxJR048L2NvZGU+IGFuZAorPGNvZGU+REFUQV9TRUdNRU5UX0VORDwvY29kZT4uCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAuID0gREFUQV9TRUdNRU5UX1JFTFJPX0VORCgyNCwgLik7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5ERUZJTkVEKDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LURFRklORURfMDAyOF8wMDQwdmFyXzAwN2JzeW1ib2xfMDA3ZF8wMDI5LTU1MCI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bWJvbC1kZWZhdWx0cy01NTEiPjwvYT5SZXR1cm4gMSBpZiA8dmFyPnN5bWJvbDwvdmFyPiBpcyBpbiB0aGUgbGlua2VyIGdsb2JhbCBzeW1ib2wgdGFibGUgYW5kIGlzCitkZWZpbmVkIGJlZm9yZSB0aGUgc3RhdGVtZW50IHVzaW5nIERFRklORUQgaW4gdGhlIHNjcmlwdCwgb3RoZXJ3aXNlCityZXR1cm4gMC4gIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gcHJvdmlkZQorZGVmYXVsdCB2YWx1ZXMgZm9yIHN5bWJvbHMuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzY3JpcHQgZnJhZ21lbnQKK3Nob3dzIGhvdyB0byBzZXQgYSBnbG9iYWwgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YmVnaW48L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gdGhlIGZpcnN0IGxvY2F0aW9uIGluCit0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uJm1kYXNoO2J1dCBpZiBhIHN5bWJvbCBjYWxsZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iZWdpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbHJlYWR5CitleGlzdGVkLCBpdHMgdmFsdWUgaXMgcHJlc2VydmVkOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIFNFQ1RJT05TIHsgLi4uCisgICAgICAgICAgICAudGV4dCA6IHsKKyAgICAgICAgICAgICAgYmVnaW4gPSBERUZJTkVEKGJlZ2luKSA/IGJlZ2luIDogLiA7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgfQorICAgICAgICAgICAgLi4uCisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+TEVOR1RIKDwvY29kZT48dmFyPm1lbW9yeTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUxFTkdUSF8wMDI4XzAwNDB2YXJfMDA3Ym1lbW9yeV8wMDdkXzAwMjktNTUyIj48L2E+UmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG1lbW9yeSByZWdpb24gbmFtZWQgPHZhcj5tZW1vcnk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5MT0FEQUREUig8L2NvZGU+PHZhcj5zZWN0aW9uPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTE9BREFERFJfMDAyOF8wMDQwdmFyXzAwN2JzZWN0aW9uXzAwN2RfMDAyOS01NTMiPjwvYT48YSBuYW1lPSJpbmRleC1zZWN0aW9uLWxvYWQtYWRkcmVzcy1pbi1leHByZXNzaW9uLTU1NCI+PC9hPlJldHVybiB0aGUgYWJzb2x1dGUgTE1BIG9mIHRoZSBuYW1lZCA8dmFyPnNlY3Rpb248L3Zhcj4uICAoc2VlIDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI091dHB1dC1TZWN0aW9uLUxNQSI+T3V0cHV0IFNlY3Rpb24gTE1BPC9hPikuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtTUFYLTU1NSI+PC9hPjxicj48ZHQ+PGNvZGU+TUFYKDwvY29kZT48dmFyPmV4cDE8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmV4cDI8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD5SZXR1cm5zIHRoZSBtYXhpbXVtIG9mIDx2YXI+ZXhwMTwvdmFyPiBhbmQgPHZhcj5leHAyPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LU1JTi01NTYiPjwvYT48YnI+PGR0Pjxjb2RlPk1JTig8L2NvZGU+PHZhcj5leHAxPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5leHAyPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+UmV0dXJucyB0aGUgbWluaW11bSBvZiA8dmFyPmV4cDE8L3Zhcj4gYW5kIDx2YXI+ZXhwMjwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPk5FWFQoPC9jb2RlPjx2YXI+ZXhwPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTkVYVF8wMDI4XzAwNDB2YXJfMDA3YmV4cF8wMDdkXzAwMjktNTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtdW5hbGxvY2F0ZWQtYWRkcmVzc18wMDJjLW5leHQtNTU4Ij48L2E+UmV0dXJuIHRoZSBuZXh0IHVuYWxsb2NhdGVkIGFkZHJlc3MgdGhhdCBpcyBhIG11bHRpcGxlIG9mIDx2YXI+ZXhwPC92YXI+LiAKK1RoaXMgZnVuY3Rpb24gaXMgY2xvc2VseSByZWxhdGVkIHRvIDxjb2RlPkFMSUdOKDwvY29kZT48dmFyPmV4cDwvdmFyPjxjb2RlPik8L2NvZGU+OyB1bmxlc3MgeW91Cit1c2UgdGhlIDxjb2RlPk1FTU9SWTwvY29kZT4gY29tbWFuZCB0byBkZWZpbmUgZGlzY29udGludW91cyBtZW1vcnkgZm9yIHRoZQorb3V0cHV0IGZpbGUsIHRoZSB0d28gZnVuY3Rpb25zIGFyZSBlcXVpdmFsZW50LgorCisgICAgIDxicj48ZHQ+PGNvZGU+T1JJR0lOKDwvY29kZT48dmFyPm1lbW9yeTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LU9SSUdJTl8wMDI4XzAwNDB2YXJfMDA3Ym1lbW9yeV8wMDdkXzAwMjktNTU5Ij48L2E+UmV0dXJuIHRoZSBvcmlnaW4gb2YgdGhlIG1lbW9yeSByZWdpb24gbmFtZWQgPHZhcj5tZW1vcnk8L3Zhcj4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5TRUdNRU5UX1NUQVJUKDwvY29kZT48dmFyPnNlZ21lbnQ8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmRlZmF1bHQ8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1TRUdNRU5UXzAwNWZTVEFSVF8wMDI4XzAwNDB2YXJfMDA3YnNlZ21lbnRfMDA3ZF8wMDJjLV8wMDQwdmFyXzAwN2JkZWZhdWx0XzAwN2RfMDAyOS01NjAiPjwvYT5SZXR1cm4gdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgbmFtZWQgPHZhcj5zZWdtZW50PC92YXI+LiAgSWYgYW4gZXhwbGljaXQKK3ZhbHVlIGhhcyBiZWVuIGdpdmVuIGZvciB0aGlzIHNlZ21lbnQgKHdpdGggYSBjb21tYW5kLWxpbmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tVDwvc3Bhbj48L3NhbXA+JnJzcXVvOworb3B0aW9uKSB0aGF0IHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQ7IG90aGVyd2lzZSB0aGUgdmFsdWUgd2lsbCBiZQorPHZhcj5kZWZhdWx0PC92YXI+LiAgQXQgcHJlc2VudCwgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZC1saW5lIG9wdGlvbiBjYW4gb25seQorYmUgdXNlZCB0byBzZXQgdGhlIGJhc2UgYWRkcmVzcyBmb3IgdGhlICZsZHF1bzt0ZXh0JnJkcXVvOywgJmxkcXVvO2RhdGEmcmRxdW87LCBhbmQKKyZsZHF1bztic3MmcmRxdW87IHNlY3Rpb25zLCBidXQgeW91IGNhbiB1c2UgPGNvZGU+U0VHTUVOVF9TVEFSVDwvY29kZT4gd2l0aCBhbnkgc2VnbWVudAorbmFtZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPlNJWkVPRig8L2NvZGU+PHZhcj5zZWN0aW9uPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtU0laRU9GXzAwMjhfMDA0MHZhcl8wMDdic2VjdGlvbl8wMDdkXzAwMjktNTYxIj48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbi1zaXplLTU2MiI+PC9hPlJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbmFtZWQgPHZhcj5zZWN0aW9uPC92YXI+LCBpZiB0aGF0IHNlY3Rpb24gaGFzCitiZWVuIGFsbG9jYXRlZC4gIElmIHRoZSBzZWN0aW9uIGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgd2hlbiB0aGlzIGlzCitldmFsdWF0ZWQsIHRoZSBsaW5rZXIgd2lsbCByZXBvcnQgYW4gZXJyb3IuICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsCis8Y29kZT5zeW1ib2xfMTwvY29kZT4gYW5kIDxjb2RlPnN5bWJvbF8yPC9jb2RlPiBhcmUgYXNzaWduZWQgaWRlbnRpY2FsIHZhbHVlczoKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgU0VDVElPTlN7IC4uLgorICAgICAgICAgICAgLm91dHB1dCB7CisgICAgICAgICAgICAgIC5zdGFydCA9IC4gOworICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgLmVuZCA9IC4gOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW1ib2xfMSA9IC5lbmQgLSAuc3RhcnQgOworICAgICAgICAgICAgc3ltYm9sXzIgPSBTSVpFT0YoLm91dHB1dCk7CisgICAgICAgICAgLi4uIH0KKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPlNJWkVPRl9IRUFERVJTPC9jb2RlPjxkdD48Y29kZT5zaXplb2ZfaGVhZGVyczwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtU0laRU9GXzAwNWZIRUFERVJTLTU2MyI+PC9hPjxhIG5hbWU9ImluZGV4LWhlYWRlci1zaXplLTU2NCI+PC9hPlJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgb3V0cHV0IGZpbGUncyBoZWFkZXJzLiAgVGhpcyBpcworaW5mb3JtYXRpb24gd2hpY2ggYXBwZWFycyBhdCB0aGUgc3RhcnQgb2YgdGhlIG91dHB1dCBmaWxlLiAgWW91IGNhbiB1c2UKK3RoaXMgbnVtYmVyIHdoZW4gc2V0dGluZyB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgZmlyc3Qgc2VjdGlvbiwgaWYgeW91CitjaG9vc2UsIHRvIGZhY2lsaXRhdGUgcGFnaW5nLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LW5vdC1lbm91Z2gtcm9vbS1mb3ItcHJvZ3JhbS1oZWFkZXJzLTU2NSI+PC9hPjxhIG5hbWU9ImluZGV4LXByb2dyYW0taGVhZGVyc18wMDJjLW5vdC1lbm91Z2gtcm9vbS01NjYiPjwvYT5XaGVuIHByb2R1Y2luZyBhbiBFTEYgb3V0cHV0IGZpbGUsIGlmIHRoZSBsaW5rZXIgc2NyaXB0IHVzZXMgdGhlCis8Y29kZT5TSVpFT0ZfSEVBREVSUzwvY29kZT4gYnVpbHRpbiBmdW5jdGlvbiwgdGhlIGxpbmtlciBtdXN0IGNvbXB1dGUgdGhlCitudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzIGJlZm9yZSBpdCBoYXMgZGV0ZXJtaW5lZCBhbGwgdGhlIHNlY3Rpb24KK2FkZHJlc3NlcyBhbmQgc2l6ZXMuICBJZiB0aGUgbGlua2VyIGxhdGVyIGRpc2NvdmVycyB0aGF0IGl0IG5lZWRzCithZGRpdGlvbmFsIHByb2dyYW0gaGVhZGVycywgaXQgd2lsbCByZXBvcnQgYW4gZXJyb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub3QgZW5vdWdoCityb29tIGZvciBwcm9ncmFtIGhlYWRlcnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUbyBhdm9pZCB0aGlzIGVycm9yLCB5b3UgbXVzdCBhdm9pZCB1c2luZwordGhlIDxjb2RlPlNJWkVPRl9IRUFERVJTPC9jb2RlPiBmdW5jdGlvbiwgb3IgeW91IG11c3QgcmV3b3JrIHlvdXIgbGlua2VyCitzY3JpcHQgdG8gYXZvaWQgZm9yY2luZyB0aGUgbGlua2VyIHRvIHVzZSBhZGRpdGlvbmFsIHByb2dyYW0gaGVhZGVycywgb3IKK3lvdSBtdXN0IGRlZmluZSB0aGUgcHJvZ3JhbSBoZWFkZXJzIHlvdXJzZWxmIHVzaW5nIHRoZSA8Y29kZT5QSERSUzwvY29kZT4KK2NvbW1hbmQgKHNlZSA8YSBocmVmPSJQSERSUy5odG1sI1BIRFJTIj5QSERSUzwvYT4pLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0Nhbm9uaWNhbC1mb3JtYXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0Nhbm9uaWNhbC1mb3JtYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjA0NmFjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQ2Fub25pY2FsLWZvcm1hdC5odG1sCkBAIC0wLDAgKzEsMTIxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DYW5vbmljYWwgZm9ybWF0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJCRkQtb3V0bGluZS5odG1sI0JGRC1vdXRsaW5lIiB0aXRsZT0iQkZEIG91dGxpbmUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJCRkQtaW5mb3JtYXRpb24tbG9zcy5odG1sI0JGRC1pbmZvcm1hdGlvbi1sb3NzIiB0aXRsZT0iQkZEIGluZm9ybWF0aW9uIGxvc3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNhbm9uaWNhbC1mb3JtYXQiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCRkQtaW5mb3JtYXRpb24tbG9zcy5odG1sI0JGRC1pbmZvcm1hdGlvbi1sb3NzIj5CRkQgaW5mb3JtYXRpb24gbG9zczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkJGRC1vdXRsaW5lLmh0bWwjQkZELW91dGxpbmUiPkJGRCBvdXRsaW5lPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+NS4xLjIgVGhlIEJGRCBjYW5vbmljYWwgb2JqZWN0LWZpbGUgZm9ybWF0PC9oND4KKworPHA+VGhlIGdyZWF0ZXN0IHBvdGVudGlhbCBmb3IgbG9zcyBvZiBpbmZvcm1hdGlvbiBvY2N1cnMgd2hlbiB0aGVyZSBpcyB0aGUgbGVhc3QKK292ZXJsYXAgYmV0d2VlbiB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIHNvdXJjZSBmb3JtYXQsIHRoYXQKK3N0b3JlZCBieSB0aGUgY2Fub25pY2FsIGZvcm1hdCwgYW5kIHRoYXQgbmVlZGVkIGJ5IHRoZQorZGVzdGluYXRpb24gZm9ybWF0LiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBjYW5vbmljYWwgZm9ybSBtYXkgaGVscAoreW91IHVuZGVyc3RhbmQgd2hpY2gga2luZHMgb2YgZGF0YSB5b3UgY2FuIGNvdW50IG9uIHByZXNlcnZpbmcgYWNyb3NzCitjb252ZXJzaW9ucy4gCis8YSBuYW1lPSJpbmRleC1CRkQtY2Fub25pY2FsLWZvcm1hdC03MDQiPjwvYT48YSBuYW1lPSJpbmRleC1pbnRlcm5hbC1vYmplY3RfMDAyZGZpbGUtZm9ybWF0LTcwNSI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PGVtPmZpbGVzPC9lbT48ZGQ+SW5mb3JtYXRpb24gc3RvcmVkIG9uIGEgcGVyLWZpbGUgYmFzaXMgaW5jbHVkZXMgdGFyZ2V0IG1hY2hpbmUKK2FyY2hpdGVjdHVyZSwgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBmb3JtYXQgdHlwZSwgYSBkZW1hbmQgcGFnZWFibGUKK2JpdCwgYW5kIGEgd3JpdGUgcHJvdGVjdGVkIGJpdC4gIEluZm9ybWF0aW9uIGxpa2UgVW5peCBtYWdpYyBudW1iZXJzIGlzCitub3Qgc3RvcmVkIGhlcmUmbWRhc2g7b25seSB0aGUgbWFnaWMgbnVtYmVycycgbWVhbmluZywgc28gYSA8Y29kZT5aTUFHSUM8L2NvZGU+CitmaWxlIHdvdWxkIGhhdmUgYm90aCB0aGUgZGVtYW5kIHBhZ2VhYmxlIGJpdCBhbmQgdGhlIHdyaXRlIHByb3RlY3RlZAordGV4dCBiaXQgc2V0LiAgVGhlIGJ5dGUgb3JkZXIgb2YgdGhlIHRhcmdldCBpcyBzdG9yZWQgb24gYSBwZXItZmlsZQorYmFzaXMsIHNvIHRoYXQgYmlnLSBhbmQgbGl0dGxlLWVuZGlhbiBvYmplY3QgZmlsZXMgbWF5IGJlIHVzZWQgd2l0aCBvbmUKK2Fub3RoZXIuCisKKyAgICAgPGJyPjxkdD48ZW0+c2VjdGlvbnM8L2VtPjxkZD5FYWNoIHNlY3Rpb24gaW4gdGhlIGlucHV0IGZpbGUgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24sIHRoZQorc2VjdGlvbidzIG9yaWdpbmFsIGFkZHJlc3MgaW4gdGhlIG9iamVjdCBmaWxlLCBzaXplIGFuZCBhbGlnbm1lbnQKK2luZm9ybWF0aW9uLCB2YXJpb3VzIGZsYWdzLCBhbmQgcG9pbnRlcnMgaW50byBvdGhlciBCRkQgZGF0YQorc3RydWN0dXJlcy4KKworICAgICA8YnI+PGR0PjxlbT5zeW1ib2xzPC9lbT48ZGQ+RWFjaCBzeW1ib2wgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG9iamVjdCBmaWxlCit3aGljaCBvcmlnaW5hbGx5IGRlZmluZWQgaXQsIGl0cyBuYW1lLCBpdHMgdmFsdWUsIGFuZCB2YXJpb3VzIGZsYWcKK2JpdHMuICBXaGVuIGEgQkZEIGJhY2sgZW5kIHJlYWRzIGluIGEgc3ltYm9sIHRhYmxlLCBpdCByZWxvY2F0ZXMgYWxsCitzeW1ib2xzIHRvIG1ha2UgdGhlbSByZWxhdGl2ZSB0byB0aGUgYmFzZSBvZiB0aGUgc2VjdGlvbiB3aGVyZSB0aGV5IHdlcmUKK2RlZmluZWQuICBEb2luZyB0aGlzIGVuc3VyZXMgdGhhdCBlYWNoIHN5bWJvbCBwb2ludHMgdG8gaXRzIGNvbnRhaW5pbmcKK3NlY3Rpb24uICBFYWNoIHN5bWJvbCBhbHNvIGhhcyBhIHZhcnlpbmcgYW1vdW50IG9mIGhpZGRlbiBwcml2YXRlIGRhdGEKK2ZvciB0aGUgQkZEIGJhY2sgZW5kLiAgU2luY2UgdGhlIHN5bWJvbCBwb2ludHMgdG8gdGhlIG9yaWdpbmFsIGZpbGUsIHRoZQorcHJpdmF0ZSBkYXRhIGZvcm1hdCBmb3IgdGhhdCBzeW1ib2wgaXMgYWNjZXNzaWJsZS4gIDxjb2RlPmxkPC9jb2RlPiBjYW4KK29wZXJhdGUgb24gYSBjb2xsZWN0aW9uIG9mIHN5bWJvbHMgb2Ygd2lsZGx5IGRpZmZlcmVudCBmb3JtYXRzIHdpdGhvdXQKK3Byb2JsZW1zLgorCisgICAgIDxwPk5vcm1hbCBnbG9iYWwgYW5kIHNpbXBsZSBsb2NhbCBzeW1ib2xzIGFyZSBtYWludGFpbmVkIG9uIG91dHB1dCwgc28gYW4KK291dHB1dCBmaWxlIChubyBtYXR0ZXIgaXRzIGZvcm1hdCkgd2lsbCByZXRhaW4gc3ltYm9scyBwb2ludGluZyB0bworZnVuY3Rpb25zIGFuZCB0byBnbG9iYWwsIHN0YXRpYywgYW5kIGNvbW1vbiB2YXJpYWJsZXMuICBTb21lIHN5bWJvbAoraW5mb3JtYXRpb24gaXMgbm90IHdvcnRoIHJldGFpbmluZzsgaW4gPGNvZGU+YS5vdXQ8L2NvZGU+LCB0eXBlIGluZm9ybWF0aW9uIGlzCitzdG9yZWQgaW4gdGhlIHN5bWJvbCB0YWJsZSBhcyBsb25nIHN5bWJvbCBuYW1lcy4gIFRoaXMgaW5mb3JtYXRpb24gd291bGQKK2JlIHVzZWxlc3MgdG8gbW9zdCBDT0ZGIGRlYnVnZ2VyczsgdGhlIGxpbmtlciBoYXMgY29tbWFuZCBsaW5lIHN3aXRjaGVzCit0byBhbGxvdyB1c2VycyB0byB0aHJvdyBpdCBhd2F5LgorCisgICAgIDxwPlRoZXJlIGlzIG9uZSB3b3JkIG9mIHR5cGUgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBzeW1ib2wsIHNvIGlmIHRoZQorZm9ybWF0IHN1cHBvcnRzIHN5bWJvbCB0eXBlIGluZm9ybWF0aW9uIHdpdGhpbiBzeW1ib2xzIChmb3IgZXhhbXBsZSwgQ09GRiwKK0lFRUUsIE9hc3lzKSBhbmQgdGhlIHR5cGUgaXMgc2ltcGxlIGVub3VnaCB0byBmaXQgd2l0aGluIG9uZSB3b3JkCisobmVhcmx5IGV2ZXJ5dGhpbmcgYnV0IGFnZ3JlZ2F0ZXMpLCB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSBwcmVzZXJ2ZWQuCisKKyAgICAgPGJyPjxkdD48ZW0+cmVsb2NhdGlvbiBsZXZlbDwvZW0+PGRkPkVhY2ggY2Fub25pY2FsIEJGRCByZWxvY2F0aW9uIHJlY29yZCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIHN5bWJvbCB0bworcmVsb2NhdGUgdG8sIHRoZSBvZmZzZXQgb2YgdGhlIGRhdGEgdG8gcmVsb2NhdGUsIHRoZSBzZWN0aW9uIHRoZSBkYXRhCitpcyBpbiwgYW5kIGEgcG9pbnRlciB0byBhIHJlbG9jYXRpb24gdHlwZSBkZXNjcmlwdG9yLiBSZWxvY2F0aW9uIGlzCitwZXJmb3JtZWQgYnkgcGFzc2luZyBtZXNzYWdlcyB0aHJvdWdoIHRoZSByZWxvY2F0aW9uIHR5cGUKK2Rlc2NyaXB0b3IgYW5kIHRoZSBzeW1ib2wgcG9pbnRlci4gVGhlcmVmb3JlLCByZWxvY2F0aW9ucyBjYW4gYmUgcGVyZm9ybWVkCitvbiBvdXRwdXQgZGF0YSB1c2luZyBhIHJlbG9jYXRpb24gbWV0aG9kIHRoYXQgaXMgb25seSBhdmFpbGFibGUgaW4gb25lIG9mIHRoZQoraW5wdXQgZm9ybWF0cy4gRm9yIGluc3RhbmNlLCBPYXN5cyBwcm92aWRlcyBhIGJ5dGUgcmVsb2NhdGlvbiBmb3JtYXQuIAorQSByZWxvY2F0aW9uIHJlY29yZCByZXF1ZXN0aW5nIHRoaXMgcmVsb2NhdGlvbiB0eXBlIHdvdWxkIHBvaW50CitpbmRpcmVjdGx5IHRvIGEgcm91dGluZSB0byBwZXJmb3JtIHRoaXMsIHNvIHRoZSByZWxvY2F0aW9uIG1heSBiZQorcGVyZm9ybWVkIG9uIGEgYnl0ZSBiZWluZyB3cml0dGVuIHRvIGEgNjhrIENPRkYgZmlsZSwgZXZlbiB0aG91Z2ggNjhrIENPRkYKK2hhcyBubyBzdWNoIHJlbG9jYXRpb24gdHlwZS4KKworICAgICA8YnI+PGR0PjxlbT5saW5lIG51bWJlcnM8L2VtPjxkZD5PYmplY3QgZm9ybWF0cyBjYW4gY29udGFpbiwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgc29tZSBmb3JtIG9mIG1hcHBpbmcKK2JldHdlZW4gc3ltYm9scywgc291cmNlIGxpbmUgbnVtYmVycywgYW5kIGFkZHJlc3NlcyBpbiB0aGUgb3V0cHV0IGZpbGUuIAorVGhlc2UgYWRkcmVzc2VzIGhhdmUgdG8gYmUgcmVsb2NhdGVkIGFsb25nIHdpdGggdGhlIHN5bWJvbCBpbmZvcm1hdGlvbi4gCitFYWNoIHN5bWJvbCB3aXRoIGFuIGFzc29jaWF0ZWQgbGlzdCBvZiBsaW5lIG51bWJlciByZWNvcmRzIHBvaW50cyB0byB0aGUKK2ZpcnN0IHJlY29yZCBvZiB0aGUgbGlzdC4gIFRoZSBoZWFkIG9mIGEgbGluZSBudW1iZXIgbGlzdCBjb25zaXN0cyBvZiBhCitwb2ludGVyIHRvIHRoZSBzeW1ib2wsIHdoaWNoIGFsbG93cyBmaW5kaW5nIG91dCB0aGUgYWRkcmVzcyBvZiB0aGUKK2Z1bmN0aW9uIHdob3NlIGxpbmUgbnVtYmVyIGlzIGJlaW5nIGRlc2NyaWJlZC4gVGhlIHJlc3Qgb2YgdGhlIGxpc3QgaXMKK21hZGUgdXAgb2YgcGFpcnM6IG9mZnNldHMgaW50byB0aGUgc2VjdGlvbiBhbmQgbGluZSBudW1iZXJzLiBBbnkgZm9ybWF0Cit3aGljaCBjYW4gc2ltcGx5IGRlcml2ZSB0aGlzIGluZm9ybWF0aW9uIGNhbiBwYXNzIGl0IHN1Y2Nlc3NmdWxseQorYmV0d2VlbiBmb3JtYXRzIChDT0ZGLCBJRUVFIGFuZCBPYXN5cykuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQ29uc3RhbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9Db25zdGFudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzdjZjAzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvQ29uc3RhbnRzLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29uc3RhbnRzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIiB0aXRsZT0iRXhwcmVzc2lvbnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTeW1ib2xpYy1Db25zdGFudHMuaHRtbCNTeW1ib2xpYy1Db25zdGFudHMiIHRpdGxlPSJTeW1ib2xpYyBDb25zdGFudHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvbnN0YW50cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTeW1ib2xpYy1Db25zdGFudHMuaHRtbCNTeW1ib2xpYy1Db25zdGFudHMiPlN5bWJvbGljIENvbnN0YW50czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xMC4xIENvbnN0YW50czwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWludGVnZXItbm90YXRpb24tNDk5Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29uc3RhbnRzLWluLWxpbmtlci1zY3JpcHRzLTUwMCI+PC9hPkFsbCBjb25zdGFudHMgYXJlIGludGVnZXJzLgorCisgICA8cD5BcyBpbiBDLCB0aGUgbGlua2VyIGNvbnNpZGVycyBhbiBpbnRlZ2VyIGJlZ2lubmluZyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBiZQorb2N0YWwsIGFuZCBhbiBpbnRlZ2VyIGJlZ2lubmluZyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MHg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wWDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBiZQoraGV4YWRlY2ltYWwuICBBbHRlcm5hdGl2ZWx5IHRoZSBsaW5rZXIgYWNjZXB0cyBzdWZmaXhlcyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+SDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgaGV4YWRlY2lhbWwsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk88L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIG9jdGFsLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Qjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgYmluYXJ5IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5EPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBkZWNpbWFsLiAgQW55IGludGVnZXIKK3ZhbHVlIHdpdGhvdXQgYSBwcmVmaXggb3IgYSBzdWZmaXggaXMgY29uc2lkZXJlZCB0byBiZSBkZWNpbWFsLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1zY2FsZWQtaW50ZWdlcnMtNTAxIj48L2E+PGEgbmFtZT0iaW5kZXgtSy1hbmQtTS1pbnRlZ2VyLXN1ZmZpeGVzLTUwMiI+PC9hPjxhIG5hbWU9ImluZGV4LU0tYW5kLUstaW50ZWdlci1zdWZmaXhlcy01MDMiPjwvYT48YSBuYW1lPSJpbmRleC1zdWZmaXhlcy1mb3ItaW50ZWdlcnMtNTA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW50ZWdlci1zdWZmaXhlcy01MDUiPjwvYT5JbiBhZGRpdGlvbiwgeW91IGNhbiB1c2UgdGhlIHN1ZmZpeGVzIDxjb2RlPks8L2NvZGU+IGFuZCA8Y29kZT5NPC9jb2RlPiB0byBzY2FsZSBhCitjb25zdGFudCBieQorPCEtLSBURVhJMlJPRkYtS0lMTCAtLT4KKzwhLS0gRU5EIFRFWEkyUk9GRi1LSUxMIC0tPgorPGNvZGU+MTAyNDwvY29kZT4gb3IgPGNvZGU+MTAyNCoxMDI0PC9jb2RlPgorPCEtLSBURVhJMlJPRkYtS0lMTCAtLT4KKzwhLS0gRU5EIFRFWEkyUk9GRi1LSUxMIC0tPgorcmVzcGVjdGl2ZWx5LiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcKK2FsbCByZWZlciB0byB0aGUgc2FtZSBxdWFudGl0eToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIF9mb3Vya18xID0gNEs7CisgICAgIF9mb3Vya18yID0gNDA5NjsKKyAgICAgX2ZvdXJrXzMgPSAweDEwMDA7CisgICAgIF9mb3Vya180ID0gMTAwMDBvOworPC9wcmU+CisgICA8cD5Ob3RlIC0gdGhlIDxjb2RlPks8L2NvZGU+IGFuZCA8Y29kZT5NPC9jb2RlPiBzdWZmaXhlcyBjYW5ub3QgYmUgdXNlZCBpbgorY29uanVuY3Rpb24gd2l0aCB0aGUgYmFzZSBzdWZmaXhlcyBtZW50aW9uZWQgYWJvdmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0VudHJ5LVBvaW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9FbnRyeS1Qb2ludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOTM2MzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9FbnRyeS1Qb2ludC5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVudHJ5IFBvaW50IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTaW1wbGUtQ29tbWFuZHMuaHRtbCNTaW1wbGUtQ29tbWFuZHMiIHRpdGxlPSJTaW1wbGUgQ29tbWFuZHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjRmlsZS1Db21tYW5kcyIgdGl0bGU9IkZpbGUgQ29tbWFuZHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVudHJ5LVBvaW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNGaWxlLUNvbW1hbmRzIj5GaWxlIENvbW1hbmRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU2ltcGxlLUNvbW1hbmRzLmh0bWwjU2ltcGxlLUNvbW1hbmRzIj5TaW1wbGUgQ29tbWFuZHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjQuMSBTZXR0aW5nIHRoZSBFbnRyeSBQb2ludDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LUVOVFJZXzAwMjhfMDA0MHZhcl8wMDdic3ltYm9sXzAwN2RfMDAyOS0zNDgiPjwvYT48YSBuYW1lPSJpbmRleC1zdGFydC1vZi1leGVjdXRpb24tMzQ5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZmlyc3QtaW5zdHJ1Y3Rpb24tMzUwIj48L2E+PGEgbmFtZT0iaW5kZXgtZW50cnktcG9pbnQtMzUxIj48L2E+VGhlIGZpcnN0IGluc3RydWN0aW9uIHRvIGV4ZWN1dGUgaW4gYSBwcm9ncmFtIGlzIGNhbGxlZCB0aGUgPGRmbj5lbnRyeQorcG9pbnQ8L2Rmbj4uICBZb3UgY2FuIHVzZSB0aGUgPGNvZGU+RU5UUlk8L2NvZGU+IGxpbmtlciBzY3JpcHQgY29tbWFuZCB0byBzZXQgdGhlCitlbnRyeSBwb2ludC4gIFRoZSBhcmd1bWVudCBpcyBhIHN5bWJvbCBuYW1lOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIEVOVFJZKDx2YXI+c3ltYm9sPC92YXI+KQorPC9wcmU+CisgICA8cD5UaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIHNldCB0aGUgZW50cnkgcG9pbnQuICBUaGUgbGlua2VyIHdpbGwgc2V0IHRoZQorZW50cnkgcG9pbnQgYnkgdHJ5aW5nIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIG9yZGVyLCBhbmQKK3N0b3BwaW5nIHdoZW4gb25lIG9mIHRoZW0gc3VjY2VlZHM6CisgICAgIDx1bD4KKzxsaT50aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyA8dmFyPmVudHJ5PC92YXI+IGNvbW1hbmQtbGluZSBvcHRpb247Cis8bGk+dGhlIDxjb2RlPkVOVFJZKDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPik8L2NvZGU+IGNvbW1hbmQgaW4gYSBsaW5rZXIgc2NyaXB0OworPGxpPnRoZSB2YWx1ZSBvZiBhIHRhcmdldCBzcGVjaWZpYyBzeW1ib2wsIGlmIGl0IGlzIGRlZmluZWQ7ICBGb3IgbWFueQordGFyZ2V0cyB0aGlzIGlzIDxjb2RlPnN0YXJ0PC9jb2RlPiwgYnV0IFBFIGFuZCBCZU9TIGJhc2VkIHN5c3RlbXMgZm9yIGV4YW1wbGUKK2NoZWNrIGEgbGlzdCBvZiBwb3NzaWJsZSBlbnRyeSBzeW1ib2xzLCBtYXRjaGluZyB0aGUgZmlyc3Qgb25lIGZvdW5kLiAKKzxsaT50aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLCBpZiBwcmVzZW50OworPGxpPlRoZSBhZGRyZXNzIDxjb2RlPjA8L2NvZGU+LiAKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0Vudmlyb25tZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9FbnZpcm9ubWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MmQxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9FbnZpcm9ubWVudC5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkVudmlyb25tZW50IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiIgdGl0bGU9Ikludm9jYXRpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyIgdGl0bGU9Ik9wdGlvbnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkVudmlyb25tZW50Ij48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+SW52b2NhdGlvbjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMiBFbnZpcm9ubWVudCBWYXJpYWJsZXM8L2gzPgorCis8IS0tIG1hbiBiZWdpbiBFTlZJUk9OTUVOVCAtLT4KKzxwPllvdSBjYW4gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gd2l0aCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCis8Y29kZT5HTlVUQVJHRVQ8L2NvZGU+LAorPGNvZGU+TERFTVVMQVRJT048L2NvZGU+IGFuZCA8Y29kZT5DT0xMRUNUX05PX0RFTUFOR0xFPC9jb2RlPi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtR05VVEFSR0VULTMzMyI+PC9hPjxhIG5hbWU9ImluZGV4LWRlZmF1bHQtaW5wdXQtZm9ybWF0LTMzNCI+PC9hPjxjb2RlPkdOVVRBUkdFVDwvY29kZT4gZGV0ZXJtaW5lcyB0aGUgaW5wdXQtZmlsZSBvYmplY3QgZm9ybWF0IGlmIHlvdSBkb24ndAordXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKG9yIGl0cyBzeW5vbnltICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1mb3JtYXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAgSXRzIHZhbHVlIHNob3VsZCBiZSBvbmUKK29mIHRoZSBCRkQgbmFtZXMgZm9yIGFuIGlucHV0IGZvcm1hdCAoc2VlIDxhIGhyZWY9IkJGRC5odG1sI0JGRCI+QkZEPC9hPikuICBJZiB0aGVyZSBpcyBubworPGNvZGU+R05VVEFSR0VUPC9jb2RlPiBpbiB0aGUgZW52aXJvbm1lbnQsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHVzZXMgdGhlIG5hdHVyYWwgZm9ybWF0CitvZiB0aGUgdGFyZ2V0LiBJZiA8Y29kZT5HTlVUQVJHRVQ8L2NvZGU+IGlzIHNldCB0byA8Y29kZT5kZWZhdWx0PC9jb2RlPiB0aGVuIEJGRAorYXR0ZW1wdHMgdG8gZGlzY292ZXIgdGhlIGlucHV0IGZvcm1hdCBieSBleGFtaW5pbmcgYmluYXJ5IGlucHV0IGZpbGVzOwordGhpcyBtZXRob2Qgb2Z0ZW4gc3VjY2VlZHMsIGJ1dCB0aGVyZSBhcmUgcG90ZW50aWFsIGFtYmlndWl0aWVzLCBzaW5jZQordGhlcmUgaXMgbm8gbWV0aG9kIG9mIGVuc3VyaW5nIHRoYXQgdGhlIG1hZ2ljIG51bWJlciB1c2VkIHRvIHNwZWNpZnkKK29iamVjdC1maWxlIGZvcm1hdHMgaXMgdW5pcXVlLiAgSG93ZXZlciwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VkdXJlIGZvcgorQkZEIG9uIGVhY2ggc3lzdGVtIHBsYWNlcyB0aGUgY29udmVudGlvbmFsIGZvcm1hdCBmb3IgdGhhdCBzeXN0ZW0gZmlyc3QKK2luIHRoZSBzZWFyY2gtbGlzdCwgc28gYW1iaWd1aXRpZXMgYXJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvbnZlbnRpb24uCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUxERU1VTEFUSU9OLTMzNSI+PC9hPjxhIG5hbWU9ImluZGV4LWRlZmF1bHQtZW11bGF0aW9uLTMzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWVtdWxhdGlvbl8wMDJjLWRlZmF1bHQtMzM3Ij48L2E+PGNvZGU+TERFTVVMQVRJT048L2NvZGU+IGRldGVybWluZXMgdGhlIGRlZmF1bHQgZW11bGF0aW9uIGlmIHlvdSBkb24ndCB1c2UgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbi4gIFRoZSBlbXVsYXRpb24gY2FuIGFmZmVjdCB2YXJpb3VzIGFzcGVjdHMgb2YgbGlua2VyCitiZWhhdmlvdXIsIHBhcnRpY3VsYXJseSB0aGUgZGVmYXVsdCBsaW5rZXIgc2NyaXB0LiAgWW91IGNhbiBsaXN0IHRoZQorYXZhaWxhYmxlIGVtdWxhdGlvbnMgd2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXZlcmJvc2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tVjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zLiAgSWYKK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpcyBub3QgdXNlZCwgYW5kIHRoZSA8Y29kZT5MREVNVUxBVElPTjwvY29kZT4gZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZGVmYXVsdCBlbXVsYXRpb24gZGVwZW5kcyB1cG9uIGhvdyB0aGUKK2xpbmtlciB3YXMgY29uZmlndXJlZC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtQ09MTEVDVF8wMDVmTk9fMDA1ZkRFTUFOR0xFLTMzOCI+PC9hPjxhIG5hbWU9ImluZGV4LWRlbWFuZ2xpbmdfMDAyYy1kZWZhdWx0LTMzOSI+PC9hPk5vcm1hbGx5LCB0aGUgbGlua2VyIHdpbGwgZGVmYXVsdCB0byBkZW1hbmdsaW5nIHN5bWJvbHMuICBIb3dldmVyLCBpZgorPGNvZGU+Q09MTEVDVF9OT19ERU1BTkdMRTwvY29kZT4gaXMgc2V0IGluIHRoZSBlbnZpcm9ubWVudCwgdGhlbiBpdCB3aWxsCitkZWZhdWx0IHRvIG5vdCBkZW1hbmdsaW5nIHN5bWJvbHMuICBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQgaW4KK2Egc2ltaWxhciBmYXNoaW9uIGJ5IHRoZSA8Y29kZT5nY2M8L2NvZGU+IGxpbmtlciB3cmFwcGVyIHByb2dyYW0uICBUaGUgZGVmYXVsdAorbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1kZW1hbmdsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLWRlbWFuZ2xlPC9zcGFuPjwvc2FtcD4mcnNxdW87CitvcHRpb25zLgorCis8IS0tIG1hbiBlbmQgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9FdmFsdWF0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9FdmFsdWF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4YWNkNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0V2YWx1YXRpb24uaHRtbApAQCAtMCwwICsxLDg1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FdmFsdWF0aW9uIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIiB0aXRsZT0iRXhwcmVzc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiIHRpdGxlPSJPcGVyYXRvcnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJFeHByZXNzaW9uLVNlY3Rpb24uaHRtbCNFeHByZXNzaW9uLVNlY3Rpb24iIHRpdGxlPSJFeHByZXNzaW9uIFNlY3Rpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkV2YWx1YXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRXhwcmVzc2lvbi1TZWN0aW9uLmh0bWwjRXhwcmVzc2lvbi1TZWN0aW9uIj5FeHByZXNzaW9uIFNlY3Rpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiPk9wZXJhdG9yczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xMC43IEV2YWx1YXRpb248L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1sYXp5LWV2YWx1YXRpb24tNTI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXhwcmVzc2lvbi1ldmFsdWF0aW9uLW9yZGVyLTUyNiI+PC9hPlRoZSBsaW5rZXIgZXZhbHVhdGVzIGV4cHJlc3Npb25zIGxhemlseS4gIEl0IG9ubHkgY29tcHV0ZXMgdGhlIHZhbHVlIG9mCithbiBleHByZXNzaW9uIHdoZW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuCisKKyAgIDxwPlRoZSBsaW5rZXIgbmVlZHMgc29tZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdmFsdWUgb2YgdGhlIHN0YXJ0CithZGRyZXNzIG9mIHRoZSBmaXJzdCBzZWN0aW9uLCBhbmQgdGhlIG9yaWdpbnMgYW5kIGxlbmd0aHMgb2YgbWVtb3J5CityZWdpb25zLCBpbiBvcmRlciB0byBkbyBhbnkgbGlua2luZyBhdCBhbGwuICBUaGVzZSB2YWx1ZXMgYXJlIGNvbXB1dGVkCithcyBzb29uIGFzIHBvc3NpYmxlIHdoZW4gdGhlIGxpbmtlciByZWFkcyBpbiB0aGUgbGlua2VyIHNjcmlwdC4KKworICAgPHA+SG93ZXZlciwgb3RoZXIgdmFsdWVzIChzdWNoIGFzIHN5bWJvbCB2YWx1ZXMpIGFyZSBub3Qga25vd24gb3IgbmVlZGVkCit1bnRpbCBhZnRlciBzdG9yYWdlIGFsbG9jYXRpb24uICBTdWNoIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGxhdGVyLCB3aGVuCitvdGhlciBpbmZvcm1hdGlvbiAoc3VjaCBhcyB0aGUgc2l6ZXMgb2Ygb3V0cHV0IHNlY3Rpb25zKSBpcyBhdmFpbGFibGUKK2ZvciB1c2UgaW4gdGhlIHN5bWJvbCBhc3NpZ25tZW50IGV4cHJlc3Npb24uCisKKyAgIDxwPlRoZSBzaXplcyBvZiBzZWN0aW9ucyBjYW5ub3QgYmUga25vd24gdW50aWwgYWZ0ZXIgYWxsb2NhdGlvbiwgc28KK2Fzc2lnbm1lbnRzIGRlcGVuZGVudCB1cG9uIHRoZXNlIGFyZSBub3QgcGVyZm9ybWVkIHVudGlsIGFmdGVyCithbGxvY2F0aW9uLgorCisgICA8cD5Tb21lIGV4cHJlc3Npb25zLCBzdWNoIGFzIHRob3NlIGRlcGVuZGluZyB1cG9uIHRoZSBsb2NhdGlvbiBjb3VudGVyCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzssIG11c3QgYmUgZXZhbHVhdGVkIGR1cmluZyBzZWN0aW9uIGFsbG9jYXRpb24uCisKKyAgIDxwPklmIHRoZSByZXN1bHQgb2YgYW4gZXhwcmVzc2lvbiBpcyByZXF1aXJlZCwgYnV0IHRoZSB2YWx1ZSBpcyBub3QKK2F2YWlsYWJsZSwgdGhlbiBhbiBlcnJvciByZXN1bHRzLiAgRm9yIGV4YW1wbGUsIGEgc2NyaXB0IGxpa2UgdGhlCitmb2xsb3dpbmcKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBTRUNUSU9OUworICAgICAgIHsKKyAgICAgICAgIC50ZXh0IDkrdGhpc19pc250X2NvbnN0YW50IDoKKyAgICAgICAgICAgeyAqKC50ZXh0KSB9CisgICAgICAgfQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPndpbGwgY2F1c2UgdGhlIGVycm9yIG1lc3NhZ2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub24gY29uc3RhbnQgZXhwcmVzc2lvbiBmb3IgaW5pdGlhbAorYWRkcmVzczwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRXhwcmVzc2lvbi1TZWN0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9FeHByZXNzaW9uLVNlY3Rpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdlN2EwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRXhwcmVzc2lvbi1TZWN0aW9uLmh0bWwKQEAgLTAsMCArMSwxMzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkV4cHJlc3Npb24gU2VjdGlvbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyIgdGl0bGU9IkV4cHJlc3Npb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXZhbHVhdGlvbi5odG1sI0V2YWx1YXRpb24iIHRpdGxlPSJFdmFsdWF0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyIgdGl0bGU9IkJ1aWx0aW4gRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFeHByZXNzaW9uLVNlY3Rpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFdmFsdWF0aW9uLmh0bWwjRXZhbHVhdGlvbiI+RXZhbHVhdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xMC44IFRoZSBTZWN0aW9uIG9mIGFuIEV4cHJlc3Npb248L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1leHByZXNzaW9uLXNlY3Rpb25zLTUyNyI+PC9hPjxhIG5hbWU9ImluZGV4LWFic29sdXRlLWV4cHJlc3Npb25zLTUyOCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbGF0aXZlLWV4cHJlc3Npb25zLTUyOSI+PC9hPjxhIG5hbWU9ImluZGV4LWFic29sdXRlLWFuZC1yZWxvY2F0YWJsZS1zeW1ib2xzLTUzMCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbG9jYXRhYmxlLWFuZC1hYnNvbHV0ZS1zeW1ib2xzLTUzMSI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bWJvbHNfMDAyYy1yZWxvY2F0YWJsZS1hbmQtYWJzb2x1dGUtNTMyIj48L2E+QWRkcmVzc2VzIGFuZCBzeW1ib2xzIG1heSBiZSBzZWN0aW9uIHJlbGF0aXZlLCBvciBhYnNvbHV0ZS4gIEEgc2VjdGlvbgorcmVsYXRpdmUgc3ltYm9sIGlzIHJlbG9jYXRhYmxlLiAgSWYgeW91IHJlcXVlc3QgcmVsb2NhdGFibGUgb3V0cHV0Cit1c2luZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24sIGEgZnVydGhlciBsaW5rIG9wZXJhdGlvbiBtYXkgY2hhbmdlIHRoZQordmFsdWUgb2YgYSBzZWN0aW9uIHJlbGF0aXZlIHN5bWJvbC4gIE9uIHRoZSBvdGhlciBoYW5kLCBhbiBhYnNvbHV0ZQorc3ltYm9sIHdpbGwgcmV0YWluIHRoZSBzYW1lIHZhbHVlIHRocm91Z2hvdXQgYW55IGZ1cnRoZXIgbGluaworb3BlcmF0aW9ucy4KKworICAgPHA+U29tZSB0ZXJtcyBpbiBsaW5rZXIgZXhwcmVzc2lvbnMgYXJlIGFkZHJlc3Nlcy4gIFRoaXMgaXMgdHJ1ZSBvZgorc2VjdGlvbiByZWxhdGl2ZSBzeW1ib2xzIGFuZCBmb3IgYnVpbHRpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gYW4KK2FkZHJlc3MsIHN1Y2ggYXMgPGNvZGU+QUREUjwvY29kZT4sIDxjb2RlPkxPQURBRERSPC9jb2RlPiwgPGNvZGU+T1JJR0lOPC9jb2RlPiBhbmQKKzxjb2RlPlNFR01FTlRfU1RBUlQ8L2NvZGU+LiAgT3RoZXIgdGVybXMgYXJlIHNpbXBseSBudW1iZXJzLCBvciBhcmUgYnVpbHRpbgorZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEgbm9uLWFkZHJlc3MgdmFsdWUsIHN1Y2ggYXMgPGNvZGU+TEVOR1RIPC9jb2RlPi4gCitPbmUgY29tcGxpY2F0aW9uIGlzIHRoYXQgdW5sZXNzIHlvdSBzZXQgPGNvZGU+TERfRkVBVFVSRSAoIlNBTkVfRVhQUiIpPC9jb2RlPgorKHNlZSA8YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjTWlzY2VsbGFuZW91cy1Db21tYW5kcyI+TWlzY2VsbGFuZW91cyBDb21tYW5kczwvYT4pLCBudW1iZXJzIGFuZCBhYnNvbHV0ZSBzeW1ib2xzIGFyZSB0cmVhdGVkCitkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlaXIgbG9jYXRpb24sIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKK3ZlcnNpb25zIG9mIDxjb2RlPmxkPC9jb2RlPi4gIEV4cHJlc3Npb25zIGFwcGVhcmluZyBvdXRzaWRlIGFuIG91dHB1dAorc2VjdGlvbiBkZWZpbml0aW9uIHRyZWF0IGFsbCBudW1iZXJzIGFzIGFic29sdXRlIGFkZHJlc3Nlcy4gCitFeHByZXNzaW9ucyBhcHBlYXJpbmcgaW5zaWRlIGFuIG91dHB1dCBzZWN0aW9uIGRlZmluaXRpb24gdHJlYXQKK2Fic29sdXRlIHN5bWJvbHMgYXMgbnVtYmVycy4gIElmIDxjb2RlPkxEX0ZFQVRVUkUgKCJTQU5FX0VYUFIiKTwvY29kZT4gaXMKK2dpdmVuLCB0aGVuIGFic29sdXRlIHN5bWJvbHMgYW5kIG51bWJlcnMgYXJlIHNpbXBseSB0cmVhdGVkIGFzIG51bWJlcnMKK2V2ZXJ5d2hlcmUuCisKKyAgIDxwPkluIHRoZSBmb2xsb3dpbmcgc2ltcGxlIGV4YW1wbGUsCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBTRUNUSU9OUworICAgICAgIHsKKyAgICAgICAgIC4gPSAweDEwMDsKKyAgICAgICAgIF9fZXhlY3V0YWJsZV9zdGFydCA9IDB4MTAwOworICAgICAgICAgLmRhdGEgOgorICAgICAgICAgeworICAgICAgICAgICAuID0gMHgxMDsKKyAgICAgICAgICAgX19kYXRhX3N0YXJ0ID0gMHgxMDsKKyAgICAgICAgICAgKiguZGF0YSkKKyAgICAgICAgIH0KKyAgICAgICAgIC4uLgorICAgICAgIH0KKzwvcHJlPgorICAgPHA+Ym90aCA8Y29kZT4uPC9jb2RlPiBhbmQgPGNvZGU+X19leGVjdXRhYmxlX3N0YXJ0PC9jb2RlPiBhcmUgc2V0IHRvIHRoZSBhYnNvbHV0ZQorYWRkcmVzcyAweDEwMCBpbiB0aGUgZmlyc3QgdHdvIGFzc2lnbm1lbnRzLCB0aGVuIGJvdGggPGNvZGU+LjwvY29kZT4gYW5kCis8Y29kZT5fX2RhdGFfc3RhcnQ8L2NvZGU+IGFyZSBzZXQgdG8gMHgxMCByZWxhdGl2ZSB0byB0aGUgPGNvZGU+LmRhdGE8L2NvZGU+CitzZWN0aW9uIGluIHRoZSBzZWNvbmQgdHdvIGFzc2lnbm1lbnRzLgorCisgICA8cD5Gb3IgZXhwcmVzc2lvbnMgaW52b2x2aW5nIG51bWJlcnMsIHJlbGF0aXZlIGFkZHJlc3NlcyBhbmQgYWJzb2x1dGUKK2FkZHJlc3NlcywgbGQgZm9sbG93cyB0aGVzZSBydWxlcyB0byBldmFsdWF0ZSB0ZXJtczoKKworICAgICA8dWw+Cis8bGk+VW5hcnkgb3BlcmF0aW9ucyBvbiBhIHJlbGF0aXZlIGFkZHJlc3MsIGFuZCBiaW5hcnkgb3BlcmF0aW9ucyBvbiB0d28KK3JlbGF0aXZlIGFkZHJlc3NlcyBpbiB0aGUgc2FtZSBzZWN0aW9uIG9yIGJldHdlZW4gb25lIHJlbGF0aXZlIGFkZHJlc3MKK2FuZCBhIG51bWJlciwgYXBwbHkgdGhlIG9wZXJhdG9yIHRvIHRoZSBvZmZzZXQgcGFydCBvZiB0aGUgYWRkcmVzcyhlcykuIAorPGxpPlVuYXJ5IG9wZXJhdGlvbnMgb24gYW4gYWJzb2x1dGUgYWRkcmVzcywgYW5kIGJpbmFyeSBvcGVyYXRpb25zIG9uIG9uZQorb3IgbW9yZSBhYnNvbHV0ZSBhZGRyZXNzZXMgb3Igb24gdHdvIHJlbGF0aXZlIGFkZHJlc3NlcyBub3QgaW4gdGhlCitzYW1lIHNlY3Rpb24sIGZpcnN0IGNvbnZlcnQgYW55IG5vbi1hYnNvbHV0ZSB0ZXJtIHRvIGFuIGFic29sdXRlCithZGRyZXNzIGJlZm9yZSBhcHBseWluZyB0aGUgb3BlcmF0b3IuIAorPC91bD4KKworICAgPHA+VGhlIHJlc3VsdCBzZWN0aW9uIG9mIGVhY2ggc3ViLWV4cHJlc3Npb24gaXMgYXMgZm9sbG93czoKKworICAgICA8dWw+Cis8bGk+QW4gb3BlcmF0aW9uIGludm9sdmluZyBvbmx5IG51bWJlcnMgcmVzdWx0cyBpbiBhIG51bWJlci4gCis8bGk+VGhlIHJlc3VsdCBvZiBjb21wYXJpc29ucywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mYW1wOyZhbXA7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnx8PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFsc28gYSBudW1iZXIuIAorPGxpPlRoZSByZXN1bHQgb2Ygb3RoZXIgYmluYXJ5IGFyaXRobWV0aWMgYW5kIGxvZ2ljYWwgb3BlcmF0aW9ucyBvbiB0d28KK3JlbGF0aXZlIGFkZHJlc3NlcyBpbiB0aGUgc2FtZSBzZWN0aW9uIG9yIHR3byBhYnNvbHV0ZSBhZGRyZXNlc3MKKyhhZnRlciBhYm92ZSBjb252ZXJzaW9ucykgaXMgYWxzbyBhIG51bWJlci4gCis8bGk+VGhlIHJlc3VsdCBvZiBvdGhlciBvcGVyYXRpb25zIG9uIHJlbGF0aXZlIGFkZHJlc3NlcyBvciBvbmUKK3JlbGF0aXZlIGFkZHJlc3MgYW5kIGEgbnVtYmVyLCBpcyBhIHJlbGF0aXZlIGFkZHJlc3MgaW4gdGhlIHNhbWUKK3NlY3Rpb24gYXMgdGhlIHJlbGF0aXZlIG9wZXJhbmQocykuIAorPGxpPlRoZSByZXN1bHQgb2Ygb3RoZXIgb3BlcmF0aW9ucyBvbiBhYnNvbHV0ZSBhZGRyZXNzZXMgKGFmdGVyIGFib3ZlCitjb252ZXJzaW9ucykgaXMgYW4gYWJzb2x1dGUgYWRkcmVzcy4gCis8L3VsPgorCisgICA8cD5Zb3UgY2FuIHVzZSB0aGUgYnVpbHRpbiBmdW5jdGlvbiA8Y29kZT5BQlNPTFVURTwvY29kZT4gdG8gZm9yY2UgYW4gZXhwcmVzc2lvbgordG8gYmUgYWJzb2x1dGUgd2hlbiBpdCB3b3VsZCBvdGhlcndpc2UgYmUgcmVsYXRpdmUuICBGb3IgZXhhbXBsZSwgdG8KK2NyZWF0ZSBhbiBhYnNvbHV0ZSBzeW1ib2wgc2V0IHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBlbmQgb2YgdGhlIG91dHB1dAorc2VjdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87OgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFNFQ1RJT05TCisgICAgICAgeworICAgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIF9lZGF0YSA9IEFCU09MVVRFKC4pOyB9CisgICAgICAgfQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPklmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QUJTT0xVVEU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2VyZSBub3QgdXNlZCwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fZWRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd291bGQgYmUgcmVsYXRpdmUgdG8gdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24uCisKKyAgIDxwPlVzaW5nIDxjb2RlPkxPQURBRERSPC9jb2RlPiBhbHNvIGZvcmNlcyBhbiBleHByZXNzaW9uIGFic29sdXRlLCBzaW5jZSB0aGlzCitwYXJ0aWN1bGFyIGJ1aWx0aW4gZnVuY3Rpb24gcmV0dXJucyBhbiBhYnNvbHV0ZSBhZGRyZXNzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9FeHByZXNzaW9ucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRXhwcmVzc2lvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGM3MWI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRXhwcmVzc2lvbnMuaHRtbApAQCAtMCwwICsxLDc1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5FeHByZXNzaW9ucyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiIHRpdGxlPSJTY3JpcHRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iVkVSU0lPTi5odG1sI1ZFUlNJT04iIHRpdGxlPSJWRVJTSU9OIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW1wbGljaXQtTGlua2VyLVNjcmlwdHMuaHRtbCNJbXBsaWNpdC1MaW5rZXItU2NyaXB0cyIgdGl0bGU9IkltcGxpY2l0IExpbmtlciBTY3JpcHRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJFeHByZXNzaW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbXBsaWNpdC1MaW5rZXItU2NyaXB0cy5odG1sI0ltcGxpY2l0LUxpbmtlci1TY3JpcHRzIj5JbXBsaWNpdCBMaW5rZXIgU2NyaXB0czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlZFUlNJT04uaHRtbCNWRVJTSU9OIj5WRVJTSU9OPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiPlNjcmlwdHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjEwIEV4cHJlc3Npb25zIGluIExpbmtlciBTY3JpcHRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXhwcmVzc2lvbnMtNDk3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXJpdGhtZXRpYy00OTgiPjwvYT5UaGUgc3ludGF4IGZvciBleHByZXNzaW9ucyBpbiB0aGUgbGlua2VyIHNjcmlwdCBsYW5ndWFnZSBpcyBpZGVudGljYWwgdG8KK3RoYXQgb2YgQyBleHByZXNzaW9ucy4gIEFsbCBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGFzIGludGVnZXJzLiAgQWxsCitleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGluIHRoZSBzYW1lIHNpemUsIHdoaWNoIGlzIDMyIGJpdHMgaWYgYm90aCB0aGUKK2hvc3QgYW5kIHRhcmdldCBhcmUgMzIgYml0cywgYW5kIGlzIG90aGVyd2lzZSA2NCBiaXRzLgorCisgICA8cD5Zb3UgY2FuIHVzZSBhbmQgc2V0IHN5bWJvbCB2YWx1ZXMgaW4gZXhwcmVzc2lvbnMuCisKKyAgIDxwPlRoZSBsaW5rZXIgZGVmaW5lcyBzZXZlcmFsIHNwZWNpYWwgcHVycG9zZSBidWlsdGluIGZ1bmN0aW9ucyBmb3IgdXNlIGluCitleHByZXNzaW9ucy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkNvbnN0YW50cy5odG1sI0NvbnN0YW50cyI+Q29uc3RhbnRzPC9hPjogCQkJQ29uc3RhbnRzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJTeW1ib2xpYy1Db25zdGFudHMuaHRtbCNTeW1ib2xpYy1Db25zdGFudHMiPlN5bWJvbGljIENvbnN0YW50czwvYT46ICAgICAgICAgICBTeW1ib2xpYyBjb25zdGFudHMKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlN5bWJvbHMuaHRtbCNTeW1ib2xzIj5TeW1ib2xzPC9hPjogCQkJU3ltYm9sIE5hbWVzCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJPcnBoYW4tU2VjdGlvbnMuaHRtbCNPcnBoYW4tU2VjdGlvbnMiPk9ycGhhbiBTZWN0aW9uczwvYT46IAkJT3JwaGFuIFNlY3Rpb25zCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjTG9jYXRpb24tQ291bnRlciI+TG9jYXRpb24gQ291bnRlcjwvYT46IAkJVGhlIExvY2F0aW9uIENvdW50ZXIKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9Ik9wZXJhdG9ycy5odG1sI09wZXJhdG9ycyI+T3BlcmF0b3JzPC9hPjogCQkJT3BlcmF0b3JzCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJFdmFsdWF0aW9uLmh0bWwjRXZhbHVhdGlvbiI+RXZhbHVhdGlvbjwvYT46IAkJCUV2YWx1YXRpb24KKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI0V4cHJlc3Npb24tU2VjdGlvbiI+RXhwcmVzc2lvbiBTZWN0aW9uPC9hPjogCQlUaGUgU2VjdGlvbiBvZiBhbiBFeHByZXNzaW9uCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT46IAkJQnVpbHRpbiBGdW5jdGlvbnMKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0ZpbGUtQ29tbWFuZHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0ZpbGUtQ29tbWFuZHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzVlMGJkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRmlsZS1Db21tYW5kcy5odG1sCkBAIC0wLDAgKzEsMTI2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5GaWxlIENvbW1hbmRzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTaW1wbGUtQ29tbWFuZHMuaHRtbCNTaW1wbGUtQ29tbWFuZHMiIHRpdGxlPSJTaW1wbGUgQ29tbWFuZHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJFbnRyeS1Qb2ludC5odG1sI0VudHJ5LVBvaW50IiB0aXRsZT0iRW50cnkgUG9pbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJGb3JtYXQtQ29tbWFuZHMuaHRtbCNGb3JtYXQtQ29tbWFuZHMiIHRpdGxlPSJGb3JtYXQgQ29tbWFuZHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZpbGUtQ29tbWFuZHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRm9ybWF0LUNvbW1hbmRzLmh0bWwjRm9ybWF0LUNvbW1hbmRzIj5Gb3JtYXQgQ29tbWFuZHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJFbnRyeS1Qb2ludC5odG1sI0VudHJ5LVBvaW50Ij5FbnRyeSBQb2ludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNpbXBsZS1Db21tYW5kcy5odG1sI1NpbXBsZS1Db21tYW5kcyI+U2ltcGxlIENvbW1hbmRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My40LjIgQ29tbWFuZHMgRGVhbGluZyB3aXRoIEZpbGVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGlua2VyLXNjcmlwdC1maWxlLWNvbW1hbmRzLTM1MiI+PC9hPlNldmVyYWwgbGlua2VyIHNjcmlwdCBjb21tYW5kcyBkZWFsIHdpdGggZmlsZXMuCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPklOQ0xVREUgPC9jb2RlPjx2YXI+ZmlsZW5hbWU8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtSU5DTFVERS1fMDA0MHZhcl8wMDdiZmlsZW5hbWVfMDA3ZC0zNTMiPjwvYT48YSBuYW1lPSJpbmRleC1pbmNsdWRpbmctYS1saW5rZXItc2NyaXB0LTM1NCI+PC9hPkluY2x1ZGUgdGhlIGxpbmtlciBzY3JpcHQgPHZhcj5maWxlbmFtZTwvdmFyPiBhdCB0aGlzIHBvaW50LiAgVGhlIGZpbGUgd2lsbAorYmUgc2VhcmNoZWQgZm9yIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgYW5kIGluIGFueSBkaXJlY3Rvcnkgc3BlY2lmaWVkCit3aXRoIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTDwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gIFlvdSBjYW4gbmVzdCBjYWxscyB0byA8Y29kZT5JTkNMVURFPC9jb2RlPiB1cCB0bworMTAgbGV2ZWxzIGRlZXAuCisKKyAgICAgPHA+WW91IGNhbiBwbGFjZSA8Y29kZT5JTkNMVURFPC9jb2RlPiBkaXJlY3RpdmVzIGF0IHRoZSB0b3AgbGV2ZWwsIGluIDxjb2RlPk1FTU9SWTwvY29kZT4gb3IKKzxjb2RlPlNFQ1RJT05TPC9jb2RlPiBjb21tYW5kcywgb3IgaW4gb3V0cHV0IHNlY3Rpb24gZGVzY3JpcHRpb25zLgorCisgICAgIDxicj48ZHQ+PGNvZGU+SU5QVVQoPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPiwgLi4uKTwvY29kZT48ZHQ+PGNvZGU+SU5QVVQoPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPiA8dmFyPmZpbGU8L3Zhcj48Y29kZT4gLi4uKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtSU5QVVRfMDAyOF8wMDQwdmFyXzAwN2JmaWxlc18wMDdkXzAwMjktMzU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW5wdXQtZmlsZXMtaW4tbGlua2VyLXNjcmlwdHMtMzU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtaW5wdXQtb2JqZWN0LWZpbGVzLWluLWxpbmtlci1zY3JpcHRzLTM1NyI+PC9hPjxhIG5hbWU9ImluZGV4LWxpbmtlci1zY3JpcHQtaW5wdXQtb2JqZWN0LWZpbGVzLTM1OCI+PC9hPlRoZSA8Y29kZT5JTlBVVDwvY29kZT4gY29tbWFuZCBkaXJlY3RzIHRoZSBsaW5rZXIgdG8gaW5jbHVkZSB0aGUgbmFtZWQgZmlsZXMKK2luIHRoZSBsaW5rLCBhcyB0aG91Z2ggdGhleSB3ZXJlIG5hbWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgICAgPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdSBhbHdheXMgd2FudCB0byBpbmNsdWRlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdWJyLm88L3NwYW4+PC9zYW1wPiBhbnkgdGltZSB5b3UgZG8KK2EgbGluaywgYnV0IHlvdSBjYW4ndCBiZSBib3RoZXJlZCB0byBwdXQgaXQgb24gZXZlcnkgbGluayBjb21tYW5kIGxpbmUsCit0aGVuIHlvdSBjYW4gcHV0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+SU5QVVQgKHN1YnIubyk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4geW91ciBsaW5rZXIgc2NyaXB0LgorCisgICAgIDxwPkluIGZhY3QsIGlmIHlvdSBsaWtlLCB5b3UgY2FuIGxpc3QgYWxsIG9mIHlvdXIgaW5wdXQgZmlsZXMgaW4gdGhlIGxpbmtlcgorc2NyaXB0LCBhbmQgdGhlbiBpbnZva2UgdGhlIGxpbmtlciB3aXRoIG5vdGhpbmcgYnV0IGEgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tVDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24uCisKKyAgICAgPHA+SW4gY2FzZSBhIDxkZm4+c3lzcm9vdCBwcmVmaXg8L2Rmbj4gaXMgY29uZmlndXJlZCwgYW5kIHRoZSBmaWxlbmFtZSBzdGFydHMKK3dpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIsIGFuZCB0aGUgc2NyaXB0IGJlaW5nIHByb2Nlc3NlZCB3YXMKK2xvY2F0ZWQgaW5zaWRlIHRoZSA8ZGZuPnN5c3Jvb3QgcHJlZml4PC9kZm4+LCB0aGUgZmlsZW5hbWUgd2lsbCBiZSBsb29rZWQKK2ZvciBpbiB0aGUgPGRmbj5zeXNyb290IHByZWZpeDwvZGZuPi4gIE90aGVyd2lzZSwgdGhlIGxpbmtlciB3aWxsIHRyeSB0bworb3BlbiB0aGUgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBJZiBpdCBpcyBub3QgZm91bmQsIHRoZQorbGlua2VyIHdpbGwgc2VhcmNoIHRocm91Z2ggdGhlIGFyY2hpdmUgbGlicmFyeSBzZWFyY2ggcGF0aC4gIFNlZSB0aGUKK2Rlc2NyaXB0aW9uIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPkNvbW1hbmQgTGluZSBPcHRpb25zPC9hPi4KKworICAgICA8cD5JZiB5b3UgdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+SU5QVVQgKC1sPC9zcGFuPjx2YXI+ZmlsZTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj4pPC9zcGFuPjwvc2FtcD4mcnNxdW87LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB3aWxsIHRyYW5zZm9ybSB0aGUKK25hbWUgdG8gPGNvZGU+bGliPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxjb2RlPi5hPC9jb2RlPiwgYXMgd2l0aCB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50CismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1sPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPldoZW4geW91IHVzZSB0aGUgPGNvZGU+SU5QVVQ8L2NvZGU+IGNvbW1hbmQgaW4gYW4gaW1wbGljaXQgbGlua2VyIHNjcmlwdCwgdGhlCitmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBsaW5rIGF0IHRoZSBwb2ludCBhdCB3aGljaCB0aGUgbGlua2VyCitzY3JpcHQgZmlsZSBpcyBpbmNsdWRlZC4gIFRoaXMgY2FuIGFmZmVjdCBhcmNoaXZlIHNlYXJjaGluZy4KKworICAgICA8YnI+PGR0Pjxjb2RlPkdST1VQKDwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4sIC4uLik8L2NvZGU+PGR0Pjxjb2RlPkdST1VQKDwvY29kZT48dmFyPmZpbGU8L3Zhcj4gPHZhcj5maWxlPC92YXI+PGNvZGU+IC4uLik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUdST1VQXzAwMjhfMDA0MHZhcl8wMDdiZmlsZXNfMDA3ZF8wMDI5LTM1OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdyb3VwaW5nLWlucHV0LWZpbGVzLTM2MCI+PC9hPlRoZSA8Y29kZT5HUk9VUDwvY29kZT4gY29tbWFuZCBpcyBsaWtlIDxjb2RlPklOUFVUPC9jb2RlPiwgZXhjZXB0IHRoYXQgdGhlIG5hbWVkCitmaWxlcyBzaG91bGQgYWxsIGJlIGFyY2hpdmVzLCBhbmQgdGhleSBhcmUgc2VhcmNoZWQgcmVwZWF0ZWRseSB1bnRpbCBubworbmV3IHVuZGVmaW5lZCByZWZlcmVuY2VzIGFyZSBjcmVhdGVkLiAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0oPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+Q29tbWFuZCBMaW5lIE9wdGlvbnM8L2E+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+QVNfTkVFREVEKDwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmZpbGU8L3Zhcj48Y29kZT4sIC4uLik8L2NvZGU+PGR0Pjxjb2RlPkFTX05FRURFRCg8L2NvZGU+PHZhcj5maWxlPC92YXI+IDx2YXI+ZmlsZTwvdmFyPjxjb2RlPiAuLi4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1BU18wMDVmTkVFREVEXzAwMjhfMDA0MHZhcl8wMDdiZmlsZXNfMDA3ZF8wMDI5LTM2MSI+PC9hPlRoaXMgY29uc3RydWN0IGNhbiBhcHBlYXIgb25seSBpbnNpZGUgb2YgdGhlIDxjb2RlPklOUFVUPC9jb2RlPiBvciA8Y29kZT5HUk9VUDwvY29kZT4KK2NvbW1hbmRzLCBhbW9uZyBvdGhlciBmaWxlbmFtZXMuICBUaGUgZmlsZXMgbGlzdGVkIHdpbGwgYmUgaGFuZGxlZAorYXMgaWYgdGhleSBhcHBlYXIgZGlyZWN0bHkgaW4gdGhlIDxjb2RlPklOUFVUPC9jb2RlPiBvciA8Y29kZT5HUk9VUDwvY29kZT4gY29tbWFuZHMsCit3aXRoIHRoZSBleGNlcHRpb24gb2YgRUxGIHNoYXJlZCBsaWJyYXJpZXMsIHRoYXQgd2lsbCBiZSBhZGRlZCBvbmx5Cit3aGVuIHRoZXkgYXJlIGFjdHVhbGx5IG5lZWRlZC4gIFRoaXMgY29uc3RydWN0IGVzc2VudGlhbGx5IGVuYWJsZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYXMtbmVlZGVkPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGZvciBhbGwgdGhlIGZpbGVzIGxpc3RlZCBpbnNpZGUgb2YgaXQKK2FuZCByZXN0b3JlcyBwcmV2aW91cyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFzLW5lZWRlZDwvc3Bhbj48L3NhbXA+IHJlc3AuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tYXMtbmVlZGVkPC9zcGFuPjwvc2FtcD4KK3NldHRpbmcgYWZ0ZXJ3YXJkcy4KKworICAgICA8YnI+PGR0Pjxjb2RlPk9VVFBVVCg8L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LU9VVFBVVF8wMDI4XzAwNDB2YXJfMDA3YmZpbGVuYW1lXzAwN2RfMDAyOS0zNjIiPjwvYT48YSBuYW1lPSJpbmRleC1vdXRwdXQtZmlsZS1uYW1lLWluLWxpbmtlci1zY3JpcHQtMzYzIj48L2E+VGhlIDxjb2RlPk9VVFBVVDwvY29kZT4gY29tbWFuZCBuYW1lcyB0aGUgb3V0cHV0IGZpbGUuICBVc2luZworPGNvZGU+T1VUUFVUKDwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGNvZGU+KTwvY29kZT4gaW4gdGhlIGxpbmtlciBzY3JpcHQgaXMgZXhhY3RseSBsaWtlIHVzaW5nCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1vIDwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPiZyc3F1bzsgb24gdGhlIGNvbW1hbmQgbGluZSAoc2VlIDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5Db21tYW5kIExpbmUgT3B0aW9uczwvYT4pLiAgSWYgYm90aCBhcmUgdXNlZCwgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gdGFrZXMKK3ByZWNlZGVuY2UuCisKKyAgICAgPHA+WW91IGNhbiB1c2UgdGhlIDxjb2RlPk9VVFBVVDwvY29kZT4gY29tbWFuZCB0byBkZWZpbmUgYSBkZWZhdWx0IG5hbWUgZm9yIHRoZQorb3V0cHV0IGZpbGUgb3RoZXIgdGhhbiB0aGUgdXN1YWwgZGVmYXVsdCBvZiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YS5vdXQ8L3NwYW4+PC9zYW1wPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPlNFQVJDSF9ESVIoPC9jb2RlPjx2YXI+cGF0aDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LVNFQVJDSF8wMDVmRElSXzAwMjhfMDA0MHZhcl8wMDdicGF0aF8wMDdkXzAwMjktMzY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbGlicmFyeS1zZWFyY2gtcGF0aC1pbi1saW5rZXItc2NyaXB0LTM2NSI+PC9hPjxhIG5hbWU9ImluZGV4LWFyY2hpdmUtc2VhcmNoLXBhdGgtaW4tbGlua2VyLXNjcmlwdC0zNjYiPjwvYT48YSBuYW1lPSJpbmRleC1zZWFyY2gtcGF0aC1pbi1saW5rZXItc2NyaXB0LTM2NyI+PC9hPlRoZSA8Y29kZT5TRUFSQ0hfRElSPC9jb2RlPiBjb21tYW5kIGFkZHMgPHZhcj5wYXRoPC92YXI+IHRvIHRoZSBsaXN0IG9mIHBhdGhzIHdoZXJlCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBsb29rcyBmb3IgYXJjaGl2ZSBsaWJyYXJpZXMuICBVc2luZworPGNvZGU+U0VBUkNIX0RJUig8L2NvZGU+PHZhcj5wYXRoPC92YXI+PGNvZGU+KTwvY29kZT4gaXMgZXhhY3RseSBsaWtlIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUwgPC9zcGFuPjx2YXI+cGF0aDwvdmFyPjwvc2FtcD4mcnNxdW87CitvbiB0aGUgY29tbWFuZCBsaW5lIChzZWUgPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPkNvbW1hbmQgTGluZSBPcHRpb25zPC9hPikuICBJZiBib3RoCithcmUgdXNlZCwgdGhlbiB0aGUgbGlua2VyIHdpbGwgc2VhcmNoIGJvdGggcGF0aHMuICBQYXRocyBzcGVjaWZpZWQgdXNpbmcKK3RoZSBjb21tYW5kIGxpbmUgb3B0aW9uIGFyZSBzZWFyY2hlZCBmaXJzdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPlNUQVJUVVAoPC9jb2RlPjx2YXI+ZmlsZW5hbWU8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1TVEFSVFVQXzAwMjhfMDA0MHZhcl8wMDdiZmlsZW5hbWVfMDA3ZF8wMDI5LTM2OCI+PC9hPjxhIG5hbWU9ImluZGV4LWZpcnN0LWlucHV0LWZpbGUtMzY5Ij48L2E+VGhlIDxjb2RlPlNUQVJUVVA8L2NvZGU+IGNvbW1hbmQgaXMganVzdCBsaWtlIHRoZSA8Y29kZT5JTlBVVDwvY29kZT4gY29tbWFuZCwgZXhjZXB0Cit0aGF0IDx2YXI+ZmlsZW5hbWU8L3Zhcj4gd2lsbCBiZWNvbWUgdGhlIGZpcnN0IGlucHV0IGZpbGUgdG8gYmUgbGlua2VkLCBhcwordGhvdWdoIGl0IHdlcmUgc3BlY2lmaWVkIGZpcnN0IG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIG1heSBiZSB1c2VmdWwKK3doZW4gdXNpbmcgYSBzeXN0ZW0gaW4gd2hpY2ggdGhlIGVudHJ5IHBvaW50IGlzIGFsd2F5cyB0aGUgc3RhcnQgb2YgdGhlCitmaXJzdCBmaWxlLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0ZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0ZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjdiN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRm9yY2VkLUlucHV0LUFsaWdubWVudC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZvcmNlZCBJbnB1dCBBbGlnbm1lbnQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gQXR0cmlidXRlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZvcmNlZC1PdXRwdXQtQWxpZ25tZW50Lmh0bWwjRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQiIHRpdGxlPSJGb3JjZWQgT3V0cHV0IEFsaWdubWVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQuaHRtbCNPdXRwdXQtU2VjdGlvbi1Db25zdHJhaW50IiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gQ29uc3RyYWludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iRm9yY2VkLUlucHV0LUFsaWdubWVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1Db25zdHJhaW50Lmh0bWwjT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludCI+T3V0cHV0IFNlY3Rpb24gQ29uc3RyYWludDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZvcmNlZC1PdXRwdXQtQWxpZ25tZW50Lmh0bWwjRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQiPkZvcmNlZCBPdXRwdXQgQWxpZ25tZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiPk91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjYuOC40IEZvcmNlZCBJbnB1dCBBbGlnbm1lbnQ8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1TVUJBTElHTl8wMDI4XzAwNDB2YXJfMDA3YnN1YnNlY3Rpb25fMDA1ZmFsaWduXzAwN2RfMDAyOS00NTciPjwvYT48YSBuYW1lPSJpbmRleC1mb3JjaW5nLWlucHV0LXNlY3Rpb24tYWxpZ25tZW50LTQ1OCI+PC9hPjxhIG5hbWU9ImluZGV4LWlucHV0LXNlY3Rpb24tYWxpZ25tZW50LTQ1OSI+PC9hPllvdSBjYW4gZm9yY2UgaW5wdXQgc2VjdGlvbiBhbGlnbm1lbnQgd2l0aGluIGFuIG91dHB1dCBzZWN0aW9uIGJ5IHVzaW5nCitTVUJBTElHTi4gIFRoZSB2YWx1ZSBzcGVjaWZpZWQgb3ZlcnJpZGVzIGFueSBhbGlnbm1lbnQgZ2l2ZW4gYnkgaW5wdXQKK3NlY3Rpb25zLCB3aGV0aGVyIGxhcmdlciBvciBzbWFsbGVyLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9Gb3JjZWQtT3V0cHV0LUFsaWdubWVudC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDgxNDkwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQuaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Gb3JjZWQgT3V0cHV0IEFsaWdubWVudCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBBdHRyaWJ1dGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tTE1BLmh0bWwjT3V0cHV0LVNlY3Rpb24tTE1BIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gTE1BIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRm9yY2VkLUlucHV0LUFsaWdubWVudC5odG1sI0ZvcmNlZC1JbnB1dC1BbGlnbm1lbnQiIHRpdGxlPSJGb3JjZWQgSW5wdXQgQWxpZ25tZW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJGb3JjZWQtT3V0cHV0LUFsaWdubWVudCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJGb3JjZWQtSW5wdXQtQWxpZ25tZW50Lmh0bWwjRm9yY2VkLUlucHV0LUFsaWdubWVudCI+Rm9yY2VkIElucHV0IEFsaWdubWVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI091dHB1dC1TZWN0aW9uLUxNQSI+T3V0cHV0IFNlY3Rpb24gTE1BPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiPk91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjYuOC4zIEZvcmNlZCBPdXRwdXQgQWxpZ25tZW50PC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtQUxJR05fMDAyOF8wMDQwdmFyXzAwN2JzZWN0aW9uXzAwNWZhbGlnbl8wMDdkXzAwMjktNDU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZm9yY2luZy1vdXRwdXQtc2VjdGlvbi1hbGlnbm1lbnQtNDU1Ij48L2E+PGEgbmFtZT0iaW5kZXgtb3V0cHV0LXNlY3Rpb24tYWxpZ25tZW50LTQ1NiI+PC9hPllvdSBjYW4gaW5jcmVhc2UgYW4gb3V0cHV0IHNlY3Rpb24ncyBhbGlnbm1lbnQgYnkgdXNpbmcgQUxJR04uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0Zvcm1hdC1Db21tYW5kcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvRm9ybWF0LUNvbW1hbmRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyN2QxMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0Zvcm1hdC1Db21tYW5kcy5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkZvcm1hdCBDb21tYW5kcyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2ltcGxlLUNvbW1hbmRzLmh0bWwjU2ltcGxlLUNvbW1hbmRzIiB0aXRsZT0iU2ltcGxlIENvbW1hbmRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiIHRpdGxlPSJGaWxlIENvbW1hbmRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUkVHSU9OXzAwNWZBTElBUy5odG1sI1JFR0lPTl8wMDVmQUxJQVMiIHRpdGxlPSJSRUdJT05fQUxJQVMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkZvcm1hdC1Db21tYW5kcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJSRUdJT05fMDA1ZkFMSUFTLmh0bWwjUkVHSU9OXzAwNWZBTElBUyI+UkVHSU9OX0FMSUFTPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTaW1wbGUtQ29tbWFuZHMuaHRtbCNTaW1wbGUtQ29tbWFuZHMiPlNpbXBsZSBDb21tYW5kczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuNC4zIENvbW1hbmRzIERlYWxpbmcgd2l0aCBPYmplY3QgRmlsZSBGb3JtYXRzPC9oND4KKworPHA+QSBjb3VwbGUgb2YgbGlua2VyIHNjcmlwdCBjb21tYW5kcyBkZWFsIHdpdGggb2JqZWN0IGZpbGUgZm9ybWF0cy4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+T1VUUFVUX0ZPUk1BVCg8L2NvZGU+PHZhcj5iZmRuYW1lPC92YXI+PGNvZGU+KTwvY29kZT48ZHQ+PGNvZGU+T1VUUFVUX0ZPUk1BVCg8L2NvZGU+PHZhcj5kZWZhdWx0PC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5iaWc8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmxpdHRsZTwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LU9VVFBVVF8wMDVmRk9STUFUXzAwMjhfMDA0MHZhcl8wMDdiYmZkbmFtZV8wMDdkXzAwMjktMzcwIj48L2E+PGEgbmFtZT0iaW5kZXgtb3V0cHV0LWZpbGUtZm9ybWF0LWluLWxpbmtlci1zY3JpcHQtMzcxIj48L2E+VGhlIDxjb2RlPk9VVFBVVF9GT1JNQVQ8L2NvZGU+IGNvbW1hbmQgbmFtZXMgdGhlIEJGRCBmb3JtYXQgdG8gdXNlIGZvciB0aGUKK291dHB1dCBmaWxlIChzZWUgPGEgaHJlZj0iQkZELmh0bWwjQkZEIj5CRkQ8L2E+KS4gIFVzaW5nIDxjb2RlPk9VVFBVVF9GT1JNQVQoPC9jb2RlPjx2YXI+YmZkbmFtZTwvdmFyPjxjb2RlPik8L2NvZGU+IGlzCitleGFjdGx5IGxpa2UgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW9mb3JtYXQgPC9zcGFuPjx2YXI+YmZkbmFtZTwvdmFyPjwvc2FtcD4mcnNxdW87IG9uIHRoZSBjb21tYW5kIGxpbmUKKyhzZWUgPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPkNvbW1hbmQgTGluZSBPcHRpb25zPC9hPikuICBJZiBib3RoIGFyZSB1c2VkLCB0aGUgY29tbWFuZAorbGluZSBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZS4KKworICAgICA8cD5Zb3UgY2FuIHVzZSA8Y29kZT5PVVRQVVRfRk9STUFUPC9jb2RlPiB3aXRoIHRocmVlIGFyZ3VtZW50cyB0byB1c2UgZGlmZmVyZW50Citmb3JtYXRzIGJhc2VkIG9uIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1FQjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lIG9wdGlvbnMuIAorVGhpcyBwZXJtaXRzIHRoZSBsaW5rZXIgc2NyaXB0IHRvIHNldCB0aGUgb3V0cHV0IGZvcm1hdCBiYXNlZCBvbiB0aGUKK2Rlc2lyZWQgZW5kaWFubmVzcy4KKworICAgICA8cD5JZiBuZWl0aGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUVCPC9zcGFuPjwvc2FtcD4mcnNxdW87IG5vciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1FTDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgdXNlZCwgdGhlbiB0aGUgb3V0cHV0IGZvcm1hdAord2lsbCBiZSB0aGUgZmlyc3QgYXJndW1lbnQsIDx2YXI+ZGVmYXVsdDwvdmFyPi4gIElmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUVCPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIHVzZWQsIHRoZQorb3V0cHV0IGZvcm1hdCB3aWxsIGJlIHRoZSBzZWNvbmQgYXJndW1lbnQsIDx2YXI+YmlnPC92YXI+LiAgSWYgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMKK3VzZWQsIHRoZSBvdXRwdXQgZm9ybWF0IHdpbGwgYmUgdGhlIHRoaXJkIGFyZ3VtZW50LCA8dmFyPmxpdHRsZTwvdmFyPi4KKworICAgICA8cD5Gb3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgbGlua2VyIHNjcmlwdCBmb3IgdGhlIE1JUFMgRUxGIHRhcmdldCB1c2VzIHRoaXMKK2NvbW1hbmQ6CisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIE9VVFBVVF9GT1JNQVQoZWxmMzItYmlnbWlwcywgZWxmMzItYmlnbWlwcywgZWxmMzItbGl0dGxlbWlwcykKKzwvcHJlPgorICAgICA8cD5UaGlzIHNheXMgdGhhdCB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgZmlsZSBpcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lbGYzMi1iaWdtaXBzPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBidXQgaWYgdGhlIHVzZXIgdXNlcyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tRUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBsaW5lCitvcHRpb24sIHRoZSBvdXRwdXQgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZWxmMzItbGl0dGxlbWlwczwvc3Bhbj48L3NhbXA+JnJzcXVvOworZm9ybWF0LgorCisgICAgIDxicj48ZHQ+PGNvZGU+VEFSR0VUKDwvY29kZT48dmFyPmJmZG5hbWU8L3Zhcj48Y29kZT4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1UQVJHRVRfMDAyOF8wMDQwdmFyXzAwN2JiZmRuYW1lXzAwN2RfMDAyOS0zNzIiPjwvYT48YSBuYW1lPSJpbmRleC1pbnB1dC1maWxlLWZvcm1hdC1pbi1saW5rZXItc2NyaXB0LTM3MyI+PC9hPlRoZSA8Y29kZT5UQVJHRVQ8L2NvZGU+IGNvbW1hbmQgbmFtZXMgdGhlIEJGRCBmb3JtYXQgdG8gdXNlIHdoZW4gcmVhZGluZyBpbnB1dAorZmlsZXMuICBJdCBhZmZlY3RzIHN1YnNlcXVlbnQgPGNvZGU+SU5QVVQ8L2NvZGU+IGFuZCA8Y29kZT5HUk9VUDwvY29kZT4gY29tbWFuZHMuIAorVGhpcyBjb21tYW5kIGlzIGxpa2UgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYiA8L3NwYW4+PHZhcj5iZmRuYW1lPC92YXI+PC9zYW1wPiZyc3F1bzsgb24gdGhlIGNvbW1hbmQgbGluZQorKHNlZSA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+Q29tbWFuZCBMaW5lIE9wdGlvbnM8L2E+KS4gIElmIHRoZSA8Y29kZT5UQVJHRVQ8L2NvZGU+IGNvbW1hbmQKK2lzIHVzZWQgYnV0IDxjb2RlPk9VVFBVVF9GT1JNQVQ8L2NvZGU+IGlzIG5vdCwgdGhlbiB0aGUgbGFzdCA8Y29kZT5UQVJHRVQ8L2NvZGU+Citjb21tYW5kIGlzIGFsc28gdXNlZCB0byBzZXQgdGhlIGZvcm1hdCBmb3IgdGhlIG91dHB1dCBmaWxlLiAgU2VlIDxhIGhyZWY9IkJGRC5odG1sI0JGRCI+QkZEPC9hPi4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OTQwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9HTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDUxOCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+R05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1SSS5odG1sI01SSSIgdGl0bGU9Ik1SSSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxELUluZGV4Lmh0bWwjTEQtSW5kZXgiIHRpdGxlPSJMRCBJbmRleCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkxELUluZGV4Lmh0bWwjTEQtSW5kZXgiPkxEIEluZGV4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTVJJLmh0bWwjTVJJIj5NUkk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iYXBwZW5kaXgiPkFwcGVuZGl4IEIgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlPC9oMj4KKworPCEtLSBUaGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLiAtLT4KKzxkaXYgYWxpZ249ImNlbnRlciI+VmVyc2lvbiAxLjMsIDMgTm92ZW1iZXIgMjAwODwvZGl2PgorCis8IS0tIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCB3aXRoaW4gYW5vdGhlciBkb2N1bWVudCwgLS0+Cis8IS0tIGhlbmNlIG5vIHNlY3Rpb25pbmcgY29tbWFuZCBvciBAbm9kZS4gLS0+Cis8cHJlIGNsYXNzPSJkaXNwbGF5Ij4gICAgIENvcHlyaWdodCAmY29weTsgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgPGEgaHJlZj0iaHR0cDovL2ZzZi5vcmcvIj5odHRwOi8vZnNmLm9yZy88L2E+CisgICAgIAorICAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCis8L3ByZT4KKyAgICAgPG9sIHR5cGU9MSBzdGFydD0wPgorPGxpPlBSRUFNQkxFCisKKyAgICAgPHA+VGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50IDxkZm4+ZnJlZTwvZGZuPiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuIAorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCisgICAgIDxwPlRoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgJmxkcXVvO2NvcHlsZWZ0JnJkcXVvOywgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCisgICAgIDxwPldlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisgICAgIDxsaT5BUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCisgICAgIDxwPlRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICZsZHF1bztEb2N1bWVudCZyZHF1bzssIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICZsZHF1bzt5b3UmcmRxdW87LiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCisgICAgIDxwPkEgJmxkcXVvO01vZGlmaWVkIFZlcnNpb24mcmRxdW87IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworICAgICA8cD5BICZsZHF1bztTZWNvbmRhcnkgU2VjdGlvbiZyZHF1bzsgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uCitvZiB0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudCdzIG92ZXJhbGwKK3N1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsCitkaXJlY3RseSB3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluCitwYXJ0IGEgdGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluCithbnkgbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCisgICAgIDxwPlRoZSAmbGRxdW87SW52YXJpYW50IFNlY3Rpb25zJnJkcXVvOyBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCisgICAgIDxwPlRoZSAmbGRxdW87Q292ZXIgVGV4dHMmcmRxdW87IGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCisgICAgIDxwPkEgJmxkcXVvO1RyYW5zcGFyZW50JnJkcXVvOyBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4gCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgJmxkcXVvO1RyYW5zcGFyZW50JnJkcXVvOyBpcyBjYWxsZWQgJmxkcXVvO09wYXF1ZSZyZHF1bzsuCisKKyAgICAgPHA+RXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KKzxzcGFuIGNsYXNzPSJzYyI+YXNjaWk8L3NwYW4+IHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQKK2Zvcm1hdCwgPGFjcm9ueW0+U0dNTDwvYWNyb255bT4gb3IgPGFjcm9ueW0+WE1MPC9hY3JvbnltPiB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZQorPGFjcm9ueW0+RFREPC9hY3JvbnltPiwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+LAorUG9zdFNjcmlwdCBvciA8YWNyb255bT5QREY8L2Fjcm9ueW0+IGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcworb2YgdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIDxhY3JvbnltPlBORzwvYWNyb255bT4sIDxhY3JvbnltPlhDRjwvYWNyb255bT4gYW5kCis8YWNyb255bT5KUEc8L2Fjcm9ueW0+LiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlCityZWFkIGFuZCBlZGl0ZWQgb25seSBieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIDxhY3JvbnltPlNHTUw8L2Fjcm9ueW0+IG9yCis8YWNyb255bT5YTUw8L2Fjcm9ueW0+IGZvciB3aGljaCB0aGUgPGFjcm9ueW0+RFREPC9hY3JvbnltPiBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUKK25vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIDxhY3JvbnltPkhUTUw8L2Fjcm9ueW0+LAorUG9zdFNjcmlwdCBvciA8YWNyb255bT5QREY8L2Fjcm9ueW0+IHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvcgorb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKKyAgICAgPHA+VGhlICZsZHF1bztUaXRsZSBQYWdlJnJkcXVvOyBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICZsZHF1bztUaXRsZSBQYWdlJnJkcXVvOyBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKKyAgICAgPHA+VGhlICZsZHF1bztwdWJsaXNoZXImcmRxdW87IG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzCitvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIHB1YmxpYy4KKworICAgICA8cD5BIHNlY3Rpb24gJmxkcXVvO0VudGl0bGVkIFhZWiZyZHF1bzsgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICZsZHF1bztBY2tub3dsZWRnZW1lbnRzJnJkcXVvOywKKyZsZHF1bztEZWRpY2F0aW9ucyZyZHF1bzssICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LCBvciAmbGRxdW87SGlzdG9yeSZyZHF1bzsuKSAgVG8gJmxkcXVvO1ByZXNlcnZlIHRoZSBUaXRsZSZyZHF1bzsKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gJmxkcXVvO0VudGl0bGVkIFhZWiZyZHF1bzsgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworICAgICA8cD5UaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworICAgICA8bGk+VkVSQkFUSU0gQ09QWUlORworCisgICAgIDxwPllvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworICAgICA8cD5Zb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKyAgICAgPGxpPkNPUFlJTkcgSU4gUVVBTlRJVFkKKworICAgICA8cD5JZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50J3MgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLiAKK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCisgICAgIDxwPklmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworICAgICA8cD5JZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuIAorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKKyAgICAgPHA+SXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUKK3RoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisgICAgIDxsaT5NT0RJRklDQVRJT05TCisKKyAgICAgPHA+WW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKKyAgICAgICAgICA8b2wgdHlwZT1BIHN0YXJ0PTE+Cis8bGk+VXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0Citmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCitvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCitpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgICAgPGxpPkxpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKK3Jlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKK3VubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KKworICAgICAgICAgIDxsaT5TdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICAgICAgIDxsaT5BZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCithZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCisKKyAgICAgICAgICA8bGk+SW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCitnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCithbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCisKKyAgICAgICAgICA8bGk+SW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICA8bGk+UHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87LCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKK3RvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKK3B1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCit0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztIaXN0b3J5JnJkcXVvOyBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKK3N0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCitwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQordGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKK2l0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICZsZHF1bztIaXN0b3J5JnJkcXVvOyBzZWN0aW9uLiAKK1lvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKK2xlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgICAgPGxpPkZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzsgb3IgJmxkcXVvO0RlZGljYXRpb25zJnJkcXVvOywgUHJlc2VydmUKK3RoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUKK3N1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzIGFuZC9vcgorZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KKworICAgICAgICAgIDxsaT5QcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCit1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCitvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCisKKyAgICAgICAgICA8bGk+RGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LiAgU3VjaCBhIHNlY3Rpb24KK21heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCisKKyAgICAgICAgICA8bGk+RG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cyZyZHF1bzsgb3IKK3RvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorCisgICAgICAgICAgPGxpPlByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPklmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuIAorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKKyAgICAgPHA+WW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICZsZHF1bztFbmRvcnNlbWVudHMmcmRxdW87LCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzJm1kYXNoO2ZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCisgICAgIDxwPllvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCisgICAgIDxwPlRoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisgICAgIDxsaT5DT01CSU5JTkcgRE9DVU1FTlRTCisKKyAgICAgPHA+WW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCisgICAgIDxwPlRoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4gCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCisgICAgIDxwPkluIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0hpc3RvcnkmcmRxdW87CitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyZsZHF1bztIaXN0b3J5JnJkcXVvOzsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0Fja25vd2xlZGdlbWVudHMmcmRxdW87LAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAmbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LiAgWW91IG11c3QgZGVsZXRlIGFsbAorc2VjdGlvbnMgRW50aXRsZWQgJmxkcXVvO0VuZG9yc2VtZW50cy4mcmRxdW87CisKKyAgICAgPGxpPkNPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCisgICAgIDxwPllvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworICAgICA8cD5Zb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKyAgICAgPGxpPkFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworICAgICA8cD5BIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gJmxkcXVvO2FnZ3JlZ2F0ZSZyZHF1bzsgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICA8cD5JZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50J3MgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLiAKK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworICAgICA8bGk+VFJBTlNMQVRJT04KKworICAgICA8cD5UcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LiAKK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKKyAgICAgPHA+SWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAmbGRxdW87QWNrbm93bGVkZ2VtZW50cyZyZHF1bzssCismbGRxdW87RGVkaWNhdGlvbnMmcmRxdW87LCBvciAmbGRxdW87SGlzdG9yeSZyZHF1bzssIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKyAgICAgPGxpPlRFUk1JTkFUSU9OCisKKyAgICAgPHA+WW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSBpdCBpcyB2b2lkLCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgIDxwPkhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UKK2Zyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwKK3VubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseQordGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvCis2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKKyAgICAgPHA+TW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKyAgICAgPHA+VGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgcmVjZWlwdCBvZiBhIGNvcHkgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHNhbWUgbWF0ZXJpYWwgZG9lcworbm90IGdpdmUgeW91IGFueSByaWdodHMgdG8gdXNlIGl0LgorCisgICAgIDxsaT5GVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCisgICAgIDxwPlRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQorPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LyI+aHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LzwvYT4uCisKKyAgICAgPHA+RWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgJmxkcXVvO29yIGFueSBsYXRlciB2ZXJzaW9uJnJkcXVvOyBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50CitzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMKK0xpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYQordmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0RvY3VtZW50LgorCisgICAgIDxsaT5SRUxJQ0VOU0lORworCisgICAgIDxwPiZsZHF1bztNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24gU2l0ZSZyZHF1bzsgKG9yICZsZHF1bztNTUMgU2l0ZSZyZHF1bzspIG1lYW5zIGFueQorV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28KK3Byb3ZpZGVzIHByb21pbmVudCBmYWNpbGl0aWVzIGZvciBhbnlib2R5IHRvIGVkaXQgdGhvc2Ugd29ya3MuICBBCitwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLiAgQQorJmxkcXVvO01hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiZyZHF1bzsgKG9yICZsZHF1bztNTUMmcmRxdW87KSBjb250YWluZWQgaW4gdGhlCitzaXRlIG1lYW5zIGFueSBzZXQgb2YgY29weXJpZ2h0YWJsZSB3b3JrcyB0aHVzIHB1Ymxpc2hlZCBvbiB0aGUgTU1DCitzaXRlLgorCisgICAgIDxwPiZsZHF1bztDQy1CWS1TQSZyZHF1bzsgbWVhbnMgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMy4wCitsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0Citjb3Jwb3JhdGlvbiB3aXRoIGEgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGluIFNhbiBGcmFuY2lzY28sCitDYWxpZm9ybmlhLCBhcyB3ZWxsIGFzIGZ1dHVyZSBjb3B5bGVmdCB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UKK3B1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgorCisgICAgIDxwPiZsZHF1bztJbmNvcnBvcmF0ZSZyZHF1bzsgbWVhbnMgdG8gcHVibGlzaCBvciByZXB1Ymxpc2ggYSBEb2N1bWVudCwgaW4gd2hvbGUgb3IKK2luIHBhcnQsIGFzIHBhcnQgb2YgYW5vdGhlciBEb2N1bWVudC4KKworICAgICA8cD5BbiBNTUMgaXMgJmxkcXVvO2VsaWdpYmxlIGZvciByZWxpY2Vuc2luZyZyZHF1bzsgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcworTGljZW5zZSwgYW5kIGlmIGFsbCB3b3JrcyB0aGF0IHdlcmUgZmlyc3QgcHVibGlzaGVkIHVuZGVyIHRoaXMgTGljZW5zZQorc29tZXdoZXJlIG90aGVyIHRoYW4gdGhpcyBNTUMsIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIGluIHdob2xlCitvciBpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlciB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsCithbmQgKDIpIHdlcmUgdGh1cyBpbmNvcnBvcmF0ZWQgcHJpb3IgdG8gTm92ZW1iZXIgMSwgMjAwOC4KKworICAgICA8cD5UaGUgb3BlcmF0b3Igb2YgYW4gTU1DIFNpdGUgbWF5IHJlcHVibGlzaCBhbiBNTUMgY29udGFpbmVkIGluIHRoZSBzaXRlCit1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwKK3Byb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgorCisgICAgICAgIDwvb2w+CisKKzxoMyBjbGFzcz0iaGVhZGluZyI+QURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50czwvaDM+CisKKzxwPlRvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgQ29weXJpZ2h0IChDKSAgPHZhcj55ZWFyPC92YXI+ICA8dmFyPnlvdXIgbmFtZTwvdmFyPi4KKyAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKKyAgICAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKKyAgICAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyCisgICAgICAgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgYGBHTlUKKyAgICAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLgorPC9wcmU+CisgICA8cD5JZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgJmxkcXVvO3dpdGg8c21hbGwgY2xhc3M9ImRvdHMiPi4uLjwvc21hbGw+VGV4dHMuJnJkcXVvOyBsaW5lIHdpdGggdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgPHZhcj5saXN0IHRoZWlyIHRpdGxlczwvdmFyPiwgd2l0aAorICAgICAgICAgdGhlIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIDx2YXI+bGlzdDwvdmFyPiwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMKKyAgICAgICAgIGJlaW5nIDx2YXI+bGlzdDwvdmFyPi4KKzwvcHJlPgorICAgPHA+SWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCisgICA8cD5JZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KKworPCEtLSBMb2NhbCBWYXJpYWJsZXM6IC0tPgorPCEtLSBpc3BlbGwtbG9jYWwtcGRpY3Q6ICJpc3BlbGwtZGljdCIgLS0+Cis8IS0tIEVuZDogLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9IOF8wMDJmMzAwLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9IOF8wMDJmMzAwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiOTVlYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0g4XzAwMmYzMDAuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IOC8zMDAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Imk5NjAuaHRtbCNpOTYwIiB0aXRsZT0iaTk2MCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSDglMmYzMDAiPjwvYT4KKzxhIG5hbWU9Ikg4XzAwMmYzMDAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaTk2MC5odG1sI2k5NjAiPmk5NjA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50Ij5NYWNoaW5lIERlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgdGhlIEg4LzMwMDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUg4XzAwMmYzMDAtc3VwcG9ydC01NjkiPjwvYT5Gb3IgdGhlIEg4LzMwMCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gY2FuIHBlcmZvcm0gdGhlc2UgZ2xvYmFsIG9wdGltaXphdGlvbnMgd2hlbgoreW91IHNwZWNpZnkgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1yZWxheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kLWxpbmUgb3B0aW9uLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtcmVsYXhpbmctb24tSDhfMDAyZjMwMC01NzAiPjwvYT4KKzxkbD48ZHQ+PGVtPnJlbGF4aW5nIGFkZHJlc3MgbW9kZXM8L2VtPjxkZD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBmaW5kcyBhbGwgPGNvZGU+anNyPC9jb2RlPiBhbmQgPGNvZGU+am1wPC9jb2RlPiBpbnN0cnVjdGlvbnMgd2hvc2UKK3RhcmdldHMgYXJlIHdpdGhpbiBlaWdodCBiaXRzLCBhbmQgdHVybnMgdGhlbSBpbnRvIGVpZ2h0LWJpdAorcHJvZ3JhbS1jb3VudGVyIHJlbGF0aXZlIDxjb2RlPmJzcjwvY29kZT4gYW5kIDxjb2RlPmJyYTwvY29kZT4gaW5zdHJ1Y3Rpb25zLAorcmVzcGVjdGl2ZWx5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXN5bnRoZXNpemluZy1vbi1IOF8wMDJmMzAwLTU3MSI+PC9hPjxicj48ZHQ+PGVtPnN5bnRoZXNpemluZyBpbnN0cnVjdGlvbnM8L2VtPjxkZD48IS0tIEZJWE1FOiBzcGVjaWZpY2FsbHkgbW92LmIsIG9yIGFueSBtb3YgaW5zdHJ1Y3Rpb25zIHJlYWxseT8gLS0+Cis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBmaW5kcyBhbGwgPGNvZGU+bW92LmI8L2NvZGU+IGluc3RydWN0aW9ucyB3aGljaCB1c2UgdGhlCitzaXh0ZWVuLWJpdCBhYnNvbHV0ZSBhZGRyZXNzIGZvcm0sIGJ1dCByZWZlciB0byB0aGUgdG9wCitwYWdlIG9mIG1lbW9yeSwgYW5kIGNoYW5nZXMgdGhlbSB0byB1c2UgdGhlIGVpZ2h0LWJpdCBhZGRyZXNzIGZvcm0uIAorKFRoYXQgaXM6IHRoZSBsaW5rZXIgdHVybnMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tb3YuYiA8L3NwYW4+PGNvZGU+QDwvY29kZT48dmFyPmFhPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPjoxNjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1vdi5iIDwvc3Bhbj48Y29kZT5APC9jb2RlPjx2YXI+YWE8L3Zhcj48c3BhbiBjbGFzcz0ic2FtcCI+Ojg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hlbmV2ZXIgdGhlIGFkZHJlc3MgPHZhcj5hYTwvdmFyPiBpcyBpbiB0aGUKK3RvcCBwYWdlIG9mIG1lbW9yeSkuCisKKyAgICAgPGJyPjxkdD48ZW0+Yml0IG1hbmlwdWxhdGlvbiBpbnN0cnVjdGlvbnM8L2VtPjxkZD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBmaW5kcyBhbGwgYml0IG1hbmlwdWxhdGlvbiBpbnN0cnVjdGlvbnMgbGlrZSA8Y29kZT5iYW5kLCBiY2xyLAorYmlhbmQsIGJpbGQsIGJpb3IsIGJpc3QsIGJpeG9yLCBibGQsIGJub3QsIGJvciwgYnNldCwgYnN0LCBidHN0LCBieG9yPC9jb2RlPgord2hpY2ggdXNlIDMyIGJpdCBhbmQgMTYgYml0IGFic29sdXRlIGFkZHJlc3MgZm9ybSwgYnV0IHJlZmVyIHRvIHRoZSB0b3AKK3BhZ2Ugb2YgbWVtb3J5LCBhbmQgY2hhbmdlcyB0aGVtIHRvIHVzZSB0aGUgOCBiaXQgYWRkcmVzcyBmb3JtLiAKKyhUaGF0IGlzOiB0aGUgbGlua2VyIHR1cm5zICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YnNldCAjeHg6Myw8L3NwYW4+PGNvZGU+QDwvY29kZT48dmFyPmFhPC92YXI+PHNwYW4gY2xhc3M9InNhbXAiPjozMjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJzZXQgI3h4OjMsPC9zcGFuPjxjb2RlPkA8L2NvZGU+PHZhcj5hYTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj46ODwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aGVuZXZlciB0aGUgYWRkcmVzcyA8dmFyPmFhPC92YXI+IGlzIGluCit0aGUgdG9wIHBhZ2Ugb2YgbWVtb3J5KS4KKworICAgICA8YnI+PGR0PjxlbT5zeXN0ZW0gY29udHJvbCBpbnN0cnVjdGlvbnM8L2VtPjxkZD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBmaW5kcyBhbGwgPGNvZGU+bGRjLncsIHN0Yy53PC9jb2RlPiBpbnN0cnVjdGlvbnMgd2hpY2ggdXNlIHRoZQorMzIgYml0IGFic29sdXRlIGFkZHJlc3MgZm9ybSwgYnV0IHJlZmVyIHRvIHRoZSB0b3AgcGFnZSBvZiBtZW1vcnksIGFuZAorY2hhbmdlcyB0aGVtIHRvIHVzZSAxNiBiaXQgYWRkcmVzcyBmb3JtLiAKKyhUaGF0IGlzOiB0aGUgbGlua2VyIHR1cm5zICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGRjLncgPC9zcGFuPjxjb2RlPkA8L2NvZGU+PHZhcj5hYTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj46MzIsY2NyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGludG8KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGRjLncgPC9zcGFuPjxjb2RlPkA8L2NvZGU+PHZhcj5hYTwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj46MTYsY2NyPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoZW5ldmVyIHRoZSBhZGRyZXNzIDx2YXI+YWE8L3Zhcj4gaXMgaW4KK3RoZSB0b3AgcGFnZSBvZiBtZW1vcnkpLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0hJRERFTi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSElEREVOLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2NzJhYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0hJRERFTi5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkhJRERFTiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNBc3NpZ25tZW50cyIgdGl0bGU9IkFzc2lnbm1lbnRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2ltcGxlLUFzc2lnbm1lbnRzLmh0bWwjU2ltcGxlLUFzc2lnbm1lbnRzIiB0aXRsZT0iU2ltcGxlIEFzc2lnbm1lbnRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUFJPVklERS5odG1sI1BST1ZJREUiIHRpdGxlPSJQUk9WSURFIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJISURERU4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUFJPVklERS5odG1sI1BST1ZJREUiPlBST1ZJREU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTaW1wbGUtQXNzaWdubWVudHMuaHRtbCNTaW1wbGUtQXNzaWdubWVudHMiPlNpbXBsZSBBc3NpZ25tZW50czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFzc2lnbm1lbnRzLmh0bWwjQXNzaWdubWVudHMiPkFzc2lnbm1lbnRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My41LjIgSElEREVOPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtSElEREVOLTM5NiI+PC9hPkZvciBFTEYgdGFyZ2V0ZWQgcG9ydHMsIGRlZmluZSBhIHN5bWJvbCB0aGF0IHdpbGwgYmUgaGlkZGVuIGFuZCB3b24ndCBiZQorZXhwb3J0ZWQuICBUaGUgc3ludGF4IGlzIDxjb2RlPkhJRERFTig8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gPSA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+KTwvY29kZT4uCisKKyAgIDxwPkhlcmUgaXMgdGhlIGV4YW1wbGUgZnJvbSA8YSBocmVmPSJTaW1wbGUtQXNzaWdubWVudHMuaHRtbCNTaW1wbGUtQXNzaWdubWVudHMiPlNpbXBsZSBBc3NpZ25tZW50czwvYT4sIHJld3JpdHRlbiB0byB1c2UKKzxjb2RlPkhJRERFTjwvY29kZT46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBISURERU4oZmxvYXRpbmdfcG9pbnQgPSAwKTsKKyAgICAgU0VDVElPTlMKKyAgICAgeworICAgICAgIC50ZXh0IDoKKyAgICAgICAgIHsKKyAgICAgICAgICAgKigudGV4dCkKKyAgICAgICAgICAgSElEREVOKF9ldGV4dCA9IC4pOworICAgICAgICAgfQorICAgICAgIEhJRERFTihfYmRhdGEgPSAoLiArIDMpICZhbXA7IH4gMyk7CisgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIH0KKyAgICAgfQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkluIHRoaXMgY2FzZSBub25lIG9mIHRoZSB0aHJlZSBzeW1ib2xzIHdpbGwgYmUgdmlzaWJsZSBvdXRzaWRlIHRoaXMgbW9kdWxlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9IUFBBLUVMRjMyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9IUFBBLUVMRjMyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2MTMzNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0hQUEEtRUxGMzIuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5IUFBBIEVMRjMyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50IiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBUk0uaHRtbCNBUk0iIHRpdGxlPSJBUk0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNNjhLLmh0bWwjTTY4SyIgdGl0bGU9Ik02OEsiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkhQUEEtRUxGMzIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTY4Sy5odG1sI002OEsiPk02OEs8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiPk1hY2hpbmUgRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC41IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBIUFBBIDMyLWJpdCBFTEYgU3VwcG9ydDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LUhQUEEtbXVsdGlwbGUtc3ViXzAwMmRzcGFjZS1zdHVicy02MTciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbXVsdGlfMDAyZHN1YnNwYWNlLTYxOCI+PC9hPldoZW4gZ2VuZXJhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB3aWxsIGJ5IGRlZmF1bHQgZ2VuZXJhdGUKK2ltcG9ydCBzdHVicyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggYSBzaW5nbGUgc3ViLXNwYWNlIGFwcGxpY2F0aW9uLiAKK1RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbXVsdGktc3Vic3BhY2U8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3dpdGNoIGNhdXNlcyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0byBnZW5lcmF0ZSBleHBvcnQKK3N0dWJzLCBhbmQgZGlmZmVyZW50IChsYXJnZXIpIGltcG9ydCBzdHVicyBzdWl0YWJsZSBmb3IgdXNlIHdpdGgKK211bHRpcGxlIHN1Yi1zcGFjZXMuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUhQUEEtc3R1Yi1ncm91cGluZy02MTkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkc3R1Yl8wMDJkZ3JvdXBfMDAyZHNpemVfMDAzZF8wMDQwdmFyXzAwN2JOXzAwN2QtNjIwIj48L2E+TG9uZyBicmFuY2ggc3R1YnMgYW5kIGltcG9ydC9leHBvcnQgc3R1YnMgYXJlIHBsYWNlZCBieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBpbgorc3R1YiBzZWN0aW9ucyBsb2NhdGVkIGJldHdlZW4gZ3JvdXBzIG9mIGlucHV0IHNlY3Rpb25zLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1zdHViLWdyb3VwLXNpemU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBncm91cCBvZiBpbnB1dAorc2VjdGlvbnMgaGFuZGxlZCBieSBvbmUgc3R1YiBzZWN0aW9uLiAgU2luY2UgYnJhbmNoIG9mZnNldHMgYXJlIHNpZ25lZCwKK2Egc3R1YiBzZWN0aW9uIG1heSBzZXJ2ZSB0d28gZ3JvdXBzIG9mIGlucHV0IHNlY3Rpb25zLCBvbmUgZ3JvdXAgYmVmb3JlCit0aGUgc3R1YiBzZWN0aW9uLCBhbmQgb25lIGdyb3VwIGFmdGVyIGl0LiAgSG93ZXZlciwgd2hlbiB1c2luZworY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCByZXF1aXJlIHN0dWJzLCBpdCBtYXkgYmUgYmV0dGVyIChmb3IgYnJhbmNoCitwcmVkaWN0aW9uKSB0aGF0IHN0dWIgc2VjdGlvbnMgb25seSBzZXJ2ZSBvbmUgZ3JvdXAgb2YgaW5wdXQgc2VjdGlvbnMuIAorQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5OPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNob29zZXMgdGhpcyBzY2hlbWUsIGVuc3VyaW5nIHRoYXQKK2JyYW5jaGVzIHRvIHN0dWJzIGFsd2F5cyB1c2UgYSBuZWdhdGl2ZSBvZmZzZXQuICBUd28gc3BlY2lhbCB2YWx1ZXMgb2YKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgcmVjb2duaXplZCwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4xPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0xPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlc2UgYm90aCBpbnN0cnVjdAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gdG8gYXV0b21hdGljYWxseSBzaXplIGlucHV0IHNlY3Rpb24gZ3JvdXBzIGZvciB0aGUgYnJhbmNoIHR5cGVzCitkZXRlY3RlZCwgd2l0aCB0aGUgc2FtZSBiZWhhdmlvdXIgcmVnYXJkaW5nIHN0dWIgcGxhY2VtZW50IGFzIG90aGVyCitwb3NpdGl2ZSBvciBuZWdhdGl2ZSB2YWx1ZXMgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5OPC9zcGFuPjwvc2FtcD4mcnNxdW87IHJlc3BlY3RpdmVseS4KKworICAgPHA+Tm90ZSB0aGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1zdHViLWdyb3VwLXNpemU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZG9lcyBub3Qgc3BsaXQgaW5wdXQgc2VjdGlvbnMuICBBCitzaW5nbGUgaW5wdXQgc2VjdGlvbiBsYXJnZXIgdGhhbiB0aGUgZ3JvdXAgc2l6ZSBzcGVjaWZpZWQgd2lsbCBvZiBjb3Vyc2UKK2NyZWF0ZSBhIGxhcmdlciBncm91cCAob2Ygb25lIHNlY3Rpb24pLiAgSWYgaW5wdXQgc2VjdGlvbnMgYXJlIHRvbworbGFyZ2UsIGl0IG1heSBub3QgYmUgcG9zc2libGUgZm9yIGEgYnJhbmNoIHRvIHJlYWNoIGl0cyBzdHViLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9JbXBsaWNpdC1MaW5rZXItU2NyaXB0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW1wbGljaXQtTGlua2VyLVNjcmlwdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFiYjY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW1wbGljaXQtTGlua2VyLVNjcmlwdHMuaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5JbXBsaWNpdCBMaW5rZXIgU2NyaXB0cyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiIHRpdGxlPSJTY3JpcHRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyIgdGl0bGU9IkV4cHJlc3Npb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbXBsaWNpdC1MaW5rZXItU2NyaXB0cyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiPlNjcmlwdHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjExIEltcGxpY2l0IExpbmtlciBTY3JpcHRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW1wbGljaXQtbGlua2VyLXNjcmlwdHMtNTY3Ij48L2E+SWYgeW91IHNwZWNpZnkgYSBsaW5rZXIgaW5wdXQgZmlsZSB3aGljaCB0aGUgbGlua2VyIGNhbiBub3QgcmVjb2duaXplIGFzCithbiBvYmplY3QgZmlsZSBvciBhbiBhcmNoaXZlIGZpbGUsIGl0IHdpbGwgdHJ5IHRvIHJlYWQgdGhlIGZpbGUgYXMgYQorbGlua2VyIHNjcmlwdC4gIElmIHRoZSBmaWxlIGNhbiBub3QgYmUgcGFyc2VkIGFzIGEgbGlua2VyIHNjcmlwdCwgdGhlCitsaW5rZXIgd2lsbCByZXBvcnQgYW4gZXJyb3IuCisKKyAgIDxwPkFuIGltcGxpY2l0IGxpbmtlciBzY3JpcHQgd2lsbCBub3QgcmVwbGFjZSB0aGUgZGVmYXVsdCBsaW5rZXIgc2NyaXB0LgorCisgICA8cD5UeXBpY2FsbHkgYW4gaW1wbGljaXQgbGlua2VyIHNjcmlwdCB3b3VsZCBjb250YWluIG9ubHkgc3ltYm9sCithc3NpZ25tZW50cywgb3IgdGhlIDxjb2RlPklOUFVUPC9jb2RlPiwgPGNvZGU+R1JPVVA8L2NvZGU+LCBvciA8Y29kZT5WRVJTSU9OPC9jb2RlPgorY29tbWFuZHMuCisKKyAgIDxwPkFueSBpbnB1dCBmaWxlcyByZWFkIGJlY2F1c2Ugb2YgYW4gaW1wbGljaXQgbGlua2VyIHNjcmlwdCB3aWxsIGJlIHJlYWQKK2F0IHRoZSBwb3NpdGlvbiBpbiB0aGUgY29tbWFuZCBsaW5lIHdoZXJlIHRoZSBpbXBsaWNpdCBsaW5rZXIgc2NyaXB0IHdhcworcmVhZC4gIFRoaXMgY2FuIGFmZmVjdCBhcmNoaXZlIHNlYXJjaGluZy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi1CYXNpY3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0lucHV0LVNlY3Rpb24tQmFzaWNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5NTljYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0lucHV0LVNlY3Rpb24tQmFzaWNzLmh0bWwKQEAgLTAsMCArMSwxMzcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklucHV0IFNlY3Rpb24gQmFzaWNzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnB1dC1TZWN0aW9uLmh0bWwjSW5wdXQtU2VjdGlvbiIgdGl0bGU9IklucHV0IFNlY3Rpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI0lucHV0LVNlY3Rpb24tV2lsZGNhcmRzIiB0aXRsZT0iSW5wdXQgU2VjdGlvbiBXaWxkY2FyZHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklucHV0LVNlY3Rpb24tQmFzaWNzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMiPklucHV0IFNlY3Rpb24gV2lsZGNhcmRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW5wdXQtU2VjdGlvbi5odG1sI0lucHV0LVNlY3Rpb24iPklucHV0IFNlY3Rpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjYuNC4xIElucHV0IFNlY3Rpb24gQmFzaWNzPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW5wdXQtc2VjdGlvbi1iYXNpY3MtNDA2Ij48L2E+QW4gaW5wdXQgc2VjdGlvbiBkZXNjcmlwdGlvbiBjb25zaXN0cyBvZiBhIGZpbGUgbmFtZSBvcHRpb25hbGx5IGZvbGxvd2VkCitieSBhIGxpc3Qgb2Ygc2VjdGlvbiBuYW1lcyBpbiBwYXJlbnRoZXNlcy4KKworICAgPHA+VGhlIGZpbGUgbmFtZSBhbmQgdGhlIHNlY3Rpb24gbmFtZSBtYXkgYmUgd2lsZGNhcmQgcGF0dGVybnMsIHdoaWNoIHdlCitkZXNjcmliZSBmdXJ0aGVyIGJlbG93IChzZWUgPGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbCNJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcyI+SW5wdXQgU2VjdGlvbiBXaWxkY2FyZHM8L2E+KS4KKworICAgPHA+VGhlIG1vc3QgY29tbW9uIGlucHV0IHNlY3Rpb24gZGVzY3JpcHRpb24gaXMgdG8gaW5jbHVkZSBhbGwgaW5wdXQKK3NlY3Rpb25zIHdpdGggYSBwYXJ0aWN1bGFyIG5hbWUgaW4gdGhlIG91dHB1dCBzZWN0aW9uLiAgRm9yIGV4YW1wbGUsIHRvCitpbmNsdWRlIGFsbCBpbnB1dCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb25zLCB5b3Ugd291bGQgd3JpdGU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgKigudGV4dCkKKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5IZXJlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYSB3aWxkY2FyZCB3aGljaCBtYXRjaGVzIGFueSBmaWxlIG5hbWUuICBUbyBleGNsdWRlIGEgbGlzdAorb2YgZmlsZXMgZnJvbSBtYXRjaGluZyB0aGUgZmlsZSBuYW1lIHdpbGRjYXJkLCBFWENMVURFX0ZJTEUgbWF5IGJlIHVzZWQgdG8KK21hdGNoIGFsbCBmaWxlcyBleGNlcHQgdGhlIG9uZXMgc3BlY2lmaWVkIGluIHRoZSBFWENMVURFX0ZJTEUgbGlzdC4gIEZvcgorZXhhbXBsZToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAqKEVYQ0xVREVfRklMRSAoKmNydGVuZC5vICpvdGhlcmZpbGUubykgLmN0b3JzKQorPC9wcmU+CisgICA8cD53aWxsIGNhdXNlIGFsbCAuY3RvcnMgc2VjdGlvbnMgZnJvbSBhbGwgZmlsZXMgZXhjZXB0IDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jcnRlbmQubzwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm90aGVyZmlsZS5vPC9zcGFuPjwvc2FtcD4gdG8gYmUgaW5jbHVkZWQuCisKKyAgIDxwPlRoZXJlIGFyZSB0d28gd2F5cyB0byBpbmNsdWRlIG1vcmUgdGhhbiBvbmUgc2VjdGlvbjoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAqKC50ZXh0IC5yZGF0YSkKKyAgICAgKigudGV4dCkgKigucmRhdGEpCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBpcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5yZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnB1dCBzZWN0aW9ucyB3aWxsIGFwcGVhciBpbiB0aGUgb3V0cHV0IHNlY3Rpb24uICBJbiB0aGUKK2ZpcnN0IGV4YW1wbGUsIHRoZXkgd2lsbCBiZSBpbnRlcm1pbmdsZWQsIGFwcGVhcmluZyBpbiB0aGUgc2FtZSBvcmRlciBhcwordGhleSBhcmUgZm91bmQgaW4gdGhlIGxpbmtlciBpbnB1dC4gIEluIHRoZSBzZWNvbmQgZXhhbXBsZSwgYWxsCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlucHV0IHNlY3Rpb25zIHdpbGwgYXBwZWFyIGZpcnN0LCBmb2xsb3dlZCBieSBhbGwKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnJkYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlucHV0IHNlY3Rpb25zLgorCisgICA8cD5Zb3UgY2FuIHNwZWNpZnkgYSBmaWxlIG5hbWUgdG8gaW5jbHVkZSBzZWN0aW9ucyBmcm9tIGEgcGFydGljdWxhciBmaWxlLiAKK1lvdSB3b3VsZCBkbyB0aGlzIGlmIG9uZSBvciBtb3JlIG9mIHlvdXIgZmlsZXMgY29udGFpbiBzcGVjaWFsIGRhdGEgdGhhdAorbmVlZHMgdG8gYmUgYXQgYSBwYXJ0aWN1bGFyIGxvY2F0aW9uIGluIG1lbW9yeS4gIEZvciBleGFtcGxlOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGRhdGEubyguZGF0YSkKKzwvcHJlPgorICAgPHA+VG8gcmVmaW5lIHRoZSBzZWN0aW9ucyB0aGF0IGFyZSBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgc2VjdGlvbiBmbGFncworb2YgYW4gaW5wdXQgc2VjdGlvbiwgSU5QVVRfU0VDVElPTl9GTEFHUyBtYXkgYmUgdXNlZC4KKworICAgPHA+SGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIGZvciB1c2luZyBTZWN0aW9uIGhlYWRlciBmbGFncyBmb3IgRUxGIHNlY3Rpb25zOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMgeworICAgICAgIC50ZXh0IDogeyBJTlBVVF9TRUNUSU9OX0ZMQUdTIChTSEZfTUVSR0UgJmFtcDsgU0hGX1NUUklOR1MpICooLnRleHQpIH0KKyAgICAgICAudGV4dDIgOiAgeyBJTlBVVF9TRUNUSU9OX0ZMQUdTICghU0hGX1dSSVRFKSAqKC50ZXh0KSB9CisgICAgIH0KKzwvcHJlPgorICAgPHA+SW4gdGhpcyBleGFtcGxlLCB0aGUgb3V0cHV0IHNlY3Rpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsIGJlIGNvbXByaXNlZCBvZiBhbnkKK2lucHV0IHNlY3Rpb24gbWF0Y2hpbmcgdGhlIG5hbWUgKigudGV4dCkgd2hvc2Ugc2VjdGlvbiBoZWFkZXIgZmxhZ3MKKzxjb2RlPlNIRl9NRVJHRTwvY29kZT4gYW5kIDxjb2RlPlNIRl9TVFJJTkdTPC9jb2RlPiBhcmUgc2V0LiAgVGhlIG91dHB1dCBzZWN0aW9uCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0Mjwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsIGJlIGNvbXByaXNlZCBvZiBhbnkgaW5wdXQgc2VjdGlvbiBtYXRjaGluZyB0aGUgbmFtZSAqKC50ZXh0KQord2hvc2Ugc2VjdGlvbiBoZWFkZXIgZmxhZyA8Y29kZT5TSEZfV1JJVEU8L2NvZGU+IGlzIGNsZWFyLgorCisgICA8cD5Zb3UgY2FuIGFsc28gc3BlY2lmeSBmaWxlcyB3aXRoaW4gYXJjaGl2ZXMgYnkgd3JpdGluZyBhIHBhdHRlcm4KK21hdGNoaW5nIHRoZSBhcmNoaXZlLCBhIGNvbG9uLCB0aGVuIHRoZSBwYXR0ZXJuIG1hdGNoaW5nIHRoZSBmaWxlLAord2l0aCBubyB3aGl0ZXNwYWNlIGFyb3VuZCB0aGUgY29sb24uCisKKyAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJjaGl2ZTpmaWxlPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPm1hdGNoZXMgZmlsZSB3aXRoaW4gYXJjaGl2ZQorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyY2hpdmU6PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPm1hdGNoZXMgdGhlIHdob2xlIGFyY2hpdmUKKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46ZmlsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5tYXRjaGVzIGZpbGUgYnV0IG5vdCBvbmUgaW4gYW4gYXJjaGl2ZQorPC9kbD4KKworICAgPHA+RWl0aGVyIG9uZSBvciBib3RoIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXJjaGl2ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5maWxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNhbiBjb250YWluIHNoZWxsCit3aWxkY2FyZHMuICBPbiBET1MgYmFzZWQgZmlsZSBzeXN0ZW1zLCB0aGUgbGlua2VyIHdpbGwgYXNzdW1lIHRoYXQgYQorc2luZ2xlIGxldHRlciBmb2xsb3dlZCBieSBhIGNvbG9uIGlzIGEgZHJpdmUgc3BlY2lmaWVyLCBzbworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jOm15ZmlsZS5vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGEgc2ltcGxlIGZpbGUgc3BlY2lmaWNhdGlvbiwgbm90ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXlmaWxlLm88L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3dpdGhpbiBhbiBhcmNoaXZlIGNhbGxlZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyY2hpdmU6ZmlsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmaWxlc3BlY3MgbWF5CithbHNvIGJlIHVzZWQgd2l0aGluIGFuIDxjb2RlPkVYQ0xVREVfRklMRTwvY29kZT4gbGlzdCwgYnV0IG1heSBub3QgYXBwZWFyIGluCitvdGhlciBsaW5rZXIgc2NyaXB0IGNvbnRleHRzLiAgRm9yIGluc3RhbmNlLCB5b3UgY2Fubm90IGV4dHJhY3QgYSBmaWxlCitmcm9tIGFuIGFyY2hpdmUgYnkgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcmNoaXZlOmZpbGU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gYW4gPGNvZGU+SU5QVVQ8L2NvZGU+Citjb21tYW5kLgorCisgICA8cD5JZiB5b3UgdXNlIGEgZmlsZSBuYW1lIHdpdGhvdXQgYSBsaXN0IG9mIHNlY3Rpb25zLCB0aGVuIGFsbCBzZWN0aW9ucyBpbgordGhlIGlucHV0IGZpbGUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IHNlY3Rpb24uICBUaGlzIGlzIG5vdAorY29tbW9ubHkgZG9uZSwgYnV0IGl0IG1heSBieSB1c2VmdWwgb24gb2NjYXNpb24uICBGb3IgZXhhbXBsZToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBkYXRhLm8KKzwvcHJlPgorICAgPHA+V2hlbiB5b3UgdXNlIGEgZmlsZSBuYW1lIHdoaWNoIGlzIG5vdCBhbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmFyY2hpdmU6ZmlsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzcGVjaWZpZXIKK2FuZCBkb2VzIG5vdCBjb250YWluIGFueSB3aWxkIGNhcmQKK2NoYXJhY3RlcnMsIHRoZSBsaW5rZXIgd2lsbCBmaXJzdCBzZWUgaWYgeW91IGFsc28gc3BlY2lmaWVkIHRoZSBmaWxlCituYW1lIG9uIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lIG9yIGluIGFuIDxjb2RlPklOUFVUPC9jb2RlPiBjb21tYW5kLiAgSWYgeW91CitkaWQgbm90LCB0aGUgbGlua2VyIHdpbGwgYXR0ZW1wdCB0byBvcGVuIHRoZSBmaWxlIGFzIGFuIGlucHV0IGZpbGUsIGFzCit0aG91Z2ggaXQgYXBwZWFyZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRpZmZlcnMgZnJvbSBhbgorPGNvZGU+SU5QVVQ8L2NvZGU+IGNvbW1hbmQsIGJlY2F1c2UgdGhlIGxpbmtlciB3aWxsIG5vdCBzZWFyY2ggZm9yIHRoZSBmaWxlIGluCit0aGUgYXJjaGl2ZSBzZWFyY2ggcGF0aC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0lucHV0LVNlY3Rpb24tQ29tbW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5ZTA5MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0lucHV0LVNlY3Rpb24tQ29tbW9uLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5wdXQgU2VjdGlvbiBDb21tb24gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IklucHV0LVNlY3Rpb24uaHRtbCNJbnB1dC1TZWN0aW9uIiB0aXRsZT0iSW5wdXQgU2VjdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMiIHRpdGxlPSJJbnB1dCBTZWN0aW9uIFdpbGRjYXJkcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklucHV0LVNlY3Rpb24tS2VlcC5odG1sI0lucHV0LVNlY3Rpb24tS2VlcCIgdGl0bGU9IklucHV0IFNlY3Rpb24gS2VlcCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW5wdXQtU2VjdGlvbi1Db21tb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW5wdXQtU2VjdGlvbi1LZWVwLmh0bWwjSW5wdXQtU2VjdGlvbi1LZWVwIj5JbnB1dCBTZWN0aW9uIEtlZXA8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI0lucHV0LVNlY3Rpb24tV2lsZGNhcmRzIj5JbnB1dCBTZWN0aW9uIFdpbGRjYXJkczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IklucHV0LVNlY3Rpb24uaHRtbCNJbnB1dC1TZWN0aW9uIj5JbnB1dCBTZWN0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+My42LjQuMyBJbnB1dCBTZWN0aW9uIGZvciBDb21tb24gU3ltYm9sczwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNvbW1vbi1zeW1ib2wtcGxhY2VtZW50LTQxNiI+PC9hPjxhIG5hbWU9ImluZGV4LXVuaW5pdGlhbGl6ZWQtZGF0YS1wbGFjZW1lbnQtNDE3Ij48L2E+QSBzcGVjaWFsIG5vdGF0aW9uIGlzIG5lZWRlZCBmb3IgY29tbW9uIHN5bWJvbHMsIGJlY2F1c2UgaW4gbWFueSBvYmplY3QKK2ZpbGUgZm9ybWF0cyBjb21tb24gc3ltYm9scyBkbyBub3QgaGF2ZSBhIHBhcnRpY3VsYXIgaW5wdXQgc2VjdGlvbi4gIFRoZQorbGlua2VyIHRyZWF0cyBjb21tb24gc3ltYm9scyBhcyB0aG91Z2ggdGhleSBhcmUgaW4gYW4gaW5wdXQgc2VjdGlvbgorbmFtZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DT01NT048L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPllvdSBtYXkgdXNlIGZpbGUgbmFtZXMgd2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DT01NT048L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiBqdXN0IGFzIHdpdGggYW55CitvdGhlciBpbnB1dCBzZWN0aW9ucy4gIFlvdSBjYW4gdXNlIHRoaXMgdG8gcGxhY2UgY29tbW9uIHN5bWJvbHMgZnJvbSBhCitwYXJ0aWN1bGFyIGlucHV0IGZpbGUgaW4gb25lIHNlY3Rpb24gd2hpbGUgY29tbW9uIHN5bWJvbHMgZnJvbSBvdGhlcgoraW5wdXQgZmlsZXMgYXJlIHBsYWNlZCBpbiBhbm90aGVyIHNlY3Rpb24uCisKKyAgIDxwPkluIG1vc3QgY2FzZXMsIGNvbW1vbiBzeW1ib2xzIGluIGlucHV0IGZpbGVzIHdpbGwgYmUgcGxhY2VkIGluIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYnNzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24gaW4gdGhlIG91dHB1dCBmaWxlLiAgRm9yIGV4YW1wbGU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgLmJzcyB7ICooLmJzcykgKihDT01NT04pIH0KKzwvcHJlPgorICAgPHA+PGEgbmFtZT0iaW5kZXgtc2NvbW1vbi1zZWN0aW9uLTQxOCI+PC9hPjxhIG5hbWU9ImluZGV4LXNtYWxsLWNvbW1vbi1zeW1ib2xzLTQxOSI+PC9hPlNvbWUgb2JqZWN0IGZpbGUgZm9ybWF0cyBoYXZlIG1vcmUgdGhhbiBvbmUgdHlwZSBvZiBjb21tb24gc3ltYm9sLiAgRm9yCitleGFtcGxlLCB0aGUgTUlQUyBFTEYgb2JqZWN0IGZpbGUgZm9ybWF0IGRpc3Rpbmd1aXNoZXMgc3RhbmRhcmQgY29tbW9uCitzeW1ib2xzIGFuZCBzbWFsbCBjb21tb24gc3ltYm9scy4gIEluIHRoaXMgY2FzZSwgdGhlIGxpbmtlciB3aWxsIHVzZSBhCitkaWZmZXJlbnQgc3BlY2lhbCBzZWN0aW9uIG5hbWUgZm9yIG90aGVyIHR5cGVzIG9mIGNvbW1vbiBzeW1ib2xzLiAgSW4KK3RoZSBjYXNlIG9mIE1JUFMgRUxGLCB0aGUgbGlua2VyIHVzZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DT01NT048L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHN0YW5kYXJkIGNvbW1vbgorc3ltYm9scyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc2NvbW1vbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3Igc21hbGwgY29tbW9uIHN5bWJvbHMuICBUaGlzIHBlcm1pdHMgeW91Cit0byBtYXAgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBjb21tb24gc3ltYm9scyBpbnRvIG1lbW9yeSBhdCBkaWZmZXJlbnQKK2xvY2F0aW9ucy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWJDT01NT05fMDA1ZC00MjAiPjwvYT5Zb3Ugd2lsbCBzb21ldGltZXMgc2VlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+W0NPTU1PTl08L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gb2xkIGxpbmtlciBzY3JpcHRzLiAgVGhpcworbm90YXRpb24gaXMgbm93IGNvbnNpZGVyZWQgb2Jzb2xldGUuICBJdCBpcyBlcXVpdmFsZW50IHRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiooQ09NTU9OKTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi1FeGFtcGxlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9JbnB1dC1TZWN0aW9uLUV4YW1wbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIzNGZkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi1FeGFtcGxlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5wdXQgU2VjdGlvbiBFeGFtcGxlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJJbnB1dC1TZWN0aW9uLmh0bWwjSW5wdXQtU2VjdGlvbiIgdGl0bGU9IklucHV0IFNlY3Rpb24iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbnB1dC1TZWN0aW9uLUtlZXAuaHRtbCNJbnB1dC1TZWN0aW9uLUtlZXAiIHRpdGxlPSJJbnB1dCBTZWN0aW9uIEtlZXAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IklucHV0LVNlY3Rpb24tRXhhbXBsZSI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IklucHV0LVNlY3Rpb24tS2VlcC5odG1sI0lucHV0LVNlY3Rpb24tS2VlcCI+SW5wdXQgU2VjdGlvbiBLZWVwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iSW5wdXQtU2VjdGlvbi5odG1sI0lucHV0LVNlY3Rpb24iPklucHV0IFNlY3Rpb248L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjYuNC41IElucHV0IFNlY3Rpb24gRXhhbXBsZTwvaDU+CisKKzxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpcyBhIGNvbXBsZXRlIGxpbmtlciBzY3JpcHQuICBJdCB0ZWxscyB0aGUgbGlua2VyCit0byByZWFkIGFsbCBvZiB0aGUgc2VjdGlvbnMgZnJvbSBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5hbGwubzwvc3Bhbj48L3NhbXA+IGFuZCBwbGFjZSB0aGVtIGF0IHRoZQorc3RhcnQgb2Ygb3V0cHV0IHNlY3Rpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vdXRwdXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdoaWNoIHN0YXJ0cyBhdCBsb2NhdGlvbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4weDEwMDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgQWxsIG9mIHNlY3Rpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaW5wdXQxPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZyb20gZmlsZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Zm9vLm88L3NwYW4+PC9zYW1wPgorZm9sbG93cyBpbW1lZGlhdGVseSwgaW4gdGhlIHNhbWUgb3V0cHV0IHNlY3Rpb24uICBBbGwgb2Ygc2VjdGlvbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaW5wdXQyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvby5vPC9zcGFuPjwvc2FtcD4gZ29lcyBpbnRvIG91dHB1dCBzZWN0aW9uCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm91dHB1dGI8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGZvbGxvd2VkIGJ5IHNlY3Rpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaW5wdXQxPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZvbzEubzwvc3Bhbj48L3NhbXA+LiAKK0FsbCBvZiB0aGUgcmVtYWluaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmlucHV0MTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uaW5wdXQyPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb25zIGZyb20gYW55CitmaWxlcyBhcmUgd3JpdHRlbiB0byBvdXRwdXQgc2VjdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm91dHB1dGM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBTRUNUSU9OUyB7CisgICAgICAgb3V0cHV0YSAweDEwMDAwIDoKKyAgICAgICAgIHsKKyAgICAgICAgIGFsbC5vCisgICAgICAgICBmb28ubyAoLmlucHV0MSkKKyAgICAgICAgIH0KKyAgICAgICBvdXRwdXRiIDoKKyAgICAgICAgIHsKKyAgICAgICAgIGZvby5vICguaW5wdXQyKQorICAgICAgICAgZm9vMS5vICguaW5wdXQxKQorICAgICAgICAgfQorICAgICAgIG91dHB1dGMgOgorICAgICAgICAgeworICAgICAgICAgKiguaW5wdXQxKQorICAgICAgICAgKiguaW5wdXQyKQorICAgICAgICAgfQorICAgICB9Cis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0lucHV0LVNlY3Rpb24tS2VlcC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi1LZWVwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyMjJiNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0lucHV0LVNlY3Rpb24tS2VlcC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPklucHV0IFNlY3Rpb24gS2VlcCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iSW5wdXQtU2VjdGlvbi5odG1sI0lucHV0LVNlY3Rpb24iIHRpdGxlPSJJbnB1dCBTZWN0aW9uIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNJbnB1dC1TZWN0aW9uLUNvbW1vbiIgdGl0bGU9IklucHV0IFNlY3Rpb24gQ29tbW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iSW5wdXQtU2VjdGlvbi1FeGFtcGxlLmh0bWwjSW5wdXQtU2VjdGlvbi1FeGFtcGxlIiB0aXRsZT0iSW5wdXQgU2VjdGlvbiBFeGFtcGxlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnB1dC1TZWN0aW9uLUtlZXAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW5wdXQtU2VjdGlvbi1FeGFtcGxlLmh0bWwjSW5wdXQtU2VjdGlvbi1FeGFtcGxlIj5JbnB1dCBTZWN0aW9uIEV4YW1wbGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnB1dC1TZWN0aW9uLUNvbW1vbi5odG1sI0lucHV0LVNlY3Rpb24tQ29tbW9uIj5JbnB1dCBTZWN0aW9uIENvbW1vbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IklucHV0LVNlY3Rpb24uaHRtbCNJbnB1dC1TZWN0aW9uIj5JbnB1dCBTZWN0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+My42LjQuNCBJbnB1dCBTZWN0aW9uIGFuZCBHYXJiYWdlIENvbGxlY3Rpb248L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1LRUVQLTQyMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdhcmJhZ2UtY29sbGVjdGlvbi00MjIiPjwvYT5XaGVuIGxpbmstdGltZSBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgaW4gdXNlICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZ2Mtc2VjdGlvbnM8L3NwYW4+PC9zYW1wPiZyc3F1bzspLAoraXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIG1hcmsgc2VjdGlvbnMgdGhhdCBzaG91bGQgbm90IGJlIGVsaW1pbmF0ZWQuIAorVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgc3Vycm91bmRpbmcgYW4gaW5wdXQgc2VjdGlvbidzIHdpbGRjYXJkIGVudHJ5Cit3aXRoIDxjb2RlPktFRVAoKTwvY29kZT4sIGFzIGluIDxjb2RlPktFRVAoKiguaW5pdCkpPC9jb2RlPiBvcgorPGNvZGU+S0VFUChTT1JUX0JZX05BTUUoKikoLmN0b3JzKSk8L2NvZGU+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9JbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjlkYTU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbApAQCAtMCwwICsxLDE2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5wdXQgU2VjdGlvbiBXaWxkY2FyZHMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IklucHV0LVNlY3Rpb24uaHRtbCNJbnB1dC1TZWN0aW9uIiB0aXRsZT0iSW5wdXQgU2VjdGlvbiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IklucHV0LVNlY3Rpb24tQmFzaWNzLmh0bWwjSW5wdXQtU2VjdGlvbi1CYXNpY3MiIHRpdGxlPSJJbnB1dCBTZWN0aW9uIEJhc2ljcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklucHV0LVNlY3Rpb24tQ29tbW9uLmh0bWwjSW5wdXQtU2VjdGlvbi1Db21tb24iIHRpdGxlPSJJbnB1dCBTZWN0aW9uIENvbW1vbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNJbnB1dC1TZWN0aW9uLUNvbW1vbiI+SW5wdXQgU2VjdGlvbiBDb21tb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnB1dC1TZWN0aW9uLUJhc2ljcy5odG1sI0lucHV0LVNlY3Rpb24tQmFzaWNzIj5JbnB1dCBTZWN0aW9uIEJhc2ljczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IklucHV0LVNlY3Rpb24uaHRtbCNJbnB1dC1TZWN0aW9uIj5JbnB1dCBTZWN0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+My42LjQuMiBJbnB1dCBTZWN0aW9uIFdpbGRjYXJkIFBhdHRlcm5zPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtaW5wdXQtc2VjdGlvbi13aWxkY2FyZHMtNDA3Ij48L2E+PGEgbmFtZT0iaW5kZXgtd2lsZGNhcmQtZmlsZS1uYW1lLXBhdHRlcm5zLTQwOCI+PC9hPjxhIG5hbWU9ImluZGV4LWZpbGUtbmFtZS13aWxkY2FyZC1wYXR0ZXJucy00MDkiPjwvYT48YSBuYW1lPSJpbmRleC1zZWN0aW9uLW5hbWUtd2lsZGNhcmQtcGF0dGVybnMtNDEwIj48L2E+SW4gYW4gaW5wdXQgc2VjdGlvbiBkZXNjcmlwdGlvbiwgZWl0aGVyIHRoZSBmaWxlIG5hbWUgb3IgdGhlIHNlY3Rpb24KK25hbWUgb3IgYm90aCBtYXkgYmUgd2lsZGNhcmQgcGF0dGVybnMuCisKKyAgIDxwPlRoZSBmaWxlIG5hbWUgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlZW4gaW4gbWFueSBleGFtcGxlcyBpcyBhIHNpbXBsZSB3aWxkY2FyZAorcGF0dGVybiBmb3IgdGhlIGZpbGUgbmFtZS4KKworICAgPHA+VGhlIHdpbGRjYXJkIHBhdHRlcm5zIGFyZSBsaWtlIHRob3NlIHVzZWQgYnkgdGhlIFVuaXggc2hlbGwuCisKKyAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Kjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5tYXRjaGVzIGFueSBudW1iZXIgb2YgY2hhcmFjdGVycworPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj88L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+bWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlcgorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPls8L3NwYW4+PHZhcj5jaGFyczwvdmFyPjxzcGFuIGNsYXNzPSJzYW1wIj5dPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPm1hdGNoZXMgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgYW55IG9mIHRoZSA8dmFyPmNoYXJzPC92YXI+OyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tPC9zcGFuPjwvc2FtcD4mcnNxdW87CitjaGFyYWN0ZXIgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSBhIHJhbmdlIG9mIGNoYXJhY3RlcnMsIGFzIGluCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlthLXpdPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIG1hdGNoIGFueSBsb3dlciBjYXNlIGxldHRlcgorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlw8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+cXVvdGVzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyCis8L2RsPgorCisgICA8cD5XaGVuIGEgZmlsZSBuYW1lIGlzIG1hdGNoZWQgd2l0aCBhIHdpbGRjYXJkLCB0aGUgd2lsZGNhcmQgY2hhcmFjdGVycword2lsbCBub3QgbWF0Y2ggYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi88L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyICh1c2VkIHRvIHNlcGFyYXRlIGRpcmVjdG9yeSBuYW1lcyBvbgorVW5peCkuICBBIHBhdHRlcm4gY29uc2lzdGluZyBvZiBhIHNpbmdsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hhcmFjdGVyIGlzIGFuCitleGNlcHRpb247IGl0IHdpbGwgYWx3YXlzIG1hdGNoIGFueSBmaWxlIG5hbWUsIHdoZXRoZXIgaXQgY29udGFpbnMgYQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yIG5vdC4gIEluIGEgc2VjdGlvbiBuYW1lLCB0aGUgd2lsZGNhcmQgY2hhcmFjdGVycyB3aWxsIG1hdGNoCithICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjaGFyYWN0ZXIuCisKKyAgIDxwPkZpbGUgbmFtZSB3aWxkY2FyZCBwYXR0ZXJucyBvbmx5IG1hdGNoIGZpbGVzIHdoaWNoIGFyZSBleHBsaWNpdGx5CitzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvciBpbiBhbiA8Y29kZT5JTlBVVDwvY29kZT4gY29tbWFuZC4gIFRoZSBsaW5rZXIKK2RvZXMgbm90IHNlYXJjaCBkaXJlY3RvcmllcyB0byBleHBhbmQgd2lsZGNhcmRzLgorCisgICA8cD5JZiBhIGZpbGUgbmFtZSBtYXRjaGVzIG1vcmUgdGhhbiBvbmUgd2lsZGNhcmQgcGF0dGVybiwgb3IgaWYgYSBmaWxlIG5hbWUKK2FwcGVhcnMgZXhwbGljaXRseSBhbmQgaXMgYWxzbyBtYXRjaGVkIGJ5IGEgd2lsZGNhcmQgcGF0dGVybiwgdGhlIGxpbmtlcgord2lsbCB1c2UgdGhlIGZpcnN0IG1hdGNoIGluIHRoZSBsaW5rZXIgc2NyaXB0LiAgRm9yIGV4YW1wbGUsIHRoaXMKK3NlcXVlbmNlIG9mIGlucHV0IHNlY3Rpb24gZGVzY3JpcHRpb25zIGlzIHByb2JhYmx5IGluIGVycm9yLCBiZWNhdXNlIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmRhdGEubzwvc3Bhbj48L3NhbXA+IHJ1bGUgd2lsbCBub3QgYmUgdXNlZDoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAuZGF0YSA6IHsgKiguZGF0YSkgfQorICAgICAuZGF0YTEgOiB7IGRhdGEubyguZGF0YSkgfQorPC9wcmU+CisgICA8cD48YSBuYW1lPSJpbmRleC1TT1JUXzAwNWZCWV8wMDVmTkFNRS00MTEiPjwvYT5Ob3JtYWxseSwgdGhlIGxpbmtlciB3aWxsIHBsYWNlIGZpbGVzIGFuZCBzZWN0aW9ucyBtYXRjaGVkIGJ5IHdpbGRjYXJkcworaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHNlZW4gZHVyaW5nIHRoZSBsaW5rLiAgWW91IGNhbiBjaGFuZ2UKK3RoaXMgYnkgdXNpbmcgdGhlIDxjb2RlPlNPUlRfQllfTkFNRTwvY29kZT4ga2V5d29yZCwgd2hpY2ggYXBwZWFycyBiZWZvcmUgYSB3aWxkY2FyZAorcGF0dGVybiBpbiBwYXJlbnRoZXNlcyAoZS5nLiwgPGNvZGU+U09SVF9CWV9OQU1FKC50ZXh0Kik8L2NvZGU+KS4gIFdoZW4gdGhlCis8Y29kZT5TT1JUX0JZX05BTUU8L2NvZGU+IGtleXdvcmQgaXMgdXNlZCwgdGhlIGxpbmtlciB3aWxsIHNvcnQgdGhlIGZpbGVzIG9yIHNlY3Rpb25zCitpbnRvIGFzY2VuZGluZyBvcmRlciBieSBuYW1lIGJlZm9yZSBwbGFjaW5nIHRoZW0gaW4gdGhlIG91dHB1dCBmaWxlLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1TT1JUXzAwNWZCWV8wMDVmQUxJR05NRU5ULTQxMiI+PC9hPjxjb2RlPlNPUlRfQllfQUxJR05NRU5UPC9jb2RlPiBpcyB2ZXJ5IHNpbWlsYXIgdG8gPGNvZGU+U09SVF9CWV9OQU1FPC9jb2RlPi4gVGhlCitkaWZmZXJlbmNlIGlzIDxjb2RlPlNPUlRfQllfQUxJR05NRU5UPC9jb2RlPiB3aWxsIHNvcnQgc2VjdGlvbnMgaW50bworYXNjZW5kaW5nIG9yZGVyIGJ5IGFsaWdubWVudCBiZWZvcmUgcGxhY2luZyB0aGVtIGluIHRoZSBvdXRwdXQgZmlsZS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtU09SVF8wMDVmQllfMDA1ZklOSVRfMDA1ZlBSSU9SSVRZLTQxMyI+PC9hPjxjb2RlPlNPUlRfQllfSU5JVF9QUklPUklUWTwvY29kZT4gaXMgdmVyeSBzaW1pbGFyIHRvIDxjb2RlPlNPUlRfQllfTkFNRTwvY29kZT4uIFRoZQorZGlmZmVyZW5jZSBpcyA8Y29kZT5TT1JUX0JZX0lOSVRfUFJJT1JJVFk8L2NvZGU+IHdpbGwgc29ydCBzZWN0aW9ucyBpbnRvCithc2NlbmRpbmcgb3JkZXIgYnkgbnVtZXJpY2FsIHZhbHVlIG9mIHRoZSBHQ0MgaW5pdF9wcmlvcml0eSBhdHRyaWJ1dGUKK2VuY29kZWQgaW4gdGhlIHNlY3Rpb24gbmFtZSBiZWZvcmUgcGxhY2luZyB0aGVtIGluIHRoZSBvdXRwdXQgZmlsZS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtU09SVC00MTQiPjwvYT48Y29kZT5TT1JUPC9jb2RlPiBpcyBhbiBhbGlhcyBmb3IgPGNvZGU+U09SVF9CWV9OQU1FPC9jb2RlPi4KKworICAgPHA+V2hlbiB0aGVyZSBhcmUgbmVzdGVkIHNlY3Rpb24gc29ydGluZyBjb21tYW5kcyBpbiBsaW5rZXIgc2NyaXB0LCB0aGVyZQorY2FuIGJlIGF0IG1vc3QgMSBsZXZlbCBvZiBuZXN0aW5nIGZvciBzZWN0aW9uIHNvcnRpbmcgY29tbWFuZHMuCisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPjxjb2RlPlNPUlRfQllfTkFNRTwvY29kZT4gKDxjb2RlPlNPUlRfQllfQUxJR05NRU5UPC9jb2RlPiAod2lsZGNhcmQgc2VjdGlvbiBwYXR0ZXJuKSkuIAorSXQgd2lsbCBzb3J0IHRoZSBpbnB1dCBzZWN0aW9ucyBieSBuYW1lIGZpcnN0LCB0aGVuIGJ5IGFsaWdubWVudCBpZiAyCitzZWN0aW9ucyBoYXZlIHRoZSBzYW1lIG5hbWUuIAorPGxpPjxjb2RlPlNPUlRfQllfQUxJR05NRU5UPC9jb2RlPiAoPGNvZGU+U09SVF9CWV9OQU1FPC9jb2RlPiAod2lsZGNhcmQgc2VjdGlvbiBwYXR0ZXJuKSkuIAorSXQgd2lsbCBzb3J0IHRoZSBpbnB1dCBzZWN0aW9ucyBieSBhbGlnbm1lbnQgZmlyc3QsIHRoZW4gYnkgbmFtZSBpZiAyCitzZWN0aW9ucyBoYXZlIHRoZSBzYW1lIGFsaWdubWVudC4gCis8bGk+PGNvZGU+U09SVF9CWV9OQU1FPC9jb2RlPiAoPGNvZGU+U09SVF9CWV9OQU1FPC9jb2RlPiAod2lsZGNhcmQgc2VjdGlvbiBwYXR0ZXJuKSkgaXMKK3RyZWF0ZWQgdGhlIHNhbWUgYXMgPGNvZGU+U09SVF9CWV9OQU1FPC9jb2RlPiAod2lsZGNhcmQgc2VjdGlvbiBwYXR0ZXJuKS4gCis8bGk+PGNvZGU+U09SVF9CWV9BTElHTk1FTlQ8L2NvZGU+ICg8Y29kZT5TT1JUX0JZX0FMSUdOTUVOVDwvY29kZT4gKHdpbGRjYXJkIHNlY3Rpb24gcGF0dGVybikpCitpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIDxjb2RlPlNPUlRfQllfQUxJR05NRU5UPC9jb2RlPiAod2lsZGNhcmQgc2VjdGlvbiBwYXR0ZXJuKS4gCis8bGk+QWxsIG90aGVyIG5lc3RlZCBzZWN0aW9uIHNvcnRpbmcgY29tbWFuZHMgYXJlIGludmFsaWQuCisgICAgICAgIDwvb2w+CisKKyAgIDxwPldoZW4gYm90aCBjb21tYW5kIGxpbmUgc2VjdGlvbiBzb3J0aW5nIG9wdGlvbiBhbmQgbGlua2VyIHNjcmlwdAorc2VjdGlvbiBzb3J0aW5nIGNvbW1hbmQgYXJlIHVzZWQsIHNlY3Rpb24gc29ydGluZyBjb21tYW5kIGFsd2F5cwordGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgICA8cD5JZiB0aGUgc2VjdGlvbiBzb3J0aW5nIGNvbW1hbmQgaW4gbGlua2VyIHNjcmlwdCBpc24ndCBuZXN0ZWQsIHRoZQorY29tbWFuZCBsaW5lIG9wdGlvbiB3aWxsIG1ha2UgdGhlIHNlY3Rpb24gc29ydGluZyBjb21tYW5kIHRvIGJlCit0cmVhdGVkIGFzIG5lc3RlZCBzb3J0aW5nIGNvbW1hbmQuCisKKyAgICAgPG9sIHR5cGU9MSBzdGFydD0xPgorPGxpPjxjb2RlPlNPUlRfQllfTkFNRTwvY29kZT4gKHdpbGRjYXJkIHNlY3Rpb24gcGF0dGVybiApIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc29ydC1zZWN0aW9ucyBhbGlnbm1lbnQ8L3NwYW4+PC9zYW1wPiBpcyBlcXVpdmFsZW50IHRvCis8Y29kZT5TT1JUX0JZX05BTUU8L2NvZGU+ICg8Y29kZT5TT1JUX0JZX0FMSUdOTUVOVDwvY29kZT4gKHdpbGRjYXJkIHNlY3Rpb24gcGF0dGVybikpLiAKKzxsaT48Y29kZT5TT1JUX0JZX0FMSUdOTUVOVDwvY29kZT4gKHdpbGRjYXJkIHNlY3Rpb24gcGF0dGVybikgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zb3J0LXNlY3Rpb24gbmFtZTwvc3Bhbj48L3NhbXA+IGlzIGVxdWl2YWxlbnQgdG8KKzxjb2RlPlNPUlRfQllfQUxJR05NRU5UPC9jb2RlPiAoPGNvZGU+U09SVF9CWV9OQU1FPC9jb2RlPiAod2lsZGNhcmQgc2VjdGlvbiBwYXR0ZXJuKSkuCisgICAgICAgIDwvb2w+CisKKyAgIDxwPklmIHRoZSBzZWN0aW9uIHNvcnRpbmcgY29tbWFuZCBpbiBsaW5rZXIgc2NyaXB0IGlzIG5lc3RlZCwgdGhlCitjb21tYW5kIGxpbmUgb3B0aW9uIHdpbGwgYmUgaWdub3JlZC4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtU09SVF8wMDVmTk9ORS00MTUiPjwvYT48Y29kZT5TT1JUX05PTkU8L2NvZGU+IGRpc2FibGVzIHNlY3Rpb24gc29ydGluZyBieSBpZ25vcmluZyB0aGUgY29tbWFuZCBsaW5lCitzZWN0aW9uIHNvcnRpbmcgb3B0aW9uLgorCisgICA8cD5JZiB5b3UgZXZlciBnZXQgY29uZnVzZWQgYWJvdXQgd2hlcmUgaW5wdXQgc2VjdGlvbnMgYXJlIGdvaW5nLCB1c2UgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1NPC9zcGFuPjwvc2FtcD4mcnNxdW87IGxpbmtlciBvcHRpb24gdG8gZ2VuZXJhdGUgYSBtYXAgZmlsZS4gIFRoZSBtYXAgZmlsZSBzaG93cworcHJlY2lzZWx5IGhvdyBpbnB1dCBzZWN0aW9ucyBhcmUgbWFwcGVkIHRvIG91dHB1dCBzZWN0aW9ucy4KKworICAgPHA+VGhpcyBleGFtcGxlIHNob3dzIGhvdyB3aWxkY2FyZCBwYXR0ZXJucyBtaWdodCBiZSB1c2VkIHRvIHBhcnRpdGlvbgorZmlsZXMuICBUaGlzIGxpbmtlciBzY3JpcHQgZGlyZWN0cyB0aGUgbGlua2VyIHRvIHBsYWNlIGFsbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87CitzZWN0aW9ucyBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBhbGwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYnNzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb25zIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmJzczwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitUaGUgbGlua2VyIHdpbGwgcGxhY2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiBmcm9tIGFsbCBmaWxlcyBiZWdpbm5pbmcKK3dpdGggYW4gdXBwZXIgY2FzZSBjaGFyYWN0ZXIgaW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uREFUQTwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgZm9yIGFsbCBvdGhlciBmaWxlcywgdGhlCitsaW5rZXIgd2lsbCBwbGFjZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMgeworICAgICAgIC50ZXh0IDogeyAqKC50ZXh0KSB9CisgICAgICAgLkRBVEEgOiB7IFtBLVpdKiguZGF0YSkgfQorICAgICAgIC5kYXRhIDogeyAqKC5kYXRhKSB9CisgICAgICAgLmJzcyA6IHsgKiguYnNzKSB9CisgICAgIH0KKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW5wdXQtU2VjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MWNjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9JbnB1dC1TZWN0aW9uLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW5wdXQgU2VjdGlvbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyIgdGl0bGU9IlNFQ1RJT05TIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQWRkcmVzcy5odG1sI091dHB1dC1TZWN0aW9uLUFkZHJlc3MiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBBZGRyZXNzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI091dHB1dC1TZWN0aW9uLURhdGEiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBEYXRhIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJJbnB1dC1TZWN0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURhdGEuaHRtbCNPdXRwdXQtU2VjdGlvbi1EYXRhIj5PdXRwdXQgU2VjdGlvbiBEYXRhPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQWRkcmVzcy5odG1sI091dHB1dC1TZWN0aW9uLUFkZHJlc3MiPk91dHB1dCBTZWN0aW9uIEFkZHJlc3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTRUNUSU9OUy5odG1sI1NFQ1RJT05TIj5TRUNUSU9OUzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuNi40IElucHV0IFNlY3Rpb24gRGVzY3JpcHRpb248L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1pbnB1dC1zZWN0aW9ucy00MDQiPjwvYT48YSBuYW1lPSJpbmRleC1tYXBwaW5nLWlucHV0LXNlY3Rpb25zLXRvLW91dHB1dC1zZWN0aW9ucy00MDUiPjwvYT5UaGUgbW9zdCBjb21tb24gb3V0cHV0IHNlY3Rpb24gY29tbWFuZCBpcyBhbiBpbnB1dCBzZWN0aW9uIGRlc2NyaXB0aW9uLgorCisgICA8cD5UaGUgaW5wdXQgc2VjdGlvbiBkZXNjcmlwdGlvbiBpcyB0aGUgbW9zdCBiYXNpYyBsaW5rZXIgc2NyaXB0IG9wZXJhdGlvbi4gCitZb3UgdXNlIG91dHB1dCBzZWN0aW9ucyB0byB0ZWxsIHRoZSBsaW5rZXIgaG93IHRvIGxheSBvdXQgeW91ciBwcm9ncmFtCitpbiBtZW1vcnkuICBZb3UgdXNlIGlucHV0IHNlY3Rpb24gZGVzY3JpcHRpb25zIHRvIHRlbGwgdGhlIGxpbmtlciBob3cgdG8KK21hcCB0aGUgaW5wdXQgZmlsZXMgaW50byB5b3VyIG1lbW9yeSBsYXlvdXQuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJJbnB1dC1TZWN0aW9uLUJhc2ljcy5odG1sI0lucHV0LVNlY3Rpb24tQmFzaWNzIj5JbnB1dCBTZWN0aW9uIEJhc2ljczwvYT46IAlJbnB1dCBzZWN0aW9uIGJhc2ljcworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbCNJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcyI+SW5wdXQgU2VjdGlvbiBXaWxkY2FyZHM8L2E+OiAJSW5wdXQgc2VjdGlvbiB3aWxkY2FyZCBwYXR0ZXJucworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNJbnB1dC1TZWN0aW9uLUNvbW1vbiI+SW5wdXQgU2VjdGlvbiBDb21tb248L2E+OiAJSW5wdXQgc2VjdGlvbiBmb3IgY29tbW9uIHN5bWJvbHMKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IklucHV0LVNlY3Rpb24tS2VlcC5odG1sI0lucHV0LVNlY3Rpb24tS2VlcCI+SW5wdXQgU2VjdGlvbiBLZWVwPC9hPjogCQlJbnB1dCBzZWN0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IklucHV0LVNlY3Rpb24tRXhhbXBsZS5odG1sI0lucHV0LVNlY3Rpb24tRXhhbXBsZSI+SW5wdXQgU2VjdGlvbiBFeGFtcGxlPC9hPjogCUlucHV0IHNlY3Rpb24gZXhhbXBsZQorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW52b2NhdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvSW52b2NhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzZhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9JbnZvY2F0aW9uLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+SW52b2NhdGlvbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3IiB0aXRsZT0iT3ZlcnZpZXciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyIgdGl0bGU9IlNjcmlwdHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ikludm9jYXRpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiPlNjcmlwdHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4yIEludm9jYXRpb248L2gyPgorCis8IS0tIG1hbiBiZWdpbiBERVNDUklQVElPTiAtLT4KKzxwPlRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gbGlua2VyIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGlzIG1lYW50IHRvIGNvdmVyIGEgYnJvYWQgcmFuZ2Ugb2Ygc2l0dWF0aW9ucywKK2FuZCB0byBiZSBhcyBjb21wYXRpYmxlIGFzIHBvc3NpYmxlIHdpdGggb3RoZXIgbGlua2Vycy4gIEFzIGEgcmVzdWx0LAoreW91IGhhdmUgbWFueSBjaG9pY2VzIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW9yLgorCis8IS0tIG1hbiBlbmQgLS0+Cis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+OiAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kIExpbmUgT3B0aW9ucworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iRW52aXJvbm1lbnQuaHRtbCNFbnZpcm9ubWVudCI+RW52aXJvbm1lbnQ8L2E+OiAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50IFZhcmlhYmxlcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvTEQtSW5kZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0xELUluZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiZGJjZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0xELUluZGV4Lmh0bWwKQEAgLTAsMCArMSw3NzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkxEIEluZGV4IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkdOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZS5odG1sI0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgdGl0bGU9IkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTEQtSW5kZXgiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UuaHRtbCNHTlUtRnJlZS1Eb2N1bWVudGF0aW9uLUxpY2Vuc2UiPkdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJ1bm51bWJlcmVkIj5MRCBJbmRleDwvaDI+CisKKzx1bCBjbGFzcz0iaW5kZXgtY3AiIGNvbXBhY3Q+Cis8bGk+PGEgaHJlZj0iU3ltYm9scy5odG1sI2luZGV4LWdfdF8wMDIyLTUxMyI+PGNvZGU+IjwvY29kZT48L2E+OiA8YSBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyI+U3ltYm9sczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDI4LTEzMSI+PGNvZGU+LSg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGFjY2VwdF8wMDJkdW5rbm93bl8wMDJkaW5wdXRfMDAyZGFyY2gtMTMzIj48Y29kZT4tLWFjY2VwdC11bmtub3duLWlucHV0LWFyY2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGFkZF8wMDJkbmVlZGVkLTEzNyI+PGNvZGU+LS1hZGQtbmVlZGVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRhZGRfMDAyZHN0ZGNhbGxfMDAyZGFsaWFzLTI3NSI+PGNvZGU+LS1hZGQtc3RkY2FsbC1hbGlhczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkYWxsb3dfMDAyZG11bHRpcGxlXzAwMmRkZWZpbml0aW9uLTE5MCI+PGNvZGU+LS1hbGxvdy1tdWx0aXBsZS1kZWZpbml0aW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRhbGxvd18wMDJkc2hsaWJfMDAyZHVuZGVmaW5lZC0xOTIiPjxjb2RlPi0tYWxsb3ctc2hsaWItdW5kZWZpbmVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRhcmNoaXRlY3R1cmVfMDAzZF8wMDQwdmFyXzAwN2JhcmNoXzAwN2QtMTEiPjxjb2RlPi0tYXJjaGl0ZWN0dXJlPTwvY29kZT48dmFyPmFyY2g8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkYXNfMDAyZG5lZWRlZC0xMzUiPjxjb2RlPi0tYXMtbmVlZGVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRhdWRpdC1fMDA0MHZhcl8wMDdiQVVESVRMSUJfMDA3ZC04Ij48Y29kZT4tLWF1ZGl0IDwvY29kZT48dmFyPkFVRElUTElCPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGF1eGlsaWFyeV8wMDNkXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC00MSI+PGNvZGU+LS1hdXhpbGlhcnk9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRiYW5rXzAwMmR3aW5kb3ctMzMxIj48Y29kZT4tLWJhbmstd2luZG93PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRiYXNlXzAwMmRmaWxlLTI3NiI+PGNvZGU+LS1iYXNlLWZpbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkYmU4LTU5MiI+PGNvZGU+LS1iZTg8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGJzc18wMDJkcGx0LTYyOCI+PGNvZGU+LS1ic3MtcGx0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEMtRUxGMzIuaHRtbCNQb3dlclBDLUVMRjMyIj5Qb3dlclBDIEVMRjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRidWlsZF8wMDJkaWQtMjczIj48Y29kZT4tLWJ1aWxkLWlkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRidWlsZF8wMDJkaWRfMDAzZF8wMDQwdmFyXzAwN2JzdHlsZV8wMDdkLTI3NCI+PGNvZGU+LS1idWlsZC1pZD08L2NvZGU+PHZhcj5zdHlsZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRjaGVja18wMDJkc2VjdGlvbnMtMTU0Ij48Y29kZT4tLWNoZWNrLXNlY3Rpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRjb3B5XzAwMmRkdF8wMDJkbmVlZGVkXzAwMmRlbnRyaWVzLTE1NiI+PGNvZGU+LS1jb3B5LWR0LW5lZWRlZC1lbnRyaWVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRjcmVmLTE1OSI+PGNvZGU+LS1jcmVmPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkZWZhdWx0XzAwMmRpbXBvcnRlZF8wMDJkc3ltdmVyLTE5NiI+PGNvZGU+LS1kZWZhdWx0LWltcG9ydGVkLXN5bXZlcjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZGVmYXVsdF8wMDJkc2NyaXB0XzAwM2RfMDA0MHZhcl8wMDdic2NyaXB0XzAwN2QtMTA4Ij48Y29kZT4tLWRlZmF1bHQtc2NyaXB0PTwvY29kZT48dmFyPnNjcmlwdDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkZWZhdWx0XzAwMmRzeW12ZXItMTk1Ij48Y29kZT4tLWRlZmF1bHQtc3ltdmVyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkZWZzeW1fMDAzZF8wMDQwdmFyXzAwN2JzeW1ib2xfMDA3ZF8wMDNkXzAwNDB2YXJfMDA3YmV4cF8wMDdkLTE2MyI+PGNvZGU+LS1kZWZzeW09PC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmV4cDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkZW1hbmdsZV8wMDViXzAwM2RfMDA0MHZhcl8wMDdic3R5bGVfMDA3ZF8wMDVkLTE2NSI+PGNvZGU+LS1kZW1hbmdsZVs9PC9jb2RlPjx2YXI+c3R5bGU8L3Zhcj48Y29kZT5dPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkZXBhdWRpdC1fMDA0MHZhcl8wMDdiQVVESVRMSUJfMDA3ZC0yNCI+PGNvZGU+LS1kZXBhdWRpdCA8L2NvZGU+PHZhcj5BVURJVExJQjwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkaXNhYmxlXzAwMmRhdXRvXzAwMmRpbWFnZV8wMDJkYmFzZS0zMDciPjxjb2RlPi0tZGlzYWJsZS1hdXRvLWltYWdlLWJhc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGRpc2FibGVfMDAyZGF1dG9fMDAyZGltcG9ydC0zMTEiPjxjb2RlPi0tZGlzYWJsZS1hdXRvLWltcG9ydDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZGlzYWJsZV8wMDJkbG9uZ18wMDJkc2VjdGlvbl8wMDJkbmFtZXMtMjc5Ij48Y29kZT4tLWRpc2FibGUtbG9uZy1zZWN0aW9uLW5hbWVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkaXNhYmxlXzAwMmRuZXdfMDAyZGR0YWdzLTI2OSI+PGNvZGU+LS1kaXNhYmxlLW5ldy1kdGFnczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZGlzYWJsZV8wMDJkcnVudGltZV8wMDJkcHNldWRvXzAwMmRyZWxvYy0zMTMiPjxjb2RlPi0tZGlzYWJsZS1ydW50aW1lLXBzZXVkby1yZWxvYzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZGlzYWJsZV8wMDJkc3RkY2FsbF8wMDJkZml4dXAtMjgxIj48Y29kZT4tLWRpc2FibGUtc3RkY2FsbC1maXh1cDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZGlzY2FyZF8wMDJkYWxsLTEyMSI+PGNvZGU+LS1kaXNjYXJkLWFsbDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZGlzY2FyZF8wMDJkbG9jYWxzLTEyNCI+PGNvZGU+LS1kaXNjYXJkLWxvY2FsczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZGxsLTI3NyI+PGNvZGU+LS1kbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGRsbF8wMDJkc2VhcmNoXzAwMmRwcmVmaXgtMzA5Ij48Y29kZT4tLWRsbC1zZWFyY2gtcHJlZml4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGRvdHN5bXMtNjQyIj48Y29kZT4tLWRvdHN5bXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0Ij5Qb3dlclBDNjQgRUxGNjQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGRzYnRfMDAyZGluZGV4LTMyOCI+PGNvZGU+LS1kc2J0LWluZGV4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkc2J0XzAwMmRzaXplLTMyNyI+PGNvZGU+LS1kc2J0LXNpemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGR5bmFtaWNfMDAyZGxpbmtlcl8wMDNkXzAwNDB2YXJfMDA3YmZpbGVfMDA3ZC0xNjkiPjxjb2RlPi0tZHluYW1pYy1saW5rZXI9PC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkeW5hbWljXzAwMmRsaXN0XzAwMmRjcHBfMDAyZG5ldy0xNTIiPjxjb2RlPi0tZHluYW1pYy1saXN0LWNwcC1uZXc8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGR5bmFtaWNfMDAyZGxpc3RfMDAyZGNwcF8wMDJkdHlwZWluZm8tMTUzIj48Y29kZT4tLWR5bmFtaWMtbGlzdC1jcHAtdHlwZWluZm88L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGR5bmFtaWNfMDAyZGxpc3RfMDAyZGRhdGEtMTUxIj48Y29kZT4tLWR5bmFtaWMtbGlzdC1kYXRhPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRkeW5hbWljXzAwMmRsaXN0XzAwM2RfMDA0MHZhcl8wMDdiZHluYW1pY18wMDJkbGlzdF8wMDJkZmlsZV8wMDdkLTE1MCI+PGNvZGU+LS1keW5hbWljLWxpc3Q9PC9jb2RlPjx2YXI+ZHluYW1pYy1saXN0LWZpbGU8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZHluYW1pY2Jhc2UtMzE5Ij48Y29kZT4tLWR5bmFtaWNiYXNlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRlaF8wMDJkZnJhbWVfMDAyZGhkci0yNjYiPjxjb2RlPi0tZWgtZnJhbWUtaGRyPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRlbWl0XzAwMmRyZWxvY3MtODQiPjxjb2RlPi0tZW1pdC1yZWxvY3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtRUxGLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGVtaXRfMDAyZHN0YWNrXzAwMmRzeW1zLTY3OSI+PGNvZGU+LS1lbWl0LXN0YWNrLXN5bXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtRUxGLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGVtaXRfMDAyZHN0dWJfMDAyZHN5bXMtNjcxIj48Y29kZT4tLWVtaXQtc3R1Yi1zeW1zPC9jb2RlPjwvYT46IDxhIGhyZWY9IlNQVS1FTEYuaHRtbCNTUFUtRUxGIj5TUFUgRUxGPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGVtaXRfMDAyZHN0dWJfMDAyZHN5bXMtNjQwIj48Y29kZT4tLWVtaXQtc3R1Yi1zeW1zPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRlbWl0XzAwMmRzdHViXzAwMmRzeW1zLTYzMyI+PGNvZGU+LS1lbWl0LXN0dWItc3ltczwvY29kZT48L2E+OiA8YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjUG93ZXJQQy1FTEYzMiI+UG93ZXJQQyBFTEYzMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRhdXRvXzAwMmRpbWFnZV8wMDJkYmFzZS0zMDYiPjxjb2RlPi0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRhdXRvXzAwMmRpbXBvcnQtMzEwIj48Y29kZT4tLWVuYWJsZS1hdXRvLWltcG9ydDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRleHRyYV8wMDJkcGVfMDAyZGRlYnVnLTMxNCI+PGNvZGU+LS1lbmFibGUtZXh0cmEtcGUtZGVidWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkbG9uZ18wMDJkc2VjdGlvbl8wMDJkbmFtZXMtMjc4Ij48Y29kZT4tLWVuYWJsZS1sb25nLXNlY3Rpb24tbmFtZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkbmV3XzAwMmRkdGFncy0yNjgiPjxjb2RlPi0tZW5hYmxlLW5ldy1kdGFnczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRydW50aW1lXzAwMmRwc2V1ZG9fMDAyZHJlbG9jLTMxMiI+PGNvZGU+LS1lbmFibGUtcnVudGltZS1wc2V1ZG8tcmVsb2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkc3RkY2FsbF8wMDJkZml4dXAtMjgwIj48Y29kZT4tLWVuYWJsZS1zdGRjYWxsLWZpeHVwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRlbnRyeV8wMDNkXzAwNDB2YXJfMDA3YmVudHJ5XzAwN2QtMjgiPjxjb2RlPi0tZW50cnk9PC9jb2RlPjx2YXI+ZW50cnk8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZXJyb3JfMDAyZHVucmVzb2x2ZWRfMDAyZHN5bWJvbHMtMjYyIj48Y29kZT4tLWVycm9yLXVucmVzb2x2ZWQtc3ltYm9sczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZXhjbHVkZV8wMDJkYWxsXzAwMmRzeW1ib2xzLTI4NyI+PGNvZGU+LS1leGNsdWRlLWFsbC1zeW1ib2xzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRleGNsdWRlXzAwMmRsaWJzLTI5Ij48Y29kZT4tLWV4Y2x1ZGUtbGliczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZXhjbHVkZV8wMDJkbW9kdWxlc18wMDJkZm9yXzAwMmRpbXBsaWItMzAiPjxjb2RlPi0tZXhjbHVkZS1tb2R1bGVzLWZvci1pbXBsaWI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGV4Y2x1ZGVfMDAyZHN5bWJvbHMtMjg2Ij48Y29kZT4tLWV4Y2x1ZGUtc3ltYm9sczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZXhwb3J0XzAwMmRhbGxfMDAyZHN5bWJvbHMtMjg1Ij48Y29kZT4tLWV4cG9ydC1hbGwtc3ltYm9sczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZXhwb3J0XzAwMmRkeW5hbWljLTMzIj48Y29kZT4tLWV4cG9ydC1keW5hbWljPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLUVMRi5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRleHRyYV8wMDJkb3ZlcmxheV8wMDJkc3R1YnMtNjczIj48Y29kZT4tLWV4dHJhLW92ZXJsYXktc3R1YnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGZhdGFsXzAwMmR3YXJuaW5ncy0xNzAiPjxjb2RlPi0tZmF0YWwtd2FybmluZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGZpbGVfMDAyZGFsaWdubWVudC0yODgiPjxjb2RlPi0tZmlsZS1hbGlnbm1lbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGZpbHRlcl8wMDNkXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC00MyI+PGNvZGU+LS1maWx0ZXI9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGZpeF8wMDJkYXJtMTE3Ni02MDciPjxjb2RlPi0tZml4LWFybTExNzY8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJpOTYwLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGZpeF8wMDJkY29ydGV4XzAwMmRhOC01NzYiPjxjb2RlPi0tZml4LWNvcnRleC1hODwvY29kZT48L2E+OiA8YSBocmVmPSJpOTYwLmh0bWwjaTk2MCI+aTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRmaXhfMDAyZHY0YngtNTk5Ij48Y29kZT4tLWZpeC12NGJ4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGZpeF8wMDJkdjRieF8wMDJkaW50ZXJ3b3JraW5nLTYwMSI+PGNvZGU+LS1maXgtdjRieC1pbnRlcndvcmtpbmc8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGZvcmNlXzAwMmRkeW5hbWljLTg2Ij48Y29kZT4tLWZvcmNlLWR5bmFtaWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGZvcmNlXzAwMmRleGVfMDAyZHN1ZmZpeC0xNzIiPjxjb2RlPi0tZm9yY2UtZXhlLXN1ZmZpeDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZm9yY2VpbnRlZy0zMjAiPjxjb2RlPi0tZm9yY2VpbnRlZzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkZm9ybWF0XzAwM2RfMDA0MHZhcl8wMDdiZm9ybWF0XzAwN2QtMTQiPjxjb2RlPi0tZm9ybWF0PTwvY29kZT48dmFyPmZvcm1hdDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVEktQ09GRi5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRmb3JtYXRfMDAzZF8wMDQwdmFyXzAwN2J2ZXJzaW9uXzAwN2QtNjgxIj48Y29kZT4tLWZvcm1hdD08L2NvZGU+PHZhcj52ZXJzaW9uPC92YXI+PC9hPjogPGEgaHJlZj0iVEktQ09GRi5odG1sI1RJLUNPRkYiPlRJIENPRkY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGdjXzAwMmRzZWN0aW9ucy0xNzMiPjxjb2RlPi0tZ2Mtc2VjdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGdvdC0zMzIiPjxjb2RlPi0tZ290PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4Sy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRnb3RfMDAzZF8wMDQwdmFyXzAwN2J0eXBlXzAwN2QtNjIyIj48Y29kZT4tLWdvdD08L2NvZGU+PHZhcj50eXBlPC92YXI+PC9hPjogPGEgaHJlZj0iTTY4Sy5odG1sI002OEsiPk02OEs8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGdwc2l6ZV8wMDNkXzAwNDB2YXJfMDA3YnZhbHVlXzAwN2QtNDgiPjxjb2RlPi0tZ3BzaXplPTwvY29kZT48dmFyPnZhbHVlPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGhhc2hfMDAyZHNpemVfMDAzZF8wMDQwdmFyXzAwN2JudW1iZXJfMDA3ZC0yNzAiPjxjb2RlPi0taGFzaC1zaXplPTwvY29kZT48dmFyPm51bWJlcjwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRoYXNoXzAwMmRzdHlsZV8wMDNkXzAwNDB2YXJfMDA3YnN0eWxlXzAwN2QtMjcxIj48Y29kZT4tLWhhc2gtc3R5bGU9PC9jb2RlPjx2YXI+c3R5bGU8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkaGVhcC0yOTAiPjxjb2RlPi0taGVhcDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkaGVscC0xODMiPjxjb2RlPi0taGVscDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkaW1hZ2VfMDAyZGJhc2UtMjkyIj48Y29kZT4tLWltYWdlLWJhc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGp1c3RfMDAyZHN5bWJvbHNfMDAzZF8wMDQwdmFyXzAwN2JmaWxlXzAwN2QtOTMiPjxjb2RlPi0tanVzdC1zeW1ib2xzPTwvY29kZT48dmFyPmZpbGU8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJka2lsbF8wMDJkYXQtMjkzIj48Y29kZT4tLWtpbGwtYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGxhcmdlXzAwMmRhZGRyZXNzXzAwMmRhd2FyZS0yOTQiPjxjb2RlPi0tbGFyZ2UtYWRkcmVzcy1hd2FyZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbGRfMDAyZGdlbmVyYXRlZF8wMDJkdW53aW5kXzAwMmRpbmZvLTI2NyI+PGNvZGU+LS1sZC1nZW5lcmF0ZWQtdW53aW5kLWluZm88L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZGxlYWRpbmdfMDAyZHVuZGVyc2NvcmUtMjgyIj48Y29kZT4tLWxlYWRpbmctdW5kZXJzY29yZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbGlicmFyeV8wMDJkcGF0aF8wMDNkXzAwNDB2YXJfMDA3YmRpcl8wMDdkLTYyIj48Y29kZT4tLWxpYnJhcnktcGF0aD08L2NvZGU+PHZhcj5kaXI8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbGlicmFyeV8wMDNkXzAwNDB2YXJfMDA3Ym5hbWVzcGVjXzAwN2QtNTkiPjxjb2RlPi0tbGlicmFyeT08L2NvZGU+PHZhcj5uYW1lc3BlYzwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLUVMRi5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRsb2NhbF8wMDJkc3RvcmVfMDAzZGxvXzAwM2FoaS02NzUiPjxjb2RlPi0tbG9jYWwtc3RvcmU9bG86aGk8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG1ham9yXzAwMmRpbWFnZV8wMDJkdmVyc2lvbi0yOTUiPjxjb2RlPi0tbWFqb3ItaW1hZ2UtdmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbWFqb3JfMDAyZG9zXzAwMmR2ZXJzaW9uLTI5NiI+PGNvZGU+LS1tYWpvci1vcy12ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRtYWpvcl8wMDJkc3Vic3lzdGVtXzAwMmR2ZXJzaW9uLTI5NyI+PGNvZGU+LS1tYWpvci1zdWJzeXN0ZW0tdmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imk5NjAuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbWVyZ2VfMDAyZGV4aWR4XzAwMmRlbnRyaWVzLTU3OCI+PGNvZGU+LS1tZXJnZS1leGlkeC1lbnRyaWVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Imk5NjAuaHRtbCNpOTYwIj5pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRtaW5vcl8wMDJkaW1hZ2VfMDAyZHZlcnNpb24tMjk4Ij48Y29kZT4tLW1pbm9yLWltYWdlLXZlcnNpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG1pbm9yXzAwMmRvc18wMDJkdmVyc2lvbi0yOTkiPjxjb2RlPi0tbWlub3Itb3MtdmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbWlub3JfMDAyZHN1YnN5c3RlbV8wMDJkdmVyc2lvbi0zMDAiPjxjb2RlPi0tbWlub3Itc3Vic3lzdGVtLXZlcnNpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG1yaV8wMDJkc2NyaXB0XzAwM2RfMDA0MHZhcl8wMDdiTVJJXzAwMmRjbWRmaWxlXzAwN2QtMTgiPjxjb2RlPi0tbXJpLXNjcmlwdD08L2NvZGU+PHZhcj5NUkktY21kZmlsZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1FTEYzMi5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRtdWx0aV8wMDJkc3Vic3BhY2UtNjE4Ij48Y29kZT4tLW11bHRpLXN1YnNwYWNlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkhQUEEtRUxGMzIuaHRtbCNIUFBBLUVMRjMyIj5IUFBBIEVMRjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRubWFnaWMtNzEiPjxjb2RlPi0tbm1hZ2ljPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkYWNjZXB0XzAwMmR1bmtub3duXzAwMmRpbnB1dF8wMDJkYXJjaC0xMzQiPjxjb2RlPi0tbm8tYWNjZXB0LXVua25vd24taW5wdXQtYXJjaDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGFkZF8wMDJkbmVlZGVkLTEzOCI+PGNvZGU+LS1uby1hZGQtbmVlZGVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkYWxsb3dfMDAyZHNobGliXzAwMmR1bmRlZmluZWQtMTkzIj48Y29kZT4tLW5vLWFsbG93LXNobGliLXVuZGVmaW5lZDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGFzXzAwMmRuZWVkZWQtMTM2Ij48Y29kZT4tLW5vLWFzLW5lZWRlZDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGJpbmQtMzI0Ij48Y29kZT4tLW5vLWJpbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRjaGVja18wMDJkc2VjdGlvbnMtMTU1Ij48Y29kZT4tLW5vLWNoZWNrLXNlY3Rpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkY29weV8wMDJkZHRfMDAyZG5lZWRlZF8wMDJkZW50cmllcy0xNTciPjxjb2RlPi0tbm8tY29weS1kdC1uZWVkZWQtZW50cmllczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGRlZmluZV8wMDJkY29tbW9uLTE2MSI+PGNvZGU+LS1uby1kZWZpbmUtY29tbW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkZGVtYW5nbGUtMTY2Ij48Y29kZT4tLW5vLWRlbWFuZ2xlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRkb3RzeW1zLTY0MyI+PGNvZGU+LS1uby1kb3RzeW1zPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRlbnVtXzAwMmRzaXplXzAwMmR3YXJuaW5nLTYxMCI+PGNvZGU+LS1uby1lbnVtLXNpemUtd2FybmluZzwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGV4cG9ydF8wMDJkZHluYW1pYy0zNCI+PGNvZGU+LS1uby1leHBvcnQtZHluYW1pYzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGZhdGFsXzAwMmR3YXJuaW5ncy0xNzEiPjxjb2RlPi0tbm8tZmF0YWwtd2FybmluZ3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGZpeF8wMDJkYXJtMTE3Ni02MDgiPjxjb2RlPi0tbm8tZml4LWFybTExNzY8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJpOTYwLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRmaXhfMDAyZGNvcnRleF8wMDJkYTgtNTc3Ij48Y29kZT4tLW5vLWZpeC1jb3J0ZXgtYTg8L2NvZGU+PC9hPjogPGEgaHJlZj0iaTk2MC5odG1sI2k5NjAiPmk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRnY18wMDJkc2VjdGlvbnMtMTc0Ij48Y29kZT4tLW5vLWdjLXNlY3Rpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkaXNvbGF0aW9uLTMyMiI+PGNvZGU+LS1uby1pc29sYXRpb248L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRrZWVwXzAwMmRtZW1vcnktMTg3Ij48Y29kZT4tLW5vLWtlZXAtbWVtb3J5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkbGVhZGluZ18wMDJkdW5kZXJzY29yZS0yODMiPjxjb2RlPi0tbm8tbGVhZGluZy11bmRlcnNjb3JlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTk2MC5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkbWVyZ2VfMDAyZGV4aWR4XzAwMmRlbnRyaWVzLTU3OSI+PGNvZGU+LS1uby1tZXJnZS1leGlkeC1lbnRyaWVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Imk5NjAuaHRtbCNpOTYwIj5pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkbWVyZ2VfMDAyZGV4aWR4XzAwMmRlbnRyaWVzLTMyOSI+PGNvZGU+LS1uby1tZXJnZS1leGlkeC1lbnRyaWVzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRtdWx0aV8wMDJkdG9jLTY1MyI+PGNvZGU+LS1uby1tdWx0aS10b2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0Ij5Qb3dlclBDNjQgRUxGNjQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRvbWFnaWMtNzYiPjxjb2RlPi0tbm8tb21hZ2ljPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRvcGRfMDAyZG9wdGltaXplLTY0NyI+PGNvZGU+LS1uby1vcGQtb3B0aW1pemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0Ij5Qb3dlclBDNjQgRUxGNjQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtRUxGLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRvdmVybGF5cy02NjkiPjxjb2RlPi0tbm8tb3ZlcmxheXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHBsdF8wMDJkYWxpZ24tNjU4Ij48Y29kZT4tLW5vLXBsdC1hbGlnbjwvY29kZT48L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkcGx0XzAwMmRzdGF0aWNfMDAyZGNoYWluLTY2MSI+PGNvZGU+LS1uby1wbHQtc3RhdGljLWNoYWluPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRwbHRfMDAyZHRocmVhZF8wMDJkc2FmZS02NjQiPjxjb2RlPi0tbm8tcGx0LXRocmVhZC1zYWZlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkcHJpbnRfMDAyZGdjXzAwMmRzZWN0aW9ucy0xNzciPjxjb2RlPi0tbm8tcHJpbnQtZ2Mtc2VjdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRzZWgtMzIzIj48Y29kZT4tLW5vLXNlaDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkdGxzXzAwMmRvcHRpbWl6ZS02NDUiPjxjb2RlPi0tbm8tdGxzLW9wdGltaXplPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkdGxzXzAwMmRvcHRpbWl6ZS02MzUiPjxjb2RlPi0tbm8tdGxzLW9wdGltaXplPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEMtRUxGMzIuaHRtbCNQb3dlclBDLUVMRjMyIj5Qb3dlclBDIEVMRjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR0b2NfMDAyZG9wdGltaXplLTY1MSI+PGNvZGU+LS1uby10b2Mtb3B0aW1pemU8L2NvZGU+PC9hPjogPGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0Ij5Qb3dlclBDNjQgRUxGNjQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHRvY18wMDJkc29ydC02NTUiPjxjb2RlPi0tbm8tdG9jLXNvcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0Ij5Qb3dlclBDNjQgRUxGNjQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR0cmFtcG9saW5lLTMzMCI+PGNvZGU+LS1uby10cmFtcG9saW5lPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkdW5kZWZpbmVkLTE4OCI+PGNvZGU+LS1uby11bmRlZmluZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR1bmRlZmluZWRfMDAyZHZlcnNpb24tMTk0Ij48Y29kZT4tLW5vLXVuZGVmaW5lZC12ZXJzaW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkd2Fybl8wMDJkbWlzbWF0Y2gtMTk3Ij48Y29kZT4tLW5vLXdhcm4tbWlzbWF0Y2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR3YXJuXzAwMmRzZWFyY2hfMDAyZG1pc21hdGNoLTE5OCI+PGNvZGU+LS1uby13YXJuLXNlYXJjaC1taXNtYXRjaDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkd2NoYXJfMDAyZHNpemVfMDAyZHdhcm5pbmctNjEyIj48Y29kZT4tLW5vLXdjaGFyLXNpemUtd2FybmluZzwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHdob2xlXzAwMmRhcmNoaXZlLTE5OSI+PGNvZGU+LS1uby13aG9sZS1hcmNoaXZlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRub2luaGliaXRfMDAyZGV4ZWMtMjAxIj48Y29kZT4tLW5vaW5oaWJpdC1leGVjPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vbl8wMDJkb3ZlcmxhcHBpbmdfMDAyZG9wZC02NDkiPjxjb2RlPi0tbm9uLW92ZXJsYXBwaW5nLW9wZDwvY29kZT48L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkbnhjb21wYXQtMzIxIj48Y29kZT4tLW54Y29tcGF0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRvZm9ybWF0XzAwM2RfMDA0MHZhcl8wMDdib3V0cHV0XzAwMmRmb3JtYXRfMDA3ZC0yMDMiPjxjb2RlPi0tb2Zvcm1hdD08L2NvZGU+PHZhcj5vdXRwdXQtZm9ybWF0PC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG9tYWdpYy03MyI+PGNvZGU+LS1vbWFnaWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG91dF8wMDJkaW1wbGliLTMwNSI+PGNvZGU+LS1vdXQtaW1wbGliPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRvdXRwdXRfMDAyZGRlZi0zMDMiPjxjb2RlPi0tb3V0cHV0LWRlZjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkb3V0cHV0XzAwM2RfMDA0MHZhcl8wMDdib3V0cHV0XzAwN2QtNzkiPjxjb2RlPi0tb3V0cHV0PTwvY29kZT48dmFyPm91dHB1dDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRwaWNfMDAyZGV4ZWN1dGFibGUtMjA1Ij48Y29kZT4tLXBpYy1leGVjdXRhYmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHBpY18wMDJkdmVuZWVyLTYxNCI+PGNvZGU+LS1waWMtdmVuZWVyPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHBsdF8wMDJkYWxpZ24tNjU3Ij48Y29kZT4tLXBsdC1hbGlnbjwvY29kZT48L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRwbHRfMDAyZHN0YXRpY18wMDJkY2hhaW4tNjYwIj48Y29kZT4tLXBsdC1zdGF0aWMtY2hhaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0Ij5Qb3dlclBDNjQgRUxGNjQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkcGx0XzAwMmR0aHJlYWRfMDAyZHNhZmUtNjYzIj48Y29kZT4tLXBsdC10aHJlYWQtc2FmZTwvY29kZT48L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1FTEYuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkcGx1Z2luLTY2NyI+PGNvZGU+LS1wbHVnaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHByaW50XzAwMmRnY18wMDJkc2VjdGlvbnMtMTc2Ij48Y29kZT4tLXByaW50LWdjLXNlY3Rpb25zPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRwcmludF8wMDJkbWFwLTY3Ij48Y29kZT4tLXByaW50LW1hcDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkcHJpbnRfMDAyZG91dHB1dF8wMDJkZm9ybWF0LTE3OSI+PGNvZGU+LS1wcmludC1vdXRwdXQtZm9ybWF0PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRyZWR1Y2VfMDAyZG1lbW9yeV8wMDJkb3ZlcmhlYWRzLTI3MiI+PGNvZGU+LS1yZWR1Y2UtbWVtb3J5LW92ZXJoZWFkczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkcmVsYXgtMjA5Ij48Y29kZT4tLXJlbGF4PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTk2MC5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkcmVsYXhfMDA3ZC1vbi1pOTYwLTU3MyI+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1yZWxheDwvc3Bhbj48L3NhbXA+IG9uIGk5NjA8L2E+OiA8YSBocmVmPSJpOTYwLmh0bWwjaTk2MCI+aTk2MDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEMtRUxGMzIuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkcmVsYXgtb24tUG93ZXJQQy02MjUiPjxjb2RlPi0tcmVsYXggb24gUG93ZXJQQzwvY29kZT48L2E+OiA8YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjUG93ZXJQQy1FTEYzMiI+UG93ZXJQQyBFTEYzMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS5odG1sI2luZGV4LWdfdF8wMDQwb3B0aW9uXzAwN2JfMDAyZF8wMDJkcmVsYXhfMDA3ZC1vbi1YdGVuc2EtNjk0Ij48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXJlbGF4PC9zcGFuPjwvc2FtcD4gb24gWHRlbnNhPC9hPjogPGEgaHJlZj0iWHRlbnNhLmh0bWwjWHRlbnNhIj5YdGVuc2E8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHJlbG9jYXRhYmxlLTkxIj48Y29kZT4tLXJlbG9jYXRhYmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRyZXRhaW5fMDAyZHN5bWJvbHNfMDAyZGZpbGVfMDAzZF8wMDQwdmFyXzAwN2JmaWxlbmFtZV8wMDdkLTIxNiI+PGNvZGU+LS1yZXRhaW4tc3ltYm9scy1maWxlPTwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHNjcmlwdF8wMDNkXzAwNDB2YXJfMDA3YnNjcmlwdF8wMDdkLTEwNSI+PGNvZGU+LS1zY3JpcHQ9PC9jb2RlPjx2YXI+c2NyaXB0PC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHNkYXRhXzAwMmRnb3QtNjMxIj48Y29kZT4tLXNkYXRhLWdvdDwvY29kZT48L2E+OiA8YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjUG93ZXJQQy1FTEYzMiI+UG93ZXJQQyBFTEYzMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkc2VjdGlvbl8wMDJkYWxpZ25tZW50LTMxNSI+PGNvZGU+LS1zZWN0aW9uLWFsaWdubWVudDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkc2VjdGlvbl8wMDJkc3RhcnRfMDAzZF8wMDQwdmFyXzAwN2JzZWN0aW9ubmFtZV8wMDdkXzAwM2RfMDA0MHZhcl8wMDdib3JnXzAwN2QtMjM0Ij48Y29kZT4tLXNlY3Rpb24tc3RhcnQ9PC9jb2RlPjx2YXI+c2VjdGlvbm5hbWU8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+b3JnPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHNlY3VyZV8wMDJkcGx0LTYyOSI+PGNvZGU+LS1zZWN1cmUtcGx0PC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEMtRUxGMzIuaHRtbCNQb3dlclBDLUVMRjMyIj5Qb3dlclBDIEVMRjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRzb3J0XzAwMmRjb21tb24tMjI0Ij48Y29kZT4tLXNvcnQtY29tbW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRzb3J0XzAwMmRzZWN0aW9uXzAwM2RhbGlnbm1lbnQtMjI2Ij48Y29kZT4tLXNvcnQtc2VjdGlvbj1hbGlnbm1lbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHNvcnRfMDAyZHNlY3Rpb25fMDAzZG5hbWUtMjI1Ij48Y29kZT4tLXNvcnQtc2VjdGlvbj1uYW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRzcGxpdF8wMDJkYnlfMDAyZGZpbGUtMjI3Ij48Y29kZT4tLXNwbGl0LWJ5LWZpbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHNwbGl0XzAwMmRieV8wMDJkcmVsb2MtMjI4Ij48Y29kZT4tLXNwbGl0LWJ5LXJlbG9jPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRzdGFjay0zMTciPjxjb2RlPi0tc3RhY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtRUxGLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHN0YWNrXzAwMmRhbmFseXNpcy02NzciPjxjb2RlPi0tc3RhY2stYW5hbHlzaXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHN0YXRzLTIyOSI+PGNvZGU+LS1zdGF0czwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkc3RyaXBfMDAyZGFsbC05NiI+PGNvZGU+LS1zdHJpcC1hbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHN0cmlwXzAwMmRkZWJ1Zy05OSI+PGNvZGU+LS1zdHJpcC1kZWJ1ZzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRzdHViXzAwMmRncm91cF8wMDJkc2l6ZS02MzgiPjxjb2RlPi0tc3R1Yi1ncm91cC1zaXplPC9jb2RlPjwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1FTEYzMi5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRzdHViXzAwMmRncm91cF8wMDJkc2l6ZV8wMDNkXzAwNDB2YXJfMDA3Yk5fMDA3ZC02MjAiPjxjb2RlPi0tc3R1Yi1ncm91cC1zaXplPTwvY29kZT48dmFyPk48L3Zhcj48L2E+OiA8YSBocmVmPSJIUFBBLUVMRjMyLmh0bWwjSFBQQS1FTEYzMiI+SFBQQSBFTEYzMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRzdHViXzAwMmRncm91cF8wMDJkc2l6ZV8wMDNkXzAwNDB2YXJfMDA3Yk5fMDA3ZC02MTYiPjxjb2RlPi0tc3R1Yi1ncm91cC1zaXplPTwvY29kZT48dmFyPk48L3Zhcj48L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkc3Vic3lzdGVtLTMxOCI+PGNvZGU+LS1zdWJzeXN0ZW08L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkc3VwcG9ydF8wMDJkb2xkXzAwMmRjb2RlLTU4NSI+PGNvZGU+LS1zdXBwb3J0LW9sZC1jb2RlPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmRzeXNyb290XzAwM2RfMDA0MHZhcl8wMDdiZGlyZWN0b3J5XzAwN2QtMjMwIj48Y29kZT4tLXN5c3Jvb3Q9PC9jb2RlPjx2YXI+ZGlyZWN0b3J5PC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHRhcmdldF8wMDJkaGVscC0xODQiPjxjb2RlPi0tdGFyZ2V0LWhlbHA8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdGFyZ2V0MV8wMDJkYWJzLTU5NSI+PGNvZGU+LS10YXJnZXQxLWFiczwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR0YXJnZXQxXzAwMmRyZWwtNTk0Ij48Y29kZT4tLXRhcmdldDEtcmVsPC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHRhcmdldDJfMDAzZF8wMDQwdmFyXzAwN2J0eXBlXzAwN2QtNTk3Ij48Y29kZT4tLXRhcmdldDI9PC9jb2RlPjx2YXI+dHlwZTwvdmFyPjwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHRodW1iXzAwMmRlbnRyeV8wMDNkXzAwNDB2YXJfMDA3YmVudHJ5XzAwN2QtNTg4Ij48Y29kZT4tLXRodW1iLWVudHJ5PTwvY29kZT48dmFyPmVudHJ5PC92YXI+PC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHRyYWNlLTEwMiI+PGNvZGU+LS10cmFjZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdHJhY2VfMDAyZHN5bWJvbF8wMDNkXzAwNDB2YXJfMDA3YnN5bWJvbF8wMDdkLTEyNyI+PGNvZGU+LS10cmFjZS1zeW1ib2w9PC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHRyYWRpdGlvbmFsXzAwMmRmb3JtYXQtMjMxIj48Y29kZT4tLXRyYWRpdGlvbmFsLWZvcm1hdDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdHNhd2FyZS0zMjYiPjxjb2RlPi0tdHNhd2FyZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdW5kZWZpbmVkXzAwM2RfMDA0MHZhcl8wMDdic3ltYm9sXzAwN2QtMTExIj48Y29kZT4tLXVuZGVmaW5lZD08L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdW5pcXVlXzAwNWJfMDAzZF8wMDQwdmFyXzAwN2JTRUNUSU9OXzAwN2RfMDA1ZC0xMTUiPjxjb2RlPi0tdW5pcXVlWz08L2NvZGU+PHZhcj5TRUNUSU9OPC92YXI+PGNvZGU+XTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdW5yZXNvbHZlZF8wMDJkc3ltYm9scy0yNDMiPjxjb2RlPi0tdW5yZXNvbHZlZC1zeW1ib2xzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHVzZV8wMDJkYmx4LTYwMyI+PGNvZGU+LS11c2UtYmx4PC9jb2RlPjwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHVzZV8wMDJkbnVsXzAwMmRwcmVmaXhlZF8wMDJkaW1wb3J0XzAwMmR0YWJsZXMtNTkwIj48Y29kZT4tLXVzZS1udWwtcHJlZml4ZWQtaW1wb3J0LXRhYmxlczwvY29kZT48L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdmVyYm9zZV8wMDViXzAwM2RfMDA0MHZhcl8wMDdiTlVNQkVSXzAwN2RfMDA1ZC0yNDQiPjxjb2RlPi0tdmVyYm9zZVs9PC9jb2RlPjx2YXI+TlVNQkVSPC92YXI+PGNvZGU+XTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdmVyc2lvbi0xMTgiPjxjb2RlPi0tdmVyc2lvbjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkdmVyc2lvbl8wMDJkc2NyaXB0XzAwM2RfMDA0MHZhcl8wMDdidmVyc2lvbl8wMDJkc2NyaXB0ZmlsZV8wMDdkLTI0NiI+PGNvZGU+LS12ZXJzaW9uLXNjcmlwdD08L2NvZGU+PHZhcj52ZXJzaW9uLXNjcmlwdGZpbGU8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR2ZnAxMV8wMDJkZGVub3JtXzAwMmRmaXgtNjA1Ij48Y29kZT4tLXZmcDExLWRlbm9ybS1maXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHdhcm5fMDAyZGFsdGVybmF0ZV8wMDJkZW0tMjYwIj48Y29kZT4tLXdhcm4tYWx0ZXJuYXRlLWVtPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR3YXJuXzAwMmRjb21tb24tMjQ4Ij48Y29kZT4tLXdhcm4tY29tbW9uPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR3YXJuXzAwMmRjb25zdHJ1Y3RvcnMtMjUxIj48Y29kZT4tLXdhcm4tY29uc3RydWN0b3JzPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR3YXJuXzAwMmRtdWx0aXBsZV8wMDJkZ3AtMjUyIj48Y29kZT4tLXdhcm4tbXVsdGlwbGUtZ3A8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHdhcm5fMDAyZG9uY2UtMjUzIj48Y29kZT4tLXdhcm4tb25jZTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkd2Fybl8wMDJkc2VjdGlvbl8wMDJkYWxpZ24tMjU2Ij48Y29kZT4tLXdhcm4tc2VjdGlvbi1hbGlnbjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkd2Fybl8wMDJkc2hhcmVkXzAwMmR0ZXh0cmVsLTI1OSI+PGNvZGU+LS13YXJuLXNoYXJlZC10ZXh0cmVsPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR3YXJuXzAwMmR1bnJlc29sdmVkXzAwMmRzeW1ib2xzLTI2MSI+PGNvZGU+LS13YXJuLXVucmVzb2x2ZWQtc3ltYm9sczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZF8wMDJkd2RtZHJpdmVyLTMyNSI+PGNvZGU+LS13ZG1kcml2ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZHdob2xlXzAwMmRhcmNoaXZlLTI2MyI+PGNvZGU+LS13aG9sZS1hcmNoaXZlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkXzAwMmR3cmFwXzAwM2RfMDA0MHZhcl8wMDdic3ltYm9sXzAwN2QtMjY1Ij48Y29kZT4tLXdyYXA9PC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRBLV8wMDQwdmFyXzAwN2JhcmNoXzAwN2QtMTAiPjxjb2RlPi1BIDwvY29kZT48dmFyPmFyY2g8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZGEtXzAwNDB2YXJfMDA3YmtleXdvcmRfMDA3ZC03Ij48Y29kZT4tYSA8L2NvZGU+PHZhcj5rZXl3b3JkPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRhc3NlcnQtXzAwNDB2YXJfMDA3YmtleXdvcmRfMDA3ZC0xMzkiPjxjb2RlPi1hc3NlcnQgPC9jb2RlPjx2YXI+a2V5d29yZDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkYi1fMDA0MHZhcl8wMDdiZm9ybWF0XzAwN2QtMTMiPjxjb2RlPi1iIDwvY29kZT48dmFyPmZvcm1hdDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkQmR5bmFtaWMtMTQwIj48Y29kZT4tQmR5bmFtaWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRCZ3JvdXAtMTQzIj48Y29kZT4tQmdyb3VwPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkQnNoYXJlYWJsZS0yMjIiPjxjb2RlPi1Cc2hhcmVhYmxlPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkQnN0YXRpYy0xNDQiPjxjb2RlPi1Cc3RhdGljPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkQnN5bWJvbGljLTE0OCI+PGNvZGU+LUJzeW1ib2xpYzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZEJzeW1ib2xpY18wMDJkZnVuY3Rpb25zLTE0OSI+PGNvZGU+LUJzeW1ib2xpYy1mdW5jdGlvbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRjLV8wMDQwdmFyXzAwN2JNUklfMDAyZGNtZGZpbGVfMDA3ZC0xNyI+PGNvZGU+LWMgPC9jb2RlPjx2YXI+TVJJLWNtZGZpbGU8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZGNhbGxfMDA1ZnNoYXJlZC0xNDIiPjxjb2RlPi1jYWxsX3NoYXJlZDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZGQtMjEiPjxjb2RlPi1kPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkZGMtMjIiPjxjb2RlPi1kYzwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZGRuLTE0NSI+PGNvZGU+LWRuPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkZHAtMjMiPjxjb2RlPi1kcDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZGRULV8wMDQwdmFyXzAwN2JzY3JpcHRfMDA3ZC0xMDciPjxjb2RlPi1kVCA8L2NvZGU+PHZhcj5zY3JpcHQ8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZGR5LTE0MSI+PGNvZGU+LWR5PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkRS0zMiI+PGNvZGU+LUU8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRlLV8wMDQwdmFyXzAwN2JlbnRyeV8wMDdkLTI3Ij48Y29kZT4tZSA8L2NvZGU+PHZhcj5lbnRyeTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkRUItMzciPjxjb2RlPi1FQjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZEVMLTM5Ij48Y29kZT4tRUw8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRGLV8wMDQwdmFyXzAwN2JuYW1lXzAwN2QtNDIiPjxjb2RlPi1GIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZGYtXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC00MCI+PGNvZGU+LWYgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkZmluaV8wMDNkXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC00NSI+PGNvZGU+LWZpbmk9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkZy00NiI+PGNvZGU+LWc8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRHLV8wMDQwdmFyXzAwN2J2YWx1ZV8wMDdkLTQ3Ij48Y29kZT4tRyA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkaC1fMDA0MHZhcl8wMDdibmFtZV8wMDdkLTUxIj48Y29kZT4taCA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRpLTUzIj48Y29kZT4taTwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZElfMDA0MHZhcl8wMDdiZmlsZV8wMDdkLTE2OCI+PGNvZGU+LUk8L2NvZGU+PHZhcj5maWxlPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRpbml0XzAwM2RfMDA0MHZhcl8wMDdibmFtZV8wMDdkLTU2Ij48Y29kZT4taW5pdD08L2NvZGU+PHZhcj5uYW1lPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRMLV8wMDQwdmFyXzAwN2JkaXJfMDA3ZC02MSI+PGNvZGU+LUwgPC9jb2RlPjx2YXI+ZGlyPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRsLV8wMDQwdmFyXzAwN2JuYW1lc3BlY18wMDdkLTU4Ij48Y29kZT4tbCA8L2NvZGU+PHZhcj5uYW1lc3BlYzwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkTS02NiI+PGNvZGU+LU08L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRtLV8wMDQwdmFyXzAwN2JlbXVsYXRpb25fMDA3ZC02NCI+PGNvZGU+LW0gPC9jb2RlPjx2YXI+ZW11bGF0aW9uPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRNYXBfMDAzZF8wMDQwdmFyXzAwN2JtYXBmaWxlXzAwN2QtMTg1Ij48Y29kZT4tTWFwPTwvY29kZT48dmFyPm1hcGZpbGU8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZE4tNzIiPjxjb2RlPi1OPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbi02OCI+PGNvZGU+LW48L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRyZWxheC0yMTIiPiZuZGFzaDtuby1yZWxheDwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkbm9uXzAwNWZzaGFyZWQtMTQ2Ij48Y29kZT4tbm9uX3NoYXJlZDwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG5vc3RkbGliLTIwMiI+PGNvZGU+LW5vc3RkbGliPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkTy1fMDA0MHZhcl8wMDdibGV2ZWxfMDA3ZC04MSI+PGNvZGU+LU8gPC9jb2RlPjx2YXI+bGV2ZWw8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZG8tXzAwNDB2YXJfMDA3Ym91dHB1dF8wMDdkLTc4Ij48Y29kZT4tbyA8L2NvZGU+PHZhcj5vdXRwdXQ8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZFAtXzAwNDB2YXJfMDA3YkFVRElUTElCXzAwN2QtMjUiPjxjb2RlPi1QIDwvY29kZT48dmFyPkFVRElUTElCPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRwaWUtMjA0Ij48Y29kZT4tcGllPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkcS04MyI+PGNvZGU+LXE8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRxbWFnaWMtMjA3Ij48Y29kZT4tcW1hZ2ljPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkUXktMjA4Ij48Y29kZT4tUXk8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRyLTkwIj48Y29kZT4tcjwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZFItXzAwNDB2YXJfMDA3YmZpbGVfMDA3ZC05MiI+PGNvZGU+LVIgPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkcnBhdGhfMDAyZGxpbmtfMDAzZF8wMDQwdmFyXzAwN2JkaXJfMDA3ZC0yMjAiPjxjb2RlPi1ycGF0aC1saW5rPTwvY29kZT48dmFyPmRpcjwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkcnBhdGhfMDAzZF8wMDQwdmFyXzAwN2JkaXJfMDA3ZC0yMTgiPjxjb2RlPi1ycGF0aD08L2NvZGU+PHZhcj5kaXI8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZFMtOTgiPjxjb2RlPi1TPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkcy05NSI+PGNvZGU+LXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRzaGFyZWQtMjIxIj48Y29kZT4tc2hhcmVkPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkc29uYW1lXzAwM2RfMDA0MHZhcl8wMDdibmFtZV8wMDdkLTUyIj48Y29kZT4tc29uYW1lPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZHN0YXRpYy0xNDciPjxjb2RlPi1zdGF0aWM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmR0LTEwMSI+PGNvZGU+LXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRULV8wMDQwdmFyXzAwN2JzY3JpcHRfMDA3ZC0xMDQiPjxjb2RlPi1UIDwvY29kZT48dmFyPnNjcmlwdDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkVGJzc18wMDNkXzAwNDB2YXJfMDA3Ym9yZ18wMDdkLTIzNSI+PGNvZGU+LVRic3M9PC9jb2RlPjx2YXI+b3JnPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRUZGF0YV8wMDNkXzAwNDB2YXJfMDA3Ym9yZ18wMDdkLTIzNiI+PGNvZGU+LVRkYXRhPTwvY29kZT48dmFyPm9yZzwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkVHJvZGF0YV8wMDJkc2VnbWVudF8wMDNkXzAwNDB2YXJfMDA3Ym9yZ18wMDdkLTI0MSI+PGNvZGU+LVRyb2RhdGEtc2VnbWVudD08L2NvZGU+PHZhcj5vcmc8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZFR0ZXh0XzAwMmRzZWdtZW50XzAwM2RfMDA0MHZhcl8wMDdib3JnXzAwN2QtMjM5Ij48Y29kZT4tVHRleHQtc2VnbWVudD08L2NvZGU+PHZhcj5vcmc8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZFR0ZXh0XzAwM2RfMDA0MHZhcl8wMDdib3JnXzAwN2QtMjM3Ij48Y29kZT4tVHRleHQ9PC9jb2RlPjx2YXI+b3JnPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmR1LV8wMDQwdmFyXzAwN2JzeW1ib2xfMDA3ZC0xMTAiPjxjb2RlPi11IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkVXItMTEzIj48Y29kZT4tVXI8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRWLTExNyI+PGNvZGU+LVY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmR2LTExNiI+PGNvZGU+LXY8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRYLTEyMyI+PGNvZGU+LVg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmR4LTEyMCI+PGNvZGU+LXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmRZLV8wMDQwdmFyXzAwN2JwYXRoXzAwN2QtMTI5Ij48Y29kZT4tWSA8L2NvZGU+PHZhcj5wYXRoPC92YXI+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ190XzAwMmR5LV8wMDQwdmFyXzAwN2JzeW1ib2xfMDA3ZC0xMjYiPjxjb2RlPi15IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdfdF8wMDJkei1kZWZzLTE4OSI+PGNvZGU+LXogZGVmczwvY29kZT48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZHotXzAwNDB2YXJfMDA3YmtleXdvcmRfMDA3ZC0xMzAiPjxjb2RlPi16IDwvY29kZT48dmFyPmtleXdvcmQ8L3Zhcj48L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1nX3RfMDAyZHotbXVsZGVmcy0xOTEiPjxjb2RlPi16IG11bGRlZnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjaW5kZXgtZ190XzAwMmUtNTE1Ij48Y29kZT4uPC9jb2RlPjwvYT46IDxhIGhyZWY9IkxvY2F0aW9uLUNvdW50ZXIuaHRtbCNMb2NhdGlvbi1Db3VudGVyIj5Mb2NhdGlvbiBDb3VudGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZy5odG1sI2luZGV4LWdfdF8wMDJmRElTQ0FSRF8wMDJmLTQ0MyI+L0RJU0NBUkQvPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZy5odG1sI091dHB1dC1TZWN0aW9uLURpc2NhcmRpbmciPk91dHB1dCBTZWN0aW9uIERpc2NhcmRpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1QaGRyLmh0bWwjaW5kZXgtZ190XzAwM2FfMDA0MHZhcl8wMDdicGhkcl8wMDdkLTQ2NiI+PGNvZGU+OjwvY29kZT48dmFyPnBoZHI8L3Zhcj48L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1QaGRyLmh0bWwjT3V0cHV0LVNlY3Rpb24tUGhkciI+T3V0cHV0IFNlY3Rpb24gUGhkcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUZpbGwuaHRtbCNpbmRleC1nX3RfMDAzZF8wMDQwdmFyXzAwN2JmaWxsZXhwXzAwN2QtNDY5Ij48Y29kZT49PC9jb2RlPjx2YXI+ZmlsbGV4cDwvdmFyPjwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUZpbGwuaHRtbCNPdXRwdXQtU2VjdGlvbi1GaWxsIj5PdXRwdXQgU2VjdGlvbiBGaWxsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUmVnaW9uLmh0bWwjaW5kZXgtZ190XzAwM2VfMDA0MHZhcl8wMDdicmVnaW9uXzAwN2QtNDYzIj48Y29kZT4mZ3Q7PC9jb2RlPjx2YXI+cmVnaW9uPC92YXI+PC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUmVnaW9uLmh0bWwjT3V0cHV0LVNlY3Rpb24tUmVnaW9uIj5PdXRwdXQgU2VjdGlvbiBSZWdpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnB1dC1TZWN0aW9uLUNvbW1vbi5odG1sI2luZGV4LWdfdF8wMDViQ09NTU9OXzAwNWQtNDIwIj5bQ09NTU9OXTwvYT46IDxhIGhyZWY9IklucHV0LVNlY3Rpb24tQ29tbW9uLmh0bWwjSW5wdXQtU2VjdGlvbi1Db21tb24iPklucHV0IFNlY3Rpb24gQ29tbW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBQlNPTFVURV8wMDdkLV8wMDI4TVJJXzAwMjktNzE3Ij48Y29kZT5BQlNPTFVURTwvY29kZT4gKE1SSSk8L2E+OiA8YSBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI2luZGV4LWFic29sdXRlLWFuZC1yZWxvY2F0YWJsZS1zeW1ib2xzLTUzMCI+YWJzb2x1dGUgYW5kIHJlbG9jYXRhYmxlIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJFeHByZXNzaW9uLVNlY3Rpb24uaHRtbCNFeHByZXNzaW9uLVNlY3Rpb24iPkV4cHJlc3Npb24gU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI2luZGV4LWFic29sdXRlLWV4cHJlc3Npb25zLTUyOCI+YWJzb2x1dGUgZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJFeHByZXNzaW9uLVNlY3Rpb24uaHRtbCNFeHByZXNzaW9uLVNlY3Rpb24iPkV4cHJlc3Npb24gU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtQUJTT0xVVEVfMDAyOF8wMDQwdmFyXzAwN2JleHBfMDA3ZF8wMDI5LTUzNCI+PGNvZGU+QUJTT0xVVEUoPC9jb2RlPjx2YXI+ZXhwPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtQUREUl8wMDI4XzAwNDB2YXJfMDA3YnNlY3Rpb25fMDA3ZF8wMDI5LTUzNiI+PGNvZGU+QUREUig8L2NvZGU+PHZhcj5zZWN0aW9uPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUFkZHJlc3MuaHRtbCNpbmRleC1hZGRyZXNzXzAwMmMtc2VjdGlvbi00MDIiPmFkZHJlc3MsIHNlY3Rpb248L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1BZGRyZXNzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQWRkcmVzcyI+T3V0cHV0IFNlY3Rpb24gQWRkcmVzczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1SSS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiQUxJQVNfMDA3ZC1fMDAyOE1SSV8wMDI5LTcxOCI+PGNvZGU+QUxJQVM8L2NvZGU+IChNUkkpPC9hPjogPGEgaHJlZj0iTVJJLmh0bWwjTVJJIj5NUkk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNUkkuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkFMSUdOXzAwN2QtXzAwMjhNUklfMDAyOS03MTkiPjxjb2RlPkFMSUdOPC9jb2RlPiAoTVJJKTwvYT46IDxhIGhyZWY9Ik1SSS5odG1sI01SSSI+TVJJPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1hbGlnbi1leHByZXNzaW9uLTU0MyI+YWxpZ24gZXhwcmVzc2lvbjwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1hbGlnbi1sb2NhdGlvbi1jb3VudGVyLTU0MSI+YWxpZ24gbG9jYXRpb24gY291bnRlcjwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1BTElHTl8wMDI4XzAwNDB2YXJfMDA3YmFsaWduXzAwN2RfMDAyOS01MzgiPjxjb2RlPkFMSUdOKDwvY29kZT48dmFyPmFsaWduPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtQUxJR05fMDAyOF8wMDQwdmFyXzAwN2JleHBfMDA3ZF8wMDJjXzAwNDB2YXJfMDA3YmFsaWduXzAwN2RfMDAyOS01MzkiPjxjb2RlPkFMSUdOKDwvY29kZT48dmFyPmV4cDwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5hbGlnbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3JjZWQtT3V0cHV0LUFsaWdubWVudC5odG1sI2luZGV4LUFMSUdOXzAwMjhfMDA0MHZhcl8wMDdic2VjdGlvbl8wMDVmYWxpZ25fMDA3ZF8wMDI5LTQ1NCI+PGNvZGU+QUxJR04oPC9jb2RlPjx2YXI+c2VjdGlvbl9hbGlnbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQuaHRtbCNGb3JjZWQtT3V0cHV0LUFsaWdubWVudCI+Rm9yY2VkIE91dHB1dCBBbGlnbm1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXSU4zMi5odG1sI2luZGV4LWFsaWduZWQtY29tbW9uLXN5bWJvbHMtNjkyIj5hbGlnbmVkIGNvbW1vbiBzeW1ib2xzPC9hPjogPGEgaHJlZj0iV0lOMzIuaHRtbCNXSU4zMiI+V0lOMzI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LUFMSUdOT0ZfMDAyOF8wMDQwdmFyXzAwN2JzZWN0aW9uXzAwN2RfMDAyOS01NDQiPjxjb2RlPkFMSUdOT0YoPC9jb2RlPjx2YXI+c2VjdGlvbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNRU1PUlkuaHRtbCNpbmRleC1hbGxvY2F0aW5nLW1lbW9yeS00NzciPmFsbG9jYXRpbmcgbWVtb3J5PC9hPjogPGEgaHJlZj0iTUVNT1JZLmh0bWwjTUVNT1JZIj5NRU1PUlk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjaW5kZXgtYXJjaGl0ZWN0dXJlLTM5MSI+YXJjaGl0ZWN0dXJlPC9hPjogPGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI01pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPk1pc2NlbGxhbmVvdXMgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtYXJjaGl0ZWN0dXJlcy05Ij5hcmNoaXRlY3R1cmVzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtYXJjaGl2ZS1maWxlc18wMDJjLWZyb20tY21kLWxpbmUtNTciPmFyY2hpdmUgZmlsZXMsIGZyb20gY21kIGxpbmU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNpbmRleC1hcmNoaXZlLXNlYXJjaC1wYXRoLWluLWxpbmtlci1zY3JpcHQtMzY2Ij5hcmNoaXZlIHNlYXJjaCBwYXRoIGluIGxpbmtlciBzY3JpcHQ8L2E+OiA8YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjRmlsZS1Db21tYW5kcyI+RmlsZSBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjaW5kZXgtYXJpdGhtZXRpYy00OTgiPmFyaXRobWV0aWM8L2E+OiA8YSBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIj5FeHByZXNzaW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wZXJhdG9ycy5odG1sI2luZGV4LWFyaXRobWV0aWMtb3BlcmF0b3JzLTUyMyI+YXJpdGhtZXRpYyBvcGVyYXRvcnM8L2E+OiA8YSBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiPk9wZXJhdG9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LUFSTS1pbnRlcndvcmtpbmctc3VwcG9ydC01ODQiPkFSTSBpbnRlcndvcmtpbmcgc3VwcG9ydDwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtQVJNMTE3Ni1lcnJhdHVtLXdvcmthcm91bmQtNjA2Ij5BUk0xMTc2IGVycmF0dW0gd29ya2Fyb3VuZDwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI2luZGV4LUFTXzAwNWZORUVERURfMDAyOF8wMDQwdmFyXzAwN2JmaWxlc18wMDdkXzAwMjktMzYxIj48Y29kZT5BU19ORUVERUQoPC9jb2RlPjx2YXI+ZmlsZXM8L3Zhcj48Y29kZT4pPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNGaWxlLUNvbW1hbmRzIj5GaWxlIENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI2luZGV4LUFTU0VSVC0zNzciPjxjb2RlPkFTU0VSVDwvY29kZT48L2E+OiA8YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjTWlzY2VsbGFuZW91cy1Db21tYW5kcyI+TWlzY2VsbGFuZW91cyBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNpbmRleC1hc3NlcnRpb24taW4tbGlua2VyLXNjcmlwdC0zNzgiPmFzc2VydGlvbiBpbiBsaW5rZXIgc2NyaXB0PC9hPjogPGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI01pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPk1pc2NlbGxhbmVvdXMgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBc3NpZ25tZW50cy5odG1sI2luZGV4LWFzc2lnbm1lbnQtaW4tc2NyaXB0cy0zOTMiPmFzc2lnbm1lbnQgaW4gc2NyaXB0czwvYT46IDxhIGhyZWY9IkFzc2lnbm1lbnRzLmh0bWwjQXNzaWdubWVudHMiPkFzc2lnbm1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tTE1BLmh0bWwjaW5kZXgtQVRfMDAyOF8wMDQwdmFyXzAwN2JsbWFfMDA3ZF8wMDI5LTQ0OSI+PGNvZGU+QVQoPC9jb2RlPjx2YXI+bG1hPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1MTUEuaHRtbCNPdXRwdXQtU2VjdGlvbi1MTUEiPk91dHB1dCBTZWN0aW9uIExNQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI2luZGV4LUFUXzAwM2VfMDA0MHZhcl8wMDdibG1hXzAwNWZyZWdpb25fMDA3ZC00NDgiPjxjb2RlPkFUJmd0OzwvY29kZT48dmFyPmxtYV9yZWdpb248L3Zhcj48L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1MTUEuaHRtbCNPdXRwdXQtU2VjdGlvbi1MTUEiPk91dHB1dCBTZWN0aW9uIExNQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldJTjMyLmh0bWwjaW5kZXgtYXV0b21hdGljLWRhdGEtaW1wb3J0cy02ODgiPmF1dG9tYXRpYyBkYXRhIGltcG9ydHM8L2E+OiA8YSBocmVmPSJXSU4zMi5odG1sI1dJTjMyIj5XSU4zMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJGRC5odG1sI2luZGV4LWJhY2stZW5kLTY5NyI+YmFjayBlbmQ8L2E+OiA8YSBocmVmPSJCRkQuaHRtbCNCRkQiPkJGRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1SSS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiQkFTRV8wMDdkLV8wMDI4TVJJXzAwMjktNzIwIj48Y29kZT5CQVNFPC9jb2RlPiAoTVJJKTwvYT46IDxhIGhyZWY9Ik1SSS5odG1sI01SSSI+TVJJPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtQkU4LTU5MSI+QkU4PC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJDYW5vbmljYWwtZm9ybWF0Lmh0bWwjaW5kZXgtQkZELWNhbm9uaWNhbC1mb3JtYXQtNzA0Ij5CRkQgY2Fub25pY2FsIGZvcm1hdDwvYT46IDxhIGhyZWY9IkNhbm9uaWNhbC1mb3JtYXQuaHRtbCNDYW5vbmljYWwtZm9ybWF0Ij5DYW5vbmljYWwgZm9ybWF0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkZELmh0bWwjaW5kZXgtQkZELXJlcXVpcmVtZW50cy03MDEiPkJGRCByZXF1aXJlbWVudHM8L2E+OiA8YSBocmVmPSJCRkQuaHRtbCNCRkQiPkJGRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1iaWdfMDAyZGVuZGlhbi1vYmplY3RzLTM1Ij5iaWctZW5kaWFuIG9iamVjdHM8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1iaW5hcnktaW5wdXQtZm9ybWF0LTEyIj5iaW5hcnkgaW5wdXQgZm9ybWF0PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LUJMT0NLXzAwMjhfMDA0MHZhcl8wMDdiZXhwXzAwN2RfMDAyOS01NDYiPjxjb2RlPkJMT0NLKDwvY29kZT48dmFyPmV4cDwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNpbmRleC1idWctY3JpdGVyaWEtNzA4Ij5idWcgY3JpdGVyaWE8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNpbmRleC1idWctcmVwb3J0cy03MTQiPmJ1ZyByZXBvcnRzPC9hPjogPGEgaHJlZj0iQnVnLVJlcG9ydGluZy5odG1sI0J1Zy1SZXBvcnRpbmciPkJ1ZyBSZXBvcnRpbmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI2luZGV4LWJ1Z3MtaW4tXzAwNDBjb21tYW5kXzAwN2JsZF8wMDdkLTcwNiI+YnVncyBpbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPjwvYT46IDxhIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiPlJlcG9ydGluZyBCdWdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI2luZGV4LUJZVEVfMDAyOF8wMDQwdmFyXzAwN2JleHByZXNzaW9uXzAwN2RfMDAyOS00MjYiPjxjb2RlPkJZVEUoPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI091dHB1dC1TZWN0aW9uLURhdGEiPk91dHB1dCBTZWN0aW9uIERhdGE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI2luZGV4LUNfMDAyYl8wMDJiLWNvbnN0cnVjdG9yc18wMDJjLWFycmFuZ2luZy1pbi1saW5rLTQzOCI+QysrIGNvbnN0cnVjdG9ycywgYXJyYW5naW5nIGluIGxpbms8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI091dHB1dC1TZWN0aW9uLUtleXdvcmRzIj5PdXRwdXQgU2VjdGlvbiBLZXl3b3JkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1SSS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiQ0hJUF8wMDdkLV8wMDI4TVJJXzAwMjktNzIxIj48Y29kZT5DSElQPC9jb2RlPiAoTVJJKTwvYT46IDxhIGhyZWY9Ik1SSS5odG1sI01SSSI+TVJJPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQuaHRtbCNpbmRleC1DT0xMRUNUXzAwNWZOT18wMDVmREVNQU5HTEUtMzM4Ij48Y29kZT5DT0xMRUNUX05PX0RFTUFOR0xFPC9jb2RlPjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50Lmh0bWwjRW52aXJvbm1lbnQiPkVudmlyb25tZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWNvbWJpbmluZy1zeW1ib2xzXzAwMmMtd2FybmluZ3Mtb24tMjUwIj5jb21iaW5pbmcgc3ltYm9scywgd2FybmluZ3Mgb248L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNjcmlwdHMuaHRtbCNpbmRleC1jb21tYW5kLWZpbGVzLTM0MiI+Y29tbWFuZCBmaWxlczwvYT46IDxhIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIj5TY3JpcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWNvbW1hbmQtbGluZS0zIj5jb21tYW5kIGxpbmU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1jb21tb24tYWxsb2NhdGlvbi0yMCI+Y29tbW9uIGFsbG9jYXRpb248L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNpbmRleC1jb21tb24tYWxsb2NhdGlvbi1pbi1saW5rZXItc2NyaXB0LTM4MiI+Y29tbW9uIGFsbG9jYXRpb24gaW4gbGlua2VyIHNjcmlwdDwvYT46IDxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNNaXNjZWxsYW5lb3VzLUNvbW1hbmRzIj5NaXNjZWxsYW5lb3VzIENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNpbmRleC1jb21tb24tc3ltYm9sLXBsYWNlbWVudC00MTYiPmNvbW1vbiBzeW1ib2wgcGxhY2VtZW50PC9hPjogPGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNJbnB1dC1TZWN0aW9uLUNvbW1vbiI+SW5wdXQgU2VjdGlvbiBDb21tb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2xpYy1Db25zdGFudHMuaHRtbCNpbmRleC1DT01NT05QQUdFU0laRS01MDkiPjxjb2RlPkNPTU1PTlBBR0VTSVpFPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN5bWJvbGljLUNvbnN0YW50cy5odG1sI1N5bWJvbGljLUNvbnN0YW50cyI+U3ltYm9saWMgQ29uc3RhbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWNvbXBhdGliaWxpdHlfMDAyYy1NUkktMTkiPmNvbXBhdGliaWxpdHksIE1SSTwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9saWMtQ29uc3RhbnRzLmh0bWwjaW5kZXgtQ09OU1RBTlQtNTA3Ij48Y29kZT5DT05TVEFOVDwvY29kZT48L2E+OiA8YSBocmVmPSJTeW1ib2xpYy1Db25zdGFudHMuaHRtbCNTeW1ib2xpYy1Db25zdGFudHMiPlN5bWJvbGljIENvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbnN0YW50cy5odG1sI2luZGV4LWNvbnN0YW50cy1pbi1saW5rZXItc2NyaXB0cy01MDAiPmNvbnN0YW50cyBpbiBsaW5rZXIgc2NyaXB0czwvYT46IDxhIGhyZWY9IkNvbnN0YW50cy5odG1sI0NvbnN0YW50cyI+Q29uc3RhbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludC5odG1sI2luZGV4LWNvbnN0cmFpbnRzLW9uLW91dHB1dC1zZWN0aW9ucy00NjIiPmNvbnN0cmFpbnRzIG9uIG91dHB1dCBzZWN0aW9uczwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQuaHRtbCNPdXRwdXQtU2VjdGlvbi1Db25zdHJhaW50Ij5PdXRwdXQgU2VjdGlvbiBDb25zdHJhaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMuaHRtbCNpbmRleC1DT05TVFJVQ1RPUlMtNDM3Ij48Y29kZT5DT05TVFJVQ1RPUlM8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMuaHRtbCNPdXRwdXQtU2VjdGlvbi1LZXl3b3JkcyI+T3V0cHV0IFNlY3Rpb24gS2V5d29yZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtY29uc3RydWN0b3JzLTExNCI+Y29uc3RydWN0b3JzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI2luZGV4LWNvbnN0cnVjdG9yc18wMDJjLWFycmFuZ2luZy1pbi1saW5rLTQzOSI+Y29uc3RydWN0b3JzLCBhcnJhbmdpbmcgaW4gbGluazwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUtleXdvcmRzLmh0bWwjT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMiPk91dHB1dCBTZWN0aW9uIEtleXdvcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTk2MC5odG1sI2luZGV4LUNvcnRleF8wMDJkQTgtZXJyYXR1bS13b3JrYXJvdW5kLTU3NSI+Q29ydGV4LUE4IGVycmF0dW0gd29ya2Fyb3VuZDwvYT46IDxhIGhyZWY9Imk5NjAuaHRtbCNpOTYwIj5pOTYwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjaW5kZXgtY3Jhc2gtb2YtbGlua2VyLTcxMSI+Y3Jhc2ggb2YgbGlua2VyPC9hPjogPGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj5CdWcgQ3JpdGVyaWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI2luZGV4LUNSRUFURV8wMDVmT0JKRUNUXzAwNWZTWU1CT0xTLTQzNCI+PGNvZGU+Q1JFQVRFX09CSkVDVF9TWU1CT0xTPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUtleXdvcmRzLmh0bWwjT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMiPk91dHB1dCBTZWN0aW9uIEtleXdvcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV0lOMzIuaHRtbCNpbmRleC1jcmVhdGluZy1hLURFRi1maWxlLTY4NiI+Y3JlYXRpbmcgYSBERUYgZmlsZTwvYT46IDxhIGhyZWY9IldJTjMyLmh0bWwjV0lOMzIiPldJTjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWNyb3NzLXJlZmVyZW5jZS10YWJsZS0xNTgiPmNyb3NzIHJlZmVyZW5jZSB0YWJsZTwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI2luZGV4LWNyb3NzLXJlZmVyZW5jZXMtMzg4Ij5jcm9zcyByZWZlcmVuY2VzPC9hPjogPGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI01pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPk1pc2NlbGxhbmVvdXMgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjaW5kZXgtY3VycmVudC1vdXRwdXQtbG9jYXRpb24tNTE4Ij5jdXJyZW50IG91dHB1dCBsb2NhdGlvbjwvYT46IDxhIGhyZWY9IkxvY2F0aW9uLUNvdW50ZXIuaHRtbCNMb2NhdGlvbi1Db3VudGVyIj5Mb2NhdGlvbiBDb3VudGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI2luZGV4LWRhdGEtNDIzIj5kYXRhPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI091dHB1dC1TZWN0aW9uLURhdGEiPk91dHB1dCBTZWN0aW9uIERhdGE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LURBVEFfMDA1ZlNFR01FTlRfMDA1ZkFMSUdOXzAwMjhfMDA0MHZhcl8wMDdibWF4cGFnZXNpemVfMDA3ZF8wMDJjLV8wMDQwdmFyXzAwN2Jjb21tb25wYWdlc2l6ZV8wMDdkXzAwMjktNTQ3Ij48Y29kZT5EQVRBX1NFR01FTlRfQUxJR04oPC9jb2RlPjx2YXI+bWF4cGFnZXNpemU8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmNvbW1vbnBhZ2VzaXplPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtREFUQV8wMDVmU0VHTUVOVF8wMDVmRU5EXzAwMjhfMDA0MHZhcl8wMDdiZXhwXzAwN2RfMDAyOS01NDgiPjxjb2RlPkRBVEFfU0VHTUVOVF9FTkQoPC9jb2RlPjx2YXI+ZXhwPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtREFUQV8wMDVmU0VHTUVOVF8wMDVmUkVMUk9fMDA1ZkVORF8wMDI4XzAwNDB2YXJfMDA3Ym9mZnNldF8wMDdkXzAwMmMtXzAwNDB2YXJfMDA3YmV4cF8wMDdkXzAwMjktNTQ5Ij48Y29kZT5EQVRBX1NFR01FTlRfUkVMUk9fRU5EKDwvY29kZT48dmFyPm9mZnNldDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZXhwPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1kYngtMjMzIj5kYng8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1ERUYtZmlsZXNfMDAyYy1jcmVhdGluZy0zMDEiPkRFRiBmaWxlcywgY3JlYXRpbmc8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50Lmh0bWwjaW5kZXgtZGVmYXVsdC1lbXVsYXRpb24tMzM2Ij5kZWZhdWx0IGVtdWxhdGlvbjwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50Lmh0bWwjRW52aXJvbm1lbnQiPkVudmlyb25tZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRW52aXJvbm1lbnQuaHRtbCNpbmRleC1kZWZhdWx0LWlucHV0LWZvcm1hdC0zMzQiPmRlZmF1bHQgaW5wdXQgZm9ybWF0PC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQuaHRtbCNFbnZpcm9ubWVudCI+RW52aXJvbm1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LURFRklORURfMDAyOF8wMDQwdmFyXzAwN2JzeW1ib2xfMDA3ZF8wMDI5LTU1MCI+PGNvZGU+REVGSU5FRCg8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4pPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWRlbGV0aW5nLWxvY2FsLXN5bWJvbHMtMTIyIj5kZWxldGluZyBsb2NhbCBzeW1ib2xzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC5odG1sI2luZGV4LWRlbWFuZ2xpbmdfMDAyYy1kZWZhdWx0LTMzOSI+ZGVtYW5nbGluZywgZGVmYXVsdDwvYT46IDxhIGhyZWY9IkVudmlyb25tZW50Lmh0bWwjRW52aXJvbm1lbnQiPkVudmlyb25tZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWRlbWFuZ2xpbmdfMDAyYy1mcm9tLWNvbW1hbmQtbGluZS0xNjQiPmRlbWFuZ2xpbmcsIGZyb20gY29tbWFuZCBsaW5lPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXSU4zMi5odG1sI2luZGV4LWRpcmVjdC1saW5raW5nLXRvLWEtZGxsLTY5MCI+ZGlyZWN0IGxpbmtpbmcgdG8gYSBkbGw8L2E+OiA8YSBocmVmPSJXSU4zMi5odG1sI1dJTjMyIj5XSU4zMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURpc2NhcmRpbmcuaHRtbCNpbmRleC1kaXNjYXJkaW5nLXNlY3Rpb25zLTQ0MCI+ZGlzY2FyZGluZyBzZWN0aW9uczwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURpc2NhcmRpbmcuaHRtbCNPdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nIj5PdXRwdXQgU2VjdGlvbiBEaXNjYXJkaW5nPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUVNT1JZLmh0bWwjaW5kZXgtZGlzY29udGludW91cy1tZW1vcnktNDc4Ij5kaXNjb250aW51b3VzIG1lbW9yeTwvYT46IDxhIGhyZWY9Ik1FTU9SWS5odG1sI01FTU9SWSI+TUVNT1JZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LURMTHNfMDAyYy1jcmVhdGluZy0yODQiPkRMTHMsIGNyZWF0aW5nPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtRExMc18wMDJjLWxpbmtpbmctdG8tMzA4Ij5ETExzLCBsaW5raW5nIHRvPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjaW5kZXgtZG90LTUxNiI+ZG90PC9hPjogPGEgaHJlZj0iTG9jYXRpb24tQ291bnRlci5odG1sI0xvY2F0aW9uLUNvdW50ZXIiPkxvY2F0aW9uIENvdW50ZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjaW5kZXgtZG90LWluc2lkZS1zZWN0aW9ucy01MjAiPmRvdCBpbnNpZGUgc2VjdGlvbnM8L2E+OiA8YSBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjTG9jYXRpb24tQ291bnRlciI+TG9jYXRpb24gQ291bnRlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxvY2F0aW9uLUNvdW50ZXIuaHRtbCNpbmRleC1kb3Qtb3V0c2lkZS1zZWN0aW9ucy01MjEiPmRvdCBvdXRzaWRlIHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iTG9jYXRpb24tQ291bnRlci5odG1sI0xvY2F0aW9uLUNvdW50ZXIiPkxvY2F0aW9uIENvdW50ZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZHluYW1pYy1saW5rZXJfMDAyYy1mcm9tLWNvbW1hbmQtbGluZS0xNjciPmR5bmFtaWMgbGlua2VyLCBmcm9tIGNvbW1hbmQgbGluZTwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWR5bmFtaWMtc3ltYm9sLXRhYmxlLTMxIj5keW5hbWljIHN5bWJvbCB0YWJsZTwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUEhEUlMuaHRtbCNpbmRleC1FTEYtcHJvZ3JhbS1oZWFkZXJzLTQ4OCI+RUxGIHByb2dyYW0gaGVhZGVyczwvYT46IDxhIGhyZWY9IlBIRFJTLmh0bWwjUEhEUlMiPlBIRFJTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWVtdWxhdGlvbi02MyI+ZW11bGF0aW9uPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC5odG1sI2luZGV4LWVtdWxhdGlvbl8wMDJjLWRlZmF1bHQtMzM3Ij5lbXVsYXRpb24sIGRlZmF1bHQ8L2E+OiA8YSBocmVmPSJFbnZpcm9ubWVudC5odG1sI0Vudmlyb25tZW50Ij5FbnZpcm9ubWVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1SSS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdiRU5EXzAwN2QtXzAwMjhNUklfMDAyOS03MjIiPjxjb2RlPkVORDwvY29kZT4gKE1SSSk8L2E+OiA8YSBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1lbmRpYW5uZXNzLTM2Ij5lbmRpYW5uZXNzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnRyeS1Qb2ludC5odG1sI2luZGV4LWVudHJ5LXBvaW50LTM1MSI+ZW50cnkgcG9pbnQ8L2E+OiA8YSBocmVmPSJFbnRyeS1Qb2ludC5odG1sI0VudHJ5LVBvaW50Ij5FbnRyeSBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1lbnRyeS1wb2ludF8wMDJjLWZyb20tY29tbWFuZC1saW5lLTI2Ij5lbnRyeSBwb2ludCwgZnJvbSBjb21tYW5kIGxpbmU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LWVudHJ5LXBvaW50XzAwMmMtdGh1bWItNTg3Ij5lbnRyeSBwb2ludCwgdGh1bWI8L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkVudHJ5LVBvaW50Lmh0bWwjaW5kZXgtRU5UUllfMDAyOF8wMDQwdmFyXzAwN2JzeW1ib2xfMDA3ZF8wMDI5LTM0OCI+PGNvZGU+RU5UUlkoPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJFbnRyeS1Qb2ludC5odG1sI0VudHJ5LVBvaW50Ij5FbnRyeSBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWVycm9yLW9uLXZhbGlkLWlucHV0LTcxMiI+ZXJyb3Igb24gdmFsaWQgaW5wdXQ8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1FeGFtcGxlLmh0bWwjaW5kZXgtZXhhbXBsZS1vZi1saW5rZXItc2NyaXB0LTM0NiI+ZXhhbXBsZSBvZiBsaW5rZXIgc2NyaXB0PC9hPjogPGEgaHJlZj0iU2ltcGxlLUV4YW1wbGUuaHRtbCNTaW1wbGUtRXhhbXBsZSI+U2ltcGxlIEV4YW1wbGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXSU4zMi5odG1sI2luZGV4LWV4cG9ydGluZy1ETEwtc3ltYm9scy02ODMiPmV4cG9ydGluZyBETEwgc3ltYm9sczwvYT46IDxhIGhyZWY9IldJTjMyLmh0bWwjV0lOMzIiPldJTjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXZhbHVhdGlvbi5odG1sI2luZGV4LWV4cHJlc3Npb24tZXZhbHVhdGlvbi1vcmRlci01MjYiPmV4cHJlc3Npb24gZXZhbHVhdGlvbiBvcmRlcjwvYT46IDxhIGhyZWY9IkV2YWx1YXRpb24uaHRtbCNFdmFsdWF0aW9uIj5FdmFsdWF0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXhwcmVzc2lvbi1TZWN0aW9uLmh0bWwjaW5kZXgtZXhwcmVzc2lvbi1zZWN0aW9ucy01MjciPmV4cHJlc3Npb24gc2VjdGlvbnM8L2E+OiA8YSBocmVmPSJFeHByZXNzaW9uLVNlY3Rpb24uaHRtbCNFeHByZXNzaW9uLVNlY3Rpb24iPkV4cHJlc3Npb24gU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtZXhwcmVzc2lvbl8wMDJjLWFic29sdXRlLTUzNSI+ZXhwcmVzc2lvbiwgYWJzb2x1dGU8L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjaW5kZXgtZXhwcmVzc2lvbnMtNDk3Ij5leHByZXNzaW9uczwvYT46IDxhIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI2luZGV4LUVYVEVSTi0zNzkiPjxjb2RlPkVYVEVSTjwvY29kZT48L2E+OiA8YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjTWlzY2VsbGFuZW91cy1Db21tYW5kcyI+TWlzY2VsbGFuZW91cyBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI2luZGV4LWZhdGFsLXNpZ25hbC03MDkiPmZhdGFsIHNpZ25hbDwvYT46IDxhIGhyZWY9IkJ1Zy1Dcml0ZXJpYS5odG1sI0J1Zy1Dcml0ZXJpYSI+QnVnIENyaXRlcmlhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbCNpbmRleC1maWxlLW5hbWUtd2lsZGNhcmQtcGF0dGVybnMtNDA5Ij5maWxlIG5hbWUgd2lsZGNhcmQgcGF0dGVybnM8L2E+OiA8YSBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI0lucHV0LVNlY3Rpb24tV2lsZGNhcmRzIj5JbnB1dCBTZWN0aW9uIFdpbGRjYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBIRFJTLmh0bWwjaW5kZXgtRklMRUhEUi00OTEiPjxjb2RlPkZJTEVIRFI8L2NvZGU+PC9hPjogPGEgaHJlZj0iUEhEUlMuaHRtbCNQSERSUyI+UEhEUlM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI2luZGV4LWZpbGVuYW1lLXN5bWJvbHMtNDM2Ij5maWxlbmFtZSBzeW1ib2xzPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMuaHRtbCNPdXRwdXQtU2VjdGlvbi1LZXl3b3JkcyI+T3V0cHV0IFNlY3Rpb24gS2V5d29yZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1GaWxsLmh0bWwjaW5kZXgtZmlsbC1wYXR0ZXJuXzAwMmMtZW50aXJlLXNlY3Rpb24tNDcxIj5maWxsIHBhdHRlcm4sIGVudGlyZSBzZWN0aW9uPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRmlsbC5odG1sI091dHB1dC1TZWN0aW9uLUZpbGwiPk91dHB1dCBTZWN0aW9uIEZpbGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EYXRhLmh0bWwjaW5kZXgtRklMTF8wMDI4XzAwNDB2YXJfMDA3YmV4cHJlc3Npb25fMDA3ZF8wMDI5LTQzMSI+PGNvZGU+RklMTCg8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EYXRhLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGF0YSI+T3V0cHV0IFNlY3Rpb24gRGF0YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1maW5hbGl6YXRpb24tZnVuY3Rpb24tNDQiPmZpbmFsaXphdGlvbiBmdW5jdGlvbjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI2luZGV4LWZpcnN0LWlucHV0LWZpbGUtMzY5Ij5maXJzdCBpbnB1dCBmaWxlPC9hPjogPGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnRyeS1Qb2ludC5odG1sI2luZGV4LWZpcnN0LWluc3RydWN0aW9uLTM1MCI+Zmlyc3QgaW5zdHJ1Y3Rpb248L2E+OiA8YSBocmVmPSJFbnRyeS1Qb2ludC5odG1sI0VudHJ5LVBvaW50Ij5FbnRyeSBQb2ludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LUZJWF8wMDVmVjRCWC01OTgiPkZJWF9WNEJYPC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC1GSVhfMDA1ZlY0QlhfMDA1ZklOVEVSV09SS0lORy02MDAiPkZJWF9WNEJYX0lOVEVSV09SS0lORzwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI2luZGV4LUZPUkNFXzAwNWZDT01NT05fMDA1ZkFMTE9DQVRJT04tMzgxIj48Y29kZT5GT1JDRV9DT01NT05fQUxMT0NBVElPTjwvY29kZT48L2E+OiA8YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjTWlzY2VsbGFuZW91cy1Db21tYW5kcyI+TWlzY2VsbGFuZW91cyBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCNpbmRleC1mb3JjaW5nLWlucHV0LXNlY3Rpb24tYWxpZ25tZW50LTQ1OCI+Zm9yY2luZyBpbnB1dCBzZWN0aW9uIGFsaWdubWVudDwvYT46IDxhIGhyZWY9IkZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCNGb3JjZWQtSW5wdXQtQWxpZ25tZW50Ij5Gb3JjZWQgSW5wdXQgQWxpZ25tZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQuaHRtbCNpbmRleC1mb3JjaW5nLW91dHB1dC1zZWN0aW9uLWFsaWdubWVudC00NTUiPmZvcmNpbmcgb3V0cHV0IHNlY3Rpb24gYWxpZ25tZW50PC9hPjogPGEgaHJlZj0iRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQuaHRtbCNGb3JjZWQtT3V0cHV0LUFsaWdubWVudCI+Rm9yY2VkIE91dHB1dCBBbGlnbm1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZm9yY2luZy10aGUtY3JlYXRpb24tb2YtZHluYW1pYy1zZWN0aW9ucy04NyI+Zm9yY2luZyB0aGUgY3JlYXRpb24gb2YgZHluYW1pYyBzZWN0aW9uczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JGT1JNQVRfMDA3ZC1fMDAyOE1SSV8wMDI5LTcyMyI+PGNvZGU+Rk9STUFUPC9jb2RlPiAoTVJJKTwvYT46IDxhIGhyZWY9Ik1SSS5odG1sI01SSSI+TVJJPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1mdW5jdGlvbnMtaW4tZXhwcmVzc2lvbnMtNTMzIj5mdW5jdGlvbnMgaW4gZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklucHV0LVNlY3Rpb24tS2VlcC5odG1sI2luZGV4LWdhcmJhZ2UtY29sbGVjdGlvbi00MjIiPmdhcmJhZ2UgY29sbGVjdGlvbjwvYT46IDxhIGhyZWY9IklucHV0LVNlY3Rpb24tS2VlcC5odG1sI0lucHV0LVNlY3Rpb24tS2VlcCI+SW5wdXQgU2VjdGlvbiBLZWVwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdhcmJhZ2UtY29sbGVjdGlvbi0xNzUiPmdhcmJhZ2UgY29sbGVjdGlvbjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWdlbmVyYXRpbmctb3B0aW1pemVkLW91dHB1dC04MiI+Z2VuZXJhdGluZyBvcHRpbWl6ZWQgb3V0cHV0PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdmVydmlldy5odG1sI2luZGV4LWdfdF8wMDQwc2NfMDA3YmdudV8wMDdkLWxpbmtlci0xIj48c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gbGlua2VyPC9hPjogPGEgaHJlZj0iT3ZlcnZpZXcuaHRtbCNPdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC5odG1sI2luZGV4LUdOVVRBUkdFVC0zMzMiPjxjb2RlPkdOVVRBUkdFVDwvY29kZT48L2E+OiA8YSBocmVmPSJFbnZpcm9ubWVudC5odG1sI0Vudmlyb25tZW50Ij5FbnZpcm9ubWVudDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNpbmRleC1HUk9VUF8wMDI4XzAwNDB2YXJfMDA3YmZpbGVzXzAwN2RfMDAyOS0zNTkiPjxjb2RlPkdST1VQKDwvY29kZT48dmFyPmZpbGVzPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjRmlsZS1Db21tYW5kcyI+RmlsZSBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNpbmRleC1ncm91cGluZy1pbnB1dC1maWxlcy0zNjAiPmdyb3VwaW5nIGlucHV0IGZpbGVzPC9hPjogPGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtZ3JvdXBzLW9mLWFyY2hpdmVzLTEzMiI+Z3JvdXBzIG9mIGFyY2hpdmVzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIOF8wMDJmMzAwLmh0bWwjaW5kZXgtSDhfMDAyZjMwMC1zdXBwb3J0LTU2OSI+SDgvMzAwIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLmh0bWwjSDhfMDAyZjMwMCI+SDgvMzAwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1oZWFkZXItc2l6ZS01NjQiPmhlYWRlciBzaXplPC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtaGVhcC1zaXplLTI4OSI+aGVhcCBzaXplPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtaGVscC0xODEiPmhlbHA8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkhJRERFTi5odG1sI2luZGV4LUhJRERFTi0zOTYiPkhJRERFTjwvYT46IDxhIGhyZWY9IkhJRERFTi5odG1sI0hJRERFTiI+SElEREVOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTG9jYXRpb24tQ291bnRlci5odG1sI2luZGV4LWhvbGVzLTUxOSI+aG9sZXM8L2E+OiA8YSBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjTG9jYXRpb24tQ291bnRlciI+TG9jYXRpb24gQ291bnRlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURhdGEuaHRtbCNpbmRleC1ob2xlc18wMDJjLWZpbGxpbmctNDMyIj5ob2xlcywgZmlsbGluZzwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURhdGEuaHRtbCNPdXRwdXQtU2VjdGlvbi1EYXRhIj5PdXRwdXQgU2VjdGlvbiBEYXRhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSFBQQS1FTEYzMi5odG1sI2luZGV4LUhQUEEtbXVsdGlwbGUtc3ViXzAwMmRzcGFjZS1zdHVicy02MTciPkhQUEEgbXVsdGlwbGUgc3ViLXNwYWNlIHN0dWJzPC9hPjogPGEgaHJlZj0iSFBQQS1FTEYzMi5odG1sI0hQUEEtRUxGMzIiPkhQUEEgRUxGMzI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJIUFBBLUVMRjMyLmh0bWwjaW5kZXgtSFBQQS1zdHViLWdyb3VwaW5nLTYxOSI+SFBQQSBzdHViIGdyb3VwaW5nPC9hPjogPGEgaHJlZj0iSFBQQS1FTEYzMi5odG1sI0hQUEEtRUxGMzIiPkhQUEEgRUxGMzI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpOTYwLmh0bWwjaW5kZXgtaTk2MC1zdXBwb3J0LTU3MiI+aTk2MCBzdXBwb3J0PC9hPjogPGEgaHJlZj0iaTk2MC5odG1sI2k5NjAiPmk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtaW1hZ2UtYmFzZS0yOTEiPmltYWdlIGJhc2U8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkltcGxpY2l0LUxpbmtlci1TY3JpcHRzLmh0bWwjaW5kZXgtaW1wbGljaXQtbGlua2VyLXNjcmlwdHMtNTY3Ij5pbXBsaWNpdCBsaW5rZXIgc2NyaXB0czwvYT46IDxhIGhyZWY9IkltcGxpY2l0LUxpbmtlci1TY3JpcHRzLmh0bWwjSW1wbGljaXQtTGlua2VyLVNjcmlwdHMiPkltcGxpY2l0IExpbmtlciBTY3JpcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV0lOMzIuaHRtbCNpbmRleC1pbXBvcnQtbGlicmFyaWVzLTY4MiI+aW1wb3J0IGxpYnJhcmllczwvYT46IDxhIGhyZWY9IldJTjMyLmh0bWwjV0lOMzIiPldJTjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI2luZGV4LUlOQ0xVREUtXzAwNDB2YXJfMDA3YmZpbGVuYW1lXzAwN2QtMzUzIj48Y29kZT5JTkNMVURFIDwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PC9hPjogPGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjaW5kZXgtaW5jbHVkaW5nLWEtbGlua2VyLXNjcmlwdC0zNTQiPmluY2x1ZGluZyBhIGxpbmtlciBzY3JpcHQ8L2E+OiA8YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjRmlsZS1Db21tYW5kcyI+RmlsZSBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1pbmNsdWRpbmctYW4tZW50aXJlLWFyY2hpdmUtMjY0Ij5pbmNsdWRpbmcgYW4gZW50aXJlIGFyY2hpdmU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1pbmNyZW1lbnRhbC1saW5rLTU0Ij5pbmNyZW1lbnRhbCBsaW5rPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjaW5kZXgtSU5ISUJJVF8wMDVmQ09NTU9OXzAwNWZBTExPQ0FUSU9OLTM4MyI+PGNvZGU+SU5ISUJJVF9DT01NT05fQUxMT0NBVElPTjwvY29kZT48L2E+OiA8YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjTWlzY2VsbGFuZW91cy1Db21tYW5kcyI+TWlzY2VsbGFuZW91cyBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1pbml0aWFsaXphdGlvbi1mdW5jdGlvbi01NSI+aW5pdGlhbGl6YXRpb24gZnVuY3Rpb248L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI2luZGV4LWluaXRpYWxpemVkLWRhdGEtaW4tUk9NLTQ1MyI+aW5pdGlhbGl6ZWQgZGF0YSBpbiBST008L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1MTUEuaHRtbCNPdXRwdXQtU2VjdGlvbi1MTUEiPk91dHB1dCBTZWN0aW9uIExNQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcm1hdC1Db21tYW5kcy5odG1sI2luZGV4LWlucHV0LWZpbGUtZm9ybWF0LWluLWxpbmtlci1zY3JpcHQtMzczIj5pbnB1dCBmaWxlIGZvcm1hdCBpbiBsaW5rZXIgc2NyaXB0PC9hPjogPGEgaHJlZj0iRm9ybWF0LUNvbW1hbmRzLmh0bWwjRm9ybWF0LUNvbW1hbmRzIj5Gb3JtYXQgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI2luZGV4LWlucHV0LWZpbGVuYW1lLXN5bWJvbHMtNDM1Ij5pbnB1dCBmaWxlbmFtZSBzeW1ib2xzPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMuaHRtbCNPdXRwdXQtU2VjdGlvbi1LZXl3b3JkcyI+T3V0cHV0IFNlY3Rpb24gS2V5d29yZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjaW5kZXgtaW5wdXQtZmlsZXMtaW4tbGlua2VyLXNjcmlwdHMtMzU2Ij5pbnB1dCBmaWxlcyBpbiBsaW5rZXIgc2NyaXB0czwvYT46IDxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNGaWxlLUNvbW1hbmRzIj5GaWxlIENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LWlucHV0LWZpbGVzXzAwMmMtZGlzcGxheWluZy0xMDMiPmlucHV0IGZpbGVzLCBkaXNwbGF5aW5nPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtaW5wdXQtZm9ybWF0LTE1Ij5pbnB1dCBmb3JtYXQ8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNpbmRleC1pbnB1dC1vYmplY3QtZmlsZXMtaW4tbGlua2VyLXNjcmlwdHMtMzU3Ij5pbnB1dCBvYmplY3QgZmlsZXMgaW4gbGlua2VyIHNjcmlwdHM8L2E+OiA8YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjRmlsZS1Db21tYW5kcyI+RmlsZSBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCNpbmRleC1pbnB1dC1zZWN0aW9uLWFsaWdubWVudC00NTkiPmlucHV0IHNlY3Rpb24gYWxpZ25tZW50PC9hPjogPGEgaHJlZj0iRm9yY2VkLUlucHV0LUFsaWdubWVudC5odG1sI0ZvcmNlZC1JbnB1dC1BbGlnbm1lbnQiPkZvcmNlZCBJbnB1dCBBbGlnbm1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnB1dC1TZWN0aW9uLUJhc2ljcy5odG1sI2luZGV4LWlucHV0LXNlY3Rpb24tYmFzaWNzLTQwNiI+aW5wdXQgc2VjdGlvbiBiYXNpY3M8L2E+OiA8YSBocmVmPSJJbnB1dC1TZWN0aW9uLUJhc2ljcy5odG1sI0lucHV0LVNlY3Rpb24tQmFzaWNzIj5JbnB1dCBTZWN0aW9uIEJhc2ljczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjaW5kZXgtaW5wdXQtc2VjdGlvbi13aWxkY2FyZHMtNDA3Ij5pbnB1dCBzZWN0aW9uIHdpbGRjYXJkczwvYT46IDxhIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMiPklucHV0IFNlY3Rpb24gV2lsZGNhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi5odG1sI2luZGV4LWlucHV0LXNlY3Rpb25zLTQwNCI+aW5wdXQgc2VjdGlvbnM8L2E+OiA8YSBocmVmPSJJbnB1dC1TZWN0aW9uLmh0bWwjSW5wdXQtU2VjdGlvbiI+SW5wdXQgU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNpbmRleC1JTlBVVF8wMDI4XzAwNDB2YXJfMDA3YmZpbGVzXzAwN2RfMDAyOS0zNTUiPjxjb2RlPklOUFVUKDwvY29kZT48dmFyPmZpbGVzPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjRmlsZS1Db21tYW5kcyI+RmlsZSBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNpbmRleC1JTlNFUlQtMzg1Ij48Y29kZT5JTlNFUlQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI01pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPk1pc2NlbGxhbmVvdXMgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjaW5kZXgtaW5zZXJ0LXVzZXItc2NyaXB0LWludG8tZGVmYXVsdC1zY3JpcHQtMzg2Ij5pbnNlcnQgdXNlciBzY3JpcHQgaW50byBkZWZhdWx0IHNjcmlwdDwvYT46IDxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNNaXNjZWxsYW5lb3VzLUNvbW1hbmRzIj5NaXNjZWxsYW5lb3VzIENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uc3RhbnRzLmh0bWwjaW5kZXgtaW50ZWdlci1ub3RhdGlvbi00OTkiPmludGVnZXIgbm90YXRpb248L2E+OiA8YSBocmVmPSJDb25zdGFudHMuaHRtbCNDb25zdGFudHMiPkNvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbnN0YW50cy5odG1sI2luZGV4LWludGVnZXItc3VmZml4ZXMtNTA1Ij5pbnRlZ2VyIHN1ZmZpeGVzPC9hPjogPGEgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIj5Db25zdGFudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDYW5vbmljYWwtZm9ybWF0Lmh0bWwjaW5kZXgtaW50ZXJuYWwtb2JqZWN0XzAwMmRmaWxlLWZvcm1hdC03MDUiPmludGVybmFsIG9iamVjdC1maWxlIGZvcm1hdDwvYT46IDxhIGhyZWY9IkNhbm9uaWNhbC1mb3JtYXQuaHRtbCNDYW5vbmljYWwtZm9ybWF0Ij5DYW5vbmljYWwgZm9ybWF0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjaW5kZXgtaW52YWxpZC1pbnB1dC03MTMiPmludmFsaWQgaW5wdXQ8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkNvbnN0YW50cy5odG1sI2luZGV4LUstYW5kLU0taW50ZWdlci1zdWZmaXhlcy01MDIiPksgYW5kIE0gaW50ZWdlciBzdWZmaXhlczwvYT46IDxhIGhyZWY9IkNvbnN0YW50cy5odG1sI0NvbnN0YW50cyI+Q29uc3RhbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1LZWVwLmh0bWwjaW5kZXgtS0VFUC00MjEiPktFRVA8L2E+OiA8YSBocmVmPSJJbnB1dC1TZWN0aW9uLUtlZXAuaHRtbCNJbnB1dC1TZWN0aW9uLUtlZXAiPklucHV0IFNlY3Rpb24gS2VlcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1FTU9SWS5odG1sI2luZGV4LWwtXzAwM2QtNDg1Ij48Y29kZT5sID08L2NvZGU+PC9hPjogPGEgaHJlZj0iTUVNT1JZLmh0bWwjTUVNT1JZIj5NRU1PUlk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFdmFsdWF0aW9uLmh0bWwjaW5kZXgtbGF6eS1ldmFsdWF0aW9uLTUyNSI+bGF6eSBldmFsdWF0aW9uPC9hPjogPGEgaHJlZj0iRXZhbHVhdGlvbi5odG1sI0V2YWx1YXRpb24iPkV2YWx1YXRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjaW5kZXgtZ190XzAwNDBjb21tYW5kXzAwN2JsZF8wMDdkLWJ1Z3NfMDAyYy1yZXBvcnRpbmctNzE1Ij48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBidWdzLCByZXBvcnRpbmc8L2E+OiA8YSBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjQnVnLVJlcG9ydGluZyI+QnVnIFJlcG9ydGluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNpbmRleC1MRF8wMDVmRkVBVFVSRV8wMDI4XzAwNDB2YXJfMDA3YnN0cmluZ18wMDdkXzAwMjktMzkyIj48Y29kZT5MRF9GRUFUVVJFKDwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI01pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPk1pc2NlbGxhbmVvdXMgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnZpcm9ubWVudC5odG1sI2luZGV4LUxERU1VTEFUSU9OLTMzNSI+PGNvZGU+TERFTVVMQVRJT048L2NvZGU+PC9hPjogPGEgaHJlZj0iRW52aXJvbm1lbnQuaHRtbCNFbnZpcm9ubWVudCI+RW52aXJvbm1lbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNRU1PUlkuaHRtbCNpbmRleC1sZW4tXzAwM2QtNDg0Ij48Y29kZT5sZW4gPTwvY29kZT48L2E+OiA8YSBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiPk1FTU9SWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1FTU9SWS5odG1sI2luZGV4LUxFTkdUSC1fMDAzZC00ODMiPjxjb2RlPkxFTkdUSCA9PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1FTU9SWS5odG1sI01FTU9SWSI+TUVNT1JZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1MRU5HVEhfMDAyOF8wMDQwdmFyXzAwN2JtZW1vcnlfMDA3ZF8wMDI5LTU1MiI+PGNvZGU+TEVOR1RIKDwvY29kZT48dmFyPm1lbW9yeTwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjaW5kZXgtbGlicmFyeS1zZWFyY2gtcGF0aC1pbi1saW5rZXItc2NyaXB0LTM2NSI+bGlicmFyeSBzZWFyY2ggcGF0aCBpbiBsaW5rZXIgc2NyaXB0PC9hPjogPGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtbGluay1tYXAtNjUiPmxpbmsgbWFwPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtbGlua18wMDJkdGltZS1ydW50aW1lLWxpYnJhcnktc2VhcmNoLXBhdGgtMjE5Ij5saW5rLXRpbWUgcnVudGltZSBsaWJyYXJ5IHNlYXJjaCBwYXRoPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNpbmRleC1saW5rZXItY3Jhc2gtNzEwIj5saW5rZXIgY3Jhc2g8L2E+OiA8YSBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJhc2ljLVNjcmlwdC1Db25jZXB0cy5odG1sI2luZGV4LWxpbmtlci1zY3JpcHQtY29uY2VwdHMtMzQzIj5saW5rZXIgc2NyaXB0IGNvbmNlcHRzPC9hPjogPGEgaHJlZj0iQmFzaWMtU2NyaXB0LUNvbmNlcHRzLmh0bWwjQmFzaWMtU2NyaXB0LUNvbmNlcHRzIj5CYXNpYyBTY3JpcHQgQ29uY2VwdHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtRXhhbXBsZS5odG1sI2luZGV4LWxpbmtlci1zY3JpcHQtZXhhbXBsZS0zNDUiPmxpbmtlciBzY3JpcHQgZXhhbXBsZTwvYT46IDxhIGhyZWY9IlNpbXBsZS1FeGFtcGxlLmh0bWwjU2ltcGxlLUV4YW1wbGUiPlNpbXBsZSBFeGFtcGxlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI2luZGV4LWxpbmtlci1zY3JpcHQtZmlsZS1jb21tYW5kcy0zNTIiPmxpbmtlciBzY3JpcHQgZmlsZSBjb21tYW5kczwvYT46IDxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNGaWxlLUNvbW1hbmRzIj5GaWxlIENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU2NyaXB0LUZvcm1hdC5odG1sI2luZGV4LWxpbmtlci1zY3JpcHQtZm9ybWF0LTM0NCI+bGlua2VyIHNjcmlwdCBmb3JtYXQ8L2E+OiA8YSBocmVmPSJTY3JpcHQtRm9ybWF0Lmh0bWwjU2NyaXB0LUZvcm1hdCI+U2NyaXB0IEZvcm1hdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNpbmRleC1saW5rZXItc2NyaXB0LWlucHV0LW9iamVjdC1maWxlcy0zNTgiPmxpbmtlciBzY3JpcHQgaW5wdXQgb2JqZWN0IGZpbGVzPC9hPjogPGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29tbWFuZHMuaHRtbCNpbmRleC1saW5rZXItc2NyaXB0LXNpbXBsZS1jb21tYW5kcy0zNDciPmxpbmtlciBzY3JpcHQgc2ltcGxlIGNvbW1hbmRzPC9hPjogPGEgaHJlZj0iU2ltcGxlLUNvbW1hbmRzLmh0bWwjU2ltcGxlLUNvbW1hbmRzIj5TaW1wbGUgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTY3JpcHRzLmh0bWwjaW5kZXgtbGlua2VyLXNjcmlwdHMtMzQxIj5saW5rZXIgc2NyaXB0czwvYT46IDxhIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIj5TY3JpcHRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMSVNUXzAwN2QtXzAwMjhNUklfMDAyOS03MjQiPjxjb2RlPkxJU1Q8L2NvZGU+IChNUkkpPC9hPjogPGEgaHJlZj0iTVJJLmh0bWwjTVJJIj5NUkk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtbGl0dGxlXzAwMmRlbmRpYW4tb2JqZWN0cy0zOCI+bGl0dGxlLWVuZGlhbiBvYmplY3RzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNUkkuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkxPQURfMDA3ZC1fMDAyOE1SSV8wMDI5LTcyNSI+PGNvZGU+TE9BRDwvY29kZT4gKE1SSSk8L2E+OiA8YSBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI2luZGV4LWxvYWQtYWRkcmVzcy00NTAiPmxvYWQgYWRkcmVzczwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI091dHB1dC1TZWN0aW9uLUxNQSI+T3V0cHV0IFNlY3Rpb24gTE1BPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1MT0FEQUREUl8wMDI4XzAwNDB2YXJfMDA3YnNlY3Rpb25fMDA3ZF8wMDI5LTU1MyI+PGNvZGU+TE9BREFERFIoPC9jb2RlPjx2YXI+c2VjdGlvbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1UeXBlLmh0bWwjaW5kZXgtbG9hZGluZ18wMDJjLXByZXZlbnRpbmctNDQ3Ij5sb2FkaW5nLCBwcmV2ZW50aW5nPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tVHlwZS5odG1sI091dHB1dC1TZWN0aW9uLVR5cGUiPk91dHB1dCBTZWN0aW9uIFR5cGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtbG9jYWwtc3ltYm9sc18wMDJjLWRlbGV0aW5nLTEyNSI+bG9jYWwgc3ltYm9scywgZGVsZXRpbmc8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkxvY2F0aW9uLUNvdW50ZXIuaHRtbCNpbmRleC1sb2NhdGlvbi1jb3VudGVyLTUxNyI+bG9jYXRpb24gY291bnRlcjwvYT46IDxhIGhyZWY9IkxvY2F0aW9uLUNvdW50ZXIuaHRtbCNMb2NhdGlvbi1Db3VudGVyIj5Mb2NhdGlvbiBDb3VudGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI2luZGV4LUxPTkdfMDAyOF8wMDQwdmFyXzAwN2JleHByZXNzaW9uXzAwN2RfMDAyOS00MjgiPjxjb2RlPkxPTkcoPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI091dHB1dC1TZWN0aW9uLURhdGEiPk91dHB1dCBTZWN0aW9uIERhdGE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25zdGFudHMuaHRtbCNpbmRleC1NLWFuZC1LLWludGVnZXItc3VmZml4ZXMtNTAzIj5NIGFuZCBLIGludGVnZXIgc3VmZml4ZXM8L2E+OiA8YSBocmVmPSJDb25zdGFudHMuaHRtbCNDb25zdGFudHMiPkNvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZjY4SEMxMi5odG1sI2luZGV4LU02OEhDMTEtYW5kLTY4SEMxMi1zdXBwb3J0LTU4MCI+TTY4SEMxMSBhbmQgNjhIQzEyIHN1cHBvcnQ8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmY2OEhDMTIuaHRtbCNNNjhIQzExXzAwMmY2OEhDMTIiPk02OEhDMTEvNjhIQzEyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI2luZGV4LW1hY2hpbmUtYXJjaGl0ZWN0dXJlLTM5MCI+bWFjaGluZSBhcmNoaXRlY3R1cmU8L2E+OiA8YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjTWlzY2VsbGFuZW91cy1Db21tYW5kcyI+TWlzY2VsbGFuZW91cyBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjaW5kZXgtbWFjaGluZS1kZXBlbmRlbmNpZXMtNTY4Ij5tYWNoaW5lIGRlcGVuZGVuY2llczwvYT46IDxhIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiPk1hY2hpbmUgRGVwZW5kZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi5odG1sI2luZGV4LW1hcHBpbmctaW5wdXQtc2VjdGlvbnMtdG8tb3V0cHV0LXNlY3Rpb25zLTQwNSI+bWFwcGluZyBpbnB1dCBzZWN0aW9ucyB0byBvdXRwdXQgc2VjdGlvbnM8L2E+OiA8YSBocmVmPSJJbnB1dC1TZWN0aW9uLmh0bWwjSW5wdXQtU2VjdGlvbiI+SW5wdXQgU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtTUFYLTU1NSI+PGNvZGU+TUFYPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9saWMtQ29uc3RhbnRzLmh0bWwjaW5kZXgtTUFYUEFHRVNJWkUtNTA4Ij48Y29kZT5NQVhQQUdFU0laRTwvY29kZT48L2E+OiA8YSBocmVmPSJTeW1ib2xpYy1Db25zdGFudHMuaHRtbCNTeW1ib2xpYy1Db25zdGFudHMiPlN5bWJvbGljIENvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1FTU9SWS5odG1sI2luZGV4LU1FTU9SWS00NzQiPjxjb2RlPk1FTU9SWTwvY29kZT48L2E+OiA8YSBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiPk1FTU9SWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1FTU9SWS5odG1sI2luZGV4LW1lbW9yeS1yZWdpb24tYXR0cmlidXRlcy00NzkiPm1lbW9yeSByZWdpb24gYXR0cmlidXRlczwvYT46IDxhIGhyZWY9Ik1FTU9SWS5odG1sI01FTU9SWSI+TUVNT1JZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUVNT1JZLmh0bWwjaW5kZXgtbWVtb3J5LXJlZ2lvbnMtNDc1Ij5tZW1vcnkgcmVnaW9uczwvYT46IDxhIGhyZWY9Ik1FTU9SWS5odG1sI01FTU9SWSI+TUVNT1JZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUmVnaW9uLmh0bWwjaW5kZXgtbWVtb3J5LXJlZ2lvbnMtYW5kLXNlY3Rpb25zLTQ2NSI+bWVtb3J5IHJlZ2lvbnMgYW5kIHNlY3Rpb25zPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUmVnaW9uLmh0bWwjT3V0cHV0LVNlY3Rpb24tUmVnaW9uIj5PdXRwdXQgU2VjdGlvbiBSZWdpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtbWVtb3J5LXVzYWdlLTE4NiI+bWVtb3J5IHVzYWdlPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LU1JTi01NTYiPjxjb2RlPk1JTjwvY29kZT48L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEsuaHRtbCNpbmRleC1Nb3Rvcm9sYS02OEstR09ULWdlbmVyYXRpb24tNjIxIj5Nb3Rvcm9sYSA2OEsgR09UIGdlbmVyYXRpb248L2E+OiA8YSBocmVmPSJNNjhLLmh0bWwjTTY4SyI+TTY4SzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1SSS5odG1sI2luZGV4LU1SSS1jb21wYXRpYmlsaXR5LTcxNiI+TVJJIGNvbXBhdGliaWxpdHk8L2E+OiA8YSBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1TUDQzMC5odG1sI2luZGV4LU1TUDQzMC1leHRyYS1zZWN0aW9ucy02MjMiPk1TUDQzMCBleHRyYSBzZWN0aW9uczwvYT46IDxhIGhyZWY9Ik1TUDQzMC5odG1sI01TUDQzMCI+TVNQNDMwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JOQU1FXzAwN2QtXzAwMjhNUklfMDAyOS03MjYiPjxjb2RlPk5BTUU8L2NvZGU+IChNUkkpPC9hPjogPGEgaHJlZj0iTVJJLmh0bWwjTVJJIj5NUkk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1OYW1lLmh0bWwjaW5kZXgtbmFtZV8wMDJjLXNlY3Rpb24tNDAwIj5uYW1lLCBzZWN0aW9uPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tTmFtZS5odG1sI091dHB1dC1TZWN0aW9uLU5hbWUiPk91dHB1dCBTZWN0aW9uIE5hbWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2xzLmh0bWwjaW5kZXgtbmFtZXMtNTExIj5uYW1lczwvYT46IDxhIGhyZWY9IlN5bWJvbHMuaHRtbCNTeW1ib2xzIj5TeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LW5hbWluZy10aGUtb3V0cHV0LWZpbGUtODAiPm5hbWluZyB0aGUgb3V0cHV0IGZpbGU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtTkVYVF8wMDI4XzAwNDB2YXJfMDA3YmV4cF8wMDdkXzAwMjktNTU3Ij48Y29kZT5ORVhUKDwvY29kZT48dmFyPmV4cDwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtTk1BR0lDLTcwIj5OTUFHSUM8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LU5PXzAwNWZFTlVNXzAwNWZTSVpFXzAwNWZXQVJOSU5HLTYwOSI+Tk9fRU5VTV9TSVpFX1dBUk5JTkc8L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LU5PXzAwNWZXQ0hBUl8wMDVmU0laRV8wMDVmV0FSTklORy02MTEiPk5PX1dDSEFSX1NJWkVfV0FSTklORzwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI2luZGV4LU5PQ1JPU1NSRUZTXzAwMjhfMDA0MHZhcl8wMDdic2VjdGlvbnNfMDA3ZF8wMDI5LTM4NyI+PGNvZGU+Tk9DUk9TU1JFRlMoPC9jb2RlPjx2YXI+c2VjdGlvbnM8L3Zhcj48Y29kZT4pPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNNaXNjZWxsYW5lb3VzLUNvbW1hbmRzIj5NaXNjZWxsYW5lb3VzIENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tVHlwZS5odG1sI2luZGV4LU5PTE9BRC00NDUiPjxjb2RlPk5PTE9BRDwvY29kZT48L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1UeXBlLmh0bWwjT3V0cHV0LVNlY3Rpb24tVHlwZSI+T3V0cHV0IFNlY3Rpb24gVHlwZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtbm90LWVub3VnaC1yb29tLWZvci1wcm9ncmFtLWhlYWRlcnMtNTY1Ij5ub3QgZW5vdWdoIHJvb20gZm9yIHByb2dyYW0gaGVhZGVyczwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUVNT1JZLmh0bWwjaW5kZXgtby1fMDAzZC00ODEiPjxjb2RlPm8gPTwvY29kZT48L2E+OiA8YSBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiPk1FTU9SWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJGRC5odG1sI2luZGV4LW9iamR1bXAtXzAwMmRpLTcwMCI+PGNvZGU+b2JqZHVtcCAtaTwvY29kZT48L2E+OiA8YSBocmVmPSJCRkQuaHRtbCNCRkQiPkJGRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJGRC5odG1sI2luZGV4LW9iamVjdC1maWxlLW1hbmFnZW1lbnQtNjk4Ij5vYmplY3QgZmlsZSBtYW5hZ2VtZW50PC9hPjogPGEgaHJlZj0iQkZELmh0bWwjQkZEIj5CRkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtb2JqZWN0LWZpbGVzLTYiPm9iamVjdCBmaWxlczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQkZELmh0bWwjaW5kZXgtb2JqZWN0LWZvcm1hdHMtYXZhaWxhYmxlLTY5OSI+b2JqZWN0IGZvcm1hdHMgYXZhaWxhYmxlPC9hPjogPGEgaHJlZj0iQkZELmh0bWwjQkZEIj5CRkQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtb2JqZWN0LXNpemUtNDkiPm9iamVjdCBzaXplPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtT01BR0lDLTc1Ij5PTUFHSUM8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQuaHRtbCNpbmRleC1PTkxZXzAwNWZJRl8wMDVmUk8tNDYwIj48Y29kZT5PTkxZX0lGX1JPPC9jb2RlPjwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQuaHRtbCNPdXRwdXQtU2VjdGlvbi1Db25zdHJhaW50Ij5PdXRwdXQgU2VjdGlvbiBDb25zdHJhaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludC5odG1sI2luZGV4LU9OTFlfMDA1ZklGXzAwNWZSVy00NjEiPjxjb2RlPk9OTFlfSUZfUlc8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludC5odG1sI091dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQiPk91dHB1dCBTZWN0aW9uIENvbnN0cmFpbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCRkQtb3V0bGluZS5odG1sI2luZGV4LW9wZW5pbmctb2JqZWN0LWZpbGVzLTcwMyI+b3BlbmluZyBvYmplY3QgZmlsZXM8L2E+OiA8YSBocmVmPSJCRkQtb3V0bGluZS5odG1sI0JGRC1vdXRsaW5lIj5CRkQgb3V0bGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wZXJhdG9ycy5odG1sI2luZGV4LW9wZXJhdG9ycy1mb3ItYXJpdGhtZXRpYy01MjIiPm9wZXJhdG9ycyBmb3IgYXJpdGhtZXRpYzwvYT46IDxhIGhyZWY9Ik9wZXJhdG9ycy5odG1sI09wZXJhdG9ycyI+T3BlcmF0b3JzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LW9wdGlvbnMtNCI+b3B0aW9uczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JPUkRFUl8wMDdkLV8wMDI4TVJJXzAwMjktNzI3Ij48Y29kZT5PUkRFUjwvY29kZT4gKE1SSSk8L2E+OiA8YSBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1FTU9SWS5odG1sI2luZGV4LW9yZy1fMDAzZC00ODIiPjxjb2RlPm9yZyA9PC9jb2RlPjwvYT46IDxhIGhyZWY9Ik1FTU9SWS5odG1sI01FTU9SWSI+TUVNT1JZPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTUVNT1JZLmh0bWwjaW5kZXgtT1JJR0lOLV8wMDNkLTQ4MCI+PGNvZGU+T1JJR0lOID08L2NvZGU+PC9hPjogPGEgaHJlZj0iTUVNT1JZLmh0bWwjTUVNT1JZIj5NRU1PUlk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LU9SSUdJTl8wMDI4XzAwNDB2YXJfMDA3Ym1lbW9yeV8wMDdkXzAwMjktNTU5Ij48Y29kZT5PUklHSU4oPC9jb2RlPjx2YXI+bWVtb3J5PC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9ycGhhbi1TZWN0aW9ucy5odG1sI2luZGV4LW9ycGhhbi01MTQiPm9ycGhhbjwvYT46IDxhIGhyZWY9Ik9ycGhhbi1TZWN0aW9ucy5odG1sI09ycGhhbi1TZWN0aW9ucyI+T3JwaGFuIFNlY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LW91dHB1dC1maWxlLWFmdGVyLWVycm9ycy0yMDAiPm91dHB1dCBmaWxlIGFmdGVyIGVycm9yczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRm9ybWF0LUNvbW1hbmRzLmh0bWwjaW5kZXgtb3V0cHV0LWZpbGUtZm9ybWF0LWluLWxpbmtlci1zY3JpcHQtMzcxIj5vdXRwdXQgZmlsZSBmb3JtYXQgaW4gbGlua2VyIHNjcmlwdDwvYT46IDxhIGhyZWY9IkZvcm1hdC1Db21tYW5kcy5odG1sI0Zvcm1hdC1Db21tYW5kcyI+Rm9ybWF0IENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI2luZGV4LW91dHB1dC1maWxlLW5hbWUtaW4tbGlua2VyLXNjcmlwdC0zNjMiPm91dHB1dCBmaWxlIG5hbWUgaW4gbGlua2VyIHNjcmlwdDwvYT46IDxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNGaWxlLUNvbW1hbmRzIj5GaWxlIENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LW91dHB1dC1mb3JtYXQtMTgwIj5vdXRwdXQgZm9ybWF0PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3JjZWQtT3V0cHV0LUFsaWdubWVudC5odG1sI2luZGV4LW91dHB1dC1zZWN0aW9uLWFsaWdubWVudC00NTYiPm91dHB1dCBzZWN0aW9uIGFsaWdubWVudDwvYT46IDxhIGhyZWY9IkZvcmNlZC1PdXRwdXQtQWxpZ25tZW50Lmh0bWwjRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQiPkZvcmNlZCBPdXRwdXQgQWxpZ25tZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI2luZGV4LW91dHB1dC1zZWN0aW9uLWF0dHJpYnV0ZXMtNDQ0Ij5vdXRwdXQgc2VjdGlvbiBhdHRyaWJ1dGVzPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiPk91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EYXRhLmh0bWwjaW5kZXgtb3V0cHV0LXNlY3Rpb24tZGF0YS00MjUiPm91dHB1dCBzZWN0aW9uIGRhdGE8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EYXRhLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGF0YSI+T3V0cHV0IFNlY3Rpb24gRGF0YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNpbmRleC1PVVRQVVRfMDAyOF8wMDQwdmFyXzAwN2JmaWxlbmFtZV8wMDdkXzAwMjktMzYyIj48Y29kZT5PVVRQVVQoPC9jb2RlPjx2YXI+ZmlsZW5hbWU8L3Zhcj48Y29kZT4pPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNGaWxlLUNvbW1hbmRzIj5GaWxlIENvbW1hbmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI2luZGV4LU9VVFBVVF8wMDVmQVJDSF8wMDI4XzAwNDB2YXJfMDA3YmJmZGFyY2hfMDA3ZF8wMDI5LTM4OSI+PGNvZGU+T1VUUFVUX0FSQ0goPC9jb2RlPjx2YXI+YmZkYXJjaDwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI01pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPk1pc2NlbGxhbmVvdXMgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3JtYXQtQ29tbWFuZHMuaHRtbCNpbmRleC1PVVRQVVRfMDA1ZkZPUk1BVF8wMDI4XzAwNDB2YXJfMDA3YmJmZG5hbWVfMDA3ZF8wMDI5LTM3MCI+PGNvZGU+T1VUUFVUX0ZPUk1BVCg8L2NvZGU+PHZhcj5iZmRuYW1lPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJGb3JtYXQtQ29tbWFuZHMuaHRtbCNGb3JtYXQtQ29tbWFuZHMiPkZvcm1hdCBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJsYXktRGVzY3JpcHRpb24uaHRtbCNpbmRleC1PVkVSTEFZLTQ3MiI+PGNvZGU+T1ZFUkxBWTwvY29kZT48L2E+OiA8YSBocmVmPSJPdmVybGF5LURlc2NyaXB0aW9uLmh0bWwjT3ZlcmxheS1EZXNjcmlwdGlvbiI+T3ZlcmxheSBEZXNjcmlwdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJsYXktRGVzY3JpcHRpb24uaHRtbCNpbmRleC1vdmVybGF5cy00NzMiPm92ZXJsYXlzPC9hPjogPGEgaHJlZj0iT3ZlcmxheS1EZXNjcmlwdGlvbi5odG1sI092ZXJsYXktRGVzY3JpcHRpb24iPk92ZXJsYXkgRGVzY3JpcHRpb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtcGFydGlhbC1saW5rLTg4Ij5wYXJ0aWFsIGxpbms8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LVBFLWltcG9ydC10YWJsZS1wcmVmaXhpbmctNTg5Ij5QRSBpbXBvcnQgdGFibGUgcHJlZml4aW5nPC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJQSERSUy5odG1sI2luZGV4LVBIRFJTLTQ4NiI+PGNvZGU+UEhEUlM8L2NvZGU+PC9hPjogPGEgaHJlZj0iUEhEUlMuaHRtbCNQSERSUyI+UEhEUlM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC1QSUNfMDA1ZlZFTkVFUi02MTMiPlBJQ19WRU5FRVI8L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1wb3NpdGlvbi1pbmRlcGVuZGVudC1leGVjdXRhYmxlcy0yMDYiPnBvc2l0aW9uIGluZGVwZW5kZW50IGV4ZWN1dGFibGVzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjaW5kZXgtUG93ZXJQQy1FTEYzMi1vcHRpb25zLTYyNiI+UG93ZXJQQyBFTEYzMiBvcHRpb25zPC9hPjogPGEgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI1Bvd2VyUEMtRUxGMzIiPlBvd2VyUEMgRUxGMzI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjaW5kZXgtUG93ZXJQQy1HT1QtNjMwIj5Qb3dlclBDIEdPVDwvYT46IDxhIGhyZWY9IlBvd2VyUEMtRUxGMzIuaHRtbCNQb3dlclBDLUVMRjMyIj5Qb3dlclBDIEVMRjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI2luZGV4LVBvd2VyUEMtbG9uZy1icmFuY2hlcy02MjQiPlBvd2VyUEMgbG9uZyBicmFuY2hlczwvYT46IDxhIGhyZWY9IlBvd2VyUEMtRUxGMzIuaHRtbCNQb3dlclBDLUVMRjMyIj5Qb3dlclBDIEVMRjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI2luZGV4LVBvd2VyUEMtUExULTYyNyI+UG93ZXJQQyBQTFQ8L2E+OiA8YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjUG93ZXJQQy1FTEYzMiI+UG93ZXJQQyBFTEYzMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEMtRUxGMzIuaHRtbCNpbmRleC1Qb3dlclBDLXN0dWItc3ltYm9scy02MzIiPlBvd2VyUEMgc3R1YiBzeW1ib2xzPC9hPjogPGEgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI1Bvd2VyUEMtRUxGMzIiPlBvd2VyUEMgRUxGMzI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjaW5kZXgtUG93ZXJQQy1UTFMtb3B0aW1pemF0aW9uLTYzNCI+UG93ZXJQQyBUTFMgb3B0aW1pemF0aW9uPC9hPjogPGEgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI1Bvd2VyUEMtRUxGMzIiPlBvd2VyUEMgRUxGMzI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNpbmRleC1Qb3dlclBDNjQtZG90LXN5bWJvbHMtNjQxIj5Qb3dlclBDNjQgZG90IHN5bWJvbHM8L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LVBvd2VyUEM2NC1FTEY2NC1vcHRpb25zLTYzNiI+UG93ZXJQQzY0IEVMRjY0IG9wdGlvbnM8L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LVBvd2VyUEM2NC1tdWx0aV8wMDJkVE9DLTY1MiI+UG93ZXJQQzY0IG11bHRpLVRPQzwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtUG93ZXJQQzY0LU9QRC1vcHRpbWl6YXRpb24tNjQ2Ij5Qb3dlclBDNjQgT1BEIG9wdGltaXphdGlvbjwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtUG93ZXJQQzY0LU9QRC1zcGFjaW5nLTY0OCI+UG93ZXJQQzY0IE9QRCBzcGFjaW5nPC9hPjogPGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0Ij5Qb3dlclBDNjQgRUxGNjQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNpbmRleC1Qb3dlclBDNjQtUExULWNhbGwtc3R1Yi1zdGF0aWMtY2hhaW4tNjU5Ij5Qb3dlclBDNjQgUExUIGNhbGwgc3R1YiBzdGF0aWMgY2hhaW48L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LVBvd2VyUEM2NC1QTFQtY2FsbC1zdHViLXRocmVhZC1zYWZldHktNjYyIj5Qb3dlclBDNjQgUExUIGNhbGwgc3R1YiB0aHJlYWQgc2FmZXR5PC9hPjogPGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0Ij5Qb3dlclBDNjQgRUxGNjQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNpbmRleC1Qb3dlclBDNjQtUExULXN0dWItYWxpZ25tZW50LTY1NiI+UG93ZXJQQzY0IFBMVCBzdHViIGFsaWdubWVudDwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtUG93ZXJQQzY0LXN0dWItZ3JvdXBpbmctNjM3Ij5Qb3dlclBDNjQgc3R1YiBncm91cGluZzwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjaW5kZXgtUG93ZXJQQzY0LXN0dWItc3ltYm9scy02MzkiPlBvd2VyUEM2NCBzdHViIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LVBvd2VyUEM2NC1UTFMtb3B0aW1pemF0aW9uLTY0NCI+UG93ZXJQQzY0IFRMUyBvcHRpbWl6YXRpb248L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LVBvd2VyUEM2NC1UT0Mtb3B0aW1pemF0aW9uLTY1MCI+UG93ZXJQQzY0IFRPQyBvcHRpbWl6YXRpb248L2E+OiA8YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI2luZGV4LVBvd2VyUEM2NC1UT0Mtc29ydGluZy02NTQiPlBvd2VyUEM2NCBUT0Mgc29ydGluZzwvYT46IDxhIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3BlcmF0b3JzLmh0bWwjaW5kZXgtcHJlY2VkZW5jZS1pbi1leHByZXNzaW9ucy01MjQiPnByZWNlZGVuY2UgaW4gZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiPk9wZXJhdG9yczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLVR5cGUuaHRtbCNpbmRleC1wcmV2ZW50LXVubmVjZXNzYXJ5LWxvYWRpbmctNDQ2Ij5wcmV2ZW50IHVubmVjZXNzYXJ5IGxvYWRpbmc8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1UeXBlLmh0bWwjT3V0cHV0LVNlY3Rpb24tVHlwZSI+T3V0cHV0IFNlY3Rpb24gVHlwZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBIRFJTLmh0bWwjaW5kZXgtcHJvZ3JhbS1oZWFkZXJzLTQ4NyI+cHJvZ3JhbSBoZWFkZXJzPC9hPjogPGEgaHJlZj0iUEhEUlMuaHRtbCNQSERSUyI+UEhEUlM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1QaGRyLmh0bWwjaW5kZXgtcHJvZ3JhbS1oZWFkZXJzLWFuZC1zZWN0aW9ucy00NjgiPnByb2dyYW0gaGVhZGVycyBhbmQgc2VjdGlvbnM8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1QaGRyLmh0bWwjT3V0cHV0LVNlY3Rpb24tUGhkciI+T3V0cHV0IFNlY3Rpb24gUGhkcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtcHJvZ3JhbS1oZWFkZXJzXzAwMmMtbm90LWVub3VnaC1yb29tLTU2NiI+cHJvZ3JhbSBoZWFkZXJzLCBub3QgZW5vdWdoIHJvb208L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBIRFJTLmh0bWwjaW5kZXgtcHJvZ3JhbS1zZWdtZW50cy00ODkiPnByb2dyYW0gc2VnbWVudHM8L2E+OiA8YSBocmVmPSJQSERSUy5odG1sI1BIRFJTIj5QSERSUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlBST1ZJREUuaHRtbCNpbmRleC1QUk9WSURFLTM5NyI+UFJPVklERTwvYT46IDxhIGhyZWY9IlBST1ZJREUuaHRtbCNQUk9WSURFIj5QUk9WSURFPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUFJPVklERV8wMDVmSElEREVOLmh0bWwjaW5kZXgtUFJPVklERV8wMDVmSElEREVOLTM5OCI+UFJPVklERV9ISURERU48L2E+OiA8YSBocmVmPSJQUk9WSURFXzAwNWZISURERU4uaHRtbCNQUk9WSURFXzAwNWZISURERU4iPlBST1ZJREVfSElEREVOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTVJJLmh0bWwjaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JQVUJMSUNfMDA3ZC1fMDAyOE1SSV8wMDI5LTcyOCI+PGNvZGU+UFVCTElDPC9jb2RlPiAoTVJJKTwvYT46IDxhIGhyZWY9Ik1SSS5odG1sI01SSSI+TVJJPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI2luZGV4LVFVQURfMDAyOF8wMDQwdmFyXzAwN2JleHByZXNzaW9uXzAwN2RfMDAyOS00MjkiPjxjb2RlPlFVQUQoPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI091dHB1dC1TZWN0aW9uLURhdGEiPk91dHB1dCBTZWN0aW9uIERhdGE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2xzLmh0bWwjaW5kZXgtcXVvdGVkLXN5bWJvbC1uYW1lcy01MTIiPnF1b3RlZCBzeW1ib2wgbmFtZXM8L2E+OiA8YSBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyI+U3ltYm9sczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1yZWFkXzAwMmRvbmx5LXRleHQtNjkiPnJlYWQtb25seSB0ZXh0PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtcmVhZF8wMDJmd3JpdGUtZnJvbS1jbWQtbGluZS03NCI+cmVhZC93cml0ZSBmcm9tIGNtZCBsaW5lPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSRUdJT05fMDA1ZkFMSUFTLmh0bWwjaW5kZXgtcmVnaW9uLWFsaWFzLTM3NSI+cmVnaW9uIGFsaWFzPC9hPjogPGEgaHJlZj0iUkVHSU9OXzAwNWZBTElBUy5odG1sI1JFR0lPTl8wMDVmQUxJQVMiPlJFR0lPTl9BTElBUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJFR0lPTl8wMDVmQUxJQVMuaHRtbCNpbmRleC1yZWdpb24tbmFtZXMtMzc2Ij5yZWdpb24gbmFtZXM8L2E+OiA8YSBocmVmPSJSRUdJT05fMDA1ZkFMSUFTLmh0bWwjUkVHSU9OXzAwNWZBTElBUyI+UkVHSU9OX0FMSUFTPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUkVHSU9OXzAwNWZBTElBUy5odG1sI2luZGV4LVJFR0lPTl8wMDVmQUxJQVNfMDAyOF8wMDQwdmFyXzAwN2JhbGlhc18wMDdkXzAwMmMtXzAwNDB2YXJfMDA3YnJlZ2lvbl8wMDdkXzAwMjktMzc0Ij48Y29kZT5SRUdJT05fQUxJQVMoPC9jb2RlPjx2YXI+YWxpYXM8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPnJlZ2lvbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iUkVHSU9OXzAwNWZBTElBUy5odG1sI1JFR0lPTl8wMDVmQUxJQVMiPlJFR0lPTl9BTElBUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1FTU9SWS5odG1sI2luZGV4LXJlZ2lvbnMtb2YtbWVtb3J5LTQ3NiI+cmVnaW9ucyBvZiBtZW1vcnk8L2E+OiA8YSBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiPk1FTU9SWTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI2luZGV4LXJlbGF0aXZlLWV4cHJlc3Npb25zLTUyOSI+cmVsYXRpdmUgZXhwcmVzc2lvbnM8L2E+OiA8YSBocmVmPSJFeHByZXNzaW9uLVNlY3Rpb24uaHRtbCNFeHByZXNzaW9uLVNlY3Rpb24iPkV4cHJlc3Npb24gU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1yZWxheGluZy1hZGRyZXNzaW5nLW1vZGVzLTIxMSI+cmVsYXhpbmcgYWRkcmVzc2luZyBtb2RlczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC5odG1sI2luZGV4LXJlbGF4aW5nLW9uLUg4XzAwMmYzMDAtNTcwIj5yZWxheGluZyBvbiBIOC8zMDA8L2E+OiA8YSBocmVmPSJIOF8wMDJmMzAwLmh0bWwjSDhfMDAyZjMwMCI+SDgvMzAwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaTk2MC5odG1sI2luZGV4LXJlbGF4aW5nLW9uLWk5NjAtNTc0Ij5yZWxheGluZyBvbiBpOTYwPC9hPjogPGEgaHJlZj0iaTk2MC5odG1sI2k5NjAiPmk5NjA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmY2OEhDMTIuaHRtbCNpbmRleC1yZWxheGluZy1vbi1NNjhIQzExLTU4MSI+cmVsYXhpbmcgb24gTTY4SEMxMTwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZjY4SEMxMi5odG1sI002OEhDMTFfMDAyZjY4SEMxMiI+TTY4SEMxMS82OEhDMTI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJYdGVuc2EuaHRtbCNpbmRleC1yZWxheGluZy1vbi1YdGVuc2EtNjk1Ij5yZWxheGluZyBvbiBYdGVuc2E8L2E+OiA8YSBocmVmPSJYdGVuc2EuaHRtbCNYdGVuc2EiPlh0ZW5zYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI2luZGV4LXJlbG9jYXRhYmxlLWFuZC1hYnNvbHV0ZS1zeW1ib2xzLTUzMSI+cmVsb2NhdGFibGUgYW5kIGFic29sdXRlIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJFeHByZXNzaW9uLVNlY3Rpb24uaHRtbCNFeHByZXNzaW9uLVNlY3Rpb24iPkV4cHJlc3Npb24gU2VjdGlvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1yZWxvY2F0YWJsZS1vdXRwdXQtODkiPnJlbG9jYXRhYmxlIG91dHB1dDwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZy5odG1sI2luZGV4LXJlbW92aW5nLXNlY3Rpb25zLTQ0MiI+cmVtb3Zpbmcgc2VjdGlvbnM8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZyI+T3V0cHV0IFNlY3Rpb24gRGlzY2FyZGluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjaW5kZXgtcmVwb3J0aW5nLWJ1Z3MtaW4tXzAwNDBjb21tYW5kXzAwN2JsZF8wMDdkLTcwNyI+cmVwb3J0aW5nIGJ1Z3MgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD48L2E+OiA8YSBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJGRC5odG1sI2luZGV4LXJlcXVpcmVtZW50cy1mb3ItQkZELTcwMiI+cmVxdWlyZW1lbnRzIGZvciBCRkQ8L2E+OiA8YSBocmVmPSJCRkQuaHRtbCNCRkQiPkJGRDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1yZXRhaW4tcmVsb2NhdGlvbnMtaW4tZmluYWwtZXhlY3V0YWJsZS04NSI+cmV0YWluIHJlbG9jYXRpb25zIGluIGZpbmFsIGV4ZWN1dGFibGU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1yZXRhaW5pbmctc3BlY2lmaWVkLXN5bWJvbHMtMjEzIj5yZXRhaW5pbmcgc3BlY2lmaWVkIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1yb2RhdGEtc2VnbWVudC1vcmlnaW5fMDAyYy1jbWQtbGluZS0yNDIiPnJvZGF0YSBzZWdtZW50IG9yaWdpbiwgY21kIGxpbmU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI2luZGV4LVJPTS1pbml0aWFsaXplZC1kYXRhLTQ1MiI+Uk9NIGluaXRpYWxpemVkIGRhdGE8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1MTUEuaHRtbCNPdXRwdXQtU2VjdGlvbi1MTUEiPk91dHB1dCBTZWN0aW9uIExNQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtcm91bmQtdXAtZXhwcmVzc2lvbi01NDIiPnJvdW5kIHVwIGV4cHJlc3Npb248L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtcm91bmQtdXAtbG9jYXRpb24tY291bnRlci01NDAiPnJvdW5kIHVwIGxvY2F0aW9uIGNvdW50ZXI8L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1ydW50aW1lLWxpYnJhcnktbmFtZS01MCI+cnVudGltZSBsaWJyYXJ5IG5hbWU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1ydW50aW1lLWxpYnJhcnktc2VhcmNoLXBhdGgtMjE3Ij5ydW50aW1lIGxpYnJhcnkgc2VhcmNoIHBhdGg8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldJTjMyLmh0bWwjaW5kZXgtcnVudGltZS1wc2V1ZG9fMDAyZHJlbG9jYXRpb24tNjg5Ij5ydW50aW1lIHBzZXVkby1yZWxvY2F0aW9uPC9hPjogPGEgaHJlZj0iV0lOMzIuaHRtbCNXSU4zMiI+V0lOMzI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJDb25zdGFudHMuaHRtbCNpbmRleC1zY2FsZWQtaW50ZWdlcnMtNTAxIj5zY2FsZWQgaW50ZWdlcnM8L2E+OiA8YSBocmVmPSJDb25zdGFudHMuaHRtbCNDb25zdGFudHMiPkNvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklucHV0LVNlY3Rpb24tQ29tbW9uLmh0bWwjaW5kZXgtc2NvbW1vbi1zZWN0aW9uLTQxOCI+c2NvbW1vbiBzZWN0aW9uPC9hPjogPGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNJbnB1dC1TZWN0aW9uLUNvbW1vbiI+SW5wdXQgU2VjdGlvbiBDb21tb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtc2NyaXB0LWZpbGVzLTEwNiI+c2NyaXB0IGZpbGVzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTY3JpcHRzLmh0bWwjaW5kZXgtc2NyaXB0cy0zNDAiPnNjcmlwdHM8L2E+OiA8YSBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyI+U2NyaXB0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zZWFyY2gtZGlyZWN0b3J5XzAwMmMtZnJvbS1jbWQtbGluZS02MCI+c2VhcmNoIGRpcmVjdG9yeSwgZnJvbSBjbWQgbGluZTwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI2luZGV4LXNlYXJjaC1wYXRoLWluLWxpbmtlci1zY3JpcHQtMzY3Ij5zZWFyY2ggcGF0aCBpbiBsaW5rZXIgc2NyaXB0PC9hPjogPGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjaW5kZXgtU0VBUkNIXzAwNWZESVJfMDAyOF8wMDQwdmFyXzAwN2JwYXRoXzAwN2RfMDAyOS0zNjQiPjxjb2RlPlNFQVJDSF9ESVIoPC9jb2RlPjx2YXI+cGF0aDwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNUkkuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YlNFQ1RfMDA3ZC1fMDAyOE1SSV8wMDI5LTcyOSI+PGNvZGU+U0VDVDwvY29kZT4gKE1SSSk8L2E+OiA8YSBocmVmPSJNUkkuaHRtbCNNUkkiPk1SSTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUFkZHJlc3MuaHRtbCNpbmRleC1zZWN0aW9uLWFkZHJlc3MtNDAzIj5zZWN0aW9uIGFkZHJlc3M8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1BZGRyZXNzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQWRkcmVzcyI+T3V0cHV0IFNlY3Rpb24gQWRkcmVzczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtc2VjdGlvbi1hZGRyZXNzLWluLWV4cHJlc3Npb24tNTM3Ij5zZWN0aW9uIGFkZHJlc3MgaW4gZXhwcmVzc2lvbjwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNpbmRleC1zZWN0aW9uLWFsaWdubWVudC01NDUiPnNlY3Rpb24gYWxpZ25tZW50PC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtc2VjdGlvbi1hbGlnbm1lbnRfMDAyYy13YXJuaW5ncy1vbi0yNTgiPnNlY3Rpb24gYWxpZ25tZW50LCB3YXJuaW5ncyBvbjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI2luZGV4LXNlY3Rpb24tZGF0YS00MjQiPnNlY3Rpb24gZGF0YTwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURhdGEuaHRtbCNPdXRwdXQtU2VjdGlvbi1EYXRhIj5PdXRwdXQgU2VjdGlvbiBEYXRhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRmlsbC5odG1sI2luZGV4LXNlY3Rpb24tZmlsbC1wYXR0ZXJuLTQ3MCI+c2VjdGlvbiBmaWxsIHBhdHRlcm48L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1GaWxsLmh0bWwjT3V0cHV0LVNlY3Rpb24tRmlsbCI+T3V0cHV0IFNlY3Rpb24gRmlsbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI2luZGV4LXNlY3Rpb24tbG9hZC1hZGRyZXNzLTQ1MSI+c2VjdGlvbiBsb2FkIGFkZHJlc3M8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1MTUEuaHRtbCNPdXRwdXQtU2VjdGlvbi1MTUEiPk91dHB1dCBTZWN0aW9uIExNQTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtc2VjdGlvbi1sb2FkLWFkZHJlc3MtaW4tZXhwcmVzc2lvbi01NTQiPnNlY3Rpb24gbG9hZCBhZGRyZXNzIGluIGV4cHJlc3Npb248L2E+OiA8YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI0J1aWx0aW4tRnVuY3Rpb25zIj5CdWlsdGluIEZ1bmN0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLU5hbWUuaHRtbCNpbmRleC1zZWN0aW9uLW5hbWUtNDAxIj5zZWN0aW9uIG5hbWU8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1OYW1lLmh0bWwjT3V0cHV0LVNlY3Rpb24tTmFtZSI+T3V0cHV0IFNlY3Rpb24gTmFtZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjaW5kZXgtc2VjdGlvbi1uYW1lLXdpbGRjYXJkLXBhdHRlcm5zLTQxMCI+c2VjdGlvbiBuYW1lIHdpbGRjYXJkIHBhdHRlcm5zPC9hPjogPGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbCNJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcyI+SW5wdXQgU2VjdGlvbiBXaWxkY2FyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LXNlY3Rpb24tc2l6ZS01NjIiPnNlY3Rpb24gc2l6ZTwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUmVnaW9uLmh0bWwjaW5kZXgtc2VjdGlvbl8wMDJjLWFzc2lnbmluZy10by1tZW1vcnktcmVnaW9uLTQ2NCI+c2VjdGlvbiwgYXNzaWduaW5nIHRvIG1lbW9yeSByZWdpb248L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1SZWdpb24uaHRtbCNPdXRwdXQtU2VjdGlvbi1SZWdpb24iPk91dHB1dCBTZWN0aW9uIFJlZ2lvbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLVBoZHIuaHRtbCNpbmRleC1zZWN0aW9uXzAwMmMtYXNzaWduaW5nLXRvLXByb2dyYW0taGVhZGVyLTQ2NyI+c2VjdGlvbiwgYXNzaWduaW5nIHRvIHByb2dyYW0gaGVhZGVyPC9hPjogPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUGhkci5odG1sI091dHB1dC1TZWN0aW9uLVBoZHIiPk91dHB1dCBTZWN0aW9uIFBoZHI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTRUNUSU9OUy5odG1sI2luZGV4LVNFQ1RJT05TLTM5OSI+PGNvZGU+U0VDVElPTlM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyI+U0VDVElPTlM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nLmh0bWwjaW5kZXgtc2VjdGlvbnNfMDAyYy1kaXNjYXJkaW5nLTQ0MSI+c2VjdGlvbnMsIGRpc2NhcmRpbmc8L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZyI+T3V0cHV0IFNlY3Rpb24gRGlzY2FyZGluZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zZWdtZW50LW9yaWdpbnNfMDAyYy1jbWQtbGluZS0yMzgiPnNlZ21lbnQgb3JpZ2lucywgY21kIGxpbmU8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtU0VHTUVOVF8wMDVmU1RBUlRfMDAyOF8wMDQwdmFyXzAwN2JzZWdtZW50XzAwN2RfMDAyYy1fMDA0MHZhcl8wMDdiZGVmYXVsdF8wMDdkXzAwMjktNTYwIj48Y29kZT5TRUdNRU5UX1NUQVJUKDwvY29kZT48dmFyPnNlZ21lbnQ8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmRlZmF1bHQ8L3Zhcj48Y29kZT4pPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUEhEUlMuaHRtbCNpbmRleC1zZWdtZW50c18wMDJjLUVMRi00OTAiPnNlZ21lbnRzLCBFTEY8L2E+OiA8YSBocmVmPSJQSERSUy5odG1sI1BIRFJTIj5QSERSUzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zaGFyZWQtbGlicmFyaWVzLTIyMyI+c2hhcmVkIGxpYnJhcmllczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI2luZGV4LVNIT1JUXzAwMjhfMDA0MHZhcl8wMDdiZXhwcmVzc2lvbl8wMDdkXzAwMjktNDI3Ij48Y29kZT5TSE9SVCg8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EYXRhLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGF0YSI+T3V0cHV0IFNlY3Rpb24gRGF0YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjaW5kZXgtU0laRU9GXzAwMjhfMDA0MHZhcl8wMDdic2VjdGlvbl8wMDdkXzAwMjktNTYxIj48Y29kZT5TSVpFT0YoPC9jb2RlPjx2YXI+c2VjdGlvbjwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPjogPGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+QnVpbHRpbiBGdW5jdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LVNJWkVPRl8wMDVmSEVBREVSUy01NjMiPjxjb2RlPlNJWkVPRl9IRUFERVJTPC9jb2RlPjwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNpbmRleC1zbWFsbC1jb21tb24tc3ltYm9scy00MTkiPnNtYWxsIGNvbW1vbiBzeW1ib2xzPC9hPjogPGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNJbnB1dC1TZWN0aW9uLUNvbW1vbiI+SW5wdXQgU2VjdGlvbiBDb21tb248L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI2luZGV4LVNPUlQtNDE0Ij5TT1JUPC9hPjogPGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbCNJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcyI+SW5wdXQgU2VjdGlvbiBXaWxkY2FyZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI2luZGV4LVNPUlRfMDA1ZkJZXzAwNWZBTElHTk1FTlQtNDEyIj5TT1JUX0JZX0FMSUdOTUVOVDwvYT46IDxhIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMiPklucHV0IFNlY3Rpb24gV2lsZGNhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbCNpbmRleC1TT1JUXzAwNWZCWV8wMDVmSU5JVF8wMDVmUFJJT1JJVFktNDEzIj5TT1JUX0JZX0lOSVRfUFJJT1JJVFk8L2E+OiA8YSBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI0lucHV0LVNlY3Rpb24tV2lsZGNhcmRzIj5JbnB1dCBTZWN0aW9uIFdpbGRjYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjaW5kZXgtU09SVF8wMDVmQllfMDA1Zk5BTUUtNDExIj5TT1JUX0JZX05BTUU8L2E+OiA8YSBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI0lucHV0LVNlY3Rpb24tV2lsZGNhcmRzIj5JbnB1dCBTZWN0aW9uIFdpbGRjYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjaW5kZXgtU09SVF8wMDVmTk9ORS00MTUiPlNPUlRfTk9ORTwvYT46IDxhIGhyZWY9IklucHV0LVNlY3Rpb24tV2lsZGNhcmRzLmh0bWwjSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMiPklucHV0IFNlY3Rpb24gV2lsZGNhcmRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLUVMRi5odG1sI2luZGV4LVNQVS02NzYiPlNQVTwvYT46IDxhIGhyZWY9IlNQVS1FTEYuaHRtbCNTUFUtRUxGIj5TUFUgRUxGPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLUVMRi5odG1sI2luZGV4LVNQVS1FTEYtb3B0aW9ucy02NjUiPlNQVSBFTEYgb3B0aW9uczwvYT46IDxhIGhyZWY9IlNQVS1FTEYuaHRtbCNTUFUtRUxGIj5TUFUgRUxGPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU1BVLUVMRi5odG1sI2luZGV4LVNQVS1leHRyYS1vdmVybGF5LXN0dWJzLTY3MiI+U1BVIGV4dHJhIG92ZXJsYXkgc3R1YnM8L2E+OiA8YSBocmVmPSJTUFUtRUxGLmh0bWwjU1BVLUVMRiI+U1BVIEVMRjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlNQVS1FTEYuaHRtbCNpbmRleC1TUFUtbG9jYWwtc3RvcmUtc2l6ZS02NzQiPlNQVSBsb2NhbCBzdG9yZSBzaXplPC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtRUxGLmh0bWwjaW5kZXgtU1BVLW92ZXJsYXktc3R1Yi1zeW1ib2xzLTY3MCI+U1BVIG92ZXJsYXkgc3R1YiBzeW1ib2xzPC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtRUxGLmh0bWwjaW5kZXgtU1BVLW92ZXJsYXlzLTY2OCI+U1BVIG92ZXJsYXlzPC9hPjogPGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPlNQVSBFTEY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTUFUtRUxGLmh0bWwjaW5kZXgtU1BVLXBsdWdpbnMtNjY2Ij5TUFUgcGx1Z2luczwvYT46IDxhIGhyZWY9IlNQVS1FTEYuaHRtbCNTUFUtRUxGIj5TUFUgRUxGPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI2luZGV4LVNRVUFEXzAwMjhfMDA0MHZhcl8wMDdiZXhwcmVzc2lvbl8wMDdkXzAwMjktNDMwIj48Y29kZT5TUVVBRCg8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EYXRhLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGF0YSI+T3V0cHV0IFNlY3Rpb24gRGF0YTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zdGFjay1zaXplLTMxNiI+c3RhY2sgc2l6ZTwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LXN0YW5kYXJkLVVuaXgtc3lzdGVtLTUiPnN0YW5kYXJkIFVuaXggc3lzdGVtPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJFbnRyeS1Qb2ludC5odG1sI2luZGV4LXN0YXJ0LW9mLWV4ZWN1dGlvbi0zNDkiPnN0YXJ0IG9mIGV4ZWN1dGlvbjwvYT46IDxhIGhyZWY9IkVudHJ5LVBvaW50Lmh0bWwjRW50cnktUG9pbnQiPkVudHJ5IFBvaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI2luZGV4LVNUQVJUVVBfMDAyOF8wMDQwdmFyXzAwN2JmaWxlbmFtZV8wMDdkXzAwMjktMzY4Ij48Y29kZT5TVEFSVFVQKDwvY29kZT48dmFyPmZpbGVuYW1lPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjRmlsZS1Db21tYW5kcyI+RmlsZSBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zdHJpcC1hbGwtc3ltYm9scy05NyI+c3RyaXAgYWxsIHN5bWJvbHM8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zdHJpcC1kZWJ1Z2dlci1zeW1ib2xzLTEwMCI+c3RyaXAgZGVidWdnZXIgc3ltYm9sczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LXN0cmlwcGluZy1hbGwtYnV0LXNvbWUtc3ltYm9scy0yMTQiPnN0cmlwcGluZyBhbGwgYnV0IHNvbWUgc3ltYm9sczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQVJNLmh0bWwjaW5kZXgtU1RVQl8wMDVmR1JPVVBfMDA1ZlNJWkUtNjE1Ij5TVFVCX0dST1VQX1NJWkU8L2E+OiA8YSBocmVmPSJBUk0uaHRtbCNBUk0iPkFSTTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCNpbmRleC1TVUJBTElHTl8wMDI4XzAwNDB2YXJfMDA3YnN1YnNlY3Rpb25fMDA1ZmFsaWduXzAwN2RfMDAyOS00NTciPjxjb2RlPlNVQkFMSUdOKDwvY29kZT48dmFyPnN1YnNlY3Rpb25fYWxpZ248L3Zhcj48Y29kZT4pPC9jb2RlPjwvYT46IDxhIGhyZWY9IkZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCNGb3JjZWQtSW5wdXQtQWxpZ25tZW50Ij5Gb3JjZWQgSW5wdXQgQWxpZ25tZW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQ29uc3RhbnRzLmh0bWwjaW5kZXgtc3VmZml4ZXMtZm9yLWludGVnZXJzLTUwNCI+c3VmZml4ZXMgZm9yIGludGVnZXJzPC9hPjogPGEgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIj5Db25zdGFudHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LXN5bWJvbC1kZWZhdWx0cy01NTEiPnN5bWJvbCBkZWZhdWx0czwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNpbmRleC1zeW1ib2wtZGVmaW5pdGlvbl8wMDJjLXNjcmlwdHMtMzk0Ij5zeW1ib2wgZGVmaW5pdGlvbiwgc2NyaXB0czwvYT46IDxhIGhyZWY9IkFzc2lnbm1lbnRzLmh0bWwjQXNzaWdubWVudHMiPkFzc2lnbm1lbnRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3ltYm9scy5odG1sI2luZGV4LXN5bWJvbC1uYW1lcy01MTAiPnN5bWJvbCBuYW1lczwvYT46IDxhIGhyZWY9IlN5bWJvbHMuaHRtbCNTeW1ib2xzIj5TeW1ib2xzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LXN5bWJvbC10cmFjaW5nLTEyOCI+c3ltYm9sIHRyYWNpbmc8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZFUlNJT04uaHRtbCNpbmRleC1zeW1ib2wtdmVyc2lvbnMtNDk0Ij5zeW1ib2wgdmVyc2lvbnM8L2E+OiA8YSBocmVmPSJWRVJTSU9OLmh0bWwjVkVSU0lPTiI+VkVSU0lPTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zeW1ib2xfMDAyZG9ubHktaW5wdXQtOTQiPnN5bWJvbC1vbmx5IGlucHV0PC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTeW1ib2xpYy1Db25zdGFudHMuaHRtbCNpbmRleC1zeW1ib2xpYy1jb25zdGFudHMtNTA2Ij5zeW1ib2xpYyBjb25zdGFudHM8L2E+OiA8YSBocmVmPSJTeW1ib2xpYy1Db25zdGFudHMuaHRtbCNTeW1ib2xpYy1Db25zdGFudHMiPlN5bWJvbGljIENvbnN0YW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zeW1ib2xzXzAwMmMtZnJvbS1jb21tYW5kLWxpbmUtMTYyIj5zeW1ib2xzLCBmcm9tIGNvbW1hbmQgbGluZTwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iRXhwcmVzc2lvbi1TZWN0aW9uLmh0bWwjaW5kZXgtc3ltYm9sc18wMDJjLXJlbG9jYXRhYmxlLWFuZC1hYnNvbHV0ZS01MzIiPnN5bWJvbHMsIHJlbG9jYXRhYmxlIGFuZCBhYnNvbHV0ZTwvYT46IDxhIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI0V4cHJlc3Npb24tU2VjdGlvbiI+RXhwcmVzc2lvbiBTZWN0aW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LXN5bWJvbHNfMDAyYy1yZXRhaW5pbmctc2VsZWN0aXZlbHktMjE1Ij5zeW1ib2xzLCByZXRhaW5pbmcgc2VsZWN0aXZlbHk8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC1zeW50aGVzaXppbmctbGlua2VyLTIxMCI+c3ludGhlc2l6aW5nIGxpbmtlcjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSDhfMDAyZjMwMC5odG1sI2luZGV4LXN5bnRoZXNpemluZy1vbi1IOF8wMDJmMzAwLTU3MSI+c3ludGhlc2l6aW5nIG9uIEg4LzMwMDwvYT46IDxhIGhyZWY9Ikg4XzAwMmYzMDAuaHRtbCNIOF8wMDJmMzAwIj5IOC8zMDA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJGb3JtYXQtQ29tbWFuZHMuaHRtbCNpbmRleC1UQVJHRVRfMDAyOF8wMDQwdmFyXzAwN2JiZmRuYW1lXzAwN2RfMDAyOS0zNzIiPjxjb2RlPlRBUkdFVCg8L2NvZGU+PHZhcj5iZmRuYW1lPC92YXI+PGNvZGU+KTwvY29kZT48L2E+OiA8YSBocmVmPSJGb3JtYXQtQ29tbWFuZHMuaHRtbCNGb3JtYXQtQ29tbWFuZHMiPkZvcm1hdCBDb21tYW5kczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LVRBUkdFVDEtNTkzIj5UQVJHRVQxPC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC1UQVJHRVQyLTU5NiI+VEFSR0VUMjwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LXRleHQtc2VnbWVudC1vcmlnaW5fMDAyYy1jbWQtbGluZS0yNDAiPnRleHQgc2VnbWVudCBvcmlnaW4sIGNtZCBsaW5lPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC10aHVtYi1lbnRyeS1wb2ludC01ODYiPnRodW1iIGVudHJ5IHBvaW50PC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJUSS1DT0ZGLmh0bWwjaW5kZXgtVEktQ09GRi12ZXJzaW9ucy02ODAiPlRJIENPRkYgdmVyc2lvbnM8L2E+OiA8YSBocmVmPSJUSS1DT0ZGLmh0bWwjVEktQ09GRiI+VEkgQ09GRjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC10cmFkaXRpb25hbC1mb3JtYXQtMjMyIj50cmFkaXRpb25hbCBmb3JtYXQ8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZjY4SEMxMi5odG1sI2luZGV4LXRyYW1wb2xpbmUtZ2VuZXJhdGlvbi1vbi1NNjhIQzExLTU4MiI+dHJhbXBvbGluZSBnZW5lcmF0aW9uIG9uIE02OEhDMTE8L2E+OiA8YSBocmVmPSJNNjhIQzExXzAwMmY2OEhDMTIuaHRtbCNNNjhIQzExXzAwMmY2OEhDMTIiPk02OEhDMTEvNjhIQzEyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJmNjhIQzEyLmh0bWwjaW5kZXgtdHJhbXBvbGluZS1nZW5lcmF0aW9uLW9uLU02OEhDMTItNTgzIj50cmFtcG9saW5lIGdlbmVyYXRpb24gb24gTTY4SEMxMjwvYT46IDxhIGhyZWY9Ik02OEhDMTFfMDAyZjY4SEMxMi5odG1sI002OEhDMTFfMDAyZjY4SEMxMiI+TTY4SEMxMS82OEhDMTI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJCdWlsdGluLUZ1bmN0aW9ucy5odG1sI2luZGV4LXVuYWxsb2NhdGVkLWFkZHJlc3NfMDAyYy1uZXh0LTU1OCI+dW5hbGxvY2F0ZWQgYWRkcmVzcywgbmV4dDwvYT46IDxhIGhyZWY9IkJ1aWx0aW4tRnVuY3Rpb25zLmh0bWwjQnVpbHRpbi1GdW5jdGlvbnMiPkJ1aWx0aW4gRnVuY3Rpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LXVuZGVmaW5lZC1zeW1ib2wtMTEyIj51bmRlZmluZWQgc3ltYm9sPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjaW5kZXgtdW5kZWZpbmVkLXN5bWJvbC1pbi1saW5rZXItc2NyaXB0LTM4MCI+dW5kZWZpbmVkIHN5bWJvbCBpbiBsaW5rZXIgc2NyaXB0PC9hPjogPGEgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI01pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPk1pc2NlbGxhbmVvdXMgQ29tbWFuZHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtdW5kZWZpbmVkLXN5bWJvbHNfMDAyYy13YXJuaW5ncy1vbi0yNTUiPnVuZGVmaW5lZCBzeW1ib2xzLCB3YXJuaW5ncyBvbjwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNpbmRleC11bmluaXRpYWxpemVkLWRhdGEtcGxhY2VtZW50LTQxNyI+dW5pbml0aWFsaXplZCBkYXRhIHBsYWNlbWVudDwvYT46IDxhIGhyZWY9IklucHV0LVNlY3Rpb24tQ29tbW9uLmh0bWwjSW5wdXQtU2VjdGlvbi1Db21tb24iPklucHV0IFNlY3Rpb24gQ29tbW9uPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI2luZGV4LXVuc3BlY2lmaWVkLW1lbW9yeS00MzMiPnVuc3BlY2lmaWVkIG1lbW9yeTwvYT46IDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURhdGEuaHRtbCNPdXRwdXQtU2VjdGlvbi1EYXRhIj5PdXRwdXQgU2VjdGlvbiBEYXRhPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LXVzYWdlLTE4MiI+dXNhZ2U8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI2luZGV4LVVTRV8wMDVmQkxYLTYwMiI+VVNFX0JMWDwvYT46IDxhIGhyZWY9IkFSTS5odG1sI0FSTSI+QVJNPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV0lOMzIuaHRtbCNpbmRleC11c2luZy1hLURFRi1maWxlLTY4NSI+dXNpbmcgYSBERUYgZmlsZTwvYT46IDxhIGhyZWY9IldJTjMyLmh0bWwjV0lOMzIiPldJTjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iV0lOMzIuaHRtbCNpbmRleC11c2luZy1hdXRvXzAwMmRleHBvcnQtZnVuY3Rpb25hbGl0eS02ODQiPnVzaW5nIGF1dG8tZXhwb3J0IGZ1bmN0aW9uYWxpdHk8L2E+OiA8YSBocmVmPSJXSU4zMi5odG1sI1dJTjMyIj5XSU4zMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IldJTjMyLmh0bWwjaW5kZXgtVXNpbmctZGVjb3JhdGlvbnMtNjg3Ij5Vc2luZyBkZWNvcmF0aW9uczwvYT46IDxhIGhyZWY9IldJTjMyLmh0bWwjV0lOMzIiPldJTjMyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNpbmRleC12YXJpYWJsZXNfMDAyYy1kZWZpbmluZy0zOTUiPnZhcmlhYmxlcywgZGVmaW5pbmc8L2E+OiA8YSBocmVmPSJBc3NpZ25tZW50cy5odG1sI0Fzc2lnbm1lbnRzIj5Bc3NpZ25tZW50czwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC12ZXJib3NlXzAwNWJfMDAzZF8wMDQwdmFyXzAwN2JOVU1CRVJfMDA3ZF8wMDVkLTI0NSI+dmVyYm9zZVs9PHZhcj5OVU1CRVI8L3Zhcj5dPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtdmVyc2lvbi0xMTkiPnZlcnNpb248L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlZFUlNJT04uaHRtbCNpbmRleC12ZXJzaW9uLXNjcmlwdC00OTUiPnZlcnNpb24gc2NyaXB0PC9hPjogPGEgaHJlZj0iVkVSU0lPTi5odG1sI1ZFUlNJT04iPlZFUlNJT048L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtdmVyc2lvbi1zY3JpcHRfMDAyYy1zeW1ib2wtdmVyc2lvbnMtMjQ3Ij52ZXJzaW9uIHNjcmlwdCwgc3ltYm9sIHZlcnNpb25zPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJWRVJTSU9OLmh0bWwjaW5kZXgtVkVSU0lPTi1fMDA0MF8wMDdic2NyaXB0LXRleHRfMDA0MF8wMDdkLTQ5MyI+PGNvZGU+VkVSU0lPTiB7c2NyaXB0IHRleHR9PC9jb2RlPjwvYT46IDxhIGhyZWY9IlZFUlNJT04uaHRtbCNWRVJTSU9OIj5WRVJTSU9OPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iVkVSU0lPTi5odG1sI2luZGV4LXZlcnNpb25zLW9mLXN5bWJvbHMtNDk2Ij52ZXJzaW9ucyBvZiBzeW1ib2xzPC9hPjogPGEgaHJlZj0iVkVSU0lPTi5odG1sI1ZFUlNJT04iPlZFUlNJT048L2E+PC9saT4KKzxsaT48YSBocmVmPSJBUk0uaHRtbCNpbmRleC1WRlAxMV8wMDVmREVOT1JNXzAwNWZGSVgtNjA0Ij5WRlAxMV9ERU5PUk1fRklYPC9hPjogPGEgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+PC9saT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjaW5kZXgtd2FybmluZ3NfMDAyYy1vbi1jb21iaW5pbmctc3ltYm9scy0yNDkiPndhcm5pbmdzLCBvbiBjb21iaW5pbmcgc3ltYm9sczwvYT46IDxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI2luZGV4LXdhcm5pbmdzXzAwMmMtb24tc2VjdGlvbi1hbGlnbm1lbnQtMjU3Ij53YXJuaW5ncywgb24gc2VjdGlvbiBhbGlnbm1lbnQ8L2E+OiA8YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNpbmRleC13YXJuaW5nc18wMDJjLW9uLXVuZGVmaW5lZC1zeW1ib2xzLTI1NCI+d2FybmluZ3MsIG9uIHVuZGVmaW5lZCBzeW1ib2xzPC9hPjogPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJXSU4zMi5odG1sI2luZGV4LXdlYWstZXh0ZXJuYWxzLTY5MSI+d2VhayBleHRlcm5hbHM8L2E+OiA8YSBocmVmPSJXSU4zMi5odG1sI1dJTjMyIj5XSU4zMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjaW5kZXgtd2hhdC1pcy10aGlzXzAwM2YtMiI+d2hhdCBpcyB0aGlzPzwvYT46IDxhIGhyZWY9Ik92ZXJ2aWV3Lmh0bWwjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1XaWxkY2FyZHMuaHRtbCNpbmRleC13aWxkY2FyZC1maWxlLW5hbWUtcGF0dGVybnMtNDA4Ij53aWxkY2FyZCBmaWxlIG5hbWUgcGF0dGVybnM8L2E+OiA8YSBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI0lucHV0LVNlY3Rpb24tV2lsZGNhcmRzIj5JbnB1dCBTZWN0aW9uIFdpbGRjYXJkczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS5odG1sI2luZGV4LVh0ZW5zYS1vcHRpb25zLTY5NiI+WHRlbnNhIG9wdGlvbnM8L2E+OiA8YSBocmVmPSJYdGVuc2EuaHRtbCNYdGVuc2EiPlh0ZW5zYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ilh0ZW5zYS5odG1sI2luZGV4LVh0ZW5zYS1wcm9jZXNzb3JzLTY5MyI+WHRlbnNhIHByb2Nlc3NvcnM8L2E+OiA8YSBocmVmPSJYdGVuc2EuaHRtbCNYdGVuc2EiPlh0ZW5zYTwvYT48L2xpPgorICAgPC91bD48L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9Mb2NhdGlvbi1Db3VudGVyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9Mb2NhdGlvbi1Db3VudGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwYWRkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL0xvY2F0aW9uLUNvdW50ZXIuaHRtbApAQCAtMCwwICsxLDE3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TG9jYXRpb24gQ291bnRlciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyIgdGl0bGU9IkV4cHJlc3Npb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3JwaGFuLVNlY3Rpb25zLmh0bWwjT3JwaGFuLVNlY3Rpb25zIiB0aXRsZT0iT3JwaGFuIFNlY3Rpb25zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3BlcmF0b3JzLmh0bWwjT3BlcmF0b3JzIiB0aXRsZT0iT3BlcmF0b3JzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMb2NhdGlvbi1Db3VudGVyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik9wZXJhdG9ycy5odG1sI09wZXJhdG9ycyI+T3BlcmF0b3JzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3JwaGFuLVNlY3Rpb25zLmh0bWwjT3JwaGFuLVNlY3Rpb25zIj5PcnBoYW4gU2VjdGlvbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIj5FeHByZXNzaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTAuNSBUaGUgTG9jYXRpb24gQ291bnRlcjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJlLTUxNSI+PC9hPjxhIG5hbWU9ImluZGV4LWRvdC01MTYiPjwvYT48YSBuYW1lPSJpbmRleC1sb2NhdGlvbi1jb3VudGVyLTUxNyI+PC9hPjxhIG5hbWU9ImluZGV4LWN1cnJlbnQtb3V0cHV0LWxvY2F0aW9uLTUxOCI+PC9hPlRoZSBzcGVjaWFsIGxpbmtlciB2YXJpYWJsZSA8ZGZuPmRvdDwvZGZuPiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWx3YXlzIGNvbnRhaW5zIHRoZQorY3VycmVudCBvdXRwdXQgbG9jYXRpb24gY291bnRlci4gIFNpbmNlIHRoZSA8Y29kZT4uPC9jb2RlPiBhbHdheXMgcmVmZXJzIHRvIGEKK2xvY2F0aW9uIGluIGFuIG91dHB1dCBzZWN0aW9uLCBpdCBtYXkgb25seSBhcHBlYXIgaW4gYW4gZXhwcmVzc2lvbgord2l0aGluIGEgPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmQuICBUaGUgPGNvZGU+LjwvY29kZT4gc3ltYm9sIG1heSBhcHBlYXIKK2FueXdoZXJlIHRoYXQgYW4gb3JkaW5hcnkgc3ltYm9sIGlzIGFsbG93ZWQgaW4gYW4gZXhwcmVzc2lvbi4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtaG9sZXMtNTE5Ij48L2E+QXNzaWduaW5nIGEgdmFsdWUgdG8gPGNvZGU+LjwvY29kZT4gd2lsbCBjYXVzZSB0aGUgbG9jYXRpb24gY291bnRlciB0byBiZQorbW92ZWQuICBUaGlzIG1heSBiZSB1c2VkIHRvIGNyZWF0ZSBob2xlcyBpbiB0aGUgb3V0cHV0IHNlY3Rpb24uICBUaGUKK2xvY2F0aW9uIGNvdW50ZXIgbWF5IG5vdCBiZSBtb3ZlZCBiYWNrd2FyZHMgaW5zaWRlIGFuIG91dHB1dCBzZWN0aW9uLAorYW5kIG1heSBub3QgYmUgbW92ZWQgYmFja3dhcmRzIG91dHNpZGUgb2YgYW4gb3V0cHV0IHNlY3Rpb24gaWYgc28KK2RvaW5nIGNyZWF0ZXMgYXJlYXMgd2l0aCBvdmVybGFwcGluZyBMTUFzLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMKKyAgICAgeworICAgICAgIG91dHB1dCA6CisgICAgICAgICB7CisgICAgICAgICAgIGZpbGUxKC50ZXh0KQorICAgICAgICAgICAuID0gLiArIDEwMDA7CisgICAgICAgICAgIGZpbGUyKC50ZXh0KQorICAgICAgICAgICAuICs9IDEwMDA7CisgICAgICAgICAgIGZpbGUzKC50ZXh0KQorICAgICAgICAgfSA9IDB4MTIzNDU2Nzg7CisgICAgIH0KKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5JbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiBmcm9tIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5maWxlMTwvc3Bhbj48L3NhbXA+IGlzCitsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dCBzZWN0aW9uICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b3V0cHV0PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSXQgaXMKK2ZvbGxvd2VkIGJ5IGEgMTAwMCBieXRlIGdhcC4gIFRoZW4gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiBmcm9tCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZmlsZTI8L3NwYW4+PC9zYW1wPiBhcHBlYXJzLCBhbHNvIHdpdGggYSAxMDAwIGJ5dGUgZ2FwIGZvbGxvd2luZyBiZWZvcmUgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24gZnJvbSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+ZmlsZTM8L3NwYW4+PC9zYW1wPi4gIFRoZSBub3RhdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPj0gMHgxMjM0NTY3ODwvc3Bhbj48L3NhbXA+JnJzcXVvOworc3BlY2lmaWVzIHdoYXQgZGF0YSB0byB3cml0ZSBpbiB0aGUgZ2FwcyAoc2VlIDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUZpbGwuaHRtbCNPdXRwdXQtU2VjdGlvbi1GaWxsIj5PdXRwdXQgU2VjdGlvbiBGaWxsPC9hPikuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWRvdC1pbnNpZGUtc2VjdGlvbnMtNTIwIj48L2E+Tm90ZTogPGNvZGU+LjwvY29kZT4gYWN0dWFsbHkgcmVmZXJzIHRvIHRoZSBieXRlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUKK2N1cnJlbnQgY29udGFpbmluZyBvYmplY3QuICBOb3JtYWxseSB0aGlzIGlzIHRoZSA8Y29kZT5TRUNUSU9OUzwvY29kZT4KK3N0YXRlbWVudCwgd2hvc2Ugc3RhcnQgYWRkcmVzcyBpcyAwLCBoZW5jZSA8Y29kZT4uPC9jb2RlPiBjYW4gYmUgdXNlZCBhcyBhbgorYWJzb2x1dGUgYWRkcmVzcy4gIElmIDxjb2RlPi48L2NvZGU+IGlzIHVzZWQgaW5zaWRlIGEgc2VjdGlvbiBkZXNjcmlwdGlvbgoraG93ZXZlciwgaXQgcmVmZXJzIHRvIHRoZSBieXRlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGF0IHNlY3Rpb24sCitub3QgYW4gYWJzb2x1dGUgYWRkcmVzcy4gIFRodXMgaW4gYSBzY3JpcHQgbGlrZSB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMKKyAgICAgeworICAgICAgICAgLiA9IDB4MTAwCisgICAgICAgICAudGV4dDogeworICAgICAgICAgICAqKC50ZXh0KQorICAgICAgICAgICAuID0gMHgyMDAKKyAgICAgICAgIH0KKyAgICAgICAgIC4gPSAweDUwMAorICAgICAgICAgLmRhdGE6IHsKKyAgICAgICAgICAgKiguZGF0YSkKKyAgICAgICAgICAgLiArPSAweDYwMAorICAgICAgICAgfQorICAgICB9Cis8L3ByZT4KKyAgIDxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24gd2lsbCBiZSBhc3NpZ25lZCBhIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgMHgxMDAKK2FuZCBhIHNpemUgb2YgZXhhY3RseSAweDIwMCBieXRlcywgZXZlbiBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEgaW4KK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlucHV0IHNlY3Rpb25zIHRvIGZpbGwgdGhpcyBhcmVhLiAgKElmIHRoZXJlIGlzIHRvbworbXVjaCBkYXRhLCBhbiBlcnJvciB3aWxsIGJlIHByb2R1Y2VkIGJlY2F1c2UgdGhpcyB3b3VsZCBiZSBhbiBhdHRlbXB0IHRvCittb3ZlIDxjb2RlPi48L2NvZGU+IGJhY2t3YXJkcykuICBUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uIHdpbGwgc3RhcnQgYXQgMHg1MDAKK2FuZCBpdCB3aWxsIGhhdmUgYW4gZXh0cmEgMHg2MDAgYnl0ZXMgd29ydGggb2Ygc3BhY2UgYWZ0ZXIgdGhlIGVuZCBvZgordGhlIHZhbHVlcyBmcm9tIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlucHV0IHNlY3Rpb25zIGFuZCBiZWZvcmUgdGhlIGVuZCBvZgordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3V0cHV0IHNlY3Rpb24gaXRzZWxmLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1kb3Qtb3V0c2lkZS1zZWN0aW9ucy01MjEiPjwvYT5TZXR0aW5nIHN5bWJvbHMgdG8gdGhlIHZhbHVlIG9mIHRoZSBsb2NhdGlvbiBjb3VudGVyIG91dHNpZGUgb2YgYW4KK291dHB1dCBzZWN0aW9uIHN0YXRlbWVudCBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgdmFsdWVzIGlmIHRoZSBsaW5rZXIKK25lZWRzIHRvIHBsYWNlIG9ycGhhbiBzZWN0aW9ucy4gIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMKKyAgICAgeworICAgICAgICAgc3RhcnRfb2ZfdGV4dCA9IC4gOworICAgICAgICAgLnRleHQ6IHsgKigudGV4dCkgfQorICAgICAgICAgZW5kX29mX3RleHQgPSAuIDsKKyAgICAgCisgICAgICAgICBzdGFydF9vZl9kYXRhID0gLiA7CisgICAgICAgICAuZGF0YTogeyAqKC5kYXRhKSB9CisgICAgICAgICBlbmRfb2ZfZGF0YSA9IC4gOworICAgICB9Cis8L3ByZT4KKyAgIDxwPklmIHRoZSBsaW5rZXIgbmVlZHMgdG8gcGxhY2Ugc29tZSBpbnB1dCBzZWN0aW9uLCBlLmcuIDxjb2RlPi5yb2RhdGE8L2NvZGU+LAorbm90IG1lbnRpb25lZCBpbiB0aGUgc2NyaXB0LCBpdCBtaWdodCBjaG9vc2UgdG8gcGxhY2UgdGhhdCBzZWN0aW9uCitiZXR3ZWVuIDxjb2RlPi50ZXh0PC9jb2RlPiBhbmQgPGNvZGU+LmRhdGE8L2NvZGU+LiAgWW91IG1pZ2h0IHRoaW5rIHRoZSBsaW5rZXIKK3Nob3VsZCBwbGFjZSA8Y29kZT4ucm9kYXRhPC9jb2RlPiBvbiB0aGUgYmxhbmsgbGluZSBpbiB0aGUgYWJvdmUgc2NyaXB0LCBidXQKK2JsYW5rIGxpbmVzIGFyZSBvZiBubyBwYXJ0aWN1bGFyIHNpZ25pZmljYW5jZSB0byB0aGUgbGlua2VyLiAgQXMgd2VsbCwKK3RoZSBsaW5rZXIgZG9lc24ndCBhc3NvY2lhdGUgdGhlIGFib3ZlIHN5bWJvbCBuYW1lcyB3aXRoIHRoZWlyCitzZWN0aW9ucy4gIEluc3RlYWQsIGl0IGFzc3VtZXMgdGhhdCBhbGwgYXNzaWdubWVudHMgb3Igb3RoZXIKK3N0YXRlbWVudHMgYmVsb25nIHRvIHRoZSBwcmV2aW91cyBvdXRwdXQgc2VjdGlvbiwgZXhjZXB0IGZvciB0aGUKK3NwZWNpYWwgY2FzZSBvZiBhbiBhc3NpZ25tZW50IHRvIDxjb2RlPi48L2NvZGU+LiAgSS5lLiwgdGhlIGxpbmtlciB3aWxsCitwbGFjZSB0aGUgb3JwaGFuIDxjb2RlPi5yb2RhdGE8L2NvZGU+IHNlY3Rpb24gYXMgaWYgdGhlIHNjcmlwdCB3YXMgd3JpdHRlbgorYXMgZm9sbG93czoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFNFQ1RJT05TCisgICAgIHsKKyAgICAgICAgIHN0YXJ0X29mX3RleHQgPSAuIDsKKyAgICAgICAgIC50ZXh0OiB7ICooLnRleHQpIH0KKyAgICAgICAgIGVuZF9vZl90ZXh0ID0gLiA7CisgICAgIAorICAgICAgICAgc3RhcnRfb2ZfZGF0YSA9IC4gOworICAgICAgICAgLnJvZGF0YTogeyAqKC5yb2RhdGEpIH0KKyAgICAgICAgIC5kYXRhOiB7ICooLmRhdGEpIH0KKyAgICAgICAgIGVuZF9vZl9kYXRhID0gLiA7CisgICAgIH0KKzwvcHJlPgorICAgPHA+VGhpcyBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgc2NyaXB0IGF1dGhvcidzIGludGVudGlvbiBmb3IgdGhlIHZhbHVlIG9mCis8Y29kZT5zdGFydF9vZl9kYXRhPC9jb2RlPi4gIE9uZSB3YXkgdG8gaW5mbHVlbmNlIHRoZSBvcnBoYW4gc2VjdGlvbgorcGxhY2VtZW50IGlzIHRvIGFzc2lnbiB0aGUgbG9jYXRpb24gY291bnRlciB0byBpdHNlbGYsIGFzIHRoZSBsaW5rZXIKK2Fzc3VtZXMgdGhhdCBhbiBhc3NpZ25tZW50IHRvIDxjb2RlPi48L2NvZGU+IGlzIHNldHRpbmcgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YKK2EgZm9sbG93aW5nIG91dHB1dCBzZWN0aW9uIGFuZCB0aHVzIHNob3VsZCBiZSBncm91cGVkIHdpdGggdGhhdAorc2VjdGlvbi4gIFNvIHlvdSBjb3VsZCB3cml0ZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFNFQ1RJT05TCisgICAgIHsKKyAgICAgICAgIHN0YXJ0X29mX3RleHQgPSAuIDsKKyAgICAgICAgIC50ZXh0OiB7ICooLnRleHQpIH0KKyAgICAgICAgIGVuZF9vZl90ZXh0ID0gLiA7CisgICAgIAorICAgICAgICAgLiA9IC4gOworICAgICAgICAgc3RhcnRfb2ZfZGF0YSA9IC4gOworICAgICAgICAgLmRhdGE6IHsgKiguZGF0YSkgfQorICAgICAgICAgZW5kX29mX2RhdGEgPSAuIDsKKyAgICAgfQorPC9wcmU+CisgICA8cD5Ob3csIHRoZSBvcnBoYW4gPGNvZGU+LnJvZGF0YTwvY29kZT4gc2VjdGlvbiB3aWxsIGJlIHBsYWNlZCBiZXR3ZWVuCis8Y29kZT5lbmRfb2ZfdGV4dDwvY29kZT4gYW5kIDxjb2RlPnN0YXJ0X29mX2RhdGE8L2NvZGU+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9NNjhIQzExXzAwMmY2OEhDMTIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL002OEhDMTFfMDAyZjY4SEMxMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjQ5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9NNjhIQzExXzAwMmY2OEhDMTIuaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NNjhIQzExLzY4SEMxMiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaTk2MC5odG1sI2k5NjAiIHRpdGxlPSJpOTYwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQVJNLmh0bWwjQVJNIiB0aXRsZT0iQVJNIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNNjhIQzExJTJmNjhIQzEyIj48L2E+Cis8YSBuYW1lPSJNNjhIQzExXzAwMmY2OEhDMTIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpOTYwLmh0bWwjaTk2MCI+aTk2MDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiPk1hY2hpbmUgRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4zIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgTW90b3JvbGEgNjhIQzExIGFuZCA2OEhDMTIgZmFtaWxpZXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1NNjhIQzExLWFuZC02OEhDMTItc3VwcG9ydC01ODAiPjwvYT4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj40LjMuMSBMaW5rZXIgUmVsYXhhdGlvbjwvaDQ+CisKKzxwPkZvciB0aGUgTW90b3JvbGEgNjhIQzExLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBjYW4gcGVyZm9ybSB0aGVzZSBnbG9iYWwKK29wdGltaXphdGlvbnMgd2hlbiB5b3Ugc3BlY2lmeSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJlbGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQtbGluZSBvcHRpb24uCisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1yZWxheGluZy1vbi1NNjhIQzExLTU4MSI+PC9hPgorPGRsPjxkdD48ZW0+cmVsYXhpbmcgYWRkcmVzcyBtb2RlczwvZW0+PGRkPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGZpbmRzIGFsbCA8Y29kZT5qc3I8L2NvZGU+IGFuZCA8Y29kZT5qbXA8L2NvZGU+IGluc3RydWN0aW9ucyB3aG9zZQordGFyZ2V0cyBhcmUgd2l0aGluIGVpZ2h0IGJpdHMsIGFuZCB0dXJucyB0aGVtIGludG8gZWlnaHQtYml0Citwcm9ncmFtLWNvdW50ZXIgcmVsYXRpdmUgPGNvZGU+YnNyPC9jb2RlPiBhbmQgPGNvZGU+YnJhPC9jb2RlPiBpbnN0cnVjdGlvbnMsCityZXNwZWN0aXZlbHkuCisKKyAgICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYWxzbyBsb29rcyBhdCBhbGwgMTYtYml0IGV4dGVuZGVkIGFkZHJlc3NpbmcgbW9kZXMgYW5kCit0cmFuc2Zvcm1zIHRoZW0gaW4gYSBkaXJlY3QgYWRkcmVzc2luZyBtb2RlIHdoZW4gdGhlIGFkZHJlc3MgaXMgaW4KK3BhZ2UgMCAoYmV0d2VlbiAwIGFuZCAweDBmZikuCisKKyAgICAgPGJyPjxkdD48ZW0+cmVsYXhpbmcgZ2NjIGluc3RydWN0aW9uIGdyb3VwPC9lbT48ZGQ+V2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+Z2NjPC9zcGFuPjwvc2FtcD4gaXMgY2FsbGVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LW1yZWxheDwvc3Bhbj48L3NhbXA+LCBpdCBjYW4gZW1pdCBncm91cAorb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgdGhlIGxpbmtlciBjYW4gb3B0aW1pemUgdG8gdXNlIGEgNjhIQzExIGRpcmVjdAorYWRkcmVzc2luZyBtb2RlLiBUaGVzZSBpbnN0cnVjdGlvbnMgY29uc2lzdHMgb2YgPGNvZGU+YmNscjwvY29kZT4gb3IKKzxjb2RlPmJzZXQ8L2NvZGU+IGluc3RydWN0aW9ucy4KKworICAgPC9kbD4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj40LjMuMiBUcmFtcG9saW5lIEdlbmVyYXRpb248L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC10cmFtcG9saW5lLWdlbmVyYXRpb24tb24tTTY4SEMxMS01ODIiPjwvYT48YSBuYW1lPSJpbmRleC10cmFtcG9saW5lLWdlbmVyYXRpb24tb24tTTY4SEMxMi01ODMiPjwvYT5Gb3IgNjhIQzExIGFuZCA2OEhDMTIsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGNhbiBnZW5lcmF0ZSB0cmFtcG9saW5lIGNvZGUgdG8KK2NhbGwgYSBmYXIgZnVuY3Rpb24gdXNpbmcgYSBub3JtYWwgPGNvZGU+anNyPC9jb2RlPiBpbnN0cnVjdGlvbi4gVGhlIGxpbmtlcgord2lsbCBhbHNvIGNoYW5nZSB0aGUgcmVsb2NhdGlvbiB0byBzb21lIGZhciBmdW5jdGlvbiB0byB1c2UgdGhlCit0cmFtcG9saW5lIGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gYWRkcmVzcy4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlCitjYXNlIHdoZW4gYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gaXMgdGFrZW4uIFRoZSBwb2ludGVyIHdpbGwgaW4gZmFjdAorcG9pbnQgdG8gdGhlIGZ1bmN0aW9uIHRyYW1wb2xpbmUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL002OEsuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL002OEsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTgwMzkwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvTTY4Sy5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk02OEsgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkhQUEEtRUxGMzIuaHRtbCNIUFBBLUVMRjMyIiB0aXRsZT0iSFBQQSBFTEYzMiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1NSVguaHRtbCNNTUlYIiB0aXRsZT0iTU1JWCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTTY4SyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNTUlYLmh0bWwjTU1JWCI+TU1JWDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkhQUEEtRUxGMzIuaHRtbCNIUFBBLUVMRjMyIj5IUFBBIEVMRjMyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCI+TWFjaGluZSBEZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjYgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSBNb3Rvcm9sYSA2OEsgZmFtaWx5PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTW90b3JvbGEtNjhLLUdPVC1nZW5lcmF0aW9uLTYyMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRnb3RfMDAzZF8wMDQwdmFyXzAwN2J0eXBlXzAwN2QtNjIyIj48L2E+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1nb3Q9PC9zcGFuPjx2YXI+dHlwZTwvdmFyPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBsZXRzIHlvdSBjaG9vc2UgdGhlIEdPVCBnZW5lcmF0aW9uIHNjaGVtZS4gCitUaGUgY2hvaWNlcyBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zaW5nbGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmVnYXRpdmU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXVsdGlnb3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnRhcmdldDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIFdoZW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj50YXJnZXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgc2VsZWN0ZWQgdGhlIGxpbmtlciBjaG9vc2VzCit0aGUgZGVmYXVsdCBHT1QgZ2VuZXJhdGlvbiBzY2hlbWUgZm9yIHRoZSBjdXJyZW50IHRhcmdldC4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNpbmdsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0ZWxscyB0aGUgbGlua2VyIHRvIGdlbmVyYXRlIGEgc2luZ2xlIEdPVCB3aXRoCitlbnRyaWVzIG9ubHkgYXQgbm9uLW5lZ2F0aXZlIG9mZnNldHMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZWdhdGl2ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0cnVjdHMgdGhlIGxpbmtlciB0byBnZW5lcmF0ZSBhIHNpbmdsZSBHT1Qgd2l0aAorZW50cmllcyBhdCBib3RoIG5lZ2F0aXZlIGFuZCBwb3NpdGl2ZSBvZmZzZXRzLiAgTm90IGFsbCBlbnZpcm9ubWVudHMKK3N1cHBvcnQgc3VjaCBHT1RzLiAKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bXVsdGlnb3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWxsb3dzIHRoZSBsaW5rZXIgdG8gZ2VuZXJhdGUgc2V2ZXJhbCBHT1RzIGluIHRoZQorb3V0cHV0IGZpbGUuICBBbGwgR09UIHJlZmVyZW5jZXMgZnJvbSBhIHNpbmdsZSBpbnB1dCBvYmplY3QKK2ZpbGUgYWNjZXNzIHRoZSBzYW1lIEdPVCwgYnV0IHJlZmVyZW5jZXMgZnJvbSBkaWZmZXJlbnQgaW5wdXQgb2JqZWN0CitmaWxlcyBtaWdodCBhY2Nlc3MgZGlmZmVyZW50IEdPVHMuICBOb3QgYWxsIGVudmlyb25tZW50cyBzdXBwb3J0IHN1Y2ggR09Ucy4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvTUVNT1JZLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9NRU1PUlkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTRlMzA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvTUVNT1JZLmh0bWwKQEAgLTAsMCArMSwxNDggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1FTU9SWSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiIHRpdGxlPSJTY3JpcHRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyIgdGl0bGU9IlNFQ1RJT05TIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUEhEUlMuaHRtbCNQSERSUyIgdGl0bGU9IlBIRFJTIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNRU1PUlkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUEhEUlMuaHRtbCNQSERSUyI+UEhEUlM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTRUNUSU9OUy5odG1sI1NFQ1RJT05TIj5TRUNUSU9OUzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIj5TY3JpcHRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My43IE1FTU9SWSBDb21tYW5kPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtTUVNT1JZLTQ3NCI+PC9hPjxhIG5hbWU9ImluZGV4LW1lbW9yeS1yZWdpb25zLTQ3NSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lvbnMtb2YtbWVtb3J5LTQ3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWFsbG9jYXRpbmctbWVtb3J5LTQ3NyI+PC9hPjxhIG5hbWU9ImluZGV4LWRpc2NvbnRpbnVvdXMtbWVtb3J5LTQ3OCI+PC9hPlRoZSBsaW5rZXIncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcGVybWl0cyBhbGxvY2F0aW9uIG9mIGFsbCBhdmFpbGFibGUKK21lbW9yeS4gIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSB1c2luZyB0aGUgPGNvZGU+TUVNT1JZPC9jb2RlPiBjb21tYW5kLgorCisgICA8cD5UaGUgPGNvZGU+TUVNT1JZPC9jb2RlPiBjb21tYW5kIGRlc2NyaWJlcyB0aGUgbG9jYXRpb24gYW5kIHNpemUgb2YgYmxvY2tzIG9mCittZW1vcnkgaW4gdGhlIHRhcmdldC4gIFlvdSBjYW4gdXNlIGl0IHRvIGRlc2NyaWJlIHdoaWNoIG1lbW9yeSByZWdpb25zCittYXkgYmUgdXNlZCBieSB0aGUgbGlua2VyLCBhbmQgd2hpY2ggbWVtb3J5IHJlZ2lvbnMgaXQgbXVzdCBhdm9pZC4gIFlvdQorY2FuIHRoZW4gYXNzaWduIHNlY3Rpb25zIHRvIHBhcnRpY3VsYXIgbWVtb3J5IHJlZ2lvbnMuICBUaGUgbGlua2VyIHdpbGwKK3NldCBzZWN0aW9uIGFkZHJlc3NlcyBiYXNlZCBvbiB0aGUgbWVtb3J5IHJlZ2lvbnMsIGFuZCB3aWxsIHdhcm4gYWJvdXQKK3JlZ2lvbnMgdGhhdCBiZWNvbWUgdG9vIGZ1bGwuICBUaGUgbGlua2VyIHdpbGwgbm90IHNodWZmbGUgc2VjdGlvbnMKK2Fyb3VuZCB0byBmaXQgaW50byB0aGUgYXZhaWxhYmxlIHJlZ2lvbnMuCisKKyAgIDxwPkEgbGlua2VyIHNjcmlwdCBtYXkgY29udGFpbiBhdCBtb3N0IG9uZSB1c2Ugb2YgdGhlIDxjb2RlPk1FTU9SWTwvY29kZT4KK2NvbW1hbmQuICBIb3dldmVyLCB5b3UgY2FuIGRlZmluZSBhcyBtYW55IGJsb2NrcyBvZiBtZW1vcnkgd2l0aGluIGl0IGFzCit5b3Ugd2lzaC4gIFRoZSBzeW50YXggaXM6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgTUVNT1JZCisgICAgICAgeworICAgICAgICAgPHZhcj5uYW1lPC92YXI+IFsoPHZhcj5hdHRyPC92YXI+KV0gOiBPUklHSU4gPSA8dmFyPm9yaWdpbjwvdmFyPiwgTEVOR1RIID0gPHZhcj5sZW48L3Zhcj4KKyAgICAgICAgIC4uLgorICAgICAgIH0KKzwvcHJlPgorICAgPHA+VGhlIDx2YXI+bmFtZTwvdmFyPiBpcyBhIG5hbWUgdXNlZCBpbiB0aGUgbGlua2VyIHNjcmlwdCB0byByZWZlciB0byB0aGUKK3JlZ2lvbi4gIFRoZSByZWdpb24gbmFtZSBoYXMgbm8gbWVhbmluZyBvdXRzaWRlIG9mIHRoZSBsaW5rZXIgc2NyaXB0LiAKK1JlZ2lvbiBuYW1lcyBhcmUgc3RvcmVkIGluIGEgc2VwYXJhdGUgbmFtZSBzcGFjZSwgYW5kIHdpbGwgbm90IGNvbmZsaWN0Cit3aXRoIHN5bWJvbCBuYW1lcywgZmlsZSBuYW1lcywgb3Igc2VjdGlvbiBuYW1lcy4gIEVhY2ggbWVtb3J5IHJlZ2lvbgorbXVzdCBoYXZlIGEgZGlzdGluY3QgbmFtZSB3aXRoaW4gdGhlIDxjb2RlPk1FTU9SWTwvY29kZT4gY29tbWFuZC4gIEhvd2V2ZXIgeW91IGNhbgorYWRkIGxhdGVyIGFsaWFzIG5hbWVzIHRvIGV4aXN0aW5nIG1lbW9yeSByZWdpb25zIHdpdGggdGhlIDxhIGhyZWY9IlJFR0lPTl8wMDVmQUxJQVMuaHRtbCNSRUdJT05fMDA1ZkFMSUFTIj5SRUdJT05fQUxJQVM8L2E+Citjb21tYW5kLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1tZW1vcnktcmVnaW9uLWF0dHJpYnV0ZXMtNDc5Ij48L2E+VGhlIDx2YXI+YXR0cjwvdmFyPiBzdHJpbmcgaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBhdHRyaWJ1dGVzIHRoYXQgc3BlY2lmeQord2hldGhlciB0byB1c2UgYSBwYXJ0aWN1bGFyIG1lbW9yeSByZWdpb24gZm9yIGFuIGlucHV0IHNlY3Rpb24gd2hpY2ggaXMKK25vdCBleHBsaWNpdGx5IG1hcHBlZCBpbiB0aGUgbGlua2VyIHNjcmlwdC4gIEFzIGRlc2NyaWJlZCBpbgorPGEgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyI+U0VDVElPTlM8L2E+LCBpZiB5b3UgZG8gbm90IHNwZWNpZnkgYW4gb3V0cHV0IHNlY3Rpb24gZm9yIHNvbWUgaW5wdXQKK3NlY3Rpb24sIHRoZSBsaW5rZXIgd2lsbCBjcmVhdGUgYW4gb3V0cHV0IHNlY3Rpb24gd2l0aCB0aGUgc2FtZSBuYW1lIGFzCit0aGUgaW5wdXQgc2VjdGlvbi4gIElmIHlvdSBkZWZpbmUgcmVnaW9uIGF0dHJpYnV0ZXMsIHRoZSBsaW5rZXIgd2lsbCB1c2UKK3RoZW0gdG8gc2VsZWN0IHRoZSBtZW1vcnkgcmVnaW9uIGZvciB0aGUgb3V0cHV0IHNlY3Rpb24gdGhhdCBpdCBjcmVhdGVzLgorCisgICA8cD5UaGUgPHZhcj5hdHRyPC92YXI+IHN0cmluZyBtdXN0IGNvbnNpc3Qgb25seSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6CisgICAgIDxkbD4KKzxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlI8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+UmVhZC1vbmx5IHNlY3Rpb24KKzxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5XPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlJlYWQvd3JpdGUgc2VjdGlvbgorPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlg8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+RXhlY3V0YWJsZSBzZWN0aW9uCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BbGxvY2F0YWJsZSBzZWN0aW9uCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+STwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Jbml0aWFsaXplZCBzZWN0aW9uCis8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5TYW1lIGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+STwvc3Bhbj48L3NhbXA+JnJzcXVvOworPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiE8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+SW52ZXJ0IHRoZSBzZW5zZSBvZiBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMgdGhhdCBmb2xsb3cKKzwvZGw+CisKKyAgIDxwPklmIGEgdW5tYXBwZWQgc2VjdGlvbiBtYXRjaGVzIGFueSBvZiB0aGUgbGlzdGVkIGF0dHJpYnV0ZXMgb3RoZXIgdGhhbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4hPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBpdCB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgbWVtb3J5IHJlZ2lvbi4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiE8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2F0dHJpYnV0ZSByZXZlcnNlcyB0aGlzIHRlc3QsIHNvIHRoYXQgYW4gdW5tYXBwZWQgc2VjdGlvbiB3aWxsIGJlIHBsYWNlZAoraW4gdGhlIG1lbW9yeSByZWdpb24gb25seSBpZiBpdCBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGxpc3RlZAorYXR0cmlidXRlcy4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtT1JJR0lOLV8wMDNkLTQ4MCI+PC9hPjxhIG5hbWU9ImluZGV4LW8tXzAwM2QtNDgxIj48L2E+PGEgbmFtZT0iaW5kZXgtb3JnLV8wMDNkLTQ4MiI+PC9hPlRoZSA8dmFyPm9yaWdpbjwvdmFyPiBpcyBhbiBudW1lcmljYWwgZXhwcmVzc2lvbiBmb3IgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YKK3RoZSBtZW1vcnkgcmVnaW9uLiAgVGhlIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byBhIGNvbnN0YW50IGFuZCBpdAorY2Fubm90IGludm9sdmUgYW55IHN5bWJvbHMuICBUaGUga2V5d29yZCA8Y29kZT5PUklHSU48L2NvZGU+IG1heSBiZQorYWJicmV2aWF0ZWQgdG8gPGNvZGU+b3JnPC9jb2RlPiBvciA8Y29kZT5vPC9jb2RlPiAoYnV0IG5vdCwgZm9yIGV4YW1wbGUsCis8Y29kZT5PUkc8L2NvZGU+KS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTEVOR1RILV8wMDNkLTQ4MyI+PC9hPjxhIG5hbWU9ImluZGV4LWxlbi1fMDAzZC00ODQiPjwvYT48YSBuYW1lPSJpbmRleC1sLV8wMDNkLTQ4NSI+PC9hPlRoZSA8dmFyPmxlbjwvdmFyPiBpcyBhbiBleHByZXNzaW9uIGZvciB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5CityZWdpb24uICBBcyB3aXRoIHRoZSA8dmFyPm9yaWdpbjwvdmFyPiBleHByZXNzaW9uLCB0aGUgZXhwcmVzc2lvbiBtdXN0CitiZSBudW1lcmljYWwgb25seSBhbmQgbXVzdCBldmFsdWF0ZSB0byBhIGNvbnN0YW50LiAgVGhlIGtleXdvcmQKKzxjb2RlPkxFTkdUSDwvY29kZT4gbWF5IGJlIGFiYnJldmlhdGVkIHRvIDxjb2RlPmxlbjwvY29kZT4gb3IgPGNvZGU+bDwvY29kZT4uCisKKyAgIDxwPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgd2Ugc3BlY2lmeSB0aGF0IHRoZXJlIGFyZSB0d28gbWVtb3J5IHJlZ2lvbnMKK2F2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbjogb25lIHN0YXJ0aW5nIGF0ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgMjU2IGtpbG9ieXRlcywKK2FuZCB0aGUgb3RoZXIgc3RhcnRpbmcgYXQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4weDQwMDAwMDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBmb3VyIG1lZ2FieXRlcy4gIFRoZQorbGlua2VyIHdpbGwgcGxhY2UgaW50byB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yb208L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWVtb3J5IHJlZ2lvbiBldmVyeSBzZWN0aW9uIHdoaWNoCitpcyBub3QgZXhwbGljaXRseSBtYXBwZWQgaW50byBhIG1lbW9yeSByZWdpb24sIGFuZCBpcyBlaXRoZXIgcmVhZC1vbmx5CitvciBleGVjdXRhYmxlLiAgVGhlIGxpbmtlciB3aWxsIHBsYWNlIG90aGVyIHNlY3Rpb25zIHdoaWNoIGFyZSBub3QKK2V4cGxpY2l0bHkgbWFwcGVkIGludG8gYSBtZW1vcnkgcmVnaW9uIGludG8gdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmFtPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1lbW9yeQorcmVnaW9uLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgTUVNT1JZCisgICAgICAgeworICAgICAgICAgcm9tIChyeCkgIDogT1JJR0lOID0gMCwgTEVOR1RIID0gMjU2SworICAgICAgICAgcmFtICghcngpIDogb3JnID0gMHg0MDAwMDAwMCwgbCA9IDRNCisgICAgICAgfQorPC9wcmU+CisgICA8cD5PbmNlIHlvdSBkZWZpbmUgYSBtZW1vcnkgcmVnaW9uLCB5b3UgY2FuIGRpcmVjdCB0aGUgbGlua2VyIHRvIHBsYWNlCitzcGVjaWZpYyBvdXRwdXQgc2VjdGlvbnMgaW50byB0aGF0IG1lbW9yeSByZWdpb24gYnkgdXNpbmcgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PHZhcj5yZWdpb248L3Zhcj48L3NhbXA+JnJzcXVvOyBvdXRwdXQgc2VjdGlvbiBhdHRyaWJ1dGUuICBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUKK2EgbWVtb3J5IHJlZ2lvbiBuYW1lZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1lbTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgeW91IHdvdWxkIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDttZW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gdGhlCitvdXRwdXQgc2VjdGlvbiBkZWZpbml0aW9uLiAgU2VlIDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLVJlZ2lvbi5odG1sI091dHB1dC1TZWN0aW9uLVJlZ2lvbiI+T3V0cHV0IFNlY3Rpb24gUmVnaW9uPC9hPi4gIElmIG5vIGFkZHJlc3MKK3dhcyBzcGVjaWZpZWQgZm9yIHRoZSBvdXRwdXQgc2VjdGlvbiwgdGhlIGxpbmtlciB3aWxsIHNldCB0aGUgYWRkcmVzcyB0bwordGhlIG5leHQgYXZhaWxhYmxlIGFkZHJlc3Mgd2l0aGluIHRoZSBtZW1vcnkgcmVnaW9uLiAgSWYgdGhlIGNvbWJpbmVkCitvdXRwdXQgc2VjdGlvbnMgZGlyZWN0ZWQgdG8gYSBtZW1vcnkgcmVnaW9uIGFyZSB0b28gbGFyZ2UgZm9yIHRoZQorcmVnaW9uLCB0aGUgbGlua2VyIHdpbGwgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZS4KKworICAgPHA+SXQgaXMgcG9zc2libGUgdG8gYWNjZXNzIHRoZSBvcmlnaW4gYW5kIGxlbmd0aCBvZiBhIG1lbW9yeSBpbiBhbgorZXhwcmVzc2lvbiB2aWEgdGhlIDxjb2RlPk9SSUdJTig8L2NvZGU+PHZhcj5tZW1vcnk8L3Zhcj48Y29kZT4pPC9jb2RlPiBhbmQKKzxjb2RlPkxFTkdUSCg8L2NvZGU+PHZhcj5tZW1vcnk8L3Zhcj48Y29kZT4pPC9jb2RlPiBmdW5jdGlvbnM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIF9mc3RhY2sgPSBPUklHSU4ocmFtKSArIExFTkdUSChyYW0pIC0gNDsKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvTU1JWC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvTU1JWC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjUyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9NTUlYLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TU1JWCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTTY4Sy5odG1sI002OEsiIHRpdGxlPSJNNjhLIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTVNQNDMwLmh0bWwjTVNQNDMwIiB0aXRsZT0iTVNQNDMwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNTUlYIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1TUDQzMC5odG1sI01TUDQzMCI+TVNQNDMwPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTTY4Sy5odG1sI002OEsiPk02OEs8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50Ij5NYWNoaW5lIERlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNyA8Y29kZT5sZDwvY29kZT4gYW5kIE1NSVg8L2gzPgorCis8cD5Gb3IgTU1JWCwgdGhlcmUgaXMgYSBjaG9pY2Ugb2YgZ2VuZXJhdGluZyA8Y29kZT5FTEY8L2NvZGU+IG9iamVjdCBmaWxlcyBvcgorPGNvZGU+bW1vPC9jb2RlPiBvYmplY3QgZmlsZXMgd2hlbiBsaW5raW5nLiAgVGhlIHNpbXVsYXRvciA8Y29kZT5tbWl4PC9jb2RlPgordW5kZXJzdGFuZHMgdGhlIDxjb2RlPm1tbzwvY29kZT4gZm9ybWF0LiAgVGhlIGJpbnV0aWxzIDxjb2RlPm9iamNvcHk8L2NvZGU+IHV0aWxpdHkKK2NhbiB0cmFuc2xhdGUgYmV0d2VlbiB0aGUgdHdvIGZvcm1hdHMuCisKKyAgIDxwPlRoZXJlIGlzIG9uZSBzcGVjaWFsIHNlY3Rpb24sIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5NTUlYLnJlZ19jb250ZW50czwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uLiAKK0NvbnRlbnRzIGluIHRoaXMgc2VjdGlvbiBpcyBhc3N1bWVkIHRvIGNvcnJlc3BvbmQgdG8gdGhhdCBvZiBnbG9iYWwKK3JlZ2lzdGVycywgYW5kIHN5bWJvbHMgcmVmZXJyaW5nIHRvIGl0IGFyZSB0cmFuc2xhdGVkIHRvIHNwZWNpYWwgc3ltYm9scywKK2VxdWFsIHRvIHJlZ2lzdGVycy4gIEluIGEgZmluYWwgbGluaywgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5NTUlYLnJlZ19jb250ZW50czwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCBhbGxvY2F0ZWQKK2dsb2JhbCByZWdpc3RlciBtdWx0aXBsaWVkIGJ5IDguICBSZWdpc3RlciA8Y29kZT4kMjU1PC9jb2RlPiBpcyBub3QgaW5jbHVkZWQgaW4KK3RoaXMgc2VjdGlvbjsgaXQgaXMgYWx3YXlzIHNldCB0byB0aGUgcHJvZ3JhbSBlbnRyeSwgd2hpY2ggaXMgYXQgdGhlCitzeW1ib2wgPGNvZGU+TWFpbjwvY29kZT4gZm9yIDxjb2RlPm1tbzwvY29kZT4gZmlsZXMuCisKKyAgIDxwPkdsb2JhbCBzeW1ib2xzIHdpdGggdGhlIHByZWZpeCA8Y29kZT5fXy5NTUlYLnN0YXJ0LjwvY29kZT4sIGZvciBleGFtcGxlCis8Y29kZT5fXy5NTUlYLnN0YXJ0Li50ZXh0PC9jb2RlPiBhbmQgPGNvZGU+X18uTU1JWC5zdGFydC4uZGF0YTwvY29kZT4gYXJlIHNwZWNpYWwuIAorVGhlIGRlZmF1bHQgbGlua2VyIHNjcmlwdCB1c2VzIHRoZXNlIHRvIHNldCB0aGUgZGVmYXVsdCBzdGFydCBhZGRyZXNzCitvZiBhIHNlY3Rpb24uCisKKyAgIDxwPkluaXRpYWwgYW5kIHRyYWlsaW5nIG11bHRpcGxlcyBvZiB6ZXJvLXZhbHVlZCAzMi1iaXQgd29yZHMgaW4gYSBzZWN0aW9uLAorYXJlIGxlZnQgb3V0IGZyb20gYW4gbW1vIGZpbGUuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL01SSS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvTVJJLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2N2RkZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL01SSS5odG1sCkBAIC0wLDAgKzEsMTQ2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NUkkgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUmVwb3J0aW5nLUJ1Z3MuaHRtbCNSZXBvcnRpbmctQnVncyIgdGl0bGU9IlJlcG9ydGluZyBCdWdzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIiB0aXRsZT0iR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNUkkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJhcHBlbmRpeCI+QXBwZW5kaXggQSBNUkkgQ29tcGF0aWJsZSBTY3JpcHQgRmlsZXM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1NUkktY29tcGF0aWJpbGl0eS03MTYiPjwvYT5UbyBhaWQgdXNlcnMgbWFraW5nIHRoZSB0cmFuc2l0aW9uIHRvIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBmcm9tIHRoZSBNUkkKK2xpbmtlciwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gY2FuIHVzZSBNUkkgY29tcGF0aWJsZSBsaW5rZXIgc2NyaXB0cyBhcyBhbgorYWx0ZXJuYXRpdmUgdG8gdGhlIG1vcmUgZ2VuZXJhbC1wdXJwb3NlIGxpbmtlciBzY3JpcHRpbmcgbGFuZ3VhZ2UKK2Rlc2NyaWJlZCBpbiA8YSBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyI+U2NyaXB0czwvYT4uICBNUkkgY29tcGF0aWJsZSBsaW5rZXIgc2NyaXB0cyBoYXZlIGEgbXVjaAorc2ltcGxlciBjb21tYW5kIHNldCB0aGFuIHRoZSBzY3JpcHRpbmcgbGFuZ3VhZ2Ugb3RoZXJ3aXNlIHVzZWQgd2l0aAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4uICA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gc3VwcG9ydHMgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBNUkkKK2xpbmtlciBjb21tYW5kczsgdGhlc2UgY29tbWFuZHMgYXJlIGRlc2NyaWJlZCBoZXJlLgorCisgICA8cD5JbiBnZW5lcmFsLCBNUkkgc2NyaXB0cyBhcmVuJ3Qgb2YgbXVjaCB1c2Ugd2l0aCB0aGUgPGNvZGU+YS5vdXQ8L2NvZGU+IG9iamVjdAorZmlsZSBmb3JtYXQsIHNpbmNlIGl0IG9ubHkgaGFzIHRocmVlIHNlY3Rpb25zIGFuZCBNUkkgc2NyaXB0cyBsYWNrIHNvbWUKK2ZlYXR1cmVzIHRvIG1ha2UgdXNlIG9mIHRoZW0uCisKKyAgIDxwPllvdSBjYW4gc3BlY2lmeSBhIGZpbGUgY29udGFpbmluZyBhbiBNUkktY29tcGF0aWJsZSBzY3JpcHQgdXNpbmcgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1jPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQtbGluZSBvcHRpb24uCisKKyAgIDxwPkVhY2ggY29tbWFuZCBpbiBhbiBNUkktY29tcGF0aWJsZSBzY3JpcHQgb2NjdXBpZXMgaXRzIG93biBsaW5lOyBlYWNoCitjb21tYW5kIGxpbmUgc3RhcnRzIHdpdGggdGhlIGtleXdvcmQgdGhhdCBpZGVudGlmaWVzIHRoZSBjb21tYW5kICh0aG91Z2gKK2JsYW5rIGxpbmVzIGFyZSBhbHNvIGFsbG93ZWQgZm9yIHB1bmN0dWF0aW9uKS4gIElmIGEgbGluZSBvZiBhbgorTVJJLWNvbXBhdGlibGUgc2NyaXB0IGJlZ2lucyB3aXRoIGFuIHVucmVjb2duaXplZCBrZXl3b3JkLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPgoraXNzdWVzIGEgd2FybmluZyBtZXNzYWdlLCBidXQgY29udGludWVzIHByb2Nlc3NpbmcgdGhlIHNjcmlwdC4KKworICAgPHA+TGluZXMgYmVnaW5uaW5nIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBjb21tZW50cy4KKworICAgPHA+WW91IGNhbiB3cml0ZSB0aGVzZSBjb21tYW5kcyB1c2luZyBhbGwgdXBwZXItY2FzZSBsZXR0ZXJzLCBvciBhbGwKK2xvd2VyIGNhc2U7IGZvciBleGFtcGxlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNoaXA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIHNhbWUgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DSElQPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK1RoZSBmb2xsb3dpbmcgbGlzdCBzaG93cyBvbmx5IHRoZSB1cHBlci1jYXNlIGZvcm0gb2YgZWFjaCBjb21tYW5kLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JBQlNPTFVURV8wMDdkLV8wMDI4TVJJXzAwMjktNzE3Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPkFCU09MVVRFIDwvY29kZT48dmFyPnNlY25hbWU8L3Zhcj48ZHQ+PGNvZGU+QUJTT0xVVEUgPC9jb2RlPjx2YXI+c2VjbmFtZTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+c2VjbmFtZTwvdmFyPjxjb2RlPiwgLi4uIDwvY29kZT48dmFyPnNlY25hbWU8L3Zhcj48ZGQ+Tm9ybWFsbHksIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGluY2x1ZGVzIGluIHRoZSBvdXRwdXQgZmlsZSBhbGwgc2VjdGlvbnMgZnJvbSBhbGwKK3RoZSBpbnB1dCBmaWxlcy4gIEhvd2V2ZXIsIGluIGFuIE1SSS1jb21wYXRpYmxlIHNjcmlwdCwgeW91IGNhbiB1c2UgdGhlCis8Y29kZT5BQlNPTFVURTwvY29kZT4gY29tbWFuZCB0byByZXN0cmljdCB0aGUgc2VjdGlvbnMgdGhhdCB3aWxsIGJlIHByZXNlbnQgaW4KK3lvdXIgb3V0cHV0IHByb2dyYW0uICBJZiB0aGUgPGNvZGU+QUJTT0xVVEU8L2NvZGU+IGNvbW1hbmQgaXMgdXNlZCBhdCBhbGwgaW4gYQorc2NyaXB0LCB0aGVuIG9ubHkgdGhlIHNlY3Rpb25zIG5hbWVkIGV4cGxpY2l0bHkgaW4gPGNvZGU+QUJTT0xVVEU8L2NvZGU+Citjb21tYW5kcyB3aWxsIGFwcGVhciBpbiB0aGUgbGlua2VyIG91dHB1dC4gIFlvdSBjYW4gc3RpbGwgdXNlIG90aGVyCitpbnB1dCBzZWN0aW9ucyAod2hhdGV2ZXIgeW91IHNlbGVjdCBvbiB0aGUgY29tbWFuZCBsaW5lLCBvciB1c2luZworPGNvZGU+TE9BRDwvY29kZT4pIHRvIHJlc29sdmUgYWRkcmVzc2VzIGluIHRoZSBvdXRwdXQgZmlsZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YkFMSUFTXzAwN2QtXzAwMjhNUklfMDAyOS03MTgiPjwvYT48YnI+PGR0Pjxjb2RlPkFMSUFTIDwvY29kZT48dmFyPm91dC1zZWNuYW1lPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5pbi1zZWNuYW1lPC92YXI+PGRkPlVzZSB0aGlzIGNvbW1hbmQgdG8gcGxhY2UgdGhlIGRhdGEgZnJvbSBpbnB1dCBzZWN0aW9uIDx2YXI+aW4tc2VjbmFtZTwvdmFyPgoraW4gYSBzZWN0aW9uIGNhbGxlZCA8dmFyPm91dC1zZWNuYW1lPC92YXI+IGluIHRoZSBsaW5rZXIgb3V0cHV0IGZpbGUuCisKKyAgICAgPHA+PHZhcj5pbi1zZWNuYW1lPC92YXI+IG1heSBiZSBhbiBpbnRlZ2VyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiQUxJR05fMDA3ZC1fMDAyOE1SSV8wMDI5LTcxOSI+PC9hPjxicj48ZHQ+PGNvZGU+QUxJR04gPC9jb2RlPjx2YXI+c2VjbmFtZTwvdmFyPjxjb2RlPiA9IDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48ZGQ+QWxpZ24gdGhlIHNlY3Rpb24gY2FsbGVkIDx2YXI+c2VjbmFtZTwvdmFyPiB0byA8dmFyPmV4cHJlc3Npb248L3Zhcj4uICBUaGUKKzx2YXI+ZXhwcmVzc2lvbjwvdmFyPiBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JCQVNFXzAwN2QtXzAwMjhNUklfMDAyOS03MjAiPjwvYT48YnI+PGR0Pjxjb2RlPkJBU0UgPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD5Vc2UgdGhlIHZhbHVlIG9mIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPiBhcyB0aGUgbG93ZXN0IGFkZHJlc3MgKG90aGVyIHRoYW4KK2Fic29sdXRlIGFkZHJlc3NlcykgaW4gdGhlIG91dHB1dCBmaWxlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiQ0hJUF8wMDdkLV8wMDI4TVJJXzAwMjktNzIxIj48L2E+PGJyPjxkdD48Y29kZT5DSElQIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48ZHQ+PGNvZGU+Q0hJUCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGRkPlRoaXMgY29tbWFuZCBkb2VzIG5vdGhpbmc7IGl0IGlzIGFjY2VwdGVkIG9ubHkgZm9yIGNvbXBhdGliaWxpdHkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JFTkRfMDA3ZC1fMDAyOE1SSV8wMDI5LTcyMiI+PC9hPjxicj48ZHQ+PGNvZGU+RU5EPC9jb2RlPjxkZD5UaGlzIGNvbW1hbmQgZG9lcyBub3RoaW5nIHdoYXRldmVyOyBpdCdzIG9ubHkgYWNjZXB0ZWQgZm9yIGNvbXBhdGliaWxpdHkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JGT1JNQVRfMDA3ZC1fMDAyOE1SSV8wMDI5LTcyMyI+PC9hPjxicj48ZHQ+PGNvZGU+Rk9STUFUIDwvY29kZT48dmFyPm91dHB1dC1mb3JtYXQ8L3Zhcj48ZGQ+U2ltaWxhciB0byB0aGUgPGNvZGU+T1VUUFVUX0ZPUk1BVDwvY29kZT4gY29tbWFuZCBpbiB0aGUgbW9yZSBnZW5lcmFsIGxpbmtlcgorbGFuZ3VhZ2UsIGJ1dCByZXN0cmljdGVkIHRvIG9uZSBvZiB0aGVzZSBvdXRwdXQgZm9ybWF0czoKKworICAgICAgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5TLXJlY29yZHMsIGlmIDx2YXI+b3V0cHV0LWZvcm1hdDwvdmFyPiBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKworICAgICAgICAgIDxsaT5JRUVFLCBpZiA8dmFyPm91dHB1dC1mb3JtYXQ8L3Zhcj4gaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5JRUVFPC9zcGFuPjwvc2FtcD4mcnNxdW87CisKKyAgICAgICAgICA8bGk+Q09GRiAodGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y29mZi1tNjhrPC9zcGFuPjwvc2FtcD4mcnNxdW87IHZhcmlhbnQgaW4gQkZEKSwgaWYgPHZhcj5vdXRwdXQtZm9ybWF0PC92YXI+IGlzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkNPRkY8L3NwYW4+PC9zYW1wPiZyc3F1bzsKKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiTElTVF8wMDdkLV8wMDI4TVJJXzAwMjktNzI0Ij48L2E+PGJyPjxkdD48Y29kZT5MSVNUIDwvY29kZT48dmFyPmFueXRoaW5nPC92YXI+PGNvZGU+Li4uPC9jb2RlPjxkZD5QcmludCAodG8gdGhlIHN0YW5kYXJkIG91dHB1dCBmaWxlKSBhIGxpbmsgbWFwLCBhcyBwcm9kdWNlZCBieSB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGNvbW1hbmQtbGluZSBvcHRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tTTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5UaGUga2V5d29yZCA8Y29kZT5MSVNUPC9jb2RlPiBtYXkgYmUgZm9sbG93ZWQgYnkgYW55dGhpbmcgb24gdGhlCitzYW1lIGxpbmUsIHdpdGggbm8gY2hhbmdlIGluIGl0cyBlZmZlY3QuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JMT0FEXzAwN2QtXzAwMjhNUklfMDAyOS03MjUiPjwvYT48YnI+PGR0Pjxjb2RlPkxPQUQgPC9jb2RlPjx2YXI+ZmlsZW5hbWU8L3Zhcj48ZHQ+PGNvZGU+TE9BRCA8L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+ZmlsZW5hbWU8L3Zhcj48Y29kZT4sIC4uLiA8L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxkZD5JbmNsdWRlIG9uZSBvciBtb3JlIG9iamVjdCBmaWxlIDx2YXI+ZmlsZW5hbWU8L3Zhcj4gaW4gdGhlIGxpbms7IHRoaXMgaGFzIHRoZQorc2FtZSBlZmZlY3QgYXMgc3BlY2lmeWluZyA8dmFyPmZpbGVuYW1lPC92YXI+IGRpcmVjdGx5IG9uIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPgorY29tbWFuZCBsaW5lLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiTkFNRV8wMDdkLV8wMDI4TVJJXzAwMjktNzI2Ij48L2E+PGJyPjxkdD48Y29kZT5OQU1FIDwvY29kZT48dmFyPm91dHB1dC1uYW1lPC92YXI+PGRkPjx2YXI+b3V0cHV0LW5hbWU8L3Zhcj4gaXMgdGhlIG5hbWUgZm9yIHRoZSBwcm9ncmFtIHByb2R1Y2VkIGJ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+OyB0aGUKK01SSS1jb21wYXRpYmxlIGNvbW1hbmQgPGNvZGU+TkFNRTwvY29kZT4gaXMgZXF1aXZhbGVudCB0byB0aGUgY29tbWFuZC1saW5lCitvcHRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciB0aGUgZ2VuZXJhbCBzY3JpcHQgbGFuZ3VhZ2UgY29tbWFuZCA8Y29kZT5PVVRQVVQ8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiT1JERVJfMDA3ZC1fMDAyOE1SSV8wMDI5LTcyNyI+PC9hPjxicj48ZHQ+PGNvZGU+T1JERVIgPC9jb2RlPjx2YXI+c2VjbmFtZTwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+c2VjbmFtZTwvdmFyPjxjb2RlPiwgLi4uIDwvY29kZT48dmFyPnNlY25hbWU8L3Zhcj48ZHQ+PGNvZGU+T1JERVIgPC9jb2RlPjx2YXI+c2VjbmFtZTwvdmFyPiA8dmFyPnNlY25hbWU8L3Zhcj4gPHZhcj5zZWNuYW1lPC92YXI+PGRkPk5vcm1hbGx5LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBvcmRlcnMgdGhlIHNlY3Rpb25zIGluIGl0cyBvdXRwdXQgZmlsZSBpbiB0aGUKK29yZGVyIGluIHdoaWNoIHRoZXkgZmlyc3QgYXBwZWFyIGluIHRoZSBpbnB1dCBmaWxlcy4gIEluIGFuIE1SSS1jb21wYXRpYmxlCitzY3JpcHQsIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBvcmRlcmluZyB3aXRoIHRoZSA8Y29kZT5PUkRFUjwvY29kZT4gY29tbWFuZC4gIFRoZQorc2VjdGlvbnMgeW91IGxpc3Qgd2l0aCA8Y29kZT5PUkRFUjwvY29kZT4gd2lsbCBhcHBlYXIgZmlyc3QgaW4geW91ciBvdXRwdXQKK2ZpbGUsIGluIHRoZSBvcmRlciBzcGVjaWZpZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNDBjb2RlXzAwN2JQVUJMSUNfMDA3ZC1fMDAyOE1SSV8wMDI5LTcyOCI+PC9hPjxicj48ZHQ+PGNvZGU+UFVCTElDIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48Y29kZT49PC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkdD48Y29kZT5QVUJMSUMgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPiw8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGR0Pjxjb2RlPlBVQkxJQyA8L2NvZGU+PHZhcj5uYW1lPC92YXI+IDx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD5TdXBwbHkgYSB2YWx1ZSAoPHZhcj5leHByZXNzaW9uPC92YXI+KSBmb3IgZXh0ZXJuYWwgc3ltYm9sCis8dmFyPm5hbWU8L3Zhcj4gdXNlZCBpbiB0aGUgbGlua2VyIGlucHV0IGZpbGVzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDQwY29kZV8wMDdiU0VDVF8wMDdkLV8wMDI4TVJJXzAwMjktNzI5Ij48L2E+PGJyPjxkdD48Y29kZT5TRUNUIDwvY29kZT48dmFyPnNlY25hbWU8L3Zhcj48Y29kZT4sIDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48ZHQ+PGNvZGU+U0VDVCA8L2NvZGU+PHZhcj5zZWNuYW1lPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48ZHQ+PGNvZGU+U0VDVCA8L2NvZGU+PHZhcj5zZWNuYW1lPC92YXI+IDx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD5Zb3UgY2FuIHVzZSBhbnkgb2YgdGhlc2UgdGhyZWUgZm9ybXMgb2YgdGhlIDxjb2RlPlNFQ1Q8L2NvZGU+IGNvbW1hbmQgdG8KK3NwZWNpZnkgdGhlIHN0YXJ0IGFkZHJlc3MgKDx2YXI+ZXhwcmVzc2lvbjwvdmFyPikgZm9yIHNlY3Rpb24gPHZhcj5zZWNuYW1lPC92YXI+LiAKK0lmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgPGNvZGU+U0VDVDwvY29kZT4gc3RhdGVtZW50IGZvciB0aGUgc2FtZQorPHZhcj5zZWNuYW1lPC92YXI+LCBvbmx5IHRoZSA8ZW0+Zmlyc3Q8L2VtPiBzZXRzIHRoZSBzdGFydCBhZGRyZXNzLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL01TUDQzMC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvTVNQNDMwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjMjQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL01TUDQzMC5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1TUDQzMCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTU1JWC5odG1sI01NSVgiIHRpdGxlPSJNTUlYIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI1Bvd2VyUEMtRUxGMzIiIHRpdGxlPSJQb3dlclBDIEVMRjMyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNU1A0MzAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI1Bvd2VyUEMtRUxGMzIiPlBvd2VyUEMgRUxGMzI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNTUlYLmh0bWwjTU1JWCI+TU1JWDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiPk1hY2hpbmUgRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC44IDxjb2RlPmxkPC9jb2RlPiBhbmQgTVNQNDMwPC9oMz4KKworPHA+Rm9yIHRoZSBNU1A0MzAgaXQgaXMgcG9zc2libGUgdG8gc2VsZWN0IHRoZSBNUFUgYXJjaGl0ZWN0dXJlLiAgVGhlIGZsYWcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbSBbbXB1IHR5cGVdPC9zcGFuPjwvc2FtcD4mcnNxdW87Cit3aWxsIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBsaW5rZXIgc2NyaXB0IGZvciBzZWxlY3RlZCBNUFUgdHlwZS4gIChUbyBnZXQgYSBsaXN0IG9mIGtub3duIE1QVXMKK2p1c3QgcGFzcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1tIGhlbHA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIHRvIHRoZSBsaW5rZXIpLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1NU1A0MzAtZXh0cmEtc2VjdGlvbnMtNjIzIj48L2E+VGhlIGxpbmtlciB3aWxsIHJlY29nbml6ZSBzb21lIGV4dHJhIHNlY3Rpb25zIHdoaWNoIGFyZSBNU1A0MzAgc3BlY2lmaWM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiZsc3F1bzs8L2NvZGU+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi52ZWN0b3JzPC9zcGFuPjwvc2FtcD48Y29kZT4mcnNxdW87PC9jb2RlPjxkZD5EZWZpbmVzIGEgcG9ydGlvbiBvZiBST00gd2hlcmUgaW50ZXJydXB0IHZlY3RvcnMgbG9jYXRlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPiZsc3F1bzs8L2NvZGU+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ib290bG9hZGVyPC9zcGFuPjwvc2FtcD48Y29kZT4mcnNxdW87PC9jb2RlPjxkZD5EZWZpbmVzIHRoZSBib290bG9hZGVyIHBvcnRpb24gb2YgdGhlIFJPTSAoaWYgYXBwbGljYWJsZSkuICBBbnkgY29kZQoraW4gdGhpcyBzZWN0aW9uIHdpbGwgYmUgdXBsb2FkZWQgdG8gdGhlIE1QVS4KKworICAgICA8YnI+PGR0Pjxjb2RlPiZsc3F1bzs8L2NvZGU+PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5pbmZvbWVtPC9zcGFuPjwvc2FtcD48Y29kZT4mcnNxdW87PC9jb2RlPjxkZD5EZWZpbmVzIGFuIGluZm9ybWF0aW9uIG1lbW9yeSBzZWN0aW9uIChpZiBhcHBsaWNhYmxlKS4gIEFueSBjb2RlIGluCit0aGlzIHNlY3Rpb24gd2lsbCBiZSB1cGxvYWRlZCB0byB0aGUgTVBVLgorCisgICAgIDxicj48ZHQ+PGNvZGU+JmxzcXVvOzwvY29kZT48c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmluZm9tZW1ub2JpdHM8L3NwYW4+PC9zYW1wPjxjb2RlPiZyc3F1bzs8L2NvZGU+PGRkPlRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmluZm9tZW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiBleGNlcHQgdGhhdCBhbnkgY29kZQoraW4gdGhpcyBzZWN0aW9uIHdpbGwgbm90IGJlIHVwbG9hZGVkIHRvIHRoZSBNUFUuCisKKyAgICAgPGJyPjxkdD48Y29kZT4mbHNxdW87PC9jb2RlPjxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubm9pbml0PC9zcGFuPjwvc2FtcD48Y29kZT4mcnNxdW87PC9jb2RlPjxkZD5EZW5vdGVzIGEgcG9ydGlvbiBvZiBSQU0gbG9jYXRlZCBhYm92ZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ic3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbi4KKworICAgICA8cD5UaGUgbGFzdCB0d28gc2VjdGlvbnMgYXJlIHVzZWQgYnkgZ2NjLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL01hY2hpbmUtRGVwZW5kZW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9NYWNoaW5lLURlcGVuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODg3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9NYWNoaW5lLURlcGVuZGVudC5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1hY2hpbmUgRGVwZW5kZW50IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIiB0aXRsZT0iU2NyaXB0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkJGRC5odG1sI0JGRCIgdGl0bGU9IkJGRCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTWFjaGluZS1EZXBlbmRlbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQkZELmh0bWwjQkZEIj5CRkQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyI+U2NyaXB0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj40IE1hY2hpbmUgRGVwZW5kZW50IEZlYXR1cmVzPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWFjaGluZS1kZXBlbmRlbmNpZXMtNTY4Ij48L2E+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gaGFzIGFkZGl0aW9uYWwgZmVhdHVyZXMgb24gc29tZSBwbGF0Zm9ybXM7IHRoZSBmb2xsb3dpbmcKK3NlY3Rpb25zIGRlc2NyaWJlIHRoZW0uICBNYWNoaW5lcyB3aGVyZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBoYXMgbm8gYWRkaXRpb25hbAorZnVuY3Rpb25hbGl0eSBhcmUgbm90IGxpc3RlZC4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ikg4XzAwMmYzMDAuaHRtbCNIOF8wMDJmMzAwIj5IOC8zMDA8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSBIOC8zMDAKKworPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iaTk2MC5odG1sI2k5NjAiPmk5NjA8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgdGhlIEludGVsIDk2MCBmYW1pbHkKKworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iTTY4SEMxMV8wMDJmNjhIQzEyLmh0bWwjTTY4SEMxMV8wMDJmNjhIQzEyIj5NNjhIQzExLzY4SEMxMjwvYT46IAkJPGNvZGU+bGQ8L2NvZGU+IGFuZCB0aGUgTW90b3JvbGEgNjhIQzExIGFuZCA2OEhDMTIgZmFtaWxpZXMKKworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iQVJNLmh0bWwjQVJNIj5BUk08L2E+OiAJCQkJPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSBBUk0gZmFtaWx5CisKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkhQUEEtRUxGMzIuaHRtbCNIUFBBLUVMRjMyIj5IUFBBIEVMRjMyPC9hPjogICAgICAgICAgICAgICAgICAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIEhQUEEgMzItYml0IEVMRgorCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJNNjhLLmh0bWwjTTY4SyI+TTY4SzwvYT46IAkJCTxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgTW90b3JvbGEgNjhLIGZhbWlseQorCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJNTUlYLmh0bWwjTU1JWCI+TU1JWDwvYT46IAkJCTxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBNTUlYCisKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9Ik1TUDQzMC5odG1sI01TUDQzMCI+TVNQNDMwPC9hPjogCQkJPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIE1TUDQzMAorCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjUG93ZXJQQy1FTEYzMiI+UG93ZXJQQyBFTEYzMjwvYT46IAkJPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIFBvd2VyUEMgMzItYml0IEVMRiBTdXBwb3J0CisKKzxsaT48YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT46IAkJPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIFBvd2VyUEM2NCA2NC1iaXQgRUxGIFN1cHBvcnQKKworPGxpPjxhIGhyZWY9IlNQVS1FTEYuaHRtbCNTUFUtRUxGIj5TUFUgRUxGPC9hPjogCQkJPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIFNQVSBFTEYgU3VwcG9ydAorCis8bGk+PGEgaHJlZj0iVEktQ09GRi5odG1sI1RJLUNPRkYiPlRJIENPRkY8L2E+OiAgICAgICAgICAgICAgICAgICAgICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgVEkgQ09GRgorCis8bGk+PGEgaHJlZj0iV0lOMzIuaHRtbCNXSU4zMiI+V0lOMzI8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBXSU4zMiAoY3lnd2luL21pbmd3KQorCis8bGk+PGEgaHJlZj0iWHRlbnNhLmh0bWwjWHRlbnNhIj5YdGVuc2E8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIFh0ZW5zYSBQcm9jZXNzb3JzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9NaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9NaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlOGEzZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL01pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbApAQCAtMCwwICsxLDEyMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TWlzY2VsbGFuZW91cyBDb21tYW5kcyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2ltcGxlLUNvbW1hbmRzLmh0bWwjU2ltcGxlLUNvbW1hbmRzIiB0aXRsZT0iU2ltcGxlIENvbW1hbmRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUkVHSU9OXzAwNWZBTElBUy5odG1sI1JFR0lPTl8wMDVmQUxJQVMiIHRpdGxlPSJSRUdJT05fQUxJQVMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSRUdJT05fMDA1ZkFMSUFTLmh0bWwjUkVHSU9OXzAwNWZBTElBUyI+UkVHSU9OX0FMSUFTPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU2ltcGxlLUNvbW1hbmRzLmh0bWwjU2ltcGxlLUNvbW1hbmRzIj5TaW1wbGUgQ29tbWFuZHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjQuNSBPdGhlciBMaW5rZXIgU2NyaXB0IENvbW1hbmRzPC9oND4KKworPHA+VGhlcmUgYXJlIGEgZmV3IG90aGVyIGxpbmtlciBzY3JpcHRzIGNvbW1hbmRzLgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5BU1NFUlQoPC9jb2RlPjx2YXI+ZXhwPC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5tZXNzYWdlPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtQVNTRVJULTM3NyI+PC9hPjxhIG5hbWU9ImluZGV4LWFzc2VydGlvbi1pbi1saW5rZXItc2NyaXB0LTM3OCI+PC9hPkVuc3VyZSB0aGF0IDx2YXI+ZXhwPC92YXI+IGlzIG5vbi16ZXJvLiAgSWYgaXQgaXMgemVybywgdGhlbiBleGl0IHRoZSBsaW5rZXIKK3dpdGggYW4gZXJyb3IgY29kZSwgYW5kIHByaW50IDx2YXI+bWVzc2FnZTwvdmFyPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPkVYVEVSTig8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj4gPHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gLi4uKTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtRVhURVJOLTM3OSI+PC9hPjxhIG5hbWU9ImluZGV4LXVuZGVmaW5lZC1zeW1ib2wtaW4tbGlua2VyLXNjcmlwdC0zODAiPjwvYT5Gb3JjZSA8dmFyPnN5bWJvbDwvdmFyPiB0byBiZSBlbnRlcmVkIGluIHRoZSBvdXRwdXQgZmlsZSBhcyBhbiB1bmRlZmluZWQKK3N5bWJvbC4gIERvaW5nIHRoaXMgbWF5LCBmb3IgZXhhbXBsZSwgdHJpZ2dlciBsaW5raW5nIG9mIGFkZGl0aW9uYWwKK21vZHVsZXMgZnJvbSBzdGFuZGFyZCBsaWJyYXJpZXMuICBZb3UgbWF5IGxpc3Qgc2V2ZXJhbCA8dmFyPnN5bWJvbDwvdmFyPnMgZm9yCitlYWNoIDxjb2RlPkVYVEVSTjwvY29kZT4sIGFuZCB5b3UgbWF5IHVzZSA8Y29kZT5FWFRFUk48L2NvZGU+IG11bHRpcGxlIHRpbWVzLiAgVGhpcworY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi11PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQtbGluZSBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5GT1JDRV9DT01NT05fQUxMT0NBVElPTjwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtRk9SQ0VfMDA1ZkNPTU1PTl8wMDVmQUxMT0NBVElPTi0zODEiPjwvYT48YSBuYW1lPSJpbmRleC1jb21tb24tYWxsb2NhdGlvbi1pbi1saW5rZXItc2NyaXB0LTM4MiI+PC9hPlRoaXMgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1kPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQtbGluZSBvcHRpb246Cit0byBtYWtlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFzc2lnbiBzcGFjZSB0byBjb21tb24gc3ltYm9scyBldmVuIGlmIGEgcmVsb2NhdGFibGUKK291dHB1dCBmaWxlIGlzIHNwZWNpZmllZCAoJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcjwvc3Bhbj48L3NhbXA+JnJzcXVvOykuCisKKyAgICAgPGJyPjxkdD48Y29kZT5JTkhJQklUX0NPTU1PTl9BTExPQ0FUSU9OPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1JTkhJQklUXzAwNWZDT01NT05fMDA1ZkFMTE9DQVRJT04tMzgzIj48L2E+PGEgbmFtZT0iaW5kZXgtY29tbW9uLWFsbG9jYXRpb24taW4tbGlua2VyLXNjcmlwdC0zODQiPjwvYT5UaGlzIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLWRlZmluZS1jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2NvbW1hbmQtbGluZSBvcHRpb246IHRvIG1ha2UgPGNvZGU+bGQ8L2NvZGU+IG9taXQgdGhlIGFzc2lnbm1lbnQgb2YgYWRkcmVzc2VzCit0byBjb21tb24gc3ltYm9scyBldmVuIGZvciBhIG5vbi1yZWxvY2F0YWJsZSBvdXRwdXQgZmlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPklOU0VSVCBbIEFGVEVSIHwgQkVGT1JFIF0gPC9jb2RlPjx2YXI+b3V0cHV0X3NlY3Rpb248L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtSU5TRVJULTM4NSI+PC9hPjxhIG5hbWU9ImluZGV4LWluc2VydC11c2VyLXNjcmlwdC1pbnRvLWRlZmF1bHQtc2NyaXB0LTM4NiI+PC9hPlRoaXMgY29tbWFuZCBpcyB0eXBpY2FsbHkgdXNlZCBpbiBhIHNjcmlwdCBzcGVjaWZpZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tVDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0bworYXVnbWVudCB0aGUgZGVmYXVsdCA8Y29kZT5TRUNUSU9OUzwvY29kZT4gd2l0aCwgZm9yIGV4YW1wbGUsIG92ZXJsYXlzLiAgSXQKK2luc2VydHMgYWxsIHByaW9yIGxpbmtlciBzY3JpcHQgc3RhdGVtZW50cyBhZnRlciAob3IgYmVmb3JlKQorPHZhcj5vdXRwdXRfc2VjdGlvbjwvdmFyPiwgYW5kIGFsc28gY2F1c2VzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gbm90IG92ZXJyaWRlIHRoZQorZGVmYXVsdCBsaW5rZXIgc2NyaXB0LiAgVGhlIGV4YWN0IGluc2VydGlvbiBwb2ludCBpcyBhcyBmb3Igb3JwaGFuCitzZWN0aW9ucy4gIFNlZSA8YSBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjTG9jYXRpb24tQ291bnRlciI+TG9jYXRpb24gQ291bnRlcjwvYT4uICBUaGUgaW5zZXJ0aW9uIGhhcHBlbnMgYWZ0ZXIgdGhlCitsaW5rZXIgaGFzIG1hcHBlZCBpbnB1dCBzZWN0aW9ucyB0byBvdXRwdXQgc2VjdGlvbnMuICBQcmlvciB0byB0aGUKK2luc2VydGlvbiwgc2luY2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tVDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzY3JpcHRzIGFyZSBwYXJzZWQgYmVmb3JlIHRoZSBkZWZhdWx0CitsaW5rZXIgc2NyaXB0LCBzdGF0ZW1lbnRzIGluIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1UPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNjcmlwdCBvY2N1ciBiZWZvcmUgdGhlCitkZWZhdWx0IGxpbmtlciBzY3JpcHQgc3RhdGVtZW50cyBpbiB0aGUgaW50ZXJuYWwgbGlua2VyIHJlcHJlc2VudGF0aW9uCitvZiB0aGUgc2NyaXB0LiAgSW4gcGFydGljdWxhciwgaW5wdXQgc2VjdGlvbiBhc3NpZ25tZW50cyB3aWxsIGJlIG1hZGUKK3RvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3V0cHV0IHNlY3Rpb25zIGJlZm9yZSB0aG9zZSBpbiB0aGUgZGVmYXVsdCBzY3JpcHQuICBIZXJlCitpcyBhbiBleGFtcGxlIG9mIGhvdyBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2NyaXB0IHVzaW5nIDxjb2RlPklOU0VSVDwvY29kZT4gbWlnaHQgbG9vazoKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBTRUNUSU9OUworICAgICAgICAgIHsKKyAgICAgICAgICAgIE9WRVJMQVkgOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAub3YxIHsgb3YxKigudGV4dCkgfQorICAgICAgICAgICAgICAub3YyIHsgb3YyKigudGV4dCkgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBJTlNFUlQgQUZURVIgLnRleHQ7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5OT0NST1NTUkVGUyg8L2NvZGU+PHZhcj5zZWN0aW9uPC92YXI+IDx2YXI+c2VjdGlvbjwvdmFyPjxjb2RlPiAuLi4pPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1OT0NST1NTUkVGU18wMDI4XzAwNDB2YXJfMDA3YnNlY3Rpb25zXzAwN2RfMDAyOS0zODciPjwvYT48YSBuYW1lPSJpbmRleC1jcm9zcy1yZWZlcmVuY2VzLTM4OCI+PC9hPlRoaXMgY29tbWFuZCBtYXkgYmUgdXNlZCB0byB0ZWxsIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHRvIGlzc3VlIGFuIGVycm9yIGFib3V0IGFueQorcmVmZXJlbmNlcyBhbW9uZyBjZXJ0YWluIG91dHB1dCBzZWN0aW9ucy4KKworICAgICA8cD5JbiBjZXJ0YWluIHR5cGVzIG9mIHByb2dyYW1zLCBwYXJ0aWN1bGFybHkgb24gZW1iZWRkZWQgc3lzdGVtcyB3aGVuCit1c2luZyBvdmVybGF5cywgd2hlbiBvbmUgc2VjdGlvbiBpcyBsb2FkZWQgaW50byBtZW1vcnksIGFub3RoZXIgc2VjdGlvbgord2lsbCBub3QgYmUuICBBbnkgZGlyZWN0IHJlZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvIHNlY3Rpb25zIHdvdWxkIGJlCitlcnJvcnMuICBGb3IgZXhhbXBsZSwgaXQgd291bGQgYmUgYW4gZXJyb3IgaWYgY29kZSBpbiBvbmUgc2VjdGlvbiBjYWxsZWQKK2EgZnVuY3Rpb24gZGVmaW5lZCBpbiB0aGUgb3RoZXIgc2VjdGlvbi4KKworICAgICA8cD5UaGUgPGNvZGU+Tk9DUk9TU1JFRlM8L2NvZGU+IGNvbW1hbmQgdGFrZXMgYSBsaXN0IG9mIG91dHB1dCBzZWN0aW9uIG5hbWVzLiAgSWYKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGRldGVjdHMgYW55IGNyb3NzIHJlZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2VjdGlvbnMsIGl0IHJlcG9ydHMKK2FuIGVycm9yIGFuZCByZXR1cm5zIGEgbm9uLXplcm8gZXhpdCBzdGF0dXMuICBOb3RlIHRoYXQgdGhlCis8Y29kZT5OT0NST1NTUkVGUzwvY29kZT4gY29tbWFuZCB1c2VzIG91dHB1dCBzZWN0aW9uIG5hbWVzLCBub3QgaW5wdXQgc2VjdGlvbgorbmFtZXMuCisKKyAgICAgPGJyPjxkdD48Y29kZT5PVVRQVVRfQVJDSCg8L2NvZGU+PHZhcj5iZmRhcmNoPC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtT1VUUFVUXzAwNWZBUkNIXzAwMjhfMDA0MHZhcl8wMDdiYmZkYXJjaF8wMDdkXzAwMjktMzg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWFjaGluZS1hcmNoaXRlY3R1cmUtMzkwIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJjaGl0ZWN0dXJlLTM5MSI+PC9hPlNwZWNpZnkgYSBwYXJ0aWN1bGFyIG91dHB1dCBtYWNoaW5lIGFyY2hpdGVjdHVyZS4gIFRoZSBhcmd1bWVudCBpcyBvbmUKK29mIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBCRkQgbGlicmFyeSAoc2VlIDxhIGhyZWY9IkJGRC5odG1sI0JGRCI+QkZEPC9hPikuICBZb3UgY2FuIHNlZSB0aGUKK2FyY2hpdGVjdHVyZSBvZiBhbiBvYmplY3QgZmlsZSBieSB1c2luZyB0aGUgPGNvZGU+b2JqZHVtcDwvY29kZT4gcHJvZ3JhbSB3aXRoCit0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5MRF9GRUFUVVJFKDwvY29kZT48dmFyPnN0cmluZzwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUxEXzAwNWZGRUFUVVJFXzAwMjhfMDA0MHZhcl8wMDdic3RyaW5nXzAwN2RfMDAyOS0zOTIiPjwvYT5UaGlzIGNvbW1hbmQgbWF5IGJlIHVzZWQgdG8gbW9kaWZ5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGJlaGF2aW9yLiAgSWYKKzx2YXI+c3RyaW5nPC92YXI+IGlzIDxjb2RlPiJTQU5FX0VYUFIiPC9jb2RlPiB0aGVuIGFic29sdXRlIHN5bWJvbHMgYW5kIG51bWJlcnMKK2luIGEgc2NyaXB0IGFyZSBzaW1wbHkgdHJlYXRlZCBhcyBudW1iZXJzIGV2ZXJ5d2hlcmUuIAorU2VlIDxhIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI0V4cHJlc3Npb24tU2VjdGlvbiI+RXhwcmVzc2lvbiBTZWN0aW9uPC9hPi4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PcGVyYXRvcnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL09wZXJhdG9ycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDlkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PcGVyYXRvcnMuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PcGVyYXRvcnMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiIHRpdGxlPSJFeHByZXNzaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkxvY2F0aW9uLUNvdW50ZXIuaHRtbCNMb2NhdGlvbi1Db3VudGVyIiB0aXRsZT0iTG9jYXRpb24gQ291bnRlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkV2YWx1YXRpb24uaHRtbCNFdmFsdWF0aW9uIiB0aXRsZT0iRXZhbHVhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3BlcmF0b3JzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkV2YWx1YXRpb24uaHRtbCNFdmFsdWF0aW9uIj5FdmFsdWF0aW9uPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTG9jYXRpb24tQ291bnRlci5odG1sI0xvY2F0aW9uLUNvdW50ZXIiPkxvY2F0aW9uIENvdW50ZXI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIj5FeHByZXNzaW9uczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuMTAuNiBPcGVyYXRvcnM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1vcGVyYXRvcnMtZm9yLWFyaXRobWV0aWMtNTIyIj48L2E+PGEgbmFtZT0iaW5kZXgtYXJpdGhtZXRpYy1vcGVyYXRvcnMtNTIzIj48L2E+PGEgbmFtZT0iaW5kZXgtcHJlY2VkZW5jZS1pbi1leHByZXNzaW9ucy01MjQiPjwvYT5UaGUgbGlua2VyIHJlY29nbml6ZXMgdGhlIHN0YW5kYXJkIEMgc2V0IG9mIGFyaXRobWV0aWMgb3BlcmF0b3JzLCB3aXRoCit0aGUgc3RhbmRhcmQgYmluZGluZ3MgYW5kIHByZWNlZGVuY2UgbGV2ZWxzOgorPCEtLSBURVhJMlJPRkYtS0lMTCAtLT4KKzwhLS0gRU5EIFRFWEkyUk9GRi1LSUxMIC0tPgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHByZWNlZGVuY2UgICAgICBhc3NvY2lhdGl2aXR5ICAgT3BlcmF0b3JzICAgICAgICAgICAgICAgIE5vdGVzCisgICAgIChoaWdoZXN0KQorICAgICAxICAgICAgICAgICAgICAgbGVmdCAgICAgICAgICAgICEgIC0gIH4gICAgICAgICAgICAgICAgICAoMSkKKyAgICAgMiAgICAgICAgICAgICAgIGxlZnQgICAgICAgICAgICAqICAvICAlCisgICAgIDMgICAgICAgICAgICAgICBsZWZ0ICAgICAgICAgICAgKyAgLQorICAgICA0ICAgICAgICAgICAgICAgbGVmdCAgICAgICAgICAgICZndDsmZ3Q7ICAmbHQ7Jmx0OworICAgICA1ICAgICAgICAgICAgICAgbGVmdCAgICAgICAgICAgID09ICAhPSAgJmd0OyAgJmx0OyAgJmx0Oz0gICZndDs9CisgICAgIDYgICAgICAgICAgICAgICBsZWZ0ICAgICAgICAgICAgJmFtcDsKKyAgICAgNyAgICAgICAgICAgICAgIGxlZnQgICAgICAgICAgICB8CisgICAgIDggICAgICAgICAgICAgICBsZWZ0ICAgICAgICAgICAgJmFtcDsmYW1wOworICAgICA5ICAgICAgICAgICAgICAgbGVmdCAgICAgICAgICAgIHx8CisgICAgIDEwICAgICAgICAgICAgICByaWdodCAgICAgICAgICAgPyA6CisgICAgIDExICAgICAgICAgICAgICByaWdodCAgICAgICAgICAgJmFtcDs9ICArPSAgLT0gICo9ICAvPSAgICAgICAoMikKKyAgICAgKGxvd2VzdCkKKzwvcHJlPgorICAgPHA+Tm90ZXM6CisoMSkgUHJlZml4IG9wZXJhdG9ycworKDIpIFNlZSA8YSBocmVmPSJBc3NpZ25tZW50cy5odG1sI0Fzc2lnbm1lbnRzIj5Bc3NpZ25tZW50czwvYT4uIAorPCEtLSBURVhJMlJPRkYtS0lMTCAtLT4KKzwhLS0gRU5EIFRFWEkyUk9GRi1LSUxMIC0tPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PcHRpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PcHRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3MDhkNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL09wdGlvbnMuaHRtbApAQCAtMCwwICsxLDE4MDQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk9wdGlvbnMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIiB0aXRsZT0iSW52b2NhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkVudmlyb25tZW50Lmh0bWwjRW52aXJvbm1lbnQiIHRpdGxlPSJFbnZpcm9ubWVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3B0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFbnZpcm9ubWVudC5odG1sI0Vudmlyb25tZW50Ij5FbnZpcm9ubWVudDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xIENvbW1hbmQgTGluZSBPcHRpb25zPC9oMz4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtY29tbWFuZC1saW5lLTMiPjwvYT48YSBuYW1lPSJpbmRleC1vcHRpb25zLTQiPjwvYT4KKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+CisKKyAgIDxwPlRoZSBsaW5rZXIgc3VwcG9ydHMgYSBwbGV0aG9yYSBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucywgYnV0IGluIGFjdHVhbAorcHJhY3RpY2UgZmV3IG9mIHRoZW0gYXJlIHVzZWQgaW4gYW55IHBhcnRpY3VsYXIgY29udGV4dC4gCis8YSBuYW1lPSJpbmRleC1zdGFuZGFyZC1Vbml4LXN5c3RlbS01Ij48L2E+Rm9yIGluc3RhbmNlLCBhIGZyZXF1ZW50IHVzZSBvZiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBpcyB0byBsaW5rIHN0YW5kYXJkIFVuaXgKK29iamVjdCBmaWxlcyBvbiBhIHN0YW5kYXJkLCBzdXBwb3J0ZWQgVW5peCBzeXN0ZW0uICBPbiBzdWNoIGEgc3lzdGVtLCB0bworbGluayBhIGZpbGUgPGNvZGU+aGVsbG8ubzwvY29kZT46CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBsZCAtbyA8dmFyPm91dHB1dDwvdmFyPiAvbGliL2NydDAubyBoZWxsby5vIC1sYworPC9wcmU+CisgICA8cD5UaGlzIHRlbGxzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHRvIHByb2R1Y2UgYSBmaWxlIGNhbGxlZCA8dmFyPm91dHB1dDwvdmFyPiBhcyB0aGUKK3Jlc3VsdCBvZiBsaW5raW5nIHRoZSBmaWxlIDxjb2RlPi9saWIvY3J0MC5vPC9jb2RlPiB3aXRoIDxjb2RlPmhlbGxvLm88L2NvZGU+IGFuZAordGhlIGxpYnJhcnkgPGNvZGU+bGliYy5hPC9jb2RlPiwgd2hpY2ggd2lsbCBjb21lIGZyb20gdGhlIHN0YW5kYXJkIHNlYXJjaAorZGlyZWN0b3JpZXMuICAoU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1sPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBiZWxvdy4pCisKKyAgIDxwPlNvbWUgb2YgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IG1heSBiZSBzcGVjaWZpZWQgYXQgYW55Citwb2ludCBpbiB0aGUgY29tbWFuZCBsaW5lLiAgSG93ZXZlciwgb3B0aW9ucyB3aGljaCByZWZlciB0byBmaWxlcywgc3VjaAorYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1UPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBjYXVzZSB0aGUgZmlsZSB0byBiZSByZWFkIGF0IHRoZSBwb2ludCBhdAord2hpY2ggdGhlIG9wdGlvbiBhcHBlYXJzIGluIHRoZSBjb21tYW5kIGxpbmUsIHJlbGF0aXZlIHRvIHRoZSBvYmplY3QKK2ZpbGVzIGFuZCBvdGhlciBmaWxlIG9wdGlvbnMuICBSZXBlYXRpbmcgbm9uLWZpbGUgb3B0aW9ucyB3aXRoIGEKK2RpZmZlcmVudCBhcmd1bWVudCB3aWxsIGVpdGhlciBoYXZlIG5vIGZ1cnRoZXIgZWZmZWN0LCBvciBvdmVycmlkZSBwcmlvcgorb2NjdXJyZW5jZXMgKHRob3NlIGZ1cnRoZXIgdG8gdGhlIGxlZnQgb24gdGhlIGNvbW1hbmQgbGluZSkgb2YgdGhhdAorb3B0aW9uLiAgT3B0aW9ucyB3aGljaCBtYXkgYmUgbWVhbmluZ2Z1bGx5IHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSBhcmUKK25vdGVkIGluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3cuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LW9iamVjdC1maWxlcy02Ij48L2E+Tm9uLW9wdGlvbiBhcmd1bWVudHMgYXJlIG9iamVjdCBmaWxlcyBvciBhcmNoaXZlcyB3aGljaCBhcmUgdG8gYmUgbGlua2VkCit0b2dldGhlci4gIFRoZXkgbWF5IGZvbGxvdywgcHJlY2VkZSwgb3IgYmUgbWl4ZWQgaW4gd2l0aCBjb21tYW5kLWxpbmUKK29wdGlvbnMsIGV4Y2VwdCB0aGF0IGFuIG9iamVjdCBmaWxlIGFyZ3VtZW50IG1heSBub3QgYmUgcGxhY2VkIGJldHdlZW4KK2FuIG9wdGlvbiBhbmQgaXRzIGFyZ3VtZW50LgorCisgICA8cD5Vc3VhbGx5IHRoZSBsaW5rZXIgaXMgaW52b2tlZCB3aXRoIGF0IGxlYXN0IG9uZSBvYmplY3QgZmlsZSwgYnV0IHlvdSBjYW4KK3NwZWNpZnkgb3RoZXIgZm9ybXMgb2YgYmluYXJ5IGlucHV0IGZpbGVzIHVzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWw8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVI8L3NwYW4+PC9zYW1wPiZyc3F1bzssCithbmQgdGhlIHNjcmlwdCBjb21tYW5kIGxhbmd1YWdlLiAgSWYgPGVtPm5vPC9lbT4gYmluYXJ5IGlucHV0IGZpbGVzIGF0IGFsbAorYXJlIHNwZWNpZmllZCwgdGhlIGxpbmtlciBkb2VzIG5vdCBwcm9kdWNlIGFueSBvdXRwdXQsIGFuZCBpc3N1ZXMgdGhlCittZXNzYWdlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Tm8gaW5wdXQgZmlsZXM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPklmIHRoZSBsaW5rZXIgY2Fubm90IHJlY29nbml6ZSB0aGUgZm9ybWF0IG9mIGFuIG9iamVjdCBmaWxlLCBpdCB3aWxsCithc3N1bWUgdGhhdCBpdCBpcyBhIGxpbmtlciBzY3JpcHQuICBBIHNjcmlwdCBzcGVjaWZpZWQgaW4gdGhpcyB3YXkKK2F1Z21lbnRzIHRoZSBtYWluIGxpbmtlciBzY3JpcHQgdXNlZCBmb3IgdGhlIGxpbmsgKGVpdGhlciB0aGUgZGVmYXVsdAorbGlua2VyIHNjcmlwdCBvciB0aGUgb25lIHNwZWNpZmllZCBieSB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1UPC9zcGFuPjwvc2FtcD4mcnNxdW87KS4gIFRoaXMgZmVhdHVyZQorcGVybWl0cyB0aGUgbGlua2VyIHRvIGxpbmsgYWdhaW5zdCBhIGZpbGUgd2hpY2ggYXBwZWFycyB0byBiZSBhbiBvYmplY3QKK29yIGFuIGFyY2hpdmUsIGJ1dCBhY3R1YWxseSBtZXJlbHkgZGVmaW5lcyBzb21lIHN5bWJvbCB2YWx1ZXMsIG9yIHVzZXMKKzxjb2RlPklOUFVUPC9jb2RlPiBvciA8Y29kZT5HUk9VUDwvY29kZT4gdG8gbG9hZCBvdGhlciBvYmplY3RzLiAgU3BlY2lmeWluZyBhCitzY3JpcHQgaW4gdGhpcyB3YXkgbWVyZWx5IGF1Z21lbnRzIHRoZSBtYWluIGxpbmtlciBzY3JpcHQsIHdpdGggdGhlCitleHRyYSBjb21tYW5kcyBwbGFjZWQgYWZ0ZXIgdGhlIG1haW4gc2NyaXB0OyB1c2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uCit0byByZXBsYWNlIHRoZSBkZWZhdWx0IGxpbmtlciBzY3JpcHQgZW50aXJlbHksIGJ1dCBub3RlIHRoZSBlZmZlY3Qgb2YKK3RoZSA8Y29kZT5JTlNFUlQ8L2NvZGU+IGNvbW1hbmQuICBTZWUgPGEgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiPlNjcmlwdHM8L2E+LgorCisgICA8cD5Gb3Igb3B0aW9ucyB3aG9zZSBuYW1lcyBhcmUgYSBzaW5nbGUgbGV0dGVyLAorb3B0aW9uIGFyZ3VtZW50cyBtdXN0IGVpdGhlciBmb2xsb3cgdGhlIG9wdGlvbiBsZXR0ZXIgd2l0aG91dCBpbnRlcnZlbmluZword2hpdGVzcGFjZSwgb3IgYmUgZ2l2ZW4gYXMgc2VwYXJhdGUgYXJndW1lbnRzIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUKK29wdGlvbiB0aGF0IHJlcXVpcmVzIHRoZW0uCisKKyAgIDxwPkZvciBvcHRpb25zIHdob3NlIG5hbWVzIGFyZSBtdWx0aXBsZSBsZXR0ZXJzLCBlaXRoZXIgb25lIGRhc2ggb3IgdHdvIGNhbgorcHJlY2VkZSB0aGUgb3B0aW9uIG5hbWU7IGZvciBleGFtcGxlLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi10cmFjZS1zeW1ib2w8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tdHJhY2Utc3ltYm9sPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBlcXVpdmFsZW50LiAgTm90ZSZtZGFzaDt0aGVyZSBpcyBvbmUgZXhjZXB0aW9uIHRvCit0aGlzIHJ1bGUuICBNdWx0aXBsZSBsZXR0ZXIgb3B0aW9ucyB0aGF0IHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlICdvJyBjYW4KK29ubHkgYmUgcHJlY2VkZWQgYnkgdHdvIGRhc2hlcy4gIFRoaXMgaXMgdG8gcmVkdWNlIGNvbmZ1c2lvbiB3aXRoIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24uICBTbyBmb3IgZXhhbXBsZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1vbWFnaWM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2V0cyB0aGUgb3V0cHV0IGZpbGUKK25hbWUgdG8gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5tYWdpYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aGVyZWFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1vbWFnaWM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2V0cyB0aGUgTk1BR0lDIGZsYWcgb24gdGhlCitvdXRwdXQuCisKKyAgIDxwPkFyZ3VtZW50cyB0byBtdWx0aXBsZS1sZXR0ZXIgb3B0aW9ucyBtdXN0IGVpdGhlciBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUKK29wdGlvbiBuYW1lIGJ5IGFuIGVxdWFscyBzaWduLCBvciBiZSBnaXZlbiBhcyBzZXBhcmF0ZSBhcmd1bWVudHMKK2ltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgb3B0aW9uIHRoYXQgcmVxdWlyZXMgdGhlbS4gIEZvciBleGFtcGxlLAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXRyYWNlLXN5bWJvbCBmb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS10cmFjZS1zeW1ib2w9Zm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBlcXVpdmFsZW50LiAKK1VuaXF1ZSBhYmJyZXZpYXRpb25zIG9mIHRoZSBuYW1lcyBvZiBtdWx0aXBsZS1sZXR0ZXIgb3B0aW9ucyBhcmUKK2FjY2VwdGVkLgorCisgICA8cD5Ob3RlJm1kYXNoO2lmIHRoZSBsaW5rZXIgaXMgYmVpbmcgaW52b2tlZCBpbmRpcmVjdGx5LCB2aWEgYSBjb21waWxlciBkcml2ZXIKKyhlLmcuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Z2NjPC9zcGFuPjwvc2FtcD4mcnNxdW87KSB0aGVuIGFsbCB0aGUgbGlua2VyIGNvbW1hbmQgbGluZSBvcHRpb25zIHNob3VsZCBiZQorcHJlZml4ZWQgYnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tV2wsPC9zcGFuPjwvc2FtcD4mcnNxdW87IChvciB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHBhcnRpY3VsYXIKK2NvbXBpbGVyIGRyaXZlcikgbGlrZSB0aGlzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBnY2MgLVdsLC0tc3RhcnQtZ3JvdXAgZm9vLm8gYmFyLm8gLVdsLC0tZW5kLWdyb3VwCis8L3ByZT4KKyAgIDxwPlRoaXMgaXMgaW1wb3J0YW50LCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHByb2dyYW0gbWF5CitzaWxlbnRseSBkcm9wIHRoZSBsaW5rZXIgb3B0aW9ucywgcmVzdWx0aW5nIGluIGEgYmFkIGxpbmsuICBDb25mdXNpb24KK21heSBhbHNvIGFyaXNlIHdoZW4gcGFzc2luZyBvcHRpb25zIHRoYXQgcmVxdWlyZSB2YWx1ZXMgdGhyb3VnaCBhCitkcml2ZXIsIGFzIHRoZSB1c2Ugb2YgYSBzcGFjZSBiZXR3ZWVuIG9wdGlvbiBhbmQgYXJndW1lbnQgYWN0cyBhcworYSBzZXBhcmF0b3IsIGFuZCBjYXVzZXMgdGhlIGRyaXZlciB0byBwYXNzIG9ubHkgdGhlIG9wdGlvbiB0byB0aGUgbGlua2VyCithbmQgdGhlIGFyZ3VtZW50IHRvIHRoZSBjb21waWxlci4gIEluIHRoaXMgY2FzZSwgaXQgaXMgc2ltcGxlc3QgdG8gdXNlCit0aGUgam9pbmVkIGZvcm1zIG9mIGJvdGggc2luZ2xlLSBhbmQgbXVsdGlwbGUtbGV0dGVyIG9wdGlvbnMsIHN1Y2ggYXM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIGdjYyBmb28ubyBiYXIubyAtV2wsLWVFTlRSWSAtV2wsLU1hcD1hLm1hcAorPC9wcmU+CisgICA8cD5IZXJlIGlzIGEgdGFibGUgb2YgdGhlIGdlbmVyaWMgY29tbWFuZCBsaW5lIHN3aXRjaGVzIGFjY2VwdGVkIGJ5IHRoZSBHTlUKK2xpbmtlcjoKKworICAgICA8ZGw+Cis8IS0tIFRoaXMgZmlsZSBpcyBkZXNpZ25lZCB0byBiZSBpbmNsdWRlZCBpbiBtYW51YWxzIHRoYXQgdXNlIC0tPgorPCEtLSBleHBhbmRhcmd2LiAtLT4KKworICAgICA8ZHQ+PGNvZGU+QDwvY29kZT48dmFyPmZpbGU8L3Zhcj48ZGQ+UmVhZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tIDx2YXI+ZmlsZTwvdmFyPi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQDx2YXI+ZmlsZTwvdmFyPiBvcHRpb24uICBJZiA8dmFyPmZpbGU8L3Zhcj4KK2RvZXMgbm90IGV4aXN0LCBvciBjYW5ub3QgYmUgcmVhZCwgdGhlbiB0aGUgb3B0aW9uIHdpbGwgYmUgdHJlYXRlZAorbGl0ZXJhbGx5LCBhbmQgbm90IHJlbW92ZWQuCisKKyAgICAgPHA+T3B0aW9ucyBpbiA8dmFyPmZpbGU8L3Zhcj4gYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSB3aGl0ZXNwYWNlCitjaGFyYWN0ZXIgbWF5IGJlIGluY2x1ZGVkIGluIGFuIG9wdGlvbiBieSBzdXJyb3VuZGluZyB0aGUgZW50aXJlCitvcHRpb24gaW4gZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLiAgQW55IGNoYXJhY3RlciAoaW5jbHVkaW5nIGEKK2JhY2tzbGFzaCkgbWF5IGJlIGluY2x1ZGVkIGJ5IHByZWZpeGluZyB0aGUgY2hhcmFjdGVyIHRvIGJlIGluY2x1ZGVkCit3aXRoIGEgYmFja3NsYXNoLiAgVGhlIDx2YXI+ZmlsZTwvdmFyPiBtYXkgaXRzZWxmIGNvbnRhaW4gYWRkaXRpb25hbAorQDx2YXI+ZmlsZTwvdmFyPiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkYS1fMDA0MHZhcl8wMDdia2V5d29yZF8wMDdkLTciPjwvYT48YnI+PGR0Pjxjb2RlPi1hIDwvY29kZT48dmFyPmtleXdvcmQ8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gaXMgc3VwcG9ydGVkIGZvciBIUC9VWCBjb21wYXRpYmlsaXR5LiAgVGhlIDx2YXI+a2V5d29yZDwvdmFyPgorYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdGhlIHN0cmluZ3MgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hcmNoaXZlPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnNoYXJlZDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGVmYXVsdDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWFhcmNoaXZlPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1Cc3RhdGljPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgdGhlIG90aGVyIHR3byBrZXl3b3JkcyBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQKK3RvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUJkeW5hbWljPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgYW55IG51bWJlciBvZiB0aW1lcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkYXVkaXQtXzAwNDB2YXJfMDA3YkFVRElUTElCXzAwN2QtOCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1hdWRpdCA8L2NvZGU+PHZhcj5BVURJVExJQjwvdmFyPjxkZD5BZGRzIDx2YXI+QVVESVRMSUI8L3Zhcj4gdG8gdGhlIDxjb2RlPkRUX0FVRElUPC9jb2RlPiBlbnRyeSBvZiB0aGUgZHluYW1pYyBzZWN0aW9uLiAKKzx2YXI+QVVESVRMSUI8L3Zhcj4gaXMgbm90IGNoZWNrZWQgZm9yIGV4aXN0ZW5jZSwgbm9yIHdpbGwgaXQgdXNlIHRoZSBEVF9TT05BTUUKK3NwZWNpZmllZCBpbiB0aGUgbGlicmFyeS4gIElmIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyA8Y29kZT5EVF9BVURJVDwvY29kZT4KK3dpbGwgY29udGFpbiBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGF1ZGl0IGludGVyZmFjZXMgdG8gdXNlLiBJZiB0aGUgbGlua2VyCitmaW5kcyBhbiBvYmplY3Qgd2l0aCBhbiBhdWRpdCBlbnRyeSB3aGlsZSBzZWFyY2hpbmcgZm9yIHNoYXJlZCBsaWJyYXJpZXMsCitpdCB3aWxsIGFkZCBhIGNvcnJlc3BvbmRpbmcgPGNvZGU+RFRfREVQQVVESVQ8L2NvZGU+IGVudHJ5IGluIHRoZSBvdXRwdXQgZmlsZS4gCitUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgb24gRUxGIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRoZSBydGxkLWF1ZGl0CitpbnRlcmZhY2UuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtYXJjaGl0ZWN0dXJlcy05Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRBLV8wMDQwdmFyXzAwN2JhcmNoXzAwN2QtMTAiPjwvYT48YnI+PGR0Pjxjb2RlPi1BIDwvY29kZT48dmFyPmFyY2hpdGVjdHVyZTwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkYXJjaGl0ZWN0dXJlXzAwM2RfMDA0MHZhcl8wMDdiYXJjaF8wMDdkLTExIj48L2E+PGR0Pjxjb2RlPi0tYXJjaGl0ZWN0dXJlPTwvY29kZT48dmFyPmFyY2hpdGVjdHVyZTwvdmFyPjxkZD5JbiB0aGUgY3VycmVudCByZWxlYXNlIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+LCB0aGlzIG9wdGlvbiBpcyB1c2VmdWwgb25seSBmb3IgdGhlCitJbnRlbCA5NjAgZmFtaWx5IG9mIGFyY2hpdGVjdHVyZXMuICBJbiB0aGF0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGNvbmZpZ3VyYXRpb24sIHRoZQorPHZhcj5hcmNoaXRlY3R1cmU8L3Zhcj4gYXJndW1lbnQgaWRlbnRpZmllcyB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgaW4KK3RoZSA5NjAgZmFtaWx5LCBlbmFibGluZyBzb21lIHNhZmVndWFyZHMgYW5kIG1vZGlmeWluZyB0aGUKK2FyY2hpdmUtbGlicmFyeSBzZWFyY2ggcGF0aC4gIFNlZSA8YSBocmVmPSJpOTYwLmh0bWwjaTk2MCI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSBJbnRlbCA5NjAgZmFtaWx5PC9hPiwgZm9yIGRldGFpbHMuCisKKyAgICAgPHA+RnV0dXJlIHJlbGVhc2VzIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IG1heSBzdXBwb3J0IHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBmb3IKK290aGVyIGFyY2hpdGVjdHVyZSBmYW1pbGllcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1iaW5hcnktaW5wdXQtZm9ybWF0LTEyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRiLV8wMDQwdmFyXzAwN2Jmb3JtYXRfMDA3ZC0xMyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRmb3JtYXRfMDAzZF8wMDQwdmFyXzAwN2Jmb3JtYXRfMDA3ZC0xNCI+PC9hPjxhIG5hbWU9ImluZGV4LWlucHV0LWZvcm1hdC0xNSI+PC9hPjxhIG5hbWU9ImluZGV4LWlucHV0LWZvcm1hdC0xNiI+PC9hPjxicj48ZHQ+PGNvZGU+LWIgPC9jb2RlPjx2YXI+aW5wdXQtZm9ybWF0PC92YXI+PGR0Pjxjb2RlPi0tZm9ybWF0PTwvY29kZT48dmFyPmlucHV0LWZvcm1hdDwvdmFyPjxkZD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBtYXkgYmUgY29uZmlndXJlZCB0byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUga2luZCBvZiBvYmplY3QKK2ZpbGUuICBJZiB5b3VyIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGlzIGNvbmZpZ3VyZWQgdGhpcyB3YXksIHlvdSBjYW4gdXNlIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYmluYXJ5IGZvcm1hdCBmb3IgaW5wdXQgb2JqZWN0IGZpbGVzCit0aGF0IGZvbGxvdyB0aGlzIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRXZlbiB3aGVuIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGlzCitjb25maWd1cmVkIHRvIHN1cHBvcnQgYWx0ZXJuYXRpdmUgb2JqZWN0IGZvcm1hdHMsIHlvdSBkb24ndCB1c3VhbGx5IG5lZWQKK3RvIHNwZWNpZnkgdGhpcywgYXMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gZXhwZWN0IGFzIGEKK2RlZmF1bHQgaW5wdXQgZm9ybWF0IHRoZSBtb3N0IHVzdWFsIGZvcm1hdCBvbiBlYWNoIG1hY2hpbmUuIAorPHZhcj5pbnB1dC1mb3JtYXQ8L3Zhcj4gaXMgYSB0ZXh0IHN0cmluZywgdGhlIG5hbWUgb2YgYSBwYXJ0aWN1bGFyIGZvcm1hdAorc3VwcG9ydGVkIGJ5IHRoZSBCRkQgbGlicmFyaWVzLiAgKFlvdSBjYW4gbGlzdCB0aGUgYXZhaWxhYmxlIGJpbmFyeQorZm9ybWF0cyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b2JqZHVtcCAtaTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4pIAorU2VlIDxhIGhyZWY9IkJGRC5odG1sI0JGRCI+QkZEPC9hPi4KKworICAgICA8cD5Zb3UgbWF5IHdhbnQgdG8gdXNlIHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgbGlua2luZyBmaWxlcyB3aXRoIGFuIHVudXN1YWwKK2JpbmFyeSBmb3JtYXQuICBZb3UgY2FuIGFsc28gdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gc3dpdGNoIGZvcm1hdHMgZXhwbGljaXRseSAod2hlbgorbGlua2luZyBvYmplY3QgZmlsZXMgb2YgZGlmZmVyZW50IGZvcm1hdHMpLCBieSBpbmNsdWRpbmcKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LWIgPC9zcGFuPjx2YXI+aW5wdXQtZm9ybWF0PC92YXI+PC9zYW1wPiZyc3F1bzsgYmVmb3JlIGVhY2ggZ3JvdXAgb2Ygb2JqZWN0IGZpbGVzIGluIGEKK3BhcnRpY3VsYXIgZm9ybWF0LgorCisgICAgIDxwPlRoZSBkZWZhdWx0IGZvcm1hdCBpcyB0YWtlbiBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorPGNvZGU+R05VVEFSR0VUPC9jb2RlPi4gCitTZWUgPGEgaHJlZj0iRW52aXJvbm1lbnQuaHRtbCNFbnZpcm9ubWVudCI+RW52aXJvbm1lbnQ8L2E+LiAKK1lvdSBjYW4gYWxzbyBkZWZpbmUgdGhlIGlucHV0IGZvcm1hdCBmcm9tIGEgc2NyaXB0LCB1c2luZyB0aGUgY29tbWFuZAorPGNvZGU+VEFSR0VUPC9jb2RlPjsKK3NlZSA8YSBocmVmPSJGb3JtYXQtQ29tbWFuZHMuaHRtbCNGb3JtYXQtQ29tbWFuZHMiPkZvcm1hdCBDb21tYW5kczwvYT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRjLV8wMDQwdmFyXzAwN2JNUklfMDAyZGNtZGZpbGVfMDA3ZC0xNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRtcmlfMDAyZHNjcmlwdF8wMDNkXzAwNDB2YXJfMDA3Yk1SSV8wMDJkY21kZmlsZV8wMDdkLTE4Ij48L2E+PGEgbmFtZT0iaW5kZXgtY29tcGF0aWJpbGl0eV8wMDJjLU1SSS0xOSI+PC9hPjxicj48ZHQ+PGNvZGU+LWMgPC9jb2RlPjx2YXI+TVJJLWNvbW1hbmRmaWxlPC92YXI+PGR0Pjxjb2RlPi0tbXJpLXNjcmlwdD08L2NvZGU+PHZhcj5NUkktY29tbWFuZGZpbGU8L3Zhcj48ZGQ+Rm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsaW5rZXJzIHByb2R1Y2VkIGJ5IE1SSSwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYWNjZXB0cyBzY3JpcHQKK2ZpbGVzIHdyaXR0ZW4gaW4gYW4gYWx0ZXJuYXRlLCByZXN0cmljdGVkIGNvbW1hbmQgbGFuZ3VhZ2UsIGRlc2NyaWJlZCBpbgorPGEgaHJlZj0iTVJJLmh0bWwjTVJJIj5NUkkgQ29tcGF0aWJsZSBTY3JpcHQgRmlsZXM8L2E+LiAKK0ludHJvZHVjZSBNUkkgc2NyaXB0IGZpbGVzIHdpdGgKK3RoZSBvcHRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tYzwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1UPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0byBydW4gbGlua2VyCitzY3JpcHRzIHdyaXR0ZW4gaW4gdGhlIGdlbmVyYWwtcHVycG9zZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBzY3JpcHRpbmcgbGFuZ3VhZ2UuIAorSWYgPHZhcj5NUkktY21kZmlsZTwvdmFyPiBkb2VzIG5vdCBleGlzdCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gbG9va3MgZm9yIGl0IGluIHRoZSBkaXJlY3Rvcmllcworc3BlY2lmaWVkIGJ5IGFueSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1MPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtY29tbW9uLWFsbG9jYXRpb24tMjAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGQtMjEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGRjLTIyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRkcC0yMyI+PC9hPjxicj48ZHQ+PGNvZGU+LWQ8L2NvZGU+PGR0Pjxjb2RlPi1kYzwvY29kZT48ZHQ+PGNvZGU+LWRwPC9jb2RlPjxkZD5UaGVzZSB0aHJlZSBvcHRpb25zIGFyZSBlcXVpdmFsZW50OyBtdWx0aXBsZSBmb3JtcyBhcmUgc3VwcG9ydGVkIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGxpbmtlcnMuICBUaGV5IGFzc2lnbiBzcGFjZSB0byBjb21tb24gc3ltYm9scworZXZlbiBpZiBhIHJlbG9jYXRhYmxlIG91dHB1dCBmaWxlIGlzIHNwZWNpZmllZCAod2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1yPC9zcGFuPjwvc2FtcD4mcnNxdW87KS4gIFRoZQorc2NyaXB0IGNvbW1hbmQgPGNvZGU+Rk9SQ0VfQ09NTU9OX0FMTE9DQVRJT048L2NvZGU+IGhhcyB0aGUgc2FtZSBlZmZlY3QuIAorU2VlIDxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNNaXNjZWxsYW5lb3VzLUNvbW1hbmRzIj5NaXNjZWxsYW5lb3VzIENvbW1hbmRzPC9hPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZGVwYXVkaXQtXzAwNDB2YXJfMDA3YkFVRElUTElCXzAwN2QtMjQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZFAtXzAwNDB2YXJfMDA3YkFVRElUTElCXzAwN2QtMjUiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZGVwYXVkaXQgPC9jb2RlPjx2YXI+QVVESVRMSUI8L3Zhcj48ZHQ+PGNvZGU+LVAgPC9jb2RlPjx2YXI+QVVESVRMSUI8L3Zhcj48ZGQ+QWRkcyA8dmFyPkFVRElUTElCPC92YXI+IHRvIHRoZSA8Y29kZT5EVF9ERVBBVURJVDwvY29kZT4gZW50cnkgb2YgdGhlIGR5bmFtaWMgc2VjdGlvbi4gCis8dmFyPkFVRElUTElCPC92YXI+IGlzIG5vdCBjaGVja2VkIGZvciBleGlzdGVuY2UsIG5vciB3aWxsIGl0IHVzZSB0aGUgRFRfU09OQU1FCitzcGVjaWZpZWQgaW4gdGhlIGxpYnJhcnkuICBJZiBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgPGNvZGU+RFRfREVQQVVESVQ8L2NvZGU+Cit3aWxsIGNvbnRhaW4gYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBhdWRpdCBpbnRlcmZhY2VzIHRvIHVzZS4gIFRoaXMKK29wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgb24gRUxGIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRoZSBydGxkLWF1ZGl0IGludGVyZmFjZS4gCitUaGUgLVAgb3B0aW9uIGlzIHByb3ZpZGVkIGZvciBTb2xhcmlzIGNvbXBhdGliaWxpdHkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZW50cnktcG9pbnRfMDAyYy1mcm9tLWNvbW1hbmQtbGluZS0yNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkZS1fMDA0MHZhcl8wMDdiZW50cnlfMDA3ZC0yNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbnRyeV8wMDNkXzAwNDB2YXJfMDA3YmVudHJ5XzAwN2QtMjgiPjwvYT48YnI+PGR0Pjxjb2RlPi1lIDwvY29kZT48dmFyPmVudHJ5PC92YXI+PGR0Pjxjb2RlPi0tZW50cnk9PC9jb2RlPjx2YXI+ZW50cnk8L3Zhcj48ZGQ+VXNlIDx2YXI+ZW50cnk8L3Zhcj4gYXMgdGhlIGV4cGxpY2l0IHN5bWJvbCBmb3IgYmVnaW5uaW5nIGV4ZWN1dGlvbiBvZiB5b3VyCitwcm9ncmFtLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBlbnRyeSBwb2ludC4gIElmIHRoZXJlIGlzIG5vIHN5bWJvbAorbmFtZWQgPHZhcj5lbnRyeTwvdmFyPiwgdGhlIGxpbmtlciB3aWxsIHRyeSB0byBwYXJzZSA8dmFyPmVudHJ5PC92YXI+IGFzIGEgbnVtYmVyLAorYW5kIHVzZSB0aGF0IGFzIHRoZSBlbnRyeSBhZGRyZXNzICh0aGUgbnVtYmVyIHdpbGwgYmUgaW50ZXJwcmV0ZWQgaW4KK2Jhc2UgMTA7IHlvdSBtYXkgdXNlIGEgbGVhZGluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvciBiYXNlIDE2LCBvciBhIGxlYWRpbmcKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgYmFzZSA4KS4gIFNlZSA8YSBocmVmPSJFbnRyeS1Qb2ludC5odG1sI0VudHJ5LVBvaW50Ij5FbnRyeSBQb2ludDwvYT4sIGZvciBhIGRpc2N1c3Npb24gb2YgZGVmYXVsdHMKK2FuZCBvdGhlciB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIGVudHJ5IHBvaW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRleGNsdWRlXzAwMmRsaWJzLTI5Ij48L2E+PGJyPjxkdD48Y29kZT4tLWV4Y2x1ZGUtbGlicyA8L2NvZGU+PHZhcj5saWI8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+bGliPC92YXI+PGNvZGU+LC4uLjwvY29kZT48ZGQ+U3BlY2lmaWVzIGEgbGlzdCBvZiBhcmNoaXZlIGxpYnJhcmllcyBmcm9tIHdoaWNoIHN5bWJvbHMgc2hvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5CitleHBvcnRlZC4gIFRoZSBsaWJyYXJ5IG5hbWVzIG1heSBiZSBkZWxpbWl0ZWQgYnkgY29tbWFzIG9yIGNvbG9ucy4gIFNwZWNpZnlpbmcKKzxjb2RlPi0tZXhjbHVkZS1saWJzIEFMTDwvY29kZT4gZXhjbHVkZXMgc3ltYm9scyBpbiBhbGwgYXJjaGl2ZSBsaWJyYXJpZXMgZnJvbQorYXV0b21hdGljIGV4cG9ydC4gIFRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGZvciB0aGUgaTM4NiBQRSB0YXJnZXRlZAorcG9ydCBvZiB0aGUgbGlua2VyIGFuZCBmb3IgRUxGIHRhcmdldGVkIHBvcnRzLiAgRm9yIGkzODYgUEUsIHN5bWJvbHMKK2V4cGxpY2l0bHkgbGlzdGVkIGluIGEgLmRlZiBmaWxlIGFyZSBzdGlsbCBleHBvcnRlZCwgcmVnYXJkbGVzcyBvZiB0aGlzCitvcHRpb24uICBGb3IgRUxGIHRhcmdldGVkIHBvcnRzLCBzeW1ib2xzIGFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uIHdpbGwKK2JlIHRyZWF0ZWQgYXMgaGlkZGVuLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRleGNsdWRlXzAwMmRtb2R1bGVzXzAwMmRmb3JfMDAyZGltcGxpYi0zMCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1leGNsdWRlLW1vZHVsZXMtZm9yLWltcGxpYiA8L2NvZGU+PHZhcj5tb2R1bGU8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+bW9kdWxlPC92YXI+PGNvZGU+LC4uLjwvY29kZT48ZGQ+U3BlY2lmaWVzIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgb3IgYXJjaGl2ZSBtZW1iZXJzLCBmcm9tIHdoaWNoIHN5bWJvbHMKK3Nob3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBleHBvcnRlZCwgYnV0IHdoaWNoIHNob3VsZCBiZSBjb3BpZWQgd2hvbGVzYWxlCitpbnRvIHRoZSBpbXBvcnQgbGlicmFyeSBiZWluZyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBsaW5rLiAgVGhlIG1vZHVsZSBuYW1lcworbWF5IGJlIGRlbGltaXRlZCBieSBjb21tYXMgb3IgY29sb25zLCBhbmQgbXVzdCBtYXRjaCBleGFjdGx5IHRoZSBmaWxlbmFtZXMKK3VzZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gdG8gb3BlbiB0aGUgZmlsZXM7IGZvciBhcmNoaXZlIG1lbWJlcnMsIHRoaXMgaXMgc2ltcGx5Cit0aGUgbWVtYmVyIG5hbWUsIGJ1dCBmb3Igb2JqZWN0IGZpbGVzIHRoZSBuYW1lIGxpc3RlZCBtdXN0IGluY2x1ZGUgYW5kCittYXRjaCBwcmVjaXNlbHkgYW55IHBhdGggdXNlZCB0byBzcGVjaWZ5IHRoZSBpbnB1dCBmaWxlIG9uIHRoZSBsaW5rZXIncworY29tbWFuZC1saW5lLiAgVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIG9ubHkgZm9yIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQKK29mIHRoZSBsaW5rZXIuICBTeW1ib2xzIGV4cGxpY2l0bHkgbGlzdGVkIGluIGEgLmRlZiBmaWxlIGFyZSBzdGlsbCBleHBvcnRlZCwKK3JlZ2FyZGxlc3Mgb2YgdGhpcyBvcHRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZHluYW1pYy1zeW1ib2wtdGFibGUtMzEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZEUtMzIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZXhwb3J0XzAwMmRkeW5hbWljLTMzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRleHBvcnRfMDAyZGR5bmFtaWMtMzQiPjwvYT48YnI+PGR0Pjxjb2RlPi1FPC9jb2RlPjxkdD48Y29kZT4tLWV4cG9ydC1keW5hbWljPC9jb2RlPjxkdD48Y29kZT4tLW5vLWV4cG9ydC1keW5hbWljPC9jb2RlPjxkZD5XaGVuIGNyZWF0aW5nIGEgZHluYW1pY2FsbHkgbGlua2VkIGV4ZWN1dGFibGUsIHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tRTwvc3Bhbj48L3NhbXA+CitvcHRpb24gb3IgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZXhwb3J0LWR5bmFtaWM8L3NwYW4+PC9zYW1wPiBvcHRpb24gY2F1c2VzIHRoZSBsaW5rZXIgdG8gYWRkCithbGwgc3ltYm9scyB0byB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUuICBUaGUgZHluYW1pYyBzeW1ib2wgdGFibGUgaXMgdGhlCitzZXQgb2Ygc3ltYm9scyB3aGljaCBhcmUgdmlzaWJsZSBmcm9tIGR5bmFtaWMgb2JqZWN0cyBhdCBydW4gdGltZS4KKworICAgICA8cD5JZiB5b3UgZG8gbm90IHVzZSBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyAob3IgdXNlIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1leHBvcnQtZHluYW1pYzwvc3Bhbj48L3NhbXA+IG9wdGlvbiB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGJlaGF2aW9yKSwgdGhlCitkeW5hbWljIHN5bWJvbCB0YWJsZSB3aWxsIG5vcm1hbGx5IGNvbnRhaW4gb25seSB0aG9zZSBzeW1ib2xzIHdoaWNoIGFyZQorcmVmZXJlbmNlZCBieSBzb21lIGR5bmFtaWMgb2JqZWN0IG1lbnRpb25lZCBpbiB0aGUgbGluay4KKworICAgICA8cD5JZiB5b3UgdXNlIDxjb2RlPmRsb3BlbjwvY29kZT4gdG8gbG9hZCBhIGR5bmFtaWMgb2JqZWN0IHdoaWNoIG5lZWRzIHRvIHJlZmVyCitiYWNrIHRvIHRoZSBzeW1ib2xzIGRlZmluZWQgYnkgdGhlIHByb2dyYW0sIHJhdGhlciB0aGFuIHNvbWUgb3RoZXIKK2R5bmFtaWMgb2JqZWN0LCB0aGVuIHlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uIHdoZW4KK2xpbmtpbmcgdGhlIHByb2dyYW0gaXRzZWxmLgorCisgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgdGhlIGR5bmFtaWMgbGlzdCB0byBjb250cm9sIHdoYXQgc3ltYm9scyBzaG91bGQKK2JlIGFkZGVkIHRvIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZSBpZiB0aGUgb3V0cHV0IGZvcm1hdCBzdXBwb3J0cyBpdC4gCitTZWUgdGhlIGRlc2NyaXB0aW9uIG9mICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1keW5hbWljLWxpc3Q8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgPHA+Tm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIEVMRiB0YXJnZXRlZCBwb3J0cy4gIFBFIHRhcmdldHMKK3N1cHBvcnQgYSBzaW1pbGFyIGZ1bmN0aW9uIHRvIGV4cG9ydCBhbGwgc3ltYm9scyBmcm9tIGEgRExMIG9yIEVYRTsgc2VlCit0aGUgZGVzY3JpcHRpb24gb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWV4cG9ydC1hbGwtc3ltYm9sczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBiZWxvdy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1iaWdfMDAyZGVuZGlhbi1vYmplY3RzLTM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZW5kaWFubmVzcy0zNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkRUItMzciPjwvYT48YnI+PGR0Pjxjb2RlPi1FQjwvY29kZT48ZGQ+TGluayBiaWctZW5kaWFuIG9iamVjdHMuICBUaGlzIGFmZmVjdHMgdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1saXR0bGVfMDAyZGVuZGlhbi1vYmplY3RzLTM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRFTC0zOSI+PC9hPjxicj48ZHQ+PGNvZGU+LUVMPC9jb2RlPjxkZD5MaW5rIGxpdHRsZS1lbmRpYW4gb2JqZWN0cy4gIFRoaXMgYWZmZWN0cyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkZi1fMDA0MHZhcl8wMDdibmFtZV8wMDdkLTQwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGF1eGlsaWFyeV8wMDNkXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC00MSI+PC9hPjxicj48ZHQ+PGNvZGU+LWYgPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkdD48Y29kZT4tLWF1eGlsaWFyeT08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPldoZW4gY3JlYXRpbmcgYW4gRUxGIHNoYXJlZCBvYmplY3QsIHNldCB0aGUgaW50ZXJuYWwgRFRfQVVYSUxJQVJZIGZpZWxkCit0byB0aGUgc3BlY2lmaWVkIG5hbWUuICBUaGlzIHRlbGxzIHRoZSBkeW5hbWljIGxpbmtlciB0aGF0IHRoZSBzeW1ib2wKK3RhYmxlIG9mIHRoZSBzaGFyZWQgb2JqZWN0IHNob3VsZCBiZSB1c2VkIGFzIGFuIGF1eGlsaWFyeSBmaWx0ZXIgb24gdGhlCitzeW1ib2wgdGFibGUgb2YgdGhlIHNoYXJlZCBvYmplY3QgPHZhcj5uYW1lPC92YXI+LgorCisgICAgIDxwPklmIHlvdSBsYXRlciBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IHRoaXMgZmlsdGVyIG9iamVjdCwgdGhlbiwgd2hlbiB5b3UKK3J1biB0aGUgcHJvZ3JhbSwgdGhlIGR5bmFtaWMgbGlua2VyIHdpbGwgc2VlIHRoZSBEVF9BVVhJTElBUlkgZmllbGQuICBJZgordGhlIGR5bmFtaWMgbGlua2VyIHJlc29sdmVzIGFueSBzeW1ib2xzIGZyb20gdGhlIGZpbHRlciBvYmplY3QsIGl0IHdpbGwKK2ZpcnN0IGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYSBkZWZpbml0aW9uIGluIHRoZSBzaGFyZWQgb2JqZWN0Cis8dmFyPm5hbWU8L3Zhcj4uICBJZiB0aGVyZSBpcyBvbmUsIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZpbml0aW9uCitpbiB0aGUgZmlsdGVyIG9iamVjdC4gIFRoZSBzaGFyZWQgb2JqZWN0IDx2YXI+bmFtZTwvdmFyPiBuZWVkIG5vdCBleGlzdC4gCitUaHVzIHRoZSBzaGFyZWQgb2JqZWN0IDx2YXI+bmFtZTwvdmFyPiBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGFuIGFsdGVybmF0aXZlCitpbXBsZW1lbnRhdGlvbiBvZiBjZXJ0YWluIGZ1bmN0aW9ucywgcGVyaGFwcyBmb3IgZGVidWdnaW5nIG9yIGZvcgorbWFjaGluZSBzcGVjaWZpYyBwZXJmb3JtYW5jZS4KKworICAgICA8cD5UaGlzIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLiAgVGhlIERUX0FVWElMSUFSWSBlbnRyaWVzCit3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRGLV8wMDQwdmFyXzAwN2JuYW1lXzAwN2QtNDIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZmlsdGVyXzAwM2RfMDA0MHZhcl8wMDdibmFtZV8wMDdkLTQzIj48L2E+PGJyPjxkdD48Y29kZT4tRiA8L2NvZGU+PHZhcj5uYW1lPC92YXI+PGR0Pjxjb2RlPi0tZmlsdGVyPTwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+V2hlbiBjcmVhdGluZyBhbiBFTEYgc2hhcmVkIG9iamVjdCwgc2V0IHRoZSBpbnRlcm5hbCBEVF9GSUxURVIgZmllbGQgdG8KK3RoZSBzcGVjaWZpZWQgbmFtZS4gIFRoaXMgdGVsbHMgdGhlIGR5bmFtaWMgbGlua2VyIHRoYXQgdGhlIHN5bWJvbCB0YWJsZQorb2YgdGhlIHNoYXJlZCBvYmplY3Qgd2hpY2ggaXMgYmVpbmcgY3JlYXRlZCBzaG91bGQgYmUgdXNlZCBhcyBhIGZpbHRlcgorb24gdGhlIHN5bWJvbCB0YWJsZSBvZiB0aGUgc2hhcmVkIG9iamVjdCA8dmFyPm5hbWU8L3Zhcj4uCisKKyAgICAgPHA+SWYgeW91IGxhdGVyIGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgdGhpcyBmaWx0ZXIgb2JqZWN0LCB0aGVuLCB3aGVuIHlvdQorcnVuIHRoZSBwcm9ncmFtLCB0aGUgZHluYW1pYyBsaW5rZXIgd2lsbCBzZWUgdGhlIERUX0ZJTFRFUiBmaWVsZC4gIFRoZQorZHluYW1pYyBsaW5rZXIgd2lsbCByZXNvbHZlIHN5bWJvbHMgYWNjb3JkaW5nIHRvIHRoZSBzeW1ib2wgdGFibGUgb2YgdGhlCitmaWx0ZXIgb2JqZWN0IGFzIHVzdWFsLCBidXQgaXQgd2lsbCBhY3R1YWxseSBsaW5rIHRvIHRoZSBkZWZpbml0aW9ucworZm91bmQgaW4gdGhlIHNoYXJlZCBvYmplY3QgPHZhcj5uYW1lPC92YXI+LiAgVGh1cyB0aGUgZmlsdGVyIG9iamVjdCBjYW4gYmUKK3VzZWQgdG8gc2VsZWN0IGEgc3Vic2V0IG9mIHRoZSBzeW1ib2xzIHByb3ZpZGVkIGJ5IHRoZSBvYmplY3QKKzx2YXI+bmFtZTwvdmFyPi4KKworICAgICA8cD5Tb21lIG9sZGVyIGxpbmtlcnMgdXNlZCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUY8L3NwYW4+PC9zYW1wPiBvcHRpb24gdGhyb3VnaG91dCBhIGNvbXBpbGF0aW9uCit0b29sY2hhaW4gZm9yIHNwZWNpZnlpbmcgb2JqZWN0LWZpbGUgZm9ybWF0IGZvciBib3RoIGlucHV0IGFuZCBvdXRwdXQKK29iamVjdCBmaWxlcy4gCitUaGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGxpbmtlciB1c2VzIG90aGVyIG1lY2hhbmlzbXMgZm9yIHRoaXMgcHVycG9zZTogdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tYjwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWZvcm1hdDwvc3Bhbj48L3NhbXA+LCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW9mb3JtYXQ8L3NwYW4+PC9zYW1wPiBvcHRpb25zLCB0aGUKKzxjb2RlPlRBUkdFVDwvY29kZT4gY29tbWFuZCBpbiBsaW5rZXIgc2NyaXB0cywgYW5kIHRoZSA8Y29kZT5HTlVUQVJHRVQ8L2NvZGU+CitlbnZpcm9ubWVudCB2YXJpYWJsZS4gCitUaGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGxpbmtlciB3aWxsIGlnbm9yZSB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUY8L3NwYW4+PC9zYW1wPiBvcHRpb24gd2hlbiBub3QKK2NyZWF0aW5nIGFuIEVMRiBzaGFyZWQgb2JqZWN0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWZpbmFsaXphdGlvbi1mdW5jdGlvbi00NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkZmluaV8wMDNkXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC00NSI+PC9hPjxicj48ZHQ+PGNvZGU+LWZpbmk9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD5XaGVuIGNyZWF0aW5nIGFuIEVMRiBleGVjdXRhYmxlIG9yIHNoYXJlZCBvYmplY3QsIGNhbGwgTkFNRSB3aGVuIHRoZQorZXhlY3V0YWJsZSBvciBzaGFyZWQgb2JqZWN0IGlzIHVubG9hZGVkLCBieSBzZXR0aW5nIERUX0ZJTkkgdG8gdGhlCithZGRyZXNzIG9mIHRoZSBmdW5jdGlvbi4gIEJ5IGRlZmF1bHQsIHRoZSBsaW5rZXIgdXNlcyA8Y29kZT5fZmluaTwvY29kZT4gYXMKK3RoZSBmdW5jdGlvbiB0byBjYWxsLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkZy00NiI+PC9hPjxicj48ZHQ+PGNvZGU+LWc8L2NvZGU+PGRkPklnbm9yZWQuICBQcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHRvb2xzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkRy1fMDA0MHZhcl8wMDdidmFsdWVfMDA3ZC00NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRncHNpemVfMDAzZF8wMDQwdmFyXzAwN2J2YWx1ZV8wMDdkLTQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtb2JqZWN0LXNpemUtNDkiPjwvYT48YnI+PGR0Pjxjb2RlPi1HIDwvY29kZT48dmFyPnZhbHVlPC92YXI+PGR0Pjxjb2RlPi0tZ3BzaXplPTwvY29kZT48dmFyPnZhbHVlPC92YXI+PGRkPlNldCB0aGUgbWF4aW11bSBzaXplIG9mIG9iamVjdHMgdG8gYmUgb3B0aW1pemVkIHVzaW5nIHRoZSBHUCByZWdpc3RlciB0bworPHZhcj5zaXplPC92YXI+LiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIG9iamVjdCBmaWxlIGZvcm1hdHMgc3VjaCBhcworTUlQUyBFQ09GRiB3aGljaCBzdXBwb3J0cyBwdXR0aW5nIGxhcmdlIGFuZCBzbWFsbCBvYmplY3RzIGludG8gZGlmZmVyZW50CitzZWN0aW9ucy4gIFRoaXMgaXMgaWdub3JlZCBmb3Igb3RoZXIgb2JqZWN0IGZpbGUgZm9ybWF0cy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1ydW50aW1lLWxpYnJhcnktbmFtZS01MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkaC1fMDA0MHZhcl8wMDdibmFtZV8wMDdkLTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRzb25hbWVfMDAzZF8wMDQwdmFyXzAwN2JuYW1lXzAwN2QtNTIiPjwvYT48YnI+PGR0Pjxjb2RlPi1oIDwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZHQ+PGNvZGU+LXNvbmFtZT08L2NvZGU+PHZhcj5uYW1lPC92YXI+PGRkPldoZW4gY3JlYXRpbmcgYW4gRUxGIHNoYXJlZCBvYmplY3QsIHNldCB0aGUgaW50ZXJuYWwgRFRfU09OQU1FIGZpZWxkIHRvCit0aGUgc3BlY2lmaWVkIG5hbWUuICBXaGVuIGFuIGV4ZWN1dGFibGUgaXMgbGlua2VkIHdpdGggYSBzaGFyZWQgb2JqZWN0Cit3aGljaCBoYXMgYSBEVF9TT05BTUUgZmllbGQsIHRoZW4gd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBydW4gdGhlIGR5bmFtaWMKK2xpbmtlciB3aWxsIGF0dGVtcHQgdG8gbG9hZCB0aGUgc2hhcmVkIG9iamVjdCBzcGVjaWZpZWQgYnkgdGhlIERUX1NPTkFNRQorZmllbGQgcmF0aGVyIHRoYW4gdGhlIHVzaW5nIHRoZSBmaWxlIG5hbWUgZ2l2ZW4gdG8gdGhlIGxpbmtlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGktNTMiPjwvYT48YSBuYW1lPSJpbmRleC1pbmNyZW1lbnRhbC1saW5rLTU0Ij48L2E+PGJyPjxkdD48Y29kZT4taTwvY29kZT48ZGQ+UGVyZm9ybSBhbiBpbmNyZW1lbnRhbCBsaW5rIChzYW1lIGFzIG9wdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1yPC9zcGFuPjwvc2FtcD4mcnNxdW87KS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1pbml0aWFsaXphdGlvbi1mdW5jdGlvbi01NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkaW5pdF8wMDNkXzAwNDB2YXJfMDA3Ym5hbWVfMDA3ZC01NiI+PC9hPjxicj48ZHQ+PGNvZGU+LWluaXQ9PC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxkZD5XaGVuIGNyZWF0aW5nIGFuIEVMRiBleGVjdXRhYmxlIG9yIHNoYXJlZCBvYmplY3QsIGNhbGwgTkFNRSB3aGVuIHRoZQorZXhlY3V0YWJsZSBvciBzaGFyZWQgb2JqZWN0IGlzIGxvYWRlZCwgYnkgc2V0dGluZyBEVF9JTklUIHRvIHRoZSBhZGRyZXNzCitvZiB0aGUgZnVuY3Rpb24uICBCeSBkZWZhdWx0LCB0aGUgbGlua2VyIHVzZXMgPGNvZGU+X2luaXQ8L2NvZGU+IGFzIHRoZQorZnVuY3Rpb24gdG8gY2FsbC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1hcmNoaXZlLWZpbGVzXzAwMmMtZnJvbS1jbWQtbGluZS01NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbC1fMDA0MHZhcl8wMDdibmFtZXNwZWNfMDA3ZC01OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRsaWJyYXJ5XzAwM2RfMDA0MHZhcl8wMDdibmFtZXNwZWNfMDA3ZC01OSI+PC9hPjxicj48ZHQ+PGNvZGU+LWwgPC9jb2RlPjx2YXI+bmFtZXNwZWM8L3Zhcj48ZHQ+PGNvZGU+LS1saWJyYXJ5PTwvY29kZT48dmFyPm5hbWVzcGVjPC92YXI+PGRkPkFkZCB0aGUgYXJjaGl2ZSBvciBvYmplY3QgZmlsZSBzcGVjaWZpZWQgYnkgPHZhcj5uYW1lc3BlYzwvdmFyPiB0byB0aGUKK2xpc3Qgb2YgZmlsZXMgdG8gbGluay4gIFRoaXMgb3B0aW9uIG1heSBiZSB1c2VkIGFueSBudW1iZXIgb2YgdGltZXMuIAorSWYgPHZhcj5uYW1lc3BlYzwvdmFyPiBpcyBvZiB0aGUgZm9ybSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Ojwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPiwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4KK3dpbGwgc2VhcmNoIHRoZSBsaWJyYXJ5IHBhdGggZm9yIGEgZmlsZSBjYWxsZWQgPHZhcj5maWxlbmFtZTwvdmFyPiwgb3RoZXJ3aXNlIGl0Cit3aWxsIHNlYXJjaCB0aGUgbGlicmFyeSBwYXRoIGZvciBhIGZpbGUgY2FsbGVkIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWI8L3NwYW4+PHZhcj5uYW1lc3BlYzwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uYTwvc3Bhbj48L3NhbXA+LgorCisgICAgIDxwPk9uIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBtYXkgYWxzbyBzZWFyY2ggZm9yCitmaWxlcyBvdGhlciB0aGFuIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWI8L3NwYW4+PHZhcj5uYW1lc3BlYzwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uYTwvc3Bhbj48L3NhbXA+LiAgU3BlY2lmaWNhbGx5LCBvbiBFTEYKK2FuZCBTdW5PUyBzeXN0ZW1zLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB3aWxsIHNlYXJjaCBhIGRpcmVjdG9yeSBmb3IgYSBsaWJyYXJ5CitjYWxsZWQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYjwvc3Bhbj48dmFyPm5hbWVzcGVjPC92YXI+PHNwYW4gY2xhc3M9ImZpbGUiPi5zbzwvc3Bhbj48L3NhbXA+IGJlZm9yZSBzZWFyY2hpbmcgZm9yIG9uZSBjYWxsZWQKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWI8L3NwYW4+PHZhcj5uYW1lc3BlYzwvdmFyPjxzcGFuIGNsYXNzPSJmaWxlIj4uYTwvc3Bhbj48L3NhbXA+LiAgKEJ5IGNvbnZlbnRpb24sIGEgPGNvZGU+LnNvPC9jb2RlPiBleHRlbnNpb24KK2luZGljYXRlcyBhIHNoYXJlZCBsaWJyYXJ5LikgIE5vdGUgdGhhdCB0aGlzIGJlaGF2aW9yIGRvZXMgbm90IGFwcGx5Cit0byA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Ojwvc3Bhbj48dmFyPmZpbGVuYW1lPC92YXI+PC9zYW1wPiwgd2hpY2ggYWx3YXlzIHNwZWNpZmllcyBhIGZpbGUgY2FsbGVkCis8dmFyPmZpbGVuYW1lPC92YXI+LgorCisgICAgIDxwPlRoZSBsaW5rZXIgd2lsbCBzZWFyY2ggYW4gYXJjaGl2ZSBvbmx5IG9uY2UsIGF0IHRoZSBsb2NhdGlvbiB3aGVyZSBpdCBpcworc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBJZiB0aGUgYXJjaGl2ZSBkZWZpbmVzIGEgc3ltYm9sIHdoaWNoCit3YXMgdW5kZWZpbmVkIGluIHNvbWUgb2JqZWN0IHdoaWNoIGFwcGVhcmVkIGJlZm9yZSB0aGUgYXJjaGl2ZSBvbiB0aGUKK2NvbW1hbmQgbGluZSwgdGhlIGxpbmtlciB3aWxsIGluY2x1ZGUgdGhlIGFwcHJvcHJpYXRlIGZpbGUocykgZnJvbSB0aGUKK2FyY2hpdmUuICBIb3dldmVyLCBhbiB1bmRlZmluZWQgc3ltYm9sIGluIGFuIG9iamVjdCBhcHBlYXJpbmcgbGF0ZXIgb24KK3RoZSBjb21tYW5kIGxpbmUgd2lsbCBub3QgY2F1c2UgdGhlIGxpbmtlciB0byBzZWFyY2ggdGhlIGFyY2hpdmUgYWdhaW4uCisKKyAgICAgPHA+U2VlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tKDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBmb3IgYSB3YXkgdG8gZm9yY2UgdGhlIGxpbmtlciB0byBzZWFyY2gKK2FyY2hpdmVzIG11bHRpcGxlIHRpbWVzLgorCisgICAgIDxwPllvdSBtYXkgbGlzdCB0aGUgc2FtZSBhcmNoaXZlIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgICAgPHA+VGhpcyB0eXBlIG9mIGFyY2hpdmUgc2VhcmNoaW5nIGlzIHN0YW5kYXJkIGZvciBVbml4IGxpbmtlcnMuICBIb3dldmVyLAoraWYgeW91IGFyZSB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBvbiBBSVgsIG5vdGUgdGhhdCBpdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKK2JlaGF2aW91ciBvZiB0aGUgQUlYIGxpbmtlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1zZWFyY2gtZGlyZWN0b3J5XzAwMmMtZnJvbS1jbWQtbGluZS02MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkTC1fMDA0MHZhcl8wMDdiZGlyXzAwN2QtNjEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbGlicmFyeV8wMDJkcGF0aF8wMDNkXzAwNDB2YXJfMDA3YmRpcl8wMDdkLTYyIj48L2E+PGJyPjxkdD48Y29kZT4tTCA8L2NvZGU+PHZhcj5zZWFyY2hkaXI8L3Zhcj48ZHQ+PGNvZGU+LS1saWJyYXJ5LXBhdGg9PC9jb2RlPjx2YXI+c2VhcmNoZGlyPC92YXI+PGRkPkFkZCBwYXRoIDx2YXI+c2VhcmNoZGlyPC92YXI+IHRvIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gd2lsbCBzZWFyY2gKK2ZvciBhcmNoaXZlIGxpYnJhcmllcyBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gY29udHJvbCBzY3JpcHRzLiAgWW91IG1heSB1c2UgdGhpcworb3B0aW9uIGFueSBudW1iZXIgb2YgdGltZXMuICBUaGUgZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGluIHRoZSBvcmRlcgoraW4gd2hpY2ggdGhleSBhcmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBEaXJlY3RvcmllcyBzcGVjaWZpZWQKK29uIHRoZSBjb21tYW5kIGxpbmUgYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgZGVmYXVsdCBkaXJlY3Rvcmllcy4gIEFsbAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUw8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFwcGx5IHRvIGFsbCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlCitvcmRlciBpbiB3aGljaCB0aGUgb3B0aW9ucyBhcHBlYXIuICA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgZG8gbm90IGFmZmVjdAoraG93IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHNlYXJjaGVzIGZvciBhIGxpbmtlciBzY3JpcHQgdW5sZXNzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1UPC9zcGFuPjwvc2FtcD4KK29wdGlvbiBpcyBzcGVjaWZpZWQuCisKKyAgICAgPHA+SWYgPHZhcj5zZWFyY2hkaXI8L3Zhcj4gYmVnaW5zIHdpdGggPGNvZGU+PTwvY29kZT4sIHRoZW4gdGhlIDxjb2RlPj08L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQKK2J5IHRoZSA8ZGZuPnN5c3Jvb3QgcHJlZml4PC9kZm4+LCBhIHBhdGggc3BlY2lmaWVkIHdoZW4gdGhlIGxpbmtlciBpcyBjb25maWd1cmVkLgorCisgICAgIDxwPlRoZSBkZWZhdWx0IHNldCBvZiBwYXRocyBzZWFyY2hlZCAod2l0aG91dCBiZWluZyBzcGVjaWZpZWQgd2l0aAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tTDwvc3Bhbj48L3NhbXA+JnJzcXVvOykgZGVwZW5kcyBvbiB3aGljaCBlbXVsYXRpb24gbW9kZSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBpcyB1c2luZywgYW5kIGluCitzb21lIGNhc2VzIGFsc28gb24gaG93IGl0IHdhcyBjb25maWd1cmVkLiAgU2VlIDxhIGhyZWY9IkVudmlyb25tZW50Lmh0bWwjRW52aXJvbm1lbnQiPkVudmlyb25tZW50PC9hPi4KKworICAgICA8cD5UaGUgcGF0aHMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluIGEgbGluayBzY3JpcHQgd2l0aCB0aGUKKzxjb2RlPlNFQVJDSF9ESVI8L2NvZGU+IGNvbW1hbmQuICBEaXJlY3RvcmllcyBzcGVjaWZpZWQgdGhpcyB3YXkgYXJlIHNlYXJjaGVkCithdCB0aGUgcG9pbnQgaW4gd2hpY2ggdGhlIGxpbmtlciBzY3JpcHQgYXBwZWFycyBpbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWVtdWxhdGlvbi02MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbS1fMDA0MHZhcl8wMDdiZW11bGF0aW9uXzAwN2QtNjQiPjwvYT48YnI+PGR0Pjxjb2RlPi1tIDwvY29kZT48dmFyPmVtdWxhdGlvbjwvdmFyPjxkZD5FbXVsYXRlIHRoZSA8dmFyPmVtdWxhdGlvbjwvdmFyPiBsaW5rZXIuICBZb3UgY2FuIGxpc3QgdGhlIGF2YWlsYWJsZQorZW11bGF0aW9ucyB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tdmVyYm9zZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1WPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbnMuCisKKyAgICAgPHA+SWYgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW08L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGUgZW11bGF0aW9uIGlzIHRha2VuIGZyb20gdGhlCis8Y29kZT5MREVNVUxBVElPTjwvY29kZT4gZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHRoYXQgaXMgZGVmaW5lZC4KKworICAgICA8cD5PdGhlcndpc2UsIHRoZSBkZWZhdWx0IGVtdWxhdGlvbiBkZXBlbmRzIHVwb24gaG93IHRoZSBsaW5rZXIgd2FzCitjb25maWd1cmVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWxpbmstbWFwLTY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRNLTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHByaW50XzAwMmRtYXAtNjciPjwvYT48YnI+PGR0Pjxjb2RlPi1NPC9jb2RlPjxkdD48Y29kZT4tLXByaW50LW1hcDwvY29kZT48ZGQ+UHJpbnQgYSBsaW5rIG1hcCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgQSBsaW5rIG1hcCBwcm92aWRlcworaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmssIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nOgorCisgICAgICAgICAgPHVsPgorPGxpPldoZXJlIG9iamVjdCBmaWxlcyBhcmUgbWFwcGVkIGludG8gbWVtb3J5LiAKKzxsaT5Ib3cgY29tbW9uIHN5bWJvbHMgYXJlIGFsbG9jYXRlZC4gCis8bGk+QWxsIGFyY2hpdmUgbWVtYmVycyBpbmNsdWRlZCBpbiB0aGUgbGluaywgd2l0aCBhIG1lbnRpb24gb2YgdGhlIHN5bWJvbAord2hpY2ggY2F1c2VkIHRoZSBhcmNoaXZlIG1lbWJlciB0byBiZSBicm91Z2h0IGluLiAKKzxsaT5UaGUgdmFsdWVzIGFzc2lnbmVkIHRvIHN5bWJvbHMuCisKKyAgICAgICAgICA8cD5Ob3RlIC0gc3ltYm9scyB3aG9zZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJ5IGFuIGV4cHJlc3Npb24gd2hpY2gKK2ludm9sdmVzIGEgcmVmZXJlbmNlIHRvIGEgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHNhbWUgc3ltYm9sIG1heSBub3QKK2hhdmUgY29ycmVjdCByZXN1bHQgZGlzcGxheWVkIGluIHRoZSBsaW5rIG1hcC4gIFRoaXMgaXMgYmVjYXVzZSB0aGUKK2xpbmtlciBkaXNjYXJkcyBpbnRlcm1lZGlhdGUgcmVzdWx0cyBhbmQgb25seSByZXRhaW5zIHRoZSBmaW5hbCB2YWx1ZQorb2YgYW4gZXhwcmVzc2lvbi4gIFVuZGVyIHN1Y2ggY2lyY3Vtc3RhbmNlcyB0aGUgbGlua2VyIHdpbGwgZGlzcGxheQordGhlIGZpbmFsIHZhbHVlIGVuY2xvc2VkIGJ5IHNxdWFyZSBicmFja2V0cy4gIFRodXMgZm9yIGV4YW1wbGUgYQorbGlua2VyIHNjcmlwdCBjb250YWluaW5nOgorCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAgICBmb28gPSAxCisgICAgICAgICAgICAgICAgICBmb28gPSBmb28gKiA0CisgICAgICAgICAgICAgICAgICBmb28gPSBmb28gKyA4Cis8L3ByZT4KKyAgICAgICAgICA8cD53aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBvdXRwdXQgaW4gdGhlIGxpbmsgbWFwIGlmIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+CitvcHRpb24gaXMgdXNlZDoKKworICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgICAgICAgICAgICAgICBmb28gPSAweDEKKyAgICAgICAgICAgICAgICAgIFsweDAwMDAwMDBjXSAgICAgICAgICAgICAgICBmb28gPSAoZm9vICogMHg0KQorICAgICAgICAgICAgICAgICAgWzB4MDAwMDAwMGNdICAgICAgICAgICAgICAgIGZvbyA9IChmb28gKyAweDgpCis8L3ByZT4KKyAgICAgICAgICA8cD5TZWUgPGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGV4cHJlc3Npb25zIGluIGxpbmtlcgorc2NyaXB0cy4gCis8L3VsPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbi02OCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlYWRfMDAyZG9ubHktdGV4dC02OSI+PC9hPjxhIG5hbWU9ImluZGV4LU5NQUdJQy03MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRubWFnaWMtNzEiPjwvYT48YnI+PGR0Pjxjb2RlPi1uPC9jb2RlPjxkdD48Y29kZT4tLW5tYWdpYzwvY29kZT48ZGQ+VHVybiBvZmYgcGFnZSBhbGlnbm1lbnQgb2Ygc2VjdGlvbnMsIGFuZCBkaXNhYmxlIGxpbmtpbmcgYWdhaW5zdCBzaGFyZWQKK2xpYnJhcmllcy4gIElmIHRoZSBvdXRwdXQgZm9ybWF0IHN1cHBvcnRzIFVuaXggc3R5bGUgbWFnaWMgbnVtYmVycywKK21hcmsgdGhlIG91dHB1dCBhcyA8Y29kZT5OTUFHSUM8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkTi03MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRvbWFnaWMtNzMiPjwvYT48YSBuYW1lPSJpbmRleC1yZWFkXzAwMmZ3cml0ZS1mcm9tLWNtZC1saW5lLTc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtT01BR0lDLTc1Ij48L2E+PGJyPjxkdD48Y29kZT4tTjwvY29kZT48ZHQ+PGNvZGU+LS1vbWFnaWM8L2NvZGU+PGRkPlNldCB0aGUgdGV4dCBhbmQgZGF0YSBzZWN0aW9ucyB0byBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUuICBBbHNvLCBkbworbm90IHBhZ2UtYWxpZ24gdGhlIGRhdGEgc2VnbWVudCwgYW5kIGRpc2FibGUgbGlua2luZyBhZ2FpbnN0IHNoYXJlZAorbGlicmFyaWVzLiAgSWYgdGhlIG91dHB1dCBmb3JtYXQgc3VwcG9ydHMgVW5peCBzdHlsZSBtYWdpYyBudW1iZXJzLAorbWFyayB0aGUgb3V0cHV0IGFzIDxjb2RlPk9NQUdJQzwvY29kZT4uIE5vdGU6IEFsdGhvdWdoIGEgd3JpdGFibGUgdGV4dCBzZWN0aW9uCitpcyBhbGxvd2VkIGZvciBQRS1DT0ZGIHRhcmdldHMsIGl0IGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIGZvcm1hdAorc3BlY2lmaWNhdGlvbiBwdWJsaXNoZWQgYnkgTWljcm9zb2Z0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkb21hZ2ljLTc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtT01BR0lDLTc3Ij48L2E+PGJyPjxkdD48Y29kZT4tLW5vLW9tYWdpYzwvY29kZT48ZGQ+VGhpcyBvcHRpb24gbmVnYXRlcyBtb3N0IG9mIHRoZSBlZmZlY3RzIG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTjwvc3Bhbj48L3NhbXA+IG9wdGlvbi4gIEl0CitzZXRzIHRoZSB0ZXh0IHNlY3Rpb24gdG8gYmUgcmVhZC1vbmx5LCBhbmQgZm9yY2VzIHRoZSBkYXRhIHNlZ21lbnQgdG8KK2JlIHBhZ2UtYWxpZ25lZC4gIE5vdGUgLSB0aGlzIG9wdGlvbiBkb2VzIG5vdCBlbmFibGUgbGlua2luZyBhZ2FpbnN0CitzaGFyZWQgbGlicmFyaWVzLiAgVXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1CZHluYW1pYzwvc3Bhbj48L3NhbXA+IGZvciB0aGlzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkby1fMDA0MHZhcl8wMDdib3V0cHV0XzAwN2QtNzgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkb3V0cHV0XzAwM2RfMDA0MHZhcl8wMDdib3V0cHV0XzAwN2QtNzkiPjwvYT48YSBuYW1lPSJpbmRleC1uYW1pbmctdGhlLW91dHB1dC1maWxlLTgwIj48L2E+PGJyPjxkdD48Y29kZT4tbyA8L2NvZGU+PHZhcj5vdXRwdXQ8L3Zhcj48ZHQ+PGNvZGU+LS1vdXRwdXQ9PC9jb2RlPjx2YXI+b3V0cHV0PC92YXI+PGRkPlVzZSA8dmFyPm91dHB1dDwvdmFyPiBhcyB0aGUgbmFtZSBmb3IgdGhlIHByb2dyYW0gcHJvZHVjZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD47IGlmIHRoaXMKK29wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbmFtZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+YS5vdXQ8L3NwYW4+PC9zYW1wPiBpcyB1c2VkIGJ5IGRlZmF1bHQuICBUaGUKK3NjcmlwdCBjb21tYW5kIDxjb2RlPk9VVFBVVDwvY29kZT4gY2FuIGFsc28gc3BlY2lmeSB0aGUgb3V0cHV0IGZpbGUgbmFtZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZE8tXzAwNDB2YXJfMDA3YmxldmVsXzAwN2QtODEiPjwvYT48YSBuYW1lPSJpbmRleC1nZW5lcmF0aW5nLW9wdGltaXplZC1vdXRwdXQtODIiPjwvYT48YnI+PGR0Pjxjb2RlPi1PIDwvY29kZT48dmFyPmxldmVsPC92YXI+PGRkPklmIDx2YXI+bGV2ZWw8L3Zhcj4gaXMgYSBudW1lcmljIHZhbHVlcyBncmVhdGVyIHRoYW4gemVybyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBvcHRpbWl6ZXMKK3RoZSBvdXRwdXQuICBUaGlzIG1pZ2h0IHRha2Ugc2lnbmlmaWNhbnRseSBsb25nZXIgYW5kIHRoZXJlZm9yZSBwcm9iYWJseQorc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBmb3IgdGhlIGZpbmFsIGJpbmFyeS4gIEF0IHRoZSBtb21lbnQgdGhpcworb3B0aW9uIG9ubHkgYWZmZWN0cyBFTEYgc2hhcmVkIGxpYnJhcnkgZ2VuZXJhdGlvbi4gIEZ1dHVyZSByZWxlYXNlcyBvZgordGhlIGxpbmtlciBtYXkgbWFrZSBtb3JlIHVzZSBvZiB0aGlzIG9wdGlvbi4gIEFsc28gY3VycmVudGx5IHRoZXJlIGlzCitubyBkaWZmZXJlbmNlIGluIHRoZSBsaW5rZXIncyBiZWhhdmlvdXIgZm9yIGRpZmZlcmVudCBub24temVybyB2YWx1ZXMKK29mIHRoaXMgb3B0aW9uLiAgQWdhaW4gdGhpcyBtYXkgY2hhbmdlIHdpdGggZnV0dXJlIHJlbGVhc2VzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkcS04MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbWl0XzAwMmRyZWxvY3MtODQiPjwvYT48YSBuYW1lPSJpbmRleC1yZXRhaW4tcmVsb2NhdGlvbnMtaW4tZmluYWwtZXhlY3V0YWJsZS04NSI+PC9hPjxicj48ZHQ+PGNvZGU+LXE8L2NvZGU+PGR0Pjxjb2RlPi0tZW1pdC1yZWxvY3M8L2NvZGU+PGRkPkxlYXZlIHJlbG9jYXRpb24gc2VjdGlvbnMgYW5kIGNvbnRlbnRzIGluIGZ1bGx5IGxpbmtlZCBleGVjdXRhYmxlcy4gCitQb3N0IGxpbmsgYW5hbHlzaXMgYW5kIG9wdGltaXphdGlvbiB0b29scyBtYXkgbmVlZCB0aGlzIGluZm9ybWF0aW9uIGluCitvcmRlciB0byBwZXJmb3JtIGNvcnJlY3QgbW9kaWZpY2F0aW9ucyBvZiBleGVjdXRhYmxlcy4gIFRoaXMgcmVzdWx0cworaW4gbGFyZ2VyIGV4ZWN1dGFibGVzLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBvbiBFTEYgcGxhdGZvcm1zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRmb3JjZV8wMDJkZHluYW1pYy04NiI+PC9hPjxhIG5hbWU9ImluZGV4LWZvcmNpbmctdGhlLWNyZWF0aW9uLW9mLWR5bmFtaWMtc2VjdGlvbnMtODciPjwvYT48YnI+PGR0Pjxjb2RlPi0tZm9yY2UtZHluYW1pYzwvY29kZT48ZGQ+Rm9yY2UgdGhlIG91dHB1dCBmaWxlIHRvIGhhdmUgZHluYW1pYyBzZWN0aW9ucy4gIFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljCit0byBWeFdvcmtzIHRhcmdldHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtcGFydGlhbC1saW5rLTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVsb2NhdGFibGUtb3V0cHV0LTg5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRyLTkwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHJlbG9jYXRhYmxlLTkxIj48L2E+PGJyPjxkdD48Y29kZT4tcjwvY29kZT48ZHQ+PGNvZGU+LS1yZWxvY2F0YWJsZTwvY29kZT48ZGQ+R2VuZXJhdGUgcmVsb2NhdGFibGUgb3V0cHV0Jm1kYXNoO2kuZS4sIGdlbmVyYXRlIGFuIG91dHB1dCBmaWxlIHRoYXQgY2FuIGluCit0dXJuIHNlcnZlIGFzIGlucHV0IHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+LiAgVGhpcyBpcyBvZnRlbiBjYWxsZWQgPGRmbj5wYXJ0aWFsCitsaW5raW5nPC9kZm4+LiAgQXMgYSBzaWRlIGVmZmVjdCwgaW4gZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBzdGFuZGFyZCBVbml4CittYWdpYyBudW1iZXJzLCB0aGlzIG9wdGlvbiBhbHNvIHNldHMgdGhlIG91dHB1dCBmaWxlJ3MgbWFnaWMgbnVtYmVyIHRvCis8Y29kZT5PTUFHSUM8L2NvZGU+LiAKKzwhLS0gOyBzZWUgQG9wdGlvbnstTn0uIC0tPgorSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgYW4gYWJzb2x1dGUgZmlsZSBpcyBwcm9kdWNlZC4gIFdoZW4KK2xpbmtpbmcgQysrIHByb2dyYW1zLCB0aGlzIG9wdGlvbiA8ZW0+d2lsbCBub3Q8L2VtPiByZXNvbHZlIHJlZmVyZW5jZXMgdG8KK2NvbnN0cnVjdG9yczsgdG8gZG8gdGhhdCwgdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVVyPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPldoZW4gYW4gaW5wdXQgZmlsZSBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgb3V0cHV0IGZpbGUsCitwYXJ0aWFsIGxpbmtpbmcgaXMgb25seSBzdXBwb3J0ZWQgaWYgdGhhdCBpbnB1dCBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55CityZWxvY2F0aW9ucy4gIERpZmZlcmVudCBvdXRwdXQgZm9ybWF0cyBjYW4gaGF2ZSBmdXJ0aGVyIHJlc3RyaWN0aW9uczsgZm9yCitleGFtcGxlIHNvbWUgPGNvZGU+YS5vdXQ8L2NvZGU+LWJhc2VkIGZvcm1hdHMgZG8gbm90IHN1cHBvcnQgcGFydGlhbCBsaW5raW5nCit3aXRoIGlucHV0IGZpbGVzIGluIG90aGVyIGZvcm1hdHMgYXQgYWxsLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4taTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZFItXzAwNDB2YXJfMDA3YmZpbGVfMDA3ZC05MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRqdXN0XzAwMmRzeW1ib2xzXzAwM2RfMDA0MHZhcl8wMDdiZmlsZV8wMDdkLTkzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ltYm9sXzAwMmRvbmx5LWlucHV0LTk0Ij48L2E+PGJyPjxkdD48Y29kZT4tUiA8L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxkdD48Y29kZT4tLWp1c3Qtc3ltYm9scz08L2NvZGU+PHZhcj5maWxlbmFtZTwvdmFyPjxkZD5SZWFkIHN5bWJvbCBuYW1lcyBhbmQgdGhlaXIgYWRkcmVzc2VzIGZyb20gPHZhcj5maWxlbmFtZTwvdmFyPiwgYnV0IGRvIG5vdAorcmVsb2NhdGUgaXQgb3IgaW5jbHVkZSBpdCBpbiB0aGUgb3V0cHV0LiAgVGhpcyBhbGxvd3MgeW91ciBvdXRwdXQgZmlsZQordG8gcmVmZXIgc3ltYm9saWNhbGx5IHRvIGFic29sdXRlIGxvY2F0aW9ucyBvZiBtZW1vcnkgZGVmaW5lZCBpbiBvdGhlcgorcHJvZ3JhbXMuICBZb3UgbWF5IHVzZSB0aGlzIG9wdGlvbiBtb3JlIHRoYW4gb25jZS4KKworICAgICA8cD5Gb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIEVMRiBsaW5rZXJzLCBpZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVI8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMKK2ZvbGxvd2VkIGJ5IGEgZGlyZWN0b3J5IG5hbWUsIHJhdGhlciB0aGFuIGEgZmlsZSBuYW1lLCBpdCBpcyB0cmVhdGVkIGFzCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXJwYXRoPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkcy05NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRzdHJpcF8wMDJkYWxsLTk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaXAtYWxsLXN5bWJvbHMtOTciPjwvYT48YnI+PGR0Pjxjb2RlPi1zPC9jb2RlPjxkdD48Y29kZT4tLXN0cmlwLWFsbDwvY29kZT48ZGQ+T21pdCBhbGwgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gdGhlIG91dHB1dCBmaWxlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkUy05OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRzdHJpcF8wMDJkZGVidWctOTkiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJpcC1kZWJ1Z2dlci1zeW1ib2xzLTEwMCI+PC9hPjxicj48ZHQ+PGNvZGU+LVM8L2NvZGU+PGR0Pjxjb2RlPi0tc3RyaXAtZGVidWc8L2NvZGU+PGRkPk9taXQgZGVidWdnZXIgc3ltYm9sIGluZm9ybWF0aW9uIChidXQgbm90IGFsbCBzeW1ib2xzKSBmcm9tIHRoZSBvdXRwdXQgZmlsZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZHQtMTAxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHRyYWNlLTEwMiI+PC9hPjxhIG5hbWU9ImluZGV4LWlucHV0LWZpbGVzXzAwMmMtZGlzcGxheWluZy0xMDMiPjwvYT48YnI+PGR0Pjxjb2RlPi10PC9jb2RlPjxkdD48Y29kZT4tLXRyYWNlPC9jb2RlPjxkZD5QcmludCB0aGUgbmFtZXMgb2YgdGhlIGlucHV0IGZpbGVzIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHByb2Nlc3NlcyB0aGVtLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkVC1fMDA0MHZhcl8wMDdic2NyaXB0XzAwN2QtMTA0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHNjcmlwdF8wMDNkXzAwNDB2YXJfMDA3YnNjcmlwdF8wMDdkLTEwNSI+PC9hPjxhIG5hbWU9ImluZGV4LXNjcmlwdC1maWxlcy0xMDYiPjwvYT48YnI+PGR0Pjxjb2RlPi1UIDwvY29kZT48dmFyPnNjcmlwdGZpbGU8L3Zhcj48ZHQ+PGNvZGU+LS1zY3JpcHQ9PC9jb2RlPjx2YXI+c2NyaXB0ZmlsZTwvdmFyPjxkZD5Vc2UgPHZhcj5zY3JpcHRmaWxlPC92YXI+IGFzIHRoZSBsaW5rZXIgc2NyaXB0LiAgVGhpcyBzY3JpcHQgcmVwbGFjZXMKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+J3MgZGVmYXVsdCBsaW5rZXIgc2NyaXB0IChyYXRoZXIgdGhhbiBhZGRpbmcgdG8gaXQpLCBzbworPHZhcj5jb21tYW5kZmlsZTwvdmFyPiBtdXN0IHNwZWNpZnkgZXZlcnl0aGluZyBuZWNlc3NhcnkgdG8gZGVzY3JpYmUgdGhlCitvdXRwdXQgZmlsZS4gIFNlZSA8YSBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyI+U2NyaXB0czwvYT4uICBJZiA8dmFyPnNjcmlwdGZpbGU8L3Zhcj4gZG9lcyBub3QgZXhpc3QgaW4KK3RoZSBjdXJyZW50IGRpcmVjdG9yeSwgPGNvZGU+bGQ8L2NvZGU+IGxvb2tzIGZvciBpdCBpbiB0aGUgZGlyZWN0b3JpZXMKK3NwZWNpZmllZCBieSBhbnkgcHJlY2VkaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9ucy4gIE11bHRpcGxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK29wdGlvbnMgYWNjdW11bGF0ZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGRULV8wMDQwdmFyXzAwN2JzY3JpcHRfMDA3ZC0xMDciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZGVmYXVsdF8wMDJkc2NyaXB0XzAwM2RfMDA0MHZhcl8wMDdic2NyaXB0XzAwN2QtMTA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2NyaXB0LWZpbGVzLTEwOSI+PC9hPjxicj48ZHQ+PGNvZGU+LWRUIDwvY29kZT48dmFyPnNjcmlwdGZpbGU8L3Zhcj48ZHQ+PGNvZGU+LS1kZWZhdWx0LXNjcmlwdD08L2NvZGU+PHZhcj5zY3JpcHRmaWxlPC92YXI+PGRkPlVzZSA8dmFyPnNjcmlwdGZpbGU8L3Zhcj4gYXMgdGhlIGRlZmF1bHQgbGlua2VyIHNjcmlwdC4gIFNlZSA8YSBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyI+U2NyaXB0czwvYT4uCisKKyAgICAgPHA+VGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zY3JpcHQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gZXhjZXB0IHRoYXQKK3Byb2Nlc3Npbmcgb2YgdGhlIHNjcmlwdCBpcyBkZWxheWVkIHVudGlsIGFmdGVyIHRoZSByZXN0IG9mIHRoZQorY29tbWFuZCBsaW5lIGhhcyBiZWVuIHByb2Nlc3NlZC4gIFRoaXMgYWxsb3dzIG9wdGlvbnMgcGxhY2VkIGFmdGVyIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1kZWZhdWx0LXNjcmlwdDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lIHRvIGFmZmVjdCB0aGUKK2JlaGF2aW91ciBvZiB0aGUgbGlua2VyIHNjcmlwdCwgd2hpY2ggY2FuIGJlIGltcG9ydGFudCB3aGVuIHRoZSBsaW5rZXIKK2NvbW1hbmQgbGluZSBjYW5ub3QgYmUgZGlyZWN0bHkgY29udHJvbGxlZCBieSB0aGUgdXNlci4gIChlZyBiZWNhdXNlCit0aGUgY29tbWFuZCBsaW5lIGlzIGJlaW5nIGNvbnN0cnVjdGVkIGJ5IGFub3RoZXIgdG9vbCwgc3VjaCBhcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5nY2M8L3NwYW4+PC9zYW1wPiZyc3F1bzspLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkdS1fMDA0MHZhcl8wMDdic3ltYm9sXzAwN2QtMTEwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHVuZGVmaW5lZF8wMDNkXzAwNDB2YXJfMDA3YnN5bWJvbF8wMDdkLTExMSI+PC9hPjxhIG5hbWU9ImluZGV4LXVuZGVmaW5lZC1zeW1ib2wtMTEyIj48L2E+PGJyPjxkdD48Y29kZT4tdSA8L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48ZHQ+PGNvZGU+LS11bmRlZmluZWQ9PC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGRkPkZvcmNlIDx2YXI+c3ltYm9sPC92YXI+IHRvIGJlIGVudGVyZWQgaW4gdGhlIG91dHB1dCBmaWxlIGFzIGFuIHVuZGVmaW5lZAorc3ltYm9sLiAgRG9pbmcgdGhpcyBtYXksIGZvciBleGFtcGxlLCB0cmlnZ2VyIGxpbmtpbmcgb2YgYWRkaXRpb25hbAorbW9kdWxlcyBmcm9tIHN0YW5kYXJkIGxpYnJhcmllcy4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWF5IGJlIHJlcGVhdGVkIHdpdGgKK2RpZmZlcmVudCBvcHRpb24gYXJndW1lbnRzIHRvIGVudGVyIGFkZGl0aW9uYWwgdW5kZWZpbmVkIHN5bWJvbHMuICBUaGlzCitvcHRpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgPGNvZGU+RVhURVJOPC9jb2RlPiBsaW5rZXIgc2NyaXB0IGNvbW1hbmQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRVci0xMTMiPjwvYT48YSBuYW1lPSJpbmRleC1jb25zdHJ1Y3RvcnMtMTE0Ij48L2E+PGJyPjxkdD48Y29kZT4tVXI8L2NvZGU+PGRkPkZvciBhbnl0aGluZyBvdGhlciB0aGFuIEMrKyBwcm9ncmFtcywgdGhpcyBvcHRpb24gaXMgZXF1aXZhbGVudCB0bworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tcjwvc3Bhbj48L3NhbXA+JnJzcXVvOzogaXQgZ2VuZXJhdGVzIHJlbG9jYXRhYmxlIG91dHB1dCZtZGFzaDtpLmUuLCBhbiBvdXRwdXQgZmlsZSB0aGF0IGNhbiBpbgordHVybiBzZXJ2ZSBhcyBpbnB1dCB0byA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPi4gIFdoZW4gbGlua2luZyBDKysgcHJvZ3JhbXMsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVVyPC9zcGFuPjwvc2FtcD4mcnNxdW87Cis8ZW0+ZG9lczwvZW0+IHJlc29sdmUgcmVmZXJlbmNlcyB0byBjb25zdHJ1Y3RvcnMsIHVubGlrZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1yPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK0l0IGRvZXMgbm90IHdvcmsgdG8gdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVVyPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uIGZpbGVzIHRoYXQgd2VyZSB0aGVtc2VsdmVzIGxpbmtlZAord2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1Vcjwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgb25jZSB0aGUgY29uc3RydWN0b3IgdGFibGUgaGFzIGJlZW4gYnVpbHQsIGl0IGNhbm5vdAorYmUgYWRkZWQgdG8uICBVc2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tVXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb25seSBmb3IgdGhlIGxhc3QgcGFydGlhbCBsaW5rLCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHRoZSBvdGhlcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHVuaXF1ZV8wMDViXzAwM2RfMDA0MHZhcl8wMDdiU0VDVElPTl8wMDdkXzAwNWQtMTE1Ij48L2E+PGJyPjxkdD48Y29kZT4tLXVuaXF1ZVs9PC9jb2RlPjx2YXI+U0VDVElPTjwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPkNyZWF0ZXMgYSBzZXBhcmF0ZSBvdXRwdXQgc2VjdGlvbiBmb3IgZXZlcnkgaW5wdXQgc2VjdGlvbiBtYXRjaGluZworPHZhcj5TRUNUSU9OPC92YXI+LCBvciBpZiB0aGUgb3B0aW9uYWwgd2lsZGNhcmQgPHZhcj5TRUNUSU9OPC92YXI+IGFyZ3VtZW50IGlzCittaXNzaW5nLCBmb3IgZXZlcnkgb3JwaGFuIGlucHV0IHNlY3Rpb24uICBBbiBvcnBoYW4gc2VjdGlvbiBpcyBvbmUgbm90CitzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGluIGEgbGlua2VyIHNjcmlwdC4gIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uCittdWx0aXBsZSB0aW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lOyAgSXQgcHJldmVudHMgdGhlIG5vcm1hbCBtZXJnaW5nIG9mCitpbnB1dCBzZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIG92ZXJyaWRpbmcgb3V0cHV0IHNlY3Rpb24gYXNzaWdubWVudHMKK2luIGEgbGlua2VyIHNjcmlwdC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZHYtMTE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRWLTExNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR2ZXJzaW9uLTExOCI+PC9hPjxhIG5hbWU9ImluZGV4LXZlcnNpb24tMTE5Ij48L2E+PGJyPjxkdD48Y29kZT4tdjwvY29kZT48ZHQ+PGNvZGU+LS12ZXJzaW9uPC9jb2RlPjxkdD48Y29kZT4tVjwvY29kZT48ZGQ+RGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+LiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1WPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGFsc28KK2xpc3RzIHRoZSBzdXBwb3J0ZWQgZW11bGF0aW9ucy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZHgtMTIwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGRpc2NhcmRfMDAyZGFsbC0xMjEiPjwvYT48YSBuYW1lPSJpbmRleC1kZWxldGluZy1sb2NhbC1zeW1ib2xzLTEyMiI+PC9hPjxicj48ZHQ+PGNvZGU+LXg8L2NvZGU+PGR0Pjxjb2RlPi0tZGlzY2FyZC1hbGw8L2NvZGU+PGRkPkRlbGV0ZSBhbGwgbG9jYWwgc3ltYm9scy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZFgtMTIzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGRpc2NhcmRfMDAyZGxvY2Fscy0xMjQiPjwvYT48YSBuYW1lPSJpbmRleC1sb2NhbC1zeW1ib2xzXzAwMmMtZGVsZXRpbmctMTI1Ij48L2E+PGJyPjxkdD48Y29kZT4tWDwvY29kZT48ZHQ+PGNvZGU+LS1kaXNjYXJkLWxvY2FsczwvY29kZT48ZGQ+RGVsZXRlIGFsbCB0ZW1wb3JhcnkgbG9jYWwgc3ltYm9scy4gIChUaGVzZSBzeW1ib2xzIHN0YXJ0IHdpdGgKK3N5c3RlbS1zcGVjaWZpYyBsb2NhbCBsYWJlbCBwcmVmaXhlcywgdHlwaWNhbGx5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lkw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIEVMRiBzeXN0ZW1zCitvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZm9yIHRyYWRpdGlvbmFsIGEub3V0IHN5c3RlbXMuKQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkeS1fMDA0MHZhcl8wMDdic3ltYm9sXzAwN2QtMTI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHRyYWNlXzAwMmRzeW1ib2xfMDAzZF8wMDQwdmFyXzAwN2JzeW1ib2xfMDA3ZC0xMjciPjwvYT48YSBuYW1lPSJpbmRleC1zeW1ib2wtdHJhY2luZy0xMjgiPjwvYT48YnI+PGR0Pjxjb2RlPi15IDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxkdD48Y29kZT4tLXRyYWNlLXN5bWJvbD08L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj48ZGQ+UHJpbnQgdGhlIG5hbWUgb2YgZWFjaCBsaW5rZWQgZmlsZSBpbiB3aGljaCA8dmFyPnN5bWJvbDwvdmFyPiBhcHBlYXJzLiAgVGhpcworb3B0aW9uIG1heSBiZSBnaXZlbiBhbnkgbnVtYmVyIG9mIHRpbWVzLiAgT24gbWFueSBzeXN0ZW1zIGl0IGlzIG5lY2Vzc2FyeQordG8gcHJlcGVuZCBhbiB1bmRlcnNjb3JlLgorCisgICAgIDxwPlRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSBoYXZlIGFuIHVuZGVmaW5lZCBzeW1ib2wgaW4geW91ciBsaW5rIGJ1dAorZG9uJ3Qga25vdyB3aGVyZSB0aGUgcmVmZXJlbmNlIGlzIGNvbWluZyBmcm9tLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkWS1fMDA0MHZhcl8wMDdicGF0aF8wMDdkLTEyOSI+PC9hPjxicj48ZHQ+PGNvZGU+LVkgPC9jb2RlPjx2YXI+cGF0aDwvdmFyPjxkZD5BZGQgPHZhcj5wYXRoPC92YXI+IHRvIHRoZSBkZWZhdWx0IGxpYnJhcnkgc2VhcmNoIHBhdGguICBUaGlzIG9wdGlvbiBleGlzdHMKK2ZvciBTb2xhcmlzIGNvbXBhdGliaWxpdHkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmR6LV8wMDQwdmFyXzAwN2JrZXl3b3JkXzAwN2QtMTMwIj48L2E+PGJyPjxkdD48Y29kZT4teiA8L2NvZGU+PHZhcj5rZXl3b3JkPC92YXI+PGRkPlRoZSByZWNvZ25pemVkIGtleXdvcmRzIGFyZToKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jb21icmVsb2M8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+Q29tYmluZXMgbXVsdGlwbGUgcmVsb2Mgc2VjdGlvbnMgYW5kIHNvcnRzIHRoZW0gdG8gbWFrZSBkeW5hbWljIHN5bWJvbAorbG9va3VwIGNhY2hpbmcgcG9zc2libGUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZGVmczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EaXNhbGxvd3MgdW5kZWZpbmVkIHN5bWJvbHMgaW4gb2JqZWN0IGZpbGVzLiAgVW5kZWZpbmVkIHN5bWJvbHMgaW4KK3NoYXJlZCBsaWJyYXJpZXMgYXJlIHN0aWxsIGFsbG93ZWQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXhlY3N0YWNrPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPk1hcmtzIHRoZSBvYmplY3QgYXMgcmVxdWlyaW5nIGV4ZWN1dGFibGUgc3RhY2suCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aW5pdGZpcnN0PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPlRoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuIGJ1aWxkaW5nIGEgc2hhcmVkIG9iamVjdC4gCitJdCBtYXJrcyB0aGUgb2JqZWN0IHNvIHRoYXQgaXRzIHJ1bnRpbWUgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1cgorYmVmb3JlIHRoZSBydW50aW1lIGluaXRpYWxpemF0aW9uIG9mIGFueSBvdGhlciBvYmplY3RzIGJyb3VnaHQgaW50bwordGhlIHByb2Nlc3MgYXQgdGhlIHNhbWUgdGltZS4gIFNpbWlsYXJseSB0aGUgcnVudGltZSBmaW5hbGl6YXRpb24gb2YKK3RoZSBvYmplY3Qgd2lsbCBvY2N1ciBhZnRlciB0aGUgcnVudGltZSBmaW5hbGl6YXRpb24gb2YgYW55IG90aGVyCitvYmplY3RzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludGVycG9zZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5NYXJrcyB0aGUgb2JqZWN0IHRoYXQgaXRzIHN5bWJvbCB0YWJsZSBpbnRlcnBvc2VzIGJlZm9yZSBhbGwgc3ltYm9scworYnV0IHRoZSBwcmltYXJ5IGV4ZWN1dGFibGUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGF6eTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5XaGVuIGdlbmVyYXRpbmcgYW4gZXhlY3V0YWJsZSBvciBzaGFyZWQgbGlicmFyeSwgbWFyayBpdCB0byB0ZWxsIHRoZQorZHluYW1pYyBsaW5rZXIgdG8gZGVmZXIgZnVuY3Rpb24gY2FsbCByZXNvbHV0aW9uIHRvIHRoZSBwb2ludCB3aGVuCit0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIChsYXp5IGJpbmRpbmcpLCByYXRoZXIgdGhhbiBhdCBsb2FkIHRpbWUuIAorTGF6eSBiaW5kaW5nIGlzIHRoZSBkZWZhdWx0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvYWRmbHRyPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPk1hcmtzICB0aGUgb2JqZWN0IHRoYXQgaXRzIGZpbHRlcnMgYmUgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5IGF0CitydW50aW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11bGRlZnM8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QWxsb3dzIG11bHRpcGxlIGRlZmluaXRpb25zLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vY29tYnJlbG9jPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkRpc2FibGVzIG11bHRpcGxlIHJlbG9jIHNlY3Rpb25zIGNvbWJpbmluZy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub2NvcHlyZWxvYzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EaXNhYmxlcyBwcm9kdWN0aW9uIG9mIGNvcHkgcmVsb2NzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vZGVmYXVsdGxpYjwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5NYXJrcyB0aGUgb2JqZWN0IHRoYXQgdGhlIHNlYXJjaCBmb3IgZGVwZW5kZW5jaWVzIG9mIHRoaXMgb2JqZWN0IHdpbGwKK2lnbm9yZSBhbnkgZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRocy4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub2RlbGV0ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5NYXJrcyB0aGUgb2JqZWN0IHNob3VsZG4ndCBiZSB1bmxvYWRlZCBhdCBydW50aW1lLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vZGxvcGVuPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPk1hcmtzIHRoZSBvYmplY3Qgbm90IGF2YWlsYWJsZSB0byA8Y29kZT5kbG9wZW48L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm5vZHVtcDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5NYXJrcyB0aGUgb2JqZWN0IGNhbiBub3QgYmUgZHVtcGVkIGJ5IDxjb2RlPmRsZHVtcDwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9leGVjc3RhY2s8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+TWFya3MgdGhlIG9iamVjdCBhcyBub3QgcmVxdWlyaW5nIGV4ZWN1dGFibGUgc3RhY2suCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bm9yZWxybzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5Eb24ndCBjcmVhdGUgYW4gRUxGIDxjb2RlPlBUX0dOVV9SRUxSTzwvY29kZT4gc2VnbWVudCBoZWFkZXIgaW4gdGhlIG9iamVjdC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ub3c8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+V2hlbiBnZW5lcmF0aW5nIGFuIGV4ZWN1dGFibGUgb3Igc2hhcmVkIGxpYnJhcnksIG1hcmsgaXQgdG8gdGVsbCB0aGUKK2R5bmFtaWMgbGlua2VyIHRvIHJlc29sdmUgYWxsIHN5bWJvbHMgd2hlbiB0aGUgcHJvZ3JhbSBpcyBzdGFydGVkLCBvcgord2hlbiB0aGUgc2hhcmVkIGxpYnJhcnkgaXMgbGlua2VkIHRvIHVzaW5nIGRsb3BlbiwgaW5zdGVhZCBvZgorZGVmZXJyaW5nIGZ1bmN0aW9uIGNhbGwgcmVzb2x1dGlvbiB0byB0aGUgcG9pbnQgd2hlbiB0aGUgZnVuY3Rpb24gaXMKK2ZpcnN0IGNhbGxlZC4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcmlnaW48L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+TWFya3MgdGhlIG9iamVjdCBtYXkgY29udGFpbiAkT1JJR0lOLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnJlbHJvPC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkNyZWF0ZSBhbiBFTEYgPGNvZGU+UFRfR05VX1JFTFJPPC9jb2RlPiBzZWdtZW50IGhlYWRlciBpbiB0aGUgb2JqZWN0LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm1heC1wYWdlLXNpemU9PC9zcGFuPjx2YXI+dmFsdWU8L3Zhcj48L3NhbXA+JnJzcXVvOzxkZD5TZXQgdGhlIGVtdWxhdGlvbiBtYXhpbXVtIHBhZ2Ugc2l6ZSB0byA8dmFyPnZhbHVlPC92YXI+LgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmNvbW1vbi1wYWdlLXNpemU9PC9zcGFuPjx2YXI+dmFsdWU8L3Zhcj48L3NhbXA+JnJzcXVvOzxkZD5TZXQgdGhlIGVtdWxhdGlvbiBjb21tb24gcGFnZSBzaXplIHRvIDx2YXI+dmFsdWU8L3Zhcj4uCisKKyAgICAgPC9kbD4KKworICAgICA8cD5PdGhlciBrZXl3b3JkcyBhcmUgaWdub3JlZCBmb3IgU29sYXJpcyBjb21wYXRpYmlsaXR5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMjgtMTMxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ3JvdXBzLW9mLWFyY2hpdmVzLTEzMiI+PC9hPjxicj48ZHQ+PGNvZGU+LSggPC9jb2RlPjx2YXI+YXJjaGl2ZXM8L3Zhcj48Y29kZT4gLSk8L2NvZGU+PGR0Pjxjb2RlPi0tc3RhcnQtZ3JvdXAgPC9jb2RlPjx2YXI+YXJjaGl2ZXM8L3Zhcj48Y29kZT4gLS1lbmQtZ3JvdXA8L2NvZGU+PGRkPlRoZSA8dmFyPmFyY2hpdmVzPC92YXI+IHNob3VsZCBiZSBhIGxpc3Qgb2YgYXJjaGl2ZSBmaWxlcy4gIFRoZXkgbWF5IGJlCitlaXRoZXIgZXhwbGljaXQgZmlsZSBuYW1lcywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb25zLgorCisgICAgIDxwPlRoZSBzcGVjaWZpZWQgYXJjaGl2ZXMgYXJlIHNlYXJjaGVkIHJlcGVhdGVkbHkgdW50aWwgbm8gbmV3IHVuZGVmaW5lZAorcmVmZXJlbmNlcyBhcmUgY3JlYXRlZC4gIE5vcm1hbGx5LCBhbiBhcmNoaXZlIGlzIHNlYXJjaGVkIG9ubHkgb25jZSBpbgordGhlIG9yZGVyIHRoYXQgaXQgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBJZiBhIHN5bWJvbCBpbiB0aGF0CithcmNoaXZlIGlzIG5lZWRlZCB0byByZXNvbHZlIGFuIHVuZGVmaW5lZCBzeW1ib2wgcmVmZXJyZWQgdG8gYnkgYW4KK29iamVjdCBpbiBhbiBhcmNoaXZlIHRoYXQgYXBwZWFycyBsYXRlciBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgbGlua2VyCit3b3VsZCBub3QgYmUgYWJsZSB0byByZXNvbHZlIHRoYXQgcmVmZXJlbmNlLiAgQnkgZ3JvdXBpbmcgdGhlIGFyY2hpdmVzLAordGhleSBhbGwgYmUgc2VhcmNoZWQgcmVwZWF0ZWRseSB1bnRpbCBhbGwgcG9zc2libGUgcmVmZXJlbmNlcyBhcmUKK3Jlc29sdmVkLgorCisgICAgIDxwPlVzaW5nIHRoaXMgb3B0aW9uIGhhcyBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGNvc3QuICBJdCBpcyBiZXN0IHRvIHVzZQoraXQgb25seSB3aGVuIHRoZXJlIGFyZSB1bmF2b2lkYWJsZSBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gdHdvIG9yCittb3JlIGFyY2hpdmVzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRhY2NlcHRfMDAyZHVua25vd25fMDAyZGlucHV0XzAwMmRhcmNoLTEzMyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkYWNjZXB0XzAwMmR1bmtub3duXzAwMmRpbnB1dF8wMDJkYXJjaC0xMzQiPjwvYT48YnI+PGR0Pjxjb2RlPi0tYWNjZXB0LXVua25vd24taW5wdXQtYXJjaDwvY29kZT48ZHQ+PGNvZGU+LS1uby1hY2NlcHQtdW5rbm93bi1pbnB1dC1hcmNoPC9jb2RlPjxkZD5UZWxscyB0aGUgbGlua2VyIHRvIGFjY2VwdCBpbnB1dCBmaWxlcyB3aG9zZSBhcmNoaXRlY3R1cmUgY2Fubm90IGJlCityZWNvZ25pc2VkLiAgVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgdXNlciBrbm93cyB3aGF0IHRoZXkgYXJlIGRvaW5nCithbmQgZGVsaWJlcmF0ZWx5IHdhbnRzIHRvIGxpbmsgaW4gdGhlc2UgdW5rbm93biBpbnB1dCBmaWxlcy4gIFRoaXMgd2FzCit0aGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGhlIGxpbmtlciwgYmVmb3JlIHJlbGVhc2UgMi4xNC4gIFRoZSBkZWZhdWx0CitiZWhhdmlvdXIgZnJvbSByZWxlYXNlIDIuMTQgb253YXJkcyBpcyB0byByZWplY3Qgc3VjaCBpbnB1dCBmaWxlcywgYW5kCitzbyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWFjY2VwdC11bmtub3duLWlucHV0LWFyY2g8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGhhcyBiZWVuIGFkZGVkIHRvCityZXN0b3JlIHRoZSBvbGQgYmVoYXZpb3VyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRhc18wMDJkbmVlZGVkLTEzNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkYXNfMDAyZG5lZWRlZC0xMzYiPjwvYT48YnI+PGR0Pjxjb2RlPi0tYXMtbmVlZGVkPC9jb2RlPjxkdD48Y29kZT4tLW5vLWFzLW5lZWRlZDwvY29kZT48ZGQ+VGhpcyBvcHRpb24gYWZmZWN0cyBFTEYgRFRfTkVFREVEIHRhZ3MgZm9yIGR5bmFtaWMgbGlicmFyaWVzIG1lbnRpb25lZAorb24gdGhlIGNvbW1hbmQgbGluZSBhZnRlciB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hcy1uZWVkZWQ8L3NwYW4+PC9zYW1wPiBvcHRpb24uICBOb3JtYWxseQordGhlIGxpbmtlciB3aWxsIGFkZCBhIERUX05FRURFRCB0YWcgZm9yIGVhY2ggZHluYW1pYyBsaWJyYXJ5IG1lbnRpb25lZAorb24gdGhlIGNvbW1hbmQgbGluZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBsaWJyYXJ5IGlzIGFjdHVhbGx5CituZWVkZWQgb3Igbm90LiAgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1hcy1uZWVkZWQ8L3NwYW4+PC9zYW1wPiBjYXVzZXMgYSBEVF9ORUVERUQgdGFnIHRvIG9ubHkgYmUKK2VtaXR0ZWQgZm9yIGEgbGlicmFyeSB0aGF0IHNhdGlzZmllcyBhbiB1bmRlZmluZWQgc3ltYm9sIHJlZmVyZW5jZQorZnJvbSBhIHJlZ3VsYXIgb2JqZWN0IGZpbGUgb3IsIGlmIHRoZSBsaWJyYXJ5IGlzIG5vdCBmb3VuZCBpbiB0aGUKK0RUX05FRURFRCBsaXN0cyBvZiBvdGhlciBsaWJyYXJpZXMgbGlua2VkIHVwIHRvIHRoYXQgcG9pbnQsIGFuCit1bmRlZmluZWQgc3ltYm9sIHJlZmVyZW5jZSBmcm9tIGFub3RoZXIgZHluYW1pYyBsaWJyYXJ5LiAKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tYXMtbmVlZGVkPC9zcGFuPjwvc2FtcD4gcmVzdG9yZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRhZGRfMDAyZG5lZWRlZC0xMzciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGFkZF8wMDJkbmVlZGVkLTEzOCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1hZGQtbmVlZGVkPC9jb2RlPjxkdD48Y29kZT4tLW5vLWFkZC1uZWVkZWQ8L2NvZGU+PGRkPlRoZXNlIHR3byBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGJlY2F1c2Ugb2YgdGhlIHNpbWlsYXJpdHkgb2YKK3RoZWlyIG5hbWVzIHRvIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWFzLW5lZWRlZDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLWFzLW5lZWRlZDwvc3Bhbj48L3NhbXA+CitvcHRpb25zLiAgVGhleSBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jb3B5LWR0LW5lZWRlZC1lbnRyaWVzPC9zcGFuPjwvc2FtcD4KK2FuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLWNvcHktZHQtbmVlZGVkLWVudHJpZXM8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGFzc2VydC1fMDA0MHZhcl8wMDdia2V5d29yZF8wMDdkLTEzOSI+PC9hPjxicj48ZHQ+PGNvZGU+LWFzc2VydCA8L2NvZGU+PHZhcj5rZXl3b3JkPC92YXI+PGRkPlRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIFN1bk9TIGNvbXBhdGliaWxpdHkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRCZHluYW1pYy0xNDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZGR5LTE0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkY2FsbF8wMDVmc2hhcmVkLTE0MiI+PC9hPjxicj48ZHQ+PGNvZGU+LUJkeW5hbWljPC9jb2RlPjxkdD48Y29kZT4tZHk8L2NvZGU+PGR0Pjxjb2RlPi1jYWxsX3NoYXJlZDwvY29kZT48ZGQ+TGluayBhZ2FpbnN0IGR5bmFtaWMgbGlicmFyaWVzLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgb24gcGxhdGZvcm1zCitmb3Igd2hpY2ggc2hhcmVkIGxpYnJhcmllcyBhcmUgc3VwcG9ydGVkLiAgVGhpcyBvcHRpb24gaXMgbm9ybWFsbHkgdGhlCitkZWZhdWx0IG9uIHN1Y2ggcGxhdGZvcm1zLiAgVGhlIGRpZmZlcmVudCB2YXJpYW50cyBvZiB0aGlzIG9wdGlvbiBhcmUKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggdmFyaW91cyBzeXN0ZW1zLiAgWW91IG1heSB1c2UgdGhpcyBvcHRpb24KK211bHRpcGxlIHRpbWVzIG9uIHRoZSBjb21tYW5kIGxpbmU6IGl0IGFmZmVjdHMgbGlicmFyeSBzZWFyY2hpbmcgZm9yCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tbDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgd2hpY2ggZm9sbG93IGl0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQmdyb3VwLTE0MyI+PC9hPjxicj48ZHQ+PGNvZGU+LUJncm91cDwvY29kZT48ZGQ+U2V0IHRoZSA8Y29kZT5ERl8xX0dST1VQPC9jb2RlPiBmbGFnIGluIHRoZSA8Y29kZT5EVF9GTEFHU18xPC9jb2RlPiBlbnRyeSBpbiB0aGUgZHluYW1pYworc2VjdGlvbi4gIFRoaXMgY2F1c2VzIHRoZSBydW50aW1lIGxpbmtlciB0byBoYW5kbGUgbG9va3VwcyBpbiB0aGlzCitvYmplY3QgYW5kIGl0cyBkZXBlbmRlbmNpZXMgdG8gYmUgcGVyZm9ybWVkIG9ubHkgaW5zaWRlIHRoZSBncm91cC4gCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXVucmVzb2x2ZWQtc3ltYm9scz1yZXBvcnQtYWxsPC9zcGFuPjwvc2FtcD4gaXMgaW1wbGllZC4gIFRoaXMgb3B0aW9uIGlzCitvbmx5IG1lYW5pbmdmdWwgb24gRUxGIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRCc3RhdGljLTE0NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkZG4tMTQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRub25fMDA1ZnNoYXJlZC0xNDYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZHN0YXRpYy0xNDciPjwvYT48YnI+PGR0Pjxjb2RlPi1Cc3RhdGljPC9jb2RlPjxkdD48Y29kZT4tZG48L2NvZGU+PGR0Pjxjb2RlPi1ub25fc2hhcmVkPC9jb2RlPjxkdD48Y29kZT4tc3RhdGljPC9jb2RlPjxkZD5EbyBub3QgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJpZXMuICBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCBvbgorcGxhdGZvcm1zIGZvciB3aGljaCBzaGFyZWQgbGlicmFyaWVzIGFyZSBzdXBwb3J0ZWQuICBUaGUgZGlmZmVyZW50Cit2YXJpYW50cyBvZiB0aGlzIG9wdGlvbiBhcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2YXJpb3VzIHN5c3RlbXMuICBZb3UKK21heSB1c2UgdGhpcyBvcHRpb24gbXVsdGlwbGUgdGltZXMgb24gdGhlIGNvbW1hbmQgbGluZTogaXQgYWZmZWN0cworbGlicmFyeSBzZWFyY2hpbmcgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1sPC9zcGFuPjwvc2FtcD4gb3B0aW9ucyB3aGljaCBmb2xsb3cgaXQuICBUaGlzCitvcHRpb24gYWxzbyBpbXBsaWVzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdW5yZXNvbHZlZC1zeW1ib2xzPXJlcG9ydC1hbGw8L3NwYW4+PC9zYW1wPi4gIFRoaXMKK29wdGlvbiBjYW4gYmUgdXNlZCB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zaGFyZWQ8L3NwYW4+PC9zYW1wPi4gIERvaW5nIHNvIG1lYW5zIHRoYXQgYQorc2hhcmVkIGxpYnJhcnkgaXMgYmVpbmcgY3JlYXRlZCBidXQgdGhhdCBhbGwgb2YgdGhlIGxpYnJhcnkncyBleHRlcm5hbAorcmVmZXJlbmNlcyBtdXN0IGJlIHJlc29sdmVkIGJ5IHB1bGxpbmcgaW4gZW50cmllcyBmcm9tIHN0YXRpYworbGlicmFyaWVzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQnN5bWJvbGljLTE0OCI+PC9hPjxicj48ZHQ+PGNvZGU+LUJzeW1ib2xpYzwvY29kZT48ZGQ+V2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LCBiaW5kIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIHN5bWJvbHMgdG8gdGhlCitkZWZpbml0aW9uIHdpdGhpbiB0aGUgc2hhcmVkIGxpYnJhcnksIGlmIGFueS4gIE5vcm1hbGx5LCBpdCBpcyBwb3NzaWJsZQorZm9yIGEgcHJvZ3JhbSBsaW5rZWQgYWdhaW5zdCBhIHNoYXJlZCBsaWJyYXJ5IHRvIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uCit3aXRoaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LiAgVGhpcyBvcHRpb24gaXMgb25seSBtZWFuaW5nZnVsIG9uIEVMRgorcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZEJzeW1ib2xpY18wMDJkZnVuY3Rpb25zLTE0OSI+PC9hPjxicj48ZHQ+PGNvZGU+LUJzeW1ib2xpYy1mdW5jdGlvbnM8L2NvZGU+PGRkPldoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeSwgYmluZCByZWZlcmVuY2VzIHRvIGdsb2JhbCBmdW5jdGlvbgorc3ltYm9scyB0byB0aGUgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LCBpZiBhbnkuIAorVGhpcyBvcHRpb24gaXMgb25seSBtZWFuaW5nZnVsIG9uIEVMRiBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCBzaGFyZWQKK2xpYnJhcmllcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZHluYW1pY18wMDJkbGlzdF8wMDNkXzAwNDB2YXJfMDA3YmR5bmFtaWNfMDAyZGxpc3RfMDAyZGZpbGVfMDA3ZC0xNTAiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZHluYW1pYy1saXN0PTwvY29kZT48dmFyPmR5bmFtaWMtbGlzdC1maWxlPC92YXI+PGRkPlNwZWNpZnkgdGhlIG5hbWUgb2YgYSBkeW5hbWljIGxpc3QgZmlsZSB0byB0aGUgbGlua2VyLiAgVGhpcyBpcwordHlwaWNhbGx5IHVzZWQgd2hlbiBjcmVhdGluZyBzaGFyZWQgbGlicmFyaWVzIHRvIHNwZWNpZnkgYSBsaXN0IG9mCitnbG9iYWwgc3ltYm9scyB3aG9zZSByZWZlcmVuY2VzIHNob3VsZG4ndCBiZSBib3VuZCB0byB0aGUgZGVmaW5pdGlvbgord2l0aGluIHRoZSBzaGFyZWQgbGlicmFyeSwgb3IgY3JlYXRpbmcgZHluYW1pY2FsbHkgbGlua2VkIGV4ZWN1dGFibGVzCit0byBzcGVjaWZ5IGEgbGlzdCBvZiBzeW1ib2xzIHdoaWNoIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgc3ltYm9sIHRhYmxlCitpbiB0aGUgZXhlY3V0YWJsZS4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiBFTEYgcGxhdGZvcm1zCit3aGljaCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMuCisKKyAgICAgPHA+VGhlIGZvcm1hdCBvZiB0aGUgZHluYW1pYyBsaXN0IGlzIHRoZSBzYW1lIGFzIHRoZSB2ZXJzaW9uIG5vZGUgd2l0aG91dAorc2NvcGUgYW5kIG5vZGUgbmFtZS4gIFNlZSA8YSBocmVmPSJWRVJTSU9OLmh0bWwjVkVSU0lPTiI+VkVSU0lPTjwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGR5bmFtaWNfMDAyZGxpc3RfMDAyZGRhdGEtMTUxIj48L2E+PGJyPjxkdD48Y29kZT4tLWR5bmFtaWMtbGlzdC1kYXRhPC9jb2RlPjxkZD5JbmNsdWRlIGFsbCBnbG9iYWwgZGF0YSBzeW1ib2xzIHRvIHRoZSBkeW5hbWljIGxpc3QuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGR5bmFtaWNfMDAyZGxpc3RfMDAyZGNwcF8wMDJkbmV3LTE1MiI+PC9hPjxicj48ZHQ+PGNvZGU+LS1keW5hbWljLWxpc3QtY3BwLW5ldzwvY29kZT48ZGQ+UHJvdmlkZSB0aGUgYnVpbHRpbiBkeW5hbWljIGxpc3QgZm9yIEMrKyBvcGVyYXRvciBuZXcgYW5kIGRlbGV0ZS4gIEl0CitpcyBtYWlubHkgdXNlZnVsIGZvciBidWlsZGluZyBzaGFyZWQgbGlic3RkYysrLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRkeW5hbWljXzAwMmRsaXN0XzAwMmRjcHBfMDAyZHR5cGVpbmZvLTE1MyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1keW5hbWljLWxpc3QtY3BwLXR5cGVpbmZvPC9jb2RlPjxkZD5Qcm92aWRlIHRoZSBidWlsdGluIGR5bmFtaWMgbGlzdCBmb3IgQysrIHJ1bnRpbWUgdHlwZSBpZGVudGlmaWNhdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkY2hlY2tfMDAyZHNlY3Rpb25zLTE1NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkY2hlY2tfMDAyZHNlY3Rpb25zLTE1NSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1jaGVjay1zZWN0aW9uczwvY29kZT48ZHQ+PGNvZGU+LS1uby1jaGVjay1zZWN0aW9uczwvY29kZT48ZGQ+QXNrcyB0aGUgbGlua2VyIDxlbT5ub3Q8L2VtPiB0byBjaGVjayBzZWN0aW9uIGFkZHJlc3NlcyBhZnRlciB0aGV5IGhhdmUKK2JlZW4gYXNzaWduZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3ZlcmxhcHMuICBOb3JtYWxseSB0aGUgbGlua2VyIHdpbGwKK3BlcmZvcm0gdGhpcyBjaGVjaywgYW5kIGlmIGl0IGZpbmRzIGFueSBvdmVybGFwcyBpdCB3aWxsIHByb2R1Y2UKK3N1aXRhYmxlIGVycm9yIG1lc3NhZ2VzLiAgVGhlIGxpbmtlciBkb2VzIGtub3cgYWJvdXQsIGFuZCBkb2VzIG1ha2UKK2FsbG93YW5jZXMgZm9yIHNlY3Rpb25zIGluIG92ZXJsYXlzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBiZQorcmVzdG9yZWQgYnkgdXNpbmcgdGhlIGNvbW1hbmQgbGluZSBzd2l0Y2ggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGVjay1zZWN0aW9uczwvc3Bhbj48L3NhbXA+LiAKK1NlY3Rpb24gb3ZlcmxhcCBpcyBub3QgdXN1YWxseSBjaGVja2VkIGZvciByZWxvY2F0YWJsZSBsaW5rcy4gIFlvdSBjYW4KK2ZvcmNlIGNoZWNraW5nIGluIHRoYXQgY2FzZSBieSB1c2luZyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1jaGVjay1zZWN0aW9uczwvc3Bhbj48L3NhbXA+CitvcHRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGNvcHlfMDAyZGR0XzAwMmRuZWVkZWRfMDAyZGVudHJpZXMtMTU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRjb3B5XzAwMmRkdF8wMDJkbmVlZGVkXzAwMmRlbnRyaWVzLTE1NyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1jb3B5LWR0LW5lZWRlZC1lbnRyaWVzPC9jb2RlPjxkdD48Y29kZT4tLW5vLWNvcHktZHQtbmVlZGVkLWVudHJpZXM8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGFmZmVjdHMgdGhlIHRyZWF0bWVudCBvZiBkeW5hbWljIGxpYnJhcmllcyByZWZlcnJlZCB0bworYnkgRFRfTkVFREVEIHRhZ3MgPGVtPmluc2lkZTwvZW0+IEVMRiBkeW5hbWljIGxpYnJhcmllcyBtZW50aW9uZWQgb24gdGhlCitjb21tYW5kIGxpbmUuICBOb3JtYWxseSB0aGUgbGlua2VyIHdvbid0IGFkZCBhIERUX05FRURFRCB0YWcgdG8gdGhlCitvdXRwdXQgYmluYXJ5IGZvciBlYWNoIGxpYnJhcnkgbWVudGlvbmVkIGluIGEgRFRfTkVFREVEIHRhZyBpbiBhbgoraW5wdXQgZHluYW1pYyBsaWJyYXJ5LiAgV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWNvcHktZHQtbmVlZGVkLWVudHJpZXM8L3NwYW4+PC9zYW1wPgorc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaG93ZXZlciBhbnkgZHluYW1pYyBsaWJyYXJpZXMgdGhhdAorZm9sbG93IGl0IHdpbGwgaGF2ZSB0aGVpciBEVF9ORUVERUQgZW50cmllcyBhZGRlZC4gIFRoZSBkZWZhdWx0CitiZWhhdmlvdXIgY2FuIGJlIHJlc3RvcmVkIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1jb3B5LWR0LW5lZWRlZC1lbnRyaWVzPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+VGhpcyBvcHRpb24gYWxzbyBoYXMgYW4gZWZmZWN0IG9uIHRoZSByZXNvbHV0aW9uIG9mIHN5bWJvbHMgaW4gZHluYW1pYworbGlicmFyaWVzLiAgV2l0aCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWNvcHktZHQtbmVlZGVkLWVudHJpZXM8L3NwYW4+PC9zYW1wPiBkeW5hbWljIGxpYnJhcmllcworbWVudGlvbmVkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2lsbCBiZSByZWN1cnNpdmVseSBzZWFyY2hlZCwgZm9sbG93aW5nCit0aGVpciBEVF9ORUVERUQgdGFncyB0byBvdGhlciBsaWJyYXJpZXMsIGluIG9yZGVyIHRvIHJlc29sdmUgc3ltYm9scworcmVxdWlyZWQgYnkgdGhlIG91dHB1dCBiaW5hcnkuICBXaXRoIHRoZSBkZWZhdWx0IHNldHRpbmcgaG93ZXZlcgordGhlIHNlYXJjaGluZyBvZiBkeW5hbWljIGxpYnJhcmllcyB0aGF0IGZvbGxvdyBpdCB3aWxsIHN0b3Agd2l0aCB0aGUKK2R5bmFtaWMgbGlicmFyeSBpdHNlbGYuICBObyBEVF9ORUVERUQgbGlua3Mgd2lsbCBiZSB0cmF2ZXJzZWQgdG8gcmVzb2x2ZQorc3ltYm9scy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1jcm9zcy1yZWZlcmVuY2UtdGFibGUtMTU4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGNyZWYtMTU5Ij48L2E+PGJyPjxkdD48Y29kZT4tLWNyZWY8L2NvZGU+PGRkPk91dHB1dCBhIGNyb3NzIHJlZmVyZW5jZSB0YWJsZS4gIElmIGEgbGlua2VyIG1hcCBmaWxlIGlzIGJlaW5nCitnZW5lcmF0ZWQsIHRoZSBjcm9zcyByZWZlcmVuY2UgdGFibGUgaXMgcHJpbnRlZCB0byB0aGUgbWFwIGZpbGUuIAorT3RoZXJ3aXNlLCBpdCBpcyBwcmludGVkIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKKyAgICAgPHA+VGhlIGZvcm1hdCBvZiB0aGUgdGFibGUgaXMgaW50ZW50aW9uYWxseSBzaW1wbGUsIHNvIHRoYXQgaXQgbWF5IGJlCitlYXNpbHkgcHJvY2Vzc2VkIGJ5IGEgc2NyaXB0IGlmIG5lY2Vzc2FyeS4gIFRoZSBzeW1ib2xzIGFyZSBwcmludGVkIG91dCwKK3NvcnRlZCBieSBuYW1lLiAgRm9yIGVhY2ggc3ltYm9sLCBhIGxpc3Qgb2YgZmlsZSBuYW1lcyBpcyBnaXZlbi4gIElmIHRoZQorc3ltYm9sIGlzIGRlZmluZWQsIHRoZSBmaXJzdCBmaWxlIGxpc3RlZCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlCitkZWZpbml0aW9uLiAgVGhlIHJlbWFpbmluZyBmaWxlcyBjb250YWluIHJlZmVyZW5jZXMgdG8gdGhlIHN5bWJvbC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1jb21tb24tYWxsb2NhdGlvbi0xNjAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGRlZmluZV8wMDJkY29tbW9uLTE2MSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1uby1kZWZpbmUtY29tbW9uPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiBpbmhpYml0cyB0aGUgYXNzaWdubWVudCBvZiBhZGRyZXNzZXMgdG8gY29tbW9uIHN5bWJvbHMuIAorVGhlIHNjcmlwdCBjb21tYW5kIDxjb2RlPklOSElCSVRfQ09NTU9OX0FMTE9DQVRJT048L2NvZGU+IGhhcyB0aGUgc2FtZSBlZmZlY3QuIAorU2VlIDxhIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNNaXNjZWxsYW5lb3VzLUNvbW1hbmRzIj5NaXNjZWxsYW5lb3VzIENvbW1hbmRzPC9hPi4KKworICAgICA8cD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW5vLWRlZmluZS1jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGFsbG93cyBkZWNvdXBsaW5nCit0aGUgZGVjaXNpb24gdG8gYXNzaWduIGFkZHJlc3NlcyB0byBDb21tb24gc3ltYm9scyBmcm9tIHRoZSBjaG9pY2UKK29mIHRoZSBvdXRwdXQgZmlsZSB0eXBlOyBvdGhlcndpc2UgYSBub24tUmVsb2NhdGFibGUgb3V0cHV0IHR5cGUKK2ZvcmNlcyBhc3NpZ25pbmcgYWRkcmVzc2VzIHRvIENvbW1vbiBzeW1ib2xzLiAKK1VzaW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1uby1kZWZpbmUtY29tbW9uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFsbG93cyBDb21tb24gc3ltYm9scyB0aGF0IGFyZSByZWZlcmVuY2VkCitmcm9tIGEgc2hhcmVkIGxpYnJhcnkgdG8gYmUgYXNzaWduZWQgYWRkcmVzc2VzIG9ubHkgaW4gdGhlIG1haW4gcHJvZ3JhbS4gCitUaGlzIGVsaW1pbmF0ZXMgdGhlIHVudXNlZCBkdXBsaWNhdGUgc3BhY2UgaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LAorYW5kIGFsc28gcHJldmVudHMgYW55IHBvc3NpYmxlIGNvbmZ1c2lvbiBvdmVyIHJlc29sdmluZyB0byB0aGUgd3JvbmcKK2R1cGxpY2F0ZSB3aGVuIHRoZXJlIGFyZSBtYW55IGR5bmFtaWMgbW9kdWxlcyB3aXRoIHNwZWNpYWxpemVkIHNlYXJjaAorcGF0aHMgZm9yIHJ1bnRpbWUgc3ltYm9sIHJlc29sdXRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtc3ltYm9sc18wMDJjLWZyb20tY29tbWFuZC1saW5lLTE2MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRkZWZzeW1fMDAzZF8wMDQwdmFyXzAwN2JzeW1ib2xfMDA3ZF8wMDNkXzAwNDB2YXJfMDA3YmV4cF8wMDdkLTE2MyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1kZWZzeW09PC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48ZGQ+Q3JlYXRlIGEgZ2xvYmFsIHN5bWJvbCBpbiB0aGUgb3V0cHV0IGZpbGUsIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlCithZGRyZXNzIGdpdmVuIGJ5IDx2YXI+ZXhwcmVzc2lvbjwvdmFyPi4gIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uIGFzIG1hbnkKK3RpbWVzIGFzIG5lY2Vzc2FyeSB0byBkZWZpbmUgbXVsdGlwbGUgc3ltYm9scyBpbiB0aGUgY29tbWFuZCBsaW5lLiAgQQorbGltaXRlZCBmb3JtIG9mIGFyaXRobWV0aWMgaXMgc3VwcG9ydGVkIGZvciB0aGUgPHZhcj5leHByZXNzaW9uPC92YXI+IGluIHRoaXMKK2NvbnRleHQ6IHlvdSBtYXkgZ2l2ZSBhIGhleGFkZWNpbWFsIGNvbnN0YW50IG9yIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nCitzeW1ib2wsIG9yIHVzZSA8Y29kZT4rPC9jb2RlPiBhbmQgPGNvZGU+LTwvY29kZT4gdG8gYWRkIG9yIHN1YnRyYWN0IGhleGFkZWNpbWFsCitjb25zdGFudHMgb3Igc3ltYm9scy4gIElmIHlvdSBuZWVkIG1vcmUgZWxhYm9yYXRlIGV4cHJlc3Npb25zLCBjb25zaWRlcgordXNpbmcgdGhlIGxpbmtlciBjb21tYW5kIGxhbmd1YWdlIGZyb20gYSBzY3JpcHQgKHNlZSA8YSBocmVmPSJBc3NpZ25tZW50cy5odG1sI0Fzc2lnbm1lbnRzIj5Bc3NpZ25tZW50OiBTeW1ib2wgRGVmaW5pdGlvbnM8L2E+KS4gIDxlbT5Ob3RlOjwvZW0+IHRoZXJlIHNob3VsZCBiZSBubyB3aGl0ZQorc3BhY2UgYmV0d2VlbiA8dmFyPnN5bWJvbDwvdmFyPiwgdGhlIGVxdWFscyBzaWduICgmbGRxdW87Jmx0Oz0mZ3Q7JnJkcXVvOyksIGFuZAorPHZhcj5leHByZXNzaW9uPC92YXI+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWRlbWFuZ2xpbmdfMDAyYy1mcm9tLWNvbW1hbmQtbGluZS0xNjQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZGVtYW5nbGVfMDA1Yl8wMDNkXzAwNDB2YXJfMDA3YnN0eWxlXzAwN2RfMDA1ZC0xNjUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGRlbWFuZ2xlLTE2NiI+PC9hPjxicj48ZHQ+PGNvZGU+LS1kZW1hbmdsZVs9PC9jb2RlPjx2YXI+c3R5bGU8L3Zhcj48Y29kZT5dPC9jb2RlPjxkdD48Y29kZT4tLW5vLWRlbWFuZ2xlPC9jb2RlPjxkZD5UaGVzZSBvcHRpb25zIGNvbnRyb2wgd2hldGhlciB0byBkZW1hbmdsZSBzeW1ib2wgbmFtZXMgaW4gZXJyb3IgbWVzc2FnZXMKK2FuZCBvdGhlciBvdXRwdXQuICBXaGVuIHRoZSBsaW5rZXIgaXMgdG9sZCB0byBkZW1hbmdsZSwgaXQgdHJpZXMgdG8KK3ByZXNlbnQgc3ltYm9sIG5hbWVzIGluIGEgcmVhZGFibGUgZmFzaGlvbjogaXQgc3RyaXBzIGxlYWRpbmcKK3VuZGVyc2NvcmVzIGlmIHRoZXkgYXJlIHVzZWQgYnkgdGhlIG9iamVjdCBmaWxlIGZvcm1hdCwgYW5kIGNvbnZlcnRzIEMrKworbWFuZ2xlZCBzeW1ib2wgbmFtZXMgaW50byB1c2VyIHJlYWRhYmxlIG5hbWVzLiAgRGlmZmVyZW50IGNvbXBpbGVycyBoYXZlCitkaWZmZXJlbnQgbWFuZ2xpbmcgc3R5bGVzLiAgVGhlIG9wdGlvbmFsIGRlbWFuZ2xpbmcgc3R5bGUgYXJndW1lbnQgY2FuIGJlIHVzZWQKK3RvIGNob29zZSBhbiBhcHByb3ByaWF0ZSBkZW1hbmdsaW5nIHN0eWxlIGZvciB5b3VyIGNvbXBpbGVyLiAgVGhlIGxpbmtlciB3aWxsCitkZW1hbmdsZSBieSBkZWZhdWx0IHVubGVzcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DT0xMRUNUX05PX0RFTUFOR0xFPC9zcGFuPjwvc2FtcD4mcnNxdW87CitpcyBzZXQuICBUaGVzZSBvcHRpb25zIG1heSBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWR5bmFtaWMtbGlua2VyXzAwMmMtZnJvbS1jb21tYW5kLWxpbmUtMTY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRJXzAwNDB2YXJfMDA3YmZpbGVfMDA3ZC0xNjgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZHluYW1pY18wMDJkbGlua2VyXzAwM2RfMDA0MHZhcl8wMDdiZmlsZV8wMDdkLTE2OSI+PC9hPjxicj48ZHQ+PGNvZGU+LUk8L2NvZGU+PHZhcj5maWxlPC92YXI+PGR0Pjxjb2RlPi0tZHluYW1pYy1saW5rZXI9PC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxkZD5TZXQgdGhlIG5hbWUgb2YgdGhlIGR5bmFtaWMgbGlua2VyLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbgorZ2VuZXJhdGluZyBkeW5hbWljYWxseSBsaW5rZWQgRUxGIGV4ZWN1dGFibGVzLiAgVGhlIGRlZmF1bHQgZHluYW1pYworbGlua2VyIGlzIG5vcm1hbGx5IGNvcnJlY3Q7IGRvbid0IHVzZSB0aGlzIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUKK2RvaW5nLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRmYXRhbF8wMDJkd2FybmluZ3MtMTcwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRmYXRhbF8wMDJkd2FybmluZ3MtMTcxIj48L2E+PGJyPjxkdD48Y29kZT4tLWZhdGFsLXdhcm5pbmdzPC9jb2RlPjxkdD48Y29kZT4tLW5vLWZhdGFsLXdhcm5pbmdzPC9jb2RlPjxkZD5UcmVhdCBhbGwgd2FybmluZ3MgYXMgZXJyb3JzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBiZSByZXN0b3JlZAord2l0aCB0aGUgb3B0aW9uIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tZmF0YWwtd2FybmluZ3M8L3NwYW4+PC9zYW1wPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZm9yY2VfMDAyZGV4ZV8wMDJkc3VmZml4LTE3MiI+PC9hPjxicj48ZHQ+PGNvZGU+LS1mb3JjZS1leGUtc3VmZml4PC9jb2RlPjxkZD5NYWtlIHN1cmUgdGhhdCBhbiBvdXRwdXQgZmlsZSBoYXMgYSAuZXhlIHN1ZmZpeC4KKworICAgICA8cD5JZiBhIHN1Y2Nlc3NmdWxseSBidWlsdCBmdWxseSBsaW5rZWQgb3V0cHV0IGZpbGUgZG9lcyBub3QgaGF2ZSBhCis8Y29kZT4uZXhlPC9jb2RlPiBvciA8Y29kZT4uZGxsPC9jb2RlPiBzdWZmaXgsIHRoaXMgb3B0aW9uIGZvcmNlcyB0aGUgbGlua2VyIHRvIGNvcHkKK3RoZSBvdXRwdXQgZmlsZSB0byBvbmUgb2YgdGhlIHNhbWUgbmFtZSB3aXRoIGEgPGNvZGU+LmV4ZTwvY29kZT4gc3VmZml4LiBUaGlzCitvcHRpb24gaXMgdXNlZnVsIHdoZW4gdXNpbmcgdW5tb2RpZmllZCBVbml4IG1ha2VmaWxlcyBvbiBhIE1pY3Jvc29mdAorV2luZG93cyBob3N0LCBzaW5jZSBzb21lIHZlcnNpb25zIG9mIFdpbmRvd3Mgd29uJ3QgcnVuIGFuIGltYWdlIHVubGVzcworaXQgZW5kcyBpbiBhIDxjb2RlPi5leGU8L2NvZGU+IHN1ZmZpeC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZ2NfMDAyZHNlY3Rpb25zLTE3MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkZ2NfMDAyZHNlY3Rpb25zLTE3NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdhcmJhZ2UtY29sbGVjdGlvbi0xNzUiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZ2Mtc2VjdGlvbnM8L2NvZGU+PGR0Pjxjb2RlPi0tbm8tZ2Mtc2VjdGlvbnM8L2NvZGU+PGRkPkVuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgdW51c2VkIGlucHV0IHNlY3Rpb25zLiAgSXQgaXMgaWdub3JlZCBvbgordGFyZ2V0cyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoaXMgb3B0aW9uLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIChvZiBub3QKK3BlcmZvcm1pbmcgdGhpcyBnYXJiYWdlIGNvbGxlY3Rpb24pIGNhbiBiZSByZXN0b3JlZCBieSBzcGVjaWZ5aW5nCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tZ2Mtc2VjdGlvbnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb24gdGhlIGNvbW1hbmQgbGluZS4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZ2Mtc2VjdGlvbnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGVjaWRlcyB3aGljaCBpbnB1dCBzZWN0aW9ucyBhcmUgdXNlZCBieQorZXhhbWluaW5nIHN5bWJvbHMgYW5kIHJlbG9jYXRpb25zLiAgVGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZW50cnkKK3N5bWJvbCBhbmQgYWxsIHNlY3Rpb25zIGNvbnRhaW5pbmcgc3ltYm9scyB1bmRlZmluZWQgb24gdGhlCitjb21tYW5kLWxpbmUgd2lsbCBiZSBrZXB0LCBhcyB3aWxsIHNlY3Rpb25zIGNvbnRhaW5pbmcgc3ltYm9scworcmVmZXJlbmNlZCBieSBkeW5hbWljIG9iamVjdHMuICBOb3RlIHRoYXQgd2hlbiBidWlsZGluZyBzaGFyZWQKK2xpYnJhcmllcywgdGhlIGxpbmtlciBtdXN0IGFzc3VtZSB0aGF0IGFueSB2aXNpYmxlIHN5bWJvbCBpcworcmVmZXJlbmNlZC4gIE9uY2UgdGhpcyBpbml0aWFsIHNldCBvZiBzZWN0aW9ucyBoYXMgYmVlbiBkZXRlcm1pbmVkLAordGhlIGxpbmtlciByZWN1cnNpdmVseSBtYXJrcyBhcyB1c2VkIGFueSBzZWN0aW9uIHJlZmVyZW5jZWQgYnkgdGhlaXIKK3JlbG9jYXRpb25zLiAgU2VlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1lbnRyeTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXVuZGVmaW5lZDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5UaGlzIG9wdGlvbiBjYW4gYmUgc2V0IHdoZW4gZG9pbmcgYSBwYXJ0aWFsIGxpbmsgKGVuYWJsZWQgd2l0aCBvcHRpb24KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXI8L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAgSW4gdGhpcyBjYXNlIHRoZSByb290IG9mIHN5bWJvbHMga2VwdCBtdXN0IGJlIGV4cGxpY2l0bHkKK3NwZWNpZmllZCBlaXRoZXIgYnkgYW4gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWVudHJ5PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS11bmRlZmluZWQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIG9yIGJ5CithIDxjb2RlPkVOVFJZPC9jb2RlPiBjb21tYW5kIGluIHRoZSBsaW5rZXIgc2NyaXB0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRwcmludF8wMDJkZ2NfMDAyZHNlY3Rpb25zLTE3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkcHJpbnRfMDAyZGdjXzAwMmRzZWN0aW9ucy0xNzciPjwvYT48YSBuYW1lPSJpbmRleC1nYXJiYWdlLWNvbGxlY3Rpb24tMTc4Ij48L2E+PGJyPjxkdD48Y29kZT4tLXByaW50LWdjLXNlY3Rpb25zPC9jb2RlPjxkdD48Y29kZT4tLW5vLXByaW50LWdjLXNlY3Rpb25zPC9jb2RlPjxkZD5MaXN0IGFsbCBzZWN0aW9ucyByZW1vdmVkIGJ5IGdhcmJhZ2UgY29sbGVjdGlvbi4gIFRoZSBsaXN0aW5nIGlzCitwcmludGVkIG9uIHN0ZGVyci4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgZWZmZWN0aXZlIGlmIGdhcmJhZ2UKK2NvbGxlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB2aWEgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1nYy1zZWN0aW9uczwvc3Bhbj48L3NhbXA+JnJzcXVvOykgb3B0aW9uLiAgVGhlCitkZWZhdWx0IGJlaGF2aW91ciAob2Ygbm90IGxpc3RpbmcgdGhlIHNlY3Rpb25zIHRoYXQgYXJlIHJlbW92ZWQpIGNhbgorYmUgcmVzdG9yZWQgYnkgc3BlY2lmeWluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tcHJpbnQtZ2Mtc2VjdGlvbnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb24gdGhlIGNvbW1hbmQKK2xpbmUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHByaW50XzAwMmRvdXRwdXRfMDAyZGZvcm1hdC0xNzkiPjwvYT48YSBuYW1lPSJpbmRleC1vdXRwdXQtZm9ybWF0LTE4MCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1wcmludC1vdXRwdXQtZm9ybWF0PC9jb2RlPjxkZD5QcmludCB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IChwZXJoYXBzIGluZmx1ZW5jZWQgYnkKK290aGVyIGNvbW1hbmQtbGluZSBvcHRpb25zKS4gIFRoaXMgaXMgdGhlIHN0cmluZyB0aGF0IHdvdWxkIGFwcGVhcgoraW4gYW4gPGNvZGU+T1VUUFVUX0ZPUk1BVDwvY29kZT4gbGlua2VyIHNjcmlwdCBjb21tYW5kIChzZWUgPGEgaHJlZj0iRmlsZS1Db21tYW5kcy5odG1sI0ZpbGUtQ29tbWFuZHMiPkZpbGUgQ29tbWFuZHM8L2E+KS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1oZWxwLTE4MSI+PC9hPjxhIG5hbWU9ImluZGV4LXVzYWdlLTE4MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRoZWxwLTE4MyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1oZWxwPC9jb2RlPjxkZD5QcmludCBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHRhcmdldF8wMDJkaGVscC0xODQiPjwvYT48YnI+PGR0Pjxjb2RlPi0tdGFyZ2V0LWhlbHA8L2NvZGU+PGRkPlByaW50IGEgc3VtbWFyeSBvZiBhbGwgdGFyZ2V0IHNwZWNpZmljIG9wdGlvbnMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZE1hcF8wMDNkXzAwNDB2YXJfMDA3Ym1hcGZpbGVfMDA3ZC0xODUiPjwvYT48YnI+PGR0Pjxjb2RlPi1NYXA9PC9jb2RlPjx2YXI+bWFwZmlsZTwvdmFyPjxkZD5QcmludCBhIGxpbmsgbWFwIHRvIHRoZSBmaWxlIDx2YXI+bWFwZmlsZTwvdmFyPi4gIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlCis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTTwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgYWJvdmUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtbWVtb3J5LXVzYWdlLTE4NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJka2VlcF8wMDJkbWVtb3J5LTE4NyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1uby1rZWVwLW1lbW9yeTwvY29kZT48ZGQ+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gbm9ybWFsbHkgb3B0aW1pemVzIGZvciBzcGVlZCBvdmVyIG1lbW9yeSB1c2FnZSBieSBjYWNoaW5nIHRoZQorc3ltYm9sIHRhYmxlcyBvZiBpbnB1dCBmaWxlcyBpbiBtZW1vcnkuICBUaGlzIG9wdGlvbiB0ZWxscyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0bworaW5zdGVhZCBvcHRpbWl6ZSBmb3IgbWVtb3J5IHVzYWdlLCBieSByZXJlYWRpbmcgdGhlIHN5bWJvbCB0YWJsZXMgYXMKK25lY2Vzc2FyeS4gIFRoaXMgbWF5IGJlIHJlcXVpcmVkIGlmIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHJ1bnMgb3V0IG9mIG1lbW9yeSBzcGFjZQord2hpbGUgbGlua2luZyBhIGxhcmdlIGV4ZWN1dGFibGUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR1bmRlZmluZWQtMTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmR6LWRlZnMtMTg5Ij48L2E+PGJyPjxkdD48Y29kZT4tLW5vLXVuZGVmaW5lZDwvY29kZT48ZHQ+PGNvZGU+LXogZGVmczwvY29kZT48ZGQ+UmVwb3J0IHVucmVzb2x2ZWQgc3ltYm9sIHJlZmVyZW5jZXMgZnJvbSByZWd1bGFyIG9iamVjdCBmaWxlcy4gIFRoaXMKK2lzIGRvbmUgZXZlbiBpZiB0aGUgbGlua2VyIGlzIGNyZWF0aW5nIGEgbm9uLXN5bWJvbGljIHNoYXJlZCBsaWJyYXJ5LiAKK1RoZSBzd2l0Y2ggPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1bbm8tXWFsbG93LXNobGliLXVuZGVmaW5lZDwvc3Bhbj48L3NhbXA+IGNvbnRyb2xzIHRoZQorYmVoYXZpb3VyIGZvciByZXBvcnRpbmcgdW5yZXNvbHZlZCByZWZlcmVuY2VzIGZvdW5kIGluIHNoYXJlZAorbGlicmFyaWVzIGJlaW5nIGxpbmtlZCBpbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkYWxsb3dfMDAyZG11bHRpcGxlXzAwMmRkZWZpbml0aW9uLTE5MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkei1tdWxkZWZzLTE5MSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1hbGxvdy1tdWx0aXBsZS1kZWZpbml0aW9uPC9jb2RlPjxkdD48Y29kZT4teiBtdWxkZWZzPC9jb2RlPjxkZD5Ob3JtYWxseSB3aGVuIGEgc3ltYm9sIGlzIGRlZmluZWQgbXVsdGlwbGUgdGltZXMsIHRoZSBsaW5rZXIgd2lsbAorcmVwb3J0IGEgZmF0YWwgZXJyb3IuIFRoZXNlIG9wdGlvbnMgYWxsb3cgbXVsdGlwbGUgZGVmaW5pdGlvbnMgYW5kIHRoZQorZmlyc3QgZGVmaW5pdGlvbiB3aWxsIGJlIHVzZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGFsbG93XzAwMmRzaGxpYl8wMDJkdW5kZWZpbmVkLTE5MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkYWxsb3dfMDAyZHNobGliXzAwMmR1bmRlZmluZWQtMTkzIj48L2E+PGJyPjxkdD48Y29kZT4tLWFsbG93LXNobGliLXVuZGVmaW5lZDwvY29kZT48ZHQ+PGNvZGU+LS1uby1hbGxvdy1zaGxpYi11bmRlZmluZWQ8L2NvZGU+PGRkPkFsbG93cyBvciBkaXNhbGxvd3MgdW5kZWZpbmVkIHN5bWJvbHMgaW4gc2hhcmVkIGxpYnJhcmllcy4gCitUaGlzIHN3aXRjaCBpcyBzaW1pbGFyIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tdW5kZWZpbmVkPC9zcGFuPjwvc2FtcD4gZXhjZXB0IHRoYXQgaXQKK2RldGVybWluZXMgdGhlIGJlaGF2aW91ciB3aGVuIHRoZSB1bmRlZmluZWQgc3ltYm9scyBhcmUgaW4gYQorc2hhcmVkIGxpYnJhcnkgcmF0aGVyIHRoYW4gYSByZWd1bGFyIG9iamVjdCBmaWxlLiAgSXQgZG9lcyBub3QgYWZmZWN0Citob3cgdW5kZWZpbmVkIHN5bWJvbHMgaW4gcmVndWxhciBvYmplY3QgZmlsZXMgYXJlIGhhbmRsZWQuCisKKyAgICAgPHA+VGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIHJlcG9ydCBlcnJvcnMgZm9yIGFueSB1bmRlZmluZWQgc3ltYm9scworcmVmZXJlbmNlZCBpbiBzaGFyZWQgbGlicmFyaWVzIGlmIHRoZSBsaW5rZXIgaXMgYmVpbmcgdXNlZCB0byBjcmVhdGUKK2FuIGV4ZWN1dGFibGUsIGJ1dCB0byBhbGxvdyB0aGVtIGlmIHRoZSBsaW5rZXIgaXMgYmVpbmcgdXNlZCB0byBjcmVhdGUKK2Egc2hhcmVkIGxpYnJhcnkuCisKKyAgICAgPHA+VGhlIHJlYXNvbnMgZm9yIGFsbG93aW5nIHVuZGVmaW5lZCBzeW1ib2wgcmVmZXJlbmNlcyBpbiBzaGFyZWQKK2xpYnJhcmllcyBzcGVjaWZpZWQgYXQgbGluayB0aW1lIGFyZSB0aGF0OgorCisgICAgICAgICAgPHVsPgorPGxpPkEgc2hhcmVkIGxpYnJhcnkgc3BlY2lmaWVkIGF0IGxpbmsgdGltZSBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBvbmUKK3RoYXQgaXMgYXZhaWxhYmxlIGF0IGxvYWQgdGltZSwgc28gdGhlIHN5bWJvbCBtaWdodCBhY3R1YWxseSBiZQorcmVzb2x2YWJsZSBhdCBsb2FkIHRpbWUuIAorPGxpPlRoZXJlIGFyZSBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLCBlZyBCZU9TIGFuZCBIUFBBLCB3aGVyZSB1bmRlZmluZWQKK3N5bWJvbHMgaW4gc2hhcmVkIGxpYnJhcmllcyBhcmUgbm9ybWFsLgorCisgICAgICAgICAgPHA+VGhlIEJlT1Mga2VybmVsIGZvciBleGFtcGxlIHBhdGNoZXMgc2hhcmVkIGxpYnJhcmllcyBhdCBsb2FkIHRpbWUgdG8KK3NlbGVjdCB3aGljaGV2ZXIgZnVuY3Rpb24gaXMgbW9zdCBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQKK2FyY2hpdGVjdHVyZS4gIFRoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGR5bmFtaWNhbGx5IHNlbGVjdCBhbgorYXBwcm9wcmlhdGUgbWVtc2V0IGZ1bmN0aW9uLiAKKzwvdWw+CisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR1bmRlZmluZWRfMDAyZHZlcnNpb24tMTk0Ij48L2E+PGJyPjxkdD48Y29kZT4tLW5vLXVuZGVmaW5lZC12ZXJzaW9uPC9jb2RlPjxkZD5Ob3JtYWxseSB3aGVuIGEgc3ltYm9sIGhhcyBhbiB1bmRlZmluZWQgdmVyc2lvbiwgdGhlIGxpbmtlciB3aWxsIGlnbm9yZQoraXQuIFRoaXMgb3B0aW9uIGRpc2FsbG93cyBzeW1ib2xzIHdpdGggdW5kZWZpbmVkIHZlcnNpb24gYW5kIGEgZmF0YWwgZXJyb3IKK3dpbGwgYmUgaXNzdWVkIGluc3RlYWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGRlZmF1bHRfMDAyZHN5bXZlci0xOTUiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZGVmYXVsdC1zeW12ZXI8L2NvZGU+PGRkPkNyZWF0ZSBhbmQgdXNlIGEgZGVmYXVsdCBzeW1ib2wgdmVyc2lvbiAodGhlIHNvbmFtZSkgZm9yIHVudmVyc2lvbmVkCitleHBvcnRlZCBzeW1ib2xzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRkZWZhdWx0XzAwMmRpbXBvcnRlZF8wMDJkc3ltdmVyLTE5NiI+PC9hPjxicj48ZHQ+PGNvZGU+LS1kZWZhdWx0LWltcG9ydGVkLXN5bXZlcjwvY29kZT48ZGQ+Q3JlYXRlIGFuZCB1c2UgYSBkZWZhdWx0IHN5bWJvbCB2ZXJzaW9uICh0aGUgc29uYW1lKSBmb3IgdW52ZXJzaW9uZWQKK2ltcG9ydGVkIHN5bWJvbHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR3YXJuXzAwMmRtaXNtYXRjaC0xOTciPjwvYT48YnI+PGR0Pjxjb2RlPi0tbm8td2Fybi1taXNtYXRjaDwvY29kZT48ZGQ+Tm9ybWFsbHkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gd2lsbCBnaXZlIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gbGluayB0b2dldGhlciBpbnB1dAorZmlsZXMgdGhhdCBhcmUgbWlzbWF0Y2hlZCBmb3Igc29tZSByZWFzb24sIHBlcmhhcHMgYmVjYXVzZSB0aGV5IGhhdmUKK2JlZW4gY29tcGlsZWQgZm9yIGRpZmZlcmVudCBwcm9jZXNzb3JzIG9yIGZvciBkaWZmZXJlbnQgZW5kaWFubmVzc2VzLiAKK1RoaXMgb3B0aW9uIHRlbGxzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHRoYXQgaXQgc2hvdWxkIHNpbGVudGx5IHBlcm1pdCBzdWNoIHBvc3NpYmxlCitlcnJvcnMuICBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggY2FyZSwgaW4gY2FzZXMgd2hlbiB5b3UKK2hhdmUgdGFrZW4gc29tZSBzcGVjaWFsIGFjdGlvbiB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgbGlua2VyIGVycm9ycyBhcmUKK2luYXBwcm9wcmlhdGUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR3YXJuXzAwMmRzZWFyY2hfMDAyZG1pc21hdGNoLTE5OCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1uby13YXJuLXNlYXJjaC1taXNtYXRjaDwvY29kZT48ZGQ+Tm9ybWFsbHkgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gd2lsbCBnaXZlIGEgd2FybmluZyBpZiBpdCBmaW5kcyBhbiBpbmNvbXBhdGlibGUKK2xpYnJhcnkgZHVyaW5nIGEgbGlicmFyeSBzZWFyY2guICBUaGlzIG9wdGlvbiBzaWxlbmNlcyB0aGUgd2FybmluZy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHdob2xlXzAwMmRhcmNoaXZlLTE5OSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1uby13aG9sZS1hcmNoaXZlPC9jb2RlPjxkZD5UdXJuIG9mZiB0aGUgZWZmZWN0IG9mIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdob2xlLWFyY2hpdmU8L3NwYW4+PC9zYW1wPiBvcHRpb24gZm9yIHN1YnNlcXVlbnQKK2FyY2hpdmUgZmlsZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtb3V0cHV0LWZpbGUtYWZ0ZXItZXJyb3JzLTIwMCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub2luaGliaXRfMDAyZGV4ZWMtMjAxIj48L2E+PGJyPjxkdD48Y29kZT4tLW5vaW5oaWJpdC1leGVjPC9jb2RlPjxkZD5SZXRhaW4gdGhlIGV4ZWN1dGFibGUgb3V0cHV0IGZpbGUgd2hlbmV2ZXIgaXQgaXMgc3RpbGwgdXNhYmxlLiAKK05vcm1hbGx5LCB0aGUgbGlua2VyIHdpbGwgbm90IHByb2R1Y2UgYW4gb3V0cHV0IGZpbGUgaWYgaXQgZW5jb3VudGVycworZXJyb3JzIGR1cmluZyB0aGUgbGluayBwcm9jZXNzOyBpdCBleGl0cyB3aXRob3V0IHdyaXRpbmcgYW4gb3V0cHV0IGZpbGUKK3doZW4gaXQgaXNzdWVzIGFueSBlcnJvciB3aGF0c29ldmVyLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkbm9zdGRsaWItMjAyIj48L2E+PGJyPjxkdD48Y29kZT4tbm9zdGRsaWI8L2NvZGU+PGRkPk9ubHkgc2VhcmNoIGxpYnJhcnkgZGlyZWN0b3JpZXMgZXhwbGljaXRseSBzcGVjaWZpZWQgb24gdGhlCitjb21tYW5kIGxpbmUuICBMaWJyYXJ5IGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiBsaW5rZXIgc2NyaXB0cworKGluY2x1ZGluZyBsaW5rZXIgc2NyaXB0cyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSkgYXJlIGlnbm9yZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG9mb3JtYXRfMDAzZF8wMDQwdmFyXzAwN2JvdXRwdXRfMDAyZGZvcm1hdF8wMDdkLTIwMyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1vZm9ybWF0PTwvY29kZT48dmFyPm91dHB1dC1mb3JtYXQ8L3Zhcj48ZGQ+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gbWF5IGJlIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGtpbmQgb2Ygb2JqZWN0CitmaWxlLiAgSWYgeW91ciA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBpcyBjb25maWd1cmVkIHRoaXMgd2F5LCB5b3UgY2FuIHVzZSB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1vZm9ybWF0PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBiaW5hcnkgZm9ybWF0IGZvciB0aGUgb3V0cHV0CitvYmplY3QgZmlsZS4gIEV2ZW4gd2hlbiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBpcyBjb25maWd1cmVkIHRvIHN1cHBvcnQgYWx0ZXJuYXRpdmUKK29iamVjdCBmb3JtYXRzLCB5b3UgZG9uJ3QgdXN1YWxseSBuZWVkIHRvIHNwZWNpZnkgdGhpcywgYXMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4KK3Nob3VsZCBiZSBjb25maWd1cmVkIHRvIHByb2R1Y2UgYXMgYSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgdGhlIG1vc3QKK3VzdWFsIGZvcm1hdCBvbiBlYWNoIG1hY2hpbmUuICA8dmFyPm91dHB1dC1mb3JtYXQ8L3Zhcj4gaXMgYSB0ZXh0IHN0cmluZywgdGhlCituYW1lIG9mIGEgcGFydGljdWxhciBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBCRkQgbGlicmFyaWVzLiAgKFlvdSBjYW4KK2xpc3QgdGhlIGF2YWlsYWJsZSBiaW5hcnkgZm9ybWF0cyB3aXRoICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b2JqZHVtcCAtaTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4pICBUaGUgc2NyaXB0Citjb21tYW5kIDxjb2RlPk9VVFBVVF9GT1JNQVQ8L2NvZGU+IGNhbiBhbHNvIHNwZWNpZnkgdGhlIG91dHB1dCBmb3JtYXQsIGJ1dAordGhpcyBvcHRpb24gb3ZlcnJpZGVzIGl0LiAgU2VlIDxhIGhyZWY9IkJGRC5odG1sI0JGRCI+QkZEPC9hPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZHBpZS0yMDQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkcGljXzAwMmRleGVjdXRhYmxlLTIwNSI+PC9hPjxicj48ZHQ+PGNvZGU+LXBpZTwvY29kZT48ZHQ+PGNvZGU+LS1waWMtZXhlY3V0YWJsZTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtcG9zaXRpb24taW5kZXBlbmRlbnQtZXhlY3V0YWJsZXMtMjA2Ij48L2E+Q3JlYXRlIGEgcG9zaXRpb24gaW5kZXBlbmRlbnQgZXhlY3V0YWJsZS4gIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIG9uCitFTEYgcGxhdGZvcm1zLiAgUG9zaXRpb24gaW5kZXBlbmRlbnQgZXhlY3V0YWJsZXMgYXJlIHNpbWlsYXIgdG8gc2hhcmVkCitsaWJyYXJpZXMgaW4gdGhhdCB0aGV5IGFyZSByZWxvY2F0ZWQgYnkgdGhlIGR5bmFtaWMgbGlua2VyIHRvIHRoZSB2aXJ0dWFsCithZGRyZXNzIHRoZSBPUyBjaG9vc2VzIGZvciB0aGVtICh3aGljaCBjYW4gdmFyeSBiZXR3ZWVuIGludm9jYXRpb25zKS4gIExpa2UKK25vcm1hbCBkeW5hbWljYWxseSBsaW5rZWQgZXhlY3V0YWJsZXMgdGhleSBjYW4gYmUgZXhlY3V0ZWQgYW5kIHN5bWJvbHMKK2RlZmluZWQgaW4gdGhlIGV4ZWN1dGFibGUgY2Fubm90IGJlIG92ZXJyaWRkZW4gYnkgc2hhcmVkIGxpYnJhcmllcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZHFtYWdpYy0yMDciPjwvYT48YnI+PGR0Pjxjb2RlPi1xbWFnaWM8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIExpbnV4IGNvbXBhdGliaWxpdHkuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRReS0yMDgiPjwvYT48YnI+PGR0Pjxjb2RlPi1ReTwvY29kZT48ZGQ+VGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3IgU1ZSNCBjb21wYXRpYmlsaXR5LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRyZWxheC0yMDkiPjwvYT48YSBuYW1lPSJpbmRleC1zeW50aGVzaXppbmctbGlua2VyLTIxMCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbGF4aW5nLWFkZHJlc3NpbmctbW9kZXMtMjExIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRyZWxheC0yMTIiPjwvYT48YnI+PGR0Pjxjb2RlPi0tcmVsYXg8L2NvZGU+PGR0Pjxjb2RlPi0tbm8tcmVsYXg8L2NvZGU+PGRkPkFuIG9wdGlvbiB3aXRoIG1hY2hpbmUgZGVwZW5kZW50IGVmZmVjdHMuIAorVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gYSBmZXcgdGFyZ2V0cy4gCitTZWUgPGEgaHJlZj0iSDhfMDAyZjMwMC5odG1sI0g4XzAwMmYzMDAiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgSDgvMzAwPC9hPi4gCitTZWUgPGEgaHJlZj0iaTk2MC5odG1sI2k5NjAiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgSW50ZWwgOTYwIGZhbWlseTwvYT4uIAorU2VlIDxhIGhyZWY9Ilh0ZW5zYS5odG1sI1h0ZW5zYSI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIFh0ZW5zYSBQcm9jZXNzb3JzPC9hPi4gCitTZWUgPGEgaHJlZj0iTTY4SEMxMV8wMDJmNjhIQzEyLmh0bWwjTTY4SEMxMV8wMDJmNjhIQzEyIj48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgdGhlIDY4SEMxMSBhbmQgNjhIQzEyPC9hPi4gCitTZWUgPGEgaHJlZj0iUG93ZXJQQy1FTEYzMi5odG1sI1Bvd2VyUEMtRUxGMzIiPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBQb3dlclBDIDMyLWJpdCBFTEYgU3VwcG9ydDwvYT4uCisKKyAgICAgPHA+T24gc29tZSBwbGF0Zm9ybXMgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1yZWxheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gcGVyZm9ybXMgdGFyZ2V0IHNwZWNpZmljLAorZ2xvYmFsIG9wdGltaXphdGlvbnMgdGhhdCBiZWNvbWUgcG9zc2libGUgd2hlbiB0aGUgbGlua2VyIHJlc29sdmVzCithZGRyZXNzaW5nIGluIHRoZSBwcm9ncmFtLCBzdWNoIGFzIHJlbGF4aW5nIGFkZHJlc3MgbW9kZXMsCitzeW50aGVzaXppbmcgbmV3IGluc3RydWN0aW9ucywgc2VsZWN0aW5nIHNob3J0ZXIgdmVyc2lvbiBvZiBjdXJyZW50CitpbnN0cnVjdGlvbnMsIGFuZCBjb21iaW5pZyBjb25zdGFudCB2YWx1ZXMuCisKKyAgICAgPHA+T24gc29tZSBwbGF0Zm9ybXMgdGhlc2UgbGluayB0aW1lIGdsb2JhbCBvcHRpbWl6YXRpb25zIG1heSBtYWtlIHN5bWJvbGljCitkZWJ1Z2dpbmcgb2YgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGltcG9zc2libGUuIAorVGhpcyBpcyBrbm93biB0byBiZSB0aGUgY2FzZSBmb3IgdGhlIE1hdHN1c2hpdGEgTU4xMDIwMCBhbmQgTU4xMDMwMAorZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisKKyAgICAgPHA+T24gcGxhdGZvcm1zIHdoZXJlIHRoaXMgaXMgbm90IHN1cHBvcnRlZCwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJlbGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFjY2VwdGVkLAorYnV0IGlnbm9yZWQuCisKKyAgICAgPHA+T24gcGxhdGZvcm1zIHdoZXJlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1yZWxheDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBhY2NlcHRlZCB0aGUgb3B0aW9uCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tcmVsYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgZmVhdHVyZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1yZXRhaW5pbmctc3BlY2lmaWVkLXN5bWJvbHMtMjEzIj48L2E+PGEgbmFtZT0iaW5kZXgtc3RyaXBwaW5nLWFsbC1idXQtc29tZS1zeW1ib2xzLTIxNCI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bWJvbHNfMDAyYy1yZXRhaW5pbmctc2VsZWN0aXZlbHktMjE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHJldGFpbl8wMDJkc3ltYm9sc18wMDJkZmlsZV8wMDNkXzAwNDB2YXJfMDA3YmZpbGVuYW1lXzAwN2QtMjE2Ij48L2E+PGJyPjxkdD48Y29kZT4tLXJldGFpbi1zeW1ib2xzLWZpbGU9PC9jb2RlPjx2YXI+ZmlsZW5hbWU8L3Zhcj48ZGQ+UmV0YWluIDxlbT5vbmx5PC9lbT4gdGhlIHN5bWJvbHMgbGlzdGVkIGluIHRoZSBmaWxlIDx2YXI+ZmlsZW5hbWU8L3Zhcj4sCitkaXNjYXJkaW5nIGFsbCBvdGhlcnMuICA8dmFyPmZpbGVuYW1lPC92YXI+IGlzIHNpbXBseSBhIGZsYXQgZmlsZSwgd2l0aCBvbmUKK3N5bWJvbCBuYW1lIHBlciBsaW5lLiAgVGhpcyBvcHRpb24gaXMgZXNwZWNpYWxseSB1c2VmdWwgaW4gZW52aXJvbm1lbnRzCisoc3VjaCBhcyBWeFdvcmtzKQord2hlcmUgYSBsYXJnZSBnbG9iYWwgc3ltYm9sIHRhYmxlIGlzIGFjY3VtdWxhdGVkIGdyYWR1YWxseSwgdG8gY29uc2VydmUKK3J1bi10aW1lIG1lbW9yeS4KKworICAgICA8cD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcmV0YWluLXN5bWJvbHMtZmlsZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkb2VzIDxlbT5ub3Q8L2VtPiBkaXNjYXJkIHVuZGVmaW5lZCBzeW1ib2xzLAorb3Igc3ltYm9scyBuZWVkZWQgZm9yIHJlbG9jYXRpb25zLgorCisgICAgIDxwPllvdSBtYXkgb25seSBzcGVjaWZ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1yZXRhaW4tc3ltYm9scy1maWxlPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9uY2UgaW4gdGhlIGNvbW1hbmQKK2xpbmUuICBJdCBvdmVycmlkZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tUzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8YnI+PGR0Pjxjb2RlPi1ycGF0aD08L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtcnVudGltZS1saWJyYXJ5LXNlYXJjaC1wYXRoLTIxNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkcnBhdGhfMDAzZF8wMDQwdmFyXzAwN2JkaXJfMDA3ZC0yMTgiPjwvYT5BZGQgYSBkaXJlY3RvcnkgdG8gdGhlIHJ1bnRpbWUgbGlicmFyeSBzZWFyY2ggcGF0aC4gIFRoaXMgaXMgdXNlZCB3aGVuCitsaW5raW5nIGFuIEVMRiBleGVjdXRhYmxlIHdpdGggc2hhcmVkIG9iamVjdHMuICBBbGwgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXJwYXRoPC9zcGFuPjwvc2FtcD4KK2FyZ3VtZW50cyBhcmUgY29uY2F0ZW5hdGVkIGFuZCBwYXNzZWQgdG8gdGhlIHJ1bnRpbWUgbGlua2VyLCB3aGljaCB1c2VzCit0aGVtIHRvIGxvY2F0ZSBzaGFyZWQgb2JqZWN0cyBhdCBydW50aW1lLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ycGF0aDwvc3Bhbj48L3NhbXA+IG9wdGlvbiBpcworYWxzbyB1c2VkIHdoZW4gbG9jYXRpbmcgc2hhcmVkIG9iamVjdHMgd2hpY2ggYXJlIG5lZWRlZCBieSBzaGFyZWQKK29iamVjdHMgZXhwbGljaXRseSBpbmNsdWRlZCBpbiB0aGUgbGluazsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ycGF0aC1saW5rPC9zcGFuPjwvc2FtcD4gb3B0aW9uLiAgSWYgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXJwYXRoPC9zcGFuPjwvc2FtcD4gaXMgbm90IHVzZWQgd2hlbiBsaW5raW5nIGFuCitFTEYgZXhlY3V0YWJsZSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorPGNvZGU+TERfUlVOX1BBVEg8L2NvZGU+IHdpbGwgYmUgdXNlZCBpZiBpdCBpcyBkZWZpbmVkLgorCisgICAgIDxwPlRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcnBhdGg8L3NwYW4+PC9zYW1wPiBvcHRpb24gbWF5IGFsc28gYmUgdXNlZCBvbiBTdW5PUy4gIEJ5IGRlZmF1bHQsIG9uCitTdW5PUywgdGhlIGxpbmtlciB3aWxsIGZvcm0gYSBydW50aW1lIHNlYXJjaCBwYXRjaCBvdXQgb2YgYWxsIHRoZQorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LUw8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGl0IGlzIGdpdmVuLiAgSWYgYSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcnBhdGg8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgdXNlZCwgdGhlCitydW50aW1lIHNlYXJjaCBwYXRoIHdpbGwgYmUgZm9ybWVkIGV4Y2x1c2l2ZWx5IHVzaW5nIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcnBhdGg8L3NwYW4+PC9zYW1wPgorb3B0aW9ucywgaWdub3JpbmcgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1MPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHVzaW5nCitnY2MsIHdoaWNoIGFkZHMgbWFueSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tTDwvc3Bhbj48L3NhbXA+IG9wdGlvbnMgd2hpY2ggbWF5IGJlIG9uIE5GUyBtb3VudGVkCitmaWxlIHN5c3RlbXMuCisKKyAgICAgPHA+Rm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBFTEYgbGlua2VycywgaWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1SPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzCitmb2xsb3dlZCBieSBhIGRpcmVjdG9yeSBuYW1lLCByYXRoZXIgdGhhbiBhIGZpbGUgbmFtZSwgaXQgaXMgdHJlYXRlZCBhcwordGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ycGF0aDwvc3Bhbj48L3NhbXA+IG9wdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1saW5rXzAwMmR0aW1lLXJ1bnRpbWUtbGlicmFyeS1zZWFyY2gtcGF0aC0yMTkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZHJwYXRoXzAwMmRsaW5rXzAwM2RfMDA0MHZhcl8wMDdiZGlyXzAwN2QtMjIwIj48L2E+PGJyPjxkdD48Y29kZT4tcnBhdGgtbGluaz08L2NvZGU+PHZhcj5kaXI8L3Zhcj48ZGQ+V2hlbiB1c2luZyBFTEYgb3IgU3VuT1MsIG9uZSBzaGFyZWQgbGlicmFyeSBtYXkgcmVxdWlyZSBhbm90aGVyLiAgVGhpcworaGFwcGVucyB3aGVuIGFuIDxjb2RlPmxkIC1zaGFyZWQ8L2NvZGU+IGxpbmsgaW5jbHVkZXMgYSBzaGFyZWQgbGlicmFyeSBhcyBvbmUKK29mIHRoZSBpbnB1dCBmaWxlcy4KKworICAgICA8cD5XaGVuIHRoZSBsaW5rZXIgZW5jb3VudGVycyBzdWNoIGEgZGVwZW5kZW5jeSB3aGVuIGRvaW5nIGEgbm9uLXNoYXJlZCwKK25vbi1yZWxvY2F0YWJsZSBsaW5rLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgdHJ5IHRvIGxvY2F0ZSB0aGUgcmVxdWlyZWQKK3NoYXJlZCBsaWJyYXJ5IGFuZCBpbmNsdWRlIGl0IGluIHRoZSBsaW5rLCBpZiBpdCBpcyBub3QgaW5jbHVkZWQKK2V4cGxpY2l0bHkuICBJbiBzdWNoIGEgY2FzZSwgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ycGF0aC1saW5rPC9zcGFuPjwvc2FtcD4gb3B0aW9uCitzcGVjaWZpZXMgdGhlIGZpcnN0IHNldCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2guICBUaGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ycGF0aC1saW5rPC9zcGFuPjwvc2FtcD4gb3B0aW9uIG1heSBzcGVjaWZ5IGEgc2VxdWVuY2Ugb2YgZGlyZWN0b3J5IG5hbWVzCitlaXRoZXIgYnkgc3BlY2lmeWluZyBhIGxpc3Qgb2YgbmFtZXMgc2VwYXJhdGVkIGJ5IGNvbG9ucywgb3IgYnkKK2FwcGVhcmluZyBtdWx0aXBsZSB0aW1lcy4KKworICAgICA8cD5UaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gYXMgaXQgb3ZlcnJpZGVzIHRoZSBzZWFyY2ggcGF0aAordGhhdCBtYXkgaGF2ZSBiZWVuIGhhcmQgY29tcGlsZWQgaW50byBhIHNoYXJlZCBsaWJyYXJ5LiBJbiBzdWNoIGEgY2FzZSBpdAoraXMgcG9zc2libGUgdG8gdXNlIHVuaW50ZW50aW9uYWxseSBhIGRpZmZlcmVudCBzZWFyY2ggcGF0aCB0aGFuIHRoZQorcnVudGltZSBsaW5rZXIgd291bGQgZG8uCisKKyAgICAgPHA+VGhlIGxpbmtlciB1c2VzIHRoZSBmb2xsb3dpbmcgc2VhcmNoIHBhdGhzIHRvIGxvY2F0ZSByZXF1aXJlZCBzaGFyZWQKK2xpYnJhcmllczoKKyAgICAgICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+QW55IGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcnBhdGgtbGluazwvc3Bhbj48L3NhbXA+IG9wdGlvbnMuIAorPGxpPkFueSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXJwYXRoPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4gIFRoZSBkaWZmZXJlbmNlCitiZXR3ZWVuIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ycGF0aDwvc3Bhbj48L3NhbXA+IGFuZCA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcnBhdGgtbGluazwvc3Bhbj48L3NhbXA+IGlzIHRoYXQgZGlyZWN0b3JpZXMKK3NwZWNpZmllZCBieSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tcnBhdGg8L3NwYW4+PC9zYW1wPiBvcHRpb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgZXhlY3V0YWJsZSBhbmQKK3VzZWQgYXQgcnVudGltZSwgd2hlcmVhcyB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXJwYXRoLWxpbms8L3NwYW4+PC9zYW1wPiBvcHRpb24gaXMgb25seSBlZmZlY3RpdmUKK2F0IGxpbmsgdGltZS4gU2VhcmNoaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ycGF0aDwvc3Bhbj48L3NhbXA+IGluIHRoaXMgd2F5IGlzIG9ubHkgc3VwcG9ydGVkCitieSBuYXRpdmUgbGlua2VycyBhbmQgY3Jvc3MgbGlua2VycyB3aGljaCBoYXZlIGJlZW4gY29uZmlndXJlZCB3aXRoCit0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS13aXRoLXN5c3Jvb3Q8L3NwYW4+PC9zYW1wPiBvcHRpb24uIAorPGxpPk9uIGFuIEVMRiBzeXN0ZW0sIGZvciBuYXRpdmUgbGlua2VycywgaWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1ycGF0aDwvc3Bhbj48L3NhbXA+IGFuZAorPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXJwYXRoLWxpbms8L3NwYW4+PC9zYW1wPiBvcHRpb25zIHdlcmUgbm90IHVzZWQsIHNlYXJjaCB0aGUgY29udGVudHMgb2YgdGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSA8Y29kZT5MRF9SVU5fUEFUSDwvY29kZT4uIAorPGxpPk9uIFN1bk9TLCBpZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LXJwYXRoPC9zcGFuPjwvc2FtcD4gb3B0aW9uIHdhcyBub3QgdXNlZCwgc2VhcmNoIGFueQorZGlyZWN0b3JpZXMgc3BlY2lmaWVkIHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1MPC9zcGFuPjwvc2FtcD4gb3B0aW9ucy4gCis8bGk+Rm9yIGEgbmF0aXZlIGxpbmtlciwgdGhlIHNlYXJjaCB0aGUgY29udGVudHMgb2YgdGhlIGVudmlyb25tZW50Cit2YXJpYWJsZSA8Y29kZT5MRF9MSUJSQVJZX1BBVEg8L2NvZGU+LiAKKzxsaT5Gb3IgYSBuYXRpdmUgRUxGIGxpbmtlciwgdGhlIGRpcmVjdG9yaWVzIGluIDxjb2RlPkRUX1JVTlBBVEg8L2NvZGU+IG9yCis8Y29kZT5EVF9SUEFUSDwvY29kZT4gb2YgYSBzaGFyZWQgbGlicmFyeSBhcmUgc2VhcmNoZWQgZm9yIHNoYXJlZAorbGlicmFyaWVzIG5lZWRlZCBieSBpdC4gVGhlIDxjb2RlPkRUX1JQQVRIPC9jb2RlPiBlbnRyaWVzIGFyZSBpZ25vcmVkIGlmCis8Y29kZT5EVF9SVU5QQVRIPC9jb2RlPiBlbnRyaWVzIGV4aXN0LiAKKzxsaT5UaGUgZGVmYXVsdCBkaXJlY3Rvcmllcywgbm9ybWFsbHkgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi9saWI8L3NwYW4+PC9zYW1wPiBhbmQgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi91c3IvbGliPC9zcGFuPjwvc2FtcD4uIAorPGxpPkZvciBhIG5hdGl2ZSBsaW5rZXIgb24gYW4gRUxGIHN5c3RlbSwgaWYgdGhlIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPi9ldGMvbGQuc28uY29uZjwvc3Bhbj48L3NhbXA+CitleGlzdHMsIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIGZvdW5kIGluIHRoYXQgZmlsZS4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPklmIHRoZSByZXF1aXJlZCBzaGFyZWQgbGlicmFyeSBpcyBub3QgZm91bmQsIHRoZSBsaW5rZXIgd2lsbCBpc3N1ZSBhCit3YXJuaW5nIGFuZCBjb250aW51ZSB3aXRoIHRoZSBsaW5rLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkc2hhcmVkLTIyMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkQnNoYXJlYWJsZS0yMjIiPjwvYT48YnI+PGR0Pjxjb2RlPi1zaGFyZWQ8L2NvZGU+PGR0Pjxjb2RlPi1Cc2hhcmVhYmxlPC9jb2RlPjxkZD48YSBuYW1lPSJpbmRleC1zaGFyZWQtbGlicmFyaWVzLTIyMyI+PC9hPkNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LiAgVGhpcyBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgb24gRUxGLCBYQ09GRgorYW5kIFN1bk9TIHBsYXRmb3Jtcy4gIE9uIFN1bk9TLCB0aGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYQorc2hhcmVkIGxpYnJhcnkgaWYgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1lPC9zcGFuPjwvc2FtcD4gb3B0aW9uIGlzIG5vdCB1c2VkIGFuZCB0aGVyZSBhcmUKK3VuZGVmaW5lZCBzeW1ib2xzIGluIHRoZSBsaW5rLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRzb3J0XzAwMmRjb21tb24tMjI0Ij48L2E+PGJyPjxkdD48Y29kZT4tLXNvcnQtY29tbW9uPC9jb2RlPjxkdD48Y29kZT4tLXNvcnQtY29tbW9uPWFzY2VuZGluZzwvY29kZT48ZHQ+PGNvZGU+LS1zb3J0LWNvbW1vbj1kZXNjZW5kaW5nPC9jb2RlPjxkZD5UaGlzIG9wdGlvbiB0ZWxscyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0byBzb3J0IHRoZSBjb21tb24gc3ltYm9scyBieSBhbGlnbm1lbnQgaW4KK2FzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyIHdoZW4gaXQgcGxhY2VzIHRoZW0gaW4gdGhlIGFwcHJvcHJpYXRlIG91dHB1dAorc2VjdGlvbnMuICBUaGUgc3ltYm9sIGFsaWdubWVudHMgY29uc2lkZXJlZCBhcmUgc2l4dGVlbi1ieXRlIG9yIGxhcmdlciwKK2VpZ2h0LWJ5dGUsIGZvdXItYnl0ZSwgdHdvLWJ5dGUsIGFuZCBvbmUtYnl0ZS4gVGhpcyBpcyB0byBwcmV2ZW50IGdhcHMKK2JldHdlZW4gc3ltYm9scyBkdWUgdG8gYWxpZ25tZW50IGNvbnN0cmFpbnRzLiAgSWYgbm8gc29ydGluZyBvcmRlciBpcworc3BlY2lmaWVkLCB0aGVuIGRlc2NlbmRpbmcgb3JkZXIgaXMgYXNzdW1lZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkc29ydF8wMDJkc2VjdGlvbl8wMDNkbmFtZS0yMjUiPjwvYT48YnI+PGR0Pjxjb2RlPi0tc29ydC1zZWN0aW9uPW5hbWU8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIHdpbGwgYXBwbHkgPGNvZGU+U09SVF9CWV9OQU1FPC9jb2RlPiB0byBhbGwgd2lsZGNhcmQgc2VjdGlvbgorcGF0dGVybnMgaW4gdGhlIGxpbmtlciBzY3JpcHQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHNvcnRfMDAyZHNlY3Rpb25fMDAzZGFsaWdubWVudC0yMjYiPjwvYT48YnI+PGR0Pjxjb2RlPi0tc29ydC1zZWN0aW9uPWFsaWdubWVudDwvY29kZT48ZGQ+VGhpcyBvcHRpb24gd2lsbCBhcHBseSA8Y29kZT5TT1JUX0JZX0FMSUdOTUVOVDwvY29kZT4gdG8gYWxsIHdpbGRjYXJkIHNlY3Rpb24KK3BhdHRlcm5zIGluIHRoZSBsaW5rZXIgc2NyaXB0LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRzcGxpdF8wMDJkYnlfMDAyZGZpbGUtMjI3Ij48L2E+PGJyPjxkdD48Y29kZT4tLXNwbGl0LWJ5LWZpbGVbPTwvY29kZT48dmFyPnNpemU8L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5TaW1pbGFyIHRvIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3BsaXQtYnktcmVsb2M8L3NwYW4+PC9zYW1wPiBidXQgY3JlYXRlcyBhIG5ldyBvdXRwdXQgc2VjdGlvbiBmb3IKK2VhY2ggaW5wdXQgZmlsZSB3aGVuIDx2YXI+c2l6ZTwvdmFyPiBpcyByZWFjaGVkLiAgPHZhcj5zaXplPC92YXI+IGRlZmF1bHRzIHRvIGEKK3NpemUgb2YgMSBpZiBub3QgZ2l2ZW4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHNwbGl0XzAwMmRieV8wMDJkcmVsb2MtMjI4Ij48L2E+PGJyPjxkdD48Y29kZT4tLXNwbGl0LWJ5LXJlbG9jWz08L2NvZGU+PHZhcj5jb3VudDwvdmFyPjxjb2RlPl08L2NvZGU+PGRkPlRyaWVzIHRvIGNyZWF0ZXMgZXh0cmEgc2VjdGlvbnMgaW4gdGhlIG91dHB1dCBmaWxlIHNvIHRoYXQgbm8gc2luZ2xlCitvdXRwdXQgc2VjdGlvbiBpbiB0aGUgZmlsZSBjb250YWlucyBtb3JlIHRoYW4gPHZhcj5jb3VudDwvdmFyPiByZWxvY2F0aW9ucy4gCitUaGlzIGlzIHVzZWZ1bCB3aGVuIGdlbmVyYXRpbmcgaHVnZSByZWxvY2F0YWJsZSBmaWxlcyBmb3IgZG93bmxvYWRpbmcgaW50bworY2VydGFpbiByZWFsIHRpbWUga2VybmVscyB3aXRoIHRoZSBDT0ZGIG9iamVjdCBmaWxlIGZvcm1hdDsgc2luY2UgQ09GRgorY2Fubm90IHJlcHJlc2VudCBtb3JlIHRoYW4gNjU1MzUgcmVsb2NhdGlvbnMgaW4gYSBzaW5nbGUgc2VjdGlvbi4gIE5vdGUKK3RoYXQgdGhpcyB3aWxsIGZhaWwgdG8gd29yayB3aXRoIG9iamVjdCBmaWxlIGZvcm1hdHMgd2hpY2ggZG8gbm90CitzdXBwb3J0IGFyYml0cmFyeSBzZWN0aW9ucy4gIFRoZSBsaW5rZXIgd2lsbCBub3Qgc3BsaXQgdXAgaW5kaXZpZHVhbAoraW5wdXQgc2VjdGlvbnMgZm9yIHJlZGlzdHJpYnV0aW9uLCBzbyBpZiBhIHNpbmdsZSBpbnB1dCBzZWN0aW9uIGNvbnRhaW5zCittb3JlIHRoYW4gPHZhcj5jb3VudDwvdmFyPiByZWxvY2F0aW9ucyBvbmUgb3V0cHV0IHNlY3Rpb24gd2lsbCBjb250YWluIHRoYXQKK21hbnkgcmVsb2NhdGlvbnMuICA8dmFyPmNvdW50PC92YXI+IGRlZmF1bHRzIHRvIGEgdmFsdWUgb2YgMzI3NjguCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHN0YXRzLTIyOSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1zdGF0czwvY29kZT48ZGQ+Q29tcHV0ZSBhbmQgZGlzcGxheSBzdGF0aXN0aWNzIGFib3V0IHRoZSBvcGVyYXRpb24gb2YgdGhlIGxpbmtlciwgc3VjaAorYXMgZXhlY3V0aW9uIHRpbWUgYW5kIG1lbW9yeSB1c2FnZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkc3lzcm9vdF8wMDNkXzAwNDB2YXJfMDA3YmRpcmVjdG9yeV8wMDdkLTIzMCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1zeXNyb290PTwvY29kZT48dmFyPmRpcmVjdG9yeTwvdmFyPjxkZD5Vc2UgPHZhcj5kaXJlY3Rvcnk8L3Zhcj4gYXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeXNyb290LCBvdmVycmlkaW5nIHRoZQorY29uZmlndXJlLXRpbWUgZGVmYXVsdC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IGxpbmtlcnMKK3RoYXQgd2VyZSBjb25maWd1cmVkIHVzaW5nIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2l0aC1zeXNyb290PC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHRyYWRpdGlvbmFsXzAwMmRmb3JtYXQtMjMxIj48L2E+PGEgbmFtZT0iaW5kZXgtdHJhZGl0aW9uYWwtZm9ybWF0LTIzMiI+PC9hPjxicj48ZHQ+PGNvZGU+LS10cmFkaXRpb25hbC1mb3JtYXQ8L2NvZGU+PGRkPkZvciBzb21lIHRhcmdldHMsIHRoZSBvdXRwdXQgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gaXMgZGlmZmVyZW50IGluIHNvbWUgd2F5cyBmcm9tCit0aGUgb3V0cHV0IG9mIHNvbWUgZXhpc3RpbmcgbGlua2VyLiAgVGhpcyBzd2l0Y2ggcmVxdWVzdHMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gdG8KK3VzZSB0aGUgdHJhZGl0aW9uYWwgZm9ybWF0IGluc3RlYWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZGJ4LTIzMyI+PC9hPkZvciBleGFtcGxlLCBvbiBTdW5PUywgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gY29tYmluZXMgZHVwbGljYXRlIGVudHJpZXMgaW4gdGhlCitzeW1ib2wgc3RyaW5nIHRhYmxlLiAgVGhpcyBjYW4gcmVkdWNlIHRoZSBzaXplIG9mIGFuIG91dHB1dCBmaWxlIHdpdGgKK2Z1bGwgZGVidWdnaW5nIGluZm9ybWF0aW9uIGJ5IG92ZXIgMzAgcGVyY2VudC4gIFVuZm9ydHVuYXRlbHksIHRoZSBTdW5PUworPGNvZGU+ZGJ4PC9jb2RlPiBwcm9ncmFtIGNhbiBub3QgcmVhZCB0aGUgcmVzdWx0aW5nIHByb2dyYW0gKDxjb2RlPmdkYjwvY29kZT4gaGFzIG5vCit0cm91YmxlKS4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tdHJhZGl0aW9uYWwtZm9ybWF0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHN3aXRjaCB0ZWxscyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0byBub3QKK2NvbWJpbmUgZHVwbGljYXRlIGVudHJpZXMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHNlY3Rpb25fMDAyZHN0YXJ0XzAwM2RfMDA0MHZhcl8wMDdic2VjdGlvbm5hbWVfMDA3ZF8wMDNkXzAwNDB2YXJfMDA3Ym9yZ18wMDdkLTIzNCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1zZWN0aW9uLXN0YXJ0PTwvY29kZT48dmFyPnNlY3Rpb25uYW1lPC92YXI+PGNvZGU+PTwvY29kZT48dmFyPm9yZzwvdmFyPjxkZD5Mb2NhdGUgYSBzZWN0aW9uIGluIHRoZSBvdXRwdXQgZmlsZSBhdCB0aGUgYWJzb2x1dGUKK2FkZHJlc3MgZ2l2ZW4gYnkgPHZhcj5vcmc8L3Zhcj4uICBZb3UgbWF5IHVzZSB0aGlzIG9wdGlvbiBhcyBtYW55Cit0aW1lcyBhcyBuZWNlc3NhcnkgdG8gbG9jYXRlIG11bHRpcGxlIHNlY3Rpb25zIGluIHRoZSBjb21tYW5kCitsaW5lLiAKKzx2YXI+b3JnPC92YXI+IG11c3QgYmUgYSBzaW5nbGUgaGV4YWRlY2ltYWwgaW50ZWdlcjsKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgbGlua2VycywgeW91IG1heSBvbWl0IHRoZSBsZWFkaW5nCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4PC9zcGFuPjwvc2FtcD4mcnNxdW87IHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGhleGFkZWNpbWFsIHZhbHVlcy4gIDxlbT5Ob3RlOjwvZW0+IHRoZXJlCitzaG91bGQgYmUgbm8gd2hpdGUgc3BhY2UgYmV0d2VlbiA8dmFyPnNlY3Rpb25uYW1lPC92YXI+LCB0aGUgZXF1YWxzCitzaWduICgmbGRxdW87Jmx0Oz0mZ3Q7JnJkcXVvOyksIGFuZCA8dmFyPm9yZzwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZFRic3NfMDAzZF8wMDQwdmFyXzAwN2JvcmdfMDA3ZC0yMzUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZFRkYXRhXzAwM2RfMDA0MHZhcl8wMDdib3JnXzAwN2QtMjM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRUdGV4dF8wMDNkXzAwNDB2YXJfMDA3Ym9yZ18wMDdkLTIzNyI+PC9hPjxhIG5hbWU9ImluZGV4LXNlZ21lbnQtb3JpZ2luc18wMDJjLWNtZC1saW5lLTIzOCI+PC9hPjxicj48ZHQ+PGNvZGU+LVRic3M9PC9jb2RlPjx2YXI+b3JnPC92YXI+PGR0Pjxjb2RlPi1UZGF0YT08L2NvZGU+PHZhcj5vcmc8L3Zhcj48ZHQ+PGNvZGU+LVR0ZXh0PTwvY29kZT48dmFyPm9yZzwvdmFyPjxkZD5TYW1lIGFzIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2VjdGlvbi1zdGFydDwvc3Bhbj48L3NhbXA+LCB3aXRoIDxjb2RlPi5ic3M8L2NvZGU+LCA8Y29kZT4uZGF0YTwvY29kZT4gb3IKKzxjb2RlPi50ZXh0PC9jb2RlPiBhcyB0aGUgPHZhcj5zZWN0aW9ubmFtZTwvdmFyPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZFR0ZXh0XzAwMmRzZWdtZW50XzAwM2RfMDA0MHZhcl8wMDdib3JnXzAwN2QtMjM5Ij48L2E+PGJyPjxkdD48Y29kZT4tVHRleHQtc2VnbWVudD08L2NvZGU+PHZhcj5vcmc8L3Zhcj48ZGQ+PGEgbmFtZT0iaW5kZXgtdGV4dC1zZWdtZW50LW9yaWdpbl8wMDJjLWNtZC1saW5lLTI0MCI+PC9hPldoZW4gY3JlYXRpbmcgYW4gRUxGIGV4ZWN1dGFibGUgb3Igc2hhcmVkIG9iamVjdCwgaXQgd2lsbCBzZXQgdGhlIGFkZHJlc3MKK29mIHRoZSBmaXJzdCBieXRlIG9mIHRoZSB0ZXh0IHNlZ21lbnQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRUcm9kYXRhXzAwMmRzZWdtZW50XzAwM2RfMDA0MHZhcl8wMDdib3JnXzAwN2QtMjQxIj48L2E+PGJyPjxkdD48Y29kZT4tVHJvZGF0YS1zZWdtZW50PTwvY29kZT48dmFyPm9yZzwvdmFyPjxkZD48YSBuYW1lPSJpbmRleC1yb2RhdGEtc2VnbWVudC1vcmlnaW5fMDAyYy1jbWQtbGluZS0yNDIiPjwvYT5XaGVuIGNyZWF0aW5nIGFuIEVMRiBleGVjdXRhYmxlIG9yIHNoYXJlZCBvYmplY3QgZm9yIGEgdGFyZ2V0IHdoZXJlCit0aGUgcmVhZC1vbmx5IGRhdGEgaXMgaW4gaXRzIG93biBzZWdtZW50IHNlcGFyYXRlIGZyb20gdGhlIGV4ZWN1dGFibGUKK3RleHQsIGl0IHdpbGwgc2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZWFkLW9ubHkgZGF0YSBzZWdtZW50LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR1bnJlc29sdmVkXzAwMmRzeW1ib2xzLTI0MyI+PC9hPjxicj48ZHQ+PGNvZGU+LS11bnJlc29sdmVkLXN5bWJvbHM9PC9jb2RlPjx2YXI+bWV0aG9kPC92YXI+PGRkPkRldGVybWluZSBob3cgdG8gaGFuZGxlIHVucmVzb2x2ZWQgc3ltYm9scy4gIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmxlCit2YWx1ZXMgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bWV0aG9kPC9zcGFuPjwvc2FtcD4mcnNxdW87OgorCisgICAgICAgICAgPGRsPgorPGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aWdub3JlLWFsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5EbyBub3QgcmVwb3J0IGFueSB1bnJlc29sdmVkIHN5bWJvbHMuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+cmVwb3J0LWFsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5SZXBvcnQgYWxsIHVucmVzb2x2ZWQgc3ltYm9scy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+aWdub3JlLWluLW9iamVjdC1maWxlczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5SZXBvcnQgdW5yZXNvbHZlZCBzeW1ib2xzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiBzaGFyZWQgbGlicmFyaWVzLCBidXQKK2lnbm9yZSB0aGVtIGlmIHRoZXkgY29tZSBmcm9tIHJlZ3VsYXIgb2JqZWN0IGZpbGVzLgorCisgICAgICAgICAgPGJyPjxkdD4mbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmlnbm9yZS1pbi1zaGFyZWQtbGliczwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5SZXBvcnQgdW5yZXNvbHZlZCBzeW1ib2xzIHRoYXQgY29tZSBmcm9tIHJlZ3VsYXIgb2JqZWN0IGZpbGVzLCBidXQKK2lnbm9yZSB0aGVtIGlmIHRoZXkgY29tZSBmcm9tIHNoYXJlZCBsaWJyYXJpZXMuICBUaGlzIGNhbiBiZSB1c2VmdWwKK3doZW4gY3JlYXRpbmcgYSBkeW5hbWljIGJpbmFyeSBhbmQgaXQgaXMga25vd24gdGhhdCBhbGwgdGhlIHNoYXJlZAorbGlicmFyaWVzIHRoYXQgaXQgc2hvdWxkIGJlIHJlZmVyZW5jaW5nIGFyZSBpbmNsdWRlZCBvbiB0aGUgbGlua2VyJ3MKK2NvbW1hbmQgbGluZS4gCis8L2RsPgorCisgICAgIDxwPlRoZSBiZWhhdmlvdXIgZm9yIHNoYXJlZCBsaWJyYXJpZXMgb24gdGhlaXIgb3duIGNhbiBhbHNvIGJlIGNvbnRyb2xsZWQKK2J5IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLVtuby1dYWxsb3ctc2hsaWItdW5kZWZpbmVkPC9zcGFuPjwvc2FtcD4gb3B0aW9uLgorCisgICAgIDxwPk5vcm1hbGx5IHRoZSBsaW5rZXIgd2lsbCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlIGZvciBlYWNoIHJlcG9ydGVkCit1bnJlc29sdmVkIHN5bWJvbCBidXQgdGhlIG9wdGlvbiA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdhcm4tdW5yZXNvbHZlZC1zeW1ib2xzPC9zcGFuPjwvc2FtcD4KK2NhbiBjaGFuZ2UgdGhpcyB0byBhIHdhcm5pbmcuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHZlcmJvc2VfMDA1Yl8wMDNkXzAwNDB2YXJfMDA3Yk5VTUJFUl8wMDdkXzAwNWQtMjQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmVyYm9zZV8wMDViXzAwM2RfMDA0MHZhcl8wMDdiTlVNQkVSXzAwN2RfMDA1ZC0yNDUiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZGxsLXZlcmJvc2U8L2NvZGU+PGR0Pjxjb2RlPi0tdmVyYm9zZVs9PC9jb2RlPjx2YXI+TlVNQkVSPC92YXI+PGNvZGU+XTwvY29kZT48ZGQ+RGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBsaXN0IHRoZSBsaW5rZXIgZW11bGF0aW9ucworc3VwcG9ydGVkLiAgRGlzcGxheSB3aGljaCBpbnB1dCBmaWxlcyBjYW4gYW5kIGNhbm5vdCBiZSBvcGVuZWQuICBEaXNwbGF5Cit0aGUgbGlua2VyIHNjcmlwdCBiZWluZyB1c2VkIGJ5IHRoZSBsaW5rZXIuIElmIHRoZSBvcHRpb25hbCA8dmFyPk5VTUJFUjwvdmFyPgorYXJndW1lbnQgJmd0OyAxLCBwbHVnaW4gc3ltYm9sIHN0YXR1cyB3aWxsIGFsc28gYmUgZGlzcGxheWVkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR2ZXJzaW9uXzAwMmRzY3JpcHRfMDAzZF8wMDQwdmFyXzAwN2J2ZXJzaW9uXzAwMmRzY3JpcHRmaWxlXzAwN2QtMjQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmVyc2lvbi1zY3JpcHRfMDAyYy1zeW1ib2wtdmVyc2lvbnMtMjQ3Ij48L2E+PGJyPjxkdD48Y29kZT4tLXZlcnNpb24tc2NyaXB0PTwvY29kZT48dmFyPnZlcnNpb24tc2NyaXB0ZmlsZTwvdmFyPjxkZD5TcGVjaWZ5IHRoZSBuYW1lIG9mIGEgdmVyc2lvbiBzY3JpcHQgdG8gdGhlIGxpbmtlci4gIFRoaXMgaXMgdHlwaWNhbGx5Cit1c2VkIHdoZW4gY3JlYXRpbmcgc2hhcmVkIGxpYnJhcmllcyB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSB2ZXJzaW9uIGhpZXJhcmNoeSBmb3IgdGhlIGxpYnJhcnkgYmVpbmcgY3JlYXRlZC4gIFRoaXMgb3B0aW9uCitpcyBvbmx5IGZ1bGx5IHN1cHBvcnRlZCBvbiBFTEYgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllczsKK3NlZSA8YSBocmVmPSJWRVJTSU9OLmh0bWwjVkVSU0lPTiI+VkVSU0lPTjwvYT4uICBJdCBpcyBwYXJ0aWFsbHkgc3VwcG9ydGVkIG9uIFBFIHBsYXRmb3Jtcywgd2hpY2ggY2FuCit1c2UgdmVyc2lvbiBzY3JpcHRzIHRvIGZpbHRlciBzeW1ib2wgdmlzaWJpbGl0eSBpbiBhdXRvLWV4cG9ydCBtb2RlOiBhbnkKK3N5bWJvbHMgbWFya2VkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bG9jYWw8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW4gdGhlIHZlcnNpb24gc2NyaXB0IHdpbGwgbm90IGJlIGV4cG9ydGVkLiAKK1NlZSA8YSBocmVmPSJXSU4zMi5odG1sI1dJTjMyIj5XSU4zMjwvYT4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHdhcm5fMDAyZGNvbW1vbi0yNDgiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nc18wMDJjLW9uLWNvbWJpbmluZy1zeW1ib2xzLTI0OSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbWJpbmluZy1zeW1ib2xzXzAwMmMtd2FybmluZ3Mtb24tMjUwIj48L2E+PGJyPjxkdD48Y29kZT4tLXdhcm4tY29tbW9uPC9jb2RlPjxkZD5XYXJuIHdoZW4gYSBjb21tb24gc3ltYm9sIGlzIGNvbWJpbmVkIHdpdGggYW5vdGhlciBjb21tb24gc3ltYm9sIG9yIHdpdGgKK2Egc3ltYm9sIGRlZmluaXRpb24uICBVbml4IGxpbmtlcnMgYWxsb3cgdGhpcyBzb21ld2hhdCBzbG9wcHkgcHJhY3Rpc2UsCitidXQgbGlua2VycyBvbiBzb21lIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGRvIG5vdC4gIFRoaXMgb3B0aW9uIGFsbG93cworeW91IHRvIGZpbmQgcG90ZW50aWFsIHByb2JsZW1zIGZyb20gY29tYmluaW5nIGdsb2JhbCBzeW1ib2xzLiAKK1VuZm9ydHVuYXRlbHksIHNvbWUgQyBsaWJyYXJpZXMgdXNlIHRoaXMgcHJhY3Rpc2UsIHNvIHlvdSBtYXkgZ2V0IHNvbWUKK3dhcm5pbmdzIGFib3V0IHN5bWJvbHMgaW4gdGhlIGxpYnJhcmllcyBhcyB3ZWxsIGFzIGluIHlvdXIgcHJvZ3JhbXMuCisKKyAgICAgPHA+VGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGdsb2JhbCBzeW1ib2xzLCBpbGx1c3RyYXRlZCBoZXJlIGJ5IEMgZXhhbXBsZXM6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnQgaSA9IDE7PC9zcGFuPjwvc2FtcD4mcnNxdW87PGRkPkEgZGVmaW5pdGlvbiwgd2hpY2ggZ29lcyBpbiB0aGUgaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uIG9mIHRoZSBvdXRwdXQKK2ZpbGUuCisKKyAgICAgICAgICA8YnI+PGR0PiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXh0ZXJuIGludCBpOzwvc3Bhbj48L3NhbXA+JnJzcXVvOzxkZD5BbiB1bmRlZmluZWQgcmVmZXJlbmNlLCB3aGljaCBkb2VzIG5vdCBhbGxvY2F0ZSBzcGFjZS4gCitUaGVyZSBtdXN0IGJlIGVpdGhlciBhIGRlZmluaXRpb24gb3IgYSBjb21tb24gc3ltYm9sIGZvciB0aGUKK3ZhcmlhYmxlIHNvbWV3aGVyZS4KKworICAgICAgICAgIDxicj48ZHQ+JmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5pbnQgaTs8L3NwYW4+PC9zYW1wPiZyc3F1bzs8ZGQ+QSBjb21tb24gc3ltYm9sLiAgSWYgdGhlcmUgYXJlIG9ubHkgKG9uZSBvciBtb3JlKSBjb21tb24gc3ltYm9scyBmb3IgYQordmFyaWFibGUsIGl0IGdvZXMgaW4gdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIG9mIHRoZSBvdXRwdXQgZmlsZS4gCitUaGUgbGlua2VyIG1lcmdlcyBtdWx0aXBsZSBjb21tb24gc3ltYm9scyBmb3IgdGhlIHNhbWUgdmFyaWFibGUgaW50byBhCitzaW5nbGUgc3ltYm9sLiAgSWYgdGhleSBhcmUgb2YgZGlmZmVyZW50IHNpemVzLCBpdCBwaWNrcyB0aGUgbGFyZ2VzdAorc2l6ZS4gIFRoZSBsaW5rZXIgdHVybnMgYSBjb21tb24gc3ltYm9sIGludG8gYSBkZWNsYXJhdGlvbiwgaWYgdGhlcmUgaXMKK2EgZGVmaW5pdGlvbiBvZiB0aGUgc2FtZSB2YXJpYWJsZS4gCis8L2RsPgorCisgICAgIDxwPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0td2Fybi1jb21tb248L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGNhbiBwcm9kdWNlIGZpdmUga2luZHMgb2Ygd2FybmluZ3MuIAorRWFjaCB3YXJuaW5nIGNvbnNpc3RzIG9mIGEgcGFpciBvZiBsaW5lczogdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgc3ltYm9sCitqdXN0IGVuY291bnRlcmVkLCBhbmQgdGhlIHNlY29uZCBkZXNjcmliZXMgdGhlIHByZXZpb3VzIHN5bWJvbAorZW5jb3VudGVyZWQgd2l0aCB0aGUgc2FtZSBuYW1lLiAgT25lIG9yIGJvdGggb2YgdGhlIHR3byBzeW1ib2xzIHdpbGwgYmUKK2EgY29tbW9uIHN5bWJvbC4KKworICAgICAgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT5UdXJuaW5nIGEgY29tbW9uIHN5bWJvbCBpbnRvIGEgcmVmZXJlbmNlLCBiZWNhdXNlIHRoZXJlIGlzIGFscmVhZHkgYQorZGVmaW5pdGlvbiBmb3IgdGhlIHN5bWJvbC4KKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIDx2YXI+ZmlsZTwvdmFyPig8dmFyPnNlY3Rpb248L3Zhcj4pOiB3YXJuaW5nOiBjb21tb24gb2YgYDx2YXI+c3ltYm9sPC92YXI+JworICAgICAgICAgICAgICAgICAgb3ZlcnJpZGRlbiBieSBkZWZpbml0aW9uCisgICAgICAgICAgICAgICA8dmFyPmZpbGU8L3Zhcj4oPHZhcj5zZWN0aW9uPC92YXI+KTogd2FybmluZzogZGVmaW5lZCBoZXJlCis8L3ByZT4KKyAgICAgICAgICA8bGk+VHVybmluZyBhIGNvbW1vbiBzeW1ib2wgaW50byBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhIGxhdGVyIGRlZmluaXRpb24gZm9yCit0aGUgc3ltYm9sIGlzIGVuY291bnRlcmVkLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgY2FzZSwKK2V4Y2VwdCB0aGF0IHRoZSBzeW1ib2xzIGFyZSBlbmNvdW50ZXJlZCBpbiBhIGRpZmZlcmVudCBvcmRlci4KKyAgICAgICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICAgICAgIDx2YXI+ZmlsZTwvdmFyPig8dmFyPnNlY3Rpb248L3Zhcj4pOiB3YXJuaW5nOiBkZWZpbml0aW9uIG9mIGA8dmFyPnN5bWJvbDwvdmFyPicKKyAgICAgICAgICAgICAgICAgIG92ZXJyaWRpbmcgY29tbW9uCisgICAgICAgICAgICAgICA8dmFyPmZpbGU8L3Zhcj4oPHZhcj5zZWN0aW9uPC92YXI+KTogd2FybmluZzogY29tbW9uIGlzIGhlcmUKKzwvcHJlPgorICAgICAgICAgIDxsaT5NZXJnaW5nIGEgY29tbW9uIHN5bWJvbCB3aXRoIGEgcHJldmlvdXMgc2FtZS1zaXplZCBjb21tb24gc3ltYm9sLgorICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgPHZhcj5maWxlPC92YXI+KDx2YXI+c2VjdGlvbjwvdmFyPik6IHdhcm5pbmc6IG11bHRpcGxlIGNvbW1vbgorICAgICAgICAgICAgICAgICAgb2YgYDx2YXI+c3ltYm9sPC92YXI+JworICAgICAgICAgICAgICAgPHZhcj5maWxlPC92YXI+KDx2YXI+c2VjdGlvbjwvdmFyPik6IHdhcm5pbmc6IHByZXZpb3VzIGNvbW1vbiBpcyBoZXJlCis8L3ByZT4KKyAgICAgICAgICA8bGk+TWVyZ2luZyBhIGNvbW1vbiBzeW1ib2wgd2l0aCBhIHByZXZpb3VzIGxhcmdlciBjb21tb24gc3ltYm9sLgorICAgICAgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgICAgPHZhcj5maWxlPC92YXI+KDx2YXI+c2VjdGlvbjwvdmFyPik6IHdhcm5pbmc6IGNvbW1vbiBvZiBgPHZhcj5zeW1ib2w8L3Zhcj4nCisgICAgICAgICAgICAgICAgICBvdmVycmlkZGVuIGJ5IGxhcmdlciBjb21tb24KKyAgICAgICAgICAgICAgIDx2YXI+ZmlsZTwvdmFyPig8dmFyPnNlY3Rpb248L3Zhcj4pOiB3YXJuaW5nOiBsYXJnZXIgY29tbW9uIGlzIGhlcmUKKzwvcHJlPgorICAgICAgICAgIDxsaT5NZXJnaW5nIGEgY29tbW9uIHN5bWJvbCB3aXRoIGEgcHJldmlvdXMgc21hbGxlciBjb21tb24gc3ltYm9sLiAgVGhpcyBpcwordGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGNhc2UsIGV4Y2VwdCB0aGF0IHRoZSBzeW1ib2xzIGFyZQorZW5jb3VudGVyZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIuCisgICAgICAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICA8dmFyPmZpbGU8L3Zhcj4oPHZhcj5zZWN0aW9uPC92YXI+KTogd2FybmluZzogY29tbW9uIG9mIGA8dmFyPnN5bWJvbDwvdmFyPicKKyAgICAgICAgICAgICAgICAgIG92ZXJyaWRpbmcgc21hbGxlciBjb21tb24KKyAgICAgICAgICAgICAgIDx2YXI+ZmlsZTwvdmFyPig8dmFyPnNlY3Rpb248L3Zhcj4pOiB3YXJuaW5nOiBzbWFsbGVyIGNvbW1vbiBpcyBoZXJlCis8L3ByZT4KKyAgICAgICAgICA8L29sPgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR3YXJuXzAwMmRjb25zdHJ1Y3RvcnMtMjUxIj48L2E+PGJyPjxkdD48Y29kZT4tLXdhcm4tY29uc3RydWN0b3JzPC9jb2RlPjxkZD5XYXJuIGlmIGFueSBnbG9iYWwgY29uc3RydWN0b3JzIGFyZSB1c2VkLiAgVGhpcyBpcyBvbmx5IHVzZWZ1bCBmb3IgYSBmZXcKK29iamVjdCBmaWxlIGZvcm1hdHMuICBGb3IgZm9ybWF0cyBsaWtlIENPRkYgb3IgRUxGLCB0aGUgbGlua2VyIGNhbiBub3QKK2RldGVjdCB0aGUgdXNlIG9mIGdsb2JhbCBjb25zdHJ1Y3RvcnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHdhcm5fMDAyZG11bHRpcGxlXzAwMmRncC0yNTIiPjwvYT48YnI+PGR0Pjxjb2RlPi0td2Fybi1tdWx0aXBsZS1ncDwvY29kZT48ZGQ+V2FybiBpZiBtdWx0aXBsZSBnbG9iYWwgcG9pbnRlciB2YWx1ZXMgYXJlIHJlcXVpcmVkIGluIHRoZSBvdXRwdXQgZmlsZS4gCitUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgY2VydGFpbiBwcm9jZXNzb3JzLCBzdWNoIGFzIHRoZSBBbHBoYS4gCitTcGVjaWZpY2FsbHksIHNvbWUgcHJvY2Vzc29ycyBwdXQgbGFyZ2UtdmFsdWVkIGNvbnN0YW50cyBpbiBhIHNwZWNpYWwKK3NlY3Rpb24uICBBIHNwZWNpYWwgcmVnaXN0ZXIgKHRoZSBnbG9iYWwgcG9pbnRlcikgcG9pbnRzIGludG8gdGhlIG1pZGRsZQorb2YgdGhpcyBzZWN0aW9uLCBzbyB0aGF0IGNvbnN0YW50cyBjYW4gYmUgbG9hZGVkIGVmZmljaWVudGx5IHZpYSBhCitiYXNlLXJlZ2lzdGVyIHJlbGF0aXZlIGFkZHJlc3NpbmcgbW9kZS4gIFNpbmNlIHRoZSBvZmZzZXQgaW4KK2Jhc2UtcmVnaXN0ZXIgcmVsYXRpdmUgbW9kZSBpcyBmaXhlZCBhbmQgcmVsYXRpdmVseSBzbWFsbCAoZS5nLiwgMTYKK2JpdHMpLCB0aGlzIGxpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBjb25zdGFudCBwb29sLiAgVGh1cywgaW4KK2xhcmdlIHByb2dyYW1zLCBpdCBpcyBvZnRlbiBuZWNlc3NhcnkgdG8gdXNlIG11bHRpcGxlIGdsb2JhbCBwb2ludGVyCit2YWx1ZXMgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBhZGRyZXNzIGFsbCBwb3NzaWJsZSBjb25zdGFudHMuICBUaGlzCitvcHRpb24gY2F1c2VzIGEgd2FybmluZyB0byBiZSBpc3N1ZWQgd2hlbmV2ZXIgdGhpcyBjYXNlIG9jY3Vycy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkd2Fybl8wMDJkb25jZS0yNTMiPjwvYT48YSBuYW1lPSJpbmRleC13YXJuaW5nc18wMDJjLW9uLXVuZGVmaW5lZC1zeW1ib2xzLTI1NCI+PC9hPjxhIG5hbWU9ImluZGV4LXVuZGVmaW5lZC1zeW1ib2xzXzAwMmMtd2FybmluZ3Mtb24tMjU1Ij48L2E+PGJyPjxkdD48Y29kZT4tLXdhcm4tb25jZTwvY29kZT48ZGQ+T25seSB3YXJuIG9uY2UgZm9yIGVhY2ggdW5kZWZpbmVkIHN5bWJvbCwgcmF0aGVyIHRoYW4gb25jZSBwZXIgbW9kdWxlCit3aGljaCByZWZlcnMgdG8gaXQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHdhcm5fMDAyZHNlY3Rpb25fMDAyZGFsaWduLTI1NiI+PC9hPjxhIG5hbWU9ImluZGV4LXdhcm5pbmdzXzAwMmMtb24tc2VjdGlvbi1hbGlnbm1lbnQtMjU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbi1hbGlnbm1lbnRfMDAyYy13YXJuaW5ncy1vbi0yNTgiPjwvYT48YnI+PGR0Pjxjb2RlPi0td2Fybi1zZWN0aW9uLWFsaWduPC9jb2RlPjxkZD5XYXJuIGlmIHRoZSBhZGRyZXNzIG9mIGFuIG91dHB1dCBzZWN0aW9uIGlzIGNoYW5nZWQgYmVjYXVzZSBvZgorYWxpZ25tZW50LiAgVHlwaWNhbGx5LCB0aGUgYWxpZ25tZW50IHdpbGwgYmUgc2V0IGJ5IGFuIGlucHV0IHNlY3Rpb24uIAorVGhlIGFkZHJlc3Mgd2lsbCBvbmx5IGJlIGNoYW5nZWQgaWYgaXQgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkOyB0aGF0CitpcywgaWYgdGhlIDxjb2RlPlNFQ1RJT05TPC9jb2RlPiBjb21tYW5kIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFydCBhZGRyZXNzIGZvcgordGhlIHNlY3Rpb24gKHNlZSA8YSBocmVmPSJTRUNUSU9OUy5odG1sI1NFQ1RJT05TIj5TRUNUSU9OUzwvYT4pLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmR3YXJuXzAwMmRzaGFyZWRfMDAyZHRleHRyZWwtMjU5Ij48L2E+PGJyPjxkdD48Y29kZT4tLXdhcm4tc2hhcmVkLXRleHRyZWw8L2NvZGU+PGRkPldhcm4gaWYgdGhlIGxpbmtlciBhZGRzIGEgRFRfVEVYVFJFTCB0byBhIHNoYXJlZCBvYmplY3QuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHdhcm5fMDAyZGFsdGVybmF0ZV8wMDJkZW0tMjYwIj48L2E+PGJyPjxkdD48Y29kZT4tLXdhcm4tYWx0ZXJuYXRlLWVtPC9jb2RlPjxkZD5XYXJuIGlmIGFuIG9iamVjdCBoYXMgYWx0ZXJuYXRlIEVMRiBtYWNoaW5lIGNvZGUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHdhcm5fMDAyZHVucmVzb2x2ZWRfMDAyZHN5bWJvbHMtMjYxIj48L2E+PGJyPjxkdD48Y29kZT4tLXdhcm4tdW5yZXNvbHZlZC1zeW1ib2xzPC9jb2RlPjxkZD5JZiB0aGUgbGlua2VyIGlzIGdvaW5nIHRvIHJlcG9ydCBhbiB1bnJlc29sdmVkIHN5bWJvbCAoc2VlIHRoZSBvcHRpb24KKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tdW5yZXNvbHZlZC1zeW1ib2xzPC9zcGFuPjwvc2FtcD4pIGl0IHdpbGwgbm9ybWFsbHkgZ2VuZXJhdGUgYW4gZXJyb3IuIAorVGhpcyBvcHRpb24gbWFrZXMgaXQgZ2VuZXJhdGUgYSB3YXJuaW5nIGluc3RlYWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGVycm9yXzAwMmR1bnJlc29sdmVkXzAwMmRzeW1ib2xzLTI2MiI+PC9hPjxicj48ZHQ+PGNvZGU+LS1lcnJvci11bnJlc29sdmVkLXN5bWJvbHM8L2NvZGU+PGRkPlRoaXMgcmVzdG9yZXMgdGhlIGxpbmtlcidzIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGdlbmVyYXRpbmcgZXJyb3JzIHdoZW4KK2l0IGlzIHJlcG9ydGluZyB1bnJlc29sdmVkIHN5bWJvbHMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHdob2xlXzAwMmRhcmNoaXZlLTI2MyI+PC9hPjxhIG5hbWU9ImluZGV4LWluY2x1ZGluZy1hbi1lbnRpcmUtYXJjaGl2ZS0yNjQiPjwvYT48YnI+PGR0Pjxjb2RlPi0td2hvbGUtYXJjaGl2ZTwvY29kZT48ZGQ+Rm9yIGVhY2ggYXJjaGl2ZSBtZW50aW9uZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhZnRlciB0aGUKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0td2hvbGUtYXJjaGl2ZTwvc3Bhbj48L3NhbXA+IG9wdGlvbiwgaW5jbHVkZSBldmVyeSBvYmplY3QgZmlsZSBpbiB0aGUgYXJjaGl2ZQoraW4gdGhlIGxpbmssIHJhdGhlciB0aGFuIHNlYXJjaGluZyB0aGUgYXJjaGl2ZSBmb3IgdGhlIHJlcXVpcmVkIG9iamVjdAorZmlsZXMuICBUaGlzIGlzIG5vcm1hbGx5IHVzZWQgdG8gdHVybiBhbiBhcmNoaXZlIGZpbGUgaW50byBhIHNoYXJlZAorbGlicmFyeSwgZm9yY2luZyBldmVyeSBvYmplY3QgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBzaGFyZWQKK2xpYnJhcnkuICBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBtb3JlIHRoYW4gb25jZS4KKworICAgICA8cD5Ud28gbm90ZXMgd2hlbiB1c2luZyB0aGlzIG9wdGlvbiBmcm9tIGdjYzogRmlyc3QsIGdjYyBkb2Vzbid0IGtub3cKK2Fib3V0IHRoaXMgb3B0aW9uLCBzbyB5b3UgaGF2ZSB0byB1c2UgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LVdsLC13aG9sZS1hcmNoaXZlPC9zcGFuPjwvc2FtcD4uIAorU2Vjb25kLCBkb24ndCBmb3JnZXQgdG8gdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1XbCwtbm8td2hvbGUtYXJjaGl2ZTwvc3Bhbj48L3NhbXA+IGFmdGVyIHlvdXIKK2xpc3Qgb2YgYXJjaGl2ZXMsIGJlY2F1c2UgZ2NjIHdpbGwgYWRkIGl0cyBvd24gbGlzdCBvZiBhcmNoaXZlcyB0bworeW91ciBsaW5rIGFuZCB5b3UgbWF5IG5vdCB3YW50IHRoaXMgZmxhZyB0byBhZmZlY3QgdGhvc2UgYXMgd2VsbC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkd3JhcF8wMDNkXzAwNDB2YXJfMDA3YnN5bWJvbF8wMDdkLTI2NSI+PC9hPjxicj48ZHQ+PGNvZGU+LS13cmFwPTwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxkZD5Vc2UgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciA8dmFyPnN5bWJvbDwvdmFyPi4gIEFueSB1bmRlZmluZWQgcmVmZXJlbmNlIHRvCis8dmFyPnN5bWJvbDwvdmFyPiB3aWxsIGJlIHJlc29sdmVkIHRvIDxjb2RlPl9fd3JhcF88L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj4uICBBbnkKK3VuZGVmaW5lZCByZWZlcmVuY2UgdG8gPGNvZGU+X19yZWFsXzwvY29kZT48dmFyPnN5bWJvbDwvdmFyPiB3aWxsIGJlIHJlc29sdmVkIHRvCis8dmFyPnN5bWJvbDwvdmFyPi4KKworICAgICA8cD5UaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYSB3cmFwcGVyIGZvciBhIHN5c3RlbSBmdW5jdGlvbi4gIFRoZQord3JhcHBlciBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIDxjb2RlPl9fd3JhcF88L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj4uICBJZiBpdAord2lzaGVzIHRvIGNhbGwgdGhlIHN5c3RlbSBmdW5jdGlvbiwgaXQgc2hvdWxkIGNhbGwKKzxjb2RlPl9fcmVhbF88L2NvZGU+PHZhcj5zeW1ib2w8L3Zhcj4uCisKKyAgICAgPHA+SGVyZSBpcyBhIHRyaXZpYWwgZXhhbXBsZToKKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICB2b2lkICoKKyAgICAgICAgICBfX3dyYXBfbWFsbG9jIChzaXplX3QgYykKKyAgICAgICAgICB7CisgICAgICAgICAgICBwcmludGYgKCJtYWxsb2MgY2FsbGVkIHdpdGggJXp1XG4iLCBjKTsKKyAgICAgICAgICAgIHJldHVybiBfX3JlYWxfbWFsbG9jIChjKTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHA+SWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoaXMgZmlsZSB1c2luZyA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdyYXAgbWFsbG9jPC9zcGFuPjwvc2FtcD4sIHRoZW4KK2FsbCBjYWxscyB0byA8Y29kZT5tYWxsb2M8L2NvZGU+IHdpbGwgY2FsbCB0aGUgZnVuY3Rpb24gPGNvZGU+X193cmFwX21hbGxvYzwvY29kZT4KK2luc3RlYWQuICBUaGUgY2FsbCB0byA8Y29kZT5fX3JlYWxfbWFsbG9jPC9jb2RlPiBpbiA8Y29kZT5fX3dyYXBfbWFsbG9jPC9jb2RlPiB3aWxsCitjYWxsIHRoZSByZWFsIDxjb2RlPm1hbGxvYzwvY29kZT4gZnVuY3Rpb24uCisKKyAgICAgPHA+WW91IG1heSB3aXNoIHRvIHByb3ZpZGUgYSA8Y29kZT5fX3JlYWxfbWFsbG9jPC9jb2RlPiBmdW5jdGlvbiBhcyB3ZWxsLCBzbyB0aGF0CitsaW5rcyB3aXRob3V0IHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXdyYXA8L3NwYW4+PC9zYW1wPiBvcHRpb24gd2lsbCBzdWNjZWVkLiAgSWYgeW91IGRvIHRoaXMsCit5b3Ugc2hvdWxkIG5vdCBwdXQgdGhlIGRlZmluaXRpb24gb2YgPGNvZGU+X19yZWFsX21hbGxvYzwvY29kZT4gaW4gdGhlIHNhbWUKK2ZpbGUgYXMgPGNvZGU+X193cmFwX21hbGxvYzwvY29kZT47IGlmIHlvdSBkbywgdGhlIGFzc2VtYmxlciBtYXkgcmVzb2x2ZSB0aGUKK2NhbGwgYmVmb3JlIHRoZSBsaW5rZXIgaGFzIGEgY2hhbmNlIHRvIHdyYXAgaXQgdG8gPGNvZGU+bWFsbG9jPC9jb2RlPi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZWhfMDAyZGZyYW1lXzAwMmRoZHItMjY2Ij48L2E+PGJyPjxkdD48Y29kZT4tLWVoLWZyYW1lLWhkcjwvY29kZT48ZGQ+UmVxdWVzdCBjcmVhdGlvbiBvZiA8Y29kZT4uZWhfZnJhbWVfaGRyPC9jb2RlPiBzZWN0aW9uIGFuZCBFTEYKKzxjb2RlPlBUX0dOVV9FSF9GUkFNRTwvY29kZT4gc2VnbWVudCBoZWFkZXIuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGxkXzAwMmRnZW5lcmF0ZWRfMDAyZHVud2luZF8wMDJkaW5mby0yNjciPjwvYT48YnI+PGR0Pjxjb2RlPi0tbm8tbGQtZ2VuZXJhdGVkLXVud2luZC1pbmZvPC9jb2RlPjxkZD5SZXF1ZXN0IGNyZWF0aW9uIG9mIDxjb2RlPi5laF9mcmFtZTwvY29kZT4gdW53aW5kIGluZm8gZm9yIGxpbmtlcgorZ2VuZXJhdGVkIGNvZGUgc2VjdGlvbnMgbGlrZSBQTFQuICBUaGlzIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0CitpZiBsaW5rZXIgZ2VuZXJhdGVkIHVud2luZCBpbmZvIGlzIHN1cHBvcnRlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRuZXdfMDAyZGR0YWdzLTI2OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRkaXNhYmxlXzAwMmRuZXdfMDAyZGR0YWdzLTI2OSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1lbmFibGUtbmV3LWR0YWdzPC9jb2RlPjxkdD48Y29kZT4tLWRpc2FibGUtbmV3LWR0YWdzPC9jb2RlPjxkZD5UaGlzIGxpbmtlciBjYW4gY3JlYXRlIHRoZSBuZXcgZHluYW1pYyB0YWdzIGluIEVMRi4gQnV0IHRoZSBvbGRlciBFTEYKK3N5c3RlbXMgbWF5IG5vdCB1bmRlcnN0YW5kIHRoZW0uIElmIHlvdSBzcGVjaWZ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVuYWJsZS1uZXctZHRhZ3M8L3NwYW4+PC9zYW1wPiwgdGhlIGR5bmFtaWMgdGFncyB3aWxsIGJlIGNyZWF0ZWQgYXMgbmVlZGVkLiAKK0lmIHlvdSBzcGVjaWZ5IDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZGlzYWJsZS1uZXctZHRhZ3M8L3NwYW4+PC9zYW1wPiwgbm8gbmV3IGR5bmFtaWMgdGFncyB3aWxsIGJlCitjcmVhdGVkLiBCeSBkZWZhdWx0LCB0aGUgbmV3IGR5bmFtaWMgdGFncyBhcmUgbm90IGNyZWF0ZWQuIE5vdGUgdGhhdAordGhvc2Ugb3B0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgZm9yIEVMRiBzeXN0ZW1zLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRoYXNoXzAwMmRzaXplXzAwM2RfMDA0MHZhcl8wMDdibnVtYmVyXzAwN2QtMjcwIj48L2E+PGJyPjxkdD48Y29kZT4tLWhhc2gtc2l6ZT08L2NvZGU+PHZhcj5udW1iZXI8L3Zhcj48ZGQ+U2V0IHRoZSBkZWZhdWx0IHNpemUgb2YgdGhlIGxpbmtlcidzIGhhc2ggdGFibGVzIHRvIGEgcHJpbWUgbnVtYmVyCitjbG9zZSB0byA8dmFyPm51bWJlcjwvdmFyPi4gIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBjYW4gcmVkdWNlIHRoZSBsZW5ndGggb2YKK3RpbWUgaXQgdGFrZXMgdGhlIGxpbmtlciB0byBwZXJmb3JtIGl0cyB0YXNrcywgYXQgdGhlIGV4cGVuc2Ugb2YKK2luY3JlYXNpbmcgdGhlIGxpbmtlcidzIG1lbW9yeSByZXF1aXJlbWVudHMuICBTaW1pbGFybHkgcmVkdWNpbmcgdGhpcwordmFsdWUgY2FuIHJlZHVjZSB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBhdCB0aGUgZXhwZW5zZSBvZiBzcGVlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkaGFzaF8wMDJkc3R5bGVfMDAzZF8wMDQwdmFyXzAwN2JzdHlsZV8wMDdkLTI3MSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1oYXNoLXN0eWxlPTwvY29kZT48dmFyPnN0eWxlPC92YXI+PGRkPlNldCB0aGUgdHlwZSBvZiBsaW5rZXIncyBoYXNoIHRhYmxlKHMpLiAgPHZhcj5zdHlsZTwvdmFyPiBjYW4gYmUgZWl0aGVyCis8Y29kZT5zeXN2PC9jb2RlPiBmb3IgY2xhc3NpYyBFTEYgPGNvZGU+Lmhhc2g8L2NvZGU+IHNlY3Rpb24sIDxjb2RlPmdudTwvY29kZT4gZm9yCituZXcgc3R5bGUgR05VIDxjb2RlPi5nbnUuaGFzaDwvY29kZT4gc2VjdGlvbiBvciA8Y29kZT5ib3RoPC9jb2RlPiBmb3IgYm90aAordGhlIGNsYXNzaWMgRUxGIDxjb2RlPi5oYXNoPC9jb2RlPiBhbmQgbmV3IHN0eWxlIEdOVSA8Y29kZT4uZ251Lmhhc2g8L2NvZGU+CitoYXNoIHRhYmxlcy4gIFRoZSBkZWZhdWx0IGlzIDxjb2RlPnN5c3Y8L2NvZGU+LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRyZWR1Y2VfMDAyZG1lbW9yeV8wMDJkb3ZlcmhlYWRzLTI3MiI+PC9hPjxicj48ZHQ+PGNvZGU+LS1yZWR1Y2UtbWVtb3J5LW92ZXJoZWFkczwvY29kZT48ZGQ+VGhpcyBvcHRpb24gcmVkdWNlcyBtZW1vcnkgcmVxdWlyZW1lbnRzIGF0IGxkIHJ1bnRpbWUsIGF0IHRoZSBleHBlbnNlIG9mCitsaW5raW5nIHNwZWVkLiAgVGhpcyB3YXMgaW50cm9kdWNlZCB0byBzZWxlY3QgdGhlIG9sZCBPKG5eMikgYWxnb3JpdGhtCitmb3IgbGluayBtYXAgZmlsZSBnZW5lcmF0aW9uLCByYXRoZXIgdGhhbiB0aGUgbmV3IE8obikgYWxnb3JpdGhtIHdoaWNoIHVzZXMKK2Fib3V0IDQwJSBtb3JlIG1lbW9yeSBmb3Igc3ltYm9sIHN0b3JhZ2UuCisKKyAgICAgPHA+QW5vdGhlciBlZmZlY3Qgb2YgdGhlIHN3aXRjaCBpcyB0byBzZXQgdGhlIGRlZmF1bHQgaGFzaCB0YWJsZSBzaXplIHRvCisxMDIxLCB3aGljaCBhZ2FpbiBzYXZlcyBtZW1vcnkgYXQgdGhlIGNvc3Qgb2YgbGVuZ3RoZW5pbmcgdGhlIGxpbmtlcidzCitydW4gdGltZS4gIFRoaXMgaXMgbm90IGRvbmUgaG93ZXZlciBpZiB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1oYXNoLXNpemU8L3NwYW4+PC9zYW1wPiBzd2l0Y2gKK2hhcyBiZWVuIHVzZWQuCisKKyAgICAgPHA+VGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcmVkdWNlLW1lbW9yeS1vdmVyaGVhZHM8L3NwYW4+PC9zYW1wPiBzd2l0Y2ggbWF5IGJlIGFsc28gYmUgdXNlZCB0bworZW5hYmxlIG90aGVyIHRyYWRlb2ZmcyBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGxpbmtlci4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkYnVpbGRfMDAyZGlkLTI3MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRidWlsZF8wMDJkaWRfMDAzZF8wMDQwdmFyXzAwN2JzdHlsZV8wMDdkLTI3NCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1idWlsZC1pZDwvY29kZT48ZHQ+PGNvZGU+LS1idWlsZC1pZD08L2NvZGU+PHZhcj5zdHlsZTwvdmFyPjxkZD5SZXF1ZXN0IGNyZWF0aW9uIG9mIDxjb2RlPi5ub3RlLmdudS5idWlsZC1pZDwvY29kZT4gRUxGIG5vdGUgc2VjdGlvbi4gCitUaGUgY29udGVudHMgb2YgdGhlIG5vdGUgYXJlIHVuaXF1ZSBiaXRzIGlkZW50aWZ5aW5nIHRoaXMgbGlua2VkCitmaWxlLiAgPHZhcj5zdHlsZTwvdmFyPiBjYW4gYmUgPGNvZGU+dXVpZDwvY29kZT4gdG8gdXNlIDEyOCByYW5kb20gYml0cywKKzxjb2RlPnNoYTE8L2NvZGU+IHRvIHVzZSBhIDE2MC1iaXQgPHNwYW4gY2xhc3M9InNjIj5TSEExPC9zcGFuPiBoYXNoIG9uIHRoZSBub3JtYXRpdmUKK3BhcnRzIG9mIHRoZSBvdXRwdXQgY29udGVudHMsIDxjb2RlPm1kNTwvY29kZT4gdG8gdXNlIGEgMTI4LWJpdAorPHNwYW4gY2xhc3M9InNjIj5NRDU8L3NwYW4+IGhhc2ggb24gdGhlIG5vcm1hdGl2ZSBwYXJ0cyBvZiB0aGUgb3V0cHV0IGNvbnRlbnRzLCBvcgorPGNvZGU+MHg8L2NvZGU+PHZhcj5oZXhzdHJpbmc8L3Zhcj4gdG8gdXNlIGEgY2hvc2VuIGJpdCBzdHJpbmcgc3BlY2lmaWVkIGFzCithbiBldmVuIG51bWJlciBvZiBoZXhhZGVjaW1hbCBkaWdpdHMgKDxjb2RlPi08L2NvZGU+IGFuZCA8Y29kZT46PC9jb2RlPgorY2hhcmFjdGVycyBiZXR3ZWVuIGRpZ2l0IHBhaXJzIGFyZSBpZ25vcmVkKS4gIElmIDx2YXI+c3R5bGU8L3Zhcj4gaXMKK29taXR0ZWQsIDxjb2RlPnNoYTE8L2NvZGU+IGlzIHVzZWQuCisKKyAgICAgPHA+VGhlIDxjb2RlPm1kNTwvY29kZT4gYW5kIDxjb2RlPnNoYTE8L2NvZGU+IHN0eWxlcyBwcm9kdWNlcyBhbiBpZGVudGlmaWVyCit0aGF0IGlzIGFsd2F5cyB0aGUgc2FtZSBpbiBhbiBpZGVudGljYWwgb3V0cHV0IGZpbGUsIGJ1dCB3aWxsIGJlCit1bmlxdWUgYW1vbmcgYWxsIG5vbmlkZW50aWNhbCBvdXRwdXQgZmlsZXMuICBJdCBpcyBub3QgaW50ZW5kZWQKK3RvIGJlIGNvbXBhcmVkIGFzIGEgY2hlY2tzdW0gZm9yIHRoZSBmaWxlJ3MgY29udGVudHMuICBBIGxpbmtlZAorZmlsZSBtYXkgYmUgY2hhbmdlZCBsYXRlciBieSBvdGhlciB0b29scywgYnV0IHRoZSBidWlsZCBJRCBiaXQKK3N0cmluZyBpZGVudGlmeWluZyB0aGUgb3JpZ2luYWwgbGlua2VkIGZpbGUgZG9lcyBub3QgY2hhbmdlLgorCisgICAgIDxwPlBhc3NpbmcgPGNvZGU+bm9uZTwvY29kZT4gZm9yIDx2YXI+c3R5bGU8L3Zhcj4gZGlzYWJsZXMgdGhlIHNldHRpbmcgZnJvbSBhbnkKKzxjb2RlPi0tYnVpbGQtaWQ8L2NvZGU+IG9wdGlvbnMgZWFybGllciBvbiB0aGUgY29tbWFuZCBsaW5lLiAKKzwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Mi4xLjEgT3B0aW9ucyBTcGVjaWZpYyB0byBpMzg2IFBFIFRhcmdldHM8L2g0PgorCis8IS0tIG1hbiBiZWdpbiBPUFRJT05TIC0tPgorPHA+VGhlIGkzODYgUEUgbGlua2VyIHN1cHBvcnRzIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tc2hhcmVkPC9zcGFuPjwvc2FtcD4gb3B0aW9uLCB3aGljaCBjYXVzZXMKK3RoZSBvdXRwdXQgdG8gYmUgYSBkeW5hbWljYWxseSBsaW5rZWQgbGlicmFyeSAoRExMKSBpbnN0ZWFkIG9mIGEKK25vcm1hbCBleGVjdXRhYmxlLiAgWW91IHNob3VsZCBuYW1lIHRoZSBvdXRwdXQgPGNvZGU+Ki5kbGw8L2NvZGU+IHdoZW4geW91Cit1c2UgdGhpcyBvcHRpb24uICBJbiBhZGRpdGlvbiwgdGhlIGxpbmtlciBmdWxseSBzdXBwb3J0cyB0aGUgc3RhbmRhcmQKKzxjb2RlPiouZGVmPC9jb2RlPiBmaWxlcywgd2hpY2ggbWF5IGJlIHNwZWNpZmllZCBvbiB0aGUgbGlua2VyIGNvbW1hbmQgbGluZQorbGlrZSBhbiBvYmplY3QgZmlsZSAoaW4gZmFjdCwgaXQgc2hvdWxkIHByZWNlZGUgYXJjaGl2ZXMgaXQgZXhwb3J0cworc3ltYm9scyBmcm9tLCB0byBlbnN1cmUgdGhhdCB0aGV5IGdldCBsaW5rZWQgaW4sIGp1c3QgbGlrZSBhIG5vcm1hbAorb2JqZWN0IGZpbGUpLgorCisgICA8cD5JbiBhZGRpdGlvbiB0byB0aGUgb3B0aW9ucyBjb21tb24gdG8gYWxsIHRhcmdldHMsIHRoZSBpMzg2IFBFIGxpbmtlcgorc3VwcG9ydCBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBpMzg2CitQRSB0YXJnZXQuICBPcHRpb25zIHRoYXQgdGFrZSB2YWx1ZXMgbWF5IGJlIHNlcGFyYXRlZCBmcm9tIHRoZWlyCit2YWx1ZXMgYnkgZWl0aGVyIGEgc3BhY2Ugb3IgYW4gZXF1YWxzIHNpZ24uCisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkYWRkXzAwMmRzdGRjYWxsXzAwMmRhbGlhcy0yNzUiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LS1hZGQtc3RkY2FsbC1hbGlhczwvY29kZT48ZGQ+SWYgZ2l2ZW4sIHN5bWJvbHMgd2l0aCBhIHN0ZGNhbGwgc3VmZml4IChAPHZhcj5ubjwvdmFyPikgd2lsbCBiZSBleHBvcnRlZAorYXMtaXMgYW5kIGFsc28gd2l0aCB0aGUgc3VmZml4IHN0cmlwcGVkLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGJhc2VfMDAyZGZpbGUtMjc2Ij48L2E+PGJyPjxkdD48Y29kZT4tLWJhc2UtZmlsZSA8L2NvZGU+PHZhcj5maWxlPC92YXI+PGRkPlVzZSA8dmFyPmZpbGU8L3Zhcj4gYXMgdGhlIG5hbWUgb2YgYSBmaWxlIGluIHdoaWNoIHRvIHNhdmUgdGhlIGJhc2UKK2FkZHJlc3NlcyBvZiBhbGwgdGhlIHJlbG9jYXRpb25zIG5lZWRlZCBmb3IgZ2VuZXJhdGluZyBETExzIHdpdGgKKzxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5kbGx0b29sPC9zcGFuPjwvc2FtcD4uIAorW1RoaXMgaXMgYW4gaTM4NiBQRSBzcGVjaWZpYyBvcHRpb25dCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGRsbC0yNzciPjwvYT48YnI+PGR0Pjxjb2RlPi0tZGxsPC9jb2RlPjxkZD5DcmVhdGUgYSBETEwgaW5zdGVhZCBvZiBhIHJlZ3VsYXIgZXhlY3V0YWJsZS4gIFlvdSBtYXkgYWxzbyB1c2UKKzxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi1zaGFyZWQ8L3NwYW4+PC9zYW1wPiBvciBzcGVjaWZ5IGEgPGNvZGU+TElCUkFSWTwvY29kZT4gaW4gYSBnaXZlbiA8Y29kZT4uZGVmPC9jb2RlPgorZmlsZS4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbmFibGVfMDAyZGxvbmdfMDAyZHNlY3Rpb25fMDAyZG5hbWVzLTI3OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRkaXNhYmxlXzAwMmRsb25nXzAwMmRzZWN0aW9uXzAwMmRuYW1lcy0yNzkiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZW5hYmxlLWxvbmctc2VjdGlvbi1uYW1lczwvY29kZT48ZHQ+PGNvZGU+LS1kaXNhYmxlLWxvbmctc2VjdGlvbi1uYW1lczwvY29kZT48ZGQ+VGhlIFBFIHZhcmlhbnRzIG9mIHRoZSBDb2ZmIG9iamVjdCBmb3JtYXQgYWRkIGFuIGV4dGVuc2lvbiB0aGF0IHBlcm1pdHMKK3RoZSB1c2Ugb2Ygc2VjdGlvbiBuYW1lcyBsb25nZXIgdGhhbiBlaWdodCBjaGFyYWN0ZXJzLCB0aGUgbm9ybWFsIGxpbWl0Citmb3IgQ29mZi4gIEJ5IGRlZmF1bHQsIHRoZXNlIG5hbWVzIGFyZSBvbmx5IGFsbG93ZWQgaW4gb2JqZWN0IGZpbGVzLCBhcworZnVsbHktbGlua2VkIGV4ZWN1dGFibGUgaW1hZ2VzIGRvIG5vdCBjYXJyeSB0aGUgQ29mZiBzdHJpbmcgdGFibGUgcmVxdWlyZWQKK3RvIHN1cHBvcnQgdGhlIGxvbmdlciBuYW1lcy4gIEFzIGEgR05VIGV4dGVuc2lvbiwgaXQgaXMgcG9zc2libGUgdG8KK2FsbG93IHRoZWlyIHVzZSBpbiBleGVjdXRhYmxlIGltYWdlcyBhcyB3ZWxsLCBvciB0byAocHJvYmFibHkgcG9pbnRsZXNzbHkhKSAKK2Rpc2FsbG93IGl0IGluIG9iamVjdCBmaWxlcywgYnkgdXNpbmcgdGhlc2UgdHdvIG9wdGlvbnMuICBFeGVjdXRhYmxlIGltYWdlcworZ2VuZXJhdGVkIHdpdGggdGhlc2UgbG9uZyBzZWN0aW9uIG5hbWVzIGFyZSBzbGlnaHRseSBub24tc3RhbmRhcmQsIGNhcnJ5aW5nCithcyB0aGV5IGRvIGEgc3RyaW5nIHRhYmxlLCBhbmQgbWF5IGdlbmVyYXRlIGNvbmZ1c2luZyBvdXRwdXQgd2hlbiBleGFtaW5lZAord2l0aCBub24tR05VIFBFLWF3YXJlIHRvb2xzLCBzdWNoIGFzIGZpbGUgdmlld2VycyBhbmQgZHVtcGVycy4gIEhvd2V2ZXIsCitHREIgcmVsaWVzIG9uIHRoZSB1c2Ugb2YgUEUgbG9uZyBzZWN0aW9uIG5hbWVzIHRvIGZpbmQgRHdhcmYtMiBkZWJ1ZworaW5mb3JtYXRpb24gc2VjdGlvbnMgaW4gYW4gZXhlY3V0YWJsZSBpbWFnZSBhdCBydW50aW1lLCBhbmQgc28gaWYgbmVpdGhlcgorb3B0aW9uIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB3aWxsIGVuYWJsZSBsb25nCitzZWN0aW9uIG5hbWVzLCBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGFuZCB0ZWNobmljYWxseSBjb3JyZWN0IGJlaGF2aW91ciwKK3doZW4gaXQgZmluZHMgdGhlIHByZXNlbmNlIG9mIGRlYnVnIGluZm9ybWF0aW9uIHdoaWxlIGxpbmtpbmcgYW4gZXhlY3V0YWJsZQoraW1hZ2UgYW5kIG5vdCBzdHJpcHBpbmcgc3ltYm9scy4gCitbVGhpcyBvcHRpb24gaXMgdmFsaWQgZm9yIGFsbCBQRSB0YXJnZXRlZCBwb3J0cyBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbmFibGVfMDAyZHN0ZGNhbGxfMDAyZGZpeHVwLTI4MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRkaXNhYmxlXzAwMmRzdGRjYWxsXzAwMmRmaXh1cC0yODEiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZW5hYmxlLXN0ZGNhbGwtZml4dXA8L2NvZGU+PGR0Pjxjb2RlPi0tZGlzYWJsZS1zdGRjYWxsLWZpeHVwPC9jb2RlPjxkZD5JZiB0aGUgbGluayBmaW5kcyBhIHN5bWJvbCB0aGF0IGl0IGNhbm5vdCByZXNvbHZlLCBpdCB3aWxsIGF0dGVtcHQgdG8KK2RvICZsZHF1bztmdXp6eSBsaW5raW5nJnJkcXVvOyBieSBsb29raW5nIGZvciBhbm90aGVyIGRlZmluZWQgc3ltYm9sIHRoYXQgZGlmZmVycworb25seSBpbiB0aGUgZm9ybWF0IG9mIHRoZSBzeW1ib2wgbmFtZSAoY2RlY2wgdnMgc3RkY2FsbCkgYW5kIHdpbGwKK3Jlc29sdmUgdGhhdCBzeW1ib2wgYnkgbGlua2luZyB0byB0aGUgbWF0Y2guICBGb3IgZXhhbXBsZSwgdGhlCit1bmRlZmluZWQgc3ltYm9sIDxjb2RlPl9mb288L2NvZGU+IG1pZ2h0IGJlIGxpbmtlZCB0byB0aGUgZnVuY3Rpb24KKzxjb2RlPl9mb29AMTI8L2NvZGU+LCBvciB0aGUgdW5kZWZpbmVkIHN5bWJvbCA8Y29kZT5fYmFyQDE2PC9jb2RlPiBtaWdodCBiZSBsaW5rZWQKK3RvIHRoZSBmdW5jdGlvbiA8Y29kZT5fYmFyPC9jb2RlPi4gIFdoZW4gdGhlIGxpbmtlciBkb2VzIHRoaXMsIGl0IHByaW50cyBhCit3YXJuaW5nLCBzaW5jZSBpdCBub3JtYWxseSBzaG91bGQgaGF2ZSBmYWlsZWQgdG8gbGluaywgYnV0IHNvbWV0aW1lcworaW1wb3J0IGxpYnJhcmllcyBnZW5lcmF0ZWQgZnJvbSB0aGlyZC1wYXJ0eSBkbGxzIG1heSBuZWVkIHRoaXMgZmVhdHVyZQordG8gYmUgdXNhYmxlLiAgSWYgeW91IHNwZWNpZnkgPHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1lbmFibGUtc3RkY2FsbC1maXh1cDwvc3Bhbj48L3NhbXA+LCB0aGlzCitmZWF0dXJlIGlzIGZ1bGx5IGVuYWJsZWQgYW5kIHdhcm5pbmdzIGFyZSBub3QgcHJpbnRlZC4gIElmIHlvdSBzcGVjaWZ5Cis8c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRpc2FibGUtc3RkY2FsbC1maXh1cDwvc3Bhbj48L3NhbXA+LCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIHN1Y2gKK21pc21hdGNoZXMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgZXJyb3JzLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGxlYWRpbmdfMDAyZHVuZGVyc2NvcmUtMjgyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRsZWFkaW5nXzAwMmR1bmRlcnNjb3JlLTI4MyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1sZWFkaW5nLXVuZGVyc2NvcmU8L2NvZGU+PGR0Pjxjb2RlPi0tbm8tbGVhZGluZy11bmRlcnNjb3JlPC9jb2RlPjxkZD5Gb3IgbW9zdCB0YXJnZXRzIGRlZmF1bHQgc3ltYm9sLXByZWZpeCBpcyBhbiB1bmRlcnNjb3JlIGFuZCBpcyBkZWZpbmVkCitpbiB0YXJnZXQncyBkZXNjcmlwdGlvbi4gQnkgdGhpcyBvcHRpb24gaXQgaXMgcG9zc2libGUgdG8KK2Rpc2FibGUvZW5hYmxlIHRoZSBkZWZhdWx0IHVuZGVyc2NvcmUgc3ltYm9sLXByZWZpeC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1ETExzXzAwMmMtY3JlYXRpbmctMjg0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGV4cG9ydF8wMDJkYWxsXzAwMmRzeW1ib2xzLTI4NSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1leHBvcnQtYWxsLXN5bWJvbHM8L2NvZGU+PGRkPklmIGdpdmVuLCBhbGwgZ2xvYmFsIHN5bWJvbHMgaW4gdGhlIG9iamVjdHMgdXNlZCB0byBidWlsZCBhIERMTCB3aWxsCitiZSBleHBvcnRlZCBieSB0aGUgRExMLiAgTm90ZSB0aGF0IHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlcmUKK290aGVyd2lzZSB3b3VsZG4ndCBiZSBhbnkgZXhwb3J0ZWQgc3ltYm9scy4gIFdoZW4gc3ltYm9scyBhcmUKK2V4cGxpY2l0bHkgZXhwb3J0ZWQgdmlhIERFRiBmaWxlcyBvciBpbXBsaWNpdGx5IGV4cG9ydGVkIHZpYSBmdW5jdGlvbgorYXR0cmlidXRlcywgdGhlIGRlZmF1bHQgaXMgdG8gbm90IGV4cG9ydCBhbnl0aGluZyBlbHNlIHVubGVzcyB0aGlzCitvcHRpb24gaXMgZ2l2ZW4uICBOb3RlIHRoYXQgdGhlIHN5bWJvbHMgPGNvZGU+RGxsTWFpbkAxMjwvY29kZT4sCis8Y29kZT5EbGxFbnRyeVBvaW50QDA8L2NvZGU+LCA8Y29kZT5EbGxNYWluQ1JUU3RhcnR1cEAxMjwvY29kZT4sIGFuZAorPGNvZGU+aW1wdXJlX3B0cjwvY29kZT4gd2lsbCBub3QgYmUgYXV0b21hdGljYWxseQorZXhwb3J0ZWQuICBBbHNvLCBzeW1ib2xzIGltcG9ydGVkIGZyb20gb3RoZXIgRExMcyB3aWxsIG5vdCBiZQorcmUtZXhwb3J0ZWQsIG5vciB3aWxsIHN5bWJvbHMgc3BlY2lmeWluZyB0aGUgRExMJ3MgaW50ZXJuYWwgbGF5b3V0CitzdWNoIGFzIHRob3NlIGJlZ2lubmluZyB3aXRoIDxjb2RlPl9oZWFkXzwvY29kZT4gb3IgZW5kaW5nIHdpdGgKKzxjb2RlPl9pbmFtZTwvY29kZT4uICBJbiBhZGRpdGlvbiwgbm8gc3ltYm9scyBmcm9tIDxjb2RlPmxpYmdjYzwvY29kZT4sCis8Y29kZT5saWJzdGQrKzwvY29kZT4sIDxjb2RlPmxpYm1pbmd3MzI8L2NvZGU+LCBvciA8Y29kZT5jcnRYLm88L2NvZGU+IHdpbGwgYmUgZXhwb3J0ZWQuIAorU3ltYm9scyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIDxjb2RlPl9fcnR0aV88L2NvZGU+IG9yIDxjb2RlPl9fYnVpbHRpbl88L2NvZGU+IHdpbGwKK25vdCBiZSBleHBvcnRlZCwgdG8gaGVscCB3aXRoIEMrKyBETExzLiAgRmluYWxseSwgdGhlcmUgaXMgYW4KK2V4dGVuc2l2ZSBsaXN0IG9mIGN5Z3dpbi1wcml2YXRlIHN5bWJvbHMgdGhhdCBhcmUgbm90IGV4cG9ydGVkCisob2J2aW91c2x5LCB0aGlzIGFwcGxpZXMgb24gd2hlbiBidWlsZGluZyBETExzIGZvciBjeWd3aW4gdGFyZ2V0cykuIAorVGhlc2UgY3lnd2luLWV4Y2x1ZGVzIGFyZTogPGNvZGU+X2N5Z3dpbl9kbGxfZW50cnlAMTI8L2NvZGU+LAorPGNvZGU+X2N5Z3dpbl9jcnQwX2NvbW1vbkA4PC9jb2RlPiwgPGNvZGU+X2N5Z3dpbl9ub25jeWd3aW5fZGxsX2VudHJ5QDEyPC9jb2RlPiwKKzxjb2RlPl9mbW9kZTwvY29kZT4sIDxjb2RlPl9pbXB1cmVfcHRyPC9jb2RlPiwgPGNvZGU+Y3lnd2luX2F0dGFjaF9kbGw8L2NvZGU+LAorPGNvZGU+Y3lnd2luX3ByZW1haW4wPC9jb2RlPiwgPGNvZGU+Y3lnd2luX3ByZW1haW4xPC9jb2RlPiwgPGNvZGU+Y3lnd2luX3ByZW1haW4yPC9jb2RlPiwKKzxjb2RlPmN5Z3dpbl9wcmVtYWluMzwvY29kZT4sIGFuZCA8Y29kZT5lbnZpcm9uPC9jb2RlPi4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRleGNsdWRlXzAwMmRzeW1ib2xzLTI4NiI+PC9hPjxicj48ZHQ+PGNvZGU+LS1leGNsdWRlLXN5bWJvbHMgPC9jb2RlPjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiwuLi48L2NvZGU+PGRkPlNwZWNpZmllcyBhIGxpc3Qgb2Ygc3ltYm9scyB3aGljaCBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkKK2V4cG9ydGVkLiAgVGhlIHN5bWJvbCBuYW1lcyBtYXkgYmUgZGVsaW1pdGVkIGJ5IGNvbW1hcyBvciBjb2xvbnMuIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZXhjbHVkZV8wMDJkYWxsXzAwMmRzeW1ib2xzLTI4NyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1leGNsdWRlLWFsbC1zeW1ib2xzPC9jb2RlPjxkZD5TcGVjaWZpZXMgbm8gc3ltYm9scyBzaG91bGQgYmUgYXV0b21hdGljYWxseSBleHBvcnRlZC4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRmaWxlXzAwMmRhbGlnbm1lbnQtMjg4Ij48L2E+PGJyPjxkdD48Y29kZT4tLWZpbGUtYWxpZ25tZW50PC9jb2RlPjxkZD5TcGVjaWZ5IHRoZSBmaWxlIGFsaWdubWVudC4gIFNlY3Rpb25zIGluIHRoZSBmaWxlIHdpbGwgYWx3YXlzIGJlZ2luIGF0CitmaWxlIG9mZnNldHMgd2hpY2ggYXJlIG11bHRpcGxlcyBvZiB0aGlzIG51bWJlci4gIFRoaXMgZGVmYXVsdHMgdG8KKzUxMi4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWhlYXAtc2l6ZS0yODkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkaGVhcC0yOTAiPjwvYT48YnI+PGR0Pjxjb2RlPi0taGVhcCA8L2NvZGU+PHZhcj5yZXNlcnZlPC92YXI+PGR0Pjxjb2RlPi0taGVhcCA8L2NvZGU+PHZhcj5yZXNlcnZlPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmNvbW1pdDwvdmFyPjxkZD5TcGVjaWZ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgbWVtb3J5IHRvIHJlc2VydmUgKGFuZCBvcHRpb25hbGx5IGNvbW1pdCkKK3RvIGJlIHVzZWQgYXMgaGVhcCBmb3IgdGhpcyBwcm9ncmFtLiAgVGhlIGRlZmF1bHQgaXMgMU1iIHJlc2VydmVkLCA0SworY29tbWl0dGVkLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtaW1hZ2UtYmFzZS0yOTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkaW1hZ2VfMDAyZGJhc2UtMjkyIj48L2E+PGJyPjxkdD48Y29kZT4tLWltYWdlLWJhc2UgPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+VXNlIDx2YXI+dmFsdWU8L3Zhcj4gYXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB5b3VyIHByb2dyYW0gb3IgZGxsLiAgVGhpcyBpcwordGhlIGxvd2VzdCBtZW1vcnkgbG9jYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiB5b3VyIHByb2dyYW0gb3IgZGxsCitpcyBsb2FkZWQuICBUbyByZWR1Y2UgdGhlIG5lZWQgdG8gcmVsb2NhdGUgYW5kIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2YKK3lvdXIgZGxscywgZWFjaCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBiYXNlIGFkZHJlc3MgYW5kIG5vdCBvdmVybGFwIGFueQorb3RoZXIgZGxscy4gIFRoZSBkZWZhdWx0IGlzIDB4NDAwMDAwIGZvciBleGVjdXRhYmxlcywgYW5kIDB4MTAwMDAwMDAKK2ZvciBkbGxzLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGtpbGxfMDAyZGF0LTI5MyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1raWxsLWF0PC9jb2RlPjxkZD5JZiBnaXZlbiwgdGhlIHN0ZGNhbGwgc3VmZml4ZXMgKEA8dmFyPm5uPC92YXI+KSB3aWxsIGJlIHN0cmlwcGVkIGZyb20KK3N5bWJvbHMgYmVmb3JlIHRoZXkgYXJlIGV4cG9ydGVkLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGxhcmdlXzAwMmRhZGRyZXNzXzAwMmRhd2FyZS0yOTQiPjwvYT48YnI+PGR0Pjxjb2RlPi0tbGFyZ2UtYWRkcmVzcy1hd2FyZTwvY29kZT48ZGQ+SWYgZ2l2ZW4sIHRoZSBhcHByb3ByaWF0ZSBiaXQgaW4gdGhlICZsZHF1bztDaGFyYWN0ZXJpc3RpY3MmcmRxdW87IGZpZWxkIG9mIHRoZSBDT0ZGCitoZWFkZXIgaXMgc2V0IHRvIGluZGljYXRlIHRoYXQgdGhpcyBleGVjdXRhYmxlIHN1cHBvcnRzIHZpcnR1YWwgYWRkcmVzc2VzCitncmVhdGVyIHRoYW4gMiBnaWdhYnl0ZXMuICBUaGlzIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIC8zR0IKK29yIC9VU0VSVkE9PHZhcj52YWx1ZTwvdmFyPiBtZWdhYnl0ZXMgc3dpdGNoIGluIHRoZSAmbGRxdW87W29wZXJhdGluZyBzeXN0ZW1zXSZyZHF1bzsKK3NlY3Rpb24gb2YgdGhlIEJPT1QuSU5JLiAgT3RoZXJ3aXNlLCB0aGlzIGJpdCBoYXMgbm8gZWZmZWN0LiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBQRSB0YXJnZXRlZCBwb3J0cyBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRtYWpvcl8wMDJkaW1hZ2VfMDAyZHZlcnNpb24tMjk1Ij48L2E+PGJyPjxkdD48Y29kZT4tLW1ham9yLWltYWdlLXZlcnNpb24gPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+U2V0cyB0aGUgbWFqb3IgbnVtYmVyIG9mIHRoZSAmbGRxdW87aW1hZ2UgdmVyc2lvbiZyZHF1bzsuICBEZWZhdWx0cyB0byAxLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG1ham9yXzAwMmRvc18wMDJkdmVyc2lvbi0yOTYiPjwvYT48YnI+PGR0Pjxjb2RlPi0tbWFqb3Itb3MtdmVyc2lvbiA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxkZD5TZXRzIHRoZSBtYWpvciBudW1iZXIgb2YgdGhlICZsZHF1bztvcyB2ZXJzaW9uJnJkcXVvOy4gIERlZmF1bHRzIHRvIDQuIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbWFqb3JfMDAyZHN1YnN5c3RlbV8wMDJkdmVyc2lvbi0yOTciPjwvYT48YnI+PGR0Pjxjb2RlPi0tbWFqb3Itc3Vic3lzdGVtLXZlcnNpb24gPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+U2V0cyB0aGUgbWFqb3IgbnVtYmVyIG9mIHRoZSAmbGRxdW87c3Vic3lzdGVtIHZlcnNpb24mcmRxdW87LiAgRGVmYXVsdHMgdG8gNC4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRtaW5vcl8wMDJkaW1hZ2VfMDAyZHZlcnNpb24tMjk4Ij48L2E+PGJyPjxkdD48Y29kZT4tLW1pbm9yLWltYWdlLXZlcnNpb24gPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+U2V0cyB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSAmbGRxdW87aW1hZ2UgdmVyc2lvbiZyZHF1bzsuICBEZWZhdWx0cyB0byAwLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG1pbm9yXzAwMmRvc18wMDJkdmVyc2lvbi0yOTkiPjwvYT48YnI+PGR0Pjxjb2RlPi0tbWlub3Itb3MtdmVyc2lvbiA8L2NvZGU+PHZhcj52YWx1ZTwvdmFyPjxkZD5TZXRzIHRoZSBtaW5vciBudW1iZXIgb2YgdGhlICZsZHF1bztvcyB2ZXJzaW9uJnJkcXVvOy4gIERlZmF1bHRzIHRvIDAuIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbWlub3JfMDAyZHN1YnN5c3RlbV8wMDJkdmVyc2lvbi0zMDAiPjwvYT48YnI+PGR0Pjxjb2RlPi0tbWlub3Itc3Vic3lzdGVtLXZlcnNpb24gPC9jb2RlPjx2YXI+dmFsdWU8L3Zhcj48ZGQ+U2V0cyB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSAmbGRxdW87c3Vic3lzdGVtIHZlcnNpb24mcmRxdW87LiAgRGVmYXVsdHMgdG8gMC4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LURFRi1maWxlc18wMDJjLWNyZWF0aW5nLTMwMSI+PC9hPjxhIG5hbWU9ImluZGV4LURMTHNfMDAyYy1jcmVhdGluZy0zMDIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkb3V0cHV0XzAwMmRkZWYtMzAzIj48L2E+PGJyPjxkdD48Y29kZT4tLW91dHB1dC1kZWYgPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxkZD5UaGUgbGlua2VyIHdpbGwgY3JlYXRlIHRoZSBmaWxlIDx2YXI+ZmlsZTwvdmFyPiB3aGljaCB3aWxsIGNvbnRhaW4gYSBERUYKK2ZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgRExMIHRoZSBsaW5rZXIgaXMgZ2VuZXJhdGluZy4gIFRoaXMgREVGIGZpbGUKKyh3aGljaCBzaG91bGQgYmUgY2FsbGVkIDxjb2RlPiouZGVmPC9jb2RlPikgbWF5IGJlIHVzZWQgdG8gY3JlYXRlIGFuIGltcG9ydAorbGlicmFyeSB3aXRoIDxjb2RlPmRsbHRvb2w8L2NvZGU+IG9yIG1heSBiZSB1c2VkIGFzIGEgcmVmZXJlbmNlIHRvCithdXRvbWF0aWNhbGx5IG9yIGltcGxpY2l0bHkgZXhwb3J0ZWQgc3ltYm9scy4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LURMTHNfMDAyYy1jcmVhdGluZy0zMDQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkb3V0XzAwMmRpbXBsaWItMzA1Ij48L2E+PGJyPjxkdD48Y29kZT4tLW91dC1pbXBsaWIgPC9jb2RlPjx2YXI+ZmlsZTwvdmFyPjxkZD5UaGUgbGlua2VyIHdpbGwgY3JlYXRlIHRoZSBmaWxlIDx2YXI+ZmlsZTwvdmFyPiB3aGljaCB3aWxsIGNvbnRhaW4gYW4KK2ltcG9ydCBsaWIgY29ycmVzcG9uZGluZyB0byB0aGUgRExMIHRoZSBsaW5rZXIgaXMgZ2VuZXJhdGluZy4gVGhpcworaW1wb3J0IGxpYiAod2hpY2ggc2hvdWxkIGJlIGNhbGxlZCA8Y29kZT4qLmRsbC5hPC9jb2RlPiBvciA8Y29kZT4qLmE8L2NvZGU+CittYXkgYmUgdXNlZCB0byBsaW5rIGNsaWVudHMgYWdhaW5zdCB0aGUgZ2VuZXJhdGVkIERMTDsgdGhpcyBiZWhhdmlvdXIKK21ha2VzIGl0IHBvc3NpYmxlIHRvIHNraXAgYSBzZXBhcmF0ZSA8Y29kZT5kbGx0b29sPC9jb2RlPiBpbXBvcnQgbGlicmFyeQorY3JlYXRpb24gc3RlcC4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbmFibGVfMDAyZGF1dG9fMDAyZGltYWdlXzAwMmRiYXNlLTMwNiI+PC9hPjxicj48ZHQ+PGNvZGU+LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlPC9jb2RlPjxkZD5BdXRvbWF0aWNhbGx5IGNob29zZSB0aGUgaW1hZ2UgYmFzZSBmb3IgRExMcywgdW5sZXNzIG9uZSBpcyBzcGVjaWZpZWQKK3VzaW5nIHRoZSA8Y29kZT4tLWltYWdlLWJhc2U8L2NvZGU+IGFyZ3VtZW50LiAgQnkgdXNpbmcgYSBoYXNoIGdlbmVyYXRlZAorZnJvbSB0aGUgZGxsbmFtZSB0byBjcmVhdGUgdW5pcXVlIGltYWdlIGJhc2VzIGZvciBlYWNoIERMTCwgaW4tbWVtb3J5Citjb2xsaXNpb25zIGFuZCByZWxvY2F0aW9ucyB3aGljaCBjYW4gZGVsYXkgcHJvZ3JhbSBleGVjdXRpb24gYXJlCithdm9pZGVkLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGRpc2FibGVfMDAyZGF1dG9fMDAyZGltYWdlXzAwMmRiYXNlLTMwNyI+PC9hPjxicj48ZHQ+PGNvZGU+LS1kaXNhYmxlLWF1dG8taW1hZ2UtYmFzZTwvY29kZT48ZGQ+RG8gbm90IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgYSB1bmlxdWUgaW1hZ2UgYmFzZS4gIElmIHRoZXJlIGlzIG5vCit1c2VyLXNwZWNpZmllZCBpbWFnZSBiYXNlICg8Y29kZT4tLWltYWdlLWJhc2U8L2NvZGU+KSB0aGVuIHVzZSB0aGUgcGxhdGZvcm0KK2RlZmF1bHQuIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1ETExzXzAwMmMtbGlua2luZy10by0zMDgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZGxsXzAwMmRzZWFyY2hfMDAyZHByZWZpeC0zMDkiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZGxsLXNlYXJjaC1wcmVmaXggPC9jb2RlPjx2YXI+c3RyaW5nPC92YXI+PGRkPldoZW4gbGlua2luZyBkeW5hbWljYWxseSB0byBhIGRsbCB3aXRob3V0IGFuIGltcG9ydCBsaWJyYXJ5LAorc2VhcmNoIGZvciA8Y29kZT4mbHQ7c3RyaW5nJmd0OyZsdDtiYXNlbmFtZSZndDsuZGxsPC9jb2RlPiBpbiBwcmVmZXJlbmNlIHRvCis8Y29kZT5saWImbHQ7YmFzZW5hbWUmZ3Q7LmRsbDwvY29kZT4uIFRoaXMgYmVoYXZpb3VyIGFsbG93cyBlYXN5IGRpc3RpbmN0aW9uCitiZXR3ZWVuIERMTHMgYnVpbHQgZm9yIHRoZSB2YXJpb3VzICJzdWJwbGF0Zm9ybXMiOiBuYXRpdmUsIGN5Z3dpbiwKK3V3aW4sIHB3LCBldGMuICBGb3IgaW5zdGFuY2UsIGN5Z3dpbiBETExzIHR5cGljYWxseSB1c2UKKzxjb2RlPi0tZGxsLXNlYXJjaC1wcmVmaXg9Y3lnPC9jb2RlPi4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbmFibGVfMDAyZGF1dG9fMDAyZGltcG9ydC0zMTAiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZW5hYmxlLWF1dG8taW1wb3J0PC9jb2RlPjxkZD5EbyBzb3BoaXN0aWNhdGVkIGxpbmtpbmcgb2YgPGNvZGU+X3N5bWJvbDwvY29kZT4gdG8gPGNvZGU+X19pbXBfX3N5bWJvbDwvY29kZT4gZm9yCitEQVRBIGltcG9ydHMgZnJvbSBETExzLCBhbmQgY3JlYXRlIHRoZSBuZWNlc3NhcnkgdGh1bmtpbmcgc3ltYm9scyB3aGVuCitidWlsZGluZyB0aGUgaW1wb3J0IGxpYnJhcmllcyB3aXRoIHRob3NlIERBVEEgZXhwb3J0cy4gTm90ZTogVXNlIG9mIHRoZQorJ2F1dG8taW1wb3J0JyBleHRlbnNpb24gd2lsbCBjYXVzZSB0aGUgdGV4dCBzZWN0aW9uIG9mIHRoZSBpbWFnZSBmaWxlCit0byBiZSBtYWRlIHdyaXRhYmxlLiBUaGlzIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIFBFLUNPRkYgZm9ybWF0CitzcGVjaWZpY2F0aW9uIHB1Ymxpc2hlZCBieSBNaWNyb3NvZnQuCisKKyAgICAgPHA+Tm90ZSAtIHVzZSBvZiB0aGUgJ2F1dG8taW1wb3J0JyBleHRlbnNpb24gd2lsbCBhbHNvIGNhdXNlIHJlYWQgb25seQorZGF0YSB3aGljaCB3b3VsZCBub3JtYWxseSBiZSBwbGFjZWQgaW50byB0aGUgLnJkYXRhIHNlY3Rpb24gdG8gYmUKK3BsYWNlZCBpbnRvIHRoZSAuZGF0YSBzZWN0aW9uIGluc3RlYWQuICBUaGlzIGlzIGluIG9yZGVyIHRvIHdvcmsKK2Fyb3VuZCBhIHByb2JsZW0gd2l0aCBjb25zdHMgdGhhdCBpcyBkZXNjcmliZWQgaGVyZToKK2h0dHA6Ly93d3cuY3lnd2luLmNvbS9tbC9jeWd3aW4vMjAwNC0wOS9tc2cwMTEwMS5odG1sCisKKyAgICAgPHA+VXNpbmcgJ2F1dG8taW1wb3J0JyBnZW5lcmFsbHkgd2lsbCAnanVzdCB3b3JrJyAmbmRhc2g7IGJ1dCBzb21ldGltZXMgeW91IG1heQorc2VlIHRoaXMgbWVzc2FnZToKKworICAgICA8cD4idmFyaWFibGUgJyZsdDt2YXImZ3Q7JyBjYW4ndCBiZSBhdXRvLWltcG9ydGVkLiBQbGVhc2UgcmVhZCB0aGUKK2RvY3VtZW50YXRpb24gZm9yIGxkJ3MgPGNvZGU+LS1lbmFibGUtYXV0by1pbXBvcnQ8L2NvZGU+IGZvciBkZXRhaWxzLiIKKworICAgICA8cD5UaGlzIG1lc3NhZ2Ugb2NjdXJzIHdoZW4gc29tZSAoc3ViKWV4cHJlc3Npb24gYWNjZXNzZXMgYW4gYWRkcmVzcwordWx0aW1hdGVseSBnaXZlbiBieSB0aGUgc3VtIG9mIHR3byBjb25zdGFudHMgKFdpbjMyIGltcG9ydCB0YWJsZXMgb25seQorYWxsb3cgb25lKS4gIEluc3RhbmNlcyB3aGVyZSB0aGlzIG1heSBvY2N1ciBpbmNsdWRlIGFjY2Vzc2VzIHRvIG1lbWJlcgorZmllbGRzIG9mIHN0cnVjdCB2YXJpYWJsZXMgaW1wb3J0ZWQgZnJvbSBhIERMTCwgYXMgd2VsbCBhcyB1c2luZyBhCitjb25zdGFudCBpbmRleCBpbnRvIGFuIGFycmF5IHZhcmlhYmxlIGltcG9ydGVkIGZyb20gYSBETEwuICBBbnkKK211bHRpd29yZCB2YXJpYWJsZSAoYXJyYXlzLCBzdHJ1Y3RzLCBsb25nIGxvbmcsIGV0YykgbWF5IHRyaWdnZXIKK3RoaXMgZXJyb3IgY29uZGl0aW9uLiAgSG93ZXZlciwgcmVnYXJkbGVzcyBvZiB0aGUgZXhhY3QgZGF0YSB0eXBlCitvZiB0aGUgb2ZmZW5kaW5nIGV4cG9ydGVkIHZhcmlhYmxlLCBsZCB3aWxsIGFsd2F5cyBkZXRlY3QgaXQsIGlzc3VlCit0aGUgd2FybmluZywgYW5kIGV4aXQuCisKKyAgICAgPHA+VGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBhZGRyZXNzIHRoaXMgZGlmZmljdWx0eSwgcmVnYXJkbGVzcyBvZiB0aGUKK2RhdGEgdHlwZSBvZiB0aGUgZXhwb3J0ZWQgdmFyaWFibGU6CisKKyAgICAgPHA+T25lIHdheSBpcyB0byB1c2UgJm5kYXNoO2VuYWJsZS1ydW50aW1lLXBzZXVkby1yZWxvYyBzd2l0Y2guIFRoaXMgbGVhdmVzIHRoZSB0YXNrCitvZiBhZGp1c3RpbmcgcmVmZXJlbmNlcyBpbiB5b3VyIGNsaWVudCBjb2RlIGZvciBydW50aW1lIGVudmlyb25tZW50LCBzbwordGhpcyBtZXRob2Qgd29ya3Mgb25seSB3aGVuIHJ1bnRpbWUgZW52aXJvbm1lbnQgc3VwcG9ydHMgdGhpcyBmZWF0dXJlLgorCisgICAgIDxwPkEgc2Vjb25kIHNvbHV0aW9uIGlzIHRvIGZvcmNlIG9uZSBvZiB0aGUgJ2NvbnN0YW50cycgdG8gYmUgYSB2YXJpYWJsZSAmbmRhc2g7Cit0aGF0IGlzLCB1bmtub3duIGFuZCB1bi1vcHRpbWl6YWJsZSBhdCBjb21waWxlIHRpbWUuICBGb3IgYXJyYXlzLAordGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOiBhKSBtYWtlIHRoZSBpbmRleGVlICh0aGUgYXJyYXkncyBhZGRyZXNzKQorYSB2YXJpYWJsZSwgb3IgYikgbWFrZSB0aGUgJ2NvbnN0YW50JyBpbmRleCBhIHZhcmlhYmxlLiAgVGh1czoKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgZXh0ZXJuIHR5cGUgZXh0ZXJuX2FycmF5W107CisgICAgICAgICAgZXh0ZXJuX2FycmF5WzFdIC0tJmd0OworICAgICAgICAgICAgIHsgdm9sYXRpbGUgdHlwZSAqdD1leHRlcm5fYXJyYXk7IHRbMV0gfQorPC9wcmU+CisgICAgIDxwPm9yCisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGV4dGVybiB0eXBlIGV4dGVybl9hcnJheVtdOworICAgICAgICAgIGV4dGVybl9hcnJheVsxXSAtLSZndDsKKyAgICAgICAgICAgICB7IHZvbGF0aWxlIGludCB0PTE7IGV4dGVybl9hcnJheVt0XSB9Cis8L3ByZT4KKyAgICAgPHA+Rm9yIHN0cnVjdHMgKGFuZCBtb3N0IG90aGVyIG11bHRpd29yZCBkYXRhIHR5cGVzKSB0aGUgb25seSBvcHRpb24KK2lzIHRvIG1ha2UgdGhlIHN0cnVjdCBpdHNlbGYgKG9yIHRoZSBsb25nIGxvbmcsIG9yIHRoZSAuLi4pIHZhcmlhYmxlOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBleHRlcm4gc3RydWN0IHMgZXh0ZXJuX3N0cnVjdDsKKyAgICAgICAgICBleHRlcm5fc3RydWN0LmZpZWxkIC0tJmd0OworICAgICAgICAgICAgIHsgdm9sYXRpbGUgc3RydWN0IHMgKnQ9JmFtcDtleHRlcm5fc3RydWN0OyB0LSZndDtmaWVsZCB9Cis8L3ByZT4KKyAgICAgPHA+b3IKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgZXh0ZXJuIGxvbmcgbG9uZyBleHRlcm5fbGw7CisgICAgICAgICAgZXh0ZXJuX2xsIC0tJmd0OworICAgICAgICAgICAgeyB2b2xhdGlsZSBsb25nIGxvbmcgKiBsb2NhbF9sbD0mYW1wO2V4dGVybl9sbDsgKmxvY2FsX2xsIH0KKzwvcHJlPgorICAgICA8cD5BIHRoaXJkIG1ldGhvZCBvZiBkZWFsaW5nIHdpdGggdGhpcyBkaWZmaWN1bHR5IGlzIHRvIGFiYW5kb24KKydhdXRvLWltcG9ydCcgZm9yIHRoZSBvZmZlbmRpbmcgc3ltYm9sIGFuZCBtYXJrIGl0IHdpdGgKKzxjb2RlPl9fZGVjbHNwZWMoZGxsaW1wb3J0KTwvY29kZT4uICBIb3dldmVyLCBpbiBwcmFjdGlzZSB0aGF0CityZXF1aXJlcyB1c2luZyBjb21waWxlLXRpbWUgI2RlZmluZXMgdG8gaW5kaWNhdGUgd2hldGhlciB5b3UgYXJlCitidWlsZGluZyBhIERMTCwgYnVpbGRpbmcgY2xpZW50IGNvZGUgdGhhdCB3aWxsIGxpbmsgdG8gdGhlIERMTCwgb3IKK21lcmVseSBidWlsZGluZy9saW5raW5nIHRvIGEgc3RhdGljIGxpYnJhcnkuICAgSW4gbWFraW5nIHRoZSBjaG9pY2UKK2JldHdlZW4gdGhlIHZhcmlvdXMgbWV0aG9kcyBvZiByZXNvbHZpbmcgdGhlICdkaXJlY3QgYWRkcmVzcyB3aXRoCitjb25zdGFudCBvZmZzZXQnIHByb2JsZW0sIHlvdSBzaG91bGQgY29uc2lkZXIgdHlwaWNhbCByZWFsLXdvcmxkIHVzYWdlOgorCisgICAgIDxwPk9yaWdpbmFsOgorICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgLS1mb28uaAorICAgICAgICAgIGV4dGVybiBpbnQgYXJyW107CisgICAgICAgICAgLS1mb28uYworICAgICAgICAgICNpbmNsdWRlICJmb28uaCIKKyAgICAgICAgICB2b2lkIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KXsKKyAgICAgICAgICAgIHByaW50ZigiJWRcbiIsYXJyWzFdKTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPHA+U29sdXRpb24gMToKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIC0tZm9vLmgKKyAgICAgICAgICBleHRlcm4gaW50IGFycltdOworICAgICAgICAgIC0tZm9vLmMKKyAgICAgICAgICAjaW5jbHVkZSAiZm9vLmgiCisgICAgICAgICAgdm9pZCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndil7CisgICAgICAgICAgICAvKiBUaGlzIHdvcmthcm91bmQgaXMgZm9yIHdpbjMyIGFuZCBjeWd3aW47IGRvIG5vdCAib3B0aW1pemUiICovCisgICAgICAgICAgICB2b2xhdGlsZSBpbnQgKnBhcnIgPSBhcnI7CisgICAgICAgICAgICBwcmludGYoIiVkXG4iLHBhcnJbMV0pOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8cD5Tb2x1dGlvbiAyOgorICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgLS1mb28uaAorICAgICAgICAgIC8qIE5vdGU6IGF1dG8tZXhwb3J0IGlzIGFzc3VtZWQgKG5vIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSkgKi8KKyAgICAgICAgICAjaWYgKGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pKSAmYW1wOyZhbXA7IFwKKyAgICAgICAgICAgICEoZGVmaW5lZChGT09fQlVJTERfRExMKSB8fCBkZWZpbmVkKEZPT19TVEFUSUMpKQorICAgICAgICAgICNkZWZpbmUgRk9PX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyAgICAgICAgICAjZWxzZQorICAgICAgICAgICNkZWZpbmUgRk9PX0lNUE9SVAorICAgICAgICAgICNlbmRpZgorICAgICAgICAgIGV4dGVybiBGT09fSU1QT1JUIGludCBhcnJbXTsKKyAgICAgICAgICAtLWZvby5jCisgICAgICAgICAgI2luY2x1ZGUgImZvby5oIgorICAgICAgICAgIHZvaWQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpeworICAgICAgICAgICAgcHJpbnRmKCIlZFxuIixhcnJbMV0pOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8cD5BIGZvdXJ0aCB3YXkgdG8gYXZvaWQgdGhpcyBwcm9ibGVtIGlzIHRvIHJlLWNvZGUgeW91cgorbGlicmFyeSB0byB1c2UgYSBmdW5jdGlvbmFsIGludGVyZmFjZSByYXRoZXIgdGhhbiBhIGRhdGEgaW50ZXJmYWNlCitmb3IgdGhlIG9mZmVuZGluZyB2YXJpYWJsZXMgKGUuZy4gc2V0X2ZvbygpIGFuZCBnZXRfZm9vKCkgYWNjZXNzb3IKK2Z1bmN0aW9ucykuIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZGlzYWJsZV8wMDJkYXV0b18wMDJkaW1wb3J0LTMxMSI+PC9hPjxicj48ZHQ+PGNvZGU+LS1kaXNhYmxlLWF1dG8taW1wb3J0PC9jb2RlPjxkZD5EbyBub3QgYXR0ZW1wdCB0byBkbyBzb3BoaXN0aWNhdGVkIGxpbmtpbmcgb2YgPGNvZGU+X3N5bWJvbDwvY29kZT4gdG8KKzxjb2RlPl9faW1wX19zeW1ib2w8L2NvZGU+IGZvciBEQVRBIGltcG9ydHMgZnJvbSBETExzLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGVuYWJsZV8wMDJkcnVudGltZV8wMDJkcHNldWRvXzAwMmRyZWxvYy0zMTIiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZW5hYmxlLXJ1bnRpbWUtcHNldWRvLXJlbG9jPC9jb2RlPjxkZD5JZiB5b3VyIGNvZGUgY29udGFpbnMgZXhwcmVzc2lvbnMgZGVzY3JpYmVkIGluICZuZGFzaDtlbmFibGUtYXV0by1pbXBvcnQgc2VjdGlvbiwKK3RoYXQgaXMsIERBVEEgaW1wb3J0cyBmcm9tIERMTCB3aXRoIG5vbi16ZXJvIG9mZnNldCwgdGhpcyBzd2l0Y2ggd2lsbCBjcmVhdGUKK2EgdmVjdG9yIG9mICdydW50aW1lIHBzZXVkbyByZWxvY2F0aW9ucycgd2hpY2ggY2FuIGJlIHVzZWQgYnkgcnVudGltZQorZW52aXJvbm1lbnQgdG8gYWRqdXN0IHJlZmVyZW5jZXMgdG8gc3VjaCBkYXRhIGluIHlvdXIgY2xpZW50IGNvZGUuIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZGlzYWJsZV8wMDJkcnVudGltZV8wMDJkcHNldWRvXzAwMmRyZWxvYy0zMTMiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZGlzYWJsZS1ydW50aW1lLXBzZXVkby1yZWxvYzwvY29kZT48ZGQ+RG8gbm90IGNyZWF0ZSBwc2V1ZG8gcmVsb2NhdGlvbnMgZm9yIG5vbi16ZXJvIG9mZnNldCBEQVRBIGltcG9ydHMgZnJvbQorRExMcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZW5hYmxlXzAwMmRleHRyYV8wMDJkcGVfMDAyZGRlYnVnLTMxNCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1lbmFibGUtZXh0cmEtcGUtZGVidWc8L2NvZGU+PGRkPlNob3cgYWRkaXRpb25hbCBkZWJ1ZyBpbmZvIHJlbGF0ZWQgdG8gYXV0by1pbXBvcnQgc3ltYm9sIHRodW5raW5nLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHNlY3Rpb25fMDAyZGFsaWdubWVudC0zMTUiPjwvYT48YnI+PGR0Pjxjb2RlPi0tc2VjdGlvbi1hbGlnbm1lbnQ8L2NvZGU+PGRkPlNldHMgdGhlIHNlY3Rpb24gYWxpZ25tZW50LiAgU2VjdGlvbnMgaW4gbWVtb3J5IHdpbGwgYWx3YXlzIGJlZ2luIGF0CithZGRyZXNzZXMgd2hpY2ggYXJlIGEgbXVsdGlwbGUgb2YgdGhpcyBudW1iZXIuICBEZWZhdWx0cyB0byAweDEwMDAuIAorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFBFIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1zdGFjay1zaXplLTMxNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRzdGFjay0zMTciPjwvYT48YnI+PGR0Pjxjb2RlPi0tc3RhY2sgPC9jb2RlPjx2YXI+cmVzZXJ2ZTwvdmFyPjxkdD48Y29kZT4tLXN0YWNrIDwvY29kZT48dmFyPnJlc2VydmU8L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+Y29tbWl0PC92YXI+PGRkPlNwZWNpZnkgdGhlIG51bWJlciBvZiBieXRlcyBvZiBtZW1vcnkgdG8gcmVzZXJ2ZSAoYW5kIG9wdGlvbmFsbHkgY29tbWl0KQordG8gYmUgdXNlZCBhcyBzdGFjayBmb3IgdGhpcyBwcm9ncmFtLiAgVGhlIGRlZmF1bHQgaXMgMk1iIHJlc2VydmVkLCA0SworY29tbWl0dGVkLiAKK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBQRSB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHN1YnN5c3RlbS0zMTgiPjwvYT48YnI+PGR0Pjxjb2RlPi0tc3Vic3lzdGVtIDwvY29kZT48dmFyPndoaWNoPC92YXI+PGR0Pjxjb2RlPi0tc3Vic3lzdGVtIDwvY29kZT48dmFyPndoaWNoPC92YXI+PGNvZGU+OjwvY29kZT48dmFyPm1ham9yPC92YXI+PGR0Pjxjb2RlPi0tc3Vic3lzdGVtIDwvY29kZT48dmFyPndoaWNoPC92YXI+PGNvZGU+OjwvY29kZT48dmFyPm1ham9yPC92YXI+PGNvZGU+LjwvY29kZT48dmFyPm1pbm9yPC92YXI+PGRkPlNwZWNpZmllcyB0aGUgc3Vic3lzdGVtIHVuZGVyIHdoaWNoIHlvdXIgcHJvZ3JhbSB3aWxsIGV4ZWN1dGUuICBUaGUKK2xlZ2FsIHZhbHVlcyBmb3IgPHZhcj53aGljaDwvdmFyPiBhcmUgPGNvZGU+bmF0aXZlPC9jb2RlPiwgPGNvZGU+d2luZG93czwvY29kZT4sCis8Y29kZT5jb25zb2xlPC9jb2RlPiwgPGNvZGU+cG9zaXg8L2NvZGU+LCBhbmQgPGNvZGU+eGJveDwvY29kZT4uICBZb3UgbWF5IG9wdGlvbmFsbHkgc2V0Cit0aGUgc3Vic3lzdGVtIHZlcnNpb24gYWxzby4gIE51bWVyaWMgdmFsdWVzIGFyZSBhbHNvIGFjY2VwdGVkIGZvcgorPHZhcj53aGljaDwvdmFyPi4gCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgUEUgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBzZXQgZmxhZ3MgaW4gdGhlIDxjb2RlPkRsbENoYXJhY3RlcmlzdGljczwvY29kZT4gZmllbGQKK29mIHRoZSBQRSBmaWxlIGhlYWRlcjoKK1tUaGVzZSBvcHRpb25zIGFyZSBzcGVjaWZpYyB0byBQRSB0YXJnZXRlZCBwb3J0cyBvZiB0aGUgbGlua2VyXQorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRkeW5hbWljYmFzZS0zMTkiPjwvYT48YnI+PGR0Pjxjb2RlPi0tZHluYW1pY2Jhc2U8L2NvZGU+PGRkPlRoZSBpbWFnZSBiYXNlIGFkZHJlc3MgbWF5IGJlIHJlbG9jYXRlZCB1c2luZyBhZGRyZXNzIHNwYWNlIGxheW91dAorcmFuZG9taXphdGlvbiAoQVNMUikuICBUaGlzIGZlYXR1cmUgd2FzIGludHJvZHVjZWQgd2l0aCBNUyBXaW5kb3dzCitWaXN0YSBmb3IgaTM4NiBQRSB0YXJnZXRzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRmb3JjZWludGVnLTMyMCI+PC9hPjxicj48ZHQ+PGNvZGU+LS1mb3JjZWludGVnPC9jb2RlPjxkZD5Db2RlIGludGVncml0eSBjaGVja3MgYXJlIGVuZm9yY2VkLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRueGNvbXBhdC0zMjEiPjwvYT48YnI+PGR0Pjxjb2RlPi0tbnhjb21wYXQ8L2NvZGU+PGRkPlRoZSBpbWFnZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIERhdGEgRXhlY3V0aW9uIFByZXZlbnRpb24uIAorVGhpcyBmZWF0dXJlIHdhcyBpbnRyb2R1Y2VkIHdpdGggTVMgV2luZG93cyBYUCBTUDIgZm9yIGkzODYgUEUgdGFyZ2V0cy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGlzb2xhdGlvbi0zMjIiPjwvYT48YnI+PGR0Pjxjb2RlPi0tbm8taXNvbGF0aW9uPC9jb2RlPjxkZD5BbHRob3VnaCB0aGUgaW1hZ2UgdW5kZXJzdGFuZHMgaXNvbGF0aW9uLCBkbyBub3QgaXNvbGF0ZSB0aGUgaW1hZ2UuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRzZWgtMzIzIj48L2E+PGJyPjxkdD48Y29kZT4tLW5vLXNlaDwvY29kZT48ZGQ+VGhlIGltYWdlIGRvZXMgbm90IHVzZSBTRUguIE5vIFNFIGhhbmRsZXIgbWF5IGJlIGNhbGxlZCBmcm9tCit0aGlzIGltYWdlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkYmluZC0zMjQiPjwvYT48YnI+PGR0Pjxjb2RlPi0tbm8tYmluZDwvY29kZT48ZGQ+RG8gbm90IGJpbmQgdGhpcyBpbWFnZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkd2RtZHJpdmVyLTMyNSI+PC9hPjxicj48ZHQ+PGNvZGU+LS13ZG1kcml2ZXI8L2NvZGU+PGRkPlRoZSBkcml2ZXIgdXNlcyB0aGUgTVMgV2luZG93cyBEcml2ZXIgTW9kZWwuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHRzYXdhcmUtMzI2Ij48L2E+PGJyPjxkdD48Y29kZT4tLXRzYXdhcmU8L2NvZGU+PGRkPlRoZSBpbWFnZSBpcyBUZXJtaW5hbCBTZXJ2ZXIgYXdhcmUuCisKKyAgIDwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Mi4xLjIgT3B0aW9ucyBzcGVjaWZpYyB0byBDNlggdUNsaW51eCB0YXJnZXRzPC9oND4KKworPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKzxwPlRoZSBDNlggdUNsaW51eCB0YXJnZXQgdXNlcyBhIGJpbmFyeSBmb3JtYXQgY2FsbGVkIERTQlQgdG8gc3VwcG9ydCBzaGFyZWQKK2xpYnJhcmllcy4gIEVhY2ggc2hhcmVkIGxpYnJhcnkgaW4gdGhlIHN5c3RlbSBuZWVkcyB0byBoYXZlIGEgdW5pcXVlIGluZGV4OworYWxsIGV4ZWN1dGFibGVzIHVzZSBhbiBpbmRleCBvZiAwLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGRzYnRfMDAyZHNpemUtMzI3Ij48L2E+Cis8ZGw+PGR0Pjxjb2RlPi0tZHNidC1zaXplIDwvY29kZT48dmFyPnNpemU8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGVudGlyZXMgaW4gdGhlIERTQlQgb2YgdGhlIGN1cnJlbnQgZXhlY3V0YWJsZQorb3Igc2hhcmVkIGxpYnJhcnkgdG8gPHZhcj5zaXplPC92YXI+LiAgVGhlIGRlZmF1bHQgaXMgdG8gY3JlYXRlIGEgdGFibGUgd2l0aCA2NAorZW50cmllcy4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZHNidF8wMDJkaW5kZXgtMzI4Ij48L2E+PGJyPjxkdD48Y29kZT4tLWRzYnQtaW5kZXggPC9jb2RlPjx2YXI+aW5kZXg8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gc2V0cyB0aGUgRFNCVCBpbmRleCBvZiB0aGUgY3VycmVudCBleGVjdXRhYmxlIG9yIHNoYXJlZCBsaWJyYXJ5Cit0byA8dmFyPmluZGV4PC92YXI+LiAgVGhlIGRlZmF1bHQgaXMgMCwgd2hpY2ggaXMgYXBwcm9wcmlhdGUgZm9yIGdlbmVyYXRpbmcKK2V4ZWN1dGFibGVzLiAgSWYgYSBzaGFyZWQgbGlicmFyeSBpcyBnZW5lcmF0ZWQgd2l0aCBhIERTQlQgaW5kZXggb2YgMCwgdGhlCis8Y29kZT5SX0M2MDAwX0RTQlRfSU5ERVg8L2NvZGU+IHJlbG9jcyBhcmUgY29waWVkIGludG8gdGhlIG91dHB1dCBmaWxlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkbWVyZ2VfMDAyZGV4aWR4XzAwMmRlbnRyaWVzLTMyOSI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tbWVyZ2UtZXhpZHgtZW50cmllczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzd2l0Y2ggZGlzYWJsZXMgdGhlIG1lcmdpbmcgb2YgYWRqYWNlbnQKK2V4aWR4IGVudHJpZXMgaW4gZnJhbWUgdW53aW5kIGluZm8uCisKKyAgIDwvZGw+CisKKzwhLS0gbWFuIGVuZCAtLT4KKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+Mi4xLjMgT3B0aW9ucyBzcGVjaWZpYyB0byBNb3Rvcm9sYSA2OEhDMTEgYW5kIDY4SEMxMiB0YXJnZXRzPC9oND4KKworPCEtLSBtYW4gYmVnaW4gT1BUSU9OUyAtLT4KKzxwPlRoZSA2OEhDMTEgYW5kIDY4SEMxMiBsaW5rZXJzIHN1cHBvcnQgc3BlY2lmaWMgb3B0aW9ucyB0byBjb250cm9sIHRoZQorbWVtb3J5IGJhbmsgc3dpdGNoaW5nIG1hcHBpbmcgYW5kIHRyYW1wb2xpbmUgY29kZSBnZW5lcmF0aW9uLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR0cmFtcG9saW5lLTMzMCI+PC9hPgorPGRsPjxkdD48Y29kZT4tLW5vLXRyYW1wb2xpbmU8L2NvZGU+PGRkPlRoaXMgb3B0aW9uIGRpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIHRyYW1wb2xpbmUuIEJ5IGRlZmF1bHQgYSB0cmFtcG9saW5lCitpcyBnZW5lcmF0ZWQgZm9yIGVhY2ggZmFyIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCB1c2luZyBhIDxjb2RlPmpzcjwvY29kZT4KK2luc3RydWN0aW9uICh0aGlzIGhhcHBlbnMgd2hlbiBhIHBvaW50ZXIgdG8gYSBmYXIgZnVuY3Rpb24gaXMgdGFrZW4pLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRiYW5rXzAwMmR3aW5kb3ctMzMxIj48L2E+PGJyPjxkdD48Y29kZT4tLWJhbmstd2luZG93IDwvY29kZT48dmFyPm5hbWU8L3Zhcj48ZGQ+VGhpcyBvcHRpb24gaW5kaWNhdGVzIHRvIHRoZSBsaW5rZXIgdGhlIG5hbWUgb2YgdGhlIG1lbW9yeSByZWdpb24gaW4KK3RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk1FTU9SWTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzcGVjaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmVzIHRoZSBtZW1vcnkgYmFuayB3aW5kb3cuIAorVGhlIGRlZmluaXRpb24gb2Ygc3VjaCByZWdpb24gaXMgdGhlbiB1c2VkIGJ5IHRoZSBsaW5rZXIgdG8gY29tcHV0ZQorcGFnaW5nIGFuZCBhZGRyZXNzZXMgd2l0aGluIHRoZSBtZW1vcnkgd2luZG93LgorCisgICA8L2RsPgorCis8IS0tIG1hbiBlbmQgLS0+Cis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjIuMS40IE9wdGlvbnMgc3BlY2lmaWMgdG8gTW90b3JvbGEgNjhLIHRhcmdldDwvaDQ+CisKKzwhLS0gbWFuIGJlZ2luIE9QVElPTlMgLS0+Cis8cD5UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCB0byBjb250cm9sIGhhbmRsaW5nIG9mIEdPVCBnZW5lcmF0aW9uCit3aGVuIGxpbmtpbmcgZm9yIDY4SyB0YXJnZXRzLgorCisgICAgIAorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGdvdC0zMzIiPjwvYT4KKzxkbD48ZHQ+PGNvZGU+LS1nb3Q9PC9jb2RlPjx2YXI+dHlwZTwvdmFyPjxkZD5UaGlzIG9wdGlvbiB0ZWxscyB0aGUgbGlua2VyIHdoaWNoIEdPVCBnZW5lcmF0aW9uIHNjaGVtZSB0byB1c2UuIAorPHZhcj50eXBlPC92YXI+IHNob3VsZCBiZSBvbmUgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zaW5nbGU8L3NwYW4+PC9zYW1wPiZyc3F1bzssICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmVnYXRpdmU8L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm11bHRpZ290PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dGFyZ2V0PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gdGhlCitJbmZvIGVudHJ5IGZvciA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bGQ8L3NwYW4+PC9zYW1wPi4KKworICAgPC9kbD4KKworPCEtLSBtYW4gZW5kIC0tPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3JwaGFuLVNlY3Rpb25zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PcnBoYW4tU2VjdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTVjMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3JwaGFuLVNlY3Rpb25zLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3JwaGFuIFNlY3Rpb25zIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIiB0aXRsZT0iRXhwcmVzc2lvbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyIgdGl0bGU9IlN5bWJvbHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjTG9jYXRpb24tQ291bnRlciIgdGl0bGU9IkxvY2F0aW9uIENvdW50ZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik9ycGhhbi1TZWN0aW9ucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMb2NhdGlvbi1Db3VudGVyLmh0bWwjTG9jYXRpb24tQ291bnRlciI+TG9jYXRpb24gQ291bnRlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN5bWJvbHMuaHRtbCNTeW1ib2xzIj5TeW1ib2xzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjEwLjQgT3JwaGFuIFNlY3Rpb25zPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3JwaGFuLTUxNCI+PC9hPk9ycGhhbiBzZWN0aW9ucyBhcmUgc2VjdGlvbnMgcHJlc2VudCBpbiB0aGUgaW5wdXQgZmlsZXMgd2hpY2gKK2FyZSBub3QgZXhwbGljaXRseSBwbGFjZWQgaW50byB0aGUgb3V0cHV0IGZpbGUgYnkgdGhlIGxpbmtlcgorc2NyaXB0LiAgVGhlIGxpbmtlciB3aWxsIHN0aWxsIGNvcHkgdGhlc2Ugc2VjdGlvbnMgaW50byB0aGUKK291dHB1dCBmaWxlLCBidXQgaXQgaGFzIHRvIGd1ZXNzIGFzIHRvIHdoZXJlIHRoZXkgc2hvdWxkIGJlCitwbGFjZWQuICBUaGUgbGlua2VyIHVzZXMgYSBzaW1wbGUgaGV1cmlzdGljIHRvIGRvIHRoaXMuICBJdAorYXR0ZW1wdHMgdG8gcGxhY2Ugb3JwaGFuIHNlY3Rpb25zIGFmdGVyIG5vbi1vcnBoYW4gc2VjdGlvbnMgb2YgdGhlCitzYW1lIGF0dHJpYnV0ZSwgc3VjaCBhcyBjb2RlIHZzIGRhdGEsIGxvYWRhYmxlIHZzIG5vbi1sb2FkYWJsZSwgZXRjLiAKK0lmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSB0byBkbyB0aGlzIHRoZW4gaXQgcGxhY2VzCithdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCisgICA8cD5Gb3IgRUxGIHRhcmdldHMsIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHNlY3Rpb24gaW5jbHVkZXMgc2VjdGlvbiB0eXBlIGFzCit3ZWxsIGFzIHNlY3Rpb24gZmxhZy4KKworICAgPHA+SWYgYW4gb3JwaGFuZWQgc2VjdGlvbidzIG5hbWUgaXMgcmVwcmVzZW50YWJsZSBhcyBhIEMgaWRlbnRpZmllciB0aGVuCit0aGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBzZWUgPGEgaHJlZj0iUFJPVklERS5odG1sI1BST1ZJREUiPlBST1ZJREU8L2E+IHR3byBzeW1ib2xzOgorX19zdGFydF9TRUNOQU1FIGFuZCBfX3N0b3BfU0VDTkFNRSwgd2hlcmUgU0VDTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUKK3NlY3Rpb24uICBUaGVzZSBpbmRpY2F0ZSB0aGUgc3RhcnQgYWRkcmVzcyBhbmQgZW5kIGFkZHJlc3Mgb2YgdGhlCitvcnBoYW5lZCBzZWN0aW9uIHJlc3BlY3RpdmVseS4gIE5vdGU6IG1vc3Qgc2VjdGlvbiBuYW1lcyBhcmUgbm90CityZXByZXNlbnRhYmxlIGFzIEMgaWRlbnRpZmllcnMgYmVjYXVzZSB0aGV5IGNvbnRhaW4gYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2NoYXJhY3Rlci4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tQWRkcmVzcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tQWRkcmVzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTgzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1BZGRyZXNzLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk91dHB1dCBTZWN0aW9uIEFkZHJlc3MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiIHRpdGxlPSJTRUNUSU9OUyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLU5hbWUuaHRtbCNPdXRwdXQtU2VjdGlvbi1OYW1lIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gTmFtZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IklucHV0LVNlY3Rpb24uaHRtbCNJbnB1dC1TZWN0aW9uIiB0aXRsZT0iSW5wdXQgU2VjdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3V0cHV0LVNlY3Rpb24tQWRkcmVzcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbnB1dC1TZWN0aW9uLmh0bWwjSW5wdXQtU2VjdGlvbiI+SW5wdXQgU2VjdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLU5hbWUuaHRtbCNPdXRwdXQtU2VjdGlvbi1OYW1lIj5PdXRwdXQgU2VjdGlvbiBOYW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyI+U0VDVElPTlM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjYuMyBPdXRwdXQgU2VjdGlvbiBBZGRyZXNzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtYWRkcmVzc18wMDJjLXNlY3Rpb24tNDAyIj48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbi1hZGRyZXNzLTQwMyI+PC9hPlRoZSA8dmFyPmFkZHJlc3M8L3Zhcj4gaXMgYW4gZXhwcmVzc2lvbiBmb3IgdGhlIFZNQSAodGhlIHZpcnR1YWwgbWVtb3J5CithZGRyZXNzKSBvZiB0aGUgb3V0cHV0IHNlY3Rpb24uICBUaGlzIGFkZHJlc3MgaXMgb3B0aW9uYWwsIGJ1dCBpZiBpdAoraXMgcHJvdmlkZWQgdGhlbiB0aGUgb3V0cHV0IGFkZHJlc3Mgd2lsbCBiZSBzZXQgZXhhY3RseSBhcyBzcGVjaWZpZWQuCisKKyAgIDxwPklmIHRoZSBvdXRwdXQgYWRkcmVzcyBpcyBub3Qgc3BlY2lmaWVkIHRoZW4gb25lIHdpbGwgYmUgY2hvc2VuIGZvciB0aGUKK3NlY3Rpb24sIGJhc2VkIG9uIHRoZSBoZXVyaXN0aWMgYmVsb3cuICBUaGlzIGFkZHJlc3Mgd2lsbCBiZSBhZGp1c3RlZAordG8gZml0IHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgdGhlIG91dHB1dCBzZWN0aW9uLiAgVGhlCithbGlnbm1lbnQgcmVxdWlyZW1lbnQgaXMgdGhlIHN0cmljdGVzdCBhbGlnbm1lbnQgb2YgYW55IGlucHV0IHNlY3Rpb24KK2NvbnRhaW5lZCB3aXRoaW4gdGhlIG91dHB1dCBzZWN0aW9uLgorCisgICA8cD5UaGUgb3V0cHV0IHNlY3Rpb24gYWRkcmVzcyBoZXVyaXN0aWMgaXMgYXMgZm9sbG93czoKKworICAgICA8dWw+Cis8bGk+SWYgYW4gb3V0cHV0IG1lbW9yeSA8dmFyPnJlZ2lvbjwvdmFyPiBpcyBzZXQgZm9yIHRoZSBzZWN0aW9uIHRoZW4gaXQKK2lzIGFkZGVkIHRvIHRoaXMgcmVnaW9uIGFuZCBpdHMgYWRkcmVzcyB3aWxsIGJlIHRoZSBuZXh0IGZyZWUgYWRkcmVzcworaW4gdGhhdCByZWdpb24uCisKKyAgICAgPGxpPklmIHRoZSBNRU1PUlkgY29tbWFuZCBoYXMgYmVlbiB1c2VkIHRvIGNyZWF0ZSBhIGxpc3Qgb2YgbWVtb3J5CityZWdpb25zIHRoZW4gdGhlIGZpcnN0IHJlZ2lvbiB3aGljaCBoYXMgYXR0cmlidXRlcyBjb21wYXRpYmxlIHdpdGggdGhlCitzZWN0aW9uIGlzIHNlbGVjdGVkIHRvIGNvbnRhaW4gaXQuICBUaGUgc2VjdGlvbidzIG91dHB1dCBhZGRyZXNzIHdpbGwKK2JlIHRoZSBuZXh0IGZyZWUgYWRkcmVzcyBpbiB0aGF0IHJlZ2lvbjsgPGEgaHJlZj0iTUVNT1JZLmh0bWwjTUVNT1JZIj5NRU1PUlk8L2E+LgorCisgICAgIDxsaT5JZiBubyBtZW1vcnkgcmVnaW9ucyB3ZXJlIHNwZWNpZmllZCwgb3Igbm9uZSBtYXRjaCB0aGUgc2VjdGlvbiB0aGVuCit0aGUgb3V0cHV0IGFkZHJlc3Mgd2lsbCBiZSBiYXNlZCBvbiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbG9jYXRpb24KK2NvdW50ZXIuIAorPC91bD4KKworPHAgY2xhc3M9Im5vaW5kZW50Ij5Gb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC50ZXh0IC4gOiB7ICooLnRleHQpIH0KKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5hbmQKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC50ZXh0IDogeyAqKC50ZXh0KSB9Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+YXJlIHN1YnRseSBkaWZmZXJlbnQuICBUaGUgZmlyc3Qgd2lsbCBzZXQgdGhlIGFkZHJlc3Mgb2YgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IG91dHB1dCBzZWN0aW9uIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBsb2NhdGlvbgorY291bnRlci4gIFRoZSBzZWNvbmQgd2lsbCBzZXQgaXQgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxvY2F0aW9uCitjb3VudGVyIGFsaWduZWQgdG8gdGhlIHN0cmljdGVzdCBhbGlnbm1lbnQgb2YgYW55IG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87CitpbnB1dCBzZWN0aW9ucy4KKworICAgPHA+VGhlIDx2YXI+YWRkcmVzczwvdmFyPiBtYXkgYmUgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb247IDxhIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPi4gCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYWxpZ24gdGhlIHNlY3Rpb24gb24gYSAweDEwIGJ5dGUgYm91bmRhcnksCitzbyB0aGF0IHRoZSBsb3dlc3QgZm91ciBiaXRzIG9mIHRoZSBzZWN0aW9uIGFkZHJlc3MgYXJlIHplcm8sIHlvdSBjb3VsZAorZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAudGV4dCBBTElHTigweDEwKSA6IHsgKigudGV4dCkgfQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoaXMgd29ya3MgYmVjYXVzZSA8Y29kZT5BTElHTjwvY29kZT4gcmV0dXJucyB0aGUgY3VycmVudCBsb2NhdGlvbiBjb3VudGVyCithbGlnbmVkIHVwd2FyZCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgorCisgICA8cD5TcGVjaWZ5aW5nIDx2YXI+YWRkcmVzczwvdmFyPiBmb3IgYSBzZWN0aW9uIHdpbGwgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUKK2xvY2F0aW9uIGNvdW50ZXIsIHByb3ZpZGVkIHRoYXQgdGhlIHNlY3Rpb24gaXMgbm9uLWVtcHR5LiAgKEVtcHR5CitzZWN0aW9ucyBhcmUgaWdub3JlZCkuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzIxOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsODIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiIHRpdGxlPSJTRUNUSU9OUyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURpc2NhcmRpbmcuaHRtbCNPdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gRGlzY2FyZGluZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik92ZXJsYXktRGVzY3JpcHRpb24uaHRtbCNPdmVybGF5LURlc2NyaXB0aW9uIiB0aXRsZT0iT3ZlcmxheSBEZXNjcmlwdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPdmVybGF5LURlc2NyaXB0aW9uLmh0bWwjT3ZlcmxheS1EZXNjcmlwdGlvbiI+T3ZlcmxheSBEZXNjcmlwdGlvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURpc2NhcmRpbmcuaHRtbCNPdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nIj5PdXRwdXQgU2VjdGlvbiBEaXNjYXJkaW5nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyI+U0VDVElPTlM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjYuOCBPdXRwdXQgU2VjdGlvbiBBdHRyaWJ1dGVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtb3V0cHV0LXNlY3Rpb24tYXR0cmlidXRlcy00NDQiPjwvYT5XZSBzaG93ZWQgYWJvdmUgdGhhdCB0aGUgZnVsbCBkZXNjcmlwdGlvbiBvZiBhbiBvdXRwdXQgc2VjdGlvbiBsb29rZWQKK2xpa2UgdGhpczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDx2YXI+c2VjdGlvbjwvdmFyPiBbPHZhcj5hZGRyZXNzPC92YXI+XSBbKDx2YXI+dHlwZTwvdmFyPildIDoKKyAgICAgICBbQVQoPHZhcj5sbWE8L3Zhcj4pXQorICAgICAgIFtBTElHTig8dmFyPnNlY3Rpb25fYWxpZ248L3Zhcj4pXQorICAgICAgIFtTVUJBTElHTig8dmFyPnN1YnNlY3Rpb25fYWxpZ248L3Zhcj4pXQorICAgICAgIFs8dmFyPmNvbnN0cmFpbnQ8L3Zhcj5dCisgICAgICAgeworICAgICAgICAgPHZhcj5vdXRwdXQtc2VjdGlvbi1jb21tYW5kPC92YXI+CisgICAgICAgICA8dmFyPm91dHB1dC1zZWN0aW9uLWNvbW1hbmQ8L3Zhcj4KKyAgICAgICAgIC4uLgorICAgICAgIH0gWyZndDs8dmFyPnJlZ2lvbjwvdmFyPl0gW0FUJmd0Ozx2YXI+bG1hX3JlZ2lvbjwvdmFyPl0gWzo8dmFyPnBoZHI8L3Zhcj4gOjx2YXI+cGhkcjwvdmFyPiAuLi5dIFs9PHZhcj5maWxsZXhwPC92YXI+XQorPC9wcmU+CisgICA8cD5XZSd2ZSBhbHJlYWR5IGRlc2NyaWJlZCA8dmFyPnNlY3Rpb248L3Zhcj4sIDx2YXI+YWRkcmVzczwvdmFyPiwgYW5kCis8dmFyPm91dHB1dC1zZWN0aW9uLWNvbW1hbmQ8L3Zhcj4uICBJbiB0aGlzIHNlY3Rpb24gd2Ugd2lsbCBkZXNjcmliZSB0aGUKK3JlbWFpbmluZyBzZWN0aW9uIGF0dHJpYnV0ZXMuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1UeXBlLmh0bWwjT3V0cHV0LVNlY3Rpb24tVHlwZSI+T3V0cHV0IFNlY3Rpb24gVHlwZTwvYT46IAkJT3V0cHV0IHNlY3Rpb24gdHlwZQorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tTE1BLmh0bWwjT3V0cHV0LVNlY3Rpb24tTE1BIj5PdXRwdXQgU2VjdGlvbiBMTUE8L2E+OiAJCU91dHB1dCBzZWN0aW9uIExNQQorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQuaHRtbCNGb3JjZWQtT3V0cHV0LUFsaWdubWVudCI+Rm9yY2VkIE91dHB1dCBBbGlnbm1lbnQ8L2E+OiAJRm9yY2VkIE91dHB1dCBBbGlnbm1lbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IkZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCNGb3JjZWQtSW5wdXQtQWxpZ25tZW50Ij5Gb3JjZWQgSW5wdXQgQWxpZ25tZW50PC9hPjogCUZvcmNlZCBJbnB1dCBBbGlnbm1lbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQuaHRtbCNPdXRwdXQtU2VjdGlvbi1Db25zdHJhaW50Ij5PdXRwdXQgU2VjdGlvbiBDb25zdHJhaW50PC9hPjogICAgT3V0cHV0IHNlY3Rpb24gY29uc3RyYWludAorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUmVnaW9uLmh0bWwjT3V0cHV0LVNlY3Rpb24tUmVnaW9uIj5PdXRwdXQgU2VjdGlvbiBSZWdpb248L2E+OiAJT3V0cHV0IHNlY3Rpb24gcmVnaW9uCis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1QaGRyLmh0bWwjT3V0cHV0LVNlY3Rpb24tUGhkciI+T3V0cHV0IFNlY3Rpb24gUGhkcjwvYT46IAkJT3V0cHV0IHNlY3Rpb24gcGhkcgorPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRmlsbC5odG1sI091dHB1dC1TZWN0aW9uLUZpbGwiPk91dHB1dCBTZWN0aW9uIEZpbGw8L2E+OiAJCU91dHB1dCBzZWN0aW9uIGZpbGwKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWFhYjQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk91dHB1dCBTZWN0aW9uIENvbnN0cmFpbnQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gQXR0cmlidXRlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCNGb3JjZWQtSW5wdXQtQWxpZ25tZW50IiB0aXRsZT0iRm9yY2VkIElucHV0IEFsaWdubWVudCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLVJlZ2lvbi5odG1sI091dHB1dC1TZWN0aW9uLVJlZ2lvbiIgdGl0bGU9Ik91dHB1dCBTZWN0aW9uIFJlZ2lvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1SZWdpb24uaHRtbCNPdXRwdXQtU2VjdGlvbi1SZWdpb24iPk91dHB1dCBTZWN0aW9uIFJlZ2lvbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkZvcmNlZC1JbnB1dC1BbGlnbm1lbnQuaHRtbCNGb3JjZWQtSW5wdXQtQWxpZ25tZW50Ij5Gb3JjZWQgSW5wdXQgQWxpZ25tZW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiPk91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg1IGNsYXNzPSJzdWJzdWJzZWN0aW9uIj4zLjYuOC41IE91dHB1dCBTZWN0aW9uIENvbnN0cmFpbnQ8L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1PTkxZXzAwNWZJRl8wMDVmUk8tNDYwIj48L2E+PGEgbmFtZT0iaW5kZXgtT05MWV8wMDVmSUZfMDA1ZlJXLTQ2MSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnN0cmFpbnRzLW9uLW91dHB1dC1zZWN0aW9ucy00NjIiPjwvYT5Zb3UgY2FuIHNwZWNpZnkgdGhhdCBhbiBvdXRwdXQgc2VjdGlvbiBzaG91bGQgb25seSBiZSBjcmVhdGVkIGlmIGFsbAorb2YgaXRzIGlucHV0IHNlY3Rpb25zIGFyZSByZWFkLW9ubHkgb3IgYWxsIG9mIGl0cyBpbnB1dCBzZWN0aW9ucyBhcmUKK3JlYWQtd3JpdGUgYnkgdXNpbmcgdGhlIGtleXdvcmQgPGNvZGU+T05MWV9JRl9STzwvY29kZT4gYW5kCis8Y29kZT5PTkxZX0lGX1JXPC9jb2RlPiByZXNwZWN0aXZlbHkuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLURhdGEuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLURhdGEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzEzYWIwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PdXRwdXQgU2VjdGlvbiBEYXRhIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTRUNUSU9OUy5odG1sI1NFQ1RJT05TIiB0aXRsZT0iU0VDVElPTlMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJJbnB1dC1TZWN0aW9uLmh0bWwjSW5wdXQtU2VjdGlvbiIgdGl0bGU9IklucHV0IFNlY3Rpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI091dHB1dC1TZWN0aW9uLUtleXdvcmRzIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gS2V5d29yZHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik91dHB1dC1TZWN0aW9uLURhdGEiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMuaHRtbCNPdXRwdXQtU2VjdGlvbi1LZXl3b3JkcyI+T3V0cHV0IFNlY3Rpb24gS2V5d29yZHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnB1dC1TZWN0aW9uLmh0bWwjSW5wdXQtU2VjdGlvbiI+SW5wdXQgU2VjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiPlNFQ1RJT05TPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My42LjUgT3V0cHV0IFNlY3Rpb24gRGF0YTwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRhdGEtNDIzIj48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbi1kYXRhLTQyNCI+PC9hPjxhIG5hbWU9ImluZGV4LW91dHB1dC1zZWN0aW9uLWRhdGEtNDI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtQllURV8wMDI4XzAwNDB2YXJfMDA3YmV4cHJlc3Npb25fMDA3ZF8wMDI5LTQyNiI+PC9hPjxhIG5hbWU9ImluZGV4LVNIT1JUXzAwMjhfMDA0MHZhcl8wMDdiZXhwcmVzc2lvbl8wMDdkXzAwMjktNDI3Ij48L2E+PGEgbmFtZT0iaW5kZXgtTE9OR18wMDI4XzAwNDB2YXJfMDA3YmV4cHJlc3Npb25fMDA3ZF8wMDI5LTQyOCI+PC9hPjxhIG5hbWU9ImluZGV4LVFVQURfMDAyOF8wMDQwdmFyXzAwN2JleHByZXNzaW9uXzAwN2RfMDAyOS00MjkiPjwvYT48YSBuYW1lPSJpbmRleC1TUVVBRF8wMDI4XzAwNDB2YXJfMDA3YmV4cHJlc3Npb25fMDA3ZF8wMDI5LTQzMCI+PC9hPllvdSBjYW4gaW5jbHVkZSBleHBsaWNpdCBieXRlcyBvZiBkYXRhIGluIGFuIG91dHB1dCBzZWN0aW9uIGJ5IHVzaW5nCis8Y29kZT5CWVRFPC9jb2RlPiwgPGNvZGU+U0hPUlQ8L2NvZGU+LCA8Y29kZT5MT05HPC9jb2RlPiwgPGNvZGU+UVVBRDwvY29kZT4sIG9yIDxjb2RlPlNRVUFEPC9jb2RlPiBhcworYW4gb3V0cHV0IHNlY3Rpb24gY29tbWFuZC4gIEVhY2gga2V5d29yZCBpcyBmb2xsb3dlZCBieSBhbiBleHByZXNzaW9uIGluCitwYXJlbnRoZXNlcyBwcm92aWRpbmcgdGhlIHZhbHVlIHRvIHN0b3JlIChzZWUgPGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+KS4gIFRoZQordmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgc3RvcmVkIGF0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBsb2NhdGlvbgorY291bnRlci4KKworICAgPHA+VGhlIDxjb2RlPkJZVEU8L2NvZGU+LCA8Y29kZT5TSE9SVDwvY29kZT4sIDxjb2RlPkxPTkc8L2NvZGU+LCBhbmQgPGNvZGU+UVVBRDwvY29kZT4gY29tbWFuZHMKK3N0b3JlIG9uZSwgdHdvLCBmb3VyLCBhbmQgZWlnaHQgYnl0ZXMgKHJlc3BlY3RpdmVseSkuICBBZnRlciBzdG9yaW5nIHRoZQorYnl0ZXMsIHRoZSBsb2NhdGlvbiBjb3VudGVyIGlzIGluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMKK3N0b3JlZC4KKworICAgPHA+Rm9yIGV4YW1wbGUsIHRoaXMgd2lsbCBzdG9yZSB0aGUgYnl0ZSAxIGZvbGxvd2VkIGJ5IHRoZSBmb3VyIGJ5dGUgdmFsdWUKK29mIHRoZSBzeW1ib2wgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5hZGRyPC9zcGFuPjwvc2FtcD4mcnNxdW87OgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIEJZVEUoMSkKKyAgICAgTE9ORyhhZGRyKQorPC9wcmU+CisgICA8cD5XaGVuIHVzaW5nIGEgNjQgYml0IGhvc3Qgb3IgdGFyZ2V0LCA8Y29kZT5RVUFEPC9jb2RlPiBhbmQgPGNvZGU+U1FVQUQ8L2NvZGU+IGFyZSB0aGUKK3NhbWU7IHRoZXkgYm90aCBzdG9yZSBhbiA4IGJ5dGUsIG9yIDY0IGJpdCwgdmFsdWUuICBXaGVuIGJvdGggaG9zdCBhbmQKK3RhcmdldCBhcmUgMzIgYml0cywgYW4gZXhwcmVzc2lvbiBpcyBjb21wdXRlZCBhcyAzMiBiaXRzLiAgSW4gdGhpcyBjYXNlCis8Y29kZT5RVUFEPC9jb2RlPiBzdG9yZXMgYSAzMiBiaXQgdmFsdWUgemVybyBleHRlbmRlZCB0byA2NCBiaXRzLCBhbmQKKzxjb2RlPlNRVUFEPC9jb2RlPiBzdG9yZXMgYSAzMiBiaXQgdmFsdWUgc2lnbiBleHRlbmRlZCB0byA2NCBiaXRzLgorCisgICA8cD5JZiB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0IG9mIHRoZSBvdXRwdXQgZmlsZSBoYXMgYW4gZXhwbGljaXQgZW5kaWFubmVzcywKK3doaWNoIGlzIHRoZSBub3JtYWwgY2FzZSwgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoYXQgZW5kaWFubmVzcy4gCitXaGVuIHRoZSBvYmplY3QgZmlsZSBmb3JtYXQgZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCBlbmRpYW5uZXNzLCBhcyBpcwordHJ1ZSBvZiwgZm9yIGV4YW1wbGUsIFMtcmVjb3JkcywgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGluIHRoZQorZW5kaWFubmVzcyBvZiB0aGUgZmlyc3QgaW5wdXQgb2JqZWN0IGZpbGUuCisKKyAgIDxwPk5vdGUmbWRhc2g7dGhlc2UgY29tbWFuZHMgb25seSB3b3JrIGluc2lkZSBhIHNlY3Rpb24gZGVzY3JpcHRpb24gYW5kIG5vdAorYmV0d2VlbiB0aGVtLCBzbyB0aGUgZm9sbG93aW5nIHdpbGwgcHJvZHVjZSBhbiBlcnJvciBmcm9tIHRoZSBsaW5rZXI6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMgeyAudGV4dCA6IHsgKigudGV4dCkgfSBMT05HKDEpIC5kYXRhIDogeyAqKC5kYXRhKSB9IH08L3ByZT4KKyAgIDxwPndoZXJlYXMgdGhpcyB3aWxsIHdvcms6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMgeyAudGV4dCA6IHsgKigudGV4dCkgOyBMT05HKDEpIH0gLmRhdGEgOiB7ICooLmRhdGEpIH0gfTwvcHJlPgorICAgPHA+PGEgbmFtZT0iaW5kZXgtRklMTF8wMDI4XzAwNDB2YXJfMDA3YmV4cHJlc3Npb25fMDA3ZF8wMDI5LTQzMSI+PC9hPjxhIG5hbWU9ImluZGV4LWhvbGVzXzAwMmMtZmlsbGluZy00MzIiPjwvYT48YSBuYW1lPSJpbmRleC11bnNwZWNpZmllZC1tZW1vcnktNDMzIj48L2E+WW91IG1heSB1c2UgdGhlIDxjb2RlPkZJTEw8L2NvZGU+IGNvbW1hbmQgdG8gc2V0IHRoZSBmaWxsIHBhdHRlcm4gZm9yIHRoZQorY3VycmVudCBzZWN0aW9uLiAgSXQgaXMgZm9sbG93ZWQgYnkgYW4gZXhwcmVzc2lvbiBpbiBwYXJlbnRoZXNlcy4gIEFueQorb3RoZXJ3aXNlIHVuc3BlY2lmaWVkIHJlZ2lvbnMgb2YgbWVtb3J5IHdpdGhpbiB0aGUgc2VjdGlvbiAoZm9yIGV4YW1wbGUsCitnYXBzIGxlZnQgZHVlIHRvIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQgb2YgaW5wdXQgc2VjdGlvbnMpIGFyZSBmaWxsZWQKK3dpdGggdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLCByZXBlYXRlZCBhcworbmVjZXNzYXJ5LiAgQSA8Y29kZT5GSUxMPC9jb2RlPiBzdGF0ZW1lbnQgY292ZXJzIG1lbW9yeSBsb2NhdGlvbnMgYWZ0ZXIgdGhlCitwb2ludCBhdCB3aGljaCBpdCBvY2N1cnMgaW4gdGhlIHNlY3Rpb24gZGVmaW5pdGlvbjsgYnkgaW5jbHVkaW5nIG1vcmUKK3RoYW4gb25lIDxjb2RlPkZJTEw8L2NvZGU+IHN0YXRlbWVudCwgeW91IGNhbiBoYXZlIGRpZmZlcmVudCBmaWxsIHBhdHRlcm5zIGluCitkaWZmZXJlbnQgcGFydHMgb2YgYW4gb3V0cHV0IHNlY3Rpb24uCisKKyAgIDxwPlRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gZmlsbCB1bnNwZWNpZmllZCByZWdpb25zIG9mIG1lbW9yeSB3aXRoIHRoZQordmFsdWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4weDkwPC9zcGFuPjwvc2FtcD4mcnNxdW87OgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIEZJTEwoMHg5MDkwOTA5MCkKKzwvcHJlPgorICAgPHA+VGhlIDxjb2RlPkZJTEw8L2NvZGU+IGNvbW1hbmQgaXMgc2ltaWxhciB0byB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjx2YXI+ZmlsbGV4cDwvdmFyPjwvc2FtcD4mcnNxdW87IG91dHB1dAorc2VjdGlvbiBhdHRyaWJ1dGUsIGJ1dCBpdCBvbmx5IGFmZmVjdHMgdGhlCitwYXJ0IG9mIHRoZSBzZWN0aW9uIGZvbGxvd2luZyB0aGUgPGNvZGU+RklMTDwvY29kZT4gY29tbWFuZCwgcmF0aGVyIHRoYW4gdGhlCitlbnRpcmUgc2VjdGlvbi4gIElmIGJvdGggYXJlIHVzZWQsIHRoZSA8Y29kZT5GSUxMPC9jb2RlPiBjb21tYW5kIHRha2VzCitwcmVjZWRlbmNlLiAgU2VlIDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUZpbGwuaHRtbCNPdXRwdXQtU2VjdGlvbi1GaWxsIj5PdXRwdXQgU2VjdGlvbiBGaWxsPC9hPiwgZm9yIGRldGFpbHMgb24gdGhlIGZpbGwKK2V4cHJlc3Npb24uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLURlc2NyaXB0aW9uLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1EZXNjcmlwdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDYyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1EZXNjcmlwdGlvbi5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk91dHB1dCBTZWN0aW9uIERlc2NyaXB0aW9uIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTRUNUSU9OUy5odG1sI1NFQ1RJT05TIiB0aXRsZT0iU0VDVElPTlMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1OYW1lLmh0bWwjT3V0cHV0LVNlY3Rpb24tTmFtZSIgdGl0bGU9Ik91dHB1dCBTZWN0aW9uIE5hbWUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik91dHB1dC1TZWN0aW9uLURlc2NyaXB0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik91dHB1dC1TZWN0aW9uLU5hbWUuaHRtbCNPdXRwdXQtU2VjdGlvbi1OYW1lIj5PdXRwdXQgU2VjdGlvbiBOYW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyI+U0VDVElPTlM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjYuMSBPdXRwdXQgU2VjdGlvbiBEZXNjcmlwdGlvbjwvaDQ+CisKKzxwPlRoZSBmdWxsIGRlc2NyaXB0aW9uIG9mIGFuIG91dHB1dCBzZWN0aW9uIGxvb2tzIGxpa2UgdGhpczoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICA8dmFyPnNlY3Rpb248L3Zhcj4gWzx2YXI+YWRkcmVzczwvdmFyPl0gWyg8dmFyPnR5cGU8L3Zhcj4pXSA6CisgICAgICAgW0FUKDx2YXI+bG1hPC92YXI+KV0KKyAgICAgICBbQUxJR04oPHZhcj5zZWN0aW9uX2FsaWduPC92YXI+KV0KKyAgICAgICBbU1VCQUxJR04oPHZhcj5zdWJzZWN0aW9uX2FsaWduPC92YXI+KV0KKyAgICAgICBbPHZhcj5jb25zdHJhaW50PC92YXI+XQorICAgICAgIHsKKyAgICAgICAgIDx2YXI+b3V0cHV0LXNlY3Rpb24tY29tbWFuZDwvdmFyPgorICAgICAgICAgPHZhcj5vdXRwdXQtc2VjdGlvbi1jb21tYW5kPC92YXI+CisgICAgICAgICAuLi4KKyAgICAgICB9IFsmZ3Q7PHZhcj5yZWdpb248L3Zhcj5dIFtBVCZndDs8dmFyPmxtYV9yZWdpb248L3Zhcj5dIFs6PHZhcj5waGRyPC92YXI+IDo8dmFyPnBoZHI8L3Zhcj4gLi4uXSBbPTx2YXI+ZmlsbGV4cDwvdmFyPl0KKzwvcHJlPgorICAgPHA+TW9zdCBvdXRwdXQgc2VjdGlvbnMgZG8gbm90IHVzZSBtb3N0IG9mIHRoZSBvcHRpb25hbCBzZWN0aW9uIGF0dHJpYnV0ZXMuCisKKyAgIDxwPlRoZSB3aGl0ZXNwYWNlIGFyb3VuZCA8dmFyPnNlY3Rpb248L3Zhcj4gaXMgcmVxdWlyZWQsIHNvIHRoYXQgdGhlIHNlY3Rpb24KK25hbWUgaXMgdW5hbWJpZ3VvdXMuICBUaGUgY29sb24gYW5kIHRoZSBjdXJseSBicmFjZXMgYXJlIGFsc28gcmVxdWlyZWQuIAorVGhlIGxpbmUgYnJlYWtzIGFuZCBvdGhlciB3aGl0ZSBzcGFjZSBhcmUgb3B0aW9uYWwuCisKKyAgIDxwPkVhY2ggPHZhcj5vdXRwdXQtc2VjdGlvbi1jb21tYW5kPC92YXI+IG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICA8dWw+Cis8bGk+YSBzeW1ib2wgYXNzaWdubWVudCAoc2VlIDxhIGhyZWY9IkFzc2lnbm1lbnRzLmh0bWwjQXNzaWdubWVudHMiPkFzc2lnbm1lbnRzPC9hPikKKzxsaT5hbiBpbnB1dCBzZWN0aW9uIGRlc2NyaXB0aW9uIChzZWUgPGEgaHJlZj0iSW5wdXQtU2VjdGlvbi5odG1sI0lucHV0LVNlY3Rpb24iPklucHV0IFNlY3Rpb248L2E+KQorPGxpPmRhdGEgdmFsdWVzIHRvIGluY2x1ZGUgZGlyZWN0bHkgKHNlZSA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1EYXRhLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGF0YSI+T3V0cHV0IFNlY3Rpb24gRGF0YTwvYT4pCis8bGk+YSBzcGVjaWFsIG91dHB1dCBzZWN0aW9uIGtleXdvcmQgKHNlZSA8YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI091dHB1dC1TZWN0aW9uLUtleXdvcmRzIj5PdXRwdXQgU2VjdGlvbiBLZXl3b3JkczwvYT4pCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmZTNjZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLURpc2NhcmRpbmcuaHRtbApAQCAtMCwwICsxLDczIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PdXRwdXQgU2VjdGlvbiBEaXNjYXJkaW5nIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTRUNUSU9OUy5odG1sI1NFQ1RJT05TIiB0aXRsZT0iU0VDVElPTlMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI091dHB1dC1TZWN0aW9uLUtleXdvcmRzIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gS2V5d29yZHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyIgdGl0bGU9Ik91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik91dHB1dC1TZWN0aW9uLURpc2NhcmRpbmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiPk91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI091dHB1dC1TZWN0aW9uLUtleXdvcmRzIj5PdXRwdXQgU2VjdGlvbiBLZXl3b3JkczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiPlNFQ1RJT05TPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My42LjcgT3V0cHV0IFNlY3Rpb24gRGlzY2FyZGluZzwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRpc2NhcmRpbmctc2VjdGlvbnMtNDQwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbnNfMDAyYy1kaXNjYXJkaW5nLTQ0MSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbW92aW5nLXNlY3Rpb25zLTQ0MiI+PC9hPlRoZSBsaW5rZXIgd2lsbCBub3QgY3JlYXRlIG91dHB1dCBzZWN0aW9ucyB3aXRoIG5vIGNvbnRlbnRzLiAgVGhpcyBpcworZm9yIGNvbnZlbmllbmNlIHdoZW4gcmVmZXJyaW5nIHRvIGlucHV0IHNlY3Rpb25zIHRoYXQgbWF5IG9yIG1heSBub3QKK2JlIHByZXNlbnQgaW4gYW55IG9mIHRoZSBpbnB1dCBmaWxlcy4gIEZvciBleGFtcGxlOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIC5mb28gOiB7ICooLmZvbykgfQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPndpbGwgb25seSBjcmVhdGUgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiBpbiB0aGUgb3V0cHV0IGZpbGUgaWYgdGhlcmUgaXMgYQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24gaW4gYXQgbGVhc3Qgb25lIGlucHV0IGZpbGUsIGFuZCBpZiB0aGUgaW5wdXQKK3NlY3Rpb25zIGFyZSBub3QgYWxsIGVtcHR5LiAgT3RoZXIgbGluayBzY3JpcHQgZGlyZWN0aXZlcyB0aGF0IGFsbG9jYXRlCitzcGFjZSBpbiBhbiBvdXRwdXQgc2VjdGlvbiB3aWxsIGFsc28gY3JlYXRlIHRoZSBvdXRwdXQgc2VjdGlvbi4KKworICAgPHA+VGhlIGxpbmtlciB3aWxsIGlnbm9yZSBhZGRyZXNzIGFzc2lnbm1lbnRzIChzZWUgPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQWRkcmVzcy5odG1sI091dHB1dC1TZWN0aW9uLUFkZHJlc3MiPk91dHB1dCBTZWN0aW9uIEFkZHJlc3M8L2E+KQorb24gZGlzY2FyZGVkIG91dHB1dCBzZWN0aW9ucywgZXhjZXB0IHdoZW4gdGhlIGxpbmtlciBzY3JpcHQgZGVmaW5lcworc3ltYm9scyBpbiB0aGUgb3V0cHV0IHNlY3Rpb24uICBJbiB0aGF0IGNhc2UgdGhlIGxpbmtlciB3aWxsIG9iZXkKK3RoZSBhZGRyZXNzIGFzc2lnbm1lbnRzLCBwb3NzaWJseSBhZHZhbmNpbmcgZG90IGV2ZW4gdGhvdWdoIHRoZQorc2VjdGlvbiBpcyBkaXNjYXJkZWQuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJmRElTQ0FSRF8wMDJmLTQ0MyI+PC9hPlRoZSBzcGVjaWFsIG91dHB1dCBzZWN0aW9uIG5hbWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vRElTQ0FSRC88L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWF5IGJlIHVzZWQgdG8gZGlzY2FyZAoraW5wdXQgc2VjdGlvbnMuICBBbnkgaW5wdXQgc2VjdGlvbnMgd2hpY2ggYXJlIGFzc2lnbmVkIHRvIGFuIG91dHB1dAorc2VjdGlvbiBuYW1lZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi9ESVNDQVJELzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZS4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tRmlsbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tRmlsbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OTY5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1GaWxsLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3V0cHV0IFNlY3Rpb24gRmlsbCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBBdHRyaWJ1dGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUGhkci5odG1sI091dHB1dC1TZWN0aW9uLVBoZHIiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBQaGRyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPdXRwdXQtU2VjdGlvbi1GaWxsIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUGhkci5odG1sI091dHB1dC1TZWN0aW9uLVBoZHIiPk91dHB1dCBTZWN0aW9uIFBoZHI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyI+T3V0cHV0IFNlY3Rpb24gQXR0cmlidXRlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjMuNi44LjggT3V0cHV0IFNlY3Rpb24gRmlsbDwvaDU+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdfdF8wMDNkXzAwNDB2YXJfMDA3YmZpbGxleHBfMDA3ZC00NjkiPjwvYT48YSBuYW1lPSJpbmRleC1zZWN0aW9uLWZpbGwtcGF0dGVybi00NzAiPjwvYT48YSBuYW1lPSJpbmRleC1maWxsLXBhdHRlcm5fMDAyYy1lbnRpcmUtc2VjdGlvbi00NzEiPjwvYT5Zb3UgY2FuIHNldCB0aGUgZmlsbCBwYXR0ZXJuIGZvciBhbiBlbnRpcmUgc2VjdGlvbiBieSB1c2luZworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj49PC9zcGFuPjx2YXI+ZmlsbGV4cDwvdmFyPjwvc2FtcD4mcnNxdW87LiAgPHZhcj5maWxsZXhwPC92YXI+IGlzIGFuIGV4cHJlc3Npb24KKyhzZWUgPGEgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+KS4gIEFueSBvdGhlcndpc2UgdW5zcGVjaWZpZWQgcmVnaW9ucyBvZiBtZW1vcnkKK3dpdGhpbiB0aGUgb3V0cHV0IHNlY3Rpb24gKGZvciBleGFtcGxlLCBnYXBzIGxlZnQgZHVlIHRvIHRoZSByZXF1aXJlZAorYWxpZ25tZW50IG9mIGlucHV0IHNlY3Rpb25zKSB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZSwgcmVwZWF0ZWQgYXMKK25lY2Vzc2FyeS4gIElmIHRoZSBmaWxsIGV4cHJlc3Npb24gaXMgYSBzaW1wbGUgaGV4IG51bWJlciwgaWUuIGEgc3RyaW5nCitvZiBoZXggZGlnaXQgc3RhcnRpbmcgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCB3aXRob3V0IGEgdHJhaWxpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5rPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+TTwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlbgorYW4gYXJiaXRyYXJpbHkgbG9uZyBzZXF1ZW5jZSBvZiBoZXggZGlnaXRzIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlCitmaWxsIHBhdHRlcm47ICBMZWFkaW5nIHplcm9zIGJlY29tZSBwYXJ0IG9mIHRoZSBwYXR0ZXJuIHRvby4gIEZvciBhbGwKK290aGVyIGNhc2VzLCBpbmNsdWRpbmcgZXh0cmEgcGFyZW50aGVzZXMgb3IgYSB1bmFyeSA8Y29kZT4rPC9jb2RlPiwgdGhlIGZpbGwKK3BhdHRlcm4gaXMgdGhlIGZvdXIgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZXMgb2YgdGhlIHZhbHVlIG9mIHRoZQorZXhwcmVzc2lvbi4gIEluIGFsbCBjYXNlcywgdGhlIG51bWJlciBpcyBiaWctZW5kaWFuLgorCisgICA8cD5Zb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBmaWxsIHZhbHVlIHdpdGggYSA8Y29kZT5GSUxMPC9jb2RlPiBjb21tYW5kIGluIHRoZQorb3V0cHV0IHNlY3Rpb24gY29tbWFuZHM7IChzZWUgPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI091dHB1dC1TZWN0aW9uLURhdGEiPk91dHB1dCBTZWN0aW9uIERhdGE8L2E+KS4KKworICAgPHA+SGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFNFQ1RJT05TIHsgLnRleHQgOiB7ICooLnRleHQpIH0gPTB4OTA5MDkwOTAgfQorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg1OGZlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMuaHRtbApAQCAtMCwwICsxLDEyNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+T3V0cHV0IFNlY3Rpb24gS2V5d29yZHMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiIHRpdGxlPSJTRUNUSU9OUyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURhdGEuaHRtbCNPdXRwdXQtU2VjdGlvbi1EYXRhIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gRGF0YSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURpc2NhcmRpbmcuaHRtbCNPdXRwdXQtU2VjdGlvbi1EaXNjYXJkaW5nIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gRGlzY2FyZGluZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZy5odG1sI091dHB1dC1TZWN0aW9uLURpc2NhcmRpbmciPk91dHB1dCBTZWN0aW9uIERpc2NhcmRpbmc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1EYXRhLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGF0YSI+T3V0cHV0IFNlY3Rpb24gRGF0YTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiPlNFQ1RJT05TPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My42LjYgT3V0cHV0IFNlY3Rpb24gS2V5d29yZHM8L2g0PgorCis8cD5UaGVyZSBhcmUgYSBjb3VwbGUgb2Yga2V5d29yZHMgd2hpY2ggY2FuIGFwcGVhciBhcyBvdXRwdXQgc2VjdGlvbgorY29tbWFuZHMuCisKKyAgICAgCis8YSBuYW1lPSJpbmRleC1DUkVBVEVfMDA1Zk9CSkVDVF8wMDVmU1lNQk9MUy00MzQiPjwvYT4KKzxhIG5hbWU9ImluZGV4LWlucHV0LWZpbGVuYW1lLXN5bWJvbHMtNDM1Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1maWxlbmFtZS1zeW1ib2xzLTQzNiI+PC9hPgorPGRsPjxkdD48Y29kZT5DUkVBVEVfT0JKRUNUX1NZTUJPTFM8L2NvZGU+PGRkPlRoZSBjb21tYW5kIHRlbGxzIHRoZSBsaW5rZXIgdG8gY3JlYXRlIGEgc3ltYm9sIGZvciBlYWNoIGlucHV0IGZpbGUuIAorVGhlIG5hbWUgb2YgZWFjaCBzeW1ib2wgd2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnB1dAorZmlsZS4gIFRoZSBzZWN0aW9uIG9mIGVhY2ggc3ltYm9sIHdpbGwgYmUgdGhlIG91dHB1dCBzZWN0aW9uIGluIHdoaWNoCit0aGUgPGNvZGU+Q1JFQVRFX09CSkVDVF9TWU1CT0xTPC9jb2RlPiBjb21tYW5kIGFwcGVhcnMuCisKKyAgICAgPHA+VGhpcyBpcyBjb252ZW50aW9uYWwgZm9yIHRoZSBhLm91dCBvYmplY3QgZmlsZSBmb3JtYXQuICBJdCBpcyBub3QKK25vcm1hbGx5IHVzZWQgZm9yIGFueSBvdGhlciBvYmplY3QgZmlsZSBmb3JtYXQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtQ09OU1RSVUNUT1JTLTQzNyI+PC9hPjxhIG5hbWU9ImluZGV4LUNfMDAyYl8wMDJiLWNvbnN0cnVjdG9yc18wMDJjLWFycmFuZ2luZy1pbi1saW5rLTQzOCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbnN0cnVjdG9yc18wMDJjLWFycmFuZ2luZy1pbi1saW5rLTQzOSI+PC9hPjxicj48ZHQ+PGNvZGU+Q09OU1RSVUNUT1JTPC9jb2RlPjxkZD5XaGVuIGxpbmtpbmcgdXNpbmcgdGhlIGEub3V0IG9iamVjdCBmaWxlIGZvcm1hdCwgdGhlIGxpbmtlciB1c2VzIGFuCit1bnVzdWFsIHNldCBjb25zdHJ1Y3QgdG8gc3VwcG9ydCBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycyBhbmQKK2Rlc3RydWN0b3JzLiAgV2hlbiBsaW5raW5nIG9iamVjdCBmaWxlIGZvcm1hdHMgd2hpY2ggZG8gbm90IHN1cHBvcnQKK2FyYml0cmFyeSBzZWN0aW9ucywgc3VjaCBhcyBFQ09GRiBhbmQgWENPRkYsIHRoZSBsaW5rZXIgd2lsbAorYXV0b21hdGljYWxseSByZWNvZ25pemUgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGJ5IG5hbWUuIAorRm9yIHRoZXNlIG9iamVjdCBmaWxlIGZvcm1hdHMsIHRoZSA8Y29kZT5DT05TVFJVQ1RPUlM8L2NvZGU+IGNvbW1hbmQgdGVsbHMgdGhlCitsaW5rZXIgdG8gcGxhY2UgY29uc3RydWN0b3IgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBzZWN0aW9uIHdoZXJlIHRoZQorPGNvZGU+Q09OU1RSVUNUT1JTPC9jb2RlPiBjb21tYW5kIGFwcGVhcnMuICBUaGUgPGNvZGU+Q09OU1RSVUNUT1JTPC9jb2RlPiBjb21tYW5kIGlzCitpZ25vcmVkIGZvciBvdGhlciBvYmplY3QgZmlsZSBmb3JtYXRzLgorCisgICAgIDxwPlRoZSBzeW1ib2wgPGNvZGU+X19DVE9SX0xJU1RfXzwvY29kZT48IS0tIC9AdyAtLT4gbWFya3MgdGhlIHN0YXJ0IG9mIHRoZSBnbG9iYWwKK2NvbnN0cnVjdG9ycywgYW5kIHRoZSBzeW1ib2wgPGNvZGU+X19DVE9SX0VORF9fPC9jb2RlPjwhLS0gL0B3IC0tPiBtYXJrcyB0aGUgZW5kLiAKK1NpbWlsYXJseSwgPGNvZGU+X19EVE9SX0xJU1RfXzwvY29kZT48IS0tIC9AdyAtLT4gYW5kIDxjb2RlPl9fRFRPUl9FTkRfXzwvY29kZT48IS0tIC9AdyAtLT4gbWFyawordGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGdsb2JhbCBkZXN0cnVjdG9ycy4gIFRoZQorZmlyc3Qgd29yZCBpbiB0aGUgbGlzdCBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMsIGZvbGxvd2VkIGJ5IHRoZSBhZGRyZXNzCitvZiBlYWNoIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3IsIGZvbGxvd2VkIGJ5IGEgemVybyB3b3JkLiAgVGhlCitjb21waWxlciBtdXN0IGFycmFuZ2UgdG8gYWN0dWFsbHkgcnVuIHRoZSBjb2RlLiAgRm9yIHRoZXNlIG9iamVjdCBmaWxlCitmb3JtYXRzIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBDKysgbm9ybWFsbHkgY2FsbHMgY29uc3RydWN0b3JzIGZyb20gYSBzdWJyb3V0aW5lCis8Y29kZT5fX21haW48L2NvZGU+OyBhIGNhbGwgdG8gPGNvZGU+X19tYWluPC9jb2RlPiBpcyBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGludG8KK3RoZSBzdGFydHVwIGNvZGUgZm9yIDxjb2RlPm1haW48L2NvZGU+LiAgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IEMrKyBub3JtYWxseSBydW5zCitkZXN0cnVjdG9ycyBlaXRoZXIgYnkgdXNpbmcgPGNvZGU+YXRleGl0PC9jb2RlPiwgb3IgZGlyZWN0bHkgZnJvbSB0aGUgZnVuY3Rpb24KKzxjb2RlPmV4aXQ8L2NvZGU+LgorCisgICAgIDxwPkZvciBvYmplY3QgZmlsZSBmb3JtYXRzIHN1Y2ggYXMgPGNvZGU+Q09GRjwvY29kZT4gb3IgPGNvZGU+RUxGPC9jb2RlPiB3aGljaCBzdXBwb3J0CithcmJpdHJhcnkgc2VjdGlvbiBuYW1lcywgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IEMrKyB3aWxsIG5vcm1hbGx5IGFycmFuZ2UgdG8gcHV0IHRoZQorYWRkcmVzc2VzIG9mIGdsb2JhbCBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGludG8gdGhlIDxjb2RlPi5jdG9yczwvY29kZT4KK2FuZCA8Y29kZT4uZHRvcnM8L2NvZGU+IHNlY3Rpb25zLiAgUGxhY2luZyB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIGludG8geW91cgorbGlua2VyIHNjcmlwdCB3aWxsIGJ1aWxkIHRoZSBzb3J0IG9mIHRhYmxlIHdoaWNoIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gQysrCitydW50aW1lIGNvZGUgZXhwZWN0cyB0byBzZWUuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAgICAgX19DVE9SX0xJU1RfXyA9IC47CisgICAgICAgICAgICAgICAgTE9ORygoX19DVE9SX0VORF9fIC0gX19DVE9SX0xJU1RfXykgLyA0IC0gMikKKyAgICAgICAgICAgICAgICAqKC5jdG9ycykKKyAgICAgICAgICAgICAgICBMT05HKDApCisgICAgICAgICAgICAgICAgX19DVE9SX0VORF9fID0gLjsKKyAgICAgICAgICAgICAgICBfX0RUT1JfTElTVF9fID0gLjsKKyAgICAgICAgICAgICAgICBMT05HKChfX0RUT1JfRU5EX18gLSBfX0RUT1JfTElTVF9fKSAvIDQgLSAyKQorICAgICAgICAgICAgICAgICooLmR0b3JzKQorICAgICAgICAgICAgICAgIExPTkcoMCkKKyAgICAgICAgICAgICAgICBfX0RUT1JfRU5EX18gPSAuOworPC9wcmU+CisgICAgIDxwPklmIHlvdSBhcmUgdXNpbmcgdGhlIDxzcGFuIGNsYXNzPSJzYyI+Z251PC9zcGFuPiBDKysgc3VwcG9ydCBmb3IgaW5pdGlhbGl6YXRpb24gcHJpb3JpdHksCit3aGljaCBwcm92aWRlcyBzb21lIGNvbnRyb2wgb3ZlciB0aGUgb3JkZXIgaW4gd2hpY2ggZ2xvYmFsIGNvbnN0cnVjdG9ycworYXJlIHJ1biwgeW91IG11c3Qgc29ydCB0aGUgY29uc3RydWN0b3JzIGF0IGxpbmsgdGltZSB0byBlbnN1cmUgdGhhdCB0aGV5CithcmUgZXhlY3V0ZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuICBXaGVuIHVzaW5nIHRoZSA8Y29kZT5DT05TVFJVQ1RPUlM8L2NvZGU+Citjb21tYW5kLCB1c2UgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TT1JUX0JZX05BTUUoQ09OU1RSVUNUT1JTKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkLiAgV2hlbiB1c2luZyB0aGUKKzxjb2RlPi5jdG9yczwvY29kZT4gYW5kIDxjb2RlPi5kdG9yczwvY29kZT4gc2VjdGlvbnMsIHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiooU09SVF9CWV9OQU1FKC5jdG9ycykpPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qKFNPUlRfQllfTkFNRSguZHRvcnMpKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnN0ZWFkIG9mIGp1c3QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qKC5jdG9ycyk8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiooLmR0b3JzKTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICA8cD5Ob3JtYWxseSB0aGUgY29tcGlsZXIgYW5kIGxpbmtlciB3aWxsIGhhbmRsZSB0aGVzZSBpc3N1ZXMgYXV0b21hdGljYWxseSwKK2FuZCB5b3Ugd2lsbCBub3QgbmVlZCB0byBjb25jZXJuIHlvdXJzZWxmIHdpdGggdGhlbS4gIEhvd2V2ZXIsIHlvdSBtYXkKK25lZWQgdG8gY29uc2lkZXIgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEMrKyBhbmQgd3JpdGluZyB5b3VyIG93biBsaW5rZXIKK3NjcmlwdHMuCisKKyAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLUxNQS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tTE1BLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMxOTM1NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLUxNQS5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PdXRwdXQgU2VjdGlvbiBMTUEgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gQXR0cmlidXRlcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLVR5cGUuaHRtbCNPdXRwdXQtU2VjdGlvbi1UeXBlIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gVHlwZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkZvcmNlZC1PdXRwdXQtQWxpZ25tZW50Lmh0bWwjRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQiIHRpdGxlPSJGb3JjZWQgT3V0cHV0IEFsaWdubWVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3V0cHV0LVNlY3Rpb24tTE1BIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkZvcmNlZC1PdXRwdXQtQWxpZ25tZW50Lmh0bWwjRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQiPkZvcmNlZCBPdXRwdXQgQWxpZ25tZW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tVHlwZS5odG1sI091dHB1dC1TZWN0aW9uLVR5cGUiPk91dHB1dCBTZWN0aW9uIFR5cGU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyI+T3V0cHV0IFNlY3Rpb24gQXR0cmlidXRlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjMuNi44LjIgT3V0cHV0IFNlY3Rpb24gTE1BPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtQVRfMDAzZV8wMDQwdmFyXzAwN2JsbWFfMDA1ZnJlZ2lvbl8wMDdkLTQ0OCI+PC9hPjxhIG5hbWU9ImluZGV4LUFUXzAwMjhfMDA0MHZhcl8wMDdibG1hXzAwN2RfMDAyOS00NDkiPjwvYT48YSBuYW1lPSJpbmRleC1sb2FkLWFkZHJlc3MtNDUwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbi1sb2FkLWFkZHJlc3MtNDUxIj48L2E+RXZlcnkgc2VjdGlvbiBoYXMgYSB2aXJ0dWFsIGFkZHJlc3MgKFZNQSkgYW5kIGEgbG9hZCBhZGRyZXNzIChMTUEpOyBzZWUKKzxhIGhyZWY9IkJhc2ljLVNjcmlwdC1Db25jZXB0cy5odG1sI0Jhc2ljLVNjcmlwdC1Db25jZXB0cyI+QmFzaWMgU2NyaXB0IENvbmNlcHRzPC9hPi4gIFRoZSB2aXJ0dWFsIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGJ5IHRoZQorc2VlIDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUFkZHJlc3MuaHRtbCNPdXRwdXQtU2VjdGlvbi1BZGRyZXNzIj5PdXRwdXQgU2VjdGlvbiBBZGRyZXNzPC9hPiBkZXNjcmliZWQgZWFybGllci4gIFRoZSBsb2FkIGFkZHJlc3MgaXMKK3NwZWNpZmllZCBieSB0aGUgPGNvZGU+QVQ8L2NvZGU+IG9yIDxjb2RlPkFUJmd0OzwvY29kZT4ga2V5d29yZHMuICBTcGVjaWZ5aW5nIGEgbG9hZAorYWRkcmVzcyBpcyBvcHRpb25hbC4KKworICAgPHA+VGhlIDxjb2RlPkFUPC9jb2RlPiBrZXl3b3JkIHRha2VzIGFuIGV4cHJlc3Npb24gYXMgYW4gYXJndW1lbnQuICBUaGlzCitzcGVjaWZpZXMgdGhlIGV4YWN0IGxvYWQgYWRkcmVzcyBvZiB0aGUgc2VjdGlvbi4gIFRoZSA8Y29kZT5BVCZndDs8L2NvZGU+IGtleXdvcmQKK3Rha2VzIHRoZSBuYW1lIG9mIGEgbWVtb3J5IHJlZ2lvbiBhcyBhbiBhcmd1bWVudC4gIFNlZSA8YSBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiPk1FTU9SWTwvYT4uICBUaGUKK2xvYWQgYWRkcmVzcyBvZiB0aGUgc2VjdGlvbiBpcyBzZXQgdG8gdGhlIG5leHQgZnJlZSBhZGRyZXNzIGluIHRoZQorcmVnaW9uLCBhbGlnbmVkIHRvIHRoZSBzZWN0aW9uJ3MgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4KKworICAgPHA+SWYgbmVpdGhlciA8Y29kZT5BVDwvY29kZT4gbm9yIDxjb2RlPkFUJmd0OzwvY29kZT4gaXMgc3BlY2lmaWVkIGZvciBhbiBhbGxvY2F0YWJsZQorc2VjdGlvbiwgdGhlIGxpbmtlciB3aWxsIHVzZSB0aGUgZm9sbG93aW5nIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgdGhlCitsb2FkIGFkZHJlc3M6CisKKyAgICAgPHVsPgorPGxpPklmIHRoZSBzZWN0aW9uIGhhcyBhIHNwZWNpZmljIFZNQSBhZGRyZXNzLCB0aGVuIHRoaXMgaXMgdXNlZCBhcwordGhlIExNQSBhZGRyZXNzIGFzIHdlbGwuCisKKyAgICAgPGxpPklmIHRoZSBzZWN0aW9uIGlzIG5vdCBhbGxvY2F0YWJsZSB0aGVuIGl0cyBMTUEgaXMgc2V0IHRvIGl0cyBWTUEuCisKKyAgICAgPGxpPk90aGVyd2lzZSBpZiBhIG1lbW9yeSByZWdpb24gY2FuIGJlIGZvdW5kIHRoYXQgaXMgY29tcGF0aWJsZQord2l0aCB0aGUgY3VycmVudCBzZWN0aW9uLCBhbmQgdGhpcyByZWdpb24gY29udGFpbnMgYXQgbGVhc3Qgb25lCitzZWN0aW9uLCB0aGVuIHRoZSBMTUEgaXMgc2V0IHNvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCitWTUEgYW5kIExNQSBpcyB0aGUgc2FtZSBhcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBWTUEgYW5kIExNQSBvZgordGhlIGxhc3Qgc2VjdGlvbiBpbiB0aGUgbG9jYXRlZCByZWdpb24uCisKKyAgICAgPGxpPklmIG5vIG1lbW9yeSByZWdpb25zIGhhdmUgYmVlbiBkZWNsYXJlZCB0aGVuIGEgZGVmYXVsdCByZWdpb24KK3RoYXQgY292ZXJzIHRoZSBlbnRpcmUgYWRkcmVzcyBzcGFjZSBpcyB1c2VkIGluIHRoZSBwcmV2aW91cyBzdGVwLgorCisgICAgIDxsaT5JZiBubyBzdWl0YWJsZSByZWdpb24gY291bGQgYmUgZm91bmQsIG9yIHRoZXJlIHdhcyBubyBwcmV2aW91cworc2VjdGlvbiB0aGVuIHRoZSBMTUEgaXMgc2V0IGVxdWFsIHRvIHRoZSBWTUEuIAorPC91bD4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtUk9NLWluaXRpYWxpemVkLWRhdGEtNDUyIj48L2E+PGEgbmFtZT0iaW5kZXgtaW5pdGlhbGl6ZWQtZGF0YS1pbi1ST00tNDUzIj48L2E+VGhpcyBmZWF0dXJlIGlzIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzeSB0byBidWlsZCBhIFJPTSBpbWFnZS4gIEZvcgorZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBsaW5rZXIgc2NyaXB0IGNyZWF0ZXMgdGhyZWUgb3V0cHV0IHNlY3Rpb25zOiBvbmUKK2NhbGxlZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCB3aGljaCBzdGFydHMgYXQgPGNvZGU+MHgxMDAwPC9jb2RlPiwgb25lIGNhbGxlZAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4ubWRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdoaWNoIGlzIGxvYWRlZCBhdCB0aGUgZW5kIG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb24KK2V2ZW4gdGhvdWdoIGl0cyBWTUEgaXMgPGNvZGU+MHgyMDAwPC9jb2RlPiwgYW5kIG9uZSBjYWxsZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYnNzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGhvbGQKK3VuaW5pdGlhbGl6ZWQgZGF0YSBhdCBhZGRyZXNzIDxjb2RlPjB4MzAwMDwvY29kZT4uICBUaGUgc3ltYm9sIDxjb2RlPl9kYXRhPC9jb2RlPiBpcworZGVmaW5lZCB3aXRoIHRoZSB2YWx1ZSA8Y29kZT4weDIwMDA8L2NvZGU+LCB3aGljaCBzaG93cyB0aGF0IHRoZSBsb2NhdGlvbgorY291bnRlciBob2xkcyB0aGUgVk1BIHZhbHVlLCBub3QgdGhlIExNQSB2YWx1ZS4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFNFQ1RJT05TCisgICAgICAgeworICAgICAgIC50ZXh0IDB4MTAwMCA6IHsgKigudGV4dCkgX2V0ZXh0ID0gLiA7IH0KKyAgICAgICAubWRhdGEgMHgyMDAwIDoKKyAgICAgICAgIEFUICggQUREUiAoLnRleHQpICsgU0laRU9GICgudGV4dCkgKQorICAgICAgICAgeyBfZGF0YSA9IC4gOyAqKC5kYXRhKTsgX2VkYXRhID0gLiA7ICB9CisgICAgICAgLmJzcyAweDMwMDAgOgorICAgICAgICAgeyBfYnN0YXJ0ID0gLiA7ICAqKC5ic3MpICooQ09NTU9OKSA7IF9iZW5kID0gLiA7fQorICAgICB9Cis8L3ByZT4KKyAgIDxwPlRoZSBydW4tdGltZSBpbml0aWFsaXphdGlvbiBjb2RlIGZvciB1c2Ugd2l0aCBhIHByb2dyYW0gZ2VuZXJhdGVkIHdpdGgKK3RoaXMgbGlua2VyIHNjcmlwdCB3b3VsZCBpbmNsdWRlIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcsIHRvIGNvcHkKK3RoZSBpbml0aWFsaXplZCBkYXRhIGZyb20gdGhlIFJPTSBpbWFnZSB0byBpdHMgcnVudGltZSBhZGRyZXNzLiAgTm90aWNlCitob3cgdGhpcyBjb2RlIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgc3ltYm9scyBkZWZpbmVkIGJ5IHRoZSBsaW5rZXIKK3NjcmlwdC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIGV4dGVybiBjaGFyIF9ldGV4dCwgX2RhdGEsIF9lZGF0YSwgX2JzdGFydCwgX2JlbmQ7CisgICAgIGNoYXIgKnNyYyA9ICZhbXA7X2V0ZXh0OworICAgICBjaGFyICpkc3QgPSAmYW1wO19kYXRhOworICAgICAKKyAgICAgLyogUk9NIGhhcyBkYXRhIGF0IGVuZCBvZiB0ZXh0OyBjb3B5IGl0LiAgKi8KKyAgICAgd2hpbGUgKGRzdCAmbHQ7ICZhbXA7X2VkYXRhKQorICAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICAgCisgICAgIC8qIFplcm8gYnNzLiAgKi8KKyAgICAgZm9yIChkc3QgPSAmYW1wO19ic3RhcnQ7IGRzdCZsdDsgJmFtcDtfYmVuZDsgZHN0KyspCisgICAgICAgKmRzdCA9IDA7Cis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLU5hbWUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLU5hbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzI4NmQyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tTmFtZS5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk91dHB1dCBTZWN0aW9uIE5hbWUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiIHRpdGxlPSJTRUNUSU9OUyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURlc2NyaXB0aW9uLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGVzY3JpcHRpb24iIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBEZXNjcmlwdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUFkZHJlc3MuaHRtbCNPdXRwdXQtU2VjdGlvbi1BZGRyZXNzIiB0aXRsZT0iT3V0cHV0IFNlY3Rpb24gQWRkcmVzcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3V0cHV0LVNlY3Rpb24tTmFtZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BZGRyZXNzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQWRkcmVzcyI+T3V0cHV0IFNlY3Rpb24gQWRkcmVzczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURlc2NyaXB0aW9uLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGVzY3JpcHRpb24iPk91dHB1dCBTZWN0aW9uIERlc2NyaXB0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyI+U0VDVElPTlM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjYuMiBPdXRwdXQgU2VjdGlvbiBOYW1lPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtbmFtZV8wMDJjLXNlY3Rpb24tNDAwIj48L2E+PGEgbmFtZT0iaW5kZXgtc2VjdGlvbi1uYW1lLTQwMSI+PC9hPlRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgc2VjdGlvbiBpcyA8dmFyPnNlY3Rpb248L3Zhcj4uICA8dmFyPnNlY3Rpb248L3Zhcj4gbXVzdAorbWVldCB0aGUgY29uc3RyYWludHMgb2YgeW91ciBvdXRwdXQgZm9ybWF0LiAgSW4gZm9ybWF0cyB3aGljaCBvbmx5CitzdXBwb3J0IGEgbGltaXRlZCBudW1iZXIgb2Ygc2VjdGlvbnMsIHN1Y2ggYXMgPGNvZGU+YS5vdXQ8L2NvZGU+LCB0aGUgbmFtZQorbXVzdCBiZSBvbmUgb2YgdGhlIG5hbWVzIHN1cHBvcnRlZCBieSB0aGUgZm9ybWF0ICg8Y29kZT5hLm91dDwvY29kZT4sIGZvcgorZXhhbXBsZSwgYWxsb3dzIG9ubHkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ic3M8L3NwYW4+PC9zYW1wPiZyc3F1bzspLiBJZiB0aGUKK291dHB1dCBmb3JtYXQgc3VwcG9ydHMgYW55IG51bWJlciBvZiBzZWN0aW9ucywgYnV0IHdpdGggbnVtYmVycyBhbmQgbm90CituYW1lcyAoYXMgaXMgdGhlIGNhc2UgZm9yIE9hc3lzKSwgdGhlIG5hbWUgc2hvdWxkIGJlIHN1cHBsaWVkIGFzIGEKK3F1b3RlZCBudW1lcmljIHN0cmluZy4gIEEgc2VjdGlvbiBuYW1lIG1heSBjb25zaXN0IG9mIGFueSBzZXF1ZW5jZSBvZgorY2hhcmFjdGVycywgYnV0IGEgbmFtZSB3aGljaCBjb250YWlucyBhbnkgdW51c3VhbCBjaGFyYWN0ZXJzIHN1Y2ggYXMKK2NvbW1hcyBtdXN0IGJlIHF1b3RlZC4KKworICAgPHA+VGhlIG91dHB1dCBzZWN0aW9uIG5hbWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4vRElTQ0FSRC88L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgc3BlY2lhbDsgPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZy5odG1sI091dHB1dC1TZWN0aW9uLURpc2NhcmRpbmciPk91dHB1dCBTZWN0aW9uIERpc2NhcmRpbmc8L2E+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1QaGRyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1QaGRyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmMGIyOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLVBoZHIuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PdXRwdXQgU2VjdGlvbiBQaGRyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyIgdGl0bGU9Ik91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1SZWdpb24uaHRtbCNPdXRwdXQtU2VjdGlvbi1SZWdpb24iIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBSZWdpb24iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1GaWxsLmh0bWwjT3V0cHV0LVNlY3Rpb24tRmlsbCIgdGl0bGU9Ik91dHB1dCBTZWN0aW9uIEZpbGwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik91dHB1dC1TZWN0aW9uLVBoZHIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRmlsbC5odG1sI091dHB1dC1TZWN0aW9uLUZpbGwiPk91dHB1dCBTZWN0aW9uIEZpbGw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1SZWdpb24uaHRtbCNPdXRwdXQtU2VjdGlvbi1SZWdpb24iPk91dHB1dCBTZWN0aW9uIFJlZ2lvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzIj5PdXRwdXQgU2VjdGlvbiBBdHRyaWJ1dGVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+My42LjguNyBPdXRwdXQgU2VjdGlvbiBQaGRyPC9oNT4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwM2FfMDA0MHZhcl8wMDdicGhkcl8wMDdkLTQ2NiI+PC9hPjxhIG5hbWU9ImluZGV4LXNlY3Rpb25fMDAyYy1hc3NpZ25pbmctdG8tcHJvZ3JhbS1oZWFkZXItNDY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJvZ3JhbS1oZWFkZXJzLWFuZC1zZWN0aW9ucy00NjgiPjwvYT5Zb3UgY2FuIGFzc2lnbiBhIHNlY3Rpb24gdG8gYSBwcmV2aW91c2x5IGRlZmluZWQgcHJvZ3JhbSBzZWdtZW50IGJ5Cit1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PHZhcj5waGRyPC92YXI+PC9zYW1wPiZyc3F1bzsuICBTZWUgPGEgaHJlZj0iUEhEUlMuaHRtbCNQSERSUyI+UEhEUlM8L2E+LiAgSWYgYSBzZWN0aW9uIGlzIGFzc2lnbmVkIHRvCitvbmUgb3IgbW9yZSBzZWdtZW50cywgdGhlbiBhbGwgc3Vic2VxdWVudCBhbGxvY2F0ZWQgc2VjdGlvbnMgd2lsbCBiZQorYXNzaWduZWQgdG8gdGhvc2Ugc2VnbWVudHMgYXMgd2VsbCwgdW5sZXNzIHRoZXkgdXNlIGFuIGV4cGxpY2l0bHkKKzxjb2RlPjo8L2NvZGU+PHZhcj5waGRyPC92YXI+IG1vZGlmaWVyLiAgWW91IGNhbiB1c2UgPGNvZGU+Ok5PTkU8L2NvZGU+IHRvIHRlbGwgdGhlCitsaW5rZXIgdG8gbm90IHB1dCB0aGUgc2VjdGlvbiBpbiBhbnkgc2VnbWVudCBhdCBhbGwuCisKKyAgIDxwPkhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBQSERSUyB7IHRleHQgUFRfTE9BRCA7IH0KKyAgICAgU0VDVElPTlMgeyAudGV4dCA6IHsgKigudGV4dCkgfSA6dGV4dCB9Cis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLVJlZ2lvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3V0cHV0LVNlY3Rpb24tUmVnaW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5ZjI3MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLVJlZ2lvbi5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk91dHB1dCBTZWN0aW9uIFJlZ2lvbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBBdHRyaWJ1dGVzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludC5odG1sI091dHB1dC1TZWN0aW9uLUNvbnN0cmFpbnQiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBDb25zdHJhaW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUGhkci5odG1sI091dHB1dC1TZWN0aW9uLVBoZHIiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBQaGRyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJPdXRwdXQtU2VjdGlvbi1SZWdpb24iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUGhkci5odG1sI091dHB1dC1TZWN0aW9uLVBoZHIiPk91dHB1dCBTZWN0aW9uIFBoZHI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1Db25zdHJhaW50Lmh0bWwjT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludCI+T3V0cHV0IFNlY3Rpb24gQ29uc3RyYWludDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMuaHRtbCNPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzIj5PdXRwdXQgU2VjdGlvbiBBdHRyaWJ1dGVzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNSBjbGFzcz0ic3Vic3Vic2VjdGlvbiI+My42LjguNiBPdXRwdXQgU2VjdGlvbiBSZWdpb248L2g1PgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAzZV8wMDQwdmFyXzAwN2JyZWdpb25fMDA3ZC00NjMiPjwvYT48YSBuYW1lPSJpbmRleC1zZWN0aW9uXzAwMmMtYXNzaWduaW5nLXRvLW1lbW9yeS1yZWdpb24tNDY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWVtb3J5LXJlZ2lvbnMtYW5kLXNlY3Rpb25zLTQ2NSI+PC9hPllvdSBjYW4gYXNzaWduIGEgc2VjdGlvbiB0byBhIHByZXZpb3VzbHkgZGVmaW5lZCByZWdpb24gb2YgbWVtb3J5IGJ5Cit1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZndDs8L3NwYW4+PHZhcj5yZWdpb248L3Zhcj48L3NhbXA+JnJzcXVvOy4gIFNlZSA8YSBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiPk1FTU9SWTwvYT4uCisKKyAgIDxwPkhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBNRU1PUlkgeyByb20gOiBPUklHSU4gPSAweDEwMDAsIExFTkdUSCA9IDB4MTAwMCB9CisgICAgIFNFQ1RJT05TIHsgUk9NIDogeyAqKC50ZXh0KSB9ICZndDtyb20gfQorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1UeXBlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdXRwdXQtU2VjdGlvbi1UeXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkZWI5OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL091dHB1dC1TZWN0aW9uLVR5cGUuaHRtbApAQCAtMCwwICsxLDczIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PdXRwdXQgU2VjdGlvbiBUeXBlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyIgdGl0bGU9Ik91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1MTUEuaHRtbCNPdXRwdXQtU2VjdGlvbi1MTUEiIHRpdGxlPSJPdXRwdXQgU2VjdGlvbiBMTUEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik91dHB1dC1TZWN0aW9uLVR5cGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tTE1BLmh0bWwjT3V0cHV0LVNlY3Rpb24tTE1BIj5PdXRwdXQgU2VjdGlvbiBMTUE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyI+T3V0cHV0IFNlY3Rpb24gQXR0cmlidXRlczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDUgY2xhc3M9InN1YnN1YnNlY3Rpb24iPjMuNi44LjEgT3V0cHV0IFNlY3Rpb24gVHlwZTwvaDU+CisKKzxwPkVhY2ggb3V0cHV0IHNlY3Rpb24gbWF5IGhhdmUgYSB0eXBlLiAgVGhlIHR5cGUgaXMgYSBrZXl3b3JkIGluCitwYXJlbnRoZXNlcy4gIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGRlZmluZWQ6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPk5PTE9BRDwvY29kZT48ZGQ+VGhlIHNlY3Rpb24gc2hvdWxkIGJlIG1hcmtlZCBhcyBub3QgbG9hZGFibGUsIHNvIHRoYXQgaXQgd2lsbCBub3QgYmUKK2xvYWRlZCBpbnRvIG1lbW9yeSB3aGVuIHRoZSBwcm9ncmFtIGlzIHJ1bi4gCis8YnI+PGR0Pjxjb2RlPkRTRUNUPC9jb2RlPjxkdD48Y29kZT5DT1BZPC9jb2RlPjxkdD48Y29kZT5JTkZPPC9jb2RlPjxkdD48Y29kZT5PVkVSTEFZPC9jb2RlPjxkZD5UaGVzZSB0eXBlIG5hbWVzIGFyZSBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFuZCBhcmUKK3JhcmVseSB1c2VkLiAgVGhleSBhbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3Q6IHRoZSBzZWN0aW9uIHNob3VsZCBiZQorbWFya2VkIGFzIG5vdCBhbGxvY2F0YWJsZSwgc28gdGhhdCBubyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGUKK3NlY3Rpb24gd2hlbiB0aGUgcHJvZ3JhbSBpcyBydW4uIAorPC9kbD4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtTk9MT0FELTQ0NSI+PC9hPjxhIG5hbWU9ImluZGV4LXByZXZlbnQtdW5uZWNlc3NhcnktbG9hZGluZy00NDYiPjwvYT48YSBuYW1lPSJpbmRleC1sb2FkaW5nXzAwMmMtcHJldmVudGluZy00NDciPjwvYT5UaGUgbGlua2VyIG5vcm1hbGx5IHNldHMgdGhlIGF0dHJpYnV0ZXMgb2YgYW4gb3V0cHV0IHNlY3Rpb24gYmFzZWQgb24KK3RoZSBpbnB1dCBzZWN0aW9ucyB3aGljaCBtYXAgaW50byBpdC4gIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSB1c2luZwordGhlIHNlY3Rpb24gdHlwZS4gIEZvciBleGFtcGxlLCBpbiB0aGUgc2NyaXB0IHNhbXBsZSBiZWxvdywgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlJPTTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzZWN0aW9uIGlzIGFkZHJlc3NlZCBhdCBtZW1vcnkgbG9jYXRpb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4wPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCBkb2VzIG5vdAorbmVlZCB0byBiZSBsb2FkZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBydW4uCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMgeworICAgICAgIFJPTSAwIChOT0xPQUQpIDogeyAuLi4gfQorICAgICAgIC4uLgorICAgICB9Cis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL092ZXJsYXktRGVzY3JpcHRpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL092ZXJsYXktRGVzY3JpcHRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVjYTFlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3ZlcmxheS1EZXNjcmlwdGlvbi5odG1sCkBAIC0wLDAgKzEsMTQ0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PdmVybGF5IERlc2NyaXB0aW9uIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTRUNUSU9OUy5odG1sI1NFQ1RJT05TIiB0aXRsZT0iU0VDVElPTlMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyIgdGl0bGU9Ik91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Ik92ZXJsYXktRGVzY3JpcHRpb24iPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1BdHRyaWJ1dGVzLmh0bWwjT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcyI+T3V0cHV0IFNlY3Rpb24gQXR0cmlidXRlczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiPlNFQ1RJT05TPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My42LjkgT3ZlcmxheSBEZXNjcmlwdGlvbjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LU9WRVJMQVktNDcyIj48L2E+PGEgbmFtZT0iaW5kZXgtb3ZlcmxheXMtNDczIj48L2E+QW4gb3ZlcmxheSBkZXNjcmlwdGlvbiBwcm92aWRlcyBhbiBlYXN5IHdheSB0byBkZXNjcmliZSBzZWN0aW9ucyB3aGljaAorYXJlIHRvIGJlIGxvYWRlZCBhcyBwYXJ0IG9mIGEgc2luZ2xlIG1lbW9yeSBpbWFnZSBidXQgYXJlIHRvIGJlIHJ1biBhdAordGhlIHNhbWUgbWVtb3J5IGFkZHJlc3MuICBBdCBydW4gdGltZSwgc29tZSBzb3J0IG9mIG92ZXJsYXkgbWFuYWdlciB3aWxsCitjb3B5IHRoZSBvdmVybGFpZCBzZWN0aW9ucyBpbiBhbmQgb3V0IG9mIHRoZSBydW50aW1lIG1lbW9yeSBhZGRyZXNzIGFzCityZXF1aXJlZCwgcGVyaGFwcyBieSBzaW1wbHkgbWFuaXB1bGF0aW5nIGFkZHJlc3NpbmcgYml0cy4gIFRoaXMgYXBwcm9hY2gKK2NhbiBiZSB1c2VmdWwsIGZvciBleGFtcGxlLCB3aGVuIGEgY2VydGFpbiByZWdpb24gb2YgbWVtb3J5IGlzIGZhc3RlcgordGhhbiBhbm90aGVyLgorCisgICA8cD5PdmVybGF5cyBhcmUgZGVzY3JpYmVkIHVzaW5nIHRoZSA8Y29kZT5PVkVSTEFZPC9jb2RlPiBjb21tYW5kLiAgVGhlCis8Y29kZT5PVkVSTEFZPC9jb2RlPiBjb21tYW5kIGlzIHVzZWQgd2l0aGluIGEgPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmQsIGxpa2UgYW4KK291dHB1dCBzZWN0aW9uIGRlc2NyaXB0aW9uLiAgVGhlIGZ1bGwgc3ludGF4IG9mIHRoZSA8Y29kZT5PVkVSTEFZPC9jb2RlPgorY29tbWFuZCBpcyBhcyBmb2xsb3dzOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIE9WRVJMQVkgWzx2YXI+c3RhcnQ8L3Zhcj5dIDogW05PQ1JPU1NSRUZTXSBbQVQgKCA8dmFyPmxkYWRkcjwvdmFyPiApXQorICAgICAgIHsKKyAgICAgICAgIDx2YXI+c2VjbmFtZTE8L3Zhcj4KKyAgICAgICAgICAgeworICAgICAgICAgICAgIDx2YXI+b3V0cHV0LXNlY3Rpb24tY29tbWFuZDwvdmFyPgorICAgICAgICAgICAgIDx2YXI+b3V0cHV0LXNlY3Rpb24tY29tbWFuZDwvdmFyPgorICAgICAgICAgICAgIC4uLgorICAgICAgICAgICB9IFs6PHZhcj5waGRyPC92YXI+Li4uXSBbPTx2YXI+ZmlsbDwvdmFyPl0KKyAgICAgICAgIDx2YXI+c2VjbmFtZTI8L3Zhcj4KKyAgICAgICAgICAgeworICAgICAgICAgICAgIDx2YXI+b3V0cHV0LXNlY3Rpb24tY29tbWFuZDwvdmFyPgorICAgICAgICAgICAgIDx2YXI+b3V0cHV0LXNlY3Rpb24tY29tbWFuZDwvdmFyPgorICAgICAgICAgICAgIC4uLgorICAgICAgICAgICB9IFs6PHZhcj5waGRyPC92YXI+Li4uXSBbPTx2YXI+ZmlsbDwvdmFyPl0KKyAgICAgICAgIC4uLgorICAgICAgIH0gWyZndDs8dmFyPnJlZ2lvbjwvdmFyPl0gWzo8dmFyPnBoZHI8L3Zhcj4uLi5dIFs9PHZhcj5maWxsPC92YXI+XQorPC9wcmU+CisgICA8cD5FdmVyeXRoaW5nIGlzIG9wdGlvbmFsIGV4Y2VwdCA8Y29kZT5PVkVSTEFZPC9jb2RlPiAoYSBrZXl3b3JkKSwgYW5kIGVhY2gKK3NlY3Rpb24gbXVzdCBoYXZlIGEgbmFtZSAoPHZhcj5zZWNuYW1lMTwvdmFyPiBhbmQgPHZhcj5zZWNuYW1lMjwvdmFyPiBhYm92ZSkuICBUaGUKK3NlY3Rpb24gZGVmaW5pdGlvbnMgd2l0aGluIHRoZSA8Y29kZT5PVkVSTEFZPC9jb2RlPiBjb25zdHJ1Y3QgYXJlIGlkZW50aWNhbCB0bwordGhvc2Ugd2l0aGluIHRoZSBnZW5lcmFsIDxjb2RlPlNFQ1RJT05TPC9jb2RlPiBjb250cnVjdCAoc2VlIDxhIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiPlNFQ1RJT05TPC9hPiksCitleGNlcHQgdGhhdCBubyBhZGRyZXNzZXMgYW5kIG5vIG1lbW9yeSByZWdpb25zIG1heSBiZSBkZWZpbmVkIGZvcgorc2VjdGlvbnMgd2l0aGluIGFuIDxjb2RlPk9WRVJMQVk8L2NvZGU+LgorCisgICA8cD5UaGUgc2VjdGlvbnMgYXJlIGFsbCBkZWZpbmVkIHdpdGggdGhlIHNhbWUgc3RhcnRpbmcgYWRkcmVzcy4gIFRoZSBsb2FkCithZGRyZXNzZXMgb2YgdGhlIHNlY3Rpb25zIGFyZSBhcnJhbmdlZCBzdWNoIHRoYXQgdGhleSBhcmUgY29uc2VjdXRpdmUgaW4KK21lbW9yeSBzdGFydGluZyBhdCB0aGUgbG9hZCBhZGRyZXNzIHVzZWQgZm9yIHRoZSA8Y29kZT5PVkVSTEFZPC9jb2RlPiBhcyBhCit3aG9sZSAoYXMgd2l0aCBub3JtYWwgc2VjdGlvbiBkZWZpbml0aW9ucywgdGhlIGxvYWQgYWRkcmVzcyBpcyBvcHRpb25hbCwKK2FuZCBkZWZhdWx0cyB0byB0aGUgc3RhcnQgYWRkcmVzczsgdGhlIHN0YXJ0IGFkZHJlc3MgaXMgYWxzbyBvcHRpb25hbCwKK2FuZCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbG9jYXRpb24gY291bnRlcikuCisKKyAgIDxwPklmIHRoZSA8Y29kZT5OT0NST1NTUkVGUzwvY29kZT4ga2V5d29yZCBpcyB1c2VkLCBhbmQgdGhlcmUgYW55IHJlZmVyZW5jZXMKK2Ftb25nIHRoZSBzZWN0aW9ucywgdGhlIGxpbmtlciB3aWxsIHJlcG9ydCBhbiBlcnJvci4gIFNpbmNlIHRoZSBzZWN0aW9ucworYWxsIHJ1biBhdCB0aGUgc2FtZSBhZGRyZXNzLCBpdCBub3JtYWxseSBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBvbmUKK3NlY3Rpb24gdG8gcmVmZXIgZGlyZWN0bHkgdG8gYW5vdGhlci4gIFNlZSA8YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjTWlzY2VsbGFuZW91cy1Db21tYW5kcyI+Tk9DUk9TU1JFRlM8L2E+LgorCisgICA8cD5Gb3IgZWFjaCBzZWN0aW9uIHdpdGhpbiB0aGUgPGNvZGU+T1ZFUkxBWTwvY29kZT4sIHRoZSBsaW5rZXIgYXV0b21hdGljYWxseQorcHJvdmlkZXMgdHdvIHN5bWJvbHMuICBUaGUgc3ltYm9sIDxjb2RlPl9fbG9hZF9zdGFydF88L2NvZGU+PHZhcj5zZWNuYW1lPC92YXI+IGlzCitkZWZpbmVkIGFzIHRoZSBzdGFydGluZyBsb2FkIGFkZHJlc3Mgb2YgdGhlIHNlY3Rpb24uICBUaGUgc3ltYm9sCis8Y29kZT5fX2xvYWRfc3RvcF88L2NvZGU+PHZhcj5zZWNuYW1lPC92YXI+IGlzIGRlZmluZWQgYXMgdGhlIGZpbmFsIGxvYWQgYWRkcmVzcyBvZgordGhlIHNlY3Rpb24uICBBbnkgY2hhcmFjdGVycyB3aXRoaW4gPHZhcj5zZWNuYW1lPC92YXI+IHdoaWNoIGFyZSBub3QgbGVnYWwKK3dpdGhpbiBDIGlkZW50aWZpZXJzIGFyZSByZW1vdmVkLiAgQyAob3IgYXNzZW1ibGVyKSBjb2RlIG1heSB1c2UgdGhlc2UKK3N5bWJvbHMgdG8gbW92ZSB0aGUgb3ZlcmxhaWQgc2VjdGlvbnMgYXJvdW5kIGFzIG5lY2Vzc2FyeS4KKworICAgPHA+QXQgdGhlIGVuZCBvZiB0aGUgb3ZlcmxheSwgdGhlIHZhbHVlIG9mIHRoZSBsb2NhdGlvbiBjb3VudGVyIGlzIHNldCB0bwordGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIG92ZXJsYXkgcGx1cyB0aGUgc2l6ZSBvZiB0aGUgbGFyZ2VzdCBzZWN0aW9uLgorCisgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUuICBSZW1lbWJlciB0aGF0IHRoaXMgd291bGQgYXBwZWFyIGluc2lkZSBhCis8Y29kZT5TRUNUSU9OUzwvY29kZT4gY29uc3RydWN0LgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgT1ZFUkxBWSAweDEwMDAgOiBBVCAoMHg0MDAwKQorICAgICAgICB7CisgICAgICAgICAgLnRleHQwIHsgbzEvKi5vKC50ZXh0KSB9CisgICAgICAgICAgLnRleHQxIHsgbzIvKi5vKC50ZXh0KSB9CisgICAgICAgIH0KKzwvcHJlPgorICAgPHAgY2xhc3M9Im5vaW5kZW50Ij5UaGlzIHdpbGwgZGVmaW5lIGJvdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQxPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIHN0YXJ0IGF0CithZGRyZXNzIDB4MTAwMC4gICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQwPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgYmUgbG9hZGVkIGF0IGFkZHJlc3MgMHg0MDAwLCBhbmQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQxPC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgYmUgbG9hZGVkIGltbWVkaWF0ZWx5IGFmdGVyICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQwPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlCitmb2xsb3dpbmcgc3ltYm9scyB3aWxsIGJlIGRlZmluZWQgaWYgcmVmZXJlbmNlZDogPGNvZGU+X19sb2FkX3N0YXJ0X3RleHQwPC9jb2RlPiwKKzxjb2RlPl9fbG9hZF9zdG9wX3RleHQwPC9jb2RlPiwgPGNvZGU+X19sb2FkX3N0YXJ0X3RleHQxPC9jb2RlPiwKKzxjb2RlPl9fbG9hZF9zdG9wX3RleHQxPC9jb2RlPi4KKworICAgPHA+QyBjb2RlIHRvIGNvcHkgb3ZlcmxheSA8Y29kZT4udGV4dDE8L2NvZGU+IGludG8gdGhlIG92ZXJsYXkgYXJlYSBtaWdodCBsb29rCitsaWtlIHRoZSBmb2xsb3dpbmcuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIGV4dGVybiBjaGFyIF9fbG9hZF9zdGFydF90ZXh0MSwgX19sb2FkX3N0b3BfdGV4dDE7CisgICAgICAgbWVtY3B5ICgoY2hhciAqKSAweDEwMDAsICZhbXA7X19sb2FkX3N0YXJ0X3RleHQxLAorICAgICAgICAgICAgICAgJmFtcDtfX2xvYWRfc3RvcF90ZXh0MSAtICZhbXA7X19sb2FkX3N0YXJ0X3RleHQxKTsKKzwvcHJlPgorICAgPHA+Tm90ZSB0aGF0IHRoZSA8Y29kZT5PVkVSTEFZPC9jb2RlPiBjb21tYW5kIGlzIGp1c3Qgc3ludGFjdGljIHN1Z2FyLCBzaW5jZQorZXZlcnl0aGluZyBpdCBkb2VzIGNhbiBiZSBkb25lIHVzaW5nIHRoZSBtb3JlIGJhc2ljIGNvbW1hbmRzLiAgVGhlIGFib3ZlCitleGFtcGxlIGNvdWxkIGhhdmUgYmVlbiB3cml0dGVuIGlkZW50aWNhbGx5IGFzIGZvbGxvd3MuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIC50ZXh0MCAweDEwMDAgOiBBVCAoMHg0MDAwKSB7IG8xLyoubygudGV4dCkgfQorICAgICAgIFBST1ZJREUgKF9fbG9hZF9zdGFydF90ZXh0MCA9IExPQURBRERSICgudGV4dDApKTsKKyAgICAgICBQUk9WSURFIChfX2xvYWRfc3RvcF90ZXh0MCA9IExPQURBRERSICgudGV4dDApICsgU0laRU9GICgudGV4dDApKTsKKyAgICAgICAudGV4dDEgMHgxMDAwIDogQVQgKDB4NDAwMCArIFNJWkVPRiAoLnRleHQwKSkgeyBvMi8qLm8oLnRleHQpIH0KKyAgICAgICBQUk9WSURFIChfX2xvYWRfc3RhcnRfdGV4dDEgPSBMT0FEQUREUiAoLnRleHQxKSk7CisgICAgICAgUFJPVklERSAoX19sb2FkX3N0b3BfdGV4dDEgPSBMT0FEQUREUiAoLnRleHQxKSArIFNJWkVPRiAoLnRleHQxKSk7CisgICAgICAgLiA9IDB4MTAwMCArIE1BWCAoU0laRU9GICgudGV4dDApLCBTSVpFT0YgKC50ZXh0MSkpOworPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9PdmVydmlldy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3ZlcnZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDc5NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvT3ZlcnZpZXcuaHRtbApAQCAtMCwwICsxLDc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5PdmVydmlldyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpbmRleC5odG1sI1RvcCIgdGl0bGU9IlRvcCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIiB0aXRsZT0iSW52b2NhdGlvbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iT3ZlcnZpZXciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iSW52b2NhdGlvbi5odG1sI0ludm9jYXRpb24iPkludm9jYXRpb248L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjEgT3ZlcnZpZXc8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MHNjXzAwN2JnbnVfMDA3ZC1saW5rZXItMSI+PC9hPjxhIG5hbWU9ImluZGV4LXdoYXQtaXMtdGhpc18wMDNmLTIiPjwvYT4KKworPCEtLSBtYW4gYmVnaW4gREVTQ1JJUFRJT04gLS0+CisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBjb21iaW5lcyBhIG51bWJlciBvZiBvYmplY3QgYW5kIGFyY2hpdmUgZmlsZXMsIHJlbG9jYXRlcwordGhlaXIgZGF0YSBhbmQgdGllcyB1cCBzeW1ib2wgcmVmZXJlbmNlcy4gVXN1YWxseSB0aGUgbGFzdCBzdGVwIGluCitjb21waWxpbmcgYSBwcm9ncmFtIGlzIHRvIHJ1biA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPi4KKworICAgPHA+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYWNjZXB0cyBMaW5rZXIgQ29tbWFuZCBMYW5ndWFnZSBmaWxlcyB3cml0dGVuIGluCithIHN1cGVyc2V0IG9mIEFUJmFtcDtUJ3MgTGluayBFZGl0b3IgQ29tbWFuZCBMYW5ndWFnZSBzeW50YXgsCit0byBwcm92aWRlIGV4cGxpY2l0IGFuZCB0b3RhbCBjb250cm9sIG92ZXIgdGhlIGxpbmtpbmcgcHJvY2Vzcy4KKworICAgPHA+VGhpcyB2ZXJzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHVzZXMgdGhlIGdlbmVyYWwgcHVycG9zZSBCRkQgbGlicmFyaWVzCit0byBvcGVyYXRlIG9uIG9iamVjdCBmaWxlcy4gVGhpcyBhbGxvd3MgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gdG8gcmVhZCwgY29tYmluZSwgYW5kCit3cml0ZSBvYmplY3QgZmlsZXMgaW4gbWFueSBkaWZmZXJlbnQgZm9ybWF0cyZtZGFzaDtmb3IgZXhhbXBsZSwgQ09GRiBvcgorPGNvZGU+YS5vdXQ8L2NvZGU+LiAgRGlmZmVyZW50IGZvcm1hdHMgbWF5IGJlIGxpbmtlZCB0b2dldGhlciB0byBwcm9kdWNlIGFueQorYXZhaWxhYmxlIGtpbmQgb2Ygb2JqZWN0IGZpbGUuICBTZWUgPGEgaHJlZj0iQkZELmh0bWwjQkZEIj5CRkQ8L2E+LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgPHA+QXNpZGUgZnJvbSBpdHMgZmxleGliaWxpdHksIHRoZSA8c3BhbiBjbGFzcz0ic2MiPmdudTwvc3Bhbj4gbGlua2VyIGlzIG1vcmUgaGVscGZ1bCB0aGFuIG90aGVyCitsaW5rZXJzIGluIHByb3ZpZGluZyBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiAgTWFueSBsaW5rZXJzIGFiYW5kb24KK2V4ZWN1dGlvbiBpbW1lZGlhdGVseSB1cG9uIGVuY291bnRlcmluZyBhbiBlcnJvcjsgd2hlbmV2ZXIgcG9zc2libGUsCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBjb250aW51ZXMgZXhlY3V0aW5nLCBhbGxvd2luZyB5b3UgdG8gaWRlbnRpZnkgb3RoZXIgZXJyb3JzCisob3IsIGluIHNvbWUgY2FzZXMsIHRvIGdldCBhbiBvdXRwdXQgZmlsZSBpbiBzcGl0ZSBvZiB0aGUgZXJyb3IpLgorCis8IS0tIG1hbiBlbmQgLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9QSERSUy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvUEhEUlMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkzZGNmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvUEhEUlMuaHRtbApAQCAtMCwwICsxLDE3OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UEhEUlMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIiB0aXRsZT0iU2NyaXB0cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1FTU9SWS5odG1sI01FTU9SWSIgdGl0bGU9Ik1FTU9SWSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZFUlNJT04uaHRtbCNWRVJTSU9OIiB0aXRsZT0iVkVSU0lPTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUEhEUlMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVkVSU0lPTi5odG1sI1ZFUlNJT04iPlZFUlNJT048L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiPk1FTU9SWTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIj5TY3JpcHRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My44IFBIRFJTIENvbW1hbmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1QSERSUy00ODYiPjwvYT48YSBuYW1lPSJpbmRleC1wcm9ncmFtLWhlYWRlcnMtNDg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtRUxGLXByb2dyYW0taGVhZGVycy00ODgiPjwvYT48YSBuYW1lPSJpbmRleC1wcm9ncmFtLXNlZ21lbnRzLTQ4OSI+PC9hPjxhIG5hbWU9ImluZGV4LXNlZ21lbnRzXzAwMmMtRUxGLTQ5MCI+PC9hPlRoZSBFTEYgb2JqZWN0IGZpbGUgZm9ybWF0IHVzZXMgPGRmbj5wcm9ncmFtIGhlYWRlcnM8L2Rmbj4sIGFsc28ga25vd3MgYXMKKzxkZm4+c2VnbWVudHM8L2Rmbj4uICBUaGUgcHJvZ3JhbSBoZWFkZXJzIGRlc2NyaWJlIGhvdyB0aGUgcHJvZ3JhbSBzaG91bGQgYmUKK2xvYWRlZCBpbnRvIG1lbW9yeS4gIFlvdSBjYW4gcHJpbnQgdGhlbSBvdXQgYnkgdXNpbmcgdGhlIDxjb2RlPm9iamR1bXA8L2NvZGU+Citwcm9ncmFtIHdpdGggdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uLgorCisgICA8cD5XaGVuIHlvdSBydW4gYW4gRUxGIHByb2dyYW0gb24gYSBuYXRpdmUgRUxGIHN5c3RlbSwgdGhlIHN5c3RlbSBsb2FkZXIKK3JlYWRzIHRoZSBwcm9ncmFtIGhlYWRlcnMgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdG8gbG9hZCB0aGUKK3Byb2dyYW0uICBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBwcm9ncmFtIGhlYWRlcnMgYXJlIHNldCBjb3JyZWN0bHkuIAorVGhpcyBtYW51YWwgZG9lcyBub3QgZGVzY3JpYmUgdGhlIGRldGFpbHMgb2YgaG93IHRoZSBzeXN0ZW0gbG9hZGVyCitpbnRlcnByZXRzIHByb2dyYW0gaGVhZGVyczsgZm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgRUxGIEFCSS4KKworICAgPHA+VGhlIGxpbmtlciB3aWxsIGNyZWF0ZSByZWFzb25hYmxlIHByb2dyYW0gaGVhZGVycyBieSBkZWZhdWx0LiAgSG93ZXZlciwKK2luIHNvbWUgY2FzZXMsIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5IHRoZSBwcm9ncmFtIGhlYWRlcnMgbW9yZQorcHJlY2lzZWx5LiAgWW91IG1heSB1c2UgdGhlIDxjb2RlPlBIRFJTPC9jb2RlPiBjb21tYW5kIGZvciB0aGlzIHB1cnBvc2UuICBXaGVuCit0aGUgbGlua2VyIHNlZXMgdGhlIDxjb2RlPlBIRFJTPC9jb2RlPiBjb21tYW5kIGluIHRoZSBsaW5rZXIgc2NyaXB0LCBpdCB3aWxsCitub3QgY3JlYXRlIGFueSBwcm9ncmFtIGhlYWRlcnMgb3RoZXIgdGhhbiB0aGUgb25lcyBzcGVjaWZpZWQuCisKKyAgIDxwPlRoZSBsaW5rZXIgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgPGNvZGU+UEhEUlM8L2NvZGU+IGNvbW1hbmQgd2hlbgorZ2VuZXJhdGluZyBhbiBFTEYgb3V0cHV0IGZpbGUuICBJbiBvdGhlciBjYXNlcywgdGhlIGxpbmtlciB3aWxsIHNpbXBseQoraWdub3JlIDxjb2RlPlBIRFJTPC9jb2RlPi4KKworICAgPHA+VGhpcyBpcyB0aGUgc3ludGF4IG9mIHRoZSA8Y29kZT5QSERSUzwvY29kZT4gY29tbWFuZC4gIFRoZSB3b3JkcyA8Y29kZT5QSERSUzwvY29kZT4sCis8Y29kZT5GSUxFSERSPC9jb2RlPiwgPGNvZGU+QVQ8L2NvZGU+LCBhbmQgPGNvZGU+RkxBR1M8L2NvZGU+IGFyZSBrZXl3b3Jkcy4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFBIRFJTCisgICAgIHsKKyAgICAgICA8dmFyPm5hbWU8L3Zhcj4gPHZhcj50eXBlPC92YXI+IFsgRklMRUhEUiBdIFsgUEhEUlMgXSBbIEFUICggPHZhcj5hZGRyZXNzPC92YXI+ICkgXQorICAgICAgICAgICAgIFsgRkxBR1MgKCA8dmFyPmZsYWdzPC92YXI+ICkgXSA7CisgICAgIH0KKzwvcHJlPgorICAgPHA+VGhlIDx2YXI+bmFtZTwvdmFyPiBpcyB1c2VkIG9ubHkgZm9yIHJlZmVyZW5jZSBpbiB0aGUgPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmQKK29mIHRoZSBsaW5rZXIgc2NyaXB0LiAgSXQgaXMgbm90IHB1dCBpbnRvIHRoZSBvdXRwdXQgZmlsZS4gIFByb2dyYW0KK2hlYWRlciBuYW1lcyBhcmUgc3RvcmVkIGluIGEgc2VwYXJhdGUgbmFtZSBzcGFjZSwgYW5kIHdpbGwgbm90IGNvbmZsaWN0Cit3aXRoIHN5bWJvbCBuYW1lcywgZmlsZSBuYW1lcywgb3Igc2VjdGlvbiBuYW1lcy4gIEVhY2ggcHJvZ3JhbSBoZWFkZXIKK211c3QgaGF2ZSBhIGRpc3RpbmN0IG5hbWUuICBUaGUgaGVhZGVycyBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyIGFuZCBpdAoraXMgdXN1YWwgZm9yIHRoZW0gdG8gbWFwIHRvIHNlY3Rpb25zIGluIGFzY2VuZGluZyBsb2FkIGFkZHJlc3Mgb3JkZXIuCisKKyAgIDxwPkNlcnRhaW4gcHJvZ3JhbSBoZWFkZXIgdHlwZXMgZGVzY3JpYmUgc2VnbWVudHMgb2YgbWVtb3J5IHdoaWNoIHRoZQorc3lzdGVtIGxvYWRlciB3aWxsIGxvYWQgZnJvbSB0aGUgZmlsZS4gIEluIHRoZSBsaW5rZXIgc2NyaXB0LCB5b3UKK3NwZWNpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIHNlZ21lbnRzIGJ5IHBsYWNpbmcgYWxsb2NhdGFibGUgb3V0cHV0CitzZWN0aW9ucyBpbiB0aGUgc2VnbWVudHMuICBZb3UgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PHZhcj5waGRyPC92YXI+PC9zYW1wPiZyc3F1bzsgb3V0cHV0IHNlY3Rpb24KK2F0dHJpYnV0ZSB0byBwbGFjZSBhIHNlY3Rpb24gaW4gYSBwYXJ0aWN1bGFyIHNlZ21lbnQuICBTZWUgPGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUGhkci5odG1sI091dHB1dC1TZWN0aW9uLVBoZHIiPk91dHB1dCBTZWN0aW9uIFBoZHI8L2E+LgorCisgICA8cD5JdCBpcyBub3JtYWwgdG8gcHV0IGNlcnRhaW4gc2VjdGlvbnMgaW4gbW9yZSB0aGFuIG9uZSBzZWdtZW50LiAgVGhpcworbWVyZWx5IGltcGxpZXMgdGhhdCBvbmUgc2VnbWVudCBvZiBtZW1vcnkgY29udGFpbnMgYW5vdGhlci4gIFlvdSBtYXkKK3JlcGVhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjo8L3NwYW4+PHZhcj5waGRyPC92YXI+PC9zYW1wPiZyc3F1bzssIHVzaW5nIGl0IG9uY2UgZm9yIGVhY2ggc2VnbWVudCB3aGljaCBzaG91bGQKK2NvbnRhaW4gdGhlIHNlY3Rpb24uCisKKyAgIDxwPklmIHlvdSBwbGFjZSBhIHNlY3Rpb24gaW4gb25lIG9yIG1vcmUgc2VnbWVudHMgdXNpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj46PC9zcGFuPjx2YXI+cGhkcjwvdmFyPjwvc2FtcD4mcnNxdW87LAordGhlbiB0aGUgbGlua2VyIHdpbGwgcGxhY2UgYWxsIHN1YnNlcXVlbnQgYWxsb2NhdGFibGUgc2VjdGlvbnMgd2hpY2ggZG8KK25vdCBzcGVjaWZ5ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ojwvc3Bhbj48dmFyPnBoZHI8L3Zhcj48L3NhbXA+JnJzcXVvOyBpbiB0aGUgc2FtZSBzZWdtZW50cy4gIFRoaXMgaXMgZm9yCitjb252ZW5pZW5jZSwgc2luY2UgZ2VuZXJhbGx5IGEgd2hvbGUgc2V0IG9mIGNvbnRpZ3VvdXMgc2VjdGlvbnMgd2lsbCBiZQorcGxhY2VkIGluIGEgc2luZ2xlIHNlZ21lbnQuICBZb3UgY2FuIHVzZSA8Y29kZT46Tk9ORTwvY29kZT4gdG8gb3ZlcnJpZGUgdGhlCitkZWZhdWx0IHNlZ21lbnQgYW5kIHRlbGwgdGhlIGxpbmtlciB0byBub3QgcHV0IHRoZSBzZWN0aW9uIGluIGFueQorc2VnbWVudCBhdCBhbGwuCisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LUZJTEVIRFItNDkxIj48L2E+PGEgbmFtZT0iaW5kZXgtUEhEUlMtNDkyIj48L2E+WW91IG1heSB1c2UgdGhlIDxjb2RlPkZJTEVIRFI8L2NvZGU+IGFuZCA8Y29kZT5QSERSUzwvY29kZT4ga2V5d29yZHMgYWZ0ZXIKK3RoZSBwcm9ncmFtIGhlYWRlciB0eXBlIHRvIGZ1cnRoZXIgZGVzY3JpYmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBzZWdtZW50LiAKK1RoZSA8Y29kZT5GSUxFSERSPC9jb2RlPiBrZXl3b3JkIG1lYW5zIHRoYXQgdGhlIHNlZ21lbnQgc2hvdWxkIGluY2x1ZGUgdGhlIEVMRgorZmlsZSBoZWFkZXIuICBUaGUgPGNvZGU+UEhEUlM8L2NvZGU+IGtleXdvcmQgbWVhbnMgdGhhdCB0aGUgc2VnbWVudCBzaG91bGQKK2luY2x1ZGUgdGhlIEVMRiBwcm9ncmFtIGhlYWRlcnMgdGhlbXNlbHZlcy4gIElmIGFwcGxpZWQgdG8gYSBsb2FkYWJsZQorc2VnbWVudCAoPGNvZGU+UFRfTE9BRDwvY29kZT4pLCBhbGwgcHJpb3IgbG9hZGFibGUgc2VnbWVudHMgbXVzdCBoYXZlIG9uZSBvZgordGhlc2Uga2V5d29yZHMuCisKKyAgIDxwPlRoZSA8dmFyPnR5cGU8L3Zhcj4gbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nLiAgVGhlIG51bWJlcnMgaW5kaWNhdGUgdGhlCit2YWx1ZSBvZiB0aGUga2V5d29yZC4KKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+UFRfTlVMTDwvY29kZT4gKDApPGRkPkluZGljYXRlcyBhbiB1bnVzZWQgcHJvZ3JhbSBoZWFkZXIuCisKKyAgICAgPGJyPjxkdD48Y29kZT5QVF9MT0FEPC9jb2RlPiAoMSk8ZGQ+SW5kaWNhdGVzIHRoYXQgdGhpcyBwcm9ncmFtIGhlYWRlciBkZXNjcmliZXMgYSBzZWdtZW50IHRvIGJlIGxvYWRlZCBmcm9tCit0aGUgZmlsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPlBUX0RZTkFNSUM8L2NvZGU+ICgyKTxkZD5JbmRpY2F0ZXMgYSBzZWdtZW50IHdoZXJlIGR5bmFtaWMgbGlua2luZyBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5QVF9JTlRFUlA8L2NvZGU+ICgzKTxkZD5JbmRpY2F0ZXMgYSBzZWdtZW50IHdoZXJlIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIGludGVycHJldGVyIG1heSBiZQorZm91bmQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5QVF9OT1RFPC9jb2RlPiAoNCk8ZGQ+SW5kaWNhdGVzIGEgc2VnbWVudCBob2xkaW5nIG5vdGUgaW5mb3JtYXRpb24uCisKKyAgICAgPGJyPjxkdD48Y29kZT5QVF9TSExJQjwvY29kZT4gKDUpPGRkPkEgcmVzZXJ2ZWQgcHJvZ3JhbSBoZWFkZXIgdHlwZSwgZGVmaW5lZCBidXQgbm90IHNwZWNpZmllZCBieSB0aGUgRUxGCitBQkkuCisKKyAgICAgPGJyPjxkdD48Y29kZT5QVF9QSERSPC9jb2RlPiAoNik8ZGQ+SW5kaWNhdGVzIGEgc2VnbWVudCB3aGVyZSB0aGUgcHJvZ3JhbSBoZWFkZXJzIG1heSBiZSBmb3VuZC4KKworICAgICA8YnI+PGR0Pjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxkZD5BbiBleHByZXNzaW9uIGdpdmluZyB0aGUgbnVtZXJpYyB0eXBlIG9mIHRoZSBwcm9ncmFtIGhlYWRlci4gIFRoaXMgbWF5CitiZSB1c2VkIGZvciB0eXBlcyBub3QgZGVmaW5lZCBhYm92ZS4gCis8L2RsPgorCisgICA8cD5Zb3UgY2FuIHNwZWNpZnkgdGhhdCBhIHNlZ21lbnQgc2hvdWxkIGJlIGxvYWRlZCBhdCBhIHBhcnRpY3VsYXIgYWRkcmVzcworaW4gbWVtb3J5IGJ5IHVzaW5nIGFuIDxjb2RlPkFUPC9jb2RlPiBleHByZXNzaW9uLiAgVGhpcyBpcyBpZGVudGljYWwgdG8gdGhlCis8Y29kZT5BVDwvY29kZT4gY29tbWFuZCB1c2VkIGFzIGFuIG91dHB1dCBzZWN0aW9uIGF0dHJpYnV0ZSAoc2VlIDxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLUxNQS5odG1sI091dHB1dC1TZWN0aW9uLUxNQSI+T3V0cHV0IFNlY3Rpb24gTE1BPC9hPikuICBUaGUgPGNvZGU+QVQ8L2NvZGU+IGNvbW1hbmQgZm9yIGEgcHJvZ3JhbSBoZWFkZXIgb3ZlcnJpZGVzIHRoZQorb3V0cHV0IHNlY3Rpb24gYXR0cmlidXRlLgorCisgICA8cD5UaGUgbGlua2VyIHdpbGwgbm9ybWFsbHkgc2V0IHRoZSBzZWdtZW50IGZsYWdzIGJhc2VkIG9uIHRoZSBzZWN0aW9ucword2hpY2ggY29tcHJpc2UgdGhlIHNlZ21lbnQuICBZb3UgbWF5IHVzZSB0aGUgPGNvZGU+RkxBR1M8L2NvZGU+IGtleXdvcmQgdG8KK2V4cGxpY2l0bHkgc3BlY2lmeSB0aGUgc2VnbWVudCBmbGFncy4gIFRoZSB2YWx1ZSBvZiA8dmFyPmZsYWdzPC92YXI+IG11c3QgYmUKK2FuIGludGVnZXIuICBJdCBpcyB1c2VkIHRvIHNldCB0aGUgPGNvZGU+cF9mbGFnczwvY29kZT4gZmllbGQgb2YgdGhlIHByb2dyYW0KK2hlYWRlci4KKworICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIG9mIDxjb2RlPlBIRFJTPC9jb2RlPi4gIFRoaXMgc2hvd3MgYSB0eXBpY2FsIHNldCBvZiBwcm9ncmFtCitoZWFkZXJzIHVzZWQgb24gYSBuYXRpdmUgRUxGIHN5c3RlbS4KKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBQSERSUworICAgICB7CisgICAgICAgaGVhZGVycyBQVF9QSERSIFBIRFJTIDsKKyAgICAgICBpbnRlcnAgUFRfSU5URVJQIDsKKyAgICAgICB0ZXh0IFBUX0xPQUQgRklMRUhEUiBQSERSUyA7CisgICAgICAgZGF0YSBQVF9MT0FEIDsKKyAgICAgICBkeW5hbWljIFBUX0RZTkFNSUMgOworICAgICB9CisgICAgIAorICAgICBTRUNUSU9OUworICAgICB7CisgICAgICAgLiA9IFNJWkVPRl9IRUFERVJTOworICAgICAgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfSA6dGV4dCA6aW50ZXJwCisgICAgICAgLnRleHQgOiB7ICooLnRleHQpIH0gOnRleHQKKyAgICAgICAucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0gLyogZGVmYXVsdHMgdG8gOnRleHQgKi8KKyAgICAgICAuLi4KKyAgICAgICAuID0gLiArIDB4MTAwMDsgLyogbW92ZSB0byBhIG5ldyBwYWdlIGluIG1lbW9yeSAqLworICAgICAgIC5kYXRhIDogeyAqKC5kYXRhKSB9IDpkYXRhCisgICAgICAgLmR5bmFtaWMgOiB7ICooLmR5bmFtaWMpIH0gOmRhdGEgOmR5bmFtaWMKKyAgICAgICAuLi4KKyAgICAgfQorPC9wcmU+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9QUk9WSURFLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9QUk9WSURFLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyOGEzYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1BST1ZJREUuaHRtbApAQCAtMCwwICsxLDgwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5QUk9WSURFIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBc3NpZ25tZW50cy5odG1sI0Fzc2lnbm1lbnRzIiB0aXRsZT0iQXNzaWdubWVudHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJISURERU4uaHRtbCNISURERU4iIHRpdGxlPSJISURERU4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJQUk9WSURFXzAwNWZISURERU4uaHRtbCNQUk9WSURFXzAwNWZISURERU4iIHRpdGxlPSJQUk9WSURFX0hJRERFTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUFJPVklERSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJQUk9WSURFXzAwNWZISURERU4uaHRtbCNQUk9WSURFXzAwNWZISURERU4iPlBST1ZJREVfSElEREVOPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iSElEREVOLmh0bWwjSElEREVOIj5ISURERU48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBc3NpZ25tZW50cy5odG1sI0Fzc2lnbm1lbnRzIj5Bc3NpZ25tZW50czwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuNS4zIFBST1ZJREU8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC1QUk9WSURFLTM5NyI+PC9hPkluIHNvbWUgY2FzZXMsIGl0IGlzIGRlc2lyYWJsZSBmb3IgYSBsaW5rZXIgc2NyaXB0IHRvIGRlZmluZSBhIHN5bWJvbAorb25seSBpZiBpdCBpcyByZWZlcmVuY2VkIGFuZCBpcyBub3QgZGVmaW5lZCBieSBhbnkgb2JqZWN0IGluY2x1ZGVkIGluCit0aGUgbGluay4gIEZvciBleGFtcGxlLCB0cmFkaXRpb25hbCBsaW5rZXJzIGRlZmluZWQgdGhlIHN5bWJvbAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ldGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gIEhvd2V2ZXIsIEFOU0kgQyByZXF1aXJlcyB0aGF0IHRoZSB1c2VyIGJlIGFibGUgdG8gdXNlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmV0ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGEgZnVuY3Rpb24gbmFtZSB3aXRob3V0IGVuY291bnRlcmluZyBhbiBlcnJvci4gIFRoZQorPGNvZGU+UFJPVklERTwvY29kZT4ga2V5d29yZCBtYXkgYmUgdXNlZCB0byBkZWZpbmUgYSBzeW1ib2wsIHN1Y2ggYXMKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZXRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9ubHkgaWYgaXQgaXMgcmVmZXJlbmNlZCBidXQgbm90IGRlZmluZWQuICBUaGUgc3ludGF4IGlzCis8Y29kZT5QUk9WSURFKDwvY29kZT48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiA9IDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4pPC9jb2RlPi4KKworICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzaW5nIDxjb2RlPlBST1ZJREU8L2NvZGU+IHRvIGRlZmluZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmV0ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87OgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFNFQ1RJT05TCisgICAgIHsKKyAgICAgICAudGV4dCA6CisgICAgICAgICB7CisgICAgICAgICAgICooLnRleHQpCisgICAgICAgICAgIF9ldGV4dCA9IC47CisgICAgICAgICAgIFBST1ZJREUoZXRleHQgPSAuKTsKKyAgICAgICAgIH0KKyAgICAgfQorPC9wcmU+CisgICA8cD5JbiB0aGlzIGV4YW1wbGUsIGlmIHRoZSBwcm9ncmFtIGRlZmluZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fZXRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgKHdpdGggYSBsZWFkaW5nCit1bmRlcnNjb3JlKSwgdGhlIGxpbmtlciB3aWxsIGdpdmUgYSBtdWx0aXBsZSBkZWZpbml0aW9uIGVycm9yLiAgSWYsIG9uCit0aGUgb3RoZXIgaGFuZCwgdGhlIHByb2dyYW0gZGVmaW5lcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmV0ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87ICh3aXRoIG5vIGxlYWRpbmcKK3VuZGVyc2NvcmUpLCB0aGUgbGlua2VyIHdpbGwgc2lsZW50bHkgdXNlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBwcm9ncmFtLiAKK0lmIHRoZSBwcm9ncmFtIHJlZmVyZW5jZXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5ldGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBidXQgZG9lcyBub3QgZGVmaW5lIGl0LCB0aGUKK2xpbmtlciB3aWxsIHVzZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgbGlua2VyIHNjcmlwdC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvUFJPVklERV8wMDVmSElEREVOLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9QUk9WSURFXzAwNWZISURERU4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjkxNjFmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvUFJPVklERV8wMDVmSElEREVOLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UFJPVklERV9ISURERU4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFzc2lnbm1lbnRzLmh0bWwjQXNzaWdubWVudHMiIHRpdGxlPSJBc3NpZ25tZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBST1ZJREUuaHRtbCNQUk9WSURFIiB0aXRsZT0iUFJPVklERSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNvdXJjZS1Db2RlLVJlZmVyZW5jZS5odG1sI1NvdXJjZS1Db2RlLVJlZmVyZW5jZSIgdGl0bGU9IlNvdXJjZSBDb2RlIFJlZmVyZW5jZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUFJPVklERV9ISURERU4iPjwvYT4KKzxhIG5hbWU9IlBST1ZJREVfMDA1ZkhJRERFTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTb3VyY2UtQ29kZS1SZWZlcmVuY2UuaHRtbCNTb3VyY2UtQ29kZS1SZWZlcmVuY2UiPlNvdXJjZSBDb2RlIFJlZmVyZW5jZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBST1ZJREUuaHRtbCNQUk9WSURFIj5QUk9WSURFPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNBc3NpZ25tZW50cyI+QXNzaWdubWVudHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjUuNCBQUk9WSURFX0hJRERFTjwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVBST1ZJREVfMDA1ZkhJRERFTi0zOTgiPjwvYT5TaW1pbGFyIHRvIDxjb2RlPlBST1ZJREU8L2NvZGU+LiAgRm9yIEVMRiB0YXJnZXRlZCBwb3J0cywgdGhlIHN5bWJvbCB3aWxsIGJlCitoaWRkZW4gYW5kIHdvbid0IGJlIGV4cG9ydGVkLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9Qb3dlclBDLUVMRjMyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9Qb3dlclBDLUVMRjMyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2MDAyYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1Bvd2VyUEMtRUxGMzIuaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UG93ZXJQQyBFTEYzMiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTVNQNDMwLmh0bWwjTVNQNDMwIiB0aXRsZT0iTVNQNDMwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iUG93ZXJQQzY0LUVMRjY0Lmh0bWwjUG93ZXJQQzY0LUVMRjY0IiB0aXRsZT0iUG93ZXJQQzY0IEVMRjY0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJQb3dlclBDLUVMRjMyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlBvd2VyUEM2NC1FTEY2NC5odG1sI1Bvd2VyUEM2NC1FTEY2NCI+UG93ZXJQQzY0IEVMRjY0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iTVNQNDMwLmh0bWwjTVNQNDMwIj5NU1A0MzA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50Ij5NYWNoaW5lIERlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuOSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgUG93ZXJQQyAzMi1iaXQgRUxGIFN1cHBvcnQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDLWxvbmctYnJhbmNoZXMtNjI0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHJlbGF4LW9uLVBvd2VyUEMtNjI1Ij48L2E+QnJhbmNoZXMgb24gUG93ZXJQQyBwcm9jZXNzb3JzIGFyZSBsaW1pdGVkIHRvIGEgc2lnbmVkIDI2LWJpdAorZGlzcGxhY2VtZW50LCB3aGljaCBtYXkgcmVzdWx0IGluIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGdpdmluZworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5yZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZXJyb3JzIHdpdGggdmVyeSBsYXJnZSBwcm9ncmFtcy4gCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcmVsYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZW5hYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiB0cmFtcG9saW5lcyB0aGF0IGNhbiBhY2Nlc3MKK3RoZSBlbnRpcmUgMzItYml0IGFkZHJlc3Mgc3BhY2UuICBUaGVzZSB0cmFtcG9saW5lcyBhcmUgaW5zZXJ0ZWQgYXQKK3NlY3Rpb24gYm91bmRhcmllcywgc28gbWF5IG5vdCB0aGVtc2VsdmVzIGJlIHJlYWNoYWJsZSBpZiBhbiBpbnB1dAorc2VjdGlvbiBleGNlZWRzIDMzTSBpbiBzaXplLiAgWW91IG1heSBjb21iaW5lICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcmVsYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdG8gYWRkIHRyYW1wb2xpbmVzIGluIGEgcGFydGlhbCBsaW5rLiAgSW4gdGhhdCBjYXNlCitib3RoIGJyYW5jaGVzIHRvIHVuZGVmaW5lZCBzeW1ib2xzIGFuZCBpbnRlci1zZWN0aW9uIGJyYW5jaGVzIGFyZSBhbHNvCitjb25zaWRlcmVkIHBvdGVudGlhbGx5IG91dCBvZiByYW5nZSwgYW5kIHRyYW1wb2xpbmVzIGluc2VydGVkLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDLUVMRjMyLW9wdGlvbnMtNjI2Ij48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtUG93ZXJQQy1QTFQtNjI3Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkYnNzXzAwMmRwbHQtNjI4Ij48L2E+Cis8ZGw+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tYnNzLXBsdDwvc3Bhbj48L3NhbXA+PGRkPkN1cnJlbnQgUG93ZXJQQyBHQ0MgYWNjZXB0cyBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LW1zZWN1cmUtcGx0PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiB0aGF0CitnZW5lcmF0ZXMgY29kZSBjYXBhYmxlIG9mIHVzaW5nIGEgbmV3ZXIgUExUIGFuZCBHT1QgbGF5b3V0IHRoYXQgaGFzCit0aGUgc2VjdXJpdHkgYWR2YW50YWdlIG9mIG5vIGV4ZWN1dGFibGUgc2VjdGlvbiBldmVyIG5lZWRpbmcgdG8gYmUKK3dyaXRhYmxlIGFuZCBubyB3cml0YWJsZSBzZWN0aW9uIGV2ZXIgYmVpbmcgZXhlY3V0YWJsZS4gIFBvd2VyUEMKKzxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHdpbGwgZ2VuZXJhdGUgdGhpcyBsYXlvdXQsIGluY2x1ZGluZyBzdHVicyB0byBhY2Nlc3MgdGhlCitQTFQsIGlmIGFsbCBpbnB1dCBmaWxlcyAoaW5jbHVkaW5nIHN0YXJ0dXAgYW5kIHN0YXRpYyBsaWJyYXJpZXMpIHdlcmUKK2NvbXBpbGVkIHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbXNlY3VyZS1wbHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tYnNzLXBsdDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3JjZXMgdGhlIG9sZAorQlNTIFBMVCAoYW5kIEdPVCBsYXlvdXQpIHdoaWNoIGNhbiBnaXZlIHNsaWdodGx5IGJldHRlciBwZXJmb3JtYW5jZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkc2VjdXJlXzAwMmRwbHQtNjI5Ij48L2E+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXNlY3VyZS1wbHQ8L3NwYW4+PC9zYW1wPjxkZD48c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB3aWxsIHVzZSB0aGUgbmV3IFBMVCBhbmQgR09UIGxheW91dCBpZiBpdCBpcyBsaW5raW5nIG5ldworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tZnBpYzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1mUElDPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvZGUsIGJ1dCBkb2VzIG5vdCBkbyBzbyBhdXRvbWF0aWNhbGx5Cit3aGVuIGxpbmtpbmcgbm9uLVBJQyBjb2RlLiAgVGhpcyBvcHRpb24gcmVxdWVzdHMgdGhlIG5ldyBQTFQgYW5kIEdPVAorbGF5b3V0LiAgQSB3YXJuaW5nIHdpbGwgYmUgZ2l2ZW4gaWYgc29tZSBvYmplY3QgZmlsZSByZXF1aXJlcyB0aGUgb2xkCitzdHlsZSBCU1MgUExULgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LVBvd2VyUEMtR09ULTYzMCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRzZGF0YV8wMDJkZ290LTYzMSI+PC9hPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zZGF0YS1nb3Q8L3NwYW4+PC9zYW1wPjxkZD5UaGUgbmV3IHNlY3VyZSBQTFQgYW5kIEdPVCBhcmUgcGxhY2VkIGRpZmZlcmVudGx5IHJlbGF0aXZlIHRvIG90aGVyCitzZWN0aW9ucyBjb21wYXJlZCB0byBvbGRlciBCU1MgUExUIGFuZCBHT1QgcGxhY2VtZW50LiAgVGhlIGxvY2F0aW9uIG9mCis8Y29kZT4ucGx0PC9jb2RlPiBtdXN0IGNoYW5nZSBiZWNhdXNlIHRoZSBuZXcgc2VjdXJlIFBMVCBpcyBhbiBpbml0aWFsaXplZAorc2VjdGlvbiB3aGlsZSB0aGUgb2xkIFBMVCBpcyB1bmluaXRpYWxpemVkLiAgVGhlIHJlYXNvbiBmb3IgdGhlCis8Y29kZT4uZ290PC9jb2RlPiBjaGFuZ2UgaXMgbW9yZSBzdWJ0bGU6ICBUaGUgbmV3IHBsYWNlbWVudCBhbGxvd3MKKzxjb2RlPi5nb3Q8L2NvZGU+IHRvIGJlIHJlYWQtb25seSBpbiBhcHBsaWNhdGlvbnMgbGlua2VkIHdpdGgKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LXogcmVscm8gLXogbm93PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgSG93ZXZlciwgdGhpcyBwbGFjZW1lbnQgbWVhbnMgdGhhdAorPGNvZGU+LnNkYXRhPC9jb2RlPiBjYW5ub3QgYWx3YXlzIGJlIHVzZWQgaW4gc2hhcmVkIGxpYnJhcmllcywgYmVjYXVzZSB0aGUKK1Bvd2VyUEMgQUJJIGFjY2Vzc2VzIDxjb2RlPi5zZGF0YTwvY29kZT4gaW4gc2hhcmVkIGxpYnJhcmllcyBmcm9tIHRoZSBHT1QKK3BvaW50ZXIuICAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tc2RhdGEtZ290PC9zcGFuPjwvc2FtcD4mcnNxdW87IGZvcmNlcyB0aGUgb2xkIEdPVCBwbGFjZW1lbnQuICBQb3dlclBDCitHQ0MgZG9lc24ndCB1c2UgPGNvZGU+LnNkYXRhPC9jb2RlPiBpbiBzaGFyZWQgbGlicmFyaWVzLCBzbyB0aGlzIG9wdGlvbiBpcworcmVhbGx5IG9ubHkgdXNlZnVsIGZvciBvdGhlciBjb21waWxlcnMgdGhhdCBtYXkgZG8gc28uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtUG93ZXJQQy1zdHViLXN5bWJvbHMtNjMyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGVtaXRfMDAyZHN0dWJfMDAyZHN5bXMtNjMzIj48L2E+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVtaXQtc3R1Yi1zeW1zPC9zcGFuPjwvc2FtcD48ZGQ+VGhpcyBvcHRpb24gY2F1c2VzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHRvIGxhYmVsIGxpbmtlciBzdHVicyB3aXRoIGEgbG9jYWwKK3N5bWJvbCB0aGF0IGVuY29kZXMgdGhlIHN0dWIgdHlwZSBhbmQgZGVzdGluYXRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtUG93ZXJQQy1UTFMtb3B0aW1pemF0aW9uLTYzNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkdGxzXzAwMmRvcHRpbWl6ZS02MzUiPjwvYT48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tdGxzLW9wdGltaXplPC9zcGFuPjwvc2FtcD48ZGQ+UG93ZXJQQyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBub3JtYWxseSBwZXJmb3JtcyBzb21lIG9wdGltaXphdGlvbiBvZiBjb2RlCitzZXF1ZW5jZXMgdXNlZCB0byBhY2Nlc3MgVGhyZWFkLUxvY2FsIFN0b3JhZ2UuICBVc2UgdGhpcyBvcHRpb24gdG8KK2Rpc2FibGUgdGhlIG9wdGltaXphdGlvbi4gCis8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9Qb3dlclBDNjQtRUxGNjQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1Bvd2VyUEM2NC1FTEY2NC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDcyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9Qb3dlclBDNjQtRUxGNjQuaHRtbApAQCAtMCwwICsxLDE1OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UG93ZXJQQzY0IEVMRjY0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50IiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjUG93ZXJQQy1FTEYzMiIgdGl0bGU9IlBvd2VyUEMgRUxGMzIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTUFUtRUxGLmh0bWwjU1BVLUVMRiIgdGl0bGU9IlNQVSBFTEYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlBvd2VyUEM2NC1FTEY2NCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTUFUtRUxGLmh0bWwjU1BVLUVMRiI+U1BVIEVMRjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBvd2VyUEMtRUxGMzIuaHRtbCNQb3dlclBDLUVMRjMyIj5Qb3dlclBDIEVMRjMyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCI+TWFjaGluZSBEZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjEwIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBQb3dlclBDNjQgNjQtYml0IEVMRiBTdXBwb3J0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtUG93ZXJQQzY0LUVMRjY0LW9wdGlvbnMtNjM2Ij48L2E+CisgICAgIAorPGEgbmFtZT0iaW5kZXgtUG93ZXJQQzY0LXN0dWItZ3JvdXBpbmctNjM3Ij48L2E+Cis8YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkc3R1Yl8wMDJkZ3JvdXBfMDAyZHNpemUtNjM4Ij48L2E+Cis8ZGw+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3R1Yi1ncm91cC1zaXplPC9zcGFuPjwvc2FtcD48ZGQ+TG9uZyBicmFuY2ggc3R1YnMsIFBMVCBjYWxsIHN0dWJzICBhbmQgVE9DIGFkanVzdGluZyBzdHVicyBhcmUgcGxhY2VkCitieSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBpbiBzdHViIHNlY3Rpb25zIGxvY2F0ZWQgYmV0d2VlbiBncm91cHMgb2YgaW5wdXQgc2VjdGlvbnMuIAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXN0dWItZ3JvdXAtc2l6ZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBvZiBhIGdyb3VwIG9mIGlucHV0CitzZWN0aW9ucyBoYW5kbGVkIGJ5IG9uZSBzdHViIHNlY3Rpb24uICBTaW5jZSBicmFuY2ggb2Zmc2V0cyBhcmUgc2lnbmVkLAorYSBzdHViIHNlY3Rpb24gbWF5IHNlcnZlIHR3byBncm91cHMgb2YgaW5wdXQgc2VjdGlvbnMsIG9uZSBncm91cCBiZWZvcmUKK3RoZSBzdHViIHNlY3Rpb24sIGFuZCBvbmUgZ3JvdXAgYWZ0ZXIgaXQuICBIb3dldmVyLCB3aGVuIHVzaW5nCitjb25kaXRpb25hbCBicmFuY2hlcyB0aGF0IHJlcXVpcmUgc3R1YnMsIGl0IG1heSBiZSBiZXR0ZXIgKGZvciBicmFuY2gKK3ByZWRpY3Rpb24pIHRoYXQgc3R1YiBzZWN0aW9ucyBvbmx5IHNlcnZlIG9uZSBncm91cCBvZiBpbnB1dCBzZWN0aW9ucy4gCitBIG5lZ2F0aXZlIHZhbHVlIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk48L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2hvb3NlcyB0aGlzIHNjaGVtZSwgZW5zdXJpbmcgdGhhdAorYnJhbmNoZXMgdG8gc3R1YnMgYWx3YXlzIHVzZSBhIG5lZ2F0aXZlIG9mZnNldC4gIFR3byBzcGVjaWFsIHZhbHVlcyBvZgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5OPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSByZWNvZ25pemVkLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LTE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGVzZSBib3RoIGluc3RydWN0Cis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0byBhdXRvbWF0aWNhbGx5IHNpemUgaW5wdXQgc2VjdGlvbiBncm91cHMgZm9yIHRoZSBicmFuY2ggdHlwZXMKK2RldGVjdGVkLCB3aXRoIHRoZSBzYW1lIGJlaGF2aW91ciByZWdhcmRpbmcgc3R1YiBwbGFjZW1lbnQgYXMgb3RoZXIKK3Bvc2l0aXZlIG9yIG5lZ2F0aXZlIHZhbHVlcyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPk48L3NwYW4+PC9zYW1wPiZyc3F1bzsgcmVzcGVjdGl2ZWx5LgorCisgICAgIDxwPk5vdGUgdGhhdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tc3R1Yi1ncm91cC1zaXplPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRvZXMgbm90IHNwbGl0IGlucHV0IHNlY3Rpb25zLiAgQQorc2luZ2xlIGlucHV0IHNlY3Rpb24gbGFyZ2VyIHRoYW4gdGhlIGdyb3VwIHNpemUgc3BlY2lmaWVkIHdpbGwgb2YgY291cnNlCitjcmVhdGUgYSBsYXJnZXIgZ3JvdXAgKG9mIG9uZSBzZWN0aW9uKS4gIElmIGlucHV0IHNlY3Rpb25zIGFyZSB0b28KK2xhcmdlLCBpdCBtYXkgbm90IGJlIHBvc3NpYmxlIGZvciBhIGJyYW5jaCB0byByZWFjaCBpdHMgc3R1Yi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDNjQtc3R1Yi1zeW1ib2xzLTYzOSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRlbWl0XzAwMmRzdHViXzAwMmRzeW1zLTY0MCI+PC9hPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1lbWl0LXN0dWItc3ltczwvc3Bhbj48L3NhbXA+PGRkPlRoaXMgb3B0aW9uIGNhdXNlcyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0byBsYWJlbCBsaW5rZXIgc3R1YnMgd2l0aCBhIGxvY2FsCitzeW1ib2wgdGhhdCBlbmNvZGVzIHRoZSBzdHViIHR5cGUgYW5kIGRlc3RpbmF0aW9uLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LVBvd2VyUEM2NC1kb3Qtc3ltYm9scy02NDEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZG90c3ltcy02NDIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGRvdHN5bXMtNjQzIj48L2E+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWRvdHN5bXMsIC0tbm8tZG90c3ltczwvc3Bhbj48L3NhbXA+PGRkPlRoZXNlIHR3byBvcHRpb25zIGNvbnRyb2wgaG93IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGludGVycHJldHMgdmVyc2lvbiBwYXR0ZXJucworaW4gYSB2ZXJzaW9uIHNjcmlwdC4gIE9sZGVyIFBvd2VyUEM2NCBjb21waWxlcnMgZW1pdHRlZCBib3RoIGEKK2Z1bmN0aW9uIGRlc2NyaXB0b3Igc3ltYm9sIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZnVuY3Rpb24sIGFuZCBhCitjb2RlIGVudHJ5IHN5bWJvbCB3aXRoIHRoZSBuYW1lIHByZWZpeGVkIGJ5IGEgZG90ICgmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi48L3NwYW4+PC9zYW1wPiZyc3F1bzspLiAgVG8KK3Byb3Blcmx5IHZlcnNpb24gYSBmdW5jdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgdGhlIHZlcnNpb24gc2NyaXB0IHRodXMgbmVlZHMKK3RvIGNvbnRyb2wgYm90aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIG9wdGlvbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWRvdHN5bXM8L3NwYW4+PC9zYW1wPiZyc3F1bzssIG9uIGJ5IGRlZmF1bHQsIGF1dG9tYXRpY2FsbHkgYWRkcyB0aGUgcmVxdWlyZWQKK2RvdC1wcmVmaXhlZCBwYXR0ZXJucy4gIFVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tZG90c3ltczwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0byBkaXNhYmxlIHRoaXMKK2ZlYXR1cmUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtUG93ZXJQQzY0LVRMUy1vcHRpbWl6YXRpb24tNjQ0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR0bHNfMDAyZG9wdGltaXplLTY0NSI+PC9hPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby10bHMtb3B0aW1pemU8L3NwYW4+PC9zYW1wPjxkZD5Qb3dlclBDNjQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gbm9ybWFsbHkgcGVyZm9ybXMgc29tZSBvcHRpbWl6YXRpb24gb2YgY29kZQorc2VxdWVuY2VzIHVzZWQgdG8gYWNjZXNzIFRocmVhZC1Mb2NhbCBTdG9yYWdlLiAgVXNlIHRoaXMgb3B0aW9uIHRvCitkaXNhYmxlIHRoZSBvcHRpbWl6YXRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtUG93ZXJQQzY0LU9QRC1vcHRpbWl6YXRpb24tNjQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRvcGRfMDAyZG9wdGltaXplLTY0NyI+PC9hPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1vcGQtb3B0aW1pemU8L3NwYW4+PC9zYW1wPjxkZD5Qb3dlclBDNjQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gbm9ybWFsbHkgcmVtb3ZlcyA8Y29kZT4ub3BkPC9jb2RlPiBzZWN0aW9uIGVudHJpZXMKK2NvcnJlc3BvbmRpbmcgdG8gZGVsZXRlZCBsaW5rLW9uY2UgZnVuY3Rpb25zLCBvciBmdW5jdGlvbnMgcmVtb3ZlZCBieQordGhlIGFjdGlvbiBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZ2Mtc2VjdGlvbnM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3IgbGlua2VyIHNjcmlwdCA8Y29kZT4vRElTQ0FSRC88L2NvZGU+LiAKK1VzZSB0aGlzIG9wdGlvbiB0byBkaXNhYmxlIDxjb2RlPi5vcGQ8L2NvZGU+IG9wdGltaXphdGlvbi4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDNjQtT1BELXNwYWNpbmctNjQ4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vbl8wMDJkb3ZlcmxhcHBpbmdfMDAyZG9wZC02NDkiPjwvYT48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm9uLW92ZXJsYXBwaW5nLW9wZDwvc3Bhbj48L3NhbXA+PGRkPlNvbWUgUG93ZXJQQzY0IGNvbXBpbGVycyBoYXZlIGFuIG9wdGlvbiB0byBnZW5lcmF0ZSBjb21wcmVzc2VkCis8Y29kZT4ub3BkPC9jb2RlPiBlbnRyaWVzIHNwYWNlZCAxNiBieXRlcyBhcGFydCwgb3ZlcmxhcHBpbmcgdGhlIHRoaXJkIHdvcmQsCit0aGUgc3RhdGljIGNoYWluIHBvaW50ZXIgKHVudXNlZCBpbiBDKSB3aXRoIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBuZXh0CitlbnRyeS4gIFRoaXMgb3B0aW9uIGV4cGFuZHMgc3VjaCBlbnRyaWVzIHRvIHRoZSBmdWxsIDI0IGJ5dGVzLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LVBvd2VyUEM2NC1UT0Mtb3B0aW1pemF0aW9uLTY1MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkdG9jXzAwMmRvcHRpbWl6ZS02NTEiPjwvYT48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tdG9jLW9wdGltaXplPC9zcGFuPjwvc2FtcD48ZGQ+UG93ZXJQQzY0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IG5vcm1hbGx5IHJlbW92ZXMgdW51c2VkIDxjb2RlPi50b2M8L2NvZGU+IHNlY3Rpb24KK2VudHJpZXMuICBTdWNoIGVudHJpZXMgYXJlIGRldGVjdGVkIGJ5IGV4YW1pbmluZyByZWxvY2F0aW9ucyB0aGF0CityZWZlcmVuY2UgdGhlIFRPQyBpbiBjb2RlIHNlY3Rpb25zLiAgQSByZWxvYyBpbiBhIGRlbGV0ZWQgY29kZSBzZWN0aW9uCittYXJrcyBhIFRPQyB3b3JkIGFzIHVubmVlZGVkLCB3aGlsZSBhIHJlbG9jIGluIGEga2VwdCBjb2RlIHNlY3Rpb24KK21hcmtzIGEgVE9DIHdvcmQgYXMgbmVlZGVkLiAgU2luY2UgdGhlIFRPQyBtYXkgcmVmZXJlbmNlIGl0c2VsZiwgVE9DCityZWxvY3MgYXJlIGFsc28gZXhhbWluZWQuICBUT0Mgd29yZHMgbWFya2VkIGFzIGJvdGggbmVlZGVkIGFuZAordW5uZWVkZWQgd2lsbCBvZiBjb3Vyc2UgYmUga2VwdC4gIFRPQyB3b3JkcyB3aXRob3V0IGFueSByZWZlcmVuY2luZworcmVsb2MgYXJlIGFzc3VtZWQgdG8gYmUgcGFydCBvZiBhIG11bHRpLXdvcmQgZW50cnksIGFuZCBhcmUga2VwdCBvcgorZGlzY2FyZGVkIGFzIHBlciB0aGUgbmVhcmVzdCBtYXJrZWQgcHJlY2VkaW5nIHdvcmQuICBUaGlzIHdvcmtzCityZWxpYWJseSBmb3IgY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUsIGJ1dCBtYXkgYmUgaW5jb3JyZWN0IGlmIGFzc2VtYmx5Citjb2RlIGlzIHVzZWQgdG8gaW5zZXJ0IFRPQyBlbnRyaWVzLiAgVXNlIHRoaXMgb3B0aW9uIHRvIGRpc2FibGUgdGhlCitvcHRpbWl6YXRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtUG93ZXJQQzY0LW11bHRpXzAwMmRUT0MtNjUyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmRtdWx0aV8wMDJkdG9jLTY1MyI+PC9hPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1uby1tdWx0aS10b2M8L3NwYW4+PC9zYW1wPjxkZD5JZiBnaXZlbiBhbnkgdG9jIG9wdGlvbiBiZXNpZGVzIDxjb2RlPi1tY21vZGVsPW1lZGl1bTwvY29kZT4gb3IKKzxjb2RlPi1tY21vZGVsPWxhcmdlPC9jb2RlPiwgUG93ZXJQQzY0IEdDQyBnZW5lcmF0ZXMgY29kZSBmb3IgYSBUT0MgbW9kZWwKK3doZXJlIFRPQworZW50cmllcyBhcmUgYWNjZXNzZWQgd2l0aCBhIDE2LWJpdCBvZmZzZXQgZnJvbSByMi4gIFRoaXMgbGltaXRzIHRoZQordG90YWwgVE9DIHNpemUgdG8gNjRLLiAgUG93ZXJQQzY0IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGV4dGVuZHMgdGhpcyBsaW1pdCBieQorZ3JvdXBpbmcgY29kZSBzZWN0aW9ucyBzdWNoIHRoYXQgZWFjaCBncm91cCB1c2VzIGxlc3MgdGhhbiA2NEsgZm9yIGl0cworVE9DIGVudHJpZXMsIHRoZW4gaW5zZXJ0cyByMiBhZGp1c3Rpbmcgc3R1YnMgYmV0d2VlbiBpbnRlci1ncm91cAorY2FsbHMuICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBkb2VzIG5vdCBzcGxpdCBhcGFydCBpbnB1dCBzZWN0aW9ucywgc28gY2Fubm90CitoZWxwIGlmIGEgc2luZ2xlIGlucHV0IGZpbGUgaGFzIGEgPGNvZGU+LnRvYzwvY29kZT4gc2VjdGlvbiB0aGF0IGV4Y2VlZHMKKzY0SywgbW9zdCBsaWtlbHkgZnJvbSBsaW5raW5nIG11bHRpcGxlIGZpbGVzIHdpdGggPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkIC1yPC9zcGFuPjwvc2FtcD4uIAorVXNlIHRoaXMgb3B0aW9uIHRvIHR1cm4gb2ZmIHRoaXMgZmVhdHVyZS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDNjQtVE9DLXNvcnRpbmctNjU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZG5vXzAwMmR0b2NfMDAyZHNvcnQtNjU1Ij48L2E+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLXRvYy1zb3J0PC9zcGFuPjwvc2FtcD48ZGQ+QnkgZGVmYXVsdCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gc29ydHMgVE9DIHNlY3Rpb25zIHNvIHRoYXQgdGhvc2Ugd2hvc2UgZmlsZQoraGFwcGVucyB0byBoYXZlIGEgc2VjdGlvbiBjYWxsZWQgPGNvZGU+LmluaXQ8L2NvZGU+IG9yIDxjb2RlPi5maW5pPC9jb2RlPiBhcmUKK3BsYWNlZCBmaXJzdCwgZm9sbG93ZWQgYnkgVE9DIHNlY3Rpb25zIHJlZmVyZW5jZWQgYnkgY29kZSBnZW5lcmF0ZWQKK3dpdGggUG93ZXJQQzY0IGdjYydzIDxjb2RlPi1tY21vZGVsPXNtYWxsPC9jb2RlPiwgYW5kIGxhc3RseSBUT0Mgc2VjdGlvbnMKK3JlZmVyZW5jZWQgb25seSBieSBjb2RlIGdlbmVyYXRlZCB3aXRoIFBvd2VyUEM2NCBnY2MncworPGNvZGU+LW1jbW9kZWw9bWVkaXVtPC9jb2RlPiBvciA8Y29kZT4tbWNtb2RlbD1sYXJnZTwvY29kZT4gb3B0aW9ucy4gIERvaW5nIHRoaXMKK3Jlc3VsdHMgaW4gYmV0dGVyIFRPQyBncm91cGluZyBmb3IgbXVsdGktVE9DLiAgVXNlIHRoaXMgb3B0aW9uIHRvIHR1cm4KK29mZiB0aGlzIGZlYXR1cmUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtUG93ZXJQQzY0LVBMVC1zdHViLWFsaWdubWVudC02NTYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkcGx0XzAwMmRhbGlnbi02NTciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHBsdF8wMDJkYWxpZ24tNjU4Ij48L2E+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXBsdC1hbGlnbjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tcGx0LWFsaWduPC9zcGFuPjwvc2FtcD48ZGQ+VXNlIHRoZXNlIG9wdGlvbnMgdG8gY29udHJvbCB3aGV0aGVyIGluZGl2aWR1YWwgUExUIGNhbGwgc3R1YnMgYXJlCithbGlnbmVkIHRvIGEgMzItYnl0ZSBib3VuZGFyeSwgb3IgdG8gdGhlIHNwZWNpZmllZCBwb3dlciBvZiB0d28KK2JvdW5kYXJ5IHdoZW4gdXNpbmcgPGNvZGU+LS1wbHQtYWxpZ249PC9jb2RlPi4gIEJ5IGRlZmF1bHQgUExUIGNhbGwgc3R1YnMKK2FyZSBwYWNrZWQgdGlnaHRseS4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDNjQtUExULWNhbGwtc3R1Yi1zdGF0aWMtY2hhaW4tNjU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHBsdF8wMDJkc3RhdGljXzAwMmRjaGFpbi02NjAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHBsdF8wMDJkc3RhdGljXzAwMmRjaGFpbi02NjEiPjwvYT48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tcGx0LXN0YXRpYy1jaGFpbjwvc3Bhbj48L3NhbXA+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbm8tcGx0LXN0YXRpYy1jaGFpbjwvc3Bhbj48L3NhbXA+PGRkPlVzZSB0aGVzZSBvcHRpb25zIHRvIGNvbnRyb2wgd2hldGhlciBQTFQgY2FsbCBzdHVicyBsb2FkIHRoZSBzdGF0aWMKK2NoYWluIHBvaW50ZXIgKHIxMSkuICA8Y29kZT5sZDwvY29kZT4gZGVmYXVsdHMgdG8gbm90IGxvYWRpbmcgdGhlIHN0YXRpYworY2hhaW4gc2luY2UgdGhlcmUgaXMgbmV2ZXIgYW55IG5lZWQgdG8gZG8gc28gb24gYSBQTFQgY2FsbC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1Qb3dlclBDNjQtUExULWNhbGwtc3R1Yi10aHJlYWQtc2FmZXR5LTY2MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRwbHRfMDAyZHRocmVhZF8wMDJkc2FmZS02NjMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZHBsdF8wMDJkdGhyZWFkXzAwMmRzYWZlLTY2NCI+PC9hPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wbHQtdGhyZWFkLXNhZmU8L3NwYW4+PC9zYW1wPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLXRocmVhZC1zYWZlPC9zcGFuPjwvc2FtcD48ZGQ+V2l0aCBwb3dlcjcncyB3ZWFrbHkgb3JkZXJlZCBtZW1vcnkgbW9kZWwsIGl0IGlzIHBvc3NpYmxlIHdoZW4gdXNpbmcKK2xhenkgYmluZGluZyBmb3IgbGQuc28gdG8gdXBkYXRlIGEgcGx0IGVudHJ5IGluIG9uZSB0aHJlYWQgYW5kIGhhdmUKK2Fub3RoZXIgdGhyZWFkIHNlZSB0aGUgaW5kaXZpZHVhbCBwbHQgZW50cnkgd29yZHMgdXBkYXRlIGluIHRoZSB3cm9uZworb3JkZXIsIGRlc3BpdGUgbGQuc28gY2FyZWZ1bGx5IHdyaXRpbmcgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgYW5kIHVzaW5nCittZW1vcnkgd3JpdGUgYmFycmllcnMuICBUbyBhdm9pZCB0aGlzIHdlIG5lZWQgc29tZSBzb3J0IG9mIHJlYWQKK2JhcnJpZXIgaW4gdGhlIGNhbGwgc3R1Yiwgb3IgdXNlIExEX0JJTkRfTk9XPTEuICBCeSBkZWZhdWx0LCA8Y29kZT5sZDwvY29kZT4KK2xvb2tzIGZvciBjYWxscyB0byBjb21tb25seSB1c2VkIGZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSB0aHJlYWRzLCBhbmQgaWYKK3NlZW4sIGFkZHMgdGhlIG5lY2Vzc2FyeSBiYXJyaWVycy4gIFVzZSB0aGVzZSBvcHRpb25zIHRvIGNoYW5nZSB0aGUKK2RlZmF1bHQgYmVoYXZpb3VyLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1JFR0lPTl8wMDVmQUxJQVMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1JFR0lPTl8wMDVmQUxJQVMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWZmZjRlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvUkVHSU9OXzAwNWZBTElBUy5odG1sCkBAIC0wLDAgKzEsMTg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SRUdJT05fQUxJQVMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNpbXBsZS1Db21tYW5kcy5odG1sI1NpbXBsZS1Db21tYW5kcyIgdGl0bGU9IlNpbXBsZSBDb21tYW5kcyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkZvcm1hdC1Db21tYW5kcy5odG1sI0Zvcm1hdC1Db21tYW5kcyIgdGl0bGU9IkZvcm1hdCBDb21tYW5kcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNNaXNjZWxsYW5lb3VzLUNvbW1hbmRzIiB0aXRsZT0iTWlzY2VsbGFuZW91cyBDb21tYW5kcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUkVHSU9OX0FMSUFTIj48L2E+Cis8YSBuYW1lPSJSRUdJT05fMDA1ZkFMSUFTIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1pc2NlbGxhbmVvdXMtQ29tbWFuZHMuaHRtbCNNaXNjZWxsYW5lb3VzLUNvbW1hbmRzIj5NaXNjZWxsYW5lb3VzIENvbW1hbmRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iRm9ybWF0LUNvbW1hbmRzLmh0bWwjRm9ybWF0LUNvbW1hbmRzIj5Gb3JtYXQgQ29tbWFuZHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTaW1wbGUtQ29tbWFuZHMuaHRtbCNTaW1wbGUtQ29tbWFuZHMiPlNpbXBsZSBDb21tYW5kczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjMuNC40IEFzc2lnbiBhbGlhcyBuYW1lcyB0byBtZW1vcnkgcmVnaW9uczwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LVJFR0lPTl8wMDVmQUxJQVNfMDAyOF8wMDQwdmFyXzAwN2JhbGlhc18wMDdkXzAwMmMtXzAwNDB2YXJfMDA3YnJlZ2lvbl8wMDdkXzAwMjktMzc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVnaW9uLWFsaWFzLTM3NSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZ2lvbi1uYW1lcy0zNzYiPjwvYT4KK0FsaWFzIG5hbWVzIGNhbiBiZSBhZGRlZCB0byBleGlzdGluZyBtZW1vcnkgcmVnaW9ucyBjcmVhdGVkIHdpdGggdGhlCis8YSBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiPk1FTU9SWTwvYT4gY29tbWFuZC4gIEVhY2ggbmFtZSBjb3JyZXNwb25kcyB0byBhdCBtb3N0IG9uZSBtZW1vcnkgcmVnaW9uLgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgUkVHSU9OX0FMSUFTKDx2YXI+YWxpYXM8L3Zhcj4sIDx2YXI+cmVnaW9uPC92YXI+KQorPC9wcmU+CisgICA8cD5UaGUgPGNvZGU+UkVHSU9OX0FMSUFTPC9jb2RlPiBmdW5jdGlvbiBjcmVhdGVzIGFuIGFsaWFzIG5hbWUgPHZhcj5hbGlhczwvdmFyPiBmb3IgdGhlCittZW1vcnkgcmVnaW9uIDx2YXI+cmVnaW9uPC92YXI+LiAgVGhpcyBhbGxvd3MgYSBmbGV4aWJsZSBtYXBwaW5nIG9mIG91dHB1dCBzZWN0aW9ucwordG8gbWVtb3J5IHJlZ2lvbnMuICBBbiBleGFtcGxlIGZvbGxvd3MuCisKKyAgIDxwPlN1cHBvc2Ugd2UgaGF2ZSBhbiBhcHBsaWNhdGlvbiBmb3IgZW1iZWRkZWQgc3lzdGVtcyB3aGljaCBjb21lIHdpdGggdmFyaW91cworbWVtb3J5IHN0b3JhZ2UgZGV2aWNlcy4gIEFsbCBoYXZlIGEgZ2VuZXJhbCBwdXJwb3NlLCB2b2xhdGlsZSBtZW1vcnkgPGNvZGU+UkFNPC9jb2RlPgordGhhdCBhbGxvd3MgY29kZSBleGVjdXRpb24gb3IgZGF0YSBzdG9yYWdlLiAgU29tZSBtYXkgaGF2ZSBhIHJlYWQtb25seSwKK25vbi12b2xhdGlsZSBtZW1vcnkgPGNvZGU+Uk9NPC9jb2RlPiB0aGF0IGFsbG93cyBjb2RlIGV4ZWN1dGlvbiBhbmQgcmVhZC1vbmx5IGRhdGEKK2FjY2Vzcy4gIFRoZSBsYXN0IHZhcmlhbnQgaXMgYSByZWFkLW9ubHksIG5vbi12b2xhdGlsZSBtZW1vcnkgPGNvZGU+Uk9NMjwvY29kZT4gd2l0aAorcmVhZC1vbmx5IGRhdGEgYWNjZXNzIGFuZCBubyBjb2RlIGV4ZWN1dGlvbiBjYXBhYmlsaXR5LiAgV2UgaGF2ZSBmb3VyIG91dHB1dAorc2VjdGlvbnM6CisKKyAgICAgPHVsPgorPGxpPjxjb2RlPi50ZXh0PC9jb2RlPiBwcm9ncmFtIGNvZGU7Cis8bGk+PGNvZGU+LnJvZGF0YTwvY29kZT4gcmVhZC1vbmx5IGRhdGE7Cis8bGk+PGNvZGU+LmRhdGE8L2NvZGU+IHJlYWQtd3JpdGUgaW5pdGlhbGl6ZWQgZGF0YTsKKzxsaT48Y29kZT4uYnNzPC9jb2RlPiByZWFkLXdyaXRlIHplcm8gaW5pdGlhbGl6ZWQgZGF0YS4gCis8L3VsPgorCisgICA8cD5UaGUgZ29hbCBpcyB0byBwcm92aWRlIGEgbGlua2VyIGNvbW1hbmQgZmlsZSB0aGF0IGNvbnRhaW5zIGEgc3lzdGVtIGluZGVwZW5kZW50CitwYXJ0IGRlZmluaW5nIHRoZSBvdXRwdXQgc2VjdGlvbnMgYW5kIGEgc3lzdGVtIGRlcGVuZGVudCBwYXJ0IG1hcHBpbmcgdGhlCitvdXRwdXQgc2VjdGlvbnMgdG8gdGhlIG1lbW9yeSByZWdpb25zIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLiAgT3VyIGVtYmVkZGVkCitzeXN0ZW1zIGNvbWUgd2l0aCB0aHJlZSBkaWZmZXJlbnQgbWVtb3J5IHNldHVwcyA8Y29kZT5BPC9jb2RlPiwgPGNvZGU+QjwvY29kZT4gYW5kCis8Y29kZT5DPC9jb2RlPjoKKyAgIDxwPjx0YWJsZSBzdW1tYXJ5PSIiPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5TZWN0aW9uIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5WYXJpYW50IEEgPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlZhcmlhbnQgQiA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+VmFyaWFudCBDCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4udGV4dCA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+UkFNIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5ST00gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlJPTQorPGJyPjwvdGQ+PC90cj48dHIgYWxpZ249ImxlZnQiPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+LnJvZGF0YSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+UkFNIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5ST00gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlJPTTIKKzxicj48L3RkPjwvdHI+PHRyIGFsaWduPSJsZWZ0Ij48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPi5kYXRhIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5SQU0gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlJBTS9ST00gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlJBTS9ST00yCis8YnI+PC90ZD48L3RyPjx0ciBhbGlnbj0ibGVmdCI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj4uYnNzIDwvdGQ+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iMjUlIj5SQU0gPC90ZD48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyNSUiPlJBTSA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjI1JSI+UkFNCisgICA8YnI+PC90ZD48L3RyPjwvdGFibGU+CitUaGUgbm90YXRpb24gPGNvZGU+UkFNL1JPTTwvY29kZT4gb3IgPGNvZGU+UkFNL1JPTTI8L2NvZGU+IG1lYW5zIHRoYXQgdGhpcyBzZWN0aW9uIGlzCitsb2FkZWQgaW50byByZWdpb24gPGNvZGU+Uk9NPC9jb2RlPiBvciA8Y29kZT5ST00yPC9jb2RlPiByZXNwZWN0aXZlbHkuICBQbGVhc2Ugbm90ZSB0aGF0Cit0aGUgbG9hZCBhZGRyZXNzIG9mIHRoZSA8Y29kZT4uZGF0YTwvY29kZT4gc2VjdGlvbiBzdGFydHMgaW4gYWxsIHRocmVlIHZhcmlhbnRzIGF0Cit0aGUgZW5kIG9mIHRoZSA8Y29kZT4ucm9kYXRhPC9jb2RlPiBzZWN0aW9uLgorCisgICA8cD5UaGUgYmFzZSBsaW5rZXIgc2NyaXB0IHRoYXQgZGVhbHMgd2l0aCB0aGUgb3V0cHV0IHNlY3Rpb25zIGZvbGxvd3MuICBJdAoraW5jbHVkZXMgdGhlIHN5c3RlbSBkZXBlbmRlbnQgPGNvZGU+bGlua2NtZHMubWVtb3J5PC9jb2RlPiBmaWxlIHRoYXQgZGVzY3JpYmVzIHRoZQorbWVtb3J5IGxheW91dDoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBJTkNMVURFIGxpbmtjbWRzLm1lbW9yeQorICAgICAKKyAgICAgU0VDVElPTlMKKyAgICAgICB7CisgICAgICAgICAudGV4dCA6CisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAqKC50ZXh0KQorICAgICAgICAgICB9ICZndDsgUkVHSU9OX1RFWFQKKyAgICAgICAgIC5yb2RhdGEgOgorICAgICAgICAgICB7CisgICAgICAgICAgICAgKigucm9kYXRhKQorICAgICAgICAgICAgIHJvZGF0YV9lbmQgPSAuOworICAgICAgICAgICB9ICZndDsgUkVHSU9OX1JPREFUQQorICAgICAgICAgLmRhdGEgOiBBVCAocm9kYXRhX2VuZCkKKyAgICAgICAgICAgeworICAgICAgICAgICAgIGRhdGFfc3RhcnQgPSAuOworICAgICAgICAgICAgICooLmRhdGEpCisgICAgICAgICAgIH0gJmd0OyBSRUdJT05fREFUQQorICAgICAgICAgZGF0YV9zaXplID0gU0laRU9GKC5kYXRhKTsKKyAgICAgICAgIGRhdGFfbG9hZF9zdGFydCA9IExPQURBRERSKC5kYXRhKTsKKyAgICAgICAgIC5ic3MgOgorICAgICAgICAgICB7CisgICAgICAgICAgICAgKiguYnNzKQorICAgICAgICAgICB9ICZndDsgUkVHSU9OX0JTUworICAgICAgIH0KKzwvcHJlPgorICAgPHA+Tm93IHdlIG5lZWQgdGhyZWUgZGlmZmVyZW50IDxjb2RlPmxpbmtjbWRzLm1lbW9yeTwvY29kZT4gZmlsZXMgdG8gZGVmaW5lIG1lbW9yeQorcmVnaW9ucyBhbmQgYWxpYXMgbmFtZXMuICBUaGUgY29udGVudCBvZiA8Y29kZT5saW5rY21kcy5tZW1vcnk8L2NvZGU+IGZvciB0aGUgdGhyZWUKK3ZhcmlhbnRzIDxjb2RlPkE8L2NvZGU+LCA8Y29kZT5CPC9jb2RlPiBhbmQgPGNvZGU+QzwvY29kZT46CisgICAgIDxkbD4KKzxkdD48Y29kZT5BPC9jb2RlPjxkZD5IZXJlIGV2ZXJ5dGhpbmcgZ29lcyBpbnRvIHRoZSA8Y29kZT5SQU08L2NvZGU+LgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBNRU1PUlkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgUkFNIDogT1JJR0lOID0gMCwgTEVOR1RIID0gNE0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICBSRUdJT05fQUxJQVMoIlJFR0lPTl9URVhUIiwgUkFNKTsKKyAgICAgICAgICBSRUdJT05fQUxJQVMoIlJFR0lPTl9ST0RBVEEiLCBSQU0pOworICAgICAgICAgIFJFR0lPTl9BTElBUygiUkVHSU9OX0RBVEEiLCBSQU0pOworICAgICAgICAgIFJFR0lPTl9BTElBUygiUkVHSU9OX0JTUyIsIFJBTSk7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5CPC9jb2RlPjxkZD5Qcm9ncmFtIGNvZGUgYW5kIHJlYWQtb25seSBkYXRhIGdvIGludG8gdGhlIDxjb2RlPlJPTTwvY29kZT4uICBSZWFkLXdyaXRlIGRhdGEgZ29lcworaW50byB0aGUgPGNvZGU+UkFNPC9jb2RlPi4gIEFuIGltYWdlIG9mIHRoZSBpbml0aWFsaXplZCBkYXRhIGlzIGxvYWRlZCBpbnRvIHRoZQorPGNvZGU+Uk9NPC9jb2RlPiBhbmQgd2lsbCBiZSBjb3BpZWQgZHVyaW5nIHN5c3RlbSBzdGFydCBpbnRvIHRoZSA8Y29kZT5SQU08L2NvZGU+LgorICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBNRU1PUlkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgUk9NIDogT1JJR0lOID0gMCwgTEVOR1RIID0gM00KKyAgICAgICAgICAgICAgUkFNIDogT1JJR0lOID0gMHgxMDAwMDAwMCwgTEVOR1RIID0gMU0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICBSRUdJT05fQUxJQVMoIlJFR0lPTl9URVhUIiwgUk9NKTsKKyAgICAgICAgICBSRUdJT05fQUxJQVMoIlJFR0lPTl9ST0RBVEEiLCBST00pOworICAgICAgICAgIFJFR0lPTl9BTElBUygiUkVHSU9OX0RBVEEiLCBSQU0pOworICAgICAgICAgIFJFR0lPTl9BTElBUygiUkVHSU9OX0JTUyIsIFJBTSk7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5DPC9jb2RlPjxkZD5Qcm9ncmFtIGNvZGUgZ29lcyBpbnRvIHRoZSA8Y29kZT5ST008L2NvZGU+LiAgUmVhZC1vbmx5IGRhdGEgZ29lcyBpbnRvIHRoZQorPGNvZGU+Uk9NMjwvY29kZT4uICBSZWFkLXdyaXRlIGRhdGEgZ29lcyBpbnRvIHRoZSA8Y29kZT5SQU08L2NvZGU+LiAgQW4gaW1hZ2Ugb2YgdGhlCitpbml0aWFsaXplZCBkYXRhIGlzIGxvYWRlZCBpbnRvIHRoZSA8Y29kZT5ST00yPC9jb2RlPiBhbmQgd2lsbCBiZSBjb3BpZWQgZHVyaW5nCitzeXN0ZW0gc3RhcnQgaW50byB0aGUgPGNvZGU+UkFNPC9jb2RlPi4KKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgTUVNT1JZCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFJPTSA6IE9SSUdJTiA9IDAsIExFTkdUSCA9IDJNCisgICAgICAgICAgICAgIFJPTTIgOiBPUklHSU4gPSAweDEwMDAwMDAwLCBMRU5HVEggPSAxTQorICAgICAgICAgICAgICBSQU0gOiBPUklHSU4gPSAweDIwMDAwMDAwLCBMRU5HVEggPSAxTQorICAgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgIFJFR0lPTl9BTElBUygiUkVHSU9OX1RFWFQiLCBST00pOworICAgICAgICAgIFJFR0lPTl9BTElBUygiUkVHSU9OX1JPREFUQSIsIFJPTTIpOworICAgICAgICAgIFJFR0lPTl9BTElBUygiUkVHSU9OX0RBVEEiLCBSQU0pOworICAgICAgICAgIFJFR0lPTl9BTElBUygiUkVHSU9OX0JTUyIsIFJBTSk7Cis8L3ByZT4KKyAgICAgPC9kbD4KKworICAgPHA+SXQgaXMgcG9zc2libGUgdG8gd3JpdGUgYSBjb21tb24gc3lzdGVtIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgdG8gY29weSB0aGUKKzxjb2RlPi5kYXRhPC9jb2RlPiBzZWN0aW9uIGZyb20gPGNvZGU+Uk9NPC9jb2RlPiBvciA8Y29kZT5ST00yPC9jb2RlPiBpbnRvIHRoZSA8Y29kZT5SQU08L2NvZGU+IGlmCituZWNlc3Nhcnk6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICAKKyAgICAgZXh0ZXJuIGNoYXIgZGF0YV9zdGFydCBbXTsKKyAgICAgZXh0ZXJuIGNoYXIgZGF0YV9zaXplIFtdOworICAgICBleHRlcm4gY2hhciBkYXRhX2xvYWRfc3RhcnQgW107CisgICAgIAorICAgICB2b2lkIGNvcHlfZGF0YSh2b2lkKQorICAgICB7CisgICAgICAgaWYgKGRhdGFfc3RhcnQgIT0gZGF0YV9sb2FkX3N0YXJ0KQorICAgICAgICAgeworICAgICAgICAgICBtZW1jcHkoZGF0YV9zdGFydCwgZGF0YV9sb2FkX3N0YXJ0LCAoc2l6ZV90KSBkYXRhX3NpemUpOworICAgICAgICAgfQorICAgICB9Cis8L3ByZT4KKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1JlcG9ydGluZy1CdWdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9SZXBvcnRpbmctQnVncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTQxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9SZXBvcnRpbmctQnVncy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJlcG9ydGluZyBCdWdzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJGRC5odG1sI0JGRCIgdGl0bGU9IkJGRCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1SSS5odG1sI01SSSIgdGl0bGU9Ik1SSSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUmVwb3J0aW5nLUJ1Z3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTVJJLmh0bWwjTVJJIj5NUkk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJCRkQuaHRtbCNCRkQiPkJGRDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj42IFJlcG9ydGluZyBCdWdzPC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtYnVncy1pbi1fMDA0MGNvbW1hbmRfMDA3YmxkXzAwN2QtNzA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVwb3J0aW5nLWJ1Z3MtaW4tXzAwNDBjb21tYW5kXzAwN2JsZF8wMDdkLTcwNyI+PC9hPgorWW91ciBidWcgcmVwb3J0cyBwbGF5IGFuIGVzc2VudGlhbCByb2xlIGluIG1ha2luZyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiByZWxpYWJsZS4KKworICAgPHA+UmVwb3J0aW5nIGEgYnVnIG1heSBoZWxwIHlvdSBieSBicmluZ2luZyBhIHNvbHV0aW9uIHRvIHlvdXIgcHJvYmxlbSwgb3IKK2l0IG1heSBub3QuICBCdXQgaW4gYW55IGNhc2UgdGhlIHByaW5jaXBhbCBmdW5jdGlvbiBvZiBhIGJ1ZyByZXBvcnQgaXMKK3RvIGhlbHAgdGhlIGVudGlyZSBjb21tdW5pdHkgYnkgbWFraW5nIHRoZSBuZXh0IHZlcnNpb24gb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4KK3dvcmsgYmV0dGVyLiAgQnVnIHJlcG9ydHMgYXJlIHlvdXIgY29udHJpYnV0aW9uIHRvIHRoZSBtYWludGVuYW5jZSBvZgorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPkluIG9yZGVyIGZvciBhIGJ1ZyByZXBvcnQgdG8gc2VydmUgaXRzIHB1cnBvc2UsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitpbmZvcm1hdGlvbiB0aGF0IGVuYWJsZXMgdXMgdG8gZml4IHRoZSBidWcuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJCdWctQ3JpdGVyaWEuaHRtbCNCdWctQ3JpdGVyaWEiPkJ1ZyBDcml0ZXJpYTwvYT46ICAgICAgICAgICAgICAgICBIYXZlIHlvdSBmb3VuZCBhIGJ1Zz8gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJCdWctUmVwb3J0aW5nLmh0bWwjQnVnLVJlcG9ydGluZyI+QnVnIFJlcG9ydGluZzwvYT46ICAgICAgICAgICAgICAgIEhvdyB0byByZXBvcnQgYnVncworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU0VDVElPTlMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NFQ1RJT05TLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyMTRiMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NFQ1RJT05TLmh0bWwKQEAgLTAsMCArMSwxMDEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNFQ1RJT05TIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyIgdGl0bGU9IlNjcmlwdHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJBc3NpZ25tZW50cy5odG1sI0Fzc2lnbm1lbnRzIiB0aXRsZT0iQXNzaWdubWVudHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNRU1PUlkuaHRtbCNNRU1PUlkiIHRpdGxlPSJNRU1PUlkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNFQ1RJT05TIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1FTU9SWS5odG1sI01FTU9SWSI+TUVNT1JZPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNBc3NpZ25tZW50cyI+QXNzaWdubWVudHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyI+U2NyaXB0czwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNiBTRUNUSU9OUyBDb21tYW5kPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU0VDVElPTlMtMzk5Ij48L2E+VGhlIDxjb2RlPlNFQ1RJT05TPC9jb2RlPiBjb21tYW5kIHRlbGxzIHRoZSBsaW5rZXIgaG93IHRvIG1hcCBpbnB1dCBzZWN0aW9ucworaW50byBvdXRwdXQgc2VjdGlvbnMsIGFuZCBob3cgdG8gcGxhY2UgdGhlIG91dHB1dCBzZWN0aW9ucyBpbiBtZW1vcnkuCisKKyAgIDxwPlRoZSBmb3JtYXQgb2YgdGhlIDxjb2RlPlNFQ1RJT05TPC9jb2RlPiBjb21tYW5kIGlzOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFNFQ1RJT05TCisgICAgIHsKKyAgICAgICA8dmFyPnNlY3Rpb25zLWNvbW1hbmQ8L3Zhcj4KKyAgICAgICA8dmFyPnNlY3Rpb25zLWNvbW1hbmQ8L3Zhcj4KKyAgICAgICAuLi4KKyAgICAgfQorPC9wcmU+CisgICA8cD5FYWNoIDx2YXI+c2VjdGlvbnMtY29tbWFuZDwvdmFyPiBtYXkgb2YgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgPHVsPgorPGxpPmFuIDxjb2RlPkVOVFJZPC9jb2RlPiBjb21tYW5kIChzZWUgPGEgaHJlZj0iRW50cnktUG9pbnQuaHRtbCNFbnRyeS1Qb2ludCI+RW50cnkgY29tbWFuZDwvYT4pCis8bGk+YSBzeW1ib2wgYXNzaWdubWVudCAoc2VlIDxhIGhyZWY9IkFzc2lnbm1lbnRzLmh0bWwjQXNzaWdubWVudHMiPkFzc2lnbm1lbnRzPC9hPikKKzxsaT5hbiBvdXRwdXQgc2VjdGlvbiBkZXNjcmlwdGlvbgorPGxpPmFuIG92ZXJsYXkgZGVzY3JpcHRpb24KKzwvdWw+CisKKyAgIDxwPlRoZSA8Y29kZT5FTlRSWTwvY29kZT4gY29tbWFuZCBhbmQgc3ltYm9sIGFzc2lnbm1lbnRzIGFyZSBwZXJtaXR0ZWQgaW5zaWRlIHRoZQorPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmQgZm9yIGNvbnZlbmllbmNlIGluIHVzaW5nIHRoZSBsb2NhdGlvbiBjb3VudGVyIGluCit0aG9zZSBjb21tYW5kcy4gIFRoaXMgY2FuIGFsc28gbWFrZSB0aGUgbGlua2VyIHNjcmlwdCBlYXNpZXIgdG8KK3VuZGVyc3RhbmQgYmVjYXVzZSB5b3UgY2FuIHVzZSB0aG9zZSBjb21tYW5kcyBhdCBtZWFuaW5nZnVsIHBvaW50cyBpbgordGhlIGxheW91dCBvZiB0aGUgb3V0cHV0IGZpbGUuCisKKyAgIDxwPk91dHB1dCBzZWN0aW9uIGRlc2NyaXB0aW9ucyBhbmQgb3ZlcmxheSBkZXNjcmlwdGlvbnMgYXJlIGRlc2NyaWJlZAorYmVsb3cuCisKKyAgIDxwPklmIHlvdSBkbyBub3QgdXNlIGEgPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmQgaW4geW91ciBsaW5rZXIgc2NyaXB0LCB0aGUKK2xpbmtlciB3aWxsIHBsYWNlIGVhY2ggaW5wdXQgc2VjdGlvbiBpbnRvIGFuIGlkZW50aWNhbGx5IG5hbWVkIG91dHB1dAorc2VjdGlvbiBpbiB0aGUgb3JkZXIgdGhhdCB0aGUgc2VjdGlvbnMgYXJlIGZpcnN0IGVuY291bnRlcmVkIGluIHRoZQoraW5wdXQgZmlsZXMuICBJZiBhbGwgaW5wdXQgc2VjdGlvbnMgYXJlIHByZXNlbnQgaW4gdGhlIGZpcnN0IGZpbGUsIGZvcgorZXhhbXBsZSwgdGhlIG9yZGVyIG9mIHNlY3Rpb25zIGluIHRoZSBvdXRwdXQgZmlsZSB3aWxsIG1hdGNoIHRoZSBvcmRlcgoraW4gdGhlIGZpcnN0IGlucHV0IGZpbGUuICBUaGUgZmlyc3Qgc2VjdGlvbiB3aWxsIGJlIGF0IGFkZHJlc3MgemVyby4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURlc2NyaXB0aW9uLmh0bWwjT3V0cHV0LVNlY3Rpb24tRGVzY3JpcHRpb24iPk91dHB1dCBTZWN0aW9uIERlc2NyaXB0aW9uPC9hPjogCU91dHB1dCBzZWN0aW9uIGRlc2NyaXB0aW9uCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJPdXRwdXQtU2VjdGlvbi1OYW1lLmh0bWwjT3V0cHV0LVNlY3Rpb24tTmFtZSI+T3V0cHV0IFNlY3Rpb24gTmFtZTwvYT46IAkJT3V0cHV0IHNlY3Rpb24gbmFtZQorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQWRkcmVzcy5odG1sI091dHB1dC1TZWN0aW9uLUFkZHJlc3MiPk91dHB1dCBTZWN0aW9uIEFkZHJlc3M8L2E+OiAJT3V0cHV0IHNlY3Rpb24gYWRkcmVzcworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iSW5wdXQtU2VjdGlvbi5odG1sI0lucHV0LVNlY3Rpb24iPklucHV0IFNlY3Rpb248L2E+OiAJCUlucHV0IHNlY3Rpb24gZGVzY3JpcHRpb24KKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9Ik91dHB1dC1TZWN0aW9uLURhdGEuaHRtbCNPdXRwdXQtU2VjdGlvbi1EYXRhIj5PdXRwdXQgU2VjdGlvbiBEYXRhPC9hPjogCQlPdXRwdXQgc2VjdGlvbiBkYXRhCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJPdXRwdXQtU2VjdGlvbi1LZXl3b3Jkcy5odG1sI091dHB1dC1TZWN0aW9uLUtleXdvcmRzIj5PdXRwdXQgU2VjdGlvbiBLZXl3b3JkczwvYT46IAlPdXRwdXQgc2VjdGlvbiBrZXl3b3JkcworPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZy5odG1sI091dHB1dC1TZWN0aW9uLURpc2NhcmRpbmciPk91dHB1dCBTZWN0aW9uIERpc2NhcmRpbmc8L2E+OiAJT3V0cHV0IHNlY3Rpb24gZGlzY2FyZGluZworPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiPk91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXM8L2E+OiAJT3V0cHV0IHNlY3Rpb24gYXR0cmlidXRlcworPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iT3ZlcmxheS1EZXNjcmlwdGlvbi5odG1sI092ZXJsYXktRGVzY3JpcHRpb24iPk92ZXJsYXkgRGVzY3JpcHRpb248L2E+OiAJCU92ZXJsYXkgZGVzY3JpcHRpb24KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NQVS1FTEYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NQVS1FTEYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWUzMjFmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU1BVLUVMRi5odG1sCkBAIC0wLDAgKzEsMTAxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TUFUgRUxGIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50IiB0aXRsZT0iTWFjaGluZSBEZXBlbmRlbnQiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiIHRpdGxlPSJQb3dlclBDNjQgRUxGNjQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJUSS1DT0ZGLmh0bWwjVEktQ09GRiIgdGl0bGU9IlRJIENPRkYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNQVS1FTEYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iVEktQ09GRi5odG1sI1RJLUNPRkYiPlRJIENPRkY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPlBvd2VyUEM2NCBFTEY2NDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiPk1hY2hpbmUgRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xMSA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgU1BVIEVMRiBTdXBwb3J0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtU1BVLUVMRi1vcHRpb25zLTY2NSI+PC9hPgorICAgICAKKzxhIG5hbWU9ImluZGV4LVNQVS1wbHVnaW5zLTY2NiI+PC9hPgorPGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZHBsdWdpbi02NjciPjwvYT4KKzxkbD48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1wbHVnaW48L3NwYW4+PC9zYW1wPjxkZD5UaGlzIG9wdGlvbiBtYXJrcyBhbiBleGVjdXRhYmxlIGFzIGEgUElDIHBsdWdpbiBtb2R1bGUuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtU1BVLW92ZXJsYXlzLTY2OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkb3ZlcmxheXMtNjY5Ij48L2E+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLW5vLW92ZXJsYXlzPC9zcGFuPjwvc2FtcD48ZGQ+Tm9ybWFsbHksIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHJlY29nbml6ZXMgY2FsbHMgdG8gZnVuY3Rpb25zIHdpdGhpbiBvdmVybGF5CityZWdpb25zLCBhbmQgcmVkaXJlY3RzIHN1Y2ggY2FsbHMgdG8gYW4gb3ZlcmxheSBtYW5hZ2VyIHZpYSBhIHN0dWIuIAorPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYWxzbyBwcm92aWRlcyBhIGJ1aWx0LWluIG92ZXJsYXkgbWFuYWdlci4gIFRoaXMgb3B0aW9uCit0dXJucyBvZmYgYWxsIHRoaXMgc3BlY2lhbCBvdmVybGF5IGhhbmRsaW5nLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LVNQVS1vdmVybGF5LXN0dWItc3ltYm9scy02NzAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZW1pdF8wMDJkc3R1Yl8wMDJkc3ltcy02NzEiPjwvYT48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZW1pdC1zdHViLXN5bXM8L3NwYW4+PC9zYW1wPjxkZD5UaGlzIG9wdGlvbiBjYXVzZXMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gdG8gbGFiZWwgb3ZlcmxheSBzdHVicyB3aXRoIGEgbG9jYWwKK3N5bWJvbCB0aGF0IGVuY29kZXMgdGhlIHN0dWIgdHlwZSBhbmQgZGVzdGluYXRpb24uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtU1BVLWV4dHJhLW92ZXJsYXktc3R1YnMtNjcyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGV4dHJhXzAwMmRvdmVybGF5XzAwMmRzdHVicy02NzMiPjwvYT48YnI+PGR0PjxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tZXh0cmEtb3ZlcmxheS1zdHViczwvc3Bhbj48L3NhbXA+PGRkPlRoaXMgb3B0aW9uIGNhdXNlcyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB0byBhZGQgb3ZlcmxheSBjYWxsIHN0dWJzIG9uIGFsbAorZnVuY3Rpb24gY2FsbHMgb3V0IG9mIG92ZXJsYXkgcmVnaW9ucy4gIE5vcm1hbGx5IHN0dWJzIGFyZSBub3QgYWRkZWQKK29uIGNhbGxzIHRvIG5vbi1vdmVybGF5IHJlZ2lvbnMuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtU1BVLWxvY2FsLXN0b3JlLXNpemUtNjc0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGxvY2FsXzAwMmRzdG9yZV8wMDNkbG9fMDAzYWhpLTY3NSI+PC9hPjxicj48ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1sb2NhbC1zdG9yZT1sbzpoaTwvc3Bhbj48L3NhbXA+PGRkPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHVzdWFsbHkgY2hlY2tzIHRoYXQgYSBmaW5hbCBleGVjdXRhYmxlIGZvciBTUFUgZml0cyBpbgordGhlIGFkZHJlc3MgcmFuZ2UgMCB0byAyNTZrLiAgVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgdG8gY2hhbmdlIHRoZQorcmFuZ2UuICBEaXNhYmxlIHRoZSBjaGVjayBlbnRpcmVseSB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tbG9jYWwtc3RvcmU9MDowPC9zcGFuPjwvc2FtcD4uCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtU1BVLTY3NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRzdGFja18wMDJkYW5hbHlzaXMtNjc3Ij48L2E+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLXN0YWNrLWFuYWx5c2lzPC9zcGFuPjwvc2FtcD48ZGQ+U1BVIGxvY2FsIHN0b3JlIHNwYWNlIGlzIGxpbWl0ZWQuICBPdmVyLWFsbG9jYXRpb24gb2Ygc3RhY2sgc3BhY2UKK3VubmVjZXNzYXJpbHkgbGltaXRzIHNwYWNlIGF2YWlsYWJsZSBmb3IgY29kZSBhbmQgZGF0YSwgd2hpbGUKK3VuZGVyLWFsbG9jYXRpb24gcmVzdWx0cyBpbiBydW50aW1lIGZhaWx1cmVzLiAgSWYgZ2l2ZW4gdGhpcyBvcHRpb24sCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB3aWxsIHByb3ZpZGUgYW4gZXN0aW1hdGUgb2YgbWF4aW11bSBzdGFjayB1c2FnZS4gCis8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBkb2VzIHRoaXMgYnkgZXhhbWluaW5nIHN5bWJvbHMgaW4gY29kZSBzZWN0aW9ucyB0bworZGV0ZXJtaW5lIHRoZSBleHRlbnRzIG9mIGZ1bmN0aW9ucywgYW5kIGxvb2tpbmcgYXQgZnVuY3Rpb24gcHJvbG9ndWVzCitmb3Igc3RhY2sgYWRqdXN0aW5nIGluc3RydWN0aW9ucy4gIEEgY2FsbC1ncmFwaCBpcyBjcmVhdGVkIGJ5IGxvb2tpbmcKK2ZvciByZWxvY2F0aW9ucyBvbiBicmFuY2ggaW5zdHJ1Y3Rpb25zLiAgVGhlIGdyYXBoIGlzIHRoZW4gc2VhcmNoZWQKK2ZvciB0aGUgbWF4aW11bSBzdGFjayB1c2FnZSBwYXRoLiAgTm90ZSB0aGF0IHRoaXMgYW5hbHlzaXMgZG9lcyBub3QKK2ZpbmQgY2FsbHMgbWFkZSB2aWEgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBkb2VzIG5vdCBoYW5kbGUgcmVjdXJzaW9uCithbmQgb3RoZXIgY3ljbGVzIGluIHRoZSBjYWxsIGdyYXBoLiAgU3RhY2sgdXNhZ2UgbWF5IGJlCit1bmRlci1lc3RpbWF0ZWQgaWYgeW91ciBjb2RlIG1ha2VzIHN1Y2ggY2FsbHMuICBBbHNvLCBzdGFjayB1c2FnZSBmb3IKK2R5bmFtaWMgYWxsb2NhdGlvbiwgZS5nLiBhbGxvY2EsIHdpbGwgbm90IGJlIGRldGVjdGVkLiAgSWYgYSBsaW5rIG1hcAoraXMgcmVxdWVzdGVkLCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGZ1bmN0aW9uJ3Mgc3RhY2sgdXNhZ2UKK2FuZCBjYWxscyB3aWxsIGJlIGdpdmVuLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LVNQVS02NzgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZW1pdF8wMDJkc3RhY2tfMDAyZHN5bXMtNjc5Ij48L2E+PGJyPjxkdD48c2FtcD48c3BhbiBjbGFzcz0ib3B0aW9uIj4tLWVtaXQtc3RhY2stc3ltczwvc3Bhbj48L3NhbXA+PGRkPlRoaXMgb3B0aW9uLCBpZiBnaXZlbiBhbG9uZyB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc3RhY2stYW5hbHlzaXM8L3NwYW4+PC9zYW1wPiB3aWxsIHJlc3VsdAoraW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gZW1pdHRpbmcgc3RhY2sgc2l6aW5nIHN5bWJvbHMgZm9yIGVhY2ggZnVuY3Rpb24uIAorVGhlc2UgdGFrZSB0aGUgZm9ybSA8Y29kZT5fX3N0YWNrXyZsdDtmdW5jdGlvbl9uYW1lJmd0OzwvY29kZT4gZm9yIGdsb2JhbAorZnVuY3Rpb25zLCBhbmQgPGNvZGU+X19zdGFja18mbHQ7bnVtYmVyJmd0O18mbHQ7ZnVuY3Rpb25fbmFtZSZndDs8L2NvZGU+IGZvciBzdGF0aWMKK2Z1bmN0aW9ucy4gIDxjb2RlPiZsdDtudW1iZXImZ3Q7PC9jb2RlPiBpcyB0aGUgc2VjdGlvbiBpZCBpbiBoZXguICBUaGUgdmFsdWUgb2YKK3N1Y2ggc3ltYm9scyBpcyB0aGUgc3RhY2sgcmVxdWlyZW1lbnQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLiAKK1RoZSBzeW1ib2wgc2l6ZSB3aWxsIGJlIHplcm8sIHR5cGUgPGNvZGU+U1RUX05PVFlQRTwvY29kZT4sIGJpbmRpbmcKKzxjb2RlPlNUQl9MT0NBTDwvY29kZT4sIGFuZCBzZWN0aW9uIDxjb2RlPlNITl9BQlM8L2NvZGU+LiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NjcmlwdC1Gb3JtYXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NjcmlwdC1Gb3JtYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTliZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU2NyaXB0LUZvcm1hdC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNjcmlwdCBGb3JtYXQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIiB0aXRsZT0iU2NyaXB0cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJhc2ljLVNjcmlwdC1Db25jZXB0cy5odG1sI0Jhc2ljLVNjcmlwdC1Db25jZXB0cyIgdGl0bGU9IkJhc2ljIFNjcmlwdCBDb25jZXB0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNpbXBsZS1FeGFtcGxlLmh0bWwjU2ltcGxlLUV4YW1wbGUiIHRpdGxlPSJTaW1wbGUgRXhhbXBsZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2NyaXB0LUZvcm1hdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTaW1wbGUtRXhhbXBsZS5odG1sI1NpbXBsZS1FeGFtcGxlIj5TaW1wbGUgRXhhbXBsZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkJhc2ljLVNjcmlwdC1Db25jZXB0cy5odG1sI0Jhc2ljLVNjcmlwdC1Db25jZXB0cyI+QmFzaWMgU2NyaXB0IENvbmNlcHRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiPlNjcmlwdHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjIgTGlua2VyIFNjcmlwdCBGb3JtYXQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1saW5rZXItc2NyaXB0LWZvcm1hdC0zNDQiPjwvYT5MaW5rZXIgc2NyaXB0cyBhcmUgdGV4dCBmaWxlcy4KKworICAgPHA+WW91IHdyaXRlIGEgbGlua2VyIHNjcmlwdCBhcyBhIHNlcmllcyBvZiBjb21tYW5kcy4gIEVhY2ggY29tbWFuZCBpcworZWl0aGVyIGEga2V5d29yZCwgcG9zc2libHkgZm9sbG93ZWQgYnkgYXJndW1lbnRzLCBvciBhbiBhc3NpZ25tZW50IHRvIGEKK3N5bWJvbC4gIFlvdSBtYXkgc2VwYXJhdGUgY29tbWFuZHMgdXNpbmcgc2VtaWNvbG9ucy4gIFdoaXRlc3BhY2UgaXMKK2dlbmVyYWxseSBpZ25vcmVkLgorCisgICA8cD5TdHJpbmdzIHN1Y2ggYXMgZmlsZSBvciBmb3JtYXQgbmFtZXMgY2FuIG5vcm1hbGx5IGJlIGVudGVyZWQgZGlyZWN0bHkuIAorSWYgdGhlIGZpbGUgbmFtZSBjb250YWlucyBhIGNoYXJhY3RlciBzdWNoIGFzIGEgY29tbWEgd2hpY2ggd291bGQKK290aGVyd2lzZSBzZXJ2ZSB0byBzZXBhcmF0ZSBmaWxlIG5hbWVzLCB5b3UgbWF5IHB1dCB0aGUgZmlsZSBuYW1lIGluCitkb3VibGUgcXVvdGVzLiAgVGhlcmUgaXMgbm8gd2F5IHRvIHVzZSBhIGRvdWJsZSBxdW90ZSBjaGFyYWN0ZXIgaW4gYQorZmlsZSBuYW1lLgorCisgICA8cD5Zb3UgbWF5IGluY2x1ZGUgY29tbWVudHMgaW4gbGlua2VyIHNjcmlwdHMganVzdCBhcyBpbiBDLCBkZWxpbWl0ZWQgYnkKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Lyo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ki88L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBBcyBpbiBDLCBjb21tZW50cyBhcmUgc3ludGFjdGljYWxseSBlcXVpdmFsZW50Cit0byB3aGl0ZXNwYWNlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9TY3JpcHRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9TY3JpcHRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1MzYwZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NjcmlwdHMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TY3JpcHRzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIiB0aXRsZT0iSW52b2NhdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVudCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2NyaXB0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50Ij5NYWNoaW5lIERlcGVuZGVudDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjMgTGlua2VyIFNjcmlwdHM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1zY3JpcHRzLTM0MCI+PC9hPjxhIG5hbWU9ImluZGV4LWxpbmtlci1zY3JpcHRzLTM0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbW1hbmQtZmlsZXMtMzQyIj48L2E+RXZlcnkgbGluayBpcyBjb250cm9sbGVkIGJ5IGEgPGRmbj5saW5rZXIgc2NyaXB0PC9kZm4+LiAgVGhpcyBzY3JpcHQgaXMKK3dyaXR0ZW4gaW4gdGhlIGxpbmtlciBjb21tYW5kIGxhbmd1YWdlLgorCisgICA8cD5UaGUgbWFpbiBwdXJwb3NlIG9mIHRoZSBsaW5rZXIgc2NyaXB0IGlzIHRvIGRlc2NyaWJlIGhvdyB0aGUgc2VjdGlvbnMgaW4KK3RoZSBpbnB1dCBmaWxlcyBzaG91bGQgYmUgbWFwcGVkIGludG8gdGhlIG91dHB1dCBmaWxlLCBhbmQgdG8gY29udHJvbAordGhlIG1lbW9yeSBsYXlvdXQgb2YgdGhlIG91dHB1dCBmaWxlLiAgTW9zdCBsaW5rZXIgc2NyaXB0cyBkbyBub3RoaW5nCittb3JlIHRoYW4gdGhpcy4gIEhvd2V2ZXIsIHdoZW4gbmVjZXNzYXJ5LCB0aGUgbGlua2VyIHNjcmlwdCBjYW4gYWxzbworZGlyZWN0IHRoZSBsaW5rZXIgdG8gcGVyZm9ybSBtYW55IG90aGVyIG9wZXJhdGlvbnMsIHVzaW5nIHRoZSBjb21tYW5kcworZGVzY3JpYmVkIGJlbG93LgorCisgICA8cD5UaGUgbGlua2VyIGFsd2F5cyB1c2VzIGEgbGlua2VyIHNjcmlwdC4gIElmIHlvdSBkbyBub3Qgc3VwcGx5IG9uZQoreW91cnNlbGYsIHRoZSBsaW5rZXIgd2lsbCB1c2UgYSBkZWZhdWx0IHNjcmlwdCB0aGF0IGlzIGNvbXBpbGVkIGludG8gdGhlCitsaW5rZXIgZXhlY3V0YWJsZS4gIFlvdSBjYW4gdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tdmVyYm9zZTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uCit0byBkaXNwbGF5IHRoZSBkZWZhdWx0IGxpbmtlciBzY3JpcHQuICBDZXJ0YWluIGNvbW1hbmQgbGluZSBvcHRpb25zLAorc3VjaCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1yPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LU48L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdpbGwgYWZmZWN0IHRoZSBkZWZhdWx0IGxpbmtlciBzY3JpcHQuCisKKyAgIDxwPllvdSBtYXkgc3VwcGx5IHlvdXIgb3duIGxpbmtlciBzY3JpcHQgYnkgdXNpbmcgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LVQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZAorbGluZSBvcHRpb24uICBXaGVuIHlvdSBkbyB0aGlzLCB5b3VyIGxpbmtlciBzY3JpcHQgd2lsbCByZXBsYWNlIHRoZQorZGVmYXVsdCBsaW5rZXIgc2NyaXB0LgorCisgICA8cD5Zb3UgbWF5IGFsc28gdXNlIGxpbmtlciBzY3JpcHRzIGltcGxpY2l0bHkgYnkgbmFtaW5nIHRoZW0gYXMgaW5wdXQgZmlsZXMKK3RvIHRoZSBsaW5rZXIsIGFzIHRob3VnaCB0aGV5IHdlcmUgZmlsZXMgdG8gYmUgbGlua2VkLiAgU2VlIDxhIGhyZWY9IkltcGxpY2l0LUxpbmtlci1TY3JpcHRzLmh0bWwjSW1wbGljaXQtTGlua2VyLVNjcmlwdHMiPkltcGxpY2l0IExpbmtlciBTY3JpcHRzPC9hPi4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkJhc2ljLVNjcmlwdC1Db25jZXB0cy5odG1sI0Jhc2ljLVNjcmlwdC1Db25jZXB0cyI+QmFzaWMgU2NyaXB0IENvbmNlcHRzPC9hPjogCUJhc2ljIExpbmtlciBTY3JpcHQgQ29uY2VwdHMKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlNjcmlwdC1Gb3JtYXQuaHRtbCNTY3JpcHQtRm9ybWF0Ij5TY3JpcHQgRm9ybWF0PC9hPjogCQlMaW5rZXIgU2NyaXB0IEZvcm1hdAorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iU2ltcGxlLUV4YW1wbGUuaHRtbCNTaW1wbGUtRXhhbXBsZSI+U2ltcGxlIEV4YW1wbGU8L2E+OiAJCVNpbXBsZSBMaW5rZXIgU2NyaXB0IEV4YW1wbGUKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IlNpbXBsZS1Db21tYW5kcy5odG1sI1NpbXBsZS1Db21tYW5kcyI+U2ltcGxlIENvbW1hbmRzPC9hPjogCQlTaW1wbGUgTGlua2VyIFNjcmlwdCBDb21tYW5kcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNBc3NpZ25tZW50cyI+QXNzaWdubWVudHM8L2E+OiAJCQlBc3NpZ25pbmcgVmFsdWVzIHRvIFN5bWJvbHMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9IlNFQ1RJT05TLmh0bWwjU0VDVElPTlMiPlNFQ1RJT05TPC9hPjogCQkJU0VDVElPTlMgQ29tbWFuZAorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iTUVNT1JZLmh0bWwjTUVNT1JZIj5NRU1PUlk8L2E+OiAJCQlNRU1PUlkgQ29tbWFuZAorPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iUEhEUlMuaHRtbCNQSERSUyI+UEhEUlM8L2E+OiAJCQlQSERSUyBDb21tYW5kCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJWRVJTSU9OLmh0bWwjVkVSU0lPTiI+VkVSU0lPTjwvYT46IAkJCVZFUlNJT04gQ29tbWFuZAorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPjogCQkJRXhwcmVzc2lvbnMgaW4gTGlua2VyIFNjcmlwdHMKKzxsaT48YSBocmVmPSJJbXBsaWNpdC1MaW5rZXItU2NyaXB0cy5odG1sI0ltcGxpY2l0LUxpbmtlci1TY3JpcHRzIj5JbXBsaWNpdCBMaW5rZXIgU2NyaXB0czwvYT46IAlJbXBsaWNpdCBMaW5rZXIgU2NyaXB0cworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU2ltcGxlLUFzc2lnbm1lbnRzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9TaW1wbGUtQXNzaWdubWVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDViNmJlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU2ltcGxlLUFzc2lnbm1lbnRzLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U2ltcGxlIEFzc2lnbm1lbnRzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJBc3NpZ25tZW50cy5odG1sI0Fzc2lnbm1lbnRzIiB0aXRsZT0iQXNzaWdubWVudHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJISURERU4uaHRtbCNISURERU4iIHRpdGxlPSJISURERU4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNpbXBsZS1Bc3NpZ25tZW50cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJISURERU4uaHRtbCNISURERU4iPkhJRERFTjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkFzc2lnbm1lbnRzLmh0bWwjQXNzaWdubWVudHMiPkFzc2lnbm1lbnRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My41LjEgU2ltcGxlIEFzc2lnbm1lbnRzPC9oND4KKworPHA+WW91IG1heSBhc3NpZ24gdG8gYSBzeW1ib2wgdXNpbmcgYW55IG9mIHRoZSBDIGFzc2lnbm1lbnQgb3BlcmF0b3JzOgorCisgICAgIDxkbD4KKzxkdD48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiA9IDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4gOzwvY29kZT48ZHQ+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gKz0gPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPiA7PC9jb2RlPjxkdD48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiAtPSA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+IDs8L2NvZGU+PGR0Pjx2YXI+c3ltYm9sPC92YXI+PGNvZGU+ICo9IDwvY29kZT48dmFyPmV4cHJlc3Npb248L3Zhcj48Y29kZT4gOzwvY29kZT48ZHQ+PHZhcj5zeW1ib2w8L3Zhcj48Y29kZT4gLz0gPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPiA7PC9jb2RlPjxkdD48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiAmbHQ7Jmx0Oz0gPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPiA7PC9jb2RlPjxkdD48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiAmZ3Q7Jmd0Oz0gPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPiA7PC9jb2RlPjxkdD48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiAmYW1wOz0gPC9jb2RlPjx2YXI+ZXhwcmVzc2lvbjwvdmFyPjxjb2RlPiA7PC9jb2RlPjxkdD48dmFyPnN5bWJvbDwvdmFyPjxjb2RlPiB8PSA8L2NvZGU+PHZhcj5leHByZXNzaW9uPC92YXI+PGNvZGU+IDs8L2NvZGU+PGRkPjwvZGw+CisKKyAgIDxwPlRoZSBmaXJzdCBjYXNlIHdpbGwgZGVmaW5lIDx2YXI+c3ltYm9sPC92YXI+IHRvIHRoZSB2YWx1ZSBvZgorPHZhcj5leHByZXNzaW9uPC92YXI+LiAgSW4gdGhlIG90aGVyIGNhc2VzLCA8dmFyPnN5bWJvbDwvdmFyPiBtdXN0IGFscmVhZHkgYmUKK2RlZmluZWQsIGFuZCB0aGUgdmFsdWUgd2lsbCBiZSBhZGp1c3RlZCBhY2NvcmRpbmdseS4KKworICAgPHA+VGhlIHNwZWNpYWwgc3ltYm9sIG5hbWUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluZGljYXRlcyB0aGUgbG9jYXRpb24gY291bnRlci4gIFlvdQorbWF5IG9ubHkgdXNlIHRoaXMgd2l0aGluIGEgPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmQuICBTZWUgPGEgaHJlZj0iTG9jYXRpb24tQ291bnRlci5odG1sI0xvY2F0aW9uLUNvdW50ZXIiPkxvY2F0aW9uIENvdW50ZXI8L2E+LgorCisgICA8cD5UaGUgc2VtaWNvbG9uIGFmdGVyIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPiBpcyByZXF1aXJlZC4KKworICAgPHA+RXhwcmVzc2lvbnMgYXJlIGRlZmluZWQgYmVsb3c7IHNlZSA8YSBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIj5FeHByZXNzaW9uczwvYT4uCisKKyAgIDxwPllvdSBtYXkgd3JpdGUgc3ltYm9sIGFzc2lnbm1lbnRzIGFzIGNvbW1hbmRzIGluIHRoZWlyIG93biByaWdodCwgb3IgYXMKK3N0YXRlbWVudHMgd2l0aGluIGEgPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmQsIG9yIGFzIHBhcnQgb2YgYW4gb3V0cHV0CitzZWN0aW9uIGRlc2NyaXB0aW9uIGluIGEgPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmQuCisKKyAgIDxwPlRoZSBzZWN0aW9uIG9mIHRoZSBzeW1ib2wgd2lsbCBiZSBzZXQgZnJvbSB0aGUgc2VjdGlvbiBvZiB0aGUKK2V4cHJlc3Npb247IGZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj0iRXhwcmVzc2lvbi1TZWN0aW9uLmh0bWwjRXhwcmVzc2lvbi1TZWN0aW9uIj5FeHByZXNzaW9uIFNlY3Rpb248L2E+LgorCisgICA8cD5IZXJlIGlzIGFuIGV4YW1wbGUgc2hvd2luZyB0aGUgdGhyZWUgZGlmZmVyZW50IHBsYWNlcyB0aGF0IHN5bWJvbAorYXNzaWdubWVudHMgbWF5IGJlIHVzZWQ6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBmbG9hdGluZ19wb2ludCA9IDA7CisgICAgIFNFQ1RJT05TCisgICAgIHsKKyAgICAgICAudGV4dCA6CisgICAgICAgICB7CisgICAgICAgICAgICooLnRleHQpCisgICAgICAgICAgIF9ldGV4dCA9IC47CisgICAgICAgICB9CisgICAgICAgX2JkYXRhID0gKC4gKyAzKSAmYW1wOyB+IDM7CisgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIH0KKyAgICAgfQorPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPkluIHRoaXMgZXhhbXBsZSwgdGhlIHN5bWJvbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZsb2F0aW5nX3BvaW50PC9zcGFuPjwvc2FtcD4mcnNxdW87IHdpbGwgYmUgZGVmaW5lZCBhcworemVyby4gIFRoZSBzeW1ib2wgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fZXRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2lsbCBiZSBkZWZpbmVkIGFzIHRoZSBhZGRyZXNzIGZvbGxvd2luZwordGhlIGxhc3QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbnB1dCBzZWN0aW9uLiAgVGhlIHN5bWJvbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9iZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3aWxsIGJlCitkZWZpbmVkIGFzIHRoZSBhZGRyZXNzIGZvbGxvd2luZyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4udGV4dDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvdXRwdXQgc2VjdGlvbiBhbGlnbmVkCit1cHdhcmQgdG8gYSA0IGJ5dGUgYm91bmRhcnkuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NpbXBsZS1Db21tYW5kcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU2ltcGxlLUNvbW1hbmRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2YmUwMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NpbXBsZS1Db21tYW5kcy5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNpbXBsZSBDb21tYW5kcyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiIHRpdGxlPSJTY3JpcHRzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU2ltcGxlLUV4YW1wbGUuaHRtbCNTaW1wbGUtRXhhbXBsZSIgdGl0bGU9IlNpbXBsZSBFeGFtcGxlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNBc3NpZ25tZW50cyIgdGl0bGU9IkFzc2lnbm1lbnRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTaW1wbGUtQ29tbWFuZHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNBc3NpZ25tZW50cyI+QXNzaWdubWVudHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTaW1wbGUtRXhhbXBsZS5odG1sI1NpbXBsZS1FeGFtcGxlIj5TaW1wbGUgRXhhbXBsZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIj5TY3JpcHRzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My40IFNpbXBsZSBMaW5rZXIgU2NyaXB0IENvbW1hbmRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGlua2VyLXNjcmlwdC1zaW1wbGUtY29tbWFuZHMtMzQ3Ij48L2E+SW4gdGhpcyBzZWN0aW9uIHdlIGRlc2NyaWJlIHRoZSBzaW1wbGUgbGlua2VyIHNjcmlwdCBjb21tYW5kcy4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IkVudHJ5LVBvaW50Lmh0bWwjRW50cnktUG9pbnQiPkVudHJ5IFBvaW50PC9hPjogCQkJU2V0dGluZyB0aGUgZW50cnkgcG9pbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IkZpbGUtQ29tbWFuZHMuaHRtbCNGaWxlLUNvbW1hbmRzIj5GaWxlIENvbW1hbmRzPC9hPjogCQlDb21tYW5kcyBkZWFsaW5nIHdpdGggZmlsZXMKKworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iRm9ybWF0LUNvbW1hbmRzLmh0bWwjRm9ybWF0LUNvbW1hbmRzIj5Gb3JtYXQgQ29tbWFuZHM8L2E+OiAJCUNvbW1hbmRzIGRlYWxpbmcgd2l0aCBvYmplY3QgZmlsZSBmb3JtYXRzCisKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9IlJFR0lPTl8wMDVmQUxJQVMuaHRtbCNSRUdJT05fMDA1ZkFMSUFTIj5SRUdJT05fQUxJQVM8L2E+OiAJCUFzc2lnbiBhbGlhcyBuYW1lcyB0byBtZW1vcnkgcmVnaW9ucworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iTWlzY2VsbGFuZW91cy1Db21tYW5kcy5odG1sI01pc2NlbGxhbmVvdXMtQ29tbWFuZHMiPk1pc2NlbGxhbmVvdXMgQ29tbWFuZHM8L2E+OiAJT3RoZXIgbGlua2VyIHNjcmlwdCBjb21tYW5kcworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU2ltcGxlLUV4YW1wbGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NpbXBsZS1FeGFtcGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllYTQxNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NpbXBsZS1FeGFtcGxlLmh0bWwKQEAgLTAsMCArMSwxMTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlNpbXBsZSBFeGFtcGxlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyIgdGl0bGU9IlNjcmlwdHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTY3JpcHQtRm9ybWF0Lmh0bWwjU2NyaXB0LUZvcm1hdCIgdGl0bGU9IlNjcmlwdCBGb3JtYXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTaW1wbGUtQ29tbWFuZHMuaHRtbCNTaW1wbGUtQ29tbWFuZHMiIHRpdGxlPSJTaW1wbGUgQ29tbWFuZHMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlNpbXBsZS1FeGFtcGxlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlNpbXBsZS1Db21tYW5kcy5odG1sI1NpbXBsZS1Db21tYW5kcyI+U2ltcGxlIENvbW1hbmRzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU2NyaXB0LUZvcm1hdC5odG1sI1NjcmlwdC1Gb3JtYXQiPlNjcmlwdCBGb3JtYXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTY3JpcHRzLmh0bWwjU2NyaXB0cyI+U2NyaXB0czwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMyBTaW1wbGUgTGlua2VyIFNjcmlwdCBFeGFtcGxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGlua2VyLXNjcmlwdC1leGFtcGxlLTM0NSI+PC9hPjxhIG5hbWU9ImluZGV4LWV4YW1wbGUtb2YtbGlua2VyLXNjcmlwdC0zNDYiPjwvYT5NYW55IGxpbmtlciBzY3JpcHRzIGFyZSBmYWlybHkgc2ltcGxlLgorCisgICA8cD5UaGUgc2ltcGxlc3QgcG9zc2libGUgbGlua2VyIHNjcmlwdCBoYXMganVzdCBvbmUgY29tbWFuZDoKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U0VDVElPTlM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBZb3UgdXNlIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlNFQ1RJT05TPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgdG8gZGVzY3JpYmUgdGhlCittZW1vcnkgbGF5b3V0IG9mIHRoZSBvdXRwdXQgZmlsZS4KKworICAgPHA+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U0VDVElPTlM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBpcyBhIHBvd2VyZnVsIGNvbW1hbmQuICBIZXJlIHdlIHdpbGwKK2Rlc2NyaWJlIGEgc2ltcGxlIHVzZSBvZiBpdC4gIExldCdzIGFzc3VtZSB5b3VyIHByb2dyYW0gY29uc2lzdHMgb25seSBvZgorY29kZSwgaW5pdGlhbGl6ZWQgZGF0YSwgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YS4gIFRoZXNlIHdpbGwgYmUgaW4gdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYnNzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb25zLCByZXNwZWN0aXZlbHkuIAorTGV0J3MgYXNzdW1lIGZ1cnRoZXIgdGhhdCB0aGVzZSBhcmUgdGhlIG9ubHkgc2VjdGlvbnMgd2hpY2ggYXBwZWFyIGluCit5b3VyIGlucHV0IGZpbGVzLgorCisgICA8cD5Gb3IgdGhpcyBleGFtcGxlLCBsZXQncyBzYXkgdGhhdCB0aGUgY29kZSBzaG91bGQgYmUgbG9hZGVkIGF0IGFkZHJlc3MKKzB4MTAwMDAsIGFuZCB0aGF0IHRoZSBkYXRhIHNob3VsZCBzdGFydCBhdCBhZGRyZXNzIDB4ODAwMDAwMC4gIEhlcmUgaXMgYQorbGlua2VyIHNjcmlwdCB3aGljaCB3aWxsIGRvIHRoYXQ6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgU0VDVElPTlMKKyAgICAgeworICAgICAgIC4gPSAweDEwMDAwOworICAgICAgIC50ZXh0IDogeyAqKC50ZXh0KSB9CisgICAgICAgLiA9IDB4ODAwMDAwMDsKKyAgICAgICAuZGF0YSA6IHsgKiguZGF0YSkgfQorICAgICAgIC5ic3MgOiB7ICooLmJzcykgfQorICAgICB9Cis8L3ByZT4KKyAgIDxwPllvdSB3cml0ZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TRUNUSU9OUzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGFzIHRoZSBrZXl3b3JkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U0VDVElPTlM8L3NwYW4+PC9zYW1wPiZyc3F1bzssCitmb2xsb3dlZCBieSBhIHNlcmllcyBvZiBzeW1ib2wgYXNzaWdubWVudHMgYW5kIG91dHB1dCBzZWN0aW9uCitkZXNjcmlwdGlvbnMgZW5jbG9zZWQgaW4gY3VybHkgYnJhY2VzLgorCisgICA8cD5UaGUgZmlyc3QgbGluZSBpbnNpZGUgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+U0VDVElPTlM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgY29tbWFuZCBvZiB0aGUgYWJvdmUgZXhhbXBsZQorc2V0cyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpYWwgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Ljwvc3Bhbj48L3NhbXA+JnJzcXVvOywgd2hpY2ggaXMgdGhlIGxvY2F0aW9uCitjb3VudGVyLiAgSWYgeW91IGRvIG5vdCBzcGVjaWZ5IHRoZSBhZGRyZXNzIG9mIGFuIG91dHB1dCBzZWN0aW9uIGluIHNvbWUKK290aGVyIHdheSAob3RoZXIgd2F5cyBhcmUgZGVzY3JpYmVkIGxhdGVyKSwgdGhlIGFkZHJlc3MgaXMgc2V0IGZyb20gdGhlCitjdXJyZW50IHZhbHVlIG9mIHRoZSBsb2NhdGlvbiBjb3VudGVyLiAgVGhlIGxvY2F0aW9uIGNvdW50ZXIgaXMgdGhlbgoraW5jcmVtZW50ZWQgYnkgdGhlIHNpemUgb2YgdGhlIG91dHB1dCBzZWN0aW9uLiAgQXQgdGhlIHN0YXJ0IG9mIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5TRUNUSU9OUzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kLCB0aGUgbG9jYXRpb24gY291bnRlciBoYXMgdGhlIHZhbHVlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+VGhlIHNlY29uZCBsaW5lIGRlZmluZXMgYW4gb3V0cHV0IHNlY3Rpb24sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGUgY29sb24gaXMKK3JlcXVpcmVkIHN5bnRheCB3aGljaCBtYXkgYmUgaWdub3JlZCBmb3Igbm93LiAgV2l0aGluIHRoZSBjdXJseSBicmFjZXMKK2FmdGVyIHRoZSBvdXRwdXQgc2VjdGlvbiBuYW1lLCB5b3UgbGlzdCB0aGUgbmFtZXMgb2YgdGhlIGlucHV0IHNlY3Rpb25zCit3aGljaCBzaG91bGQgYmUgcGxhY2VkIGludG8gdGhpcyBvdXRwdXQgc2VjdGlvbi4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPio8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYQord2lsZGNhcmQgd2hpY2ggbWF0Y2hlcyBhbnkgZmlsZSBuYW1lLiAgVGhlIGV4cHJlc3Npb24gJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4qKC50ZXh0KTwvc3Bhbj48L3NhbXA+JnJzcXVvOworbWVhbnMgYWxsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaW5wdXQgc2VjdGlvbnMgaW4gYWxsIGlucHV0IGZpbGVzLgorCisgICA8cD5TaW5jZSB0aGUgbG9jYXRpb24gY291bnRlciBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4MTAwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hlbiB0aGUgb3V0cHV0IHNlY3Rpb24KKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgZGVmaW5lZCwgdGhlIGxpbmtlciB3aWxsIHNldCB0aGUgYWRkcmVzcyBvZiB0aGUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LnRleHQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiBpbiB0aGUgb3V0cHV0IGZpbGUgdG8gYmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4weDEwMDAwPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5UaGUgcmVtYWluaW5nIGxpbmVzIGRlZmluZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uYnNzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHNlY3Rpb25zIGluCit0aGUgb3V0cHV0IGZpbGUuICBUaGUgbGlua2VyIHdpbGwgcGxhY2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3V0cHV0IHNlY3Rpb24KK2F0IGFkZHJlc3MgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4weDgwMDAwMDA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBBZnRlciB0aGUgbGlua2VyIHBsYWNlcyB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uZGF0YTwvc3Bhbj48L3NhbXA+JnJzcXVvOworb3V0cHV0IHNlY3Rpb24sIHRoZSB2YWx1ZSBvZiB0aGUgbG9jYXRpb24gY291bnRlciB3aWxsIGJlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjB4ODAwMDAwMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwbHVzIHRoZSBzaXplIG9mIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IG91dHB1dCBzZWN0aW9uLiAgVGhlCitlZmZlY3QgaXMgdGhhdCB0aGUgbGlua2VyIHdpbGwgcGxhY2UgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmJzczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvdXRwdXQgc2VjdGlvbgoraW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRhdGE8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3V0cHV0IHNlY3Rpb24gaW4gbWVtb3J5LgorCisgICA8cD5UaGUgbGlua2VyIHdpbGwgZW5zdXJlIHRoYXQgZWFjaCBvdXRwdXQgc2VjdGlvbiBoYXMgdGhlIHJlcXVpcmVkCithbGlnbm1lbnQsIGJ5IGluY3JlYXNpbmcgdGhlIGxvY2F0aW9uIGNvdW50ZXIgaWYgbmVjZXNzYXJ5LiAgSW4gdGhpcworZXhhbXBsZSwgdGhlIHNwZWNpZmllZCBhZGRyZXNzZXMgZm9yIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi50ZXh0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87CitzZWN0aW9ucyB3aWxsIHByb2JhYmx5IHNhdGlzZnkgYW55IGFsaWdubWVudCBjb25zdHJhaW50cywgYnV0IHRoZSBsaW5rZXIKK21heSBoYXZlIHRvIGNyZWF0ZSBhIHNtYWxsIGdhcCBiZXR3ZWVuIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5kYXRhPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ic3M8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3NlY3Rpb25zLgorCisgICA8cD5UaGF0J3MgaXQhICBUaGF0J3MgYSBzaW1wbGUgYW5kIGNvbXBsZXRlIGxpbmtlciBzY3JpcHQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NvdXJjZS1Db2RlLVJlZmVyZW5jZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU291cmNlLUNvZGUtUmVmZXJlbmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1ZTNhZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1NvdXJjZS1Db2RlLVJlZmVyZW5jZS5odG1sCkBAIC0wLDAgKzEsMTM1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Tb3VyY2UgQ29kZSBSZWZlcmVuY2UgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFzc2lnbm1lbnRzLmh0bWwjQXNzaWdubWVudHMiIHRpdGxlPSJBc3NpZ25tZW50cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBST1ZJREVfMDA1ZkhJRERFTi5odG1sI1BST1ZJREVfMDA1ZkhJRERFTiIgdGl0bGU9IlBST1ZJREVfSElEREVOIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTb3VyY2UtQ29kZS1SZWZlcmVuY2UiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJQUk9WSURFXzAwNWZISURERU4uaHRtbCNQUk9WSURFXzAwNWZISURERU4iPlBST1ZJREVfSElEREVOPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQXNzaWdubWVudHMuaHRtbCNBc3NpZ25tZW50cyI+QXNzaWdubWVudHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjUuNSBTb3VyY2UgQ29kZSBSZWZlcmVuY2U8L2g0PgorCis8cD5BY2Nlc3NpbmcgYSBsaW5rZXIgc2NyaXB0IGRlZmluZWQgdmFyaWFibGUgZnJvbSBzb3VyY2UgY29kZSBpcyBub3QKK2ludHVpdGl2ZS4gIEluIHBhcnRpY3VsYXIgYSBsaW5rZXIgc2NyaXB0IHN5bWJvbCBpcyBub3QgZXF1aXZhbGVudCB0bworYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiBhIGhpZ2ggbGV2ZWwgbGFuZ3VhZ2UsIGl0IGlzIGluc3RlYWQgYQorc3ltYm9sIHRoYXQgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLgorCisgICA8cD5CZWZvcmUgZ29pbmcgZnVydGhlciwgaXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBjb21waWxlcnMgb2Z0ZW4KK3RyYW5zZm9ybSBuYW1lcyBpbiB0aGUgc291cmNlIGNvZGUgaW50byBkaWZmZXJlbnQgbmFtZXMgd2hlbiB0aGV5IGFyZQorc3RvcmVkIGluIHRoZSBzeW1ib2wgdGFibGUuICBGb3IgZXhhbXBsZSwgRm9ydHJhbiBjb21waWxlcnMgY29tbW9ubHkKK3ByZXBlbmQgb3IgYXBwZW5kIGFuIHVuZGVyc2NvcmUsIGFuZCBDKysgcGVyZm9ybXMgZXh0ZW5zaXZlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bmFtZQorbWFuZ2xpbmc8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGVyZWZvcmUgdGhlcmUgbWlnaHQgYmUgYSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBuYW1lCitvZiBhIHZhcmlhYmxlIGFzIGl0IGlzIHVzZWQgaW4gc291cmNlIGNvZGUgYW5kIHRoZSBuYW1lIG9mIHRoZSBzYW1lCit2YXJpYWJsZSBhcyBpdCBpcyBkZWZpbmVkIGluIGEgbGlua2VyIHNjcmlwdC4gIEZvciBleGFtcGxlIGluIEMgYQorbGlua2VyIHNjcmlwdCB2YXJpYWJsZSBtaWdodCBiZSByZWZlcnJlZCB0byBhczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgZXh0ZXJuIGludCBmb287Cis8L3ByZT4KKyAgIDxwPkJ1dCBpbiB0aGUgbGlua2VyIHNjcmlwdCBpdCBtaWdodCBiZSBkZWZpbmVkIGFzOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBfZm9vID0gMTAwMDsKKzwvcHJlPgorICAgPHA+SW4gdGhlIHJlbWFpbmluZyBleGFtcGxlcyBob3dldmVyIGl0IGlzIGFzc3VtZWQgdGhhdCBubyBuYW1lCit0cmFuc2Zvcm1hdGlvbiBoYXMgdGFrZW4gcGxhY2UuCisKKyAgIDxwPldoZW4gYSBzeW1ib2wgaXMgZGVjbGFyZWQgaW4gYSBoaWdoIGxldmVsIGxhbmd1YWdlIHN1Y2ggYXMgQywgdHdvCit0aGluZ3MgaGFwcGVuLiAgVGhlIGZpcnN0IGlzIHRoYXQgdGhlIGNvbXBpbGVyIHJlc2VydmVzIGVub3VnaCBzcGFjZQoraW4gdGhlIHByb2dyYW0ncyBtZW1vcnkgdG8gaG9sZCB0aGUgPGVtPnZhbHVlPC9lbT4gb2YgdGhlIHN5bWJvbC4gIFRoZQorc2Vjb25kIGlzIHRoYXQgdGhlIGNvbXBpbGVyIGNyZWF0ZXMgYW4gZW50cnkgaW4gdGhlIHByb2dyYW0ncyBzeW1ib2wKK3RhYmxlIHdoaWNoIGhvbGRzIHRoZSBzeW1ib2wncyA8ZW0+YWRkcmVzczwvZW0+LiAgaWUgdGhlIHN5bWJvbCB0YWJsZQorY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGJsb2NrIG9mIG1lbW9yeSBob2xkaW5nIHRoZSBzeW1ib2wncwordmFsdWUuICBTbyBmb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIEMgZGVjbGFyYXRpb24sIGF0IGZpbGUgc2NvcGU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIGludCBmb28gPSAxMDAwOworPC9wcmU+CisgICA8cD5jcmVhdGVzIGEgZW50cnkgY2FsbGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIHRoZSBzeW1ib2wgdGFibGUuICBUaGlzIGVudHJ5Citob2xkcyB0aGUgYWRkcmVzcyBvZiBhbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmludDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzaXplZCBibG9jayBvZiBtZW1vcnkgd2hlcmUgdGhlCitudW1iZXIgMTAwMCBpcyBpbml0aWFsbHkgc3RvcmVkLgorCisgICA8cD5XaGVuIGEgcHJvZ3JhbSByZWZlcmVuY2VzIGEgc3ltYm9sIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgY29kZSB0aGF0CitmaXJzdCBhY2Nlc3NlcyB0aGUgc3ltYm9sIHRhYmxlIHRvIGZpbmQgdGhlIGFkZHJlc3Mgb2YgdGhlIHN5bWJvbCdzCittZW1vcnkgYmxvY2sgYW5kIHRoZW4gY29kZSB0byByZWFkIHRoZSB2YWx1ZSBmcm9tIHRoYXQgbWVtb3J5IGJsb2NrLiAKK1NvOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBmb28gPSAxOworPC9wcmU+CisgICA8cD5sb29rcyB1cCB0aGUgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIHRoZSBzeW1ib2wgdGFibGUsIGdldHMgdGhlIGFkZHJlc3MKK2Fzc29jaWF0ZWQgd2l0aCB0aGlzIHN5bWJvbCBhbmQgdGhlbiB3cml0ZXMgdGhlIHZhbHVlIDEgaW50byB0aGF0CithZGRyZXNzLiAgV2hlcmVhczoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgaW50ICogYSA9ICZhbXA7IGZvbzsKKzwvcHJlPgorICAgPHA+bG9va3MgdXAgdGhlIHN5bWJvbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpbiB0aGUgc3ltYm9sIHRhYmxlLCBnZXRzIGl0IGFkZHJlc3MKK2FuZCB0aGVuIGNvcGllcyB0aGlzIGFkZHJlc3MgaW50byB0aGUgYmxvY2sgb2YgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aAordGhlIHZhcmlhYmxlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+TGlua2VyIHNjcmlwdHMgc3ltYm9sIGRlY2xhcmF0aW9ucywgYnkgY29udHJhc3QsIGNyZWF0ZSBhbiBlbnRyeSBpbgordGhlIHN5bWJvbCB0YWJsZSBidXQgZG8gbm90IGFzc2lnbiBhbnkgbWVtb3J5IHRvIHRoZW0uICBUaHVzIHRoZXkgYXJlCithbiBhZGRyZXNzIHdpdGhvdXQgYSB2YWx1ZS4gIFNvIGZvciBleGFtcGxlIHRoZSBsaW5rZXIgc2NyaXB0IGRlZmluaXRpb246CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIGZvbyA9IDEwMDA7Cis8L3ByZT4KKyAgIDxwPmNyZWF0ZXMgYW4gZW50cnkgaW4gdGhlIHN5bWJvbCB0YWJsZSBjYWxsZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2hpY2ggaG9sZHMKK3RoZSBhZGRyZXNzIG9mIG1lbW9yeSBsb2NhdGlvbiAxMDAwLCBidXQgbm90aGluZyBzcGVjaWFsIGlzIHN0b3JlZCBhdAorYWRkcmVzcyAxMDAwLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW5ub3QgYWNjZXNzIHRoZSA8ZW0+dmFsdWU8L2VtPiBvZiBhCitsaW5rZXIgc2NyaXB0IGRlZmluZWQgc3ltYm9sIC0gaXQgaGFzIG5vIHZhbHVlIC0gYWxsIHlvdSBjYW4gZG8gaXMKK2FjY2VzcyB0aGUgPGVtPmFkZHJlc3M8L2VtPiBvZiBhIGxpbmtlciBzY3JpcHQgZGVmaW5lZCBzeW1ib2wuCisKKyAgIDxwPkhlbmNlIHdoZW4geW91IGFyZSB1c2luZyBhIGxpbmtlciBzY3JpcHQgZGVmaW5lZCBzeW1ib2wgaW4gc291cmNlIGNvZGUKK3lvdSBzaG91bGQgYWx3YXlzIHRha2UgdGhlIGFkZHJlc3Mgb2YgdGhlIHN5bWJvbCwgYW5kIG5ldmVyIGF0dGVtcHQgdG8KK3VzZSBpdHMgdmFsdWUuICBGb3IgZXhhbXBsZSBzdXBwb3NlIHlvdSB3YW50IHRvIGNvcHkgdGhlIGNvbnRlbnRzIG9mIGEKK3NlY3Rpb24gb2YgbWVtb3J5IGNhbGxlZCAuUk9NIGludG8gYSBzZWN0aW9uIGNhbGxlZCAuRkxBU0ggYW5kIHRoZQorbGlua2VyIHNjcmlwdCBjb250YWlucyB0aGVzZSBkZWNsYXJhdGlvbnM6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgIHN0YXJ0X29mX1JPTSAgID0gLlJPTTsKKyAgICAgICBlbmRfb2ZfUk9NICAgICA9IC5ST00gKyBzaXplb2YgKC5ST00pIC0gMTsKKyAgICAgICBzdGFydF9vZl9GTEFTSCA9IC5GTEFTSDsKKzwvcHJlPgorICAgPHA+VGhlbiB0aGUgQyBzb3VyY2UgY29kZSB0byBwZXJmb3JtIHRoZSBjb3B5IHdvdWxkIGJlOgorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICBleHRlcm4gY2hhciBzdGFydF9vZl9ST00sIGVuZF9vZl9ST00sIHN0YXJ0X29mX0ZMQVNIOworICAgICAKKyAgICAgICBtZW1jcHkgKCZhbXA7IHN0YXJ0X29mX0ZMQVNILCAmYW1wOyBzdGFydF9vZl9ST00sICZhbXA7IGVuZF9vZl9ST00gLSAmYW1wOyBzdGFydF9vZl9ST00pOworPC9wcmU+CisgICA8cD5Ob3RlIHRoZSB1c2Ugb2YgdGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+JmFtcDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3BlcmF0b3JzLiAgVGhlc2UgYXJlIGNvcnJlY3QuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1N5bWJvbGljLUNvbnN0YW50cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU3ltYm9saWMtQ29uc3RhbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5OGRjOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1N5bWJvbGljLUNvbnN0YW50cy5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN5bWJvbGljIENvbnN0YW50cyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyIgdGl0bGU9IkV4cHJlc3Npb25zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIiB0aXRsZT0iQ29uc3RhbnRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiIHRpdGxlPSJTeW1ib2xzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTeW1ib2xpYy1Db25zdGFudHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iU3ltYm9scy5odG1sI1N5bWJvbHMiPlN5bWJvbHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJDb25zdGFudHMuaHRtbCNDb25zdGFudHMiPkNvbnN0YW50czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPkV4cHJlc3Npb25zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+My4xMC4yIFN5bWJvbGljIENvbnN0YW50czwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN5bWJvbGljLWNvbnN0YW50cy01MDYiPjwvYT48YSBuYW1lPSJpbmRleC1DT05TVEFOVC01MDciPjwvYT5JdCBpcyBwb3NzaWJsZSB0byByZWZlciB0byB0YXJnZXQgc3BlY2lmaWMgY29uc3RhbnRzIHZpYSB0aGUgdXNlIG9mCit0aGUgPGNvZGU+Q09OU1RBTlQoPC9jb2RlPjx2YXI+bmFtZTwvdmFyPjxjb2RlPik8L2NvZGU+IG9wZXJhdG9yLCB3aGVyZSA8dmFyPm5hbWU8L3Zhcj4gaXMgb25lIG9mOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5NQVhQQUdFU0laRTwvY29kZT48ZGQ+PGEgbmFtZT0iaW5kZXgtTUFYUEFHRVNJWkUtNTA4Ij48L2E+VGhlIHRhcmdldCdzIG1heGltdW0gcGFnZSBzaXplLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Q09NTU9OUEFHRVNJWkU8L2NvZGU+PGRkPjxhIG5hbWU9ImluZGV4LUNPTU1PTlBBR0VTSVpFLTUwOSI+PC9hPlRoZSB0YXJnZXQncyBkZWZhdWx0IHBhZ2Ugc2l6ZS4gCis8L2RsPgorCisgICA8cD5TbyBmb3IgZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgLnRleHQgQUxJR04gKENPTlNUQU5UIChNQVhQQUdFU0laRSkpIDogeyAqKC50ZXh0KSB9Cis8L3ByZT4KKyAgIDxwPndpbGwgY3JlYXRlIGEgdGV4dCBzZWN0aW9uIGFsaWduZWQgdG8gdGhlIGxhcmdlc3QgcGFnZSBib3VuZGFyeQorc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1N5bWJvbHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1N5bWJvbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDcxZjgyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvU3ltYm9scy5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN5bWJvbHMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiIHRpdGxlPSJFeHByZXNzaW9ucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlN5bWJvbGljLUNvbnN0YW50cy5odG1sI1N5bWJvbGljLUNvbnN0YW50cyIgdGl0bGU9IlN5bWJvbGljIENvbnN0YW50cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik9ycGhhbi1TZWN0aW9ucy5odG1sI09ycGhhbi1TZWN0aW9ucyIgdGl0bGU9Ik9ycGhhbiBTZWN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3ltYm9scyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPcnBoYW4tU2VjdGlvbnMuaHRtbCNPcnBoYW4tU2VjdGlvbnMiPk9ycGhhbiBTZWN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN5bWJvbGljLUNvbnN0YW50cy5odG1sI1N5bWJvbGljLUNvbnN0YW50cyI+U3ltYm9saWMgQ29uc3RhbnRzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iRXhwcmVzc2lvbnMuaHRtbCNFeHByZXNzaW9ucyI+RXhwcmVzc2lvbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4zLjEwLjMgU3ltYm9sIE5hbWVzPC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3ltYm9sLW5hbWVzLTUxMCI+PC9hPjxhIG5hbWU9ImluZGV4LW5hbWVzLTUxMSI+PC9hPjxhIG5hbWU9ImluZGV4LXF1b3RlZC1zeW1ib2wtbmFtZXMtNTEyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMjItNTEzIj48L2E+VW5sZXNzIHF1b3RlZCwgc3ltYm9sIG5hbWVzIHN0YXJ0IHdpdGggYSBsZXR0ZXIsIHVuZGVyc2NvcmUsIG9yIHBlcmlvZAorYW5kIG1heSBpbmNsdWRlIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZXMsIHBlcmlvZHMsIGFuZCBoeXBoZW5zLiAKK1VucXVvdGVkIHN5bWJvbCBuYW1lcyBtdXN0IG5vdCBjb25mbGljdCB3aXRoIGFueSBrZXl3b3Jkcy4gIFlvdSBjYW4KK3NwZWNpZnkgYSBzeW1ib2wgd2hpY2ggY29udGFpbnMgb2RkIGNoYXJhY3RlcnMgb3IgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYQora2V5d29yZCBieSBzdXJyb3VuZGluZyB0aGUgc3ltYm9sIG5hbWUgaW4gZG91YmxlIHF1b3RlczoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAiU0VDVElPTiIgPSA5OworICAgICAid2l0aCBhIHNwYWNlIiA9ICJhbHNvIHdpdGggYSBzcGFjZSIgKyAxMDsKKzwvcHJlPgorICAgPHA+U2luY2Ugc3ltYm9scyBjYW4gY29udGFpbiBtYW55IG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMsIGl0IGlzIHNhZmVzdAordG8gZGVsaW1pdCBzeW1ib2xzIHdpdGggc3BhY2VzLiAgRm9yIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QS1CPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIG9uZSBzeW1ib2wsCit3aGVyZWFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+QSAtIEI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgYW4gZXhwcmVzc2lvbiBpbnZvbHZpbmcgc3VidHJhY3Rpb24uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1RJLUNPRkYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL1RJLUNPRkYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJiZTlkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvVEktQ09GRi5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlRJIENPRkYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNQVS1FTEYuaHRtbCNTUFUtRUxGIiB0aXRsZT0iU1BVIEVMRiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IldJTjMyLmh0bWwjV0lOMzIiIHRpdGxlPSJXSU4zMiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVEktQ09GRiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJXSU4zMi5odG1sI1dJTjMyIj5XSU4zMjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNQVS1FTEYuaHRtbCNTUFUtRUxGIj5TUFUgRUxGPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCI+TWFjaGluZSBEZXBlbmRlbnQ8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjEyIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+J3MgU3VwcG9ydCBmb3IgVmFyaW91cyBUSSBDT0ZGIFZlcnNpb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVEktQ09GRi12ZXJzaW9ucy02ODAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkZm9ybWF0XzAwM2RfMDA0MHZhcl8wMDdidmVyc2lvbl8wMDdkLTY4MSI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZm9ybWF0PC9zcGFuPjwvc2FtcD4mcnNxdW87IHN3aXRjaCBhbGxvd3Mgc2VsZWN0aW9uIG9mIG9uZSBvZiB0aGUgdmFyaW91cworVEkgQ09GRiB2ZXJzaW9ucy4gIFRoZSBsYXRlc3Qgb2YgdGhpcyB3cml0aW5nIGlzIDI7IHZlcnNpb25zIDAgYW5kIDEgYXJlCithbHNvIHN1cHBvcnRlZC4gIFRoZSBUSSBDT0ZGIHZlcnNpb25zIGFsc28gdmFyeSBpbiBoZWFkZXIgYnl0ZS1vcmRlcgorZm9ybWF0OyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB3aWxsIHJlYWQgYW55IHZlcnNpb24gb3IgYnl0ZSBvcmRlciwgYnV0IHRoZSBvdXRwdXQKK2hlYWRlciBmb3JtYXQgZGVwZW5kcyBvbiB0aGUgZGVmYXVsdCBzcGVjaWZpZWQgYnkgdGhlIHNwZWNpZmljIHRhcmdldC4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvVkVSU0lPTi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvVkVSU0lPTi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MzNkYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9WRVJTSU9OLmh0bWwKQEAgLTAsMCArMSwyMjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlZFUlNJT04gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIiB0aXRsZT0iU2NyaXB0cyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlBIRFJTLmh0bWwjUEhEUlMiIHRpdGxlPSJQSERSUyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiIHRpdGxlPSJFeHByZXNzaW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVkVSU0lPTiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJFeHByZXNzaW9ucy5odG1sI0V4cHJlc3Npb25zIj5FeHByZXNzaW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlBIRFJTLmh0bWwjUEhEUlMiPlBIRFJTPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiPlNjcmlwdHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjkgVkVSU0lPTiBDb21tYW5kPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtVkVSU0lPTi1fMDA0MF8wMDdic2NyaXB0LXRleHRfMDA0MF8wMDdkLTQ5MyI+PC9hPjxhIG5hbWU9ImluZGV4LXN5bWJvbC12ZXJzaW9ucy00OTQiPjwvYT48YSBuYW1lPSJpbmRleC12ZXJzaW9uLXNjcmlwdC00OTUiPjwvYT48YSBuYW1lPSJpbmRleC12ZXJzaW9ucy1vZi1zeW1ib2xzLTQ5NiI+PC9hPlRoZSBsaW5rZXIgc3VwcG9ydHMgc3ltYm9sIHZlcnNpb25zIHdoZW4gdXNpbmcgRUxGLiAgU3ltYm9sIHZlcnNpb25zIGFyZQorb25seSB1c2VmdWwgd2hlbiB1c2luZyBzaGFyZWQgbGlicmFyaWVzLiAgVGhlIGR5bmFtaWMgbGlua2VyIGNhbiB1c2UKK3N5bWJvbCB2ZXJzaW9ucyB0byBzZWxlY3QgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIGEgZnVuY3Rpb24gd2hlbiBpdCBydW5zCithIHByb2dyYW0gdGhhdCBtYXkgaGF2ZSBiZWVuIGxpbmtlZCBhZ2FpbnN0IGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUKK3NoYXJlZCBsaWJyYXJ5LgorCisgICA8cD5Zb3UgY2FuIGluY2x1ZGUgYSB2ZXJzaW9uIHNjcmlwdCBkaXJlY3RseSBpbiB0aGUgbWFpbiBsaW5rZXIgc2NyaXB0LCBvcgoreW91IGNhbiBzdXBwbHkgdGhlIHZlcnNpb24gc2NyaXB0IGFzIGFuIGltcGxpY2l0IGxpbmtlciBzY3JpcHQuICBZb3UgY2FuCithbHNvIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXZlcnNpb24tc2NyaXB0PC9zcGFuPjwvc2FtcD4mcnNxdW87IGxpbmtlciBvcHRpb24uCisKKyAgIDxwPlRoZSBzeW50YXggb2YgdGhlIDxjb2RlPlZFUlNJT048L2NvZGU+IGNvbW1hbmQgaXMgc2ltcGx5Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgVkVSU0lPTiB7IHZlcnNpb24tc2NyaXB0LWNvbW1hbmRzIH0KKzwvcHJlPgorICAgPHA+VGhlIGZvcm1hdCBvZiB0aGUgdmVyc2lvbiBzY3JpcHQgY29tbWFuZHMgaXMgaWRlbnRpY2FsIHRvIHRoYXQgdXNlZCBieQorU3VuJ3MgbGlua2VyIGluIFNvbGFyaXMgMi41LiAgVGhlIHZlcnNpb24gc2NyaXB0IGRlZmluZXMgYSB0cmVlIG9mCit2ZXJzaW9uIG5vZGVzLiAgWW91IHNwZWNpZnkgdGhlIG5vZGUgbmFtZXMgYW5kIGludGVyZGVwZW5kZW5jaWVzIGluIHRoZQordmVyc2lvbiBzY3JpcHQuICBZb3UgY2FuIHNwZWNpZnkgd2hpY2ggc3ltYm9scyBhcmUgYm91bmQgdG8gd2hpY2gKK3ZlcnNpb24gbm9kZXMsIGFuZCB5b3UgY2FuIHJlZHVjZSBhIHNwZWNpZmllZCBzZXQgb2Ygc3ltYm9scyB0byBsb2NhbAorc2NvcGUgc28gdGhhdCB0aGV5IGFyZSBub3QgZ2xvYmFsbHkgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBzaGFyZWQKK2xpYnJhcnkuCisKKyAgIDxwPlRoZSBlYXNpZXN0IHdheSB0byBkZW1vbnN0cmF0ZSB0aGUgdmVyc2lvbiBzY3JpcHQgbGFuZ3VhZ2UgaXMgd2l0aCBhIGZldworZXhhbXBsZXMuCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBWRVJTXzEuMSB7CisgICAgIAkgZ2xvYmFsOgorICAgICAJCSBmb28xOworICAgICAJIGxvY2FsOgorICAgICAJCSBvbGQqOworICAgICAJCSBvcmlnaW5hbCo7CisgICAgIAkJIG5ldyo7CisgICAgIH07CisgICAgIAorICAgICBWRVJTXzEuMiB7CisgICAgIAkJIGZvbzI7CisgICAgIH0gVkVSU18xLjE7CisgICAgIAorICAgICBWRVJTXzIuMCB7CisgICAgIAkJIGJhcjE7IGJhcjI7CisgICAgIAkgZXh0ZXJuICJDKysiIHsKKyAgICAgCQkgbnM6Oio7CisgICAgIAkJICJmKGludCwgZG91YmxlKSI7CisgICAgIAkgfTsKKyAgICAgfSBWRVJTXzEuMjsKKzwvcHJlPgorICAgPHA+VGhpcyBleGFtcGxlIHZlcnNpb24gc2NyaXB0IGRlZmluZXMgdGhyZWUgdmVyc2lvbiBub2Rlcy4gIFRoZSBmaXJzdAordmVyc2lvbiBub2RlIGRlZmluZWQgaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5WRVJTXzEuMTwvc3Bhbj48L3NhbXA+JnJzcXVvOzsgaXQgaGFzIG5vIG90aGVyIGRlcGVuZGVuY2llcy4gCitUaGUgc2NyaXB0IGJpbmRzIHRoZSBzeW1ib2wgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mb28xPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VkVSU18xLjE8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBJdCByZWR1Y2VzCithIG51bWJlciBvZiBzeW1ib2xzIHRvIGxvY2FsIHNjb3BlIHNvIHRoYXQgdGhleSBhcmUgbm90IHZpc2libGUgb3V0c2lkZQorb2YgdGhlIHNoYXJlZCBsaWJyYXJ5OyB0aGlzIGlzIGRvbmUgdXNpbmcgd2lsZGNhcmQgcGF0dGVybnMsIHNvIHRoYXQgYW55CitzeW1ib2wgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9sZDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcmlnaW5hbDwvc3Bhbj48L3NhbXA+JnJzcXVvOywgb3IgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZXc8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2lzIG1hdGNoZWQuICBUaGUgd2lsZGNhcmQgcGF0dGVybnMgYXZhaWxhYmxlIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSB1c2VkCitpbiB0aGUgc2hlbGwgd2hlbiBtYXRjaGluZyBmaWxlbmFtZXMgKGFsc28ga25vd24gYXMgJmxkcXVvO2dsb2JiaW5nJnJkcXVvOykuIAorSG93ZXZlciwgaWYgeW91IHNwZWNpZnkgdGhlIHN5bWJvbCBuYW1lIGluc2lkZSBkb3VibGUgcXVvdGVzLCB0aGVuIHRoZQorbmFtZSBpcyB0cmVhdGVkIGFzIGxpdGVyYWwsIHJhdGhlciB0aGFuIGFzIGEgZ2xvYiBwYXR0ZXJuLgorCisgICA8cD5OZXh0LCB0aGUgdmVyc2lvbiBzY3JpcHQgZGVmaW5lcyBub2RlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VkVSU18xLjI8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGlzIG5vZGUKK2RlcGVuZHMgdXBvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlZFUlNfMS4xPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIHNjcmlwdCBiaW5kcyB0aGUgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vMjwvc3Bhbj48L3NhbXA+JnJzcXVvOwordG8gdGhlIHZlcnNpb24gbm9kZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlZFUlNfMS4yPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5GaW5hbGx5LCB0aGUgdmVyc2lvbiBzY3JpcHQgZGVmaW5lcyBub2RlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VkVSU18yLjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuICBUaGlzIG5vZGUKK2RlcGVuZHMgdXBvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPlZFUlNfMS4yPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIHNjcmlwdHMgYmluZHMgdGhlIHN5bWJvbHMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iYXIxPC9zcGFuPjwvc2FtcD4mcnNxdW87CithbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5iYXIyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFyZSBib3VuZCB0byB0aGUgdmVyc2lvbiBub2RlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+VkVSU18yLjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPldoZW4gdGhlIGxpbmtlciBmaW5kcyBhIHN5bWJvbCBkZWZpbmVkIGluIGEgbGlicmFyeSB3aGljaCBpcyBub3QKK3NwZWNpZmljYWxseSBib3VuZCB0byBhIHZlcnNpb24gbm9kZSwgaXQgd2lsbCBlZmZlY3RpdmVseSBiaW5kIGl0IHRvIGFuCit1bnNwZWNpZmllZCBiYXNlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuICBZb3UgY2FuIGJpbmQgYWxsIG90aGVyd2lzZQordW5zcGVjaWZpZWQgc3ltYm9scyB0byBhIGdpdmVuIHZlcnNpb24gbm9kZSBieSB1c2luZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmdsb2JhbDogKjs8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3NvbWV3aGVyZSBpbiB0aGUgdmVyc2lvbiBzY3JpcHQuICBOb3RlIHRoYXQgaXQncyBzbGlnaHRseSBjcmF6eSB0byB1c2UKK3dpbGRjYXJkcyBpbiBhIGdsb2JhbCBzcGVjIGV4Y2VwdCBvbiB0aGUgbGFzdCB2ZXJzaW9uIG5vZGUuICBHbG9iYWwKK3dpbGRjYXJkcyBlbHNld2hlcmUgcnVuIHRoZSByaXNrIG9mIGFjY2lkZW50YWxseSBhZGRpbmcgc3ltYm9scyB0byB0aGUKK3NldCBleHBvcnRlZCBmb3IgYW4gb2xkIHZlcnNpb24uICBUaGF0J3Mgd3Jvbmcgc2luY2Ugb2xkZXIgdmVyc2lvbnMKK291Z2h0IHRvIGhhdmUgYSBmaXhlZCBzZXQgb2Ygc3ltYm9scy4KKworICAgPHA+VGhlIG5hbWVzIG9mIHRoZSB2ZXJzaW9uIG5vZGVzIGhhdmUgbm8gc3BlY2lmaWMgbWVhbmluZyBvdGhlciB0aGFuIHdoYXQKK3RoZXkgbWlnaHQgc3VnZ2VzdCB0byB0aGUgcGVyc29uIHJlYWRpbmcgdGhlbS4gIFRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjIuMDwvc3Bhbj48L3NhbXA+JnJzcXVvOyB2ZXJzaW9uCitjb3VsZCBqdXN0IGFzIHdlbGwgaGF2ZSBhcHBlYXJlZCBpbiBiZXR3ZWVuICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+MS4xPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPjEuMjwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitIb3dldmVyLCB0aGlzIHdvdWxkIGJlIGEgY29uZnVzaW5nIHdheSB0byB3cml0ZSBhIHZlcnNpb24gc2NyaXB0LgorCisgICA8cD5Ob2RlIG5hbWUgY2FuIGJlIG9taXR0ZWQsIHByb3ZpZGVkIGl0IGlzIHRoZSBvbmx5IHZlcnNpb24gbm9kZQoraW4gdGhlIHZlcnNpb24gc2NyaXB0LiAgU3VjaCB2ZXJzaW9uIHNjcmlwdCBkb2Vzbid0IGFzc2lnbiBhbnkgdmVyc2lvbnMgdG8KK3N5bWJvbHMsIG9ubHkgc2VsZWN0cyB3aGljaCBzeW1ib2xzIHdpbGwgYmUgZ2xvYmFsbHkgdmlzaWJsZSBvdXQgYW5kIHdoaWNoCit3b24ndC4KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHsgZ2xvYmFsOiBmb287IGJhcjsgbG9jYWw6ICo7IH07Cis8L3ByZT4KKyAgIDxwPldoZW4geW91IGxpbmsgYW4gYXBwbGljYXRpb24gYWdhaW5zdCBhIHNoYXJlZCBsaWJyYXJ5IHRoYXQgaGFzIHZlcnNpb25lZAorc3ltYm9scywgdGhlIGFwcGxpY2F0aW9uIGl0c2VsZiBrbm93cyB3aGljaCB2ZXJzaW9uIG9mIGVhY2ggc3ltYm9sIGl0CityZXF1aXJlcywgYW5kIGl0IGFsc28ga25vd3Mgd2hpY2ggdmVyc2lvbiBub2RlcyBpdCBuZWVkcyBmcm9tIGVhY2gKK3NoYXJlZCBsaWJyYXJ5IGl0IGlzIGxpbmtlZCBhZ2FpbnN0LiAgVGh1cyBhdCBydW50aW1lLCB0aGUgZHluYW1pYworbG9hZGVyIGNhbiBtYWtlIGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxpYnJhcmllcyB5b3UgaGF2ZQorbGlua2VkIGFnYWluc3QgZG8gaW4gZmFjdCBzdXBwbHkgYWxsIG9mIHRoZSB2ZXJzaW9uIG5vZGVzIHRoYXQgdGhlCithcHBsaWNhdGlvbiB3aWxsIG5lZWQgdG8gcmVzb2x2ZSBhbGwgb2YgdGhlIGR5bmFtaWMgc3ltYm9scy4gIEluIHRoaXMKK3dheSBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGR5bmFtaWMgbGlua2VyIHRvIGtub3cgd2l0aCBjZXJ0YWludHkgdGhhdAorYWxsIGV4dGVybmFsIHN5bWJvbHMgdGhhdCBpdCBuZWVkcyB3aWxsIGJlIHJlc29sdmFibGUgd2l0aG91dCBoYXZpbmcgdG8KK3NlYXJjaCBmb3IgZWFjaCBzeW1ib2wgcmVmZXJlbmNlLgorCisgICA8cD5UaGUgc3ltYm9sIHZlcnNpb25pbmcgaXMgaW4gZWZmZWN0IGEgbXVjaCBtb3JlIHNvcGhpc3RpY2F0ZWQgd2F5IG9mCitkb2luZyBtaW5vciB2ZXJzaW9uIGNoZWNraW5nIHRoYXQgU3VuT1MgZG9lcy4gIFRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtCit0aGF0IGlzIGJlaW5nIGFkZHJlc3NlZCBoZXJlIGlzIHRoYXQgdHlwaWNhbGx5IHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwKK2Z1bmN0aW9ucyBhcmUgYm91bmQgb24gYW4gYXMtbmVlZGVkIGJhc2lzLCBhbmQgYXJlIG5vdCBhbGwgYm91bmQgd2hlbgordGhlIGFwcGxpY2F0aW9uIHN0YXJ0cyB1cC4gIElmIGEgc2hhcmVkIGxpYnJhcnkgaXMgb3V0IG9mIGRhdGUsIGEKK3JlcXVpcmVkIGludGVyZmFjZSBtYXkgYmUgbWlzc2luZzsgd2hlbiB0aGUgYXBwbGljYXRpb24gdHJpZXMgdG8gdXNlCit0aGF0IGludGVyZmFjZSwgaXQgbWF5IHN1ZGRlbmx5IGFuZCB1bmV4cGVjdGVkbHkgZmFpbC4gIFdpdGggc3ltYm9sCit2ZXJzaW9uaW5nLCB0aGUgdXNlciB3aWxsIGdldCBhIHdhcm5pbmcgd2hlbiB0aGV5IHN0YXJ0IHRoZWlyIHByb2dyYW0gaWYKK3RoZSBsaWJyYXJpZXMgYmVpbmcgdXNlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbiBhcmUgdG9vIG9sZC4KKworICAgPHA+VGhlcmUgYXJlIHNldmVyYWwgR05VIGV4dGVuc2lvbnMgdG8gU3VuJ3MgdmVyc2lvbmluZyBhcHByb2FjaC4gIFRoZQorZmlyc3Qgb2YgdGhlc2UgaXMgdGhlIGFiaWxpdHkgdG8gYmluZCBhIHN5bWJvbCB0byBhIHZlcnNpb24gbm9kZSBpbiB0aGUKK3NvdXJjZSBmaWxlIHdoZXJlIHRoZSBzeW1ib2wgaXMgZGVmaW5lZCBpbnN0ZWFkIG9mIGluIHRoZSB2ZXJzaW9uaW5nCitzY3JpcHQuICBUaGlzIHdhcyBkb25lIG1haW5seSB0byByZWR1Y2UgdGhlIGJ1cmRlbiBvbiB0aGUgbGlicmFyeQorbWFpbnRhaW5lci4gIFlvdSBjYW4gZG8gdGhpcyBieSBwdXR0aW5nIHNvbWV0aGluZyBsaWtlOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIF9fYXNtX18oIi5zeW12ZXIgb3JpZ2luYWxfZm9vLGZvb0BWRVJTXzEuMSIpOworPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPmluIHRoZSBDIHNvdXJjZSBmaWxlLiAgVGhpcyByZW5hbWVzIHRoZSBmdW5jdGlvbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9yaWdpbmFsX2Zvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyB0bworYmUgYW4gYWxpYXMgZm9yICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJvdW5kIHRvIHRoZSB2ZXJzaW9uIG5vZGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5WRVJTXzEuMTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sb2NhbDo8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgdGhlIHN5bWJvbAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5vcmlnaW5hbF9mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgZnJvbSBiZWluZyBleHBvcnRlZC4gQSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zeW12ZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlCit0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYSB2ZXJzaW9uIHNjcmlwdC4KKworICAgPHA+VGhlIHNlY29uZCBHTlUgZXh0ZW5zaW9uIGlzIHRvIGFsbG93IG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBzYW1lCitmdW5jdGlvbiB0byBhcHBlYXIgaW4gYSBnaXZlbiBzaGFyZWQgbGlicmFyeS4gIEluIHRoaXMgd2F5IHlvdSBjYW4gbWFrZQorYW4gaW5jb21wYXRpYmxlIGNoYW5nZSB0byBhbiBpbnRlcmZhY2Ugd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBtYWpvcgordmVyc2lvbiBudW1iZXIgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LCB3aGlsZSBzdGlsbCBhbGxvd2luZyBhcHBsaWNhdGlvbnMKK2xpbmtlZCBhZ2FpbnN0IHRoZSBvbGQgaW50ZXJmYWNlIHRvIGNvbnRpbnVlIHRvIGZ1bmN0aW9uLgorCisgICA8cD5UbyBkbyB0aGlzLCB5b3UgbXVzdCB1c2UgbXVsdGlwbGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3ltdmVyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZXMgaW4gdGhlCitzb3VyY2UgZmlsZS4gIEhlcmUgaXMgYW4gZXhhbXBsZToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIF9fYXNtX18oIi5zeW12ZXIgb3JpZ2luYWxfZm9vLGZvb0AiKTsKKyAgICAgX19hc21fXygiLnN5bXZlciBvbGRfZm9vLGZvb0BWRVJTXzEuMSIpOworICAgICBfX2FzbV9fKCIuc3ltdmVyIG9sZF9mb28xLGZvb0BWRVJTXzEuMiIpOworICAgICBfX2FzbV9fKCIuc3ltdmVyIG5ld19mb28sZm9vQEBWRVJTXzIuMCIpOworPC9wcmU+CisgICA8cD5JbiB0aGlzIGV4YW1wbGUsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vQDwvc3Bhbj48L3NhbXA+JnJzcXVvOyByZXByZXNlbnRzIHRoZSBzeW1ib2wgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgYm91bmQgdG8gdGhlCit1bnNwZWNpZmllZCBiYXNlIHZlcnNpb24gb2YgdGhlIHN5bWJvbC4gIFRoZSBzb3VyY2UgZmlsZSB0aGF0IGNvbnRhaW5zIHRoaXMKK2V4YW1wbGUgd291bGQgZGVmaW5lIDQgQyBmdW5jdGlvbnM6ICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+b3JpZ2luYWxfZm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9sZF9mb288L3NwYW4+PC9zYW1wPiZyc3F1bzssCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9sZF9mb28xPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBhbmQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5uZXdfZm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICA8cD5XaGVuIHlvdSBoYXZlIG11bHRpcGxlIGRlZmluaXRpb25zIG9mIGEgZ2l2ZW4gc3ltYm9sLCB0aGVyZSBuZWVkcyB0byBiZQorc29tZSB3YXkgdG8gc3BlY2lmeSBhIGRlZmF1bHQgdmVyc2lvbiB0byB3aGljaCBleHRlcm5hbCByZWZlcmVuY2VzIHRvCit0aGlzIHN5bWJvbCB3aWxsIGJlIGJvdW5kLiAgWW91IGNhbiBkbyB0aGlzIHdpdGggdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvb0BAVkVSU18yLjA8L3NwYW4+PC9zYW1wPiZyc3F1bzsgdHlwZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5zeW12ZXI8L3NwYW4+PC9zYW1wPiZyc3F1bzsgZGlyZWN0aXZlLiAgWW91IGNhbiBvbmx5CitkZWNsYXJlIG9uZSB2ZXJzaW9uIG9mIGEgc3ltYm9sIGFzIHRoZSBkZWZhdWx0IGluIHRoaXMgbWFubmVyOyBvdGhlcndpc2UKK3lvdSB3b3VsZCBlZmZlY3RpdmVseSBoYXZlIG11bHRpcGxlIGRlZmluaXRpb25zIG9mIHRoZSBzYW1lIHN5bWJvbC4KKworICAgPHA+SWYgeW91IHdpc2ggdG8gYmluZCBhIHJlZmVyZW5jZSB0byBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIHN5bWJvbAord2l0aGluIHRoZSBzaGFyZWQgbGlicmFyeSwgeW91IGNhbiB1c2UgdGhlIGFsaWFzZXMgb2YgY29udmVuaWVuY2UKKyhpLmUuLCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPm9sZF9mb288L3NwYW4+PC9zYW1wPiZyc3F1bzspLCBvciB5b3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uc3ltdmVyPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdGl2ZSB0bworc3BlY2lmaWNhbGx5IGJpbmQgdG8gYW4gZXh0ZXJuYWwgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24uCisKKyAgIDxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB0aGUgdmVyc2lvbiBzY3JpcHQ6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBWRVJTSU9OIGV4dGVybiAibGFuZyIgeyB2ZXJzaW9uLXNjcmlwdC1jb21tYW5kcyB9Cis8L3ByZT4KKyAgIDxwPlRoZSBzdXBwb3J0ZWQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5sYW5nPC9zcGFuPjwvc2FtcD4mcnNxdW87cyBhcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5DPC9zcGFuPjwvc2FtcD4mcnNxdW87LCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkMrKzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+SmF2YTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gCitUaGUgbGlua2VyIHdpbGwgaXRlcmF0ZSBvdmVyIHRoZSBsaXN0IG9mIHN5bWJvbHMgYXQgdGhlIGxpbmsgdGltZSBhbmQKK2RlbWFuZ2xlIHRoZW0gYWNjb3JkaW5nIHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGFuZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBiZWZvcmUgbWF0Y2hpbmcgdGhlbSB0byB0aGUKK3BhdHRlcm5zIHNwZWNpZmllZCBpbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnZlcnNpb24tc2NyaXB0LWNvbW1hbmRzPC9zcGFuPjwvc2FtcD4mcnNxdW87LiAgVGhlIGRlZmF1bHQKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGFuZzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPkM8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgIDxwPkRlbWFuZ2xlZCBuYW1lcyBtYXkgY29udGFpbnMgc3BhY2VzIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMuICBBcworZGVzY3JpYmVkIGFib3ZlLCB5b3UgY2FuIHVzZSBhIGdsb2IgcGF0dGVybiB0byBtYXRjaCBkZW1hbmdsZWQgbmFtZXMsCitvciB5b3UgY2FuIHVzZSBhIGRvdWJsZS1xdW90ZWQgc3RyaW5nIHRvIG1hdGNoIHRoZSBzdHJpbmcgZXhhY3RseS4gIEluCit0aGUgbGF0dGVyIGNhc2UsIGJlIGF3YXJlIHRoYXQgbWlub3IgZGlmZmVyZW5jZXMgKHN1Y2ggYXMgZGlmZmVyaW5nCit3aGl0ZXNwYWNlKSBiZXR3ZWVuIHRoZSB2ZXJzaW9uIHNjcmlwdCBhbmQgdGhlIGRlbWFuZ2xlciBvdXRwdXQgd2lsbAorY2F1c2UgYSBtaXNtYXRjaC4gIEFzIHRoZSBleGFjdCBzdHJpbmcgZ2VuZXJhdGVkIGJ5IHRoZSBkZW1hbmdsZXIKK21pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLCBldmVuIGlmIHRoZSBtYW5nbGVkIG5hbWUgZG9lcyBub3QsIHlvdQorc2hvdWxkIGNoZWNrIHRoYXQgYWxsIG9mIHlvdXIgdmVyc2lvbiBkaXJlY3RpdmVzIGFyZSBiZWhhdmluZyBhcyB5b3UKK2V4cGVjdCB3aGVuIHlvdSB1cGdyYWRlLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9XSU4zMi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvV0lOMzIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODI3OThhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvV0lOMzIuaHRtbApAQCAtMCwwICsxLDQ2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+V0lOMzIgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRJLUNPRkYuaHRtbCNUSS1DT0ZGIiB0aXRsZT0iVEkgQ09GRiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ilh0ZW5zYS5odG1sI1h0ZW5zYSIgdGl0bGU9Ilh0ZW5zYSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzwhLS0KK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEdOVSBsaW5rZXIgTEQKKyhHTlUgQmludXRpbHMpCit2ZXJzaW9uIDIuMjMuMi4KKworQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgYGBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UnJy4tLT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iV0lOMzIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iWHRlbnNhLmh0bWwjWHRlbnNhIj5YdGVuc2E8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJUSS1DT0ZGLmh0bWwjVEktQ09GRiI+VEkgQ09GRjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiPk1hY2hpbmUgRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xMyA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgV0lOMzIgKGN5Z3dpbi9taW5ndyk8L2gzPgorCis8cD5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHNvbWUgb2YgdGhlIHdpbjMyIHNwZWNpZmljIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGlzc3Vlcy4gCitTZWUgPGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPkNvbW1hbmQgTGluZSBPcHRpb25zPC9hPiBmb3IgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlCitjb21tYW5kIGxpbmUgb3B0aW9ucyBtZW50aW9uZWQgaGVyZS4KKworICAgICAKKzxhIG5hbWU9ImluZGV4LWltcG9ydC1saWJyYXJpZXMtNjgyIj48L2E+Cis8ZGw+PGR0PjxlbT5pbXBvcnQgbGlicmFyaWVzPC9lbT48ZGQ+VGhlIHN0YW5kYXJkIFdpbmRvd3MgbGlua2VyIGNyZWF0ZXMgYW5kIHVzZXMgc28tY2FsbGVkIGltcG9ydAorbGlicmFyaWVzLCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgbGlua2luZyB0byBkbGwncy4gIFRoZXkgYXJlCityZWd1bGFyIHN0YXRpYyBhcmNoaXZlcyBhbmQgYXJlIGhhbmRsZWQgYXMgYW55IG90aGVyIHN0YXRpYworYXJjaGl2ZS4gIFRoZSBjeWd3aW4gYW5kIG1pbmd3IHBvcnRzIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGhhdmUgc3BlY2lmaWMKK3N1cHBvcnQgZm9yIGNyZWF0aW5nIHN1Y2ggbGlicmFyaWVzIHByb3ZpZGVkIHdpdGggdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tb3V0LWltcGxpYjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgICAgIDxicj48ZHQ+PGVtPmV4cG9ydGluZyBETEwgc3ltYm9sczwvZW0+PGRkPjxhIG5hbWU9ImluZGV4LWV4cG9ydGluZy1ETEwtc3ltYm9scy02ODMiPjwvYT5UaGUgY3lnd2luL21pbmd3IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGhhcyBzZXZlcmFsIHdheXMgdG8gZXhwb3J0IHN5bWJvbHMgZm9yIGRsbCdzLgorCisgICAgICAgICAgPGRsPgorPGR0PjxlbT51c2luZyBhdXRvLWV4cG9ydCBmdW5jdGlvbmFsaXR5PC9lbT48ZGQ+PGEgbmFtZT0iaW5kZXgtdXNpbmctYXV0b18wMDJkZXhwb3J0LWZ1bmN0aW9uYWxpdHktNjg0Ij48L2E+QnkgZGVmYXVsdCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBleHBvcnRzIHN5bWJvbHMgd2l0aCB0aGUgYXV0by1leHBvcnQgZnVuY3Rpb25hbGl0eSwKK3doaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUgb3B0aW9uczoKKworICAgICAgICAgICAgICAgPHVsPgorPGxpPiZuZGFzaDtleHBvcnQtYWxsLXN5bWJvbHMgICBbVGhpcyBpcyB0aGUgZGVmYXVsdF0KKzxsaT4mbmRhc2g7ZXhjbHVkZS1zeW1ib2xzCis8bGk+Jm5kYXNoO2V4Y2x1ZGUtbGlicworPGxpPiZuZGFzaDtleGNsdWRlLW1vZHVsZXMtZm9yLWltcGxpYgorPGxpPiZuZGFzaDt2ZXJzaW9uLXNjcmlwdAorPC91bD4KKworICAgICAgICAgIDxwPldoZW4gYXV0by1leHBvcnQgaXMgaW4gb3BlcmF0aW9uLCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiB3aWxsIGV4cG9ydCBhbGwgdGhlIG5vbi1sb2NhbAorKGdsb2JhbCBhbmQgY29tbW9uKSBzeW1ib2xzIGl0IGZpbmRzIGluIGEgRExMLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgYSBmZXcKK3N5bWJvbHMga25vd24gdG8gYmVsb25nIHRvIHRoZSBzeXN0ZW0ncyBydW50aW1lIGFuZCBsaWJyYXJpZXMuICBBcyBpdCB3aWxsCitvZnRlbiBub3QgYmUgZGVzaXJhYmxlIHRvIGV4cG9ydCBhbGwgb2YgYSBETEwncyBzeW1ib2xzLCB3aGljaCBtYXkgaW5jbHVkZQorcHJpdmF0ZSBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgYW55IHB1YmxpYyBpbnRlcmZhY2UsIHRoZSBjb21tYW5kLWxpbmUKK29wdGlvbnMgbGlzdGVkIGFib3ZlIG1heSBiZSB1c2VkIHRvIGZpbHRlciBzeW1ib2xzIG91dCBmcm9tIHRoZSBsaXN0IGZvcgorZXhwb3J0aW5nLiAgVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1vdXRwdXQtZGVmPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBjYW4gYmUgdXNlZCBpbiBvcmRlciB0byBzZWUgdGhlCitmaW5hbCBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMgd2l0aCBhbGwgZXhjbHVzaW9ucyB0YWtlbiBpbnRvIGVmZmVjdC4KKworICAgICAgICAgIDxwPklmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1leHBvcnQtYWxsLXN5bWJvbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgbm90IGdpdmVuIGV4cGxpY2l0bHkgb24gdGhlCitjb21tYW5kIGxpbmUsIHRoZW4gdGhlIGRlZmF1bHQgYXV0by1leHBvcnQgYmVoYXZpb3Igd2lsbCBiZSA8ZW0+ZGlzYWJsZWQ8L2VtPgoraWYgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CisKKyAgICAgICAgICAgICAgIDx1bD4KKzxsaT5BIERFRiBmaWxlIGlzIHVzZWQuIAorPGxpPkFueSBzeW1ib2wgaW4gYW55IG9iamVjdCBmaWxlIHdhcyBtYXJrZWQgd2l0aCB0aGUgX19kZWNsc3BlYyhkbGxleHBvcnQpIGF0dHJpYnV0ZS4gCis8L3VsPgorCisgICAgICAgICAgPGJyPjxkdD48ZW0+dXNpbmcgYSBERUYgZmlsZTwvZW0+PGRkPjxhIG5hbWU9ImluZGV4LXVzaW5nLWEtREVGLWZpbGUtNjg1Ij48L2E+QW5vdGhlciB3YXkgb2YgZXhwb3J0aW5nIHN5bWJvbHMgaXMgdXNpbmcgYSBERUYgZmlsZS4gIEEgREVGIGZpbGUgaXMKK2FuIEFTQ0lJIGZpbGUgY29udGFpbmluZyBkZWZpbml0aW9ucyBvZiBzeW1ib2xzIHdoaWNoIHNob3VsZCBiZQorZXhwb3J0ZWQgd2hlbiBhIGRsbCBpcyBjcmVhdGVkLiAgVXN1YWxseSBpdCBpcyBuYW1lZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDtkbGwKK25hbWUmZ3Q7LmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhbmQgaXMgYWRkZWQgYXMgYW55IG90aGVyIG9iamVjdCBmaWxlIHRvIHRoZSBsaW5rZXIncworY29tbWFuZCBsaW5lLiAgVGhlIGZpbGUncyBuYW1lIG11c3QgZW5kIGluICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRlZjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi5ERUY8L3NwYW4+PC9zYW1wPiZyc3F1bzsuCisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgICBnY2MgLW8gJmx0O291dHB1dCZndDsgJmx0O29iamVjdGZpbGVzJmd0OyAmbHQ7ZGxsIG5hbWUmZ3Q7LmRlZgorPC9wcmU+CisgICAgICAgICAgPHA+VXNpbmcgYSBERUYgZmlsZSB0dXJucyBvZmYgdGhlIG5vcm1hbCBhdXRvLWV4cG9ydCBiZWhhdmlvciwgdW5sZXNzIHRoZQorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWV4cG9ydC1hbGwtc3ltYm9sczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBvcHRpb24gaXMgYWxzbyB1c2VkLgorCisgICAgICAgICAgPHA+SGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgREVGIGZpbGUgZm9yIGEgc2hhcmVkIGxpYnJhcnkgY2FsbGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+eHl6LmRsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOzoKKworICAgICAgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAgICAgIExJQlJBUlkgInh5ei5kbGwiIEJBU0U9MHgyMDAwMDAwMAorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICBFWFBPUlRTCisgICAgICAgICAgICAgICBmb28KKyAgICAgICAgICAgICAgIGJhcgorICAgICAgICAgICAgICAgX2JhciA9IGJhcgorICAgICAgICAgICAgICAgYW5vdGhlcl9mb28gPSBhYmMuZGxsLmFmb28KKyAgICAgICAgICAgICAgIHZhcjEgREFUQQorICAgICAgICAgICAgICAgZG9vID0gZm9vID09IGZvbzIKKyAgICAgICAgICAgICAgIGVvbyBEQVRBID09IHZhcjEKKzwvcHJlPgorICAgICAgICAgIDxwPlRoaXMgZXhhbXBsZSBkZWZpbmVzIGEgRExMIHdpdGggYSBub24tZGVmYXVsdCBiYXNlIGFkZHJlc3MgYW5kIHNldmVuCitzeW1ib2xzIGluIHRoZSBleHBvcnQgdGFibGUuIFRoZSB0aGlyZCBleHBvcnRlZCBzeW1ib2wgPGNvZGU+X2JhcjwvY29kZT4gaXMgYW4KK2FsaWFzIGZvciB0aGUgc2Vjb25kLiBUaGUgZm91cnRoIHN5bWJvbCwgPGNvZGU+YW5vdGhlcl9mb288L2NvZGU+IGlzIHJlc29sdmVkCitieSAiZm9yd2FyZGluZyIgdG8gYW5vdGhlciBtb2R1bGUgYW5kIHRyZWF0aW5nIGl0IGFzIGFuIGFsaWFzIGZvcgorPGNvZGU+YWZvbzwvY29kZT4gZXhwb3J0ZWQgZnJvbSB0aGUgRExMICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YWJjLmRsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOy4gVGhlIGZpbmFsIHN5bWJvbAorPGNvZGU+dmFyMTwvY29kZT4gaXMgZGVjbGFyZWQgdG8gYmUgYSBkYXRhIG9iamVjdC4gVGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+ZG9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN5bWJvbCBpbgorZXhwb3J0IGxpYnJhcnkgaXMgYW4gYWxpYXMgb2YgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mb288L3NwYW4+PC9zYW1wPiZyc3F1bzssIHdoaWNoIGdldHMgdGhlIHN0cmluZyBuYW1lCitpbiBleHBvcnQgdGFibGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mb28yPC9zcGFuPjwvc2FtcD4mcnNxdW87LiBUaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5lb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3ltYm9sIGlzIGFuIGRhdGEgZXhwb3J0CitzeW1ib2wsIHdoaWNoIGdldHMgaW4gZXhwb3J0IHRhYmxlIHRoZSBuYW1lICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+dmFyMTwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICAgICAgIDxwPlRoZSBvcHRpb25hbCA8Y29kZT5MSUJSQVJZICZsdDtuYW1lJmd0OzwvY29kZT4gY29tbWFuZCBpbmRpY2F0ZXMgdGhlIDxlbT5pbnRlcm5hbDwvZW0+CituYW1lIG9mIHRoZSBvdXRwdXQgRExMLiBJZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDtuYW1lJmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkb2VzIG5vdCBpbmNsdWRlIGEgc3VmZml4LAordGhlIGRlZmF1bHQgbGlicmFyeSBzdWZmaXgsICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LkRMTDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBhcHBlbmRlZC4KKworICAgICAgICAgIDxwPldoZW4gdGhlIC5ERUYgZmlsZSBpcyB1c2VkIHRvIGJ1aWxkIGFuIGFwcGxpY2F0aW9uLCByYXRoZXIgdGhhbiBhCitsaWJyYXJ5LCB0aGUgPGNvZGU+TkFNRSAmbHQ7bmFtZSZndDs8L2NvZGU+IGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZgorPGNvZGU+TElCUkFSWTwvY29kZT4uIElmICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0O25hbWUmZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGRvZXMgbm90IGluY2x1ZGUgYSBzdWZmaXgsIHRoZSBkZWZhdWx0CitleGVjdXRhYmxlIHN1ZmZpeCwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uRVhFPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIGFwcGVuZGVkLgorCisgICAgICAgICAgPHA+V2l0aCBlaXRoZXIgPGNvZGU+TElCUkFSWSAmbHQ7bmFtZSZndDs8L2NvZGU+IG9yIDxjb2RlPk5BTUUgJmx0O25hbWUmZ3Q7PC9jb2RlPiB0aGUgb3B0aW9uYWwKK3NwZWNpZmljYXRpb24gPGNvZGU+QkFTRSA9ICZsdDtudW1iZXImZ3Q7PC9jb2RlPiBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IGEKK25vbi1kZWZhdWx0IGJhc2UgYWRkcmVzcyBmb3IgdGhlIGltYWdlLgorCisgICAgICAgICAgPHA+SWYgbmVpdGhlciA8Y29kZT5MSUJSQVJZICZsdDtuYW1lJmd0OzwvY29kZT4gbm9yICA8Y29kZT5OQU1FICZsdDtuYW1lJmd0OzwvY29kZT4gaXMgc3BlY2lmaWVkLAorb3IgdGhleSBzcGVjaWZ5IGFuIGVtcHR5IHN0cmluZywgdGhlIGludGVybmFsIG5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlCitmaWxlbmFtZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworICAgICAgICAgIDxwPlRoZSBjb21wbGV0ZSBzcGVjaWZpY2F0aW9uIG9mIGFuIGV4cG9ydCBzeW1ib2wgaXM6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgICBFWFBPUlRTCisgICAgICAgICAgICAgICAgICggKCAgKCAmbHQ7bmFtZTEmZ3Q7IFsgPSAmbHQ7bmFtZTImZ3Q7IF0gKQorICAgICAgICAgICAgICAgICAgICB8ICggJmx0O25hbWUxJmd0OyA9ICZsdDttb2R1bGUtbmFtZSZndDsgLiAmbHQ7ZXh0ZXJuYWwtbmFtZSZndDspKQorICAgICAgICAgICAgICAgICBbIEAgJmx0O2ludGVnZXImZ3Q7IF0gW05PTkFNRV0gW0RBVEFdIFtDT05TVEFOVF0gW1BSSVZBVEVdIFs9PSAmbHQ7bmFtZTMmZ3Q7XSApICoKKzwvcHJlPgorICAgICAgICAgIDxwPkRlY2xhcmVzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0O25hbWUxJmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBhcyBhbiBleHBvcnRlZCBzeW1ib2wgZnJvbSB0aGUgRExMLCBvciBkZWNsYXJlcworJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7bmFtZTEmZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGFzIGFuIGV4cG9ydGVkIGFsaWFzIGZvciAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDtuYW1lMiZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzs7IG9yIGRlY2xhcmVzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDtuYW1lMSZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYXMgYSAiZm9yd2FyZCIgYWxpYXMgZm9yIHRoZSBzeW1ib2wKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0O2V4dGVybmFsLW5hbWUmZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGluIHRoZSBETEwgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7bW9kdWxlLW5hbWUmZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LiAKK09wdGlvbmFsbHksIHRoZSBzeW1ib2wgbWF5IGJlIGV4cG9ydGVkIGJ5IHRoZSBzcGVjaWZpZWQgb3JkaW5hbAorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7aW50ZWdlciZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYWxpYXMuIFRoZSBvcHRpb25hbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPiZsdDtuYW1lMyZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgdGhlIHRvIGJlIHVzZWQKK3N0cmluZyBpbiBpbXBvcnQvZXhwb3J0IHRhYmxlIGZvciB0aGUgc3ltYm9sLgorCisgICAgICAgICAgPHA+VGhlIG9wdGlvbmFsIGtleXdvcmRzIHRoYXQgZm9sbG93IHRoZSBkZWNsYXJhdGlvbiBpbmRpY2F0ZToKKworICAgICAgICAgIDxwPjxjb2RlPk5PTkFNRTwvY29kZT46IERvIG5vdCBwdXQgdGhlIHN5bWJvbCBuYW1lIGluIHRoZSBETEwncyBleHBvcnQgdGFibGUuICBJdAord2lsbCBzdGlsbCBiZSBleHBvcnRlZCBieSBpdHMgb3JkaW5hbCBhbGlhcyAoZWl0aGVyIHRoZSB2YWx1ZSBzcGVjaWZpZWQKK2J5IHRoZSAuZGVmIHNwZWNpZmljYXRpb24gb3IsIG90aGVyd2lzZSwgdGhlIHZhbHVlIGFzc2lnbmVkIGJ5IHRoZQorbGlua2VyKS4gVGhlIHN5bWJvbCBuYW1lLCBob3dldmVyLCBkb2VzIHJlbWFpbiB2aXNpYmxlIGluIHRoZSBpbXBvcnQKK2xpYnJhcnkgKGlmIGFueSksIHVubGVzcyA8Y29kZT5QUklWQVRFPC9jb2RlPiBpcyBhbHNvIHNwZWNpZmllZC4KKworICAgICAgICAgIDxwPjxjb2RlPkRBVEE8L2NvZGU+OiBUaGUgc3ltYm9sIGlzIGEgdmFyaWFibGUgb3Igb2JqZWN0LCByYXRoZXIgdGhhbiBhIGZ1bmN0aW9uLiAKK1RoZSBpbXBvcnQgbGliIHdpbGwgZXhwb3J0IG9ubHkgYW4gaW5kaXJlY3QgcmVmZXJlbmNlIHRvIDxjb2RlPmZvbzwvY29kZT4gYXMKK3RoZSBzeW1ib2wgPGNvZGU+X2ltcF9fZm9vPC9jb2RlPiAoaWUsIDxjb2RlPmZvbzwvY29kZT4gbXVzdCBiZSByZXNvbHZlZCBhcworPGNvZGU+Kl9pbXBfX2ZvbzwvY29kZT4pLgorCisgICAgICAgICAgPHA+PGNvZGU+Q09OU1RBTlQ8L2NvZGU+OiBMaWtlIDxjb2RlPkRBVEE8L2NvZGU+LCBidXQgcHV0IHRoZSB1bmRlY29yYXRlZCA8Y29kZT5mb288L2NvZGU+IGFzCit3ZWxsIGFzIDxjb2RlPl9pbXBfX2ZvbzwvY29kZT4gaW50byB0aGUgaW1wb3J0IGxpYnJhcnkuIEJvdGggcmVmZXIgdG8gdGhlCityZWFkLW9ubHkgaW1wb3J0IGFkZHJlc3MgdGFibGUncyBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZSwgbm90IHRvIHRoZQordmFyaWFibGUgaXRzZWxmLiBUaGlzIGNhbiBiZSBkYW5nZXJvdXMuIElmIHRoZSB1c2VyIGNvZGUgZmFpbHMgdG8gYWRkCit0aGUgPGNvZGU+ZGxsaW1wb3J0PC9jb2RlPiBhdHRyaWJ1dGUgYW5kIGFsc28gZmFpbHMgdG8gZXhwbGljaXRseSBhZGQgdGhlCitleHRyYSBpbmRpcmVjdGlvbiB0aGF0IHRoZSB1c2Ugb2YgdGhlIGF0dHJpYnV0ZSBlbmZvcmNlcywgdGhlCithcHBsaWNhdGlvbiB3aWxsIGJlaGF2ZSB1bmV4cGVjdGVkbHkuCisKKyAgICAgICAgICA8cD48Y29kZT5QUklWQVRFPC9jb2RlPjogUHV0IHRoZSBzeW1ib2wgaW4gdGhlIERMTCdzIGV4cG9ydCB0YWJsZSwgYnV0IGRvIG5vdCBwdXQKK2l0IGludG8gdGhlIHN0YXRpYyBpbXBvcnQgbGlicmFyeSB1c2VkIHRvIHJlc29sdmUgaW1wb3J0cyBhdCBsaW5rIHRpbWUuIFRoZQorc3ltYm9sIGNhbiBzdGlsbCBiZSBpbXBvcnRlZCB1c2luZyB0aGUgPGNvZGU+TG9hZExpYnJhcnkvR2V0UHJvY0FkZHJlc3M8L2NvZGU+CitBUEkgYXQgcnVudGltZSBvciBieSBieSB1c2luZyB0aGUgR05VIGxkIGV4dGVuc2lvbiBvZiBsaW5raW5nIGRpcmVjdGx5IHRvCit0aGUgRExMIHdpdGhvdXQgYW4gaW1wb3J0IGxpYnJhcnkuCisKKyAgICAgICAgICA8cD5TZWUgbGQvZGVmZmlsZXAueSBpbiB0aGUgYmludXRpbHMgc291cmNlcyBmb3IgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbiBvZgorb3RoZXIgREVGIGZpbGUgc3RhdGVtZW50cworCisgICAgICAgICAgPHA+PGEgbmFtZT0iaW5kZXgtY3JlYXRpbmctYS1ERUYtZmlsZS02ODYiPjwvYT5XaGlsZSBsaW5raW5nIGEgc2hhcmVkIGRsbCwgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gaXMgYWJsZSB0byBjcmVhdGUgYSBERUYgZmlsZQord2l0aCB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLW91dHB1dC1kZWYgJmx0O2ZpbGUmZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24uCisKKyAgICAgICAgICA8YnI+PGR0PjxlbT5Vc2luZyBkZWNvcmF0aW9uczwvZW0+PGRkPjxhIG5hbWU9ImluZGV4LVVzaW5nLWRlY29yYXRpb25zLTY4NyI+PC9hPkFub3RoZXIgd2F5IG9mIG1hcmtpbmcgc3ltYm9scyBmb3IgZXhwb3J0IGlzIHRvIG1vZGlmeSB0aGUgc291cmNlIGNvZGUKK2l0c2VsZiwgc28gdGhhdCB3aGVuIGJ1aWxkaW5nIHRoZSBETEwgZWFjaCBzeW1ib2wgdG8gYmUgZXhwb3J0ZWQgaXMKK2RlY2xhcmVkIGFzOgorCisgICAgICAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICAgICAgX19kZWNsc3BlYyhkbGxleHBvcnQpIGludCBhX3ZhcmlhYmxlCisgICAgICAgICAgICAgICBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZCBhX2Z1bmN0aW9uKGludCB3aXRoX2FyZ3MpCis8L3ByZT4KKyAgICAgICAgICA8cD5BbGwgc3VjaCBzeW1ib2xzIHdpbGwgYmUgZXhwb3J0ZWQgZnJvbSB0aGUgRExMLiAgSWYsIGhvd2V2ZXIsCithbnkgb2YgdGhlIG9iamVjdCBmaWxlcyBpbiB0aGUgRExMIGNvbnRhaW4gc3ltYm9scyBkZWNvcmF0ZWQgaW4KK3RoaXMgd2F5LCB0aGVuIHRoZSBub3JtYWwgYXV0by1leHBvcnQgYmVoYXZpb3IgaXMgZGlzYWJsZWQsIHVubGVzcwordGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1leHBvcnQtYWxsLXN5bWJvbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGlzIGFsc28gdXNlZC4KKworICAgICAgICAgIDxwPk5vdGUgdGhhdCBvYmplY3QgZmlsZXMgdGhhdCB3aXNoIHRvIGFjY2VzcyB0aGVzZSBzeW1ib2xzIG11c3QgPGVtPm5vdDwvZW0+CitkZWNvcmF0ZSB0aGVtIHdpdGggZGxsZXhwb3J0LiAgSW5zdGVhZCwgdGhleSBzaG91bGQgdXNlIGRsbGltcG9ydCwKK2luc3RlYWQ6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgICBfX2RlY2xzcGVjKGRsbGltcG9ydCkgaW50IGFfdmFyaWFibGUKKyAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSB2b2lkIGFfZnVuY3Rpb24oaW50IHdpdGhfYXJncykKKzwvcHJlPgorICAgICAgICAgIDxwPlRoaXMgY29tcGxpY2F0ZXMgdGhlIHN0cnVjdHVyZSBvZiBsaWJyYXJ5IGhlYWRlciBmaWxlcywgYmVjYXVzZQord2hlbiBpbmNsdWRlZCBieSB0aGUgbGlicmFyeSBpdHNlbGYgdGhlIGhlYWRlciBtdXN0IGRlY2xhcmUgdGhlCit2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBhcyBkbGxleHBvcnQsIGJ1dCB3aGVuIGluY2x1ZGVkIGJ5IGNsaWVudAorY29kZSB0aGUgaGVhZGVyIG11c3QgZGVjbGFyZSB0aGVtIGFzIGRsbGltcG9ydC4gIFRoZXJlIGFyZSBhIG51bWJlcgorb2YgaWRpb21zIHRoYXQgYXJlIHR5cGljYWxseSB1c2VkIHRvIGRvIHRoaXM7IG9mdGVuIGNsaWVudCBjb2RlIGNhbgorb21pdCB0aGUgX19kZWNsc3BlYygpIGRlY2xhcmF0aW9uIGNvbXBsZXRlbHkuICBTZWUKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1lbmFibGUtYXV0by1pbXBvcnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+YXV0b21hdGljIGRhdGEgaW1wb3J0czwvc3Bhbj48L3NhbXA+JnJzcXVvOyBmb3IgbW9yZQoraW5mb3JtYXRpb24uIAorPC9kbD4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1hdXRvbWF0aWMtZGF0YS1pbXBvcnRzLTY4OCI+PC9hPjxicj48ZHQ+PGVtPmF1dG9tYXRpYyBkYXRhIGltcG9ydHM8L2VtPjxkZD5UaGUgc3RhbmRhcmQgV2luZG93cyBkbGwgZm9ybWF0IHN1cHBvcnRzIGRhdGEgaW1wb3J0cyBmcm9tIGRsbHMgb25seQorYnkgYWRkaW5nIHNwZWNpYWwgZGVjb3JhdGlvbnMgKGRsbGltcG9ydC9kbGxleHBvcnQpLCB3aGljaCBsZXQgdGhlCitjb21waWxlciBwcm9kdWNlIHNwZWNpZmljIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgdG8gZGVhbCB3aXRoIHRoaXMKK2lzc3VlLiAgVGhpcyBpbmNyZWFzZXMgdGhlIGVmZm9ydCBuZWNlc3NhcnkgdG8gcG9ydCBleGlzdGluZyBVbip4Citjb2RlIHRvIHRoZXNlIHBsYXRmb3JtcywgZXNwZWNpYWxseSBmb3IgbGFyZ2UKK2MrKyBsaWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9ucy4gIFRoZSBhdXRvLWltcG9ydCBmZWF0dXJlLCB3aGljaCB3YXMKK2luaXRpYWxseSBwcm92aWRlZCBieSBQYXVsIFNva29sb3Zza3ksIGFsbG93cyBvbmUgdG8gb21pdCB0aGUKK2RlY29yYXRpb25zIHRvIGFjaGlldmUgYSBiZWhhdmlvciB0aGF0IGNvbmZvcm1zIHRvIHRoYXQgb24gUE9TSVgvVW4qeAorcGxhdGZvcm1zLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCB3aXRoIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZW5hYmxlLWF1dG8taW1wb3J0PC9zcGFuPjwvc2FtcD4mcnNxdW87Citjb21tYW5kLWxpbmUgb3B0aW9uLCBhbHRob3VnaCBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gY3lnd2luL21pbmd3LiAKK1RoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZW5hYmxlLWF1dG8taW1wb3J0PC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbiBpdHNlbGYgbm93IHNlcnZlcyBtYWlubHkgdG8KK3N1cHByZXNzIGFueSB3YXJuaW5ncyB0aGF0IGFyZSBvcmRpbmFyaWx5IGVtaXR0ZWQgd2hlbiBsaW5rZWQgb2JqZWN0cwordHJpZ2dlciB0aGUgZmVhdHVyZSdzIHVzZS4KKworICAgICA8cD5hdXRvLWltcG9ydCBvZiB2YXJpYWJsZXMgZG9lcyBub3QgYWx3YXlzIHdvcmsgZmxhd2xlc3NseSB3aXRob3V0CithZGRpdGlvbmFsIGFzc2lzdGFuY2UuICBTb21ldGltZXMsIHlvdSB3aWxsIHNlZSB0aGlzIG1lc3NhZ2UKKworICAgICA8cD4idmFyaWFibGUgJyZsdDt2YXImZ3Q7JyBjYW4ndCBiZSBhdXRvLWltcG9ydGVkLiBQbGVhc2UgcmVhZCB0aGUKK2RvY3VtZW50YXRpb24gZm9yIGxkJ3MgPGNvZGU+LS1lbmFibGUtYXV0by1pbXBvcnQ8L2NvZGU+IGZvciBkZXRhaWxzLiIKKworICAgICA8cD5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWVuYWJsZS1hdXRvLWltcG9ydDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkb2N1bWVudGF0aW9uIGV4cGxhaW5zIHdoeSB0aGlzIGVycm9yCitvY2N1cnMsIGFuZCBzZXZlcmFsIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVyY29tZSB0aGlzIGRpZmZpY3VsdHkuIAorT25lIG9mIHRoZXNlIG1ldGhvZHMgaXMgdGhlIDxlbT5ydW50aW1lIHBzZXVkby1yZWxvY3M8L2VtPiBmZWF0dXJlLCBkZXNjcmliZWQKK2JlbG93LgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LXJ1bnRpbWUtcHNldWRvXzAwMmRyZWxvY2F0aW9uLTY4OSI+PC9hPkZvciBjb21wbGV4IHZhcmlhYmxlcyBpbXBvcnRlZCBmcm9tIERMTHMgKHN1Y2ggYXMgc3RydWN0cyBvciBjbGFzc2VzKSwKK29iamVjdCBmaWxlcyB0eXBpY2FsbHkgY29udGFpbiBhIGJhc2UgYWRkcmVzcyBmb3IgdGhlIHZhcmlhYmxlIGFuZCBhbgorb2Zmc2V0ICg8ZW0+YWRkZW5kPC9lbT4pIHdpdGhpbiB0aGUgdmFyaWFibGUmbmRhc2g7dG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIKK2ZpZWxkIG9yIHB1YmxpYyBtZW1iZXIsIGZvciBpbnN0YW5jZS4gIFVuZm9ydHVuYXRlbHksIHRoZSBydW50aW1lIGxvYWRlciB1c2VkCitpbiB3aW4zMiBlbnZpcm9ubWVudHMgaXMgaW5jYXBhYmxlIG9mIGZpeGluZyB0aGVzZSByZWZlcmVuY2VzIGF0IHJ1bnRpbWUKK3dpdGhvdXQgdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VwcGxpZWQgYnkgZGxsaW1wb3J0L2RsbGV4cG9ydCBkZWNvcmF0aW9ucy4gCitUaGUgc3RhbmRhcmQgYXV0by1pbXBvcnQgZmVhdHVyZSBkZXNjcmliZWQgYWJvdmUgaXMgdW5hYmxlIHRvIHJlc29sdmUgdGhlc2UKK3JlZmVyZW5jZXMuCisKKyAgICAgPHA+VGhlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1lbmFibGUtcnVudGltZS1wc2V1ZG8tcmVsb2NzPC9zcGFuPjwvc2FtcD4mcnNxdW87IHN3aXRjaCBhbGxvd3MgdGhlc2UgcmVmZXJlbmNlcyB0bworYmUgcmVzb2x2ZWQgd2l0aG91dCBlcnJvciwgd2hpbGUgbGVhdmluZyB0aGUgdGFzayBvZiBhZGp1c3RpbmcgdGhlIHJlZmVyZW5jZXMKK3RoZW1zZWx2ZXMgKHdpdGggdGhlaXIgbm9uLXplcm8gYWRkZW5kcykgdG8gc3BlY2lhbGl6ZWQgY29kZSBwcm92aWRlZCBieSB0aGUKK3J1bnRpbWUgZW52aXJvbm1lbnQuICBSZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGN5Z3dpbiBhbmQgbWluZ3cgZW52aXJvbm1lbnRzIGFuZAorY29tcGlsZXJzIHByb3ZpZGUgdGhpcyBydW50aW1lIHN1cHBvcnQ7IG9sZGVyIHZlcnNpb25zIGRvIG5vdC4gIEhvd2V2ZXIsIHRoZQorc3VwcG9ydCBpcyBvbmx5IG5lY2Vzc2FyeSBvbiB0aGUgZGV2ZWxvcGVyJ3MgcGxhdGZvcm07IHRoZSBjb21waWxlZCByZXN1bHQgd2lsbAorcnVuIHdpdGhvdXQgZXJyb3Igb24gYW4gb2xkZXIgc3lzdGVtLgorCisgICAgIDxwPiZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1lbmFibGUtcnVudGltZS1wc2V1ZG8tcmVsb2NzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGlzIG5vdCB0aGUgZGVmYXVsdDsgaXQgbXVzdCBiZSBleHBsaWNpdGx5CitlbmFibGVkIGFzIG5lZWRlZC4KKworICAgICA8cD48YSBuYW1lPSJpbmRleC1kaXJlY3QtbGlua2luZy10by1hLWRsbC02OTAiPjwvYT48YnI+PGR0PjxlbT5kaXJlY3QgbGlua2luZyB0byBhIGRsbDwvZW0+PGRkPlRoZSBjeWd3aW4vbWluZ3cgcG9ydHMgb2YgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gc3VwcG9ydCB0aGUgZGlyZWN0IGxpbmtpbmcsCitpbmNsdWRpbmcgZGF0YSBzeW1ib2xzLCB0byBhIGRsbCB3aXRob3V0IHRoZSB1c2FnZSBvZiBhbnkgaW1wb3J0CitsaWJyYXJpZXMuICBUaGlzIGlzIG11Y2ggZmFzdGVyIGFuZCB1c2VzIG11Y2ggbGVzcyBtZW1vcnkgdGhhbiBkb2VzIHRoZQordHJhZGl0aW9uYWwgaW1wb3J0IGxpYnJhcnkgbWV0aG9kLCBlc3BlY2lhbGx5IHdoZW4gbGlua2luZyBsYXJnZQorbGlicmFyaWVzIG9yIGFwcGxpY2F0aW9ucy4gIFdoZW4gPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gY3JlYXRlcyBhbiBpbXBvcnQgbGliLCBlYWNoCitmdW5jdGlvbiBvciB2YXJpYWJsZSBleHBvcnRlZCBmcm9tIHRoZSBkbGwgaXMgc3RvcmVkIGluIGl0cyBvd24gYmZkLCBldmVuCit0aG91Z2ggYSBzaW5nbGUgYmZkIGNvdWxkIGNvbnRhaW4gbWFueSBleHBvcnRzLiAgVGhlIG92ZXJoZWFkIGludm9sdmVkIGluCitzdG9yaW5nLCBsb2FkaW5nLCBhbmQgcHJvY2Vzc2luZyBzbyBtYW55IGJmZCdzIGlzIHF1aXRlIGxhcmdlLCBhbmQgZXhwbGFpbnMgdGhlCit0cmVtZW5kb3VzIHRpbWUsIG1lbW9yeSwgYW5kIHN0b3JhZ2UgbmVlZGVkIHRvIGxpbmsgYWdhaW5zdCBwYXJ0aWN1bGFybHkKK2xhcmdlIG9yIGNvbXBsZXggbGlicmFyaWVzIHdoZW4gdXNpbmcgaW1wb3J0IGxpYnMuCisKKyAgICAgPHA+TGlua2luZyBkaXJlY3RseSB0byBhIGRsbCB1c2VzIG5vIGV4dHJhIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdGhlciB0aGFuCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1MPC9zcGFuPjwvc2FtcD4mcnNxdW87IGFuZCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1sPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBiZWNhdXNlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFscmVhZHkgc2VhcmNoZXMgZm9yIGEgbnVtYmVyCitvZiBuYW1lcyB0byBtYXRjaCBlYWNoIGxpYnJhcnkuICBBbGwgdGhhdCBpcyBuZWVkZWQgZnJvbSB0aGUgZGV2ZWxvcGVyJ3MKK3BlcnNwZWN0aXZlIGlzIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzZWFyY2gsIGluIG9yZGVyIHRvIGZvcmNlIGxkIHRvCitzZWxlY3QgdGhlIGRsbCBpbnN0ZWFkIG9mIGFuIGltcG9ydCBsaWJyYXJ5LgorCisgICAgIDxwPkZvciBpbnN0YW5jZSwgd2hlbiBsZCBpcyBjYWxsZWQgd2l0aCB0aGUgYXJndW1lbnQgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tbHh4eDwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpdCB3aWxsIGF0dGVtcHQKK3RvIGZpbmQsIGluIHRoZSBmaXJzdCBkaXJlY3Rvcnkgb2YgaXRzIHNlYXJjaCBwYXRoLAorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBsaWJ4eHguZGxsLmEKKyAgICAgICAgICB4eHguZGxsLmEKKyAgICAgICAgICBsaWJ4eHguYQorICAgICAgICAgIHh4eC5saWIKKyAgICAgICAgICBjeWd4eHguZGxsICgqKQorICAgICAgICAgIGxpYnh4eC5kbGwKKyAgICAgICAgICB4eHguZGxsCis8L3ByZT4KKyAgICAgPHA+YmVmb3JlIG1vdmluZyBvbiB0byB0aGUgbmV4dCBkaXJlY3RvcnkgaW4gdGhlIHNlYXJjaCBwYXRoLgorCisgICAgIDxwPigqKSBBY3R1YWxseSwgdGhpcyBpcyBub3QgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jeWd4eHguZGxsPC9zcGFuPjwvc2FtcD4mcnNxdW87IGJ1dCBpbiBmYWN0IGlzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0O3ByZWZpeCZndDt4eHguZGxsPC9zcGFuPjwvc2FtcD4mcnNxdW87LAord2hlcmUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4mbHQ7cHJlZml4Jmd0Ozwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyBzZXQgYnkgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IG9wdGlvbgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWRsbC1zZWFyY2gtcHJlZml4PSZsdDtwcmVmaXgmZ3Q7PC9zcGFuPjwvc2FtcD4mcnNxdW87LiBJbiB0aGUgY2FzZSBvZiBjeWd3aW4sIHRoZSBzdGFuZGFyZCBnY2Mgc3BlYworZmlsZSBpbmNsdWRlcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZGxsLXNlYXJjaC1wcmVmaXg9Y3lnPC9zcGFuPjwvc2FtcD4mcnNxdW87LCBzbyBpbiBlZmZlY3Qgd2UgYWN0dWFsbHkgc2VhcmNoIGZvcgorJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5jeWd4eHguZGxsPC9zcGFuPjwvc2FtcD4mcnNxdW87LgorCisgICAgIDxwPk90aGVyIHdpbjMyLWJhc2VkIHVuaXggZW52aXJvbm1lbnRzLCBzdWNoIGFzIG1pbmd3IG9yIHB3MzIsIG1heSB1c2Ugb3RoZXIKKyZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Jmx0O3ByZWZpeCZndDs8L3NwYW4+PC9zYW1wPiZyc3F1bztlcywgYWx0aG91Z2ggYXQgcHJlc2VudCBvbmx5IGN5Z3dpbiBtYWtlcyB1c2Ugb2YgdGhpcyBmZWF0dXJlLiAgSXQKK3dhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGhlbHAgYXZvaWQgbmFtZSBjb25mbGljdHMgYW1vbmcgZGxsJ3MgYnVpbHQgZm9yIHRoZQordmFyaW91cyB3aW4zMi91bip4IGVudmlyb25tZW50cywgc28gdGhhdCAoZm9yIGV4YW1wbGUpIHR3byB2ZXJzaW9ucyBvZiBhIHpsaWIgZGxsCitjb3VsZCBjb2V4aXN0IG9uIHRoZSBzYW1lIG1hY2hpbmUuCisKKyAgICAgPHA+VGhlIGdlbmVyaWMgY3lnd2luL21pbmd3IHBhdGggbGF5b3V0IHVzZXMgYSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBkaXJlY3RvcnkgZm9yCithcHBsaWNhdGlvbnMgYW5kIGRsbCdzIGFuZCBhICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+bGliPC9zcGFuPjwvc2FtcD4mcnNxdW87IGRpcmVjdG9yeSBmb3IgdGhlIGltcG9ydAorbGlicmFyaWVzICh1c2luZyBjeWd3aW4gbm9tZW5jbGF0dXJlKToKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgYmluLworICAgICAgICAgIAljeWd4eHguZGxsCisgICAgICAgICAgbGliLworICAgICAgICAgIAlsaWJ4eHguZGxsLmEgICAoaW4gY2FzZSBvZiBkbGwncykKKyAgICAgICAgICAJbGlieHh4LmEgICAgICAgKGluIGNhc2Ugb2Ygc3RhdGljIGFyY2hpdmUpCis8L3ByZT4KKyAgICAgPHA+TGlua2luZyBkaXJlY3RseSB0byBhIGRsbCB3aXRob3V0IHVzaW5nIHRoZSBpbXBvcnQgbGlicmFyeSBjYW4gYmUKK2RvbmUgdHdvIHdheXM6CisKKyAgICAgPHA+MS4gVXNlIHRoZSBkbGwgZGlyZWN0bHkgYnkgYWRkaW5nIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmJpbjwvc3Bhbj48L3NhbXA+JnJzcXVvOyBwYXRoIHRvIHRoZSBsaW5rIGxpbmUKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGdjYyAtV2wsLXZlcmJvc2UgIC1vIGEuZXhlIC1MLi4vYmluLyAtbHh4eAorPC9wcmU+CisgICAgIDxwPkhvd2V2ZXIsIGFzIHRoZSBkbGwncyBvZnRlbiBoYXZlIHZlcnNpb24gbnVtYmVycyBhcHBlbmRlZCB0byB0aGVpciBuYW1lcworKCZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Y3lnbmN1cnNlcy01LmRsbDwvc3Bhbj48L3NhbXA+JnJzcXVvOykgdGhpcyB3aWxsIG9mdGVuIGZhaWwsIHVubGVzcyBvbmUgc3BlY2lmaWVzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1MLi4vYmluIC1sbmN1cnNlcy01PC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvIGluY2x1ZGUgdGhlIHZlcnNpb24uICBJbXBvcnQgbGlicyBhcmUgZ2VuZXJhbGx5Citub3QgdmVyc2lvbmVkLCBhbmQgZG8gbm90IGhhdmUgdGhpcyBkaWZmaWN1bHR5LgorCisgICAgIDxwPjIuIENyZWF0ZSBhIHN5bWJvbGljIGxpbmsgZnJvbSB0aGUgZGxsIHRvIGEgZmlsZSBpbiB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5saWI8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK2RpcmVjdG9yeSBhY2NvcmRpbmcgdG8gdGhlIGFib3ZlIG1lbnRpb25lZCBzZWFyY2ggcGF0dGVybi4gIFRoaXMKK3Nob3VsZCBiZSB1c2VkIHRvIGF2b2lkIHVud2FudGVkIGNoYW5nZXMgaW4gdGhlIHRvb2xzIG5lZWRlZCBmb3IKK21ha2luZyB0aGUgYXBwL2RsbC4KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgbG4gLXMgYmluL2N5Z3h4eC5kbGwgbGliL1tjeWd8bGlifF14eHguZGxsWy5hXQorPC9wcmU+CisgICAgIDxwPlRoZW4geW91IGNhbiBsaW5rIHdpdGhvdXQgYW55IG1ha2UgZW52aXJvbm1lbnQgY2hhbmdlcy4KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgZ2NjIC1XbCwtdmVyYm9zZSAgLW8gYS5leGUgLUwuLi9saWIvIC1seHh4Cis8L3ByZT4KKyAgICAgPHA+VGhpcyB0ZWNobmlxdWUgYWxzbyBhdm9pZHMgdGhlIHZlcnNpb24gbnVtYmVyIHByb2JsZW1zLCBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgaXMKK3BlcmZlY3RseSBsZWdhbAorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBiaW4vCisgICAgICAgICAgCWN5Z3h4eC01LmRsbAorICAgICAgICAgIGxpYi8KKyAgICAgICAgICAJbGlieHh4LmRsbC5hIC0mZ3Q7IC4uL2Jpbi9jeWd4eHgtNS5kbGwKKzwvcHJlPgorICAgICA8cD5MaW5raW5nIGRpcmVjdGx5IHRvIGEgZGxsIHdpdGhvdXQgdXNpbmcgYW4gaW1wb3J0IGxpYiB3aWxsIHdvcmsKK2V2ZW4gd2hlbiBhdXRvLWltcG9ydCBmZWF0dXJlcyBhcmUgZXhlcmNpc2VkLCBhbmQgZXZlbiB3aGVuCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZW5hYmxlLXJ1bnRpbWUtcHNldWRvLXJlbG9jczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBpcyB1c2VkLgorCisgICAgIDxwPkdpdmVuIHRoZSBpbXByb3ZlbWVudHMgaW4gc3BlZWQgYW5kIG1lbW9yeSB1c2FnZSwgb25lIG1pZ2h0IGp1c3RpZmlhYmx5Cit3b25kZXIgd2h5IGltcG9ydCBsaWJyYXJpZXMgYXJlIHVzZWQgYXQgYWxsLiAgVGhlcmUgYXJlIHRocmVlIHJlYXNvbnM6CisKKyAgICAgPHA+MS4gVW50aWwgcmVjZW50bHksIHRoZSBsaW5rLWRpcmVjdGx5LXRvLWRsbCBmdW5jdGlvbmFsaXR5IGRpZCA8ZW0+bm90PC9lbT4KK3dvcmsgd2l0aCBhdXRvLWltcG9ydGVkIGRhdGEuCisKKyAgICAgPHA+Mi4gU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBpbmNsdWRlIHB1cmUgc3RhdGljIG9iamVjdHMgd2l0aGluIHRoZQoraW1wb3J0IGxpYnJhcnkgKHdoaWNoIG90aGVyd2lzZSBjb250YWlucyBvbmx5IGJmZCdzIGZvciBpbmRpcmVjdGlvbgorc3ltYm9scyB0aGF0IHBvaW50IHRvIHRoZSBleHBvcnRzIG9mIGEgZGxsKS4gIEFnYWluLCB0aGUgaW1wb3J0IGxpYgorZm9yIHRoZSBjeWd3aW4ga2VybmVsIG1ha2VzIHVzZSBvZiB0aGlzIGFiaWxpdHksIGFuZCBpdCBpcyBub3QKK3Bvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhbiBpbXBvcnQgbGliLgorCisgICAgIDxwPjMuIFN5bWJvbCBhbGlhc2VzIGNhbiBvbmx5IGJlIHJlc29sdmVkIHVzaW5nIGFuIGltcG9ydCBsaWIuICBUaGlzIGlzCitjcml0aWNhbCB3aGVuIGxpbmtpbmcgYWdhaW5zdCBPUy1zdXBwbGllZCBkbGwncyAoZWcsIHRoZSB3aW4zMiBBUEkpCitpbiB3aGljaCBzeW1ib2xzIGFyZSB1c3VhbGx5IGV4cG9ydGVkIGFzIHVuZGVjb3JhdGVkIGFsaWFzZXMgb2YgdGhlaXIKK3N0ZGNhbGwtZGVjb3JhdGVkIGFzc2VtYmx5IG5hbWVzLgorCisgICAgIDxwPlNvLCBpbXBvcnQgbGlicyBhcmUgbm90IGdvaW5nIGF3YXkuICBCdXQgdGhlIGFiaWxpdHkgdG8gcmVwbGFjZQordHJ1ZSBpbXBvcnQgbGlicyB3aXRoIGEgc2ltcGxlIHN5bWJvbGljIGxpbmsgdG8gKG9yIGEgY29weSBvZikKK2EgZGxsLCBpbiBtYW55IGNhc2VzLCBpcyBhIHVzZWZ1bCBhZGRpdGlvbiB0byB0aGUgc3VpdGUgb2YgdG9vbHMKK2JpbnV0aWxzIG1ha2VzIGF2YWlsYWJsZSB0byB0aGUgd2luMzIgZGV2ZWxvcGVyLiAgR2l2ZW4gdGhlCittYXNzaXZlIGltcHJvdmVtZW50cyBpbiBtZW1vcnkgcmVxdWlyZW1lbnRzIGR1cmluZyBsaW5raW5nLCBzdG9yYWdlCityZXF1aXJlbWVudHMsIGFuZCBsaW5raW5nIHNwZWVkLCB3ZSBleHBlY3QgdGhhdCBtYW55IGRldmVsb3BlcnMKK3dpbGwgc29vbiBiZWdpbiB0byB1c2UgdGhpcyBmZWF0dXJlIHdoZW5ldmVyIHBvc3NpYmxlLgorCisgICAgIDxicj48ZHQ+PGVtPnN5bWJvbCBhbGlhc2luZzwvZW0+PGRkPgorICAgICAgICAgIDxkbD4KKzxkdD48ZW0+YWRkaW5nIGFkZGl0aW9uYWwgbmFtZXM8L2VtPjxkZD5Tb21ldGltZXMsIGl0IGlzIHVzZWZ1bCB0byBleHBvcnQgc3ltYm9scyB3aXRoIGFkZGl0aW9uYWwgbmFtZXMuIAorQSBzeW1ib2wgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgd2lsbCBiZSBleHBvcnRlZCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYnV0IGl0IGNhbiBhbHNvIGJlCitleHBvcnRlZCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgYnkgdXNpbmcgc3BlY2lhbCBkaXJlY3RpdmVzIGluIHRoZSBERUYgZmlsZQord2hlbiBjcmVhdGluZyB0aGUgZGxsLiAgVGhpcyB3aWxsIGFmZmVjdCBhbHNvIHRoZSBvcHRpb25hbCBjcmVhdGVkCitpbXBvcnQgbGlicmFyeS4gIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgREVGIGZpbGU6CisKKyAgICAgICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgICAgICBMSUJSQVJZICJ4eXouZGxsIiBCQVNFPTB4NjEwMDAwMDAKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgRVhQT1JUUworICAgICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAgICBfZm9vID0gZm9vCis8L3ByZT4KKyAgICAgICAgICA8cD5UaGUgbGluZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9mb28gPSBmb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWFwcyB0aGUgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X2Zvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgICAgICAgIDxwPkFub3RoZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhIHN5bWJvbCBhbGlhcyBpcyB0byBjcmVhdGUgaXQgaW4gdGhlCitzb3VyY2UgY29kZSB1c2luZyB0aGUgIndlYWsiIGF0dHJpYnV0ZToKKworICAgICAgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAgICAgIHZvaWQgZm9vICgpIHsgLyogRG8gc29tZXRoaW5nLiAgKi87IH0KKyAgICAgICAgICAgICAgIHZvaWQgX2ZvbyAoKSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMgKCJmb28iKSkpOworPC9wcmU+CisgICAgICAgICAgPHA+U2VlIHRoZSBnY2MgbWFudWFsIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGF0dHJpYnV0ZXMgYW5kIHdlYWsKK3N5bWJvbHMuCisKKyAgICAgICAgICA8YnI+PGR0PjxlbT5yZW5hbWluZyBzeW1ib2xzPC9lbT48ZGQ+U29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byByZW5hbWUgZXhwb3J0cy4gIEZvciBpbnN0YW5jZSwgdGhlIGN5Z3dpbgora2VybmVsIGRvZXMgdGhpcyByZWd1bGFybHkuICBBIHN5bWJvbCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgY2FuIGJlIGV4cG9ydGVkIGFzCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmZvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBidXQgbm90IGFzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+X2Zvbzwvc3Bhbj48L3NhbXA+JnJzcXVvOyBieSB1c2luZyBzcGVjaWFsIGRpcmVjdGl2ZXMgaW4gdGhlCitERUYgZmlsZS4gKFRoaXMgd2lsbCBhbHNvIGFmZmVjdCB0aGUgaW1wb3J0IGxpYnJhcnksIGlmIGl0IGlzCitjcmVhdGVkKS4gIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKKworICAgICAgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAgICAgIExJQlJBUlkgInh5ei5kbGwiIEJBU0U9MHg2MTAwMDAwMAorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICBFWFBPUlRTCisgICAgICAgICAgICAgICBfZm9vID0gZm9vCis8L3ByZT4KKyAgICAgICAgICA8cD5UaGUgbGluZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9mb28gPSBmb288L3NwYW4+PC9zYW1wPiZyc3F1bzsgbWFwcyB0aGUgZXhwb3J0ZWQgc3ltYm9sICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+Zm9vPC9zcGFuPjwvc2FtcD4mcnNxdW87IHRvCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl9mb288L3NwYW4+PC9zYW1wPiZyc3F1bzsuIAorPC9kbD4KKworICAgICA8cD5Ob3RlOiB1c2luZyBhIERFRiBmaWxlIGRpc2FibGVzIHRoZSBkZWZhdWx0IGF1dG8tZXhwb3J0IGJlaGF2aW9yLAordW5sZXNzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZXhwb3J0LWFsbC1zeW1ib2xzPC9zcGFuPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24gaXMgdXNlZC4gCitJZiwgaG93ZXZlciwgeW91IGFyZSB0cnlpbmcgdG8gcmVuYW1lIHN5bWJvbHMsIHRoZW4geW91IHNob3VsZCBsaXN0Cis8ZW0+YWxsPC9lbT4gZGVzaXJlZCBleHBvcnRzIGluIHRoZSBERUYgZmlsZSwgaW5jbHVkaW5nIHRoZSBzeW1ib2xzCit0aGF0IGFyZSBub3QgYmVpbmcgcmVuYW1lZCwgYW5kIGRvIDxlbT5ub3Q8L2VtPiB1c2UgdGhlCismbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tZXhwb3J0LWFsbC1zeW1ib2xzPC9zcGFuPjwvc2FtcD4mcnNxdW87IG9wdGlvbi4gIElmIHlvdSBsaXN0IG9ubHkgdGhlCityZW5hbWVkIHN5bWJvbHMgaW4gdGhlIERFRiBmaWxlLCBhbmQgdXNlICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1leHBvcnQtYWxsLXN5bWJvbHM8L3NwYW4+PC9zYW1wPiZyc3F1bzsKK3RvIGhhbmRsZSB0aGUgb3RoZXIgc3ltYm9scywgdGhlbiB0aGUgYm90aCB0aGUgbmV3IG5hbWVzIDxlbT5hbmQ8L2VtPgordGhlIG9yaWdpbmFsIG5hbWVzIGZvciB0aGUgcmVuYW1lZCBzeW1ib2xzIHdpbGwgYmUgZXhwb3J0ZWQuIAorSW4gZWZmZWN0LCB5b3UnZCBiZSBhbGlhc2luZyB0aG9zZSBzeW1ib2xzLCBub3QgcmVuYW1pbmcgdGhlbSwKK3doaWNoIGlzIHByb2JhYmx5IG5vdCB3aGF0IHlvdSB3YW50ZWQuCisKKyAgICAgPHA+PGEgbmFtZT0iaW5kZXgtd2Vhay1leHRlcm5hbHMtNjkxIj48L2E+PGJyPjxkdD48ZW0+d2VhayBleHRlcm5hbHM8L2VtPjxkZD5UaGUgV2luZG93cyBvYmplY3QgZm9ybWF0LCBQRSwgc3BlY2lmaWVzIGEgZm9ybSBvZiB3ZWFrIHN5bWJvbHMgY2FsbGVkCit3ZWFrIGV4dGVybmFscy4gIFdoZW4gYSB3ZWFrIHN5bWJvbCBpcyBsaW5rZWQgYW5kIHRoZSBzeW1ib2wgaXMgbm90CitkZWZpbmVkLCB0aGUgd2VhayBzeW1ib2wgYmVjb21lcyBhbiBhbGlhcyBmb3Igc29tZSBvdGhlciBzeW1ib2wuICBUaGVyZQorYXJlIHRocmVlIHZhcmlhbnRzIG9mIHdlYWsgZXh0ZXJuYWxzOgorICAgICAgICAgIDx1bD4KKzxsaT5EZWZpbml0aW9uIGlzIHNlYXJjaGVkIGZvciBpbiBvYmplY3RzIGFuZCBsaWJyYXJpZXMsIGhpc3RvcmljYWxseQorY2FsbGVkIGxhenkgZXh0ZXJuYWxzLiAKKzxsaT5EZWZpbml0aW9uIGlzIHNlYXJjaGVkIGZvciBvbmx5IGluIG90aGVyIG9iamVjdHMsIG5vdCBpbiBsaWJyYXJpZXMuIAorVGhpcyBmb3JtIGlzIG5vdCBwcmVzZW50bHkgaW1wbGVtZW50ZWQuIAorPGxpPk5vIHNlYXJjaDsgdGhlIHN5bWJvbCBpcyBhbiBhbGlhcy4gIFRoaXMgZm9ybSBpcyBub3QgcHJlc2VudGx5CitpbXBsZW1lbnRlZC4gCis8L3VsPgorICAgICBBcyBhIEdOVSBleHRlbnNpb24sIHdlYWsgc3ltYm9scyB0aGF0IGRvIG5vdCBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBzeW1ib2wKK2FyZSBzdXBwb3J0ZWQuICBJZiB0aGUgc3ltYm9sIGlzIHVuZGVmaW5lZCB3aGVuIGxpbmtpbmcsIHRoZSBzeW1ib2wKK3VzZXMgYSBkZWZhdWx0IHZhbHVlLgorCisgICAgIDxwPjxhIG5hbWU9ImluZGV4LWFsaWduZWQtY29tbW9uLXN5bWJvbHMtNjkyIj48L2E+PGJyPjxkdD48ZW0+YWxpZ25lZCBjb21tb24gc3ltYm9sczwvZW0+PGRkPkFzIGEgR05VIGV4dGVuc2lvbiB0byB0aGUgUEUgZmlsZSBmb3JtYXQsIGl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhlCitkZXNpcmVkIGFsaWdubWVudCBmb3IgYSBjb21tb24gc3ltYm9sLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBjb252ZXllZCBmcm9tCit0aGUgYXNzZW1ibGVyIG9yIGNvbXBpbGVyIHRvIHRoZSBsaW5rZXIgYnkgbWVhbnMgb2YgR05VLXNwZWNpZmljIGNvbW1hbmRzCitjYXJyaWVkIGluIHRoZSBvYmplY3QgZmlsZSdzICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LmRyZWN0dmU8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc2VjdGlvbiwgd2hpY2ggYXJlIHJlY29nbml6ZWQKK2J5IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCByZXNwZWN0ZWQgd2hlbiBsYXlpbmcgb3V0IHRoZSBjb21tb24gc3ltYm9scy4gIE5hdGl2ZQordG9vbHMgd2lsbCBiZSBhYmxlIHRvIHByb2Nlc3Mgb2JqZWN0IGZpbGVzIGVtcGxveWluZyB0aGlzIEdOVSBleHRlbnNpb24sCitidXQgd2lsbCBmYWlsIHRvIHJlc3BlY3QgdGhlIGFsaWdubWVudCBpbnN0cnVjdGlvbnMsIGFuZCBtYXkgaXNzdWUgbm9pc3kKK3dhcm5pbmdzIGFib3V0IHVua25vd24gbGlua2VyIGRpcmVjdGl2ZXMuIAorPC9kbD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvWHRlbnNhLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9YdGVuc2EuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzYyMzIzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvWHRlbnNhLmh0bWwKQEAgLTAsMCArMSwxMTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlh0ZW5zYSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWFjaGluZS1EZXBlbmRlbnQuaHRtbCNNYWNoaW5lLURlcGVuZGVudCIgdGl0bGU9Ik1hY2hpbmUgRGVwZW5kZW50Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iV0lOMzIuaHRtbCNXSU4zMiIgdGl0bGU9IldJTjMyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPCEtLQorVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgR05VIGxpbmtlciBMRAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZScnLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJYdGVuc2EiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJXSU4zMi5odG1sI1dJTjMyIj5XSU4zMjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiPk1hY2hpbmUgRGVwZW5kZW50PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xNCA8Y29kZT5sZDwvY29kZT4gYW5kIFh0ZW5zYSBQcm9jZXNzb3JzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtWHRlbnNhLXByb2Nlc3NvcnMtNjkzIj48L2E+VGhlIGRlZmF1bHQgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYmVoYXZpb3IgZm9yIFh0ZW5zYSBwcm9jZXNzb3JzIGlzIHRvIGludGVycHJldAorPGNvZGU+U0VDVElPTlM8L2NvZGU+IGNvbW1hbmRzIHNvIHRoYXQgbGlzdHMgb2YgZXhwbGljaXRseSBuYW1lZCBzZWN0aW9ucyBpbiBhCitzcGVjaWZpY2F0aW9uIHdpdGggYSB3aWxkY2FyZCBmaWxlIHdpbGwgYmUgaW50ZXJsZWF2ZWQgd2hlbiBuZWNlc3NhcnkgdG8KK2tlZXAgbGl0ZXJhbCBwb29scyB3aXRoaW4gdGhlIHJhbmdlIG9mIFBDLXJlbGF0aXZlIGxvYWQgb2Zmc2V0cy4gIEZvcgorZXhhbXBsZSwgd2l0aCB0aGUgY29tbWFuZDoKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIFNFQ1RJT05TCisgICAgIHsKKyAgICAgICAudGV4dCA6IHsKKyAgICAgICAgICooLmxpdGVyYWwgLnRleHQpCisgICAgICAgfQorICAgICB9Cis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+PHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gbWF5IGludGVybGVhdmUgc29tZSBvZiB0aGUgPGNvZGU+LmxpdGVyYWw8L2NvZGU+CithbmQgPGNvZGU+LnRleHQ8L2NvZGU+IHNlY3Rpb25zIGZyb20gZGlmZmVyZW50IG9iamVjdCBmaWxlcyB0byBlbnN1cmUgdGhhdCB0aGUKK2xpdGVyYWwgcG9vbHMgYXJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgUEMtcmVsYXRpdmUgbG9hZCBvZmZzZXRzLiAgQSB2YWxpZAoraW50ZXJsZWF2aW5nIG1pZ2h0IHBsYWNlIHRoZSA8Y29kZT4ubGl0ZXJhbDwvY29kZT4gc2VjdGlvbnMgZnJvbSBhbiBpbml0aWFsCitncm91cCBvZiBmaWxlcyBmb2xsb3dlZCBieSB0aGUgPGNvZGU+LnRleHQ8L2NvZGU+IHNlY3Rpb25zIG9mIHRoYXQgZ3JvdXAgb2YKK2ZpbGVzLiAgVGhlbiwgdGhlIDxjb2RlPi5saXRlcmFsPC9jb2RlPiBzZWN0aW9ucyBmcm9tIHRoZSByZXN0IG9mIHRoZSBmaWxlcworYW5kIHRoZSA8Y29kZT4udGV4dDwvY29kZT4gc2VjdGlvbnMgZnJvbSB0aGUgcmVzdCBvZiB0aGUgZmlsZXMgd291bGQgZm9sbG93LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZHJlbGF4XzAwN2Qtb24tWHRlbnNhLTY5NCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbGF4aW5nLW9uLVh0ZW5zYS02OTUiPjwvYT5SZWxheGF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgdGhlIFh0ZW5zYSB2ZXJzaW9uIG9mIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZAorcHJvdmlkZXMgdHdvIGltcG9ydGFudCBsaW5rLXRpbWUgb3B0aW1pemF0aW9ucy4gIFRoZSBmaXJzdCBvcHRpbWl6YXRpb24KK2lzIHRvIGNvbWJpbmUgaWRlbnRpY2FsIGxpdGVyYWwgdmFsdWVzIHRvIHJlZHVjZSBjb2RlIHNpemUuICBBIHJlZHVuZGFudAorbGl0ZXJhbCB3aWxsIGJlIHJlbW92ZWQgYW5kIGFsbCB0aGUgPGNvZGU+TDMyUjwvY29kZT4gaW5zdHJ1Y3Rpb25zIHRoYXQgdXNlIGl0Cit3aWxsIGJlIGNoYW5nZWQgdG8gcmVmZXJlbmNlIGFuIGlkZW50aWNhbCBsaXRlcmFsLCBhcyBsb25nIGFzIHRoZQorbG9jYXRpb24gb2YgdGhlIHJlcGxhY2VtZW50IGxpdGVyYWwgaXMgd2l0aGluIHRoZSBvZmZzZXQgcmFuZ2Ugb2YgYWxsCit0aGUgPGNvZGU+TDMyUjwvY29kZT4gaW5zdHJ1Y3Rpb25zLiAgVGhlIHNlY29uZCBvcHRpbWl6YXRpb24gaXMgdG8gcmVtb3ZlCit1bm5lY2Vzc2FyeSBvdmVyaGVhZCBmcm9tIGFzc2VtYmxlci1nZW5lcmF0ZWQgJmxkcXVvO2xvbmdjYWxsJnJkcXVvOyBzZXF1ZW5jZXMgb2YKKzxjb2RlPkwzMlI8L2NvZGU+Lzxjb2RlPkNBTExYPC9jb2RlPjx2YXI+bjwvdmFyPiB3aGVuIHRoZSB0YXJnZXQgZnVuY3Rpb25zIGFyZSB3aXRoaW4KK3JhbmdlIG9mIGRpcmVjdCA8Y29kZT5DQUxMPC9jb2RlPjx2YXI+bjwvdmFyPiBpbnN0cnVjdGlvbnMuCisKKyAgIDxwPkZvciBlYWNoIG9mIHRoZXNlIGNhc2VzIHdoZXJlIGFuIGluZGlyZWN0IGNhbGwgc2VxdWVuY2UgY2FuIGJlIG9wdGltaXplZAordG8gYSBkaXJlY3QgY2FsbCwgdGhlIGxpbmtlciB3aWxsIGNoYW5nZSB0aGUgPGNvZGU+Q0FMTFg8L2NvZGU+PHZhcj5uPC92YXI+CitpbnN0cnVjdGlvbiB0byBhIDxjb2RlPkNBTEw8L2NvZGU+PHZhcj5uPC92YXI+IGluc3RydWN0aW9uLCByZW1vdmUgdGhlIDxjb2RlPkwzMlI8L2NvZGU+CitpbnN0cnVjdGlvbiwgYW5kIHJlbW92ZSB0aGUgbGl0ZXJhbCByZWZlcmVuY2VkIGJ5IHRoZSA8Y29kZT5MMzJSPC9jb2RlPgoraW5zdHJ1Y3Rpb24gaWYgaXQgaXMgbm90IHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuICBSZW1vdmluZyB0aGUKKzxjb2RlPkwzMlI8L2NvZGU+IGluc3RydWN0aW9uIGFsd2F5cyByZWR1Y2VzIGNvZGUgc2l6ZSBidXQgY2FuIHBvdGVudGlhbGx5CitodXJ0IHBlcmZvcm1hbmNlIGJ5IGNoYW5naW5nIHRoZSBhbGlnbm1lbnQgb2Ygc3Vic2VxdWVudCBicmFuY2ggdGFyZ2V0cy4gCitCeSBkZWZhdWx0LCB0aGUgbGlua2VyIHdpbGwgYWx3YXlzIHByZXNlcnZlIGFsaWdubWVudHMsIGVpdGhlciBieQorc3dpdGNoaW5nIHNvbWUgaW5zdHJ1Y3Rpb25zIGJldHdlZW4gMjQtYml0IGVuY29kaW5ncyBhbmQgdGhlIGVxdWl2YWxlbnQKK2RlbnNpdHkgaW5zdHJ1Y3Rpb25zIG9yIGJ5IGluc2VydGluZyBhIG5vLW9wIGluIHBsYWNlIG9mIHRoZSA8Y29kZT5MMzJSPC9jb2RlPgoraW5zdHJ1Y3Rpb24gdGhhdCB3YXMgcmVtb3ZlZC4gIElmIGNvZGUgc2l6ZSBpcyBtb3JlIGltcG9ydGFudCB0aGFuCitwZXJmb3JtYW5jZSwgdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJvcHRpb24iPi0tc2l6ZS1vcHQ8L3NwYW4+PC9zYW1wPiBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcHJldmVudCB0aGUKK2xpbmtlciBmcm9tIHdpZGVuaW5nIGRlbnNpdHkgaW5zdHJ1Y3Rpb25zIG9yIGluc2VydGluZyBuby1vcHMsIGV4Y2VwdCBpbgorYSBmZXcgY2FzZXMgd2hlcmUgbm8tb3BzIGFyZSByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MuCisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgWHRlbnNhLXNwZWNpZmljIGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBiZSB1c2VkIHRvCitjb250cm9sIHRoZSBsaW5rZXI6CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LVh0ZW5zYS1vcHRpb25zLTY5NiI+PC9hPgorICAgICA8ZGw+Cis8ZHQ+PHNhbXA+PHNwYW4gY2xhc3M9Im9wdGlvbiI+LS1zaXplLW9wdDwvc3Bhbj48L3NhbXA+PGRkPldoZW4gb3B0aW1pemluZyBpbmRpcmVjdCBjYWxscyB0byBkaXJlY3QgY2FsbHMsIG9wdGltaXplIGZvciBjb2RlIHNpemUKK21vcmUgdGhhbiBwZXJmb3JtYW5jZS4gIFdpdGggdGhpcyBvcHRpb24sIHRoZSBsaW5rZXIgd2lsbCBub3QgaW5zZXJ0Cituby1vcHMgb3Igd2lkZW4gZGVuc2l0eSBpbnN0cnVjdGlvbnMgdG8gcHJlc2VydmUgYnJhbmNoIHRhcmdldAorYWxpZ25tZW50LiAgVGhlcmUgbWF5IHN0aWxsIGJlIHNvbWUgY2FzZXMgd2hlcmUgbm8tb3BzIGFyZSByZXF1aXJlZCB0bworcHJlc2VydmUgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBjb2RlLiAKKzwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL2k5NjAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL2k5NjAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQ1N2U4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL2xkLmh0bWwvaTk2MC5odG1sCkBAIC0wLDAgKzEsOTUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmk5NjAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hY2hpbmUtRGVwZW5kZW50Lmh0bWwjTWFjaGluZS1EZXBlbmRlbnQiIHRpdGxlPSJNYWNoaW5lIERlcGVuZGVudCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ikg4XzAwMmYzMDAuaHRtbCNIOF8wMDJmMzAwIiB0aXRsZT0iSDgvMzAwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iTTY4SEMxMV8wMDJmNjhIQzEyLmh0bWwjTTY4SEMxMV8wMDJmNjhIQzEyIiB0aXRsZT0iTTY4SEMxMS82OEhDMTIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIGBgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuLS0+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imk5NjAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTTY4SEMxMV8wMDJmNjhIQzEyLmh0bWwjTTY4SEMxMV8wMDJmNjhIQzEyIj5NNjhIQzExLzY4SEMxMjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Ikg4XzAwMmYzMDAuaHRtbCNIOF8wMDJmMzAwIj5IOC8zMDA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50Ij5NYWNoaW5lIERlcGVuZGVudDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgdGhlIEludGVsIDk2MCBGYW1pbHk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pOTYwLXN1cHBvcnQtNTcyIj48L2E+CitZb3UgY2FuIHVzZSB0aGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tQTwvc3Bhbj48dmFyPmFyY2hpdGVjdHVyZTwvdmFyPjwvc2FtcD4mcnNxdW87IGNvbW1hbmQgbGluZSBvcHRpb24gdG8KK3NwZWNpZnkgb25lIG9mIHRoZSB0d28tbGV0dGVyIG5hbWVzIGlkZW50aWZ5aW5nIG1lbWJlcnMgb2YgdGhlIDk2MAorZmFtaWx5OyB0aGUgb3B0aW9uIHNwZWNpZmllcyB0aGUgZGVzaXJlZCBvdXRwdXQgdGFyZ2V0LCBhbmQgd2FybnMgb2YgYW55CitpbmNvbXBhdGlibGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBpbnB1dCBmaWxlcy4gIEl0IGFsc28gbW9kaWZpZXMgdGhlCitsaW5rZXIncyBzZWFyY2ggc3RyYXRlZ3kgZm9yIGFyY2hpdmUgbGlicmFyaWVzLCB0byBzdXBwb3J0IHRoZSB1c2Ugb2YKK2xpYnJhcmllcyBzcGVjaWZpYyB0byBlYWNoIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLCBieSBpbmNsdWRpbmcgaW4gdGhlCitzZWFyY2ggbG9vcCBuYW1lcyBzdWZmaXhlZCB3aXRoIHRoZSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGFyY2hpdGVjdHVyZS4KKworICAgPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdXIgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gY29tbWFuZCBsaW5lIGluY2x1ZGVkICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LUFDQTwvc3Bhbj48L3NhbXA+JnJzcXVvOzwhLS0gL0B3IC0tPiBhcword2VsbCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1sdHJ5PC9zcGFuPjwvc2FtcD4mcnNxdW87PCEtLSAvQHcgLS0+LCB0aGUgbGlua2VyIHdvdWxkIGxvb2sgKGluIGl0cyBidWlsdC1pbiBzZWFyY2gKK3BhdGhzLCBhbmQgaW4gYW55IHBhdGhzIHlvdSBzcGVjaWZ5IHdpdGggJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tTDwvc3Bhbj48L3NhbXA+JnJzcXVvOykgZm9yIGEgbGlicmFyeSB3aXRoCit0aGUgbmFtZXMKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIHRyeQorICAgICBsaWJ0cnkuYQorICAgICB0cnljYQorICAgICBsaWJ0cnljYS5hCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+VGhlIGZpcnN0IHR3byBwb3NzaWJpbGl0aWVzIHdvdWxkIGJlIGNvbnNpZGVyZWQgaW4gYW55IGV2ZW50OyB0aGUgbGFzdAordHdvIGFyZSBkdWUgdG8gdGhlIHVzZSBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BQ0E8L3NwYW4+PC9zYW1wPiZyc3F1bzs8IS0tIC9AdyAtLT4uCisKKyAgIDxwPllvdSBjYW4gbWVhbmluZ2Z1bGx5IHVzZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1BPC9zcGFuPjwvc2FtcD4mcnNxdW87IG1vcmUgdGhhbiBvbmNlIG9uIGEgY29tbWFuZCBsaW5lLCBzaW5jZQordGhlIDk2MCBhcmNoaXRlY3R1cmUgZmFtaWx5IGFsbG93cyBjb21iaW5hdGlvbiBvZiB0YXJnZXQgYXJjaGl0ZWN0dXJlczsgZWFjaAordXNlIHdpbGwgYWRkIGFub3RoZXIgcGFpciBvZiBuYW1lIHZhcmlhbnRzIHRvIHNlYXJjaCBmb3Igd2hlbiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi1sPC9zcGFuPjwvc2FtcD4mcnNxdW87PCEtLSAvQHcgLS0+CitzcGVjaWZpZXMgYSBsaWJyYXJ5LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MG9wdGlvbl8wMDdiXzAwMmRfMDAyZHJlbGF4XzAwN2Qtb24taTk2MC01NzMiPjwvYT48YSBuYW1lPSJpbmRleC1yZWxheGluZy1vbi1pOTYwLTU3NCI+PC9hPjxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IHN1cHBvcnRzIHRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tcmVsYXg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgb3B0aW9uIGZvciB0aGUgaTk2MCBmYW1pbHkuICBJZgoreW91IHNwZWNpZnkgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLXJlbGF4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBmaW5kcyBhbGwgPGNvZGU+YmFseDwvY29kZT4gYW5kCis8Y29kZT5jYWx4PC9jb2RlPiBpbnN0cnVjdGlvbnMgd2hvc2UgdGFyZ2V0cyBhcmUgd2l0aGluIDI0IGJpdHMsIGFuZCB0dXJucwordGhlbSBpbnRvIDI0LWJpdCBwcm9ncmFtLWNvdW50ZXIgcmVsYXRpdmUgPGNvZGU+YmFsPC9jb2RlPiBhbmQgPGNvZGU+Y2FsPC9jb2RlPgoraW5zdHJ1Y3Rpb25zLCByZXNwZWN0aXZlbHkuICA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbHNvIHR1cm5zIDxjb2RlPmNhbDwvY29kZT4KK2luc3RydWN0aW9ucyBpbnRvIDxjb2RlPmJhbDwvY29kZT4gaW5zdHJ1Y3Rpb25zIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGF0IHRoZQordGFyZ2V0IHN1YnJvdXRpbmUgaXMgYSBsZWFmIHJvdXRpbmUgKHRoYXQgaXMsIHRoZSB0YXJnZXQgc3Vicm91dGluZSBkb2VzCitub3QgaXRzZWxmIGNhbGwgYW55IHN1YnJvdXRpbmVzKS4KKworICAgPHA+PGEgbmFtZT0iaW5kZXgtQ29ydGV4XzAwMmRBOC1lcnJhdHVtLXdvcmthcm91bmQtNTc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwMmRfMDAyZGZpeF8wMDJkY29ydGV4XzAwMmRhOC01NzYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbm9fMDAyZGZpeF8wMDJkY29ydGV4XzAwMmRhOC01NzciPjwvYT5UaGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4tLWZpeC1jb3J0ZXgtYTg8L3NwYW4+PC9zYW1wPiZyc3F1bzsgc3dpdGNoIGVuYWJsZXMgYSBsaW5rLXRpbWUgd29ya2Fyb3VuZCBmb3IgYW4gZXJyYXR1bSBpbiBjZXJ0YWluIENvcnRleC1BOCBwcm9jZXNzb3JzLiAgVGhlIHdvcmthcm91bmQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIHlvdSBhcmUgdGFyZ2V0aW5nIHRoZSBBUk0gdjctQSBhcmNoaXRlY3R1cmUgcHJvZmlsZS4gIEl0IGNhbiBiZSBlbmFibGVkIG90aGVyd2lzZSBieSBzcGVjaWZ5aW5nICZsc3F1bzs8c2FtcD48c3BhbiBjbGFzcz0ic2FtcCI+LS1maXgtY29ydGV4LWE4PC9zcGFuPjwvc2FtcD4mcnNxdW87LCBvciBkaXNhYmxlZCB1bmNvbmRpdGlvbmFsbHkgYnkgc3BlY2lmeWluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tZml4LWNvcnRleC1hODwvc3Bhbj48L3NhbXA+JnJzcXVvOy4KKworICAgPHA+VGhlIGVycmF0dW0gb25seSBhZmZlY3RzIFRodW1iLTIgY29kZS4gIFBsZWFzZSBjb250YWN0IEFSTSBmb3IgZnVydGhlciBkZXRhaWxzLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDAyZF8wMDJkbWVyZ2VfMDAyZGV4aWR4XzAwMmRlbnRyaWVzLTU3OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDJkXzAwMmRub18wMDJkbWVyZ2VfMDAyZGV4aWR4XzAwMmRlbnRyaWVzLTU3OSI+PC9hPlRoZSAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPi0tbm8tbWVyZ2UtZXhpZHgtZW50cmllczwvc3Bhbj48L3NhbXA+JnJzcXVvOyBzd2l0Y2ggZGlzYWJsZXMgdGhlIG1lcmdpbmcgb2YgYWRqYWNlbnQgZXhpZHggZW50cmllcyBpbiBkZWJ1Z2luZm8uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9sZC5odG1sL2luZGV4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYzhmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbGQuaHRtbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTk5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5VbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9IiNUb3AiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8IS0tCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBHTlUgbGlua2VyIExECisoR05VIEJpbnV0aWxzKQordmVyc2lvbiAyLjIzLjIuCisKK0NvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkICJHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiLi0tPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0iY29udGVudHMiPgorPGgyPlRhYmxlIG9mIENvbnRlbnRzPC9oMj4KKzx1bD4KKzxsaT48YSBuYW1lPSJ0b2NfVG9wIiBocmVmPSJpbmRleC5odG1sI1RvcCI+TEQ8L2E+Cis8bGk+PGEgbmFtZT0idG9jX092ZXJ2aWV3IiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij4xIE92ZXJ2aWV3PC9hPgorPGxpPjxhIG5hbWU9InRvY19JbnZvY2F0aW9uIiBocmVmPSJJbnZvY2F0aW9uLmh0bWwjSW52b2NhdGlvbiI+MiBJbnZvY2F0aW9uPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj4yLjEgQ29tbWFuZCBMaW5lIE9wdGlvbnM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPjIuMS4xIE9wdGlvbnMgU3BlY2lmaWMgdG8gaTM4NiBQRSBUYXJnZXRzPC9hPgorPGxpPjxhIGhyZWY9Ik9wdGlvbnMuaHRtbCNPcHRpb25zIj4yLjEuMiBPcHRpb25zIHNwZWNpZmljIHRvIEM2WCB1Q2xpbnV4IHRhcmdldHM8L2E+Cis8bGk+PGEgaHJlZj0iT3B0aW9ucy5odG1sI09wdGlvbnMiPjIuMS4zIE9wdGlvbnMgc3BlY2lmaWMgdG8gTW90b3JvbGEgNjhIQzExIGFuZCA2OEhDMTIgdGFyZ2V0czwvYT4KKzxsaT48YSBocmVmPSJPcHRpb25zLmh0bWwjT3B0aW9ucyI+Mi4xLjQgT3B0aW9ucyBzcGVjaWZpYyB0byBNb3Rvcm9sYSA2OEsgdGFyZ2V0PC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkVudmlyb25tZW50Lmh0bWwjRW52aXJvbm1lbnQiPjIuMiBFbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1NjcmlwdHMiIGhyZWY9IlNjcmlwdHMuaHRtbCNTY3JpcHRzIj4zIExpbmtlciBTY3JpcHRzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkJhc2ljLVNjcmlwdC1Db25jZXB0cy5odG1sI0Jhc2ljLVNjcmlwdC1Db25jZXB0cyI+My4xIEJhc2ljIExpbmtlciBTY3JpcHQgQ29uY2VwdHM8L2E+Cis8bGk+PGEgaHJlZj0iU2NyaXB0LUZvcm1hdC5odG1sI1NjcmlwdC1Gb3JtYXQiPjMuMiBMaW5rZXIgU2NyaXB0IEZvcm1hdDwvYT4KKzxsaT48YSBocmVmPSJTaW1wbGUtRXhhbXBsZS5odG1sI1NpbXBsZS1FeGFtcGxlIj4zLjMgU2ltcGxlIExpbmtlciBTY3JpcHQgRXhhbXBsZTwvYT4KKzxsaT48YSBocmVmPSJTaW1wbGUtQ29tbWFuZHMuaHRtbCNTaW1wbGUtQ29tbWFuZHMiPjMuNCBTaW1wbGUgTGlua2VyIFNjcmlwdCBDb21tYW5kczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJFbnRyeS1Qb2ludC5odG1sI0VudHJ5LVBvaW50Ij4zLjQuMSBTZXR0aW5nIHRoZSBFbnRyeSBQb2ludDwvYT4KKzxsaT48YSBocmVmPSJGaWxlLUNvbW1hbmRzLmh0bWwjRmlsZS1Db21tYW5kcyI+My40LjIgQ29tbWFuZHMgRGVhbGluZyB3aXRoIEZpbGVzPC9hPgorPGxpPjxhIGhyZWY9IkZvcm1hdC1Db21tYW5kcy5odG1sI0Zvcm1hdC1Db21tYW5kcyI+My40LjMgQ29tbWFuZHMgRGVhbGluZyB3aXRoIE9iamVjdCBGaWxlIEZvcm1hdHM8L2E+Cis8bGk+PGEgaHJlZj0iUkVHSU9OXzAwNWZBTElBUy5odG1sI1JFR0lPTl8wMDVmQUxJQVMiPjMuNC40IEFzc2lnbiBhbGlhcyBuYW1lcyB0byBtZW1vcnkgcmVnaW9uczwvYT4KKzxsaT48YSBocmVmPSJNaXNjZWxsYW5lb3VzLUNvbW1hbmRzLmh0bWwjTWlzY2VsbGFuZW91cy1Db21tYW5kcyI+My40LjUgT3RoZXIgTGlua2VyIFNjcmlwdCBDb21tYW5kczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBocmVmPSJBc3NpZ25tZW50cy5odG1sI0Fzc2lnbm1lbnRzIj4zLjUgQXNzaWduaW5nIFZhbHVlcyB0byBTeW1ib2xzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlNpbXBsZS1Bc3NpZ25tZW50cy5odG1sI1NpbXBsZS1Bc3NpZ25tZW50cyI+My41LjEgU2ltcGxlIEFzc2lnbm1lbnRzPC9hPgorPGxpPjxhIGhyZWY9IkhJRERFTi5odG1sI0hJRERFTiI+My41LjIgSElEREVOPC9hPgorPGxpPjxhIGhyZWY9IlBST1ZJREUuaHRtbCNQUk9WSURFIj4zLjUuMyBQUk9WSURFPC9hPgorPGxpPjxhIGhyZWY9IlBST1ZJREVfMDA1ZkhJRERFTi5odG1sI1BST1ZJREVfMDA1ZkhJRERFTiI+My41LjQgUFJPVklERV9ISURERU48L2E+Cis8bGk+PGEgaHJlZj0iU291cmNlLUNvZGUtUmVmZXJlbmNlLmh0bWwjU291cmNlLUNvZGUtUmVmZXJlbmNlIj4zLjUuNSBTb3VyY2UgQ29kZSBSZWZlcmVuY2U8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iU0VDVElPTlMuaHRtbCNTRUNUSU9OUyI+My42IFNFQ1RJT05TIENvbW1hbmQ8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGVzY3JpcHRpb24uaHRtbCNPdXRwdXQtU2VjdGlvbi1EZXNjcmlwdGlvbiI+My42LjEgT3V0cHV0IFNlY3Rpb24gRGVzY3JpcHRpb248L2E+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tTmFtZS5odG1sI091dHB1dC1TZWN0aW9uLU5hbWUiPjMuNi4yIE91dHB1dCBTZWN0aW9uIE5hbWU8L2E+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQWRkcmVzcy5odG1sI091dHB1dC1TZWN0aW9uLUFkZHJlc3MiPjMuNi4zIE91dHB1dCBTZWN0aW9uIEFkZHJlc3M8L2E+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi5odG1sI0lucHV0LVNlY3Rpb24iPjMuNi40IElucHV0IFNlY3Rpb24gRGVzY3JpcHRpb248L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1CYXNpY3MuaHRtbCNJbnB1dC1TZWN0aW9uLUJhc2ljcyI+My42LjQuMSBJbnB1dCBTZWN0aW9uIEJhc2ljczwvYT4KKzxsaT48YSBocmVmPSJJbnB1dC1TZWN0aW9uLVdpbGRjYXJkcy5odG1sI0lucHV0LVNlY3Rpb24tV2lsZGNhcmRzIj4zLjYuNC4yIElucHV0IFNlY3Rpb24gV2lsZGNhcmQgUGF0dGVybnM8L2E+Cis8bGk+PGEgaHJlZj0iSW5wdXQtU2VjdGlvbi1Db21tb24uaHRtbCNJbnB1dC1TZWN0aW9uLUNvbW1vbiI+My42LjQuMyBJbnB1dCBTZWN0aW9uIGZvciBDb21tb24gU3ltYm9sczwvYT4KKzxsaT48YSBocmVmPSJJbnB1dC1TZWN0aW9uLUtlZXAuaHRtbCNJbnB1dC1TZWN0aW9uLUtlZXAiPjMuNi40LjQgSW5wdXQgU2VjdGlvbiBhbmQgR2FyYmFnZSBDb2xsZWN0aW9uPC9hPgorPGxpPjxhIGhyZWY9IklucHV0LVNlY3Rpb24tRXhhbXBsZS5odG1sI0lucHV0LVNlY3Rpb24tRXhhbXBsZSI+My42LjQuNSBJbnB1dCBTZWN0aW9uIEV4YW1wbGU8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGF0YS5odG1sI091dHB1dC1TZWN0aW9uLURhdGEiPjMuNi41IE91dHB1dCBTZWN0aW9uIERhdGE8L2E+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tS2V5d29yZHMuaHRtbCNPdXRwdXQtU2VjdGlvbi1LZXl3b3JkcyI+My42LjYgT3V0cHV0IFNlY3Rpb24gS2V5d29yZHM8L2E+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tRGlzY2FyZGluZy5odG1sI091dHB1dC1TZWN0aW9uLURpc2NhcmRpbmciPjMuNi43IE91dHB1dCBTZWN0aW9uIERpc2NhcmRpbmc8L2E+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tQXR0cmlidXRlcy5odG1sI091dHB1dC1TZWN0aW9uLUF0dHJpYnV0ZXMiPjMuNi44IE91dHB1dCBTZWN0aW9uIEF0dHJpYnV0ZXM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tVHlwZS5odG1sI091dHB1dC1TZWN0aW9uLVR5cGUiPjMuNi44LjEgT3V0cHV0IFNlY3Rpb24gVHlwZTwvYT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1MTUEuaHRtbCNPdXRwdXQtU2VjdGlvbi1MTUEiPjMuNi44LjIgT3V0cHV0IFNlY3Rpb24gTE1BPC9hPgorPGxpPjxhIGhyZWY9IkZvcmNlZC1PdXRwdXQtQWxpZ25tZW50Lmh0bWwjRm9yY2VkLU91dHB1dC1BbGlnbm1lbnQiPjMuNi44LjMgRm9yY2VkIE91dHB1dCBBbGlnbm1lbnQ8L2E+Cis8bGk+PGEgaHJlZj0iRm9yY2VkLUlucHV0LUFsaWdubWVudC5odG1sI0ZvcmNlZC1JbnB1dC1BbGlnbm1lbnQiPjMuNi44LjQgRm9yY2VkIElucHV0IEFsaWdubWVudDwvYT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1Db25zdHJhaW50Lmh0bWwjT3V0cHV0LVNlY3Rpb24tQ29uc3RyYWludCI+My42LjguNSBPdXRwdXQgU2VjdGlvbiBDb25zdHJhaW50PC9hPgorPGxpPjxhIGhyZWY9Ik91dHB1dC1TZWN0aW9uLVJlZ2lvbi5odG1sI091dHB1dC1TZWN0aW9uLVJlZ2lvbiI+My42LjguNiBPdXRwdXQgU2VjdGlvbiBSZWdpb248L2E+Cis8bGk+PGEgaHJlZj0iT3V0cHV0LVNlY3Rpb24tUGhkci5odG1sI091dHB1dC1TZWN0aW9uLVBoZHIiPjMuNi44LjcgT3V0cHV0IFNlY3Rpb24gUGhkcjwvYT4KKzxsaT48YSBocmVmPSJPdXRwdXQtU2VjdGlvbi1GaWxsLmh0bWwjT3V0cHV0LVNlY3Rpb24tRmlsbCI+My42LjguOCBPdXRwdXQgU2VjdGlvbiBGaWxsPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik92ZXJsYXktRGVzY3JpcHRpb24uaHRtbCNPdmVybGF5LURlc2NyaXB0aW9uIj4zLjYuOSBPdmVybGF5IERlc2NyaXB0aW9uPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9Ik1FTU9SWS5odG1sI01FTU9SWSI+My43IE1FTU9SWSBDb21tYW5kPC9hPgorPGxpPjxhIGhyZWY9IlBIRFJTLmh0bWwjUEhEUlMiPjMuOCBQSERSUyBDb21tYW5kPC9hPgorPGxpPjxhIGhyZWY9IlZFUlNJT04uaHRtbCNWRVJTSU9OIj4zLjkgVkVSU0lPTiBDb21tYW5kPC9hPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb25zLmh0bWwjRXhwcmVzc2lvbnMiPjMuMTAgRXhwcmVzc2lvbnMgaW4gTGlua2VyIFNjcmlwdHM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQ29uc3RhbnRzLmh0bWwjQ29uc3RhbnRzIj4zLjEwLjEgQ29uc3RhbnRzPC9hPgorPGxpPjxhIGhyZWY9IlN5bWJvbGljLUNvbnN0YW50cy5odG1sI1N5bWJvbGljLUNvbnN0YW50cyI+My4xMC4yIFN5bWJvbGljIENvbnN0YW50czwvYT4KKzxsaT48YSBocmVmPSJTeW1ib2xzLmh0bWwjU3ltYm9scyI+My4xMC4zIFN5bWJvbCBOYW1lczwvYT4KKzxsaT48YSBocmVmPSJPcnBoYW4tU2VjdGlvbnMuaHRtbCNPcnBoYW4tU2VjdGlvbnMiPjMuMTAuNCBPcnBoYW4gU2VjdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iTG9jYXRpb24tQ291bnRlci5odG1sI0xvY2F0aW9uLUNvdW50ZXIiPjMuMTAuNSBUaGUgTG9jYXRpb24gQ291bnRlcjwvYT4KKzxsaT48YSBocmVmPSJPcGVyYXRvcnMuaHRtbCNPcGVyYXRvcnMiPjMuMTAuNiBPcGVyYXRvcnM8L2E+Cis8bGk+PGEgaHJlZj0iRXZhbHVhdGlvbi5odG1sI0V2YWx1YXRpb24iPjMuMTAuNyBFdmFsdWF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IkV4cHJlc3Npb24tU2VjdGlvbi5odG1sI0V4cHJlc3Npb24tU2VjdGlvbiI+My4xMC44IFRoZSBTZWN0aW9uIG9mIGFuIEV4cHJlc3Npb248L2E+Cis8bGk+PGEgaHJlZj0iQnVpbHRpbi1GdW5jdGlvbnMuaHRtbCNCdWlsdGluLUZ1bmN0aW9ucyI+My4xMC45IEJ1aWx0aW4gRnVuY3Rpb25zPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkltcGxpY2l0LUxpbmtlci1TY3JpcHRzLmh0bWwjSW1wbGljaXQtTGlua2VyLVNjcmlwdHMiPjMuMTEgSW1wbGljaXQgTGlua2VyIFNjcmlwdHM8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX01hY2hpbmUtRGVwZW5kZW50IiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50Ij40IE1hY2hpbmUgRGVwZW5kZW50IEZlYXR1cmVzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9Ikg4XzAwMmYzMDAuaHRtbCNIOF8wMDJmMzAwIj40LjEgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSBIOC8zMDA8L2E+Cis8bGk+PGEgaHJlZj0iaTk2MC5odG1sI2k5NjAiPjQuMiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPiBhbmQgdGhlIEludGVsIDk2MCBGYW1pbHk8L2E+Cis8bGk+PGEgaHJlZj0iTTY4SEMxMV8wMDJmNjhIQzEyLmh0bWwjTTY4SEMxMV8wMDJmNjhIQzEyIj40LjMgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIHRoZSBNb3Rvcm9sYSA2OEhDMTEgYW5kIDY4SEMxMiBmYW1pbGllczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJNNjhIQzExXzAwMmY2OEhDMTIuaHRtbCNNNjhIQzExXzAwMmY2OEhDMTIiPjQuMy4xIExpbmtlciBSZWxheGF0aW9uPC9hPgorPGxpPjxhIGhyZWY9Ik02OEhDMTFfMDAyZjY4SEMxMi5odG1sI002OEhDMTFfMDAyZjY4SEMxMiI+NC4zLjIgVHJhbXBvbGluZSBHZW5lcmF0aW9uPC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IkFSTS5odG1sI0FSTSI+NC40IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgQVJNIGZhbWlseTwvYT4KKzxsaT48YSBocmVmPSJIUFBBLUVMRjMyLmh0bWwjSFBQQS1FTEYzMiI+NC41IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBIUFBBIDMyLWJpdCBFTEYgU3VwcG9ydDwvYT4KKzxsaT48YSBocmVmPSJNNjhLLmh0bWwjTTY4SyI+NC42IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCB0aGUgTW90b3JvbGEgNjhLIGZhbWlseTwvYT4KKzxsaT48YSBocmVmPSJNTUlYLmh0bWwjTU1JWCI+NC43IDxjb2RlPmxkPC9jb2RlPiBhbmQgTU1JWDwvYT4KKzxsaT48YSBocmVmPSJNU1A0MzAuaHRtbCNNU1A0MzAiPjQuOCA8Y29kZT5sZDwvY29kZT4gYW5kIE1TUDQzMDwvYT4KKzxsaT48YSBocmVmPSJQb3dlclBDLUVMRjMyLmh0bWwjUG93ZXJQQy1FTEYzMiI+NC45IDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBQb3dlclBDIDMyLWJpdCBFTEYgU3VwcG9ydDwvYT4KKzxsaT48YSBocmVmPSJQb3dlclBDNjQtRUxGNjQuaHRtbCNQb3dlclBDNjQtRUxGNjQiPjQuMTAgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIFBvd2VyUEM2NCA2NC1iaXQgRUxGIFN1cHBvcnQ8L2E+Cis8bGk+PGEgaHJlZj0iU1BVLUVMRi5odG1sI1NQVS1FTEYiPjQuMTEgPHNhbXA+PHNwYW4gY2xhc3M9ImNvbW1hbmQiPmxkPC9zcGFuPjwvc2FtcD4gYW5kIFNQVSBFTEYgU3VwcG9ydDwvYT4KKzxsaT48YSBocmVmPSJUSS1DT0ZGLmh0bWwjVEktQ09GRiI+NC4xMiA8c2FtcD48c3BhbiBjbGFzcz0iY29tbWFuZCI+bGQ8L3NwYW4+PC9zYW1wPidzIFN1cHBvcnQgZm9yIFZhcmlvdXMgVEkgQ09GRiBWZXJzaW9uczwvYT4KKzxsaT48YSBocmVmPSJXSU4zMi5odG1sI1dJTjMyIj40LjEzIDxzYW1wPjxzcGFuIGNsYXNzPSJjb21tYW5kIj5sZDwvc3Bhbj48L3NhbXA+IGFuZCBXSU4zMiAoY3lnd2luL21pbmd3KTwvYT4KKzxsaT48YSBocmVmPSJYdGVuc2EuaHRtbCNYdGVuc2EiPjQuMTQgPGNvZGU+bGQ8L2NvZGU+IGFuZCBYdGVuc2EgUHJvY2Vzc29yczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQkZEIiBocmVmPSJCRkQuaHRtbCNCRkQiPjUgQkZEPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkJGRC1vdXRsaW5lLmh0bWwjQkZELW91dGxpbmUiPjUuMSBIb3cgSXQgV29ya3M6IEFuIE91dGxpbmUgb2YgQkZEPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IkJGRC1pbmZvcm1hdGlvbi1sb3NzLmh0bWwjQkZELWluZm9ybWF0aW9uLWxvc3MiPjUuMS4xIEluZm9ybWF0aW9uIExvc3M8L2E+Cis8bGk+PGEgaHJlZj0iQ2Fub25pY2FsLWZvcm1hdC5odG1sI0Nhbm9uaWNhbC1mb3JtYXQiPjUuMS4yIFRoZSBCRkQgY2Fub25pY2FsIG9iamVjdC1maWxlIGZvcm1hdDwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfUmVwb3J0aW5nLUJ1Z3MiIGhyZWY9IlJlcG9ydGluZy1CdWdzLmh0bWwjUmVwb3J0aW5nLUJ1Z3MiPjYgUmVwb3J0aW5nIEJ1Z3M8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iQnVnLUNyaXRlcmlhLmh0bWwjQnVnLUNyaXRlcmlhIj42LjEgSGF2ZSBZb3UgRm91bmQgYSBCdWc/PC9hPgorPGxpPjxhIGhyZWY9IkJ1Zy1SZXBvcnRpbmcuaHRtbCNCdWctUmVwb3J0aW5nIj42LjIgSG93IHRvIFJlcG9ydCBCdWdzPC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19NUkkiIGhyZWY9Ik1SSS5odG1sI01SSSI+QXBwZW5kaXggQSBNUkkgQ29tcGF0aWJsZSBTY3JpcHQgRmlsZXM8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0dOVS1GcmVlLURvY3VtZW50YXRpb24tTGljZW5zZSIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5BcHBlbmRpeCBCIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZTwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfTEQtSW5kZXgiIGhyZWY9IkxELUluZGV4Lmh0bWwjTEQtSW5kZXgiPkxEIEluZGV4PC9hPgorPC9saT48L3VsPgorPC9kaXY+CisKKworCis8IS0tIEZJWE1FOiBUYWxrIGFib3V0IGltcG9ydGFuY2Ugb2YgKm9yZGVyKiBvZiBhcmdzLCBjbWRzIHRvIGxpbmtlciEgLS0+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRvcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwjZGlyIj4oZGlyKTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkxEPC9oMj4KKworPHA+VGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgPHNwYW4gY2xhc3M9InNjIj5nbnU8L3NwYW4+IGxpbmtlciBsZAorKEdOVSBCaW51dGlscykKK3ZlcnNpb24gMi4yMy4yLgorCisgICA8cD5UaGlzIGRvY3VtZW50IGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUKK0RvY3VtZW50YXRpb24gTGljZW5zZSB2ZXJzaW9uIDEuMy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZAoraW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgJmxkcXVvO0dOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSZyZHF1bzsuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJPdmVydmlldy5odG1sI092ZXJ2aWV3Ij5PdmVydmlldzwvYT46ICAgICAgICAgICAgICAgICAgICAgT3ZlcnZpZXcKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9Ikludm9jYXRpb24uaHRtbCNJbnZvY2F0aW9uIj5JbnZvY2F0aW9uPC9hPjogICAgICAgICAgICAgICAgICAgSW52b2NhdGlvbgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iU2NyaXB0cy5odG1sI1NjcmlwdHMiPlNjcmlwdHM8L2E+OiAgICAgICAgICAgICAgICAgICAgICBMaW5rZXIgU2NyaXB0cworCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJNYWNoaW5lLURlcGVuZGVudC5odG1sI01hY2hpbmUtRGVwZW5kZW50Ij5NYWNoaW5lIERlcGVuZGVudDwvYT46ICAgICAgICAgICAgTWFjaGluZSBEZXBlbmRlbnQgRmVhdHVyZXMKKworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iQkZELmh0bWwjQkZEIj5CRkQ8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgICAgQkZECis8IS0tIEZvbGxvd2luZyBibGFuayBsaW5lIHJlcXVpcmVkIGZvciByZW1haW5pbmcgYnVnIGluIG1ha2VpbmZvIGNvbmRzL21lbnVzIC0tPgorCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJSZXBvcnRpbmctQnVncy5odG1sI1JlcG9ydGluZy1CdWdzIj5SZXBvcnRpbmcgQnVnczwvYT46ICAgICAgICAgICAgICAgUmVwb3J0aW5nIEJ1Z3MKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9Ik1SSS5odG1sI01SSSI+TVJJPC9hPjogICAgICAgICAgICAgICAgICAgICAgICAgIE1SSSBDb21wYXRpYmxlIFNjcmlwdCBGaWxlcworPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlLmh0bWwjR05VLUZyZWUtRG9jdW1lbnRhdGlvbi1MaWNlbnNlIj5HTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2U8L2E+OiAgIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iTEQtSW5kZXguaHRtbCNMRC1JbmRleCI+TEQgSW5kZXg8L2E+OiAgICAgICAgICAgICAgICAgICAgICAgIExEIEluZGV4Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9BcmdsaXN0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvQXJnbGlzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2EzZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvQXJnbGlzdHMuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5BcmdsaXN0cyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTeXNjYWxscy5odG1sI1N5c2NhbGxzIiB0aXRsZT0iU3lzY2FsbHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJEb2N1bWVudC1JbmRleC5odG1sI0RvY3VtZW50LUluZGV4IiB0aXRsZT0iRG9jdW1lbnQgSW5kZXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkFyZ2xpc3RzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkRvY3VtZW50LUluZGV4Lmh0bWwjRG9jdW1lbnQtSW5kZXgiPkRvY3VtZW50IEluZGV4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3lzY2FsbHMuaHRtbCNTeXNjYWxscyI+U3lzY2FsbHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MTMgVmFyaWFibGUgQXJndW1lbnQgTGlzdHM8L2gyPgorCis8cD5UaGUgPGNvZGU+cHJpbnRmPC9jb2RlPiBmYW1pbHkgb2YgZnVuY3Rpb25zIGlzIGRlZmluZWQgdG8gYWNjZXB0IGEgdmFyaWFibGUKK251bWJlciBvZiBhcmd1bWVudHMsIHJhdGhlciB0aGFuIGEgZml4ZWQgYXJndW1lbnQgbGlzdC4gIFlvdSBjYW4gZGVmaW5lCit5b3VyIG93biBmdW5jdGlvbnMgd2l0aCBhIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QsIGJ5IHVzaW5nIG1hY3JvCitkZWZpbml0aW9ucyBmcm9tIGVpdGhlciA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkYXJnLmg8L3NwYW4+PC9zYW1wPiAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBBTlNJIEMpCitvciBmcm9tIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj52YXJhcmdzLmg8L3NwYW4+PC9zYW1wPiAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhIHBvcHVsYXIgY29udmVudGlvbgorcHJpb3IgdG8gQU5TSSBDKS4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9IlN0ZGFyZy5odG1sI1N0ZGFyZyI+U3RkYXJnPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iVmFyYXJncy5odG1sI1ZhcmFyZ3MiPlZhcmFyZ3M8L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9DdHlwZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvQ3R5cGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTgwZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvQ3R5cGUuaHRtbApAQCAtMCwwICsxLDc5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5DdHlwZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkN0eXBlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MyBDaGFyYWN0ZXIgVHlwZSBNYWNyb3MgYW5kIEZ1bmN0aW9ucyAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmN0eXBlLmg8L3NwYW4+PC9zYW1wPik8L2gyPgorCis8cD5UaGlzIGNoYXB0ZXIgZ3JvdXBzIG1hY3JvcyAod2hpY2ggYXJlIGFsc28gYXZhaWxhYmxlIGFzIHN1YnJvdXRpbmVzKQordG8gY2xhc3NpZnkgY2hhcmFjdGVycyBpbnRvIHNldmVyYWwgY2F0ZWdvcmllcyAoYWxwaGFiZXRpYywKK251bWVyaWMsIGNvbnRyb2wgY2hhcmFjdGVycywgd2hpdGVzcGFjZSwgYW5kIHNvIG9uKSwgb3IgdG8gcGVyZm9ybQorc2ltcGxlIGNoYXJhY3RlciBtYXBwaW5ncy4KKworICAgPHA+VGhlIGhlYWRlciBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5jdHlwZS5oPC9zcGFuPjwvc2FtcD4gZGVmaW5lcyB0aGUgbWFjcm9zLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iaXNhbG51bS5odG1sI2lzYWxudW0iPmlzYWxudW08L2E+OiAgICBBbHBoYW51bWVyaWMgY2hhcmFjdGVyIHByZWRpY2F0ZQorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0iaXNhbHBoYS5odG1sI2lzYWxwaGEiPmlzYWxwaGE8L2E+OiAgICBBbHBoYWJldGljIGNoYXJhY3RlciBwcmVkaWNhdGUKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9ImlzYXNjaWkuaHRtbCNpc2FzY2lpIj5pc2FzY2lpPC9hPjogICAgQVNDSUkgY2hhcmFjdGVyIHByZWRpY2F0ZQorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iaXNjbnRybC5odG1sI2lzY250cmwiPmlzY250cmw8L2E+OiAgICBDb250cm9sIGNoYXJhY3RlciBwcmVkaWNhdGUKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9ImlzZGlnaXQuaHRtbCNpc2RpZ2l0Ij5pc2RpZ2l0PC9hPjogICAgRGVjaW1hbCBkaWdpdCBwcmVkaWNhdGUKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9ImlzbG93ZXIuaHRtbCNpc2xvd2VyIj5pc2xvd2VyPC9hPjogICAgTG93ZXJjYXNlIGNoYXJhY3RlciBwcmVkaWNhdGUKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9ImlzcHJpbnQuaHRtbCNpc3ByaW50Ij5pc3ByaW50PC9hPjogICAgUHJpbnRhYmxlIGNoYXJhY3RlciBwcmVkaWNhdGVzIChpc3ByaW50LCBpc2dyYXBoKQorPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iaXNwdW5jdC5odG1sI2lzcHVuY3QiPmlzcHVuY3Q8L2E+OiAgICBQdW5jdHVhdGlvbiBjaGFyYWN0ZXIgcHJlZGljYXRlCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJpc3NwYWNlLmh0bWwjaXNzcGFjZSI+aXNzcGFjZTwvYT46ICAgIFdoaXRlc3BhY2UgY2hhcmFjdGVyIHByZWRpY2F0ZQorPGxpPjxhIGhyZWY9ImlzdXBwZXIuaHRtbCNpc3VwcGVyIj5pc3VwcGVyPC9hPjogICAgVXBwZXJjYXNlIGNoYXJhY3RlciBwcmVkaWNhdGUKKzxsaT48YSBocmVmPSJpc3hkaWdpdC5odG1sI2lzeGRpZ2l0Ij5pc3hkaWdpdDwvYT46ICAgSGV4YWRlY2ltYWwgZGlnaXQgcHJlZGljYXRlCis8bGk+PGEgaHJlZj0idG9hc2NpaS5odG1sI3RvYXNjaWkiPnRvYXNjaWk8L2E+OiAgICBGb3JjZSBpbnRlZ2VycyB0byBBU0NJSSByYW5nZQorPGxpPjxhIGhyZWY9InRvbG93ZXIuaHRtbCN0b2xvd2VyIj50b2xvd2VyPC9hPjogICAgVHJhbnNsYXRlIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlCis8bGk+PGEgaHJlZj0idG91cHBlci5odG1sI3RvdXBwZXIiPnRvdXBwZXI8L2E+OiAgICBUcmFuc2xhdGUgY2hhcmFjdGVycyB0byB1cHBlcmNhc2UKKzxsaT48YSBocmVmPSJpc3dhbG51bS5odG1sI2lzd2FsbnVtIj5pc3dhbG51bTwvYT46ICAgQWxwaGFudW1lcmljIHdpZGUgY2hhcmFjdGVyIHByZWRpY2F0ZQorPGxpPjxhIGhyZWY9Imlzd2FscGhhLmh0bWwjaXN3YWxwaGEiPmlzd2FscGhhPC9hPjogICBBbHBoYWJldGljIHdpZGUgY2hhcmFjdGVyIHByZWRpY2F0ZQorPGxpPjxhIGhyZWY9Imlzd2JsYW5rLmh0bWwjaXN3YmxhbmsiPmlzd2JsYW5rPC9hPjogICBCbGFuayB3aWRlIGNoYXJhY3RlciBwcmVkaWNhdGUKKzxsaT48YSBocmVmPSJpc3djbnRybC5odG1sI2lzd2NudHJsIj5pc3djbnRybDwvYT46ICAgQ29udHJvbCB3aWRlIGNoYXJhY3RlciBwcmVkaWNhdGUKKzxsaT48YSBocmVmPSJpc3dkaWdpdC5odG1sI2lzd2RpZ2l0Ij5pc3dkaWdpdDwvYT46ICAgRGVjaW1hbCBkaWdpdCB3aWRlIGNoYXJhY3RlciBwcmVkaWNhdGUKKzxsaT48YSBocmVmPSJpc3dncmFwaC5odG1sI2lzd2dyYXBoIj5pc3dncmFwaDwvYT46ICAgR3JhcGhpYyB3aWRlIGNoYXJhY3RlciBwcmVkaWNhdGUKKzxsaT48YSBocmVmPSJpc3dsb3dlci5odG1sI2lzd2xvd2VyIj5pc3dsb3dlcjwvYT46ICAgTG93ZXJjYXNlIHdpZGUgY2hhcmFjdGVyIHByZWRpY2F0ZQorPGxpPjxhIGhyZWY9Imlzd3ByaW50Lmh0bWwjaXN3cHJpbnQiPmlzd3ByaW50PC9hPjogICBQcmludGFibGUgd2lkZSBjaGFyYWN0ZXIgcHJlZGljYXRlCis8bGk+PGEgaHJlZj0iaXN3cHVuY3QuaHRtbCNpc3dwdW5jdCI+aXN3cHVuY3Q8L2E+OiAgIFB1bmN0dWF0aW9uIHdpZGUgY2hhcmFjdGVyIHByZWRpY2F0ZQorPGxpPjxhIGhyZWY9Imlzd3NwYWNlLmh0bWwjaXN3c3BhY2UiPmlzd3NwYWNlPC9hPjogICBXaGl0ZXNwYWNlIHdpZGUgY2hhcmFjdGVyIHByZWRpY2F0ZQorPGxpPjxhIGhyZWY9Imlzd3VwcGVyLmh0bWwjaXN3dXBwZXIiPmlzd3VwcGVyPC9hPjogICBVcHBlcmNhc2Ugd2lkZSBjaGFyYWN0ZXIgcHJlZGljYXRlCis8bGk+PGEgaHJlZj0iaXN3eGRpZ2l0Lmh0bWwjaXN3eGRpZ2l0Ij5pc3d4ZGlnaXQ8L2E+OiAgSGV4YWRlY2ltYWwgZGlnaXQgd2lkZSBjaGFyYWN0ZXIgcHJlZGljYXRlCis8bGk+PGEgaHJlZj0iaXN3Y3R5cGUuaHRtbCNpc3djdHlwZSI+aXN3Y3R5cGU8L2E+OiAgIEV4dGVuc2libGUgd2lkZS1jaGFyYWN0ZXIgdGVzdAorPGxpPjxhIGhyZWY9IndjdHlwZS5odG1sI3djdHlwZSI+d2N0eXBlPC9hPjogICAgIENvbXB1dGUgd2lkZS1jaGFyYWN0ZXIgdGVzdCB0eXBlCis8bGk+PGEgaHJlZj0idG93bG93ZXIuaHRtbCN0b3dsb3dlciI+dG93bG93ZXI8L2E+OiAgIFRyYW5zbGF0ZSB3aWRlIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlCis8bGk+PGEgaHJlZj0idG93dXBwZXIuaHRtbCN0b3d1cHBlciI+dG93dXBwZXI8L2E+OiAgIFRyYW5zbGF0ZSB3aWRlIGNoYXJhY3RlcnMgdG8gdXBwZXJjYXNlCis8bGk+PGEgaHJlZj0idG93Y3RyYW5zLmh0bWwjdG93Y3RyYW5zIj50b3djdHJhbnM8L2E+OiAgRXh0ZW5zaWJsZSB3aWRlLWNoYXJhY3RlciB0cmFuc2xhdGlvbgorPGxpPjxhIGhyZWY9IndjdHJhbnMuaHRtbCN3Y3RyYW5zIj53Y3RyYW5zPC9hPjogICAgQ29tcHV0ZSB3aWRlLWNoYXJhY3RlciB0cmFuc2xhdGlvbiB0eXBlCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9Eb2N1bWVudC1JbmRleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvRG9jdW1lbnQtSW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWE3YjljCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvRG9jdW1lbnQtSW5kZXguaHRtbApAQCAtMCwwICsxLDg0MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgSW5kZXggLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iQXJnbGlzdHMuaHRtbCNBcmdsaXN0cyIgdGl0bGU9IkFyZ2xpc3RzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEb2N1bWVudC1JbmRleCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkFyZ2xpc3RzLmh0bWwjQXJnbGlzdHMiPkFyZ2xpc3RzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkRvY3VtZW50IEluZGV4PC9oMj4KKworPHVsIGNsYXNzPSJpbmRleC1jcCIgY29tcGFjdD4KKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmZW52XzAwNWZsb2NrLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZmVudl8wMDVmbG9jay0yOCI+PGNvZGU+X19lbnZfbG9jazwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmZW52XzAwNWZsb2NrLmh0bWwjZ190XzAwNWZfMDA1ZmVudl8wMDVmbG9jayI+X19lbnZfbG9jazwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZlbnZfMDA1ZmxvY2suaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmZW52XzAwNWZ1bmxvY2stMjkiPjxjb2RlPl9fZW52X3VubG9jazwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmZW52XzAwNWZsb2NrLmh0bWwjZ190XzAwNWZfMDA1ZmVudl8wMDVmbG9jayI+X19lbnZfbG9jazwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZwdXJnZS5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZmcHVyZ2UtMTgzIj48Y29kZT5fX2ZwdXJnZTwvY29kZT48L2E+OiA8YSBocmVmPSJmcHVyZ2UuaHRtbCNmcHVyZ2UiPmZwdXJnZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2suaHRtbCNpbmRleC1nX3RfMDA1Zl8wMDVmbWFsbG9jXzAwNWZsb2NrLTU1Ij48Y29kZT5fX21hbGxvY19sb2NrPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2suaHRtbCNnX3RfMDA1Zl8wMDVmbWFsbG9jXzAwNWZsb2NrIj5fX21hbGxvY19sb2NrPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1Zm1hbGxvY18wMDVmbG9jay5odG1sI2luZGV4LWdfdF8wMDVmXzAwNWZtYWxsb2NfMDA1ZnVubG9jay01NiI+PGNvZGU+X19tYWxsb2NfdW5sb2NrPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2suaHRtbCNnX3RfMDA1Zl8wMDVmbWFsbG9jXzAwNWZsb2NrIj5fX21hbGxvY19sb2NrPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZnR6XzAwNWZsb2NrLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZnR6XzAwNWZsb2NrLTQ0MSI+PGNvZGU+X190el9sb2NrPC9jb2RlPjwvYT46IDxhIGhyZWY9Il8wMDVmXzAwNWZ0el8wMDVmbG9jay5odG1sI2dfdF8wMDVmXzAwNWZ0el8wMDVmbG9jayI+X190el9sb2NrPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZnR6XzAwNWZsb2NrLmh0bWwjaW5kZXgtZ190XzAwNWZfMDA1ZnR6XzAwNWZ1bmxvY2stNDQyIj48Y29kZT5fX3R6X3VubG9jazwvY29kZT48L2E+OiA8YSBocmVmPSJfMDA1Zl8wMDVmdHpfMDA1ZmxvY2suaHRtbCNnX3RfMDA1Zl8wMDVmdHpfMDA1ZmxvY2siPl9fdHpfbG9jazwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFzY3RpbWUuaHRtbCNpbmRleC1nX3RfMDA1ZmFzY3RpbWVfMDA1ZnItNDI5Ij48Y29kZT5fYXNjdGltZV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImFzY3RpbWUuaHRtbCNhc2N0aW1lIj5hc2N0aW1lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZmFzaXByaW50Zl8wMDVmci0yNzYiPjxjb2RlPl9hc2lwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzaXByaW50Zi5odG1sI3NpcHJpbnRmIj5zaXByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZhc25pcHJpbnRmXzAwNWZyLTI3OCI+PGNvZGU+X2FzbmlwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzaXByaW50Zi5odG1sI3NpcHJpbnRmIj5zaXByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZmFzbnByaW50Zl8wMDVmci0yOTYiPjxjb2RlPl9hc25wcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzcHJpbnRmLmh0bWwjc3ByaW50ZiI+c3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZmFzcHJpbnRmXzAwNWZyLTI5MCI+PGNvZGU+X2FzcHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3ByaW50Zi5odG1sI3NwcmludGYiPnNwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhdG9pLmh0bWwjaW5kZXgtZ190XzAwNWZhdG9pXzAwNWZyLTEyIj48Y29kZT5fYXRvaV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImF0b2kuaHRtbCNhdG9pIj5hdG9pPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXRvaS5odG1sI2luZGV4LWdfdF8wMDVmYXRvbF8wMDVmci0xMyI+PGNvZGU+X2F0b2xfcjwvY29kZT48L2E+OiA8YSBocmVmPSJhdG9pLmh0bWwjYXRvaSI+YXRvaTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImF0b2xsLmh0bWwjaW5kZXgtZ190XzAwNWZhdG9sbF8wMDVmci0xNSI+PGNvZGU+X2F0b2xsX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iYXRvbGwuaHRtbCNhdG9sbCI+YXRvbGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYWxsb2MuaHRtbCNpbmRleC1nX3RfMDA1ZmNhbGxvY18wMDVmci0xOCI+PGNvZGU+X2NhbGxvY19yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNhbGxvYy5odG1sI2NhbGxvYyI+Y2FsbG9jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwjaW5kZXgtZ190XzAwNWZjbG9zZV8wMDVmci00ODYiPjxjb2RlPl9jbG9zZV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI1JlZW50cmFudC1TeXNjYWxscyI+UmVlbnRyYW50IFN5c2NhbGxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZGlwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZmRpcHJpbnRmXzAwNWZyLTE0NyI+PGNvZGU+X2RpcHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZGlwcmludGYuaHRtbCNkaXByaW50ZiI+ZGlwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJkcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZkcHJpbnRmXzAwNWZyLTE1MSI+PGNvZGU+X2RwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJkcHJpbnRmLmh0bWwjZHByaW50ZiI+ZHByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0dWJzLmh0bWwjaW5kZXgtZ190XzAwNWZleGl0LTQ2NiI+PGNvZGU+X2V4aXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJfMDA1ZkV4aXQuaHRtbCNpbmRleC1nX3RfMDA1ZkV4aXQtMSI+PGNvZGU+X0V4aXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iXzAwNWZFeGl0Lmh0bWwjZ190XzAwNWZFeGl0Ij5fRXhpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZjbG9zZS5odG1sI2luZGV4LWdfdF8wMDVmZmNsb3NlXzAwNWZyLTE1NSI+PGNvZGU+X2ZjbG9zZV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZjbG9zZS5odG1sI2ZjbG9zZSI+ZmNsb3NlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmNsb3NlYWxsLmh0bWwjaW5kZXgtZ190XzAwNWZmY2xvc2VhbGxfMDA1ZnItMTU3Ij48Y29kZT5fZmNsb3NlYWxsX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmNsb3NlYWxsLmh0bWwjZmNsb3NlYWxsIj5mY2xvc2VhbGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZG9wZW4uaHRtbCNpbmRleC1nX3RfMDA1ZmZkb3Blbl8wMDVmci0xNTkiPjxjb2RlPl9mZG9wZW5fcjwvY29kZT48L2E+OiA8YSBocmVmPSJmZG9wZW4uaHRtbCNmZG9wZW4iPmZkb3BlbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZmbHVzaC5odG1sI2luZGV4LWdfdF8wMDVmZmZsdXNoXzAwNWZyLTE2MyI+PGNvZGU+X2ZmbHVzaF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZmbHVzaC5odG1sI2ZmbHVzaCI+ZmZsdXNoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmdldGMuaHRtbCNpbmRleC1nX3RfMDA1ZmZnZXRjXzAwNWZyLTE2NSI+PGNvZGU+X2ZnZXRjX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmdldGMuaHRtbCNmZ2V0YyI+ZmdldGM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZ2V0cG9zLmh0bWwjaW5kZXgtZ190XzAwNWZmZ2V0cG9zXzAwNWZyLTE2NyI+PGNvZGU+X2ZnZXRwb3NfcjwvY29kZT48L2E+OiA8YSBocmVmPSJmZ2V0cG9zLmh0bWwjZmdldHBvcyI+ZmdldHBvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZnZXRzLmh0bWwjaW5kZXgtZ190XzAwNWZmZ2V0c18wMDVmci0xNjkiPjxjb2RlPl9mZ2V0c19yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZnZXRzLmh0bWwjZmdldHMiPmZnZXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmdldHdjLmh0bWwjaW5kZXgtZ190XzAwNWZmZ2V0d2NfMDA1ZnItMTcxIj48Y29kZT5fZmdldHdjX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmdldHdjLmh0bWwjZmdldHdjIj5mZ2V0d2M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZ2V0d3MuaHRtbCNpbmRleC1nX3RfMDA1ZmZnZXR3c18wMDVmci0xNzUiPjxjb2RlPl9mZ2V0d3NfcjwvY29kZT48L2E+OiA8YSBocmVmPSJmZ2V0d3MuaHRtbCNmZ2V0d3MiPmZnZXR3czwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZmaXByaW50Zl8wMDVmci0yNjgiPjxjb2RlPl9maXByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiPnNpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmZmlzY2FuZl8wMDVmci0yODIiPjxjb2RlPl9maXNjYW5mX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2lzY2FuZi5odG1sI3Npc2NhbmYiPnNpc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmb3Blbi5odG1sI2luZGV4LWdfdF8wMDVmZm9wZW5fMDA1ZnItMTc5Ij48Y29kZT5fZm9wZW5fcjwvY29kZT48L2E+OiA8YSBocmVmPSJmb3Blbi5odG1sI2ZvcGVuIj5mb3BlbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI2luZGV4LWdfdF8wMDVmZm9ya18wMDVmci00OTAiPjxjb2RlPl9mb3JrX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwjUmVlbnRyYW50LVN5c2NhbGxzIj5SZWVudHJhbnQgU3lzY2FsbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZmcHJpbnRmXzAwNWZyLTI4NiI+PGNvZGU+X2ZwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzcHJpbnRmLmh0bWwjc3ByaW50ZiI+c3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZwdXJnZS5odG1sI2luZGV4LWdfdF8wMDVmZnB1cmdlXzAwNWZyLTE4MiI+PGNvZGU+X2ZwdXJnZV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwdXJnZS5odG1sI2ZwdXJnZSI+ZnB1cmdlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnB1dGMuaHRtbCNpbmRleC1nX3RfMDA1ZmZwdXRjXzAwNWZyLTE4NSI+PGNvZGU+X2ZwdXRjX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZnB1dGMuaHRtbCNmcHV0YyI+ZnB1dGM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmcHV0cy5odG1sI2luZGV4LWdfdF8wMDVmZnB1dHNfMDA1ZnItMTg3Ij48Y29kZT5fZnB1dHNfcjwvY29kZT48L2E+OiA8YSBocmVmPSJmcHV0cy5odG1sI2ZwdXRzIj5mcHV0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZwdXR3Yy5odG1sI2luZGV4LWdfdF8wMDVmZnB1dHdjXzAwNWZyLTE4OSI+PGNvZGU+X2ZwdXR3Y19yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwdXR3Yy5odG1sI2ZwdXR3YyI+ZnB1dHdjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnB1dHdzLmh0bWwjaW5kZXgtZ190XzAwNWZmcHV0d3NfMDA1ZnItMTkzIj48Y29kZT5fZnB1dHdzX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZnB1dHdzLmh0bWwjZnB1dHdzIj5mcHV0d3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmcmVhZC5odG1sI2luZGV4LWdfdF8wMDVmZnJlYWRfMDA1ZnItMTk1Ij48Y29kZT5fZnJlYWRfcjwvY29kZT48L2E+OiA8YSBocmVmPSJmcmVhZC5odG1sI2ZyZWFkIj5mcmVhZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1hbGxvYy5odG1sI2luZGV4LWdfdF8wMDVmZnJlZV8wMDVmci00NiI+PGNvZGU+X2ZyZWVfcjwvY29kZT48L2E+OiA8YSBocmVmPSJtYWxsb2MuaHRtbCNtYWxsb2MiPm1hbGxvYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZyZW9wZW4uaHRtbCNpbmRleC1nX3RfMDA1ZmZyZW9wZW5fMDA1ZnItMTk3Ij48Y29kZT5fZnJlb3Blbl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZyZW9wZW4uaHRtbCNmcmVvcGVuIj5mcmVvcGVuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3NjYW5mLmh0bWwjaW5kZXgtZ190XzAwNWZmc2NhbmZfMDA1ZnItMzAwIj48Y29kZT5fZnNjYW5mX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3NjYW5mLmh0bWwjc3NjYW5mIj5zc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmc2Vlay5odG1sI2luZGV4LWdfdF8wMDVmZnNlZWtfMDA1ZnItMjAwIj48Y29kZT5fZnNlZWtfcjwvY29kZT48L2E+OiA8YSBocmVmPSJmc2Vlay5odG1sI2ZzZWVrIj5mc2VlazwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZzZWVrLmh0bWwjaW5kZXgtZ190XzAwNWZmc2Vla29fMDA1ZnItMjAxIj48Y29kZT5fZnNlZWtvX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZnNlZWsuaHRtbCNmc2VlayI+ZnNlZWs8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmc2V0cG9zLmh0bWwjaW5kZXgtZ190XzAwNWZmc2V0cG9zXzAwNWZyLTIwMyI+PGNvZGU+X2ZzZXRwb3NfcjwvY29kZT48L2E+OiA8YSBocmVmPSJmc2V0cG9zLmh0bWwjZnNldHBvcyI+ZnNldHBvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI2luZGV4LWdfdF8wMDVmZnN0YXRfMDA1ZnItNDkzIj48Y29kZT5fZnN0YXRfcjwvY29kZT48L2E+OiA8YSBocmVmPSJSZWVudHJhbnQtU3lzY2FsbHMuaHRtbCNSZWVudHJhbnQtU3lzY2FsbHMiPlJlZW50cmFudCBTeXNjYWxsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZ0ZWxsLmh0bWwjaW5kZXgtZ190XzAwNWZmdGVsbF8wMDVmci0yMDYiPjxjb2RlPl9mdGVsbF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZ0ZWxsLmh0bWwjZnRlbGwiPmZ0ZWxsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnRlbGwuaHRtbCNpbmRleC1nX3RfMDA1ZmZ0ZWxsb18wMDVmci0yMDciPjxjb2RlPl9mdGVsbG9fcjwvY29kZT48L2E+OiA8YSBocmVmPSJmdGVsbC5odG1sI2Z0ZWxsIj5mdGVsbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZ3aWRlLmh0bWwjaW5kZXgtZ190XzAwNWZmd2lkZV8wMDVmci0yMTIiPjxjb2RlPl9md2lkZV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZ3aWRlLmh0bWwjZndpZGUiPmZ3aWRlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3dwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZmZ3cHJpbnRmXzAwNWZyLTMwNCI+PGNvZGU+X2Z3cHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3dwcmludGYuaHRtbCNzd3ByaW50ZiI+c3dwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmd3JpdGUuaHRtbCNpbmRleC1nX3RfMDA1ZmZ3cml0ZV8wMDVmci0yMTQiPjxjb2RlPl9md3JpdGVfcjwvY29kZT48L2E+OiA8YSBocmVmPSJmd3JpdGUuaHRtbCNmd3JpdGUiPmZ3cml0ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN3c2NhbmYuaHRtbCNpbmRleC1nX3RfMDA1ZmZ3c2NhbmZfMDA1ZnItMzEyIj48Y29kZT5fZndzY2FuZl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InN3c2NhbmYuaHRtbCNzd3NjYW5mIj5zd3NjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2V0Yy5odG1sI2luZGV4LWdfdF8wMDVmZ2V0Y18wMDVmci0yMTYiPjxjb2RlPl9nZXRjX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZ2V0Yy5odG1sI2dldGMiPmdldGM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJnZXRjXzAwNWZ1bmxvY2tlZC5odG1sI2luZGV4LWdfdF8wMDVmZ2V0Y18wMDVmdW5sb2NrZWRfMDA1ZnItMjE4Ij48Y29kZT5fZ2V0Y191bmxvY2tlZF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdldGNfMDA1ZnVubG9ja2VkLmh0bWwjZ2V0Y18wMDVmdW5sb2NrZWQiPmdldGNfdW5sb2NrZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJnZXRjaGFyLmh0bWwjaW5kZXgtZ190XzAwNWZnZXRjaGFyXzAwNWZyLTIyMCI+PGNvZGU+X2dldGNoYXJfcjwvY29kZT48L2E+OiA8YSBocmVmPSJnZXRjaGFyLmh0bWwjZ2V0Y2hhciI+Z2V0Y2hhcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdldGNoYXJfMDA1ZnVubG9ja2VkLmh0bWwjaW5kZXgtZ190XzAwNWZnZXRjaGFyXzAwNWZ1bmxvY2tlZF8wMDVmci0yMjIiPjxjb2RlPl9nZXRjaGFyX3VubG9ja2VkX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZ2V0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbCNnZXRjaGFyXzAwNWZ1bmxvY2tlZCI+Z2V0Y2hhcl91bmxvY2tlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdldHMuaHRtbCNpbmRleC1nX3RfMDA1ZmdldHNfMDA1ZnItMjI2Ij48Y29kZT5fZ2V0c19yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdldHMuaHRtbCNnZXRzIj5nZXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmdldHdjLmh0bWwjaW5kZXgtZ190XzAwNWZnZXR3Y18wMDVmci0xNzMiPjxjb2RlPl9nZXR3Y19yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZnZXR3Yy5odG1sI2ZnZXR3YyI+ZmdldHdjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2V0d2NoYXIuaHRtbCNpbmRleC1nX3RfMDA1ZmdldHdjaGFyXzAwNWZyLTIyOSI+PGNvZGU+X2dldHdjaGFyX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZ2V0d2NoYXIuaHRtbCNnZXR3Y2hhciI+Z2V0d2NoYXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjaW5kZXgtZ190XzAwNWZpbXB1cmVfMDA1ZnB0ci00NTQiPjxjb2RlPl9pbXB1cmVfcHRyPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij5SZWVudHJhbmN5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZmlwcmludGZfMDA1ZnItMjcwIj48Y29kZT5faXByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiPnNpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmaXNjYW5mXzAwNWZyLTI4MCI+PGNvZGU+X2lzY2FuZl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpc2NhbmYuaHRtbCNzaXNjYW5mIj5zaXNjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwjaW5kZXgtZ190XzAwNWZsaW5rXzAwNWZyLTQ5NCI+PGNvZGU+X2xpbmtfcjwvY29kZT48L2E+OiA8YSBocmVmPSJSZWVudHJhbnQtU3lzY2FsbHMuaHRtbCNSZWVudHJhbnQtU3lzY2FsbHMiPlJlZW50cmFudCBTeXNjYWxsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNldGxvY2FsZS5odG1sI2luZGV4LWdfdF8wMDVmbG9jYWxlY29udl8wMDVmci00NDgiPjxjb2RlPl9sb2NhbGVjb252X3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2V0bG9jYWxlLmh0bWwjc2V0bG9jYWxlIj5zZXRsb2NhbGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZWVudHJhbnQtU3lzY2FsbHMuaHRtbCNpbmRleC1nX3RfMDA1ZmxzZWVrXzAwNWZyLTQ4NyI+PGNvZGU+X2xzZWVrX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwjUmVlbnRyYW50LVN5c2NhbGxzIj5SZWVudHJhbnQgU3lzY2FsbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYWxsaW5mby5odG1sI2luZGV4LWdfdF8wMDVmbWFsbGluZm9fMDA1ZnItNTIiPjxjb2RlPl9tYWxsaW5mb19yPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hbGxpbmZvLmh0bWwjbWFsbGluZm8iPm1hbGxpbmZvPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWFsbG9jLmh0bWwjaW5kZXgtZ190XzAwNWZtYWxsb2NfMDA1ZnItNDMiPjxjb2RlPl9tYWxsb2NfcjwvY29kZT48L2E+OiA8YSBocmVmPSJtYWxsb2MuaHRtbCNtYWxsb2MiPm1hbGxvYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1hbGxpbmZvLmh0bWwjaW5kZXgtZ190XzAwNWZtYWxsb2NfMDA1ZnN0YXRzXzAwNWZyLTUzIj48Y29kZT5fbWFsbG9jX3N0YXRzX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWFsbGluZm8uaHRtbCNtYWxsaW5mbyI+bWFsbGluZm88L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYWxsb2MuaHRtbCNpbmRleC1nX3RfMDA1Zm1hbGxvY18wMDVmdXNhYmxlXzAwNWZzaXplXzAwNWZyLTQ4Ij48Y29kZT5fbWFsbG9jX3VzYWJsZV9zaXplX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWFsbG9jLmh0bWwjbWFsbG9jIj5tYWxsb2M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYWxsaW5mby5odG1sI2luZGV4LWdfdF8wMDVmbWFsbG9wdF8wMDVmci01NCI+PGNvZGU+X21hbGxvcHRfcjwvY29kZT48L2E+OiA8YSBocmVmPSJtYWxsaW5mby5odG1sI21hbGxpbmZvIj5tYWxsaW5mbzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1ic3J0b3djcy5odG1sI2luZGV4LWdfdF8wMDVmbWJzbnJ0b3djc18wMDVmci02MSI+PGNvZGU+X21ic25ydG93Y3NfcjwvY29kZT48L2E+OiA8YSBocmVmPSJtYnNydG93Y3MuaHRtbCNtYnNydG93Y3MiPm1ic3J0b3djczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1ic3J0b3djcy5odG1sI2luZGV4LWdfdF8wMDVmbWJzcnRvd2NzXzAwNWZyLTU5Ij48Y29kZT5fbWJzcnRvd2NzX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWJzcnRvd2NzLmh0bWwjbWJzcnRvd2NzIj5tYnNydG93Y3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYWxsb2MuaHRtbCNpbmRleC1nX3RfMDA1Zm1lbWFsaWduXzAwNWZyLTQ3Ij48Y29kZT5fbWVtYWxpZ25fcjwvY29kZT48L2E+OiA8YSBocmVmPSJtYWxsb2MuaHRtbCNtYWxsb2MiPm1hbGxvYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1rdGVtcC5odG1sI2luZGV4LWdfdF8wMDVmbWtkdGVtcF8wMDVmci0yMzciPjxjb2RlPl9ta2R0ZW1wX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIj5ta3RlbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJta3RlbXAuaHRtbCNpbmRleC1nX3RfMDA1Zm1rb3N0ZW1wXzAwNWZyLTI0MCI+PGNvZGU+X21rb3N0ZW1wX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIj5ta3RlbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJta3RlbXAuaHRtbCNpbmRleC1nX3RfMDA1Zm1rb3N0ZW1wc18wMDVmci0yNDEiPjxjb2RlPl9ta29zdGVtcHNfcjwvY29kZT48L2E+OiA8YSBocmVmPSJta3RlbXAuaHRtbCNta3RlbXAiPm1rdGVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1rdGVtcC5odG1sI2luZGV4LWdfdF8wMDVmbWtzdGVtcF8wMDVmci0yMzgiPjxjb2RlPl9ta3N0ZW1wX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIj5ta3RlbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJta3RlbXAuaHRtbCNpbmRleC1nX3RfMDA1Zm1rc3RlbXBzXzAwNWZyLTIzOSI+PGNvZGU+X21rc3RlbXBzX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIj5ta3RlbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJta3RlbXAuaHRtbCNpbmRleC1nX3RfMDA1Zm1rdGVtcF8wMDVmci0yMzYiPjxjb2RlPl9ta3RlbXBfcjwvY29kZT48L2E+OiA8YSBocmVmPSJta3RlbXAuaHRtbCNta3RlbXAiPm1rdGVtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI2luZGV4LWdfdF8wMDVmb3Blbl8wMDVmci00ODUiPjxjb2RlPl9vcGVuX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwjUmVlbnRyYW50LVN5c2NhbGxzIj5SZWVudHJhbnQgU3lzY2FsbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJwZXJyb3IuaHRtbCNpbmRleC1nX3RfMDA1ZnBlcnJvcl8wMDVmci0yNDUiPjxjb2RlPl9wZXJyb3JfcjwvY29kZT48L2E+OiA8YSBocmVmPSJwZXJyb3IuaHRtbCNwZXJyb3IiPnBlcnJvcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZnByaW50Zl8wMDVmci0yODgiPjxjb2RlPl9wcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzcHJpbnRmLmh0bWwjc3ByaW50ZiI+c3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InB1dGMuaHRtbCNpbmRleC1nX3RfMDA1ZnB1dGNfMDA1ZnItMjQ3Ij48Y29kZT5fcHV0Y19yPC9jb2RlPjwvYT46IDxhIGhyZWY9InB1dGMuaHRtbCNwdXRjIj5wdXRjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icHV0Y18wMDVmdW5sb2NrZWQuaHRtbCNpbmRleC1nX3RfMDA1ZnB1dGNfMDA1ZnVubG9ja2VkXzAwNWZyLTI0OSI+PGNvZGU+X3B1dGNfdW5sb2NrZWRfcjwvY29kZT48L2E+OiA8YSBocmVmPSJwdXRjXzAwNWZ1bmxvY2tlZC5odG1sI3B1dGNfMDA1ZnVubG9ja2VkIj5wdXRjX3VubG9ja2VkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icHV0Y2hhci5odG1sI2luZGV4LWdfdF8wMDVmcHV0Y2hhcl8wMDVmci0yNTEiPjxjb2RlPl9wdXRjaGFyX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0icHV0Y2hhci5odG1sI3B1dGNoYXIiPnB1dGNoYXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJwdXRzLmh0bWwjaW5kZXgtZ190XzAwNWZwdXRzXzAwNWZyLTI1NCI+PGNvZGU+X3B1dHNfcjwvY29kZT48L2E+OiA8YSBocmVmPSJwdXRzLmh0bWwjcHV0cyI+cHV0czwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZwdXR3Yy5odG1sI2luZGV4LWdfdF8wMDVmcHV0d2NfMDA1ZnItMTkxIj48Y29kZT5fcHV0d2NfcjwvY29kZT48L2E+OiA8YSBocmVmPSJmcHV0d2MuaHRtbCNmcHV0d2MiPmZwdXR3YzwvYT48L2xpPgorPGxpPjxhIGhyZWY9InB1dHdjaGFyLmh0bWwjaW5kZXgtZ190XzAwNWZwdXR3Y2hhcl8wMDVmci0yNTciPjxjb2RlPl9wdXR3Y2hhcl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InB1dHdjaGFyLmh0bWwjcHV0d2NoYXIiPnB1dHdjaGFyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmFpc2UuaHRtbCNpbmRleC1nX3RfMDA1ZnJhaXNlXzAwNWZyLTQyNSI+PGNvZGU+X3JhaXNlX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0icmFpc2UuaHRtbCNyYWlzZSI+cmFpc2U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZWVudHJhbnQtU3lzY2FsbHMuaHRtbCNpbmRleC1nX3RfMDA1ZnJlYWRfMDA1ZnItNDg4Ij48Y29kZT5fcmVhZF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI1JlZW50cmFudC1TeXNjYWxscyI+UmVlbnRyYW50IFN5c2NhbGxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWFsbG9jLmh0bWwjaW5kZXgtZ190XzAwNWZyZWFsbG9jXzAwNWZyLTQ0Ij48Y29kZT5fcmVhbGxvY19yPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+bWFsbG9jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWFsbG9jLmh0bWwjaW5kZXgtZ190XzAwNWZyZWFsbG9jZl8wMDVmci00NSI+PGNvZGU+X3JlYWxsb2NmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWFsbG9jLmh0bWwjbWFsbG9jIj5tYWxsb2M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjaW5kZXgtZ190XzAwNWZyZWVudC00NTAiPjxjb2RlPl9yZWVudDwvY29kZT48L2E+OiA8YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjUmVlbnRyYW5jeSI+UmVlbnRyYW5jeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJlbW92ZS5odG1sI2luZGV4LWdfdF8wMDVmcmVtb3ZlXzAwNWZyLTI1OSI+PGNvZGU+X3JlbW92ZV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InJlbW92ZS5odG1sI3JlbW92ZSI+cmVtb3ZlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmV3aW5kLmh0bWwjaW5kZXgtZ190XzAwNWZyZXdpbmRfMDA1ZnItMjYyIj48Y29kZT5fcmV3aW5kX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0icmV3aW5kLmh0bWwjcmV3aW5kIj5yZXdpbmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZWVudHJhbnQtU3lzY2FsbHMuaHRtbCNpbmRleC1nX3RfMDA1ZnNicmtfMDA1ZnItNDk2Ij48Y29kZT5fc2Jya19yPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI1JlZW50cmFudC1TeXNjYWxscyI+UmVlbnRyYW50IFN5c2NhbGxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3NjYW5mLmh0bWwjaW5kZXgtZ190XzAwNWZzY2FuZl8wMDVmci0yOTgiPjxjb2RlPl9zY2FuZl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InNzY2FuZi5odG1sI3NzY2FuZiI+c3NjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2V0bG9jYWxlLmh0bWwjaW5kZXgtZ190XzAwNWZzZXRsb2NhbGVfMDA1ZnItNDQ3Ij48Y29kZT5fc2V0bG9jYWxlX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2V0bG9jYWxlLmh0bWwjc2V0bG9jYWxlIj5zZXRsb2NhbGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzaWduYWwuaHRtbCNpbmRleC1nX3RfMDA1ZnNpZ25hbF8wMDVmci00MjciPjxjb2RlPl9zaWduYWxfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzaWduYWwuaHRtbCNzaWduYWwiPnNpZ25hbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZzaXByaW50Zl8wMDVmci0yNzIiPjxjb2RlPl9zaXByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiPnNpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmc2lzY2FuZl8wMDVmci0yODQiPjxjb2RlPl9zaXNjYW5mX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2lzY2FuZi5odG1sI3Npc2NhbmYiPnNpc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzaXByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmc25pcHJpbnRmXzAwNWZyLTI3NCI+PGNvZGU+X3NuaXByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiPnNpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3ByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmc25wcmludGZfMDA1ZnItMjk0Ij48Y29kZT5fc25wcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzcHJpbnRmLmh0bWwjc3ByaW50ZiI+c3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZnNwcmludGZfMDA1ZnItMjkyIj48Y29kZT5fc3ByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InNwcmludGYuaHRtbCNzcHJpbnRmIj5zcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3NjYW5mLmh0bWwjaW5kZXgtZ190XzAwNWZzc2NhbmZfMDA1ZnItMzAyIj48Y29kZT5fc3NjYW5mX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3NjYW5mLmh0bWwjc3NjYW5mIj5zc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZWVudHJhbnQtU3lzY2FsbHMuaHRtbCNpbmRleC1nX3RfMDA1ZnN0YXRfMDA1ZnItNDkyIj48Y29kZT5fc3RhdF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI1JlZW50cmFudC1TeXNjYWxscyI+UmVlbnRyYW50IFN5c2NhbGxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RydG9kLmh0bWwjaW5kZXgtZ190XzAwNWZzdHJ0b2RfMDA1ZnItODAiPjxjb2RlPl9zdHJ0b2RfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJ0b2QuaHRtbCNzdHJ0b2QiPnN0cnRvZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cnRvbC5odG1sI2luZGV4LWdfdF8wMDVmc3RydG9sXzAwNWZyLTgzIj48Y29kZT5fc3RydG9sX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RydG9sLmh0bWwjc3RydG9sIj5zdHJ0b2w8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJ0b2xsLmh0bWwjaW5kZXgtZ190XzAwNWZzdHJ0b2xsXzAwNWZyLTg1Ij48Y29kZT5fc3RydG9sbF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InN0cnRvbGwuaHRtbCNzdHJ0b2xsIj5zdHJ0b2xsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RydG91bC5odG1sI2luZGV4LWdfdF8wMDVmc3RydG91bF8wMDVmci04NyI+PGNvZGU+X3N0cnRvdWxfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJ0b3VsLmh0bWwjc3RydG91bCI+c3RydG91bDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cnRvdWxsLmh0bWwjaW5kZXgtZ190XzAwNWZzdHJ0b3VsbF8wMDVmci04OSI+PGNvZGU+X3N0cnRvdWxsX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RydG91bGwuaHRtbCNzdHJ0b3VsbCI+c3RydG91bGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzd3ByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmc3dwcmludGZfMDA1ZnItMzA4Ij48Y29kZT5fc3dwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzd3ByaW50Zi5odG1sI3N3cHJpbnRmIj5zd3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN3c2NhbmYuaHRtbCNpbmRleC1nX3RfMDA1ZnN3c2NhbmZfMDA1ZnItMzE0Ij48Y29kZT5fc3dzY2FuZl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InN3c2NhbmYuaHRtbCNzd3NjYW5mIj5zd3NjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3lzdGVtLmh0bWwjaW5kZXgtZ190XzAwNWZzeXN0ZW1fMDA1ZnItMTA3Ij48Y29kZT5fc3lzdGVtX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3lzdGVtLmh0bWwjc3lzdGVtIj5zeXN0ZW08L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0bXBuYW0uaHRtbCNpbmRleC1nX3RfMDA1ZnRlbXBuYW1fMDA1ZnItMzIwIj48Y29kZT5fdGVtcG5hbV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InRtcG5hbS5odG1sI3RtcG5hbSI+dG1wbmFtPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idG1wZmlsZS5odG1sI2luZGV4LWdfdF8wMDVmdG1wZmlsZV8wMDVmci0zMTYiPjxjb2RlPl90bXBmaWxlX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idG1wZmlsZS5odG1sI3RtcGZpbGUiPnRtcGZpbGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0bXBuYW0uaHRtbCNpbmRleC1nX3RfMDA1ZnRtcG5hbV8wMDVmci0zMTkiPjxjb2RlPl90bXBuYW1fcjwvY29kZT48L2E+OiA8YSBocmVmPSJ0bXBuYW0uaHRtbCN0bXBuYW0iPnRtcG5hbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InRvbG93ZXIuaHRtbCNpbmRleC1nX3RfMDA1ZnRvbG93ZXItMTI0Ij48Y29kZT5fdG9sb3dlcjwvY29kZT48L2E+OiA8YSBocmVmPSJ0b2xvd2VyLmh0bWwjdG9sb3dlciI+dG9sb3dlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InRvdXBwZXIuaHRtbCNpbmRleC1nX3RfMDA1ZnRvdXBwZXItMTI2Ij48Y29kZT5fdG91cHBlcjwvY29kZT48L2E+OiA8YSBocmVmPSJ0b3VwcGVyLmh0bWwjdG91cHBlciI+dG91cHBlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InR6c2V0Lmh0bWwjaW5kZXgtZ190XzAwNWZ0enNldF8wMDVmci00NDQiPjxjb2RlPl90enNldF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InR6c2V0Lmh0bWwjdHpzZXQiPnR6c2V0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idW5nZXRjLmh0bWwjaW5kZXgtZ190XzAwNWZ1bmdldGNfMDA1ZnItMzIyIj48Y29kZT5fdW5nZXRjX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idW5nZXRjLmh0bWwjdW5nZXRjIj51bmdldGM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ1bmdldHdjLmh0bWwjaW5kZXgtZ190XzAwNWZ1bmdldHdjXzAwNWZyLTMyNCI+PGNvZGU+X3VuZ2V0d2NfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ1bmdldHdjLmh0bWwjdW5nZXR3YyI+dW5nZXR3YzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI2luZGV4LWdfdF8wMDVmdW5saW5rXzAwNWZyLTQ5NSI+PGNvZGU+X3VubGlua19yPC9jb2RlPjwvYT46IDxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI1JlZW50cmFudC1TeXNjYWxscyI+UmVlbnRyYW50IFN5c2NhbGxzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmlwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZnZhc2lwcmludGZfMDA1ZnItMzY0Ij48Y29kZT5fdmFzaXByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmlwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZnZhc25pcHJpbnRmXzAwNWZyLTM2NiI+PGNvZGU+X3Zhc25pcHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmlwcmludGYuaHRtbCN2aXByaW50ZiI+dmlwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmdmFzbnByaW50Zl8wMDVmci0zMzYiPjxjb2RlPl92YXNucHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZwcmludGYuaHRtbCN2ZnByaW50ZiI+dmZwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmdmFzcHJpbnRmXzAwNWZyLTMzNCI+PGNvZGU+X3Zhc3ByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InZmcHJpbnRmLmh0bWwjdmZwcmludGYiPnZmcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZGlwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZnZkaXByaW50Zl8wMDVmci0xNDkiPjxjb2RlPl92ZGlwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJkaXByaW50Zi5odG1sI2RpcHJpbnRmIj5kaXByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImRwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZnZkcHJpbnRmXzAwNWZyLTE1MyI+PGNvZGU+X3ZkcHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZHByaW50Zi5odG1sI2RwcmludGYiPmRwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2aXByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmdmZpcHJpbnRmXzAwNWZyLTM1OCI+PGNvZGU+X3ZmaXByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmlzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmdmZpc2NhbmZfMDA1ZnItMzcwIj48Y29kZT5fdmZpc2NhbmZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ2aXNjYW5mLmh0bWwjdmlzY2FuZiI+dmlzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZmcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZ2ZnByaW50Zl8wMDVmci0zMjYiPjxjb2RlPl92ZnByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InZmcHJpbnRmLmh0bWwjdmZwcmludGYiPnZmcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmZzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmdmZzY2FuZl8wMDVmci0zMzgiPjxjb2RlPl92ZnNjYW5mX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZzY2FuZi5odG1sI3Zmc2NhbmYiPnZmc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZnZmd3ByaW50Zl8wMDVmci0zNDQiPjxjb2RlPl92ZndwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ2ZndwcmludGYuaHRtbCN2ZndwcmludGYiPnZmd3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZmd3NjYW5mLmh0bWwjaW5kZXgtZ190XzAwNWZ2ZndzY2FuZi0zNTAiPjxjb2RlPl92ZndzY2FuZjwvY29kZT48L2E+OiA8YSBocmVmPSJ2ZndzY2FuZi5odG1sI3Zmd3NjYW5mIj52ZndzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZpcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZ2aXByaW50Zl8wMDVmci0zNTYiPjxjb2RlPl92aXByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmlzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmdmlzY2FuZl8wMDVmci0zNjgiPjxjb2RlPl92aXNjYW5mX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmlzY2FuZi5odG1sI3Zpc2NhbmYiPnZpc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmdnByaW50Zl8wMDVmci0zMjgiPjxjb2RlPl92cHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZwcmludGYuaHRtbCN2ZnByaW50ZiI+dmZwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnNjYW5mLmh0bWwjaW5kZXgtZ190XzAwNWZ2c2NhbmZfMDA1ZnItMzQwIj48Y29kZT5fdnNjYW5mX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZzY2FuZi5odG1sI3Zmc2NhbmYiPnZmc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2aXByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmdnNpcHJpbnRmXzAwNWZyLTM2MCI+PGNvZGU+X3ZzaXByaW50Zl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmlzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmdnNpc2NhbmZfMDA1ZnItMzcyIj48Y29kZT5fdnNpc2NhbmZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ2aXNjYW5mLmh0bWwjdmlzY2FuZiI+dmlzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZpcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZ2c25pcHJpbnRmXzAwNWZyLTM2MiI+PGNvZGU+X3ZzbmlwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ2aXByaW50Zi5odG1sI3ZpcHJpbnRmIj52aXByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZmcHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZ2c25wcmludGZfMDA1ZnItMzMyIj48Y29kZT5fdnNucHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZwcmludGYuaHRtbCN2ZnByaW50ZiI+dmZwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnByaW50Zi5odG1sI2luZGV4LWdfdF8wMDVmdnNwcmludGZfMDA1ZnItMzMwIj48Y29kZT5fdnNwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ2ZnByaW50Zi5odG1sI3ZmcHJpbnRmIj52ZnByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZmc2NhbmYuaHRtbCNpbmRleC1nX3RfMDA1ZnZzc2NhbmZfMDA1ZnItMzQyIj48Y29kZT5fdnNzY2FuZl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InZmc2NhbmYuaHRtbCN2ZnNjYW5mIj52ZnNjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmZ3cHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZ2c3dwcmludGZfMDA1ZnItMzQ4Ij48Y29kZT5fdnN3cHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZ3cHJpbnRmLmh0bWwjdmZ3cHJpbnRmIj52ZndwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmdnN3c2NhbmYtMzU0Ij48Y29kZT5fdnN3c2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZ3c2NhbmYuaHRtbCN2ZndzY2FuZiI+dmZ3c2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndwcmludGYuaHRtbCNpbmRleC1nX3RfMDA1ZnZ3cHJpbnRmXzAwNWZyLTM0NiI+PGNvZGU+X3Z3cHJpbnRmX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZ3cHJpbnRmLmh0bWwjdmZ3cHJpbnRmIj52ZndwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndzY2FuZi5odG1sI2luZGV4LWdfdF8wMDVmdndzY2FuZi0zNTIiPjxjb2RlPl92d3NjYW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9InZmd3NjYW5mLmh0bWwjdmZ3c2NhbmYiPnZmd3NjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwjaW5kZXgtZ190XzAwNWZ3YWl0XzAwNWZyLTQ5MSI+PGNvZGU+X3dhaXRfcjwvY29kZT48L2E+OiA8YSBocmVmPSJSZWVudHJhbnQtU3lzY2FsbHMuaHRtbCNSZWVudHJhbnQtU3lzY2FsbHMiPlJlZW50cmFudCBTeXNjYWxsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Indjc2R1cC5odG1sI2luZGV4LWdfdF8wMDVmd2NzZHVwXzAwNWZyLTQxMyI+PGNvZGU+X3djc2R1cF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9Indjc2R1cC5odG1sI3djc2R1cCI+d2NzZHVwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0id2NzcnRvbWJzLmh0bWwjaW5kZXgtZ190XzAwNWZ3Y3NucnRvbWJzXzAwNWZyLTkzIj48Y29kZT5fd2NzbnJ0b21ic19yPC9jb2RlPjwvYT46IDxhIGhyZWY9Indjc3J0b21icy5odG1sI3djc3J0b21icyI+d2NzcnRvbWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0id2NzcnRvbWJzLmh0bWwjaW5kZXgtZ190XzAwNWZ3Y3NydG9tYnNfMDA1ZnItOTEiPjxjb2RlPl93Y3NydG9tYnNfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ3Y3NydG9tYnMuaHRtbCN3Y3NydG9tYnMiPndjc3J0b21iczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Indjc3RvZC5odG1sI2luZGV4LWdfdF8wMDVmd2NzdG9kXzAwNWZyLTk1Ij48Y29kZT5fd2NzdG9kX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzdG9kLmh0bWwjd2NzdG9kIj53Y3N0b2Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N0b2QuaHRtbCNpbmRleC1nX3RfMDA1Zndjc3RvZl8wMDVmci05NyI+PGNvZGU+X3djc3RvZl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9Indjc3RvZC5odG1sI3djc3RvZCI+d2NzdG9kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0id2NzdG9sLmh0bWwjaW5kZXgtZ190XzAwNWZ3Y3N0b2xfMDA1ZnItOTkiPjxjb2RlPl93Y3N0b2xfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ3Y3N0b2wuaHRtbCN3Y3N0b2wiPndjc3RvbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Indjc3RvbGwuaHRtbCNpbmRleC1nX3RfMDA1Zndjc3RvbGxfMDA1ZnItMTAxIj48Y29kZT5fd2NzdG9sbF9yPC9jb2RlPjwvYT46IDxhIGhyZWY9Indjc3RvbGwuaHRtbCN3Y3N0b2xsIj53Y3N0b2xsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0id2NzdG91bC5odG1sI2luZGV4LWdfdF8wMDVmd2NzdG91bF8wMDVmci0xMDMiPjxjb2RlPl93Y3N0b3VsX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzdG91bC5odG1sI3djc3RvdWwiPndjc3RvdWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N0b3VsbC5odG1sI2luZGV4LWdfdF8wMDVmd2NzdG91bGxfMDA1ZnItMTA1Ij48Y29kZT5fd2NzdG91bGxfcjwvY29kZT48L2E+OiA8YSBocmVmPSJ3Y3N0b3VsbC5odG1sI3djc3RvdWxsIj53Y3N0b3VsbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN3cHJpbnRmLmh0bWwjaW5kZXgtZ190XzAwNWZ3cHJpbnRmXzAwNWZyLTMwNiI+PGNvZGU+X3dwcmludGZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzd3ByaW50Zi5odG1sI3N3cHJpbnRmIj5zd3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI2luZGV4LWdfdF8wMDVmd3JpdGVfMDA1ZnItNDg5Ij48Y29kZT5fd3JpdGVfcjwvY29kZT48L2E+OiA8YSBocmVmPSJSZWVudHJhbnQtU3lzY2FsbHMuaHRtbCNSZWVudHJhbnQtU3lzY2FsbHMiPlJlZW50cmFudCBTeXNjYWxsczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN3c2NhbmYuaHRtbCNpbmRleC1nX3RfMDA1ZndzY2FuZl8wMDVmci0zMTAiPjxjb2RlPl93c2NhbmZfcjwvY29kZT48L2E+OiA8YSBocmVmPSJzd3NjYW5mLmh0bWwjc3dzY2FuZiI+c3dzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImE2NGwuaHRtbCNpbmRleC1hNjRsLTIiPjxjb2RlPmE2NGw8L2NvZGU+PC9hPjogPGEgaHJlZj0iYTY0bC5odG1sI2E2NGwiPmE2NGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhYm9ydC5odG1sI2luZGV4LWFib3J0LTQiPjxjb2RlPmFib3J0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImFib3J0Lmh0bWwjYWJvcnQiPmFib3J0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYWJzLmh0bWwjaW5kZXgtYWJzLTUiPjxjb2RlPmFiczwvY29kZT48L2E+OiA8YSBocmVmPSJhYnMuaHRtbCNhYnMiPmFiczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFzY3RpbWUuaHRtbCNpbmRleC1hc2N0aW1lLTQyOCI+PGNvZGU+YXNjdGltZTwvY29kZT48L2E+OiA8YSBocmVmPSJhc2N0aW1lLmh0bWwjYXNjdGltZSI+YXNjdGltZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpcHJpbnRmLmh0bWwjaW5kZXgtYXNpcHJpbnRmLTI3NSI+PGNvZGU+YXNpcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiPnNpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lwcmludGYuaHRtbCNpbmRleC1hc25pcHJpbnRmLTI3NyI+PGNvZGU+YXNuaXByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJzaXByaW50Zi5odG1sI3NpcHJpbnRmIj5zaXByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNwcmludGYuaHRtbCNpbmRleC1hc25wcmludGYtMjk1Ij48Y29kZT5hc25wcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3ByaW50Zi5odG1sI3NwcmludGYiPnNwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzcHJpbnRmLmh0bWwjaW5kZXgtYXNwcmludGYtMjg5Ij48Y29kZT5hc3ByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJzcHJpbnRmLmh0bWwjc3ByaW50ZiI+c3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFzc2VydC5odG1sI2luZGV4LWFzc2VydC02Ij48Y29kZT5hc3NlcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iYXNzZXJ0Lmh0bWwjYXNzZXJ0Ij5hc3NlcnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhdGV4aXQuaHRtbCNpbmRleC1hdGV4aXQtNyI+PGNvZGU+YXRleGl0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImF0ZXhpdC5odG1sI2F0ZXhpdCI+YXRleGl0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXRvZi5odG1sI2luZGV4LWF0b2YtOCI+PGNvZGU+YXRvZjwvY29kZT48L2E+OiA8YSBocmVmPSJhdG9mLmh0bWwjYXRvZiI+YXRvZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImF0b2YuaHRtbCNpbmRleC1hdG9mZi05Ij48Y29kZT5hdG9mZjwvY29kZT48L2E+OiA8YSBocmVmPSJhdG9mLmh0bWwjYXRvZiI+YXRvZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImF0b2kuaHRtbCNpbmRleC1hdG9pLTEwIj48Y29kZT5hdG9pPC9jb2RlPjwvYT46IDxhIGhyZWY9ImF0b2kuaHRtbCNhdG9pIj5hdG9pPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXRvaS5odG1sI2luZGV4LWF0b2wtMTEiPjxjb2RlPmF0b2w8L2NvZGU+PC9hPjogPGEgaHJlZj0iYXRvaS5odG1sI2F0b2kiPmF0b2k8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhdG9sbC5odG1sI2luZGV4LWF0b2xsLTE0Ij48Y29kZT5hdG9sbDwvY29kZT48L2E+OiA8YSBocmVmPSJhdG9sbC5odG1sI2F0b2xsIj5hdG9sbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImJjbXAuaHRtbCNpbmRleC1iY21wLTM3MyI+PGNvZGU+YmNtcDwvY29kZT48L2E+OiA8YSBocmVmPSJiY21wLmh0bWwjYmNtcCI+YmNtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImJzZWFyY2guaHRtbCNpbmRleC1ic2VhcmNoLTE2Ij48Y29kZT5ic2VhcmNoPC9jb2RlPjwvYT46IDxhIGhyZWY9ImJzZWFyY2guaHRtbCNic2VhcmNoIj5ic2VhcmNoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYnplcm8uaHRtbCNpbmRleC1iemVyby0zNzQiPjxjb2RlPmJ6ZXJvPC9jb2RlPjwvYT46IDxhIGhyZWY9ImJ6ZXJvLmh0bWwjYnplcm8iPmJ6ZXJvPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2FsbG9jLmh0bWwjaW5kZXgtY2FsbG9jLTE3Ij48Y29kZT5jYWxsb2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2FsbG9jLmh0bWwjY2FsbG9jIj5jYWxsb2M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjbGVhcmVyci5odG1sI2luZGV4LWNsZWFyZXJyLTE0NSI+PGNvZGU+Y2xlYXJlcnI8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2xlYXJlcnIuaHRtbCNjbGVhcmVyciI+Y2xlYXJlcnI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjbG9jay5odG1sI2luZGV4LWNsb2NrLTQzMCI+PGNvZGU+Y2xvY2s8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2xvY2suaHRtbCNjbG9jayI+Y2xvY2s8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHVicy5odG1sI2luZGV4LWNsb3NlLTQ2NyI+PGNvZGU+Y2xvc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjdGltZS5odG1sI2luZGV4LWN0aW1lLTQzMSI+PGNvZGU+Y3RpbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iY3RpbWUuaHRtbCNjdGltZSI+Y3RpbWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjdGltZS5odG1sI2luZGV4LWN0aW1lXzAwNWZyLTQzMiI+PGNvZGU+Y3RpbWVfcjwvY29kZT48L2E+OiA8YSBocmVmPSJjdGltZS5odG1sI2N0aW1lIj5jdGltZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImRpZmZ0aW1lLmh0bWwjaW5kZXgtZGlmZnRpbWUtNDMzIj48Y29kZT5kaWZmdGltZTwvY29kZT48L2E+OiA8YSBocmVmPSJkaWZmdGltZS5odG1sI2RpZmZ0aW1lIj5kaWZmdGltZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImRpcHJpbnRmLmh0bWwjaW5kZXgtZGlwcmludGYtMTQ2Ij48Y29kZT5kaXByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJkaXByaW50Zi5odG1sI2RpcHJpbnRmIj5kaXByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImRpdi5odG1sI2luZGV4LWRpdi0xOSI+PGNvZGU+ZGl2PC9jb2RlPjwvYT46IDxhIGhyZWY9ImRpdi5odG1sI2RpdiI+ZGl2PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZHByaW50Zi5odG1sI2luZGV4LWRwcmludGYtMTUwIj48Y29kZT5kcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImRwcmludGYuaHRtbCNkcHJpbnRmIj5kcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmFuZDQ4Lmh0bWwjaW5kZXgtZHJhbmQ0OC03MCI+PGNvZGU+ZHJhbmQ0ODwvY29kZT48L2E+OiA8YSBocmVmPSJyYW5kNDguaHRtbCNyYW5kNDgiPnJhbmQ0ODwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImVjdnQuaHRtbCNpbmRleC1lY3Z0LTIwIj48Y29kZT5lY3Z0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImVjdnQuaHRtbCNlY3Z0Ij5lY3Z0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZWN2dGJ1Zi5odG1sI2luZGV4LWVjdnRidWYtMjYiPjxjb2RlPmVjdnRidWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iZWN2dGJ1Zi5odG1sI2VjdnRidWYiPmVjdnRidWY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJlY3Z0Lmh0bWwjaW5kZXgtZWN2dGYtMjEiPjxjb2RlPmVjdnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImVjdnQuaHRtbCNlY3Z0Ij5lY3Z0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3R1YnMuaHRtbCNpbmRleC1lbnZpcm9uLTQ2OCI+PGNvZGU+ZW52aXJvbjwvY29kZT48L2E+OiA8YSBocmVmPSJTdHVicy5odG1sI1N0dWJzIj5TdHViczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdldGVudi5odG1sI2luZGV4LWVudmlyb24tMzIiPjxjb2RlPmVudmlyb248L2NvZGU+PC9hPjogPGEgaHJlZj0iZ2V0ZW52Lmh0bWwjZ2V0ZW52Ij5nZXRlbnY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyYW5kNDguaHRtbCNpbmRleC1lcmFuZDQ4LTcxIj48Y29kZT5lcmFuZDQ4PC9jb2RlPjwvYT46IDxhIGhyZWY9InJhbmQ0OC5odG1sI3JhbmQ0OCI+cmFuZDQ4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3R1YnMuaHRtbCNpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVycm5vXzAwN2QtZ2xvYmFsLXZzLW1hY3JvLTQ2NSI+PGNvZGU+ZXJybm88L2NvZGU+IGdsb2JhbCB2cyBtYWNybzwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3R1YnMuaHRtbCNpbmRleC1leGVjdmUtNDY5Ij48Y29kZT5leGVjdmU8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJleGl0Lmh0bWwjaW5kZXgtZXhpdC0zMCI+PGNvZGU+ZXhpdDwvY29kZT48L2E+OiA8YSBocmVmPSJleGl0Lmh0bWwjZXhpdCI+ZXhpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNpbmRleC1leHRyYS1hcmd1bWVudF8wMDJjLXJlZW50cmFudC1mbnMtNDU1Ij5leHRyYSBhcmd1bWVudCwgcmVlbnRyYW50IGZuczwvYT46IDxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij5SZWVudHJhbmN5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmNsb3NlLmh0bWwjaW5kZXgtZmNsb3NlLTE1NCI+PGNvZGU+ZmNsb3NlPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZjbG9zZS5odG1sI2ZjbG9zZSI+ZmNsb3NlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmNsb3NlYWxsLmh0bWwjaW5kZXgtZmNsb3NlYWxsLTE1NiI+PGNvZGU+ZmNsb3NlYWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZjbG9zZWFsbC5odG1sI2ZjbG9zZWFsbCI+ZmNsb3NlYWxsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZWN2dC5odG1sI2luZGV4LWZjdnQtMjIiPjxjb2RlPmZjdnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iZWN2dC5odG1sI2VjdnQiPmVjdnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJlY3Z0YnVmLmh0bWwjaW5kZXgtZmN2dGJ1Zi0yNyI+PGNvZGU+ZmN2dGJ1ZjwvY29kZT48L2E+OiA8YSBocmVmPSJlY3Z0YnVmLmh0bWwjZWN2dGJ1ZiI+ZWN2dGJ1ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImVjdnQuaHRtbCNpbmRleC1mY3Z0Zi0yMyI+PGNvZGU+ZmN2dGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iZWN2dC5odG1sI2VjdnQiPmVjdnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZG9wZW4uaHRtbCNpbmRleC1mZG9wZW4tMTU4Ij48Y29kZT5mZG9wZW48L2NvZGU+PC9hPjogPGEgaHJlZj0iZmRvcGVuLmh0bWwjZmRvcGVuIj5mZG9wZW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZW9mLmh0bWwjaW5kZXgtZmVvZi0xNjAiPjxjb2RlPmZlb2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmVvZi5odG1sI2Zlb2YiPmZlb2Y8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZXJyb3IuaHRtbCNpbmRleC1mZXJyb3ItMTYxIj48Y29kZT5mZXJyb3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmVycm9yLmh0bWwjZmVycm9yIj5mZXJyb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZmx1c2guaHRtbCNpbmRleC1mZmx1c2gtMTYyIj48Y29kZT5mZmx1c2g8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmZsdXNoLmh0bWwjZmZsdXNoIj5mZmx1c2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZnMuaHRtbCNpbmRleC1mZnMtNDU4Ij48Y29kZT5mZnM8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmZzLmh0bWwjZmZzIj5mZnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZ2V0Yy5odG1sI2luZGV4LWZnZXRjLTE2NCI+PGNvZGU+ZmdldGM8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmdldGMuaHRtbCNmZ2V0YyI+ZmdldGM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZ2V0cG9zLmh0bWwjaW5kZXgtZmdldHBvcy0xNjYiPjxjb2RlPmZnZXRwb3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmdldHBvcy5odG1sI2ZnZXRwb3MiPmZnZXRwb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZ2V0cy5odG1sI2luZGV4LWZnZXRzLTE2OCI+PGNvZGU+ZmdldHM8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmdldHMuaHRtbCNmZ2V0cyI+ZmdldHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZ2V0d2MuaHRtbCNpbmRleC1mZ2V0d2MtMTcwIj48Y29kZT5mZ2V0d2M8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmdldHdjLmh0bWwjZmdldHdjIj5mZ2V0d2M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmZ2V0d3MuaHRtbCNpbmRleC1mZ2V0d3MtMTc0Ij48Y29kZT5mZ2V0d3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmdldHdzLmh0bWwjZmdldHdzIj5mZ2V0d3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmaWxlbm8uaHRtbCNpbmRleC1maWxlbm8tMTc2Ij48Y29kZT5maWxlbm88L2NvZGU+PC9hPjogPGEgaHJlZj0iZmlsZW5vLmh0bWwjZmlsZW5vIj5maWxlbm88L2E+PC9saT4KKzxsaT48YSBocmVmPSJzaXByaW50Zi5odG1sI2luZGV4LWZpcHJpbnRmLTI2NyI+PGNvZGU+ZmlwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2lwcmludGYuaHRtbCNzaXByaW50ZiI+c2lwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzaXNjYW5mLmh0bWwjaW5kZXgtZmlzY2FuZi0yODEiPjxjb2RlPmZpc2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2lzY2FuZi5odG1sI3Npc2NhbmYiPnNpc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmbWVtb3Blbi5odG1sI2luZGV4LWZtZW1vcGVuLTE3NyI+PGNvZGU+Zm1lbW9wZW48L2NvZGU+PC9hPjogPGEgaHJlZj0iZm1lbW9wZW4uaHRtbCNmbWVtb3BlbiI+Zm1lbW9wZW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJmb3Blbi5odG1sI2luZGV4LWZvcGVuLTE3OCI+PGNvZGU+Zm9wZW48L2NvZGU+PC9hPjogPGEgaHJlZj0iZm9wZW4uaHRtbCNmb3BlbiI+Zm9wZW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJmb3BlbmNvb2tpZS5odG1sI2luZGV4LWZvcGVuY29va2llLTE4MCI+PGNvZGU+Zm9wZW5jb29raWU8L2NvZGU+PC9hPjogPGEgaHJlZj0iZm9wZW5jb29raWUuaHRtbCNmb3BlbmNvb2tpZSI+Zm9wZW5jb29raWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHVicy5odG1sI2luZGV4LWZvcmstNDcwIj48Y29kZT5mb3JrPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3ByaW50Zi5odG1sI2luZGV4LWZwcmludGYtMjg1Ij48Y29kZT5mcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InNwcmludGYuaHRtbCNzcHJpbnRmIj5zcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnB1cmdlLmh0bWwjaW5kZXgtZnB1cmdlLTE4MSI+PGNvZGU+ZnB1cmdlPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwdXJnZS5odG1sI2ZwdXJnZSI+ZnB1cmdlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnB1dGMuaHRtbCNpbmRleC1mcHV0Yy0xODQiPjxjb2RlPmZwdXRjPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwdXRjLmh0bWwjZnB1dGMiPmZwdXRjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnB1dHMuaHRtbCNpbmRleC1mcHV0cy0xODYiPjxjb2RlPmZwdXRzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwdXRzLmh0bWwjZnB1dHMiPmZwdXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnB1dHdjLmh0bWwjaW5kZXgtZnB1dHdjLTE4OCI+PGNvZGU+ZnB1dHdjPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwdXR3Yy5odG1sI2ZwdXR3YyI+ZnB1dHdjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnB1dHdzLmh0bWwjaW5kZXgtZnB1dHdzLTE5MiI+PGNvZGU+ZnB1dHdzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwdXR3cy5odG1sI2ZwdXR3cyI+ZnB1dHdzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnJlYWQuaHRtbCNpbmRleC1mcmVhZC0xOTQiPjxjb2RlPmZyZWFkPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZyZWFkLmh0bWwjZnJlYWQiPmZyZWFkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWFsbG9jLmh0bWwjaW5kZXgtZnJlZS00MCI+PGNvZGU+ZnJlZTwvY29kZT48L2E+OiA8YSBocmVmPSJtYWxsb2MuaHRtbCNtYWxsb2MiPm1hbGxvYzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZyZW9wZW4uaHRtbCNpbmRleC1mcmVvcGVuLTE5NiI+PGNvZGU+ZnJlb3BlbjwvY29kZT48L2E+OiA8YSBocmVmPSJmcmVvcGVuLmh0bWwjZnJlb3BlbiI+ZnJlb3BlbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZ1bm9wZW4uaHRtbCNpbmRleC1mcm9wZW4tMjA5Ij48Y29kZT5mcm9wZW48L2NvZGU+PC9hPjogPGEgaHJlZj0iZnVub3Blbi5odG1sI2Z1bm9wZW4iPmZ1bm9wZW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJzc2NhbmYuaHRtbCNpbmRleC1mc2NhbmYtMjk5Ij48Y29kZT5mc2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3NjYW5mLmh0bWwjc3NjYW5mIj5zc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmc2Vlay5odG1sI2luZGV4LWZzZWVrLTE5OCI+PGNvZGU+ZnNlZWs8L2NvZGU+PC9hPjogPGEgaHJlZj0iZnNlZWsuaHRtbCNmc2VlayI+ZnNlZWs8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmc2Vlay5odG1sI2luZGV4LWZzZWVrby0xOTkiPjxjb2RlPmZzZWVrbzwvY29kZT48L2E+OiA8YSBocmVmPSJmc2Vlay5odG1sI2ZzZWVrIj5mc2VlazwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZzZXRwb3MuaHRtbCNpbmRleC1mc2V0cG9zLTIwMiI+PGNvZGU+ZnNldHBvczwvY29kZT48L2E+OiA8YSBocmVmPSJmc2V0cG9zLmh0bWwjZnNldHBvcyI+ZnNldHBvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0dWJzLmh0bWwjaW5kZXgtZnN0YXQtNDcxIj48Y29kZT5mc3RhdDwvY29kZT48L2E+OiA8YSBocmVmPSJTdHVicy5odG1sI1N0dWJzIj5TdHViczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZ0ZWxsLmh0bWwjaW5kZXgtZnRlbGwtMjA0Ij48Y29kZT5mdGVsbDwvY29kZT48L2E+OiA8YSBocmVmPSJmdGVsbC5odG1sI2Z0ZWxsIj5mdGVsbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZ0ZWxsLmh0bWwjaW5kZXgtZnRlbGxvLTIwNSI+PGNvZGU+ZnRlbGxvPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZ0ZWxsLmh0bWwjZnRlbGwiPmZ0ZWxsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnVub3Blbi5odG1sI2luZGV4LWZ1bm9wZW4tMjA4Ij48Y29kZT5mdW5vcGVuPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZ1bm9wZW4uaHRtbCNmdW5vcGVuIj5mdW5vcGVuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZndpZGUuaHRtbCNpbmRleC1md2lkZS0yMTEiPjxjb2RlPmZ3aWRlPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZ3aWRlLmh0bWwjZndpZGUiPmZ3aWRlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnVub3Blbi5odG1sI2luZGV4LWZ3b3Blbi0yMTAiPjxjb2RlPmZ3b3BlbjwvY29kZT48L2E+OiA8YSBocmVmPSJmdW5vcGVuLmh0bWwjZnVub3BlbiI+ZnVub3BlbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN3cHJpbnRmLmh0bWwjaW5kZXgtZndwcmludGYtMzAzIj48Y29kZT5md3ByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJzd3ByaW50Zi5odG1sI3N3cHJpbnRmIj5zd3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZ3cml0ZS5odG1sI2luZGV4LWZ3cml0ZS0yMTMiPjxjb2RlPmZ3cml0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJmd3JpdGUuaHRtbCNmd3JpdGUiPmZ3cml0ZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN3c2NhbmYuaHRtbCNpbmRleC1md3NjYW5mLTMxMSI+PGNvZGU+ZndzY2FuZjwvY29kZT48L2E+OiA8YSBocmVmPSJzd3NjYW5mLmh0bWwjc3dzY2FuZiI+c3dzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imd2Y3Z0Lmh0bWwjaW5kZXgtZ2N2dC0yNCI+PGNvZGU+Z2N2dDwvY29kZT48L2E+OiA8YSBocmVmPSJndmN2dC5odG1sI2d2Y3Z0Ij5ndmN2dDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imd2Y3Z0Lmh0bWwjaW5kZXgtZ2N2dGYtMjUiPjxjb2RlPmdjdnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Imd2Y3Z0Lmh0bWwjZ3ZjdnQiPmd2Y3Z0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2V0Yy5odG1sI2luZGV4LWdldGMtMjE1Ij48Y29kZT5nZXRjPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdldGMuaHRtbCNnZXRjIj5nZXRjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2V0Y18wMDVmdW5sb2NrZWQuaHRtbCNpbmRleC1nZXRjXzAwNWZ1bmxvY2tlZC0yMTciPjxjb2RlPmdldGNfdW5sb2NrZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iZ2V0Y18wMDVmdW5sb2NrZWQuaHRtbCNnZXRjXzAwNWZ1bmxvY2tlZCI+Z2V0Y191bmxvY2tlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdldGNoYXIuaHRtbCNpbmRleC1nZXRjaGFyLTIxOSI+PGNvZGU+Z2V0Y2hhcjwvY29kZT48L2E+OiA8YSBocmVmPSJnZXRjaGFyLmh0bWwjZ2V0Y2hhciI+Z2V0Y2hhcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdldGNoYXJfMDA1ZnVubG9ja2VkLmh0bWwjaW5kZXgtZ2V0Y2hhcl8wMDVmdW5sb2NrZWQtMjIxIj48Y29kZT5nZXRjaGFyX3VubG9ja2VkPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdldGNoYXJfMDA1ZnVubG9ja2VkLmh0bWwjZ2V0Y2hhcl8wMDVmdW5sb2NrZWQiPmdldGNoYXJfdW5sb2NrZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJnZXRkZWxpbS5odG1sI2luZGV4LWdldGRlbGltLTIyMyI+PGNvZGU+Z2V0ZGVsaW08L2NvZGU+PC9hPjogPGEgaHJlZj0iZ2V0ZGVsaW0uaHRtbCNnZXRkZWxpbSI+Z2V0ZGVsaW08L2E+PC9saT4KKzxsaT48YSBocmVmPSJnZXRlbnYuaHRtbCNpbmRleC1nZXRlbnYtMzEiPjxjb2RlPmdldGVudjwvY29kZT48L2E+OiA8YSBocmVmPSJnZXRlbnYuaHRtbCNnZXRlbnYiPmdldGVudjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdldGxpbmUuaHRtbCNpbmRleC1nZXRsaW5lLTIyNCI+PGNvZGU+Z2V0bGluZTwvY29kZT48L2E+OiA8YSBocmVmPSJnZXRsaW5lLmh0bWwjZ2V0bGluZSI+Z2V0bGluZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0dWJzLmh0bWwjaW5kZXgtZ2V0cGlkLTQ3MiI+PGNvZGU+Z2V0cGlkPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2V0cy5odG1sI2luZGV4LWdldHMtMjI1Ij48Y29kZT5nZXRzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdldHMuaHRtbCNnZXRzIj5nZXRzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2V0dy5odG1sI2luZGV4LWdldHctMjI3Ij48Y29kZT5nZXR3PC9jb2RlPjwvYT46IDxhIGhyZWY9ImdldHcuaHRtbCNnZXR3Ij5nZXR3PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmdldHdjLmh0bWwjaW5kZXgtZ2V0d2MtMTcyIj48Y29kZT5nZXR3YzwvY29kZT48L2E+OiA8YSBocmVmPSJmZ2V0d2MuaHRtbCNmZ2V0d2MiPmZnZXR3YzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdldHdjaGFyLmh0bWwjaW5kZXgtZ2V0d2NoYXItMjI4Ij48Y29kZT5nZXR3Y2hhcjwvY29kZT48L2E+OiA8YSBocmVmPSJnZXR3Y2hhci5odG1sI2dldHdjaGFyIj5nZXR3Y2hhcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNpbmRleC1nbG9iYWwtcmVlbnRyYW5jeS1zdHJ1Y3R1cmUtNDUzIj5nbG9iYWwgcmVlbnRyYW5jeSBzdHJ1Y3R1cmU8L2E+OiA8YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjUmVlbnRyYW5jeSI+UmVlbnRyYW5jeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdtdGltZS5odG1sI2luZGV4LWdtdGltZS00MzQiPjxjb2RlPmdtdGltZTwvY29kZT48L2E+OiA8YSBocmVmPSJnbXRpbWUuaHRtbCNnbXRpbWUiPmdtdGltZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdtdGltZS5odG1sI2luZGV4LWdtdGltZV8wMDVmci00MzUiPjxjb2RlPmdtdGltZV9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdtdGltZS5odG1sI2dtdGltZSI+Z210aW1lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCNpbmRleC1pbmRleC0zNzUiPjxjb2RlPmluZGV4PC9jb2RlPjwvYT46IDxhIGhyZWY9ImluZGV4Lmh0bWwjaW5kZXgiPmluZGV4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lwcmludGYuaHRtbCNpbmRleC1pcHJpbnRmLTI2OSI+PGNvZGU+aXByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJzaXByaW50Zi5odG1sI3NpcHJpbnRmIj5zaXByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzYWxudW0uaHRtbCNpbmRleC1pc2FsbnVtLTExMCI+PGNvZGU+aXNhbG51bTwvY29kZT48L2E+OiA8YSBocmVmPSJpc2FsbnVtLmh0bWwjaXNhbG51bSI+aXNhbG51bTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzYWxwaGEuaHRtbCNpbmRleC1pc2FscGhhLTExMSI+PGNvZGU+aXNhbHBoYTwvY29kZT48L2E+OiA8YSBocmVmPSJpc2FscGhhLmh0bWwjaXNhbHBoYSI+aXNhbHBoYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzYXNjaWkuaHRtbCNpbmRleC1pc2FzY2lpLTExMiI+PGNvZGU+aXNhc2NpaTwvY29kZT48L2E+OiA8YSBocmVmPSJpc2FzY2lpLmh0bWwjaXNhc2NpaSI+aXNhc2NpaTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0dWJzLmh0bWwjaW5kZXgtaXNhdHR5LTQ3MyI+PGNvZGU+aXNhdHR5PC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lzY2FuZi5odG1sI2luZGV4LWlzY2FuZi0yNzkiPjxjb2RlPmlzY2FuZjwvY29kZT48L2E+OiA8YSBocmVmPSJzaXNjYW5mLmh0bWwjc2lzY2FuZiI+c2lzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzY250cmwuaHRtbCNpbmRleC1pc2NudHJsLTExMyI+PGNvZGU+aXNjbnRybDwvY29kZT48L2E+OiA8YSBocmVmPSJpc2NudHJsLmh0bWwjaXNjbnRybCI+aXNjbnRybDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzZGlnaXQuaHRtbCNpbmRleC1pc2RpZ2l0LTExNCI+PGNvZGU+aXNkaWdpdDwvY29kZT48L2E+OiA8YSBocmVmPSJpc2RpZ2l0Lmh0bWwjaXNkaWdpdCI+aXNkaWdpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzcHJpbnQuaHRtbCNpbmRleC1pc2dyYXBoLTExNyI+PGNvZGU+aXNncmFwaDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3ByaW50Lmh0bWwjaXNwcmludCI+aXNwcmludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzbG93ZXIuaHRtbCNpbmRleC1pc2xvd2VyLTExNSI+PGNvZGU+aXNsb3dlcjwvY29kZT48L2E+OiA8YSBocmVmPSJpc2xvd2VyLmh0bWwjaXNsb3dlciI+aXNsb3dlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzcHJpbnQuaHRtbCNpbmRleC1pc3ByaW50LTExNiI+PGNvZGU+aXNwcmludDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3ByaW50Lmh0bWwjaXNwcmludCI+aXNwcmludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzcHVuY3QuaHRtbCNpbmRleC1pc3B1bmN0LTExOCI+PGNvZGU+aXNwdW5jdDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3B1bmN0Lmh0bWwjaXNwdW5jdCI+aXNwdW5jdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzc3BhY2UuaHRtbCNpbmRleC1pc3NwYWNlLTExOSI+PGNvZGU+aXNzcGFjZTwvY29kZT48L2E+OiA8YSBocmVmPSJpc3NwYWNlLmh0bWwjaXNzcGFjZSI+aXNzcGFjZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzdXBwZXIuaHRtbCNpbmRleC1pc3VwcGVyLTEyMCI+PGNvZGU+aXN1cHBlcjwvY29kZT48L2E+OiA8YSBocmVmPSJpc3VwcGVyLmh0bWwjaXN1cHBlciI+aXN1cHBlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd2FsbnVtLmh0bWwjaW5kZXgtaXN3YWxudW0tMTI3Ij48Y29kZT5pc3dhbG51bTwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dhbG51bS5odG1sI2lzd2FsbnVtIj5pc3dhbG51bTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd2FscGhhLmh0bWwjaW5kZXgtaXN3YWxwaGEtMTI4Ij48Y29kZT5pc3dhbHBoYTwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dhbHBoYS5odG1sI2lzd2FscGhhIj5pc3dhbHBoYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd2JsYW5rLmh0bWwjaW5kZXgtaXN3YmxhbmstMTMwIj48Y29kZT5pc3dibGFuazwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dibGFuay5odG1sI2lzd2JsYW5rIj5pc3dibGFuazwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd2NudHJsLmh0bWwjaW5kZXgtaXN3Y250cmwtMTI5Ij48Y29kZT5pc3djbnRybDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3djbnRybC5odG1sI2lzd2NudHJsIj5pc3djbnRybDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd2N0eXBlLmh0bWwjaW5kZXgtaXN3Y3R5cGUtMTM5Ij48Y29kZT5pc3djdHlwZTwvY29kZT48L2E+OiA8YSBocmVmPSJpc3djdHlwZS5odG1sI2lzd2N0eXBlIj5pc3djdHlwZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd2RpZ2l0Lmh0bWwjaW5kZXgtaXN3ZGlnaXQtMTMxIj48Y29kZT5pc3dkaWdpdDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dkaWdpdC5odG1sI2lzd2RpZ2l0Ij5pc3dkaWdpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd2dyYXBoLmh0bWwjaW5kZXgtaXN3Z3JhcGgtMTMyIj48Y29kZT5pc3dncmFwaDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dncmFwaC5odG1sI2lzd2dyYXBoIj5pc3dncmFwaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd2xvd2VyLmh0bWwjaW5kZXgtaXN3bG93ZXItMTMzIj48Y29kZT5pc3dsb3dlcjwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dsb3dlci5odG1sI2lzd2xvd2VyIj5pc3dsb3dlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd3ByaW50Lmh0bWwjaW5kZXgtaXN3cHJpbnQtMTM0Ij48Y29kZT5pc3dwcmludDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dwcmludC5odG1sI2lzd3ByaW50Ij5pc3dwcmludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd3B1bmN0Lmh0bWwjaW5kZXgtaXN3cHVuY3QtMTM1Ij48Y29kZT5pc3dwdW5jdDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dwdW5jdC5odG1sI2lzd3B1bmN0Ij5pc3dwdW5jdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd3NwYWNlLmh0bWwjaW5kZXgtaXN3c3BhY2UtMTM2Ij48Y29kZT5pc3dzcGFjZTwvY29kZT48L2E+OiA8YSBocmVmPSJpc3dzcGFjZS5odG1sI2lzd3NwYWNlIj5pc3dzcGFjZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd3VwcGVyLmh0bWwjaW5kZXgtaXN3dXBwZXItMTM3Ij48Y29kZT5pc3d1cHBlcjwvY29kZT48L2E+OiA8YSBocmVmPSJpc3d1cHBlci5odG1sI2lzd3VwcGVyIj5pc3d1cHBlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imlzd3hkaWdpdC5odG1sI2luZGV4LWlzd3hkaWdpdC0xMzgiPjxjb2RlPmlzd3hkaWdpdDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3d4ZGlnaXQuaHRtbCNpc3d4ZGlnaXQiPmlzd3hkaWdpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzeGRpZ2l0Lmh0bWwjaW5kZXgtaXN4ZGlnaXQtMTIxIj48Y29kZT5pc3hkaWdpdDwvY29kZT48L2E+OiA8YSBocmVmPSJpc3hkaWdpdC5odG1sI2lzeGRpZ2l0Ij5pc3hkaWdpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJhbmQ0OC5odG1sI2luZGV4LWpyYW5kNDgtNzUiPjxjb2RlPmpyYW5kNDg8L2NvZGU+PC9hPjogPGEgaHJlZj0icmFuZDQ4Lmh0bWwjcmFuZDQ4Ij5yYW5kNDg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHVicy5odG1sI2luZGV4LWtpbGwtNDc0Ij48Y29kZT5raWxsPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYTY0bC5odG1sI2luZGV4LWw2NGEtMyI+PGNvZGU+bDY0YTwvY29kZT48L2E+OiA8YSBocmVmPSJhNjRsLmh0bWwjYTY0bCI+YTY0bDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImxhYnMuaHRtbCNpbmRleC1sYWJzLTMzIj48Y29kZT5sYWJzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImxhYnMuaHRtbCNsYWJzIj5sYWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmFuZDQ4Lmh0bWwjaW5kZXgtbGNvbmc0OC03OCI+PGNvZGU+bGNvbmc0ODwvY29kZT48L2E+OiA8YSBocmVmPSJyYW5kNDguaHRtbCNyYW5kNDgiPnJhbmQ0ODwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImxkaXYuaHRtbCNpbmRleC1sZGl2LTM0Ij48Y29kZT5sZGl2PC9jb2RlPjwvYT46IDxhIGhyZWY9ImxkaXYuaHRtbCNsZGl2Ij5sZGl2PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3R1YnMuaHRtbCNpbmRleC1saW5rLTQ3NSI+PGNvZGU+bGluazwvY29kZT48L2E+OiA8YSBocmVmPSJTdHVicy5odG1sI1N0dWJzIj5TdHViczwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN5c2NhbGxzLmh0bWwjaW5kZXgtbGlua2luZy10aGUtQy1saWJyYXJ5LTQ2MSI+bGlua2luZyB0aGUgQyBsaWJyYXJ5PC9hPjogPGEgaHJlZj0iU3lzY2FsbHMuaHRtbCNTeXNjYWxscyI+U3lzY2FsbHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjaW5kZXgtbGlzdC1vZi1yZWVudHJhbnQtZnVuY3Rpb25zLTQ1NiI+bGlzdCBvZiByZWVudHJhbnQgZnVuY3Rpb25zPC9hPjogPGEgaHJlZj0iUmVlbnRyYW5jeS5odG1sI1JlZW50cmFuY3kiPlJlZW50cmFuY3k8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsbGFicy5odG1sI2luZGV4LWxsYWJzLTM1Ij48Y29kZT5sbGFiczwvY29kZT48L2E+OiA8YSBocmVmPSJsbGFicy5odG1sI2xsYWJzIj5sbGFiczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImxsZGl2Lmh0bWwjaW5kZXgtbGxkaXYtMzYiPjxjb2RlPmxsZGl2PC9jb2RlPjwvYT46IDxhIGhyZWY9ImxsZGl2Lmh0bWwjbGxkaXYiPmxsZGl2PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2V0bG9jYWxlLmh0bWwjaW5kZXgtbG9jYWxlY29udi00NDYiPjxjb2RlPmxvY2FsZWNvbnY8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2V0bG9jYWxlLmh0bWwjc2V0bG9jYWxlIj5zZXRsb2NhbGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsb2NhbHRpbWUuaHRtbCNpbmRleC1sb2NhbHRpbWUtNDM2Ij48Y29kZT5sb2NhbHRpbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0ibG9jYWx0aW1lLmh0bWwjbG9jYWx0aW1lIj5sb2NhbHRpbWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsb2NhbHRpbWUuaHRtbCNpbmRleC1sb2NhbHRpbWVfMDA1ZnItNDM3Ij48Y29kZT5sb2NhbHRpbWVfcjwvY29kZT48L2E+OiA8YSBocmVmPSJsb2NhbHRpbWUuaHRtbCNsb2NhbHRpbWUiPmxvY2FsdGltZTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJhbmQ0OC5odG1sI2luZGV4LWxyYW5kNDgtNzIiPjxjb2RlPmxyYW5kNDg8L2NvZGU+PC9hPjogPGEgaHJlZj0icmFuZDQ4Lmh0bWwjcmFuZDQ4Ij5yYW5kNDg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHVicy5odG1sI2luZGV4LWxzZWVrLTQ3NiI+PGNvZGU+bHNlZWs8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYWxsaW5mby5odG1sI2luZGV4LW1hbGxpbmZvLTQ5Ij48Y29kZT5tYWxsaW5mbzwvY29kZT48L2E+OiA8YSBocmVmPSJtYWxsaW5mby5odG1sI21hbGxpbmZvIj5tYWxsaW5mbzwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1hbGxvYy5odG1sI2luZGV4LW1hbGxvYy0zNyI+PGNvZGU+bWFsbG9jPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+bWFsbG9jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWFsbGluZm8uaHRtbCNpbmRleC1tYWxsb2NfMDA1ZnN0YXRzLTUwIj48Y29kZT5tYWxsb2Nfc3RhdHM8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWFsbGluZm8uaHRtbCNtYWxsaW5mbyI+bWFsbGluZm88L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYWxsb2MuaHRtbCNpbmRleC1tYWxsb2NfMDA1ZnVzYWJsZV8wMDVmc2l6ZS00MiI+PGNvZGU+bWFsbG9jX3VzYWJsZV9zaXplPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+bWFsbG9jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWFsbGluZm8uaHRtbCNpbmRleC1tYWxsb3B0LTUxIj48Y29kZT5tYWxsb3B0PC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hbGxpbmZvLmh0bWwjbWFsbGluZm8iPm1hbGxpbmZvPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWJsZW4uaHRtbCNpbmRleC1tYmxlbi01NyI+PGNvZGU+bWJsZW48L2NvZGU+PC9hPjogPGEgaHJlZj0ibWJsZW4uaHRtbCNtYmxlbiI+bWJsZW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYnNydG93Y3MuaHRtbCNpbmRleC1tYnNucnRvd2NzLTYwIj48Y29kZT5tYnNucnRvd2NzPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1ic3J0b3djcy5odG1sI21ic3J0b3djcyI+bWJzcnRvd2NzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWJzcnRvd2NzLmh0bWwjaW5kZXgtbWJzcnRvd2NzLTU4Ij48Y29kZT5tYnNydG93Y3M8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWJzcnRvd2NzLmh0bWwjbWJzcnRvd2NzIj5tYnNydG93Y3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYnN0b3djcy5odG1sI2luZGV4LW1ic3Rvd2NzLTYyIj48Y29kZT5tYnN0b3djczwvY29kZT48L2E+OiA8YSBocmVmPSJtYnN0b3djcy5odG1sI21ic3Rvd2NzIj5tYnN0b3djczwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1idG93Yy5odG1sI2luZGV4LW1idG93Yy02MyI+PGNvZGU+bWJ0b3djPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1idG93Yy5odG1sI21idG93YyI+bWJ0b3djPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWFsbG9jLmh0bWwjaW5kZXgtbWVtYWxpZ24tNDEiPjxjb2RlPm1lbWFsaWduPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+bWFsbG9jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWVtY2hyLmh0bWwjaW5kZXgtbWVtY2hyLTM3NiI+PGNvZGU+bWVtY2hyPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1lbWNoci5odG1sI21lbWNociI+bWVtY2hyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWVtY21wLmh0bWwjaW5kZXgtbWVtY21wLTM3NyI+PGNvZGU+bWVtY21wPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1lbWNtcC5odG1sI21lbWNtcCI+bWVtY21wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWVtbWVtLmh0bWwjaW5kZXgtbWVtbWVtLTM3OCI+PGNvZGU+bWVtbWVtPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1lbW1lbS5odG1sI21lbW1lbSI+bWVtbWVtPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWVtbW92ZS5odG1sI2luZGV4LW1lbW1vdmUtMzc5Ij48Y29kZT5tZW1tb3ZlPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1lbW1vdmUuaHRtbCNtZW1tb3ZlIj5tZW1tb3ZlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWVtc2V0Lmh0bWwjaW5kZXgtbWVtc2V0LTM4MCI+PGNvZGU+bWVtc2V0PC9jb2RlPjwvYT46IDxhIGhyZWY9Im1lbXNldC5odG1sI21lbXNldCI+bWVtc2V0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWt0ZW1wLmh0bWwjaW5kZXgtbWtkdGVtcC0yMzEiPjxjb2RlPm1rZHRlbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIj5ta3RlbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJta3RlbXAuaHRtbCNpbmRleC1ta29zdGVtcC0yMzQiPjxjb2RlPm1rb3N0ZW1wPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1rdGVtcC5odG1sI21rdGVtcCI+bWt0ZW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWt0ZW1wLmh0bWwjaW5kZXgtbWtvc3RlbXBzLTIzNSI+PGNvZGU+bWtvc3RlbXBzPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1rdGVtcC5odG1sI21rdGVtcCI+bWt0ZW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWt0ZW1wLmh0bWwjaW5kZXgtbWtzdGVtcC0yMzIiPjxjb2RlPm1rc3RlbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIj5ta3RlbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJta3RlbXAuaHRtbCNpbmRleC1ta3N0ZW1wcy0yMzMiPjxjb2RlPm1rc3RlbXBzPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1rdGVtcC5odG1sI21rdGVtcCI+bWt0ZW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWt0ZW1wLmh0bWwjaW5kZXgtbWt0ZW1wLTIzMCI+PGNvZGU+bWt0ZW1wPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1rdGVtcC5odG1sI21rdGVtcCI+bWt0ZW1wPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWt0aW1lLmh0bWwjaW5kZXgtbWt0aW1lLTQzOCI+PGNvZGU+bWt0aW1lPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1rdGltZS5odG1sI21rdGltZSI+bWt0aW1lPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmFuZDQ4Lmh0bWwjaW5kZXgtbXJhbmQ0OC03NCI+PGNvZGU+bXJhbmQ0ODwvY29kZT48L2E+OiA8YSBocmVmPSJyYW5kNDguaHRtbCNyYW5kNDgiPnJhbmQ0ODwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJhbmQ0OC5odG1sI2luZGV4LW5yYW5kNDgtNzMiPjxjb2RlPm5yYW5kNDg8L2NvZGU+PC9hPjogPGEgaHJlZj0icmFuZDQ4Lmh0bWwjcmFuZDQ4Ij5yYW5kNDg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJvbl8wMDVmZXhpdC5odG1sI2luZGV4LW9uXzAwNWZleGl0LTY0Ij48Y29kZT5vbl9leGl0PC9jb2RlPjwvYT46IDxhIGhyZWY9Im9uXzAwNWZleGl0Lmh0bWwjb25fMDA1ZmV4aXQiPm9uX2V4aXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHVicy5odG1sI2luZGV4LW9wZW4tNDc3Ij48Y29kZT5vcGVuPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ib3Blbl8wMDVmbWVtc3RyZWFtLmh0bWwjaW5kZXgtb3Blbl8wMDVmbWVtc3RyZWFtLTI0MiI+PGNvZGU+b3Blbl9tZW1zdHJlYW08L2NvZGU+PC9hPjogPGEgaHJlZj0ib3Blbl8wMDVmbWVtc3RyZWFtLmh0bWwjb3Blbl8wMDVmbWVtc3RyZWFtIj5vcGVuX21lbXN0cmVhbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im9wZW5fMDA1Zm1lbXN0cmVhbS5odG1sI2luZGV4LW9wZW5fMDA1ZndtZW1zdHJlYW0tMjQzIj48Y29kZT5vcGVuX3dtZW1zdHJlYW08L2NvZGU+PC9hPjogPGEgaHJlZj0ib3Blbl8wMDVmbWVtc3RyZWFtLmh0bWwjb3Blbl8wMDVmbWVtc3RyZWFtIj5vcGVuX21lbXN0cmVhbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0dWJzLmh0bWwjaW5kZXgtT1MtaW50ZXJmYWNlLXN1YnJvdXRpbmVzLTQ2NCI+T1MgaW50ZXJmYWNlIHN1YnJvdXRpbmVzPC9hPjogPGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJwZXJyb3IuaHRtbCNpbmRleC1wZXJyb3ItMjQ0Ij48Y29kZT5wZXJyb3I8L2NvZGU+PC9hPjogPGEgaHJlZj0icGVycm9yLmh0bWwjcGVycm9yIj5wZXJyb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzcHJpbnRmLmh0bWwjaW5kZXgtcHJpbnRmLTI4NyI+PGNvZGU+cHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InNwcmludGYuaHRtbCNzcHJpbnRmIj5zcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icHNpZ25hbC5odG1sI2luZGV4LXBzaWduYWwtNDIzIj48Y29kZT5wc2lnbmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9InBzaWduYWwuaHRtbCNwc2lnbmFsIj5wc2lnbmFsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icHV0Yy5odG1sI2luZGV4LXB1dGMtMjQ2Ij48Y29kZT5wdXRjPC9jb2RlPjwvYT46IDxhIGhyZWY9InB1dGMuaHRtbCNwdXRjIj5wdXRjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icHV0Y18wMDVmdW5sb2NrZWQuaHRtbCNpbmRleC1wdXRjXzAwNWZ1bmxvY2tlZC0yNDgiPjxjb2RlPnB1dGNfdW5sb2NrZWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0icHV0Y18wMDVmdW5sb2NrZWQuaHRtbCNwdXRjXzAwNWZ1bmxvY2tlZCI+cHV0Y191bmxvY2tlZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InB1dGNoYXIuaHRtbCNpbmRleC1wdXRjaGFyLTI1MCI+PGNvZGU+cHV0Y2hhcjwvY29kZT48L2E+OiA8YSBocmVmPSJwdXRjaGFyLmh0bWwjcHV0Y2hhciI+cHV0Y2hhcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InB1dGNoYXJfMDA1ZnVubG9ja2VkLmh0bWwjaW5kZXgtcHV0Y2hhcl8wMDVmdW5sb2NrZWQtMjUyIj48Y29kZT5wdXRjaGFyX3VubG9ja2VkPC9jb2RlPjwvYT46IDxhIGhyZWY9InB1dGNoYXJfMDA1ZnVubG9ja2VkLmh0bWwjcHV0Y2hhcl8wMDVmdW5sb2NrZWQiPnB1dGNoYXJfdW5sb2NrZWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJwdXRzLmh0bWwjaW5kZXgtcHV0cy0yNTMiPjxjb2RlPnB1dHM8L2NvZGU+PC9hPjogPGEgaHJlZj0icHV0cy5odG1sI3B1dHMiPnB1dHM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJwdXR3Lmh0bWwjaW5kZXgtcHV0dy0yNTUiPjxjb2RlPnB1dHc8L2NvZGU+PC9hPjogPGEgaHJlZj0icHV0dy5odG1sI3B1dHciPnB1dHc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmcHV0d2MuaHRtbCNpbmRleC1wdXR3Yy0xOTAiPjxjb2RlPnB1dHdjPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwdXR3Yy5odG1sI2ZwdXR3YyI+ZnB1dHdjPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icHV0d2NoYXIuaHRtbCNpbmRleC1wdXR3Y2hhci0yNTYiPjxjb2RlPnB1dHdjaGFyPC9jb2RlPjwvYT46IDxhIGhyZWY9InB1dHdjaGFyLmh0bWwjcHV0d2NoYXIiPnB1dHdjaGFyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icXNvcnQuaHRtbCNpbmRleC1xc29ydC02NSI+PGNvZGU+cXNvcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0icXNvcnQuaHRtbCNxc29ydCI+cXNvcnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyYWlzZS5odG1sI2luZGV4LXJhaXNlLTQyNCI+PGNvZGU+cmFpc2U8L2NvZGU+PC9hPjogPGEgaHJlZj0icmFpc2UuaHRtbCNyYWlzZSI+cmFpc2U8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyYW5kLmh0bWwjaW5kZXgtcmFuZC02NiI+PGNvZGU+cmFuZDwvY29kZT48L2E+OiA8YSBocmVmPSJyYW5kLmh0bWwjcmFuZCI+cmFuZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJhbmQ0OC5odG1sI2luZGV4LXJhbmQ0OC02OSI+PGNvZGU+cmFuZDQ4PC9jb2RlPjwvYT46IDxhIGhyZWY9InJhbmQ0OC5odG1sI3JhbmQ0OCI+cmFuZDQ4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmFuZC5odG1sI2luZGV4LXJhbmRfMDA1ZnItNjgiPjxjb2RlPnJhbmRfcjwvY29kZT48L2E+OiA8YSBocmVmPSJyYW5kLmh0bWwjcmFuZCI+cmFuZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0dWJzLmh0bWwjaW5kZXgtcmVhZC00NzgiPjxjb2RlPnJlYWQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJtYWxsb2MuaHRtbCNpbmRleC1yZWFsbG9jLTM4Ij48Y29kZT5yZWFsbG9jPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+bWFsbG9jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWFsbG9jLmh0bWwjaW5kZXgtcmVhbGxvY2YtMzkiPjxjb2RlPnJlYWxsb2NmPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+bWFsbG9jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVlbnRyYW5jeS5odG1sI2luZGV4LXJlZW50XzAwMmVoLTQ1MSI+PGNvZGU+cmVlbnQuaDwvY29kZT48L2E+OiA8YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjUmVlbnRyYW5jeSI+UmVlbnRyYW5jeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNpbmRleC1yZWVudHJhbmN5LTQ0OSI+cmVlbnRyYW5jeTwvYT46IDxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij5SZWVudHJhbmN5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVlbnRyYW5jeS5odG1sI2luZGV4LXJlZW50cmFuY3ktc3RydWN0dXJlLTQ1MiI+cmVlbnRyYW5jeSBzdHJ1Y3R1cmU8L2E+OiA8YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjUmVlbnRyYW5jeSI+UmVlbnRyYW5jeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNpbmRleC1yZWVudHJhbnQtZnVuY3Rpb24tbGlzdC00NTciPnJlZW50cmFudCBmdW5jdGlvbiBsaXN0PC9hPjogPGEgaHJlZj0iUmVlbnRyYW5jeS5odG1sI1JlZW50cmFuY3kiPlJlZW50cmFuY3k8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZW1vdmUuaHRtbCNpbmRleC1yZW1vdmUtMjU4Ij48Y29kZT5yZW1vdmU8L2NvZGU+PC9hPjogPGEgaHJlZj0icmVtb3ZlLmh0bWwjcmVtb3ZlIj5yZW1vdmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZW5hbWUuaHRtbCNpbmRleC1yZW5hbWUtMjYwIj48Y29kZT5yZW5hbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0icmVuYW1lLmh0bWwjcmVuYW1lIj5yZW5hbWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZXdpbmQuaHRtbCNpbmRleC1yZXdpbmQtMjYxIj48Y29kZT5yZXdpbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0icmV3aW5kLmh0bWwjcmV3aW5kIj5yZXdpbmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyaW5kZXguaHRtbCNpbmRleC1yaW5kZXgtMzgxIj48Y29kZT5yaW5kZXg8L2NvZGU+PC9hPjogPGEgaHJlZj0icmluZGV4Lmh0bWwjcmluZGV4Ij5yaW5kZXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHVicy5odG1sI2luZGV4LXNicmstNDc5Ij48Y29kZT5zYnJrPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3NjYW5mLmh0bWwjaW5kZXgtc2NhbmYtMjk3Ij48Y29kZT5zY2FuZjwvY29kZT48L2E+OiA8YSBocmVmPSJzc2NhbmYuaHRtbCNzc2NhbmYiPnNzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJhbmQ0OC5odG1sI2luZGV4LXNlZWQ0OC03NyI+PGNvZGU+c2VlZDQ4PC9jb2RlPjwvYT46IDxhIGhyZWY9InJhbmQ0OC5odG1sI3JhbmQ0OCI+cmFuZDQ4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2V0YnVmLmh0bWwjaW5kZXgtc2V0YnVmLTI2MyI+PGNvZGU+c2V0YnVmPC9jb2RlPjwvYT46IDxhIGhyZWY9InNldGJ1Zi5odG1sI3NldGJ1ZiI+c2V0YnVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2V0YnVmZmVyLmh0bWwjaW5kZXgtc2V0YnVmZmVyLTI2NCI+PGNvZGU+c2V0YnVmZmVyPC9jb2RlPjwvYT46IDxhIGhyZWY9InNldGJ1ZmZlci5odG1sI3NldGJ1ZmZlciI+c2V0YnVmZmVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2V0bGluZWJ1Zi5odG1sI2luZGV4LXNldGxpbmVidWYtMjY1Ij48Y29kZT5zZXRsaW5lYnVmPC9jb2RlPjwvYT46IDxhIGhyZWY9InNldGxpbmVidWYuaHRtbCNzZXRsaW5lYnVmIj5zZXRsaW5lYnVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2V0bG9jYWxlLmh0bWwjaW5kZXgtc2V0bG9jYWxlLTQ0NSI+PGNvZGU+c2V0bG9jYWxlPC9jb2RlPjwvYT46IDxhIGhyZWY9InNldGxvY2FsZS5odG1sI3NldGxvY2FsZSI+c2V0bG9jYWxlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2V0dmJ1Zi5odG1sI2luZGV4LXNldHZidWYtMjY2Ij48Y29kZT5zZXR2YnVmPC9jb2RlPjwvYT46IDxhIGhyZWY9InNldHZidWYuaHRtbCNzZXR2YnVmIj5zZXR2YnVmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lnbmFsLmh0bWwjaW5kZXgtc2lnbmFsLTQyNiI+PGNvZGU+c2lnbmFsPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpZ25hbC5odG1sI3NpZ25hbCI+c2lnbmFsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lwcmludGYuaHRtbCNpbmRleC1zaXByaW50Zi0yNzEiPjxjb2RlPnNpcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiPnNpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lzY2FuZi5odG1sI2luZGV4LXNpc2NhbmYtMjgzIj48Y29kZT5zaXNjYW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpc2NhbmYuaHRtbCNzaXNjYW5mIj5zaXNjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2lwcmludGYuaHRtbCNpbmRleC1zbmlwcmludGYtMjczIj48Y29kZT5zbmlwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2lwcmludGYuaHRtbCNzaXByaW50ZiI+c2lwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzcHJpbnRmLmh0bWwjaW5kZXgtc25wcmludGYtMjkzIj48Y29kZT5zbnByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJzcHJpbnRmLmh0bWwjc3ByaW50ZiI+c3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNwcmludGYuaHRtbCNpbmRleC1zcHJpbnRmLTI5MSI+PGNvZGU+c3ByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJzcHJpbnRmLmh0bWwjc3ByaW50ZiI+c3ByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJhbmQuaHRtbCNpbmRleC1zcmFuZC02NyI+PGNvZGU+c3JhbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0icmFuZC5odG1sI3JhbmQiPnJhbmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyYW5kNDguaHRtbCNpbmRleC1zcmFuZDQ4LTc2Ij48Y29kZT5zcmFuZDQ4PC9jb2RlPjwvYT46IDxhIGhyZWY9InJhbmQ0OC5odG1sI3JhbmQ0OCI+cmFuZDQ4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3NjYW5mLmh0bWwjaW5kZXgtc3NjYW5mLTMwMSI+PGNvZGU+c3NjYW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9InNzY2FuZi5odG1sI3NzY2FuZiI+c3NjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3R1YnMuaHRtbCNpbmRleC1zdGF0LTQ4MCI+PGNvZGU+c3RhdDwvY29kZT48L2E+OiA8YSBocmVmPSJTdHVicy5odG1sI1N0dWJzIj5TdHViczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cGNweS5odG1sI2luZGV4LXN0cGNweS0zODIiPjxjb2RlPnN0cGNweTwvY29kZT48L2E+OiA8YSBocmVmPSJzdHBjcHkuaHRtbCNzdHBjcHkiPnN0cGNweTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cG5jcHkuaHRtbCNpbmRleC1zdHBuY3B5LTM4MyI+PGNvZGU+c3RwbmNweTwvY29kZT48L2E+OiA8YSBocmVmPSJzdHBuY3B5Lmh0bWwjc3RwbmNweSI+c3RwbmNweTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmNhc2VjbXAuaHRtbCNpbmRleC1zdHJjYXNlY21wLTM4NCI+PGNvZGU+c3RyY2FzZWNtcDwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJjYXNlY21wLmh0bWwjc3RyY2FzZWNtcCI+c3RyY2FzZWNtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmNhc2VzdHIuaHRtbCNpbmRleC1zdHJjYXNlc3RyLTM4NSI+PGNvZGU+c3RyY2FzZXN0cjwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJjYXNlc3RyLmh0bWwjc3RyY2FzZXN0ciI+c3RyY2FzZXN0cjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmNhdC5odG1sI2luZGV4LXN0cmNhdC0zODYiPjxjb2RlPnN0cmNhdDwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJjYXQuaHRtbCNzdHJjYXQiPnN0cmNhdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmNoci5odG1sI2luZGV4LXN0cmNoci0zODciPjxjb2RlPnN0cmNocjwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJjaHIuaHRtbCNzdHJjaHIiPnN0cmNocjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmNtcC5odG1sI2luZGV4LXN0cmNtcC0zODgiPjxjb2RlPnN0cmNtcDwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJjbXAuaHRtbCNzdHJjbXAiPnN0cmNtcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmNvbGwuaHRtbCNpbmRleC1zdHJjb2xsLTM4OSI+PGNvZGU+c3RyY29sbDwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJjb2xsLmh0bWwjc3RyY29sbCI+c3RyY29sbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmNweS5odG1sI2luZGV4LXN0cmNweS0zOTAiPjxjb2RlPnN0cmNweTwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJjcHkuaHRtbCNzdHJjcHkiPnN0cmNweTwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmNzcG4uaHRtbCNpbmRleC1zdHJjc3BuLTM5MSI+PGNvZGU+c3RyY3NwbjwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJjc3BuLmh0bWwjc3RyY3NwbiI+c3RyY3NwbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmVycm9yLmh0bWwjaW5kZXgtc3RyZXJyb3ItMzkyIj48Y29kZT5zdHJlcnJvcjwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJlcnJvci5odG1sI3N0cmVycm9yIj5zdHJlcnJvcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cmVycm9yXzAwNWZyLmh0bWwjaW5kZXgtc3RyZXJyb3JfMDA1ZnItMzkzIj48Y29kZT5zdHJlcnJvcl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9InN0cmVycm9yXzAwNWZyLmh0bWwjc3RyZXJyb3JfMDA1ZnIiPnN0cmVycm9yX3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJmdGltZS5odG1sI2luZGV4LXN0cmZ0aW1lLTQzOSI+PGNvZGU+c3RyZnRpbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RyZnRpbWUuaHRtbCNzdHJmdGltZSI+c3RyZnRpbWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJsZW4uaHRtbCNpbmRleC1zdHJsZW4tMzk0Ij48Y29kZT5zdHJsZW48L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RybGVuLmh0bWwjc3RybGVuIj5zdHJsZW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJsd3IuaHRtbCNpbmRleC1zdHJsd3ItMzk1Ij48Y29kZT5zdHJsd3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RybHdyLmh0bWwjc3RybHdyIj5zdHJsd3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJuY2FzZWNtcC5odG1sI2luZGV4LXN0cm5jYXNlY21wLTM5NiI+PGNvZGU+c3RybmNhc2VjbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RybmNhc2VjbXAuaHRtbCNzdHJuY2FzZWNtcCI+c3RybmNhc2VjbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJuY2F0Lmh0bWwjaW5kZXgtc3RybmNhdC0zOTciPjxjb2RlPnN0cm5jYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RybmNhdC5odG1sI3N0cm5jYXQiPnN0cm5jYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJuY21wLmh0bWwjaW5kZXgtc3RybmNtcC0zOTgiPjxjb2RlPnN0cm5jbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RybmNtcC5odG1sI3N0cm5jbXAiPnN0cm5jbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJuY3B5Lmh0bWwjaW5kZXgtc3RybmNweS0zOTkiPjxjb2RlPnN0cm5jcHk8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RybmNweS5odG1sI3N0cm5jcHkiPnN0cm5jcHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJubGVuLmh0bWwjaW5kZXgtc3Rybmxlbi00MDAiPjxjb2RlPnN0cm5sZW48L2NvZGU+PC9hPjogPGEgaHJlZj0ic3Rybmxlbi5odG1sI3N0cm5sZW4iPnN0cm5sZW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJwYnJrLmh0bWwjaW5kZXgtc3RycGJyay00MDEiPjxjb2RlPnN0cnBicms8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RycGJyay5odG1sI3N0cnBicmsiPnN0cnBicms8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJyY2hyLmh0bWwjaW5kZXgtc3RycmNoci00MDIiPjxjb2RlPnN0cnJjaHI8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RycmNoci5odG1sI3N0cnJjaHIiPnN0cnJjaHI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJ0b2suaHRtbCNpbmRleC1zdHJzZXAtNDA4Ij48Y29kZT5zdHJzZXA8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RydG9rLmh0bWwjc3RydG9rIj5zdHJ0b2s8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJzaWduYWwuaHRtbCNpbmRleC1zdHJzaWduYWwtNDAzIj48Y29kZT5zdHJzaWduYWw8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3Ryc2lnbmFsLmh0bWwjc3Ryc2lnbmFsIj5zdHJzaWduYWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJzcG4uaHRtbCNpbmRleC1zdHJzcG4tNDA0Ij48Y29kZT5zdHJzcG48L2NvZGU+PC9hPjogPGEgaHJlZj0ic3Ryc3BuLmh0bWwjc3Ryc3BuIj5zdHJzcG48L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJzdHIuaHRtbCNpbmRleC1zdHJzdHItNDA1Ij48Y29kZT5zdHJzdHI8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3Ryc3RyLmh0bWwjc3Ryc3RyIj5zdHJzdHI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJ0b2QuaHRtbCNpbmRleC1zdHJ0b2QtNzkiPjxjb2RlPnN0cnRvZDwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJ0b2QuaHRtbCNzdHJ0b2QiPnN0cnRvZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cnRvZC5odG1sI2luZGV4LXN0cnRvZi04MSI+PGNvZGU+c3RydG9mPC9jb2RlPjwvYT46IDxhIGhyZWY9InN0cnRvZC5odG1sI3N0cnRvZCI+c3RydG9kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RydG9rLmh0bWwjaW5kZXgtc3RydG9rLTQwNiI+PGNvZGU+c3RydG9rPC9jb2RlPjwvYT46IDxhIGhyZWY9InN0cnRvay5odG1sI3N0cnRvayI+c3RydG9rPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RydG9rLmh0bWwjaW5kZXgtc3RydG9rXzAwNWZyLTQwNyI+PGNvZGU+c3RydG9rX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RydG9rLmh0bWwjc3RydG9rIj5zdHJ0b2s8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJ0b2wuaHRtbCNpbmRleC1zdHJ0b2wtODIiPjxjb2RlPnN0cnRvbDwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJ0b2wuaHRtbCNzdHJ0b2wiPnN0cnRvbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cnRvbGwuaHRtbCNpbmRleC1zdHJ0b2xsLTg0Ij48Y29kZT5zdHJ0b2xsPC9jb2RlPjwvYT46IDxhIGhyZWY9InN0cnRvbGwuaHRtbCNzdHJ0b2xsIj5zdHJ0b2xsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3RydG91bC5odG1sI2luZGV4LXN0cnRvdWwtODYiPjxjb2RlPnN0cnRvdWw8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3RydG91bC5odG1sI3N0cnRvdWwiPnN0cnRvdWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzdHJ0b3VsbC5odG1sI2luZGV4LXN0cnRvdWxsLTg4Ij48Y29kZT5zdHJ0b3VsbDwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJ0b3VsbC5odG1sI3N0cnRvdWxsIj5zdHJ0b3VsbDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cnVwci5odG1sI2luZGV4LXN0cnVwci00MDkiPjxjb2RlPnN0cnVwcjwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJ1cHIuaHRtbCNzdHJ1cHIiPnN0cnVwcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InN0cnhmcm0uaHRtbCNpbmRleC1zdHJ4ZnJtLTQxMCI+PGNvZGU+c3RyeGZybTwvY29kZT48L2E+OiA8YSBocmVmPSJzdHJ4ZnJtLmh0bWwjc3RyeGZybSI+c3RyeGZybTwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0dWJzLmh0bWwjaW5kZXgtc3R1YnMtNDYyIj5zdHViczwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3R1YnMuaHRtbCNpbmRleC1zdWJyb3V0aW5lcy1mb3ItT1MtaW50ZXJmYWNlLTQ2MyI+c3Vicm91dGluZXMgZm9yIE9TIGludGVyZmFjZTwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3dwcmludGYuaHRtbCNpbmRleC1zd3ByaW50Zi0zMDciPjxjb2RlPnN3cHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InN3cHJpbnRmLmh0bWwjc3dwcmludGYiPnN3cHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3dzY2FuZi5odG1sI2luZGV4LXN3c2NhbmYtMzEzIj48Y29kZT5zd3NjYW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9InN3c2NhbmYuaHRtbCNzd3NjYW5mIj5zd3NjYW5mPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3lzdGVtLmh0bWwjaW5kZXgtc3lzdGVtLTEwNiI+PGNvZGU+c3lzdGVtPC9jb2RlPjwvYT46IDxhIGhyZWY9InN5c3RlbS5odG1sI3N5c3RlbSI+c3lzdGVtPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idG1wbmFtLmh0bWwjaW5kZXgtdGVtcG5hbS0zMTgiPjxjb2RlPnRlbXBuYW08L2NvZGU+PC9hPjogPGEgaHJlZj0idG1wbmFtLmh0bWwjdG1wbmFtIj50bXBuYW08L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0aW1lLmh0bWwjaW5kZXgtdGltZS00NDAiPjxjb2RlPnRpbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0idGltZS5odG1sI3RpbWUiPnRpbWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHVicy5odG1sI2luZGV4LXRpbWVzLTQ4MSI+PGNvZGU+dGltZXM8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0bXBmaWxlLmh0bWwjaW5kZXgtdG1wZmlsZS0zMTUiPjxjb2RlPnRtcGZpbGU8L2NvZGU+PC9hPjogPGEgaHJlZj0idG1wZmlsZS5odG1sI3RtcGZpbGUiPnRtcGZpbGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0bXBuYW0uaHRtbCNpbmRleC10bXBuYW0tMzE3Ij48Y29kZT50bXBuYW08L2NvZGU+PC9hPjogPGEgaHJlZj0idG1wbmFtLmh0bWwjdG1wbmFtIj50bXBuYW08L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0b2FzY2lpLmh0bWwjaW5kZXgtdG9hc2NpaS0xMjIiPjxjb2RlPnRvYXNjaWk8L2NvZGU+PC9hPjogPGEgaHJlZj0idG9hc2NpaS5odG1sI3RvYXNjaWkiPnRvYXNjaWk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0b2xvd2VyLmh0bWwjaW5kZXgtdG9sb3dlci0xMjMiPjxjb2RlPnRvbG93ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0idG9sb3dlci5odG1sI3RvbG93ZXIiPnRvbG93ZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0b3VwcGVyLmh0bWwjaW5kZXgtdG91cHBlci0xMjUiPjxjb2RlPnRvdXBwZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0idG91cHBlci5odG1sI3RvdXBwZXIiPnRvdXBwZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0b3djdHJhbnMuaHRtbCNpbmRleC10b3djdHJhbnMtMTQzIj48Y29kZT50b3djdHJhbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0idG93Y3RyYW5zLmh0bWwjdG93Y3RyYW5zIj50b3djdHJhbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0b3dsb3dlci5odG1sI2luZGV4LXRvd2xvd2VyLTE0MSI+PGNvZGU+dG93bG93ZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0idG93bG93ZXIuaHRtbCN0b3dsb3dlciI+dG93bG93ZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0b3d1cHBlci5odG1sI2luZGV4LXRvd3VwcGVyLTE0MiI+PGNvZGU+dG93dXBwZXI8L2NvZGU+PC9hPjogPGEgaHJlZj0idG93dXBwZXIuaHRtbCN0b3d1cHBlciI+dG93dXBwZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ0enNldC5odG1sI2luZGV4LXR6c2V0LTQ0MyI+PGNvZGU+dHpzZXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0idHpzZXQuaHRtbCN0enNldCI+dHpzZXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ1bmN0cmwuaHRtbCNpbmRleC11bmN0cmwtNDU5Ij48Y29kZT51bmN0cmw8L2NvZGU+PC9hPjogPGEgaHJlZj0idW5jdHJsLmh0bWwjdW5jdHJsIj51bmN0cmw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ1bmN0cmwuaHRtbCNpbmRleC11bmN0cmxsZW4tNDYwIj48Y29kZT51bmN0cmxsZW48L2NvZGU+PC9hPjogPGEgaHJlZj0idW5jdHJsLmh0bWwjdW5jdHJsIj51bmN0cmw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ1bmdldGMuaHRtbCNpbmRleC11bmdldGMtMzIxIj48Y29kZT51bmdldGM8L2NvZGU+PC9hPjogPGEgaHJlZj0idW5nZXRjLmh0bWwjdW5nZXRjIj51bmdldGM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ1bmdldHdjLmh0bWwjaW5kZXgtdW5nZXR3Yy0zMjMiPjxjb2RlPnVuZ2V0d2M8L2NvZGU+PC9hPjogPGEgaHJlZj0idW5nZXR3Yy5odG1sI3VuZ2V0d2MiPnVuZ2V0d2M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJTdHVicy5odG1sI2luZGV4LXVubGluay00ODIiPjxjb2RlPnVubGluazwvY29kZT48L2E+OiA8YSBocmVmPSJTdHVicy5odG1sI1N0dWJzIj5TdHViczwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZhXzAwNWZhbGlzdC5odG1sI2luZGV4LXZhXzAwNWZhbGlzdC01MDAiPjxjb2RlPnZhX2FsaXN0PC9jb2RlPjwvYT46IDxhIGhyZWY9InZhXzAwNWZhbGlzdC5odG1sI3ZhXzAwNWZhbGlzdCI+dmFfYWxpc3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2YV8wMDVmYXJnXzAwMmR0cmFkLmh0bWwjaW5kZXgtdmFfMDA1ZmFyZy01MDMiPjxjb2RlPnZhX2FyZzwvY29kZT48L2E+OiA8YSBocmVmPSJ2YV8wMDVmYXJnXzAwMmR0cmFkLmh0bWwjdmFfMDA1ZmFyZ18wMDJkdHJhZCI+dmFfYXJnLXRyYWQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2YV8wMDVmYXJnLmh0bWwjaW5kZXgtdmFfMDA1ZmFyZy00OTgiPjxjb2RlPnZhX2FyZzwvY29kZT48L2E+OiA8YSBocmVmPSJ2YV8wMDVmYXJnLmh0bWwjdmFfMDA1ZmFyZyI+dmFfYXJnPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmFfMDA1ZmFsaXN0Lmh0bWwjaW5kZXgtdmFfMDA1ZmRjbC01MDEiPjxjb2RlPnZhX2RjbDwvY29kZT48L2E+OiA8YSBocmVmPSJ2YV8wMDVmYWxpc3QuaHRtbCN2YV8wMDVmYWxpc3QiPnZhX2FsaXN0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmFfMDA1ZmVuZF8wMDJkdHJhZC5odG1sI2luZGV4LXZhXzAwNWZlbmQtNTA0Ij48Y29kZT52YV9lbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0idmFfMDA1ZmVuZF8wMDJkdHJhZC5odG1sI3ZhXzAwNWZlbmRfMDAyZHRyYWQiPnZhX2VuZC10cmFkPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmFfMDA1ZmVuZC5odG1sI2luZGV4LXZhXzAwNWZlbmQtNDk5Ij48Y29kZT52YV9lbmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0idmFfMDA1ZmVuZC5odG1sI3ZhXzAwNWZlbmQiPnZhX2VuZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZhXzAwNWZzdGFydF8wMDJkdHJhZC5odG1sI2luZGV4LXZhXzAwNWZzdGFydC01MDIiPjxjb2RlPnZhX3N0YXJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9InZhXzAwNWZzdGFydF8wMDJkdHJhZC5odG1sI3ZhXzAwNWZzdGFydF8wMDJkdHJhZCI+dmFfc3RhcnQtdHJhZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZhXzAwNWZzdGFydC5odG1sI2luZGV4LXZhXzAwNWZzdGFydC00OTciPjxjb2RlPnZhX3N0YXJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9InZhXzAwNWZzdGFydC5odG1sI3ZhXzAwNWZzdGFydCI+dmFfc3RhcnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2aXByaW50Zi5odG1sI2luZGV4LXZhc2lwcmludGYtMzYzIj48Y29kZT52YXNpcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmlwcmludGYuaHRtbCNpbmRleC12YXNuaXByaW50Zi0zNjUiPjxjb2RlPnZhc25pcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmZwcmludGYuaHRtbCNpbmRleC12YXNucHJpbnRmLTMzNSI+PGNvZGU+dmFzbnByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJ2ZnByaW50Zi5odG1sI3ZmcHJpbnRmIj52ZnByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZmcHJpbnRmLmh0bWwjaW5kZXgtdmFzcHJpbnRmLTMzMyI+PGNvZGU+dmFzcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InZmcHJpbnRmLmh0bWwjdmZwcmludGYiPnZmcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZGlwcmludGYuaHRtbCNpbmRleC12ZGlwcmludGYtMTQ4Ij48Y29kZT52ZGlwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iZGlwcmludGYuaHRtbCNkaXByaW50ZiI+ZGlwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJkcHJpbnRmLmh0bWwjaW5kZXgtdmRwcmludGYtMTUyIj48Y29kZT52ZHByaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJkcHJpbnRmLmh0bWwjZHByaW50ZiI+ZHByaW50ZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZpcHJpbnRmLmh0bWwjaW5kZXgtdmZpcHJpbnRmLTM1NyI+PGNvZGU+dmZpcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmlzY2FuZi5odG1sI2luZGV4LXZmaXNjYW5mLTM2OSI+PGNvZGU+dmZpc2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmlzY2FuZi5odG1sI3Zpc2NhbmYiPnZpc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnByaW50Zi5odG1sI2luZGV4LXZmcHJpbnRmLTMyNSI+PGNvZGU+dmZwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZwcmludGYuaHRtbCN2ZnByaW50ZiI+dmZwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnNjYW5mLmh0bWwjaW5kZXgtdmZzY2FuZi0zMzciPjxjb2RlPnZmc2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZzY2FuZi5odG1sI3Zmc2NhbmYiPnZmc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndwcmludGYuaHRtbCNpbmRleC12ZndwcmludGYtMzQzIj48Y29kZT52ZndwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZ3cHJpbnRmLmh0bWwjdmZ3cHJpbnRmIj52ZndwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndzY2FuZi5odG1sI2luZGV4LXZmd3NjYW5mLTM0OSI+PGNvZGU+dmZ3c2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZ3c2NhbmYuaHRtbCN2ZndzY2FuZiI+dmZ3c2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2aXByaW50Zi5odG1sI2luZGV4LXZpcHJpbnRmLTM1NSI+PGNvZGU+dmlwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmlwcmludGYuaHRtbCN2aXByaW50ZiI+dmlwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2aXNjYW5mLmh0bWwjaW5kZXgtdmlzY2FuZi0zNjciPjxjb2RlPnZpc2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmlzY2FuZi5odG1sI3Zpc2NhbmYiPnZpc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnByaW50Zi5odG1sI2luZGV4LXZwcmludGYtMzI3Ij48Y29kZT52cHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InZmcHJpbnRmLmh0bWwjdmZwcmludGYiPnZmcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmZzY2FuZi5odG1sI2luZGV4LXZzY2FuZi0zMzkiPjxjb2RlPnZzY2FuZjwvY29kZT48L2E+OiA8YSBocmVmPSJ2ZnNjYW5mLmh0bWwjdmZzY2FuZiI+dmZzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InZpcHJpbnRmLmh0bWwjaW5kZXgtdnNpcHJpbnRmLTM1OSI+PGNvZGU+dnNpcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmlzY2FuZi5odG1sI2luZGV4LXZzaXNjYW5mLTM3MSI+PGNvZGU+dnNpc2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmlzY2FuZi5odG1sI3Zpc2NhbmYiPnZpc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2aXByaW50Zi5odG1sI2luZGV4LXZzbmlwcmludGYtMzYxIj48Y29kZT52c25pcHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmZwcmludGYuaHRtbCNpbmRleC12c25wcmludGYtMzMxIj48Y29kZT52c25wcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZwcmludGYuaHRtbCN2ZnByaW50ZiI+dmZwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnByaW50Zi5odG1sI2luZGV4LXZzcHJpbnRmLTMyOSI+PGNvZGU+dnNwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZwcmludGYuaHRtbCN2ZnByaW50ZiI+dmZwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZnNjYW5mLmh0bWwjaW5kZXgtdnNzY2FuZi0zNDEiPjxjb2RlPnZzc2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZzY2FuZi5odG1sI3Zmc2NhbmYiPnZmc2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndwcmludGYuaHRtbCNpbmRleC12c3dwcmludGYtMzQ3Ij48Y29kZT52c3dwcmludGY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZ3cHJpbnRmLmh0bWwjdmZ3cHJpbnRmIj52ZndwcmludGY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndzY2FuZi5odG1sI2luZGV4LXZzd3NjYW5mLTM1MyI+PGNvZGU+dnN3c2NhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0idmZ3c2NhbmYuaHRtbCN2ZndzY2FuZiI+dmZ3c2NhbmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ2ZndwcmludGYuaHRtbCNpbmRleC12d3ByaW50Zi0zNDUiPjxjb2RlPnZ3cHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InZmd3ByaW50Zi5odG1sI3Zmd3ByaW50ZiI+dmZ3cHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idmZ3c2NhbmYuaHRtbCNpbmRleC12d3NjYW5mLTM1MSI+PGNvZGU+dndzY2FuZjwvY29kZT48L2E+OiA8YSBocmVmPSJ2ZndzY2FuZi5odG1sI3Zmd3NjYW5mIj52ZndzY2FuZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlN0dWJzLmh0bWwjaW5kZXgtd2FpdC00ODMiPjxjb2RlPndhaXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3NjYXNlY21wLmh0bWwjaW5kZXgtd2NzY2FzZWNtcC00MTEiPjxjb2RlPndjc2Nhc2VjbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzY2FzZWNtcC5odG1sI3djc2Nhc2VjbXAiPndjc2Nhc2VjbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3NjYXQuaHRtbCNpbmRleC13Y3NjYXQtNDE1Ij48Y29kZT53Y3NjYXQ8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzY2F0Lmh0bWwjd2NzY2F0Ij53Y3NjYXQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3Njb2xsLmh0bWwjaW5kZXgtd2NzY29sbC00MTYiPjxjb2RlPndjc2NvbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzY29sbC5odG1sI3djc2NvbGwiPndjc2NvbGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3NkdXAuaHRtbCNpbmRleC13Y3NkdXAtNDEyIj48Y29kZT53Y3NkdXA8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzZHVwLmh0bWwjd2NzZHVwIj53Y3NkdXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3NmdGltZS5odG1sI2luZGV4LXdjc2Z0aW1lLTQxNyI+PGNvZGU+d2NzZnRpbWU8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzZnRpbWUuaHRtbCN3Y3NmdGltZSI+d2NzZnRpbWU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3NuY2FzZWNtcC5odG1sI2luZGV4LXdjc25jYXNlY21wLTQxNCI+PGNvZGU+d2NzbmNhc2VjbXA8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzbmNhc2VjbXAuaHRtbCN3Y3NuY2FzZWNtcCI+d2NzbmNhc2VjbXA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3NubGVuLmh0bWwjaW5kZXgtd2Nzbmxlbi00MTgiPjxjb2RlPndjc25sZW48L2NvZGU+PC9hPjogPGEgaHJlZj0id2Nzbmxlbi5odG1sI3djc25sZW4iPndjc25sZW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3NydG9tYnMuaHRtbCNpbmRleC13Y3NucnRvbWJzLTkyIj48Y29kZT53Y3NucnRvbWJzPC9jb2RlPjwvYT46IDxhIGhyZWY9Indjc3J0b21icy5odG1sI3djc3J0b21icyI+d2NzcnRvbWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0id2NzcnRvbWJzLmh0bWwjaW5kZXgtd2NzcnRvbWJzLTkwIj48Y29kZT53Y3NydG9tYnM8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzcnRvbWJzLmh0bWwjd2NzcnRvbWJzIj53Y3NydG9tYnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N0b2QuaHRtbCNpbmRleC13Y3N0b2QtOTQiPjxjb2RlPndjc3RvZDwvY29kZT48L2E+OiA8YSBocmVmPSJ3Y3N0b2QuaHRtbCN3Y3N0b2QiPndjc3RvZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Indjc3RvZC5odG1sI2luZGV4LXdjc3RvZi05NiI+PGNvZGU+d2NzdG9mPC9jb2RlPjwvYT46IDxhIGhyZWY9Indjc3RvZC5odG1sI3djc3RvZCI+d2NzdG9kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0id2NzdG9rLmh0bWwjaW5kZXgtd2NzdG9rLTQxOSI+PGNvZGU+d2NzdG9rPC9jb2RlPjwvYT46IDxhIGhyZWY9Indjc3Rvay5odG1sI3djc3RvayI+d2NzdG9rPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0id2NzdG9sLmh0bWwjaW5kZXgtd2NzdG9sLTk4Ij48Y29kZT53Y3N0b2w8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzdG9sLmh0bWwjd2NzdG9sIj53Y3N0b2w8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N0b2xsLmh0bWwjaW5kZXgtd2NzdG9sbC0xMDAiPjxjb2RlPndjc3RvbGw8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzdG9sbC5odG1sI3djc3RvbGwiPndjc3RvbGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N0b21icy5odG1sI2luZGV4LXdjc3RvbWJzLTEwOCI+PGNvZGU+d2NzdG9tYnM8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzdG9tYnMuaHRtbCN3Y3N0b21icyI+d2NzdG9tYnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N0b3VsLmh0bWwjaW5kZXgtd2NzdG91bC0xMDIiPjxjb2RlPndjc3RvdWw8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzdG91bC5odG1sI3djc3RvdWwiPndjc3RvdWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N0b3VsbC5odG1sI2luZGV4LXdjc3RvdWxsLTEwNCI+PGNvZGU+d2NzdG91bGw8L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzdG91bGwuaHRtbCN3Y3N0b3VsbCI+d2NzdG91bGw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N3aWR0aC5odG1sI2luZGV4LXdjc3dpZHRoLTQyMCI+PGNvZGU+d2Nzd2lkdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0id2Nzd2lkdGguaHRtbCN3Y3N3aWR0aCI+d2Nzd2lkdGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3N4ZnJtLmh0bWwjaW5kZXgtd2NzeGZybS00MjEiPjxjb2RlPndjc3hmcm08L2NvZGU+PC9hPjogPGEgaHJlZj0id2NzeGZybS5odG1sI3djc3hmcm0iPndjc3hmcm08L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3RvbWIuaHRtbCNpbmRleC13Y3RvbWItMTA5Ij48Y29kZT53Y3RvbWI8L2NvZGU+PC9hPjogPGEgaHJlZj0id2N0b21iLmh0bWwjd2N0b21iIj53Y3RvbWI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3RyYW5zLmh0bWwjaW5kZXgtd2N0cmFucy0xNDQiPjxjb2RlPndjdHJhbnM8L2NvZGU+PC9hPjogPGEgaHJlZj0id2N0cmFucy5odG1sI3djdHJhbnMiPndjdHJhbnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3R5cGUuaHRtbCNpbmRleC13Y3R5cGUtMTQwIj48Y29kZT53Y3R5cGU8L2NvZGU+PC9hPjogPGEgaHJlZj0id2N0eXBlLmh0bWwjd2N0eXBlIj53Y3R5cGU8L2E+PC9saT4KKzxsaT48YSBocmVmPSJ3Y3dpZHRoLmh0bWwjaW5kZXgtd2N3aWR0aC00MjIiPjxjb2RlPndjd2lkdGg8L2NvZGU+PC9hPjogPGEgaHJlZj0id2N3aWR0aC5odG1sI3djd2lkdGgiPndjd2lkdGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzd3ByaW50Zi5odG1sI2luZGV4LXdwcmludGYtMzA1Ij48Y29kZT53cHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InN3cHJpbnRmLmh0bWwjc3dwcmludGYiPnN3cHJpbnRmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iU3R1YnMuaHRtbCNpbmRleC13cml0ZS00ODQiPjxjb2RlPndyaXRlPC9jb2RlPjwvYT46IDxhIGhyZWY9IlN0dWJzLmh0bWwjU3R1YnMiPlN0dWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic3dzY2FuZi5odG1sI2luZGV4LXdzY2FuZi0zMDkiPjxjb2RlPndzY2FuZjwvY29kZT48L2E+OiA8YSBocmVmPSJzd3NjYW5mLmh0bWwjc3dzY2FuZiI+c3dzY2FuZjwvYT48L2xpPgorPC91bD4KKzxkaXYgY2xhc3M9ImNvbnRlbnRzIj4KKzxoMj5UYWJsZSBvZiBDb250ZW50czwvaDI+Cis8dWw+Cis8bGk+PGEgbmFtZT0idG9jX1RvcCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRoZSBSZWQgSGF0IG5ld2xpYiBDIExpYnJhcnk8L2E+Cis8bGk+PGEgbmFtZT0idG9jX0ludHJvZHVjdGlvbiIgaHJlZj0iSW50cm9kdWN0aW9uLmh0bWwjSW50cm9kdWN0aW9uIj4xIEludHJvZHVjdGlvbjwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfU3RkbGliIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPjIgU3RhbmRhcmQgVXRpbGl0eSBGdW5jdGlvbnMgKDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdGRsaWIuaDwvc3Bhbj48L3NhbXA+KTwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJfMDA1ZkV4aXQuaHRtbCNfMDA1ZkV4aXQiPjIuMSA8Y29kZT5fRXhpdDwvY29kZT4mbWRhc2g7ZW5kIHByb2dyYW0gZXhlY3V0aW9uIHdpdGggbm8gY2xlYW51cCBwcm9jZXNzaW5nPC9hPgorPGxpPjxhIGhyZWY9ImE2NGwuaHRtbCNhNjRsIj4yLjIgPGNvZGU+YTY0bDwvY29kZT4sIDxjb2RlPmw2NGE8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgYmV0d2VlbiByYWRpeC02NCBBU0NJSSBzdHJpbmcgYW5kIGxvbmc8L2E+Cis8bGk+PGEgaHJlZj0iYWJvcnQuaHRtbCNhYm9ydCI+Mi4zIDxjb2RlPmFib3J0PC9jb2RlPiZtZGFzaDthYm5vcm1hbCB0ZXJtaW5hdGlvbiBvZiBhIHByb2dyYW08L2E+Cis8bGk+PGEgaHJlZj0iYWJzLmh0bWwjYWJzIj4yLjQgPGNvZGU+YWJzPC9jb2RlPiZtZGFzaDtpbnRlZ2VyIGFic29sdXRlIHZhbHVlIChtYWduaXR1ZGUpPC9hPgorPGxpPjxhIGhyZWY9ImFzc2VydC5odG1sI2Fzc2VydCI+Mi41IDxjb2RlPmFzc2VydDwvY29kZT4mbWRhc2g7bWFjcm8gZm9yIGRlYnVnZ2luZyBkaWFnbm9zdGljczwvYT4KKzxsaT48YSBocmVmPSJhdGV4aXQuaHRtbCNhdGV4aXQiPjIuNiA8Y29kZT5hdGV4aXQ8L2NvZGU+Jm1kYXNoO3JlcXVlc3QgZXhlY3V0aW9uIG9mIGZ1bmN0aW9ucyBhdCBwcm9ncmFtIGV4aXQ8L2E+Cis8bGk+PGEgaHJlZj0iYXRvZi5odG1sI2F0b2YiPjIuNyA8Y29kZT5hdG9mPC9jb2RlPiwgPGNvZGU+YXRvZmY8L2NvZGU+Jm1kYXNoO3N0cmluZyB0byBkb3VibGUgb3IgZmxvYXQ8L2E+Cis8bGk+PGEgaHJlZj0iYXRvaS5odG1sI2F0b2kiPjIuOCA8Y29kZT5hdG9pPC9jb2RlPiwgPGNvZGU+YXRvbDwvY29kZT4mbWRhc2g7c3RyaW5nIHRvIGludGVnZXI8L2E+Cis8bGk+PGEgaHJlZj0iYXRvbGwuaHRtbCNhdG9sbCI+Mi45IDxjb2RlPmF0b2xsPC9jb2RlPiZtZGFzaDtjb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBsb25nIGludGVnZXI8L2E+Cis8bGk+PGEgaHJlZj0iYnNlYXJjaC5odG1sI2JzZWFyY2giPjIuMTAgPGNvZGU+YnNlYXJjaDwvY29kZT4mbWRhc2g7YmluYXJ5IHNlYXJjaDwvYT4KKzxsaT48YSBocmVmPSJjYWxsb2MuaHRtbCNjYWxsb2MiPjIuMTEgPGNvZGU+Y2FsbG9jPC9jb2RlPiZtZGFzaDthbGxvY2F0ZSBzcGFjZSBmb3IgYXJyYXlzPC9hPgorPGxpPjxhIGhyZWY9ImRpdi5odG1sI2RpdiI+Mi4xMiA8Y29kZT5kaXY8L2NvZGU+Jm1kYXNoO2RpdmlkZSB0d28gaW50ZWdlcnM8L2E+Cis8bGk+PGEgaHJlZj0iZWN2dC5odG1sI2VjdnQiPjIuMTMgPGNvZGU+ZWN2dDwvY29kZT4sIDxjb2RlPmVjdnRmPC9jb2RlPiwgPGNvZGU+ZmN2dDwvY29kZT4sIDxjb2RlPmZjdnRmPC9jb2RlPiZtZGFzaDtkb3VibGUgb3IgZmxvYXQgdG8gc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9Imd2Y3Z0Lmh0bWwjZ3ZjdnQiPjIuMTQgPGNvZGU+Z3ZjdnQ8L2NvZGU+LCA8Y29kZT5nY3Z0ZjwvY29kZT4mbWRhc2g7Zm9ybWF0IGRvdWJsZSBvciBmbG9hdCBhcyBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0iZWN2dGJ1Zi5odG1sI2VjdnRidWYiPjIuMTUgPGNvZGU+ZWN2dGJ1ZjwvY29kZT4sIDxjb2RlPmZjdnRidWY8L2NvZGU+Jm1kYXNoO2RvdWJsZSBvciBmbG9hdCB0byBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1ZmVudl8wMDVmbG9jay5odG1sI18wMDVmXzAwNWZlbnZfMDA1ZmxvY2siPjIuMTYgPGNvZGU+X19lbnZfbG9jazwvY29kZT4sIDxjb2RlPl9fZW52X3VubG9jazwvY29kZT4mbWRhc2g7bG9jayBlbnZpcm9uIHZhcmlhYmxlPC9hPgorPGxpPjxhIGhyZWY9ImV4aXQuaHRtbCNleGl0Ij4yLjE3IDxjb2RlPmV4aXQ8L2NvZGU+Jm1kYXNoO2VuZCBwcm9ncmFtIGV4ZWN1dGlvbjwvYT4KKzxsaT48YSBocmVmPSJnZXRlbnYuaHRtbCNnZXRlbnYiPjIuMTggPGNvZGU+Z2V0ZW52PC9jb2RlPiZtZGFzaDtsb29rIHVwIGVudmlyb25tZW50IHZhcmlhYmxlPC9hPgorPGxpPjxhIGhyZWY9ImxhYnMuaHRtbCNsYWJzIj4yLjE5IDxjb2RlPmxhYnM8L2NvZGU+Jm1kYXNoO2xvbmcgaW50ZWdlciBhYnNvbHV0ZSB2YWx1ZTwvYT4KKzxsaT48YSBocmVmPSJsZGl2Lmh0bWwjbGRpdiI+Mi4yMCA8Y29kZT5sZGl2PC9jb2RlPiZtZGFzaDtkaXZpZGUgdHdvIGxvbmcgaW50ZWdlcnM8L2E+Cis8bGk+PGEgaHJlZj0ibGxhYnMuaHRtbCNsbGFicyI+Mi4yMSA8Y29kZT5sbGFiczwvY29kZT4mbWRhc2g7Y29tcHV0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYW4gbG9uZyBsb25nIGludGVnZXIuPC9hPgorPGxpPjxhIGhyZWY9ImxsZGl2Lmh0bWwjbGxkaXYiPjIuMjIgPGNvZGU+bGxkaXY8L2NvZGU+Jm1kYXNoO2RpdmlkZSB0d28gbG9uZyBsb25nIGludGVnZXJzPC9hPgorPGxpPjxhIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+Mi4yMyA8Y29kZT5tYWxsb2M8L2NvZGU+LCA8Y29kZT5yZWFsbG9jPC9jb2RlPiwgPGNvZGU+ZnJlZTwvY29kZT4mbWRhc2g7bWFuYWdlIG1lbW9yeTwvYT4KKzxsaT48YSBocmVmPSJtYWxsaW5mby5odG1sI21hbGxpbmZvIj4yLjI0IDxjb2RlPm1hbGxpbmZvPC9jb2RlPiwgPGNvZGU+bWFsbG9jX3N0YXRzPC9jb2RlPiwgPGNvZGU+bWFsbG9wdDwvY29kZT4mbWRhc2g7bWFsbG9jIHN1cHBvcnQ8L2E+Cis8bGk+PGEgaHJlZj0iXzAwNWZfMDA1Zm1hbGxvY18wMDVmbG9jay5odG1sI18wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2siPjIuMjUgPGNvZGU+X19tYWxsb2NfbG9jazwvY29kZT4sIDxjb2RlPl9fbWFsbG9jX3VubG9jazwvY29kZT4mbWRhc2g7bG9jayBtYWxsb2MgcG9vbDwvYT4KKzxsaT48YSBocmVmPSJtYmxlbi5odG1sI21ibGVuIj4yLjI2IDxjb2RlPm1ibGVuPC9jb2RlPiZtZGFzaDttaW5pbWFsIG11bHRpYnl0ZSBsZW5ndGggZnVuY3Rpb248L2E+Cis8bGk+PGEgaHJlZj0ibWJzcnRvd2NzLmh0bWwjbWJzcnRvd2NzIj4yLjI3IDxjb2RlPm1ic3J0b3djczwvY29kZT4sIDxjb2RlPm1ic25ydG93Y3M8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgYSBjaGFyYWN0ZXIgc3RyaW5nIHRvIGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9Im1ic3Rvd2NzLmh0bWwjbWJzdG93Y3MiPjIuMjggPGNvZGU+bWJzdG93Y3M8L2NvZGU+Jm1kYXNoO21pbmltYWwgbXVsdGlieXRlIHN0cmluZyB0byB3aWRlIGNoYXIgY29udmVydGVyPC9hPgorPGxpPjxhIGhyZWY9Im1idG93Yy5odG1sI21idG93YyI+Mi4yOSA8Y29kZT5tYnRvd2M8L2NvZGU+Jm1kYXNoO21pbmltYWwgbXVsdGlieXRlIHRvIHdpZGUgY2hhciBjb252ZXJ0ZXI8L2E+Cis8bGk+PGEgaHJlZj0ib25fMDA1ZmV4aXQuaHRtbCNvbl8wMDVmZXhpdCI+Mi4zMCA8Y29kZT5vbl9leGl0PC9jb2RlPiZtZGFzaDtyZXF1ZXN0IGV4ZWN1dGlvbiBvZiBmdW5jdGlvbiB3aXRoIGFyZ3VtZW50IGF0IHByb2dyYW0gZXhpdDwvYT4KKzxsaT48YSBocmVmPSJxc29ydC5odG1sI3Fzb3J0Ij4yLjMxIDxjb2RlPnFzb3J0PC9jb2RlPiZtZGFzaDtzb3J0IGFuIGFycmF5PC9hPgorPGxpPjxhIGhyZWY9InJhbmQuaHRtbCNyYW5kIj4yLjMyIDxjb2RlPnJhbmQ8L2NvZGU+LCA8Y29kZT5zcmFuZDwvY29kZT4mbWRhc2g7cHNldWRvLXJhbmRvbSBudW1iZXJzPC9hPgorPGxpPjxhIGhyZWY9InJhbmQ0OC5odG1sI3JhbmQ0OCI+Mi4zMyA8Y29kZT5yYW5kNDg8L2NvZGU+LCA8Y29kZT5kcmFuZDQ4PC9jb2RlPiwgPGNvZGU+ZXJhbmQ0ODwvY29kZT4sIDxjb2RlPmxyYW5kNDg8L2NvZGU+LCA8Y29kZT5ucmFuZDQ4PC9jb2RlPiwgPGNvZGU+bXJhbmQ0ODwvY29kZT4sIDxjb2RlPmpyYW5kNDg8L2NvZGU+LCA8Y29kZT5zcmFuZDQ4PC9jb2RlPiwgPGNvZGU+c2VlZDQ4PC9jb2RlPiwgPGNvZGU+bGNvbmc0ODwvY29kZT4mbWRhc2g7cHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycyBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXM8L2E+Cis8bGk+PGEgaHJlZj0ic3RydG9kLmh0bWwjc3RydG9kIj4yLjM0IDxjb2RlPnN0cnRvZDwvY29kZT4sIDxjb2RlPnN0cnRvZjwvY29kZT4mbWRhc2g7c3RyaW5nIHRvIGRvdWJsZSBvciBmbG9hdDwvYT4KKzxsaT48YSBocmVmPSJzdHJ0b2wuaHRtbCNzdHJ0b2wiPjIuMzUgPGNvZGU+c3RydG9sPC9jb2RlPiZtZGFzaDtzdHJpbmcgdG8gbG9uZzwvYT4KKzxsaT48YSBocmVmPSJzdHJ0b2xsLmh0bWwjc3RydG9sbCI+Mi4zNiA8Y29kZT5zdHJ0b2xsPC9jb2RlPiZtZGFzaDtzdHJpbmcgdG8gbG9uZyBsb25nPC9hPgorPGxpPjxhIGhyZWY9InN0cnRvdWwuaHRtbCNzdHJ0b3VsIj4yLjM3IDxjb2RlPnN0cnRvdWw8L2NvZGU+Jm1kYXNoO3N0cmluZyB0byB1bnNpZ25lZCBsb25nPC9hPgorPGxpPjxhIGhyZWY9InN0cnRvdWxsLmh0bWwjc3RydG91bGwiPjIuMzggPGNvZGU+c3RydG91bGw8L2NvZGU+Jm1kYXNoO3N0cmluZyB0byB1bnNpZ25lZCBsb25nIGxvbmc8L2E+Cis8bGk+PGEgaHJlZj0id2NzcnRvbWJzLmh0bWwjd2NzcnRvbWJzIj4yLjM5IDxjb2RlPndjc3J0b21iczwvY29kZT4sIDxjb2RlPndjc25ydG9tYnM8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgdG8gYSBjaGFyYWN0ZXIgc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9Indjc3RvZC5odG1sI3djc3RvZCI+Mi40MCA8Y29kZT53Y3N0b2Q8L2NvZGU+LCA8Y29kZT53Y3N0b2Y8L2NvZGU+Jm1kYXNoO3dpZGUgY2hhciBzdHJpbmcgdG8gZG91YmxlIG9yIGZsb2F0PC9hPgorPGxpPjxhIGhyZWY9Indjc3RvbC5odG1sI3djc3RvbCI+Mi40MSA8Y29kZT53Y3N0b2w8L2NvZGU+Jm1kYXNoO3dpZGUgc3RyaW5nIHRvIGxvbmc8L2E+Cis8bGk+PGEgaHJlZj0id2NzdG9sbC5odG1sI3djc3RvbGwiPjIuNDIgPGNvZGU+d2NzdG9sbDwvY29kZT4mbWRhc2g7d2lkZSBzdHJpbmcgdG8gbG9uZyBsb25nPC9hPgorPGxpPjxhIGhyZWY9Indjc3RvdWwuaHRtbCN3Y3N0b3VsIj4yLjQzIDxjb2RlPndjc3RvdWw8L2NvZGU+Jm1kYXNoO3dpZGUgc3RyaW5nIHRvIHVuc2lnbmVkIGxvbmc8L2E+Cis8bGk+PGEgaHJlZj0id2NzdG91bGwuaHRtbCN3Y3N0b3VsbCI+Mi40NCA8Y29kZT53Y3N0b3VsbDwvY29kZT4mbWRhc2g7d2lkZSBzdHJpbmcgdG8gdW5zaWduZWQgbG9uZyBsb25nPC9hPgorPGxpPjxhIGhyZWY9InN5c3RlbS5odG1sI3N5c3RlbSI+Mi40NSA8Y29kZT5zeXN0ZW08L2NvZGU+Jm1kYXNoO2V4ZWN1dGUgY29tbWFuZCBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0id2NzdG9tYnMuaHRtbCN3Y3N0b21icyI+Mi40NiA8Y29kZT53Y3N0b21iczwvY29kZT4mbWRhc2g7bWluaW1hbCB3aWRlIGNoYXIgc3RyaW5nIHRvIG11bHRpYnl0ZSBzdHJpbmcgY29udmVydGVyPC9hPgorPGxpPjxhIGhyZWY9IndjdG9tYi5odG1sI3djdG9tYiI+Mi40NyA8Y29kZT53Y3RvbWI8L2NvZGU+Jm1kYXNoO21pbmltYWwgd2lkZSBjaGFyIHRvIG11bHRpYnl0ZSBjb252ZXJ0ZXI8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0N0eXBlIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj4zIENoYXJhY3RlciBUeXBlIE1hY3JvcyBhbmQgRnVuY3Rpb25zICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y3R5cGUuaDwvc3Bhbj48L3NhbXA+KTwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJpc2FsbnVtLmh0bWwjaXNhbG51bSI+My4xIDxjb2RlPmlzYWxudW08L2NvZGU+Jm1kYXNoO2FscGhhbnVtZXJpYyBjaGFyYWN0ZXIgcHJlZGljYXRlPC9hPgorPGxpPjxhIGhyZWY9ImlzYWxwaGEuaHRtbCNpc2FscGhhIj4zLjIgPGNvZGU+aXNhbHBoYTwvY29kZT4mbWRhc2g7YWxwaGFiZXRpYyBjaGFyYWN0ZXIgcHJlZGljYXRlPC9hPgorPGxpPjxhIGhyZWY9ImlzYXNjaWkuaHRtbCNpc2FzY2lpIj4zLjMgPGNvZGU+aXNhc2NpaTwvY29kZT4mbWRhc2g7QVNDSUkgY2hhcmFjdGVyIHByZWRpY2F0ZTwvYT4KKzxsaT48YSBocmVmPSJpc2NudHJsLmh0bWwjaXNjbnRybCI+My40IDxjb2RlPmlzY250cmw8L2NvZGU+Jm1kYXNoO2NvbnRyb2wgY2hhcmFjdGVyIHByZWRpY2F0ZTwvYT4KKzxsaT48YSBocmVmPSJpc2RpZ2l0Lmh0bWwjaXNkaWdpdCI+My41IDxjb2RlPmlzZGlnaXQ8L2NvZGU+Jm1kYXNoO2RlY2ltYWwgZGlnaXQgcHJlZGljYXRlPC9hPgorPGxpPjxhIGhyZWY9ImlzbG93ZXIuaHRtbCNpc2xvd2VyIj4zLjYgPGNvZGU+aXNsb3dlcjwvY29kZT4mbWRhc2g7bG93ZXJjYXNlIGNoYXJhY3RlciBwcmVkaWNhdGU8L2E+Cis8bGk+PGEgaHJlZj0iaXNwcmludC5odG1sI2lzcHJpbnQiPjMuNyA8Y29kZT5pc3ByaW50PC9jb2RlPiwgPGNvZGU+aXNncmFwaDwvY29kZT4mbWRhc2g7cHJpbnRhYmxlIGNoYXJhY3RlciBwcmVkaWNhdGVzPC9hPgorPGxpPjxhIGhyZWY9ImlzcHVuY3QuaHRtbCNpc3B1bmN0Ij4zLjggPGNvZGU+aXNwdW5jdDwvY29kZT4mbWRhc2g7cHVuY3R1YXRpb24gY2hhcmFjdGVyIHByZWRpY2F0ZTwvYT4KKzxsaT48YSBocmVmPSJpc3NwYWNlLmh0bWwjaXNzcGFjZSI+My45IDxjb2RlPmlzc3BhY2U8L2NvZGU+Jm1kYXNoO3doaXRlc3BhY2UgY2hhcmFjdGVyIHByZWRpY2F0ZTwvYT4KKzxsaT48YSBocmVmPSJpc3VwcGVyLmh0bWwjaXN1cHBlciI+My4xMCA8Y29kZT5pc3VwcGVyPC9jb2RlPiZtZGFzaDt1cHBlcmNhc2UgY2hhcmFjdGVyIHByZWRpY2F0ZTwvYT4KKzxsaT48YSBocmVmPSJpc3hkaWdpdC5odG1sI2lzeGRpZ2l0Ij4zLjExIDxjb2RlPmlzeGRpZ2l0PC9jb2RlPiZtZGFzaDtoZXhhZGVjaW1hbCBkaWdpdCBwcmVkaWNhdGU8L2E+Cis8bGk+PGEgaHJlZj0idG9hc2NpaS5odG1sI3RvYXNjaWkiPjMuMTIgPGNvZGU+dG9hc2NpaTwvY29kZT4mbWRhc2g7Zm9yY2UgaW50ZWdlcnMgdG8gQVNDSUkgcmFuZ2U8L2E+Cis8bGk+PGEgaHJlZj0idG9sb3dlci5odG1sI3RvbG93ZXIiPjMuMTMgPGNvZGU+dG9sb3dlcjwvY29kZT4mbWRhc2g7dHJhbnNsYXRlIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlPC9hPgorPGxpPjxhIGhyZWY9InRvdXBwZXIuaHRtbCN0b3VwcGVyIj4zLjE0IDxjb2RlPnRvdXBwZXI8L2NvZGU+Jm1kYXNoO3RyYW5zbGF0ZSBjaGFyYWN0ZXJzIHRvIHVwcGVyY2FzZTwvYT4KKzxsaT48YSBocmVmPSJpc3dhbG51bS5odG1sI2lzd2FsbnVtIj4zLjE1IDxjb2RlPmlzd2FsbnVtPC9jb2RlPiZtZGFzaDthbHBoYW51bWVyaWMgd2lkZSBjaGFyYWN0ZXIgdGVzdDwvYT4KKzxsaT48YSBocmVmPSJpc3dhbHBoYS5odG1sI2lzd2FscGhhIj4zLjE2IDxjb2RlPmlzd2FscGhhPC9jb2RlPiZtZGFzaDthbHBoYWJldGljIHdpZGUgY2hhcmFjdGVyIHRlc3Q8L2E+Cis8bGk+PGEgaHJlZj0iaXN3Y250cmwuaHRtbCNpc3djbnRybCI+My4xNyA8Y29kZT5pc3djbnRybDwvY29kZT4mbWRhc2g7Y29udHJvbCB3aWRlIGNoYXJhY3RlciB0ZXN0PC9hPgorPGxpPjxhIGhyZWY9Imlzd2JsYW5rLmh0bWwjaXN3YmxhbmsiPjMuMTggPGNvZGU+aXN3Ymxhbms8L2NvZGU+Jm1kYXNoO2JsYW5rIHdpZGUgY2hhcmFjdGVyIHRlc3Q8L2E+Cis8bGk+PGEgaHJlZj0iaXN3ZGlnaXQuaHRtbCNpc3dkaWdpdCI+My4xOSA8Y29kZT5pc3dkaWdpdDwvY29kZT4mbWRhc2g7ZGVjaW1hbCBkaWdpdCB3aWRlIGNoYXJhY3RlciB0ZXN0PC9hPgorPGxpPjxhIGhyZWY9Imlzd2dyYXBoLmh0bWwjaXN3Z3JhcGgiPjMuMjAgPGNvZGU+aXN3Z3JhcGg8L2NvZGU+Jm1kYXNoO2dyYXBoaWMgd2lkZSBjaGFyYWN0ZXIgdGVzdDwvYT4KKzxsaT48YSBocmVmPSJpc3dsb3dlci5odG1sI2lzd2xvd2VyIj4zLjIxIDxjb2RlPmlzd2xvd2VyPC9jb2RlPiZtZGFzaDtsb3dlcmNhc2Ugd2lkZSBjaGFyYWN0ZXIgdGVzdDwvYT4KKzxsaT48YSBocmVmPSJpc3dwcmludC5odG1sI2lzd3ByaW50Ij4zLjIyIDxjb2RlPmlzd3ByaW50PC9jb2RlPiZtZGFzaDtwcmludGFibGUgd2lkZSBjaGFyYWN0ZXIgdGVzdDwvYT4KKzxsaT48YSBocmVmPSJpc3dwdW5jdC5odG1sI2lzd3B1bmN0Ij4zLjIzIDxjb2RlPmlzd3B1bmN0PC9jb2RlPiZtZGFzaDtwdW5jdHVhdGlvbiB3aWRlIGNoYXJhY3RlciB0ZXN0PC9hPgorPGxpPjxhIGhyZWY9Imlzd3NwYWNlLmh0bWwjaXN3c3BhY2UiPjMuMjQgPGNvZGU+aXN3c3BhY2U8L2NvZGU+Jm1kYXNoO3doaXRlc3BhY2Ugd2lkZSBjaGFyYWN0ZXIgdGVzdDwvYT4KKzxsaT48YSBocmVmPSJpc3d1cHBlci5odG1sI2lzd3VwcGVyIj4zLjI1IDxjb2RlPmlzd3VwcGVyPC9jb2RlPiZtZGFzaDt1cHBlcmNhc2Ugd2lkZSBjaGFyYWN0ZXIgdGVzdDwvYT4KKzxsaT48YSBocmVmPSJpc3d4ZGlnaXQuaHRtbCNpc3d4ZGlnaXQiPjMuMjYgPGNvZGU+aXN3eGRpZ2l0PC9jb2RlPiZtZGFzaDtoZXhhZGVjaW1hbCBkaWdpdCB3aWRlIGNoYXJhY3RlciB0ZXN0PC9hPgorPGxpPjxhIGhyZWY9Imlzd2N0eXBlLmh0bWwjaXN3Y3R5cGUiPjMuMjcgPGNvZGU+aXN3Y3R5cGU8L2NvZGU+Jm1kYXNoO2V4dGVuc2libGUgd2lkZS1jaGFyYWN0ZXIgdGVzdDwvYT4KKzxsaT48YSBocmVmPSJ3Y3R5cGUuaHRtbCN3Y3R5cGUiPjMuMjggPGNvZGU+d2N0eXBlPC9jb2RlPiZtZGFzaDtnZXQgd2lkZS1jaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24gdHlwZTwvYT4KKzxsaT48YSBocmVmPSJ0b3dsb3dlci5odG1sI3Rvd2xvd2VyIj4zLjI5IDxjb2RlPnRvd2xvd2VyPC9jb2RlPiZtZGFzaDt0cmFuc2xhdGUgd2lkZSBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZTwvYT4KKzxsaT48YSBocmVmPSJ0b3d1cHBlci5odG1sI3Rvd3VwcGVyIj4zLjMwIDxjb2RlPnRvd3VwcGVyPC9jb2RlPiZtZGFzaDt0cmFuc2xhdGUgd2lkZSBjaGFyYWN0ZXJzIHRvIHVwcGVyY2FzZTwvYT4KKzxsaT48YSBocmVmPSJ0b3djdHJhbnMuaHRtbCN0b3djdHJhbnMiPjMuMzEgPGNvZGU+dG93Y3RyYW5zPC9jb2RlPiZtZGFzaDtleHRlbnNpYmxlIHdpZGUtY2hhcmFjdGVyIHRyYW5zbGF0aW9uPC9hPgorPGxpPjxhIGhyZWY9IndjdHJhbnMuaHRtbCN3Y3RyYW5zIj4zLjMyIDxjb2RlPndjdHJhbnM8L2NvZGU+Jm1kYXNoO2dldCB3aWRlLWNoYXJhY3RlciB0cmFuc2xhdGlvbiB0eXBlPC9hPgorPC9saT48L3VsPgorPGxpPjxhIG5hbWU9InRvY19TdGRpbyIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+NCBJbnB1dCBhbmQgT3V0cHV0ICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkaW8uaDwvc3Bhbj48L3NhbXA+KTwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJjbGVhcmVyci5odG1sI2NsZWFyZXJyIj40LjEgPGNvZGU+Y2xlYXJlcnI8L2NvZGU+Jm1kYXNoO2NsZWFyIGZpbGUgb3Igc3RyZWFtIGVycm9yIGluZGljYXRvcjwvYT4KKzxsaT48YSBocmVmPSJkaXByaW50Zi5odG1sI2RpcHJpbnRmIj40LjIgPGNvZGU+ZGlwcmludGY8L2NvZGU+LCA8Y29kZT52ZGlwcmludGY8L2NvZGU+Jm1kYXNoO3ByaW50IHRvIGEgZmlsZSBkZXNjcmlwdG9yIChpbnRlZ2VyIG9ubHkpPC9hPgorPGxpPjxhIGhyZWY9ImRwcmludGYuaHRtbCNkcHJpbnRmIj40LjMgPGNvZGU+ZHByaW50ZjwvY29kZT4sIDxjb2RlPnZkcHJpbnRmPC9jb2RlPiZtZGFzaDtwcmludCB0byBhIGZpbGUgZGVzY3JpcHRvcjwvYT4KKzxsaT48YSBocmVmPSJmY2xvc2UuaHRtbCNmY2xvc2UiPjQuNCA8Y29kZT5mY2xvc2U8L2NvZGU+Jm1kYXNoO2Nsb3NlIGEgZmlsZTwvYT4KKzxsaT48YSBocmVmPSJmY2xvc2VhbGwuaHRtbCNmY2xvc2VhbGwiPjQuNSA8Y29kZT5mY2xvc2VhbGw8L2NvZGU+Jm1kYXNoO2Nsb3NlIGFsbCBmaWxlczwvYT4KKzxsaT48YSBocmVmPSJmZG9wZW4uaHRtbCNmZG9wZW4iPjQuNiA8Y29kZT5mZG9wZW48L2NvZGU+Jm1kYXNoO3R1cm4gb3BlbiBmaWxlIGludG8gYSBzdHJlYW08L2E+Cis8bGk+PGEgaHJlZj0iZmVvZi5odG1sI2Zlb2YiPjQuNyA8Y29kZT5mZW9mPC9jb2RlPiZtZGFzaDt0ZXN0IGZvciBlbmQgb2YgZmlsZTwvYT4KKzxsaT48YSBocmVmPSJmZXJyb3IuaHRtbCNmZXJyb3IiPjQuOCA8Y29kZT5mZXJyb3I8L2NvZGU+Jm1kYXNoO3Rlc3Qgd2hldGhlciByZWFkL3dyaXRlIGVycm9yIGhhcyBvY2N1cnJlZDwvYT4KKzxsaT48YSBocmVmPSJmZmx1c2guaHRtbCNmZmx1c2giPjQuOSA8Y29kZT5mZmx1c2g8L2NvZGU+Jm1kYXNoO2ZsdXNoIGJ1ZmZlcmVkIGZpbGUgb3V0cHV0PC9hPgorPGxpPjxhIGhyZWY9ImZnZXRjLmh0bWwjZmdldGMiPjQuMTAgPGNvZGU+ZmdldGM8L2NvZGU+Jm1kYXNoO2dldCBhIGNoYXJhY3RlciBmcm9tIGEgZmlsZSBvciBzdHJlYW08L2E+Cis8bGk+PGEgaHJlZj0iZmdldHBvcy5odG1sI2ZnZXRwb3MiPjQuMTEgPGNvZGU+ZmdldHBvczwvY29kZT4mbWRhc2g7cmVjb3JkIHBvc2l0aW9uIGluIGEgc3RyZWFtIG9yIGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0iZmdldHMuaHRtbCNmZ2V0cyI+NC4xMiA8Y29kZT5mZ2V0czwvY29kZT4mbWRhc2g7Z2V0IGNoYXJhY3RlciBzdHJpbmcgZnJvbSBhIGZpbGUgb3Igc3RyZWFtPC9hPgorPGxpPjxhIGhyZWY9ImZnZXR3Yy5odG1sI2ZnZXR3YyI+NC4xMyA8Y29kZT5mZ2V0d2M8L2NvZGU+LCA8Y29kZT5nZXR3YzwvY29kZT4mbWRhc2g7Z2V0IGEgd2lkZSBjaGFyYWN0ZXIgZnJvbSBhIGZpbGUgb3Igc3RyZWFtPC9hPgorPGxpPjxhIGhyZWY9ImZnZXR3cy5odG1sI2ZnZXR3cyI+NC4xNCA8Y29kZT5mZ2V0d3M8L2NvZGU+Jm1kYXNoO2dldCB3aWRlIGNoYXJhY3RlciBzdHJpbmcgZnJvbSBhIGZpbGUgb3Igc3RyZWFtPC9hPgorPGxpPjxhIGhyZWY9ImZpbGVuby5odG1sI2ZpbGVubyI+NC4xNSA8Y29kZT5maWxlbm88L2NvZGU+Jm1kYXNoO3JldHVybiBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHN0cmVhbTwvYT4KKzxsaT48YSBocmVmPSJmbWVtb3Blbi5odG1sI2ZtZW1vcGVuIj40LjE2IDxjb2RlPmZtZW1vcGVuPC9jb2RlPiZtZGFzaDtvcGVuIGEgc3RyZWFtIGFyb3VuZCBhIGZpeGVkLWxlbmd0aCBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0iZm9wZW4uaHRtbCNmb3BlbiI+NC4xNyA8Y29kZT5mb3BlbjwvY29kZT4mbWRhc2g7b3BlbiBhIGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0iZm9wZW5jb29raWUuaHRtbCNmb3BlbmNvb2tpZSI+NC4xOCA8Y29kZT5mb3BlbmNvb2tpZTwvY29kZT4mbWRhc2g7b3BlbiBhIHN0cmVhbSB3aXRoIGN1c3RvbSBjYWxsYmFja3M8L2E+Cis8bGk+PGEgaHJlZj0iZnB1cmdlLmh0bWwjZnB1cmdlIj40LjE5IDxjb2RlPmZwdXJnZTwvY29kZT4mbWRhc2g7ZGlzY2FyZCBwZW5kaW5nIGZpbGUgSS9PPC9hPgorPGxpPjxhIGhyZWY9ImZwdXRjLmh0bWwjZnB1dGMiPjQuMjAgPGNvZGU+ZnB1dGM8L2NvZGU+Jm1kYXNoO3dyaXRlIGEgY2hhcmFjdGVyIG9uIGEgc3RyZWFtIG9yIGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0iZnB1dHMuaHRtbCNmcHV0cyI+NC4yMSA8Y29kZT5mcHV0czwvY29kZT4mbWRhc2g7d3JpdGUgYSBjaGFyYWN0ZXIgc3RyaW5nIGluIGEgZmlsZSBvciBzdHJlYW08L2E+Cis8bGk+PGEgaHJlZj0iZnB1dHdjLmh0bWwjZnB1dHdjIj40LjIyIDxjb2RlPmZwdXR3YzwvY29kZT4sIDxjb2RlPnB1dHdjPC9jb2RlPiZtZGFzaDt3cml0ZSBhIHdpZGUgY2hhcmFjdGVyIG9uIGEgc3RyZWFtIG9yIGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0iZnB1dHdzLmh0bWwjZnB1dHdzIj40LjIzIDxjb2RlPmZwdXR3czwvY29kZT4mbWRhc2g7d3JpdGUgYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgaW4gYSBmaWxlIG9yIHN0cmVhbTwvYT4KKzxsaT48YSBocmVmPSJmcmVhZC5odG1sI2ZyZWFkIj40LjI0IDxjb2RlPmZyZWFkPC9jb2RlPiZtZGFzaDtyZWFkIGFycmF5IGVsZW1lbnRzIGZyb20gYSBmaWxlPC9hPgorPGxpPjxhIGhyZWY9ImZyZW9wZW4uaHRtbCNmcmVvcGVuIj40LjI1IDxjb2RlPmZyZW9wZW48L2NvZGU+Jm1kYXNoO29wZW4gYSBmaWxlIHVzaW5nIGFuIGV4aXN0aW5nIGZpbGUgZGVzY3JpcHRvcjwvYT4KKzxsaT48YSBocmVmPSJmc2Vlay5odG1sI2ZzZWVrIj40LjI2IDxjb2RlPmZzZWVrPC9jb2RlPiwgPGNvZGU+ZnNlZWtvPC9jb2RlPiZtZGFzaDtzZXQgZmlsZSBwb3NpdGlvbjwvYT4KKzxsaT48YSBocmVmPSJmc2V0cG9zLmh0bWwjZnNldHBvcyI+NC4yNyA8Y29kZT5mc2V0cG9zPC9jb2RlPiZtZGFzaDtyZXN0b3JlIHBvc2l0aW9uIG9mIGEgc3RyZWFtIG9yIGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0iZnRlbGwuaHRtbCNmdGVsbCI+NC4yOCA8Y29kZT5mdGVsbDwvY29kZT4sIDxjb2RlPmZ0ZWxsbzwvY29kZT4mbWRhc2g7cmV0dXJuIHBvc2l0aW9uIGluIGEgc3RyZWFtIG9yIGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0iZnVub3Blbi5odG1sI2Z1bm9wZW4iPjQuMjkgPGNvZGU+ZnVub3BlbjwvY29kZT4sIDxjb2RlPmZyb3BlbjwvY29kZT4sIDxjb2RlPmZ3b3BlbjwvY29kZT4mbWRhc2g7b3BlbiBhIHN0cmVhbSB3aXRoIGN1c3RvbSBjYWxsYmFja3M8L2E+Cis8bGk+PGEgaHJlZj0iZndpZGUuaHRtbCNmd2lkZSI+NC4zMCA8Y29kZT5md2lkZTwvY29kZT4mbWRhc2g7c2V0IGFuZCBkZXRlcm1pbmUgdGhlIG9yaWVudGF0aW9uIG9mIGEgRklMRSBzdHJlYW08L2E+Cis8bGk+PGEgaHJlZj0iZndyaXRlLmh0bWwjZndyaXRlIj40LjMxIDxjb2RlPmZ3cml0ZTwvY29kZT4mbWRhc2g7d3JpdGUgYXJyYXkgZWxlbWVudHM8L2E+Cis8bGk+PGEgaHJlZj0iZ2V0Yy5odG1sI2dldGMiPjQuMzIgPGNvZGU+Z2V0YzwvY29kZT4mbWRhc2g7cmVhZCBhIGNoYXJhY3RlciAobWFjcm8pPC9hPgorPGxpPjxhIGhyZWY9ImdldGNfMDA1ZnVubG9ja2VkLmh0bWwjZ2V0Y18wMDVmdW5sb2NrZWQiPjQuMzMgPGNvZGU+Z2V0Y191bmxvY2tlZDwvY29kZT4mbWRhc2g7bm9uLXRocmVhZC1zYWZlIHZlcnNpb24gb2YgZ2V0YyAobWFjcm8pPC9hPgorPGxpPjxhIGhyZWY9ImdldGNoYXIuaHRtbCNnZXRjaGFyIj40LjM0IDxjb2RlPmdldGNoYXI8L2NvZGU+Jm1kYXNoO3JlYWQgYSBjaGFyYWN0ZXIgKG1hY3JvKTwvYT4KKzxsaT48YSBocmVmPSJnZXRjaGFyXzAwNWZ1bmxvY2tlZC5odG1sI2dldGNoYXJfMDA1ZnVubG9ja2VkIj40LjM1IDxjb2RlPmdldGNoYXJfdW5sb2NrZWQ8L2NvZGU+Jm1kYXNoO25vbi10aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIGdldGNoYXIgKG1hY3JvKTwvYT4KKzxsaT48YSBocmVmPSJnZXRkZWxpbS5odG1sI2dldGRlbGltIj40LjM2IDxjb2RlPmdldGRlbGltPC9jb2RlPiZtZGFzaDtyZWFkIGEgbGluZSB1cCB0byBhIHNwZWNpZmllZCBsaW5lIGRlbGltaXRlcjwvYT4KKzxsaT48YSBocmVmPSJnZXRsaW5lLmh0bWwjZ2V0bGluZSI+NC4zNyA8Y29kZT5nZXRsaW5lPC9jb2RlPiZtZGFzaDtyZWFkIGEgbGluZSBmcm9tIGEgZmlsZTwvYT4KKzxsaT48YSBocmVmPSJnZXRzLmh0bWwjZ2V0cyI+NC4zOCA8Y29kZT5nZXRzPC9jb2RlPiZtZGFzaDtnZXQgY2hhcmFjdGVyIHN0cmluZyAob2Jzb2xldGUsIHVzZSA8Y29kZT5mZ2V0czwvY29kZT4gaW5zdGVhZCk8L2E+Cis8bGk+PGEgaHJlZj0iZ2V0dy5odG1sI2dldHciPjQuMzkgPGNvZGU+Z2V0dzwvY29kZT4mbWRhc2g7cmVhZCBhIHdvcmQgKGludCk8L2E+Cis8bGk+PGEgaHJlZj0iZ2V0d2NoYXIuaHRtbCNnZXR3Y2hhciI+NC40MCA8Y29kZT5nZXR3Y2hhcjwvY29kZT4mbWRhc2g7cmVhZCBhIHdpZGUgY2hhcmFjdGVyIGZyb20gc3RhbmRhcmQgaW5wdXQ8L2E+Cis8bGk+PGEgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIj40LjQxIDxjb2RlPm1rdGVtcDwvY29kZT4sIDxjb2RlPm1rc3RlbXA8L2NvZGU+LCA8Y29kZT5ta29zdGVtcDwvY29kZT4sIDxjb2RlPm1rc3RlbXBzPC9jb2RlPiw8L2E+Cis8bGk+PGEgaHJlZj0ib3Blbl8wMDVmbWVtc3RyZWFtLmh0bWwjb3Blbl8wMDVmbWVtc3RyZWFtIj40LjQyIDxjb2RlPm9wZW5fbWVtc3RyZWFtPC9jb2RlPiwgPGNvZGU+b3Blbl93bWVtc3RyZWFtPC9jb2RlPiZtZGFzaDtvcGVuIGEgd3JpdGUgc3RyZWFtIGFyb3VuZCBhbiBhcmJpdHJhcnktbGVuZ3RoIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJwZXJyb3IuaHRtbCNwZXJyb3IiPjQuNDMgPGNvZGU+cGVycm9yPC9jb2RlPiZtZGFzaDtwcmludCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0YW5kYXJkIGVycm9yPC9hPgorPGxpPjxhIGhyZWY9InB1dGMuaHRtbCNwdXRjIj40LjQ0IDxjb2RlPnB1dGM8L2NvZGU+Jm1kYXNoO3dyaXRlIGEgY2hhcmFjdGVyIChtYWNybyk8L2E+Cis8bGk+PGEgaHJlZj0icHV0Y18wMDVmdW5sb2NrZWQuaHRtbCNwdXRjXzAwNWZ1bmxvY2tlZCI+NC40NSA8Y29kZT5wdXRjX3VubG9ja2VkPC9jb2RlPiZtZGFzaDtub24tdGhyZWFkLXNhZmUgdmVyc2lvbiBvZiBwdXRjIChtYWNybyk8L2E+Cis8bGk+PGEgaHJlZj0icHV0Y2hhci5odG1sI3B1dGNoYXIiPjQuNDYgPGNvZGU+cHV0Y2hhcjwvY29kZT4mbWRhc2g7d3JpdGUgYSBjaGFyYWN0ZXIgKG1hY3JvKTwvYT4KKzxsaT48YSBocmVmPSJwdXRjaGFyXzAwNWZ1bmxvY2tlZC5odG1sI3B1dGNoYXJfMDA1ZnVubG9ja2VkIj40LjQ3IDxjb2RlPnB1dGNoYXJfdW5sb2NrZWQ8L2NvZGU+Jm1kYXNoO25vbi10aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIHB1dGNoYXIgKG1hY3JvKTwvYT4KKzxsaT48YSBocmVmPSJwdXRzLmh0bWwjcHV0cyI+NC40OCA8Y29kZT5wdXRzPC9jb2RlPiZtZGFzaDt3cml0ZSBhIGNoYXJhY3RlciBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0icHV0dy5odG1sI3B1dHciPjQuNDkgPGNvZGU+cHV0dzwvY29kZT4mbWRhc2g7d3JpdGUgYSB3b3JkIChpbnQpPC9hPgorPGxpPjxhIGhyZWY9InB1dHdjaGFyLmh0bWwjcHV0d2NoYXIiPjQuNTAgPGNvZGU+cHV0d2NoYXI8L2NvZGU+Jm1kYXNoO3dyaXRlIGEgd2lkZSBjaGFyYWN0ZXIgdG8gc3RhbmRhcmQgb3V0cHV0PC9hPgorPGxpPjxhIGhyZWY9InJlbW92ZS5odG1sI3JlbW92ZSI+NC41MSA8Y29kZT5yZW1vdmU8L2NvZGU+Jm1kYXNoO2RlbGV0ZSBhIGZpbGUncyBuYW1lPC9hPgorPGxpPjxhIGhyZWY9InJlbmFtZS5odG1sI3JlbmFtZSI+NC41MiA8Y29kZT5yZW5hbWU8L2NvZGU+Jm1kYXNoO3JlbmFtZSBhIGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0icmV3aW5kLmh0bWwjcmV3aW5kIj40LjUzIDxjb2RlPnJld2luZDwvY29kZT4mbWRhc2g7cmVpbml0aWFsaXplIGEgZmlsZSBvciBzdHJlYW08L2E+Cis8bGk+PGEgaHJlZj0ic2V0YnVmLmh0bWwjc2V0YnVmIj40LjU0IDxjb2RlPnNldGJ1ZjwvY29kZT4mbWRhc2g7c3BlY2lmeSBmdWxsIGJ1ZmZlcmluZyBmb3IgYSBmaWxlIG9yIHN0cmVhbTwvYT4KKzxsaT48YSBocmVmPSJzZXRidWZmZXIuaHRtbCNzZXRidWZmZXIiPjQuNTUgPGNvZGU+c2V0YnVmZmVyPC9jb2RlPiZtZGFzaDtzcGVjaWZ5IGZ1bGwgYnVmZmVyaW5nIGZvciBhIGZpbGUgb3Igc3RyZWFtIHdpdGggc2l6ZTwvYT4KKzxsaT48YSBocmVmPSJzZXRsaW5lYnVmLmh0bWwjc2V0bGluZWJ1ZiI+NC41NiA8Y29kZT5zZXRsaW5lYnVmPC9jb2RlPiZtZGFzaDtzcGVjaWZ5IGxpbmUgYnVmZmVyaW5nIGZvciBhIGZpbGUgb3Igc3RyZWFtPC9hPgorPGxpPjxhIGhyZWY9InNldHZidWYuaHRtbCNzZXR2YnVmIj40LjU3IDxjb2RlPnNldHZidWY8L2NvZGU+Jm1kYXNoO3NwZWNpZnkgZmlsZSBvciBzdHJlYW0gYnVmZmVyaW5nPC9hPgorPGxpPjxhIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiPjQuNTggPGNvZGU+c2lwcmludGY8L2NvZGU+LCA8Y29kZT5maXByaW50ZjwvY29kZT4sIDxjb2RlPmlwcmludGY8L2NvZGU+LCA8Y29kZT5zbmlwcmludGY8L2NvZGU+LCA8Y29kZT5hc2lwcmludGY8L2NvZGU+LCA8Y29kZT5hc25pcHJpbnRmPC9jb2RlPiZtZGFzaDtmb3JtYXQgb3V0cHV0IChpbnRlZ2VyIG9ubHkpPC9hPgorPGxpPjxhIGhyZWY9InNpc2NhbmYuaHRtbCNzaXNjYW5mIj40LjU5IDxjb2RlPnNpc2NhbmY8L2NvZGU+LCA8Y29kZT5maXNjYW5mPC9jb2RlPiwgPGNvZGU+aXNjYW5mPC9jb2RlPiZtZGFzaDtzY2FuIGFuZCBmb3JtYXQgbm9uLWZsb2F0aW5nIGlucHV0PC9hPgorPGxpPjxhIGhyZWY9InNwcmludGYuaHRtbCNzcHJpbnRmIj40LjYwIDxjb2RlPnNwcmludGY8L2NvZGU+LCA8Y29kZT5mcHJpbnRmPC9jb2RlPiwgPGNvZGU+cHJpbnRmPC9jb2RlPiwgPGNvZGU+c25wcmludGY8L2NvZGU+LCA8Y29kZT5hc3ByaW50ZjwvY29kZT4sIDxjb2RlPmFzbnByaW50ZjwvY29kZT4mbWRhc2g7Zm9ybWF0IG91dHB1dDwvYT4KKzxsaT48YSBocmVmPSJzc2NhbmYuaHRtbCNzc2NhbmYiPjQuNjEgPGNvZGU+c3NjYW5mPC9jb2RlPiwgPGNvZGU+ZnNjYW5mPC9jb2RlPiwgPGNvZGU+c2NhbmY8L2NvZGU+Jm1kYXNoO3NjYW4gYW5kIGZvcm1hdCBpbnB1dDwvYT4KKzxsaT48YSBocmVmPSJzd3ByaW50Zi5odG1sI3N3cHJpbnRmIj40LjYyIDxjb2RlPnN3cHJpbnRmPC9jb2RlPiwgPGNvZGU+ZndwcmludGY8L2NvZGU+LCA8Y29kZT53cHJpbnRmPC9jb2RlPiZtZGFzaDt3aWRlIGNoYXJhY3RlciBmb3JtYXQgb3V0cHV0PC9hPgorPGxpPjxhIGhyZWY9InN3c2NhbmYuaHRtbCNzd3NjYW5mIj40LjYzIDxjb2RlPnN3c2NhbmY8L2NvZGU+LCA8Y29kZT5md3NjYW5mPC9jb2RlPiwgPGNvZGU+d3NjYW5mPC9jb2RlPiZtZGFzaDtzY2FuIGFuZCBmb3JtYXQgd2lkZSBjaGFyYWN0ZXIgaW5wdXQ8L2E+Cis8bGk+PGEgaHJlZj0idG1wZmlsZS5odG1sI3RtcGZpbGUiPjQuNjQgPGNvZGU+dG1wZmlsZTwvY29kZT4mbWRhc2g7Y3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0idG1wbmFtLmh0bWwjdG1wbmFtIj40LjY1IDxjb2RlPnRtcG5hbTwvY29kZT4sIDxjb2RlPnRlbXBuYW08L2NvZGU+Jm1kYXNoO25hbWUgZm9yIGEgdGVtcG9yYXJ5IGZpbGU8L2E+Cis8bGk+PGEgaHJlZj0idW5nZXRjLmh0bWwjdW5nZXRjIj40LjY2IDxjb2RlPnVuZ2V0YzwvY29kZT4mbWRhc2g7cHVzaCBkYXRhIGJhY2sgaW50byBhIHN0cmVhbTwvYT4KKzxsaT48YSBocmVmPSJ1bmdldHdjLmh0bWwjdW5nZXR3YyI+NC42NyA8Y29kZT51bmdldHdjPC9jb2RlPiZtZGFzaDtwdXNoIHdpZGUgY2hhcmFjdGVyIGRhdGEgYmFjayBpbnRvIGEgc3RyZWFtPC9hPgorPGxpPjxhIGhyZWY9InZmcHJpbnRmLmh0bWwjdmZwcmludGYiPjQuNjggPGNvZGU+dmZwcmludGY8L2NvZGU+LCA8Y29kZT52cHJpbnRmPC9jb2RlPiwgPGNvZGU+dnNwcmludGY8L2NvZGU+LCA8Y29kZT52c25wcmludGY8L2NvZGU+LCA8Y29kZT52YXNwcmludGY8L2NvZGU+LCA8Y29kZT52YXNucHJpbnRmPC9jb2RlPiZtZGFzaDtmb3JtYXQgYXJndW1lbnQgbGlzdDwvYT4KKzxsaT48YSBocmVmPSJ2ZnNjYW5mLmh0bWwjdmZzY2FuZiI+NC42OSA8Y29kZT52ZnNjYW5mPC9jb2RlPiwgPGNvZGU+dnNjYW5mPC9jb2RlPiwgPGNvZGU+dnNzY2FuZjwvY29kZT4mbWRhc2g7Zm9ybWF0IGFyZ3VtZW50IGxpc3Q8L2E+Cis8bGk+PGEgaHJlZj0idmZ3cHJpbnRmLmh0bWwjdmZ3cHJpbnRmIj40LjcwIDxjb2RlPnZmd3ByaW50ZjwvY29kZT4sIDxjb2RlPnZ3cHJpbnRmPC9jb2RlPiwgPGNvZGU+dnN3cHJpbnRmPC9jb2RlPiZtZGFzaDt3aWRlIGNoYXJhY3RlciBmb3JtYXQgYXJndW1lbnQgbGlzdDwvYT4KKzxsaT48YSBocmVmPSJ2ZndzY2FuZi5odG1sI3Zmd3NjYW5mIj40LjcxIDxjb2RlPnZmd3NjYW5mPC9jb2RlPiwgPGNvZGU+dndzY2FuZjwvY29kZT4sIDxjb2RlPnZzd3NjYW5mPC9jb2RlPiZtZGFzaDtzY2FuIGFuZCBmb3JtYXQgYXJndW1lbnQgbGlzdCBmcm9tIHdpZGUgY2hhcmFjdGVyIGlucHV0PC9hPgorPGxpPjxhIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPjQuNzIgPGNvZGU+dmlwcmludGY8L2NvZGU+LCA8Y29kZT52ZmlwcmludGY8L2NvZGU+LCA8Y29kZT52c2lwcmludGY8L2NvZGU+LCA8Y29kZT52c25pcHJpbnRmPC9jb2RlPiwgPGNvZGU+dmFzaXByaW50ZjwvY29kZT4sIDxjb2RlPnZhc25pcHJpbnRmPC9jb2RlPiZtZGFzaDtmb3JtYXQgYXJndW1lbnQgbGlzdCAoaW50ZWdlciBvbmx5KTwvYT4KKzxsaT48YSBocmVmPSJ2aXNjYW5mLmh0bWwjdmlzY2FuZiI+NC43MyA8Y29kZT52aXNjYW5mPC9jb2RlPiwgPGNvZGU+dmZpc2NhbmY8L2NvZGU+LCA8Y29kZT52c2lzY2FuZjwvY29kZT4mbWRhc2g7Zm9ybWF0IGFyZ3VtZW50IGxpc3Q8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1N0cmluZ3MiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj41IFN0cmluZ3MgYW5kIE1lbW9yeSAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0cmluZy5oPC9zcGFuPjwvc2FtcD4pPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9ImJjbXAuaHRtbCNiY21wIj41LjEgPGNvZGU+YmNtcDwvY29kZT4mbWRhc2g7Y29tcGFyZSB0d28gbWVtb3J5IGFyZWFzPC9hPgorPGxpPjxhIGhyZWY9ImJjb3B5Lmh0bWwjYmNvcHkiPjUuMiA8Y29kZT5iY29weTwvY29kZT4mbWRhc2g7Y29weSBtZW1vcnkgcmVnaW9uczwvYT4KKzxsaT48YSBocmVmPSJiemVyby5odG1sI2J6ZXJvIj41LjMgPGNvZGU+Ynplcm88L2NvZGU+Jm1kYXNoO2luaXRpYWxpemUgbWVtb3J5IHRvIHplcm88L2E+Cis8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCNpbmRleCI+NS40IDxjb2RlPmluZGV4PC9jb2RlPiZtZGFzaDtzZWFyY2ggZm9yIGNoYXJhY3RlciBpbiBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0ibWVtY2NweS5odG1sI21lbWNjcHkiPjUuNSA8Y29kZT5tZW1jY3B5PC9jb2RlPiZtZGFzaDtjb3B5IG1lbW9yeSByZWdpb25zIHdpdGggZW5kLXRva2VuIGNoZWNrPC9hPgorPGxpPjxhIGhyZWY9Im1lbWNoci5odG1sI21lbWNociI+NS42IDxjb2RlPm1lbWNocjwvY29kZT4mbWRhc2g7ZmluZCBjaGFyYWN0ZXIgaW4gbWVtb3J5PC9hPgorPGxpPjxhIGhyZWY9Im1lbWNtcC5odG1sI21lbWNtcCI+NS43IDxjb2RlPm1lbWNtcDwvY29kZT4mbWRhc2g7Y29tcGFyZSB0d28gbWVtb3J5IGFyZWFzPC9hPgorPGxpPjxhIGhyZWY9Im1lbWNweS5odG1sI21lbWNweSI+NS44IDxjb2RlPm1lbWNweTwvY29kZT4mbWRhc2g7Y29weSBtZW1vcnkgcmVnaW9uczwvYT4KKzxsaT48YSBocmVmPSJtZW1tZW0uaHRtbCNtZW1tZW0iPjUuOSA8Y29kZT5tZW1tZW08L2NvZGU+Jm1kYXNoO2ZpbmQgbWVtb3J5IHNlZ21lbnQ8L2E+Cis8bGk+PGEgaHJlZj0ibWVtbW92ZS5odG1sI21lbW1vdmUiPjUuMTAgPGNvZGU+bWVtbW92ZTwvY29kZT4mbWRhc2g7bW92ZSBwb3NzaWJseSBvdmVybGFwcGluZyBtZW1vcnk8L2E+Cis8bGk+PGEgaHJlZj0ibWVtcGNweS5odG1sI21lbXBjcHkiPjUuMTEgPGNvZGU+bWVtcGNweTwvY29kZT4mbWRhc2g7Y29weSBtZW1vcnkgcmVnaW9ucyBhbmQgcmV0dXJuIGVuZCBwb2ludGVyPC9hPgorPGxpPjxhIGhyZWY9Im1lbXNldC5odG1sI21lbXNldCI+NS4xMiA8Y29kZT5tZW1zZXQ8L2NvZGU+Jm1kYXNoO3NldCBhbiBhcmVhIG9mIG1lbW9yeTwvYT4KKzxsaT48YSBocmVmPSJyaW5kZXguaHRtbCNyaW5kZXgiPjUuMTMgPGNvZGU+cmluZGV4PC9jb2RlPiZtZGFzaDtyZXZlcnNlIHNlYXJjaCBmb3IgY2hhcmFjdGVyIGluIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJzdHBjcHkuaHRtbCNzdHBjcHkiPjUuMTQgPGNvZGU+c3RwY3B5PC9jb2RlPiZtZGFzaDtjb3B5IHN0cmluZyByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGl0cyBlbmQ8L2E+Cis8bGk+PGEgaHJlZj0ic3RwbmNweS5odG1sI3N0cG5jcHkiPjUuMTUgPGNvZGU+c3RwbmNweTwvY29kZT4mbWRhc2g7Y291bnRlZCBjb3B5IHN0cmluZyByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGl0cyBlbmQ8L2E+Cis8bGk+PGEgaHJlZj0ic3RyY2FzZWNtcC5odG1sI3N0cmNhc2VjbXAiPjUuMTYgPGNvZGU+c3RyY2FzZWNtcDwvY29kZT4mbWRhc2g7Y2FzZS1pbnNlbnNpdGl2ZSBjaGFyYWN0ZXIgc3RyaW5nIGNvbXBhcmU8L2E+Cis8bGk+PGEgaHJlZj0ic3RyY2FzZXN0ci5odG1sI3N0cmNhc2VzdHIiPjUuMTcgPGNvZGU+c3RyY2FzZXN0cjwvY29kZT4mbWRhc2g7Y2FzZS1pbnNlbnNpdGl2ZSBjaGFyYWN0ZXIgc3RyaW5nIHNlYXJjaDwvYT4KKzxsaT48YSBocmVmPSJzdHJjYXQuaHRtbCNzdHJjYXQiPjUuMTggPGNvZGU+c3RyY2F0PC9jb2RlPiZtZGFzaDtjb25jYXRlbmF0ZSBzdHJpbmdzPC9hPgorPGxpPjxhIGhyZWY9InN0cmNoci5odG1sI3N0cmNociI+NS4xOSA8Y29kZT5zdHJjaHI8L2NvZGU+Jm1kYXNoO3NlYXJjaCBmb3IgY2hhcmFjdGVyIGluIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJzdHJjbXAuaHRtbCNzdHJjbXAiPjUuMjAgPGNvZGU+c3RyY21wPC9jb2RlPiZtZGFzaDtjaGFyYWN0ZXIgc3RyaW5nIGNvbXBhcmU8L2E+Cis8bGk+PGEgaHJlZj0ic3RyY29sbC5odG1sI3N0cmNvbGwiPjUuMjEgPGNvZGU+c3RyY29sbDwvY29kZT4mbWRhc2g7bG9jYWxlLXNwZWNpZmljIGNoYXJhY3RlciBzdHJpbmcgY29tcGFyZTwvYT4KKzxsaT48YSBocmVmPSJzdHJjcHkuaHRtbCNzdHJjcHkiPjUuMjIgPGNvZGU+c3RyY3B5PC9jb2RlPiZtZGFzaDtjb3B5IHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJzdHJjc3BuLmh0bWwjc3RyY3NwbiI+NS4yMyA8Y29kZT5zdHJjc3BuPC9jb2RlPiZtZGFzaDtjb3VudCBjaGFyYWN0ZXJzIG5vdCBpbiBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0ic3RyZXJyb3IuaHRtbCNzdHJlcnJvciI+NS4yNCA8Y29kZT5zdHJlcnJvcjwvY29kZT4mbWRhc2g7Y29udmVydCBlcnJvciBudW1iZXIgdG8gc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9InN0cmVycm9yXzAwNWZyLmh0bWwjc3RyZXJyb3JfMDA1ZnIiPjUuMjUgPGNvZGU+c3RyZXJyb3JfcjwvY29kZT4mbWRhc2g7Y29udmVydCBlcnJvciBudW1iZXIgdG8gc3RyaW5nIGFuZCBjb3B5IHRvIGJ1ZmZlcjwvYT4KKzxsaT48YSBocmVmPSJzdHJsZW4uaHRtbCNzdHJsZW4iPjUuMjYgPGNvZGU+c3RybGVuPC9jb2RlPiZtZGFzaDtjaGFyYWN0ZXIgc3RyaW5nIGxlbmd0aDwvYT4KKzxsaT48YSBocmVmPSJzdHJsd3IuaHRtbCNzdHJsd3IiPjUuMjcgPGNvZGU+c3RybHdyPC9jb2RlPiZtZGFzaDtmb3JjZSBzdHJpbmcgdG8gbG93ZXJjYXNlPC9hPgorPGxpPjxhIGhyZWY9InN0cm5jYXNlY21wLmh0bWwjc3RybmNhc2VjbXAiPjUuMjggPGNvZGU+c3RybmNhc2VjbXA8L2NvZGU+Jm1kYXNoO2Nhc2UtaW5zZW5zaXRpdmUgY2hhcmFjdGVyIHN0cmluZyBjb21wYXJlPC9hPgorPGxpPjxhIGhyZWY9InN0cm5jYXQuaHRtbCNzdHJuY2F0Ij41LjI5IDxjb2RlPnN0cm5jYXQ8L2NvZGU+Jm1kYXNoO2NvbmNhdGVuYXRlIHN0cmluZ3M8L2E+Cis8bGk+PGEgaHJlZj0ic3RybmNtcC5odG1sI3N0cm5jbXAiPjUuMzAgPGNvZGU+c3RybmNtcDwvY29kZT4mbWRhc2g7Y2hhcmFjdGVyIHN0cmluZyBjb21wYXJlPC9hPgorPGxpPjxhIGhyZWY9InN0cm5jcHkuaHRtbCNzdHJuY3B5Ij41LjMxIDxjb2RlPnN0cm5jcHk8L2NvZGU+Jm1kYXNoO2NvdW50ZWQgY29weSBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0ic3Rybmxlbi5odG1sI3N0cm5sZW4iPjUuMzIgPGNvZGU+c3RybmxlbjwvY29kZT4mbWRhc2g7Y2hhcmFjdGVyIHN0cmluZyBsZW5ndGg8L2E+Cis8bGk+PGEgaHJlZj0ic3RycGJyay5odG1sI3N0cnBicmsiPjUuMzMgPGNvZGU+c3RycGJyazwvY29kZT4mbWRhc2g7ZmluZCBjaGFyYWN0ZXJzIGluIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJzdHJyY2hyLmh0bWwjc3RycmNociI+NS4zNCA8Y29kZT5zdHJyY2hyPC9jb2RlPiZtZGFzaDtyZXZlcnNlIHNlYXJjaCBmb3IgY2hhcmFjdGVyIGluIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJzdHJzaWduYWwuaHRtbCNzdHJzaWduYWwiPjUuMzUgPGNvZGU+c3Ryc2lnbmFsPC9jb2RlPiZtZGFzaDtjb252ZXJ0IHNpZ25hbCBudW1iZXIgdG8gc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9InN0cnNwbi5odG1sI3N0cnNwbiI+NS4zNiA8Y29kZT5zdHJzcG48L2NvZGU+Jm1kYXNoO2ZpbmQgaW5pdGlhbCBtYXRjaDwvYT4KKzxsaT48YSBocmVmPSJzdHJzdHIuaHRtbCNzdHJzdHIiPjUuMzcgPGNvZGU+c3Ryc3RyPC9jb2RlPiZtZGFzaDtmaW5kIHN0cmluZyBzZWdtZW50PC9hPgorPGxpPjxhIGhyZWY9InN0cnRvay5odG1sI3N0cnRvayI+NS4zOCA8Y29kZT5zdHJ0b2s8L2NvZGU+LCA8Y29kZT5zdHJ0b2tfcjwvY29kZT4sIDxjb2RlPnN0cnNlcDwvY29kZT4mbWRhc2g7Z2V0IG5leHQgdG9rZW4gZnJvbSBhIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJzdHJ1cHIuaHRtbCNzdHJ1cHIiPjUuMzkgPGNvZGU+c3RydXByPC9jb2RlPiZtZGFzaDtmb3JjZSBzdHJpbmcgdG8gdXBwZXJjYXNlPC9hPgorPGxpPjxhIGhyZWY9InN0cnhmcm0uaHRtbCNzdHJ4ZnJtIj41LjQwIDxjb2RlPnN0cnhmcm08L2NvZGU+Jm1kYXNoO3RyYW5zZm9ybSBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0ic3dhYi5odG1sI3N3YWIiPjUuNDEgPGNvZGU+c3dhYjwvY29kZT4mbWRhc2g7c3dhcCBhZGphY2VudCBieXRlczwvYT4KKzxsaT48YSBocmVmPSJ3Y3NjYXNlY21wLmh0bWwjd2NzY2FzZWNtcCI+NS40MiA8Y29kZT53Y3NjYXNlY21wPC9jb2RlPiZtZGFzaDtjYXNlLWluc2Vuc2l0aXZlIHdpZGUgY2hhcmFjdGVyIHN0cmluZyBjb21wYXJlPC9hPgorPGxpPjxhIGhyZWY9Indjc2R1cC5odG1sI3djc2R1cCI+NS40MyA8Y29kZT53Y3NkdXA8L2NvZGU+Jm1kYXNoO3dpZGUgY2hhcmFjdGVyIHN0cmluZyBkdXBsaWNhdGU8L2E+Cis8bGk+PGEgaHJlZj0id2NzbmNhc2VjbXAuaHRtbCN3Y3NuY2FzZWNtcCI+NS40NCA8Y29kZT53Y3NuY2FzZWNtcDwvY29kZT4mbWRhc2g7Y2FzZS1pbnNlbnNpdGl2ZSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgY29tcGFyZTwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfV2NoYXItc3RyaW5ncyIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPjYgV2lkZSBDaGFyYWN0ZXIgU3RyaW5ncyAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPndjaGFyLmg8L3NwYW4+PC9zYW1wPik8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0id21lbWNoci5odG1sI3dtZW1jaHIiPjYuMSA8Y29kZT53bWVtY2hyPC9jb2RlPiZtZGFzaDtmaW5kIGEgd2lkZSBjaGFyYWN0ZXIgaW4gbWVtb3J5PC9hPgorPGxpPjxhIGhyZWY9IndtZW1jbXAuaHRtbCN3bWVtY21wIj42LjIgPGNvZGU+d21lbWNtcDwvY29kZT4mbWRhc2g7Y29tcGFyZSB3aWRlIGNoYXJhY3RlcnMgaW4gbWVtb3J5PC9hPgorPGxpPjxhIGhyZWY9IndtZW1jcHkuaHRtbCN3bWVtY3B5Ij42LjMgPGNvZGU+d21lbWNweTwvY29kZT4mbWRhc2g7Y29weSB3aWRlIGNoYXJhY3RlcnMgaW4gbWVtb3J5PC9hPgorPGxpPjxhIGhyZWY9IndtZW1tb3ZlLmh0bWwjd21lbW1vdmUiPjYuNCA8Y29kZT53bWVtbW92ZTwvY29kZT4mbWRhc2g7Y29weSB3aWRlIGNoYXJhY3RlcnMgaW4gbWVtb3J5IHdpdGggb3ZlcmxhcHBpbmcgYXJlYXM8L2E+Cis8bGk+PGEgaHJlZj0id21lbXNldC5odG1sI3dtZW1zZXQiPjYuNSA8Y29kZT53bWVtc2V0PC9jb2RlPiZtZGFzaDtzZXQgd2lkZSBjaGFyYWN0ZXJzIGluIG1lbW9yeTwvYT4KKzxsaT48YSBocmVmPSJ3Y3NjYXQuaHRtbCN3Y3NjYXQiPjYuNiA8Y29kZT53Y3NjYXQ8L2NvZGU+Jm1kYXNoO2NvbmNhdGVuYXRlIHR3byB3aWRlLWNoYXJhY3RlciBzdHJpbmdzPC9hPgorPGxpPjxhIGhyZWY9Indjc2Noci5odG1sI3djc2NociI+Ni43IDxjb2RlPndjc2NocjwvY29kZT4mbWRhc2g7d2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHNjYW5uaW5nIG9wZXJhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJ3Y3NjbXAuaHRtbCN3Y3NjbXAiPjYuOCA8Y29kZT53Y3NjbXA8L2NvZGU+Jm1kYXNoO2NvbXBhcmUgdHdvIHdpZGUtY2hhcmFjdGVyIHN0cmluZ3M8L2E+Cis8bGk+PGEgaHJlZj0id2NzY29sbC5odG1sI3djc2NvbGwiPjYuOSA8Y29kZT53Y3Njb2xsPC9jb2RlPiZtZGFzaDtsb2NhbGUtc3BlY2lmaWMgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIGNvbXBhcmU8L2E+Cis8bGk+PGEgaHJlZj0id2NzY3B5Lmh0bWwjd2NzY3B5Ij42LjEwIDxjb2RlPndjc2NweTwvY29kZT4mbWRhc2g7Y29weSBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJ3Y3BjcHkuaHRtbCN3Y3BjcHkiPjYuMTEgPGNvZGU+d2NwY3B5PC9jb2RlPiZtZGFzaDtjb3B5IGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHJldHVybmluZyBhIHBvaW50ZXIgdG8gaXRzIGVuZDwvYT4KKzxsaT48YSBocmVmPSJ3Y3Njc3BuLmh0bWwjd2NzY3NwbiI+Ni4xMiA8Y29kZT53Y3Njc3BuPC9jb2RlPiZtZGFzaDtnZXQgbGVuZ3RoIG9mIGEgY29tcGxlbWVudGFyeSB3aWRlIHN1YnN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJ3Y3NmdGltZS5odG1sI3djc2Z0aW1lIj42LjEzIDxjb2RlPndjc2Z0aW1lPC9jb2RlPiZuZGFzaDtjb252ZXJ0IGRhdGUgYW5kIHRpbWUgdG8gYSBmb3JtYXR0ZWQgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9Indjc2xjYXQuaHRtbCN3Y3NsY2F0Ij42LjE0IDxjb2RlPndjc2xjYXQ8L2NvZGU+Jm1kYXNoO2NvbmNhdGVuYXRlIHdpZGUtY2hhcmFjdGVyIHN0cmluZ3MgdG8gc3BlY2lmaWVkIGxlbmd0aDwvYT4KKzxsaT48YSBocmVmPSJ3Y3NsY3B5Lmh0bWwjd2NzbGNweSI+Ni4xNSA8Y29kZT53Y3NsY3B5PC9jb2RlPiZtZGFzaDtjb3B5IGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHRvIHNwZWNpZmllZCBsZW5ndGg8L2E+Cis8bGk+PGEgaHJlZj0id2NzbGVuLmh0bWwjd2NzbGVuIj42LjE2IDxjb2RlPndjc2xlbjwvY29kZT4mbWRhc2g7Z2V0IHdpZGUtY2hhcmFjdGVyIHN0cmluZyBsZW5ndGg8L2E+Cis8bGk+PGEgaHJlZj0id2NzbmNhdC5odG1sI3djc25jYXQiPjYuMTcgPGNvZGU+d2NzbmNhdDwvY29kZT4mbWRhc2g7Y29uY2F0ZW5hdGUgcGFydCBvZiB0d28gd2lkZS1jaGFyYWN0ZXIgc3RyaW5nczwvYT4KKzxsaT48YSBocmVmPSJ3Y3NuY21wLmh0bWwjd2NzbmNtcCI+Ni4xOCA8Y29kZT53Y3NuY21wPC9jb2RlPiZtZGFzaDtjb21wYXJlIHBhcnQgb2YgdHdvIHdpZGUtY2hhcmFjdGVyIHN0cmluZ3M8L2E+Cis8bGk+PGEgaHJlZj0id2NzbmNweS5odG1sI3djc25jcHkiPjYuMTkgPGNvZGU+d2NzbmNweTwvY29kZT4mbWRhc2g7Y29weSBwYXJ0IG9mIGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9IndjcG5jcHkuaHRtbCN3Y3BuY3B5Ij42LjIwIDxjb2RlPndjcG5jcHk8L2NvZGU+Jm1kYXNoO2NvcHkgcGFydCBvZiBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZyByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGl0cyBlbmQ8L2E+Cis8bGk+PGEgaHJlZj0id2Nzbmxlbi5odG1sI3djc25sZW4iPjYuMjEgPGNvZGU+d2NzbmxlbjwvY29kZT4mbWRhc2g7Z2V0IGZpeGVkLXNpemUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIGxlbmd0aDwvYT4KKzxsaT48YSBocmVmPSJ3Y3NwYnJrLmh0bWwjd2NzcGJyayI+Ni4yMiA8Y29kZT53Y3NwYnJrPC9jb2RlPiZtZGFzaDsmbmRhc2g7c2NhbiB3aWRlLWNoYXJhY3RlciBzdHJpbmcgZm9yIGEgd2lkZS1jaGFyYWN0ZXIgY29kZTwvYT4KKzxsaT48YSBocmVmPSJ3Y3NyY2hyLmh0bWwjd2NzcmNociI+Ni4yMyA8Y29kZT53Y3NyY2hyPC9jb2RlPiZtZGFzaDt3aWRlLWNoYXJhY3RlciBzdHJpbmcgc2Nhbm5pbmcgb3BlcmF0aW9uPC9hPgorPGxpPjxhIGhyZWY9Indjc3Nwbi5odG1sI3djc3NwbiI+Ni4yNCA8Y29kZT53Y3NzcG48L2NvZGU+Jm1kYXNoO2dldCBsZW5ndGggb2YgYSB3aWRlIHN1YnN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJ3Y3NzdHIuaHRtbCN3Y3NzdHIiPjYuMjUgPGNvZGU+d2Nzc3RyPC9jb2RlPiZtZGFzaDtmaW5kIGEgd2lkZS1jaGFyYWN0ZXIgc3Vic3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9Indjc3Rvay5odG1sI3djc3RvayI+Ni4yNiA8Y29kZT53Y3N0b2s8L2NvZGU+Jm1kYXNoO2dldCBuZXh0IHRva2VuIGZyb20gYSBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0id2Nzd2lkdGguaHRtbCN3Y3N3aWR0aCI+Ni4yNyA8Y29kZT53Y3N3aWR0aDwvY29kZT4mbWRhc2g7bnVtYmVyIG9mIGNvbHVtbiBwb3NpdGlvbnMgb2YgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmc8L2E+Cis8bGk+PGEgaHJlZj0id2NzeGZybS5odG1sI3djc3hmcm0iPjYuMjggPGNvZGU+d2NzeGZybTwvY29kZT4mbWRhc2g7bG9jYWxlLXNwZWNpZmljIHdpZGUtY2hhcmFjdGVyIHN0cmluZyB0cmFuc2Zvcm1hdGlvbjwvYT4KKzxsaT48YSBocmVmPSJ3Y3dpZHRoLmh0bWwjd2N3aWR0aCI+Ni4yOSA8Y29kZT53Y3dpZHRoPC9jb2RlPiZtZGFzaDtudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyBvZiBhIHdpZGUtY2hhcmFjdGVyIGNvZGU8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1NpZ25hbHMiIGhyZWY9IlNpZ25hbHMuaHRtbCNTaWduYWxzIj43IFNpZ25hbCBIYW5kbGluZyAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnNpZ25hbC5oPC9zcGFuPjwvc2FtcD4pPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9InBzaWduYWwuaHRtbCNwc2lnbmFsIj43LjEgPGNvZGU+cHNpZ25hbDwvY29kZT4mbWRhc2g7cHJpbnQgYSBzaWduYWwgbWVzc2FnZSBvbiBzdGFuZGFyZCBlcnJvcjwvYT4KKzxsaT48YSBocmVmPSJyYWlzZS5odG1sI3JhaXNlIj43LjIgPGNvZGU+cmFpc2U8L2NvZGU+Jm1kYXNoO3NlbmQgYSBzaWduYWw8L2E+Cis8bGk+PGEgaHJlZj0ic2lnbmFsLmh0bWwjc2lnbmFsIj43LjMgPGNvZGU+c2lnbmFsPC9jb2RlPiZtZGFzaDtzcGVjaWZ5IGhhbmRsZXIgc3Vicm91dGluZSBmb3IgYSBzaWduYWw8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1RpbWVmbnMiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIj44IFRpbWUgRnVuY3Rpb25zICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+dGltZS5oPC9zcGFuPjwvc2FtcD4pPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9ImFzY3RpbWUuaHRtbCNhc2N0aW1lIj44LjEgPGNvZGU+YXNjdGltZTwvY29kZT4mbWRhc2g7Zm9ybWF0IHRpbWUgYXMgc3RyaW5nPC9hPgorPGxpPjxhIGhyZWY9ImNsb2NrLmh0bWwjY2xvY2siPjguMiA8Y29kZT5jbG9jazwvY29kZT4mbWRhc2g7Y3VtdWxhdGl2ZSBwcm9jZXNzb3IgdGltZTwvYT4KKzxsaT48YSBocmVmPSJjdGltZS5odG1sI2N0aW1lIj44LjMgPGNvZGU+Y3RpbWU8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgdGltZSB0byBsb2NhbCBhbmQgZm9ybWF0IGFzIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJkaWZmdGltZS5odG1sI2RpZmZ0aW1lIj44LjQgPGNvZGU+ZGlmZnRpbWU8L2NvZGU+Jm1kYXNoO3N1YnRyYWN0IHR3byB0aW1lczwvYT4KKzxsaT48YSBocmVmPSJnbXRpbWUuaHRtbCNnbXRpbWUiPjguNSA8Y29kZT5nbXRpbWU8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgdGltZSB0byBVVEMgdHJhZGl0aW9uYWwgZm9ybTwvYT4KKzxsaT48YSBocmVmPSJsb2NhbHRpbWUuaHRtbCNsb2NhbHRpbWUiPjguNiA8Y29kZT5sb2NhbHRpbWU8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgdGltZSB0byBsb2NhbCByZXByZXNlbnRhdGlvbjwvYT4KKzxsaT48YSBocmVmPSJta3RpbWUuaHRtbCNta3RpbWUiPjguNyA8Y29kZT5ta3RpbWU8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgdGltZSB0byBhcml0aG1ldGljIHJlcHJlc2VudGF0aW9uPC9hPgorPGxpPjxhIGhyZWY9InN0cmZ0aW1lLmh0bWwjc3RyZnRpbWUiPjguOCA8Y29kZT5zdHJmdGltZTwvY29kZT4mbWRhc2g7Y29udmVydCBkYXRlIGFuZCB0aW1lIHRvIGEgZm9ybWF0dGVkIHN0cmluZzwvYT4KKzxsaT48YSBocmVmPSJ0aW1lLmh0bWwjdGltZSI+OC45IDxjb2RlPnRpbWU8L2NvZGU+Jm1kYXNoO2dldCBjdXJyZW50IGNhbGVuZGFyIHRpbWUgKGFzIHNpbmdsZSBudW1iZXIpPC9hPgorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZ0el8wMDVmbG9jay5odG1sI18wMDVmXzAwNWZ0el8wMDVmbG9jayI+OC4xMCA8Y29kZT5fX3R6X2xvY2s8L2NvZGU+LCA8Y29kZT5fX3R6X3VubG9jazwvY29kZT4mbWRhc2g7bG9jayB0aW1lIHpvbmUgZ2xvYmFsIHZhcmlhYmxlczwvYT4KKzxsaT48YSBocmVmPSJ0enNldC5odG1sI3R6c2V0Ij44LjExIDxjb2RlPnR6c2V0PC9jb2RlPiZtZGFzaDtzZXQgdGltZXpvbmUgY2hhcmFjdGVyaXN0aWNzIGZyb20gVFogZW52aXJvbm1lbnQgdmFyaWFibGU8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX0xvY2FsZSIgaHJlZj0iTG9jYWxlLmh0bWwjTG9jYWxlIj45IExvY2FsZSAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxvY2FsZS5oPC9zcGFuPjwvc2FtcD4pPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9InNldGxvY2FsZS5odG1sI3NldGxvY2FsZSI+OS4xIDxjb2RlPnNldGxvY2FsZTwvY29kZT4sIDxjb2RlPmxvY2FsZWNvbnY8L2NvZGU+Jm1kYXNoO3NlbGVjdCBvciBxdWVyeSBsb2NhbGU8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1JlZW50cmFuY3kiIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij4xMCBSZWVudHJhbmN5PC9hPgorPGxpPjxhIG5hbWU9InRvY19NaXNjIiBocmVmPSJNaXNjLmh0bWwjTWlzYyI+MTEgTWlzY2VsbGFuZW91cyBNYWNyb3MgYW5kIEZ1bmN0aW9uczwvYT4KKzx1bD4KKzxsaT48YSBocmVmPSJmZnMuaHRtbCNmZnMiPjExLjEgPGNvZGU+ZmZzPC9jb2RlPiZtZGFzaDtmaW5kIGZpcnN0IGJpdCBzZXQgaW4gYSB3b3JkPC9hPgorPGxpPjxhIGhyZWY9InVuY3RybC5odG1sI3VuY3RybCI+MTEuMiA8Y29kZT51bmN0cmw8L2NvZGU+Jm1kYXNoO2dldCBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBjaGFyYWN0ZXI8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1N5c2NhbGxzIiBocmVmPSJTeXNjYWxscy5odG1sI1N5c2NhbGxzIj4xMiBTeXN0ZW0gQ2FsbHM8L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+MTIuMSBEZWZpbml0aW9ucyBmb3IgT1MgaW50ZXJmYWNlPC9hPgorPGxpPjxhIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI1JlZW50cmFudC1TeXNjYWxscyI+MTIuMiBSZWVudHJhbnQgY292ZXJzIGZvciBPUyBzdWJyb3V0aW5lczwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQXJnbGlzdHMiIGhyZWY9IkFyZ2xpc3RzLmh0bWwjQXJnbGlzdHMiPjEzIFZhcmlhYmxlIEFyZ3VtZW50IExpc3RzPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9IlN0ZGFyZy5odG1sI1N0ZGFyZyI+MTMuMSBBTlNJLXN0YW5kYXJkIG1hY3JvcywgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGFyZy5oPC9zcGFuPjwvc2FtcD48L2E+Cis8dWw+Cis8bGk+PGEgaHJlZj0idmFfMDA1ZnN0YXJ0Lmh0bWwjdmFfMDA1ZnN0YXJ0Ij4xMy4xLjEgSW5pdGlhbGl6ZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0PC9hPgorPGxpPjxhIGhyZWY9InZhXzAwNWZhcmcuaHRtbCN2YV8wMDVmYXJnIj4xMy4xLjIgRXh0cmFjdCBhIHZhbHVlIGZyb20gYXJndW1lbnQgbGlzdDwvYT4KKzxsaT48YSBocmVmPSJ2YV8wMDVmZW5kLmh0bWwjdmFfMDA1ZmVuZCI+MTMuMS4zIEFiYW5kb24gYSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0PC9hPgorPC9saT48L3VsPgorPGxpPjxhIGhyZWY9IlZhcmFyZ3MuaHRtbCNWYXJhcmdzIj4xMy4yIFRyYWRpdGlvbmFsIG1hY3JvcywgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnZhcmFyZ3MuaDwvc3Bhbj48L3NhbXA+PC9hPgorPHVsPgorPGxpPjxhIGhyZWY9InZhXzAwNWZhbGlzdC5odG1sI3ZhXzAwNWZhbGlzdCI+MTMuMi4xIERlY2xhcmUgdmFyaWFibGUgYXJndW1lbnRzPC9hPgorPGxpPjxhIGhyZWY9InZhXzAwNWZzdGFydF8wMDJkdHJhZC5odG1sI3ZhXzAwNWZzdGFydF8wMDJkdHJhZCI+MTMuMi4yIEluaXRpYWxpemUgdmFyaWFibGUgYXJndW1lbnQgbGlzdDwvYT4KKzxsaT48YSBocmVmPSJ2YV8wMDVmYXJnXzAwMmR0cmFkLmh0bWwjdmFfMDA1ZmFyZ18wMDJkdHJhZCI+MTMuMi4zIEV4dHJhY3QgYSB2YWx1ZSBmcm9tIGFyZ3VtZW50IGxpc3Q8L2E+Cis8bGk+PGEgaHJlZj0idmFfMDA1ZmVuZF8wMDJkdHJhZC5odG1sI3ZhXzAwNWZlbmRfMDAyZHRyYWQiPjEzLjIuNCBBYmFuZG9uIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdDwvYT4KKzwvbGk+PC91bD4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfRG9jdW1lbnQtSW5kZXgiIGhyZWY9IkRvY3VtZW50LUluZGV4Lmh0bWwjRG9jdW1lbnQtSW5kZXgiPkRvY3VtZW50IEluZGV4PC9hPgorPC9saT48L3VsPgorPC9kaXY+CisKKzwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL0ludHJvZHVjdGlvbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvSW50cm9kdWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVhMWJhMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL0ludHJvZHVjdGlvbi5odG1sCkBAIC0wLDAgKzEsNTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPkludHJvZHVjdGlvbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpbmRleC5odG1sI1RvcCIgdGl0bGU9IlRvcCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xIEludHJvZHVjdGlvbjwvaDI+CisKKzxwPlRoaXMgcmVmZXJlbmNlIG1hbnVhbCBkZXNjcmliZXMgdGhlIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgUmVkIEhhdAorJmxkcXVvO25ld2xpYiZyZHF1bzsgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQgQU5TSSBDIGxpYnJhcnkuICBUaGlzIGRvY3VtZW50IGlzIG5vdAoraW50ZW5kZWQgYXMgYW4gb3ZlcnZpZXcgb3IgYSB0dXRvcmlhbCBmb3IgdGhlIEMgbGlicmFyeS4gIEVhY2ggbGlicmFyeQorZnVuY3Rpb24gaXMgbGlzdGVkIHdpdGggYSBzeW5vcHNpcyBvZiBpdHMgdXNlLCBhIGJyaWVmIGRlc2NyaXB0aW9uLAorcmV0dXJuIHZhbHVlcyAoaW5jbHVkaW5nIGVycm9yIGhhbmRsaW5nKSwgYW5kIHBvcnRhYmlsaXR5IGlzc3Vlcy4KKworICAgPHA+U29tZSBvZiB0aGUgbGlicmFyeSBmdW5jdGlvbnMgZGVwZW5kIG9uIHN1cHBvcnQgZnJvbSB0aGUgdW5kZXJseWluZworb3BlcmF0aW5nIHN5c3RlbSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gZXZlcnkgcGxhdGZvcm0uICBGb3IKK2VtYmVkZGVkIHN5c3RlbXMgaW4gcGFydGljdWxhciwgbWFueSBvZiB0aGVzZSB1bmRlcmx5aW5nIG9wZXJhdGluZworc3lzdGVtIHNlcnZpY2VzIG1heSBub3QgYmUgYXZhaWxhYmxlIG9yIG1heSBub3QgYmUgZnVsbHkgZnVuY3Rpb25hbC4gCitUaGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbSBzdWJyb3V0aW5lcyByZXF1aXJlZCBmb3IgYSBwYXJ0aWN1bGFyCitsaWJyYXJ5IGZ1bmN0aW9uIGFyZSBsaXN0ZWQgaW4gdGhlICZsZHF1bztQb3J0YWJpbGl0eSZyZHF1bzsgc2VjdGlvbiBvZiB0aGUKK2Z1bmN0aW9uIGRlc2NyaXB0aW9uLiAgU2VlIDxhIGhyZWY9IlN5c2NhbGxzLmh0bWwjU3lzY2FsbHMiPlN5c2NhbGxzPC9hPiwgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCityZWxldmFudCBvcGVyYXRpbmcgc3lzdGVtIGNhbGxzLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9Mb2NhbGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL0xvY2FsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTg3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9Mb2NhbGUuaHRtbApAQCAtMCwwICsxLDEzNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+TG9jYWxlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIiB0aXRsZT0iVGltZWZucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5IiB0aXRsZT0iUmVlbnRyYW5jeSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iTG9jYWxlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij5SZWVudHJhbmN5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiPlRpbWVmbnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+OSBMb2NhbGUgKDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5sb2NhbGUuaDwvc3Bhbj48L3NhbXA+KTwvaDI+CisKKzxwPkEgPGRmbj5sb2NhbGU8L2Rmbj4gaXMgdGhlIG5hbWUgZm9yIGEgY29sbGVjdGlvbiBvZiBwYXJhbWV0ZXJzIChhZmZlY3RpbmcKK2NvbGxhdGluZyBzZXF1ZW5jZXMgYW5kIGZvcm1hdHRpbmcgY29udmVudGlvbnMpIHRoYXQgbWF5IGJlIGRpZmZlcmVudAorZGVwZW5kaW5nIG9uIGxvY2F0aW9uIG9yIGN1bHR1cmUuICBUaGUgPGNvZGU+IkMiPC9jb2RlPiBsb2NhbGUgaXMgdGhlIG9ubHkKK29uZSBkZWZpbmVkIGluIHRoZSBBTlNJIEMgc3RhbmRhcmQuCisKKyAgIDxwPlRoaXMgaXMgYSBtaW5pbWFsIGltcGxlbWVudGF0aW9uLCBzdXBwb3J0aW5nIG9ubHkgdGhlIHJlcXVpcmVkIDxjb2RlPiJDIjwvY29kZT4KK3ZhbHVlIGZvciBsb2NhbGU7IHN0cmluZ3MgcmVwcmVzZW50aW5nIG90aGVyIGxvY2FsZXMgYXJlIG5vdAoraG9ub3JlZC4gICg8Y29kZT4iIjwvY29kZT4gaXMgYWxzbyBhY2NlcHRlZDsgaXQgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBsb2NhbGUKK2ZvciBhbiBpbXBsZW1lbnRhdGlvbiwgaGVyZSBlcXVpdmFsZW50IHRvIDxjb2RlPiJDIjwvY29kZT4uCisKKyAgIDxwPjxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5sb2NhbGUuaDwvc3Bhbj48L3NhbXA+IGRlZmluZXMgdGhlIHN0cnVjdHVyZSA8Y29kZT5sY29udjwvY29kZT4gdG8gY29sbGVjdCB0aGUKK2luZm9ybWF0aW9uIG9uIGEgbG9jYWxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5jaGFyICpkZWNpbWFsX3BvaW50PC9jb2RlPjxkZD5UaGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIgdXNlZCB0byBmb3JtYXQgJmxkcXVvO29yZGluYXJ5JnJkcXVvOyBudW1iZXJzIChhbGwKK251bWJlcnMgZXhjZXB0IHRob3NlIHJlZmVycmluZyB0byBhbW91bnRzIG9mIG1vbmV5KS4gIDxjb2RlPiIuIjwvY29kZT4gaW4gdGhlCitDIGxvY2FsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNoYXIgKnRob3VzYW5kc19zZXA8L2NvZGU+PGRkPlRoZSBjaGFyYWN0ZXIgKGlmIGFueSkgdXNlZCB0byBzZXBhcmF0ZSBncm91cHMgb2YgZGlnaXRzLCB3aGVuCitmb3JtYXR0aW5nIG9yZGluYXJ5IG51bWJlcnMuIAorPGNvZGU+IiI8L2NvZGU+IGluIHRoZSBDIGxvY2FsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNoYXIgKmdyb3VwaW5nPC9jb2RlPjxkZD5TcGVjaWZpY2F0aW9ucyBmb3IgaG93IG1hbnkgZGlnaXRzIHRvIGdyb3VwIChpZiBhbnkgZ3JvdXBpbmcgaXMgZG9uZSBhdAorYWxsKSB3aGVuIGZvcm1hdHRpbmcgb3JkaW5hcnkgbnVtYmVycy4gIFRoZSA8ZW0+bnVtZXJpYyB2YWx1ZTwvZW0+IG9mIGVhY2gKK2NoYXJhY3RlciBpbiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBkaWdpdHMgZm9yIHRoZSBuZXh0Citncm91cCwgYW5kIGEgdmFsdWUgb2YgPGNvZGU+MDwvY29kZT4gKHRoYXQgaXMsIHRoZSBzdHJpbmcncyB0cmFpbGluZworPGNvZGU+TlVMTDwvY29kZT4pIG1lYW5zIHRvIGNvbnRpbnVlIGdyb3VwaW5nIGRpZ2l0cyB1c2luZyB0aGUgbGFzdCB2YWx1ZQorc3BlY2lmaWVkLiAgVXNlIDxjb2RlPkNIQVJfTUFYPC9jb2RlPiB0byBpbmRpY2F0ZSB0aGF0IG5vIGZ1cnRoZXIgZ3JvdXBpbmcgaXMKK2Rlc2lyZWQuICA8Y29kZT4iIjwvY29kZT4gaW4gdGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciAqaW50X2N1cnJfc3ltYm9sPC9jb2RlPjxkZD5UaGUgaW50ZXJuYXRpb25hbCBjdXJyZW5jeSBzeW1ib2wgKGZpcnN0IHRocmVlIGNoYXJhY3RlcnMpLCBpZiBhbnksIGFuZAordGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGl0IGZyb20gbnVtYmVycy4gCis8Y29kZT4iIjwvY29kZT4gaW4gdGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciAqY3VycmVuY3lfc3ltYm9sPC9jb2RlPjxkZD5UaGUgbG9jYWwgY3VycmVuY3kgc3ltYm9sLCBpZiBhbnkuIAorPGNvZGU+IiI8L2NvZGU+IGluIHRoZSBDIGxvY2FsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNoYXIgKm1vbl9kZWNpbWFsX3BvaW50PC9jb2RlPjxkZD5UaGUgc3ltYm9sIHVzZWQgdG8gZGVsaW1pdCBmcmFjdGlvbnMgaW4gYW1vdW50cyBvZiBtb25leS4gCis8Y29kZT4iIjwvY29kZT4gaW4gdGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciAqbW9uX3Rob3VzYW5kc19zZXA8L2NvZGU+PGRkPlNpbWlsYXIgdG8gPGNvZGU+dGhvdXNhbmRzX3NlcDwvY29kZT4sIGJ1dCB1c2VkIGZvciBhbW91bnRzIG9mIG1vbmV5LiAKKzxjb2RlPiIiPC9jb2RlPiBpbiB0aGUgQyBsb2NhbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5jaGFyICptb25fZ3JvdXBpbmc8L2NvZGU+PGRkPlNpbWlsYXIgdG8gPGNvZGU+Z3JvdXBpbmc8L2NvZGU+LCBidXQgdXNlZCBmb3IgYW1vdW50cyBvZiBtb25leS4gCis8Y29kZT4iIjwvY29kZT4gaW4gdGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciAqcG9zaXRpdmVfc2lnbjwvY29kZT48ZGQ+QSBzdHJpbmcgdG8gZmxhZyBwb3NpdGl2ZSBhbW91bnRzIG9mIG1vbmV5IHdoZW4gZm9ybWF0dGluZy4gCis8Y29kZT4iIjwvY29kZT4gaW4gdGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciAqbmVnYXRpdmVfc2lnbjwvY29kZT48ZGQ+QSBzdHJpbmcgdG8gZmxhZyBuZWdhdGl2ZSBhbW91bnRzIG9mIG1vbmV5IHdoZW4gZm9ybWF0dGluZy4gCis8Y29kZT4iIjwvY29kZT4gaW4gdGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciBpbnRfZnJhY19kaWdpdHM8L2NvZGU+PGRkPlRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGRpc3BsYXkgd2hlbiBmb3JtYXR0aW5nIGFtb3VudHMgb2YgbW9uZXkgdG8KK2ludGVybmF0aW9uYWwgY29udmVudGlvbnMuIAorPGNvZGU+Q0hBUl9NQVg8L2NvZGU+ICh0aGUgbGFyZ2VzdCBudW1iZXIgcmVwcmVzZW50YWJsZSBhcyBhIDxjb2RlPmNoYXI8L2NvZGU+KSBpbgordGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciBmcmFjX2RpZ2l0czwvY29kZT48ZGQ+VGhlIG51bWJlciBvZiBkaWdpdHMgdG8gZGlzcGxheSB3aGVuIGZvcm1hdHRpbmcgYW1vdW50cyBvZiBtb25leSB0bworbG9jYWwgY29udmVudGlvbnMuIAorPGNvZGU+Q0hBUl9NQVg8L2NvZGU+IGluIHRoZSBDIGxvY2FsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNoYXIgcF9jc19wcmVjZWRlczwvY29kZT48ZGQ+PGNvZGU+MTwvY29kZT4gaW5kaWNhdGVzIHRoZSBsb2NhbCBjdXJyZW5jeSBzeW1ib2wgaXMgdXNlZCBiZWZvcmUgYQorPGVtPnBvc2l0aXZlIG9yIHplcm88L2VtPiBmb3JtYXR0ZWQgYW1vdW50IG9mIG1vbmV5OyA8Y29kZT4wPC9jb2RlPiBpbmRpY2F0ZXMKK3RoZSBjdXJyZW5jeSBzeW1ib2wgaXMgcGxhY2VkIGFmdGVyIHRoZSBmb3JtYXR0ZWQgbnVtYmVyLiAKKzxjb2RlPkNIQVJfTUFYPC9jb2RlPiBpbiB0aGUgQyBsb2NhbGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5jaGFyIHBfc2VwX2J5X3NwYWNlPC9jb2RlPjxkZD48Y29kZT4xPC9jb2RlPiBpbmRpY2F0ZXMgdGhlIGxvY2FsIGN1cnJlbmN5IHN5bWJvbCBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tCis8ZW0+cG9zaXRpdmUgb3IgemVybzwvZW0+IG51bWJlcnMgYnkgYSBzcGFjZTsgPGNvZGU+MDwvY29kZT4gaW5kaWNhdGVzIHRoYXQgaXQKK2lzIGltbWVkaWF0ZWx5IGFkamFjZW50IHRvIG51bWJlcnMuIAorPGNvZGU+Q0hBUl9NQVg8L2NvZGU+IGluIHRoZSBDIGxvY2FsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNoYXIgbl9jc19wcmVjZWRlczwvY29kZT48ZGQ+PGNvZGU+MTwvY29kZT4gaW5kaWNhdGVzIHRoZSBsb2NhbCBjdXJyZW5jeSBzeW1ib2wgaXMgdXNlZCBiZWZvcmUgYQorPGVtPm5lZ2F0aXZlPC9lbT4gZm9ybWF0dGVkIGFtb3VudCBvZiBtb25leTsgPGNvZGU+MDwvY29kZT4gaW5kaWNhdGVzCit0aGUgY3VycmVuY3kgc3ltYm9sIGlzIHBsYWNlZCBhZnRlciB0aGUgZm9ybWF0dGVkIG51bWJlci4gCis8Y29kZT5DSEFSX01BWDwvY29kZT4gaW4gdGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciBuX3NlcF9ieV9zcGFjZTwvY29kZT48ZGQ+PGNvZGU+MTwvY29kZT4gaW5kaWNhdGVzIHRoZSBsb2NhbCBjdXJyZW5jeSBzeW1ib2wgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbQorPGVtPm5lZ2F0aXZlPC9lbT4gbnVtYmVycyBieSBhIHNwYWNlOyA8Y29kZT4wPC9jb2RlPiBpbmRpY2F0ZXMgdGhhdCBpdAoraXMgaW1tZWRpYXRlbHkgYWRqYWNlbnQgdG8gbnVtYmVycy4gCis8Y29kZT5DSEFSX01BWDwvY29kZT4gaW4gdGhlIEMgbG9jYWxlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2hhciBwX3NpZ25fcG9zbjwvY29kZT48ZGQ+Q29udHJvbHMgdGhlIHBvc2l0aW9uIG9mIHRoZSA8ZW0+cG9zaXRpdmU8L2VtPiBzaWduIGZvcgorbnVtYmVycyByZXByZXNlbnRpbmcgbW9uZXkuICA8Y29kZT4wPC9jb2RlPiBtZWFucyBwYXJlbnRoZXNlcyBzdXJyb3VuZCB0aGUKK251bWJlcjsgPGNvZGU+MTwvY29kZT4gbWVhbnMgdGhlIHNpZ24gaXMgcGxhY2VkIGJlZm9yZSBib3RoIHRoZSBudW1iZXIgYW5kIHRoZQorY3VycmVuY3kgc3ltYm9sOyA8Y29kZT4yPC9jb2RlPiBtZWFucyB0aGUgc2lnbiBpcyBwbGFjZWQgYWZ0ZXIgYm90aCB0aGUgbnVtYmVyCithbmQgdGhlIGN1cnJlbmN5IHN5bWJvbDsgPGNvZGU+MzwvY29kZT4gbWVhbnMgdGhlIHNpZ24gaXMgcGxhY2VkIGp1c3QgYmVmb3JlCit0aGUgY3VycmVuY3kgc3ltYm9sOyBhbmQgPGNvZGU+NDwvY29kZT4gbWVhbnMgdGhlIHNpZ24gaXMgcGxhY2VkIGp1c3QgYWZ0ZXIKK3RoZSBjdXJyZW5jeSBzeW1ib2wuIAorPGNvZGU+Q0hBUl9NQVg8L2NvZGU+IGluIHRoZSBDIGxvY2FsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPmNoYXIgbl9zaWduX3Bvc248L2NvZGU+PGRkPkNvbnRyb2xzIHRoZSBwb3NpdGlvbiBvZiB0aGUgPGVtPm5lZ2F0aXZlPC9lbT4gc2lnbiBmb3IgbnVtYmVycworcmVwcmVzZW50aW5nIG1vbmV5LCB1c2luZyB0aGUgc2FtZSBydWxlcyBhcyA8Y29kZT5wX3NpZ25fcG9zbjwvY29kZT4uIAorPGNvZGU+Q0hBUl9NQVg8L2NvZGU+IGluIHRoZSBDIGxvY2FsZS4gCis8L2RsPgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0ic2V0bG9jYWxlLmh0bWwjc2V0bG9jYWxlIj5zZXRsb2NhbGU8L2E+OiAgIFNlbGVjdCBvciBxdWVyeSBsb2NhbGUKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL01pc2MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL01pc2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTFjYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvTWlzYy5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPk1pc2MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUmVlbnRyYW5jeS5odG1sI1JlZW50cmFuY3kiIHRpdGxlPSJSZWVudHJhbmN5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iU3lzY2FsbHMuaHRtbCNTeXNjYWxscyIgdGl0bGU9IlN5c2NhbGxzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNaXNjIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN5c2NhbGxzLmh0bWwjU3lzY2FsbHMiPlN5c2NhbGxzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iUmVlbnRyYW5jeS5odG1sI1JlZW50cmFuY3kiPlJlZW50cmFuY3k8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+MTEgTWlzY2VsbGFuZW91cyBNYWNyb3MgYW5kIEZ1bmN0aW9uczwvaDI+CisKKzxwPlRoaXMgY2hhcHRlciBkZXNjcmliZXMgbWlzY2VsbGFuZW91cyByb3V0aW5lcyBub3QgY292ZXJlZCBlbHNld2hlcmUuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJmZnMuaHRtbCNmZnMiPmZmczwvYT46ICAgICAgIFJldHVybiBmaXJzdCBiaXQgc2V0IGluIGEgd29yZAorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0idW5jdHJsLmh0bWwjdW5jdHJsIj51bmN0cmw8L2E+OiAgICBSZXR1cm4gcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hhcmFjdGVyCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9SZWVudHJhbmN5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9SZWVudHJhbmN5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjZDFjZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1JlZW50cmFuY3kuaHRtbApAQCAtMCwwICsxLDEzNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+UmVlbnRyYW5jeSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJMb2NhbGUuaHRtbCNMb2NhbGUiIHRpdGxlPSJMb2NhbGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJNaXNjLmh0bWwjTWlzYyIgdGl0bGU9Ik1pc2MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlJlZW50cmFuY3kiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iTWlzYy5odG1sI01pc2MiPk1pc2M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJMb2NhbGUuaHRtbCNMb2NhbGUiPkxvY2FsZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMCBSZWVudHJhbmN5PC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmVlbnRyYW5jeS00NDkiPjwvYT5SZWVudHJhbmN5IGlzIGEgY2hhcmFjdGVyaXN0aWMgb2YgbGlicmFyeSBmdW5jdGlvbnMgd2hpY2ggYWxsb3dzIG11bHRpcGxlCitwcm9jZXNzZXMgdG8gdXNlIHRoZSBzYW1lIGFkZHJlc3Mgc3BhY2Ugd2l0aCBhc3N1cmFuY2UgdGhhdCB0aGUgdmFsdWVzIHN0b3JlZAoraW4gdGhvc2Ugc3BhY2VzIHdpbGwgcmVtYWluIGNvbnN0YW50IGJldHdlZW4gY2FsbHMuIFRoZSBSZWQgSGF0CituZXdsaWIgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIGVuc3VyZXMgdGhhdAord2hlbmV2ZXIgcG9zc2libGUsIHRoZXNlIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSByZWVudHJhbnQuICBIb3dldmVyLAordGhlcmUgYXJlIHNvbWUgZnVuY3Rpb25zIHRoYXQgY2FuIG5vdCBiZSB0cml2aWFsbHkgbWFkZSByZWVudHJhbnQuIAorSG9va3MgaGF2ZSBiZWVuIHByb3ZpZGVkIHRvIGFsbG93IHlvdSB0byB1c2UgdGhlc2UgZnVuY3Rpb25zIGluIGEgZnVsbHkKK3JlZW50cmFudCBmYXNoaW9uLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnJlZW50LTQ1MCI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZW50XzAwMmVoLTQ1MSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlZW50cmFuY3ktc3RydWN0dXJlLTQ1MiI+PC9hPlRoZXNlIGhvb2tzIHVzZSB0aGUgc3RydWN0dXJlIDxjb2RlPl9yZWVudDwvY29kZT4gZGVmaW5lZCBpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+cmVlbnQuaDwvc3Bhbj48L3NhbXA+LiAKK0EgdmFyaWFibGUgZGVmaW5lZCBhcyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0cnVjdCBfcmVlbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzsgaXMgY2FsbGVkIGEgPGRmbj5yZWVudHJhbmN5CitzdHJ1Y3R1cmU8L2Rmbj4uICBBbGwgZnVuY3Rpb25zIHdoaWNoIG11c3QgbWFuaXB1bGF0ZSBnbG9iYWwgaW5mb3JtYXRpb24gYXJlCithdmFpbGFibGUgaW4gdHdvIHZlcnNpb25zLiAgVGhlIGZpcnN0IHZlcnNpb24gaGFzIHRoZSB1c3VhbCBuYW1lLCBhbmQKK3VzZXMgYSBzaW5nbGUgZ2xvYmFsIGluc3RhbmNlIG9mIHRoZSByZWVudHJhbmN5IHN0cnVjdHVyZS4gIFRoZSBzZWNvbmQKK2hhcyBhIGRpZmZlcmVudCBuYW1lLCBub3JtYWxseSBmb3JtZWQgYnkgcHJlcGVuZGluZyAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPl88L3NwYW4+PC9zYW1wPiZyc3F1bzsgYW5kCithcHBlbmRpbmcgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5fcjwvc3Bhbj48L3NhbXA+JnJzcXVvOywgYW5kIHRha2VzIGEgcG9pbnRlciB0byB0aGUgcGFydGljdWxhciByZWVudHJhbmN5CitzdHJ1Y3R1cmUgdG8gdXNlLgorCisgICA8cD5Gb3IgZXhhbXBsZSwgdGhlIGZ1bmN0aW9uIDxjb2RlPmZvcGVuPC9jb2RlPiB0YWtlcyB0d28gYXJndW1lbnRzLCA8dmFyPmZpbGU8L3Zhcj4KK2FuZCA8dmFyPm1vZGU8L3Zhcj4sIGFuZCB1c2VzIHRoZSBnbG9iYWwgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuICBUaGUgZnVuY3Rpb24KKzxjb2RlPl9mb3Blbl9yPC9jb2RlPiB0YWtlcyB0aGUgYXJndW1lbnRzLCA8dmFyPnN0cnVjdF9yZWVudDwvdmFyPiwgd2hpY2ggaXMgYQorcG9pbnRlciB0byBhbiBpbnN0YW5jZSBvZiB0aGUgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUsIDx2YXI+ZmlsZTwvdmFyPgorYW5kIDx2YXI+bW9kZTwvdmFyPi4KKworICAgPHA+VGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPnN0cnVjdCBfcmVlbnQ8L3NwYW4+PC9zYW1wPiZyc3F1bzssIGEgbm9ybWFsIG9uZSBhbmQgb25lCitmb3Igc21hbGwgbWVtb3J5IHN5c3RlbXMsIGNvbnRyb2xsZWQgYnkgdGhlIDxjb2RlPl9SRUVOVF9TTUFMTDwvY29kZT4KK2RlZmluaXRpb24gZnJvbSB0aGUgKGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQpIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj4mbHQ7c3lzL2NvbmZpZy5oJmd0Ozwvc3Bhbj48L3NhbXA+LgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nbG9iYWwtcmVlbnRyYW5jeS1zdHJ1Y3R1cmUtNDUzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZpbXB1cmVfMDA1ZnB0ci00NTQiPjwvYT5FYWNoIGZ1bmN0aW9uIHdoaWNoIHVzZXMgdGhlIGdsb2JhbCByZWVudHJhbmN5IHN0cnVjdHVyZSB1c2VzIHRoZSBnbG9iYWwKK3ZhcmlhYmxlIDxjb2RlPl9pbXB1cmVfcHRyPC9jb2RlPiwgd2hpY2ggcG9pbnRzIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPlRoaXMgbWVhbnMgdGhhdCB5b3UgaGF2ZSB0d28gd2F5cyB0byBhY2hpZXZlIHJlZW50cmFuY3kuICBCb3RoIHJlcXVpcmUKK3RoYXQgZWFjaCB0aHJlYWQgb2YgZXhlY3V0aW9uIGNvbnRyb2wgaW5pdGlhbGl6ZSBhIHVuaXF1ZSBnbG9iYWwKK3ZhcmlhYmxlIG9mIHR5cGUgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj5zdHJ1Y3QgX3JlZW50PC9zcGFuPjwvc2FtcD4mcnNxdW87OgorCisgICAgIDxvbCB0eXBlPTEgc3RhcnQ9MT4KKzxsaT48YSBuYW1lPSJpbmRleC1leHRyYS1hcmd1bWVudF8wMDJjLXJlZW50cmFudC1mbnMtNDU1Ij48L2E+VXNlIHRoZSByZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkgZnVuY3Rpb25zLCBhZnRlciBpbml0aWFsaXppbmcKK2EgZ2xvYmFsIHJlZW50cmFuY3kgc3RydWN0dXJlIGZvciBlYWNoIHByb2Nlc3MuICBVc2UgdGhlIHBvaW50ZXIgdG8gdGhpcworc3RydWN0dXJlIGFzIHRoZSBleHRyYSBhcmd1bWVudCBmb3IgYWxsIGxpYnJhcnkgZnVuY3Rpb25zLgorCisgICAgIDxsaT5FbnN1cmUgdGhhdCBlYWNoIHRocmVhZCBvZiBleGVjdXRpb24gY29udHJvbCBoYXMgYSBwb2ludGVyIHRvIGl0cyBvd24KK3VuaXF1ZSByZWVudHJhbmN5IHN0cnVjdHVyZSBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlIDxjb2RlPl9pbXB1cmVfcHRyPC9jb2RlPiwKK2FuZCBjYWxsIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHN1YnJvdXRpbmVzLgorICAgICAgICA8L29sPgorCisgICA8cD48YSBuYW1lPSJpbmRleC1saXN0LW9mLXJlZW50cmFudC1mdW5jdGlvbnMtNDU2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcmVlbnRyYW50LWZ1bmN0aW9uLWxpc3QtNDU3Ij48L2E+VGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGluIGJvdGggcmVlbnRyYW50CithbmQgbm9uLXJlZW50cmFudCB2ZXJzaW9ucy4KKworPHByZSBjbGFzcz0iZXhhbXBsZSI+PGJyPjxlbT5FcXVpdmFsZW50IGZvciBlcnJubyB2YXJpYWJsZTo8L2VtPjxicj4KKyAgICAgX2Vycm5vX3IKKyAgICAgCis8YnI+PGVtPkxvY2FsZSBmdW5jdGlvbnM6PC9lbT48YnI+CisgICAgIF9sb2NhbGVjb252X3IgIF9zZXRsb2NhbGVfcgorICAgICAKKzxicj48ZW0+RXF1aXZhbGVudHMgZm9yIHN0ZGlvIHZhcmlhYmxlczo8L2VtPjxicj4KKyAgICAgX3N0ZGluX3IgICAgICAgIF9zdGRvdXRfciAgICAgICBfc3RkZXJyX3IKKyAgICAgCisgICAgIAorPGJyPjxlbT5TdGRpbyBmdW5jdGlvbnM6PC9lbT48YnI+CisgICAgIF9mZG9wZW5fciAgICAgICBfcGVycm9yX3IgICAgICAgX3RlbXBuYW1fcgorICAgICBfZm9wZW5fciAgICAgICAgX3B1dGNoYXJfciAgICAgIF90bXBuYW1fcgorICAgICBfZ2V0Y2hhcl9yICAgICAgX3B1dHNfciAgICAgICAgIF90bXBmaWxlX3IKKyAgICAgX2dldHNfciAgICAgICAgIF9yZW1vdmVfciAgICAgICBfdmZwcmludGZfcgorICAgICBfaXByaW50Zl9yICAgICAgX3JlbmFtZV9yICAgICAgIF92c25wcmludGZfcgorICAgICBfbWtzdGVtcF9yICAgICAgX3NucHJpbnRmX3IgICAgIF92c3ByaW50Zl9yCisgICAgIF9ta3RlbXBfdCAgICAgICBfc3ByaW50Zl9yCisgICAgIAorPGJyPjxlbT5TaWduYWwgZnVuY3Rpb25zOjwvZW0+PGJyPgorICAgICBfaW5pdF9zaWduYWxfciAgX3NpZ25hbF9yCisgICAgIF9raWxsX3IgICAgICAgICBfX3NpZ3RyYW1wX3IKKyAgICAgX3JhaXNlX3IKKyAgICAgCis8YnI+PGVtPlN0ZGxpYiBmdW5jdGlvbnM6PC9lbT48YnI+CisgICAgIF9jYWxsb2NfciAgICAgICBfbWJsZW5fciAgICAgICAgX3NldGVudl9yCisgICAgIF9kdG9hX3IgICAgICAgICBfbWJzdG93Y3NfciAgICAgX3NyYW5kX3IKKyAgICAgX2ZyZWVfciAgICAgICAgIF9tYnRvd2NfciAgICAgICBfc3RydG9kX3IKKyAgICAgX2dldGVudl9yICAgICAgIF9tZW1hbGlnbl9yICAgICBfc3RydG9sX3IKKyAgICAgX21hbGxpbmZvX3IgICAgIF9tc3RhdHNfciAgICAgICBfc3RydG91bF9yCisgICAgIF9tYWxsb2NfciAgICAgICBfcHV0ZW52X3IgICAgICAgX3N5c3RlbV9yCisgICAgIF9tYWxsb2NfciAgICAgICBfcmFuZF9yICAgICAgICAgX3djc3RvbWJzX3IKKyAgICAgX21hbGxvY19zdGF0c19yIF9yZWFsbG9jX3IgICAgICBfd2N0b21iX3IKKyAgICAgCis8YnI+PGVtPlN0cmluZyBmdW5jdGlvbnM6PC9lbT48YnI+CisgICAgIF9zdHJkdXBfciAgICAgICBfc3RydG9rX3IKKyAgICAgCis8YnI+PGVtPlN5c3RlbSBmdW5jdGlvbnM6PC9lbT48YnI+CisgICAgIF9jbG9zZV9yICAgICAgICBfbGlua19yICAgICAgICAgX3VubGlua19yCisgICAgIF9leGVjdmVfciAgICAgICBfbHNlZWtfciAgICAgICAgX3dhaXRfcgorICAgICBfZmNudGxfciAgICAgICAgX29wZW5fciAgICAgICAgIF93cml0ZV9yCisgICAgIF9mb3JrX3IgICAgICAgICBfcmVhZF9yCisgICAgIF9mc3RhdF9yICAgICAgICBfc2Jya19yCisgICAgIF9nZXR0aW1lb2ZkYXlfciBfc3RhdF9yCisgICAgIF9nZXRwaWRfciAgICAgICBfdGltZXNfcgorICAgICAKKyAgICAgCis8YnI+PGVtPlRpbWUgZnVuY3Rpb246PC9lbT48YnI+CisgICAgIF9hc2N0aW1lX3IKKzwvcHJlPgorICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9SZWVudHJhbnQtU3lzY2FsbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU3YWFjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwKQEAgLTAsMCArMSwxMTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlJlZW50cmFudCBTeXNjYWxscyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3lzY2FsbHMuaHRtbCNTeXNjYWxscyIgdGl0bGU9IlN5c2NhbGxzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyIgdGl0bGU9IlN0dWJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJSZWVudHJhbnQtU3lzY2FsbHMiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJTdHVicy5odG1sI1N0dWJzIj5TdHViczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN5c2NhbGxzLmh0bWwjU3lzY2FsbHMiPlN5c2NhbGxzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTIuMiBSZWVudHJhbnQgY292ZXJzIGZvciBPUyBzdWJyb3V0aW5lczwvaDM+CisKKzxwPlNpbmNlIHRoZSBzeXN0ZW0gc3Vicm91dGluZXMgYXJlIHVzZWQgYnkgb3RoZXIgbGlicmFyeSByb3V0aW5lcyB0aGF0CityZXF1aXJlIHJlZW50cmFuY3ksIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5saWJjLmE8L3NwYW4+PC9zYW1wPiBwcm92aWRlcyBjb3ZlciByb3V0aW5lcyAoZm9yIGV4YW1wbGUsCit0aGUgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+Zm9yazwvY29kZT4gaXMgPGNvZGU+X2ZvcmtfcjwvY29kZT4pLiAgVGhlc2UgY292ZXIKK3JvdXRpbmVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIG90aGVyIHJlZW50cmFudCBzdWJyb3V0aW5lcyBpbiB0aGlzCitsaWJyYXJ5LCBhbmQgYWNoaWV2ZSByZWVudHJhbmN5IGJ5IHVzaW5nIGEgcmVzZXJ2ZWQgZ2xvYmFsIGRhdGEgYmxvY2sKKyhzZWUgPGEgaHJlZj0iUmVlbnRyYW5jeS5odG1sI1JlZW50cmFuY3kiPlJlZW50cmFuY3k8L2E+KS4KKworPCEtLSBGSVhNRSEhISBUaGUgZm9sbG93aW5nIGlnbm9yZWQgdGV4dCBzcGVjaWZpZXMgaG93IHRoaXMgc2VjdGlvbiBvdWdodCAtLT4KKzwhLS0gdG8gd29yazsgIGhvd2V2ZXIsIGJvdGggc3RhbmRhbG9uZSBpbmZvIGFuZCBFbWFjcyBpbmZvIG1vZGUgZmFpbCB3aGVuIC0tPgorPCEtLSBjb25mcm9udGVkIHdpdGggbm9kZXMgYmVnaW5uaW5nIGBfJyBhcyBvZiAyNG1heTkzLiAgUmVzdG9yZSB3aGVuIEluZm8gLS0+Cis8IS0tIHJlYWRlcnMgZml4ZWQhIC0tPgorICAgICA8ZGw+Cis8ZHQ+PGNvZGU+X29wZW5fcjwvY29kZT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zm9wZW5fMDA1ZnItNDg1Ij48L2E+PGRkPkEgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+b3BlbjwvY29kZT4uICBJdCB0YWtlcyBhIHBvaW50ZXIKK3RvIHRoZSBnbG9iYWwgZGF0YSBibG9jaywgd2hpY2ggaG9sZHMgPGNvZGU+ZXJybm88L2NvZGU+LgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBpbnQgX29wZW5fcih2b2lkICo8dmFyPnJlZW50PC92YXI+LAorICAgICAgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZpbGU8L3Zhcj4sIGludCA8dmFyPmZsYWdzPC92YXI+LCBpbnQgPHZhcj5tb2RlPC92YXI+KTsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPl9jbG9zZV9yPC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmY2xvc2VfMDA1ZnItNDg2Ij48L2E+PGRkPkEgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+Y2xvc2U8L2NvZGU+LiAgSXQgdGFrZXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwKK2RhdGEgYmxvY2ssIHdoaWNoIGhvbGRzIDxjb2RlPmVycm5vPC9jb2RlPi4KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgaW50IF9jbG9zZV9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGludCA8dmFyPmZkPC92YXI+KTsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPl9sc2Vla19yPC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbHNlZWtfMDA1ZnItNDg3Ij48L2E+PGRkPkEgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+bHNlZWs8L2NvZGU+LiAgSXQgdGFrZXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwKK2RhdGEgYmxvY2ssIHdoaWNoIGhvbGRzIDxjb2RlPmVycm5vPC9jb2RlPi4KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgb2ZmX3QgX2xzZWVrX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwKKyAgICAgICAgICAgICAgaW50IDx2YXI+ZmQ8L3Zhcj4sIG9mZl90IDx2YXI+cG9zPC92YXI+LCBpbnQgPHZhcj53aGVuY2U8L3Zhcj4pOworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+X3JlYWRfcjwvY29kZT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnJlYWRfMDA1ZnItNDg4Ij48L2E+PGRkPkEgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+cmVhZDwvY29kZT4uICBJdCB0YWtlcyBhIHBvaW50ZXIgdG8gdGhlIGdsb2JhbAorZGF0YSBibG9jaywgd2hpY2ggaG9sZHMgPGNvZGU+ZXJybm88L2NvZGU+LgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBsb25nIF9yZWFkX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwKKyAgICAgICAgICAgICAgaW50IDx2YXI+ZmQ8L3Zhcj4sIHZvaWQgKjx2YXI+YnVmPC92YXI+LCBzaXplX3QgPHZhcj5jbnQ8L3Zhcj4pOworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+X3dyaXRlX3I8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ3cml0ZV8wMDVmci00ODkiPjwvYT48ZGQ+QSByZWVudHJhbnQgdmVyc2lvbiBvZiA8Y29kZT53cml0ZTwvY29kZT4uICBJdCB0YWtlcyBhIHBvaW50ZXIgdG8gdGhlIGdsb2JhbAorZGF0YSBibG9jaywgd2hpY2ggaG9sZHMgPGNvZGU+ZXJybm88L2NvZGU+LgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBsb25nIF93cml0ZV9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sCisgICAgICAgICAgICAgIGludCA8dmFyPmZkPC92YXI+LCBjb25zdCB2b2lkICo8dmFyPmJ1ZjwvdmFyPiwgc2l6ZV90IDx2YXI+Y250PC92YXI+KTsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPl9mb3JrX3I8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmb3JrXzAwNWZyLTQ5MCI+PC9hPjxkZD5BIHJlZW50cmFudCB2ZXJzaW9uIG9mIDxjb2RlPmZvcms8L2NvZGU+LiAgSXQgdGFrZXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwKK2RhdGEgYmxvY2ssIHdoaWNoIGhvbGRzIDxjb2RlPmVycm5vPC9jb2RlPi4KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgaW50IF9mb3JrX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPik7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5fd2FpdF9yPC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmd2FpdF8wMDVmci00OTEiPjwvYT48ZGQ+QSByZWVudHJhbnQgdmVyc2lvbiBvZiA8Y29kZT53YWl0PC9jb2RlPi4gIEl0IHRha2VzIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsCitkYXRhIGJsb2NrLCB3aGljaCBob2xkcyA8Y29kZT5lcnJubzwvY29kZT4uCisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGludCBfd2FpdF9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGludCAqPHZhcj5zdGF0dXM8L3Zhcj4pOworPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+X3N0YXRfcjwvY29kZT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnN0YXRfMDA1ZnItNDkyIj48L2E+PGRkPkEgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+c3RhdDwvY29kZT4uICBJdCB0YWtlcyBhIHBvaW50ZXIgdG8gdGhlIGdsb2JhbAorZGF0YSBibG9jaywgd2hpY2ggaG9sZHMgPGNvZGU+ZXJybm88L2NvZGU+LgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBpbnQgX3N0YXRfcih2b2lkICo8dmFyPnJlZW50PC92YXI+LAorICAgICAgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZpbGU8L3Zhcj4sIHN0cnVjdCBzdGF0ICo8dmFyPnBzdGF0PC92YXI+KTsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPl9mc3RhdF9yPC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZnN0YXRfMDA1ZnItNDkzIj48L2E+PGRkPkEgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+ZnN0YXQ8L2NvZGU+LiAgSXQgdGFrZXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwKK2RhdGEgYmxvY2ssIHdoaWNoIGhvbGRzIDxjb2RlPmVycm5vPC9jb2RlPi4KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgaW50IF9mc3RhdF9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sCisgICAgICAgICAgICAgIGludCA8dmFyPmZkPC92YXI+LCBzdHJ1Y3Qgc3RhdCAqPHZhcj5wc3RhdDwvdmFyPik7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5fbGlua19yPC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbGlua18wMDVmci00OTQiPjwvYT48ZGQ+QSByZWVudHJhbnQgdmVyc2lvbiBvZiA8Y29kZT5saW5rPC9jb2RlPi4gIEl0IHRha2VzIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsCitkYXRhIGJsb2NrLCB3aGljaCBob2xkcyA8Y29kZT5lcnJubzwvY29kZT4uCisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGludCBfbGlua19yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKjx2YXI+b2xkPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPm5ldzwvdmFyPik7Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5fdW5saW5rX3I8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ1bmxpbmtfMDA1ZnItNDk1Ij48L2E+PGRkPkEgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+dW5saW5rPC9jb2RlPi4gIEl0IHRha2VzIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsCitkYXRhIGJsb2NrLCB3aGljaCBob2xkcyA8Y29kZT5lcnJubzwvY29kZT4uCisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGludCBfdW5saW5rX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5maWxlPC92YXI+KTsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPl9zYnJrX3I8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZzYnJrXzAwNWZyLTQ5NiI+PC9hPjxkZD5BIHJlZW50cmFudCB2ZXJzaW9uIG9mIDxjb2RlPnNicms8L2NvZGU+LiAgSXQgdGFrZXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwKK2RhdGEgYmxvY2ssIHdoaWNoIGhvbGRzIDxjb2RlPmVycm5vPC9jb2RlPi4KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgY2hhciAqX3Nicmtfcih2b2lkICo8dmFyPnJlZW50PC92YXI+LCBzaXplX3QgPHZhcj5pbmNyPC92YXI+KTsKKzwvcHJlPgorICAgICA8L2RsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TaWduYWxzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TaWduYWxzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwZTlmOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1NpZ25hbHMuaHRtbApAQCAtMCwwICsxLDkxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TaWduYWxzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIiB0aXRsZT0iV2NoYXIgc3RyaW5ncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIiB0aXRsZT0iVGltZWZucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU2lnbmFscyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJUaW1lZm5zLmh0bWwjVGltZWZucyI+VGltZWZuczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjcgU2lnbmFsIEhhbmRsaW5nICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c2lnbmFsLmg8L3NwYW4+PC9zYW1wPik8L2gyPgorCis8cD5BIDxkZm4+c2lnbmFsPC9kZm4+IGlzIGFuIGV2ZW50IHRoYXQgaW50ZXJydXB0cyB0aGUgbm9ybWFsIGZsb3cgb2YgY29udHJvbAoraW4geW91ciBwcm9ncmFtLiAgWW91ciBvcGVyYXRpbmcgZW52aXJvbm1lbnQgbm9ybWFsbHkgZGVmaW5lcyB0aGUgZnVsbAorc2V0IG9mIHNpZ25hbHMgYXZhaWxhYmxlIChzZWUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN5cy9zaWduYWwuaDwvc3Bhbj48L3NhbXA+KSwgYXMgd2VsbCBhcyB0aGUKK2RlZmF1bHQgbWVhbnMgb2YgZGVhbGluZyB3aXRoIHRoZW0mbWRhc2g7dHlwaWNhbGx5LCBlaXRoZXIgcHJpbnRpbmcgYW4KK2Vycm9yIG1lc3NhZ2UgYW5kIGFib3J0aW5nIHlvdXIgcHJvZ3JhbSwgb3IgaWdub3JpbmcgdGhlIHNpZ25hbC4KKworICAgPHA+QWxsIHN5c3RlbXMgc3VwcG9ydCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIHNpZ25hbHM6CisgICAgIDxkbD4KKzxkdD48Y29kZT5TSUdBQlJUPC9jb2RlPjxkZD5BYm5vcm1hbCB0ZXJtaW5hdGlvbiBvZiBhIHByb2dyYW07IHJhaXNlZCBieSB0aGUgJmx0OyZsdDthYm9ydCZndDsmZ3Q7IGZ1bmN0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+U0lHRlBFPC9jb2RlPjxkZD5BIGRvbWFpbiBlcnJvciBpbiBhcml0aG1ldGljLCBzdWNoIGFzIG92ZXJmbG93LCBvciBkaXZpc2lvbiBieSB6ZXJvLgorCisgICAgIDxicj48ZHQ+PGNvZGU+U0lHSUxMPC9jb2RlPjxkZD5BdHRlbXB0IHRvIGV4ZWN1dGUgYXMgYSBmdW5jdGlvbiBkYXRhIHRoYXQgaXMgbm90IGV4ZWN1dGFibGUuCisKKyAgICAgPGJyPjxkdD48Y29kZT5TSUdJTlQ8L2NvZGU+PGRkPkludGVycnVwdDsgYW4gaW50ZXJhY3RpdmUgYXR0ZW50aW9uIHNpZ25hbC4KKworICAgICA8YnI+PGR0Pjxjb2RlPlNJR1NFR1Y8L2NvZGU+PGRkPkFuIGF0dGVtcHQgdG8gYWNjZXNzIGEgbWVtb3J5IGxvY2F0aW9uIHRoYXQgaXMgbm90IGF2YWlsYWJsZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPlNJR1RFUk08L2NvZGU+PGRkPkEgcmVxdWVzdCB0aGF0IHlvdXIgcHJvZ3JhbSBlbmQgZXhlY3V0aW9uLiAKKzwvZGw+CisKKyAgIDxwPlR3byBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cworc2lnbmFscyZtZGFzaDtvbmUgdG8gYWxsb3cgeW91ciBwcm9ncmFtIHRvIHNlbmQgc2lnbmFscyB0byBpdHNlbGYgKHRoaXMgaXMKK2NhbGxlZCA8ZGZuPnJhaXNpbmc8L2Rmbj4gYSBzaWduYWwpLCBhbmQgb25lIHRvIHNwZWNpZnkgc3Vicm91dGluZXMgKGNhbGxlZAorPGRmbj5oYW5kbGVyczwvZGZuPiB0byBoYW5kbGUgcGFydGljdWxhciBzaWduYWxzIHRoYXQgeW91IGFudGljaXBhdGUgbWF5CitvY2N1ciZtZGFzaDt3aGV0aGVyIHJhaXNlZCBieSB5b3VyIG93biBwcm9ncmFtIG9yIHRoZSBvcGVyYXRpbmcgZW52aXJvbm1lbnQuCisKKyAgIDxwPlRvIHN1cHBvcnQgdGhlc2UgZnVuY3Rpb25zLCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c2lnbmFsLmg8L3NwYW4+PC9zYW1wPiBkZWZpbmVzIHRocmVlIG1hY3JvczoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+U0lHX0RGTDwvY29kZT48ZGQ+VXNlZCB3aXRoIHRoZSA8Y29kZT5zaWduYWw8L2NvZGU+IGZ1bmN0aW9uIGluIHBsYWNlIG9mIGEgcG9pbnRlciB0byBhCitoYW5kbGVyIHN1YnJvdXRpbmUsIHRvIHNlbGVjdCB0aGUgb3BlcmF0aW5nIGVudmlyb25tZW50J3MgZGVmYXVsdAoraGFuZGxpbmcgb2YgYSBzaWduYWwuCisKKyAgICAgPGJyPjxkdD48Y29kZT5TSUdfSUdOPC9jb2RlPjxkZD5Vc2VkIHdpdGggdGhlIDxjb2RlPnNpZ25hbDwvY29kZT4gZnVuY3Rpb24gaW4gcGxhY2Ugb2YgYSBwb2ludGVyIHRvIGEKK2hhbmRsZXIsIHRvIGlnbm9yZSBhIHBhcnRpY3VsYXIgc2lnbmFsLgorCisgICAgIDxicj48ZHQ+PGNvZGU+U0lHX0VSUjwvY29kZT48ZGQ+UmV0dXJuZWQgYnkgdGhlIDxjb2RlPnNpZ25hbDwvY29kZT4gZnVuY3Rpb24gaW4gcGxhY2Ugb2YgYSBwb2ludGVyIHRvIGEKK2hhbmRsZXIsIHRvIGluZGljYXRlIHRoYXQgeW91ciByZXF1ZXN0IHRvIHNldCB1cCBhIGhhbmRsZXIgY291bGQgbm90CitiZSBob25vcmVkIGZvciBzb21lIHJlYXNvbi4gCis8L2RsPgorCisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c2lnbmFsLmg8L3NwYW4+PC9zYW1wPiBhbHNvIGRlZmluZXMgYW4gaW50ZWdyYWwgdHlwZSwgPGNvZGU+c2lnX2F0b21pY190PC9jb2RlPi4gCitUaGlzIHR5cGUgaXMgbm90IHVzZWQgaW4gYW55IGZ1bmN0aW9uIGRlY2xhcmF0aW9uczsgaXQgZXhpc3RzIG9ubHkgdG8KK2FsbG93IHlvdXIgc2lnbmFsIGhhbmRsZXJzIHRvIGRlY2xhcmUgYSBzdGF0aWMgc3RvcmFnZSBsb2NhdGlvbiB3aGVyZQordGhleSBtYXkgc3RvcmUgYSBzaWduYWwgdmFsdWUuICAoU3RhdGljIHN0b3JhZ2UgaXMgbm90IG90aGVyd2lzZQorcmVsaWFibGUgZnJvbSBzaWduYWwgaGFuZGxlcnMuKQorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0icHNpZ25hbC5odG1sI3BzaWduYWwiPnBzaWduYWw8L2E+OiAgUHJpbnQgYSBzaWduYWwgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvcgorPGxpPjxhIGFjY2Vzc2tleT0iMiIgaHJlZj0icmFpc2UuaHRtbCNyYWlzZSI+cmFpc2U8L2E+OiAgICBTZW5kIGEgc2lnbmFsCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJzaWduYWwuaHRtbCNzaWduYWwiPnNpZ25hbDwvYT46ICAgU3BlY2lmeSBoYW5kbGVyIHN1YnJvdXRpbmUgZm9yIGEgc2lnbmFsCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TdGRhcmcuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1N0ZGFyZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmMyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TdGRhcmcuaHRtbApAQCAtMCwwICsxLDUyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdGRhcmcgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkFyZ2xpc3RzLmh0bWwjQXJnbGlzdHMiIHRpdGxlPSJBcmdsaXN0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlZhcmFyZ3MuaHRtbCNWYXJhcmdzIiB0aXRsZT0iVmFyYXJncyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3RkYXJnIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlZhcmFyZ3MuaHRtbCNWYXJhcmdzIj5WYXJhcmdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQXJnbGlzdHMuaHRtbCNBcmdsaXN0cyI+QXJnbGlzdHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xMy4xIEFOU0ktc3RhbmRhcmQgbWFjcm9zLCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkYXJnLmg8L3NwYW4+PC9zYW1wPjwvaDM+CisKKzxwPkluIEFOU0kgQywgYSBmdW5jdGlvbiBoYXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzIHdoZW4gaXRzCitwYXJhbWV0ZXIgbGlzdCBlbmRzIGluIGFuIGVsbGlwc2lzICg8Y29kZT4uLi48L2NvZGU+KS4gIFRoZSBwYXJhbWV0ZXIgbGlzdAorbXVzdCBhbHNvIGluY2x1ZGUgYXQgbGVhc3Qgb25lIGV4cGxpY2l0bHkgbmFtZWQgYXJndW1lbnQ7IHRoYXQgYXJndW1lbnQKK2lzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUgbGlzdCBkYXRhIHN0cnVjdHVyZS4KKworICAgPHA+QU5TSSBDIGRlZmluZXMgdGhyZWUgbWFjcm9zICg8Y29kZT52YV9zdGFydDwvY29kZT4sIDxjb2RlPnZhX2FyZzwvY29kZT4sIGFuZAorPGNvZGU+dmFfZW5kPC9jb2RlPikgdG8gb3BlcmF0ZSBvbiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0cy4gIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdGRhcmcuaDwvc3Bhbj48L3NhbXA+CithbHNvIGRlZmluZXMgYSBzcGVjaWFsIHR5cGUgdG8gcmVwcmVzZW50IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzOiB0aGlzCit0eXBlIGlzIGNhbGxlZCA8Y29kZT52YV9saXN0PC9jb2RlPi4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9InZhXzAwNWZzdGFydC5odG1sI3ZhXzAwNWZzdGFydCI+dmFfc3RhcnQ8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJ2YV8wMDVmYXJnLmh0bWwjdmFfMDA1ZmFyZyI+dmFfYXJnPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0idmFfMDA1ZmVuZC5odG1sI3ZhXzAwNWZlbmQiPnZhX2VuZDwvYT4KKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1N0ZGlvLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TdGRpby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OGU5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TdGRpby5odG1sCkBAIC0wLDAgKzEsMTMyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdGRpbyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlN0ZGlvIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NCBJbnB1dCBhbmQgT3V0cHV0ICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkaW8uaDwvc3Bhbj48L3NhbXA+KTwvaDI+CisKKzxwPlRoaXMgY2hhcHRlciBjb21wcmlzZXMgZnVuY3Rpb25zIHRvIG1hbmFnZSBmaWxlcworb3Igb3RoZXIgaW5wdXQvb3V0cHV0IHN0cmVhbXMuIEFtb25nIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3Vicm91dGluZXMKK3RvIGdlbmVyYXRlIG9yIHNjYW4gc3RyaW5ncyBhY2NvcmRpbmcgdG8gc3BlY2lmaWNhdGlvbnMgZnJvbSBhIGZvcm1hdCBzdHJpbmcuCisKKyAgIDxwPlRoZSB1bmRlcmx5aW5nIGZhY2lsaXRpZXMgZm9yIGlucHV0IGFuZCBvdXRwdXQgZGVwZW5kIG9uIHRoZSBob3N0CitzeXN0ZW0sIGJ1dCB0aGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBhIHVuaWZvcm0gaW50ZXJmYWNlLgorCisgICA8cD5UaGUgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbnMgYXJlIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdGRpby5oPC9zcGFuPjwvc2FtcD4uCisKKyAgIDxwPlRoZSByZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIHVzZSBtYWNyb3MKKworPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBfc3RkaW5fcig8dmFyPnJlZW50PC92YXI+KQorICAgICBfc3Rkb3V0X3IoPHZhcj5yZWVudDwvdmFyPikKKyAgICAgX3N0ZGVycl9yKDx2YXI+cmVlbnQ8L3Zhcj4pCis8L3ByZT4KKyAgIDxwIGNsYXNzPSJub2luZGVudCI+aW5zdGVhZCBvZiB0aGUgZ2xvYmFscyA8Y29kZT5zdGRpbjwvY29kZT4sIDxjb2RlPnN0ZG91dDwvY29kZT4sIGFuZAorPGNvZGU+c3RkZXJyPC9jb2RlPi4gIFRoZSBhcmd1bWVudCAmbHQ7W3JlZW50XSZndDsgaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeQorc3RydWN0dXJlLgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iY2xlYXJlcnIuaHRtbCNjbGVhcmVyciI+Y2xlYXJlcnI8L2E+OiAgICAgQ2xlYXIgZmlsZSBvciBzdHJlYW0gZXJyb3IgaW5kaWNhdG9yCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJkaXByaW50Zi5odG1sI2RpcHJpbnRmIj5kaXByaW50ZjwvYT46ICAgICBQcmludCB0byBhIGZpbGUgZGVzY3JpcHRvciAoaW50ZWdlciBvbmx5KQorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iZHByaW50Zi5odG1sI2RwcmludGYiPmRwcmludGY8L2E+OiAgICAgIFByaW50IHRvIGEgZmlsZSBkZXNjcmlwdG9yCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJmY2xvc2UuaHRtbCNmY2xvc2UiPmZjbG9zZTwvYT46ICAgICAgIENsb3NlIGEgZmlsZQorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iZmNsb3NlYWxsLmh0bWwjZmNsb3NlYWxsIj5mY2xvc2VhbGw8L2E+OiAgICBDbG9zZSBhbGwgZmlsZXMKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9ImZkb3Blbi5odG1sI2Zkb3BlbiI+ZmRvcGVuPC9hPjogICAgICAgVHVybiBhbiBvcGVuIGZpbGUgaW50byBhIHN0cmVhbQorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0iZmVvZi5odG1sI2Zlb2YiPmZlb2Y8L2E+OiAgICAgICAgIFRlc3QgZm9yIGVuZCBvZiBmaWxlCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJmZXJyb3IuaHRtbCNmZXJyb3IiPmZlcnJvcjwvYT46ICAgICAgIFRlc3Qgd2hldGhlciByZWFkL3dyaXRlIGVycm9yIGhhcyBvY2N1cnJlZAorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iZmZsdXNoLmh0bWwjZmZsdXNoIj5mZmx1c2g8L2E+OiAgICAgICBGbHVzaCBidWZmZXJlZCBmaWxlIG91dHB1dAorPGxpPjxhIGhyZWY9ImZnZXRjLmh0bWwjZmdldGMiPmZnZXRjPC9hPjogICAgICAgIEdldCBhIGNoYXJhY3RlciBmcm9tIGEgZmlsZSBvciBzdHJlYW0KKzxsaT48YSBocmVmPSJmZ2V0cG9zLmh0bWwjZmdldHBvcyI+ZmdldHBvczwvYT46ICAgICAgUmVjb3JkIHBvc2l0aW9uIGluIGEgc3RyZWFtIG9yIGZpbGUKKzxsaT48YSBocmVmPSJmZ2V0cy5odG1sI2ZnZXRzIj5mZ2V0czwvYT46ICAgICAgICBHZXQgY2hhcmFjdGVyIHN0cmluZyBmcm9tIGEgZmlsZSBvciBzdHJlYW0KKzxsaT48YSBocmVmPSJmZ2V0d2MuaHRtbCNmZ2V0d2MiPmZnZXR3YzwvYT46ICAgICAgIEdldCBhIHdpZGUgY2hhcmFjdGVyIGZyb20gYSBmaWxlIG9yIHN0cmVhbQorPGxpPjxhIGhyZWY9ImZnZXR3cy5odG1sI2ZnZXR3cyI+ZmdldHdzPC9hPjogICAgICAgR2V0IGEgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGZyb20gYSBmaWxlIG9yIHN0cmVhbQorPGxpPjxhIGhyZWY9ImZpbGVuby5odG1sI2ZpbGVubyI+ZmlsZW5vPC9hPjogICAgICAgR2V0IGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggc3RyZWFtCis8bGk+PGEgaHJlZj0iZm1lbW9wZW4uaHRtbCNmbWVtb3BlbiI+Zm1lbW9wZW48L2E+OiAgICAgT3BlbiBhIHN0cmVhbSBhcm91bmQgYSBmaXhlZC1sZW5ndGggYnVmZmVyCis8bGk+PGEgaHJlZj0iZm9wZW4uaHRtbCNmb3BlbiI+Zm9wZW48L2E+OiAgICAgICAgT3BlbiBhIGZpbGUKKzxsaT48YSBocmVmPSJmb3BlbmNvb2tpZS5odG1sI2ZvcGVuY29va2llIj5mb3BlbmNvb2tpZTwvYT46ICBPcGVuIGEgc3RyZWFtIHdpdGggY3VzdG9tIGNhbGxiYWNrcworPGxpPjxhIGhyZWY9ImZwdXJnZS5odG1sI2ZwdXJnZSI+ZnB1cmdlPC9hPjogICAgICAgRGlzY2FyZCBhbGwgcGVuZGluZyBJL08gb24gYSBzdHJlYW0KKzxsaT48YSBocmVmPSJmcHV0Yy5odG1sI2ZwdXRjIj5mcHV0YzwvYT46ICAgICAgICBXcml0ZSBhIGNoYXJhY3RlciBvbiBhIHN0cmVhbSBvciBmaWxlCis8bGk+PGEgaHJlZj0iZnB1dHMuaHRtbCNmcHV0cyI+ZnB1dHM8L2E+OiAgICAgICAgV3JpdGUgYSBjaGFyYWN0ZXIgc3RyaW5nIGluIGEgZmlsZSBvciBzdHJlYW0KKzxsaT48YSBocmVmPSJmcHV0d2MuaHRtbCNmcHV0d2MiPmZwdXR3YzwvYT46ICAgICAgIFdyaXRlIGEgd2lkZSBjaGFyYWN0ZXIgdG8gYSBmaWxlIG9yIHN0cmVhbQorPGxpPjxhIGhyZWY9ImZwdXR3cy5odG1sI2ZwdXR3cyI+ZnB1dHdzPC9hPjogICAgICAgV3JpdGUgYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgdG8gYSBmaWxlIG9yIHN0cmVhbQorPGxpPjxhIGhyZWY9ImZyZWFkLmh0bWwjZnJlYWQiPmZyZWFkPC9hPjogICAgICAgIFJlYWQgYXJyYXkgZWxlbWVudHMgZnJvbSBhIGZpbGUKKzxsaT48YSBocmVmPSJmcmVvcGVuLmh0bWwjZnJlb3BlbiI+ZnJlb3BlbjwvYT46ICAgICAgT3BlbiBhIGZpbGUgdXNpbmcgYW4gZXhpc3RpbmcgZmlsZSBkZXNjcmlwdG9yCis8bGk+PGEgaHJlZj0iZnNlZWsuaHRtbCNmc2VlayI+ZnNlZWs8L2E+OiAgICAgICAgU2V0IGZpbGUgcG9zaXRpb24KKzxsaT48YSBocmVmPSJmc2V0cG9zLmh0bWwjZnNldHBvcyI+ZnNldHBvczwvYT46ICAgICAgUmVzdG9yZSBwb3NpdGlvbiBvZiBhIHN0cmVhbSBvciBmaWxlCis8bGk+PGEgaHJlZj0iZnRlbGwuaHRtbCNmdGVsbCI+ZnRlbGw8L2E+OiAgICAgICAgUmV0dXJuIHBvc2l0aW9uIGluIGEgc3RyZWFtIG9yIGZpbGUKKzxsaT48YSBocmVmPSJmdW5vcGVuLmh0bWwjZnVub3BlbiI+ZnVub3BlbjwvYT46ICAgICAgT3BlbiBhIHN0cmVhbSB3aXRoIGN1c3RvbSBjYWxsYmFja3MKKzxsaT48YSBocmVmPSJmd2lkZS5odG1sI2Z3aWRlIj5md2lkZTwvYT46IAlTZXQgYW5kIGRldGVybWluZSB0aGUgb3JpZW50YXRpb24gb2YgYSBGSUxFIHN0cmVhbQorPGxpPjxhIGhyZWY9ImZ3cml0ZS5odG1sI2Z3cml0ZSI+ZndyaXRlPC9hPjogICAgICAgV3JpdGUgYXJyYXkgZWxlbWVudHMgZnJvbSBtZW1vcnkgdG8gYSBmaWxlIG9yIHN0cmVhbQorPGxpPjxhIGhyZWY9ImdldGMuaHRtbCNnZXRjIj5nZXRjPC9hPjogICAgICAgICBHZXQgYSBjaGFyYWN0ZXIgZnJvbSBhIGZpbGUgb3Igc3RyZWFtIChtYWNybykKKzxsaT48YSBocmVmPSJnZXRjXzAwNWZ1bmxvY2tlZC5odG1sI2dldGNfMDA1ZnVubG9ja2VkIj5nZXRjX3VubG9ja2VkPC9hPjogCUdldCBhIGNoYXJhY3RlciBmcm9tIGEgZmlsZSBvciBzdHJlYW0gKG1hY3JvKQorPGxpPjxhIGhyZWY9ImdldGNoYXIuaHRtbCNnZXRjaGFyIj5nZXRjaGFyPC9hPjogICAgICBHZXQgYSBjaGFyYWN0ZXIgZnJvbSBzdGFuZGFyZCBpbnB1dCAobWFjcm8pCis8bGk+PGEgaHJlZj0iZ2V0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbCNnZXRjaGFyXzAwNWZ1bmxvY2tlZCI+Z2V0Y2hhcl91bmxvY2tlZDwvYT46IAlHZXQgYSBjaGFyYWN0ZXIgZnJvbSBzdGFuZGFyZCBpbnB1dCAobWFjcm8pCis8bGk+PGEgaHJlZj0iZ2V0ZGVsaW0uaHRtbCNnZXRkZWxpbSI+Z2V0ZGVsaW08L2E+OiAgICAgR2V0IGNoYXJhY3RlciBzdHJpbmcgZnJvbSBhIGZpbGUgb3Igc3RyZWFtCis8bGk+PGEgaHJlZj0iZ2V0bGluZS5odG1sI2dldGxpbmUiPmdldGxpbmU8L2E+OiAgICAgIEdldCBjaGFyYWN0ZXIgc3RyaW5nIGZyb20gYSBmaWxlIG9yIHN0cmVhbQorPGxpPjxhIGhyZWY9ImdldHMuaHRtbCNnZXRzIj5nZXRzPC9hPjogICAgICAgICBHZXQgY2hhcmFjdGVyIHN0cmluZyBmcm9tIHN0YW5kYXJkIGlucHV0IChvYnNvbGV0ZSkKKzxsaT48YSBocmVmPSJnZXR3Lmh0bWwjZ2V0dyI+Z2V0dzwvYT46ICAgICAgICAgR2V0IGEgd29yZCAoaW50KSBmcm9tIGEgZmlsZSBvciBzdHJlYW0KKzxsaT48YSBocmVmPSJnZXR3Y2hhci5odG1sI2dldHdjaGFyIj5nZXR3Y2hhcjwvYT46ICAgICBHZXQgYSB3aWRlIGNoYXJhY3RlciBmcm9tIHN0YW5kYXJkIGlucHV0Cis8bGk+PGEgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIj5ta3RlbXA8L2E+OiAgICAgICBHZW5lcmF0ZSB1bnVzZWQgZmlsZSBuYW1lCis8bGk+PGEgaHJlZj0ib3Blbl8wMDVmbWVtc3RyZWFtLmh0bWwjb3Blbl8wMDVmbWVtc3RyZWFtIj5vcGVuX21lbXN0cmVhbTwvYT46IAlPcGVuIGEgd3JpdGUgc3RyZWFtIGFyb3VuZCBhbiBhcmJpdHJhcnktbGVuZ3RoIGJ1ZmZlcgorPGxpPjxhIGhyZWY9InBlcnJvci5odG1sI3BlcnJvciI+cGVycm9yPC9hPjogICAgICAgUHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGFuZGFyZCBlcnJvcgorPGxpPjxhIGhyZWY9InB1dGMuaHRtbCNwdXRjIj5wdXRjPC9hPjogICAgICAgICBXcml0ZSBhIGNoYXJhY3RlciBvbiBhIHN0cmVhbSBvciBmaWxlIChtYWNybykKKzxsaT48YSBocmVmPSJwdXRjXzAwNWZ1bmxvY2tlZC5odG1sI3B1dGNfMDA1ZnVubG9ja2VkIj5wdXRjX3VubG9ja2VkPC9hPjogCVdyaXRlIGEgY2hhcmFjdGVyIG9uIGEgc3RyZWFtIG9yIGZpbGUgKG1hY3JvKQorPGxpPjxhIGhyZWY9InB1dGNoYXIuaHRtbCNwdXRjaGFyIj5wdXRjaGFyPC9hPjogICAgICBXcml0ZSBhIGNoYXJhY3RlciBvbiBzdGFuZGFyZCBvdXRwdXQgKG1hY3JvKQorPGxpPjxhIGhyZWY9InB1dGNoYXJfMDA1ZnVubG9ja2VkLmh0bWwjcHV0Y2hhcl8wMDVmdW5sb2NrZWQiPnB1dGNoYXJfdW5sb2NrZWQ8L2E+OiAJV3JpdGUgYSBjaGFyYWN0ZXIgb24gc3RhbmRhcmQgb3V0cHV0IChtYWNybykKKzxsaT48YSBocmVmPSJwdXRzLmh0bWwjcHV0cyI+cHV0czwvYT46ICAgICAgICAgV3JpdGUgYSBjaGFyYWN0ZXIgc3RyaW5nIG9uIHN0YW5kYXJkIG91dHB1dAorPGxpPjxhIGhyZWY9InB1dHcuaHRtbCNwdXR3Ij5wdXR3PC9hPjogICAgICAgICBXcml0ZSBhIHdvcmQgKGludCkgdG8gYSBmaWxlIG9yIHN0cmVhbQorPGxpPjxhIGhyZWY9InB1dHdjaGFyLmh0bWwjcHV0d2NoYXIiPnB1dHdjaGFyPC9hPjogICAgIFdyaXRlIGEgd2lkZSBjaGFyYWN0ZXIgdG8gc3RhbmRhcmQgb3V0cHV0Cis8bGk+PGEgaHJlZj0icmVtb3ZlLmh0bWwjcmVtb3ZlIj5yZW1vdmU8L2E+OiAgICAgICBEZWxldGUgYSBmaWxlJ3MgbmFtZQorPGxpPjxhIGhyZWY9InJlbmFtZS5odG1sI3JlbmFtZSI+cmVuYW1lPC9hPjogICAgICAgUmVuYW1lIGEgZmlsZQorPGxpPjxhIGhyZWY9InJld2luZC5odG1sI3Jld2luZCI+cmV3aW5kPC9hPjogICAgICAgUmVpbml0aWFsaXplIGEgZmlsZSBvciBzdHJlYW0KKzxsaT48YSBocmVmPSJzZXRidWYuaHRtbCNzZXRidWYiPnNldGJ1ZjwvYT46ICAgICAgIFNwZWNpZnkgZnVsbCBidWZmZXJpbmcgZm9yIGEgZmlsZSBvciBzdHJlYW0KKzxsaT48YSBocmVmPSJzZXRidWZmZXIuaHRtbCNzZXRidWZmZXIiPnNldGJ1ZmZlcjwvYT46ICAgIFNwZWNpZnkgZnVsbCBidWZmZXJpbmcgZm9yIGEgZmlsZSBvciBzdHJlYW0gd2l0aCBzaXplCis8bGk+PGEgaHJlZj0ic2V0bGluZWJ1Zi5odG1sI3NldGxpbmVidWYiPnNldGxpbmVidWY8L2E+OiAgIFNwZWNpZnkgbGluZSBidWZmZXJpbmcgZm9yIGEgZmlsZSBvciBzdHJlYW0KKzxsaT48YSBocmVmPSJzZXR2YnVmLmh0bWwjc2V0dmJ1ZiI+c2V0dmJ1ZjwvYT46ICAgICAgU3BlY2lmeSBidWZmZXJpbmcgZm9yIGEgZmlsZSBvciBzdHJlYW0KKzxsaT48YSBocmVmPSJzaXByaW50Zi5odG1sI3NpcHJpbnRmIj5zaXByaW50ZjwvYT46ICAgICBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IChpbnRlZ2VyIG9ubHkpCis8bGk+PGEgaHJlZj0ic2lzY2FuZi5odG1sI3Npc2NhbmYiPnNpc2NhbmY8L2E+OiAgICAgIFNjYW4gYW5kIGZvcm1hdCBpbnB1dCAoaW50ZWdlciBvbmx5KQorPGxpPjxhIGhyZWY9InNwcmludGYuaHRtbCNzcHJpbnRmIj5zcHJpbnRmPC9hPjogICAgICBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0Cis8bGk+PGEgaHJlZj0ic3NjYW5mLmh0bWwjc3NjYW5mIj5zc2NhbmY8L2E+OiAgICAgICBTY2FuIGFuZCBmb3JtYXQgaW5wdXQKKzxsaT48YSBocmVmPSJzd3ByaW50Zi5odG1sI3N3cHJpbnRmIj5zd3ByaW50ZjwvYT46ICAgICBXcml0ZSBmb3JtYXR0ZWQgd2lkZSBjaGFyYWN0ZXIgb3V0cHV0Cis8bGk+PGEgaHJlZj0ic3dzY2FuZi5odG1sI3N3c2NhbmYiPnN3c2NhbmY8L2E+OiAgICAgIFNjYW4gYW5kIGZvcm1hdCB3aWRlIGNoYXJhY3RlciBpbnB1dAorPGxpPjxhIGhyZWY9InRtcGZpbGUuaHRtbCN0bXBmaWxlIj50bXBmaWxlPC9hPjogICAgICBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZQorPGxpPjxhIGhyZWY9InRtcG5hbS5odG1sI3RtcG5hbSI+dG1wbmFtPC9hPjogICAgICAgR2VuZXJhdGUgbmFtZSBmb3IgYSB0ZW1wb3JhcnkgZmlsZQorPGxpPjxhIGhyZWY9InVuZ2V0Yy5odG1sI3VuZ2V0YyI+dW5nZXRjPC9hPjogICAgICAgUHVzaCBkYXRhIGJhY2sgaW50byBhIHN0cmVhbQorPGxpPjxhIGhyZWY9InVuZ2V0d2MuaHRtbCN1bmdldHdjIj51bmdldHdjPC9hPjogICAgICBQdXNoIHdpZGUgY2hhcmFjdGVyIGRhdGEgYmFjayBpbnRvIGEgc3RyZWFtCis8bGk+PGEgaHJlZj0idmZwcmludGYuaHRtbCN2ZnByaW50ZiI+dmZwcmludGY8L2E+OiAgICAgRm9ybWF0IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKzxsaT48YSBocmVmPSJ2ZnNjYW5mLmh0bWwjdmZzY2FuZiI+dmZzY2FuZjwvYT46ICAgICAgU2NhbiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0Cis8bGk+PGEgaHJlZj0idmZ3cHJpbnRmLmh0bWwjdmZ3cHJpbnRmIj52ZndwcmludGY8L2E+OiAgICBGb3JtYXQgdmFyaWFibGUgd2lkZSBjaGFyYWN0ZXIgYXJndW1lbnQgbGlzdAorPGxpPjxhIGhyZWY9InZmd3NjYW5mLmh0bWwjdmZ3c2NhbmYiPnZmd3NjYW5mPC9hPjogICAgIFNjYW4gYW5kIGZvcm1hdCBhcmd1bWVudCBsaXN0IGZyb20gd2lkZSBjaGFyYWN0ZXIgaW5wdXQKKzxsaT48YSBocmVmPSJ2aXByaW50Zi5odG1sI3ZpcHJpbnRmIj52aXByaW50ZjwvYT46ICAgICBGb3JtYXQgdmFyaWFibGUgYXJndW1lbnQgbGlzdCAoaW50ZWdlciBvbmx5KQorPGxpPjxhIGhyZWY9InZpc2NhbmYuaHRtbCN2aXNjYW5mIj52aXNjYW5mPC9hPjogICAgICBTY2FuIHZhcmlhYmxlIGZvcm1hdCBsaXN0IChpbnRlZ2VyIG9ubHkpCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TdGRsaWIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1N0ZGxpYi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZmE2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TdGRsaWIuaHRtbApAQCAtMCwwICsxLDkwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5TdGRsaWIgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iSW50cm9kdWN0aW9uLmh0bWwjSW50cm9kdWN0aW9uIiB0aXRsZT0iSW50cm9kdWN0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdGRsaWIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4yIFN0YW5kYXJkIFV0aWxpdHkgRnVuY3Rpb25zICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+c3RkbGliLmg8L3NwYW4+PC9zYW1wPik8L2gyPgorCis8cD5UaGlzIGNoYXB0ZXIgZ3JvdXBzIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWZ1bCBpbiBhIHZhcmlldHkgb2YgcHJvZ3JhbXMuIAorVGhlIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb25zIGFyZSBpbiB0aGUgaGVhZGVyIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGxpYi5oPC9zcGFuPjwvc2FtcD4uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJfMDA1ZkV4aXQuaHRtbCNnX3RfMDA1ZkV4aXQiPl9FeGl0PC9hPjogICAgICAgIEVuZCBwcm9ncmFtIGV4ZWN1dGlvbiB3aXRob3V0IGNsZWFuaW5nIHVwCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJhNjRsLmh0bWwjYTY0bCI+YTY0bDwvYT46ICAgICAgICAgU3RyaW5nIHRvIGxvbmcgbG9uZworPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iYWJvcnQuaHRtbCNhYm9ydCI+YWJvcnQ8L2E+OiAgICAgICAgQWJub3JtYWwgdGVybWluYXRpb24gb2YgYSBwcm9ncmFtCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJhYnMuaHRtbCNhYnMiPmFiczwvYT46ICAgICAgICAgIEludGVnZXIgYWJzb2x1dGUgdmFsdWUgKG1hZ25pdHVkZSkKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9ImFzc2VydC5odG1sI2Fzc2VydCI+YXNzZXJ0PC9hPjogICAgICAgTWFjcm8gZm9yIERlYnVnZ2luZyBEaWFnbm9zdGljcworPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iYXRleGl0Lmh0bWwjYXRleGl0Ij5hdGV4aXQ8L2E+OiAgICAgICBSZXF1ZXN0IGV4ZWN1dGlvbiBvZiBmdW5jdGlvbnMgYXQgcHJvZ3JhbSBleGl0Cis8bGk+PGEgYWNjZXNza2V5PSI3IiBocmVmPSJhdG9mLmh0bWwjYXRvZiI+YXRvZjwvYT46ICAgICAgICAgU3RyaW5nIHRvIGRvdWJsZSBvciBmbG9hdAorPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0iYXRvaS5odG1sI2F0b2kiPmF0b2k8L2E+OiAgICAgICAgIFN0cmluZyB0byBpbnRlZ2VyCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJhdG9sbC5odG1sI2F0b2xsIj5hdG9sbDwvYT46ICAgICAgICBTdHJpbmcgdG8gbG9uZyBsb25nCis8bGk+PGEgaHJlZj0iYnNlYXJjaC5odG1sI2JzZWFyY2giPmJzZWFyY2g8L2E+OiAJQmluYXJ5IHNlYXJjaAorPGxpPjxhIGhyZWY9ImNhbGxvYy5odG1sI2NhbGxvYyI+Y2FsbG9jPC9hPjogICAgICAgQWxsb2NhdGUgc3BhY2UgZm9yIGFycmF5cworPGxpPjxhIGhyZWY9ImRpdi5odG1sI2RpdiI+ZGl2PC9hPjogICAgICAgICAgRGl2aWRlIHR3byBpbnRlZ2VycworPGxpPjxhIGhyZWY9ImVjdnRidWYuaHRtbCNlY3Z0YnVmIj5lY3Z0YnVmPC9hPjogICAgICBEb3VibGUgb3IgZmxvYXQgdG8gc3RyaW5nIG9mIGRpZ2l0cworPGxpPjxhIGhyZWY9ImVjdnQuaHRtbCNlY3Z0Ij5lY3Z0PC9hPjogICAgICAgICBEb3VibGUgb3IgZmxvYXQgdG8gc3RyaW5nIG9mIGRpZ2l0cyAobWFsbG9jIHJlc3VsdCkKKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmZW52XzAwNWZsb2NrLmh0bWwjZ190XzAwNWZfMDA1ZmVudl8wMDVmbG9jayI+X19lbnZfbG9jazwvYT46IAkJTG9jayBlbnZpcm9ubWVudCBsaXN0IGZvciBnZXRlbnYgYW5kIHNldGVudgorPGxpPjxhIGhyZWY9Imd2Y3Z0Lmh0bWwjZ3ZjdnQiPmd2Y3Z0PC9hPjogICAgICAgIEZvcm1hdCBkb3VibGUgb3IgZmxvYXQgYXMgc3RyaW5nCis8bGk+PGEgaHJlZj0iZXhpdC5odG1sI2V4aXQiPmV4aXQ8L2E+OiAgICAgICAgIEVuZCBwcm9ncmFtIGV4ZWN1dGlvbgorPGxpPjxhIGhyZWY9ImdldGVudi5odG1sI2dldGVudiI+Z2V0ZW52PC9hPjogICAgICAgTG9vayB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZQorPGxpPjxhIGhyZWY9ImxhYnMuaHRtbCNsYWJzIj5sYWJzPC9hPjogICAgICAgICBMb25nIGludGVnZXIgYWJzb2x1dGUgdmFsdWUgKG1hZ25pdHVkZSkKKzxsaT48YSBocmVmPSJsZGl2Lmh0bWwjbGRpdiI+bGRpdjwvYT46ICAgICAgICAgRGl2aWRlIHR3byBsb25nIGludGVnZXJzCis8bGk+PGEgaHJlZj0ibGxhYnMuaHRtbCNsbGFicyI+bGxhYnM8L2E+OiAgICAgICAgTG9uZyBsb25nIGludGVnZXIgYWJzb2x1dGUgdmFsdWUgKG1hZ25pdHVkZSkKKzxsaT48YSBocmVmPSJsbGRpdi5odG1sI2xsZGl2Ij5sbGRpdjwvYT46ICAgICAgICBEaXZpZGUgdHdvIGxvbmcgbG9uZyBpbnRlZ2VycworPGxpPjxhIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+bWFsbG9jPC9hPjogICAgICAgQWxsb2NhdGUgYW5kIG1hbmFnZSBtZW1vcnkgKG1hbGxvYywgcmVhbGxvYywgZnJlZSkKKzxsaT48YSBocmVmPSJtYWxsaW5mby5odG1sI21hbGxpbmZvIj5tYWxsaW5mbzwvYT46IAlHZXQgaW5mb3JtYXRpb24gYWJvdXQgYWxsb2NhdGVkIG1lbW9yeQorPGxpPjxhIGhyZWY9Il8wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2suaHRtbCNnX3RfMDA1Zl8wMDVmbWFsbG9jXzAwNWZsb2NrIj5fX21hbGxvY19sb2NrPC9hPjogCUxvY2sgbWVtb3J5IHBvb2wgZm9yIG1hbGxvYyBhbmQgZnJlZQorPGxpPjxhIGhyZWY9Im1ic3J0b3djcy5odG1sI21ic3J0b3djcyI+bWJzcnRvd2NzPC9hPjogCUNvbnZlcnQgYSBjaGFyYWN0ZXIgc3RyaW5nIHRvIGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nCis8bGk+PGEgaHJlZj0ibWJzdG93Y3MuaHRtbCNtYnN0b3djcyI+bWJzdG93Y3M8L2E+OiAJTWluaW1hbCBtdWx0aWJ5dGUgc3RyaW5nIHRvIHdpZGUgc3RyaW5nIGNvbnZlcnRlcgorPGxpPjxhIGhyZWY9Im1ibGVuLmh0bWwjbWJsZW4iPm1ibGVuPC9hPjogCU1pbmltYWwgbXVsdGlieXRlIGxlbmd0aAorPGxpPjxhIGhyZWY9Im1idG93Yy5odG1sI21idG93YyI+bWJ0b3djPC9hPjogICAgICAgTWluaW1hbCBtdWx0aWJ5dGUgdG8gd2lkZSBjaGFyYWN0ZXIgY29udmVydGVyCis8bGk+PGEgaHJlZj0ib25fMDA1ZmV4aXQuaHRtbCNvbl8wMDVmZXhpdCI+b25fZXhpdDwvYT46ICAgICAgUmVxdWVzdCBleGVjdXRpb24gb2YgZnVuY3Rpb25zIGF0IHByb2dyYW0gZXhpdAorPGxpPjxhIGhyZWY9InFzb3J0Lmh0bWwjcXNvcnQiPnFzb3J0PC9hPjogCUFycmF5IHNvcnQKKzxsaT48YSBocmVmPSJyYW5kLmh0bWwjcmFuZCI+cmFuZDwvYT46ICAgICAgICAgUHNldWRvLXJhbmRvbSBudW1iZXJzCis8bGk+PGEgaHJlZj0icmFuZDQ4Lmh0bWwjcmFuZDQ4Ij5yYW5kNDg8L2E+OiAgICAgICBVbmlmb3JtbHkgZGlzdHJpYnV0ZWQgcHNldWRvLXJhbmRvbSBudW1iZXJzCis8bGk+PGEgaHJlZj0ic3RydG9kLmh0bWwjc3RydG9kIj5zdHJ0b2Q8L2E+OiAgICAgICBTdHJpbmcgdG8gZG91YmxlIG9yIGZsb2F0Cis8bGk+PGEgaHJlZj0ic3RydG9sLmh0bWwjc3RydG9sIj5zdHJ0b2w8L2E+OiAgICAgICBTdHJpbmcgdG8gbG9uZworPGxpPjxhIGhyZWY9InN0cnRvbGwuaHRtbCNzdHJ0b2xsIj5zdHJ0b2xsPC9hPjogICAgICBTdHJpbmcgdG8gbG9uZyBsb25nCis8bGk+PGEgaHJlZj0ic3RydG91bC5odG1sI3N0cnRvdWwiPnN0cnRvdWw8L2E+OiAgICAgIFN0cmluZyB0byB1bnNpZ25lZCBsb25nCis8bGk+PGEgaHJlZj0ic3RydG91bGwuaHRtbCNzdHJ0b3VsbCI+c3RydG91bGw8L2E+OiAgICAgU3RyaW5nIHRvIHVuc2lnbmVkIGxvbmcgbG9uZworPGxpPjxhIGhyZWY9Indjc3J0b21icy5odG1sI3djc3J0b21icyI+d2NzcnRvbWJzPC9hPjogCUNvbnZlcnQgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgdG8gYSBjaGFyYWN0ZXIgc3RyaW5nCis8bGk+PGEgaHJlZj0id2NzdG9kLmh0bWwjd2NzdG9kIj53Y3N0b2Q8L2E+OiAgICAgICBXaWRlIHN0cmluZyB0byBkb3VibGUgb3IgZmxvYXQKKzxsaT48YSBocmVmPSJ3Y3N0b2wuaHRtbCN3Y3N0b2wiPndjc3RvbDwvYT46ICAgICAgIFdpZGUgc3RyaW5nIHRvIGxvbmcKKzxsaT48YSBocmVmPSJ3Y3N0b2xsLmh0bWwjd2NzdG9sbCI+d2NzdG9sbDwvYT46ICAgICAgV2lkZSBzdHJpbmcgdG8gbG9uZyBsb25nCis8bGk+PGEgaHJlZj0id2NzdG91bC5odG1sI3djc3RvdWwiPndjc3RvdWw8L2E+OiAgICAgIFdpZGUgc3RyaW5nIHRvIHVuc2lnbmVkIGxvbmcKKzxsaT48YSBocmVmPSJ3Y3N0b3VsbC5odG1sI3djc3RvdWxsIj53Y3N0b3VsbDwvYT46ICAgICBXaWRlIHN0cmluZyB0byB1bnNpZ25lZCBsb25nIGxvbmcKKzxsaT48YSBocmVmPSJzeXN0ZW0uaHRtbCNzeXN0ZW0iPnN5c3RlbTwvYT46ICAgICAgIEV4ZWN1dGUgY29tbWFuZCBzdHJpbmcKKzxsaT48YSBocmVmPSJ3Y3N0b21icy5odG1sI3djc3RvbWJzIj53Y3N0b21iczwvYT46IAlNaW5pbWFsIHdpZGUgc3RyaW5nIHRvIG11bHRpYnl0ZSBzdHJpbmcgY29udmVydGVyCis8bGk+PGEgaHJlZj0id2N0b21iLmh0bWwjd2N0b21iIj53Y3RvbWI8L2E+OiAgICAgICBNaW5pbWFsIHdpZGUgY2hhcmFjdGVyIHRvIG11bHRpYnl0ZSBjb252ZXJ0ZXIKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1N0cmluZ3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1N0cmluZ3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmZlMGJhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvU3RyaW5ncy5odG1sCkBAIC0wLDAgKzEsODggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN0cmluZ3MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJTdHJpbmdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sI1RvcCI+VG9wPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0iY2hhcHRlciI+NSBTdHJpbmdzIGFuZCBNZW1vcnkgKDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdHJpbmcuaDwvc3Bhbj48L3NhbXA+KTwvaDI+CisKKzxwPlRoaXMgY2hhcHRlciBkZXNjcmliZXMgc3RyaW5nLWhhbmRsaW5nIGZ1bmN0aW9ucyBhbmQgZnVuY3Rpb25zIGZvcgorbWFuYWdpbmcgYXJlYXMgb2YgbWVtb3J5LiAgVGhlIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb25zIGFyZSBpbgorPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0cmluZy5oPC9zcGFuPjwvc2FtcD4uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJiY21wLmh0bWwjYmNtcCI+YmNtcDwvYT46ICAgICAgICAgQ29tcGFyZSB0d28gbWVtb3J5IGFyZWFzCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJiY29weS5odG1sI2Jjb3B5Ij5iY29weTwvYT46ICAgICAgICBDb3B5IG1lbW9yeSByZWdpb25zCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJiemVyby5odG1sI2J6ZXJvIj5iemVybzwvYT46ICAgICAgICBJbml0aWFsaXplIG1lbW9yeSB0byB6ZXJvCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJpbmRleC5odG1sI2luZGV4Ij5pbmRleDwvYT46ICAgICAgICBTZWFyY2ggZm9yIGNoYXJhY3RlciBpbiBzdHJpbmcKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9Im1lbWNjcHkuaHRtbCNtZW1jY3B5Ij5tZW1jY3B5PC9hPjogICAgICBDb3B5IG1lbW9yeSByZWdpb25zIHVwIHRvIGVuZC10b2tlbgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0ibWVtY2hyLmh0bWwjbWVtY2hyIj5tZW1jaHI8L2E+OiAgICAgICBGaW5kIGNoYXJhY3RlciBpbiBtZW1vcnkKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9Im1lbWNtcC5odG1sI21lbWNtcCI+bWVtY21wPC9hPjogICAgICAgQ29tcGFyZSB0d28gbWVtb3J5IGFyZWFzCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJtZW1jcHkuaHRtbCNtZW1jcHkiPm1lbWNweTwvYT46ICAgICAgIENvcHkgbWVtb3J5IHJlZ2lvbnMKKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9Im1lbW1lbS5odG1sI21lbW1lbSI+bWVtbWVtPC9hPjogICAgICAgRmluZCBtZW1vcnkgc2VnbWVudAorPGxpPjxhIGhyZWY9Im1lbW1vdmUuaHRtbCNtZW1tb3ZlIj5tZW1tb3ZlPC9hPjogICAgICBNb3ZlIHBvc3NpYmx5IG92ZXJsYXBwaW5nIG1lbW9yeQorPGxpPjxhIGhyZWY9Im1lbXBjcHkuaHRtbCNtZW1wY3B5Ij5tZW1wY3B5PC9hPjogCUNvcHkgbWVtb3J5IHJlZ2lvbnMgYW5kIGxvY2F0ZSBlbmQKKzxsaT48YSBocmVmPSJtZW1zZXQuaHRtbCNtZW1zZXQiPm1lbXNldDwvYT46ICAgICAgIFNldCBhbiBhcmVhIG9mIG1lbW9yeQorPGxpPjxhIGhyZWY9InJpbmRleC5odG1sI3JpbmRleCI+cmluZGV4PC9hPjogICAgICAgUmV2ZXJzZSBzZWFyY2ggZm9yIGNoYXJhY3RlciBpbiBzdHJpbmcKKzxsaT48YSBocmVmPSJzdHBjcHkuaHRtbCNzdHBjcHkiPnN0cGNweTwvYT46ICAgICAgIENvcHkgc3RyaW5nIHJldHVybmluZyBhIHBvaW50ZXIgdG8gaXRzIGVuZAorPGxpPjxhIGhyZWY9InN0cG5jcHkuaHRtbCNzdHBuY3B5Ij5zdHBuY3B5PC9hPjogICAgICBDb3VudGVkIGNvcHkgc3RyaW5nIHJldHVybmluZyBhIHBvaW50ZXIgdG8gaXRzIGVuZAorPGxpPjxhIGhyZWY9InN0cmNhc2VjbXAuaHRtbCNzdHJjYXNlY21wIj5zdHJjYXNlY21wPC9hPjogCUNvbXBhcmUgc3RyaW5ncyBpZ25vcmluZyBjYXNlCis8bGk+PGEgaHJlZj0ic3RyY2FzZXN0ci5odG1sI3N0cmNhc2VzdHIiPnN0cmNhc2VzdHI8L2E+OiAJRmluZCBzdHJpbmcgc2VnbWVudCBpZ25vcmluZyBjYXNlCis8bGk+PGEgaHJlZj0ic3RyY2F0Lmh0bWwjc3RyY2F0Ij5zdHJjYXQ8L2E+OiAgICAgICBDb25jYXRlbmF0ZSBzdHJpbmdzCis8bGk+PGEgaHJlZj0ic3RyY2hyLmh0bWwjc3RyY2hyIj5zdHJjaHI8L2E+OiAgICAgICBTZWFyY2ggZm9yIGNoYXJhY3RlciBpbiBzdHJpbmcKKzxsaT48YSBocmVmPSJzdHJjbXAuaHRtbCNzdHJjbXAiPnN0cmNtcDwvYT46ICAgICAgIENoYXJhY3RlciBzdHJpbmcgY29tcGFyZQorPGxpPjxhIGhyZWY9InN0cmNvbGwuaHRtbCNzdHJjb2xsIj5zdHJjb2xsPC9hPjogICAgICBMb2NhbGUtc3BlY2lmaWMgY2hhcmFjdGVyIHN0cmluZyBjb21wYXJlCis8bGk+PGEgaHJlZj0ic3RyY3B5Lmh0bWwjc3RyY3B5Ij5zdHJjcHk8L2E+OiAgICAgICBDb3B5IHN0cmluZworPGxpPjxhIGhyZWY9InN0cmNzcG4uaHRtbCNzdHJjc3BuIj5zdHJjc3BuPC9hPjogICAgICBDb3VudCBjaGFycyBub3QgaW4gc3RyaW5nCis8bGk+PGEgaHJlZj0ic3RyZXJyb3IuaHRtbCNzdHJlcnJvciI+c3RyZXJyb3I8L2E+OiAgICAgQ29udmVydCBlcnJvciBudW1iZXIgdG8gc3RyaW5nCis8bGk+PGEgaHJlZj0ic3RyZXJyb3JfMDA1ZnIuaHRtbCNzdHJlcnJvcl8wMDVmciI+c3RyZXJyb3JfcjwvYT46ICAgQ29udmVydCBlcnJvciBudW1iZXIgdG8gc3RyaW5nCis8bGk+PGEgaHJlZj0ic3RybGVuLmh0bWwjc3RybGVuIj5zdHJsZW48L2E+OiAgICAgICBDaGFyYWN0ZXIgc3RyaW5nIGxlbmd0aAorPGxpPjxhIGhyZWY9InN0cmx3ci5odG1sI3N0cmx3ciI+c3RybHdyPC9hPjogCUNvbnZlcnQgc3RyaW5nIHRvIGxvd2VyY2FzZQorPGxpPjxhIGhyZWY9InN0cm5jYXNlY21wLmh0bWwjc3RybmNhc2VjbXAiPnN0cm5jYXNlY21wPC9hPjogCUNvbXBhcmUgc3RyaW5ncyBpZ25vcmluZyBjYXNlCis8bGk+PGEgaHJlZj0ic3RybmNhdC5odG1sI3N0cm5jYXQiPnN0cm5jYXQ8L2E+OiAgICAgIENvbmNhdGVuYXRlIHN0cmluZ3MKKzxsaT48YSBocmVmPSJzdHJuY21wLmh0bWwjc3RybmNtcCI+c3RybmNtcDwvYT46ICAgICAgQ2hhcmFjdGVyIHN0cmluZyBjb21wYXJlCis8bGk+PGEgaHJlZj0ic3RybmNweS5odG1sI3N0cm5jcHkiPnN0cm5jcHk8L2E+OiAgICAgIENvdW50ZWQgY29weSBzdHJpbmcKKzxsaT48YSBocmVmPSJzdHJubGVuLmh0bWwjc3RybmxlbiI+c3RybmxlbjwvYT46ICAgICAgQ2hhcmFjdGVyIHN0cmluZyBsZW5ndGgKKzxsaT48YSBocmVmPSJzdHJwYnJrLmh0bWwjc3RycGJyayI+c3RycGJyazwvYT46ICAgICAgRmluZCBjaGFycyBpbiBzdHJpbmcKKzxsaT48YSBocmVmPSJzdHJyY2hyLmh0bWwjc3RycmNociI+c3RycmNocjwvYT46ICAgICAgUmV2ZXJzZSBzZWFyY2ggZm9yIGNoYXJhY3RlciBpbiBzdHJpbmcKKzxsaT48YSBocmVmPSJzdHJzaWduYWwuaHRtbCNzdHJzaWduYWwiPnN0cnNpZ25hbDwvYT46IAlSZXR1cm4gc2lnbmFsIG1lc3NhZ2Ugc3RyaW5nCis8bGk+PGEgaHJlZj0ic3Ryc3BuLmh0bWwjc3Ryc3BuIj5zdHJzcG48L2E+OiAgICAgICBGaW5kIGluaXRpYWwgbWF0Y2gKKzxsaT48YSBocmVmPSJzdHJzdHIuaHRtbCNzdHJzdHIiPnN0cnN0cjwvYT46ICAgICAgIEZpbmQgc3RyaW5nIHNlZ21lbnQKKzxsaT48YSBocmVmPSJzdHJ0b2suaHRtbCNzdHJ0b2siPnN0cnRvazwvYT46ICAgICAgIEdldCBuZXh0IHRva2VuIGZyb20gYSBzdHJpbmcKKzxsaT48YSBocmVmPSJzdHJ1cHIuaHRtbCNzdHJ1cHIiPnN0cnVwcjwvYT46IAlDb252ZXJ0IHN0cmluZyB0byB1cHBlciBjYXNlCis8bGk+PGEgaHJlZj0ic3RyeGZybS5odG1sI3N0cnhmcm0iPnN0cnhmcm08L2E+OiAgICAgIFRyYW5zZm9ybSBzdHJpbmcKKzxsaT48YSBocmVmPSJzd2FiLmh0bWwjc3dhYiI+c3dhYjwvYT46ICAgICAgICAgU3dhcCBhZGphY2VudCBieXRlcworPGxpPjxhIGhyZWY9Indjc2Nhc2VjbXAuaHRtbCN3Y3NjYXNlY21wIj53Y3NjYXNlY21wPC9hPjogICBDb21wYXJlIHdpZGUgY2hhcmFjdGVyIHN0cmluZ3MgaWdub3JpbmcgY2FzZQorPGxpPjxhIGhyZWY9Indjc2R1cC5odG1sI3djc2R1cCI+d2NzZHVwPC9hPjogICAgICAgV2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGR1cGxpY2F0ZQorPGxpPjxhIGhyZWY9Indjc25jYXNlY21wLmh0bWwjd2NzbmNhc2VjbXAiPndjc25jYXNlY21wPC9hPjogIENvbXBhcmUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5ncyBpZ25vcmluZyBjYXNlCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TdHVicy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvU3R1YnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzliYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvU3R1YnMuaHRtbApAQCAtMCwwICsxLDI0NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+U3R1YnMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN5c2NhbGxzLmh0bWwjU3lzY2FsbHMiIHRpdGxlPSJTeXNjYWxscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI1JlZW50cmFudC1TeXNjYWxscyIgdGl0bGU9IlJlZW50cmFudCBTeXNjYWxscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3R1YnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUmVlbnRyYW50LVN5c2NhbGxzLmh0bWwjUmVlbnRyYW50LVN5c2NhbGxzIj5SZWVudHJhbnQgU3lzY2FsbHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTeXNjYWxscy5odG1sI1N5c2NhbGxzIj5TeXNjYWxsczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEyLjEgRGVmaW5pdGlvbnMgZm9yIE9TIGludGVyZmFjZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0dWJzLTQ2MiI+PC9hPgorPGEgbmFtZT0iaW5kZXgtc3Vicm91dGluZXMtZm9yLU9TLWludGVyZmFjZS00NjMiPjwvYT48YSBuYW1lPSJpbmRleC1PUy1pbnRlcmZhY2Utc3Vicm91dGluZXMtNDY0Ij48L2E+VGhpcyBpcyB0aGUgY29tcGxldGUgc2V0IG9mIHN5c3RlbSBkZWZpbml0aW9ucyAocHJpbWFyaWx5IHN1YnJvdXRpbmVzKQorcmVxdWlyZWQ7IHRoZSBleGFtcGxlcyBzaG93biBpbXBsZW1lbnQgdGhlIG1pbmltYWwgZnVuY3Rpb25hbGl0eQorcmVxdWlyZWQgdG8gYWxsb3cgPGNvZGU+bGliYzwvY29kZT4gdG8gbGluaywgYW5kIGZhaWwgZ3JhY2VmdWxseSB3aGVyZSBPUworc2VydmljZXMgYXJlIG5vdCBhdmFpbGFibGUuCisKKyAgIDxwPkdyYWNlZnVsIGZhaWx1cmUgaXMgcGVybWl0dGVkIGJ5IHJldHVybmluZyBhbiBlcnJvciBjb2RlLiAgQSBtaW5vcgorY29tcGxpY2F0aW9uIGFyaXNlcyBoZXJlOiB0aGUgQyBsaWJyYXJ5IG11c3QgYmUgY29tcGF0aWJsZSB3aXRoCitkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgdGhhdCBzdXBwbHkgZnVsbHkgZnVuY3Rpb25hbCB2ZXJzaW9ucyBvZiB0aGVzZQorc3Vicm91dGluZXMuICBTdWNoIGVudmlyb25tZW50cyB1c3VhbGx5IHJldHVybiBlcnJvciBjb2RlcyBpbiBhIGdsb2JhbAorPGNvZGU+ZXJybm88L2NvZGU+LiAgSG93ZXZlciwgdGhlIFJlZCBIYXQgbmV3bGliIEMgbGlicmFyeSBwcm92aWRlcyBhIDxlbT5tYWNybzwvZW0+CitkZWZpbml0aW9uIGZvciA8Y29kZT5lcnJubzwvY29kZT4gaW4gdGhlIGhlYWRlciBmaWxlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5lcnJuby5oPC9zcGFuPjwvc2FtcD4sIGFzIHBhcnQKK29mIGl0cyBzdXBwb3J0IGZvciByZWVudHJhbnQgcm91dGluZXMgKHNlZSA8YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjUmVlbnRyYW5jeSI+UmVlbnRyYW5jeTwvYT4pLgorCisgICA8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3YmVycm5vXzAwN2QtZ2xvYmFsLXZzLW1hY3JvLTQ2NSI+PC9hPlRoZSBicmlkZ2UgYmV0d2VlbiB0aGVzZSB0d28gaW50ZXJwcmV0YXRpb25zIG9mIDxjb2RlPmVycm5vPC9jb2RlPiBpcworc3RyYWlnaHRmb3J3YXJkOiB0aGUgQyBsaWJyYXJ5IHJvdXRpbmVzIHdpdGggT1MgaW50ZXJmYWNlIGNhbGxzCitjYXB0dXJlIHRoZSA8Y29kZT5lcnJubzwvY29kZT4gdmFsdWVzIHJldHVybmVkIGdsb2JhbGx5LCBhbmQgcmVjb3JkIHRoZW0gaW4KK3RoZSBhcHByb3ByaWF0ZSBmaWVsZCBvZiB0aGUgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUgKHNvIHRoYXQgeW91IGNhbiBxdWVyeQordGhlbSB1c2luZyB0aGUgPGNvZGU+ZXJybm88L2NvZGU+IG1hY3JvIGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmVycm5vLmg8L3NwYW4+PC9zYW1wPikuCisKKyAgIDxwPlRoaXMgbWVjaGFuaXNtIGJlY29tZXMgdmlzaWJsZSB3aGVuIHlvdSB3cml0ZSBzdHViIHJvdXRpbmVzIGZvciBPUworaW50ZXJmYWNlcy4gICBZb3UgbXVzdCBpbmNsdWRlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5lcnJuby5oPC9zcGFuPjwvc2FtcD4sIHRoZW4gZGlzYWJsZSB0aGUgbWFjcm8sCitsaWtlIHRoaXM6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CisgICAgICN1bmRlZiBlcnJubworICAgICBleHRlcm4gaW50IGVycm5vOworPC9wcmU+CisgICA8cCBjbGFzcz0ibm9pbmRlbnQiPlRoZSBleGFtcGxlcyBpbiB0aGlzIGNoYXB0ZXIgaW5jbHVkZSB0aGlzIHRyZWF0bWVudCBvZiA8Y29kZT5lcnJubzwvY29kZT4uCisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPl9leGl0PC9jb2RlPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZXhpdC00NjYiPjwvYT48ZGQ+RXhpdCBhIHByb2dyYW0gd2l0aG91dCBjbGVhbmluZyB1cCBmaWxlcy4gIElmIHlvdXIgc3lzdGVtIGRvZXNuJ3QKK3Byb3ZpZGUgdGhpcywgaXQgaXMgYmVzdCB0byBhdm9pZCBsaW5raW5nIHdpdGggc3Vicm91dGluZXMgdGhhdCByZXF1aXJlCitpdCAoPGNvZGU+ZXhpdDwvY29kZT4sIDxjb2RlPnN5c3RlbTwvY29kZT4pLgorCisgICAgIDxicj48ZHQ+PGNvZGU+Y2xvc2U8L2NvZGU+PGEgbmFtZT0iaW5kZXgtY2xvc2UtNDY3Ij48L2E+PGRkPkNsb3NlIGEgZmlsZS4gIE1pbmltYWwgaW1wbGVtZW50YXRpb246CisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGludCBjbG9zZShpbnQgZmlsZSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmVudmlyb248L2NvZGU+PGEgbmFtZT0iaW5kZXgtZW52aXJvbi00NjgiPjwvYT48ZGQ+QSBwb2ludGVyIHRvIGEgbGlzdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHRoZWlyIHZhbHVlcy4gIEZvciBhCittaW5pbWFsIGVudmlyb25tZW50LCB0aGlzIGVtcHR5IGxpc3QgaXMgYWRlcXVhdGU6CisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGNoYXIgKl9fZW52WzFdID0geyAwIH07CisgICAgICAgICAgY2hhciAqKmVudmlyb24gPSBfX2VudjsKKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmV4ZWN2ZTwvY29kZT48YSBuYW1lPSJpbmRleC1leGVjdmUtNDY5Ij48L2E+PGRkPlRyYW5zZmVyIGNvbnRyb2wgdG8gYSBuZXcgcHJvY2Vzcy4gIE1pbmltYWwgaW1wbGVtZW50YXRpb24gKGZvciBhIHN5c3RlbQord2l0aG91dCBwcm9jZXNzZXMpOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKKyAgICAgICAgICAjdW5kZWYgZXJybm8KKyAgICAgICAgICBleHRlcm4gaW50IGVycm5vOworICAgICAgICAgIGludCBleGVjdmUoY2hhciAqbmFtZSwgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYpIHsKKyAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmZvcms8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZm9yay00NzAiPjwvYT48ZGQ+Q3JlYXRlIGEgbmV3IHByb2Nlc3MuICBNaW5pbWFsIGltcGxlbWVudGF0aW9uIChmb3IgYSBzeXN0ZW0gd2l0aG91dCBwcm9jZXNzZXMpOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKKyAgICAgICAgICAjdW5kZWYgZXJybm8KKyAgICAgICAgICBleHRlcm4gaW50IGVycm5vOworICAgICAgICAgIGludCBmb3JrKHZvaWQpIHsKKyAgICAgICAgICAgIGVycm5vID0gRUFHQUlOOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmZzdGF0PC9jb2RlPjxhIG5hbWU9ImluZGV4LWZzdGF0LTQ3MSI+PC9hPjxkZD5TdGF0dXMgb2YgYW4gb3BlbiBmaWxlLiAgRm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgbWluaW1hbAoraW1wbGVtZW50YXRpb25zIGluIHRoZXNlIGV4YW1wbGVzLCBhbGwgZmlsZXMgYXJlIHJlZ2FyZGVkIGFzIGNoYXJhY3Rlcgorc3BlY2lhbCBkZXZpY2VzLiAgVGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zeXMvc3RhdC5oPC9zcGFuPjwvc2FtcD4gaGVhZGVyIGZpbGUgcmVxdWlyZWQgaXMKK2Rpc3RyaWJ1dGVkIGluIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+aW5jbHVkZTwvc3Bhbj48L3NhbXA+IHN1YmRpcmVjdG9yeSBmb3IgdGhpcyBDIGxpYnJhcnkuCisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OworICAgICAgICAgIGludCBmc3RhdChpbnQgZmlsZSwgc3RydWN0IHN0YXQgKnN0KSB7CisgICAgICAgICAgICBzdC0mZ3Q7c3RfbW9kZSA9IFNfSUZDSFI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5nZXRwaWQ8L2NvZGU+PGEgbmFtZT0iaW5kZXgtZ2V0cGlkLTQ3MiI+PC9hPjxkZD5Qcm9jZXNzLUlEOyB0aGlzIGlzIHNvbWV0aW1lcyB1c2VkIHRvIGdlbmVyYXRlIHN0cmluZ3MgdW5saWtlbHkgdG8KK2NvbmZsaWN0IHdpdGggb3RoZXIgcHJvY2Vzc2VzLiAgTWluaW1hbCBpbXBsZW1lbnRhdGlvbiwgZm9yIGEgc3lzdGVtCit3aXRob3V0IHByb2Nlc3NlczoKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgaW50IGdldHBpZCh2b2lkKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5pc2F0dHk8L2NvZGU+PGEgbmFtZT0iaW5kZXgtaXNhdHR5LTQ3MyI+PC9hPjxkZD5RdWVyeSB3aGV0aGVyIG91dHB1dCBzdHJlYW0gaXMgYSB0ZXJtaW5hbC4gICBGb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUKK290aGVyIG1pbmltYWwgaW1wbGVtZW50YXRpb25zLCB3aGljaCBvbmx5IHN1cHBvcnQgb3V0cHV0IHRvCis8Y29kZT5zdGRvdXQ8L2NvZGU+LCB0aGlzIG1pbmltYWwgaW1wbGVtZW50YXRpb24gaXMgc3VnZ2VzdGVkOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBpbnQgaXNhdHR5KGludCBmaWxlKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5raWxsPC9jb2RlPjxhIG5hbWU9ImluZGV4LWtpbGwtNDc0Ij48L2E+PGRkPlNlbmQgYSBzaWduYWwuICBNaW5pbWFsIGltcGxlbWVudGF0aW9uOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKKyAgICAgICAgICAjdW5kZWYgZXJybm8KKyAgICAgICAgICBleHRlcm4gaW50IGVycm5vOworICAgICAgICAgIGludCBraWxsKGludCBwaWQsIGludCBzaWcpIHsKKyAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKzwvcHJlPgorICAgICA8YnI+PGR0Pjxjb2RlPmxpbms8L2NvZGU+PGEgbmFtZT0iaW5kZXgtbGluay00NzUiPjwvYT48ZGQ+RXN0YWJsaXNoIGEgbmV3IG5hbWUgZm9yIGFuIGV4aXN0aW5nIGZpbGUuICBNaW5pbWFsIGltcGxlbWVudGF0aW9uOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKKyAgICAgICAgICAjdW5kZWYgZXJybm8KKyAgICAgICAgICBleHRlcm4gaW50IGVycm5vOworICAgICAgICAgIGludCBsaW5rKGNoYXIgKm9sZCwgY2hhciAqbmV3KSB7CisgICAgICAgICAgICBlcnJubyA9IEVNTElOSzsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5sc2VlazwvY29kZT48YSBuYW1lPSJpbmRleC1sc2Vlay00NzYiPjwvYT48ZGQ+U2V0IHBvc2l0aW9uIGluIGEgZmlsZS4gIE1pbmltYWwgaW1wbGVtZW50YXRpb246CisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGludCBsc2VlayhpbnQgZmlsZSwgaW50IHB0ciwgaW50IGRpcikgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+b3BlbjwvY29kZT48YSBuYW1lPSJpbmRleC1vcGVuLTQ3NyI+PC9hPjxkZD5PcGVuIGEgZmlsZS4gIE1pbmltYWwgaW1wbGVtZW50YXRpb246CisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgIGludCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncywgaW50IG1vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5yZWFkPC9jb2RlPjxhIG5hbWU9ImluZGV4LXJlYWQtNDc4Ij48L2E+PGRkPlJlYWQgZnJvbSBhIGZpbGUuICBNaW5pbWFsIGltcGxlbWVudGF0aW9uOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBpbnQgcmVhZChpbnQgZmlsZSwgY2hhciAqcHRyLCBpbnQgbGVuKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5zYnJrPC9jb2RlPjxhIG5hbWU9ImluZGV4LXNicmstNDc5Ij48L2E+PGRkPkluY3JlYXNlIHByb2dyYW0gZGF0YSBzcGFjZS4gIEFzIDxjb2RlPm1hbGxvYzwvY29kZT4gYW5kIHJlbGF0ZWQgZnVuY3Rpb25zCitkZXBlbmQgb24gdGhpcywgaXQgaXMgdXNlZnVsIHRvIGhhdmUgYSB3b3JraW5nIGltcGxlbWVudGF0aW9uLiAgVGhlCitmb2xsb3dpbmcgc3VmZmljZXMgZm9yIGEgc3RhbmRhbG9uZSBzeXN0ZW07IGl0IGV4cGxvaXRzIHRoZSBzeW1ib2wKKzxjb2RlPl9lbmQ8L2NvZGU+IGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBieSB0aGUgR05VIGxpbmtlci4KKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgY2FkZHJfdCBzYnJrKGludCBpbmNyKSB7CisgICAgICAgICAgICBleHRlcm4gY2hhciBfZW5kOwkJLyogPHNwYW4gY2xhc3M9InJvbWFuIj5EZWZpbmVkIGJ5IHRoZSBsaW5rZXI8L3NwYW4+ICovCisgICAgICAgICAgICBzdGF0aWMgY2hhciAqaGVhcF9lbmQ7CisgICAgICAgICAgICBjaGFyICpwcmV2X2hlYXBfZW5kOworICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGhlYXBfZW5kID09IDApIHsKKyAgICAgICAgICAgICAgaGVhcF9lbmQgPSAmYW1wO19lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmV2X2hlYXBfZW5kID0gaGVhcF9lbmQ7CisgICAgICAgICAgICBpZiAoaGVhcF9lbmQgKyBpbmNyICZndDsgc3RhY2tfcHRyKSB7CisgICAgICAgICAgICAgIHdyaXRlICgxLCAiSGVhcCBhbmQgc3RhY2sgY29sbGlzaW9uXG4iLCAyNSk7CisgICAgICAgICAgICAgIGFib3J0ICgpOworICAgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgICAgaGVhcF9lbmQgKz0gaW5jcjsKKyAgICAgICAgICAgIHJldHVybiAoY2FkZHJfdCkgcHJldl9oZWFwX2VuZDsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT5zdGF0PC9jb2RlPjxhIG5hbWU9ImluZGV4LXN0YXQtNDgwIj48L2E+PGRkPlN0YXR1cyBvZiBhIGZpbGUgKGJ5IG5hbWUpLiAgTWluaW1hbCBpbXBsZW1lbnRhdGlvbjoKKworICAgICA8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICAgICAgaW50IHN0YXQoY2hhciAqZmlsZSwgc3RydWN0IHN0YXQgKnN0KSB7CisgICAgICAgICAgICBzdC0mZ3Q7c3RfbW9kZSA9IFNfSUZDSFI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT50aW1lczwvY29kZT48YSBuYW1lPSJpbmRleC10aW1lcy00ODEiPjwvYT48ZGQ+VGltaW5nIGluZm9ybWF0aW9uIGZvciBjdXJyZW50IHByb2Nlc3MuICBNaW5pbWFsIGltcGxlbWVudGF0aW9uOgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBpbnQgdGltZXMoc3RydWN0IHRtcyAqYnVmKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDxicj48ZHQ+PGNvZGU+dW5saW5rPC9jb2RlPjxhIG5hbWU9ImluZGV4LXVubGluay00ODIiPjwvYT48ZGQ+UmVtb3ZlIGEgZmlsZSdzIGRpcmVjdG9yeSBlbnRyeS4gIE1pbmltYWwgaW1wbGVtZW50YXRpb246CisKKyAgICAgPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAgICAgICNpbmNsdWRlICZsdDtlcnJuby5oJmd0OworICAgICAgICAgICN1bmRlZiBlcnJubworICAgICAgICAgIGV4dGVybiBpbnQgZXJybm87CisgICAgICAgICAgaW50IHVubGluayhjaGFyICpuYW1lKSB7CisgICAgICAgICAgICBlcnJubyA9IEVOT0VOVDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT53YWl0PC9jb2RlPjxhIG5hbWU9ImluZGV4LXdhaXQtNDgzIj48L2E+PGRkPldhaXQgZm9yIGEgY2hpbGQgcHJvY2Vzcy4gIE1pbmltYWwgaW1wbGVtZW50YXRpb246CisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICAjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKKyAgICAgICAgICAjdW5kZWYgZXJybm8KKyAgICAgICAgICBleHRlcm4gaW50IGVycm5vOworICAgICAgICAgIGludCB3YWl0KGludCAqc3RhdHVzKSB7CisgICAgICAgICAgICBlcnJubyA9IEVDSElMRDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9Cis8L3ByZT4KKyAgICAgPGJyPjxkdD48Y29kZT53cml0ZTwvY29kZT48YSBuYW1lPSJpbmRleC13cml0ZS00ODQiPjwvYT48ZGQ+V3JpdGUgdG8gYSBmaWxlLiAgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmxpYmM8L3NwYW4+PC9zYW1wPiBzdWJyb3V0aW5lcyB3aWxsIHVzZSB0aGlzCitzeXN0ZW0gcm91dGluZSBmb3Igb3V0cHV0IHRvIGFsbCBmaWxlcywgPGVtPmluY2x1ZGluZzwvZW0+Cis8Y29kZT5zdGRvdXQ8L2NvZGU+Jm1kYXNoO3NvIGlmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIGFueSBvdXRwdXQsIGZvciBleGFtcGxlIHRvIGEKK3NlcmlhbCBwb3J0IGZvciBkZWJ1Z2dpbmcsIHlvdSBzaG91bGQgbWFrZSB5b3VyIG1pbmltYWwgPGNvZGU+d3JpdGU8L2NvZGU+CitjYXBhYmxlIG9mIGRvaW5nIHRoaXMuICBUaGUgZm9sbG93aW5nIG1pbmltYWwgaW1wbGVtZW50YXRpb24gaXMgYW4KK2luY29tcGxldGUgZXhhbXBsZTsgaXQgcmVsaWVzIG9uIGEgPGNvZGU+b3V0Ynl0ZTwvY29kZT4gc3Vicm91dGluZSAobm90CitzaG93bjsgdHlwaWNhbGx5LCB5b3UgbXVzdCB3cml0ZSB0aGlzIGluIGFzc2VtYmxlciBmcm9tIGV4YW1wbGVzCitwcm92aWRlZCBieSB5b3VyIGhhcmR3YXJlIG1hbnVmYWN0dXJlcikgdG8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgb3V0cHV0LgorCisgICAgIDxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgICAgICBpbnQgd3JpdGUoaW50IGZpbGUsIGNoYXIgKnB0ciwgaW50IGxlbikgeworICAgICAgICAgICAgaW50IHRvZG87CisgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHRvZG8gPSAwOyB0b2RvICZsdDsgbGVuOyB0b2RvKyspIHsKKyAgICAgICAgICAgICAgb3V0Ynl0ZSAoKnB0cisrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsZW47CisgICAgICAgICAgfQorPC9wcmU+CisgICAgIDwvZGw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1N5c2NhbGxzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TeXNjYWxscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZWUzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9TeXNjYWxscy5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlN5c2NhbGxzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ik1pc2MuaHRtbCNNaXNjIiB0aXRsZT0iTWlzYyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkFyZ2xpc3RzLmh0bWwjQXJnbGlzdHMiIHRpdGxlPSJBcmdsaXN0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iU3lzY2FsbHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iQXJnbGlzdHMuaHRtbCNBcmdsaXN0cyI+QXJnbGlzdHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNaXNjLmh0bWwjTWlzYyI+TWlzYzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xMiBTeXN0ZW0gQ2FsbHM8L2gyPgorCis8cD48YSBuYW1lPSJpbmRleC1saW5raW5nLXRoZS1DLWxpYnJhcnktNDYxIj48L2E+VGhlIEMgc3Vicm91dGluZSBsaWJyYXJ5IGRlcGVuZHMgb24gYSBoYW5kZnVsIG9mIHN1YnJvdXRpbmUgY2FsbHMgZm9yCitvcGVyYXRpbmcgc3lzdGVtIHNlcnZpY2VzLiAgSWYgeW91IHVzZSB0aGUgQyBsaWJyYXJ5IG9uIGEgc3lzdGVtIHRoYXQKK2NvbXBsaWVzIHdpdGggdGhlIFBPU0lYLjEgc3RhbmRhcmQgKGFsc28ga25vd24gYXMgSUVFRSAxMDAzLjEpLCBtb3N0IG9mCit0aGVzZSBzdWJyb3V0aW5lcyBhcmUgc3VwcGxpZWQgd2l0aCB5b3VyIG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgIDxwPklmIHNvbWUgb2YgdGhlc2Ugc3Vicm91dGluZXMgYXJlIG5vdCBwcm92aWRlZCB3aXRoIHlvdXIgc3lzdGVtJm1kYXNoO2luCit0aGUgZXh0cmVtZSBjYXNlLCBpZiB5b3UgYXJlIGRldmVsb3Bpbmcgc29mdHdhcmUgZm9yIGEgJmxkcXVvO2JhcmUgYm9hcmQmcmRxdW87CitzeXN0ZW0sIHdpdGhvdXQgYW4gT1MmbWRhc2g7eW91IHdpbGwgYXQgbGVhc3QgbmVlZCB0byBwcm92aWRlIGRvLW5vdGhpbmcKK3N0dWJzIChvciBzdWJyb3V0aW5lcyB3aXRoIG1pbmltYWwgZnVuY3Rpb25hbGl0eSkgdG8gYWxsb3cgeW91cgorcHJvZ3JhbXMgdG8gbGluayB3aXRoIHRoZSBzdWJyb3V0aW5lcyBpbiA8Y29kZT5saWJjLmE8L2NvZGU+LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iU3R1YnMuaHRtbCNTdHVicyI+U3R1YnM8L2E+OiAJCURlZmluaXRpb25zIGZvciBPUyBpbnRlcmZhY2UKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9IlJlZW50cmFudC1TeXNjYWxscy5odG1sI1JlZW50cmFudC1TeXNjYWxscyI+UmVlbnRyYW50IFN5c2NhbGxzPC9hPjogCVJlZW50cmFudCBjb3ZlcnMgZm9yIE9TIHN1YnJvdXRpbmVzCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9UaW1lZm5zLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9UaW1lZm5zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkMjZlOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1RpbWVmbnMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5UaW1lZm5zIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlNpZ25hbHMuaHRtbCNTaWduYWxzIiB0aXRsZT0iU2lnbmFscyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxvY2FsZS5odG1sI0xvY2FsZSIgdGl0bGU9IkxvY2FsZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVGltZWZucyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMb2NhbGUuaHRtbCNMb2NhbGUiPkxvY2FsZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlNpZ25hbHMuaHRtbCNTaWduYWxzIj5TaWduYWxzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjggVGltZSBGdW5jdGlvbnMgKDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj50aW1lLmg8L3NwYW4+PC9zYW1wPik8L2gyPgorCis8cD5UaGlzIGNoYXB0ZXIgZ3JvdXBzIGZ1bmN0aW9ucyB1c2VkIGVpdGhlciBmb3IgcmVwb3J0aW5nIG9uIHRpbWUKKyhlbGFwc2VkLCBjdXJyZW50LCBvciBjb21wdXRlIHRpbWUpIG9yIHRvIHBlcmZvcm0gY2FsY3VsYXRpb25zIGJhc2VkCitvbiB0aW1lLgorCisgICA8cD5UaGUgaGVhZGVyIGZpbGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnRpbWUuaDwvc3Bhbj48L3NhbXA+IGRlZmluZXMgdGhyZWUgdHlwZXMuICA8Y29kZT5jbG9ja190PC9jb2RlPiBhbmQKKzxjb2RlPnRpbWVfdDwvY29kZT4gYXJlIGJvdGggdXNlZCBmb3IgcmVwcmVzZW50YXRpb25zIG9mIHRpbWUgcGFydGljdWxhcmx5CitzdWl0YWJsZSBmb3IgYXJpdGhtZXRpYy4gIChJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBxdWFudGl0aWVzIG9mIHR5cGUKKzxjb2RlPmNsb2NrX3Q8L2NvZGU+IGhhdmUgdGhlIGhpZ2hlc3QgcmVzb2x1dGlvbiBwb3NzaWJsZSBvbiB5b3VyIG1hY2hpbmUsCithbmQgcXVhbnRpdGllcyBvZiB0eXBlIDxjb2RlPnRpbWVfdDwvY29kZT4gcmVzb2x2ZSB0byBzZWNvbmRzLikgIDxjb2RlPnNpemVfdDwvY29kZT4KK2lzIGFsc28gZGVmaW5lZCBpZiBuZWNlc3NhcnkgZm9yIHF1YW50aXRpZXMgcmVwcmVzZW50aW5nIHNpemVzLgorCisgICA8cD48c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+dGltZS5oPC9zcGFuPjwvc2FtcD4gYWxzbyBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgPGNvZGU+dG08L2NvZGU+IGZvciB0aGUgdHJhZGl0aW9uYWwKK3JlcHJlc2VudGF0aW9uIG9mIEdyZWdvcmlhbiBjYWxlbmRhciB0aW1lIGFzIGEgc2VyaWVzIG9mIG51bWJlcnMsIHdpdGgKK3RoZSBmb2xsb3dpbmcgZmllbGRzOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT50bV9zZWM8L2NvZGU+PGRkPlNlY29uZHMsIGJldHdlZW4gMCBhbmQgNjAgaW5jbHVzaXZlICg2MCBhbGxvd3MgZm9yIGxlYXAgc2Vjb25kcykuCisKKyAgICAgPGJyPjxkdD48Y29kZT50bV9taW48L2NvZGU+PGRkPk1pbnV0ZXMsIGJldHdlZW4gMCBhbmQgNTkgaW5jbHVzaXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dG1faG91cjwvY29kZT48ZGQ+SG91cnMsIGJldHdlZW4gMCBhbmQgMjMgaW5jbHVzaXZlLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dG1fbWRheTwvY29kZT48ZGQ+RGF5IG9mIHRoZSBtb250aCwgYmV0d2VlbiAxIGFuZCAzMSBpbmNsdXNpdmUuCisKKyAgICAgPGJyPjxkdD48Y29kZT50bV9tb248L2NvZGU+PGRkPk1vbnRoLCBiZXR3ZWVuIDAgKEphbnVhcnkpIGFuZCAxMSAoRGVjZW1iZXIpLgorCisgICAgIDxicj48ZHQ+PGNvZGU+dG1feWVhcjwvY29kZT48ZGQ+WWVhciAoc2luY2UgMTkwMCksIGNhbiBiZSBuZWdhdGl2ZSBmb3IgZWFybGllciB5ZWFycy4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRtX3dkYXk8L2NvZGU+PGRkPkRheSBvZiB3ZWVrLCBiZXR3ZWVuIDAgKFN1bmRheSkgYW5kIDYgKFNhdHVyZGF5KS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRtX3lkYXk8L2NvZGU+PGRkPk51bWJlciBvZiBkYXlzIGVsYXBzZWQgc2luY2UgbGFzdCBKYW51YXJ5IDEsIGJldHdlZW4gMCBhbmQgMzY1IGluY2x1c2l2ZS4KKworICAgICA8YnI+PGR0Pjxjb2RlPnRtX2lzZHN0PC9jb2RlPjxkZD5EYXlsaWdodCBTYXZpbmdzIFRpbWUgZmxhZzogcG9zaXRpdmUgbWVhbnMgRFNUIGluIGVmZmVjdCwgemVybyBtZWFucyBEU1QKK25vdCBpbiBlZmZlY3QsIG5lZ2F0aXZlIG1lYW5zIG5vIGluZm9ybWF0aW9uIGFib3V0IERTVCBpcyBhdmFpbGFibGUuIAorQWx0aG91Z2ggZm9yIG1rdGltZSgpLCBuZWdhdGl2ZSBtZWFucyB0aGF0IGl0IHNob3VsZCBkZWNpZGUgaWYgRFNUIGlzIGluCitlZmZlY3Qgb3Igbm90LiAKKzwvZGw+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJhc2N0aW1lLmh0bWwjYXNjdGltZSI+YXNjdGltZTwvYT46ICAgICAgRm9ybWF0IHRpbWUgYXMgc3RyaW5nCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJjbG9jay5odG1sI2Nsb2NrIj5jbG9jazwvYT46ICAgICAgICBDdW11bGF0aXZlIHByb2Nlc3NvciB0aW1lCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJjdGltZS5odG1sI2N0aW1lIj5jdGltZTwvYT46ICAgICAgICBDb252ZXJ0IHRpbWUgdG8gbG9jYWwgYW5kIGZvcm1hdCBhcyBzdHJpbmcKKzxsaT48YSBhY2Nlc3NrZXk9IjQiIGhyZWY9ImRpZmZ0aW1lLmh0bWwjZGlmZnRpbWUiPmRpZmZ0aW1lPC9hPjogICAgIFN1YnRyYWN0IHR3byB0aW1lcworPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iZ210aW1lLmh0bWwjZ210aW1lIj5nbXRpbWU8L2E+OiAgICAgICBDb252ZXJ0IHRpbWUgdG8gVVRDIChHTVQpIHRyYWRpdGlvbmFsIHJlcHJlc2VudGF0aW9uCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJsb2NhbHRpbWUuaHRtbCNsb2NhbHRpbWUiPmxvY2FsdGltZTwvYT46ICAgIENvbnZlcnQgdGltZSB0byBsb2NhbCByZXByZXNlbnRhdGlvbgorPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0ibWt0aW1lLmh0bWwjbWt0aW1lIj5ta3RpbWU8L2E+OiAgICAgICBDb252ZXJ0IHRpbWUgdG8gYXJpdGhtZXRpYyByZXByZXNlbnRhdGlvbgorPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0ic3RyZnRpbWUuaHRtbCNzdHJmdGltZSI+c3RyZnRpbWU8L2E+OiAgICAgQ29udmVydCBkYXRlIGFuZCB0aW1lIHRvIGEgdXNlci1mb3JtYXR0ZWQgc3RyaW5nCis8bGk+PGEgYWNjZXNza2V5PSI5IiBocmVmPSJ0aW1lLmh0bWwjdGltZSI+dGltZTwvYT46ICAgICAgICAgR2V0IGN1cnJlbnQgY2FsZW5kYXIgdGltZSAoYXMgc2luZ2xlIG51bWJlcikKKzxsaT48YSBocmVmPSJfMDA1Zl8wMDVmdHpfMDA1ZmxvY2suaHRtbCNnX3RfMDA1Zl8wMDVmdHpfMDA1ZmxvY2siPl9fdHpfbG9jazwvYT46ICAgIExvY2sgdGltZSB6b25lIGdsb2JhbCB2YXJpYWJsZXMKKzxsaT48YSBocmVmPSJ0enNldC5odG1sI3R6c2V0Ij50enNldDwvYT46ICAgICAgICBTZXQgdGltZXpvbmUgaW5mbworPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvVmFyYXJncy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvVmFyYXJncy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmU0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9WYXJhcmdzLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+VmFyYXJncyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQXJnbGlzdHMuaHRtbCNBcmdsaXN0cyIgdGl0bGU9IkFyZ2xpc3RzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iU3RkYXJnLmh0bWwjU3RkYXJnIiB0aXRsZT0iU3RkYXJnIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJWYXJhcmdzIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iU3RkYXJnLmh0bWwjU3RkYXJnIj5TdGRhcmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJBcmdsaXN0cy5odG1sI0FyZ2xpc3RzIj5BcmdsaXN0czwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEzLjIgVHJhZGl0aW9uYWwgbWFjcm9zLCA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+dmFyYXJncy5oPC9zcGFuPjwvc2FtcD48L2gzPgorCis8cD5JZiB5b3VyIEMgY29tcGlsZXIgcHJlZGF0ZXMgQU5TSSBDLCB5b3UgbWF5IHN0aWxsIGJlIGFibGUgdG8gdXNlCit2YXJpYWJsZSBhcmd1bWVudCBsaXN0cyB1c2luZyB0aGUgbWFjcm9zIGZyb20gdGhlIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj52YXJhcmdzLmg8L3NwYW4+PC9zYW1wPgoraGVhZGVyIGZpbGUuICBUaGVzZSBtYWNyb3MgcmVzZW1ibGUgdGhlaXIgQU5TSSBjb3VudGVycGFydHMsIGJ1dCBoYXZlCitpbXBvcnRhbnQgZGlmZmVyZW5jZXMgaW4gdXNhZ2UuICAgSW4gcGFydGljdWxhciwgc2luY2UgdHJhZGl0aW9uYWwgQyBoYXMKK25vIGRlY2xhcmF0aW9uIG1lY2hhbmlzbSBmb3IgdmFyaWFibGUgYXJndW1lbnQgbGlzdHMsIHR3byBhZGRpdGlvbmFsCittYWNyb3MgYXJlIHByb3ZpZGVkIHNpbXBseSBmb3IgdGhlIHB1cnBvc2Ugb2YgZGVmaW5pbmcgZnVuY3Rpb25zIHdpdGgKK3ZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzLgorCisgICA8cD5BcyB3aXRoIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5zdGRhcmcuaDwvc3Bhbj48L3NhbXA+LCB0aGUgdHlwZSA8Y29kZT52YV9saXN0PC9jb2RlPiBpcyB1c2VkIHRvIGhvbGQgYSBkYXRhCitzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KKworPHVsIGNsYXNzPSJtZW51Ij4KKzxsaT48YSBhY2Nlc3NrZXk9IjEiIGhyZWY9InZhXzAwNWZhbGlzdC5odG1sI3ZhXzAwNWZhbGlzdCI+dmFfYWxpc3Q8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJ2YV8wMDVmc3RhcnRfMDAyZHRyYWQuaHRtbCN2YV8wMDVmc3RhcnRfMDAyZHRyYWQiPnZhX3N0YXJ0LXRyYWQ8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJ2YV8wMDVmYXJnXzAwMmR0cmFkLmh0bWwjdmFfMDA1ZmFyZ18wMDJkdHJhZCI+dmFfYXJnLXRyYWQ8L2E+Cis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJ2YV8wMDVmZW5kXzAwMmR0cmFkLmh0bWwjdmFfMDA1ZmVuZF8wMDJkdHJhZCI+dmFfZW5kLXRyYWQ8L2E+Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9XY2hhci1zdHJpbmdzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9XY2hhci1zdHJpbmdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlOGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL1djaGFyLXN0cmluZ3MuaHRtbApAQCAtMCwwICsxLDczIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5XY2hhciBzdHJpbmdzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IlNpZ25hbHMuaHRtbCNTaWduYWxzIiB0aXRsZT0iU2lnbmFscyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iV2NoYXItc3RyaW5ncyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJTaWduYWxzLmh0bWwjU2lnbmFscyI+U2lnbmFsczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjYgV2lkZSBDaGFyYWN0ZXIgU3RyaW5ncyAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPndjaGFyLmg8L3NwYW4+PC9zYW1wPik8L2gyPgorCis8cD5UaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHdpZGUtY2hhcmFjdGVyIHN0cmluZy1oYW5kbGluZyBmdW5jdGlvbnMgYW5kCittYW5hZ2luZyBhcmVhcyBvZiBtZW1vcnkgY29udGFpbmluZyB3aWRlIGNoYXJhY3RlcnMuICBUaGUgY29ycmVzcG9uZGluZworZGVjbGFyYXRpb25zIGFyZSBpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+d2NoYXIuaDwvc3Bhbj48L3NhbXA+LgorCis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0id21lbWNoci5odG1sI3dtZW1jaHIiPndtZW1jaHI8L2E+OiAgICAgIEZpbmQgd2lkZSBjaGFyYWN0ZXIgaW4gbWVtb3J5Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJ3bWVtY21wLmh0bWwjd21lbWNtcCI+d21lbWNtcDwvYT46ICAgICAgQ29tcGFyZSB0d28gd2lkZS1jaGFyYWN0ZXIgbWVtb3J5IGFyZWFzCis8bGk+PGEgYWNjZXNza2V5PSIzIiBocmVmPSJ3bWVtY3B5Lmh0bWwjd21lbWNweSI+d21lbWNweTwvYT46ICAgICAgQ29weSB3aWRlLWNoYXJhY3RlciBtZW1vcnkgcmVnaW9ucworPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0id21lbW1vdmUuaHRtbCN3bWVtbW92ZSI+d21lbW1vdmU8L2E+OiAgICAgTW92ZSBwb3NzaWJseSBvdmVybGFwcGluZyB3aWRlLWNoYXJhY3RlciBtZW1vcnkKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IndtZW1zZXQuaHRtbCN3bWVtc2V0Ij53bWVtc2V0PC9hPjogICAgICBTZXQgYW4gYXJlYSBvZiBtZW1vcnkgdG8gYSBzcGVjaWZpZWQgd2lkZSBjaGFyYWN0ZXIKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9Indjc2NhdC5odG1sI3djc2NhdCI+d2NzY2F0PC9hPjogICAgICAgQ29uY2F0ZW5hdGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5ncworPGxpPjxhIGFjY2Vzc2tleT0iNyIgaHJlZj0id2NzY2hyLmh0bWwjd2NzY2hyIj53Y3NjaHI8L2E+OiAgICAgICBTZWFyY2ggZm9yIHdpZGUgY2hhcmFjdGVyIGluIHN0cmluZworPGxpPjxhIGFjY2Vzc2tleT0iOCIgaHJlZj0id2NzY21wLmh0bWwjd2NzY21wIj53Y3NjbXA8L2E+OiAgICAgICBXaWRlLWNoYXJhY3RlciBzdHJpbmcgY29tcGFyZQorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0id2NzY29sbC5odG1sI3djc2NvbGwiPndjc2NvbGw8L2E+OiAgICAgIExvY2FsZS1zcGVjaWZpYyB3aWRlLWNoYXJhY3RlciBzdHJpbmcgY29tcGFyZQorPGxpPjxhIGhyZWY9Indjc2NweS5odG1sI3djc2NweSI+d2NzY3B5PC9hPjogICAgICAgQ29weSB3aWRlLWNoYXJhY3RlciBzdHJpbmcKKzxsaT48YSBocmVmPSJ3Y3BjcHkuaHRtbCN3Y3BjcHkiPndjcGNweTwvYT46ICAgICAgIENvcHkgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBpdHMgZW5kCis8bGk+PGEgaHJlZj0id2NzY3Nwbi5odG1sI3djc2NzcG4iPndjc2NzcG48L2E+OiAgICAgIENvdW50IHdpZGUgY2hhcmFjdGVycyBub3QgaW4gc3RyaW5nCis8bGk+PGEgaHJlZj0id2NzZnRpbWUuaHRtbCN3Y3NmdGltZSI+d2NzZnRpbWU8L2E+OiAgICAgQ29udmVydCBkYXRlIGFuZCB0aW1lIHRvIGEgZm9ybWF0dGVkIHdpZGUtY2hhcmFjdGVyIHN0cmluZworPGxpPjxhIGhyZWY9Indjc2xjYXQuaHRtbCN3Y3NsY2F0Ij53Y3NsY2F0PC9hPjogICAgICBDb25jYXRlbmF0ZSB3aWRlLWNoYXJhY3RlciBzdHJpbmdzIHRvIHNwZWNpZmllZCBsZW5ndGgKKzxsaT48YSBocmVmPSJ3Y3NsY3B5Lmh0bWwjd2NzbGNweSI+d2NzbGNweTwvYT46ICAgICAgQ29weSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgdG8gc3BlY2lmaWVkIGxlbmd0aAorPGxpPjxhIGhyZWY9Indjc2xlbi5odG1sI3djc2xlbiI+d2NzbGVuPC9hPjogICAgICAgV2lkZS1jaGFyYWN0ZXIgc3RyaW5nIGxlbmd0aAorPGxpPjxhIGhyZWY9Indjc25jYXQuaHRtbCN3Y3NuY2F0Ij53Y3NuY2F0PC9hPjogICAgICBDb25jYXRlbmF0ZSB3aWRlLWNoYXJhY3RlciBzdHJpbmdzCis8bGk+PGEgaHJlZj0id2NzbmNtcC5odG1sI3djc25jbXAiPndjc25jbXA8L2E+OiAgICAgIFdpZGUtY2hhcmFjdGVyIHN0cmluZyBjb21wYXJlCis8bGk+PGEgaHJlZj0id2NzbmNweS5odG1sI3djc25jcHkiPndjc25jcHk8L2E+OiAgICAgIENvdW50ZWQgY29weSB3aWRlLWNoYXJhY3RlciBzdHJpbmcKKzxsaT48YSBocmVmPSJ3Y3BuY3B5Lmh0bWwjd2NwbmNweSI+d2NwbmNweTwvYT46ICAgICAgQ29weSBwYXJ0IG9mIGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHJldHVybmluZyBhIHBvaW50ZXIgdG8gaXRzIGVuZAorPGxpPjxhIGhyZWY9Indjc25sZW4uaHRtbCN3Y3NubGVuIj53Y3NubGVuPC9hPjogICAgICBXaWRlLWNoYXJhY3RlciBzdHJpbmcgbGVuZ3RoIHdpdGggbWF4aW11bSBsaW1pdAorPGxpPjxhIGhyZWY9Indjc3BicmsuaHRtbCN3Y3NwYnJrIj53Y3NwYnJrPC9hPjogICAgICBGaW5kIHdpZGUgY2hhcmFjdGVycyBpbiBzdHJpbmcKKzxsaT48YSBocmVmPSJ3Y3NyY2hyLmh0bWwjd2NzcmNociI+d2NzcmNocjwvYT46ICAgICAgUmV2ZXJzZSBzZWFyY2ggZm9yIHdpZGUgY2hhcmFjdGVyIGluIHN0cmluZworPGxpPjxhIGhyZWY9Indjc3Nwbi5odG1sI3djc3NwbiI+d2Nzc3BuPC9hPjogICAgICAgRmluZCBpbml0aWFsIG1hdGNoIGluIHdpZGUtY2hhcmFjdGVyIHN0cmluZworPGxpPjxhIGhyZWY9Indjc3N0ci5odG1sI3djc3N0ciI+d2Nzc3RyPC9hPjogICAgICAgRmluZCB3aWRlLWNoYXJhY3RlciBzdHJpbmcgc2VnbWVudAorPGxpPjxhIGhyZWY9Indjc3Rvay5odG1sI3djc3RvayI+d2NzdG9rPC9hPjogICAgICAgVG9rZW5pemUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nCis8bGk+PGEgaHJlZj0id2Nzd2lkdGguaHRtbCN3Y3N3aWR0aCI+d2Nzd2lkdGg8L2E+OiAgICAgTnVtYmVyIG9mIGNvbHVtbiBwb3NpdGlvbnMgb2YgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcKKzxsaT48YSBocmVmPSJ3Y3N4ZnJtLmh0bWwjd2NzeGZybSI+d2NzeGZybTwvYT46ICAgICAgTG9jYWxlLXNwZWNpZmljIHdpZGUtY2hhcmFjdGVyIHN0cmluZyB0cmFuc2Zvcm1hdGlvbgorPGxpPjxhIGhyZWY9Indjd2lkdGguaHRtbCN3Y3dpZHRoIj53Y3dpZHRoPC9hPjogICAgICBOdW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyBvZiBhIHdpZGUtY2hhcmFjdGVyIGNvZGUKKzwvdWw+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL18wMDVmRXhpdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvXzAwNWZFeGl0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5NGM2OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL18wMDVmRXhpdC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPl9FeGl0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhNjRsLmh0bWwjYTY0bCIgdGl0bGU9ImE2NGwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Il9FeGl0Ij48L2E+Cis8YSBuYW1lPSJnX3RfMDA1ZkV4aXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iYTY0bC5odG1sI2E2NGwiPmE2NGw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMSA8Y29kZT5fRXhpdDwvY29kZT4mbWRhc2g7ZW5kIHByb2dyYW0gZXhlY3V0aW9uIHdpdGggbm8gY2xlYW51cCBwcm9jZXNzaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZFeGl0LTEiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgdm9pZCBfRXhpdChpbnQgPHZhcj5jb2RlPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitVc2UgPGNvZGU+X0V4aXQ8L2NvZGU+IHRvIHJldHVybiBjb250cm9sIGZyb20gYSBwcm9ncmFtIHRvIHRoZSBob3N0IG9wZXJhdGluZworZW52aXJvbm1lbnQuICBVc2UgdGhlIGFyZ3VtZW50IDx2YXI+Y29kZTwvdmFyPiB0byBwYXNzIGFuIGV4aXQgc3RhdHVzIHRvIHRoZQorb3BlcmF0aW5nIGVudmlyb25tZW50OiB0d28gcGFydGljdWxhciB2YWx1ZXMsIDxjb2RlPkVYSVRfU1VDQ0VTUzwvY29kZT4gYW5kCis8Y29kZT5FWElUX0ZBSUxVUkU8L2NvZGU+LCBhcmUgZGVmaW5lZCBpbiBgPGNvZGU+c3RkbGliLmg8L2NvZGU+JyB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yCitmYWlsdXJlIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KKworICAgPHA+PGNvZGU+X0V4aXQ8L2NvZGU+IGRpZmZlcnMgZnJvbSA8Y29kZT5leGl0PC9jb2RlPiBpbiB0aGF0IGl0IGRvZXMgbm90IHJ1biBhbnkKK2FwcGxpY2F0aW9uLWRlZmluZWQgY2xlYW51cCBmdW5jdGlvbnMgcmVnaXN0ZXJlZCB3aXRoIDxjb2RlPmF0ZXhpdDwvY29kZT4gYW5kCitpdCBkb2VzIG5vdCBjbGVhbiB1cCBmaWxlcyBhbmQgc3RyZWFtcy4gIEl0IGlzIGlkZW50aWNhbCB0byA8Y29kZT5fZXhpdDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPl9FeGl0PC9jb2RlPiBkb2VzIG5vdCByZXR1cm4gdG8gaXRzIGNhbGxlci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPl9FeGl0PC9jb2RlPiBpcyBkZWZpbmVkIGJ5IHRoZSBDOTkgc3RhbmRhcmQuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPl9leGl0PC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9fMDA1Zl8wMDVmZW52XzAwNWZsb2NrLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9fMDA1Zl8wMDVmZW52XzAwNWZsb2NrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1NzE5MwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL18wMDVmXzAwNWZlbnZfMDA1ZmxvY2suaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5fX2Vudl9sb2NrIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJlY3Z0Lmh0bWwjZWN2dCIgdGl0bGU9ImVjdnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJndmN2dC5odG1sI2d2Y3Z0IiB0aXRsZT0iZ3ZjdnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Il9fZW52X2xvY2siPjwvYT4KKzxhIG5hbWU9ImdfdF8wMDVmXzAwNWZlbnZfMDA1ZmxvY2siPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3ZjdnQuaHRtbCNndmN2dCI+Z3ZjdnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJlY3Z0Lmh0bWwjZWN2dCI+ZWN2dDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xNiA8Y29kZT5fX2Vudl9sb2NrPC9jb2RlPiwgPGNvZGU+X19lbnZfdW5sb2NrPC9jb2RlPiZtZGFzaDtsb2NrIGVudmlyb24gdmFyaWFibGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmZW52XzAwNWZsb2NrLTI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZmVudl8wMDVmdW5sb2NrLTI5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7ZW52bG9jay5oJmd0OworICAgICB2b2lkIF9fZW52X2xvY2sgKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4pOworICAgICB2b2lkIF9fZW52X3VubG9jayAoc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPnNldGVudjwvY29kZT4gZmFtaWx5IG9mIHJvdXRpbmVzIGNhbGwgdGhlc2UgZnVuY3Rpb25zIHdoZW4gdGhleSBuZWVkIHRvCittb2RpZnkgdGhlIGVudmlyb24gdmFyaWFibGUuICBUaGUgdmVyc2lvbiBvZiB0aGVzZSByb3V0aW5lcyBzdXBwbGllZCBpbiB0aGUKK2xpYnJhcnkgdXNlIHRoZSBsb2NrIEFQSSBkZWZpbmVkIGluIHN5cy9sb2NrLmguICBJZiBtdWx0aXBsZSB0aHJlYWRzIG9mCitleGVjdXRpb24gY2FuIGNhbGwgPGNvZGU+c2V0ZW52PC9jb2RlPiwgb3IgaWYgPGNvZGU+c2V0ZW52PC9jb2RlPiBjYW4gYmUgY2FsbGVkIHJlZW50cmFudGx5LAordGhlbiB5b3UgbmVlZCB0byBkZWZpbmUgeW91ciBvd24gdmVyc2lvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIGluIG9yZGVyIHRvCitzYWZlbHkgbG9jayB0aGUgbWVtb3J5IHBvb2wgZHVyaW5nIGEgY2FsbC4gIElmIHlvdSBkbyBub3QsIHRoZSBtZW1vcnkgcG9vbAorbWF5IGJlY29tZSBjb3JydXB0ZWQuCisKKyAgIDxwPkEgY2FsbCB0byA8Y29kZT5zZXRlbnY8L2NvZGU+IG1heSBjYWxsIDxjb2RlPl9fZW52X2xvY2s8L2NvZGU+IHJlY3Vyc2l2ZWx5OyB0aGF0IGlzLAordGhlIHNlcXVlbmNlIG9mIGNhbGxzIG1heSBnbyA8Y29kZT5fX2Vudl9sb2NrPC9jb2RlPiwgPGNvZGU+X19lbnZfbG9jazwvY29kZT4sCis8Y29kZT5fX2Vudl91bmxvY2s8L2NvZGU+LCA8Y29kZT5fX2Vudl91bmxvY2s8L2NvZGU+LiAgQW55IGltcGxlbWVudGF0aW9uIG9mIHRoZXNlCityb3V0aW5lcyBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQgY2F1c2luZyBhIHRocmVhZCB0byB3YWl0IGZvciBhIGxvY2sKK3RoYXQgaXQgYWxyZWFkeSBob2xkcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9fMDA1Zl8wMDVmbWFsbG9jXzAwNWZsb2NrLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9fMDA1Zl8wMDVmbWFsbG9jXzAwNWZsb2NrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyMzliYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL18wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2suaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5fX21hbGxvY19sb2NrIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJtYWxsaW5mby5odG1sI21hbGxpbmZvIiB0aXRsZT0ibWFsbGluZm8iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJtYnNydG93Y3MuaHRtbCNtYnNydG93Y3MiIHRpdGxlPSJtYnNydG93Y3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Il9fbWFsbG9jX2xvY2siPjwvYT4KKzxhIG5hbWU9ImdfdF8wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2siPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibWJzcnRvd2NzLmh0bWwjbWJzcnRvd2NzIj5tYnNydG93Y3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJtYWxsaW5mby5odG1sI21hbGxpbmZvIj5tYWxsaW5mbzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4yNSA8Y29kZT5fX21hbGxvY19sb2NrPC9jb2RlPiwgPGNvZGU+X19tYWxsb2NfdW5sb2NrPC9jb2RlPiZtZGFzaDtsb2NrIG1hbGxvYyBwb29sPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1Zm1hbGxvY18wMDVmbG9jay01NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZtYWxsb2NfMDA1ZnVubG9jay01NiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hbGxvYy5oJmd0OworICAgICB2b2lkIF9fbWFsbG9jX2xvY2sgKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4pOworICAgICB2b2lkIF9fbWFsbG9jX3VubG9jayAoc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPm1hbGxvYzwvY29kZT4gZmFtaWx5IG9mIHJvdXRpbmVzIGNhbGwgdGhlc2UgZnVuY3Rpb25zIHdoZW4gdGhleSBuZWVkIHRvIGxvY2sKK3RoZSBtZW1vcnkgcG9vbC4gIFRoZSB2ZXJzaW9uIG9mIHRoZXNlIHJvdXRpbmVzIHN1cHBsaWVkIGluIHRoZSBsaWJyYXJ5IHVzZQordGhlIGxvY2sgQVBJIGRlZmluZWQgaW4gc3lzL2xvY2suaC4gIElmIG11bHRpcGxlIHRocmVhZHMgb2YgZXhlY3V0aW9uIGNhbgorY2FsbCA8Y29kZT5tYWxsb2M8L2NvZGU+LCBvciBpZiA8Y29kZT5tYWxsb2M8L2NvZGU+IGNhbiBiZSBjYWxsZWQgcmVlbnRyYW50bHksIHRoZW4geW91IG5lZWQgdG8KK2RlZmluZSB5b3VyIG93biB2ZXJzaW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gb3JkZXIgdG8gc2FmZWx5IGxvY2sgdGhlCittZW1vcnkgcG9vbCBkdXJpbmcgYSBjYWxsLiAgSWYgeW91IGRvIG5vdCwgdGhlIG1lbW9yeSBwb29sIG1heSBiZWNvbWUKK2NvcnJ1cHRlZC4KKworICAgPHA+QSBjYWxsIHRvIDxjb2RlPm1hbGxvYzwvY29kZT4gbWF5IGNhbGwgPGNvZGU+X19tYWxsb2NfbG9jazwvY29kZT4gcmVjdXJzaXZlbHk7IHRoYXQgaXMsCit0aGUgc2VxdWVuY2Ugb2YgY2FsbHMgbWF5IGdvIDxjb2RlPl9fbWFsbG9jX2xvY2s8L2NvZGU+LCA8Y29kZT5fX21hbGxvY19sb2NrPC9jb2RlPiwKKzxjb2RlPl9fbWFsbG9jX3VubG9jazwvY29kZT4sIDxjb2RlPl9fbWFsbG9jX3VubG9jazwvY29kZT4uICBBbnkgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UKK3JvdXRpbmVzIG11c3QgYmUgY2FyZWZ1bCB0byBhdm9pZCBjYXVzaW5nIGEgdGhyZWFkIHRvIHdhaXQgZm9yIGEgbG9jawordGhhdCBpdCBhbHJlYWR5IGhvbGRzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL18wMDVmXzAwNWZ0el8wMDVmbG9jay5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvXzAwNWZfMDA1ZnR6XzAwNWZsb2NrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzZDliOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL18wMDVmXzAwNWZ0el8wMDVmbG9jay5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPl9fdHpfbG9jayAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiIHRpdGxlPSJUaW1lZm5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idGltZS5odG1sI3RpbWUiIHRpdGxlPSJ0aW1lIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idHpzZXQuaHRtbCN0enNldCIgdGl0bGU9InR6c2V0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJfX3R6X2xvY2siPjwvYT4KKzxhIG5hbWU9ImdfdF8wMDVmXzAwNWZ0el8wMDVmbG9jayI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0enNldC5odG1sI3R6c2V0Ij50enNldDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InRpbWUuaHRtbCN0aW1lIj50aW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiPlRpbWVmbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjEwIDxjb2RlPl9fdHpfbG9jazwvY29kZT4sIDxjb2RlPl9fdHpfdW5sb2NrPC9jb2RlPiZtZGFzaDtsb2NrIHRpbWUgem9uZSBnbG9iYWwgdmFyaWFibGVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZfMDA1ZnR6XzAwNWZsb2NrLTQ0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmXzAwNWZ0el8wMDVmdW5sb2NrLTQ0MiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgImxvY2FsLmgiCisgICAgIHZvaWQgX190el9sb2NrICh2b2lkKTsKKyAgICAgdm9pZCBfX3R6X3VubG9jayAodm9pZCk7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPnR6c2V0PC9jb2RlPiBmYWNpbGl0eSBmdW5jdGlvbnMgY2FsbCB0aGVzZSBmdW5jdGlvbnMgd2hlbiB0aGV5IG5lZWQgdG8KK2Vuc3VyZSB0aGUgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuICBUaGUgdmVyc2lvbiBvZiB0aGVzZSByb3V0aW5lcworc3VwcGxpZWQgaW4gdGhlIGxpYnJhcnkgdXNlIHRoZSBsb2NrIEFQSSBkZWZpbmVkIGluIHN5cy9sb2NrLmguICBJZiBtdWx0aXBsZQordGhyZWFkcyBvZiBleGVjdXRpb24gY2FuIGNhbGwgdGhlIHRpbWUgZnVuY3Rpb25zIGFuZCBnaXZlIHVwIHNjaGVkdWxpbmcgaW4KK3RoZSBtaWRkbGUsIHRoZW4geW91IHlvdSBuZWVkIHRvIGRlZmluZSB5b3VyIG93biB2ZXJzaW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMKK2luIG9yZGVyIHRvIHNhZmVseSBsb2NrIHRoZSB0aW1lIHpvbmUgdmFyaWFibGVzIGR1cmluZyBhIGNhbGwuICBJZiB5b3UgZG8KK25vdCwgdGhlIHJlc3VsdHMgb2YgPGNvZGU+bG9jYWx0aW1lPC9jb2RlPiwgPGNvZGU+bWt0aW1lPC9jb2RlPiwgPGNvZGU+Y3RpbWU8L2NvZGU+LCBhbmQgPGNvZGU+c3RyZnRpbWU8L2NvZGU+CithcmUgdW5kZWZpbmVkLgorCisgICA8cD5UaGUgbG9jayA8Y29kZT5fX3R6X2xvY2s8L2NvZGU+IG1heSBub3QgYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5OyB0aGF0IGlzLAorYSBjYWxsIDxjb2RlPl9fdHpfbG9jazwvY29kZT4gd2lsbCBhbHdheXMgbG9jayBhbGwgc3Vic2VxdWVudCA8Y29kZT5fX3R6X2xvY2s8L2NvZGU+IGNhbGxzCit1bnRpbCB0aGUgY29ycmVzcG9uZGluZyA8Y29kZT5fX3R6X3VubG9jazwvY29kZT4gY2FsbCBvbiB0aGUgc2FtZSB0aHJlYWQgaXMgbWFkZS4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hNjRsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hNjRsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2ZDk3YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2E2NGwuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hNjRsIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJfMDA1ZkV4aXQuaHRtbCNnX3RfMDA1ZkV4aXQiIHRpdGxlPSJfRXhpdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImFib3J0Lmh0bWwjYWJvcnQiIHRpdGxlPSJhYm9ydCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYTY0bCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhYm9ydC5odG1sI2Fib3J0Ij5hYm9ydDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Il8wMDVmRXhpdC5odG1sI2dfdF8wMDVmRXhpdCI+X0V4aXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMiA8Y29kZT5hNjRsPC9jb2RlPiwgPGNvZGU+bDY0YTwvY29kZT4mbWRhc2g7Y29udmVydCBiZXR3ZWVuIHJhZGl4LTY0IEFTQ0lJIHN0cmluZyBhbmQgbG9uZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWE2NGwtMiI+PC9hPjxhIG5hbWU9ImluZGV4LWw2NGEtMyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBsb25nIGE2NGwoY29uc3QgY2hhciAqPHZhcj5pbnB1dDwvdmFyPik7CisgICAgIGNoYXIgKmw2NGEobG9uZyA8dmFyPmlucHV0PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitDb252ZXJzaW9uIGlzIHBlcmZvcm1lZCBiZXR3ZWVuIGxvbmcgYW5kIHJhZGl4LTY0IGNoYXJhY3RlcnMuICBUaGUKKzxjb2RlPmw2NGE8L2NvZGU+IHJvdXRpbmUgdHJhbnNmb3JtcyB1cCB0byAzMiBiaXRzIG9mIGlucHV0IHZhbHVlIHN0YXJ0aW5nIGZyb20KK2xlYXN0IHNpZ25pZmljYW50IGJpdHMgdG8gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cy4gIFRoZSBpbnB1dCB2YWx1ZQoraXMgc3BsaXQgdXAgaW50byBhIG1heGltdW0gb2YgNSBncm91cHMgb2YgNiBiaXRzIGFuZCBwb3NzaWJseSBvbmUKK2dyb3VwIG9mIDIgYml0cyAoYml0cyAzMSBhbmQgMzApLgorCisgICA8cD5FYWNoIGdyb3VwIG9mIDYgYml0cyBmb3JtcyBhIHZhbHVlIGZyb20gMCZuZGFzaDs2MyB3aGljaCBpcyB0cmFuc2xhdGVkIGludG8KK2EgY2hhcmFjdGVyIGFzIGZvbGxvd3M6CisKKyAgICAgPHVsPgorPGxpPjAgPSAnLicgCis8bGk+MSA9ICcvJworPGxpPjImbmRhc2g7MTEgPSAnMCcgdG8gJzknCis8bGk+MTImbmRhc2g7MzcgPSAnQScgdG8gJ1onCis8bGk+MzgmbmRhc2g7NjMgPSAnYScgdG8gJ3onCis8L3VsPgorCisgICA8cD5XaGVuIHRoZSByZW1haW5pbmcgYml0cyBhcmUgemVybyBvciBhbGwgYml0cyBoYXZlIGJlZW4gdHJhbnNsYXRlZCwgYQorbnVsbCB0ZXJtaW5hdG9yIGlzIGFwcGVuZGVkIHRvIHRoZSBzdHJpbmcuICBBbiBpbnB1dCB2YWx1ZSBvZiAwCityZXN1bHRzIGluIHRoZSBlbXB0eSBzdHJpbmcuCisKKyAgIDxwPlRoZSA8Y29kZT5hNjRsPC9jb2RlPiBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgcmV2ZXJzZSB0cmFuc2xhdGlvbi4gIEVhY2gKK2NoYXJhY3RlciBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgNi1iaXQgdmFsdWUgZm9yIHVwIHRvIDMwIGJpdHMgYW5kIHRoZW4KK2EgMi1iaXQgdmFsdWUgdG8gY29tcGxldGUgYSAzMi1iaXQgcmVzdWx0LiAgVGhlIG51bGwgdGVybWluYXRvciBtZWFucwordGhhdCB0aGUgcmVtYWluaW5nIGRpZ2l0cyBhcmUgMC4gIEFuIGVtcHR5IGlucHV0IHN0cmluZyBvciBOVUxMIHN0cmluZworcmVzdWx0cyBpbiAwTC4gIEFuIGludmFsaWQgc3RyaW5nIHJlc3VsdHMgaW4gdW5kZWZpbmVkIGJlaGF2aW9yLiAgSWYKK3RoZSBzaXplIG9mIGEgbG9uZyBpcyBncmVhdGVyIHRoYW4gMzIgYml0cywgdGhlIHJlc3VsdCBpcyBzaWduLWV4dGVuZGVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5sNjRhPC9jb2RlPiByZXR1cm5zIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBvZiAwIHRvIDYgY2hhcmFjdGVycy4gCis8Y29kZT5hNjRsPC9jb2RlPiByZXR1cm5zIHRoZSAzMi1iaXQgdHJhbnNsYXRlZCB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBjaGFyYWN0ZXIgc3RyaW5nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+bDY0YTwvY29kZT4gYW5kIDxjb2RlPmE2NGw8L2NvZGU+IGFyZSBub24tQU5TSSBhbmQgYXJlIGRlZmluZWQgYnkgdGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24uCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IE5vbmUuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYWJvcnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2Fib3J0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBkYjk1OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2Fib3J0Lmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+YWJvcnQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImE2NGwuaHRtbCNhNjRsIiB0aXRsZT0iYTY0bCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImFicy5odG1sI2FicyIgdGl0bGU9ImFicyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYWJvcnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iYWJzLmh0bWwjYWJzIj5hYnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJhNjRsLmh0bWwjYTY0bCI+YTY0bDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4zIDxjb2RlPmFib3J0PC9jb2RlPiZtZGFzaDthYm5vcm1hbCB0ZXJtaW5hdGlvbiBvZiBhIHByb2dyYW08L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hYm9ydC00Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIHZvaWQgYWJvcnQodm9pZCk7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPmFib3J0PC9jb2RlPiB0byBzaWduYWwgdGhhdCB5b3VyIHByb2dyYW0gaGFzIGRldGVjdGVkIGEgY29uZGl0aW9uIGl0CitjYW5ub3QgZGVhbCB3aXRoLiAgTm9ybWFsbHksIDxjb2RlPmFib3J0PC9jb2RlPiBlbmRzIHlvdXIgcHJvZ3JhbSdzIGV4ZWN1dGlvbi4KKworICAgPHA+QmVmb3JlIHRlcm1pbmF0aW5nIHlvdXIgcHJvZ3JhbSwgPGNvZGU+YWJvcnQ8L2NvZGU+IHJhaXNlcyB0aGUgZXhjZXB0aW9uIDxjb2RlPlNJR0FCUlQ8L2NvZGU+CisodXNpbmcgYDxjb2RlPnJhaXNlKFNJR0FCUlQpPC9jb2RlPicpLiAgSWYgeW91IGhhdmUgdXNlZCA8Y29kZT5zaWduYWw8L2NvZGU+IHRvIHJlZ2lzdGVyCithbiBleGNlcHRpb24gaGFuZGxlciBmb3IgdGhpcyBjb25kaXRpb24sIHRoYXQgaGFuZGxlciBoYXMgdGhlCitvcHBvcnR1bml0eSB0byByZXRhaW4gY29udHJvbCwgdGhlcmVieSBhdm9pZGluZyBwcm9ncmFtIHRlcm1pbmF0aW9uLgorCisgICA8cD5JbiB0aGlzIGltcGxlbWVudGF0aW9uLCA8Y29kZT5hYm9ydDwvY29kZT4gZG9lcyBub3QgcGVyZm9ybSBhbnkgc3RyZWFtLSBvcgorZmlsZS1yZWxhdGVkIGNsZWFudXAgKHRoZSBob3N0IGVudmlyb25tZW50IG1heSBkbyBzbzsgaWYgbm90LCB5b3UgY2FuCithcnJhbmdlIGZvciB5b3VyIHByb2dyYW0gdG8gZG8gaXRzIG93biBjbGVhbnVwIHdpdGggYSA8Y29kZT5TSUdBQlJUPC9jb2RlPgorZXhjZXB0aW9uIGhhbmRsZXIpLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5hYm9ydDwvY29kZT4gZG9lcyBub3QgcmV0dXJuIHRvIGl0cyBjYWxsZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+YWJvcnQ8L2NvZGU+LgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5fZXhpdDwvY29kZT4gYW5kIG9wdGlvbmFsbHksIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hYnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2Ficy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMDQ4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hYnMuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hYnMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImFib3J0Lmh0bWwjYWJvcnQiIHRpdGxlPSJhYm9ydCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImFzc2VydC5odG1sI2Fzc2VydCIgdGl0bGU9ImFzc2VydCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYWJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImFzc2VydC5odG1sI2Fzc2VydCI+YXNzZXJ0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iYWJvcnQuaHRtbCNhYm9ydCI+YWJvcnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuNCA8Y29kZT5hYnM8L2NvZGU+Jm1kYXNoO2ludGVnZXIgYWJzb2x1dGUgdmFsdWUgKG1hZ25pdHVkZSk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hYnMtNSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBpbnQgYWJzKGludCA8dmFyPmk8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmFiczwvY29kZT4gcmV0dXJucwordGhlIGFic29sdXRlIHZhbHVlIG9mIDx2YXI+aTwvdmFyPiAoYWxzbyBjYWxsZWQgdGhlIG1hZ25pdHVkZQorb2YgPHZhcj5pPC92YXI+KS4gIFRoYXQgaXMsIGlmIDx2YXI+aTwvdmFyPiBpcyBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyB0aGUgb3Bwb3NpdGUKK29mIDx2YXI+aTwvdmFyPiwgYnV0IGlmIDx2YXI+aTwvdmFyPiBpcyBub25uZWdhdGl2ZSB0aGUgcmVzdWx0IGlzIDx2YXI+aTwvdmFyPi4KKworICAgPHA+VGhlIHNpbWlsYXIgZnVuY3Rpb24gPGNvZGU+bGFiczwvY29kZT4gdXNlcyBhbmQgcmV0dXJucyA8Y29kZT5sb25nPC9jb2RlPiByYXRoZXIgdGhhbiA8Y29kZT5pbnQ8L2NvZGU+IHZhbHVlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJlc3VsdCBpcyBhIG5vbm5lZ2F0aXZlIGludGVnZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5hYnM8L2NvZGU+IGlzIEFOU0kuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2FzY3RpbWUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2FzY3RpbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc2YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYXNjdGltZS5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmFzY3RpbWUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIiB0aXRsZT0iVGltZWZucyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNsb2NrLmh0bWwjY2xvY2siIHRpdGxlPSJjbG9jayI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYXNjdGltZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjbG9jay5odG1sI2Nsb2NrIj5jbG9jazwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIj5UaW1lZm5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4xIDxjb2RlPmFzY3RpbWU8L2NvZGU+Jm1kYXNoO2Zvcm1hdCB0aW1lIGFzIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWFzY3RpbWUtNDI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZhc2N0aW1lXzAwNWZyLTQyOSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKKyAgICAgY2hhciAqYXNjdGltZShjb25zdCBzdHJ1Y3QgdG0gKjx2YXI+Y2xvY2s8L3Zhcj4pOworICAgICBjaGFyICpfYXNjdGltZV9yKGNvbnN0IHN0cnVjdCB0bSAqPHZhcj5jbG9jazwvdmFyPiwgY2hhciAqPHZhcj5idWY8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK0Zvcm1hdCB0aGUgdGltZSB2YWx1ZSBhdCA8dmFyPmNsb2NrPC92YXI+IGludG8gYSBzdHJpbmcgb2YgdGhlIGZvcm0KKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgV2VkIEp1biAxNSAxMTozODowNyAxOTg4XG5cMAorPC9wcmU+CisgICA8cD5UaGUgc3RyaW5nIGlzIGdlbmVyYXRlZCBpbiBhIHN0YXRpYyBidWZmZXI7IGVhY2ggY2FsbCB0byA8Y29kZT5hc2N0aW1lPC9jb2RlPgorb3ZlcndyaXRlcyB0aGUgc3RyaW5nIGdlbmVyYXRlZCBieSBwcmV2aW91cyBjYWxscy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorQSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgY29udGFpbmluZyBhIGZvcm1hdHRlZCB0aW1lc3RhbXAuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+YXNjdGltZTwvY29kZT4uCisKKyAgIDxwPjxjb2RlPmFzY3RpbWU8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYXNzZXJ0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hc3NlcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2I1OGUzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYXNzZXJ0Lmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+YXNzZXJ0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhYnMuaHRtbCNhYnMiIHRpdGxlPSJhYnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhdGV4aXQuaHRtbCNhdGV4aXQiIHRpdGxlPSJhdGV4aXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImFzc2VydCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhdGV4aXQuaHRtbCNhdGV4aXQiPmF0ZXhpdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImFicy5odG1sI2FicyI+YWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjUgPGNvZGU+YXNzZXJ0PC9jb2RlPiZtZGFzaDttYWNybyBmb3IgZGVidWdnaW5nIGRpYWdub3N0aWNzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXNzZXJ0LTYiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDthc3NlcnQuaCZndDsKKyAgICAgdm9pZCBhc3NlcnQoaW50IDx2YXI+ZXhwcmVzc2lvbjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIHRoaXMgbWFjcm8gdG8gZW1iZWQgZGVidWdnZ2luZyBkaWFnbm9zdGljIHN0YXRlbWVudHMgaW4KK3lvdXIgcHJvZ3JhbXMuICBUaGUgYXJndW1lbnQgPHZhcj5leHByZXNzaW9uPC92YXI+IHNob3VsZCBiZSBhbgorZXhwcmVzc2lvbiB3aGljaCBldmFsdWF0ZXMgdG8gdHJ1ZSAobm9uemVybykgd2hlbiB5b3VyIHByb2dyYW0KK2lzIHdvcmtpbmcgYXMgeW91IGludGVuZGVkLgorCisgICA8cD5XaGVuIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPiBldmFsdWF0ZXMgdG8gZmFsc2UgKHplcm8pLCA8Y29kZT5hc3NlcnQ8L2NvZGU+CitjYWxscyA8Y29kZT5hYm9ydDwvY29kZT4sIGFmdGVyIGZpcnN0IHByaW50aW5nIGEgbWVzc2FnZSBzaG93aW5nIHdoYXQKK2ZhaWxlZCBhbmQgd2hlcmU6CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgQXNzZXJ0aW9uIGZhaWxlZDogPHZhcj5leHByZXNzaW9uPC92YXI+LCBmaWxlIDx2YXI+ZmlsZW5hbWU8L3Zhcj4sIGxpbmUgPHZhcj5saW5lbm88L3Zhcj4sIGZ1bmN0aW9uOiA8dmFyPmZ1bmM8L3Zhcj4KKzwvcHJlPgorICAgPHA+SWYgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXMgbm90IGtub3duIChmb3IgZXhhbXBsZSwKK3doZW4gdXNpbmcgYSBDODkgY29tcGlsZXIgdGhhdCBkb2VzIG5vdCB1bmRlcnN0YW5kIF9fZnVuY19fKSwKK3RoZSBmdW5jdGlvbiBsb2NhdGlvbiBpcyBvbWl0dGVkLgorCisgICA8cD5UaGUgbWFjcm8gaXMgZGVmaW5lZCB0byBwZXJtaXQgeW91IHRvIHR1cm4gb2ZmIGFsbCB1c2VzIG9mCis8Y29kZT5hc3NlcnQ8L2NvZGU+IGF0IGNvbXBpbGUgdGltZSBieSBkZWZpbmluZyA8Y29kZT5OREVCVUc8L2NvZGU+IGFzIGEKK3ByZXByb2Nlc3NvciB2YXJpYWJsZS4gICBJZiB5b3UgZG8gdGhpcywgdGhlIDxjb2RlPmFzc2VydDwvY29kZT4gbWFjcm8KK2V4cGFuZHMgdG8KKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAodm9pZCgwKSkKKzwvcHJlPgorICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+YXNzZXJ0PC9jb2RlPiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5hc3NlcnQ8L2NvZGU+IG1hY3JvIGlzIHJlcXVpcmVkIGJ5IEFOU0ksIGFzIGlzIHRoZSBiZWhhdmlvcgord2hlbiA8Y29kZT5OREVCVUc8L2NvZGU+IGlzIGRlZmluZWQuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQgKG9ubHkgaWYgZW5hYmxlZCk6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LAorPGNvZGU+Z2V0cGlkPC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwgPGNvZGU+a2lsbDwvY29kZT4sIDxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYXRleGl0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hdGV4aXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjRlYzAyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYXRleGl0Lmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+YXRleGl0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhc3NlcnQuaHRtbCNhc3NlcnQiIHRpdGxlPSJhc3NlcnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhdG9mLmh0bWwjYXRvZiIgdGl0bGU9ImF0b2YiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImF0ZXhpdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhdG9mLmh0bWwjYXRvZiI+YXRvZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImFzc2VydC5odG1sI2Fzc2VydCI+YXNzZXJ0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjYgPGNvZGU+YXRleGl0PC9jb2RlPiZtZGFzaDtyZXF1ZXN0IGV4ZWN1dGlvbiBvZiBmdW5jdGlvbnMgYXQgcHJvZ3JhbSBleGl0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYXRleGl0LTciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgaW50IGF0ZXhpdCAodm9pZCAoKjx2YXI+ZnVuY3Rpb248L3Zhcj4pKHZvaWQpKTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitZb3UgY2FuIHVzZSA8Y29kZT5hdGV4aXQ8L2NvZGU+IHRvIGVucm9sbCBmdW5jdGlvbnMgaW4gYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0Cit3aWxsIGJlIGNhbGxlZCB3aGVuIHlvdXIgcHJvZ3JhbSB0ZXJtaW5hdGVzIG5vcm1hbGx5LiAgVGhlIGFyZ3VtZW50IGlzCithIHBvaW50ZXIgdG8gYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gKHdoaWNoIG11c3Qgbm90IHJlcXVpcmUgYXJndW1lbnRzIGFuZAorbXVzdCBub3QgcmV0dXJuIGEgcmVzdWx0KS4KKworICAgPHA+VGhlIGZ1bmN0aW9ucyBhcmUga2VwdCBpbiBhIExJRk8gc3RhY2s7IHRoYXQgaXMsIHRoZSBsYXN0IGZ1bmN0aW9uCitlbnJvbGxlZCBieSA8Y29kZT5hdGV4aXQ8L2NvZGU+IHdpbGwgYmUgdGhlIGZpcnN0IHRvIGV4ZWN1dGUgd2hlbiB5b3VyIHByb2dyYW0KK2V4aXRzLgorCisgICA8cD5UaGVyZSBpcyBubyBidWlsdC1pbiBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9ucyB5b3UgY2FuIGVucm9sbAoraW4gdGhpcyBsaXN0OyBob3dldmVyLCBhZnRlciBldmVyeSBncm91cCBvZiAzMiBmdW5jdGlvbnMgaXMgZW5yb2xsZWQsCis8Y29kZT5hdGV4aXQ8L2NvZGU+IHdpbGwgY2FsbCA8Y29kZT5tYWxsb2M8L2NvZGU+IHRvIGdldCBzcGFjZSBmb3IgdGhlIG5leHQgcGFydCBvZiB0aGUKK2xpc3QuICAgVGhlIGluaXRpYWwgbGlzdCBvZiAzMiBmdW5jdGlvbnMgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQsIHNvCit5b3UgY2FuIGFsd2F5cyBjb3VudCBvbiBhdCBsZWFzdCB0aGF0IG1hbnkgc2xvdHMgYXZhaWxhYmxlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5hdGV4aXQ8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYgaXQgc3VjY2VlZHMgaW4gZW5yb2xsaW5nIHlvdXIgZnVuY3Rpb24sCis8Y29kZT4tMTwvY29kZT4gaWYgaXQgZmFpbHMgKHBvc3NpYmxlIG9ubHkgaWYgbm8gc3BhY2Ugd2FzIGF2YWlsYWJsZSBmb3IKKzxjb2RlPm1hbGxvYzwvY29kZT4gdG8gZXh0ZW5kIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucykuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5hdGV4aXQ8L2NvZGU+IGlzIHJlcXVpcmVkIGJ5IHRoZSBBTlNJIHN0YW5kYXJkLCB3aGljaCBhbHNvIHNwZWNpZmllcyB0aGF0CitpbXBsZW1lbnRhdGlvbnMgbXVzdCBzdXBwb3J0IGVucm9sbGluZyBhdCBsZWFzdCAzMiBmdW5jdGlvbnMuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hdG9mLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hdG9mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI1ZmU2YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2F0b2YuaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hdG9mIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhdGV4aXQuaHRtbCNhdGV4aXQiIHRpdGxlPSJhdGV4aXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhdG9pLmh0bWwjYXRvaSIgdGl0bGU9ImF0b2kiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImF0b2YiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iYXRvaS5odG1sI2F0b2kiPmF0b2k8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJhdGV4aXQuaHRtbCNhdGV4aXQiPmF0ZXhpdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi43IDxjb2RlPmF0b2Y8L2NvZGU+LCA8Y29kZT5hdG9mZjwvY29kZT4mbWRhc2g7c3RyaW5nIHRvIGRvdWJsZSBvciBmbG9hdDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWF0b2YtOCI+PC9hPjxhIG5hbWU9ImluZGV4LWF0b2ZmLTkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgZG91YmxlIGF0b2YoY29uc3QgY2hhciAqPHZhcj5zPC92YXI+KTsKKyAgICAgZmxvYXQgYXRvZmYoY29uc3QgY2hhciAqPHZhcj5zPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5hdG9mPC9jb2RlPiBjb252ZXJ0cyB0aGUgaW5pdGlhbCBwb3J0aW9uIG9mIGEgc3RyaW5nIHRvIGEgPGNvZGU+ZG91YmxlPC9jb2RlPi4gCis8Y29kZT5hdG9mZjwvY29kZT4gY29udmVydHMgdGhlIGluaXRpYWwgcG9ydGlvbiBvZiBhIHN0cmluZyB0byBhIDxjb2RlPmZsb2F0PC9jb2RlPi4KKworICAgPHA+VGhlIGZ1bmN0aW9ucyBwYXJzZSB0aGUgY2hhcmFjdGVyIHN0cmluZyA8dmFyPnM8L3Zhcj4sCitsb2NhdGluZyBhIHN1YnN0cmluZyB3aGljaCBjYW4gYmUgY29udmVydGVkIHRvIGEgZmxvYXRpbmctcG9pbnQKK3ZhbHVlLiBUaGUgc3Vic3RyaW5nIG11c3QgbWF0Y2ggdGhlIGZvcm1hdDoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgWyt8LV08dmFyPmRpZ2l0czwvdmFyPlsuXVs8dmFyPmRpZ2l0czwvdmFyPl1bKGV8RSlbK3wtXTx2YXI+ZGlnaXRzPC92YXI+XQorPC9wcmU+CisgICA8cD5UaGUgc3Vic3RyaW5nIGNvbnZlcnRlZCBpcyB0aGUgbG9uZ2VzdCBpbml0aWFsCitmcmFnbWVudCBvZiA8dmFyPnM8L3Zhcj4gdGhhdCBoYXMgdGhlIGV4cGVjdGVkIGZvcm1hdCwgYmVnaW5uaW5nIHdpdGgKK3RoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuICBUaGUgc3Vic3RyaW5nCitpcyBlbXB0eSBpZiA8Y29kZT5zdHI8L2NvZGU+IGlzIGVtcHR5LCBjb25zaXN0cyBlbnRpcmVseQorb2Ygd2hpdGVzcGFjZSwgb3IgaWYgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpcworc29tZXRoaW5nIG90aGVyIHRoYW4gPGNvZGU+KzwvY29kZT4sIDxjb2RlPi08L2NvZGU+LCA8Y29kZT4uPC9jb2RlPiwgb3IgYSBkaWdpdC4KKworICAgPHA+PGNvZGU+YXRvZig8L2NvZGU+PHZhcj5zPC92YXI+PGNvZGU+KTwvY29kZT4gaXMgaW1wbGVtZW50ZWQgYXMgPGNvZGU+c3RydG9kKDwvY29kZT48dmFyPnM8L3Zhcj48Y29kZT4sIE5VTEwpPC9jb2RlPi4gCis8Y29kZT5hdG9mZig8L2NvZGU+PHZhcj5zPC92YXI+PGNvZGU+KTwvY29kZT4gaXMgaW1wbGVtZW50ZWQgYXMgPGNvZGU+c3RydG9mKDwvY29kZT48dmFyPnM8L3Zhcj48Y29kZT4sIE5VTEwpPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+YXRvZjwvY29kZT4gcmV0dXJucyB0aGUgY29udmVydGVkIHN1YnN0cmluZyB2YWx1ZSwgaWYgYW55LCBhcyBhCis8Y29kZT5kb3VibGU8L2NvZGU+OyBvciA8Y29kZT4wLjA8L2NvZGU+LCAgaWYgbm8gY29udmVyc2lvbiBjb3VsZCBiZSBwZXJmb3JtZWQuIAorSWYgdGhlIGNvcnJlY3QgdmFsdWUgaXMgb3V0IG9mIHRoZSByYW5nZSBvZiByZXByZXNlbnRhYmxlIHZhbHVlcywgcGx1cworb3IgbWludXMgPGNvZGU+SFVHRV9WQUw8L2NvZGU+IGlzIHJldHVybmVkLCBhbmQgPGNvZGU+RVJBTkdFPC9jb2RlPiBpcyBzdG9yZWQgaW4KKzxjb2RlPmVycm5vPC9jb2RlPi4gCitJZiB0aGUgY29ycmVjdCB2YWx1ZSB3b3VsZCBjYXVzZSB1bmRlcmZsb3csIDxjb2RlPjAuMDwvY29kZT4gaXMgcmV0dXJuZWQKK2FuZCA8Y29kZT5FUkFOR0U8L2NvZGU+IGlzIHN0b3JlZCBpbiA8Y29kZT5lcnJubzwvY29kZT4uCisKKyAgIDxwPjxjb2RlPmF0b2ZmPC9jb2RlPiBvYmV5cyB0aGUgc2FtZSBydWxlcyBhcyA8Y29kZT5hdG9mPC9jb2RlPiwgZXhjZXB0IHRoYXQgaXQKK3JldHVybnMgYSA8Y29kZT5mbG9hdDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5hdG9mPC9jb2RlPiBpcyBBTlNJIEMuIDxjb2RlPmF0b2Y8L2NvZGU+LCA8Y29kZT5hdG9pPC9jb2RlPiwgYW5kIDxjb2RlPmF0b2w8L2NvZGU+IGFyZSBzdWJzdW1lZCBieSA8Y29kZT5zdHJvZDwvY29kZT4KK2FuZCA8Y29kZT5zdHJvbDwvY29kZT4sIGJ1dCBhcmUgdXNlZCBleHRlbnNpdmVseSBpbiBleGlzdGluZyBjb2RlLiBUaGVzZSBmdW5jdGlvbnMgYXJlCitsZXNzIHJlbGlhYmxlLCBidXQgbWF5IGJlIGZhc3RlciBpZiB0aGUgYXJndW1lbnQgaXMgdmVyaWZpZWQgdG8gYmUgaW4gYSB2YWxpZAorcmFuZ2UuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hdG9pLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hdG9pLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhZTUyYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2F0b2kuaHRtbApAQCAtMCwwICsxLDY5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hdG9pIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhdG9mLmh0bWwjYXRvZiIgdGl0bGU9ImF0b2YiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhdG9sbC5odG1sI2F0b2xsIiB0aXRsZT0iYXRvbGwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImF0b2kiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iYXRvbGwuaHRtbCNhdG9sbCI+YXRvbGw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJhdG9mLmh0bWwjYXRvZiI+YXRvZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi44IDxjb2RlPmF0b2k8L2NvZGU+LCA8Y29kZT5hdG9sPC9jb2RlPiZtZGFzaDtzdHJpbmcgdG8gaW50ZWdlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWF0b2ktMTAiPjwvYT48YSBuYW1lPSJpbmRleC1hdG9sLTExIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZhdG9pXzAwNWZyLTEyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZhdG9sXzAwNWZyLTEzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGludCBhdG9pKGNvbnN0IGNoYXIgKjx2YXI+czwvdmFyPik7CisgICAgIGxvbmcgYXRvbChjb25zdCBjaGFyICo8dmFyPnM8L3Zhcj4pOworICAgICBpbnQgX2F0b2lfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5zPC92YXI+KTsKKyAgICAgbG9uZyBfYXRvbF9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPnM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmF0b2k8L2NvZGU+IGNvbnZlcnRzIHRoZSBpbml0aWFsIHBvcnRpb24gb2YgYSBzdHJpbmcgdG8gYW4gPGNvZGU+aW50PC9jb2RlPi4gCis8Y29kZT5hdG9sPC9jb2RlPiBjb252ZXJ0cyB0aGUgaW5pdGlhbCBwb3J0aW9uIG9mIGEgc3RyaW5nIHRvIGEgPGNvZGU+bG9uZzwvY29kZT4uCisKKyAgIDxwPjxjb2RlPmF0b2kocyk8L2NvZGU+IGlzIGltcGxlbWVudGVkIGFzIDxjb2RlPihpbnQpc3RydG9sKHMsIE5VTEwsIDEwKS48L2NvZGU+Cis8Y29kZT5hdG9sKHMpPC9jb2RlPiBpcyBpbXBsZW1lbnRlZCBhcyA8Y29kZT5zdHJ0b2wocywgTlVMTCwgMTApLjwvY29kZT4KKworICAgPHA+PGNvZGU+X2F0b2lfcjwvY29kZT4gYW5kIDxjb2RlPl9hdG9sX3I8L2NvZGU+IGFyZSByZWVudHJhbnQgdmVyc2lvbnMgb2YgPGNvZGU+YXRvaTwvY29kZT4gYW5kCis8Y29kZT5hdG9sPC9jb2RlPiByZXNwZWN0aXZlbHksIHBhc3NpbmcgdGhlIHJlZW50cmFuY3kgc3RydWN0IHBvaW50ZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUsIGlmIGFueS4gSWYgbm8gY29udmVyc2lvbiB3YXMKK21hZGUsIDxjb2RlPjA8L2NvZGU+IGlzIHJldHVybmVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+YXRvaTwvY29kZT4sIDxjb2RlPmF0b2w8L2NvZGU+IGFyZSBBTlNJLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9hdG9sbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYXRvbGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWY1NmUxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYXRvbGwuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hdG9sbCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iYXRvaS5odG1sI2F0b2kiIHRpdGxlPSJhdG9pIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYnNlYXJjaC5odG1sI2JzZWFyY2giIHRpdGxlPSJic2VhcmNoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJhdG9sbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJic2VhcmNoLmh0bWwjYnNlYXJjaCI+YnNlYXJjaDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImF0b2kuaHRtbCNhdG9pIj5hdG9pPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjkgPGNvZGU+YXRvbGw8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIGxvbmcgaW50ZWdlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWF0b2xsLTE0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZhdG9sbF8wMDVmci0xNSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBsb25nIGxvbmcgYXRvbGwoY29uc3QgY2hhciAqPHZhcj5zdHI8L3Zhcj4pOworICAgICBsb25nIGxvbmcgX2F0b2xsX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+c3RyPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgZnVuY3Rpb24gPGNvZGU+YXRvbGw8L2NvZGU+IGNvbnZlcnRzIHRoZSBpbml0aWFsIHBvcnRpb24gb2YgdGhlIHN0cmluZworcG9pbnRlZCB0byBieSA8Y29kZT4qPC9jb2RlPjx2YXI+c3RyPC92YXI+IHRvIGEgdHlwZSA8Y29kZT5sb25nIGxvbmc8L2NvZGU+LiAgQSBjYWxsIHRvCithdG9sbChzdHIpIGluIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgZXF1aXZhbGVudCB0bworc3RydG9sbChzdHIsIChjaGFyICoqKU5VTEwsIDEwKSBpbmNsdWRpbmcgYmVoYXZpb3Igb24gZXJyb3IuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X2F0b2xsX3I8L2NvZGU+IGlzIGEgcmVlbnRyYW50IHZlcnNpb24uICBUaGUKK2V4dHJhIGFyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBjb252ZXJ0ZWQgdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5hdG9sbDwvY29kZT4gaXMgSVNPIDk4OTkgKEM5OSkgYW5kIFBPU0lYIDEwMDMuMS0yMDAxIGNvbXBhdGFibGUuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2JjbXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2JjbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRkYTViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYmNtcC5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmJjbXAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImJjb3B5Lmh0bWwjYmNvcHkiIHRpdGxlPSJiY29weSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYmNtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJiY29weS5odG1sI2Jjb3B5Ij5iY29weTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4xIDxjb2RlPmJjbXA8L2NvZGU+Jm1kYXNoO2NvbXBhcmUgdHdvIG1lbW9yeSBhcmVhczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWJjbXAtMzczIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5ncy5oJmd0OworICAgICBpbnQgYmNtcChjb25zdCB2b2lkICo8dmFyPnMxPC92YXI+LCBjb25zdCB2b2lkICo8dmFyPnMyPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIG5vdCBtb3JlIHRoYW4gPHZhcj5uPC92YXI+IGJ5dGVzIG9mIHRoZQorb2JqZWN0IHBvaW50ZWQgdG8gYnkgPHZhcj5zMTwvdmFyPiB3aXRoIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSA8dmFyPnMyPC92YXI+LgorCisgICA8cD5UaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byA8Y29kZT5tZW1jbXA8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiwgZXF1YWwgdG8gb3IKK2xlc3MgdGhhbiB6ZXJvIAlhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkKKzx2YXI+czE8L3Zhcj4gaXMgZ3JlYXRlciB0aGFuLCBlcXVhbCB0byBvciBsZXNzIHRoYW4gdGhlIG9iamVjdAorcG9pbnRlZCB0byBieSA8dmFyPnMyPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+YmNtcDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9iY29weS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYmNvcHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OThiZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYmNvcHkuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5iY29weSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iYmNtcC5odG1sI2JjbXAiIHRpdGxlPSJiY21wIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYnplcm8uaHRtbCNiemVybyIgdGl0bGU9ImJ6ZXJvIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJiY29weSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJiemVyby5odG1sI2J6ZXJvIj5iemVybzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImJjbXAuaHRtbCNiY21wIj5iY21wPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjIgPGNvZGU+YmNvcHk8L2NvZGU+Jm1kYXNoO2NvcHkgbWVtb3J5IHJlZ2lvbnM8L2gzPgorCis8cD48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmdzLmgmZ3Q7CisgICAgIHZvaWQgYmNvcHkoY29uc3Qgdm9pZCAqPHZhcj5pbjwvdmFyPiwgdm9pZCAqPHZhcj5vdXQ8L3Zhcj4sIHNpemVfdCA8dmFyPm48L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoaXMgZnVuY3Rpb24gY29waWVzIDx2YXI+bjwvdmFyPiBieXRlcyBmcm9tIHRoZSBtZW1vcnkgcmVnaW9uCitwb2ludGVkIHRvIGJ5IDx2YXI+aW48L3Zhcj4gdG8gdGhlIG1lbW9yeSByZWdpb24gcG9pbnRlZCB0byBieQorPHZhcj5vdXQ8L3Zhcj4uCisKKyAgIDxwPlRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGVybSBvZiA8Y29kZT5tZW1tb3ZlPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmJjb3B5PC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2JzZWFyY2guaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2JzZWFyY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDgzYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYnNlYXJjaC5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmJzZWFyY2ggLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImF0b2xsLmh0bWwjYXRvbGwiIHRpdGxlPSJhdG9sbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNhbGxvYy5odG1sI2NhbGxvYyIgdGl0bGU9ImNhbGxvYyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYnNlYXJjaCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjYWxsb2MuaHRtbCNjYWxsb2MiPmNhbGxvYzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImF0b2xsLmh0bWwjYXRvbGwiPmF0b2xsPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjEwIDxjb2RlPmJzZWFyY2g8L2NvZGU+Jm1kYXNoO2JpbmFyeSBzZWFyY2g8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1ic2VhcmNoLTE2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIHZvaWQgKmJzZWFyY2goY29uc3Qgdm9pZCAqPHZhcj5rZXk8L3Zhcj4sIGNvbnN0IHZvaWQgKjx2YXI+YmFzZTwvdmFyPiwKKyAgICAgICAgIHNpemVfdCA8dmFyPm5tZW1iPC92YXI+LCBzaXplX3QgPHZhcj5zaXplPC92YXI+LAorICAgICAgICAgaW50ICgqPHZhcj5jb21wYXI8L3Zhcj4pKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+YnNlYXJjaDwvY29kZT4gc2VhcmNoZXMgYW4gYXJyYXkgYmVnaW5uaW5nIGF0IDx2YXI+YmFzZTwvdmFyPiBmb3IgYW55IGVsZW1lbnQKK3RoYXQgbWF0Y2hlcyA8dmFyPmtleTwvdmFyPiwgdXNpbmcgYmluYXJ5IHNlYXJjaC4gIDx2YXI+bm1lbWI8L3Zhcj4gaXMgdGhlIGVsZW1lbnQKK2NvdW50IG9mIHRoZSBhcnJheTsgPHZhcj5zaXplPC92YXI+IGlzIHRoZSBzaXplIG9mIGVhY2ggZWxlbWVudC4KKworICAgPHA+VGhlIGFycmF5IG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciB3aXRoIHJlc3BlY3QgdG8gdGhlCitjb21wYXJpc29uIGZ1bmN0aW9uIDx2YXI+Y29tcGFyPC92YXI+ICh3aGljaCB5b3Ugc3VwcGx5IGFzIHRoZSBsYXN0IGFyZ3VtZW50IG9mCis8Y29kZT5ic2VhcmNoPC9jb2RlPikuCisKKyAgIDxwPllvdSBtdXN0IGRlZmluZSB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiA8Y29kZT4oKjwvY29kZT48dmFyPmNvbXBhcjwvdmFyPjxjb2RlPik8L2NvZGU+IHRvIGhhdmUgdHdvCithcmd1bWVudHM7IGl0cyByZXN1bHQgbXVzdCBiZSBuZWdhdGl2ZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMKK2xlc3MgdGhhbiB0aGUgc2Vjb25kLCB6ZXJvIGlmIHRoZSB0d28gYXJndW1lbnRzIG1hdGNoLCBhbmQKK3Bvc2l0aXZlIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCAod2hlcmUKKyZsZHF1bztsZXNzIHRoYW4mcmRxdW87IGFuZCAmbGRxdW87Z3JlYXRlciB0aGFuJnJkcXVvOyByZWZlciB0byB3aGF0ZXZlciBhcmJpdHJhcnkKK29yZGVyaW5nIGlzIGFwcHJvcHJpYXRlKS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorUmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gZWxlbWVudCBvZiA8dmFyPmFycmF5PC92YXI+IHRoYXQgbWF0Y2hlcyA8dmFyPmtleTwvdmFyPi4gIElmCittb3JlIHRoYW4gb25lIG1hdGNoaW5nIGVsZW1lbnQgaXMgYXZhaWxhYmxlLCB0aGUgcmVzdWx0IG1heSBwb2ludCB0bworYW55IG9mIHRoZW0uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5ic2VhcmNoPC9jb2RlPiBpcyBBTlNJLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9iemVyby5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYnplcm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2RkYzQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvYnplcm8uaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5iemVybyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iYmNvcHkuaHRtbCNiY29weSIgdGl0bGU9ImJjb3B5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaW5kZXguaHRtbCNpbmRleCIgdGl0bGU9ImluZGV4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJiemVybyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpbmRleC5odG1sI2luZGV4Ij5pbmRleDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImJjb3B5Lmh0bWwjYmNvcHkiPmJjb3B5PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjMgPGNvZGU+Ynplcm88L2NvZGU+Jm1kYXNoO2luaXRpYWxpemUgbWVtb3J5IHRvIHplcm88L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1iemVyby0zNzQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmdzLmgmZ3Q7CisgICAgIHZvaWQgYnplcm8odm9pZCAqPHZhcj5iPC92YXI+LCBzaXplX3QgPHZhcj5sZW5ndGg8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmJ6ZXJvPC9jb2RlPiBpbml0aWFsaXplcyA8dmFyPmxlbmd0aDwvdmFyPiBieXRlcyBvZiBtZW1vcnksIHN0YXJ0aW5nIGF0IGFkZHJlc3MKKzx2YXI+YjwvdmFyPiwgdG8gemVyby4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+Ynplcm88L2NvZGU+IGRvZXMgbm90IHJldHVybiBhIHJlc3VsdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmJ6ZXJvPC9jb2RlPiBpcyBpbiB0aGUgQmVya2VsZXkgU29mdHdhcmUgRGlzdHJpYnV0aW9uLiAKK05laXRoZXIgQU5TSSBDIG5vciB0aGUgU3lzdGVtIFYgSW50ZXJmYWNlIERlZmluaXRpb24gKElzc3VlIDIpIHJlcXVpcmUKKzxjb2RlPmJ6ZXJvPC9jb2RlPi4KKworICAgPHA+PGNvZGU+Ynplcm88L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvY2FsbG9jLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9jYWxsb2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWZjZDRlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvY2FsbG9jLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y2FsbG9jIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJic2VhcmNoLmh0bWwjYnNlYXJjaCIgdGl0bGU9ImJzZWFyY2giPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJkaXYuaHRtbCNkaXYiIHRpdGxlPSJkaXYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImNhbGxvYyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJkaXYuaHRtbCNkaXYiPmRpdjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImJzZWFyY2guaHRtbCNic2VhcmNoIj5ic2VhcmNoPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjExIDxjb2RlPmNhbGxvYzwvY29kZT4mbWRhc2g7YWxsb2NhdGUgc3BhY2UgZm9yIGFycmF5czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNhbGxvYy0xNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmY2FsbG9jXzAwNWZyLTE4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIHZvaWQgKmNhbGxvYyhzaXplX3QgPHZhcj5uPC92YXI+LCBzaXplX3QgPHZhcj5zPC92YXI+KTsKKyAgICAgdm9pZCAqX2NhbGxvY19yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sIHNpemVfdCA8dmFyPm48L3Zhcj4sIHNpemVfdCA8dmFyPnM8L3Zhcj4pOworPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPmNhbGxvYzwvY29kZT4gdG8gcmVxdWVzdCBhIGJsb2NrIG9mIG1lbW9yeSBzdWZmaWNpZW50IHRvIGhvbGQgYW4KK2FycmF5IG9mIDx2YXI+bjwvdmFyPiBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBoYXMgc2l6ZSA8dmFyPnM8L3Zhcj4uCisKKyAgIDxwPlRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IDxjb2RlPmNhbGxvYzwvY29kZT4gY29tZXMgb3V0IG9mIHRoZSBzYW1lIG1lbW9yeSBwb29sCit1c2VkIGJ5IDxjb2RlPm1hbGxvYzwvY29kZT4sIGJ1dCB0aGUgbWVtb3J5IGJsb2NrIGlzIGluaXRpYWxpemVkIHRvIGFsbCB6ZXJvCitieXRlcy4gIChUbyBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgaW5pdGlhbGl6aW5nIHRoZSBzcGFjZSwgdXNlCis8Y29kZT5tYWxsb2M8L2NvZGU+IGluc3RlYWQuKQorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl9jYWxsb2NfcjwvY29kZT4gaXMgcmVlbnRyYW50LiAKK1RoZSBleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitJZiBzdWNjZXNzZnVsLCBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzcGFjZS4KKworICAgPHA+SWYgdW5zdWNjZXNzZnVsLCA8Y29kZT5OVUxMPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNhbGxvYzwvY29kZT4gaXMgQU5TSS4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2NsZWFyZXJyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9jbGVhcmVyci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjM5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9jbGVhcmVyci5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmNsZWFyZXJyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJkaXByaW50Zi5odG1sI2RpcHJpbnRmIiB0aXRsZT0iZGlwcmludGYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImNsZWFyZXJyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImRpcHJpbnRmLmh0bWwjZGlwcmludGYiPmRpcHJpbnRmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjEgPGNvZGU+Y2xlYXJlcnI8L2NvZGU+Jm1kYXNoO2NsZWFyIGZpbGUgb3Igc3RyZWFtIGVycm9yIGluZGljYXRvcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNsZWFyZXJyLTE0NSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIHZvaWQgY2xlYXJlcnIoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPnN0ZGlvPC9jb2RlPiBmdW5jdGlvbnMgbWFpbnRhaW4gYW4gZXJyb3IgaW5kaWNhdG9yIHdpdGggZWFjaCBmaWxlCitwb2ludGVyIDx2YXI+ZnA8L3Zhcj4sIHRvIHJlY29yZCB3aGV0aGVyIGFueSByZWFkIG9yIHdyaXRlIGVycm9ycyBoYXZlCitvY2N1cnJlZCBvbiB0aGUgYXNzb2NpYXRlZCBmaWxlIG9yIHN0cmVhbS4gIFNpbWlsYXJseSwgaXQgbWFpbnRhaW5zIGFuCitlbmQtb2YtZmlsZSBpbmRpY2F0b3IgdG8gcmVjb3JkIHdoZXRoZXIgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGluIHRoZQorZmlsZS4KKworICAgPHA+VXNlIDxjb2RlPmNsZWFyZXJyPC9jb2RlPiB0byByZXNldCBib3RoIG9mIHRoZXNlIGluZGljYXRvcnMuCisKKyAgIDxwPlNlZSA8Y29kZT5mZXJyb3I8L2NvZGU+IGFuZCA8Y29kZT5mZW9mPC9jb2RlPiB0byBxdWVyeSB0aGUgdHdvIGluZGljYXRvcnMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmNsZWFyZXJyPC9jb2RlPiBkb2VzIG5vdCByZXR1cm4gYSByZXN1bHQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+Y2xlYXJlcnI8L2NvZGU+LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9jbG9jay5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvY2xvY2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYyMThhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvY2xvY2suaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jbG9jayAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiIHRpdGxlPSJUaW1lZm5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iYXNjdGltZS5odG1sI2FzY3RpbWUiIHRpdGxlPSJhc2N0aW1lIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY3RpbWUuaHRtbCNjdGltZSIgdGl0bGU9ImN0aW1lIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjbG9jayI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjdGltZS5odG1sI2N0aW1lIj5jdGltZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImFzY3RpbWUuaHRtbCNhc2N0aW1lIj5hc2N0aW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiPlRpbWVmbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjIgPGNvZGU+Y2xvY2s8L2NvZGU+Jm1kYXNoO2N1bXVsYXRpdmUgcHJvY2Vzc29yIHRpbWU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jbG9jay00MzAiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CisgICAgIGNsb2NrX3QgY2xvY2sodm9pZCk7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorQ2FsY3VsYXRlcyB0aGUgYmVzdCBhdmFpbGFibGUgYXBwcm94aW1hdGlvbiBvZiB0aGUgY3VtdWxhdGl2ZSBhbW91bnQKK29mIHRpbWUgdXNlZCBieSB5b3VyIHByb2dyYW0gc2luY2UgaXQgc3RhcnRlZC4gIFRvIGNvbnZlcnQgdGhlIHJlc3VsdAoraW50byBzZWNvbmRzLCBkaXZpZGUgYnkgdGhlIG1hY3JvIDxjb2RlPkNMT0NLU19QRVJfU0VDPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIGFtb3VudCBvZiBwcm9jZXNzb3IgdGltZSB1c2VkIHNvIGZhciBieSB5b3VyIHByb2dyYW0sIGluIHVuaXRzCitkZWZpbmVkIGJ5IHRoZSBtYWNoaW5lLWRlcGVuZGVudCBtYWNybyA8Y29kZT5DTE9DS1NfUEVSX1NFQzwvY29kZT4uICBJZiBubworbWVhc3VyZW1lbnQgaXMgYXZhaWxhYmxlLCB0aGUgcmVzdWx0IGlzIChjbG9ja190KTxjb2RlPi0xPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5jbG9jazwvY29kZT4gYW5kIDxjb2RlPkNMT0NLU19QRVJfU0VDPC9jb2RlPi4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lIHJlcXVpcmVkOiA8Y29kZT50aW1lczwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvY3RpbWUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2N0aW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2ZTRlMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2N0aW1lLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y3RpbWUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIiB0aXRsZT0iVGltZWZucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNsb2NrLmh0bWwjY2xvY2siIHRpdGxlPSJjbG9jayI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImRpZmZ0aW1lLmh0bWwjZGlmZnRpbWUiIHRpdGxlPSJkaWZmdGltZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY3RpbWUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZGlmZnRpbWUuaHRtbCNkaWZmdGltZSI+ZGlmZnRpbWU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjbG9jay5odG1sI2Nsb2NrIj5jbG9jazwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIj5UaW1lZm5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC4zIDxjb2RlPmN0aW1lPC9jb2RlPiZtZGFzaDtjb252ZXJ0IHRpbWUgdG8gbG9jYWwgYW5kIGZvcm1hdCBhcyBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jdGltZS00MzEiPjwvYT48YSBuYW1lPSJpbmRleC1jdGltZV8wMDVmci00MzIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CisgICAgIGNoYXIgKmN0aW1lKGNvbnN0IHRpbWVfdCAqPHZhcj5jbG9jazwvdmFyPik7CisgICAgIGNoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90ICo8dmFyPmNsb2NrPC92YXI+LCBjaGFyICo8dmFyPmJ1ZjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorQ29udmVydCB0aGUgdGltZSB2YWx1ZSBhdCA8dmFyPmNsb2NrPC92YXI+IHRvIGxvY2FsIHRpbWUgKGxpa2UgPGNvZGU+bG9jYWx0aW1lPC9jb2RlPikKK2FuZCBmb3JtYXQgaXQgaW50byBhIHN0cmluZyBvZiB0aGUgZm9ybQorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICBXZWQgSnVuIDE1IDExOjM4OjA3IDE5ODhcblwwCis8L3ByZT4KKyAgIDxwPihsaWtlIDxjb2RlPmFzY3RpbWU8L2NvZGU+KS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorQSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgY29udGFpbmluZyBhIGZvcm1hdHRlZCB0aW1lc3RhbXAuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+Y3RpbWU8L2NvZGU+LgorCisgICA8cD48Y29kZT5jdGltZTwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9kaWZmdGltZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZGlmZnRpbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmRmMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZGlmZnRpbWUuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5kaWZmdGltZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiIHRpdGxlPSJUaW1lZm5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY3RpbWUuaHRtbCNjdGltZSIgdGl0bGU9ImN0aW1lIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ210aW1lLmh0bWwjZ210aW1lIiB0aXRsZT0iZ210aW1lIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJkaWZmdGltZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJnbXRpbWUuaHRtbCNnbXRpbWUiPmdtdGltZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImN0aW1lLmh0bWwjY3RpbWUiPmN0aW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiPlRpbWVmbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjQgPGNvZGU+ZGlmZnRpbWU8L2NvZGU+Jm1kYXNoO3N1YnRyYWN0IHR3byB0aW1lczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRpZmZ0aW1lLTQzMyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKKyAgICAgZG91YmxlIGRpZmZ0aW1lKHRpbWVfdCA8dmFyPnRpbTE8L3Zhcj4sIHRpbWVfdCA8dmFyPnRpbTI8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1N1YnRyYWN0cyB0aGUgdHdvIHRpbWVzIGluIHRoZSBhcmd1bWVudHM6IGA8dmFyPnRpbTE8L3Zhcj48Y29kZT4gLSA8L2NvZGU+PHZhcj50aW0yPC92YXI+Jy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIGRpZmZlcmVuY2UgKGluIHNlY29uZHMpIGJldHdlZW4gPHZhcj50aW0yPC92YXI+IGFuZCA8dmFyPnRpbTE8L3Zhcj4sIGFzIGEgPGNvZGU+ZG91YmxlPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5kaWZmdGltZTwvY29kZT4sIGFuZCBkZWZpbmVzIGl0cyByZXN1bHQgdG8gYmUgaW4gc2Vjb25kcworaW4gYWxsIGltcGxlbWVudGF0aW9ucy4KKworICAgPHA+PGNvZGU+ZGlmZnRpbWU8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZGlwcmludGYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2RpcHJpbnRmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ1OGI1MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2RpcHJpbnRmLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZGlwcmludGYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNsZWFyZXJyLmh0bWwjY2xlYXJlcnIiIHRpdGxlPSJjbGVhcmVyciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImRwcmludGYuaHRtbCNkcHJpbnRmIiB0aXRsZT0iZHByaW50ZiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZGlwcmludGYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZHByaW50Zi5odG1sI2RwcmludGYiPmRwcmludGY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjbGVhcmVyci5odG1sI2NsZWFyZXJyIj5jbGVhcmVycjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4yIDxjb2RlPmRpcHJpbnRmPC9jb2RlPiwgPGNvZGU+dmRpcHJpbnRmPC9jb2RlPiZtZGFzaDtwcmludCB0byBhIGZpbGUgZGVzY3JpcHRvciAoaW50ZWdlciBvbmx5KTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRpcHJpbnRmLTE0NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZGlwcmludGZfMDA1ZnItMTQ3Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmRpcHJpbnRmLTE0OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdmRpcHJpbnRmXzAwNWZyLTE0OSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgICNpbmNsdWRlICZsdDtzdGRhcmcuaCZndDsKKyAgICAgaW50IGRpcHJpbnRmKGludCA8dmFyPmZkPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IHZkaXByaW50ZihpbnQgPHZhcj5mZDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5hcDwvdmFyPik7CisgICAgIGludCBfZGlwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgaW50IDx2YXI+ZmQ8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IF92ZGlwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgaW50IDx2YXI+ZmQ8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmFwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5kaXByaW50ZjwvY29kZT4gYW5kIDxjb2RlPnZkaXByaW50ZjwvY29kZT4gYXJlIHNpbWlsYXIgdG8gPGNvZGU+ZHByaW50ZjwvY29kZT4gYW5kIDxjb2RlPnZkcHJpbnRmPC9jb2RlPiwKK2V4Y2VwdCB0aGF0IG9ubHkgaW50ZWdlciBmb3JtYXQgc3BlY2lmaWVycyBhcmUgcHJvY2Vzc2VkLgorCisgICA8cD5UaGUgZnVuY3Rpb25zIDxjb2RlPl9kaXByaW50Zl9yPC9jb2RlPiBhbmQgPGNvZGU+X3ZkaXByaW50Zl9yPC9jb2RlPiBhcmUgc2ltcGx5CityZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorU2ltaWxhciB0byA8Y29kZT5kcHJpbnRmPC9jb2RlPiBhbmQgPGNvZGU+dmRwcmludGY8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorVGhpcyBzZXQgb2YgZnVuY3Rpb25zIGlzIGFuIGludGVnZXItb25seSBleHRlbnNpb24sIGFuZCBpcyBub3QgcG9ydGFibGUuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZGl2Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9kaXYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTk5NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZGl2Lmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZGl2IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjYWxsb2MuaHRtbCNjYWxsb2MiIHRpdGxlPSJjYWxsb2MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJlY3Z0YnVmLmh0bWwjZWN2dGJ1ZiIgdGl0bGU9ImVjdnRidWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImRpdiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJlY3Z0YnVmLmh0bWwjZWN2dGJ1ZiI+ZWN2dGJ1ZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNhbGxvYy5odG1sI2NhbGxvYyI+Y2FsbG9jPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjEyIDxjb2RlPmRpdjwvY29kZT4mbWRhc2g7ZGl2aWRlIHR3byBpbnRlZ2VyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWRpdi0xOSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBkaXZfdCBkaXYoaW50IDx2YXI+bjwvdmFyPiwgaW50IDx2YXI+ZDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorRGl2aWRlCis8dmFyPm48L3Zhcj4vPHZhcj5kPC92YXI+LAorcmV0dXJuaW5nIHF1b3RpZW50IGFuZCByZW1haW5kZXIgYXMgdHdvIGludGVnZXJzIGluIGEgc3RydWN0dXJlIDxjb2RlPmRpdl90PC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJlc3VsdCBpcyByZXByZXNlbnRlZCB3aXRoIHRoZSBzdHJ1Y3R1cmUKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICB0eXBlZGVmIHN0cnVjdAorICAgICAgeworICAgICAgIGludCBxdW90OworICAgICAgIGludCByZW07CisgICAgICB9IGRpdl90OworPC9wcmU+CisgICA8cD53aGVyZSB0aGUgPGNvZGU+cXVvdDwvY29kZT4gZmllbGQgcmVwcmVzZW50cyB0aGUgcXVvdGllbnQsIGFuZCA8Y29kZT5yZW08L2NvZGU+IHRoZQorcmVtYWluZGVyLiAgRm9yIG5vbnplcm8gPHZhcj5kPC92YXI+LCBpZiBgPHZhcj5yPC92YXI+PGNvZGU+ID0gZGl2KDwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+ZDwvdmFyPjxjb2RlPik7PC9jb2RlPicgdGhlbgorPHZhcj5uPC92YXI+IGVxdWFscyBgPHZhcj5yPC92YXI+PGNvZGU+LnJlbSArIDwvY29kZT48dmFyPmQ8L3Zhcj48Y29kZT4qPC9jb2RlPjx2YXI+cjwvdmFyPjxjb2RlPi5xdW90PC9jb2RlPicuCisKKyAgIDxwPlRvIGRpdmlkZSA8Y29kZT5sb25nPC9jb2RlPiByYXRoZXIgdGhhbiA8Y29kZT5pbnQ8L2NvZGU+IHZhbHVlcywgdXNlIHRoZSBzaW1pbGFyCitmdW5jdGlvbiA8Y29kZT5sZGl2PC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmRpdjwvY29kZT4gaXMgQU5TSS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZHByaW50Zi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZHByaW50Zi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NmViOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9kcHJpbnRmLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZHByaW50ZiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZGlwcmludGYuaHRtbCNkaXByaW50ZiIgdGl0bGU9ImRpcHJpbnRmIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZmNsb3NlLmh0bWwjZmNsb3NlIiB0aXRsZT0iZmNsb3NlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJkcHJpbnRmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZjbG9zZS5odG1sI2ZjbG9zZSI+ZmNsb3NlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZGlwcmludGYuaHRtbCNkaXByaW50ZiI+ZGlwcmludGY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMyA8Y29kZT5kcHJpbnRmPC9jb2RlPiwgPGNvZGU+dmRwcmludGY8L2NvZGU+Jm1kYXNoO3ByaW50IHRvIGEgZmlsZSBkZXNjcmlwdG9yPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZHByaW50Zi0xNTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmRwcmludGZfMDA1ZnItMTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtdmRwcmludGYtMTUyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ2ZHByaW50Zl8wMDVmci0xNTMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICAjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CisgICAgIGludCBkcHJpbnRmKGludCA8dmFyPmZkPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IHZkcHJpbnRmKGludCA8dmFyPmZkPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmFwPC92YXI+KTsKKyAgICAgaW50IF9kcHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGludCA8dmFyPmZkPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBfdmRwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgaW50IDx2YXI+ZmQ8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmFwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5kcHJpbnRmPC9jb2RlPiBhbmQgPGNvZGU+dmRwcmludGY8L2NvZGU+IGFsbG93IHByaW50aW5nIGEgZm9ybWF0LCBzaW1pbGFybHkgdG8KKzxjb2RlPnByaW50ZjwvY29kZT4sIGJ1dCB3cml0ZSB0byBhIGZpbGUgZGVzY3JpcHRvciBpbnN0ZWFkIG9mIHRvIGEgPGNvZGU+RklMRTwvY29kZT4KK3N0cmVhbS4KKworICAgPHA+VGhlIGZ1bmN0aW9ucyA8Y29kZT5fZHByaW50Zl9yPC9jb2RlPiBhbmQgPGNvZGU+X3ZkcHJpbnRmX3I8L2NvZGU+IGFyZSBzaW1wbHkKK3JlZW50cmFudCB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgcmV0dXJuIHZhbHVlIGFuZCBlcnJvcnMgYXJlIGV4YWN0bHkgYXMgZm9yIDxjb2RlPndyaXRlPC9jb2RlPiwgZXhjZXB0IHRoYXQKKzxjb2RlPmVycm5vPC9jb2RlPiBtYXkgYWxzbyBiZSBzZXQgdG8gPGNvZGU+RU5PTUVNPC9jb2RlPiBpZiB0aGUgaGVhcCBpcyBleGhhdXN0ZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIGlzIG9yaWdpbmFsbHkgYSBHTlUgZXh0ZW5zaW9uIGluIGdsaWJjIGFuZCBpcyBub3QgcG9ydGFibGUuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZWN2dC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZWN2dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzAyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9lY3Z0Lmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZWN2dCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZWN2dGJ1Zi5odG1sI2VjdnRidWYiIHRpdGxlPSJlY3Z0YnVmIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iXzAwNWZfMDA1ZmVudl8wMDVmbG9jay5odG1sI2dfdF8wMDVmXzAwNWZlbnZfMDA1ZmxvY2siIHRpdGxlPSJfX2Vudl9sb2NrIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJlY3Z0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Il8wMDVmXzAwNWZlbnZfMDA1ZmxvY2suaHRtbCNnX3RfMDA1Zl8wMDVmZW52XzAwNWZsb2NrIj5fX2Vudl9sb2NrPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZWN2dGJ1Zi5odG1sI2VjdnRidWYiPmVjdnRidWY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMTMgPGNvZGU+ZWN2dDwvY29kZT4sIDxjb2RlPmVjdnRmPC9jb2RlPiwgPGNvZGU+ZmN2dDwvY29kZT4sIDxjb2RlPmZjdnRmPC9jb2RlPiZtZGFzaDtkb3VibGUgb3IgZmxvYXQgdG8gc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZWN2dC0yMCI+PC9hPjxhIG5hbWU9ImluZGV4LWVjdnRmLTIxIj48L2E+PGEgbmFtZT0iaW5kZXgtZmN2dC0yMiI+PC9hPjxhIG5hbWU9ImluZGV4LWZjdnRmLTIzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIAorICAgICBjaGFyICplY3Z0KGRvdWJsZSA8dmFyPnZhbDwvdmFyPiwgaW50IDx2YXI+Y2hhcnM8L3Zhcj4sIGludCAqPHZhcj5kZWNwdDwvdmFyPiwgaW50ICo8dmFyPnNnbjwvdmFyPik7CisgICAgIGNoYXIgKmVjdnRmKGZsb2F0IDx2YXI+dmFsPC92YXI+LCBpbnQgPHZhcj5jaGFyczwvdmFyPiwgaW50ICo8dmFyPmRlY3B0PC92YXI+LCBpbnQgKjx2YXI+c2duPC92YXI+KTsKKyAgICAgCisgICAgIGNoYXIgKmZjdnQoZG91YmxlIDx2YXI+dmFsPC92YXI+LCBpbnQgPHZhcj5kZWNpbWFsczwvdmFyPiwKKyAgICAgICAgIGludCAqPHZhcj5kZWNwdDwvdmFyPiwgaW50ICo8dmFyPnNnbjwvdmFyPik7CisgICAgIGNoYXIgKmZjdnRmKGZsb2F0IDx2YXI+dmFsPC92YXI+LCBpbnQgPHZhcj5kZWNpbWFsczwvdmFyPiwKKyAgICAgICAgIGludCAqPHZhcj5kZWNwdDwvdmFyPiwgaW50ICo8dmFyPnNnbjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+ZWN2dDwvY29kZT4gYW5kIDxjb2RlPmZjdnQ8L2NvZGU+IHByb2R1Y2UgKG51bGwtdGVybWluYXRlZCkgc3RyaW5ncyBvZiBkaWdpdHMKK3JlcHJlc2VudGF0aW5nIHRoZSA8Y29kZT5kb3VibGU8L2NvZGU+IG51bWJlciA8dmFyPnZhbDwvdmFyPi4gCis8Y29kZT5lY3Z0ZjwvY29kZT4gYW5kIDxjb2RlPmZjdnRmPC9jb2RlPiBwcm9kdWNlIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcgorcmVwcmVzZW50YXRpb25zIG9mIDxjb2RlPmZsb2F0PC9jb2RlPiBudW1iZXJzLgorCisgICA8cD4oVGhlIDxjb2RlPnN0ZGxpYjwvY29kZT4gZnVuY3Rpb25zIDxjb2RlPmVjdnRidWY8L2NvZGU+IGFuZCA8Y29kZT5mY3Z0YnVmPC9jb2RlPiBhcmUgcmVlbnRyYW50Cit2ZXJzaW9ucyBvZiA8Y29kZT5lY3Z0PC9jb2RlPiBhbmQgPGNvZGU+ZmN2dDwvY29kZT4uKQorCisgICA8cD5UaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gPGNvZGU+ZWN2dDwvY29kZT4gYW5kIDxjb2RlPmZjdnQ8L2NvZGU+IGlzIHRoZQoraW50ZXJwcmV0YXRpb24gb2YgdGhlIHNlY29uZCBhcmd1bWVudCAoPHZhcj5jaGFyczwvdmFyPiBvciA8dmFyPmRlY2ltYWxzPC92YXI+KS4gCitGb3IgPGNvZGU+ZWN2dDwvY29kZT4sIHRoZSBzZWNvbmQgYXJndW1lbnQgPHZhcj5jaGFyczwvdmFyPiBzcGVjaWZpZXMgdGhlIHRvdGFsIG51bWJlcgorb2YgY2hhcmFjdGVycyB0byB3cml0ZSAod2hpY2ggaXMgYWxzbyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cworaW4gdGhlIGZvcm1hdHRlZCBzdHJpbmcsIHNpbmNlIHRoZXNlIHR3byBmdW5jdGlvbnMgd3JpdGUgb25seSBkaWdpdHMpLiAKK0ZvciA8Y29kZT5mY3Z0PC9jb2RlPiwgdGhlIHNlY29uZCBhcmd1bWVudCA8dmFyPmRlY2ltYWxzPC92YXI+IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mCitjaGFyYWN0ZXJzIHRvIHdyaXRlIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50OyBhbGwgZGlnaXRzIGZvciB0aGUgaW50ZWdlcgorcGFydCBvZiA8dmFyPnZhbDwvdmFyPiBhcmUgYWx3YXlzIGluY2x1ZGVkLgorCisgICA8cD5TaW5jZSA8Y29kZT5lY3Z0PC9jb2RlPiBhbmQgPGNvZGU+ZmN2dDwvY29kZT4gd3JpdGUgb25seSBkaWdpdHMgaW4gdGhlIG91dHB1dCBzdHJpbmcsCit0aGV5IHJlY29yZCB0aGUgbG9jYXRpb24gb2YgdGhlIGRlY2ltYWwgcG9pbnQgaW4gPGNvZGU+KjwvY29kZT48dmFyPmRlY3B0PC92YXI+LCBhbmQKK3RoZSBzaWduIG9mIHRoZSBudW1iZXIgaW4gPGNvZGU+KjwvY29kZT48dmFyPnNnbjwvdmFyPi4gIEFmdGVyIGZvcm1hdHRpbmcgYSBudW1iZXIsCis8Y29kZT4qPC9jb2RlPjx2YXI+ZGVjcHQ8L3Zhcj4gY29udGFpbnMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gdGhlIGxlZnQgb2YgdGhlCitkZWNpbWFsIHBvaW50LiAgPGNvZGU+KjwvY29kZT48dmFyPnNnbjwvdmFyPiBjb250YWlucyA8Y29kZT4wPC9jb2RlPiBpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLAorYW5kIDxjb2RlPjE8L2NvZGU+IGlmIGl0IGlzIG5lZ2F0aXZlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitBbGwgZm91ciBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3IHN0cmluZyBjb250YWluaW5nIGEKK2NoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiA8dmFyPnZhbDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK05vbmUgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBBTlNJIEMuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2VjdnRidWYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2VjdnRidWYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGJjYWQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZWN2dGJ1Zi5odG1sCkBAIC0wLDAgKzEsODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmVjdnRidWYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImRpdi5odG1sI2RpdiIgdGl0bGU9ImRpdiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImVjdnQuaHRtbCNlY3Z0IiB0aXRsZT0iZWN2dCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZWN2dGJ1ZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJlY3Z0Lmh0bWwjZWN2dCI+ZWN2dDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImRpdi5odG1sI2RpdiI+ZGl2PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjE1IDxjb2RlPmVjdnRidWY8L2NvZGU+LCA8Y29kZT5mY3Z0YnVmPC9jb2RlPiZtZGFzaDtkb3VibGUgb3IgZmxvYXQgdG8gc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZWN2dGJ1Zi0yNiI+PC9hPjxhIG5hbWU9ImluZGV4LWZjdnRidWYtMjciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICAKKyAgICAgY2hhciAqZWN2dGJ1Zihkb3VibGUgPHZhcj52YWw8L3Zhcj4sIGludCA8dmFyPmNoYXJzPC92YXI+LCBpbnQgKjx2YXI+ZGVjcHQ8L3Zhcj4sCisgICAgICAgICBpbnQgKjx2YXI+c2duPC92YXI+LCBjaGFyICo8dmFyPmJ1ZjwvdmFyPik7CisgICAgIAorICAgICBjaGFyICpmY3Z0YnVmKGRvdWJsZSA8dmFyPnZhbDwvdmFyPiwgaW50IDx2YXI+ZGVjaW1hbHM8L3Zhcj4sIGludCAqPHZhcj5kZWNwdDwvdmFyPiwKKyAgICAgICAgIGludCAqPHZhcj5zZ248L3Zhcj4sIGNoYXIgKjx2YXI+YnVmPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5lY3Z0YnVmPC9jb2RlPiBhbmQgPGNvZGU+ZmN2dGJ1ZjwvY29kZT4gcHJvZHVjZSAobnVsbC10ZXJtaW5hdGVkKSBzdHJpbmdzCitvZiBkaWdpdHMgcmVwcmVzZW50YXRpbmcgdGhlIDxjb2RlPmRvdWJsZTwvY29kZT4gbnVtYmVyIDx2YXI+dmFsPC92YXI+LgorCisgICA8cD5UaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gPGNvZGU+ZWN2dGJ1ZjwvY29kZT4gYW5kIDxjb2RlPmZjdnRidWY8L2NvZGU+IGlzIHRoZQoraW50ZXJwcmV0YXRpb24gb2YgdGhlIHNlY29uZCBhcmd1bWVudCAoPHZhcj5jaGFyczwvdmFyPiBvcgorPHZhcj5kZWNpbWFsczwvdmFyPikuIEZvciA8Y29kZT5lY3Z0YnVmPC9jb2RlPiwgdGhlIHNlY29uZCBhcmd1bWVudCA8dmFyPmNoYXJzPC92YXI+CitzcGVjaWZpZXMgdGhlIHRvdGFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHdyaXRlICh3aGljaCBpcworYWxzbyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBpbiB0aGUgZm9ybWF0dGVkIHN0cmluZywKK3NpbmNlIHRoZXNlIHR3byBmdW5jdGlvbnMgd3JpdGUgb25seSBkaWdpdHMpLiBGb3IgPGNvZGU+ZmN2dGJ1ZjwvY29kZT4sCit0aGUgc2Vjb25kIGFyZ3VtZW50IDx2YXI+ZGVjaW1hbHM8L3Zhcj4gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YKK2NoYXJhY3RlcnMgdG8gd3JpdGUgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQ7IGFsbCBkaWdpdHMgZm9yCit0aGUgaW50ZWdlciBwYXJ0IG9mIDx2YXI+dmFsPC92YXI+IGFyZSBhbHdheXMgaW5jbHVkZWQuCisKKyAgIDxwPlNpbmNlIDxjb2RlPmVjdnRidWY8L2NvZGU+IGFuZCA8Y29kZT5mY3Z0YnVmPC9jb2RlPiB3cml0ZSBvbmx5IGRpZ2l0cyBpbiB0aGUKK291dHB1dCBzdHJpbmcsIHRoZXkgcmVjb3JkIHRoZSBsb2NhdGlvbiBvZiB0aGUgZGVjaW1hbCBwb2ludAoraW4gPGNvZGU+KjwvY29kZT48dmFyPmRlY3B0PC92YXI+LCBhbmQgdGhlIHNpZ24gb2YgdGhlIG51bWJlciBpbiA8Y29kZT4qPC9jb2RlPjx2YXI+c2duPC92YXI+LiAKK0FmdGVyIGZvcm1hdHRpbmcgYSBudW1iZXIsIDxjb2RlPio8L2NvZGU+PHZhcj5kZWNwdDwvdmFyPiBjb250YWlucyB0aGUgbnVtYmVyCitvZiBkaWdpdHMgdG8gdGhlIGxlZnQgb2YgdGhlIGRlY2ltYWwgcG9pbnQuICA8Y29kZT4qPC9jb2RlPjx2YXI+c2duPC92YXI+Citjb250YWlucyA8Y29kZT4wPC9jb2RlPiBpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBhbmQgPGNvZGU+MTwvY29kZT4gaWYgaXQgaXMKK25lZ2F0aXZlLiAgRm9yIGJvdGggZnVuY3Rpb25zLCB5b3Ugc3VwcGx5IGEgcG9pbnRlciA8dmFyPmJ1ZjwvdmFyPiB0bworYW4gYXJlYSBvZiBtZW1vcnkgdG8gaG9sZCB0aGUgY29udmVydGVkIHN0cmluZy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorQm90aCBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byA8dmFyPmJ1ZjwvdmFyPiwgdGhlIHN0cmluZworY29udGFpbmluZyBhIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbiBvZiA8dmFyPnZhbDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK05laXRoZXIgZnVuY3Rpb24gaXMgQU5TSSBDLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZXhpdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZXhpdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTcwZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9leGl0Lmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZXhpdCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3ZjdnQuaHRtbCNndmN2dCIgdGl0bGU9Imd2Y3Z0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ2V0ZW52Lmh0bWwjZ2V0ZW52IiB0aXRsZT0iZ2V0ZW52Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJleGl0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdldGVudi5odG1sI2dldGVudiI+Z2V0ZW52PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3ZjdnQuaHRtbCNndmN2dCI+Z3ZjdnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMTcgPGNvZGU+ZXhpdDwvY29kZT4mbWRhc2g7ZW5kIHByb2dyYW0gZXhlY3V0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXhpdC0zMCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICB2b2lkIGV4aXQoaW50IDx2YXI+Y29kZTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPmV4aXQ8L2NvZGU+IHRvIHJldHVybiBjb250cm9sIGZyb20gYSBwcm9ncmFtIHRvIHRoZSBob3N0IG9wZXJhdGluZworZW52aXJvbm1lbnQuICBVc2UgdGhlIGFyZ3VtZW50IDx2YXI+Y29kZTwvdmFyPiB0byBwYXNzIGFuIGV4aXQgc3RhdHVzIHRvIHRoZQorb3BlcmF0aW5nIGVudmlyb25tZW50OiB0d28gcGFydGljdWxhciB2YWx1ZXMsIDxjb2RlPkVYSVRfU1VDQ0VTUzwvY29kZT4gYW5kCis8Y29kZT5FWElUX0ZBSUxVUkU8L2NvZGU+LCBhcmUgZGVmaW5lZCBpbiBgPGNvZGU+c3RkbGliLmg8L2NvZGU+JyB0byBpbmRpY2F0ZSBzdWNjZXNzIG9yCitmYWlsdXJlIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KKworICAgPHA+PGNvZGU+ZXhpdDwvY29kZT4gZG9lcyB0d28ga2luZHMgb2YgY2xlYW51cCBiZWZvcmUgZW5kaW5nIGV4ZWN1dGlvbiBvZiB5b3VyCitwcm9ncmFtLiAgRmlyc3QsIGl0IGNhbGxzIGFsbCBhcHBsaWNhdGlvbi1kZWZpbmVkIGNsZWFudXAgZnVuY3Rpb25zCit5b3UgaGF2ZSBlbnJvbGxlZCB3aXRoIDxjb2RlPmF0ZXhpdDwvY29kZT4uICBTZWNvbmQsIGZpbGVzIGFuZCBzdHJlYW1zIGFyZQorY2xlYW5lZCB1cDogYW55IHBlbmRpbmcgb3V0cHV0IGlzIGRlbGl2ZXJlZCB0byB0aGUgaG9zdCBzeXN0ZW0sIGVhY2gKK29wZW4gZmlsZSBvciBzdHJlYW0gaXMgY2xvc2VkLCBhbmQgZmlsZXMgY3JlYXRlZCBieSA8Y29kZT50bXBmaWxlPC9jb2RlPiBhcmUKK2RlbGV0ZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmV4aXQ8L2NvZGU+IGRvZXMgbm90IHJldHVybiB0byBpdHMgY2FsbGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPmV4aXQ8L2NvZGU+LCBhbmQgc3BlY2lmaWVzIHRoYXQgPGNvZGU+RVhJVF9TVUNDRVNTPC9jb2RlPiBhbmQKKzxjb2RlPkVYSVRfRkFJTFVSRTwvY29kZT4gbXVzdCBiZSBkZWZpbmVkLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5fZXhpdDwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmNsb3NlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mY2xvc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBiMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmNsb3NlLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZmNsb3NlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJkcHJpbnRmLmh0bWwjZHByaW50ZiIgdGl0bGU9ImRwcmludGYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmY2xvc2VhbGwuaHRtbCNmY2xvc2VhbGwiIHRpdGxlPSJmY2xvc2VhbGwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZjbG9zZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmY2xvc2VhbGwuaHRtbCNmY2xvc2VhbGwiPmZjbG9zZWFsbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImRwcmludGYuaHRtbCNkcHJpbnRmIj5kcHJpbnRmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjQgPGNvZGU+ZmNsb3NlPC9jb2RlPiZtZGFzaDtjbG9zZSBhIGZpbGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mY2xvc2UtMTU0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmY2xvc2VfMDA1ZnItMTU1Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGZjbG9zZShGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgaW50IF9mY2xvc2VfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitJZiB0aGUgZmlsZSBvciBzdHJlYW0gaWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+IGlzIG9wZW4sIDxjb2RlPmZjbG9zZTwvY29kZT4gY2xvc2VzCitpdCwgYWZ0ZXIgZmlyc3QgZW5zdXJpbmcgdGhhdCBhbnkgcGVuZGluZyBkYXRhIGlzIHdyaXR0ZW4gKGJ5IGNhbGxpbmcKKzxjb2RlPmZmbHVzaCg8L2NvZGU+PHZhcj5mcDwvdmFyPjxjb2RlPik8L2NvZGU+KS4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fZmNsb3NlX3I8L2NvZGU+IGlzIGEgcmVlbnRyYW50IHZlcnNpb24uIAorVGhlIGV4dHJhIGFyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmZjbG9zZTwvY29kZT4gcmV0dXJucyA8Y29kZT4wPC9jb2RlPiBpZiBzdWNjZXNzZnVsIChpbmNsdWRpbmcgd2hlbiA8dmFyPmZwPC92YXI+IGlzCis8Y29kZT5OVUxMPC9jb2RlPiBvciBub3QgYW4gb3BlbiBmaWxlKTsgb3RoZXJ3aXNlLCBpdCByZXR1cm5zIDxjb2RlPkVPRjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5mY2xvc2U8L2NvZGU+IGlzIHJlcXVpcmVkIGJ5IEFOU0kgQy4KKworICAgPHA+UmVxdWlyZWQgT1Mgc3Vicm91dGluZXM6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LCA8Y29kZT5sc2VlazwvY29kZT4sCis8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mY2xvc2VhbGwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZjbG9zZWFsbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwODgyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mY2xvc2VhbGwuaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mY2xvc2VhbGwgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZjbG9zZS5odG1sI2ZjbG9zZSIgdGl0bGU9ImZjbG9zZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZkb3Blbi5odG1sI2Zkb3BlbiIgdGl0bGU9ImZkb3BlbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZmNsb3NlYWxsIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZkb3Blbi5odG1sI2Zkb3BlbiI+ZmRvcGVuPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZmNsb3NlLmh0bWwjZmNsb3NlIj5mY2xvc2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNSA8Y29kZT5mY2xvc2VhbGw8L2NvZGU+Jm1kYXNoO2Nsb3NlIGFsbCBmaWxlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZjbG9zZWFsbC0xNTYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZjbG9zZWFsbF8wMDVmci0xNTciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgZmNsb3NlYWxsKHZvaWQpOworICAgICBpbnQgX2ZjbG9zZWFsbF9yIChzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+ZmNsb3NlYWxsPC9jb2RlPiBjbG9zZXMgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IHJlZW50cmFuY3kgc3RydWN0J3MgZG9tYWluLiAKK1RoZSBmdW5jdGlvbiA8Y29kZT5fZmNsb3NlYWxsX3I8L2NvZGU+IGlzIHRoZSBzYW1lIGZ1bmN0aW9uLCBleGNlcHQgdGhlIHJlZW50cmFuY3kKK3N0cnVjdCBpcyBwYXNzZWQgaW4gYXMgdGhlIDx2YXI+cHRyPC92YXI+IGFyZ3VtZW50LgorCisgICA8cD5UaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWNvbW1lbmRlZCBhcyBpdCBjbG9zZXMgYWxsIHN0cmVhbXMsIGluY2x1ZGluZwordGhlIHN0ZCBzdHJlYW1zLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5mY2xvc2U8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYgYWxsIGNsb3NlcyBhcmUgc3VjY2Vzc2Z1bC4gIE90aGVyd2lzZSwKK0VPRiBpcyByZXR1cm5lZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmZjbG9zZWFsbDwvY29kZT4gaXMgYSBnbGliYyBleHRlbnNpb24uCisKKyAgIDxwPlJlcXVpcmVkIE9TIHN1YnJvdXRpbmVzOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwgPGNvZGU+bHNlZWs8L2NvZGU+LAorPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmRvcGVuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mZG9wZW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRjMjRmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmRvcGVuLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZmRvcGVuIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmY2xvc2VhbGwuaHRtbCNmY2xvc2VhbGwiIHRpdGxlPSJmY2xvc2VhbGwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmZW9mLmh0bWwjZmVvZiIgdGl0bGU9ImZlb2YiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZkb3BlbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmZW9mLmh0bWwjZmVvZiI+ZmVvZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZjbG9zZWFsbC5odG1sI2ZjbG9zZWFsbCI+ZmNsb3NlYWxsPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjYgPGNvZGU+ZmRvcGVuPC9jb2RlPiZtZGFzaDt0dXJuIG9wZW4gZmlsZSBpbnRvIGEgc3RyZWFtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmRvcGVuLTE1OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZmRvcGVuXzAwNWZyLTE1OSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIEZJTEUgKmZkb3BlbihpbnQgPHZhcj5mZDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5tb2RlPC92YXI+KTsKKyAgICAgRklMRSAqX2Zkb3Blbl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sCisgICAgICAgICBpbnQgPHZhcj5mZDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5tb2RlPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5mZG9wZW48L2NvZGU+IHByb2R1Y2VzIGEgZmlsZSBkZXNjcmlwdG9yIG9mIHR5cGUgPGNvZGU+RklMRSAqPC9jb2RlPiwgZnJvbSBhCitkZXNjcmlwdG9yIGZvciBhbiBhbHJlYWR5LW9wZW4gZmlsZSAocmV0dXJuZWQsIGZvciBleGFtcGxlLCBieSB0aGUKK3N5c3RlbSBzdWJyb3V0aW5lIDxjb2RlPm9wZW48L2NvZGU+IHJhdGhlciB0aGFuIGJ5IDxjb2RlPmZvcGVuPC9jb2RlPikuIAorVGhlIDx2YXI+bW9kZTwvdmFyPiBhcmd1bWVudCBoYXMgdGhlIHNhbWUgbWVhbmluZ3MgYXMgaW4gPGNvZGU+Zm9wZW48L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitGaWxlIHBvaW50ZXIgb3IgPGNvZGU+TlVMTDwvY29kZT4sIGFzIGZvciA8Y29kZT5mb3BlbjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5mZG9wZW48L2NvZGU+IGlzIEFOU0kuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmVvZi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmVvZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTcwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mZW9mLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZmVvZiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZmRvcGVuLmh0bWwjZmRvcGVuIiB0aXRsZT0iZmRvcGVuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZmVycm9yLmh0bWwjZmVycm9yIiB0aXRsZT0iZmVycm9yIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmZW9mIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZlcnJvci5odG1sI2ZlcnJvciI+ZmVycm9yPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZmRvcGVuLmh0bWwjZmRvcGVuIj5mZG9wZW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNyA8Y29kZT5mZW9mPC9jb2RlPiZtZGFzaDt0ZXN0IGZvciBlbmQgb2YgZmlsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZlb2YtMTYwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGZlb2YoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+ZmVvZjwvY29kZT4gdGVzdHMgd2hldGhlciBvciBub3QgdGhlIGVuZCBvZiB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IDx2YXI+ZnA8L3Zhcj4KK2hhcyBiZWVuIHJlYWNoZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmZlb2Y8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYgdGhlIGVuZCBvZiBmaWxlIGhhcyBub3QgeWV0IGJlZW4gcmVhY2hlZDsgaWYKK2F0IGVuZCBvZiBmaWxlLCB0aGUgcmVzdWx0IGlzIG5vbnplcm8uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5mZW9mPC9jb2RlPiBpcyByZXF1aXJlZCBieSBBTlNJIEMuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZlcnJvci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmVycm9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0NGU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZlcnJvci5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZlcnJvciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZmVvZi5odG1sI2Zlb2YiIHRpdGxlPSJmZW9mIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZmZsdXNoLmh0bWwjZmZsdXNoIiB0aXRsZT0iZmZsdXNoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmZXJyb3IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZmZsdXNoLmh0bWwjZmZsdXNoIj5mZmx1c2g8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmZW9mLmh0bWwjZmVvZiI+ZmVvZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC44IDxjb2RlPmZlcnJvcjwvY29kZT4mbWRhc2g7dGVzdCB3aGV0aGVyIHJlYWQvd3JpdGUgZXJyb3IgaGFzIG9jY3VycmVkPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmVycm9yLTE2MSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBmZXJyb3IoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPnN0ZGlvPC9jb2RlPiBmdW5jdGlvbnMgbWFpbnRhaW4gYW4gZXJyb3IgaW5kaWNhdG9yIHdpdGggZWFjaCBmaWxlCitwb2ludGVyIDx2YXI+ZnA8L3Zhcj4sIHRvIHJlY29yZCB3aGV0aGVyIGFueSByZWFkIG9yIHdyaXRlIGVycm9ycyBoYXZlCitvY2N1cnJlZCBvbiB0aGUgYXNzb2NpYXRlZCBmaWxlIG9yIHN0cmVhbS4gCitVc2UgPGNvZGU+ZmVycm9yPC9jb2RlPiB0byBxdWVyeSB0aGlzIGluZGljYXRvci4KKworICAgPHA+U2VlIDxjb2RlPmNsZWFyZXJyPC9jb2RlPiB0byByZXNldCB0aGUgZXJyb3IgaW5kaWNhdG9yLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5mZXJyb3I8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYgbm8gZXJyb3JzIGhhdmUgb2NjdXJyZWQ7IGl0IHJldHVybnMgYQorbm9uemVybyB2YWx1ZSBvdGhlcndpc2UuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+ZmVycm9yPC9jb2RlPi4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmZsdXNoLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mZmx1c2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTA5YTAzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmZsdXNoLmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZmZsdXNoIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmZXJyb3IuaHRtbCNmZXJyb3IiIHRpdGxlPSJmZXJyb3IiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmZ2V0Yy5odG1sI2ZnZXRjIiB0aXRsZT0iZmdldGMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZmbHVzaCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmZ2V0Yy5odG1sI2ZnZXRjIj5mZ2V0YzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZlcnJvci5odG1sI2ZlcnJvciI+ZmVycm9yPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjkgPGNvZGU+ZmZsdXNoPC9jb2RlPiZtZGFzaDtmbHVzaCBidWZmZXJlZCBmaWxlIG91dHB1dDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZmbHVzaC0xNjIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZmbHVzaF8wMDVmci0xNjMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgZmZsdXNoKEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKyAgICAgaW50IF9mZmx1c2hfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+c3RkaW88L2NvZGU+IG91dHB1dCBmdW5jdGlvbnMgY2FuIGJ1ZmZlciBvdXRwdXQgYmVmb3JlIGRlbGl2ZXJpbmcgaXQKK3RvIHRoZSBob3N0IHN5c3RlbSwgaW4gb3JkZXIgdG8gbWluaW1pemUgdGhlIG92ZXJoZWFkIG9mIHN5c3RlbSBjYWxscy4KKworICAgPHA+VXNlIDxjb2RlPmZmbHVzaDwvY29kZT4gdG8gZGVsaXZlciBhbnkgc3VjaCBwZW5kaW5nIG91dHB1dCAoZm9yIHRoZSBmaWxlCitvciBzdHJlYW0gaWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+KSB0byB0aGUgaG9zdCBzeXN0ZW0uCisKKyAgIDxwPklmIDx2YXI+ZnA8L3Zhcj4gaXMgPGNvZGU+TlVMTDwvY29kZT4sIDxjb2RlPmZmbHVzaDwvY29kZT4gZGVsaXZlcnMgcGVuZGluZyBvdXRwdXQgZnJvbSBhbGwKK29wZW4gZmlsZXMuCisKKyAgIDxwPkFkZGl0aW9uYWxseSwgaWYgPHZhcj5mcDwvdmFyPiBpcyBhIHNlZWthYmxlIGlucHV0IHN0cmVhbSB2aXNpdGluZyBhIGZpbGUKK2Rlc2NyaXB0b3IsIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIGZpbGUgZGVzY3JpcHRvciB0byBtYXRjaCBuZXh0Cit1bnJlYWQgYnl0ZSwgdXNlZnVsIGZvciBvYmV5aW5nIFBPU0lYIHNlbWFudGljcyB3aGVuIGVuZGluZyBhIHByb2Nlc3MKK3dpdGhvdXQgY29uc3VtaW5nIGFsbCBpbnB1dCBmcm9tIHRoZSBzdHJlYW0uCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X2ZmbHVzaF9yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLCB3aGVyZSB0aGUKK2V4dHJhIGFyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUsIGFuZAorPHZhcj5mcDwvdmFyPiBtdXN0IG5vdCBiZSBOVUxMLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5mZmx1c2g8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gdW5sZXNzIGl0IGVuY291bnRlcnMgYSB3cml0ZSBlcnJvcjsgaW4gdGhhdAorc2l0dWF0aW9uLCBpdCByZXR1cm5zIDxjb2RlPkVPRjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+ZmZsdXNoPC9jb2RlPi4gIFRoZSBiZWhhdmlvciBvbiBpbnB1dCBzdHJlYW1zIGlzIG9ubHkKK3NwZWNpZmllZCBieSBQT1NJWCwgYW5kIG5vdCBhbGwgaW1wbGVtZW50YXRpb25zIGZvbGxvdyBQT1NJWCBydWxlcy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmZzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mZnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjdjNzRmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmZzLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZmZzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNaXNjLmh0bWwjTWlzYyIgdGl0bGU9Ik1pc2MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ1bmN0cmwuaHRtbCN1bmN0cmwiIHRpdGxlPSJ1bmN0cmwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZmcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ1bmN0cmwuaHRtbCN1bmN0cmwiPnVuY3RybDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1pc2MuaHRtbCNNaXNjIj5NaXNjPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MTEuMSA8Y29kZT5mZnM8L2NvZGU+Jm1kYXNoO2ZpbmQgZmlyc3QgYml0IHNldCBpbiBhIHdvcmQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mZnMtNDU4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5ncy5oJmd0OworICAgICBpbnQgZmZzKGludCA8dmFyPndvcmQ8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKworICAgPHA+PGNvZGU+ZmZzPC9jb2RlPiByZXR1cm5zIHRoZSBmaXJzdCBiaXQgc2V0IGluIGEgd29yZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+ZmZzPC9jb2RlPiByZXR1cm5zIDAgaWYgPHZhcj5jPC92YXI+IGlzIDAsIDEgaWYgPHZhcj5jPC92YXI+IGlzIG9kZCwgMiBpZiA8dmFyPmM8L3Zhcj4gaXMgYSBtdWx0aXBsZSBvZgorMiwgZXRjLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+ZmZzPC9jb2RlPiBpcyBub3QgQU5TSSBDLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4gCis8YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZnZXRjLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mZ2V0Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYmQ4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mZ2V0Yy5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZnZXRjIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmZmx1c2guaHRtbCNmZmx1c2giIHRpdGxlPSJmZmx1c2giPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmZ2V0cG9zLmh0bWwjZmdldHBvcyIgdGl0bGU9ImZnZXRwb3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZnZXRjIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZnZXRwb3MuaHRtbCNmZ2V0cG9zIj5mZ2V0cG9zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZmZsdXNoLmh0bWwjZmZsdXNoIj5mZmx1c2g8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMTAgPGNvZGU+ZmdldGM8L2NvZGU+Jm1kYXNoO2dldCBhIGNoYXJhY3RlciBmcm9tIGEgZmlsZSBvciBzdHJlYW08L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mZ2V0Yy0xNjQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZnZXRjXzAwNWZyLTE2NSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBmZ2V0YyhGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCisgICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgX2ZnZXRjX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1VzZSA8Y29kZT5mZ2V0YzwvY29kZT4gdG8gZ2V0IHRoZSBuZXh0IHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSB0aGUgZmlsZSBvciBzdHJlYW0KK2lkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPi4gIEFzIGEgc2lkZSBlZmZlY3QsIDxjb2RlPmZnZXRjPC9jb2RlPiBhZHZhbmNlcyB0aGUgZmlsZSdzCitjdXJyZW50IHBvc2l0aW9uIGluZGljYXRvci4KKworICAgPHA+Rm9yIGEgbWFjcm8gdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uLCBzZWUgPGNvZGU+Z2V0YzwvY29kZT4uCisKKyAgIDxwPlRoZSBmdW5jdGlvbiA8Y29kZT5fZmdldGNfcjwvY29kZT4gaXMgc2ltcGx5IGEgcmVlbnRyYW50IHZlcnNpb24gb2YKKzxjb2RlPmZnZXRjPC9jb2RlPiB0aGF0IGlzIHBhc3NlZCB0aGUgYWRkaXRpb25hbCByZWVudHJhbnQgc3RydWN0dXJlCitwb2ludGVyIGFyZ3VtZW50OiA8dmFyPnB0cjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIG5leHQgY2hhcmFjdGVyIChyZWFkIGFzIGFuIDxjb2RlPnVuc2lnbmVkIGNoYXI8L2NvZGU+LCBhbmQgY2FzdCB0bworPGNvZGU+aW50PC9jb2RlPiksIHVubGVzcyB0aGVyZSBpcyBubyBtb3JlIGRhdGEsIG9yIHRoZSBob3N0IHN5c3RlbSByZXBvcnRzIGEKK3JlYWQgZXJyb3I7IGluIGVpdGhlciBvZiB0aGVzZSBzaXR1YXRpb25zLCA8Y29kZT5mZ2V0YzwvY29kZT4gcmV0dXJucyA8Y29kZT5FT0Y8L2NvZGU+LgorCisgICA8cD5Zb3UgY2FuIGRpc3Rpbmd1aXNoIHRoZSB0d28gc2l0dWF0aW9ucyB0aGF0IGNhdXNlIGFuIDxjb2RlPkVPRjwvY29kZT4gcmVzdWx0IGJ5Cit1c2luZyB0aGUgPGNvZGU+ZmVycm9yPC9jb2RlPiBhbmQgPGNvZGU+ZmVvZjwvY29kZT4gZnVuY3Rpb25zLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPmZnZXRjPC9jb2RlPi4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZnZXRwb3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZnZXRwb3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQ2ZjBjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmdldHBvcy5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZnZXRwb3MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZnZXRjLmh0bWwjZmdldGMiIHRpdGxlPSJmZ2V0YyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZnZXRzLmh0bWwjZmdldHMiIHRpdGxlPSJmZ2V0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZmdldHBvcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmZ2V0cy5odG1sI2ZnZXRzIj5mZ2V0czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZnZXRjLmh0bWwjZmdldGMiPmZnZXRjPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjExIDxjb2RlPmZnZXRwb3M8L2NvZGU+Jm1kYXNoO3JlY29yZCBwb3NpdGlvbiBpbiBhIHN0cmVhbSBvciBmaWxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmdldHBvcy0xNjYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZnZXRwb3NfMDA1ZnItMTY3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGZnZXRwb3MoRklMRSAqPHZhcj5mcDwvdmFyPiwgZnBvc190ICo8dmFyPnBvczwvdmFyPik7CisgICAgIGludCBfZmdldHBvc19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+LCBmcG9zX3QgKjx2YXI+cG9zPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitPYmplY3RzIG9mIHR5cGUgPGNvZGU+RklMRTwvY29kZT4gY2FuIGhhdmUgYSAmbGRxdW87cG9zaXRpb24mcmRxdW87IHRoYXQgcmVjb3JkcyBob3cgbXVjaAorb2YgdGhlIGZpbGUgeW91ciBwcm9ncmFtIGhhcyBhbHJlYWR5IHJlYWQuICBNYW55IG9mIHRoZSA8Y29kZT5zdGRpbzwvY29kZT4gZnVuY3Rpb25zCitkZXBlbmQgb24gdGhpcyBwb3NpdGlvbiwgYW5kIG1hbnkgY2hhbmdlIGl0IGFzIGEgc2lkZSBlZmZlY3QuCisKKyAgIDxwPllvdSBjYW4gdXNlIDxjb2RlPmZnZXRwb3M8L2NvZGU+IHRvIHJlcG9ydCBvbiB0aGUgY3VycmVudCBwb3NpdGlvbiBmb3IgYSBmaWxlCitpZGVudGlmaWVkIGJ5IDx2YXI+ZnA8L3Zhcj47IDxjb2RlPmZnZXRwb3M8L2NvZGU+IHdpbGwgd3JpdGUgYSB2YWx1ZQorcmVwcmVzZW50aW5nIHRoYXQgcG9zaXRpb24gYXQgPGNvZGU+KjwvY29kZT48dmFyPnBvczwvdmFyPi4gIExhdGVyLCB5b3UgY2FuCit1c2UgdGhpcyB2YWx1ZSB3aXRoIDxjb2RlPmZzZXRwb3M8L2NvZGU+IHRvIHJldHVybiB0aGUgZmlsZSB0byB0aGlzCitwb3NpdGlvbi4KKworICAgPHA+SW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIDxjb2RlPmZnZXRwb3M8L2NvZGU+IHNpbXBseSB1c2VzIGEgY2hhcmFjdGVyCitjb3VudCB0byByZXByZXNlbnQgdGhlIGZpbGUgcG9zaXRpb247IHRoaXMgaXMgdGhlIHNhbWUgbnVtYmVyIHRoYXQKK3dvdWxkIGJlIHJldHVybmVkIGJ5IDxjb2RlPmZ0ZWxsPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+ZmdldHBvczwvY29kZT4gcmV0dXJucyA8Y29kZT4wPC9jb2RlPiB3aGVuIHN1Y2Nlc3NmdWwuICBJZiA8Y29kZT5mZ2V0cG9zPC9jb2RlPiBmYWlscywgdGhlCityZXN1bHQgaXMgPGNvZGU+MTwvY29kZT4uICBGYWlsdXJlIG9jY3VycyBvbiBzdHJlYW1zIHRoYXQgZG8gbm90IHN1cHBvcnQKK3Bvc2l0aW9uaW5nOyB0aGUgZ2xvYmFsIDxjb2RlPmVycm5vPC9jb2RlPiBpbmRpY2F0ZXMgdGhpcyBjb25kaXRpb24gd2l0aCB0aGUKK3ZhbHVlIDxjb2RlPkVTUElQRTwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5mZ2V0cG9zPC9jb2RlPiBpcyByZXF1aXJlZCBieSB0aGUgQU5TSSBDIHN0YW5kYXJkLCBidXQgdGhlIG1lYW5pbmcgb2YgdGhlCit2YWx1ZSBpdCByZWNvcmRzIGlzIG5vdCBzcGVjaWZpZWQgYmV5b25kIHJlcXVpcmluZyB0aGF0IGl0IGJlCithY2NlcHRhYmxlIGFzIGFuIGFyZ3VtZW50IHRvIDxjb2RlPmZzZXRwb3M8L2NvZGU+LiAgSW4gcGFydGljdWxhciwgb3RoZXIKK2NvbmZvcm1pbmcgQyBpbXBsZW1lbnRhdGlvbnMgbWF5IHJldHVybiBhIGRpZmZlcmVudCByZXN1bHQgZnJvbQorPGNvZGU+ZnRlbGw8L2NvZGU+IHRoYW4gd2hhdCA8Y29kZT5mZ2V0cG9zPC9jb2RlPiB3cml0ZXMgYXQgPGNvZGU+KjwvY29kZT48dmFyPnBvczwvdmFyPi4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmdldHMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZnZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiYzBjNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZnZXRzLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZmdldHMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZnZXRwb3MuaHRtbCNmZ2V0cG9zIiB0aXRsZT0iZmdldHBvcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZnZXR3Yy5odG1sI2ZnZXR3YyIgdGl0bGU9ImZnZXR3YyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZmdldHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZmdldHdjLmh0bWwjZmdldHdjIj5mZ2V0d2M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmZ2V0cG9zLmh0bWwjZmdldHBvcyI+ZmdldHBvczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xMiA8Y29kZT5mZ2V0czwvY29kZT4mbWRhc2g7Z2V0IGNoYXJhY3RlciBzdHJpbmcgZnJvbSBhIGZpbGUgb3Igc3RyZWFtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmdldHMtMTY4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmZ2V0c18wMDVmci0xNjkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBjaGFyICpmZ2V0cyhjaGFyICo8dmFyPmJ1ZjwvdmFyPiwgaW50IDx2YXI+bjwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgY2hhciAqX2ZnZXRzX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNoYXIgKjx2YXI+YnVmPC92YXI+LCBpbnQgPHZhcj5uPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitSZWFkcyBhdCBtb3N0IDx2YXI+bi0xPC92YXI+IGNoYXJhY3RlcnMgZnJvbSA8dmFyPmZwPC92YXI+IHVudGlsIGEgbmV3bGluZQoraXMgZm91bmQuIFRoZSBjaGFyYWN0ZXJzIGluY2x1ZGluZyB0byB0aGUgbmV3bGluZSBhcmUgc3RvcmVkCitpbiA8dmFyPmJ1ZjwvdmFyPi4gVGhlIGJ1ZmZlciBpcyB0ZXJtaW5hdGVkIHdpdGggYSAwLgorCisgICA8cD5UaGUgPGNvZGU+X2ZnZXRzX3I8L2NvZGU+IGZ1bmN0aW9uIGlzIHNpbXBseSB0aGUgcmVlbnRyYW50IHZlcnNpb24gb2YKKzxjb2RlPmZnZXRzPC9jb2RlPiBhbmQgaXMgcGFzc2VkIGFuIGFkZGl0aW9uYWwgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUKK3BvaW50ZXI6IDx2YXI+cHRyPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5mZ2V0czwvY29kZT4gcmV0dXJucyB0aGUgYnVmZmVyIHBhc3NlZCB0byBpdCwgd2l0aCB0aGUgZGF0YQorZmlsbGVkIGluLiBJZiBlbmQgb2YgZmlsZSBvY2N1cnMgd2l0aCBzb21lIGRhdGEgYWxyZWFkeQorYWNjdW11bGF0ZWQsIHRoZSBkYXRhIGlzIHJldHVybmVkIHdpdGggbm8gb3RoZXIgaW5kaWNhdGlvbi4gSWYKK25vIGRhdGEgYXJlIHJlYWQsIE5VTEwgaXMgcmV0dXJuZWQgaW5zdGVhZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmZnZXRzPC9jb2RlPiBzaG91bGQgcmVwbGFjZSBhbGwgdXNlcyBvZiA8Y29kZT5nZXRzPC9jb2RlPi4gTm90ZSBob3dldmVyCit0aGF0IDxjb2RlPmZnZXRzPC9jb2RlPiByZXR1cm5zIGFsbCBvZiB0aGUgZGF0YSwgd2hpbGUgPGNvZGU+Z2V0czwvY29kZT4gcmVtb3ZlcwordGhlIHRyYWlsaW5nIG5ld2xpbmUgKHdpdGggbm8gaW5kaWNhdGlvbiB0aGF0IGl0IGhhcyBkb25lIHNvLikKKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZnZXR3Yy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmdldHdjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1YzhkNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZnZXR3Yy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZnZXR3YyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZmdldHMuaHRtbCNmZ2V0cyIgdGl0bGU9ImZnZXRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZmdldHdzLmh0bWwjZmdldHdzIiB0aXRsZT0iZmdldHdzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmZ2V0d2MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZmdldHdzLmh0bWwjZmdldHdzIj5mZ2V0d3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmZ2V0cy5odG1sI2ZnZXRzIj5mZ2V0czwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xMyA8Y29kZT5mZ2V0d2M8L2NvZGU+LCA8Y29kZT5nZXR3YzwvY29kZT4mbWRhc2g7Z2V0IGEgd2lkZSBjaGFyYWN0ZXIgZnJvbSBhIGZpbGUgb3Igc3RyZWFtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmdldHdjLTE3MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZmdldHdjXzAwNWZyLTE3MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdldHdjLTE3MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZ2V0d2NfMDA1ZnItMTczIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdpbnRfdCBmZ2V0d2MoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdpbnRfdCBfZmdldHdjX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3aW50X3QgZ2V0d2MoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdpbnRfdCBfZ2V0d2NfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPmZnZXR3YzwvY29kZT4gdG8gZ2V0IHRoZSBuZXh0IHdpZGUgY2hhcmFjdGVyIGZyb20gdGhlIGZpbGUgb3Igc3RyZWFtCitpZGVudGlmaWVkIGJ5IDx2YXI+ZnA8L3Zhcj4uICBBcyBhIHNpZGUgZWZmZWN0LCA8Y29kZT5mZ2V0d2M8L2NvZGU+IGFkdmFuY2VzIHRoZSBmaWxlJ3MKK2N1cnJlbnQgcG9zaXRpb24gaW5kaWNhdG9yLgorCisgICA8cD5UaGUgIDxjb2RlPmdldHdjPC9jb2RlPiAgZnVuY3Rpb24gIG9yIG1hY3JvIGZ1bmN0aW9ucyBpZGVudGljYWxseSB0byA8Y29kZT5mZ2V0d2M8L2NvZGU+LiAgSXQKK21heSBiZSBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvLCBhbmQgbWF5IGV2YWx1YXRlIGl0cyBhcmd1bWVudCBtb3JlICB0aGFuCitvbmNlLiBUaGVyZSBpcyBubyByZWFzb24gZXZlciB0byB1c2UgaXQuCisKKyAgIDxwPjxjb2RlPl9mZ2V0d2NfcjwvY29kZT4gYW5kIDxjb2RlPl9nZXR3Y19yPC9jb2RlPiBhcmUgc2ltcGx5IHJlZW50cmFudCB2ZXJzaW9ucyBvZgorPGNvZGU+ZmdldHdjPC9jb2RlPiBhbmQgPGNvZGU+Z2V0d2M8L2NvZGU+IHRoYXQgYXJlIHBhc3NlZCB0aGUgYWRkaXRpb25hbCByZWVudHJhbnQKK3N0cnVjdHVyZSBwb2ludGVyIGFyZ3VtZW50OiA8dmFyPnB0cjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIG5leHQgd2lkZSBjaGFyYWN0ZXIgY2FzdCB0byA8Y29kZT53aW50X3Q8L2NvZGU+KSwgdW5sZXNzIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSwKK29yIHRoZSBob3N0IHN5c3RlbSByZXBvcnRzIGEgcmVhZCBlcnJvcjsgaW4gZWl0aGVyIG9mIHRoZXNlIHNpdHVhdGlvbnMsCis8Y29kZT5mZ2V0d2M8L2NvZGU+IGFuZCA8Y29kZT5nZXR3YzwvY29kZT4gcmV0dXJuIDxjb2RlPldFT0Y8L2NvZGU+LgorCisgICA8cD5Zb3UgY2FuIGRpc3Rpbmd1aXNoIHRoZSB0d28gc2l0dWF0aW9ucyB0aGF0IGNhdXNlIGFuIDxjb2RlPkVPRjwvY29kZT4gcmVzdWx0IGJ5Cit1c2luZyB0aGUgPGNvZGU+ZmVycm9yPC9jb2RlPiBhbmQgPGNvZGU+ZmVvZjwvY29kZT4gZnVuY3Rpb25zLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQzk5LCBQT1NJWC4xLTIwMDEKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mZ2V0d3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZnZXR3cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMGNhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mZ2V0d3MuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mZ2V0d3MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZnZXR3Yy5odG1sI2ZnZXR3YyIgdGl0bGU9ImZnZXR3YyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZpbGVuby5odG1sI2ZpbGVubyIgdGl0bGU9ImZpbGVubyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZmdldHdzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZpbGVuby5odG1sI2ZpbGVubyI+ZmlsZW5vPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZmdldHdjLmh0bWwjZmdldHdjIj5mZ2V0d2M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMTQgPGNvZGU+ZmdldHdzPC9jb2RlPiZtZGFzaDtnZXQgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGZyb20gYSBmaWxlIG9yIHN0cmVhbTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZnZXR3cy0xNzQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZnZXR3c18wMDVmci0xNzUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3Y2hhcl90ICpmZ2V0d3Mod2NoYXJfdCAqPHZhcj53czwvdmFyPiwgaW50IDx2YXI+bjwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdCAqX2ZnZXR3c19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCB3Y2hhcl90ICo8dmFyPndzPC92YXI+LCBpbnQgPHZhcj5uPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitSZWFkcyBhdCBtb3N0IDx2YXI+bi0xPC92YXI+IHdpZGUgY2hhcmFjdGVycyBmcm9tIDx2YXI+ZnA8L3Zhcj4gdW50aWwgYSBuZXdsaW5lCitpcyBmb3VuZC4gVGhlIHdpZGUgY2hhcmFjdGVycyBpbmNsdWRpbmcgdG8gdGhlIG5ld2xpbmUgYXJlIHN0b3JlZAoraW4gPHZhcj53czwvdmFyPi4gVGhlIGJ1ZmZlciBpcyB0ZXJtaW5hdGVkIHdpdGggYSAwLgorCisgICA8cD5UaGUgPGNvZGU+X2ZnZXR3c19yPC9jb2RlPiBmdW5jdGlvbiBpcyBzaW1wbHkgdGhlIHJlZW50cmFudCB2ZXJzaW9uIG9mCis8Y29kZT5mZ2V0d3M8L2NvZGU+IGFuZCBpcyBwYXNzZWQgYW4gYWRkaXRpb25hbCByZWVudHJhbmN5IHN0cnVjdHVyZQorcG9pbnRlcjogPHZhcj5wdHI8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmZnZXR3czwvY29kZT4gcmV0dXJucyB0aGUgYnVmZmVyIHBhc3NlZCB0byBpdCwgd2l0aCB0aGUgZGF0YQorZmlsbGVkIGluLiBJZiBlbmQgb2YgZmlsZSBvY2N1cnMgd2l0aCBzb21lIGRhdGEgYWxyZWFkeQorYWNjdW11bGF0ZWQsIHRoZSBkYXRhIGlzIHJldHVybmVkIHdpdGggbm8gb3RoZXIgaW5kaWNhdGlvbi4gSWYKK25vIGRhdGEgYXJlIHJlYWQsIE5VTEwgaXMgcmV0dXJuZWQgaW5zdGVhZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0M5OSwgUE9TSVguMS0yMDAxCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmlsZW5vLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9maWxlbm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Q4M2M1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZmlsZW5vLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZmlsZW5vIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmZ2V0d3MuaHRtbCNmZ2V0d3MiIHRpdGxlPSJmZ2V0d3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmbWVtb3Blbi5odG1sI2ZtZW1vcGVuIiB0aXRsZT0iZm1lbW9wZW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZpbGVubyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmbWVtb3Blbi5odG1sI2ZtZW1vcGVuIj5mbWVtb3BlbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZnZXR3cy5odG1sI2ZnZXR3cyI+ZmdldHdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjE1IDxjb2RlPmZpbGVubzwvY29kZT4mbWRhc2g7cmV0dXJuIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggc3RyZWFtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmlsZW5vLTE3NiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBmaWxlbm8oRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorWW91IGNhbiB1c2UgPGNvZGU+ZmlsZW5vPC9jb2RlPiB0byByZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBpZGVudGlmaWVkIGJ5IDx2YXI+ZnA8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmZpbGVubzwvY29kZT4gcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHdoZW4gc3VjY2Vzc2Z1bC4gCitJZiA8dmFyPmZwPC92YXI+IGlzIG5vdCBhbiBvcGVuIHN0cmVhbSwgPGNvZGU+ZmlsZW5vPC9jb2RlPiByZXR1cm5zIC0xLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+ZmlsZW5vPC9jb2RlPiBpcyBub3QgcGFydCBvZiBBTlNJIEMuIAorUE9TSVggcmVxdWlyZXMgPGNvZGU+ZmlsZW5vPC9jb2RlPi4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogbm9uZS4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mbWVtb3Blbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZm1lbW9wZW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQzMzE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZm1lbW9wZW4uaHRtbApAQCAtMCwwICsxLDk0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mbWVtb3BlbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZmlsZW5vLmh0bWwjZmlsZW5vIiB0aXRsZT0iZmlsZW5vIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZm9wZW4uaHRtbCNmb3BlbiIgdGl0bGU9ImZvcGVuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmbWVtb3BlbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmb3Blbi5odG1sI2ZvcGVuIj5mb3BlbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZpbGVuby5odG1sI2ZpbGVubyI+ZmlsZW5vPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjE2IDxjb2RlPmZtZW1vcGVuPC9jb2RlPiZtZGFzaDtvcGVuIGEgc3RyZWFtIGFyb3VuZCBhIGZpeGVkLWxlbmd0aCBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mbWVtb3Blbi0xNzciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBGSUxFICpmbWVtb3Blbih2b2lkICpyZXN0cmljdCA8dmFyPmJ1ZjwvdmFyPiwgc2l6ZV90IDx2YXI+c2l6ZTwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKnJlc3RyaWN0IDx2YXI+bW9kZTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+Zm1lbW9wZW48L2NvZGU+IGNyZWF0ZXMgYSBzZWVrYWJsZSA8Y29kZT5GSUxFPC9jb2RlPiBzdHJlYW0gdGhhdCB3cmFwcyBhCitmaXhlZC1sZW5ndGggYnVmZmVyIG9mIDx2YXI+c2l6ZTwvdmFyPiBieXRlcyBzdGFydGluZyBhdCA8dmFyPmJ1ZjwvdmFyPi4gIFRoZSBzdHJlYW0KK2lzIG9wZW5lZCB3aXRoIDx2YXI+bW9kZTwvdmFyPiB0cmVhdGVkIGFzIGluIDxjb2RlPmZvcGVuPC9jb2RlPiwgd2hlcmUgYXBwZW5kIG1vZGUKK3N0YXJ0cyB3cml0aW5nIGF0IHRoZSBmaXJzdCBOVUwgYnl0ZS4gIElmIDx2YXI+YnVmPC92YXI+IGlzIE5VTEwsIHRoZW4KKzx2YXI+c2l6ZTwvdmFyPiBieXRlcyBhcmUgYXV0b21hdGljYWxseSBwcm92aWRlZCBhcyBpZiBieSA8Y29kZT5tYWxsb2M8L2NvZGU+LCB3aXRoCit0aGUgaW5pdGlhbCBzaXplIG9mIDAsIGFuZCA8dmFyPm1vZGU8L3Zhcj4gbXVzdCBjb250YWluIDxjb2RlPis8L2NvZGU+IHNvIHRoYXQgZGF0YQorY2FuIGJlIHJlYWQgYWZ0ZXIgaXQgaXMgd3JpdHRlbi4KKworICAgPHA+VGhlIHN0cmVhbSBtYWludGFpbnMgYSBjdXJyZW50IHBvc2l0aW9uLCB3aGljaCBtb3ZlcyBhY2NvcmRpbmcgdG8KK2J5dGVzIHJlYWQgb3Igd3JpdHRlbiwgYW5kIHdoaWNoIGNhbiBiZSBvbmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4gCitUaGUgc3RyZWFtIGFsc28gbWFpbnRhaW5zIGEgY3VycmVudCBmaWxlIHNpemUsIHdoaWNoIGlzIG5ldmVyIGdyZWF0ZXIKK3RoYW4gPHZhcj5zaXplPC92YXI+LiAgSWYgPHZhcj5tb2RlPC92YXI+IHN0YXJ0cyB3aXRoIDxjb2RlPnI8L2NvZGU+LCB0aGUgcG9zaXRpb24gc3RhcnRzIGF0Cis8Y29kZT4wPC9jb2RlPiwgYW5kIGZpbGUgc2l6ZSBzdGFydHMgYXQgPHZhcj5zaXplPC92YXI+IGlmIDx2YXI+YnVmPC92YXI+IHdhcyBwcm92aWRlZC4gIElmCis8dmFyPm1vZGU8L3Zhcj4gc3RhcnRzIHdpdGggPGNvZGU+dzwvY29kZT4sIHRoZSBwb3NpdGlvbiBhbmQgZmlsZSBzaXplIHN0YXJ0IGF0IDxjb2RlPjA8L2NvZGU+LAorYW5kIGlmIDx2YXI+YnVmPC92YXI+IHdhcyBwcm92aWRlZCwgdGhlIGZpcnN0IGJ5dGUgaXMgc2V0IHRvIE5VTC4gIElmCis8dmFyPm1vZGU8L3Zhcj4gc3RhcnRzIHdpdGggPGNvZGU+YTwvY29kZT4sIHRoZSBwb3NpdGlvbiBhbmQgZmlsZSBzaXplIHN0YXJ0IGF0IHRoZQorbG9jYXRpb24gb2YgdGhlIGZpcnN0IE5VTCBieXRlLCBvciBlbHNlIDx2YXI+c2l6ZTwvdmFyPiBpZiA8dmFyPmJ1ZjwvdmFyPiB3YXMKK3Byb3ZpZGVkLgorCisgICA8cD5XaGVuIHJlYWRpbmcsIE5VTCBieXRlcyBoYXZlIG5vIHNpZ25pZmljYW5jZSwgYW5kIHJlYWRzIGNhbm5vdCBleGNlZWQKK3RoZSBjdXJyZW50IGZpbGUgc2l6ZS4gIFdoZW4gd3JpdGluZywgdGhlIGZpbGUgc2l6ZSBjYW4gaW5jcmVhc2UgdXAgdG8KKzx2YXI+c2l6ZTwvdmFyPiBhcyBuZWVkZWQsIGFuZCBOVUwgYnl0ZXMgbWF5IGJlIGVtYmVkZGVkIGluIHRoZSBzdHJlYW0gKHNlZQorPGNvZGU+b3Blbl9tZW1zdHJlYW08L2NvZGU+IGZvciBhbiBhbHRlcm5hdGl2ZSB0aGF0IGF1dG9tYXRpY2FsbHkgZW5sYXJnZXMgdGhlCitidWZmZXIpLiAgV2hlbiB0aGUgc3RyZWFtIGlzIGZsdXNoZWQgb3IgY2xvc2VkIGFmdGVyIGEgd3JpdGUgdGhhdAorY2hhbmdlZCB0aGUgZmlsZSBzaXplLCBhIE5VTCBieXRlIGlzIHdyaXR0ZW4gYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24KK2lmIHRoZXJlIGlzIHN0aWxsIHJvb207IGlmIHRoZSBzdHJlYW0gaXMgbm90IGFsc28gb3BlbiBmb3IgcmVhZGluZywgYQorTlVMIGJ5dGUgaXMgYWRkaXRpb25hbGx5IHdyaXR0ZW4gYXQgdGhlIGxhc3QgYnl0ZSBvZiA8dmFyPmJ1ZjwvdmFyPiB3aGVuIHRoZQorc3RyZWFtIGhhcyBleGNlZWRlZCA8dmFyPnNpemU8L3Zhcj4sIHNvIHRoYXQgYSB3cml0ZS1vbmx5IDx2YXI+YnVmPC92YXI+IGlzIGFsd2F5cworTlVMLXRlcm1pbmF0ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGZsdXNoZWQgb3IgY2xvc2VkIChhbmQgdGhlIGluaXRpYWwKKzx2YXI+c2l6ZTwvdmFyPiBzaG91bGQgdGFrZSB0aGlzIGludG8gYWNjb3VudCkuICBJdCBpcyBub3QgcG9zc2libGUgdG8gc2Vlaworb3V0c2lkZSB0aGUgYm91bmRzIG9mIDx2YXI+c2l6ZTwvdmFyPi4gIEEgTlVMIGJ5dGUgd3JpdHRlbiBkdXJpbmcgYSBmbHVzaCBpcworcmVzdG9yZWQgdG8gaXRzIHByZXZpb3VzIHZhbHVlIHdoZW4gc2Vla2luZyBlbHNld2hlcmUgaW4gdGhlIHN0cmluZy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvcGVuIEZJTEUgcG9pbnRlciBvbiBzdWNjZXNzLiAgT24gZXJyb3IsCis8Y29kZT5OVUxMPC9jb2RlPiBpcyByZXR1cm5lZCwgYW5kIDxjb2RlPmVycm5vPC9jb2RlPiB3aWxsIGJlIHNldCB0byBFSU5WQUwgaWYgPHZhcj5zaXplPC92YXI+CitpcyB6ZXJvIG9yIDx2YXI+bW9kZTwvdmFyPiBpcyBpbnZhbGlkLCBFTk9NRU0gaWYgPHZhcj5idWY8L3Zhcj4gd2FzIE5VTEwgYW5kIG1lbW9yeQorY291bGQgbm90IGJlIGFsbG9jYXRlZCwgb3IgRU1GSUxFIGlmIHRvbyBtYW55IHN0cmVhbXMgYXJlIGFscmVhZHkKK29wZW4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGFkZGVkIHRvIFBPU0lYIDIwMHgsIGJ1dCBpcyBub3QgaW4gUE9TSVggMjAwMS4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+c2JyazwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZm9wZW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZvcGVuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2MmU1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZvcGVuLmh0bWwKQEAgLTAsMCArMSwxMTMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZvcGVuIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmbWVtb3Blbi5odG1sI2ZtZW1vcGVuIiB0aXRsZT0iZm1lbW9wZW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmb3BlbmNvb2tpZS5odG1sI2ZvcGVuY29va2llIiB0aXRsZT0iZm9wZW5jb29raWUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZvcGVuIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZvcGVuY29va2llLmh0bWwjZm9wZW5jb29raWUiPmZvcGVuY29va2llPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZm1lbW9wZW4uaHRtbCNmbWVtb3BlbiI+Zm1lbW9wZW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMTcgPGNvZGU+Zm9wZW48L2NvZGU+Jm1kYXNoO29wZW4gYSBmaWxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZm9wZW4tMTc4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmb3Blbl8wMDVmci0xNzkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBGSUxFICpmb3Blbihjb25zdCBjaGFyICo8dmFyPmZpbGU8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+bW9kZTwvdmFyPik7CisgICAgIAorICAgICBGSUxFICpfZm9wZW5fcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5maWxlPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPm1vZGU8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmZvcGVuPC9jb2RlPiBpbml0aWFsaXplcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRlZCB0byByZWFkIG9yIHdyaXRlIGEKK2ZpbGUuICBTcGVjaWZ5IHRoZSBmaWxlJ3MgbmFtZSBhcyB0aGUgc3RyaW5nIGF0IDx2YXI+ZmlsZTwvdmFyPiwgYW5kIHRoZSBraW5kCitvZiBhY2Nlc3MgeW91IG5lZWQgdG8gdGhlIGZpbGUgd2l0aCB0aGUgc3RyaW5nIGF0IDx2YXI+bW9kZTwvdmFyPi4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fZm9wZW5fcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbi4gCitUaGUgZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+VGhyZWUgZnVuZGFtZW50YWwga2luZHMgb2YgYWNjZXNzIGFyZSBhdmFpbGFibGU6IHJlYWQsIHdyaXRlLCBhbmQgYXBwZW5kLiAKKzxjb2RlPio8L2NvZGU+PHZhcj5tb2RlPC92YXI+IG11c3QgYmVnaW4gd2l0aCBvbmUgb2YgdGhlIHRocmVlIGNoYXJhY3RlcnMgYDxjb2RlPnI8L2NvZGU+JywKK2A8Y29kZT53PC9jb2RlPicsIG9yIGA8Y29kZT5hPC9jb2RlPicsIHRvIHNlbGVjdCBvbmUgb2YgdGhlc2U6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPnI8L2NvZGU+PGRkPk9wZW4gdGhlIGZpbGUgZm9yIHJlYWRpbmc7IHRoZSBvcGVyYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBmaWxlIGRvZXMKK25vdCBleGlzdCwgb3IgaWYgdGhlIGhvc3Qgc3lzdGVtIGRvZXMgbm90IHBlcm1pdCB5b3UgdG8gcmVhZCBpdC4KKworICAgICA8YnI+PGR0Pjxjb2RlPnc8L2NvZGU+PGRkPk9wZW4gdGhlIGZpbGUgZm9yIHdyaXRpbmcgPGVtPmZyb20gdGhlIGJlZ2lubmluZzwvZW0+IG9mIHRoZSBmaWxlOgorZWZmZWN0aXZlbHksIHRoaXMgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgZmlsZS4gIElmIHRoZSBmaWxlIHdob3NlIG5hbWUgeW91CitzcGVjaWZpZWQgYWxyZWFkeSBleGlzdGVkLCBpdHMgb2xkIGNvbnRlbnRzIGFyZSBkaXNjYXJkZWQuCisKKyAgICAgPGJyPjxkdD48Y29kZT5hPC9jb2RlPjxkZD5PcGVuIHRoZSBmaWxlIGZvciBhcHBlbmRpbmcgZGF0YSwgdGhhdCBpcyB3cml0aW5nIGZyb20gdGhlIGVuZCBvZgorZmlsZS4gIFdoZW4geW91IG9wZW4gYSBmaWxlIHRoaXMgd2F5LCBhbGwgZGF0YSBhbHdheXMgZ29lcyB0byB0aGUKK2N1cnJlbnQgZW5kIG9mIGZpbGU7IHlvdSBjYW5ub3QgY2hhbmdlIHRoaXMgdXNpbmcgPGNvZGU+ZnNlZWs8L2NvZGU+LiAKKzwvZGw+CisKKyAgIDxwPlNvbWUgaG9zdCBzeXN0ZW1zIGRpc3Rpbmd1aXNoIGJldHdlZW4gJmxkcXVvO2JpbmFyeSZyZHF1bzsgYW5kICZsZHF1bzt0ZXh0JnJkcXVvOyBmaWxlcy4gCitTdWNoIHN5c3RlbXMgbWF5IHBlcmZvcm0gZGF0YSB0cmFuc2Zvcm1hdGlvbnMgb24gZGF0YSB3cml0dGVuIHRvLCBvcgorcmVhZCBmcm9tLCBmaWxlcyBvcGVuZWQgYXMgJmxkcXVvO3RleHQmcmRxdW87LiAKK0lmIHlvdXIgc3lzdGVtIGlzIG9uZSBvZiB0aGVzZSwgdGhlbiB5b3UgY2FuIGFwcGVuZCBhIGA8Y29kZT5iPC9jb2RlPicgdG8gYW55CitvZiB0aGUgdGhyZWUgbW9kZXMgYWJvdmUsIHRvIHNwZWNpZnkgdGhhdCB5b3UgYXJlIG9wZW5pbmcgdGhlIGZpbGUgYXMKK2EgYmluYXJ5IGZpbGUgKHRoZSBkZWZhdWx0IGlzIHRvIG9wZW4gdGhlIGZpbGUgYXMgYSB0ZXh0IGZpbGUpLgorCisgICA8cD5gPGNvZGU+cmI8L2NvZGU+JywgdGhlbiwgbWVhbnMgJmxkcXVvO3JlYWQgYmluYXJ5JnJkcXVvOzsgYDxjb2RlPndiPC9jb2RlPicsICZsZHF1bzt3cml0ZSBiaW5hcnkmcmRxdW87OyBhbmQKK2A8Y29kZT5hYjwvY29kZT4nLCAmbGRxdW87YXBwZW5kIGJpbmFyeSZyZHF1bzsuCisKKyAgIDxwPlRvIG1ha2UgQyBwcm9ncmFtcyBtb3JlIHBvcnRhYmxlLCB0aGUgYDxjb2RlPmI8L2NvZGU+JyBpcyBhY2NlcHRlZCBvbiBhbGwKK3N5c3RlbXMsIHdoZXRoZXIgb3Igbm90IGl0IG1ha2VzIGEgZGlmZmVyZW5jZS4KKworICAgPHA+RmluYWxseSwgeW91IG1pZ2h0IG5lZWQgdG8gYm90aCByZWFkIGFuZCB3cml0ZSBmcm9tIHRoZSBzYW1lIGZpbGUuIAorWW91IGNhbiBhbHNvIGFwcGVuZCBhIGA8Y29kZT4rPC9jb2RlPicgdG8gYW55IG9mIHRoZSB0aHJlZSBtb2RlcywgdG8gcGVybWl0Cit0aGlzLiAgKElmIHlvdSB3YW50IHRvIGFwcGVuZCBib3RoIGA8Y29kZT5iPC9jb2RlPicgYW5kIGA8Y29kZT4rPC9jb2RlPicsIHlvdSBjYW4gZG8gaXQKK2luIGVpdGhlciBvcmRlcjogZm9yIGV4YW1wbGUsIDxjb2RlPiJyYisiPC9jb2RlPiBtZWFucyB0aGUgc2FtZSB0aGluZyBhcworPGNvZGU+InIrYiI8L2NvZGU+IHdoZW4gdXNlZCBhcyBhIG1vZGUgc3RyaW5nLikKKworICAgPHA+VXNlIDxjb2RlPiJyKyI8L2NvZGU+IChvciA8Y29kZT4icmIrIjwvY29kZT4pIHRvIHBlcm1pdCByZWFkaW5nIGFuZCB3cml0aW5nIGFueXdoZXJlIGluCithbiBleGlzdGluZyBmaWxlLCB3aXRob3V0IGRpc2NhcmRpbmcgYW55IGRhdGE7IDxjb2RlPiJ3KyI8L2NvZGU+IChvciA8Y29kZT4id2IrIjwvY29kZT4pCit0byBjcmVhdGUgYSBuZXcgZmlsZSAob3IgYmVnaW4gYnkgZGlzY2FyZGluZyBhbGwgZGF0YSBmcm9tIGFuIG9sZCBvbmUpCit0aGF0IHBlcm1pdHMgcmVhZGluZyBhbmQgd3JpdGluZyBhbnl3aGVyZSBpbiBpdDsgYW5kIDxjb2RlPiJhKyI8L2NvZGU+IChvcgorPGNvZGU+ImFiKyI8L2NvZGU+KSB0byBwZXJtaXQgcmVhZGluZyBhbnl3aGVyZSBpbiBhbiBleGlzdGluZyBmaWxlLCBidXQgd3JpdGluZworb25seSBhdCB0aGUgZW5kLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5mb3BlbjwvY29kZT4gcmV0dXJucyBhIGZpbGUgcG9pbnRlciB3aGljaCB5b3UgY2FuIHVzZSBmb3Igb3RoZXIgZmlsZQorb3BlcmF0aW9ucywgdW5sZXNzIHRoZSBmaWxlIHlvdSByZXF1ZXN0ZWQgY291bGQgbm90IGJlIG9wZW5lZDsgaW4gdGhhdAorc2l0dWF0aW9uLCB0aGUgcmVzdWx0IGlzIDxjb2RlPk5VTEw8L2NvZGU+LiAgSWYgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZSB3YXMgYW4KK2ludmFsaWQgc3RyaW5nIGF0IDx2YXI+bW9kZTwvdmFyPiwgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byA8Y29kZT5FSU5WQUw8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Zm9wZW48L2NvZGU+IGlzIHJlcXVpcmVkIGJ5IEFOU0kgQy4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPm9wZW48L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mb3BlbmNvb2tpZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZm9wZW5jb29raWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTkyYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZm9wZW5jb29raWUuaHRtbApAQCAtMCwwICsxLDExNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Zm9wZW5jb29raWUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZvcGVuLmh0bWwjZm9wZW4iIHRpdGxlPSJmb3BlbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZwdXJnZS5odG1sI2ZwdXJnZSIgdGl0bGU9ImZwdXJnZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZm9wZW5jb29raWUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZnB1cmdlLmh0bWwjZnB1cmdlIj5mcHVyZ2U8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmb3Blbi5odG1sI2ZvcGVuIj5mb3BlbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xOCA8Y29kZT5mb3BlbmNvb2tpZTwvY29kZT4mbWRhc2g7b3BlbiBhIHN0cmVhbSB3aXRoIGN1c3RvbSBjYWxsYmFja3M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mb3BlbmNvb2tpZS0xODAiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBGSUxFICpmb3BlbmNvb2tpZShjb25zdCB2b2lkICo8dmFyPmNvb2tpZTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5tb2RlPC92YXI+LAorICAgICAgICAgY29va2llX2lvX2Z1bmN0aW9uc190IDx2YXI+ZnVuY3Rpb25zPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5mb3BlbmNvb2tpZTwvY29kZT4gY3JlYXRlcyBhIDxjb2RlPkZJTEU8L2NvZGU+IHN0cmVhbSB3aGVyZSBJL08gaXMgcGVyZm9ybWVkIHVzaW5nCitjdXN0b20gY2FsbGJhY2tzLiAgVGhlIGNhbGxiYWNrcyBhcmUgcmVnaXN0ZXJlZCB2aWEgdGhlIHN0cnVjdHVyZToKKworICAgPHA+dHlwZWRlZiBzc2l6ZV90ICgqY29va2llX3JlYWRfZnVuY3Rpb25fdCkodm9pZCAqX2Nvb2tpZSwgY2hhciAqX2J1ZiwKK3NpemVfdCBfbik7Cit0eXBlZGVmIHNzaXplX3QgKCpjb29raWVfd3JpdGVfZnVuY3Rpb25fdCkodm9pZCAqX2Nvb2tpZSwKK2NvbnN0IGNoYXIgKl9idWYsIHNpemVfdCBfbik7Cit0eXBlZGVmIGludCAoKmNvb2tpZV9zZWVrX2Z1bmN0aW9uX3QpKHZvaWQgKl9jb29raWUsIG9mZl90ICpfb2ZmLAoraW50IF93aGVuY2UpOwordHlwZWRlZiBpbnQgKCpjb29raWVfY2xvc2VfZnVuY3Rpb25fdCkodm9pZCAqX2Nvb2tpZSk7CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAJdHlwZWRlZiBzdHJ1Y3QKKyAgICAgCXsKKyAgICAgCQljb29raWVfcmVhZF9mdW5jdGlvbl90CSpyZWFkOworICAgICAJCWNvb2tpZV93cml0ZV9mdW5jdGlvbl90ICp3cml0ZTsKKyAgICAgCQljb29raWVfc2Vla19mdW5jdGlvbl90CSpzZWVrOworICAgICAJCWNvb2tpZV9jbG9zZV9mdW5jdGlvbl90ICpjbG9zZTsKKyAgICAgCX0gY29va2llX2lvX2Z1bmN0aW9uc190OworPC9wcmU+CisgICA8cD5UaGUgc3RyZWFtIGlzIG9wZW5lZCB3aXRoIDx2YXI+bW9kZTwvdmFyPiB0cmVhdGVkIGFzIGluIDxjb2RlPmZvcGVuPC9jb2RlPi4gIFRoZQorY2FsbGJhY2tzIDx2YXI+ZnVuY3Rpb25zLnJlYWQ8L3Zhcj4gYW5kIDx2YXI+ZnVuY3Rpb25zLndyaXRlPC92YXI+IG1heSBvbmx5IGJlIE5VTEwKK3doZW4gPHZhcj5tb2RlPC92YXI+IGRvZXMgbm90IHJlcXVpcmUgdGhlbS4KKworICAgPHA+PHZhcj5mdW5jdGlvbnMucmVhZDwvdmFyPiBzaG91bGQgcmV0dXJuIC0xIG9uIGZhaWx1cmUsIG9yIGVsc2UgdGhlIG51bWJlciBvZgorYnl0ZXMgcmVhZCAoMCBvbiBFT0YpLiAgSXQgaXMgc2ltaWxhciB0byA8Y29kZT5yZWFkPC9jb2RlPiwgZXhjZXB0IHRoYXQKKzx2YXI+Y29va2llPC92YXI+IHdpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKworICAgPHA+PHZhcj5mdW5jdGlvbnMud3JpdGU8L3Zhcj4gc2hvdWxkIHJldHVybiAtMSBvbiBmYWlsdXJlLCBvciBlbHNlIHRoZSBudW1iZXIgb2YKK2J5dGVzIHdyaXR0ZW4uICBJdCBpcyBzaW1pbGFyIHRvIDxjb2RlPndyaXRlPC9jb2RlPiwgZXhjZXB0IHRoYXQgPHZhcj5jb29raWU8L3Zhcj4KK3dpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KKworICAgPHA+PHZhcj5mdW5jdGlvbnMuc2VlazwvdmFyPiBzaG91bGQgcmV0dXJuIC0xIG9uIGZhaWx1cmUsIGFuZCAwIG9uIHN1Y2Nlc3MsIHdpdGgKKzx2YXI+X29mZjwvdmFyPiBzZXQgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbi4gIEl0IGlzIGEgY3Jvc3MgYmV0d2VlbgorPGNvZGU+bHNlZWs8L2NvZGU+IGFuZCA8Y29kZT5mc2VlazwvY29kZT4sIHdpdGggdGhlIDx2YXI+X3doZW5jZTwvdmFyPiBhcmd1bWVudCBpbnRlcnByZXRlZCBpbgordGhlIHNhbWUgbWFubmVyLiAgQSBOVUxMIDx2YXI+ZnVuY3Rpb25zLnNlZWs8L3Zhcj4gbWFrZXMgdGhlIHN0cmVhbSBiZWhhdmUKK3NpbWlsYXJseSB0byBhIHBpcGUgaW4gcmVsYXRpb24gdG8gc3RkaW8gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZQorcG9zaXRpb25pbmcuCisKKyAgIDxwPjx2YXI+ZnVuY3Rpb25zLmNsb3NlPC92YXI+IHNob3VsZCByZXR1cm4gLTEgb24gZmFpbHVyZSwgb3IgMCBvbiBzdWNjZXNzLiAgSXQKK2lzIHNpbWlsYXIgdG8gPGNvZGU+Y2xvc2U8L2NvZGU+LCBleGNlcHQgdGhhdCA8dmFyPmNvb2tpZTwvdmFyPiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUKK2ZpcnN0IGFyZ3VtZW50LiAgQSBOVUxMIDx2YXI+ZnVuY3Rpb25zLmNsb3NlPC92YXI+IG1lcmVseSBmbHVzaGVzIGFsbCBkYXRhCit0aGVuIGxldHMgPGNvZGU+ZmNsb3NlPC9jb2RlPiBzdWNjZWVkLiAgQSBmYWlsZWQgY2xvc2Ugd2lsbCBzdGlsbCBpbnZhbGlkYXRlCit0aGUgc3RyZWFtLgorCisgICA8cD5SZWFkIGFuZCB3cml0ZSBJL08gZnVuY3Rpb25zIGFyZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZworYnVmZmVyIG9uIGZ1bGx5IGJ1ZmZlcmVkIG9yIGxpbmUgYnVmZmVyZWQgc3RyZWFtcyBieSBjYWxsaW5nCis8Y29kZT5zZXR2YnVmPC9jb2RlPi4gIFRoZXkgYXJlIGFsc28gbm90IHJlcXVpcmVkIHRvIGNvbXBsZXRlbHkgZmlsbCBvciBlbXB0eQordGhlIGJ1ZmZlci4gIFRoZXkgYXJlIG5vdCwgaG93ZXZlciwgYWxsb3dlZCB0byBjaGFuZ2Ugc3RyZWFtcyBmcm9tCit1bmJ1ZmZlcmVkIHRvIGJ1ZmZlcmVkIG9yIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIGxpbmUgYnVmZmVyaW5nCitmbGFnLiAgVGhleSBtdXN0IGFsc28gYmUgcHJlcGFyZWQgdG8gaGF2ZSByZWFkIG9yIHdyaXRlIGNhbGxzIG9jY3VyIG9uCitidWZmZXJzIG90aGVyIHRoYW4gdGhlIG9uZSBtb3N0IHJlY2VudGx5IHNwZWNpZmllZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvcGVuIEZJTEUgcG9pbnRlciBvbiBzdWNjZXNzLiAgT24gZXJyb3IsCis8Y29kZT5OVUxMPC9jb2RlPiBpcyByZXR1cm5lZCwgYW5kIDxjb2RlPmVycm5vPC9jb2RlPiB3aWxsIGJlIHNldCB0byBFSU5WQUwgaWYgYQorZnVuY3Rpb24gcG9pbnRlciBpcyBtaXNzaW5nIG9yIDx2YXI+bW9kZTwvdmFyPiBpcyBpbnZhbGlkLCBFTk9NRU0gaWYgdGhlCitzdHJlYW0gY2Fubm90IGJlIGNyZWF0ZWQsIG9yIEVNRklMRSBpZiB0b28gbWFueSBzdHJlYW1zIGFyZSBhbHJlYWR5CitvcGVuLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBpcyBhIG5ld2xpYiBleHRlbnNpb24sIGNvcHlpbmcgdGhlIHByb3RvdHlwZSBmcm9tIExpbnV4LiAKK0l0IGlzIG5vdCBwb3J0YWJsZS4gIFNlZSBhbHNvIHRoZSA8Y29kZT5mdW5vcGVuPC9jb2RlPiBpbnRlcmZhY2UgZnJvbSBCU0QuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPnNicms8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZwdXJnZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnB1cmdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ZjM3NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZwdXJnZS5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZwdXJnZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZm9wZW5jb29raWUuaHRtbCNmb3BlbmNvb2tpZSIgdGl0bGU9ImZvcGVuY29va2llIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZnB1dGMuaHRtbCNmcHV0YyIgdGl0bGU9ImZwdXRjIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmcHVyZ2UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZnB1dGMuaHRtbCNmcHV0YyI+ZnB1dGM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmb3BlbmNvb2tpZS5odG1sI2ZvcGVuY29va2llIj5mb3BlbmNvb2tpZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4xOSA8Y29kZT5mcHVyZ2U8L2NvZGU+Jm1kYXNoO2Rpc2NhcmQgcGVuZGluZyBmaWxlIEkvTzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZwdXJnZS0xODEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZwdXJnZV8wMDVmci0xODIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zl8wMDVmZnB1cmdlLTE4MyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBmcHVyZ2UoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICBpbnQgX2ZwdXJnZV9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgICNpbmNsdWRlICZsdDtzdGRpb19leHQuaCZndDsKKyAgICAgdm9pZCAgX19mcHVyZ2UoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPmZwdXJnZTwvY29kZT4gdG8gY2xlYXIgYWxsIGJ1ZmZlcnMgb2YgdGhlIGdpdmVuIHN0cmVhbS4gIEZvciBvdXRwdXQKK3N0cmVhbXMsIHRoaXMgZGlzY2FyZHMgZGF0YSBub3QgeWV0IHdyaXR0ZW4gdG8gZGlzay4gIEZvciBpbnB1dCBzdHJlYW1zLAordGhpcyBkaXNjYXJkcyBhbnkgZGF0YSBmcm9tIDxjb2RlPnVuZ2V0YzwvY29kZT4gYW5kIGFueSBkYXRhIHJldHJpZXZlZCBmcm9tIGRpc2sKK2J1dCBub3QgeWV0IHJlYWQgdmlhIDxjb2RlPmdldGM8L2NvZGU+LiAgVGhpcyBpcyBtb3JlIHNldmVyZSB0aGFuIDxjb2RlPmZmbHVzaDwvY29kZT4sCithbmQgZ2VuZXJhbGx5IGlzIG9ubHkgbmVlZGVkIHdoZW4gbWFudWFsbHkgYWx0ZXJpbmcgdGhlIHVuZGVybHlpbmcgZmlsZQorZGVzY3JpcHRvciBvZiBhIHN0cmVhbS4KKworICAgPHA+PGNvZGU+X19mcHVyZ2U8L2NvZGU+IGJlaGF2ZXMgZXhhY3RseSBsaWtlIDxjb2RlPmZwdXJnZTwvY29kZT4gYnV0IGRvZXMgbm90IHJldHVybiBhIHZhbHVlLgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl9mcHVyZ2VfcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbiwgd2hlcmUgdGhlCitleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLCBhbmQKKzx2YXI+ZnA8L3Zhcj4gbXVzdCBub3QgYmUgTlVMTC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+ZnB1cmdlPC9jb2RlPiByZXR1cm5zIDxjb2RlPjA8L2NvZGU+IHVubGVzcyA8dmFyPmZwPC92YXI+IGlzIG5vdCB2YWxpZCwgaW4gd2hpY2ggY2FzZSBpdAorcmV0dXJucyA8Y29kZT5FT0Y8L2NvZGU+IGFuZCBzZXRzIDxjb2RlPmVycm5vPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBvcnRhYmxlIHRvIGFueSBzdGFuZGFyZC4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnB1dGMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZwdXRjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhZTU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZwdXRjLmh0bWwKQEAgLTAsMCArMSw3NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZnB1dGMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZwdXJnZS5odG1sI2ZwdXJnZSIgdGl0bGU9ImZwdXJnZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZwdXRzLmh0bWwjZnB1dHMiIHRpdGxlPSJmcHV0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZnB1dGMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZnB1dHMuaHRtbCNmcHV0cyI+ZnB1dHM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmcHVyZ2UuaHRtbCNmcHVyZ2UiPmZwdXJnZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4yMCA8Y29kZT5mcHV0YzwvY29kZT4mbWRhc2g7d3JpdGUgYSBjaGFyYWN0ZXIgb24gYSBzdHJlYW0gb3IgZmlsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZwdXRjLTE4NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZnB1dGNfMDA1ZnItMTg1Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGZwdXRjKGludCA8dmFyPmNoPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCisgICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgX2ZwdXRjX3Ioc3RydWN0IF9yZW50ICo8dmFyPnB0cjwvdmFyPiwgaW50IDx2YXI+Y2g8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmZwdXRjPC9jb2RlPiBjb252ZXJ0cyB0aGUgYXJndW1lbnQgPHZhcj5jaDwvdmFyPiBmcm9tIGFuIDxjb2RlPmludDwvY29kZT4gdG8gYW4KKzxjb2RlPnVuc2lnbmVkIGNoYXI8L2NvZGU+LCB0aGVuIHdyaXRlcyBpdCB0byB0aGUgZmlsZSBvciBzdHJlYW0gaWRlbnRpZmllZCBieQorPHZhcj5mcDwvdmFyPi4KKworICAgPHA+SWYgdGhlIGZpbGUgd2FzIG9wZW5lZCB3aXRoIGFwcGVuZCBtb2RlIChvciBpZiB0aGUgc3RyZWFtIGNhbm5vdAorc3VwcG9ydCBwb3NpdGlvbmluZyksIHRoZW4gdGhlIG5ldyBjaGFyYWN0ZXIgZ29lcyBhdCB0aGUgZW5kIG9mIHRoZQorZmlsZSBvciBzdHJlYW0uICBPdGhlcndpc2UsIHRoZSBuZXcgY2hhcmFjdGVyIGlzIHdyaXR0ZW4gYXQgdGhlCitjdXJyZW50IHZhbHVlIG9mIHRoZSBwb3NpdGlvbiBpbmRpY2F0b3IsIGFuZCB0aGUgcG9zaXRpb24gaW5kaWNhdG9yCitvYWR2YW5jZXMgYnkgb25lLgorCisgICA8cD5Gb3IgYSBtYWNybyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24sIHNlZSA8Y29kZT5wdXRjPC9jb2RlPi4KKworICAgPHA+VGhlIDxjb2RlPl9mcHV0Y19yPC9jb2RlPiBmdW5jdGlvbiBpcyBzaW1wbHkgYSByZWVudHJhbnQgdmVyc2lvbiBvZiA8Y29kZT5mcHV0YzwvY29kZT4KK3RoYXQgdGFrZXMgYW4gYWRkaXRpb25hbCByZWVudHJhbnQgc3RydWN0dXJlIGFyZ3VtZW50OiA8dmFyPnB0cjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorSWYgc3VjY2Vzc2Z1bCwgPGNvZGU+ZnB1dGM8L2NvZGU+IHJldHVybnMgaXRzIGFyZ3VtZW50IDx2YXI+Y2g8L3Zhcj4uICBJZiBhbiBlcnJvcgoraW50ZXJ2ZW5lcywgdGhlIHJlc3VsdCBpcyA8Y29kZT5FT0Y8L2NvZGU+LiAgWW91IGNhbiB1c2UgYDxjb2RlPmZlcnJvcig8L2NvZGU+PHZhcj5mcDwvdmFyPjxjb2RlPik8L2NvZGU+JyB0bworcXVlcnkgZm9yIGVycm9ycy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmZwdXRjPC9jb2RlPiBpcyByZXF1aXJlZCBieSBBTlNJIEMuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mcHV0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnB1dHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY0MzhlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnB1dHMuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mcHV0cyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZnB1dGMuaHRtbCNmcHV0YyIgdGl0bGU9ImZwdXRjIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZnB1dHdjLmh0bWwjZnB1dHdjIiB0aXRsZT0iZnB1dHdjIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmcHV0cyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmcHV0d2MuaHRtbCNmcHV0d2MiPmZwdXR3YzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZwdXRjLmh0bWwjZnB1dGMiPmZwdXRjPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjIxIDxjb2RlPmZwdXRzPC9jb2RlPiZtZGFzaDt3cml0ZSBhIGNoYXJhY3RlciBzdHJpbmcgaW4gYSBmaWxlIG9yIHN0cmVhbTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZwdXRzLTE4NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZnB1dHNfMDA1ZnItMTg3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGZwdXRzKGNvbnN0IGNoYXIgKjx2YXI+czwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IF9mcHV0c19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPnM8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmZwdXRzPC9jb2RlPiB3cml0ZXMgdGhlIHN0cmluZyBhdCA8dmFyPnM8L3Zhcj4gKGJ1dCB3aXRob3V0IHRoZSB0cmFpbGluZyBudWxsKQordG8gdGhlIGZpbGUgb3Igc3RyZWFtIGlkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPi4KKworICAgPHA+PGNvZGU+X2ZwdXRzX3I8L2NvZGU+IGlzIHNpbXBseSB0aGUgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+ZnB1dHM8L2NvZGU+IHRoYXQgdGFrZXMKK2FuIGFkZGl0aW9uYWwgcmVlbnRyYW50IHN0cnVjdCBwb2ludGVyIGFyZ3VtZW50OiA8dmFyPnB0cjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorSWYgc3VjY2Vzc2Z1bCwgdGhlIHJlc3VsdCBpcyA8Y29kZT4wPC9jb2RlPjsgb3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIDxjb2RlPkVPRjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+ZnB1dHM8L2NvZGU+LCBidXQgZG9lcyBub3Qgc3BlY2lmeSB0aGF0IHRoZSByZXN1bHQgb24KK3N1Y2Nlc3MgbXVzdCBiZSA8Y29kZT4wPC9jb2RlPjsgYW55IG5vbi1uZWdhdGl2ZSB2YWx1ZSBpcyBwZXJtaXR0ZWQuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mcHV0d2MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZwdXR3Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOTQ4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mcHV0d2MuaHRtbApAQCAtMCwwICsxLDg2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mcHV0d2MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZwdXRzLmh0bWwjZnB1dHMiIHRpdGxlPSJmcHV0cyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZwdXR3cy5odG1sI2ZwdXR3cyIgdGl0bGU9ImZwdXR3cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZnB1dHdjIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZwdXR3cy5odG1sI2ZwdXR3cyI+ZnB1dHdzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZnB1dHMuaHRtbCNmcHV0cyI+ZnB1dHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMjIgPGNvZGU+ZnB1dHdjPC9jb2RlPiwgPGNvZGU+cHV0d2M8L2NvZGU+Jm1kYXNoO3dyaXRlIGEgd2lkZSBjaGFyYWN0ZXIgb24gYSBzdHJlYW0gb3IgZmlsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZwdXR3Yy0xODgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZwdXR3Y18wMDVmci0xODkiPjwvYT48YSBuYW1lPSJpbmRleC1wdXR3Yy0xOTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnB1dHdjXzAwNWZyLTE5MSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3aW50X3QgZnB1dHdjKHdjaGFyX3QgPHZhcj53YzwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdpbnRfdCBfZnB1dHdjX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIHdjaGFyX3QgPHZhcj53YzwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdpbnRfdCBwdXR3Yyh3Y2hhcl90IDx2YXI+d2M8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3aW50X3QgX3B1dHdjX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIHdjaGFyX3QgPHZhcj53YzwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+ZnB1dHdjPC9jb2RlPiB3cml0ZXMgdGhlIHdpZGUgY2hhcmFjdGVyIGFyZ3VtZW50IDx2YXI+d2M8L3Zhcj4gdG8gdGhlIGZpbGUgb3IKK3N0cmVhbSBpZGVudGlmaWVkIGJ5IDx2YXI+ZnA8L3Zhcj4uCisKKyAgIDxwPklmIHRoZSBmaWxlIHdhcyBvcGVuZWQgd2l0aCBhcHBlbmQgbW9kZSAob3IgaWYgdGhlIHN0cmVhbSBjYW5ub3QKK3N1cHBvcnQgcG9zaXRpb25pbmcpLCB0aGVuIHRoZSBuZXcgd2lkZSBjaGFyYWN0ZXIgZ29lcyBhdCB0aGUgZW5kIG9mIHRoZQorZmlsZSBvciBzdHJlYW0uICBPdGhlcndpc2UsIHRoZSBuZXcgd2lkZSBjaGFyYWN0ZXIgaXMgd3JpdHRlbiBhdCB0aGUKK2N1cnJlbnQgdmFsdWUgb2YgdGhlIHBvc2l0aW9uIGluZGljYXRvciwgYW5kIHRoZSBwb3NpdGlvbiBpbmRpY2F0b3IKK29hZHZhbmNlcyBieSBvbmUuCisKKyAgIDxwPlRoZSA8Y29kZT5wdXR3YzwvY29kZT4gZnVuY3Rpb24gb3IgbWFjcm8gZnVuY3Rpb25zIGlkZW50aWNhbGx5IHRvIDxjb2RlPmZwdXR3YzwvY29kZT4uICBJdAorbWF5IGJlIGltcGxlbWVudGVkIGFzIGEgbWFjcm8sIGFuZCBtYXkgZXZhbHVhdGUgaXRzIGFyZ3VtZW50IG1vcmUgdGhhbgorb25jZS4gVGhlcmUgaXMgbm8gcmVhc29uIGV2ZXIgdG8gdXNlIGl0LgorCisgICA8cD5UaGUgPGNvZGU+X2ZwdXR3Y19yPC9jb2RlPiBhbmQgPGNvZGU+X3B1dHdjX3I8L2NvZGU+IGZ1bmN0aW9ucyBhcmUgc2ltcGx5IHJlZW50cmFudCB2ZXJzaW9ucworb2YgPGNvZGU+ZnB1dHdjPC9jb2RlPiBhbmQgPGNvZGU+cHV0d2M8L2NvZGU+IHRoYXQgdGFrZSBhbiBhZGRpdGlvbmFsIHJlZW50cmFudCBzdHJ1Y3R1cmUKK2FyZ3VtZW50OiA8dmFyPnB0cjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorSWYgc3VjY2Vzc2Z1bCwgPGNvZGU+ZnB1dHdjPC9jb2RlPiBhbmQgPGNvZGU+cHV0d2M8L2NvZGU+IHJldHVybiB0aGVpciBhcmd1bWVudCA8dmFyPndjPC92YXI+LiAKK0lmIGFuIGVycm9yIGludGVydmVuZXMsIHRoZSByZXN1bHQgaXMgPGNvZGU+RU9GPC9jb2RlPi4gIFlvdSBjYW4gdXNlCitgPGNvZGU+ZmVycm9yKDwvY29kZT48dmFyPmZwPC92YXI+PGNvZGU+KTwvY29kZT4nIHRvIHF1ZXJ5IGZvciBlcnJvcnMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitDOTksIFBPU0lYLjEtMjAwMQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZwdXR3cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnB1dHdzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmYzQxOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZwdXR3cy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZwdXR3cyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZnB1dHdjLmh0bWwjZnB1dHdjIiB0aXRsZT0iZnB1dHdjIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZnJlYWQuaHRtbCNmcmVhZCIgdGl0bGU9ImZyZWFkIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmcHV0d3MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZnJlYWQuaHRtbCNmcmVhZCI+ZnJlYWQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmcHV0d2MuaHRtbCNmcHV0d2MiPmZwdXR3YzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4yMyA8Y29kZT5mcHV0d3M8L2NvZGU+Jm1kYXNoO3dyaXRlIGEgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGluIGEgZmlsZSBvciBzdHJlYW08L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mcHV0d3MtMTkyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmcHV0d3NfMDA1ZnItMTkzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90ICo8dmFyPndzPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCisgICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICBpbnQgX2ZwdXR3c19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBjb25zdCB3Y2hhcl90ICo8dmFyPndzPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5mcHV0d3M8L2NvZGU+IHdyaXRlcyB0aGUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGF0IDx2YXI+d3M8L3Zhcj4gKGJ1dCB3aXRob3V0IHRoZQordHJhaWxpbmcgbnVsbCkgdG8gdGhlIGZpbGUgb3Igc3RyZWFtIGlkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPi4KKworICAgPHA+PGNvZGU+X2ZwdXR3c19yPC9jb2RlPiBpcyBzaW1wbHkgdGhlIHJlZW50cmFudCB2ZXJzaW9uIG9mIDxjb2RlPmZwdXR3czwvY29kZT4gdGhhdCB0YWtlcworYW4gYWRkaXRpb25hbCByZWVudHJhbnQgc3RydWN0IHBvaW50ZXIgYXJndW1lbnQ6IDx2YXI+cHRyPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitJZiBzdWNjZXNzZnVsLCB0aGUgcmVzdWx0IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXI7IG90aGVyd2lzZSwgdGhlIHJlc3VsdAoraXMgPGNvZGU+LTE8L2NvZGU+IHRvIGluZGljYXRlIGFuIGVycm9yLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQzk5LCBQT1NJWC4xLTIwMDEKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mcmVhZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnJlYWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDFhMzk0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnJlYWQuaHRtbApAQCAtMCwwICsxLDc0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mcmVhZCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZnB1dHdzLmh0bWwjZnB1dHdzIiB0aXRsZT0iZnB1dHdzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZnJlb3Blbi5odG1sI2ZyZW9wZW4iIHRpdGxlPSJmcmVvcGVuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmcmVhZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmcmVvcGVuLmh0bWwjZnJlb3BlbiI+ZnJlb3BlbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZwdXR3cy5odG1sI2ZwdXR3cyI+ZnB1dHdzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjI0IDxjb2RlPmZyZWFkPC9jb2RlPiZtZGFzaDtyZWFkIGFycmF5IGVsZW1lbnRzIGZyb20gYSBmaWxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZnJlYWQtMTk0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmcmVhZF8wMDVmci0xOTUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBzaXplX3QgZnJlYWQodm9pZCAqPHZhcj5idWY8L3Zhcj4sIHNpemVfdCA8dmFyPnNpemU8L3Zhcj4sIHNpemVfdCA8dmFyPmNvdW50PC92YXI+LAorICAgICAgICAgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgc2l6ZV90IF9mcmVhZF9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCB2b2lkICo8dmFyPmJ1ZjwvdmFyPiwKKyAgICAgICAgIHNpemVfdCA8dmFyPnNpemU8L3Zhcj4sIHNpemVfdCA8dmFyPmNvdW50PC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5mcmVhZDwvY29kZT4gYXR0ZW1wdHMgdG8gY29weSwgZnJvbSB0aGUgZmlsZSBvciBzdHJlYW0gaWRlbnRpZmllZCBieQorPHZhcj5mcDwvdmFyPiwgPHZhcj5jb3VudDwvdmFyPiBlbGVtZW50cyAoZWFjaCBvZiBzaXplIDx2YXI+c2l6ZTwvdmFyPikgaW50byBtZW1vcnksCitzdGFydGluZyBhdCA8dmFyPmJ1ZjwvdmFyPi4gICA8Y29kZT5mcmVhZDwvY29kZT4gbWF5IGNvcHkgZmV3ZXIgZWxlbWVudHMgdGhhbgorPHZhcj5jb3VudDwvdmFyPiBpZiBhbiBlcnJvciwgb3IgZW5kIG9mIGZpbGUsIGludGVydmVuZXMuCisKKyAgIDxwPjxjb2RlPmZyZWFkPC9jb2RlPiBhbHNvIGFkdmFuY2VzIHRoZSBmaWxlIHBvc2l0aW9uIGluZGljYXRvciAoaWYgYW55KSBmb3IKKzx2YXI+ZnA8L3Zhcj4gYnkgdGhlIG51bWJlciBvZiA8ZW0+Y2hhcmFjdGVyczwvZW0+IGFjdHVhbGx5IHJlYWQuCisKKyAgIDxwPjxjb2RlPl9mcmVhZF9yPC9jb2RlPiBpcyBzaW1wbHkgdGhlIHJlZW50cmFudCB2ZXJzaW9uIG9mIDxjb2RlPmZyZWFkPC9jb2RlPiB0aGF0Cit0YWtlcyBhbiBhZGRpdGlvbmFsIHJlZW50cmFudCBzdHJ1Y3R1cmUgcG9pbnRlciBhcmd1bWVudDogPHZhcj5wdHI8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXN1bHQgb2YgPGNvZGU+ZnJlYWQ8L2NvZGU+IGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaXQgc3VjY2VlZGVkIGluCityZWFkaW5nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPmZyZWFkPC9jb2RlPi4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZyZW9wZW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZyZW9wZW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJkNjQzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnJlb3Blbi5odG1sCkBAIC0wLDAgKzEsNzcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZyZW9wZW4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZyZWFkLmh0bWwjZnJlYWQiIHRpdGxlPSJmcmVhZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZzZWVrLmh0bWwjZnNlZWsiIHRpdGxlPSJmc2VlayI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZnJlb3BlbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmc2Vlay5odG1sI2ZzZWVrIj5mc2VlazwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZyZWFkLmh0bWwjZnJlYWQiPmZyZWFkPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjI1IDxjb2RlPmZyZW9wZW48L2NvZGU+Jm1kYXNoO29wZW4gYSBmaWxlIHVzaW5nIGFuIGV4aXN0aW5nIGZpbGUgZGVzY3JpcHRvcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZyZW9wZW4tMTk2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmcmVvcGVuXzAwNWZyLTE5NyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIEZJTEUgKmZyZW9wZW4oY29uc3QgY2hhciAqPHZhcj5maWxlPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPm1vZGU8L3Zhcj4sCisgICAgICAgICBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgRklMRSAqX2ZyZW9wZW5fcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5maWxlPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5tb2RlPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitVc2UgdGhpcyB2YXJpYW50IG9mIDxjb2RlPmZvcGVuPC9jb2RlPiBpZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGEgcGFydGljdWxhciBmaWxlCitkZXNjcmlwdG9yIDx2YXI+ZnA8L3Zhcj4gKG5vdGFibHkgPGNvZGU+c3RkaW48L2NvZGU+LCA8Y29kZT5zdGRvdXQ8L2NvZGU+LCBvciA8Y29kZT5zdGRlcnI8L2NvZGU+KSBmb3IKK3RoZSBmaWxlLgorCisgICA8cD5JZiA8dmFyPmZwPC92YXI+IHdhcyBhc3NvY2lhdGVkIHdpdGggYW5vdGhlciBmaWxlIG9yIHN0cmVhbSwgPGNvZGU+ZnJlb3BlbjwvY29kZT4KK2Nsb3NlcyB0aGF0IG90aGVyIGZpbGUgb3Igc3RyZWFtIChidXQgaWdub3JlcyBhbnkgZXJyb3JzIHdoaWxlIGNsb3NpbmcKK2l0KS4KKworICAgPHA+PHZhcj5maWxlPC92YXI+IGFuZCA8dmFyPm1vZGU8L3Zhcj4gYXJlIHVzZWQganVzdCBhcyBpbiA8Y29kZT5mb3BlbjwvY29kZT4uCisKKyAgIDxwPklmIDx2YXI+ZmlsZTwvdmFyPiBpcyA8Y29kZT5OVUxMPC9jb2RlPiwgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGlzIG1vZGlmaWVkIHJhdGhlciB0aGFuCitjbG9zZWQuICBUaGUgZmlsZSBjYW5ub3QgYmUgZ2l2ZW4gYSBtb3JlIHBlcm1pc3NpdmUgYWNjZXNzIG1vZGUgKGZvcgorZXhhbXBsZSwgYSA8dmFyPm1vZGU8L3Zhcj4gb2YgInciIHdpbGwgZmFpbCBvbiBhIHJlYWQtb25seSBmaWxlIGRlc2NyaXB0b3IpLAorYnV0IGNhbiBjaGFuZ2Ugc3RhdHVzIHN1Y2ggYXMgYXBwZW5kIG9yIGJpbmFyeSBtb2RlLiAgSWYgbW9kaWZpY2F0aW9uCitpcyBub3QgcG9zc2libGUsIGZhaWx1cmUgb2NjdXJzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitJZiBzdWNjZXNzZnVsLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIHRoZSBhcmd1bWVudCA8dmFyPmZwPC92YXI+LiAgSWYgdGhlCitmaWxlIGNhbm5vdCBiZSBvcGVuZWQgYXMgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IGlzIDxjb2RlPk5VTEw8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPmZyZW9wZW48L2NvZGU+LgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+b3BlbjwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2ZzZWVrLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mc2Vlay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmE0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mc2Vlay5odG1sCkBAIC0wLDAgKzEsODggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZzZWVrIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmcmVvcGVuLmh0bWwjZnJlb3BlbiIgdGl0bGU9ImZyZW9wZW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmc2V0cG9zLmh0bWwjZnNldHBvcyIgdGl0bGU9ImZzZXRwb3MiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZzZWVrIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZzZXRwb3MuaHRtbCNmc2V0cG9zIj5mc2V0cG9zPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZnJlb3Blbi5odG1sI2ZyZW9wZW4iPmZyZW9wZW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMjYgPGNvZGU+ZnNlZWs8L2NvZGU+LCA8Y29kZT5mc2Vla288L2NvZGU+Jm1kYXNoO3NldCBmaWxlIHBvc2l0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZnNlZWstMTk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnNlZWtvLTE5OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZnNlZWtfMDA1ZnItMjAwIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmc2Vla29fMDA1ZnItMjAxIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGZzZWVrKEZJTEUgKjx2YXI+ZnA8L3Zhcj4sIGxvbmcgPHZhcj5vZmZzZXQ8L3Zhcj4sIGludCA8dmFyPndoZW5jZTwvdmFyPikKKyAgICAgaW50IGZzZWVrbyhGSUxFICo8dmFyPmZwPC92YXI+LCBvZmZfdCA8dmFyPm9mZnNldDwvdmFyPiwgaW50IDx2YXI+d2hlbmNlPC92YXI+KQorICAgICBpbnQgX2ZzZWVrX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4sCisgICAgICAgICBsb25nIDx2YXI+b2Zmc2V0PC92YXI+LCBpbnQgPHZhcj53aGVuY2U8L3Zhcj4pCisgICAgIGludCBfZnNlZWtvX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4sCisgICAgICAgICBvZmZfdCA8dmFyPm9mZnNldDwvdmFyPiwgaW50IDx2YXI+d2hlbmNlPC92YXI+KQorICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK09iamVjdHMgb2YgdHlwZSA8Y29kZT5GSUxFPC9jb2RlPiBjYW4gaGF2ZSBhICZsZHF1bztwb3NpdGlvbiZyZHF1bzsgdGhhdCByZWNvcmRzIGhvdyBtdWNoCitvZiB0aGUgZmlsZSB5b3VyIHByb2dyYW0gaGFzIGFscmVhZHkgcmVhZC4gIE1hbnkgb2YgdGhlIDxjb2RlPnN0ZGlvPC9jb2RlPiBmdW5jdGlvbnMKK2RlcGVuZCBvbiB0aGlzIHBvc2l0aW9uLCBhbmQgbWFueSBjaGFuZ2UgaXQgYXMgYSBzaWRlIGVmZmVjdC4KKworICAgPHA+WW91IGNhbiB1c2UgPGNvZGU+ZnNlZWs8L2NvZGU+Lzxjb2RlPmZzZWVrbzwvY29kZT4gdG8gc2V0IHRoZSBwb3NpdGlvbiBmb3IgdGhlIGZpbGUgaWRlbnRpZmllZCBieQorPHZhcj5mcDwvdmFyPi4gIFRoZSB2YWx1ZSBvZiA8dmFyPm9mZnNldDwvdmFyPiBkZXRlcm1pbmVzIHRoZSBuZXcgcG9zaXRpb24sIGluIG9uZQorb2YgdGhyZWUgd2F5cyBzZWxlY3RlZCBieSB0aGUgdmFsdWUgb2YgPHZhcj53aGVuY2U8L3Zhcj4gKGRlZmluZWQgYXMgbWFjcm9zCitpbiBgPGNvZGU+c3RkaW8uaDwvY29kZT4nKToKKworICAgPHA+PGNvZGU+U0VFS19TRVQ8L2NvZGU+Jm1kYXNoOzx2YXI+b2Zmc2V0PC92YXI+IGlzIHRoZSBhYnNvbHV0ZSBmaWxlIHBvc2l0aW9uIChhbiBvZmZzZXQKK2Zyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSkgZGVzaXJlZC4gIDx2YXI+b2Zmc2V0PC92YXI+IG11c3QgYmUgcG9zaXRpdmUuCisKKyAgIDxwPjxjb2RlPlNFRUtfQ1VSPC9jb2RlPiZtZGFzaDs8dmFyPm9mZnNldDwvdmFyPiBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLiAKKzx2YXI+b2Zmc2V0PC92YXI+IGNhbiBtZWFuaW5nZnVsbHkgYmUgZWl0aGVyIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLgorCisgICA8cD48Y29kZT5TRUVLX0VORDwvY29kZT4mbWRhc2g7PHZhcj5vZmZzZXQ8L3Zhcj4gaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZW5kIG9mIGZpbGUuIAorPHZhcj5vZmZzZXQ8L3Zhcj4gY2FuIG1lYW5pbmdmdWxseSBiZSBlaXRoZXIgcG9zaXRpdmUgKHRvIGluY3JlYXNlIHRoZSBzaXplCitvZiB0aGUgZmlsZSkgb3IgbmVnYXRpdmUuCisKKyAgIDxwPlNlZSA8Y29kZT5mdGVsbDwvY29kZT4vPGNvZGU+ZnRlbGxvPC9jb2RlPiB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+ZnNlZWs8L2NvZGU+Lzxjb2RlPmZzZWVrbzwvY29kZT4gcmV0dXJuIDxjb2RlPjA8L2NvZGU+IHdoZW4gc3VjY2Vzc2Z1bC4gIE9uIGZhaWx1cmUsIHRoZQorcmVzdWx0IGlzIDxjb2RlPkVPRjwvY29kZT4uICBUaGUgcmVhc29uIGZvciBmYWlsdXJlIGlzIGluZGljYXRlZCBpbiA8Y29kZT5lcnJubzwvY29kZT46CitlaXRoZXIgPGNvZGU+RVNQSVBFPC9jb2RlPiAodGhlIHN0cmVhbSBpZGVudGlmaWVkIGJ5IDx2YXI+ZnA8L3Zhcj4gZG9lc24ndCBzdXBwb3J0CityZXBvc2l0aW9uaW5nKSBvciA8Y29kZT5FSU5WQUw8L2NvZGU+IChpbnZhbGlkIGZpbGUgcG9zaXRpb24pLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPmZzZWVrPC9jb2RlPi4KKworICAgPHA+PGNvZGU+ZnNlZWtvPC9jb2RlPiBpcyBkZWZpbmVkIGJ5IHRoZSBTaW5nbGUgVW5peCBzcGVjaWZpY2F0aW9uLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnNldHBvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnNldHBvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGE1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mc2V0cG9zLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZnNldHBvcyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZnNlZWsuaHRtbCNmc2VlayIgdGl0bGU9ImZzZWVrIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZnRlbGwuaHRtbCNmdGVsbCIgdGl0bGU9ImZ0ZWxsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmc2V0cG9zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZ0ZWxsLmh0bWwjZnRlbGwiPmZ0ZWxsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZnNlZWsuaHRtbCNmc2VlayI+ZnNlZWs8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMjcgPGNvZGU+ZnNldHBvczwvY29kZT4mbWRhc2g7cmVzdG9yZSBwb3NpdGlvbiBvZiBhIHN0cmVhbSBvciBmaWxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZnNldHBvcy0yMDIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZzZXRwb3NfMDA1ZnItMjAzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGZzZXRwb3MoRklMRSAqPHZhcj5mcDwvdmFyPiwgY29uc3QgZnBvc190ICo8dmFyPnBvczwvdmFyPik7CisgICAgIGludCBfZnNldHBvc19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+LAorICAgICAgICAgY29uc3QgZnBvc190ICo8dmFyPnBvczwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorT2JqZWN0cyBvZiB0eXBlIDxjb2RlPkZJTEU8L2NvZGU+IGNhbiBoYXZlIGEgJmxkcXVvO3Bvc2l0aW9uJnJkcXVvOyB0aGF0IHJlY29yZHMgaG93IG11Y2gKK29mIHRoZSBmaWxlIHlvdXIgcHJvZ3JhbSBoYXMgYWxyZWFkeSByZWFkLiAgTWFueSBvZiB0aGUgPGNvZGU+c3RkaW88L2NvZGU+IGZ1bmN0aW9ucworZGVwZW5kIG9uIHRoaXMgcG9zaXRpb24sIGFuZCBtYW55IGNoYW5nZSBpdCBhcyBhIHNpZGUgZWZmZWN0LgorCisgICA8cD5Zb3UgY2FuIHVzZSA8Y29kZT5mc2V0cG9zPC9jb2RlPiB0byByZXR1cm4gdGhlIGZpbGUgaWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+IHRvIGEgcHJldmlvdXMKK3Bvc2l0aW9uIDxjb2RlPio8L2NvZGU+PHZhcj5wb3M8L3Zhcj4gKGFmdGVyIGZpcnN0IHJlY29yZGluZyBpdCB3aXRoIDxjb2RlPmZnZXRwb3M8L2NvZGU+KS4KKworICAgPHA+U2VlIDxjb2RlPmZzZWVrPC9jb2RlPiBmb3IgYSBzaW1pbGFyIGZhY2lsaXR5LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5mZ2V0cG9zPC9jb2RlPiByZXR1cm5zIDxjb2RlPjA8L2NvZGU+IHdoZW4gc3VjY2Vzc2Z1bC4gIElmIDxjb2RlPmZnZXRwb3M8L2NvZGU+IGZhaWxzLCB0aGUKK3Jlc3VsdCBpcyA8Y29kZT4xPC9jb2RlPi4gIFRoZSByZWFzb24gZm9yIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGluIDxjb2RlPmVycm5vPC9jb2RlPjoKK2VpdGhlciA8Y29kZT5FU1BJUEU8L2NvZGU+ICh0aGUgc3RyZWFtIGlkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPiBkb2Vzbid0IHN1cHBvcnQKK3JlcG9zaXRpb25pbmcpIG9yIDxjb2RlPkVJTlZBTDwvY29kZT4gKGludmFsaWQgZmlsZSBwb3NpdGlvbikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+ZnNldHBvczwvY29kZT4sIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBuYXR1cmUgb2YKKzxjb2RlPio8L2NvZGU+PHZhcj5wb3M8L3Zhcj4gYmV5b25kIGlkZW50aWZ5aW5nIGl0IGFzIHdyaXR0ZW4gYnkgPGNvZGU+ZmdldHBvczwvY29kZT4uCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9mdGVsbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnRlbGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjZhZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnRlbGwuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mdGVsbCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZnNldHBvcy5odG1sI2ZzZXRwb3MiIHRpdGxlPSJmc2V0cG9zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZnVub3Blbi5odG1sI2Z1bm9wZW4iIHRpdGxlPSJmdW5vcGVuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmdGVsbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmdW5vcGVuLmh0bWwjZnVub3BlbiI+ZnVub3BlbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZzZXRwb3MuaHRtbCNmc2V0cG9zIj5mc2V0cG9zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjI4IDxjb2RlPmZ0ZWxsPC9jb2RlPiwgPGNvZGU+ZnRlbGxvPC9jb2RlPiZtZGFzaDtyZXR1cm4gcG9zaXRpb24gaW4gYSBzdHJlYW0gb3IgZmlsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZ0ZWxsLTIwNCI+PC9hPjxhIG5hbWU9ImluZGV4LWZ0ZWxsby0yMDUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZ0ZWxsXzAwNWZyLTIwNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZnRlbGxvXzAwNWZyLTIwNyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGxvbmcgZnRlbGwoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIG9mZl90IGZ0ZWxsbyhGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgbG9uZyBfZnRlbGxfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIG9mZl90IF9mdGVsbG9fcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorT2JqZWN0cyBvZiB0eXBlIDxjb2RlPkZJTEU8L2NvZGU+IGNhbiBoYXZlIGEgJmxkcXVvO3Bvc2l0aW9uJnJkcXVvOyB0aGF0IHJlY29yZHMgaG93IG11Y2gKK29mIHRoZSBmaWxlIHlvdXIgcHJvZ3JhbSBoYXMgYWxyZWFkeSByZWFkLiAgTWFueSBvZiB0aGUgPGNvZGU+c3RkaW88L2NvZGU+IGZ1bmN0aW9ucworZGVwZW5kIG9uIHRoaXMgcG9zaXRpb24sIGFuZCBtYW55IGNoYW5nZSBpdCBhcyBhIHNpZGUgZWZmZWN0LgorCisgICA8cD5UaGUgcmVzdWx0IG9mIDxjb2RlPmZ0ZWxsPC9jb2RlPi88Y29kZT5mdGVsbG88L2NvZGU+IGlzIHRoZSBjdXJyZW50IHBvc2l0aW9uIGZvciBhIGZpbGUKK2lkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPi4gIElmIHlvdSByZWNvcmQgdGhpcyByZXN1bHQsIHlvdSBjYW4gbGF0ZXIKK3VzZSBpdCB3aXRoIDxjb2RlPmZzZWVrPC9jb2RlPi88Y29kZT5mc2Vla288L2NvZGU+IHRvIHJldHVybiB0aGUgZmlsZSB0byB0aGlzCitwb3NpdGlvbi4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gPGNvZGU+ZnRlbGw8L2NvZGU+IGFuZCA8Y29kZT5mdGVsbG88L2NvZGU+IGlzIHRoYXQKKzxjb2RlPmZ0ZWxsPC9jb2RlPiByZXR1cm5zIDxjb2RlPmxvbmc8L2NvZGU+IGFuZCA8Y29kZT5mdGVsbG88L2NvZGU+IHJldHVybnMgPGNvZGU+b2ZmX3Q8L2NvZGU+LgorCisgICA8cD5JbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgPGNvZGU+ZnRlbGw8L2NvZGU+Lzxjb2RlPmZ0ZWxsbzwvY29kZT4gc2ltcGx5IHVzZXMgYSBjaGFyYWN0ZXIKK2NvdW50IHRvIHJlcHJlc2VudCB0aGUgZmlsZSBwb3NpdGlvbjsgdGhpcyBpcyB0aGUgc2FtZSBudW1iZXIgdGhhdAord291bGQgYmUgcmVjb3JkZWQgYnkgPGNvZGU+ZmdldHBvczwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmZ0ZWxsPC9jb2RlPi88Y29kZT5mdGVsbG88L2NvZGU+IHJldHVybiB0aGUgZmlsZSBwb3NpdGlvbiwgaWYgcG9zc2libGUuICBJZiB0aGV5IGNhbm5vdCBkbwordGhpcywgdGhleSByZXR1cm4gPGNvZGU+LTFMPC9jb2RlPi4gIEZhaWx1cmUgb2NjdXJzIG9uIHN0cmVhbXMgdGhhdCBkbyBub3Qgc3VwcG9ydAorcG9zaXRpb25pbmc7IHRoZSBnbG9iYWwgPGNvZGU+ZXJybm88L2NvZGU+IGluZGljYXRlcyB0aGlzIGNvbmRpdGlvbiB3aXRoIHRoZQordmFsdWUgPGNvZGU+RVNQSVBFPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmZ0ZWxsPC9jb2RlPiBpcyByZXF1aXJlZCBieSB0aGUgQU5TSSBDIHN0YW5kYXJkLCBidXQgdGhlIG1lYW5pbmcgb2YgaXRzCityZXN1bHQgKHdoZW4gc3VjY2Vzc2Z1bCkgaXMgbm90IHNwZWNpZmllZCBiZXlvbmQgcmVxdWlyaW5nIHRoYXQgaXQgYmUKK2FjY2VwdGFibGUgYXMgYW4gYXJndW1lbnQgdG8gPGNvZGU+ZnNlZWs8L2NvZGU+LiAgSW4gcGFydGljdWxhciwgb3RoZXIKK2NvbmZvcm1pbmcgQyBpbXBsZW1lbnRhdGlvbnMgbWF5IHJldHVybiBhIGRpZmZlcmVudCByZXN1bHQgZnJvbQorPGNvZGU+ZnRlbGw8L2NvZGU+IHRoYW4gd2hhdCA8Y29kZT5mZ2V0cG9zPC9jb2RlPiByZWNvcmRzLgorCisgICA8cD48Y29kZT5mdGVsbG88L2NvZGU+IGlzIGRlZmluZWQgYnkgdGhlIFNpbmdsZSBVbml4IHNwZWNpZmljYXRpb24uCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2Z1bm9wZW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2Z1bm9wZW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWY4ZGFmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZnVub3Blbi5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mdW5vcGVuIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmdGVsbC5odG1sI2Z0ZWxsIiB0aXRsZT0iZnRlbGwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmd2lkZS5odG1sI2Z3aWRlIiB0aXRsZT0iZndpZGUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZ1bm9wZW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZndpZGUuaHRtbCNmd2lkZSI+ZndpZGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmdGVsbC5odG1sI2Z0ZWxsIj5mdGVsbDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4yOSA8Y29kZT5mdW5vcGVuPC9jb2RlPiwgPGNvZGU+ZnJvcGVuPC9jb2RlPiwgPGNvZGU+ZndvcGVuPC9jb2RlPiZtZGFzaDtvcGVuIGEgc3RyZWFtIHdpdGggY3VzdG9tIGNhbGxiYWNrczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZ1bm9wZW4tMjA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnJvcGVuLTIwOSI+PC9hPjxhIG5hbWU9ImluZGV4LWZ3b3Blbi0yMTAiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBGSUxFICpmdW5vcGVuKGNvbnN0IHZvaWQgKjx2YXI+Y29va2llPC92YXI+LAorICAgICAgICAgaW50ICgqPHZhcj5yZWFkZm48L3Zhcj4pICh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IG4pLAorICAgICAgICAgaW50ICgqPHZhcj53cml0ZWZuPC92YXI+KSAodm9pZCAqY29va2llLCBjb25zdCBjaGFyICpidWYsIGludCBuKSwKKyAgICAgICAgIGZwb3NfdCAoKjx2YXI+c2Vla2ZuPC92YXI+KSAodm9pZCAqY29va2llLCBmcG9zX3Qgb2ZmLCBpbnQgd2hlbmNlKSwKKyAgICAgICAgIGludCAoKjx2YXI+Y2xvc2VmbjwvdmFyPikgKHZvaWQgKmNvb2tpZSkpOworICAgICBGSUxFICpmcm9wZW4oY29uc3Qgdm9pZCAqPHZhcj5jb29raWU8L3Zhcj4sCisgICAgICAgICBpbnQgKCo8dmFyPnJlYWRmbjwvdmFyPikgKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbikpOworICAgICBGSUxFICpmd29wZW4oY29uc3Qgdm9pZCAqPHZhcj5jb29raWU8L3Zhcj4sCisgICAgICAgICBpbnQgKCo8dmFyPndyaXRlZm48L3Zhcj4pICh2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IG4pKTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5mdW5vcGVuPC9jb2RlPiBjcmVhdGVzIGEgPGNvZGU+RklMRTwvY29kZT4gc3RyZWFtIHdoZXJlIEkvTyBpcyBwZXJmb3JtZWQgdXNpbmcKK2N1c3RvbSBjYWxsYmFja3MuICBBdCBsZWFzdCBvbmUgb2YgPHZhcj5yZWFkZm48L3Zhcj4gYW5kIDx2YXI+d3JpdGVmbjwvdmFyPiBtdXN0IGJlCitwcm92aWRlZCwgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzdHJlYW0gYmVoYXZlcyB3aXRoIG1vZGUgJmx0OyJyIiZndDssCismbHQ7InciJmd0Oywgb3IgJmx0OyJyKyImZ3Q7LgorCisgICA8cD48dmFyPnJlYWRmbjwvdmFyPiBzaG91bGQgcmV0dXJuIC0xIG9uIGZhaWx1cmUsIG9yIGVsc2UgdGhlIG51bWJlciBvZiBieXRlcworcmVhZCAoMCBvbiBFT0YpLiAgSXQgaXMgc2ltaWxhciB0byA8Y29kZT5yZWFkPC9jb2RlPiwgZXhjZXB0IHRoYXQgJmx0O2ludCZndDsgcmF0aGVyCit0aGFuICZsdDtzaXplX3QmZ3Q7IGJvdW5kcyBhIHRyYW5zYWN0aW9uIHNpemUsIGFuZCA8dmFyPmNvb2tpZTwvdmFyPiB3aWxsIGJlIHBhc3NlZAorYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAgQSBOVUxMIDx2YXI+cmVhZGZuPC92YXI+IG1ha2VzIGF0dGVtcHRzIHRvIHJlYWQgdGhlCitzdHJlYW0gZmFpbC4KKworICAgPHA+PHZhcj53cml0ZWZuPC92YXI+IHNob3VsZCByZXR1cm4gLTEgb24gZmFpbHVyZSwgb3IgZWxzZSB0aGUgbnVtYmVyIG9mIGJ5dGVzCit3cml0dGVuLiAgSXQgaXMgc2ltaWxhciB0byA8Y29kZT53cml0ZTwvY29kZT4sIGV4Y2VwdCB0aGF0ICZsdDtpbnQmZ3Q7IHJhdGhlciB0aGFuCismbHQ7c2l6ZV90Jmd0OyBib3VuZHMgYSB0cmFuc2FjdGlvbiBzaXplLCBhbmQgPHZhcj5jb29raWU8L3Zhcj4gd2lsbCBiZSBwYXNzZWQgYXMKK3RoZSBmaXJzdCBhcmd1bWVudC4gIEEgTlVMTCA8dmFyPndyaXRlZm48L3Zhcj4gbWFrZXMgYXR0ZW1wdHMgdG8gd3JpdGUgdGhlCitzdHJlYW0gZmFpbC4KKworICAgPHA+PHZhcj5zZWVrZm48L3Zhcj4gc2hvdWxkIHJldHVybiAoZnBvc190KS0xIG9uIGZhaWx1cmUsIG9yIGVsc2UgdGhlIGN1cnJlbnQKK2ZpbGUgcG9zaXRpb24uICBJdCBpcyBzaW1pbGFyIHRvIDxjb2RlPmxzZWVrPC9jb2RlPiwgZXhjZXB0IHRoYXQgPHZhcj5jb29raWU8L3Zhcj4KK3dpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gIEEgTlVMTCA8dmFyPnNlZWtmbjwvdmFyPiBtYWtlcyB0aGUKK3N0cmVhbSBiZWhhdmUgc2ltaWxhcmx5IHRvIGEgcGlwZSBpbiByZWxhdGlvbiB0byBzdGRpbyBmdW5jdGlvbnMgdGhhdAorcmVxdWlyZSBwb3NpdGlvbmluZy4gIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyBmcG9zX3QgYW5kIG9mZl90IGFyZQordGhlIHNhbWUgdHlwZS4KKworICAgPHA+PHZhcj5jbG9zZWZuPC92YXI+IHNob3VsZCByZXR1cm4gLTEgb24gZmFpbHVyZSwgb3IgMCBvbiBzdWNjZXNzLiAgSXQgaXMKK3NpbWlsYXIgdG8gPGNvZGU+Y2xvc2U8L2NvZGU+LCBleGNlcHQgdGhhdCA8dmFyPmNvb2tpZTwvdmFyPiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUKK2ZpcnN0IGFyZ3VtZW50LiAgQSBOVUxMIDx2YXI+Y2xvc2VmbjwvdmFyPiBtZXJlbHkgZmx1c2hlcyBhbGwgZGF0YSB0aGVuIGxldHMKKzxjb2RlPmZjbG9zZTwvY29kZT4gc3VjY2VlZC4gIEEgZmFpbGVkIGNsb3NlIHdpbGwgc3RpbGwgaW52YWxpZGF0ZSB0aGUgc3RyZWFtLgorCisgICA8cD5SZWFkIGFuZCB3cml0ZSBJL08gZnVuY3Rpb25zIGFyZSBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZworYnVmZmVyIG9uIGZ1bGx5IGJ1ZmZlcmVkIG9yIGxpbmUgYnVmZmVyZWQgc3RyZWFtcyBieSBjYWxsaW5nCis8Y29kZT5zZXR2YnVmPC9jb2RlPi4gIFRoZXkgYXJlIGFsc28gbm90IHJlcXVpcmVkIHRvIGNvbXBsZXRlbHkgZmlsbCBvciBlbXB0eQordGhlIGJ1ZmZlci4gIFRoZXkgYXJlIG5vdCwgaG93ZXZlciwgYWxsb3dlZCB0byBjaGFuZ2Ugc3RyZWFtcyBmcm9tCit1bmJ1ZmZlcmVkIHRvIGJ1ZmZlcmVkIG9yIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlIGxpbmUgYnVmZmVyaW5nCitmbGFnLiAgVGhleSBtdXN0IGFsc28gYmUgcHJlcGFyZWQgdG8gaGF2ZSByZWFkIG9yIHdyaXRlIGNhbGxzIG9jY3VyIG9uCitidWZmZXJzIG90aGVyIHRoYW4gdGhlIG9uZSBtb3N0IHJlY2VudGx5IHNwZWNpZmllZC4KKworICAgPHA+VGhlIGZ1bmN0aW9ucyA8Y29kZT5mcm9wZW48L2NvZGU+IGFuZCA8Y29kZT5md29wZW48L2NvZGU+IGFyZSBjb252ZW5pZW5jZSBtYWNyb3MgYXJvdW5kCis8Y29kZT5mdW5vcGVuPC9jb2RlPiB0aGF0IG9ubHkgdXNlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2suCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXR1cm4gdmFsdWUgaXMgYW4gb3BlbiBGSUxFIHBvaW50ZXIgb24gc3VjY2Vzcy4gIE9uIGVycm9yLAorPGNvZGU+TlVMTDwvY29kZT4gaXMgcmV0dXJuZWQsIGFuZCA8Y29kZT5lcnJubzwvY29kZT4gd2lsbCBiZSBzZXQgdG8gRUlOVkFMIGlmIGEKK2Z1bmN0aW9uIHBvaW50ZXIgaXMgbWlzc2luZywgRU5PTUVNIGlmIHRoZSBzdHJlYW0gY2Fubm90IGJlIGNyZWF0ZWQsCitvciBFTUZJTEUgaWYgdG9vIG1hbnkgc3RyZWFtcyBhcmUgYWxyZWFkeSBvcGVuLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBpcyBhIG5ld2xpYiBleHRlbnNpb24sIGNvcHlpbmcgdGhlIHByb3RvdHlwZSBmcm9tIEJTRC4gCitJdCBpcyBub3QgcG9ydGFibGUuICBTZWUgYWxzbyB0aGUgPGNvZGU+Zm9wZW5jb29raWU8L2NvZGU+IGludGVyZmFjZSBmcm9tIExpbnV4LgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5zYnJrPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9md2lkZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZndpZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjVjY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZndpZGUuaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5md2lkZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZnVub3Blbi5odG1sI2Z1bm9wZW4iIHRpdGxlPSJmdW5vcGVuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZndyaXRlLmh0bWwjZndyaXRlIiB0aXRsZT0iZndyaXRlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmd2lkZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmd3JpdGUuaHRtbCNmd3JpdGUiPmZ3cml0ZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZ1bm9wZW4uaHRtbCNmdW5vcGVuIj5mdW5vcGVuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjMwIDxjb2RlPmZ3aWRlPC9jb2RlPiZtZGFzaDtzZXQgYW5kIGRldGVybWluZSB0aGUgb3JpZW50YXRpb24gb2YgYSBGSUxFIHN0cmVhbTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZ3aWRlLTIxMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZndpZGVfMDA1ZnItMjEyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgaW50IGZ3aWRlKEZJTEUgKjx2YXI+ZnA8L3Zhcj4sIGludCA8dmFyPm1vZGU8L3Zhcj4pCisgICAgIAorICAgICBpbnQgX2Z3aWRlX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4sIGludCA8dmFyPm1vZGU8L3Zhcj4pCisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorV2hlbiA8dmFyPm1vZGU8L3Zhcj4gaXMgemVybywgdGhlIDxjb2RlPmZ3aWRlPC9jb2RlPiBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSBjdXJyZW50CitvcmllbnRhdGlvbiBvZiA8dmFyPmZwPC92YXI+LiBJdCByZXR1cm5zIGEgdmFsdWUgJmd0OyAwIGlmIDx2YXI+ZnA8L3Zhcj4gaXMKK3dpZGUtY2hhcmFjdGVyIG9yaWVudGVkLCBpLmUuIGlmIHdpZGUgY2hhcmFjdGVyIEkvTyBpcyBwZXJtaXR0ZWQgYnV0CitjaGFyIEkvTyBpcyBkaXNhbGxvd2VkLiBJdCByZXR1cm5zIGEgdmFsdWUgJmx0OyAwIGlmIDx2YXI+ZnA8L3Zhcj4gaXMgYnl0ZQorb3JpZW50ZWQsIGkuZS4gaWYgY2hhciBJL08gaXMgcGVybWl0dGVkIGJ1dCB3aWRlIGNoYXJhY3RlciBJL08gaXMKK2Rpc2FsbG93ZWQuIEl0IHJldHVybnMgemVybyBpZiA8dmFyPmZwPC92YXI+IGhhcyBubyBvcmllbnRhdGlvbiB5ZXQ7IGluCit0aGlzIGNhc2UgdGhlIG5leHQgSS9PIG9wZXJhdGlvbiBtaWdodCBjaGFuZ2UgdGhlIG9yaWVudGF0aW9uICh0byBieXRlCitvcmllbnRlZCBpZiBpdCBpcyBhIGNoYXIgSS9PIG9wZXJhdGlvbiwgb3IgdG8gd2lkZS1jaGFyYWN0ZXIgb3JpZW50ZWQKK2lmIGl0IGlzIGEgd2lkZSBjaGFyYWN0ZXIgSS9PIG9wZXJhdGlvbikuCisKKyAgIDxwPk9uY2UgYSBzdHJlYW0gaGFzIGFuIG9yaWVudGF0aW9uLCBpdCBjYW5ub3QgYmUgY2hhbmdlZCBhbmQgcGVyc2lzdHMKK3VudGlsIHRoZSBzdHJlYW0gaXMgY2xvc2VkLCB1bmxlc3MgdGhlIHN0cmVhbSBpcyByZS1vcGVuZWQgd2l0aCBmcmVvcGVuLAord2hpY2ggcmVtb3ZlcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHN0cmVhbS4KKworICAgPHA+V2hlbiA8dmFyPm1vZGU8L3Zhcj4gaXMgbm9uLXplcm8sIHRoZSA8Y29kZT5md2lkZTwvY29kZT4gZnVuY3Rpb24gZmlyc3QgYXR0ZW1wdHMgdG8gc2V0Cis8dmFyPmZwPC92YXI+J3Mgb3JpZW50YXRpb24gKHRvIHdpZGUtY2hhcmFjdGVyIG9yaWVudGVkIGlmIDx2YXI+bW9kZTwvdmFyPiAmZ3Q7IDAsIG9yIHRvCitieXRlIG9yaWVudGVkIGlmIDx2YXI+bW9kZTwvdmFyPiAmbHQ7IDApLiBJdCB0aGVuIHJldHVybnMgYSB2YWx1ZSBkZW5vdGluZyB0aGUKK2N1cnJlbnQgb3JpZW50YXRpb24sIGFzIGFib3ZlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+ZndpZGU8L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgPHZhcj5mcDwvdmFyPidzIG9yaWVudGF0aW9uLCBhZnRlciBwb3NzaWJseQorY2hhbmdpbmcgaXQuIEEgcmV0dXJuIHZhbHVlICZndDsgMCBtZWFucyB3aWRlLWNoYXJhY3RlciBvcmllbnRlZC4gQSByZXR1cm4KK3ZhbHVlICZsdDsgMCBtZWFucyBieXRlIG9yaWVudGVkLiBBIHJldHVybiB2YWx1ZSBvZiB6ZXJvIG1lYW5zIHVuZGVjaWRlZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0M5OSwgUE9TSVguMS0yMDAxLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2Z3cml0ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZndyaXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4NGVhMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2Z3cml0ZS5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZ3cml0ZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZndpZGUuaHRtbCNmd2lkZSIgdGl0bGU9ImZ3aWRlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ2V0Yy5odG1sI2dldGMiIHRpdGxlPSJnZXRjIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmd3JpdGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ2V0Yy5odG1sI2dldGMiPmdldGM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmd2lkZS5odG1sI2Z3aWRlIj5md2lkZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4zMSA8Y29kZT5md3JpdGU8L2NvZGU+Jm1kYXNoO3dyaXRlIGFycmF5IGVsZW1lbnRzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZndyaXRlLTIxMyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZndyaXRlXzAwNWZyLTIxNCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIHNpemVfdCBmd3JpdGUoY29uc3Qgdm9pZCAqPHZhcj5idWY8L3Zhcj4sIHNpemVfdCA8dmFyPnNpemU8L3Zhcj4sCisgICAgICAgICBzaXplX3QgPHZhcj5jb3VudDwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgc2l6ZV90IF9md3JpdGVfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY29uc3Qgdm9pZCAqPHZhcj5idWY8L3Zhcj4sIHNpemVfdCA8dmFyPnNpemU8L3Zhcj4sCisgICAgICAgICBzaXplX3QgPHZhcj5jb3VudDwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+ZndyaXRlPC9jb2RlPiBhdHRlbXB0cyB0byBjb3B5LCBzdGFydGluZyBmcm9tIHRoZSBtZW1vcnkgbG9jYXRpb24KKzx2YXI+YnVmPC92YXI+LCA8dmFyPmNvdW50PC92YXI+IGVsZW1lbnRzIChlYWNoIG9mIHNpemUgPHZhcj5zaXplPC92YXI+KSBpbnRvIHRoZSBmaWxlIG9yCitzdHJlYW0gaWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+LiAgPGNvZGU+ZndyaXRlPC9jb2RlPiBtYXkgY29weSBmZXdlciBlbGVtZW50cyB0aGFuCis8dmFyPmNvdW50PC92YXI+IGlmIGFuIGVycm9yIGludGVydmVuZXMuCisKKyAgIDxwPjxjb2RlPmZ3cml0ZTwvY29kZT4gYWxzbyBhZHZhbmNlcyB0aGUgZmlsZSBwb3NpdGlvbiBpbmRpY2F0b3IgKGlmIGFueSkgZm9yCis8dmFyPmZwPC92YXI+IGJ5IHRoZSBudW1iZXIgb2YgPGVtPmNoYXJhY3RlcnM8L2VtPiBhY3R1YWxseSB3cml0dGVuLgorCisgICA8cD48Y29kZT5fZndyaXRlX3I8L2NvZGU+IGlzIHNpbXBseSB0aGUgcmVlbnRyYW50IHZlcnNpb24gb2YgPGNvZGU+ZndyaXRlPC9jb2RlPiB0aGF0Cit0YWtlcyBhbiBhZGRpdGlvbmFsIHJlZW50cmFudCBzdHJ1Y3R1cmUgYXJndW1lbnQ6IDx2YXI+cHRyPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitJZiA8Y29kZT5md3JpdGU8L2NvZGU+IHN1Y2NlZWRzIGluIHdyaXRpbmcgYWxsIHRoZSBlbGVtZW50cyB5b3Ugc3BlY2lmeSwgdGhlCityZXN1bHQgaXMgdGhlIHNhbWUgYXMgdGhlIGFyZ3VtZW50IDx2YXI+Y291bnQ8L3Zhcj4uICBJbiBhbnkgZXZlbnQsIHRoZQorcmVzdWx0IGlzIHRoZSBudW1iZXIgb2YgY29tcGxldGUgZWxlbWVudHMgdGhhdCA8Y29kZT5md3JpdGU8L2NvZGU+IGNvcGllZCB0bwordGhlIGZpbGUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+ZndyaXRlPC9jb2RlPi4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjEzODFiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0Yy5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmdldGMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZ3cml0ZS5odG1sI2Z3cml0ZSIgdGl0bGU9ImZ3cml0ZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdldGNfMDA1ZnVubG9ja2VkLmh0bWwjZ2V0Y18wMDVmdW5sb2NrZWQiIHRpdGxlPSJnZXRjX3VubG9ja2VkIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJnZXRjIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdldGNfMDA1ZnVubG9ja2VkLmh0bWwjZ2V0Y18wMDVmdW5sb2NrZWQiPmdldGNfdW5sb2NrZWQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmd3JpdGUuaHRtbCNmd3JpdGUiPmZ3cml0ZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4zMiA8Y29kZT5nZXRjPC9jb2RlPiZtZGFzaDtyZWFkIGEgY2hhcmFjdGVyIChtYWNybyk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nZXRjLTIxNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZ2V0Y18wMDVmci0yMTYiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgZ2V0YyhGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCisgICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgX2dldGNfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+Z2V0YzwvY29kZT4gaXMgYSBtYWNybywgZGVmaW5lZCBpbiA8Y29kZT5zdGRpby5oPC9jb2RlPi4gIFlvdSBjYW4gdXNlIDxjb2RlPmdldGM8L2NvZGU+Cit0byBnZXQgdGhlIG5leHQgc2luZ2xlIGNoYXJhY3RlciBmcm9tIHRoZSBmaWxlIG9yIHN0cmVhbQoraWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+LiAgQXMgYSBzaWRlIGVmZmVjdCwgPGNvZGU+Z2V0YzwvY29kZT4gYWR2YW5jZXMgdGhlIGZpbGUncworY3VycmVudCBwb3NpdGlvbiBpbmRpY2F0b3IuCisKKyAgIDxwPkZvciBhIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGlzIG1hY3JvLCBzZWUgPGNvZGU+ZmdldGM8L2NvZGU+LgorCisgICA8cD5UaGUgPGNvZGU+X2dldGNfcjwvY29kZT4gZnVuY3Rpb24gaXMgc2ltcGx5IHRoZSByZWVudHJhbnQgdmVyc2lvbiBvZiA8Y29kZT5nZXRjPC9jb2RlPgord2hpY2ggcGFzc2VzIGFuIGFkZGl0aW9uYWwgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUgcG9pbnRlciBhcmd1bWVudDogPHZhcj5wdHI8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBuZXh0IGNoYXJhY3RlciAocmVhZCBhcyBhbiA8Y29kZT51bnNpZ25lZCBjaGFyPC9jb2RlPiwgYW5kIGNhc3QgdG8KKzxjb2RlPmludDwvY29kZT4pLCB1bmxlc3MgdGhlcmUgaXMgbm8gbW9yZSBkYXRhLCBvciB0aGUgaG9zdCBzeXN0ZW0gcmVwb3J0cyBhCityZWFkIGVycm9yOyBpbiBlaXRoZXIgb2YgdGhlc2Ugc2l0dWF0aW9ucywgPGNvZGU+Z2V0YzwvY29kZT4gcmV0dXJucyA8Y29kZT5FT0Y8L2NvZGU+LgorCisgICA8cD5Zb3UgY2FuIGRpc3Rpbmd1aXNoIHRoZSB0d28gc2l0dWF0aW9ucyB0aGF0IGNhdXNlIGFuIDxjb2RlPkVPRjwvY29kZT4gcmVzdWx0IGJ5Cit1c2luZyB0aGUgPGNvZGU+ZmVycm9yPC9jb2RlPiBhbmQgPGNvZGU+ZmVvZjwvY29kZT4gZnVuY3Rpb25zLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPmdldGM8L2NvZGU+OyBpdCBzdWdnZXN0cywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIHRoYXQKKzxjb2RlPmdldGM8L2NvZGU+IGJlIGltcGxlbWVudGVkIGFzIGEgbWFjcm8uICBUaGUgc3RhbmRhcmQgZXhwbGljaXRseSBwZXJtaXRzCittYWNybyBpbXBsZW1lbnRhdGlvbnMgb2YgPGNvZGU+Z2V0YzwvY29kZT4gdG8gdXNlIHRoZSBhcmd1bWVudCBtb3JlIHRoYW4gb25jZTsKK3RoZXJlZm9yZSwgaW4gYSBwb3J0YWJsZSBwcm9ncmFtLCB5b3Ugc2hvdWxkIG5vdCB1c2UgYW4gZXhwcmVzc2lvbgord2l0aCBzaWRlIGVmZmVjdHMgYXMgdGhlIDxjb2RlPmdldGM8L2NvZGU+IGFyZ3VtZW50LgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0Y18wMDVmdW5sb2NrZWQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGNfMDA1ZnVubG9ja2VkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyOWY5MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGNfMDA1ZnVubG9ja2VkLmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Z2V0Y191bmxvY2tlZCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2V0Yy5odG1sI2dldGMiIHRpdGxlPSJnZXRjIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ2V0Y2hhci5odG1sI2dldGNoYXIiIHRpdGxlPSJnZXRjaGFyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJnZXRjX3VubG9ja2VkIj48L2E+Cis8YSBuYW1lPSJnZXRjXzAwNWZ1bmxvY2tlZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJnZXRjaGFyLmh0bWwjZ2V0Y2hhciI+Z2V0Y2hhcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImdldGMuaHRtbCNnZXRjIj5nZXRjPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjMzIDxjb2RlPmdldGNfdW5sb2NrZWQ8L2NvZGU+Jm1kYXNoO25vbi10aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIGdldGMgKG1hY3JvKTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdldGNfMDA1ZnVubG9ja2VkLTIxNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZ2V0Y18wMDVmdW5sb2NrZWRfMDA1ZnItMjE4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGdldGNfdW5sb2NrZWQoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IF9nZXRjX3VubG9ja2VkX3IoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+Z2V0Y191bmxvY2tlZDwvY29kZT4gaXMgYSBub24tdGhyZWFkLXNhZmUgdmVyc2lvbiBvZiA8Y29kZT5nZXRjPC9jb2RlPiBkZWNsYXJlZCBpbgorPGNvZGU+c3RkaW8uaDwvY29kZT4uICA8Y29kZT5nZXRjX3VubG9ja2VkPC9jb2RlPiBtYXkgb25seSBzYWZlbHkgYmUgdXNlZCB3aXRoaW4gYSBzY29wZQorcHJvdGVjdGVkIGJ5IGZsb2NrZmlsZSgpIChvciBmdHJ5bG9ja2ZpbGUoKSkgYW5kIGZ1bmxvY2tmaWxlKCkuICBUaGVzZQorZnVuY3Rpb25zIG1heSBzYWZlbHkgYmUgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVkIHByb2dyYW0gaWYgYW5kIG9ubHkKK2lmIHRoZXkgYXJlIGNhbGxlZCB3aGlsZSB0aGUgaW52b2tpbmcgdGhyZWFkIG93bnMgdGhlICggRklMRSAqKQorb2JqZWN0LCBhcyBpcyB0aGUgY2FzZSBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byB0aGUgZmxvY2tmaWxlKCkgb3IKK2Z0cnlsb2NrZmlsZSgpIGZ1bmN0aW9ucy4gIElmIHRocmVhZHMgYXJlIGRpc2FibGVkLCB0aGVuCis8Y29kZT5nZXRjX3VubG9ja2VkPC9jb2RlPiBpcyBlcXVpdmFsZW50IHRvIDxjb2RlPmdldGM8L2NvZGU+LgorCisgICA8cD5UaGUgPGNvZGU+X2dldGNfdW5sb2NrZWRfcjwvY29kZT4gZnVuY3Rpb24gaXMgc2ltcGx5IHRoZSByZWVudHJhbnQgdmVyc2lvbiBvZgorPGNvZGU+Z2V0X3VubG9ja2VkPC9jb2RlPiB3aGljaCBwYXNzZXMgYW4gYWRkaXRpb25hbCByZWVudHJhbmN5IHN0cnVjdHVyZSBwb2ludGVyCithcmd1bWVudDogPHZhcj5wdHI8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1NlZSA8Y29kZT5nZXRjPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1BPU0lYIDEwMDMuMSByZXF1aXJlcyA8Y29kZT5nZXRjX3VubG9ja2VkPC9jb2RlPi4gIDxjb2RlPmdldGNfdW5sb2NrZWQ8L2NvZGU+IG1heSBiZQoraW1wbGVtZW50ZWQgYXMgYSBtYWNybywgc28gYXJndW1lbnRzIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4gCis8YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGNoYXIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGNoYXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzE5ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0Y2hhci5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmdldGNoYXIgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdldGNfMDA1ZnVubG9ja2VkLmh0bWwjZ2V0Y18wMDVmdW5sb2NrZWQiIHRpdGxlPSJnZXRjX3VubG9ja2VkIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ2V0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbCNnZXRjaGFyXzAwNWZ1bmxvY2tlZCIgdGl0bGU9ImdldGNoYXJfdW5sb2NrZWQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImdldGNoYXIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ2V0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbCNnZXRjaGFyXzAwNWZ1bmxvY2tlZCI+Z2V0Y2hhcl91bmxvY2tlZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImdldGNfMDA1ZnVubG9ja2VkLmh0bWwjZ2V0Y18wMDVmdW5sb2NrZWQiPmdldGNfdW5sb2NrZWQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMzQgPGNvZGU+Z2V0Y2hhcjwvY29kZT4mbWRhc2g7cmVhZCBhIGNoYXJhY3RlciAobWFjcm8pPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ2V0Y2hhci0yMTkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmdldGNoYXJfMDA1ZnItMjIwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IGdldGNoYXIodm9pZCk7CisgICAgIAorICAgICBpbnQgX2dldGNoYXJfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5nZXRjaGFyPC9jb2RlPiBpcyBhIG1hY3JvLCBkZWZpbmVkIGluIDxjb2RlPnN0ZGlvLmg8L2NvZGU+LiAgWW91IGNhbiB1c2UgPGNvZGU+Z2V0Y2hhcjwvY29kZT4KK3RvIGdldCB0aGUgbmV4dCBzaW5nbGUgY2hhcmFjdGVyIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IHN0cmVhbS4gCitBcyBhIHNpZGUgZWZmZWN0LCA8Y29kZT5nZXRjaGFyPC9jb2RlPiBhZHZhbmNlcyB0aGUgc3RhbmRhcmQgaW5wdXQncworY3VycmVudCBwb3NpdGlvbiBpbmRpY2F0b3IuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X2dldGNoYXJfcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbi4gIFRoZQorZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIG5leHQgY2hhcmFjdGVyIChyZWFkIGFzIGFuIDxjb2RlPnVuc2lnbmVkIGNoYXI8L2NvZGU+LCBhbmQgY2FzdCB0bworPGNvZGU+aW50PC9jb2RlPiksIHVubGVzcyB0aGVyZSBpcyBubyBtb3JlIGRhdGEsIG9yIHRoZSBob3N0IHN5c3RlbSByZXBvcnRzIGEKK3JlYWQgZXJyb3I7IGluIGVpdGhlciBvZiB0aGVzZSBzaXR1YXRpb25zLCA8Y29kZT5nZXRjaGFyPC9jb2RlPiByZXR1cm5zIDxjb2RlPkVPRjwvY29kZT4uCisKKyAgIDxwPllvdSBjYW4gZGlzdGluZ3Vpc2ggdGhlIHR3byBzaXR1YXRpb25zIHRoYXQgY2F1c2UgYW4gPGNvZGU+RU9GPC9jb2RlPiByZXN1bHQgYnkKK3VzaW5nIGA8Y29kZT5mZXJyb3Ioc3RkaW4pPC9jb2RlPicgYW5kIGA8Y29kZT5mZW9mKHN0ZGluKTwvY29kZT4nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPmdldGNoYXI8L2NvZGU+OyBpdCBzdWdnZXN0cywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIHRoYXQKKzxjb2RlPmdldGNoYXI8L2NvZGU+IGJlIGltcGxlbWVudGVkIGFzIGEgbWFjcm8uCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9nZXRjaGFyXzAwNWZ1bmxvY2tlZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU0NGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbApAQCAtMCwwICsxLDc0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5nZXRjaGFyX3VubG9ja2VkIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnZXRjaGFyLmh0bWwjZ2V0Y2hhciIgdGl0bGU9ImdldGNoYXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnZXRkZWxpbS5odG1sI2dldGRlbGltIiB0aXRsZT0iZ2V0ZGVsaW0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImdldGNoYXJfdW5sb2NrZWQiPjwvYT4KKzxhIG5hbWU9ImdldGNoYXJfMDA1ZnVubG9ja2VkIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdldGRlbGltLmh0bWwjZ2V0ZGVsaW0iPmdldGRlbGltPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZ2V0Y2hhci5odG1sI2dldGNoYXIiPmdldGNoYXI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMzUgPGNvZGU+Z2V0Y2hhcl91bmxvY2tlZDwvY29kZT4mbWRhc2g7bm9uLXRocmVhZC1zYWZlIHZlcnNpb24gb2YgZ2V0Y2hhciAobWFjcm8pPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ2V0Y2hhcl8wMDVmdW5sb2NrZWQtMjIxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZnZXRjaGFyXzAwNWZ1bmxvY2tlZF8wMDVmci0yMjIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgZ2V0Y2hhcl91bmxvY2tlZCgpOworICAgICAKKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBfZ2V0Y2hhcl91bmxvY2tlZF9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5nZXRjaGFyX3VubG9ja2VkPC9jb2RlPiBpcyBhIG5vbi10aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIDxjb2RlPmdldGNoYXI8L2NvZGU+CitkZWNsYXJlZCBpbiA8Y29kZT5zdGRpby5oPC9jb2RlPi4gIDxjb2RlPmdldGNoYXJfdW5sb2NrZWQ8L2NvZGU+IG1heSBvbmx5IHNhZmVseSBiZSB1c2VkCit3aXRoaW4gYSBzY29wZSBwcm90ZWN0ZWQgYnkgZmxvY2tmaWxlKCkgKG9yIGZ0cnlsb2NrZmlsZSgpKSBhbmQKK2Z1bmxvY2tmaWxlKCkuICBUaGVzZSBmdW5jdGlvbnMgbWF5IHNhZmVseSBiZSB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQKK3Byb2dyYW0gaWYgYW5kIG9ubHkgaWYgdGhleSBhcmUgY2FsbGVkIHdoaWxlIHRoZSBpbnZva2luZyB0aHJlYWQgb3ducwordGhlICggRklMRSAqKSBvYmplY3QsIGFzIGlzIHRoZSBjYXNlIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIHRoZQorZmxvY2tmaWxlKCkgb3IgZnRyeWxvY2tmaWxlKCkgZnVuY3Rpb25zLiAgSWYgdGhyZWFkcyBhcmUgZGlzYWJsZWQsCit0aGVuIDxjb2RlPmdldGNoYXJfdW5sb2NrZWQ8L2NvZGU+IGlzIGVxdWl2YWxlbnQgdG8gPGNvZGU+Z2V0Y2hhcjwvY29kZT4uCisKKyAgIDxwPlRoZSA8Y29kZT5fZ2V0Y2hhcl91bmxvY2tlZF9yPC9jb2RlPiBmdW5jdGlvbiBpcyBzaW1wbHkgdGhlIHJlZW50cmFudCB2ZXJzaW9uIG9mCis8Y29kZT5nZXRjaGFyX3VubG9ja2VkPC9jb2RlPiB3aGljaCBwYXNzZXMgYW4gYWRkdGlvbmFsIHJlZW50cmFuY3kgc3RydWN0dXJlIHBvaW50ZXIKK2FyZ3VtZW50OiA8dmFyPnB0cjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorU2VlIDxjb2RlPmdldGNoYXI8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorUE9TSVggMTAwMy4xIHJlcXVpcmVzIDxjb2RlPmdldGNoYXJfdW5sb2NrZWQ8L2NvZGU+LiAgPGNvZGU+Z2V0Y2hhcl91bmxvY2tlZDwvY29kZT4gbWF5CitiZSBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uIAorPGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9nZXRkZWxpbS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0ZGVsaW0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWU4MDA5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0ZGVsaW0uaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5nZXRkZWxpbSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2V0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbCNnZXRjaGFyXzAwNWZ1bmxvY2tlZCIgdGl0bGU9ImdldGNoYXJfdW5sb2NrZWQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnZXRsaW5lLmh0bWwjZ2V0bGluZSIgdGl0bGU9ImdldGxpbmUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImdldGRlbGltIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdldGxpbmUuaHRtbCNnZXRsaW5lIj5nZXRsaW5lPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZ2V0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbCNnZXRjaGFyXzAwNWZ1bmxvY2tlZCI+Z2V0Y2hhcl91bmxvY2tlZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC4zNiA8Y29kZT5nZXRkZWxpbTwvY29kZT4mbWRhc2g7cmVhZCBhIGxpbmUgdXAgdG8gYSBzcGVjaWZpZWQgbGluZSBkZWxpbWl0ZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nZXRkZWxpbS0yMjMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgZ2V0ZGVsaW0oY2hhciAqKjx2YXI+YnVmcHRyPC92YXI+LCBzaXplX3QgKjx2YXI+bjwvdmFyPiwKKyAgICAgICAgIGludCA8dmFyPmRlbGltPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5nZXRkZWxpbTwvY29kZT4gcmVhZHMgYSBmaWxlIDx2YXI+ZnA8L3Zhcj4gdXAgdG8gYW5kIHBvc3NpYmx5IGluY2x1ZGluZyBhIHNwZWNpZmllZAorZGVsaW1pdGVyIDx2YXI+ZGVsaW08L3Zhcj4uICBUaGUgbGluZSBpcyByZWFkIGludG8gYSBidWZmZXIgcG9pbnRlZCB0bworYnkgPHZhcj5idWZwdHI8L3Zhcj4gYW5kIGRlc2lnbmF0ZWQgd2l0aCBzaXplICo8dmFyPm48L3Zhcj4uICBJZiB0aGUgYnVmZmVyIGlzCitub3QgbGFyZ2UgZW5vdWdoLCBpdCB3aWxsIGJlIGR5bmFtaWNhbGx5IGdyb3duIGJ5IDxjb2RlPmdldGRlbGltPC9jb2RlPi4gCitBcyB0aGUgYnVmZmVyIGlzIGdyb3duLCB0aGUgcG9pbnRlciB0byB0aGUgc2l6ZSA8dmFyPm48L3Zhcj4gd2lsbCBiZQordXBkYXRlZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+Z2V0ZGVsaW08L2NvZGU+IHJldHVybnMgPGNvZGU+LTE8L2NvZGU+IGlmIG5vIGNoYXJhY3RlcnMgd2VyZSBzdWNjZXNzZnVsbHkgcmVhZDsKK290aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSByZWFkLiAKK0F0IGVuZCBvZiBmaWxlLCB0aGUgcmVzdWx0IGlzIG5vbnplcm8uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5nZXRkZWxpbTwvY29kZT4gaXMgYSBnbGliYyBleHRlbnNpb24uCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIGRpcmVjdGx5IHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGVudi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0ZW52Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhODZkYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGVudi5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmdldGVudiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZXhpdC5odG1sI2V4aXQiIHRpdGxlPSJleGl0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibGFicy5odG1sI2xhYnMiIHRpdGxlPSJsYWJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJnZXRlbnYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibGFicy5odG1sI2xhYnMiPmxhYnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJleGl0Lmh0bWwjZXhpdCI+ZXhpdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xOCA8Y29kZT5nZXRlbnY8L2NvZGU+Jm1kYXNoO2xvb2sgdXAgZW52aXJvbm1lbnQgdmFyaWFibGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nZXRlbnYtMzEiPjwvYT48YSBuYW1lPSJpbmRleC1lbnZpcm9uLTMyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGNoYXIgKmdldGVudihjb25zdCBjaGFyICo8dmFyPm5hbWU8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmdldGVudjwvY29kZT4gc2VhcmNoZXMgdGhlIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcworKHVzaW5nIHRoZSBnbG9iYWwgcG9pbnRlciAmbGRxdW87PGNvZGU+Y2hhciAqKmVudmlyb248L2NvZGU+JnJkcXVvOykgZm9yIGEgdmFyaWFibGUgd2hvc2UKK25hbWUgbWF0Y2hlcyB0aGUgc3RyaW5nIGF0IDx2YXI+bmFtZTwvdmFyPi4gIElmIGEgdmFyaWFibGUgbmFtZSBtYXRjaGVzLAorPGNvZGU+Z2V0ZW52PC9jb2RlPiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYXNzb2NpYXRlZCB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorQSBwb2ludGVyIHRvIHRoZSAoc3RyaW5nKSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yCis8Y29kZT5OVUxMPC9jb2RlPiBpZiB0aGVyZSBpcyBubyBzdWNoIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Z2V0ZW52PC9jb2RlPiBpcyBBTlNJLCBidXQgdGhlIHJ1bGVzIGZvciBwcm9wZXJseSBmb3JtaW5nIG5hbWVzIG9mIGVudmlyb25tZW50Cit2YXJpYWJsZXMgdmFyeSBmcm9tIG9uZSBzeXN0ZW0gdG8gYW5vdGhlci4KKworICAgPHA+PGNvZGU+Z2V0ZW52PC9jb2RlPiByZXF1aXJlcyBhIGdsb2JhbCBwb2ludGVyIDxjb2RlPmVudmlyb248L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGxpbmUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dldGxpbmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjZlMjAwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0bGluZS5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmdldGxpbmUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImdldGRlbGltLmh0bWwjZ2V0ZGVsaW0iIHRpdGxlPSJnZXRkZWxpbSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImdldHMuaHRtbCNnZXRzIiB0aXRsZT0iZ2V0cyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZ2V0bGluZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJnZXRzLmh0bWwjZ2V0cyI+Z2V0czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImdldGRlbGltLmh0bWwjZ2V0ZGVsaW0iPmdldGRlbGltPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjM3IDxjb2RlPmdldGxpbmU8L2NvZGU+Jm1kYXNoO3JlYWQgYSBsaW5lIGZyb20gYSBmaWxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ2V0bGluZS0yMjQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBzc2l6ZV90IGdldGxpbmUoY2hhciAqKjx2YXI+YnVmcHRyPC92YXI+LCBzaXplX3QgKjx2YXI+bjwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+Z2V0bGluZTwvY29kZT4gcmVhZHMgYSBmaWxlIDx2YXI+ZnA8L3Zhcj4gdXAgdG8gYW5kIHBvc3NpYmx5IGluY2x1ZGluZyB0aGUKK25ld2xpbmUgY2hhcmFjdGVyLiAgVGhlIGxpbmUgaXMgcmVhZCBpbnRvIGEgYnVmZmVyIHBvaW50ZWQgdG8KK2J5IDx2YXI+YnVmcHRyPC92YXI+IGFuZCBkZXNpZ25hdGVkIHdpdGggc2l6ZSAqPHZhcj5uPC92YXI+LiAgSWYgdGhlIGJ1ZmZlciBpcworbm90IGxhcmdlIGVub3VnaCwgaXQgd2lsbCBiZSBkeW5hbWljYWxseSBncm93biBieSA8Y29kZT5nZXRkZWxpbTwvY29kZT4uIAorQXMgdGhlIGJ1ZmZlciBpcyBncm93biwgdGhlIHBvaW50ZXIgdG8gdGhlIHNpemUgPHZhcj5uPC92YXI+IHdpbGwgYmUKK3VwZGF0ZWQuCisKKyAgIDxwPjxjb2RlPmdldGxpbmU8L2NvZGU+IGlzIGVxdWl2YWxlbnQgdG8gZ2V0ZGVsaW0oYnVmcHRyLCBuLCAnXG4nLCBmcCk7CisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmdldGxpbmU8L2NvZGU+IHJldHVybnMgPGNvZGU+LTE8L2NvZGU+IGlmIG5vIGNoYXJhY3RlcnMgd2VyZSBzdWNjZXNzZnVsbHkgcmVhZCwKK290aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSByZWFkLiAKK2F0IGVuZCBvZiBmaWxlLCB0aGUgcmVzdWx0IGlzIG5vbnplcm8uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5nZXRsaW5lPC9jb2RlPiBpcyBhIGdsaWJjIGV4dGVuc2lvbi4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgZGlyZWN0bHkgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMTEwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9nZXRzLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Z2V0cyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2V0bGluZS5odG1sI2dldGxpbmUiIHRpdGxlPSJnZXRsaW5lIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ2V0dy5odG1sI2dldHciIHRpdGxlPSJnZXR3Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJnZXRzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdldHcuaHRtbCNnZXR3Ij5nZXR3PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZ2V0bGluZS5odG1sI2dldGxpbmUiPmdldGxpbmU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMzggPGNvZGU+Z2V0czwvY29kZT4mbWRhc2g7Z2V0IGNoYXJhY3RlciBzdHJpbmcgKG9ic29sZXRlLCB1c2UgPGNvZGU+ZmdldHM8L2NvZGU+IGluc3RlYWQpPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZ2V0cy0yMjUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmdldHNfMDA1ZnItMjI2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgCisgICAgIGNoYXIgKmdldHMoY2hhciAqPHZhcj5idWY8L3Zhcj4pOworICAgICAKKyAgICAgY2hhciAqX2dldHNfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjaGFyICo8dmFyPmJ1ZjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorUmVhZHMgY2hhcmFjdGVycyBmcm9tIHN0YW5kYXJkIGlucHV0IHVudGlsIGEgbmV3bGluZSBpcyBmb3VuZC4gCitUaGUgY2hhcmFjdGVycyB1cCB0byB0aGUgbmV3bGluZSBhcmUgc3RvcmVkIGluIDx2YXI+YnVmPC92YXI+LiBUaGUKK25ld2xpbmUgaXMgZGlzY2FyZGVkLCBhbmQgdGhlIGJ1ZmZlciBpcyB0ZXJtaW5hdGVkIHdpdGggYSAwLgorCisgICA8cD5UaGlzIGlzIGEgPGVtPmRhbmdlcm91czwvZW0+IGZ1bmN0aW9uLCBhcyBpdCBoYXMgbm8gd2F5IG9mIGNoZWNraW5nCit0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZSBpbiA8dmFyPmJ1ZjwvdmFyPi4gT25lIG9mIHRoZSBhdHRhY2tzCit1c2VkIGJ5IHRoZSBJbnRlcm5ldCBXb3JtIG9mIDE5ODggdXNlZCB0aGlzIHRvIG92ZXJydW4gYQorYnVmZmVyIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgb2YgdGhlIGZpbmdlciBkYWVtb24gYW5kCitvdmVyd3JpdGUgdGhlIHJldHVybiBhZGRyZXNzLCBjYXVzaW5nIHRoZSBkYWVtb24gdG8gZXhlY3V0ZQorY29kZSBkb3dubG9hZGVkIGludG8gaXQgb3ZlciB0aGUgY29ubmVjdGlvbi4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fZ2V0c19yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAgVGhlIGV4dHJhCithcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5nZXRzPC9jb2RlPiByZXR1cm5zIHRoZSBidWZmZXIgcGFzc2VkIHRvIGl0LCB3aXRoIHRoZSBkYXRhIGZpbGxlZAoraW4uIElmIGVuZCBvZiBmaWxlIG9jY3VycyB3aXRoIHNvbWUgZGF0YSBhbHJlYWR5IGFjY3VtdWxhdGVkLAordGhlIGRhdGEgaXMgcmV0dXJuZWQgd2l0aCBubyBvdGhlciBpbmRpY2F0aW9uLiBJZiBlbmQgb2YgZmlsZQorb2NjdXJzIHdpdGggbm8gZGF0YSBpbiB0aGUgYnVmZmVyLCBOVUxMIGlzIHJldHVybmVkLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0dy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0dy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzgwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9nZXR3Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Z2V0dyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2V0cy5odG1sI2dldHMiIHRpdGxlPSJnZXRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ2V0d2NoYXIuaHRtbCNnZXR3Y2hhciIgdGl0bGU9ImdldHdjaGFyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJnZXR3Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdldHdjaGFyLmh0bWwjZ2V0d2NoYXIiPmdldHdjaGFyPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZ2V0cy5odG1sI2dldHMiPmdldHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuMzkgPGNvZGU+Z2V0dzwvY29kZT4mbWRhc2g7cmVhZCBhIHdvcmQgKGludCk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nZXR3LTIyNyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBnZXR3KEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmdldHc8L2NvZGU+IGlzIGEgZnVuY3Rpb24sIGRlZmluZWQgaW4gPGNvZGU+c3RkaW8uaDwvY29kZT4uICBZb3UgY2FuIHVzZSA8Y29kZT5nZXR3PC9jb2RlPgordG8gZ2V0IHRoZSBuZXh0IHdvcmQgZnJvbSB0aGUgZmlsZSBvciBzdHJlYW0gaWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+LiAgQXMKK2Egc2lkZSBlZmZlY3QsIDxjb2RlPmdldHc8L2NvZGU+IGFkdmFuY2VzIHRoZSBmaWxlJ3MgY3VycmVudCBwb3NpdGlvbgoraW5kaWNhdG9yLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgbmV4dCB3b3JkIChyZWFkIGFzIGFuIDxjb2RlPmludDwvY29kZT4pLCB1bmxlc3MgdGhlcmUgaXMgbm8gbW9yZQorZGF0YSBvciB0aGUgaG9zdCBzeXN0ZW0gcmVwb3J0cyBhIHJlYWQgZXJyb3I7IGluIGVpdGhlciBvZiB0aGVzZQorc2l0dWF0aW9ucywgPGNvZGU+Z2V0dzwvY29kZT4gcmV0dXJucyA8Y29kZT5FT0Y8L2NvZGU+LiAgU2luY2UgPGNvZGU+RU9GPC9jb2RlPiBpcyBhIHZhbGlkCis8Y29kZT5pbnQ8L2NvZGU+LCB5b3UgbXVzdCB1c2UgPGNvZGU+ZmVycm9yPC9jb2RlPiBvciA8Y29kZT5mZW9mPC9jb2RlPiB0byBkaXN0aW5ndWlzaCB0aGVzZQorc2l0dWF0aW9ucy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmdldHc8L2NvZGU+IGlzIGEgcmVtbmFudCBvZiBLJmFtcDtSIEM7IGl0IGlzIG5vdCBwYXJ0IG9mIGFueSBJU08gQyBTdGFuZGFyZC4gCis8Y29kZT5mcmVhZDwvY29kZT4gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4gIEluIGZhY3QsIHRoaXMgaW1wbGVtZW50YXRpb24gb2YKKzxjb2RlPmdldHc8L2NvZGU+IGlzIGJhc2VkIHVwb24gPGNvZGU+ZnJlYWQ8L2NvZGU+LgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5mcmVhZDwvY29kZT4uIAorPGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9nZXR3Y2hhci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0d2NoYXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzMwMGQyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvZ2V0d2NoYXIuaHRtbApAQCAtMCwwICsxLDY5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5nZXR3Y2hhciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2V0dy5odG1sI2dldHciIHRpdGxlPSJnZXR3Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWt0ZW1wLmh0bWwjbWt0ZW1wIiB0aXRsZT0ibWt0ZW1wIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJnZXR3Y2hhciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJta3RlbXAuaHRtbCNta3RlbXAiPm1rdGVtcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImdldHcuaHRtbCNnZXR3Ij5nZXR3PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjQwIDxjb2RlPmdldHdjaGFyPC9jb2RlPiZtZGFzaDtyZWFkIGEgd2lkZSBjaGFyYWN0ZXIgZnJvbSBzdGFuZGFyZCBpbnB1dDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdldHdjaGFyLTIyOCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZ2V0d2NoYXJfMDA1ZnItMjI5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2ludF90IGdldHdjaGFyKHZvaWQpOworICAgICAKKyAgICAgd2ludF90IF9nZXR3Y2hhcl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmdldHdjaGFyPC9jb2RlPiBmdW5jdGlvbiBvciBtYWNybyBpcyB0aGUgd2lkZSBjaGFyYWN0ZXIgZXF1aXZhbGVudCBvZgordGhlIDxjb2RlPmdldGNoYXI8L2NvZGU+IGZ1bmN0aW9uLiAgWW91IGNhbiB1c2UgPGNvZGU+Z2V0d2NoYXI8L2NvZGU+IHRvIGdldCB0aGUgbmV4dAord2lkZSBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgc3RyZWFtLiAgQXMgYSBzaWRlIGVmZmVjdCwKKzxjb2RlPmdldHdjaGFyPC9jb2RlPiBhZHZhbmNlcyB0aGUgc3RhbmRhcmQgaW5wdXQncyBjdXJyZW50IHBvc2l0aW9uIGluZGljYXRvci4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fZ2V0d2NoYXJfcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbi4gIFRoZQorZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIG5leHQgd2lkZSBjaGFyYWN0ZXIgY2FzdCB0byA8Y29kZT53aW50X3Q8L2NvZGU+LCB1bmxlc3MgdGhlcmUgaXMgbm8gbW9yZQorZGF0YSwgb3IgdGhlIGhvc3Qgc3lzdGVtIHJlcG9ydHMgYSByZWFkIGVycm9yOyBpbiBlaXRoZXIgb2YgdGhlc2UKK3NpdHVhdGlvbnMsIDxjb2RlPmdldHdjaGFyPC9jb2RlPiByZXR1cm5zIDxjb2RlPldFT0Y8L2NvZGU+LgorCisgICA8cD5Zb3UgY2FuIGRpc3Rpbmd1aXNoIHRoZSB0d28gc2l0dWF0aW9ucyB0aGF0IGNhdXNlIGFuIDxjb2RlPldFT0Y8L2NvZGU+IHJlc3VsdCBieQordXNpbmcgYDxjb2RlPmZlcnJvcihzdGRpbik8L2NvZGU+JyBhbmQgYDxjb2RlPmZlb2Yoc3RkaW4pPC9jb2RlPicuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9nbXRpbWUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2dtdGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YjhjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9nbXRpbWUuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5nbXRpbWUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIiB0aXRsZT0iVGltZWZucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImRpZmZ0aW1lLmh0bWwjZGlmZnRpbWUiIHRpdGxlPSJkaWZmdGltZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImxvY2FsdGltZS5odG1sI2xvY2FsdGltZSIgdGl0bGU9ImxvY2FsdGltZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZ210aW1lIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImxvY2FsdGltZS5odG1sI2xvY2FsdGltZSI+bG9jYWx0aW1lPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZGlmZnRpbWUuaHRtbCNkaWZmdGltZSI+ZGlmZnRpbWU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUaW1lZm5zLmh0bWwjVGltZWZucyI+VGltZWZuczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNSA8Y29kZT5nbXRpbWU8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgdGltZSB0byBVVEMgdHJhZGl0aW9uYWwgZm9ybTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWdtdGltZS00MzQiPjwvYT48YSBuYW1lPSJpbmRleC1nbXRpbWVfMDA1ZnItNDM1Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7dGltZS5oJmd0OworICAgICBzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3QgKjx2YXI+Y2xvY2s8L3Zhcj4pOworICAgICBzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqPHZhcj5jbG9jazwvdmFyPiwgc3RydWN0IHRtICo8dmFyPnJlczwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+Z210aW1lPC9jb2RlPiB0YWtlcyB0aGUgdGltZSBhdCA8dmFyPmNsb2NrPC92YXI+IHJlcHJlc2VudGluZyB0aGUgbnVtYmVyCitvZiBlbGFwc2VkIHNlY29uZHMgc2luY2UgMDA6MDA6MDAgb24gSmFudWFyeSAxLCAxOTcwLCBVbml2ZXJzYWwKK0Nvb3JkaW5hdGVkIFRpbWUgKFVUQywgYWxzbyBrbm93biBpbiBzb21lIGNvdW50cmllcyBhcyBHTVQsCitHcmVlbndpY2ggTWVhbiB0aW1lKSBhbmQgY29udmVydHMgaXQgdG8gYSA8Y29kZT5zdHJ1Y3QgdG08L2NvZGU+CityZXByZXNlbnRhdGlvbi4KKworICAgPHA+PGNvZGU+Z210aW1lPC9jb2RlPiBjb25zdHJ1Y3RzIHRoZSB0cmFkaXRpb25hbCB0aW1lIHJlcHJlc2VudGF0aW9uIGluIHN0YXRpYworc3RvcmFnZTsgZWFjaCBjYWxsIHRvIDxjb2RlPmdtdGltZTwvY29kZT4gb3IgPGNvZGU+bG9jYWx0aW1lPC9jb2RlPiB3aWxsIG92ZXJ3cml0ZSB0aGUKK2luZm9ybWF0aW9uIGdlbmVyYXRlZCBieSBwcmV2aW91cyBjYWxscyB0byBlaXRoZXIgZnVuY3Rpb24uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK0EgcG9pbnRlciB0byB0aGUgdHJhZGl0aW9uYWwgdGltZSByZXByZXNlbnRhdGlvbiAoPGNvZGU+c3RydWN0IHRtPC9jb2RlPikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+Z210aW1lPC9jb2RlPi4KKworICAgPHA+PGNvZGU+Z210aW1lPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2d2Y3Z0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9ndmN2dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzFlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9ndmN2dC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmd2Y3Z0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJfMDA1Zl8wMDVmZW52XzAwNWZsb2NrLmh0bWwjZ190XzAwNWZfMDA1ZmVudl8wMDVmbG9jayIgdGl0bGU9Il9fZW52X2xvY2siPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJleGl0Lmh0bWwjZXhpdCIgdGl0bGU9ImV4aXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imd2Y3Z0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImV4aXQuaHRtbCNleGl0Ij5leGl0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iXzAwNWZfMDA1ZmVudl8wMDVmbG9jay5odG1sI2dfdF8wMDVmXzAwNWZlbnZfMDA1ZmxvY2siPl9fZW52X2xvY2s8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMTQgPGNvZGU+Z3ZjdnQ8L2NvZGU+LCA8Y29kZT5nY3Z0ZjwvY29kZT4mbWRhc2g7Zm9ybWF0IGRvdWJsZSBvciBmbG9hdCBhcyBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nY3Z0LTI0Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ2N2dGYtMjUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgCisgICAgIGNoYXIgKmdjdnQoZG91YmxlIDx2YXI+dmFsPC92YXI+LCBpbnQgPHZhcj5wcmVjaXNpb248L3Zhcj4sIGNoYXIgKjx2YXI+YnVmPC92YXI+KTsKKyAgICAgY2hhciAqZ2N2dGYoZmxvYXQgPHZhcj52YWw8L3Zhcj4sIGludCA8dmFyPnByZWNpc2lvbjwvdmFyPiwgY2hhciAqPHZhcj5idWY8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmdjdnQ8L2NvZGU+IHdyaXRlcyBhIGZ1bGx5IGZvcm1hdHRlZCBudW1iZXIgYXMgYSBudWxsLXRlcm1pbmF0ZWQKK3N0cmluZyBpbiB0aGUgYnVmZmVyIDxjb2RlPio8L2NvZGU+PHZhcj5idWY8L3Zhcj4uICA8Y29kZT5nZHZ0ZjwvY29kZT4gcHJvZHVjZXMgY29ycmVzcG9uZGluZworY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9ucyBvZiA8Y29kZT5mbG9hdDwvY29kZT4gbnVtYmVycy4KKworICAgPHA+PGNvZGU+Z2N2dDwvY29kZT4gdXNlcyB0aGUgc2FtZSBydWxlcyBhcyB0aGUgPGNvZGU+cHJpbnRmPC9jb2RlPiBmb3JtYXQKK2A8Y29kZT4lLjwvY29kZT48dmFyPnByZWNpc2lvbjwvdmFyPjxjb2RlPmc8L2NvZGU+JyZtZGFzaDtvbmx5IG5lZ2F0aXZlIHZhbHVlcyBhcmUgc2lnbmVkICh3aXRoCitgPGNvZGU+LTwvY29kZT4nKSwgYW5kIGVpdGhlciBleHBvbmVudGlhbCBvciBvcmRpbmFyeSBkZWNpbWFsLWZyYWN0aW9uIGZvcm1hdAoraXMgY2hvc2VuIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyAoc3BlY2lmaWVkIGJ5Cis8dmFyPnByZWNpc2lvbjwvdmFyPikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXN1bHQgaXMgYSBwb2ludGVyIHRvIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgPHZhcj52YWw8L3Zhcj4KKyh0aGUgc2FtZSBhcyB0aGUgYXJndW1lbnQgPHZhcj5idWY8L3Zhcj4pLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorTmVpdGhlciBmdW5jdGlvbiBpcyBBTlNJIEMuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pbmRleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODNmMjAxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5VbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwjZGlyIiB0aXRsZT0iKGRpcikiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iIHRpdGxlPSJJbnRyb2R1Y3Rpb24iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IlRvcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJJbnRyb2R1Y3Rpb24uaHRtbCNJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwjZGlyIj4oZGlyKTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPlRoZSBSZWQgSGF0IG5ld2xpYiBDIExpYnJhcnk8L2gyPgorCis8IS0tIFRoZSBtZW51IGNvbnRlbnRzIGRlcGVuZCBvbiB0aGUgY29uZmlndXJhdGlvbiwgc28gd2UgaW5jbHVkZSB0aGVtIC0tPgorPCEtLSBhcyBhIHNlcGFyYXRlIGZpbGUgLS0+Cis8IS0tIHN3aXRjaCB0byBzZXQgU0lHTkFMUyBvbiBvciBvZmYsIGFjY29yZGluZyB0byB3aGV0aGVyIGNvbmZpZyBwaWNrcyB1cCAtLT4KKzwhLS0gc2lnbmFsIHN1YmRpcmVjdG9yeTogLS0+Cis8dWwgY2xhc3M9Im1lbnUiPgorPGxpPjxhIGFjY2Vzc2tleT0iMSIgaHJlZj0iSW50cm9kdWN0aW9uLmh0bWwjSW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+Cis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+CisKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGxpPjxhIGFjY2Vzc2tleT0iNiIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+CisKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9IlNpZ25hbHMuaHRtbCNTaWduYWxzIj5TaWduYWxzPC9hPgorCis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJUaW1lZm5zLmh0bWwjVGltZWZucyI+VGltZWZuczwvYT4KKzxsaT48YSBhY2Nlc3NrZXk9IjkiIGhyZWY9IkxvY2FsZS5odG1sI0xvY2FsZSI+TG9jYWxlPC9hPgorPGxpPjxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij5SZWVudHJhbmN5PC9hPgorCis8bGk+PGEgaHJlZj0iTWlzYy5odG1sI01pc2MiPk1pc2M8L2E+Cis8bGk+PGEgaHJlZj0iU3lzY2FsbHMuaHRtbCNTeXNjYWxscyI+U3lzY2FsbHM8L2E+Cis8bGk+PGEgaHJlZj0iQXJnbGlzdHMuaHRtbCNBcmdsaXN0cyI+QXJnbGlzdHM8L2E+CisKKzxsaT48YSBocmVmPSJEb2N1bWVudC1JbmRleC5odG1sI0RvY3VtZW50LUluZGV4Ij5Eb2N1bWVudCBJbmRleDwvYT4KKzwvdWw+CisKKyAgIDxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaW5kZXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibWVtY2NweS5odG1sI21lbWNjcHkiPm1lbWNjcHk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJiemVyby5odG1sI2J6ZXJvIj5iemVybzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS40IDxjb2RlPmluZGV4PC9jb2RlPiZtZGFzaDtzZWFyY2ggZm9yIGNoYXJhY3RlciBpbiBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pbmRleC0zNzUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmdzLmgmZ3Q7CisgICAgIGNoYXIgKiBpbmRleChjb25zdCBjaGFyICo8dmFyPnN0cmluZzwvdmFyPiwgaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIDx2YXI+YzwvdmFyPiAoY29udmVydGVkIHRvCithIGNoYXIpIGluIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnN0cmluZzwvdmFyPiAoaW5jbHVkaW5nIHRoZQordGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIpLgorCisgICA8cD5UaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byA8Y29kZT5zdHJjaHI8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbG9jYXRlZCBjaGFyYWN0ZXIsIG9yIGEgbnVsbCBwb2ludGVyCitpZiA8dmFyPmM8L3Zhcj4gZG9lcyBub3Qgb2NjdXIgaW4gPHZhcj5zdHJpbmc8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5pbmRleDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2FsbnVtLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2FsbnVtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhMGJjYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzYWxudW0uaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pc2FsbnVtIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpc2FscGhhLmh0bWwjaXNhbHBoYSIgdGl0bGU9ImlzYWxwaGEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImlzYWxudW0iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXNhbHBoYS5odG1sI2lzYWxwaGEiPmlzYWxwaGE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMSA8Y29kZT5pc2FsbnVtPC9jb2RlPiZtZGFzaDthbHBoYW51bWVyaWMgY2hhcmFjdGVyIHByZWRpY2F0ZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzYWxudW0tMTEwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzYWxudW0oaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNhbG51bTwvY29kZT4gaXMgYSBtYWNybyB3aGljaCBjbGFzc2lmaWVzIEFTQ0lJIGludGVnZXIgdmFsdWVzIGJ5IHRhYmxlCitsb29rdXAuICBJdCBpcyBhIHByZWRpY2F0ZSByZXR1cm5pbmcgbm9uLXplcm8gZm9yIGFscGhhYmV0aWMgb3IKK251bWVyaWMgQVNDSUkgY2hhcmFjdGVycywgYW5kIDxjb2RlPjA8L2NvZGU+IGZvciBvdGhlciBhcmd1bWVudHMuICBJdCBpcyBkZWZpbmVkCitvbmx5IGlmIDx2YXI+YzwvdmFyPiBpcyByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGNoYXIgb3IgaWYgPHZhcj5jPC92YXI+IGlzIEVPRi4KKworICAgPHA+WW91IGNhbiB1c2UgYSBjb21waWxlZCBzdWJyb3V0aW5lIGluc3RlYWQgb2YgdGhlIG1hY3JvIGRlZmluaXRpb24gYnkKK3VuZGVmaW5pbmcgdGhlIG1hY3JvIHVzaW5nIGA8Y29kZT4jdW5kZWYgaXNhbG51bTwvY29kZT4nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5pc2FsbnVtPC9jb2RlPiByZXR1cm5zIG5vbi16ZXJvIGlmIDx2YXI+YzwvdmFyPiBpcyBhIGxldHRlciAoPGNvZGU+YTwvY29kZT4mbmRhc2g7PGNvZGU+ejwvY29kZT4gb3IKKzxjb2RlPkE8L2NvZGU+Jm5kYXNoOzxjb2RlPlo8L2NvZGU+KSBvciBhIGRpZ2l0ICg8Y29kZT4wPC9jb2RlPiZuZGFzaDs8Y29kZT45PC9jb2RlPikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5pc2FsbnVtPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPk5vIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2FscGhhLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2FscGhhLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3MDRlZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzYWxwaGEuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pc2FscGhhIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpc2FsbnVtLmh0bWwjaXNhbG51bSIgdGl0bGU9ImlzYWxudW0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpc2FzY2lpLmh0bWwjaXNhc2NpaSIgdGl0bGU9ImlzYXNjaWkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImlzYWxwaGEiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXNhc2NpaS5odG1sI2lzYXNjaWkiPmlzYXNjaWk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc2FsbnVtLmh0bWwjaXNhbG51bSI+aXNhbG51bTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yIDxjb2RlPmlzYWxwaGE8L2NvZGU+Jm1kYXNoO2FscGhhYmV0aWMgY2hhcmFjdGVyIHByZWRpY2F0ZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzYWxwaGEtMTExIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzYWxwaGEoaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNhbHBoYTwvY29kZT4gaXMgYSBtYWNybyB3aGljaCBjbGFzc2lmaWVzIEFTQ0lJIGludGVnZXIgdmFsdWVzIGJ5IHRhYmxlCitsb29rdXAuICBJdCBpcyBhIHByZWRpY2F0ZSByZXR1cm5pbmcgbm9uLXplcm8gd2hlbiA8dmFyPmM8L3Zhcj4gcmVwcmVzZW50cyBhbgorYWxwaGFiZXRpYyBBU0NJSSBjaGFyYWN0ZXIsIGFuZCAwIG90aGVyd2lzZS4gIEl0IGlzIGRlZmluZWQgb25seSBpZgorPHZhcj5jPC92YXI+IGlzIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgY2hhciBvciBpZiA8dmFyPmM8L3Zhcj4gaXMgRU9GLgorCisgICA8cD5Zb3UgY2FuIHVzZSBhIGNvbXBpbGVkIHN1YnJvdXRpbmUgaW5zdGVhZCBvZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBieQordW5kZWZpbmluZyB0aGUgbWFjcm8gdXNpbmcgYDxjb2RlPiN1bmRlZiBpc2FscGhhPC9jb2RlPicuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmlzYWxwaGE8L2NvZGU+IHJldHVybnMgbm9uLXplcm8gaWYgPHZhcj5jPC92YXI+IGlzIGEgbGV0dGVyICg8Y29kZT5BPC9jb2RlPiZuZGFzaDs8Y29kZT5aPC9jb2RlPiBvcgorPGNvZGU+YTwvY29kZT4mbmRhc2g7PGNvZGU+ejwvY29kZT4pLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXNhbHBoYTwvY29kZT4gaXMgQU5TSSBDLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2FzY2lpLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2FzY2lpLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkOWUwNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzYXNjaWkuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pc2FzY2lpIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpc2FscGhhLmh0bWwjaXNhbHBoYSIgdGl0bGU9ImlzYWxwaGEiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpc2NudHJsLmh0bWwjaXNjbnRybCIgdGl0bGU9ImlzY250cmwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImlzYXNjaWkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXNjbnRybC5odG1sI2lzY250cmwiPmlzY250cmw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc2FscGhhLmh0bWwjaXNhbHBoYSI+aXNhbHBoYTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4zIDxjb2RlPmlzYXNjaWk8L2NvZGU+Jm1kYXNoO0FTQ0lJIGNoYXJhY3RlciBwcmVkaWNhdGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc2FzY2lpLTExMiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc2FzY2lpKGludCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzYXNjaWk8L2NvZGU+IGlzIGEgbWFjcm8gd2hpY2ggcmV0dXJucyBub24temVybyB3aGVuIDx2YXI+YzwvdmFyPiBpcyBhbiBBU0NJSQorY2hhcmFjdGVyLCBhbmQgMCBvdGhlcndpc2UuICBJdCBpcyBkZWZpbmVkIGZvciBhbGwgaW50ZWdlciB2YWx1ZXMuCisKKyAgIDxwPllvdSBjYW4gdXNlIGEgY29tcGlsZWQgc3Vicm91dGluZSBpbnN0ZWFkIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGJ5Cit1bmRlZmluaW5nIHRoZSBtYWNybyB1c2luZyBgPGNvZGU+I3VuZGVmIGlzYXNjaWk8L2NvZGU+Jy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNhc2NpaTwvY29kZT4gcmV0dXJucyBub24temVybyBpZiB0aGUgbG93IG9yZGVyIGJ5dGUgb2YgPHZhcj5jPC92YXI+IGlzIGluIHRoZSByYW5nZQorMCB0byAxMjcgKDxjb2RlPjB4MDA8L2NvZGU+Jm5kYXNoOzxjb2RlPjB4N0Y8L2NvZGU+KS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmlzYXNjaWk8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNjbnRybC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNjbnRybC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGRkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2NudHJsLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXNjbnRybCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXNhc2NpaS5odG1sI2lzYXNjaWkiIHRpdGxlPSJpc2FzY2lpIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXNkaWdpdC5odG1sI2lzZGlnaXQiIHRpdGxlPSJpc2RpZ2l0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc2NudHJsIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImlzZGlnaXQuaHRtbCNpc2RpZ2l0Ij5pc2RpZ2l0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaXNhc2NpaS5odG1sI2lzYXNjaWkiPmlzYXNjaWk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNCA8Y29kZT5pc2NudHJsPC9jb2RlPiZtZGFzaDtjb250cm9sIGNoYXJhY3RlciBwcmVkaWNhdGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc2NudHJsLTExMyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc2NudHJsKGludCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzY250cmw8L2NvZGU+IGlzIGEgbWFjcm8gd2hpY2ggY2xhc3NpZmllcyBBU0NJSSBpbnRlZ2VyIHZhbHVlcyBieSB0YWJsZQorbG9va3VwLiAgSXQgaXMgYSBwcmVkaWNhdGUgcmV0dXJuaW5nIG5vbi16ZXJvIGZvciBjb250cm9sIGNoYXJhY3RlcnMsIGFuZCAwCitmb3Igb3RoZXIgY2hhcmFjdGVycy4gIEl0IGlzIGRlZmluZWQgb25seSBpZiA8dmFyPmM8L3Zhcj4gaXMgcmVwcmVzZW50YWJsZSBhcyBhbgordW5zaWduZWQgY2hhciBvciBpZiA8dmFyPmM8L3Zhcj4gaXMgRU9GLgorCisgICA8cD5Zb3UgY2FuIHVzZSBhIGNvbXBpbGVkIHN1YnJvdXRpbmUgaW5zdGVhZCBvZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBieQordW5kZWZpbmluZyB0aGUgbWFjcm8gdXNpbmcgYDxjb2RlPiN1bmRlZiBpc2NudHJsPC9jb2RlPicuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmlzY250cmw8L2NvZGU+IHJldHVybnMgbm9uLXplcm8gaWYgPHZhcj5jPC92YXI+IGlzIGEgZGVsZXRlIGNoYXJhY3RlciBvciBvcmRpbmFyeQorY29udHJvbCBjaGFyYWN0ZXIgKDxjb2RlPjB4N0Y8L2NvZGU+IG9yIDxjb2RlPjB4MDA8L2NvZGU+Jm5kYXNoOzxjb2RlPjB4MUY8L2NvZGU+KS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmlzY250cmw8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNkaWdpdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNkaWdpdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZGUzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2RpZ2l0Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXNkaWdpdCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXNjbnRybC5odG1sI2lzY250cmwiIHRpdGxlPSJpc2NudHJsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXNsb3dlci5odG1sI2lzbG93ZXIiIHRpdGxlPSJpc2xvd2VyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc2RpZ2l0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImlzbG93ZXIuaHRtbCNpc2xvd2VyIj5pc2xvd2VyPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaXNjbnRybC5odG1sI2lzY250cmwiPmlzY250cmw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNSA8Y29kZT5pc2RpZ2l0PC9jb2RlPiZtZGFzaDtkZWNpbWFsIGRpZ2l0IHByZWRpY2F0ZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzZGlnaXQtMTE0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzZGlnaXQoaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNkaWdpdDwvY29kZT4gaXMgYSBtYWNybyB3aGljaCBjbGFzc2lmaWVzIEFTQ0lJIGludGVnZXIgdmFsdWVzIGJ5IHRhYmxlCitsb29rdXAuICBJdCBpcyBhIHByZWRpY2F0ZSByZXR1cm5pbmcgbm9uLXplcm8gZm9yIGRlY2ltYWwgZGlnaXRzLCBhbmQgMCBmb3IKK290aGVyIGNoYXJhY3RlcnMuICBJdCBpcyBkZWZpbmVkIG9ubHkgaWYgPHZhcj5jPC92YXI+IGlzIHJlcHJlc2VudGFibGUgYXMgYW4KK3Vuc2lnbmVkIGNoYXIgb3IgaWYgPHZhcj5jPC92YXI+IGlzIEVPRi4KKworICAgPHA+WW91IGNhbiB1c2UgYSBjb21waWxlZCBzdWJyb3V0aW5lIGluc3RlYWQgb2YgdGhlIG1hY3JvIGRlZmluaXRpb24gYnkKK3VuZGVmaW5pbmcgdGhlIG1hY3JvIHVzaW5nIGA8Y29kZT4jdW5kZWYgaXNkaWdpdDwvY29kZT4nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5pc2RpZ2l0PC9jb2RlPiByZXR1cm5zIG5vbi16ZXJvIGlmIDx2YXI+YzwvdmFyPiBpcyBhIGRlY2ltYWwgZGlnaXQgKDxjb2RlPjA8L2NvZGU+Jm5kYXNoOzxjb2RlPjk8L2NvZGU+KS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmlzZGlnaXQ8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNsb3dlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNsb3dlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjk4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc2xvd2VyLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXNsb3dlciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXNkaWdpdC5odG1sI2lzZGlnaXQiIHRpdGxlPSJpc2RpZ2l0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXNwcmludC5odG1sI2lzcHJpbnQiIHRpdGxlPSJpc3ByaW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc2xvd2VyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImlzcHJpbnQuaHRtbCNpc3ByaW50Ij5pc3ByaW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaXNkaWdpdC5odG1sI2lzZGlnaXQiPmlzZGlnaXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuNiA8Y29kZT5pc2xvd2VyPC9jb2RlPiZtZGFzaDtsb3dlcmNhc2UgY2hhcmFjdGVyIHByZWRpY2F0ZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzbG93ZXItMTE1Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzbG93ZXIoaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNsb3dlcjwvY29kZT4gaXMgYSBtYWNybyB3aGljaCBjbGFzc2lmaWVzIEFTQ0lJIGludGVnZXIgdmFsdWVzIGJ5IHRhYmxlCitsb29rdXAuICBJdCBpcyBhIHByZWRpY2F0ZSByZXR1cm5pbmcgbm9uLXplcm8gZm9yIG1pbnVzY3VsZXMKKyhsb3dlcmNhc2UgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzKSwgYW5kIDAgZm9yIG90aGVyIGNoYXJhY3RlcnMuIAorSXQgaXMgZGVmaW5lZCBvbmx5IGlmIDx2YXI+YzwvdmFyPiBpcyByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGNoYXIgb3IgaWYKKzx2YXI+YzwvdmFyPiBpcyBFT0YuCisKKyAgIDxwPllvdSBjYW4gdXNlIGEgY29tcGlsZWQgc3Vicm91dGluZSBpbnN0ZWFkIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGJ5Cit1bmRlZmluaW5nIHRoZSBtYWNybyB1c2luZyBgPGNvZGU+I3VuZGVmIGlzbG93ZXI8L2NvZGU+Jy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNsb3dlcjwvY29kZT4gcmV0dXJucyBub24temVybyBpZiA8dmFyPmM8L3Zhcj4gaXMgYSBsb3dlcmNhc2UgbGV0dGVyICg8Y29kZT5hPC9jb2RlPiZuZGFzaDs8Y29kZT56PC9jb2RlPikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5pc2xvd2VyPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzcHJpbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzcHJpbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQ5NDM4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNwcmludC5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmlzcHJpbnQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImlzbG93ZXIuaHRtbCNpc2xvd2VyIiB0aXRsZT0iaXNsb3dlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImlzcHVuY3QuaHRtbCNpc3B1bmN0IiB0aXRsZT0iaXNwdW5jdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaXNwcmludCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpc3B1bmN0Lmh0bWwjaXNwdW5jdCI+aXNwdW5jdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImlzbG93ZXIuaHRtbCNpc2xvd2VyIj5pc2xvd2VyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjcgPGNvZGU+aXNwcmludDwvY29kZT4sIDxjb2RlPmlzZ3JhcGg8L2NvZGU+Jm1kYXNoO3ByaW50YWJsZSBjaGFyYWN0ZXIgcHJlZGljYXRlczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzcHJpbnQtMTE2Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNncmFwaC0xMTciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjdHlwZS5oJmd0OworICAgICBpbnQgaXNwcmludChpbnQgPHZhcj5jPC92YXI+KTsKKyAgICAgaW50IGlzZ3JhcGgoaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNwcmludDwvY29kZT4gaXMgYSBtYWNybyB3aGljaCBjbGFzc2lmaWVzIEFTQ0lJIGludGVnZXIgdmFsdWVzIGJ5IHRhYmxlCitsb29rdXAuICBJdCBpcyBhIHByZWRpY2F0ZSByZXR1cm5pbmcgbm9uLXplcm8gZm9yIHByaW50YWJsZQorY2hhcmFjdGVycywgYW5kIDAgZm9yIG90aGVyIGNoYXJhY3RlciBhcmd1bWVudHMuIAorSXQgaXMgZGVmaW5lZCBvbmx5IGlmIDx2YXI+YzwvdmFyPiBpcyByZXByZXNlbnRhYmxlIGFzIGFuIHVuc2lnbmVkIGNoYXIgb3IgaWYKKzx2YXI+YzwvdmFyPiBpcyBFT0YuCisKKyAgIDxwPllvdSBjYW4gdXNlIGEgY29tcGlsZWQgc3Vicm91dGluZSBpbnN0ZWFkIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGJ5Cit1bmRlZmluaW5nIGVpdGhlciBtYWNybyB1c2luZyBgPGNvZGU+I3VuZGVmIGlzcHJpbnQ8L2NvZGU+JyBvciBgPGNvZGU+I3VuZGVmIGlzZ3JhcGg8L2NvZGU+Jy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNwcmludDwvY29kZT4gcmV0dXJucyBub24temVybyBpZiA8dmFyPmM8L3Zhcj4gaXMgYSBwcmludGluZyBjaGFyYWN0ZXIsCisoPGNvZGU+MHgyMDwvY29kZT4mbmRhc2g7PGNvZGU+MHg3RTwvY29kZT4pLiAKKzxjb2RlPmlzZ3JhcGg8L2NvZGU+IGJlaGF2ZXMgaWRlbnRpY2FsbHkgdG8gPGNvZGU+aXNwcmludDwvY29kZT4sIGV4Y2VwdCB0aGF0IHRoZSBzcGFjZQorY2hhcmFjdGVyICg8Y29kZT4weDIwPC9jb2RlPikgaXMgZXhjbHVkZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3ByaW50PC9jb2RlPiBhbmQgPGNvZGU+aXNncmFwaDwvY29kZT4gYXJlIEFOU0kgQy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNwdW5jdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXNwdW5jdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTAxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3B1bmN0Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXNwdW5jdCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXNwcmludC5odG1sI2lzcHJpbnQiIHRpdGxlPSJpc3ByaW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXNzcGFjZS5odG1sI2lzc3BhY2UiIHRpdGxlPSJpc3NwYWNlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc3B1bmN0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Imlzc3BhY2UuaHRtbCNpc3NwYWNlIj5pc3NwYWNlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaXNwcmludC5odG1sI2lzcHJpbnQiPmlzcHJpbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuOCA8Y29kZT5pc3B1bmN0PC9jb2RlPiZtZGFzaDtwdW5jdHVhdGlvbiBjaGFyYWN0ZXIgcHJlZGljYXRlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaXNwdW5jdC0xMTgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjdHlwZS5oJmd0OworICAgICBpbnQgaXNwdW5jdChpbnQgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5pc3B1bmN0PC9jb2RlPiBpcyBhIG1hY3JvIHdoaWNoIGNsYXNzaWZpZXMgQVNDSUkgaW50ZWdlciB2YWx1ZXMgYnkgdGFibGUKK2xvb2t1cC4gIEl0IGlzIGEgcHJlZGljYXRlIHJldHVybmluZyBub24temVybyBmb3IgcHJpbnRhYmxlCitwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLCBhbmQgMCBmb3Igb3RoZXIgY2hhcmFjdGVycy4gIEl0IGlzIGRlZmluZWQgb25seQoraWYgPHZhcj5jPC92YXI+IGlzIHJlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgY2hhciBvciBpZiA8dmFyPmM8L3Zhcj4gaXMgRU9GLgorCisgICA8cD5Zb3UgY2FuIHVzZSBhIGNvbXBpbGVkIHN1YnJvdXRpbmUgaW5zdGVhZCBvZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBieQordW5kZWZpbmluZyB0aGUgbWFjcm8gdXNpbmcgYDxjb2RlPiN1bmRlZiBpc3B1bmN0PC9jb2RlPicuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmlzcHVuY3Q8L2NvZGU+IHJldHVybnMgbm9uLXplcm8gaWYgPHZhcj5jPC92YXI+IGlzIGEgcHJpbnRhYmxlIHB1bmN0dWF0aW9uIGNoYXJhY3RlcgorKDxjb2RlPmlzZ3JhcGgoPC9jb2RlPjx2YXI+YzwvdmFyPjxjb2RlPikgJmFtcDsmYW1wOyAhaXNhbG51bSg8L2NvZGU+PHZhcj5jPC92YXI+PGNvZGU+KTwvY29kZT4pLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXNwdW5jdDwvY29kZT4gaXMgQU5TSSBDLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3NwYWNlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3NwYWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3OWZkMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzc3BhY2UuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pc3NwYWNlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpc3B1bmN0Lmh0bWwjaXNwdW5jdCIgdGl0bGU9ImlzcHVuY3QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpc3VwcGVyLmh0bWwjaXN1cHBlciIgdGl0bGU9ImlzdXBwZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imlzc3BhY2UiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXN1cHBlci5odG1sI2lzdXBwZXIiPmlzdXBwZXI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3B1bmN0Lmh0bWwjaXNwdW5jdCI+aXNwdW5jdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My45IDxjb2RlPmlzc3BhY2U8L2NvZGU+Jm1kYXNoO3doaXRlc3BhY2UgY2hhcmFjdGVyIHByZWRpY2F0ZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzc3BhY2UtMTE5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzc3BhY2UoaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNzcGFjZTwvY29kZT4gaXMgYSBtYWNybyB3aGljaCBjbGFzc2lmaWVzIEFTQ0lJIGludGVnZXIgdmFsdWVzIGJ5IHRhYmxlCitsb29rdXAuICBJdCBpcyBhIHByZWRpY2F0ZSByZXR1cm5pbmcgbm9uLXplcm8gZm9yIHdoaXRlc3BhY2UKK2NoYXJhY3RlcnMsIGFuZCAwIGZvciBvdGhlciBjaGFyYWN0ZXJzLiAgSXQgaXMgZGVmaW5lZCBvbmx5IHdoZW4gPGNvZGU+aXNhc2NpaTwvY29kZT4oPHZhcj5jPC92YXI+KSBpcyB0cnVlIG9yIDx2YXI+YzwvdmFyPiBpcyBFT0YuCisKKyAgIDxwPllvdSBjYW4gdXNlIGEgY29tcGlsZWQgc3Vicm91dGluZSBpbnN0ZWFkIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGJ5Cit1bmRlZmluaW5nIHRoZSBtYWNybyB1c2luZyBgPGNvZGU+I3VuZGVmIGlzc3BhY2U8L2NvZGU+Jy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXNzcGFjZTwvY29kZT4gcmV0dXJucyBub24temVybyBpZiA8dmFyPmM8L3Zhcj4gaXMgYSBzcGFjZSwgdGFiLCBjYXJyaWFnZSByZXR1cm4sIG5ldworbGluZSwgdmVydGljYWwgdGFiLCBvciBmb3JtZmVlZCAoPGNvZGU+MHgwOTwvY29kZT4mbmRhc2g7PGNvZGU+MHgwRDwvY29kZT4sIDxjb2RlPjB4MjA8L2NvZGU+KS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmlzc3BhY2U8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN1cHBlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN1cHBlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YjQ3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3VwcGVyLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN1cHBlciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXNzcGFjZS5odG1sI2lzc3BhY2UiIHRpdGxlPSJpc3NwYWNlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXN4ZGlnaXQuaHRtbCNpc3hkaWdpdCIgdGl0bGU9ImlzeGRpZ2l0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc3VwcGVyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImlzeGRpZ2l0Lmh0bWwjaXN4ZGlnaXQiPmlzeGRpZ2l0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaXNzcGFjZS5odG1sI2lzc3BhY2UiPmlzc3BhY2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMTAgPGNvZGU+aXN1cHBlcjwvY29kZT4mbWRhc2g7dXBwZXJjYXNlIGNoYXJhY3RlciBwcmVkaWNhdGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc3VwcGVyLTEyMCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc3VwcGVyKGludCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzdXBwZXI8L2NvZGU+IGlzIGEgbWFjcm8gd2hpY2ggY2xhc3NpZmllcyBBU0NJSSBpbnRlZ2VyIHZhbHVlcyBieSB0YWJsZQorbG9va3VwLiAgSXQgaXMgYSBwcmVkaWNhdGUgcmV0dXJuaW5nIG5vbi16ZXJvIGZvciB1cHBlcmNhc2UgbGV0dGVycworKDxjb2RlPkE8L2NvZGU+Jm5kYXNoOzxjb2RlPlo8L2NvZGU+KSwgYW5kIDAgZm9yIG90aGVyIGNoYXJhY3RlcnMuICBJdCBpcyBkZWZpbmVkIG9ubHkgd2hlbgorPGNvZGU+aXNhc2NpaTwvY29kZT4oPHZhcj5jPC92YXI+KSBpcyB0cnVlIG9yIDx2YXI+YzwvdmFyPiBpcyBFT0YuCisKKyAgIDxwPllvdSBjYW4gdXNlIGEgY29tcGlsZWQgc3Vicm91dGluZSBpbnN0ZWFkIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGJ5Cit1bmRlZmluaW5nIHRoZSBtYWNybyB1c2luZyBgPGNvZGU+I3VuZGVmIGlzdXBwZXI8L2NvZGU+Jy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXN1cHBlcjwvY29kZT4gcmV0dXJucyBub24temVybyBpZiA8dmFyPmM8L3Zhcj4gaXMgYSB1cHBlcmNhc2UgbGV0dGVyIChBLVopLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN1cHBlcjwvY29kZT4gaXMgQU5TSSBDLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3dhbG51bS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3YWxudW0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWI0YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3YWxudW0uaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pc3dhbG51bSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idG91cHBlci5odG1sI3RvdXBwZXIiIHRpdGxlPSJ0b3VwcGVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXN3YWxwaGEuaHRtbCNpc3dhbHBoYSIgdGl0bGU9Imlzd2FscGhhIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc3dhbG51bSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpc3dhbHBoYS5odG1sI2lzd2FscGhhIj5pc3dhbHBoYTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InRvdXBwZXIuaHRtbCN0b3VwcGVyIj50b3VwcGVyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjE1IDxjb2RlPmlzd2FsbnVtPC9jb2RlPiZtZGFzaDthbHBoYW51bWVyaWMgd2lkZSBjaGFyYWN0ZXIgdGVzdDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzd2FsbnVtLTEyNyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djdHlwZS5oJmd0OworICAgICBpbnQgaXN3YWxudW0od2ludF90IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3YWxudW08L2NvZGU+IGlzIGEgZnVuY3Rpb24gd2hpY2ggY2xhc3NpZmllcyB3aWRlLWNoYXJhY3RlciB2YWx1ZXMgdGhhdAorYXJlIGFscGhhbnVtZXJpYy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3YWxudW08L2NvZGU+IHJldHVybnMgbm9uLXplcm8gaWYgPHZhcj5jPC92YXI+IGlzIGEgYWxwaGFudW1lcmljIHdpZGUgY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3YWxudW08L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3YWxwaGEuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2FscGhhLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlYmRhYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2FscGhhLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN3YWxwaGEgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imlzd2FsbnVtLmh0bWwjaXN3YWxudW0iIHRpdGxlPSJpc3dhbG51bSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Imlzd2JsYW5rLmh0bWwjaXN3YmxhbmsiIHRpdGxlPSJpc3dibGFuayI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaXN3YWxwaGEiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXN3YmxhbmsuaHRtbCNpc3dibGFuayI+aXN3Ymxhbms8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3dhbG51bS5odG1sI2lzd2FsbnVtIj5pc3dhbG51bTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xNiA8Y29kZT5pc3dhbHBoYTwvY29kZT4mbWRhc2g7YWxwaGFiZXRpYyB3aWRlIGNoYXJhY3RlciB0ZXN0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaXN3YWxwaGEtMTI4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc3dhbHBoYSh3aW50X3QgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5pc3dhbHBoYTwvY29kZT4gaXMgYSBmdW5jdGlvbiB3aGljaCBjbGFzc2lmaWVzIHdpZGUtY2hhcmFjdGVyIHZhbHVlcyB0aGF0CithcmUgYWxwaGFiZXRpYy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3YWxwaGE8L2NvZGU+IHJldHVybnMgbm9uLXplcm8gaWYgPHZhcj5jPC92YXI+IGlzIGFuIGFscGhhYmV0aWMgd2lkZSBjaGFyYWN0ZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3dhbHBoYTwvY29kZT4gaXMgQzk5LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3dibGFuay5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3YmxhbmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjAxMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3YmxhbmsuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pc3dibGFuayAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXN3YWxwaGEuaHRtbCNpc3dhbHBoYSIgdGl0bGU9Imlzd2FscGhhIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXN3Y250cmwuaHRtbCNpc3djbnRybCIgdGl0bGU9Imlzd2NudHJsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc3dibGFuayI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpc3djbnRybC5odG1sI2lzd2NudHJsIj5pc3djbnRybDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Imlzd2FscGhhLmh0bWwjaXN3YWxwaGEiPmlzd2FscGhhPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjE4IDxjb2RlPmlzd2JsYW5rPC9jb2RlPiZtZGFzaDtibGFuayB3aWRlIGNoYXJhY3RlciB0ZXN0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaXN3YmxhbmstMTMwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc3dibGFuayh3aW50X3QgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5pc3dibGFuazwvY29kZT4gaXMgYSBmdW5jdGlvbiB3aGljaCBjbGFzc2lmaWVzIHdpZGUtY2hhcmFjdGVyIHZhbHVlcyB0aGF0CithcmUgY2F0ZWdvcml6ZWQgYXMgYmxhbmsuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd2JsYW5rPC9jb2RlPiByZXR1cm5zIG5vbi16ZXJvIGlmIDx2YXI+YzwvdmFyPiBpcyBhIGJsYW5rIHdpZGUgY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3Ymxhbms8L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3Y250cmwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2NudHJsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNkMDM5YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2NudHJsLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN3Y250cmwgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imlzd2JsYW5rLmh0bWwjaXN3YmxhbmsiIHRpdGxlPSJpc3dibGFuayI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Imlzd2RpZ2l0Lmh0bWwjaXN3ZGlnaXQiIHRpdGxlPSJpc3dkaWdpdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaXN3Y250cmwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXN3ZGlnaXQuaHRtbCNpc3dkaWdpdCI+aXN3ZGlnaXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3dibGFuay5odG1sI2lzd2JsYW5rIj5pc3dibGFuazwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xNyA8Y29kZT5pc3djbnRybDwvY29kZT4mbWRhc2g7Y29udHJvbCB3aWRlIGNoYXJhY3RlciB0ZXN0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaXN3Y250cmwtMTI5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc3djbnRybCh3aW50X3QgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5pc3djbnRybDwvY29kZT4gaXMgYSBmdW5jdGlvbiB3aGljaCBjbGFzc2lmaWVzIHdpZGUtY2hhcmFjdGVyIHZhbHVlcyB0aGF0CithcmUgY2F0ZWdvcml6ZWQgYXMgY29udHJvbCBjaGFyYWN0ZXJzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3djbnRybDwvY29kZT4gcmV0dXJucyBub24temVybyBpZiA8dmFyPmM8L3Zhcj4gaXMgYSBjb250cm9sIHdpZGUgY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3Y250cmw8L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3Y3R5cGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2N0eXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5MjQ4YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2N0eXBlLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN3Y3R5cGUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imlzd3hkaWdpdC5odG1sI2lzd3hkaWdpdCIgdGl0bGU9Imlzd3hkaWdpdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IndjdHlwZS5odG1sI3djdHlwZSIgdGl0bGU9IndjdHlwZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaXN3Y3R5cGUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2N0eXBlLmh0bWwjd2N0eXBlIj53Y3R5cGU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3d4ZGlnaXQuaHRtbCNpc3d4ZGlnaXQiPmlzd3hkaWdpdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yNyA8Y29kZT5pc3djdHlwZTwvY29kZT4mbWRhc2g7ZXh0ZW5zaWJsZSB3aWRlLWNoYXJhY3RlciB0ZXN0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaXN3Y3R5cGUtMTM5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc3djdHlwZSh3aW50X3QgPHZhcj5jPC92YXI+LCB3Y3R5cGVfdCA8dmFyPmRlc2M8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd2N0eXBlPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGNsYXNzaWZpZXMgd2lkZS1jaGFyYWN0ZXIgdmFsdWVzIHVzaW5nIHRoZQord2lkZS1jaGFyYWN0ZXIgdGVzdCBzcGVjaWZpZWQgYnkgPHZhcj5kZXNjPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3djdHlwZTwvY29kZT4gcmV0dXJucyBub24temVybyBpZiBhbmQgb25seSBpZiA8dmFyPmM8L3Zhcj4gbWF0Y2hlcyB0aGUgdGVzdCBzcGVjaWZpZWQgYnkgPHZhcj5kZXNjPC92YXI+LiAKK0lmIDx2YXI+ZGVzYzwvdmFyPiBpcyB1bmtub3duLCB6ZXJvIGlzIHJldHVybmVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3Y3R5cGU8L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3ZGlnaXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2RpZ2l0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhY2YxNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2RpZ2l0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN3ZGlnaXQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imlzd2NudHJsLmh0bWwjaXN3Y250cmwiIHRpdGxlPSJpc3djbnRybCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Imlzd2dyYXBoLmh0bWwjaXN3Z3JhcGgiIHRpdGxlPSJpc3dncmFwaCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaXN3ZGlnaXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXN3Z3JhcGguaHRtbCNpc3dncmFwaCI+aXN3Z3JhcGg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3djbnRybC5odG1sI2lzd2NudHJsIj5pc3djbnRybDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xOSA8Y29kZT5pc3dkaWdpdDwvY29kZT4mbWRhc2g7ZGVjaW1hbCBkaWdpdCB3aWRlIGNoYXJhY3RlciB0ZXN0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaXN3ZGlnaXQtMTMxIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc3dkaWdpdCh3aW50X3QgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5pc3dkaWdpdDwvY29kZT4gaXMgYSBmdW5jdGlvbiB3aGljaCBjbGFzc2lmaWVzIHdpZGUtY2hhcmFjdGVyIHZhbHVlcyB0aGF0CithcmUgZGVjaW1hbCBkaWdpdHMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd2RpZ2l0PC9jb2RlPiByZXR1cm5zIG5vbi16ZXJvIGlmIDx2YXI+YzwvdmFyPiBpcyBhIGRlY2ltYWwgZGlnaXQgd2lkZSBjaGFyYWN0ZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3dkaWdpdDwvY29kZT4gaXMgQzk5LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3dncmFwaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3Z3JhcGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTY4ZGNhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3Z3JhcGguaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pc3dncmFwaCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXN3ZGlnaXQuaHRtbCNpc3dkaWdpdCIgdGl0bGU9Imlzd2RpZ2l0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXN3bG93ZXIuaHRtbCNpc3dsb3dlciIgdGl0bGU9Imlzd2xvd2VyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc3dncmFwaCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpc3dsb3dlci5odG1sI2lzd2xvd2VyIj5pc3dsb3dlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Imlzd2RpZ2l0Lmh0bWwjaXN3ZGlnaXQiPmlzd2RpZ2l0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjIwIDxjb2RlPmlzd2dyYXBoPC9jb2RlPiZtZGFzaDtncmFwaGljIHdpZGUgY2hhcmFjdGVyIHRlc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc3dncmFwaC0xMzIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzd2dyYXBoKHdpbnRfdCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd2dyYXBoPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGNsYXNzaWZpZXMgd2lkZS1jaGFyYWN0ZXIgdmFsdWVzIHRoYXQKK2FyZSBncmFwaGljLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3dncmFwaDwvY29kZT4gcmV0dXJucyBub24temVybyBpZiA8dmFyPmM8L3Zhcj4gaXMgYSBncmFwaGljIHdpZGUgY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3Z3JhcGg8L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3bG93ZXIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2xvd2VyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjM2NhOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd2xvd2VyLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN3bG93ZXIgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imlzd2dyYXBoLmh0bWwjaXN3Z3JhcGgiIHRpdGxlPSJpc3dncmFwaCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Imlzd3ByaW50Lmh0bWwjaXN3cHJpbnQiIHRpdGxlPSJpc3dwcmludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaXN3bG93ZXIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXN3cHJpbnQuaHRtbCNpc3dwcmludCI+aXN3cHJpbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3dncmFwaC5odG1sI2lzd2dyYXBoIj5pc3dncmFwaDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yMSA8Y29kZT5pc3dsb3dlcjwvY29kZT4mbWRhc2g7bG93ZXJjYXNlIHdpZGUgY2hhcmFjdGVyIHRlc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc3dsb3dlci0xMzMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzd2xvd2VyKHdpbnRfdCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd2xvd2VyPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGNsYXNzaWZpZXMgd2lkZS1jaGFyYWN0ZXIgdmFsdWVzIHRoYXQKK2hhdmUgdXBwZXJjYXNlIHRyYW5zbGF0aW9ucy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3bG93ZXI8L2NvZGU+IHJldHVybnMgbm9uLXplcm8gaWYgPHZhcj5jPC92YXI+IGlzIGEgbG93ZXJjYXNlIHdpZGUgY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3bG93ZXI8L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3cHJpbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd3ByaW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0MzYxNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd3ByaW50Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN3cHJpbnQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imlzd2xvd2VyLmh0bWwjaXN3bG93ZXIiIHRpdGxlPSJpc3dsb3dlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Imlzd3B1bmN0Lmh0bWwjaXN3cHVuY3QiIHRpdGxlPSJpc3dwdW5jdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaXN3cHJpbnQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXN3cHVuY3QuaHRtbCNpc3dwdW5jdCI+aXN3cHVuY3Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3dsb3dlci5odG1sI2lzd2xvd2VyIj5pc3dsb3dlcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yMiA8Y29kZT5pc3dwcmludDwvY29kZT4mbWRhc2g7cHJpbnRhYmxlIHdpZGUgY2hhcmFjdGVyIHRlc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc3dwcmludC0xMzQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzd3ByaW50KHdpbnRfdCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd3ByaW50PC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGNsYXNzaWZpZXMgd2lkZS1jaGFyYWN0ZXIgdmFsdWVzIHRoYXQKK2FyZSBwcmludGFibGUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd3ByaW50PC9jb2RlPiByZXR1cm5zIG5vbi16ZXJvIGlmIDx2YXI+YzwvdmFyPiBpcyBhIHByaW50YWJsZSB3aWRlIGNoYXJhY3Rlci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd3ByaW50PC9jb2RlPiBpcyBDOTkuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd3B1bmN0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3dwdW5jdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTdjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3dwdW5jdC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmlzd3B1bmN0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpc3dwcmludC5odG1sI2lzd3ByaW50IiB0aXRsZT0iaXN3cHJpbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpc3dzcGFjZS5odG1sI2lzd3NwYWNlIiB0aXRsZT0iaXN3c3BhY2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imlzd3B1bmN0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Imlzd3NwYWNlLmh0bWwjaXN3c3BhY2UiPmlzd3NwYWNlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaXN3cHJpbnQuaHRtbCNpc3dwcmludCI+aXN3cHJpbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMjMgPGNvZGU+aXN3cHVuY3Q8L2NvZGU+Jm1kYXNoO3B1bmN0dWF0aW9uIHdpZGUgY2hhcmFjdGVyIHRlc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc3dwdW5jdC0xMzUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzd3B1bmN0KHdpbnRfdCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd3B1bmN0PC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGNsYXNzaWZpZXMgd2lkZS1jaGFyYWN0ZXIgdmFsdWVzIHRoYXQKK2FyZSBwdW5jdHVhdGlvbi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3cHVuY3Q8L2NvZGU+IHJldHVybnMgbm9uLXplcm8gaWYgPHZhcj5jPC92YXI+IGlzIGEgcHVuY3R1YXRpb24gd2lkZSBjaGFyYWN0ZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3dwdW5jdDwvY29kZT4gaXMgQzk5LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3dzcGFjZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3c3BhY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjE2YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3c3BhY2UuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5pc3dzcGFjZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXN3cHVuY3QuaHRtbCNpc3dwdW5jdCIgdGl0bGU9Imlzd3B1bmN0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXN3dXBwZXIuaHRtbCNpc3d1cHBlciIgdGl0bGU9Imlzd3VwcGVyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJpc3dzcGFjZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpc3d1cHBlci5odG1sI2lzd3VwcGVyIj5pc3d1cHBlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Imlzd3B1bmN0Lmh0bWwjaXN3cHVuY3QiPmlzd3B1bmN0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjI0IDxjb2RlPmlzd3NwYWNlPC9jb2RlPiZtZGFzaDt3aGl0ZXNwYWNlIHdpZGUgY2hhcmFjdGVyIHRlc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc3dzcGFjZS0xMzYiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzd3NwYWNlKHdpbnRfdCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd3NwYWNlPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGNsYXNzaWZpZXMgd2lkZS1jaGFyYWN0ZXIgdmFsdWVzIHRoYXQKK2FyZSBjYXRlZ29yaXplZCBhcyB3aGl0ZXNwYWNlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3dzcGFjZTwvY29kZT4gcmV0dXJucyBub24temVybyBpZiA8dmFyPmM8L3Zhcj4gaXMgYSB3aGl0ZXNwYWNlIHdpZGUgY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3c3BhY2U8L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3dXBwZXIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd3VwcGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5MWI5OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzd3VwcGVyLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN3dXBwZXIgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imlzd3NwYWNlLmh0bWwjaXN3c3BhY2UiIHRpdGxlPSJpc3dzcGFjZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Imlzd3hkaWdpdC5odG1sI2lzd3hkaWdpdCIgdGl0bGU9Imlzd3hkaWdpdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaXN3dXBwZXIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXN3eGRpZ2l0Lmh0bWwjaXN3eGRpZ2l0Ij5pc3d4ZGlnaXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3dzcGFjZS5odG1sI2lzd3NwYWNlIj5pc3dzcGFjZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4yNSA8Y29kZT5pc3d1cHBlcjwvY29kZT4mbWRhc2g7dXBwZXJjYXNlIHdpZGUgY2hhcmFjdGVyIHRlc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pc3d1cHBlci0xMzciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzd3VwcGVyKHdpbnRfdCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzd3VwcGVyPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGNsYXNzaWZpZXMgd2lkZS1jaGFyYWN0ZXIgdmFsdWVzIHRoYXQKK2hhdmUgdXBwZXJjYXNlIHRyYW5zbGF0aW9ucy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3dXBwZXI8L2NvZGU+IHJldHVybnMgbm9uLXplcm8gaWYgPHZhcj5jPC92YXI+IGlzIGEgdXBwZXJjYXNlIHdpZGUgY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3dXBwZXI8L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3eGRpZ2l0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3d4ZGlnaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWYzYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvaXN3eGRpZ2l0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXN3eGRpZ2l0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpc3d1cHBlci5odG1sI2lzd3VwcGVyIiB0aXRsZT0iaXN3dXBwZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpc3djdHlwZS5odG1sI2lzd2N0eXBlIiB0aXRsZT0iaXN3Y3R5cGUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imlzd3hkaWdpdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpc3djdHlwZS5odG1sI2lzd2N0eXBlIj5pc3djdHlwZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Imlzd3VwcGVyLmh0bWwjaXN3dXBwZXIiPmlzd3VwcGVyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjI2IDxjb2RlPmlzd3hkaWdpdDwvY29kZT4mbWRhc2g7aGV4YWRlY2ltYWwgZGlnaXQgd2lkZSBjaGFyYWN0ZXIgdGVzdDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzd3hkaWdpdC0xMzgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y3R5cGUuaCZndDsKKyAgICAgaW50IGlzd3hkaWdpdCh3aW50X3QgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5pc3d4ZGlnaXQ8L2NvZGU+IGlzIGEgZnVuY3Rpb24gd2hpY2ggY2xhc3NpZmllcyB3aWRlIGNoYXJhY3RlciB2YWx1ZXMgdGhhdAorYXJlIGhleGFkZWNpbWFsIGRpZ2l0cy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3eGRpZ2l0PC9jb2RlPiByZXR1cm5zIG5vbi16ZXJvIGlmIDx2YXI+YzwvdmFyPiBpcyBhIGhleGFkZWNpbWFsIGRpZ2l0IHdpZGUgY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN3eGRpZ2l0PC9jb2RlPiBpcyBDOTkuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2lzeGRpZ2l0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3hkaWdpdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTdmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9pc3hkaWdpdC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmlzeGRpZ2l0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpc3VwcGVyLmh0bWwjaXN1cHBlciIgdGl0bGU9ImlzdXBwZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ0b2FzY2lpLmh0bWwjdG9hc2NpaSIgdGl0bGU9InRvYXNjaWkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImlzeGRpZ2l0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InRvYXNjaWkuaHRtbCN0b2FzY2lpIj50b2FzY2lpPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaXN1cHBlci5odG1sI2lzdXBwZXIiPmlzdXBwZXI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMTEgPGNvZGU+aXN4ZGlnaXQ8L2NvZGU+Jm1kYXNoO2hleGFkZWNpbWFsIGRpZ2l0IHByZWRpY2F0ZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzeGRpZ2l0LTEyMSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2N0eXBlLmgmZ3Q7CisgICAgIGludCBpc3hkaWdpdChpbnQgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5pc3hkaWdpdDwvY29kZT4gaXMgYSBtYWNybyB3aGljaCBjbGFzc2lmaWVzIEFTQ0lJIGludGVnZXIgdmFsdWVzIGJ5IHRhYmxlCitsb29rdXAuICBJdCBpcyBhIHByZWRpY2F0ZSByZXR1cm5pbmcgbm9uLXplcm8gZm9yIGhleGFkZWNpbWFsIGRpZ2l0cywKK2FuZCA8Y29kZT4wPC9jb2RlPiBmb3Igb3RoZXIgY2hhcmFjdGVycy4gIEl0IGlzIGRlZmluZWQgb25seSBpZiA8dmFyPmM8L3Zhcj4gaXMKK3JlcHJlc2VudGFibGUgYXMgYW4gdW5zaWduZWQgY2hhciBvciBpZiA8dmFyPmM8L3Zhcj4gaXMgRU9GLgorCisgICA8cD5Zb3UgY2FuIHVzZSBhIGNvbXBpbGVkIHN1YnJvdXRpbmUgaW5zdGVhZCBvZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBieQordW5kZWZpbmluZyB0aGUgbWFjcm8gdXNpbmcgYDxjb2RlPiN1bmRlZiBpc3hkaWdpdDwvY29kZT4nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5pc3hkaWdpdDwvY29kZT4gcmV0dXJucyBub24temVybyBpZiA8dmFyPmM8L3Zhcj4gaXMgYSBoZXhhZGVjaW1hbCBkaWdpdAorKDxjb2RlPjA8L2NvZGU+Jm5kYXNoOzxjb2RlPjk8L2NvZGU+LCA8Y29kZT5hPC9jb2RlPiZuZGFzaDs8Y29kZT5mPC9jb2RlPiwgb3IgPGNvZGU+QTwvY29kZT4mbmRhc2g7PGNvZGU+RjwvY29kZT4pLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXN4ZGlnaXQ8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbGFicy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbGFicy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOWNiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9sYWJzLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bGFicyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2V0ZW52Lmh0bWwjZ2V0ZW52IiB0aXRsZT0iZ2V0ZW52Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibGRpdi5odG1sI2xkaXYiIHRpdGxlPSJsZGl2Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJsYWJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImxkaXYuaHRtbCNsZGl2Ij5sZGl2PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZ2V0ZW52Lmh0bWwjZ2V0ZW52Ij5nZXRlbnY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMTkgPGNvZGU+bGFiczwvY29kZT4mbWRhc2g7bG9uZyBpbnRlZ2VyIGFic29sdXRlIHZhbHVlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGFicy0zMyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBsb25nIGxhYnMobG9uZyA8dmFyPmk8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmxhYnM8L2NvZGU+IHJldHVybnMKK3RoZSBhYnNvbHV0ZSB2YWx1ZSBvZiA8dmFyPmk8L3Zhcj4gKGFsc28gY2FsbGVkIHRoZSBtYWduaXR1ZGUKK29mIDx2YXI+aTwvdmFyPikuICBUaGF0IGlzLCBpZiA8dmFyPmk8L3Zhcj4gaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgdGhlIG9wcG9zaXRlCitvZiA8dmFyPmk8L3Zhcj4sIGJ1dCBpZiA8dmFyPmk8L3Zhcj4gaXMgbm9ubmVnYXRpdmUgdGhlIHJlc3VsdCBpcyA8dmFyPmk8L3Zhcj4uCisKKyAgIDxwPlRoZSBzaW1pbGFyIGZ1bmN0aW9uIDxjb2RlPmFiczwvY29kZT4gdXNlcyBhbmQgcmV0dXJucyA8Y29kZT5pbnQ8L2NvZGU+IHJhdGhlciB0aGFuCis8Y29kZT5sb25nPC9jb2RlPiB2YWx1ZXMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXN1bHQgaXMgYSBub25uZWdhdGl2ZSBsb25nIGludGVnZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5sYWJzPC9jb2RlPiBpcyBBTlNJLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmUgY2FsbHMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2xkaXYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2xkaXYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGZlMjE5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbGRpdi5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmxkaXYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImxhYnMuaHRtbCNsYWJzIiB0aXRsZT0ibGFicyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImxsYWJzLmh0bWwjbGxhYnMiIHRpdGxlPSJsbGFicyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibGRpdiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJsbGFicy5odG1sI2xsYWJzIj5sbGFiczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImxhYnMuaHRtbCNsYWJzIj5sYWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjIwIDxjb2RlPmxkaXY8L2NvZGU+Jm1kYXNoO2RpdmlkZSB0d28gbG9uZyBpbnRlZ2VyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxkaXYtMzQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgbGRpdl90IGxkaXYobG9uZyA8dmFyPm48L3Zhcj4sIGxvbmcgPHZhcj5kPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitEaXZpZGUKKzx2YXI+bjwvdmFyPi88dmFyPmQ8L3Zhcj4sCityZXR1cm5pbmcgcXVvdGllbnQgYW5kIHJlbWFpbmRlciBhcyB0d28gbG9uZyBpbnRlZ2VycyBpbiBhIHN0cnVjdHVyZSA8Y29kZT5sZGl2X3Q8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgcmVzdWx0IGlzIHJlcHJlc2VudGVkIHdpdGggdGhlIHN0cnVjdHVyZQorCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIHR5cGVkZWYgc3RydWN0CisgICAgICB7CisgICAgICAgbG9uZyBxdW90OworICAgICAgIGxvbmcgcmVtOworICAgICAgfSBsZGl2X3Q7Cis8L3ByZT4KKyAgIDxwPndoZXJlIHRoZSA8Y29kZT5xdW90PC9jb2RlPiBmaWVsZCByZXByZXNlbnRzIHRoZSBxdW90aWVudCwgYW5kIDxjb2RlPnJlbTwvY29kZT4gdGhlCityZW1haW5kZXIuICBGb3Igbm9uemVybyA8dmFyPmQ8L3Zhcj4sIGlmIGA8dmFyPnI8L3Zhcj48Y29kZT4gPSBsZGl2KDwvY29kZT48dmFyPm48L3Zhcj48Y29kZT4sPC9jb2RlPjx2YXI+ZDwvdmFyPjxjb2RlPik7PC9jb2RlPicgdGhlbgorPHZhcj5uPC92YXI+IGVxdWFscyBgPHZhcj5yPC92YXI+PGNvZGU+LnJlbSArIDwvY29kZT48dmFyPmQ8L3Zhcj48Y29kZT4qPC9jb2RlPjx2YXI+cjwvdmFyPjxjb2RlPi5xdW90PC9jb2RlPicuCisKKyAgIDxwPlRvIGRpdmlkZSA8Y29kZT5pbnQ8L2NvZGU+IHJhdGhlciB0aGFuIDxjb2RlPmxvbmc8L2NvZGU+IHZhbHVlcywgdXNlIHRoZSBzaW1pbGFyCitmdW5jdGlvbiA8Y29kZT5kaXY8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+bGRpdjwvY29kZT4gaXMgQU5TSS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbGxhYnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2xsYWJzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4MzQzYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL2xsYWJzLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bGxhYnMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImxkaXYuaHRtbCNsZGl2IiB0aXRsZT0ibGRpdiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImxsZGl2Lmh0bWwjbGxkaXYiIHRpdGxlPSJsbGRpdiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibGxhYnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibGxkaXYuaHRtbCNsbGRpdiI+bGxkaXY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJsZGl2Lmh0bWwjbGRpdiI+bGRpdjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4yMSA8Y29kZT5sbGFiczwvY29kZT4mbWRhc2g7Y29tcHV0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYW4gbG9uZyBsb25nIGludGVnZXIuPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGxhYnMtMzUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyBqKTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+bGxhYnM8L2NvZGU+IGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbG9uZyBsb25nIGludGVnZXIKK2FyZ3VtZW50IDx2YXI+ajwvdmFyPiAoYWxzbyBjYWxsZWQgdGhlIG1hZ25pdHVkZSBvZiA8dmFyPmo8L3Zhcj4pLgorCisgICA8cD5UaGUgc2ltaWxhciBmdW5jdGlvbiA8Y29kZT5sYWJzPC9jb2RlPiB1c2VzIGFuZCByZXR1cm5zIDxjb2RlPmxvbmc8L2NvZGU+IHJhdGhlciB0aGFuCis8Y29kZT5sb25nIGxvbmc8L2NvZGU+IHZhbHVlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorQSBub25uZWdhdGl2ZSBsb25nIGxvbmcgaW50ZWdlci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmxsYWJzPC9jb2RlPiBpcyBJU08gOTg5OSAoQzk5KSBjb21wYXRhYmxlLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9sbGRpdi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbGxkaXYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQxZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbGxkaXYuaHRtbApAQCAtMCwwICsxLDc0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5sbGRpdiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibGxhYnMuaHRtbCNsbGFicyIgdGl0bGU9ImxsYWJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWFsbG9jLmh0bWwjbWFsbG9jIiB0aXRsZT0ibWFsbG9jIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJsbGRpdiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJtYWxsb2MuaHRtbCNtYWxsb2MiPm1hbGxvYzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImxsYWJzLmh0bWwjbGxhYnMiPmxsYWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjIyIDxjb2RlPmxsZGl2PC9jb2RlPiZtZGFzaDtkaXZpZGUgdHdvIGxvbmcgbG9uZyBpbnRlZ2VyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxsZGl2LTM2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGxsZGl2X3QgbGxkaXYobG9uZyBsb25nIDx2YXI+bjwvdmFyPiwgbG9uZyBsb25nIDx2YXI+ZDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorRGl2aWRlCis8dmFyPm48L3Zhcj4vPHZhcj5kPC92YXI+LAorcmV0dXJuaW5nIHF1b3RpZW50IGFuZCByZW1haW5kZXIgYXMgdHdvIGxvbmcgbG9uZyBpbnRlZ2VycyBpbiBhIHN0cnVjdHVyZQorPGNvZGU+bGxkaXZfdDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXN1bHQgaXMgcmVwcmVzZW50ZWQgd2l0aCB0aGUgc3RydWN0dXJlCisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgdHlwZWRlZiBzdHJ1Y3QKKyAgICAgIHsKKyAgICAgICBsb25nIGxvbmcgcXVvdDsKKyAgICAgICBsb25nIGxvbmcgcmVtOworICAgICAgfSBsbGRpdl90OworPC9wcmU+CisgICA8cD53aGVyZSB0aGUgPGNvZGU+cXVvdDwvY29kZT4gZmllbGQgcmVwcmVzZW50cyB0aGUgcXVvdGllbnQsIGFuZCA8Y29kZT5yZW08L2NvZGU+IHRoZQorcmVtYWluZGVyLiAgRm9yIG5vbnplcm8gPHZhcj5kPC92YXI+LCBpZiBgPHZhcj5yPC92YXI+PGNvZGU+ID0gbGRpdig8L2NvZGU+PHZhcj5uPC92YXI+PGNvZGU+LDwvY29kZT48dmFyPmQ8L3Zhcj48Y29kZT4pOzwvY29kZT4nIHRoZW4KKzx2YXI+bjwvdmFyPiBlcXVhbHMgYDx2YXI+cjwvdmFyPjxjb2RlPi5yZW0gKyA8L2NvZGU+PHZhcj5kPC92YXI+PGNvZGU+KjwvY29kZT48dmFyPnI8L3Zhcj48Y29kZT4ucXVvdDwvY29kZT4nLgorCisgICA8cD5UbyBkaXZpZGUgPGNvZGU+bG9uZzwvY29kZT4gcmF0aGVyIHRoYW4gPGNvZGU+bG9uZyBsb25nPC9jb2RlPiB2YWx1ZXMsIHVzZSB0aGUgc2ltaWxhcgorZnVuY3Rpb24gPGNvZGU+bGRpdjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5sbGRpdjwvY29kZT4gaXMgSVNPIDk4OTkgKEM5OSkgY29tcGF0YWJsZS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbG9jYWx0aW1lLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9sb2NhbHRpbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjdmOTE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbG9jYWx0aW1lLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bG9jYWx0aW1lIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUaW1lZm5zLmh0bWwjVGltZWZucyIgdGl0bGU9IlRpbWVmbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnbXRpbWUuaHRtbCNnbXRpbWUiIHRpdGxlPSJnbXRpbWUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJta3RpbWUuaHRtbCNta3RpbWUiIHRpdGxlPSJta3RpbWUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImxvY2FsdGltZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJta3RpbWUuaHRtbCNta3RpbWUiPm1rdGltZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImdtdGltZS5odG1sI2dtdGltZSI+Z210aW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiPlRpbWVmbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjYgPGNvZGU+bG9jYWx0aW1lPC9jb2RlPiZtZGFzaDtjb252ZXJ0IHRpbWUgdG8gbG9jYWwgcmVwcmVzZW50YXRpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1sb2NhbHRpbWUtNDM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtbG9jYWx0aW1lXzAwNWZyLTQzNyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKKyAgICAgc3RydWN0IHRtICpsb2NhbHRpbWUodGltZV90ICo8dmFyPmNsb2NrPC92YXI+KTsKKyAgICAgc3RydWN0IHRtICpsb2NhbHRpbWVfcih0aW1lX3QgKjx2YXI+Y2xvY2s8L3Zhcj4sIHN0cnVjdCB0bSAqPHZhcj5yZXM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmxvY2FsdGltZTwvY29kZT4gY29udmVydHMgdGhlIHRpbWUgYXQgPHZhcj5jbG9jazwvdmFyPiBpbnRvIGxvY2FsIHRpbWUsIHRoZW4KK2NvbnZlcnRzIGl0cyByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBhcml0aG1ldGljIHJlcHJlc2VudGF0aW9uIHRvIHRoZQordHJhZGl0aW9uYWwgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBieSA8Y29kZT5zdHJ1Y3QgdG08L2NvZGU+LgorCisgICA8cD48Y29kZT5sb2NhbHRpbWU8L2NvZGU+IGNvbnN0cnVjdHMgdGhlIHRyYWRpdGlvbmFsIHRpbWUgcmVwcmVzZW50YXRpb24gaW4gc3RhdGljCitzdG9yYWdlOyBlYWNoIGNhbGwgdG8gPGNvZGU+Z210aW1lPC9jb2RlPiBvciA8Y29kZT5sb2NhbHRpbWU8L2NvZGU+IHdpbGwgb3ZlcndyaXRlIHRoZQoraW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHByZXZpb3VzIGNhbGxzIHRvIGVpdGhlciBmdW5jdGlvbi4KKworICAgPHA+PGNvZGU+bWt0aW1lPC9jb2RlPiBpcyB0aGUgaW52ZXJzZSBvZiA8Y29kZT5sb2NhbHRpbWU8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitBIHBvaW50ZXIgdG8gdGhlIHRyYWRpdGlvbmFsIHRpbWUgcmVwcmVzZW50YXRpb24gKDxjb2RlPnN0cnVjdCB0bTwvY29kZT4pLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPmxvY2FsdGltZTwvY29kZT4uCisKKyAgIDxwPjxjb2RlPmxvY2FsdGltZTwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tYWxsaW5mby5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWFsbGluZm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2I1MmM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWFsbGluZm8uaHRtbApAQCAtMCwwICsxLDkxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5tYWxsaW5mbyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWFsbG9jLmh0bWwjbWFsbG9jIiB0aXRsZT0ibWFsbG9jIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iXzAwNWZfMDA1Zm1hbGxvY18wMDVmbG9jay5odG1sI2dfdF8wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2siIHRpdGxlPSJfX21hbGxvY19sb2NrIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtYWxsaW5mbyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJfMDA1Zl8wMDVmbWFsbG9jXzAwNWZsb2NrLmh0bWwjZ190XzAwNWZfMDA1Zm1hbGxvY18wMDVmbG9jayI+X19tYWxsb2NfbG9jazwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im1hbGxvYy5odG1sI21hbGxvYyI+bWFsbG9jPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjI0IDxjb2RlPm1hbGxpbmZvPC9jb2RlPiwgPGNvZGU+bWFsbG9jX3N0YXRzPC9jb2RlPiwgPGNvZGU+bWFsbG9wdDwvY29kZT4mbWRhc2g7bWFsbG9jIHN1cHBvcnQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tYWxsaW5mby00OSI+PC9hPjxhIG5hbWU9ImluZGV4LW1hbGxvY18wMDVmc3RhdHMtNTAiPjwvYT48YSBuYW1lPSJpbmRleC1tYWxsb3B0LTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZtYWxsaW5mb18wMDVmci01MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbWFsbG9jXzAwNWZzdGF0c18wMDVmci01MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbWFsbG9wdF8wMDVmci01NCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hbGxvYy5oJmd0OworICAgICBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8odm9pZCk7CisgICAgIHZvaWQgbWFsbG9jX3N0YXRzKHZvaWQpOworICAgICBpbnQgbWFsbG9wdChpbnQgPHZhcj5wYXJhbWV0ZXI8L3Zhcj4sIDx2YXI+dmFsdWU8L3Zhcj4pOworICAgICAKKyAgICAgc3RydWN0IG1hbGxpbmZvIF9tYWxsaW5mb19yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4pOworICAgICB2b2lkIF9tYWxsb2Nfc3RhdHNfcih2b2lkICo8dmFyPnJlZW50PC92YXI+KTsKKyAgICAgaW50IF9tYWxsb3B0X3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgaW50IDx2YXI+cGFyYW1ldGVyPC92YXI+LCA8dmFyPnZhbHVlPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5tYWxsaW5mbzwvY29kZT4gcmV0dXJucyBhIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mCittZW1vcnkgYWxsb2NhdGlvbi4gIFRoZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIFRoZQorZm9sbG93aW5nIGZpZWxkcyBhcmUgZGVmaW5lZDogPGNvZGU+YXJlbmE8L2NvZGU+IGlzIHRoZSB0b3RhbCBhbW91bnQgb2Ygc3BhY2UKK2luIHRoZSBoZWFwOyA8Y29kZT5vcmRibGtzPC9jb2RlPiBpcyB0aGUgbnVtYmVyIG9mIGNodW5rcyB3aGljaCBhcmUgbm90IGluIHVzZTsKKzxjb2RlPnVvcmRibGtzPC9jb2RlPiBpcyB0aGUgdG90YWwgYW1vdW50IG9mIHNwYWNlIGFsbG9jYXRlZCBieSA8Y29kZT5tYWxsb2M8L2NvZGU+OworPGNvZGU+Zm9yZGJsa3M8L2NvZGU+IGlzIHRoZSB0b3RhbCBhbW91bnQgb2Ygc3BhY2Ugbm90IGluIHVzZTsgPGNvZGU+a2VlcGNvc3Q8L2NvZGU+IGlzCit0aGUgc2l6ZSBvZiB0aGUgdG9wIG1vc3QgbWVtb3J5IGJsb2NrLgorCisgICA8cD48Y29kZT5tYWxsb2Nfc3RhdHM8L2NvZGU+IHByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbiBvbgorc3RhbmRhcmQgZXJyb3IuCisKKyAgIDxwPjxjb2RlPm1hbGxvcHQ8L2NvZGU+IHRha2VzIGEgcGFyYW1ldGVyIGFuZCBhIHZhbHVlLiAgVGhlIHBhcmFtZXRlcnMgYXJlIGRlZmluZWQKK2luIG1hbGxvYy5oLCBhbmQgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOiA8Y29kZT5NX1RSSU1fVEhSRVNIT0xEPC9jb2RlPgorc2V0cyB0aGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHNwYWNlIGluIHRoZSB0b3AgbW9zdCBibG9jayBiZWZvcmUKK3JlbGVhc2luZyBpdCBiYWNrIHRvIHRoZSBzeXN0ZW0gaW4gPGNvZGU+ZnJlZTwvY29kZT4gKHRoZSBzcGFjZSBpcyByZWxlYXNlZCBieQorY2FsbGluZyA8Y29kZT5fc2Jya19yPC9jb2RlPiB3aXRoIGEgbmVnYXRpdmUgYXJndW1lbnQpOyA8Y29kZT5NX1RPUF9QQUQ8L2NvZGU+IGlzIHRoZQorYW1vdW50IG9mIHBhZGRpbmcgdG8gYWxsb2NhdGUgd2hlbmV2ZXIgPGNvZGU+X3NicmtfcjwvY29kZT4gaXMgY2FsbGVkIHRvCithbGxvY2F0ZSBtb3JlIHNwYWNlLgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9ucyA8Y29kZT5fbWFsbGluZm9fcjwvY29kZT4sIDxjb2RlPl9tYWxsb2Nfc3RhdHNfcjwvY29kZT4sIGFuZAorPGNvZGU+X21hbGxvcHRfcjwvY29kZT4gYXJlIHJlZW50cmFudCB2ZXJzaW9ucy4gIFRoZSBleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+CitpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+bWFsbGluZm88L2NvZGU+IHJldHVybnMgYSBtYWxsaW5mbyBzdHJ1Y3R1cmUuICBUaGUgc3RydWN0dXJlIGlzIGRlZmluZWQKK2luIG1hbGxvYy5oLgorCisgICA8cD48Y29kZT5tYWxsb2Nfc3RhdHM8L2NvZGU+IGRvZXMgbm90IHJldHVybiBhIHJlc3VsdC4KKworICAgPHA+PGNvZGU+bWFsbG9wdDwvY29kZT4gcmV0dXJucyB6ZXJvIGlmIHRoZSBwYXJhbWV0ZXIgY291bGQgbm90IGJlIHNldCwgb3IKK25vbi16ZXJvIGlmIGl0IGNvdWxkIGJlIHNldC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPm1hbGxpbmZvPC9jb2RlPiBhbmQgPGNvZGU+bWFsbG9wdDwvY29kZT4gYXJlIHByb3ZpZGVkIGJ5IFNWUjQsIGJ1dCA8Y29kZT5tYWxsb3B0PC9jb2RlPgordGFrZXMgZGlmZmVyZW50IHBhcmFtZXRlcnMgb24gZGlmZmVyZW50IHN5c3RlbXMuICA8Y29kZT5tYWxsb2Nfc3RhdHM8L2NvZGU+IGlzCitub3QgcG9ydGFibGUuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWFsbG9jLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tYWxsb2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU2ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWFsbG9jLmh0bWwKQEAgLTAsMCArMSwxNTAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm1hbGxvYyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibGxkaXYuaHRtbCNsbGRpdiIgdGl0bGU9ImxsZGl2Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWFsbGluZm8uaHRtbCNtYWxsaW5mbyIgdGl0bGU9Im1hbGxpbmZvIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtYWxsb2MiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibWFsbGluZm8uaHRtbCNtYWxsaW5mbyI+bWFsbGluZm88L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJsbGRpdi5odG1sI2xsZGl2Ij5sbGRpdjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4yMyA8Y29kZT5tYWxsb2M8L2NvZGU+LCA8Y29kZT5yZWFsbG9jPC9jb2RlPiwgPGNvZGU+ZnJlZTwvY29kZT4mbWRhc2g7bWFuYWdlIG1lbW9yeTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1hbGxvYy0zNyI+PC9hPjxhIG5hbWU9ImluZGV4LXJlYWxsb2MtMzgiPjwvYT48YSBuYW1lPSJpbmRleC1yZWFsbG9jZi0zOSI+PC9hPjxhIG5hbWU9ImluZGV4LWZyZWUtNDAiPjwvYT48YSBuYW1lPSJpbmRleC1tZW1hbGlnbi00MSI+PC9hPjxhIG5hbWU9ImluZGV4LW1hbGxvY18wMDVmdXNhYmxlXzAwNWZzaXplLTQyIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZtYWxsb2NfMDA1ZnItNDMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnJlYWxsb2NfMDA1ZnItNDQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnJlYWxsb2NmXzAwNWZyLTQ1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmcmVlXzAwNWZyLTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZtZW1hbGlnbl8wMDVmci00NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbWFsbG9jXzAwNWZ1c2FibGVfMDA1ZnNpemVfMDA1ZnItNDgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgdm9pZCAqbWFsbG9jKHNpemVfdCA8dmFyPm5ieXRlczwvdmFyPik7CisgICAgIHZvaWQgKnJlYWxsb2Modm9pZCAqPHZhcj5hcHRyPC92YXI+LCBzaXplX3QgPHZhcj5uYnl0ZXM8L3Zhcj4pOworICAgICB2b2lkICpyZWFsbG9jZih2b2lkICo8dmFyPmFwdHI8L3Zhcj4sIHNpemVfdCA8dmFyPm5ieXRlczwvdmFyPik7CisgICAgIHZvaWQgZnJlZSh2b2lkICo8dmFyPmFwdHI8L3Zhcj4pOworICAgICAKKyAgICAgdm9pZCAqbWVtYWxpZ24oc2l6ZV90IDx2YXI+YWxpZ248L3Zhcj4sIHNpemVfdCA8dmFyPm5ieXRlczwvdmFyPik7CisgICAgIAorICAgICBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQgKjx2YXI+YXB0cjwvdmFyPik7CisgICAgIAorICAgICB2b2lkICpfbWFsbG9jX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgc2l6ZV90IDx2YXI+bmJ5dGVzPC92YXI+KTsKKyAgICAgdm9pZCAqX3JlYWxsb2Nfcih2b2lkICo8dmFyPnJlZW50PC92YXI+LAorICAgICAgICAgdm9pZCAqPHZhcj5hcHRyPC92YXI+LCBzaXplX3QgPHZhcj5uYnl0ZXM8L3Zhcj4pOworICAgICB2b2lkICpfcmVhbGxvY2Zfcih2b2lkICo8dmFyPnJlZW50PC92YXI+LAorICAgICAgICAgdm9pZCAqPHZhcj5hcHRyPC92YXI+LCBzaXplX3QgPHZhcj5uYnl0ZXM8L3Zhcj4pOworICAgICB2b2lkIF9mcmVlX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgdm9pZCAqPHZhcj5hcHRyPC92YXI+KTsKKyAgICAgCisgICAgIHZvaWQgKl9tZW1hbGlnbl9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sCisgICAgICAgICBzaXplX3QgPHZhcj5hbGlnbjwvdmFyPiwgc2l6ZV90IDx2YXI+bmJ5dGVzPC92YXI+KTsKKyAgICAgCisgICAgIHNpemVfdCBfbWFsbG9jX3VzYWJsZV9zaXplX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgdm9pZCAqPHZhcj5hcHRyPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGVzZSBmdW5jdGlvbnMgbWFuYWdlIGEgcG9vbCBvZiBzeXN0ZW0gbWVtb3J5LgorCisgICA8cD5Vc2UgPGNvZGU+bWFsbG9jPC9jb2RlPiB0byByZXF1ZXN0IGFsbG9jYXRpb24gb2YgYW4gb2JqZWN0IHdpdGggYXQgbGVhc3QKKzx2YXI+bmJ5dGVzPC92YXI+IGJ5dGVzIG9mIHN0b3JhZ2UgYXZhaWxhYmxlLiAgSWYgdGhlIHNwYWNlIGlzIGF2YWlsYWJsZSwKKzxjb2RlPm1hbGxvYzwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYXMgaXRzIHJlc3VsdC4KKworICAgPHA+SWYgeW91IGFscmVhZHkgaGF2ZSBhIGJsb2NrIG9mIHN0b3JhZ2UgYWxsb2NhdGVkIGJ5IDxjb2RlPm1hbGxvYzwvY29kZT4sIGJ1dAoreW91IG5vIGxvbmdlciBuZWVkIGFsbCB0aGUgc3BhY2UgYWxsb2NhdGVkIHRvIGl0LCB5b3UgY2FuIG1ha2UgaXQKK3NtYWxsZXIgYnkgY2FsbGluZyA8Y29kZT5yZWFsbG9jPC9jb2RlPiB3aXRoIGJvdGggdGhlIG9iamVjdCBwb2ludGVyIGFuZCB0aGUKK25ldyBkZXNpcmVkIHNpemUgYXMgYXJndW1lbnRzLiAgPGNvZGU+cmVhbGxvYzwvY29kZT4gZ3VhcmFudGVlcyB0aGF0IHRoZQorY29udGVudHMgb2YgdGhlIHNtYWxsZXIgb2JqZWN0IG1hdGNoIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG9yaWdpbmFsIG9iamVjdC4KKworICAgPHA+U2ltaWxhcmx5LCBpZiB5b3UgbmVlZCBtb3JlIHNwYWNlIGZvciBhbiBvYmplY3QsIHVzZSA8Y29kZT5yZWFsbG9jPC9jb2RlPiB0bworcmVxdWVzdCB0aGUgbGFyZ2VyIHNpemU7IGFnYWluLCA8Y29kZT5yZWFsbG9jPC9jb2RlPiBndWFyYW50ZWVzIHRoYXQgdGhlCitiZWdpbm5pbmcgb2YgdGhlIG5ldywgbGFyZ2VyIG9iamVjdCBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUKK29yaWdpbmFsIG9iamVjdC4KKworICAgPHA+V2hlbiB5b3Ugbm8gbG9uZ2VyIG5lZWQgYW4gb2JqZWN0IG9yaWdpbmFsbHkgYWxsb2NhdGVkIGJ5IDxjb2RlPm1hbGxvYzwvY29kZT4KK29yIDxjb2RlPnJlYWxsb2M8L2NvZGU+IChvciB0aGUgcmVsYXRlZCBmdW5jdGlvbiA8Y29kZT5jYWxsb2M8L2NvZGU+KSwgcmV0dXJuIGl0IHRvIHRoZQorbWVtb3J5IHN0b3JhZ2UgcG9vbCBieSBjYWxsaW5nIDxjb2RlPmZyZWU8L2NvZGU+IHdpdGggdGhlIGFkZHJlc3Mgb2YgdGhlIG9iamVjdAorYXMgdGhlIGFyZ3VtZW50LiAgWW91IGNhbiBhbHNvIHVzZSA8Y29kZT5yZWFsbG9jPC9jb2RlPiBmb3IgdGhpcyBwdXJwb3NlIGJ5CitjYWxsaW5nIGl0IHdpdGggPGNvZGU+MDwvY29kZT4gYXMgdGhlIDx2YXI+bmJ5dGVzPC92YXI+IGFyZ3VtZW50LgorCisgICA8cD5UaGUgPGNvZGU+cmVhbGxvY2Y8L2NvZGU+IGZ1bmN0aW9uIGJlaGF2ZXMganVzdCBsaWtlIDxjb2RlPnJlYWxsb2M8L2NvZGU+IGV4Y2VwdCBpZiB0aGUKK2Z1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG5ldyBzdG9yYWdlIGFuZCB0aGlzIGZhaWxzLiAgSW4gdGhpcworY2FzZSA8Y29kZT5yZWFsbG9jZjwvY29kZT4gd2lsbCBmcmVlIHRoZSBvcmlnaW5hbCBvYmplY3QgcGFzc2VkIGluIHdoZXJlYXMKKzxjb2RlPnJlYWxsb2M8L2NvZGU+IHdpbGwgbm90LgorCisgICA8cD5UaGUgPGNvZGU+bWVtYWxpZ248L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgYSBibG9jayBvZiBzaXplIDx2YXI+bmJ5dGVzPC92YXI+IGFsaWduZWQKK3RvIGEgPHZhcj5hbGlnbjwvdmFyPiBib3VuZGFyeS4gIFRoZSA8dmFyPmFsaWduPC92YXI+IGFyZ3VtZW50IG11c3QgYmUgYSBwb3dlciBvZgordHdvLgorCisgICA8cD5UaGUgPGNvZGU+bWFsbG9jX3VzYWJsZV9zaXplPC9jb2RlPiBmdW5jdGlvbiB0YWtlcyBhIHBvaW50ZXIgdG8gYSBibG9jaworYWxsb2NhdGVkIGJ5IDxjb2RlPm1hbGxvYzwvY29kZT4uICBJdCByZXR1cm5zIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGhhdCBpcworYXZhaWxhYmxlIGluIHRoZSBibG9jay4gIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgbW9yZSB0aGFuIHRoZSBzaXplCityZXF1ZXN0ZWQgZnJvbSA8Y29kZT5tYWxsb2M8L2NvZGU+LCBkdWUgdG8gYWxpZ25tZW50IG9yIG1pbmltdW0gc2l6ZQorY29uc3RyYWludHMuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb25zIDxjb2RlPl9tYWxsb2NfcjwvY29kZT4sIDxjb2RlPl9yZWFsbG9jX3I8L2NvZGU+LCA8Y29kZT5fcmVhbGxvY2ZfcjwvY29kZT4sCis8Y29kZT5fZnJlZV9yPC9jb2RlPiwgPGNvZGU+X21lbWFsaWduX3I8L2NvZGU+LCBhbmQgPGNvZGU+X21hbGxvY191c2FibGVfc2l6ZV9yPC9jb2RlPiBhcmUgcmVlbnRyYW50Cit2ZXJzaW9ucy4gIFRoZSBleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD5JZiB5b3UgaGF2ZSBtdWx0aXBsZSB0aHJlYWRzIG9mIGV4ZWN1dGlvbiB3aGljaCBtYXkgY2FsbCBhbnkgb2YgdGhlc2UKK3JvdXRpbmVzLCBvciBpZiBhbnkgb2YgdGhlc2Ugcm91dGluZXMgbWF5IGJlIGNhbGxlZCByZWVudHJhbnRseSwgdGhlbgoreW91IG11c3QgcHJvdmlkZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIDxjb2RlPl9fbWFsbG9jX2xvY2s8L2NvZGU+IGFuZAorPGNvZGU+X19tYWxsb2NfdW5sb2NrPC9jb2RlPiBmdW5jdGlvbnMgZm9yIHlvdXIgc3lzdGVtLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uCitmb3IgdGhvc2UgZnVuY3Rpb25zLgorCisgICA8cD5UaGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiA8Y29kZT5fc2Jya19yPC9jb2RlPiBvcgorPGNvZGU+c2JyazwvY29kZT4sIHdoaWNoIGFsbG9jYXRlcyBzcGFjZS4gIFlvdSBtYXkgbmVlZCB0byBwcm92aWRlIG9uZSBvZiB0aGVzZQorZnVuY3Rpb25zIGZvciB5b3VyIHN5c3RlbS4gIDxjb2RlPl9zYnJrX3I8L2NvZGU+IGlzIGNhbGxlZCB3aXRoIGEgcG9zaXRpdmUKK3ZhbHVlIHRvIGFsbG9jYXRlIG1vcmUgc3BhY2UsIGFuZCB3aXRoIGEgbmVnYXRpdmUgdmFsdWUgdG8gcmVsZWFzZQorcHJldmlvdXNseSBhbGxvY2F0ZWQgc3BhY2UgaWYgaXQgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLiAKK1NlZSA8YSBocmVmPSJTdHVicy5odG1sI1N0dWJzIj5TdHViczwvYT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPm1hbGxvYzwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzcGFjZSwgaWYKK3N1Y2Nlc3NmdWw7IG90aGVyd2lzZSBpdCByZXR1cm5zIDxjb2RlPk5VTEw8L2NvZGU+LiAgSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcwordG8gZ2VuZXJhdGUgZW1wdHkgb2JqZWN0cywgeW91IG1heSB1c2UgPGNvZGU+bWFsbG9jKDApPC9jb2RlPiBmb3IgdGhpcyBwdXJwb3NlLgorCisgICA8cD48Y29kZT5yZWFsbG9jPC9jb2RlPiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3IGJsb2NrIG9mIG1lbW9yeSwgb3IgPGNvZGU+TlVMTDwvY29kZT4KK2lmIGEgbmV3IGJsb2NrIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQuICA8Y29kZT5OVUxMPC9jb2RlPiBpcyBhbHNvIHRoZSByZXN1bHQKK3doZW4geW91IHVzZSBgPGNvZGU+cmVhbGxvYyg8L2NvZGU+PHZhcj5hcHRyPC92YXI+PGNvZGU+LDApPC9jb2RlPicgKHdoaWNoIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMKK2A8Y29kZT5mcmVlKDwvY29kZT48dmFyPmFwdHI8L3Zhcj48Y29kZT4pPC9jb2RlPicpLiAgWW91IHNob3VsZCBhbHdheXMgY2hlY2sgdGhlIHJlc3VsdCBvZgorPGNvZGU+cmVhbGxvYzwvY29kZT47IHN1Y2Nlc3NmdWwgcmVhbGxvY2F0aW9uIGlzIG5vdCBndWFyYW50ZWVkIGV2ZW4gd2hlbgoreW91IHJlcXVlc3QgYSBzbWFsbGVyIG9iamVjdC4KKworICAgPHA+PGNvZGU+ZnJlZTwvY29kZT4gZG9lcyBub3QgcmV0dXJuIGEgcmVzdWx0LgorCisgICA8cD48Y29kZT5tZW1hbGlnbjwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBzcGFjZS4KKworICAgPHA+PGNvZGU+bWFsbG9jX3VzYWJsZV9zaXplPC9jb2RlPiByZXR1cm5zIHRoZSB1c2FibGUgc2l6ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPm1hbGxvYzwvY29kZT4sIDxjb2RlPnJlYWxsb2M8L2NvZGU+LCBhbmQgPGNvZGU+ZnJlZTwvY29kZT4gYXJlIHNwZWNpZmllZCBieSB0aGUgQU5TSSBDCitzdGFuZGFyZCwgYnV0IG90aGVyIGNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zIG9mIDxjb2RlPm1hbGxvYzwvY29kZT4gbWF5CitiZWhhdmUgZGlmZmVyZW50bHkgd2hlbiA8dmFyPm5ieXRlczwvdmFyPiBpcyB6ZXJvLgorCisgICA8cD48Y29kZT5tZW1hbGlnbjwvY29kZT4gaXMgcGFydCBvZiBTVlI0LgorCisgICA8cD48Y29kZT5tYWxsb2NfdXNhYmxlX3NpemU8L2NvZGU+IGlzIG5vdCBwb3J0YWJsZS4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+c2JyazwvY29kZT4uIAorPGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tYmxlbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWJsZW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA1MGViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWJsZW4uaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5tYmxlbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWJzdG93Y3MuaHRtbCNtYnN0b3djcyIgdGl0bGU9Im1ic3Rvd2NzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWJ0b3djLmh0bWwjbWJ0b3djIiB0aXRsZT0ibWJ0b3djIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtYmxlbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJtYnRvd2MuaHRtbCNtYnRvd2MiPm1idG93YzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im1ic3Rvd2NzLmh0bWwjbWJzdG93Y3MiPm1ic3Rvd2NzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjI2IDxjb2RlPm1ibGVuPC9jb2RlPiZtZGFzaDttaW5pbWFsIG11bHRpYnl0ZSBsZW5ndGggZnVuY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tYmxlbi01NyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBpbnQgbWJsZW4oY29uc3QgY2hhciAqPHZhcj5zPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitXaGVuIF9NQl9DQVBBQkxFIGlzIG5vdCBkZWZpbmVkLCB0aGlzIGlzIGEgbWluaW1hbCBBTlNJLWNvbmZvcm1pbmcKK2ltcGxlbWVudGF0aW9uIG9mIDxjb2RlPm1ibGVuPC9jb2RlPi4gIEluIHRoaXMgY2FzZSwgdGhlCitvbmx5ICZsZHF1bzttdWx0aS1ieXRlIGNoYXJhY3RlciBzZXF1ZW5jZXMmcmRxdW87IHJlY29nbml6ZWQgYXJlIHNpbmdsZSBieXRlcywKK2FuZCB0aHVzIDxjb2RlPjE8L2NvZGU+IGlzIHJldHVybmVkIHVubGVzcyA8dmFyPnM8L3Zhcj4gaXMgdGhlIG51bGwgcG9pbnRlciBvcgoraGFzIGEgbGVuZ3RoIG9mIDAgb3IgaXMgdGhlIGVtcHR5IHN0cmluZy4KKworICAgPHA+V2hlbiBfTUJfQ0FQQUJMRSBpcyBkZWZpbmVkLCB0aGlzIHJvdXRpbmUgY2FsbHMgPGNvZGU+X21idG93Y19yPC9jb2RlPiB0byBwZXJmb3JtCit0aGUgY29udmVyc2lvbiwgcGFzc2luZyBhIHN0YXRlIHZhcmlhYmxlIHRvIGFsbG93IHN0YXRlIGRlcGVuZGVudAorZGVjb2RpbmcuICBUaGUgcmVzdWx0IGlzIGJhc2VkIG9uIHRoZSBsb2NhbGUgc2V0dGluZyB3aGljaCBtYXkKK2JlIHJlc3RyaWN0ZWQgdG8gYSBkZWZpbmVkIHNldCBvZiBsb2NhbGVzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGlzIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPm1ibGVuPC9jb2RlPiByZXR1cm5zIDxjb2RlPjA8L2NvZGU+IGlmCis8dmFyPnM8L3Zhcj4gaXMgPGNvZGU+TlVMTDwvY29kZT4gb3IgdGhlIGVtcHR5IHN0cmluZzsgaXQgcmV0dXJucyA8Y29kZT4xPC9jb2RlPiBpZiBub3QgX01CX0NBUEFCTEUgb3IKK3RoZSBjaGFyYWN0ZXIgaXMgYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXI7IGl0IHJldHVybnMgPGNvZGU+LTE8L2NvZGU+CitpZiB0aGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgaXMgaW52YWxpZDsgb3RoZXJ3aXNlIGl0IHJldHVybnMKK3RoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5tYmxlbjwvY29kZT4gaXMgcmVxdWlyZWQgaW4gdGhlIEFOU0kgQyBzdGFuZGFyZC4gIEhvd2V2ZXIsIHRoZSBwcmVjaXNlCitlZmZlY3RzIHZhcnkgd2l0aCB0aGUgbG9jYWxlLgorCisgICA8cD48Y29kZT5tYmxlbjwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tYnNydG93Y3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21ic3J0b3djcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzk3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tYnNydG93Y3MuaHRtbApAQCAtMCwwICsxLDkxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5tYnNydG93Y3MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Il8wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2suaHRtbCNnX3RfMDA1Zl8wMDVmbWFsbG9jXzAwNWZsb2NrIiB0aXRsZT0iX19tYWxsb2NfbG9jayI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Im1ic3Rvd2NzLmh0bWwjbWJzdG93Y3MiIHRpdGxlPSJtYnN0b3djcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibWJzcnRvd2NzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1ic3Rvd2NzLmh0bWwjbWJzdG93Y3MiPm1ic3Rvd2NzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iXzAwNWZfMDA1Zm1hbGxvY18wMDVmbG9jay5odG1sI2dfdF8wMDVmXzAwNWZtYWxsb2NfMDA1ZmxvY2siPl9fbWFsbG9jX2xvY2s8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMjcgPGNvZGU+bWJzcnRvd2NzPC9jb2RlPiwgPGNvZGU+bWJzbnJ0b3djczwvY29kZT4mbWRhc2g7Y29udmVydCBhIGNoYXJhY3RlciBzdHJpbmcgdG8gYSB3aWRlLWNoYXJhY3RlciBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tYnNydG93Y3MtNTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zm1ic3J0b3djc18wMDVmci01OSI+PC9hPjxhIG5hbWU9ImluZGV4LW1ic25ydG93Y3MtNjAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zm1ic25ydG93Y3NfMDA1ZnItNjEiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICBzaXplX3QgbWJzcnRvd2NzKHdjaGFyX3QgKjx2YXI+ZHN0PC92YXI+LCBjb25zdCBjaGFyICoqPHZhcj5zcmM8L3Zhcj4sIHNpemVfdCA8dmFyPmxlbjwvdmFyPiwKKyAgICAgICAgIG1ic3RhdGVfdCAqPHZhcj5wczwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgc2l6ZV90IF9tYnNydG93Y3NfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgd2NoYXJfdCAqPHZhcj5kc3Q8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICoqPHZhcj5zcmM8L3Zhcj4sIHNpemVfdCA8dmFyPmxlbjwvdmFyPiwKKyAgICAgICAgIG1ic3RhdGVfdCAqPHZhcj5wczwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgc2l6ZV90IG1ic25ydG93Y3Mod2NoYXJfdCAqPHZhcj5kc3Q8L3Zhcj4sIGNvbnN0IGNoYXIgKio8dmFyPnNyYzwvdmFyPiwKKyAgICAgICAgIHNpemVfdCA8dmFyPm5tczwvdmFyPiwgc2l6ZV90IDx2YXI+bGVuPC92YXI+LCBtYnN0YXRlX3QgKjx2YXI+cHM8L3Zhcj4pOworICAgICAKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHNpemVfdCBfbWJzbnJ0b3djc19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCB3Y2hhcl90ICo8dmFyPmRzdDwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKio8dmFyPnNyYzwvdmFyPiwgc2l6ZV90IDx2YXI+bm1zPC92YXI+LAorICAgICAgICAgc2l6ZV90IDx2YXI+bGVuPC92YXI+LCBtYnN0YXRlX3QgKjx2YXI+cHM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5tYnNydG93Y3M8L2NvZGU+IGZ1bmN0aW9uIGNvbnZlcnRzIGEgc2VxdWVuY2Ugb2YgbXVsdGlieXRlIGNoYXJhY3RlcnMKK3BvaW50ZWQgdG8gaW5kaXJlY3RseSBieSA8dmFyPnNyYzwvdmFyPiBpbnRvIGEgc2VxdWVuY2Ugb2YgY29ycmVzcG9uZGluZyB3aWRlCitjaGFyYWN0ZXJzIGFuZCBzdG9yZXMgYXQgbW9zdCA8dmFyPmxlbjwvdmFyPiBvZiB0aGVtIGluIHRoZSB3Y2hhcl90IGFycmF5IHBvaW50ZWQKK3RvIGJ5IDx2YXI+ZHN0PC92YXI+LCB1bnRpbCBpdCBlbmNvdW50ZXJzIGEgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIgKCdcMCcpLgorCisgICA8cD5JZiA8dmFyPmRzdDwvdmFyPiBpcyBOVUxMLCBubyBjaGFyYWN0ZXJzIGFyZSBzdG9yZWQuCisKKyAgIDxwPklmIDx2YXI+ZHN0PC92YXI+IGlzIG5vdCBOVUxMLCB0aGUgcG9pbnRlciBwb2ludGVkIHRvIGJ5IDx2YXI+c3JjPC92YXI+IGlzIHVwZGF0ZWQgdG8gcG9pbnQKK3RvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG9uZSB0aGF0IGNvbnZlcnNpb24gc3RvcHBlZCBhdC4gIElmIGNvbnZlcnNpb24KK3N0b3BzIGJlY2F1c2UgYSBudWxsIGNoYXJhY3RlciBpcyBlbmNvdW50ZXJlZCwgKjx2YXI+c3JjPC92YXI+IGlzIHNldCB0byBOVUxMLgorCisgICA8cD5UaGUgbWJzdGF0ZV90IGFyZ3VtZW50LCA8dmFyPnBzPC92YXI+LCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHNoaWZ0IHN0YXRlLiAgSWYKK2l0IGlzIE5VTEwsIDxjb2RlPm1ic3J0b3djczwvY29kZT4gdXNlcyBhbiBpbnRlcm5hbCwgc3RhdGljIG1ic3RhdGVfdCBvYmplY3QsIHdoaWNoCitpcyBpbml0aWFsaXplZCB0byB0aGUgaW5pdGlhbCBjb252ZXJzaW9uIHN0YXRlIGF0IHByb2dyYW0gc3RhcnR1cC4KKworICAgPHA+VGhlIDxjb2RlPm1ic25ydG93Y3M8L2NvZGU+IGZ1bmN0aW9uIGJlaGF2ZXMgaWRlbnRpY2FsbHkgdG8gPGNvZGU+bWJzcnRvd2NzPC9jb2RlPiwgZXhjZXB0IHRoYXQKK2NvbnZlcnNpb24gc3RvcHMgYWZ0ZXIgcmVhZGluZyBhdCBtb3N0IDx2YXI+bm1zPC92YXI+IGJ5dGVzIGZyb20gdGhlIGJ1ZmZlciBwb2ludGVkCit0byBieSA8dmFyPnNyYzwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPm1ic3J0b3djczwvY29kZT4gYW5kIDxjb2RlPm1ic25ydG93Y3M8L2NvZGU+IGZ1bmN0aW9ucyByZXR1cm4gdGhlIG51bWJlciBvZiB3aWRlCitjaGFyYWN0ZXJzIHN0b3JlZCBpbiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8dmFyPmRzdDwvdmFyPiBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UKK2l0IHJldHVybnMgKHNpemVfdCktMS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPm1ic3J0b3djczwvY29kZT4gaXMgZGVmaW5lZCBieSB0aGUgQzk5IHN0YW5kYXJkLiAKKzxjb2RlPm1ic25ydG93Y3M8L2NvZGU+IGlzIGRlZmluZWQgYnkgdGhlIFBPU0lYLjEtMjAwOCBzdGFuZGFyZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tYnN0b3djcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWJzdG93Y3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTFhNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWJzdG93Y3MuaHRtbApAQCAtMCwwICsxLDc3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5tYnN0b3djcyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWJzcnRvd2NzLmh0bWwjbWJzcnRvd2NzIiB0aXRsZT0ibWJzcnRvd2NzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWJsZW4uaHRtbCNtYmxlbiIgdGl0bGU9Im1ibGVuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtYnN0b3djcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJtYmxlbi5odG1sI21ibGVuIj5tYmxlbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im1ic3J0b3djcy5odG1sI21ic3J0b3djcyI+bWJzcnRvd2NzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjI4IDxjb2RlPm1ic3Rvd2NzPC9jb2RlPiZtZGFzaDttaW5pbWFsIG11bHRpYnl0ZSBzdHJpbmcgdG8gd2lkZSBjaGFyIGNvbnZlcnRlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1ic3Rvd2NzLTYyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGludCBtYnN0b3djcyh3Y2hhcl90ICo8dmFyPnB3YzwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5zPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitXaGVuIF9NQl9DQVBBQkxFIGlzIG5vdCBkZWZpbmVkLCB0aGlzIGlzIGEgbWluaW1hbCBBTlNJLWNvbmZvcm1pbmcKK2ltcGxlbWVudGF0aW9uIG9mIDxjb2RlPm1ic3Rvd2NzPC9jb2RlPi4gIEluIHRoaXMgY2FzZSwgdGhlCitvbmx5ICZsZHF1bzttdWx0aS1ieXRlIGNoYXJhY3RlciBzZXF1ZW5jZXMmcmRxdW87IHJlY29nbml6ZWQgYXJlIHNpbmdsZSBieXRlcywKK2FuZCB0aGV5IGFyZSAmbGRxdW87Y29udmVydGVkJnJkcXVvOyB0byB3aWRlLWNoYXIgdmVyc2lvbnMgc2ltcGx5IGJ5IGJ5dGUKK2V4dGVuc2lvbi4KKworICAgPHA+V2hlbiBfTUJfQ0FQQUJMRSBpcyBkZWZpbmVkLCB0aGlzIHJvdXRpbmUgY2FsbHMgPGNvZGU+X21ic3Rvd2NzX3I8L2NvZGU+IHRvIHBlcmZvcm0KK3RoZSBjb252ZXJzaW9uLCBwYXNzaW5nIGEgc3RhdGUgdmFyaWFibGUgdG8gYWxsb3cgc3RhdGUgZGVwZW5kZW50CitkZWNvZGluZy4gIFRoZSByZXN1bHQgaXMgYmFzZWQgb24gdGhlIGxvY2FsZSBzZXR0aW5nIHdoaWNoIG1heQorYmUgcmVzdHJpY3RlZCB0byBhIGRlZmluZWQgc2V0IG9mIGxvY2FsZXMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoaXMgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+bWJzdG93Y3M8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYKKzx2YXI+czwvdmFyPiBpcyA8Y29kZT5OVUxMPC9jb2RlPiBvciBpcyB0aGUgZW1wdHkgc3RyaW5nOworaXQgcmV0dXJucyA8Y29kZT4tMTwvY29kZT4gaWYgX01CX0NBUEFCTEUgYW5kIG9uZSBvZiB0aGUKK211bHRpLWJ5dGUgY2hhcmFjdGVycyBpcyBpbnZhbGlkIG9yIGluY29tcGxldGU7CitvdGhlcndpc2UgaXQgcmV0dXJucyB0aGUgbWluaW11bSBvZjogPGNvZGU+bjwvY29kZT4gb3IgdGhlCitudW1iZXIgb2YgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGluIDxjb2RlPnM8L2NvZGU+IHBsdXMgMSAodG8KK2NvbXBlbnNhdGUgZm9yIHRoZSBudWwgY2hhcmFjdGVyKS4gCitJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIC0xLCB0aGUgc3RhdGUgb2YgdGhlIDxjb2RlPnB3YzwvY29kZT4gc3RyaW5nIGlzCitpbmRldGVybWluYXRlLiAgSWYgdGhlIGlucHV0IGhhcyBhIGxlbmd0aCBvZiAwLCB0aGUgb3V0cHV0CitzdHJpbmcgd2lsbCBiZSBtb2RpZmllZCB0byBjb250YWluIGEgd2NoYXJfdCBudWwgdGVybWluYXRvci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPm1ic3Rvd2NzPC9jb2RlPiBpcyByZXF1aXJlZCBpbiB0aGUgQU5TSSBDIHN0YW5kYXJkLiAgSG93ZXZlciwgdGhlIHByZWNpc2UKK2VmZmVjdHMgdmFyeSB3aXRoIHRoZSBsb2NhbGUuCisKKyAgIDxwPjxjb2RlPm1ic3Rvd2NzPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21idG93Yy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWJ0b3djLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5MTljZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21idG93Yy5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm1idG93YyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWJsZW4uaHRtbCNtYmxlbiIgdGl0bGU9Im1ibGVuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ib25fMDA1ZmV4aXQuaHRtbCNvbl8wMDVmZXhpdCIgdGl0bGU9Im9uX2V4aXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Im1idG93YyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJvbl8wMDVmZXhpdC5odG1sI29uXzAwNWZleGl0Ij5vbl9leGl0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibWJsZW4uaHRtbCNtYmxlbiI+bWJsZW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMjkgPGNvZGU+bWJ0b3djPC9jb2RlPiZtZGFzaDttaW5pbWFsIG11bHRpYnl0ZSB0byB3aWRlIGNoYXIgY29udmVydGVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWJ0b3djLTYzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGludCBtYnRvd2Mod2NoYXJfdCAqPHZhcj5wd2M8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+czwvdmFyPiwgc2l6ZV90IDx2YXI+bjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorV2hlbiBfTUJfQ0FQQUJMRSBpcyBub3QgZGVmaW5lZCwgdGhpcyBpcyBhIG1pbmltYWwgQU5TSS1jb25mb3JtaW5nCitpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5tYnRvd2M8L2NvZGU+LiAgSW4gdGhpcyBjYXNlLAorb25seSAmbGRxdW87bXVsdGktYnl0ZSBjaGFyYWN0ZXIgc2VxdWVuY2VzJnJkcXVvOyByZWNvZ25pemVkIGFyZSBzaW5nbGUgYnl0ZXMsCithbmQgdGhleSBhcmUgJmxkcXVvO2NvbnZlcnRlZCZyZHF1bzsgdG8gdGhlbXNlbHZlcy4gCitFYWNoIGNhbGwgdG8gPGNvZGU+bWJ0b3djPC9jb2RlPiBjb3BpZXMgb25lIGNoYXJhY3RlciBmcm9tIDxjb2RlPio8L2NvZGU+PHZhcj5zPC92YXI+IHRvCis8Y29kZT4qPC9jb2RlPjx2YXI+cHdjPC92YXI+LCB1bmxlc3MgPHZhcj5zPC92YXI+IGlzIGEgbnVsbCBwb2ludGVyLiAgVGhlIGFyZ3VtZW50IG4KK2lzIGlnbm9yZWQuCisKKyAgIDxwPldoZW4gX01CX0NBUEFCTEUgaXMgZGVmaW5lZCwgdGhpcyByb3V0aW5lIGNhbGxzIDxjb2RlPl9tYnRvd2NfcjwvY29kZT4gdG8gcGVyZm9ybQordGhlIGNvbnZlcnNpb24sIHBhc3NpbmcgYSBzdGF0ZSB2YXJpYWJsZSB0byBhbGxvdyBzdGF0ZSBkZXBlbmRlbnQKK2RlY29kaW5nLiAgVGhlIHJlc3VsdCBpcyBiYXNlZCBvbiB0aGUgbG9jYWxlIHNldHRpbmcgd2hpY2ggbWF5CitiZSByZXN0cmljdGVkIHRvIGEgZGVmaW5lZCBzZXQgb2YgbG9jYWxlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5tYnRvd2M8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYKKzx2YXI+czwvdmFyPiBpcyA8Y29kZT5OVUxMPC9jb2RlPiBvciBpcyB0aGUgZW1wdHkgc3RyaW5nOworaXQgcmV0dXJucyA8Y29kZT4xPC9jb2RlPiBpZiBub3QgX01CX0NBUEFCTEUgb3IKK3RoZSBjaGFyYWN0ZXIgaXMgYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXI7IGl0IHJldHVybnMgPGNvZGU+LTE8L2NvZGU+CitpZiBuIGlzIDxjb2RlPjA8L2NvZGU+IG9yIHRoZSBtdWx0aS1ieXRlIGNoYXJhY3RlciBpcyBpbnZhbGlkOworb3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbXVsdGlieXRlIGNoYXJhY3Rlci4gCitJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIC0xLCBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSA8Y29kZT5wd2M8L2NvZGU+CitvdXRwdXQgc3RyaW5nLiAgSWYgdGhlIGlucHV0IGlzIHRoZSBlbXB0eSBzdHJpbmcsIGEgd2NoYXJfdCBudWwKK2lzIHBsYWNlZCBpbiB0aGUgb3V0cHV0IHN0cmluZyBhbmQgMCBpcyByZXR1cm5lZC4gIElmIHRoZSBpbnB1dAoraGFzIGEgbGVuZ3RoIG9mIDAsIG5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIDxjb2RlPnB3YzwvY29kZT4gb3V0cHV0IHN0cmluZy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPm1idG93YzwvY29kZT4gaXMgcmVxdWlyZWQgaW4gdGhlIEFOU0kgQyBzdGFuZGFyZC4gIEhvd2V2ZXIsIHRoZSBwcmVjaXNlCitlZmZlY3RzIHZhcnkgd2l0aCB0aGUgbG9jYWxlLgorCisgICA8cD48Y29kZT5tYnRvd2M8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtY2NweS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtY2NweS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDRhODEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1jY3B5Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bWVtY2NweSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaW5kZXguaHRtbCNpbmRleCIgdGl0bGU9ImluZGV4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWVtY2hyLmh0bWwjbWVtY2hyIiB0aXRsZT0ibWVtY2hyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtZW1jY3B5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1lbWNoci5odG1sI21lbWNociI+bWVtY2hyPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaW5kZXguaHRtbCNpbmRleCI+aW5kZXg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuNSA8Y29kZT5tZW1jY3B5PC9jb2RlPiZtZGFzaDtjb3B5IG1lbW9yeSByZWdpb25zIHdpdGggZW5kLXRva2VuIGNoZWNrPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIHZvaWQqIG1lbWNjcHkodm9pZCAqcmVzdHJpY3QgPHZhcj5vdXQ8L3Zhcj4sIGNvbnN0IHZvaWQgKnJlc3RyaWN0IDx2YXI+aW48L3Zhcj4sCisgICAgICAgICBpbnQgPHZhcj5lbmRjaGFyPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIGNvcGllcyB1cCB0byA8dmFyPm48L3Zhcj4gYnl0ZXMgZnJvbSB0aGUgbWVtb3J5IHJlZ2lvbgorcG9pbnRlZCB0byBieSA8dmFyPmluPC92YXI+IHRvIHRoZSBtZW1vcnkgcmVnaW9uIHBvaW50ZWQgdG8gYnkKKzx2YXI+b3V0PC92YXI+LiAgSWYgYSBieXRlIG1hdGNoaW5nIHRoZSA8dmFyPmVuZGNoYXI8L3Zhcj4gaXMgZW5jb3VudGVyZWQsCit0aGUgYnl0ZSBpcyBjb3BpZWQgYW5kIGNvcHlpbmcgc3RvcHMuCisKKyAgIDxwPklmIHRoZSByZWdpb25zIG92ZXJsYXAsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPm1lbWNjcHk8L2NvZGU+IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIGZvbGxvd2luZyB0aGUKKzx2YXI+ZW5kY2hhcjwvdmFyPiBpbiB0aGUgPHZhcj5vdXQ8L3Zhcj4gcmVnaW9uLiAgSWYgbm8gYnl0ZSBtYXRjaGluZworPHZhcj5lbmRjaGFyPC92YXI+IHdhcyBjb3BpZWQsIHRoZW4gPGNvZGU+TlVMTDwvY29kZT4gaXMgcmV0dXJuZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5tZW1jY3B5PC9jb2RlPiBpcyBhIEdOVSBleHRlbnNpb24uCisKKyAgIDxwPjxjb2RlPm1lbWNjcHk8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtY2hyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1jaHIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWUzMGFiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtY2hyLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bWVtY2hyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJtZW1jY3B5Lmh0bWwjbWVtY2NweSIgdGl0bGU9Im1lbWNjcHkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJtZW1jbXAuaHRtbCNtZW1jbXAiIHRpdGxlPSJtZW1jbXAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Im1lbWNociI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJtZW1jbXAuaHRtbCNtZW1jbXAiPm1lbWNtcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im1lbWNjcHkuaHRtbCNtZW1jY3B5Ij5tZW1jY3B5PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjYgPGNvZGU+bWVtY2hyPC9jb2RlPiZtZGFzaDtmaW5kIGNoYXJhY3RlciBpbiBtZW1vcnk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tZW1jaHItMzc2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIHZvaWQgKm1lbWNocihjb25zdCB2b2lkICo8dmFyPnNyYzwvdmFyPiwgaW50IDx2YXI+YzwvdmFyPiwgc2l6ZV90IDx2YXI+bGVuZ3RoPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIG1lbW9yeSBzdGFydGluZyBhdCA8Y29kZT4qPC9jb2RlPjx2YXI+c3JjPC92YXI+IGZvciB0aGUKK2NoYXJhY3RlciA8dmFyPmM8L3Zhcj4uICBUaGUgc2VhcmNoIG9ubHkgZW5kcyB3aXRoIHRoZSBmaXJzdAorb2NjdXJyZW5jZSBvZiA8dmFyPmM8L3Zhcj4sIG9yIGFmdGVyIDx2YXI+bGVuZ3RoPC92YXI+IGNoYXJhY3RlcnM7IGluCitwYXJ0aWN1bGFyLCA8Y29kZT5OVUw8L2NvZGU+IGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUgc2VhcmNoLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitJZiB0aGUgY2hhcmFjdGVyIDx2YXI+YzwvdmFyPiBpcyBmb3VuZCB3aXRoaW4gPHZhcj5sZW5ndGg8L3Zhcj4gY2hhcmFjdGVycworb2YgPGNvZGU+KjwvY29kZT48dmFyPnNyYzwvdmFyPiwgYSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgaXMgcmV0dXJuZWQuIElmCis8dmFyPmM8L3Zhcj4gaXMgbm90IGZvdW5kLCB0aGVuIDxjb2RlPk5VTEw8L2NvZGU+IGlzIHJldHVybmVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+bWVtY2hyPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPm1lbWNocjwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1jbXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21lbWNtcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGI3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1jbXAuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5tZW1jbXAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im1lbWNoci5odG1sI21lbWNociIgdGl0bGU9Im1lbWNociI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Im1lbWNweS5odG1sI21lbWNweSIgdGl0bGU9Im1lbWNweSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibWVtY21wIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1lbWNweS5odG1sI21lbWNweSI+bWVtY3B5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibWVtY2hyLmh0bWwjbWVtY2hyIj5tZW1jaHI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuNyA8Y29kZT5tZW1jbXA8L2NvZGU+Jm1kYXNoO2NvbXBhcmUgdHdvIG1lbW9yeSBhcmVhczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1lbWNtcC0zNzciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgaW50IG1lbWNtcChjb25zdCB2b2lkICo8dmFyPnMxPC92YXI+LCBjb25zdCB2b2lkICo8dmFyPnMyPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIG5vdCBtb3JlIHRoYW4gPHZhcj5uPC92YXI+IGNoYXJhY3RlcnMgb2YgdGhlCitvYmplY3QgcG9pbnRlZCB0byBieSA8dmFyPnMxPC92YXI+IHdpdGggdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IDx2YXI+czI8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuLCBlcXVhbCB0byBvcgorbGVzcyB0aGFuIHplcm8gCWFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieQorPHZhcj5zMTwvdmFyPiBpcyBncmVhdGVyIHRoYW4sIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiB0aGUgb2JqZWN0Citwb2ludGVkIHRvIGJ5IDx2YXI+czI8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5tZW1jbXA8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+PGNvZGU+bWVtY21wPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21lbWNweS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtY3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkMWE4YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21lbWNweS5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm1lbWNweSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWVtY21wLmh0bWwjbWVtY21wIiB0aXRsZT0ibWVtY21wIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWVtbWVtLmh0bWwjbWVtbWVtIiB0aXRsZT0ibWVtbWVtIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtZW1jcHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibWVtbWVtLmh0bWwjbWVtbWVtIj5tZW1tZW08L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJtZW1jbXAuaHRtbCNtZW1jbXAiPm1lbWNtcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS44IDxjb2RlPm1lbWNweTwvY29kZT4mbWRhc2g7Y29weSBtZW1vcnkgcmVnaW9uczwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICB2b2lkKiBtZW1jcHkodm9pZCAqcmVzdHJpY3QgPHZhcj5vdXQ8L3Zhcj4sIGNvbnN0IHZvaWQgKnJlc3RyaWN0IDx2YXI+aW48L3Zhcj4sCisgICAgICAgICBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIGNvcGllcyA8dmFyPm48L3Zhcj4gYnl0ZXMgZnJvbSB0aGUgbWVtb3J5IHJlZ2lvbgorcG9pbnRlZCB0byBieSA8dmFyPmluPC92YXI+IHRvIHRoZSBtZW1vcnkgcmVnaW9uIHBvaW50ZWQgdG8gYnkKKzx2YXI+b3V0PC92YXI+LgorCisgICA8cD5JZiB0aGUgcmVnaW9ucyBvdmVybGFwLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5tZW1jcHk8L2NvZGU+IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSA8dmFyPm91dDwvdmFyPgorcmVnaW9uLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+bWVtY3B5PC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPm1lbWNweTwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1tZW0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21lbW1lbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjMzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1tZW0uaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5tZW1tZW0gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im1lbWNweS5odG1sI21lbWNweSIgdGl0bGU9Im1lbWNweSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Im1lbW1vdmUuaHRtbCNtZW1tb3ZlIiB0aXRsZT0ibWVtbW92ZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibWVtbWVtIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1lbW1vdmUuaHRtbCNtZW1tb3ZlIj5tZW1tb3ZlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibWVtY3B5Lmh0bWwjbWVtY3B5Ij5tZW1jcHk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuOSA8Y29kZT5tZW1tZW08L2NvZGU+Jm1kYXNoO2ZpbmQgbWVtb3J5IHNlZ21lbnQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tZW1tZW0tMzc4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIGNoYXIgKm1lbW1lbShjb25zdCB2b2lkICo8dmFyPnMxPC92YXI+LCBzaXplX3QgPHZhcj5sMTwvdmFyPiwgY29uc3Qgdm9pZCAqPHZhcj5zMjwvdmFyPiwKKyAgICAgICAgIHNpemVfdCA8dmFyPmwyPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CisKKyAgIDxwPkxvY2F0ZXMgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlIG1lbW9yeSByZWdpb24gcG9pbnRlZCB0bworYnkgPHZhcj5zMTwvdmFyPiB3aXRoIGxlbmd0aCA8dmFyPmwxPC92YXI+IG9mIHRoZSBzZXF1ZW5jZSBvZiBieXRlcyBwb2ludGVkCit0byBieSA8dmFyPnMyPC92YXI+IG9mIGxlbmd0aCA8dmFyPmwyPC92YXI+LiAgSWYgeW91IGFscmVhZHkga25vdyB0aGUKK2xlbmd0aHMgb2YgeW91ciBoYXlzdGFjayBhbmQgbmVlZGxlLCA8Y29kZT5tZW1tZW08L2NvZGU+IGNhbiBiZSBtdWNoCitmYXN0ZXIgdGhhbiA8Y29kZT5zdHJzdHI8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbG9jYXRlZCBzZWdtZW50LCBvciBhIG51bGwgcG9pbnRlciBpZgorPHZhcj5zMjwvdmFyPiBpcyBub3QgZm91bmQuIElmIDx2YXI+bDI8L3Zhcj4gaXMgMCwgPHZhcj5zMTwvdmFyPiBpcyByZXR1cm5lZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPm1lbW1lbTwvY29kZT4gaXMgYSBuZXdsaWIgZXh0ZW5zaW9uLgorCisgICA8cD48Y29kZT5tZW1tZW08L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtbW92ZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtbW92ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWRiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1tb3ZlLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bWVtbW92ZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWVtbWVtLmh0bWwjbWVtbWVtIiB0aXRsZT0ibWVtbWVtIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWVtcGNweS5odG1sI21lbXBjcHkiIHRpdGxlPSJtZW1wY3B5Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtZW1tb3ZlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1lbXBjcHkuaHRtbCNtZW1wY3B5Ij5tZW1wY3B5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibWVtbWVtLmh0bWwjbWVtbWVtIj5tZW1tZW08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMTAgPGNvZGU+bWVtbW92ZTwvY29kZT4mbWRhc2g7bW92ZSBwb3NzaWJseSBvdmVybGFwcGluZyBtZW1vcnk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tZW1tb3ZlLTM3OSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICB2b2lkICptZW1tb3ZlKHZvaWQgKjx2YXI+ZHN0PC92YXI+LCBjb25zdCB2b2lkICo8dmFyPnNyYzwvdmFyPiwgc2l6ZV90IDx2YXI+bGVuZ3RoPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIG1vdmVzIDx2YXI+bGVuZ3RoPC92YXI+IGNoYXJhY3RlcnMgZnJvbSB0aGUgYmxvY2sgb2YKK21lbW9yeSBzdGFydGluZyBhdCA8Y29kZT4qPC9jb2RlPjx2YXI+c3JjPC92YXI+IHRvIHRoZSBtZW1vcnkgc3RhcnRpbmcgYXQKKzxjb2RlPio8L2NvZGU+PHZhcj5kc3Q8L3Zhcj4uIDxjb2RlPm1lbW1vdmU8L2NvZGU+IHJlcHJvZHVjZXMgdGhlIGNoYXJhY3RlcnMgY29ycmVjdGx5CithdCA8Y29kZT4qPC9jb2RlPjx2YXI+ZHN0PC92YXI+IGV2ZW4gaWYgdGhlIHR3byBhcmVhcyBvdmVybGFwLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgZnVuY3Rpb24gcmV0dXJucyA8dmFyPmRzdDwvdmFyPiBhcyBwYXNzZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5tZW1tb3ZlPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPm1lbW1vdmU8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtcGNweS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWVtcGNweS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExY2NjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1wY3B5Lmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bWVtcGNweSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWVtbW92ZS5odG1sI21lbW1vdmUiIHRpdGxlPSJtZW1tb3ZlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWVtc2V0Lmh0bWwjbWVtc2V0IiB0aXRsZT0ibWVtc2V0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtZW1wY3B5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1lbXNldC5odG1sI21lbXNldCI+bWVtc2V0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibWVtbW92ZS5odG1sI21lbW1vdmUiPm1lbW1vdmU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMTEgPGNvZGU+bWVtcGNweTwvY29kZT4mbWRhc2g7Y29weSBtZW1vcnkgcmVnaW9ucyBhbmQgcmV0dXJuIGVuZCBwb2ludGVyPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIHZvaWQqIG1lbXBjcHkodm9pZCAqPHZhcj5vdXQ8L3Zhcj4sIGNvbnN0IHZvaWQgKjx2YXI+aW48L3Zhcj4sIHNpemVfdCA8dmFyPm48L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoaXMgZnVuY3Rpb24gY29waWVzIDx2YXI+bjwvdmFyPiBieXRlcyBmcm9tIHRoZSBtZW1vcnkgcmVnaW9uCitwb2ludGVkIHRvIGJ5IDx2YXI+aW48L3Zhcj4gdG8gdGhlIG1lbW9yeSByZWdpb24gcG9pbnRlZCB0byBieQorPHZhcj5vdXQ8L3Zhcj4uCisKKyAgIDxwPklmIHRoZSByZWdpb25zIG92ZXJsYXAsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPm1lbXBjcHk8L2NvZGU+IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBieXRlIGZvbGxvd2luZyB0aGUKK2xhc3QgYnl0ZSBjb3BpZWQgdG8gdGhlIDx2YXI+b3V0PC92YXI+IHJlZ2lvbi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPm1lbXBjcHk8L2NvZGU+IGlzIGEgR05VIGV4dGVuc2lvbi4KKworICAgPHA+PGNvZGU+bWVtcGNweTwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1zZXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21lbXNldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNmQwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9tZW1zZXQuaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5tZW1zZXQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im1lbXBjcHkuaHRtbCNtZW1wY3B5IiB0aXRsZT0ibWVtcGNweSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InJpbmRleC5odG1sI3JpbmRleCIgdGl0bGU9InJpbmRleCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibWVtc2V0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InJpbmRleC5odG1sI3JpbmRleCI+cmluZGV4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibWVtcGNweS5odG1sI21lbXBjcHkiPm1lbXBjcHk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMTIgPGNvZGU+bWVtc2V0PC9jb2RlPiZtZGFzaDtzZXQgYW4gYXJlYSBvZiBtZW1vcnk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tZW1zZXQtMzgwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIHZvaWQgKm1lbXNldCh2b2lkICo8dmFyPmRzdDwvdmFyPiwgaW50IDx2YXI+YzwvdmFyPiwgc2l6ZV90IDx2YXI+bGVuZ3RoPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBhcmd1bWVudCA8dmFyPmM8L3Zhcj4gaW50byBhbiB1bnNpZ25lZAorY2hhciBhbmQgZmlsbHMgdGhlIGZpcnN0IDx2YXI+bGVuZ3RoPC92YXI+IGNoYXJhY3RlcnMgb2YgdGhlIGFycmF5Citwb2ludGVkIHRvIGJ5IDx2YXI+ZHN0PC92YXI+IHRvIHRoZSB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+bWVtc2V0PC9jb2RlPiByZXR1cm5zIHRoZSB2YWx1ZSBvZiA8dmFyPmRzdDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPm1lbXNldDwvY29kZT4gaXMgQU5TSSBDLgorCisgICA8cD48Y29kZT5tZW1zZXQ8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWt0ZW1wLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9ta3RlbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWE1ZGZmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvbWt0ZW1wLmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm1rdGVtcCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2V0d2NoYXIuaHRtbCNnZXR3Y2hhciIgdGl0bGU9ImdldHdjaGFyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ib3Blbl8wMDVmbWVtc3RyZWFtLmh0bWwjb3Blbl8wMDVmbWVtc3RyZWFtIiB0aXRsZT0ib3Blbl9tZW1zdHJlYW0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Im1rdGVtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJvcGVuXzAwNWZtZW1zdHJlYW0uaHRtbCNvcGVuXzAwNWZtZW1zdHJlYW0iPm9wZW5fbWVtc3RyZWFtPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZ2V0d2NoYXIuaHRtbCNnZXR3Y2hhciI+Z2V0d2NoYXI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNDEgPGNvZGU+bWt0ZW1wPC9jb2RlPiwgPGNvZGU+bWtzdGVtcDwvY29kZT4sIDxjb2RlPm1rb3N0ZW1wPC9jb2RlPiwgPGNvZGU+bWtzdGVtcHM8L2NvZGU+LDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1rdGVtcC0yMzAiPjwvYT48YSBuYW1lPSJpbmRleC1ta2R0ZW1wLTIzMSI+PC9hPjxhIG5hbWU9ImluZGV4LW1rc3RlbXAtMjMyIj48L2E+PGEgbmFtZT0iaW5kZXgtbWtzdGVtcHMtMjMzIj48L2E+PGEgbmFtZT0iaW5kZXgtbWtvc3RlbXAtMjM0Ij48L2E+PGEgbmFtZT0iaW5kZXgtbWtvc3RlbXBzLTIzNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbWt0ZW1wXzAwNWZyLTIzNiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbWtkdGVtcF8wMDVmci0yMzciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zm1rc3RlbXBfMDA1ZnItMjM4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZta3N0ZW1wc18wMDVmci0yMzkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zm1rb3N0ZW1wXzAwNWZyLTI0MCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbWtvc3RlbXBzXzAwNWZyLTI0MSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBjaGFyICpta3RlbXAoY2hhciAqPHZhcj5wYXRoPC92YXI+KTsKKyAgICAgY2hhciAqbWtkdGVtcChjaGFyICo8dmFyPnBhdGg8L3Zhcj4pOworICAgICBpbnQgbWtzdGVtcChjaGFyICo8dmFyPnBhdGg8L3Zhcj4pOworICAgICBpbnQgbWtzdGVtcHMoY2hhciAqPHZhcj5wYXRoPC92YXI+LCBpbnQgPHZhcj5zdWZmaXhsZW48L3Zhcj4pOworICAgICBpbnQgbWtvc3RlbXAoY2hhciAqPHZhcj5wYXRoPC92YXI+LCBpbnQgPHZhcj5mbGFnczwvdmFyPik7CisgICAgIGludCBta29zdGVtcHMoY2hhciAqPHZhcj5wYXRoPC92YXI+LCBpbnQgPHZhcj5zdWZmaXhsZW48L3Zhcj4sIGludCA8dmFyPmZsYWdzPC92YXI+KTsKKyAgICAgCisgICAgIGNoYXIgKl9ta3RlbXBfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjaGFyICo8dmFyPnBhdGg8L3Zhcj4pOworICAgICBjaGFyICpfbWtkdGVtcF9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNoYXIgKjx2YXI+cGF0aDwvdmFyPik7CisgICAgIGludCAqX21rc3RlbXBfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjaGFyICo8dmFyPnBhdGg8L3Zhcj4pOworICAgICBpbnQgKl9ta3N0ZW1wc19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNoYXIgKjx2YXI+cGF0aDwvdmFyPiwgaW50IDx2YXI+bGVuPC92YXI+KTsKKyAgICAgaW50ICpfbWtvc3RlbXBfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjaGFyICo8dmFyPnBhdGg8L3Zhcj4sCisgICAgICAgICBpbnQgPHZhcj5mbGFnczwvdmFyPik7CisgICAgIGludCAqX21rb3N0ZW1wc19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNoYXIgKjx2YXI+cGF0aDwvdmFyPiwgaW50IDx2YXI+bGVuPC92YXI+LAorICAgICAgICAgaW50IDx2YXI+ZmxhZ3M8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPm1rdGVtcDwvY29kZT4sIDxjb2RlPm1rc3RlbXA8L2NvZGU+LCBhbmQgPGNvZGU+bWtzdGVtcHM8L2NvZGU+IGF0dGVtcHQgdG8gZ2VuZXJhdGUgYSBmaWxlIG5hbWUKK3RoYXQgaXMgbm90IHlldCBpbiB1c2UgZm9yIGFueSBleGlzdGluZyBmaWxlLiAgPGNvZGU+bWtzdGVtcDwvY29kZT4gYW5kIDxjb2RlPm1rc3RlbXBzPC9jb2RlPgorY3JlYXRlIHRoZSBmaWxlIGFuZCBvcGVuIGl0IGZvciByZWFkaW5nIGFuZCB3cml0aW5nOyA8Y29kZT5ta3RlbXA8L2NvZGU+IHNpbXBseQorZ2VuZXJhdGVzIHRoZSBmaWxlIG5hbWUgKG1ha2luZyA8Y29kZT5ta3RlbXA8L2NvZGU+IGEgc2VjdXJpdHkgcmlzaykuICA8Y29kZT5ta29zdGVtcDwvY29kZT4KK2FuZCA8Y29kZT5ta29zdGVtcHM8L2NvZGU+IGFsbG93IHRoZSBhZGRpdGlvbiBvZiBvdGhlciA8Y29kZT5vcGVuPC9jb2RlPiBmbGFncywgc3VjaAorYXMgPGNvZGU+T19DTE9FWEVDPC9jb2RlPiwgPGNvZGU+T19BUFBFTkQ8L2NvZGU+LCBvciA8Y29kZT5PX1NZTkM8L2NvZGU+LiAgT24gcGxhdGZvcm1zIHdpdGggYQorc2VwYXJhdGUgdGV4dCBtb2RlLCA8Y29kZT5ta3N0ZW1wPC9jb2RlPiBmb3JjZXMgPGNvZGU+T19CSU5BUlk8L2NvZGU+LCB3aGlsZSA8Y29kZT5ta29zdGVtcDwvY29kZT4KK2FsbG93cyB0aGUgY2hvaWNlIGJldHdlZW4gPGNvZGU+T19CSU5BUlk8L2NvZGU+LCA8Y29kZT5PX1RFWFQ8L2NvZGU+LCBvciAwIGZvciBkZWZhdWx0LiAKKzxjb2RlPm1rZHRlbXA8L2NvZGU+IGF0dGVtcHRzIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGEgZmlsZSwgd2l0aCBhCitwZXJtaXNzaW9ucyBtYXNrIG9mIDA3MDAuCisKKyAgIDxwPllvdSBzdXBwbHkgYSBzaW1wbGUgcGF0dGVybiBmb3IgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWUsIGFzIHRoZSBzdHJpbmcKK2F0IDx2YXI+cGF0aDwvdmFyPi4gIFRoZSBwYXR0ZXJuIHNob3VsZCBiZSBhIHZhbGlkIGZpbGVuYW1lIChpbmNsdWRpbmcgcGF0aAoraW5mb3JtYXRpb24gaWYgeW91IHdpc2gpIGVuZGluZyB3aXRoIGF0IGxlYXN0IHNpeCBgPGNvZGU+WDwvY29kZT4nCitjaGFyYWN0ZXJzLiAgVGhlIGdlbmVyYXRlZCBmaWxlbmFtZSB3aWxsIG1hdGNoIHRoZSBsZWFkaW5nIHBhcnQgb2YgdGhlCituYW1lIHlvdSBzdXBwbHksIHdpdGggdGhlIHRyYWlsaW5nIGA8Y29kZT5YPC9jb2RlPicgY2hhcmFjdGVycyByZXBsYWNlZCBieSBzb21lCitjb21iaW5hdGlvbiBvZiBkaWdpdHMgYW5kIGxldHRlcnMuICBXaXRoIDxjb2RlPm1rc3RlbXBzPC9jb2RlPiwgdGhlIGA8Y29kZT5YPC9jb2RlPicKK2NoYXJhY3RlcnMgZW5kIDx2YXI+c3VmZml4bGVuPC92YXI+IGJ5dGVzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb25zIDxjb2RlPl9ta3RlbXBfcjwvY29kZT4sIDxjb2RlPl9ta2R0ZW1wX3I8L2NvZGU+LCA8Y29kZT5fbWtzdGVtcF9yPC9jb2RlPiwKKzxjb2RlPl9ta29zdGVtcF9yPC9jb2RlPiwgPGNvZGU+X21rb3N0ZW1wc19yPC9jb2RlPiwgYW5kIDxjb2RlPl9ta3N0ZW1wc19yPC9jb2RlPiBhcmUgcmVlbnRyYW50Cit2ZXJzaW9ucy4gIFRoZSBleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kKK3N0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+bWt0ZW1wPC9jb2RlPiByZXR1cm5zIHRoZSBwb2ludGVyIDx2YXI+cGF0aDwvdmFyPiB0byB0aGUgbW9kaWZpZWQgc3RyaW5nCityZXByZXNlbnRpbmcgYW4gdW51c2VkIGZpbGVuYW1lLCB1bmxlc3MgaXQgY291bGQgbm90IGdlbmVyYXRlIG9uZSwgb3IKK3RoZSBwYXR0ZXJuIHlvdSBwcm92aWRlZCBpcyBub3Qgc3VpdGFibGUgZm9yIGEgZmlsZW5hbWU7IGluIHRoYXQgY2FzZSwKK2l0IHJldHVybnMgPGNvZGU+TlVMTDwvY29kZT4uICBCZSBhd2FyZSB0aGF0IHRoZXJlIGlzIGFuIGluaGVyZW50IHJhY2UgYmV0d2VlbgorZ2VuZXJhdGluZyB0aGUgbmFtZSBhbmQgYXR0ZW1wdGluZyB0byBjcmVhdGUgYSBmaWxlIGJ5IHRoYXQgbmFtZTsKK3lvdSBhcmUgYWR2aXNlZCB0byB1c2UgPGNvZGU+T19FWENMfE9fQ1JFQVQ8L2NvZGU+LgorCisgICA8cD48Y29kZT5ta2R0ZW1wPC9jb2RlPiByZXR1cm5zIHRoZSBwb2ludGVyIDx2YXI+cGF0aDwvdmFyPiB0byB0aGUgbW9kaWZpZWQgc3RyaW5nIGlmIHRoZQorZGlyZWN0b3J5IHdhcyBjcmVhdGVkLCBvdGhlcndpc2UgaXQgcmV0dXJucyA8Y29kZT5OVUxMPC9jb2RlPi4KKworICAgPHA+PGNvZGU+bWtzdGVtcDwvY29kZT4sIDxjb2RlPm1rc3RlbXBzPC9jb2RlPiwgPGNvZGU+bWtvc3RlbXA8L2NvZGU+LCBhbmQgPGNvZGU+bWtvc3RlbXBzPC9jb2RlPiByZXR1cm4gYSBmaWxlCitkZXNjcmlwdG9yIHRvIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUsIHVubGVzcyBpdCBjb3VsZCBub3QgZ2VuZXJhdGUgYW4KK3VudXNlZCBmaWxlbmFtZSwgb3IgdGhlIHBhdHRlcm4geW91IHByb3ZpZGVkIGlzIG5vdCBzdWl0YWJsZSBmb3IgYQorZmlsZW5hbWU7IGluIHRoYXQgY2FzZSwgaXQgcmV0dXJucyA8Y29kZT4tMTwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgZG9lcyBub3QgcmVxdWlyZSBlaXRoZXIgPGNvZGU+bWt0ZW1wPC9jb2RlPiBvciA8Y29kZT5ta3N0ZW1wPC9jb2RlPjsgdGhlIFN5c3RlbQorViBJbnRlcmZhY2UgRGVmaW5pdGlvbiByZXF1aXJlcyA8Y29kZT5ta3RlbXA8L2NvZGU+IGFzIG9mIElzc3VlIDIuICBQT1NJWCAyMDAxCityZXF1aXJlcyA8Y29kZT5ta3N0ZW1wPC9jb2RlPiwgYW5kIFBPU0lYIDIwMDggcmVxdWlyZXMgPGNvZGU+bWtkdGVtcDwvY29kZT4gd2hpbGUKK2RlcHJlY2F0aW5nIDxjb2RlPm1rdGVtcDwvY29kZT4uICA8Y29kZT5ta3N0ZW1wczwvY29kZT4sIDxjb2RlPm1rb3N0ZW1wPC9jb2RlPiwgYW5kIDxjb2RlPm1rb3N0ZW1wczwvY29kZT4KK2FyZSBub3Qgc3RhbmRhcmRpemVkLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5nZXRwaWQ8L2NvZGU+LCA8Y29kZT5ta2RpcjwvY29kZT4sIDxjb2RlPm9wZW48L2NvZGU+LCA8Y29kZT5zdGF0PC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9ta3RpbWUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL21rdGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOWI3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9ta3RpbWUuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5ta3RpbWUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIiB0aXRsZT0iVGltZWZucyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImxvY2FsdGltZS5odG1sI2xvY2FsdGltZSIgdGl0bGU9ImxvY2FsdGltZSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cmZ0aW1lLmh0bWwjc3RyZnRpbWUiIHRpdGxlPSJzdHJmdGltZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibWt0aW1lIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cmZ0aW1lLmh0bWwjc3RyZnRpbWUiPnN0cmZ0aW1lPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibG9jYWx0aW1lLmh0bWwjbG9jYWx0aW1lIj5sb2NhbHRpbWU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJUaW1lZm5zLmh0bWwjVGltZWZucyI+VGltZWZuczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjguNyA8Y29kZT5ta3RpbWU8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgdGltZSB0byBhcml0aG1ldGljIHJlcHJlc2VudGF0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbWt0aW1lLTQzOCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKKyAgICAgdGltZV90IG1rdGltZShzdHJ1Y3QgdG0gKjx2YXI+dGltcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+bWt0aW1lPC9jb2RlPiBhc3N1bWVzIHRoZSB0aW1lIGF0IDx2YXI+dGltcDwvdmFyPiBpcyBhIGxvY2FsIHRpbWUsIGFuZCBjb252ZXJ0cworaXRzIHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIHRyYWRpdGlvbmFsIHJlcHJlc2VudGF0aW9uIGRlZmluZWQgYnkKKzxjb2RlPnN0cnVjdCB0bTwvY29kZT4gaW50byBhIHJlcHJlc2VudGF0aW9uIHN1aXRhYmxlIGZvciBhcml0aG1ldGljLgorCisgICA8cD48Y29kZT5sb2NhbHRpbWU8L2NvZGU+IGlzIHRoZSBpbnZlcnNlIG9mIDxjb2RlPm1rdGltZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK0lmIHRoZSBjb250ZW50cyBvZiB0aGUgc3RydWN0dXJlIGF0IDx2YXI+dGltcDwvdmFyPiBkbyBub3QgZm9ybSBhIHZhbGlkCitjYWxlbmRhciB0aW1lIHJlcHJlc2VudGF0aW9uLCB0aGUgcmVzdWx0IGlzIDxjb2RlPi0xPC9jb2RlPi4gIE90aGVyd2lzZSwgdGhlCityZXN1bHQgaXMgdGhlIHRpbWUsIGNvbnZlcnRlZCB0byBhIDxjb2RlPnRpbWVfdDwvY29kZT4gdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+bWt0aW1lPC9jb2RlPi4KKworICAgPHA+PGNvZGU+bWt0aW1lPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL29uXzAwNWZleGl0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9vbl8wMDVmZXhpdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiODgxM2YKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9vbl8wMDVmZXhpdC5odG1sCkBAIC0wLDAgKzEsNzcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm9uX2V4aXQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im1idG93Yy5odG1sI21idG93YyIgdGl0bGU9Im1idG93YyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InFzb3J0Lmh0bWwjcXNvcnQiIHRpdGxlPSJxc29ydCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ib25fZXhpdCI+PC9hPgorPGEgbmFtZT0ib25fMDA1ZmV4aXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0icXNvcnQuaHRtbCNxc29ydCI+cXNvcnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJtYnRvd2MuaHRtbCNtYnRvd2MiPm1idG93YzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4zMCA8Y29kZT5vbl9leGl0PC9jb2RlPiZtZGFzaDtyZXF1ZXN0IGV4ZWN1dGlvbiBvZiBmdW5jdGlvbiB3aXRoIGFyZ3VtZW50IGF0IHByb2dyYW0gZXhpdDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW9uXzAwNWZleGl0LTY0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGludCBvbl9leGl0ICh2b2lkICgqPHZhcj5mdW5jdGlvbjwvdmFyPikoaW50LCB2b2lkICopLCB2b2lkICo8dmFyPmFyZzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorWW91IGNhbiB1c2UgPGNvZGU+b25fZXhpdDwvY29kZT4gdG8gZW5yb2xsIGZ1bmN0aW9ucyBpbiBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQKK3dpbGwgYmUgY2FsbGVkIHdoZW4geW91ciBwcm9ncmFtIHRlcm1pbmF0ZXMgbm9ybWFsbHkuICBUaGUgYXJndW1lbnQgaXMKK2EgcG9pbnRlciB0byBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gYXJndW1lbnRzLiAgVGhlCitmaXJzdCBpcyB0aGUgc3RhdHVzIGNvZGUgcGFzc2VkIHRvIGV4aXQgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgb2YgdHlwZQorcG9pbnRlciB0byB2b2lkLiAgVGhlIGZ1bmN0aW9uIG11c3Qgbm90IHJldHVybiBhIHJlc3VsdC4gIFRoZSB2YWx1ZQorb2YgPHZhcj5hcmc8L3Zhcj4gaXMgcmVnaXN0ZXJlZCBhbmQgcGFzc2VkIGFzIHRoZSBhcmd1bWVudCB0byA8dmFyPmZ1bmN0aW9uPC92YXI+LgorCisgICA8cD5UaGUgZnVuY3Rpb25zIGFyZSBrZXB0IGluIGEgTElGTyBzdGFjazsgdGhhdCBpcywgdGhlIGxhc3QgZnVuY3Rpb24KK2Vucm9sbGVkIGJ5IDxjb2RlPmF0ZXhpdDwvY29kZT4gb3IgPGNvZGU+b25fZXhpdDwvY29kZT4gd2lsbCBiZSB0aGUgZmlyc3QgdG8gZXhlY3V0ZSB3aGVuCit5b3VyIHByb2dyYW0gZXhpdHMuICBZb3UgY2FuIGludGVybWl4IGZ1bmN0aW9ucyB1c2luZyA8Y29kZT5hdGV4aXQ8L2NvZGU+IGFuZAorPGNvZGU+b25fZXhpdDwvY29kZT4uCisKKyAgIDxwPlRoZXJlIGlzIG5vIGJ1aWx0LWluIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgZnVuY3Rpb25zIHlvdSBjYW4gZW5yb2xsCitpbiB0aGlzIGxpc3Q7IGhvd2V2ZXIsIGFmdGVyIGV2ZXJ5IGdyb3VwIG9mIDMyIGZ1bmN0aW9ucyBpcyBlbnJvbGxlZCwKKzxjb2RlPmF0ZXhpdDwvY29kZT4vPGNvZGU+b25fZXhpdDwvY29kZT4gd2lsbCBjYWxsIDxjb2RlPm1hbGxvYzwvY29kZT4gdG8gZ2V0IHNwYWNlIGZvciB0aGUgbmV4dCBwYXJ0CitvZiB0aGUgbGlzdC4gICBUaGUgaW5pdGlhbCBsaXN0IG9mIDMyIGZ1bmN0aW9ucyBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCwgc28KK3lvdSBjYW4gYWx3YXlzIGNvdW50IG9uIGF0IGxlYXN0IHRoYXQgbWFueSBzbG90cyBhdmFpbGFibGUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPm9uX2V4aXQ8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYgaXQgc3VjY2VlZHMgaW4gZW5yb2xsaW5nIHlvdXIgZnVuY3Rpb24sCis8Y29kZT4tMTwvY29kZT4gaWYgaXQgZmFpbHMgKHBvc3NpYmxlIG9ubHkgaWYgbm8gc3BhY2Ugd2FzIGF2YWlsYWJsZSBmb3IKKzxjb2RlPm1hbGxvYzwvY29kZT4gdG8gZXh0ZW5kIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucykuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5vbl9leGl0PC9jb2RlPiBpcyBhIG5vbi1zdGFuZGFyZCBnbGliYyBleHRlbnNpb24KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogTm9uZQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL29wZW5fMDA1Zm1lbXN0cmVhbS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvb3Blbl8wMDVmbWVtc3RyZWFtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMwNzdkOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL29wZW5fMDA1Zm1lbXN0cmVhbS5odG1sCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm9wZW5fbWVtc3RyZWFtIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJta3RlbXAuaHRtbCNta3RlbXAiIHRpdGxlPSJta3RlbXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJwZXJyb3IuaHRtbCNwZXJyb3IiIHRpdGxlPSJwZXJyb3IiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Im9wZW5fbWVtc3RyZWFtIj48L2E+Cis8YSBuYW1lPSJvcGVuXzAwNWZtZW1zdHJlYW0iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0icGVycm9yLmh0bWwjcGVycm9yIj5wZXJyb3I8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJta3RlbXAuaHRtbCNta3RlbXAiPm1rdGVtcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC40MiA8Y29kZT5vcGVuX21lbXN0cmVhbTwvY29kZT4sIDxjb2RlPm9wZW5fd21lbXN0cmVhbTwvY29kZT4mbWRhc2g7b3BlbiBhIHdyaXRlIHN0cmVhbSBhcm91bmQgYW4gYXJiaXRyYXJ5LWxlbmd0aCBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1vcGVuXzAwNWZtZW1zdHJlYW0tMjQyIj48L2E+PGEgbmFtZT0iaW5kZXgtb3Blbl8wMDVmd21lbXN0cmVhbS0yNDMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBGSUxFICpvcGVuX21lbXN0cmVhbShjaGFyICoqcmVzdHJpY3QgPHZhcj5idWY8L3Zhcj4sCisgICAgICAgICBzaXplX3QgKnJlc3RyaWN0IDx2YXI+c2l6ZTwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgRklMRSAqb3Blbl93bWVtc3RyZWFtKHdjaGFyX3QgKipyZXN0cmljdCA8dmFyPmJ1ZjwvdmFyPiwKKyAgICAgICAgIHNpemVfdCAqcmVzdHJpY3QgPHZhcj5zaXplPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5vcGVuX21lbXN0cmVhbTwvY29kZT4gY3JlYXRlcyBhIHNlZWthYmxlLCBieXRlLW9yaWVudGVkIDxjb2RlPkZJTEU8L2NvZGU+IHN0cmVhbSB0aGF0Cit3cmFwcyBhbiBhcmJpdHJhcnktbGVuZ3RoIGJ1ZmZlciwgY3JlYXRlZCBhcyBpZiBieSA8Y29kZT5tYWxsb2M8L2NvZGU+LiAgVGhlIGN1cnJlbnQKK2NvbnRlbnRzIG9mICo8dmFyPmJ1ZjwvdmFyPiBhcmUgaWdub3JlZDsgdGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzICo8dmFyPnNpemU8L3Zhcj4KK2FzIGEgaGludCBvZiB0aGUgbWF4aW11bSBzaXplIGV4cGVjdGVkLCBidXQgZG9lcyBub3QgZmFpbCBpZiB0aGUgaGludAord2FzIHdyb25nLiAgVGhlIHBhcmFtZXRlcnMgPHZhcj5idWY8L3Zhcj4gYW5kIDx2YXI+c2l6ZTwvdmFyPiBhcmUgbGF0ZXIgc3RvcmVkCit0aHJvdWdoIGZvbGxvd2luZyBhbnkgY2FsbCB0byA8Y29kZT5mZmx1c2g8L2NvZGU+IG9yIDxjb2RlPmZjbG9zZTwvY29kZT4sIHNldCB0byB0aGUKK2N1cnJlbnQgYWRkcmVzcyBhbmQgdXNhYmxlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBzdHJpbmc7IGFsdGhvdWdoCithZnRlciBmZmx1c2gsIHRoZSBwb2ludGVyIGlzIG9ubHkgdmFsaWQgdW50aWwgYW5vdGhlciBzdHJlYW0gb3BlcmF0aW9uCit0aGF0IHJlc3VsdHMgaW4gYSB3cml0ZS4gIEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiB0aGUgdXNlciBhbHRlcnMKK2VpdGhlciAqPHZhcj5idWY8L3Zhcj4gb3IgKjx2YXI+c2l6ZTwvdmFyPiBwcmlvciB0byA8Y29kZT5mY2xvc2U8L2NvZGU+LgorCisgICA8cD48Y29kZT5vcGVuX3dtZW1zdHJlYW08L2NvZGU+IGlzIGxpa2UgPGNvZGU+b3Blbl9tZW1zdHJlYW08L2NvZGU+IGp1c3Qgd2l0aCB0aGUgYXNzb2NpYXRlZAorc3RyZWFtIGJlaW5nIHdpZGUtb3JpZW50ZWQuICBUaGUgc2l6ZSBzZXQgaW4gPHZhcj5zaXplPC92YXI+IGluIHN1YnNlcXVlbnQKK29wZXJhdGlvbnMgaXMgdGhlIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMuCisKKyAgIDxwPlRoZSBzdHJlYW0gaXMgd3JpdGUtb25seSwgc2luY2UgdGhlIHVzZXIgY2FuIGRpcmVjdGx5IHJlYWQgKjx2YXI+YnVmPC92YXI+CithZnRlciBhIGZsdXNoOyBzZWUgPGNvZGU+Zm1lbW9wZW48L2NvZGU+IGZvciBhIHdheSB0byB3cmFwIGEgc3RyaW5nIHdpdGggYQorcmVhZGFibGUgc3RyZWFtLiAgVGhlIHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgPGNvZGU+ZnJlZTwvY29kZT4gb24KK3RoZSBmaW5hbCAqPHZhcj5idWY8L3Zhcj4gYWZ0ZXIgPGNvZGU+ZmNsb3NlPC9jb2RlPi4KKworICAgPHA+QW55IHRpbWUgdGhlIHN0cmVhbSBpcyBmbHVzaGVkLCBhIE5VTCBieXRlIGlzIHdyaXR0ZW4gYXQgdGhlIGN1cnJlbnQKK3Bvc2l0aW9uIChidXQgaXMgbm90IGNvdW50ZWQgaW4gdGhlIGJ1ZmZlciBsZW5ndGgpLCBzbyB0aGF0IHRoZSBzdHJpbmcKK2lzIGFsd2F5cyBOVUwtdGVybWluYXRlZCBhZnRlciBhdCBtb3N0ICo8dmFyPnNpemU8L3Zhcj4gYnl0ZXMgKG9yIHdpZGUgY2hhcmFjdGVycworaW4gY2FzZSBvZiA8Y29kZT5vcGVuX3dtZW1zdHJlYW08L2NvZGU+KS4gIEhvd2V2ZXIsIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGJleW9uZAordGhlIGN1cnJlbnQgc3RyZWFtIG9mZnNldCBpcyBub3QgbG9zdCwgYW5kIHRoZSBOVUwgdmFsdWUgd3JpdHRlbiBkdXJpbmcgYQorZmx1c2ggaXMgcmVzdG9yZWQgdG8gaXRzIHByZXZpb3VzIHZhbHVlIHdoZW4gc2Vla2luZyBlbHNld2hlcmUgaW4gdGhlIHN0cmluZy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvcGVuIEZJTEUgcG9pbnRlciBvbiBzdWNjZXNzLiAgT24gZXJyb3IsCis8Y29kZT5OVUxMPC9jb2RlPiBpcyByZXR1cm5lZCwgYW5kIDxjb2RlPmVycm5vPC9jb2RlPiB3aWxsIGJlIHNldCB0byBFSU5WQUwgaWYgPHZhcj5idWY8L3Zhcj4KK29yIDx2YXI+c2l6ZTwvdmFyPiBpcyBOVUxMLCBFTk9NRU0gaWYgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQsIG9yCitFTUZJTEUgaWYgdG9vIG1hbnkgc3RyZWFtcyBhcmUgYWxyZWFkeSBvcGVuLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorUE9TSVguMS0yMDA4CisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPnNicms8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3BlcnJvci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcGVycm9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyMTkyYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3BlcnJvci5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnBlcnJvciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ib3Blbl8wMDVmbWVtc3RyZWFtLmh0bWwjb3Blbl8wMDVmbWVtc3RyZWFtIiB0aXRsZT0ib3Blbl9tZW1zdHJlYW0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJwdXRjLmh0bWwjcHV0YyIgdGl0bGU9InB1dGMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InBlcnJvciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJwdXRjLmh0bWwjcHV0YyI+cHV0YzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im9wZW5fMDA1Zm1lbXN0cmVhbS5odG1sI29wZW5fMDA1Zm1lbXN0cmVhbSI+b3Blbl9tZW1zdHJlYW08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNDMgPGNvZGU+cGVycm9yPC9jb2RlPiZtZGFzaDtwcmludCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0YW5kYXJkIGVycm9yPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcGVycm9yLTI0NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmcGVycm9yXzAwNWZyLTI0NSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIHZvaWQgcGVycm9yKGNoYXIgKjx2YXI+cHJlZml4PC92YXI+KTsKKyAgICAgCisgICAgIHZvaWQgX3BlcnJvcl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNoYXIgKjx2YXI+cHJlZml4PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitVc2UgPGNvZGU+cGVycm9yPC9jb2RlPiB0byBwcmludCAob24gc3RhbmRhcmQgZXJyb3IpIGFuIGVycm9yIG1lc3NhZ2UKK2NvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdsb2JhbCB2YXJpYWJsZSA8Y29kZT5lcnJubzwvY29kZT4uIAorVW5sZXNzIHlvdSB1c2UgPGNvZGU+TlVMTDwvY29kZT4gYXMgdGhlIHZhbHVlIG9mIHRoZSBhcmd1bWVudCA8dmFyPnByZWZpeDwvdmFyPiwgdGhlCitlcnJvciBtZXNzYWdlIHdpbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nIGF0IDx2YXI+cHJlZml4PC92YXI+LCBmb2xsb3dlZCBieSBhCitjb2xvbiBhbmQgYSBzcGFjZSAoPGNvZGU+OiA8L2NvZGU+KS4gVGhlIHJlbWFpbmRlciBvZiB0aGUgZXJyb3IgbWVzc2FnZSBpcyBvbmUKK29mIHRoZSBzdHJpbmdzIGRlc2NyaWJlZCBmb3IgPGNvZGU+c3RyZXJyb3I8L2NvZGU+LgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl9wZXJyb3JfcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbi4gIFRoZQorZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+cGVycm9yPC9jb2RlPiByZXR1cm5zIG5vIHJlc3VsdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5wZXJyb3I8L2NvZGU+LCBidXQgdGhlIHN0cmluZ3MgaXNzdWVkIHZhcnkgZnJvbSBvbmUKK2ltcGxlbWVudGF0aW9uIHRvIGFub3RoZXIuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9wc2lnbmFsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9wc2lnbmFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkNDAyYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3BzaWduYWwuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5wc2lnbmFsIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTaWduYWxzLmh0bWwjU2lnbmFscyIgdGl0bGU9IlNpZ25hbHMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJyYWlzZS5odG1sI3JhaXNlIiB0aXRsZT0icmFpc2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InBzaWduYWwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0icmFpc2UuaHRtbCNyYWlzZSI+cmFpc2U8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTaWduYWxzLmh0bWwjU2lnbmFscyI+U2lnbmFsczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMSA8Y29kZT5wc2lnbmFsPC9jb2RlPiZtZGFzaDtwcmludCBhIHNpZ25hbCBtZXNzYWdlIG9uIHN0YW5kYXJkIGVycm9yPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcHNpZ25hbC00MjMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICB2b2lkIHBzaWduYWwoaW50IDx2YXI+c2lnbmFsPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPnByZWZpeDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPnBzaWduYWw8L2NvZGU+IHRvIHByaW50IChvbiBzdGFuZGFyZCBlcnJvcikgYSBzaWduYWwgbWVzc2FnZQorY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlIHNpZ25hbCBudW1iZXIgPHZhcj5zaWduYWw8L3Zhcj4uIAorVW5sZXNzIHlvdSB1c2UgPGNvZGU+TlVMTDwvY29kZT4gYXMgdGhlIHZhbHVlIG9mIHRoZSBhcmd1bWVudCA8dmFyPnByZWZpeDwvdmFyPiwgdGhlCitzaWduYWwgbWVzc2FnZSB3aWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyBhdCA8dmFyPnByZWZpeDwvdmFyPiwgZm9sbG93ZWQgYnkgYQorY29sb24gYW5kIGEgc3BhY2UgKDxjb2RlPjogPC9jb2RlPikuIFRoZSByZW1haW5kZXIgb2YgdGhlIHNpZ25hbCBtZXNzYWdlIGlzIG9uZQorb2YgdGhlIHN0cmluZ3MgZGVzY3JpYmVkIGZvciA8Y29kZT5zdHJzaWduYWw8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5wc2lnbmFsPC9jb2RlPiByZXR1cm5zIG5vIHJlc3VsdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1BPU0lYLjEtMjAwOCByZXF1aXJlcyA8Y29kZT5wc2lnbmFsPC9jb2RlPiwgYnV0IHRoZSBzdHJpbmdzIGlzc3VlZCB2YXJ5IGZyb20gb25lCitpbXBsZW1lbnRhdGlvbiB0byBhbm90aGVyLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0Yy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOTgyMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9wdXRjLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cHV0YyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icGVycm9yLmh0bWwjcGVycm9yIiB0aXRsZT0icGVycm9yIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0icHV0Y18wMDVmdW5sb2NrZWQuaHRtbCNwdXRjXzAwNWZ1bmxvY2tlZCIgdGl0bGU9InB1dGNfdW5sb2NrZWQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InB1dGMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0icHV0Y18wMDVmdW5sb2NrZWQuaHRtbCNwdXRjXzAwNWZ1bmxvY2tlZCI+cHV0Y191bmxvY2tlZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InBlcnJvci5odG1sI3BlcnJvciI+cGVycm9yPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjQ0IDxjb2RlPnB1dGM8L2NvZGU+Jm1kYXNoO3dyaXRlIGEgY2hhcmFjdGVyIChtYWNybyk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1wdXRjLTI0NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmcHV0Y18wMDVmci0yNDciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgcHV0YyhpbnQgPHZhcj5jaDwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IF9wdXRjX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGludCA8dmFyPmNoPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5wdXRjPC9jb2RlPiBpcyBhIG1hY3JvLCBkZWZpbmVkIGluIDxjb2RlPnN0ZGlvLmg8L2NvZGU+LiAgPGNvZGU+cHV0YzwvY29kZT4KK3dyaXRlcyB0aGUgYXJndW1lbnQgPHZhcj5jaDwvdmFyPiB0byB0aGUgZmlsZSBvciBzdHJlYW0gaWRlbnRpZmllZCBieQorPHZhcj5mcDwvdmFyPiwgYWZ0ZXIgY29udmVydGluZyBpdCBmcm9tIGFuIDxjb2RlPmludDwvY29kZT4gdG8gYW4gPGNvZGU+dW5zaWduZWQgY2hhcjwvY29kZT4uCisKKyAgIDxwPklmIHRoZSBmaWxlIHdhcyBvcGVuZWQgd2l0aCBhcHBlbmQgbW9kZSAob3IgaWYgdGhlIHN0cmVhbSBjYW5ub3QKK3N1cHBvcnQgcG9zaXRpb25pbmcpLCB0aGVuIHRoZSBuZXcgY2hhcmFjdGVyIGdvZXMgYXQgdGhlIGVuZCBvZiB0aGUKK2ZpbGUgb3Igc3RyZWFtLiAgT3RoZXJ3aXNlLCB0aGUgbmV3IGNoYXJhY3RlciBpcyB3cml0dGVuIGF0IHRoZQorY3VycmVudCB2YWx1ZSBvZiB0aGUgcG9zaXRpb24gaW5kaWNhdG9yLCBhbmQgdGhlIHBvc2l0aW9uIGluZGljYXRvcgorYWR2YW5jZXMgYnkgb25lLgorCisgICA8cD5Gb3IgYSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhpcyBtYWNybywgc2VlIDxjb2RlPmZwdXRjPC9jb2RlPi4KKworICAgPHA+VGhlIDxjb2RlPl9wdXRjX3I8L2NvZGU+IGZ1bmN0aW9uIGlzIHNpbXBseSB0aGUgcmVlbnRyYW50IHZlcnNpb24gb2YKKzxjb2RlPnB1dGM8L2NvZGU+IHRoYXQgdGFrZXMgYW4gYWRkaXRpb25hbCByZWVudHJhbnQgc3RydWN0dXJlIGFyZ3VtZW50OiA8dmFyPnB0cjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorSWYgc3VjY2Vzc2Z1bCwgPGNvZGU+cHV0YzwvY29kZT4gcmV0dXJucyBpdHMgYXJndW1lbnQgPHZhcj5jaDwvdmFyPi4gIElmIGFuIGVycm9yCitpbnRlcnZlbmVzLCB0aGUgcmVzdWx0IGlzIDxjb2RlPkVPRjwvY29kZT4uICBZb3UgY2FuIHVzZSBgPGNvZGU+ZmVycm9yKDwvY29kZT48dmFyPmZwPC92YXI+PGNvZGU+KTwvY29kZT4nIHRvCitxdWVyeSBmb3IgZXJyb3JzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPnB1dGM8L2NvZGU+OyBpdCBzdWdnZXN0cywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIHRoYXQKKzxjb2RlPnB1dGM8L2NvZGU+IGJlIGltcGxlbWVudGVkIGFzIGEgbWFjcm8uICBUaGUgc3RhbmRhcmQgZXhwbGljaXRseSBwZXJtaXRzCittYWNybyBpbXBsZW1lbnRhdGlvbnMgb2YgPGNvZGU+cHV0YzwvY29kZT4gdG8gdXNlIHRoZSA8dmFyPmZwPC92YXI+IGFyZ3VtZW50IG1vcmUgdGhhbiBvbmNlOwordGhlcmVmb3JlLCBpbiBhIHBvcnRhYmxlIHByb2dyYW0sIHlvdSBzaG91bGQgbm90IHVzZSBhbiBleHByZXNzaW9uCit3aXRoIHNpZGUgZWZmZWN0cyBhcyB0aGlzIGFyZ3VtZW50LgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0Y18wMDVmdW5sb2NrZWQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3B1dGNfMDA1ZnVubG9ja2VkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2YTQxNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3B1dGNfMDA1ZnVubG9ja2VkLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cHV0Y191bmxvY2tlZCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icHV0Yy5odG1sI3B1dGMiIHRpdGxlPSJwdXRjIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0icHV0Y2hhci5odG1sI3B1dGNoYXIiIHRpdGxlPSJwdXRjaGFyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJwdXRjX3VubG9ja2VkIj48L2E+Cis8YSBuYW1lPSJwdXRjXzAwNWZ1bmxvY2tlZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJwdXRjaGFyLmh0bWwjcHV0Y2hhciI+cHV0Y2hhcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InB1dGMuaHRtbCNwdXRjIj5wdXRjPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjQ1IDxjb2RlPnB1dGNfdW5sb2NrZWQ8L2NvZGU+Jm1kYXNoO25vbi10aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIHB1dGMgKG1hY3JvKTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXB1dGNfMDA1ZnVubG9ja2VkLTI0OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmcHV0Y18wMDVmdW5sb2NrZWRfMDA1ZnItMjQ5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IHB1dGNfdW5sb2NrZWQoaW50IDx2YXI+Y2g8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4pOworICAgICAKKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBfcHV0Y191bmxvY2tlZF9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBpbnQgPHZhcj5jaDwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+cHV0Y191bmxvY2tlZDwvY29kZT4gaXMgYSBub24tdGhyZWFkLXNhZmUgdmVyc2lvbiBvZiA8Y29kZT5wdXRjPC9jb2RlPiBkZWNsYXJlZCBpbgorPGNvZGU+c3RkaW8uaDwvY29kZT4uICA8Y29kZT5wdXRjX3VubG9ja2VkPC9jb2RlPiBtYXkgb25seSBzYWZlbHkgYmUgdXNlZCB3aXRoaW4gYSBzY29wZQorcHJvdGVjdGVkIGJ5IGZsb2NrZmlsZSgpIChvciBmdHJ5bG9ja2ZpbGUoKSkgYW5kIGZ1bmxvY2tmaWxlKCkuICBUaGVzZQorZnVuY3Rpb25zIG1heSBzYWZlbHkgYmUgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVkIHByb2dyYW0gaWYgYW5kIG9ubHkKK2lmIHRoZXkgYXJlIGNhbGxlZCB3aGlsZSB0aGUgaW52b2tpbmcgdGhyZWFkIG93bnMgdGhlICggRklMRSAqKQorb2JqZWN0LCBhcyBpcyB0aGUgY2FzZSBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byB0aGUgZmxvY2tmaWxlKCkgb3IKK2Z0cnlsb2NrZmlsZSgpIGZ1bmN0aW9ucy4gIElmIHRocmVhZHMgYXJlIGRpc2FibGVkLCB0aGVuCis8Y29kZT5wdXRjX3VubG9ja2VkPC9jb2RlPiBpcyBlcXVpdmFsZW50IHRvIDxjb2RlPnB1dGM8L2NvZGU+LgorCisgICA8cD5UaGUgZnVuY3Rpb24gPGNvZGU+X3B1dGNfdW5sb2NrZWRfcjwvY29kZT4gaXMgc2ltcGx5IHRoZSByZWVudHJhbnQgdmVyc2lvbiBvZgorPGNvZGU+cHV0Y191bmxvY2tlZDwvY29kZT4gdGhhdCB0YWtlcyBhbiBhZGRpdGlvbmFsIHJlZW50cmFudCBzdHJ1Y3R1cmUgcG9pbnRlcgorYXJndW1lbnQ6IDx2YXI+cHRyPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitTZWUgPGNvZGU+cHV0YzwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitQT1NJWCAxMDAzLjEgcmVxdWlyZXMgPGNvZGU+cHV0Y191bmxvY2tlZDwvY29kZT4uICA8Y29kZT5wdXRjX3VubG9ja2VkPC9jb2RlPiBtYXkgYmUKK2ltcGxlbWVudGVkIGFzIGEgbWFjcm8sIHNvIGFyZ3VtZW50cyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0Y2hhci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0Y2hhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjUwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9wdXRjaGFyLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cHV0Y2hhciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icHV0Y18wMDVmdW5sb2NrZWQuaHRtbCNwdXRjXzAwNWZ1bmxvY2tlZCIgdGl0bGU9InB1dGNfdW5sb2NrZWQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJwdXRjaGFyXzAwNWZ1bmxvY2tlZC5odG1sI3B1dGNoYXJfMDA1ZnVubG9ja2VkIiB0aXRsZT0icHV0Y2hhcl91bmxvY2tlZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0icHV0Y2hhciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJwdXRjaGFyXzAwNWZ1bmxvY2tlZC5odG1sI3B1dGNoYXJfMDA1ZnVubG9ja2VkIj5wdXRjaGFyX3VubG9ja2VkPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0icHV0Y18wMDVmdW5sb2NrZWQuaHRtbCNwdXRjXzAwNWZ1bmxvY2tlZCI+cHV0Y191bmxvY2tlZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC40NiA8Y29kZT5wdXRjaGFyPC9jb2RlPiZtZGFzaDt3cml0ZSBhIGNoYXJhY3RlciAobWFjcm8pPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcHV0Y2hhci0yNTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnB1dGNoYXJfMDA1ZnItMjUxIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IHB1dGNoYXIoaW50IDx2YXI+Y2g8L3Zhcj4pOworICAgICAKKyAgICAgaW50IF9wdXRjaGFyX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgaW50IDx2YXI+Y2g8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnB1dGNoYXI8L2NvZGU+IGlzIGEgbWFjcm8sIGRlZmluZWQgaW4gPGNvZGU+c3RkaW8uaDwvY29kZT4uICA8Y29kZT5wdXRjaGFyPC9jb2RlPgord3JpdGVzIGl0cyBhcmd1bWVudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSwKK2FmdGVyIGNvbnZlcnRpbmcgaXQgZnJvbSBhbiA8Y29kZT5pbnQ8L2NvZGU+IHRvIGFuIDxjb2RlPnVuc2lnbmVkIGNoYXI8L2NvZGU+LgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl9wdXRjaGFyX3I8L2NvZGU+IGlzIGEgcmVlbnRyYW50IHZlcnNpb24uICBUaGUKK2V4dHJhIGFyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK0lmIHN1Y2Nlc3NmdWwsIDxjb2RlPnB1dGNoYXI8L2NvZGU+IHJldHVybnMgaXRzIGFyZ3VtZW50IDx2YXI+Y2g8L3Zhcj4uICBJZiBhbiBlcnJvcgoraW50ZXJ2ZW5lcywgdGhlIHJlc3VsdCBpcyA8Y29kZT5FT0Y8L2NvZGU+LiAgWW91IGNhbiB1c2UgYDxjb2RlPmZlcnJvcihzdGRpbik8L2NvZGU+JyB0bworcXVlcnkgZm9yIGVycm9ycy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5wdXRjaGFyPC9jb2RlPjsgaXQgc3VnZ2VzdHMsIGJ1dCBkb2VzIG5vdCByZXF1aXJlLCB0aGF0Cis8Y29kZT5wdXRjaGFyPC9jb2RlPiBiZSBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3B1dGNoYXJfMDA1ZnVubG9ja2VkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwNGZlZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3B1dGNoYXJfMDA1ZnVubG9ja2VkLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cHV0Y2hhcl91bmxvY2tlZCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icHV0Y2hhci5odG1sI3B1dGNoYXIiIHRpdGxlPSJwdXRjaGFyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0icHV0cy5odG1sI3B1dHMiIHRpdGxlPSJwdXRzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJwdXRjaGFyX3VubG9ja2VkIj48L2E+Cis8YSBuYW1lPSJwdXRjaGFyXzAwNWZ1bmxvY2tlZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJwdXRzLmh0bWwjcHV0cyI+cHV0czwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InB1dGNoYXIuaHRtbCNwdXRjaGFyIj5wdXRjaGFyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjQ3IDxjb2RlPnB1dGNoYXJfdW5sb2NrZWQ8L2NvZGU+Jm1kYXNoO25vbi10aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIHB1dGNoYXIgKG1hY3JvKTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXB1dGNoYXJfMDA1ZnVubG9ja2VkLTI1MiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBwdXRjaGFyX3VubG9ja2VkKGludCA8dmFyPmNoPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5wdXRjaGFyX3VubG9ja2VkPC9jb2RlPiBpcyBhIG5vbi10aHJlYWQtc2FmZSB2ZXJzaW9uIG9mIDxjb2RlPnB1dGNoYXI8L2NvZGU+CitkZWNsYXJlZCBpbiA8Y29kZT5zdGRpby5oPC9jb2RlPi4gIDxjb2RlPnB1dGNoYXJfdW5sb2NrZWQ8L2NvZGU+IG1heSBvbmx5IHNhZmVseSBiZSB1c2VkCit3aXRoaW4gYSBzY29wZSBwcm90ZWN0ZWQgYnkgZmxvY2tmaWxlKCkgKG9yIGZ0cnlsb2NrZmlsZSgpKSBhbmQKK2Z1bmxvY2tmaWxlKCkuICBUaGVzZSBmdW5jdGlvbnMgbWF5IHNhZmVseSBiZSB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQKK3Byb2dyYW0gaWYgYW5kIG9ubHkgaWYgdGhleSBhcmUgY2FsbGVkIHdoaWxlIHRoZSBpbnZva2luZyB0aHJlYWQgb3ducwordGhlICggRklMRSAqKSBvYmplY3QsIGFzIGlzIHRoZSBjYXNlIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIHRoZQorZmxvY2tmaWxlKCkgb3IgZnRyeWxvY2tmaWxlKCkgZnVuY3Rpb25zLiAgSWYgdGhyZWFkcyBhcmUgZGlzYWJsZWQsCit0aGVuIDxjb2RlPnB1dGNoYXJfdW5sb2NrZWQ8L2NvZGU+IGlzIGVxdWl2YWxlbnQgdG8gPGNvZGU+cHV0Y2hhcjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1NlZSA8Y29kZT5wdXRjaGFyPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1BPU0lYIDEwMDMuMSByZXF1aXJlcyA8Y29kZT5wdXRjaGFyX3VubG9ja2VkPC9jb2RlPi4gIDxjb2RlPnB1dGNoYXJfdW5sb2NrZWQ8L2NvZGU+IG1heQorYmUgaW1wbGVtZW50ZWQgYXMgYSBtYWNyby4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LiAKKzxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0cy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODFiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9wdXRzLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cHV0cyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icHV0Y2hhcl8wMDVmdW5sb2NrZWQuaHRtbCNwdXRjaGFyXzAwNWZ1bmxvY2tlZCIgdGl0bGU9InB1dGNoYXJfdW5sb2NrZWQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJwdXR3Lmh0bWwjcHV0dyIgdGl0bGU9InB1dHciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InB1dHMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0icHV0dy5odG1sI3B1dHciPnB1dHc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJwdXRjaGFyXzAwNWZ1bmxvY2tlZC5odG1sI3B1dGNoYXJfMDA1ZnVubG9ja2VkIj5wdXRjaGFyX3VubG9ja2VkPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjQ4IDxjb2RlPnB1dHM8L2NvZGU+Jm1kYXNoO3dyaXRlIGEgY2hhcmFjdGVyIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXB1dHMtMjUzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZwdXRzXzAwNWZyLTI1NCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCBwdXRzKGNvbnN0IGNoYXIgKjx2YXI+czwvdmFyPik7CisgICAgIAorICAgICBpbnQgX3B1dHNfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjb25zdCBjaGFyICo8dmFyPnM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnB1dHM8L2NvZGU+IHdyaXRlcyB0aGUgc3RyaW5nIGF0IDx2YXI+czwvdmFyPiAoZm9sbG93ZWQgYnkgYSBuZXdsaW5lLCBpbnN0ZWFkIG9mCit0aGUgdHJhaWxpbmcgbnVsbCkgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X3B1dHNfcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbi4gIFRoZSBleHRyYQorYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorSWYgc3VjY2Vzc2Z1bCwgdGhlIHJlc3VsdCBpcyBhIG5vbm5lZ2F0aXZlIGludGVnZXI7IG90aGVyd2lzZSwgdGhlCityZXN1bHQgaXMgPGNvZGU+RU9GPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5wdXRzPC9jb2RlPiwgYnV0IGRvZXMgbm90IHNwZWNpZnkgdGhhdCB0aGUgcmVzdWx0IG9uCitzdWNjZXNzIG11c3QgYmUgPGNvZGU+MDwvY29kZT47IGFueSBub24tbmVnYXRpdmUgdmFsdWUgaXMgcGVybWl0dGVkLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0dy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0dy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOTI4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9wdXR3Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cHV0dyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icHV0cy5odG1sI3B1dHMiIHRpdGxlPSJwdXRzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0icHV0d2NoYXIuaHRtbCNwdXR3Y2hhciIgdGl0bGU9InB1dHdjaGFyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJwdXR3Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InB1dHdjaGFyLmh0bWwjcHV0d2NoYXIiPnB1dHdjaGFyPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0icHV0cy5odG1sI3B1dHMiPnB1dHM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNDkgPGNvZGU+cHV0dzwvY29kZT4mbWRhc2g7d3JpdGUgYSB3b3JkIChpbnQpPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcHV0dy0yNTUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgcHV0dyhpbnQgPHZhcj53PC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5wdXR3PC9jb2RlPiBpcyBhIGZ1bmN0aW9uLCBkZWZpbmVkIGluIDxjb2RlPnN0ZGlvLmg8L2NvZGU+LiAgWW91IGNhbiB1c2UgPGNvZGU+cHV0dzwvY29kZT4KK3RvIHdyaXRlIGEgd29yZCB0byB0aGUgZmlsZSBvciBzdHJlYW0gaWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+LiAgQXMgYSBzaWRlCitlZmZlY3QsIDxjb2RlPnB1dHc8L2NvZGU+IGFkdmFuY2VzIHRoZSBmaWxlJ3MgY3VycmVudCBwb3NpdGlvbiBpbmRpY2F0b3IuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1plcm8gb24gc3VjY2VzcywgPGNvZGU+RU9GPC9jb2RlPiBvbiBmYWlsdXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+cHV0dzwvY29kZT4gaXMgYSByZW1uYW50IG9mIEsmYW1wO1IgQzsgaXQgaXMgbm90IHBhcnQgb2YgYW55IElTTyBDIFN0YW5kYXJkLiAKKzxjb2RlPmZ3cml0ZTwvY29kZT4gc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4gIEluIGZhY3QsIHRoaXMgaW1wbGVtZW50YXRpb24gb2YKKzxjb2RlPnB1dHc8L2NvZGU+IGlzIGJhc2VkIHVwb24gPGNvZGU+ZndyaXRlPC9jb2RlPi4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+ZndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9wdXR3Y2hhci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0d2NoYXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzBmMmMzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcHV0d2NoYXIuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5wdXR3Y2hhciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icHV0dy5odG1sI3B1dHciIHRpdGxlPSJwdXR3Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0icmVtb3ZlLmh0bWwjcmVtb3ZlIiB0aXRsZT0icmVtb3ZlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJwdXR3Y2hhciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyZW1vdmUuaHRtbCNyZW1vdmUiPnJlbW92ZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InB1dHcuaHRtbCNwdXR3Ij5wdXR3PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjUwIDxjb2RlPnB1dHdjaGFyPC9jb2RlPiZtZGFzaDt3cml0ZSBhIHdpZGUgY2hhcmFjdGVyIHRvIHN0YW5kYXJkIG91dHB1dDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXB1dHdjaGFyLTI1NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmcHV0d2NoYXJfMDA1ZnItMjU3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2ludF90IHB1dHdjaGFyKHdjaGFyX3QgPHZhcj53YzwvdmFyPik7CisgICAgIAorICAgICB3aW50X3QgX3B1dHdjaGFyX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgd2NoYXJfdCA8dmFyPndjPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+cHV0d2NoYXI8L2NvZGU+IGZ1bmN0aW9uIG9yIG1hY3JvIGlzIHRoZSB3aWRlLWNoYXJhY3RlciBlcXVpdmFsZW50IG9mCit0aGUgPGNvZGU+cHV0Y2hhcjwvY29kZT4gZnVuY3Rpb24uIEl0IHdyaXRlcyB0aGUgd2lkZSBjaGFyYWN0ZXIgd2MgdG8gc3Rkb3V0LgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl9wdXR3Y2hhcl9yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAgVGhlCitleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitJZiBzdWNjZXNzZnVsLCA8Y29kZT5wdXR3Y2hhcjwvY29kZT4gcmV0dXJucyBpdHMgYXJndW1lbnQgPHZhcj53YzwvdmFyPi4gIElmIGFuIGVycm9yCitpbnRlcnZlbmVzLCB0aGUgcmVzdWx0IGlzIDxjb2RlPkVPRjwvY29kZT4uICBZb3UgY2FuIHVzZSBgPGNvZGU+ZmVycm9yKHN0ZGluKTwvY29kZT4nIHRvCitxdWVyeSBmb3IgZXJyb3JzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQzk5CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcXNvcnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Fzb3J0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyMmFkOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Fzb3J0Lmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cXNvcnQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im9uXzAwNWZleGl0Lmh0bWwjb25fMDA1ZmV4aXQiIHRpdGxlPSJvbl9leGl0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0icmFuZC5odG1sI3JhbmQiIHRpdGxlPSJyYW5kIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJxc29ydCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyYW5kLmh0bWwjcmFuZCI+cmFuZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im9uXzAwNWZleGl0Lmh0bWwjb25fMDA1ZmV4aXQiPm9uX2V4aXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMzEgPGNvZGU+cXNvcnQ8L2NvZGU+Jm1kYXNoO3NvcnQgYW4gYXJyYXk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1xc29ydC02NSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICB2b2lkIHFzb3J0KHZvaWQgKjx2YXI+YmFzZTwvdmFyPiwgc2l6ZV90IDx2YXI+bm1lbWI8L3Zhcj4sIHNpemVfdCA8dmFyPnNpemU8L3Zhcj4sCisgICAgICAgICBpbnQgKCo8dmFyPmNvbXBhcjwvdmFyPikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopICk7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+cXNvcnQ8L2NvZGU+IHNvcnRzIGFuIGFycmF5IChiZWdpbm5pbmcgYXQgPHZhcj5iYXNlPC92YXI+KSBvZiA8dmFyPm5tZW1iPC92YXI+IG9iamVjdHMuIAorPHZhcj5zaXplPC92YXI+IGRlc2NyaWJlcyB0aGUgc2l6ZSBvZiBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5LgorCisgICA8cD5Zb3UgbXVzdCBzdXBwbHkgYSBwb2ludGVyIHRvIGEgY29tcGFyaXNvbiBmdW5jdGlvbiwgdXNpbmcgdGhlIGFyZ3VtZW50CitzaG93biBhcyA8dmFyPmNvbXBhcjwvdmFyPi4gIChUaGlzIHBlcm1pdHMgc29ydGluZyBvYmplY3RzIG9mIHVua25vd24KK3Byb3BlcnRpZXMuKSAgRGVmaW5lIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGFjY2VwdCB0d28gYXJndW1lbnRzLAorZWFjaCBhIHBvaW50ZXIgdG8gYW4gZWxlbWVudCBvZiB0aGUgYXJyYXkgc3RhcnRpbmcgYXQgPHZhcj5iYXNlPC92YXI+LiAgVGhlCityZXN1bHQgb2YgPGNvZGU+KCo8L2NvZGU+PHZhcj5jb21wYXI8L3Zhcj48Y29kZT4pPC9jb2RlPiBtdXN0IGJlIG5lZ2F0aXZlIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcworbGVzcyB0aGFuIHRoZSBzZWNvbmQsIHplcm8gaWYgdGhlIHR3byBhcmd1bWVudHMgbWF0Y2gsIGFuZCBwb3NpdGl2ZSBpZgordGhlIGZpcnN0IGFyZ3VtZW50IGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kICh3aGVyZSAmbGRxdW87bGVzcyB0aGFuJnJkcXVvOyBhbmQKKyZsZHF1bztncmVhdGVyIHRoYW4mcmRxdW87IHJlZmVyIHRvIHdoYXRldmVyIGFyYml0cmFyeSBvcmRlcmluZyBpcyBhcHByb3ByaWF0ZSkuCisKKyAgIDxwPlRoZSBhcnJheSBpcyBzb3J0ZWQgaW4gcGxhY2U7IHRoYXQgaXMsIHdoZW4gPGNvZGU+cXNvcnQ8L2NvZGU+IHJldHVybnMsIHRoZQorYXJyYXkgZWxlbWVudHMgYmVnaW5uaW5nIGF0IDx2YXI+YmFzZTwvdmFyPiBoYXZlIGJlZW4gcmVvcmRlcmVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5xc29ydDwvY29kZT4gZG9lcyBub3QgcmV0dXJuIGEgcmVzdWx0LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+cXNvcnQ8L2NvZGU+IGlzIHJlcXVpcmVkIGJ5IEFOU0kgKHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgc29ydGluZyBhbGdvcml0aG0pLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3JhaXNlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yYWlzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMDQyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yYWlzZS5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnJhaXNlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTaWduYWxzLmh0bWwjU2lnbmFscyIgdGl0bGU9IlNpZ25hbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJwc2lnbmFsLmh0bWwjcHNpZ25hbCIgdGl0bGU9InBzaWduYWwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzaWduYWwuaHRtbCNzaWduYWwiIHRpdGxlPSJzaWduYWwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InJhaXNlIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InNpZ25hbC5odG1sI3NpZ25hbCI+c2lnbmFsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0icHNpZ25hbC5odG1sI3BzaWduYWwiPnBzaWduYWw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTaWduYWxzLmh0bWwjU2lnbmFscyI+U2lnbmFsczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjcuMiA8Y29kZT5yYWlzZTwvY29kZT4mbWRhc2g7c2VuZCBhIHNpZ25hbDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXJhaXNlLTQyNCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmcmFpc2VfMDA1ZnItNDI1Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CisgICAgIGludCByYWlzZShpbnQgPHZhcj5zaWc8L3Zhcj4pOworICAgICAKKyAgICAgaW50IF9yYWlzZV9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGludCA8dmFyPnNpZzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorU2VuZCB0aGUgc2lnbmFsIDx2YXI+c2lnPC92YXI+IChvbmUgb2YgdGhlIG1hY3JvcyBmcm9tIGA8Y29kZT5zeXMvc2lnbmFsLmg8L2NvZGU+JykuIAorVGhpcyBpbnRlcnJ1cHRzIHlvdXIgcHJvZ3JhbSdzIG5vcm1hbCBmbG93IG9mIGV4ZWN1dGlvbiwgYW5kIGFsbG93cyBhIHNpZ25hbAoraGFuZGxlciAoaWYgeW91J3ZlIGRlZmluZWQgb25lLCB1c2luZyA8Y29kZT5zaWduYWw8L2NvZGU+KSB0byB0YWtlIGNvbnRyb2wuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X3JhaXNlX3I8L2NvZGU+IGlzIGEgcmVlbnRyYW50IHZlcnNpb24uICBUaGUgZXh0cmEKK2FyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXN1bHQgaXMgPGNvZGU+MDwvY29kZT4gaWYgPHZhcj5zaWc8L3Zhcj4gd2FzIHN1Y2Nlc3NmdWxseSByYWlzZWQsIDxjb2RlPjE8L2NvZGU+CitvdGhlcndpc2UuICBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIChzaW5jZSBpdCBkZXBlbmRzIG9uIHRoZSBub3JtYWwKK2Zsb3cgb2YgZXhlY3V0aW9uKSBtYXkgbm90IGJlIHZpc2libGUsIHVubGVzcyB0aGUgc2lnbmFsIGhhbmRsZXIgZm9yCis8dmFyPnNpZzwvdmFyPiB0ZXJtaW5hdGVzIHdpdGggYSA8Y29kZT5yZXR1cm48L2NvZGU+IG9yIHVubGVzcyA8Y29kZT5TSUdfSUdOPC9jb2RlPiBpcyBpbgorZWZmZWN0IGZvciB0aGlzIHNpZ25hbC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5yYWlzZTwvY29kZT4sIGJ1dCBhbGxvd3MgdGhlIGZ1bGwgc2V0IG9mIHNpZ25hbCBudW1iZXJzCit0byB2YXJ5IGZyb20gb25lIGltcGxlbWVudGF0aW9uIHRvIGFub3RoZXIuCisKKyAgIDxwPlJlcXVpcmVkIE9TIHN1YnJvdXRpbmVzOiA8Y29kZT5nZXRwaWQ8L2NvZGU+LCA8Y29kZT5raWxsPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yYW5kLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yYW5kLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExNzgzOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3JhbmQuaHRtbApAQCAtMCwwICsxLDgxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5yYW5kIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJxc29ydC5odG1sI3Fzb3J0IiB0aXRsZT0icXNvcnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJyYW5kNDguaHRtbCNyYW5kNDgiIHRpdGxlPSJyYW5kNDgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InJhbmQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0icmFuZDQ4Lmh0bWwjcmFuZDQ4Ij5yYW5kNDg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJxc29ydC5odG1sI3Fzb3J0Ij5xc29ydDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4zMiA8Y29kZT5yYW5kPC9jb2RlPiwgPGNvZGU+c3JhbmQ8L2NvZGU+Jm1kYXNoO3BzZXVkby1yYW5kb20gbnVtYmVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXJhbmQtNjYiPjwvYT48YSBuYW1lPSJpbmRleC1zcmFuZC02NyI+PC9hPjxhIG5hbWU9ImluZGV4LXJhbmRfMDA1ZnItNjgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgaW50IHJhbmQodm9pZCk7CisgICAgIHZvaWQgc3JhbmQodW5zaWduZWQgaW50IDx2YXI+c2VlZDwvdmFyPik7CisgICAgIGludCByYW5kX3IodW5zaWduZWQgaW50ICo8dmFyPnNlZWQ8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnJhbmQ8L2NvZGU+IHJldHVybnMgYSBkaWZmZXJlbnQgaW50ZWdlciBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkOyBlYWNoCitpbnRlZ2VyIGlzIGNob3NlbiBieSBhbiBhbGdvcml0aG0gZGVzaWduZWQgdG8gYmUgdW5wcmVkaWN0YWJsZSwgc28KK3RoYXQgeW91IGNhbiB1c2UgPGNvZGU+cmFuZDwvY29kZT4gd2hlbiB5b3UgcmVxdWlyZSBhIHJhbmRvbSBudW1iZXIuIAorVGhlIGFsZ29yaXRobSBkZXBlbmRzIG9uIGEgc3RhdGljIHZhcmlhYmxlIGNhbGxlZCB0aGUgJmxkcXVvO3JhbmRvbSBzZWVkJnJkcXVvOzsKK3N0YXJ0aW5nIHdpdGggYSBnaXZlbiB2YWx1ZSBvZiB0aGUgcmFuZG9tIHNlZWQgYWx3YXlzIHByb2R1Y2VzIHRoZQorc2FtZSBzZXF1ZW5jZSBvZiBudW1iZXJzIGluIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gPGNvZGU+cmFuZDwvY29kZT4uCisKKyAgIDxwPllvdSBjYW4gc2V0IHRoZSByYW5kb20gc2VlZCB1c2luZyA8Y29kZT5zcmFuZDwvY29kZT47IGl0IGRvZXMgbm90aGluZyBiZXlvbmQKK3N0b3JpbmcgaXRzIGFyZ3VtZW50IGluIHRoZSBzdGF0aWMgdmFyaWFibGUgdXNlZCBieSA8Y29kZT5yYW5kPC9jb2RlPi4gIFlvdSBjYW4KK2V4cGxvaXQgdGhpcyB0byBtYWtlIHRoZSBwc2V1ZG8tcmFuZG9tIHNlcXVlbmNlIGxlc3MgcHJlZGljdGFibGUsIGlmCit5b3Ugd2lzaCwgYnkgdXNpbmcgc29tZSBvdGhlciB1bnByZWRpY3RhYmxlIHZhbHVlIChvZnRlbiB0aGUgbGVhc3QKK3NpZ25pZmljYW50IHBhcnRzIG9mIGEgdGltZS12YXJ5aW5nIHZhbHVlKSBhcyB0aGUgcmFuZG9tIHNlZWQgYmVmb3JlCitiZWdpbm5pbmcgYSBzZXF1ZW5jZSBvZiBjYWxscyB0byA8Y29kZT5yYW5kPC9jb2RlPjsgb3IsIGlmIHlvdSB3aXNoIHRvIGVuc3VyZQorKGZvciBleGFtcGxlLCB3aGlsZSBkZWJ1Z2dpbmcpIHRoYXQgc3VjY2Vzc2l2ZSBydW5zIG9mIHlvdXIgcHJvZ3JhbQordXNlIHRoZSBzYW1lICZsZHF1bztyYW5kb20mcmRxdW87IG51bWJlcnMsIHlvdSBjYW4gdXNlIDxjb2RlPnNyYW5kPC9jb2RlPiB0byBzZXQgdGhlIHNhbWUKK3JhbmRvbSBzZWVkIGF0IHRoZSBvdXRzZXQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPnJhbmQ8L2NvZGU+IHJldHVybnMgdGhlIG5leHQgcHNldWRvLXJhbmRvbSBpbnRlZ2VyIGluIHNlcXVlbmNlOyBpdCBpcyBhCitudW1iZXIgYmV0d2VlbiA8Y29kZT4wPC9jb2RlPiBhbmQgPGNvZGU+UkFORF9NQVg8L2NvZGU+IChpbmNsdXNpdmUpLgorCisgICA8cD48Y29kZT5zcmFuZDwvY29kZT4gZG9lcyBub3QgcmV0dXJuIGEgcmVzdWx0LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+cmFuZDwvY29kZT4gaXMgcmVxdWlyZWQgYnkgQU5TSSwgYnV0IHRoZSBhbGdvcml0aG0gZm9yIHBzZXVkby1yYW5kb20KK251bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzcGVjaWZpZWQ7IHRoZXJlZm9yZSwgZXZlbiBpZiB5b3UgdXNlCit0aGUgc2FtZSByYW5kb20gc2VlZCwgeW91IGNhbm5vdCBleHBlY3QgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgcmVzdWx0cworb24gdHdvIGRpZmZlcmVudCBzeXN0ZW1zLgorCisgICA8cD48Y29kZT5yYW5kPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3JhbmQ0OC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcmFuZDQ4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmMDQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3JhbmQ0OC5odG1sCkBAIC0wLDAgKzEsMTMyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5yYW5kNDggLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InJhbmQuaHRtbCNyYW5kIiB0aXRsZT0icmFuZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cnRvZC5odG1sI3N0cnRvZCIgdGl0bGU9InN0cnRvZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0icmFuZDQ4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cnRvZC5odG1sI3N0cnRvZCI+c3RydG9kPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0icmFuZC5odG1sI3JhbmQiPnJhbmQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMzMgPGNvZGU+cmFuZDQ4PC9jb2RlPiwgPGNvZGU+ZHJhbmQ0ODwvY29kZT4sIDxjb2RlPmVyYW5kNDg8L2NvZGU+LCA8Y29kZT5scmFuZDQ4PC9jb2RlPiwgPGNvZGU+bnJhbmQ0ODwvY29kZT4sIDxjb2RlPm1yYW5kNDg8L2NvZGU+LCA8Y29kZT5qcmFuZDQ4PC9jb2RlPiwgPGNvZGU+c3JhbmQ0ODwvY29kZT4sIDxjb2RlPnNlZWQ0ODwvY29kZT4sIDxjb2RlPmxjb25nNDg8L2NvZGU+Jm1kYXNoO3BzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgYW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmFuZDQ4LTY5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZHJhbmQ0OC03MCI+PC9hPjxhIG5hbWU9ImluZGV4LWVyYW5kNDgtNzEiPjwvYT48YSBuYW1lPSJpbmRleC1scmFuZDQ4LTcyIj48L2E+PGEgbmFtZT0iaW5kZXgtbnJhbmQ0OC03MyI+PC9hPjxhIG5hbWU9ImluZGV4LW1yYW5kNDgtNzQiPjwvYT48YSBuYW1lPSJpbmRleC1qcmFuZDQ4LTc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3JhbmQ0OC03NiI+PC9hPjxhIG5hbWU9ImluZGV4LXNlZWQ0OC03NyI+PC9hPjxhIG5hbWU9ImluZGV4LWxjb25nNDgtNzgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgZG91YmxlIGRyYW5kNDgodm9pZCk7CisgICAgIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0IDx2YXI+eHNlZWQ8L3Zhcj5bM10pOworICAgICBsb25nIGxyYW5kNDgodm9pZCk7CisgICAgIGxvbmcgbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydCA8dmFyPnhzZWVkPC92YXI+WzNdKTsKKyAgICAgbG9uZyBtcmFuZDQ4KHZvaWQpOworICAgICBsb25nIGpyYW5kNDgodW5zaWduZWQgc2hvcnQgPHZhcj54c2VlZDwvdmFyPlszXSk7CisgICAgIHZvaWQgc3JhbmQ0OChsb25nIDx2YXI+c2VlZDwvdmFyPik7CisgICAgIHVuc2lnbmVkIHNob3J0ICpzZWVkNDgodW5zaWduZWQgc2hvcnQgPHZhcj54c2VlZDwvdmFyPlszXSk7CisgICAgIHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCA8dmFyPnA8L3Zhcj5bN10pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5yYW5kNDg8L2NvZGU+IGZhbWlseSBvZiBmdW5jdGlvbnMgZ2VuZXJhdGVzIHBzZXVkby1yYW5kb20gbnVtYmVycwordXNpbmcgYSBsaW5lYXIgY29uZ3J1ZW50aWFsIGFsZ29yaXRobSB3b3JraW5nIG9uIGludGVnZXJzIDQ4IGJpdHMgaW4gc2l6ZS4gCitUaGUgcGFydGljdWxhciBmb3JtdWxhIGVtcGxveWVkIGlzCityKG4rMSkgPSAoYSAqIHIobikgKyBjKSBtb2QgbQord2hlcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGFyZQorZm9yIHRoZSBtdWx0aXBsaWNhbmQgYSA9IDB4ZmRlZWNlNjZkID0gMjUyMTQ5MDM5MTcgYW5kCit0aGUgYWRkZW5kIGMgPSAweGIgPSAxMS4gVGhlIG1vZHVsbyBpcyBhbHdheXMgZml4ZWQgYXQgbSA9IDIgKiogNDguIAorcihuKSBpcyBjYWxsZWQgdGhlIHNlZWQgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgorCisgICA8cD5Gb3IgYWxsIHRoZSBzaXggZ2VuZXJhdG9yIHJvdXRpbmVzIGRlc2NyaWJlZCBuZXh0LCB0aGUgZmlyc3QKK2NvbXB1dGF0aW9uYWwgc3RlcCBpcyB0byBwZXJmb3JtIGEgc2luZ2xlIGl0ZXJhdGlvbiBvZiB0aGUgYWxnb3JpdGhtLgorCisgICA8cD48Y29kZT5kcmFuZDQ4PC9jb2RlPiBhbmQgPGNvZGU+ZXJhbmQ0ODwvY29kZT4KK3JldHVybiB2YWx1ZXMgb2YgdHlwZSBkb3VibGUuIFRoZSBmdWxsIDQ4IGJpdHMgb2YgcihuKzEpIGFyZQorbG9hZGVkIGludG8gdGhlIG1hbnRpc3NhIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSwgd2l0aCB0aGUgZXhwb25lbnQgc2V0CitzdWNoIHRoYXQgdGhlIHZhbHVlcyBwcm9kdWNlZCBsaWUgaW4gdGhlIGludGVydmFsIFswLjAsIDEuMF0uCisKKyAgIDxwPjxjb2RlPmxyYW5kNDg8L2NvZGU+IGFuZCA8Y29kZT5ucmFuZDQ4PC9jb2RlPgorcmV0dXJuIHZhbHVlcyBvZiB0eXBlIGxvbmcgaW4gdGhlIHJhbmdlCitbMCwgMioqMzEtMV0uIFRoZSBoaWdoLW9yZGVyICgzMSkgYml0cyBvZgorcihuKzEpIGFyZSBsb2FkZWQgaW50byB0aGUgbG93ZXIgYml0cyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUsIHdpdGgKK3RoZSB0b3Btb3N0IChzaWduKSBiaXQgc2V0IHRvIHplcm8uCisKKyAgIDxwPjxjb2RlPm1yYW5kNDg8L2NvZGU+IGFuZCA8Y29kZT5qcmFuZDQ4PC9jb2RlPgorcmV0dXJuIHZhbHVlcyBvZiB0eXBlIGxvbmcgaW4gdGhlIHJhbmdlCitbLTIqKjMxLCAyKiozMS0xXS4gVGhlIGhpZ2gtb3JkZXIgKDMyKSBiaXRzIG9mCityKG4rMSkgYXJlIGxvYWRlZCBpbnRvIHRoZSByZXR1cm5lZCB2YWx1ZS4KKworICAgPHA+PGNvZGU+ZHJhbmQ0ODwvY29kZT4sIDxjb2RlPmxyYW5kNDg8L2NvZGU+LCBhbmQgPGNvZGU+bXJhbmQ0ODwvY29kZT4KK3VzZSBhbiBpbnRlcm5hbCBidWZmZXIgdG8gc3RvcmUgcihuKS4gRm9yIHRoZXNlIGZ1bmN0aW9ucwordGhlIGluaXRpYWwgdmFsdWUgb2YgcigwKSA9IDB4MTIzNGFiY2QzMzBlID0gMjAwMTc0Mjk5NTEyNDYuCisKKyAgIDxwPk9uIHRoZSBvdGhlciBoYW5kLCA8Y29kZT5lcmFuZDQ4PC9jb2RlPiwgPGNvZGU+bnJhbmQ0ODwvY29kZT4sIGFuZCA8Y29kZT5qcmFuZDQ4PC9jb2RlPgordXNlIGEgdXNlci1zdXBwbGllZCBidWZmZXIgdG8gc3RvcmUgdGhlIHNlZWQgcihuKSwKK3doaWNoIGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mIDMgc2hvcnRzLCB3aGVyZSB0aGUgemVyb3RoIG1lbWJlcgoraG9sZHMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuCisKKyAgIDxwPkFsbCBmdW5jdGlvbnMgc2hhcmUgdGhlIHNhbWUgbXVsdGlwbGljYW5kIGFuZCBhZGRlbmQuCisKKyAgIDxwPjxjb2RlPnNyYW5kNDg8L2NvZGU+IGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgYnVmZmVyIHIobikgb2YKKzxjb2RlPmRyYW5kNDg8L2NvZGU+LCA8Y29kZT5scmFuZDQ4PC9jb2RlPiwgYW5kIDxjb2RlPm1yYW5kNDg8L2NvZGU+CitzdWNoIHRoYXQgdGhlIDMyIGJpdHMgb2YgdGhlIHNlZWQgdmFsdWUgYXJlIGNvcGllZCBpbnRvIHRoZSB1cHBlciAzMiBiaXRzCitvZiByKG4pLCB3aXRoIHRoZSBsb3dlciAxNiBiaXRzIG9mIHIobikgYXJiaXRyYXJpbHkgYmVpbmcgc2V0IHRvIDB4MzMwZS4gCitBZGRpdGlvbmFsbHksIHRoZSBjb25zdGFudCBtdWx0aXBsaWNhbmQgYW5kIGFkZGVuZCBvZiB0aGUgYWxnb3JpdGhtIGFyZQorcmVzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIGdpdmVuIGFib3ZlLgorCisgICA8cD48Y29kZT5zZWVkNDg8L2NvZGU+IGFsc28gaW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIGJ1ZmZlciByKG4pIG9mCis8Y29kZT5kcmFuZDQ4PC9jb2RlPiwgPGNvZGU+bHJhbmQ0ODwvY29kZT4sIGFuZCA8Y29kZT5tcmFuZDQ4PC9jb2RlPiwKK2J1dCBoZXJlIGFsbCA0OCBiaXRzIG9mIHRoZSBzZWVkIGNhbiBiZSBzcGVjaWZpZWQgaW4gYW4gYXJyYXkgb2YgMyBzaG9ydHMsCit3aGVyZSB0aGUgemVyb3RoIG1lbWJlciBzcGVjaWZpZXMgdGhlIGxvd2VzdCBiaXRzLiBBZ2FpbiwKK3RoZSBjb25zdGFudCBtdWx0aXBsaWNhbmQgYW5kIGFkZGVuZCBvZiB0aGUgYWxnb3JpdGhtIGFyZQorcmVzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIGdpdmVuIGFib3ZlLiAKKzxjb2RlPnNlZWQ0ODwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgMyBzaG9ydHMgd2hpY2ggY29udGFpbnMKK3RoZSBvbGQgc2VlZC4gCitUaGlzIGFycmF5IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkLCB0aHVzIGl0cyBjb250ZW50cyBhcmUgbG9zdCBhZnRlcgorZWFjaCBuZXcgY2FsbCB0byA8Y29kZT5zZWVkNDg8L2NvZGU+LgorCisgICA8cD5GaW5hbGx5LCA8Y29kZT5sY29uZzQ4PC9jb2RlPiBhbGxvd3MgZnVsbCBjb250cm9sIG92ZXIgdGhlIG11bHRpcGxpY2FuZCBhbmQKK2FkZGVuZCB1c2VkIGluIDxjb2RlPmRyYW5kNDg8L2NvZGU+LCA8Y29kZT5lcmFuZDQ4PC9jb2RlPiwgPGNvZGU+bHJhbmQ0ODwvY29kZT4sIDxjb2RlPm5yYW5kNDg8L2NvZGU+LAorPGNvZGU+bXJhbmQ0ODwvY29kZT4sIGFuZCA8Y29kZT5qcmFuZDQ4PC9jb2RlPiwKK2FuZCB0aGUgc2VlZCB1c2VkIGluIDxjb2RlPmRyYW5kNDg8L2NvZGU+LCA8Y29kZT5scmFuZDQ4PC9jb2RlPiwgYW5kIDxjb2RlPm1yYW5kNDg8L2NvZGU+LiAKK0FuIGFycmF5IG9mIDcgc2hvcnRzIGlzIHBhc3NlZCBhcyBwYXJhbWV0ZXI7IHRoZSBmaXJzdCB0aHJlZSBzaG9ydHMgYXJlCit1c2VkIHRvIGluaXRpYWxpemUgdGhlIHNlZWQ7IHRoZSBzZWNvbmQgdGhyZWUgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUKK211bHRpcGxpY2FuZDsgYW5kIHRoZSBsYXN0IHNob3J0IGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYWRkZW5kLiAKK0l0IGlzIHRodXMgbm90IHBvc3NpYmxlIHRvIHVzZSB2YWx1ZXMgZ3JlYXRlciB0aGFuIDB4ZmZmZiBhcyB0aGUgYWRkZW5kLgorCisgICA8cD5Ob3RlIHRoYXQgYWxsIHRocmVlIG1ldGhvZHMgb2Ygc2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKK2Fsd2F5cyBhbHNvIHNldCB0aGUgbXVsdGlwbGljYW5kIGFuZCBhZGRlbmQgZm9yIGFueSBvZiB0aGUgc2l4CitnZW5lcmF0b3IgY2FsbHMuCisKKyAgIDxwPkZvciBhIG1vcmUgcG93ZXJmdWwgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IsIHNlZSA8Y29kZT5yYW5kb208L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorU1VTIHJlcXVpcmVzIHRoZXNlIGZ1bmN0aW9ucy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcmVtb3ZlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yZW1vdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Q2MjhhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcmVtb3ZlLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cmVtb3ZlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJwdXR3Y2hhci5odG1sI3B1dHdjaGFyIiB0aXRsZT0icHV0d2NoYXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJyZW5hbWUuaHRtbCNyZW5hbWUiIHRpdGxlPSJyZW5hbWUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InJlbW92ZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyZW5hbWUuaHRtbCNyZW5hbWUiPnJlbmFtZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InB1dHdjaGFyLmh0bWwjcHV0d2NoYXIiPnB1dHdjaGFyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjUxIDxjb2RlPnJlbW92ZTwvY29kZT4mbWRhc2g7ZGVsZXRlIGEgZmlsZSdzIG5hbWU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1yZW1vdmUtMjU4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZyZW1vdmVfMDA1ZnItMjU5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IHJlbW92ZShjaGFyICo8dmFyPmZpbGVuYW1lPC92YXI+KTsKKyAgICAgCisgICAgIGludCBfcmVtb3ZlX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgY2hhciAqPHZhcj5maWxlbmFtZTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPnJlbW92ZTwvY29kZT4gdG8gZGlzc29sdmUgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gYSBwYXJ0aWN1bGFyCitmaWxlbmFtZSAodGhlIHN0cmluZyBhdCA8dmFyPmZpbGVuYW1lPC92YXI+KSBhbmQgdGhlIGZpbGUgaXQgcmVwcmVzZW50cy4gCitBZnRlciBjYWxsaW5nIDxjb2RlPnJlbW92ZTwvY29kZT4gd2l0aCBhIHBhcnRpY3VsYXIgZmlsZW5hbWUsIHlvdSB3aWxsIG5vCitsb25nZXIgYmUgYWJsZSB0byBvcGVuIHRoZSBmaWxlIGJ5IHRoYXQgbmFtZS4KKworICAgPHA+SW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgeW91IG1heSB1c2UgPGNvZGU+cmVtb3ZlPC9jb2RlPiBvbiBhbiBvcGVuIGZpbGUgd2l0aG91dAorZXJyb3I7IGV4aXN0aW5nIGZpbGUgZGVzY3JpcHRvcnMgZm9yIHRoZSBmaWxlIHdpbGwgY29udGludWUgdG8gYWNjZXNzCit0aGUgZmlsZSdzIGRhdGEgdW50aWwgdGhlIHByb2dyYW0gdXNpbmcgdGhlbSBjbG9zZXMgdGhlIGZpbGUuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X3JlbW92ZV9yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAgVGhlCitleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5yZW1vdmU8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYgaXQgc3VjY2VlZHMsIDxjb2RlPi0xPC9jb2RlPiBpZiBpdCBmYWlscy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5yZW1vdmU8L2NvZGU+LCBidXQgb25seSBzcGVjaWZpZXMgdGhhdCB0aGUgcmVzdWx0IG9uCitmYWlsdXJlIGJlIG5vbnplcm8uICBUaGUgYmVoYXZpb3Igb2YgPGNvZGU+cmVtb3ZlPC9jb2RlPiB3aGVuIHlvdSBjYWxsIGl0IG9uIGFuCitvcGVuIGZpbGUgbWF5IHZhcnkgYW1vbmcgaW1wbGVtZW50YXRpb25zLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmUgcmVxdWlyZWQ6IDxjb2RlPnVubGluazwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcmVuYW1lLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yZW5hbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2E5MjBhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcmVuYW1lLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cmVuYW1lIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJyZW1vdmUuaHRtbCNyZW1vdmUiIHRpdGxlPSJyZW1vdmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJyZXdpbmQuaHRtbCNyZXdpbmQiIHRpdGxlPSJyZXdpbmQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InJlbmFtZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyZXdpbmQuaHRtbCNyZXdpbmQiPnJld2luZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InJlbW92ZS5odG1sI3JlbW92ZSI+cmVtb3ZlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjUyIDxjb2RlPnJlbmFtZTwvY29kZT4mbWRhc2g7cmVuYW1lIGEgZmlsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXJlbmFtZS0yNjAiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICBpbnQgcmVuYW1lKGNvbnN0IGNoYXIgKjx2YXI+b2xkPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPm5ldzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPnJlbmFtZTwvY29kZT4gdG8gZXN0YWJsaXNoIGEgbmV3IG5hbWUgKHRoZSBzdHJpbmcgYXQgPHZhcj5uZXc8L3Zhcj4pIGZvciBhCitmaWxlIG5vdyBrbm93biBieSB0aGUgc3RyaW5nIGF0IDx2YXI+b2xkPC92YXI+LiAgQWZ0ZXIgYSBzdWNjZXNzZnVsCis8Y29kZT5yZW5hbWU8L2NvZGU+LCB0aGUgZmlsZSBpcyBubyBsb25nZXIgYWNjZXNzaWJsZSBieSB0aGUgc3RyaW5nIGF0IDx2YXI+b2xkPC92YXI+LgorCisgICA8cD5JZiA8Y29kZT5yZW5hbWU8L2NvZGU+IGZhaWxzLCB0aGUgZmlsZSBuYW1lZCA8Y29kZT4qPC9jb2RlPjx2YXI+b2xkPC92YXI+IGlzIHVuYWZmZWN0ZWQuICBUaGUKK2NvbmRpdGlvbnMgZm9yIGZhaWx1cmUgZGVwZW5kIG9uIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXN1bHQgaXMgZWl0aGVyIDxjb2RlPjA8L2NvZGU+ICh3aGVuIHN1Y2Nlc3NmdWwpIG9yIDxjb2RlPi0xPC9jb2RlPiAod2hlbiB0aGUgZmlsZQorY291bGQgbm90IGJlIHJlbmFtZWQpLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPnJlbmFtZTwvY29kZT4sIGJ1dCBvbmx5IHNwZWNpZmllcyB0aGF0IHRoZSByZXN1bHQgb24KK2ZhaWx1cmUgYmUgbm9uemVyby4gIFRoZSBlZmZlY3RzIG9mIHVzaW5nIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUKK2FzIDxjb2RlPio8L2NvZGU+PHZhcj5uZXc8L3Zhcj4gbWF5IHZhcnkgZnJvbSBvbmUgaW1wbGVtZW50YXRpb24gdG8gYW5vdGhlci4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+bGluazwvY29kZT4sIDxjb2RlPnVubGluazwvY29kZT4sIG9yIDxjb2RlPnJlbmFtZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcmV3aW5kLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yZXdpbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODc0OTJjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvcmV3aW5kLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cmV3aW5kIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJyZW5hbWUuaHRtbCNyZW5hbWUiIHRpdGxlPSJyZW5hbWUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzZXRidWYuaHRtbCNzZXRidWYiIHRpdGxlPSJzZXRidWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InJld2luZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzZXRidWYuaHRtbCNzZXRidWYiPnNldGJ1ZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InJlbmFtZS5odG1sI3JlbmFtZSI+cmVuYW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjUzIDxjb2RlPnJld2luZDwvY29kZT4mbWRhc2g7cmVpbml0aWFsaXplIGEgZmlsZSBvciBzdHJlYW08L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1yZXdpbmQtMjYxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZyZXdpbmRfMDA1ZnItMjYyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgdm9pZCByZXdpbmQoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIHZvaWQgX3Jld2luZF9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5yZXdpbmQ8L2NvZGU+IHJldHVybnMgdGhlIGZpbGUgcG9zaXRpb24gaW5kaWNhdG9yIChpZiBhbnkpIGZvciB0aGUgZmlsZQorb3Igc3RyZWFtIGlkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgSXQgYWxzbworY2xlYXJzIGFueSBlcnJvciBpbmRpY2F0b3IgYW5kIGZsdXNoZXMgYW55IHBlbmRpbmcgb3V0cHV0LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5yZXdpbmQ8L2NvZGU+IGRvZXMgbm90IHJldHVybiBhIHJlc3VsdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5yZXdpbmQ8L2NvZGU+LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yaW5kZXguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3JpbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MGZkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9yaW5kZXguaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5yaW5kZXggLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im1lbXNldC5odG1sI21lbXNldCIgdGl0bGU9Im1lbXNldCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cGNweS5odG1sI3N0cGNweSIgdGl0bGU9InN0cGNweSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0icmluZGV4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cGNweS5odG1sI3N0cGNweSI+c3RwY3B5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibWVtc2V0Lmh0bWwjbWVtc2V0Ij5tZW1zZXQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMTMgPGNvZGU+cmluZGV4PC9jb2RlPiZtZGFzaDtyZXZlcnNlIHNlYXJjaCBmb3IgY2hhcmFjdGVyIGluIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXJpbmRleC0zODEiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgY2hhciAqIHJpbmRleChjb25zdCBjaGFyICo8dmFyPnN0cmluZzwvdmFyPiwgaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgbGFzdCBvY2N1cmVuY2Ugb2YgPHZhcj5jPC92YXI+IChjb252ZXJ0ZWQgdG8KK2EgY2hhcikgaW4gdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+c3RyaW5nPC92YXI+IChpbmNsdWRpbmcgdGhlCit0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlcikuCisKKyAgIDxwPlRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIDxjb2RlPnN0cnJjaHI8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbG9jYXRlZCBjaGFyYWN0ZXIsIG9yIGEgbnVsbCBwb2ludGVyCitpZiA8dmFyPmM8L3Zhcj4gZG9lcyBub3Qgb2NjdXIgaW4gPHZhcj5zdHJpbmc8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5yaW5kZXg8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc2V0YnVmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zZXRidWYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmEyMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc2V0YnVmLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c2V0YnVmIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJyZXdpbmQuaHRtbCNyZXdpbmQiIHRpdGxlPSJyZXdpbmQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzZXRidWZmZXIuaHRtbCNzZXRidWZmZXIiIHRpdGxlPSJzZXRidWZmZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InNldGJ1ZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzZXRidWZmZXIuaHRtbCNzZXRidWZmZXIiPnNldGJ1ZmZlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InJld2luZC5odG1sI3Jld2luZCI+cmV3aW5kPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjU0IDxjb2RlPnNldGJ1ZjwvY29kZT4mbWRhc2g7c3BlY2lmeSBmdWxsIGJ1ZmZlcmluZyBmb3IgYSBmaWxlIG9yIHN0cmVhbTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXNldGJ1Zi0yNjMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICB2b2lkIHNldGJ1ZihGSUxFICo8dmFyPmZwPC92YXI+LCBjaGFyICo8dmFyPmJ1ZjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c2V0YnVmPC9jb2RlPiBzcGVjaWZpZXMgdGhhdCBvdXRwdXQgdG8gdGhlIGZpbGUgb3Igc3RyZWFtIGlkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPgorc2hvdWxkIGJlIGZ1bGx5IGJ1ZmZlcmVkLiAgQWxsIG91dHB1dCBmb3IgdGhpcyBmaWxlIHdpbGwgZ28gdG8gYQorYnVmZmVyIChvZiBzaXplIDxjb2RlPkJVRlNJWjwvY29kZT4sIHNwZWNpZmllZCBpbiBgPGNvZGU+c3RkaW8uaDwvY29kZT4nKS4gIE91dHB1dCB3aWxsCitiZSBwYXNzZWQgb24gdG8gdGhlIGhvc3Qgc3lzdGVtIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIGZ1bGwsIG9yIHdoZW4KK2FuIGlucHV0IG9wZXJhdGlvbiBpbnRlcnZlbmVzLgorCisgICA8cD5Zb3UgbWF5LCBpZiB5b3Ugd2lzaCwgc3VwcGx5IHlvdXIgb3duIGJ1ZmZlciBieSBwYXNzaW5nIGEgcG9pbnRlciB0bworaXQgYXMgdGhlIGFyZ3VtZW50IDx2YXI+YnVmPC92YXI+LiAgSXQgbXVzdCBoYXZlIHNpemUgPGNvZGU+QlVGU0laPC9jb2RlPi4gIFlvdSBjYW4KK2Fsc28gdXNlIDxjb2RlPk5VTEw8L2NvZGU+IGFzIHRoZSB2YWx1ZSBvZiA8dmFyPmJ1ZjwvdmFyPiwgdG8gc2lnbmFsIHRoYXQgdGhlCis8Y29kZT5zZXRidWY8L2NvZGU+IGZ1bmN0aW9uIGlzIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+V2FybmluZ3M8L3N0cm9uZz48YnI+CitZb3UgbWF5IG9ubHkgdXNlIDxjb2RlPnNldGJ1ZjwvY29kZT4gYmVmb3JlIHBlcmZvcm1pbmcgYW55IGZpbGUgb3BlcmF0aW9uIG90aGVyCit0aGFuIG9wZW5pbmcgdGhlIGZpbGUuCisKKyAgIDxwPklmIHlvdSBzdXBwbHkgYSBub24tbnVsbCA8dmFyPmJ1ZjwvdmFyPiwgeW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIGFzc29jaWF0ZWQKK3N0b3JhZ2UgY29udGludWVzIHRvIGJlIGF2YWlsYWJsZSB1bnRpbCB5b3UgY2xvc2UgdGhlIHN0cmVhbQoraWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zZXRidWY8L2NvZGU+IGRvZXMgbm90IHJldHVybiBhIHJlc3VsdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0JvdGggQU5TSSBDIGFuZCB0aGUgU3lzdGVtIFYgSW50ZXJmYWNlIERlZmluaXRpb24gKElzc3VlIDIpIHJlcXVpcmUKKzxjb2RlPnNldGJ1ZjwvY29kZT4uICBIb3dldmVyLCB0aGV5IGRpZmZlciBvbiB0aGUgbWVhbmluZyBvZiBhIDxjb2RlPk5VTEw8L2NvZGU+IGJ1ZmZlcgorcG9pbnRlcjogdGhlIFNWSUQgaXNzdWUgMiBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBhIDxjb2RlPk5VTEw8L2NvZGU+IGJ1ZmZlcgorcG9pbnRlciByZXF1ZXN0cyB1bmJ1ZmZlcmVkIG91dHB1dC4gIEZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBhdm9pZAorPGNvZGU+TlVMTDwvY29kZT4gYnVmZmVyIHBvaW50ZXJzLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc2V0YnVmZmVyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zZXRidWZmZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTMyMTMxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc2V0YnVmZmVyLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c2V0YnVmZmVyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzZXRidWYuaHRtbCNzZXRidWYiIHRpdGxlPSJzZXRidWYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzZXRsaW5lYnVmLmh0bWwjc2V0bGluZWJ1ZiIgdGl0bGU9InNldGxpbmVidWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InNldGJ1ZmZlciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzZXRsaW5lYnVmLmh0bWwjc2V0bGluZWJ1ZiI+c2V0bGluZWJ1ZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InNldGJ1Zi5odG1sI3NldGJ1ZiI+c2V0YnVmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjU1IDxjb2RlPnNldGJ1ZmZlcjwvY29kZT4mbWRhc2g7c3BlY2lmeSBmdWxsIGJ1ZmZlcmluZyBmb3IgYSBmaWxlIG9yIHN0cmVhbSB3aXRoIHNpemU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zZXRidWZmZXItMjY0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgdm9pZCBzZXRidWZmZXIoRklMRSAqPHZhcj5mcDwvdmFyPiwgY2hhciAqPHZhcj5idWY8L3Zhcj4sIGludCA8dmFyPnNpemU8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnNldGJ1ZmZlcjwvY29kZT4gc3BlY2lmaWVzIHRoYXQgb3V0cHV0IHRvIHRoZSBmaWxlIG9yIHN0cmVhbSBpZGVudGlmaWVkIGJ5Cis8dmFyPmZwPC92YXI+IHNob3VsZCBiZSBmdWxseSBidWZmZXJlZC4gIEFsbCBvdXRwdXQgZm9yIHRoaXMgZmlsZSB3aWxsIGdvIHRvIGEKK2J1ZmZlciAob2Ygc2l6ZSA8dmFyPnNpemU8L3Zhcj4pLiAgT3V0cHV0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBob3N0IHN5c3RlbQorb25seSB3aGVuIHRoZSBidWZmZXIgaXMgZnVsbCwgb3Igd2hlbiBhbiBpbnB1dCBvcGVyYXRpb24gaW50ZXJ2ZW5lcy4KKworICAgPHA+WW91IG1heSwgaWYgeW91IHdpc2gsIHN1cHBseSB5b3VyIG93biBidWZmZXIgYnkgcGFzc2luZyBhIHBvaW50ZXIgdG8KK2l0IGFzIHRoZSBhcmd1bWVudCA8dmFyPmJ1ZjwvdmFyPi4gIEl0IG11c3QgaGF2ZSBzaXplIDx2YXI+c2l6ZTwvdmFyPi4gIFlvdSBjYW4KK2Fsc28gdXNlIDxjb2RlPk5VTEw8L2NvZGU+IGFzIHRoZSB2YWx1ZSBvZiA8dmFyPmJ1ZjwvdmFyPiwgdG8gc2lnbmFsIHRoYXQgdGhlCis8Y29kZT5zZXRidWZmZXI8L2NvZGU+IGZ1bmN0aW9uIGlzIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+V2FybmluZ3M8L3N0cm9uZz48YnI+CitZb3UgbWF5IG9ubHkgdXNlIDxjb2RlPnNldGJ1ZmZlcjwvY29kZT4gYmVmb3JlIHBlcmZvcm1pbmcgYW55IGZpbGUgb3BlcmF0aW9uCitvdGhlciB0aGFuIG9wZW5pbmcgdGhlIGZpbGUuCisKKyAgIDxwPklmIHlvdSBzdXBwbHkgYSBub24tbnVsbCA8dmFyPmJ1ZjwvdmFyPiwgeW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIGFzc29jaWF0ZWQKK3N0b3JhZ2UgY29udGludWVzIHRvIGJlIGF2YWlsYWJsZSB1bnRpbCB5b3UgY2xvc2UgdGhlIHN0cmVhbQoraWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zZXRidWZmZXI8L2NvZGU+IGRvZXMgbm90IHJldHVybiBhIHJlc3VsdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1RoaXMgZnVuY3Rpb24gY29tZXMgZnJvbSBCU0Qgbm90IEFOU0kgb3IgUE9TSVguCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zZXRsaW5lYnVmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zZXRsaW5lYnVmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlZjE3MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3NldGxpbmVidWYuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zZXRsaW5lYnVmIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzZXRidWZmZXIuaHRtbCNzZXRidWZmZXIiIHRpdGxlPSJzZXRidWZmZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzZXR2YnVmLmh0bWwjc2V0dmJ1ZiIgdGl0bGU9InNldHZidWYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InNldGxpbmVidWYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic2V0dmJ1Zi5odG1sI3NldHZidWYiPnNldHZidWY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzZXRidWZmZXIuaHRtbCNzZXRidWZmZXIiPnNldGJ1ZmZlcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC41NiA8Y29kZT5zZXRsaW5lYnVmPC9jb2RlPiZtZGFzaDtzcGVjaWZ5IGxpbmUgYnVmZmVyaW5nIGZvciBhIGZpbGUgb3Igc3RyZWFtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc2V0bGluZWJ1Zi0yNjUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICB2b2lkIHNldGxpbmVidWYoRklMRSAqPHZhcj5mcDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c2V0bGluZWJ1ZjwvY29kZT4gc3BlY2lmaWVzIHRoYXQgb3V0cHV0IHRvIHRoZSBmaWxlIG9yIHN0cmVhbSBpZGVudGlmaWVkIGJ5Cis8dmFyPmZwPC92YXI+IHNob3VsZCBiZSBsaW5lIGJ1ZmZlcmVkLiAgVGhpcyBjYXVzZXMgdGhlIGZpbGUgb3Igc3RyZWFtIHRvIHBhc3MKK29uIG91dHB1dCB0byB0aGUgaG9zdCBzeXN0ZW0gYXQgZXZlcnkgbmV3bGluZSwgYXMgd2VsbCBhcyB3aGVuIHRoZQorYnVmZmVyIGlzIGZ1bGwsIG9yIHdoZW4gYW4gaW5wdXQgb3BlcmF0aW9uIGludGVydmVuZXMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+V2FybmluZ3M8L3N0cm9uZz48YnI+CitZb3UgbWF5IG9ubHkgdXNlIDxjb2RlPnNldGxpbmVidWY8L2NvZGU+IGJlZm9yZSBwZXJmb3JtaW5nIGFueSBmaWxlIG9wZXJhdGlvbgorb3RoZXIgdGhhbiBvcGVuaW5nIHRoZSBmaWxlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zZXRsaW5lYnVmPC9jb2RlPiByZXR1cm5zIGFzIHBlciBzZXR2YnVmLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBjb21lcyBmcm9tIEJTRCBub3QgQU5TSSBvciBQT1NJWC4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3NldGxvY2FsZS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc2V0bG9jYWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxODNiMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3NldGxvY2FsZS5odG1sCkBAIC0wLDAgKzEsMTQyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zZXRsb2NhbGUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkxvY2FsZS5odG1sI0xvY2FsZSIgdGl0bGU9IkxvY2FsZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic2V0bG9jYWxlIj48L2E+Cis8cD4KK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTG9jYWxlLmh0bWwjTG9jYWxlIj5Mb2NhbGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj45LjEgPGNvZGU+c2V0bG9jYWxlPC9jb2RlPiwgPGNvZGU+bG9jYWxlY29udjwvY29kZT4mbWRhc2g7c2VsZWN0IG9yIHF1ZXJ5IGxvY2FsZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXNldGxvY2FsZS00NDUiPjwvYT48YSBuYW1lPSJpbmRleC1sb2NhbGVjb252LTQ0NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmc2V0bG9jYWxlXzAwNWZyLTQ0NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmbG9jYWxlY29udl8wMDVmci00NDgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtsb2NhbGUuaCZndDsKKyAgICAgY2hhciAqc2V0bG9jYWxlKGludCA8dmFyPmNhdGVnb3J5PC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmxvY2FsZTwvdmFyPik7CisgICAgIGxjb252ICpsb2NhbGVjb252KHZvaWQpOworICAgICAKKyAgICAgY2hhciAqX3NldGxvY2FsZV9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sCisgICAgICAgICBpbnQgPHZhcj5jYXRlZ29yeTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5sb2NhbGU8L3Zhcj4pOworICAgICBsY29udiAqX2xvY2FsZWNvbnZfcih2b2lkICo8dmFyPnJlZW50PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zZXRsb2NhbGU8L2NvZGU+IGlzIHRoZSBmYWNpbGl0eSBkZWZpbmVkIGJ5IEFOU0kgQyB0byBjb25kaXRpb24gdGhlCitleGVjdXRpb24gZW52aXJvbm1lbnQgZm9yIGludGVybmF0aW9uYWwgY29sbGF0aW5nIGFuZCBmb3JtYXR0aW5nCitpbmZvcm1hdGlvbjsgPGNvZGU+bG9jYWxlY29udjwvY29kZT4gcmVwb3J0cyBvbiB0aGUgc2V0dGluZ3Mgb2YgdGhlIGN1cnJlbnQKK2xvY2FsZS4KKworICAgPHA+VGhpcyBpcyBhIG1pbmltYWwgaW1wbGVtZW50YXRpb24sIHN1cHBvcnRpbmcgb25seSB0aGUgcmVxdWlyZWQgPGNvZGU+IlBPU0lYIjwvY29kZT4KK2FuZCA8Y29kZT4iQyI8L2NvZGU+IHZhbHVlcyBmb3IgPHZhcj5sb2NhbGU8L3Zhcj47IHN0cmluZ3MgcmVwcmVzZW50aW5nIG90aGVyIGxvY2FsZXMgYXJlIG5vdAoraG9ub3JlZCB1bmxlc3MgX01CX0NBUEFCTEUgaXMgZGVmaW5lZC4KKworICAgPHA+SWYgX01CX0NBUEFCTEUgaXMgZGVmaW5lZCwgUE9TSVggbG9jYWxlIHN0cmluZ3MgYXJlIGFsbG93ZWQsIGZvbGxvd2luZwordGhlIGZvcm0KKworICAgPHA+bGFuZ3VhZ2VbX1RFUlJJVE9SWV1bLmNoYXJzZXRdW0Btb2RpZmllcl0KKworICAgPHA+PGNvZGU+Imxhbmd1YWdlIjwvY29kZT4gaXMgYSB0d28gY2hhcmFjdGVyIHN0cmluZyBwZXIgSVNPIDYzOSwgb3IsIGlmIG5vdCBhdmFpbGFibGUKK2ZvciBhIGdpdmVuIGxhbmd1YWdlLCBhIHRocmVlIGNoYXJhY3RlciBzdHJpbmcgcGVyIElTTyA2MzktMy4gCis8Y29kZT4iVEVSUklUT1JZIjwvY29kZT4gaXMgYSBjb3VudHJ5IGNvZGUgcGVyIElTTyAzMTY2LiAgRm9yIDxjb2RlPiJjaGFyc2V0IjwvY29kZT4gYW5kCis8Y29kZT4ibW9kaWZpZXIiPC9jb2RlPiBzZWUgYmVsb3cuCisKKyAgIDxwPkFkZGl0aW9uYWxseSB0byB0aGUgUE9TSVggc3BlY2lmaWVyLCB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQKK2ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgaW1wbGVtZW50YXRpb25zIHVzaW5nIG5ld2xpYjoKKzxjb2RlPiJDLWNoYXJzZXQiPC9jb2RlPi4gCitJbnN0ZWFkIG9mIDxjb2RlPiJDLSI8L2NvZGU+LCB5b3UgY2FuIGFsc28gc3BlY2lmeSA8Y29kZT4iQy4iPC9jb2RlPi4gIEJvdGggdmFyaWF0aW9ucyBhbGxvdwordG8gc3BlY2lmeSBsYW5ndWFnZSBuZXV0cmFsIGxvY2FsZXMgd2hpbGUgdXNpbmcgb3RoZXIgY2hhcnNldHMgdGhhbiBBU0NJSSwKK2ZvciBpbnN0YW5jZSA8Y29kZT4iQy5VVEYtOCI8L2NvZGU+LCB3aGljaCBrZWVwcyBhbGwgc2V0dGluZ3MgYXMgaW4gdGhlIEMgbG9jYWxlLAorYnV0IHVzZXMgdGhlIFVURi04IGNoYXJzZXQuCisKKyAgIDxwPlRoZSBmb2xsb3dpbmcgY2hhcnNldHMgYXJlIHJlY29nbml6ZWQ6Cis8Y29kZT4iVVRGLTgiPC9jb2RlPiwgPGNvZGU+IkpJUyI8L2NvZGU+LCA8Y29kZT4iRVVDSlAiPC9jb2RlPiwgPGNvZGU+IlNKSVMiPC9jb2RlPiwgPGNvZGU+IktPSTgtUiI8L2NvZGU+LCA8Y29kZT4iS09JOC1VIjwvY29kZT4sCis8Y29kZT4iR0VPUkdJQU4tUFMiPC9jb2RlPiwgPGNvZGU+IlBUMTU0IjwvY29kZT4sIDxjb2RlPiJUSVMtNjIwIjwvY29kZT4sIDxjb2RlPiJJU08tODg1OS14IjwvY29kZT4gd2l0aAorMSAmbHQ7PSB4ICZsdDs9IDE2LCBvciA8Y29kZT4iQ1B4eHgiPC9jb2RlPiB3aXRoIHh4eCBpbiBbNDM3LCA3MjAsIDczNywgNzc1LCA4NTAsIDg1MiwgODU1LAorODU3LCA4NTgsIDg2MiwgODY2LCA4NzQsIDkzMiwgMTEyNSwgMTI1MCwgMTI1MSwgMTI1MiwgMTI1MywgMTI1NCwgMTI1NSwgMTI1NiwKKzEyNTcsIDEyNThdLgorCisgICA8cD5DaGFyc2V0cyBhcmUgY2FzZSBpbnNlbnNpdGl2ZS4gIEZvciBpbnN0YW5jZSwgPGNvZGU+IkVVQ0pQIjwvY29kZT4gYW5kIDxjb2RlPiJldWNKUCI8L2NvZGU+CithcmUgZXF1aXZhbGVudC4gIENoYXJzZXQgbmFtZXMgd2l0aCBkYXNoZXMgY2FuIGFsc28gYmUgd3JpdHRlbiB3aXRob3V0CitkYXNoZXMsIGFzIGluIDxjb2RlPiJVVEY4IjwvY29kZT4sIDxjb2RlPiJpc284ODU5MSI8L2NvZGU+IG9yIDxjb2RlPiJrb2k4ciI8L2NvZGU+LiAgPGNvZGU+IkVVQ0pQIjwvY29kZT4gYW5kCis8Y29kZT4iRVVDS1IiPC9jb2RlPiBhcmUgYWxzbyByZWNvZ25pemVkIHdpdGggZGFzaCwgPGNvZGU+IkVVQy1KUCI8L2NvZGU+IGFuZCA8Y29kZT4iRVVDLUtSIjwvY29kZT4uCisKKyAgIDxwPkZ1bGwgc3VwcG9ydCBmb3IgYWxsIG9mIHRoZSBhYm92ZSBjaGFyc2V0cyByZXF1aXJlcyB0aGF0IG5ld2xpYiBoYXMgYmVlbgorYnVpbGQgd2l0aCBtdWx0aWJ5dGUgc3VwcG9ydCBhbmQgc3VwcG9ydCBmb3IgYWxsIElTTyBhbmQgV2luZG93cyBDb2RlcGFnZS4gCitPdGhlcndpc2UgYWxsIHNpbmdsZWJ5dGUgY2hhcnNldHMgYXJlIHNpbXBseSBtYXBwZWQgdG8gQVNDSUkuICBSaWdodCBub3csCitvbmx5IG5ld2xpYiBmb3IgQ3lnd2luIGlzIGJ1aWx0IHdpdGggZnVsbCBjaGFyc2V0IHN1cHBvcnQgYnkgZGVmYXVsdC4gCitVbmRlciBDeWd3aW4sIHRoaXMgaW1wbGVtZW50YXRpb24gYWRkaXRpb25hbGx5IHN1cHBvcnRzIHRoZSBjaGFyc2V0cworPGNvZGU+IkdCSyI8L2NvZGU+LCA8Y29kZT4iR0IyMzEyIjwvY29kZT4sIDxjb2RlPiJldWNDTiI8L2NvZGU+LCA8Y29kZT4iZXVjS1IiPC9jb2RlPiwgYW5kIDxjb2RlPiJCaWc1IjwvY29kZT4uICBDeWd3aW4KK2RvZXMgbm90IHN1cHBvcnQgPGNvZGU+IkpJUyI8L2NvZGU+LgorCisgICA8cD5DeWd3aW4gYWRkaXRpb25hbGx5IHN1cHBvcnRzIGxvY2FsZXMgZnJvbSB0aGUgZmlsZQorL3Vzci9zaGFyZS9sb2NhbGUvbG9jYWxlLmFsaWFzLgorCisgICA8cD4oPGNvZGU+IiI8L2NvZGU+IGlzIGFsc28gYWNjZXB0ZWQ7IGlmIGdpdmVuLCB0aGUgc2V0dGluZ3MgYXJlIHJlYWQgZnJvbSB0aGUKK2NvcnJlc3BvbmRpbmcgTENfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kICRMQU5HIGFjY29yZGluZyB0byBQT1NJWCBydWxlcy4KKworICAgPHA+VGhpcyBpbXBsZW1lbnRhdGlvbiBhbHNvIHN1cHBvcnRzIHRoZSBtb2RpZmllciA8Y29kZT4iY2prbmFycm93IjwvY29kZT4sIHdoaWNoCithZmZlY3RzIGhvdyB0aGUgZnVuY3Rpb25zIDxjb2RlPndjd2lkdGg8L2NvZGU+IGFuZCA8Y29kZT53Y3N3aWR0aDwvY29kZT4gaGFuZGxlIGNoYXJhY3RlcnMKK2Zyb20gdGhlICJDSksgQW1iaWd1b3VzIFdpZHRoIiBjYXRlZ29yeSBvZiBjaGFyYWN0ZXJzIGRlc2NyaWJlZCBhdAoraHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMTEvI0FtYmlndW91cy4gVGhlc2UgY2hhcmFjdGVycyBoYXZlIGEgd2lkdGgKK29mIDEgZm9yIHNpbmdsZWJ5dGUgY2hhcnNldHMgYW5kIGEgd2lkdGggb2YgMiBmb3IgbXVsdGlieXRlIGNoYXJzZXRzCitvdGhlciB0aGFuIFVURi04LiBGb3IgVVRGLTgsIHRoZWlyIHdpZHRoIGRlcGVuZHMgb24gdGhlIGxhbmd1YWdlIHNwZWNpZmllcjoKK2l0IGlzIDIgZm9yIDxjb2RlPiJ6aCI8L2NvZGU+IChDaGluZXNlKSwgPGNvZGU+ImphIjwvY29kZT4gKEphcGFuZXNlKSwgYW5kIDxjb2RlPiJrbyI8L2NvZGU+IChLb3JlYW4pLAorYW5kIDEgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4gU3BlY2lmeWluZyA8Y29kZT4iY2prbmFycm93IjwvY29kZT4gZm9yY2VzIGEgd2lkdGggb2YgMSwKK2luZGVwZW5kZW50IG9mIGNoYXJzZXQgYW5kIGxhbmd1YWdlLgorCisgICA8cD5JZiB5b3UgdXNlIDxjb2RlPk5VTEw8L2NvZGU+IGFzIHRoZSA8dmFyPmxvY2FsZTwvdmFyPiBhcmd1bWVudCwgPGNvZGU+c2V0bG9jYWxlPC9jb2RlPiByZXR1cm5zIGEKK3BvaW50ZXIgdG8gdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbG9jYWxlLiAgVGhlIGFjY2VwdGFibGUKK3ZhbHVlcyBmb3IgPHZhcj5jYXRlZ29yeTwvdmFyPiBhcmUgZGVmaW5lZCBpbiBgPGNvZGU+bG9jYWxlLmg8L2NvZGU+JyBhcyBtYWNyb3MKK2JlZ2lubmluZyB3aXRoIDxjb2RlPiJMQ18iPC9jb2RlPi4KKworICAgPHA+PGNvZGU+bG9jYWxlY29udjwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgKGFsc28gZGVmaW5lZCBpbgorYDxjb2RlPmxvY2FsZS5oPC9jb2RlPicpIGRlc2NyaWJpbmcgdGhlIGxvY2FsZS1zcGVjaWZpYyBjb252ZW50aW9ucyBjdXJyZW50bHkKK2luIGVmZmVjdC4KKworICAgPHA+PGNvZGU+X2xvY2FsZWNvbnZfcjwvY29kZT4gYW5kIDxjb2RlPl9zZXRsb2NhbGVfcjwvY29kZT4gYXJlIHJlZW50cmFudCB2ZXJzaW9ucyBvZgorPGNvZGU+bG9jYWxlY29udjwvY29kZT4gYW5kIDxjb2RlPnNldGxvY2FsZTwvY29kZT4gcmVzcGVjdGl2ZWx5LiAgVGhlIGV4dHJhIGFyZ3VtZW50Cis8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitBIHN1Y2Nlc3NmdWwgY2FsbCB0byA8Y29kZT5zZXRsb2NhbGU8L2NvZGU+IHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RyaW5nCithc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBjYXRlZ29yeSBmb3IgdGhlIG5ldyBsb2NhbGUuICBUaGUgc3RyaW5nCityZXR1cm5lZCBieSA8Y29kZT5zZXRsb2NhbGU8L2NvZGU+IGlzIHN1Y2ggdGhhdCBhIHN1YnNlcXVlbnQgY2FsbCB1c2luZyB0aGF0CitzdHJpbmcgd2lsbCByZXN0b3JlIHRoYXQgY2F0ZWdvcnkgKG9yIGFsbCBjYXRlZ29yaWVzIGluIGNhc2Ugb2YgTENfQUxMKSwKK3RvIHRoYXQgc3RhdGUuICBUaGUgYXBwbGljYXRpb24gc2hhbGwgbm90IG1vZGlmeSB0aGUgc3RyaW5nIHJldHVybmVkCit3aGljaCBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgYSBzdWJzZXF1ZW50IGNhbGwgdG8gPGNvZGU+c2V0bG9jYWxlPC9jb2RlPi4gCitPbiBlcnJvciwgPGNvZGU+c2V0bG9jYWxlPC9jb2RlPiByZXR1cm5zIDxjb2RlPk5VTEw8L2NvZGU+LgorCisgICA8cD48Y29kZT5sb2NhbGVjb252PC9jb2RlPiByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSBvZiB0eXBlIDxjb2RlPmxjb252PC9jb2RlPiwKK3doaWNoIGRlc2NyaWJlcyB0aGUgZm9ybWF0dGluZyBhbmQgY29sbGF0aW5nIGNvbnZlbnRpb25zIGluIGVmZmVjdCAoaW4KK3RoaXMgaW1wbGVtZW50YXRpb24sIGFsd2F5cyB0aG9zZSBvZiB0aGUgQyBsb2NhbGUpLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPnNldGxvY2FsZTwvY29kZT4sIGJ1dCB0aGUgb25seSBsb2NhbGUgcmVxdWlyZWQgYWNyb3NzIGFsbAoraW1wbGVtZW50YXRpb25zIGlzIHRoZSBDIGxvY2FsZS4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zZXR2YnVmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zZXR2YnVmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4MGUzYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3NldHZidWYuaHRtbApAQCAtMCwwICsxLDk2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zZXR2YnVmIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzZXRsaW5lYnVmLmh0bWwjc2V0bGluZWJ1ZiIgdGl0bGU9InNldGxpbmVidWYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzaXByaW50Zi5odG1sI3NpcHJpbnRmIiB0aXRsZT0ic2lwcmludGYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InNldHZidWYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic2lwcmludGYuaHRtbCNzaXByaW50ZiI+c2lwcmludGY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzZXRsaW5lYnVmLmh0bWwjc2V0bGluZWJ1ZiI+c2V0bGluZWJ1ZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC41NyA8Y29kZT5zZXR2YnVmPC9jb2RlPiZtZGFzaDtzcGVjaWZ5IGZpbGUgb3Igc3RyZWFtIGJ1ZmZlcmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXNldHZidWYtMjY2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgaW50IHNldHZidWYoRklMRSAqPHZhcj5mcDwvdmFyPiwgY2hhciAqPHZhcj5idWY8L3Zhcj4sCisgICAgICAgICBpbnQgPHZhcj5tb2RlPC92YXI+LCBzaXplX3QgPHZhcj5zaXplPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitVc2UgPGNvZGU+c2V0dmJ1ZjwvY29kZT4gdG8gc3BlY2lmeSB3aGF0IGtpbmQgb2YgYnVmZmVyaW5nIHlvdSB3YW50IGZvciB0aGUKK2ZpbGUgb3Igc3RyZWFtIGlkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPiwgYnkgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKK3ZhbHVlcyAoZnJvbSA8Y29kZT5zdGRpby5oPC9jb2RlPikgYXMgdGhlIDx2YXI+bW9kZTwvdmFyPiBhcmd1bWVudDoKKworICAgICA8ZGw+Cis8ZHQ+PGNvZGU+X0lPTkJGPC9jb2RlPjxkZD5EbyBub3QgdXNlIGEgYnVmZmVyOiBzZW5kIG91dHB1dCBkaXJlY3RseSB0byB0aGUgaG9zdCBzeXN0ZW0gZm9yIHRoZQorZmlsZSBvciBzdHJlYW0gaWRlbnRpZmllZCBieSA8dmFyPmZwPC92YXI+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+X0lPRkJGPC9jb2RlPjxkZD5Vc2UgZnVsbCBvdXRwdXQgYnVmZmVyaW5nOiBvdXRwdXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGhvc3Qgc3lzdGVtCitvbmx5IHdoZW4gdGhlIGJ1ZmZlciBpcyBmdWxsLCBvciB3aGVuIGFuIGlucHV0IG9wZXJhdGlvbiBpbnRlcnZlbmVzLgorCisgICAgIDxicj48ZHQ+PGNvZGU+X0lPTEJGPC9jb2RlPjxkZD5Vc2UgbGluZSBidWZmZXJpbmc6IHBhc3Mgb24gb3V0cHV0IHRvIHRoZSBob3N0IHN5c3RlbSBhdCBldmVyeQorbmV3bGluZSwgYXMgd2VsbCBhcyB3aGVuIHRoZSBidWZmZXIgaXMgZnVsbCwgb3Igd2hlbiBhbiBpbnB1dAorb3BlcmF0aW9uIGludGVydmVuZXMuIAorPC9kbD4KKworICAgPHA+VXNlIHRoZSA8dmFyPnNpemU8L3Zhcj4gYXJndW1lbnQgdG8gc3BlY2lmeSBob3cgbGFyZ2UgYSBidWZmZXIgeW91IHdpc2guICBZb3UKK2NhbiBzdXBwbHkgdGhlIGJ1ZmZlciBpdHNlbGYsIGlmIHlvdSB3aXNoLCBieSBwYXNzaW5nIGEgcG9pbnRlciB0byBhCitzdWl0YWJsZSBhcmVhIG9mIG1lbW9yeSBhcyA8dmFyPmJ1ZjwvdmFyPi4gIE90aGVyd2lzZSwgeW91IG1heSBwYXNzIDxjb2RlPk5VTEw8L2NvZGU+CithcyB0aGUgPHZhcj5idWY8L3Zhcj4gYXJndW1lbnQsIGFuZCA8Y29kZT5zZXR2YnVmPC9jb2RlPiB3aWxsIGFsbG9jYXRlIHRoZSBidWZmZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+V2FybmluZ3M8L3N0cm9uZz48YnI+CitZb3UgbWF5IG9ubHkgdXNlIDxjb2RlPnNldHZidWY8L2NvZGU+IGJlZm9yZSBwZXJmb3JtaW5nIGFueSBmaWxlIG9wZXJhdGlvbiBvdGhlcgordGhhbiBvcGVuaW5nIHRoZSBmaWxlLgorCisgICA8cD5JZiB5b3Ugc3VwcGx5IGEgbm9uLW51bGwgPHZhcj5idWY8L3Zhcj4sIHlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBhc3NvY2lhdGVkCitzdG9yYWdlIGNvbnRpbnVlcyB0byBiZSBhdmFpbGFibGUgdW50aWwgeW91IGNsb3NlIHRoZSBzdHJlYW0KK2lkZW50aWZpZWQgYnkgPHZhcj5mcDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorQSA8Y29kZT4wPC9jb2RlPiByZXN1bHQgaW5kaWNhdGVzIHN1Y2Nlc3MsIDxjb2RlPkVPRjwvY29kZT4gZmFpbHVyZSAoaW52YWxpZCA8dmFyPm1vZGU8L3Zhcj4gb3IKKzx2YXI+c2l6ZTwvdmFyPiBjYW4gY2F1c2UgZmFpbHVyZSkuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitCb3RoIEFOU0kgQyBhbmQgdGhlIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uIChJc3N1ZSAyKSByZXF1aXJlCis8Y29kZT5zZXR2YnVmPC9jb2RlPi4gSG93ZXZlciwgdGhleSBkaWZmZXIgb24gdGhlIG1lYW5pbmcgb2YgYSA8Y29kZT5OVUxMPC9jb2RlPiBidWZmZXIKK3BvaW50ZXI6IHRoZSBTVklEIGlzc3VlIDIgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgYSA8Y29kZT5OVUxMPC9jb2RlPiBidWZmZXIKK3BvaW50ZXIgcmVxdWVzdHMgdW5idWZmZXJlZCBvdXRwdXQuICBGb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgYXZvaWQKKzxjb2RlPk5VTEw8L2NvZGU+IGJ1ZmZlciBwb2ludGVycy4KKworICAgPHA+Qm90aCBzcGVjaWZpY2F0aW9ucyBkZXNjcmliZSB0aGUgcmVzdWx0IG9uIGZhaWx1cmUgb25seSBhcyBhCitub256ZXJvIHZhbHVlLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc2lnbmFsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zaWduYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmYxZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc2lnbmFsLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c2lnbmFsIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTaWduYWxzLmh0bWwjU2lnbmFscyIgdGl0bGU9IlNpZ25hbHMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJyYWlzZS5odG1sI3JhaXNlIiB0aXRsZT0icmFpc2UiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InNpZ25hbCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InJhaXNlLmh0bWwjcmFpc2UiPnJhaXNlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU2lnbmFscy5odG1sI1NpZ25hbHMiPlNpZ25hbHM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj43LjMgPGNvZGU+c2lnbmFsPC9jb2RlPiZtZGFzaDtzcGVjaWZ5IGhhbmRsZXIgc3Vicm91dGluZSBmb3IgYSBzaWduYWw8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zaWduYWwtNDI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZzaWduYWxfMDA1ZnItNDI3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CisgICAgIHZvaWQgKCpzaWduYWwoaW50IDx2YXI+c2lnPC92YXI+LCB2b2lkKCo8dmFyPmZ1bmM8L3Zhcj4pKGludCkpKSAoaW50KTsKKyAgICAgCisgICAgIHZvaWQgKCpfc2lnbmFsX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgaW50IDx2YXI+c2lnPC92YXI+LCB2b2lkKCo8dmFyPmZ1bmM8L3Zhcj4pKGludCkpKSAoaW50KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zaWduYWw8L2NvZGU+IHByb3ZpZGVzIGEgc2ltcGxlIHNpZ25hbC1oYW5kbGluZyBpbXBsZW1lbnRhdGlvbiBmb3IgZW1iZWRkZWQKK3RhcmdldHMuCisKKyAgIDxwPjxjb2RlPnNpZ25hbDwvY29kZT4gYWxsb3dzIHlvdSB0byByZXF1ZXN0IGNoYW5nZWQgdHJlYXRtZW50IGZvciBhIHBhcnRpY3VsYXIKK3NpZ25hbCA8dmFyPnNpZzwvdmFyPi4gIFlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBtYWNyb3MgPGNvZGU+U0lHX0RGTDwvY29kZT4KKyhzZWxlY3Qgc3lzdGVtIGRlZmF1bHQgaGFuZGxpbmcpIG9yIDxjb2RlPlNJR19JR048L2NvZGU+IChpZ25vcmUgdGhpcyBzaWduYWwpCithcyB0aGUgdmFsdWUgb2YgPHZhcj5mdW5jPC92YXI+OyBvdGhlcndpc2UsIDx2YXI+ZnVuYzwvdmFyPiBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIKK3RoYXQgaWRlbnRpZmllcyBhIHN1YnJvdXRpbmUgaW4geW91ciBwcm9ncmFtIGFzIHRoZSBoYW5kbGVyIGZvciB0aGlzIHNpZ25hbC4KKworICAgPHA+U29tZSBvZiB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IGZvciBzaWduYWwgaGFuZGxlcnMgaXMKK3VucHJlZGljdGFibGU7IG5vdGFibHksIHRoZSBvbmx5IGxpYnJhcnkgZnVuY3Rpb24gcmVxdWlyZWQgdG8gd29yaworY29ycmVjdGx5IGZyb20gd2l0aGluIGEgc2lnbmFsIGhhbmRsZXIgaXMgPGNvZGU+c2lnbmFsPC9jb2RlPiBpdHNlbGYsIGFuZAorb25seSB3aGVuIHVzZWQgdG8gcmVkZWZpbmUgdGhlIGhhbmRsZXIgZm9yIHRoZSBjdXJyZW50IHNpZ25hbCB2YWx1ZS4KKworICAgPHA+U3RhdGljIHN0b3JhZ2UgaXMgbGlrZXdpc2UgdW5yZWxpYWJsZSBmb3Igc2lnbmFsIGhhbmRsZXJzLCB3aXRoIG9uZQorZXhjZXB0aW9uOiBpZiB5b3UgZGVjbGFyZSBhIHN0YXRpYyBzdG9yYWdlIGxvY2F0aW9uIGFzIGA8Y29kZT52b2xhdGlsZQorc2lnX2F0b21pY190PC9jb2RlPicsIHRoZW4geW91IG1heSB1c2UgdGhhdCBsb2NhdGlvbiBpbiBhIHNpZ25hbCBoYW5kbGVyIHRvCitzdG9yZSBzaWduYWwgdmFsdWVzLgorCisgICA8cD5JZiB5b3VyIHNpZ25hbCBoYW5kbGVyIHRlcm1pbmF0ZXMgdXNpbmcgPGNvZGU+cmV0dXJuPC9jb2RlPiAob3IgaW1wbGljaXQKK3JldHVybiksIHlvdXIgcHJvZ3JhbSdzIGV4ZWN1dGlvbiBjb250aW51ZXMgYXQgdGhlIHBvaW50Cit3aGVyZSBpdCB3YXMgd2hlbiB0aGUgc2lnbmFsIHdhcyByYWlzZWQgKHdoZXRoZXIgYnkgeW91ciBwcm9ncmFtCitpdHNlbGYsIG9yIGJ5IGFuIGV4dGVybmFsIGV2ZW50KS4gIFNpZ25hbCBoYW5kbGVycyBjYW4gYWxzbwordXNlIGZ1bmN0aW9ucyBzdWNoIGFzIDxjb2RlPmV4aXQ8L2NvZGU+IGFuZCA8Y29kZT5hYm9ydDwvY29kZT4gdG8gYXZvaWQgcmV0dXJuaW5nLgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl9zaWduYWxfcjwvY29kZT4gaXMgdGhlIHJlZW50cmFudCB2ZXJzaW9uLiAKK1RoZSBleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCis8IS0tIEZJWE1FOiBkbyB3ZSBoYXZlIHNldGptcC5oIGFuZCBhc3NvYyBmbnM/IC0tPgorICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorSWYgeW91ciByZXF1ZXN0IGZvciBhIHNpZ25hbCBoYW5kbGVyIGNhbm5vdCBiZSBob25vcmVkLCB0aGUgcmVzdWx0IGlzCis8Y29kZT5TSUdfRVJSPC9jb2RlPjsgYSBzcGVjaWZpYyBlcnJvciBudW1iZXIgaXMgYWxzbyByZWNvcmRlZCBpbiA8Y29kZT5lcnJubzwvY29kZT4uCisKKyAgIDxwPk90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyB0aGUgcHJldmlvdXMgaGFuZGxlciAoYSBmdW5jdGlvbiBwb2ludGVyIG9yCitvbmUgb2YgdGhlIHByZWRlZmluZWQgbWFjcm9zKS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5zaWduYWw8L2NvZGU+LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZCB0byBsaW5rIHdpdGggPGNvZGU+c2lnbmFsPC9jb2RlPiwgYnV0CitpdCB3aWxsIG5vdCBoYXZlIGFueSB1c2VmdWwgZWZmZWN0cywgZXhjZXB0IGZvciBzb2Z0d2FyZSBnZW5lcmF0ZWQgc2lnbmFscywKK3dpdGhvdXQgYW4gb3BlcmF0aW5nIHN5c3RlbSB0aGF0IGNhbiBhY3R1YWxseSByYWlzZSBleGNlcHRpb25zLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3NpcHJpbnRmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zaXByaW50Zi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWIyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zaXByaW50Zi5odG1sCkBAIC0wLDAgKzEsODkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnNpcHJpbnRmIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzZXR2YnVmLmh0bWwjc2V0dmJ1ZiIgdGl0bGU9InNldHZidWYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzaXNjYW5mLmh0bWwjc2lzY2FuZiIgdGl0bGU9InNpc2NhbmYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InNpcHJpbnRmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InNpc2NhbmYuaHRtbCNzaXNjYW5mIj5zaXNjYW5mPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic2V0dmJ1Zi5odG1sI3NldHZidWYiPnNldHZidWY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNTggPGNvZGU+c2lwcmludGY8L2NvZGU+LCA8Y29kZT5maXByaW50ZjwvY29kZT4sIDxjb2RlPmlwcmludGY8L2NvZGU+LCA8Y29kZT5zbmlwcmludGY8L2NvZGU+LCA8Y29kZT5hc2lwcmludGY8L2NvZGU+LCA8Y29kZT5hc25pcHJpbnRmPC9jb2RlPiZtZGFzaDtmb3JtYXQgb3V0cHV0IChpbnRlZ2VyIG9ubHkpPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmlwcmludGYtMjY3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmaXByaW50Zl8wMDVmci0yNjgiPjwvYT48YSBuYW1lPSJpbmRleC1pcHJpbnRmLTI2OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmaXByaW50Zl8wMDVmci0yNzAiPjwvYT48YSBuYW1lPSJpbmRleC1zaXByaW50Zi0yNzEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnNpcHJpbnRmXzAwNWZyLTI3MiI+PC9hPjxhIG5hbWU9ImluZGV4LXNuaXByaW50Zi0yNzMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnNuaXByaW50Zl8wMDVmci0yNzQiPjwvYT48YSBuYW1lPSJpbmRleC1hc2lwcmludGYtMjc1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZhc2lwcmludGZfMDA1ZnItMjc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXNuaXByaW50Zi0yNzciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmFzbmlwcmludGZfMDA1ZnItMjc4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgCisgICAgIGludCBpcHJpbnRmKGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgZmlwcmludGYoRklMRSAqPHZhcj5mZDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4gLCAuLi4pOworICAgICBpbnQgc2lwcmludGYoY2hhciAqPHZhcj5zdHI8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgc25pcHJpbnRmKGNoYXIgKjx2YXI+c3RyPC92YXI+LCBzaXplX3QgPHZhcj5zaXplPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwKKyAgICAgICAgIC4uLik7CisgICAgIGludCBhc2lwcmludGYoY2hhciAqKjx2YXI+c3RycDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGNoYXIgKmFzbmlwcmludGYoY2hhciAqPHZhcj5zdHI8L3Zhcj4sIHNpemVfdCAqPHZhcj5zaXplPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIAorICAgICBpbnQgX2lwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBfZmlwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgRklMRSAqPHZhcj5mZDwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgX3NpcHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNoYXIgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBfc25pcHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNoYXIgKjx2YXI+c3RyPC92YXI+LCBzaXplX3QgPHZhcj5zaXplPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBfYXNpcHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNoYXIgKio8dmFyPnN0cnA8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgY2hhciAqX2FzbmlwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY2hhciAqPHZhcj5zdHI8L3Zhcj4sCisgICAgICAgICBzaXplX3QgKjx2YXI+c2l6ZTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aXByaW50ZjwvY29kZT4sIDxjb2RlPmZpcHJpbnRmPC9jb2RlPiwgPGNvZGU+c2lwcmludGY8L2NvZGU+LCA8Y29kZT5zbmlwcmludGY8L2NvZGU+LAorPGNvZGU+YXNpcHJpbnRmPC9jb2RlPiwgYW5kIDxjb2RlPmFzbmlwcmludGY8L2NvZGU+IGFyZSB0aGUgc2FtZSBhcyA8Y29kZT5wcmludGY8L2NvZGU+LAorPGNvZGU+ZnByaW50ZjwvY29kZT4sIDxjb2RlPnNwcmludGY8L2NvZGU+LCA8Y29kZT5zbnByaW50ZjwvY29kZT4sIDxjb2RlPmFzcHJpbnRmPC9jb2RlPiwgYW5kCis8Y29kZT5hc25wcmludGY8L2NvZGU+LCByZXNwZWN0aXZlbHksIGV4Y2VwdCB0aGF0IHRoZXkgcmVzdHJpY3QgdXNhZ2UKK3RvIG5vbi1mbG9hdGluZy1wb2ludCBmb3JtYXQgc3BlY2lmaWVycy4KKworICAgPHA+PGNvZGU+X2lwcmludGZfcjwvY29kZT4sIDxjb2RlPl9maXByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X2FzaXByaW50Zl9yPC9jb2RlPiwKKzxjb2RlPl9zaXByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X3NuaXByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X2FzbmlwcmludGZfcjwvY29kZT4gYXJlCitzaW1wbHkgcmVlbnRyYW50IHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1NpbWlsYXIgdG8gPGNvZGU+cHJpbnRmPC9jb2RlPiwgPGNvZGU+ZnByaW50ZjwvY29kZT4sIDxjb2RlPnNwcmludGY8L2NvZGU+LCA8Y29kZT5zbnByaW50ZjwvY29kZT4sIDxjb2RlPmFzcHJpbnRmPC9jb2RlPiwKK2FuZCA8Y29kZT5hc25wcmludGY8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXByaW50ZjwvY29kZT4sIDxjb2RlPmZpcHJpbnRmPC9jb2RlPiwgPGNvZGU+c2lwcmludGY8L2NvZGU+LCA8Y29kZT5zbmlwcmludGY8L2NvZGU+LCA8Y29kZT5hc2lwcmludGY8L2NvZGU+LAorYW5kIDxjb2RlPmFzbmlwcmludGY8L2NvZGU+IGFyZSBuZXdsaWIgZXh0ZW5zaW9ucy4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Npc2NhbmYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Npc2NhbmYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmIwY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc2lzY2FuZi5odG1sCkBAIC0wLDAgKzEsODIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnNpc2NhbmYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiIHRpdGxlPSJzaXByaW50ZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InNwcmludGYuaHRtbCNzcHJpbnRmIiB0aXRsZT0ic3ByaW50ZiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic2lzY2FuZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzcHJpbnRmLmh0bWwjc3ByaW50ZiI+c3ByaW50ZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InNpcHJpbnRmLmh0bWwjc2lwcmludGYiPnNpcHJpbnRmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjU5IDxjb2RlPnNpc2NhbmY8L2NvZGU+LCA8Y29kZT5maXNjYW5mPC9jb2RlPiwgPGNvZGU+aXNjYW5mPC9jb2RlPiZtZGFzaDtzY2FuIGFuZCBmb3JtYXQgbm9uLWZsb2F0aW5nIGlucHV0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtaXNjYW5mLTI3OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmaXNjYW5mXzAwNWZyLTI4MCI+PC9hPjxhIG5hbWU9ImluZGV4LWZpc2NhbmYtMjgxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZmaXNjYW5mXzAwNWZyLTI4MiI+PC9hPjxhIG5hbWU9ImluZGV4LXNpc2NhbmYtMjgzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZzaXNjYW5mXzAwNWZyLTI4NCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIAorICAgICBpbnQgaXNjYW5mKGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgZmlzY2FuZihGSUxFICo8dmFyPmZkPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IHNpc2NhbmYoY29uc3QgY2hhciAqPHZhcj5zdHI8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICAKKyAgICAgaW50IF9pc2NhbmZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBfZmlzY2FuZl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBGSUxFICo8dmFyPmZkPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBfc2lzY2FuZl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPnN0cjwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzY2FuZjwvY29kZT4sIDxjb2RlPmZpc2NhbmY8L2NvZGU+LCBhbmQgPGNvZGU+c2lzY2FuZjwvY29kZT4gYXJlIHRoZSBzYW1lIGFzCis8Y29kZT5zY2FuZjwvY29kZT4sIDxjb2RlPmZzY2FuZjwvY29kZT4sIGFuZCA8Y29kZT5zc2NhbmY8L2NvZGU+IHJlc3BlY3RpdmVseSwgb25seSB0aGF0Cit0aGV5IHJlc3RyaWN0IHRoZSBhdmFpbGFibGUgZm9ybWF0cyB0byBub24tZmxvYXRpbmctcG9pbnQKK2Zvcm1hdCBzcGVjaWZpZXJzLgorCisgICA8cD5UaGUgcm91dGluZXMgPGNvZGU+X2lzY2FuZl9yPC9jb2RlPiwgPGNvZGU+X2Zpc2NhbmZfcjwvY29kZT4sIGFuZCA8Y29kZT5fc2lzY2FuZl9yPC9jb2RlPiBhcmUgcmVlbnRyYW50Cit2ZXJzaW9ucyBvZiA8Y29kZT5pc2NhbmY8L2NvZGU+LCA8Y29kZT5maXNjYW5mPC9jb2RlPiwgYW5kIDxjb2RlPnNpc2NhbmY8L2NvZGU+IHRoYXQgdGFrZSBhbiBhZGRpdGlvbmFsCitmaXJzdCBhcmd1bWVudCBwb2ludGluZyB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5pc2NhbmY8L2NvZGU+IHJldHVybnMgdGhlIG51bWJlciBvZiBpbnB1dCBmaWVsZHMgc3VjY2Vzc2Z1bGx5CitzY2FubmVkLCBjb252ZXJ0ZWQgYW5kIHN0b3JlZDsgdGhlIHJldHVybiB2YWx1ZSBkb2VzCitub3QgaW5jbHVkZSBzY2FubmVkIGZpZWxkcyB3aGljaCB3ZXJlIG5vdCBzdG9yZWQuCisKKyAgIDxwPklmIDxjb2RlPmlzY2FuZjwvY29kZT4gYXR0ZW1wdHMgdG8gcmVhZCBhdCBlbmQtb2YtZmlsZSwgdGhlIHJldHVybgordmFsdWUgaXMgPGNvZGU+RU9GPC9jb2RlPi4KKworICAgPHA+SWYgbm8gZmllbGRzIHdlcmUgc3RvcmVkLCB0aGUgcmV0dXJuIHZhbHVlIGlzIDxjb2RlPjA8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+aXNjYW5mPC9jb2RlPiwgPGNvZGU+ZmlzY2FuZjwvY29kZT4sIGFuZCA8Y29kZT5zaXNjYW5mPC9jb2RlPiBhcmUgbmV3bGliIGV4dGVuc2lvbnMuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zcHJpbnRmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zcHJpbnRmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY0ZTIzMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3NwcmludGYuaHRtbApAQCAtMCwwICsxLDUxNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3ByaW50ZiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic2lzY2FuZi5odG1sI3Npc2NhbmYiIHRpdGxlPSJzaXNjYW5mIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3NjYW5mLmh0bWwjc3NjYW5mIiB0aXRsZT0ic3NjYW5mIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzcHJpbnRmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InNzY2FuZi5odG1sI3NzY2FuZiI+c3NjYW5mPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic2lzY2FuZi5odG1sI3Npc2NhbmYiPnNpc2NhbmY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNjAgPGNvZGU+c3ByaW50ZjwvY29kZT4sIDxjb2RlPmZwcmludGY8L2NvZGU+LCA8Y29kZT5wcmludGY8L2NvZGU+LCA8Y29kZT5zbnByaW50ZjwvY29kZT4sIDxjb2RlPmFzcHJpbnRmPC9jb2RlPiwgPGNvZGU+YXNucHJpbnRmPC9jb2RlPiZtZGFzaDtmb3JtYXQgb3V0cHV0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZnByaW50Zi0yODUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZwcmludGZfMDA1ZnItMjg2Ij48L2E+PGEgbmFtZT0iaW5kZXgtcHJpbnRmLTI4NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmcHJpbnRmXzAwNWZyLTI4OCI+PC9hPjxhIG5hbWU9ImluZGV4LWFzcHJpbnRmLTI4OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmYXNwcmludGZfMDA1ZnItMjkwIj48L2E+PGEgbmFtZT0iaW5kZXgtc3ByaW50Zi0yOTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnNwcmludGZfMDA1ZnItMjkyIj48L2E+PGEgbmFtZT0iaW5kZXgtc25wcmludGYtMjkzIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZzbnByaW50Zl8wMDVmci0yOTQiPjwvYT48YSBuYW1lPSJpbmRleC1hc25wcmludGYtMjk1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZhc25wcmludGZfMDA1ZnItMjk2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgCisgICAgIGludCBwcmludGYoY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBmcHJpbnRmKEZJTEUgKjx2YXI+ZmQ8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgc3ByaW50ZihjaGFyICo8dmFyPnN0cjwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBzbnByaW50ZihjaGFyICo8dmFyPnN0cjwvdmFyPiwgc2l6ZV90IDx2YXI+c2l6ZTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sCisgICAgICAgICAuLi4pOworICAgICBpbnQgYXNwcmludGYoY2hhciAqKjx2YXI+c3RycDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGNoYXIgKmFzbnByaW50ZihjaGFyICo8dmFyPnN0cjwvdmFyPiwgc2l6ZV90ICo8dmFyPnNpemU8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LAorICAgICAgICAgLi4uKTsKKyAgICAgCisgICAgIGludCBfcHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgX2ZwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgRklMRSAqPHZhcj5mZDwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgX3NwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY2hhciAqPHZhcj5zdHI8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IF9zbnByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBjaGFyICo8dmFyPnN0cjwvdmFyPiwgc2l6ZV90IDx2YXI+c2l6ZTwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgX2FzcHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNoYXIgKio8dmFyPnN0cnA8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgY2hhciAqX2FzbnByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBjaGFyICo8dmFyPnN0cjwvdmFyPiwKKyAgICAgICAgIHNpemVfdCAqPHZhcj5zaXplPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5wcmludGY8L2NvZGU+IGFjY2VwdHMgYSBzZXJpZXMgb2YgYXJndW1lbnRzLCBhcHBsaWVzIHRvIGVhY2ggYQorZm9ybWF0IHNwZWNpZmllciBmcm9tIDxjb2RlPio8L2NvZGU+PHZhcj5mb3JtYXQ8L3Zhcj4sIGFuZCB3cml0ZXMgdGhlCitmb3JtYXR0ZWQgZGF0YSB0byA8Y29kZT5zdGRvdXQ8L2NvZGU+LCB3aXRob3V0IGEgdGVybWluYXRpbmcgTlVMCitjaGFyYWN0ZXIuICBUaGUgYmVoYXZpb3Igb2YgPGNvZGU+cHJpbnRmPC9jb2RlPiBpcyB1bmRlZmluZWQgaWYgdGhlcmUKK2FyZSBub3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdC4gIDxjb2RlPnByaW50ZjwvY29kZT4gcmV0dXJucword2hlbiBpdCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBJZiB0aGVyZSBhcmUKK21vcmUgYXJndW1lbnRzIHRoYW4gdGhlIGZvcm1hdCByZXF1aXJlcywgZXhjZXNzIGFyZ3VtZW50cyBhcmUKK2lnbm9yZWQuCisKKyAgIDxwPjxjb2RlPmZwcmludGY8L2NvZGU+IGlzIGxpa2UgPGNvZGU+cHJpbnRmPC9jb2RlPiwgZXhjZXB0IHRoYXQgb3V0cHV0IGlzIGRpcmVjdGVkCit0byB0aGUgc3RyZWFtIDx2YXI+ZmQ8L3Zhcj4gcmF0aGVyIHRoYW4gPGNvZGU+c3Rkb3V0PC9jb2RlPi4KKworICAgPHA+PGNvZGU+c3ByaW50ZjwvY29kZT4gaXMgbGlrZSA8Y29kZT5wcmludGY8L2NvZGU+LCBleGNlcHQgdGhhdCBvdXRwdXQgaXMgZGlyZWN0ZWQKK3RvIHRoZSBidWZmZXIgPHZhcj5zdHI8L3Zhcj4sIGFuZCBhIHRlcm1pbmF0aW5nIE5VTCBpcyBvdXRwdXQuIAorQmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIG1vcmUgb3V0cHV0IGlzIGdlbmVyYXRlZCB0aGFuIHRoZQorYnVmZmVyIGNhbiBob2xkLgorCisgICA8cD48Y29kZT5zbnByaW50ZjwvY29kZT4gaXMgbGlrZSA8Y29kZT5zcHJpbnRmPC9jb2RlPiwgZXhjZXB0IHRoYXQgb3V0cHV0IGlzCitsaW1pdGVkIHRvIGF0IG1vc3QgPHZhcj5zaXplPC92YXI+IGJ5dGVzLCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCis8Y29kZT5OVUw8L2NvZGU+LiAgQXMgYSBzcGVjaWFsIGNhc2UsIGlmIDx2YXI+c2l6ZTwvdmFyPiBpcyAwLCA8dmFyPnN0cjwvdmFyPiBjYW4gYmUKK05VTEwsIGFuZCA8Y29kZT5zbnByaW50ZjwvY29kZT4gbWVyZWx5IGNhbGN1bGF0ZXMgaG93IG1hbnkgYnl0ZXMgd291bGQKK2JlIHByaW50ZWQuCisKKyAgIDxwPjxjb2RlPmFzcHJpbnRmPC9jb2RlPiBpcyBsaWtlIDxjb2RlPnNwcmludGY8L2NvZGU+LCBleGNlcHQgdGhhdCB0aGUgb3V0cHV0IGlzCitzdG9yZWQgaW4gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYnVmZmVyLCA8dmFyPnBzdHI8L3Zhcj4sIHdoaWNoCitzaG91bGQgYmUgZnJlZWQgbGF0ZXIgd2l0aCA8Y29kZT5mcmVlPC9jb2RlPi4KKworICAgPHA+PGNvZGU+YXNucHJpbnRmPC9jb2RlPiBpcyBsaWtlIDxjb2RlPnNwcmludGY8L2NvZGU+LCBleGNlcHQgdGhhdCB0aGUgcmV0dXJuIHR5cGUKK2lzIGVpdGhlciB0aGUgb3JpZ2luYWwgPHZhcj5zdHI8L3Zhcj4gaWYgaXQgd2FzIGxhcmdlIGVub3VnaCwgb3IgYQorZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cmluZyBpZiB0aGUgb3V0cHV0IGV4Y2VlZHMgKjx2YXI+c2l6ZTwvdmFyPjsKK3RoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBpcyByZXR1cm5lZCBpbiAqPHZhcj5zaXplPC92YXI+LiAgV2hlbgorZHluYW1pYyBhbGxvY2F0aW9uIG9jY3VycywgdGhlIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbAorPHZhcj5zdHI8L3Zhcj4gbWF5IGhhdmUgYmVlbiBtb2RpZmllZC4KKworICAgPHA+Rm9yIDxjb2RlPnNwcmludGY8L2NvZGU+LCA8Y29kZT5zbnByaW50ZjwvY29kZT4sIGFuZCA8Y29kZT5hc25wcmludGY8L2NvZGU+LCB0aGUgYmVoYXZpb3IKK2lzIHVuZGVmaW5lZCBpZiB0aGUgb3V0cHV0IDxjb2RlPio8L2NvZGU+PHZhcj5zdHI8L3Zhcj4gb3ZlcmxhcHMgd2l0aCBvbmUgb2YKK3RoZSBhcmd1bWVudHMuICBCZWhhdmlvciBpcyBhbHNvIHVuZGVmaW5lZCBpZiB0aGUgYXJndW1lbnQgZm9yCis8Y29kZT4lbjwvY29kZT4gd2l0aGluIDxjb2RlPio8L2NvZGU+PHZhcj5mb3JtYXQ8L3Zhcj4gb3ZlcmxhcHMgYW5vdGhlciBhcmd1bWVudC4KKworICAgPHA+PHZhcj5mb3JtYXQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgY2hhcmFjdGVyIHN0cmluZyBjb250YWluaW5nIHR3bwordHlwZXMgb2Ygb2JqZWN0czogb3JkaW5hcnkgY2hhcmFjdGVycyAob3RoZXIgdGhhbiA8Y29kZT4lPC9jb2RlPiksCit3aGljaCBhcmUgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LCBhbmQgY29udmVyc2lvbgorc3BlY2lmaWNhdGlvbnMsIGVhY2ggb2Ygd2hpY2ggaXMgaW50cm9kdWNlZCBieSA8Y29kZT4lPC9jb2RlPi4gKFRvCitpbmNsdWRlIDxjb2RlPiU8L2NvZGU+IGluIHRoZSBvdXRwdXQsIHVzZSA8Y29kZT4lJTwvY29kZT4gaW4gdGhlIGZvcm1hdCBzdHJpbmcuKSAKK0EgY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGZvcm06CisKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgICAgJVs8dmFyPnBvczwvdmFyPl1bPHZhcj5mbGFnczwvdmFyPl1bPHZhcj53aWR0aDwvdmFyPl1bLjx2YXI+cHJlYzwvdmFyPl1bPHZhcj5zaXplPC92YXI+XTx2YXI+dHlwZTwvdmFyPgorPC9wcmU+CisgICA8cD5UaGUgZmllbGRzIG9mIHRoZSBjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gaGF2ZSB0aGUgZm9sbG93aW5nCittZWFuaW5nczoKKworICAgICA8dWw+Cis8bGk+PHZhcj5wb3M8L3Zhcj4KKworICAgICA8cD5Db252ZXJzaW9ucyBub3JtYWxseSBjb25zdW1lIGFyZ3VtZW50cyBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5CithcmUgcHJlc2VudGVkLiAgSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdG8gY29uc3VtZSBhcmd1bWVudHMKK291dCBvZiBvcmRlciwgYW5kIHJldXNlIGFuIGFyZ3VtZW50IGZvciBtb3JlIHRoYW4gb25lCitjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gKGFsdGhvdWdoIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQKK2lmIHRoZSBzYW1lIGFyZ3VtZW50IGlzIHJlcXVlc3RlZCB3aXRoIGRpZmZlcmVudCB0eXBlcyksIGJ5CitzcGVjaWZ5aW5nIDx2YXI+cG9zPC92YXI+LCB3aGljaCBpcyBhIGRlY2ltYWwgaW50ZWdlciBmb2xsb3dlZCBieQorJyQnLiAgVGhlIGludGVnZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kICZsdDtOTF9BUkdNQVgmZ3Q7IGZyb20KK2xpbWl0cy5oLCBhbmQgaWYgYXJndW1lbnQgPGNvZGU+JW4kPC9jb2RlPiBpcyByZXF1ZXN0ZWQsIGFsbCBlYXJsaWVyCithcmd1bWVudHMgbXVzdCBiZSByZXF1ZXN0ZWQgc29tZXdoZXJlIHdpdGhpbiA8dmFyPmZvcm1hdDwvdmFyPi4gIElmCitwb3NpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIHVzZWQsIHRoZW4gYWxsIGNvbnZlcnNpb24KK3NwZWNpZmljYXRpb25zIGV4Y2VwdCBmb3IgPGNvZGU+JSU8L2NvZGU+IG11c3Qgc3BlY2lmeSBhIHBvc2l0aW9uLiAKK1RoaXMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIG1ldGhvZCBpcyBhIFBPU0lYIGV4dGVuc2lvbiB0byB0aGUgQworc3RhbmRhcmQgZGVmaW5pdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucy4KKworICAgICA8bGk+PHZhcj5mbGFnczwvdmFyPgorCisgICAgIDxwPjx2YXI+ZmxhZ3M8L3Zhcj4gaXMgYW4gb3B0aW9uYWwgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB3aGljaCBjb250cm9sCitvdXRwdXQganVzdGlmaWNhdGlvbiwgbnVtZXJpYyBzaWducywgZGVjaW1hbCBwb2ludHMsIHRyYWlsaW5nCit6ZXJvcywgYW5kIG9jdGFsIGFuZCBoZXggcHJlZml4ZXMuICBUaGUgZmxhZyBjaGFyYWN0ZXJzIGFyZQorbWludXMgKDxjb2RlPi08L2NvZGU+KSwgcGx1cyAoPGNvZGU+KzwvY29kZT4pLCBzcGFjZSAoICksIHplcm8gKDxjb2RlPjA8L2NvZGU+KSwgc2hhcnAKKyg8Y29kZT4jPC9jb2RlPiksIGFuZCBxdW90ZSAoPGNvZGU+JzwvY29kZT4pLiAgVGhleSBjYW4gYXBwZWFyIGluIGFueQorY29tYmluYXRpb24sIGFsdGhvdWdoIG5vdCBhbGwgZmxhZ3MgY2FuIGJlIHVzZWQgZm9yIGFsbAorY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uIHR5cGVzLgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPic8L2NvZGU+PGRkPkEgUE9TSVggZXh0ZW5zaW9uIHRvIHRoZSBDIHN0YW5kYXJkLiAgSG93ZXZlciwgdGhpcworaW1wbGVtZW50YXRpb24gcHJlc2VudGx5IHRyZWF0cyBpdCBhcyBhIG5vLW9wLCB3aGljaAoraXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBDIGxvY2FsZSwgYW55d2F5LiAgKElmCitpdCBkaWQgd2hhdCBpdCBpcyBzdXBwb3NlZCB0bywgd2hlbiA8dmFyPnR5cGU8L3Zhcj4gd2VyZSA8Y29kZT5pPC9jb2RlPiwKKzxjb2RlPmQ8L2NvZGU+LCA8Y29kZT51PC9jb2RlPiwgPGNvZGU+ZjwvY29kZT4sIDxjb2RlPkY8L2NvZGU+LCA8Y29kZT5nPC9jb2RlPiwgb3IgPGNvZGU+RzwvY29kZT4sIHRoZQoraW50ZWdlciBwb3J0aW9uIG9mIHRoZSBjb252ZXJzaW9uIHdvdWxkIGJlIGZvcm1hdHRlZAord2l0aCB0aG91c2FuZHMnIGdyb3VwaW5nIHdpZGUgY2hhcmFjdGVycy4pCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPi08L2NvZGU+PGRkPlRoZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24gaXMgbGVmdAoranVzdGlmaWVkLCBhbmQgdGhlIHJpZ2h0IGlzIHBhZGRlZCB3aXRoCitibGFua3MuICBJZiB5b3UgZG8gbm90IHVzZSB0aGlzIGZsYWcsIHRoZQorcmVzdWx0IGlzIHJpZ2h0IGp1c3RpZmllZCwgYW5kIHBhZGRlZCBvbiB0aGUKK2xlZnQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPis8L2NvZGU+PGRkPlRoZSByZXN1bHQgb2YgYSBzaWduZWQgY29udmVyc2lvbiAoYXMKK2RldGVybWluZWQgYnkgPHZhcj50eXBlPC92YXI+IG9mIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+YTwvY29kZT4sCis8Y29kZT5BPC9jb2RlPiwgPGNvZGU+ZTwvY29kZT4sIDxjb2RlPkU8L2NvZGU+LCA8Y29kZT5mPC9jb2RlPiwgPGNvZGU+RjwvY29kZT4sIDxjb2RlPmc8L2NvZGU+LCBvcgorPGNvZGU+RzwvY29kZT4pIHdpbGwgYWx3YXlzIGJlZ2luIHdpdGggYSBwbHVzIG9yIG1pbnVzCitzaWduLiAgKElmIHlvdSBkbyBub3QgdXNlIHRoaXMgZmxhZywgcG9zaXRpdmUKK3ZhbHVlcyBkbyBub3QgYmVnaW4gd2l0aCBhIHBsdXMgc2lnbi4pCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPiIgIiAoc3BhY2UpPC9jb2RlPjxkZD5JZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgc2lnbmVkIGNvbnZlcnNpb24KK3NwZWNpZmljYXRpb24gaXMgbm90IGEgc2lnbiwgb3IgaWYgYSBzaWduZWQKK2NvbnZlcnNpb24gcmVzdWx0cyBpbiBubyBjaGFyYWN0ZXJzLCB0aGUKK3Jlc3VsdCB3aWxsIGJlZ2luIHdpdGggYSBzcGFjZS4gIElmIHRoZSBzcGFjZQorKCApIGZsYWcgYW5kIHRoZSBwbHVzICg8Y29kZT4rPC9jb2RlPikgZmxhZyBib3RoCithcHBlYXIsIHRoZSBzcGFjZSBmbGFnIGlzIGlnbm9yZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPjA8L2NvZGU+PGRkPklmIHRoZSA8dmFyPnR5cGU8L3Zhcj4gY2hhcmFjdGVyIGlzIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwKKzxjb2RlPm88L2NvZGU+LCA8Y29kZT51PC9jb2RlPiwgPGNvZGU+eDwvY29kZT4sIDxjb2RlPlg8L2NvZGU+LCA8Y29kZT5hPC9jb2RlPiwgPGNvZGU+QTwvY29kZT4sCis8Y29kZT5lPC9jb2RlPiwgPGNvZGU+RTwvY29kZT4sIDxjb2RlPmY8L2NvZGU+LCA8Y29kZT5GPC9jb2RlPiwgPGNvZGU+ZzwvY29kZT4sIG9yIDxjb2RlPkc8L2NvZGU+OiAgbGVhZGluZworemVyb3MgYXJlIHVzZWQgdG8gcGFkIHRoZSBmaWVsZCB3aWR0aAorKGZvbGxvd2luZyBhbnkgaW5kaWNhdGlvbiBvZiBzaWduIG9yIGJhc2UpOyBubworc3BhY2VzIGFyZSB1c2VkIGZvciBwYWRkaW5nLiAgSWYgdGhlIHplcm8KKyg8Y29kZT4wPC9jb2RlPikgYW5kIG1pbnVzICg8Y29kZT4tPC9jb2RlPikgZmxhZ3MgYm90aCBhcHBlYXIsCit0aGUgemVybyAoPGNvZGU+MDwvY29kZT4pIGZsYWcgd2lsbCBiZSBpZ25vcmVkLiAgRm9yCis8Y29kZT5kPC9jb2RlPiwgPGNvZGU+aTwvY29kZT4sIDxjb2RlPm88L2NvZGU+LCA8Y29kZT51PC9jb2RlPiwgPGNvZGU+eDwvY29kZT4sIGFuZCA8Y29kZT5YPC9jb2RlPgorY29udmVyc2lvbnMsIGlmIGEgcHJlY2lzaW9uIDx2YXI+cHJlYzwvdmFyPiBpcworc3BlY2lmaWVkLCB0aGUgemVybyAoPGNvZGU+MDwvY29kZT4pIGZsYWcgaXMgaWdub3JlZC4KKworICAgICAgICAgIDxwPk5vdGUgdGhhdCA8Y29kZT4wPC9jb2RlPiBpcyBpbnRlcnByZXRlZCBhcyBhIGZsYWcsIG5vdAorYXMgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkIHdpZHRoLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4jPC9jb2RlPjxkZD5UaGUgcmVzdWx0IGlzIHRvIGJlIGNvbnZlcnRlZCB0byBhbgorYWx0ZXJuYXRpdmUgZm9ybSwgYWNjb3JkaW5nIHRvIHRoZSA8dmFyPnR5cGU8L3Zhcj4KK2NoYXJhY3RlcjoKKworICAgICAgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPm88L2NvZGU+PGRkPkluY3JlYXNlcyBwcmVjaXNpb24gdG8gZm9yY2UgdGhlIGZpcnN0CitkaWdpdCBvZiB0aGUgcmVzdWx0IHRvIGJlIGEgemVyby4KKworICAgICAgICAgICAgICAgPGJyPjxkdD48Y29kZT54PC9jb2RlPjxkZD5BIG5vbi16ZXJvIHJlc3VsdCB3aWxsIGhhdmUgYSA8Y29kZT4weDwvY29kZT4KK3ByZWZpeC4KKworICAgICAgICAgICAgICAgPGJyPjxkdD48Y29kZT5YPC9jb2RlPjxkZD5BIG5vbi16ZXJvIHJlc3VsdCB3aWxsIGhhdmUgYSA8Y29kZT4wWDwvY29kZT4KK3ByZWZpeC4KKworICAgICAgICAgICAgICAgPGJyPjxkdD48Y29kZT5hLCBBLCBlLCBFLCBmLCBvciBGPC9jb2RlPjxkZD5UaGUgcmVzdWx0IHdpbGwgYWx3YXlzIGNvbnRhaW4gYQorZGVjaW1hbCBwb2ludCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cKK3RoZSBwb2ludC4gIChOb3JtYWxseSwgYSBkZWNpbWFsIHBvaW50CithcHBlYXJzIG9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LikgCitUcmFpbGluZyB6ZXJvcyBhcmUgcmVtb3ZlZC4KKworICAgICAgICAgICAgICAgPGJyPjxkdD48Y29kZT5nIG9yIEc8L2NvZGU+PGRkPlRoZSByZXN1bHQgd2lsbCBhbHdheXMgY29udGFpbiBhCitkZWNpbWFsIHBvaW50IGV2ZW4gaWYgbm8gZGlnaXRzIGZvbGxvdwordGhlIHBvaW50LiAgVHJhaWxpbmcgemVyb3MgYXJlIG5vdAorcmVtb3ZlZC4KKworICAgICAgICAgICAgICAgPGJyPjxkdD48Y29kZT5hbGwgb3RoZXJzPC9jb2RlPjxkZD5VbmRlZmluZWQuCisKKyAgICAgICAgICA8L2RsPgorCisgICAgIDwvZGw+CisKKyAgICAgPGxpPjx2YXI+d2lkdGg8L3Zhcj4KKworICAgICA8cD48dmFyPndpZHRoPC92YXI+IGlzIGFuIG9wdGlvbmFsIG1pbmltdW0gZmllbGQgd2lkdGguICBZb3UgY2FuCitlaXRoZXIgc3BlY2lmeSBpdCBkaXJlY3RseSBhcyBhIGRlY2ltYWwgaW50ZWdlciwgb3IKK2luZGlyZWN0bHkgYnkgdXNpbmcgaW5zdGVhZCBhbiBhc3RlcmlzayAoPGNvZGU+KjwvY29kZT4pLCBpbgord2hpY2ggY2FzZSBhbiA8Y29kZT5pbnQ8L2NvZGU+IGFyZ3VtZW50IGlzIHVzZWQgYXMgdGhlIGZpZWxkCit3aWR0aC4gIElmIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSB1c2VkLCB0aGVuIHRoZQord2lkdGggbXVzdCBhbHNvIGJlIHNwZWNpZmllZCBwb3NpdGlvbmFsbHkgYXMgPGNvZGU+Km0kPC9jb2RlPiwKK3dpdGggbSBhcyBhIGRlY2ltYWwgaW50ZWdlci4gIE5lZ2F0aXZlIGZpZWxkIHdpZHRocworYXJlIHRyZWF0ZWQgYXMgc3BlY2lmeWluZyB0aGUgbWludXMgKDxjb2RlPi08L2NvZGU+KSBmbGFnIGZvcgorbGVmdCBqdXN0ZmljYXRpb24sIGFsb25nIHdpdGggYSBwb3NpdGl2ZSBmaWVsZCB3aWR0aC4gCitUaGUgcmVzdWx0aW5nIGZvcm1hdCBtYXkgYmUgd2lkZXIgdGhhbiB0aGUgc3BlY2lmaWVkCit3aWR0aC4KKworICAgICA8bGk+PHZhcj5wcmVjPC92YXI+CisKKyAgICAgPHA+PHZhcj5wcmVjPC92YXI+IGlzIGFuIG9wdGlvbmFsIGZpZWxkOyBpZiBwcmVzZW50LCBpdCBpcworaW50cm9kdWNlZCB3aXRoIGA8Y29kZT4uPC9jb2RlPicgKGEgcGVyaW9kKS4gWW91IGNhbiBzcGVjaWZ5Cit0aGUgcHJlY2lzaW9uIGVpdGhlciBkaXJlY3RseSBhcyBhIGRlY2ltYWwgaW50ZWdlciBvcgoraW5kaXJlY3RseSBieSB1c2luZyBhbiBhc3RlcmlzayAoPGNvZGU+KjwvY29kZT4pLCBpbiB3aGljaCBjYXNlCithbiA8Y29kZT5pbnQ8L2NvZGU+IGFyZ3VtZW50IGlzIHVzZWQgYXMgdGhlIHByZWNpc2lvbi4gIElmCitwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUgdXNlZCwgdGhlbiB0aGUgcHJlY2lzaW9uIG11c3QKK2Fsc28gYmUgc3BlY2lmaWVkIHBvc2l0aW9uYWxseSBhcyA8Y29kZT4qbSQ8L2NvZGU+LCB3aXRoIG0gYXMgYQorZGVjaW1hbCBpbnRlZ2VyLiAgU3VwcGx5aW5nIGEgbmVnYXRpdmUgcHJlY2lzaW9uIGlzCitlcXVpdmFsZW50IHRvIG9taXR0aW5nIHRoZSBwcmVjaXNpb24uICBJZiBvbmx5IGEKK3BlcmlvZCBpcyBzcGVjaWZpZWQgdGhlIHByZWNpc2lvbiBpcyB6ZXJvLiBUaGUgZWZmZWN0CitkZXBlbmRzIG9uIHRoZSBjb252ZXJzaW9uIDx2YXI+dHlwZTwvdmFyPi4KKworICAgICAgICAgIDxkbD4KKzxkdD48Y29kZT5kLCBpLCBvLCB1LCB4LCBvciBYPC9jb2RlPjxkZD5NaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgdG8gYXBwZWFyLiAgSWYgbm8KK3ByZWNpc2lvbiBpcyBnaXZlbiwgZGVmYXVsdHMgdG8gMS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YSBvciBBPC9jb2RlPjxkZD5OdW1iZXIgb2YgZGlnaXRzIHRvIGFwcGVhciBhZnRlciB0aGUgZGVjaW1hbAorcG9pbnQuICBJZiBubyBwcmVjaXNpb24gaXMgZ2l2ZW4sIHRoZQorcHJlY2lzaW9uIGRlZmF1bHRzIHRvIHRoZSBtaW5pbXVtIG5lZWRlZCBmb3IKK2FuIGV4YWN0IHJlcHJlc2VudGF0aW9uLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5lLCBFLCBmIG9yIEY8L2NvZGU+PGRkPk51bWJlciBvZiBkaWdpdHMgdG8gYXBwZWFyIGFmdGVyIHRoZSBkZWNpbWFsCitwb2ludC4gIElmIG5vIHByZWNpc2lvbiBpcyBnaXZlbiwgdGhlCitwcmVjaXNpb24gZGVmYXVsdHMgdG8gNi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZyBvciBHPC9jb2RlPjxkZD5NYXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMuICBBCitwcmVjaXNpb24gb2YgMCBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIGEKK3ByZWNpc2lvbiBvZiAxLiAgSWYgbm8gcHJlY2lzaW9uIGlzIGdpdmVuLCB0aGUKK3ByZWNpc2lvbiBkZWZhdWx0cyB0byA2LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5zIG9yIFM8L2NvZGU+PGRkPk1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcHJpbnQgZnJvbSB0aGUKK3N0cmluZy4gIElmIG5vIHByZWNpc2lvbiBpcyBnaXZlbiwgdGhlIGVudGlyZQorc3RyaW5nIGlzIHByaW50ZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmFsbCBvdGhlcnM8L2NvZGU+PGRkPnVuZGVmaW5lZC4KKworICAgICA8L2RsPgorCisgICAgIDxsaT48dmFyPnNpemU8L3Zhcj4KKworICAgICA8cD48dmFyPnNpemU8L3Zhcj4gaXMgYW4gb3B0aW9uYWwgbW9kaWZpZXIgdGhhdCBjaGFuZ2VzIHRoZSBkYXRhCit0eXBlIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQgaGFzLiAgQmVoYXZpb3IgaXMKK3Vuc3BlY2lmaWVkIGlmIGEgc2l6ZSBpcyBnaXZlbiB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZQorPHZhcj50eXBlPC92YXI+LgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmhoPC9jb2RlPjxkZD5XaXRoIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgb3IKKzxjb2RlPlg8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgc2hvdWxkIGJlCitjb252ZXJ0ZWQgdG8gYSA8Y29kZT5zaWduZWQgY2hhcjwvY29kZT4gb3IgPGNvZGU+dW5zaWduZWQKK2NoYXI8L2NvZGU+IGJlZm9yZSBwcmludGluZy4KKworICAgICAgICAgIDxwPldpdGggPGNvZGU+bjwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBpcyBhCitwb2ludGVyIHRvIGEgPGNvZGU+c2lnbmVkIGNoYXI8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5oPC9jb2RlPjxkZD5XaXRoIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgb3IKKzxjb2RlPlg8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgc2hvdWxkIGJlCitjb252ZXJ0ZWQgdG8gYSA8Y29kZT5zaG9ydDwvY29kZT4gb3IgPGNvZGU+dW5zaWduZWQgc2hvcnQ8L2NvZGU+CitiZWZvcmUgcHJpbnRpbmcuCisKKyAgICAgICAgICA8cD5XaXRoIDxjb2RlPm48L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhIDxjb2RlPnNob3J0PC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bDwvY29kZT48ZGQ+V2l0aCA8Y29kZT5kPC9jb2RlPiwgPGNvZGU+aTwvY29kZT4sIDxjb2RlPm88L2NvZGU+LCA8Y29kZT51PC9jb2RlPiwgPGNvZGU+eDwvY29kZT4sIG9yCis8Y29kZT5YPC9jb2RlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEKKzxjb2RlPmxvbmc8L2NvZGU+IG9yIDxjb2RlPnVuc2lnbmVkIGxvbmc8L2NvZGU+LgorCisgICAgICAgICAgPHA+V2l0aCA8Y29kZT5jPC9jb2RlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGFyZ3VtZW50IGhhcwordHlwZSA8Y29kZT53aW50X3Q8L2NvZGU+LgorCisgICAgICAgICAgPHA+V2l0aCA8Y29kZT5zPC9jb2RlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gPGNvZGU+d2NoYXJfdDwvY29kZT4uCisKKyAgICAgICAgICA8cD5XaXRoIDxjb2RlPm48L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhIDxjb2RlPmxvbmc8L2NvZGU+LgorCisgICAgICAgICAgPHA+V2l0aCA8Y29kZT5hPC9jb2RlPiwgPGNvZGU+QTwvY29kZT4sIDxjb2RlPmU8L2NvZGU+LCA8Y29kZT5FPC9jb2RlPiwgPGNvZGU+ZjwvY29kZT4sIDxjb2RlPkY8L2NvZGU+LAorPGNvZGU+ZzwvY29kZT4sIG9yIDxjb2RlPkc8L2NvZGU+LCBoYXMgbm8gZWZmZWN0IChiZWNhdXNlIG9mCit2YXJhcmcgcHJvbW90aW9uIHJ1bGVzLCB0aGVyZSBpcyBubyBuZWVkIHRvCitkaXN0aW5ndWlzaCBiZXR3ZWVuIDxjb2RlPmZsb2F0PC9jb2RlPiBhbmQgPGNvZGU+ZG91YmxlPC9jb2RlPikuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmxsPC9jb2RlPjxkZD5XaXRoIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgb3IKKzxjb2RlPlg8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorPGNvZGU+bG9uZyBsb25nPC9jb2RlPiBvciA8Y29kZT51bnNpZ25lZCBsb25nIGxvbmc8L2NvZGU+LgorCisgICAgICAgICAgPHA+V2l0aCA8Y29kZT5uPC9jb2RlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gYSA8Y29kZT5sb25nIGxvbmc8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5qPC9jb2RlPjxkZD5XaXRoIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgb3IKKzxjb2RlPlg8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYW4KKzxjb2RlPmludG1heF90PC9jb2RlPiBvciA8Y29kZT51aW50bWF4X3Q8L2NvZGU+LgorCisgICAgICAgICAgPHA+V2l0aCA8Y29kZT5uPC9jb2RlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gYW4gPGNvZGU+aW50bWF4X3Q8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT56PC9jb2RlPjxkZD5XaXRoIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgb3IKKzxjb2RlPlg8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYSA8Y29kZT5zaXplX3Q8L2NvZGU+LgorCisgICAgICAgICAgPHA+V2l0aCA8Y29kZT5uPC9jb2RlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gYSA8Y29kZT5zaXplX3Q8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT50PC9jb2RlPjxkZD5XaXRoIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgb3IKKzxjb2RlPlg8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorPGNvZGU+cHRyZGlmZl90PC9jb2RlPi4KKworICAgICAgICAgIDxwPldpdGggPGNvZGU+bjwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBpcyBhCitwb2ludGVyIHRvIGEgPGNvZGU+cHRyZGlmZl90PC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TDwvY29kZT48ZGQ+V2l0aCA8Y29kZT5hPC9jb2RlPiwgPGNvZGU+QTwvY29kZT4sIDxjb2RlPmU8L2NvZGU+LCA8Y29kZT5FPC9jb2RlPiwgPGNvZGU+ZjwvY29kZT4sIDxjb2RlPkY8L2NvZGU+LAorPGNvZGU+ZzwvY29kZT4sIG9yIDxjb2RlPkc8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQKK2lzIGEgPGNvZGU+bG9uZyBkb3VibGU8L2NvZGU+LgorCisgICAgIDwvZGw+CisKKyAgICAgPGxpPjx2YXI+dHlwZTwvdmFyPgorCisgICAgIDxwPjx2YXI+dHlwZTwvdmFyPiBzcGVjaWZpZXMgd2hhdCBraW5kIG9mIGNvbnZlcnNpb24gPGNvZGU+cHJpbnRmPC9jb2RlPgorcGVyZm9ybXMuICBIZXJlIGlzIGEgdGFibGUgb2YgdGhlc2U6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JTwvY29kZT48ZGQ+UHJpbnRzIHRoZSBwZXJjZW50IGNoYXJhY3RlciAoPGNvZGU+JTwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5jPC9jb2RlPjxkZD5QcmludHMgPHZhcj5hcmc8L3Zhcj4gYXMgc2luZ2xlIGNoYXJhY3Rlci4gIElmIHRoZQorPGNvZGU+bDwvY29kZT4gc2l6ZSBzcGVjaWZpZXIgaXMgaW4gZWZmZWN0LCBhIG11bHRpYnl0ZQorY2hhcmFjdGVyIGlzIHByaW50ZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkM8L2NvZGU+PGRkPlNob3J0IGZvciA8Y29kZT4lbGM8L2NvZGU+LiAgQSBQT1NJWCBleHRlbnNpb24gdG8gdGhlIEMgc3RhbmRhcmQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnM8L2NvZGU+PGRkPlByaW50cyB0aGUgZWxlbWVudHMgb2YgYSBwb2ludGVyIHRvIDxjb2RlPmNoYXI8L2NvZGU+Cit1bnRpbCB0aGUgcHJlY2lzaW9uIG9yIGEgbnVsbCBjaGFyYWN0ZXIgaXMKK3JlYWNoZWQuICBJZiB0aGUgPGNvZGU+bDwvY29kZT4gc2l6ZSBzcGVjaWZpZXIgaXMgaW4KK2VmZmVjdCwgdGhlIHBvaW50ZXIgaXMgdG8gYW4gYXJyYXkgb2YKKzxjb2RlPndjaGFyX3Q8L2NvZGU+LCBhbmQgdGhlIHN0cmluZyBpcyBjb252ZXJ0ZWQgdG8KK211bHRpYnl0ZSBjaGFyYWN0ZXJzIGJlZm9yZSBwcmludGluZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UzwvY29kZT48ZGQ+U2hvcnQgZm9yIDxjb2RlPiVsczwvY29kZT4uICBBIFBPU0lYIGV4dGVuc2lvbiB0byB0aGUgQyBzdGFuZGFyZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZCBvciBpPC9jb2RlPjxkZD5QcmludHMgYSBzaWduZWQgZGVjaW1hbCBpbnRlZ2VyOyB0YWtlcyBhbgorPGNvZGU+aW50PC9jb2RlPi4gIExlYWRpbmcgemVyb3MgYXJlIGluc2VydGVkIGFzCituZWNlc3NhcnkgdG8gcmVhY2ggdGhlIHByZWNpc2lvbi4gIEEgdmFsdWUgb2YgMCB3aXRoCithIHByZWNpc2lvbiBvZiAwIHByb2R1Y2VzIGFuIGVtcHR5IHN0cmluZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+RDwvY29kZT48ZGQ+TmV3bGliIGV4dGVuc2lvbiwgc2hvcnQgZm9yIDxjb2RlPiVsZDwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm88L2NvZGU+PGRkPlByaW50cyBhbiB1bnNpZ25lZCBvY3RhbCBpbnRlZ2VyOyB0YWtlcyBhbgorPGNvZGU+dW5zaWduZWQ8L2NvZGU+LiAgTGVhZGluZyB6ZXJvcyBhcmUgaW5zZXJ0ZWQgYXMKK25lY2Vzc2FyeSB0byByZWFjaCB0aGUgcHJlY2lzaW9uLiAgQSB2YWx1ZSBvZiAwIHdpdGgKK2EgcHJlY2lzaW9uIG9mIDAgcHJvZHVjZXMgYW4gZW1wdHkgc3RyaW5nLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5PPC9jb2RlPjxkZD5OZXdsaWIgZXh0ZW5zaW9uLCBzaG9ydCBmb3IgPGNvZGU+JWxvPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dTwvY29kZT48ZGQ+UHJpbnRzIGFuIHVuc2lnbmVkIGRlY2ltYWwgaW50ZWdlcjsgdGFrZXMgYW4KKzxjb2RlPnVuc2lnbmVkPC9jb2RlPi4gIExlYWRpbmcgemVyb3MgYXJlIGluc2VydGVkIGFzCituZWNlc3NhcnkgdG8gcmVhY2ggdGhlIHByZWNpc2lvbi4gIEEgdmFsdWUgb2YgMCB3aXRoCithIHByZWNpc2lvbiBvZiAwIHByb2R1Y2VzIGFuIGVtcHR5IHN0cmluZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+VTwvY29kZT48ZGQ+TmV3bGliIGV4dGVuc2lvbiwgc2hvcnQgZm9yIDxjb2RlPiVsdTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPlByaW50cyBhbiB1bnNpZ25lZCBoZXhhZGVjaW1hbCBpbnRlZ2VyICh1c2luZworPGNvZGU+YWJjZGVmPC9jb2RlPiBhcyBkaWdpdHMgYmV5b25kIDxjb2RlPjk8L2NvZGU+KTsgdGFrZXMgYW4KKzxjb2RlPnVuc2lnbmVkPC9jb2RlPi4gIExlYWRpbmcgemVyb3MgYXJlIGluc2VydGVkIGFzCituZWNlc3NhcnkgdG8gcmVhY2ggdGhlIHByZWNpc2lvbi4gIEEgdmFsdWUgb2YgMCB3aXRoCithIHByZWNpc2lvbiBvZiAwIHByb2R1Y2VzIGFuIGVtcHR5IHN0cmluZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WDwvY29kZT48ZGQ+TGlrZSA8Y29kZT54PC9jb2RlPiwgYnV0IHVzZXMgPGNvZGU+QUJDREVGPC9jb2RlPiBhcyBkaWdpdHMKK2JleW9uZCA8Y29kZT45PC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZjwvY29kZT48ZGQ+UHJpbnRzIGEgc2lnbmVkIHZhbHVlIG9mIHRoZSBmb3JtCis8Y29kZT5bLV05OTk5Ljk5OTk8L2NvZGU+LCB3aXRoIHRoZSBwcmVjaXNpb24KK2RldGVybWluaW5nIGhvdyBtYW55IGRpZ2l0cyBmb2xsb3cgdGhlIGRlY2ltYWwKK3BvaW50OyB0YWtlcyBhIDxjb2RlPmRvdWJsZTwvY29kZT4gKHJlbWVtYmVyIHRoYXQKKzxjb2RlPmZsb2F0PC9jb2RlPiBwcm9tb3RlcyB0byA8Y29kZT5kb3VibGU8L2NvZGU+IGFzIGEgdmFyYXJnKS4gCitUaGUgbG93IG9yZGVyIGRpZ2l0IGlzIHJvdW5kZWQgdG8gZXZlbi4gIElmCit0aGUgcHJlY2lzaW9uIHJlc3VsdHMgaW4gYXQgbW9zdCBERUNJTUFMX0RJRworZGlnaXRzLCB0aGUgcmVzdWx0IGlzIHJvdW5kZWQgY29ycmVjdGx5OyBpZgorbW9yZSB0aGFuIERFQ0lNQUxfRElHIGRpZ2l0cyBhcmUgcHJpbnRlZCwgdGhlCityZXN1bHQgaXMgb25seSBndWFyYW50ZWVkIHRvIHJvdW5kIGJhY2sgdG8gdGhlCitvcmlnaW5hbCB2YWx1ZS4KKworICAgICAgICAgIDxwPklmIHRoZSB2YWx1ZSBpcyBpbmZpbml0ZSwgdGhlIHJlc3VsdCBpcworPGNvZGU+aW5mPC9jb2RlPiwgYW5kIG5vIHplcm8gcGFkZGluZyBpcyBwZXJmb3JtZWQuICBJZgordGhlIHZhbHVlIGlzIG5vdCBhIG51bWJlciwgdGhlIHJlc3VsdCBpcworPGNvZGU+bmFuPC9jb2RlPiwgYW5kIG5vIHplcm8gcGFkZGluZyBpcyBwZXJmb3JtZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkY8L2NvZGU+PGRkPkxpa2UgPGNvZGU+ZjwvY29kZT4sIGJ1dCB1c2VzIDxjb2RlPklORjwvY29kZT4gYW5kIDxjb2RlPk5BTjwvY29kZT4gZm9yCitub24tZmluaXRlIG51bWJlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmU8L2NvZGU+PGRkPlByaW50cyBhIHNpZ25lZCB2YWx1ZSBvZiB0aGUgZm9ybQorPGNvZGU+Wy1dOS45OTk5ZVsrfC1dOTk5PC9jb2RlPjsgdGFrZXMgYSA8Y29kZT5kb3VibGU8L2NvZGU+LiAKK1RoZSBkaWdpdCBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQgaXMgbm9uLXplcm8KK2lmIHRoZSB2YWx1ZSBpcyBub24temVyby4gIFRoZSBwcmVjaXNpb24KK2RldGVybWluZXMgaG93IG1hbnkgZGlnaXRzIGFwcGVhciBiZXR3ZWVuCis8Y29kZT4uPC9jb2RlPiBhbmQgPGNvZGU+ZTwvY29kZT4sIGFuZCB0aGUgZXhwb25lbnQgYWx3YXlzCitjb250YWlucyBhdCBsZWFzdCB0d28gZGlnaXRzLiAgVGhlIHZhbHVlIHplcm8KK2hhcyBhbiBleHBvbmVudCBvZiB6ZXJvLiAgSWYgdGhlIHZhbHVlIGlzIG5vdAorZmluaXRlLCBpdCBpcyBwcmludGVkIGxpa2UgPGNvZGU+ZjwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkU8L2NvZGU+PGRkPkxpa2UgPGNvZGU+ZTwvY29kZT4sIGJ1dCB1c2luZyA8Y29kZT5FPC9jb2RlPiB0byBpbnRyb2R1Y2UgdGhlCitleHBvbmVudCwgYW5kIGxpa2UgPGNvZGU+RjwvY29kZT4gZm9yIG5vbi1maW5pdGUKK3ZhbHVlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZzwvY29kZT48ZGQ+UHJpbnRzIGEgc2lnbmVkIHZhbHVlIGluIGVpdGhlciA8Y29kZT5mPC9jb2RlPiBvciA8Y29kZT5lPC9jb2RlPgorZm9ybSwgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlIGFuZAorcHJlY2lzaW9uJm1kYXNoO2FuIGV4cG9uZW50IGxlc3MgdGhhbiAtNCBvcgorZ3JlYXRlciB0aGFuIHRoZSBwcmVjaXNpb24gc2VsZWN0cyB0aGUgPGNvZGU+ZTwvY29kZT4KK2Zvcm0uICBUcmFpbGluZyB6ZXJvcyBhbmQgdGhlIGRlY2ltYWwgcG9pbnQKK2FyZSBwcmludGVkIG9ubHkgaWYgbmVjZXNzYXJ5OyB0YWtlcyBhCis8Y29kZT5kb3VibGU8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5HPC9jb2RlPjxkZD5MaWtlIDxjb2RlPmc8L2NvZGU+LCBleGNlcHQgdXNlIDxjb2RlPkY8L2NvZGU+IG9yIDxjb2RlPkU8L2NvZGU+IGZvcm0uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmE8L2NvZGU+PGRkPlByaW50cyBhIHNpZ25lZCB2YWx1ZSBvZiB0aGUgZm9ybQorPGNvZGU+Wy1dMHgxLmZmZmZwWyt8LV05PC9jb2RlPjsgdGFrZXMgYSA8Y29kZT5kb3VibGU8L2NvZGU+LiAKK1RoZSBsZXR0ZXJzIDxjb2RlPmFiY2RlZjwvY29kZT4gYXJlIHVzZWQgZm9yIGRpZ2l0cworYmV5b25kIDxjb2RlPjk8L2NvZGU+LiAgVGhlIHByZWNpc2lvbiBkZXRlcm1pbmVzIGhvdworbWFueSBkaWdpdHMgYXBwZWFyIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiAKK1RoZSBleHBvbmVudCBjb250YWlucyBhdCBsZWFzdCBvbmUgZGlnaXQsIGFuZAoraXMgYSBkZWNpbWFsIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgcG93ZXIgb2YKKzI7IGEgdmFsdWUgb2YgMCBoYXMgYW4gZXhwb25lbnQgb2YgMC4gCitOb24tZmluaXRlIHZhbHVlcyBhcmUgcHJpbnRlZCBsaWtlIDxjb2RlPmY8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5BPC9jb2RlPjxkZD5MaWtlIDxjb2RlPmE8L2NvZGU+LCBleGNlcHQgdXNlcyA8Y29kZT5YPC9jb2RlPiwgPGNvZGU+UDwvY29kZT4sIGFuZAorPGNvZGU+QUJDREVGPC9jb2RlPiBpbnN0ZWFkIG9mIGxvd2VyIGNhc2UuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm48L2NvZGU+PGRkPlRha2VzIGEgcG9pbnRlciB0byA8Y29kZT5pbnQ8L2NvZGU+LCBhbmQgc3RvcmVzIGEgY291bnQKK29mIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzbyBmYXIuICBObworb3V0cHV0IGlzIGNyZWF0ZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnA8L2NvZGU+PGRkPlRha2VzIGEgcG9pbnRlciB0byA8Y29kZT52b2lkPC9jb2RlPiwgYW5kIHByaW50cyBpdCBpbgorYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBmb3JtYXQuICBUaGlzCitpbXBsZW1lbnRhdGlvbiBpcyBzaW1pbGFyIHRvIDxjb2RlPiUjdHg8L2NvZGU+KSwgZXhjZXB0Cit0aGF0IDxjb2RlPjB4PC9jb2RlPiBhcHBlYXJzIGV2ZW4gZm9yIHRoZSBOVUxMIHBvaW50ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm08L2NvZGU+PGRkPlByaW50cyB0aGUgb3V0cHV0IG9mIDxjb2RlPnN0cmVycm9yKGVycm5vKTwvY29kZT47IG5vCithcmd1bWVudCBpcyByZXF1aXJlZC4gIEEgR05VIGV4dGVuc2lvbi4KKworICAgICA8L2RsPgorCisgICA8L3VsPgorCisgICA8cD48Y29kZT5fcHJpbnRmX3I8L2NvZGU+LCA8Y29kZT5fZnByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X2FzcHJpbnRmX3I8L2NvZGU+LAorPGNvZGU+X3NwcmludGZfcjwvY29kZT4sIDxjb2RlPl9zbnByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X2FzbnByaW50Zl9yPC9jb2RlPiBhcmUgc2ltcGx5CityZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorT24gc3VjY2VzcywgPGNvZGU+c3ByaW50ZjwvY29kZT4gYW5kIDxjb2RlPmFzcHJpbnRmPC9jb2RlPiByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbgordGhlIG91dHB1dCBzdHJpbmcsIGV4Y2VwdCB0aGUgY29uY2x1ZGluZyA8Y29kZT5OVUw8L2NvZGU+IGlzIG5vdCBjb3VudGVkLiAKKzxjb2RlPnNucHJpbnRmPC9jb2RlPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBpbiB0aGUgb3V0cHV0CitzdHJpbmcsIGV4Y2VwdCB0aGUgY29uY2x1ZGluZyA8Y29kZT5OVUw8L2NvZGU+IGlzIG5vdCBjb3VudGVkLiAgPGNvZGU+cHJpbnRmPC9jb2RlPiBhbmQKKzxjb2RlPmZwcmludGY8L2NvZGU+IHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdHJhbnNtaXR0ZWQuIAorPGNvZGU+YXNucHJpbnRmPC9jb2RlPiByZXR1cm5zIHRoZSBvcmlnaW5hbCA8dmFyPnN0cjwvdmFyPiBpZiB0aGVyZSB3YXMgZW5vdWdoIHJvb20sCitvdGhlcndpc2UgaXQgcmV0dXJucyBhbiBhbGxvY2F0ZWQgc3RyaW5nLgorCisgICA8cD5JZiBhbiBlcnJvciBvY2N1cnMsIHRoZSByZXN1bHQgb2YgPGNvZGU+cHJpbnRmPC9jb2RlPiwgPGNvZGU+ZnByaW50ZjwvY29kZT4sCis8Y29kZT5zbnByaW50ZjwvY29kZT4sIGFuZCA8Y29kZT5hc3ByaW50ZjwvY29kZT4gaXMgYSBuZWdhdGl2ZSB2YWx1ZSwgYW5kIHRoZSByZXN1bHQgb2YKKzxjb2RlPmFzbnByaW50ZjwvY29kZT4gaXMgTlVMTC4gIE5vIGVycm9yIHJldHVybnMgb2NjdXIgZm9yIDxjb2RlPnNwcmludGY8L2NvZGU+LiAgRm9yCis8Y29kZT5wcmludGY8L2NvZGU+IGFuZCA8Y29kZT5mcHJpbnRmPC9jb2RlPiwgPGNvZGU+ZXJybm88L2NvZGU+IG1heSBiZSBzZXQgYWNjb3JkaW5nIHRvCis8Y29kZT5mcHV0YzwvY29kZT4uICBGb3IgPGNvZGU+YXNwcmludGY8L2NvZGU+IGFuZCA8Y29kZT5hc25wcmludGY8L2NvZGU+LCA8Y29kZT5lcnJubzwvY29kZT4gbWF5IGJlIHNldAordG8gRU5PTUVNIGlmIGFsbG9jYXRpb24gZmFpbHMsIGFuZCBmb3IgPGNvZGU+c25wcmludGY8L2NvZGU+LCA8Y29kZT5lcnJubzwvY29kZT4gbWF5IGJlCitzZXQgdG8gRU9WRVJGTE9XIGlmIDx2YXI+c2l6ZTwvdmFyPiBvciB0aGUgb3V0cHV0IGxlbmd0aCBleGNlZWRzIElOVF9NQVguCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+QnVnczwvc3Ryb25nPjxicj4KK1RoZSAmbGRxdW87JnJkcXVvOycgKHF1b3RlKSBmbGFnIGRvZXMgbm90IHdvcmsgd2hlbiBsb2NhbGUncyB0aG91c2FuZHNfc2VwIGlzIG5vdCBlbXB0eS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5wcmludGY8L2NvZGU+LCA8Y29kZT5mcHJpbnRmPC9jb2RlPiwgPGNvZGU+c3ByaW50ZjwvY29kZT4sIGFuZAorPGNvZGU+c25wcmludGY8L2NvZGU+LiAgPGNvZGU+YXNwcmludGY8L2NvZGU+IGFuZCA8Y29kZT5hc25wcmludGY8L2NvZGU+IGFyZSBuZXdsaWIgZXh0ZW5zaW9ucy4KKworICAgPHA+VGhlIEFOU0kgQyBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBzdXBwb3J0IGF0CitsZWFzdCBmb3JtYXR0ZWQgb3V0cHV0IG9mIHVwIHRvIDUwOSBjaGFyYWN0ZXJzLiAgVGhpcyBpbXBsZW1lbnRhdGlvbgoraGFzIG5vIGluaGVyZW50IGxpbWl0LgorCisgICA8cD5EZXBlbmRpbmcgb24gaG93IG5ld2xpYiB3YXMgY29uZmlndXJlZCwgbm90IGFsbCBmb3JtYXQgc3BlY2lmaWVycyBhcmUKK3N1cHBvcnRlZC4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3NzY2FuZi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3NjYW5mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxMGI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3NzY2FuZi5odG1sCkBAIC0wLDAgKzEsMzM0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zc2NhbmYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InNwcmludGYuaHRtbCNzcHJpbnRmIiB0aXRsZT0ic3ByaW50ZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN3cHJpbnRmLmh0bWwjc3dwcmludGYiIHRpdGxlPSJzd3ByaW50ZiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3NjYW5mIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN3cHJpbnRmLmh0bWwjc3dwcmludGYiPnN3cHJpbnRmPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3ByaW50Zi5odG1sI3NwcmludGYiPnNwcmludGY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNjEgPGNvZGU+c3NjYW5mPC9jb2RlPiwgPGNvZGU+ZnNjYW5mPC9jb2RlPiwgPGNvZGU+c2NhbmY8L2NvZGU+Jm1kYXNoO3NjYW4gYW5kIGZvcm1hdCBpbnB1dDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXNjYW5mLTI5NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmc2NhbmZfMDA1ZnItMjk4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZnNjYW5mLTI5OSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmZnNjYW5mXzAwNWZyLTMwMCI+PC9hPjxhIG5hbWU9ImluZGV4LXNzY2FuZi0zMDEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnNzY2FuZl8wMDVmci0zMDIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICAKKyAgICAgaW50IHNjYW5mKGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgZnNjYW5mKEZJTEUgKjx2YXI+ZmQ8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKjx2YXI+c3RyPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgCisgICAgIGludCBfc2NhbmZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBfZnNjYW5mX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIEZJTEUgKjx2YXI+ZmQ8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IF9zc2NhbmZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5zdHI8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zY2FuZjwvY29kZT4gc2NhbnMgYSBzZXJpZXMgb2YgaW5wdXQgZmllbGRzIGZyb20gc3RhbmRhcmQgaW5wdXQsCitvbmUgY2hhcmFjdGVyIGF0IGEgdGltZS4gIEVhY2ggZmllbGQgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvCithIGZvcm1hdCBzcGVjaWZpZXIgcGFzc2VkIHRvIDxjb2RlPnNjYW5mPC9jb2RlPiBpbiB0aGUgZm9ybWF0IHN0cmluZyBhdAorPGNvZGU+KjwvY29kZT48dmFyPmZvcm1hdDwvdmFyPi4gIDxjb2RlPnNjYW5mPC9jb2RlPiBzdG9yZXMgdGhlIGludGVycHJldGVkIGlucHV0IGZyb20KK2VhY2ggZmllbGQgYXQgdGhlIGFkZHJlc3MgcGFzc2VkIHRvIGl0IGFzIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50Citmb2xsb3dpbmcgPHZhcj5mb3JtYXQ8L3Zhcj4uICBZb3UgbXVzdCBzdXBwbHkgdGhlIHNhbWUgbnVtYmVyIG9mCitmb3JtYXQgc3BlY2lmaWVycyBhbmQgYWRkcmVzcyBhcmd1bWVudHMgYXMgdGhlcmUgYXJlIGlucHV0IGZpZWxkcy4KKworICAgPHA+VGhlcmUgbXVzdCBiZSBzdWZmaWNpZW50IGFkZHJlc3MgYXJndW1lbnRzIGZvciB0aGUgZ2l2ZW4gZm9ybWF0CitzcGVjaWZpZXJzOyBpZiBub3QgdGhlIHJlc3VsdHMgYXJlIHVucHJlZGljdGFibGUgYW5kIGxpa2VseQorZGlzYXN0ZXJvdXMuICBFeGNlc3MgYWRkcmVzcyBhcmd1bWVudHMgYXJlIG1lcmVseSBpZ25vcmVkLgorCisgICA8cD48Y29kZT5zY2FuZjwvY29kZT4gb2Z0ZW4gcHJvZHVjZXMgdW5leHBlY3RlZCByZXN1bHRzIGlmIHRoZSBpbnB1dCBkaXZlcmdlcyBmcm9tCithbiBleHBlY3RlZCBwYXR0ZXJuLiBTaW5jZSB0aGUgY29tYmluYXRpb24gb2YgPGNvZGU+Z2V0czwvY29kZT4gb3IgPGNvZGU+ZmdldHM8L2NvZGU+Citmb2xsb3dlZCBieSA8Y29kZT5zc2NhbmY8L2NvZGU+IGlzIHNhZmUgYW5kIGVhc3ksIHRoYXQgaXMgdGhlIHByZWZlcnJlZCB3YXkKK3RvIGJlIGNlcnRhaW4gdGhhdCBhIHByb2dyYW0gaXMgc3luY2hyb25pemVkIHdpdGggaW5wdXQgYXQgdGhlIGVuZAorb2YgYSBsaW5lLgorCisgICA8cD48Y29kZT5mc2NhbmY8L2NvZGU+IGFuZCA8Y29kZT5zc2NhbmY8L2NvZGU+IGFyZSBpZGVudGljYWwgdG8gPGNvZGU+c2NhbmY8L2NvZGU+LCBvdGhlciB0aGFuIHRoZQorc291cmNlIG9mIGlucHV0OiA8Y29kZT5mc2NhbmY8L2NvZGU+IHJlYWRzIGZyb20gYSBmaWxlLCBhbmQgPGNvZGU+c3NjYW5mPC9jb2RlPgorZnJvbSBhIHN0cmluZy4KKworICAgPHA+VGhlIHJvdXRpbmVzIDxjb2RlPl9zY2FuZl9yPC9jb2RlPiwgPGNvZGU+X2ZzY2FuZl9yPC9jb2RlPiwgYW5kIDxjb2RlPl9zc2NhbmZfcjwvY29kZT4gYXJlIHJlZW50cmFudAordmVyc2lvbnMgb2YgPGNvZGU+c2NhbmY8L2NvZGU+LCA8Y29kZT5mc2NhbmY8L2NvZGU+LCBhbmQgPGNvZGU+c3NjYW5mPC9jb2RlPiB0aGF0IHRha2UgYW4gYWRkaXRpb25hbAorZmlyc3QgYXJndW1lbnQgcG9pbnRpbmcgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+VGhlIHN0cmluZyBhdCA8Y29kZT4qPC9jb2RlPjx2YXI+Zm9ybWF0PC92YXI+IGlzIGEgY2hhcmFjdGVyIHNlcXVlbmNlIGNvbXBvc2VkCitvZiB6ZXJvIG9yIG1vcmUgZGlyZWN0aXZlcy4gRGlyZWN0aXZlcyBhcmUgY29tcG9zZWQgb2YKK29uZSBvciBtb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVycywgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycywKK2FuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMuCisKKyAgIDxwPldoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgYmxhbmsgKCApLCB0YWIgKDxjb2RlPlx0PC9jb2RlPiksIG9yCituZXdsaW5lICg8Y29kZT5cbjwvY29kZT4pLiAKK1doZW4gPGNvZGU+c2NhbmY8L2NvZGU+IGVuY291bnRlcnMgYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiB0aGUgZm9ybWF0IHN0cmluZworaXQgd2lsbCByZWFkIChidXQgbm90IHN0b3JlKSBhbGwgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzCit1cCB0byB0aGUgbmV4dCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0LgorCisgICA8cD5Ob24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBhbGwgb3RoZXIgQVNDSUkgY2hhcmFjdGVycyBleGNlcHQgdGhlCitwZXJjZW50IHNpZ24gKDxjb2RlPiU8L2NvZGU+KS4gIFdoZW4gPGNvZGU+c2NhbmY8L2NvZGU+IGVuY291bnRlcnMgYSBub24td2hpdGVzcGFjZQorY2hhcmFjdGVyIGluIHRoZSBmb3JtYXQgc3RyaW5nIGl0IHdpbGwgcmVhZCwgYnV0IG5vdCBzdG9yZQorYSBtYXRjaGluZyBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuCisKKyAgIDxwPkZvcm1hdCBzcGVjaWZpY2F0aW9ucyB0ZWxsIDxjb2RlPnNjYW5mPC9jb2RlPiB0byByZWFkIGFuZCBjb252ZXJ0IGNoYXJhY3RlcnMKK2Zyb20gdGhlIGlucHV0IGZpZWxkIGludG8gc3BlY2lmaWMgdHlwZXMgb2YgdmFsdWVzLCBhbmQgc3RvcmUgdGhlbgoraW4gdGhlIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkgdGhlIGFkZHJlc3MgYXJndW1lbnRzLgorCisgICA8cD5UcmFpbGluZyB3aGl0ZXNwYWNlIGlzIGxlZnQgdW5yZWFkIHVubGVzcyBleHBsaWNpdGx5CittYXRjaGVkIGluIHRoZSBmb3JtYXQgc3RyaW5nLgorCisgICA8cD5UaGUgZm9ybWF0IHNwZWNpZmllcnMgbXVzdCBiZWdpbiB3aXRoIGEgcGVyY2VudCBzaWduICg8Y29kZT4lPC9jb2RlPikKK2FuZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAlWypdWzx2YXI+d2lkdGg8L3Zhcj5dWzx2YXI+c2l6ZTwvdmFyPl08dmFyPnR5cGU8L3Zhcj4KKzwvcHJlPgorICAgPHA+RWFjaCBmb3JtYXQgc3BlY2lmaWNhdGlvbiBiZWdpbnMgd2l0aCB0aGUgcGVyY2VudCBjaGFyYWN0ZXIgKDxjb2RlPiU8L2NvZGU+KS4gCitUaGUgb3RoZXIgZmllbGRzIGFyZToKKyAgICAgPGRsPgorPGR0Pjxjb2RlPio8L2NvZGU+PGRkPmFuIG9wdGlvbmFsIG1hcmtlcjsgaWYgcHJlc2VudCwgaXQgc3VwcHJlc3NlcyBpbnRlcnByZXRhdGlvbiBhbmQKK2Fzc2lnbm1lbnQgb2YgdGhpcyBpbnB1dCBmaWVsZC4KKworICAgICA8YnI+PGR0Pjx2YXI+d2lkdGg8L3Zhcj48ZGQ+YW4gb3B0aW9uYWwgbWF4aW11bSBmaWVsZCB3aWR0aDogYSBkZWNpbWFsIGludGVnZXIsCit3aGljaCBjb250cm9scyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0Cit3aWxsIGJlIHJlYWQgYmVmb3JlIGNvbnZlcnRpbmcgdGhlIGN1cnJlbnQgaW5wdXQgZmllbGQuICBJZiB0aGUKK2lucHV0IGZpZWxkIGhhcyBmZXdlciB0aGFuIDx2YXI+d2lkdGg8L3Zhcj4gY2hhcmFjdGVycywgPGNvZGU+c2NhbmY8L2NvZGU+CityZWFkcyBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGZpZWxkLCBhbmQgdGhlbgorcHJvY2VlZHMgd2l0aCB0aGUgbmV4dCBmaWVsZCBhbmQgaXRzIGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorCisgICAgIDxwPklmIGEgd2hpdGVzcGFjZSBvciBhIG5vbi1jb252ZXJ0YWJsZSBjaGFyYWN0ZXIgb2NjdXJzCitiZWZvcmUgPHZhcj53aWR0aDwvdmFyPiBjaGFyYWN0ZXIgYXJlIHJlYWQsIHRoZSBjaGFyYWN0ZXJzIHVwCit0byB0aGF0IGNoYXJhY3RlciBhcmUgcmVhZCwgY29udmVydGVkLCBhbmQgc3RvcmVkLiAKK1RoZW4gPGNvZGU+c2NhbmY8L2NvZGU+IHByb2NlZWRzIHRvIHRoZSBuZXh0IGZvcm1hdCBzcGVjaWZpY2F0aW9uLgorCisgICAgIDxicj48ZHQ+PGNvZGU+c2l6ZTwvY29kZT48ZGQ+PGNvZGU+aDwvY29kZT4sIDxjb2RlPmo8L2NvZGU+LCA8Y29kZT5sPC9jb2RlPiwgPGNvZGU+TDwvY29kZT4sIDxjb2RlPnQ8L2NvZGU+LCBhbmQgPGNvZGU+ejwvY29kZT4gYXJlIG9wdGlvbmFsIHNpemUKK2NoYXJhY3RlcnMgd2hpY2ggb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2F5IHRoYXQgPGNvZGU+c2NhbmY8L2NvZGU+CitpbnRlcnByZXRzIHRoZSBkYXRhIHR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgTW9kaWZpZXIgICBUeXBlKHMpCisgICAgICAgICAgICAgaGggICAgICBkLCBpLCBvLCB1LCB4LCBuICBjb252ZXJ0IGlucHV0IHRvIGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZSBpbiBjaGFyIG9iamVjdAorICAgICAgICAgIAorICAgICAgICAgICAgIGggICAgICAgZCwgaSwgbywgdSwgeCwgbiAgY29udmVydCBpbnB1dCB0byBzaG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGluIHNob3J0IG9iamVjdAorICAgICAgICAgIAorICAgICAgICAgICAgIGggICAgICAgRCwgSSwgTywgVSwgWCAgICAgbm8gZWZmZWN0CisgICAgICAgICAgICAgICAgICAgICBlLCBmLCBjLCBzLCBwCisgICAgICAgICAgCisgICAgICAgICAgICAgaiAgICAgICBkLCBpLCBvLCB1LCB4LCBuICBjb252ZXJ0IGlucHV0IHRvIGludG1heF90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgaW4gaW50bWF4X3Qgb2JqZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgaiAgICAgICBhbGwgb3RoZXJzICAgICAgICBubyBlZmZlY3QKKyAgICAgICAgICAKKyAgICAgICAgICAgICBsICAgICAgIGQsIGksIG8sIHUsIHgsIG4gIGNvbnZlcnQgaW5wdXQgdG8gbG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGluIGxvbmcgb2JqZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgbCAgICAgICBlLCBmLCBnICAgICAgICAgICBjb252ZXJ0IGlucHV0IHRvIGRvdWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgaW4gYSBkb3VibGUgb2JqZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgbCAgICAgICBELCBJLCBPLCBVLCBYICAgICBubyBlZmZlY3QKKyAgICAgICAgICAgICAgICAgICAgIGMsIHMsIHAKKyAgICAgICAgICAKKyAgICAgICAgICAgICBsbCAgICAgIGQsIGksIG8sIHUsIHgsIG4gIGNvbnZlcnQgdG8gbG9uZyBsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgaW4gbG9uZyBsb25nCisgICAgICAgICAgCisgICAgICAgICAgICAgTCAgICAgICBkLCBpLCBvLCB1LCB4LCBuICBjb252ZXJ0IHRvIGxvbmcgbG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGluIGxvbmcgbG9uZworICAgICAgICAgIAorICAgICAgICAgICAgIEwgICAgICAgZSwgZiwgZywgRSwgRyAgICAgY29udmVydCB0byBsb25nIGRvdWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGluIGxvbmcgZG91YmxlCisgICAgICAgICAgCisgICAgICAgICAgICAgTCAgICAgICBhbGwgb3RoZXJzICAgICAgICBubyBlZmZlY3QKKyAgICAgICAgICAKKyAgICAgICAgICAgICB0ICAgICAgIGQsIGksIG8sIHUsIHgsIG4gIGNvbnZlcnQgaW5wdXQgdG8gcHRyZGlmZl90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgaW4gcHRyZGlmZl90IG9iamVjdAorICAgICAgICAgIAorICAgICAgICAgICAgIHQgICAgICAgYWxsIG90aGVycyAgICAgICAgbm8gZWZmZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgeiAgICAgICBkLCBpLCBvLCB1LCB4LCBuICBjb252ZXJ0IGlucHV0IHRvIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGluIHNpemVfdCBvYmplY3QKKyAgICAgICAgICAKKyAgICAgICAgICAgICB6ICAgICAgIGFsbCBvdGhlcnMgICAgICAgIG5vIGVmZmVjdAorICAgICAgICAgIAorPC9wcmU+CisgICAgIDxicj48ZHQ+PHZhcj50eXBlPC92YXI+PGRkPgorQSBjaGFyYWN0ZXIgdG8gc3BlY2lmeSB3aGF0IGtpbmQgb2YgY29udmVyc2lvbgorPGNvZGU+c2NhbmY8L2NvZGU+IHBlcmZvcm1zLiAgSGVyZSBpcyBhIHRhYmxlIG9mIHRoZSBjb252ZXJzaW9uCitjaGFyYWN0ZXJzOgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPiU8L2NvZGU+PGRkPk5vIGNvbnZlcnNpb24gaXMgZG9uZTsgdGhlIHBlcmNlbnQgY2hhcmFjdGVyICg8Y29kZT4lPC9jb2RlPikgaXMgc3RvcmVkLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5jPC9jb2RlPjxkZD5TY2FucyBvbmUgY2hhcmFjdGVyLiAgQ29ycmVzcG9uZGluZyA8dmFyPmFyZzwvdmFyPjogPGNvZGU+KGNoYXIgKmFyZyk8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5zPC9jb2RlPjxkZD5SZWFkcyBhIGNoYXJhY3RlciBzdHJpbmcgaW50byB0aGUgYXJyYXkgc3VwcGxpZWQuIAorQ29ycmVzcG9uZGluZyA8dmFyPmFyZzwvdmFyPjogPGNvZGU+KGNoYXIgYXJnW10pPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WzwvY29kZT48dmFyPnBhdHRlcm48L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5SZWFkcyBhIG5vbi1lbXB0eSBjaGFyYWN0ZXIgc3RyaW5nIGludG8gbWVtb3J5CitzdGFydGluZyBhdCA8dmFyPmFyZzwvdmFyPi4gIFRoaXMgYXJlYSBtdXN0IGJlIGxhcmdlCitlbm91Z2ggdG8gYWNjZXB0IHRoZSBzZXF1ZW5jZSBhbmQgYQordGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIgd2hpY2ggd2lsbCBiZSBhZGRlZAorYXV0b21hdGljYWxseS4gICg8dmFyPnBhdHRlcm48L3Zhcj4gaXMgZGlzY3Vzc2VkIGluIHRoZSBwYXJhZ3JhcGggZm9sbG93aW5nCit0aGlzIHRhYmxlKS4gQ29ycmVzcG9uZGluZyA8dmFyPmFyZzwvdmFyPjogPGNvZGU+KGNoYXIgKmFyZyk8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5kPC9jb2RlPjxkZD5SZWFkcyBhIGRlY2ltYWwgaW50ZWdlciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIDx2YXI+YXJnPC92YXI+OiA8Y29kZT4oaW50ICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+RDwvY29kZT48ZGQ+UmVhZHMgYSBkZWNpbWFsIGludGVnZXIgaW50byB0aGUgY29ycmVzcG9uZGluZworPHZhcj5hcmc8L3Zhcj46IDxjb2RlPihsb25nICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bzwvY29kZT48ZGQ+UmVhZHMgYW4gb2N0YWwgaW50ZWdlciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIDx2YXI+YXJnPC92YXI+OiA8Y29kZT4oaW50ICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+TzwvY29kZT48ZGQ+UmVhZHMgYW4gb2N0YWwgaW50ZWdlciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIDx2YXI+YXJnPC92YXI+OiA8Y29kZT4obG9uZyAqYXJnKTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnU8L2NvZGU+PGRkPlJlYWRzIGFuIHVuc2lnbmVkIGRlY2ltYWwgaW50ZWdlciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nCis8dmFyPmFyZzwvdmFyPjogPGNvZGU+KHVuc2lnbmVkIGludCAqYXJnKTwvY29kZT4uIAorPGJyPjxkdD48Y29kZT5VPC9jb2RlPjxkZD5SZWFkcyBhbiB1bnNpZ25lZCBkZWNpbWFsIGludGVnZXIgaW50byB0aGUgY29ycmVzcG9uZGluZyA8dmFyPmFyZzwvdmFyPjoKKzxjb2RlPih1bnNpZ25lZCBsb25nICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+eCxYPC9jb2RlPjxkZD5SZWFkIGEgaGV4YWRlY2ltYWwgaW50ZWdlciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIDx2YXI+YXJnPC92YXI+OgorPGNvZGU+KGludCAqYXJnKTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmUsIGYsIGc8L2NvZGU+PGRkPlJlYWQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgaW50byB0aGUgY29ycmVzcG9uZGluZyA8dmFyPmFyZzwvdmFyPjoKKzxjb2RlPihmbG9hdCAqYXJnKTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkUsIEYsIEc8L2NvZGU+PGRkPlJlYWQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgaW50byB0aGUgY29ycmVzcG9uZGluZyA8dmFyPmFyZzwvdmFyPjoKKzxjb2RlPihkb3VibGUgKmFyZyk8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5pPC9jb2RlPjxkZD5SZWFkcyBhIGRlY2ltYWwsIG9jdGFsIG9yIGhleGFkZWNpbWFsIGludGVnZXIgaW50byB0aGUKK2NvcnJlc3BvbmRpbmcgPHZhcj5hcmc8L3Zhcj46IDxjb2RlPihpbnQgKmFyZyk8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5JPC9jb2RlPjxkZD5SZWFkcyBhIGRlY2ltYWwsIG9jdGFsIG9yIGhleGFkZWNpbWFsIGludGVnZXIgaW50byB0aGUKK2NvcnJlc3BvbmRpbmcgPHZhcj5hcmc8L3Zhcj46IDxjb2RlPihsb25nICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bjwvY29kZT48ZGQ+U3RvcmVzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGluIHRoZSBjb3JyZXNwb25kaW5nCis8dmFyPmFyZzwvdmFyPjogPGNvZGU+KGludCAqYXJnKTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnA8L2NvZGU+PGRkPlN0b3JlcyBhIHNjYW5uZWQgcG9pbnRlci4gIEFOU0kgQyBsZWF2ZXMgdGhlIGRldGFpbHMKK3RvIGVhY2ggaW1wbGVtZW50YXRpb247IHRoaXMgaW1wbGVtZW50YXRpb24gdHJlYXRzCis8Y29kZT4lcDwvY29kZT4gZXhhY3RseSB0aGUgc2FtZSBhcyA8Y29kZT4lVTwvY29kZT4uICBDb3JyZXNwb25kaW5nCis8dmFyPmFyZzwvdmFyPjogPGNvZGU+KHZvaWQgKiphcmcpPC9jb2RlPi4gCis8L2RsPgorCisgICAgIDxwPkEgPHZhcj5wYXR0ZXJuPC92YXI+IG9mIGNoYXJhY3RlcnMgc3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgY2FuIGJlIHVzZWQKK2luc3RlYWQgb2YgdGhlIDxjb2RlPnM8L2NvZGU+IHR5cGUgY2hhcmFjdGVyLiAgPHZhcj5wYXR0ZXJuPC92YXI+IGlzIGEgc2V0IG9mCitjaGFyYWN0ZXJzIHdoaWNoIGRlZmluZSBhIHNlYXJjaCBzZXQgb2YgcG9zc2libGUgY2hhcmFjdGVycyBtYWtpbmcgdXAKK3RoZSA8Y29kZT5zY2FuZjwvY29kZT4gaW5wdXQgZmllbGQuICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBicmFja2V0cyBpcyBhCitjYXJldCAoPGNvZGU+XjwvY29kZT4pLCB0aGUgc2VhcmNoIHNldCBpcyBpbnZlcnRlZCB0byBpbmNsdWRlIGFsbCBBU0NJSSBjaGFyYWN0ZXJzCitleGNlcHQgdGhvc2UgYmV0d2VlbiB0aGUgYnJhY2tldHMuICBUaGVyZSBpcyBhbHNvIGEgcmFuZ2UgZmFjaWxpdHkKK3doaWNoIHlvdSBjYW4gdXNlIGFzIGEgc2hvcnRjdXQuIDxjb2RlPiVbMC05XSA8L2NvZGU+IG1hdGNoZXMgYWxsIGRlY2ltYWwgZGlnaXRzLiAKK1RoZSBoeXBoZW4gbXVzdCBub3QgYmUgdGhlIGZpcnN0IG9yIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzZXQuIAorVGhlIGNoYXJhY3RlciBwcmlvciB0byB0aGUgaHlwaGVuIG11c3QgYmUgbGV4aWNhbGx5IGxlc3MgdGhhbiB0aGUKK2NoYXJhY3RlciBhZnRlciBpdC4KKworICAgICA8cD5IZXJlIGFyZSBzb21lIDx2YXI+cGF0dGVybjwvdmFyPiBleGFtcGxlczoKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JVthYmNkXTwvY29kZT48ZGQ+bWF0Y2hlcyBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSA8Y29kZT5hPC9jb2RlPiwgPGNvZGU+YjwvY29kZT4sIDxjb2RlPmM8L2NvZGU+LCBhbmQgPGNvZGU+ZDwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPiVbXmFiY2RdPC9jb2RlPjxkZD5tYXRjaGVzIHN0cmluZ3MgY29udGFpbmluZyBhbnkgY2hhcmFjdGVycyBleGNlcHQgPGNvZGU+YTwvY29kZT4sIDxjb2RlPmI8L2NvZGU+LAorPGNvZGU+YzwvY29kZT4sIG9yIDxjb2RlPmQ8L2NvZGU+CisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPiVbQS1EVy1aXTwvY29kZT48ZGQ+bWF0Y2hlcyBzdHJpbmdzIGNvbnRhaW5pbmcgPGNvZGU+QTwvY29kZT4sIDxjb2RlPkI8L2NvZGU+LCA8Y29kZT5DPC9jb2RlPiwgPGNvZGU+RDwvY29kZT4sIDxjb2RlPlc8L2NvZGU+LAorPGNvZGU+WDwvY29kZT4sIDxjb2RlPlk8L2NvZGU+LCA8Y29kZT5aPC9jb2RlPgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4lW3otYV08L2NvZGU+PGRkPm1hdGNoZXMgdGhlIGNoYXJhY3RlcnMgIDxjb2RlPno8L2NvZGU+LCA8Y29kZT4tPC9jb2RlPiwgYW5kIDxjb2RlPmE8L2NvZGU+Cis8L2RsPgorCisgICAgIDxwPkZsb2F0aW5nIHBvaW50IG51bWJlcnMgKGZvciBmaWVsZCB0eXBlcyA8Y29kZT5lPC9jb2RlPiwgPGNvZGU+ZjwvY29kZT4sIDxjb2RlPmc8L2NvZGU+LCA8Y29kZT5FPC9jb2RlPiwKKzxjb2RlPkY8L2NvZGU+LCA8Y29kZT5HPC9jb2RlPikgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBmb3JtOgorCisgICAgIDxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgICAgIAkJWysvLV0gZGRkZGRbLl1kZGQgW0V8ZVsrfC1dZGRkXQorPC9wcmU+CisgICAgIDxwPndoZXJlIG9iamVjdHMgaW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzIGFyZSBvcHRpb25hbCwgYW5kIDxjb2RlPmRkZDwvY29kZT4KK3JlcHJlc2VudHMgZGVjaW1hbCwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIGRpZ2l0cy4gCis8L2RsPgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zY2FuZjwvY29kZT4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGlucHV0IGZpZWxkcyBzdWNjZXNzZnVsbHkKK3NjYW5uZWQsIGNvbnZlcnRlZCBhbmQgc3RvcmVkOyB0aGUgcmV0dXJuIHZhbHVlIGRvZXMKK25vdCBpbmNsdWRlIHNjYW5uZWQgZmllbGRzIHdoaWNoIHdlcmUgbm90IHN0b3JlZC4KKworICAgPHA+SWYgPGNvZGU+c2NhbmY8L2NvZGU+IGF0dGVtcHRzIHRvIHJlYWQgYXQgZW5kLW9mLWZpbGUsIHRoZSByZXR1cm4KK3ZhbHVlIGlzIDxjb2RlPkVPRjwvY29kZT4uCisKKyAgIDxwPklmIG5vIGZpZWxkcyB3ZXJlIHN0b3JlZCwgdGhlIHJldHVybiB2YWx1ZSBpcyA8Y29kZT4wPC9jb2RlPi4KKworICAgPHA+PGNvZGU+c2NhbmY8L2NvZGU+IG1pZ2h0IHN0b3Agc2Nhbm5pbmcgYSBwYXJ0aWN1bGFyIGZpZWxkIGJlZm9yZQorcmVhY2hpbmcgdGhlIG5vcm1hbCBmaWVsZCBlbmQgY2hhcmFjdGVyLCBvciBtYXkKK3Rlcm1pbmF0ZSBlbnRpcmVseS4KKworICAgPHA+PGNvZGU+c2NhbmY8L2NvZGU+IHN0b3BzIHNjYW5uaW5nIGFuZCBzdG9yaW5nIHRoZSBjdXJyZW50IGZpZWxkCithbmQgbW92ZXMgdG8gdGhlIG5leHQgaW5wdXQgZmllbGQgKGlmIGFueSkKK2luIGFueSBvZiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6CisKKyAgICAgPHVsPgorPGxpPlRoZSBhc3NpZ25tZW50IHN1cHByZXNzaW5nIGNoYXJhY3RlciAoPGNvZGU+KjwvY29kZT4pIGFwcGVhcnMKK2FmdGVyIHRoZSA8Y29kZT4lPC9jb2RlPiBpbiB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb247IHRoZSBjdXJyZW50CitpbnB1dCBmaWVsZCBpcyBzY2FubmVkIGJ1dCBub3Qgc3RvcmVkLgorCisgICAgIDxsaT48dmFyPndpZHRoPC92YXI+IGNoYXJhY3RlcnMgaGF2ZSBiZWVuIHJlYWQgKDx2YXI+d2lkdGg8L3Zhcj4gaXMgYQord2lkdGggc3BlY2lmaWNhdGlvbiwgYSBwb3NpdGl2ZSBkZWNpbWFsIGludGVnZXIpLgorCisgICAgIDxsaT5UaGUgbmV4dCBjaGFyYWN0ZXIgcmVhZCBjYW5ub3QgYmUgY29udmVydGVkCit1bmRlciB0aGUgdGhlIGN1cnJlbnQgZm9ybWF0IChmb3IgZXhhbXBsZSwKK2lmIGEgPGNvZGU+WjwvY29kZT4gaXMgcmVhZCB3aGVuIHRoZSBmb3JtYXQgaXMgZGVjaW1hbCkuCisKKyAgICAgPGxpPlRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgZmllbGQgZG9lcyBub3QgYXBwZWFyCitpbiB0aGUgc2VhcmNoIHNldCAob3IgZG9lcyBhcHBlYXIgaW4gdGhlIGludmVydGVkIHNlYXJjaCBzZXQpLiAKKzwvdWw+CisKKyAgIDxwPldoZW4gPGNvZGU+c2NhbmY8L2NvZGU+IHN0b3BzIHNjYW5uaW5nIHRoZSBjdXJyZW50IGlucHV0IGZpZWxkIGZvciBvbmUgb2YKK3RoZXNlIHJlYXNvbnMsIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBjb25zaWRlcmVkIHVucmVhZCBhbmQKK3VzZWQgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZm9sbG93aW5nIGlucHV0IGZpZWxkLCBvciB0aGUKK2ZpcnN0IGNoYXJhY3RlciBpbiBhIHN1YnNlcXVlbnQgcmVhZCBvcGVyYXRpb24gb24gdGhlIGlucHV0LgorCisgICA8cD48Y29kZT5zY2FuZjwvY29kZT4gd2lsbCB0ZXJtaW5hdGUgdW5kZXIgdGhlIGZvbGxvd2luZyBjaXJjdW1zdGFuY2VzOgorCisgICAgIDx1bD4KKzxsaT5UaGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IGZpZWxkIGNvbmZsaWN0cword2l0aCBhIGNvcnJlc3BvbmRpbmcgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIHRoZQorZm9ybWF0IHN0cmluZy4KKworICAgICA8bGk+VGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBmaWVsZCBpcyA8Y29kZT5FT0Y8L2NvZGU+LgorCisgICAgIDxsaT5UaGUgZm9ybWF0IHN0cmluZyBoYXMgYmVlbiBleGhhdXN0ZWQuIAorPC91bD4KKworICAgPHA+V2hlbiB0aGUgZm9ybWF0IHN0cmluZyBjb250YWlucyBhIGNoYXJhY3RlciBzZXF1ZW5jZSB0aGF0IGlzCitub3QgcGFydCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uLCB0aGUgc2FtZSBjaGFyYWN0ZXIKK3NlcXVlbmNlIG11c3QgYXBwZWFyIGluIHRoZSBpbnB1dDsgPGNvZGU+c2NhbmY8L2NvZGU+IHdpbGwKK3NjYW4gYnV0IG5vdCBzdG9yZSB0aGUgbWF0Y2hlZCBjaGFyYWN0ZXJzLiAgSWYgYQorY29uZmxpY3Qgb2NjdXJzLCB0aGUgZmlyc3QgY29uZmxpY3RpbmcgY2hhcmFjdGVyIHJlbWFpbnMgaW4gdGhlIGlucHV0CithcyBpZiBpdCBoYWQgbmV2ZXIgYmVlbiByZWFkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c2NhbmY8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cGNweS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RwY3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4ZGYwZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cGNweS5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cGNweSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icmluZGV4Lmh0bWwjcmluZGV4IiB0aXRsZT0icmluZGV4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RwbmNweS5odG1sI3N0cG5jcHkiIHRpdGxlPSJzdHBuY3B5Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHBjcHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RwbmNweS5odG1sI3N0cG5jcHkiPnN0cG5jcHk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJyaW5kZXguaHRtbCNyaW5kZXgiPnJpbmRleDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4xNCA8Y29kZT5zdHBjcHk8L2NvZGU+Jm1kYXNoO2NvcHkgc3RyaW5nIHJldHVybmluZyBhIHBvaW50ZXIgdG8gaXRzIGVuZDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cGNweS0zODIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgY2hhciAqc3RwY3B5KGNoYXIgKnJlc3RyaWN0IDx2YXI+ZHN0PC92YXI+LCBjb25zdCBjaGFyICpyZXN0cmljdCA8dmFyPnNyYzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RwY3B5PC9jb2RlPiBjb3BpZXMgdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+c3JjPC92YXI+CisoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlcikgdG8gdGhlIGFycmF5Citwb2ludGVkIHRvIGJ5IDx2YXI+ZHN0PC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIHN0cmluZywKK3RodXMgcG9pbnRpbmcgdG8gdGhlIHRyYWlsaW5nICdcMCcuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHBjcHk8L2NvZGU+IGlzIGEgR05VIGV4dGVuc2lvbiwgY2FuZGlkYXRlIGZvciBpbmNsdXNpb24gaW50byBQT1NJWC9TVVN2NC4KKworICAgPHA+PGNvZGU+c3RwY3B5PC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cG5jcHkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cG5jcHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTdkYWJhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RwbmNweS5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cG5jcHkgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cGNweS5odG1sI3N0cGNweSIgdGl0bGU9InN0cGNweSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cmNhc2VjbXAuaHRtbCNzdHJjYXNlY21wIiB0aXRsZT0ic3RyY2FzZWNtcCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RwbmNweSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJjYXNlY21wLmh0bWwjc3RyY2FzZWNtcCI+c3RyY2FzZWNtcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cGNweS5odG1sI3N0cGNweSI+c3RwY3B5PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjE1IDxjb2RlPnN0cG5jcHk8L2NvZGU+Jm1kYXNoO2NvdW50ZWQgY29weSBzdHJpbmcgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBpdHMgZW5kPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RwbmNweS0zODMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgY2hhciAqc3RwbmNweShjaGFyICpyZXN0cmljdCA8dmFyPmRzdDwvdmFyPiwgY29uc3QgY2hhciAqcmVzdHJpY3QgPHZhcj5zcmM8L3Zhcj4sCisgICAgICAgICBzaXplX3QgPHZhcj5sZW5ndGg8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cG5jcHk8L2NvZGU+IGNvcGllcyBub3QgbW9yZSB0aGFuIDx2YXI+bGVuZ3RoPC92YXI+IGNoYXJhY3RlcnMgZnJvbSB0aGUKK3RoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnNyYzwvdmFyPiAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworbnVsbCBjaGFyYWN0ZXIpIHRvIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDx2YXI+ZHN0PC92YXI+LiAgSWYgdGhlCitzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnNyYzwvdmFyPiBpcyBzaG9ydGVyIHRoYW4gPHZhcj5sZW5ndGg8L3Zhcj4KK2NoYXJhY3RlcnMsIG51bGwgY2hhcmFjdGVycyBhcmUgYXBwZW5kZWQgdG8gdGhlIGRlc3RpbmF0aW9uCithcnJheSB1bnRpbCBhIHRvdGFsIG9mIDx2YXI+bGVuZ3RoPC92YXI+IGNoYXJhY3RlcnMgaGF2ZSBiZWVuCit3cml0dGVuLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIHN0cmluZywKK3RodXMgcG9pbnRpbmcgdG8gdGhlIHRyYWlsaW5nICdcMCcsIG9yLCBpZiB0aGUgZGVzdGluYXRpb24gc3RyaW5nIGlzCitub3QgbnVsbC10ZXJtaW5hdGVkLCBwb2ludGluZyB0byBkc3QgKyBuLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RwbmNweTwvY29kZT4gaXMgYSBHTlUgZXh0ZW5zaW9uLCBjYW5kaWRhdGUgZm9yIGluY2x1c2lvbiBpbnRvIFBPU0lYL1NVU3Y0LgorCisgICA8cD48Y29kZT5zdHBuY3B5PC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNhc2VjbXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNhc2VjbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FiMDdhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RyY2FzZWNtcC5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cmNhc2VjbXAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cG5jcHkuaHRtbCNzdHBuY3B5IiB0aXRsZT0ic3RwbmNweSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cmNhc2VzdHIuaHRtbCNzdHJjYXNlc3RyIiB0aXRsZT0ic3RyY2FzZXN0ciI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RyY2FzZWNtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJjYXNlc3RyLmh0bWwjc3RyY2FzZXN0ciI+c3RyY2FzZXN0cjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cG5jcHkuaHRtbCNzdHBuY3B5Ij5zdHBuY3B5PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjE2IDxjb2RlPnN0cmNhc2VjbXA8L2NvZGU+Jm1kYXNoO2Nhc2UtaW5zZW5zaXRpdmUgY2hhcmFjdGVyIHN0cmluZyBjb21wYXJlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RyY2FzZWNtcC0zODQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmdzLmgmZ3Q7CisgICAgIGludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKjx2YXI+YTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5iPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJjYXNlY21wPC9jb2RlPiBjb21wYXJlcyB0aGUgc3RyaW5nIGF0IDx2YXI+YTwvdmFyPiB0bwordGhlIHN0cmluZyBhdCA8dmFyPmI8L3Zhcj4gaW4gYSBjYXNlLWluc2Vuc2l0aXZlIG1hbm5lci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorCisgICA8cD5JZiA8Y29kZT4qPC9jb2RlPjx2YXI+YTwvdmFyPiBzb3J0cyBsZXhpY29ncmFwaGljYWxseSBhZnRlciA8Y29kZT4qPC9jb2RlPjx2YXI+YjwvdmFyPiAoYWZ0ZXIKK2JvdGggYXJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UpLCA8Y29kZT5zdHJjYXNlY21wPC9jb2RlPiByZXR1cm5zIGEKK251bWJlciBncmVhdGVyIHRoYW4gemVyby4gIElmIHRoZSB0d28gc3RyaW5ncyBtYXRjaCwKKzxjb2RlPnN0cmNhc2VjbXA8L2NvZGU+IHJldHVybnMgemVyby4gIElmIDxjb2RlPio8L2NvZGU+PHZhcj5hPC92YXI+IHNvcnRzCitsZXhpY29ncmFwaGljYWxseSBiZWZvcmUgPGNvZGU+KjwvY29kZT48dmFyPmI8L3Zhcj4sIDxjb2RlPnN0cmNhc2VjbXA8L2NvZGU+IHJldHVybnMgYQorbnVtYmVyIGxlc3MgdGhhbiB6ZXJvLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyY2FzZWNtcDwvY29kZT4gaXMgaW4gdGhlIEJlcmtlbGV5IFNvZnR3YXJlIERpc3RyaWJ1dGlvbi4KKworICAgPHA+PGNvZGU+c3RyY2FzZWNtcDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4gSXQgdXNlcwordG9sb3dlcigpIGZyb20gZWxzZXdoZXJlIGluIHRoaXMgbGlicmFyeS4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjYXNlc3RyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjYXNlc3RyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4NzFkZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNhc2VzdHIuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJjYXNlc3RyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJjYXNlY21wLmh0bWwjc3RyY2FzZWNtcCIgdGl0bGU9InN0cmNhc2VjbXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJjYXQuaHRtbCNzdHJjYXQiIHRpdGxlPSJzdHJjYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cmNhc2VzdHIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RyY2F0Lmh0bWwjc3RyY2F0Ij5zdHJjYXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJjYXNlY21wLmh0bWwjc3RyY2FzZWNtcCI+c3RyY2FzZWNtcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4xNyA8Y29kZT5zdHJjYXNlc3RyPC9jb2RlPiZtZGFzaDtjYXNlLWluc2Vuc2l0aXZlIGNoYXJhY3RlciBzdHJpbmcgc2VhcmNoPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RyY2FzZXN0ci0zODUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgY2hhciAqc3RyY2FzZXN0cihjb25zdCBjaGFyICo8dmFyPnM8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+ZmluZDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyY2FzZXN0cjwvY29kZT4gc2VhcmNocyB0aGUgc3RyaW5nIDx2YXI+czwvdmFyPiBmb3IKK3RoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZXF1ZW5jZSA8dmFyPmZpbmQ8L3Zhcj4uICA8Y29kZT5zdHJjYXNlc3RyPC9jb2RlPgoraXMgaWRlbnRpY2FsIHRvIDxjb2RlPnN0cnN0cjwvY29kZT4gZXhjZXB0IHRoZSBzZWFyY2ggaXMKK2Nhc2UtaW5zZW5zaXRpdmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKworICAgPHA+QSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjYXNlLWluc2Vuc2l0aXZlIG9jY3VycmVuY2Ugb2YgdGhlIHNlcXVlbmNlCis8dmFyPmZpbmQ8L3Zhcj4gb3IgPGNvZGU+TlVMTDwvY29kZT4gaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyY2FzZXN0cjwvY29kZT4gaXMgaW4gdGhlIEJlcmtlbGV5IFNvZnR3YXJlIERpc3RyaWJ1dGlvbi4KKworICAgPHA+PGNvZGU+c3RyY2FzZXN0cjwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4gSXQgdXNlcwordG9sb3dlcigpIGZyb20gZWxzZXdoZXJlIGluIHRoaXMgbGlicmFyeS4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjYXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNhdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOTAzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjYXQuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJjYXQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cmNhc2VzdHIuaHRtbCNzdHJjYXNlc3RyIiB0aXRsZT0ic3RyY2FzZXN0ciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cmNoci5odG1sI3N0cmNociIgdGl0bGU9InN0cmNociI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RyY2F0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cmNoci5odG1sI3N0cmNociI+c3RyY2hyPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3RyY2FzZXN0ci5odG1sI3N0cmNhc2VzdHIiPnN0cmNhc2VzdHI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMTggPGNvZGU+c3RyY2F0PC9jb2RlPiZtZGFzaDtjb25jYXRlbmF0ZSBzdHJpbmdzPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RyY2F0LTM4NiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICBjaGFyICpzdHJjYXQoY2hhciAqcmVzdHJpY3QgPHZhcj5kc3Q8L3Zhcj4sIGNvbnN0IGNoYXIgKnJlc3RyaWN0IDx2YXI+c3JjPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJjYXQ8L2NvZGU+IGFwcGVuZHMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnNyYzwvdmFyPgorKGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIpIHRvIHRoZSBlbmQgb2YgdGhlCitzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPmRzdDwvdmFyPi4gIFRoZSBpbml0aWFsIGNoYXJhY3RlciBvZgorPHZhcj5zcmM8L3Zhcj4gb3ZlcndyaXRlcyB0aGUgbnVsbCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiA8dmFyPmRzdDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbml0aWFsIHZhbHVlIG9mIDx2YXI+ZHN0PC92YXI+CisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJjYXQ8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+PGNvZGU+c3RyY2F0PC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNoci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RyY2hyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5M2ZiMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNoci5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cmNociAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3RyY2F0Lmh0bWwjc3RyY2F0IiB0aXRsZT0ic3RyY2F0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RyY21wLmh0bWwjc3RyY21wIiB0aXRsZT0ic3RyY21wIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJjaHIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RyY21wLmh0bWwjc3RyY21wIj5zdHJjbXA8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJjYXQuaHRtbCNzdHJjYXQiPnN0cmNhdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4xOSA8Y29kZT5zdHJjaHI8L2NvZGU+Jm1kYXNoO3NlYXJjaCBmb3IgY2hhcmFjdGVyIGluIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cmNoci0zODciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgY2hhciAqIHN0cmNocihjb25zdCBjaGFyICo8dmFyPnN0cmluZzwvdmFyPiwgaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIDx2YXI+YzwvdmFyPiAoY29udmVydGVkIHRvCithIGNoYXIpIGluIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnN0cmluZzwvdmFyPiAoaW5jbHVkaW5nIHRoZQordGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIpLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbG9jYXRlZCBjaGFyYWN0ZXIsIG9yIGEgbnVsbCBwb2ludGVyCitpZiA8dmFyPmM8L3Zhcj4gZG9lcyBub3Qgb2NjdXIgaW4gPHZhcj5zdHJpbmc8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJjaHI8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+PGNvZGU+c3RyY2hyPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNtcC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RyY21wLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllYTJlMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNtcC5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cmNtcCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3RyY2hyLmh0bWwjc3RyY2hyIiB0aXRsZT0ic3RyY2hyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RyY29sbC5odG1sI3N0cmNvbGwiIHRpdGxlPSJzdHJjb2xsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJjbXAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RyY29sbC5odG1sI3N0cmNvbGwiPnN0cmNvbGw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJjaHIuaHRtbCNzdHJjaHIiPnN0cmNocjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4yMCA8Y29kZT5zdHJjbXA8L2NvZGU+Jm1kYXNoO2NoYXJhY3RlciBzdHJpbmcgY29tcGFyZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cmNtcC0zODgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgaW50IHN0cmNtcChjb25zdCBjaGFyICo8dmFyPmE8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+YjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyY21wPC9jb2RlPiBjb21wYXJlcyB0aGUgc3RyaW5nIGF0IDx2YXI+YTwvdmFyPiB0bwordGhlIHN0cmluZyBhdCA8dmFyPmI8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK0lmIDxjb2RlPio8L2NvZGU+PHZhcj5hPC92YXI+IHNvcnRzIGxleGljb2dyYXBoaWNhbGx5IGFmdGVyIDxjb2RlPio8L2NvZGU+PHZhcj5iPC92YXI+LAorPGNvZGU+c3RyY21wPC9jb2RlPiByZXR1cm5zIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiAgSWYgdGhlIHR3bworc3RyaW5ncyBtYXRjaCwgPGNvZGU+c3RyY21wPC9jb2RlPiByZXR1cm5zIHplcm8uICBJZiA8Y29kZT4qPC9jb2RlPjx2YXI+YTwvdmFyPgorc29ydHMgbGV4aWNvZ3JhcGhpY2FsbHkgYmVmb3JlIDxjb2RlPio8L2NvZGU+PHZhcj5iPC92YXI+LCA8Y29kZT5zdHJjbXA8L2NvZGU+IHJldHVybnMgYQorbnVtYmVyIGxlc3MgdGhhbiB6ZXJvLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyY21wPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPnN0cmNtcDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjb2xsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmYjg2OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNvbGwuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJjb2xsIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJjbXAuaHRtbCNzdHJjbXAiIHRpdGxlPSJzdHJjbXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJjcHkuaHRtbCNzdHJjcHkiIHRpdGxlPSJzdHJjcHkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cmNvbGwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RyY3B5Lmh0bWwjc3RyY3B5Ij5zdHJjcHk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJjbXAuaHRtbCNzdHJjbXAiPnN0cmNtcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4yMSA8Y29kZT5zdHJjb2xsPC9jb2RlPiZtZGFzaDtsb2NhbGUtc3BlY2lmaWMgY2hhcmFjdGVyIHN0cmluZyBjb21wYXJlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RyY29sbC0zODkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgaW50IHN0cmNvbGwoY29uc3QgY2hhciAqPHZhcj5zdHJhPC92YXI+LCBjb25zdCBjaGFyICogPHZhcj5zdHJiPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJjb2xsPC9jb2RlPiBjb21wYXJlcyB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgPHZhcj5zdHJhPC92YXI+IHRvCit0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgPHZhcj5zdHJiPC92YXI+LCB1c2luZyBhbiBpbnRlcnByZXRhdGlvbgorYXBwcm9wcmlhdGUgdG8gdGhlIGN1cnJlbnQgPGNvZGU+TENfQ09MTEFURTwvY29kZT4gc3RhdGUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK0lmIHRoZSBmaXJzdCBzdHJpbmcgaXMgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQgc3RyaW5nLAorPGNvZGU+c3RyY29sbDwvY29kZT4gcmV0dXJucyBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4gIElmIHRoZSB0d28KK3N0cmluZ3MgYXJlIGVxdWl2YWxlbnQsIDxjb2RlPnN0cmNvbGw8L2NvZGU+IHJldHVybnMgemVyby4gIElmIHRoZSBmaXJzdAorc3RyaW5nIGlzIGxlc3MgdGhhbiB0aGUgc2Vjb25kIHN0cmluZywgPGNvZGU+c3RyY29sbDwvY29kZT4gcmV0dXJucyBhCitudW1iZXIgbGVzcyB0aGFuIHplcm8uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJjb2xsPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPnN0cmNvbGw8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RyY3B5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjcHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzgwYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RyY3B5Lmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3RyY3B5IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJjb2xsLmh0bWwjc3RyY29sbCIgdGl0bGU9InN0cmNvbGwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJjc3BuLmh0bWwjc3RyY3NwbiIgdGl0bGU9InN0cmNzcG4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cmNweSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJjc3BuLmh0bWwjc3RyY3NwbiI+c3RyY3NwbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cmNvbGwuaHRtbCNzdHJjb2xsIj5zdHJjb2xsPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjIyIDxjb2RlPnN0cmNweTwvY29kZT4mbWRhc2g7Y29weSBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJjcHktMzkwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIGNoYXIgKnN0cmNweShjaGFyICo8dmFyPmRzdDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5zcmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cmNweTwvY29kZT4gY29waWVzIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnNyYzwvdmFyPgorKGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIpIHRvIHRoZSBhcnJheQorcG9pbnRlZCB0byBieSA8dmFyPmRzdDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbml0aWFsIHZhbHVlIG9mIDx2YXI+ZHN0PC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyY3B5PC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPnN0cmNweTwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjc3BuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJjc3BuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkZGFkNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmNzcG4uaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJjc3BuIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJjcHkuaHRtbCNzdHJjcHkiIHRpdGxlPSJzdHJjcHkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJlcnJvci5odG1sI3N0cmVycm9yIiB0aXRsZT0ic3RyZXJyb3IiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cmNzcG4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RyZXJyb3IuaHRtbCNzdHJlcnJvciI+c3RyZXJyb3I8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJjcHkuaHRtbCNzdHJjcHkiPnN0cmNweTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4yMyA8Y29kZT5zdHJjc3BuPC9jb2RlPiZtZGFzaDtjb3VudCBjaGFyYWN0ZXJzIG5vdCBpbiBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJjc3BuLTM5MSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqPHZhcj5zMTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5zMjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHBhcnQgb2YKK3RoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnMxPC92YXI+IHdoaWNoIGNvbnNpc3RzIGVudGlyZWx5IG9mCitjaGFyYWN0ZXJzIDx2YXI+Tk9UPC92YXI+IGZyb20gdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czI8L3Zhcj4KKyhleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyKS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyY3NwbjwvY29kZT4gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJzdHJpbmcgZm91bmQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJjc3BuPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPnN0cmNzcG48L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RyZXJyb3IuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmVycm9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3NjA4NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmVycm9yLmh0bWwKQEAgLTAsMCArMSwyODUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cmVycm9yIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJjc3BuLmh0bWwjc3RyY3NwbiIgdGl0bGU9InN0cmNzcG4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJlcnJvcl8wMDVmci5odG1sI3N0cmVycm9yXzAwNWZyIiB0aXRsZT0ic3RyZXJyb3JfciI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RyZXJyb3IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RyZXJyb3JfMDA1ZnIuaHRtbCNzdHJlcnJvcl8wMDVmciI+c3RyZXJyb3JfcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cmNzcG4uaHRtbCNzdHJjc3BuIj5zdHJjc3BuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjI0IDxjb2RlPnN0cmVycm9yPC9jb2RlPiZtZGFzaDtjb252ZXJ0IGVycm9yIG51bWJlciB0byBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJlcnJvci0zOTIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgY2hhciAqc3RyZXJyb3IoaW50IDx2YXI+ZXJybnVtPC92YXI+KTsKKyAgICAgY2hhciAqX3N0cmVycm9yX3Ioc3RydWN0IF9yZWVudCA8dmFyPnB0cjwvdmFyPiwgaW50IDx2YXI+ZXJybnVtPC92YXI+LAorICAgICAgICAgaW50IDx2YXI+aW50ZXJuYWw8L3Zhcj4sIGludCAqPHZhcj5lcnJvcjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyZXJyb3I8L2NvZGU+IGNvbnZlcnRzIHRoZSBlcnJvciBudW1iZXIgPHZhcj5lcnJudW08L3Zhcj4gaW50byBhCitzdHJpbmcuICBUaGUgdmFsdWUgb2YgPHZhcj5lcnJudW08L3Zhcj4gaXMgdXN1YWxseSBhIGNvcHkgb2YgPGNvZGU+ZXJybm88L2NvZGU+LiAKK0lmIDxjb2RlPmVycm51bTwvY29kZT4gaXMgbm90IGEga25vd24gZXJyb3IgbnVtYmVyLCB0aGUgcmVzdWx0IHBvaW50cyB0byBhbgorZW1wdHkgc3RyaW5nLgorCisgICA8cD5UaGlzIGltcGxlbWVudGF0aW9uIG9mIDxjb2RlPnN0cmVycm9yPC9jb2RlPiBwcmludHMgb3V0IHRoZSBmb2xsb3dpbmcgc3RyaW5ncworZm9yIGVhY2ggb2YgdGhlIHZhbHVlcyBkZWZpbmVkIGluIGA8Y29kZT5lcnJuby5oPC9jb2RlPic6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPjA8L2NvZGU+PGRkPlN1Y2Nlc3MKKworICAgICA8YnI+PGR0Pjxjb2RlPkUyQklHPC9jb2RlPjxkZD5BcmcgbGlzdCB0b28gbG9uZworCisgICAgIDxicj48ZHQ+PGNvZGU+RUFDQ0VTPC9jb2RlPjxkZD5QZXJtaXNzaW9uIGRlbmllZAorCisgICAgIDxicj48ZHQ+PGNvZGU+RUFERFJJTlVTRTwvY29kZT48ZGQ+QWRkcmVzcyBhbHJlYWR5IGluIHVzZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RUFEVjwvY29kZT48ZGQ+QWR2ZXJ0aXNlIGVycm9yCisKKyAgICAgPGJyPjxkdD48Y29kZT5FQUZOT1NVUFBPUlQ8L2NvZGU+PGRkPkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wgZmFtaWx5CisKKyAgICAgPGJyPjxkdD48Y29kZT5FQUdBSU48L2NvZGU+PGRkPk5vIG1vcmUgcHJvY2Vzc2VzCisKKyAgICAgPGJyPjxkdD48Y29kZT5FQUxSRUFEWTwvY29kZT48ZGQ+U29ja2V0IGFscmVhZHkgY29ubmVjdGVkCisKKyAgICAgPGJyPjxkdD48Y29kZT5FQkFERjwvY29kZT48ZGQ+QmFkIGZpbGUgbnVtYmVyCisKKyAgICAgPGJyPjxkdD48Y29kZT5FQkFETVNHPC9jb2RlPjxkZD5CYWQgbWVzc2FnZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RUJVU1k8L2NvZGU+PGRkPkRldmljZSBvciByZXNvdXJjZSBidXN5CisKKyAgICAgPGJyPjxkdD48Y29kZT5FQ0hJTEQ8L2NvZGU+PGRkPk5vIGNoaWxkcmVuCisKKyAgICAgPGJyPjxkdD48Y29kZT5FQ09NTTwvY29kZT48ZGQ+Q29tbXVuaWNhdGlvbiBlcnJvcgorCisgICAgIDxicj48ZHQ+PGNvZGU+RUNPTk5BQk9SVEVEPC9jb2RlPjxkZD5Tb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydAorCisgICAgIDxicj48ZHQ+PGNvZGU+RUNPTk5SRUZVU0VEPC9jb2RlPjxkZD5Db25uZWN0aW9uIHJlZnVzZWQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVERUFETEs8L2NvZGU+PGRkPkRlYWRsb2NrCisKKyAgICAgPGJyPjxkdD48Y29kZT5FREVTVEFERFJSRVE8L2NvZGU+PGRkPkRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVFWElTVDwvY29kZT48ZGQ+RmlsZSBleGlzdHMKKworICAgICA8YnI+PGR0Pjxjb2RlPkVET008L2NvZGU+PGRkPk1hdGggYXJndW1lbnQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVGQVVMVDwvY29kZT48ZGQ+QmFkIGFkZHJlc3MKKworICAgICA8YnI+PGR0Pjxjb2RlPkVGQklHPC9jb2RlPjxkZD5GaWxlIHRvbyBsYXJnZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RUhPU1RET1dOPC9jb2RlPjxkZD5Ib3N0IGlzIGRvd24KKworICAgICA8YnI+PGR0Pjxjb2RlPkVIT1NUVU5SRUFDSDwvY29kZT48ZGQ+SG9zdCBpcyB1bnJlYWNoYWJsZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RUlEUk08L2NvZGU+PGRkPklkZW50aWZpZXIgcmVtb3ZlZAorCisgICAgIDxicj48ZHQ+PGNvZGU+RUlOUFJPR1JFU1M8L2NvZGU+PGRkPkNvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzcworCisgICAgIDxicj48ZHQ+PGNvZGU+RUlOVFI8L2NvZGU+PGRkPkludGVycnVwdGVkIHN5c3RlbSBjYWxsCisKKyAgICAgPGJyPjxkdD48Y29kZT5FSU5WQUw8L2NvZGU+PGRkPkludmFsaWQgYXJndW1lbnQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVJTzwvY29kZT48ZGQ+SS9PIGVycm9yCisKKyAgICAgPGJyPjxkdD48Y29kZT5FSVNDT05OPC9jb2RlPjxkZD5Tb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVJU0RJUjwvY29kZT48ZGQ+SXMgYSBkaXJlY3RvcnkKKworICAgICA8YnI+PGR0Pjxjb2RlPkVMSUJBQ0M8L2NvZGU+PGRkPkNhbm5vdCBhY2Nlc3MgYSBuZWVkZWQgc2hhcmVkIGxpYnJhcnkKKworICAgICA8YnI+PGR0Pjxjb2RlPkVMSUJCQUQ8L2NvZGU+PGRkPkFjY2Vzc2luZyBhIGNvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeQorCisgICAgIDxicj48ZHQ+PGNvZGU+RUxJQkVYRUM8L2NvZGU+PGRkPkNhbm5vdCBleGVjIGEgc2hhcmVkIGxpYnJhcnkgZGlyZWN0bHkKKworICAgICA8YnI+PGR0Pjxjb2RlPkVMSUJNQVg8L2NvZGU+PGRkPkF0dGVtcHRpbmcgdG8gbGluayBpbiBtb3JlIHNoYXJlZCBsaWJyYXJpZXMgdGhhbiBzeXN0ZW0gbGltaXQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVMSUJTQ048L2NvZGU+PGRkPjxjb2RlPi5saWI8L2NvZGU+IHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTUZJTEU8L2NvZGU+PGRkPlRvbyBtYW55IG9wZW4gZmlsZXMKKworICAgICA8YnI+PGR0Pjxjb2RlPkVNTElOSzwvY29kZT48ZGQ+VG9vIG1hbnkgbGlua3MKKworICAgICA8YnI+PGR0Pjxjb2RlPkVNU0dTSVpFPC9jb2RlPjxkZD5NZXNzYWdlIHRvbyBsb25nCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTVVMVElIT1A8L2NvZGU+PGRkPk11bHRpaG9wIGF0dGVtcHRlZAorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5BTUVUT09MT05HPC9jb2RlPjxkZD5GaWxlIG9yIHBhdGggbmFtZSB0b28gbG9uZworCisgICAgIDxicj48ZHQ+PGNvZGU+RU5FVERPV048L2NvZGU+PGRkPk5ldHdvcmsgaW50ZXJmYWNlIG5vdCBjb25maWd1cmVkCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTkVUVU5SRUFDSDwvY29kZT48ZGQ+TmV0d29yayBpcyB1bnJlYWNoYWJsZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5GSUxFPC9jb2RlPjxkZD5Ub28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5PREVWPC9jb2RlPjxkZD5ObyBzdWNoIGRldmljZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5PRU5UPC9jb2RlPjxkZD5ObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9FWEVDPC9jb2RlPjxkZD5FeGVjIGZvcm1hdCBlcnJvcgorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5PTENLPC9jb2RlPjxkZD5ObyBsb2NrCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9MSU5LPC9jb2RlPjxkZD5WaXJ0dWFsIGNpcmN1aXQgaXMgZ29uZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5PTUVNPC9jb2RlPjxkZD5Ob3QgZW5vdWdoIHNwYWNlCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9NU0c8L2NvZGU+PGRkPk5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9ORVQ8L2NvZGU+PGRkPk1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9QS0c8L2NvZGU+PGRkPk5vIHBhY2thZ2UKKworICAgICA8YnI+PGR0Pjxjb2RlPkVOT1BST1RPT1BUPC9jb2RlPjxkZD5Qcm90b2NvbCBub3QgYXZhaWxhYmxlCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9TUEM8L2NvZGU+PGRkPk5vIHNwYWNlIGxlZnQgb24gZGV2aWNlCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9TUjwvY29kZT48ZGQ+Tm8gc3RyZWFtIHJlc291cmNlcworCisgICAgIDxicj48ZHQ+PGNvZGU+RU5PU1RSPC9jb2RlPjxkZD5Ob3QgYSBzdHJlYW0KKworICAgICA8YnI+PGR0Pjxjb2RlPkVOT1NZUzwvY29kZT48ZGQ+RnVuY3Rpb24gbm90IGltcGxlbWVudGVkCisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9UQkxLPC9jb2RlPjxkZD5CbG9jayBkZXZpY2UgcmVxdWlyZWQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVOT1RDT05OPC9jb2RlPjxkZD5Tb2NrZXQgaXMgbm90IGNvbm5lY3RlZAorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5PVERJUjwvY29kZT48ZGQ+Tm90IGEgZGlyZWN0b3J5CisKKyAgICAgPGJyPjxkdD48Y29kZT5FTk9URU1QVFk8L2NvZGU+PGRkPkRpcmVjdG9yeSBub3QgZW1wdHkKKworICAgICA8YnI+PGR0Pjxjb2RlPkVOT1RTT0NLPC9jb2RlPjxkZD5Tb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVOT1RTVVA8L2NvZGU+PGRkPk5vdCBzdXBwb3J0ZWQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVOT1RUWTwvY29kZT48ZGQ+Tm90IGEgY2hhcmFjdGVyIGRldmljZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RU5YSU88L2NvZGU+PGRkPk5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MKKworICAgICA8YnI+PGR0Pjxjb2RlPkVQRVJNPC9jb2RlPjxkZD5Ob3Qgb3duZXIKKworICAgICA8YnI+PGR0Pjxjb2RlPkVQSVBFPC9jb2RlPjxkZD5Ccm9rZW4gcGlwZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RVBST1RPPC9jb2RlPjxkZD5Qcm90b2NvbCBlcnJvcgorCisgICAgIDxicj48ZHQ+PGNvZGU+RVBST1RPVFlQRTwvY29kZT48ZGQ+UHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0CisKKyAgICAgPGJyPjxkdD48Y29kZT5FUFJPVE9OT1NVUFBPUlQ8L2NvZGU+PGRkPlVua25vd24gcHJvdG9jb2wKKworICAgICA8YnI+PGR0Pjxjb2RlPkVSQU5HRTwvY29kZT48ZGQ+UmVzdWx0IHRvbyBsYXJnZQorCisgICAgIDxicj48ZHQ+PGNvZGU+RVJFTU9URTwvY29kZT48ZGQ+UmVzb3VyY2UgaXMgcmVtb3RlCisKKyAgICAgPGJyPjxkdD48Y29kZT5FUk9GUzwvY29kZT48ZGQ+UmVhZC1vbmx5IGZpbGUgc3lzdGVtCisKKyAgICAgPGJyPjxkdD48Y29kZT5FU0hVVERPV048L2NvZGU+PGRkPkNhbid0IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duCisKKyAgICAgPGJyPjxkdD48Y29kZT5FU09DS1ROT1NVUFBPUlQ8L2NvZGU+PGRkPlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVTUElQRTwvY29kZT48ZGQ+SWxsZWdhbCBzZWVrCisKKyAgICAgPGJyPjxkdD48Y29kZT5FU1JDSDwvY29kZT48ZGQ+Tm8gc3VjaCBwcm9jZXNzCisKKyAgICAgPGJyPjxkdD48Y29kZT5FU1JNTlQ8L2NvZGU+PGRkPlNybW91bnQgZXJyb3IKKworICAgICA8YnI+PGR0Pjxjb2RlPkVUSU1FPC9jb2RlPjxkZD5TdHJlYW0gaW9jdGwgdGltZW91dAorCisgICAgIDxicj48ZHQ+PGNvZGU+RVRJTUVET1VUPC9jb2RlPjxkZD5Db25uZWN0aW9uIHRpbWVkIG91dAorCisgICAgIDxicj48ZHQ+PGNvZGU+RVRYVEJTWTwvY29kZT48ZGQ+VGV4dCBmaWxlIGJ1c3kKKworICAgICA8YnI+PGR0Pjxjb2RlPkVYREVWPC9jb2RlPjxkZD5Dcm9zcy1kZXZpY2UgbGluaworCisgICAgIDxicj48ZHQ+PGNvZGU+RUNBTkNFTEVEPC9jb2RlPjxkZD5PcGVyYXRpb24gY2FuY2VsZWQKKworICAgICA8YnI+PGR0Pjxjb2RlPkVOT1RSRUNPVkVSQUJMRTwvY29kZT48ZGQ+U3RhdGUgbm90IHJlY292ZXJhYmxlCisKKyAgICAgPGJyPjxkdD48Y29kZT5FT1dORVJERUFEPC9jb2RlPjxkZD5QcmV2aW91cyBvd25lciBkaWVkCisKKyAgICAgPGJyPjxkdD48Y29kZT5FU1RSUElQRTwvY29kZT48ZGQ+U3RyaW5ncyBwaXBlIGVycm9yCisKKyAgIDwvZGw+CisKKyAgIDxwPjxjb2RlPl9zdHJlcnJvcl9yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uIG9mIHRoZSBhYm92ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cmluZy4gIFlvdXIgYXBwbGljYXRpb24gbXVzdAorbm90IG1vZGlmeSB0aGF0IHN0cmluZy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5zdHJlcnJvcjwvY29kZT4sIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBzdHJpbmdzIHVzZWQKK2ZvciBlYWNoIGVycm9yIG51bWJlci4KKworICAgPHA+QWx0aG91Z2ggdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT5zdHJlcnJvcjwvY29kZT4gaXMgcmVlbnRyYW50IChkZXBlbmRpbmcKK29uIDxjb2RlPl91c2VyX3N0cmVycm9yPC9jb2RlPiksIEFOU0kgQyBkZWNsYXJlcyB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8KKzxjb2RlPnN0cmVycm9yPC9jb2RlPiBtYXkgb3ZlcndyaXRlIHRoZSByZXN1bHQgc3RyaW5nOyB0aGVyZWZvcmUgcG9ydGFibGUKK2NvZGUgY2Fubm90IGRlcGVuZCBvbiB0aGUgcmVlbnRyYW5jeSBvZiB0aGlzIHN1YnJvdXRpbmUuCisKKyAgIDxwPkFsdGhvdWdoIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+c3RyZXJyb3I8L2NvZGU+IGd1YXJhbnRlZXMgYSBub24tbnVsbAorcmVzdWx0IHdpdGggYSBOVUwtdGVybWluYXRvciwgc29tZSBpbXBsZW1lbnRhdGlvbnMgcmV0dXJuIDxjb2RlPk5VTEw8L2NvZGU+CitvbiBmYWlsdXJlLiAgQWx0aG91Z2ggUE9TSVggYWxsb3dzIDxjb2RlPnN0cmVycm9yPC9jb2RlPiB0byBzZXQgPGNvZGU+ZXJybm88L2NvZGU+Cit0byBFSU5WQUwgb24gZmFpbHVyZSwgdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBkbyBzbyAodW5sZXNzCit5b3UgcHJvdmlkZSA8Y29kZT5fdXNlcl9zdHJlcnJvcjwvY29kZT4pLgorCisgICA8cD5QT1NJWCByZWNvbW1lbmRzIHRoYXQgdW5rbm93biA8dmFyPmVycm51bTwvdmFyPiByZXN1bHQgaW4gYSBtZXNzYWdlCitpbmNsdWRpbmcgdGhhdCB2YWx1ZSwgaG93ZXZlciBpdCBpcyBub3QgYSByZXF1aXJlbWVudCBhbmQgdGhpcworaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcHJvdmlkZSB0aGF0IGluZm9ybWF0aW9uICh1bmxlc3MgeW91Citwcm92aWRlIDxjb2RlPl91c2VyX3N0cmVycm9yPC9jb2RlPikuCisKKyAgIDxwPlRoaXMgaW1wbGVtZW50YXRpb24gb2YgPGNvZGU+c3RyZXJyb3I8L2NvZGU+IHByb3ZpZGVzIGZvciB1c2VyLWRlZmluZWQKK2V4dGVuc2liaWxpdHkuICA8Y29kZT5lcnJuby5oPC9jb2RlPiBkZWZpbmVzIDx2YXI+X19FTEFTVEVSUk9SPC92YXI+LCB3aGljaCBjYW4gYmUKK3VzZWQgYXMgYSBiYXNlIGZvciB1c2VyLWRlZmluZWQgZXJyb3IgdmFsdWVzLiAgSWYgdGhlIHVzZXIgc3VwcGxpZXMgYQorcm91dGluZSBuYW1lZCA8Y29kZT5fdXNlcl9zdHJlcnJvcjwvY29kZT4sIGFuZCA8dmFyPmVycm51bTwvdmFyPiBwYXNzZWQgdG8KKzxjb2RlPnN0cmVycm9yPC9jb2RlPiBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIHN1cHBvcnRlZCB2YWx1ZXMsCis8Y29kZT5fdXNlcl9zdHJlcnJvcjwvY29kZT4gaXMgY2FsbGVkIHdpdGggdGhyZWUgYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzIG9mCit0eXBlIDx2YXI+aW50PC92YXI+LCBhbmQgaXMgdGhlIDx2YXI+ZXJybnVtPC92YXI+IHZhbHVlIHVua25vd24gdG8gPGNvZGU+c3RyZXJyb3I8L2NvZGU+LiAKK1RoZSBzZWNvbmQgaXMgb2YgdHlwZSA8dmFyPmludDwvdmFyPiwgYW5kIG1hdGNoZXMgdGhlIDx2YXI+aW50ZXJuYWw8L3Zhcj4gYXJndW1lbnQKK29mIDxjb2RlPl9zdHJlcnJvcl9yPC9jb2RlPjsgdGhpcyBzaG91bGQgYmUgemVybyBpZiBjYWxsZWQgZnJvbSA8Y29kZT5zdHJlcnJvcjwvY29kZT4KK2FuZCBub24temVybyBpZiBjYWxsZWQgZnJvbSBhbnkgb3RoZXIgZnVuY3Rpb247IDxjb2RlPl91c2VyX3N0cmVycm9yPC9jb2RlPiBjYW4KK3VzZSB0aGlzIGluZm9ybWF0aW9uIHRvIHNhdGlzZnkgdGhlIFBPU0lYIHJ1bGUgdGhhdCBubyBvdGhlcgorc3RhbmRhcmRpemVkIGZ1bmN0aW9uIGNhbiBvdmVyd3JpdGUgYSBzdGF0aWMgYnVmZmVyIHJldXNlZCBieQorPGNvZGU+c3RyZXJyb3I8L2NvZGU+LiAgVGhlIHRoaXJkIGlzIG9mIHR5cGUgPHZhcj5pbnQgKjwvdmFyPiwgYW5kIG1hdGNoZXMgdGhlCis8dmFyPmVycm9yPC92YXI+IGFyZ3VtZW50IG9mIDxjb2RlPl9zdHJlcnJvcl9yPC9jb2RlPjsgaWYgYSBub24temVybyB2YWx1ZSBpcyBzdG9yZWQKK2ludG8gdGhhdCBsb2NhdGlvbiAodXN1YWxseSA8dmFyPkVJTlZBTDwvdmFyPiksIHRoZW4gPGNvZGU+c3RyZXJyb3I8L2NvZGU+IHdpbGwgc2V0Cis8Y29kZT5lcnJubzwvY29kZT4gdG8gdGhhdCB2YWx1ZSwgYW5kIHRoZSBYUEcgdmFyaWFudCBvZiA8Y29kZT5zdHJlcnJvcl9yPC9jb2RlPiB3aWxsCityZXR1cm4gdGhhdCB2YWx1ZSBpbnN0ZWFkIG9mIHplcm8gb3IgPHZhcj5FUkFOR0U8L3Zhcj4uICA8Y29kZT5fdXNlcl9zdHJlcnJvcjwvY29kZT4KK3JldHVybnMgYSA8dmFyPmNoYXIgKjwvdmFyPiB2YWx1ZTsgcmV0dXJuaW5nIDx2YXI+TlVMTDwvdmFyPiBpbXBsaWVzIHRoYXQgdGhlIHVzZXIKK2Z1bmN0aW9uIGRpZCBub3QgY2hvb3NlIHRvIGhhbmRsZSA8dmFyPmVycm51bTwvdmFyPi4gIFRoZSBkZWZhdWx0Cis8Y29kZT5fdXNlcl9zdHJlcnJvcjwvY29kZT4gcmV0dXJucyA8dmFyPk5VTEw8L3Zhcj4gZm9yIGFsbCBpbnB1dCB2YWx1ZXMuICBOb3RlIHRoYXQKKzxjb2RlPl91c2VyX3N0ZXJyb3I8L2NvZGU+IG11c3QgYmUgdGhyZWFkLXNhZmUsIGFuZCBvbmx5IGRlbm90ZSBlcnJvcnMgdmlhIHRoZQordGhpcmQgYXJndW1lbnQgcmF0aGVyIHRoYW4gbW9kaWZ5aW5nIDxjb2RlPmVycm5vPC9jb2RlPiwgaWYgPGNvZGU+c3RyZXJyb3I8L2NvZGU+IGFuZAorPGNvZGU+c3RyZXJyb3JfcjwvY29kZT4gYXJlIGFyZSB0byBjb21wbHkgd2l0aCBQT1NJWC4KKworICAgPHA+PGNvZGU+c3RyZXJyb3I8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RyZXJyb3JfMDA1ZnIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmVycm9yXzAwNWZyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0MTEzOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmVycm9yXzAwNWZyLmh0bWwKQEAgLTAsMCArMSw5MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3RyZXJyb3JfciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3RyZXJyb3IuaHRtbCNzdHJlcnJvciIgdGl0bGU9InN0cmVycm9yIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RybGVuLmh0bWwjc3RybGVuIiB0aXRsZT0ic3RybGVuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJlcnJvcl9yIj48L2E+Cis8YSBuYW1lPSJzdHJlcnJvcl8wMDVmciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJsZW4uaHRtbCNzdHJsZW4iPnN0cmxlbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cmVycm9yLmh0bWwjc3RyZXJyb3IiPnN0cmVycm9yPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjI1IDxjb2RlPnN0cmVycm9yX3I8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgZXJyb3IgbnVtYmVyIHRvIHN0cmluZyBhbmQgY29weSB0byBidWZmZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJlcnJvcl8wMDVmci0zOTMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgI2lmZGVmIF9HTlVfU09VUkNFCisgICAgIGNoYXIgKnN0cmVycm9yX3IoaW50IDx2YXI+ZXJybnVtPC92YXI+LCBjaGFyICo8dmFyPmJ1ZmZlcjwvdmFyPiwgc2l6ZV90IDx2YXI+bjwvdmFyPik7CisgICAgICNlbHNlCisgICAgIGludCBzdHJlcnJvcl9yKGludCA8dmFyPmVycm51bTwvdmFyPiwgY2hhciAqPHZhcj5idWZmZXI8L3Zhcj4sIHNpemVfdCA8dmFyPm48L3Zhcj4pOworICAgICAjZW5kaWYKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJlcnJvcl9yPC9jb2RlPiBjb252ZXJ0cyB0aGUgZXJyb3IgbnVtYmVyIDx2YXI+ZXJybnVtPC92YXI+IGludG8gYQorc3RyaW5nIGFuZCBjb3BpZXMgdGhlIHJlc3VsdCBpbnRvIHRoZSBzdXBwbGllZCA8dmFyPmJ1ZmZlcjwvdmFyPiBmb3IKK2EgbGVuZ3RoIHVwIHRvIDx2YXI+bjwvdmFyPiwgaW5jbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvci4gVGhlIHZhbHVlIG9mCis8dmFyPmVycm51bTwvdmFyPiBpcyB1c3VhbGx5IGEgY29weSBvZiA8Y29kZT5lcnJubzwvY29kZT4uICBJZiA8Y29kZT5lcnJudW08L2NvZGU+IGlzIG5vdCBhIGtub3duCitlcnJvciBudW1iZXIsIHRoZSByZXN1bHQgaXMgdGhlIGVtcHR5IHN0cmluZy4KKworICAgPHA+U2VlIDxjb2RlPnN0cmVycm9yPC9jb2RlPiBmb3IgaG93IHN0cmluZ3MgYXJlIG1hcHBlZCB0byA8Y29kZT5lcnJudW08L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGVyZSBhcmUgdHdvIHZhcmlhbnRzOiB0aGUgR05VIHZlcnNpb24gYWx3YXlzIHJldHVybnMgYSBOVUwtdGVybWluYXRlZAorc3RyaW5nLCB3aGljaCBpcyA8dmFyPmJ1ZmZlcjwvdmFyPiBpZiBhbGwgd2VudCB3ZWxsLCBidXQgd2hpY2ggaXMgYW5vdGhlcgorcG9pbnRlciBpZiA8dmFyPm48L3Zhcj4gd2FzIHRvbyBzbWFsbCAobGVhdmluZyA8dmFyPmJ1ZmZlcjwvdmFyPiB1bnRvdWNoZWQpLiAgSWYgdGhlCityZXR1cm4gaXMgbm90IDx2YXI+YnVmZmVyPC92YXI+LCB5b3VyIGFwcGxpY2F0aW9uIG11c3Qgbm90IG1vZGlmeSB0aGF0IHN0cmluZy4gCitUaGUgUE9TSVggdmVyc2lvbiByZXR1cm5zIDAgb24gc3VjY2VzcywgPHZhcj5FSU5WQUw8L3Zhcj4gaWYgPGNvZGU+ZXJybnVtPC9jb2RlPiB3YXMgbm90CityZWNvZ25pemVkLCBhbmQgPHZhcj5FUkFOR0U8L3Zhcj4gaWYgPHZhcj5uPC92YXI+IHdhcyB0b28gc21hbGwuICBUaGUgdmFyaWFudCBjaG9zZW4KK2RlcGVuZHMgb24gbWFjcm9zIHRoYXQgeW91IGRlZmluZSBiZWZvcmUgaW5jbHVzaW9uIG9mIDxjb2RlPnN0cmluZy5oPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cmVycm9yX3I8L2NvZGU+IHdpdGggYSA8dmFyPmNoYXIgKjwvdmFyPiByZXN1bHQgaXMgYSBHTlUgZXh0ZW5zaW9uLiAKKzxjb2RlPnN0cmVycm9yX3I8L2NvZGU+IHdpdGggYW4gPHZhcj5pbnQ8L3Zhcj4gcmVzdWx0IGlzIHJlcXVpcmVkIGJ5IFBPU0lYIDIwMDEuIAorVGhpcyBmdW5jdGlvbiBpcyBjb21wbGlhbnQgb25seSBpZiA8Y29kZT5fdXNlcl9zdHJlcnJvcjwvY29kZT4gaXMgbm90IHByb3ZpZGVkLAorb3IgaWYgaXQgaXMgdGhyZWFkLXNhZmUgYW5kIHVzZXMgc2VwYXJhdGUgc3RvcmFnZSBhY2NvcmRpbmcgdG8gd2hldGhlcgordGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGF0IGZ1bmN0aW9uIGlzIG5vbi16ZXJvLiAgRm9yIG1vcmUgZGV0YWlscworb24gPGNvZGU+X3VzZXJfc3RyZXJyb3I8L2NvZGU+LCBzZWUgdGhlIDxjb2RlPnN0cmVycm9yPC9jb2RlPiBkb2N1bWVudGF0aW9uLgorCisgICA8cD5QT1NJWCBzdGF0ZXMgdGhhdCB0aGUgY29udGVudHMgb2YgPHZhcj5idWY8L3Zhcj4gYXJlIHVuc3BlY2lmaWVkIG9uIGVycm9yLAorYWx0aG91Z2ggdGhpcyBpbXBsZW1lbnRhdGlvbiBndWFyYW50ZWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGZvcgorYWxsIGV4Y2VwdCA8dmFyPm48L3Zhcj4gb2YgMC4KKworICAgPHA+UE9TSVggcmVjb21tZW5kcyB0aGF0IHVua25vd24gPHZhcj5lcnJudW08L3Zhcj4gcmVzdWx0IGluIGEgbWVzc2FnZSBpbmNsdWRpbmcKK3RoYXQgdmFsdWUsIGhvd2V2ZXIgaXQgaXMgbm90IGEgcmVxdWlyZW1lbnQgYW5kIHRoaXMgaW1wbGVtZW50YXRpb24KK3Byb3ZpZGVzIG9ubHkgYW4gZW1wdHkgc3RyaW5nICh1bmxlc3MgeW91IHByb3ZpZGUgPGNvZGU+X3VzZXJfc3RyZXJyb3I8L2NvZGU+KS4gCitQT1NJWCBhbHNvIHJlY29tbWVuZHMgdGhhdCB1bmtub3duIDx2YXI+ZXJybnVtPC92YXI+IGZhaWwgd2l0aCBFSU5WQUwgZXZlbgord2hlbiBwcm92aWRpbmcgc3VjaCBhIG1lc3NhZ2UsIGhvd2V2ZXIgaXQgaXMgbm90IGEgcmVxdWlyZW1lbnQgYW5kCit0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgcmV0dXJuIHN1Y2Nlc3MgaWYgPGNvZGU+X3VzZXJfc3RyZXJyb3I8L2NvZGU+IHByb3ZpZGVkCithIG5vbi1lbXB0eSBhbHRlcm5hdGUgc3RyaW5nIHdpdGhvdXQgYXNzaWduaW5nIGludG8gaXRzIHRoaXJkIGFyZ3VtZW50LgorCisgICA8cD48Y29kZT5zdHJlcnJvcl9yPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmZ0aW1lLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJmdGltZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODVlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJmdGltZS5odG1sCkBAIC0wLDAgKzEsMjMwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJmdGltZSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiIHRpdGxlPSJUaW1lZm5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibWt0aW1lLmh0bWwjbWt0aW1lIiB0aXRsZT0ibWt0aW1lIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idGltZS5odG1sI3RpbWUiIHRpdGxlPSJ0aW1lIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJmdGltZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0aW1lLmh0bWwjdGltZSI+dGltZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im1rdGltZS5odG1sI21rdGltZSI+bWt0aW1lPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiPlRpbWVmbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjggPGNvZGU+c3RyZnRpbWU8L2NvZGU+Jm1kYXNoO2NvbnZlcnQgZGF0ZSBhbmQgdGltZSB0byBhIGZvcm1hdHRlZCBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJmdGltZS00MzkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CisgICAgIHNpemVfdCBzdHJmdGltZShjaGFyICo8dmFyPnM8L3Zhcj4sIHNpemVfdCA8dmFyPm1heHNpemU8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZvcm1hdDwvdmFyPiwgY29uc3Qgc3RydWN0IHRtICo8dmFyPnRpbXA8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cmZ0aW1lPC9jb2RlPiBjb252ZXJ0cyBhIDxjb2RlPnN0cnVjdCB0bTwvY29kZT4gcmVwcmVzZW50YXRpb24gb2YgdGhlIHRpbWUgKGF0Cis8dmFyPnRpbXA8L3Zhcj4pIGludG8gYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLCBzdGFydGluZyBhdCA8dmFyPnM8L3Zhcj4gYW5kIG9jY3VweWluZworbm8gbW9yZSB0aGFuIDx2YXI+bWF4c2l6ZTwvdmFyPiBjaGFyYWN0ZXJzLgorCisgICA8cD5Zb3UgY29udHJvbCB0aGUgZm9ybWF0IG9mIHRoZSBvdXRwdXQgdXNpbmcgdGhlIHN0cmluZyBhdCA8dmFyPmZvcm1hdDwvdmFyPi4gCis8Y29kZT4qPC9jb2RlPjx2YXI+Zm9ybWF0PC92YXI+IGNhbiBjb250YWluIHR3byBraW5kcyBvZiBzcGVjaWZpY2F0aW9uczogdGV4dCB0byBiZQorY29waWVkIGxpdGVyYWxseSBpbnRvIHRoZSBmb3JtYXR0ZWQgc3RyaW5nLCBhbmQgdGltZSBjb252ZXJzaW9uCitzcGVjaWZpY2F0aW9ucy4gIFRpbWUgY29udmVyc2lvbiBzcGVjaWZpY2F0aW9ucyBhcmUgdHdvLSBhbmQKK3RocmVlLWNoYXJhY3RlciBzZXF1ZW5jZXMgYmVnaW5uaW5nIHdpdGggYDxjb2RlPiU8L2NvZGU+JyAodXNlIGA8Y29kZT4lJTwvY29kZT4nIHRvCitpbmNsdWRlIGEgcGVyY2VudCBzaWduIGluIHRoZSBvdXRwdXQpLiAgRWFjaCBkZWZpbmVkIGNvbnZlcnNpb24KK3NwZWNpZmljYXRpb24gc2VsZWN0cyBvbmx5IHRoZSBzcGVjaWZpZWQgZmllbGQocykgb2YgY2FsZW5kYXIgdGltZQorZGF0YSBmcm9tIDxjb2RlPio8L2NvZGU+PHZhcj50aW1wPC92YXI+LCBhbmQgY29udmVydHMgaXQgdG8gYSBzdHJpbmcgaW4gb25lIG9mIHRoZQorZm9sbG93aW5nIHdheXM6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPiVhPC9jb2RlPjxkZD5UaGUgYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUuIFt0bV93ZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JUE8L2NvZGU+PGRkPlRoZSBmdWxsIHdlZWtkYXkgbmFtZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlLiAKK0luIHRoZSBkZWZhdWx0ICJDIiBsb2NhbGUsIG9uZSBvZiBgPGNvZGU+U3VuZGF5PC9jb2RlPicsIGA8Y29kZT5Nb25kYXk8L2NvZGU+JywgYDxjb2RlPlR1ZXNkYXk8L2NvZGU+JywKK2A8Y29kZT5XZWRuZXNkYXk8L2NvZGU+JywgYDxjb2RlPlRodXJzZGF5PC9jb2RlPicsIGA8Y29kZT5GcmlkYXk8L2NvZGU+JywgYDxjb2RlPlNhdHVyZGF5PC9jb2RlPicuIFt0bV93ZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JWI8L2NvZGU+PGRkPlRoZSBhYmJyZXZpYXRlZCBtb250aCBuYW1lIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBsb2NhbGUuIFt0bV9tb25dCisKKyAgICAgPGJyPjxkdD48Y29kZT4lQjwvY29kZT48ZGQ+VGhlIGZ1bGwgbW9udGggbmFtZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlLiAKK0luIHRoZSBkZWZhdWx0ICJDIiBsb2NhbGUsIG9uZSBvZiBgPGNvZGU+SmFudWFyeTwvY29kZT4nLCBgPGNvZGU+RmVicnVhcnk8L2NvZGU+JywKK2A8Y29kZT5NYXJjaDwvY29kZT4nLCBgPGNvZGU+QXByaWw8L2NvZGU+JywgYDxjb2RlPk1heTwvY29kZT4nLCBgPGNvZGU+SnVuZTwvY29kZT4nLCBgPGNvZGU+SnVseTwvY29kZT4nLAorYDxjb2RlPkF1Z3VzdDwvY29kZT4nLCBgPGNvZGU+U2VwdGVtYmVyPC9jb2RlPicsIGA8Y29kZT5PY3RvYmVyPC9jb2RlPicsIGA8Y29kZT5Ob3ZlbWJlcjwvY29kZT4nLAorYDxjb2RlPkRlY2VtYmVyPC9jb2RlPicuIFt0bV9tb25dCisKKyAgICAgPGJyPjxkdD48Y29kZT4lYzwvY29kZT48ZGQ+VGhlIHByZWZlcnJlZCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgY3VycmVudCBsb2NhbGUuIAorW3RtX3NlYywgdG1fbWluLCB0bV9ob3VyLCB0bV9tZGF5LCB0bV9tb24sIHRtX3llYXIsIHRtX3dkYXldCisKKyAgICAgPGJyPjxkdD48Y29kZT4lQzwvY29kZT48ZGQ+VGhlIGNlbnR1cnksIHRoYXQgaXMsIHRoZSB5ZWFyIGRpdmlkZWQgYnkgMTAwIHRoZW4gdHJ1bmNhdGVkLiAgRm9yCis0LWRpZ2l0IHllYXJzLCB0aGUgcmVzdWx0IGlzIHplcm8tcGFkZGVkIGFuZCBleGFjdGx5IHR3byBjaGFyYWN0ZXJzOworYnV0IGZvciBvdGhlciB5ZWFycywgdGhlcmUgbWF5IGEgbmVnYXRpdmUgc2lnbiBvciBtb3JlIGRpZ2l0cy4gIEluCit0aGlzIHdheSwgYDxjb2RlPiVDJXk8L2NvZGU+JyBpcyBlcXVpdmFsZW50IHRvIGA8Y29kZT4lWTwvY29kZT4nLiBbdG1feWVhcl0KKzxicj48ZHQ+PGNvZGU+JWQ8L2NvZGU+PGRkPlRoZSBkYXkgb2YgdGhlIG1vbnRoLCBmb3JtYXR0ZWQgd2l0aCB0d28gZGlnaXRzIChmcm9tIGA8Y29kZT4wMTwvY29kZT4nIHRvCitgPGNvZGU+MzE8L2NvZGU+JykuIFt0bV9tZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JUQ8L2NvZGU+PGRkPkEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZGF0ZSwgaW4gdGhlIGZvcm0gYDxjb2RlPiIlbS8lZC8leSI8L2NvZGU+Jy4gCitbdG1fbWRheSwgdG1fbW9uLCB0bV95ZWFyXQorCisgICAgIDxicj48ZHQ+PGNvZGU+JWU8L2NvZGU+PGRkPlRoZSBkYXkgb2YgdGhlIG1vbnRoLCBmb3JtYXR0ZWQgd2l0aCBsZWFkaW5nIHNwYWNlIGlmIHNpbmdsZSBkaWdpdAorKGZyb20gYDxjb2RlPjE8L2NvZGU+JyB0byBgPGNvZGU+MzE8L2NvZGU+JykuIFt0bV9tZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JUV4PC9jb2RlPjxkZD5JbiBzb21lIGxvY2FsZXMsIHRoZSBFIG1vZGlmaWVyIHNlbGVjdHMgYWx0ZXJuYXRpdmUgcmVwcmVzZW50YXRpb25zIG9mCitjZXJ0YWluIG1vZGlmaWVycyA8Y29kZT54PC9jb2RlPi4gIEluIG5ld2xpYiwgaXQgaXMgaWdub3JlZCwgYW5kIHRyZWF0ZWQgYXMgJTxjb2RlPng8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+JUY8L2NvZGU+PGRkPkEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSVNPIDg2MDE6MjAwMCBkYXRlIGZvcm1hdCwgaW4gdGhlIGZvcm0KK2A8Y29kZT4iJVktJW0tJWQiPC9jb2RlPicuIFt0bV9tZGF5LCB0bV9tb24sIHRtX3llYXJdCisKKyAgICAgPGJyPjxkdD48Y29kZT4lZzwvY29kZT48ZGQ+VGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiB0aGUgd2Vlay1iYXNlZCB5ZWFyLCBzZWUgc3BlY2lmaWVyICVHIChmcm9tCitgPGNvZGU+MDA8L2NvZGU+JyB0byBgPGNvZGU+OTk8L2NvZGU+JykuIFt0bV95ZWFyLCB0bV93ZGF5LCB0bV95ZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JUc8L2NvZGU+PGRkPlRoZSB3ZWVrLWJhc2VkIHllYXIuIEluIHRoZSBJU08gODYwMToyMDAwIGNhbGVuZGFyLCB3ZWVrIDEgb2YgdGhlIHllYXIKK2luY2x1ZGVzIEphbnVhcnkgNHRoLCBhbmQgYmVnaW4gb24gTW9uZGF5cy4gVGhlcmVmb3JlLCBpZiBKYW51YXJ5IDFzdCwKKzJuZCwgb3IgM3JkIGZhbGxzIG9uIGEgU3VuZGF5LCB0aGF0IGRheSBhbmQgZWFybGllciBiZWxvbmcgdG8gdGhlIGxhc3QKK3dlZWsgb2YgdGhlIHByZXZpb3VzIHllYXI7IGFuZCBpZiBEZWNlbWJlciAyOXRoLCAzMHRoLCBvciAzMXN0IGZhbGxzCitvbiBNb25kYXksIHRoYXQgZGF5IGFuZCBsYXRlciBiZWxvbmcgdG8gd2VlayAxIG9mIHRoZSBuZXh0IHllYXIuICBGb3IKK2NvbnNpc3RlbmN5IHdpdGggJVksIGl0IGFsd2F5cyBoYXMgYXQgbGVhc3QgZm91ciBjaGFyYWN0ZXJzLiAKK0V4YW1wbGU6ICIlRyIgZm9yIFNhdHVyZGF5IDJuZCBKYW51YXJ5IDE5OTkgZ2l2ZXMgIjE5OTgiLCBhbmQgZm9yCitUdWVzZGF5IDMwdGggRGVjZW1iZXIgMTk5NyBnaXZlcyAiMTk5OCIuIFt0bV95ZWFyLCB0bV93ZGF5LCB0bV95ZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JWg8L2NvZGU+PGRkPlN5bm9ueW0gZm9yICIlYiIuIFt0bV9tb25dCisKKyAgICAgPGJyPjxkdD48Y29kZT4lSDwvY29kZT48ZGQ+VGhlIGhvdXIgKG9uIGEgMjQtaG91ciBjbG9jayksIGZvcm1hdHRlZCB3aXRoIHR3byBkaWdpdHMgKGZyb20KK2A8Y29kZT4wMDwvY29kZT4nIHRvIGA8Y29kZT4yMzwvY29kZT4nKS4gW3RtX2hvdXJdCisKKyAgICAgPGJyPjxkdD48Y29kZT4lSTwvY29kZT48ZGQ+VGhlIGhvdXIgKG9uIGEgMTItaG91ciBjbG9jayksIGZvcm1hdHRlZCB3aXRoIHR3byBkaWdpdHMgKGZyb20KK2A8Y29kZT4wMTwvY29kZT4nIHRvIGA8Y29kZT4xMjwvY29kZT4nKS4gW3RtX2hvdXJdCisKKyAgICAgPGJyPjxkdD48Y29kZT4lajwvY29kZT48ZGQ+VGhlIGNvdW50IG9mIGRheXMgaW4gdGhlIHllYXIsIGZvcm1hdHRlZCB3aXRoIHRocmVlIGRpZ2l0cworKGZyb20gYDxjb2RlPjAwMTwvY29kZT4nIHRvIGA8Y29kZT4zNjY8L2NvZGU+JykuIFt0bV95ZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JWs8L2NvZGU+PGRkPlRoZSBob3VyIChvbiBhIDI0LWhvdXIgY2xvY2spLCBmb3JtYXR0ZWQgd2l0aCBsZWFkaW5nIHNwYWNlIGlmIHNpbmdsZQorZGlnaXQgKGZyb20gYDxjb2RlPjA8L2NvZGU+JyB0byBgPGNvZGU+MjM8L2NvZGU+JykuIE5vbi1QT1NJWCBleHRlbnNpb24gKGMucC4gJUkpLiBbdG1faG91cl0KKworICAgICA8YnI+PGR0Pjxjb2RlPiVsPC9jb2RlPjxkZD5UaGUgaG91ciAob24gYSAxMi1ob3VyIGNsb2NrKSwgZm9ybWF0dGVkIHdpdGggbGVhZGluZyBzcGFjZSBpZiBzaW5nbGUKK2RpZ2l0IChmcm9tIGA8Y29kZT4xPC9jb2RlPicgdG8gYDxjb2RlPjEyPC9jb2RlPicpLiBOb24tUE9TSVggZXh0ZW5zaW9uIChjLnAuICVIKS4gW3RtX2hvdXJdCisKKyAgICAgPGJyPjxkdD48Y29kZT4lbTwvY29kZT48ZGQ+VGhlIG1vbnRoIG51bWJlciwgZm9ybWF0dGVkIHdpdGggdHdvIGRpZ2l0cyAoZnJvbSBgPGNvZGU+MDE8L2NvZGU+JyB0byBgPGNvZGU+MTI8L2NvZGU+JykuIAorW3RtX21vbl0KKworICAgICA8YnI+PGR0Pjxjb2RlPiVNPC9jb2RlPjxkZD5UaGUgbWludXRlLCBmb3JtYXR0ZWQgd2l0aCB0d28gZGlnaXRzIChmcm9tIGA8Y29kZT4wMDwvY29kZT4nIHRvIGA8Y29kZT41OTwvY29kZT4nKS4gW3RtX21pbl0KKworICAgICA8YnI+PGR0Pjxjb2RlPiVuPC9jb2RlPjxkZD5BIG5ld2xpbmUgY2hhcmFjdGVyIChgPGNvZGU+XG48L2NvZGU+JykuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lT3g8L2NvZGU+PGRkPkluIHNvbWUgbG9jYWxlcywgdGhlIE8gbW9kaWZpZXIgc2VsZWN0cyBhbHRlcm5hdGl2ZSBkaWdpdCBjaGFyYWN0ZXJzCitmb3IgY2VydGFpbiBtb2RpZmllcnMgPGNvZGU+eDwvY29kZT4uICBJbiBuZXdsaWIsIGl0IGlzIGlnbm9yZWQsIGFuZCB0cmVhdGVkIGFzICU8Y29kZT54PC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPiVwPC9jb2RlPjxkZD5FaXRoZXIgYDxjb2RlPkFNPC9jb2RlPicgb3IgYDxjb2RlPlBNPC9jb2RlPicgYXMgYXBwcm9wcmlhdGUsIG9yIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZ3MgZm9yCit0aGUgY3VycmVudCBsb2NhbGUuIFt0bV9ob3VyXQorCisgICAgIDxicj48ZHQ+PGNvZGU+JVA8L2NvZGU+PGRkPlNhbWUgYXMgJzxjb2RlPiVwPC9jb2RlPicsIGJ1dCBpbiBsb3dlcmNhc2UuICBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbi4gW3RtX2hvdXJdCisKKyAgICAgPGJyPjxkdD48Y29kZT4lcjwvY29kZT48ZGQ+UmVwbGFjZWQgYnkgdGhlIHRpbWUgaW4gYS5tLiBhbmQgcC5tLiBub3RhdGlvbi4gIEluIHRoZSAiQyIgbG9jYWxlIHRoaXMKK2lzIGVxdWl2YWxlbnQgdG8gIiVJOiVNOiVTICVwIi4gIEluIGxvY2FsZXMgd2hpY2ggZG9uJ3QgZGVmaW5lIGEubS4vcC5tLiAKK25vdGF0aW9ucywgdGhlIHJlc3VsdCBpcyBhbiBlbXB0eSBzdHJpbmcuIFt0bV9zZWMsIHRtX21pbiwgdG1faG91cl0KKworICAgICA8YnI+PGR0Pjxjb2RlPiVSPC9jb2RlPjxkZD5UaGUgMjQtaG91ciB0aW1lLCB0byB0aGUgbWludXRlLiAgRXF1aXZhbGVudCB0byAiJUg6JU0iLiBbdG1fbWluLCB0bV9ob3VyXQorCisgICAgIDxicj48ZHQ+PGNvZGU+JVM8L2NvZGU+PGRkPlRoZSBzZWNvbmQsIGZvcm1hdHRlZCB3aXRoIHR3byBkaWdpdHMgKGZyb20gYDxjb2RlPjAwPC9jb2RlPicgdG8gYDxjb2RlPjYwPC9jb2RlPicpLiAgVGhlCit2YWx1ZSA2MCBhY2NvdW50cyBmb3IgdGhlIG9jY2FzaW9uYWwgbGVhcCBzZWNvbmQuIFt0bV9zZWNdCisKKyAgICAgPGJyPjxkdD48Y29kZT4ldDwvY29kZT48ZGQ+QSB0YWIgY2hhcmFjdGVyIChgPGNvZGU+XHQ8L2NvZGU+JykuCisKKyAgICAgPGJyPjxkdD48Y29kZT4lVDwvY29kZT48ZGQ+VGhlIDI0LWhvdXIgdGltZSwgdG8gdGhlIHNlY29uZC4gIEVxdWl2YWxlbnQgdG8gIiVIOiVNOiVTIi4gW3RtX3NlYywKK3RtX21pbiwgdG1faG91cl0KKworICAgICA8YnI+PGR0Pjxjb2RlPiV1PC9jb2RlPjxkZD5UaGUgd2Vla2RheSBhcyBhIG51bWJlciwgMS1iYXNlZCBmcm9tIE1vbmRheSAoZnJvbSBgPGNvZGU+MTwvY29kZT4nIHRvCitgPGNvZGU+NzwvY29kZT4nKS4gW3RtX3dkYXldCisKKyAgICAgPGJyPjxkdD48Y29kZT4lVTwvY29kZT48ZGQ+VGhlIHdlZWsgbnVtYmVyLCB3aGVyZSB3ZWVrcyBzdGFydCBvbiBTdW5kYXksIHdlZWsgMSBjb250YWlucyB0aGUgZmlyc3QKK1N1bmRheSBpbiBhIHllYXIsIGFuZCBlYXJsaWVyIGRheXMgYXJlIGluIHdlZWsgMC4gIEZvcm1hdHRlZCB3aXRoIHR3bworZGlnaXRzIChmcm9tIGA8Y29kZT4wMDwvY29kZT4nIHRvIGA8Y29kZT41MzwvY29kZT4nKS4gIFNlZSBhbHNvIDxjb2RlPiVXPC9jb2RlPi4gW3RtX3dkYXksIHRtX3lkYXldCisKKyAgICAgPGJyPjxkdD48Y29kZT4lVjwvY29kZT48ZGQ+VGhlIHdlZWsgbnVtYmVyLCB3aGVyZSB3ZWVrcyBzdGFydCBvbiBNb25kYXksIHdlZWsgMSBjb250YWlucyBKYW51YXJ5IDR0aCwKK2FuZCBlYXJsaWVyIGRheXMgYXJlIGluIHRoZSBwcmV2aW91cyB5ZWFyLiAgRm9ybWF0dGVkIHdpdGggdHdvIGRpZ2l0cworKGZyb20gYDxjb2RlPjAxPC9jb2RlPicgdG8gYDxjb2RlPjUzPC9jb2RlPicpLiAgU2VlIGFsc28gPGNvZGU+JUc8L2NvZGU+LiBbdG1feWVhciwgdG1fd2RheSwgdG1feWRheV0KKworICAgICA8YnI+PGR0Pjxjb2RlPiV3PC9jb2RlPjxkZD5UaGUgd2Vla2RheSBhcyBhIG51bWJlciwgMC1iYXNlZCBmcm9tIFN1bmRheSAoZnJvbSBgPGNvZGU+MDwvY29kZT4nIHRvIGA8Y29kZT42PC9jb2RlPicpLiAKK1t0bV93ZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JVc8L2NvZGU+PGRkPlRoZSB3ZWVrIG51bWJlciwgd2hlcmUgd2Vla3Mgc3RhcnQgb24gTW9uZGF5LCB3ZWVrIDEgY29udGFpbnMgdGhlIGZpcnN0CitNb25kYXkgaW4gYSB5ZWFyLCBhbmQgZWFybGllciBkYXlzIGFyZSBpbiB3ZWVrIDAuICBGb3JtYXR0ZWQgd2l0aCB0d28KK2RpZ2l0cyAoZnJvbSBgPGNvZGU+MDA8L2NvZGU+JyB0byBgPGNvZGU+NTM8L2NvZGU+JykuIFt0bV93ZGF5LCB0bV95ZGF5XQorCisgICAgIDxicj48ZHQ+PGNvZGU+JXg8L2NvZGU+PGRkPlJlcGxhY2VkIGJ5IHRoZSBwcmVmZXJyZWQgZGF0ZSByZXByZXNlbnRhdGlvbiBpbiB0aGUgY3VycmVudCBsb2NhbGUuIAorSW4gdGhlICJDIiBsb2NhbGUgdGhpcyBpcyBlcXVpdmFsZW50IHRvICIlbS8lZC8leSIuIAorW3RtX21vbiwgdG1fbWRheSwgdG1feWVhcl0KKworICAgICA8YnI+PGR0Pjxjb2RlPiVYPC9jb2RlPjxkZD5SZXBsYWNlZCBieSB0aGUgcHJlZmVycmVkIHRpbWUgcmVwcmVzZW50YXRpb24gaW4gdGhlIGN1cnJlbnQgbG9jYWxlLiAKK0luIHRoZSAiQyIgbG9jYWxlIHRoaXMgaXMgZXF1aXZhbGVudCB0byAiJUg6JU06JVMiLiBbdG1fc2VjLCB0bV9taW4sIHRtX2hvdXJdCisKKyAgICAgPGJyPjxkdD48Y29kZT4leTwvY29kZT48ZGQ+VGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiB0aGUgeWVhciAoZnJvbSBgPGNvZGU+MDA8L2NvZGU+JyB0byBgPGNvZGU+OTk8L2NvZGU+JykuIFt0bV95ZWFyXQorKEltcGxlbWVudGF0aW9uIGludGVycHJldGF0aW9uOiAgYWx3YXlzIHBvc2l0aXZlLCBldmVuIGZvciBuZWdhdGl2ZSB5ZWFycy4pCisKKyAgICAgPGJyPjxkdD48Y29kZT4lWTwvY29kZT48ZGQ+VGhlIGZ1bGwgeWVhciwgZXF1aXZhbGVudCB0byA8Y29kZT4lQyV5PC9jb2RlPi4gIEl0IHdpbGwgYWx3YXlzIGhhdmUgYXQgbGVhc3QgZm91cgorY2hhcmFjdGVycywgYnV0IG1heSBoYXZlIG1vcmUuICBUaGUgeWVhciBpcyBhY2N1cmF0ZSBldmVuIHdoZW4gdG1feWVhcgorYWRkZWQgdG8gdGhlIG9mZnNldCBvZiAxOTAwIG92ZXJmbG93cyBhbiBpbnQuIFt0bV95ZWFyXQorCisgICAgIDxicj48ZHQ+PGNvZGU+JXo8L2NvZGU+PGRkPlRoZSBvZmZzZXQgZnJvbSBVVEMuICBUaGUgZm9ybWF0IGNvbnNpc3RzIG9mIGEgc2lnbiAobmVnYXRpdmUgaXMgd2VzdCBvZgorR3JlZXdpY2gpLCB0d28gY2hhcmFjdGVycyBmb3IgaG91ciwgdGhlbiB0d28gY2hhcmFjdGVycyBmb3IgbWludXRlcworKC1oaG1tIG9yICtoaG1tKS4gIElmIHRtX2lzZHN0IGlzIG5lZ2F0aXZlLCB0aGUgb2Zmc2V0IGlzIHVua25vd24gYW5kIG5vCitvdXRwdXQgaXMgZ2VuZXJhdGVkOyBpZiBpdCBpcyB6ZXJvLCB0aGUgb2Zmc2V0IGlzIHRoZSBzdGFuZGFyZCBvZmZzZXQgZm9yCit0aGUgY3VycmVudCB0aW1lIHpvbmU7IGFuZCBpZiBpdCBpcyBwb3NpdGl2ZSwgdGhlIG9mZnNldCBpcyB0aGUgZGF5bGlnaHQKK3NhdmluZ3Mgb2Zmc2V0IGZvciB0aGUgY3VycmVudCB0aW1lem9uZS4gVGhlIG9mZnNldCBpcyBkZXRlcm1pbmVkIGZyb20KK3RoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYXMgaWYgYnkgY2FsbGluZyB0enNldCgpLiBbdG1faXNkc3RdCisKKyAgICAgPGJyPjxkdD48Y29kZT4lWjwvY29kZT48ZGQ+VGhlIHRpbWUgem9uZSBuYW1lLiAgSWYgdG1faXNkc3QgaXMgbmVnYXRpdmUsIG5vIG91dHB1dCBpcyBnZW5lcmF0ZWQuIAorT3RoZXJ3aXNlLCB0aGUgdGltZSB6b25lIG5hbWUgaXMgYmFzZWQgb24gdGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlLAorYXMgaWYgYnkgY2FsbGluZyB0enNldCgpLiBbdG1faXNkc3RdCisKKyAgICAgPGJyPjxkdD48Y29kZT4lJTwvY29kZT48ZGQ+QSBzaW5nbGUgY2hhcmFjdGVyLCBgPGNvZGU+JTwvY29kZT4nLiAKKzwvZGw+CisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1doZW4gdGhlIGZvcm1hdHRlZCB0aW1lIHRha2VzIHVwIG5vIG1vcmUgdGhhbiA8dmFyPm1heHNpemU8L3Zhcj4gY2hhcmFjdGVycywKK3RoZSByZXN1bHQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgZm9ybWF0dGVkIHN0cmluZy4gIE90aGVyd2lzZSwgaWYgdGhlCitmb3JtYXR0aW5nIG9wZXJhdGlvbiB3YXMgYWJhbmRvbmVkIGR1ZSB0byBsYWNrIG9mIHJvb20sIHRoZSByZXN1bHQgaXMKKzxjb2RlPjA8L2NvZGU+LCBhbmQgdGhlIHN0cmluZyBzdGFydGluZyBhdCA8dmFyPnM8L3Zhcj4gY29ycmVzcG9uZHMgdG8ganVzdCB0aG9zZQorcGFydHMgb2YgPGNvZGU+KjwvY29kZT48dmFyPmZvcm1hdDwvdmFyPiB0aGF0IGNvdWxkIGJlIGNvbXBsZXRlbHkgZmlsbGVkIGluIHdpdGhpbiB0aGUKKzx2YXI+bWF4c2l6ZTwvdmFyPiBsaW1pdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5zdHJmdGltZTwvY29kZT4sIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBjb250ZW50cyBvZgorPGNvZGU+KjwvY29kZT48dmFyPnM8L3Zhcj4gd2hlbiB0aGUgZm9ybWF0dGVkIHN0cmluZyB3b3VsZCByZXF1aXJlIG1vcmUgdGhhbgorPHZhcj5tYXhzaXplPC92YXI+IGNoYXJhY3RlcnMuICBVbnJlY29nbml6ZWQgc3BlY2lmaWVycyBhbmQgZmllbGRzIG9mCis8Y29kZT50aW1wPC9jb2RlPiB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UgY2F1c2UgdW5kZWZpbmVkIHJlc3VsdHMuICBTaW5jZSBzb21lCitmb3JtYXRzIGV4cGFuZCB0byAwIGJ5dGVzLCBpdCBpcyB3aXNlIHRvIHNldCA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiB0byBhIG5vbnplcm8KK3ZhbHVlIGJlZm9yZWhhbmQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBmYWlsdXJlIGFuZCBhbiBlbXB0eSBzdHJpbmcuIAorVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IDxjb2RlPnM8L2NvZGU+IGJlaW5nIE5VTEwsIG5vciBvdmVybGFwcGluZworPGNvZGU+czwvY29kZT4gYW5kIDxjb2RlPmZvcm1hdDwvY29kZT4uCisKKyAgIDxwPjxjb2RlPnN0cmZ0aW1lPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPkJ1Z3M8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJmdGltZTwvY29kZT4gaWdub3JlcyB0aGUgTENfVElNRSBjYXRlZ29yeSBvZiB0aGUgY3VycmVudCBsb2NhbGUsIGhhcmQtY29kaW5nCit0aGUgIkMiIGxvY2FsZSBzZXR0aW5ncy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJsZW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cmxlbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNDgyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJsZW4uaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJsZW4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cmVycm9yXzAwNWZyLmh0bWwjc3RyZXJyb3JfMDA1ZnIiIHRpdGxlPSJzdHJlcnJvcl9yIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RybHdyLmh0bWwjc3RybHdyIiB0aXRsZT0ic3RybHdyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJsZW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RybHdyLmh0bWwjc3RybHdyIj5zdHJsd3I8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJlcnJvcl8wMDVmci5odG1sI3N0cmVycm9yXzAwNWZyIj5zdHJlcnJvcl9yPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjI2IDxjb2RlPnN0cmxlbjwvY29kZT4mbWRhc2g7Y2hhcmFjdGVyIHN0cmluZyBsZW5ndGg8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJsZW4tMzk0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqPHZhcj5zdHI8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5zdHJsZW48L2NvZGU+IGZ1bmN0aW9uIHdvcmtzIG91dCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKK3N0YXJ0aW5nIGF0IDxjb2RlPio8L2NvZGU+PHZhcj5zdHI8L3Zhcj4gYnkgY291bnRpbmcgY2hhcmFyYWN0ZXJzIHVudGlsIGl0CityZWFjaGVzIGEgPGNvZGU+TlVMTDwvY29kZT4gY2hhcmFjdGVyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJsZW48L2NvZGU+IHJldHVybnMgdGhlIGNoYXJhY3RlciBjb3VudC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cmxlbjwvY29kZT4gaXMgQU5TSSBDLgorCisgICA8cD48Y29kZT5zdHJsZW48L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RybHdyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJsd3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2NhOWIxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RybHdyLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3RybHdyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJsZW4uaHRtbCNzdHJsZW4iIHRpdGxlPSJzdHJsZW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJuY2FzZWNtcC5odG1sI3N0cm5jYXNlY21wIiB0aXRsZT0ic3RybmNhc2VjbXAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cmx3ciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJuY2FzZWNtcC5odG1sI3N0cm5jYXNlY21wIj5zdHJuY2FzZWNtcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cmxlbi5odG1sI3N0cmxlbiI+c3RybGVuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjI3IDxjb2RlPnN0cmx3cjwvY29kZT4mbWRhc2g7Zm9yY2Ugc3RyaW5nIHRvIGxvd2VyY2FzZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cmx3ci0zOTUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgY2hhciAqc3RybHdyKGNoYXIgKjx2YXI+YTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RybHdyPC9jb2RlPiBjb252ZXJ0cyBlYWNoIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGF0IDx2YXI+YTwvdmFyPiB0bworbG93ZXJjYXNlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJsd3I8L2NvZGU+IHJldHVybnMgaXRzIGFyZ3VtZW50LCA8dmFyPmE8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJsd3I8L2NvZGU+IGlzIG5vdCB3aWRlbHkgcG9ydGFibGUuCisKKyAgIDxwPjxjb2RlPnN0cmx3cjwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJuY2FzZWNtcC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RybmNhc2VjbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWNmYzkzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RybmNhc2VjbXAuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJuY2FzZWNtcCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3RybHdyLmh0bWwjc3RybHdyIiB0aXRsZT0ic3RybHdyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RybmNhdC5odG1sI3N0cm5jYXQiIHRpdGxlPSJzdHJuY2F0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJuY2FzZWNtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJuY2F0Lmh0bWwjc3RybmNhdCI+c3RybmNhdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cmx3ci5odG1sI3N0cmx3ciI+c3RybHdyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjI4IDxjb2RlPnN0cm5jYXNlY21wPC9jb2RlPiZtZGFzaDtjYXNlLWluc2Vuc2l0aXZlIGNoYXJhY3RlciBzdHJpbmcgY29tcGFyZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cm5jYXNlY21wLTM5NiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZ3MuaCZndDsKKyAgICAgaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKjx2YXI+YTwvdmFyPiwgY29uc3QgY2hhciAqIDx2YXI+YjwvdmFyPiwgc2l6ZV90IDx2YXI+bGVuZ3RoPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJuY2FzZWNtcDwvY29kZT4gY29tcGFyZXMgdXAgdG8gPHZhcj5sZW5ndGg8L3Zhcj4gY2hhcmFjdGVycworZnJvbSB0aGUgc3RyaW5nIGF0IDx2YXI+YTwvdmFyPiB0byB0aGUgc3RyaW5nIGF0IDx2YXI+YjwvdmFyPiBpbiBhCitjYXNlLWluc2Vuc2l0aXZlIG1hbm5lci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorCisgICA8cD5JZiA8Y29kZT4qPC9jb2RlPjx2YXI+YTwvdmFyPiBzb3J0cyBsZXhpY29ncmFwaGljYWxseSBhZnRlciA8Y29kZT4qPC9jb2RlPjx2YXI+YjwvdmFyPiAoYWZ0ZXIKK2JvdGggYXJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UpLCA8Y29kZT5zdHJuY2FzZWNtcDwvY29kZT4gcmV0dXJucyBhCitudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8uICBJZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWl2YWxlbnQsCis8Y29kZT5zdHJuY2FzZWNtcDwvY29kZT4gcmV0dXJucyB6ZXJvLiAgSWYgPGNvZGU+KjwvY29kZT48dmFyPmE8L3Zhcj4gc29ydHMKK2xleGljb2dyYXBoaWNhbGx5IGJlZm9yZSA8Y29kZT4qPC9jb2RlPjx2YXI+YjwvdmFyPiwgPGNvZGU+c3RybmNhc2VjbXA8L2NvZGU+IHJldHVybnMgYQorbnVtYmVyIGxlc3MgdGhhbiB6ZXJvLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RybmNhc2VjbXA8L2NvZGU+IGlzIGluIHRoZSBCZXJrZWxleSBTb2Z0d2FyZSBEaXN0cmlidXRpb24uCisKKyAgIDxwPjxjb2RlPnN0cm5jYXNlY21wPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLiBJdCB1c2VzCit0b2xvd2VyKCkgZnJvbSBlbHNld2hlcmUgaW4gdGhpcyBsaWJyYXJ5LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cm5jYXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cm5jYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGQxYzU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RybmNhdC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cm5jYXQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cm5jYXNlY21wLmh0bWwjc3RybmNhc2VjbXAiIHRpdGxlPSJzdHJuY2FzZWNtcCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cm5jbXAuaHRtbCNzdHJuY21wIiB0aXRsZT0ic3RybmNtcCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RybmNhdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJuY21wLmh0bWwjc3RybmNtcCI+c3RybmNtcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cm5jYXNlY21wLmh0bWwjc3RybmNhc2VjbXAiPnN0cm5jYXNlY21wPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjI5IDxjb2RlPnN0cm5jYXQ8L2NvZGU+Jm1kYXNoO2NvbmNhdGVuYXRlIHN0cmluZ3M8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJuY2F0LTM5NyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICBjaGFyICpzdHJuY2F0KGNoYXIgKnJlc3RyaWN0IDx2YXI+ZHN0PC92YXI+LCBjb25zdCBjaGFyICpyZXN0cmljdCA8dmFyPnNyYzwvdmFyPiwKKyAgICAgICAgIHNpemVfdCA8dmFyPmxlbmd0aDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RybmNhdDwvY29kZT4gYXBwZW5kcyBub3QgbW9yZSB0aGFuIDx2YXI+bGVuZ3RoPC92YXI+IGNoYXJhY3RlcnMgZnJvbQordGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+c3JjPC92YXI+IChpbmNsdWRpbmcgdGhlCXRlcm1pbmF0aW5nCitudWxsIGNoYXJhY3RlcikgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkKKzx2YXI+ZHN0PC92YXI+LiAgVGhlIGluaXRpYWwgY2hhcmFjdGVyIG9mIDx2YXI+c3JjPC92YXI+IG92ZXJ3cml0ZXMgdGhlIG51bGwKK2NoYXJhY3RlciBhdCB0aGUgZW5kIG9mIDx2YXI+ZHN0PC92YXI+LiAgQSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlcgoraXMgYWx3YXlzIGFwcGVuZGVkIHRvIHRoZSByZXN1bHQKKworICAgPHA+PGJyPgorPHN0cm9uZz5XYXJuaW5nczwvc3Ryb25nPjxicj4KK05vdGUgdGhhdCBhIG51bGwgaXMgYWx3YXlzIGFwcGVuZGVkLCBzbyB0aGF0IGlmIHRoZSBjb3B5IGlzCitsaW1pdGVkIGJ5IHRoZSA8dmFyPmxlbmd0aDwvdmFyPiBhcmd1bWVudCwgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCithcHBlbmRlZCB0byA8dmFyPmRzdDwvdmFyPiBpcyA8Y29kZT5uICsgMTwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiA8dmFyPmRzdDwvdmFyPgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RybmNhdDwvY29kZT4gaXMgQU5TSSBDLgorCisgICA8cD48Y29kZT5zdHJuY2F0PC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cm5jbXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cm5jbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDM1ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RybmNtcC5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cm5jbXAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cm5jYXQuaHRtbCNzdHJuY2F0IiB0aXRsZT0ic3RybmNhdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cm5jcHkuaHRtbCNzdHJuY3B5IiB0aXRsZT0ic3RybmNweSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RybmNtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJuY3B5Lmh0bWwjc3RybmNweSI+c3RybmNweTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cm5jYXQuaHRtbCNzdHJuY2F0Ij5zdHJuY2F0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjMwIDxjb2RlPnN0cm5jbXA8L2NvZGU+Jm1kYXNoO2NoYXJhY3RlciBzdHJpbmcgY29tcGFyZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cm5jbXAtMzk4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKjx2YXI+YTwvdmFyPiwgY29uc3QgY2hhciAqIDx2YXI+YjwvdmFyPiwgc2l6ZV90IDx2YXI+bGVuZ3RoPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJuY21wPC9jb2RlPiBjb21wYXJlcyB1cCB0byA8dmFyPmxlbmd0aDwvdmFyPiBjaGFyYWN0ZXJzCitmcm9tIHRoZSBzdHJpbmcgYXQgPHZhcj5hPC92YXI+IHRvIHRoZSBzdHJpbmcgYXQgPHZhcj5iPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitJZiA8Y29kZT4qPC9jb2RlPjx2YXI+YTwvdmFyPiBzb3J0cyBsZXhpY29ncmFwaGljYWxseSBhZnRlciA8Y29kZT4qPC9jb2RlPjx2YXI+YjwvdmFyPiwKKzxjb2RlPnN0cm5jbXA8L2NvZGU+IHJldHVybnMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8uICBJZiB0aGUgdHdvCitzdHJpbmdzIGFyZSBlcXVpdmFsZW50LCA8Y29kZT5zdHJuY21wPC9jb2RlPiByZXR1cm5zIHplcm8uICBJZiA8Y29kZT4qPC9jb2RlPjx2YXI+YTwvdmFyPgorc29ydHMgbGV4aWNvZ3JhcGhpY2FsbHkgYmVmb3JlIDxjb2RlPio8L2NvZGU+PHZhcj5iPC92YXI+LCA8Y29kZT5zdHJuY21wPC9jb2RlPiByZXR1cm5zIGEKK251bWJlciBsZXNzIHRoYW4gemVyby4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cm5jbXA8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+PGNvZGU+c3RybmNtcDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJuY3B5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJuY3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0YzgxMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cm5jcHkuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJuY3B5IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJuY21wLmh0bWwjc3RybmNtcCIgdGl0bGU9InN0cm5jbXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJubGVuLmh0bWwjc3RybmxlbiIgdGl0bGU9InN0cm5sZW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cm5jcHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3Rybmxlbi5odG1sI3N0cm5sZW4iPnN0cm5sZW48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJuY21wLmh0bWwjc3RybmNtcCI+c3RybmNtcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4zMSA8Y29kZT5zdHJuY3B5PC9jb2RlPiZtZGFzaDtjb3VudGVkIGNvcHkgc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RybmNweS0zOTkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKKyAgICAgY2hhciAqc3RybmNweShjaGFyICpyZXN0cmljdCA8dmFyPmRzdDwvdmFyPiwgY29uc3QgY2hhciAqcmVzdHJpY3QgPHZhcj5zcmM8L3Zhcj4sCisgICAgICAgICBzaXplX3QgPHZhcj5sZW5ndGg8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cm5jcHk8L2NvZGU+IGNvcGllcyBub3QgbW9yZSB0aGFuIDx2YXI+bGVuZ3RoPC92YXI+IGNoYXJhY3RlcnMgZnJvbSB0aGUKK3RoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnNyYzwvdmFyPiAoaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZworbnVsbCBjaGFyYWN0ZXIpIHRvIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDx2YXI+ZHN0PC92YXI+LiAgSWYgdGhlCitzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnNyYzwvdmFyPiBpcyBzaG9ydGVyIHRoYW4gPHZhcj5sZW5ndGg8L3Zhcj4KK2NoYXJhY3RlcnMsIG51bGwgY2hhcmFjdGVycyBhcmUgYXBwZW5kZWQgdG8gdGhlIGRlc3RpbmF0aW9uCithcnJheSB1bnRpbCBhIHRvdGFsIG9mIDx2YXI+bGVuZ3RoPC92YXI+IGNoYXJhY3RlcnMgaGF2ZSBiZWVuCit3cml0dGVuLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGluaXRpYWwgdmFsdWUgb2YgPHZhcj5kc3Q8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJuY3B5PC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPnN0cm5jcHk8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3Rybmxlbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3Rybmxlbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZTNmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJubGVuLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3RybmxlbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3RybmNweS5odG1sI3N0cm5jcHkiIHRpdGxlPSJzdHJuY3B5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RycGJyay5odG1sI3N0cnBicmsiIHRpdGxlPSJzdHJwYnJrIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJubGVuIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cnBicmsuaHRtbCNzdHJwYnJrIj5zdHJwYnJrPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3RybmNweS5odG1sI3N0cm5jcHkiPnN0cm5jcHk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMzIgPGNvZGU+c3RybmxlbjwvY29kZT4mbWRhc2g7Y2hhcmFjdGVyIHN0cmluZyBsZW5ndGg8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJubGVuLTQwMCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICo8dmFyPnN0cjwvdmFyPiwgc2l6ZV90IDx2YXI+bjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPnN0cm5sZW48L2NvZGU+IGZ1bmN0aW9uIHdvcmtzIG91dCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKK3N0YXJ0aW5nIGF0IDxjb2RlPio8L2NvZGU+PHZhcj5zdHI8L3Zhcj4gYnkgY291bnRpbmcgY2hhcmFyYWN0ZXJzIHVudGlsIGl0CityZWFjaGVzIGEgTlVMIGNoYXJhY3RlciBvciB0aGUgbWF4aW11bTogPHZhcj5uPC92YXI+IG51bWJlciBvZgorY2hhcmFjdGVycyBoYXZlIGJlZW4gaW5zcGVjdGVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJubGVuPC9jb2RlPiByZXR1cm5zIHRoZSBjaGFyYWN0ZXIgY291bnQgb3IgPHZhcj5uPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RybmxlbjwvY29kZT4gaXMgYSBHTlUgZXh0ZW5zaW9uLgorCisgICA8cD48Y29kZT5zdHJubGVuPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnBicmsuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnBicmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGEwODY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RycGJyay5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cnBicmsgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cm5sZW4uaHRtbCNzdHJubGVuIiB0aXRsZT0ic3RybmxlbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cnJjaHIuaHRtbCNzdHJyY2hyIiB0aXRsZT0ic3RycmNociI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RycGJyayI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJyY2hyLmh0bWwjc3RycmNociI+c3RycmNocjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cm5sZW4uaHRtbCNzdHJubGVuIj5zdHJubGVuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjMzIDxjb2RlPnN0cnBicms8L2NvZGU+Jm1kYXNoO2ZpbmQgY2hhcmFjdGVycyBpbiBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJwYnJrLTQwMSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICBjaGFyICpzdHJwYnJrKGNvbnN0IGNoYXIgKjx2YXI+czE8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+czI8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoaXMgZnVuY3Rpb24gbG9jYXRlcyB0aGUgZmlyc3Qgb2NjdXJlbmNlIGluIHRoZSBzdHJpbmcKK3BvaW50ZWQgdG8gYnkgPHZhcj5zMTwvdmFyPiBvZiBhbnkgY2hhcmFjdGVyIGluIHN0cmluZyBwb2ludGVkIHRvIGJ5Cis8dmFyPnMyPC92YXI+IChleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyKS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RycGJyazwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBmb3VuZCBpbiA8dmFyPnMxPC92YXI+LCBvciBhCitudWxsIHBvaW50ZXIgaWYgbm8gY2hhcmFjdGVyIGZyb20gPHZhcj5zMjwvdmFyPiBvY2N1cnMgaW4gPHZhcj5zMTwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cnBicms8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RycmNoci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RycmNoci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYWZlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJyY2hyLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3RycmNociAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3RycGJyay5odG1sI3N0cnBicmsiIHRpdGxlPSJzdHJwYnJrIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3Ryc2lnbmFsLmh0bWwjc3Ryc2lnbmFsIiB0aXRsZT0ic3Ryc2lnbmFsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJyY2hyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cnNpZ25hbC5odG1sI3N0cnNpZ25hbCI+c3Ryc2lnbmFsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3RycGJyay5odG1sI3N0cnBicmsiPnN0cnBicms8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMzQgPGNvZGU+c3RycmNocjwvY29kZT4mbWRhc2g7cmV2ZXJzZSBzZWFyY2ggZm9yIGNoYXJhY3RlciBpbiBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJyY2hyLTQwMiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICBjaGFyICogc3RycmNocihjb25zdCBjaGFyICo8dmFyPnN0cmluZzwvdmFyPiwgaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgbGFzdCBvY2N1cmVuY2Ugb2YgPHZhcj5jPC92YXI+IChjb252ZXJ0ZWQgdG8KK2EgY2hhcikgaW4gdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+c3RyaW5nPC92YXI+IChpbmNsdWRpbmcgdGhlCit0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3RlcikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1JldHVybnMgYSBwb2ludGVyIHRvIHRoZSBsb2NhdGVkIGNoYXJhY3Rlciwgb3IgYSBudWxsIHBvaW50ZXIKK2lmIDx2YXI+YzwvdmFyPiBkb2VzIG5vdCBvY2N1ciBpbiA8dmFyPnN0cmluZzwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cnJjaHI8L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+PGNvZGU+c3RycmNocjwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJzaWduYWwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnNpZ25hbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OWQ2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJzaWduYWwuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJzaWduYWwgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cnJjaHIuaHRtbCNzdHJyY2hyIiB0aXRsZT0ic3RycmNociI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cnNwbi5odG1sI3N0cnNwbiIgdGl0bGU9InN0cnNwbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3Ryc2lnbmFsIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cnNwbi5odG1sI3N0cnNwbiI+c3Ryc3BuPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3RycmNoci5odG1sI3N0cnJjaHIiPnN0cnJjaHI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMzUgPGNvZGU+c3Ryc2lnbmFsPC9jb2RlPiZtZGFzaDtjb252ZXJ0IHNpZ25hbCBudW1iZXIgdG8gc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3Ryc2lnbmFsLTQwMyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICBjaGFyICpzdHJzaWduYWwoaW50IDx2YXI+c2lnbmFsPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJzaWduYWw8L2NvZGU+IGNvbnZlcnRzIHRoZSBzaWduYWwgbnVtYmVyIDx2YXI+c2lnbmFsPC92YXI+IGludG8gYQorc3RyaW5nLiAgSWYgPHZhcj5zaWduYWw8L3Zhcj4gaXMgbm90IGEga25vd24gc2lnbmFsIG51bWJlciwgdGhlIHJlc3VsdAord2lsbCBiZSBvZiB0aGUgZm9ybSAiVW5rbm93biBzaWduYWwgTk4iIHdoZXJlIE5OIGlzIHRoZSA8dmFyPnNpZ25hbDwvdmFyPgoraXMgYSBkZWNpbWFsIG51bWJlci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cmluZy4gIFlvdXIgYXBwbGljYXRpb24gbXVzdAorbm90IG1vZGlmeSB0aGF0IHN0cmluZy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1BPU0lYLjEtMjAwOCBDIHJlcXVpcmVzIDxjb2RlPnN0cnNpZ25hbDwvY29kZT4sIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBzdHJpbmdzIHVzZWQKK2ZvciBlYWNoIHNpZ25hbCBudW1iZXIuCisKKyAgIDxwPjxjb2RlPnN0cnNpZ25hbDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJzcG4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnNwbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2M2Y4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJzcG4uaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJzcG4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cnNpZ25hbC5odG1sI3N0cnNpZ25hbCIgdGl0bGU9InN0cnNpZ25hbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cnN0ci5odG1sI3N0cnN0ciIgdGl0bGU9InN0cnN0ciI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3Ryc3BuIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cnN0ci5odG1sI3N0cnN0ciI+c3Ryc3RyPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3Ryc2lnbmFsLmh0bWwjc3Ryc2lnbmFsIj5zdHJzaWduYWw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMzYgPGNvZGU+c3Ryc3BuPC9jb2RlPiZtZGFzaDtmaW5kIGluaXRpYWwgbWF0Y2g8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJzcG4tNDA0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqPHZhcj5zMTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5zMjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YKK3RoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnMxPC92YXI+IHdoaWNoIGNvbnNpc3RzIGVudGlyZWx5IG9mCitjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czI8L3Zhcj4gKGV4Y2x1ZGluZyB0aGUKK3Rlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyKS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+c3Ryc3BuPC9jb2RlPiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHNlZ21lbnQgZm91bmQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJzcG48L2NvZGU+IGlzIEFOU0kgQy4KKworICAgPHA+PGNvZGU+c3Ryc3BuPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnN0ci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3Ryc3RyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwY2I5MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnN0ci5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cnN0ciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3Ryc3BuLmh0bWwjc3Ryc3BuIiB0aXRsZT0ic3Ryc3BuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3RydG9rLmh0bWwjc3RydG9rIiB0aXRsZT0ic3RydG9rIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzdHJzdHIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RydG9rLmh0bWwjc3RydG9rIj5zdHJ0b2s8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJzcG4uaHRtbCNzdHJzcG4iPnN0cnNwbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS4zNyA8Y29kZT5zdHJzdHI8L2NvZGU+Jm1kYXNoO2ZpbmQgc3RyaW5nIHNlZ21lbnQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJzdHItNDA1Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIGNoYXIgKnN0cnN0cihjb25zdCBjaGFyICo8dmFyPnMxPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPnMyPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitMb2NhdGVzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIGluIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnMxPC92YXI+IG9mCit0aGUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgPHZhcj5zMjwvdmFyPgorKGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIpLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbG9jYXRlZCBzdHJpbmcgc2VnbWVudCwgb3IgYSBudWxsCitwb2ludGVyIGlmIHRoZSBzdHJpbmcgPHZhcj5zMjwvdmFyPiBpcyBub3QgZm91bmQuIElmIDx2YXI+czI8L3Zhcj4gcG9pbnRzIHRvCithIHN0cmluZyB3aXRoIHplcm8gbGVuZ3RoLCA8dmFyPnMxPC92YXI+IGlzIHJldHVybmVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3Ryc3RyPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPnN0cnN0cjwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJ0b2QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnRvZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmODg1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJ0b2QuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJ0b2QgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InJhbmQ0OC5odG1sI3JhbmQ0OCIgdGl0bGU9InJhbmQ0OCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cnRvbC5odG1sI3N0cnRvbCIgdGl0bGU9InN0cnRvbCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RydG9kIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cnRvbC5odG1sI3N0cnRvbCI+c3RydG9sPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0icmFuZDQ4Lmh0bWwjcmFuZDQ4Ij5yYW5kNDg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMzQgPGNvZGU+c3RydG9kPC9jb2RlPiwgPGNvZGU+c3RydG9mPC9jb2RlPiZtZGFzaDtzdHJpbmcgdG8gZG91YmxlIG9yIGZsb2F0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RydG9kLTc5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZzdHJ0b2RfMDA1ZnItODAiPjwvYT48YSBuYW1lPSJpbmRleC1zdHJ0b2YtODEiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgZG91YmxlIHN0cnRvZChjb25zdCBjaGFyICo8dmFyPnN0cjwvdmFyPiwgY2hhciAqKjx2YXI+dGFpbDwvdmFyPik7CisgICAgIGZsb2F0IHN0cnRvZihjb25zdCBjaGFyICo8dmFyPnN0cjwvdmFyPiwgY2hhciAqKjx2YXI+dGFpbDwvdmFyPik7CisgICAgIAorICAgICBkb3VibGUgX3N0cnRvZF9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPnN0cjwvdmFyPiwgY2hhciAqKjx2YXI+dGFpbDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIGZ1bmN0aW9uIDxjb2RlPnN0cnRvZDwvY29kZT4gcGFyc2VzIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIDx2YXI+c3RyPC92YXI+LAorcHJvZHVjaW5nIGEgc3Vic3RyaW5nIHdoaWNoIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBkb3VibGUKK3ZhbHVlLiAgVGhlIHN1YnN0cmluZyBjb252ZXJ0ZWQgaXMgdGhlIGxvbmdlc3QgaW5pdGlhbAorc3Vic2VxdWVuY2Ugb2YgPHZhcj5zdHI8L3Zhcj4sIGJlZ2lubmluZyB3aXRoIHRoZSBmaXJzdAorbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLCB0aGF0IGhhcyBvbmUgb2YgdGhlc2UgZm9ybWF0czoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICBbK3wtXTx2YXI+ZGlnaXRzPC92YXI+Wy5bPHZhcj5kaWdpdHM8L3Zhcj5dXVsoZXxFKVsrfC1dPHZhcj5kaWdpdHM8L3Zhcj5dCisgICAgIFsrfC1dLjx2YXI+ZGlnaXRzPC92YXI+WyhlfEUpWyt8LV08dmFyPmRpZ2l0czwvdmFyPl0KKyAgICAgWyt8LV0oaXxJKShufE4pKGZ8RilbKGl8SSkobnxOKShpfEkpKHR8VCkoeXxZKV0KKyAgICAgWyt8LV0obnxOKShhfEEpKG58TilbJmx0OygmZ3Q7Wzx2YXI+aGV4ZGlnaXRzPC92YXI+XSZsdDspJmd0O10KKyAgICAgWyt8LV0wKHh8WCk8dmFyPmhleGRpZ2l0czwvdmFyPlsuWzx2YXI+aGV4ZGlnaXRzPC92YXI+XV1bKHB8UClbK3wtXTx2YXI+ZGlnaXRzPC92YXI+XQorICAgICBbK3wtXTAoeHxYKS48dmFyPmhleGRpZ2l0czwvdmFyPlsocHxQKVsrfC1dPHZhcj5kaWdpdHM8L3Zhcj5dCis8L3ByZT4KKyAgIDxwPlRoZSBzdWJzdHJpbmcgY29udGFpbnMgbm8gY2hhcmFjdGVycyBpZiA8dmFyPnN0cjwvdmFyPiBpcyBlbXB0eSwgY29uc2lzdHMKK2VudGlyZWx5IG9mIHdoaXRlc3BhY2UsIG9yIGlmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZQorY2hhcmFjdGVyIGlzIHNvbWV0aGluZyBvdGhlciB0aGFuIDxjb2RlPis8L2NvZGU+LCA8Y29kZT4tPC9jb2RlPiwgPGNvZGU+LjwvY29kZT4sIG9yIGEKK2RpZ2l0LCBhbmQgY2Fubm90IGJlIHBhcnNlZCBhcyBpbmZpbml0eSBvciBOYU4uIElmIHRoZSBwbGF0Zm9ybQorZG9lcyBub3Qgc3VwcG9ydCBOYU4sIHRoZW4gTmFOIGlzIHRyZWF0ZWQgYXMgYW4gZW1wdHkgc3Vic3RyaW5nLiAKK0lmIHRoZSBzdWJzdHJpbmcgaXMgZW1wdHksIG5vIGNvbnZlcnNpb24gaXMgZG9uZSwgYW5kCit0aGUgdmFsdWUgb2YgPHZhcj5zdHI8L3Zhcj4gaXMgc3RvcmVkIGluIDxjb2RlPio8L2NvZGU+PHZhcj50YWlsPC92YXI+LiAgT3RoZXJ3aXNlLAordGhlIHN1YnN0cmluZyBpcyBjb252ZXJ0ZWQsIGFuZCBhIHBvaW50ZXIgdG8gdGhlIGZpbmFsIHN0cmluZworKHdoaWNoIHdpbGwgY29udGFpbiBhdCBsZWFzdCB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIgb2YKKzx2YXI+c3RyPC92YXI+KSBpcyBzdG9yZWQgaW4gPGNvZGU+KjwvY29kZT48dmFyPnRhaWw8L3Zhcj4uICBJZiB5b3Ugd2FudCBubworYXNzaWdubWVudCB0byA8Y29kZT4qPC9jb2RlPjx2YXI+dGFpbDwvdmFyPiwgcGFzcyBhIG51bGwgcG9pbnRlciBhcyA8dmFyPnRhaWw8L3Zhcj4uIAorPGNvZGU+c3RydG9mPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+c3RydG9kPC9jb2RlPiBleGNlcHQgZm9yIGl0cyByZXR1cm4gdHlwZS4KKworICAgPHA+VGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSBuZWFyZXN0IG1hY2hpbmUgbnVtYmVyIHRvIHRoZQoraW5wdXQgZGVjaW1hbCBzdHJpbmcuICBUaWVzIGFyZSBicm9rZW4gYnkgdXNpbmcgdGhlIElFRUUKK3JvdW5kLWV2ZW4gcnVsZS4gIEhvd2V2ZXIsIDxjb2RlPnN0cnRvZjwvY29kZT4gaXMgY3VycmVudGx5IHN1YmplY3QgdG8KK2RvdWJsZSByb3VuZGluZyBlcnJvcnMuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X3N0cnRvZF9yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAKK1RoZSBleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJ0b2Q8L2NvZGU+IHJldHVybnMgdGhlIGNvbnZlcnRlZCBzdWJzdHJpbmcgdmFsdWUsIGlmIGFueS4gIElmCitubyBjb252ZXJzaW9uIGNvdWxkIGJlIHBlcmZvcm1lZCwgMCBpcyByZXR1cm5lZC4gIElmIHRoZQorY29ycmVjdCB2YWx1ZSBpcyBvdXQgb2YgdGhlIHJhbmdlIG9mIHJlcHJlc2VudGFibGUgdmFsdWVzLAorcGx1cyBvciBtaW51cyA8Y29kZT5IVUdFX1ZBTDwvY29kZT4gaXMgcmV0dXJuZWQsIGFuZCA8Y29kZT5FUkFOR0U8L2NvZGU+IGlzCitzdG9yZWQgaW4gZXJybm8uIElmIHRoZSBjb3JyZWN0IHZhbHVlIHdvdWxkIGNhdXNlIHVuZGVyZmxvdywgMAoraXMgcmV0dXJuZWQgYW5kIDxjb2RlPkVSQU5HRTwvY29kZT4gaXMgc3RvcmVkIGluIGVycm5vLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RydG9rLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJ0b2suaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ZlZjkwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RydG9rLmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3RydG9rIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJzdHIuaHRtbCNzdHJzdHIiIHRpdGxlPSJzdHJzdHIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJ1cHIuaHRtbCNzdHJ1cHIiIHRpdGxlPSJzdHJ1cHIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cnRvayI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzdHJ1cHIuaHRtbCNzdHJ1cHIiPnN0cnVwcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cnN0ci5odG1sI3N0cnN0ciI+c3Ryc3RyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjM4IDxjb2RlPnN0cnRvazwvY29kZT4sIDxjb2RlPnN0cnRva19yPC9jb2RlPiwgPGNvZGU+c3Ryc2VwPC9jb2RlPiZtZGFzaDtnZXQgbmV4dCB0b2tlbiBmcm9tIGEgc3RyaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RydG9rLTQwNiI+PC9hPjxhIG5hbWU9ImluZGV4LXN0cnRva18wMDVmci00MDciPjwvYT48YSBuYW1lPSJpbmRleC1zdHJzZXAtNDA4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7CisgICAgIGNoYXIgKnN0cnRvayhjaGFyICpyZXN0cmljdCA8dmFyPnNvdXJjZTwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKnJlc3RyaWN0IDx2YXI+ZGVsaW1pdGVyczwvdmFyPikKKyAgICAgY2hhciAqc3RydG9rX3IoY2hhciAqcmVzdHJpY3QgPHZhcj5zb3VyY2U8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICpyZXN0cmljdCA8dmFyPmRlbGltaXRlcnM8L3Zhcj4sCisgICAgICAgICBjaGFyICoqPHZhcj5sYXN0czwvdmFyPikKKyAgICAgY2hhciAqc3Ryc2VwKGNoYXIgKio8dmFyPnNvdXJjZV9wdHI8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+ZGVsaW1pdGVyczwvdmFyPikKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+c3RydG9rPC9jb2RlPiBmdW5jdGlvbiBpcyB1c2VkIHRvIGlzb2xhdGUgc2VxdWVudGlhbCB0b2tlbnMgaW4gYQorbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgPGNvZGU+KjwvY29kZT48dmFyPnNvdXJjZTwvdmFyPi4gVGhlc2UgdG9rZW5zIGFyZSBkZWxpbWl0ZWQKK2luIHRoZSBzdHJpbmcgYnkgYXQgbGVhc3Qgb25lIG9mIHRoZSBjaGFyYWN0ZXJzIGluIDxjb2RlPio8L2NvZGU+PHZhcj5kZWxpbWl0ZXJzPC92YXI+LiAKK1RoZSBmaXJzdCB0aW1lIHRoYXQgPGNvZGU+c3RydG9rPC9jb2RlPiBpcyBjYWxsZWQsIDxjb2RlPio8L2NvZGU+PHZhcj5zb3VyY2U8L3Zhcj4gc2hvdWxkIGJlCitzcGVjaWZpZWQ7IHN1YnNlcXVlbnQgY2FsbHMsIHdpc2hpbmcgdG8gb2J0YWluIGZ1cnRoZXIgdG9rZW5zIGZyb20KK3RoZSBzYW1lIHN0cmluZywgc2hvdWxkIHBhc3MgYSBudWxsIHBvaW50ZXIgaW5zdGVhZC4gIFRoZSBzZXBhcmF0b3IKK3N0cmluZywgPGNvZGU+KjwvY29kZT48dmFyPmRlbGltaXRlcnM8L3Zhcj4sIG11c3QgYmUgc3VwcGxpZWQgZWFjaCB0aW1lIGFuZCBtYXkKK2NoYW5nZSBiZXR3ZWVuIGNhbGxzLgorCisgICA8cD5UaGUgPGNvZGU+c3RydG9rPC9jb2RlPiBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIGVhY2gKK3N1YnNlcXVlbnQgdG9rZW4gaW4gdGhlIHN0cmluZywgYWZ0ZXIgcmVwbGFjaW5nIHRoZSBzZXBhcmF0b3IKK2NoYXJhY3RlciBpdHNlbGYgd2l0aCBhIG51bGwgY2hhcmFjdGVyLiAgV2hlbiBubyBtb3JlIHRva2VucyByZW1haW4sCithIG51bGwgcG9pbnRlciBpcyByZXR1cm5lZC4KKworICAgPHA+VGhlIDxjb2RlPnN0cnRva19yPC9jb2RlPiBmdW5jdGlvbiBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgPGNvZGU+c3RydG9rPC9jb2RlPiwgZXhjZXB0CithIHBvaW50ZXIgdG8gcGxhY2Vob2xkZXIgPGNvZGU+KjwvY29kZT48dmFyPmxhc3RzPC92YXI+IG11c3QgYmUgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4KKworICAgPHA+VGhlIDxjb2RlPnN0cnNlcDwvY29kZT4gZnVuY3Rpb24gaXMgc2ltaWxhciBpbiBiZWhhdmlvciB0byA8Y29kZT5zdHJ0b2s8L2NvZGU+LCBleGNlcHQKK2EgcG9pbnRlciB0byB0aGUgc3RyaW5nIHBvaW50ZXIgbXVzdCBiZSBzdXBwbGllZCA8dmFyPnNvdXJjZV9wdHI8L3Zhcj4gYW5kCit0aGUgZnVuY3Rpb24gZG9lcyBub3Qgc2tpcCBsZWFkaW5nIGRlbGltaXRlcnMuICBXaGVuIHRoZSBzdHJpbmcgc3RhcnRzCit3aXRoIGEgZGVsaW1pdGVyLCB0aGUgZGVsaW1pdGVyIGlzIGNoYW5nZWQgdG8gdGhlIG51bGwgY2hhcmFjdGVyIGFuZAordGhlIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gIExpa2UgPGNvZGU+c3RydG9rX3I8L2NvZGU+IGFuZCA8Y29kZT5zdHJ0b2s8L2NvZGU+LCB0aGUKKzxjb2RlPio8L2NvZGU+PHZhcj5zb3VyY2VfcHRyPC92YXI+IGlzIHVwZGF0ZWQgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUKK2xhc3QgZGVsaW1pdGVyIGZvdW5kIG9yIE5VTEwgaWYgdGhlIGVuZCBvZiBzdHJpbmcgaXMgcmVhY2hlZCB3aXRoCitubyBtb3JlIGRlbGltaXRlcnMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cnRvazwvY29kZT4sIDxjb2RlPnN0cnRva19yPC9jb2RlPiwgYW5kIDxjb2RlPnN0cnNlcDwvY29kZT4gYWxsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCituZXh0IHRva2VuLCBvciA8Y29kZT5OVUxMPC9jb2RlPiBpZiBubyBtb3JlIHRva2VucyBjYW4gYmUgZm91bmQuICBGb3IKKzxjb2RlPnN0cnNlcDwvY29kZT4sIGEgdG9rZW4gbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJ0b2s8L2NvZGU+IGlzIEFOU0kgQy4gCis8Y29kZT5zdHJ0b2tfcjwvY29kZT4gaXMgUE9TSVguIAorPGNvZGU+c3Ryc2VwPC9jb2RlPiBpcyBhIEJTRCBleHRlbnNpb24uCisKKyAgIDxwPjxjb2RlPnN0cnRvazwvY29kZT4sIDxjb2RlPnN0cnRva19yPC9jb2RlPiwgYW5kIDxjb2RlPnN0cnNlcDwvY29kZT4gcmVxdWlyZSBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnRvbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RydG9sLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1Y2U4NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnRvbC5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJ0b2wgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cnRvZC5odG1sI3N0cnRvZCIgdGl0bGU9InN0cnRvZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cnRvbGwuaHRtbCNzdHJ0b2xsIiB0aXRsZT0ic3RydG9sbCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RydG9sIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cnRvbGwuaHRtbCNzdHJ0b2xsIj5zdHJ0b2xsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3RydG9kLmh0bWwjc3RydG9kIj5zdHJ0b2Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMzUgPGNvZGU+c3RydG9sPC9jb2RlPiZtZGFzaDtzdHJpbmcgdG8gbG9uZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cnRvbC04MiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmc3RydG9sXzAwNWZyLTgzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGxvbmcgc3RydG9sKGNvbnN0IGNoYXIgKjx2YXI+czwvdmFyPiwgY2hhciAqKjx2YXI+cHRyPC92YXI+LGludCA8dmFyPmJhc2U8L3Zhcj4pOworICAgICAKKyAgICAgbG9uZyBfc3RydG9sX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKjx2YXI+czwvdmFyPiwgY2hhciAqKjx2YXI+cHRyPC92YXI+LGludCA8dmFyPmJhc2U8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSBmdW5jdGlvbiA8Y29kZT5zdHJ0b2w8L2NvZGU+IGNvbnZlcnRzIHRoZSBzdHJpbmcgPGNvZGU+KjwvY29kZT48dmFyPnM8L3Zhcj4gdG8KK2EgPGNvZGU+bG9uZzwvY29kZT4uIEZpcnN0LCBpdCBicmVha3MgZG93biB0aGUgc3RyaW5nIGludG8gdGhyZWUgcGFydHM6CitsZWFkaW5nIHdoaXRlc3BhY2UsIHdoaWNoIGlzIGlnbm9yZWQ7IGEgc3ViamVjdCBzdHJpbmcgY29uc2lzdGluZworb2YgY2hhcmFjdGVycyByZXNlbWJsaW5nIGFuIGludGVnZXIgaW4gdGhlIHJhZGl4IHNwZWNpZmllZCBieSA8dmFyPmJhc2U8L3Zhcj47CithbmQgYSB0cmFpbGluZyBwb3J0aW9uIGNvbnNpc3Rpbmcgb2YgemVybyBvciBtb3JlIHVucGFyc2VhYmxlIGNoYXJhY3RlcnMsCithbmQgYWx3YXlzIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuIFRoZW4sIGl0IGF0dGVtcHRzCit0byBjb252ZXJ0IHRoZSBzdWJqZWN0IHN0cmluZyBpbnRvIGEgPGNvZGU+bG9uZzwvY29kZT4gYW5kIHJldHVybnMgdGhlCityZXN1bHQuCisKKyAgIDxwPklmIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgMCwgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGxvb2sKK2xpa2UgYSBub3JtYWwgQyBpbnRlZ2VyIGNvbnN0YW50OiBhbiBvcHRpb25hbCBzaWduLCBhIHBvc3NpYmxlIGA8Y29kZT4weDwvY29kZT4nCitpbmRpY2F0aW5nIGEgaGV4YWRlY2ltYWwgYmFzZSwgYW5kIGEgbnVtYmVyLiBJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgYmV0d2VlbgorMiBhbmQgMzYsIHRoZSBleHBlY3RlZCBmb3JtIG9mIHRoZSBzdWJqZWN0IGlzIGEgc2VxdWVuY2Ugb2YgbGV0dGVycworYW5kIGRpZ2l0cyByZXByZXNlbnRpbmcgYW4gaW50ZWdlciBpbiB0aGUgcmFkaXggc3BlY2lmaWVkIGJ5IDx2YXI+YmFzZTwvdmFyPiwKK3dpdGggYW4gb3B0aW9uYWwgcGx1cyBvciBtaW51cyBzaWduLiBUaGUgbGV0dGVycyA8Y29kZT5hPC9jb2RlPiZuZGFzaDs8Y29kZT56PC9jb2RlPiAob3IsCitlcXVpdmFsZW50bHksIDxjb2RlPkE8L2NvZGU+Jm5kYXNoOzxjb2RlPlo8L2NvZGU+KSBhcmUgdXNlZCB0byBzaWduaWZ5IHZhbHVlcyBmcm9tIDEwIHRvIDM1Oworb25seSBsZXR0ZXJzIHdob3NlIGFzY3JpYmVkIHZhbHVlcyBhcmUgbGVzcyB0aGFuIDx2YXI+YmFzZTwvdmFyPiBhcmUKK3Blcm1pdHRlZC4gSWYgPHZhcj5iYXNlPC92YXI+IGlzIDE2LCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHBlcm1pdHRlZC4KKworICAgPHA+VGhlIHN1YmplY3Qgc2VxdWVuY2UgaXMgdGhlIGxvbmdlc3QgaW5pdGlhbCBzZXF1ZW5jZSBvZiB0aGUgaW5wdXQKK3N0cmluZyB0aGF0IGhhcyB0aGUgZXhwZWN0ZWQgZm9ybSwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QKK25vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci4gIElmIHRoZSBzdHJpbmcgaXMgZW1wdHkgb3IgY29uc2lzdHMgZW50aXJlbHkKK29mIHdoaXRlc3BhY2UsIG9yIGlmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgbm90IGEKK3Blcm1pc3NpYmxlIGxldHRlciBvciBkaWdpdCwgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5LgorCisgICA8cD5JZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgYWNjZXB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgemVybywKKzxjb2RlPnN0cnRvbDwvY29kZT4gYXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHRoZSByYWRpeCBmcm9tIHRoZSBpbnB1dCBzdHJpbmcuIEEKK3N0cmluZyB3aXRoIGEgbGVhZGluZyA8Y29kZT4weDwvY29kZT4gaXMgdHJlYXRlZCBhcyBhIGhleGFkZWNpbWFsIHZhbHVlOyBhIHN0cmluZyB3aXRoCithIGxlYWRpbmcgMCBhbmQgbm8gPGNvZGU+eDwvY29kZT4gaXMgdHJlYXRlZCBhcyBvY3RhbDsgYWxsIG90aGVyIHN0cmluZ3MgYXJlCit0cmVhdGVkIGFzIGRlY2ltYWwuIElmIDx2YXI+YmFzZTwvdmFyPiBpcyBiZXR3ZWVuIDIgYW5kIDM2LCBpdCBpcyB1c2VkIGFzIHRoZQorY29udmVyc2lvbiByYWRpeCwgYXMgZGVzY3JpYmVkIGFib3ZlLiBJZiB0aGUgc3ViamVjdCBzdHJpbmcgYmVnaW5zIHdpdGgKK2EgbWludXMgc2lnbiwgdGhlIHZhbHVlIGlzIG5lZ2F0ZWQuIEZpbmFsbHksIGEgcG9pbnRlciB0byB0aGUgZmlyc3QKK2NoYXJhY3RlciBwYXN0IHRoZSBjb252ZXJ0ZWQgc3ViamVjdCBzdHJpbmcgaXMgc3RvcmVkIGluIDx2YXI+cHRyPC92YXI+LCBpZgorPHZhcj5wdHI8L3Zhcj4gaXMgbm90IDxjb2RlPk5VTEw8L2NvZGU+LgorCisgICA8cD5JZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgZW1wdHkgKG9yIG5vdCBpbiBhY2NlcHRhYmxlIGZvcm0pLCBubyBjb252ZXJzaW9uCitpcyBwZXJmb3JtZWQgYW5kIHRoZSB2YWx1ZSBvZiA8dmFyPnM8L3Zhcj4gaXMgc3RvcmVkIGluIDx2YXI+cHRyPC92YXI+IChpZiA8dmFyPnB0cjwvdmFyPiBpcworbm90IDxjb2RlPk5VTEw8L2NvZGU+KS4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fc3RydG9sX3I8L2NvZGU+IGlzIGEgcmVlbnRyYW50IHZlcnNpb24uICBUaGUKK2V4dHJhIGFyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cnRvbDwvY29kZT4gcmV0dXJucyB0aGUgY29udmVydGVkIHZhbHVlLCBpZiBhbnkuIElmIG5vIGNvbnZlcnNpb24gd2FzCittYWRlLCAwIGlzIHJldHVybmVkLgorCisgICA8cD48Y29kZT5zdHJ0b2w8L2NvZGU+IHJldHVybnMgPGNvZGU+TE9OR19NQVg8L2NvZGU+IG9yIDxjb2RlPkxPTkdfTUlOPC9jb2RlPiBpZiB0aGUgbWFnbml0dWRlIG9mCit0aGUgY29udmVydGVkIHZhbHVlIGlzIHRvbyBsYXJnZSwgYW5kIHNldHMgPGNvZGU+ZXJybm88L2NvZGU+IHRvIDxjb2RlPkVSQU5HRTwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJ0b2w8L2NvZGU+IGlzIEFOU0kuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnRvbGwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnRvbGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJiM2UyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RydG9sbC5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJ0b2xsIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJ0b2wuaHRtbCNzdHJ0b2wiIHRpdGxlPSJzdHJ0b2wiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJ0b3VsLmh0bWwjc3RydG91bCIgdGl0bGU9InN0cnRvdWwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cnRvbGwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RydG91bC5odG1sI3N0cnRvdWwiPnN0cnRvdWw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJ0b2wuaHRtbCNzdHJ0b2wiPnN0cnRvbDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4zNiA8Y29kZT5zdHJ0b2xsPC9jb2RlPiZtZGFzaDtzdHJpbmcgdG8gbG9uZyBsb25nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RydG9sbC04NCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmc3RydG9sbF8wMDVmci04NSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBsb25nIGxvbmcgc3RydG9sbChjb25zdCBjaGFyICo8dmFyPnM8L3Zhcj4sIGNoYXIgKio8dmFyPnB0cjwvdmFyPixpbnQgPHZhcj5iYXNlPC92YXI+KTsKKyAgICAgCisgICAgIGxvbmcgbG9uZyBfc3RydG9sbF9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPnM8L3Zhcj4sIGNoYXIgKio8dmFyPnB0cjwvdmFyPixpbnQgPHZhcj5iYXNlPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgZnVuY3Rpb24gPGNvZGU+c3RydG9sbDwvY29kZT4gY29udmVydHMgdGhlIHN0cmluZyA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiB0bworYSA8Y29kZT5sb25nIGxvbmc8L2NvZGU+LiBGaXJzdCwgaXQgYnJlYWtzIGRvd24gdGhlIHN0cmluZyBpbnRvIHRocmVlIHBhcnRzOgorbGVhZGluZyB3aGl0ZXNwYWNlLCB3aGljaCBpcyBpZ25vcmVkOyBhIHN1YmplY3Qgc3RyaW5nIGNvbnNpc3RpbmcKK29mIGNoYXJhY3RlcnMgcmVzZW1ibGluZyBhbiBpbnRlZ2VyIGluIHRoZSByYWRpeCBzcGVjaWZpZWQgYnkgPHZhcj5iYXNlPC92YXI+OworYW5kIGEgdHJhaWxpbmcgcG9ydGlvbiBjb25zaXN0aW5nIG9mIHplcm8gb3IgbW9yZSB1bnBhcnNlYWJsZSBjaGFyYWN0ZXJzLAorYW5kIGFsd2F5cyBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLiBUaGVuLCBpdCBhdHRlbXB0cwordG8gY29udmVydCB0aGUgc3ViamVjdCBzdHJpbmcgaW50byBhIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4gYW5kIHJldHVybnMgdGhlCityZXN1bHQuCisKKyAgIDxwPklmIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgMCwgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGxvb2sKK2xpa2UgYSBub3JtYWwgQyBpbnRlZ2VyIGNvbnN0YW50OiBhbiBvcHRpb25hbCBzaWduLCBhIHBvc3NpYmxlIGA8Y29kZT4weDwvY29kZT4nCitpbmRpY2F0aW5nIGEgaGV4YWRlY2ltYWwgYmFzZSwgYW5kIGEgbnVtYmVyLiBJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgYmV0d2VlbgorMiBhbmQgMzYsIHRoZSBleHBlY3RlZCBmb3JtIG9mIHRoZSBzdWJqZWN0IGlzIGEgc2VxdWVuY2Ugb2YgbGV0dGVycworYW5kIGRpZ2l0cyByZXByZXNlbnRpbmcgYW4gaW50ZWdlciBpbiB0aGUgcmFkaXggc3BlY2lmaWVkIGJ5IDx2YXI+YmFzZTwvdmFyPiwKK3dpdGggYW4gb3B0aW9uYWwgcGx1cyBvciBtaW51cyBzaWduLiBUaGUgbGV0dGVycyA8Y29kZT5hPC9jb2RlPiZuZGFzaDs8Y29kZT56PC9jb2RlPiAob3IsCitlcXVpdmFsZW50bHksIDxjb2RlPkE8L2NvZGU+Jm5kYXNoOzxjb2RlPlo8L2NvZGU+KSBhcmUgdXNlZCB0byBzaWduaWZ5IHZhbHVlcyBmcm9tIDEwIHRvIDM1Oworb25seSBsZXR0ZXJzIHdob3NlIGFzY3JpYmVkIHZhbHVlcyBhcmUgbGVzcyB0aGFuIDx2YXI+YmFzZTwvdmFyPiBhcmUKK3Blcm1pdHRlZC4gSWYgPHZhcj5iYXNlPC92YXI+IGlzIDE2LCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHBlcm1pdHRlZC4KKworICAgPHA+VGhlIHN1YmplY3Qgc2VxdWVuY2UgaXMgdGhlIGxvbmdlc3QgaW5pdGlhbCBzZXF1ZW5jZSBvZiB0aGUgaW5wdXQKK3N0cmluZyB0aGF0IGhhcyB0aGUgZXhwZWN0ZWQgZm9ybSwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QKK25vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci4gIElmIHRoZSBzdHJpbmcgaXMgZW1wdHkgb3IgY29uc2lzdHMgZW50aXJlbHkKK29mIHdoaXRlc3BhY2UsIG9yIGlmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgbm90IGEKK3Blcm1pc3NpYmxlIGxldHRlciBvciBkaWdpdCwgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5LgorCisgICA8cD5JZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgYWNjZXB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgemVybywKKzxjb2RlPnN0cnRvbGw8L2NvZGU+IGF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgcmFkaXggZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiBBCitzdHJpbmcgd2l0aCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHRyZWF0ZWQgYXMgYSBoZXhhZGVjaW1hbCB2YWx1ZTsgYSBzdHJpbmcgd2l0aAorYSBsZWFkaW5nIDAgYW5kIG5vIDxjb2RlPng8L2NvZGU+IGlzIHRyZWF0ZWQgYXMgb2N0YWw7IGFsbCBvdGhlciBzdHJpbmdzIGFyZQordHJlYXRlZCBhcyBkZWNpbWFsLiBJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgYmV0d2VlbiAyIGFuZCAzNiwgaXQgaXMgdXNlZCBhcyB0aGUKK2NvbnZlcnNpb24gcmFkaXgsIGFzIGRlc2NyaWJlZCBhYm92ZS4gSWYgdGhlIHN1YmplY3Qgc3RyaW5nIGJlZ2lucyB3aXRoCithIG1pbnVzIHNpZ24sIHRoZSB2YWx1ZSBpcyBuZWdhdGVkLiBGaW5hbGx5LCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0CitjaGFyYWN0ZXIgcGFzdCB0aGUgY29udmVydGVkIHN1YmplY3Qgc3RyaW5nIGlzIHN0b3JlZCBpbiA8dmFyPnB0cjwvdmFyPiwgaWYKKzx2YXI+cHRyPC92YXI+IGlzIG5vdCA8Y29kZT5OVUxMPC9jb2RlPi4KKworICAgPHA+SWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5IChvciBub3QgaW4gYWNjZXB0YWJsZSBmb3JtKSwgbm8gY29udmVyc2lvbgoraXMgcGVyZm9ybWVkIGFuZCB0aGUgdmFsdWUgb2YgPHZhcj5zPC92YXI+IGlzIHN0b3JlZCBpbiA8dmFyPnB0cjwvdmFyPiAoaWYgPHZhcj5wdHI8L3Zhcj4gaXMKK25vdCA8Y29kZT5OVUxMPC9jb2RlPikuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X3N0cnRvbGxfcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbi4gIFRoZQorZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RydG9sbDwvY29kZT4gcmV0dXJucyB0aGUgY29udmVydGVkIHZhbHVlLCBpZiBhbnkuIElmIG5vIGNvbnZlcnNpb24gd2FzCittYWRlLCAwIGlzIHJldHVybmVkLgorCisgICA8cD48Y29kZT5zdHJ0b2xsPC9jb2RlPiByZXR1cm5zIDxjb2RlPkxPTkdfTE9OR19NQVg8L2NvZGU+IG9yIDxjb2RlPkxPTkdfTE9OR19NSU48L2NvZGU+IGlmIHRoZSBtYWduaXR1ZGUgb2YKK3RoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgdG9vIGxhcmdlLCBhbmQgc2V0cyA8Y29kZT5lcnJubzwvY29kZT4gdG8gPGNvZGU+RVJBTkdFPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cnRvbGw8L2NvZGU+IGlzIEFOU0kuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnRvdWwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnRvdWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGYzZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RydG91bC5odG1sCkBAIC0wLDAgKzEsMTA2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJ0b3VsIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJ0b2xsLmh0bWwjc3RydG9sbCIgdGl0bGU9InN0cnRvbGwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzdHJ0b3VsbC5odG1sI3N0cnRvdWxsIiB0aXRsZT0ic3RydG91bGwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN0cnRvdWwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ic3RydG91bGwuaHRtbCNzdHJ0b3VsbCI+c3RydG91bGw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJ0b2xsLmh0bWwjc3RydG9sbCI+c3RydG9sbDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4zNyA8Y29kZT5zdHJ0b3VsPC9jb2RlPiZtZGFzaDtzdHJpbmcgdG8gdW5zaWduZWQgbG9uZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cnRvdWwtODYiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnN0cnRvdWxfMDA1ZnItODciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgdW5zaWduZWQgbG9uZyBzdHJ0b3VsKGNvbnN0IGNoYXIgKjx2YXI+czwvdmFyPiwgY2hhciAqKjx2YXI+cHRyPC92YXI+LAorICAgICAgICAgaW50IDx2YXI+YmFzZTwvdmFyPik7CisgICAgIAorICAgICB1bnNpZ25lZCBsb25nIF9zdHJ0b3VsX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5zPC92YXI+LAorICAgICAgICAgY2hhciAqKjx2YXI+cHRyPC92YXI+LCBpbnQgPHZhcj5iYXNlPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgZnVuY3Rpb24gPGNvZGU+c3RydG91bDwvY29kZT4gY29udmVydHMgdGhlIHN0cmluZyA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiB0bworYW4gPGNvZGU+dW5zaWduZWQgbG9uZzwvY29kZT4uIEZpcnN0LCBpdCBicmVha3MgZG93biB0aGUgc3RyaW5nIGludG8gdGhyZWUgcGFydHM6CitsZWFkaW5nIHdoaXRlc3BhY2UsIHdoaWNoIGlzIGlnbm9yZWQ7IGEgc3ViamVjdCBzdHJpbmcgY29uc2lzdGluZworb2YgdGhlIGRpZ2l0cyBtZWFuaW5nZnVsIGluIHRoZSByYWRpeCBzcGVjaWZpZWQgYnkgPHZhcj5iYXNlPC92YXI+CisoZm9yIGV4YW1wbGUsIDxjb2RlPjA8L2NvZGU+IHRocm91Z2ggPGNvZGU+NzwvY29kZT4gaWYgdGhlIHZhbHVlIG9mIDx2YXI+YmFzZTwvdmFyPiBpcyA4KTsKK2FuZCBhIHRyYWlsaW5nIHBvcnRpb24gY29uc2lzdGluZyBvZiBvbmUgb3IgbW9yZSB1bnBhcnNlYWJsZSBjaGFyYWN0ZXJzLAord2hpY2ggYWx3YXlzIGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4gVGhlbiwgaXQgYXR0ZW1wdHMKK3RvIGNvbnZlcnQgdGhlIHN1YmplY3Qgc3RyaW5nIGludG8gYW4gdW5zaWduZWQgbG9uZyBpbnRlZ2VyLCBhbmQgcmV0dXJucyB0aGUKK3Jlc3VsdC4KKworICAgPHA+SWYgdGhlIHZhbHVlIG9mIDx2YXI+YmFzZTwvdmFyPiBpcyB6ZXJvLCB0aGUgc3ViamVjdCBzdHJpbmcgaXMgZXhwZWN0ZWQgdG8gbG9vaworbGlrZSBhIG5vcm1hbCBDIGludGVnZXIgY29uc3RhbnQgKHNhdmUgdGhhdCBubyBvcHRpb25hbCBzaWduIGlzIHBlcm1pdHRlZCk6CithIHBvc3NpYmxlIDxjb2RlPjB4PC9jb2RlPiBpbmRpY2F0aW5nIGhleGFkZWNpbWFsIHJhZGl4LCBhbmQgYSBudW1iZXIuIAorSWYgPHZhcj5iYXNlPC92YXI+IGlzIGJldHdlZW4gMiBhbmQgMzYsIHRoZSBleHBlY3RlZCBmb3JtIG9mIHRoZSBzdWJqZWN0IGlzIGEKK3NlcXVlbmNlIG9mIGRpZ2l0cyAod2hpY2ggbWF5IGluY2x1ZGUgbGV0dGVycywgZGVwZW5kaW5nIG9uIHRoZQorYmFzZSkgcmVwcmVzZW50aW5nIGFuIGludGVnZXIgaW4gdGhlIHJhZGl4IHNwZWNpZmllZCBieSA8dmFyPmJhc2U8L3Zhcj4uIAorVGhlIGxldHRlcnMgPGNvZGU+YTwvY29kZT4mbmRhc2g7PGNvZGU+ejwvY29kZT4gKG9yIDxjb2RlPkE8L2NvZGU+Jm5kYXNoOzxjb2RlPlo8L2NvZGU+KSBhcmUgdXNlZCBhcyBkaWdpdHMgdmFsdWVkIGZyb20KKzEwIHRvIDM1LiBJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgMTYsIGEgbGVhZGluZyA8Y29kZT4weDwvY29kZT4gaXMgcGVybWl0dGVkLgorCisgICA8cD5UaGUgc3ViamVjdCBzZXF1ZW5jZSBpcyB0aGUgbG9uZ2VzdCBpbml0aWFsIHNlcXVlbmNlIG9mIHRoZSBpbnB1dAorc3RyaW5nIHRoYXQgaGFzIHRoZSBleHBlY3RlZCBmb3JtLCBzdGFydGluZyB3aXRoIHRoZSBmaXJzdAorbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLiAgSWYgdGhlIHN0cmluZyBpcyBlbXB0eSBvciBjb25zaXN0cyBlbnRpcmVseQorb2Ygd2hpdGVzcGFjZSwgb3IgaWYgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBub3QgYQorcGVybWlzc2libGUgZGlnaXQsIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBlbXB0eS4KKworICAgPHA+SWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGFjY2VwdGFibGUsIGFuZCB0aGUgdmFsdWUgb2YgPHZhcj5iYXNlPC92YXI+IGlzIHplcm8sCis8Y29kZT5zdHJ0b3VsPC9jb2RlPiBhdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIHJhZGl4IGZyb20gdGhlIGlucHV0IHN0cmluZy4gQQorc3RyaW5nIHdpdGggYSBsZWFkaW5nIDxjb2RlPjB4PC9jb2RlPiBpcyB0cmVhdGVkIGFzIGEgaGV4YWRlY2ltYWwgdmFsdWU7IGEgc3RyaW5nIHdpdGgKK2EgbGVhZGluZyA8Y29kZT4wPC9jb2RlPiBhbmQgbm8gPGNvZGU+eDwvY29kZT4gaXMgdHJlYXRlZCBhcyBvY3RhbDsgYWxsIG90aGVyIHN0cmluZ3MgYXJlCit0cmVhdGVkIGFzIGRlY2ltYWwuIElmIDx2YXI+YmFzZTwvdmFyPiBpcyBiZXR3ZWVuIDIgYW5kIDM2LCBpdCBpcyB1c2VkIGFzIHRoZQorY29udmVyc2lvbiByYWRpeCwgYXMgZGVzY3JpYmVkIGFib3ZlLiBGaW5hbGx5LCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0CitjaGFyYWN0ZXIgcGFzdCB0aGUgY29udmVydGVkIHN1YmplY3Qgc3RyaW5nIGlzIHN0b3JlZCBpbiA8dmFyPnB0cjwvdmFyPiwgaWYKKzx2YXI+cHRyPC92YXI+IGlzIG5vdCA8Y29kZT5OVUxMPC9jb2RlPi4KKworICAgPHA+SWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5ICh0aGF0IGlzLCBpZiA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiBkb2VzIG5vdCBzdGFydAord2l0aCBhIHN1YnN0cmluZyBpbiBhY2NlcHRhYmxlIGZvcm0pLCBubyBjb252ZXJzaW9uCitpcyBwZXJmb3JtZWQgYW5kIHRoZSB2YWx1ZSBvZiA8dmFyPnM8L3Zhcj4gaXMgc3RvcmVkIGluIDx2YXI+cHRyPC92YXI+IChpZiA8dmFyPnB0cjwvdmFyPiBpcworbm90IDxjb2RlPk5VTEw8L2NvZGU+KS4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fc3RydG91bF9yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAgVGhlCitleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJ0b3VsPC9jb2RlPiByZXR1cm5zIHRoZSBjb252ZXJ0ZWQgdmFsdWUsIGlmIGFueS4gSWYgbm8gY29udmVyc2lvbiB3YXMKK21hZGUsIDxjb2RlPjA8L2NvZGU+IGlzIHJldHVybmVkLgorCisgICA8cD48Y29kZT5zdHJ0b3VsPC9jb2RlPiByZXR1cm5zIDxjb2RlPlVMT05HX01BWDwvY29kZT4gaWYgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29udmVydGVkCit2YWx1ZSBpcyB0b28gbGFyZ2UsIGFuZCBzZXRzIDxjb2RlPmVycm5vPC9jb2RlPiB0byA8Y29kZT5FUkFOR0U8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c3RydG91bDwvY29kZT4gaXMgQU5TSS4KKworICAgPHA+PGNvZGU+c3RydG91bDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJ0b3VsbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RydG91bGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGUxMTNkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RydG91bGwuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3RydG91bGwgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cnRvdWwuaHRtbCNzdHJ0b3VsIiB0aXRsZT0ic3RydG91bCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Indjc3J0b21icy5odG1sI3djc3J0b21icyIgdGl0bGU9Indjc3J0b21icyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RydG91bGwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzcnRvbWJzLmh0bWwjd2NzcnRvbWJzIj53Y3NydG9tYnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJ0b3VsLmh0bWwjc3RydG91bCI+c3RydG91bDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4zOCA8Y29kZT5zdHJ0b3VsbDwvY29kZT4mbWRhc2g7c3RyaW5nIHRvIHVuc2lnbmVkIGxvbmcgbG9uZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXN0cnRvdWxsLTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZzdHJ0b3VsbF8wMDVmci04OSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAqPHZhcj5zPC92YXI+LCBjaGFyICoqPHZhcj5wdHI8L3Zhcj4sCisgICAgICAgICBpbnQgPHZhcj5iYXNlPC92YXI+KTsKKyAgICAgCisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfc3RydG91bGxfcih2b2lkICo8dmFyPnJlZW50PC92YXI+LCBjb25zdCBjaGFyICo8dmFyPnM8L3Zhcj4sCisgICAgICAgICBjaGFyICoqPHZhcj5wdHI8L3Zhcj4sIGludCA8dmFyPmJhc2U8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSBmdW5jdGlvbiA8Y29kZT5zdHJ0b3VsbDwvY29kZT4gY29udmVydHMgdGhlIHN0cmluZyA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiB0bworYW4gPGNvZGU+dW5zaWduZWQgbG9uZyBsb25nPC9jb2RlPi4gRmlyc3QsIGl0IGJyZWFrcyBkb3duIHRoZSBzdHJpbmcgaW50byB0aHJlZSBwYXJ0czoKK2xlYWRpbmcgd2hpdGVzcGFjZSwgd2hpY2ggaXMgaWdub3JlZDsgYSBzdWJqZWN0IHN0cmluZyBjb25zaXN0aW5nCitvZiB0aGUgZGlnaXRzIG1lYW5pbmdmdWwgaW4gdGhlIHJhZGl4IHNwZWNpZmllZCBieSA8dmFyPmJhc2U8L3Zhcj4KKyhmb3IgZXhhbXBsZSwgPGNvZGU+MDwvY29kZT4gdGhyb3VnaCA8Y29kZT43PC9jb2RlPiBpZiB0aGUgdmFsdWUgb2YgPHZhcj5iYXNlPC92YXI+IGlzIDgpOworYW5kIGEgdHJhaWxpbmcgcG9ydGlvbiBjb25zaXN0aW5nIG9mIG9uZSBvciBtb3JlIHVucGFyc2VhYmxlIGNoYXJhY3RlcnMsCit3aGljaCBhbHdheXMgaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLiBUaGVuLCBpdCBhdHRlbXB0cwordG8gY29udmVydCB0aGUgc3ViamVjdCBzdHJpbmcgaW50byBhbiB1bnNpZ25lZCBsb25nIGxvbmcgaW50ZWdlciwgYW5kIHJldHVybnMgdGhlCityZXN1bHQuCisKKyAgIDxwPklmIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgemVybywgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGxvb2sKK2xpa2UgYSBub3JtYWwgQyBpbnRlZ2VyIGNvbnN0YW50IChzYXZlIHRoYXQgbm8gb3B0aW9uYWwgc2lnbiBpcyBwZXJtaXR0ZWQpOgorYSBwb3NzaWJsZSA8Y29kZT4weDwvY29kZT4gaW5kaWNhdGluZyBoZXhhZGVjaW1hbCByYWRpeCwgYW5kIGEgbnVtYmVyLiAKK0lmIDx2YXI+YmFzZTwvdmFyPiBpcyBiZXR3ZWVuIDIgYW5kIDM2LCB0aGUgZXhwZWN0ZWQgZm9ybSBvZiB0aGUgc3ViamVjdCBpcyBhCitzZXF1ZW5jZSBvZiBkaWdpdHMgKHdoaWNoIG1heSBpbmNsdWRlIGxldHRlcnMsIGRlcGVuZGluZyBvbiB0aGUKK2Jhc2UpIHJlcHJlc2VudGluZyBhbiBpbnRlZ2VyIGluIHRoZSByYWRpeCBzcGVjaWZpZWQgYnkgPHZhcj5iYXNlPC92YXI+LiAKK1RoZSBsZXR0ZXJzIDxjb2RlPmE8L2NvZGU+Jm5kYXNoOzxjb2RlPno8L2NvZGU+IChvciA8Y29kZT5BPC9jb2RlPiZuZGFzaDs8Y29kZT5aPC9jb2RlPikgYXJlIHVzZWQgYXMgZGlnaXRzIHZhbHVlZCBmcm9tCisxMCB0byAzNS4gSWYgPHZhcj5iYXNlPC92YXI+IGlzIDE2LCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHBlcm1pdHRlZC4KKworICAgPHA+VGhlIHN1YmplY3Qgc2VxdWVuY2UgaXMgdGhlIGxvbmdlc3QgaW5pdGlhbCBzZXF1ZW5jZSBvZiB0aGUgaW5wdXQKK3N0cmluZyB0aGF0IGhhcyB0aGUgZXhwZWN0ZWQgZm9ybSwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QKK25vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci4gIElmIHRoZSBzdHJpbmcgaXMgZW1wdHkgb3IgY29uc2lzdHMgZW50aXJlbHkKK29mIHdoaXRlc3BhY2UsIG9yIGlmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgbm90IGEKK3Blcm1pc3NpYmxlIGRpZ2l0LCB0aGUgc3ViamVjdCBzdHJpbmcgaXMgZW1wdHkuCisKKyAgIDxwPklmIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBhY2NlcHRhYmxlLCBhbmQgdGhlIHZhbHVlIG9mIDx2YXI+YmFzZTwvdmFyPiBpcyB6ZXJvLAorPGNvZGU+c3RydG91bGw8L2NvZGU+IGF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgcmFkaXggZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiBBCitzdHJpbmcgd2l0aCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHRyZWF0ZWQgYXMgYSBoZXhhZGVjaW1hbCB2YWx1ZTsgYSBzdHJpbmcgd2l0aAorYSBsZWFkaW5nIDxjb2RlPjA8L2NvZGU+IGFuZCBubyA8Y29kZT54PC9jb2RlPiBpcyB0cmVhdGVkIGFzIG9jdGFsOyBhbGwgb3RoZXIgc3RyaW5ncyBhcmUKK3RyZWF0ZWQgYXMgZGVjaW1hbC4gSWYgPHZhcj5iYXNlPC92YXI+IGlzIGJldHdlZW4gMiBhbmQgMzYsIGl0IGlzIHVzZWQgYXMgdGhlCitjb252ZXJzaW9uIHJhZGl4LCBhcyBkZXNjcmliZWQgYWJvdmUuIEZpbmFsbHksIGEgcG9pbnRlciB0byB0aGUgZmlyc3QKK2NoYXJhY3RlciBwYXN0IHRoZSBjb252ZXJ0ZWQgc3ViamVjdCBzdHJpbmcgaXMgc3RvcmVkIGluIDx2YXI+cHRyPC92YXI+LCBpZgorPHZhcj5wdHI8L3Zhcj4gaXMgbm90IDxjb2RlPk5VTEw8L2NvZGU+LgorCisgICA8cD5JZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgZW1wdHkgKHRoYXQgaXMsIGlmIDxjb2RlPio8L2NvZGU+PHZhcj5zPC92YXI+IGRvZXMgbm90IHN0YXJ0Cit3aXRoIGEgc3Vic3RyaW5nIGluIGFjY2VwdGFibGUgZm9ybSksIG5vIGNvbnZlcnNpb24KK2lzIHBlcmZvcm1lZCBhbmQgdGhlIHZhbHVlIG9mIDx2YXI+czwvdmFyPiBpcyBzdG9yZWQgaW4gPHZhcj5wdHI8L3Zhcj4gKGlmIDx2YXI+cHRyPC92YXI+IGlzCitub3QgPGNvZGU+TlVMTDwvY29kZT4pLgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl9zdHJ0b3VsbF9yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAgVGhlCitleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJ0b3VsbDwvY29kZT4gcmV0dXJucyB0aGUgY29udmVydGVkIHZhbHVlLCBpZiBhbnkuIElmIG5vIGNvbnZlcnNpb24gd2FzCittYWRlLCA8Y29kZT4wPC9jb2RlPiBpcyByZXR1cm5lZC4KKworICAgPHA+PGNvZGU+c3RydG91bGw8L2NvZGU+IHJldHVybnMgPGNvZGU+VUxPTkdfTE9OR19NQVg8L2NvZGU+IGlmIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvbnZlcnRlZAordmFsdWUgaXMgdG9vIGxhcmdlLCBhbmQgc2V0cyA8Y29kZT5lcnJubzwvY29kZT4gdG8gPGNvZGU+RVJBTkdFPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cnRvdWxsPC9jb2RlPiBpcyBBTlNJLgorCisgICA8cD48Y29kZT5zdHJ0b3VsbDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJ1cHIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnVwci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzFlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zdHJ1cHIuaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5zdHJ1cHIgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cnRvay5odG1sI3N0cnRvayIgdGl0bGU9InN0cnRvayI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN0cnhmcm0uaHRtbCNzdHJ4ZnJtIiB0aXRsZT0ic3RyeGZybSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RydXByIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN0cnhmcm0uaHRtbCNzdHJ4ZnJtIj5zdHJ4ZnJtPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3RydG9rLmh0bWwjc3RydG9rIj5zdHJ0b2s8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuMzkgPGNvZGU+c3RydXByPC9jb2RlPiZtZGFzaDtmb3JjZSBzdHJpbmcgdG8gdXBwZXJjYXNlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc3RydXByLTQwOSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICBjaGFyICpzdHJ1cHIoY2hhciAqPHZhcj5hPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJ1cHI8L2NvZGU+IGNvbnZlcnRzIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgYXQgPHZhcj5hPC92YXI+IHRvCit1cHBlcmNhc2UuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cnVwcjwvY29kZT4gcmV0dXJucyBpdHMgYXJndW1lbnQsIDx2YXI+YTwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN0cnVwcjwvY29kZT4gaXMgbm90IHdpZGVseSBwb3J0YWJsZS4KKworICAgPHA+PGNvZGU+c3RydXByPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnhmcm0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N0cnhmcm0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWI2MzIzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3RyeGZybS5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN0cnhmcm0gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cnVwci5odG1sI3N0cnVwciIgdGl0bGU9InN0cnVwciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InN3YWIuaHRtbCNzd2FiIiB0aXRsZT0ic3dhYiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3RyeGZybSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzd2FiLmh0bWwjc3dhYiI+c3dhYjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN0cnVwci5odG1sI3N0cnVwciI+c3RydXByPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjQwIDxjb2RlPnN0cnhmcm08L2NvZGU+Jm1kYXNoO3RyYW5zZm9ybSBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zdHJ4ZnJtLTQxMCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworICAgICBzaXplX3Qgc3RyeGZybShjaGFyICpyZXN0cmljdCA8dmFyPnMxPC92YXI+LCBjb25zdCBjaGFyICpyZXN0cmljdCA8dmFyPnMyPC92YXI+LAorICAgICAgICAgc2l6ZV90IDx2YXI+bjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhpcyBmdW5jdGlvbiB0cmFuc2Zvcm1zIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnMyPC92YXI+IGFuZAorcGxhY2VzIHRoZSByZXN1bHRpbmcgc3RyaW5nIGludG8gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkKKzx2YXI+czE8L3Zhcj4uIFRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBzdWNoIHRoYXQgaWYgdGhlIDxjb2RlPnN0cmNtcDwvY29kZT4KK2Z1bmN0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIHR3byB0cmFuc2Zvcm1lZCBzdHJpbmdzLCBpdCByZXR1cm5zCithIHZhbHVlIGdyZWF0ZXIgdGhhbiwgZXF1YWwgdG8sIG9yIGxlc3MgdGhhbiB6ZXJvLAorY29ycmVzcG9pbmRpbmcgdG8gdGhlIHJlc3VsdCBvZiBhIDxjb2RlPnN0cmNvbGw8L2NvZGU+IGZ1bmN0aW9uIGFwcGxpZWQKK3RvIHRoZSBzYW1lIHR3byBvcmlnaW5hbCBzdHJpbmdzLgorCisgICA8cD5ObyBtb3JlIHRoYW4gPHZhcj5uPC92YXI+IGNoYXJhY3RlcnMgYXJlIHBsYWNlZCBpbnRvIHRoZSByZXN1bHRpbmcKK2FycmF5IHBvaW50ZWQgdG8gYnkgPHZhcj5zMTwvdmFyPiwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsCitjaGFyYWN0ZXIuIElmIDx2YXI+bjwvdmFyPiBpcyB6ZXJvLCA8dmFyPnMxPC92YXI+IG1heSBiZSBhIG51bGwgcG9pbnRlci4gSWYKK2NvcHlpbmcgdGFrZXMgcGxhY2UgYmV0d2VlbiBvYmplY3RzIHRoYXQgb3ZlcmxhcCwgdGhlIGJlaGF2aW9yCitpcyB1bmRlZmluZWQuCisKKyAgIDxwPldpdGggYSBDIGxvY2FsZSwgdGhpcyBmdW5jdGlvbiBqdXN0IGNvcGllcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPnN0cnhmcm08L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgdHJhbnNmb3JtZWQgc3RyaW5nCisobm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIpLiBJZiB0aGUgdmFsdWUgcmV0dXJuZWQKK2lzIDx2YXI+bjwvdmFyPiBvciBtb3JlLCB0aGUgY29udGVudHMgb2YgdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkKKzx2YXI+czE8L3Zhcj4gYXJlIGluZGV0ZXJtaW5hdGUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zdHJ4ZnJtPC9jb2RlPiBpcyBBTlNJIEMuCisKKyAgIDxwPjxjb2RlPnN0cnhmcm08L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3dhYi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3dhYi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMWRkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zd2FiLmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3dhYiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiIHRpdGxlPSJTdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3RyeGZybS5odG1sI3N0cnhmcm0iIHRpdGxlPSJzdHJ4ZnJtIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2NzY2FzZWNtcC5odG1sI3djc2Nhc2VjbXAiIHRpdGxlPSJ3Y3NjYXNlY21wIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzd2FiIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Indjc2Nhc2VjbXAuaHRtbCN3Y3NjYXNlY21wIj53Y3NjYXNlY21wPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3RyeGZybS5odG1sI3N0cnhmcm0iPnN0cnhmcm08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyI+U3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjUuNDEgPGNvZGU+c3dhYjwvY29kZT4mbWRhc2g7c3dhcCBhZGphY2VudCBieXRlczwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OworICAgICB2b2lkIHN3YWIoY29uc3Qgdm9pZCAqPHZhcj5pbjwvdmFyPiwgdm9pZCAqPHZhcj5vdXQ8L3Zhcj4sIHNzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGlzIGZ1bmN0aW9uIGNvcGllcyA8dmFyPm48L3Zhcj4gYnl0ZXMgZnJvbSB0aGUgbWVtb3J5IHJlZ2lvbgorcG9pbnRlZCB0byBieSA8dmFyPmluPC92YXI+IHRvIHRoZSBtZW1vcnkgcmVnaW9uIHBvaW50ZWQgdG8gYnkKKzx2YXI+b3V0PC92YXI+LCBleGNoYW5naW5nIGFkamFjZW50IGV2ZW4gYW5kIG9kZCBieXRlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnN3YWI8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3dwcmludGYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N3cHJpbnRmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExZWVkMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N3cHJpbnRmLmh0bWwKQEAgLTAsMCArMSw0OTkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN3cHJpbnRmIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzc2NhbmYuaHRtbCNzc2NhbmYiIHRpdGxlPSJzc2NhbmYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzd3NjYW5mLmh0bWwjc3dzY2FuZiIgdGl0bGU9InN3c2NhbmYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InN3cHJpbnRmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InN3c2NhbmYuaHRtbCNzd3NjYW5mIj5zd3NjYW5mPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3NjYW5mLmh0bWwjc3NjYW5mIj5zc2NhbmY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNjIgPGNvZGU+c3dwcmludGY8L2NvZGU+LCA8Y29kZT5md3ByaW50ZjwvY29kZT4sIDxjb2RlPndwcmludGY8L2NvZGU+Jm1kYXNoO3dpZGUgY2hhcmFjdGVyIGZvcm1hdCBvdXRwdXQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1md3ByaW50Zi0zMDMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZ3cHJpbnRmXzAwNWZyLTMwNCI+PC9hPjxhIG5hbWU9ImluZGV4LXdwcmludGYtMzA1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ3cHJpbnRmXzAwNWZyLTMwNiI+PC9hPjxhIG5hbWU9ImluZGV4LXN3cHJpbnRmLTMwNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmc3dwcmludGZfMDA1ZnItMzA4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgCisgICAgIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgZndwcmludGYoRklMRSAqPHZhcj5mZDwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBzd3ByaW50Zih3Y2hhcl90ICo8dmFyPnN0cjwvdmFyPiwgc2l6ZV90IDx2YXI+c2l6ZTwvdmFyPiwKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICAKKyAgICAgaW50IF93cHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgX2Z3cHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIEZJTEUgKjx2YXI+ZmQ8L3Zhcj4sCisgICAgICAgICBjb25zdCB3Y2hhcl90ICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IF9zd3ByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCB3Y2hhcl90ICo8dmFyPnN0cjwvdmFyPiwKKyAgICAgICAgIHNpemVfdCA8dmFyPnNpemU8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPndwcmludGY8L2NvZGU+IGFjY2VwdHMgYSBzZXJpZXMgb2YgYXJndW1lbnRzLCBhcHBsaWVzIHRvIGVhY2ggYQorZm9ybWF0IHNwZWNpZmllciBmcm9tIDxjb2RlPio8L2NvZGU+PHZhcj5mb3JtYXQ8L3Zhcj4sIGFuZCB3cml0ZXMgdGhlCitmb3JtYXR0ZWQgZGF0YSB0byA8Y29kZT5zdGRvdXQ8L2NvZGU+LCB3aXRob3V0IGEgdGVybWluYXRpbmcgTlVMCit3aWRlIGNoYXJhY3Rlci4gIFRoZSBiZWhhdmlvciBvZiA8Y29kZT53cHJpbnRmPC9jb2RlPiBpcyB1bmRlZmluZWQgaWYgdGhlcmUKK2FyZSBub3QgZW5vdWdoIGFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBvciBpZiBhbnkgYXJndW1lbnQgaXMgbm90IHRoZQorcmlnaHQgdHlwZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgY29udmVyc2lvbiBzcGVjaWZpZXIuICA8Y29kZT53cHJpbnRmPC9jb2RlPgorcmV0dXJucyB3aGVuIGl0IHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgZm9ybWF0IHN0cmluZy4gIElmIHRoZXJlIGFyZQorbW9yZSBhcmd1bWVudHMgdGhhbiB0aGUgZm9ybWF0IHJlcXVpcmVzLCBleGNlc3MgYXJndW1lbnRzIGFyZQoraWdub3JlZC4KKworICAgPHA+PGNvZGU+ZndwcmludGY8L2NvZGU+IGlzIGxpa2UgPGNvZGU+d3ByaW50ZjwvY29kZT4sIGV4Y2VwdCB0aGF0IG91dHB1dCBpcyBkaXJlY3RlZAordG8gdGhlIHN0cmVhbSA8dmFyPmZkPC92YXI+IHJhdGhlciB0aGFuIDxjb2RlPnN0ZG91dDwvY29kZT4uCisKKyAgIDxwPjxjb2RlPnN3cHJpbnRmPC9jb2RlPiBpcyBsaWtlIDxjb2RlPndwcmludGY8L2NvZGU+LCBleGNlcHQgdGhhdCBvdXRwdXQgaXMgZGlyZWN0ZWQKK3RvIHRoZSBidWZmZXIgPHZhcj5zdHI8L3Zhcj4gd2l0aCBhIHRlcm1pbmF0aW5nIHdpZGUgPGNvZGU+TlVMPC9jb2RlPiwgYW5kIHRoZQorcmVzdWx0aW5nIHN0cmluZyBsZW5ndGggaXMgbGltaXRlZCB0byBhdCBtb3N0IDx2YXI+c2l6ZTwvdmFyPiB3aWRlIGNoYXJhY3RlcnMsCitpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIDxjb2RlPk5VTDwvY29kZT4uICBJdCBpcyBjb25zaWRlcmVkIGFuIGVycm9yIGlmIHRoZQorb3V0cHV0IChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIHdpZGUtPGNvZGU+TlVMTDwvY29kZT4pIGRvZXMgbm90IGZpdCBpbnRvCis8dmFyPnNpemU8L3Zhcj4gd2lkZSBjaGFyYWN0ZXJzLiAgKFRoaXMgZXJyb3IgYmVoYXZpb3IgaXMgbm90IHRoZSBzYW1lIGFzIGZvcgorPGNvZGU+c25wcmludGY8L2NvZGU+LCB3aGljaCA8Y29kZT5zd3ByaW50ZjwvY29kZT4gaXMgb3RoZXJ3aXNlIGNvbXBsZXRlbHkgYW5hbG9nb3VzIHRvLiAKK1doaWxlIDxjb2RlPnNucHJpbnRmPC9jb2RlPiBhbGxvd3MgdGhlIG5lZWRlZCBzaXplIHRvIGJlIGtub3duIHNpbXBseSBieSBnaXZpbmcKKzx2YXI+c2l6ZTwvdmFyPj0wLCA8Y29kZT5zd3ByaW50ZjwvY29kZT4gZG9lcyBub3QsIGdpdmluZyBhbiBlcnJvciBpbnN0ZWFkLikKKworICAgPHA+Rm9yIDxjb2RlPnN3cHJpbnRmPC9jb2RlPiB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIHRoZSBvdXRwdXQKKzxjb2RlPio8L2NvZGU+PHZhcj5zdHI8L3Zhcj4gb3ZlcmxhcHMgd2l0aCBvbmUgb2YgdGhlIGFyZ3VtZW50cy4gIEJlaGF2aW9yIGlzIGFsc28KK3VuZGVmaW5lZCBpZiB0aGUgYXJndW1lbnQgZm9yIDxjb2RlPiVuPC9jb2RlPiB3aXRoaW4gPGNvZGU+KjwvY29kZT48dmFyPmZvcm1hdDwvdmFyPgorb3ZlcmxhcHMgYW5vdGhlciBhcmd1bWVudC4KKworICAgPHA+PHZhcj5mb3JtYXQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGNvbnRhaW5pbmcgdHdvCit0eXBlcyBvZiBvYmplY3RzOiBvcmRpbmFyeSBjaGFyYWN0ZXJzIChvdGhlciB0aGFuIDxjb2RlPiU8L2NvZGU+KSwKK3doaWNoIGFyZSBjb3BpZWQgdW5jaGFuZ2VkIHRvIHRoZSBvdXRwdXQsIGFuZCBjb252ZXJzaW9uCitzcGVjaWZpY2F0aW9ucywgZWFjaCBvZiB3aGljaCBpcyBpbnRyb2R1Y2VkIGJ5IDxjb2RlPiU8L2NvZGU+LiAoVG8KK2luY2x1ZGUgPGNvZGU+JTwvY29kZT4gaW4gdGhlIG91dHB1dCwgdXNlIDxjb2RlPiUlPC9jb2RlPiBpbiB0aGUgZm9ybWF0IHN0cmluZy4pIAorQSBjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gaGFzIHRoZSBmb2xsb3dpbmcgZm9ybToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAlWzx2YXI+cG9zPC92YXI+XVs8dmFyPmZsYWdzPC92YXI+XVs8dmFyPndpZHRoPC92YXI+XVsuPHZhcj5wcmVjPC92YXI+XVs8dmFyPnNpemU8L3Zhcj5dPHZhcj50eXBlPC92YXI+Cis8L3ByZT4KKyAgIDxwPlRoZSBmaWVsZHMgb2YgdGhlIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbiBoYXZlIHRoZSBmb2xsb3dpbmcKK21lYW5pbmdzOgorCisgICAgIDx1bD4KKzxsaT48dmFyPnBvczwvdmFyPgorCisgICAgIDxwPkNvbnZlcnNpb25zIG5vcm1hbGx5IGNvbnN1bWUgYXJndW1lbnRzIGluIHRoZSBvcmRlciB0aGF0IHRoZXkKK2FyZSBwcmVzZW50ZWQuICBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byBjb25zdW1lIGFyZ3VtZW50cworb3V0IG9mIG9yZGVyLCBhbmQgcmV1c2UgYW4gYXJndW1lbnQgZm9yIG1vcmUgdGhhbiBvbmUKK2NvbnZlcnNpb24gc3BlY2lmaWNhdGlvbiAoYWx0aG91Z2ggdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZAoraWYgdGhlIHNhbWUgYXJndW1lbnQgaXMgcmVxdWVzdGVkIHdpdGggZGlmZmVyZW50IHR5cGVzKSwgYnkKK3NwZWNpZnlpbmcgPHZhcj5wb3M8L3Zhcj4sIHdoaWNoIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGZvbGxvd2VkIGJ5CisnJCcuICBUaGUgaW50ZWdlciBtdXN0IGJlIGJldHdlZW4gMSBhbmQgJmx0O05MX0FSR01BWCZndDsgZnJvbQorbGltaXRzLmgsIGFuZCBpZiBhcmd1bWVudCA8Y29kZT4lbiQ8L2NvZGU+IGlzIHJlcXVlc3RlZCwgYWxsIGVhcmxpZXIKK2FyZ3VtZW50cyBtdXN0IGJlIHJlcXVlc3RlZCBzb21ld2hlcmUgd2l0aGluIDx2YXI+Zm9ybWF0PC92YXI+LiAgSWYKK3Bvc2l0aW9uYWwgcGFyYW1ldGVycyBhcmUgdXNlZCwgdGhlbiBhbGwgY29udmVyc2lvbgorc3BlY2lmaWNhdGlvbnMgZXhjZXB0IGZvciA8Y29kZT4lJTwvY29kZT4gbXVzdCBzcGVjaWZ5IGEgcG9zaXRpb24uIAorVGhpcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgbWV0aG9kIGlzIGEgUE9TSVggZXh0ZW5zaW9uIHRvIHRoZSBDCitzdGFuZGFyZCBkZWZpbml0aW9uIGZvciB0aGUgZnVuY3Rpb25zLgorCisgICAgIDxsaT48dmFyPmZsYWdzPC92YXI+CisKKyAgICAgPHA+PHZhcj5mbGFnczwvdmFyPiBpcyBhbiBvcHRpb25hbCBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHdoaWNoIGNvbnRyb2wKK291dHB1dCBqdXN0aWZpY2F0aW9uLCBudW1lcmljIHNpZ25zLCBkZWNpbWFsIHBvaW50cywgdHJhaWxpbmcKK3plcm9zLCBhbmQgb2N0YWwgYW5kIGhleCBwcmVmaXhlcy4gIFRoZSBmbGFnIGNoYXJhY3RlcnMgYXJlCittaW51cyAoPGNvZGU+LTwvY29kZT4pLCBwbHVzICg8Y29kZT4rPC9jb2RlPiksIHNwYWNlICggKSwgemVybyAoPGNvZGU+MDwvY29kZT4pLCBzaGFycAorKDxjb2RlPiM8L2NvZGU+KSwgYW5kIHF1b3RlICg8Y29kZT4nPC9jb2RlPikuICBUaGV5IGNhbiBhcHBlYXIgaW4gYW55Citjb21iaW5hdGlvbiwgYWx0aG91Z2ggbm90IGFsbCBmbGFncyBjYW4gYmUgdXNlZCBmb3IgYWxsCitjb252ZXJzaW9uIHNwZWNpZmljYXRpb24gdHlwZXMuCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JzwvY29kZT48ZGQ+QSBQT1NJWCBleHRlbnNpb24gdG8gdGhlIEMgc3RhbmRhcmQuICBIb3dldmVyLCB0aGlzCitpbXBsZW1lbnRhdGlvbiBwcmVzZW50bHkgdHJlYXRzIGl0IGFzIGEgbm8tb3AsIHdoaWNoCitpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhlIEMgbG9jYWxlLCBhbnl3YXkuICAoSWYKK2l0IGRpZCB3aGF0IGl0IGlzIHN1cHBvc2VkIHRvLCB3aGVuIDx2YXI+dHlwZTwvdmFyPiB3ZXJlIDxjb2RlPmk8L2NvZGU+LAorPGNvZGU+ZDwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT5mPC9jb2RlPiwgPGNvZGU+RjwvY29kZT4sIDxjb2RlPmc8L2NvZGU+LCBvciA8Y29kZT5HPC9jb2RlPiwgdGhlCitpbnRlZ2VyIHBvcnRpb24gb2YgdGhlIGNvbnZlcnNpb24gd291bGQgYmUgZm9ybWF0dGVkCit3aXRoIHRob3VzYW5kcycgZ3JvdXBpbmcgd2lkZSBjaGFyYWN0ZXJzLikKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+LTwvY29kZT48ZGQ+VGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiBpcyBsZWZ0CitqdXN0aWZpZWQsIGFuZCB0aGUgcmlnaHQgaXMgcGFkZGVkIHdpdGgKK2JsYW5rcy4gIElmIHlvdSBkbyBub3QgdXNlIHRoaXMgZmxhZywgdGhlCityZXN1bHQgaXMgcmlnaHQganVzdGlmaWVkLCBhbmQgcGFkZGVkIG9uIHRoZQorbGVmdC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+KzwvY29kZT48ZGQ+VGhlIHJlc3VsdCBvZiBhIHNpZ25lZCBjb252ZXJzaW9uIChhcworZGV0ZXJtaW5lZCBieSA8dmFyPnR5cGU8L3Zhcj4gb2YgPGNvZGU+ZDwvY29kZT4sIDxjb2RlPmk8L2NvZGU+LCA8Y29kZT5hPC9jb2RlPiwKKzxjb2RlPkE8L2NvZGU+LCA8Y29kZT5lPC9jb2RlPiwgPGNvZGU+RTwvY29kZT4sIDxjb2RlPmY8L2NvZGU+LCA8Y29kZT5GPC9jb2RlPiwgPGNvZGU+ZzwvY29kZT4sIG9yCis8Y29kZT5HPC9jb2RlPikgd2lsbCBhbHdheXMgYmVnaW4gd2l0aCBhIHBsdXMgb3IgbWludXMKK3NpZ24uICAoSWYgeW91IGRvIG5vdCB1c2UgdGhpcyBmbGFnLCBwb3NpdGl2ZQordmFsdWVzIGRvIG5vdCBiZWdpbiB3aXRoIGEgcGx1cyBzaWduLikKKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+IiAiIChzcGFjZSk8L2NvZGU+PGRkPklmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzaWduZWQgY29udmVyc2lvbgorc3BlY2lmaWNhdGlvbiBpcyBub3QgYSBzaWduLCBvciBpZiBhIHNpZ25lZAorY29udmVyc2lvbiByZXN1bHRzIGluIG5vIGNoYXJhY3RlcnMsIHRoZQorcmVzdWx0IHdpbGwgYmVnaW4gd2l0aCBhIHNwYWNlLiAgSWYgdGhlIHNwYWNlCisoICkgZmxhZyBhbmQgdGhlIHBsdXMgKDxjb2RlPis8L2NvZGU+KSBmbGFnIGJvdGgKK2FwcGVhciwgdGhlIHNwYWNlIGZsYWcgaXMgaWdub3JlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+MDwvY29kZT48ZGQ+SWYgdGhlIDx2YXI+dHlwZTwvdmFyPiBjaGFyYWN0ZXIgaXMgPGNvZGU+ZDwvY29kZT4sIDxjb2RlPmk8L2NvZGU+LAorPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgPGNvZGU+WDwvY29kZT4sIDxjb2RlPmE8L2NvZGU+LCA8Y29kZT5BPC9jb2RlPiwKKzxjb2RlPmU8L2NvZGU+LCA8Y29kZT5FPC9jb2RlPiwgPGNvZGU+ZjwvY29kZT4sIDxjb2RlPkY8L2NvZGU+LCA8Y29kZT5nPC9jb2RlPiwgb3IgPGNvZGU+RzwvY29kZT46ICBsZWFkaW5nCit6ZXJvcyBhcmUgdXNlZCB0byBwYWQgdGhlIGZpZWxkIHdpZHRoCisoZm9sbG93aW5nIGFueSBpbmRpY2F0aW9uIG9mIHNpZ24gb3IgYmFzZSk7IG5vCitzcGFjZXMgYXJlIHVzZWQgZm9yIHBhZGRpbmcuICBJZiB0aGUgemVybworKDxjb2RlPjA8L2NvZGU+KSBhbmQgbWludXMgKDxjb2RlPi08L2NvZGU+KSBmbGFncyBib3RoIGFwcGVhciwKK3RoZSB6ZXJvICg8Y29kZT4wPC9jb2RlPikgZmxhZyB3aWxsIGJlIGlnbm9yZWQuICBGb3IKKzxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgYW5kIDxjb2RlPlg8L2NvZGU+Citjb252ZXJzaW9ucywgaWYgYSBwcmVjaXNpb24gPHZhcj5wcmVjPC92YXI+IGlzCitzcGVjaWZpZWQsIHRoZSB6ZXJvICg8Y29kZT4wPC9jb2RlPikgZmxhZyBpcyBpZ25vcmVkLgorCisgICAgICAgICAgPHA+Tm90ZSB0aGF0IDxjb2RlPjA8L2NvZGU+IGlzIGludGVycHJldGVkIGFzIGEgZmxhZywgbm90CithcyB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQgd2lkdGguCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPiM8L2NvZGU+PGRkPlRoZSByZXN1bHQgaXMgdG8gYmUgY29udmVydGVkIHRvIGFuCithbHRlcm5hdGl2ZSBmb3JtLCBhY2NvcmRpbmcgdG8gdGhlIDx2YXI+dHlwZTwvdmFyPgorY2hhcmFjdGVyOgorCisgICAgICAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+bzwvY29kZT48ZGQ+SW5jcmVhc2VzIHByZWNpc2lvbiB0byBmb3JjZSB0aGUgZmlyc3QKK2RpZ2l0IG9mIHRoZSByZXN1bHQgdG8gYmUgYSB6ZXJvLgorCisgICAgICAgICAgICAgICA8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPkEgbm9uLXplcm8gcmVzdWx0IHdpbGwgaGF2ZSBhIDxjb2RlPjB4PC9jb2RlPgorcHJlZml4LgorCisgICAgICAgICAgICAgICA8YnI+PGR0Pjxjb2RlPlg8L2NvZGU+PGRkPkEgbm9uLXplcm8gcmVzdWx0IHdpbGwgaGF2ZSBhIDxjb2RlPjBYPC9jb2RlPgorcHJlZml4LgorCisgICAgICAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmEsIEEsIGUsIEUsIGYsIG9yIEY8L2NvZGU+PGRkPlRoZSByZXN1bHQgd2lsbCBhbHdheXMgY29udGFpbiBhCitkZWNpbWFsIHBvaW50IGV2ZW4gaWYgbm8gZGlnaXRzIGZvbGxvdwordGhlIHBvaW50LiAgKE5vcm1hbGx5LCBhIGRlY2ltYWwgcG9pbnQKK2FwcGVhcnMgb25seSBpZiBhIGRpZ2l0IGZvbGxvd3MgaXQuKSAKK1RyYWlsaW5nIHplcm9zIGFyZSByZW1vdmVkLgorCisgICAgICAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmcgb3IgRzwvY29kZT48ZGQ+VGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBjb250YWluIGEKK2RlY2ltYWwgcG9pbnQgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93Cit0aGUgcG9pbnQuICBUcmFpbGluZyB6ZXJvcyBhcmUgbm90CityZW1vdmVkLgorCisgICAgICAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmFsbCBvdGhlcnM8L2NvZGU+PGRkPlVuZGVmaW5lZC4KKworICAgICAgICAgIDwvZGw+CisKKyAgICAgPC9kbD4KKworICAgICA8bGk+PHZhcj53aWR0aDwvdmFyPgorCisgICAgIDxwPjx2YXI+d2lkdGg8L3Zhcj4gaXMgYW4gb3B0aW9uYWwgbWluaW11bSBmaWVsZCB3aWR0aC4gIFlvdSBjYW4KK2VpdGhlciBzcGVjaWZ5IGl0IGRpcmVjdGx5IGFzIGEgZGVjaW1hbCBpbnRlZ2VyLCBvcgoraW5kaXJlY3RseSBieSB1c2luZyBpbnN0ZWFkIGFuIGFzdGVyaXNrICg8Y29kZT4qPC9jb2RlPiksIGluCit3aGljaCBjYXNlIGFuIDxjb2RlPmludDwvY29kZT4gYXJndW1lbnQgaXMgdXNlZCBhcyB0aGUgZmllbGQKK3dpZHRoLiAgSWYgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIHVzZWQsIHRoZW4gdGhlCit3aWR0aCBtdXN0IGFsc28gYmUgc3BlY2lmaWVkIHBvc2l0aW9uYWxseSBhcyA8Y29kZT4qbSQ8L2NvZGU+LAord2l0aCBtIGFzIGEgZGVjaW1hbCBpbnRlZ2VyLiAgTmVnYXRpdmUgZmllbGQgd2lkdGhzCithcmUgdHJlYXRlZCBhcyBzcGVjaWZ5aW5nIHRoZSBtaW51cyAoPGNvZGU+LTwvY29kZT4pIGZsYWcgZm9yCitsZWZ0IGp1c3RmaWNhdGlvbiwgYWxvbmcgd2l0aCBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLiAKK1RoZSByZXN1bHRpbmcgZm9ybWF0IG1heSBiZSB3aWRlciB0aGFuIHRoZSBzcGVjaWZpZWQKK3dpZHRoLgorCisgICAgIDxsaT48dmFyPnByZWM8L3Zhcj4KKworICAgICA8cD48dmFyPnByZWM8L3Zhcj4gaXMgYW4gb3B0aW9uYWwgZmllbGQ7IGlmIHByZXNlbnQsIGl0IGlzCitpbnRyb2R1Y2VkIHdpdGggYDxjb2RlPi48L2NvZGU+JyAoYSBwZXJpb2QpLiBZb3UgY2FuIHNwZWNpZnkKK3RoZSBwcmVjaXNpb24gZWl0aGVyIGRpcmVjdGx5IGFzIGEgZGVjaW1hbCBpbnRlZ2VyIG9yCitpbmRpcmVjdGx5IGJ5IHVzaW5nIGFuIGFzdGVyaXNrICg8Y29kZT4qPC9jb2RlPiksIGluIHdoaWNoIGNhc2UKK2FuIDxjb2RlPmludDwvY29kZT4gYXJndW1lbnQgaXMgdXNlZCBhcyB0aGUgcHJlY2lzaW9uLiAgSWYKK3Bvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSB1c2VkLCB0aGVuIHRoZSBwcmVjaXNpb24gbXVzdAorYWxzbyBiZSBzcGVjaWZpZWQgcG9zaXRpb25hbGx5IGFzIDxjb2RlPiptJDwvY29kZT4sIHdpdGggbSBhcyBhCitkZWNpbWFsIGludGVnZXIuICBTdXBwbHlpbmcgYSBuZWdhdGl2ZSBwcmVjaXNpb24gaXMKK2VxdWl2YWxlbnQgdG8gb21pdHRpbmcgdGhlIHByZWNpc2lvbi4gIElmIG9ubHkgYQorcGVyaW9kIGlzIHNwZWNpZmllZCB0aGUgcHJlY2lzaW9uIGlzIHplcm8uIFRoZSBlZmZlY3QKK2RlcGVuZHMgb24gdGhlIGNvbnZlcnNpb24gPHZhcj50eXBlPC92YXI+LgorCisgICAgICAgICAgPGRsPgorPGR0Pjxjb2RlPmQsIGksIG8sIHUsIHgsIG9yIFg8L2NvZGU+PGRkPk1pbmltdW0gbnVtYmVyIG9mIGRpZ2l0cyB0byBhcHBlYXIuICBJZiBubworcHJlY2lzaW9uIGlzIGdpdmVuLCBkZWZhdWx0cyB0byAxLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5hIG9yIEE8L2NvZGU+PGRkPk51bWJlciBvZiBkaWdpdHMgdG8gYXBwZWFyIGFmdGVyIHRoZSBkZWNpbWFsCitwb2ludC4gIElmIG5vIHByZWNpc2lvbiBpcyBnaXZlbiwgdGhlCitwcmVjaXNpb24gZGVmYXVsdHMgdG8gdGhlIG1pbmltdW0gbmVlZGVkIGZvcgorYW4gZXhhY3QgcmVwcmVzZW50YXRpb24uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmUsIEUsIGYgb3IgRjwvY29kZT48ZGQ+TnVtYmVyIG9mIGRpZ2l0cyB0byBhcHBlYXIgYWZ0ZXIgdGhlIGRlY2ltYWwKK3BvaW50LiAgSWYgbm8gcHJlY2lzaW9uIGlzIGdpdmVuLCB0aGUKK3ByZWNpc2lvbiBkZWZhdWx0cyB0byA2LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5nIG9yIEc8L2NvZGU+PGRkPk1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cy4gIEEKK3ByZWNpc2lvbiBvZiAwIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYQorcHJlY2lzaW9uIG9mIDEuICBJZiBubyBwcmVjaXNpb24gaXMgZ2l2ZW4sIHRoZQorcHJlY2lzaW9uIGRlZmF1bHRzIHRvIDYuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnMgb3IgUzwvY29kZT48ZGQ+TWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBwcmludCBmcm9tIHRoZQorc3RyaW5nLiAgSWYgbm8gcHJlY2lzaW9uIGlzIGdpdmVuLCB0aGUgZW50aXJlCitzdHJpbmcgaXMgcHJpbnRlZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+YWxsIG90aGVyczwvY29kZT48ZGQ+dW5kZWZpbmVkLgorCisgICAgIDwvZGw+CisKKyAgICAgPGxpPjx2YXI+c2l6ZTwvdmFyPgorCisgICAgIDxwPjx2YXI+c2l6ZTwvdmFyPiBpcyBhbiBvcHRpb25hbCBtb2RpZmllciB0aGF0IGNoYW5nZXMgdGhlIGRhdGEKK3R5cGUgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCBoYXMuICBCZWhhdmlvciBpcwordW5zcGVjaWZpZWQgaWYgYSBzaXplIGlzIGdpdmVuIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlCis8dmFyPnR5cGU8L3Zhcj4uCisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+aGg8L2NvZGU+PGRkPldpdGggPGNvZGU+ZDwvY29kZT4sIDxjb2RlPmk8L2NvZGU+LCA8Y29kZT5vPC9jb2RlPiwgPGNvZGU+dTwvY29kZT4sIDxjb2RlPng8L2NvZGU+LCBvcgorPGNvZGU+WDwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBzaG91bGQgYmUKK2NvbnZlcnRlZCB0byBhIDxjb2RlPnNpZ25lZCBjaGFyPC9jb2RlPiBvciA8Y29kZT51bnNpZ25lZAorY2hhcjwvY29kZT4gYmVmb3JlIHByaW50aW5nLgorCisgICAgICAgICAgPHA+V2l0aCA8Y29kZT5uPC9jb2RlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gYSA8Y29kZT5zaWduZWQgY2hhcjwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmg8L2NvZGU+PGRkPldpdGggPGNvZGU+ZDwvY29kZT4sIDxjb2RlPmk8L2NvZGU+LCA8Y29kZT5vPC9jb2RlPiwgPGNvZGU+dTwvY29kZT4sIDxjb2RlPng8L2NvZGU+LCBvcgorPGNvZGU+WDwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBzaG91bGQgYmUKK2NvbnZlcnRlZCB0byBhIDxjb2RlPnNob3J0PC9jb2RlPiBvciA8Y29kZT51bnNpZ25lZCBzaG9ydDwvY29kZT4KK2JlZm9yZSBwcmludGluZy4KKworICAgICAgICAgIDxwPldpdGggPGNvZGU+bjwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBpcyBhCitwb2ludGVyIHRvIGEgPGNvZGU+c2hvcnQ8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5sPC9jb2RlPjxkZD5XaXRoIDxjb2RlPmQ8L2NvZGU+LCA8Y29kZT5pPC9jb2RlPiwgPGNvZGU+bzwvY29kZT4sIDxjb2RlPnU8L2NvZGU+LCA8Y29kZT54PC9jb2RlPiwgb3IKKzxjb2RlPlg8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorPGNvZGU+bG9uZzwvY29kZT4gb3IgPGNvZGU+dW5zaWduZWQgbG9uZzwvY29kZT4uCisKKyAgICAgICAgICA8cD5XaXRoIDxjb2RlPmM8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaGFzCit0eXBlIDxjb2RlPndpbnRfdDwvY29kZT4uCisKKyAgICAgICAgICA8cD5XaXRoIDxjb2RlPnM8L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byA8Y29kZT53Y2hhcl90PC9jb2RlPi4KKworICAgICAgICAgIDxwPldpdGggPGNvZGU+bjwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBpcyBhCitwb2ludGVyIHRvIGEgPGNvZGU+bG9uZzwvY29kZT4uCisKKyAgICAgICAgICA8cD5XaXRoIDxjb2RlPmE8L2NvZGU+LCA8Y29kZT5BPC9jb2RlPiwgPGNvZGU+ZTwvY29kZT4sIDxjb2RlPkU8L2NvZGU+LCA8Y29kZT5mPC9jb2RlPiwgPGNvZGU+RjwvY29kZT4sCis8Y29kZT5nPC9jb2RlPiwgb3IgPGNvZGU+RzwvY29kZT4sIGhhcyBubyBlZmZlY3QgKGJlY2F1c2Ugb2YKK3ZhcmFyZyBwcm9tb3Rpb24gcnVsZXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8KK2Rpc3Rpbmd1aXNoIGJldHdlZW4gPGNvZGU+ZmxvYXQ8L2NvZGU+IGFuZCA8Y29kZT5kb3VibGU8L2NvZGU+KS4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bGw8L2NvZGU+PGRkPldpdGggPGNvZGU+ZDwvY29kZT4sIDxjb2RlPmk8L2NvZGU+LCA8Y29kZT5vPC9jb2RlPiwgPGNvZGU+dTwvY29kZT4sIDxjb2RlPng8L2NvZGU+LCBvcgorPGNvZGU+WDwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBpcyBhCis8Y29kZT5sb25nIGxvbmc8L2NvZGU+IG9yIDxjb2RlPnVuc2lnbmVkIGxvbmcgbG9uZzwvY29kZT4uCisKKyAgICAgICAgICA8cD5XaXRoIDxjb2RlPm48L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmo8L2NvZGU+PGRkPldpdGggPGNvZGU+ZDwvY29kZT4sIDxjb2RlPmk8L2NvZGU+LCA8Y29kZT5vPC9jb2RlPiwgPGNvZGU+dTwvY29kZT4sIDxjb2RlPng8L2NvZGU+LCBvcgorPGNvZGU+WDwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBpcyBhbgorPGNvZGU+aW50bWF4X3Q8L2NvZGU+IG9yIDxjb2RlPnVpbnRtYXhfdDwvY29kZT4uCisKKyAgICAgICAgICA8cD5XaXRoIDxjb2RlPm48L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhbiA8Y29kZT5pbnRtYXhfdDwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPno8L2NvZGU+PGRkPldpdGggPGNvZGU+ZDwvY29kZT4sIDxjb2RlPmk8L2NvZGU+LCA8Y29kZT5vPC9jb2RlPiwgPGNvZGU+dTwvY29kZT4sIDxjb2RlPng8L2NvZGU+LCBvcgorPGNvZGU+WDwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBpcyBhIDxjb2RlPnNpemVfdDwvY29kZT4uCisKKyAgICAgICAgICA8cD5XaXRoIDxjb2RlPm48L2NvZGU+LCBzcGVjaWZpZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhIDxjb2RlPnNpemVfdDwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnQ8L2NvZGU+PGRkPldpdGggPGNvZGU+ZDwvY29kZT4sIDxjb2RlPmk8L2NvZGU+LCA8Y29kZT5vPC9jb2RlPiwgPGNvZGU+dTwvY29kZT4sIDxjb2RlPng8L2NvZGU+LCBvcgorPGNvZGU+WDwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudCBpcyBhCis8Y29kZT5wdHJkaWZmX3Q8L2NvZGU+LgorCisgICAgICAgICAgPHA+V2l0aCA8Y29kZT5uPC9jb2RlPiwgc3BlY2lmaWVzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gYSA8Y29kZT5wdHJkaWZmX3Q8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5MPC9jb2RlPjxkZD5XaXRoIDxjb2RlPmE8L2NvZGU+LCA8Y29kZT5BPC9jb2RlPiwgPGNvZGU+ZTwvY29kZT4sIDxjb2RlPkU8L2NvZGU+LCA8Y29kZT5mPC9jb2RlPiwgPGNvZGU+RjwvY29kZT4sCis8Y29kZT5nPC9jb2RlPiwgb3IgPGNvZGU+RzwvY29kZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBhcmd1bWVudAoraXMgYSA8Y29kZT5sb25nIGRvdWJsZTwvY29kZT4uCisKKyAgICAgPC9kbD4KKworICAgICA8bGk+PHZhcj50eXBlPC92YXI+CisKKyAgICAgPHA+PHZhcj50eXBlPC92YXI+IHNwZWNpZmllcyB3aGF0IGtpbmQgb2YgY29udmVyc2lvbiA8Y29kZT53cHJpbnRmPC9jb2RlPgorcGVyZm9ybXMuICBIZXJlIGlzIGEgdGFibGUgb2YgdGhlc2U6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JTwvY29kZT48ZGQ+UHJpbnRzIHRoZSBwZXJjZW50IGNoYXJhY3RlciAoPGNvZGU+JTwvY29kZT4pLgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5jPC9jb2RlPjxkZD5JZiBubyA8Y29kZT5sPC9jb2RlPiBxdWFsaWZpZXIgaXMgcHJlc2VudCwgdGhlIGludCBhcmd1bWVudCBzaGFsbAorYmUgY29udmVydGVkIHRvIGEgd2lkZSBjaGFyYWN0ZXIgYXMgaWYgYnkgY2FsbGluZwordGhlIGJ0b3djKCkgZnVuY3Rpb24gYW5kIHRoZSByZXN1bHRpbmcgd2lkZSBjaGFyYWN0ZXIKK3NoYWxsIGJlIHdyaXR0ZW4uICBPdGhlcndpc2UsIHRoZSB3aW50X3QgYXJndW1lbnQKK3NoYWxsIGJlIGNvbnZlcnRlZCB0byB3Y2hhcl90LCBhbmQgd3JpdHRlbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+QzwvY29kZT48ZGQ+U2hvcnQgZm9yIDxjb2RlPiVsYzwvY29kZT4uICBBIFBPU0lYIGV4dGVuc2lvbiB0byB0aGUgQyBzdGFuZGFyZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+czwvY29kZT48ZGQ+SWYgbm8gPGNvZGU+bDwvY29kZT4gcXVhbGlmaWVyIGlzIHByZXNlbnQsIHRoZSBhcHBsaWNhdGlvbgorc2hhbGwgZW5zdXJlIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhCitjaGFyYWN0ZXIgYXJyYXkgY29udGFpbmluZyBhIGNoYXJhY3RlciBzZXF1ZW5jZQorYmVnaW5uaW5nIGluIHRoZSBpbml0aWFsIHNoaWZ0IHN0YXRlLiAgQ2hhcmFjdGVycworZnJvbSB0aGUgYXJyYXkgc2hhbGwgYmUgY29udmVydGVkIGFzIGlmIGJ5IHJlcGVhdGVkCitjYWxscyB0byB0aGUgbWJydG93YygpIGZ1bmN0aW9uLCB3aXRoIHRoZSBjb252ZXJzaW9uCitzdGF0ZSBkZXNjcmliZWQgYnkgYW4gbWJzdGF0ZV90IG9iamVjdCBpbml0aWFsaXplZCB0bworemVybyBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBjb252ZXJ0ZWQsIGFuZAord3JpdHRlbiB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSB0ZXJtaW5hdGluZworbnVsbCB3aWRlIGNoYXJhY3Rlci4gSWYgdGhlIHByZWNpc2lvbiBpcyBzcGVjaWZpZWQsCitubyBtb3JlIHRoYW4gdGhhdCBtYW55IHdpZGUgY2hhcmFjdGVycyBzaGFsbCBiZQord3JpdHRlbi4gIElmIHRoZSBwcmVjaXNpb24gaXMgbm90IHNwZWNpZmllZCwgb3IgaXMKK2dyZWF0ZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYXJyYXksIHRoZSBhcHBsaWNhdGlvbgorc2hhbGwgZW5zdXJlIHRoYXQgdGhlIGFycmF5IGNvbnRhaW5zIGEgbnVsbCB3aWRlCitjaGFyYWN0ZXIuCisKKyAgICAgICAgICA8cD5JZiBhbiA8Y29kZT5sPC9jb2RlPiBxdWFsaWZpZXIgaXMgcHJlc2VudCwgdGhlIGFwcGxpY2F0aW9uCitzaGFsbCBlbnN1cmUgdGhhdCB0aGUgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGFuCithcnJheSBvZiB0eXBlIHdjaGFyX3QuIFdpZGUgY2hhcmFjdGVycyBmcm9tIHRoZSBhcnJheQorc2hhbGwgYmUgd3JpdHRlbiB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIGEKK3Rlcm1pbmF0aW5nIG51bGwgd2lkZSBjaGFyYWN0ZXIuIElmIG5vIHByZWNpc2lvbiBpcworc3BlY2lmaWVkLCBvciBpcyBncmVhdGVyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGFycmF5LAordGhlIGFwcGxpY2F0aW9uIHNoYWxsIGVuc3VyZSB0aGF0IHRoZSBhcnJheSBjb250YWlucworYSBudWxsIHdpZGUgY2hhcmFjdGVyLiBJZiBhIHByZWNpc2lvbiBpcyBzcGVjaWZpZWQsCitubyBtb3JlIHRoYW4gdGhhdCBtYW55IHdpZGUgY2hhcmFjdGVycyBzaGFsbCBiZQord3JpdHRlbi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+UzwvY29kZT48ZGQ+U2hvcnQgZm9yIDxjb2RlPiVsczwvY29kZT4uICBBIFBPU0lYIGV4dGVuc2lvbiB0byB0aGUgQyBzdGFuZGFyZC4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZCBvciBpPC9jb2RlPjxkZD5QcmludHMgYSBzaWduZWQgZGVjaW1hbCBpbnRlZ2VyOyB0YWtlcyBhbgorPGNvZGU+aW50PC9jb2RlPi4gIExlYWRpbmcgemVyb3MgYXJlIGluc2VydGVkIGFzCituZWNlc3NhcnkgdG8gcmVhY2ggdGhlIHByZWNpc2lvbi4gIEEgdmFsdWUgb2YgMCB3aXRoCithIHByZWNpc2lvbiBvZiAwIHByb2R1Y2VzIGFuIGVtcHR5IHN0cmluZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bzwvY29kZT48ZGQ+UHJpbnRzIGFuIHVuc2lnbmVkIG9jdGFsIGludGVnZXI7IHRha2VzIGFuCis8Y29kZT51bnNpZ25lZDwvY29kZT4uICBMZWFkaW5nIHplcm9zIGFyZSBpbnNlcnRlZCBhcworbmVjZXNzYXJ5IHRvIHJlYWNoIHRoZSBwcmVjaXNpb24uICBBIHZhbHVlIG9mIDAgd2l0aAorYSBwcmVjaXNpb24gb2YgMCBwcm9kdWNlcyBhbiBlbXB0eSBzdHJpbmcuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnU8L2NvZGU+PGRkPlByaW50cyBhbiB1bnNpZ25lZCBkZWNpbWFsIGludGVnZXI7IHRha2VzIGFuCis8Y29kZT51bnNpZ25lZDwvY29kZT4uICBMZWFkaW5nIHplcm9zIGFyZSBpbnNlcnRlZCBhcworbmVjZXNzYXJ5IHRvIHJlYWNoIHRoZSBwcmVjaXNpb24uICBBIHZhbHVlIG9mIDAgd2l0aAorYSBwcmVjaXNpb24gb2YgMCBwcm9kdWNlcyBhbiBlbXB0eSBzdHJpbmcuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPng8L2NvZGU+PGRkPlByaW50cyBhbiB1bnNpZ25lZCBoZXhhZGVjaW1hbCBpbnRlZ2VyICh1c2luZworPGNvZGU+YWJjZGVmPC9jb2RlPiBhcyBkaWdpdHMgYmV5b25kIDxjb2RlPjk8L2NvZGU+KTsgdGFrZXMgYW4KKzxjb2RlPnVuc2lnbmVkPC9jb2RlPi4gIExlYWRpbmcgemVyb3MgYXJlIGluc2VydGVkIGFzCituZWNlc3NhcnkgdG8gcmVhY2ggdGhlIHByZWNpc2lvbi4gIEEgdmFsdWUgb2YgMCB3aXRoCithIHByZWNpc2lvbiBvZiAwIHByb2R1Y2VzIGFuIGVtcHR5IHN0cmluZy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WDwvY29kZT48ZGQ+TGlrZSA8Y29kZT54PC9jb2RlPiwgYnV0IHVzZXMgPGNvZGU+QUJDREVGPC9jb2RlPiBhcyBkaWdpdHMKK2JleW9uZCA8Y29kZT45PC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZjwvY29kZT48ZGQ+UHJpbnRzIGEgc2lnbmVkIHZhbHVlIG9mIHRoZSBmb3JtCis8Y29kZT5bLV05OTk5Ljk5OTk8L2NvZGU+LCB3aXRoIHRoZSBwcmVjaXNpb24KK2RldGVybWluaW5nIGhvdyBtYW55IGRpZ2l0cyBmb2xsb3cgdGhlIGRlY2ltYWwKK3BvaW50OyB0YWtlcyBhIDxjb2RlPmRvdWJsZTwvY29kZT4gKHJlbWVtYmVyIHRoYXQKKzxjb2RlPmZsb2F0PC9jb2RlPiBwcm9tb3RlcyB0byA8Y29kZT5kb3VibGU8L2NvZGU+IGFzIGEgdmFyYXJnKS4gCitUaGUgbG93IG9yZGVyIGRpZ2l0IGlzIHJvdW5kZWQgdG8gZXZlbi4gIElmCit0aGUgcHJlY2lzaW9uIHJlc3VsdHMgaW4gYXQgbW9zdCBERUNJTUFMX0RJRworZGlnaXRzLCB0aGUgcmVzdWx0IGlzIHJvdW5kZWQgY29ycmVjdGx5OyBpZgorbW9yZSB0aGFuIERFQ0lNQUxfRElHIGRpZ2l0cyBhcmUgcHJpbnRlZCwgdGhlCityZXN1bHQgaXMgb25seSBndWFyYW50ZWVkIHRvIHJvdW5kIGJhY2sgdG8gdGhlCitvcmlnaW5hbCB2YWx1ZS4KKworICAgICAgICAgIDxwPklmIHRoZSB2YWx1ZSBpcyBpbmZpbml0ZSwgdGhlIHJlc3VsdCBpcworPGNvZGU+aW5mPC9jb2RlPiwgYW5kIG5vIHplcm8gcGFkZGluZyBpcyBwZXJmb3JtZWQuICBJZgordGhlIHZhbHVlIGlzIG5vdCBhIG51bWJlciwgdGhlIHJlc3VsdCBpcworPGNvZGU+bmFuPC9jb2RlPiwgYW5kIG5vIHplcm8gcGFkZGluZyBpcyBwZXJmb3JtZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkY8L2NvZGU+PGRkPkxpa2UgPGNvZGU+ZjwvY29kZT4sIGJ1dCB1c2VzIDxjb2RlPklORjwvY29kZT4gYW5kIDxjb2RlPk5BTjwvY29kZT4gZm9yCitub24tZmluaXRlIG51bWJlcnMuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmU8L2NvZGU+PGRkPlByaW50cyBhIHNpZ25lZCB2YWx1ZSBvZiB0aGUgZm9ybQorPGNvZGU+Wy1dOS45OTk5ZVsrfC1dOTk5PC9jb2RlPjsgdGFrZXMgYSA8Y29kZT5kb3VibGU8L2NvZGU+LiAKK1RoZSBkaWdpdCBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQgaXMgbm9uLXplcm8KK2lmIHRoZSB2YWx1ZSBpcyBub24temVyby4gIFRoZSBwcmVjaXNpb24KK2RldGVybWluZXMgaG93IG1hbnkgZGlnaXRzIGFwcGVhciBiZXR3ZWVuCis8Y29kZT4uPC9jb2RlPiBhbmQgPGNvZGU+ZTwvY29kZT4sIGFuZCB0aGUgZXhwb25lbnQgYWx3YXlzCitjb250YWlucyBhdCBsZWFzdCB0d28gZGlnaXRzLiAgVGhlIHZhbHVlIHplcm8KK2hhcyBhbiBleHBvbmVudCBvZiB6ZXJvLiAgSWYgdGhlIHZhbHVlIGlzIG5vdAorZmluaXRlLCBpdCBpcyBwcmludGVkIGxpa2UgPGNvZGU+ZjwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPkU8L2NvZGU+PGRkPkxpa2UgPGNvZGU+ZTwvY29kZT4sIGJ1dCB1c2luZyA8Y29kZT5FPC9jb2RlPiB0byBpbnRyb2R1Y2UgdGhlCitleHBvbmVudCwgYW5kIGxpa2UgPGNvZGU+RjwvY29kZT4gZm9yIG5vbi1maW5pdGUKK3ZhbHVlcy4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+ZzwvY29kZT48ZGQ+UHJpbnRzIGEgc2lnbmVkIHZhbHVlIGluIGVpdGhlciA8Y29kZT5mPC9jb2RlPiBvciA8Y29kZT5lPC9jb2RlPgorZm9ybSwgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlIGFuZAorcHJlY2lzaW9uJm1kYXNoO2FuIGV4cG9uZW50IGxlc3MgdGhhbiAtNCBvcgorZ3JlYXRlciB0aGFuIHRoZSBwcmVjaXNpb24gc2VsZWN0cyB0aGUgPGNvZGU+ZTwvY29kZT4KK2Zvcm0uICBUcmFpbGluZyB6ZXJvcyBhbmQgdGhlIGRlY2ltYWwgcG9pbnQKK2FyZSBwcmludGVkIG9ubHkgaWYgbmVjZXNzYXJ5OyB0YWtlcyBhCis8Y29kZT5kb3VibGU8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5HPC9jb2RlPjxkZD5MaWtlIDxjb2RlPmc8L2NvZGU+LCBleGNlcHQgdXNlIDxjb2RlPkY8L2NvZGU+IG9yIDxjb2RlPkU8L2NvZGU+IGZvcm0uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmE8L2NvZGU+PGRkPlByaW50cyBhIHNpZ25lZCB2YWx1ZSBvZiB0aGUgZm9ybQorPGNvZGU+Wy1dMHgxLmZmZmZwWyt8LV05PC9jb2RlPjsgdGFrZXMgYSA8Y29kZT5kb3VibGU8L2NvZGU+LiAKK1RoZSBsZXR0ZXJzIDxjb2RlPmFiY2RlZjwvY29kZT4gYXJlIHVzZWQgZm9yIGRpZ2l0cworYmV5b25kIDxjb2RlPjk8L2NvZGU+LiAgVGhlIHByZWNpc2lvbiBkZXRlcm1pbmVzIGhvdworbWFueSBkaWdpdHMgYXBwZWFyIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiAKK1RoZSBleHBvbmVudCBjb250YWlucyBhdCBsZWFzdCBvbmUgZGlnaXQsIGFuZAoraXMgYSBkZWNpbWFsIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgcG93ZXIgb2YKKzI7IGEgdmFsdWUgb2YgMCBoYXMgYW4gZXhwb25lbnQgb2YgMC4gCitOb24tZmluaXRlIHZhbHVlcyBhcmUgcHJpbnRlZCBsaWtlIDxjb2RlPmY8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5BPC9jb2RlPjxkZD5MaWtlIDxjb2RlPmE8L2NvZGU+LCBleGNlcHQgdXNlcyA8Y29kZT5YPC9jb2RlPiwgPGNvZGU+UDwvY29kZT4sIGFuZAorPGNvZGU+QUJDREVGPC9jb2RlPiBpbnN0ZWFkIG9mIGxvd2VyIGNhc2UuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm48L2NvZGU+PGRkPlRha2VzIGEgcG9pbnRlciB0byA8Y29kZT5pbnQ8L2NvZGU+LCBhbmQgc3RvcmVzIGEgY291bnQKK29mIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzbyBmYXIuICBObworb3V0cHV0IGlzIGNyZWF0ZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnA8L2NvZGU+PGRkPlRha2VzIGEgcG9pbnRlciB0byA8Y29kZT52b2lkPC9jb2RlPiwgYW5kIHByaW50cyBpdCBpbgorYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBmb3JtYXQuICBUaGlzCitpbXBsZW1lbnRhdGlvbiBpcyBzaW1pbGFyIHRvIDxjb2RlPiUjdHg8L2NvZGU+KSwgZXhjZXB0Cit0aGF0IDxjb2RlPjB4PC9jb2RlPiBhcHBlYXJzIGV2ZW4gZm9yIHRoZSBOVUxMIHBvaW50ZXIuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPm08L2NvZGU+PGRkPlByaW50cyB0aGUgb3V0cHV0IG9mIDxjb2RlPnN0cmVycm9yKGVycm5vKTwvY29kZT47IG5vCithcmd1bWVudCBpcyByZXF1aXJlZC4gIEEgR05VIGV4dGVuc2lvbi4KKworICAgICA8L2RsPgorCisgICA8L3VsPgorCisgICA8cD48Y29kZT5fd3ByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X2Z3cHJpbnRmX3I8L2NvZGU+LCA8Y29kZT5fc3dwcmludGZfcjwvY29kZT4sIGFyZSBzaW1wbHkKK3JlZW50cmFudCB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitPbiBzdWNjZXNzLCA8Y29kZT5zd3ByaW50ZjwvY29kZT4gcmV0dXJuIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzIGluCit0aGUgb3V0cHV0IHN0cmluZywgZXhjZXB0IHRoZSBjb25jbHVkaW5nIDxjb2RlPk5VTDwvY29kZT4gaXMgbm90IGNvdW50ZWQuIAorPGNvZGU+d3ByaW50ZjwvY29kZT4gYW5kIDxjb2RlPmZ3cHJpbnRmPC9jb2RlPiByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRyYW5zbWl0dGVkLgorCisgICA8cD5JZiBhbiBlcnJvciBvY2N1cnMsIHRoZSByZXN1bHQgb2YgPGNvZGU+d3ByaW50ZjwvY29kZT4sIDxjb2RlPmZ3cHJpbnRmPC9jb2RlPiwgYW5kCis8Y29kZT5zd3ByaW50ZjwvY29kZT4gaXMgYSBuZWdhdGl2ZSB2YWx1ZS4gIEZvciA8Y29kZT53cHJpbnRmPC9jb2RlPiBhbmQgPGNvZGU+ZndwcmludGY8L2NvZGU+LAorPGNvZGU+ZXJybm88L2NvZGU+IG1heSBiZSBzZXQgYWNjb3JkaW5nIHRvIDxjb2RlPmZwdXR3YzwvY29kZT4uICBGb3IgPGNvZGU+c3dwcmludGY8L2NvZGU+LCA8Y29kZT5lcnJubzwvY29kZT4KK21heSBiZSBzZXQgdG8gRU9WRVJGTE9XIGlmIDx2YXI+c2l6ZTwvdmFyPiBpcyBncmVhdGVyIHRoYW4gSU5UX01BWCAvIHNpemVvZiAod2NoYXJfdCksCitvciB3aGVuIHRoZSBvdXRwdXQgZG9lcyBub3QgZml0IGludG8gPHZhcj5zaXplPC92YXI+IHdpZGUgY2hhcmFjdGVycyAoaW5jbHVkaW5nIHRoZQordGVybWluYXRpbmcgd2lkZSA8Y29kZT5OVUxMPC9jb2RlPikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+QnVnczwvc3Ryb25nPjxicj4KK1RoZSAmbGRxdW87JnJkcXVvOycgKHF1b3RlKSBmbGFnIGRvZXMgbm90IHdvcmsgd2hlbiBsb2NhbGUncyB0aG91c2FuZHNfc2VwIGlzIG5vdCBlbXB0eS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1BPU0lYLTEuMjAwOCB3aXRoIGV4dGVuc2lvbnM7IEM5OSAoY29tcGxpYW50IGV4Y2VwdCBmb3IgUE9TSVggZXh0ZW5zaW9ucykuCisKKyAgIDxwPkRlcGVuZGluZyBvbiBob3cgbmV3bGliIHdhcyBjb25maWd1cmVkLCBub3QgYWxsIGZvcm1hdCBzcGVjaWZpZXJzIGFyZQorc3VwcG9ydGVkLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+aXNhdHR5PC9jb2RlPiwKKzxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+cmVhZDwvY29kZT4sIDxjb2RlPnNicms8L2NvZGU+LCA8Y29kZT53cml0ZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3dzY2FuZi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3dzY2FuZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MGJlZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC9zd3NjYW5mLmh0bWwKQEAgLTAsMCArMSwzMjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN3c2NhbmYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN3cHJpbnRmLmh0bWwjc3dwcmludGYiIHRpdGxlPSJzd3ByaW50ZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InRtcGZpbGUuaHRtbCN0bXBmaWxlIiB0aXRsZT0idG1wZmlsZSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic3dzY2FuZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0bXBmaWxlLmh0bWwjdG1wZmlsZSI+dG1wZmlsZTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN3cHJpbnRmLmh0bWwjc3dwcmludGYiPnN3cHJpbnRmPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjYzIDxjb2RlPnN3c2NhbmY8L2NvZGU+LCA8Y29kZT5md3NjYW5mPC9jb2RlPiwgPGNvZGU+d3NjYW5mPC9jb2RlPiZtZGFzaDtzY2FuIGFuZCBmb3JtYXQgd2lkZSBjaGFyYWN0ZXIgaW5wdXQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13c2NhbmYtMzA5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ3c2NhbmZfMDA1ZnItMzEwIj48L2E+PGEgbmFtZT0iaW5kZXgtZndzY2FuZi0zMTEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZmZ3c2NhbmZfMDA1ZnItMzEyIj48L2E+PGEgbmFtZT0iaW5kZXgtc3dzY2FuZi0zMTMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnN3c2NhbmZfMDA1ZnItMzE0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgCisgICAgIGludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIGludCBmd3NjYW5mKEZJTEUgKjx2YXI+ZmQ8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm9ybWF0PC92YXI+LCAuLi4pOworICAgICBpbnQgc3dzY2FuZihjb25zdCB3Y2hhcl90ICo8dmFyPnN0cjwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIAorICAgICBpbnQgX3dzY2FuZl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBjb25zdCB3Y2hhcl90ICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IF9md3NjYW5mX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIEZJTEUgKjx2YXI+ZmQ8L3Zhcj4sCisgICAgICAgICBjb25zdCB3Y2hhcl90ICo8dmFyPmZvcm1hdDwvdmFyPiwgLi4uKTsKKyAgICAgaW50IF9zd3NjYW5mX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5wdHI8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgY29uc3Qgd2NoYXJfdCAqPHZhcj5mb3JtYXQ8L3Zhcj4sIC4uLik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+d3NjYW5mPC9jb2RlPiBzY2FucyBhIHNlcmllcyBvZiBpbnB1dCBmaWVsZHMgZnJvbSBzdGFuZGFyZCBpbnB1dCwKK29uZSB3aWRlIGNoYXJhY3RlciBhdCBhIHRpbWUuICBFYWNoIGZpZWxkIGlzIGludGVycHJldGVkIGFjY29yZGluZyB0bworYSBmb3JtYXQgc3BlY2lmaWVyIHBhc3NlZCB0byA8Y29kZT53c2NhbmY8L2NvZGU+IGluIHRoZSBmb3JtYXQgc3RyaW5nIGF0Cis8Y29kZT4qPC9jb2RlPjx2YXI+Zm9ybWF0PC92YXI+LiAgPGNvZGU+d3NjYW5mPC9jb2RlPiBzdG9yZXMgdGhlIGludGVycHJldGVkIGlucHV0IGZyb20KK2VhY2ggZmllbGQgYXQgdGhlIGFkZHJlc3MgcGFzc2VkIHRvIGl0IGFzIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50Citmb2xsb3dpbmcgPHZhcj5mb3JtYXQ8L3Zhcj4uICBZb3UgbXVzdCBzdXBwbHkgdGhlIHNhbWUgbnVtYmVyIG9mCitmb3JtYXQgc3BlY2lmaWVycyBhbmQgYWRkcmVzcyBhcmd1bWVudHMgYXMgdGhlcmUgYXJlIGlucHV0IGZpZWxkcy4KKworICAgPHA+VGhlcmUgbXVzdCBiZSBzdWZmaWNpZW50IGFkZHJlc3MgYXJndW1lbnRzIGZvciB0aGUgZ2l2ZW4gZm9ybWF0CitzcGVjaWZpZXJzOyBpZiBub3QgdGhlIHJlc3VsdHMgYXJlIHVucHJlZGljdGFibGUgYW5kIGxpa2VseQorZGlzYXN0ZXJvdXMuICBFeGNlc3MgYWRkcmVzcyBhcmd1bWVudHMgYXJlIG1lcmVseSBpZ25vcmVkLgorCisgICA8cD48Y29kZT53c2NhbmY8L2NvZGU+IG9mdGVuIHByb2R1Y2VzIHVuZXhwZWN0ZWQgcmVzdWx0cyBpZiB0aGUgaW5wdXQgZGl2ZXJnZXMgZnJvbQorYW4gZXhwZWN0ZWQgcGF0dGVybi4gU2luY2UgdGhlIGNvbWJpbmF0aW9uIG9mIDxjb2RlPmdldHM8L2NvZGU+IG9yIDxjb2RlPmZnZXRzPC9jb2RlPgorZm9sbG93ZWQgYnkgPGNvZGU+c3dzY2FuZjwvY29kZT4gaXMgc2FmZSBhbmQgZWFzeSwgdGhhdCBpcyB0aGUgcHJlZmVycmVkIHdheQordG8gYmUgY2VydGFpbiB0aGF0IGEgcHJvZ3JhbSBpcyBzeW5jaHJvbml6ZWQgd2l0aCBpbnB1dCBhdCB0aGUgZW5kCitvZiBhIGxpbmUuCisKKyAgIDxwPjxjb2RlPmZ3c2NhbmY8L2NvZGU+IGFuZCA8Y29kZT5zd3NjYW5mPC9jb2RlPiBhcmUgaWRlbnRpY2FsIHRvIDxjb2RlPndzY2FuZjwvY29kZT4sIG90aGVyIHRoYW4gdGhlCitzb3VyY2Ugb2YgaW5wdXQ6IDxjb2RlPmZ3c2NhbmY8L2NvZGU+IHJlYWRzIGZyb20gYSBmaWxlLCBhbmQgPGNvZGU+c3dzY2FuZjwvY29kZT4KK2Zyb20gYSBzdHJpbmcuCisKKyAgIDxwPlRoZSByb3V0aW5lcyA8Y29kZT5fd3NjYW5mX3I8L2NvZGU+LCA8Y29kZT5fZndzY2FuZl9yPC9jb2RlPiwgYW5kIDxjb2RlPl9zd3NjYW5mX3I8L2NvZGU+IGFyZSByZWVudHJhbnQKK3ZlcnNpb25zIG9mIDxjb2RlPndzY2FuZjwvY29kZT4sIDxjb2RlPmZ3c2NhbmY8L2NvZGU+LCBhbmQgPGNvZGU+c3dzY2FuZjwvY29kZT4gdGhhdCB0YWtlIGFuIGFkZGl0aW9uYWwKK2ZpcnN0IGFyZ3VtZW50IHBvaW50aW5nIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPlRoZSBzdHJpbmcgYXQgPGNvZGU+KjwvY29kZT48dmFyPmZvcm1hdDwvdmFyPiBpcyBhIHdpZGUgY2hhcmFjdGVyIHNlcXVlbmNlIGNvbXBvc2VkCitvZiB6ZXJvIG9yIG1vcmUgZGlyZWN0aXZlcy4gRGlyZWN0aXZlcyBhcmUgY29tcG9zZWQgb2YKK29uZSBvciBtb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVycywgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycywKK2FuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMuCisKKyAgIDxwPldoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgYmxhbmsgKCApLCB0YWIgKDxjb2RlPlx0PC9jb2RlPiksIG9yCituZXdsaW5lICg8Y29kZT5cbjwvY29kZT4pLiAKK1doZW4gPGNvZGU+d3NjYW5mPC9jb2RlPiBlbmNvdW50ZXJzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gdGhlIGZvcm1hdCBzdHJpbmcKK2l0IHdpbGwgcmVhZCAoYnV0IG5vdCBzdG9yZSkgYWxsIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgY2hhcmFjdGVycwordXAgdG8gdGhlIG5leHQgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGluIHRoZSBpbnB1dC4KKworICAgPHA+Tm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgYWxsIG90aGVyIEFTQ0lJIGNoYXJhY3RlcnMgZXhjZXB0IHRoZQorcGVyY2VudCBzaWduICg8Y29kZT4lPC9jb2RlPikuICBXaGVuIDxjb2RlPndzY2FuZjwvY29kZT4gZW5jb3VudGVycyBhIG5vbi13aGl0ZXNwYWNlCitjaGFyYWN0ZXIgaW4gdGhlIGZvcm1hdCBzdHJpbmcgaXQgd2lsbCByZWFkLCBidXQgbm90IHN0b3JlCithIG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci4KKworICAgPHA+Rm9ybWF0IHNwZWNpZmljYXRpb25zIHRlbGwgPGNvZGU+d3NjYW5mPC9jb2RlPiB0byByZWFkIGFuZCBjb252ZXJ0IGNoYXJhY3RlcnMKK2Zyb20gdGhlIGlucHV0IGZpZWxkIGludG8gc3BlY2lmaWMgdHlwZXMgb2YgdmFsdWVzLCBhbmQgc3RvcmUgdGhlbgoraW4gdGhlIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkgdGhlIGFkZHJlc3MgYXJndW1lbnRzLgorCisgICA8cD5UcmFpbGluZyB3aGl0ZXNwYWNlIGlzIGxlZnQgdW5yZWFkIHVubGVzcyBleHBsaWNpdGx5CittYXRjaGVkIGluIHRoZSBmb3JtYXQgc3RyaW5nLgorCisgICA8cD5UaGUgZm9ybWF0IHNwZWNpZmllcnMgbXVzdCBiZWdpbiB3aXRoIGEgcGVyY2VudCBzaWduICg8Y29kZT4lPC9jb2RlPikKK2FuZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybToKKworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgICAlWypdWzx2YXI+d2lkdGg8L3Zhcj5dWzx2YXI+c2l6ZTwvdmFyPl08dmFyPnR5cGU8L3Zhcj4KKzwvcHJlPgorICAgPHA+RWFjaCBmb3JtYXQgc3BlY2lmaWNhdGlvbiBiZWdpbnMgd2l0aCB0aGUgcGVyY2VudCBjaGFyYWN0ZXIgKDxjb2RlPiU8L2NvZGU+KS4gCitUaGUgb3RoZXIgZmllbGRzIGFyZToKKyAgICAgPGRsPgorPGR0Pjxjb2RlPio8L2NvZGU+PGRkPmFuIG9wdGlvbmFsIG1hcmtlcjsgaWYgcHJlc2VudCwgaXQgc3VwcHJlc3NlcyBpbnRlcnByZXRhdGlvbiBhbmQKK2Fzc2lnbm1lbnQgb2YgdGhpcyBpbnB1dCBmaWVsZC4KKworICAgICA8YnI+PGR0Pjx2YXI+d2lkdGg8L3Zhcj48ZGQ+YW4gb3B0aW9uYWwgbWF4aW11bSBmaWVsZCB3aWR0aDogYSBkZWNpbWFsIGludGVnZXIsCit3aGljaCBjb250cm9scyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0Cit3aWxsIGJlIHJlYWQgYmVmb3JlIGNvbnZlcnRpbmcgdGhlIGN1cnJlbnQgaW5wdXQgZmllbGQuICBJZiB0aGUKK2lucHV0IGZpZWxkIGhhcyBmZXdlciB0aGFuIDx2YXI+d2lkdGg8L3Zhcj4gY2hhcmFjdGVycywgPGNvZGU+d3NjYW5mPC9jb2RlPgorcmVhZHMgYWxsIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBmaWVsZCwgYW5kIHRoZW4KK3Byb2NlZWRzIHdpdGggdGhlIG5leHQgZmllbGQgYW5kIGl0cyBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKworICAgICA8cD5JZiBhIHdoaXRlc3BhY2Ugb3IgYSBub24tY29udmVydGFibGUgd2lkZSBjaGFyYWN0ZXIgb2NjdXJzCitiZWZvcmUgPHZhcj53aWR0aDwvdmFyPiBjaGFyYWN0ZXIgYXJlIHJlYWQsIHRoZSBjaGFyYWN0ZXJzIHVwCit0byB0aGF0IGNoYXJhY3RlciBhcmUgcmVhZCwgY29udmVydGVkLCBhbmQgc3RvcmVkLiAKK1RoZW4gPGNvZGU+d3NjYW5mPC9jb2RlPiBwcm9jZWVkcyB0byB0aGUgbmV4dCBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKworICAgICA8YnI+PGR0Pjxjb2RlPnNpemU8L2NvZGU+PGRkPjxjb2RlPmg8L2NvZGU+LCA8Y29kZT5qPC9jb2RlPiwgPGNvZGU+bDwvY29kZT4sIDxjb2RlPkw8L2NvZGU+LCA8Y29kZT50PC9jb2RlPiwgYW5kIDxjb2RlPno8L2NvZGU+IGFyZSBvcHRpb25hbCBzaXplCitjaGFyYWN0ZXJzIHdoaWNoIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHdheSB0aGF0IDxjb2RlPndzY2FuZjwvY29kZT4KK2ludGVycHJldHMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KKworICAgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgICAgICBNb2RpZmllciAgIFR5cGUocykKKyAgICAgICAgICAgICBoaCAgICAgIGQsIGksIG8sIHUsIHgsIG4gIGNvbnZlcnQgaW5wdXQgdG8gY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGluIGNoYXIgb2JqZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgaCAgICAgICBkLCBpLCBvLCB1LCB4LCBuICBjb252ZXJ0IGlucHV0IHRvIHNob3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgaW4gc2hvcnQgb2JqZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgaCAgICAgICBlLCBmLCBjLCBzLCBwICAgICBubyBlZmZlY3QKKyAgICAgICAgICAKKyAgICAgICAgICAgICBqICAgICAgIGQsIGksIG8sIHUsIHgsIG4gIGNvbnZlcnQgaW5wdXQgdG8gaW50bWF4X3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZSBpbiBpbnRtYXhfdCBvYmplY3QKKyAgICAgICAgICAKKyAgICAgICAgICAgICBqICAgICAgIGFsbCBvdGhlcnMgICAgICAgIG5vIGVmZmVjdAorICAgICAgICAgIAorICAgICAgICAgICAgIGwgICAgICAgZCwgaSwgbywgdSwgeCwgbiAgY29udmVydCBpbnB1dCB0byBsb25nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUgaW4gbG9uZyBvYmplY3QKKyAgICAgICAgICAKKyAgICAgICAgICAgICBsICAgICAgIGUsIGYsIGcgICAgICAgICAgIGNvbnZlcnQgaW5wdXQgdG8gZG91YmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZSBpbiBhIGRvdWJsZSBvYmplY3QKKyAgICAgICAgICAKKyAgICAgICAgICAgICBsICAgICAgIGMsIHMsIFsgICAgICAgICAgIHRoZSBpbnB1dCBpcyBzdG9yZWQgaW4gYSB3Y2hhcl90IG9iamVjdAorICAgICAgICAgIAorICAgICAgICAgICAgIGwgICAgICAgcCAgICAgICAgICAgICAgICAgbm8gZWZmZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgbGwgICAgICBkLCBpLCBvLCB1LCB4LCBuICBjb252ZXJ0IHRvIGxvbmcgbG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGluIGxvbmcgbG9uZworICAgICAgICAgIAorICAgICAgICAgICAgIEwgICAgICAgZCwgaSwgbywgdSwgeCwgbiAgY29udmVydCB0byBsb25nIGxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZSBpbiBsb25nIGxvbmcKKyAgICAgICAgICAKKyAgICAgICAgICAgICBMICAgICAgIGUsIGYsIGcsIEUsIEcgICAgIGNvbnZlcnQgdG8gbG9uZyBkb3VibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZSBpbiBsb25nIGRvdWJsZQorICAgICAgICAgIAorICAgICAgICAgICAgIEwgICAgICAgYWxsIG90aGVycyAgICAgICAgbm8gZWZmZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgdCAgICAgICBkLCBpLCBvLCB1LCB4LCBuICBjb252ZXJ0IGlucHV0IHRvIHB0cmRpZmZfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlIGluIHB0cmRpZmZfdCBvYmplY3QKKyAgICAgICAgICAKKyAgICAgICAgICAgICB0ICAgICAgIGFsbCBvdGhlcnMgICAgICAgIG5vIGVmZmVjdAorICAgICAgICAgIAorICAgICAgICAgICAgIHogICAgICAgZCwgaSwgbywgdSwgeCwgbiAgY29udmVydCBpbnB1dCB0byBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZSBpbiBzaXplX3Qgb2JqZWN0CisgICAgICAgICAgCisgICAgICAgICAgICAgeiAgICAgICBhbGwgb3RoZXJzICAgICAgICBubyBlZmZlY3QKKyAgICAgICAgICAKKzwvcHJlPgorICAgICA8YnI+PGR0Pjx2YXI+dHlwZTwvdmFyPjxkZD4KK0EgY2hhcmFjdGVyIHRvIHNwZWNpZnkgd2hhdCBraW5kIG9mIGNvbnZlcnNpb24KKzxjb2RlPndzY2FuZjwvY29kZT4gcGVyZm9ybXMuICBIZXJlIGlzIGEgdGFibGUgb2YgdGhlIGNvbnZlcnNpb24KK2NoYXJhY3RlcnM6CisKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JTwvY29kZT48ZGQ+Tm8gY29udmVyc2lvbiBpcyBkb25lOyB0aGUgcGVyY2VudCBjaGFyYWN0ZXIgKDxjb2RlPiU8L2NvZGU+KSBpcyBzdG9yZWQuCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPmM8L2NvZGU+PGRkPlNjYW5zIG9uZSB3aWRlIGNoYXJhY3Rlci4gIENvcnJlc3BvbmRpbmcgPHZhcj5hcmc8L3Zhcj46IDxjb2RlPihjaGFyICphcmcpPC9jb2RlPi4gCitPdGhlcndpc2UsIGlmIGFuIDxjb2RlPmw8L2NvZGU+IHNwZWNpZmllciBpcyBwcmVzZW50LCB0aGUgY29ycmVzcG9uZGluZworPHZhcj5hcmc8L3Zhcj4gaXMgYSA8Y29kZT4od2NoYXJfdCAqYXJnKTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnM8L2NvZGU+PGRkPlJlYWRzIGEgY2hhcmFjdGVyIHN0cmluZyBpbnRvIHRoZSBhcnJheSBzdXBwbGllZC4gCitDb3JyZXNwb25kaW5nIDx2YXI+YXJnPC92YXI+OiA8Y29kZT4oY2hhciBhcmdbXSk8L2NvZGU+LiAKK0lmIGFuIDxjb2RlPmw8L2NvZGU+IHNwZWNpZmllciBpcyBwcmVzZW50LCB0aGUgY29ycmVzcG9uZGluZyA8dmFyPmFyZzwvdmFyPiBpcyBhIDxjb2RlPih3Y2hhcl90ICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+WzwvY29kZT48dmFyPnBhdHRlcm48L3Zhcj48Y29kZT5dPC9jb2RlPjxkZD5SZWFkcyBhIG5vbi1lbXB0eSBjaGFyYWN0ZXIgc3RyaW5nIGludG8gbWVtb3J5CitzdGFydGluZyBhdCA8dmFyPmFyZzwvdmFyPi4gIFRoaXMgYXJlYSBtdXN0IGJlIGxhcmdlCitlbm91Z2ggdG8gYWNjZXB0IHRoZSBzZXF1ZW5jZSBhbmQgYQordGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIgd2hpY2ggd2lsbCBiZSBhZGRlZAorYXV0b21hdGljYWxseS4gICg8dmFyPnBhdHRlcm48L3Zhcj4gaXMgZGlzY3Vzc2VkIGluIHRoZSBwYXJhZ3JhcGggZm9sbG93aW5nCit0aGlzIHRhYmxlKS4gIENvcnJlc3BvbmRpbmcgPHZhcj5hcmc8L3Zhcj46IDxjb2RlPihjaGFyICphcmcpPC9jb2RlPi4gCitJZiBhbiA8Y29kZT5sPC9jb2RlPiBzcGVjaWZpZXIgaXMgcHJlc2VudCwgdGhlIGNvcnJlc3BvbmRpbmcgPHZhcj5hcmc8L3Zhcj4gaXMKK2EgPGNvZGU+KHdjaGFyX3QgKmFyZyk8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5kPC9jb2RlPjxkZD5SZWFkcyBhIGRlY2ltYWwgaW50ZWdlciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIDx2YXI+YXJnPC92YXI+OiA8Y29kZT4oaW50ICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bzwvY29kZT48ZGQ+UmVhZHMgYW4gb2N0YWwgaW50ZWdlciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIDx2YXI+YXJnPC92YXI+OiA8Y29kZT4oaW50ICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+dTwvY29kZT48ZGQ+UmVhZHMgYW4gdW5zaWduZWQgZGVjaW1hbCBpbnRlZ2VyIGludG8gdGhlIGNvcnJlc3BvbmRpbmcKKzx2YXI+YXJnPC92YXI+OiA8Y29kZT4odW5zaWduZWQgaW50ICphcmcpPC9jb2RlPi4gCis8YnI+PGR0Pjxjb2RlPngsWDwvY29kZT48ZGQ+UmVhZCBhIGhleGFkZWNpbWFsIGludGVnZXIgaW50byB0aGUgY29ycmVzcG9uZGluZyA8dmFyPmFyZzwvdmFyPjoKKzxjb2RlPihpbnQgKmFyZyk8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5lLCBmLCBnPC9jb2RlPjxkZD5SZWFkIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgPHZhcj5hcmc8L3Zhcj46Cis8Y29kZT4oZmxvYXQgKmFyZyk8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT5FLCBGLCBHPC9jb2RlPjxkZD5SZWFkIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgPHZhcj5hcmc8L3Zhcj46Cis8Y29kZT4oZG91YmxlICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+aTwvY29kZT48ZGQ+UmVhZHMgYSBkZWNpbWFsLCBvY3RhbCBvciBoZXhhZGVjaW1hbCBpbnRlZ2VyIGludG8gdGhlCitjb3JyZXNwb25kaW5nIDx2YXI+YXJnPC92YXI+OiA8Y29kZT4oaW50ICphcmcpPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+bjwvY29kZT48ZGQ+U3RvcmVzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGluIHRoZSBjb3JyZXNwb25kaW5nCis8dmFyPmFyZzwvdmFyPjogPGNvZGU+KGludCAqYXJnKTwvY29kZT4uCisKKyAgICAgICAgICA8YnI+PGR0Pjxjb2RlPnA8L2NvZGU+PGRkPlN0b3JlcyBhIHNjYW5uZWQgcG9pbnRlci4gIEFOU0kgQyBsZWF2ZXMgdGhlIGRldGFpbHMKK3RvIGVhY2ggaW1wbGVtZW50YXRpb247IHRoaXMgaW1wbGVtZW50YXRpb24gdHJlYXRzCis8Y29kZT4lcDwvY29kZT4gZXhhY3RseSB0aGUgc2FtZSBhcyA8Y29kZT4lVTwvY29kZT4uICBDb3JyZXNwb25kaW5nCis8dmFyPmFyZzwvdmFyPjogPGNvZGU+KHZvaWQgKiphcmcpPC9jb2RlPi4gCis8L2RsPgorCisgICAgIDxwPkEgPHZhcj5wYXR0ZXJuPC92YXI+IG9mIGNoYXJhY3RlcnMgc3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgY2FuIGJlIHVzZWQKK2luc3RlYWQgb2YgdGhlIDxjb2RlPnM8L2NvZGU+IHR5cGUgY2hhcmFjdGVyLiAgPHZhcj5wYXR0ZXJuPC92YXI+IGlzIGEgc2V0IG9mCitjaGFyYWN0ZXJzIHdoaWNoIGRlZmluZSBhIHNlYXJjaCBzZXQgb2YgcG9zc2libGUgY2hhcmFjdGVycyBtYWtpbmcgdXAKK3RoZSA8Y29kZT53c2NhbmY8L2NvZGU+IGlucHV0IGZpZWxkLiAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgYnJhY2tldHMgaXMgYQorY2FyZXQgKDxjb2RlPl48L2NvZGU+KSwgdGhlIHNlYXJjaCBzZXQgaXMgaW52ZXJ0ZWQgdG8gaW5jbHVkZSBhbGwgQVNDSUkgY2hhcmFjdGVycworZXhjZXB0IHRob3NlIGJldHdlZW4gdGhlIGJyYWNrZXRzLiAgVGhlcmUgaXMgbm8gcmFuZ2UgZmFjaWxpdHkgYXMgaXMKK2RlZmluZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbm9uLXdpZGUgY2hhcmFjdGVyIHNjYW5mIGZ1bmN0aW9ucy4gCitSYW5nZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQT1NJWCBzdGFuZGFyZC4KKworICAgICA8cD5IZXJlIGFyZSBzb21lIDx2YXI+cGF0dGVybjwvdmFyPiBleGFtcGxlczoKKyAgICAgICAgICA8ZGw+Cis8ZHQ+PGNvZGU+JVthYmNkXTwvY29kZT48ZGQ+bWF0Y2hlcyB3aWRlIGNoYXJhY3RlciBzdHJpbmdzIGNvbnRhaW5pbmcgb25seQorPGNvZGU+YTwvY29kZT4sIDxjb2RlPmI8L2NvZGU+LCA8Y29kZT5jPC9jb2RlPiwgYW5kIDxjb2RlPmQ8L2NvZGU+LgorCisgICAgICAgICAgPGJyPjxkdD48Y29kZT4lW15hYmNkXTwvY29kZT48ZGQ+bWF0Y2hlcyB3aWRlIGNoYXJhY3RlciBzdHJpbmdzIGNvbnRhaW5pbmcgYW55IGNoYXJhY3RlcnMgZXhjZXB0Cis8Y29kZT5hPC9jb2RlPiwgPGNvZGU+YjwvY29kZT4sIDxjb2RlPmM8L2NvZGU+LCBvciA8Y29kZT5kPC9jb2RlPi4KKworICAgICAgICAgIDxicj48ZHQ+PGNvZGU+JVtBLURXLVpdPC9jb2RlPjxkZD5Ob3RlOiBObyB3aWRlIGNoYXJhY3RlciByYW5nZXMsIHNvIHRoaXMgZXhwcmVzc2lvbiBtYXRjaGVzIHdpZGUKK2NoYXJhY3RlciBzdHJpbmdzIGNvbnRhaW5pbmcgPGNvZGU+QTwvY29kZT4sIDxjb2RlPi08L2NvZGU+LCA8Y29kZT5EPC9jb2RlPiwgPGNvZGU+VzwvY29kZT4sIDxjb2RlPlo8L2NvZGU+LiAKKzwvZGw+CisKKyAgICAgPHA+RmxvYXRpbmcgcG9pbnQgbnVtYmVycyAoZm9yIGZpZWxkIHR5cGVzIDxjb2RlPmU8L2NvZGU+LCA8Y29kZT5mPC9jb2RlPiwgPGNvZGU+ZzwvY29kZT4sIDxjb2RlPkU8L2NvZGU+LAorPGNvZGU+RjwvY29kZT4sIDxjb2RlPkc8L2NvZGU+KSBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIGZvbGxvd2luZyBnZW5lcmFsIGZvcm06CisKKyAgICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgICAgCQlbKy8tXSBkZGRkZFsuXWRkZCBbRXxlWyt8LV1kZGRdCis8L3ByZT4KKyAgICAgPHA+d2hlcmUgb2JqZWN0cyBpbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgYXJlIG9wdGlvbmFsLCBhbmQgPGNvZGU+ZGRkPC9jb2RlPgorcmVwcmVzZW50cyBkZWNpbWFsLCBvY3RhbCwgb3IgaGV4YWRlY2ltYWwgZGlnaXRzLiAKKzwvZGw+CisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPndzY2FuZjwvY29kZT4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGlucHV0IGZpZWxkcyBzdWNjZXNzZnVsbHkKK3NjYW5uZWQsIGNvbnZlcnRlZCBhbmQgc3RvcmVkOyB0aGUgcmV0dXJuIHZhbHVlIGRvZXMKK25vdCBpbmNsdWRlIHNjYW5uZWQgZmllbGRzIHdoaWNoIHdlcmUgbm90IHN0b3JlZC4KKworICAgPHA+SWYgPGNvZGU+d3NjYW5mPC9jb2RlPiBhdHRlbXB0cyB0byByZWFkIGF0IGVuZC1vZi1maWxlLCB0aGUgcmV0dXJuCit2YWx1ZSBpcyA8Y29kZT5FT0Y8L2NvZGU+LgorCisgICA8cD5JZiBubyBmaWVsZHMgd2VyZSBzdG9yZWQsIHRoZSByZXR1cm4gdmFsdWUgaXMgPGNvZGU+MDwvY29kZT4uCisKKyAgIDxwPjxjb2RlPndzY2FuZjwvY29kZT4gbWlnaHQgc3RvcCBzY2FubmluZyBhIHBhcnRpY3VsYXIgZmllbGQgYmVmb3JlCityZWFjaGluZyB0aGUgbm9ybWFsIGZpZWxkIGVuZCBjaGFyYWN0ZXIsIG9yIG1heQordGVybWluYXRlIGVudGlyZWx5LgorCisgICA8cD48Y29kZT53c2NhbmY8L2NvZGU+IHN0b3BzIHNjYW5uaW5nIGFuZCBzdG9yaW5nIHRoZSBjdXJyZW50IGZpZWxkCithbmQgbW92ZXMgdG8gdGhlIG5leHQgaW5wdXQgZmllbGQgKGlmIGFueSkKK2luIGFueSBvZiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbnM6CisKKyAgICAgPHVsPgorPGxpPlRoZSBhc3NpZ25tZW50IHN1cHByZXNzaW5nIGNoYXJhY3RlciAoPGNvZGU+KjwvY29kZT4pIGFwcGVhcnMKK2FmdGVyIHRoZSA8Y29kZT4lPC9jb2RlPiBpbiB0aGUgZm9ybWF0IHNwZWNpZmljYXRpb247IHRoZSBjdXJyZW50CitpbnB1dCBmaWVsZCBpcyBzY2FubmVkIGJ1dCBub3Qgc3RvcmVkLgorCisgICAgIDxsaT48dmFyPndpZHRoPC92YXI+IGNoYXJhY3RlcnMgaGF2ZSBiZWVuIHJlYWQgKDx2YXI+d2lkdGg8L3Zhcj4gaXMgYQord2lkdGggc3BlY2lmaWNhdGlvbiwgYSBwb3NpdGl2ZSBkZWNpbWFsIGludGVnZXIpLgorCisgICAgIDxsaT5UaGUgbmV4dCB3aWRlIGNoYXJhY3RlciByZWFkIGNhbm5vdCBiZSBjb252ZXJ0ZWQKK3VuZGVyIHRoZSB0aGUgY3VycmVudCBmb3JtYXQgKGZvciBleGFtcGxlLAoraWYgYSA8Y29kZT5aPC9jb2RlPiBpcyByZWFkIHdoZW4gdGhlIGZvcm1hdCBpcyBkZWNpbWFsKS4KKworICAgICA8bGk+VGhlIG5leHQgd2lkZSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IGZpZWxkIGRvZXMgbm90IGFwcGVhcgoraW4gdGhlIHNlYXJjaCBzZXQgKG9yIGRvZXMgYXBwZWFyIGluIHRoZSBpbnZlcnRlZCBzZWFyY2ggc2V0KS4gCis8L3VsPgorCisgICA8cD5XaGVuIDxjb2RlPndzY2FuZjwvY29kZT4gc3RvcHMgc2Nhbm5pbmcgdGhlIGN1cnJlbnQgaW5wdXQgZmllbGQgZm9yIG9uZSBvZgordGhlc2UgcmVhc29ucywgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGNvbnNpZGVyZWQgdW5yZWFkIGFuZAordXNlZCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmb2xsb3dpbmcgaW5wdXQgZmllbGQsIG9yIHRoZQorZmlyc3QgY2hhcmFjdGVyIGluIGEgc3Vic2VxdWVudCByZWFkIG9wZXJhdGlvbiBvbiB0aGUgaW5wdXQuCisKKyAgIDxwPjxjb2RlPndzY2FuZjwvY29kZT4gd2lsbCB0ZXJtaW5hdGUgdW5kZXIgdGhlIGZvbGxvd2luZyBjaXJjdW1zdGFuY2VzOgorCisgICAgIDx1bD4KKzxsaT5UaGUgbmV4dCB3aWRlIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgZmllbGQgY29uZmxpY3RzCit3aXRoIGEgY29ycmVzcG9uZGluZyBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW4gdGhlCitmb3JtYXQgc3RyaW5nLgorCisgICAgIDxsaT5UaGUgbmV4dCB3aWRlIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgZmllbGQgaXMgPGNvZGU+V0VPRjwvY29kZT4uCisKKyAgICAgPGxpPlRoZSBmb3JtYXQgc3RyaW5nIGhhcyBiZWVuIGV4aGF1c3RlZC4gCis8L3VsPgorCisgICA8cD5XaGVuIHRoZSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIGEgd2lkZSBjaGFyYWN0ZXIgc2VxdWVuY2UgdGhhdCBpcworbm90IHBhcnQgb2YgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiwgdGhlIHNhbWUgd2lkZSBjaGFyYWN0ZXIKK3NlcXVlbmNlIG11c3QgYXBwZWFyIGluIHRoZSBpbnB1dDsgPGNvZGU+d3NjYW5mPC9jb2RlPiB3aWxsCitzY2FuIGJ1dCBub3Qgc3RvcmUgdGhlIG1hdGNoZWQgY2hhcmFjdGVycy4gIElmIGEKK2NvbmZsaWN0IG9jY3VycywgdGhlIGZpcnN0IGNvbmZsaWN0aW5nIHdpZGUgY2hhcmFjdGVyIHJlbWFpbnMgaW4gdGhlCitpbnB1dCBhcyBpZiBpdCBoYWQgbmV2ZXIgYmVlbiByZWFkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d3NjYW5mPC9jb2RlPiBpcyBDOTksIFBPU0lYLTEuMjAwOC4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N5c3RlbS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvc3lzdGVtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M0Mzc0NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3N5c3RlbS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnN5c3RlbSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2NzdG91bGwuaHRtbCN3Y3N0b3VsbCIgdGl0bGU9Indjc3RvdWxsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2NzdG9tYnMuaHRtbCN3Y3N0b21icyIgdGl0bGU9Indjc3RvbWJzIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzeXN0ZW0iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzdG9tYnMuaHRtbCN3Y3N0b21icyI+d2NzdG9tYnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3N0b3VsbC5odG1sI3djc3RvdWxsIj53Y3N0b3VsbDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi40NSA8Y29kZT5zeXN0ZW08L2NvZGU+Jm1kYXNoO2V4ZWN1dGUgY29tbWFuZCBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zeXN0ZW0tMTA2Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZzeXN0ZW1fMDA1ZnItMTA3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGludCBzeXN0ZW0oY2hhciAqPHZhcj5zPC92YXI+KTsKKyAgICAgCisgICAgIGludCBfc3lzdGVtX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgY2hhciAqPHZhcj5zPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CisKKyAgIDxwPlVzZSA8Y29kZT5zeXN0ZW08L2NvZGU+IHRvIHBhc3MgYSBjb21tYW5kIHN0cmluZyA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiB0byA8Y29kZT4vYmluL3NoPC9jb2RlPiBvbgoreW91ciBzeXN0ZW0sIGFuZCB3YWl0IGZvciBpdCB0byBmaW5pc2ggZXhlY3V0aW5nLgorCisgICA8cD5Vc2UgJmxkcXVvOzxjb2RlPnN5c3RlbShOVUxMKTwvY29kZT4mcmRxdW87IHRvIHRlc3Qgd2hldGhlciB5b3VyIHN5c3RlbSBoYXMgPGNvZGU+L2Jpbi9zaDwvY29kZT4KK2F2YWlsYWJsZS4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fc3lzdGVtX3I8L2NvZGU+IGlzIGEgcmVlbnRyYW50IHZlcnNpb24uICBUaGUKK2V4dHJhIGFyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPnN5c3RlbShOVUxMKTwvY29kZT4gcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlmIDxjb2RlPi9iaW4vc2g8L2NvZGU+IGlzIGF2YWlsYWJsZSwgYW5kCis8Y29kZT4wPC9jb2RlPiBpZiBpdCBpcyBub3QuCisKKyAgIDxwPldpdGggYSBjb21tYW5kIGFyZ3VtZW50LCB0aGUgcmVzdWx0IG9mIDxjb2RlPnN5c3RlbTwvY29kZT4gaXMgdGhlIGV4aXQgc3RhdHVzCityZXR1cm5lZCBieSA8Y29kZT4vYmluL3NoPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT5zeXN0ZW08L2NvZGU+LCBidXQgbGVhdmVzIHRoZSBuYXR1cmUgYW5kIGVmZmVjdHMgb2YgYQorY29tbWFuZCBwcm9jZXNzb3IgdW5kZWZpbmVkLiAgQU5TSSBDIGRvZXMsIGhvd2V2ZXIsIHNwZWNpZnkgdGhhdAorPGNvZGU+c3lzdGVtKE5VTEwpPC9jb2RlPiByZXR1cm4gemVybyBvciBub256ZXJvIHRvIHJlcG9ydCBvbiB0aGUgZXhpc3RlbmNlIG9mCithIGNvbW1hbmQgcHJvY2Vzc29yLgorCisgICA8cD5QT1NJWC4yIHJlcXVpcmVzIDxjb2RlPnN5c3RlbTwvY29kZT4sIGFuZCByZXF1aXJlcyB0aGF0IGl0IGludm9rZSBhIDxjb2RlPnNoPC9jb2RlPi4gCitXaGVyZSA8Y29kZT5zaDwvY29kZT4gaXMgZm91bmQgaXMgbGVmdCB1bnNwZWNpZmllZC4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+X2V4aXQ8L2NvZGU+LCA8Y29kZT5fZXhlY3ZlPC9jb2RlPiwgPGNvZGU+X2ZvcmtfcjwvY29kZT4sCis8Y29kZT5fd2FpdF9yPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90aW1lLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90aW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmMzMzNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3RpbWUuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT50aW1lIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJUaW1lZm5zLmh0bWwjVGltZWZucyIgdGl0bGU9IlRpbWVmbnMiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzdHJmdGltZS5odG1sI3N0cmZ0aW1lIiB0aXRsZT0ic3RyZnRpbWUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJfMDA1Zl8wMDVmdHpfMDA1ZmxvY2suaHRtbCNnX3RfMDA1Zl8wMDVmdHpfMDA1ZmxvY2siIHRpdGxlPSJfX3R6X2xvY2siPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InRpbWUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iXzAwNWZfMDA1ZnR6XzAwNWZsb2NrLmh0bWwjZ190XzAwNWZfMDA1ZnR6XzAwNWZsb2NrIj5fX3R6X2xvY2s8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzdHJmdGltZS5odG1sI3N0cmZ0aW1lIj5zdHJmdGltZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlRpbWVmbnMuaHRtbCNUaW1lZm5zIj5UaW1lZm5zPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+OC45IDxjb2RlPnRpbWU8L2NvZGU+Jm1kYXNoO2dldCBjdXJyZW50IGNhbGVuZGFyIHRpbWUgKGFzIHNpbmdsZSBudW1iZXIpPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdGltZS00NDAiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt0aW1lLmgmZ3Q7CisgICAgIHRpbWVfdCB0aW1lKHRpbWVfdCAqPHZhcj50PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT50aW1lPC9jb2RlPiBsb29rcyB1cCB0aGUgYmVzdCBhdmFpbGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQKK3RpbWUgYW5kIHJldHVybnMgaXQsIGVuY29kZWQgYXMgYSA8Y29kZT50aW1lX3Q8L2NvZGU+LiAgSXQgc3RvcmVzIHRoZSBzYW1lCit2YWx1ZSBhdCA8dmFyPnQ8L3Zhcj4gdW5sZXNzIHRoZSBhcmd1bWVudCBpcyA8Y29kZT5OVUxMPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorQSA8Y29kZT4tMTwvY29kZT4gcmVzdWx0IG1lYW5zIHRoZSBjdXJyZW50IHRpbWUgaXMgbm90IGF2YWlsYWJsZTsgb3RoZXJ3aXNlIHRoZQorcmVzdWx0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdGltZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT50aW1lPC9jb2RlPi4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lIHJlcXVpcmVkOiBTb21lIGltcGxlbWVudGF0aW9ucyByZXF1aXJlCis8Y29kZT5nZXR0aW1lb2ZkYXk8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3RtcGZpbGUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3RtcGZpbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJlYzNhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG1wZmlsZS5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnRtcGZpbGUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN3c2NhbmYuaHRtbCNzd3NjYW5mIiB0aXRsZT0ic3dzY2FuZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InRtcG5hbS5odG1sI3RtcG5hbSIgdGl0bGU9InRtcG5hbSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idG1wZmlsZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0bXBuYW0uaHRtbCN0bXBuYW0iPnRtcG5hbTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN3c2NhbmYuaHRtbCNzd3NjYW5mIj5zd3NjYW5mPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjY0IDxjb2RlPnRtcGZpbGU8L2NvZGU+Jm1kYXNoO2NyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdG1wZmlsZS0zMTUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnRtcGZpbGVfMDA1ZnItMzE2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgRklMRSAqdG1wZmlsZSh2b2lkKTsKKyAgICAgCisgICAgIEZJTEUgKl90bXBmaWxlX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgKGEgZmlsZSB3aGljaCB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSksCit1c2luZyBhIG5hbWUgZ2VuZXJhdGVkIGJ5IDxjb2RlPnRtcG5hbTwvY29kZT4uICBUaGUgdGVtcG9yYXJ5IGZpbGUgaXMgb3BlbmVkIHdpdGgKK3RoZSBtb2RlIDxjb2RlPiJ3YisiPC9jb2RlPiwgcGVybWl0dGluZyB5b3UgdG8gcmVhZCBhbmQgd3JpdGUgYW55d2hlcmUgaW4gaXQKK2FzIGEgYmluYXJ5IGZpbGUgKHdpdGhvdXQgYW55IGRhdGEgdHJhbnNmb3JtYXRpb25zIHRoZSBob3N0IHN5c3RlbSBtYXkKK3BlcmZvcm0gZm9yIHRleHQgZmlsZXMpLgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl90bXBmaWxlX3I8L2NvZGU+IGlzIGEgcmVlbnRyYW50IHZlcnNpb24uICBUaGUKK2FyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPnRtcGZpbGU8L2NvZGU+IG5vcm1hbGx5IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZS4gIElmIG5vCit0ZW1wb3JhcnkgZmlsZSBjb3VsZCBiZSBjcmVhdGVkLCB0aGUgcmVzdWx0IGlzIE5VTEwsIGFuZCA8Y29kZT5lcnJubzwvY29kZT4KK3JlY29yZHMgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0JvdGggQU5TSSBDIGFuZCB0aGUgU3lzdGVtIFYgSW50ZXJmYWNlIERlZmluaXRpb24gKElzc3VlIDIpIHJlcXVpcmUKKzxjb2RlPnRtcGZpbGU8L2NvZGU+LgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOiA8Y29kZT5jbG9zZTwvY29kZT4sIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+Z2V0cGlkPC9jb2RlPiwKKzxjb2RlPmlzYXR0eTwvY29kZT4sIDxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+b3BlbjwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48Y29kZT50bXBmaWxlPC9jb2RlPiBhbHNvIHJlcXVpcmVzIHRoZSBnbG9iYWwgcG9pbnRlciA8Y29kZT5lbnZpcm9uPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90bXBuYW0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3RtcG5hbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZWUyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90bXBuYW0uaHRtbApAQCAtMCwwICsxLDEwMSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+dG1wbmFtIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ0bXBmaWxlLmh0bWwjdG1wZmlsZSIgdGl0bGU9InRtcGZpbGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ1bmdldGMuaHRtbCN1bmdldGMiIHRpdGxlPSJ1bmdldGMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InRtcG5hbSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ1bmdldGMuaHRtbCN1bmdldGMiPnVuZ2V0YzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InRtcGZpbGUuaHRtbCN0bXBmaWxlIj50bXBmaWxlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjY1IDxjb2RlPnRtcG5hbTwvY29kZT4sIDxjb2RlPnRlbXBuYW08L2NvZGU+Jm1kYXNoO25hbWUgZm9yIGEgdGVtcG9yYXJ5IGZpbGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC10bXBuYW0tMzE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtdGVtcG5hbS0zMTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnRtcG5hbV8wMDVmci0zMTkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnRlbXBuYW1fMDA1ZnItMzIwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgY2hhciAqdG1wbmFtKGNoYXIgKjx2YXI+czwvdmFyPik7CisgICAgIGNoYXIgKnRlbXBuYW0oY2hhciAqPHZhcj5kaXI8L3Zhcj4sIGNoYXIgKjx2YXI+cGZ4PC92YXI+KTsKKyAgICAgY2hhciAqX3RtcG5hbV9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNoYXIgKjx2YXI+czwvdmFyPik7CisgICAgIGNoYXIgKl90ZW1wbmFtX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgY2hhciAqPHZhcj5kaXI8L3Zhcj4sIGNoYXIgKjx2YXI+cGZ4PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitVc2UgZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byBnZW5lcmF0ZSBhIG5hbWUgZm9yIGEgdGVtcG9yYXJ5IGZpbGUuIAorVGhlIGdlbmVyYXRlZCBuYW1lIGlzIGd1YXJhbnRlZWQgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggb3RoZXIgZmlsZXMKKyhmb3IgdXAgdG8gPGNvZGU+VE1QX01BWDwvY29kZT4gY2FsbHMgb2YgZWl0aGVyIGZ1bmN0aW9uKS4KKworICAgPHA+PGNvZGU+dG1wbmFtPC9jb2RlPiBnZW5lcmF0ZXMgZmlsZSBuYW1lcyB3aXRoIHRoZSB2YWx1ZSBvZiA8Y29kZT5QX3RtcGRpcjwvY29kZT4KKyhkZWZpbmVkIGluIGA8Y29kZT5zdGRpby5oPC9jb2RlPicpIGFzIHRoZSBsZWFkaW5nIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgdGhlIHBhdGguCisKKyAgIDxwPllvdSBjYW4gdXNlIHRoZSA8Y29kZT50bXBuYW08L2NvZGU+IGFyZ3VtZW50IDx2YXI+czwvdmFyPiB0byBzcGVjaWZ5IGEgc3VpdGFibGUgYXJlYQorb2YgbWVtb3J5IGZvciB0aGUgZ2VuZXJhdGVkIGZpbGVuYW1lOyBvdGhlcndpc2UsIHlvdSBjYW4gY2FsbAorPGNvZGU+dG1wbmFtKE5VTEwpPC9jb2RlPiB0byB1c2UgYW4gaW50ZXJuYWwgc3RhdGljIGJ1ZmZlci4KKworICAgPHA+PGNvZGU+dGVtcG5hbTwvY29kZT4gYWxsb3dzIHlvdSBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgZ2VuZXJhdGVkIGZpbGVuYW1lOiB5b3UKK2NhbiB1c2UgdGhlIGFyZ3VtZW50IDx2YXI+ZGlyPC92YXI+IHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gYSBkaXJlY3RvcnkgZm9yCit0ZW1wb3JhcnkgZmlsZXMsIGFuZCB5b3UgY2FuIHVzZSB0aGUgYXJndW1lbnQgPHZhcj5wZng8L3Zhcj4gdG8gc3BlY2lmeSBhCitwcmVmaXggZm9yIHRoZSBiYXNlIGZpbGVuYW1lLgorCisgICA8cD5JZiA8dmFyPmRpcjwvdmFyPiBpcyA8Y29kZT5OVUxMPC9jb2RlPiwgPGNvZGU+dGVtcG5hbTwvY29kZT4gd2lsbCBhdHRlbXB0IHRvIHVzZSB0aGUgdmFsdWUgb2YKK2Vudmlyb25tZW50IHZhcmlhYmxlIDxjb2RlPlRNUERJUjwvY29kZT4gaW5zdGVhZDsgaWYgdGhlcmUgaXMgbm8gc3VjaCB2YWx1ZSwKKzxjb2RlPnRlbXBuYW08L2NvZGU+IHVzZXMgdGhlIHZhbHVlIG9mIDxjb2RlPlBfdG1wZGlyPC9jb2RlPiAoZGVmaW5lZCBpbiBgPGNvZGU+c3RkaW8uaDwvY29kZT4nKS4KKworICAgPHA+SWYgeW91IGRvbid0IG5lZWQgYW55IHBhcnRpY3VsYXIgcHJlZml4IHRvIHRoZSBiYXNlbmFtZSBvZiB0ZW1wb3JhcnkKK2ZpbGVzLCB5b3UgY2FuIHBhc3MgPGNvZGU+TlVMTDwvY29kZT4gYXMgdGhlIDx2YXI+cGZ4PC92YXI+IGFyZ3VtZW50IHRvIDxjb2RlPnRlbXBuYW08L2NvZGU+LgorCisgICA8cD48Y29kZT5fdG1wbmFtX3I8L2NvZGU+IGFuZCA8Y29kZT5fdGVtcG5hbV9yPC9jb2RlPiBhcmUgcmVlbnRyYW50IHZlcnNpb25zIG9mIDxjb2RlPnRtcG5hbTwvY29kZT4KK2FuZCA8Y29kZT50ZW1wbmFtPC9jb2RlPiByZXNwZWN0aXZlbHkuICBUaGUgZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhCitwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+V2FybmluZ3M8L3N0cm9uZz48YnI+CitUaGUgZ2VuZXJhdGVkIGZpbGVuYW1lcyBhcmUgc3VpdGFibGUgZm9yIHRlbXBvcmFyeSBmaWxlcywgYnV0IGRvIG5vdAoraW4gdGhlbXNlbHZlcyBtYWtlIGZpbGVzIHRlbXBvcmFyeS4gIEZpbGVzIHdpdGggdGhlc2UgbmFtZXMgbXVzdCBzdGlsbAorYmUgZXhwbGljaXRseSByZW1vdmVkIHdoZW4geW91IG5vIGxvbmdlciB3YW50IHRoZW0uCisKKyAgIDxwPklmIHlvdSBzdXBwbHkgeW91ciBvd24gZGF0YSBhcmVhIDx2YXI+czwvdmFyPiBmb3IgPGNvZGU+dG1wbmFtPC9jb2RlPiwgeW91IG11c3QgZW5zdXJlCit0aGF0IGl0IGhhcyByb29tIGZvciBhdCBsZWFzdCA8Y29kZT5MX3RtcG5hbTwvY29kZT4gZWxlbWVudHMgb2YgdHlwZSA8Y29kZT5jaGFyPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorQm90aCA8Y29kZT50bXBuYW08L2NvZGU+IGFuZCA8Y29kZT50ZW1wbmFtPC9jb2RlPiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseQorZ2VuZXJhdGVkIGZpbGVuYW1lLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPnRtcG5hbTwvY29kZT4sIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IHRoZSB1c2Ugb2YKKzxjb2RlPlBfdG1wZGlyPC9jb2RlPi4gIFRoZSBTeXN0ZW0gViBJbnRlcmZhY2UgRGVmaW5pdGlvbiAoSXNzdWUgMikgcmVxdWlyZXMKK2JvdGggPGNvZGU+dG1wbmFtPC9jb2RlPiBhbmQgPGNvZGU+dGVtcG5hbTwvY29kZT4uCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgIDxjb2RlPmZzdGF0PC9jb2RlPiwgPGNvZGU+Z2V0cGlkPC9jb2RlPiwKKzxjb2RlPmlzYXR0eTwvY29kZT4sIDxjb2RlPmxzZWVrPC9jb2RlPiwgPGNvZGU+b3BlbjwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD5UaGUgZ2xvYmFsIHBvaW50ZXIgPGNvZGU+ZW52aXJvbjwvY29kZT4gaXMgYWxzbyByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90b2FzY2lpLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90b2FzY2lpLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5NWM3YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3RvYXNjaWkuaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT50b2FzY2lpIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpc3hkaWdpdC5odG1sI2lzeGRpZ2l0IiB0aXRsZT0iaXN4ZGlnaXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ0b2xvd2VyLmh0bWwjdG9sb3dlciIgdGl0bGU9InRvbG93ZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InRvYXNjaWkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0idG9sb3dlci5odG1sI3RvbG93ZXIiPnRvbG93ZXI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpc3hkaWdpdC5odG1sI2lzeGRpZ2l0Ij5pc3hkaWdpdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4xMiA8Y29kZT50b2FzY2lpPC9jb2RlPiZtZGFzaDtmb3JjZSBpbnRlZ2VycyB0byBBU0NJSSByYW5nZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXRvYXNjaWktMTIyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKKyAgICAgaW50IHRvYXNjaWkoaW50IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+dG9hc2NpaTwvY29kZT4gaXMgYSBtYWNybyB3aGljaCBjb2VyY2VzIGludGVnZXJzIHRvIHRoZSBBU0NJSSByYW5nZSAoMCZuZGFzaDsxMjcpIGJ5IHplcm9pbmcgYW55IGhpZ2hlci1vcmRlciBiaXRzLgorCisgICA8cD5Zb3UgY2FuIHVzZSBhIGNvbXBpbGVkIHN1YnJvdXRpbmUgaW5zdGVhZCBvZiB0aGUgbWFjcm8gZGVmaW5pdGlvbiBieQordW5kZWZpbmluZyB0aGlzIG1hY3JvIHVzaW5nIGA8Y29kZT4jdW5kZWYgdG9hc2NpaTwvY29kZT4nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT50b2FzY2lpPC9jb2RlPiByZXR1cm5zIGludGVnZXJzIGJldHdlZW4gMCBhbmQgMTI3LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+dG9hc2NpaTwvY29kZT4gaXMgbm90IEFOU0kgQy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG9sb3dlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG9sb3dlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OWE2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90b2xvd2VyLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+dG9sb3dlciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idG9hc2NpaS5odG1sI3RvYXNjaWkiIHRpdGxlPSJ0b2FzY2lpIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idG91cHBlci5odG1sI3RvdXBwZXIiIHRpdGxlPSJ0b3VwcGVyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ0b2xvd2VyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InRvdXBwZXIuaHRtbCN0b3VwcGVyIj50b3VwcGVyPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idG9hc2NpaS5odG1sI3RvYXNjaWkiPnRvYXNjaWk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMTMgPGNvZGU+dG9sb3dlcjwvY29kZT4mbWRhc2g7dHJhbnNsYXRlIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdG9sb3dlci0xMjMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnRvbG93ZXItMTI0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKKyAgICAgaW50IHRvbG93ZXIoaW50IDx2YXI+YzwvdmFyPik7CisgICAgIGludCBfdG9sb3dlcihpbnQgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT50b2xvd2VyPC9jb2RlPiBpcyBhIG1hY3JvIHdoaWNoIGNvbnZlcnRzIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwKK2xlYXZpbmcgYWxsIG90aGVyIGNoYXJhY3RlcnMgdW5jaGFuZ2VkLiAgSXQgaXMgb25seSBkZWZpbmVkIHdoZW4KKzx2YXI+YzwvdmFyPiBpcyBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSA8Y29kZT5FT0Y8L2NvZGU+IHRvIDxjb2RlPjI1NTwvY29kZT4uCisKKyAgIDxwPllvdSBjYW4gdXNlIGEgY29tcGlsZWQgc3Vicm91dGluZSBpbnN0ZWFkIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGJ5Cit1bmRlZmluaW5nIHRoaXMgbWFjcm8gdXNpbmcgYDxjb2RlPiN1bmRlZiB0b2xvd2VyPC9jb2RlPicuCisKKyAgIDxwPjxjb2RlPl90b2xvd2VyPC9jb2RlPiBwZXJmb3JtcyB0aGUgc2FtZSBjb252ZXJzaW9uIGFzIDxjb2RlPnRvbG93ZXI8L2NvZGU+LCBidXQgc2hvdWxkCitvbmx5IGJlIHVzZWQgd2hlbiA8dmFyPmM8L3Zhcj4gaXMga25vd24gdG8gYmUgYW4gdXBwZXJjYXNlIGNoYXJhY3RlciAoPGNvZGU+QTwvY29kZT4mbmRhc2g7PGNvZGU+WjwvY29kZT4pLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT50b2xvd2VyPC9jb2RlPiByZXR1cm5zIHRoZSBsb3dlcmNhc2UgZXF1aXZhbGVudCBvZiA8dmFyPmM8L3Zhcj4gd2hlbiBpdCBpcyBhCitjaGFyYWN0ZXIgYmV0d2VlbiA8Y29kZT5BPC9jb2RlPiBhbmQgPGNvZGU+WjwvY29kZT4sIGFuZCA8dmFyPmM8L3Zhcj4gb3RoZXJ3aXNlLgorCisgICA8cD48Y29kZT5fdG9sb3dlcjwvY29kZT4gcmV0dXJucyB0aGUgbG93ZXJjYXNlIGVxdWl2YWxlbnQgb2YgPHZhcj5jPC92YXI+IHdoZW4gaXQgaXMgYQorY2hhcmFjdGVyIGJldHdlZW4gPGNvZGU+QTwvY29kZT4gYW5kIDxjb2RlPlo8L2NvZGU+LiAgSWYgPHZhcj5jPC92YXI+IGlzIG5vdCBvbmUgb2YgdGhlc2UKK2NoYXJhY3RlcnMsIHRoZSBiZWhhdmlvdXIgb2YgPGNvZGU+X3RvbG93ZXI8L2NvZGU+IGlzIHVuZGVmaW5lZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnRvbG93ZXI8L2NvZGU+IGlzIEFOU0kgQy4gIDxjb2RlPl90b2xvd2VyPC9jb2RlPiBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHBvcnRhYmxlCitwcm9ncmFtcy4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG91cHBlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG91cHBlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDhhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90b3VwcGVyLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+dG91cHBlciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idG9sb3dlci5odG1sI3RvbG93ZXIiIHRpdGxlPSJ0b2xvd2VyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaXN3YWxudW0uaHRtbCNpc3dhbG51bSIgdGl0bGU9Imlzd2FsbnVtIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ0b3VwcGVyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Imlzd2FsbnVtLmh0bWwjaXN3YWxudW0iPmlzd2FsbnVtPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idG9sb3dlci5odG1sI3RvbG93ZXIiPnRvbG93ZXI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIj5DdHlwZTwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjMuMTQgPGNvZGU+dG91cHBlcjwvY29kZT4mbWRhc2g7dHJhbnNsYXRlIGNoYXJhY3RlcnMgdG8gdXBwZXJjYXNlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdG91cHBlci0xMjUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnRvdXBwZXItMTI2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y3R5cGUuaCZndDsKKyAgICAgaW50IHRvdXBwZXIoaW50IDx2YXI+YzwvdmFyPik7CisgICAgIGludCBfdG91cHBlcihpbnQgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT50b3VwcGVyPC9jb2RlPiBpcyBhIG1hY3JvIHdoaWNoIGNvbnZlcnRzIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIHRvIHVwcGVyY2FzZSwKK2xlYXZpbmcgYWxsIG90aGVyIGNoYXJhY3RlcnMgdW5jaGFuZ2VkLiAgSXQgaXMgb25seSBkZWZpbmVkIHdoZW4KKzx2YXI+YzwvdmFyPiBpcyBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSA8Y29kZT5FT0Y8L2NvZGU+IHRvIDxjb2RlPjI1NTwvY29kZT4uCisKKyAgIDxwPllvdSBjYW4gdXNlIGEgY29tcGlsZWQgc3Vicm91dGluZSBpbnN0ZWFkIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGJ5Cit1bmRlZmluaW5nIHRoaXMgbWFjcm8gdXNpbmcgYDxjb2RlPiN1bmRlZiB0b3VwcGVyPC9jb2RlPicuCisKKyAgIDxwPjxjb2RlPl90b3VwcGVyPC9jb2RlPiBwZXJmb3JtcyB0aGUgc2FtZSBjb252ZXJzaW9uIGFzIDxjb2RlPnRvdXBwZXI8L2NvZGU+LCBidXQgc2hvdWxkCitvbmx5IGJlIHVzZWQgd2hlbiA8dmFyPmM8L3Zhcj4gaXMga25vd24gdG8gYmUgYSBsb3dlcmNhc2UgY2hhcmFjdGVyICg8Y29kZT5hPC9jb2RlPiZuZGFzaDs8Y29kZT56PC9jb2RlPikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPnRvdXBwZXI8L2NvZGU+IHJldHVybnMgdGhlIHVwcGVyY2FzZSBlcXVpdmFsZW50IG9mIDx2YXI+YzwvdmFyPiB3aGVuIGl0IGlzIGEKK2NoYXJhY3RlciBiZXR3ZWVuIDxjb2RlPmE8L2NvZGU+IGFuZCA8Y29kZT56PC9jb2RlPiwgYW5kIDx2YXI+YzwvdmFyPiBvdGhlcndpc2UuCisKKyAgIDxwPjxjb2RlPl90b3VwcGVyPC9jb2RlPiByZXR1cm5zIHRoZSB1cHBlcmNhc2UgZXF1aXZhbGVudCBvZiA8dmFyPmM8L3Zhcj4gd2hlbiBpdCBpcyBhCitjaGFyYWN0ZXIgYmV0d2VlbiA8Y29kZT5hPC9jb2RlPiBhbmQgPGNvZGU+ejwvY29kZT4uICBJZiA8dmFyPmM8L3Zhcj4gaXMgbm90IG9uZSBvZiB0aGVzZQorY2hhcmFjdGVycywgdGhlIGJlaGF2aW91ciBvZiA8Y29kZT5fdG91cHBlcjwvY29kZT4gaXMgdW5kZWZpbmVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+dG91cHBlcjwvY29kZT4gaXMgQU5TSSBDLiAgPGNvZGU+X3RvdXBwZXI8L2NvZGU+IGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgcG9ydGFibGUgcHJvZ3JhbXMuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Rvd2N0cmFucy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG93Y3RyYW5zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0NjU2ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Rvd2N0cmFucy5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnRvd2N0cmFucyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idG93dXBwZXIuaHRtbCN0b3d1cHBlciIgdGl0bGU9InRvd3VwcGVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2N0cmFucy5odG1sI3djdHJhbnMiIHRpdGxlPSJ3Y3RyYW5zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ0b3djdHJhbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2N0cmFucy5odG1sI3djdHJhbnMiPndjdHJhbnM8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ0b3d1cHBlci5odG1sI3Rvd3VwcGVyIj50b3d1cHBlcjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiPkN0eXBlPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+My4zMSA8Y29kZT50b3djdHJhbnM8L2NvZGU+Jm1kYXNoO2V4dGVuc2libGUgd2lkZS1jaGFyYWN0ZXIgdHJhbnNsYXRpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC10b3djdHJhbnMtMTQzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2N0eXBlLmgmZ3Q7CisgICAgIHdpbnRfdCB0b3djdHJhbnMod2ludF90IDx2YXI+YzwvdmFyPiwgd2N0cmFuc190IDx2YXI+dzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+dG93Y3RyYW5zPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIGNvbnZlcnRzIHdpZGUgY2hhcmFjdGVycyBiYXNlZCBvbgorYSBzcGVjaWZpZWQgdHJhbnNsYXRpb24gdHlwZSA8dmFyPnc8L3Zhcj4uICBJZiB0aGUgdHJhbnNsYXRpb24gdHlwZSBpcworaW52YWxpZCBvciBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgY3VycmVudCBjaGFyYWN0ZXIsIG5vIGNoYW5nZQordG8gdGhlIGNoYXJhY3RlciBpcyBtYWRlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT50b3djdHJhbnM8L2NvZGU+IHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgZXF1aXZhbGVudCBvZiA8dmFyPmM8L3Zhcj4gd2hlbiBpdCBpcyBhCit2YWxpZCBmb3IgdGhlIGdpdmVuIHRyYW5zbGF0aW9uLCBvdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIGlucHV0IGNoYXJhY3Rlci4gCitXaGVuIHRoZSB0cmFuc2xhdGlvbiB0eXBlIGlzIGludmFsaWQsIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgPGNvZGU+RUlOVkFMPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnRvd2N0cmFuczwvY29kZT4gaXMgQzk5LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90b3dsb3dlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG93bG93ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWFlZGUxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG93bG93ZXIuaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT50b3dsb3dlciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2N0eXBlLmh0bWwjd2N0eXBlIiB0aXRsZT0id2N0eXBlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idG93dXBwZXIuaHRtbCN0b3d1cHBlciIgdGl0bGU9InRvd3VwcGVyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ0b3dsb3dlciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0b3d1cHBlci5odG1sI3Rvd3VwcGVyIj50b3d1cHBlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IndjdHlwZS5odG1sI3djdHlwZSI+d2N0eXBlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjI5IDxjb2RlPnRvd2xvd2VyPC9jb2RlPiZtZGFzaDt0cmFuc2xhdGUgd2lkZSBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXRvd2xvd2VyLTE0MSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djdHlwZS5oJmd0OworICAgICB3aW50X3QgdG93bG93ZXIod2ludF90IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+dG93bG93ZXI8L2NvZGU+IGlzIGEgZnVuY3Rpb24gd2hpY2ggY29udmVydHMgdXBwZXJjYXNlIHdpZGUgY2hhcmFjdGVycyB0bworbG93ZXJjYXNlLCBsZWF2aW5nIGFsbCBvdGhlciBjaGFyYWN0ZXJzIHVuY2hhbmdlZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+dG93bG93ZXI8L2NvZGU+IHJldHVybnMgdGhlIGxvd2VyY2FzZSBlcXVpdmFsZW50IG9mIDx2YXI+YzwvdmFyPiB3aGVuIGl0IGlzIGEKK3VwcGVyY2FzZSB3aWRlIGNoYXJhY3Rlcjsgb3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBpbnB1dCBjaGFyYWN0ZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT50b3dsb3dlcjwvY29kZT4gaXMgQzk5LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90b3d1cHBlci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG93dXBwZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGU5MjBkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdG93dXBwZXIuaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT50b3d1cHBlciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSIgdGl0bGU9IkN0eXBlIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idG93bG93ZXIuaHRtbCN0b3dsb3dlciIgdGl0bGU9InRvd2xvd2VyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idG93Y3RyYW5zLmh0bWwjdG93Y3RyYW5zIiB0aXRsZT0idG93Y3RyYW5zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ0b3d1cHBlciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0b3djdHJhbnMuaHRtbCN0b3djdHJhbnMiPnRvd2N0cmFuczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InRvd2xvd2VyLmh0bWwjdG93bG93ZXIiPnRvd2xvd2VyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjMwIDxjb2RlPnRvd3VwcGVyPC9jb2RlPiZtZGFzaDt0cmFuc2xhdGUgd2lkZSBjaGFyYWN0ZXJzIHRvIHVwcGVyY2FzZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXRvd3VwcGVyLTE0MiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djdHlwZS5oJmd0OworICAgICB3aW50X3QgdG93dXBwZXIod2ludF90IDx2YXI+YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+dG93dXBwZXI8L2NvZGU+IGlzIGEgZnVuY3Rpb24gd2hpY2ggY29udmVydHMgbG93ZXJjYXNlIHdpZGUgY2hhcmFjdGVycyB0bwordXBwZXJjYXNlLCBsZWF2aW5nIGFsbCBvdGhlciBjaGFyYWN0ZXJzIHVuY2hhbmdlZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+dG93dXBwZXI8L2NvZGU+IHJldHVybnMgdGhlIHVwcGVyY2FzZSBlcXVpdmFsZW50IG9mIDx2YXI+YzwvdmFyPiB3aGVuIGl0IGlzIGEKK2xvd2VyY2FzZSB3aWRlIGNoYXJhY3Rlciwgb3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBpbnB1dCBjaGFyYWN0ZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT50b3d1cHBlcjwvY29kZT4gaXMgQzk5LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC90enNldC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdHpzZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWU4YzViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdHpzZXQuaHRtbApAQCAtMCwwICsxLDg5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT50enNldCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiIHRpdGxlPSJUaW1lZm5zIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iXzAwNWZfMDA1ZnR6XzAwNWZsb2NrLmh0bWwjZ190XzAwNWZfMDA1ZnR6XzAwNWZsb2NrIiB0aXRsZT0iX190el9sb2NrIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ0enNldCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Il8wMDVmXzAwNWZ0el8wMDVmbG9jay5odG1sI2dfdF8wMDVmXzAwNWZ0el8wMDVmbG9jayI+X190el9sb2NrPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVGltZWZucy5odG1sI1RpbWVmbnMiPlRpbWVmbnM8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj44LjExIDxjb2RlPnR6c2V0PC9jb2RlPiZtZGFzaDtzZXQgdGltZXpvbmUgY2hhcmFjdGVyaXN0aWNzIGZyb20gVFogZW52aXJvbm1lbnQgdmFyaWFibGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC10enNldC00NDMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnR6c2V0XzAwNWZyLTQ0NCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKKyAgICAgdm9pZCB0enNldCh2b2lkKTsKKyAgICAgdm9pZCBfdHpzZXRfciAoc3RydWN0IF9yZWVudCAqKTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT50enNldDwvY29kZT4gZXhhbWluZXMgdGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBzZXRzIHVwIHRoZSB0aHJlZQorZXh0ZXJuYWwgdmFyaWFibGVzOiA8Y29kZT5fdGltZXpvbmU8L2NvZGU+LCA8Y29kZT5fZGF5bGlnaHQ8L2NvZGU+LCBhbmQgPGNvZGU+dHpuYW1lPC9jb2RlPi4gIFRoZQordmFsdWUgb2YgPGNvZGU+X3RpbWV6b25lPC9jb2RlPiBzaGFsbCBiZSB0aGUgb2Zmc2V0IGZyb20gdGhlIGN1cnJlbnQgdGltZSB6b25lCit0byBHTVQuICBUaGUgdmFsdWUgb2YgPGNvZGU+X2RheWxpZ2h0PC9jb2RlPiBzaGFsbCBiZSAwIGlmIHRoZXJlIGlzIG5vIGRheWxpZ2h0CitzYXZpbmdzIHRpbWUgZm9yIHRoZSBjdXJyZW50IHRpbWUgem9uZSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgbm9uLXplcm8uIAorVGhlIDxjb2RlPnR6bmFtZTwvY29kZT4gYXJyYXkgaGFzIHR3byBlbnRyaWVzOiB0aGUgZmlyc3QgaXMgdGhlIG5hbWUgb2YgdGhlCitzdGFuZGFyZCB0aW1lIHpvbmUsIHRoZSBzZWNvbmQgaXMgdGhlIG5hbWUgb2YgdGhlIGRheWxpZ2h0LXNhdmluZ3MgdGltZQorem9uZS4KKworICAgPHA+VGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBmb2xsb3dpbmcgUE9TSVgKK2Zvcm1hdDoKKworICAgPHA+c3Rkb2Zmc2V0MVtkc3Rbb2Zmc2V0Ml1bLHN0YXJ0Wy90aW1lMV0sZW5kWy90aW1lMl1dXQorCisgICA8cD53aGVyZTogc3RkIGlzIHRoZSBuYW1lIG9mIHRoZSBzdGFuZGFyZCB0aW1lLXpvbmUgKG1pbmltdW0gMyBjaGFycykKK29mZnNldDEgaXMgdGhlIHZhbHVlIHRvIGFkZCB0byBsb2NhbCB0aW1lIHRvIGFycml2ZSBhdCBVbml2ZXJzYWwgdGltZQoraXQgaGFzIHRoZSBmb3JtOiAgaGhbOm1tWzpzc11dCitkc3QgaXMgdGhlIG5hbWUgb2YgdGhlIGFsdGVybmF0ZSAoZGF5bGlnaHQtc2F2aW5ncykgdGltZS16b25lIChtaW4gMyBjaGFycykKK29mZnNldDIgaXMgdGhlIHZhbHVlIHRvIGFkZCB0byBsb2NhbCB0aW1lIHRvIGFycml2ZSBhdCBVbml2ZXJzYWwgdGltZQoraXQgaGFzIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgc3RkIG9mZnNldAorc3RhcnQgaXMgdGhlIGRheSB0aGF0IHRoZSBhbHRlcm5hdGUgdGltZS16b25lIHN0YXJ0cwordGltZTEgaXMgdGhlIG9wdGlvbmFsIHRpbWUgdGhhdCB0aGUgYWx0ZXJuYXRlIHRpbWUtem9uZSBzdGFydHMKKyh0aGlzIGlzIGluIGxvY2FsIHRpbWUgYW5kIGRlZmF1bHRzIHRvIDAyOjAwOjAwIGlmIG5vdCBzcGVjaWZpZWQpCitlbmQgaXMgdGhlIGRheSB0aGF0IHRoZSBhbHRlcm5hdGUgdGltZS16b25lIGVuZHMKK3RpbWUyIGlzIHRoZSB0aW1lIHRoYXQgdGhlIGFsdGVybmF0ZSB0aW1lLXpvbmUgZW5kcworKGl0IGlzIGluIGxvY2FsIHRpbWUgYW5kIGRlZmF1bHRzIHRvIDAyOjAwOjAwIGlmIG5vdCBzcGVjaWZpZWQpCisKKyAgIDxwPk5vdGUgdGhhdCB0aGVyZSBpcyBubyB3aGl0ZS1zcGFjZSBwYWRkaW5nIGJldHdlZW4gZmllbGRzLiAgQWxzbyBub3RlIHRoYXQKK2lmIFRaIGlzIG51bGwsIHRoZSBkZWZhdWx0IGlzIFVuaXZlcnNhbCBHTVQgd2hpY2ggaGFzIG5vIGRheWxpZ2h0LXNhdmluZ3MKK3RpbWUuICBJZiBUWiBpcyBlbXB0eSwgdGhlIGRlZmF1bHQgRVNUNUVEVCBpcyB1c2VkLgorCisgICA8cD5UaGUgZnVuY3Rpb24gPGNvZGU+X3R6c2V0X3I8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT50enNldDwvY29kZT4gb25seSBpdCBpcyByZWVudHJhbnQKK2FuZCBpcyB1c2VkIGZvciBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgbXVsdGlwbGUgdGhyZWFkcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+dHpzZXQ8L2NvZGU+IGlzIHBhcnQgb2YgdGhlIFBPU0lYIHN0YW5kYXJkLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmUgcmVxdWlyZWQ6IE5vbmUKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC91bmN0cmwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3VuY3RybC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTY0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC91bmN0cmwuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT51bmN0cmwgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1pc2MuaHRtbCNNaXNjIiB0aXRsZT0iTWlzYyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZmcy5odG1sI2ZmcyIgdGl0bGU9ImZmcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idW5jdHJsIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZmZzLmh0bWwjZmZzIj5mZnM8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNaXNjLmh0bWwjTWlzYyI+TWlzYzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjExLjIgPGNvZGU+dW5jdHJsPC9jb2RlPiZtZGFzaDtnZXQgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hhcmFjdGVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdW5jdHJsLTQ1OSI+PC9hPjxhIG5hbWU9ImluZGV4LXVuY3RybGxlbi00NjAiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt1bmN0cmwuaCZndDsKKyAgICAgY2hhciAqdW5jdHJsKGludCA8dmFyPmM8L3Zhcj4pOworICAgICBpbnQgdW5jdHJsbGVuKGludCA8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnVuY3RybDwvY29kZT4gaXMgYSBtYWNybyB3aGljaCByZXR1cm5zIHRoZSBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgPHZhcj5jPC92YXI+CithcyBhIHN0cmluZy4gCis8Y29kZT51bmN0cmxsZW48L2NvZGU+IGlzIGEgbWFjcm8gd2hpY2ggcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBwcmludGFibGUKK3JlcHJlc2VudGF0aW9uIG9mIDx2YXI+YzwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+dW5jdHJsPC9jb2RlPiByZXR1cm5zIGEgc3RyaW5nIG9mIHRoZSBwcmludGFibGUgcmVwcmVzZW50YXRpb24gb2YgPHZhcj5jPC92YXI+LgorCisgICA8cD48Y29kZT51bmN0cmxsZW48L2NvZGU+IHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHdoaWNoIGlzIHRoZSBwcmludGFibGUKK3JlcHJlc2VudGF0aW9uIG9mIDx2YXI+YzwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnVuY3RybDwvY29kZT4gYW5kIDxjb2RlPnVuY3RybGxlbjwvY29kZT4gYXJlIG5vdCBBTlNJIEMuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+Cis8IS0tICotIFRleGluZm8gLSotIC0tPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC91bmdldGMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3VuZ2V0Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMWNlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC91bmdldGMuaHRtbApAQCAtMCwwICsxLDc2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT51bmdldGMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InRtcG5hbS5odG1sI3RtcG5hbSIgdGl0bGU9InRtcG5hbSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InVuZ2V0d2MuaHRtbCN1bmdldHdjIiB0aXRsZT0idW5nZXR3YyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idW5nZXRjIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InVuZ2V0d2MuaHRtbCN1bmdldHdjIj51bmdldHdjPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idG1wbmFtLmh0bWwjdG1wbmFtIj50bXBuYW08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNjYgPGNvZGU+dW5nZXRjPC9jb2RlPiZtZGFzaDtwdXNoIGRhdGEgYmFjayBpbnRvIGEgc3RyZWFtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdW5nZXRjLTMyMSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdW5nZXRjXzAwNWZyLTMyMiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgIGludCB1bmdldGMoaW50IDx2YXI+YzwvdmFyPiwgRklMRSAqPHZhcj5zdHJlYW08L3Zhcj4pOworICAgICAKKyAgICAgaW50IF91bmdldGNfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBpbnQgPHZhcj5jPC92YXI+LCBGSUxFICo8dmFyPnN0cmVhbTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+dW5nZXRjPC9jb2RlPiBpcyB1c2VkIHRvIHJldHVybiBieXRlcyBiYWNrIHRvIDx2YXI+c3RyZWFtPC92YXI+IHRvIGJlIHJlYWQgYWdhaW4uIAorSWYgPHZhcj5jPC92YXI+IGlzIEVPRiwgdGhlIHN0cmVhbSBpcyB1bmNoYW5nZWQuICBPdGhlcndpc2UsIHRoZSB1bnNpZ25lZAorY2hhciA8dmFyPmM8L3Zhcj4gaXMgcHV0IGJhY2sgb24gdGhlIHN0cmVhbSwgYW5kIHN1YnNlcXVlbnQgcmVhZHMgd2lsbCBzZWUKK3RoZSBieXRlcyBwdXNoZWQgYmFjayBpbiByZXZlcnNlIG9yZGVyLiAgUHVzaGVkIGJ5ZXMgYXJlIGxvc3QgaWYgdGhlCitzdHJlYW0gaXMgcmVwb3NpdGlvbmVkLCBzdWNoIGFzIGJ5IDxjb2RlPmZzZWVrPC9jb2RlPiwgPGNvZGU+ZnNldHBvczwvY29kZT4sIG9yCis8Y29kZT5yZXdpbmQ8L2NvZGU+LgorCisgICA8cD5UaGUgdW5kZXJseWluZyBmaWxlIGlzIG5vdCBjaGFuZ2VkLCBidXQgaXQgaXMgcG9zc2libGUgdG8gcHVzaCBiYWNrCitzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gd2hhdCB3YXMgb3JpZ2luYWxseSByZWFkLiAgVW5nZXR0aW5nIGEKK2NoYXJhY3RlciB3aWxsIGNsZWFyIHRoZSBlbmQtb2Ytc3RyZWFtIG1hcmtlciwgYW5kIGRlY3JlbWVudCB0aGUgZmlsZQorcG9zaXRpb24gaW5kaWNhdG9yLiAgUHVzaGluZyBiYWNrIGJleW9uZCB0aGUgYmVnaW5uaW5nIG9mIGEgZmlsZSBnaXZlcwordW5zcGVjaWZpZWQgYmVoYXZpb3IuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X3VuZ2V0Y19yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAgVGhlCitleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgY2hhcmFjdGVyIHB1c2hlZCBiYWNrLCBvciA8Y29kZT5FT0Y8L2NvZGU+IG9uIGVycm9yLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDIHJlcXVpcmVzIDxjb2RlPnVuZ2V0YzwvY29kZT4sIGJ1dCBvbmx5IHJlcXVpcmVzIGEgcHVzaGJhY2sgYnVmZmVyIG9mIG9uZQorYnl0ZTsgYWx0aG91Z2ggdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gaGFuZGxlIG11bHRpcGxlIGJ5dGVzLCBub3QgYWxsCitjYW4uICBQdXNoaW5nIGJhY2sgYSBzaWduZWQgY2hhciBpcyBhIGNvbW1vbiBhcHBsaWNhdGlvbiBidWcuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPnNicms8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3VuZ2V0d2MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3VuZ2V0d2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTEwZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdW5nZXR3Yy5odG1sCkBAIC0wLDAgKzEsNzMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnVuZ2V0d2MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InVuZ2V0Yy5odG1sI3VuZ2V0YyIgdGl0bGU9InVuZ2V0YyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InZmcHJpbnRmLmh0bWwjdmZwcmludGYiIHRpdGxlPSJ2ZnByaW50ZiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idW5nZXR3YyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ2ZnByaW50Zi5odG1sI3ZmcHJpbnRmIj52ZnByaW50ZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InVuZ2V0Yy5odG1sI3VuZ2V0YyI+dW5nZXRjPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjY3IDxjb2RlPnVuZ2V0d2M8L2NvZGU+Jm1kYXNoO3B1c2ggd2lkZSBjaGFyYWN0ZXIgZGF0YSBiYWNrIGludG8gYSBzdHJlYW08L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC11bmdldHdjLTMyMyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdW5nZXR3Y18wMDVmci0zMjQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2ludF90IHVuZ2V0d2Mod2ludF90IDx2YXI+d2M8L3Zhcj4sIEZJTEUgKjx2YXI+c3RyZWFtPC92YXI+KTsKKyAgICAgCisgICAgIHdpbnRfdCBfdW5nZXR3Y19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIHdpbnRfdCA8dmFyPndjPC92YXI+LCBGSUxFICo8dmFyPnN0cmVhbTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+dW5nZXR3YzwvY29kZT4gaXMgdXNlZCB0byByZXR1cm4gd2lkZSBjaGFyYWN0ZXJzIGJhY2sgdG8gPHZhcj5zdHJlYW08L3Zhcj4gdG8gYmUKK3JlYWQgYWdhaW4uICBJZiA8dmFyPndjPC92YXI+IGlzIFdFT0YsIHRoZSBzdHJlYW0gaXMgdW5jaGFuZ2VkLiAgT3RoZXJ3aXNlLCB0aGUKK3dpZGUgY2hhcmFjdGVyIDx2YXI+d2M8L3Zhcj4gaXMgcHV0IGJhY2sgb24gdGhlIHN0cmVhbSwgYW5kIHN1YnNlcXVlbnQgcmVhZHMgd2lsbCBzZWUKK3RoZSB3aWRlIGNoYXJzIHB1c2hlZCBiYWNrIGluIHJldmVyc2Ugb3JkZXIuICBQdXNoZWQgd2lkZSBjaGFycyBhcmUgbG9zdCBpZiB0aGUKK3N0cmVhbSBpcyByZXBvc2l0aW9uZWQsIHN1Y2ggYXMgYnkgPGNvZGU+ZnNlZWs8L2NvZGU+LCA8Y29kZT5mc2V0cG9zPC9jb2RlPiwgb3IKKzxjb2RlPnJld2luZDwvY29kZT4uCisKKyAgIDxwPlRoZSB1bmRlcmx5aW5nIGZpbGUgaXMgbm90IGNoYW5nZWQsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byBwdXNoIGJhY2sKK3NvbWV0aGluZyBkaWZmZXJlbnQgdGhhbiB3aGF0IHdhcyBvcmlnaW5hbGx5IHJlYWQuICBVbmdldHRpbmcgYQorY2hhcmFjdGVyIHdpbGwgY2xlYXIgdGhlIGVuZC1vZi1zdHJlYW0gbWFya2VyLCBhbmQgZGVjcmVtZW50IHRoZSBmaWxlCitwb3NpdGlvbiBpbmRpY2F0b3IuICBQdXNoaW5nIGJhY2sgYmV5b25kIHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlIGdpdmVzCit1bnNwZWNpZmllZCBiZWhhdmlvci4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fdW5nZXR3Y19yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAgVGhlCitleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgd2lkZSBjaGFyYWN0ZXIgcHVzaGVkIGJhY2ssIG9yIDxjb2RlPldFT0Y8L2NvZGU+IG9uIGVycm9yLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQzk5CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmFfMDA1ZmFsaXN0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92YV8wMDVmYWxpc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc5NjUwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmFfMDA1ZmFsaXN0Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+dmFfYWxpc3QgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlZhcmFyZ3MuaHRtbCNWYXJhcmdzIiB0aXRsZT0iVmFyYXJncyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InZhXzAwNWZzdGFydF8wMDJkdHJhZC5odG1sI3ZhXzAwNWZzdGFydF8wMDJkdHJhZCIgdGl0bGU9InZhX3N0YXJ0LXRyYWQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZhX2FsaXN0Ij48L2E+Cis8YSBuYW1lPSJ2YV8wMDVmYWxpc3QiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0idmFfMDA1ZnN0YXJ0XzAwMmR0cmFkLmh0bWwjdmFfMDA1ZnN0YXJ0XzAwMmR0cmFkIj52YV9zdGFydC10cmFkPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVmFyYXJncy5odG1sI1ZhcmFyZ3MiPlZhcmFyZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4xMy4yLjEgRGVjbGFyZSB2YXJpYWJsZSBhcmd1bWVudHM8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC12YV8wMDVmYWxpc3QtNTAwIj48L2E+PGEgbmFtZT0iaW5kZXgtdmFfMDA1ZmRjbC01MDEiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt2YXJhcmdzLmgmZ3Q7CisgICAgIDx2YXI+ZnVuY3Rpb248L3Zhcj4odmFfYWxpc3QpCisgICAgIHZhX2RjbAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVG8gdXNlIHRoZSA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+dmFyYXJncy5oPC9zcGFuPjwvc2FtcD4gdmVyc2lvbiBvZiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0cywgeW91IG11c3QKK2RlY2xhcmUgeW91ciBmdW5jdGlvbiB3aXRoIGEgY2FsbCB0byB0aGUgbWFjcm8gPGNvZGU+dmFfYWxpc3Q8L2NvZGU+IGFzIGl0cworYXJndW1lbnQgbGlzdCwgYW5kIHVzZSA8Y29kZT52YV9kY2w8L2NvZGU+IGFzIHRoZSBkZWNsYXJhdGlvbi4gIDxlbT5EbyBub3QKK3VzZSBhIHNlbWljb2xvbiBhZnRlciA8L2VtPjxjb2RlPnZhX2RjbDwvY29kZT48ZW0+LjwvZW0+CisKKyAgIDxwPjxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIG1hY3JvcyBjYW5ub3QgYmUgdXNlZCBpbiBhIGNvbnRleHQgd2hlcmUgYSByZXR1cm4gaXMgc3ludGFjdGljYWxseQorcG9zc2libGUuCisKKyAgIDxwPjxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8dmFyPnZhX2FsaXN0PC92YXI+IGFuZCA8dmFyPnZhX2RjbDwvdmFyPiB3ZXJlIHRoZSBtb3N0IHdpZGVzcHJlYWQgbWV0aG9kIG9mCitkZWNsYXJpbmcgdmFyaWFibGUgYXJndW1lbnQgbGlzdHMgcHJpb3IgdG8gQU5TSSBDLgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92YV8wMDVmYXJnLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92YV8wMDVmYXJnLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyMWY3YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZhXzAwNWZhcmcuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT52YV9hcmcgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGFyZy5odG1sI1N0ZGFyZyIgdGl0bGU9IlN0ZGFyZyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InZhXzAwNWZzdGFydC5odG1sI3ZhXzAwNWZzdGFydCIgdGl0bGU9InZhX3N0YXJ0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idmFfMDA1ZmVuZC5odG1sI3ZhXzAwNWZlbmQiIHRpdGxlPSJ2YV9lbmQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZhX2FyZyI+PC9hPgorPGEgbmFtZT0idmFfMDA1ZmFyZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ2YV8wMDVmZW5kLmh0bWwjdmFfMDA1ZmVuZCI+dmFfZW5kPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idmFfMDA1ZnN0YXJ0Lmh0bWwjdmFfMDA1ZnN0YXJ0Ij52YV9zdGFydDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGFyZy5odG1sI1N0ZGFyZyI+U3RkYXJnPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+MTMuMS4yIEV4dHJhY3QgYSB2YWx1ZSBmcm9tIGFyZ3VtZW50IGxpc3Q8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC12YV8wMDVmYXJnLTQ5OCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OworICAgICA8dmFyPnR5cGU8L3Zhcj4gdmFfYXJnKHZhX2xpc3QgPHZhcj5hcDwvdmFyPiwgPHZhcj50eXBlPC92YXI+KTsKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnZhX2FyZzwvY29kZT4gcmV0dXJucyB0aGUgbmV4dCB1bnByb2Nlc3NlZCB2YWx1ZSBmcm9tIGEgdmFyaWFibGUKK2FyZ3VtZW50IGxpc3QgPHZhcj5hcDwvdmFyPiAod2hpY2ggeW91IG11c3QgcHJldmlvdXNseSBjcmVhdGUgd2l0aAorPHZhcj52YV9zdGFydDwvdmFyPikuICBTcGVjaWZ5IHRoZSB0eXBlIGZvciB0aGUgdmFsdWUgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIKK3RvIHRoZSBtYWNybywgPHZhcj50eXBlPC92YXI+LgorCisgICA8cD5Zb3UgbWF5IHBhc3MgYSA8Y29kZT52YV9saXN0PC9jb2RlPiBvYmplY3QgPHZhcj5hcDwvdmFyPiB0byBhIHN1YmZ1bmN0aW9uLCBhbmQgdXNlCis8Y29kZT52YV9hcmc8L2NvZGU+IGZyb20gdGhlIHN1YmZ1bmN0aW9uIHJhdGhlciB0aGFuIGZyb20gdGhlIGZ1bmN0aW9uCithY3R1YWxseSBkZWNsYXJlZCB3aXRoIGFuIGVsbGlwc2lzIGluIHRoZSBoZWFkZXI7IGhvd2V2ZXIsIGluIHRoYXQgY2FzZQoreW91IG1heSA8ZW0+b25seTwvZW0+IHVzZSA8Y29kZT52YV9hcmc8L2NvZGU+IGZyb20gdGhlIHN1YmZ1bmN0aW9uLiAgQU5TSSBDIGRvZXMKK25vdCBwZXJtaXQgZXh0cmFjdGluZyBzdWNjZXNzaXZlIHZhbHVlcyBmcm9tIGEgc2luZ2xlIHZhcmlhYmxlLWFyZ3VtZW50CitsaXN0IGZyb20gZGlmZmVyZW50IGxldmVscyBvZiB0aGUgY2FsbGluZyBzdGFjay4KKworICAgPHA+VGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciB0ZXN0aW5nIHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgYSBuZXh0Cithcmd1bWVudCBhdmFpbGFibGU7IHlvdSBtaWdodCBpbnN0ZWFkIHBhc3MgYW4gYXJndW1lbnQgY291bnQgKG9yIHNvbWUKK290aGVyIGRhdGEgdGhhdCBpbXBsaWVzIGFuIGFyZ3VtZW50IGNvdW50KSBhcyBvbmUgb2YgdGhlIGZpeGVkIGFyZ3VtZW50cworaW4geW91ciBmdW5jdGlvbiBjYWxsLgorCisgICA8cD48c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT52YV9hcmc8L2NvZGU+IHJldHVybnMgdGhlIG5leHQgYXJndW1lbnQsIGFuIG9iamVjdCBvZiB0eXBlIDx2YXI+dHlwZTwvdmFyPi4KKworICAgPHA+PHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT52YV9hcmc8L2NvZGU+LgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92YV8wMDVmYXJnXzAwMmR0cmFkLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92YV8wMDVmYXJnXzAwMmR0cmFkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNlYTkyYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZhXzAwNWZhcmdfMDAyZHRyYWQuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT52YV9hcmctdHJhZCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iVmFyYXJncy5odG1sI1ZhcmFyZ3MiIHRpdGxlPSJWYXJhcmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idmFfMDA1ZnN0YXJ0XzAwMmR0cmFkLmh0bWwjdmFfMDA1ZnN0YXJ0XzAwMmR0cmFkIiB0aXRsZT0idmFfc3RhcnQtdHJhZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InZhXzAwNWZlbmRfMDAyZHRyYWQuaHRtbCN2YV8wMDVmZW5kXzAwMmR0cmFkIiB0aXRsZT0idmFfZW5kLXRyYWQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZhX2FyZy10cmFkIj48L2E+Cis8YSBuYW1lPSJ2YV8wMDVmYXJnXzAwMmR0cmFkIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InZhXzAwNWZlbmRfMDAyZHRyYWQuaHRtbCN2YV8wMDVmZW5kXzAwMmR0cmFkIj52YV9lbmQtdHJhZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InZhXzAwNWZzdGFydF8wMDJkdHJhZC5odG1sI3ZhXzAwNWZzdGFydF8wMDJkdHJhZCI+dmFfc3RhcnQtdHJhZDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlZhcmFyZ3MuaHRtbCNWYXJhcmdzIj5WYXJhcmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoNCBjbGFzcz0ic3Vic2VjdGlvbiI+MTMuMi4zIEV4dHJhY3QgYSB2YWx1ZSBmcm9tIGFyZ3VtZW50IGxpc3Q8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC12YV8wMDVmYXJnLTUwMyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3ZhcmFyZ3MuaCZndDsKKyAgICAgPHZhcj50eXBlPC92YXI+IHZhX2FyZyh2YV9saXN0IDx2YXI+YXA8L3Zhcj4sIDx2YXI+dHlwZTwvdmFyPik7Cis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT52YV9hcmc8L2NvZGU+IHJldHVybnMgdGhlIG5leHQgdW5wcm9jZXNzZWQgdmFsdWUgZnJvbSBhIHZhcmlhYmxlCithcmd1bWVudCBsaXN0IDx2YXI+YXA8L3Zhcj4gKHdoaWNoIHlvdSBtdXN0IHByZXZpb3VzbHkgY3JlYXRlIHdpdGgKKzx2YXI+dmFfc3RhcnQ8L3Zhcj4pLiAgU3BlY2lmeSB0aGUgdHlwZSBmb3IgdGhlIHZhbHVlIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyCit0byB0aGUgbWFjcm8sIDx2YXI+dHlwZTwvdmFyPi4KKworICAgPHA+PHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+dmFfYXJnPC9jb2RlPiByZXR1cm5zIHRoZSBuZXh0IGFyZ3VtZW50LCBhbiBvYmplY3Qgb2YgdHlwZSA8dmFyPnR5cGU8L3Zhcj4uCisKKyAgIDxwPjxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+dmFfYXJnPC9jb2RlPiBkZWZpbmVkIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj52YXJhcmdzLmg8L3NwYW4+PC9zYW1wPiBoYXMgdGhlIHNhbWUgc3ludGF4IGFuZAordXNhZ2UgYXMgdGhlIEFOU0kgQyB2ZXJzaW9uIGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGFyZy5oPC9zcGFuPjwvc2FtcD4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZhXzAwNWZlbmQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZhXzAwNWZlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTUzMGYzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmFfMDA1ZmVuZC5odG1sCkBAIC0wLDAgKzEsNTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnZhX2VuZCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkYXJnLmh0bWwjU3RkYXJnIiB0aXRsZT0iU3RkYXJnIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idmFfMDA1ZmFyZy5odG1sI3ZhXzAwNWZhcmciIHRpdGxlPSJ2YV9hcmciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZhX2VuZCI+PC9hPgorPGEgbmFtZT0idmFfMDA1ZmVuZCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InZhXzAwNWZhcmcuaHRtbCN2YV8wMDVmYXJnIj52YV9hcmc8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRhcmcuaHRtbCNTdGRhcmciPlN0ZGFyZzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjEzLjEuMyBBYmFuZG9uIGEgdmFyaWFibGUgYXJndW1lbnQgbGlzdDwvaDQ+CisKKzxwPjxhIG5hbWU9ImluZGV4LXZhXzAwNWZlbmQtNDk5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CisgICAgIHZvaWQgdmFfZW5kKHZhX2xpc3QgPHZhcj5hcDwvdmFyPik7Cis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitVc2UgPGNvZGU+dmFfZW5kPC9jb2RlPiB0byBkZWNsYXJlIHRoYXQgeW91ciBwcm9ncmFtIHdpbGwgbm90IHVzZSB0aGUgdmFyaWFibGUKK2FyZ3VtZW50IGxpc3QgPHZhcj5hcDwvdmFyPiBhbnkgZnVydGhlci4KKworICAgPHA+PHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+dmFfZW5kPC9jb2RlPiBkb2VzIG5vdCByZXR1cm4gYSByZXN1bHQuCisKKyAgIDxwPjxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+dmFfZW5kPC9jb2RlPi4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmFfMDA1ZmVuZF8wMDJkdHJhZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmFfMDA1ZmVuZF8wMDJkdHJhZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Yjc2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92YV8wMDVmZW5kXzAwMmR0cmFkLmh0bWwKQEAgLTAsMCArMSw1MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+dmFfZW5kLXRyYWQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlZhcmFyZ3MuaHRtbCNWYXJhcmdzIiB0aXRsZT0iVmFyYXJncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InZhXzAwNWZhcmdfMDAyZHRyYWQuaHRtbCN2YV8wMDVmYXJnXzAwMmR0cmFkIiB0aXRsZT0idmFfYXJnLXRyYWQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZhX2VuZC10cmFkIj48L2E+Cis8YSBuYW1lPSJ2YV8wMDVmZW5kXzAwMmR0cmFkIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idmFfMDA1ZmFyZ18wMDJkdHJhZC5odG1sI3ZhXzAwNWZhcmdfMDAyZHRyYWQiPnZhX2FyZy10cmFkPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iVmFyYXJncy5odG1sI1ZhcmFyZ3MiPlZhcmFyZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4xMy4yLjQgQWJhbmRvbiBhIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Q8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC12YV8wMDVmZW5kLTUwNCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3ZhcmFyZ3MuaCZndDsKKyAgICAgdmFfZW5kKHZhX2xpc3QgPHZhcj5hcDwvdmFyPik7Cis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitVc2UgPGNvZGU+dmFfZW5kPC9jb2RlPiB0byBkZWNsYXJlIHRoYXQgeW91ciBwcm9ncmFtIHdpbGwgbm90IHVzZSB0aGUgdmFyaWFibGUKK2FyZ3VtZW50IGxpc3QgPHZhcj5hcDwvdmFyPiBhbnkgZnVydGhlci4KKworICAgPHA+PHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+dmFfZW5kPC9jb2RlPiBkb2VzIG5vdCByZXR1cm4gYSByZXN1bHQuCisKKyAgIDxwPjxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+dmFfZW5kPC9jb2RlPiBkZWZpbmVkIGluIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj52YXJhcmdzLmg8L3NwYW4+PC9zYW1wPiBoYXMgdGhlIHNhbWUgc3ludGF4IGFuZAordXNhZ2UgYXMgdGhlIEFOU0kgQyB2ZXJzaW9uIGZyb20gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnN0ZGFyZy5oPC9zcGFuPjwvc2FtcD4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZhXzAwNWZzdGFydC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmFfMDA1ZnN0YXJ0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmYzI5YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZhXzAwNWZzdGFydC5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnZhX3N0YXJ0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRhcmcuaHRtbCNTdGRhcmciIHRpdGxlPSJTdGRhcmciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ2YV8wMDVmYXJnLmh0bWwjdmFfMDA1ZmFyZyIgdGl0bGU9InZhX2FyZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idmFfc3RhcnQiPjwvYT4KKzxhIG5hbWU9InZhXzAwNWZzdGFydCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ2YV8wMDVmYXJnLmh0bWwjdmFfMDA1ZmFyZyI+dmFfYXJnPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkYXJnLmh0bWwjU3RkYXJnIj5TdGRhcmc8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGg0IGNsYXNzPSJzdWJzZWN0aW9uIj4xMy4xLjEgSW5pdGlhbGl6ZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0PC9oND4KKworPHA+PGEgbmFtZT0iaW5kZXgtdmFfMDA1ZnN0YXJ0LTQ5NyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OworICAgICB2b2lkIHZhX3N0YXJ0KHZhX2xpc3QgPHZhcj5hcDwvdmFyPiwgPHZhcj5yaWdodG1vc3Q8L3Zhcj4pOworPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVXNlIDxjb2RlPnZhX3N0YXJ0PC9jb2RlPiB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0IDx2YXI+YXA8L3Zhcj4sCitzbyB0aGF0IDxjb2RlPnZhX2FyZzwvY29kZT4gY2FuIGV4dHJhY3QgdmFsdWVzIGZyb20gaXQuICA8dmFyPnJpZ2h0bW9zdDwvdmFyPiBpcwordGhlIG5hbWUgb2YgdGhlIGxhc3QgZXhwbGljaXQgYXJndW1lbnQgaW4gdGhlIHBhcmFtZXRlciBsaXN0ICh0aGUKK2FyZ3VtZW50IGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgZWxsaXBzaXMgJmxzcXVvOzxzYW1wPjxzcGFuIGNsYXNzPSJzYW1wIj4uLi48L3NwYW4+PC9zYW1wPiZyc3F1bzsgdGhhdCBmbGFncwordmFyaWFibGUgYXJndW1lbnRzIGluIGFuIEFOU0kgQyBmdW5jdGlvbiBoZWFkZXIpLiAgWW91IGNhbiBvbmx5IHVzZQorPGNvZGU+dmFfc3RhcnQ8L2NvZGU+IGluIGEgZnVuY3Rpb24gZGVjbGFyZWQgdXNpbmcgdGhpcyBlbGxpcHNpcyBub3RhdGlvbgorKG5vdCwgZm9yIGV4YW1wbGUsIGluIG9uZSBvZiBpdHMgc3ViZnVuY3Rpb25zKS4KKworICAgPHA+PHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+dmFfc3RhcnQ8L2NvZGU+IGRvZXMgbm90IHJldHVybiBhIHJlc3VsdC4KKworICAgPHA+PHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQyByZXF1aXJlcyA8Y29kZT52YV9zdGFydDwvY29kZT4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZhXzAwNWZzdGFydF8wMDJkdHJhZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmFfMDA1ZnN0YXJ0XzAwMmR0cmFkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyZTk1NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZhXzAwNWZzdGFydF8wMDJkdHJhZC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnZhX3N0YXJ0LXRyYWQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlZhcmFyZ3MuaHRtbCNWYXJhcmdzIiB0aXRsZT0iVmFyYXJncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InZhXzAwNWZhbGlzdC5odG1sI3ZhXzAwNWZhbGlzdCIgdGl0bGU9InZhX2FsaXN0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idmFfMDA1ZmFyZ18wMDJkdHJhZC5odG1sI3ZhXzAwNWZhcmdfMDAyZHRyYWQiIHRpdGxlPSJ2YV9hcmctdHJhZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idmFfc3RhcnQtdHJhZCI+PC9hPgorPGEgbmFtZT0idmFfMDA1ZnN0YXJ0XzAwMmR0cmFkIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InZhXzAwNWZhcmdfMDAyZHRyYWQuaHRtbCN2YV8wMDVmYXJnXzAwMmR0cmFkIj52YV9hcmctdHJhZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InZhXzAwNWZhbGlzdC5odG1sI3ZhXzAwNWZhbGlzdCI+dmFfYWxpc3Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJWYXJhcmdzLmh0bWwjVmFyYXJncyI+VmFyYXJnczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDQgY2xhc3M9InN1YnNlY3Rpb24iPjEzLjIuMiBJbml0aWFsaXplIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Q8L2g0PgorCis8cD48YSBuYW1lPSJpbmRleC12YV8wMDVmc3RhcnQtNTAyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7dmFyYXJncy5oJmd0OworICAgICB2YV9saXN0IDx2YXI+YXA8L3Zhcj47CisgICAgIHZhX3N0YXJ0KDx2YXI+YXA8L3Zhcj4pOworPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorV2l0aCB0aGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPnZhcmFyZ3MuaDwvc3Bhbj48L3NhbXA+IG1hY3JvcywgdXNlIDxjb2RlPnZhX3N0YXJ0PC9jb2RlPiB0byBpbml0aWFsaXplIGEKK2RhdGEgc3RydWN0dXJlIDx2YXI+YXA8L3Zhcj4gdG8gcGVybWl0IG1hbmlwdWxhdGluZyBhIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QuIAorPHZhcj5hcDwvdmFyPiBtdXN0IGhhdmUgdGhlIHR5cGUgPHZhcj52YV9hbGlzdDwvdmFyPi4KKworICAgPHA+PHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+dmFfc3RhcnQ8L2NvZGU+IGRvZXMgbm90IHJldHVybiBhIHJlc3VsdC4KKworICAgPHA+PHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnZhX3N0YXJ0PC9jb2RlPiBpcyBhbHNvIGRlZmluZWQgYXMgYSBtYWNybyBpbiBBTlNJIEMsIGJ1dCB0aGUKK2RlZmluaXRpb25zIGFyZSBpbmNvbXBhdGlibGU7IHRoZSBBTlNJIHZlcnNpb24gaGFzIGFub3RoZXIgcGFyYW1ldGVyCitiZXNpZGVzIDx2YXI+YXA8L3Zhcj4uCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3ZmcHJpbnRmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92ZnByaW50Zi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjAwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92ZnByaW50Zi5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnZmcHJpbnRmIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ1bmdldHdjLmh0bWwjdW5nZXR3YyIgdGl0bGU9InVuZ2V0d2MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ2ZnNjYW5mLmh0bWwjdmZzY2FuZiIgdGl0bGU9InZmc2NhbmYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZmcHJpbnRmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InZmc2NhbmYuaHRtbCN2ZnNjYW5mIj52ZnNjYW5mPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idW5nZXR3Yy5odG1sI3VuZ2V0d2MiPnVuZ2V0d2M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNjggPGNvZGU+dmZwcmludGY8L2NvZGU+LCA8Y29kZT52cHJpbnRmPC9jb2RlPiwgPGNvZGU+dnNwcmludGY8L2NvZGU+LCA8Y29kZT52c25wcmludGY8L2NvZGU+LCA8Y29kZT52YXNwcmludGY8L2NvZGU+LCA8Y29kZT52YXNucHJpbnRmPC9jb2RlPiZtZGFzaDtmb3JtYXQgYXJndW1lbnQgbGlzdDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXZmcHJpbnRmLTMyNSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdmZwcmludGZfMDA1ZnItMzI2Ij48L2E+PGEgbmFtZT0iaW5kZXgtdnByaW50Zi0zMjciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnZwcmludGZfMDA1ZnItMzI4Ij48L2E+PGEgbmFtZT0iaW5kZXgtdnNwcmludGYtMzI5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ2c3ByaW50Zl8wMDVmci0zMzAiPjwvYT48YSBuYW1lPSJpbmRleC12c25wcmludGYtMzMxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ2c25wcmludGZfMDA1ZnItMzMyIj48L2E+PGEgbmFtZT0iaW5kZXgtdmFzcHJpbnRmLTMzMyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdmFzcHJpbnRmXzAwNWZyLTMzNCI+PC9hPjxhIG5hbWU9ImluZGV4LXZhc25wcmludGYtMzM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ2YXNucHJpbnRmXzAwNWZyLTMzNiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgICNpbmNsdWRlICZsdDtzdGRhcmcuaCZndDsKKyAgICAgaW50IHZwcmludGYoY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IHZmcHJpbnRmKEZJTEUgKjx2YXI+ZnA8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm10PC92YXI+LCB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCB2c3ByaW50ZihjaGFyICo8dmFyPnN0cjwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IHZzbnByaW50ZihjaGFyICo8dmFyPnN0cjwvdmFyPiwgc2l6ZV90IDx2YXI+c2l6ZTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sCisgICAgICAgICB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCB2YXNwcmludGYoY2hhciAqKjx2YXI+c3RycDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgY2hhciAqdmFzbnByaW50ZihjaGFyICo8dmFyPnN0cjwvdmFyPiwgc2l6ZV90ICo8dmFyPnNpemU8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm10PC92YXI+LAorICAgICAgICAgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICAKKyAgICAgaW50IF92cHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sCisgICAgICAgICB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCBfdmZwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IF92c3ByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNoYXIgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IF92YXNwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjaGFyICoqPHZhcj5zdHI8L3Zhcj4sCisgICAgICAgICBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgX3ZzbnByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNoYXIgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgc2l6ZV90IDx2YXI+c2l6ZTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgY2hhciAqX3Zhc25wcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjaGFyICo8dmFyPnN0cjwvdmFyPiwKKyAgICAgICAgIHNpemVfdCAqPHZhcj5zaXplPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnZwcmludGY8L2NvZGU+LCA8Y29kZT52ZnByaW50ZjwvY29kZT4sIDxjb2RlPnZhc3ByaW50ZjwvY29kZT4sIDxjb2RlPnZzcHJpbnRmPC9jb2RlPiwgPGNvZGU+dnNucHJpbnRmPC9jb2RlPiwKK2FuZCA8Y29kZT52YXNucHJpbnRmPC9jb2RlPiBhcmUgKHJlc3BlY3RpdmVseSkgdmFyaWFudHMgb2YgPGNvZGU+cHJpbnRmPC9jb2RlPiwKKzxjb2RlPmZwcmludGY8L2NvZGU+LCA8Y29kZT5hc3ByaW50ZjwvY29kZT4sIDxjb2RlPnNwcmludGY8L2NvZGU+LCA8Y29kZT5zbnByaW50ZjwvY29kZT4sIGFuZAorPGNvZGU+YXNucHJpbnRmPC9jb2RlPi4gIFRoZXkgZGlmZmVyIG9ubHkgaW4gYWxsb3dpbmcgdGhlaXIgY2FsbGVyIHRvIHBhc3MgdGhlCit2YXJpYWJsZSBhcmd1bWVudCBsaXN0IGFzIGEgPGNvZGU+dmFfbGlzdDwvY29kZT4gb2JqZWN0IChpbml0aWFsaXplZCBieQorPGNvZGU+dmFfc3RhcnQ8L2NvZGU+KSByYXRoZXIgdGhhbiBkaXJlY3RseSBhY2NlcHRpbmcgYSB2YXJpYWJsZSBudW1iZXIgb2YKK2FyZ3VtZW50cy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgPGNvZGU+dmFfZW5kPC9jb2RlPi4KKworICAgPHA+PGNvZGU+X3ZwcmludGZfcjwvY29kZT4sIDxjb2RlPl92ZnByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X3Zhc3ByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X3ZzcHJpbnRmX3I8L2NvZGU+LAorPGNvZGU+X3ZzbnByaW50Zl9yPC9jb2RlPiwgYW5kIDxjb2RlPl92YXNucHJpbnRmX3I8L2NvZGU+IGFyZSByZWVudHJhbnQgdmVyc2lvbnMgb2YgdGhlCithYm92ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJldHVybiB2YWx1ZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMgcmVxdWlyZXMgPGNvZGU+dnByaW50ZjwvY29kZT4sIDxjb2RlPnZmcHJpbnRmPC9jb2RlPiwgPGNvZGU+dnNwcmludGY8L2NvZGU+LCBhbmQKKzxjb2RlPnZzbnByaW50ZjwvY29kZT4uICBUaGUgcmVtYWluaW5nIGZ1bmN0aW9ucyBhcmUgbmV3bGliIGV4dGVuc2lvbnMuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92ZnNjYW5mLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92ZnNjYW5mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkODY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Zmc2NhbmYuaHRtbApAQCAtMCwwICsxLDg0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT52ZnNjYW5mIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ2ZnByaW50Zi5odG1sI3ZmcHJpbnRmIiB0aXRsZT0idmZwcmludGYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ2ZndwcmludGYuaHRtbCN2ZndwcmludGYiIHRpdGxlPSJ2ZndwcmludGYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZmc2NhbmYiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0idmZ3cHJpbnRmLmh0bWwjdmZ3cHJpbnRmIj52ZndwcmludGY8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ2ZnByaW50Zi5odG1sI3ZmcHJpbnRmIj52ZnByaW50ZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC42OSA8Y29kZT52ZnNjYW5mPC9jb2RlPiwgPGNvZGU+dnNjYW5mPC9jb2RlPiwgPGNvZGU+dnNzY2FuZjwvY29kZT4mbWRhc2g7Zm9ybWF0IGFyZ3VtZW50IGxpc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC12ZnNjYW5mLTMzNyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdmZzY2FuZl8wMDVmci0zMzgiPjwvYT48YSBuYW1lPSJpbmRleC12c2NhbmYtMzM5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ2c2NhbmZfMDA1ZnItMzQwIj48L2E+PGEgbmFtZT0iaW5kZXgtdnNzY2FuZi0zNDEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnZzc2NhbmZfMDA1ZnItMzQyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OworICAgICBpbnQgdnNjYW5mKGNvbnN0IGNoYXIgKjx2YXI+Zm10PC92YXI+LCB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCB2ZnNjYW5mKEZJTEUgKjx2YXI+ZnA8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm10PC92YXI+LCB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCB2c3NjYW5mKGNvbnN0IGNoYXIgKjx2YXI+c3RyPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICAKKyAgICAgaW50IF92c2NhbmZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwKKyAgICAgICAgIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IF92ZnNjYW5mX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgRklMRSAqPHZhcj5mcDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sCisgICAgICAgICB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCBfdnNzY2FuZl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT52c2NhbmY8L2NvZGU+LCA8Y29kZT52ZnNjYW5mPC9jb2RlPiwgYW5kIDxjb2RlPnZzc2NhbmY8L2NvZGU+IGFyZSAocmVzcGVjdGl2ZWx5KSB2YXJpYW50cworb2YgPGNvZGU+c2NhbmY8L2NvZGU+LCA8Y29kZT5mc2NhbmY8L2NvZGU+LCBhbmQgPGNvZGU+c3NjYW5mPC9jb2RlPi4gIFRoZXkgZGlmZmVyIG9ubHkgaW4KK2FsbG93aW5nIHRoZWlyIGNhbGxlciB0byBwYXNzIHRoZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0IGFzIGEKKzxjb2RlPnZhX2xpc3Q8L2NvZGU+IG9iamVjdCAoaW5pdGlhbGl6ZWQgYnkgPGNvZGU+dmFfc3RhcnQ8L2NvZGU+KSByYXRoZXIgdGhhbgorZGlyZWN0bHkgYWNjZXB0aW5nIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJldHVybiB2YWx1ZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnM6Cis8Y29kZT52c2NhbmY8L2NvZGU+IHJldHVybnMgdGhlIG51bWJlciBvZiBpbnB1dCBmaWVsZHMgc3VjY2Vzc2Z1bGx5IHNjYW5uZWQsCitjb252ZXJ0ZWQsIGFuZCBzdG9yZWQ7IHRoZSByZXR1cm4gdmFsdWUgZG9lcyBub3QgaW5jbHVkZSBzY2FubmVkCitmaWVsZHMgd2hpY2ggd2VyZSBub3Qgc3RvcmVkLgorCisgICA8cD5JZiA8Y29kZT52c2NhbmY8L2NvZGU+IGF0dGVtcHRzIHRvIHJlYWQgYXQgZW5kLW9mLWZpbGUsIHRoZSByZXR1cm4gdmFsdWUKK2lzIDxjb2RlPkVPRjwvY29kZT4uCisKKyAgIDxwPklmIG5vIGZpZWxkcyB3ZXJlIHN0b3JlZCwgdGhlIHJldHVybiB2YWx1ZSBpcyA8Y29kZT4wPC9jb2RlPi4KKworICAgPHA+VGhlIHJvdXRpbmVzIDxjb2RlPl92c2NhbmZfcjwvY29kZT4sIDxjb2RlPl92ZnNjYW5mX2Y8L2NvZGU+LCBhbmQgPGNvZGU+X3Zzc2NhbmZfcjwvY29kZT4gYXJlCityZWVudHJhbnQgdmVyc2lvbnMgd2hpY2ggdGFrZSBhbiBhZGRpdGlvbmFsIGZpcnN0IHBhcmFtZXRlciB3aGljaCBwb2ludHMgdG8gdGhlCityZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK1RoZXNlIGFyZSBHTlUgZXh0ZW5zaW9ucy4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDoKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92ZndwcmludGYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Zmd3ByaW50Zi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNDJlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92ZndwcmludGYuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT52ZndwcmludGYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iIHRpdGxlPSJTdGRpbyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InZmc2NhbmYuaHRtbCN2ZnNjYW5mIiB0aXRsZT0idmZzY2FuZiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InZmd3NjYW5mLmh0bWwjdmZ3c2NhbmYiIHRpdGxlPSJ2ZndzY2FuZiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idmZ3cHJpbnRmIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InZmd3NjYW5mLmh0bWwjdmZ3c2NhbmYiPnZmd3NjYW5mPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idmZzY2FuZi5odG1sI3Zmc2NhbmYiPnZmc2NhbmY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNzAgPGNvZGU+dmZ3cHJpbnRmPC9jb2RlPiwgPGNvZGU+dndwcmludGY8L2NvZGU+LCA8Y29kZT52c3dwcmludGY8L2NvZGU+Jm1kYXNoO3dpZGUgY2hhcmFjdGVyIGZvcm1hdCBhcmd1bWVudCBsaXN0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdmZ3cHJpbnRmLTM0MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdmZ3cHJpbnRmXzAwNWZyLTM0NCI+PC9hPjxhIG5hbWU9ImluZGV4LXZ3cHJpbnRmLTM0NSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdndwcmludGZfMDA1ZnItMzQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtdnN3cHJpbnRmLTM0NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdnN3cHJpbnRmXzAwNWZyLTM0OCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CisgICAgICNpbmNsdWRlICZsdDtzdGRhcmcuaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIGludCB2d3ByaW50Zihjb25zdCB3Y2hhcl90ICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgdmZ3cHJpbnRmKEZJTEUgKjx2YXI+ZnA8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm10PC92YXI+LCB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCB2c3dwcmludGYod2NoYXJfdCAqPHZhcj5zdHI8L3Zhcj4sIHNpemVfdCA8dmFyPnNpemU8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm10PC92YXI+LAorICAgICAgICAgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICAKKyAgICAgaW50IF92d3ByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm10PC92YXI+LAorICAgICAgICAgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgX3Zmd3ByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4sCisgICAgICAgICBjb25zdCB3Y2hhcl90ICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgX3Zzd3ByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIHdjaGFyX3QgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgc2l6ZV90IDx2YXI+c2l6ZTwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT52d3ByaW50ZjwvY29kZT4sIDxjb2RlPnZmd3ByaW50ZjwvY29kZT4gYW5kIDxjb2RlPnZzd3ByaW50ZjwvY29kZT4gYXJlIChyZXNwZWN0aXZlbHkpIHZhcmlhbnRzCitvZiA8Y29kZT53cHJpbnRmPC9jb2RlPiwgPGNvZGU+ZndwcmludGY8L2NvZGU+IGFuZCA8Y29kZT5zd3ByaW50ZjwvY29kZT4uICBUaGV5IGRpZmZlciBvbmx5IGluIGFsbG93aW5nCit0aGVpciBjYWxsZXIgdG8gcGFzcyB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBhcyBhIDxjb2RlPnZhX2xpc3Q8L2NvZGU+IG9iamVjdAorKGluaXRpYWxpemVkIGJ5IDxjb2RlPnZhX3N0YXJ0PC9jb2RlPikgcmF0aGVyIHRoYW4gZGlyZWN0bHkgYWNjZXB0aW5nIGEgdmFyaWFibGUKK251bWJlciBvZiBhcmd1bWVudHMuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIDxjb2RlPnZhX2VuZDwvY29kZT4uCisKKyAgIDxwPjxjb2RlPl92d3ByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X3Zmd3ByaW50Zl9yPC9jb2RlPiBhbmQgPGNvZGU+X3Zzd3ByaW50Zl9yPC9jb2RlPiBhcmUgcmVlbnRyYW50Cit2ZXJzaW9ucyBvZiB0aGUgYWJvdmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXR1cm4gdmFsdWVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorUE9TSVgtMS4yMDA4IHdpdGggZXh0ZW5zaW9uczsgQzk5IChjb21wbGlhbnQgZXhjZXB0IGZvciBQT1NJWCBleHRlbnNpb25zKS4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlNlZSBBbHNvPC9zdHJvbmc+PGJyPgorPGNvZGU+d3ByaW50ZjwvY29kZT4sIDxjb2RlPmZ3cHJpbnRmPC9jb2RlPiBhbmQgPGNvZGU+c3dwcmludGY8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Zmd3NjYW5mLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92ZndzY2FuZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTkzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92ZndzY2FuZi5odG1sCkBAIC0wLDAgKzEsODIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnZmd3NjYW5mIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ2ZndwcmludGYuaHRtbCN2ZndwcmludGYiIHRpdGxlPSJ2ZndwcmludGYiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ2aXByaW50Zi5odG1sI3ZpcHJpbnRmIiB0aXRsZT0idmlwcmludGYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZmd3NjYW5mIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InZpcHJpbnRmLmh0bWwjdmlwcmludGYiPnZpcHJpbnRmPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idmZ3cHJpbnRmLmh0bWwjdmZ3cHJpbnRmIj52ZndwcmludGY8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIj5TdGRpbzwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjQuNzEgPGNvZGU+dmZ3c2NhbmY8L2NvZGU+LCA8Y29kZT52d3NjYW5mPC9jb2RlPiwgPGNvZGU+dnN3c2NhbmY8L2NvZGU+Jm1kYXNoO3NjYW4gYW5kIGZvcm1hdCBhcmd1bWVudCBsaXN0IGZyb20gd2lkZSBjaGFyYWN0ZXIgaW5wdXQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC12ZndzY2FuZi0zNDkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnZmd3NjYW5mLTM1MCI+PC9hPjxhIG5hbWU9ImluZGV4LXZ3c2NhbmYtMzUxIj48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ2d3NjYW5mLTM1MiI+PC9hPjxhIG5hbWU9ImluZGV4LXZzd3NjYW5mLTM1MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdnN3c2NhbmYtMzU0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OworICAgICBpbnQgdndzY2FuZihjb25zdCB3Y2hhcl90ICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgdmZ3c2NhbmYoRklMRSAqPHZhcj5mcDwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IHZzd3NjYW5mKGNvbnN0IHdjaGFyX3QgKjx2YXI+c3RyPC92YXI+LCBjb25zdCB3Y2hhcl90ICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICAKKyAgICAgaW50IF92d3NjYW5mKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm10PC92YXI+LAorICAgICAgICAgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgX3Zmd3NjYW5mKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIEZJTEUgKjx2YXI+ZnA8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+Zm10PC92YXI+LAorICAgICAgICAgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgX3Zzd3NjYW5mKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgY29uc3Qgd2NoYXJfdCAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT52d3NjYW5mPC9jb2RlPiwgPGNvZGU+dmZ3c2NhbmY8L2NvZGU+LCBhbmQgPGNvZGU+dnN3c2NhbmY8L2NvZGU+IGFyZSAocmVzcGVjdGl2ZWx5KSB2YXJpYW50cworb2YgPGNvZGU+d3NjYW5mPC9jb2RlPiwgPGNvZGU+ZndzY2FuZjwvY29kZT4sIGFuZCA8Y29kZT5zd3NjYW5mPC9jb2RlPi4gIFRoZXkgZGlmZmVyIG9ubHkgaW4KK2FsbG93aW5nIHRoZWlyIGNhbGxlciB0byBwYXNzIHRoZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0IGFzIGEKKzxjb2RlPnZhX2xpc3Q8L2NvZGU+IG9iamVjdCAoaW5pdGlhbGl6ZWQgYnkgPGNvZGU+dmFfc3RhcnQ8L2NvZGU+KSByYXRoZXIgdGhhbgorZGlyZWN0bHkgYWNjZXB0aW5nIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJldHVybiB2YWx1ZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnM6Cis8Y29kZT52d3NjYW5mPC9jb2RlPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaW5wdXQgZmllbGRzIHN1Y2Nlc3NmdWxseSBzY2FubmVkLAorY29udmVydGVkLCBhbmQgc3RvcmVkOyB0aGUgcmV0dXJuIHZhbHVlIGRvZXMgbm90IGluY2x1ZGUgc2Nhbm5lZAorZmllbGRzIHdoaWNoIHdlcmUgbm90IHN0b3JlZC4KKworICAgPHA+SWYgPGNvZGU+dndzY2FuZjwvY29kZT4gYXR0ZW1wdHMgdG8gcmVhZCBhdCBlbmQtb2YtZmlsZSwgdGhlIHJldHVybiB2YWx1ZQoraXMgPGNvZGU+RU9GPC9jb2RlPi4KKworICAgPHA+SWYgbm8gZmllbGRzIHdlcmUgc3RvcmVkLCB0aGUgcmV0dXJuIHZhbHVlIGlzIDxjb2RlPjA8L2NvZGU+LgorCisgICA8cD5UaGUgcm91dGluZXMgPGNvZGU+X3Z3c2NhbmY8L2NvZGU+LCA8Y29kZT5fdmZ3c2NhbmY8L2NvZGU+LCBhbmQgPGNvZGU+X3Zzd3NjYW5mPC9jb2RlPiBhcmUKK3JlZW50cmFudCB2ZXJzaW9ucyB3aGljaCB0YWtlIGFuIGFkZGl0aW9uYWwgZmlyc3QgcGFyYW1ldGVyIHdoaWNoIHBvaW50cwordG8gdGhlIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQzk5LCBQT1NJWC0xLjIwMDgKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92aXByaW50Zi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmlwcmludGYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzkwYzZmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvdmlwcmludGYuaHRtbApAQCAtMCwwICsxLDkwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT52aXByaW50ZiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyIgdGl0bGU9IlN0ZGlvIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0idmZ3c2NhbmYuaHRtbCN2ZndzY2FuZiIgdGl0bGU9InZmd3NjYW5mIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idmlzY2FuZi5odG1sI3Zpc2NhbmYiIHRpdGxlPSJ2aXNjYW5mIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ2aXByaW50ZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ2aXNjYW5mLmh0bWwjdmlzY2FuZiI+dmlzY2FuZjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InZmd3NjYW5mLmh0bWwjdmZ3c2NhbmYiPnZmd3NjYW5mPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkaW8uaHRtbCNTdGRpbyI+U3RkaW88L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj40LjcyIDxjb2RlPnZpcHJpbnRmPC9jb2RlPiwgPGNvZGU+dmZpcHJpbnRmPC9jb2RlPiwgPGNvZGU+dnNpcHJpbnRmPC9jb2RlPiwgPGNvZGU+dnNuaXByaW50ZjwvY29kZT4sIDxjb2RlPnZhc2lwcmludGY8L2NvZGU+LCA8Y29kZT52YXNuaXByaW50ZjwvY29kZT4mbWRhc2g7Zm9ybWF0IGFyZ3VtZW50IGxpc3QgKGludGVnZXIgb25seSk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC12aXByaW50Zi0zNTUiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnZpcHJpbnRmXzAwNWZyLTM1NiI+PC9hPjxhIG5hbWU9ImluZGV4LXZmaXByaW50Zi0zNTciPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnZmaXByaW50Zl8wMDVmci0zNTgiPjwvYT48YSBuYW1lPSJpbmRleC12c2lwcmludGYtMzU5Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ2c2lwcmludGZfMDA1ZnItMzYwIj48L2E+PGEgbmFtZT0iaW5kZXgtdnNuaXByaW50Zi0zNjEiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnZzbmlwcmludGZfMDA1ZnItMzYyIj48L2E+PGEgbmFtZT0iaW5kZXgtdmFzaXByaW50Zi0zNjMiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnZhc2lwcmludGZfMDA1ZnItMzY0Ij48L2E+PGEgbmFtZT0iaW5kZXgtdmFzbmlwcmludGYtMzY1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZ190XzAwNWZ2YXNuaXByaW50Zl8wMDVmci0zNjYiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworICAgICAjaW5jbHVkZSAmbHQ7c3RkYXJnLmgmZ3Q7CisgICAgIGludCB2aXByaW50Zihjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgdmZpcHJpbnRmKEZJTEUgKjx2YXI+ZnA8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm10PC92YXI+LCB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCB2c2lwcmludGYoY2hhciAqPHZhcj5zdHI8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+Zm10PC92YXI+LCB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCB2c25pcHJpbnRmKGNoYXIgKjx2YXI+c3RyPC92YXI+LCBzaXplX3QgPHZhcj5zaXplPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwKKyAgICAgICAgIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IHZhc2lwcmludGYoY2hhciAqKjx2YXI+c3RycDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgY2hhciAqdmFzbmlwcmludGYoY2hhciAqPHZhcj5zdHI8L3Zhcj4sIHNpemVfdCAqPHZhcj5zaXplPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwKKyAgICAgICAgIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgCisgICAgIGludCBfdmlwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwKKyAgICAgICAgIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IF92ZmlwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IF92c2lwcmludGZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBjaGFyICo8dmFyPnN0cjwvdmFyPiwKKyAgICAgICAgIGNvbnN0IGNoYXIgKjx2YXI+Zm10PC92YXI+LCB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCBfdnNuaXByaW50Zl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNoYXIgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgc2l6ZV90IDx2YXI+c2l6ZTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IF92YXNpcHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgY2hhciAqKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgY2hhciAqX3Zhc25pcHJpbnRmX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgY2hhciAqPHZhcj5zdHI8L3Zhcj4sCisgICAgICAgICBzaXplX3QgKjx2YXI+c2l6ZTwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT52aXByaW50ZjwvY29kZT4sIDxjb2RlPnZmaXByaW50ZjwvY29kZT4sIDxjb2RlPnZhc2lwcmludGY8L2NvZGU+LCA8Y29kZT52c2lwcmludGY8L2NvZGU+LAorPGNvZGU+dnNuaXByaW50ZjwvY29kZT4sIGFuZCA8Y29kZT52YXNuaXByaW50ZjwvY29kZT4gYXJlIChyZXNwZWN0aXZlbHkpIHZhcmlhbnRzIG9mCis8Y29kZT5pcHJpbnRmPC9jb2RlPiwgPGNvZGU+ZmlwcmludGY8L2NvZGU+LCA8Y29kZT5hc2lwcmludGY8L2NvZGU+LCA8Y29kZT5zaXByaW50ZjwvY29kZT4sIDxjb2RlPnNuaXByaW50ZjwvY29kZT4sCithbmQgPGNvZGU+YXNuaXByaW50ZjwvY29kZT4uICBUaGV5IGRpZmZlciBvbmx5IGluIGFsbG93aW5nIHRoZWlyIGNhbGxlciB0byBwYXNzCit0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBhcyBhIDxjb2RlPnZhX2xpc3Q8L2NvZGU+IG9iamVjdCAoaW5pdGlhbGl6ZWQgYnkKKzxjb2RlPnZhX3N0YXJ0PC9jb2RlPikgcmF0aGVyIHRoYW4gZGlyZWN0bHkgYWNjZXB0aW5nIGEgdmFyaWFibGUgbnVtYmVyIG9mCithcmd1bWVudHMuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIDxjb2RlPnZhX2VuZDwvY29kZT4uCisKKyAgIDxwPjxjb2RlPl92aXByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X3ZmaXByaW50Zl9yPC9jb2RlPiwgPGNvZGU+X3Zhc2lwcmludGZfcjwvY29kZT4sCis8Y29kZT5fdnNpcHJpbnRmX3I8L2NvZGU+LCA8Y29kZT5fdnNuaXByaW50Zl9yPC9jb2RlPiwgYW5kIDxjb2RlPl92YXNuaXByaW50Zl9yPC9jb2RlPiBhcmUKK3JlZW50cmFudCB2ZXJzaW9ucyBvZiB0aGUgYWJvdmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSByZXR1cm4gdmFsdWVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zOgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbmV3bGliIGV4dGVuc2lvbnMuCisKKyAgIDxwPlN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgcmVxdWlyZWQ6IDxjb2RlPmNsb3NlPC9jb2RlPiwgPGNvZGU+ZnN0YXQ8L2NvZGU+LCA8Y29kZT5pc2F0dHk8L2NvZGU+LAorPGNvZGU+bHNlZWs8L2NvZGU+LCA8Y29kZT5yZWFkPC9jb2RlPiwgPGNvZGU+c2JyazwvY29kZT4sIDxjb2RlPndyaXRlPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92aXNjYW5mLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC92aXNjYW5mLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhYWQxYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3Zpc2NhbmYuaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT52aXNjYW5mIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRpby5odG1sI1N0ZGlvIiB0aXRsZT0iU3RkaW8iPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ2aXByaW50Zi5odG1sI3ZpcHJpbnRmIiB0aXRsZT0idmlwcmludGYiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InZpc2NhbmYiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ2aXByaW50Zi5odG1sI3ZpcHJpbnRmIj52aXByaW50ZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGlvLmh0bWwjU3RkaW8iPlN0ZGlvPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NC43MyA8Y29kZT52aXNjYW5mPC9jb2RlPiwgPGNvZGU+dmZpc2NhbmY8L2NvZGU+LCA8Y29kZT52c2lzY2FuZjwvY29kZT4mbWRhc2g7Zm9ybWF0IGFyZ3VtZW50IGxpc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC12aXNjYW5mLTM2NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdmlzY2FuZl8wMDVmci0zNjgiPjwvYT48YSBuYW1lPSJpbmRleC12ZmlzY2FuZi0zNjkiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1ZnZmaXNjYW5mXzAwNWZyLTM3MCI+PC9hPjxhIG5hbWU9ImluZGV4LXZzaXNjYW5mLTM3MSI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmdnNpc2NhbmZfMDA1ZnItMzcyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3N0ZGFyZy5oJmd0OworICAgICBpbnQgdmlzY2FuZihjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICBpbnQgdmZpc2NhbmYoRklMRSAqPHZhcj5mcDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IHZzaXNjYW5mKGNvbnN0IGNoYXIgKjx2YXI+c3RyPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwgdmFfbGlzdCA8dmFyPmxpc3Q8L3Zhcj4pOworICAgICAKKyAgICAgaW50IF92aXNjYW5mX3Ioc3RydWN0IF9yZWVudCAqPHZhcj5yZWVudDwvdmFyPiwgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sCisgICAgICAgICB2YV9saXN0IDx2YXI+bGlzdDwvdmFyPik7CisgICAgIGludCBfdmZpc2NhbmZfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnJlZW50PC92YXI+LCBGSUxFICo8dmFyPmZwPC92YXI+LCBjb25zdCBjaGFyICo8dmFyPmZtdDwvdmFyPiwKKyAgICAgICAgIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgaW50IF92c2lzY2FuZl9yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNvbnN0IGNoYXIgKjx2YXI+c3RyPC92YXI+LAorICAgICAgICAgY29uc3QgY2hhciAqPHZhcj5mbXQ8L3Zhcj4sIHZhX2xpc3QgPHZhcj5saXN0PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT52aXNjYW5mPC9jb2RlPiwgPGNvZGU+dmZpc2NhbmY8L2NvZGU+LCBhbmQgPGNvZGU+dnNpc2NhbmY8L2NvZGU+IGFyZSAocmVzcGVjdGl2ZWx5KSB2YXJpYW50cworb2YgPGNvZGU+aXNjYW5mPC9jb2RlPiwgPGNvZGU+ZmlzY2FuZjwvY29kZT4sIGFuZCA8Y29kZT5zaXNjYW5mPC9jb2RlPi4gIFRoZXkgZGlmZmVyIG9ubHkgaW4KK2FsbG93aW5nIHRoZWlyIGNhbGxlciB0byBwYXNzIHRoZSB2YXJpYWJsZSBhcmd1bWVudCBsaXN0IGFzIGEKKzxjb2RlPnZhX2xpc3Q8L2NvZGU+IG9iamVjdCAoaW5pdGlhbGl6ZWQgYnkgPGNvZGU+dmFfc3RhcnQ8L2NvZGU+KSByYXRoZXIgdGhhbgorZGlyZWN0bHkgYWNjZXB0aW5nIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHJldHVybiB2YWx1ZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnM6Cis8Y29kZT52aXNjYW5mPC9jb2RlPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaW5wdXQgZmllbGRzIHN1Y2Nlc3NmdWxseSBzY2FubmVkLAorY29udmVydGVkLCBhbmQgc3RvcmVkOyB0aGUgcmV0dXJuIHZhbHVlIGRvZXMgbm90IGluY2x1ZGUgc2Nhbm5lZAorZmllbGRzIHdoaWNoIHdlcmUgbm90IHN0b3JlZC4KKworICAgPHA+SWYgPGNvZGU+dmlzY2FuZjwvY29kZT4gYXR0ZW1wdHMgdG8gcmVhZCBhdCBlbmQtb2YtZmlsZSwgdGhlIHJldHVybiB2YWx1ZQoraXMgPGNvZGU+RU9GPC9jb2RlPi4KKworICAgPHA+SWYgbm8gZmllbGRzIHdlcmUgc3RvcmVkLCB0aGUgcmV0dXJuIHZhbHVlIGlzIDxjb2RlPjA8L2NvZGU+LgorCisgICA8cD5UaGUgcm91dGluZXMgPGNvZGU+X3Zpc2NhbmZfcjwvY29kZT4sIDxjb2RlPl92ZmlzY2FuZl9mPC9jb2RlPiwgYW5kIDxjb2RlPl92c2lzY2FuZl9yPC9jb2RlPiBhcmUKK3JlZW50cmFudCB2ZXJzaW9ucyB3aGljaCB0YWtlIGFuIGFkZGl0aW9uYWwgZmlyc3QgcGFyYW1ldGVyIHdoaWNoIHBvaW50cyB0byB0aGUKK3JlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorVGhlc2UgYXJlIG5ld2xpYiBleHRlbnNpb25zLgorCisgICA8cD5TdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIHJlcXVpcmVkOgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djcGNweS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NwY3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkMmIzNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djcGNweS5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjcGNweSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2NzY3B5Lmh0bWwjd2NzY3B5IiB0aXRsZT0id2NzY3B5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2NzY3Nwbi5odG1sI3djc2NzcG4iIHRpdGxlPSJ3Y3Njc3BuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3BjcHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzY3Nwbi5odG1sI3djc2NzcG4iPndjc2NzcG48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NjcHkuaHRtbCN3Y3NjcHkiPndjc2NweTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xMSA8Y29kZT53Y3BjcHk8L2NvZGU+Jm1kYXNoO2NvcHkgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBpdHMgZW5kPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdCAqd2NwY3B5KHdjaGFyX3QgKjx2YXI+czE8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKiw8dmFyPnMyPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2NwY3B5PC9jb2RlPiBmdW5jdGlvbiBjb3BpZXMgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5Cis8dmFyPnMyPC92YXI+IChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgd2lkZS1jaGFyYWN0ZXIgY29kZSkgaW50byB0aGUKK2FycmF5IHBvaW50ZWQgdG8gYnkgPHZhcj5zMTwvdmFyPi4gSWYgY29weWluZyB0YWtlcyBwbGFjZSBiZXR3ZWVuIG9iamVjdHMgdGhhdAorb3ZlcmxhcCwgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gc3RyaW5nLAordGh1cyBwb2ludGluZyB0byB0aGUgdHJhaWxpbmcgJ1wwJy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjcGNweTwvY29kZT4gaXMgYSBHTlUgZXh0ZW5zaW9uLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3BuY3B5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3BuY3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2MTRlZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djcG5jcHkuaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3BuY3B5IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NuY3B5Lmh0bWwjd2NzbmNweSIgdGl0bGU9Indjc25jcHkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NubGVuLmh0bWwjd2NzbmxlbiIgdGl0bGU9Indjc25sZW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IndjcG5jcHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2Nzbmxlbi5odG1sI3djc25sZW4iPndjc25sZW48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NuY3B5Lmh0bWwjd2NzbmNweSI+d2NzbmNweTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4yMCA8Y29kZT53Y3BuY3B5PC9jb2RlPiZtZGFzaDtjb3B5IHBhcnQgb2YgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBpdHMgZW5kPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdCAqd2NwbmNweSh3Y2hhcl90ICo8dmFyPnMxPC92YXI+LCBjb25zdCB3Y2hhcl90ICo8dmFyPnMyPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2NwbmNweTwvY29kZT4gZnVuY3Rpb24gY29waWVzIG5vdCBtb3JlIHRoYW4gbiB3aWRlLWNoYXJhY3RlciBjb2RlcworKHdpZGUtY2hhcmFjdGVyIGNvZGVzIHRoYXQgZm9sbG93IGEgbnVsbCB3aWRlLWNoYXJhY3RlciBjb2RlIGFyZSBub3QKK2NvcGllZCkgZnJvbSB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8dmFyPnMyPC92YXI+IHRvIHRoZSBhcnJheSBwb2ludGVkIHRvCitieSA8dmFyPnMxPC92YXI+LiBJZiBjb3B5aW5nIHRha2VzIHBsYWNlIGJldHdlZW4gb2JqZWN0cyB0aGF0IG92ZXJsYXAsIHRoZQorYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4KKworICAgPHA+SWYgdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgPHZhcj5zMjwvdmFyPiBpcyBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZyB0aGF0IGlzCitzaG9ydGVyIHRoYW4gPHZhcj5uPC92YXI+IHdpZGUtY2hhcmFjdGVyIGNvZGVzLCBudWxsIHdpZGUtY2hhcmFjdGVyIGNvZGVzIGFyZQorYXBwZW5kZWQgdG8gdGhlIGNvcHkgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgPHZhcj5zMTwvdmFyPiwgdW50aWwgPHZhcj5uPC92YXI+Cit3aWRlLWNoYXJhY3RlciBjb2RlcyBpbiBhbGwgYXJlIHdyaXR0ZW4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3BuY3B5PC9jb2RlPiBmdW5jdGlvbiByZXR1cm5zIDx2YXI+czE8L3Zhcj47IG5vIHJldHVybiB2YWx1ZSBpcyByZXNlcnZlZCB0bworaW5kaWNhdGUgYW4gZXJyb3IuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3BuY3B5PC9jb2RlPiBpcyBJU08vSUVDIDk4OTkvQU1EMToxOTk1IChJU08gQykuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2Nhc2VjbXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2Nhc2VjbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWZhOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzY2FzZWNtcC5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjc2Nhc2VjbXAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN3YWIuaHRtbCNzd2FiIiB0aXRsZT0ic3dhYiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Indjc2R1cC5odG1sI3djc2R1cCIgdGl0bGU9Indjc2R1cCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzY2FzZWNtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3NkdXAuaHRtbCN3Y3NkdXAiPndjc2R1cDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InN3YWIuaHRtbCNzd2FiIj5zd2FiPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjQyIDxjb2RlPndjc2Nhc2VjbXA8L2NvZGU+Jm1kYXNoO2Nhc2UtaW5zZW5zaXRpdmUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGNvbXBhcmU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13Y3NjYXNlY21wLTQxMSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIGludCB3Y3NjYXNlY21wKGNvbnN0IHdjaGFyX3QgKjx2YXI+YTwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5iPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT53Y3NjYXNlY21wPC9jb2RlPiBjb21wYXJlcyB0aGUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGF0IDx2YXI+YTwvdmFyPiB0bwordGhlIHdpZGUgY2hhcmFjdGVyIHN0cmluZyBhdCA8dmFyPmI8L3Zhcj4gaW4gYSBjYXNlLWluc2Vuc2l0aXZlIG1hbm5lci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorCisgICA8cD5JZiA8Y29kZT4qPC9jb2RlPjx2YXI+YTwvdmFyPiBzb3J0cyBsZXhpY29ncmFwaGljYWxseSBhZnRlciA8Y29kZT4qPC9jb2RlPjx2YXI+YjwvdmFyPiAoYWZ0ZXIKK2JvdGggYXJlIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UpLCA8Y29kZT53Y3NjYXNlY21wPC9jb2RlPiByZXR1cm5zIGEKK251bWJlciBncmVhdGVyIHRoYW4gemVyby4gIElmIHRoZSB0d28gc3RyaW5ncyBtYXRjaCwKKzxjb2RlPndjc2Nhc2VjbXA8L2NvZGU+IHJldHVybnMgemVyby4gIElmIDxjb2RlPio8L2NvZGU+PHZhcj5hPC92YXI+IHNvcnRzCitsZXhpY29ncmFwaGljYWxseSBiZWZvcmUgPGNvZGU+KjwvY29kZT48dmFyPmI8L3Zhcj4sIDxjb2RlPndjc2Nhc2VjbXA8L2NvZGU+IHJldHVybnMgYQorbnVtYmVyIGxlc3MgdGhhbiB6ZXJvLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorUE9TSVgtMS4yMDA4CisKKyAgIDxwPjxjb2RlPndjc2Nhc2VjbXA8L2NvZGU+IHJlcXVpcmVzIG5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMuIEl0IHVzZXMKK3RvbG93ZXIoKSBmcm9tIGVsc2V3aGVyZSBpbiB0aGlzIGxpYnJhcnkuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzY2F0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NjYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmNkZTgwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzY2F0Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzY2F0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3bWVtc2V0Lmh0bWwjd21lbXNldCIgdGl0bGU9IndtZW1zZXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NjaHIuaHRtbCN3Y3NjaHIiIHRpdGxlPSJ3Y3NjaHIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc2NhdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3NjaHIuaHRtbCN3Y3NjaHIiPndjc2NocjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IndtZW1zZXQuaHRtbCN3bWVtc2V0Ij53bWVtc2V0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjYgPGNvZGU+d2NzY2F0PC9jb2RlPiZtZGFzaDtjb25jYXRlbmF0ZSB0d28gd2lkZS1jaGFyYWN0ZXIgc3RyaW5nczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc2NhdC00MTUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3Y2hhcl90ICp3Y3NjYXQod2NoYXJfdCAqPHZhcj5zMTwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5zMjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndjc2NhdDwvY29kZT4gZnVuY3Rpb24gYXBwZW5kcyBhIGNvcHkgb2YgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZworcG9pbnRlZCB0byBieSA8dmFyPnMyPC92YXI+IChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgd2lkZS1jaGFyYWN0ZXIKK2NvZGUpIHRvIHRoZSBlbmQgb2YgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czE8L3Zhcj4uIAorVGhlIGluaXRpYWwgd2lkZS1jaGFyYWN0ZXIgY29kZSBvZiA8dmFyPnMyPC92YXI+IG92ZXJ3cml0ZXMgdGhlIG51bGwKK3dpZGUtY2hhcmFjdGVyIGNvZGUgYXQgdGhlIGVuZCBvZiA8dmFyPnMxPC92YXI+LiBJZiBjb3B5aW5nIHRha2VzIHBsYWNlIGJldHdlZW4KK29iamVjdHMgdGhhdCBvdmVybGFwLCB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndjc2NhdDwvY29kZT4gZnVuY3Rpb24gcmV0dXJucyA8dmFyPnMxPC92YXI+Oworbm8gcmV0dXJuIHZhbHVlIGlzIHJlc2VydmVkIHRvIGluZGljYXRlIGFuIGVycm9yLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzY2F0PC9jb2RlPiBpcyBJU08vSUVDIDk4OTkvQU1EMToxOTk1IChJU08gQykuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2Noci5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzY2hyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4NmM3OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2Noci5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjc2NociAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2NzY2F0Lmh0bWwjd2NzY2F0IiB0aXRsZT0id2NzY2F0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2NzY21wLmh0bWwjd2NzY21wIiB0aXRsZT0id2NzY21wIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3NjaHIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzY21wLmh0bWwjd2NzY21wIj53Y3NjbXA8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NjYXQuaHRtbCN3Y3NjYXQiPndjc2NhdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni43IDxjb2RlPndjc2NocjwvY29kZT4mbWRhc2g7d2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHNjYW5uaW5nIG9wZXJhdGlvbjwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdjaGFyX3QgKndjc2Nocihjb25zdCB3Y2hhcl90ICo8dmFyPnM8L3Zhcj4sIHdjaGFyX3QgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2NzY2hyPC9jb2RlPiBmdW5jdGlvbiBsb2NhdGVzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIDx2YXI+YzwvdmFyPiBpbiB0aGUKK3dpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czwvdmFyPi4gVGhlIHZhbHVlIG9mIDx2YXI+YzwvdmFyPiBtdXN0IGJlIGEKK2NoYXJhY3RlciByZXByZXNlbnRhYmxlIGFzIGEgdHlwZSB3Y2hhcl90IGFuZCBtdXN0IGJlIGEgd2lkZS1jaGFyYWN0ZXIKK2NvZGUgY29ycmVzcG9uZGluZyB0byBhIHZhbGlkIGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBsb2NhbGUuIAorVGhlIHRlcm1pbmF0aW5nIG51bGwgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitVcG9uIGNvbXBsZXRpb24sIDxjb2RlPndjc2NocjwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHdpZGUtY2hhcmFjdGVyCitjb2RlLCBvciBhIG51bGwgcG9pbnRlciBpZiB0aGUgd2lkZS1jaGFyYWN0ZXIgY29kZSBpcyBub3QgZm91bmQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3NjaHI8L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzY21wLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NjbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzc2NjdjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzY21wLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzY21wIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NjaHIuaHRtbCN3Y3NjaHIiIHRpdGxlPSJ3Y3NjaHIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3Njb2xsLmh0bWwjd2NzY29sbCIgdGl0bGU9Indjc2NvbGwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc2NtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3Njb2xsLmh0bWwjd2NzY29sbCI+d2NzY29sbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc2Noci5odG1sI3djc2NociI+d2NzY2hyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjggPGNvZGU+d2NzY21wPC9jb2RlPiZtZGFzaDtjb21wYXJlIHR3byB3aWRlLWNoYXJhY3RlciBzdHJpbmdzPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgaW50IHdjc2NtcChjb25zdCB3Y2hhcl90ICo8dmFyPnMxPC92YXI+LCAqPHZhcj5zMjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndjc2NtcDwvY29kZT4gZnVuY3Rpb24gY29tcGFyZXMgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvCitieSA8dmFyPnMxPC92YXI+IHRvIHRoZSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnMyPC92YXI+LgorCisgICA8cD5UaGUgc2lnbiBvZiBhIG5vbi16ZXJvIHJldHVybiB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzaWduIG9mIHRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2YWx1ZXMgb2YgdGhlIGZpcnN0IHBhaXIgb2Ygd2lkZS1jaGFyYWN0ZXIgY29kZXMKK3RoYXQgZGlmZmVyIGluIHRoZSBvYmplY3RzIGJlaW5nIGNvbXBhcmVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitVcG9uIGNvbXBsZXRpb24sIDxjb2RlPndjc2NtcDwvY29kZT4gcmV0dXJucyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiwgZXF1YWwgdG8KK29yIGxlc3MgdGhhbiAwLCBpZiB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkgPHZhcj5zMTwvdmFyPiBpcworZ3JlYXRlciB0aGFuLCBlcXVhbCB0byBvciBsZXNzIHRoYW4gdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkCit0byBieSA8dmFyPnMyPC92YXI+IHJlc3BlY3RpdmVseS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjc2NtcDwvY29kZT4gaXMgSVNPL0lFQyA5ODk5L0FNRDE6MTk5NSAoSVNPIEMpLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3Njb2xsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3Njb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiNTRjMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2NvbGwuaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3Njb2xsIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NjbXAuaHRtbCN3Y3NjbXAiIHRpdGxlPSJ3Y3NjbXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NjcHkuaHRtbCN3Y3NjcHkiIHRpdGxlPSJ3Y3NjcHkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc2NvbGwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzY3B5Lmh0bWwjd2NzY3B5Ij53Y3NjcHk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NjbXAuaHRtbCN3Y3NjbXAiPndjc2NtcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni45IDxjb2RlPndjc2NvbGw8L2NvZGU+Jm1kYXNoO2xvY2FsZS1zcGVjaWZpYyB3aWRlLWNoYXJhY3RlciBzdHJpbmcgY29tcGFyZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc2NvbGwtNDE2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgaW50IHdjc2NvbGwoY29uc3Qgd2NoYXJfdCAqPHZhcj5zdHJhPC92YXI+LCBjb25zdCB3Y2hhcl90ICogPHZhcj5zdHJiPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT53Y3Njb2xsPC9jb2RlPiBjb21wYXJlcyB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkKKzx2YXI+c3RyYTwvdmFyPiB0byB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkgPHZhcj5zdHJiPC92YXI+LAordXNpbmcgYW4gaW50ZXJwcmV0YXRpb24gYXBwcm9wcmlhdGUgdG8gdGhlIGN1cnJlbnQgPGNvZGU+TENfQ09MTEFURTwvY29kZT4KK3N0YXRlLgorCisgICA8cD5UaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT53Y3Njb2xsPC9jb2RlPiBzaW1wbHkgdXNlcyA8Y29kZT53Y3NjbXA8L2NvZGU+CithbmQgZG9lcyBub3Qgc3VwcG9ydCBhbnkgbGFuZ3VhZ2Utc3BlY2lmaWMgc29ydGluZy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorSWYgdGhlIGZpcnN0IHN0cmluZyBpcyBncmVhdGVyIHRoYW4gdGhlIHNlY29uZCBzdHJpbmcsCis8Y29kZT53Y3Njb2xsPC9jb2RlPiByZXR1cm5zIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLiAgSWYgdGhlIHR3bworc3RyaW5ncyBhcmUgZXF1aXZhbGVudCwgPGNvZGU+d2NzY29sbDwvY29kZT4gcmV0dXJucyB6ZXJvLiAgSWYgdGhlIGZpcnN0CitzdHJpbmcgaXMgbGVzcyB0aGFuIHRoZSBzZWNvbmQgc3RyaW5nLCA8Y29kZT53Y3Njb2xsPC9jb2RlPiByZXR1cm5zIGEKK251bWJlciBsZXNzIHRoYW4gemVyby4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjc2NvbGw8L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NjcHkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2NweS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTNkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NjcHkuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3NjcHkgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIiB0aXRsZT0iV2NoYXIgc3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Indjc2NvbGwuaHRtbCN3Y3Njb2xsIiB0aXRsZT0id2NzY29sbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IndjcGNweS5odG1sI3djcGNweSIgdGl0bGU9IndjcGNweSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzY3B5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IndjcGNweS5odG1sI3djcGNweSI+d2NwY3B5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0id2NzY29sbC5odG1sI3djc2NvbGwiPndjc2NvbGw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyI+V2NoYXIgc3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMTAgPGNvZGU+d2NzY3B5PC9jb2RlPiZtZGFzaDtjb3B5IGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdCAqd2NzY3B5KHdjaGFyX3QgKjx2YXI+czE8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKiw8dmFyPnMyPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2NzY3B5PC9jb2RlPiBmdW5jdGlvbiBjb3BpZXMgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5Cis8dmFyPnMyPC92YXI+IChpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgd2lkZS1jaGFyYWN0ZXIgY29kZSkgaW50byB0aGUKK2FycmF5IHBvaW50ZWQgdG8gYnkgPHZhcj5zMTwvdmFyPi4gSWYgY29weWluZyB0YWtlcyBwbGFjZSBiZXR3ZWVuIG9iamVjdHMgdGhhdAorb3ZlcmxhcCwgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NjcHk8L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgPHZhcj5zMTwvdmFyPjsgbm8gcmV0dXJuIHZhbHVlIGlzIHJlc2VydmVkIHRvCitpbmRpY2F0ZSBhbiBlcnJvci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjc2NweTwvY29kZT4gaXMgSVNPL0lFQyA5ODk5L0FNRDE6MTk5NSAoSVNPIEMpLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3Njc3BuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3Njc3BuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4YjExYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2NzcG4uaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3Njc3BuIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3BjcHkuaHRtbCN3Y3BjcHkiIHRpdGxlPSJ3Y3BjcHkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NmdGltZS5odG1sI3djc2Z0aW1lIiB0aXRsZT0id2NzZnRpbWUiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc2NzcG4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzZnRpbWUuaHRtbCN3Y3NmdGltZSI+d2NzZnRpbWU8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3BjcHkuaHRtbCN3Y3BjcHkiPndjcGNweTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xMiA8Y29kZT53Y3Njc3BuPC9jb2RlPiZtZGFzaDtnZXQgbGVuZ3RoIG9mIGEgY29tcGxlbWVudGFyeSB3aWRlIHN1YnN0cmluZzwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHNpemVfdCB3Y3Njc3BuKGNvbnN0IHdjaGFyX3QgKjx2YXI+czwvdmFyPiwgd2NoYXJfdCAqPHZhcj5zZXQ8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3Njc3BuPC9jb2RlPiBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXhpbXVtIGluaXRpYWwKK3NlZ21lbnQgb2YgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czwvdmFyPiB3aGljaCBjb25zaXN0cworZW50aXJlbHkgb2Ygd2lkZS1jaGFyYWN0ZXIgY29kZXMgbm90IGZyb20gdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZworcG9pbnRlZCB0byBieSA8dmFyPnNldDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndjc2NzcG48L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCBzdWJzdHJpbmcgb2YKKzx2YXI+czE8L3Zhcj47IG5vIHJldHVybiB2YWx1ZSBpcyByZXNlcnZlZCB0byBpbmRpY2F0ZSBhbiBlcnJvci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjc2NzcG48L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzZHVwLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NkdXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDhmZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzZHVwLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzZHVwIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdHJpbmdzLmh0bWwjU3RyaW5ncyIgdGl0bGU9IlN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NjYXNlY21wLmh0bWwjd2NzY2FzZWNtcCIgdGl0bGU9Indjc2Nhc2VjbXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NuY2FzZWNtcC5odG1sI3djc25jYXNlY21wIiB0aXRsZT0id2NzbmNhc2VjbXAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc2R1cCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3NuY2FzZWNtcC5odG1sI3djc25jYXNlY21wIj53Y3NuY2FzZWNtcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc2Nhc2VjbXAuaHRtbCN3Y3NjYXNlY21wIj53Y3NjYXNlY21wPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RyaW5ncy5odG1sI1N0cmluZ3MiPlN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj41LjQzIDxjb2RlPndjc2R1cDwvY29kZT4mbWRhc2g7d2lkZSBjaGFyYWN0ZXIgc3RyaW5nIGR1cGxpY2F0ZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc2R1cC00MTIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zndjc2R1cF8wMDVmci00MTMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3Y2hhcl90ICp3Y3NkdXAoY29uc3Qgd2NoYXJfdCAqPHZhcj5zdHI8L3Zhcj4pOworICAgICAKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdjaGFyX3QgKl93Y3NkdXBfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5zdHI8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPndjc2R1cDwvY29kZT4gYWxsb2NhdGVzIGEgbmV3IHdpZGUgY2hhcmFjdGVyIHN0cmluZyB1c2luZyA8Y29kZT5tYWxsb2M8L2NvZGU+LAorYW5kIGNvcGllcyB0aGUgY29udGVudCBvZiB0aGUgYXJndW1lbnQgPHZhcj5zdHI8L3Zhcj4gaW50byB0aGUgbmV3bHkKK2FsbG9jYXRlZCBzdHJpbmcsIHRodXMgbWFraW5nIGEgY29weSBvZiA8dmFyPnN0cjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzZHVwPC9jb2RlPiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY29weSBvZiA8dmFyPnN0cjwvdmFyPiBpZiBlbm91Z2gKK21lbW9yeSBmb3IgdGhlIGNvcHkgd2FzIGF2YWlsYWJsZS4gIE90aGVyd2lzZSBpdCByZXR1cm5zIE5VTEwKK2FuZCBlcnJubyBpcyBzZXQgdG8gRU5PTUVNLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorUE9TSVgtMS4yMDA4CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzZnRpbWUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2Z0aW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkMWQzNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2Z0aW1lLmh0bWwKQEAgLTAsMCArMSw4OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzZnRpbWUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIiB0aXRsZT0iV2NoYXIgc3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Indjc2NzcG4uaHRtbCN3Y3Njc3BuIiB0aXRsZT0id2NzY3NwbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Indjc2xjYXQuaHRtbCN3Y3NsY2F0IiB0aXRsZT0id2NzbGNhdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzZnRpbWUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzbGNhdC5odG1sI3djc2xjYXQiPndjc2xjYXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3Njc3BuLmh0bWwjd2NzY3NwbiI+d2NzY3NwbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xMyA8Y29kZT53Y3NmdGltZTwvY29kZT4mbmRhc2g7Y29udmVydCBkYXRlIGFuZCB0aW1lIHRvIGEgZm9ybWF0dGVkIHdpZGUtY2hhcmFjdGVyIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc2Z0aW1lLTQxNyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHNpemVfdCB3Y3NmdGltZSh3Y2hhcl90ICo8dmFyPnM8L3Zhcj4sIHNpemVfdCA8dmFyPm1heHNpemU8L3Zhcj4sCisgICAgICAgICBjb25zdCB3Y2hhcl90ICo8dmFyPmZvcm1hdDwvdmFyPiwgY29uc3Qgc3RydWN0IHRtICo8dmFyPnRpbXA8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPndjc2Z0aW1lPC9jb2RlPiBpcyBlcXVpdmFsZW50IHRvIDxjb2RlPnN0cmZ0aW1lPC9jb2RlPiwgZXhjZXB0IHRoYXQ6CisgICAgIDx1bD4KKzxsaT5UaGUgYXJndW1lbnQgcyBwb2ludHMgdG8gdGhlIGluaXRpYWwgZWxlbWVudCBvZiBhbiBhcnJheSBvZiB3aWRlIGNoYXJhY3RlcnMKK2ludG8gd2hpY2ggdGhlIGdlbmVyYXRlZCBvdXRwdXQgaXMgdG8gYmUgcGxhY2VkLiAKKzxsaT5UaGUgYXJndW1lbnQgbWF4c2l6ZSBpbmRpY2F0ZXMgdGhlIGxpbWl0aW5nIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMuIAorPGxpPlRoZSBhcmd1bWVudCBmb3JtYXQgaXMgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgYW5kIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllcnMKK2FyZSByZXBsYWNlZCBieSBjb3JyZXNwb25kaW5nIHNlcXVlbmNlcyBvZiB3aWRlIGNoYXJhY3RlcnMuIAorPGxpPlRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzLiAKKzwvdWw+CisKKyAgIDxwPihUaGUgZGlmZmVyZW5jZSBpbiBhbGwgb2YgdGhlIGFib3ZlIGJlaW5nIHdpZGUgY2hhcmFjdGVycyB2ZXJzdXMgcmVndWxhcgorY2hhcmFjdGVycy4pIAorU2VlIDxjb2RlPnN0cmZ0aW1lPC9jb2RlPiBmb3IgdGhlIGRldGFpbHMgb2YgdGhlIGZvcm1hdCBzcGVjaWZpZXJzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitXaGVuIHRoZSBmb3JtYXR0ZWQgdGltZSB0YWtlcyB1cCBubyBtb3JlIHRoYW4gPHZhcj5tYXhzaXplPC92YXI+IHdpZGUgY2hhcmFjdGVycywKK3RoZSByZXN1bHQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgZm9ybWF0dGVkIHdpZGUgc3RyaW5nLiAgT3RoZXJ3aXNlLCBpZiB0aGUKK2Zvcm1hdHRpbmcgb3BlcmF0aW9uIHdhcyBhYmFuZG9uZWQgZHVlIHRvIGxhY2sgb2Ygcm9vbSwgdGhlIHJlc3VsdCBpcworPGNvZGU+MDwvY29kZT4sIGFuZCB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHN0YXJ0aW5nIGF0IDx2YXI+czwvdmFyPiBjb3JyZXNwb25kcyB0byBqdXN0IHRob3NlCitwYXJ0cyBvZiA8Y29kZT4qPC9jb2RlPjx2YXI+Zm9ybWF0PC92YXI+IHRoYXQgY291bGQgYmUgY29tcGxldGVseSBmaWxsZWQgaW4gd2l0aGluIHRoZQorPHZhcj5tYXhzaXplPC92YXI+IGxpbWl0LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQzk5IGFuZCBQT1NJWCByZXF1aXJlIDxjb2RlPndjc2Z0aW1lPC9jb2RlPiwgYnV0IGRvIG5vdCBzcGVjaWZ5IHRoZSBjb250ZW50cyBvZgorPGNvZGU+KjwvY29kZT48dmFyPnM8L3Zhcj4gd2hlbiB0aGUgZm9ybWF0dGVkIHN0cmluZyB3b3VsZCByZXF1aXJlIG1vcmUgdGhhbgorPHZhcj5tYXhzaXplPC92YXI+IGNoYXJhY3RlcnMuICBVbnJlY29nbml6ZWQgc3BlY2lmaWVycyBhbmQgZmllbGRzIG9mCis8Y29kZT50aW1wPC9jb2RlPiB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UgY2F1c2UgdW5kZWZpbmVkIHJlc3VsdHMuICBTaW5jZSBzb21lCitmb3JtYXRzIGV4cGFuZCB0byAwIGJ5dGVzLCBpdCBpcyB3aXNlIHRvIHNldCA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiB0byBhIG5vbnplcm8KK3ZhbHVlIGJlZm9yZWhhbmQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBmYWlsdXJlIGFuZCBhbiBlbXB0eSBzdHJpbmcuIAorVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IDxjb2RlPnM8L2NvZGU+IGJlaW5nIE5VTEwsIG5vciBvdmVybGFwcGluZworPGNvZGU+czwvY29kZT4gYW5kIDxjb2RlPmZvcm1hdDwvY29kZT4uCisKKyAgIDxwPjxjb2RlPndjc2Z0aW1lPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlNlZSBBbHNvPC9zdHJvbmc+PGJyPgorPGNvZGU+c3RyZnRpbWU8L2NvZGU+CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzbGNhdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzbGNhdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzE0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NsY2F0Lmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzbGNhdCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2NzZnRpbWUuaHRtbCN3Y3NmdGltZSIgdGl0bGU9Indjc2Z0aW1lIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2NzbGNweS5odG1sI3djc2xjcHkiIHRpdGxlPSJ3Y3NsY3B5Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3NsY2F0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Indjc2xjcHkuaHRtbCN3Y3NsY3B5Ij53Y3NsY3B5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0id2NzZnRpbWUuaHRtbCN3Y3NmdGltZSI+d2NzZnRpbWU8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyI+V2NoYXIgc3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMTQgPGNvZGU+d2NzbGNhdDwvY29kZT4mbWRhc2g7Y29uY2F0ZW5hdGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5ncyB0byBzcGVjaWZpZWQgbGVuZ3RoPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgc2l6ZV90IHdjc2xjYXQod2NoYXJfdCAqPHZhcj5kc3Q8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+c3JjPC92YXI+LCBzaXplX3QgPHZhcj5zaXo8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NsY2F0PC9jb2RlPiBmdW5jdGlvbiBhcHBlbmRzIHdpZGUgY2hhcmFjdGVycyBmcm9tIDx2YXI+c3JjPC92YXI+IHRvCitlbmQgb2YgdGhlIDx2YXI+ZHN0PC92YXI+IHdpZGUtY2hhcmFjdGVyIHN0cmluZyBzbyB0aGF0IHRoZSByZXN1bHRhbnQKK3dpZGUtY2hhcmFjdGVyIHN0cmluZyBpcyBub3QgbW9yZSB0aGFuIDx2YXI+c2l6PC92YXI+IHdpZGUgY2hhcmFjdGVycworaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIHdpZGUtY2hhcmFjdGVyIGNvZGUuICBBIHRlcm1pbmF0aW5nCitudWxsIHdpZGUgY2hhcmFjdGVyIGlzIGFsd2F5cyBhZGRlZCB1bmxlc3MgPHZhcj5zaXo8L3Zhcj4gaXMgMC4gIFRodXMsCit0aGUgbWF4aW11bSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIGFwcGVuZGVkIGZyb20KKzx2YXI+c3JjPC92YXI+IGlzIDx2YXI+c2l6PC92YXI+IC0gMS4gSWYgY29weWluZyB0YWtlcyBwbGFjZSBiZXR3ZWVuIG9iamVjdHMKK3RoYXQgb3ZlcmxhcCwgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1dpZGUtY2hhcmFjdGVyIHN0cmluZyBsZW5ndGggb2YgaW5pdGlhbCA8dmFyPmRzdDwvdmFyPiBwbHVzIHRoZQord2lkZS1jaGFyYWN0ZXIgc3RyaW5nIGxlbmd0aCBvZiA8dmFyPnNyYzwvdmFyPiAoZG9lcyBub3QgaW5jbHVkZQordGVybWluYXRpbmcgbnVsbCB3aWRlLWNoYXJhY3RlcnMpLiAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcworZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDx2YXI+c2l6PC92YXI+LCB0aGVuIHRydW5jYXRpb24gb2NjdXJyZWQgYW5kCitub3QgYWxsIHdpZGUgY2hhcmFjdGVycyBmcm9tIDx2YXI+c3JjPC92YXI+IHdlcmUgYXBwZW5kZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NsY3B5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NsY3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2ZGQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2xjcHkuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3NsY3B5IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NsY2F0Lmh0bWwjd2NzbGNhdCIgdGl0bGU9Indjc2xjYXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NsZW4uaHRtbCN3Y3NsZW4iIHRpdGxlPSJ3Y3NsZW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc2xjcHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzbGVuLmh0bWwjd2NzbGVuIj53Y3NsZW48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NsY2F0Lmh0bWwjd2NzbGNhdCI+d2NzbGNhdDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xNSA8Y29kZT53Y3NsY3B5PC9jb2RlPiZtZGFzaDtjb3B5IGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHRvIHNwZWNpZmllZCBsZW5ndGg8L2gzPgorCis8cD48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICBzaXplX3Qgd2NzbGNweSh3Y2hhcl90ICo8dmFyPmRzdDwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5zcmM8L3Zhcj4sIHNpemVfdCA8dmFyPnNpejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzbGNweTwvY29kZT4gY29waWVzIHdpZGUgY2hhcmFjdGVycyBmcm9tIDx2YXI+c3JjPC92YXI+IHRvIDx2YXI+ZHN0PC92YXI+CitzdWNoIHRoYXQgdXAgdG8gPHZhcj5zaXo8L3Zhcj4gLSAxIGNoYXJhY3RlcnMgYXJlIGNvcGllZC4gIEEKK3Rlcm1pbmF0aW5nIG51bGwgaXMgYXBwZW5kZWQgdG8gdGhlIHJlc3VsdCwgdW5sZXNzIDx2YXI+c2l6PC92YXI+CitpcyB6ZXJvLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3NsY3B5PC9jb2RlPiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2lkZSBjaGFyYWN0ZXJzIGluIDx2YXI+c3JjPC92YXI+LAorbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgbnVsbCB3aWRlIGNoYXJhY3Rlci4gIElmIHRoZQorcmV0dXJuIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA8dmFyPnNpejwvdmFyPiwgdGhlbgorbm90IGFsbCB3aWRlIGNoYXJhY3RlcnMgd2VyZSBjb3BpZWQgZnJvbSA8dmFyPnNyYzwvdmFyPiBhbmQgdHJ1bmNhdGlvbgorb2NjdXJyZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NsZW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc2xlbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYjgwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NsZW4uaHRtbApAQCAtMCwwICsxLDYxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3NsZW4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIiB0aXRsZT0iV2NoYXIgc3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Indjc2xjcHkuaHRtbCN3Y3NsY3B5IiB0aXRsZT0id2NzbGNweSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Indjc25jYXQuaHRtbCN3Y3NuY2F0IiB0aXRsZT0id2NzbmNhdCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzbGVuIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Indjc25jYXQuaHRtbCN3Y3NuY2F0Ij53Y3NuY2F0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0id2NzbGNweS5odG1sI3djc2xjcHkiPndjc2xjcHk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyI+V2NoYXIgc3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMTYgPGNvZGU+d2NzbGVuPC9jb2RlPiZtZGFzaDtnZXQgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIGxlbmd0aDwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHNpemVfdCB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2NzbGVuPC9jb2RlPiBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbnVtYmVyIG9mIHdpZGUtY2hhcmFjdGVyIGNvZGVzCitpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHRvIHdoaWNoIDx2YXI+czwvdmFyPiBwb2ludHMsIG5vdCBpbmNsdWRpbmcgdGhlCit0ZXJtaW5hdGluZyBudWxsIHdpZGUtY2hhcmFjdGVyIGNvZGUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NsZW48L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiA8dmFyPnM8L3Zhcj47IG5vIHJldHVybiB2YWx1ZSBpcworcmVzZXJ2ZWQgdG8gaW5kaWNhdGUgYW4gZXJyb3IuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3NsZW48L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzbmNhc2VjbXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc25jYXNlY21wLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhOTNiMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc25jYXNlY21wLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzbmNhc2VjbXAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIiB0aXRsZT0iU3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Indjc2R1cC5odG1sI3djc2R1cCIgdGl0bGU9Indjc2R1cCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzbmNhc2VjbXAiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NkdXAuaHRtbCN3Y3NkdXAiPndjc2R1cDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0cmluZ3MuaHRtbCNTdHJpbmdzIj5TdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+NS40NCA8Y29kZT53Y3NuY2FzZWNtcDwvY29kZT4mbWRhc2g7Y2FzZS1pbnNlbnNpdGl2ZSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgY29tcGFyZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc25jYXNlY21wLTQxNCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIGludCB3Y3NuY2FzZWNtcChjb25zdCB3Y2hhcl90ICo8dmFyPmE8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKiA8dmFyPmI8L3Zhcj4sIHNpemVfdCA8dmFyPmxlbmd0aDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzbmNhc2VjbXA8L2NvZGU+IGNvbXBhcmVzIHVwIHRvIDx2YXI+bGVuZ3RoPC92YXI+IHdpZGUgY2hhcmFjdGVycworZnJvbSB0aGUgc3RyaW5nIGF0IDx2YXI+YTwvdmFyPiB0byB0aGUgc3RyaW5nIGF0IDx2YXI+YjwvdmFyPiBpbiBhCitjYXNlLWluc2Vuc2l0aXZlIG1hbm5lci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorCisgICA8cD5JZiA8Y29kZT4qPC9jb2RlPjx2YXI+YTwvdmFyPiBzb3J0cyBsZXhpY29ncmFwaGljYWxseSBhZnRlciA8Y29kZT4qPC9jb2RlPjx2YXI+YjwvdmFyPiAoYWZ0ZXIKK2JvdGggYXJlIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UpLCA8Y29kZT53Y3NuY2FzZWNtcDwvY29kZT4gcmV0dXJucyBhCitudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8uICBJZiB0aGUgdHdvIHN0cmluZ3MgYXJlIGVxdWl2YWxlbnQsCis8Y29kZT53Y3NuY2FzZWNtcDwvY29kZT4gcmV0dXJucyB6ZXJvLiAgSWYgPGNvZGU+KjwvY29kZT48dmFyPmE8L3Zhcj4gc29ydHMKK2xleGljb2dyYXBoaWNhbGx5IGJlZm9yZSA8Y29kZT4qPC9jb2RlPjx2YXI+YjwvdmFyPiwgPGNvZGU+d2NzbmNhc2VjbXA8L2NvZGU+IHJldHVybnMgYQorbnVtYmVyIGxlc3MgdGhhbiB6ZXJvLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorUE9TSVgtMS4yMDA4CisKKyAgIDxwPjxjb2RlPndjc25jYXNlY21wPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLiBJdCB1c2VzCit0b2xvd2VyKCkgZnJvbSBlbHNld2hlcmUgaW4gdGhpcyBsaWJyYXJ5LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc25jYXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc25jYXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTUwMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzbmNhdC5odG1sCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjc25jYXQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIiB0aXRsZT0iV2NoYXIgc3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Indjc2xlbi5odG1sI3djc2xlbiIgdGl0bGU9Indjc2xlbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Indjc25jbXAuaHRtbCN3Y3NuY21wIiB0aXRsZT0id2NzbmNtcCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzbmNhdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3NuY21wLmh0bWwjd2NzbmNtcCI+d2NzbmNtcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc2xlbi5odG1sI3djc2xlbiI+d2NzbGVuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjE3IDxjb2RlPndjc25jYXQ8L2NvZGU+Jm1kYXNoO2NvbmNhdGVuYXRlIHBhcnQgb2YgdHdvIHdpZGUtY2hhcmFjdGVyIHN0cmluZ3M8L2gzPgorCis8cD48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKjx2YXI+czE8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+czI8L3Zhcj4sIHNpemVfdCA8dmFyPm48L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NuY2F0PC9jb2RlPiBmdW5jdGlvbiBhcHBlbmRzIG5vdCBtb3JlIHRoYW4gPHZhcj5uPC92YXI+IHdpZGUtY2hhcmFjdGVyCitjb2RlcyAoYSBudWxsIHdpZGUtY2hhcmFjdGVyIGNvZGUgYW5kIHdpZGUtY2hhcmFjdGVyIGNvZGVzIHRoYXQgZm9sbG93CitpdCBhcmUgbm90IGFwcGVuZGVkKSBmcm9tIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDx2YXI+czI8L3Zhcj4gdG8gdGhlIGVuZCBvZgordGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czE8L3Zhcj4uIFRoZSBpbml0aWFsCit3aWRlLWNoYXJhY3RlciBjb2RlIG9mIDx2YXI+czI8L3Zhcj4gb3ZlcndyaXRlcyB0aGUgbnVsbCB3aWRlLWNoYXJhY3RlciBjb2RlCithdCB0aGUgZW5kIG9mIDx2YXI+czE8L3Zhcj4uIAorQSB0ZXJtaW5hdGluZyBudWxsIHdpZGUtY2hhcmFjdGVyIGNvZGUgaXMgYWx3YXlzIGFwcGVuZGVkIHRvIHRoZSByZXN1bHQuIAorSWYgY29weWluZyB0YWtlcyBwbGFjZSBiZXR3ZWVuIG9iamVjdHMgdGhhdCBvdmVybGFwLCB0aGUgYmVoYXZpb3VyIGlzCit1bmRlZmluZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NuY2F0PC9jb2RlPiBmdW5jdGlvbiByZXR1cm5zIDx2YXI+czE8L3Zhcj47IG5vIHJldHVybiB2YWx1ZSBpcyByZXNlcnZlZCB0bworaW5kaWNhdGUgYW4gZXJyb3IuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3NuY2F0PC9jb2RlPiBpcyBJU08vSUVDIDk4OTkvQU1EMToxOTk1IChJU08gQykuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc25jbXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc25jbXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjAzZmEzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzbmNtcC5odG1sCkBAIC0wLDAgKzEsNjggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjc25jbXAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIiB0aXRsZT0iV2NoYXIgc3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Indjc25jYXQuaHRtbCN3Y3NuY2F0IiB0aXRsZT0id2NzbmNhdCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Indjc25jcHkuaHRtbCN3Y3NuY3B5IiB0aXRsZT0id2NzbmNweSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzbmNtcCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3NuY3B5Lmh0bWwjd2NzbmNweSI+d2NzbmNweTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc25jYXQuaHRtbCN3Y3NuY2F0Ij53Y3NuY2F0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjE4IDxjb2RlPndjc25jbXA8L2NvZGU+Jm1kYXNoO2NvbXBhcmUgcGFydCBvZiB0d28gd2lkZS1jaGFyYWN0ZXIgc3RyaW5nczwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIGludCB3Y3NuY21wKGNvbnN0IHdjaGFyX3QgKjx2YXI+czE8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+czI8L3Zhcj4sIHNpemVfdCA8dmFyPm48L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NuY21wPC9jb2RlPiBmdW5jdGlvbiBjb21wYXJlcyBub3QgbW9yZSB0aGFuIDx2YXI+bjwvdmFyPiB3aWRlLWNoYXJhY3RlcgorY29kZXMgKHdpZGUtY2hhcmFjdGVyIGNvZGVzIHRoYXQgZm9sbG93IGEgbnVsbCB3aWRlLWNoYXJhY3RlciBjb2RlIGFyZQorbm90IGNvbXBhcmVkKSBmcm9tIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDx2YXI+czE8L3Zhcj4gdG8gdGhlIGFycmF5IHBvaW50ZWQKK3RvIGJ5IDx2YXI+czI8L3Zhcj4uCisKKyAgIDxwPlRoZSBzaWduIG9mIGEgbm9uLXplcm8gcmV0dXJuIHZhbHVlIGlzIGRldGVybWluZWQgYnkgdGhlIHNpZ24gb2YgdGhlCitkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHZhbHVlcyBvZiB0aGUgZmlyc3QgcGFpciBvZiB3aWRlLWNoYXJhY3RlciBjb2RlcwordGhhdCBkaWZmZXIgaW4gdGhlIG9iamVjdHMgYmVpbmcgY29tcGFyZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCA8Y29kZT53Y3NuY21wPC9jb2RlPiByZXR1cm5zIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuLAorZXF1YWwgdG8gb3IgbGVzcyB0aGFuIDAsIGlmIHRoZSBwb3NzaWJseSBudWxsLXRlcm1pbmF0ZWQgYXJyYXkgcG9pbnRlZAordG8gYnkgPHZhcj5zMTwvdmFyPiBpcyBncmVhdGVyIHRoYW4sIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiB0aGUgcG9zc2libHkKK251bGwtdGVybWluYXRlZCBhcnJheSBwb2ludGVkIHRvIGJ5IDx2YXI+czI8L3Zhcj4gcmVzcGVjdGl2ZWx5LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzbmNtcDwvY29kZT4gaXMgSVNPL0lFQyA5ODk5L0FNRDE6MTk5NSAoSVNPIEMpLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NuY3B5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NuY3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5MDFjZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc25jcHkuaHRtbApAQCAtMCwwICsxLDcwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3NuY3B5IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NuY21wLmh0bWwjd2NzbmNtcCIgdGl0bGU9Indjc25jbXAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3BuY3B5Lmh0bWwjd2NwbmNweSIgdGl0bGU9IndjcG5jcHkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc25jcHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NwbmNweS5odG1sI3djcG5jcHkiPndjcG5jcHk8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NuY21wLmh0bWwjd2NzbmNtcCI+d2NzbmNtcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4xOSA8Y29kZT53Y3NuY3B5PC9jb2RlPiZtZGFzaDtjb3B5IHBhcnQgb2YgYSB3aWRlLWNoYXJhY3RlciBzdHJpbmc8L2gzPgorCis8cD48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3Y2hhcl90ICp3Y3NuY3B5KHdjaGFyX3QgKjx2YXI+czE8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+czI8L3Zhcj4sIHNpemVfdCA8dmFyPm48L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NuY3B5PC9jb2RlPiBmdW5jdGlvbiBjb3BpZXMgbm90IG1vcmUgdGhhbiA8dmFyPm48L3Zhcj4gd2lkZS1jaGFyYWN0ZXIgY29kZXMKKyh3aWRlLWNoYXJhY3RlciBjb2RlcyB0aGF0IGZvbGxvdyBhIG51bGwgd2lkZS1jaGFyYWN0ZXIgY29kZSBhcmUgbm90Citjb3BpZWQpIGZyb20gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgPHZhcj5zMjwvdmFyPiB0byB0aGUgYXJyYXkgcG9pbnRlZCB0bworYnkgPHZhcj5zMTwvdmFyPi4gSWYgY29weWluZyB0YWtlcyBwbGFjZSBiZXR3ZWVuIG9iamVjdHMgdGhhdCBvdmVybGFwLCB0aGUKK2JlaGF2aW91ciBpcyB1bmRlZmluZWQuICBOb3RlIHRoYXQgaWYgPHZhcj5zMTwvdmFyPiBjb250YWlucyBtb3JlIHRoYW4gPHZhcj5uPC92YXI+Cit3aWRlIGNoYXJhY3RlcnMgYmVmb3JlIGl0cyB0ZXJtaW5hdGluZyBudWxsLCB0aGUgcmVzdWx0IGlzIG5vdAorbnVsbC10ZXJtaW5hdGVkLgorCisgICA8cD5JZiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8dmFyPnMyPC92YXI+IGlzIGEgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHRoYXQgaXMKK3Nob3J0ZXIgdGhhbiA8dmFyPm48L3Zhcj4gd2lkZS1jaGFyYWN0ZXIgY29kZXMsIG51bGwgd2lkZS1jaGFyYWN0ZXIgY29kZXMgYXJlCithcHBlbmRlZCB0byB0aGUgY29weSBpbiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8dmFyPnMxPC92YXI+LCB1bnRpbCA8dmFyPm48L3Zhcj4KK3dpZGUtY2hhcmFjdGVyIGNvZGVzIGluIGFsbCBhcmUgd3JpdHRlbi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndjc25jcHk8L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgPHZhcj5zMTwvdmFyPjsgbm8gcmV0dXJuIHZhbHVlIGlzIHJlc2VydmVkIHRvCitpbmRpY2F0ZSBhbiBlcnJvci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0lTTy9JRUMgOTg5OTsgUE9TSVguMS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2Nzbmxlbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2Nzbmxlbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NGM2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NubGVuLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzbmxlbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2NwbmNweS5odG1sI3djcG5jcHkiIHRpdGxlPSJ3Y3BuY3B5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2NzcGJyay5odG1sI3djc3BicmsiIHRpdGxlPSJ3Y3NwYnJrIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3NubGVuIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Indjc3BicmsuaHRtbCN3Y3NwYnJrIj53Y3NwYnJrPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0id2NwbmNweS5odG1sI3djcG5jcHkiPndjcG5jcHk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyI+V2NoYXIgc3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMjEgPGNvZGU+d2NzbmxlbjwvY29kZT4mbWRhc2g7Z2V0IGZpeGVkLXNpemUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIGxlbmd0aDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc25sZW4tNDE4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgc2l6ZV90IHdjc25sZW4oY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+LCBzaXplX3QgPHZhcj5tYXhsZW48L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NubGVuPC9jb2RlPiBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbnVtYmVyIG9mIHdpZGUtY2hhcmFjdGVyIGNvZGVzCitpbiB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkgPHZhcj5zPC92YXI+IG5vdCBpbmNsdWRpbmcgdGhlCit0ZXJtaW5hdGluZyBMJ1wwJyB3aWRlIGNoYXJhY3RlciBidXQgYXQgbW9zdCA8dmFyPm1heGxlbjwvdmFyPiB3aWRlCitjaGFyYWN0ZXJzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3NubGVuPC9jb2RlPiByZXR1cm5zIHRoZSBsZW5ndGggb2YgPHZhcj5zPC92YXI+IGlmIGl0IGlzIGxlc3MgdGhlbiA8dmFyPm1heGxlbjwvdmFyPiwKK29yIDx2YXI+bWF4bGVuPC92YXI+IGlmIHRoZXJlIGlzIG5vIEwnXDAnIHdpZGUgY2hhcmFjdGVyIGluIGZpcnN0IDx2YXI+bWF4bGVuPC92YXI+CitjaGFyYWN0ZXJzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzbmxlbjwvY29kZT4gaXMgYSBHTlUgZXh0ZW5zaW9uLgorCisgICA8cD48Y29kZT53Y3NubGVuPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3BicmsuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3BicmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmQ2MzFiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzcGJyay5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjc3BicmsgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIiB0aXRsZT0iV2NoYXIgc3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Indjc25sZW4uaHRtbCN3Y3NubGVuIiB0aXRsZT0id2NzbmxlbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Indjc3JjaHIuaHRtbCN3Y3NyY2hyIiB0aXRsZT0id2NzcmNociI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzcGJyayI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3NyY2hyLmh0bWwjd2NzcmNociI+d2NzcmNocjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc25sZW4uaHRtbCN3Y3NubGVuIj53Y3NubGVuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjIyIDxjb2RlPndjc3Bicms8L2NvZGU+Jm1kYXNoOyZuZGFzaDtzY2FuIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBmb3IgYSB3aWRlLWNoYXJhY3RlciBjb2RlPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdCAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICo8dmFyPnM8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+c2V0PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2NzcGJyazwvY29kZT4gZnVuY3Rpb24gbG9jYXRlcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUKK3dpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czwvdmFyPiBvZiBhbnkgd2lkZS1jaGFyYWN0ZXIgY29kZQorZnJvbSB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkgPHZhcj5zZXQ8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCA8Y29kZT53Y3NwYnJrPC9jb2RlPiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKK3dpZGUtY2hhcmFjdGVyIGNvZGUgb3IgYSBudWxsIHBvaW50ZXIgaWYgbm8gd2lkZS1jaGFyYWN0ZXIgY29kZSBmcm9tCis8dmFyPnNldDwvdmFyPiBvY2N1cnMgaW4gPHZhcj5zPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzcGJyazwvY29kZT4gaXMgSVNPL0lFQyA5ODk5L0FNRDE6MTk5NSAoSVNPIEMpLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NyY2hyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NyY2hyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjY2JlNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3JjaHIuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3NyY2hyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NwYnJrLmh0bWwjd2NzcGJyayIgdGl0bGU9Indjc3BicmsiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NzcG4uaHRtbCN3Y3NzcG4iIHRpdGxlPSJ3Y3NzcG4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc3JjaHIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2Nzc3BuLmh0bWwjd2Nzc3BuIj53Y3NzcG48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NwYnJrLmh0bWwjd2NzcGJyayI+d2NzcGJyazwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4yMyA8Y29kZT53Y3NyY2hyPC9jb2RlPiZtZGFzaDt3aWRlLWNoYXJhY3RlciBzdHJpbmcgc2Nhbm5pbmcgb3BlcmF0aW9uPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdCAqd2NzcmNocihjb25zdCB3Y2hhcl90ICo8dmFyPnM8L3Zhcj4sIHdjaGFyX3QgPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2NzcmNocjwvY29kZT4gZnVuY3Rpb24gbG9jYXRlcyB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIDx2YXI+YzwvdmFyPiBpbiB0aGUKK3dpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czwvdmFyPi4gVGhlIHZhbHVlIG9mIDx2YXI+YzwvdmFyPiBtdXN0IGJlIGEKK2NoYXJhY3RlciByZXByZXNlbnRhYmxlIGFzIGEgdHlwZSB3Y2hhcl90IGFuZCBtdXN0IGJlIGEgd2lkZS1jaGFyYWN0ZXIKK2NvZGUgY29ycmVzcG9uZGluZyB0byBhIHZhbGlkIGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBsb2NhbGUuIAorVGhlIHRlcm1pbmF0aW5nIG51bGwgd2lkZS1jaGFyYWN0ZXIgY29kZSBpcyBjb25zaWRlcmVkIHRvIGJlIHBhcnQgb2YKK3RoZSB3aWRlLWNoYXJhY3RlciBzdHJpbmcuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCA8Y29kZT53Y3NyY2hyPC9jb2RlPiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKK3dpZGUtY2hhcmFjdGVyIGNvZGUgb3IgYSBudWxsIHBvaW50ZXIgaWYgPHZhcj5jPC92YXI+IGRvZXMgbm90IG9jY3VyIGluIHRoZQord2lkZS1jaGFyYWN0ZXIgc3RyaW5nLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzcmNocjwvY29kZT4gaXMgSVNPL0lFQyA5ODk5L0FNRDE6MTk5NSAoSVNPIEMpLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NydG9tYnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3J0b21icy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Yzg0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NydG9tYnMuaHRtbApAQCAtMCwwICsxLDkxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3NydG9tYnMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiIgdGl0bGU9IlN0ZGxpYiI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InN0cnRvdWxsLmh0bWwjc3RydG91bGwiIHRpdGxlPSJzdHJ0b3VsbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Indjc3RvZC5odG1sI3djc3RvZCIgdGl0bGU9Indjc3RvZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2NzcnRvbWJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Indjc3RvZC5odG1sI3djc3RvZCI+d2NzdG9kPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3RydG91bGwuaHRtbCNzdHJ0b3VsbCI+c3RydG91bGw8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMzkgPGNvZGU+d2NzcnRvbWJzPC9jb2RlPiwgPGNvZGU+d2NzbnJ0b21iczwvY29kZT4mbWRhc2g7Y29udmVydCBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZyB0byBhIGNoYXJhY3RlciBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13Y3NydG9tYnMtOTAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zndjc3J0b21ic18wMDVmci05MSI+PC9hPjxhIG5hbWU9ImluZGV4LXdjc25ydG9tYnMtOTIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zndjc25ydG9tYnNfMDA1ZnItOTMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICBzaXplX3Qgd2NzcnRvbWJzKGNoYXIgKjx2YXI+ZHN0PC92YXI+LCBjb25zdCB3Y2hhcl90ICoqPHZhcj5zcmM8L3Zhcj4sIHNpemVfdCA8dmFyPmxlbjwvdmFyPiwKKyAgICAgICAgIG1ic3RhdGVfdCAqPHZhcj5wczwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgc2l6ZV90IF93Y3NydG9tYnNfcihzdHJ1Y3QgX3JlZW50ICo8dmFyPnB0cjwvdmFyPiwgY2hhciAqPHZhcj5kc3Q8L3Zhcj4sCisgICAgICAgICBjb25zdCB3Y2hhcl90ICoqPHZhcj5zcmM8L3Zhcj4sIHNpemVfdCA8dmFyPmxlbjwvdmFyPiwKKyAgICAgICAgIG1ic3RhdGVfdCAqPHZhcj5wczwvdmFyPik7CisgICAgIAorICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgc2l6ZV90IHdjc25ydG9tYnMoY2hhciAqPHZhcj5kc3Q8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKio8dmFyPnNyYzwvdmFyPiwKKyAgICAgICAgIHNpemVfdCA8dmFyPm53YzwvdmFyPiwgc2l6ZV90IDx2YXI+bGVuPC92YXI+LCBtYnN0YXRlX3QgKjx2YXI+cHM8L3Zhcj4pOworICAgICAKKyAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHNpemVfdCBfd2NzbnJ0b21ic19yKHN0cnVjdCBfcmVlbnQgKjx2YXI+cHRyPC92YXI+LCBjaGFyICo8dmFyPmRzdDwvdmFyPiwKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKio8dmFyPnNyYzwvdmFyPiwgc2l6ZV90IDx2YXI+bndjPC92YXI+LAorICAgICAgICAgc2l6ZV90IDx2YXI+bGVuPC92YXI+LCBtYnN0YXRlX3QgKjx2YXI+cHM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NydG9tYnM8L2NvZGU+IGZ1bmN0aW9uIGNvbnZlcnRzIGEgc3RyaW5nIG9mIHdpZGUgY2hhcmFjdGVycyBpbmRpcmVjdGx5Citwb2ludGVkIHRvIGJ5IDx2YXI+c3JjPC92YXI+IHRvIGEgY29ycmVzcG9uZGluZyBtdWx0aWJ5dGUgY2hhcmFjdGVyIHN0cmluZyBzdG9yZWQgaW4KK3RoZSBhcnJheSBwb2ludGVkIHRvIGJ5IDx2YXI+ZHN0PC92YXI+Jmd0Oy4gIE5vIG1vcmUgdGhhbiA8dmFyPmxlbjwvdmFyPiBieXRlcyBhcmUgd3JpdHRlbiB0bworPHZhcj5kc3Q8L3Zhcj4mZ3Q7LgorCisgICA8cD5JZiA8dmFyPmRzdDwvdmFyPiZndDsgaXMgTlVMTCwgbm8gY2hhcmFjdGVycyBhcmUgc3RvcmVkLgorCisgICA8cD5JZiA8dmFyPmRzdDwvdmFyPiZndDsgaXMgbm90IE5VTEwsIHRoZSBwb2ludGVyIHBvaW50ZWQgdG8gYnkgPHZhcj5zcmM8L3Zhcj4gaXMgdXBkYXRlZCB0byBwb2ludAordG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgb25lIHRoYXQgY29udmVyc2lvbiBzdG9wcGVkIGF0LiAgSWYgY29udmVyc2lvbgorc3RvcHMgYmVjYXVzZSBhIG51bGwgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkLCAqPHZhcj5zcmM8L3Zhcj4gaXMgc2V0IHRvIE5VTEwuCisKKyAgIDxwPlRoZSBtYnN0YXRlX3QgYXJndW1lbnQsIDx2YXI+cHM8L3Zhcj4sIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgc2hpZnQgc3RhdGUuICBJZgoraXQgaXMgTlVMTCwgPGNvZGU+d2NzcnRvbWJzPC9jb2RlPiB1c2VzIGFuIGludGVybmFsLCBzdGF0aWMgbWJzdGF0ZV90IG9iamVjdCwgd2hpY2gKK2lzIGluaXRpYWxpemVkIHRvIHRoZSBpbml0aWFsIGNvbnZlcnNpb24gc3RhdGUgYXQgcHJvZ3JhbSBzdGFydHVwLgorCisgICA8cD5UaGUgPGNvZGU+d2NzbnJ0b21iczwvY29kZT4gZnVuY3Rpb24gYmVoYXZlcyBpZGVudGljYWxseSB0byA8Y29kZT53Y3NydG9tYnM8L2NvZGU+LCBleGNlcHQgdGhhdAorY29udmVyc2lvbiBzdG9wcyBhZnRlciByZWFkaW5nIGF0IG1vc3QgPHZhcj5ud2M8L3Zhcj4gY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXIKK3BvaW50ZWQgdG8gYnkgPHZhcj5zcmM8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NydG9tYnM8L2NvZGU+IGFuZCA8Y29kZT53Y3NucnRvbWJzPC9jb2RlPiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKK3N0b3JlZCBpbiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSA8dmFyPmRzdDwvdmFyPiAobm90IGluY2x1ZGluZyBhbnkgdGVybWluYXRpbmcKK251bGwpLCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgaXQgcmV0dXJucyAoc2l6ZV90KS0xLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzcnRvbWJzPC9jb2RlPiBpcyBkZWZpbmVkIGJ5IEM5OSBzdGFuZGFyZC4gCis8Y29kZT53Y3NucnRvbWJzPC9jb2RlPiBpcyBkZWZpbmVkIGJ5IHRoZSBQT1NJWC4xLTIwMDggc3RhbmRhcmQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2Nzc3BuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NzcG4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWY4NGIxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2Nzc3BuLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2Nzc3BuIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NyY2hyLmh0bWwjd2NzcmNociIgdGl0bGU9Indjc3JjaHIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NzdHIuaHRtbCN3Y3NzdHIiIHRpdGxlPSJ3Y3NzdHIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc3NwbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3NzdHIuaHRtbCN3Y3NzdHIiPndjc3N0cjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc3JjaHIuaHRtbCN3Y3NyY2hyIj53Y3NyY2hyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjI0IDxjb2RlPndjc3NwbjwvY29kZT4mbWRhc2g7Z2V0IGxlbmd0aCBvZiBhIHdpZGUgc3Vic3RyaW5nPC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgc2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICo8dmFyPnM8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+c2V0PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2Nzc3BuPC9jb2RlPiBmdW5jdGlvbiBjb21wdXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXhpbXVtIGluaXRpYWwKK3NlZ21lbnQgb2YgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+czwvdmFyPiB3aGljaCBjb25zaXN0cworZW50aXJlbHkgb2Ygd2lkZS1jaGFyYWN0ZXIgY29kZXMgZnJvbSB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nCitwb2ludGVkIHRvIGJ5IDx2YXI+c2V0PC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgd2Nzc3BuKCkgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIDx2YXI+czE8L3Zhcj47IG5vIHJldHVybiB2YWx1ZSBpcworcmVzZXJ2ZWQgdG8gaW5kaWNhdGUgYW4gZXJyb3IuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3NzcG48L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2Nzc3RyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3NzdHIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDFjZWFkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2Nzc3RyLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2Nzc3RyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NzcG4uaHRtbCN3Y3NzcG4iIHRpdGxlPSJ3Y3NzcG4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3N0b2suaHRtbCN3Y3N0b2siIHRpdGxlPSJ3Y3N0b2siPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc3N0ciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3N0b2suaHRtbCN3Y3N0b2siPndjc3RvazwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc3Nwbi5odG1sI3djc3NwbiI+d2Nzc3BuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjI1IDxjb2RlPndjc3N0cjwvY29kZT4mbWRhc2g7ZmluZCBhIHdpZGUtY2hhcmFjdGVyIHN1YnN0cmluZzwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdjaGFyX3QgKndjc3N0cihjb25zdCB3Y2hhcl90ICo8dmFyPmJpZzwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5saXR0bGU8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3NzdHI8L2NvZGU+IGZ1bmN0aW9uIGxvY2F0ZXMgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gdGhlCit3aWRlLWNoYXJhY3RlciBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPmJpZzwvdmFyPiBvZiB0aGUgc2VxdWVuY2Ugb2YKK3dpZGUgY2hhcmFjdGVycyAoZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIHdpZGUgY2hhcmFjdGVyKSBpbiB0aGUKK3dpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+bGl0dGxlPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitPbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIDxjb2RlPndjc3N0cjwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0ZWQKK3dpZGUtY2hhcmFjdGVyIHN0cmluZywgb3IgYSBudWxsIHBvaW50ZXIgaWYgdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZworaXMgbm90IGZvdW5kLgorCisgICA8cD5JZiA8dmFyPmxpdHRsZTwvdmFyPiBwb2ludHMgdG8gYSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgd2l0aCB6ZXJvIGxlbmd0aCwKK3RoZSBmdW5jdGlvbiByZXR1cm5zIDx2YXI+YmlnPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2Nzc3RyPC9jb2RlPiBpcyBJU08vSUVDIDk4OTkvQU1EMToxOTk1IChJU08gQykuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzdG9kLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b2QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjdiZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzdG9kLmh0bWwKQEAgLTAsMCArMSw5OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzdG9kIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3NydG9tYnMuaHRtbCN3Y3NydG9tYnMiIHRpdGxlPSJ3Y3NydG9tYnMiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3N0b2wuaHRtbCN3Y3N0b2wiIHRpdGxlPSJ3Y3N0b2wiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc3RvZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3N0b2wuaHRtbCN3Y3N0b2wiPndjc3RvbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc3J0b21icy5odG1sI3djc3J0b21icyI+d2NzcnRvbWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjQwIDxjb2RlPndjc3RvZDwvY29kZT4sIDxjb2RlPndjc3RvZjwvY29kZT4mbWRhc2g7d2lkZSBjaGFyIHN0cmluZyB0byBkb3VibGUgb3IgZmxvYXQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13Y3N0b2QtOTQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zndjc3RvZF8wMDVmci05NSI+PC9hPjxhIG5hbWU9ImluZGV4LXdjc3RvZi05NiI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmd2NzdG9mXzAwNWZyLTk3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CisgICAgIGRvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJfdCAqPHZhcj5zdHI8L3Zhcj4sIHdjaGFyX3QgKio8dmFyPnRhaWw8L3Zhcj4pOworICAgICBmbG9hdCB3Y3N0b2YoY29uc3Qgd2NoYXJfdCAqPHZhcj5zdHI8L3Zhcj4sIHdjaGFyX3QgKio8dmFyPnRhaWw8L3Zhcj4pOworICAgICAKKyAgICAgZG91YmxlIF93Y3N0b2Rfcih2b2lkICo8dmFyPnJlZW50PC92YXI+LAorICAgICAgICAgY29uc3Qgd2NoYXJfdCAqPHZhcj5zdHI8L3Zhcj4sIHdjaGFyX3QgKio8dmFyPnRhaWw8L3Zhcj4pOworICAgICBmbG9hdCBfd2NzdG9mX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwKKyAgICAgICAgIGNvbnN0IHdjaGFyX3QgKjx2YXI+c3RyPC92YXI+LCB3Y2hhcl90ICoqPHZhcj50YWlsPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgZnVuY3Rpb24gPGNvZGU+d2NzdG9kPC9jb2RlPiBwYXJzZXMgdGhlIHdpZGUgY2hhcmFjdGVyIHN0cmluZyA8dmFyPnN0cjwvdmFyPiwKK3Byb2R1Y2luZyBhIHN1YnN0cmluZyB3aGljaCBjYW4gYmUgY29udmVydGVkIHRvIGEgZG91YmxlCit2YWx1ZS4gIFRoZSBzdWJzdHJpbmcgY29udmVydGVkIGlzIHRoZSBsb25nZXN0IGluaXRpYWwKK3N1YnNlcXVlbmNlIG9mIDx2YXI+c3RyPC92YXI+LCBiZWdpbm5pbmcgd2l0aCB0aGUgZmlyc3QKK25vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciwgdGhhdCBoYXMgb25lIG9mIHRoZXNlIGZvcm1hdHM6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgWyt8LV08dmFyPmRpZ2l0czwvdmFyPlsuWzx2YXI+ZGlnaXRzPC92YXI+XV1bKGV8RSlbK3wtXTx2YXI+ZGlnaXRzPC92YXI+XQorICAgICBbK3wtXS48dmFyPmRpZ2l0czwvdmFyPlsoZXxFKVsrfC1dPHZhcj5kaWdpdHM8L3Zhcj5dCisgICAgIFsrfC1dKGl8SSkobnxOKShmfEYpWyhpfEkpKG58TikoaXxJKSh0fFQpKHl8WSldCisgICAgIFsrfC1dKG58TikoYXxBKShufE4pWyZsdDsoJmd0O1s8dmFyPmhleGRpZ2l0czwvdmFyPl0mbHQ7KSZndDtdCisgICAgIFsrfC1dMCh4fFgpPHZhcj5oZXhkaWdpdHM8L3Zhcj5bLls8dmFyPmhleGRpZ2l0czwvdmFyPl1dWyhwfFApWyt8LV08dmFyPmRpZ2l0czwvdmFyPl0KKyAgICAgWyt8LV0wKHh8WCkuPHZhcj5oZXhkaWdpdHM8L3Zhcj5bKHB8UClbK3wtXTx2YXI+ZGlnaXRzPC92YXI+XQorPC9wcmU+CisgICA8cD5UaGUgc3Vic3RyaW5nIGNvbnRhaW5zIG5vIGNoYXJhY3RlcnMgaWYgPHZhcj5zdHI8L3Zhcj4gaXMgZW1wdHksIGNvbnNpc3RzCitlbnRpcmVseSBvZiB3aGl0ZXNwYWNlLCBvciBpZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UKK2NoYXJhY3RlciBpcyBzb21ldGhpbmcgb3RoZXIgdGhhbiA8Y29kZT4rPC9jb2RlPiwgPGNvZGU+LTwvY29kZT4sIDxjb2RlPi48L2NvZGU+LCBvciBhCitkaWdpdCwgYW5kIGNhbm5vdCBiZSBwYXJzZWQgYXMgaW5maW5pdHkgb3IgTmFOLiBJZiB0aGUgcGxhdGZvcm0KK2RvZXMgbm90IHN1cHBvcnQgTmFOLCB0aGVuIE5hTiBpcyB0cmVhdGVkIGFzIGFuIGVtcHR5IHN1YnN0cmluZy4gCitJZiB0aGUgc3Vic3RyaW5nIGlzIGVtcHR5LCBubyBjb252ZXJzaW9uIGlzIGRvbmUsIGFuZAordGhlIHZhbHVlIG9mIDx2YXI+c3RyPC92YXI+IGlzIHN0b3JlZCBpbiA8Y29kZT4qPC9jb2RlPjx2YXI+dGFpbDwvdmFyPi4gIE90aGVyd2lzZSwKK3RoZSBzdWJzdHJpbmcgaXMgY29udmVydGVkLCBhbmQgYSBwb2ludGVyIHRvIHRoZSBmaW5hbCBzdHJpbmcKKyh3aGljaCB3aWxsIGNvbnRhaW4gYXQgbGVhc3QgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyIG9mCis8dmFyPnN0cjwvdmFyPikgaXMgc3RvcmVkIGluIDxjb2RlPio8L2NvZGU+PHZhcj50YWlsPC92YXI+LiAgSWYgeW91IHdhbnQgbm8KK2Fzc2lnbm1lbnQgdG8gPGNvZGU+KjwvY29kZT48dmFyPnRhaWw8L3Zhcj4sIHBhc3MgYSBudWxsIHBvaW50ZXIgYXMgPHZhcj50YWlsPC92YXI+LiAKKzxjb2RlPndjc3RvZjwvY29kZT4gaXMgaWRlbnRpY2FsIHRvIDxjb2RlPndjc3RvZDwvY29kZT4gZXhjZXB0IGZvciBpdHMgcmV0dXJuIHR5cGUuCisKKyAgIDxwPlRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgbmVhcmVzdCBtYWNoaW5lIG51bWJlciB0byB0aGUKK2lucHV0IGRlY2ltYWwgc3RyaW5nLiAgVGllcyBhcmUgYnJva2VuIGJ5IHVzaW5nIHRoZSBJRUVFCityb3VuZC1ldmVuIHJ1bGUuICBIb3dldmVyLCA8Y29kZT53Y3N0b2Y8L2NvZGU+IGlzIGN1cnJlbnRseSBzdWJqZWN0IHRvCitkb3VibGUgcm91bmRpbmcgZXJyb3JzLgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9ucyA8Y29kZT5fd2NzdG9kX3I8L2NvZGU+IGFuZCA8Y29kZT5fd2NzdG9mX3I8L2NvZGU+IGFyZQorcmVlbnRyYW50IHZlcnNpb25zIG9mIDxjb2RlPndjc3RvZDwvY29kZT4gYW5kIDxjb2RlPndjc3RvZjwvY29kZT4sIHJlc3BlY3RpdmVseS4gCitUaGUgZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorUmV0dXJuIHRoZSBjb252ZXJ0ZWQgc3Vic3RyaW5nIHZhbHVlLCBpZiBhbnkuICBJZgorbm8gY29udmVyc2lvbiBjb3VsZCBiZSBwZXJmb3JtZWQsIDAgaXMgcmV0dXJuZWQuICBJZiB0aGUKK2NvcnJlY3QgdmFsdWUgaXMgb3V0IG9mIHRoZSByYW5nZSBvZiByZXByZXNlbnRhYmxlIHZhbHVlcywKK3BsdXMgb3IgbWludXMgPGNvZGU+SFVHRV9WQUw8L2NvZGU+IGlzIHJldHVybmVkLCBhbmQgPGNvZGU+RVJBTkdFPC9jb2RlPiBpcworc3RvcmVkIGluIGVycm5vLiBJZiB0aGUgY29ycmVjdCB2YWx1ZSB3b3VsZCBjYXVzZSB1bmRlcmZsb3csIDAKK2lzIHJldHVybmVkIGFuZCA8Y29kZT5FUkFOR0U8L2NvZGU+IGlzIHN0b3JlZCBpbiBlcnJuby4KKworICAgPHA+U3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyByZXF1aXJlZDogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sIDxjb2RlPmlzYXR0eTwvY29kZT4sCis8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3Rvay5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzdG9rLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwNmRiYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3Rvay5odG1sCkBAIC0wLDAgKzEsODYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjc3RvayAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2Nzc3RyLmh0bWwjd2Nzc3RyIiB0aXRsZT0id2Nzc3RyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2Nzd2lkdGguaHRtbCN3Y3N3aWR0aCIgdGl0bGU9Indjc3dpZHRoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3N0b2siPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2Nzd2lkdGguaHRtbCN3Y3N3aWR0aCI+d2Nzd2lkdGg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3NzdHIuaHRtbCN3Y3NzdHIiPndjc3N0cjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4yNiA8Y29kZT53Y3N0b2s8L2NvZGU+Jm1kYXNoO2dldCBuZXh0IHRva2VuIGZyb20gYSBzdHJpbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13Y3N0b2stNDE5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdCAqd2NzdG9rKHdjaGFyX3QgKjx2YXI+c291cmNlPC92YXI+LCBjb25zdCB3Y2hhcl90ICo8dmFyPmRlbGltaXRlcnM8L3Zhcj4sCisgICAgICAgICB3Y2hhcl90ICoqPHZhcj5sYXN0czwvdmFyPikKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2NzdG9rPC9jb2RlPiBmdW5jdGlvbiBpcyB0aGUgd2lkZS1jaGFyYWN0ZXIgZXF1aXZhbGVudCBvZiB0aGUKKzxjb2RlPnN0cnRva19yPC9jb2RlPiBmdW5jdGlvbiAod2hpY2ggaW4gdHVybiBpcyB0aGUgc2FtZSBhcyB0aGUgPGNvZGU+c3RydG9rPC9jb2RlPgorZnVuY3Rpb24gd2l0aCBhbiBhZGRlZCBhcmd1bWVudCB0byBtYWtlIGl0IHRocmVhZC1zYWZlKS4KKworICAgPHA+VGhlIDxjb2RlPndjc3RvazwvY29kZT4gZnVuY3Rpb24gaXMgdXNlZCB0byBpc29sYXRlIChvbmUgYXQgYSB0aW1lKQorc2VxdWVudGlhbCB0b2tlbnMgaW4gYSBudWxsLXRlcm1pbmF0ZWQgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nLAorPGNvZGU+KjwvY29kZT48dmFyPnNvdXJjZTwvdmFyPi4gIEEgdG9rZW4gaXMgZGVmaW5lZCBhcyBhIHN1YnN0cmluZyBub3QgY29udGFpbmluZworYW55IHdpZGUtY2hhcmFjdGVycyBmcm9tIDxjb2RlPio8L2NvZGU+PHZhcj5kZWxpbWl0ZXJzPC92YXI+LgorCisgICA8cD5UaGUgZmlyc3QgdGltZSB0aGF0IDxjb2RlPndjc3RvazwvY29kZT4gaXMgY2FsbGVkLCA8Y29kZT4qPC9jb2RlPjx2YXI+c291cmNlPC92YXI+IHNob3VsZAorYmUgc3BlY2lmaWVkIHdpdGggdGhlIHdpZGUtY2hhcmFjdGVyIHN0cmluZyB0byBiZSBzZWFyY2hlZCwgYW5kCis8Y29kZT4qPC9jb2RlPjx2YXI+bGFzdHM8L3Zhcj4mbmRhc2g7YnV0IG5vdCA8Y29kZT5sYXN0czwvY29kZT4sIHdoaWNoIG11c3QgYmUgbm9uLU5VTEwmbmRhc2g7bWF5IGJlCityYW5kb207IHN1YnNlcXVlbnQgY2FsbHMsIHdpc2hpbmcgdG8gb2J0YWluIGZ1cnRoZXIgdG9rZW5zIGZyb20KK3RoZSBzYW1lIHN0cmluZywgc2hvdWxkIHBhc3MgYSBudWxsIHBvaW50ZXIgZm9yIDxjb2RlPio8L2NvZGU+PHZhcj5zb3VyY2U8L3Zhcj4KK2luc3RlYWQgYnV0IG11c3Qgc3VwcGx5IDxjb2RlPio8L2NvZGU+PHZhcj5sYXN0czwvdmFyPiB1bmNoYW5nZWQgZnJvbSB0aGUgbGFzdAorY2FsbC4gIFRoZSBzZXBhcmF0b3Igd2lkZS1jaGFyYWN0ZXIgc3RyaW5nLCA8Y29kZT4qPC9jb2RlPjx2YXI+ZGVsaW1pdGVyczwvdmFyPiwKK211c3QgYmUgc3VwcGxpZWQgZWFjaCB0aW1lIGFuZCBtYXkgY2hhbmdlIGJldHdlZW4gY2FsbHMuIAorQSBwb2ludGVyIHRvIHBsYWNlaG9sZGVyIDxjb2RlPio8L2NvZGU+PHZhcj5sYXN0czwvdmFyPiBtdXN0IGJlIHN1cHBsaWVkIGJ5Cit0aGUgY2FsbGVyLCBhbmQgaXMgc2V0IGVhY2ggdGltZSBhcyBuZWVkZWQgdG8gc2F2ZSB0aGUgc3RhdGUKK2J5IDxjb2RlPndjc3RvazwvY29kZT4uCUV2ZXJ5IGNhbGwgdG8gPGNvZGU+d2NzdG9rPC9jb2RlPiB3aXRoIDxjb2RlPio8L2NvZGU+PHZhcj5zb3VyY2U8L3Zhcj4KKz09IDxjb2RlPk5VTEw8L2NvZGU+IG11c3QgcGFzcyB0aGUgdmFsdWUgb2YgPGNvZGU+KjwvY29kZT48dmFyPmxhc3RzPC92YXI+IGFzIGxhc3Qgc2V0CitieSA8Y29kZT53Y3N0b2s8L2NvZGU+LgorCisgICA8cD5UaGUgPGNvZGU+d2NzdG9rPC9jb2RlPiBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIGVhY2gKK3N1YnNlcXVlbnQgdG9rZW4gaW4gdGhlIHN0cmluZywgYWZ0ZXIgcmVwbGFjaW5nIHRoZSBzZXBhcmF0b3IKK3dpZGUtY2hhcmFjdGVyIGl0c2VsZiB3aXRoIGEgbnVsbCB3aWRlLWNoYXJhY3Rlci4gIFdoZW4gbm8gbW9yZSB0b2tlbnMKK3JlbWFpbiwgYSBudWxsIHBvaW50ZXIgaXMgcmV0dXJuZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPndjc3RvazwvY29kZT4gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHdpZGUgY2hhcmFjdGVyIG9mIGEgdG9rZW4sIG9yCis8Y29kZT5OVUxMPC9jb2RlPiBpZiB0aGVyZSBpcyBubyB0b2tlbi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjc3RvazwvY29kZT4gaXMgQzk5IGFuZCBQT1NJWC4xLTIwMDEuCisKKyAgIDxwPjxjb2RlPndjc3RvazwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b2wuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3RvbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZmQ3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b2wuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzdG9sIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3N0b2QuaHRtbCN3Y3N0b2QiIHRpdGxlPSJ3Y3N0b2QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3N0b2xsLmh0bWwjd2NzdG9sbCIgdGl0bGU9Indjc3RvbGwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc3RvbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3N0b2xsLmh0bWwjd2NzdG9sbCI+d2NzdG9sbDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc3RvZC5odG1sI3djc3RvZCI+d2NzdG9kPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjQxIDxjb2RlPndjc3RvbDwvY29kZT4mbWRhc2g7d2lkZSBzdHJpbmcgdG8gbG9uZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc3RvbC05OCI+PC9hPjxhIG5hbWU9ImluZGV4LWdfdF8wMDVmd2NzdG9sXzAwNWZyLTk5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgbG9uZyB3Y3N0b2woY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+LCB3Y2hhcl90ICoqPHZhcj5wdHI8L3Zhcj4saW50IDx2YXI+YmFzZTwvdmFyPik7CisgICAgIAorICAgICBsb25nIF93Y3N0b2xfcih2b2lkICo8dmFyPnJlZW50PC92YXI+LAorICAgICAgICAgY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+LCB3Y2hhcl90ICoqPHZhcj5wdHI8L3Zhcj4saW50IDx2YXI+YmFzZTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIGZ1bmN0aW9uIDxjb2RlPndjc3RvbDwvY29kZT4gY29udmVydHMgdGhlIHdpZGUgc3RyaW5nIDxjb2RlPio8L2NvZGU+PHZhcj5zPC92YXI+IHRvCithIDxjb2RlPmxvbmc8L2NvZGU+LiBGaXJzdCwgaXQgYnJlYWtzIGRvd24gdGhlIHN0cmluZyBpbnRvIHRocmVlIHBhcnRzOgorbGVhZGluZyB3aGl0ZXNwYWNlLCB3aGljaCBpcyBpZ25vcmVkOyBhIHN1YmplY3Qgc3RyaW5nIGNvbnNpc3RpbmcKK29mIGNoYXJhY3RlcnMgcmVzZW1ibGluZyBhbiBpbnRlZ2VyIGluIHRoZSByYWRpeCBzcGVjaWZpZWQgYnkgPHZhcj5iYXNlPC92YXI+OworYW5kIGEgdHJhaWxpbmcgcG9ydGlvbiBjb25zaXN0aW5nIG9mIHplcm8gb3IgbW9yZSB1bnBhcnNlYWJsZSBjaGFyYWN0ZXJzLAorYW5kIGFsd2F5cyBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLiBUaGVuLCBpdCBhdHRlbXB0cwordG8gY29udmVydCB0aGUgc3ViamVjdCBzdHJpbmcgaW50byBhIDxjb2RlPmxvbmc8L2NvZGU+IGFuZCByZXR1cm5zIHRoZQorcmVzdWx0LgorCisgICA8cD5JZiB0aGUgdmFsdWUgb2YgPHZhcj5iYXNlPC92YXI+IGlzIDAsIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBleHBlY3RlZCB0byBsb29rCitsaWtlIGEgbm9ybWFsIEMgaW50ZWdlciBjb25zdGFudDogYW4gb3B0aW9uYWwgc2lnbiwgYSBwb3NzaWJsZSBgPGNvZGU+MHg8L2NvZGU+JworaW5kaWNhdGluZyBhIGhleGFkZWNpbWFsIGJhc2UsIGFuZCBhIG51bWJlci4gSWYgPHZhcj5iYXNlPC92YXI+IGlzIGJldHdlZW4KKzIgYW5kIDM2LCB0aGUgZXhwZWN0ZWQgZm9ybSBvZiB0aGUgc3ViamVjdCBpcyBhIHNlcXVlbmNlIG9mIGxldHRlcnMKK2FuZCBkaWdpdHMgcmVwcmVzZW50aW5nIGFuIGludGVnZXIgaW4gdGhlIHJhZGl4IHNwZWNpZmllZCBieSA8dmFyPmJhc2U8L3Zhcj4sCit3aXRoIGFuIG9wdGlvbmFsIHBsdXMgb3IgbWludXMgc2lnbi4gVGhlIGxldHRlcnMgPGNvZGU+YTwvY29kZT4mbmRhc2g7PGNvZGU+ejwvY29kZT4gKG9yLAorZXF1aXZhbGVudGx5LCA8Y29kZT5BPC9jb2RlPiZuZGFzaDs8Y29kZT5aPC9jb2RlPikgYXJlIHVzZWQgdG8gc2lnbmlmeSB2YWx1ZXMgZnJvbSAxMCB0byAzNTsKK29ubHkgbGV0dGVycyB3aG9zZSBhc2NyaWJlZCB2YWx1ZXMgYXJlIGxlc3MgdGhhbiA8dmFyPmJhc2U8L3Zhcj4gYXJlCitwZXJtaXR0ZWQuIElmIDx2YXI+YmFzZTwvdmFyPiBpcyAxNiwgYSBsZWFkaW5nIDxjb2RlPjB4PC9jb2RlPiBpcyBwZXJtaXR0ZWQuCisKKyAgIDxwPlRoZSBzdWJqZWN0IHNlcXVlbmNlIGlzIHRoZSBsb25nZXN0IGluaXRpYWwgc2VxdWVuY2Ugb2YgdGhlIGlucHV0CitzdHJpbmcgdGhhdCBoYXMgdGhlIGV4cGVjdGVkIGZvcm0sIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0Citub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuICBJZiB0aGUgc3RyaW5nIGlzIGVtcHR5IG9yIGNvbnNpc3RzIGVudGlyZWx5CitvZiB3aGl0ZXNwYWNlLCBvciBpZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCBhCitwZXJtaXNzaWJsZSBsZXR0ZXIgb3IgZGlnaXQsIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBlbXB0eS4KKworICAgPHA+SWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGFjY2VwdGFibGUsIGFuZCB0aGUgdmFsdWUgb2YgPHZhcj5iYXNlPC92YXI+IGlzIHplcm8sCis8Y29kZT53Y3N0b2w8L2NvZGU+IGF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgcmFkaXggZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiBBCitzdHJpbmcgd2l0aCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHRyZWF0ZWQgYXMgYSBoZXhhZGVjaW1hbCB2YWx1ZTsgYSBzdHJpbmcgd2l0aAorYSBsZWFkaW5nIDAgYW5kIG5vIDxjb2RlPng8L2NvZGU+IGlzIHRyZWF0ZWQgYXMgb2N0YWw7IGFsbCBvdGhlciBzdHJpbmdzIGFyZQordHJlYXRlZCBhcyBkZWNpbWFsLiBJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgYmV0d2VlbiAyIGFuZCAzNiwgaXQgaXMgdXNlZCBhcyB0aGUKK2NvbnZlcnNpb24gcmFkaXgsIGFzIGRlc2NyaWJlZCBhYm92ZS4gSWYgdGhlIHN1YmplY3Qgc3RyaW5nIGJlZ2lucyB3aXRoCithIG1pbnVzIHNpZ24sIHRoZSB2YWx1ZSBpcyBuZWdhdGVkLiBGaW5hbGx5LCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0CitjaGFyYWN0ZXIgcGFzdCB0aGUgY29udmVydGVkIHN1YmplY3Qgc3RyaW5nIGlzIHN0b3JlZCBpbiA8dmFyPnB0cjwvdmFyPiwgaWYKKzx2YXI+cHRyPC92YXI+IGlzIG5vdCA8Y29kZT5OVUxMPC9jb2RlPi4KKworICAgPHA+SWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5IChvciBub3QgaW4gYWNjZXB0YWJsZSBmb3JtKSwgbm8gY29udmVyc2lvbgoraXMgcGVyZm9ybWVkIGFuZCB0aGUgdmFsdWUgb2YgPHZhcj5zPC92YXI+IGlzIHN0b3JlZCBpbiA8dmFyPnB0cjwvdmFyPiAoaWYgPHZhcj5wdHI8L3Zhcj4gaXMKK25vdCA8Y29kZT5OVUxMPC9jb2RlPikuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X3djc3RvbF9yPC9jb2RlPiBpcyBhIHJlZW50cmFudCB2ZXJzaW9uLiAgVGhlCitleHRyYSBhcmd1bWVudCA8dmFyPnJlZW50PC92YXI+IGlzIGEgcG9pbnRlciB0byBhIHJlZW50cmFuY3kgc3RydWN0dXJlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3N0b2w8L2NvZGU+IHJldHVybnMgdGhlIGNvbnZlcnRlZCB2YWx1ZSwgaWYgYW55LiBJZiBubyBjb252ZXJzaW9uIHdhcworbWFkZSwgMCBpcyByZXR1cm5lZC4KKworICAgPHA+PGNvZGU+d2NzdG9sPC9jb2RlPiByZXR1cm5zIDxjb2RlPkxPTkdfTUFYPC9jb2RlPiBvciA8Y29kZT5MT05HX01JTjwvY29kZT4gaWYgdGhlIG1hZ25pdHVkZSBvZgordGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyB0b28gbGFyZ2UsIGFuZCBzZXRzIDxjb2RlPmVycm5vPC9jb2RlPiB0byA8Y29kZT5FUkFOR0U8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzdG9sPC9jb2RlPiBpcyBBTlNJLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b2xsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBkYWM0MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3RvbGwuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzdG9sbCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2NzdG9sLmh0bWwjd2NzdG9sIiB0aXRsZT0id2NzdG9sIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2NzdG91bC5odG1sI3djc3RvdWwiIHRpdGxlPSJ3Y3N0b3VsIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3N0b2xsIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Indjc3RvdWwuaHRtbCN3Y3N0b3VsIj53Y3N0b3VsPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0id2NzdG9sLmh0bWwjd2NzdG9sIj53Y3N0b2w8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuNDIgPGNvZGU+d2NzdG9sbDwvY29kZT4mbWRhc2g7d2lkZSBzdHJpbmcgdG8gbG9uZyBsb25nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtd2NzdG9sbC0xMDAiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zndjc3RvbGxfMDA1ZnItMTAxIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgbG9uZyBsb25nIHdjc3RvbGwoY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+LCB3Y2hhcl90ICoqPHZhcj5wdHI8L3Zhcj4saW50IDx2YXI+YmFzZTwvdmFyPik7CisgICAgIAorICAgICBsb25nIGxvbmcgX3djc3RvbGxfcih2b2lkICo8dmFyPnJlZW50PC92YXI+LAorICAgICAgICAgY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+LCB3Y2hhcl90ICoqPHZhcj5wdHI8L3Zhcj4saW50IDx2YXI+YmFzZTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIGZ1bmN0aW9uIDxjb2RlPndjc3RvbGw8L2NvZGU+IGNvbnZlcnRzIHRoZSB3aWRlIHN0cmluZyA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiB0bworYSA8Y29kZT5sb25nIGxvbmc8L2NvZGU+LiBGaXJzdCwgaXQgYnJlYWtzIGRvd24gdGhlIHN0cmluZyBpbnRvIHRocmVlIHBhcnRzOgorbGVhZGluZyB3aGl0ZXNwYWNlLCB3aGljaCBpcyBpZ25vcmVkOyBhIHN1YmplY3Qgc3RyaW5nIGNvbnNpc3RpbmcKK29mIGNoYXJhY3RlcnMgcmVzZW1ibGluZyBhbiBpbnRlZ2VyIGluIHRoZSByYWRpeCBzcGVjaWZpZWQgYnkgPHZhcj5iYXNlPC92YXI+OworYW5kIGEgdHJhaWxpbmcgcG9ydGlvbiBjb25zaXN0aW5nIG9mIHplcm8gb3IgbW9yZSB1bnBhcnNlYWJsZSBjaGFyYWN0ZXJzLAorYW5kIGFsd2F5cyBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLiBUaGVuLCBpdCBhdHRlbXB0cwordG8gY29udmVydCB0aGUgc3ViamVjdCBzdHJpbmcgaW50byBhIDxjb2RlPmxvbmcgbG9uZzwvY29kZT4gYW5kIHJldHVybnMgdGhlCityZXN1bHQuCisKKyAgIDxwPklmIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgMCwgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGxvb2sKK2xpa2UgYSBub3JtYWwgQyBpbnRlZ2VyIGNvbnN0YW50OiBhbiBvcHRpb25hbCBzaWduLCBhIHBvc3NpYmxlIGA8Y29kZT4weDwvY29kZT4nCitpbmRpY2F0aW5nIGEgaGV4YWRlY2ltYWwgYmFzZSwgYW5kIGEgbnVtYmVyLiBJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgYmV0d2VlbgorMiBhbmQgMzYsIHRoZSBleHBlY3RlZCBmb3JtIG9mIHRoZSBzdWJqZWN0IGlzIGEgc2VxdWVuY2Ugb2YgbGV0dGVycworYW5kIGRpZ2l0cyByZXByZXNlbnRpbmcgYW4gaW50ZWdlciBpbiB0aGUgcmFkaXggc3BlY2lmaWVkIGJ5IDx2YXI+YmFzZTwvdmFyPiwKK3dpdGggYW4gb3B0aW9uYWwgcGx1cyBvciBtaW51cyBzaWduLiBUaGUgbGV0dGVycyA8Y29kZT5hPC9jb2RlPiZuZGFzaDs8Y29kZT56PC9jb2RlPiAob3IsCitlcXVpdmFsZW50bHksIDxjb2RlPkE8L2NvZGU+Jm5kYXNoOzxjb2RlPlo8L2NvZGU+KSBhcmUgdXNlZCB0byBzaWduaWZ5IHZhbHVlcyBmcm9tIDEwIHRvIDM1Oworb25seSBsZXR0ZXJzIHdob3NlIGFzY3JpYmVkIHZhbHVlcyBhcmUgbGVzcyB0aGFuIDx2YXI+YmFzZTwvdmFyPiBhcmUKK3Blcm1pdHRlZC4gSWYgPHZhcj5iYXNlPC92YXI+IGlzIDE2LCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHBlcm1pdHRlZC4KKworICAgPHA+VGhlIHN1YmplY3Qgc2VxdWVuY2UgaXMgdGhlIGxvbmdlc3QgaW5pdGlhbCBzZXF1ZW5jZSBvZiB0aGUgaW5wdXQKK3N0cmluZyB0aGF0IGhhcyB0aGUgZXhwZWN0ZWQgZm9ybSwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QKK25vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci4gIElmIHRoZSBzdHJpbmcgaXMgZW1wdHkgb3IgY29uc2lzdHMgZW50aXJlbHkKK29mIHdoaXRlc3BhY2UsIG9yIGlmIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgbm90IGEKK3Blcm1pc3NpYmxlIGxldHRlciBvciBkaWdpdCwgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5LgorCisgICA8cD5JZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgYWNjZXB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgemVybywKKzxjb2RlPndjc3RvbGw8L2NvZGU+IGF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgcmFkaXggZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiBBCitzdHJpbmcgd2l0aCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHRyZWF0ZWQgYXMgYSBoZXhhZGVjaW1hbCB2YWx1ZTsgYSBzdHJpbmcgd2l0aAorYSBsZWFkaW5nIDAgYW5kIG5vIDxjb2RlPng8L2NvZGU+IGlzIHRyZWF0ZWQgYXMgb2N0YWw7IGFsbCBvdGhlciBzdHJpbmdzIGFyZQordHJlYXRlZCBhcyBkZWNpbWFsLiBJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgYmV0d2VlbiAyIGFuZCAzNiwgaXQgaXMgdXNlZCBhcyB0aGUKK2NvbnZlcnNpb24gcmFkaXgsIGFzIGRlc2NyaWJlZCBhYm92ZS4gSWYgdGhlIHN1YmplY3Qgc3RyaW5nIGJlZ2lucyB3aXRoCithIG1pbnVzIHNpZ24sIHRoZSB2YWx1ZSBpcyBuZWdhdGVkLiBGaW5hbGx5LCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0CitjaGFyYWN0ZXIgcGFzdCB0aGUgY29udmVydGVkIHN1YmplY3Qgc3RyaW5nIGlzIHN0b3JlZCBpbiA8dmFyPnB0cjwvdmFyPiwgaWYKKzx2YXI+cHRyPC92YXI+IGlzIG5vdCA8Y29kZT5OVUxMPC9jb2RlPi4KKworICAgPHA+SWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5IChvciBub3QgaW4gYWNjZXB0YWJsZSBmb3JtKSwgbm8gY29udmVyc2lvbgoraXMgcGVyZm9ybWVkIGFuZCB0aGUgdmFsdWUgb2YgPHZhcj5zPC92YXI+IGlzIHN0b3JlZCBpbiA8dmFyPnB0cjwvdmFyPiAoaWYgPHZhcj5wdHI8L3Zhcj4gaXMKK25vdCA8Y29kZT5OVUxMPC9jb2RlPikuCisKKyAgIDxwPlRoZSBhbHRlcm5hdGUgZnVuY3Rpb24gPGNvZGU+X3djc3RvbGxfcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbi4gIFRoZQorZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzdG9sbDwvY29kZT4gcmV0dXJucyB0aGUgY29udmVydGVkIHZhbHVlLCBpZiBhbnkuIElmIG5vIGNvbnZlcnNpb24gd2FzCittYWRlLCAwIGlzIHJldHVybmVkLgorCisgICA8cD48Y29kZT53Y3N0b2xsPC9jb2RlPiByZXR1cm5zIDxjb2RlPkxPTkdfTE9OR19NQVg8L2NvZGU+IG9yIDxjb2RlPkxPTkdfTE9OR19NSU48L2NvZGU+IGlmIHRoZSBtYWduaXR1ZGUgb2YKK3RoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgdG9vIGxhcmdlLCBhbmQgc2V0cyA8Y29kZT5lcnJubzwvY29kZT4gdG8gPGNvZGU+RVJBTkdFPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjc3RvbGw8L2NvZGU+IGlzIEFOU0kuCisKKyAgIDxwPk5vIHN1cHBvcnRpbmcgT1Mgc3Vicm91dGluZXMgYXJlIHJlcXVpcmVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3RvbWJzLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b21icy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjU0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b21icy5odG1sCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjc3RvbWJzIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzeXN0ZW0uaHRtbCNzeXN0ZW0iIHRpdGxlPSJzeXN0ZW0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3RvbWIuaHRtbCN3Y3RvbWIiIHRpdGxlPSJ3Y3RvbWIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc3RvbWJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IndjdG9tYi5odG1sI3djdG9tYiI+d2N0b21iPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic3lzdGVtLmh0bWwjc3lzdGVtIj5zeXN0ZW08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiPlN0ZGxpYjwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuNDYgPGNvZGU+d2NzdG9tYnM8L2NvZGU+Jm1kYXNoO21pbmltYWwgd2lkZSBjaGFyIHN0cmluZyB0byBtdWx0aWJ5dGUgc3RyaW5nIGNvbnZlcnRlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc3RvbWJzLTEwOCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OworICAgICBzaXplX3Qgd2NzdG9tYnMoY2hhciAqPHZhcj5zPC92YXI+LCBjb25zdCB3Y2hhcl90ICo8dmFyPnB3YzwvdmFyPiwgc2l6ZV90IDx2YXI+bjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorV2hlbiBfTUJfQ0FQQUJMRSBpcyBub3QgZGVmaW5lZCwgdGhpcyBpcyBhIG1pbmltYWwgQU5TSS1jb25mb3JtaW5nCitpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT53Y3N0b21iczwvY29kZT4uICBJbiB0aGlzIGNhc2UsCithbGwgd2lkZS1jaGFyYWN0ZXJzIGFyZSBleHBlY3RlZCB0byByZXByZXNlbnQgc2luZ2xlIGJ5dGVzIGFuZCBzbworYXJlIGNvbnZlcnRlZCBzaW1wbHkgYnkgY2FzdGluZyB0byBjaGFyLgorCisgICA8cD5XaGVuIF9NQl9DQVBBQkxFIGlzIGRlZmluZWQsIHRoaXMgcm91dGluZSBjYWxscyA8Y29kZT5fd2NzdG9tYnNfcjwvY29kZT4gdG8gcGVyZm9ybQordGhlIGNvbnZlcnNpb24sIHBhc3NpbmcgYSBzdGF0ZSB2YXJpYWJsZSB0byBhbGxvdyBzdGF0ZSBkZXBlbmRlbnQKK2RlY29kaW5nLiAgVGhlIHJlc3VsdCBpcyBiYXNlZCBvbiB0aGUgbG9jYWxlIHNldHRpbmcgd2hpY2ggbWF5CitiZSByZXN0cmljdGVkIHRvIGEgZGVmaW5lZCBzZXQgb2YgbG9jYWxlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT53Y3N0b21iczwvY29kZT4gcmV0dXJucyA8Y29kZT4wPC9jb2RlPiBpZgorPHZhcj5zPC92YXI+IGlzIDxjb2RlPk5VTEw8L2NvZGU+IG9yIGlzIHRoZSBlbXB0eSBzdHJpbmc7CitpdCByZXR1cm5zIDxjb2RlPi0xPC9jb2RlPiBpZiBfTUJfQ0FQQUJMRSBhbmQgb25lIG9mIHRoZQord2lkZS1jaGFyIGNoYXJhY3RlcnMgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsaWQgbXVsdGktYnl0ZSBjaGFyYWN0ZXI7CitvdGhlcndpc2UgaXQgcmV0dXJucyB0aGUgbWluaW11bSBvZjogPGNvZGU+bjwvY29kZT4gb3IgdGhlCitudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgdHJhbnNmZXJyZWQgdG8gPGNvZGU+czwvY29kZT4sIG5vdCBpbmNsdWRpbmcgdGhlCitudWwgdGVybWluYXRvci4KKworICAgPHA+SWYgdGhlIHJldHVybiB2YWx1ZSBpcyAtMSwgdGhlIHN0YXRlIG9mIHRoZSA8Y29kZT5wd2M8L2NvZGU+IHN0cmluZyBpcworaW5kZXRlcm1pbmF0ZS4gIElmIHRoZSBpbnB1dCBoYXMgYSBsZW5ndGggb2YgMCwgdGhlIG91dHB1dAorc3RyaW5nIHdpbGwgYmUgbW9kaWZpZWQgdG8gY29udGFpbiBhIHdjaGFyX3QgbnVsIHRlcm1pbmF0b3IgaWYKKzxjb2RlPm48L2NvZGU+ICZndDsgMC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjc3RvbWJzPC9jb2RlPiBpcyByZXF1aXJlZCBpbiB0aGUgQU5TSSBDIHN0YW5kYXJkLiAgSG93ZXZlciwgdGhlIHByZWNpc2UKK2VmZmVjdHMgdmFyeSB3aXRoIHRoZSBsb2NhbGUuCisKKyAgIDxwPjxjb2RlPndjc3RvbWJzPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3RvdWwuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3RvdWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzUwNzRjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzdG91bC5odG1sCkBAIC0wLDAgKzEsMTA2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3N0b3VsIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3N0b2xsLmh0bWwjd2NzdG9sbCIgdGl0bGU9Indjc3RvbGwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3N0b3VsbC5odG1sI3djc3RvdWxsIiB0aXRsZT0id2NzdG91bGwiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjc3RvdWwiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzdG91bGwuaHRtbCN3Y3N0b3VsbCI+d2NzdG91bGw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3N0b2xsLmh0bWwjd2NzdG9sbCI+d2NzdG9sbDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IlN0ZGxpYi5odG1sI1N0ZGxpYiI+U3RkbGliPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi40MyA8Y29kZT53Y3N0b3VsPC9jb2RlPiZtZGFzaDt3aWRlIHN0cmluZyB0byB1bnNpZ25lZCBsb25nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtd2NzdG91bC0xMDIiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zndjc3RvdWxfMDA1ZnItMTAzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgdW5zaWduZWQgbG9uZyB3Y3N0b3VsKGNvbnN0IHdjaGFyX3QgKjx2YXI+czwvdmFyPiwgd2NoYXJfdCAqKjx2YXI+cHRyPC92YXI+LAorICAgICAgICAgaW50IDx2YXI+YmFzZTwvdmFyPik7CisgICAgIAorICAgICB1bnNpZ25lZCBsb25nIF93Y3N0b3VsX3Iodm9pZCAqPHZhcj5yZWVudDwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+LAorICAgICAgICAgd2NoYXJfdCAqKjx2YXI+cHRyPC92YXI+LCBpbnQgPHZhcj5iYXNlPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgZnVuY3Rpb24gPGNvZGU+d2NzdG91bDwvY29kZT4gY29udmVydHMgdGhlIHdpZGUgc3RyaW5nIDxjb2RlPio8L2NvZGU+PHZhcj5zPC92YXI+IHRvCithbiA8Y29kZT51bnNpZ25lZCBsb25nPC9jb2RlPi4gRmlyc3QsIGl0IGJyZWFrcyBkb3duIHRoZSBzdHJpbmcgaW50byB0aHJlZSBwYXJ0czoKK2xlYWRpbmcgd2hpdGVzcGFjZSwgd2hpY2ggaXMgaWdub3JlZDsgYSBzdWJqZWN0IHN0cmluZyBjb25zaXN0aW5nCitvZiB0aGUgZGlnaXRzIG1lYW5pbmdmdWwgaW4gdGhlIHJhZGl4IHNwZWNpZmllZCBieSA8dmFyPmJhc2U8L3Zhcj4KKyhmb3IgZXhhbXBsZSwgPGNvZGU+MDwvY29kZT4gdGhyb3VnaCA8Y29kZT43PC9jb2RlPiBpZiB0aGUgdmFsdWUgb2YgPHZhcj5iYXNlPC92YXI+IGlzIDgpOworYW5kIGEgdHJhaWxpbmcgcG9ydGlvbiBjb25zaXN0aW5nIG9mIG9uZSBvciBtb3JlIHVucGFyc2VhYmxlIGNoYXJhY3RlcnMsCit3aGljaCBhbHdheXMgaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLiBUaGVuLCBpdCBhdHRlbXB0cwordG8gY29udmVydCB0aGUgc3ViamVjdCBzdHJpbmcgaW50byBhbiB1bnNpZ25lZCBsb25nIGludGVnZXIsIGFuZCByZXR1cm5zIHRoZQorcmVzdWx0LgorCisgICA8cD5JZiB0aGUgdmFsdWUgb2YgPHZhcj5iYXNlPC92YXI+IGlzIHplcm8sIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBleHBlY3RlZCB0byBsb29rCitsaWtlIGEgbm9ybWFsIEMgaW50ZWdlciBjb25zdGFudCAoc2F2ZSB0aGF0IG5vIG9wdGlvbmFsIHNpZ24gaXMgcGVybWl0dGVkKToKK2EgcG9zc2libGUgPGNvZGU+MHg8L2NvZGU+IGluZGljYXRpbmcgaGV4YWRlY2ltYWwgcmFkaXgsIGFuZCBhIG51bWJlci4gCitJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgYmV0d2VlbiAyIGFuZCAzNiwgdGhlIGV4cGVjdGVkIGZvcm0gb2YgdGhlIHN1YmplY3QgaXMgYQorc2VxdWVuY2Ugb2YgZGlnaXRzICh3aGljaCBtYXkgaW5jbHVkZSBsZXR0ZXJzLCBkZXBlbmRpbmcgb24gdGhlCitiYXNlKSByZXByZXNlbnRpbmcgYW4gaW50ZWdlciBpbiB0aGUgcmFkaXggc3BlY2lmaWVkIGJ5IDx2YXI+YmFzZTwvdmFyPi4gCitUaGUgbGV0dGVycyA8Y29kZT5hPC9jb2RlPiZuZGFzaDs8Y29kZT56PC9jb2RlPiAob3IgPGNvZGU+QTwvY29kZT4mbmRhc2g7PGNvZGU+WjwvY29kZT4pIGFyZSB1c2VkIGFzIGRpZ2l0cyB2YWx1ZWQgZnJvbQorMTAgdG8gMzUuIElmIDx2YXI+YmFzZTwvdmFyPiBpcyAxNiwgYSBsZWFkaW5nIDxjb2RlPjB4PC9jb2RlPiBpcyBwZXJtaXR0ZWQuCisKKyAgIDxwPlRoZSBzdWJqZWN0IHNlcXVlbmNlIGlzIHRoZSBsb25nZXN0IGluaXRpYWwgc2VxdWVuY2Ugb2YgdGhlIGlucHV0CitzdHJpbmcgdGhhdCBoYXMgdGhlIGV4cGVjdGVkIGZvcm0sIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0Citub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuICBJZiB0aGUgc3RyaW5nIGlzIGVtcHR5IG9yIGNvbnNpc3RzIGVudGlyZWx5CitvZiB3aGl0ZXNwYWNlLCBvciBpZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCBhCitwZXJtaXNzaWJsZSBkaWdpdCwgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5LgorCisgICA8cD5JZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgYWNjZXB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgemVybywKKzxjb2RlPndjc3RvdWw8L2NvZGU+IGF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgcmFkaXggZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiBBCitzdHJpbmcgd2l0aCBhIGxlYWRpbmcgPGNvZGU+MHg8L2NvZGU+IGlzIHRyZWF0ZWQgYXMgYSBoZXhhZGVjaW1hbCB2YWx1ZTsgYSBzdHJpbmcgd2l0aAorYSBsZWFkaW5nIDxjb2RlPjA8L2NvZGU+IGFuZCBubyA8Y29kZT54PC9jb2RlPiBpcyB0cmVhdGVkIGFzIG9jdGFsOyBhbGwgb3RoZXIgc3RyaW5ncyBhcmUKK3RyZWF0ZWQgYXMgZGVjaW1hbC4gSWYgPHZhcj5iYXNlPC92YXI+IGlzIGJldHdlZW4gMiBhbmQgMzYsIGl0IGlzIHVzZWQgYXMgdGhlCitjb252ZXJzaW9uIHJhZGl4LCBhcyBkZXNjcmliZWQgYWJvdmUuIEZpbmFsbHksIGEgcG9pbnRlciB0byB0aGUgZmlyc3QKK2NoYXJhY3RlciBwYXN0IHRoZSBjb252ZXJ0ZWQgc3ViamVjdCBzdHJpbmcgaXMgc3RvcmVkIGluIDx2YXI+cHRyPC92YXI+LCBpZgorPHZhcj5wdHI8L3Zhcj4gaXMgbm90IDxjb2RlPk5VTEw8L2NvZGU+LgorCisgICA8cD5JZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgZW1wdHkgKHRoYXQgaXMsIGlmIDxjb2RlPio8L2NvZGU+PHZhcj5zPC92YXI+IGRvZXMgbm90IHN0YXJ0Cit3aXRoIGEgc3Vic3RyaW5nIGluIGFjY2VwdGFibGUgZm9ybSksIG5vIGNvbnZlcnNpb24KK2lzIHBlcmZvcm1lZCBhbmQgdGhlIHZhbHVlIG9mIDx2YXI+czwvdmFyPiBpcyBzdG9yZWQgaW4gPHZhcj5wdHI8L3Zhcj4gKGlmIDx2YXI+cHRyPC92YXI+IGlzCitub3QgPGNvZGU+TlVMTDwvY29kZT4pLgorCisgICA8cD5UaGUgYWx0ZXJuYXRlIGZ1bmN0aW9uIDxjb2RlPl93Y3N0b3VsX3I8L2NvZGU+IGlzIGEgcmVlbnRyYW50IHZlcnNpb24uICBUaGUKK2V4dHJhIGFyZ3VtZW50IDx2YXI+cmVlbnQ8L3Zhcj4gaXMgYSBwb2ludGVyIHRvIGEgcmVlbnRyYW5jeSBzdHJ1Y3R1cmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPndjc3RvdWw8L2NvZGU+IHJldHVybnMgdGhlIGNvbnZlcnRlZCB2YWx1ZSwgaWYgYW55LiBJZiBubyBjb252ZXJzaW9uIHdhcworbWFkZSwgPGNvZGU+MDwvY29kZT4gaXMgcmV0dXJuZWQuCisKKyAgIDxwPjxjb2RlPndjc3RvdWw8L2NvZGU+IHJldHVybnMgPGNvZGU+VUxPTkdfTUFYPC9jb2RlPiBpZiB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb252ZXJ0ZWQKK3ZhbHVlIGlzIHRvbyBsYXJnZSwgYW5kIHNldHMgPGNvZGU+ZXJybm88L2NvZGU+IHRvIDxjb2RlPkVSQU5HRTwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3N0b3VsPC9jb2RlPiBpcyBBTlNJLgorCisgICA8cD48Y29kZT53Y3N0b3VsPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djc3RvdWxsLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b3VsbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDhkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N0b3VsbC5odG1sCkBAIC0wLDAgKzEsMTEwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3N0b3VsbCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIiB0aXRsZT0iU3RkbGliIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2NzdG91bC5odG1sI3djc3RvdWwiIHRpdGxlPSJ3Y3N0b3VsIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3lzdGVtLmh0bWwjc3lzdGVtIiB0aXRsZT0ic3lzdGVtIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3N0b3VsbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzeXN0ZW0uaHRtbCNzeXN0ZW0iPnN5c3RlbTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc3RvdWwuaHRtbCN3Y3N0b3VsIj53Y3N0b3VsPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjQ0IDxjb2RlPndjc3RvdWxsPC9jb2RlPiZtZGFzaDt3aWRlIHN0cmluZyB0byB1bnNpZ25lZCBsb25nIGxvbmc8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13Y3N0b3VsbC0xMDQiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA1Zndjc3RvdWxsXzAwNWZyLTEwNSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB3Y3N0b3VsbChjb25zdCB3Y2hhcl90ICo8dmFyPnM8L3Zhcj4sIHdjaGFyX3QgKio8dmFyPnB0cjwvdmFyPiwKKyAgICAgICAgIGludCA8dmFyPmJhc2U8L3Zhcj4pOworICAgICAKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIF93Y3N0b3VsbF9yKHZvaWQgKjx2YXI+cmVlbnQ8L3Zhcj4sIGNvbnN0IHdjaGFyX3QgKjx2YXI+czwvdmFyPiwKKyAgICAgICAgIHdjaGFyX3QgKio8dmFyPnB0cjwvdmFyPiwgaW50IDx2YXI+YmFzZTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIGZ1bmN0aW9uIDxjb2RlPndjc3RvdWxsPC9jb2RlPiBjb252ZXJ0cyB0aGUgd2lkZSBzdHJpbmcgPGNvZGU+KjwvY29kZT48dmFyPnM8L3Zhcj4gdG8KK2FuIDxjb2RlPnVuc2lnbmVkIGxvbmcgbG9uZzwvY29kZT4uIEZpcnN0LCBpdCBicmVha3MgZG93biB0aGUgc3RyaW5nIGludG8gdGhyZWUgcGFydHM6CitsZWFkaW5nIHdoaXRlc3BhY2UsIHdoaWNoIGlzIGlnbm9yZWQ7IGEgc3ViamVjdCBzdHJpbmcgY29uc2lzdGluZworb2YgdGhlIGRpZ2l0cyBtZWFuaW5nZnVsIGluIHRoZSByYWRpeCBzcGVjaWZpZWQgYnkgPHZhcj5iYXNlPC92YXI+CisoZm9yIGV4YW1wbGUsIDxjb2RlPjA8L2NvZGU+IHRocm91Z2ggPGNvZGU+NzwvY29kZT4gaWYgdGhlIHZhbHVlIG9mIDx2YXI+YmFzZTwvdmFyPiBpcyA4KTsKK2FuZCBhIHRyYWlsaW5nIHBvcnRpb24gY29uc2lzdGluZyBvZiBvbmUgb3IgbW9yZSB1bnBhcnNlYWJsZSBjaGFyYWN0ZXJzLAord2hpY2ggYWx3YXlzIGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4gVGhlbiwgaXQgYXR0ZW1wdHMKK3RvIGNvbnZlcnQgdGhlIHN1YmplY3Qgc3RyaW5nIGludG8gYW4gdW5zaWduZWQgbG9uZyBsb25nIGludGVnZXIsIGFuZCByZXR1cm5zIHRoZQorcmVzdWx0LgorCisgICA8cD5JZiB0aGUgdmFsdWUgb2YgPHZhcj5iYXNlPC92YXI+IGlzIHplcm8sIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBleHBlY3RlZCB0byBsb29rCitsaWtlIGEgbm9ybWFsIEMgaW50ZWdlciBjb25zdGFudDogIGFuIG9wdGlvbmFsIHNpZ24gKDxjb2RlPis8L2NvZGU+IG9yIDxjb2RlPi08L2NvZGU+KSwKK2EgcG9zc2libGUgPGNvZGU+MHg8L2NvZGU+IGluZGljYXRpbmcgaGV4YWRlY2ltYWwgcmFkaXggb3IgYSBwb3NzaWJsZSAmbHQ7MCZndDsgaW5kaWNhdGluZworb2N0YWwgcmFkaXgsIGFuZCBhIG51bWJlci4gCitJZiA8dmFyPmJhc2U8L3Zhcj4gaXMgYmV0d2VlbiAyIGFuZCAzNiwgdGhlIGV4cGVjdGVkIGZvcm0gb2YgdGhlIHN1YmplY3QgaXMgYQorc2VxdWVuY2Ugb2YgZGlnaXRzICh3aGljaCBtYXkgaW5jbHVkZSBsZXR0ZXJzLCBkZXBlbmRpbmcgb24gdGhlCitiYXNlKSByZXByZXNlbnRpbmcgYW4gaW50ZWdlciBpbiB0aGUgcmFkaXggc3BlY2lmaWVkIGJ5IDx2YXI+YmFzZTwvdmFyPi4gCitUaGUgbGV0dGVycyA8Y29kZT5hPC9jb2RlPiZuZGFzaDs8Y29kZT56PC9jb2RlPiAob3IgPGNvZGU+QTwvY29kZT4mbmRhc2g7PGNvZGU+WjwvY29kZT4pIGFyZSB1c2VkIGFzIGRpZ2l0cyB2YWx1ZWQgZnJvbQorMTAgdG8gMzUuIElmIDx2YXI+YmFzZTwvdmFyPiBpcyAxNiwgYSBsZWFkaW5nIDxjb2RlPjB4PC9jb2RlPiBpcyBwZXJtaXR0ZWQuCisKKyAgIDxwPlRoZSBzdWJqZWN0IHNlcXVlbmNlIGlzIHRoZSBsb25nZXN0IGluaXRpYWwgc2VxdWVuY2Ugb2YgdGhlIGlucHV0CitzdHJpbmcgdGhhdCBoYXMgdGhlIGV4cGVjdGVkIGZvcm0sIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0Citub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuICBJZiB0aGUgc3RyaW5nIGlzIGVtcHR5IG9yIGNvbnNpc3RzIGVudGlyZWx5CitvZiB3aGl0ZXNwYWNlLCBvciBpZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCBhCitwZXJtaXNzaWJsZSBkaWdpdCwgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5LgorCisgICA8cD5JZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgYWNjZXB0YWJsZSwgYW5kIHRoZSB2YWx1ZSBvZiA8dmFyPmJhc2U8L3Zhcj4gaXMgemVybywKKzxjb2RlPndjc3RvdWxsPC9jb2RlPiBhdHRlbXB0cyB0byBkZXRlcm1pbmUgdGhlIHJhZGl4IGZyb20gdGhlIGlucHV0IHN0cmluZy4gQQorc3RyaW5nIHdpdGggYSBsZWFkaW5nIDxjb2RlPjB4PC9jb2RlPiBpcyB0cmVhdGVkIGFzIGEgaGV4YWRlY2ltYWwgdmFsdWU7IGEgc3RyaW5nIHdpdGgKK2EgbGVhZGluZyA8Y29kZT4wPC9jb2RlPiBhbmQgbm8gPGNvZGU+eDwvY29kZT4gaXMgdHJlYXRlZCBhcyBvY3RhbDsgYWxsIG90aGVyIHN0cmluZ3MgYXJlCit0cmVhdGVkIGFzIGRlY2ltYWwuIElmIDx2YXI+YmFzZTwvdmFyPiBpcyBiZXR3ZWVuIDIgYW5kIDM2LCBpdCBpcyB1c2VkIGFzIHRoZQorY29udmVyc2lvbiByYWRpeCwgYXMgZGVzY3JpYmVkIGFib3ZlLiBGaW5hbGx5LCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0CitjaGFyYWN0ZXIgcGFzdCB0aGUgY29udmVydGVkIHN1YmplY3Qgc3RyaW5nIGlzIHN0b3JlZCBpbiA8dmFyPnB0cjwvdmFyPiwgaWYKKzx2YXI+cHRyPC92YXI+IGlzIG5vdCA8Y29kZT5OVUxMPC9jb2RlPi4KKworICAgPHA+SWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIGVtcHR5ICh0aGF0IGlzLCBpZiA8Y29kZT4qPC9jb2RlPjx2YXI+czwvdmFyPiBkb2VzIG5vdCBzdGFydAord2l0aCBhIHN1YnN0cmluZyBpbiBhY2NlcHRhYmxlIGZvcm0pLCBubyBjb252ZXJzaW9uCitpcyBwZXJmb3JtZWQgYW5kIHRoZSB2YWx1ZSBvZiA8dmFyPnM8L3Zhcj4gaXMgc3RvcmVkIGluIDx2YXI+cHRyPC92YXI+IChpZiA8dmFyPnB0cjwvdmFyPiBpcworbm90IDxjb2RlPk5VTEw8L2NvZGU+KS4KKworICAgPHA+VGhlIGFsdGVybmF0ZSBmdW5jdGlvbiA8Y29kZT5fd2NzdG91bGxfcjwvY29kZT4gaXMgYSByZWVudHJhbnQgdmVyc2lvbi4gIFRoZQorZXh0cmEgYXJndW1lbnQgPHZhcj5yZWVudDwvdmFyPiBpcyBhIHBvaW50ZXIgdG8gYSByZWVudHJhbmN5IHN0cnVjdHVyZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzdG91bGw8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gYW5kIHNldHMgPGNvZGU+ZXJybm88L2NvZGU+IHRvIDxjb2RlPkVJTlZBTDwvY29kZT4gaWYgdGhlIHZhbHVlIG9mCis8dmFyPmJhc2U8L3Zhcj4gaXMgbm90IHN1cHBvcnRlZC4KKworICAgPHA+PGNvZGU+d2NzdG91bGw8L2NvZGU+IHJldHVybnMgdGhlIGNvbnZlcnRlZCB2YWx1ZSwgaWYgYW55LiBJZiBubyBjb252ZXJzaW9uIHdhcworbWFkZSwgPGNvZGU+MDwvY29kZT4gaXMgcmV0dXJuZWQuCisKKyAgIDxwPjxjb2RlPndjc3RvdWxsPC9jb2RlPiByZXR1cm5zIDxjb2RlPlVMTE9OR19NQVg8L2NvZGU+IGlmIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvbnZlcnRlZAordmFsdWUgaXMgdG9vIGxhcmdlLCBhbmQgc2V0cyA8Y29kZT5lcnJubzwvY29kZT4gdG8gPGNvZGU+RVJBTkdFPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjc3RvdWxsPC9jb2RlPiBpcyBBTlNJLgorCisgICA8cD48Y29kZT53Y3N0b3VsbDwvY29kZT4gcmVxdWlyZXMgbm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N3aWR0aC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2Nzd2lkdGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGNiOTI4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2Nzd2lkdGguaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3N3aWR0aCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2NzdG9rLmh0bWwjd2NzdG9rIiB0aXRsZT0id2NzdG9rIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2NzeGZybS5odG1sI3djc3hmcm0iIHRpdGxlPSJ3Y3N4ZnJtIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3N3aWR0aCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ3Y3N4ZnJtLmh0bWwjd2NzeGZybSI+d2NzeGZybTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc3Rvay5odG1sI3djc3RvayI+d2NzdG9rPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiPldjaGFyIHN0cmluZ3M8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj42LjI3IDxjb2RlPndjc3dpZHRoPC9jb2RlPiZtZGFzaDtudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyBvZiBhIHdpZGUtY2hhcmFjdGVyIHN0cmluZzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc3dpZHRoLTQyMCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIGludCB3Y3N3aWR0aChjb25zdCB3Y2hhcl90ICo8dmFyPnB3Y3M8L3Zhcj4sIHNpemVfdCA8dmFyPm48L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53Y3N3aWR0aDwvY29kZT4gZnVuY3Rpb24gc2hhbGwgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgY29sdW1uCitwb3NpdGlvbnMgcmVxdWlyZWQgZm9yIDx2YXI+bjwvdmFyPiB3aWRlLWNoYXJhY3RlciBjb2RlcyAob3IgZmV3ZXIgdGhhbiA8dmFyPm48L3Zhcj4KK3dpZGUtY2hhcmFjdGVyIGNvZGVzIGlmIGEgbnVsbCB3aWRlLWNoYXJhY3RlciBjb2RlIGlzIGVuY291bnRlcmVkCitiZWZvcmUgPHZhcj5uPC92YXI+IHdpZGUtY2hhcmFjdGVyIGNvZGVzIGFyZSBleGhhdXN0ZWQpIGluIHRoZSBzdHJpbmcgcG9pbnRlZAordG8gYnkgPHZhcj5wd2NzPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2Nzd2lkdGg8L2NvZGU+IGZ1bmN0aW9uIGVpdGhlciBzaGFsbCByZXR1cm4gMCAoaWYgPHZhcj5wd2NzPC92YXI+IHBvaW50cyB0byBhCitudWxsIHdpZGUtY2hhcmFjdGVyIGNvZGUpLCBvciByZXR1cm4gdGhlIG51bWJlciBvZiBjb2x1bW4gcG9zaXRpb25zCit0byBiZSBvY2N1cGllZCBieSB0aGUgd2lkZS1jaGFyYWN0ZXIgc3RyaW5nIHBvaW50ZWQgdG8gYnkgPHZhcj5wd2NzPC92YXI+LCBvcgorcmV0dXJuIC0xIChpZiBhbnkgb2YgdGhlIGZpcnN0IDx2YXI+bjwvdmFyPiB3aWRlLWNoYXJhY3RlciBjb2RlcyBpbiB0aGUKK3dpZGUtY2hhcmFjdGVyIHN0cmluZyBwb2ludGVkIHRvIGJ5IDx2YXI+cHdjczwvdmFyPiBpcyBub3QgYSBwcmludGFibGUKK3dpZGUtY2hhcmFjdGVyIGNvZGUpLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+d2Nzd2lkdGg8L2NvZGU+IGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdGhlIFNpbmdsZSBVTklYIFNwZWNpZmljYXRpb24gVm9sdW1lIDIuIAorPGNvZGU+d2Nzd2lkdGg8L2NvZGU+IGhhcyBiZWVuIG1hcmtlZCBhcyBhbiBleHRlbnNpb24gaW4gdGhlIFNpbmdsZSBVTklYIFNwZWNpZmljYXRpb24gVm9sdW1lIDMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzeGZybS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2NzeGZybS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOGYyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3N4ZnJtLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2NzeGZybSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id2Nzd2lkdGguaHRtbCN3Y3N3aWR0aCIgdGl0bGU9Indjc3dpZHRoIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id2N3aWR0aC5odG1sI3djd2lkdGgiIHRpdGxlPSJ3Y3dpZHRoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3Y3N4ZnJtIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Indjd2lkdGguaHRtbCN3Y3dpZHRoIj53Y3dpZHRoPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0id2Nzd2lkdGguaHRtbCN3Y3N3aWR0aCI+d2Nzd2lkdGg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyI+V2NoYXIgc3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMjggPGNvZGU+d2NzeGZybTwvY29kZT4mbWRhc2g7bG9jYWxlLXNwZWNpZmljIHdpZGUtY2hhcmFjdGVyIHN0cmluZyB0cmFuc2Zvcm1hdGlvbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjc3hmcm0tNDIxIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgaW50IHdjc3hmcm0od2NoYXJfdCAqPHZhcj5zdHJhPC92YXI+LCBjb25zdCB3Y2hhcl90ICogPHZhcj5zdHJiPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT53Y3N4ZnJtPC9jb2RlPiB0cmFuc2Zvcm1zIHRoZSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgcG9pbnRlZCB0byBieQorPHZhcj5zdHJiPC92YXI+IHRvIHRoZSB3aWRlLWNoYXJhY3RlciBzdHJpbmcgcG9pbnRlZCB0byBieSA8dmFyPnN0cmE8L3Zhcj4sCitDb21wYXJpbmcgdHdvIHRyYW5zZm9ybWVkIHdpZGUgc3RyaW5ncyB3aXRoIDxjb2RlPndjc2NtcDwvY29kZT4gc2hvdWxkIHJldHVybgordGhlIHNhbWUgcmVzdWx0IGFzIGNvbXBhcmluZyB0aGUgb3JpZ2luYWwgc3RyaW5ncyB3aXRoIDxjb2RlPndjc2NvbGw8L2NvZGU+LiAKK05vIG1vcmUgdGhhbiA8dmFyPm48L3Zhcj4gd2lkZSBjaGFyYWN0ZXJzIGFyZSB0cmFuc2Zvcm1lZCwgaW5jbHVkaW5nIHRoZQordHJhaWxpbmcgbnVsbCBjaGFyYWN0ZXIuCisKKyAgIDxwPklmIDx2YXI+bjwvdmFyPiBpcyAwLCA8dmFyPnN0cmE8L3Zhcj4gbWF5IGJlIGEgTlVMTCBwb2ludGVyLgorCisgICA8cD5UaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT53Y3N4ZnJtPC9jb2RlPiBzaW1wbHkgdXNlcyA8Y29kZT53Y3NsY3B5PC9jb2RlPgorYW5kIGRvZXMgbm90IHN1cHBvcnQgYW55IGxhbmd1YWdlLXNwZWNpZmljIHRyYW5zZm9ybWF0aW9ucy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+d2NzeGZybTwvY29kZT4gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFuc2Zvcm1lZCB3aWRlIGNoYXJhY3Rlcgorc3RyaW5nLiAgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIDx2YXI+bjwvdmFyPiwgdGhlCitjb250ZW50IG9mIDx2YXI+c3RyYTwvdmFyPiBpcyB1bmRlZmluZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3N4ZnJtPC9jb2RlPiBpcyBJU08vSUVDIDk4OTkvQU1EMToxOTk1IChJU08gQykuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2N0b21iLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3RvbWIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBlZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2N0b21iLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2N0b21iIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJTdGRsaWIuaHRtbCNTdGRsaWIiIHRpdGxlPSJTdGRsaWIiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3N0b21icy5odG1sI3djc3RvbWJzIiB0aXRsZT0id2NzdG9tYnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IndjdG9tYiI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Indjc3RvbWJzLmh0bWwjd2NzdG9tYnMiPndjc3RvbWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iU3RkbGliLmh0bWwjU3RkbGliIj5TdGRsaWI8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjQ3IDxjb2RlPndjdG9tYjwvY29kZT4mbWRhc2g7bWluaW1hbCB3aWRlIGNoYXIgdG8gbXVsdGlieXRlIGNvbnZlcnRlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXdjdG9tYi0xMDkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKKyAgICAgaW50IHdjdG9tYihjaGFyICo8dmFyPnM8L3Zhcj4sIHdjaGFyX3QgPHZhcj53Y2hhcjwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorV2hlbiBfTUJfQ0FQQUJMRSBpcyBub3QgZGVmaW5lZCwgdGhpcyBpcyBhIG1pbmltYWwgQU5TSS1jb25mb3JtaW5nCitpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT53Y3RvbWI8L2NvZGU+LiAgVGhlCitvbmx5ICZsZHF1bzt3aWRlIGNoYXJhY3RlcnMmcmRxdW87IHJlY29nbml6ZWQgYXJlIHNpbmdsZSBieXRlcywKK2FuZCB0aGV5IGFyZSAmbGRxdW87Y29udmVydGVkJnJkcXVvOyB0byB0aGVtc2VsdmVzLgorCisgICA8cD5XaGVuIF9NQl9DQVBBQkxFIGlzIGRlZmluZWQsIHRoaXMgcm91dGluZSBjYWxscyA8Y29kZT5fd2N0b21iX3I8L2NvZGU+IHRvIHBlcmZvcm0KK3RoZSBjb252ZXJzaW9uLCBwYXNzaW5nIGEgc3RhdGUgdmFyaWFibGUgdG8gYWxsb3cgc3RhdGUgZGVwZW5kZW50CitkZWNvZGluZy4gIFRoZSByZXN1bHQgaXMgYmFzZWQgb24gdGhlIGxvY2FsZSBzZXR0aW5nIHdoaWNoIG1heQorYmUgcmVzdHJpY3RlZCB0byBhIGRlZmluZWQgc2V0IG9mIGxvY2FsZXMuCisKKyAgIDxwPkVhY2ggY2FsbCB0byA8Y29kZT53Y3RvbWI8L2NvZGU+IG1vZGlmaWVzIDxjb2RlPio8L2NvZGU+PHZhcj5zPC92YXI+IHVubGVzcyA8dmFyPnM8L3Zhcj4gaXMgYSBudWxsCitwb2ludGVyIG9yIF9NQl9DQVBBQkxFIGlzIGRlZmluZWQgYW5kIDx2YXI+d2NoYXI8L3Zhcj4gaXMgaW52YWxpZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZT53Y3RvbWI8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaWYKKzx2YXI+czwvdmFyPiBpcyA8Y29kZT5OVUxMPC9jb2RlPjsgaXQgcmV0dXJucyA8Y29kZT4tMTwvY29kZT4gaWYgX01CX0NBUEFCTEUgaXMgZW5hYmxlZAorYW5kIHRoZSB3Y2hhciBpcyBub3QgYSB2YWxpZCBtdWx0aS1ieXRlIGNoYXJhY3RlciwgaXQgcmV0dXJucyA8Y29kZT4xPC9jb2RlPgoraWYgX01CX0NBUEFCTEUgaXMgbm90IGRlZmluZWQgb3IgdGhlIHdjaGFyIGlzIGluIHJlYWxpdHkgYSBzaW5nbGUKK2J5dGUgY2hhcmFjdGVyLCBvdGhlcndpc2UgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQorbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3RvbWI8L2NvZGU+IGlzIHJlcXVpcmVkIGluIHRoZSBBTlNJIEMgc3RhbmRhcmQuICBIb3dldmVyLCB0aGUgcHJlY2lzZQorZWZmZWN0cyB2YXJ5IHdpdGggdGhlIGxvY2FsZS4KKworICAgPHA+PGNvZGU+d2N0b21iPC9jb2RlPiByZXF1aXJlcyBubyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djdHJhbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djdHJhbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWIxZTJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2N0cmFucy5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPndjdHJhbnMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkN0eXBlLmh0bWwjQ3R5cGUiIHRpdGxlPSJDdHlwZSI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InRvd2N0cmFucy5odG1sI3Rvd2N0cmFucyIgdGl0bGU9InRvd2N0cmFucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id2N0cmFucyI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InRvd2N0cmFucy5odG1sI3Rvd2N0cmFucyI+dG93Y3RyYW5zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjMyIDxjb2RlPndjdHJhbnM8L2NvZGU+Jm1kYXNoO2dldCB3aWRlLWNoYXJhY3RlciB0cmFuc2xhdGlvbiB0eXBlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtd2N0cmFucy0xNDQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y3R5cGUuaCZndDsKKyAgICAgd2N0cmFuc190IHdjdHJhbnMoY29uc3QgY2hhciAqPHZhcj5jPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT53Y3RyYW5zPC9jb2RlPiBpcyBhIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGEgc3RyaW5nIDx2YXI+YzwvdmFyPiBhbmQgZ2l2ZXMgYmFjawordGhlIGFwcHJvcHJpYXRlIHdjdHJhbnNfdCB0eXBlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyaW5nLAoraWYgb25lIGV4aXN0cy4gIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBndWFyYW50ZWVkIHRvIGJlIHJlY29nbml6ZWQ6CisidG9sb3dlciIgYW5kICJ0b3VwcGVyIi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+d2N0cmFuczwvY29kZT4gcmV0dXJucyAwIGFuZCBzZXRzIDxjb2RlPmVycm5vPC9jb2RlPiB0byA8Y29kZT5FSU5WQUw8L2NvZGU+IGlmIHRoZQorZ2l2ZW4gbmFtZSBpcyBpbnZhbGlkLiAgT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGEgdmFsaWQgbm9uLXplcm8gd2N0cmFuc190Cit2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjdHJhbnM8L2NvZGU+IGlzIEM5OS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2N0eXBlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3R5cGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTU1ZmRhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd2N0eXBlLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d2N0eXBlIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDdHlwZS5odG1sI0N0eXBlIiB0aXRsZT0iQ3R5cGUiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpc3djdHlwZS5odG1sI2lzd2N0eXBlIiB0aXRsZT0iaXN3Y3R5cGUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ0b3dsb3dlci5odG1sI3Rvd2xvd2VyIiB0aXRsZT0idG93bG93ZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IndjdHlwZSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0b3dsb3dlci5odG1sI3Rvd2xvd2VyIj50b3dsb3dlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Imlzd2N0eXBlLmh0bWwjaXN3Y3R5cGUiPmlzd2N0eXBlPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ3R5cGUuaHRtbCNDdHlwZSI+Q3R5cGU8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4zLjI4IDxjb2RlPndjdHlwZTwvY29kZT4mbWRhc2g7Z2V0IHdpZGUtY2hhcmFjdGVyIGNsYXNzaWZpY2F0aW9uIHR5cGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13Y3R5cGUtMTQwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2N0eXBlLmgmZ3Q7CisgICAgIHdjdHlwZV90IHdjdHlwZShjb25zdCBjaGFyICo8dmFyPmM8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPndjdHlwZTwvY29kZT4gaXMgYSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhIHN0cmluZyA8dmFyPmM8L3Zhcj4gYW5kIGdpdmVzIGJhY2sKK3RoZSBhcHByb3ByaWF0ZSB3Y3R5cGVfdCB0eXBlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyaW5nLAoraWYgb25lIGV4aXN0cy4gIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBndWFyYW50ZWVkIHRvIGJlIHJlY29nbml6ZWQ6CisiYWxudW0iLCAiYWxwaGEiLCAiYmxhbmsiLCAiY250cmwiLCAiZGlnaXQiLCAiZ3JhcGgiLCAibG93ZXIiLCAicHJpbnQiLAorInB1bmN0IiwgInNwYWNlIiwgInVwcGVyIiwgYW5kICJ4ZGlnaXQiLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT53Y3R5cGU8L2NvZGU+IHJldHVybnMgMCBhbmQgc2V0cyA8Y29kZT5lcnJubzwvY29kZT4gdG8gPGNvZGU+RUlOVkFMPC9jb2RlPiBpZiB0aGUKK2dpdmVuIG5hbWUgaXMgaW52YWxpZC4gIE90aGVyd2lzZSwgaXQgcmV0dXJucyBhIHZhbGlkIG5vbi16ZXJvIHdjdHlwZV90Cit2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjdHlwZTwvY29kZT4gaXMgQzk5LgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3dpZHRoLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93Y3dpZHRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5ZmQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3djd2lkdGguaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53Y3dpZHRoIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3Y3N4ZnJtLmh0bWwjd2NzeGZybSIgdGl0bGU9Indjc3hmcm0iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Indjd2lkdGgiPjwvYT4KKzxwPgorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3Y3N4ZnJtLmh0bWwjd2NzeGZybSI+d2NzeGZybTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni4yOSA8Y29kZT53Y3dpZHRoPC9jb2RlPiZtZGFzaDtudW1iZXIgb2YgY29sdW1uIHBvc2l0aW9ucyBvZiBhIHdpZGUtY2hhcmFjdGVyIGNvZGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC13Y3dpZHRoLTQyMiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIGludCB3Y3dpZHRoKGNvbnN0IHdjaGFyX3QgPHZhcj53YzwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndjd2lkdGg8L2NvZGU+IGZ1bmN0aW9uIHNoYWxsIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNvbHVtbgorcG9zaXRpb25zIHJlcXVpcmVkIGZvciB0aGUgd2lkZSBjaGFyYWN0ZXIgPHZhcj53YzwvdmFyPi4gVGhlIGFwcGxpY2F0aW9uCitzaGFsbCBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgb2YgPHZhcj53YzwvdmFyPiBpcyBhIGNoYXJhY3RlciByZXByZXNlbnRhYmxlCithcyBhIHdjaGFyX3QsIGFuZCBpcyBhIHdpZGUtY2hhcmFjdGVyIGNvZGUgY29ycmVzcG9uZGluZyB0byBhCit2YWxpZCBjaGFyYWN0ZXIgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d2N3aWR0aDwvY29kZT4gZnVuY3Rpb24gc2hhbGwgZWl0aGVyIHJldHVybiAwIChpZiA8dmFyPndjPC92YXI+IGlzIGEgbnVsbAord2lkZS1jaGFyYWN0ZXIgY29kZSksIG9yIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvbHVtbiBwb3NpdGlvbnMgdG8KK2JlIG9jY3VwaWVkIGJ5IHRoZSB3aWRlLWNoYXJhY3RlciBjb2RlIDx2YXI+d2M8L3Zhcj4sIG9yIHJldHVybiAtMSAoaWYgPHZhcj53YzwvdmFyPgorZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHByaW50YWJsZSB3aWRlLWNoYXJhY3RlciBjb2RlKS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndjd2lkdGg8L2NvZGU+IGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdGhlIFNpbmdsZSBVTklYIFNwZWNpZmljYXRpb24gVm9sdW1lIDIuIAorPGNvZGU+d2N3aWR0aDwvY29kZT4gaGFzIGJlZW4gbWFya2VkIGFzIGFuIGV4dGVuc2lvbiBpbiB0aGUgU2luZ2xlIFVOSVggU3BlY2lmaWNhdGlvbiBWb2x1bWUgMy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93bWVtY2hyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93bWVtY2hyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmMGZkYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3dtZW1jaHIuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53bWVtY2hyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3bWVtY21wLmh0bWwjd21lbWNtcCIgdGl0bGU9IndtZW1jbXAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IndtZW1jaHIiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id21lbWNtcC5odG1sI3dtZW1jbXAiPndtZW1jbXA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyI+V2NoYXIgc3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMSA8Y29kZT53bWVtY2hyPC9jb2RlPiZtZGFzaDtmaW5kIGEgd2lkZSBjaGFyYWN0ZXIgaW4gbWVtb3J5PC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdAkqd21lbWNocihjb25zdCB3Y2hhcl90ICo8dmFyPnM8L3Zhcj4sIHdjaGFyX3QgPHZhcj5jPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d21lbWNocjwvY29kZT4gZnVuY3Rpb24gbG9jYXRlcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiA8dmFyPmM8L3Zhcj4gaW4gdGhlCitpbml0aWFsIDx2YXI+bjwvdmFyPiB3aWRlIGNoYXJhY3RlcnMgb2YgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJlIDx2YXI+czwvdmFyPi4gVGhpcworZnVuY3Rpb24gaXMgbm90IGFmZmVjdGVkIGJ5IGxvY2FsZSBhbmQgYWxsIHdjaGFyX3QgdmFsdWVzIGFyZSB0cmVhdGVkCitpZGVudGljYWxseS4gIFRoZSBudWxsIHdpZGUgY2hhcmFjdGVyIGFuZCB3Y2hhcl90IHZhbHVlcyBub3QKK2NvcnJlc3BvbmRpbmcgdG8gdmFsaWQgY2hhcmFjdGVycyBhcmUgbm90IHRyZWF0ZWQgc3BlY2lhbGx5LgorCisgICA8cD5JZiA8dmFyPm48L3Zhcj4gaXMgemVybywgPHZhcj5zPC92YXI+IG11c3QgYmUgYSB2YWxpZCBwb2ludGVyIGFuZCB0aGUgZnVuY3Rpb24KK2JlaGF2ZXMgYXMgaWYgbm8gdmFsaWQgb2NjdXJyZW5jZSBvZiA8dmFyPmM8L3Zhcj4gaXMgZm91bmQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT53bWVtY2hyPC9jb2RlPiBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbG9jYXRlZAord2lkZSBjaGFyYWN0ZXIsIG9yIGEgbnVsbCBwb2ludGVyIGlmIHRoZSB3aWRlIGNoYXJhY3RlciBkb2VzIG5vdCBvY2N1cgoraW4gdGhlIG9iamVjdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndtZW1jaHI8L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd21lbWNtcC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd21lbWNtcC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDY5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93bWVtY21wLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d21lbWNtcCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id21lbWNoci5odG1sI3dtZW1jaHIiIHRpdGxlPSJ3bWVtY2hyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id21lbWNweS5odG1sI3dtZW1jcHkiIHRpdGxlPSJ3bWVtY3B5Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3bWVtY21wIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IndtZW1jcHkuaHRtbCN3bWVtY3B5Ij53bWVtY3B5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0id21lbWNoci5odG1sI3dtZW1jaHIiPndtZW1jaHI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyI+V2NoYXIgc3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMiA8Y29kZT53bWVtY21wPC9jb2RlPiZtZGFzaDtjb21wYXJlIHdpZGUgY2hhcmFjdGVycyBpbiBtZW1vcnk8L2gzPgorCis8cD48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICBpbnQgd21lbWNtcChjb25zdCB3Y2hhcl90ICo8dmFyPnMxPC92YXI+LCBjb25zdCB3Y2hhcl90ICo8dmFyPnMyPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d21lbWNtcDwvY29kZT4gZnVuY3Rpb24gY29tcGFyZXMgdGhlIGZpcnN0IDx2YXI+bjwvdmFyPiB3aWRlIGNoYXJhY3RlcnMgb2YgdGhlCitvYmplY3QgcG9pbnRlZCB0byBieSA8dmFyPnMxPC92YXI+IHRvIHRoZSBmaXJzdCA8dmFyPm48L3Zhcj4gd2lkZSBjaGFyYWN0ZXJzIG9mIHRoZQorb2JqZWN0IHBvaW50ZWQgdG8gYnkgPHZhcj5zMjwvdmFyPi4gVGhpcyBmdW5jdGlvbiBpcyBub3QgYWZmZWN0ZWQgYnkgbG9jYWxlCithbmQgYWxsIHdjaGFyX3QgdmFsdWVzIGFyZSB0cmVhdGVkIGlkZW50aWNhbGx5LiBUaGUgbnVsbCB3aWRlIGNoYXJhY3RlcgorYW5kIHdjaGFyX3QgdmFsdWVzIG5vdCBjb3JyZXNwb25kaW5nIHRvIHZhbGlkIGNoYXJhY3RlcnMgYXJlIG5vdCB0cmVhdGVkCitzcGVjaWFsbHkuCisKKyAgIDxwPklmIDx2YXI+bjwvdmFyPiBpcyB6ZXJvLCA8dmFyPnMxPC92YXI+IGFuZCA8dmFyPnMyPC92YXI+IG11c3QgYmUgYSB2YWxpZCBwb2ludGVycyBhbmQgdGhlCitmdW5jdGlvbiBiZWhhdmVzIGFzIGlmIHRoZSB0d28gb2JqZWN0cyBjb21wYXJlIGVxdWFsLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d21lbWNtcDwvY29kZT4gZnVuY3Rpb24gcmV0dXJucyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiwgZXF1YWwgdG8sCitvciBsZXNzIHRoYW4gemVybywgYWNjb3JkaW5nbHkgYXMgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IDx2YXI+czE8L3Zhcj4gaXMKK2dyZWF0ZXIgdGhhbiwgZXF1YWwgdG8sIG9yIGxlc3MgdGhhbiB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgPHZhcj5zMjwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndtZW1jbXA8L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd21lbWNweS5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd21lbWNweS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjAyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93bWVtY3B5Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d21lbWNweSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iV2NoYXItc3RyaW5ncy5odG1sI1djaGFyLXN0cmluZ3MiIHRpdGxlPSJXY2hhciBzdHJpbmdzIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0id21lbWNtcC5odG1sI3dtZW1jbXAiIHRpdGxlPSJ3bWVtY21wIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0id21lbW1vdmUuaHRtbCN3bWVtbW92ZSIgdGl0bGU9IndtZW1tb3ZlIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ3bWVtY3B5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IndtZW1tb3ZlLmh0bWwjd21lbW1vdmUiPndtZW1tb3ZlPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0id21lbWNtcC5odG1sI3dtZW1jbXAiPndtZW1jbXA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyI+V2NoYXIgc3RyaW5nczwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjYuMyA8Y29kZT53bWVtY3B5PC9jb2RlPiZtZGFzaDtjb3B5IHdpZGUgY2hhcmFjdGVycyBpbiBtZW1vcnk8L2gzPgorCis8cD48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDt3Y2hhci5oJmd0OworICAgICB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3QgKjx2YXI+ZDwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d21lbWNweTwvY29kZT4gZnVuY3Rpb24gY29waWVzIDx2YXI+bjwvdmFyPiB3aWRlIGNoYXJhY3RlcnMgZnJvbSB0aGUgb2JqZWN0Citwb2ludGVkIHRvIGJ5IDx2YXI+czwvdmFyPiB0byB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYmUgPHZhcj5kPC92YXI+LiBUaGlzIGZ1bmN0aW9uCitpcyBub3QgYWZmZWN0ZWQgYnkgbG9jYWxlIGFuZCBhbGwgd2NoYXJfdCB2YWx1ZXMgYXJlIHRyZWF0ZWQKK2lkZW50aWNhbGx5LiAgVGhlIG51bGwgd2lkZSBjaGFyYWN0ZXIgYW5kIHdjaGFyX3QgdmFsdWVzIG5vdAorY29ycmVzcG9uZGluZyB0byB2YWxpZCBjaGFyYWN0ZXJzIGFyZSBub3QgdHJlYXRlZCBzcGVjaWFsbHkuCisKKyAgIDxwPklmIDx2YXI+bjwvdmFyPiBpcyB6ZXJvLCA8dmFyPmQ8L3Zhcj4gYW5kIDx2YXI+czwvdmFyPiBtdXN0IGJlIGEgdmFsaWQgcG9pbnRlcnMsIGFuZCB0aGUKK2Z1bmN0aW9uIGNvcGllcyB6ZXJvIHdpZGUgY2hhcmFjdGVycy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndtZW1jcHk8L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIDx2YXI+ZDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndtZW1jcHk8L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLmh0bWwvd21lbW1vdmUuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3dtZW1tb3ZlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViODZmYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3dtZW1tb3ZlLmh0bWwKQEAgLTAsMCArMSw3MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+d21lbW1vdmUgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIiB0aXRsZT0iV2NoYXIgc3RyaW5ncyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IndtZW1jcHkuaHRtbCN3bWVtY3B5IiB0aXRsZT0id21lbWNweSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IndtZW1zZXQuaHRtbCN3bWVtc2V0IiB0aXRsZT0id21lbXNldCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0id21lbW1vdmUiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id21lbXNldC5odG1sI3dtZW1zZXQiPndtZW1zZXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3bWVtY3B5Lmh0bWwjd21lbWNweSI+d21lbWNweTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni40IDxjb2RlPndtZW1tb3ZlPC9jb2RlPiZtZGFzaDtjb3B5IHdpZGUgY2hhcmFjdGVycyBpbiBtZW1vcnkgd2l0aCBvdmVybGFwcGluZyBhcmVhczwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O3djaGFyLmgmZ3Q7CisgICAgIHdjaGFyX3QgKndtZW1tb3ZlKHdjaGFyX3QgKjx2YXI+ZDwvdmFyPiwgY29uc3Qgd2NoYXJfdCAqPHZhcj5zPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d21lbW1vdmU8L2NvZGU+IGZ1bmN0aW9uIGNvcGllcyA8dmFyPm48L3Zhcj4gd2lkZSBjaGFyYWN0ZXJzIGZyb20gdGhlIG9iamVjdAorcG9pbnRlZCB0byBieSA8dmFyPnM8L3Zhcj4gdG8gdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5IDx2YXI+ZDwvdmFyPi4gQ29weWluZyB0YWtlcworcGxhY2UgYXMgaWYgdGhlIDx2YXI+bjwvdmFyPiB3aWRlIGNoYXJhY3RlcnMgZnJvbSB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkKKzx2YXI+czwvdmFyPiBhcmUgZmlyc3QgY29waWVkIGludG8gYSB0ZW1wb3JhcnkgYXJyYXkgb2YgPHZhcj5uPC92YXI+IHdpZGUgY2hhcmFjdGVycwordGhhdCBkb2VzIG5vdCBvdmVybGFwIHRoZSBvYmplY3RzIHBvaW50ZWQgdG8gYnkgPHZhcj5kPC92YXI+IG9yIDx2YXI+czwvdmFyPiwgYW5kIHRoZW4KK3RoZSA8dmFyPm48L3Zhcj4gd2lkZSBjaGFyYWN0ZXJzIGZyb20gdGhlIHRlbXBvcmFyeSBhcnJheSBhcmUgY29waWVkIGludG8gdGhlCitvYmplY3QgcG9pbnRlZCB0byBieSA8dmFyPmQ8L3Zhcj4uCisKKyAgIDxwPlRoaXMgZnVuY3Rpb24gaXMgbm90IGFmZmVjdGVkIGJ5IGxvY2FsZSBhbmQgYWxsIHdjaGFyX3QgdmFsdWVzIGFyZQordHJlYXRlZCBpZGVudGljYWxseS4gVGhlIG51bGwgd2lkZSBjaGFyYWN0ZXIgYW5kIHdjaGFyX3QgdmFsdWVzIG5vdAorY29ycmVzcG9uZGluZyB0byB2YWxpZCBjaGFyYWN0ZXJzIGFyZSBub3QgdHJlYXRlZCBzcGVjaWFsbHkuCisKKyAgIDxwPklmIDx2YXI+bjwvdmFyPiBpcyB6ZXJvLCA8dmFyPmQ8L3Zhcj4gYW5kIDx2YXI+czwvdmFyPiBtdXN0IGJlIGEgdmFsaWQgcG9pbnRlcnMsIGFuZCB0aGUKK2Z1bmN0aW9uIGNvcGllcyB6ZXJvIHdpZGUgY2hhcmFjdGVycy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndtZW1tb3ZlPC9jb2RlPiBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiA8dmFyPmQ8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT53bWVtbW92ZTwvY29kZT4gaXMgSVNPL0lFQyA5ODk5L0FNRDE6MTk5NSAoSVNPIEMpLgorCisgICA8cD5ObyBzdXBwb3J0aW5nIE9TIHN1YnJvdXRpbmVzIGFyZSByZXF1aXJlZC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93bWVtc2V0Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYmMuaHRtbC93bWVtc2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0NDljOAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5odG1sL3dtZW1zZXQuaHRtbApAQCAtMCwwICsxLDY1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT53bWVtc2V0IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJXY2hhci1zdHJpbmdzLmh0bWwjV2NoYXItc3RyaW5ncyIgdGl0bGU9IldjaGFyIHN0cmluZ3MiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ3bWVtbW92ZS5odG1sI3dtZW1tb3ZlIiB0aXRsZT0id21lbW1vdmUiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJ3Y3NjYXQuaHRtbCN3Y3NjYXQiIHRpdGxlPSJ3Y3NjYXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IndtZW1zZXQiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0id2NzY2F0Lmh0bWwjd2NzY2F0Ij53Y3NjYXQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJ3bWVtbW92ZS5odG1sI3dtZW1tb3ZlIj53bWVtbW92ZTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IldjaGFyLXN0cmluZ3MuaHRtbCNXY2hhci1zdHJpbmdzIj5XY2hhciBzdHJpbmdzPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Ni41IDxjb2RlPndtZW1zZXQ8L2NvZGU+Jm1kYXNoO3NldCB3aWRlIGNoYXJhY3RlcnMgaW4gbWVtb3J5PC9oMz4KKworPHA+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7d2NoYXIuaCZndDsKKyAgICAgd2NoYXJfdCAqd21lbXNldCh3Y2hhcl90ICo8dmFyPnM8L3Zhcj4sIHdjaGFyX3QgPHZhcj5jPC92YXI+LCBzaXplX3QgPHZhcj5uPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+d21lbXNldDwvY29kZT4gZnVuY3Rpb24gY29waWVzIHRoZSB2YWx1ZSBvZiA8dmFyPmM8L3Zhcj4gaW50byBlYWNoIG9mIHRoZQorZmlyc3QgPHZhcj5uPC92YXI+IHdpZGUgY2hhcmFjdGVycyBvZiB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgPHZhcj5zPC92YXI+LiAgVGhpcworZnVuY3Rpb24gaXMgbm90IGFmZmVjdGVkIGJ5IGxvY2FsZSBhbmQgYWxsIHdjaGFyX3QgdmFsdWVzIGFyZSB0cmVhdGVkCitpZGVudGljYWxseS4gIFRoZSBudWxsIHdpZGUgY2hhcmFjdGVyIGFuZCB3Y2hhcl90IHZhbHVlcyBub3QKK2NvcnJlc3BvbmRpbmcgdG8gdmFsaWQgY2hhcmFjdGVycyBhcmUgbm90IHRyZWF0ZWQgc3BlY2lhbGx5LgorCisgICA8cD5JZiA8dmFyPm48L3Zhcj4gaXMgemVybywgPHZhcj5zPC92YXI+IG11c3QgYmUgYSB2YWxpZCBwb2ludGVyIGFuZCB0aGUgZnVuY3Rpb24KK2NvcGllcyB6ZXJvIHdpZGUgY2hhcmFjdGVycy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPndtZW1zZXQ8L2NvZGU+IGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIDx2YXI+czwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPndtZW1zZXQ8L2NvZGU+IGlzIElTTy9JRUMgOTg5OS9BTUQxOjE5OTUgKElTTyBDKS4KKworICAgPHA+Tm8gc3VwcG9ydGluZyBPUyBzdWJyb3V0aW5lcyBhcmUgcmVxdWlyZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJjLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ1ZmI1YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGliYy5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvQ29tcGxleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvQ29tcGxleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Yjg3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9Db21wbGV4Lmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Q29tcGxleCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJSZWVudHJhbmN5Lmh0bWwjUmVlbnRyYW5jeSIgdGl0bGU9IlJlZW50cmFuY3kiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9IkNvbXBsZXgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iUmVlbnRyYW5jeS5odG1sI1JlZW50cmFuY3kiPlJlZW50cmFuY3k8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4yIE1hdGhlbWF0aWNhbCBDb21wbGV4IEZ1bmN0aW9ucyAoPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmNvbXBsZXguaDwvc3Bhbj48L3NhbXA+KTwvaDI+CisKKzxwPlRoaXMgY2hhcHRlciBncm91cHMgdGhlIGNvbXBsZXggbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucy4gIFRoZQorY29ycmVzcG9uZGluZyBkZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb25zIGFyZSBpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29tcGxleC5oPC9zcGFuPjwvc2FtcD4uIAorRnVuY3Rpb25zIGFuZCBkb2N1bWVudGF0aW9ucyBhcmUgdGFrZW4gZnJvbSBOZXRCU0QuCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJjYWJzLmh0bWwjY2FicyI+Y2FiczwvYT46IAlDb21wbGV4IGFic29sdXRlIHZhbHVlCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJjYWNvcy5odG1sI2NhY29zIj5jYWNvczwvYT46IAlDb21wbGV4IGFyYyBjb3NpbmUKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9ImNhY29zaC5odG1sI2NhY29zaCI+Y2Fjb3NoPC9hPjogCUNvbXBsZXggYXJjIGh5cGVyYm9saWMgY29zaW5lCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJjYXJnLmh0bWwjY2FyZyI+Y2FyZzwvYT46IAlBcmd1bWVudCAoYWxzbyBjYWxsZWQgcGhhc2UgYW5nbGUpCis8bGk+PGEgYWNjZXNza2V5PSI1IiBocmVmPSJjYXNpbi5odG1sI2Nhc2luIj5jYXNpbjwvYT46IAlDb21wbGV4IGFyYyBzaW5lCis8bGk+PGEgYWNjZXNza2V5PSI2IiBocmVmPSJjYXNpbmguaHRtbCNjYXNpbmgiPmNhc2luaDwvYT46IAlDb21wbGV4IGFyYyBoeXBlcmJvbGljIHNpbmUKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9ImNhdGFuLmh0bWwjY2F0YW4iPmNhdGFuPC9hPjogCUNvbXBsZXggYXJjIHRhbmdlbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjgiIGhyZWY9ImNhdGFuaC5odG1sI2NhdGFuaCI+Y2F0YW5oPC9hPjogCUNvbXBsZXggYXJjIGh5cGVyYm9saWMgdGFuZ2VudAorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iY2Nvcy5odG1sI2Njb3MiPmNjb3M8L2E+OiAJQ29tcGxleCBjb3NpbmUKKzxsaT48YSBocmVmPSJjY29zaC5odG1sI2Njb3NoIj5jY29zaDwvYT46IAlDb21wbGV4IGh5cGVyYm9saWMgY29zaW5lCis8bGk+PGEgaHJlZj0iY2V4cC5odG1sI2NleHAiPmNleHA8L2E+OiAJQ29tcGxleCBleHBvbmVudAorPGxpPjxhIGhyZWY9ImNpbWFnLmh0bWwjY2ltYWciPmNpbWFnPC9hPjogCUltYWdpbmFyeSBwYXJ0Cis8bGk+PGEgaHJlZj0iY2xvZy5odG1sI2Nsb2ciPmNsb2c8L2E+OiAJQ29tcGxleCBuYXR1cmFsIChiYXNlIGUpIGxvZ2FyaXRobQorPGxpPjxhIGhyZWY9ImNvbmouaHRtbCNjb25qIj5jb25qPC9hPjogCUNvbXBsZXggY29uanVnYXRlCis8bGk+PGEgaHJlZj0iY3Bvdy5odG1sI2Nwb3ciPmNwb3c8L2E+OiAJQ29tcGxleCBwb3dlciBmdW5jdGlvbgorPGxpPjxhIGhyZWY9ImNwcm9qLmh0bWwjY3Byb2oiPmNwcm9qPC9hPjogCUNvbXB1dGUgYSBwcm9qZWN0aW9uIG9uIHRoZSBSaWVtYW5uIHNwaGVyZQorPGxpPjxhIGhyZWY9ImNyZWFsLmh0bWwjY3JlYWwiPmNyZWFsPC9hPjogCVJlYWwgcGFydAorPGxpPjxhIGhyZWY9ImNzaW4uaHRtbCNjc2luIj5jc2luPC9hPjogCUNvbXBsZXggc2luZQorPGxpPjxhIGhyZWY9ImNzaW5oLmh0bWwjY3NpbmgiPmNzaW5oPC9hPjogCUNvbXBsZXggaHlwZXJib2xpYyBzaW5lCis8bGk+PGEgaHJlZj0iY3NxcnQuaHRtbCNjc3FydCI+Y3NxcnQ8L2E+OiAJQ29tcGxleCBzcXVhcmUgcm9vdAorPGxpPjxhIGhyZWY9ImN0YW4uaHRtbCNjdGFuIj5jdGFuPC9hPjogCUNvbXBsZXggdGFuZ2VudAorPGxpPjxhIGhyZWY9ImN0YW5oLmh0bWwjY3RhbmgiPmN0YW5oPC9hPjogCUNvbXBsZXggaHlwZXJib2xpYyB0YW5nZW50Cis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9Eb2N1bWVudC1JbmRleC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvRG9jdW1lbnQtSW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTY2MGJhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvRG9jdW1lbnQtSW5kZXguaHRtbApAQCAtMCwwICsxLDMyOSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgSW5kZXggLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iTG9uZy1Eb3VibGUtRnVuY3Rpb25zLmh0bWwjTG9uZy1Eb3VibGUtRnVuY3Rpb25zIiB0aXRsZT0iTG9uZyBEb3VibGUgRnVuY3Rpb25zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJEb2N1bWVudC1JbmRleCI+PC9hPgorPHA+CitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkxvbmctRG91YmxlLUZ1bmN0aW9ucy5odG1sI0xvbmctRG91YmxlLUZ1bmN0aW9ucyI+TG9uZyBEb3VibGUgRnVuY3Rpb25zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9InVubnVtYmVyZWQiPkRvY3VtZW50IEluZGV4PC9oMj4KKworPHVsIGNsYXNzPSJpbmRleC1jcCIgY29tcGFjdD4KKzxsaT48YSBocmVmPSJhY29zLmh0bWwjaW5kZXgtYWNvcy01Ij48Y29kZT5hY29zPC9jb2RlPjwvYT46IDxhIGhyZWY9ImFjb3MuaHRtbCNhY29zIj5hY29zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYWNvcy5odG1sI2luZGV4LWFjb3NmLTYiPjxjb2RlPmFjb3NmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImFjb3MuaHRtbCNhY29zIj5hY29zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYWNvc2guaHRtbCNpbmRleC1hY29zaC03Ij48Y29kZT5hY29zaDwvY29kZT48L2E+OiA8YSBocmVmPSJhY29zaC5odG1sI2Fjb3NoIj5hY29zaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFjb3NoLmh0bWwjaW5kZXgtYWNvc2hmLTgiPjxjb2RlPmFjb3NoZjwvY29kZT48L2E+OiA8YSBocmVmPSJhY29zaC5odG1sI2Fjb3NoIj5hY29zaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImFzaW4uaHRtbCNpbmRleC1hc2luLTkiPjxjb2RlPmFzaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iYXNpbi5odG1sI2FzaW4iPmFzaW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJhc2luLmh0bWwjaW5kZXgtYXNpbmYtMTAiPjxjb2RlPmFzaW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9ImFzaW4uaHRtbCNhc2luIj5hc2luPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXNpbmguaHRtbCNpbmRleC1hc2luaC0xMSI+PGNvZGU+YXNpbmg8L2NvZGU+PC9hPjogPGEgaHJlZj0iYXNpbmguaHRtbCNhc2luaCI+YXNpbmg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhc2luaC5odG1sI2luZGV4LWFzaW5oZi0xMiI+PGNvZGU+YXNpbmhmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImFzaW5oLmh0bWwjYXNpbmgiPmFzaW5oPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXRhbi5odG1sI2luZGV4LWF0YW4tMTMiPjxjb2RlPmF0YW48L2NvZGU+PC9hPjogPGEgaHJlZj0iYXRhbi5odG1sI2F0YW4iPmF0YW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJhdGFuMi5odG1sI2luZGV4LWF0YW4yLTE1Ij48Y29kZT5hdGFuMjwvY29kZT48L2E+OiA8YSBocmVmPSJhdGFuMi5odG1sI2F0YW4yIj5hdGFuMjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImF0YW4yLmh0bWwjaW5kZXgtYXRhbjJmLTE2Ij48Y29kZT5hdGFuMmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iYXRhbjIuaHRtbCNhdGFuMiI+YXRhbjI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhdGFuLmh0bWwjaW5kZXgtYXRhbmYtMTQiPjxjb2RlPmF0YW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9ImF0YW4uaHRtbCNhdGFuIj5hdGFuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iYXRhbmguaHRtbCNpbmRleC1hdGFuaC0xNyI+PGNvZGU+YXRhbmg8L2NvZGU+PC9hPjogPGEgaHJlZj0iYXRhbmguaHRtbCNhdGFuaCI+YXRhbmg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJhdGFuaC5odG1sI2luZGV4LWF0YW5oZi0xOCI+PGNvZGU+YXRhbmhmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImF0YW5oLmh0bWwjYXRhbmgiPmF0YW5oPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2Ficy5odG1sI2luZGV4LWNhYnMtMTU0Ij48Y29kZT5jYWJzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNhYnMuaHRtbCNjYWJzIj5jYWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2Ficy5odG1sI2luZGV4LWNhYnNmLTE1NSI+PGNvZGU+Y2Fic2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2Ficy5odG1sI2NhYnMiPmNhYnM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYWNvcy5odG1sI2luZGV4LWNhY29zLTE1NiI+PGNvZGU+Y2Fjb3M8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2Fjb3MuaHRtbCNjYWNvcyI+Y2Fjb3M8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYWNvcy5odG1sI2luZGV4LWNhY29zZi0xNTciPjxjb2RlPmNhY29zZjwvY29kZT48L2E+OiA8YSBocmVmPSJjYWNvcy5odG1sI2NhY29zIj5jYWNvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNhY29zaC5odG1sI2luZGV4LWNhY29zaC0xNTgiPjxjb2RlPmNhY29zaDwvY29kZT48L2E+OiA8YSBocmVmPSJjYWNvc2guaHRtbCNjYWNvc2giPmNhY29zaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNhY29zaC5odG1sI2luZGV4LWNhY29zaGYtMTU5Ij48Y29kZT5jYWNvc2hmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNhY29zaC5odG1sI2NhY29zaCI+Y2Fjb3NoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2FyZy5odG1sI2luZGV4LWNhcmctMTYwIj48Y29kZT5jYXJnPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNhcmcuaHRtbCNjYXJnIj5jYXJnPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2FyZy5odG1sI2luZGV4LWNhcmdmLTE2MSI+PGNvZGU+Y2FyZ2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2FyZy5odG1sI2NhcmciPmNhcmc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYXNpbi5odG1sI2luZGV4LWNhc2luLTE2MiI+PGNvZGU+Y2FzaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iY2FzaW4uaHRtbCNjYXNpbiI+Y2FzaW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYXNpbi5odG1sI2luZGV4LWNhc2luZi0xNjMiPjxjb2RlPmNhc2luZjwvY29kZT48L2E+OiA8YSBocmVmPSJjYXNpbi5odG1sI2Nhc2luIj5jYXNpbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNhc2luaC5odG1sI2luZGV4LWNhc2luaC0xNjQiPjxjb2RlPmNhc2luaDwvY29kZT48L2E+OiA8YSBocmVmPSJjYXNpbmguaHRtbCNjYXNpbmgiPmNhc2luaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNhc2luaC5odG1sI2luZGV4LWNhc2luaGYtMTY1Ij48Y29kZT5jYXNpbmhmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNhc2luaC5odG1sI2Nhc2luaCI+Y2FzaW5oPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2F0YW4uaHRtbCNpbmRleC1jYXRhbi0xNjYiPjxjb2RlPmNhdGFuPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNhdGFuLmh0bWwjY2F0YW4iPmNhdGFuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2F0YW4uaHRtbCNpbmRleC1jYXRhbmYtMTY3Ij48Y29kZT5jYXRhbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2F0YW4uaHRtbCNjYXRhbiI+Y2F0YW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYXRhbmguaHRtbCNpbmRleC1jYXRhbmgtMTY4Ij48Y29kZT5jYXRhbmg8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2F0YW5oLmh0bWwjY2F0YW5oIj5jYXRhbmg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjYXRhbmguaHRtbCNpbmRleC1jYXRhbmhmLTE2OSI+PGNvZGU+Y2F0YW5oZjwvY29kZT48L2E+OiA8YSBocmVmPSJjYXRhbmguaHRtbCNjYXRhbmgiPmNhdGFuaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNicnQuaHRtbCNpbmRleC1jYnJ0LTMxIj48Y29kZT5jYnJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImNicnQuaHRtbCNjYnJ0Ij5jYnJ0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2JydC5odG1sI2luZGV4LWNicnRmLTMyIj48Y29kZT5jYnJ0ZjwvY29kZT48L2E+OiA8YSBocmVmPSJjYnJ0Lmh0bWwjY2JydCI+Y2JydDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNjb3MuaHRtbCNpbmRleC1jY29zLTE3MCI+PGNvZGU+Y2NvczwvY29kZT48L2E+OiA8YSBocmVmPSJjY29zLmh0bWwjY2NvcyI+Y2NvczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNjb3MuaHRtbCNpbmRleC1jY29zZi0xNzEiPjxjb2RlPmNjb3NmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNjb3MuaHRtbCNjY29zIj5jY29zPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2Nvc2guaHRtbCNpbmRleC1jY29zaC0xNzIiPjxjb2RlPmNjb3NoPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNjb3NoLmh0bWwjY2Nvc2giPmNjb3NoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2Nvc2guaHRtbCNpbmRleC1jY29zaGYtMTczIj48Y29kZT5jY29zaGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2Nvc2guaHRtbCNjY29zaCI+Y2Nvc2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmbG9vci5odG1sI2luZGV4LWNlaWwtNTEiPjxjb2RlPmNlaWw8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmxvb3IuaHRtbCNmbG9vciI+Zmxvb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmbG9vci5odG1sI2luZGV4LWNlaWxmLTUyIj48Y29kZT5jZWlsZjwvY29kZT48L2E+OiA8YSBocmVmPSJmbG9vci5odG1sI2Zsb29yIj5mbG9vcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNleHAuaHRtbCNpbmRleC1jZXhwLTE3NCI+PGNvZGU+Y2V4cDwvY29kZT48L2E+OiA8YSBocmVmPSJjZXhwLmh0bWwjY2V4cCI+Y2V4cDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNleHAuaHRtbCNpbmRleC1jZXhwZi0xNzUiPjxjb2RlPmNleHBmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNleHAuaHRtbCNjZXhwIj5jZXhwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2ltYWcuaHRtbCNpbmRleC1jaW1hZy0xNzYiPjxjb2RlPmNpbWFnPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNpbWFnLmh0bWwjY2ltYWciPmNpbWFnPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY2ltYWcuaHRtbCNpbmRleC1jaW1hZ2YtMTc3Ij48Y29kZT5jaW1hZ2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2ltYWcuaHRtbCNjaW1hZyI+Y2ltYWc8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjbG9nLmh0bWwjaW5kZXgtY2xvZy0xNzgiPjxjb2RlPmNsb2c8L2NvZGU+PC9hPjogPGEgaHJlZj0iY2xvZy5odG1sI2Nsb2ciPmNsb2c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjbG9nLmh0bWwjaW5kZXgtY2xvZ2YtMTc5Ij48Y29kZT5jbG9nZjwvY29kZT48L2E+OiA8YSBocmVmPSJjbG9nLmh0bWwjY2xvZyI+Y2xvZzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNvbmouaHRtbCNpbmRleC1jb25qLTE4MCI+PGNvZGU+Y29uajwvY29kZT48L2E+OiA8YSBocmVmPSJjb25qLmh0bWwjY29uaiI+Y29uajwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNvbmouaHRtbCNpbmRleC1jb25qZi0xODEiPjxjb2RlPmNvbmpmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNvbmouaHRtbCNjb25qIj5jb25qPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY29weXNpZ24uaHRtbCNpbmRleC1jb3B5c2lnbi0zMyI+PGNvZGU+Y29weXNpZ248L2NvZGU+PC9hPjogPGEgaHJlZj0iY29weXNpZ24uaHRtbCNjb3B5c2lnbiI+Y29weXNpZ248L2E+PC9saT4KKzxsaT48YSBocmVmPSJjb3B5c2lnbi5odG1sI2luZGV4LWNvcHlzaWduZi0zNCI+PGNvZGU+Y29weXNpZ25mPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNvcHlzaWduLmh0bWwjY29weXNpZ24iPmNvcHlzaWduPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2luLmh0bWwjaW5kZXgtY29zLTE0MiI+PGNvZGU+Y29zPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpbi5odG1sI3NpbiI+c2luPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2luLmh0bWwjaW5kZXgtY29zZi0xNDMiPjxjb2RlPmNvc2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2luLmh0bWwjc2luIj5zaW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJjcG93Lmh0bWwjaW5kZXgtY3Bvdy0xODIiPjxjb2RlPmNwb3c8L2NvZGU+PC9hPjogPGEgaHJlZj0iY3Bvdy5odG1sI2Nwb3ciPmNwb3c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjcG93Lmh0bWwjaW5kZXgtY3Bvd2YtMTgzIj48Y29kZT5jcG93ZjwvY29kZT48L2E+OiA8YSBocmVmPSJjcG93Lmh0bWwjY3BvdyI+Y3BvdzwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNwcm9qLmh0bWwjaW5kZXgtY3Byb2otMTg0Ij48Y29kZT5jcHJvajwvY29kZT48L2E+OiA8YSBocmVmPSJjcHJvai5odG1sI2Nwcm9qIj5jcHJvajwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNwcm9qLmh0bWwjaW5kZXgtY3Byb2pmLTE4NSI+PGNvZGU+Y3Byb2pmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNwcm9qLmh0bWwjY3Byb2oiPmNwcm9qPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY3JlYWwuaHRtbCNpbmRleC1jcmVhbC0xODYiPjxjb2RlPmNyZWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNyZWFsLmh0bWwjY3JlYWwiPmNyZWFsPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY3JlYWwuaHRtbCNpbmRleC1jcmVhbGYtMTg3Ij48Y29kZT5jcmVhbGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iY3JlYWwuaHRtbCNjcmVhbCI+Y3JlYWw8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjc2luLmh0bWwjaW5kZXgtY3Npbi0xODgiPjxjb2RlPmNzaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iY3Npbi5odG1sI2NzaW4iPmNzaW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJjc2luLmh0bWwjaW5kZXgtY3NpbmYtMTg5Ij48Y29kZT5jc2luZjwvY29kZT48L2E+OiA8YSBocmVmPSJjc2luLmh0bWwjY3NpbiI+Y3NpbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNzaW5oLmh0bWwjaW5kZXgtY3NpbmgtMTkwIj48Y29kZT5jc2luaDwvY29kZT48L2E+OiA8YSBocmVmPSJjc2luaC5odG1sI2NzaW5oIj5jc2luaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImNzaW5oLmh0bWwjaW5kZXgtY3NpbmhmLTE5MSI+PGNvZGU+Y3NpbmhmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImNzaW5oLmh0bWwjY3NpbmgiPmNzaW5oPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY3NxcnQuaHRtbCNpbmRleC1jc3FydC0xOTIiPjxjb2RlPmNzcXJ0PC9jb2RlPjwvYT46IDxhIGhyZWY9ImNzcXJ0Lmh0bWwjY3NxcnQiPmNzcXJ0PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iY3NxcnQuaHRtbCNpbmRleC1jc3FydGYtMTkzIj48Y29kZT5jc3FydGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iY3NxcnQuaHRtbCNjc3FydCI+Y3NxcnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJjdGFuLmh0bWwjaW5kZXgtY3Rhbi0xOTQiPjxjb2RlPmN0YW48L2NvZGU+PC9hPjogPGEgaHJlZj0iY3Rhbi5odG1sI2N0YW4iPmN0YW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJjdGFuLmh0bWwjaW5kZXgtY3RhbmYtMTk1Ij48Y29kZT5jdGFuZjwvY29kZT48L2E+OiA8YSBocmVmPSJjdGFuLmh0bWwjY3RhbiI+Y3RhbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImN0YW5oLmh0bWwjaW5kZXgtY3RhbmgtMTk2Ij48Y29kZT5jdGFuaDwvY29kZT48L2E+OiA8YSBocmVmPSJjdGFuaC5odG1sI2N0YW5oIj5jdGFuaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImN0YW5oLmh0bWwjaW5kZXgtY3RhbmhmLTE5NyI+PGNvZGU+Y3RhbmhmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImN0YW5oLmh0bWwjY3RhbmgiPmN0YW5oPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZXJmLmh0bWwjaW5kZXgtZXJmLTM1Ij48Y29kZT5lcmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iZXJmLmh0bWwjZXJmIj5lcmY8L2E+PC9saT4KKzxsaT48YSBocmVmPSJlcmYuaHRtbCNpbmRleC1lcmZjLTM3Ij48Y29kZT5lcmZjPC9jb2RlPjwvYT46IDxhIGhyZWY9ImVyZi5odG1sI2VyZiI+ZXJmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZXJmLmh0bWwjaW5kZXgtZXJmY2YtMzgiPjxjb2RlPmVyZmNmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImVyZi5odG1sI2VyZiI+ZXJmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZXJmLmh0bWwjaW5kZXgtZXJmZi0zNiI+PGNvZGU+ZXJmZjwvY29kZT48L2E+OiA8YSBocmVmPSJlcmYuaHRtbCNlcmYiPmVyZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImV4cC5odG1sI2luZGV4LWV4cC0zOSI+PGNvZGU+ZXhwPC9jb2RlPjwvYT46IDxhIGhyZWY9ImV4cC5odG1sI2V4cCI+ZXhwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZXhwMi5odG1sI2luZGV4LWV4cDItNDEiPjxjb2RlPmV4cDI8L2NvZGU+PC9hPjogPGEgaHJlZj0iZXhwMi5odG1sI2V4cDIiPmV4cDI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJleHAyLmh0bWwjaW5kZXgtZXhwMmYtNDIiPjxjb2RlPmV4cDJmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImV4cDIuaHRtbCNleHAyIj5leHAyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZXhwLmh0bWwjaW5kZXgtZXhwZi00MCI+PGNvZGU+ZXhwZjwvY29kZT48L2E+OiA8YSBocmVmPSJleHAuaHRtbCNleHAiPmV4cDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImV4cG0xLmh0bWwjaW5kZXgtZXhwbTEtNDMiPjxjb2RlPmV4cG0xPC9jb2RlPjwvYT46IDxhIGhyZWY9ImV4cG0xLmh0bWwjZXhwbTEiPmV4cG0xPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZXhwbTEuaHRtbCNpbmRleC1leHBtMWYtNDQiPjxjb2RlPmV4cG0xZjwvY29kZT48L2E+OiA8YSBocmVmPSJleHBtMS5odG1sI2V4cG0xIj5leHBtMTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZhYnMuaHRtbCNpbmRleC1mYWJzLTQ1Ij48Y29kZT5mYWJzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZhYnMuaHRtbCNmYWJzIj5mYWJzPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmFicy5odG1sI2luZGV4LWZhYnNmLTQ2Ij48Y29kZT5mYWJzZjwvY29kZT48L2E+OiA8YSBocmVmPSJmYWJzLmh0bWwjZmFicyI+ZmFiczwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZkaW0uaHRtbCNpbmRleC1mZGltLTQ3Ij48Y29kZT5mZGltPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZkaW0uaHRtbCNmZGltIj5mZGltPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmRpbS5odG1sI2luZGV4LWZkaW1mLTQ4Ij48Y29kZT5mZGltZjwvY29kZT48L2E+OiA8YSBocmVmPSJmZGltLmh0bWwjZmRpbSI+ZmRpbTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZwY2xhc3NpZnkuaHRtbCNpbmRleC1maW5pdGUtOTIiPjxjb2RlPmZpbml0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJmcGNsYXNzaWZ5Lmh0bWwjZnBjbGFzc2lmeSI+ZnBjbGFzc2lmeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZwY2xhc3NpZnkuaHRtbCNpbmRleC1maW5pdGVmLTk1Ij48Y29kZT5maW5pdGVmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwY2xhc3NpZnkuaHRtbCNmcGNsYXNzaWZ5Ij5mcGNsYXNzaWZ5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZmxvb3IuaHRtbCNpbmRleC1mbG9vci00OSI+PGNvZGU+Zmxvb3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZmxvb3IuaHRtbCNmbG9vciI+Zmxvb3I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmbG9vci5odG1sI2luZGV4LWZsb29yZi01MCI+PGNvZGU+Zmxvb3JmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZsb29yLmh0bWwjZmxvb3IiPmZsb29yPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZm1hLmh0bWwjaW5kZXgtZm1hLTUzIj48Y29kZT5mbWE8L2NvZGU+PC9hPjogPGEgaHJlZj0iZm1hLmh0bWwjZm1hIj5mbWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmbWEuaHRtbCNpbmRleC1mbWFmLTU0Ij48Y29kZT5mbWFmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZtYS5odG1sI2ZtYSI+Zm1hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZm1heC5odG1sI2luZGV4LWZtYXgtNTUiPjxjb2RlPmZtYXg8L2NvZGU+PC9hPjogPGEgaHJlZj0iZm1heC5odG1sI2ZtYXgiPmZtYXg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmbWF4Lmh0bWwjaW5kZXgtZm1heGYtNTYiPjxjb2RlPmZtYXhmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZtYXguaHRtbCNmbWF4Ij5mbWF4PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZm1pbi5odG1sI2luZGV4LWZtaW4tNTciPjxjb2RlPmZtaW48L2NvZGU+PC9hPjogPGEgaHJlZj0iZm1pbi5odG1sI2ZtaW4iPmZtaW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJmbWluLmh0bWwjaW5kZXgtZm1pbmYtNTgiPjxjb2RlPmZtaW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZtaW4uaHRtbCNmbWluIj5mbWluPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZm1vZC5odG1sI2luZGV4LWZtb2QtNTkiPjxjb2RlPmZtb2Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iZm1vZC5odG1sI2Ztb2QiPmZtb2Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmbW9kLmh0bWwjaW5kZXgtZm1vZGYtNjAiPjxjb2RlPmZtb2RmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZtb2QuaHRtbCNmbW9kIj5mbW9kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnBjbGFzc2lmeS5odG1sI2luZGV4LWZwY2xhc3NpZnktODUiPjxjb2RlPmZwY2xhc3NpZnk8L2NvZGU+PC9hPjogPGEgaHJlZj0iZnBjbGFzc2lmeS5odG1sI2ZwY2xhc3NpZnkiPmZwY2xhc3NpZnk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmcmV4cC5odG1sI2luZGV4LWZyZXhwLTYxIj48Y29kZT5mcmV4cDwvY29kZT48L2E+OiA8YSBocmVmPSJmcmV4cC5odG1sI2ZyZXhwIj5mcmV4cDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZyZXhwLmh0bWwjaW5kZXgtZnJleHBmLTYyIj48Y29kZT5mcmV4cGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iZnJleHAuaHRtbCNmcmV4cCI+ZnJleHA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJnYW1tYS5odG1sI2luZGV4LWdhbW1hLTYzIj48Y29kZT5nYW1tYTwvY29kZT48L2E+OiA8YSBocmVmPSJnYW1tYS5odG1sI2dhbW1hIj5nYW1tYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdhbW1hLmh0bWwjaW5kZXgtZ2FtbWFfMDA1ZnItNjciPjxjb2RlPmdhbW1hX3I8L2NvZGU+PC9hPjogPGEgaHJlZj0iZ2FtbWEuaHRtbCNnYW1tYSI+Z2FtbWE8L2E+PC9saT4KKzxsaT48YSBocmVmPSJnYW1tYS5odG1sI2luZGV4LWdhbW1hZi02NCI+PGNvZGU+Z2FtbWFmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdhbW1hLmh0bWwjZ2FtbWEiPmdhbW1hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2FtbWEuaHRtbCNpbmRleC1nYW1tYWZfMDA1ZnItNjgiPjxjb2RlPmdhbW1hZl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdhbW1hLmh0bWwjZ2FtbWEiPmdhbW1hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaHlwb3QuaHRtbCNpbmRleC1oeXBvdC03MyI+PGNvZGU+aHlwb3Q8L2NvZGU+PC9hPjogPGEgaHJlZj0iaHlwb3QuaHRtbCNoeXBvdCI+aHlwb3Q8L2E+PC9saT4KKzxsaT48YSBocmVmPSJoeXBvdC5odG1sI2luZGV4LWh5cG90Zi03NCI+PGNvZGU+aHlwb3RmPC9jb2RlPjwvYT46IDxhIGhyZWY9Imh5cG90Lmh0bWwjaHlwb3QiPmh5cG90PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaWxvZ2IuaHRtbCNpbmRleC1pbG9nYi03NSI+PGNvZGU+aWxvZ2I8L2NvZGU+PC9hPjogPGEgaHJlZj0iaWxvZ2IuaHRtbCNpbG9nYiI+aWxvZ2I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbG9nYi5odG1sI2luZGV4LWlsb2diZi03NiI+PGNvZGU+aWxvZ2JmPC9jb2RlPjwvYT46IDxhIGhyZWY9Imlsb2diLmh0bWwjaWxvZ2IiPmlsb2diPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaW5maW5pdHkuaHRtbCNpbmRleC1pbmZpbml0eS03NyI+PGNvZGU+aW5maW5pdHk8L2NvZGU+PC9hPjogPGEgaHJlZj0iaW5maW5pdHkuaHRtbCNpbmZpbml0eSI+aW5maW5pdHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJpbmZpbml0eS5odG1sI2luZGV4LWluZmluaXR5Zi03OCI+PGNvZGU+aW5maW5pdHlmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImluZmluaXR5Lmh0bWwjaW5maW5pdHkiPmluZmluaXR5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnBjbGFzc2lmeS5odG1sI2luZGV4LWlzZmluaXRlLTg2Ij48Y29kZT5pc2Zpbml0ZTwvY29kZT48L2E+OiA8YSBocmVmPSJmcGNsYXNzaWZ5Lmh0bWwjZnBjbGFzc2lmeSI+ZnBjbGFzc2lmeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzZ3JlYXRlci5odG1sI2luZGV4LWlzZ3JlYXRlci03OSI+PGNvZGU+aXNncmVhdGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9ImlzZ3JlYXRlci5odG1sI2lzZ3JlYXRlciI+aXNncmVhdGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaXNncmVhdGVyLmh0bWwjaW5kZXgtaXNncmVhdGVyZXF1YWwtODAiPjxjb2RlPmlzZ3JlYXRlcmVxdWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9ImlzZ3JlYXRlci5odG1sI2lzZ3JlYXRlciI+aXNncmVhdGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZnBjbGFzc2lmeS5odG1sI2luZGV4LWlzaW5mLTg3Ij48Y29kZT5pc2luZjwvY29kZT48L2E+OiA8YSBocmVmPSJmcGNsYXNzaWZ5Lmh0bWwjZnBjbGFzc2lmeSI+ZnBjbGFzc2lmeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZwY2xhc3NpZnkuaHRtbCNpbmRleC1pc2luZmYtOTQiPjxjb2RlPmlzaW5mZjwvY29kZT48L2E+OiA8YSBocmVmPSJmcGNsYXNzaWZ5Lmh0bWwjZnBjbGFzc2lmeSI+ZnBjbGFzc2lmeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImlzZ3JlYXRlci5odG1sI2luZGV4LWlzbGVzcy04MSI+PGNvZGU+aXNsZXNzPC9jb2RlPjwvYT46IDxhIGhyZWY9ImlzZ3JlYXRlci5odG1sI2lzZ3JlYXRlciI+aXNncmVhdGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaXNncmVhdGVyLmh0bWwjaW5kZXgtaXNsZXNzZXF1YWwtODIiPjxjb2RlPmlzbGVzc2VxdWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9ImlzZ3JlYXRlci5odG1sI2lzZ3JlYXRlciI+aXNncmVhdGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaXNncmVhdGVyLmh0bWwjaW5kZXgtaXNsZXNzZ3JlYXRlci04MyI+PGNvZGU+aXNsZXNzZ3JlYXRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJpc2dyZWF0ZXIuaHRtbCNpc2dyZWF0ZXIiPmlzZ3JlYXRlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImZwY2xhc3NpZnkuaHRtbCNpbmRleC1pc25hbi04OCI+PGNvZGU+aXNuYW48L2NvZGU+PC9hPjogPGEgaHJlZj0iZnBjbGFzc2lmeS5odG1sI2ZwY2xhc3NpZnkiPmZwY2xhc3NpZnk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmcGNsYXNzaWZ5Lmh0bWwjaW5kZXgtaXNuYW5mLTkzIj48Y29kZT5pc25hbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iZnBjbGFzc2lmeS5odG1sI2ZwY2xhc3NpZnkiPmZwY2xhc3NpZnk8L2E+PC9saT4KKzxsaT48YSBocmVmPSJmcGNsYXNzaWZ5Lmh0bWwjaW5kZXgtaXNub3JtYWwtODkiPjxjb2RlPmlzbm9ybWFsPC9jb2RlPjwvYT46IDxhIGhyZWY9ImZwY2xhc3NpZnkuaHRtbCNmcGNsYXNzaWZ5Ij5mcGNsYXNzaWZ5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iaXNncmVhdGVyLmh0bWwjaW5kZXgtaXN1bm9yZGVyZWQtODQiPjxjb2RlPmlzdW5vcmRlcmVkPC9jb2RlPjwvYT46IDxhIGhyZWY9ImlzZ3JlYXRlci5odG1sI2lzZ3JlYXRlciI+aXNncmVhdGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iak4uaHRtbCNpbmRleC1qMC0xOSI+PGNvZGU+ajA8L2NvZGU+PC9hPjogPGEgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+PC9saT4KKzxsaT48YSBocmVmPSJqTi5odG1sI2luZGV4LWowZi0yMCI+PGNvZGU+ajBmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImpOLmh0bWwjak4iPmpOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iak4uaHRtbCNpbmRleC1qMS0yMSI+PGNvZGU+ajE8L2NvZGU+PC9hPjogPGEgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+PC9saT4KKzxsaT48YSBocmVmPSJqTi5odG1sI2luZGV4LWoxZi0yMiI+PGNvZGU+ajFmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImpOLmh0bWwjak4iPmpOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iak4uaHRtbCNpbmRleC1qbi0yMyI+PGNvZGU+am48L2NvZGU+PC9hPjogPGEgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+PC9saT4KKzxsaT48YSBocmVmPSJqTi5odG1sI2luZGV4LWpuZi0yNCI+PGNvZGU+am5mPC9jb2RlPjwvYT46IDxhIGhyZWY9ImpOLmh0bWwjak4iPmpOPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibGRleHAuaHRtbCNpbmRleC1sZGV4cC05NiI+PGNvZGU+bGRleHA8L2NvZGU+PC9hPjogPGEgaHJlZj0ibGRleHAuaHRtbCNsZGV4cCI+bGRleHA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsZGV4cC5odG1sI2luZGV4LWxkZXhwZi05NyI+PGNvZGU+bGRleHBmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImxkZXhwLmh0bWwjbGRleHAiPmxkZXhwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2FtbWEuaHRtbCNpbmRleC1sZ2FtbWEtNjUiPjxjb2RlPmxnYW1tYTwvY29kZT48L2E+OiA8YSBocmVmPSJnYW1tYS5odG1sI2dhbW1hIj5nYW1tYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdhbW1hLmh0bWwjaW5kZXgtbGdhbW1hXzAwNWZyLTY5Ij48Y29kZT5sZ2FtbWFfcjwvY29kZT48L2E+OiA8YSBocmVmPSJnYW1tYS5odG1sI2dhbW1hIj5nYW1tYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdhbW1hLmh0bWwjaW5kZXgtbGdhbW1hZi02NiI+PGNvZGU+bGdhbW1hZjwvY29kZT48L2E+OiA8YSBocmVmPSJnYW1tYS5odG1sI2dhbW1hIj5nYW1tYTwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImdhbW1hLmh0bWwjaW5kZXgtbGdhbW1hZl8wMDVmci03MCI+PGNvZGU+bGdhbW1hZl9yPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdhbW1hLmh0bWwjZ2FtbWEiPmdhbW1hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibHJpbnQuaHRtbCNpbmRleC1sbHJpbnQtMTEwIj48Y29kZT5sbHJpbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0ibHJpbnQuaHRtbCNscmludCI+bHJpbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJscmludC5odG1sI2luZGV4LWxscmludGYtMTExIj48Y29kZT5sbHJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImxyaW50Lmh0bWwjbHJpbnQiPmxyaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibHJvdW5kLmh0bWwjaW5kZXgtbGxyb3VuZC0xMTQiPjxjb2RlPmxscm91bmQ8L2NvZGU+PC9hPjogPGEgaHJlZj0ibHJvdW5kLmh0bWwjbHJvdW5kIj5scm91bmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJscm91bmQuaHRtbCNpbmRleC1sbHJvdW5kZi0xMTUiPjxjb2RlPmxscm91bmRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Imxyb3VuZC5odG1sI2xyb3VuZCI+bHJvdW5kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibG9nLmh0bWwjaW5kZXgtbG9nLTk4Ij48Y29kZT5sb2c8L2NvZGU+PC9hPjogPGEgaHJlZj0ibG9nLmh0bWwjbG9nIj5sb2c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsb2cxMC5odG1sI2luZGV4LWxvZzEwLTEwMCI+PGNvZGU+bG9nMTA8L2NvZGU+PC9hPjogPGEgaHJlZj0ibG9nMTAuaHRtbCNsb2cxMCI+bG9nMTA8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsb2cxMC5odG1sI2luZGV4LWxvZzEwZi0xMDEiPjxjb2RlPmxvZzEwZjwvY29kZT48L2E+OiA8YSBocmVmPSJsb2cxMC5odG1sI2xvZzEwIj5sb2cxMDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImxvZzFwLmh0bWwjaW5kZXgtbG9nMXAtMTAyIj48Y29kZT5sb2cxcDwvY29kZT48L2E+OiA8YSBocmVmPSJsb2cxcC5odG1sI2xvZzFwIj5sb2cxcDwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImxvZzFwLmh0bWwjaW5kZXgtbG9nMXBmLTEwMyI+PGNvZGU+bG9nMXBmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImxvZzFwLmh0bWwjbG9nMXAiPmxvZzFwPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibG9nMi5odG1sI2luZGV4LWxvZzItMTA0Ij48Y29kZT5sb2cyPC9jb2RlPjwvYT46IDxhIGhyZWY9ImxvZzIuaHRtbCNsb2cyIj5sb2cyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibG9nMi5odG1sI2luZGV4LWxvZzJmLTEwNSI+PGNvZGU+bG9nMmY8L2NvZGU+PC9hPjogPGEgaHJlZj0ibG9nMi5odG1sI2xvZzIiPmxvZzI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsb2diLmh0bWwjaW5kZXgtbG9nYi0xMDYiPjxjb2RlPmxvZ2I8L2NvZGU+PC9hPjogPGEgaHJlZj0ibG9nYi5odG1sI2xvZ2IiPmxvZ2I8L2E+PC9saT4KKzxsaT48YSBocmVmPSJsb2diLmh0bWwjaW5kZXgtbG9nYmYtMTA3Ij48Y29kZT5sb2diZjwvY29kZT48L2E+OiA8YSBocmVmPSJsb2diLmh0bWwjbG9nYiI+bG9nYjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImxvZy5odG1sI2luZGV4LWxvZ2YtOTkiPjxjb2RlPmxvZ2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0ibG9nLmh0bWwjbG9nIj5sb2c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJscmludC5odG1sI2luZGV4LWxyaW50LTEwOCI+PGNvZGU+bHJpbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0ibHJpbnQuaHRtbCNscmludCI+bHJpbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJscmludC5odG1sI2luZGV4LWxyaW50Zi0xMDkiPjxjb2RlPmxyaW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJscmludC5odG1sI2xyaW50Ij5scmludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imxyb3VuZC5odG1sI2luZGV4LWxyb3VuZC0xMTIiPjxjb2RlPmxyb3VuZDwvY29kZT48L2E+OiA8YSBocmVmPSJscm91bmQuaHRtbCNscm91bmQiPmxyb3VuZDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Imxyb3VuZC5odG1sI2luZGV4LWxyb3VuZGYtMTEzIj48Y29kZT5scm91bmRmPC9jb2RlPjwvYT46IDxhIGhyZWY9Imxyb3VuZC5odG1sI2xyb3VuZCI+bHJvdW5kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibWF0aGVyci5odG1sI2luZGV4LW1hdGhlcnItMTE2Ij48Y29kZT5tYXRoZXJyPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1hdGhlcnIuaHRtbCNtYXRoZXJyIj5tYXRoZXJyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iUmVlbnRyYW5jeS5odG1sI2luZGV4LWdfdF8wMDQwY29kZV8wMDdibWF0aGVycl8wMDdkLWFuZC1yZWVudHJhbmN5LTE5OSI+PGNvZGU+bWF0aGVycjwvY29kZT4gYW5kIHJlZW50cmFuY3k8L2E+OiA8YSBocmVmPSJSZWVudHJhbmN5Lmh0bWwjUmVlbnRyYW5jeSI+UmVlbnRyYW5jeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1vZGYuaHRtbCNpbmRleC1tb2RmLTExNyI+PGNvZGU+bW9kZjwvY29kZT48L2E+OiA8YSBocmVmPSJtb2RmLmh0bWwjbW9kZiI+bW9kZjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im1vZGYuaHRtbCNpbmRleC1tb2RmZi0xMTgiPjxjb2RlPm1vZGZmPC9jb2RlPjwvYT46IDxhIGhyZWY9Im1vZGYuaHRtbCNtb2RmIj5tb2RmPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibmFuLmh0bWwjaW5kZXgtbmFuLTExOSI+PGNvZGU+bmFuPC9jb2RlPjwvYT46IDxhIGhyZWY9Im5hbi5odG1sI25hbiI+bmFuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ibmFuLmh0bWwjaW5kZXgtbmFuZi0xMjAiPjxjb2RlPm5hbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0ibmFuLmh0bWwjbmFuIj5uYW48L2E+PC9saT4KKzxsaT48YSBocmVmPSJuZWFyYnlpbnQuaHRtbCNpbmRleC1uZWFyYnlpbnQtMTIxIj48Y29kZT5uZWFyYnlpbnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0ibmVhcmJ5aW50Lmh0bWwjbmVhcmJ5aW50Ij5uZWFyYnlpbnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJuZWFyYnlpbnQuaHRtbCNpbmRleC1uZWFyYnlpbnRmLTEyMiI+PGNvZGU+bmVhcmJ5aW50ZjwvY29kZT48L2E+OiA8YSBocmVmPSJuZWFyYnlpbnQuaHRtbCNuZWFyYnlpbnQiPm5lYXJieWludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im5leHRhZnRlci5odG1sI2luZGV4LW5leHRhZnRlci0xMjMiPjxjb2RlPm5leHRhZnRlcjwvY29kZT48L2E+OiA8YSBocmVmPSJuZXh0YWZ0ZXIuaHRtbCNuZXh0YWZ0ZXIiPm5leHRhZnRlcjwvYT48L2xpPgorPGxpPjxhIGhyZWY9Im5leHRhZnRlci5odG1sI2luZGV4LW5leHRhZnRlcmYtMTI0Ij48Y29kZT5uZXh0YWZ0ZXJmPC9jb2RlPjwvYT46IDxhIGhyZWY9Im5leHRhZnRlci5odG1sI25leHRhZnRlciI+bmV4dGFmdGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWF0aC5odG1sI2luZGV4LU9TLXN0dWJzLTQiPk9TIHN0dWJzPC9hPjogPGEgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJwb3cuaHRtbCNpbmRleC1wb3ctMTI1Ij48Y29kZT5wb3c8L2NvZGU+PC9hPjogPGEgaHJlZj0icG93Lmh0bWwjcG93Ij5wb3c8L2E+PC9saT4KKzxsaT48YSBocmVmPSJwb3cuaHRtbCNpbmRleC1wb3dmLTEyNiI+PGNvZGU+cG93ZjwvY29kZT48L2E+OiA8YSBocmVmPSJwb3cuaHRtbCNwb3ciPnBvdzwvYT48L2xpPgorPGxpPjxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNpbmRleC1yZWVudHJhbmN5LTE5OCI+cmVlbnRyYW5jeTwvYT46IDxhIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij5SZWVudHJhbmN5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmVtYWluZGVyLmh0bWwjaW5kZXgtcmVtYWluZGVyLTEyNyI+PGNvZGU+cmVtYWluZGVyPC9jb2RlPjwvYT46IDxhIGhyZWY9InJlbWFpbmRlci5odG1sI3JlbWFpbmRlciI+cmVtYWluZGVyPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icmVtYWluZGVyLmh0bWwjaW5kZXgtcmVtYWluZGVyZi0xMjgiPjxjb2RlPnJlbWFpbmRlcmY8L2NvZGU+PC9hPjogPGEgaHJlZj0icmVtYWluZGVyLmh0bWwjcmVtYWluZGVyIj5yZW1haW5kZXI8L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZW1xdW8uaHRtbCNpbmRleC1yZW1xdW8tMTI5Ij48Y29kZT5yZW1xdW88L2NvZGU+PC9hPjogPGEgaHJlZj0icmVtcXVvLmh0bWwjcmVtcXVvIj5yZW1xdW88L2E+PC9saT4KKzxsaT48YSBocmVmPSJyZW1xdW8uaHRtbCNpbmRleC1yZW1xdW9mLTEzMCI+PGNvZGU+cmVtcXVvZjwvY29kZT48L2E+OiA8YSBocmVmPSJyZW1xdW8uaHRtbCNyZW1xdW8iPnJlbXF1bzwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJpbnQuaHRtbCNpbmRleC1yaW50LTEzMSI+PGNvZGU+cmludDwvY29kZT48L2E+OiA8YSBocmVmPSJyaW50Lmh0bWwjcmludCI+cmludDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InJpbnQuaHRtbCNpbmRleC1yaW50Zi0xMzIiPjxjb2RlPnJpbnRmPC9jb2RlPjwvYT46IDxhIGhyZWY9InJpbnQuaHRtbCNyaW50Ij5yaW50PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icm91bmQuaHRtbCNpbmRleC1yb3VuZC0xMzMiPjxjb2RlPnJvdW5kPC9jb2RlPjwvYT46IDxhIGhyZWY9InJvdW5kLmh0bWwjcm91bmQiPnJvdW5kPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0icm91bmQuaHRtbCNpbmRleC1yb3VuZGYtMTM0Ij48Y29kZT5yb3VuZGY8L2NvZGU+PC9hPjogPGEgaHJlZj0icm91bmQuaHRtbCNyb3VuZCI+cm91bmQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzY2FsYm4uaHRtbCNpbmRleC1zY2FsYmxuLTEzNyI+PGNvZGU+c2NhbGJsbjwvY29kZT48L2E+OiA8YSBocmVmPSJzY2FsYm4uaHRtbCNzY2FsYm4iPnNjYWxibjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNjYWxibi5odG1sI2luZGV4LXNjYWxibG5mLTEzOCI+PGNvZGU+c2NhbGJsbmY8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2NhbGJuLmh0bWwjc2NhbGJuIj5zY2FsYm48L2E+PC9saT4KKzxsaT48YSBocmVmPSJzY2FsYm4uaHRtbCNpbmRleC1zY2FsYm4tMTM1Ij48Y29kZT5zY2FsYm48L2NvZGU+PC9hPjogPGEgaHJlZj0ic2NhbGJuLmh0bWwjc2NhbGJuIj5zY2FsYm48L2E+PC9saT4KKzxsaT48YSBocmVmPSJzY2FsYm4uaHRtbCNpbmRleC1zY2FsYm5mLTEzNiI+PGNvZGU+c2NhbGJuZjwvY29kZT48L2E+OiA8YSBocmVmPSJzY2FsYm4uaHRtbCNzY2FsYm4iPnNjYWxibjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpZ25iaXQuaHRtbCNpbmRleC1zaWduYml0LTEzOSI+PGNvZGU+c2lnbmJpdDwvY29kZT48L2E+OiA8YSBocmVmPSJzaWduYml0Lmh0bWwjc2lnbmJpdCI+c2lnbmJpdDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpbi5odG1sI2luZGV4LXNpbi0xNDAiPjxjb2RlPnNpbjwvY29kZT48L2E+OiA8YSBocmVmPSJzaW4uaHRtbCNzaW4iPnNpbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InNpbi5odG1sI2luZGV4LXNpbmYtMTQxIj48Y29kZT5zaW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpbi5odG1sI3NpbiI+c2luPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2luaC5odG1sI2luZGV4LXNpbmgtMTQ0Ij48Y29kZT5zaW5oPC9jb2RlPjwvYT46IDxhIGhyZWY9InNpbmguaHRtbCNzaW5oIj5zaW5oPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0ic2luaC5odG1sI2luZGV4LXNpbmhmLTE0NSI+PGNvZGU+c2luaGY8L2NvZGU+PC9hPjogPGEgaHJlZj0ic2luaC5odG1sI3NpbmgiPnNpbmg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzcXJ0Lmh0bWwjaW5kZXgtc3FydC0xNDYiPjxjb2RlPnNxcnQ8L2NvZGU+PC9hPjogPGEgaHJlZj0ic3FydC5odG1sI3NxcnQiPnNxcnQ8L2E+PC9saT4KKzxsaT48YSBocmVmPSJzcXJ0Lmh0bWwjaW5kZXgtc3FydGYtMTQ3Ij48Y29kZT5zcXJ0ZjwvY29kZT48L2E+OiA8YSBocmVmPSJzcXJ0Lmh0bWwjc3FydCI+c3FydDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ik1hdGguaHRtbCNpbmRleC1zdHVicy0zIj5zdHViczwvYT46IDxhIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWF0aC5odG1sI2luZGV4LXN1cHBvcnQtc3Vicm91dGluZXMtMiI+c3VwcG9ydCBzdWJyb3V0aW5lczwvYT46IDxhIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iTWF0aC5odG1sI2luZGV4LXN5c3RlbS1jYWxscy0xIj5zeXN0ZW0gY2FsbHM8L2E+OiA8YSBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT48L2xpPgorPGxpPjxhIGhyZWY9InRhbi5odG1sI2luZGV4LXRhbi0xNDgiPjxjb2RlPnRhbjwvY29kZT48L2E+OiA8YSBocmVmPSJ0YW4uaHRtbCN0YW4iPnRhbjwvYT48L2xpPgorPGxpPjxhIGhyZWY9InRhbi5odG1sI2luZGV4LXRhbmYtMTQ5Ij48Y29kZT50YW5mPC9jb2RlPjwvYT46IDxhIGhyZWY9InRhbi5odG1sI3RhbiI+dGFuPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idGFuaC5odG1sI2luZGV4LXRhbmgtMTUwIj48Y29kZT50YW5oPC9jb2RlPjwvYT46IDxhIGhyZWY9InRhbmguaHRtbCN0YW5oIj50YW5oPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idGFuaC5odG1sI2luZGV4LXRhbmhmLTE1MSI+PGNvZGU+dGFuaGY8L2NvZGU+PC9hPjogPGEgaHJlZj0idGFuaC5odG1sI3RhbmgiPnRhbmg8L2E+PC9saT4KKzxsaT48YSBocmVmPSJnYW1tYS5odG1sI2luZGV4LXRnYW1tYS03MSI+PGNvZGU+dGdhbW1hPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdhbW1hLmh0bWwjZ2FtbWEiPmdhbW1hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iZ2FtbWEuaHRtbCNpbmRleC10Z2FtbWFmLTcyIj48Y29kZT50Z2FtbWFmPC9jb2RlPjwvYT46IDxhIGhyZWY9ImdhbW1hLmh0bWwjZ2FtbWEiPmdhbW1hPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idHJ1bmMuaHRtbCNpbmRleC10cnVuYy0xNTIiPjxjb2RlPnRydW5jPC9jb2RlPjwvYT46IDxhIGhyZWY9InRydW5jLmh0bWwjdHJ1bmMiPnRydW5jPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0idHJ1bmMuaHRtbCNpbmRleC10cnVuY2YtMTUzIj48Y29kZT50cnVuY2Y8L2NvZGU+PC9hPjogPGEgaHJlZj0idHJ1bmMuaHRtbCN0cnVuYyI+dHJ1bmM8L2E+PC9saT4KKzxsaT48YSBocmVmPSJqTi5odG1sI2luZGV4LXkwLTI1Ij48Y29kZT55MDwvY29kZT48L2E+OiA8YSBocmVmPSJqTi5odG1sI2pOIj5qTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImpOLmh0bWwjaW5kZXgteTBmLTI2Ij48Y29kZT55MGY8L2NvZGU+PC9hPjogPGEgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+PC9saT4KKzxsaT48YSBocmVmPSJqTi5odG1sI2luZGV4LXkxLTI3Ij48Y29kZT55MTwvY29kZT48L2E+OiA8YSBocmVmPSJqTi5odG1sI2pOIj5qTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImpOLmh0bWwjaW5kZXgteTFmLTI4Ij48Y29kZT55MWY8L2NvZGU+PC9hPjogPGEgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+PC9saT4KKzxsaT48YSBocmVmPSJqTi5odG1sI2luZGV4LXluLTI5Ij48Y29kZT55bjwvY29kZT48L2E+OiA8YSBocmVmPSJqTi5odG1sI2pOIj5qTjwvYT48L2xpPgorPGxpPjxhIGhyZWY9ImpOLmh0bWwjaW5kZXgteW5mLTMwIj48Y29kZT55bmY8L2NvZGU+PC9hPjogPGEgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+PC9saT4KKzwvdWw+Cis8ZGl2IGNsYXNzPSJjb250ZW50cyI+Cis8aDI+VGFibGUgb2YgQ29udGVudHM8L2gyPgorPHVsPgorPGxpPjxhIG5hbWU9InRvY19Ub3AiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5MSUJNPC9hPgorPGxpPjxhIG5hbWU9InRvY19NYXRoIiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+MSBNYXRoZW1hdGljYWwgRnVuY3Rpb25zICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bWF0aC5oPC9zcGFuPjwvc2FtcD4pPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9InZlcnNpb24uaHRtbCN2ZXJzaW9uIj4xLjEgRXJyb3IgSGFuZGxpbmc8L2E+Cis8bGk+PGEgaHJlZj0idmVyc2lvbi5odG1sI3ZlcnNpb24iPjEuMiBTdGFuZGFyZHMgQ29tcGxpYW5jZSBBbmQgUG9ydGFiaWxpdHk8L2E+Cis8bGk+PGEgaHJlZj0iYWNvcy5odG1sI2Fjb3MiPjEuMyA8Y29kZT5hY29zPC9jb2RlPiwgPGNvZGU+YWNvc2Y8L2NvZGU+Jm1kYXNoO2FyYyBjb3NpbmU8L2E+Cis8bGk+PGEgaHJlZj0iYWNvc2guaHRtbCNhY29zaCI+MS40IDxjb2RlPmFjb3NoPC9jb2RlPiwgPGNvZGU+YWNvc2hmPC9jb2RlPiZtZGFzaDtpbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lPC9hPgorPGxpPjxhIGhyZWY9ImFzaW4uaHRtbCNhc2luIj4xLjUgPGNvZGU+YXNpbjwvY29kZT4sIDxjb2RlPmFzaW5mPC9jb2RlPiZtZGFzaDthcmMgc2luZTwvYT4KKzxsaT48YSBocmVmPSJhc2luaC5odG1sI2FzaW5oIj4xLjYgPGNvZGU+YXNpbmg8L2NvZGU+LCA8Y29kZT5hc2luaGY8L2NvZGU+Jm1kYXNoO2ludmVyc2UgaHlwZXJib2xpYyBzaW5lPC9hPgorPGxpPjxhIGhyZWY9ImF0YW4uaHRtbCNhdGFuIj4xLjcgPGNvZGU+YXRhbjwvY29kZT4sIDxjb2RlPmF0YW5mPC9jb2RlPiZtZGFzaDthcmMgdGFuZ2VudDwvYT4KKzxsaT48YSBocmVmPSJhdGFuMi5odG1sI2F0YW4yIj4xLjggPGNvZGU+YXRhbjI8L2NvZGU+LCA8Y29kZT5hdGFuMmY8L2NvZGU+Jm1kYXNoO2FyYyB0YW5nZW50IG9mIHkveDwvYT4KKzxsaT48YSBocmVmPSJhdGFuaC5odG1sI2F0YW5oIj4xLjkgPGNvZGU+YXRhbmg8L2NvZGU+LCA8Y29kZT5hdGFuaGY8L2NvZGU+Jm1kYXNoO2ludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50PC9hPgorPGxpPjxhIGhyZWY9ImpOLmh0bWwjak4iPjEuMTAgPGNvZGU+ak48L2NvZGU+LCA8Y29kZT5qTmY8L2NvZGU+LCA8Y29kZT55TjwvY29kZT4sIDxjb2RlPnlOZjwvY29kZT4mbWRhc2g7QmVzc2VsIGZ1bmN0aW9uczwvYT4KKzxsaT48YSBocmVmPSJjYnJ0Lmh0bWwjY2JydCI+MS4xMSA8Y29kZT5jYnJ0PC9jb2RlPiwgPGNvZGU+Y2JydGY8L2NvZGU+Jm1kYXNoO2N1YmUgcm9vdDwvYT4KKzxsaT48YSBocmVmPSJjb3B5c2lnbi5odG1sI2NvcHlzaWduIj4xLjEyIDxjb2RlPmNvcHlzaWduPC9jb2RlPiwgPGNvZGU+Y29weXNpZ25mPC9jb2RlPiZtZGFzaDtzaWduIG9mIDx2YXI+eTwvdmFyPiwgbWFnbml0dWRlIG9mIDx2YXI+eDwvdmFyPjwvYT4KKzxsaT48YSBocmVmPSJjb3NoLmh0bWwjY29zaCI+MS4xMyA8Y29kZT5jb3NoPC9jb2RlPiwgPGNvZGU+Y29zaGY8L2NvZGU+Jm1kYXNoO2h5cGVyYm9saWMgY29zaW5lPC9hPgorPGxpPjxhIGhyZWY9ImVyZi5odG1sI2VyZiI+MS4xNCA8Y29kZT5lcmY8L2NvZGU+LCA8Y29kZT5lcmZmPC9jb2RlPiwgPGNvZGU+ZXJmYzwvY29kZT4sIDxjb2RlPmVyZmNmPC9jb2RlPiZtZGFzaDtlcnJvciBmdW5jdGlvbjwvYT4KKzxsaT48YSBocmVmPSJleHAuaHRtbCNleHAiPjEuMTUgPGNvZGU+ZXhwPC9jb2RlPiwgPGNvZGU+ZXhwZjwvY29kZT4mbWRhc2g7ZXhwb25lbnRpYWw8L2E+Cis8bGk+PGEgaHJlZj0iZXhwMi5odG1sI2V4cDIiPjEuMTYgPGNvZGU+ZXhwMjwvY29kZT4sIDxjb2RlPmV4cDJmPC9jb2RlPiZuZGFzaDtleHBvbmVudGlhbCwgYmFzZSAyPC9hPgorPGxpPjxhIGhyZWY9ImV4cG0xLmh0bWwjZXhwbTEiPjEuMTcgPGNvZGU+ZXhwbTE8L2NvZGU+LCA8Y29kZT5leHBtMWY8L2NvZGU+Jm1kYXNoO2V4cG9uZW50aWFsIG1pbnVzIDE8L2E+Cis8bGk+PGEgaHJlZj0iZmFicy5odG1sI2ZhYnMiPjEuMTggPGNvZGU+ZmFiczwvY29kZT4sIDxjb2RlPmZhYnNmPC9jb2RlPiZtZGFzaDthYnNvbHV0ZSB2YWx1ZSAobWFnbml0dWRlKTwvYT4KKzxsaT48YSBocmVmPSJmZGltLmh0bWwjZmRpbSI+MS4xOSA8Y29kZT5mZGltPC9jb2RlPiwgPGNvZGU+ZmRpbWY8L2NvZGU+Jm5kYXNoO3Bvc2l0aXZlIGRpZmZlcmVuY2U8L2E+Cis8bGk+PGEgaHJlZj0iZmxvb3IuaHRtbCNmbG9vciI+MS4yMCA8Y29kZT5mbG9vcjwvY29kZT4sIDxjb2RlPmZsb29yZjwvY29kZT4sIDxjb2RlPmNlaWw8L2NvZGU+LCA8Y29kZT5jZWlsZjwvY29kZT4mbWRhc2g7Zmxvb3IgYW5kIGNlaWxpbmc8L2E+Cis8bGk+PGEgaHJlZj0iZm1hLmh0bWwjZm1hIj4xLjIxIDxjb2RlPmZtYTwvY29kZT4sIDxjb2RlPmZtYWY8L2NvZGU+Jm5kYXNoO2Zsb2F0aW5nIG11bHRpcGx5IGFkZDwvYT4KKzxsaT48YSBocmVmPSJmbWF4Lmh0bWwjZm1heCI+MS4yMiA8Y29kZT5mbWF4PC9jb2RlPiwgPGNvZGU+Zm1heGY8L2NvZGU+Jm5kYXNoO21heGltdW08L2E+Cis8bGk+PGEgaHJlZj0iZm1pbi5odG1sI2ZtaW4iPjEuMjMgPGNvZGU+Zm1pbjwvY29kZT4sIDxjb2RlPmZtaW5mPC9jb2RlPiZuZGFzaDttaW5pbXVtPC9hPgorPGxpPjxhIGhyZWY9ImZtb2QuaHRtbCNmbW9kIj4xLjI0IDxjb2RlPmZtb2Q8L2NvZGU+LCA8Y29kZT5mbW9kZjwvY29kZT4mbWRhc2g7ZmxvYXRpbmctcG9pbnQgcmVtYWluZGVyIChtb2R1bG8pPC9hPgorPGxpPjxhIGhyZWY9ImZyZXhwLmh0bWwjZnJleHAiPjEuMjUgPGNvZGU+ZnJleHA8L2NvZGU+LCA8Y29kZT5mcmV4cGY8L2NvZGU+Jm1kYXNoO3NwbGl0IGZsb2F0aW5nLXBvaW50IG51bWJlcjwvYT4KKzxsaT48YSBocmVmPSJnYW1tYS5odG1sI2dhbW1hIj4xLjI2IDxjb2RlPmdhbW1hPC9jb2RlPiwgPGNvZGU+Z2FtbWFmPC9jb2RlPiwgPGNvZGU+bGdhbW1hPC9jb2RlPiwgPGNvZGU+bGdhbW1hZjwvY29kZT4sIDxjb2RlPmdhbW1hX3I8L2NvZGU+LCA8Y29kZT5nYW1tYWZfcjwvY29kZT4sIDxjb2RlPmxnYW1tYV9yPC9jb2RlPiwgPGNvZGU+bGdhbW1hZl9yPC9jb2RlPiwgPGNvZGU+dGdhbW1hPC9jb2RlPiwgYW5kIDxjb2RlPnRnYW1tYWY8L2NvZGU+Jm5kYXNoO2xvZ2FyaXRobWljIGFuZCBwbGFpbiBnYW1tYSBmdW5jdGlvbnM8L2E+Cis8bGk+PGEgaHJlZj0iaHlwb3QuaHRtbCNoeXBvdCI+MS4yNyA8Y29kZT5oeXBvdDwvY29kZT4sIDxjb2RlPmh5cG90ZjwvY29kZT4mbWRhc2g7ZGlzdGFuY2UgZnJvbSBvcmlnaW48L2E+Cis8bGk+PGEgaHJlZj0iaWxvZ2IuaHRtbCNpbG9nYiI+MS4yOCA8Y29kZT5pbG9nYjwvY29kZT4sIDxjb2RlPmlsb2diZjwvY29kZT4mbWRhc2g7Z2V0IGV4cG9uZW50IG9mIGZsb2F0aW5nLXBvaW50IG51bWJlcjwvYT4KKzxsaT48YSBocmVmPSJpbmZpbml0eS5odG1sI2luZmluaXR5Ij4xLjI5IDxjb2RlPmluZmluaXR5PC9jb2RlPiwgPGNvZGU+aW5maW5pdHlmPC9jb2RlPiZuZGFzaDtyZXByZXNlbnRhdGlvbiBvZiBpbmZpbml0eTwvYT4KKzxsaT48YSBocmVmPSJpc2dyZWF0ZXIuaHRtbCNpc2dyZWF0ZXIiPjEuMzAgPGNvZGU+aXNncmVhdGVyPC9jb2RlPiwgPGNvZGU+aXNncmVhdGVyZXF1YWw8L2NvZGU+LCA8Y29kZT5pc2xlc3M8L2NvZGU+LCA8Y29kZT5pc2xlc3NlcXVhbDwvY29kZT4sIDxjb2RlPmlzbGVzc2dyZWF0ZXI8L2NvZGU+LCBhbmQgPGNvZGU+aXN1bm9yZGVyZWQ8L2NvZGU+Jm5kYXNoO2NvbXBhcmlzb24gbWFjcm9zPC9hPgorPGxpPjxhIGhyZWY9ImZwY2xhc3NpZnkuaHRtbCNmcGNsYXNzaWZ5Ij4xLjMxIDxjb2RlPmZwY2xhc3NpZnk8L2NvZGU+LCA8Y29kZT5pc2Zpbml0ZTwvY29kZT4sIDxjb2RlPmlzaW5mPC9jb2RlPiwgPGNvZGU+aXNuYW48L2NvZGU+LCBhbmQgPGNvZGU+aXNub3JtYWw8L2NvZGU+Jm5kYXNoO2Zsb2F0aW5nLXBvaW50IGNsYXNzaWZpY2F0aW9uIG1hY3JvczsgPGNvZGU+ZmluaXRlPC9jb2RlPiwgPGNvZGU+ZmluaXRlZjwvY29kZT4sIDxjb2RlPmlzaW5mPC9jb2RlPiwgPGNvZGU+aXNpbmZmPC9jb2RlPiwgPGNvZGU+aXNuYW48L2NvZGU+LCA8Y29kZT5pc25hbmY8L2NvZGU+Jm5kYXNoO3Rlc3QgZm9yIGV4Y2VwdGlvbmFsIG51bWJlcnM8L2E+Cis8bGk+PGEgaHJlZj0ibGRleHAuaHRtbCNsZGV4cCI+MS4zMiA8Y29kZT5sZGV4cDwvY29kZT4sIDxjb2RlPmxkZXhwZjwvY29kZT4mbWRhc2g7bG9hZCBleHBvbmVudDwvYT4KKzxsaT48YSBocmVmPSJsb2cuaHRtbCNsb2ciPjEuMzMgPGNvZGU+bG9nPC9jb2RlPiwgPGNvZGU+bG9nZjwvY29kZT4mbWRhc2g7bmF0dXJhbCBsb2dhcml0aG1zPC9hPgorPGxpPjxhIGhyZWY9ImxvZzEwLmh0bWwjbG9nMTAiPjEuMzQgPGNvZGU+bG9nMTA8L2NvZGU+LCA8Y29kZT5sb2cxMGY8L2NvZGU+Jm1kYXNoO2Jhc2UgMTAgbG9nYXJpdGhtczwvYT4KKzxsaT48YSBocmVmPSJsb2cxcC5odG1sI2xvZzFwIj4xLjM1IDxjb2RlPmxvZzFwPC9jb2RlPiwgPGNvZGU+bG9nMXBmPC9jb2RlPiZtZGFzaDtsb2cgb2YgPGNvZGU+MSArIDwvY29kZT48dmFyPng8L3Zhcj48L2E+Cis8bGk+PGEgaHJlZj0ibG9nMi5odG1sI2xvZzIiPjEuMzYgPGNvZGU+bG9nMjwvY29kZT4sIDxjb2RlPmxvZzJmPC9jb2RlPiZuZGFzaDtiYXNlIDIgbG9nYXJpdGhtPC9hPgorPGxpPjxhIGhyZWY9ImxvZ2IuaHRtbCNsb2diIj4xLjM3IDxjb2RlPmxvZ2I8L2NvZGU+LCA8Y29kZT5sb2diZjwvY29kZT4mbmRhc2g7Z2V0IGV4cG9uZW50IG9mIGZsb2F0aW5nLXBvaW50IG51bWJlcjwvYT4KKzxsaT48YSBocmVmPSJscmludC5odG1sI2xyaW50Ij4xLjM4IDxjb2RlPmxyaW50PC9jb2RlPiwgPGNvZGU+bHJpbnRmPC9jb2RlPiwgPGNvZGU+bGxyaW50PC9jb2RlPiwgPGNvZGU+bGxyaW50ZjwvY29kZT4mbmRhc2g7cm91bmQgdG8gaW50ZWdlcjwvYT4KKzxsaT48YSBocmVmPSJscm91bmQuaHRtbCNscm91bmQiPjEuMzkgPGNvZGU+bHJvdW5kPC9jb2RlPiwgPGNvZGU+bHJvdW5kZjwvY29kZT4sIDxjb2RlPmxscm91bmQ8L2NvZGU+LCA8Y29kZT5sbHJvdW5kZjwvY29kZT4mbmRhc2g7cm91bmQgdG8gaW50ZWdlciwgdG8gbmVhcmVzdDwvYT4KKzxsaT48YSBocmVmPSJtYXRoZXJyLmh0bWwjbWF0aGVyciI+MS40MCA8Y29kZT5tYXRoZXJyPC9jb2RlPiZtZGFzaDttb2RpZmlhYmxlIG1hdGggZXJyb3IgaGFuZGxlcjwvYT4KKzxsaT48YSBocmVmPSJtb2RmLmh0bWwjbW9kZiI+MS40MSA8Y29kZT5tb2RmPC9jb2RlPiwgPGNvZGU+bW9kZmY8L2NvZGU+Jm1kYXNoO3NwbGl0IGZyYWN0aW9uYWwgYW5kIGludGVnZXIgcGFydHM8L2E+Cis8bGk+PGEgaHJlZj0ibmFuLmh0bWwjbmFuIj4xLjQyIDxjb2RlPm5hbjwvY29kZT4sIDxjb2RlPm5hbmY8L2NvZGU+Jm1kYXNoO3JlcHJlc2VudGF0aW9uIG9mICZsZHF1bztOb3QgYSBOdW1iZXImcmRxdW87PC9hPgorPGxpPjxhIGhyZWY9Im5lYXJieWludC5odG1sI25lYXJieWludCI+MS40MyA8Y29kZT5uZWFyYnlpbnQ8L2NvZGU+LCA8Y29kZT5uZWFyYnlpbnRmPC9jb2RlPiZuZGFzaDtyb3VuZCB0byBpbnRlZ2VyPC9hPgorPGxpPjxhIGhyZWY9Im5leHRhZnRlci5odG1sI25leHRhZnRlciI+MS40NCA8Y29kZT5uZXh0YWZ0ZXI8L2NvZGU+LCA8Y29kZT5uZXh0YWZ0ZXJmPC9jb2RlPiZtZGFzaDtnZXQgbmV4dCBudW1iZXI8L2E+Cis8bGk+PGEgaHJlZj0icG93Lmh0bWwjcG93Ij4xLjQ1IDxjb2RlPnBvdzwvY29kZT4sIDxjb2RlPnBvd2Y8L2NvZGU+Jm1kYXNoO3ggdG8gdGhlIHBvd2VyIHk8L2E+Cis8bGk+PGEgaHJlZj0icmVtYWluZGVyLmh0bWwjcmVtYWluZGVyIj4xLjQ2IDxjb2RlPnJlbWFpbmRlcjwvY29kZT4sIDxjb2RlPnJlbWFpbmRlcmY8L2NvZGU+Jm1kYXNoO3JvdW5kIGFuZCAgcmVtYWluZGVyPC9hPgorPGxpPjxhIGhyZWY9InJlbXF1by5odG1sI3JlbXF1byI+MS40NyA8Y29kZT5yZW1xdW88L2NvZGU+LCA8Y29kZT5yZW1xdW9mPC9jb2RlPiZuZGFzaDtyZW1haW5kZXIgYW5kIHBhcnQgb2YgcXVvdGllbnQ8L2E+Cis8bGk+PGEgaHJlZj0icmludC5odG1sI3JpbnQiPjEuNDggPGNvZGU+cmludDwvY29kZT4sIDxjb2RlPnJpbnRmPC9jb2RlPiZuZGFzaDtyb3VuZCB0byBpbnRlZ2VyPC9hPgorPGxpPjxhIGhyZWY9InJvdW5kLmh0bWwjcm91bmQiPjEuNDkgPGNvZGU+cm91bmQ8L2NvZGU+LCA8Y29kZT5yb3VuZGY8L2NvZGU+Jm5kYXNoO3JvdW5kIHRvIGludGVnZXIsIHRvIG5lYXJlc3Q8L2E+Cis8bGk+PGEgaHJlZj0ic2NhbGJuLmh0bWwjc2NhbGJuIj4xLjUwIDxjb2RlPnNjYWxibjwvY29kZT4sIDxjb2RlPnNjYWxibmY8L2NvZGU+LCA8Y29kZT5zY2FsYmxuPC9jb2RlPiwgPGNvZGU+c2NhbGJsbmY8L2NvZGU+Jm5kYXNoO3NjYWxlIGJ5IHBvd2VyIG9mIEZMVF9SQURJWCAoPTIpPC9hPgorPGxpPjxhIGhyZWY9InNpZ25iaXQuaHRtbCNzaWduYml0Ij4xLjUxIDxjb2RlPnNpZ25iaXQ8L2NvZGU+Jm5kYXNoO0RvZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGhhdmUgbmVnYXRpdmUgc2lnbj88L2E+Cis8bGk+PGEgaHJlZj0ic2luLmh0bWwjc2luIj4xLjUyIDxjb2RlPnNpbjwvY29kZT4sIDxjb2RlPnNpbmY8L2NvZGU+LCA8Y29kZT5jb3M8L2NvZGU+LCA8Y29kZT5jb3NmPC9jb2RlPiZtZGFzaDtzaW5lIG9yIGNvc2luZTwvYT4KKzxsaT48YSBocmVmPSJzaW5oLmh0bWwjc2luaCI+MS41MyA8Y29kZT5zaW5oPC9jb2RlPiwgPGNvZGU+c2luaGY8L2NvZGU+Jm1kYXNoO2h5cGVyYm9saWMgc2luZTwvYT4KKzxsaT48YSBocmVmPSJzcXJ0Lmh0bWwjc3FydCI+MS41NCA8Y29kZT5zcXJ0PC9jb2RlPiwgPGNvZGU+c3FydGY8L2NvZGU+Jm1kYXNoO3Bvc2l0aXZlIHNxdWFyZSByb290PC9hPgorPGxpPjxhIGhyZWY9InRhbi5odG1sI3RhbiI+MS41NSA8Y29kZT50YW48L2NvZGU+LCA8Y29kZT50YW5mPC9jb2RlPiZtZGFzaDt0YW5nZW50PC9hPgorPGxpPjxhIGhyZWY9InRhbmguaHRtbCN0YW5oIj4xLjU2IDxjb2RlPnRhbmg8L2NvZGU+LCA8Y29kZT50YW5oZjwvY29kZT4mbWRhc2g7aHlwZXJib2xpYyB0YW5nZW50PC9hPgorPGxpPjxhIGhyZWY9InRydW5jLmh0bWwjdHJ1bmMiPjEuNTcgPGNvZGU+dHJ1bmM8L2NvZGU+LCA8Y29kZT50cnVuY2Y8L2NvZGU+Jm5kYXNoO3JvdW5kIHRvIGludGVnZXIsIHRvd2FyZHMgemVybzwvYT4KKzwvbGk+PC91bD4KKzxsaT48YSBuYW1lPSJ0b2NfQ29tcGxleCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPjIgTWF0aGVtYXRpY2FsIENvbXBsZXggRnVuY3Rpb25zICg8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+Y29tcGxleC5oPC9zcGFuPjwvc2FtcD4pPC9hPgorPHVsPgorPGxpPjxhIGhyZWY9ImNhYnMuaHRtbCNjYWJzIj4yLjEgPGNvZGU+Y2FiczwvY29kZT4sIDxjb2RlPmNhYnNmPC9jb2RlPiZtZGFzaDtjb21wbGV4IGFic29sdXRlLXZhbHVlPC9hPgorPGxpPjxhIGhyZWY9ImNhY29zLmh0bWwjY2Fjb3MiPjIuMiA8Y29kZT5jYWNvczwvY29kZT4sIDxjb2RlPmNhY29zZjwvY29kZT4mbWRhc2g7Y29tcGxleCBhcmMgY29zaW5lPC9hPgorPGxpPjxhIGhyZWY9ImNhY29zaC5odG1sI2NhY29zaCI+Mi4zIDxjb2RlPmNhY29zaDwvY29kZT4sIDxjb2RlPmNhY29zaGY8L2NvZGU+Jm1kYXNoO2NvbXBsZXggYXJjIGh5cGVyYm9saWMgY29zaW5lPC9hPgorPGxpPjxhIGhyZWY9ImNhcmcuaHRtbCNjYXJnIj4yLjQgPGNvZGU+Y2FyZzwvY29kZT4sIDxjb2RlPmNhcmdmPC9jb2RlPiZtZGFzaDthcmd1bWVudCAocGhhc2UgYW5nbGUpPC9hPgorPGxpPjxhIGhyZWY9ImNhc2luLmh0bWwjY2FzaW4iPjIuNSA8Y29kZT5jYXNpbjwvY29kZT4sIDxjb2RlPmNhc2luZjwvY29kZT4mbWRhc2g7Y29tcGxleCBhcmMgc2luZTwvYT4KKzxsaT48YSBocmVmPSJjYXNpbmguaHRtbCNjYXNpbmgiPjIuNiA8Y29kZT5jYXNpbmg8L2NvZGU+LCA8Y29kZT5jYXNpbmhmPC9jb2RlPiZtZGFzaDtjb21wbGV4IGFyYyBoeXBlcmJvbGljIHNpbmU8L2E+Cis8bGk+PGEgaHJlZj0iY2F0YW4uaHRtbCNjYXRhbiI+Mi43IDxjb2RlPmNhdGFuPC9jb2RlPiwgPGNvZGU+Y2F0YW5mPC9jb2RlPiZtZGFzaDtjb21wbGV4IGFyYyB0YW5nZW50PC9hPgorPGxpPjxhIGhyZWY9ImNhdGFuaC5odG1sI2NhdGFuaCI+Mi44IDxjb2RlPmNhdGFuaDwvY29kZT4sIDxjb2RlPmNhdGFuaGY8L2NvZGU+Jm1kYXNoO2NvbXBsZXggYXJjIGh5cGVyYm9saWMgdGFuZ2VudDwvYT4KKzxsaT48YSBocmVmPSJjY29zLmh0bWwjY2NvcyI+Mi45IDxjb2RlPmNjb3M8L2NvZGU+LCA8Y29kZT5jY29zZjwvY29kZT4mbWRhc2g7Y29tcGxleCBjb3NpbmU8L2E+Cis8bGk+PGEgaHJlZj0iY2Nvc2guaHRtbCNjY29zaCI+Mi4xMCA8Y29kZT5jY29zaDwvY29kZT4sIDxjb2RlPmNjb3NoZjwvY29kZT4mbWRhc2g7Y29tcGxleCBoeXBlcmJvbGljIGNvc2luZTwvYT4KKzxsaT48YSBocmVmPSJjZXhwLmh0bWwjY2V4cCI+Mi4xMSA8Y29kZT5jZXhwPC9jb2RlPiwgPGNvZGU+Y2V4cGY8L2NvZGU+Jm1kYXNoO2NvbXBsZXggYmFzZS1lIGV4cG9uZW50aWFsPC9hPgorPGxpPjxhIGhyZWY9ImNpbWFnLmh0bWwjY2ltYWciPjIuMTIgPGNvZGU+Y2ltYWc8L2NvZGU+LCA8Y29kZT5jaW1hZ2Y8L2NvZGU+Jm1kYXNoO2ltYWdpbmFyeSBwYXJ0PC9hPgorPGxpPjxhIGhyZWY9ImNsb2cuaHRtbCNjbG9nIj4yLjEzIDxjb2RlPmNsb2c8L2NvZGU+LCA8Y29kZT5jbG9nZjwvY29kZT4mbWRhc2g7Y29tcGxleCBiYXNlLWUgbG9nYXJpdGhtPC9hPgorPGxpPjxhIGhyZWY9ImNvbmouaHRtbCNjb25qIj4yLjE0IDxjb2RlPmNvbmo8L2NvZGU+LCA8Y29kZT5jb25qZjwvY29kZT4mbWRhc2g7Y29tcGxleCBjb25qdWdhdGU8L2E+Cis8bGk+PGEgaHJlZj0iY3Bvdy5odG1sI2Nwb3ciPjIuMTUgPGNvZGU+Y3BvdzwvY29kZT4sIDxjb2RlPmNwb3dmPC9jb2RlPiZtZGFzaDtjb21wbGV4IHBvd2VyPC9hPgorPGxpPjxhIGhyZWY9ImNwcm9qLmh0bWwjY3Byb2oiPjIuMTYgPGNvZGU+Y3Byb2o8L2NvZGU+LCA8Y29kZT5jcHJvamY8L2NvZGU+Jm1kYXNoOyBSaWVtYW5uIHNwaGVyZSBwcm9qZWN0aW9uPC9hPgorPGxpPjxhIGhyZWY9ImNyZWFsLmh0bWwjY3JlYWwiPjIuMTcgPGNvZGU+Y3JlYWw8L2NvZGU+LCA8Y29kZT5jcmVhbGY8L2NvZGU+Jm1kYXNoO3JlYWwgcGFydDwvYT4KKzxsaT48YSBocmVmPSJjc2luLmh0bWwjY3NpbiI+Mi4xOCA8Y29kZT5jc2luPC9jb2RlPiwgPGNvZGU+Y3NpbmY8L2NvZGU+Jm1kYXNoO2NvbXBsZXggc2luZTwvYT4KKzxsaT48YSBocmVmPSJjc2luaC5odG1sI2NzaW5oIj4yLjE5IDxjb2RlPmNzaW5oPC9jb2RlPiwgPGNvZGU+Y3NpbmhmPC9jb2RlPiZtZGFzaDtjb21wbGV4IGh5cGVyYm9saWMgc2luZTwvYT4KKzxsaT48YSBocmVmPSJjc3FydC5odG1sI2NzcXJ0Ij4yLjIwIDxjb2RlPmNzcXJ0PC9jb2RlPiwgPGNvZGU+Y3NxcnRmPC9jb2RlPiZtZGFzaDtjb21wbGV4IHNxdWFyZSByb290PC9hPgorPGxpPjxhIGhyZWY9ImN0YW4uaHRtbCNjdGFuIj4yLjIxIDxjb2RlPmN0YW48L2NvZGU+LCA8Y29kZT5jdGFuZjwvY29kZT4mbWRhc2g7Y29tcGxleCB0YW5nZW50PC9hPgorPGxpPjxhIGhyZWY9ImN0YW5oLmh0bWwjY3RhbmgiPjIuMjIgPGNvZGU+Y3Rhbmg8L2NvZGU+LCA8Y29kZT5jdGFuZjwvY29kZT4mbWRhc2g7Y29tcGxleCBoeXBlcmJvbGljIHRhbmdlbnQ8L2E+Cis8L2xpPjwvdWw+Cis8bGk+PGEgbmFtZT0idG9jX1JlZW50cmFuY3kiIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij4zIFJlZW50cmFuY3kgUHJvcGVydGllcyBvZiA8Y29kZT5saWJtPC9jb2RlPjwvYT4KKzxsaT48YSBuYW1lPSJ0b2NfTG9uZy1Eb3VibGUtRnVuY3Rpb25zIiBocmVmPSJMb25nLURvdWJsZS1GdW5jdGlvbnMuaHRtbCNMb25nLURvdWJsZS1GdW5jdGlvbnMiPjQgVGhlIGxvbmcgZG91YmxlIGZ1bmN0aW9uIHN1cHBvcnQgb2YgPGNvZGU+bGlibTwvY29kZT48L2E+Cis8bGk+PGEgbmFtZT0idG9jX0RvY3VtZW50LUluZGV4IiBocmVmPSJEb2N1bWVudC1JbmRleC5odG1sI0RvY3VtZW50LUluZGV4Ij5Eb2N1bWVudCBJbmRleDwvYT4KKzwvbGk+PC91bD4KKzwvZGl2PgorCis8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9Mb25nLURvdWJsZS1GdW5jdGlvbnMuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL0xvbmctRG91YmxlLUZ1bmN0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGQ1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9Mb25nLURvdWJsZS1GdW5jdGlvbnMuaHRtbApAQCAtMCwwICsxLDQxIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5Mb25nIERvdWJsZSBGdW5jdGlvbnMgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iUmVlbnRyYW5jeS5odG1sI1JlZW50cmFuY3kiIHRpdGxlPSJSZWVudHJhbmN5Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iRG9jdW1lbnQtSW5kZXguaHRtbCNEb2N1bWVudC1JbmRleCIgdGl0bGU9IkRvY3VtZW50IEluZGV4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJMb25nLURvdWJsZS1GdW5jdGlvbnMiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iRG9jdW1lbnQtSW5kZXguaHRtbCNEb2N1bWVudC1JbmRleCI+RG9jdW1lbnQgSW5kZXg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJSZWVudHJhbmN5Lmh0bWwjUmVlbnRyYW5jeSI+UmVlbnRyYW5jeTwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj40IFRoZSBsb25nIGRvdWJsZSBmdW5jdGlvbiBzdXBwb3J0IG9mIDxjb2RlPmxpYm08L2NvZGU+PC9oMj4KKworPHA+Q3VycmVudGx5LCB0aGUgZnVsbCBzZXQgb2YgbG9uZyBkb3VibGUgbWF0aCBmdW5jdGlvbnMgaXMgb25seSBwcm92aWRlZAorb24gcGxhdGZvcm1zIHdoZXJlIGxvbmcgZG91YmxlIGVxdWFscyBkb3VibGUuIAorRm9yIHN1Y2ggcGxhdGZvcm1zLCB0aGUgbG9uZyBkb3VibGUgbWF0aCBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGFzIGNhbGxzIHRvIHRoZSBkb3VibGUgdmVyc2lvbnMuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL01hdGguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL01hdGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQ0MTk3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvTWF0aC5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5NYXRoIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIiB0aXRsZT0iVG9wIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJNYXRoIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj5Ub3A8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgyIGNsYXNzPSJjaGFwdGVyIj4xIE1hdGhlbWF0aWNhbCBGdW5jdGlvbnMgKDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5tYXRoLmg8L3NwYW4+PC9zYW1wPik8L2gyPgorCis8cD5UaGlzIGNoYXB0ZXIgZ3JvdXBzIGEgd2lkZSB2YXJpZXR5IG9mIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMuICBUaGUKK2NvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucyBhcmUgaW4gPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPm1hdGguaDwvc3Bhbj48L3NhbXA+LiAKK1R3byBkZWZpbml0aW9ucyBmcm9tIDxzYW1wPjxzcGFuIGNsYXNzPSJmaWxlIj5tYXRoLmg8L3NwYW4+PC9zYW1wPiBhcmUgb2YgcGFydGljdWxhciBpbnRlcmVzdC4KKworICAgICA8b2wgdHlwZT0xIHN0YXJ0PTE+Cis8bGk+VGhlIHJlcHJlc2VudGF0aW9uIG9mIGluZmluaXR5IGFzIGEgPGNvZGU+ZG91YmxlPC9jb2RlPiBpcyBkZWZpbmVkIGFzCis8Y29kZT5IVUdFX1ZBTDwvY29kZT47IHRoaXMgbnVtYmVyIGlzIHJldHVybmVkIG9uIG92ZXJmbG93IGJ5IG1hbnkgZnVuY3Rpb25zLiAKK1RoZSBtYWNybyA8Y29kZT5IVUdFX1ZBTEY8L2NvZGU+IGlzIGEgY29ycmVzcG9uZGluZyB2YWx1ZSBmb3IgPGNvZGU+ZmxvYXQ8L2NvZGU+LgorCisgICAgIDxsaT5UaGUgc3RydWN0dXJlIDxjb2RlPmV4Y2VwdGlvbjwvY29kZT4gaXMgdXNlZCB3aGVuIHlvdSB3cml0ZSBjdXN0b21pemVkIGVycm9yCitoYW5kbGVycyBmb3IgdGhlIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMuICBZb3UgY2FuIGN1c3RvbWl6ZSBlcnJvcgoraGFuZGxpbmcgZm9yIG1vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGJ5IGRlZmluaW5nIHlvdXIgb3duIHZlcnNpb24gb2YKKzxjb2RlPm1hdGhlcnI8L2NvZGU+OyBzZWUgdGhlIHNlY3Rpb24gb24gPGNvZGU+bWF0aGVycjwvY29kZT4gZm9yIGRldGFpbHMuCisgICAgICAgIDwvb2w+CisKKyAgIDxwPjxhIG5hbWU9ImluZGV4LXN5c3RlbS1jYWxscy0xIj48L2E+PGEgbmFtZT0iaW5kZXgtc3VwcG9ydC1zdWJyb3V0aW5lcy0yIj48L2E+PGEgbmFtZT0iaW5kZXgtc3R1YnMtMyI+PC9hPjxhIG5hbWU9ImluZGV4LU9TLXN0dWJzLTQiPjwvYT5TaW5jZSB0aGUgZXJyb3IgaGFuZGxpbmcgY29kZSBjYWxscyA8Y29kZT5mcHV0czwvY29kZT4sIHRoZSBtYXRoZW1hdGljYWwKK3N1YnJvdXRpbmVzIHJlcXVpcmUgc3R1YnMgb3IgbWluaW1hbCBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBzYW1lIGxpc3QKK29mIE9TIHN1YnJvdXRpbmVzIGFzIDxjb2RlPmZwdXRzPC9jb2RlPjogPGNvZGU+Y2xvc2U8L2NvZGU+LCA8Y29kZT5mc3RhdDwvY29kZT4sCis8Y29kZT5pc2F0dHk8L2NvZGU+LCA8Y29kZT5sc2VlazwvY29kZT4sIDxjb2RlPnJlYWQ8L2NvZGU+LCA8Y29kZT5zYnJrPC9jb2RlPiwgPGNvZGU+d3JpdGU8L2NvZGU+LiAKK1NlZSA8YSBocmVmPSIuLi9saWJjL3N5c2NhbGxzLmh0bWwjc3lzY2FsbHMiPlN5c3RlbSBDYWxsczwvYT4sCitmb3IgYSBkaXNjdXNzaW9uIGFuZCBmb3Igc2FtcGxlIG1pbmltYWwgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIHN1cHBvcnQKK3N1YnJvdXRpbmVzLgorCisgICA8cD5BbHRlcm5hdGl2ZSBkZWNsYXJhdGlvbnMgb2YgdGhlIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMsIHdoaWNoIGV4cGxvaXQKK3NwZWNpZmljIG1hY2hpbmUgY2FwYWJpbGl0aWVzIHRvIG9wZXJhdGUgZmFzdGVyJm1kYXNoO2J1dCBnZW5lcmFsbHkgaGF2ZQorbGVzcyBlcnJvciBjaGVja2luZyBhbmQgbWF5IHJlZmxlY3QgYWRkaXRpb25hbCBsaW1pdGF0aW9ucyBvbiBzb21lCittYWNoaW5lcyZtZGFzaDthcmUgYXZhaWxhYmxlIHdoZW4geW91IGluY2x1ZGUgPHNhbXA+PHNwYW4gY2xhc3M9ImZpbGUiPmZhc3RtYXRoLmg8L3NwYW4+PC9zYW1wPiBpbnN0ZWFkIG9mCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bWF0aC5oPC9zcGFuPjwvc2FtcD4uCisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJ2ZXJzaW9uLmh0bWwjdmVyc2lvbiI+dmVyc2lvbjwvYT46IAlWZXJzaW9uIG9mIGxpYnJhcnkKKzxsaT48YSBhY2Nlc3NrZXk9IjIiIGhyZWY9ImFjb3MuaHRtbCNhY29zIj5hY29zPC9hPjogCUFyY2Nvc2luZQorPGxpPjxhIGFjY2Vzc2tleT0iMyIgaHJlZj0iYWNvc2guaHRtbCNhY29zaCI+YWNvc2g8L2E+OiAJSW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZQorPGxpPjxhIGFjY2Vzc2tleT0iNCIgaHJlZj0iYXNpbi5odG1sI2FzaW4iPmFzaW48L2E+OiAJQXJjc2luZQorPGxpPjxhIGFjY2Vzc2tleT0iNSIgaHJlZj0iYXNpbmguaHRtbCNhc2luaCI+YXNpbmg8L2E+OiAJSW52ZXJzZSBoeXBlcmJvbGljIHNpbmUKKzxsaT48YSBhY2Nlc3NrZXk9IjYiIGhyZWY9ImF0YW4uaHRtbCNhdGFuIj5hdGFuPC9hPjogCUFyY3RhbmdlbnQKKzxsaT48YSBhY2Nlc3NrZXk9IjciIGhyZWY9ImF0YW4yLmh0bWwjYXRhbjIiPmF0YW4yPC9hPjogCUFyY3RhbmdlbnQgb2YgeS94Cis8bGk+PGEgYWNjZXNza2V5PSI4IiBocmVmPSJhdGFuaC5odG1sI2F0YW5oIj5hdGFuaDwvYT46IAlJbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudAorPGxpPjxhIGFjY2Vzc2tleT0iOSIgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+OiAJICAgICAgICBCZXNzZWwgZnVuY3Rpb25zIChqTiwgeU4pCis8bGk+PGEgaHJlZj0iY2JydC5odG1sI2NicnQiPmNicnQ8L2E+OiAJQ3ViZSByb290Cis8bGk+PGEgaHJlZj0iY29weXNpZ24uaHRtbCNjb3B5c2lnbiI+Y29weXNpZ248L2E+OiAJU2lnbiBvZiBZLCBtYWduaXR1ZGUgb2YgWAorPGxpPjxhIGhyZWY9ImNvc2guaHRtbCNjb3NoIj5jb3NoPC9hPjogCUh5cGVyYm9saWMgY29zaW5lCis8bGk+PGEgaHJlZj0iZXJmLmh0bWwjZXJmIj5lcmY8L2E+OiAJCUVycm9yIGZ1bmN0aW9uIChlcmYsIGVyZmMpCis8bGk+PGEgaHJlZj0iZXhwLmh0bWwjZXhwIj5leHA8L2E+OiAJCUV4cG9uZW50aWFsLCBiYXNlIGUKKzxsaT48YSBocmVmPSJleHAyLmh0bWwjZXhwMiI+ZXhwMjwvYT46IAlFeHBvbmVudGlhbCwgYmFzZSAyCis8bGk+PGEgaHJlZj0iZXhwbTEuaHRtbCNleHBtMSI+ZXhwbTE8L2E+OiAJRXhwb25lbnRpYWwsIGJhc2UgZSwgb2YgeCAtIDEKKzxsaT48YSBocmVmPSJmYWJzLmh0bWwjZmFicyI+ZmFiczwvYT46IAlBYnNvbHV0ZSB2YWx1ZSAobWFnbml0dWRlKQorPGxpPjxhIGhyZWY9ImZkaW0uaHRtbCNmZGltIj5mZGltPC9hPjogCVBvc2l0aXZlIGRpZmZlcmVuY2UKKzxsaT48YSBocmVmPSJmbG9vci5odG1sI2Zsb29yIj5mbG9vcjwvYT46IAlGbG9vciBhbmQgY2VpbGluZyAoZmxvb3IsIGNlaWwpCis8bGk+PGEgaHJlZj0iZm1hLmh0bWwjZm1hIj5mbWE8L2E+OiAJCUZsb2F0aW5nIG11bHRpcGx5IGFkZAorPGxpPjxhIGhyZWY9ImZtYXguaHRtbCNmbWF4Ij5mbWF4PC9hPjogCU1heGltdW0KKzxsaT48YSBocmVmPSJmbWluLmh0bWwjZm1pbiI+Zm1pbjwvYT46IAlNaW5pbXVtCis8bGk+PGEgaHJlZj0iZm1vZC5odG1sI2Ztb2QiPmZtb2Q8L2E+OiAJRmxvYXRpbmctcG9pbnQgcmVtYWluZGVyIChtb2R1bG8pCis8bGk+PGEgaHJlZj0iZnBjbGFzc2lmeS5odG1sI2ZwY2xhc3NpZnkiPmZwY2xhc3NpZnk8L2E+OiAJRmxvYXRpbmctcG9pbnQgY2xhc3NpZmljYXRpb24gbWFjcm8KKzxsaT48YSBocmVmPSJmcmV4cC5odG1sI2ZyZXhwIj5mcmV4cDwvYT46IAlTcGxpdCBmbG9hdGluZy1wb2ludCBudW1iZXIKKzxsaT48YSBocmVmPSJnYW1tYS5odG1sI2dhbW1hIj5nYW1tYTwvYT46IAlMb2dhcml0aG1pYyBnYW1tYSBmdW5jdGlvbgorPGxpPjxhIGhyZWY9Imh5cG90Lmh0bWwjaHlwb3QiPmh5cG90PC9hPjogCURpc3RhbmNlIGZyb20gb3JpZ2luCis8bGk+PGEgaHJlZj0iaWxvZ2IuaHRtbCNpbG9nYiI+aWxvZ2I8L2E+OiAJR2V0IGV4cG9uZW50Cis8bGk+PGEgaHJlZj0iaW5maW5pdHkuaHRtbCNpbmZpbml0eSI+aW5maW5pdHk8L2E+OiAJRmxvYXRpbmcgaW5maW5pdHkKKzxsaT48YSBocmVmPSJpc2dyZWF0ZXIuaHRtbCNpc2dyZWF0ZXIiPmlzZ3JlYXRlcjwvYT46IAlDb21wYXJpc29uIG1hY3JvcworPGxpPjxhIGhyZWY9ImxkZXhwLmh0bWwjbGRleHAiPmxkZXhwPC9hPjogCVNjYWxlIGJ5IGEgcG93ZXIgb2YgMgorPGxpPjxhIGhyZWY9ImxvZy5odG1sI2xvZyI+bG9nPC9hPjogCQlOYXR1cmFsIGxvZ2FyaXRobXMKKzxsaT48YSBocmVmPSJsb2cxMC5odG1sI2xvZzEwIj5sb2cxMDwvYT46IAlCYXNlIDEwIGxvZ2FyaXRobXMKKzxsaT48YSBocmVmPSJsb2cxcC5odG1sI2xvZzFwIj5sb2cxcDwvYT46IAlMb2cgb2YgMSArIFgKKzxsaT48YSBocmVmPSJsb2cyLmh0bWwjbG9nMiI+bG9nMjwvYT46IAlCYXNlIDIgbG9nYXJpdGhtcworPGxpPjxhIGhyZWY9ImxvZ2IuaHRtbCNsb2diIj5sb2diPC9hPjogCUdldCBleHBvbmVudAorPGxpPjxhIGhyZWY9ImxyaW50Lmh0bWwjbHJpbnQiPmxyaW50PC9hPjogCVJvdW5kIHRvIGludGVnZXIKKzxsaT48YSBocmVmPSJscm91bmQuaHRtbCNscm91bmQiPmxyb3VuZDwvYT46IAlSb3VuZCB0byBpbnRlZ2VyLCBhd2F5IGZyb20gemVybyAobHJvdW5kLCBsbHJvdW5kKQorPGxpPjxhIGhyZWY9Im1hdGhlcnIuaHRtbCNtYXRoZXJyIj5tYXRoZXJyPC9hPjogCU1vZGlmaWFibGUgbWF0aCBlcnJvciBoYW5kbGVyCis8bGk+PGEgaHJlZj0ibW9kZi5odG1sI21vZGYiPm1vZGY8L2E+OiAJU3BsaXQgZnJhY3Rpb25hbCBhbmQgaW50ZWdlciBwYXJ0cworPGxpPjxhIGhyZWY9Im5hbi5odG1sI25hbiI+bmFuPC9hPjogCQlGbG9hdGluZyBOb3QgYSBOdW1iZXIKKzxsaT48YSBocmVmPSJuZWFyYnlpbnQuaHRtbCNuZWFyYnlpbnQiPm5lYXJieWludDwvYT46IAlSb3VuZCB0byBpbnRlZ2VyCis8bGk+PGEgaHJlZj0ibmV4dGFmdGVyLmh0bWwjbmV4dGFmdGVyIj5uZXh0YWZ0ZXI8L2E+OiAJR2V0IG5leHQgcmVwcmVzZW50YWJsZSBudW1iZXIKKzxsaT48YSBocmVmPSJwb3cuaHRtbCNwb3ciPnBvdzwvYT46IAkJWCB0byB0aGUgcG93ZXIgWQorPGxpPjxhIGhyZWY9InJlbWFpbmRlci5odG1sI3JlbWFpbmRlciI+cmVtYWluZGVyPC9hPjogCXJlbWFpbmRlciBvZiBYIGRpdmlkZWQgYnkgWQorPGxpPjxhIGhyZWY9InJlbXF1by5odG1sI3JlbXF1byI+cmVtcXVvPC9hPjogCVJlbWFpbmRlciBhbmQgcGFydCBvZiBxdW90aWVudAorPGxpPjxhIGhyZWY9InJpbnQuaHRtbCNyaW50Ij5yaW50PC9hPjogCVJvdW5kIHRvIGludGVnZXIKKzxsaT48YSBocmVmPSJyb3VuZC5odG1sI3JvdW5kIj5yb3VuZDwvYT46IAlSb3VuZCB0byBpbnRlZ2VyLCBhd2F5IGZyb20gemVybworPGxpPjxhIGhyZWY9InNjYWxibi5odG1sI3NjYWxibiI+c2NhbGJuPC9hPjogCVNjYWxlIGJ5IGEgcG93ZXIgb2YgRkxUX1JBRElYICgyKQorPGxpPjxhIGhyZWY9InNpZ25iaXQuaHRtbCNzaWduYml0Ij5zaWduYml0PC9hPjogCURvZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGhhdmUgbmVnYXRpdmUgc2lnbj8gCis8bGk+PGEgaHJlZj0ic2luLmh0bWwjc2luIj5zaW48L2E+OiAJCVNpbmUgb3IgY29zaW5lIChzaW4sIGNvcykKKzxsaT48YSBocmVmPSJzaW5oLmh0bWwjc2luaCI+c2luaDwvYT46IAlIeXBlcmJvbGljIHNpbmUKKzxsaT48YSBocmVmPSJzcXJ0Lmh0bWwjc3FydCI+c3FydDwvYT46IAlQb3NpdGl2ZSBzcXVhcmUgcm9vdAorPGxpPjxhIGhyZWY9InRhbi5odG1sI3RhbiI+dGFuPC9hPjogCQlUYW5nZW50Cis8bGk+PGEgaHJlZj0idGFuaC5odG1sI3RhbmgiPnRhbmg8L2E+OiAJSHlwZXJib2xpYyB0YW5nZW50Cis8bGk+PGEgaHJlZj0idHJ1bmMuaHRtbCN0cnVuYyI+dHJ1bmM8L2E+OiAJUm91bmQgdG8gaW50ZWdlciwgdG93YXJkcyB6ZXJvCis8L3VsPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9SZWVudHJhbmN5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9SZWVudHJhbmN5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4NWRjOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL1JlZW50cmFuY3kuaHRtbApAQCAtMCwwICsxLDU1IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5SZWVudHJhbmN5IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9IkxvbmctRG91YmxlLUZ1bmN0aW9ucy5odG1sI0xvbmctRG91YmxlLUZ1bmN0aW9ucyIgdGl0bGU9IkxvbmcgRG91YmxlIEZ1bmN0aW9ucyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iUmVlbnRyYW5jeSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJMb25nLURvdWJsZS1GdW5jdGlvbnMuaHRtbCNMb25nLURvdWJsZS1GdW5jdGlvbnMiPkxvbmcgRG91YmxlIEZ1bmN0aW9uczwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPlRvcDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDIgY2xhc3M9ImNoYXB0ZXIiPjMgUmVlbnRyYW5jeSBQcm9wZXJ0aWVzIG9mIDxjb2RlPmxpYm08L2NvZGU+PC9oMj4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmVlbnRyYW5jeS0xOTgiPjwvYT48YSBuYW1lPSJpbmRleC1nX3RfMDA0MGNvZGVfMDA3Ym1hdGhlcnJfMDA3ZC1hbmQtcmVlbnRyYW5jeS0xOTkiPjwvYT5XaGVuIGEgbGlibSBmdW5jdGlvbiBkZXRlY3RzIGFuIGV4Y2VwdGlvbmFsIGNhc2UsIDxjb2RlPmVycm5vPC9jb2RlPiBtYXkgYmUKK3NldCwgdGhlIDxjb2RlPm1hdGhlcnI8L2NvZGU+IGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQsIGFuZCBhIGVycm9yIG1lc3NhZ2UKK21heSBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uICBUaGlzIGJlaGF2aW9yIG1heSBub3QKK2JlIHJlZW50cmFudC4KKworPCEtLSBUaGUgZXhhY3QgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVycm9yIGhhbmRsaW5nIC0tPgorPCEtLSBtb2RlIChJRUVFLCBQT1NJWCwgWC9PcGVuLCBvciBTVklEKS4gLS0+CisgICA8cD5XaXRoIHJlZW50cmFudCBDIGxpYnJhcmllcyBsaWtlIHRoZSBSZWQgSGF0IG5ld2xpYiBDIGxpYnJhcnksIDxjb2RlPmVycm5vPC9jb2RlPiBpcworYSBtYWNybyB3aGljaCBleHBhbmRzIHRvIHRoZSBwZXItdGhyZWFkIGVycm9yIHZhbHVlLiAgVGhpcyBtYWtlcyBpdCB0aHJlYWQKK3NhZmUuCisKKyAgIDxwPldoZW4gdGhlIHVzZXIgcHJvdmlkZXMgaGlzIG93biA8Y29kZT5tYXRoZXJyPC9jb2RlPiBmdW5jdGlvbiBpdCBtdXN0IGJlCityZWVudHJhbnQgZm9yIHRoZSBtYXRoIGxpYnJhcnkgYXMgYSB3aG9sZSB0byBiZSByZWVudHJhbnQuCisKKyAgIDxwPkluIG5vcm1hbCBkZWJ1Z2dlZCBwcm9ncmFtcywgdGhlcmUgYXJlIHVzdWFsbHkgbm8gbWF0aCBzdWJyb3V0aW5lCitlcnJvcnMmbWRhc2g7YW5kIHRoZXJlZm9yZSBubyBhc3NpZ25tZW50cyB0byA8Y29kZT5lcnJubzwvY29kZT4gYW5kIG5vIDxjb2RlPm1hdGhlcnI8L2NvZGU+CitjYWxsczsgaW4gdGhhdCBzaXR1YXRpb24sIHRoZSBtYXRoIGZ1bmN0aW9ucyBiZWhhdmUgcmVlbnRyYW50bHkuCisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Fjb3MuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Fjb3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjdmNzAwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvYWNvcy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmFjb3MgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InZlcnNpb24uaHRtbCN2ZXJzaW9uIiB0aXRsZT0idmVyc2lvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImFjb3NoLmh0bWwjYWNvc2giIHRpdGxlPSJhY29zaCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYWNvcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhY29zaC5odG1sI2Fjb3NoIj5hY29zaDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InZlcnNpb24uaHRtbCN2ZXJzaW9uIj52ZXJzaW9uPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjMgPGNvZGU+YWNvczwvY29kZT4sIDxjb2RlPmFjb3NmPC9jb2RlPiZtZGFzaDthcmMgY29zaW5lPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtYWNvcy01Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWNvc2YtNiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGFjb3MoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGFjb3NmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorCisgICA8cD48Y29kZT5hY29zPC9jb2RlPiBjb21wdXRlcyB0aGUgaW52ZXJzZSBjb3NpbmUgKGFyYyBjb3NpbmUpIG9mIHRoZSBpbnB1dCB2YWx1ZS4gCitBcmd1bWVudHMgdG8gPGNvZGU+YWNvczwvY29kZT4gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgJm1pbnVzOzEgdG8gMS4KKworICAgPHA+PGNvZGU+YWNvc2Y8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5hY29zPC9jb2RlPiwgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMKK2l0cyBjYWxjdWxhdGlvbnMgb24gPGNvZGU+ZmxvYXRzPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+YWNvczwvY29kZT4gYW5kIDxjb2RlPmFjb3NmPC9jb2RlPiByZXR1cm4gdmFsdWVzIGluIHJhZGlhbnMsIGluIHRoZSByYW5nZSBvZiAwIHRvIHBpLgorCisgICA8cD5JZiA8dmFyPng8L3Zhcj4gaXMgbm90IGJldHdlZW4gJm1pbnVzOzEgYW5kIDEsIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBOYU4KKyhub3QgYSBudW1iZXIpIHRoZSBnbG9iYWwgdmFyaWFibGUgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byA8Y29kZT5FRE9NPC9jb2RlPiwgYW5kIGEKKzxjb2RlPkRPTUFJTiBlcnJvcjwvY29kZT4gbWVzc2FnZSBpcyBzZW50IGFzIHN0YW5kYXJkIGVycm9yIG91dHB1dC4KKworICAgPHA+WW91IGNhbiBtb2RpZnkgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZXNlIGZ1bmN0aW9ucyB1c2luZyA8Y29kZT5tYXRoZXJyPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9hY29zaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvYWNvc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDEzN2FjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvYWNvc2guaHRtbApAQCAtMCwwICsxLDY4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hY29zaCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iYWNvcy5odG1sI2Fjb3MiIHRpdGxlPSJhY29zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXNpbi5odG1sI2FzaW4iIHRpdGxlPSJhc2luIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJhY29zaCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhc2luLmh0bWwjYXNpbiI+YXNpbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImFjb3MuaHRtbCNhY29zIj5hY29zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjQgPGNvZGU+YWNvc2g8L2NvZGU+LCA8Y29kZT5hY29zaGY8L2NvZGU+Jm1kYXNoO2ludmVyc2UgaHlwZXJib2xpYyBjb3NpbmU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hY29zaC03Ij48L2E+PGEgbmFtZT0iaW5kZXgtYWNvc2hmLTgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBhY29zaChkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgYWNvc2hmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+YWNvc2g8L2NvZGU+IGNhbGN1bGF0ZXMgdGhlIGludmVyc2UgaHlwZXJib2xpYyBjb3NpbmUgb2YgPHZhcj54PC92YXI+LiAKKzxjb2RlPmFjb3NoPC9jb2RlPiBpcyBkZWZpbmVkIGFzCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIGxvZyg8dmFyPng8L3Zhcj4gKyBzcXJ0KDx2YXI+eDwvdmFyPio8dmFyPng8L3Zhcj4tMSkpCis8L3ByZT4KKyAgIDxwPjx2YXI+eDwvdmFyPiBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLgorCisgICA8cD48Y29kZT5hY29zaGY8L2NvZGU+IGlzIGlkZW50aWNhbCwgb3RoZXIgdGhhbiB0YWtpbmcgYW5kIHJldHVybmluZyBmbG9hdHMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmFjb3NoPC9jb2RlPiBhbmQgPGNvZGU+YWNvc2hmPC9jb2RlPiByZXR1cm4gdGhlIGNhbGN1bGF0ZWQgdmFsdWUuICBJZiA8dmFyPng8L3Zhcj4KK2xlc3MgdGhhbiAxLCB0aGUgcmV0dXJuIHZhbHVlIGlzIE5hTiBhbmQgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byA8Y29kZT5FRE9NPC9jb2RlPi4KKworICAgPHA+WW91IGNhbiBjaGFuZ2UgdGhlIGVycm9yLWhhbmRsaW5nIGJlaGF2aW9yIHdpdGggdGhlIG5vbi1BTlNJCis8Y29kZT5tYXRoZXJyPC9jb2RlPiBmdW5jdGlvbi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK05laXRoZXIgPGNvZGU+YWNvc2g8L2NvZGU+IG5vciA8Y29kZT5hY29zaGY8L2NvZGU+IGFyZSBBTlNJIEMuICBUaGV5IGFyZSBub3QgcmVjb21tZW5kZWQKK2ZvciBwb3J0YWJsZSBwcm9ncmFtcy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9hc2luLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9hc2luLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyM2I5MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2FzaW4uaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hc2luIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhY29zaC5odG1sI2Fjb3NoIiB0aXRsZT0iYWNvc2giPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhc2luaC5odG1sI2FzaW5oIiB0aXRsZT0iYXNpbmgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImFzaW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iYXNpbmguaHRtbCNhc2luaCI+YXNpbmg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJhY29zaC5odG1sI2Fjb3NoIj5hY29zaDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS41IDxjb2RlPmFzaW48L2NvZGU+LCA8Y29kZT5hc2luZjwvY29kZT4mbWRhc2g7YXJjIHNpbmU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hc2luLTkiPjwvYT48YSBuYW1lPSJpbmRleC1hc2luZi0xMCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGFzaW4oZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGFzaW5mKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorCisgICA8cD48Y29kZT5hc2luPC9jb2RlPiBjb21wdXRlcyB0aGUgaW52ZXJzZSBzaW5lIChhcmMgc2luZSkgb2YgdGhlIGFyZ3VtZW50IDx2YXI+eDwvdmFyPi4gCitBcmd1bWVudHMgdG8gPGNvZGU+YXNpbjwvY29kZT4gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgJm1pbnVzOzEgdG8gMS4KKworICAgPHA+PGNvZGU+YXNpbmY8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5hc2luPC9jb2RlPiwgb3RoZXIgdGhhbiB0YWtpbmcgYW5kCityZXR1cm5pbmcgZmxvYXRzLgorCisgICA8cD5Zb3UgY2FuIG1vZGlmeSBlcnJvciBoYW5kbGluZyBmb3IgdGhlc2Ugcm91dGluZXMgdXNpbmcgPGNvZGU+bWF0aGVycjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmFzaW48L2NvZGU+IHJldHVybnMgdmFsdWVzIGluIHJhZGlhbnMsIGluIHRoZSByYW5nZSBvZiAtcGkvMiB0byBwaS8yLgorCisgICA8cD5JZiA8dmFyPng8L3Zhcj4gaXMgbm90IGluIHRoZSByYW5nZSAmbWludXM7MSB0byAxLCA8Y29kZT5hc2luPC9jb2RlPiBhbmQgPGNvZGU+YXNpbmY8L2NvZGU+CityZXR1cm4gTmFOIChub3QgYSBudW1iZXIpLCBzZXQgdGhlIGdsb2JhbCB2YXJpYWJsZSA8Y29kZT5lcnJubzwvY29kZT4gdG8KKzxjb2RlPkVET008L2NvZGU+LCBhbmQgaXNzdWUgYSA8Y29kZT5ET01BSU4gZXJyb3I8L2NvZGU+IG1lc3NhZ2UuCisKKyAgIDxwPllvdSBjYW4gY2hhbmdlIHRoaXMgZXJyb3IgdHJlYXRtZW50IHVzaW5nIDxjb2RlPm1hdGhlcnI8L2NvZGU+LgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2FzaW5oLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9hc2luaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTdlZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9hc2luaC5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmFzaW5oIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJhc2luLmh0bWwjYXNpbiIgdGl0bGU9ImFzaW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJhdGFuLmh0bWwjYXRhbiIgdGl0bGU9ImF0YW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImFzaW5oIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImF0YW4uaHRtbCNhdGFuIj5hdGFuPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iYXNpbi5odG1sI2FzaW4iPmFzaW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNiA8Y29kZT5hc2luaDwvY29kZT4sIDxjb2RlPmFzaW5oZjwvY29kZT4mbWRhc2g7aW52ZXJzZSBoeXBlcmJvbGljIHNpbmU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1hc2luaC0xMSI+PC9hPjxhIG5hbWU9ImluZGV4LWFzaW5oZi0xMiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGFzaW5oKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCBhc2luaGYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5hc2luaDwvY29kZT4gY2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgb2YgPHZhcj54PC92YXI+LiAKKzxjb2RlPmFzaW5oPC9jb2RlPiBpcyBkZWZpbmVkIGFzCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgIHNnbig8dmFyPng8L3Zhcj4pICogbG9nKGFicyg8dmFyPng8L3Zhcj4pICsgc3FydCgxKzx2YXI+eDwvdmFyPio8dmFyPng8L3Zhcj4pKQorPC9wcmU+CisgICA8cD48Y29kZT5hc2luaGY8L2NvZGU+IGlzIGlkZW50aWNhbCwgb3RoZXIgdGhhbiB0YWtpbmcgYW5kIHJldHVybmluZyBmbG9hdHMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmFzaW5oPC9jb2RlPiBhbmQgPGNvZGU+YXNpbmhmPC9jb2RlPiByZXR1cm4gdGhlIGNhbGN1bGF0ZWQgdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitOZWl0aGVyIDxjb2RlPmFzaW5oPC9jb2RlPiBub3IgPGNvZGU+YXNpbmhmPC9jb2RlPiBhcmUgQU5TSSBDLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2F0YW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2F0YW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmI0M2I4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvYXRhbi5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmF0YW4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImFzaW5oLmh0bWwjYXNpbmgiIHRpdGxlPSJhc2luaCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImF0YW4yLmh0bWwjYXRhbjIiIHRpdGxlPSJhdGFuMiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYXRhbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhdGFuMi5odG1sI2F0YW4yIj5hdGFuMjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImFzaW5oLmh0bWwjYXNpbmgiPmFzaW5oPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjcgPGNvZGU+YXRhbjwvY29kZT4sIDxjb2RlPmF0YW5mPC9jb2RlPiZtZGFzaDthcmMgdGFuZ2VudDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWF0YW4tMTMiPjwvYT48YSBuYW1lPSJpbmRleC1hdGFuZi0xNCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGF0YW4oZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGF0YW5mKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorCisgICA8cD48Y29kZT5hdGFuPC9jb2RlPiBjb21wdXRlcyB0aGUgaW52ZXJzZSB0YW5nZW50IChhcmMgdGFuZ2VudCkgb2YgdGhlIGlucHV0IHZhbHVlLgorCisgICA8cD48Y29kZT5hdGFuZjwvY29kZT4gaXMgaWRlbnRpY2FsIHRvIDxjb2RlPmF0YW48L2NvZGU+LCBzYXZlIHRoYXQgaXQgb3BlcmF0ZXMgb24gPGNvZGU+ZmxvYXRzPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+YXRhbjwvY29kZT4gcmV0dXJucyBhIHZhbHVlIGluIHJhZGlhbnMsIGluIHRoZSByYW5nZSBvZiAtcGkvMiB0byBwaS8yLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+YXRhbjwvY29kZT4gaXMgQU5TSSBDLiAgPGNvZGU+YXRhbmY8L2NvZGU+IGlzIGFuIGV4dGVuc2lvbi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9hdGFuMi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvYXRhbjIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmFlN2U4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvYXRhbjIuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5hdGFuMiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iYXRhbi5odG1sI2F0YW4iIHRpdGxlPSJhdGFuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iYXRhbmguaHRtbCNhdGFuaCIgdGl0bGU9ImF0YW5oIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJhdGFuMiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhdGFuaC5odG1sI2F0YW5oIj5hdGFuaDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImF0YW4uaHRtbCNhdGFuIj5hdGFuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjggPGNvZGU+YXRhbjI8L2NvZGU+LCA8Y29kZT5hdGFuMmY8L2NvZGU+Jm1kYXNoO2FyYyB0YW5nZW50IG9mIHkveDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWF0YW4yLTE1Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXRhbjJmLTE2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgYXRhbjIoZG91YmxlIDx2YXI+eTwvdmFyPixkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgYXRhbjJmKGZsb2F0IDx2YXI+eTwvdmFyPixmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKworICAgPHA+PGNvZGU+YXRhbjI8L2NvZGU+IGNvbXB1dGVzIHRoZSBpbnZlcnNlIHRhbmdlbnQgKGFyYyB0YW5nZW50KSBvZiA8dmFyPnk8L3Zhcj4vPHZhcj54PC92YXI+LiAKKzxjb2RlPmF0YW4yPC9jb2RlPiBwcm9kdWNlcyB0aGUgY29ycmVjdCByZXN1bHQgZXZlbiBmb3IgYW5nbGVzIG5lYXIKK3BpLzIgb3IgLXBpLzIKKyh0aGF0IGlzLCB3aGVuIDx2YXI+eDwvdmFyPiBpcyBuZWFyIDApLgorCisgICA8cD48Y29kZT5hdGFuMmY8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5hdGFuMjwvY29kZT4sIHNhdmUgdGhhdCBpdCB0YWtlcyBhbmQgcmV0dXJucworPGNvZGU+ZmxvYXQ8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5hdGFuMjwvY29kZT4gYW5kIDxjb2RlPmF0YW4yZjwvY29kZT4gcmV0dXJuIGEgdmFsdWUgaW4gcmFkaWFucywgaW4gdGhlIHJhbmdlIG9mCistcGkgdG8gcGkuCisKKyAgIDxwPllvdSBjYW4gbW9kaWZ5IGVycm9yIGhhbmRsaW5nIGZvciB0aGVzZSBmdW5jdGlvbnMgdXNpbmcgPGNvZGU+bWF0aGVycjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5hdGFuMjwvY29kZT4gaXMgQU5TSSBDLiAgPGNvZGU+YXRhbjJmPC9jb2RlPiBpcyBhbiBleHRlbnNpb24uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvYXRhbmguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2F0YW5oLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzOWU3OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2F0YW5oLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+YXRhbmggLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImF0YW4yLmh0bWwjYXRhbjIiIHRpdGxlPSJhdGFuMiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImpOLmh0bWwjak4iIHRpdGxlPSJqTiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iYXRhbmgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJhdGFuMi5odG1sI2F0YW4yIj5hdGFuMjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS45IDxjb2RlPmF0YW5oPC9jb2RlPiwgPGNvZGU+YXRhbmhmPC9jb2RlPiZtZGFzaDtpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWF0YW5oLTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtYXRhbmhmLTE4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgYXRhbmgoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGF0YW5oZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmF0YW5oPC9jb2RlPiBjYWxjdWxhdGVzIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiA8dmFyPng8L3Zhcj4uCisKKyAgIDxwPjxjb2RlPmF0YW5oZjwvY29kZT4gaXMgaWRlbnRpY2FsLCBvdGhlciB0aGFuIHRha2luZyBhbmQgcmV0dXJuaW5nCis8Y29kZT5mbG9hdDwvY29kZT4gdmFsdWVzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8Y29kZT5hdGFuaDwvY29kZT4gYW5kIDxjb2RlPmF0YW5oZjwvY29kZT4gcmV0dXJuIHRoZSBjYWxjdWxhdGVkIHZhbHVlLgorCisgICA8cD5JZgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIDx2YXI+eDwvdmFyPnwKKzwvcHJlPgorICAgPHA+aXMgZ3JlYXRlciB0aGFuIDEsIHRoZSBnbG9iYWwgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byA8Y29kZT5FRE9NPC9jb2RlPiBhbmQKK3RoZSByZXN1bHQgaXMgYSBOYU4uICBBIDxjb2RlPkRPTUFJTiBlcnJvcjwvY29kZT4gaXMgcmVwb3J0ZWQuCisKKyAgIDxwPklmCis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgPHZhcj54PC92YXI+fAorPC9wcmU+CisgICA8cD5pcyAxLCB0aGUgZ2xvYmFsIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gPGNvZGU+RURPTTwvY29kZT47IGFuZCB0aGUgcmVzdWx0IGlzCitpbmZpbml0eSB3aXRoIHRoZSBzYW1lIHNpZ24gYXMgPGNvZGU+eDwvY29kZT4uICBBIDxjb2RlPlNJTkcgZXJyb3I8L2NvZGU+IGlzIHJlcG9ydGVkLgorCisgICA8cD5Zb3UgY2FuIG1vZGlmeSB0aGUgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZXNlIHJvdXRpbmVzIHVzaW5nCis8Y29kZT5tYXRoZXJyPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK05laXRoZXIgPGNvZGU+YXRhbmg8L2NvZGU+IG5vciA8Y29kZT5hdGFuaGY8L2NvZGU+IGFyZSBBTlNJIEMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2Ficy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2Ficy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZjVhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jYWJzLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y2FicyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2Fjb3MuaHRtbCNjYWNvcyIgdGl0bGU9ImNhY29zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjYWJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImNhY29zLmh0bWwjY2Fjb3MiPmNhY29zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjEgPGNvZGU+Y2FiczwvY29kZT4sIDxjb2RlPmNhYnNmPC9jb2RlPiZtZGFzaDtjb21wbGV4IGFic29sdXRlLXZhbHVlPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2Ficy0xNTQiPjwvYT48YSBuYW1lPSJpbmRleC1jYWJzZi0xNTUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjb21wbGV4LmgmZ3Q7CisgICAgIGRvdWJsZSBjYWJzKGRvdWJsZSBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGNhYnNmKGZsb2F0IGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGVzZSBmdW5jdGlvbnMgY29tcHV0ZSBjb21wdXRlIHRoZSBjb21wbGV4IGFic29sdXRlIHZhbHVlCisoYWxzbyBjYWxsZWQgbm9ybSwgbW9kdWx1cywgb3IgbWFnbml0dWRlKSBvZiA8dmFyPno8L3Zhcj4uCisKKyAgIDxwPjxjb2RlPmNhYnNmPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y2FiczwvY29kZT4sIGV4Y2VwdCB0aGF0IGl0IHBlcmZvcm1zCitpdHMgY2FsY3VsYXRpb25zIG9uIDxjb2RlPmZsb2F0cyBjb21wbGV4PC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIGNhYnMgZnVuY3Rpb25zIHJldHVybiB0aGUgY29tcGxleCBhYnNvbHV0ZSB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNhYnM8L2NvZGU+IGFuZCA8Y29kZT5jYWJzZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jYWNvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2Fjb3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODY0NTdmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2Fjb3MuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jYWNvcyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2Ficy5odG1sI2NhYnMiIHRpdGxlPSJjYWJzIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2Fjb3NoLmh0bWwjY2Fjb3NoIiB0aXRsZT0iY2Fjb3NoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjYWNvcyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjYWNvc2guaHRtbCNjYWNvc2giPmNhY29zaDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNhYnMuaHRtbCNjYWJzIj5jYWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjIgPGNvZGU+Y2Fjb3M8L2NvZGU+LCA8Y29kZT5jYWNvc2Y8L2NvZGU+Jm1kYXNoO2NvbXBsZXggYXJjIGNvc2luZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNhY29zLTE1NiI+PC9hPjxhIG5hbWU9ImluZGV4LWNhY29zZi0xNTciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjb21wbGV4LmgmZ3Q7CisgICAgIGRvdWJsZSBjb21wbGV4IGNhY29zKGRvdWJsZSBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGNvbXBsZXggY2Fjb3NmKGZsb2F0IGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGVzZSBmdW5jdGlvbnMgY29tcHV0ZSB0aGUgY29tcGxleCBhcmMgY29zaW5lIG9mIDx2YXI+ejwvdmFyPiwKK3dpdGggYnJhbmNoIGN1dHMgb3V0c2lkZSB0aGUgaW50ZXJ2YWwgWy0xLCArMV0gYWxvbmcgdGhlIHJlYWwgYXhpcy4KKworICAgPHA+PGNvZGU+Y2Fjb3NmPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y2Fjb3M8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggYXJjIGNvc2luZSB2YWx1ZSwgaW4gdGhlIHJhbmdlCitvZiBhIHN0cmlwIG1hdGhlbWF0aWNhbGx5ICB1bmJvdW5kZWQgIGFsb25nIHRoZSBpbWFnaW5hcnkgYXhpcworYW5kIGluIHRoZSBpbnRlcnZhbCBbMCwgcGldIGFsb25nIHRoZSByZWFsIGF4aXMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5jYWNvczwvY29kZT4gYW5kIDxjb2RlPmNhY29zZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jYWNvc2guaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NhY29zaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzBlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jYWNvc2guaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jYWNvc2ggLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNhY29zLmh0bWwjY2Fjb3MiIHRpdGxlPSJjYWNvcyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNhcmcuaHRtbCNjYXJnIiB0aXRsZT0iY2FyZyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY2Fjb3NoIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImNhcmcuaHRtbCNjYXJnIj5jYXJnPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iY2Fjb3MuaHRtbCNjYWNvcyI+Y2Fjb3M8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCI+Q29tcGxleDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMyA8Y29kZT5jYWNvc2g8L2NvZGU+LCA8Y29kZT5jYWNvc2hmPC9jb2RlPiZtZGFzaDtjb21wbGV4IGFyYyBoeXBlcmJvbGljIGNvc2luZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNhY29zaC0xNTgiPjwvYT48YSBuYW1lPSJpbmRleC1jYWNvc2hmLTE1OSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNvbXBsZXggY2Fjb3NoKGRvdWJsZSBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGNvbXBsZXggY2Fjb3NoZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGNvbXBsZXggYXJjIGh5cGVyYm9saWMgY29zaW5lIG9mIDx2YXI+ejwvdmFyPiwKK3dpdGggYSBicmFuY2ggY3V0IGF0IHZhbHVlcyBsZXNzIHRoYW4gMSBhbG9uZyB0aGUgcmVhbCBheGlzLgorCisgICA8cD48Y29kZT5jYWNvc2hmPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y2Fjb3NoPC9jb2RlPiwgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMKK2l0cyBjYWxjdWxhdGlvbnMgb24gPGNvZGU+ZmxvYXRzIGNvbXBsZXg8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBjb21wbGV4IGFyYyBoeXBlcmJvbGljIGNvc2luZSB2YWx1ZSwKK2luIHRoZSByYW5nZSBvZiBhIGhhbGYtc3RyaXAgb2Ygbm9uLW5lZ2F0aXZlIHZhbHVlcyBhbG9uZyB0aGUKK3JlYWwgYXhpcyBhbmQgaW4gdGhlIGludGVydmFsIFstaSAqIHBpLCAraSAqIHBpXSBhbG9uZyB0aGUKK2ltYWdpbmFyeSBheGlzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Y2Fjb3NoPC9jb2RlPiBhbmQgPGNvZGU+Y2Fjb3NoZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jYXJnLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jYXJnLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwNTdkYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NhcmcuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jYXJnIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCIgdGl0bGU9IkNvbXBsZXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjYWNvc2guaHRtbCNjYWNvc2giIHRpdGxlPSJjYWNvc2giPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjYXNpbi5odG1sI2Nhc2luIiB0aXRsZT0iY2FzaW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImNhcmciPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY2FzaW4uaHRtbCNjYXNpbiI+Y2FzaW48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjYWNvc2guaHRtbCNjYWNvc2giPmNhY29zaDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi40IDxjb2RlPmNhcmc8L2NvZGU+LCA8Y29kZT5jYXJnZjwvY29kZT4mbWRhc2g7YXJndW1lbnQgKHBoYXNlIGFuZ2xlKTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNhcmctMTYwIj48L2E+PGEgbmFtZT0iaW5kZXgtY2FyZ2YtMTYxIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y29tcGxleC5oJmd0OworICAgICBkb3VibGUgY2FyZyhkb3VibGUgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICBmbG9hdCBjYXJnZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGFyZ3VtZW50IChhbHNvIGNhbGxlZCBwaGFzZSBhbmdsZSkKK29mIDx2YXI+ejwvdmFyPiwgd2l0aCBhIGJyYW5jaCBjdXQgYWxvbmcgdGhlIG5lZ2F0aXZlIHJlYWwgYXhpcy4KKworICAgPHA+PGNvZGU+Y2FyZ2Y8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5jYXJnPC9jb2RlPiwgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMKK2l0cyBjYWxjdWxhdGlvbnMgb24gPGNvZGU+ZmxvYXRzIGNvbXBsZXg8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgY2FyZyBmdW5jdGlvbnMgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgaW4gdGhlCitpbnRlcnZhbCBbLXBpLCArcGldCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5jYXJnPC9jb2RlPiBhbmQgPGNvZGU+Y2FyZ2Y8L2NvZGU+IGFyZSBJU08gQzk5CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2FzaW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nhc2luLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5NGRhNwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nhc2luLmh0bWwKQEAgLTAsMCArMSw2MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y2FzaW4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNhcmcuaHRtbCNjYXJnIiB0aXRsZT0iY2FyZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNhc2luaC5odG1sI2Nhc2luaCIgdGl0bGU9ImNhc2luaCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY2FzaW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY2FzaW5oLmh0bWwjY2FzaW5oIj5jYXNpbmg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjYXJnLmh0bWwjY2FyZyI+Y2FyZzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi41IDxjb2RlPmNhc2luPC9jb2RlPiwgPGNvZGU+Y2FzaW5mPC9jb2RlPiZtZGFzaDtjb21wbGV4IGFyYyBzaW5lPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2FzaW4tMTYyIj48L2E+PGEgbmFtZT0iaW5kZXgtY2FzaW5mLTE2MyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNvbXBsZXggY2FzaW4oZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjYXNpbmYoZmxvYXQgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyBjb21wdXRlIHRoZSBjb21wbGV4IGFyYyBzaW5lIG9mIDx2YXI+ejwvdmFyPiwKK3dpdGggYnJhbmNoIGN1dHMgb3V0c2lkZSB0aGUgaW50ZXJ2YWwgWy0xLCArMV0gYWxvbmcgdGhlIHJlYWwgYXhpcy4KKworICAgPHA+PGNvZGU+Y2FzaW5mPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y2FzaW48L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggYXJjIHNpbmUgdmFsdWUsIGluIHRoZSByYW5nZQorb2YgYSBzdHJpcCBtYXRoZW1hdGljYWxseSAgdW5ib3VuZGVkICBhbG9uZyB0aGUgaW1hZ2luYXJ5IGF4aXMKK2FuZCBpbiB0aGUgaW50ZXJ2YWwgWy1waS8yLCArcGkvMl0gYWxvbmcgdGhlIHJlYWwgYXhpcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNhc2luPC9jb2RlPiBhbmQgPGNvZGU+Y2FzaW5mPC9jb2RlPiBhcmUgSVNPIEM5OQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nhc2luaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2FzaW5oLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwNDYwMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nhc2luaC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmNhc2luaCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2FzaW4uaHRtbCNjYXNpbiIgdGl0bGU9ImNhc2luIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2F0YW4uaHRtbCNjYXRhbiIgdGl0bGU9ImNhdGFuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjYXNpbmgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY2F0YW4uaHRtbCNjYXRhbiI+Y2F0YW48L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjYXNpbi5odG1sI2Nhc2luIj5jYXNpbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi42IDxjb2RlPmNhc2luaDwvY29kZT4sIDxjb2RlPmNhc2luaGY8L2NvZGU+Jm1kYXNoO2NvbXBsZXggYXJjIGh5cGVyYm9saWMgc2luZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNhc2luaC0xNjQiPjwvYT48YSBuYW1lPSJpbmRleC1jYXNpbmhmLTE2NSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNvbXBsZXggY2FzaW5oKGRvdWJsZSBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGNvbXBsZXggY2FzaW5oZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGNvbXBsZXggYXJjIGh5cGVyYm9saWMgc2luZSBvZiA8dmFyPno8L3Zhcj4sCit3aXRoIGJyYW5jaCBjdXRzIG91dHNpZGUgdGhlIGludGVydmFsIFstaSwgK2ldIGFsb25nIHRoZQoraW1hZ2luYXJ5IGF4aXMuCisKKyAgIDxwPjxjb2RlPmNhc2luaGY8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5jYXNpbmg8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggYXJjIGh5cGVyYm9saWMgc2luZSB2YWx1ZSwKK2luIHRoZSByYW5nZSBvZiBhIHN0cmlwIG1hdGhlbWF0aWNhbGx5IHVuYm91bmRlZCBhbG9uZyB0aGUKK3JlYWwgYXhpcyBhbmQgaW4gdGhlIGludGVydmFsIFstaSpwLzIsICtpKnAvMl0gYWxvbmcgdGhlCitpbWFnaW5hcnkgYXhpcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNhc2luaDwvY29kZT4gYW5kIDxjb2RlPmNhc2luaGY8L2NvZGU+IGFyZSBJU08gQzk5CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2F0YW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NhdGFuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyZTdmMgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NhdGFuLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y2F0YW4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNhc2luaC5odG1sI2Nhc2luaCIgdGl0bGU9ImNhc2luaCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNhdGFuaC5odG1sI2NhdGFuaCIgdGl0bGU9ImNhdGFuaCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY2F0YW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY2F0YW5oLmh0bWwjY2F0YW5oIj5jYXRhbmg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjYXNpbmguaHRtbCNjYXNpbmgiPmNhc2luaDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi43IDxjb2RlPmNhdGFuPC9jb2RlPiwgPGNvZGU+Y2F0YW5mPC9jb2RlPiZtZGFzaDtjb21wbGV4IGFyYyB0YW5nZW50PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2F0YW4tMTY2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2F0YW5mLTE2NyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNvbXBsZXggY2F0YW4oZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjYXRhbmYoZmxvYXQgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyBjb21wdXRlIHRoZSBjb21wbGV4IGFyYyB0YW5nZW50IG9mIDx2YXI+ejwvdmFyPiwKK3dpdGggYnJhbmNoIGN1dHMgb3V0c2lkZSB0aGUgaW50ZXJ2YWwgWy1pLCAraV0gYWxvbmcgdGhlCitpbWFnaW5hcnkgYXhpcy4KKworICAgPHA+PGNvZGU+Y2F0YW5mPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y2F0YW48L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggYXJjIHRhbmdlbnQgdmFsdWUsIGluIHRoZSByYW5nZQorb2YgYSBzdHJpcCBtYXRoZW1hdGljYWxseSAgdW5ib3VuZGVkICBhbG9uZyB0aGUgaW1hZ2luYXJ5IGF4aXMKK2FuZCBpbiB0aGUgaW50ZXJ2YWwgWy1waS8yLCArcGkvMl0gYWxvbmcgdGhlIHJlYWwgYXhpcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNhdGFuPC9jb2RlPiBhbmQgPGNvZGU+Y2F0YW5mPC9jb2RlPiBhcmUgSVNPIEM5OQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NhdGFuaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2F0YW5oLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxODg0OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NhdGFuaC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmNhdGFuaCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2F0YW4uaHRtbCNjYXRhbiIgdGl0bGU9ImNhdGFuIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2Nvcy5odG1sI2Njb3MiIHRpdGxlPSJjY29zIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjYXRhbmgiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY2Nvcy5odG1sI2Njb3MiPmNjb3M8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjYXRhbi5odG1sI2NhdGFuIj5jYXRhbjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi44IDxjb2RlPmNhdGFuaDwvY29kZT4sIDxjb2RlPmNhdGFuaGY8L2NvZGU+Jm1kYXNoO2NvbXBsZXggYXJjIGh5cGVyYm9saWMgdGFuZ2VudDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNhdGFuaC0xNjgiPjwvYT48YSBuYW1lPSJpbmRleC1jYXRhbmhmLTE2OSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNvbXBsZXggY2F0YW5oKGRvdWJsZSBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGNvbXBsZXggY2F0YW5oZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGNvbXBsZXggYXJjIGh5cGVyYm9saWMgdGFuIG9mIDx2YXI+ejwvdmFyPiwKK3dpdGggYnJhbmNoIGN1dHMgb3V0c2lkZSB0aGUgaW50ZXJ2YWwgWy0xLCArMV0gYWxvbmcgdGhlCityZWFsIGF4aXMuCisKKyAgIDxwPjxjb2RlPmNhdGFuaGY8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5jYXRhbmg8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggYXJjIGh5cGVyYm9saWMgdGFuZ2VudCB2YWx1ZSwKK2luIHRoZSByYW5nZSBvZiBhIHN0cmlwIG1hdGhlbWF0aWNhbGx5IHVuYm91bmRlZCBhbG9uZyB0aGUKK3JlYWwgYXhpcyBhbmQgaW4gdGhlIGludGVydmFsIFstaSpwLzIsICtpKnAvMl0gYWxvbmcgdGhlCitpbWFnaW5hcnkgYXhpcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNhdGFuaDwvY29kZT4gYW5kIDxjb2RlPmNhdGFuaGY8L2NvZGU+IGFyZSBJU08gQzk5CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2JydC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2JydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTIyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jYnJ0Lmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y2JydCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iak4uaHRtbCNqTiIgdGl0bGU9ImpOIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY29weXNpZ24uaHRtbCNjb3B5c2lnbiIgdGl0bGU9ImNvcHlzaWduIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjYnJ0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImNvcHlzaWduLmh0bWwjY29weXNpZ24iPmNvcHlzaWduPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iak4uaHRtbCNqTiI+ak48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMTEgPGNvZGU+Y2JydDwvY29kZT4sIDxjb2RlPmNicnRmPC9jb2RlPiZtZGFzaDtjdWJlIHJvb3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jYnJ0LTMxIj48L2E+PGEgbmFtZT0iaW5kZXgtY2JydGYtMzIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBjYnJ0KGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCAgY2JydGYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5jYnJ0PC9jb2RlPiBjb21wdXRlcyB0aGUgY3ViZSByb290IG9mIHRoZSBhcmd1bWVudC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIGN1YmUgcm9vdCBpcyByZXR1cm5lZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNicnQ8L2NvZGU+IGlzIGluIFN5c3RlbSBWIHJlbGVhc2UgNC4gIDxjb2RlPmNicnRmPC9jb2RlPiBpcyBhbiBleHRlbnNpb24uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2Nvcy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2Nvcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMGQ2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jY29zLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y2NvcyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2F0YW5oLmh0bWwjY2F0YW5oIiB0aXRsZT0iY2F0YW5oIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2Nvc2guaHRtbCNjY29zaCIgdGl0bGU9ImNjb3NoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjY29zIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImNjb3NoLmh0bWwjY2Nvc2giPmNjb3NoPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iY2F0YW5oLmh0bWwjY2F0YW5oIj5jYXRhbmg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCI+Q29tcGxleDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuOSA8Y29kZT5jY29zPC9jb2RlPiwgPGNvZGU+Y2Nvc2Y8L2NvZGU+Jm1kYXNoO2NvbXBsZXggY29zaW5lPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2Nvcy0xNzAiPjwvYT48YSBuYW1lPSJpbmRleC1jY29zZi0xNzEiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjb21wbGV4LmgmZ3Q7CisgICAgIGRvdWJsZSBjb21wbGV4IGNjb3MoZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjY29zZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGNvbXBsZXggY29zaW5lIG9mIDx2YXI+ejwvdmFyPi4KKworICAgPHA+PGNvZGU+Y2Nvc2Y8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5jY29zPC9jb2RlPiwgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMKK2l0cyBjYWxjdWxhdGlvbnMgb24gPGNvZGU+ZmxvYXRzIGNvbXBsZXg8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBjb21wbGV4IGNvc2luZSB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNjb3M8L2NvZGU+IGFuZCA8Y29kZT5jY29zZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jY29zaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2Nvc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTg2MzJjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2Nvc2guaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jY29zaCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2Nvcy5odG1sI2Njb3MiIHRpdGxlPSJjY29zIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY2V4cC5odG1sI2NleHAiIHRpdGxlPSJjZXhwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjY29zaCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjZXhwLmh0bWwjY2V4cCI+Y2V4cDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNjb3MuaHRtbCNjY29zIj5jY29zPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjEwIDxjb2RlPmNjb3NoPC9jb2RlPiwgPGNvZGU+Y2Nvc2hmPC9jb2RlPiZtZGFzaDtjb21wbGV4IGh5cGVyYm9saWMgY29zaW5lPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2Nvc2gtMTcyIj48L2E+PGEgbmFtZT0iaW5kZXgtY2Nvc2hmLTE3MyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNvbXBsZXggY2Nvc2goZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjY29zaGYoZmxvYXQgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyBjb21wdXRlIHRoZSBjb21wbGV4IGh5cGVyYm9saWMgY29zaW5lIG9mIDx2YXI+ejwvdmFyPi4KKworICAgPHA+PGNvZGU+Y2Nvc2hmPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y2Nvc2g8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggaHlwZXJib2xpYyBjb3NpbmUgdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5jY29zaDwvY29kZT4gYW5kIDxjb2RlPmNjb3NoZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jZXhwLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jZXhwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5MDczZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NleHAuaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jZXhwIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCIgdGl0bGU9IkNvbXBsZXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjY29zaC5odG1sI2Njb3NoIiB0aXRsZT0iY2Nvc2giPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjaW1hZy5odG1sI2NpbWFnIiB0aXRsZT0iY2ltYWciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImNleHAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY2ltYWcuaHRtbCNjaW1hZyI+Y2ltYWc8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjY29zaC5odG1sI2Njb3NoIj5jY29zaDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xMSA8Y29kZT5jZXhwPC9jb2RlPiwgPGNvZGU+Y2V4cGY8L2NvZGU+Jm1kYXNoO2NvbXBsZXggYmFzZS1lIGV4cG9uZW50aWFsPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2V4cC0xNzQiPjwvYT48YSBuYW1lPSJpbmRleC1jZXhwZi0xNzUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjb21wbGV4LmgmZ3Q7CisgICAgIGRvdWJsZSBjb21wbGV4IGNleHAoZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjZXhwZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgIHRoZSBjb21wbGV4IGJhc2UtPHZhcj5lPC92YXI+IGV4cG9uZW50aWFsIG9mIDx2YXI+ejwvdmFyPi4KKworICAgPHA+PGNvZGU+Y2V4cGY8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5jZXhwPC9jb2RlPiwgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMKK2l0cyBjYWxjdWxhdGlvbnMgb24gPGNvZGU+ZmxvYXRzIGNvbXBsZXg8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgY2V4cCBmdW5jdGlvbnMgcmV0dXJuIHRoZSBjb21wbGV4IGJhc2UtPHZhcj5lPC92YXI+IGV4cG9uZW50aWFsIHZhbHVlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Y2V4cDwvY29kZT4gYW5kIDxjb2RlPmNleHBmPC9jb2RlPiBhcmUgSVNPIEM5OQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NpbWFnLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jaW1hZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNWE5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jaW1hZy5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmNpbWFnIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCIgdGl0bGU9IkNvbXBsZXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjZXhwLmh0bWwjY2V4cCIgdGl0bGU9ImNleHAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjbG9nLmh0bWwjY2xvZyIgdGl0bGU9ImNsb2ciPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImNpbWFnIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImNsb2cuaHRtbCNjbG9nIj5jbG9nPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iY2V4cC5odG1sI2NleHAiPmNleHA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCI+Q29tcGxleDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMTIgPGNvZGU+Y2ltYWc8L2NvZGU+LCA8Y29kZT5jaW1hZ2Y8L2NvZGU+Jm1kYXNoO2ltYWdpbmFyeSBwYXJ0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2ltYWctMTc2Ij48L2E+PGEgbmFtZT0iaW5kZXgtY2ltYWdmLTE3NyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNpbWFnKGRvdWJsZSBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGNpbWFnZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIDx2YXI+ejwvdmFyPi4KKworICAgPHA+PGNvZGU+Y2ltYWdmPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y2ltYWc8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBjaW1hZyBmdW5jdGlvbnMgcmV0dXJuIHRoZSBpbWFnaW5hcnkgcGFydCB2YWx1ZSAoYXMgYSByZWFsKS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNpbWFnPC9jb2RlPiBhbmQgPGNvZGU+Y2ltYWdmPC9jb2RlPiBhcmUgSVNPIEM5OQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nsb2cuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nsb2cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTM0MmY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY2xvZy5odG1sCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmNsb2cgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNpbWFnLmh0bWwjY2ltYWciIHRpdGxlPSJjaW1hZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNvbmouaHRtbCNjb25qIiB0aXRsZT0iY29uaiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY2xvZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjb25qLmh0bWwjY29uaiI+Y29uajwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNpbWFnLmh0bWwjY2ltYWciPmNpbWFnPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjEzIDxjb2RlPmNsb2c8L2NvZGU+LCA8Y29kZT5jbG9nZjwvY29kZT4mbWRhc2g7Y29tcGxleCBiYXNlLWUgbG9nYXJpdGhtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY2xvZy0xNzgiPjwvYT48YSBuYW1lPSJpbmRleC1jbG9nZi0xNzkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjb21wbGV4LmgmZ3Q7CisgICAgIGRvdWJsZSBjb21wbGV4IGNsb2coZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjbG9nZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGNvbXBsZXggbmF0dXJhbCAoYmFzZS08dmFyPmU8L3Zhcj4pIGxvZ2FyaXRobQorb2YgPHZhcj56PC92YXI+LCB3aXRoIGEgYnJhbmNoIGN1dCBhbG9uZyB0aGUgbmVnYXRpdmUgcmVhbCBheGlzLgorCisgICA8cD48Y29kZT5jbG9nZjwvY29kZT4gaXMgaWRlbnRpY2FsIHRvIDxjb2RlPmNsb2c8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBjbG9nIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggbmF0dXJhbCBsb2dhcml0aG0gdmFsdWUsIGluCit0aGUgcmFuZ2Ugb2YgYSBzdHJpcCBtYXRoZW1hdGljYWxseSB1bmJvdW5kZWQgYWxvbmcgdGhlIHJlYWwgYXhpcworYW5kIGluIHRoZSBpbnRlcnZhbCBbLWkqcGkgLCAraSpwaV0gYWxvbmcgdGhlIGltYWdpbmFyeSBheGlzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Y2xvZzwvY29kZT4gYW5kIDxjb2RlPmNsb2dmPC9jb2RlPiBhcmUgSVNPIEM5OQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NvbmouaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NvbmouaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTMzYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY29uai5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmNvbmogLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNsb2cuaHRtbCNjbG9nIiB0aXRsZT0iY2xvZyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNwb3cuaHRtbCNjcG93IiB0aXRsZT0iY3BvdyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY29uaiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjcG93Lmh0bWwjY3BvdyI+Y3BvdzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNsb2cuaHRtbCNjbG9nIj5jbG9nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjE0IDxjb2RlPmNvbmo8L2NvZGU+LCA8Y29kZT5jb25qZjwvY29kZT4mbWRhc2g7Y29tcGxleCBjb25qdWdhdGU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jb25qLTE4MCI+PC9hPjxhIG5hbWU9ImluZGV4LWNvbmpmLTE4MSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNvbXBsZXggY29uaihkb3VibGUgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICBmbG9hdCBjb21wbGV4IGNvbmpmKGZsb2F0IGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGVzZSBmdW5jdGlvbnMgY29tcHV0ZSB0aGUgY29tcGxleCBjb25qdWdhdGUgb2YgPHZhcj56PC92YXI+LAorYnkgcmV2ZXJzaW5nIHRoZSBzaWduIG9mIGl0cyBpbWFnaW5hcnkgcGFydC4KKworICAgPHA+PGNvZGU+Y29uamY8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5jb25qPC9jb2RlPiwgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMKK2l0cyBjYWxjdWxhdGlvbnMgb24gPGNvZGU+ZmxvYXRzIGNvbXBsZXg8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgY29uaiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNvbmo8L2NvZGU+IGFuZCA8Y29kZT5jb25qZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jb3B5c2lnbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY29weXNpZ24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmFkOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY29weXNpZ24uaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jb3B5c2lnbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2JydC5odG1sI2NicnQiIHRpdGxlPSJjYnJ0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY29zaC5odG1sI2Nvc2giIHRpdGxlPSJjb3NoIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjb3B5c2lnbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjb3NoLmh0bWwjY29zaCI+Y29zaDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNicnQuaHRtbCNjYnJ0Ij5jYnJ0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjEyIDxjb2RlPmNvcHlzaWduPC9jb2RlPiwgPGNvZGU+Y29weXNpZ25mPC9jb2RlPiZtZGFzaDtzaWduIG9mIDx2YXI+eTwvdmFyPiwgbWFnbml0dWRlIG9mIDx2YXI+eDwvdmFyPjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNvcHlzaWduLTMzIj48L2E+PGEgbmFtZT0iaW5kZXgtY29weXNpZ25mLTM0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgY29weXNpZ24gKGRvdWJsZSA8dmFyPng8L3Zhcj4sIGRvdWJsZSA8dmFyPnk8L3Zhcj4pOworICAgICBmbG9hdCBjb3B5c2lnbmYgKGZsb2F0IDx2YXI+eDwvdmFyPiwgZmxvYXQgPHZhcj55PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5jb3B5c2lnbjwvY29kZT4gY29uc3RydWN0cyBhIG51bWJlciB3aXRoIHRoZSBtYWduaXR1ZGUgKGFic29sdXRlIHZhbHVlKQorb2YgaXRzIGZpcnN0IGFyZ3VtZW50LCA8dmFyPng8L3Zhcj4sIGFuZCB0aGUgc2lnbiBvZiBpdHMgc2Vjb25kIGFyZ3VtZW50LAorPHZhcj55PC92YXI+LgorCisgICA8cD48Y29kZT5jb3B5c2lnbmY8L2NvZGU+IGRvZXMgdGhlIHNhbWUgdGhpbmc7IHRoZSB0d28gZnVuY3Rpb25zIGRpZmZlciBvbmx5IGluCit0aGUgdHlwZSBvZiB0aGVpciBhcmd1bWVudHMgYW5kIHJlc3VsdC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+Y29weXNpZ248L2NvZGU+IHJldHVybnMgYSA8Y29kZT5kb3VibGU8L2NvZGU+IHdpdGggdGhlIG1hZ25pdHVkZSBvZgorPHZhcj54PC92YXI+IGFuZCB0aGUgc2lnbiBvZiA8dmFyPnk8L3Zhcj4uIAorPGNvZGU+Y29weXNpZ25mPC9jb2RlPiByZXR1cm5zIGEgPGNvZGU+ZmxvYXQ8L2NvZGU+IHdpdGggdGhlIG1hZ25pdHVkZSBvZgorPHZhcj54PC92YXI+IGFuZCB0aGUgc2lnbiBvZiA8dmFyPnk8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5jb3B5c2lnbjwvY29kZT4gaXMgbm90IHJlcXVpcmVkIGJ5IGVpdGhlciBBTlNJIEMgb3IgdGhlIFN5c3RlbSBWIEludGVyZmFjZQorRGVmaW5pdGlvbiAoSXNzdWUgMikuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY29zaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY29zaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMWYwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jb3NoLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y29zaCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY29weXNpZ24uaHRtbCNjb3B5c2lnbiIgdGl0bGU9ImNvcHlzaWduIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZXJmLmh0bWwjZXJmIiB0aXRsZT0iZXJmIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjb3NoIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImVyZi5odG1sI2VyZiI+ZXJmPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iY29weXNpZ24uaHRtbCNjb3B5c2lnbiI+Y29weXNpZ248L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMTMgPGNvZGU+Y29zaDwvY29kZT4sIDxjb2RlPmNvc2hmPC9jb2RlPiZtZGFzaDtoeXBlcmJvbGljIGNvc2luZTwvaDM+CisKKzxwPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGNvc2goZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGNvc2hmKGZsb2F0IDx2YXI+eDwvdmFyPikKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CisKKyAgIDxwPjxjb2RlPmNvc2g8L2NvZGU+IGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB0aGUgYXJndW1lbnQgPHZhcj54PC92YXI+LiAKKzxjb2RlPmNvc2goPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+IGlzIGRlZmluZWQgYXMKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgKGV4cCh4KSArIGV4cCgteCkpLzIKKzwvcHJlPgorICAgPHA+QW5nbGVzIGFyZSBzcGVjaWZpZWQgaW4gcmFkaWFucy4gCis8Y29kZT5jb3NoZjwvY29kZT4gaXMgaWRlbnRpY2FsLCBzYXZlIHRoYXQgaXQgdGFrZXMgYW5kIHJldHVybnMgPGNvZGU+ZmxvYXQ8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgY29tcHV0ZWQgdmFsdWUgaXMgcmV0dXJuZWQuICBXaGVuIHRoZSBjb3JyZWN0IHZhbHVlIHdvdWxkIGNyZWF0ZQorYW4gb3ZlcmZsb3csICA8Y29kZT5jb3NoPC9jb2RlPiByZXR1cm5zIHRoZSB2YWx1ZSA8Y29kZT5IVUdFX1ZBTDwvY29kZT4gd2l0aCB0aGUKK2FwcHJvcHJpYXRlIHNpZ24sIGFuZCB0aGUgZ2xvYmFsIHZhbHVlIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gPGNvZGU+RVJBTkdFPC9jb2RlPi4KKworICAgPHA+WW91IGNhbiBtb2RpZnkgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZXNlIGZ1bmN0aW9ucyB1c2luZyB0aGUKK2Z1bmN0aW9uIDxjb2RlPm1hdGhlcnI8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Y29zaDwvY29kZT4gaXMgQU5TSS4gCis8Y29kZT5jb3NoZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nwb3cuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nwb3cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmUwMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3Bvdy5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmNwb3cgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNvbmouaHRtbCNjb25qIiB0aXRsZT0iY29uaiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNwcm9qLmh0bWwjY3Byb2oiIHRpdGxlPSJjcHJvaiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY3BvdyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjcHJvai5odG1sI2Nwcm9qIj5jcHJvajwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNvbmouaHRtbCNjb25qIj5jb25qPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjE1IDxjb2RlPmNwb3c8L2NvZGU+LCA8Y29kZT5jcG93ZjwvY29kZT4mbWRhc2g7Y29tcGxleCBwb3dlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNwb3ctMTgyIj48L2E+PGEgbmFtZT0iaW5kZXgtY3Bvd2YtMTgzIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y29tcGxleC5oJmd0OworICAgICBkb3VibGUgY29tcGxleCBjcG93KGRvdWJsZSBjb21wbGV4IDx2YXI+eDwvdmFyPiwgZG91YmxlIGNvbXBsZXggPHZhcj55PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjcG93ZihmbG9hdCBjb21wbGV4IDx2YXI+eDwvdmFyPiwgZmxvYXQgY29tcGxleCA8dmFyPnk8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSBjcG93IGZ1bmN0aW9ucyBjb21wdXRlIHRoZSBjb21wbGV4IHBvd2VyIGZ1bmN0aW9uIHheeQorcG93ZXIsIHdpdGggYSBicmFuY2ggY3V0IGZvciB0aGUgZmlyc3QgcGFyYW1ldGVyIGFsb25nIHRoZQorbmVnYXRpdmUgcmVhbCBheGlzLgorCisgICA8cD48Y29kZT5jcG93ZjwvY29kZT4gaXMgaWRlbnRpY2FsIHRvIDxjb2RlPmNwb3c8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBjcG93IGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggcG93ZXIgZnVuY3Rpb24gdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5jcG93PC9jb2RlPiBhbmQgPGNvZGU+Y3Bvd2Y8L2NvZGU+IGFyZSBJU08gQzk5CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3Byb2ouaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nwcm9qLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1ZDZiYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Nwcm9qLmh0bWwKQEAgLTAsMCArMSw2NyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Y3Byb2ogLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNwb3cuaHRtbCNjcG93IiB0aXRsZT0iY3BvdyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNyZWFsLmh0bWwjY3JlYWwiIHRpdGxlPSJjcmVhbCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY3Byb2oiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY3JlYWwuaHRtbCNjcmVhbCI+Y3JlYWw8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjcG93Lmh0bWwjY3BvdyI+Y3BvdzwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xNiA8Y29kZT5jcHJvajwvY29kZT4sIDxjb2RlPmNwcm9qZjwvY29kZT4mbWRhc2g7IFJpZW1hbm4gc3BoZXJlIHByb2plY3Rpb248L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jcHJvai0xODQiPjwvYT48YSBuYW1lPSJpbmRleC1jcHJvamYtMTg1Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y29tcGxleC5oJmd0OworICAgICBkb3VibGUgY29tcGxleCBjcHJvaihkb3VibGUgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICBmbG9hdCBjb21wbGV4IGNwcm9qZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgYSBwcm9qZWN0aW9uIG9mIDx2YXI+ejwvdmFyPiBvbnRvIHRoZSBSaWVtYW5uCitzcGhlcmU6IDx2YXI+ejwvdmFyPiBwcm9qZWN0cyB0byA8dmFyPno8L3Zhcj4gZXhjZXB0IHRoYXQgYWxsIGNvbXBsZXggaW5maW5pdGllcworKGV2ZW4gdGhvc2Ugd2l0aCBvbmUgaW5maW5pdGUgcGFydCBhbmQgb25lIE5hTiBwYXJ0KSBwcm9qZWN0Cit0byBwb3NpdGl2ZSBpbmZpbml0eSBvbiB0aGUgcmVhbCBheGlzLiBJZiA8dmFyPno8L3Zhcj4gaGFzIGFuIGluZmluaXRlIHBhcnQsCit0aGVuIDxjb2RlPmNwcm9qPC9jb2RlPig8dmFyPno8L3Zhcj4pIGlzIGVxdWl2YWxlbnQgdG8KKworICAgPHA+SU5GSU5JVFkgKyBJICogY29weXNpZ24oMC4wLCBjaW1hZyh6KSkKKworICAgPHA+PGNvZGU+Y3Byb2pmPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y3Byb2o8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBjcHJvaiBmdW5jdGlvbnMgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcHJvamVjdGlvbiBvbnRvCit0aGUgUmllbWFubiBzcGhlcmUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5jcHJvajwvY29kZT4gYW5kIDxjb2RlPmNwcm9qZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jcmVhbC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3JlYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDgzOThkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3JlYWwuaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jcmVhbCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY3Byb2ouaHRtbCNjcHJvaiIgdGl0bGU9ImNwcm9qIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY3Npbi5odG1sI2NzaW4iIHRpdGxlPSJjc2luIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjcmVhbCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjc2luLmh0bWwjY3NpbiI+Y3NpbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNwcm9qLmh0bWwjY3Byb2oiPmNwcm9qPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjE3IDxjb2RlPmNyZWFsPC9jb2RlPiwgPGNvZGU+Y3JlYWxmPC9jb2RlPiZtZGFzaDtyZWFsIHBhcnQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jcmVhbC0xODYiPjwvYT48YSBuYW1lPSJpbmRleC1jcmVhbGYtMTg3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y29tcGxleC5oJmd0OworICAgICBkb3VibGUgY3JlYWwoZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY3JlYWxmKGZsb2F0IGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGVzZSBmdW5jdGlvbnMgY29tcHV0ZSB0aGUgcmVhbCBwYXJ0IG9mIDx2YXI+ejwvdmFyPi4KKworICAgPHA+PGNvZGU+Y3JlYWxmPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y3JlYWw8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBjcmVhbCBmdW5jdGlvbnMgcmV0dXJuIHRoZSByZWFsIHBhcnQgdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5jcmVhbDwvY29kZT4gYW5kIDxjb2RlPmNyZWFsZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jc2luLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jc2luLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhNmI5MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2NzaW4uaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jc2luIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCIgdGl0bGU9IkNvbXBsZXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjcmVhbC5odG1sI2NyZWFsIiB0aXRsZT0iY3JlYWwiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJjc2luaC5odG1sI2NzaW5oIiB0aXRsZT0iY3NpbmgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImNzaW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY3NpbmguaHRtbCNjc2luaCI+Y3Npbmg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJjcmVhbC5odG1sI2NyZWFsIj5jcmVhbDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4Ij5Db21wbGV4PC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+Mi4xOCA8Y29kZT5jc2luPC9jb2RlPiwgPGNvZGU+Y3NpbmY8L2NvZGU+Jm1kYXNoO2NvbXBsZXggc2luZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNzaW4tMTg4Ij48L2E+PGEgbmFtZT0iaW5kZXgtY3NpbmYtMTg5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y29tcGxleC5oJmd0OworICAgICBkb3VibGUgY29tcGxleCBjc2luKGRvdWJsZSBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGNvbXBsZXggY3NpbmYoZmxvYXQgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyBjb21wdXRlIHRoZSBjb21wbGV4IHNpbmUgb2YgPHZhcj56PC92YXI+LgorCisgICA8cD48Y29kZT5jc2luZjwvY29kZT4gaXMgaWRlbnRpY2FsIHRvIDxjb2RlPmNzaW48L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggc2luZSB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNzaW48L2NvZGU+IGFuZCA8Y29kZT5jc2luZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jc2luaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3NpbmguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTNmMDRhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3NpbmguaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jc2luaCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY3Npbi5odG1sI2NzaW4iIHRpdGxlPSJjc2luIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY3NxcnQuaHRtbCNjc3FydCIgdGl0bGU9ImNzcXJ0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjc2luaCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjc3FydC5odG1sI2NzcXJ0Ij5jc3FydDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNzaW4uaHRtbCNjc2luIj5jc2luPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjE5IDxjb2RlPmNzaW5oPC9jb2RlPiwgPGNvZGU+Y3NpbmhmPC9jb2RlPiZtZGFzaDtjb21wbGV4IGh5cGVyYm9saWMgc2luZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWNzaW5oLTE5MCI+PC9hPjxhIG5hbWU9ImluZGV4LWNzaW5oZi0xOTEiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjb21wbGV4LmgmZ3Q7CisgICAgIGRvdWJsZSBjb21wbGV4IGNzaW5oKGRvdWJsZSBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGNvbXBsZXggY3NpbmhmKGZsb2F0IGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGVzZSBmdW5jdGlvbnMgY29tcHV0ZSB0aGUgY29tcGxleCBoeXBlcmJvbGljIHNpbmUgb2YgPHZhcj56PC92YXI+LgorCisgICA8cD48Y29kZT5jY29zaGY8L2NvZGU+IGlzIGlkZW50aWNhbCB0byA8Y29kZT5jY29zaDwvY29kZT4sIGV4Y2VwdCB0aGF0IGl0IHBlcmZvcm1zCitpdHMgY2FsY3VsYXRpb25zIG9uIDxjb2RlPmZsb2F0cyBjb21wbGV4PC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgY29tcGxleCBoeXBlcmJvbGljIHNpbmUgdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5jc2luaDwvY29kZT4gYW5kIDxjb2RlPmNzaW5oZjwvY29kZT4gYXJlIElTTyBDOTkKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jc3FydC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3NxcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGU4MzMzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3NxcnQuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5jc3FydCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiIHRpdGxlPSJDb21wbGV4Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iY3NpbmguaHRtbCNjc2luaCIgdGl0bGU9ImNzaW5oIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iY3Rhbi5odG1sI2N0YW4iIHRpdGxlPSJjdGFuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJjc3FydCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjdGFuLmh0bWwjY3RhbiI+Y3RhbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNzaW5oLmh0bWwjY3NpbmgiPmNzaW5oPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjIwIDxjb2RlPmNzcXJ0PC9jb2RlPiwgPGNvZGU+Y3NxcnRmPC9jb2RlPiZtZGFzaDtjb21wbGV4IHNxdWFyZSByb290PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY3NxcnQtMTkyIj48L2E+PGEgbmFtZT0iaW5kZXgtY3NxcnRmLTE5MyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O2NvbXBsZXguaCZndDsKKyAgICAgZG91YmxlIGNvbXBsZXggY3NxcnQoZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjc3FydGYoZmxvYXQgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyBjb21wdXRlIHRoZSBjb21wbGV4IHNxdWFyZSByb290IG9mIDx2YXI+ejwvdmFyPiwgd2l0aAorYSBicmFuY2ggY3V0IGFsb25nIHRoZSBuZWdhdGl2ZSByZWFsIGF4aXMuCisKKyAgIDxwPjxjb2RlPmNzcXJ0ZjwvY29kZT4gaXMgaWRlbnRpY2FsIHRvIDxjb2RlPmNzcXJ0PC9jb2RlPiwgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMKK2l0cyBjYWxjdWxhdGlvbnMgb24gPGNvZGU+ZmxvYXRzIGNvbXBsZXg8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgY3NxcnQgZnVuY3Rpb25zIHJldHVybiB0aGUgY29tcGxleCBzcXVhcmUgcm9vdCB2YWx1ZSwgaW4KK3RoZSByYW5nZSBvZiB0aGUgcmlnaHQgaGFsZnBsYW5lIChpbmNsdWRpbmcgdGhlIGltYWdpbmFyeSBheGlzKS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmNzcXJ0PC9jb2RlPiBhbmQgPGNvZGU+Y3NxcnRmPC9jb2RlPiBhcmUgSVNPIEM5OQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2N0YW4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2N0YW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTk4MTMzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvY3Rhbi5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmN0YW4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9IkNvbXBsZXguaHRtbCNDb21wbGV4IiB0aXRsZT0iQ29tcGxleCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImNzcXJ0Lmh0bWwjY3NxcnQiIHRpdGxlPSJjc3FydCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImN0YW5oLmh0bWwjY3RhbmgiIHRpdGxlPSJjdGFuaCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iY3RhbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJjdGFuaC5odG1sI2N0YW5oIj5jdGFuaDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNzcXJ0Lmh0bWwjY3NxcnQiPmNzcXJ0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iQ29tcGxleC5odG1sI0NvbXBsZXgiPkNvbXBsZXg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4yLjIxIDxjb2RlPmN0YW48L2NvZGU+LCA8Y29kZT5jdGFuZjwvY29kZT4mbWRhc2g7Y29tcGxleCB0YW5nZW50PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtY3Rhbi0xOTQiPjwvYT48YSBuYW1lPSJpbmRleC1jdGFuZi0xOTUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDtjb21wbGV4LmgmZ3Q7CisgICAgIGRvdWJsZSBjb21wbGV4IGN0YW4oZG91YmxlIGNvbXBsZXggPHZhcj56PC92YXI+KTsKKyAgICAgZmxvYXQgY29tcGxleCBjdGFuZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGNvbXBsZXggdGFuZ2VudCBvZiA8dmFyPno8L3Zhcj4uCisKKyAgIDxwPjxjb2RlPmN0YW5mPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y3RhbjwvY29kZT4sIGV4Y2VwdCB0aGF0IGl0IHBlcmZvcm1zCitpdHMgY2FsY3VsYXRpb25zIG9uIDxjb2RlPmZsb2F0cyBjb21wbGV4PC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgY29tcGxleCB0YW5nZW50IHZhbHVlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Y3RhbjwvY29kZT4gYW5kIDxjb2RlPmN0YW5mPC9jb2RlPiBhcmUgSVNPIEM5OQorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2N0YW5oLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jdGFuaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NWNmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9jdGFuaC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmN0YW5oIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCIgdGl0bGU9IkNvbXBsZXgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjdGFuLmh0bWwjY3RhbiIgdGl0bGU9ImN0YW4iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImN0YW5oIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iY3Rhbi5odG1sI2N0YW4iPmN0YW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCI+Q29tcGxleDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjIuMjIgPGNvZGU+Y3Rhbmg8L2NvZGU+LCA8Y29kZT5jdGFuZjwvY29kZT4mbWRhc2g7Y29tcGxleCBoeXBlcmJvbGljIHRhbmdlbnQ8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1jdGFuaC0xOTYiPjwvYT48YSBuYW1lPSJpbmRleC1jdGFuaGYtMTk3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7Y29tcGxleC5oJmd0OworICAgICBkb3VibGUgY29tcGxleCBjdGFuaChkb3VibGUgY29tcGxleCA8dmFyPno8L3Zhcj4pOworICAgICBmbG9hdCBjb21wbGV4IGN0YW5oZihmbG9hdCBjb21wbGV4IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlc2UgZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGNvbXBsZXggaHlwZXJib2xpYyB0YW5nZW50IG9mIDx2YXI+ejwvdmFyPi4KKworICAgPHA+PGNvZGU+Y3RhbmhmPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+Y3Rhbmg8L2NvZGU+LCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcworaXRzIGNhbGN1bGF0aW9ucyBvbiA8Y29kZT5mbG9hdHMgY29tcGxleDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggaHlwZXJib2xpYyB0YW5nZW50IHZhbHVlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Y3Rhbmg8L2NvZGU+IGFuZCA8Y29kZT5jdGFuaGY8L2NvZGU+IGFyZSBJU08gQzk5CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZXJmLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9lcmYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTE4ZjdiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZXJmLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZXJmIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJjb3NoLmh0bWwjY29zaCIgdGl0bGU9ImNvc2giPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJleHAuaHRtbCNleHAiIHRpdGxlPSJleHAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImVyZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJleHAuaHRtbCNleHAiPmV4cDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImNvc2guaHRtbCNjb3NoIj5jb3NoPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjE0IDxjb2RlPmVyZjwvY29kZT4sIDxjb2RlPmVyZmY8L2NvZGU+LCA8Y29kZT5lcmZjPC9jb2RlPiwgPGNvZGU+ZXJmY2Y8L2NvZGU+Jm1kYXNoO2Vycm9yIGZ1bmN0aW9uPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZXJmLTM1Ij48L2E+PGEgbmFtZT0iaW5kZXgtZXJmZi0zNiI+PC9hPjxhIG5hbWU9ImluZGV4LWVyZmMtMzciPjwvYT48YSBuYW1lPSJpbmRleC1lcmZjZi0zOCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGVyZihkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgZXJmZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICBkb3VibGUgZXJmYyhkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgZXJmY2YoZmxvYXQgPHZhcj54PC92YXI+KTsKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmVyZjwvY29kZT4gY2FsY3VsYXRlcyBhbiBhcHByb3hpbWF0aW9uIHRvIHRoZSAmbGRxdW87ZXJyb3IgZnVuY3Rpb24mcmRxdW87LAord2hpY2ggZXN0aW1hdGVzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGFuIG9ic2VydmF0aW9uIHdpbGwgZmFsbCB3aXRoaW4KKzx2YXI+eDwvdmFyPiBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRoZSBtZWFuIChhc3N1bWluZyBhIG5vcm1hbAorZGlzdHJpYnV0aW9uKS4KKworICAgPHA+PGNvZGU+ZXJmYzwvY29kZT4gY2FsY3VsYXRlcyB0aGUgY29tcGxlbWVudGFyeSBwcm9iYWJpbGl0eTsgdGhhdCBpcywKKzxjb2RlPmVyZmMoPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+IGlzIDxjb2RlPjEgLSBlcmYoPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+LiAgPGNvZGU+ZXJmYzwvY29kZT4gaXMgY29tcHV0ZWQgZGlyZWN0bHksCitzbyB0aGF0IHlvdSBjYW4gdXNlIGl0IHRvIGF2b2lkIHRoZSBsb3NzIG9mIHByZWNpc2lvbiB0aGF0IHdvdWxkCityZXN1bHQgZnJvbSBzdWJ0cmFjdGluZyBsYXJnZSBwcm9iYWJpbGl0aWVzIChvbiBsYXJnZSA8dmFyPng8L3Zhcj4pIGZyb20gMS4KKworICAgPHA+PGNvZGU+ZXJmZjwvY29kZT4gYW5kIDxjb2RlPmVyZmNmPC9jb2RlPiBkaWZmZXIgZnJvbSA8Y29kZT5lcmY8L2NvZGU+IGFuZCA8Y29kZT5lcmZjPC9jb2RlPiBvbmx5IGluIHRoZQorYXJndW1lbnQgYW5kIHJlc3VsdCB0eXBlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorRm9yIHBvc2l0aXZlIGFyZ3VtZW50cywgPGNvZGU+ZXJmPC9jb2RlPiBhbmQgYWxsIGl0cyB2YXJpYW50cyByZXR1cm4gYQorcHJvYmFiaWxpdHkmbWRhc2g7YSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorTm9uZSBvZiB0aGUgdmFyaWFudHMgb2YgPGNvZGU+ZXJmPC9jb2RlPiBhcmUgQU5TSSBDLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2V4cC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZXhwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNlYzFmMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2V4cC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmV4cCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZXJmLmh0bWwjZXJmIiB0aXRsZT0iZXJmIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZXhwMi5odG1sI2V4cDIiIHRpdGxlPSJleHAyIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJleHAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZXhwMi5odG1sI2V4cDIiPmV4cDI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJlcmYuaHRtbCNlcmYiPmVyZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4xNSA8Y29kZT5leHA8L2NvZGU+LCA8Y29kZT5leHBmPC9jb2RlPiZtZGFzaDtleHBvbmVudGlhbDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWV4cC0zOSI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cGYtNDAiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBleHAoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGV4cGYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5leHA8L2NvZGU+IGFuZCA8Y29kZT5leHBmPC9jb2RlPiBjYWxjdWxhdGUgdGhlIGV4cG9uZW50aWFsIG9mIDx2YXI+eDwvdmFyPiwgdGhhdCBpcywKK2UgcmFpc2VkIHRvIHRoZSBwb3dlciA8dmFyPng8L3Zhcj4gKHdoZXJlIGUKK2lzIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIHN5c3RlbSBvZiBsb2dhcml0aG1zLCBhcHByb3hpbWF0ZWx5IDIuNzE4MjgpLgorCisgICA8cD5Zb3UgY2FuIHVzZSB0aGUgKG5vbi1BTlNJKSBmdW5jdGlvbiA8Y29kZT5tYXRoZXJyPC9jb2RlPiB0byBzcGVjaWZ5CitlcnJvciBoYW5kbGluZyBmb3IgdGhlc2UgZnVuY3Rpb25zLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitPbiBzdWNjZXNzLCA8Y29kZT5leHA8L2NvZGU+IGFuZCA8Y29kZT5leHBmPC9jb2RlPiByZXR1cm4gdGhlIGNhbGN1bGF0ZWQgdmFsdWUuIAorSWYgdGhlIHJlc3VsdCB1bmRlcmZsb3dzLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgPGNvZGU+MDwvY29kZT4uICBJZiB0aGUKK3Jlc3VsdCBvdmVyZmxvd3MsIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyA8Y29kZT5IVUdFX1ZBTDwvY29kZT4uICBJbgorZWl0aGVyIGNhc2UsIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gPGNvZGU+RVJBTkdFPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmV4cDwvY29kZT4gaXMgQU5TSSBDLiAgPGNvZGU+ZXhwZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2V4cDIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2V4cDIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmQ4YTdiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZXhwMi5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmV4cDIgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImV4cC5odG1sI2V4cCIgdGl0bGU9ImV4cCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImV4cG0xLmh0bWwjZXhwbTEiIHRpdGxlPSJleHBtMSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZXhwMiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJleHBtMS5odG1sI2V4cG0xIj5leHBtMTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImV4cC5odG1sI2V4cCI+ZXhwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjE2IDxjb2RlPmV4cDI8L2NvZGU+LCA8Y29kZT5leHAyZjwvY29kZT4mbmRhc2g7ZXhwb25lbnRpYWwsIGJhc2UgMjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWV4cDItNDEiPjwvYT48YSBuYW1lPSJpbmRleC1leHAyZi00MiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGV4cDIoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGV4cDJmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+ZXhwMjwvY29kZT4gYW5kIDxjb2RlPmV4cDJmPC9jb2RlPiBjYWxjdWxhdGUgMiBeIDx2YXI+eDwvdmFyPiwgdGhhdCBpcywKKzIgcmFpc2VkIHRvIHRoZSBwb3dlciA8dmFyPng8L3Zhcj4uCisKKyAgIDxwPllvdSBjYW4gdXNlIHRoZSAobm9uLUFOU0kpIGZ1bmN0aW9uIDxjb2RlPm1hdGhlcnI8L2NvZGU+IHRvIHNwZWNpZnkKK2Vycm9yIGhhbmRsaW5nIGZvciB0aGVzZSBmdW5jdGlvbnMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK09uIHN1Y2Nlc3MsIDxjb2RlPmV4cDI8L2NvZGU+IGFuZCA8Y29kZT5leHAyZjwvY29kZT4gcmV0dXJuIHRoZSBjYWxjdWxhdGVkIHZhbHVlLiAKK0lmIHRoZSByZXN1bHQgdW5kZXJmbG93cywgdGhlIHJldHVybmVkIHZhbHVlIGlzIDxjb2RlPjA8L2NvZGU+LiAgSWYgdGhlCityZXN1bHQgb3ZlcmZsb3dzLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgPGNvZGU+SFVHRV9WQUw8L2NvZGU+LiAgSW4KK2VpdGhlciBjYXNlLCA8Y29kZT5lcnJubzwvY29kZT4gaXMgc2V0IHRvIDxjb2RlPkVSQU5HRTwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMsIFBPU0lYLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2V4cG0xLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9leHBtMS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZTRlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9leHBtMS5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmV4cG0xIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJleHAyLmh0bWwjZXhwMiIgdGl0bGU9ImV4cDIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmYWJzLmh0bWwjZmFicyIgdGl0bGU9ImZhYnMiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImV4cG0xIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZhYnMuaHRtbCNmYWJzIj5mYWJzPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZXhwMi5odG1sI2V4cDIiPmV4cDI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMTcgPGNvZGU+ZXhwbTE8L2NvZGU+LCA8Y29kZT5leHBtMWY8L2NvZGU+Jm1kYXNoO2V4cG9uZW50aWFsIG1pbnVzIDE8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1leHBtMS00MyI+PC9hPjxhIG5hbWU9ImluZGV4LWV4cG0xZi00NCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGV4cG0xKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCBleHBtMWYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5leHBtMTwvY29kZT4gYW5kIDxjb2RlPmV4cG0xZjwvY29kZT4gY2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZiA8dmFyPng8L3Zhcj4KK2FuZCBzdWJ0cmFjdCAxLCB0aGF0IGlzLAorZSByYWlzZWQgdG8gdGhlIHBvd2VyIDx2YXI+eDwvdmFyPiBtaW51cyAxICh3aGVyZSBlCitpcyB0aGUgYmFzZSBvZiB0aGUgbmF0dXJhbCBzeXN0ZW0gb2YgbG9nYXJpdGhtcywgYXBwcm94aW1hdGVseQorMi43MTgyOCkuICBUaGUgcmVzdWx0IGlzIGFjY3VyYXRlIGV2ZW4gZm9yIHNtYWxsIHZhbHVlcyBvZgorPHZhcj54PC92YXI+LCB3aGVyZSB1c2luZyA8Y29kZT5leHAoPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPiktMTwvY29kZT4gd291bGQgbG9zZSBtYW55CitzaWduaWZpY2FudCBkaWdpdHMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK2UgcmFpc2VkIHRvIHRoZSBwb3dlciA8dmFyPng8L3Zhcj4sIG1pbnVzIDEuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitOZWl0aGVyIDxjb2RlPmV4cG0xPC9jb2RlPiBub3IgPGNvZGU+ZXhwbTFmPC9jb2RlPiBpcyByZXF1aXJlZCBieSBBTlNJIEMgb3IgYnkKK3RoZSBTeXN0ZW0gViBJbnRlcmZhY2UgRGVmaW5pdGlvbiAoSXNzdWUgMikuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZmFicy5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZmFicy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZDI0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mYWJzLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZmFicyAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZXhwbTEuaHRtbCNleHBtMSIgdGl0bGU9ImV4cG0xIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZmRpbS5odG1sI2ZkaW0iIHRpdGxlPSJmZGltIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmYWJzIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZkaW0uaHRtbCNmZGltIj5mZGltPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZXhwbTEuaHRtbCNleHBtMSI+ZXhwbTE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMTggPGNvZGU+ZmFiczwvY29kZT4sIDxjb2RlPmZhYnNmPC9jb2RlPiZtZGFzaDthYnNvbHV0ZSB2YWx1ZSAobWFnbml0dWRlKTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZhYnMtNDUiPjwvYT48YSBuYW1lPSJpbmRleC1mYWJzZi00NiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGZhYnMoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGZhYnNmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+ZmFiczwvY29kZT4gYW5kIDxjb2RlPmZhYnNmPC9jb2RlPiBjYWxjdWxhdGUKK3RoZSBhYnNvbHV0ZSB2YWx1ZSAobWFnbml0dWRlKSBvZiB0aGUgYXJndW1lbnQgPHZhcj54PC92YXI+LCBieSBkaXJlY3QKK21hbmlwdWxhdGlvbiBvZiB0aGUgYml0IHJlcHJlc2VudGF0aW9uIG9mIDx2YXI+eDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIGNhbGN1bGF0ZWQgdmFsdWUgaXMgcmV0dXJuZWQuICBObyBlcnJvcnMgYXJlIGRldGVjdGVkLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+ZmFiczwvY29kZT4gaXMgQU5TSS4gCis8Y29kZT5mYWJzZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2ZkaW0uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2ZkaW0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzM4MDIwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZmRpbS5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZkaW0gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZhYnMuaHRtbCNmYWJzIiB0aXRsZT0iZmFicyI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZsb29yLmh0bWwjZmxvb3IiIHRpdGxlPSJmbG9vciI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZmRpbSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmbG9vci5odG1sI2Zsb29yIj5mbG9vcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZhYnMuaHRtbCNmYWJzIj5mYWJzPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjE5IDxjb2RlPmZkaW08L2NvZGU+LCA8Y29kZT5mZGltZjwvY29kZT4mbmRhc2g7cG9zaXRpdmUgZGlmZmVyZW5jZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZkaW0tNDciPjwvYT48YSBuYW1lPSJpbmRleC1mZGltZi00OCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGZkaW0oZG91YmxlIDx2YXI+eDwvdmFyPiwgZG91YmxlIDx2YXI+eTwvdmFyPik7CisgICAgIGZsb2F0IGZkaW1mKGZsb2F0IDx2YXI+eDwvdmFyPiwgZmxvYXQgPHZhcj55PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+ZmRpbTwvY29kZT4gZnVuY3Rpb25zIGRldGVybWluZSB0aGUgcG9zaXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZWlyCithcmd1bWVudHMsIHJldHVybmluZzoKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAJPHZhcj54PC92YXI+IC0gPHZhcj55PC92YXI+CWlmIDx2YXI+eDwvdmFyPiAmZ3Q7IDx2YXI+eTwvdmFyPiwgb3IKKzwvcHJlPgorICAgPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIAkrMAlpZiA8dmFyPng8L3Zhcj4gJmx0Oz0gPHZhcj55PC92YXI+LCBvcgorPC9wcmU+CisgICA8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgCU5BTglpZiBlaXRoZXIgYXJndW1lbnQgaXMgTkFOLgorPC9wcmU+CisgICA8cD5BIHJhbmdlIGVycm9yIG1heSBvY2N1ci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPmZkaW08L2NvZGU+IGZ1bmN0aW9ucyByZXR1cm4gdGhlIHBvc2l0aXZlIGRpZmZlcmVuY2UgdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMsIFBPU0lYLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Zsb29yLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mbG9vci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZmFiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mbG9vci5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZsb29yIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmZGltLmh0bWwjZmRpbSIgdGl0bGU9ImZkaW0iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmbWEuaHRtbCNmbWEiIHRpdGxlPSJmbWEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZsb29yIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZtYS5odG1sI2ZtYSI+Zm1hPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZmRpbS5odG1sI2ZkaW0iPmZkaW08L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMjAgPGNvZGU+Zmxvb3I8L2NvZGU+LCA8Y29kZT5mbG9vcmY8L2NvZGU+LCA8Y29kZT5jZWlsPC9jb2RlPiwgPGNvZGU+Y2VpbGY8L2NvZGU+Jm1kYXNoO2Zsb29yIGFuZCBjZWlsaW5nPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZmxvb3ItNDkiPjwvYT48YSBuYW1lPSJpbmRleC1mbG9vcmYtNTAiPjwvYT48YSBuYW1lPSJpbmRleC1jZWlsLTUxIj48L2E+PGEgbmFtZT0iaW5kZXgtY2VpbGYtNTIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBmbG9vcihkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgZmxvb3JmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIGRvdWJsZSBjZWlsKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCBjZWlsZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmZsb29yPC9jb2RlPiBhbmQgPGNvZGU+Zmxvb3JmPC9jb2RlPiBmaW5kCit0aGUgbmVhcmVzdCBpbnRlZ2VyIGxlc3MgdGhhbiBvciBlcXVhbCB0byA8dmFyPng8L3Zhcj4uIAorPGNvZGU+Y2VpbDwvY29kZT4gYW5kIDxjb2RlPmNlaWxmPC9jb2RlPiBmaW5kCit0aGUgbmVhcmVzdCBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA8dmFyPng8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmZsb29yPC9jb2RlPiBhbmQgPGNvZGU+Y2VpbDwvY29kZT4gcmV0dXJuIHRoZSBpbnRlZ2VyIHJlc3VsdCBhcyBhIGRvdWJsZS4gCis8Y29kZT5mbG9vcmY8L2NvZGU+IGFuZCA8Y29kZT5jZWlsZjwvY29kZT4gcmV0dXJuIHRoZSBpbnRlZ2VyIHJlc3VsdCBhcyBhIGZsb2F0LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+Zmxvb3I8L2NvZGU+IGFuZCA8Y29kZT5jZWlsPC9jb2RlPiBhcmUgQU5TSS4gCis8Y29kZT5mbG9vcmY8L2NvZGU+IGFuZCA8Y29kZT5jZWlsZjwvY29kZT4gYXJlIGV4dGVuc2lvbnMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZm1hLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mbWEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjEzMjI1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZm1hLmh0bWwKQEAgLTAsMCArMSw3MiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Zm1hIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmbG9vci5odG1sI2Zsb29yIiB0aXRsZT0iZmxvb3IiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmbWF4Lmh0bWwjZm1heCIgdGl0bGU9ImZtYXgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZtYSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmbWF4Lmh0bWwjZm1heCI+Zm1heDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZsb29yLmh0bWwjZmxvb3IiPmZsb29yPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjIxIDxjb2RlPmZtYTwvY29kZT4sIDxjb2RlPmZtYWY8L2NvZGU+Jm5kYXNoO2Zsb2F0aW5nIG11bHRpcGx5IGFkZDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZtYS01MyI+PC9hPjxhIG5hbWU9ImluZGV4LWZtYWYtNTQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBmbWEoZG91YmxlIDx2YXI+eDwvdmFyPiwgZG91YmxlIDx2YXI+eTwvdmFyPiwgZG91YmxlIDx2YXI+ejwvdmFyPik7CisgICAgIGZsb2F0IGZtYWYoZmxvYXQgPHZhcj54PC92YXI+LCBmbG9hdCA8dmFyPnk8L3Zhcj4sIGZsb2F0IDx2YXI+ejwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPmZtYTwvY29kZT4gZnVuY3Rpb25zIGNvbXB1dGUgKDx2YXI+eDwvdmFyPiAqIDx2YXI+eTwvdmFyPikgKyA8dmFyPno8L3Zhcj4sIHJvdW5kZWQgYXMgb25lIHRlcm5hcnkKK29wZXJhdGlvbjogIHRoZXkgY29tcHV0ZSB0aGUgdmFsdWUgKGFzIGlmKSB0byBpbmZpbml0ZSBwcmVjaXNpb24gYW5kIHJvdW5kIG9uY2UKK3RvIHRoZSByZXN1bHQgZm9ybWF0LCBhY2NvcmRpbmcgdG8gdGhlIHJvdW5kaW5nIG1vZGUgY2hhcmFjdGVyaXplZCBieSB0aGUgdmFsdWUKK29mIEZMVF9ST1VORFMuICBUaGF0IGlzLCB0aGV5IGFyZSBzdXBwb3NlZCB0byBkbyB0aGlzOiAgc2VlIGJlbG93LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+Zm1hPC9jb2RlPiBmdW5jdGlvbnMgcmV0dXJuICg8dmFyPng8L3Zhcj4gKiA8dmFyPnk8L3Zhcj4pICsgPHZhcj56PC92YXI+LCByb3VuZGVkIGFzIG9uZSB0ZXJuYXJ5CitvcGVyYXRpb24uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+QnVnczwvc3Ryb25nPjxicj4KK1RoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcHJvdmlkZSB0aGUgZnVuY3Rpb24gdGhhdCBpdCBzaG91bGQsIHB1cmVseQorcmV0dXJuaW5nICIoPHZhcj54PC92YXI+ICogPHZhcj55PC92YXI+KSArIDx2YXI+ejwvdmFyPjsiIHdpdGggbm8gYXR0ZW1wdCBhdCBhbGwgdG8gcHJvdmlkZSB0aGUKK3NpbXVsYXRlZCBpbmZpbml0ZSBwcmVjaXNpb24gaW50ZXJtZWRpYXRlcyB3aGljaCBhcmUgcmVxdWlyZWQuICBETyBOT1QgVVNFIFRIRU0uCisKKyAgIDxwPklmIGRvdWJsZSBoYXMgZW5vdWdoIG1vcmUgcHJlY2lzaW9uIHRoYW4gZmxvYXQsIHRoZW4gPGNvZGU+Zm1hZjwvY29kZT4gc2hvdWxkIHByb3ZpZGUKK3RoZSBleHBlY3RlZCBudW1lcmljIHJlc3VsdHMsIGFzIGl0IGRvZXMgdXNlIGRvdWJsZSBmb3IgdGhlIGNhbGN1bGF0aW9uLiAgQnV0CitzaW5jZSB0aGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIHBsYXRmb3JtcywgdGhpcyBtYW51YWwgY2Fubm90IGRldGVybWluZQoraWYgaXQgaXMgc28gZm9yIHlvdXIgY2FzZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQywgUE9TSVguCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZm1heC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZm1heC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjdmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mbWF4Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+Zm1heCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZm1hLmh0bWwjZm1hIiB0aXRsZT0iZm1hIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZm1pbi5odG1sI2ZtaW4iIHRpdGxlPSJmbWluIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmbWF4Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZtaW4uaHRtbCNmbWluIj5mbWluPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZm1hLmh0bWwjZm1hIj5mbWE8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMjIgPGNvZGU+Zm1heDwvY29kZT4sIDxjb2RlPmZtYXhmPC9jb2RlPiZuZGFzaDttYXhpbXVtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZm1heC01NSI+PC9hPjxhIG5hbWU9ImluZGV4LWZtYXhmLTU2Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgZm1heChkb3VibGUgPHZhcj54PC92YXI+LCBkb3VibGUgPHZhcj55PC92YXI+KTsKKyAgICAgZmxvYXQgZm1heGYoZmxvYXQgPHZhcj54PC92YXI+LCBmbG9hdCA8dmFyPnk8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5mbWF4PC9jb2RlPiBmdW5jdGlvbnMgZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIG51bWVyaWMgdmFsdWUgb2YgdGhlaXIgYXJndW1lbnRzLiAKK05hTiBhcmd1bWVudHMgYXJlIHRyZWF0ZWQgYXMgbWlzc2luZyBkYXRhOiAgaWYgb25lIGFyZ3VtZW50IGlzIGEgTmFOIGFuZCB0aGUKK290aGVyIG51bWVyaWMsIHRoZW4gdGhlIDxjb2RlPmZtYXg8L2NvZGU+IGZ1bmN0aW9ucyBjaG9vc2UgdGhlIG51bWVyaWMgdmFsdWUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5mbWF4PC9jb2RlPiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBtYXhpbXVtIG51bWVyaWMgdmFsdWUgb2YgdGhlaXIgYXJndW1lbnRzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDLCBQT1NJWC4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mbWluLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mbWluLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5YzQ3MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2ZtaW4uaHRtbApAQCAtMCwwICsxLDU5IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5mbWluIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmbWF4Lmh0bWwjZm1heCIgdGl0bGU9ImZtYXgiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJmbW9kLmh0bWwjZm1vZCIgdGl0bGU9ImZtb2QiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZtaW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iZm1vZC5odG1sI2Ztb2QiPmZtb2Q8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJmbWF4Lmh0bWwjZm1heCI+Zm1heDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4yMyA8Y29kZT5mbWluPC9jb2RlPiwgPGNvZGU+Zm1pbmY8L2NvZGU+Jm5kYXNoO21pbmltdW08L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1mbWluLTU3Ij48L2E+PGEgbmFtZT0iaW5kZXgtZm1pbmYtNTgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBmbWluKGRvdWJsZSA8dmFyPng8L3Zhcj4sIGRvdWJsZSA8dmFyPnk8L3Zhcj4pOworICAgICBmbG9hdCBmbWluZihmbG9hdCA8dmFyPng8L3Zhcj4sIGZsb2F0IDx2YXI+eTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPmZtaW48L2NvZGU+IGZ1bmN0aW9ucyBkZXRlcm1pbmUgdGhlIG1pbmltdW0gbnVtZXJpYyB2YWx1ZSBvZiB0aGVpciBhcmd1bWVudHMuIAorTmFOIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBhcyBtaXNzaW5nIGRhdGE6ICBpZiBvbmUgYXJndW1lbnQgaXMgYSBOYU4gYW5kIHRoZQorb3RoZXIgbnVtZXJpYywgdGhlbiB0aGUgPGNvZGU+Zm1pbjwvY29kZT4gZnVuY3Rpb25zIGNob29zZSB0aGUgbnVtZXJpYyB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPmZtaW48L2NvZGU+IGZ1bmN0aW9ucyByZXR1cm4gdGhlIG1pbmltdW0gbnVtZXJpYyB2YWx1ZSBvZiB0aGVpciBhcmd1bWVudHMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMsIFBPU0lYLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Ztb2QuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2Ztb2QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQwNzVkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvZm1vZC5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZtb2QgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImZtaW4uaHRtbCNmbWluIiB0aXRsZT0iZm1pbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImZwY2xhc3NpZnkuaHRtbCNmcGNsYXNzaWZ5IiB0aXRsZT0iZnBjbGFzc2lmeSI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iZm1vZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJmcGNsYXNzaWZ5Lmh0bWwjZnBjbGFzc2lmeSI+ZnBjbGFzc2lmeTwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZtaW4uaHRtbCNmbWluIj5mbWluPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjI0IDxjb2RlPmZtb2Q8L2NvZGU+LCA8Y29kZT5mbW9kZjwvY29kZT4mbWRhc2g7ZmxvYXRpbmctcG9pbnQgcmVtYWluZGVyIChtb2R1bG8pPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtZm1vZC01OSI+PC9hPjxhIG5hbWU9ImluZGV4LWZtb2RmLTYwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgZm1vZChkb3VibGUgPHZhcj54PC92YXI+LCBkb3VibGUgPHZhcj55PC92YXI+KQorICAgICBmbG9hdCBmbW9kZihmbG9hdCA8dmFyPng8L3Zhcj4sIGZsb2F0IDx2YXI+eTwvdmFyPikKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+Zm1vZDwvY29kZT4gYW5kIDxjb2RlPmZtb2RmPC9jb2RlPiBmdW5jdGlvbnMgY29tcHV0ZSB0aGUgZmxvYXRpbmctcG9pbnQKK3JlbWFpbmRlciBvZiA8dmFyPng8L3Zhcj4vPHZhcj55PC92YXI+ICg8dmFyPng8L3Zhcj4gbW9kdWxvIDx2YXI+eTwvdmFyPikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5mbW9kPC9jb2RlPiBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZQorPHZhcj54PC92YXI+LTx2YXI+aTwvdmFyPio8dmFyPnk8L3Zhcj4sCitmb3IgdGhlIGxhcmdlc3QgaW50ZWdlciA8dmFyPmk8L3Zhcj4gc3VjaCB0aGF0LCBpZiA8dmFyPnk8L3Zhcj4gaXMgbm9uemVybywgdGhlCityZXN1bHQgaGFzIHRoZSBzYW1lIHNpZ24gYXMgPHZhcj54PC92YXI+IGFuZCBtYWduaXR1ZGUgbGVzcyB0aGFuIHRoZQorbWFnbml0dWRlIG9mIDx2YXI+eTwvdmFyPi4KKworICAgPHA+PGNvZGU+Zm1vZCg8L2NvZGU+PHZhcj54PC92YXI+PGNvZGU+LDApPC9jb2RlPiByZXR1cm5zIE5hTiwgYW5kIHNldHMgPGNvZGU+ZXJybm88L2NvZGU+IHRvIDxjb2RlPkVET008L2NvZGU+LgorCisgICA8cD5Zb3UgY2FuIG1vZGlmeSBlcnJvciB0cmVhdG1lbnQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB1c2luZyA8Y29kZT5tYXRoZXJyPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmZtb2Q8L2NvZGU+IGlzIEFOU0kgQy4gPGNvZGU+Zm1vZGY8L2NvZGU+IGlzIGFuIGV4dGVuc2lvbi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mcGNsYXNzaWZ5Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mcGNsYXNzaWZ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjMWYxZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2ZwY2xhc3NpZnkuaHRtbApAQCAtMCwwICsxLDE0MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ZnBjbGFzc2lmeSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZm1vZC5odG1sI2Ztb2QiIHRpdGxlPSJmbW9kIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZnJleHAuaHRtbCNmcmV4cCIgdGl0bGU9ImZyZXhwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJmcGNsYXNzaWZ5Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImZyZXhwLmh0bWwjZnJleHAiPmZyZXhwPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZm1vZC5odG1sI2Ztb2QiPmZtb2Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMzEgPGNvZGU+ZnBjbGFzc2lmeTwvY29kZT4sIDxjb2RlPmlzZmluaXRlPC9jb2RlPiwgPGNvZGU+aXNpbmY8L2NvZGU+LCA8Y29kZT5pc25hbjwvY29kZT4sIGFuZCA8Y29kZT5pc25vcm1hbDwvY29kZT4mbmRhc2g7ZmxvYXRpbmctcG9pbnQgY2xhc3NpZmljYXRpb24gbWFjcm9zOyA8Y29kZT5maW5pdGU8L2NvZGU+LCA8Y29kZT5maW5pdGVmPC9jb2RlPiwgPGNvZGU+aXNpbmY8L2NvZGU+LCA8Y29kZT5pc2luZmY8L2NvZGU+LCA8Y29kZT5pc25hbjwvY29kZT4sIDxjb2RlPmlzbmFuZjwvY29kZT4mbmRhc2g7dGVzdCBmb3IgZXhjZXB0aW9uYWwgbnVtYmVyczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZwY2xhc3NpZnktODUiPjwvYT48YSBuYW1lPSJpbmRleC1pc2Zpbml0ZS04NiI+PC9hPjxhIG5hbWU9ImluZGV4LWlzaW5mLTg3Ij48L2E+PGEgbmFtZT0iaW5kZXgtaXNuYW4tODgiPjwvYT48YSBuYW1lPSJpbmRleC1pc25vcm1hbC04OSI+PC9hPjxhIG5hbWU9ImluZGV4LWlzbmFuLTkwIj48L2E+PGEgbmFtZT0iaW5kZXgtaXNpbmYtOTEiPjwvYT48YSBuYW1lPSJpbmRleC1maW5pdGUtOTIiPjwvYT48YSBuYW1lPSJpbmRleC1pc25hbmYtOTMiPjwvYT48YSBuYW1lPSJpbmRleC1pc2luZmYtOTQiPjwvYT48YSBuYW1lPSJpbmRleC1maW5pdGVmLTk1Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICBbQzk5IHN0YW5kYXJkIG1hY3JvczpdCisgICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGludCBmcGNsYXNzaWZ5KHJlYWwtZmxvYXRpbmcgPHZhcj54PC92YXI+KTsKKyAgICAgaW50IGlzZmluaXRlKHJlYWwtZmxvYXRpbmcgPHZhcj54PC92YXI+KTsKKyAgICAgaW50IGlzaW5mKHJlYWwtZmxvYXRpbmcgPHZhcj54PC92YXI+KTsKKyAgICAgaW50IGlzbmFuKHJlYWwtZmxvYXRpbmcgPHZhcj54PC92YXI+KTsKKyAgICAgaW50IGlzbm9ybWFsKHJlYWwtZmxvYXRpbmcgPHZhcj54PC92YXI+KTsKKyAgICAgCisgICAgIFtBcmNoYWljIFNVU3YyIGZ1bmN0aW9uczpdCisgICAgICNpbmNsdWRlICZsdDtpZWVlZnAuaCZndDsKKyAgICAgaW50IGlzbmFuKGRvdWJsZSA8dmFyPmFyZzwvdmFyPik7CisgICAgIGludCBpc2luZihkb3VibGUgPHZhcj5hcmc8L3Zhcj4pOworICAgICBpbnQgZmluaXRlKGRvdWJsZSA8dmFyPmFyZzwvdmFyPik7CisgICAgIGludCBpc25hbmYoZmxvYXQgPHZhcj5hcmc8L3Zhcj4pOworICAgICBpbnQgaXNpbmZmKGZsb2F0IDx2YXI+YXJnPC92YXI+KTsKKyAgICAgaW50IGZpbml0ZWYoZmxvYXQgPHZhcj5hcmc8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmZwY2xhc3NpZnk8L2NvZGU+LCA8Y29kZT5pc2Zpbml0ZTwvY29kZT4sIDxjb2RlPmlzaW5mPC9jb2RlPiwgPGNvZGU+aXNuYW48L2NvZGU+LCBhbmQgPGNvZGU+aXNub3JtYWw8L2NvZGU+IGFyZSBtYWNyb3MKK2RlZmluZWQgZm9yIHVzZSBpbiBjbGFzc2lmeWluZyBmbG9hdGluZy1wb2ludCBudW1iZXJzLiAgVGhpcyBpcyBhIGhlbHAgYmVjYXVzZQorb2Ygc3BlY2lhbCAidmFsdWVzIiBsaWtlIE5hTiBhbmQgaW5maW5pdGllcy4gIEluIHRoZSBzeW5vcHNlcyBzaG93biwKKyJyZWFsLWZsb2F0aW5nIiBpbmRpY2F0ZXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgYW4gZXhwcmVzc2lvbiBvZiByZWFsIGZsb2F0aW5nCit0eXBlLiAgVGhlc2UgZnVuY3Rpb24tbGlrZSBtYWNyb3MgYXJlIEM5OSBhbmQgUE9TSVgtY29tcGxpYW50LCBhbmQgc2hvdWxkIGJlCit1c2VkIGluc3RlYWQgb2YgdGhlIG5vdy1hcmNoYWljIFNVU3YyIGZ1bmN0aW9ucy4KKworICAgPHA+VGhlIDxjb2RlPmZwY2xhc3NpZnk8L2NvZGU+IG1hY3JvIGNsYXNzaWZpZXMgaXRzIGFyZ3VtZW50IHZhbHVlIGFzIE5hTiwgaW5maW5pdGUsIG5vcm1hbCwKK3N1Ym5vcm1hbCwgemVybywgb3IgaW50byBhbm90aGVyIGltcGxlbWVudGF0aW9uLWRlZmluZWQgY2F0ZWdvcnkuICBGaXJzdCwgYW4KK2FyZ3VtZW50IHJlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdpZGVyIHRoYW4gaXRzIHNlbWFudGljIHR5cGUgaXMgY29udmVydGVkIHRvCitpdHMgc2VtYW50aWMgdHlwZS4gIFRoZW4gY2xhc3NpZmljYXRpb24gaXMgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LiAKK1RoZSA8Y29kZT5mcGNsYXNzaWZ5PC9jb2RlPiBtYWNybyByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIGNsYXNzaWZpY2F0aW9uIG1hY3JvCithcHByb3ByaWF0ZSB0byB0aGUgdmFsdWUgb2YgaXRzIGFyZ3VtZW50OgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5GUF9JTkZJTklURTwvY29kZT48ZGQ+PHZhcj54PC92YXI+IGlzIGVpdGhlciBwbHVzIG9yIG1pbnVzIGluZmluaXR5OworPGJyPjxkdD48Y29kZT5GUF9OQU48L2NvZGU+PGRkPjx2YXI+eDwvdmFyPiBpcyAiTm90IEEgTnVtYmVyIiAocGx1cyBvciBtaW51cyk7Cis8YnI+PGR0Pjxjb2RlPkZQX05PUk1BTDwvY29kZT48ZGQ+PHZhcj54PC92YXI+IGlzIGEgIm5vcm1hbCIgbnVtYmVyIChpLmUuIGlzIG5vbmUgb2YgdGhlIG90aGVyIHNwZWNpYWwgZm9ybXMpOworPGJyPjxkdD48Y29kZT5GUF9TVUJOT1JNQUw8L2NvZGU+PGRkPjx2YXI+eDwvdmFyPiBpcyB0b28gc21hbGwgYmUgc3RvcmVkIGFzIGEgcmVndWxhciBub3JtYWxpemVkIG51bWJlciAoaS5lLiBsb3NzIG9mIHByZWNpc2lvbiBpcyBsaWtlbHkpOyBvcgorPGJyPjxkdD48Y29kZT5GUF9aRVJPPC9jb2RlPjxkZD48dmFyPng8L3Zhcj4gaXMgMCAoZWl0aGVyIHBsdXMgb3IgbWludXMpLiAKKzwvZGw+CisKKyAgIDxwPlRoZSAiPGNvZGU+aXM8L2NvZGU+IiBzZXQgb2YgbWFjcm9zIHByb3ZpZGUgYSB1c2VmdWwgc2V0IG9mIHNob3J0aGFuZCB3YXlzIGZvcgorY2xhc3NpZnlpbmcgZmxvYXRpbmctcG9pbnQgbnVtYmVycywgcHJvdmlkaW5nIHRoZSBmb2xsb3dpbmcgZXF1aXZhbGVudAorcmVsYXRpb25zOgorCisgICAgIDxkbD4KKzxkdD48Y29kZT5pc2Zpbml0ZSg8L2NvZGU+PHZhcj54PC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+cmV0dXJucyBub24temVybyBpZiA8dmFyPng8L3Zhcj4gaXMgZmluaXRlLiAgKEl0IGlzIGVxdWl2YWxlbnQgdG8KKyg8Y29kZT5mcGNsYXNzaWZ5PC9jb2RlPig8dmFyPng8L3Zhcj4pICE9IEZQX0lORklOSVRFICAmYW1wOyZhbXA7ICA8Y29kZT5mcGNsYXNzaWZ5PC9jb2RlPig8dmFyPng8L3Zhcj4pICE9IEZQX05BTikuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+aXNpbmYoPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPnJldHVybnMgbm9uLXplcm8gaWYgPHZhcj54PC92YXI+IGlzIGluZmluaXRlLiAgKEl0IGlzIGVxdWl2YWxlbnQgdG8KKyg8Y29kZT5mcGNsYXNzaWZ5PC9jb2RlPig8dmFyPng8L3Zhcj4pID09IEZQX0lORklOSVRFKS4pCisKKyAgICAgPGJyPjxkdD48Y29kZT5pc25hbig8L2NvZGU+PHZhcj54PC92YXI+PGNvZGU+KTwvY29kZT48ZGQ+cmV0dXJucyBub24temVybyBpZiA8dmFyPng8L3Zhcj4gaXMgTmFOLiAgKEl0IGlzIGVxdWl2YWxlbnQgdG8KKyg8Y29kZT5mcGNsYXNzaWZ5PC9jb2RlPig8dmFyPng8L3Zhcj4pID09IEZQX05BTikuKQorCisgICAgIDxicj48ZHQ+PGNvZGU+aXNub3JtYWwoPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+PGRkPnJldHVybnMgbm9uLXplcm8gaWYgPHZhcj54PC92YXI+IGlzIG5vcm1hbC4gIChJdCBpcyBlcXVpdmFsZW50IHRvCisoPGNvZGU+ZnBjbGFzc2lmeTwvY29kZT4oPHZhcj54PC92YXI+KSA9PSBGUF9OT1JNQUwpLikgCis8L2RsPgorCisgICA8cD5UaGUgYXJjaGFpYyBTVVN2MiBmdW5jdGlvbnMgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmxvYXRpbmctcG9pbnQKK2FyZ3VtZW50IHN1cHBsaWVkLgorCisgICA8cD5UaGVyZSBhcmUgZml2ZSBtYWpvciBudW1iZXIgZm9ybWF0cyAoImV4cG9uZW50IiByZWZlcnJpbmcgdG8gdGhlCitiaWFzZWQgZXhwb25lbnQgaW4gdGhlIGJpbmFyeS1lbmNvZGVkIG51bWJlcik6CisgICAgIDxkbD4KKzxkdD48Y29kZT56ZXJvPC9jb2RlPjxkZD5BIG51bWJlciB3aGljaCBjb250YWlucyBhbGwgemVybyBiaXRzLCBleGNsdWRpbmcgdGhlIHNpZ24gYml0LiAKKzxicj48ZHQ+PGNvZGU+c3Vibm9ybWFsPC9jb2RlPjxkZD5BIG51bWJlciB3aXRoIGEgemVybyBleHBvbmVudCBidXQgYSBub256ZXJvIGZyYWN0aW9uLiAKKzxicj48ZHQ+PGNvZGU+bm9ybWFsPC9jb2RlPjxkZD5BIG51bWJlciB3aXRoIGFuIGV4cG9uZW50IGFuZCBhIGZyYWN0aW9uLiAKKzxicj48ZHQ+PGNvZGU+aW5maW5pdHk8L2NvZGU+PGRkPkEgbnVtYmVyIHdpdGggYW4gYWxsIDEncyBleHBvbmVudCBhbmQgYSB6ZXJvIGZyYWN0aW9uLiAKKzxicj48ZHQ+PGNvZGU+TkFOPC9jb2RlPjxkZD5BIG51bWJlciB3aXRoIGFuIGFsbCAxJ3MgZXhwb25lbnQgYW5kIGEgbm9uemVybyBmcmFjdGlvbi4KKworICAgPC9kbD4KKworICAgPHA+PGNvZGU+aXNuYW48L2NvZGU+IHJldHVybnMgMSBpZiB0aGUgYXJndW1lbnQgaXMgYSBuYW4uIDxjb2RlPmlzaW5mPC9jb2RlPgorcmV0dXJucyAxIGlmIHRoZSBhcmd1bWVudCBpcyBpbmZpbml0eS4gIDxjb2RlPmZpbml0ZTwvY29kZT4gcmV0dXJucyAxIGlmIHRoZQorYXJndW1lbnQgaXMgemVybywgc3Vibm9ybWFsIG9yIG5vcm1hbC4gCitUaGUgPGNvZGU+aXNuYW5mPC9jb2RlPiwgPGNvZGU+aXNpbmZmPC9jb2RlPiBhbmQgPGNvZGU+ZmluaXRlZjwvY29kZT4gZnVuY3Rpb25zIHBlcmZvcm0gdGhlIHNhbWUKK29wZXJhdGlvbnMgYXMgdGhlaXIgPGNvZGU+aXNuYW48L2NvZGU+LCA8Y29kZT5pc2luZjwvY29kZT4gYW5kIDxjb2RlPmZpbml0ZTwvY29kZT4KK2NvdW50ZXJwYXJ0cywgYnV0IG9uIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKworICAgPHA+SXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIEM5OSBzdGFuZGFyZCBkaWN0YXRlcyB0aGF0IDxjb2RlPmlzbmFuPC9jb2RlPgorYW5kIDxjb2RlPmlzaW5mPC9jb2RlPiBhcmUgbWFjcm9zIHRoYXQgb3BlcmF0ZSBvbiBtdWx0aXBsZSB0eXBlcyBvZgorZmxvYXRpbmctcG9pbnQuICBUaGUgU1VTdjIgc3RhbmRhcmQgZGVjbGFyZXMgPGNvZGU+aXNuYW48L2NvZGU+IGFzCithIGZ1bmN0aW9uIHRha2luZyBkb3VibGUuICBOZXdsaWIgaGFzIGRlY2lkZWQgdG8gZGVjbGFyZQordGhlbSBib3RoIGFzIG1hY3JvcyBpbiBtYXRoLmggYW5kIGFzIGZ1bmN0aW9ucyBpbiBpZWVlZnAuaCB0bworbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPCEtLSBGb3JtYXR0aW5nIG5vdGU6ICAiJEAiIGZvcmNlcyBhIG5ldyBsaW5lIC0tPgorVGhlIGZwY2xhc3NpZnkgbWFjcm8gcmV0dXJucyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgYXBwcm9wcmlhdGUgRlBfIG1hY3JvLjxicj4KK1RoZSBpc2Zpbml0ZSBtYWNybyByZXR1cm5zIG5vbnplcm8gaWYgPHZhcj54PC92YXI+IGlzIGZpbml0ZSwgZWxzZSAwLjxicj4KK1RoZSBpc2luZiBtYWNybyByZXR1cm5zIG5vbnplcm8gaWYgPHZhcj54PC92YXI+IGlzIGluZmluaXRlLCBlbHNlIDAuPGJyPgorVGhlIGlzbmFuIG1hY3JvIHJldHVybnMgbm9uemVybyBpZiA8dmFyPng8L3Zhcj4gaXMgYW4gTmFOLCBlbHNlIDAuPGJyPgorVGhlIGlzbm9ybWFsIG1hY3JvIHJldHVybnMgbm9uemVybyBpZiA8dmFyPng8L3Zhcj4gaGFzIGEgbm9ybWFsIHZhbHVlLCBlbHNlIDAuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CittYXRoLmggbWFjcm9zIGFyZSBDOTksIFBPU0lYLgorCisgICA8cD5pZWVlZnAuaCBmdW50aW9ucyBhcmUgb3V0ZGF0ZWQgYW5kIHNob3VsZCBiZSBhdm9pZGVkLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2ZyZXhwLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mcmV4cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMDM1ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9mcmV4cC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmZyZXhwIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJmcGNsYXNzaWZ5Lmh0bWwjZnBjbGFzc2lmeSIgdGl0bGU9ImZwY2xhc3NpZnkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnYW1tYS5odG1sI2dhbW1hIiB0aXRsZT0iZ2FtbWEiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImZyZXhwIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdhbW1hLmh0bWwjZ2FtbWEiPmdhbW1hPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iZnBjbGFzc2lmeS5odG1sI2ZwY2xhc3NpZnkiPmZwY2xhc3NpZnk8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMjUgPGNvZGU+ZnJleHA8L2NvZGU+LCA8Y29kZT5mcmV4cGY8L2NvZGU+Jm1kYXNoO3NwbGl0IGZsb2F0aW5nLXBvaW50IG51bWJlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWZyZXhwLTYxIj48L2E+PGEgbmFtZT0iaW5kZXgtZnJleHBmLTYyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgZnJleHAoZG91YmxlIDx2YXI+dmFsPC92YXI+LCBpbnQgKjx2YXI+ZXhwPC92YXI+KTsKKyAgICAgZmxvYXQgZnJleHBmKGZsb2F0IDx2YXI+dmFsPC92YXI+LCBpbnQgKjx2YXI+ZXhwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitBbGwgbm9uemVybywgbm9ybWFsIG51bWJlcnMgY2FuIGJlIGRlc2NyaWJlZCBhcyA8dmFyPm08L3Zhcj4gKiAyKio8dmFyPnA8L3Zhcj4uIAorPGNvZGU+ZnJleHA8L2NvZGU+IHJlcHJlc2VudHMgdGhlIGRvdWJsZSA8dmFyPnZhbDwvdmFyPiBhcyBhIG1hbnRpc3NhIDx2YXI+bTwvdmFyPgorYW5kIGEgcG93ZXIgb2YgdHdvIDx2YXI+cDwvdmFyPi4gVGhlIHJlc3VsdGluZyBtYW50aXNzYSB3aWxsIGFsd2F5cworYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDxjb2RlPjAuNTwvY29kZT4sIGFuZCBsZXNzIHRoYW4gPGNvZGU+MS4wPC9jb2RlPiAoYXMKK2xvbmcgYXMgPHZhcj52YWw8L3Zhcj4gaXMgbm9uemVybykuIFRoZSBwb3dlciBvZiB0d28gd2lsbCBiZSBzdG9yZWQKK2luIDxjb2RlPio8L2NvZGU+PHZhcj5leHA8L3Zhcj4uCisKKyAgIDxwPjx2YXI+bTwvdmFyPiBhbmQgPHZhcj5wPC92YXI+IGFyZSBjYWxjdWxhdGVkIHNvIHRoYXQKKzx2YXI+dmFsPC92YXI+IGlzIDx2YXI+bTwvdmFyPiB0aW1lcyA8Y29kZT4yPC9jb2RlPiB0byB0aGUgcG93ZXIgPHZhcj5wPC92YXI+LgorCisgICA8cD48Y29kZT5mcmV4cGY8L2NvZGU+IGlzIGlkZW50aWNhbCwgb3RoZXIgdGhhbiB0YWtpbmcgYW5kIHJldHVybmluZworZmxvYXRzIHJhdGhlciB0aGFuIGRvdWJsZXMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmZyZXhwPC9jb2RlPiByZXR1cm5zIHRoZSBtYW50aXNzYSA8dmFyPm08L3Zhcj4uIElmIDx2YXI+dmFsPC92YXI+IGlzIDxjb2RlPjA8L2NvZGU+LCBpbmZpbml0eSwKK29yIE5hbiwgPGNvZGU+ZnJleHA8L2NvZGU+IHdpbGwgc2V0IDxjb2RlPio8L2NvZGU+PHZhcj5leHA8L3Zhcj4gdG8gPGNvZGU+MDwvY29kZT4gYW5kIHJldHVybiA8dmFyPnZhbDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmZyZXhwPC9jb2RlPiBpcyBBTlNJLiAKKzxjb2RlPmZyZXhwZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2dhbW1hLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9nYW1tYS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYTIxZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9nYW1tYS5odG1sCkBAIC0wLDAgKzEsMTEwIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5nYW1tYSAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZnJleHAuaHRtbCNmcmV4cCIgdGl0bGU9ImZyZXhwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaHlwb3QuaHRtbCNoeXBvdCIgdGl0bGU9Imh5cG90Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJnYW1tYSI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJoeXBvdC5odG1sI2h5cG90Ij5oeXBvdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImZyZXhwLmh0bWwjZnJleHAiPmZyZXhwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjI2IDxjb2RlPmdhbW1hPC9jb2RlPiwgPGNvZGU+Z2FtbWFmPC9jb2RlPiwgPGNvZGU+bGdhbW1hPC9jb2RlPiwgPGNvZGU+bGdhbW1hZjwvY29kZT4sIDxjb2RlPmdhbW1hX3I8L2NvZGU+LCA8Y29kZT5nYW1tYWZfcjwvY29kZT4sIDxjb2RlPmxnYW1tYV9yPC9jb2RlPiwgPGNvZGU+bGdhbW1hZl9yPC9jb2RlPiwgPGNvZGU+dGdhbW1hPC9jb2RlPiwgYW5kIDxjb2RlPnRnYW1tYWY8L2NvZGU+Jm5kYXNoO2xvZ2FyaXRobWljIGFuZCBwbGFpbiBnYW1tYSBmdW5jdGlvbnM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1nYW1tYS02MyI+PC9hPjxhIG5hbWU9ImluZGV4LWdhbW1hZi02NCI+PC9hPjxhIG5hbWU9ImluZGV4LWxnYW1tYS02NSI+PC9hPjxhIG5hbWU9ImluZGV4LWxnYW1tYWYtNjYiPjwvYT48YSBuYW1lPSJpbmRleC1nYW1tYV8wMDVmci02NyI+PC9hPjxhIG5hbWU9ImluZGV4LWdhbW1hZl8wMDVmci02OCI+PC9hPjxhIG5hbWU9ImluZGV4LWxnYW1tYV8wMDVmci02OSI+PC9hPjxhIG5hbWU9ImluZGV4LWxnYW1tYWZfMDA1ZnItNzAiPjwvYT48YSBuYW1lPSJpbmRleC10Z2FtbWEtNzEiPjwvYT48YSBuYW1lPSJpbmRleC10Z2FtbWFmLTcyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgZ2FtbWEoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGdhbW1hZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICBkb3VibGUgbGdhbW1hKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCBsZ2FtbWFmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIGRvdWJsZSBnYW1tYV9yKGRvdWJsZSA8dmFyPng8L3Zhcj4sIGludCAqPHZhcj5zaWduZ2FtcDwvdmFyPik7CisgICAgIGZsb2F0IGdhbW1hZl9yKGZsb2F0IDx2YXI+eDwvdmFyPiwgaW50ICo8dmFyPnNpZ25nYW1wPC92YXI+KTsKKyAgICAgZG91YmxlIGxnYW1tYV9yKGRvdWJsZSA8dmFyPng8L3Zhcj4sIGludCAqPHZhcj5zaWduZ2FtcDwvdmFyPik7CisgICAgIGZsb2F0IGxnYW1tYWZfcihmbG9hdCA8dmFyPng8L3Zhcj4sIGludCAqPHZhcj5zaWduZ2FtcDwvdmFyPik7CisgICAgIGRvdWJsZSB0Z2FtbWEoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IHRnYW1tYWYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5nYW1tYTwvY29kZT4gY2FsY3VsYXRlcwordGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHRoZSBnYW1tYSBmdW5jdGlvbiBvZiA8dmFyPng8L3Zhcj4uICBUaGUgZ2FtbWEgZnVuY3Rpb24KKyg8Y29kZT5leHAoZ2FtbWEoPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPikpPC9jb2RlPikgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBmYWN0b3JpYWwsIGFuZCByZXRhaW5zCit0aGUgcHJvcGVydHkgdGhhdAorPGNvZGU+ZXhwKGdhbW1hKE4pKTwvY29kZT4gaXMgZXF1aXZhbGVudCB0byA8Y29kZT5OKmV4cChnYW1tYShOLTEpKTwvY29kZT4uIAorQWNjb3JkaW5nbHksIHRoZSByZXN1bHRzIG9mIHRoZSBnYW1tYSBmdW5jdGlvbiBpdHNlbGYgZ3JvdyB2ZXJ5CitxdWlja2x5LiAgPGNvZGU+Z2FtbWE8L2NvZGU+IGlzIGRlZmluZWQgYXMKK3RoZSBuYXR1cmFsIGxvZyBvZiB0aGUgZ2FtbWEgZnVuY3Rpb24sIHJhdGhlciB0aGFuIHRoZSBnYW1tYSBmdW5jdGlvbgoraXRzZWxmLAordG8gZXh0ZW5kIHRoZSB1c2VmdWwgcmFuZ2Ugb2YgcmVzdWx0cyByZXByZXNlbnRhYmxlLgorCisgICA8cD5UaGUgc2lnbiBvZiB0aGUgcmVzdWx0IGlzIHJldHVybmVkIGluIHRoZSBnbG9iYWwgdmFyaWFibGUgPGNvZGU+c2lnbmdhbTwvY29kZT4sCit3aGljaCBpcyBkZWNsYXJlZCBpbiBtYXRoLmguCisKKyAgIDxwPjxjb2RlPmdhbW1hZjwvY29kZT4gcGVyZm9ybXMgdGhlIHNhbWUgY2FsY3VsYXRpb24gYXMgPGNvZGU+Z2FtbWE8L2NvZGU+LCBidXQgdXNlcyBhbmQKK3JldHVybnMgPGNvZGU+ZmxvYXQ8L2NvZGU+IHZhbHVlcy4KKworICAgPHA+PGNvZGU+bGdhbW1hPC9jb2RlPiBhbmQgPGNvZGU+bGdhbW1hZjwvY29kZT4gYXJlIGFsdGVybmF0ZSBuYW1lcyBmb3IgPGNvZGU+Z2FtbWE8L2NvZGU+IGFuZAorPGNvZGU+Z2FtbWFmPC9jb2RlPi4gIFRoZSB1c2Ugb2YgPGNvZGU+bGdhbW1hPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPmdhbW1hPC9jb2RlPiBpcyBhIHJlbWluZGVyCit0aGF0IHRoZXNlIGZ1bmN0aW9ucyBjb21wdXRlIHRoZSBsb2cgb2YgdGhlIGdhbW1hIGZ1bmN0aW9uLCByYXRoZXIKK3RoYW4gdGhlIGdhbW1hIGZ1bmN0aW9uIGl0c2VsZi4KKworICAgPHA+VGhlIGZ1bmN0aW9ucyA8Y29kZT5nYW1tYV9yPC9jb2RlPiwgPGNvZGU+Z2FtbWFmX3I8L2NvZGU+LCA8Y29kZT5sZ2FtbWFfcjwvY29kZT4sIGFuZAorPGNvZGU+bGdhbW1hZl9yPC9jb2RlPiBhcmUganVzdCBsaWtlIDxjb2RlPmdhbW1hPC9jb2RlPiwgPGNvZGU+Z2FtbWFmPC9jb2RlPiwgPGNvZGU+bGdhbW1hPC9jb2RlPiwgYW5kCis8Y29kZT5sZ2FtbWFmPC9jb2RlPiwgcmVzcGVjdGl2ZWx5LCBidXQgdGFrZSBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50LiAgVGhpcworYWRkaXRpb25hbCBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlci4gIFRoaXMgYWRkaXRpb25hbAorYXJndW1lbnQgaXMgdXNlZCB0byByZXR1cm4gdGhlIHNpZ24gb2YgdGhlIHJlc3VsdCwgYW5kIHRoZSBnbG9iYWwKK3ZhcmlhYmxlIDxjb2RlPnNpZ25nYW08L2NvZGU+IGlzIG5vdCB1c2VkLiAgVGhlc2UgZnVuY3Rpb25zIG1heSBiZSB1c2VkIGZvcgorcmVlbnRyYW50IGNhbGxzIChidXQgdGhleSB3aWxsIHN0aWxsIHNldCB0aGUgZ2xvYmFsIHZhcmlhYmxlIDxjb2RlPmVycm5vPC9jb2RlPgoraWYgYW4gZXJyb3Igb2NjdXJzKS4KKworICAgPHA+PGNvZGU+dGdhbW1hPC9jb2RlPiBhbmQgPGNvZGU+dGdhbW1hZjwvY29kZT4gYXJlIHRoZSAidHJ1ZSBnYW1tYSIgZnVuY3Rpb25zLCByZXR1cm5pbmcKK3RoZSBnYW1tYSBmdW5jdGlvbiBvZiA8dmFyPng8L3Zhcj4mbmRhc2g7d2l0aG91dCBhIGxvZ2FyaXRobS4gCisoVGhleSBhcmUgYXBwYXJlbnRseSBzbyBuYW1lZCBiZWNhdXNlIG9mIHRoZSBwcmlvciBleGlzdGVuY2Ugb2YgdGhlIG9sZCwKK3Bvb3JseS1uYW1lZCA8Y29kZT5nYW1tYTwvY29kZT4gZnVuY3Rpb25zIHdoaWNoIHJldHVybmVkIHRoZSBsb2cgb2YgZ2FtbWEgdXAKK3Rocm91Z2ggQlNEIDQuMi4pCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK05vcm1hbGx5LCB0aGUgY29tcHV0ZWQgcmVzdWx0IGlzIHJldHVybmVkLgorCisgICA8cD5XaGVuIDx2YXI+eDwvdmFyPiBpcyBhIG5vbnBvc2l0aXZlIGludGVnZXIsIDxjb2RlPmdhbW1hPC9jb2RlPiByZXR1cm5zIDxjb2RlPkhVR0VfVkFMPC9jb2RlPgorYW5kIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gPGNvZGU+RURPTTwvY29kZT4uICBJZiB0aGUgcmVzdWx0IG92ZXJmbG93cywgPGNvZGU+Z2FtbWE8L2NvZGU+CityZXR1cm5zIDxjb2RlPkhVR0VfVkFMPC9jb2RlPiBhbmQgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byA8Y29kZT5FUkFOR0U8L2NvZGU+LgorCisgICA8cD5Zb3UgY2FuIG1vZGlmeSB0aGlzIGVycm9yIHRyZWF0bWVudCB1c2luZyA8Y29kZT5tYXRoZXJyPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK05laXRoZXIgPGNvZGU+Z2FtbWE8L2NvZGU+IG5vciA8Y29kZT5nYW1tYWY8L2NvZGU+IGlzIEFOU0kgQy4gIEl0IGlzIGJldHRlciBub3QgdG8gdXNlIGVpdGhlcgorb2YgdGhlc2U7IHVzZSA8Y29kZT5sZ2FtbWE8L2NvZGU+IG9yIDxjb2RlPnRnYW1tYTwvY29kZT4gaW5zdGVhZC48YnI+Cis8Y29kZT5sZ2FtbWE8L2NvZGU+LCA8Y29kZT5sZ2FtbWFmPC9jb2RlPiwgPGNvZGU+dGdhbW1hPC9jb2RlPiwgYW5kIDxjb2RlPnRnYW1tYWY8L2NvZGU+IGFyZSBub21pbmFsbHkgQyBzdGFuZGFyZAoraW4gdGVybXMgb2YgdGhlIGJhc2UgcmV0dXJuIHZhbHVlcywgYWx0aG91Z2ggdGhlIDxjb2RlPm1hdGhlcnI8L2NvZGU+IGVycm9yLWhhbmRsaW5nCitpcyBub3Qgc3RhbmRhcmQsIG5vciBpcyB0aGUgPHZhcj5zaWduZ2FtPC92YXI+IGdsb2JhbCBmb3IgPGNvZGU+bGdhbW1hPC9jb2RlPi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9oeXBvdC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvaHlwb3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjUxNGUzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvaHlwb3QuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5oeXBvdCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ2FtbWEuaHRtbCNnYW1tYSIgdGl0bGU9ImdhbW1hIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iaWxvZ2IuaHRtbCNpbG9nYiIgdGl0bGU9Imlsb2diIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJoeXBvdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJpbG9nYi5odG1sI2lsb2diIj5pbG9nYjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImdhbW1hLmh0bWwjZ2FtbWEiPmdhbW1hPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjI3IDxjb2RlPmh5cG90PC9jb2RlPiwgPGNvZGU+aHlwb3RmPC9jb2RlPiZtZGFzaDtkaXN0YW5jZSBmcm9tIG9yaWdpbjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWh5cG90LTczIj48L2E+PGEgbmFtZT0iaW5kZXgtaHlwb3RmLTc0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgaHlwb3QoZG91YmxlIDx2YXI+eDwvdmFyPiwgZG91YmxlIDx2YXI+eTwvdmFyPik7CisgICAgIGZsb2F0IGh5cG90ZihmbG9hdCA8dmFyPng8L3Zhcj4sIGZsb2F0IDx2YXI+eTwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aHlwb3Q8L2NvZGU+IGNhbGN1bGF0ZXMgdGhlIEV1Y2xpZGVhbiBkaXN0YW5jZQorPGNvZGU+c3FydCg8L2NvZGU+PHZhcj54PC92YXI+PGNvZGU+KjwvY29kZT48dmFyPng8L3Zhcj48Y29kZT4gKyA8L2NvZGU+PHZhcj55PC92YXI+PGNvZGU+KjwvY29kZT48dmFyPnk8L3Zhcj48Y29kZT4pPC9jb2RlPgorYmV0d2VlbiB0aGUgb3JpZ2luICgwLDApIGFuZCBhIHBvaW50IHJlcHJlc2VudGVkIGJ5IHRoZQorQ2FydGVzaWFuIGNvb3JkaW5hdGVzICg8dmFyPng8L3Zhcj4sPHZhcj55PC92YXI+KS4gIDxjb2RlPmh5cG90ZjwvY29kZT4gZGlmZmVycyBvbmx5CitpbiB0aGUgdHlwZSBvZiBpdHMgYXJndW1lbnRzIGFuZCByZXN1bHQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK05vcm1hbGx5LCB0aGUgZGlzdGFuY2UgdmFsdWUgaXMgcmV0dXJuZWQuICBPbiBvdmVyZmxvdywKKzxjb2RlPmh5cG90PC9jb2RlPiByZXR1cm5zIDxjb2RlPkhVR0VfVkFMPC9jb2RlPiBhbmQgc2V0cyA8Y29kZT5lcnJubzwvY29kZT4gdG8KKzxjb2RlPkVSQU5HRTwvY29kZT4uCisKKyAgIDxwPllvdSBjYW4gY2hhbmdlIHRoZSBlcnJvciB0cmVhdG1lbnQgd2l0aCA8Y29kZT5tYXRoZXJyPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPmh5cG90PC9jb2RlPiBhbmQgPGNvZGU+aHlwb3RmPC9jb2RlPiBhcmUgbm90IEFOU0kgQy4gCis8YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2lsb2diLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9pbG9nYi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2Y2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9pbG9nYi5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmlsb2diIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJoeXBvdC5odG1sI2h5cG90IiB0aXRsZT0iaHlwb3QiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJpbmZpbml0eS5odG1sI2luZmluaXR5IiB0aXRsZT0iaW5maW5pdHkiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imlsb2diIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImluZmluaXR5Lmh0bWwjaW5maW5pdHkiPmluZmluaXR5PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0iaHlwb3QuaHRtbCNoeXBvdCI+aHlwb3Q8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMjggPGNvZGU+aWxvZ2I8L2NvZGU+LCA8Y29kZT5pbG9nYmY8L2NvZGU+Jm1kYXNoO2dldCBleHBvbmVudCBvZiBmbG9hdGluZy1wb2ludCBudW1iZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pbG9nYi03NSI+PC9hPjxhIG5hbWU9ImluZGV4LWlsb2diZi03NiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgaW50IGlsb2diKGRvdWJsZSA8dmFyPnZhbDwvdmFyPik7CisgICAgIGludCBpbG9nYmYoZmxvYXQgPHZhcj52YWw8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKworICAgPHA+QWxsIG5vbnplcm8sIG5vcm1hbCBudW1iZXJzIGNhbiBiZSBkZXNjcmliZWQgYXMgPHZhcj5tPC92YXI+ICoKKzIqKjx2YXI+cDwvdmFyPi4gIDxjb2RlPmlsb2diPC9jb2RlPiBhbmQgPGNvZGU+aWxvZ2JmPC9jb2RlPiBleGFtaW5lIHRoZSBhcmd1bWVudAorPHZhcj52YWw8L3Zhcj4sIGFuZCByZXR1cm4gPHZhcj5wPC92YXI+LiAgVGhlIGZ1bmN0aW9ucyA8Y29kZT5mcmV4cDwvY29kZT4gYW5kCis8Y29kZT5mcmV4cGY8L2NvZGU+IGFyZSBzaW1pbGFyIHRvIDxjb2RlPmlsb2diPC9jb2RlPiBhbmQgPGNvZGU+aWxvZ2JmPC9jb2RlPiwgYnV0IGFsc28KK3JldHVybiA8dmFyPm08L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKworICAgPHA+PGNvZGU+aWxvZ2I8L2NvZGU+IGFuZCA8Y29kZT5pbG9nYmY8L2NvZGU+IHJldHVybiB0aGUgcG93ZXIgb2YgdHdvIHVzZWQgdG8gZm9ybSB0aGUKK2Zsb2F0aW5nLXBvaW50IGFyZ3VtZW50LiAKK0lmIDx2YXI+dmFsPC92YXI+IGlzIDxjb2RlPjA8L2NvZGU+LCB0aGV5IHJldHVybiA8Y29kZT5GUF9JTE9HQjA8L2NvZGU+LiAKK0lmIDx2YXI+dmFsPC92YXI+IGlzIGluZmluaXRlLCB0aGV5IHJldHVybiA8Y29kZT5JTlRfTUFYPC9jb2RlPi4gCitJZiA8dmFyPnZhbDwvdmFyPiBpcyBOYU4sIHRoZXkgcmV0dXJuIDxjb2RlPkZQX0lMT0dCTkFOPC9jb2RlPi4gCisoPGNvZGU+RlBfSUxPR0IwPC9jb2RlPiBhbmQgPGNvZGU+RlBfSUxPR0JOQU48L2NvZGU+IGFyZSBkZWZpbmVkIGluIG1hdGguaCwgYnV0IGluIHR1cm4gYXJlCitkZWZpbmVkIGFzIElOVF9NSU4gb3IgSU5UX01BWCBmcm9tIGxpbWl0cy5oLiAgVGhlIHZhbHVlIG9mIEZQX0lMT0dCMCBtYXkgYmUKK2VpdGhlciBJTlRfTUlOIG9yIC1JTlRfTUFYLiAgVGhlIHZhbHVlIG9mIEZQX0lMT0dCTkFOIG1heSBiZSBlaXRoZXIgSU5UX01BWCBvcgorSU5UX01JTi4pCisKKzwhLS0gVGhlIGJ1Z3MgbWlnaHQgbm90IGJlIHdvcnRoIG5vdGluZywgZ2l2ZW4gdGhlIG1hc3Mgbm9uLUM5OS9QT1NJWCAtLT4KKzwhLS0gYmVoYXZpb3Igb2YgbXVjaCBvZiB0aGUgTmV3bGliIG1hdGggbGlicmFyeS4gLS0+Cis8IS0tIEJVR1MgLS0+Cis8IS0tIE9uIGVycm9ycywgZXJybm8gaXMgbm90IHNldCBwZXIgQzk5IGFuZCBQT1NJWCByZXF1aXJlbWVudHMgZXZlbiBpZiAtLT4KKzwhLS0gKG1hdGhfZXJyaGFuZGxpbmcgJiBNQVRIX0VSUk5PKSBpcyBub24temVyby4gLS0+CisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQzk5LCBQT1NJWAorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2luZGV4Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiM2E5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPlVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iLi4vaW5kZXguaHRtbCNkaXIiIHRpdGxlPSIoZGlyKSI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iVG9wIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vaW5kZXguaHRtbCNkaXIiPihkaXIpPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMiBjbGFzcz0idW5udW1iZXJlZCI+TElCTTwvaDI+CisKKzx1bCBjbGFzcz0ibWVudSI+Cis8bGk+PGEgYWNjZXNza2V5PSIxIiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT46ICAgICAgICAgICAgVGhlIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMgKGBtYXRoLmgnKS4gCis8bGk+PGEgYWNjZXNza2V5PSIyIiBocmVmPSJDb21wbGV4Lmh0bWwjQ29tcGxleCI+Q29tcGxleDwvYT46ICAgICAgICAgVGhlIG1hdGhlbWF0aWNhbCBjb21wbGV4IGZ1bmN0aW9ucyAoYGNvbXBsZXguaCcpLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjMiIGhyZWY9IlJlZW50cmFuY3kuaHRtbCNSZWVudHJhbmN5Ij5SZWVudHJhbmN5PC9hPjogICAgICBUaGUgZnVuY3Rpb25zIGluIGxpYm0gYXJlIG5vdCByZWVudHJhbnQgYnkgZGVmYXVsdC4gCis8bGk+PGEgYWNjZXNza2V5PSI0IiBocmVmPSJMb25nLURvdWJsZS1GdW5jdGlvbnMuaHRtbCNMb25nLURvdWJsZS1GdW5jdGlvbnMiPkxvbmcgRG91YmxlIEZ1bmN0aW9uczwvYT46ICBUaGUgbG9uZyBkb3VibGUgZnVuY3Rpb24gc3VwcG9ydCBvZiBsaWJtLiAKKzxsaT48YSBhY2Nlc3NrZXk9IjUiIGhyZWY9IkRvY3VtZW50LUluZGV4Lmh0bWwjRG9jdW1lbnQtSW5kZXgiPkRvY3VtZW50IEluZGV4PC9hPgorPC91bD4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvaW5maW5pdHkuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2luZmluaXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliNjk4NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2luZmluaXR5Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aW5maW5pdHkgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Imlsb2diLmh0bWwjaWxvZ2IiIHRpdGxlPSJpbG9nYiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImlzZ3JlYXRlci5odG1sI2lzZ3JlYXRlciIgdGl0bGU9ImlzZ3JlYXRlciI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iaW5maW5pdHkiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iaXNncmVhdGVyLmh0bWwjaXNncmVhdGVyIj5pc2dyZWF0ZXI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJpbG9nYi5odG1sI2lsb2diIj5pbG9nYjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4yOSA8Y29kZT5pbmZpbml0eTwvY29kZT4sIDxjb2RlPmluZmluaXR5ZjwvY29kZT4mbmRhc2g7cmVwcmVzZW50YXRpb24gb2YgaW5maW5pdHk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1pbmZpbml0eS03NyI+PC9hPjxhIG5hbWU9ImluZGV4LWluZmluaXR5Zi03OCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGluZmluaXR5KHZvaWQpOworICAgICBmbG9hdCBpbmZpbml0eWYodm9pZCk7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+aW5maW5pdHk8L2NvZGU+IGFuZCA8Y29kZT5pbmZpbml0eWY8L2NvZGU+IHJldHVybiB0aGUgc3BlY2lhbCBudW1iZXIgSUVFRQoraW5maW5pdHkgaW4gZG91YmxlLSBhbmQgc2luZ2xlLXByZWNpc2lvbiBhcml0aG1ldGljCityZXNwZWN0aXZlbHkuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5pbmZpbml0eTwvY29kZT4gYW5kIDxjb2RlPmluZmluaXR5ZjwvY29kZT4gYXJlIG5laXRoZXIgc3RhbmRhcmQgQyBub3IgUE9TSVguICBDIGFuZAorUE9TSVggcmVxdWlyZSBtYWNyb3MgSFVHRV9WQUwgYW5kIEhVR0VfVkFMRiB0byBiZSBkZWZpbmVkIGluIG1hdGguaCwgd2hpY2gKK05ld2xpYiBkZWZpbmVzIHRvIGJlIGluZmluaXRpZXMgY29ycmVzcG9uZGluZyB0byB0aGVzZSBhcmNoYWljIGluZmluaXR5KCkKK2FuZCBpbmZpbml0eWYoKSBmdW5jdGlvbnMgaW4gZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb25zIHdoaWNoIGRvIGhhdmUKK2luZmluaXRpZXMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvaXNncmVhdGVyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9pc2dyZWF0ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZhZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvaXNncmVhdGVyLmh0bWwKQEAgLTAsMCArMSw5NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+aXNncmVhdGVyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpbmZpbml0eS5odG1sI2luZmluaXR5IiB0aXRsZT0iaW5maW5pdHkiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJsZGV4cC5odG1sI2xkZXhwIiB0aXRsZT0ibGRleHAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImlzZ3JlYXRlciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJsZGV4cC5odG1sI2xkZXhwIj5sZGV4cDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImluZmluaXR5Lmh0bWwjaW5maW5pdHkiPmluZmluaXR5PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjMwIDxjb2RlPmlzZ3JlYXRlcjwvY29kZT4sIDxjb2RlPmlzZ3JlYXRlcmVxdWFsPC9jb2RlPiwgPGNvZGU+aXNsZXNzPC9jb2RlPiwgPGNvZGU+aXNsZXNzZXF1YWw8L2NvZGU+LCA8Y29kZT5pc2xlc3NncmVhdGVyPC9jb2RlPiwgYW5kIDxjb2RlPmlzdW5vcmRlcmVkPC9jb2RlPiZuZGFzaDtjb21wYXJpc29uIG1hY3JvczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWlzZ3JlYXRlci03OSI+PC9hPjxhIG5hbWU9ImluZGV4LWlzZ3JlYXRlcmVxdWFsLTgwIj48L2E+PGEgbmFtZT0iaW5kZXgtaXNsZXNzLTgxIj48L2E+PGEgbmFtZT0iaW5kZXgtaXNsZXNzZXF1YWwtODIiPjwvYT48YSBuYW1lPSJpbmRleC1pc2xlc3NncmVhdGVyLTgzIj48L2E+PGEgbmFtZT0iaW5kZXgtaXN1bm9yZGVyZWQtODQiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGludCBpc2dyZWF0ZXIocmVhbC1mbG9hdGluZyA8dmFyPng8L3Zhcj4sIHJlYWwtZmxvYXRpbmcgPHZhcj55PC92YXI+KTsKKyAgICAgaW50IGlzZ3JlYXRlcmVxdWFsKHJlYWwtZmxvYXRpbmcgPHZhcj54PC92YXI+LCByZWFsLWZsb2F0aW5nIDx2YXI+eTwvdmFyPik7CisgICAgIGludCBpc2xlc3MocmVhbC1mbG9hdGluZyA8dmFyPng8L3Zhcj4sIHJlYWwtZmxvYXRpbmcgPHZhcj55PC92YXI+KTsKKyAgICAgaW50IGlzbGVzc2VxdWFsKHJlYWwtZmxvYXRpbmcgPHZhcj54PC92YXI+LCByZWFsLWZsb2F0aW5nIDx2YXI+eTwvdmFyPik7CisgICAgIGludCBpc2xlc3NncmVhdGVyKHJlYWwtZmxvYXRpbmcgPHZhcj54PC92YXI+LCByZWFsLWZsb2F0aW5nIDx2YXI+eTwvdmFyPik7CisgICAgIGludCBpc3Vub3JkZXJlZChyZWFsLWZsb2F0aW5nIDx2YXI+eDwvdmFyPiwgcmVhbC1mbG9hdGluZyA8dmFyPnk8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmlzZ3JlYXRlcjwvY29kZT4sIDxjb2RlPmlzZ3JlYXRlcmVxdWFsPC9jb2RlPiwgPGNvZGU+aXNsZXNzPC9jb2RlPiwgPGNvZGU+aXNsZXNzZXF1YWw8L2NvZGU+LAorPGNvZGU+aXNsZXNzZ3JlYXRlcjwvY29kZT4sIGFuZCA8Y29kZT5pc3Vub3JkZXJlZDwvY29kZT4gYXJlIG1hY3JvcyBkZWZpbmVkIGZvciB1c2UgaW4KK2NvbXBhcmluZyBmbG9hdGluZy1wb2ludCBudW1iZXJzIHdpdGhvdXQgcmFpc2luZyBhbnkgZmxvYXRpbmctcG9pbnQKK2V4Y2VwdGlvbnMuCisKKyAgIDxwPlRoZSByZWxhdGlvbmFsIG9wZXJhdG9ycyAoaS5lLiAmbHQ7LCAmZ3Q7LCAmbHQ7PSwgYW5kICZndDs9KSBzdXBwb3J0IHRoZSB1c3VhbCBtYXRoZW1hdGljYWwKK3JlbGF0aW9uc2hpcHMgYmV0d2VlbiBudW1lcmljIHZhbHVlcy4gIEZvciBhbnkgb3JkZXJlZCBwYWlyIG9mIG51bWVyaWMKK3ZhbHVlcyBleGFjdGx5IG9uZSBvZiB0aGUgcmVsYXRpb25zaGlwcyZuZGFzaDtsZXNzLCBncmVhdGVyLCBhbmQgZXF1YWwmbmRhc2g7aXMKK3RydWUuICBSZWxhdGlvbmFsIG9wZXJhdG9ycyBtYXkgcmFpc2UgdGhlICJpbnZhbGlkIiBmbG9hdGluZy1wb2ludAorZXhjZXB0aW9uIHdoZW4gYXJndW1lbnQgdmFsdWVzIGFyZSBOYU5zLiAgRm9yIGEgTmFOIGFuZCBhIG51bWVyaWMgdmFsdWUsIG9yCitmb3IgdHdvIE5hTnMsIGp1c3QgdGhlIHVub3JkZXJlZCByZWxhdGlvbnNoaXAgaXMgdHJ1ZSAoaS5lLiwgaWYgb25lIG9yIGJvdGgKK29mIHRoZSBhcmd1bWVudHMgYSBOYU4sIHRoZSByZWxhdGlvbnNoaXAgaXMgY2FsbGVkIHVub3JkZXJlZCkuICBUaGUgc3BlY2lmaWVkCittYWNyb3MgYXJlIHF1aWV0IChub24gZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIHJhaXNpbmcpIHZlcnNpb25zIG9mIHRoZQorcmVsYXRpb25hbCBvcGVyYXRvcnMsIGFuZCBvdGhlciBjb21wYXJpc29uIG1hY3JvcyB0aGF0IGZhY2lsaXRhdGUgd3JpdGluZworZWZmaWNpZW50IGNvZGUgdGhhdCBhY2NvdW50cyBmb3IgTmFOcyB3aXRob3V0IHN1ZmZlcmluZyB0aGUgImludmFsaWQiCitmbG9hdGluZy1wb2ludCBleGNlcHRpb24uICBJbiB0aGUgc3lub3BzZXMgc2hvd24sICJyZWFsLWZsb2F0aW5nIiBpbmRpY2F0ZXMKK3RoYXQgdGhlIGFyZ3VtZW50IGlzIGFuIGV4cHJlc3Npb24gb2YgcmVhbCBmbG9hdGluZyB0eXBlLgorCisgICA8cD5QbGVhc2Ugbm90ZSB0aGF0IHNheWluZyB0aGF0IHRoZSBtYWNyb3MgZG8gbm90IHJhaXNlIGZsb2F0aW5nLXBvaW50CitleGNlcHRpb25zLCBpdCBpcyByZWZlcnJpbmcgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgdGhleSBhcmUgcGVyZm9ybWluZy4gIEl0CitpcyBjZXJ0YWlubHkgcG9zc2libGUgdG8gZ2l2ZSB0aGVtIGFuIGV4cHJlc3Npb24gd2hpY2ggY2F1c2VzIGFuIGV4Y2VwdGlvbi4gCitGb3IgZXhhbXBsZToKKyAgICAgPGRsPgorPGR0Pjxjb2RlPk5hTiAmbHQ7IDEuMDwvY29kZT48ZGQ+Y2F1c2VzIGFuICJpbnZhbGlkIiBleGNlcHRpb24sCis8YnI+PGR0Pjxjb2RlPmlzbGVzcyhOYU4sIDEuMCk8L2NvZGU+PGRkPmRvZXMgbm90LCBhbmQKKzxicj48ZHQ+PGNvZGU+aXNsZXNzKE5hTiowLiwgMS4wKTwvY29kZT48ZGQ+Y2F1c2VzIGFuIGV4Y2VwdGlvbiBkdWUgdG8gdGhlICJOYU4qMC4iLCBidXQgbm90IGZyb20gdGhlCityZXN1bHRhbnQgcmVkdWNlZCBjb21wYXJpc29uIG9mIGlzbGVzcyhOYU4sIDEuMCkuIAorPC9kbD4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPCEtLSBGb3JtYXR0aW5nIG5vdGU6ICAiJEAiIGZvcmNlcyBhIG5ldyBsaW5lIC0tPgorTm8gZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGZvciBhbnkgb2YgdGhlIG1hY3Jvcy48YnI+CitUaGUgPGNvZGU+aXNncmVhdGVyPC9jb2RlPiBtYWNybyByZXR1cm5zIHRoZSB2YWx1ZSBvZiAoeCkgJmd0OyAoeSkuPGJyPgorVGhlIDxjb2RlPmlzZ3JlYXRlcmVxdWFsPC9jb2RlPiBtYWNybyByZXR1cm5zIHRoZSB2YWx1ZSBvZiAoeCkgJmd0Oz0gKHkpLjxicj4KK1RoZSA8Y29kZT5pc2xlc3M8L2NvZGU+IG1hY3JvIHJldHVybnMgdGhlIHZhbHVlIG9mICh4KSAmbHQ7ICh5KS48YnI+CitUaGUgPGNvZGU+aXNsZXNzZXF1YWw8L2NvZGU+IG1hY3JvIHJldHVybnMgdGhlIHZhbHVlIG9mICh4KSAmbHQ7PSAoeSkuPGJyPgorVGhlIDxjb2RlPmlzbGVzc2dyZWF0ZXI8L2NvZGU+IG1hY3JvIHJldHVybnMgdGhlIHZhbHVlIG9mICh4KSAmbHQ7ICh5KSB8fCAoeCkgJmd0OyAoeSkuPGJyPgorVGhlIDxjb2RlPmlzdW5vcmRlcmVkPC9jb2RlPiBtYWNybyByZXR1cm5zIDEgaWYgZWl0aGVyIG9mIGl0cyBhcmd1bWVudHMgaXMgTmFOIGFuZCAwIG90aGVyd2lzZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0M5OSwgUE9TSVguCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvak4uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2pOLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4NDgxZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2pOLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+ak4gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImF0YW5oLmh0bWwjYXRhbmgiIHRpdGxlPSJhdGFuaCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImNicnQuaHRtbCNjYnJ0IiB0aXRsZT0iY2JydCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0iak4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0iY2JydC5odG1sI2NicnQiPmNicnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJhdGFuaC5odG1sI2F0YW5oIj5hdGFuaDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4xMCA8Y29kZT5qTjwvY29kZT4sIDxjb2RlPmpOZjwvY29kZT4sIDxjb2RlPnlOPC9jb2RlPiwgPGNvZGU+eU5mPC9jb2RlPiZtZGFzaDtCZXNzZWwgZnVuY3Rpb25zPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtajAtMTkiPjwvYT48YSBuYW1lPSJpbmRleC1qMGYtMjAiPjwvYT48YSBuYW1lPSJpbmRleC1qMS0yMSI+PC9hPjxhIG5hbWU9ImluZGV4LWoxZi0yMiI+PC9hPjxhIG5hbWU9ImluZGV4LWpuLTIzIj48L2E+PGEgbmFtZT0iaW5kZXgtam5mLTI0Ij48L2E+PGEgbmFtZT0iaW5kZXgteTAtMjUiPjwvYT48YSBuYW1lPSJpbmRleC15MGYtMjYiPjwvYT48YSBuYW1lPSJpbmRleC15MS0yNyI+PC9hPjxhIG5hbWU9ImluZGV4LXkxZi0yOCI+PC9hPjxhIG5hbWU9ImluZGV4LXluLTI5Ij48L2E+PGEgbmFtZT0iaW5kZXgteW5mLTMwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgajAoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGowZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICBkb3VibGUgajEoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGoxZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICBkb3VibGUgam4oaW50IDx2YXI+bjwvdmFyPiwgZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGpuZihpbnQgPHZhcj5uPC92YXI+LCBmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICBkb3VibGUgeTAoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IHkwZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICBkb3VibGUgeTEoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IHkxZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICBkb3VibGUgeW4oaW50IDx2YXI+bjwvdmFyPiwgZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IHluZihpbnQgPHZhcj5uPC92YXI+LCBmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSBCZXNzZWwgZnVuY3Rpb25zIGFyZSBhIGZhbWlseSBvZiBmdW5jdGlvbnMgdGhhdCBzb2x2ZSB0aGUKK2RpZmZlcmVudGlhbCBlcXVhdGlvbgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAgMiAgICAgICAgICAgICAgIDIgICAgMgorICAgICAgeCAgeScnICsgeHknICsgKHggIC0gcCApeSAgPSAwCis8L3ByZT4KKyAgIDxwPlRoZXNlIGZ1bmN0aW9ucyBoYXZlIG1hbnkgYXBwbGljYXRpb25zIGluIGVuZ2luZWVyaW5nIGFuZCBwaHlzaWNzLgorCisgICA8cD48Y29kZT5qbjwvY29kZT4gY2FsY3VsYXRlcyB0aGUgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kIG9mIG9yZGVyCis8dmFyPm48L3Zhcj4uICA8Y29kZT5qMDwvY29kZT4gYW5kIDxjb2RlPmoxPC9jb2RlPiBhcmUgc3BlY2lhbCBjYXNlcyBmb3Igb3JkZXIgMCBhbmQgb3JkZXIKKzEgcmVzcGVjdGl2ZWx5LgorCisgICA8cD5TaW1pbGFybHksIDxjb2RlPnluPC9jb2RlPiBjYWxjdWxhdGVzIHRoZSBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIHNlY29uZCBraW5kIG9mCitvcmRlciA8dmFyPm48L3Zhcj4sIGFuZCA8Y29kZT55MDwvY29kZT4gYW5kIDxjb2RlPnkxPC9jb2RlPiBhcmUgc3BlY2lhbCBjYXNlcyBmb3Igb3JkZXIgMCBhbmQKKzEuCisKKyAgIDxwPjxjb2RlPmpuZjwvY29kZT4sIDxjb2RlPmowZjwvY29kZT4sIDxjb2RlPmoxZjwvY29kZT4sIDxjb2RlPnluZjwvY29kZT4sIDxjb2RlPnkwZjwvY29kZT4sIGFuZCA8Y29kZT55MWY8L2NvZGU+IHBlcmZvcm0gdGhlCitzYW1lIGNhbGN1bGF0aW9ucywgYnV0IG9uIDxjb2RlPmZsb2F0PC9jb2RlPiByYXRoZXIgdGhhbiA8Y29kZT5kb3VibGU8L2NvZGU+IHZhbHVlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHZhbHVlIG9mIGVhY2ggQmVzc2VsIGZ1bmN0aW9uIGF0IDx2YXI+eDwvdmFyPiBpcyByZXR1cm5lZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK05vbmUgb2YgdGhlIEJlc3NlbCBmdW5jdGlvbnMgYXJlIGluIEFOU0kgQy4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9sZGV4cC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbGRleHAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjA2NTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbGRleHAuaHRtbApAQCAtMCwwICsxLDY0IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5sZGV4cCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0iaXNncmVhdGVyLmh0bWwjaXNncmVhdGVyIiB0aXRsZT0iaXNncmVhdGVyIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibG9nLmh0bWwjbG9nIiB0aXRsZT0ibG9nIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJsZGV4cCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJsb2cuaHRtbCNsb2ciPmxvZzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImlzZ3JlYXRlci5odG1sI2lzZ3JlYXRlciI+aXNncmVhdGVyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjMyIDxjb2RlPmxkZXhwPC9jb2RlPiwgPGNvZGU+bGRleHBmPC9jb2RlPiZtZGFzaDtsb2FkIGV4cG9uZW50PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbGRleHAtOTYiPjwvYT48YSBuYW1lPSJpbmRleC1sZGV4cGYtOTciPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBsZGV4cChkb3VibGUgPHZhcj52YWw8L3Zhcj4sIGludCA8dmFyPmV4cDwvdmFyPik7CisgICAgIGZsb2F0IGxkZXhwZihmbG9hdCA8dmFyPnZhbDwvdmFyPiwgaW50IDx2YXI+ZXhwPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5sZGV4cDwvY29kZT4gY2FsY3VsYXRlcyB0aGUgdmFsdWUKKzx2YXI+dmFsPC92YXI+IHRpbWVzIDIgdG8gdGhlIHBvd2VyIDx2YXI+ZXhwPC92YXI+LiAKKzxjb2RlPmxkZXhwZjwvY29kZT4gaXMgaWRlbnRpY2FsLCBzYXZlIHRoYXQgaXQgdGFrZXMgYW5kIHJldHVybnMgPGNvZGU+ZmxvYXQ8L2NvZGU+CityYXRoZXIgdGhhbiA8Y29kZT5kb3VibGU8L2NvZGU+IHZhbHVlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+bGRleHA8L2NvZGU+IHJldHVybnMgdGhlIGNhbGN1bGF0ZWQgdmFsdWUuCisKKyAgIDxwPlVuZGVyZmxvdyBhbmQgb3ZlcmZsb3cgYm90aCBzZXQgPGNvZGU+ZXJybm88L2NvZGU+IHRvIDxjb2RlPkVSQU5HRTwvY29kZT4uIAorT24gdW5kZXJmbG93LCA8Y29kZT5sZGV4cDwvY29kZT4gYW5kIDxjb2RlPmxkZXhwZjwvY29kZT4gcmV0dXJuIDAuMC4gCitPbiBvdmVyZmxvdywgPGNvZGU+bGRleHA8L2NvZGU+IHJldHVybnMgcGx1cyBvciBtaW51cyA8Y29kZT5IVUdFX1ZBTDwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5sZGV4cDwvY29kZT4gaXMgQU5TSS4gPGNvZGU+bGRleHBmPC9jb2RlPiBpcyBhbiBleHRlbnNpb24uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbG9nLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9sb2cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTVjNTljCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbG9nLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bG9nIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJsZGV4cC5odG1sI2xkZXhwIiB0aXRsZT0ibGRleHAiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJsb2cxMC5odG1sI2xvZzEwIiB0aXRsZT0ibG9nMTAiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImxvZyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJsb2cxMC5odG1sI2xvZzEwIj5sb2cxMDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImxkZXhwLmh0bWwjbGRleHAiPmxkZXhwPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjMzIDxjb2RlPmxvZzwvY29kZT4sIDxjb2RlPmxvZ2Y8L2NvZGU+Jm1kYXNoO25hdHVyYWwgbG9nYXJpdGhtczwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LWxvZy05OCI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZ2YtOTkiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBsb2coZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGxvZ2YoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitSZXR1cm4gdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDx2YXI+eDwvdmFyPiwgdGhhdCBpcywgaXRzIGxvZ2FyaXRobSBiYXNlIGUKKyh3aGVyZSBlIGlzIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIHN5c3RlbSBvZiBsb2dhcml0aG1zLCAyLjcxODI4PHNtYWxsIGNsYXNzPSJkb3RzIj4uLi48L3NtYWxsPikuIAorPGNvZGU+bG9nPC9jb2RlPiBhbmQgPGNvZGU+bG9nZjwvY29kZT4gYXJlIGlkZW50aWNhbCBzYXZlIGZvciB0aGUgcmV0dXJuIGFuZCBhcmd1bWVudCB0eXBlcy4KKworICAgPHA+WW91IGNhbiB1c2UgdGhlIChub24tQU5TSSkgZnVuY3Rpb24gPGNvZGU+bWF0aGVycjwvY29kZT4gdG8gc3BlY2lmeSBlcnJvcgoraGFuZGxpbmcgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorTm9ybWFsbHksIHJldHVybnMgdGhlIGNhbGN1bGF0ZWQgdmFsdWUuICBXaGVuIDx2YXI+eDwvdmFyPiBpcyB6ZXJvLCB0aGUKK3JldHVybmVkIHZhbHVlIGlzIDxjb2RlPi1IVUdFX1ZBTDwvY29kZT4gYW5kIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gPGNvZGU+RVJBTkdFPC9jb2RlPi4gCitXaGVuIDx2YXI+eDwvdmFyPiBpcyBuZWdhdGl2ZSwgdGhlIHJldHVybmVkIHZhbHVlIGlzIE5hTiAobm90IGEgbnVtYmVyKSBhbmQKKzxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gPGNvZGU+RURPTTwvY29kZT4uICBZb3UgY2FuIGNvbnRyb2wgdGhlIGVycm9yIGJlaGF2aW9yIHZpYQorPGNvZGU+bWF0aGVycjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5sb2c8L2NvZGU+IGlzIEFOU0kuIDxjb2RlPmxvZ2Y8L2NvZGU+IGlzIGFuIGV4dGVuc2lvbi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9sb2cxMC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbG9nMTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFhZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbG9nMTAuaHRtbApAQCAtMCwwICsxLDYyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5sb2cxMCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibG9nLmh0bWwjbG9nIiB0aXRsZT0ibG9nIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibG9nMXAuaHRtbCNsb2cxcCIgdGl0bGU9ImxvZzFwIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJsb2cxMCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJsb2cxcC5odG1sI2xvZzFwIj5sb2cxcDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImxvZy5odG1sI2xvZyI+bG9nPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjM0IDxjb2RlPmxvZzEwPC9jb2RlPiwgPGNvZGU+bG9nMTBmPC9jb2RlPiZtZGFzaDtiYXNlIDEwIGxvZ2FyaXRobXM8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1sb2cxMC0xMDAiPjwvYT48YSBuYW1lPSJpbmRleC1sb2cxMGYtMTAxIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgbG9nMTAoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGxvZzEwZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPmxvZzEwPC9jb2RlPiByZXR1cm5zIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiA8dmFyPng8L3Zhcj4uIAorSXQgaXMgaW1wbGVtZW50ZWQgYXMgPGNvZGU+bG9nKDwvY29kZT48dmFyPng8L3Zhcj48Y29kZT4pIC8gbG9nKDEwKTwvY29kZT4uCisKKyAgIDxwPjxjb2RlPmxvZzEwZjwvY29kZT4gaXMgaWRlbnRpY2FsLCBzYXZlIHRoYXQgaXQgdGFrZXMgYW5kIHJldHVybnMgPGNvZGU+ZmxvYXQ8L2NvZGU+IHZhbHVlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPGNvZGU+bG9nMTA8L2NvZGU+IGFuZCA8Y29kZT5sb2cxMGY8L2NvZGU+IHJldHVybiB0aGUgY2FsY3VsYXRlZCB2YWx1ZS4KKworICAgPHA+U2VlIHRoZSBkZXNjcmlwdGlvbiBvZiA8Y29kZT5sb2c8L2NvZGU+IGZvciBpbmZvcm1hdGlvbiBvbiBlcnJvcnMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5sb2cxMDwvY29kZT4gaXMgQU5TSSBDLiAgPGNvZGU+bG9nMTBmPC9jb2RlPiBpcyBhbiBleHRlbnNpb24uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbG9nMXAuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2xvZzFwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllYjNmZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2xvZzFwLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bG9nMXAgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImxvZzEwLmh0bWwjbG9nMTAiIHRpdGxlPSJsb2cxMCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImxvZzIuaHRtbCNsb2cyIiB0aXRsZT0ibG9nMiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibG9nMXAiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibG9nMi5odG1sI2xvZzIiPmxvZzI8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJsb2cxMC5odG1sI2xvZzEwIj5sb2cxMDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4zNSA8Y29kZT5sb2cxcDwvY29kZT4sIDxjb2RlPmxvZzFwZjwvY29kZT4mbWRhc2g7bG9nIG9mIDxjb2RlPjEgKyA8L2NvZGU+PHZhcj54PC92YXI+PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbG9nMXAtMTAyIj48L2E+PGEgbmFtZT0iaW5kZXgtbG9nMXBmLTEwMyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGxvZzFwKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCBsb2cxcGYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5sb2cxcDwvY29kZT4gY2FsY3VsYXRlcwordGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDxjb2RlPjErPC9jb2RlPjx2YXI+eDwvdmFyPi4gIFlvdSBjYW4gdXNlIDxjb2RlPmxvZzFwPC9jb2RlPiByYXRoZXIKK3RoYW4gYDxjb2RlPmxvZygxKzwvY29kZT48dmFyPng8L3Zhcj48Y29kZT4pPC9jb2RlPicgZm9yIGdyZWF0ZXIgcHJlY2lzaW9uIHdoZW4gPHZhcj54PC92YXI+IGlzIHZlcnkKK3NtYWxsLgorCisgICA8cD48Y29kZT5sb2cxcGY8L2NvZGU+IGNhbGN1bGF0ZXMgdGhlIHNhbWUgdGhpbmcsIGJ1dCBhY2NlcHRzIGFuZCByZXR1cm5zCis8Y29kZT5mbG9hdDwvY29kZT4gdmFsdWVzIHJhdGhlciB0aGFuIDxjb2RlPmRvdWJsZTwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPmxvZzFwPC9jb2RlPiByZXR1cm5zIGEgPGNvZGU+ZG91YmxlPC9jb2RlPiwgdGhlIG5hdHVyYWwgbG9nIG9mIDxjb2RlPjErPC9jb2RlPjx2YXI+eDwvdmFyPi4gCis8Y29kZT5sb2cxcGY8L2NvZGU+IHJldHVybnMgYSA8Y29kZT5mbG9hdDwvY29kZT4sIHRoZSBuYXR1cmFsIGxvZyBvZiA8Y29kZT4xKzwvY29kZT48dmFyPng8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitOZWl0aGVyIDxjb2RlPmxvZzFwPC9jb2RlPiBub3IgPGNvZGU+bG9nMXBmPC9jb2RlPiBpcyByZXF1aXJlZCBieSBBTlNJIEMgb3IgYnkgdGhlIFN5c3RlbSBWCitJbnRlcmZhY2UgRGVmaW5pdGlvbiAoSXNzdWUgMikuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbG9nMi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbG9nMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDY3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9sb2cyLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bG9nMiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibG9nMXAuaHRtbCNsb2cxcCIgdGl0bGU9ImxvZzFwIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibG9nYi5odG1sI2xvZ2IiIHRpdGxlPSJsb2diIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJsb2cyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9ImxvZ2IuaHRtbCNsb2diIj5sb2diPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibG9nMXAuaHRtbCNsb2cxcCI+bG9nMXA8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMzYgPGNvZGU+bG9nMjwvY29kZT4sIDxjb2RlPmxvZzJmPC9jb2RlPiZuZGFzaDtiYXNlIDIgbG9nYXJpdGhtPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbG9nMi0xMDQiPjwvYT48YSBuYW1lPSJpbmRleC1sb2cyZi0xMDUiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBsb2cyKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCBsb2cyZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5sb2cyPC9jb2RlPiBmdW5jdGlvbnMgY29tcHV0ZSB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiA8dmFyPng8L3Zhcj4uICBBIGRvbWFpbiBlcnJvcgorb2NjdXJzIGlmIHRoZSBhcmd1bWVudCBpcyBsZXNzIHRoYW4gemVyby4gIEEgcmFuZ2UgZXJyb3Igb2NjdXJzIGlmIHRoZQorYXJndW1lbnQgaXMgemVyby4KKworICAgPHA+VGhlIE5ld2xpYiBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBmdWxsLCBpbnRyaW5pc2ljIGNhbGN1bGF0aW9ucywgYnV0CityYXRoZXIgYXJlIGRlcml2YXRpdmVzIGJhc2VkIG9uIDxjb2RlPmxvZzwvY29kZT4uICAoQWNjdXJhY3kgbWlnaHQgYmUgc2xpZ2h0bHkgb2ZmIGZyb20KK2EgZGlyZWN0IGNhbGN1bGF0aW9uLikgIEluIGFkZGl0aW9uIHRvIGZ1bmN0aW9ucywgdGhleSBhcmUgYWxzbyBpbXBsZW1lbnRlZCBhcworbWFjcm9zIGRlZmluZWQgaW4gbWF0aC5oOgorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAjZGVmaW5lIGxvZzIoeCkgKGxvZyAoeCkgLyBfTV9MTjIpCisgICAgICAjZGVmaW5lIGxvZzJmKHgpIChsb2dmICh4KSAvIChmbG9hdCkgX01fTE4yKQorPC9wcmU+CisgICA8cD5UbyB1c2UgdGhlIGZ1bmN0aW9ucyBpbnN0ZWFkLCBqdXN0IHVuZGVmaW5lIHRoZSBtYWNyb3MgZmlyc3QuCisKKyAgIDxwPllvdSBjYW4gdXNlIHRoZSAobm9uLUFOU0kpIGZ1bmN0aW9uIDxjb2RlPm1hdGhlcnI8L2NvZGU+IHRvIHNwZWNpZnkgZXJyb3IKK2hhbmRsaW5nIGZvciB0aGVzZSBmdW5jdGlvbnMsIGluZGlyZWN0bHkgdGhyb3VnaCB0aGUgcmVzcGVjdGl2ZSA8Y29kZT5sb2c8L2NvZGU+CitmdW5jdGlvbi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPmxvZzI8L2NvZGU+IGZ1bmN0aW9ucyByZXR1cm4KKzxjb2RlPmxvZyBiYXNlLTIoPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+CitvbiBzdWNjZXNzLiAKK1doZW4gPHZhcj54PC92YXI+IGlzIHplcm8sIHRoZQorcmV0dXJuZWQgdmFsdWUgaXMgPGNvZGU+LUhVR0VfVkFMPC9jb2RlPiBhbmQgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byA8Y29kZT5FUkFOR0U8L2NvZGU+LiAKK1doZW4gPHZhcj54PC92YXI+IGlzIG5lZ2F0aXZlLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpIGFuZAorPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCB0byA8Y29kZT5FRE9NPC9jb2RlPi4gIFlvdSBjYW4gY29udHJvbCB0aGUgZXJyb3IgYmVoYXZpb3IgdmlhCis8Y29kZT5tYXRoZXJyPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0M5OSwgUE9TSVgsIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uIChJc3N1ZSA2KS4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9sb2diLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9sb2diLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlZjg3NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2xvZ2IuaHRtbApAQCAtMCwwICsxLDc4IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5sb2diIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJsb2cyLmh0bWwjbG9nMiIgdGl0bGU9ImxvZzIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJscmludC5odG1sI2xyaW50IiB0aXRsZT0ibHJpbnQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImxvZ2IiPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibHJpbnQuaHRtbCNscmludCI+bHJpbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJsb2cyLmh0bWwjbG9nMiI+bG9nMjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4zNyA8Y29kZT5sb2diPC9jb2RlPiwgPGNvZGU+bG9nYmY8L2NvZGU+Jm5kYXNoO2dldCBleHBvbmVudCBvZiBmbG9hdGluZy1wb2ludCBudW1iZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1sb2diLTEwNiI+PC9hPjxhIG5hbWU9ImluZGV4LWxvZ2JmLTEwNyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIGxvZ2IoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IGxvZ2JmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPmxvZ2I8L2NvZGU+IGZ1bmN0aW9ucyBleHRyYWN0IHRoZSBleHBvbmVudCBvZiA8dmFyPng8L3Zhcj4sIGFzIGEgc2lnbmVkIGludGVnZXIgdmFsdWUKK2luIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIElmIDx2YXI+eDwvdmFyPiBpcyBzdWJub3JtYWwgaXQgaXMgdHJlYXRlZCBhcyB0aG91Z2ggaXQgd2VyZQorbm9ybWFsaXplZDsgdGh1cywgZm9yIHBvc2l0aXZlIGZpbml0ZSA8dmFyPng8L3Zhcj4sCisxICZsdDs9ICg8dmFyPng8L3Zhcj4gKiBGTFRfUkFESVggdG8gdGhlIHBvd2VyICgtbG9nYig8dmFyPng8L3Zhcj4pKSkgJmx0OyBGTFRfUkFESVguIAorQSBkb21haW4gZXJyb3IgbWF5IG9jY3VyIGlmIHRoZSBhcmd1bWVudCBpcyB6ZXJvLiAKK0luIHRoaXMgZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb24sIEZMVF9SQURJWCBpcyAyLiAgV2hpY2ggYWxzbyBtZWFucwordGhhdCBmb3IgZmluaXRlIDx2YXI+eDwvdmFyPiwgPGNvZGU+bG9nYjwvY29kZT4oPHZhcj54PC92YXI+KSA9IDxjb2RlPmZsb29yPC9jb2RlPig8Y29kZT5sb2cyPC9jb2RlPig8Y29kZT5mYWJzPC9jb2RlPig8dmFyPng8L3Zhcj4pKSkuCisKKyAgIDxwPkFsbCBub256ZXJvLCBub3JtYWwgbnVtYmVycyBjYW4gYmUgZGVzY3JpYmVkIGFzCis8dmFyPm08L3Zhcj4gKiAyKio8dmFyPnA8L3Zhcj4sIHdoZXJlIDEuMCAmbHQ7PSA8dmFyPm08L3Zhcj4gJmx0OyAyLjAuIAorVGhlIDxjb2RlPmxvZ2I8L2NvZGU+IGZ1bmN0aW9ucyBleGFtaW5lIHRoZSBhcmd1bWVudCA8dmFyPng8L3Zhcj4sIGFuZCByZXR1cm4gPHZhcj5wPC92YXI+LiAKK1RoZSA8Y29kZT5mcmV4cDwvY29kZT4gZnVuY3Rpb25zIGFyZSBzaW1pbGFyIHRvIHRoZSA8Y29kZT5sb2diPC9jb2RlPiBmdW5jdGlvbnMsIGJ1dAorcmV0dXJuaW5nIDx2YXI+bTwvdmFyPiBhZGp1c3RlZCB0byB0aGUgaW50ZXJ2YWwgWy41LCAxKSBvciAwLCBhbmQgPHZhcj5wPC92YXI+KzEuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzwhLS0gRm9ybWF0dGluZyBub3RlOiAgIiRAIiBmb3JjZXMgYSBuZXcgbGluZSAtLT4KK1doZW4gPHZhcj54PC92YXI+IGlzOjxicj4KKytpbmYgb3IgLWluZiwgK2luZiBpcyByZXR1cm5lZDs8YnI+CitOYU4sIE5hTiBpcyByZXR1cm5lZDs8YnI+CiswLCAtaW5mIGlzIHJldHVybmVkLCBhbmQgdGhlIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbiBpcyByYWlzZWQ7PGJyPgorb3RoZXJ3aXNlLCB0aGUgPGNvZGU+bG9nYjwvY29kZT4gZnVuY3Rpb25zIHJldHVybiB0aGUgc2lnbmVkIGV4cG9uZW50IG9mIDx2YXI+eDwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQywgUE9TSVgKKworICAgPHA+PGJyPgorPHN0cm9uZz5TZWUgQWxzbzwvc3Ryb25nPjxicj4KK2ZyZXhwLCBpbG9nYgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL2xyaW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9scmludC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMGRlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9scmludC5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPmxyaW50IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJsb2diLmh0bWwjbG9nYiIgdGl0bGU9ImxvZ2IiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJscm91bmQuaHRtbCNscm91bmQiIHRpdGxlPSJscm91bmQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9ImxyaW50Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Imxyb3VuZC5odG1sI2xyb3VuZCI+bHJvdW5kPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibG9nYi5odG1sI2xvZ2IiPmxvZ2I8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuMzggPGNvZGU+bHJpbnQ8L2NvZGU+LCA8Y29kZT5scmludGY8L2NvZGU+LCA8Y29kZT5sbHJpbnQ8L2NvZGU+LCA8Y29kZT5sbHJpbnRmPC9jb2RlPiZuZGFzaDtyb3VuZCB0byBpbnRlZ2VyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbHJpbnQtMTA4Ij48L2E+PGEgbmFtZT0iaW5kZXgtbHJpbnRmLTEwOSI+PC9hPjxhIG5hbWU9ImluZGV4LWxscmludC0xMTAiPjwvYT48YSBuYW1lPSJpbmRleC1sbHJpbnRmLTExMSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgbG9uZyBpbnQgbHJpbnQoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGxvbmcgaW50IGxyaW50ZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICBsb25nIGxvbmcgaW50IGxscmludChkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgbG9uZyBsb25nIGludCBsbHJpbnRmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPmxyaW50PC9jb2RlPiBhbmQgPGNvZGU+bGxyaW50PC9jb2RlPiBmdW5jdGlvbnMgcm91bmQgdGhlaXIgYXJndW1lbnQgdG8gdGhlIG5lYXJlc3QKK2ludGVnZXIgdmFsdWUsIHVzaW5nIHRoZSBjdXJyZW50IHJvdW5kaW5nIGRpcmVjdGlvbi4gIElmIHRoZSByb3VuZGVkIHZhbHVlIGlzCitvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgcmV0dXJuIHR5cGUsIHRoZSBudW1lcmljIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4gIEEKK3JhbmdlIGVycm9yIG1heSBvY2N1ciBpZiB0aGUgbWFnbml0dWRlIG9mIDx2YXI+eDwvdmFyPiBpcyB0b28gbGFyZ2UuIAorVGhlICJpbmV4YWN0IiBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gaXMgcmFpc2VkIGluIGltcGxlbWVudGF0aW9ucyB0aGF0CitzdXBwb3J0IGl0IHdoZW4gdGhlIHJlc3VsdCBkaWZmZXJzIGluIHZhbHVlIGZyb20gdGhlIGFyZ3VtZW50IChpLmUuLCB3aGVuCithIGZyYWN0aW9uIGFjdHVhbGx5IGhhcyBiZWVuIHRydW5jYXRlZCkuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzx2YXI+eDwvdmFyPiByb3VuZGVkIHRvIGFuIGludGVncmFsIHZhbHVlLCB1c2luZyB0aGUgY3VycmVudCByb3VuZGluZyBkaXJlY3Rpb24uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+U2VlIEFsc288L3N0cm9uZz48YnI+Cis8Y29kZT5scm91bmQ8L2NvZGU+CisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMsIFBPU0lYCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbHJvdW5kLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9scm91bmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWNmMThkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbHJvdW5kLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bHJvdW5kIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJscmludC5odG1sI2xyaW50IiB0aXRsZT0ibHJpbnQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJtYXRoZXJyLmh0bWwjbWF0aGVyciIgdGl0bGU9Im1hdGhlcnIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Imxyb3VuZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJtYXRoZXJyLmh0bWwjbWF0aGVyciI+bWF0aGVycjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9ImxyaW50Lmh0bWwjbHJpbnQiPmxyaW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjM5IDxjb2RlPmxyb3VuZDwvY29kZT4sIDxjb2RlPmxyb3VuZGY8L2NvZGU+LCA8Y29kZT5sbHJvdW5kPC9jb2RlPiwgPGNvZGU+bGxyb3VuZGY8L2NvZGU+Jm5kYXNoO3JvdW5kIHRvIGludGVnZXIsIHRvIG5lYXJlc3Q8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1scm91bmQtMTEyIj48L2E+PGEgbmFtZT0iaW5kZXgtbHJvdW5kZi0xMTMiPjwvYT48YSBuYW1lPSJpbmRleC1sbHJvdW5kLTExNCI+PC9hPjxhIG5hbWU9ImluZGV4LWxscm91bmRmLTExNSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgbG9uZyBpbnQgbHJvdW5kKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBsb25nIGludCBscm91bmRmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIGxvbmcgbG9uZyBpbnQgbGxyb3VuZChkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgbG9uZyBsb25nIGludCBsbHJvdW5kZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5scm91bmQ8L2NvZGU+IGFuZCA8Y29kZT5sbHJvdW5kPC9jb2RlPiBmdW5jdGlvbnMgcm91bmQgdGhlaXIgYXJndW1lbnQgdG8gdGhlCituZWFyZXN0IGludGVnZXIgdmFsdWUsIHJvdW5kaW5nIGhhbGZ3YXkgY2FzZXMgYXdheSBmcm9tIHplcm8sIHJlZ2FyZGxlc3MKK29mIHRoZSBjdXJyZW50IHJvdW5kaW5nIGRpcmVjdGlvbi4gIElmIHRoZSByb3VuZGVkIHZhbHVlIGlzIG91dHNpZGUgdGhlCityYW5nZSBvZiB0aGUgcmV0dXJuIHR5cGUsIHRoZSBudW1lcmljIHJlc3VsdCBpcyB1bnNwZWNpZmllZCAoZGVwZW5kaW5nCit1cG9uIHRoZSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiwgbm90IHRoZSBsaWJyYXJ5KS4gIEEgcmFuZ2UKK2Vycm9yIG1heSBvY2N1ciBpZiB0aGUgbWFnbml0dWRlIG9mIHggaXMgdG9vIGxhcmdlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8dmFyPng8L3Zhcj4gcm91bmRlZCB0byBhbiBpbnRlZ3JhbCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlNlZSBBbHNvPC9zdHJvbmc+PGJyPgorU2VlIHRoZSA8Y29kZT5yb3VuZDwvY29kZT4gZnVuY3Rpb25zIGZvciB0aGUgcmV0dXJuIGJlaW5nIHRoZSBzYW1lIGZsb2F0aW5nLXBvaW50IHR5cGUKK2FzIHRoZSBhcmd1bWVudC4gIDxjb2RlPmxyaW50PC9jb2RlPiwgPGNvZGU+bGxyaW50PC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQywgUE9TSVgKKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9tYXRoZXJyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9tYXRoZXJyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlZmMwNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL21hdGhlcnIuaHRtbApAQCAtMCwwICsxLDExNCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bWF0aGVyciAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibHJvdW5kLmh0bWwjbHJvdW5kIiB0aXRsZT0ibHJvdW5kIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibW9kZi5odG1sI21vZGYiIHRpdGxlPSJtb2RmIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJtYXRoZXJyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9Im1vZGYuaHRtbCNtb2RmIj5tb2RmPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibHJvdW5kLmh0bWwjbHJvdW5kIj5scm91bmQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNDAgPGNvZGU+bWF0aGVycjwvY29kZT4mbWRhc2g7bW9kaWZpYWJsZSBtYXRoIGVycm9yIGhhbmRsZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1tYXRoZXJyLTExNiI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgaW50IG1hdGhlcnIoc3RydWN0IGV4Y2VwdGlvbiAqPHZhcj5lPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5tYXRoZXJyPC9jb2RlPiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBtYXRoIGxpYnJhcnkgZnVuY3Rpb24gZ2VuZXJhdGVzIGFuIGVycm9yLiAKK1lvdSBjYW4gcmVwbGFjZSA8Y29kZT5tYXRoZXJyPC9jb2RlPiBieSB5b3VyIG93biBzdWJyb3V0aW5lIHRvIGN1c3RvbWl6ZQorZXJyb3IgdHJlYXRtZW50LiAgVGhlIGN1c3RvbWl6ZWQgPGNvZGU+bWF0aGVycjwvY29kZT4gbXVzdCByZXR1cm4gMCBpZgoraXQgZmFpbHMgdG8gcmVzb2x2ZSB0aGUgZXJyb3IsIGFuZCBub24temVybyBpZiB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQuCisKKyAgIDxwPldoZW4gPGNvZGU+bWF0aGVycjwvY29kZT4gcmV0dXJucyBhIG5vbnplcm8gdmFsdWUsIG5vIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZAorYW5kIHRoZSB2YWx1ZSBvZiA8Y29kZT5lcnJubzwvY29kZT4gaXMgbm90IG1vZGlmaWVkLiAgWW91IGNhbiBhY2NvbXBsaXNoIGVpdGhlcgorb3IgYm90aCBvZiB0aGVzZSB0aGluZ3MgaW4geW91ciBvd24gPGNvZGU+bWF0aGVycjwvY29kZT4gdXNpbmcgdGhlIGluZm9ybWF0aW9uCitwYXNzZWQgaW4gdGhlIHN0cnVjdHVyZSA8Y29kZT4qPC9jb2RlPjx2YXI+ZTwvdmFyPi4KKworICAgPHA+VGhpcyBpcyB0aGUgPGNvZGU+ZXhjZXB0aW9uPC9jb2RlPiBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gYDxjb2RlPm1hdGguaDwvY29kZT4nKToKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAJc3RydWN0IGV4Y2VwdGlvbiB7CisgICAgIAkgICAgICAgIGludCB0eXBlOworICAgICAJICAgICAgICBjaGFyICpuYW1lOworICAgICAJICAgICAgICBkb3VibGUgYXJnMSwgYXJnMiwgcmV0dmFsOworICAgICAJCWludCBlcnI7CisgICAgIAl9OworPC9wcmU+CisgICA8cD5UaGUgbWVtYmVycyBvZiB0aGUgZXhjZXB0aW9uIHN0cnVjdHVyZSBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisgICAgIDxkbD4KKzxkdD48Y29kZT50eXBlPC9jb2RlPjxkZD5UaGUgdHlwZSBvZiBtYXRoZW1hdGljYWwgZXJyb3IgdGhhdCBvY2N1cmVkOyBtYWNyb3MgZW5jb2RpbmcgZXJyb3IKK3R5cGVzIGFyZSBhbHNvIGRlZmluZWQgaW4gYDxjb2RlPm1hdGguaDwvY29kZT4nLgorCisgICAgIDxicj48ZHQ+PGNvZGU+bmFtZTwvY29kZT48ZGQ+YSBwb2ludGVyIHRvIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBob2xkaW5nIHRoZQorbmFtZSBvZiB0aGUgbWF0aCBsaWJyYXJ5IGZ1bmN0aW9uIHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZC4KKworICAgICA8YnI+PGR0Pjxjb2RlPmFyZzEsIGFyZzI8L2NvZGU+PGRkPlRoZSBhcmd1bWVudHMgd2hpY2ggY2F1c2VkIHRoZSBlcnJvci4KKworICAgICA8YnI+PGR0Pjxjb2RlPnJldHZhbDwvY29kZT48ZGQ+VGhlIGVycm9yIHJldHVybiB2YWx1ZSAod2hhdCB0aGUgY2FsbGluZyBmdW5jdGlvbiB3aWxsIHJldHVybikuCisKKyAgICAgPGJyPjxkdD48Y29kZT5lcnI8L2NvZGU+PGRkPklmIHNldCB0byBiZSBub24temVybywgdGhpcyBpcyB0aGUgbmV3IHZhbHVlIGFzc2lnbmVkIHRvIDxjb2RlPmVycm5vPC9jb2RlPi4gCis8L2RsPgorCisgICA8cD5UaGUgZXJyb3IgdHlwZXMgZGVmaW5lZCBpbiBgPGNvZGU+bWF0aC5oPC9jb2RlPicgcmVwcmVzZW50IHBvc3NpYmxlIG1hdGhlbWF0aWNhbAorZXJyb3JzIGFzIGZvbGxvd3M6CisKKyAgICAgPGRsPgorPGR0Pjxjb2RlPkRPTUFJTjwvY29kZT48ZGQ+QW4gYXJndW1lbnQgd2FzIG5vdCBpbiB0aGUgZG9tYWluIG9mIHRoZSBmdW5jdGlvbjsgZS5nLiA8Y29kZT5sb2coLTEuMCk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+U0lORzwvY29kZT48ZGQ+VGhlIHJlcXVlc3RlZCBjYWxjdWxhdGlvbiB3b3VsZCByZXN1bHQgaW4gYSBzaW5ndWxhcml0eTsgZS5nLiA8Y29kZT5wb3coMC4wLC0yLjApPC9jb2RlPgorCisgICAgIDxicj48ZHQ+PGNvZGU+T1ZFUkZMT1c8L2NvZGU+PGRkPkEgY2FsY3VsYXRpb24gd291bGQgcHJvZHVjZSBhIHJlc3VsdCB0b28gbGFyZ2UgdG8gcmVwcmVzZW50OyBlLmcuIAorPGNvZGU+ZXhwKDEwMDAuMCk8L2NvZGU+LgorCisgICAgIDxicj48ZHQ+PGNvZGU+VU5ERVJGTE9XPC9jb2RlPjxkZD5BIGNhbGN1bGF0aW9uIHdvdWxkIHByb2R1Y2UgYSByZXN1bHQgdG9vIHNtYWxsIHRvIHJlcHJlc2VudDsgZS5nLiAKKzxjb2RlPmV4cCgtMTAwMC4wKTwvY29kZT4uCisKKyAgICAgPGJyPjxkdD48Y29kZT5UTE9TUzwvY29kZT48ZGQ+VG90YWwgbG9zcyBvZiBwcmVjaXNpb24uICBUaGUgcmVzdWx0IHdvdWxkIGhhdmUgbm8gc2lnbmlmaWNhbnQgZGlnaXRzOworZS5nLiA8Y29kZT5zaW4oMTBlNzApPC9jb2RlPi4KKworICAgICA8YnI+PGR0Pjxjb2RlPlBMT1NTPC9jb2RlPjxkZD5QYXJ0aWFsIGxvc3Mgb2YgcHJlY2lzaW9uLiAKKzwvZGw+CisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBsaWJyYXJ5IGRlZmluaXRpb24gZm9yIDxjb2RlPm1hdGhlcnI8L2NvZGU+IHJldHVybnMgPGNvZGU+MDwvY29kZT4gaW4gYWxsIGNhc2VzLgorCisgICA8cD5Zb3UgY2FuIGNoYW5nZSB0aGUgY2FsbGluZyBmdW5jdGlvbidzIHJlc3VsdCBmcm9tIGEgY3VzdG9taXplZCA8Y29kZT5tYXRoZXJyPC9jb2RlPgorYnkgbW9kaWZ5aW5nIDxjb2RlPmUtJmd0O3JldHZhbDwvY29kZT4sIHdoaWNoIHByb3BhZ2F0ZXMgYmFja3MgdG8gdGhlIGNhbGxlci4KKworICAgPHA+SWYgPGNvZGU+bWF0aGVycjwvY29kZT4gcmV0dXJucyA8Y29kZT4wPC9jb2RlPiAoaW5kaWNhdGluZyB0aGF0IGl0IHdhcyBub3QgYWJsZSB0byByZXNvbHZlCit0aGUgZXJyb3IpIHRoZSBjYWxsZXIgc2V0cyA8Y29kZT5lcnJubzwvY29kZT4gdG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUsIGFuZCBwcmludHMKK2FuIGVycm9yIG1lc3NhZ2UuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5tYXRoZXJyPC9jb2RlPiBpcyBub3QgQU5TSSBDLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL21vZGYuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL21vZGYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzdjM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbW9kZi5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm1vZGYgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im1hdGhlcnIuaHRtbCNtYXRoZXJyIiB0aXRsZT0ibWF0aGVyciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Im5hbi5odG1sI25hbiIgdGl0bGU9Im5hbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibW9kZiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJuYW4uaHRtbCNuYW4iPm5hbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im1hdGhlcnIuaHRtbCNtYXRoZXJyIj5tYXRoZXJyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjQxIDxjb2RlPm1vZGY8L2NvZGU+LCA8Y29kZT5tb2RmZjwvY29kZT4mbWRhc2g7c3BsaXQgZnJhY3Rpb25hbCBhbmQgaW50ZWdlciBwYXJ0czwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW1vZGYtMTE3Ij48L2E+PGEgbmFtZT0iaW5kZXgtbW9kZmYtMTE4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgbW9kZihkb3VibGUgPHZhcj52YWw8L3Zhcj4sIGRvdWJsZSAqPHZhcj5pcGFydDwvdmFyPik7CisgICAgIGZsb2F0IG1vZGZmKGZsb2F0IDx2YXI+dmFsPC92YXI+LCBmbG9hdCAqPHZhcj5pcGFydDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+bW9kZjwvY29kZT4gc3BsaXRzIHRoZSBkb3VibGUgPHZhcj52YWw8L3Zhcj4gYXBhcnQgaW50byBhbiBpbnRlZ2VyIHBhcnQKK2FuZCBhIGZyYWN0aW9uYWwgcGFydCwgcmV0dXJuaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgYW5kCitzdG9yaW5nIHRoZSBpbnRlZ2VyIHBhcnQgaW4gPGNvZGU+KjwvY29kZT48dmFyPmlwYXJ0PC92YXI+LiAgTm8gcm91bmRpbmcKK3doYXRzb2V2ZXIgaXMgZG9uZTsgdGhlIHN1bSBvZiB0aGUgaW50ZWdlciBhbmQgZnJhY3Rpb25hbAorcGFydHMgaXMgZ3VhcmFudGVlZCB0byBiZSBleGFjdGx5ICBlcXVhbCB0byA8dmFyPnZhbDwvdmFyPi4gICBUaGF0CitpcywgaWYgPHZhcj5yZWFscGFydDwvdmFyPiA9IG1vZGYoPHZhcj52YWw8L3Zhcj4sICZhbXA7PHZhcj5pbnRwYXJ0PC92YXI+KTsgdGhlbgorYDx2YXI+cmVhbHBhcnQ8L3Zhcj48Y29kZT4rPC9jb2RlPjx2YXI+aW50cGFydDwvdmFyPicgaXMgdGhlIHNhbWUgYXMgPHZhcj52YWw8L3Zhcj4uIAorPGNvZGU+bW9kZmY8L2NvZGU+IGlzIGlkZW50aWNhbCwgc2F2ZSB0aGF0IGl0IHRha2VzIGFuZCByZXR1cm5zCis8Y29kZT5mbG9hdDwvY29kZT4gcmF0aGVyIHRoYW4gPGNvZGU+ZG91YmxlPC9jb2RlPiB2YWx1ZXMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBmcmFjdGlvbmFsIHBhcnQgaXMgcmV0dXJuZWQuICBFYWNoIHJlc3VsdCBoYXMgdGhlIHNhbWUKK3NpZ24gYXMgdGhlIHN1cHBsaWVkIGFyZ3VtZW50IDx2YXI+dmFsPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+bW9kZjwvY29kZT4gaXMgQU5TSSBDLiA8Y29kZT5tb2RmZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL25hbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbmFuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4NzU4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL25hbi5odG1sCkBAIC0wLDAgKzEsNTEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPm5hbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ibW9kZi5odG1sI21vZGYiIHRpdGxlPSJtb2RmIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibmVhcmJ5aW50Lmh0bWwjbmVhcmJ5aW50IiB0aXRsZT0ibmVhcmJ5aW50Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJuYW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0ibmVhcmJ5aW50Lmh0bWwjbmVhcmJ5aW50Ij5uZWFyYnlpbnQ8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJtb2RmLmh0bWwjbW9kZiI+bW9kZjwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS40MiA8Y29kZT5uYW48L2NvZGU+LCA8Y29kZT5uYW5mPC9jb2RlPiZtZGFzaDtyZXByZXNlbnRhdGlvbiBvZiAmbGRxdW87Tm90IGEgTnVtYmVyJnJkcXVvOzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LW5hbi0xMTkiPjwvYT48YSBuYW1lPSJpbmRleC1uYW5mLTEyMCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIG5hbihjb25zdCBjaGFyICopOworICAgICBmbG9hdCBuYW5mKGNvbnN0IGNoYXIgKik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+bmFuPC9jb2RlPiBhbmQgPGNvZGU+bmFuZjwvY29kZT4gcmV0dXJuIGFuIElFRUUgTmFOIChOb3QgYSBOdW1iZXIpIGluCitkb3VibGUtIGFuZCBzaW5nbGUtcHJlY2lzaW9uIGFyaXRobWV0aWMgcmVzcGVjdGl2ZWx5LiAgVGhlCithcmd1bWVudCBpcyBjdXJyZW50bHkgZGlzcmVnYXJkZWQuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbmVhcmJ5aW50Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9uZWFyYnlpbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjE0NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvbmVhcmJ5aW50Lmh0bWwKQEAgLTAsMCArMSw3NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+bmVhcmJ5aW50IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJuYW4uaHRtbCNuYW4iIHRpdGxlPSJuYW4iPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJuZXh0YWZ0ZXIuaHRtbCNuZXh0YWZ0ZXIiIHRpdGxlPSJuZXh0YWZ0ZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9Im5lYXJieWludCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJuZXh0YWZ0ZXIuaHRtbCNuZXh0YWZ0ZXIiPm5leHRhZnRlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im5hbi5odG1sI25hbiI+bmFuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjQzIDxjb2RlPm5lYXJieWludDwvY29kZT4sIDxjb2RlPm5lYXJieWludGY8L2NvZGU+Jm5kYXNoO3JvdW5kIHRvIGludGVnZXI8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1uZWFyYnlpbnQtMTIxIj48L2E+PGEgbmFtZT0iaW5kZXgtbmVhcmJ5aW50Zi0xMjIiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBuZWFyYnlpbnQoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0IG5lYXJieWludGYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+bmVhcmJ5aW50PC9jb2RlPiBmdW5jdGlvbnMgcm91bmQgdGhlaXIgYXJndW1lbnQgdG8gYW4gaW50ZWdlciB2YWx1ZSBpbgorZmxvYXRpbmctcG9pbnQgZm9ybWF0LCB1c2luZyB0aGUgY3VycmVudCByb3VuZGluZyBkaXJlY3Rpb24gYW5kCisoc3VwcG9zZWRseSkgd2l0aG91dCByYWlzaW5nIHRoZSAiaW5leGFjdCIgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uLiAKK1NlZSB0aGUgPGNvZGU+cmludDwvY29kZT4gZnVuY3Rpb25zIGZvciB0aGUgc2FtZSBmdW5jdGlvbiB3aXRoIHRoZSAiaW5leGFjdCIKK2Zsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiBiZWluZyByYWlzZWQgd2hlbiBhcHByb3ByaWF0ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5CdWdzPC9zdHJvbmc+PGJyPgorTmV3bGliIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiBtb2RlbCwgc28gdGhhdAordGhlIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiBjb250cm9sIGlzIG5vdCBwcmVzZW50IGFuZCB0aGVyZWJ5IHdoYXQgbWF5CitiZSBzZWVuIHdpbGwgYmUgY29tcGlsZXIgYW5kIGhhcmR3YXJlIGRlcGVuZGVudCBpbiB0aGlzIHJlZ2FyZC4gCitUaGUgTmV3bGliIDxjb2RlPm5lYXJieWludDwvY29kZT4gZnVuY3Rpb25zIGFyZSBpZGVudGljYWwgdG8gdGhlIDxjb2RlPnJpbnQ8L2NvZGU+CitmdW5jdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gYmVoYXZpb3IsIGFuZAord2lsbCBjYXVzZSB0aGUgImluZXhhY3QiIGV4Y2VwdGlvbiB0byBiZSByYWlzZWQgZm9yIG1vc3QgdGFyZ2V0cy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorPHZhcj54PC92YXI+IHJvdW5kZWQgdG8gYW4gaW50ZWdyYWwgdmFsdWUsIHVzaW5nIHRoZSBjdXJyZW50IHJvdW5kaW5nIGRpcmVjdGlvbi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQywgUE9TSVgKKworICAgPHA+PGJyPgorPHN0cm9uZz5TZWUgQWxzbzwvc3Ryb25nPjxicj4KKzxjb2RlPnJpbnQ8L2NvZGU+LCA8Y29kZT5yb3VuZDwvY29kZT4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9uZXh0YWZ0ZXIuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL25leHRhZnRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OWEyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9uZXh0YWZ0ZXIuaHRtbApAQCAtMCwwICsxLDYzIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5uZXh0YWZ0ZXIgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Im5lYXJieWludC5odG1sI25lYXJieWludCIgdGl0bGU9Im5lYXJieWludCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InBvdy5odG1sI3BvdyIgdGl0bGU9InBvdyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ibmV4dGFmdGVyIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InBvdy5odG1sI3BvdyI+cG93PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ibmVhcmJ5aW50Lmh0bWwjbmVhcmJ5aW50Ij5uZWFyYnlpbnQ8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNDQgPGNvZGU+bmV4dGFmdGVyPC9jb2RlPiwgPGNvZGU+bmV4dGFmdGVyZjwvY29kZT4mbWRhc2g7Z2V0IG5leHQgbnVtYmVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtbmV4dGFmdGVyLTEyMyI+PC9hPjxhIG5hbWU9ImluZGV4LW5leHRhZnRlcmYtMTI0Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgbmV4dGFmdGVyKGRvdWJsZSA8dmFyPnZhbDwvdmFyPiwgZG91YmxlIDx2YXI+ZGlyPC92YXI+KTsKKyAgICAgZmxvYXQgbmV4dGFmdGVyZihmbG9hdCA8dmFyPnZhbDwvdmFyPiwgZmxvYXQgPHZhcj5kaXI8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPm5leHRhZnRlcjwvY29kZT4gcmV0dXJucyB0aGUgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBudW1iZXIKK2Nsb3Nlc3QgdG8gPHZhcj52YWw8L3Zhcj4gaW4gdGhlIGRpcmVjdGlvbiB0b3dhcmQgPHZhcj5kaXI8L3Zhcj4uICA8Y29kZT5uZXh0YWZ0ZXJmPC9jb2RlPgorcGVyZm9ybXMgdGhlIHNhbWUgb3BlcmF0aW9uIGluIHNpbmdsZSBwcmVjaXNpb24uICBGb3IgZXhhbXBsZSwKKzxjb2RlPm5leHRhZnRlcigwLjAsMS4wKTwvY29kZT4gcmV0dXJucyB0aGUgc21hbGxlc3QgcG9zaXRpdmUgbnVtYmVyIHdoaWNoIGlzCityZXByZXNlbnRhYmxlIGluIGRvdWJsZSBwcmVjaXNpb24uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1JldHVybnMgdGhlIG5leHQgY2xvc2VzdCBudW1iZXIgdG8gPHZhcj52YWw8L3Zhcj4gaW4gdGhlIGRpcmVjdGlvbiB0b3dhcmQKKzx2YXI+ZGlyPC92YXI+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorTmVpdGhlciA8Y29kZT5uZXh0YWZ0ZXI8L2NvZGU+IG5vciA8Y29kZT5uZXh0YWZ0ZXJmPC9jb2RlPiBpcyByZXF1aXJlZCBieSBBTlNJIEMKK29yIGJ5IHRoZSBTeXN0ZW0gViBJbnRlcmZhY2UgRGVmaW5pdGlvbiAoSXNzdWUgMikuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvcG93Lmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9wb3cuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTg1NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvcG93Lmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cG93IC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJuZXh0YWZ0ZXIuaHRtbCNuZXh0YWZ0ZXIiIHRpdGxlPSJuZXh0YWZ0ZXIiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJyZW1haW5kZXIuaHRtbCNyZW1haW5kZXIiIHRpdGxlPSJyZW1haW5kZXIiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InBvdyI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyZW1haW5kZXIuaHRtbCNyZW1haW5kZXIiPnJlbWFpbmRlcjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9Im5leHRhZnRlci5odG1sI25leHRhZnRlciI+bmV4dGFmdGVyPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjQ1IDxjb2RlPnBvdzwvY29kZT4sIDxjb2RlPnBvd2Y8L2NvZGU+Jm1kYXNoO3ggdG8gdGhlIHBvd2VyIHk8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1wb3ctMTI1Ij48L2E+PGEgbmFtZT0iaW5kZXgtcG93Zi0xMjYiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBwb3coZG91YmxlIDx2YXI+eDwvdmFyPiwgZG91YmxlIDx2YXI+eTwvdmFyPik7CisgICAgIGZsb2F0IHBvd2YoZmxvYXQgPHZhcj54PC92YXI+LCBmbG9hdCA8dmFyPnk8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnBvdzwvY29kZT4gYW5kIDxjb2RlPnBvd2Y8L2NvZGU+IGNhbGN1bGF0ZSA8dmFyPng8L3Zhcj4gcmFpc2VkIHRvIHRoZSBleHBvbmVudCA8dmFyPnk8L3Zhcj4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK09uIHN1Y2Nlc3MsIDxjb2RlPnBvdzwvY29kZT4gYW5kIDxjb2RlPnBvd2Y8L2NvZGU+IHJldHVybiB0aGUgdmFsdWUgY2FsY3VsYXRlZC4KKworICAgPHA+V2hlbiB0aGUgYXJndW1lbnQgdmFsdWVzIHdvdWxkIHByb2R1Y2Ugb3ZlcmZsb3csIDxjb2RlPnBvdzwvY29kZT4KK3JldHVybnMgPGNvZGU+SFVHRV9WQUw8L2NvZGU+IGFuZCBzZXQgPGNvZGU+ZXJybm88L2NvZGU+IHRvIDxjb2RlPkVSQU5HRTwvY29kZT4uICBJZiB0aGUKK2FyZ3VtZW50IDx2YXI+eDwvdmFyPiBwYXNzZWQgdG8gPGNvZGU+cG93PC9jb2RlPiBvciA8Y29kZT5wb3dmPC9jb2RlPiBpcyBhIG5lZ2F0aXZlCitub25pbnRlZ2VyLCBhbmQgPHZhcj55PC92YXI+IGlzIGFsc28gbm90IGFuIGludGVnZXIsIHRoZW4gPGNvZGU+ZXJybm88L2NvZGU+CitpcyBzZXQgdG8gPGNvZGU+RURPTTwvY29kZT4uICBJZiA8dmFyPng8L3Zhcj4gYW5kIDx2YXI+eTwvdmFyPiBhcmUgYm90aCAwLCB0aGVuCis8Y29kZT5wb3c8L2NvZGU+IGFuZCA8Y29kZT5wb3dmPC9jb2RlPiByZXR1cm4gPGNvZGU+MTwvY29kZT4uCisKKyAgIDxwPllvdSBjYW4gbW9kaWZ5IGVycm9yIGhhbmRsaW5nIGZvciB0aGVzZSBmdW5jdGlvbnMgdXNpbmcgPGNvZGU+bWF0aGVycjwvY29kZT4uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5wb3c8L2NvZGU+IGlzIEFOU0kgQy4gPGNvZGU+cG93ZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLiAKKzxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvcmVtYWluZGVyLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9yZW1haW5kZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWExNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvcmVtYWluZGVyLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+cmVtYWluZGVyIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJwb3cuaHRtbCNwb3ciIHRpdGxlPSJwb3ciPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJyZW1xdW8uaHRtbCNyZW1xdW8iIHRpdGxlPSJyZW1xdW8iPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InJlbWFpbmRlciI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyZW1xdW8uaHRtbCNyZW1xdW8iPnJlbXF1bzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InBvdy5odG1sI3BvdyI+cG93PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjQ2IDxjb2RlPnJlbWFpbmRlcjwvY29kZT4sIDxjb2RlPnJlbWFpbmRlcmY8L2NvZGU+Jm1kYXNoO3JvdW5kIGFuZCAgcmVtYWluZGVyPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmVtYWluZGVyLTEyNyI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbWFpbmRlcmYtMTI4Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgcmVtYWluZGVyKGRvdWJsZSA8dmFyPng8L3Zhcj4sIGRvdWJsZSA8dmFyPnk8L3Zhcj4pOworICAgICBmbG9hdCByZW1haW5kZXJmKGZsb2F0IDx2YXI+eDwvdmFyPiwgZmxvYXQgPHZhcj55PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+Cis8Y29kZT5yZW1haW5kZXI8L2NvZGU+IGFuZCA8Y29kZT5yZW1haW5kZXJmPC9jb2RlPiBmaW5kIHRoZSByZW1haW5kZXIgb2YKKzx2YXI+eDwvdmFyPi88dmFyPnk8L3Zhcj47IHRoaXMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIC08dmFyPnk8L3Zhcj4vMiAuLiArPHZhcj55PC92YXI+LzIuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzxjb2RlPnJlbWFpbmRlcjwvY29kZT4gcmV0dXJucyB0aGUgaW50ZWdlciByZXN1bHQgYXMgYSBkb3VibGUuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5yZW1haW5kZXI8L2NvZGU+IGlzIGEgU3lzdGVtIFYgcmVsZWFzZSA0LiAKKzxjb2RlPnJlbWFpbmRlcmY8L2NvZGU+IGlzIGFuIGV4dGVuc2lvbi4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9yZW1xdW8uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3JlbXF1by5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3Njc0MDkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9yZW1xdW8uaHRtbApAQCAtMCwwICsxLDgyIEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5yZW1xdW8gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InJlbWFpbmRlci5odG1sI3JlbWFpbmRlciIgdGl0bGU9InJlbWFpbmRlciI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InJpbnQuaHRtbCNyaW50IiB0aXRsZT0icmludCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0icmVtcXVvIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InJpbnQuaHRtbCNyaW50Ij5yaW50PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0icmVtYWluZGVyLmh0bWwjcmVtYWluZGVyIj5yZW1haW5kZXI8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNDcgPGNvZGU+cmVtcXVvPC9jb2RlPiwgPGNvZGU+cmVtcXVvZjwvY29kZT4mbmRhc2g7cmVtYWluZGVyIGFuZCBwYXJ0IG9mIHF1b3RpZW50PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcmVtcXVvLTEyOSI+PC9hPjxhIG5hbWU9ImluZGV4LXJlbXF1b2YtMTMwIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgcmVtcXVvKGRvdWJsZSA8dmFyPng8L3Zhcj4sIGRvdWJsZSA8dmFyPnk8L3Zhcj4sIGludCAqPHZhcj5xdW88L3Zhcj4pOworICAgICBmbG9hdCByZW1xdW9mKGZsb2F0IDx2YXI+eDwvdmFyPiwgZmxvYXQgPHZhcj55PC92YXI+LCBpbnQgKjx2YXI+cXVvPC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+cmVtcXVvPC9jb2RlPiBmdW5jdGlvbnMgY29tcHV0ZSB0aGUgc2FtZSByZW1haW5kZXIgYXMgdGhlIDxjb2RlPnJlbWFpbmRlcjwvY29kZT4KK2Z1bmN0aW9uczsgdGhpcyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2UgLTx2YXI+eTwvdmFyPi8yIC4uLiArPHZhcj55PC92YXI+LzIuICBJbiB0aGUgb2JqZWN0Citwb2ludGVkIHRvIGJ5IDxjb2RlPnF1bzwvY29kZT4gdGhleSBzdG9yZSBhIHZhbHVlIHdob3NlIHNpZ24gaXMgdGhlIHNpZ24gb2YgPGNvZGU+eDwvY29kZT4vPGNvZGU+eTwvY29kZT4KK2FuZCB3aG9zZSBtYWduaXR1ZGUgaXMgY29uZ3J1ZW50IG1vZHVsbyAyKipuIHRvIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGludGVncmFsCitxdW90aWVudCBvZiA8Y29kZT54PC9jb2RlPi88Y29kZT55PC9jb2RlPi4gIChUaGF0IGlzLCA8Y29kZT5xdW88L2NvZGU+IGlzIGdpdmVuIHRoZSBuIGxzYnMgb2YgdGhlCitxdW90aWVudCwgbm90IGNvdW50aW5nIHRoZSBzaWduLikgIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBuPTMxIGlmIGludCBpcyAzMgorYml0cyBvciBtb3JlLCBvdGhlcndpc2UsIG4gaXMgMSBsZXNzIHRoYW4gdGhlIHdpZHRoIG9mIGludC4KKworICAgPHA+Rm9yIGV4YW1wbGU6Cis8cHJlIGNsYXNzPSJzbWFsbGV4YW1wbGUiPiAgICAgCXJlbXF1bygtMjkuMCwgMy4wLCAmYW1wOzx2YXI+cXVvPC92YXI+KQorPC9wcmU+CisgICA8cD5yZXR1cm5zIC0xLjAgYW5kIHNldHMgPHZhcj5xdW88L3Zhcj49MTAsIGFuZAorPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgIAlyZW1xdW8oLTk4MzA3LjAsIDMuMCwgJmFtcDs8dmFyPnF1bzwvdmFyPikKKzwvcHJlPgorICAgPHA+cmV0dXJucyAtMC4wIGFuZCBzZXRzIDx2YXI+cXVvPC92YXI+PS0zMjc2OSwgYWx0aG91Z2ggZm9yIDE2LWJpdCBpbnQsIDx2YXI+cXVvPC92YXI+PS0xLiAgSW4KK3RoZSBsYXR0ZXIgY2FzZSwgdGhlIGFjdHVhbCBxdW90aWVudCBvZiAtKDMyNzY5PTB4ODAwMSkgaXMgcmVkdWNlZCB0byAtMQorYmVjYXVzZSBvZiB0aGUgMTUtYml0IGxpbWl0YXRpb24gZm9yIHRoZSBxdW90aWVudC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorV2hlbiBlaXRoZXIgYXJndW1lbnQgaXMgTmFOLCBOYU4gaXMgcmV0dXJuZWQuICBJZiA8dmFyPnk8L3Zhcj4gaXMgMCBvciA8dmFyPng8L3Zhcj4gaXMKK2luZmluaXRlIChhbmQgbmVpdGhlciBpcyBOYU4pLCBhIGRvbWFpbiBlcnJvciBvY2N1cnMgKGkuZS4gdGhlICJpbnZhbGlkIgorZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIGlzIHJhaXNlZCBvciBlcnJubyBpcyBzZXQgdG8gRURPTSksIGFuZCBOYU4gaXMKK3JldHVybmVkLiAKK090aGVyd2lzZSwgdGhlIDxjb2RlPnJlbXF1bzwvY29kZT4gZnVuY3Rpb25zIHJldHVybiA8dmFyPng8L3Zhcj4gUkVNIDx2YXI+eTwvdmFyPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5CdWdzPC9zdHJvbmc+PGJyPgorSUVFRTc1NC0yMDA4IGNhbGxzIGZvciA8Y29kZT5yZW1xdW88L2NvZGU+KHN1Ym5vcm1hbCwgaW5mKSB0byBjYXVzZSB0aGUgInVuZGVyZmxvdyIKK2Zsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4gIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitDOTksIFBPU0lYLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3JpbnQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3JpbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBmMTAxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvcmludC5odG1sCkBAIC0wLDAgKzEsNjkgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnJpbnQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InJlbXF1by5odG1sI3JlbXF1byIgdGl0bGU9InJlbXF1byI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InJvdW5kLmh0bWwjcm91bmQiIHRpdGxlPSJyb3VuZCI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0icmludCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJyb3VuZC5odG1sI3JvdW5kIj5yb3VuZDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InJlbXF1by5odG1sI3JlbXF1byI+cmVtcXVvPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjQ4IDxjb2RlPnJpbnQ8L2NvZGU+LCA8Y29kZT5yaW50ZjwvY29kZT4mbmRhc2g7cm91bmQgdG8gaW50ZWdlcjwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXJpbnQtMTMxIj48L2E+PGEgbmFtZT0iaW5kZXgtcmludGYtMTMyIj48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgcmludChkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgcmludGYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+cmludDwvY29kZT4gZnVuY3Rpb25zIHJvdW5kIHRoZWlyIGFyZ3VtZW50IHRvIGFuIGludGVnZXIgdmFsdWUgaW4KK2Zsb2F0aW5nLXBvaW50IGZvcm1hdCwgdXNpbmcgdGhlIGN1cnJlbnQgcm91bmRpbmcgZGlyZWN0aW9uLiAgVGhleQorcmFpc2UgdGhlICJpbmV4YWN0IiBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gaWYgdGhlIHJlc3VsdCBkaWZmZXJzCitpbiB2YWx1ZSBmcm9tIHRoZSBhcmd1bWVudC4gIFNlZSB0aGUgPGNvZGU+bmVhcmJ5aW50PC9jb2RlPiBmdW5jdGlvbnMgZm9yIHRoZQorc2FtZSBmdW5jdGlvbiB3aXRoIHRoZSAiaW5leGFjdCIgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIG5ldmVyIGJlaW5nCityYWlzZWQuICBOZXdsaWIgZG9lcyBub3QgZGlyZWN0bHkgc3VwcG9ydCBmbG9hdGluZy1wb2ludCBleGNlcHRpb25zLiAKK1RoZSA8Y29kZT5yaW50PC9jb2RlPiBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4gc28gdGhhdCB0aGUgImluZXhhY3QiIGV4Y2VwdGlvbiBpcworcmFpc2VkIGluIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyB0aGF0IHN1cHBvcnQgaXQsIGV2ZW4gdGhvdWdoIE5ld2xpYgorZG9lcyBub3QgcHJvdmlkZSBhY2Nlc3MuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzx2YXI+eDwvdmFyPiByb3VuZGVkIHRvIGFuIGludGVncmFsIHZhbHVlLCB1c2luZyB0aGUgY3VycmVudCByb3VuZGluZyBkaXJlY3Rpb24uCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+CitBTlNJIEMsIFBPU0lYCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+U2VlIEFsc288L3N0cm9uZz48YnI+Cis8Y29kZT5uZWFyYnlpbnQ8L2NvZGU+LCA8Y29kZT5yb3VuZDwvY29kZT4KKworICAgPHA+PGJyPgorCisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9yb3VuZC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvcm91bmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWM5ZjkyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvcm91bmQuaHRtbApAQCAtMCwwICsxLDY3IEBACis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKzx0aXRsZT5yb3VuZCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0icmludC5odG1sI3JpbnQiIHRpdGxlPSJyaW50Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic2NhbGJuLmh0bWwjc2NhbGJuIiB0aXRsZT0ic2NhbGJuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJyb3VuZCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzY2FsYm4uaHRtbCNzY2FsYm4iPnNjYWxibjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InJpbnQuaHRtbCNyaW50Ij5yaW50PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjQ5IDxjb2RlPnJvdW5kPC9jb2RlPiwgPGNvZGU+cm91bmRmPC9jb2RlPiZuZGFzaDtyb3VuZCB0byBpbnRlZ2VyLCB0byBuZWFyZXN0PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtcm91bmQtMTMzIj48L2E+PGEgbmFtZT0iaW5kZXgtcm91bmRmLTEzNCI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIHJvdW5kKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCByb3VuZGYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgCis8L3ByZT4KKyAgIDxwPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+cm91bmQ8L2NvZGU+IGZ1bmN0aW9ucyByb3VuZCB0aGVpciBhcmd1bWVudCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyCit2YWx1ZSBpbiBmbG9hdGluZy1wb2ludCBmb3JtYXQsIHJvdW5kaW5nIGhhbGZ3YXkgY2FzZXMgYXdheSBmcm9tIHplcm8sCityZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHJvdW5kaW5nIGRpcmVjdGlvbi4gIChXaGlsZSB0aGUgImluZXhhY3QiCitmbG9hdGluZy1wb2ludCBleGNlcHRpb24gYmVoYXZpb3IgaXMgdW5zcGVjaWZpZWQgYnkgdGhlIEMgc3RhbmRhcmQsIHRoZQorPGNvZGU+cm91bmQ8L2NvZGU+IGZ1bmN0aW9ucyBhcmUgd3JpdHRlbiBzbyB0aGF0ICJpbmV4YWN0IiBpcyBub3QgcmFpc2VkIGlmIHRoZQorcmVzdWx0IGRvZXMgbm90IGVxdWFsIHRoZSBhcmd1bWVudCwgd2hpY2ggYmVoYXZpb3IgaXMgYXMgcmVjb21tZW5kZWQgYnkKK0lFRUUgNzU0IGZvciBpdHMgcmVsYXRlZCBmdW5jdGlvbnMuKQorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8dmFyPng8L3Zhcj4gcm91bmRlZCB0byBhbiBpbnRlZ3JhbCB2YWx1ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQywgUE9TSVgKKworICAgPHA+PGJyPgorPHN0cm9uZz5TZWUgQWxzbzwvc3Ryb25nPjxicj4KKzxjb2RlPm5lYXJieWludDwvY29kZT4sIDxjb2RlPnJpbnQ8L2NvZGU+CisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc2NhbGJuLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9zY2FsYm4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWFhY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc2NhbGJuLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c2NhbGJuIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJyb3VuZC5odG1sI3JvdW5kIiB0aXRsZT0icm91bmQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzaWduYml0Lmh0bWwjc2lnbmJpdCIgdGl0bGU9InNpZ25iaXQiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InNjYWxibiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzaWduYml0Lmh0bWwjc2lnbmJpdCI+c2lnbmJpdDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InJvdW5kLmh0bWwjcm91bmQiPnJvdW5kPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjUwIDxjb2RlPnNjYWxibjwvY29kZT4sIDxjb2RlPnNjYWxibmY8L2NvZGU+LCA8Y29kZT5zY2FsYmxuPC9jb2RlPiwgPGNvZGU+c2NhbGJsbmY8L2NvZGU+Jm5kYXNoO3NjYWxlIGJ5IHBvd2VyIG9mIEZMVF9SQURJWCAoPTIpPC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtc2NhbGJuLTEzNSI+PC9hPjxhIG5hbWU9ImluZGV4LXNjYWxibmYtMTM2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc2NhbGJsbi0xMzciPjwvYT48YSBuYW1lPSJpbmRleC1zY2FsYmxuZi0xMzgiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSBzY2FsYm4oZG91YmxlIDx2YXI+eDwvdmFyPiwgaW50IDx2YXI+bjwvdmFyPik7CisgICAgIGZsb2F0IHNjYWxibmYoZmxvYXQgPHZhcj54PC92YXI+LCBpbnQgPHZhcj5uPC92YXI+KTsKKyAgICAgZG91YmxlIHNjYWxibG4oZG91YmxlIDx2YXI+eDwvdmFyPiwgbG9uZyBpbnQgPHZhcj5uPC92YXI+KTsKKyAgICAgZmxvYXQgc2NhbGJsbmYoZmxvYXQgPHZhcj54PC92YXI+LCBsb25nIGludCA8dmFyPm48L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5zY2FsYm48L2NvZGU+IGFuZCA8Y29kZT5zY2FsYmxuPC9jb2RlPiBmdW5jdGlvbnMgY29tcHV0ZQorPHZhcj54PC92YXI+IHRpbWVzIEZMVF9SQURJWCB0byB0aGUgcG93ZXIgPHZhcj5uPC92YXI+LiAKK2VmZmljaWVudGx5LiAgVGhlIHJlc3VsdCBpcyBjb21wdXRlZCBieSBtYW5pcHVsYXRpbmcgdGhlIGV4cG9uZW50LCByYXRoZXIgdGhhbgorYnkgYWN0dWFsbHkgcGVyZm9ybWluZyBhbiBleHBvbmVudGlhdGlvbiBvciBtdWx0aXBsaWNhdGlvbi4gIEluIHRoaXMKK2Zsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIEZMVF9SQURJWD0yLCB3aGljaCBtYWtlcyB0aGUgPGNvZGU+c2NhbGJuPC9jb2RlPgorZnVuY3Rpb25zIGVxdWl2YWxlbnQgdG8gdGhlIDxjb2RlPmxkZXhwPC9jb2RlPiBmdW5jdGlvbnMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KKzx2YXI+eDwvdmFyPiB0aW1lcyAyIHRvIHRoZSBwb3dlciA8dmFyPm48L3Zhcj4uICBBIHJhbmdlIGVycm9yIG1heSBvY2N1ci4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0FOU0kgQywgUE9TSVgKKworICAgPHA+PGJyPgorPHN0cm9uZz5TZWUgQWxzbzwvc3Ryb25nPjxicj4KKzxjb2RlPmxkZXhwPC9jb2RlPgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3NpZ25iaXQuaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3NpZ25iaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWI5NzhkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc2lnbmJpdC5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnNpZ25iaXQgLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InNjYWxibi5odG1sI3NjYWxibiIgdGl0bGU9InNjYWxibiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InNpbi5odG1sI3NpbiIgdGl0bGU9InNpbiI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0ic2lnbmJpdCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzaW4uaHRtbCNzaW4iPnNpbjwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InNjYWxibi5odG1sI3NjYWxibiI+c2NhbGJuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjUxIDxjb2RlPnNpZ25iaXQ8L2NvZGU+Jm5kYXNoO0RvZXMgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGhhdmUgbmVnYXRpdmUgc2lnbj88L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zaWduYml0LTEzOSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgaW50IHNpZ25iaXQocmVhbC1mbG9hdGluZyA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KK1RoZSA8Y29kZT5zaWduYml0PC9jb2RlPiBtYWNybyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNpZ24gb2YgaXRzIGFyZ3VtZW50IHZhbHVlIGlzCituZWdhdGl2ZS4gIFRoZSBtYWNybyByZXBvcnRzIHRoZSBzaWduIG9mIGFsbCB2YWx1ZXMsIGluY2x1ZGluZyBpbmZpbml0aWVzLAoremVyb3MsIGFuZCBOYU5zLiAgSWYgemVybyBpcyB1bnNpZ25lZCwgaXQgaXMgdHJlYXRlZCBhcyBwb3NpdGl2ZS4gIEFzIHNob3duIGluCit0aGUgc3lub3BzaXMsIHRoZSBhcmd1bWVudCBpcyAicmVhbC1mbG9hdGluZywiIG1lYW5pbmcgdGhhdCBhbnkgb2YgdGhlIHJlYWwKK2Zsb2F0aW5nLXBvaW50IHR5cGVzIChmbG9hdCwgZG91YmxlLCBldGMuKSBtYXkgYmUgZ2l2ZW4gdG8gaXQuCisKKyAgIDxwPk5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBwb3NzaWJpbGl0aWVzIG9mIHNpZ25lZCAwIGFuZCBOYU5zLCB0aGUgZXhwcmVzc2lvbgorIjx2YXI+eDwvdmFyPiAmbHQ7IDAuMCIgZG9lcyBub3QgZ2l2ZSB0aGUgc2FtZSByZXN1bHQgYXMgPGNvZGU+c2lnbmJpdDwvY29kZT4gaW4gYWxsIGNhc2VzLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+CitUaGUgPGNvZGU+c2lnbmJpdDwvY29kZT4gbWFjcm8gcmV0dXJucyBhIG5vbnplcm8gdmFsdWUgaWYgYW5kIG9ubHkgaWYgdGhlIHNpZ24gb2YgaXRzCithcmd1bWVudCB2YWx1ZSBpcyBuZWdhdGl2ZS4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KK0M5OSwgUE9TSVguCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc2luLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9zaW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjFkYTRkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc2luLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c2luIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJzaWduYml0Lmh0bWwjc2lnbmJpdCIgdGl0bGU9InNpZ25iaXQiPgorPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJzaW5oLmh0bWwjc2luaCIgdGl0bGU9InNpbmgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InNpbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJzaW5oLmh0bWwjc2luaCI+c2luaDwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InNpZ25iaXQuaHRtbCNzaWduYml0Ij5zaWduYml0PC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjUyIDxjb2RlPnNpbjwvY29kZT4sIDxjb2RlPnNpbmY8L2NvZGU+LCA8Y29kZT5jb3M8L2NvZGU+LCA8Y29kZT5jb3NmPC9jb2RlPiZtZGFzaDtzaW5lIG9yIGNvc2luZTwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXNpbi0xNDAiPjwvYT48YSBuYW1lPSJpbmRleC1zaW5mLTE0MSI+PC9hPjxhIG5hbWU9ImluZGV4LWNvcy0xNDIiPjwvYT48YSBuYW1lPSJpbmRleC1jb3NmLTE0MyI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIHNpbihkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgIHNpbmYoZmxvYXQgPHZhcj54PC92YXI+KTsKKyAgICAgZG91YmxlIGNvcyhkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgY29zZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnNpbjwvY29kZT4gYW5kIDxjb2RlPmNvczwvY29kZT4gY29tcHV0ZSAocmVzcGVjdGl2ZWx5KSB0aGUgc2luZSBhbmQgY29zaW5lCitvZiB0aGUgYXJndW1lbnQgPHZhcj54PC92YXI+LiAgQW5nbGVzIGFyZSBzcGVjaWZpZWQgaW4gcmFkaWFucy4KKworICAgPHA+PGNvZGU+c2luZjwvY29kZT4gYW5kIDxjb2RlPmNvc2Y8L2NvZGU+IGFyZSBpZGVudGljYWwsIHNhdmUgdGhhdCB0aGV5IHRha2UgYW5kCityZXR1cm4gPGNvZGU+ZmxvYXQ8L2NvZGU+IHZhbHVlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIHNpbmUgb3IgY29zaW5lIG9mIDx2YXI+eDwvdmFyPiBpcyByZXR1cm5lZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnNpbjwvY29kZT4gYW5kIDxjb2RlPmNvczwvY29kZT4gYXJlIEFOU0kgQy4gCis8Y29kZT5zaW5mPC9jb2RlPiBhbmQgPGNvZGU+Y29zZjwvY29kZT4gYXJlIGV4dGVuc2lvbnMuCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc2luaC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc2luaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDZhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9zaW5oLmh0bWwKQEAgLTAsMCArMSw2OSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c2luaCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic2luLmh0bWwjc2luIiB0aXRsZT0ic2luIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ic3FydC5odG1sI3NxcnQiIHRpdGxlPSJzcXJ0Ij4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzaW5oIj48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InNxcnQuaHRtbCNzcXJ0Ij5zcXJ0PC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic2luLmh0bWwjc2luIj5zaW48L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNTMgPGNvZGU+c2luaDwvY29kZT4sIDxjb2RlPnNpbmhmPC9jb2RlPiZtZGFzaDtoeXBlcmJvbGljIHNpbmU8L2gzPgorCis8cD48YSBuYW1lPSJpbmRleC1zaW5oLTE0NCI+PC9hPjxhIG5hbWU9ImluZGV4LXNpbmhmLTE0NSI+PC9hPjxzdHJvbmc+U3lub3BzaXM8L3N0cm9uZz4KKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgI2luY2x1ZGUgJmx0O21hdGguaCZndDsKKyAgICAgZG91YmxlIHNpbmgoZG91YmxlIDx2YXI+eDwvdmFyPik7CisgICAgIGZsb2F0ICBzaW5oZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKzxjb2RlPnNpbmg8L2NvZGU+IGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgdGhlIGFyZ3VtZW50IDx2YXI+eDwvdmFyPi4gCitBbmdsZXMgYXJlIHNwZWNpZmllZCBpbiByYWRpYW5zLiAgIDxjb2RlPnNpbmg8L2NvZGU+KDx2YXI+eDwvdmFyPikgaXMgZGVmaW5lZCBhcworPHByZSBjbGFzcz0ic21hbGxleGFtcGxlIj4gICAgICAoZXhwKDx2YXI+eDwvdmFyPikgLSBleHAoLTx2YXI+eDwvdmFyPikpLzIKKzwvcHJlPgorICAgPHA+PGNvZGU+c2luaGY8L2NvZGU+IGlzIGlkZW50aWNhbCwgc2F2ZSB0aGF0IGl0IHRha2VzIGFuZCByZXR1cm5zIDxjb2RlPmZsb2F0PC9jb2RlPiB2YWx1ZXMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSBoeXBlcmJvbGljIHNpbmUgb2YgPHZhcj54PC92YXI+IGlzIHJldHVybmVkLgorCisgICA8cD5XaGVuIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyB0b28gbGFyZ2UgdG8gYmUgcmVwcmVzZW50YWJsZSAoYW4KK292ZXJmbG93KSwgIDxjb2RlPnNpbmg8L2NvZGU+IHJldHVybnMgPGNvZGU+SFVHRV9WQUw8L2NvZGU+IHdpdGggdGhlCithcHByb3ByaWF0ZSBzaWduLCBhbmQgc2V0cyB0aGUgZ2xvYmFsIHZhbHVlIDxjb2RlPmVycm5vPC9jb2RlPiB0bworPGNvZGU+RVJBTkdFPC9jb2RlPi4KKworICAgPHA+WW91IGNhbiBtb2RpZnkgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIDxjb2RlPm1hdGhlcnI8L2NvZGU+LgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorPGNvZGU+c2luaDwvY29kZT4gaXMgQU5TSSBDLiAKKzxjb2RlPnNpbmhmPC9jb2RlPiBpcyBhbiBleHRlbnNpb24uCisKKyAgIDxwPjxicj4KKworICAgPC9ib2R5PjwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc3FydC5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvc3FydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZDg4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC9zcXJ0Lmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+Cis8dGl0bGU+c3FydCAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic2luaC5odG1sI3NpbmgiIHRpdGxlPSJzaW5oIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idGFuLmh0bWwjdGFuIiB0aXRsZT0idGFuIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJzcXJ0Ij48L2E+Cis8cD4KK05leHQ6Jm5ic3A7PGEgcmVsPSJuZXh0IiBhY2Nlc3NrZXk9Im4iIGhyZWY9InRhbi5odG1sI3RhbiI+dGFuPC9hPiwKK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0ic2luaC5odG1sI3NpbmgiPnNpbmg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNTQgPGNvZGU+c3FydDwvY29kZT4sIDxjb2RlPnNxcnRmPC9jb2RlPiZtZGFzaDtwb3NpdGl2ZSBzcXVhcmUgcm9vdDwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXNxcnQtMTQ2Ij48L2E+PGEgbmFtZT0iaW5kZXgtc3FydGYtMTQ3Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgc3FydChkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgIHNxcnRmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+c3FydDwvY29kZT4gY29tcHV0ZXMgdGhlIHBvc2l0aXZlIHNxdWFyZSByb290IG9mIHRoZSBhcmd1bWVudC4gCitZb3UgY2FuIG1vZGlmeSBlcnJvciBoYW5kbGluZyBmb3IgdGhpcyBmdW5jdGlvbiB3aXRoCis8Y29kZT5tYXRoZXJyPC9jb2RlPi4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorT24gc3VjY2VzcywgdGhlIHNxdWFyZSByb290IGlzIHJldHVybmVkLiBJZiA8dmFyPng8L3Zhcj4gaXMgcmVhbCBhbmQKK3Bvc2l0aXZlLCB0aGVuIHRoZSByZXN1bHQgaXMgcG9zaXRpdmUuICBJZiA8dmFyPng8L3Zhcj4gaXMgcmVhbCBhbmQKK25lZ2F0aXZlLCB0aGUgZ2xvYmFsIHZhbHVlIDxjb2RlPmVycm5vPC9jb2RlPiBpcyBzZXQgdG8gPGNvZGU+RURPTTwvY29kZT4gKGRvbWFpbiBlcnJvcikuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT5zcXJ0PC9jb2RlPiBpcyBBTlNJIEMuICA8Y29kZT5zcXJ0ZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3Rhbi5odG1sIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvdGFuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkYjBkZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3Rhbi5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnRhbiAtIFVudGl0bGVkPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4KKzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJVbnRpdGxlZCI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9Im1ha2VpbmZvIDQuMTMiPgorPGxpbmsgdGl0bGU9IlRvcCIgcmVsPSJzdGFydCIgaHJlZj0iaW5kZXguaHRtbCNUb3AiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iTWF0aC5odG1sI01hdGgiIHRpdGxlPSJNYXRoIj4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ic3FydC5odG1sI3NxcnQiIHRpdGxlPSJzcXJ0Ij4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0idGFuaC5odG1sI3RhbmgiIHRpdGxlPSJ0YW5oIj4KKzxsaW5rIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIgcmVsPSJnZW5lcmF0b3ItaG9tZSIgdGl0bGU9IlRleGluZm8gSG9tZXBhZ2UiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwhLS0KKyAgcHJlLmRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLmZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0IH0KKyAgcHJlLnNtYWxsZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsZXhhbXBsZSB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgcHJlLnNtYWxsbGlzcCAgICB7IGZvbnQtc2l6ZTpzbWFsbGVyIH0KKyAgc3Bhbi5zYyAgICB7IGZvbnQtdmFyaWFudDpzbWFsbC1jYXBzIH0KKyAgc3Bhbi5yb21hbiB7IGZvbnQtZmFtaWx5OnNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCisgIHNwYW4uc2Fuc3NlcmlmIHsgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorLS0+PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0ibm9kZSI+Cis8YSBuYW1lPSJ0YW4iPjwvYT4KKzxwPgorTmV4dDombmJzcDs8YSByZWw9Im5leHQiIGFjY2Vzc2tleT0ibiIgaHJlZj0idGFuaC5odG1sI3RhbmgiPnRhbmg8L2E+LAorUHJldmlvdXM6Jm5ic3A7PGEgcmVsPSJwcmV2aW91cyIgYWNjZXNza2V5PSJwIiBocmVmPSJzcXJ0Lmh0bWwjc3FydCI+c3FydDwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS41NSA8Y29kZT50YW48L2NvZGU+LCA8Y29kZT50YW5mPC9jb2RlPiZtZGFzaDt0YW5nZW50PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdGFuLTE0OCI+PC9hPjxhIG5hbWU9ImluZGV4LXRhbmYtMTQ5Ij48L2E+PHN0cm9uZz5TeW5vcHNpczwvc3Ryb25nPgorPHByZSBjbGFzcz0iZXhhbXBsZSI+ICAgICAjaW5jbHVkZSAmbHQ7bWF0aC5oJmd0OworICAgICBkb3VibGUgdGFuKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCB0YW5mKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorPGNvZGU+dGFuPC9jb2RlPiBjb21wdXRlcyB0aGUgdGFuZ2VudCBvZiB0aGUgYXJndW1lbnQgPHZhcj54PC92YXI+LiAKK0FuZ2xlcyBhcmUgc3BlY2lmaWVkIGluIHJhZGlhbnMuCisKKyAgIDxwPjxjb2RlPnRhbmY8L2NvZGU+IGlzIGlkZW50aWNhbCwgc2F2ZSB0aGF0IGl0IHRha2VzIGFuZCByZXR1cm5zIDxjb2RlPmZsb2F0PC9jb2RlPiB2YWx1ZXMuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UmV0dXJuczwvc3Ryb25nPjxicj4KK1RoZSB0YW5nZW50IG9mIDx2YXI+eDwvdmFyPiBpcyByZXR1cm5lZC4KKworICAgPHA+PGJyPgorPHN0cm9uZz5Qb3J0YWJpbGl0eTwvc3Ryb25nPjxicj4KKzxjb2RlPnRhbjwvY29kZT4gaXMgQU5TSS4gPGNvZGU+dGFuZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3RhbmguaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3RhbmguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmUwNTYzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvdGFuaC5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnRhbmggLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9InRhbi5odG1sI3RhbiIgdGl0bGU9InRhbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InRydW5jLmh0bWwjdHJ1bmMiIHRpdGxlPSJ0cnVuYyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idGFuaCI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJ0cnVuYy5odG1sI3RydW5jIj50cnVuYzwvYT4sCitQcmV2aW91czombmJzcDs8YSByZWw9InByZXZpb3VzIiBhY2Nlc3NrZXk9InAiIGhyZWY9InRhbi5odG1sI3RhbiI+dGFuPC9hPiwKK1VwOiZuYnNwOzxhIHJlbD0idXAiIGFjY2Vzc2tleT0idSIgaHJlZj0iTWF0aC5odG1sI01hdGgiPk1hdGg8L2E+Cis8aHI+Cis8L2Rpdj4KKworPGgzIGNsYXNzPSJzZWN0aW9uIj4xLjU2IDxjb2RlPnRhbmg8L2NvZGU+LCA8Y29kZT50YW5oZjwvY29kZT4mbWRhc2g7aHlwZXJib2xpYyB0YW5nZW50PC9oMz4KKworPHA+PGEgbmFtZT0iaW5kZXgtdGFuaC0xNTAiPjwvYT48YSBuYW1lPSJpbmRleC10YW5oZi0xNTEiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSB0YW5oKGRvdWJsZSA8dmFyPng8L3Zhcj4pOworICAgICBmbG9hdCB0YW5oZihmbG9hdCA8dmFyPng8L3Zhcj4pOworICAgICAKKzwvcHJlPgorICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPjxicj4KKworICAgPHA+PGNvZGU+dGFuaDwvY29kZT4gY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZgordGhlIGFyZ3VtZW50IDx2YXI+eDwvdmFyPi4gIEFuZ2xlcyBhcmUgc3BlY2lmaWVkIGluIHJhZGlhbnMuCisKKyAgIDxwPjxjb2RlPnRhbmgoPC9jb2RlPjx2YXI+eDwvdmFyPjxjb2RlPik8L2NvZGU+IGlzIGRlZmluZWQgYXMKKzxwcmUgY2xhc3M9InNtYWxsZXhhbXBsZSI+ICAgICAgc2luaCg8dmFyPng8L3Zhcj4pL2Nvc2goPHZhcj54PC92YXI+KQorPC9wcmU+CisgICA8cD48Y29kZT50YW5oZjwvY29kZT4gaXMgaWRlbnRpY2FsLCBzYXZlIHRoYXQgaXQgdGFrZXMgYW5kIHJldHVybnMgPGNvZGU+ZmxvYXQ8L2NvZGU+IHZhbHVlcy4KKworICAgPHA+PGJyPgorPHN0cm9uZz5SZXR1cm5zPC9zdHJvbmc+PGJyPgorVGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiA8dmFyPng8L3Zhcj4gaXMgcmV0dXJuZWQuCisKKyAgIDxwPjxicj4KKzxzdHJvbmc+UG9ydGFiaWxpdHk8L3N0cm9uZz48YnI+Cis8Y29kZT50YW5oPC9jb2RlPiBpcyBBTlNJIEMuICA8Y29kZT50YW5oZjwvY29kZT4gaXMgYW4gZXh0ZW5zaW9uLgorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3RydW5jLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC90cnVuYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YzZlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0uaHRtbC90cnVuYy5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnRydW5jIC0gVW50aXRsZWQ8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPgorPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlVudGl0bGVkIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0ibWFrZWluZm8gNC4xMyI+Cis8bGluayB0aXRsZT0iVG9wIiByZWw9InN0YXJ0IiBocmVmPSJpbmRleC5odG1sI1RvcCI+Cis8bGluayByZWw9InVwIiBocmVmPSJNYXRoLmh0bWwjTWF0aCIgdGl0bGU9Ik1hdGgiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJ0YW5oLmh0bWwjdGFuaCIgdGl0bGU9InRhbmgiPgorPGxpbmsgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8vIiByZWw9ImdlbmVyYXRvci1ob21lIiB0aXRsZT0iVGV4aW5mbyBIb21lcGFnZSI+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PCEtLQorICBwcmUuZGlzcGxheSB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuZm9ybWF0ICB7IGZvbnQtZmFtaWx5OmluaGVyaXQgfQorICBwcmUuc21hbGxkaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxmb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdDsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxleGFtcGxlIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBwcmUuc21hbGxsaXNwICAgIHsgZm9udC1zaXplOnNtYWxsZXIgfQorICBzcGFuLnNjICAgIHsgZm9udC12YXJpYW50OnNtYWxsLWNhcHMgfQorICBzcGFuLnJvbWFuIHsgZm9udC1mYW1pbHk6c2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKyAgc3Bhbi5zYW5zc2VyaWYgeyBmb250LWZhbWlseTpzYW5zLXNlcmlmOyBmb250LXdlaWdodDpub3JtYWw7IH0gCistLT48L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJub2RlIj4KKzxhIG5hbWU9InRydW5jIj48L2E+Cis8cD4KK1ByZXZpb3VzOiZuYnNwOzxhIHJlbD0icHJldmlvdXMiIGFjY2Vzc2tleT0icCIgaHJlZj0idGFuaC5odG1sI3RhbmgiPnRhbmg8L2E+LAorVXA6Jm5ic3A7PGEgcmVsPSJ1cCIgYWNjZXNza2V5PSJ1IiBocmVmPSJNYXRoLmh0bWwjTWF0aCI+TWF0aDwvYT4KKzxocj4KKzwvZGl2PgorCis8aDMgY2xhc3M9InNlY3Rpb24iPjEuNTcgPGNvZGU+dHJ1bmM8L2NvZGU+LCA8Y29kZT50cnVuY2Y8L2NvZGU+Jm5kYXNoO3JvdW5kIHRvIGludGVnZXIsIHRvd2FyZHMgemVybzwvaDM+CisKKzxwPjxhIG5hbWU9ImluZGV4LXRydW5jLTE1MiI+PC9hPjxhIG5hbWU9ImluZGV4LXRydW5jZi0xNTMiPjwvYT48c3Ryb25nPlN5bm9wc2lzPC9zdHJvbmc+Cis8cHJlIGNsYXNzPSJleGFtcGxlIj4gICAgICNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7CisgICAgIGRvdWJsZSB0cnVuYyhkb3VibGUgPHZhcj54PC92YXI+KTsKKyAgICAgZmxvYXQgdHJ1bmNmKGZsb2F0IDx2YXI+eDwvdmFyPik7CisgICAgIAorPC9wcmU+CisgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PGJyPgorVGhlIDxjb2RlPnRydW5jPC9jb2RlPiBmdW5jdGlvbnMgcm91bmQgdGhlaXIgYXJndW1lbnQgdG8gdGhlIGludGVnZXIgdmFsdWUsIGluCitmbG9hdGluZyBmb3JtYXQsIG5lYXJlc3QgdG8gYnV0IG5vIGxhcmdlciBpbiBtYWduaXR1ZGUgdGhhbiB0aGUKK2FyZ3VtZW50LCByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHJvdW5kaW5nIGRpcmVjdGlvbi4gIChXaGlsZSB0aGUKKyJpbmV4YWN0IiBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gYmVoYXZpb3IgaXMgdW5zcGVjaWZpZWQgYnkgdGhlIEMKK3N0YW5kYXJkLCB0aGUgPGNvZGU+dHJ1bmM8L2NvZGU+IGZ1bmN0aW9ucyBhcmUgd3JpdHRlbiBzbyB0aGF0ICJpbmV4YWN0IiBpcyBub3QKK3JhaXNlZCBpZiB0aGUgcmVzdWx0IGRvZXMgbm90IGVxdWFsIHRoZSBhcmd1bWVudCwgd2hpY2ggYmVoYXZpb3IgaXMgYXMKK3JlY29tbWVuZGVkIGJ5IElFRUUgNzU0IGZvciBpdHMgcmVsYXRlZCBmdW5jdGlvbnMuKQorCisgICA8cD48YnI+Cis8c3Ryb25nPlJldHVybnM8L3N0cm9uZz48YnI+Cis8dmFyPng8L3Zhcj4gdHJ1bmNhdGVkIHRvIGFuIGludGVncmFsIHZhbHVlLgorCisgICA8cD48YnI+Cis8c3Ryb25nPlBvcnRhYmlsaXR5PC9zdHJvbmc+PGJyPgorQU5TSSBDLCBQT1NJWAorCisgICA8cD48YnI+CisKKyAgIDwvYm9keT48L2h0bWw+CisKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3ZlcnNpb24uaHRtbCBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9uZXdsaWIvbGlibS5odG1sL3ZlcnNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTI1MTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLmh0bWwvdmVyc2lvbi5odG1sCkBAIC0wLDAgKzEsOTcgQEAKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorPHRpdGxlPnZlcnNpb24gLSBVbnRpdGxlZDwvdGl0bGU+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+Cis8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVW50aXRsZWQiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJtYWtlaW5mbyA0LjEzIj4KKzxsaW5rIHRpdGxlPSJUb3AiIHJlbD0ic3RhcnQiIGhyZWY9ImluZGV4Lmh0bWwjVG9wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIiB0aXRsZT0iTWF0aCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImFjb3MuaHRtbCNhY29zIiB0aXRsZT0iYWNvcyI+Cis8bGluayBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iIHJlbD0iZ2VuZXJhdG9yLWhvbWUiIHRpdGxlPSJUZXhpbmZvIEhvbWVwYWdlIj4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgIHByZS5kaXNwbGF5IHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5mb3JtYXQgIHsgZm9udC1mYW1pbHk6aW5oZXJpdCB9CisgIHByZS5zbWFsbGRpc3BsYXkgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGZvcm1hdCAgeyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGV4YW1wbGUgeyBmb250LXNpemU6c21hbGxlciB9CisgIHByZS5zbWFsbGxpc3AgICAgeyBmb250LXNpemU6c21hbGxlciB9CisgIHNwYW4uc2MgICAgeyBmb250LXZhcmlhbnQ6c21hbGwtY2FwcyB9CisgIHNwYW4ucm9tYW4geyBmb250LWZhbWlseTpzZXJpZjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB9IAorICBzcGFuLnNhbnNzZXJpZiB7IGZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgfSAKKy0tPjwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9Im5vZGUiPgorPGEgbmFtZT0idmVyc2lvbiI+PC9hPgorPHA+CitOZXh0OiZuYnNwOzxhIHJlbD0ibmV4dCIgYWNjZXNza2V5PSJuIiBocmVmPSJhY29zLmh0bWwjYWNvcyI+YWNvczwvYT4sCitVcDombmJzcDs8YSByZWw9InVwIiBhY2Nlc3NrZXk9InUiIGhyZWY9Ik1hdGguaHRtbCNNYXRoIj5NYXRoPC9hPgorPGhyPgorPC9kaXY+CisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4xIEVycm9yIEhhbmRsaW5nPC9oMz4KKworPHA+VGhlcmUgYXJlIGZvdXIgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBtYXRoIGxpYnJhcnkgcm91dGluZXM6IElFRUUsCitQT1NJWCwgWC9PcGVuLCBvciBTVklELiAgVGhlIHZlcnNpb24gbWF5IGJlIHNlbGVjdGVkIGF0IHJ1bnRpbWUgYnkKK3NldHRpbmcgdGhlIGdsb2JhbCB2YXJpYWJsZSA8Y29kZT5fTElCX1ZFUlNJT048L2NvZGU+LCBkZWZpbmVkIGluCis8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bWF0aC5oPC9zcGFuPjwvc2FtcD4uICBJdCBtYXkgYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBkZWZpbmVkCitpbiA8c2FtcD48c3BhbiBjbGFzcz0iZmlsZSI+bWF0aC5oPC9zcGFuPjwvc2FtcD46IDxjb2RlPl9JRUVFXzwvY29kZT4sIDxjb2RlPl9QT1NJWF88L2NvZGU+LCA8Y29kZT5fWE9QRU5fPC9jb2RlPiwgb3IKKzxjb2RlPl9TVklEXzwvY29kZT4uICBUaGUgPGNvZGU+X0xJQl9WRVJTSU9OPC9jb2RlPiB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWMgdG8gYW55Cit0aHJlYWQsIGFuZCBjaGFuZ2luZyBpdCB3aWxsIGFmZmVjdCBhbGwgdGhyZWFkcy4KKworICAgPHA+VGhlIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5IGRpZmZlciBvbmx5IGluIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQuCisKKyAgIDxwPkluIElFRUUgbW9kZSwgdGhlIDxjb2RlPm1hdGhlcnI8L2NvZGU+IGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZCwgbm8gd2FybmluZworbWVzc2FnZXMgYXJlIHByaW50ZWQsIGFuZCA8Y29kZT5lcnJubzwvY29kZT4gaXMgbmV2ZXIgc2V0LgorCisgICA8cD5JbiBQT1NJWCBtb2RlLCA8Y29kZT5lcnJubzwvY29kZT4gaXMgc2V0IGNvcnJlY3RseSwgYnV0IHRoZSA8Y29kZT5tYXRoZXJyPC9jb2RlPgorZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkIGFuZCBubyB3YXJuaW5nIG1lc3NhZ2VzIGFyZSBwcmludGVkLgorCisgICA8cD5JbiBYL09wZW4gbW9kZSwgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCBjb3JyZWN0bHksIGFuZCA8Y29kZT5tYXRoZXJyPC9jb2RlPiBpcworY2FsbGVkLCBidXQgd2FybmluZyBtZXNzYWdlIGFyZSBub3QgcHJpbnRlZC4KKworICAgPHA+SW4gU1ZJRCBtb2RlLCBmdW5jdGlvbnMgd2hpY2ggb3ZlcmZsb3cgcmV0dXJuIDMuNDAyODIzNDY2Mzg1Mjg4NjBlKzM4LAordGhlIG1heGltdW0gc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB2YWx1ZSwgcmF0aGVyIHRoYW4gaW5maW5pdHkuIAorQWxzbywgPGNvZGU+ZXJybm88L2NvZGU+IGlzIHNldCBjb3JyZWN0bHksIDxjb2RlPm1hdGhlcnI8L2NvZGU+IGlzIGNhbGxlZCwgYW5kLCBpZgorPGNvZGU+bWF0aGVycjwvY29kZT4gcmV0dXJucyAwLCB3YXJuaW5nIG1lc3NhZ2VzIGFyZSBwcmludGVkIGZvciBzb21lIGVycm9ycy4gCitGb3IgZXhhbXBsZSwgYnkgZGVmYXVsdCAmbHNxdW87PHNhbXA+PHNwYW4gY2xhc3M9InNhbXAiPmxvZygtMS4wKTwvc3Bhbj48L3NhbXA+JnJzcXVvOyB3cml0ZXMgdGhpcyBtZXNzYWdlIG9uIHN0YW5kYXJkCitlcnJvciBvdXRwdXQ6CisKKzxwcmUgY2xhc3M9ImV4YW1wbGUiPiAgICAgbG9nOiBET01BSU4gZXJyb3IKKzwvcHJlPgorICAgPHA+VGhlIGxpYnJhcnkgaXMgc2V0IHRvIFgvT3BlbiBtb2RlIGJ5IGRlZmF1bHQuCisKKyAgIDxwPlRoZSBhZm9yZW1lbnRpb25lZCBlcnJvciByZXBvcnRpbmcgaXMgdGhlIHN1cHBvcnRlZCBOZXdsaWIgbGlibSBlcnJvcgoraGFuZGxpbmcgbWV0aG9kLiAgSG93ZXZlciwgdGhlIG1ham9yaXR5IG9mIHRoZSBmdW5jdGlvbnMgYXJlIHdyaXR0ZW4KK3NvIGFzIHRvIHByb2R1Y2UgdGhlIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbnMgKGUuZy4gImludmFsaWQiLAorImRpdmlkZS1ieS16ZXJvIikgYXMgcmVxdWlyZWQgYnkgdGhlIEMgYW5kIFBPU0lYIHN0YW5kYXJkcywgZm9yCitmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdXBwb3J0IHRoZW0uICBOZXdsaWIgZG9lcyBub3QgcHJvdmlkZQordGhlIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiBhY2Nlc3Mgcm91dGluZXMgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmRzCitmb3IgZmVudi5oLCB0aG91Z2gsIHdoaWNoIGlzIHdoeSB0aGV5IGFyZSBjb25zaWRlcmVkIHVuc3VwcG9ydGVkLiAgSXQgaXMKK21lbnRpb25lZCBpbiBjYXNlIHlvdSBoYXZlIHNlcGFyYXRlbHktcHJvdmlkZWQgYWNjZXNzIHJvdXRpbmVzIHNvIHRoYXQKK3lvdSBhcmUgYXdhcmUgdGhhdCB0aGV5IGNhbiBiZSBjYXVzZWQuCisKKzxoMyBjbGFzcz0ic2VjdGlvbiI+MS4yIFN0YW5kYXJkcyBDb21wbGlhbmNlIEFuZCBQb3J0YWJpbGl0eTwvaDM+CisKKzxwPk1vc3Qgb2YgdGhlIGluZGl2aWR1YWwgZnVuY3Rpb24gZGVzY3JpcHRpb25zIGRlc2NyaWJlIHRoZSBzdGFuZGFyZHMgdG8gd2hpY2gKK2VhY2ggZnVuY3Rpb24gY29tcGxpZXMuICBIb3dldmVyLCB0aGVzZSBkZXNjcmlwdGlvbnMgYXJlIG1vc3RseSBvdXQgb2YgZGF0ZSwKK2hhdmluZyBiZWVuIHdyaXR0ZW4gYmVmb3JlIEM5OSB3YXMgcmVsZWFzZWQuICBPbmUgb2YgdGhlc2UgZGF5cyB3ZSdsbCBnZXQKK2Fyb3VuZCB0byB1cGRhdGluZyB0aGUgcmVzdCBvZiB0aGVtLiAgKElmIHlvdSdkIGxpa2UgdG8gaGVscCwgcGxlYXNlIGxldCB1cwora25vdy4pCisKKyAgIDxwPiZsZHF1bztDOTkmcmRxdW87IHJlZmVycyB0byBJU08vSUVDIDk4OTk6MTk5OSwgJmxkcXVvO1Byb2dyYW1taW5nIGxhbmd1YWdlcyZuZGFzaDtDJnJkcXVvOy4gCismbGRxdW87UE9TSVgmcmRxdW87IHJlZmVycyB0byBJRUVFIFN0YW5kYXJkIDEwMDMuMS4gIFBPU0lYJnJlZzsgaXMgYQorcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgVGhlIElFRUUuCisKKzwhLS0gVG8gc29ydCB0aGUgaW5jbHVkZSBsaXN0IGVhc2lseSwga2VlcCB0aGUgaW5kZW50YXRpb24gcmlnaHQgYmVjYXVzZSB3YW50IHRvIC0tPgorPCEtLSBza2lwIHRoZSBzX3x3XyBhdCB0aGUgc3RhcnQgb2YgbW9zdC1idXQgbm90IGFsbC1vZiB0aGUgZmlsZSBuYW1lcy4gLS0+Cis8IS0tIChlLmcuLCBpc2dyZWF0ZXIuZGVmIGRvZXMgbm90IGhhdmUgYSBsZWFkaW5nIHMgbm9yIHcuKSAgVGhlbiwgc29ydCAtLT4KKzwhLS0gYmFzZWQgb24gdGhlIGNvbHVtbi4gIEZvciBleGFtcGxlOiAgInNvcnQgLXRAIC1rMy4xNyIgLS0+Cis8IS0tIEEgZmV3IGhhbmQtZWRpdHMgbWlnaHQgYmUgYXBwcm9wcmlhdGUgYWZ0ZXIgYSBzb3J0LCBhbHRob3VnaCBub3QgbmVjZXNzYXJ5IC0tPgorPCEtLSBhbmQgYXJlIGEgbnVpc2FuY2UgYXMgb3VnaHQgdG8gYmUga2VwdCBpbiBzeW5jIHdpdGggbWVudSBsaXN0IGFib3ZlOiAtLT4KKzwhLS0gYXRhbjIgYWZ0ZXIgYXRhbiwgZXhwMiBhZnRlciBleHAsIGxvZyBmaXJzdCBpbiBsb2cgbGlzdCwgYW5kIHdfajAgdG8gcGxhY2UgLS0+Cis8IS0tIHRvIHJlZmxlY3QgZnVuY3Rpb24gbmFtZSBvZiBCZXNzZWwgKGFzIG9wcG9zZWQgdG8gajsgZS5nLiBhZnRlciBhdGFuaCwgLS0+Cis8IS0tIGJlZm9yZSBjYnJ0KS4gLS0+CisgICA8L2JvZHk+PC9odG1sPgorCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvbmV3bGliL2xpYm0ucGRmIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2YwMjAwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9odG1sL25ld2xpYi9saWJtLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvcGtnLWNvbmZpZy9wa2ctY29uZmlnLWd1aWRlLmh0bWwgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2h0bWwvcGtnLWNvbmZpZy9wa2ctY29uZmlnLWd1aWRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2YzcyZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaHRtbC9wa2ctY29uZmlnL3BrZy1jb25maWctZ3VpZGUuaHRtbApAQCAtMCwwICsxLDQyMCBAQAorPCEtLQorQ29weXJpZ2h0IChDKSAyMDEwICBEYW4gTmljaG9sc29uLgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCitvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorLS0+CisKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCisgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgbGFuZz0iZW4iIHhtbDpsYW5nPSJlbiI+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgcHJlIHsgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsgcGFkZGluZzogMC40Y207IH0KKyAgPC9zdHlsZT4KKworICA8dGl0bGU+R3VpZGUgdG8gcGtnLWNvbmZpZzwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICA8aDE+PGEgbmFtZT0idG9wIj5HdWlkZSB0byBwa2ctY29uZmlnPC9hPjwvaDE+CisKKyAgPGgzPkRhbiBOaWNob2xzb248L2gzPgorCisgIDx1bD4KKyAgICA8bGk+PGEgaHJlZj0iI292ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSIjd2h5Ij5XaHk/PC9hPjwvbGk+CisgICAgPGxpPjxhIGhyZWY9IiNjb25jZXB0cyI+Q29uY2VwdHM8L2E+PC9saT4KKyAgICA8bGk+PGEgaHJlZj0iI3dyaXRpbmciPldyaXRpbmcgcGtnLWNvbmZpZyBmaWxlczwvYT48L2xpPgorICAgIDxsaT48YSBocmVmPSIjdXNpbmciPlVzaW5nIHBrZy1jb25maWcgZmlsZXM8L2E+PC9saT4KKyAgICA8IS0tPGxpPjxhIGhyZWY9IiNleGFtcGxlcyI+RXhhbXBsZXM8L2E+PC9saT4tLT4KKyAgICA8bGk+PGEgaHJlZj0iI2ZhcSI+RnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnM8L2E+PC9saT4KKyAgPC91bD4KKworICA8aDI+PGEgbmFtZT0ib3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvaDI+CisKKyAgPHA+VGhpcyBkb2N1bWVudCBhaW1zIHRvIGdpdmUgYW4gb3ZlcnZpZXcgdG8gdXNpbmcgdGhlIDx0dD5wa2ctY29uZmlnPC90dD4KKyAgdG9vbCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBib3RoIGEgdXNlciBhbmQgYSBkZXZlbG9wZXIuIEl0IHJldmlld3MgdGhlCisgIGNvbmNlcHRzIGJlaGluZCA8dHQ+cGtnLWNvbmZpZzwvdHQ+LCBob3cgdG8gd3JpdGUgPHR0PnBrZy1jb25maWc8L3R0PiBmaWxlcworICB0byBzdXBwb3J0IHlvdXIgcHJvamVjdCwgYW5kIGhvdyB0byB1c2UgPHR0PnBrZy1jb25maWc8L3R0PiB0byBpbnRlZ3JhdGUKKyAgd2l0aCAzcmQgcGFydHkgcHJvamVjdHMuPC9wPgorCisgIDxwPk1vcmUgaW5mb3JtYXRpb24gb24gPHR0PnBrZy1jb25maWc8L3R0PiBjYW4gYmUgZm91bmQgYXQgdGhlCisgIDxhIGhyZWY9Imh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8iPndlYnNpdGU8L2E+IGFuZCBpbiB0aGUKKyAgPHR0PnBrZy1jb25maWcoMSk8L3R0PiBtYW51YWwgcGFnZS48L3A+CisKKyAgPHA+VGhpcyBkb2N1bWVudCBhc3N1bWVzIHVzYWdlIG9mIDx0dD5wa2ctY29uZmlnPC90dD4gb24gYSBVbml4LWxpa2UKKyAgb3BlcmF0aW5nIHN5c3RlbSBzdWNoIGFzIExpbnV4LiBTb21lIG9mIHRoZSBkZXRhaWxzIG1heSBiZSBkaWZmZXJlbnQgb24KKyAgb3RoZXIgcGxhdGZvcm1zLjwvcD4KKworICA8aDI+PGEgbmFtZT0id2h5Ij5XaHk/PC9hPjwvaDI+CisKKyAgPHA+TW9kZXJuIGNvbXB1dGVyIHN5c3RlbXMgdXNlIG1hbnkgbGF5ZXJlZCBjb21wb25lbnRzIHRvIHByb3ZpZGUKKyAgYXBwbGljYXRpb25zIHRvIHRoZSB1c2VyLiBPbmUgb2YgdGhlIGRpZmZpY3VsdGllcyBpbiBhc3NlbWJsaW5nIHRoZXNlIHBhcnRzCisgIGlzIHByb3Blcmx5IGludGVncmF0aW5nIHRoZW0uIDx0dD5wa2ctY29uZmlnPC90dD4gY29sbGVjdHMgbWV0YWRhdGEgYWJvdXQKKyAgdGhlIGluc3RhbGxlZCBsaWJyYXJpZXMgb24gdGhlIHN5c3RlbSBhbmQgZWFzaWx5IHByb3ZpZGVzIGl0IHRvIHRoZSB1c2VyLgorICA8L3A+CisKKyAgPHA+V2l0aG91dCBhIG1ldGFkYXRhIHN5c3RlbSBzdWNoIGFzIDx0dD5wa2ctY29uZmlnPC90dD4sIGl0IGNhbiBiZSB2ZXJ5CisgIGRpZmZpY3VsdCB0byBsb2NhdGUgYW5kIG9idGFpbiBkZXRhaWxzIGFib3V0IHRoZSBzZXJ2aWNlcyBwcm92aWRlZCBvbiBhCisgIGdpdmVuIGNvbXB1dGVyLiBGb3IgYSBkZXZlbG9wZXIsIGluc3RhbGxpbmcgPHR0PnBrZy1jb25maWc8L3R0PiBmaWxlcyB3aXRoCisgIHlvdXIgcGFja2FnZSBncmVhdGx5IGVhc2VzIGFkb3B0aW9uIG9mIHlvdXIgQVBJLjwvcD4KKworICA8aDI+PGEgbmFtZT0iY29uY2VwdHMiPkNvbmNlcHRzPC9hPjwvaDI+CisKKyAgPHA+VGhlIHByaW1hcnkgdXNlIG9mIDx0dD5wa2ctY29uZmlnPC90dD4gaXMgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5CisgIGRldGFpbHMgZm9yIGNvbXBpbGluZyBhbmQgbGlua2luZyBhIHByb2dyYW0gdG8gYSBsaWJyYXJ5LiBUaGlzIG1ldGFkYXRhIGlzCisgIHN0b3JlZCBpbiA8dHQ+cGtnLWNvbmZpZzwvdHQ+IGZpbGVzLiBUaGVzZSBmaWxlcyBoYXZlIHRoZSBzdWZmaXgKKyAgPHR0Pi5wYzwvdHQ+IGFuZCByZXNpZGUgaW4gc3BlY2lmaWMgbG9jYXRpb25zIGtub3duIHRvIHRoZQorICA8dHQ+cGtnLWNvbmZpZzwvdHQ+IHRvb2wuIFRoaXMgd2lsbCBiZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgbGF0ZXIuPC9wPgorCisgIDxwPlRoZSBmaWxlIGZvcm1hdCBjb250YWlucyBwcmVkZWZpbmVkIG1ldGFkYXRhIGtleXdvcmRzIGFuZCBmcmVlZm9ybQorICB2YXJpYWJsZXMuIEFuIGV4YW1wbGUgbWF5IGJlIGlsbHVzdHJhdGl2ZTo8cD4KKworPHByZT5wcmVmaXg9L3Vzci9sb2NhbAorZXhlY19wcmVmaXg9JHtwcmVmaXh9CitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCitsaWJkaXI9JHtleGVjX3ByZWZpeH0vbGliCisKK05hbWU6IGZvbworRGVzY3JpcHRpb246IFRoZSBmb28gbGlicmFyeQorVmVyc2lvbjogMS4wLjAKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L2ZvbworTGliczogLUwke2xpYmRpcn0gLWxmb288L3ByZT4KKworICA8cD5UaGUga2V5d29yZCBkZWZpbml0aW9ucyBzdWNoIGFzIDx0dD5OYW1lOjwvdHQ+IGJlZ2luIHdpdGggYSBrZXl3b3JkCisgIGZvbGxvd2VkIGJ5IGEgY29sb24gYW5kIHRoZSB2YWx1ZS4gVGhlIHZhcmlhYmxlcyBzdWNoIGFzIDx0dD5wcmVmaXg9PC90dD4KKyAgYXJlIGEgc3RyaW5nIGFuZCB2YWx1ZSBzZXBhcmF0ZWQgYnkgYW4gZXF1YWxzIHNpZ24uIFRoZSBrZXl3b3JkcyBhcmUgZGVmaW5lZAorICBhbmQgZXhwb3J0ZWQgYnkgPHR0PnBrZy1jb25maWc8L3R0Pi4gVGhlIHZhcmlhYmxlcyBhcmUgbm90IG5lY2Vzc2FyeSwgYnV0CisgIGNhbiBiZSB1c2VkIGJ5IHRoZSBrZXl3b3JkIGRlZmluaXRpb25zIGZvciBmbGV4aWJpbGl0eSBvciB0byBzdG9yZSBkYXRhIG5vdAorICBjb3ZlcmVkIGJ5IDx0dD5wa2ctY29uZmlnPC90dD4uPC9wPgorCisgIDxwPkhlcmUgaXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUga2V5d29yZCBmaWVsZHMuIEEgbW9yZSBpbiBkZXB0aAorICBkZXNjcmlwdGlvbiBvZiB0aGVzZSBmaWVsZHMgYW5kIGhvdyB0byB1c2UgdGhlbSBlZmZlY3RpdmVseSB3aWxsIGJlIGdpdmVuIGluCisgIHRoZSA8YSBocmVmPSIjd3JpdGluZyI+V3JpdGluZyBwa2ctY29uZmlnIGZpbGVzPC9hPiBzZWN0aW9uLjwvcD4KKworICA8dWw+CisgICAgPGxpPjxiPk5hbWU8L2I+OiBBIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSBsaWJyYXJ5IG9yIHBhY2thZ2UuIFRoaXMKKyAgICBkb2VzIG5vdCBhZmZlY3QgdXNhZ2Ugb2YgdGhlIDx0dD5wa2ctY29uZmlnPC90dD4gdG9vbCwgd2hpY2ggdXNlcyB0aGUgbmFtZQorICAgIG9mIHRoZSA8dHQ+LnBjPC90dD4gZmlsZS48L2xpPgorCisgICAgPGxpPjxiPkRlc2NyaXB0aW9uPC9iPjogQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGFja2FnZS48L2xpPgorCisgICAgPGxpPjxiPlVSTDwvYj46IEFuIFVSTCB3aGVyZSBwZW9wbGUgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFuZAorICAgIGRvd25sb2FkIHRoZSBwYWNrYWdlLjwvbGk+CisKKyAgICA8bGk+PGI+VmVyc2lvbjwvYj46IEEgc3RyaW5nIHNwZWNpZmljYWxseSBkZWZpbmluZyB0aGUgdmVyc2lvbiBvZiB0aGUKKyAgICBwYWNrYWdlLjwvbGk+CisKKyAgICA8bGk+PGI+UmVxdWlyZXM8L2I+OiBBIGxpc3Qgb2YgcGFja2FnZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLiBUaGUKKyAgICB2ZXJzaW9ucyBvZiB0aGVzZSBwYWNrYWdlcyBtYXkgYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycworICAgID0sICZsdDssICZndDssICZsdDs9IG9yICZndDs9LjwvbGk+CisKKyAgICA8bGk+PGI+UmVxdWlyZXMucHJpdmF0ZTwvYj46IEEgbGlzdCBvZiBwcml2YXRlIHBhY2thZ2VzIHJlcXVpcmVkIGJ5IHRoaXMKKyAgICBwYWNrYWdlIGJ1dCBub3QgZXhwb3NlZCB0byBhcHBsaWNhdGlvbnMuIFRoZSB2ZXJzaW9uIHNwZWNpZmljIHJ1bGVzIGZyb20KKyAgICB0aGUgPHR0PlJlcXVpcmVzPC90dD4gZmllbGQgYWxzbyBhcHBseSBoZXJlLjwvbGk+CisKKyAgICA8bGk+PGI+Q29uZmxpY3RzPC9iPjogQW4gb3B0aW9uYWwgZmllbGQgZGVzY3JpYmluZyBwYWNrYWdlcyB0aGF0IHRoaXMgb25lCisgICAgY29uZmxpY3RzIHdpdGguIFRoZSB2ZXJzaW9uIHNwZWNpZmljIHJ1bGVzIGZyb20gdGhlIDx0dD5SZXF1aXJlczwvdHQ+CisgICAgZmllbGQgYWxzbyBhcHBseSBoZXJlLiBUaGlzIGZpZWxkIGFsc28gdGFrZXMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZQorICAgIHNhbWUgcGFja2FnZS4gRS5nLiwgPHR0PkNvbmZsaWN0czogYmFyIDwgMS4yLjMsIGJhciA+PSAxLjMuMDwvdHQ+LjwvbGk+CisKKyAgICA8bGk+PGI+Q2ZsYWdzPC9iPjogVGhlIGNvbXBpbGVyIGZsYWdzIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZSBhbmQgYW55CisgICAgcmVxdWlyZWQgbGlicmFyaWVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCA8dHQ+cGtnLWNvbmZpZzwvdHQ+LiBJZiB0aGUgcmVxdWlyZWQKKyAgICBsaWJyYXJpZXMgc3VwcG9ydCA8dHQ+cGtnLWNvbmZpZzwvdHQ+LCB0aGV5IHNob3VsZCBiZSBhZGRlZCB0bworICAgIDx0dD5SZXF1aXJlczwvdHQ+IG9yIDx0dD5SZXF1aXJlcy5wcml2YXRlPC90dD4uPC9saT4KKworICAgIDxsaT48Yj5MaWJzPC9iPjogVGhlIGxpbmsgZmxhZ3Mgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlIGFuZCBhbnkgcmVxdWlyZWQKKyAgICBsaWJyYXJpZXMgdGhhdCBkb24ndCBzdXBwb3J0IDx0dD5wa2ctY29uZmlnPC90dD4uIFRoZSBzYW1lIHJ1bGUgYXMKKyAgICA8dHQ+Q2ZsYWdzPC90dD4gYXBwbGllcyBoZXJlLjwvbGk+CisKKyAgICA8bGk+PGI+TGlicy5wcml2YXRlPC9iPjogVGhlIGxpbmsgZmxhZ3MgZm9yIHByaXZhdGUgbGlicmFyaWVzIHJlcXVpcmVkIGJ5CisgICAgdGhpcyBwYWNrYWdlIGJ1dCBub3QgZXhwb3NlZCB0byBhcHBsaWNhdGlvbnMuIFRoZSBzYW1lIHJ1bGUgYXMKKyAgICA8dHQ+Q2ZsYWdzPC90dD4gYXBwbGllcyBoZXJlLjwvbGk+CisgIDwvdWw+CisKKyAgPGgyPjxhIG5hbWU9IndyaXRpbmciPldyaXRpbmcgcGtnLWNvbmZpZyBmaWxlczwvYT48L2gyPgorCisgIDxwPldoZW4gY3JlYXRpbmcgPHR0PnBrZy1jb25maWc8L3R0PiBmaWxlcyBmb3IgYSBwYWNrYWdlLCBpdCBpcyBmaXJzdAorICBuZWNlc3NhcnkgdG8gZGVjaWRlIGhvdyB0aGV5IHdpbGwgYmUgZGlzdHJpYnV0ZWQuIEVhY2ggZmlsZSBpcyBiZXN0IHVzZWQgdG8KKyAgZGVzY3JpYmUgYSBzaW5nbGUgbGlicmFyeSwgc28gZWFjaCBwYWNrYWdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IGFzIG1hbnkKKyAgPHR0PnBrZy1jb25maWc8L3R0PiBmaWxlcyBhcyB0aGV5IGRvIGluc3RhbGxlZCBsaWJyYXJpZXMuPC9wPgorCisgIDxwPlRoZSBwYWNrYWdlIG5hbWUgaXMgZGV0ZXJtaW5lZCB0aHJvdWdoIHRoZSBmaWxlbmFtZSBvZiB0aGUKKyAgPHR0PnBrZy1jb25maWc8L3R0PiBtZXRhZGF0YSBmaWxlLiBUaGlzIGlzIHRoZSBwb3J0aW9uIG9mIHRoZSBmaWxlbmFtZSBwcmlvcgorICB0byB0aGUgPHR0Pi5wYzwvdHQ+IHN1ZmZpeC4gQSBjb21tb24gY2hvaWNlIGlzIHRvIG1hdGNoIHRoZSBsaWJyYXJ5IG5hbWUgdG8KKyAgdGhlIDx0dD4ucGM8L3R0PiBuYW1lLiBGb3IgaW5zdGFuY2UsIGEgcGFja2FnZSBpbnN0YWxsaW5nIDx0dD5saWJmb28uc288L3R0PgorICB3b3VsZCBoYXZlIGEgY29ycmVzcG9uZGluZyA8dHQ+bGliZm9vLnBjPC90dD4gZmlsZSBjb250YWluaW5nIHRoZQorICA8dHQ+cGtnLWNvbmZpZzwvdHQ+IG1ldGFkYXRhLiBUaGlzIGNob2ljZSBpcyBub3QgbmVjZXNzYXJ5OyB0aGUgPHR0Pi5wYzwvdHQ+CisgIGZpbGUgc2hvdWxkIHNpbXBseSBiZSBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB5b3VyIGxpYnJhcnkuIEZvbGxvd2luZyB0aGUKKyAgYWJvdmUgZXhhbXBsZSwgPHR0PmZvby5wYzwvdHQ+IG9yIDx0dD5mb29saWIucGM8L3R0PiB3b3VsZCBwcm9iYWJseSB3b3JrCisgIGp1c3QgYXMgd2VsbC48L3A+CisKKyAgPHA+VGhlIDx0dD5OYW1lPC90dD4sIDx0dD5EZXNjcmlwdGlvbjwvdHQ+IGFuZCA8dHQ+VVJMPC90dD4gZmllbGRzIGFyZQorICBwdXJlbHkgaW5mb3JtYXRpb25hbCBhbmQgc2hvdWxkIGJlIGVhc3kgdG8gZmlsbCBpbi4gVGhlIDx0dD5WZXJzaW9uPC90dD4KKyAgZmllbGQgaXMgYSBiaXQgdHJpY2tpZXIgdG8gZW5zdXJlIHRoYXQgaXQgaXMgdXNhYmxlIGJ5IGNvbnN1bWVycyBvZiB0aGUKKyAgZGF0YS4gPHR0PnBrZy1jb25maWc8L3R0PiB1c2VzIHRoZSBhbGdvcml0aG0gZnJvbQorICA8YSBocmVmPSJodHRwOi8vcnBtLm9yZy8iPlJQTTwvYT4gZm9yIHZlcnNpb24gY29tcGFyaXNvbnMuIFRoaXMgd29ya3MgYmVzdAorICB3aXRoIGEgZG90dGVkIGRlY2ltYWwgbnVtYmVyIHN1Y2ggYXMgPHR0PjEuMi4zPC90dD4gc2luY2UgbGV0dGVycyBjYW4gY2F1c2UKKyAgdW5leHBlY3RlZCByZXN1bHRzLiBUaGUgbnVtYmVyIHNob3VsZCBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgYW5kIGJlCisgIGFzIHNwZWNpZmljIGFzIHBvc3NpYmxlIGluIGRlc2NyaWJpbmcgdGhlIGxpYnJhcnkuIFVzdWFsbHkgaXQncyBzdWZmaWNpZW50CisgIHRvIHVzZSB0aGUgcGFja2FnZSdzIHZlcnNpb24gbnVtYmVyIGhlcmUgc2luY2UgaXQncyBlYXN5IGZvciBjb25zdW1lcnMgdG8KKyAgdHJhY2suPC9wPgorCisgIDxwPkJlZm9yZSBkZXNjcmliaW5nIHRoZSBtb3JlIHVzZWZ1bCBmaWVsZHMsIGl0IHdpbGwgYmUgaGVscGZ1bCB0bworICBkZW1vbnN0cmF0ZSB2YXJpYWJsZSBkZWZpbml0aW9ucy4gVGhlIG1vc3QgY29tbW9uIHVzYWdlIGlzIHRvIGRlZmluZSB0aGUKKyAgaW5zdGFsbGF0aW9uIHBhdGhzIHNvIHRoYXQgdGhleSBkb24ndCBjbHV0dGVyIHRoZSBtZXRhZGF0YSBmaWVsZHMuIFNpbmNlCisgIHRoZSB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHJlY3Vyc2l2ZWx5LCB0aGlzIGlzIHZlcnkgaGVscGZ1bCB3aGVuIHVzZWQgaW4KKyAgY29uanVuY3Rpb24gd2l0aCBhdXRvY29uZiBkZXJpdmVkIHBhdGhzLjwvcD4KKworPHByZT5wcmVmaXg9L3Vzci9sb2NhbAoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9mb288L3ByZT4KKworICA8cD5UaGUgbW9zdCBpbXBvcnRhbnQgPHR0PnBrZy1jb25maWc8L3R0PiBtZXRhZGF0YSBmaWVsZHMgYXJlCisgIDx0dD5SZXF1aXJlczwvdHQ+LCA8dHQ+UmVxdWlyZXMucHJpdmF0ZTwvdHQ+LCA8dHQ+Q2ZsYWdzPC90dD4sIDx0dD5MaWJzPC90dD4KKyAgYW5kIDx0dD5MaWJzLnByaXZhdGU8L3R0Pi4gVGhleSB3aWxsIGRlZmluZSB0aGUgbWV0YWRhdGEgdXNlZCBieSBleHRlcm5hbAorICBwcm9qZWN0cyB0byBjb21waWxlIGFuZCBsaW5rIHdpdGggdGhlIGxpYnJhcnkuPC9wPgorCisgIDxwPjx0dD5SZXF1aXJlczwvdHQ+IGFuZCA8dHQ+UmVxdWlyZXMucHJpdmF0ZTwvdHQ+IGRlZmluZSBvdGhlciBtb2R1bGVzCisgIG5lZWRlZCBieSB0aGUgbGlicmFyeS4gSXQgaXMgdXN1YWxseSBwcmVmZXJyZWQgdG8gdXNlIHRoZSBwcml2YXRlIHZhcmlhbnQgb2YKKyAgPHR0PlJlcXVpcmVzPC90dD4gdG8gYXZvaWQgZXhwb3NpbmcgdW5uZWNlc3NhcnkgbGlicmFyaWVzIHRvIHRoZSBwcm9ncmFtCisgIHRoYXQgaXMgbGlua2luZyB3aXRoIHlvdXIgbGlicmFyeS4gSWYgdGhlIHByb2dyYW0gd2lsbCBub3QgYmUgdXNpbmcgdGhlCisgIHN5bWJvbHMgb2YgdGhlIHJlcXVpcmVkIGxpYnJhcnksIGl0IHNob3VsZCBub3QgYmUgbGlua2luZyBkaXJlY3RseSB0byB0aGF0CisgIGxpYnJhcnkuIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZgorICA8YSBocmVmPSJodHRwOi8vd2lraS5tYW5kcml2YS5jb20vZW4vT3ZlcmxpbmtpbmciPm92ZXJsaW5raW5nPC9hPiBmb3IgYSBtb3JlCisgIHRob3JvdWdoIGV4cGxhbmF0aW9uLjwvcD4KKworICA8cD5TaW5jZSA8dHQ+cGtnLWNvbmZpZzwvdHQ+IGFsd2F5cyBleHBvc2VzIHRoZSBsaW5rIGZsYWdzIG9mIHRoZQorICA8dHQ+UmVxdWlyZXM8L3R0PiBsaWJyYXJpZXMsIHRoZXNlIG1vZHVsZXMgd2lsbCBiZWNvbWUgZGlyZWN0IGRlcGVuZGVuY2llcworICBvZiB0aGUgcHJvZ3JhbS4gT24gdGhlIG90aGVyIGhhbmQsIGxpYnJhcmllcyBmcm9tIDx0dD5SZXF1aXJlcy5wcml2YXRlPC90dD4KKyAgd2lsbCBvbmx5IGJlIGluY2x1ZGVkIHdoZW4gc3RhdGljIGxpbmtpbmcuIEZvciB0aGlzIHJlYXNvbiwgaXQgaXMgdXN1YWxseQorICBvbmx5IGFwcHJvcHJpYXRlIHRvIGFkZCBtb2R1bGVzIGZyb20gdGhlIHNhbWUgcGFja2FnZSBpbiA8dHQ+UmVxdWlyZXM8L3R0Pi4KKyAgPC9wPgorCisgIDxwPlRoZSA8dHQ+TGliczwvdHQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBsaW5rIGZsYWdzIG5lY2Vzc2FyeSB0byB1c2UgdGhhdAorICBsaWJyYXJ5LiBJbiBhZGRpdGlvbiwgPHR0PkxpYnM8L3R0PiBhbmQgPHR0PkxpYnMucHJpdmF0ZTwvdHQ+IGNvbnRhaW4gbGluaworICBmbGFncyBmb3Igb3RoZXIgbGlicmFyaWVzIG5vdCBzdXBwb3J0ZWQgYnkgPHR0PnBrZy1jb25maWc8L3R0Pi4gU2ltaWxhciB0bworICB0aGUgPHR0PlJlcXVpcmVzPC90dD4gZmllbGQsIGl0IGlzIHByZWZlcnJlZCB0byBhZGQgbGluayBmbGFncyBmb3IgZXh0ZXJuYWwKKyAgbGlicmFyaWVzIHRvIHRoZSA8dHQ+TGlicy5wcml2YXRlPC90dD4gZmllbGQgc28gcHJvZ3JhbXMgZG8gbm90IGFjcXVpcmUgYW4KKyAgYWRkaXRpb25hbCBkaXJlY3QgZGVwZW5kZW5jeS48L3A+CisKKyAgPHA+RmluYWxseSwgdGhlIDx0dD5DZmxhZ3M8L3R0PiBjb250YWlucyB0aGUgY29tcGlsZXIgZmxhZ3MgZm9yIHVzaW5nIHRoZQorICBsaWJyYXJ5LiBVbmxpa2UgdGhlIDx0dD5MaWJzPC90dD4gZmllbGQsIHRoZXJlIGlzIG5vdCBhIHByaXZhdGUgdmFyaWFudCBvZgorICA8dHQ+Q2ZsYWdzPC90dD4uIFRoaXMgaXMgYmVjYXVzZSB0aGUgZGF0YSB0eXBlcyBhbmQgbWFjcm8gZGVmaW5pdGlvbnMgYXJlCisgIG5lZWRlZCByZWdhcmRsZXNzIG9mIHRoZSBsaW5raW5nIHNjZW5hcmlvLjwvcD4KKworICA8aDI+PGEgbmFtZT0idXNpbmciPlVzaW5nIHBrZy1jb25maWcgZmlsZXM8L2E+PC9oMj4KKworICA8cD5Bc3N1bWluZyB0aGF0IHRoZXJlIGFyZSA8dHQ+LnBjPC90dD4gZmlsZXMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0sIHRoZQorICA8dHQ+cGtnLWNvbmZpZzwvdHQ+IHRvb2wgaXMgdXNlZCB0byBleHRyYWN0IHRoZSBtZXRhZGF0YSBmb3IgdXNhZ2UuIEEgc2hvcnQKKyAgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbnMgY2FuIGJlIHNlZW4gYnkgZXhlY3V0aW5nCisgIDx0dD5wa2ctY29uZmlnIC0taGVscDwvdHQ+LiBBIG1vcmUgaW4gZGVwdGggZGlzY3Vzc2lvbiBjYW4gYmUgZm91bmQgaW4gdGhlCisgIDx0dD5wa2ctY29uZmlnKDEpPC90dD4gbWFudWFsIHBhZ2UuIFRoaXMgc2VjdGlvbiB3aWxsIHByb3ZpZGUgYSBicmllZgorICBleHBsYW5hdGlvbiBvZiBjb21tb24gdXNhZ2VzLjwvdHQ+CisKKyAgPHA+Q29uc2lkZXIgYSBzeXN0ZW0gd2l0aCB0d28gbW9kdWxlcywgPHR0PmZvbzwvdHQ+IGFuZCA8dHQ+YmFyPC90dD4uCisgIFRoZWlyIDx0dD4ucGM8L3R0PiBmaWxlcyBtaWdodCBsb29rIGxpa2UgdGhpczo8L3A+CisKKzxwcmU+Zm9vLnBjOgorcHJlZml4PS91c3IKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZQorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYgorCitOYW1lOiBmb28KK0Rlc2NyaXB0aW9uOiBUaGUgZm9vIGxpYnJhcnkKK1ZlcnNpb246IDEuMC4wCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9mb28KK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZm9vCisKK2Jhci5wYzoKK3ByZWZpeD0vdXNyCitleGVjX3ByZWZpeD0ke3ByZWZpeH0KK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKK2xpYmRpcj0ke2V4ZWNfcHJlZml4fS9saWIKKworTmFtZTogYmFyCitEZXNjcmlwdGlvbjogVGhlIGJhciBsaWJyYXJ5CitWZXJzaW9uOiAyLjEuMgorUmVxdWlyZXMucHJpdmF0ZTogZm9vID49IDAuNworQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KK0xpYnM6IC1MJHtsaWJkaXJ9IC1sYmFyPC9wcmU+CisKKyAgPHA+VGhlIHZlcnNpb24gb2YgdGhlIG1vZHVsZXMgY2FuIGJlIG9idGFpbmVkIHdpdGggdGhlIDx0dD4tLW1vZHZlcnNpb248L3R0PgorICBvcHRpb24uPC9wPgorCis8cHJlPiQgcGtnLWNvbmZpZyAtLW1vZHZlcnNpb24gZm9vCisxLjAuMAorJCBwa2ctY29uZmlnIC0tbW9kdmVyc2lvbiBiYXIKKzIuMS4yPC9wcmU+CisKKyAgPHA+VG8gcHJpbnQgdGhlIGxpbmsgZmxhZ3MgbmVlZGVkIGZvciBlYWNoIG1vZHVsZSwgdXNlIHRoZSA8dHQ+LS1saWJzPC90dD4KKyAgb3B0aW9uLjwvcD4KKworPHByZT4kIHBrZy1jb25maWcgLS1saWJzIGZvbworLWxmb28KKyQgcGtnLWNvbmZpZyAtLWxpYnMgYmFyCistbGJhcjwvcHJlPgorCisgIDxwPk5vdGljZSB0aGF0IDx0dD5wa2ctY29uZmlnPC90dD4gaGFzIHN1cHByZXNzZWQgcGFydCBvZiB0aGUgPHR0PkxpYnM8L3R0PgorICBmaWVsZCBmb3IgYm90aCBtb2R1bGVzLiBUaGlzIGlzIGJlY2F1c2UgaXQgdHJlYXRzIHRoZSA8dHQ+LUw8L3R0PiBmbGFnCisgIHNwZWNpYWxseSBhbmQga25vd3MgdGhhdCB0aGUgPHR0PiR7bGliZGlyfTwvdHQ+IGRpcmVjdG9yeSA8dHQ+L3Vzci9saWI8L3R0PgorICBpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gbGlua2VyIHNlYXJjaCBwYXRoLiBUaGlzIGtlZXBzIDx0dD5wa2ctY29uZmlnPC90dD4KKyAgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBsaW5rZXIgb3BlcmF0aW9uLjwvcD4KKworICA8cD5BbHNvLCBhbHRob3VnaCA8dHQ+Zm9vPC90dD4gaXMgcmVxdWlyZWQgYnkgPHR0PmJhcjwvdHQ+LCB0aGUgbGluayBmbGFncworICBmb3IgPHR0PmZvbzwvdHQ+IGFyZSBub3Qgb3V0cHV0LiBUaGlzIGlzIGJlY2F1c2UgPHR0PmZvbzwvdHQ+IGlzIG5vdAorICBkaXJlY3RseSBuZWVkZWQgYnkgYW4gYXBwbGljYXRpb24gdGhhdCBvbmx5IHdhbnRzIHRvIHVzZSB0aGUgPHR0PmJhcjwvdHQ+CisgIGxpYnJhcnkuIEZvciBzdGF0aWNhbGx5IGxpbmtpbmcgYSA8dHQ+YmFyPC90dD4gYXBwbGljYXRpb24sIHdlIG5lZWQgYm90aAorICBzZXRzIG9mIGxpbmtlciBmbGFnczo8L3A+CisKKzxwcmU+JCBwa2ctY29uZmlnIC0tbGlicyAtLXN0YXRpYyBiYXIKKy1sYmFyIC1sZm9vPC9wcmU+CisKKyAgPHA+PHR0PnBrZy1jb25maWc8L3R0PiBuZWVkcyB0byBvdXRwdXQgYm90aCBzZXRzIG9mIGxpbmsgZmxhZ3MgaW4gdGhpcyBjYXNlCisgIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGF0aWNhbGx5IGxpbmtlZCBhcHBsaWNhdGlvbiB3aWxsIGZpbmQgYWxsIHRoZSBuZWNlc3NhcnkKKyAgc3ltYm9scy4gT24gdGhlIG90aGVyIGhhbmQsIGl0IHdpbGwgYWx3YXlzIG91dHB1dCBhbGwgdGhlIDx0dD5DZmxhZ3M8L3R0Pi4KKyAgPC9wPgorCis8cHJlPiQgcGtnLWNvbmZpZyAtLWNmbGFncyBiYXIKKy1JL3Vzci9pbmNsdWRlL2ZvbworJCBwa2ctY29uZmlnIC0tY2ZsYWdzIC0tc3RhdGljIGJhcgorLUkvdXNyL2luY2x1ZGUvZm9vPC9wcmU+CisKKyAgPHA+QW5vdGhlciB1c2VmdWwgb3B0aW9uLCA8dHQ+LS1leGlzdHM8L3R0PiwgY2FuIGJlIHVzZWQgdG8gdGVzdCBmb3IgYQorICBtb2R1bGUncyBhdmFpbGFiaWxpdHkuPC9wPgorCis8cHJlPiQgcGtnLWNvbmZpZyAtLWV4aXN0cyBmb28KKyQgZWNobyAkPworMDwvcHJlPgorCisgIDxwPk9uZSBvZiB0aGUgbmljZXN0IGZlYXR1cmVzIG9mIDx0dD5wa2ctY29uZmlnPC90dD4gaXMgcHJvdmlkaW5nIHZlcnNpb24KKyAgY2hlY2tpbmcuIEl0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiBhIHN1ZmZpY2llbnQgdmVyc2lvbiBpcyBhdmFpbGFibGUuCisgIDwvcD4KKworPHByZT4kIHBrZy1jb25maWcgLS1saWJzICJiYXIgPj0gMi43IgorUmVxdWVzdGVkICdiYXIgPj0gMi43JyBidXQgdmVyc2lvbiBvZiBiYXIgaXMgMi4xLjI8L3ByZT4KKworICA8cD5Tb21lIGNvbW1hbmRzIHdpbGwgcHJvdmlkZSBtb3JlIHZlcmJvc2Ugb3V0cHV0IHdoZW4gY29tYmluZWQgd2l0aCB0aGUKKyAgPHR0Pi0tcHJpbnQtZXJyb3JzPC90dD4gb3B0aW9uLjwvcD4KKworPHByZT4kIHBrZy1jb25maWcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgeG94bworUGFja2FnZSB4b3hvIHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguCitQZXJoYXBzIHlvdSBzaG91bGQgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBgeG94by5wYycKK3RvIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKK05vIHBhY2thZ2UgJ3hveG8nIGZvdW5kPC9wcmU+CisKKyAgPHA+VGhlIG1lc3NhZ2UgYWJvdmUgcmVmZXJlbmNlcyB0aGUgPHR0PlBLR19DT05GSUdfUEFUSDwvdHQ+IGVudmlyb25tZW50CisgIHZhcmlhYmxlLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gYXVnbWVudCA8dHQ+cGtnLWNvbmZpZzwvdHQ+J3Mgc2VhcmNoCisgIHBhdGguIE9uIGEgdHlwaWNhbCBVbml4IHN5c3RlbSwgaXQgd2lsbCBzZWFyY2ggaW4gdGhlIGRpcmVjdG9yaWVzCisgIDx0dD4vdXNyL2xpYi9wa2djb25maWc8L3R0PiBhbmQgPHR0Pi91c3Ivc2hhcmUvcGtnY29uZmlnPC90dD4uIFRoaXMgd2lsbAorICB1c3VhbGx5IGNvdmVyIHN5c3RlbSBpbnN0YWxsZWQgbW9kdWxlcy4gSG93ZXZlciwgc29tZSBsb2NhbCBtb2R1bGVzIG1heSBiZQorICBpbnN0YWxsZWQgaW4gYSBkaWZmZXJlbnQgcHJlZml4IHN1Y2ggYXMgPHR0Pi91c3IvbG9jYWw8L3R0Pi4gSW4gdGhhdCBjYXNlLAorICBpdCdzIG5lY2Vzc2FyeSB0byBwcmVwZW5kIHRoZSBzZWFyY2ggcGF0aCBzbyB0aGF0IDx0dD5wa2ctY29uZmlnPC90dD4gY2FuCisgIGxvY2F0ZSB0aGUgPHR0Pi5wYzwvdHQ+IGZpbGVzLjwvcD4KKworPHByZT4kIHBrZy1jb25maWcgLS1tb2R2ZXJzaW9uIGhlbGxvCitQYWNrYWdlIGhlbGxvIHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguCitQZXJoYXBzIHlvdSBzaG91bGQgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBgaGVsbG8ucGMnCit0byB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlCitObyBwYWNrYWdlICdoZWxsbycgZm91bmQKKyQgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0vdXNyL2xvY2FsL2xpYi9wa2djb25maWcKKyQgcGtnLWNvbmZpZyAtLW1vZHZlcnNpb24gaGVsbG8KKzEuMC4wPC9wcmU+CisKKyAgPHA+QSBmZXcgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLyI+YXV0b2NvbmY8L2E+IG1hY3JvcworICBhcmUgYWxzbyBwcm92aWRlZCB0byBlYXNlIGludGVncmF0aW9uIG9mIDx0dD5wa2ctY29uZmlnPC90dD4gbW9kdWxlcyBpbnRvCisgIHByb2plY3RzLjwvcD4KKworICA8dWw+CisgICAgPGxpPjxiPlBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSk8L2I+OiBMb2NhdGVzIHRoZQorICAgIDx0dD5wa2ctY29uZmlnPC90dD4gdG9vbCBvbiB0aGUgc3lzdGVtIGFuZCBjaGVja3MgdGhlIHZlcnNpb24gZm9yCisgICAgY29tcGF0aWJpbGl0eS48L2xpPgorCisgICAgPGxpPjxiPlBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSk8L2I+OgorICAgIENoZWNrcyB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLjwvbGk+CisKKyAgICA8bGk+PGI+UEtHX0NIRUNLX01PRFVMRVMoVkFSSUFCTEUtUFJFRklYLCBNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKTwvYj46CisgICAgQ2hlY2tzIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9kdWxlcyBleGlzdHMuIElmIHNvLCBpdCBzZXRzCisgICAgPHR0PiZsdDtWQVJJQUJMRS1QUkVGSVgmZ3Q7X0NGTEFHUzwvdHQ+IGFuZAorICAgIDx0dD4mbHQ7VkFSSUFCTEUtUFJFRklYJmd0O19MSUJTPC90dD4gYWNjb3JkaW5nIHRvIHRoZSBvdXRwdXQgZnJvbQorICAgIDx0dD5wa2ctY29uZmlnIC0tY2ZsYWdzPC90dD4gYW5kIDx0dD5wa2ctY29uZmlnIC0tbGliczwvdHQ+LjwvbGk+CisgIDwvdWw+CisKKyAgPCEtLTxoMj48YSBuYW1lPSJleGFtcGxlcyI+RXhhbXBsZXM8L2E+PC9oMj4tLT4KKyAgPGgyPjxhIG5hbWU9ImZhcSI+RnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnM8L2E+PC9oMj4KKworICA8b2w+CisgICAgPGxpPk15IHByb2dyYW0gdXNlcyBsaWJyYXJ5IDx0dD54PC90dD4uIFdoYXQgZG8gSSBkbz88L2xpPgorCisgICAgPHA+VGhlIDx0dD5wa2ctY29uZmlnPC90dD4gb3V0cHV0IGNhbiBlYXNpbHkgYmUgdXNlZCBvbiB0aGUgY29tcGlsZXIKKyAgICBjb21tYW5kIGxpbmUuIEFzc3VtaW5nIHRoZSA8dHQ+eDwvdHQ+IGxpYnJhcnkgaGFzIGEgPHR0PngucGM8L3R0PgorICAgIDx0dD5wa2ctY29uZmlnPC90dD4gZmlsZTo8L3A+CisKKzxwcmU+Y2MgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIHhgIC1vIG15YXBwIG15YXBwLmM8L3ByZT4KKworICAgIDxwPlRoZSBpbnRlZ3JhdGlvbiBjYW4gYmUgbW9yZSByb2J1c3Qgd2hlbiB1c2VkIHdpdGgKKyAgICA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvIj5hdXRvY29uZjwvYT4gYW5kCisgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9tYWtlLyI+YXV0b21ha2U8L2E+LiBCeSB1c2luZyB0aGUKKyAgICBzdXBwbGllZCA8dHQ+UEtHX0NIRUNLX01PRFVMRVM8L3R0PiBtYWNybywgdGhlIG1ldGFkYXRhIGlzIGVhc2lseSBhY2Nlc3NlZAorICAgIGluIHRoZSBidWlsZCBwcm9jZXNzLjwvcD4KKworPHByZT5jb25maWd1cmUuYWM6CitQS0dfQ0hFQ0tfTU9EVUxFUyhbWF0sIFt4XSkKKworTWFrZWZpbGUuYW06CitteWFwcF9DRkxBR1MgPSAkKFhfQ0ZMQUdTKQorbXlhcHBfTERBREQgPSAkKFhfTElCUyk8L3ByZT4KKworICAgIDxwPklmIHRoZSA8dHQ+eDwvdHQ+IG1vZHVsZSBpcyBmb3VuZCwgdGhlIG1hY3JvIHdpbGwgZmlsbCBhbmQgc3Vic3RpdHV0ZQorICAgIHRoZSA8dHQ+WF9DRkxBR1M8L3R0PiBhbmQgPHR0PlhfTElCUzwvdHQ+IHZhcmlhYmxlcy4gSWYgdGhlIG1vZHVsZSBpcyBub3QKKyAgICBmb3VuZCwgYW4gZXJyb3Igd2lsbCBiZSBwcm9kdWNlZC4gT3B0aW9uYWwgM3JkIGFuZCA0dGggYXJndW1lbnRzIGNhbiBiZQorICAgIHN1cHBsaWVkIHRvIDx0dD5QS0dfQ0hFQ0tfTU9EVUxFUzwvdHQ+IHRvIGNvbnRyb2wgYWN0aW9ucyB3aGVuIHRoZSBtb2R1bGUKKyAgICBpcyBmb3VuZCBvciBub3QuPC9wPgorCisgICAgPGxpPk15IGxpYnJhcnkgPHR0Pno8L3R0PiBpbnN0YWxscyBoZWFkZXIgZmlsZXMgd2hpY2ggaW5jbHVkZSA8dHQ+bGlieDwvdHQ+CisgICAgaGVhZGVycy4gV2hhdCBkbyBJIHB1dCBpbiBteSA8dHQ+ei5wYzwvdHQ+IGZpbGU/PC9saT4KKworICAgIDxwPklmIHRoZSA8dHQ+eDwvdHQ+IGxpYnJhcnkgaGFzIDx0dD5wa2ctY29uZmlnPC90dD4gc3VwcG9ydCwgYWRkIGl0IHRvCisgICAgdGhlIDx0dD5SZXF1aXJlcy5wcml2YXRlPC90dD4gZmllbGQuIElmIGl0IGRvZXMgbm90LCBhdWdtZW50IHRoZQorICAgIDx0dD5DZmxhZ3M8L3R0PiBmaWVsZCB3aXRoIHRoZSBuZWNlc3NhcnkgY29tcGlsZXIgZmxhZ3MgZm9yIHVzaW5nIHRoZQorICAgIDx0dD5saWJ4PC90dD4gaGVhZGVycy4gSW4gZWl0aGVyIGNhc2UsIDx0dD5wa2ctY29uZmlnPC90dD4gd2lsbCBvdXRwdXQKKyAgICB0aGUgY29tcGlsZXIgZmxhZ3Mgd2hlbiA8dHQ+LS1zdGF0aWM8L3R0PiBpcyB1c2VkIG9yIG5vdC48L3A+CisKKyAgICA8bGk+TXkgbGlicmFyeSA8dHQ+ejwvdHQ+IHVzZXMgPHR0PmxpYng8L3R0PiBpbnRlcm5hbGx5LCBidXQgZG9lcyBub3QKKyAgICBleHBvc2UgPHR0PmxpYng8L3R0PiBkYXRhIHR5cGVzIGluIGl0cyBwdWJsaWMgQVBJLiBXaGF0IGRvIEkgcHV0IGluIG15CisgICAgPHR0PnoucGM8L3R0PiBmaWxlPzwvbGk+CisKKyAgICA8cD5BZ2FpbiwgYWRkIHRoZSBtb2R1bGUgdG8gPHR0PlJlcXVpcmVzLnByaXZhdGU8L3R0PiBpZiBpdCBzdXBwb3J0cworICAgIDx0dD5wa2ctY29uZmlnPC90dD4uIEluIHRoaXMgY2FzZSwgdGhlIGNvbXBpbGVyIGZsYWdzIHdpbGwgYmUgZW1pdHRlZAorICAgIHVubmVjZXNzYXJpbHksIGJ1dCBpdCBlbnN1cmVzIHRoYXQgdGhlIGxpbmtlciBmbGFncyB3aWxsIGJlIHByZXNlbnQgd2hlbgorICAgIGxpbmtpbmcgc3RhdGljYWxseS4gSWYgPHR0PmxpYng8L3R0PiBkb2VzIG5vdCBzdXBwb3J0IDx0dD5wa2ctY29uZmlnPC90dD4sCisgICAgYWRkIHRoZSBuZWNlc3NhcnkgbGlua2VyIGZsYWdzIHRvIDx0dD5MaWJzLnByaXZhdGU8L3R0Pi48L3A+CisgIDwvb2w+CisKKyAgPGhyLz4KKworICA8YWRkcmVzcz5EYW4gTmljaG9sc29uICZsdDtkYm4ubGlzdHMgKGF0KSBnbWFpbCAoZG90KSBjb20mZ3Q7PC9hZGRyZXNzPgorCisgIDxwPkNvcHlyaWdodCAoQykgMjAxMCAgRGFuIE5pY2hvbHNvbi48YnIvPgorICBUaGlzIGRvY3VtZW50IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQorICA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0Ij5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyPC9hPgorICBvciBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9hcy5pbmZvIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2FzLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1MDRiYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9hcy5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9iZmQuaW5mbyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9iZmQuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWZmMWU2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2JmZC5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9iaW51dGlscy5pbmZvIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2JpbnV0aWxzLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmODYyNQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9iaW51dGlscy5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9jb25maWd1cmUuaW5mbyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9jb25maWd1cmUuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjFlZmViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2NvbmZpZ3VyZS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9jcHAuaW5mbyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9jcHAuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTdiODk4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2NwcC5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvaW5mby9kaXIgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2luZm8vZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2M2JmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2luZm8vZGlyCkBAIC0wLDAgKzEsNzAgQEAKK1RoaXMgaXMgdGhlIGZpbGUgLi4uL2luZm8vZGlyLCB3aGljaCBjb250YWlucyB0aGUKK3RvcG1vc3Qgbm9kZSBvZiB0aGUgSW5mbyBoaWVyYXJjaHksIGNhbGxlZCAoZGlyKVRvcC4KK1RoZSBmaXJzdCB0aW1lIHlvdSBpbnZva2UgSW5mbyB5b3Ugc3RhcnQgb2ZmIGxvb2tpbmcgYXQgdGhpcyBub2RlLgorHworRmlsZTogZGlyLAlOb2RlOiBUb3AJVGhpcyBpcyB0aGUgdG9wIG9mIHRoZSBJTkZPIHRyZWUKKworICBUaGlzICh0aGUgRGlyZWN0b3J5IG5vZGUpIGdpdmVzIGEgbWVudSBvZiBtYWpvciB0b3BpY3MuCisgIFR5cGluZyAicSIgZXhpdHMsICI/IiBsaXN0cyBhbGwgSW5mbyBjb21tYW5kcywgImQiIHJldHVybnMgaGVyZSwKKyAgImgiIGdpdmVzIGEgcHJpbWVyIGZvciBmaXJzdC10aW1lcnMsCisgICJtRW1hY3M8UmV0dXJuPiIgdmlzaXRzIHRoZSBFbWFjcyBtYW51YWwsIGV0Yy4KKworICBJbiBFbWFjcywgeW91IGNhbiBjbGljayBtb3VzZSBidXR0b24gMiBvbiBhIG1lbnUgaXRlbSBvciBjcm9zcyByZWZlcmVuY2UKKyAgdG8gc2VsZWN0IGl0LgorCisqIE1lbnU6CisKK0dOVSBMaWJyYXJpZXMKKyogbGlicXVhZG1hdGg6IChsaWJxdWFkbWF0aCkuICAgR0NDIFF1YWQtUHJlY2lzaW9uIE1hdGggTGlicmFyeQorCitJbmRpdmlkdWFsIHV0aWxpdGllcworKiBhZGRyMmxpbmU6IChiaW51dGlscylhZGRyMmxpbmUuICAgICAgICAgICAgICAgQ29udmVydCBhZGRyZXNzZXMgdG8gZmlsZSBhbmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuCisqIGFyOiAoYmludXRpbHMpYXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUsIG1vZGlmeSwgYW5kIGV4dHJhY3QgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYXJjaGl2ZXMuCisqIGMrK2ZpbHQ6IChiaW51dGlscyljKytmaWx0LiAgICAgICAgICAgICAgICAgICBGaWx0ZXIgdG8gZGVtYW5nbGUgZW5jb2RlZCBDKysgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMuCisqIGN4eGZpbHQ6IChiaW51dGlscyljKytmaWx0LiAgICAgICAgICAgICAgICAgICBNUy1ET1MgbmFtZSBmb3IgYysrZmlsdC4KKyogZGxsdG9vbDogKGJpbnV0aWxzKWRsbHRvb2wuICAgICAgICAgICAgICAgICAgIENyZWF0ZSBmaWxlcyBuZWVkZWQgdG8gYnVpbGQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB1c2UgRExMcy4KKyogZWxmZWRpdDogKGJpbnV0aWxzKWVsZmVkaXQuICAgICAgICAgICAgICAgICAgIFVwZGF0ZSB0aGUgRUxGIGhlYWRlciBvZiBFTEYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLgorKiBubG1jb252OiAoYmludXRpbHMpbmxtY29udi4gICAgICAgICAgICAgICAgICAgQ29udmVydHMgb2JqZWN0IGNvZGUgaW50byBhbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkxNLgorKiBubTogKGJpbnV0aWxzKW5tLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBzeW1ib2xzIGZyb20gb2JqZWN0IGZpbGVzLgorKiBvYmpjb3B5OiAoYmludXRpbHMpb2JqY29weS4gICAgICAgICAgICAgICAgICAgQ29weSBhbmQgdHJhbnNsYXRlIG9iamVjdCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuCisqIG9iamR1bXA6IChiaW51dGlscylvYmpkdW1wLiAgICAgICAgICAgICAgICAgICBEaXNwbGF5IGluZm9ybWF0aW9uIGZyb20gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBmaWxlcy4KKyogcmFubGliOiAoYmludXRpbHMpcmFubGliLiAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlIGluZGV4IHRvIGFyY2hpdmUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLgorKiByZWFkZWxmOiAoYmludXRpbHMpcmVhZGVsZi4gICAgICAgICAgICAgICAgICAgRGlzcGxheSB0aGUgY29udGVudHMgb2YgRUxGIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgZmlsZXMuCisqIHNpemU6IChiaW51dGlscylzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IHNlY3Rpb24gc2l6ZXMgYW5kIHRvdGFsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLgorKiBzdHJpbmdzOiAoYmludXRpbHMpc3RyaW5ncy4gICAgICAgICAgICAgICAgICAgTGlzdCBwcmludGFibGUgc3RyaW5ncyBmcm9tIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy4KKyogc3RyaXA6IChiaW51dGlscylzdHJpcC4gICAgICAgICAgICAgICAgICAgICAgIERpc2NhcmQgc3ltYm9scy4KKyogd2luZG1jOiAoYmludXRpbHMpd2luZG1jLiAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvciBmb3IgV2luZG93cyBtZXNzYWdlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMuCisqIHdpbmRyZXM6IChiaW51dGlscyl3aW5kcmVzLiAgICAgICAgICAgICAgICAgICBNYW5pcHVsYXRlIFdpbmRvd3MgcmVzb3VyY2VzLgorCitTb2Z0d2FyZSBkZXZlbG9wbWVudAorKiBBbm5vdGF0ZTogKGFubm90YXRlKS4gICAgICAgICBUaGUgb2Jzb2xldGUgYW5ub3RhdGlvbiBpbnRlcmZhY2UuCisqIEFzOiAoYXMpLiAgICAgICAgICAgICAgICAgICAgIFRoZSBHTlUgYXNzZW1ibGVyLgorKiBCZmQ6IChiZmQpLiAgICAgICAgICAgICAgICAgICBUaGUgQmluYXJ5IEZpbGUgRGVzY3JpcHRvciBsaWJyYXJ5LgorKiBCaW51dGlsczogKGJpbnV0aWxzKS4gICAgICAgICBUaGUgR05VIGJpbmFyeSB1dGlsaXRpZXMuCisqIENwcDogKGNwcCkuICAgICAgICAgICAgICAgICAgIFRoZSBHTlUgQyBwcmVwcm9jZXNzb3IuCisqIENwcGxpYjogKGNwcGludGVybmFscykuICAgICAgIENwcGxpYiBpbnRlcm5hbHMuCisqIEdhczogKGFzKS4gICAgICAgICAgICAgICAgICAgIFRoZSBHTlUgYXNzZW1ibGVyLgorKiBHZGI6IChnZGIpLiAgICAgICAgICAgICAgICAgICBUaGUgR05VIGRlYnVnZ2VyLgorKiBHZGItSW50ZXJuYWxzOiAoZ2RiaW50KS4gICAgICBUaGUgR05VIGRlYnVnZ2VyJ3MgaW50ZXJuYWxzLgorKiBMZDogKGxkKS4gICAgICAgICAgICAgICAgICAgICBUaGUgR05VIGxpbmtlci4KKyogU3RhYnM6IChzdGFicykuICAgICAgICAgICAgICAgVGhlICJzdGFicyIgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvcm1hdC4KKyogZysrOiAoZ2NjKS4gICAgICAgICAgICAgICAgICAgVGhlIEdOVSBDKysgY29tcGlsZXIuCisqIGdjYzogKGdjYykuICAgICAgICAgICAgICAgICAgIFRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbi4KKyogZ2NjaW5zdGFsbDogKGdjY2luc3RhbGwpLiAgICAgSW5zdGFsbGluZyB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24uCisqIGdjY2ludDogKGdjY2ludCkuICAgICAgICAgICAgIEludGVybmFscyBvZiB0aGUgR05VIENvbXBpbGVyIENvbGxlY3Rpb24uCisqIGdjb3Y6IChnY2MpIEdjb3YuICAgICAgICAgICAgIGBnY292Jy0tYSB0ZXN0IGNvdmVyYWdlIHByb2dyYW0uCisqIGdmb3J0cmFuOiAoZ2ZvcnRyYW4pLiAgICAgICAgIFRoZSBHTlUgRm9ydHJhbiBDb21waWxlci4KKyogZ3Byb2Y6IChncHJvZikuICAgICAgICAgICAgICAgUHJvZmlsaW5nIHlvdXIgcHJvZ3JhbSdzIGV4ZWN1dGlvbgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2djYy5pbmZvIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2djYy5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMGY5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2luZm8vZ2NjLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2dkYi5pbmZvIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2dkYi5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTZiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2luZm8vZ2RiLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2dmb3J0cmFuLmluZm8gYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2luZm8vZ2ZvcnRyYW4uaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDMxMThlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2dmb3J0cmFuLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2dwcm9mLmluZm8gYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2luZm8vZ3Byb2YuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGI1MWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2dwcm9mLmluZm8KQEAgLTAsMCArMSwyNDc0IEBACitUaGlzIGlzIGdwcm9mLmluZm8sIHByb2R1Y2VkIGJ5IG1ha2VpbmZvIHZlcnNpb24gNC44IGZyb20gZ3Byb2YudGV4aS4KKworSU5GTy1ESVItU0VDVElPTiBTb2Z0d2FyZSBkZXZlbG9wbWVudAorU1RBUlQtSU5GTy1ESVItRU5UUlkKKyogZ3Byb2Y6IChncHJvZikuICAgICAgICAgICAgICAgIFByb2ZpbGluZyB5b3VyIHByb2dyYW0ncyBleGVjdXRpb24KK0VORC1JTkZPLURJUi1FTlRSWQorCisgICBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBncHJvZiBwcm9maWxlciBvZiB0aGUgR05VIHN5c3RlbS4KKworICAgQ29weXJpZ2h0IChDKSAxOTg4LCAxOTkyLCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA3LAorMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIG5vCitJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vIEJhY2stQ292ZXIKK1RleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKK0ZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworHworRmlsZTogZ3Byb2YuaW5mbywgIE5vZGU6IFRvcCwgIE5leHQ6IEludHJvZHVjdGlvbiwgIFVwOiAoZGlyKQorCitQcm9maWxpbmcgYSBQcm9ncmFtOiBXaGVyZSBEb2VzIEl0IFNwZW5kIEl0cyBUaW1lPworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhpcyBtYW51YWwgZGVzY3JpYmVzIHRoZSBHTlUgcHJvZmlsZXIsIGBncHJvZicsIGFuZCBob3cgeW91IGNhbiB1c2UgaXQKK3RvIGRldGVybWluZSB3aGljaCBwYXJ0cyBvZiBhIHByb2dyYW0gYXJlIHRha2luZyBtb3N0IG9mIHRoZSBleGVjdXRpb24KK3RpbWUuICBXZSBhc3N1bWUgdGhhdCB5b3Uga25vdyBob3cgdG8gd3JpdGUsIGNvbXBpbGUsIGFuZCBleGVjdXRlCitwcm9ncmFtcy4gIEdOVSBgZ3Byb2YnIHdhcyB3cml0dGVuIGJ5IEpheSBGZW5sYXNvbi4KKworICAgVGhpcyBtYW51YWwgaXMgZm9yIGBncHJvZicgKEdOVSBCaW51dGlscykgdmVyc2lvbiAyLjIzLjEuCisKKyAgIFRoaXMgZG9jdW1lbnQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZQorRG9jdW1lbnRhdGlvbiBMaWNlbnNlIHZlcnNpb24gMS4zLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkCitpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworKiBNZW51OgorCisqIEludHJvZHVjdGlvbjo6ICAgICAgICBXaGF0IHByb2ZpbGluZyBtZWFucywgYW5kIHdoeSBpdCBpcyB1c2VmdWwuCisKKyogQ29tcGlsaW5nOjogICAgICAgICAgIEhvdyB0byBjb21waWxlIHlvdXIgcHJvZ3JhbSBmb3IgcHJvZmlsaW5nLgorKiBFeGVjdXRpbmc6OiAgICAgICAgICAgRXhlY3V0aW5nIHlvdXIgcHJvZ3JhbSB0byBnZW5lcmF0ZSBwcm9maWxlIGRhdGEKKyogSW52b2tpbmc6OiAgICAgICAgICAgIEhvdyB0byBydW4gYGdwcm9mJywgYW5kIGl0cyBvcHRpb25zCisKKyogT3V0cHV0OjogICAgICAgICAgICAgIEludGVycHJldGluZyBgZ3Byb2YnJ3Mgb3V0cHV0CisKKyogSW5hY2N1cmFjeTo6ICAgICAgICAgIFBvdGVudGlhbCBwcm9ibGVtcyB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mCisqIEhvdyBkbyBJPzo6ICAgICAgICAgICBBbnN3ZXJzIHRvIGNvbW1vbiBxdWVzdGlvbnMKKyogSW5jb21wYXRpYmlsaXRpZXM6OiAgIChiZXR3ZWVuIEdOVSBgZ3Byb2YnIGFuZCBVbml4IGBncHJvZicuKQorKiBEZXRhaWxzOjogICAgICAgICAgICAgRGV0YWlscyBvZiBob3cgcHJvZmlsaW5nIGlzIGRvbmUKKyogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlOjogIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogSW50cm9kdWN0aW9uLCAgTmV4dDogQ29tcGlsaW5nLCAgUHJldjogVG9wLCAgVXA6IFRvcAorCisxIEludHJvZHVjdGlvbiB0byBQcm9maWxpbmcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitQcm9maWxpbmcgYWxsb3dzIHlvdSB0byBsZWFybiB3aGVyZSB5b3VyIHByb2dyYW0gc3BlbnQgaXRzIHRpbWUgYW5kCit3aGljaCBmdW5jdGlvbnMgY2FsbGVkIHdoaWNoIG90aGVyIGZ1bmN0aW9ucyB3aGlsZSBpdCB3YXMgZXhlY3V0aW5nLgorVGhpcyBpbmZvcm1hdGlvbiBjYW4gc2hvdyB5b3Ugd2hpY2ggcGllY2VzIG9mIHlvdXIgcHJvZ3JhbSBhcmUgc2xvd2VyCit0aGFuIHlvdSBleHBlY3RlZCwgYW5kIG1pZ2h0IGJlIGNhbmRpZGF0ZXMgZm9yIHJld3JpdGluZyB0byBtYWtlIHlvdXIKK3Byb2dyYW0gZXhlY3V0ZSBmYXN0ZXIuICBJdCBjYW4gYWxzbyB0ZWxsIHlvdSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nCitjYWxsZWQgbW9yZSBvciBsZXNzIG9mdGVuIHRoYW4geW91IGV4cGVjdGVkLiAgVGhpcyBtYXkgaGVscCB5b3Ugc3BvdAorYnVncyB0aGF0IGhhZCBvdGhlcndpc2UgYmVlbiB1bm5vdGljZWQuCisKKyAgIFNpbmNlIHRoZSBwcm9maWxlciB1c2VzIGluZm9ybWF0aW9uIGNvbGxlY3RlZCBkdXJpbmcgdGhlIGFjdHVhbAorZXhlY3V0aW9uIG9mIHlvdXIgcHJvZ3JhbSwgaXQgY2FuIGJlIHVzZWQgb24gcHJvZ3JhbXMgdGhhdCBhcmUgdG9vCitsYXJnZSBvciB0b28gY29tcGxleCB0byBhbmFseXplIGJ5IHJlYWRpbmcgdGhlIHNvdXJjZS4gIEhvd2V2ZXIsIGhvdworeW91ciBwcm9ncmFtIGlzIHJ1biB3aWxsIGFmZmVjdCB0aGUgaW5mb3JtYXRpb24gdGhhdCBzaG93cyB1cCBpbiB0aGUKK3Byb2ZpbGUgZGF0YS4gIElmIHlvdSBkb24ndCB1c2Ugc29tZSBmZWF0dXJlIG9mIHlvdXIgcHJvZ3JhbSB3aGlsZSBpdAoraXMgYmVpbmcgcHJvZmlsZWQsIG5vIHByb2ZpbGUgaW5mb3JtYXRpb24gd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoYXQKK2ZlYXR1cmUuCisKKyAgIFByb2ZpbGluZyBoYXMgc2V2ZXJhbCBzdGVwczoKKworICAgKiBZb3UgbXVzdCBjb21waWxlIGFuZCBsaW5rIHlvdXIgcHJvZ3JhbSB3aXRoIHByb2ZpbGluZyBlbmFibGVkLgorICAgICAqTm90ZSBDb21waWxpbmcgYSBQcm9ncmFtIGZvciBQcm9maWxpbmc6IENvbXBpbGluZy4KKworICAgKiBZb3UgbXVzdCBleGVjdXRlIHlvdXIgcHJvZ3JhbSB0byBnZW5lcmF0ZSBhIHByb2ZpbGUgZGF0YSBmaWxlLgorICAgICAqTm90ZSBFeGVjdXRpbmcgdGhlIFByb2dyYW06IEV4ZWN1dGluZy4KKworICAgKiBZb3UgbXVzdCBydW4gYGdwcm9mJyB0byBhbmFseXplIHRoZSBwcm9maWxlIGRhdGEuICAqTm90ZSBgZ3Byb2YnCisgICAgIENvbW1hbmQgU3VtbWFyeTogSW52b2tpbmcuCisKKyAgIFRoZSBuZXh0IHRocmVlIGNoYXB0ZXJzIGV4cGxhaW4gdGhlc2Ugc3RlcHMgaW4gZ3JlYXRlciBkZXRhaWwuCisKKyAgIFNldmVyYWwgZm9ybXMgb2Ygb3V0cHV0IGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgYW5hbHlzaXMuCisKKyAgIFRoZSAiZmxhdCBwcm9maWxlIiBzaG93cyBob3cgbXVjaCB0aW1lIHlvdXIgcHJvZ3JhbSBzcGVudCBpbiBlYWNoCitmdW5jdGlvbiwgYW5kIGhvdyBtYW55IHRpbWVzIHRoYXQgZnVuY3Rpb24gd2FzIGNhbGxlZC4gIElmIHlvdSBzaW1wbHkKK3dhbnQgdG8ga25vdyB3aGljaCBmdW5jdGlvbnMgYnVybiBtb3N0IG9mIHRoZSBjeWNsZXMsIGl0IGlzIHN0YXRlZAorY29uY2lzZWx5IGhlcmUuICAqTm90ZSBUaGUgRmxhdCBQcm9maWxlOiBGbGF0IFByb2ZpbGUuCisKKyAgIFRoZSAiY2FsbCBncmFwaCIgc2hvd3MsIGZvciBlYWNoIGZ1bmN0aW9uLCB3aGljaCBmdW5jdGlvbnMgY2FsbGVkCitpdCwgd2hpY2ggb3RoZXIgZnVuY3Rpb25zIGl0IGNhbGxlZCwgYW5kIGhvdyBtYW55IHRpbWVzLiAgVGhlcmUgaXMgYWxzbworYW4gZXN0aW1hdGUgb2YgaG93IG11Y2ggdGltZSB3YXMgc3BlbnQgaW4gdGhlIHN1YnJvdXRpbmVzIG9mIGVhY2gKK2Z1bmN0aW9uLiAgVGhpcyBjYW4gc3VnZ2VzdCBwbGFjZXMgd2hlcmUgeW91IG1pZ2h0IHRyeSB0byBlbGltaW5hdGUKK2Z1bmN0aW9uIGNhbGxzIHRoYXQgdXNlIGEgbG90IG9mIHRpbWUuICAqTm90ZSBUaGUgQ2FsbCBHcmFwaDogQ2FsbAorR3JhcGguCisKKyAgIFRoZSAiYW5ub3RhdGVkIHNvdXJjZSIgbGlzdGluZyBpcyBhIGNvcHkgb2YgdGhlIHByb2dyYW0ncyBzb3VyY2UKK2NvZGUsIGxhYmVsZWQgd2l0aCB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggbGluZSBvZiB0aGUgcHJvZ3JhbSB3YXMKK2V4ZWN1dGVkLiAgKk5vdGUgVGhlIEFubm90YXRlZCBTb3VyY2UgTGlzdGluZzogQW5ub3RhdGVkIFNvdXJjZS4KKworICAgVG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IHByb2ZpbGluZyB3b3JrcywgeW91IG1heSB3aXNoIHRvIHJlYWQgYQorZGVzY3JpcHRpb24gb2YgaXRzIGltcGxlbWVudGF0aW9uLiAgKk5vdGUgSW1wbGVtZW50YXRpb24gb2YgUHJvZmlsaW5nOgorSW1wbGVtZW50YXRpb24uCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBDb21waWxpbmcsICBOZXh0OiBFeGVjdXRpbmcsICBQcmV2OiBJbnRyb2R1Y3Rpb24sICBVcDogVG9wCisKKzIgQ29tcGlsaW5nIGEgUHJvZ3JhbSBmb3IgUHJvZmlsaW5nCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgZmlyc3Qgc3RlcCBpbiBnZW5lcmF0aW5nIHByb2ZpbGUgaW5mb3JtYXRpb24gZm9yIHlvdXIgcHJvZ3JhbSBpcyB0bworY29tcGlsZSBhbmQgbGluayBpdCB3aXRoIHByb2ZpbGluZyBlbmFibGVkLgorCisgICBUbyBjb21waWxlIGEgc291cmNlIGZpbGUgZm9yIHByb2ZpbGluZywgc3BlY2lmeSB0aGUgYC1wZycgb3B0aW9uIHdoZW4KK3lvdSBydW4gdGhlIGNvbXBpbGVyLiAgKFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gdGhlIG9wdGlvbnMgeW91IG5vcm1hbGx5Cit1c2UuKQorCisgICBUbyBsaW5rIHRoZSBwcm9ncmFtIGZvciBwcm9maWxpbmcsIGlmIHlvdSB1c2UgYSBjb21waWxlciBzdWNoIGFzIGBjYycKK3RvIGRvIHRoZSBsaW5raW5nLCBzaW1wbHkgc3BlY2lmeSBgLXBnJyBpbiBhZGRpdGlvbiB0byB5b3VyIHVzdWFsCitvcHRpb25zLiAgVGhlIHNhbWUgb3B0aW9uLCBgLXBnJywgYWx0ZXJzIGVpdGhlciBjb21waWxhdGlvbiBvciBsaW5raW5nCit0byBkbyB3aGF0IGlzIG5lY2Vzc2FyeSBmb3IgcHJvZmlsaW5nLiAgSGVyZSBhcmUgZXhhbXBsZXM6CisKKyAgICAgY2MgLWcgLWMgbXlwcm9nLmMgdXRpbHMuYyAtcGcKKyAgICAgY2MgLW8gbXlwcm9nIG15cHJvZy5vIHV0aWxzLm8gLXBnCisKKyAgIFRoZSBgLXBnJyBvcHRpb24gYWxzbyB3b3JrcyB3aXRoIGEgY29tbWFuZCB0aGF0IGJvdGggY29tcGlsZXMgYW5kCitsaW5rczoKKworICAgICBjYyAtbyBteXByb2cgbXlwcm9nLmMgdXRpbHMuYyAtZyAtcGcKKworICAgTm90ZTogVGhlIGAtcGcnIG9wdGlvbiBtdXN0IGJlIHBhcnQgb2YgeW91ciBjb21waWxhdGlvbiBvcHRpb25zIGFzCit3ZWxsIGFzIHlvdXIgbGluayBvcHRpb25zLiAgSWYgaXQgaXMgbm90IHRoZW4gbm8gY2FsbC1ncmFwaCBkYXRhIHdpbGwKK2JlIGdhdGhlcmVkIGFuZCB3aGVuIHlvdSBydW4gYGdwcm9mJyB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZSBsaWtlCit0aGlzOgorCisgICAgIGdwcm9mOiBnbW9uLm91dCBmaWxlIGlzIG1pc3NpbmcgY2FsbC1ncmFwaCBkYXRhCisKKyAgIElmIHlvdSBhZGQgdGhlIGAtUScgc3dpdGNoIHRvIHN1cHByZXNzIHRoZSBwcmludGluZyBvZiB0aGUgY2FsbAorZ3JhcGggZGF0YSB5b3Ugd2lsbCBzdGlsbCBiZSBhYmxlIHRvIHNlZSB0aGUgdGltZSBzYW1wbGVzOgorCisgICAgIEZsYXQgcHJvZmlsZToKKworICAgICBFYWNoIHNhbXBsZSBjb3VudHMgYXMgMC4wMSBzZWNvbmRzLgorICAgICAgICUgICBjdW11bGF0aXZlICAgc2VsZiAgICAgICAgICAgICAgc2VsZiAgICAgdG90YWwKKyAgICAgIHRpbWUgICBzZWNvbmRzICAgc2Vjb25kcyAgICBjYWxscyAgVHMvY2FsbCAgVHMvY2FsbCAgbmFtZQorICAgICAgNDQuMTIgICAgICAwLjA3ICAgICAwLjA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6YXpMb29wCisgICAgICAzNS4yOSAgICAgIDAuMTQgICAgIDAuMDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW4KKyAgICAgIDIwLjU5ICAgICAgMC4xNyAgICAgMC4wNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF6TWlsbGlvbgorCisgICBJZiB5b3UgcnVuIHRoZSBsaW5rZXIgYGxkJyBkaXJlY3RseSBpbnN0ZWFkIG9mIHRocm91Z2ggYSBjb21waWxlcgorc3VjaCBhcyBgY2MnLCB5b3UgbWF5IGhhdmUgdG8gc3BlY2lmeSBhIHByb2ZpbGluZyBzdGFydHVwIGZpbGUKK2BnY3J0MC5vJyBhcyB0aGUgZmlyc3QgaW5wdXQgZmlsZSBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBzdGFydHVwIGZpbGUKK2BjcnQwLm8nLiAgSW4gYWRkaXRpb24sIHlvdSB3b3VsZCBwcm9iYWJseSB3YW50IHRvIHNwZWNpZnkgdGhlCitwcm9maWxpbmcgQyBsaWJyYXJ5LCBgbGliY19wLmEnLCBieSB3cml0aW5nIGAtbGNfcCcgaW5zdGVhZCBvZiB0aGUKK3VzdWFsIGAtbGMnLiAgVGhpcyBpcyBub3QgYWJzb2x1dGVseSBuZWNlc3NhcnksIGJ1dCBkb2luZyB0aGlzIGdpdmVzCit5b3UgbnVtYmVyLW9mLWNhbGxzIGluZm9ybWF0aW9uIGZvciBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucyBzdWNoIGFzCitgcmVhZCcgYW5kIGBvcGVuJy4gIEZvciBleGFtcGxlOgorCisgICAgIGxkIC1vIG15cHJvZyAvbGliL2djcnQwLm8gbXlwcm9nLm8gdXRpbHMubyAtbGNfcAorCisgICBJZiB5b3UgYXJlIHJ1bm5pbmcgdGhlIHByb2dyYW0gb24gYSBzeXN0ZW0gd2hpY2ggc3VwcG9ydHMgc2hhcmVkCitsaWJyYXJpZXMgeW91IG1heSBydW4gaW50byBwcm9ibGVtcyB3aXRoIHRoZSBwcm9maWxpbmcgc3VwcG9ydCBjb2RlIGluCithIHNoYXJlZCBsaWJyYXJ5IGJlaW5nIGNhbGxlZCBiZWZvcmUgdGhhdCBsaWJyYXJ5IGhhcyBiZWVuIGZ1bGx5Citpbml0aWFsaXNlZC4gIFRoaXMgaXMgdXN1YWxseSBkZXRlY3RlZCBieSB0aGUgcHJvZ3JhbSBlbmNvdW50ZXJpbmcgYQorc2VnbWVudGF0aW9uIGZhdWx0IGFzIHNvb24gYXMgaXQgaXMgcnVuLiAgVGhlIHNvbHV0aW9uIGlzIHRvIGxpbmsKK2FnYWluc3QgYSBzdGF0aWMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBjb250YWluaW5nIHRoZSBwcm9maWxpbmcKK3N1cHBvcnQgY29kZSwgd2hpY2ggZm9yIGBnY2MnIHVzZXJzIGNhbiBiZSBkb25lIHZpYSB0aGUgYC1zdGF0aWMnIG9yCitgLXN0YXRpYy1saWJnY2MnIGNvbW1hbmQgbGluZSBvcHRpb24uICBGb3IgZXhhbXBsZToKKworICAgICBnY2MgLWcgLXBnIC1zdGF0aWMtbGliZ2NjIG15cHJvZy5jIHV0aWxzLmMgLW8gbXlwcm9nCisKKyAgIElmIHlvdSBjb21waWxlIG9ubHkgc29tZSBvZiB0aGUgbW9kdWxlcyBvZiB0aGUgcHJvZ3JhbSB3aXRoIGAtcGcnLAoreW91IGNhbiBzdGlsbCBwcm9maWxlIHRoZSBwcm9ncmFtLCBidXQgeW91IHdvbid0IGdldCBjb21wbGV0ZQoraW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZHVsZXMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGhvdXQgYC1wZycuICBUaGUKK29ubHkgaW5mb3JtYXRpb24geW91IGdldCBmb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aG9zZSBtb2R1bGVzIGlzIHRoZQordG90YWwgdGltZSBzcGVudCBpbiB0aGVtOyB0aGVyZSBpcyBubyByZWNvcmQgb2YgaG93IG1hbnkgdGltZXMgdGhleQord2VyZSBjYWxsZWQsIG9yIGZyb20gd2hlcmUuICBUaGlzIHdpbGwgbm90IGFmZmVjdCB0aGUgZmxhdCBwcm9maWxlCisoZXhjZXB0IHRoYXQgdGhlIGBjYWxscycgZmllbGQgZm9yIHRoZSBmdW5jdGlvbnMgd2lsbCBiZSBibGFuayksIGJ1dAord2lsbCBncmVhdGx5IHJlZHVjZSB0aGUgdXNlZnVsbmVzcyBvZiB0aGUgY2FsbCBncmFwaC4KKworICAgSWYgeW91IHdpc2ggdG8gcGVyZm9ybSBsaW5lLWJ5LWxpbmUgcHJvZmlsaW5nIHlvdSBzaG91bGQgdXNlIHRoZQorYGdjb3YnIHRvb2wgaW5zdGVhZCBvZiBgZ3Byb2YnLiAgU2VlIHRoYXQgdG9vbCdzIG1hbnVhbCBvciBpbmZvIHBhZ2VzCitmb3IgbW9yZSBkZXRhaWxzIG9mIGhvdyB0byBkbyB0aGlzLgorCisgICBOb3RlLCBvbGRlciB2ZXJzaW9ucyBvZiBgZ2NjJyBwcm9kdWNlIGxpbmUtYnktbGluZSBwcm9maWxpbmcKK2luZm9ybWF0aW9uIHRoYXQgd29ya3Mgd2l0aCBgZ3Byb2YnIHJhdGhlciB0aGFuIGBnY292JyBzbyB0aGVyZSBpcworc3RpbGwgc3VwcG9ydCBmb3IgZGlzcGxheWluZyB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24gaW4gYGdwcm9mJy4gKk5vdGUKK0xpbmUtYnktbGluZSBQcm9maWxpbmc6IExpbmUtYnktbGluZS4KKworICAgSXQgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCBgZ2NjJyBpbXBsZW1lbnRzIGEKK2AtZmluc3RydW1lbnQtZnVuY3Rpb25zJyBjb21tYW5kIGxpbmUgb3B0aW9uIHdoaWNoIHdpbGwgaW5zZXJ0IGNhbGxzIHRvCitzcGVjaWFsIHVzZXIgc3VwcGxpZWQgaW5zdHJ1bWVudGF0aW9uIHJvdXRpbmVzIGF0IHRoZSBlbnRyeSBhbmQgZXhpdCBvZgorZXZlcnkgZnVuY3Rpb24gaW4gdGhlaXIgcHJvZ3JhbS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGFuCithbHRlcm5hdGl2ZSBwcm9maWxpbmcgc2NoZW1lLgorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogRXhlY3V0aW5nLCAgTmV4dDogSW52b2tpbmcsICBQcmV2OiBDb21waWxpbmcsICBVcDogVG9wCisKKzMgRXhlY3V0aW5nIHRoZSBQcm9ncmFtCisqKioqKioqKioqKioqKioqKioqKioqKgorCitPbmNlIHRoZSBwcm9ncmFtIGlzIGNvbXBpbGVkIGZvciBwcm9maWxpbmcsIHlvdSBtdXN0IHJ1biBpdCBpbiBvcmRlciB0bworZ2VuZXJhdGUgdGhlIGluZm9ybWF0aW9uIHRoYXQgYGdwcm9mJyBuZWVkcy4gIFNpbXBseSBydW4gdGhlIHByb2dyYW0gYXMKK3VzdWFsLCB1c2luZyB0aGUgbm9ybWFsIGFyZ3VtZW50cywgZmlsZSBuYW1lcywgZXRjLiAgVGhlIHByb2dyYW0gc2hvdWxkCitydW4gbm9ybWFsbHksIHByb2R1Y2luZyB0aGUgc2FtZSBvdXRwdXQgYXMgdXN1YWwuICBJdCB3aWxsLCBob3dldmVyLCBydW4KK3NvbWV3aGF0IHNsb3dlciB0aGFuIG5vcm1hbCBiZWNhdXNlIG9mIHRoZSB0aW1lIHNwZW50IGNvbGxlY3RpbmcgYW5kCit3cml0aW5nIHRoZSBwcm9maWxlIGRhdGEuCisKKyAgIFRoZSB3YXkgeW91IHJ1biB0aGUgcHJvZ3JhbS0tdGhlIGFyZ3VtZW50cyBhbmQgaW5wdXQgdGhhdCB5b3UgZ2l2ZQoraXQtLW1heSBoYXZlIGEgZHJhbWF0aWMgZWZmZWN0IG9uIHdoYXQgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24gc2hvd3MuCitUaGUgcHJvZmlsZSBkYXRhIHdpbGwgZGVzY3JpYmUgdGhlIHBhcnRzIG9mIHRoZSBwcm9ncmFtIHRoYXQgd2VyZQorYWN0aXZhdGVkIGZvciB0aGUgcGFydGljdWxhciBpbnB1dCB5b3UgdXNlLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdAorY29tbWFuZCB5b3UgZ2l2ZSB0byB5b3VyIHByb2dyYW0gaXMgdG8gcXVpdCwgdGhlIHByb2ZpbGUgZGF0YSB3aWxsIHNob3cKK3RoZSB0aW1lIHVzZWQgaW4gaW5pdGlhbGl6YXRpb24gYW5kIGluIGNsZWFudXAsIGJ1dCBub3QgbXVjaCBlbHNlLgorCisgICBZb3VyIHByb2dyYW0gd2lsbCB3cml0ZSB0aGUgcHJvZmlsZSBkYXRhIGludG8gYSBmaWxlIGNhbGxlZAorYGdtb24ub3V0JyBqdXN0IGJlZm9yZSBleGl0aW5nLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGZpbGUgY2FsbGVkCitgZ21vbi5vdXQnLCBpdHMgY29udGVudHMgYXJlIG92ZXJ3cml0dGVuLiAgVGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0bwordGVsbCB0aGUgcHJvZ3JhbSB0byB3cml0ZSB0aGUgcHJvZmlsZSBkYXRhIHVuZGVyIGEgZGlmZmVyZW50IG5hbWUsIGJ1dAoreW91IGNhbiByZW5hbWUgdGhlIGZpbGUgYWZ0ZXJ3YXJkcyBpZiB5b3UgYXJlIGNvbmNlcm5lZCB0aGF0IGl0IG1heSBiZQorb3ZlcndyaXR0ZW4uCisKKyAgIEluIG9yZGVyIHRvIHdyaXRlIHRoZSBgZ21vbi5vdXQnIGZpbGUgcHJvcGVybHksIHlvdXIgcHJvZ3JhbSBtdXN0CitleGl0IG5vcm1hbGx5OiBieSByZXR1cm5pbmcgZnJvbSBgbWFpbicgb3IgYnkgY2FsbGluZyBgZXhpdCcuICBDYWxsaW5nCit0aGUgbG93LWxldmVsIGZ1bmN0aW9uIGBfZXhpdCcgZG9lcyBub3Qgd3JpdGUgdGhlIHByb2ZpbGUgZGF0YSwgYW5kCituZWl0aGVyIGRvZXMgYWJub3JtYWwgdGVybWluYXRpb24gZHVlIHRvIGFuIHVuaGFuZGxlZCBzaWduYWwuCisKKyAgIFRoZSBgZ21vbi5vdXQnIGZpbGUgaXMgd3JpdHRlbiBpbiB0aGUgcHJvZ3JhbSdzIF9jdXJyZW50IHdvcmtpbmcKK2RpcmVjdG9yeV8gYXQgdGhlIHRpbWUgaXQgZXhpdHMuICBUaGlzIG1lYW5zIHRoYXQgaWYgeW91ciBwcm9ncmFtIGNhbGxzCitgY2hkaXInLCB0aGUgYGdtb24ub3V0JyBmaWxlIHdpbGwgYmUgbGVmdCBpbiB0aGUgbGFzdCBkaXJlY3RvcnkgeW91cgorcHJvZ3JhbSBgY2hkaXInJ2QgdG8uICBJZiB5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIGluIHRoaXMKK2RpcmVjdG9yeSwgdGhlIGZpbGUgaXMgbm90IHdyaXR0ZW4sIGFuZCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZS4KKworICAgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIEdOVSBwcm9maWxpbmcgbGlicmFyeSBtYXkgYWxzbyB3cml0ZSBhIGZpbGUKK2NhbGxlZCBgYmIub3V0Jy4gIFRoaXMgZmlsZSwgaWYgcHJlc2VudCwgY29udGFpbnMgYW4gaHVtYW4tcmVhZGFibGUKK2xpc3Rpbmcgb2YgdGhlIGJhc2ljLWJsb2NrIGV4ZWN1dGlvbiBjb3VudHMuICBVbmZvcnR1bmF0ZWx5LCB0aGUKK2FwcGVhcmFuY2Ugb2YgYSBodW1hbi1yZWFkYWJsZSBgYmIub3V0JyBtZWFucyB0aGUgYmFzaWMtYmxvY2sgY291bnRzCitkaWRuJ3QgZ2V0IHdyaXR0ZW4gaW50byBgZ21vbi5vdXQnLiAgVGhlIFBlcmwgc2NyaXB0IGBiYmNvbnYucGwnLAoraW5jbHVkZWQgd2l0aCB0aGUgYGdwcm9mJyBzb3VyY2UgZGlzdHJpYnV0aW9uLCB3aWxsIGNvbnZlcnQgYSBgYmIub3V0JworZmlsZSBpbnRvIGEgZm9ybWF0IHJlYWRhYmxlIGJ5IGBncHJvZicuICBJbnZva2UgaXQgbGlrZSB0aGlzOgorCisgICAgIGJiY29udi5wbCA8IGJiLm91dCA+IEJILURBVEEKKworICAgVGhpcyB0cmFuc2xhdGVzIHRoZSBpbmZvcm1hdGlvbiBpbiBgYmIub3V0JyBpbnRvIGEgZm9ybSB0aGF0IGBncHJvZicKK2NhbiB1bmRlcnN0YW5kLiAgQnV0IHlvdSBzdGlsbCBuZWVkIHRvIHRlbGwgYGdwcm9mJyBhYm91dCB0aGUgZXhpc3RlbmNlCitvZiB0aGlzIHRyYW5zbGF0ZWQgaW5mb3JtYXRpb24uICBUbyBkbyB0aGF0LCBpbmNsdWRlIEJCLURBVEEgb24gdGhlCitgZ3Byb2YnIGNvbW1hbmQgbGluZSwgX2Fsb25nIHdpdGggYGdtb24ub3V0J18sIGxpa2UgdGhpczoKKworICAgICBncHJvZiBPUFRJT05TIEVYRUNVVEFCTEUtRklMRSBnbW9uLm91dCBCQi1EQVRBIFtZRVQtTU9SRS1QUk9GSUxFLURBVEEtRklMRVMuLi5dIFs+IE9VVEZJTEVdCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBJbnZva2luZywgIE5leHQ6IE91dHB1dCwgIFByZXY6IEV4ZWN1dGluZywgIFVwOiBUb3AKKworNCBgZ3Byb2YnIENvbW1hbmQgU3VtbWFyeQorKioqKioqKioqKioqKioqKioqKioqKioqKgorCitBZnRlciB5b3UgaGF2ZSBhIHByb2ZpbGUgZGF0YSBmaWxlIGBnbW9uLm91dCcsIHlvdSBjYW4gcnVuIGBncHJvZicgdG8KK2ludGVycHJldCB0aGUgaW5mb3JtYXRpb24gaW4gaXQuICBUaGUgYGdwcm9mJyBwcm9ncmFtIHByaW50cyBhIGZsYXQKK3Byb2ZpbGUgYW5kIGEgY2FsbCBncmFwaCBvbiBzdGFuZGFyZCBvdXRwdXQuICBUeXBpY2FsbHkgeW91IHdvdWxkCityZWRpcmVjdCB0aGUgb3V0cHV0IG9mIGBncHJvZicgaW50byBhIGZpbGUgd2l0aCBgPicuCisKKyAgIFlvdSBydW4gYGdwcm9mJyBsaWtlIHRoaXM6CisKKyAgICAgZ3Byb2YgT1BUSU9OUyBbRVhFQ1VUQUJMRS1GSUxFIFtQUk9GSUxFLURBVEEtRklMRVMuLi5dXSBbPiBPVVRGSUxFXQorCitIZXJlIHNxdWFyZS1icmFja2V0cyBpbmRpY2F0ZSBvcHRpb25hbCBhcmd1bWVudHMuCisKKyAgIElmIHlvdSBvbWl0IHRoZSBleGVjdXRhYmxlIGZpbGUgbmFtZSwgdGhlIGZpbGUgYGEub3V0JyBpcyB1c2VkLiAgSWYKK3lvdSBnaXZlIG5vIHByb2ZpbGUgZGF0YSBmaWxlIG5hbWUsIHRoZSBmaWxlIGBnbW9uLm91dCcgaXMgdXNlZC4gIElmCithbnkgZmlsZSBpcyBub3QgaW4gdGhlIHByb3BlciBmb3JtYXQsIG9yIGlmIHRoZSBwcm9maWxlIGRhdGEgZmlsZSBkb2VzCitub3QgYXBwZWFyIHRvIGJlbG9uZyB0byB0aGUgZXhlY3V0YWJsZSBmaWxlLCBhbiBlcnJvciBtZXNzYWdlIGlzCitwcmludGVkLgorCisgICBZb3UgY2FuIGdpdmUgbW9yZSB0aGFuIG9uZSBwcm9maWxlIGRhdGEgZmlsZSBieSBlbnRlcmluZyBhbGwgdGhlaXIKK25hbWVzIGFmdGVyIHRoZSBleGVjdXRhYmxlIGZpbGUgbmFtZTsgdGhlbiB0aGUgc3RhdGlzdGljcyBpbiBhbGwgdGhlCitkYXRhIGZpbGVzIGFyZSBzdW1tZWQgdG9nZXRoZXIuCisKKyAgIFRoZSBvcmRlciBvZiB0aGVzZSBvcHRpb25zIGRvZXMgbm90IG1hdHRlci4KKworKiBNZW51OgorCisqIE91dHB1dCBPcHRpb25zOjogICAgICBDb250cm9sbGluZyBgZ3Byb2YnJ3Mgb3V0cHV0IHN0eWxlCisqIEFuYWx5c2lzIE9wdGlvbnM6OiAgICBDb250cm9sbGluZyBob3cgYGdwcm9mJyBhbmFseXplcyBpdHMgZGF0YQorKiBNaXNjZWxsYW5lb3VzIE9wdGlvbnM6OgorKiBEZXByZWNhdGVkIE9wdGlvbnM6OiAgT3B0aW9ucyB5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8gdXNlLCBidXQgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIGJlZW4gcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkKKyogU3ltc3BlY3M6OiAgICAgICAgICAgIFNwZWNpZnlpbmcgZnVuY3Rpb25zIHRvIGluY2x1ZGUgb3IgZXhjbHVkZQorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogT3V0cHV0IE9wdGlvbnMsICBOZXh0OiBBbmFseXNpcyBPcHRpb25zLCAgVXA6IEludm9raW5nCisKKzQuMSBPdXRwdXQgT3B0aW9ucworPT09PT09PT09PT09PT09PT09CisKK1RoZXNlIG9wdGlvbnMgc3BlY2lmeSB3aGljaCBvZiBzZXZlcmFsIG91dHB1dCBmb3JtYXRzIGBncHJvZicgc2hvdWxkCitwcm9kdWNlLgorCisgICBNYW55IG9mIHRoZXNlIG9wdGlvbnMgdGFrZSBhbiBvcHRpb25hbCAic3ltc3BlYyIgdG8gc3BlY2lmeQorZnVuY3Rpb25zIHRvIGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkLiAgVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkCittdWx0aXBsZSB0aW1lcywgd2l0aCBkaWZmZXJlbnQgc3ltc3BlY3MsIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSBzZXRzIG9mCitzeW1ib2xzLiAgKk5vdGUgU3ltc3BlY3M6IFN5bXNwZWNzLgorCisgICBTcGVjaWZ5aW5nIGFueSBvZiB0aGVzZSBvcHRpb25zIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCAoYC1wIC1xJyksCit3aGljaCBwcmludHMgYSBmbGF0IHByb2ZpbGUgYW5kIGNhbGwgZ3JhcGggYW5hbHlzaXMgZm9yIGFsbCBmdW5jdGlvbnMuCisKK2AtQVtTWU1TUEVDXScKK2AtLWFubm90YXRlZC1zb3VyY2VbPVNZTVNQRUNdJworICAgICBUaGUgYC1BJyBvcHRpb24gY2F1c2VzIGBncHJvZicgdG8gcHJpbnQgYW5ub3RhdGVkIHNvdXJjZSBjb2RlLiAgSWYKKyAgICAgU1lNU1BFQyBpcyBzcGVjaWZpZWQsIHByaW50IG91dHB1dCBvbmx5IGZvciBtYXRjaGluZyBzeW1ib2xzLgorICAgICAqTm90ZSBUaGUgQW5ub3RhdGVkIFNvdXJjZSBMaXN0aW5nOiBBbm5vdGF0ZWQgU291cmNlLgorCitgLWInCitgLS1icmllZicKKyAgICAgSWYgdGhlIGAtYicgb3B0aW9uIGlzIGdpdmVuLCBgZ3Byb2YnIGRvZXNuJ3QgcHJpbnQgdGhlIHZlcmJvc2UKKyAgICAgYmx1cmJzIHRoYXQgdHJ5IHRvIGV4cGxhaW4gdGhlIG1lYW5pbmcgb2YgYWxsIG9mIHRoZSBmaWVsZHMgaW4gdGhlCisgICAgIHRhYmxlcy4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBpbnRlbmQgdG8gcHJpbnQgb3V0IHRoZSBvdXRwdXQsIG9yCisgICAgIGFyZSB0aXJlZCBvZiBzZWVpbmcgdGhlIGJsdXJicy4KKworYC1DW1NZTVNQRUNdJworYC0tZXhlYy1jb3VudHNbPVNZTVNQRUNdJworICAgICBUaGUgYC1DJyBvcHRpb24gY2F1c2VzIGBncHJvZicgdG8gcHJpbnQgYSB0YWxseSBvZiBmdW5jdGlvbnMgYW5kCisgICAgIHRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCB3YXMgY2FsbGVkLiAgSWYgU1lNU1BFQyBpcyBzcGVjaWZpZWQsCisgICAgIHByaW50IHRhbGx5IG9ubHkgZm9yIG1hdGNoaW5nIHN5bWJvbHMuCisKKyAgICAgSWYgdGhlIHByb2ZpbGUgZGF0YSBmaWxlIGNvbnRhaW5zIGJhc2ljLWJsb2NrIGNvdW50IHJlY29yZHMsCisgICAgIHNwZWNpZnlpbmcgdGhlIGAtbCcgb3B0aW9uLCBhbG9uZyB3aXRoIGAtQycsIHdpbGwgY2F1c2UgYmFzaWMtYmxvY2sKKyAgICAgZXhlY3V0aW9uIGNvdW50cyB0byBiZSB0YWxsaWVkIGFuZCBkaXNwbGF5ZWQuCisKK2AtaScKK2AtLWZpbGUtaW5mbycKKyAgICAgVGhlIGAtaScgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnIHRvIGRpc3BsYXkgc3VtbWFyeSBpbmZvcm1hdGlvbgorICAgICBhYm91dCB0aGUgcHJvZmlsZSBkYXRhIGZpbGUocykgYW5kIHRoZW4gZXhpdC4gIFRoZSBudW1iZXIgb2YKKyAgICAgaGlzdG9ncmFtLCBjYWxsIGdyYXBoLCBhbmQgYmFzaWMtYmxvY2sgY291bnQgcmVjb3JkcyBpcyBkaXNwbGF5ZWQuCisKK2AtSSBESVJTJworYC0tZGlyZWN0b3J5LXBhdGg9RElSUycKKyAgICAgVGhlIGAtSScgb3B0aW9uIHNwZWNpZmllcyBhIGxpc3Qgb2Ygc2VhcmNoIGRpcmVjdG9yaWVzIGluIHdoaWNoIHRvCisgICAgIGZpbmQgc291cmNlIGZpbGVzLiAgRW52aXJvbm1lbnQgdmFyaWFibGUgR1BST0ZfUEFUSCBjYW4gYWxzbyBiZQorICAgICB1c2VkIHRvIGNvbnZleSB0aGlzIGluZm9ybWF0aW9uLiAgVXNlZCBtb3N0bHkgZm9yIGFubm90YXRlZCBzb3VyY2UKKyAgICAgb3V0cHV0LgorCitgLUpbU1lNU1BFQ10nCitgLS1uby1hbm5vdGF0ZWQtc291cmNlWz1TWU1TUEVDXScKKyAgICAgVGhlIGAtSicgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnIG5vdCB0byBwcmludCBhbm5vdGF0ZWQgc291cmNlIGNvZGUuCisgICAgIElmIFNZTVNQRUMgaXMgc3BlY2lmaWVkLCBgZ3Byb2YnIHByaW50cyBhbm5vdGF0ZWQgc291cmNlLCBidXQKKyAgICAgZXhjbHVkZXMgbWF0Y2hpbmcgc3ltYm9scy4KKworYC1MJworYC0tcHJpbnQtcGF0aCcKKyAgICAgTm9ybWFsbHksIHNvdXJjZSBmaWxlbmFtZXMgYXJlIHByaW50ZWQgd2l0aCB0aGUgcGF0aCBjb21wb25lbnQKKyAgICAgc3VwcHJlc3NlZC4gIFRoZSBgLUwnIG9wdGlvbiBjYXVzZXMgYGdwcm9mJyB0byBwcmludCB0aGUgZnVsbAorICAgICBwYXRobmFtZSBvZiBzb3VyY2UgZmlsZW5hbWVzLCB3aGljaCBpcyBkZXRlcm1pbmVkIGZyb20gc3ltYm9saWMKKyAgICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHRoZSBpbWFnZSBmaWxlIGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKKyAgICAgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciB3YXMgaW52b2tlZC4KKworYC1wW1NZTVNQRUNdJworYC0tZmxhdC1wcm9maWxlWz1TWU1TUEVDXScKKyAgICAgVGhlIGAtcCcgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnIHRvIHByaW50IGEgZmxhdCBwcm9maWxlLiAgSWYKKyAgICAgU1lNU1BFQyBpcyBzcGVjaWZpZWQsIHByaW50IGZsYXQgcHJvZmlsZSBvbmx5IGZvciBtYXRjaGluZyBzeW1ib2xzLgorICAgICAqTm90ZSBUaGUgRmxhdCBQcm9maWxlOiBGbGF0IFByb2ZpbGUuCisKK2AtUFtTWU1TUEVDXScKK2AtLW5vLWZsYXQtcHJvZmlsZVs9U1lNU1BFQ10nCisgICAgIFRoZSBgLVAnIG9wdGlvbiBjYXVzZXMgYGdwcm9mJyB0byBzdXBwcmVzcyBwcmludGluZyBhIGZsYXQgcHJvZmlsZS4KKyAgICAgSWYgU1lNU1BFQyBpcyBzcGVjaWZpZWQsIGBncHJvZicgcHJpbnRzIGEgZmxhdCBwcm9maWxlLCBidXQKKyAgICAgZXhjbHVkZXMgbWF0Y2hpbmcgc3ltYm9scy4KKworYC1xW1NZTVNQRUNdJworYC0tZ3JhcGhbPVNZTVNQRUNdJworICAgICBUaGUgYC1xJyBvcHRpb24gY2F1c2VzIGBncHJvZicgdG8gcHJpbnQgdGhlIGNhbGwgZ3JhcGggYW5hbHlzaXMuCisgICAgIElmIFNZTVNQRUMgaXMgc3BlY2lmaWVkLCBwcmludCBjYWxsIGdyYXBoIG9ubHkgZm9yIG1hdGNoaW5nIHN5bWJvbHMKKyAgICAgYW5kIHRoZWlyIGNoaWxkcmVuLiAgKk5vdGUgVGhlIENhbGwgR3JhcGg6IENhbGwgR3JhcGguCisKK2AtUVtTWU1TUEVDXScKK2AtLW5vLWdyYXBoWz1TWU1TUEVDXScKKyAgICAgVGhlIGAtUScgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnIHRvIHN1cHByZXNzIHByaW50aW5nIHRoZSBjYWxsIGdyYXBoLgorICAgICBJZiBTWU1TUEVDIGlzIHNwZWNpZmllZCwgYGdwcm9mJyBwcmludHMgYSBjYWxsIGdyYXBoLCBidXQgZXhjbHVkZXMKKyAgICAgbWF0Y2hpbmcgc3ltYm9scy4KKworYC10JworYC0tdGFibGUtbGVuZ3RoPU5VTScKKyAgICAgVGhlIGAtdCcgb3B0aW9uIGNhdXNlcyB0aGUgTlVNIG1vc3QgYWN0aXZlIHNvdXJjZSBsaW5lcyBpbiBlYWNoCisgICAgIHNvdXJjZSBmaWxlIHRvIGJlIGxpc3RlZCB3aGVuIHNvdXJjZSBhbm5vdGF0aW9uIGlzIGVuYWJsZWQuICBUaGUKKyAgICAgZGVmYXVsdCBpcyAxMC4KKworYC15JworYC0tc2VwYXJhdGUtZmlsZXMnCisgICAgIFRoaXMgb3B0aW9uIGFmZmVjdHMgYW5ub3RhdGVkIHNvdXJjZSBvdXRwdXQgb25seS4gIE5vcm1hbGx5LAorICAgICBgZ3Byb2YnIHByaW50cyBhbm5vdGF0ZWQgc291cmNlIGZpbGVzIHRvIHN0YW5kYXJkLW91dHB1dC4gIElmIHRoaXMKKyAgICAgb3B0aW9uIGlzIHNwZWNpZmllZCwgYW5ub3RhdGVkIHNvdXJjZSBmb3IgYSBmaWxlIG5hbWVkCisgICAgIGBwYXRoL0ZJTEVOQU1FJyBpcyBnZW5lcmF0ZWQgaW4gdGhlIGZpbGUgYEZJTEVOQU1FLWFubicuICBJZiB0aGUKKyAgICAgdW5kZXJseWluZyBmaWxlIHN5c3RlbSB3b3VsZCB0cnVuY2F0ZSBgRklMRU5BTUUtYW5uJyBzbyB0aGF0IGl0CisgICAgIG92ZXJ3cml0ZXMgdGhlIG9yaWdpbmFsIGBGSUxFTkFNRScsIGBncHJvZicgZ2VuZXJhdGVzIGFubm90YXRlZAorICAgICBzb3VyY2UgaW4gdGhlIGZpbGUgYEZJTEVOQU1FLmFubicgaW5zdGVhZCAoaWYgdGhlIG9yaWdpbmFsIGZpbGUKKyAgICAgbmFtZSBoYXMgYW4gZXh0ZW5zaW9uLCB0aGF0IGV4dGVuc2lvbiBpcyBfcmVwbGFjZWRfIHdpdGggYC5hbm4nKS4KKworYC1aW1NZTVNQRUNdJworYC0tbm8tZXhlYy1jb3VudHNbPVNZTVNQRUNdJworICAgICBUaGUgYC1aJyBvcHRpb24gY2F1c2VzIGBncHJvZicgbm90IHRvIHByaW50IGEgdGFsbHkgb2YgZnVuY3Rpb25zCisgICAgIGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggd2FzIGNhbGxlZC4gIElmIFNZTVNQRUMgaXMgc3BlY2lmaWVkLAorICAgICBwcmludCB0YWxseSwgYnV0IGV4Y2x1ZGUgbWF0Y2hpbmcgc3ltYm9scy4KKworYC1yJworYC0tZnVuY3Rpb24tb3JkZXJpbmcnCisgICAgIFRoZSBgLS1mdW5jdGlvbi1vcmRlcmluZycgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnIHRvIHByaW50IGEKKyAgICAgc3VnZ2VzdGVkIGZ1bmN0aW9uIG9yZGVyaW5nIGZvciB0aGUgcHJvZ3JhbSBiYXNlZCBvbiBwcm9maWxpbmcKKyAgICAgZGF0YS4gIFRoaXMgb3B0aW9uIHN1Z2dlc3RzIGFuIG9yZGVyaW5nIHdoaWNoIG1heSBpbXByb3ZlIHBhZ2luZywKKyAgICAgdGxiIGFuZCBjYWNoZSBiZWhhdmlvciBmb3IgdGhlIHByb2dyYW0gb24gc3lzdGVtcyB3aGljaCBzdXBwb3J0CisgICAgIGFyYml0cmFyeSBvcmRlcmluZyBvZiBmdW5jdGlvbnMgaW4gYW4gZXhlY3V0YWJsZS4KKworICAgICBUaGUgZXhhY3QgZGV0YWlscyBvZiBob3cgdG8gZm9yY2UgdGhlIGxpbmtlciB0byBwbGFjZSBmdW5jdGlvbnMgaW4KKyAgICAgYSBwYXJ0aWN1bGFyIG9yZGVyIGlzIHN5c3RlbSBkZXBlbmRlbnQgYW5kIG91dCBvZiB0aGUgc2NvcGUgb2YgdGhpcworICAgICBtYW51YWwuCisKK2AtUiBNQVBfRklMRScKK2AtLWZpbGUtb3JkZXJpbmcgTUFQX0ZJTEUnCisgICAgIFRoZSBgLS1maWxlLW9yZGVyaW5nJyBvcHRpb24gY2F1c2VzIGBncHJvZicgdG8gcHJpbnQgYSBzdWdnZXN0ZWQKKyAgICAgLm8gbGluayBsaW5lIG9yZGVyaW5nIGZvciB0aGUgcHJvZ3JhbSBiYXNlZCBvbiBwcm9maWxpbmcgZGF0YS4KKyAgICAgVGhpcyBvcHRpb24gc3VnZ2VzdHMgYW4gb3JkZXJpbmcgd2hpY2ggbWF5IGltcHJvdmUgcGFnaW5nLCB0bGIgYW5kCisgICAgIGNhY2hlIGJlaGF2aW9yIGZvciB0aGUgcHJvZ3JhbSBvbiBzeXN0ZW1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0CisgICAgIGFyYml0cmFyeSBvcmRlcmluZyBvZiBmdW5jdGlvbnMgaW4gYW4gZXhlY3V0YWJsZS4KKworICAgICBVc2Ugb2YgdGhlIGAtYScgYXJndW1lbnQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHdpdGggdGhpcyBvcHRpb24uCisKKyAgICAgVGhlIE1BUF9GSUxFIGFyZ3VtZW50IGlzIGEgcGF0aG5hbWUgdG8gYSBmaWxlIHdoaWNoIHByb3ZpZGVzCisgICAgIGZ1bmN0aW9uIG5hbWUgdG8gb2JqZWN0IGZpbGUgbWFwcGluZ3MuICBUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIGlzCisgICAgIHNpbWlsYXIgdG8gdGhlIG91dHB1dCBvZiB0aGUgcHJvZ3JhbSBgbm0nLgorCisgICAgICAgICAgYy1wYXJzZS5vOjAwMDAwMDAwIFQgeXlwYXJzZQorICAgICAgICAgIGMtcGFyc2UubzowMDAwMDAwNCBDIHl5ZXJyZmxhZworICAgICAgICAgIGMtbGFuZy5vOjAwMDAwMDAwIFQgbWF5YmVfb2JqY19tZXRob2RfbmFtZQorICAgICAgICAgIGMtbGFuZy5vOjAwMDAwMDAwIFQgcHJpbnRfbGFuZ19zdGF0aXN0aWNzCisgICAgICAgICAgYy1sYW5nLm86MDAwMDAwMDAgVCByZWNvZ25pemVfb2JqY19rZXl3b3JkCisgICAgICAgICAgYy1kZWNsLm86MDAwMDAwMDAgVCBwcmludF9sYW5nX2lkZW50aWZpZXIKKyAgICAgICAgICBjLWRlY2wubzowMDAwMDAwMCBUIHByaW50X2xhbmdfdHlwZQorICAgICAgICAgIC4uLgorCisgICAgIFRvIGNyZWF0ZSBhIE1BUF9GSUxFIHdpdGggR05VIGBubScsIHR5cGUgYSBjb21tYW5kIGxpa2UgYG5tCisgICAgIC0tZXh0ZXJuLW9ubHkgLS1kZWZpbmVkLW9ubHkgLXYgLS1wcmludC1maWxlLW5hbWUgcHJvZ3JhbS1uYW1lJy4KKworYC1UJworYC0tdHJhZGl0aW9uYWwnCisgICAgIFRoZSBgLVQnIG9wdGlvbiBjYXVzZXMgYGdwcm9mJyB0byBwcmludCBpdHMgb3V0cHV0IGluCisgICAgICJ0cmFkaXRpb25hbCIgQlNEIHN0eWxlLgorCitgLXcgV0lEVEgnCitgLS13aWR0aD1XSURUSCcKKyAgICAgU2V0cyB3aWR0aCBvZiBvdXRwdXQgbGluZXMgdG8gV0lEVEguICBDdXJyZW50bHkgb25seSB1c2VkIHdoZW4KKyAgICAgcHJpbnRpbmcgdGhlIGZ1bmN0aW9uIGluZGV4IGF0IHRoZSBib3R0b20gb2YgdGhlIGNhbGwgZ3JhcGguCisKK2AteCcKK2AtLWFsbC1saW5lcycKKyAgICAgVGhpcyBvcHRpb24gYWZmZWN0cyBhbm5vdGF0ZWQgc291cmNlIG91dHB1dCBvbmx5LiAgQnkgZGVmYXVsdCwKKyAgICAgb25seSB0aGUgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGJhc2ljLWJsb2NrIGFyZSBhbm5vdGF0ZWQuCisgICAgIElmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZXZlcnkgbGluZSBpbiBhIGJhc2ljLWJsb2NrIGlzCisgICAgIGFubm90YXRlZCBieSByZXBlYXRpbmcgdGhlIGFubm90YXRpb24gZm9yIHRoZSBmaXJzdCBsaW5lLiAgVGhpcworICAgICBiZWhhdmlvciBpcyBzaW1pbGFyIHRvIGB0Y292JydzIGAtYScuCisKK2AtLWRlbWFuZ2xlWz1TVFlMRV0nCitgLS1uby1kZW1hbmdsZScKKyAgICAgVGhlc2Ugb3B0aW9ucyBjb250cm9sIHdoZXRoZXIgQysrIHN5bWJvbCBuYW1lcyBzaG91bGQgYmUgZGVtYW5nbGVkCisgICAgIHdoZW4gcHJpbnRpbmcgb3V0cHV0LiAgVGhlIGRlZmF1bHQgaXMgdG8gZGVtYW5nbGUgc3ltYm9scy4gIFRoZQorICAgICBgLS1uby1kZW1hbmdsZScgb3B0aW9uIG1heSBiZSB1c2VkIHRvIHR1cm4gb2ZmIGRlbWFuZ2xpbmcuCisgICAgIERpZmZlcmVudCBjb21waWxlcnMgaGF2ZSBkaWZmZXJlbnQgbWFuZ2xpbmcgc3R5bGVzLiAgVGhlIG9wdGlvbmFsCisgICAgIGRlbWFuZ2xpbmcgc3R5bGUgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlCisgICAgIGRlbWFuZ2xpbmcgc3R5bGUgZm9yIHlvdXIgY29tcGlsZXIuCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBBbmFseXNpcyBPcHRpb25zLCAgTmV4dDogTWlzY2VsbGFuZW91cyBPcHRpb25zLCAgUHJldjogT3V0cHV0IE9wdGlvbnMsICBVcDogSW52b2tpbmcKKworNC4yIEFuYWx5c2lzIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09CisKK2AtYScKK2AtLW5vLXN0YXRpYycKKyAgICAgVGhlIGAtYScgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnIHRvIHN1cHByZXNzIHRoZSBwcmludGluZyBvZgorICAgICBzdGF0aWNhbGx5IGRlY2xhcmVkIChwcml2YXRlKSBmdW5jdGlvbnMuICAoVGhlc2UgYXJlIGZ1bmN0aW9ucworICAgICB3aG9zZSBuYW1lcyBhcmUgbm90IGxpc3RlZCBhcyBnbG9iYWwsIGFuZCB3aGljaCBhcmUgbm90IHZpc2libGUKKyAgICAgb3V0c2lkZSB0aGUgZmlsZS9mdW5jdGlvbi9ibG9jayB3aGVyZSB0aGV5IHdlcmUgZGVmaW5lZC4pICBUaW1lCisgICAgIHNwZW50IGluIHRoZXNlIGZ1bmN0aW9ucywgY2FsbHMgdG8vZnJvbSB0aGVtLCBldGMuLCB3aWxsIGFsbCBiZQorICAgICBhdHRyaWJ1dGVkIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBsb2FkZWQgZGlyZWN0bHkgYmVmb3JlIGl0IGluCisgICAgIHRoZSBleGVjdXRhYmxlIGZpbGUuICBUaGlzIG9wdGlvbiBhZmZlY3RzIGJvdGggdGhlIGZsYXQgcHJvZmlsZQorICAgICBhbmQgdGhlIGNhbGwgZ3JhcGguCisKK2AtYycKK2AtLXN0YXRpYy1jYWxsLWdyYXBoJworICAgICBUaGUgYC1jJyBvcHRpb24gY2F1c2VzIHRoZSBjYWxsIGdyYXBoIG9mIHRoZSBwcm9ncmFtIHRvIGJlCisgICAgIGF1Z21lbnRlZCBieSBhIGhldXJpc3RpYyB3aGljaCBleGFtaW5lcyB0aGUgdGV4dCBzcGFjZSBvZiB0aGUKKyAgICAgb2JqZWN0IGZpbGUgYW5kIGlkZW50aWZpZXMgZnVuY3Rpb24gY2FsbHMgaW4gdGhlIGJpbmFyeSBtYWNoaW5lCisgICAgIGNvZGUuICBTaW5jZSBub3JtYWwgY2FsbCBncmFwaCByZWNvcmRzIGFyZSBvbmx5IGdlbmVyYXRlZCB3aGVuCisgICAgIGZ1bmN0aW9ucyBhcmUgZW50ZXJlZCwgdGhpcyBvcHRpb24gaWRlbnRpZmllcyBjaGlsZHJlbiB0aGF0IGNvdWxkCisgICAgIGhhdmUgYmVlbiBjYWxsZWQsIGJ1dCBuZXZlciB3ZXJlLiAgQ2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQgd2VyZQorICAgICBub3QgY29tcGlsZWQgd2l0aCBwcm9maWxpbmcgZW5hYmxlZCBhcmUgYWxzbyBpZGVudGlmaWVkLCBidXQgb25seQorICAgICBpZiBzeW1ib2wgdGFibGUgZW50cmllcyBhcmUgcHJlc2VudCBmb3IgdGhlbS4gIENhbGxzIHRvIGR5bmFtaWMKKyAgICAgbGlicmFyeSByb3V0aW5lcyBhcmUgdHlwaWNhbGx5IF9ub3RfIGZvdW5kIGJ5IHRoaXMgb3B0aW9uLgorICAgICBQYXJlbnRzIG9yIGNoaWxkcmVuIGlkZW50aWZpZWQgdmlhIHRoaXMgaGV1cmlzdGljIGFyZSBpbmRpY2F0ZWQgaW4KKyAgICAgdGhlIGNhbGwgZ3JhcGggd2l0aCBjYWxsIGNvdW50cyBvZiBgMCcuCisKK2AtRCcKK2AtLWlnbm9yZS1ub24tZnVuY3Rpb25zJworICAgICBUaGUgYC1EJyBvcHRpb24gY2F1c2VzIGBncHJvZicgdG8gaWdub3JlIHN5bWJvbHMgd2hpY2ggYXJlIG5vdAorICAgICBrbm93biB0byBiZSBmdW5jdGlvbnMuICBUaGlzIG9wdGlvbiB3aWxsIGdpdmUgbW9yZSBhY2N1cmF0ZQorICAgICBwcm9maWxlIGRhdGEgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBzdXBwb3J0ZWQgKFNvbGFyaXMgYW5kIEhQVVggZm9yCisgICAgIGV4YW1wbGUpLgorCitgLWsgRlJPTS9UTycKKyAgICAgVGhlIGAtaycgb3B0aW9uIGFsbG93cyB5b3UgdG8gZGVsZXRlIGZyb20gdGhlIGNhbGwgZ3JhcGggYW55IGFyY3MKKyAgICAgZnJvbSBzeW1ib2xzIG1hdGNoaW5nIHN5bXNwZWMgRlJPTSB0byB0aG9zZSBtYXRjaGluZyBzeW1zcGVjIFRPLgorCitgLWwnCitgLS1saW5lJworICAgICBUaGUgYC1sJyBvcHRpb24gZW5hYmxlcyBsaW5lLWJ5LWxpbmUgcHJvZmlsaW5nLCB3aGljaCBjYXVzZXMKKyAgICAgaGlzdG9ncmFtIGhpdHMgdG8gYmUgY2hhcmdlZCB0byBpbmRpdmlkdWFsIHNvdXJjZSBjb2RlIGxpbmVzLAorICAgICBpbnN0ZWFkIG9mIGZ1bmN0aW9ucy4gIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIHdpdGggcHJvZ3JhbXMKKyAgICAgY29tcGlsZWQgYnkgb2xkZXIgdmVyc2lvbnMgb2YgdGhlIGBnY2MnIGNvbXBpbGVyLiAgTmV3ZXIgdmVyc2lvbnMKKyAgICAgb2YgYGdjYycgYXJlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgYGdjb3YnIHRvb2wgaW5zdGVhZC4KKworICAgICBJZiB0aGUgcHJvZ3JhbSB3YXMgY29tcGlsZWQgd2l0aCBiYXNpYy1ibG9jayBjb3VudGluZyBlbmFibGVkLAorICAgICB0aGlzIG9wdGlvbiB3aWxsIGFsc28gaWRlbnRpZnkgaG93IG1hbnkgdGltZXMgZWFjaCBsaW5lIG9mIGNvZGUKKyAgICAgd2FzIGV4ZWN1dGVkLiAgV2hpbGUgbGluZS1ieS1saW5lIHByb2ZpbGluZyBjYW4gaGVscCBpc29sYXRlIHdoZXJlCisgICAgIGluIGEgbGFyZ2UgZnVuY3Rpb24gYSBwcm9ncmFtIGlzIHNwZW5kaW5nIGl0cyB0aW1lLCBpdCBhbHNvCisgICAgIHNpZ25pZmljYW50bHkgaW5jcmVhc2VzIHRoZSBydW5uaW5nIHRpbWUgb2YgYGdwcm9mJywgYW5kIG1hZ25pZmllcworICAgICBzdGF0aXN0aWNhbCBpbmFjY3VyYWNpZXMuICAqTm90ZSBTdGF0aXN0aWNhbCBTYW1wbGluZyBFcnJvcjoKKyAgICAgU2FtcGxpbmcgRXJyb3IuCisKK2AtbSBOVU0nCitgLS1taW4tY291bnQ9TlVNJworICAgICBUaGlzIG9wdGlvbiBhZmZlY3RzIGV4ZWN1dGlvbiBjb3VudCBvdXRwdXQgb25seS4gIFN5bWJvbHMgdGhhdCBhcmUKKyAgICAgZXhlY3V0ZWQgbGVzcyB0aGFuIE5VTSB0aW1lcyBhcmUgc3VwcHJlc3NlZC4KKworYC1uU1lNU1BFQycKK2AtLXRpbWU9U1lNU1BFQycKKyAgICAgVGhlIGAtbicgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnLCBpbiBpdHMgY2FsbCBncmFwaCBhbmFseXNpcywgdG8KKyAgICAgb25seSBwcm9wYWdhdGUgdGltZXMgZm9yIHN5bWJvbHMgbWF0Y2hpbmcgU1lNU1BFQy4KKworYC1OU1lNU1BFQycKK2AtLW5vLXRpbWU9U1lNU1BFQycKKyAgICAgVGhlIGAtbicgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnLCBpbiBpdHMgY2FsbCBncmFwaCBhbmFseXNpcywgbm90IHRvCisgICAgIHByb3BhZ2F0ZSB0aW1lcyBmb3Igc3ltYm9scyBtYXRjaGluZyBTWU1TUEVDLgorCitgLVNGSUxFTkFNRScKK2AtLWV4dGVybmFsLXN5bWJvbC10YWJsZT1GSUxFTkFNRScKKyAgICAgVGhlIGAtUycgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnIHRvIHJlYWQgYW4gZXh0ZXJuYWwgc3ltYm9sIHRhYmxlCisgICAgIGZpbGUsIHN1Y2ggYXMgYC9wcm9jL2thbGxzeW1zJywgcmF0aGVyIHRoYW4gcmVhZCB0aGUgc3ltYm9sIHRhYmxlCisgICAgIGZyb20gdGhlIGdpdmVuIG9iamVjdCBmaWxlICh0aGUgZGVmYXVsdCBpcyBgYS5vdXQnKS4gVGhpcyBpcyB1c2VmdWwKKyAgICAgZm9yIHByb2ZpbGluZyBrZXJuZWwgbW9kdWxlcy4KKworYC16JworYC0tZGlzcGxheS11bnVzZWQtZnVuY3Rpb25zJworICAgICBJZiB5b3UgZ2l2ZSB0aGUgYC16JyBvcHRpb24sIGBncHJvZicgd2lsbCBtZW50aW9uIGFsbCBmdW5jdGlvbnMgaW4KKyAgICAgdGhlIGZsYXQgcHJvZmlsZSwgZXZlbiB0aG9zZSB0aGF0IHdlcmUgbmV2ZXIgY2FsbGVkLCBhbmQgdGhhdCBoYWQKKyAgICAgbm8gdGltZSBzcGVudCBpbiB0aGVtLiAgVGhpcyBpcyB1c2VmdWwgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUKKyAgICAgYC1jJyBvcHRpb24gZm9yIGRpc2NvdmVyaW5nIHdoaWNoIHJvdXRpbmVzIHdlcmUgbmV2ZXIgY2FsbGVkLgorCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBNaXNjZWxsYW5lb3VzIE9wdGlvbnMsICBOZXh0OiBEZXByZWNhdGVkIE9wdGlvbnMsICBQcmV2OiBBbmFseXNpcyBPcHRpb25zLCAgVXA6IEludm9raW5nCisKKzQuMyBNaXNjZWxsYW5lb3VzIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworYC1kW05VTV0nCitgLS1kZWJ1Z1s9TlVNXScKKyAgICAgVGhlIGAtZCBOVU0nIG9wdGlvbiBzcGVjaWZpZXMgZGVidWdnaW5nIG9wdGlvbnMuICBJZiBOVU0gaXMgbm90CisgICAgIHNwZWNpZmllZCwgZW5hYmxlIGFsbCBkZWJ1Z2dpbmcuICAqTm90ZSBEZWJ1Z2dpbmcgYGdwcm9mJzoKKyAgICAgRGVidWdnaW5nLgorCitgLWgnCitgLS1oZWxwJworICAgICBUaGUgYC1oJyBvcHRpb24gcHJpbnRzIGNvbW1hbmQgbGluZSB1c2FnZS4KKworYC1PTkFNRScKK2AtLWZpbGUtZm9ybWF0PU5BTUUnCisgICAgIFNlbGVjdHMgdGhlIGZvcm1hdCBvZiB0aGUgcHJvZmlsZSBkYXRhIGZpbGVzLiAgUmVjb2duaXplZCBmb3JtYXRzCisgICAgIGFyZSBgYXV0bycgKHRoZSBkZWZhdWx0KSwgYGJzZCcsIGA0LjRic2QnLCBgbWFnaWMnLCBhbmQgYHByb2YnCisgICAgIChub3QgeWV0IHN1cHBvcnRlZCkuCisKK2AtcycKK2AtLXN1bScKKyAgICAgVGhlIGAtcycgb3B0aW9uIGNhdXNlcyBgZ3Byb2YnIHRvIHN1bW1hcml6ZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgIHByb2ZpbGUgZGF0YSBmaWxlcyBpdCByZWFkIGluLCBhbmQgd3JpdGUgb3V0IGEgcHJvZmlsZSBkYXRhIGZpbGUKKyAgICAgY2FsbGVkIGBnbW9uLnN1bScsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAgICAgcHJvZmlsZSBkYXRhIGZpbGVzIHRoYXQgYGdwcm9mJyByZWFkIGluLiAgVGhlIGZpbGUgYGdtb24uc3VtJyBtYXkKKyAgICAgYmUgb25lIG9mIHRoZSBzcGVjaWZpZWQgaW5wdXQgZmlsZXM7IHRoZSBlZmZlY3Qgb2YgdGhpcyBpcyB0bworICAgICBtZXJnZSB0aGUgZGF0YSBpbiB0aGUgb3RoZXIgaW5wdXQgZmlsZXMgaW50byBgZ21vbi5zdW0nLgorCisgICAgIEV2ZW50dWFsbHkgeW91IGNhbiBydW4gYGdwcm9mJyBhZ2FpbiB3aXRob3V0IGAtcycgdG8gYW5hbHl6ZSB0aGUKKyAgICAgY3VtdWxhdGl2ZSBkYXRhIGluIHRoZSBmaWxlIGBnbW9uLnN1bScuCisKK2AtdicKK2AtLXZlcnNpb24nCisgICAgIFRoZSBgLXYnIGZsYWcgY2F1c2VzIGBncHJvZicgdG8gcHJpbnQgdGhlIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIsCisgICAgIGFuZCB0aGVuIGV4aXQuCisKKworHworRmlsZTogZ3Byb2YuaW5mbywgIE5vZGU6IERlcHJlY2F0ZWQgT3B0aW9ucywgIE5leHQ6IFN5bXNwZWNzLCAgUHJldjogTWlzY2VsbGFuZW91cyBPcHRpb25zLCAgVXA6IEludm9raW5nCisKKzQuNCBEZXByZWNhdGVkIE9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlc2Ugb3B0aW9ucyBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBuZXdlciB2ZXJzaW9ucyB0aGF0IHVzZSBzeW1zcGVjcy4KKworYC1lIEZVTkNUSU9OX05BTUUnCisgICAgIFRoZSBgLWUgRlVOQ1RJT04nIG9wdGlvbiB0ZWxscyBgZ3Byb2YnIHRvIG5vdCBwcmludCBpbmZvcm1hdGlvbgorICAgICBhYm91dCB0aGUgZnVuY3Rpb24gRlVOQ1RJT05fTkFNRSAoYW5kIGl0cyBjaGlsZHJlbi4uLikgaW4gdGhlIGNhbGwKKyAgICAgZ3JhcGguICBUaGUgZnVuY3Rpb24gd2lsbCBzdGlsbCBiZSBsaXN0ZWQgYXMgYSBjaGlsZCBvZiBhbnkKKyAgICAgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCwgYnV0IGl0cyBpbmRleCBudW1iZXIgd2lsbCBiZSBzaG93biBhcworICAgICBgW25vdCBwcmludGVkXScuICBNb3JlIHRoYW4gb25lIGAtZScgb3B0aW9uIG1heSBiZSBnaXZlbjsgb25seSBvbmUKKyAgICAgRlVOQ1RJT05fTkFNRSBtYXkgYmUgaW5kaWNhdGVkIHdpdGggZWFjaCBgLWUnIG9wdGlvbi4KKworYC1FIEZVTkNUSU9OX05BTUUnCisgICAgIFRoZSBgLUUgRlVOQ1RJT04nIG9wdGlvbiB3b3JrcyBsaWtlIHRoZSBgLWUnIG9wdGlvbiwgYnV0IHRpbWUKKyAgICAgc3BlbnQgaW4gdGhlIGZ1bmN0aW9uIChhbmQgY2hpbGRyZW4gd2hvIHdlcmUgbm90IGNhbGxlZCBmcm9tCisgICAgIGFueXdoZXJlIGVsc2UpLCB3aWxsIG5vdCBiZSB1c2VkIHRvIGNvbXB1dGUgdGhlCisgICAgIHBlcmNlbnRhZ2VzLW9mLXRpbWUgZm9yIHRoZSBjYWxsIGdyYXBoLiAgTW9yZSB0aGFuIG9uZSBgLUUnIG9wdGlvbgorICAgICBtYXkgYmUgZ2l2ZW47IG9ubHkgb25lIEZVTkNUSU9OX05BTUUgbWF5IGJlIGluZGljYXRlZCB3aXRoIGVhY2gKKyAgICAgYC1FJyBvcHRpb24uCisKK2AtZiBGVU5DVElPTl9OQU1FJworICAgICBUaGUgYC1mIEZVTkNUSU9OJyBvcHRpb24gY2F1c2VzIGBncHJvZicgdG8gbGltaXQgdGhlIGNhbGwgZ3JhcGggdG8KKyAgICAgdGhlIGZ1bmN0aW9uIEZVTkNUSU9OX05BTUUgYW5kIGl0cyBjaGlsZHJlbiAoYW5kIHRoZWlyCisgICAgIGNoaWxkcmVuLi4uKS4gIE1vcmUgdGhhbiBvbmUgYC1mJyBvcHRpb24gbWF5IGJlIGdpdmVuOyBvbmx5IG9uZQorICAgICBGVU5DVElPTl9OQU1FIG1heSBiZSBpbmRpY2F0ZWQgd2l0aCBlYWNoIGAtZicgb3B0aW9uLgorCitgLUYgRlVOQ1RJT05fTkFNRScKKyAgICAgVGhlIGAtRiBGVU5DVElPTicgb3B0aW9uIHdvcmtzIGxpa2UgdGhlIGAtZicgb3B0aW9uLCBidXQgb25seSB0aW1lCisgICAgIHNwZW50IGluIHRoZSBmdW5jdGlvbiBhbmQgaXRzIGNoaWxkcmVuIChhbmQgdGhlaXIgY2hpbGRyZW4uLi4pCisgICAgIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgdG90YWwtdGltZSBhbmQgcGVyY2VudGFnZXMtb2YtdGltZSBmb3IKKyAgICAgdGhlIGNhbGwgZ3JhcGguICBNb3JlIHRoYW4gb25lIGAtRicgb3B0aW9uIG1heSBiZSBnaXZlbjsgb25seSBvbmUKKyAgICAgRlVOQ1RJT05fTkFNRSBtYXkgYmUgaW5kaWNhdGVkIHdpdGggZWFjaCBgLUYnIG9wdGlvbi4gIFRoZSBgLUYnCisgICAgIG9wdGlvbiBvdmVycmlkZXMgdGhlIGAtRScgb3B0aW9uLgorCisKKyAgIE5vdGUgdGhhdCBvbmx5IG9uZSBmdW5jdGlvbiBjYW4gYmUgc3BlY2lmaWVkIHdpdGggZWFjaCBgLWUnLCBgLUUnLAorYC1mJyBvciBgLUYnIG9wdGlvbi4gIFRvIHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBmdW5jdGlvbiwgdXNlIG11bHRpcGxlCitvcHRpb25zLiAgRm9yIGV4YW1wbGUsIHRoaXMgY29tbWFuZDoKKworICAgICBncHJvZiAtZSBib3JpbmcgLWYgZm9vIC1mIGJhciBteXByb2dyYW0gPiBncHJvZi5vdXRwdXQKKworbGlzdHMgaW4gdGhlIGNhbGwgZ3JhcGggYWxsIGZ1bmN0aW9ucyB0aGF0IHdlcmUgcmVhY2hlZCBmcm9tIGVpdGhlcgorYGZvbycgb3IgYGJhcicgYW5kIHdlcmUgbm90IHJlYWNoYWJsZSBmcm9tIGBib3JpbmcnLgorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogU3ltc3BlY3MsICBQcmV2OiBEZXByZWNhdGVkIE9wdGlvbnMsICBVcDogSW52b2tpbmcKKworNC41IFN5bXNwZWNzCis9PT09PT09PT09PT0KKworTWFueSBvZiB0aGUgb3V0cHV0IG9wdGlvbnMgYWxsb3cgZnVuY3Rpb25zIHRvIGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkCit1c2luZyAic3ltc3BlY3MiIChzeW1ib2wgc3BlY2lmaWNhdGlvbnMpLCB3aGljaCBvYnNlcnZlIHRoZSBmb2xsb3dpbmcKK3N5bnRheDoKKworICAgICAgIGZpbGVuYW1lX2NvbnRhaW5pbmdfYV9kb3QKKyAgICAgfCBmdW5jbmFtZV9ub3RfY29udGFpbmluZ19hX2RvdAorICAgICB8IGxpbmVudW1iZXIKKyAgICAgfCAoIFsgYW55X2ZpbGVuYW1lIF0gYDonICggYW55X2Z1bmNuYW1lIHwgbGluZW51bWJlciApICkKKworICAgSGVyZSBhcmUgc29tZSBzYW1wbGUgc3ltc3BlY3M6CisKK2BtYWluLmMnCisgICAgIFNlbGVjdHMgZXZlcnl0aGluZyBpbiBmaWxlIGBtYWluLmMnLS10aGUgZG90IGluIHRoZSBzdHJpbmcgdGVsbHMKKyAgICAgYGdwcm9mJyB0byBpbnRlcnByZXQgdGhlIHN0cmluZyBhcyBhIGZpbGVuYW1lLCByYXRoZXIgdGhhbiBhcyBhCisgICAgIGZ1bmN0aW9uIG5hbWUuICBUbyBzZWxlY3QgYSBmaWxlIHdob3NlIG5hbWUgZG9lcyBub3QgY29udGFpbiBhCisgICAgIGRvdCwgYSB0cmFpbGluZyBjb2xvbiBzaG91bGQgYmUgc3BlY2lmaWVkLiAgRm9yIGV4YW1wbGUsIGBvZGQ6JyBpcworICAgICBpbnRlcnByZXRlZCBhcyB0aGUgZmlsZSBuYW1lZCBgb2RkJy4KKworYG1haW4nCisgICAgIFNlbGVjdHMgYWxsIGZ1bmN0aW9ucyBuYW1lZCBgbWFpbicuCisKKyAgICAgTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gbmFtZQorICAgICBiZWNhdXNlIHNvbWUgb2YgdGhlIGRlZmluaXRpb25zIG1heSBiZSBsb2NhbCAoaS5lLiwgc3RhdGljKS4KKyAgICAgVW5sZXNzIGEgZnVuY3Rpb24gbmFtZSBpcyB1bmlxdWUgaW4gYSBwcm9ncmFtLCB5b3UgbXVzdCB1c2UgdGhlCisgICAgIGNvbG9uIG5vdGF0aW9uIGV4cGxhaW5lZCBiZWxvdyB0byBzcGVjaWZ5IGEgZnVuY3Rpb24gZnJvbSBhCisgICAgIHNwZWNpZmljIHNvdXJjZSBmaWxlLgorCisgICAgIFNvbWV0aW1lcywgZnVuY3Rpb24gbmFtZXMgY29udGFpbiBkb3RzLiAgSW4gc3VjaCBjYXNlcywgaXQgaXMKKyAgICAgbmVjZXNzYXJ5IHRvIGFkZCBhIGxlYWRpbmcgY29sb24gdG8gdGhlIG5hbWUuICBGb3IgZXhhbXBsZSwKKyAgICAgYDoubXVsJyBzZWxlY3RzIGZ1bmN0aW9uIGAubXVsJy4KKworICAgICBJbiBzb21lIG9iamVjdCBmaWxlIGZvcm1hdHMsIHN5bWJvbHMgaGF2ZSBhIGxlYWRpbmcgdW5kZXJzY29yZS4KKyAgICAgYGdwcm9mJyB3aWxsIG5vcm1hbGx5IG5vdCBwcmludCB0aGVzZSB1bmRlcnNjb3Jlcy4gIFdoZW4geW91IG5hbWUgYQorICAgICBzeW1ib2wgaW4gYSBzeW1zcGVjLCB5b3Ugc2hvdWxkIHR5cGUgaXQgZXhhY3RseSBhcyBgZ3Byb2YnIHByaW50cworICAgICBpdCBpbiBpdHMgb3V0cHV0LiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjb21waWxlciBwcm9kdWNlcyBhIHN5bWJvbAorICAgICBgX21haW4nIGZyb20geW91ciBgbWFpbicgZnVuY3Rpb24sIGBncHJvZicgc3RpbGwgcHJpbnRzIGl0IGFzCisgICAgIGBtYWluJyBpbiBpdHMgb3V0cHV0LCBzbyB5b3Ugc2hvdWxkIHVzZSBgbWFpbicgaW4gc3ltc3BlY3MuCisKK2BtYWluLmM6bWFpbicKKyAgICAgU2VsZWN0cyBmdW5jdGlvbiBgbWFpbicgaW4gZmlsZSBgbWFpbi5jJy4KKworYG1haW4uYzoxMzQnCisgICAgIFNlbGVjdHMgbGluZSAxMzQgaW4gZmlsZSBgbWFpbi5jJy4KKworHworRmlsZTogZ3Byb2YuaW5mbywgIE5vZGU6IE91dHB1dCwgIE5leHQ6IEluYWNjdXJhY3ksICBQcmV2OiBJbnZva2luZywgIFVwOiBUb3AKKworNSBJbnRlcnByZXRpbmcgYGdwcm9mJydzIE91dHB1dAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitgZ3Byb2YnIGNhbiBwcm9kdWNlIHNldmVyYWwgZGlmZmVyZW50IG91dHB1dCBzdHlsZXMsIHRoZSBtb3N0IGltcG9ydGFudAorb2Ygd2hpY2ggYXJlIGRlc2NyaWJlZCBiZWxvdy4gIFRoZSBzaW1wbGVzdCBvdXRwdXQgc3R5bGVzIChmaWxlCitpbmZvcm1hdGlvbiwgZXhlY3V0aW9uIGNvdW50LCBhbmQgZnVuY3Rpb24gYW5kIGZpbGUgb3JkZXJpbmcpIGFyZSBub3QKK2Rlc2NyaWJlZCBoZXJlLCBidXQgYXJlIGRvY3VtZW50ZWQgd2l0aCB0aGUgcmVzcGVjdGl2ZSBvcHRpb25zIHRoYXQKK3RyaWdnZXIgdGhlbS4gICpOb3RlIE91dHB1dCBPcHRpb25zOiBPdXRwdXQgT3B0aW9ucy4KKworKiBNZW51OgorCisqIEZsYXQgUHJvZmlsZTo6ICAgICAgICBUaGUgZmxhdCBwcm9maWxlIHNob3dzIGhvdyBtdWNoIHRpbWUgd2FzIHNwZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW5nIGRpcmVjdGx5IGluIGVhY2ggZnVuY3Rpb24uCisqIENhbGwgR3JhcGg6OiAgICAgICAgICBUaGUgY2FsbCBncmFwaCBzaG93cyB3aGljaCBmdW5jdGlvbnMgY2FsbGVkIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzLCBhbmQgaG93IG11Y2ggdGltZSBlYWNoIGZ1bmN0aW9uIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGl0cyBzdWJyb3V0aW5lIGNhbGxzIGFyZSBpbmNsdWRlZC4KKyogTGluZS1ieS1saW5lOjogICAgICAgIGBncHJvZicgY2FuIGFuYWx5emUgaW5kaXZpZHVhbCBzb3VyY2UgY29kZSBsaW5lcworKiBBbm5vdGF0ZWQgU291cmNlOjogICAgVGhlIGFubm90YXRlZCBzb3VyY2UgbGlzdGluZyBkaXNwbGF5cyBzb3VyY2UgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsZWQgd2l0aCBleGVjdXRpb24gY291bnRzCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBGbGF0IFByb2ZpbGUsICBOZXh0OiBDYWxsIEdyYXBoLCAgVXA6IE91dHB1dAorCis1LjEgVGhlIEZsYXQgUHJvZmlsZQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlICJmbGF0IHByb2ZpbGUiIHNob3dzIHRoZSB0b3RhbCBhbW91bnQgb2YgdGltZSB5b3VyIHByb2dyYW0gc3BlbnQKK2V4ZWN1dGluZyBlYWNoIGZ1bmN0aW9uLiAgVW5sZXNzIHRoZSBgLXonIG9wdGlvbiBpcyBnaXZlbiwgZnVuY3Rpb25zCit3aXRoIG5vIGFwcGFyZW50IHRpbWUgc3BlbnQgaW4gdGhlbSwgYW5kIG5vIGFwcGFyZW50IGNhbGxzIHRvIHRoZW0sIGFyZQorbm90IG1lbnRpb25lZC4gIE5vdGUgdGhhdCBpZiBhIGZ1bmN0aW9uIHdhcyBub3QgY29tcGlsZWQgZm9yIHByb2ZpbGluZywKK2FuZCBkaWRuJ3QgcnVuIGxvbmcgZW5vdWdoIHRvIHNob3cgdXAgb24gdGhlIHByb2dyYW0gY291bnRlciBoaXN0b2dyYW0sCitpdCB3aWxsIGJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBmdW5jdGlvbiB0aGF0IHdhcyBuZXZlciBjYWxsZWQuCisKKyAgIFRoaXMgaXMgcGFydCBvZiBhIGZsYXQgcHJvZmlsZSBmb3IgYSBzbWFsbCBwcm9ncmFtOgorCisgICAgIEZsYXQgcHJvZmlsZToKKworICAgICBFYWNoIHNhbXBsZSBjb3VudHMgYXMgMC4wMSBzZWNvbmRzLgorICAgICAgICUgICBjdW11bGF0aXZlICAgc2VsZiAgICAgICAgICAgICAgc2VsZiAgICAgdG90YWwKKyAgICAgIHRpbWUgICBzZWNvbmRzICAgc2Vjb25kcyAgICBjYWxscyAgbXMvY2FsbCAgbXMvY2FsbCAgbmFtZQorICAgICAgMzMuMzQgICAgICAwLjAyICAgICAwLjAyICAgICA3MjA4ICAgICAwLjAwICAgICAwLjAwICBvcGVuCisgICAgICAxNi42NyAgICAgIDAuMDMgICAgIDAuMDEgICAgICAyNDQgICAgIDAuMDQgICAgIDAuMTIgIG9mZnRpbWUKKyAgICAgIDE2LjY3ICAgICAgMC4wNCAgICAgMC4wMSAgICAgICAgOCAgICAgMS4yNSAgICAgMS4yNSAgbWVtY2NweQorICAgICAgMTYuNjcgICAgICAwLjA1ICAgICAwLjAxICAgICAgICA3ICAgICAxLjQzICAgICAxLjQzICB3cml0ZQorICAgICAgMTYuNjcgICAgICAwLjA2ICAgICAwLjAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY291bnQKKyAgICAgICAwLjAwICAgICAgMC4wNiAgICAgMC4wMCAgICAgIDIzNiAgICAgMC4wMCAgICAgMC4wMCAgdHpzZXQKKyAgICAgICAwLjAwICAgICAgMC4wNiAgICAgMC4wMCAgICAgIDE5MiAgICAgMC4wMCAgICAgMC4wMCAgdG9sb3dlcgorICAgICAgIDAuMDAgICAgICAwLjA2ICAgICAwLjAwICAgICAgIDQ3ICAgICAwLjAwICAgICAwLjAwICBzdHJsZW4KKyAgICAgICAwLjAwICAgICAgMC4wNiAgICAgMC4wMCAgICAgICA0NSAgICAgMC4wMCAgICAgMC4wMCAgc3RyY2hyCisgICAgICAgMC4wMCAgICAgIDAuMDYgICAgIDAuMDAgICAgICAgIDEgICAgIDAuMDAgICAgNTAuMDAgIG1haW4KKyAgICAgICAwLjAwICAgICAgMC4wNiAgICAgMC4wMCAgICAgICAgMSAgICAgMC4wMCAgICAgMC4wMCAgbWVtY3B5CisgICAgICAgMC4wMCAgICAgIDAuMDYgICAgIDAuMDAgICAgICAgIDEgICAgIDAuMDAgICAgMTAuMTEgIHByaW50CisgICAgICAgMC4wMCAgICAgIDAuMDYgICAgIDAuMDAgICAgICAgIDEgICAgIDAuMDAgICAgIDAuMDAgIHByb2ZpbAorICAgICAgIDAuMDAgICAgICAwLjA2ICAgICAwLjAwICAgICAgICAxICAgICAwLjAwICAgIDUwLjAwICByZXBvcnQKKyAgICAgLi4uCisKK1RoZSBmdW5jdGlvbnMgYXJlIHNvcnRlZCBmaXJzdCBieSBkZWNyZWFzaW5nIHJ1bi10aW1lIHNwZW50IGluIHRoZW0sCit0aGVuIGJ5IGRlY3JlYXNpbmcgbnVtYmVyIG9mIGNhbGxzLCB0aGVuIGFscGhhYmV0aWNhbGx5IGJ5IG5hbWUuICBUaGUKK2Z1bmN0aW9ucyBgbWNvdW50JyBhbmQgYHByb2ZpbCcgYXJlIHBhcnQgb2YgdGhlIHByb2ZpbGluZyBhcHBhcmF0dXMgYW5kCithcHBlYXIgaW4gZXZlcnkgZmxhdCBwcm9maWxlOyB0aGVpciB0aW1lIGdpdmVzIGEgbWVhc3VyZSBvZiB0aGUgYW1vdW50CitvZiBvdmVyaGVhZCBkdWUgdG8gcHJvZmlsaW5nLgorCisgICBKdXN0IGJlZm9yZSB0aGUgY29sdW1uIGhlYWRlcnMsIGEgc3RhdGVtZW50IGFwcGVhcnMgaW5kaWNhdGluZyBob3cKK211Y2ggdGltZSBlYWNoIHNhbXBsZSBjb3VudGVkIGFzLiAgVGhpcyAic2FtcGxpbmcgcGVyaW9kIiBlc3RpbWF0ZXMgdGhlCittYXJnaW4gb2YgZXJyb3IgaW4gZWFjaCBvZiB0aGUgdGltZSBmaWd1cmVzLiAgQSB0aW1lIGZpZ3VyZSB0aGF0IGlzIG5vdAorbXVjaCBsYXJnZXIgdGhhbiB0aGlzIGlzIG5vdCByZWxpYWJsZS4gIEluIHRoaXMgZXhhbXBsZSwgZWFjaCBzYW1wbGUKK2NvdW50ZWQgYXMgMC4wMSBzZWNvbmRzLCBzdWdnZXN0aW5nIGEgMTAwIEh6IHNhbXBsaW5nIHJhdGUuICBUaGUKK3Byb2dyYW0ncyB0b3RhbCBleGVjdXRpb24gdGltZSB3YXMgMC4wNiBzZWNvbmRzLCBhcyBpbmRpY2F0ZWQgYnkgdGhlCitgY3VtdWxhdGl2ZSBzZWNvbmRzJyBmaWVsZC4gIFNpbmNlIGVhY2ggc2FtcGxlIGNvdW50ZWQgZm9yIDAuMDEKK3NlY29uZHMsIHRoaXMgbWVhbnMgb25seSBzaXggc2FtcGxlcyB3ZXJlIHRha2VuIGR1cmluZyB0aGUgcnVuLiAgVHdvIG9mCit0aGUgc2FtcGxlcyBvY2N1cnJlZCB3aGlsZSB0aGUgcHJvZ3JhbSB3YXMgaW4gdGhlIGBvcGVuJyBmdW5jdGlvbiwgYXMKK2luZGljYXRlZCBieSB0aGUgYHNlbGYgc2Vjb25kcycgZmllbGQuICBFYWNoIG9mIHRoZSBvdGhlciBmb3VyIHNhbXBsZXMKK29jY3VycmVkIG9uZSBlYWNoIGluIGBvZmZ0aW1lJywgYG1lbWNjcHknLCBgd3JpdGUnLCBhbmQgYG1jb3VudCcuCitTaW5jZSBvbmx5IHNpeCBzYW1wbGVzIHdlcmUgdGFrZW4sIG5vbmUgb2YgdGhlc2UgdmFsdWVzIGNhbiBiZSByZWdhcmRlZAorYXMgcGFydGljdWxhcmx5IHJlbGlhYmxlLiAgSW4gYW5vdGhlciBydW4sIHRoZSBgc2VsZiBzZWNvbmRzJyBmaWVsZCBmb3IKK2BtY291bnQnIG1pZ2h0IHdlbGwgYmUgYDAuMDAnIG9yIGAwLjAyJy4gICpOb3RlIFN0YXRpc3RpY2FsIFNhbXBsaW5nCitFcnJvcjogU2FtcGxpbmcgRXJyb3IsIGZvciBhIGNvbXBsZXRlIGRpc2N1c3Npb24uCisKKyAgIFRoZSByZW1haW5pbmcgZnVuY3Rpb25zIGluIHRoZSBsaXN0aW5nICh0aG9zZSB3aG9zZSBgc2VsZiBzZWNvbmRzJworZmllbGQgaXMgYDAuMDAnKSBkaWRuJ3QgYXBwZWFyIGluIHRoZSBoaXN0b2dyYW0gc2FtcGxlcyBhdCBhbGwuCitIb3dldmVyLCB0aGUgY2FsbCBncmFwaCBpbmRpY2F0ZWQgdGhhdCB0aGV5IHdlcmUgY2FsbGVkLCBzbyB0aGVyZWZvcmUKK3RoZXkgYXJlIGxpc3RlZCwgc29ydGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgYnkgdGhlIGBjYWxscycgZmllbGQuCitDbGVhcmx5IHNvbWUgdGltZSB3YXMgc3BlbnQgZXhlY3V0aW5nIHRoZXNlIGZ1bmN0aW9ucywgYnV0IHRoZSBwYXVjaXR5CitvZiBoaXN0b2dyYW0gc2FtcGxlcyBwcmV2ZW50cyBhbnkgZGV0ZXJtaW5hdGlvbiBvZiBob3cgbXVjaCB0aW1lIGVhY2gKK3Rvb2suCisKKyAgIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIGluIGVhY2ggbGluZSBtZWFuOgorCitgJSB0aW1lJworICAgICBUaGlzIGlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBleGVjdXRpb24gdGltZSB5b3VyIHByb2dyYW0KKyAgICAgc3BlbnQgaW4gdGhpcyBmdW5jdGlvbi4gIFRoZXNlIHNob3VsZCBhbGwgYWRkIHVwIHRvIDEwMCUuCisKK2BjdW11bGF0aXZlIHNlY29uZHMnCisgICAgIFRoaXMgaXMgdGhlIGN1bXVsYXRpdmUgdG90YWwgbnVtYmVyIG9mIHNlY29uZHMgdGhlIGNvbXB1dGVyIHNwZW50CisgICAgIGV4ZWN1dGluZyB0aGlzIGZ1bmN0aW9ucywgcGx1cyB0aGUgdGltZSBzcGVudCBpbiBhbGwgdGhlIGZ1bmN0aW9ucworICAgICBhYm92ZSB0aGlzIG9uZSBpbiB0aGlzIHRhYmxlLgorCitgc2VsZiBzZWNvbmRzJworICAgICBUaGlzIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBhY2NvdW50ZWQgZm9yIGJ5IHRoaXMgZnVuY3Rpb24gYWxvbmUuCisgICAgIFRoZSBmbGF0IHByb2ZpbGUgbGlzdGluZyBpcyBzb3J0ZWQgZmlyc3QgYnkgdGhpcyBudW1iZXIuCisKK2BjYWxscycKKyAgICAgVGhpcyBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRpbWVzIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkLiAgSWYgdGhlCisgICAgIGZ1bmN0aW9uIHdhcyBuZXZlciBjYWxsZWQsIG9yIHRoZSBudW1iZXIgb2YgdGltZXMgaXQgd2FzIGNhbGxlZAorICAgICBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAocHJvYmFibHkgYmVjYXVzZSB0aGUgZnVuY3Rpb24gd2FzIG5vdAorICAgICBjb21waWxlZCB3aXRoIHByb2ZpbGluZyBlbmFibGVkKSwgdGhlICJjYWxscyIgZmllbGQgaXMgYmxhbmsuCisKK2BzZWxmIG1zL2NhbGwnCisgICAgIFRoaXMgcmVwcmVzZW50cyB0aGUgYXZlcmFnZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNwZW50IGluIHRoaXMKKyAgICAgZnVuY3Rpb24gcGVyIGNhbGwsIGlmIHRoaXMgZnVuY3Rpb24gaXMgcHJvZmlsZWQuICBPdGhlcndpc2UsIHRoaXMKKyAgICAgZmllbGQgaXMgYmxhbmsgZm9yIHRoaXMgZnVuY3Rpb24uCisKK2B0b3RhbCBtcy9jYWxsJworICAgICBUaGlzIHJlcHJlc2VudHMgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzcGVudCBpbiB0aGlzCisgICAgIGZ1bmN0aW9uIGFuZCBpdHMgZGVzY2VuZGFudHMgcGVyIGNhbGwsIGlmIHRoaXMgZnVuY3Rpb24gaXMKKyAgICAgcHJvZmlsZWQuICBPdGhlcndpc2UsIHRoaXMgZmllbGQgaXMgYmxhbmsgZm9yIHRoaXMgZnVuY3Rpb24uICBUaGlzCisgICAgIGlzIHRoZSBvbmx5IGZpZWxkIGluIHRoZSBmbGF0IHByb2ZpbGUgdGhhdCB1c2VzIGNhbGwgZ3JhcGgKKyAgICAgYW5hbHlzaXMuCisKK2BuYW1lJworICAgICBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gICBUaGUgZmxhdCBwcm9maWxlIGlzIHNvcnRlZCBieQorICAgICB0aGlzIGZpZWxkIGFscGhhYmV0aWNhbGx5IGFmdGVyIHRoZSAic2VsZiBzZWNvbmRzIiBhbmQgImNhbGxzIgorICAgICBmaWVsZHMgYXJlIHNvcnRlZC4KKworHworRmlsZTogZ3Byb2YuaW5mbywgIE5vZGU6IENhbGwgR3JhcGgsICBOZXh0OiBMaW5lLWJ5LWxpbmUsICBQcmV2OiBGbGF0IFByb2ZpbGUsICBVcDogT3V0cHV0CisKKzUuMiBUaGUgQ2FsbCBHcmFwaAorPT09PT09PT09PT09PT09PT09CisKK1RoZSAiY2FsbCBncmFwaCIgc2hvd3MgaG93IG11Y2ggdGltZSB3YXMgc3BlbnQgaW4gZWFjaCBmdW5jdGlvbiBhbmQgaXRzCitjaGlsZHJlbi4gIEZyb20gdGhpcyBpbmZvcm1hdGlvbiwgeW91IGNhbiBmaW5kIGZ1bmN0aW9ucyB0aGF0LCB3aGlsZQordGhleSB0aGVtc2VsdmVzIG1heSBub3QgaGF2ZSB1c2VkIG11Y2ggdGltZSwgY2FsbGVkIG90aGVyIGZ1bmN0aW9ucwordGhhdCBkaWQgdXNlIHVudXN1YWwgYW1vdW50cyBvZiB0aW1lLgorCisgICBIZXJlIGlzIGEgc2FtcGxlIGNhbGwgZnJvbSBhIHNtYWxsIHByb2dyYW0uICBUaGlzIGNhbGwgY2FtZSBmcm9tIHRoZQorc2FtZSBgZ3Byb2YnIHJ1biBhcyB0aGUgZmxhdCBwcm9maWxlIGV4YW1wbGUgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCisKKyAgICAgZ3JhbnVsYXJpdHk6IGVhY2ggc2FtcGxlIGhpdCBjb3ZlcnMgMiBieXRlKHMpIGZvciAyMC4wMCUgb2YgMC4wNSBzZWNvbmRzCisKKyAgICAgaW5kZXggJSB0aW1lICAgIHNlbGYgIGNoaWxkcmVuICAgIGNhbGxlZCAgICAgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwb250YW5lb3VzPgorICAgICBbMV0gICAgMTAwLjAgICAgMC4wMCAgICAwLjA1ICAgICAgICAgICAgICAgICBzdGFydCBbMV0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wNSAgICAgICAxLzEgICAgICAgICAgIG1haW4gWzJdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8yICAgICAgICAgICBvbl9leGl0IFsyOF0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgICAxLzEgICAgICAgICAgIGV4aXQgWzU5XQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEvMSAgICAgICAgICAgc3RhcnQgWzFdCisgICAgIFsyXSAgICAxMDAuMCAgICAwLjAwICAgIDAuMDUgICAgICAgMSAgICAgICAgIG1haW4gWzJdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDUgICAgICAgMS8xICAgICAgICAgICByZXBvcnQgWzNdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDUgICAgICAgMS8xICAgICAgICAgICBtYWluIFsyXQorICAgICBbM10gICAgMTAwLjAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEgICAgICAgICByZXBvcnQgWzNdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDMgICAgICAgOC84ICAgICAgICAgICB0aW1lbG9jYWwgWzZdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDEgICAgICAgMS8xICAgICAgICAgICBwcmludCBbOV0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMSAgICAgICA5LzkgICAgICAgICAgIGZnZXRzIFsxMl0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgIDEyLzM0ICAgICAgICAgIHN0cm5jbXAgPGN5Y2xlIDE+IFs0MF0KKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgICA4LzggICAgICAgICAgIGxvb2t1cCBbMjBdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8xICAgICAgICAgICBmb3BlbiBbMjFdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgOC84ICAgICAgICAgICBjaGV3dGltZSBbMjRdCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgOC8xNiAgICAgICAgICBza2lwc3BhY2UgWzQ0XQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBbNF0gICAgIDU5LjggICAgMC4wMSAgICAgICAgMC4wMiAgICAgICA4KzQ3MiAgICAgPGN5Y2xlIDIgYXMgYSB3aG9sZT4gWzRdCisgICAgICAgICAgICAgICAgICAgICAwLjAxICAgICAgICAwLjAyICAgICAyNDQrMjYwICAgICAgICAgb2ZmdGltZSA8Y3ljbGUgMj4gWzddCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgICAgICAwLjAwICAgICAyMzYrMSAgICAgICAgICAgdHpzZXQgPGN5Y2xlIDI+IFsyNl0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgVGhlIGxpbmVzIGZ1bGwgb2YgZGFzaGVzIGRpdmlkZSB0aGlzIHRhYmxlIGludG8gImVudHJpZXMiLCBvbmUgZm9yCitlYWNoIGZ1bmN0aW9uLiAgRWFjaCBlbnRyeSBoYXMgb25lIG9yIG1vcmUgbGluZXMuCisKKyAgIEluIGVhY2ggZW50cnksIHRoZSBwcmltYXJ5IGxpbmUgaXMgdGhlIG9uZSB0aGF0IHN0YXJ0cyB3aXRoIGFuIGluZGV4CitudW1iZXIgaW4gc3F1YXJlIGJyYWNrZXRzLiAgVGhlIGVuZCBvZiB0aGlzIGxpbmUgc2F5cyB3aGljaCBmdW5jdGlvbgordGhlIGVudHJ5IGlzIGZvci4gIFRoZSBwcmVjZWRpbmcgbGluZXMgaW4gdGhlIGVudHJ5IGRlc2NyaWJlIHRoZQorY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGxpbmVzIGRlc2NyaWJlIGl0cworc3Vicm91dGluZXMgKGFsc28gY2FsbGVkICJjaGlsZHJlbiIgd2hlbiB3ZSBzcGVhayBvZiB0aGUgY2FsbCBncmFwaCkuCisKKyAgIFRoZSBlbnRyaWVzIGFyZSBzb3J0ZWQgYnkgdGltZSBzcGVudCBpbiB0aGUgZnVuY3Rpb24gYW5kIGl0cworc3Vicm91dGluZXMuCisKKyAgIFRoZSBpbnRlcm5hbCBwcm9maWxpbmcgZnVuY3Rpb24gYG1jb3VudCcgKCpub3RlIFRoZSBGbGF0IFByb2ZpbGU6CitGbGF0IFByb2ZpbGUuKSBpcyBuZXZlciBtZW50aW9uZWQgaW4gdGhlIGNhbGwgZ3JhcGguCisKKyogTWVudToKKworKiBQcmltYXJ5OjogICAgICAgRGV0YWlscyBvZiB0aGUgcHJpbWFyeSBsaW5lJ3MgY29udGVudHMuCisqIENhbGxlcnM6OiAgICAgICBEZXRhaWxzIG9mIGNhbGxlci1saW5lcycgY29udGVudHMuCisqIFN1YnJvdXRpbmVzOjogICBEZXRhaWxzIG9mIHN1YnJvdXRpbmUtbGluZXMnIGNvbnRlbnRzLgorKiBDeWNsZXM6OiAgICAgICAgV2hlbiB0aGVyZSBhcmUgY3ljbGVzIG9mIHJlY3Vyc2lvbiwKKyAgICAgICAgICAgICAgICAgICBzdWNoIGFzIGBhJyBjYWxscyBgYicgY2FsbHMgYGEnLi4uCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBQcmltYXJ5LCAgTmV4dDogQ2FsbGVycywgIFVwOiBDYWxsIEdyYXBoCisKKzUuMi4xIFRoZSBQcmltYXJ5IExpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJwcmltYXJ5IGxpbmUiIGluIGEgY2FsbCBncmFwaCBlbnRyeSBpcyB0aGUgbGluZSB0aGF0IGRlc2NyaWJlcyB0aGUKK2Z1bmN0aW9uIHdoaWNoIHRoZSBlbnRyeSBpcyBhYm91dCBhbmQgZ2l2ZXMgdGhlIG92ZXJhbGwgc3RhdGlzdGljcyBmb3IKK3RoaXMgZnVuY3Rpb24uCisKKyAgIEZvciByZWZlcmVuY2UsIHdlIHJlcGVhdCB0aGUgcHJpbWFyeSBsaW5lIGZyb20gdGhlIGVudHJ5IGZvciBmdW5jdGlvbgorYHJlcG9ydCcgaW4gb3VyIG1haW4gZXhhbXBsZSwgdG9nZXRoZXIgd2l0aCB0aGUgaGVhZGluZyBsaW5lIHRoYXQgc2hvd3MKK3RoZSBuYW1lcyBvZiB0aGUgZmllbGRzOgorCisgICAgIGluZGV4ICAlIHRpbWUgICAgc2VsZiAgY2hpbGRyZW4gY2FsbGVkICAgICBuYW1lCisgICAgIC4uLgorICAgICBbM10gICAgMTAwLjAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEgICAgICAgICByZXBvcnQgWzNdCisKKyAgIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIGluIHRoZSBwcmltYXJ5IGxpbmUgbWVhbjoKKworYGluZGV4JworICAgICBFbnRyaWVzIGFyZSBudW1iZXJlZCB3aXRoIGNvbnNlY3V0aXZlIGludGVnZXJzLiAgRWFjaCBmdW5jdGlvbgorICAgICB0aGVyZWZvcmUgaGFzIGFuIGluZGV4IG51bWJlciwgd2hpY2ggYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIGl0cyBwcmltYXJ5IGxpbmUuCisKKyAgICAgRWFjaCBjcm9zcy1yZWZlcmVuY2UgdG8gYSBmdW5jdGlvbiwgYXMgYSBjYWxsZXIgb3Igc3Vicm91dGluZSBvZgorICAgICBhbm90aGVyLCBnaXZlcyBpdHMgaW5kZXggbnVtYmVyIGFzIHdlbGwgYXMgaXRzIG5hbWUuICBUaGUgaW5kZXgKKyAgICAgbnVtYmVyIGd1aWRlcyB5b3UgaWYgeW91IHdpc2ggdG8gbG9vayBmb3IgdGhlIGVudHJ5IGZvciB0aGF0CisgICAgIGZ1bmN0aW9uLgorCitgJSB0aW1lJworICAgICBUaGlzIGlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCB0aW1lIHRoYXQgd2FzIHNwZW50IGluIHRoaXMKKyAgICAgZnVuY3Rpb24sIGluY2x1ZGluZyB0aW1lIHNwZW50IGluIHN1YnJvdXRpbmVzIGNhbGxlZCBmcm9tIHRoaXMKKyAgICAgZnVuY3Rpb24uCisKKyAgICAgVGhlIHRpbWUgc3BlbnQgaW4gdGhpcyBmdW5jdGlvbiBpcyBjb3VudGVkIGFnYWluIGZvciB0aGUgY2FsbGVycyBvZgorICAgICB0aGlzIGZ1bmN0aW9uLiAgVGhlcmVmb3JlLCBhZGRpbmcgdXAgdGhlc2UgcGVyY2VudGFnZXMgaXMKKyAgICAgbWVhbmluZ2xlc3MuCisKK2BzZWxmJworICAgICBUaGlzIGlzIHRoZSB0b3RhbCBhbW91bnQgb2YgdGltZSBzcGVudCBpbiB0aGlzIGZ1bmN0aW9uLiAgVGhpcworICAgICBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIHRoZSBudW1iZXIgcHJpbnRlZCBpbiB0aGUgYHNlY29uZHMnIGZpZWxkCisgICAgIGZvciB0aGlzIGZ1bmN0aW9uIGluIHRoZSBmbGF0IHByb2ZpbGUuCisKK2BjaGlsZHJlbicKKyAgICAgVGhpcyBpcyB0aGUgdG90YWwgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gdGhlIHN1YnJvdXRpbmUgY2FsbHMKKyAgICAgbWFkZSBieSB0aGlzIGZ1bmN0aW9uLiAgVGhpcyBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIHN1bSBvZiBhbGwgdGhlCisgICAgIGBzZWxmJyBhbmQgYGNoaWxkcmVuJyBlbnRyaWVzIG9mIHRoZSBjaGlsZHJlbiBsaXN0ZWQgZGlyZWN0bHkKKyAgICAgYmVsb3cgdGhpcyBmdW5jdGlvbi4KKworYGNhbGxlZCcKKyAgICAgVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkLgorCisgICAgIElmIHRoZSBmdW5jdGlvbiBjYWxsZWQgaXRzZWxmIHJlY3Vyc2l2ZWx5LCB0aGVyZSBhcmUgdHdvIG51bWJlcnMsCisgICAgIHNlcGFyYXRlZCBieSBhIGArJy4gIFRoZSBmaXJzdCBudW1iZXIgY291bnRzIG5vbi1yZWN1cnNpdmUgY2FsbHMsCisgICAgIGFuZCB0aGUgc2Vjb25kIGNvdW50cyByZWN1cnNpdmUgY2FsbHMuCisKKyAgICAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBmdW5jdGlvbiBgcmVwb3J0JyB3YXMgY2FsbGVkIG9uY2UgZnJvbQorICAgICBgbWFpbicuCisKK2BuYW1lJworICAgICBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgVGhlIGluZGV4IG51bWJlciBpcworICAgICByZXBlYXRlZCBhZnRlciBpdC4KKworICAgICBJZiB0aGUgZnVuY3Rpb24gaXMgcGFydCBvZiBhIGN5Y2xlIG9mIHJlY3Vyc2lvbiwgdGhlIGN5Y2xlIG51bWJlcgorICAgICBpcyBwcmludGVkIGJldHdlZW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSBhbmQgdGhlIGluZGV4IG51bWJlciAoKm5vdGUKKyAgICAgSG93IE11dHVhbGx5IFJlY3Vyc2l2ZSBGdW5jdGlvbnMgQXJlIERlc2NyaWJlZDogQ3ljbGVzLikuICBGb3IKKyAgICAgZXhhbXBsZSwgaWYgZnVuY3Rpb24gYGdudXJyJyBpcyBwYXJ0IG9mIGN5Y2xlIG51bWJlciBvbmUsIGFuZCBoYXMKKyAgICAgaW5kZXggbnVtYmVyIHR3ZWx2ZSwgaXRzIHByaW1hcnkgbGluZSB3b3VsZCBiZSBlbmQgbGlrZSB0aGlzOgorCisgICAgICAgICAgZ251cnIgPGN5Y2xlIDE+IFsxMl0KKworHworRmlsZTogZ3Byb2YuaW5mbywgIE5vZGU6IENhbGxlcnMsICBOZXh0OiBTdWJyb3V0aW5lcywgIFByZXY6IFByaW1hcnksICBVcDogQ2FsbCBHcmFwaAorCis1LjIuMiBMaW5lcyBmb3IgYSBGdW5jdGlvbidzIENhbGxlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGZ1bmN0aW9uJ3MgZW50cnkgaGFzIGEgbGluZSBmb3IgZWFjaCBmdW5jdGlvbiBpdCB3YXMgY2FsbGVkIGJ5LgorVGhlc2UgbGluZXMnIGZpZWxkcyBjb3JyZXNwb25kIHRvIHRoZSBmaWVsZHMgb2YgdGhlIHByaW1hcnkgbGluZSwgYnV0Cit0aGVpciBtZWFuaW5ncyBhcmUgZGlmZmVyZW50IGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVuY2UgaW4gY29udGV4dC4KKworICAgRm9yIHJlZmVyZW5jZSwgd2UgcmVwZWF0IHR3byBsaW5lcyBmcm9tIHRoZSBlbnRyeSBmb3IgdGhlIGZ1bmN0aW9uCitgcmVwb3J0JywgdGhlIHByaW1hcnkgbGluZSBhbmQgb25lIGNhbGxlci1saW5lIHByZWNlZGluZyBpdCwgdG9nZXRoZXIKK3dpdGggdGhlIGhlYWRpbmcgbGluZSB0aGF0IHNob3dzIHRoZSBuYW1lcyBvZiB0aGUgZmllbGRzOgorCisgICAgIGluZGV4ICAlIHRpbWUgICAgc2VsZiAgY2hpbGRyZW4gY2FsbGVkICAgICBuYW1lCisgICAgIC4uLgorICAgICAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEvMSAgICAgICAgICAgbWFpbiBbMl0KKyAgICAgWzNdICAgIDEwMC4wICAgIDAuMDAgICAgMC4wNSAgICAgICAxICAgICAgICAgcmVwb3J0IFszXQorCisgICBIZXJlIGFyZSB0aGUgbWVhbmluZ3Mgb2YgdGhlIGZpZWxkcyBpbiB0aGUgY2FsbGVyLWxpbmUgZm9yIGByZXBvcnQnCitjYWxsZWQgZnJvbSBgbWFpbic6CisKK2BzZWxmJworICAgICBBbiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gYHJlcG9ydCcgaXRzZWxmIHdoZW4gaXQKKyAgICAgd2FzIGNhbGxlZCBmcm9tIGBtYWluJy4KKworYGNoaWxkcmVuJworICAgICBBbiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gc3Vicm91dGluZXMgb2YgYHJlcG9ydCcKKyAgICAgd2hlbiBgcmVwb3J0JyB3YXMgY2FsbGVkIGZyb20gYG1haW4nLgorCisgICAgIFRoZSBzdW0gb2YgdGhlIGBzZWxmJyBhbmQgYGNoaWxkcmVuJyBmaWVsZHMgaXMgYW4gZXN0aW1hdGUgb2YgdGhlCisgICAgIGFtb3VudCBvZiB0aW1lIHNwZW50IHdpdGhpbiBjYWxscyB0byBgcmVwb3J0JyBmcm9tIGBtYWluJy4KKworYGNhbGxlZCcKKyAgICAgVHdvIG51bWJlcnM6IHRoZSBudW1iZXIgb2YgdGltZXMgYHJlcG9ydCcgd2FzIGNhbGxlZCBmcm9tIGBtYWluJywKKyAgICAgZm9sbG93ZWQgYnkgdGhlIHRvdGFsIG51bWJlciBvZiBub24tcmVjdXJzaXZlIGNhbGxzIHRvIGByZXBvcnQnCisgICAgIGZyb20gYWxsIGl0cyBjYWxsZXJzLgorCitgbmFtZSBhbmQgaW5kZXggbnVtYmVyJworICAgICBUaGUgbmFtZSBvZiB0aGUgY2FsbGVyIG9mIGByZXBvcnQnIHRvIHdoaWNoIHRoaXMgbGluZSBhcHBsaWVzLAorICAgICBmb2xsb3dlZCBieSB0aGUgY2FsbGVyJ3MgaW5kZXggbnVtYmVyLgorCisgICAgIE5vdCBhbGwgZnVuY3Rpb25zIGhhdmUgZW50cmllcyBpbiB0aGUgY2FsbCBncmFwaDsgc29tZSBvcHRpb25zIHRvCisgICAgIGBncHJvZicgcmVxdWVzdCB0aGUgb21pc3Npb24gb2YgY2VydGFpbiBmdW5jdGlvbnMuICBXaGVuIGEgY2FsbGVyCisgICAgIGhhcyBubyBlbnRyeSBvZiBpdHMgb3duLCBpdCBzdGlsbCBoYXMgY2FsbGVyLWxpbmVzIGluIHRoZSBlbnRyaWVzCisgICAgIG9mIHRoZSBmdW5jdGlvbnMgaXQgY2FsbHMuCisKKyAgICAgSWYgdGhlIGNhbGxlciBpcyBwYXJ0IG9mIGEgcmVjdXJzaW9uIGN5Y2xlLCB0aGUgY3ljbGUgbnVtYmVyIGlzCisgICAgIHByaW50ZWQgYmV0d2VlbiB0aGUgbmFtZSBhbmQgdGhlIGluZGV4IG51bWJlci4KKworICAgSWYgdGhlIGlkZW50aXR5IG9mIHRoZSBjYWxsZXJzIG9mIGEgZnVuY3Rpb24gY2Fubm90IGJlIGRldGVybWluZWQsIGEKK2R1bW15IGNhbGxlci1saW5lIGlzIHByaW50ZWQgd2hpY2ggaGFzIGA8c3BvbnRhbmVvdXM+JyBhcyB0aGUgImNhbGxlcidzCituYW1lIiBhbmQgYWxsIG90aGVyIGZpZWxkcyBibGFuay4gIFRoaXMgY2FuIGhhcHBlbiBmb3Igc2lnbmFsIGhhbmRsZXJzLgorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogU3Vicm91dGluZXMsICBOZXh0OiBDeWNsZXMsICBQcmV2OiBDYWxsZXJzLCAgVXA6IENhbGwgR3JhcGgKKworNS4yLjMgTGluZXMgZm9yIGEgRnVuY3Rpb24ncyBTdWJyb3V0aW5lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGZ1bmN0aW9uJ3MgZW50cnkgaGFzIGEgbGluZSBmb3IgZWFjaCBvZiBpdHMgc3Vicm91dGluZXMtLWluIG90aGVyCit3b3JkcywgYSBsaW5lIGZvciBlYWNoIG90aGVyIGZ1bmN0aW9uIHRoYXQgaXQgY2FsbGVkLiAgVGhlc2UgbGluZXMnCitmaWVsZHMgY29ycmVzcG9uZCB0byB0aGUgZmllbGRzIG9mIHRoZSBwcmltYXJ5IGxpbmUsIGJ1dCB0aGVpciBtZWFuaW5ncworYXJlIGRpZmZlcmVudCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbmNlIGluIGNvbnRleHQuCisKKyAgIEZvciByZWZlcmVuY2UsIHdlIHJlcGVhdCB0d28gbGluZXMgZnJvbSB0aGUgZW50cnkgZm9yIHRoZSBmdW5jdGlvbgorYG1haW4nLCB0aGUgcHJpbWFyeSBsaW5lIGFuZCBhIGxpbmUgZm9yIGEgc3Vicm91dGluZSwgdG9nZXRoZXIgd2l0aCB0aGUKK2hlYWRpbmcgbGluZSB0aGF0IHNob3dzIHRoZSBuYW1lcyBvZiB0aGUgZmllbGRzOgorCisgICAgIGluZGV4ICAlIHRpbWUgICAgc2VsZiAgY2hpbGRyZW4gY2FsbGVkICAgICBuYW1lCisgICAgIC4uLgorICAgICBbMl0gICAgMTAwLjAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEgICAgICAgICBtYWluIFsyXQorICAgICAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjA1ICAgICAgIDEvMSAgICAgICAgICAgcmVwb3J0IFszXQorCisgICBIZXJlIGFyZSB0aGUgbWVhbmluZ3Mgb2YgdGhlIGZpZWxkcyBpbiB0aGUgc3Vicm91dGluZS1saW5lIGZvciBgbWFpbicKK2NhbGxpbmcgYHJlcG9ydCc6CisKK2BzZWxmJworICAgICBBbiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgZGlyZWN0bHkgd2l0aGluIGByZXBvcnQnCisgICAgIHdoZW4gYHJlcG9ydCcgd2FzIGNhbGxlZCBmcm9tIGBtYWluJy4KKworYGNoaWxkcmVuJworICAgICBBbiBlc3RpbWF0ZSBvZiB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gc3Vicm91dGluZXMgb2YgYHJlcG9ydCcKKyAgICAgd2hlbiBgcmVwb3J0JyB3YXMgY2FsbGVkIGZyb20gYG1haW4nLgorCisgICAgIFRoZSBzdW0gb2YgdGhlIGBzZWxmJyBhbmQgYGNoaWxkcmVuJyBmaWVsZHMgaXMgYW4gZXN0aW1hdGUgb2YgdGhlCisgICAgIHRvdGFsIHRpbWUgc3BlbnQgaW4gY2FsbHMgdG8gYHJlcG9ydCcgZnJvbSBgbWFpbicuCisKK2BjYWxsZWQnCisgICAgIFR3byBudW1iZXJzLCB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGByZXBvcnQnIGZyb20gYG1haW4nIGZvbGxvd2VkCisgICAgIGJ5IHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9uLXJlY3Vyc2l2ZSBjYWxscyB0byBgcmVwb3J0Jy4gIFRoaXMKKyAgICAgcmF0aW8gaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IG11Y2ggb2YgYHJlcG9ydCcncyBgc2VsZicgYW5kCisgICAgIGBjaGlsZHJlbicgdGltZSBnZXRzIGNyZWRpdGVkIHRvIGBtYWluJy4gICpOb3RlIEVzdGltYXRpbmcKKyAgICAgYGNoaWxkcmVuJyBUaW1lczogQXNzdW1wdGlvbnMuCisKK2BuYW1lJworICAgICBUaGUgbmFtZSBvZiB0aGUgc3Vicm91dGluZSBvZiBgbWFpbicgdG8gd2hpY2ggdGhpcyBsaW5lIGFwcGxpZXMsCisgICAgIGZvbGxvd2VkIGJ5IHRoZSBzdWJyb3V0aW5lJ3MgaW5kZXggbnVtYmVyLgorCisgICAgIElmIHRoZSBjYWxsZXIgaXMgcGFydCBvZiBhIHJlY3Vyc2lvbiBjeWNsZSwgdGhlIGN5Y2xlIG51bWJlciBpcworICAgICBwcmludGVkIGJldHdlZW4gdGhlIG5hbWUgYW5kIHRoZSBpbmRleCBudW1iZXIuCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBDeWNsZXMsICBQcmV2OiBTdWJyb3V0aW5lcywgIFVwOiBDYWxsIEdyYXBoCisKKzUuMi40IEhvdyBNdXR1YWxseSBSZWN1cnNpdmUgRnVuY3Rpb25zIEFyZSBEZXNjcmliZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGdyYXBoIG1heSBiZSBjb21wbGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgImN5Y2xlcyBvZiByZWN1cnNpb24iCitpbiB0aGUgY2FsbCBncmFwaC4gIEEgY3ljbGUgZXhpc3RzIGlmIGEgZnVuY3Rpb24gY2FsbHMgYW5vdGhlciBmdW5jdGlvbgordGhhdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgY2FsbHMgKG9yIGFwcGVhcnMgdG8gY2FsbCkgdGhlIG9yaWdpbmFsCitmdW5jdGlvbi4gIEZvciBleGFtcGxlOiBpZiBgYScgY2FsbHMgYGInLCBhbmQgYGInIGNhbGxzIGBhJywgdGhlbiBgYScKK2FuZCBgYicgZm9ybSBhIGN5Y2xlLgorCisgICBXaGVuZXZlciB0aGVyZSBhcmUgY2FsbCBwYXRocyBib3RoIHdheXMgYmV0d2VlbiBhIHBhaXIgb2YgZnVuY3Rpb25zLAordGhleSBiZWxvbmcgdG8gdGhlIHNhbWUgY3ljbGUuICBJZiBgYScgYW5kIGBiJyBjYWxsIGVhY2ggb3RoZXIgYW5kIGBiJworYW5kIGBjJyBjYWxsIGVhY2ggb3RoZXIsIGFsbCB0aHJlZSBtYWtlIG9uZSBjeWNsZS4gIE5vdGUgdGhhdCBldmVuIGlmCitgYicgb25seSBjYWxscyBgYScgaWYgaXQgd2FzIG5vdCBjYWxsZWQgZnJvbSBgYScsIGBncHJvZicgY2Fubm90CitkZXRlcm1pbmUgdGhpcywgc28gYGEnIGFuZCBgYicgYXJlIHN0aWxsIGNvbnNpZGVyZWQgYSBjeWNsZS4KKworICAgVGhlIGN5Y2xlcyBhcmUgbnVtYmVyZWQgd2l0aCBjb25zZWN1dGl2ZSBpbnRlZ2Vycy4gIFdoZW4gYSBmdW5jdGlvbgorYmVsb25ncyB0byBhIGN5Y2xlLCBlYWNoIHRpbWUgdGhlIGZ1bmN0aW9uIG5hbWUgYXBwZWFycyBpbiB0aGUgY2FsbAorZ3JhcGggaXQgaXMgZm9sbG93ZWQgYnkgYDxjeWNsZSBOVU1CRVI+Jy4KKworICAgVGhlIHJlYXNvbiBjeWNsZXMgbWF0dGVyIGlzIHRoYXQgdGhleSBtYWtlIHRoZSB0aW1lIHZhbHVlcyBpbiB0aGUKK2NhbGwgZ3JhcGggcGFyYWRveGljYWwuICBUaGUgInRpbWUgc3BlbnQgaW4gY2hpbGRyZW4iIG9mIGBhJyBzaG91bGQKK2luY2x1ZGUgdGhlIHRpbWUgc3BlbnQgaW4gaXRzIHN1YnJvdXRpbmUgYGInIGFuZCBpbiBgYicncworc3Vicm91dGluZXMtLWJ1dCBvbmUgb2YgYGInJ3Mgc3Vicm91dGluZXMgaXMgYGEnISAgSG93IG11Y2ggb2YgYGEnJ3MKK3RpbWUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjaGlsZHJlbiBvZiBgYScsIHdoZW4gYGEnIGlzIGluZGlyZWN0bHkKK3JlY3Vyc2l2ZT8KKworICAgVGhlIHdheSBgZ3Byb2YnIHJlc29sdmVzIHRoaXMgcGFyYWRveCBpcyBieSBjcmVhdGluZyBhIHNpbmdsZSBlbnRyeQorZm9yIHRoZSBjeWNsZSBhcyBhIHdob2xlLiAgVGhlIHByaW1hcnkgbGluZSBvZiB0aGlzIGVudHJ5IGRlc2NyaWJlcyB0aGUKK3RvdGFsIHRpbWUgc3BlbnQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9ucyBvZiB0aGUgY3ljbGUuICBUaGUKKyJzdWJyb3V0aW5lcyIgb2YgdGhlIGN5Y2xlIGFyZSB0aGUgaW5kaXZpZHVhbCBmdW5jdGlvbnMgb2YgdGhlIGN5Y2xlLAorYW5kIGFsbCBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIGNhbGxlZCBkaXJlY3RseSBieSB0aGVtLiAgVGhlCisiY2FsbGVycyIgb2YgdGhlIGN5Y2xlIGFyZSB0aGUgZnVuY3Rpb25zLCBvdXRzaWRlIHRoZSBjeWNsZSwgdGhhdAorY2FsbGVkIGZ1bmN0aW9ucyBpbiB0aGUgY3ljbGUuCisKKyAgIEhlcmUgaXMgYW4gZXhhbXBsZSBwb3J0aW9uIG9mIGEgY2FsbCBncmFwaCB3aGljaCBzaG93cyBhIGN5Y2xlCitjb250YWluaW5nIGZ1bmN0aW9ucyBgYScgYW5kIGBiJy4gIFRoZSBjeWNsZSB3YXMgZW50ZXJlZCBieSBhIGNhbGwgdG8KK2BhJyBmcm9tIGBtYWluJzsgYm90aCBgYScgYW5kIGBiJyBjYWxsZWQgYGMnLgorCisgICAgIGluZGV4ICAlIHRpbWUgICAgc2VsZiAgY2hpbGRyZW4gY2FsbGVkICAgICBuYW1lCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAxLjc3ICAgICAgICAwICAgIDEvMSAgICAgICAgbWFpbiBbMl0KKyAgICAgWzNdICAgICA5MS43MSAgICAxLjc3ICAgICAgICAwICAgIDErNSAgICA8Y3ljbGUgMSBhcyBhIHdob2xlPiBbM10KKyAgICAgICAgICAgICAgICAgICAgICAxLjAyICAgICAgICAwICAgIDMgICAgICAgICAgYiA8Y3ljbGUgMT4gWzRdCisgICAgICAgICAgICAgICAgICAgICAgMC43NSAgICAgICAgMCAgICAyICAgICAgICAgIGEgPGN5Y2xlIDE+IFs1XQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAgIGEgPGN5Y2xlIDE+IFs1XQorICAgICBbNF0gICAgIDUyLjg1ICAgIDEuMDIgICAgICAgIDAgICAgMCAgICAgIGIgPGN5Y2xlIDE+IFs0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICBhIDxjeWNsZSAxPiBbNV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAwICAgIDMvNiAgICAgICAgYyBbNl0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgIDEuNzcgICAgICAgIDAgICAgMS8xICAgICAgICBtYWluIFsyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICBiIDxjeWNsZSAxPiBbNF0KKyAgICAgWzVdICAgICAzOC44NiAgICAwLjc1ICAgICAgICAwICAgIDEgICAgICBhIDxjeWNsZSAxPiBbNV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgYiA8Y3ljbGUgMT4gWzRdCisgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgMCAgICAzLzYgICAgICAgIGMgWzZdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFRoZSBlbnRpcmUgY2FsbCBncmFwaCBmb3IgdGhpcyBwcm9ncmFtIGNvbnRhaW5zIGluIGFkZGl0aW9uIGFuIGVudHJ5Citmb3IgYG1haW4nLCB3aGljaCBjYWxscyBgYScsIGFuZCBhbiBlbnRyeSBmb3IgYGMnLCB3aXRoIGNhbGxlcnMgYGEnIGFuZAorYGInLikKKworICAgICBpbmRleCAgJSB0aW1lICAgIHNlbGYgIGNoaWxkcmVuIGNhbGxlZCAgICAgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BvbnRhbmVvdXM+CisgICAgIFsxXSAgICAxMDAuMDAgICAgICAgMCAgICAgMS45MyAgICAwICAgICAgc3RhcnQgWzFdCisgICAgICAgICAgICAgICAgICAgICAgMC4xNiAgICAgMS43NyAgICAxLzEgICAgICAgIG1haW4gWzJdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAwLjE2ICAgICAxLjc3ICAgIDEvMSAgICAgICAgc3RhcnQgWzFdCisgICAgIFsyXSAgICAxMDAuMDAgICAgMC4xNiAgICAgMS43NyAgICAxICAgICAgbWFpbiBbMl0KKyAgICAgICAgICAgICAgICAgICAgICAxLjc3ICAgICAgICAwICAgIDEvMSAgICAgICAgYSA8Y3ljbGUgMT4gWzVdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAxLjc3ICAgICAgICAwICAgIDEvMSAgICAgICAgbWFpbiBbMl0KKyAgICAgWzNdICAgICA5MS43MSAgICAxLjc3ICAgICAgICAwICAgIDErNSAgICA8Y3ljbGUgMSBhcyBhIHdob2xlPiBbM10KKyAgICAgICAgICAgICAgICAgICAgICAxLjAyICAgICAgICAwICAgIDMgICAgICAgICAgYiA8Y3ljbGUgMT4gWzRdCisgICAgICAgICAgICAgICAgICAgICAgMC43NSAgICAgICAgMCAgICAyICAgICAgICAgIGEgPGN5Y2xlIDE+IFs1XQorICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgIDAgICAgNi82ICAgICAgICBjIFs2XQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAgIGEgPGN5Y2xlIDE+IFs1XQorICAgICBbNF0gICAgIDUyLjg1ICAgIDEuMDIgICAgICAgIDAgICAgMCAgICAgIGIgPGN5Y2xlIDE+IFs0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICBhIDxjeWNsZSAxPiBbNV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAwICAgIDMvNiAgICAgICAgYyBbNl0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgIDEuNzcgICAgICAgIDAgICAgMS8xICAgICAgICBtYWluIFsyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICBiIDxjeWNsZSAxPiBbNF0KKyAgICAgWzVdICAgICAzOC44NiAgICAwLjc1ICAgICAgICAwICAgIDEgICAgICBhIDxjeWNsZSAxPiBbNV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgYiA8Y3ljbGUgMT4gWzRdCisgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgMCAgICAzLzYgICAgICAgIGMgWzZdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAwICAgIDMvNiAgICAgICAgYiA8Y3ljbGUgMT4gWzRdCisgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgMCAgICAzLzYgICAgICAgIGEgPGN5Y2xlIDE+IFs1XQorICAgICBbNl0gICAgICAwLjAwICAgICAgIDAgICAgICAgIDAgICAgNiAgICAgIGMgWzZdCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgVGhlIGBzZWxmJyBmaWVsZCBvZiB0aGUgY3ljbGUncyBwcmltYXJ5IGxpbmUgaXMgdGhlIHRvdGFsIHRpbWUgc3BlbnQKK2luIGFsbCB0aGUgZnVuY3Rpb25zIG9mIHRoZSBjeWNsZS4gIEl0IGVxdWFscyB0aGUgc3VtIG9mIHRoZSBgc2VsZicKK2ZpZWxkcyBmb3IgdGhlIGluZGl2aWR1YWwgZnVuY3Rpb25zIGluIHRoZSBjeWNsZSwgZm91bmQgaW4gdGhlIGVudHJ5IGluCit0aGUgc3Vicm91dGluZSBsaW5lcyBmb3IgdGhlc2UgZnVuY3Rpb25zLgorCisgICBUaGUgYGNoaWxkcmVuJyBmaWVsZHMgb2YgdGhlIGN5Y2xlJ3MgcHJpbWFyeSBsaW5lIGFuZCBzdWJyb3V0aW5lCitsaW5lcyBjb3VudCBvbmx5IHN1YnJvdXRpbmVzIG91dHNpZGUgdGhlIGN5Y2xlLiAgRXZlbiB0aG91Z2ggYGEnIGNhbGxzCitgYicsIHRoZSB0aW1lIHNwZW50IGluIHRob3NlIGNhbGxzIHRvIGBiJyBpcyBub3QgY291bnRlZCBpbiBgYScncworYGNoaWxkcmVuJyB0aW1lLiAgVGh1cywgd2UgZG8gbm90IGVuY291bnRlciB0aGUgcHJvYmxlbSBvZiB3aGF0IHRvIGRvCit3aGVuIHRoZSB0aW1lIGluIHRob3NlIGNhbGxzIHRvIGBiJyBpbmNsdWRlcyBpbmRpcmVjdCByZWN1cnNpdmUgY2FsbHMKK2JhY2sgdG8gYGEnLgorCisgICBUaGUgYGNoaWxkcmVuJyBmaWVsZCBvZiBhIGNhbGxlci1saW5lIGluIHRoZSBjeWNsZSdzIGVudHJ5IGVzdGltYXRlcwordGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IF9pbiB0aGUgd2hvbGUgY3ljbGVfLCBhbmQgaXRzIG90aGVyCitzdWJyb3V0aW5lcywgb24gdGhlIHRpbWVzIHdoZW4gdGhhdCBjYWxsZXIgY2FsbGVkIGEgZnVuY3Rpb24gaW4gdGhlCitjeWNsZS4KKworICAgVGhlIGBjYWxsZWQnIGZpZWxkIGluIHRoZSBwcmltYXJ5IGxpbmUgZm9yIHRoZSBjeWNsZSBoYXMgdHdvIG51bWJlcnM6CitmaXJzdCwgdGhlIG51bWJlciBvZiB0aW1lcyBmdW5jdGlvbnMgaW4gdGhlIGN5Y2xlIHdlcmUgY2FsbGVkIGJ5CitmdW5jdGlvbnMgb3V0c2lkZSB0aGUgY3ljbGU7IHNlY29uZCwgdGhlIG51bWJlciBvZiB0aW1lcyB0aGV5IHdlcmUKK2NhbGxlZCBieSBmdW5jdGlvbnMgaW4gdGhlIGN5Y2xlIChpbmNsdWRpbmcgdGltZXMgd2hlbiBhIGZ1bmN0aW9uIGluCit0aGUgY3ljbGUgY2FsbHMgaXRzZWxmKS4gIFRoaXMgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiB0aGUgdXN1YWwgc3BsaXQKK2ludG8gbm9uLXJlY3Vyc2l2ZSBhbmQgcmVjdXJzaXZlIGNhbGxzLgorCisgICBUaGUgYGNhbGxlZCcgZmllbGQgb2YgYSBzdWJyb3V0aW5lLWxpbmUgZm9yIGEgY3ljbGUgbWVtYmVyIGluIHRoZQorY3ljbGUncyBlbnRyeSBzYXlzIGhvdyBtYW55IHRpbWUgdGhhdCBmdW5jdGlvbiB3YXMgY2FsbGVkIGZyb20KK2Z1bmN0aW9ucyBpbiB0aGUgY3ljbGUuICBUaGUgdG90YWwgb2YgYWxsIHRoZXNlIGlzIHRoZSBzZWNvbmQgbnVtYmVyIGluCit0aGUgcHJpbWFyeSBsaW5lJ3MgYGNhbGxlZCcgZmllbGQuCisKKyAgIEluIHRoZSBpbmRpdmlkdWFsIGVudHJ5IGZvciBhIGZ1bmN0aW9uIGluIGEgY3ljbGUsIHRoZSBvdGhlcgorZnVuY3Rpb25zIGluIHRoZSBzYW1lIGN5Y2xlIGNhbiBhcHBlYXIgYXMgc3Vicm91dGluZXMgYW5kIGFzIGNhbGxlcnMuCitUaGVzZSBsaW5lcyBzaG93IGhvdyBtYW55IHRpbWVzIGVhY2ggZnVuY3Rpb24gaW4gdGhlIGN5Y2xlIGNhbGxlZCBvcgord2FzIGNhbGxlZCBmcm9tIGVhY2ggb3RoZXIgZnVuY3Rpb24gaW4gdGhlIGN5Y2xlLiAgVGhlIGBzZWxmJyBhbmQKK2BjaGlsZHJlbicgZmllbGRzIGluIHRoZXNlIGxpbmVzIGFyZSBibGFuayBiZWNhdXNlIG9mIHRoZSBkaWZmaWN1bHR5IG9mCitkZWZpbmluZyBtZWFuaW5ncyBmb3IgdGhlbSB3aGVuIHJlY3Vyc2lvbiBpcyBnb2luZyBvbi4KKworHworRmlsZTogZ3Byb2YuaW5mbywgIE5vZGU6IExpbmUtYnktbGluZSwgIE5leHQ6IEFubm90YXRlZCBTb3VyY2UsICBQcmV2OiBDYWxsIEdyYXBoLCAgVXA6IE91dHB1dAorCis1LjMgTGluZS1ieS1saW5lIFByb2ZpbGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworYGdwcm9mJydzIGAtbCcgb3B0aW9uIGNhdXNlcyB0aGUgcHJvZ3JhbSB0byBwZXJmb3JtICJsaW5lLWJ5LWxpbmUiCitwcm9maWxpbmcuICBJbiB0aGlzIG1vZGUsIGhpc3RvZ3JhbSBzYW1wbGVzIGFyZSBhc3NpZ25lZCBub3QgdG8KK2Z1bmN0aW9ucywgYnV0IHRvIGluZGl2aWR1YWwgbGluZXMgb2Ygc291cmNlIGNvZGUuICBUaGlzIG9ubHkgd29ya3MKK3dpdGggcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgYGdjYycgY29tcGlsZXIuCitOZXdlciB2ZXJzaW9ucyBvZiBgZ2NjJyB1c2UgYSBkaWZmZXJlbnQgcHJvZ3JhbSAtIGBnY292JyAtIHRvIGRpc3BsYXkKK2xpbmUtYnktbGluZSBwcm9maWxpbmcgaW5mb3JtYXRpb24uCisKKyAgIFdpdGggdGhlIG9sZGVyIHZlcnNpb25zIG9mIGBnY2MnIHRoZSBwcm9ncmFtIHVzdWFsbHkgaGFzIHRvIGJlCitjb21waWxlZCB3aXRoIGEgYC1nJyBvcHRpb24sIGluIGFkZGl0aW9uIHRvIGAtcGcnLCBpbiBvcmRlciB0byBnZW5lcmF0ZQorZGVidWdnaW5nIHN5bWJvbHMgZm9yIHRyYWNraW5nIHNvdXJjZSBjb2RlIGxpbmVzLiAgTm90ZSwgaW4gbXVjaCBvbGRlcgordmVyc2lvbnMgb2YgYGdjYycgdGhlIHByb2dyYW0gaGFkIHRvIGJlIGNvbXBpbGVkIHdpdGggdGhlIGAtYScgY29tbWFuZAorbGluZSBvcHRpb24gYXMgd2VsbC4KKworICAgVGhlIGZsYXQgcHJvZmlsZSBpcyB0aGUgbW9zdCB1c2VmdWwgb3V0cHV0IHRhYmxlIGluIGxpbmUtYnktbGluZQorbW9kZS4gIFRoZSBjYWxsIGdyYXBoIGlzbid0IGFzIHVzZWZ1bCBhcyBub3JtYWwsIHNpbmNlIHRoZSBjdXJyZW50Cit2ZXJzaW9uIG9mIGBncHJvZicgZG9lcyBub3QgcHJvcGFnYXRlIGNhbGwgZ3JhcGggYXJjcyBmcm9tIHNvdXJjZSBjb2RlCitsaW5lcyB0byB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uLiAgVGhlIGNhbGwgZ3JhcGggZG9lcywgaG93ZXZlciwgc2hvdworZWFjaCBsaW5lIG9mIGNvZGUgdGhhdCBjYWxsZWQgZWFjaCBmdW5jdGlvbiwgYWxvbmcgd2l0aCBhIGNvdW50LgorCisgICBIZXJlIGlzIGEgc2VjdGlvbiBvZiBgZ3Byb2YnJ3Mgb3V0cHV0LCB3aXRob3V0IGxpbmUtYnktbGluZQorcHJvZmlsaW5nLiAgTm90ZSB0aGF0IGBjdF9pbml0JyBhY2NvdW50ZWQgZm9yIGZvdXIgaGlzdG9ncmFtIGhpdHMsIGFuZAorMTMzMjcgY2FsbHMgdG8gYGluaXRfYmxvY2snLgorCisgICAgIEZsYXQgcHJvZmlsZToKKworICAgICBFYWNoIHNhbXBsZSBjb3VudHMgYXMgMC4wMSBzZWNvbmRzLgorICAgICAgICUgICBjdW11bGF0aXZlICAgc2VsZiAgICAgICAgICAgICAgc2VsZiAgICAgdG90YWwKKyAgICAgIHRpbWUgICBzZWNvbmRzICAgc2Vjb25kcyAgICBjYWxscyAgdXMvY2FsbCAgdXMvY2FsbCAgbmFtZQorICAgICAgMzAuNzcgICAgICAwLjEzICAgICAwLjA0ICAgICA2MzM1ICAgICA2LjMxICAgICA2LjMxICBjdF9pbml0CisKKworICAgICAJCSAgICAgQ2FsbCBncmFwaCAoZXhwbGFuYXRpb24gZm9sbG93cykKKworCisgICAgIGdyYW51bGFyaXR5OiBlYWNoIHNhbXBsZSBoaXQgY292ZXJzIDQgYnl0ZShzKSBmb3IgNy42OSUgb2YgMC4xMyBzZWNvbmRzCisKKyAgICAgaW5kZXggJSB0aW1lICAgIHNlbGYgIGNoaWxkcmVuICAgIGNhbGxlZCAgICAgbmFtZQorCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8xMzQ5NiAgICAgICBuYW1lX3Rvb19sb25nCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICA0MC8xMzQ5NiAgICAgICBkZWZsYXRlCisgICAgICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgIDEyOC8xMzQ5NiAgICAgICBkZWZsYXRlX2Zhc3QKKyAgICAgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgIDEzMzI3LzEzNDk2ICAgICAgIGN0X2luaXQKKyAgICAgWzddICAgICAgMC4wICAgIDAuMDAgICAgMC4wMCAgIDEzNDk2ICAgICAgICAgaW5pdF9ibG9jaworCisgICBOb3cgbGV0J3MgbG9vayBhdCBzb21lIG9mIGBncHJvZicncyBvdXRwdXQgZnJvbSB0aGUgc2FtZSBwcm9ncmFtIHJ1biwKK3RoaXMgdGltZSB3aXRoIGxpbmUtYnktbGluZSBwcm9maWxpbmcgZW5hYmxlZC4gIE5vdGUgdGhhdCBgY3RfaW5pdCcncworZm91ciBoaXN0b2dyYW0gaGl0cyBhcmUgYnJva2VuIGRvd24gaW50byBmb3VyIGxpbmVzIG9mIHNvdXJjZSBjb2RlLS1vbmUKK2hpdCBvY2N1cnJlZCBvbiBlYWNoIG9mIGxpbmVzIDM0OSwgMzUxLCAzODIgYW5kIDM4NS4gIEluIHRoZSBjYWxsIGdyYXBoLAorbm90ZSBob3cgYGN0X2luaXQnJ3MgMTMzMjcgY2FsbHMgdG8gYGluaXRfYmxvY2snIGFyZSBicm9rZW4gZG93biBpbnRvCitvbmUgY2FsbCBmcm9tIGxpbmUgMzk2LCAzMDcxIGNhbGxzIGZyb20gbGluZSAzODQsIDM3MzAgY2FsbHMgZnJvbSBsaW5lCiszODUsIGFuZCA2NTI1IGNhbGxzIGZyb20gMzg3LgorCisgICAgIEZsYXQgcHJvZmlsZToKKworICAgICBFYWNoIHNhbXBsZSBjb3VudHMgYXMgMC4wMSBzZWNvbmRzLgorICAgICAgICUgICBjdW11bGF0aXZlICAgc2VsZgorICAgICAgdGltZSAgIHNlY29uZHMgICBzZWNvbmRzICAgIGNhbGxzICBuYW1lCisgICAgICAgNy42OSAgICAgIDAuMTAgICAgIDAuMDEgICAgICAgICAgIGN0X2luaXQgKHRyZWVzLmM6MzQ5KQorICAgICAgIDcuNjkgICAgICAwLjExICAgICAwLjAxICAgICAgICAgICBjdF9pbml0ICh0cmVlcy5jOjM1MSkKKyAgICAgICA3LjY5ICAgICAgMC4xMiAgICAgMC4wMSAgICAgICAgICAgY3RfaW5pdCAodHJlZXMuYzozODIpCisgICAgICAgNy42OSAgICAgIDAuMTMgICAgIDAuMDEgICAgICAgICAgIGN0X2luaXQgKHRyZWVzLmM6Mzg1KQorCisKKyAgICAgCQkgICAgIENhbGwgZ3JhcGggKGV4cGxhbmF0aW9uIGZvbGxvd3MpCisKKworICAgICBncmFudWxhcml0eTogZWFjaCBzYW1wbGUgaGl0IGNvdmVycyA0IGJ5dGUocykgZm9yIDcuNjklIG9mIDAuMTMgc2Vjb25kcworCisgICAgICAgJSB0aW1lICAgIHNlbGYgIGNoaWxkcmVuICAgIGNhbGxlZCAgICAgbmFtZQorCisgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICAgICAxLzEzNDk2ICAgICAgIG5hbWVfdG9vX2xvbmcgKGd6aXAuYzoxNDQwKQorICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8xMzQ5NiAgICAgICBkZWZsYXRlIChkZWZsYXRlLmM6NzYzKQorICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgICAgMS8xMzQ5NiAgICAgICBjdF9pbml0ICh0cmVlcy5jOjM5NikKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgIDIvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjcyNykKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgIDQvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjY4NikKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgIDUvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjY3NSkKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgMTIvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjY3OSkKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAgMTYvMTM0OTYgICAgICAgZGVmbGF0ZSAoZGVmbGF0ZS5jOjczMCkKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgICAxMjgvMTM0OTYgICAgICAgZGVmbGF0ZV9mYXN0IChkZWZsYXRlLmM6NjU0KQorICAgICAgICAgICAgICAgICAwLjAwICAgIDAuMDAgICAgMzA3MS8xMzQ5NiAgICAgICBjdF9pbml0ICh0cmVlcy5jOjM4NCkKKyAgICAgICAgICAgICAgICAgMC4wMCAgICAwLjAwICAgIDM3MzAvMTM0OTYgICAgICAgY3RfaW5pdCAodHJlZXMuYzozODUpCisgICAgICAgICAgICAgICAgIDAuMDAgICAgMC4wMCAgICA2NTI1LzEzNDk2ICAgICAgIGN0X2luaXQgKHRyZWVzLmM6Mzg3KQorICAgICBbNl0gIDAuMCAgICAwLjAwICAgIDAuMDAgICAxMzQ5NiAgICAgICAgIGluaXRfYmxvY2sgKHRyZWVzLmM6NDA4KQorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogQW5ub3RhdGVkIFNvdXJjZSwgIFByZXY6IExpbmUtYnktbGluZSwgIFVwOiBPdXRwdXQKKworNS40IFRoZSBBbm5vdGF0ZWQgU291cmNlIExpc3RpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2BncHJvZicncyBgLUEnIG9wdGlvbiB0cmlnZ2VycyBhbiBhbm5vdGF0ZWQgc291cmNlIGxpc3RpbmcsIHdoaWNoIGxpc3RzCit0aGUgcHJvZ3JhbSdzIHNvdXJjZSBjb2RlLCBlYWNoIGZ1bmN0aW9uIGxhYmVsZWQgd2l0aCB0aGUgbnVtYmVyIG9mCit0aW1lcyBpdCB3YXMgY2FsbGVkLiAgWW91IG1heSBhbHNvIG5lZWQgdG8gc3BlY2lmeSB0aGUgYC1JJyBvcHRpb24sIGlmCitgZ3Byb2YnIGNhbid0IGZpbmQgdGhlIHNvdXJjZSBjb2RlIGZpbGVzLgorCisgICBXaXRoIG9sZGVyIHZlcnNpb25zIG9mIGBnY2MnIGNvbXBpbGluZyB3aXRoIGBnY2MgLi4uIC1nIC1wZyAtYScKK2F1Z21lbnRzIHlvdXIgcHJvZ3JhbSB3aXRoIGJhc2ljLWJsb2NrIGNvdW50aW5nIGNvZGUsIGluIGFkZGl0aW9uIHRvCitmdW5jdGlvbiBjb3VudGluZyBjb2RlLiAgVGhpcyBlbmFibGVzIGBncHJvZicgdG8gZGV0ZXJtaW5lIGhvdyBtYW55Cit0aW1lcyBlYWNoIGxpbmUgb2YgY29kZSB3YXMgZXhlY3V0ZWQuICBXaXRoIG5ld2VyIHZlcnNpb25zIG9mIGBnY2MnCitzdXBwb3J0IGZvciBkaXNwbGF5aW5nIGJhc2ljLWJsb2NrIGNvdW50cyBpcyBwcm92aWRlZCBieSB0aGUgYGdjb3YnCitwcm9ncmFtLgorCisgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiwgdGFrZW4gZnJvbSBnemlwLCB3aXRoCitsaW5lIG51bWJlcnMgYWRkZWQ6CisKKyAgICAgIDEgdWxnIHVwZGNyYyhzLCBuKQorICAgICAgMiAgICAgdWNoICpzOworICAgICAgMyAgICAgdW5zaWduZWQgbjsKKyAgICAgIDQgeworICAgICAgNSAgICAgcmVnaXN0ZXIgdWxnIGM7CisgICAgICA2CisgICAgICA3ICAgICBzdGF0aWMgdWxnIGNyYyA9ICh1bGcpMHhmZmZmZmZmZkw7CisgICAgICA4CisgICAgICA5ICAgICBpZiAocyA9PSBOVUxMKSB7CisgICAgIDEwICAgICAgICAgYyA9IDB4ZmZmZmZmZmZMOworICAgICAxMSAgICAgfSBlbHNlIHsKKyAgICAgMTIgICAgICAgICBjID0gY3JjOworICAgICAxMyAgICAgICAgIGlmIChuKSBkbyB7CisgICAgIDE0ICAgICAgICAgICAgIGMgPSBjcmNfMzJfdGFiWy4uLl07CisgICAgIDE1ICAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgMTYgICAgIH0KKyAgICAgMTcgICAgIGNyYyA9IGM7CisgICAgIDE4ICAgICByZXR1cm4gYyBeIDB4ZmZmZmZmZmZMOworICAgICAxOSB9CisKKyAgIGB1cGRjcmMnIGhhcyBhdCBsZWFzdCBmaXZlIGJhc2ljLWJsb2Nrcy4gIE9uZSBpcyB0aGUgZnVuY3Rpb24KK2l0c2VsZi4gIFRoZSBgaWYnIHN0YXRlbWVudCBvbiBsaW5lIDkgZ2VuZXJhdGVzIHR3byBtb3JlIGJhc2ljLWJsb2NrcywKK29uZSBmb3IgZWFjaCBicmFuY2ggb2YgdGhlIGBpZicuICBBIGZvdXJ0aCBiYXNpYy1ibG9jayByZXN1bHRzIGZyb20gdGhlCitgaWYnIG9uIGxpbmUgMTMsIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIGBkbycgbG9vcCBmb3JtIHRoZSBmaWZ0aAorYmFzaWMtYmxvY2suICBUaGUgY29tcGlsZXIgbWF5IGFsc28gZ2VuZXJhdGUgYWRkaXRpb25hbCBiYXNpYy1ibG9ja3MgdG8KK2hhbmRsZSB2YXJpb3VzIHNwZWNpYWwgY2FzZXMuCisKKyAgIEEgcHJvZ3JhbSBhdWdtZW50ZWQgZm9yIGJhc2ljLWJsb2NrIGNvdW50aW5nIGNhbiBiZSBhbmFseXplZCB3aXRoCitgZ3Byb2YgLWwgLUEnLiAgVGhlIGAteCcgb3B0aW9uIGlzIGFsc28gaGVscGZ1bCwgdG8gZW5zdXJlIHRoYXQgZWFjaAorbGluZSBvZiBjb2RlIGlzIGxhYmVsZWQgYXQgbGVhc3Qgb25jZS4gIEhlcmUgaXMgYHVwZGNyYycncyBhbm5vdGF0ZWQKK3NvdXJjZSBsaXN0aW5nIGZvciBhIHNhbXBsZSBgZ3ppcCcgcnVuOgorCisgICAgICAgICAgICAgICAgICAgICB1bGcgdXBkY3JjKHMsIG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgdWNoICpzOworICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG47CisgICAgICAgICAgICAgICAgIDIgLT57CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgdWxnIGM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdWxnIGNyYyA9ICh1bGcpMHhmZmZmZmZmZkw7CisKKyAgICAgICAgICAgICAgICAgMiAtPiAgICBpZiAocyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgIDEgLT4gICAgICAgIGMgPSAweGZmZmZmZmZmTDsKKyAgICAgICAgICAgICAgICAgMSAtPiAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAxIC0+ICAgICAgICBjID0gY3JjOworICAgICAgICAgICAgICAgICAxIC0+ICAgICAgICBpZiAobikgZG8geworICAgICAgICAgICAgIDI2MzEyIC0+ICAgICAgICAgICAgYyA9IGNyY18zMl90YWJbLi4uXTsKKyAgICAgMjYzMTIsMSwyNjMxMSAtPiAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIDIgLT4gICAgY3JjID0gYzsKKyAgICAgICAgICAgICAgICAgMiAtPiAgICByZXR1cm4gYyBeIDB4ZmZmZmZmZmZMOworICAgICAgICAgICAgICAgICAyIC0+fQorCisgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHR3aWNlLCBwYXNzaW5nIG9uY2UgdGhyb3VnaAorZWFjaCBicmFuY2ggb2YgdGhlIGBpZicgc3RhdGVtZW50LiAgVGhlIGJvZHkgb2YgdGhlIGBkbycgbG9vcCB3YXMKK2V4ZWN1dGVkIGEgdG90YWwgb2YgMjYzMTIgdGltZXMuICBOb3RlIGhvdyB0aGUgYHdoaWxlJyBzdGF0ZW1lbnQgaXMKK2Fubm90YXRlZC4gIEl0IGJlZ2FuIGV4ZWN1dGlvbiAyNjMxMiB0aW1lcywgb25jZSBmb3IgZWFjaCBpdGVyYXRpb24KK3Rocm91Z2ggdGhlIGxvb3AuICBPbmUgb2YgdGhvc2UgdGltZXMgKHRoZSBsYXN0IHRpbWUpIGl0IGV4aXRlZCwgd2hpbGUKK2l0IGJyYW5jaGVkIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcCAyNjMxMSB0aW1lcy4KKworHworRmlsZTogZ3Byb2YuaW5mbywgIE5vZGU6IEluYWNjdXJhY3ksICBOZXh0OiBIb3cgZG8gST8sICBQcmV2OiBPdXRwdXQsICBVcDogVG9wCisKKzYgSW5hY2N1cmFjeSBvZiBgZ3Byb2YnIE91dHB1dAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyogTWVudToKKworKiBTYW1wbGluZyBFcnJvcjo6ICAgICAgU3RhdGlzdGljYWwgbWFyZ2lucyBvZiBlcnJvcgorKiBBc3N1bXB0aW9uczo6ICAgICAgICAgRXN0aW1hdGluZyBjaGlsZHJlbiB0aW1lcworCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogU2FtcGxpbmcgRXJyb3IsICBOZXh0OiBBc3N1bXB0aW9ucywgIFVwOiBJbmFjY3VyYWN5CisKKzYuMSBTdGF0aXN0aWNhbCBTYW1wbGluZyBFcnJvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBydW4tdGltZSBmaWd1cmVzIHRoYXQgYGdwcm9mJyBnaXZlcyB5b3UgYXJlIGJhc2VkIG9uIGEgc2FtcGxpbmcKK3Byb2Nlc3MsIHNvIHRoZXkgYXJlIHN1YmplY3QgdG8gc3RhdGlzdGljYWwgaW5hY2N1cmFjeS4gIElmIGEgZnVuY3Rpb24KK3J1bnMgb25seSBhIHNtYWxsIGFtb3VudCBvZiB0aW1lLCBzbyB0aGF0IG9uIHRoZSBhdmVyYWdlIHRoZSBzYW1wbGluZworcHJvY2VzcyBvdWdodCB0byBjYXRjaCB0aGF0IGZ1bmN0aW9uIGluIHRoZSBhY3Qgb25seSBvbmNlLCB0aGVyZSBpcyBhCitwcmV0dHkgZ29vZCBjaGFuY2UgaXQgd2lsbCBhY3R1YWxseSBmaW5kIHRoYXQgZnVuY3Rpb24gemVybyB0aW1lcywgb3IKK3R3aWNlLgorCisgICBCeSBjb250cmFzdCwgdGhlIG51bWJlci1vZi1jYWxscyBhbmQgYmFzaWMtYmxvY2sgZmlndXJlcyBhcmUgZGVyaXZlZAorYnkgY291bnRpbmcsIG5vdCBzYW1wbGluZy4gIFRoZXkgYXJlIGNvbXBsZXRlbHkgYWNjdXJhdGUgYW5kIHdpbGwgbm90Cit2YXJ5IGZyb20gcnVuIHRvIHJ1biBpZiB5b3VyIHByb2dyYW0gaXMgZGV0ZXJtaW5pc3RpYyBhbmQgc2luZ2xlCit0aHJlYWRlZC4gIEluIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucywgb3Igc2luZ2xlIHRocmVhZGVkCithcHBsaWNhdGlvbnMgdGhhdCBsaW5rIHdpdGggbXVsdGktdGhyZWFkZWQgbGlicmFyaWVzLCB0aGUgY291bnRzIGFyZQorb25seSBkZXRlcm1pbmlzdGljIGlmIHRoZSBjb3VudGluZyBmdW5jdGlvbiBpcyB0aHJlYWQtc2FmZS4gIChOb3RlOgorYmV3YXJlIHRoYXQgdGhlIG1jb3VudCBjb3VudGluZyBmdW5jdGlvbiBpbiBnbGliYyBpcyBfbm90XwordGhyZWFkLXNhZmUpLiAgKk5vdGUgSW1wbGVtZW50YXRpb24gb2YgUHJvZmlsaW5nOiBJbXBsZW1lbnRhdGlvbi4KKworICAgVGhlICJzYW1wbGluZyBwZXJpb2QiIHRoYXQgaXMgcHJpbnRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmbGF0Citwcm9maWxlIHNheXMgaG93IG9mdGVuIHNhbXBsZXMgYXJlIHRha2VuLiAgVGhlIHJ1bGUgb2YgdGh1bWIgaXMgdGhhdCBhCitydW4tdGltZSBmaWd1cmUgaXMgYWNjdXJhdGUgaWYgaXQgaXMgY29uc2lkZXJhYmx5IGJpZ2dlciB0aGFuIHRoZQorc2FtcGxpbmcgcGVyaW9kLgorCisgICBUaGUgYWN0dWFsIGFtb3VudCBvZiBlcnJvciBjYW4gYmUgcHJlZGljdGVkLiAgRm9yIE4gc2FtcGxlcywgdGhlCitfZXhwZWN0ZWRfIGVycm9yIGlzIHRoZSBzcXVhcmUtcm9vdCBvZiBOLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBzYW1wbGluZworcGVyaW9kIGlzIDAuMDEgc2Vjb25kcyBhbmQgYGZvbycncyBydW4tdGltZSBpcyAxIHNlY29uZCwgTiBpcyAxMDAKK3NhbXBsZXMgKDEgc2Vjb25kLzAuMDEgc2Vjb25kcyksIHNxcnQoTikgaXMgMTAgc2FtcGxlcywgc28gdGhlIGV4cGVjdGVkCitlcnJvciBpbiBgZm9vJydzIHJ1bi10aW1lIGlzIDAuMSBzZWNvbmRzICgxMCowLjAxIHNlY29uZHMpLCBvciB0ZW4KK3BlcmNlbnQgb2YgdGhlIG9ic2VydmVkIHZhbHVlLiAgQWdhaW4sIGlmIHRoZSBzYW1wbGluZyBwZXJpb2QgaXMgMC4wMQorc2Vjb25kcyBhbmQgYGJhcicncyBydW4tdGltZSBpcyAxMDAgc2Vjb25kcywgTiBpcyAxMDAwMCBzYW1wbGVzLAorc3FydChOKSBpcyAxMDAgc2FtcGxlcywgc28gdGhlIGV4cGVjdGVkIGVycm9yIGluIGBiYXInJ3MgcnVuLXRpbWUgaXMgMQorc2Vjb25kLCBvciBvbmUgcGVyY2VudCBvZiB0aGUgb2JzZXJ2ZWQgdmFsdWUuICBJdCBpcyBsaWtlbHkgdG8gdmFyeQordGhpcyBtdWNoIF9vbiB0aGUgYXZlcmFnZV8gZnJvbSBvbmUgcHJvZmlsaW5nIHJ1biB0byB0aGUgbmV4dC4KKyhfU29tZXRpbWVzXyBpdCB3aWxsIHZhcnkgbW9yZS4pCisKKyAgIFRoaXMgZG9lcyBub3QgbWVhbiB0aGF0IGEgc21hbGwgcnVuLXRpbWUgZmlndXJlIGlzIGRldm9pZCBvZgoraW5mb3JtYXRpb24uICBJZiB0aGUgcHJvZ3JhbSdzIF90b3RhbF8gcnVuLXRpbWUgaXMgbGFyZ2UsIGEgc21hbGwKK3J1bi10aW1lIGZvciBvbmUgZnVuY3Rpb24gZG9lcyB0ZWxsIHlvdSB0aGF0IHRoYXQgZnVuY3Rpb24gdXNlZCBhbgoraW5zaWduaWZpY2FudCBmcmFjdGlvbiBvZiB0aGUgd2hvbGUgcHJvZ3JhbSdzIHRpbWUuICBVc3VhbGx5IHRoaXMgbWVhbnMKK2l0IGlzIG5vdCB3b3J0aCBvcHRpbWl6aW5nLgorCisgICBPbmUgd2F5IHRvIGdldCBtb3JlIGFjY3VyYWN5IGlzIHRvIGdpdmUgeW91ciBwcm9ncmFtIG1vcmUgKGJ1dAorc2ltaWxhcikgaW5wdXQgZGF0YSBzbyBpdCB3aWxsIHRha2UgbG9uZ2VyLiAgQW5vdGhlciB3YXkgaXMgdG8gY29tYmluZQordGhlIGRhdGEgZnJvbSBzZXZlcmFsIHJ1bnMsIHVzaW5nIHRoZSBgLXMnIG9wdGlvbiBvZiBgZ3Byb2YnLiAgSGVyZSBpcworaG93OgorCisgIDEuIFJ1biB5b3VyIHByb2dyYW0gb25jZS4KKworICAyLiBJc3N1ZSB0aGUgY29tbWFuZCBgbXYgZ21vbi5vdXQgZ21vbi5zdW0nLgorCisgIDMuIFJ1biB5b3VyIHByb2dyYW0gYWdhaW4sIHRoZSBzYW1lIGFzIGJlZm9yZS4KKworICA0LiBNZXJnZSB0aGUgbmV3IGRhdGEgaW4gYGdtb24ub3V0JyBpbnRvIGBnbW9uLnN1bScgd2l0aCB0aGlzIGNvbW1hbmQ6CisKKyAgICAgICAgICBncHJvZiAtcyBFWEVDVVRBQkxFLUZJTEUgZ21vbi5vdXQgZ21vbi5zdW0KKworICA1LiBSZXBlYXQgdGhlIGxhc3QgdHdvIHN0ZXBzIGFzIG9mdGVuIGFzIHlvdSB3aXNoLgorCisgIDYuIEFuYWx5emUgdGhlIGN1bXVsYXRpdmUgZGF0YSB1c2luZyB0aGlzIGNvbW1hbmQ6CisKKyAgICAgICAgICBncHJvZiBFWEVDVVRBQkxFLUZJTEUgZ21vbi5zdW0gPiBPVVRQVVQtRklMRQorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogQXNzdW1wdGlvbnMsICBQcmV2OiBTYW1wbGluZyBFcnJvciwgIFVwOiBJbmFjY3VyYWN5CisKKzYuMiBFc3RpbWF0aW5nIGBjaGlsZHJlbicgVGltZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU29tZSBvZiB0aGUgZmlndXJlcyBpbiB0aGUgY2FsbCBncmFwaCBhcmUgZXN0aW1hdGVzLS1mb3IgZXhhbXBsZSwgdGhlCitgY2hpbGRyZW4nIHRpbWUgdmFsdWVzIGFuZCBhbGwgdGhlIHRpbWUgZmlndXJlcyBpbiBjYWxsZXIgYW5kCitzdWJyb3V0aW5lIGxpbmVzLgorCisgICBUaGVyZSBpcyBubyBkaXJlY3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgbWVhc3VyZW1lbnRzIGluIHRoZQorcHJvZmlsZSBkYXRhIGl0c2VsZi4gIEluc3RlYWQsIGBncHJvZicgZXN0aW1hdGVzIHRoZW0gYnkgbWFraW5nIGFuCithc3N1bXB0aW9uIGFib3V0IHlvdXIgcHJvZ3JhbSB0aGF0IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSB0cnVlLgorCisgICBUaGUgYXNzdW1wdGlvbiBtYWRlIGlzIHRoYXQgdGhlIGF2ZXJhZ2UgdGltZSBzcGVudCBpbiBlYWNoIGNhbGwgdG8KK2FueSBmdW5jdGlvbiBgZm9vJyBpcyBub3QgY29ycmVsYXRlZCB3aXRoIHdobyBjYWxsZWQgYGZvbycuICBJZiBgZm9vJwordXNlZCA1IHNlY29uZHMgaW4gYWxsLCBhbmQgMi81IG9mIHRoZSBjYWxscyB0byBgZm9vJyBjYW1lIGZyb20gYGEnLAordGhlbiBgZm9vJyBjb250cmlidXRlcyAyIHNlY29uZHMgdG8gYGEnJ3MgYGNoaWxkcmVuJyB0aW1lLCBieQorYXNzdW1wdGlvbi4KKworICAgVGhpcyBhc3N1bXB0aW9uIGlzIHVzdWFsbHkgdHJ1ZSBlbm91Z2gsIGJ1dCBmb3Igc29tZSBwcm9ncmFtcyBpdCBpcworZmFyIGZyb20gdHJ1ZS4gIFN1cHBvc2UgdGhhdCBgZm9vJyByZXR1cm5zIHZlcnkgcXVpY2tseSB3aGVuIGl0cworYXJndW1lbnQgaXMgemVybzsgc3VwcG9zZSB0aGF0IGBhJyBhbHdheXMgcGFzc2VzIHplcm8gYXMgYW4gYXJndW1lbnQsCit3aGlsZSBvdGhlciBjYWxsZXJzIG9mIGBmb28nIHBhc3Mgb3RoZXIgYXJndW1lbnRzLiAgSW4gdGhpcyBwcm9ncmFtLAorYWxsIHRoZSB0aW1lIHNwZW50IGluIGBmb28nIGlzIGluIHRoZSBjYWxscyBmcm9tIGNhbGxlcnMgb3RoZXIgdGhhbiBgYScuCitCdXQgYGdwcm9mJyBoYXMgbm8gd2F5IG9mIGtub3dpbmcgdGhpczsgaXQgd2lsbCBibGluZGx5IGFuZCBpbmNvcnJlY3RseQorY2hhcmdlIDIgc2Vjb25kcyBvZiB0aW1lIGluIGBmb28nIHRvIHRoZSBjaGlsZHJlbiBvZiBgYScuCisKKyAgIFdlIGhvcGUgc29tZSBkYXkgdG8gcHV0IG1vcmUgY29tcGxldGUgZGF0YSBpbnRvIGBnbW9uLm91dCcsIHNvIHRoYXQKK3RoaXMgYXNzdW1wdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkLCBpZiB3ZSBjYW4gZmlndXJlIG91dCBob3cuICBGb3IgdGhlCitub3ZpY2UsIHRoZSBlc3RpbWF0ZWQgZmlndXJlcyBhcmUgdXN1YWxseSBtb3JlIHVzZWZ1bCB0aGFuIG1pc2xlYWRpbmcuCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBIb3cgZG8gST8sICBOZXh0OiBJbmNvbXBhdGliaWxpdGllcywgIFByZXY6IEluYWNjdXJhY3ksICBVcDogVG9wCisKKzcgQW5zd2VycyB0byBDb21tb24gUXVlc3Rpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitIb3cgY2FuIEkgZ2V0IG1vcmUgZXhhY3QgaW5mb3JtYXRpb24gYWJvdXQgaG90IHNwb3RzIGluIG15IHByb2dyYW0/CisgICAgIExvb2tpbmcgYXQgdGhlIHBlci1saW5lIGNhbGwgY291bnRzIG9ubHkgdGVsbHMgcGFydCBvZiB0aGUgc3RvcnkuCisgICAgIEJlY2F1c2UgYGdwcm9mJyBjYW4gb25seSByZXBvcnQgY2FsbCB0aW1lcyBhbmQgY291bnRzIGJ5IGZ1bmN0aW9uLAorICAgICB0aGUgYmVzdCB3YXkgdG8gZ2V0IGZpbmVyLWdyYWluZWQgaW5mb3JtYXRpb24gb24gd2hlcmUgdGhlIHByb2dyYW0KKyAgICAgaXMgc3BlbmRpbmcgaXRzIHRpbWUgaXMgdG8gcmUtZmFjdG9yIGxhcmdlIGZ1bmN0aW9ucyBpbnRvIHNlcXVlbmNlcworICAgICBvZiBjYWxscyB0byBzbWFsbGVyIG9uZXMuICBCZXdhcmUgaG93ZXZlciB0aGF0IHRoaXMgY2FuIGludHJvZHVjZQorICAgICBhcnRpZmljaWFsIGhvdCBzcG90cyBzaW5jZSBjb21waWxpbmcgd2l0aCBgLXBnJyBhZGRzIGEgc2lnbmlmaWNhbnQKKyAgICAgb3ZlcmhlYWQgdG8gZnVuY3Rpb24gY2FsbHMuICBBbiBhbHRlcm5hdGl2ZSBzb2x1dGlvbiBpcyB0byB1c2UgYQorICAgICBub24taW50cnVzaXZlIHByb2ZpbGVyLCBlLmcuIG9wcm9maWxlLgorCitIb3cgZG8gSSBmaW5kIHdoaWNoIGxpbmVzIGluIG15IHByb2dyYW0gd2VyZSBleGVjdXRlZCB0aGUgbW9zdCB0aW1lcz8KKyAgICAgVXNlIHRoZSBgZ2NvdicgcHJvZ3JhbS4KKworSG93IGRvIEkgZmluZCB3aGljaCBsaW5lcyBpbiBteSBwcm9ncmFtIGNhbGxlZCBhIHBhcnRpY3VsYXIgZnVuY3Rpb24/CisgICAgIFVzZSBgZ3Byb2YgLWwnIGFuZCBsb29rdXAgdGhlIGZ1bmN0aW9uIGluIHRoZSBjYWxsIGdyYXBoLiAgVGhlCisgICAgIGNhbGxlcnMgd2lsbCBiZSBicm9rZW4gZG93biBieSBmdW5jdGlvbiBhbmQgbGluZSBudW1iZXIuCisKK0hvdyBkbyBJIGFuYWx5emUgYSBwcm9ncmFtIHRoYXQgcnVucyBmb3IgbGVzcyB0aGFuIGEgc2Vjb25kPworICAgICBUcnkgdXNpbmcgYSBzaGVsbCBzY3JpcHQgbGlrZSB0aGlzIG9uZToKKworICAgICAgICAgIGZvciBpIGluIGBzZXEgMSAxMDBgOyBkbworICAgICAgICAgICAgZmFzdHByb2cKKyAgICAgICAgICAgIG12IGdtb24ub3V0IGdtb24ub3V0LiRpCisgICAgICAgICAgZG9uZQorCisgICAgICAgICAgZ3Byb2YgLXMgZmFzdHByb2cgZ21vbi5vdXQuKgorCisgICAgICAgICAgZ3Byb2YgZmFzdHByb2cgZ21vbi5zdW0KKworICAgICBJZiB5b3VyIHByb2dyYW0gaXMgY29tcGxldGVseSBkZXRlcm1pbmlzdGljLCBhbGwgdGhlIGNhbGwgY291bnRzCisgICAgIHdpbGwgYmUgc2ltcGxlIG11bHRpcGxlcyBvZiAxMDAgKGkuZS4sIGEgZnVuY3Rpb24gY2FsbGVkIG9uY2UgaW4KKyAgICAgZWFjaCBydW4gd2lsbCBhcHBlYXIgd2l0aCBhIGNhbGwgY291bnQgb2YgMTAwKS4KKworCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogSW5jb21wYXRpYmlsaXRpZXMsICBOZXh0OiBEZXRhaWxzLCAgUHJldjogSG93IGRvIEk/LCAgVXA6IFRvcAorCis4IEluY29tcGF0aWJpbGl0aWVzIHdpdGggVW5peCBgZ3Byb2YnCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0dOVSBgZ3Byb2YnIGFuZCBCZXJrZWxleSBVbml4IGBncHJvZicgdXNlIHRoZSBzYW1lIGRhdGEgZmlsZQorYGdtb24ub3V0JywgYW5kIHByb3ZpZGUgZXNzZW50aWFsbHkgdGhlIHNhbWUgaW5mb3JtYXRpb24uICBCdXQgdGhlcmUKK2FyZSBhIGZldyBkaWZmZXJlbmNlcy4KKworICAgKiBHTlUgYGdwcm9mJyB1c2VzIGEgbmV3LCBnZW5lcmFsaXplZCBmaWxlIGZvcm1hdCB3aXRoIHN1cHBvcnQgZm9yCisgICAgIGJhc2ljLWJsb2NrIGV4ZWN1dGlvbiBjb3VudHMgYW5kIG5vbi1yZWFsdGltZSBoaXN0b2dyYW1zLiAgQSBtYWdpYworICAgICBjb29raWUgYW5kIHZlcnNpb24gbnVtYmVyIGFsbG93cyBgZ3Byb2YnIHRvIGVhc2lseSBpZGVudGlmeSBuZXcKKyAgICAgc3R5bGUgZmlsZXMuICBPbGQgQlNELXN0eWxlIGZpbGVzIGNhbiBzdGlsbCBiZSByZWFkLiAgKk5vdGUKKyAgICAgUHJvZmlsaW5nIERhdGEgRmlsZSBGb3JtYXQ6IEZpbGUgRm9ybWF0LgorCisgICAqIEZvciBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiwgVW5peCBgZ3Byb2YnIGxpc3RzIHRoZSBmdW5jdGlvbiBhcyBhCisgICAgIHBhcmVudCBhbmQgYXMgYSBjaGlsZCwgd2l0aCBhIGBjYWxscycgZmllbGQgdGhhdCBsaXN0cyB0aGUgbnVtYmVyCisgICAgIG9mIHJlY3Vyc2l2ZSBjYWxscy4gIEdOVSBgZ3Byb2YnIG9taXRzIHRoZXNlIGxpbmVzIGFuZCBwdXRzIHRoZQorICAgICBudW1iZXIgb2YgcmVjdXJzaXZlIGNhbGxzIGluIHRoZSBwcmltYXJ5IGxpbmUuCisKKyAgICogV2hlbiBhIGZ1bmN0aW9uIGlzIHN1cHByZXNzZWQgZnJvbSB0aGUgY2FsbCBncmFwaCB3aXRoIGAtZScsIEdOVQorICAgICBgZ3Byb2YnIHN0aWxsIGxpc3RzIGl0IGFzIGEgc3Vicm91dGluZSBvZiBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LgorCisgICAqIEdOVSBgZ3Byb2YnIGFjY2VwdHMgdGhlIGAtaycgd2l0aCBpdHMgYXJndW1lbnQgaW4gdGhlIGZvcm0KKyAgICAgYGZyb20vdG8nLCBpbnN0ZWFkIG9mIGBmcm9tIHRvJy4KKworICAgKiBJbiB0aGUgYW5ub3RhdGVkIHNvdXJjZSBsaXN0aW5nLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYmFzaWMKKyAgICAgYmxvY2tzIG9uIHRoZSBzYW1lIGxpbmUsIEdOVSBgZ3Byb2YnIHByaW50cyBhbGwgb2YgdGhlaXIgY291bnRzLAorICAgICBzZXBhcmF0ZWQgYnkgY29tbWFzLgorCisgICAqIFRoZSBibHVyYnMsIGZpZWxkIHdpZHRocywgYW5kIG91dHB1dCBmb3JtYXRzIGFyZSBkaWZmZXJlbnQuICBHTlUKKyAgICAgYGdwcm9mJyBwcmludHMgYmx1cmJzIGFmdGVyIHRoZSB0YWJsZXMsIHNvIHRoYXQgeW91IGNhbiBzZWUgdGhlCisgICAgIHRhYmxlcyB3aXRob3V0IHNraXBwaW5nIHRoZSBibHVyYnMuCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBEZXRhaWxzLCAgTmV4dDogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCAgUHJldjogSW5jb21wYXRpYmlsaXRpZXMsICBVcDogVG9wCisKKzkgRGV0YWlscyBvZiBQcm9maWxpbmcKKyoqKioqKioqKioqKioqKioqKioqKioKKworKiBNZW51OgorCisqIEltcGxlbWVudGF0aW9uOjogICAgICBIb3cgYSBwcm9ncmFtIGNvbGxlY3RzIHByb2ZpbGluZyBpbmZvcm1hdGlvbgorKiBGaWxlIEZvcm1hdDo6ICAgICAgICAgRm9ybWF0IG9mIGBnbW9uLm91dCcgZmlsZXMKKyogSW50ZXJuYWxzOjogICAgICAgICAgIGBncHJvZicncyBpbnRlcm5hbCBvcGVyYXRpb24KKyogRGVidWdnaW5nOjogICAgICAgICAgIFVzaW5nIGBncHJvZicncyBgLWQnIG9wdGlvbgorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogSW1wbGVtZW50YXRpb24sICBOZXh0OiBGaWxlIEZvcm1hdCwgIFVwOiBEZXRhaWxzCisKKzkuMSBJbXBsZW1lbnRhdGlvbiBvZiBQcm9maWxpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUHJvZmlsaW5nIHdvcmtzIGJ5IGNoYW5naW5nIGhvdyBldmVyeSBmdW5jdGlvbiBpbiB5b3VyIHByb2dyYW0gaXMKK2NvbXBpbGVkIHNvIHRoYXQgd2hlbiBpdCBpcyBjYWxsZWQsIGl0IHdpbGwgc3Rhc2ggYXdheSBzb21lIGluZm9ybWF0aW9uCithYm91dCB3aGVyZSBpdCB3YXMgY2FsbGVkIGZyb20uICBGcm9tIHRoaXMsIHRoZSBwcm9maWxlciBjYW4gZmlndXJlIG91dAord2hhdCBmdW5jdGlvbiBjYWxsZWQgaXQsIGFuZCBjYW4gY291bnQgaG93IG1hbnkgdGltZXMgaXQgd2FzIGNhbGxlZC4KK1RoaXMgY2hhbmdlIGlzIG1hZGUgYnkgdGhlIGNvbXBpbGVyIHdoZW4geW91ciBwcm9ncmFtIGlzIGNvbXBpbGVkIHdpdGgKK3RoZSBgLXBnJyBvcHRpb24sIHdoaWNoIGNhdXNlcyBldmVyeSBmdW5jdGlvbiB0byBjYWxsIGBtY291bnQnIChvcgorYF9tY291bnQnLCBvciBgX19tY291bnQnLCBkZXBlbmRpbmcgb24gdGhlIE9TIGFuZCBjb21waWxlcikgYXMgb25lIG9mCitpdHMgZmlyc3Qgb3BlcmF0aW9ucy4KKworICAgVGhlIGBtY291bnQnIHJvdXRpbmUsIGluY2x1ZGVkIGluIHRoZSBwcm9maWxpbmcgbGlicmFyeSwgaXMKK3Jlc3BvbnNpYmxlIGZvciByZWNvcmRpbmcgaW4gYW4gaW4tbWVtb3J5IGNhbGwgZ3JhcGggdGFibGUgYm90aCBpdHMKK3BhcmVudCByb3V0aW5lICh0aGUgY2hpbGQpIGFuZCBpdHMgcGFyZW50J3MgcGFyZW50LiAgVGhpcyBpcyB0eXBpY2FsbHkKK2RvbmUgYnkgZXhhbWluaW5nIHRoZSBzdGFjayBmcmFtZSB0byBmaW5kIGJvdGggdGhlIGFkZHJlc3Mgb2YgdGhlCitjaGlsZCwgYW5kIHRoZSByZXR1cm4gYWRkcmVzcyBpbiB0aGUgb3JpZ2luYWwgcGFyZW50LiAgU2luY2UgdGhpcyBpcyBhCit2ZXJ5IG1hY2hpbmUtZGVwZW5kZW50IG9wZXJhdGlvbiwgYG1jb3VudCcgaXRzZWxmIGlzIHR5cGljYWxseSBhIHNob3J0Cithc3NlbWJseS1sYW5ndWFnZSBzdHViIHJvdXRpbmUgdGhhdCBleHRyYWN0cyB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24sCithbmQgdGhlbiBjYWxscyBgX19tY291bnRfaW50ZXJuYWwnIChhIG5vcm1hbCBDIGZ1bmN0aW9uKSB3aXRoIHR3bworYXJndW1lbnRzLS1gZnJvbXBjJyBhbmQgYHNlbGZwYycuICBgX19tY291bnRfaW50ZXJuYWwnIGlzIHJlc3BvbnNpYmxlCitmb3IgbWFpbnRhaW5pbmcgdGhlIGluLW1lbW9yeSBjYWxsIGdyYXBoLCB3aGljaCByZWNvcmRzIGBmcm9tcGMnLAorYHNlbGZwYycsIGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggb2YgdGhlc2UgY2FsbCBhcmNzIHdhcyB0cmF2ZXJzZWQuCisKKyAgIEdDQyBWZXJzaW9uIDIgcHJvdmlkZXMgYSBtYWdpY2FsIGZ1bmN0aW9uCisoYF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcycpLCB3aGljaCBhbGxvd3MgYSBnZW5lcmljIGBtY291bnQnIGZ1bmN0aW9uCit0byBleHRyYWN0IHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdGFjayBmcmFtZS4gIEhvd2V2ZXIsIG9uCitzb21lIGFyY2hpdGVjdHVyZXMsIG1vc3Qgbm90YWJseSB0aGUgU1BBUkMsIHVzaW5nIHRoaXMgYnVpbHRpbiBjYW4gYmUKK3ZlcnkgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZSwgYW5kIGFuIGFzc2VtYmx5IGxhbmd1YWdlIHZlcnNpb24gb2YKK2BtY291bnQnIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisKKyAgIE51bWJlci1vZi1jYWxscyBpbmZvcm1hdGlvbiBmb3IgbGlicmFyeSByb3V0aW5lcyBpcyBjb2xsZWN0ZWQgYnkKK3VzaW5nIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIHRoZSBDIGxpYnJhcnkuICBUaGUgcHJvZ3JhbXMgaW4gaXQgYXJlIHRoZQorc2FtZSBhcyBpbiB0aGUgdXN1YWwgQyBsaWJyYXJ5LCBidXQgdGhleSB3ZXJlIGNvbXBpbGVkIHdpdGggYC1wZycuICBJZgoreW91IGxpbmsgeW91ciBwcm9ncmFtIHdpdGggYGdjYyAuLi4gLXBnJywgaXQgYXV0b21hdGljYWxseSB1c2VzIHRoZQorcHJvZmlsaW5nIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgIFByb2ZpbGluZyBhbHNvIGludm9sdmVzIHdhdGNoaW5nIHlvdXIgcHJvZ3JhbSBhcyBpdCBydW5zLCBhbmQKK2tlZXBpbmcgYSBoaXN0b2dyYW0gb2Ygd2hlcmUgdGhlIHByb2dyYW0gY291bnRlciBoYXBwZW5zIHRvIGJlIGV2ZXJ5Citub3cgYW5kIHRoZW4uICBUeXBpY2FsbHkgdGhlIHByb2dyYW0gY291bnRlciBpcyBsb29rZWQgYXQgYXJvdW5kIDEwMAordGltZXMgcGVyIHNlY29uZCBvZiBydW4gdGltZSwgYnV0IHRoZSBleGFjdCBmcmVxdWVuY3kgbWF5IHZhcnkgZnJvbQorc3lzdGVtIHRvIHN5c3RlbS4KKworICAgVGhpcyBpcyBkb25lIGlzIG9uZSBvZiB0d28gd2F5cy4gIE1vc3QgVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zCitwcm92aWRlIGEgYHByb2ZpbCgpJyBzeXN0ZW0gY2FsbCwgd2hpY2ggcmVnaXN0ZXJzIGEgbWVtb3J5IGFycmF5IHdpdGgKK3RoZSBrZXJuZWwsIGFsb25nIHdpdGggYSBzY2FsZSBmYWN0b3IgdGhhdCBkZXRlcm1pbmVzIGhvdyB0aGUgcHJvZ3JhbSdzCithZGRyZXNzIHNwYWNlIG1hcHMgaW50byB0aGUgYXJyYXkuICBUeXBpY2FsIHNjYWxpbmcgdmFsdWVzIGNhdXNlIGV2ZXJ5CisyIHRvIDggYnl0ZXMgb2YgYWRkcmVzcyBzcGFjZSB0byBtYXAgaW50byBhIHNpbmdsZSBhcnJheSBzbG90LiAgT24KK2V2ZXJ5IHRpY2sgb2YgdGhlIHN5c3RlbSBjbG9jayAoYXNzdW1pbmcgdGhlIHByb2ZpbGVkIHByb2dyYW0gaXMKK3J1bm5pbmcpLCB0aGUgdmFsdWUgb2YgdGhlIHByb2dyYW0gY291bnRlciBpcyBleGFtaW5lZCBhbmQgdGhlCitjb3JyZXNwb25kaW5nIHNsb3QgaW4gdGhlIG1lbW9yeSBhcnJheSBpcyBpbmNyZW1lbnRlZC4gIFNpbmNlIHRoaXMgaXMKK2RvbmUgaW4gdGhlIGtlcm5lbCwgd2hpY2ggaGFkIHRvIGludGVycnVwdCB0aGUgcHJvY2VzcyBhbnl3YXkgdG8gaGFuZGxlCit0aGUgY2xvY2sgaW50ZXJydXB0LCB2ZXJ5IGxpdHRsZSBhZGRpdGlvbmFsIHN5c3RlbSBvdmVyaGVhZCBpcyByZXF1aXJlZC4KKworICAgSG93ZXZlciwgc29tZSBvcGVyYXRpbmcgc3lzdGVtcywgbW9zdCBub3RhYmx5IExpbnV4IDIuMCAoYW5kCitlYXJsaWVyKSwgZG8gbm90IHByb3ZpZGUgYSBgcHJvZmlsKCknIHN5c3RlbSBjYWxsLiAgT24gc3VjaCBhIHN5c3RlbSwKK2FycmFuZ2VtZW50cyBhcmUgbWFkZSBmb3IgdGhlIGtlcm5lbCB0byBwZXJpb2RpY2FsbHkgZGVsaXZlciBhIHNpZ25hbAordG8gdGhlIHByb2Nlc3MgKHR5cGljYWxseSB2aWEgYHNldGl0aW1lcigpJyksIHdoaWNoIHRoZW4gcGVyZm9ybXMgdGhlCitzYW1lIG9wZXJhdGlvbiBvZiBleGFtaW5pbmcgdGhlIHByb2dyYW0gY291bnRlciBhbmQgaW5jcmVtZW50aW5nIGEgc2xvdAoraW4gdGhlIG1lbW9yeSBhcnJheS4gIFNpbmNlIHRoaXMgbWV0aG9kIHJlcXVpcmVzIGEgc2lnbmFsIHRvIGJlCitkZWxpdmVyZWQgdG8gdXNlciBzcGFjZSBldmVyeSB0aW1lIGEgc2FtcGxlIGlzIHRha2VuLCBpdCB1c2VzCitjb25zaWRlcmFibHkgbW9yZSBvdmVyaGVhZCB0aGFuIGtlcm5lbC1iYXNlZCBwcm9maWxpbmcuICBBbHNvLCBkdWUgdG8KK3RoZSBhZGRlZCBkZWxheSByZXF1aXJlZCB0byBkZWxpdmVyIHRoZSBzaWduYWwsIHRoaXMgbWV0aG9kIGlzIGxlc3MKK2FjY3VyYXRlIGFzIHdlbGwuCisKKyAgIEEgc3BlY2lhbCBzdGFydHVwIHJvdXRpbmUgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIGhpc3RvZ3JhbSBhbmQKK2VpdGhlciBjYWxscyBgcHJvZmlsKCknIG9yIHNldHMgdXAgYSBjbG9jayBzaWduYWwgaGFuZGxlci4gIFRoaXMKK3JvdXRpbmUgKGBtb25zdGFydHVwJykgY2FuIGJlIGludm9rZWQgaW4gc2V2ZXJhbCB3YXlzLiAgT24gTGludXgKK3N5c3RlbXMsIGEgc3BlY2lhbCBwcm9maWxpbmcgc3RhcnR1cCBmaWxlIGBnY3J0MC5vJywgd2hpY2ggaW52b2tlcworYG1vbnN0YXJ0dXAnIGJlZm9yZSBgbWFpbicsIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgY3J0MC5vJy4KK1VzZSBvZiB0aGlzIHNwZWNpYWwgc3RhcnR1cCBmaWxlIGlzIG9uZSBvZiB0aGUgZWZmZWN0cyBvZiB1c2luZyBgZ2NjCisuLi4gLXBnJyB0byBsaW5rLiAgT24gU1BBUkMgc3lzdGVtcywgbm8gc3BlY2lhbCBzdGFydHVwIGZpbGVzIGFyZSB1c2VkLgorUmF0aGVyLCB0aGUgYG1jb3VudCcgcm91dGluZSwgd2hlbiBpdCBpcyBpbnZva2VkIGZvciB0aGUgZmlyc3QgdGltZQorKHR5cGljYWxseSB3aGVuIGBtYWluJyBpcyBjYWxsZWQpLCBjYWxscyBgbW9uc3RhcnR1cCcuCisKKyAgIElmIHRoZSBjb21waWxlcidzIGAtYScgb3B0aW9uIHdhcyB1c2VkLCBiYXNpYy1ibG9jayBjb3VudGluZyBpcyBhbHNvCitlbmFibGVkLiAgRWFjaCBvYmplY3QgZmlsZSBpcyB0aGVuIGNvbXBpbGVkIHdpdGggYSBzdGF0aWMgYXJyYXkgb2YKK2NvdW50cywgaW5pdGlhbGx5IHplcm8uICBJbiB0aGUgZXhlY3V0YWJsZSBjb2RlLCBldmVyeSB0aW1lIGEgbmV3CitiYXNpYy1ibG9jayBiZWdpbnMgKGkuZS4sIHdoZW4gYW4gYGlmJyBzdGF0ZW1lbnQgYXBwZWFycyksIGFuIGV4dHJhCitpbnN0cnVjdGlvbiBpcyBpbnNlcnRlZCB0byBpbmNyZW1lbnQgdGhlIGNvcnJlc3BvbmRpbmcgY291bnQgaW4gdGhlCithcnJheS4gIEF0IGNvbXBpbGUgdGltZSwgYSBwYWlyZWQgYXJyYXkgd2FzIGNvbnN0cnVjdGVkIHRoYXQgcmVjb3JkZWQKK3RoZSBzdGFydGluZyBhZGRyZXNzIG9mIGVhY2ggYmFzaWMtYmxvY2suICBUYWtlbiB0b2dldGhlciwgdGhlIHR3bworYXJyYXlzIHJlY29yZCB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiBldmVyeSBiYXNpYy1ibG9jaywgYWxvbmcgd2l0aCB0aGUKK251bWJlciBvZiB0aW1lcyBpdCB3YXMgZXhlY3V0ZWQuCisKKyAgIFRoZSBwcm9maWxpbmcgbGlicmFyeSBhbHNvIGluY2x1ZGVzIGEgZnVuY3Rpb24gKGBtY2xlYW51cCcpIHdoaWNoIGlzCit0eXBpY2FsbHkgcmVnaXN0ZXJlZCB1c2luZyBgYXRleGl0KCknIHRvIGJlIGNhbGxlZCBhcyB0aGUgcHJvZ3JhbQorZXhpdHMsIGFuZCBpcyByZXNwb25zaWJsZSBmb3Igd3JpdGluZyB0aGUgZmlsZSBgZ21vbi5vdXQnLiAgUHJvZmlsaW5nCitpcyB0dXJuZWQgb2ZmLCB2YXJpb3VzIGhlYWRlcnMgYXJlIG91dHB1dCwgYW5kIHRoZSBoaXN0b2dyYW0gaXMKK3dyaXR0ZW4sIGZvbGxvd2VkIGJ5IHRoZSBjYWxsLWdyYXBoIGFyY3MgYW5kIHRoZSBiYXNpYy1ibG9jayBjb3VudHMuCisKKyAgIFRoZSBvdXRwdXQgZnJvbSBgZ3Byb2YnIGdpdmVzIG5vIGluZGljYXRpb24gb2YgcGFydHMgb2YgeW91ciBwcm9ncmFtCit0aGF0IGFyZSBsaW1pdGVkIGJ5IEkvTyBvciBzd2FwcGluZyBiYW5kd2lkdGguICBUaGlzIGlzIGJlY2F1c2Ugc2FtcGxlcworb2YgdGhlIHByb2dyYW0gY291bnRlciBhcmUgdGFrZW4gYXQgZml4ZWQgaW50ZXJ2YWxzIG9mIHRoZSBwcm9ncmFtJ3MKK3J1biB0aW1lLiAgVGhlcmVmb3JlLCB0aGUgdGltZSBtZWFzdXJlbWVudHMgaW4gYGdwcm9mJyBvdXRwdXQgc2F5Citub3RoaW5nIGFib3V0IHRpbWUgdGhhdCB5b3VyIHByb2dyYW0gd2FzIG5vdCBydW5uaW5nLiAgRm9yIGV4YW1wbGUsIGEKK3BhcnQgb2YgdGhlIHByb2dyYW0gdGhhdCBjcmVhdGVzIHNvIG11Y2ggZGF0YSB0aGF0IGl0IGNhbm5vdCBhbGwgZml0IGluCitwaHlzaWNhbCBtZW1vcnkgYXQgb25jZSBtYXkgcnVuIHZlcnkgc2xvd2x5IGR1ZSB0byB0aHJhc2hpbmcsIGJ1dAorYGdwcm9mJyB3aWxsIHNheSBpdCB1c2VzIGxpdHRsZSB0aW1lLiAgT24gdGhlIG90aGVyIGhhbmQsIHNhbXBsaW5nIGJ5CitydW4gdGltZSBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IHRoZSBhbW91bnQgb2YgbG9hZCBkdWUgdG8gb3RoZXIgdXNlcnMKK3dvbid0IGRpcmVjdGx5IGFmZmVjdCB0aGUgb3V0cHV0IHlvdSBnZXQuCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBGaWxlIEZvcm1hdCwgIE5leHQ6IEludGVybmFscywgIFByZXY6IEltcGxlbWVudGF0aW9uLCAgVXA6IERldGFpbHMKKworOS4yIFByb2ZpbGluZyBEYXRhIEZpbGUgRm9ybWF0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG9sZCBCU0QtZGVyaXZlZCBmaWxlIGZvcm1hdCB1c2VkIGZvciBwcm9maWxlIGRhdGEgZG9lcyBub3QgY29udGFpbiBhCittYWdpYyBjb29raWUgdGhhdCBhbGxvd3MgdG8gY2hlY2sgd2hldGhlciBhIGRhdGEgZmlsZSByZWFsbHkgaXMgYQorYGdwcm9mJyBmaWxlLiAgRnVydGhlcm1vcmUsIGl0IGRvZXMgbm90IHByb3ZpZGUgYSB2ZXJzaW9uIG51bWJlciwgdGh1cworcmVuZGVyaW5nIGNoYW5nZXMgdG8gdGhlIGZpbGUgZm9ybWF0IGFsbW9zdCBpbXBvc3NpYmxlLiAgR05VIGBncHJvZicKK3VzZXMgYSBuZXcgZmlsZSBmb3JtYXQgdGhhdCBwcm92aWRlcyB0aGVzZSBmZWF0dXJlcy4gIEZvciBiYWNrd2FyZAorY29tcGF0aWJpbGl0eSwgR05VIGBncHJvZicgY29udGludWVzIHRvIHN1cHBvcnQgdGhlIG9sZCBCU0QtZGVyaXZlZAorZm9ybWF0LCBidXQgbm90IGFsbCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkIHdpdGggaXQuICBGb3IgZXhhbXBsZSwKK2Jhc2ljLWJsb2NrIGV4ZWN1dGlvbiBjb3VudHMgY2Fubm90IGJlIGFjY29tbW9kYXRlZCBieSB0aGUgb2xkIGZpbGUKK2Zvcm1hdC4KKworICAgVGhlIG5ldyBmaWxlIGZvcm1hdCBpcyBkZWZpbmVkIGluIGhlYWRlciBmaWxlIGBnbW9uX291dC5oJy4gIEl0Citjb25zaXN0cyBvZiBhIGhlYWRlciBjb250YWluaW5nIHRoZSBtYWdpYyBjb29raWUgYW5kIGEgdmVyc2lvbiBudW1iZXIsCithcyB3ZWxsIGFzIHNvbWUgc3BhcmUgYnl0ZXMgYXZhaWxhYmxlIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4gIEFsbCBkYXRhCitpbiBhIHByb2ZpbGUgZGF0YSBmaWxlIGlzIGluIHRoZSBuYXRpdmUgZm9ybWF0IG9mIHRoZSB0YXJnZXQgZm9yIHdoaWNoCit0aGUgcHJvZmlsZSB3YXMgY29sbGVjdGVkLiAgR05VIGBncHJvZicgYWRhcHRzIGF1dG9tYXRpY2FsbHkgdG8gdGhlCitieXRlLW9yZGVyIGluIHVzZS4KKworICAgSW4gdGhlIG5ldyBmaWxlIGZvcm1hdCwgdGhlIGhlYWRlciBpcyBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIG9mCityZWNvcmRzLiAgQ3VycmVudGx5LCB0aGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHJlY29yZCB0eXBlczogaGlzdG9ncmFtCityZWNvcmRzLCBjYWxsLWdyYXBoIGFyYyByZWNvcmRzLCBhbmQgYmFzaWMtYmxvY2sgZXhlY3V0aW9uIGNvdW50CityZWNvcmRzLiAgRWFjaCBmaWxlIGNhbiBjb250YWluIGFueSBudW1iZXIgb2YgZWFjaCByZWNvcmQgdHlwZS4gIFdoZW4KK3JlYWRpbmcgYSBmaWxlLCBHTlUgYGdwcm9mJyB3aWxsIGVuc3VyZSByZWNvcmRzIG9mIHRoZSBzYW1lIHR5cGUgYXJlCitjb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlciBhbmQgY29tcHV0ZSB0aGUgdW5pb24gb2YgYWxsIHJlY29yZHMuICBGb3IKK2V4YW1wbGUsIGZvciBiYXNpYy1ibG9jayBleGVjdXRpb24gY291bnRzLCB0aGUgdW5pb24gaXMgc2ltcGx5IHRoZSBzdW0KK29mIGFsbCBleGVjdXRpb24gY291bnRzIGZvciBlYWNoIGJhc2ljLWJsb2NrLgorCis5LjIuMSBIaXN0b2dyYW0gUmVjb3JkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGlzdG9ncmFtIHJlY29yZHMgY29uc2lzdCBvZiBhIGhlYWRlciB0aGF0IGlzIGZvbGxvd2VkIGJ5IGFuIGFycmF5IG9mCitiaW5zLiAgVGhlIGhlYWRlciBjb250YWlucyB0aGUgdGV4dC1zZWdtZW50IHJhbmdlIHRoYXQgdGhlIGhpc3RvZ3JhbQorc3BhbnMsIHRoZSBzaXplIG9mIHRoZSBoaXN0b2dyYW0gaW4gYnl0ZXMgKHVubGlrZSBpbiB0aGUgb2xkIEJTRAorZm9ybWF0LCB0aGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNpemUgb2YgdGhlIGhlYWRlciksIHRoZSByYXRlIG9mIHRoZQorcHJvZmlsaW5nIGNsb2NrLCBhbmQgdGhlIHBoeXNpY2FsIGRpbWVuc2lvbiB0aGF0IHRoZSBiaW4gY291bnRzCityZXByZXNlbnQgYWZ0ZXIgYmVpbmcgc2NhbGVkIGJ5IHRoZSBwcm9maWxpbmcgY2xvY2sgcmF0ZS4gIFRoZSBwaHlzaWNhbAorZGltZW5zaW9uIGlzIHNwZWNpZmllZCBpbiB0d28gcGFydHM6IGEgbG9uZyBuYW1lIG9mIHVwIHRvIDE1IGNoYXJhY3RlcnMKK2FuZCBhIHNpbmdsZSBjaGFyYWN0ZXIgYWJicmV2aWF0aW9uLiAgRm9yIGV4YW1wbGUsIGEgaGlzdG9ncmFtCityZXByZXNlbnRpbmcgcmVhbC10aW1lIHdvdWxkIHNwZWNpZnkgdGhlIGxvbmcgbmFtZSBhcyAic2Vjb25kcyIgYW5kIHRoZQorYWJicmV2aWF0aW9uIGFzICJzIi4gIFRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdAorc3VwcG9ydCBwZXJmb3JtYW5jZSBtb25pdG9yIGhhcmR3YXJlICh3aGljaCwgZm9ydHVuYXRlbHksIGlzIGJlY29taW5nCitpbmNyZWFzaW5nbHkgY29tbW9uKS4gIEZvciBleGFtcGxlLCB1bmRlciBERUMgT1NGLzEsIHRoZSAidXByb2ZpbGUiCitjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHByb2R1Y2UgYSBoaXN0b2dyYW0gb2YsIHNheSwgaW5zdHJ1Y3Rpb24gY2FjaGUKK21pc3Nlcy4gIEluIHRoaXMgY2FzZSwgdGhlIGRpbWVuc2lvbiBpbiB0aGUgaGlzdG9ncmFtIGhlYWRlciBjb3VsZCBiZQorc2V0IHRvICJpLWNhY2hlIG1pc3NlcyIgYW5kIHRoZSBhYmJyZXZpYXRpb24gY291bGQgYmUgc2V0IHRvICIxIgorKGJlY2F1c2UgaXQgaXMgc2ltcGx5IGEgY291bnQsIG5vdCBhIHBoeXNpY2FsIGRpbWVuc2lvbikuICBBbHNvLCB0aGUKK3Byb2ZpbGluZyByYXRlIHdvdWxkIGhhdmUgdG8gYmUgc2V0IHRvIDEgaW4gdGhpcyBjYXNlLgorCisgICBIaXN0b2dyYW0gYmlucyBhcmUgMTYtYml0IG51bWJlcnMgYW5kIGVhY2ggYmluIHJlcHJlc2VudCBhbiBlcXVhbAorYW1vdW50IG9mIHRleHQtc3BhY2UuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHRleHQtc2VnbWVudCBpcyBvbmUgdGhvdXNhbmQKK2J5dGVzIGxvbmcgYW5kIGlmIHRoZXJlIGFyZSB0ZW4gYmlucyBpbiB0aGUgaGlzdG9ncmFtLCBlYWNoIGJpbgorcmVwcmVzZW50cyBvbmUgaHVuZHJlZCBieXRlcy4KKworOS4yLjIgQ2FsbC1HcmFwaCBSZWNvcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2FsbC1ncmFwaCByZWNvcmRzIGhhdmUgYSBmb3JtYXQgdGhhdCBpcyBpZGVudGljYWwgdG8gdGhlIG9uZSB1c2VkIGluCit0aGUgQlNELWRlcml2ZWQgZmlsZSBmb3JtYXQuICBJdCBjb25zaXN0cyBvZiBhbiBhcmMgaW4gdGhlIGNhbGwgZ3JhcGgKK2FuZCBhIGNvdW50IGluZGljYXRpbmcgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgYXJjIHdhcyB0cmF2ZXJzZWQgZHVyaW5nCitwcm9ncmFtIGV4ZWN1dGlvbi4gIEFyY3MgYXJlIHNwZWNpZmllZCBieSBhIHBhaXIgb2YgYWRkcmVzc2VzOiB0aGUKK2ZpcnN0IG11c3QgYmUgd2l0aGluIGNhbGxlcidzIGZ1bmN0aW9uIGFuZCB0aGUgc2Vjb25kIG11c3QgYmUgd2l0aGluCit0aGUgY2FsbGVlJ3MgZnVuY3Rpb24uICBXaGVuIHBlcmZvcm1pbmcgcHJvZmlsaW5nIGF0IHRoZSBmdW5jdGlvbgorbGV2ZWwsIHRoZXNlIGFkZHJlc3NlcyBjYW4gcG9pbnQgYW55d2hlcmUgd2l0aGluIHRoZSByZXNwZWN0aXZlCitmdW5jdGlvbi4gIEhvd2V2ZXIsIHdoZW4gcHJvZmlsaW5nIGF0IHRoZSBsaW5lLWxldmVsLCBpdCBpcyBiZXR0ZXIgaWYKK3RoZSBhZGRyZXNzZXMgYXJlIGFzIGNsb3NlIHRvIHRoZSBjYWxsLXNpdGUvZW50cnktcG9pbnQgYXMgcG9zc2libGUuCitUaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGxpbmUtbGV2ZWwgY2FsbC1ncmFwaCBpcyBhYmxlIHRvIGlkZW50aWZ5CitleGFjdGx5IHdoaWNoIGxpbmUgb2Ygc291cmNlIGNvZGUgcGVyZm9ybWVkIGNhbGxzIHRvIGEgZnVuY3Rpb24uCisKKzkuMi4zIEJhc2ljLUJsb2NrIEV4ZWN1dGlvbiBDb3VudCBSZWNvcmRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCYXNpYy1ibG9jayBleGVjdXRpb24gY291bnQgcmVjb3JkcyBjb25zaXN0IG9mIGEgaGVhZGVyIGZvbGxvd2VkIGJ5IGEKK3NlcXVlbmNlIG9mIGFkZHJlc3MvY291bnQgcGFpcnMuICBUaGUgaGVhZGVyIHNpbXBseSBzcGVjaWZpZXMgdGhlCitsZW5ndGggb2YgdGhlIHNlcXVlbmNlLiAgSW4gYW4gYWRkcmVzcy9jb3VudCBwYWlyLCB0aGUgYWRkcmVzcworaWRlbnRpZmllcyBhIGJhc2ljLWJsb2NrIGFuZCB0aGUgY291bnQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGltZXMKK3RoYXQgYmFzaWMtYmxvY2sgd2FzIGV4ZWN1dGVkLiAgQW55IGFkZHJlc3Mgd2l0aGluIHRoZSBiYXNpYy1hZGRyZXNzIGNhbgorYmUgdXNlZC4KKworHworRmlsZTogZ3Byb2YuaW5mbywgIE5vZGU6IEludGVybmFscywgIE5leHQ6IERlYnVnZ2luZywgIFByZXY6IEZpbGUgRm9ybWF0LCAgVXA6IERldGFpbHMKKworOS4zIGBncHJvZicncyBJbnRlcm5hbCBPcGVyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xpa2UgbW9zdCBwcm9ncmFtcywgYGdwcm9mJyBiZWdpbnMgYnkgcHJvY2Vzc2luZyBpdHMgb3B0aW9ucy4gIER1cmluZwordGhpcyBzdGFnZSwgaXQgbWF5IGJ1aWxkaW5nIGl0cyBzeW1zcGVjIGxpc3QgKGBzeW1faWRzLmM6c3ltX2lkX2FkZCcpLAoraWYgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIHdoaWNoIHVzZSBzeW1zcGVjcy4gIGBncHJvZicgbWFpbnRhaW5zIGEKK3NpbmdsZSBsaW5rZWQgbGlzdCBvZiBzeW1zcGVjcywgd2hpY2ggd2lsbCBldmVudHVhbGx5IGdldCB0dXJuZWQgaW50bworMTIgc3ltYm9sIHRhYmxlcywgb3JnYW5pemVkIGludG8gc2l4IGluY2x1ZGUvZXhjbHVkZSBwYWlycy0tb25lIHBhaXIKK2VhY2ggZm9yIHRoZSBmbGF0IHByb2ZpbGUgKElOQ0xfRkxBVC9FWENMX0ZMQVQpLCB0aGUgY2FsbCBncmFwaCBhcmNzCisoSU5DTF9BUkNTL0VYQ0xfQVJDUyksIHByaW50aW5nIGluIHRoZSBjYWxsIGdyYXBoCisoSU5DTF9HUkFQSC9FWENMX0dSQVBIKSwgdGltaW5nIHByb3BhZ2F0aW9uIGluIHRoZSBjYWxsIGdyYXBoCisoSU5DTF9USU1FL0VYQ0xfVElNRSksIHRoZSBhbm5vdGF0ZWQgc291cmNlIGxpc3RpbmcKKyhJTkNMX0FOTk8vRVhDTF9BTk5PKSwgYW5kIHRoZSBleGVjdXRpb24gY291bnQgbGlzdGluZworKElOQ0xfRVhFQy9FWENMX0VYRUMpLgorCisgICBBZnRlciBvcHRpb24gcHJvY2Vzc2luZywgYGdwcm9mJyBmaW5pc2hlcyBidWlsZGluZyB0aGUgc3ltc3BlYyBsaXN0CitieSBhZGRpbmcgYWxsIHRoZSBzeW1zcGVjcyBpbiBgZGVmYXVsdF9leGNsdWRlZF9saXN0JyB0byB0aGUgZXhjbHVkZQorbGlzdHMgRVhDTF9USU1FIGFuZCBFWENMX0dSQVBILCBhbmQgaWYgbGluZS1ieS1saW5lIHByb2ZpbGluZyBpcworc3BlY2lmaWVkLCBFWENMX0ZMQVQgYXMgd2VsbC4gIFRoZXNlIGRlZmF1bHQgZXhjbHVkZXMgYXJlIG5vdCBhZGRlZCB0bworRVhDTF9BTk5PLCBFWENMX0FSQ1MsIGFuZCBFWENMX0VYRUMuCisKKyAgIE5leHQsIHRoZSBCRkQgbGlicmFyeSBpcyBjYWxsZWQgdG8gb3BlbiB0aGUgb2JqZWN0IGZpbGUsIHZlcmlmeSB0aGF0CitpdCBpcyBhbiBvYmplY3QgZmlsZSwgYW5kIHJlYWQgaXRzIHN5bWJvbCB0YWJsZSAoYGNvcmUuYzpjb3JlX2luaXQnKSwKK3VzaW5nIGBiZmRfY2Fub25pY2FsaXplX3N5bXRhYicgYWZ0ZXIgbWFsbG9jaW5nIGFuIGFwcHJvcHJpYXRlbHkgc2l6ZWQKK2FycmF5IG9mIHN5bWJvbHMuICBBdCB0aGlzIHBvaW50LCBmdW5jdGlvbiBtYXBwaW5ncyBhcmUgcmVhZCAoaWYgdGhlCitgLS1maWxlLW9yZGVyaW5nJyBvcHRpb24gaGFzIGJlZW4gc3BlY2lmaWVkKSwgYW5kIHRoZSBjb3JlIHRleHQgc3BhY2UKK2lzIHJlYWQgaW50byBtZW1vcnkgKGlmIHRoZSBgLWMnIG9wdGlvbiB3YXMgZ2l2ZW4pLgorCisgICBgZ3Byb2YnJ3Mgb3duIHN5bWJvbCB0YWJsZSwgYW4gYXJyYXkgb2YgU3ltIHN0cnVjdHVyZXMsIGlzIG5vdyBidWlsdC4KK1RoaXMgaXMgZG9uZSBpbiBvbmUgb2YgdHdvIHdheXMsIGJ5IG9uZSBvZiB0d28gcm91dGluZXMsIGRlcGVuZGluZyBvbgord2hldGhlciBsaW5lLWJ5LWxpbmUgcHJvZmlsaW5nIChgLWwnIG9wdGlvbikgaGFzIGJlZW4gZW5hYmxlZC4gIEZvcgorbm9ybWFsIHByb2ZpbGluZywgdGhlIEJGRCBjYW5vbmljYWwgc3ltYm9sIHRhYmxlIGlzIHNjYW5uZWQuICBGb3IKK2xpbmUtYnktbGluZSBwcm9maWxpbmcsIGV2ZXJ5IHRleHQgc3BhY2UgYWRkcmVzcyBpcyBleGFtaW5lZCwgYW5kIGEgbmV3CitzeW1ib2wgdGFibGUgZW50cnkgZ2V0cyBjcmVhdGVkIGV2ZXJ5IHRpbWUgdGhlIGxpbmUgbnVtYmVyIGNoYW5nZXMuICBJbgorZWl0aGVyIGNhc2UsIHR3byBwYXNzZXMgYXJlIG1hZGUgdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlLS1vbmUgdG8gY291bnQKK3RoZSBzaXplIG9mIHRoZSBzeW1ib2wgdGFibGUgcmVxdWlyZWQsIGFuZCB0aGUgb3RoZXIgdG8gYWN0dWFsbHkgcmVhZAordGhlIHN5bWJvbHMuICBJbiBiZXR3ZWVuIHRoZSB0d28gcGFzc2VzLCBhIHNpbmdsZSBhcnJheSBvZiB0eXBlIGBTeW0nCitpcyBjcmVhdGVkIG9mIHRoZSBhcHByb3ByaWF0ZSBsZW5ndGguICBGaW5hbGx5LAorYHN5bXRhYi5jOnN5bXRhYl9maW5hbGl6ZScgaXMgY2FsbGVkIHRvIHNvcnQgdGhlIHN5bWJvbCB0YWJsZSBhbmQKK3JlbW92ZSBkdXBsaWNhdGUgZW50cmllcyAoZW50cmllcyB3aXRoIHRoZSBzYW1lIG1lbW9yeSBhZGRyZXNzKS4KKworICAgVGhlIHN5bWJvbCB0YWJsZSBtdXN0IGJlIGEgY29udGlndW91cyBhcnJheSBmb3IgdHdvIHJlYXNvbnMuICBGaXJzdCwKK3RoZSBgcXNvcnQnIGxpYnJhcnkgZnVuY3Rpb24gKHdoaWNoIHNvcnRzIGFuIGFycmF5KSB3aWxsIGJlIHVzZWQgdG8KK3NvcnQgdGhlIHN5bWJvbCB0YWJsZS4gIEFsc28sIHRoZSBzeW1ib2wgbG9va3VwIHJvdXRpbmUKKyhgc3ltdGFiLmM6c3ltX2xvb2t1cCcpLCB3aGljaCBmaW5kcyBzeW1ib2xzIGJhc2VkIG9uIG1lbW9yeSBhZGRyZXNzLAordXNlcyBhIGJpbmFyeSBzZWFyY2ggYWxnb3JpdGhtIHdoaWNoIHJlcXVpcmVzIHRoZSBzeW1ib2wgdGFibGUgdG8gYmUgYQorc29ydGVkIGFycmF5LiAgRnVuY3Rpb24gc3ltYm9scyBhcmUgaW5kaWNhdGVkIHdpdGggYW4gYGlzX2Z1bmMnIGZsYWcuCitMaW5lIG51bWJlciBzeW1ib2xzIGhhdmUgbm8gc3BlY2lhbCBmbGFncyBzZXQuICBBZGRpdGlvbmFsbHksIGEgc3ltYm9sCitjYW4gaGF2ZSBhbiBgaXNfc3RhdGljJyBmbGFnIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgYSBsb2NhbCBzeW1ib2wuCisKKyAgIFdpdGggdGhlIHN5bWJvbCB0YWJsZSByZWFkLCB0aGUgc3ltc3BlY3MgY2FuIG5vdyBiZSB0cmFuc2xhdGVkIGludG8KK1N5bXMgKGBzeW1faWRzLmM6c3ltX2lkX3BhcnNlJykuICBSZW1lbWJlciB0aGF0IGEgc2luZ2xlIHN5bXNwZWMgY2FuCittYXRjaCBtdWx0aXBsZSBzeW1ib2xzLiAgQW4gYXJyYXkgb2Ygc3ltYm9sIHRhYmxlcyAoYHN5bXMnKSBpcyBjcmVhdGVkLAorZWFjaCBlbnRyeSBvZiB3aGljaCBpcyBhIHN5bWJvbCB0YWJsZSBvZiBTeW1zIHRvIGJlIGluY2x1ZGVkIG9yCitleGNsdWRlZCBmcm9tIGEgcGFydGljdWxhciBsaXN0aW5nLiAgVGhlIG1hc3RlciBzeW1ib2wgdGFibGUgYW5kIHRoZQorc3ltc3BlY3MgYXJlIGV4YW1pbmVkIGJ5IG5lc3RlZCBsb29wcywgYW5kIGV2ZXJ5IHN5bWJvbCB0aGF0IG1hdGNoZXMgYQorc3ltc3BlYyBpcyBpbnNlcnRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzeW1zIHRhYmxlLiAgVGhpcyBpcyBkb25lCit0d2ljZSwgb25jZSB0byBjb3VudCB0aGUgc2l6ZSBvZiBlYWNoIHJlcXVpcmVkIHN5bWJvbCB0YWJsZSwgYW5kIGFnYWluCit0byBidWlsZCB0aGUgdGFibGVzLCB3aGljaCBoYXZlIGJlZW4gbWFsbG9jZWQgYmV0d2VlbiBwYXNzZXMuICBGcm9tIG5vdworb24sIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3ltYm9sIGlzIG9uIGFuIGluY2x1ZGUgb3IgZXhjbHVkZSBzeW1zcGVjCitsaXN0LCBgZ3Byb2YnIHNpbXBseSB1c2VzIGl0cyBzdGFuZGFyZCBzeW1ib2wgbG9va3VwIHJvdXRpbmUgb24gdGhlCithcHByb3ByaWF0ZSB0YWJsZSBpbiB0aGUgYHN5bXMnIGFycmF5LgorCisgICBOb3cgdGhlIHByb2ZpbGUgZGF0YSBmaWxlKHMpIHRoZW1zZWx2ZXMgYXJlIHJlYWQKKyhgZ21vbl9pby5jOmdtb25fb3V0X3JlYWQnKSwgZmlyc3QgYnkgY2hlY2tpbmcgZm9yIGEgbmV3LXN0eWxlCitgZ21vbi5vdXQnIGhlYWRlciwgdGhlbiBhc3N1bWluZyB0aGlzIGlzIGFuIG9sZC1zdHlsZSBCU0QgYGdtb24ub3V0JyBpZgordGhlIG1hZ2ljIG51bWJlciB0ZXN0IGZhaWxlZC4KKworICAgTmV3LXN0eWxlIGhpc3RvZ3JhbSByZWNvcmRzIGFyZSByZWFkIGJ5IGBoaXN0LmM6aGlzdF9yZWFkX3JlYycuICBGb3IKK3RoZSBmaXJzdCBoaXN0b2dyYW0gcmVjb3JkLCBhbGxvY2F0ZSBhIG1lbW9yeSBhcnJheSB0byBob2xkIGFsbCB0aGUKK2JpbnMsIGFuZCByZWFkIHRoZW0gaW4uICBXaGVuIG11bHRpcGxlIHByb2ZpbGUgZGF0YSBmaWxlcyAob3IgZmlsZXMKK3dpdGggbXVsdGlwbGUgaGlzdG9ncmFtIHJlY29yZHMpIGFyZSByZWFkLCB0aGUgbWVtb3J5IHJhbmdlcyBvZiBlYWNoCitwYWlyIG9mIGhpc3RvZ3JhbSByZWNvcmRzIG11c3QgYmUgZWl0aGVyIGVxdWFsLCBvciBub24tb3ZlcmxhcHBpbmcuCitGb3IgZWFjaCBwYWlyIG9mIGhpc3RvZ3JhbSByZWNvcmRzLCB0aGUgcmVzb2x1dGlvbiAobWVtb3J5IHJlZ2lvbiBzaXplCitkaXZpZGVkIGJ5IHRoZSBudW1iZXIgb2YgYmlucykgbXVzdCBiZSB0aGUgc2FtZS4gIFRoZSB0aW1lIHVuaXQgbXVzdCBiZQordGhlIHNhbWUgZm9yIGFsbCBoaXN0b2dyYW0gcmVjb3Jkcy4gSWYgdGhlIGFib3ZlIGNvbnRhaW50cyBhcmUgbWV0LCBhbGwKK2hpc3RvZ3JhbXMgZm9yIHRoZSBzYW1lIG1lbW9yeSByYW5nZSBhcmUgbWVyZ2VkLgorCisgICBBcyBlYWNoIGNhbGwgZ3JhcGggcmVjb3JkIGlzIHJlYWQgKGBjYWxsX2dyYXBoLmM6Y2dfcmVhZF9yZWMnKSwgdGhlCitwYXJlbnQgYW5kIGNoaWxkIGFkZHJlc3NlcyBhcmUgbWF0Y2hlZCB0byBzeW1ib2wgdGFibGUgZW50cmllcywgYW5kIGEKK2NhbGwgZ3JhcGggYXJjIGlzIGNyZWF0ZWQgYnkgYGNnX2FyY3MuYzphcmNfYWRkJywgdW5sZXNzIHRoZSBhcmMgZmFpbHMKK2Egc3ltc3BlYyBjaGVjayBhZ2FpbnN0IElOQ0xfQVJDUy9FWENMX0FSQ1MuICBBcyBlYWNoIGFyYyBpcyBhZGRlZCwgYQorbGlua2VkIGxpc3QgaXMgbWFpbnRhaW5lZCBvZiB0aGUgcGFyZW50J3MgY2hpbGQgYXJjcywgYW5kIG9mIHRoZSBjaGlsZCdzCitwYXJlbnQgYXJjcy4gIEJvdGggdGhlIGNoaWxkJ3MgY2FsbCBjb3VudCBhbmQgdGhlIGFyYydzIGNhbGwgY291bnQgYXJlCitpbmNyZW1lbnRlZCBieSB0aGUgcmVjb3JkJ3MgY2FsbCBjb3VudC4KKworICAgQmFzaWMtYmxvY2sgcmVjb3JkcyBhcmUgcmVhZCAoYGJhc2ljX2Jsb2Nrcy5jOmJiX3JlYWRfcmVjJyksIGJ1dAorb25seSBpZiBsaW5lLWJ5LWxpbmUgcHJvZmlsaW5nIGhhcyBiZWVuIHNlbGVjdGVkLiAgRWFjaCBiYXNpYy1ibG9jaworYWRkcmVzcyBpcyBtYXRjaGVkIHRvIGEgY29ycmVzcG9uZGluZyBsaW5lIHN5bWJvbCBpbiB0aGUgc3ltYm9sIHRhYmxlLAorYW5kIGFuIGVudHJ5IG1hZGUgaW4gdGhlIHN5bWJvbCdzIGJiX2FkZHIgYW5kIGJiX2NhbGxzIGFycmF5cy4gIEFnYWluLAoraWYgbXVsdGlwbGUgYmFzaWMtYmxvY2sgcmVjb3JkcyBhcmUgcHJlc2VudCBmb3IgdGhlIHNhbWUgYWRkcmVzcywgdGhlCitjYWxsIGNvdW50cyBhcmUgY3VtdWxhdGl2ZS4KKworICAgQSBnbW9uLnN1bSBmaWxlIGlzIGR1bXBlZCwgaWYgcmVxdWVzdGVkIChgZ21vbl9pby5jOmdtb25fb3V0X3dyaXRlJykuCisKKyAgIElmIGhpc3RvZ3JhbXMgd2VyZSBwcmVzZW50IGluIHRoZSBkYXRhIGZpbGVzLCBhc3NpZ24gdGhlbSB0byBzeW1ib2xzCisoYGhpc3QuYzpoaXN0X2Fzc2lnbl9zYW1wbGVzJykgYnkgaXRlcmF0aW5nIG92ZXIgYWxsIHRoZSBzYW1wbGUgYmlucworYW5kIGFzc2lnbmluZyB0aGVtIHRvIHN5bWJvbHMuICBTaW5jZSB0aGUgc3ltYm9sIHRhYmxlIGlzIHNvcnRlZCBpbgorb3JkZXIgb2YgYXNjZW5kaW5nIG1lbW9yeSBhZGRyZXNzZXMsIHdlIGNhbiBzaW1wbGUgZm9sbG93IGFsb25nIGluIHRoZQorc3ltYm9sIHRhYmxlIGFzIHdlIG1ha2Ugb3VyIHBhc3Mgb3ZlciB0aGUgc2FtcGxlIGJpbnMuICBUaGlzIHN0ZXAKK2luY2x1ZGVzIGEgc3ltc3BlYyBjaGVjayBhZ2FpbnN0IElOQ0xfRkxBVC9FWENMX0ZMQVQuICBEZXBlbmRpbmcgb24gdGhlCitoaXN0b2dyYW0gc2NhbGUgZmFjdG9yLCBhIHNhbXBsZSBiaW4gbWF5IHNwYW4gbXVsdGlwbGUgc3ltYm9scywgaW4KK3doaWNoIGNhc2UgYSBmcmFjdGlvbiBvZiB0aGUgc2FtcGxlIGNvdW50IGlzIGFsbG9jYXRlZCB0byBlYWNoIHN5bWJvbCwKK3Byb3BvcnRpb25hbCB0byB0aGUgZGVncmVlIG9mIG92ZXJsYXAuICBUaGlzIGVmZmVjdCBpcyByYXJlIGZvciBub3JtYWwKK3Byb2ZpbGluZywgYnV0IG92ZXJsYXBzIGFyZSBtb3JlIGNvbW1vbiBkdXJpbmcgbGluZS1ieS1saW5lIHByb2ZpbGluZywKK2FuZCBjYW4gY2F1c2UgZWFjaCBvZiB0d28gYWRqYWNlbnQgbGluZXMgdG8gYmUgY3JlZGl0ZWQgd2l0aCBoYWxmIGEKK2hpdCwgZm9yIGV4YW1wbGUuCisKKyAgIElmIGNhbGwgZ3JhcGggZGF0YSBpcyBwcmVzZW50LCBgY2dfYXJjcy5jOmNnX2Fzc2VtYmxlJyBpcyBjYWxsZWQuCitGaXJzdCwgaWYgYC1jJyB3YXMgc3BlY2lmaWVkLCBhIG1hY2hpbmUtZGVwZW5kZW50IHJvdXRpbmUgKGBmaW5kX2NhbGwnKQorc2NhbnMgdGhyb3VnaCBlYWNoIHN5bWJvbCdzIG1hY2hpbmUgY29kZSwgbG9va2luZyBmb3Igc3Vicm91dGluZSBjYWxsCitpbnN0cnVjdGlvbnMsIGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgY2FsbCBncmFwaCB3aXRoIGEgemVybyBjYWxsIGNvdW50LgorQSB0b3BvbG9naWNhbCBzb3J0IGlzIHBlcmZvcm1lZCBieSBkZXB0aC1maXJzdCBudW1iZXJpbmcgYWxsIHRoZQorc3ltYm9scyAoYGNnX2Rmbi5jOmNnX2RmbicpLCBzbyB0aGF0IGNoaWxkcmVuIGFyZSBhbHdheXMgbnVtYmVyZWQgbGVzcwordGhhbiB0aGVpciBwYXJlbnRzLCB0aGVuIG1ha2luZyBhIGFycmF5IG9mIHBvaW50ZXJzIGludG8gdGhlIHN5bWJvbAordGFibGUgYW5kIHNvcnRpbmcgaXQgaW50byBudW1lcmljYWwgb3JkZXIsIHdoaWNoIGlzIHJldmVyc2UgdG9wb2xvZ2ljYWwKK29yZGVyIChjaGlsZHJlbiBhcHBlYXIgYmVmb3JlIHBhcmVudHMpLiAgQ3ljbGVzIGFyZSBhbHNvIGRldGVjdGVkIGF0Cit0aGlzIHBvaW50LCBhbGwgbWVtYmVycyBvZiB3aGljaCBhcmUgYXNzaWduZWQgdGhlIHNhbWUgdG9wb2xvZ2ljYWwKK251bWJlci4gIFR3byBwYXNzZXMgYXJlIG5vdyBtYWRlIHRocm91Z2ggdGhpcyBzb3J0ZWQgYXJyYXkgb2Ygc3ltYm9sCitwb2ludGVycy4gIFRoZSBmaXJzdCBwYXNzLCBmcm9tIGVuZCB0byBiZWdpbm5pbmcgKHBhcmVudHMgdG8gY2hpbGRyZW4pLAorY29tcHV0ZXMgdGhlIGZyYWN0aW9uIG9mIGNoaWxkIHRpbWUgdG8gcHJvcGFnYXRlIHRvIGVhY2ggcGFyZW50IGFuZCBhCitwcmludCBmbGFnLiAgVGhlIHByaW50IGZsYWcgcmVmbGVjdHMgc3ltc3BlYyBoYW5kbGluZyBvZgorSU5DTF9HUkFQSC9FWENMX0dSQVBILCB3aXRoIGEgcGFyZW50J3MgaW5jbHVkZSBvciBleGNsdWRlIChwcmludCBvciBubworcHJpbnQpIHByb3BlcnR5IGJlaW5nIHByb3BhZ2F0ZWQgdG8gaXRzIGNoaWxkcmVuLCB1bmxlc3MgdGhleQordGhlbXNlbHZlcyBleHBsaWNpdGx5IGFwcGVhciBpbiBJTkNMX0dSQVBIIG9yIEVYQ0xfR1JBUEguICBBIHNlY29uZAorcGFzcywgZnJvbSBiZWdpbm5pbmcgdG8gZW5kIChjaGlsZHJlbiB0byBwYXJlbnRzKSBhY3R1YWxseSBwcm9wYWdhdGVzCit0aGUgdGltaW5ncyBhbG9uZyB0aGUgY2FsbCBncmFwaCwgc3ViamVjdCB0byBhIGNoZWNrIGFnYWluc3QKK0lOQ0xfVElNRS9FWENMX1RJTUUuICBXaXRoIHRoZSBwcmludCBmbGFnLCBmcmFjdGlvbnMsIGFuZCB0aW1pbmdzIG5vdworc3RvcmVkIGluIHRoZSBzeW1ib2wgc3RydWN0dXJlcywgdGhlIHRvcG9sb2dpY2FsIHNvcnQgYXJyYXkgaXMgbm93CitkaXNjYXJkZWQsIGFuZCBhIG5ldyBhcnJheSBvZiBwb2ludGVycyBpcyBhc3NlbWJsZWQsIHRoaXMgdGltZSBzb3J0ZWQKK2J5IHByb3BhZ2F0ZWQgdGltZS4KKworICAgRmluYWxseSwgcHJpbnQgdGhlIHZhcmlvdXMgb3V0cHV0cyB0aGUgdXNlciByZXF1ZXN0ZWQsIHdoaWNoIGlzIG5vdworZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gIFRoZSBjYWxsIGdyYXBoIChgY2dfcHJpbnQuYzpjZ19wcmludCcpIGFuZAorZmxhdCBwcm9maWxlIChgaGlzdC5jOmhpc3RfcHJpbnQnKSBhcmUgcmVndXJnaXRhdGlvbnMgb2YgdmFsdWVzIGFscmVhZHkKK2NvbXB1dGVkLiAgVGhlIGFubm90YXRlZCBzb3VyY2UgbGlzdGluZworKGBiYXNpY19ibG9ja3MuYzpwcmludF9hbm5vdGF0ZWRfc291cmNlJykgdXNlcyBiYXNpYy1ibG9jayBpbmZvcm1hdGlvbiwKK2lmIHByZXNlbnQsIHRvIGxhYmVsIGVhY2ggbGluZSBvZiBjb2RlIHdpdGggY2FsbCBjb3VudHMsIG90aGVyd2lzZSBvbmx5Cit0aGUgZnVuY3Rpb24gY2FsbCBjb3VudHMgYXJlIHByZXNlbnRlZC4KKworICAgVGhlIGZ1bmN0aW9uIG9yZGVyaW5nIGNvZGUgaXMgbWFyZ2luYWxseSB3ZWxsIGRvY3VtZW50ZWQgaW4gdGhlCitzb3VyY2UgY29kZSBpdHNlbGYgKGBjZ19wcmludC5jJykuICBCYXNpY2FsbHksIHRoZSBmdW5jdGlvbnMgd2l0aCB0aGUKK21vc3QgdXNlIGFuZCB0aGUgbW9zdCBwYXJlbnRzIGFyZSBwbGFjZWQgZmlyc3QsIGZvbGxvd2VkIGJ5IG90aGVyCitmdW5jdGlvbnMgd2l0aCB0aGUgbW9zdCB1c2UsIGZvbGxvd2VkIGJ5IGxvd2VyIHVzZSBmdW5jdGlvbnMsIGZvbGxvd2VkCitieSB1bnVzZWQgZnVuY3Rpb25zIGF0IHRoZSBlbmQuCisKKx8KK0ZpbGU6IGdwcm9mLmluZm8sICBOb2RlOiBEZWJ1Z2dpbmcsICBQcmV2OiBJbnRlcm5hbHMsICBVcDogRGV0YWlscworCis5LjQgRGVidWdnaW5nIGBncHJvZicKKz09PT09PT09PT09PT09PT09PT09PQorCitJZiBgZ3Byb2YnIHdhcyBjb21waWxlZCB3aXRoIGRlYnVnZ2luZyBlbmFibGVkLCB0aGUgYC1kJyBvcHRpb24KK3RyaWdnZXJzIGRlYnVnZ2luZyBvdXRwdXQgKHRvIHN0ZG91dCkgd2hpY2ggY2FuIGJlIGhlbHBmdWwgaW4KK3VuZGVyc3RhbmRpbmcgaXRzIG9wZXJhdGlvbi4gIFRoZSBkZWJ1Z2dpbmcgbnVtYmVyIHNwZWNpZmllZCBpcworaW50ZXJwcmV0ZWQgYXMgYSBzdW0gb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisyIC0gVG9wb2xvZ2ljYWwgc29ydAorICAgICBNb25pdG9yIGRlcHRoLWZpcnN0IG51bWJlcmluZyBvZiBzeW1ib2xzIGR1cmluZyBjYWxsIGdyYXBoIGFuYWx5c2lzCisKKzQgLSBDeWNsZXMKKyAgICAgU2hvd3Mgc3ltYm9scyBhcyB0aGV5IGFyZSBpZGVudGlmaWVkIGFzIGN5Y2xlIGhlYWRzCisKKzE2IC0gVGFsbHlpbmcKKyAgICAgQXMgdGhlIGNhbGwgZ3JhcGggYXJjcyBhcmUgcmVhZCwgc2hvdyBlYWNoIGFyYyBhbmQgaG93IHRoZSB0b3RhbAorICAgICBjYWxscyB0byBlYWNoIGZ1bmN0aW9uIGFyZSB0YWxsaWVkCisKKzMyIC0gQ2FsbCBncmFwaCBhcmMgc29ydGluZworICAgICBEZXRhaWxzIHNvcnRpbmcgaW5kaXZpZHVhbCBwYXJlbnRzL2NoaWxkcmVuIHdpdGhpbiBlYWNoIGNhbGwgZ3JhcGgKKyAgICAgZW50cnkKKworNjQgLSBSZWFkaW5nIGhpc3RvZ3JhbSBhbmQgY2FsbCBncmFwaCByZWNvcmRzCisgICAgIFNob3dzIGFkZHJlc3MgcmFuZ2VzIG9mIGhpc3RvZ3JhbXMgYXMgdGhleSBhcmUgcmVhZCwgYW5kIGVhY2ggY2FsbAorICAgICBncmFwaCBhcmMKKworMTI4IC0gU3ltYm9sIHRhYmxlCisgICAgIFJlYWRpbmcsIGNsYXNzaWZ5aW5nLCBhbmQgc29ydGluZyB0aGUgc3ltYm9sIHRhYmxlIGZyb20gdGhlIG9iamVjdAorICAgICBmaWxlLiAgRm9yIGxpbmUtYnktbGluZSBwcm9maWxpbmcgKGAtbCcgb3B0aW9uKSwgYWxzbyBzaG93cyBsaW5lCisgICAgIG51bWJlcnMgYmVpbmcgYXNzaWduZWQgdG8gbWVtb3J5IGFkZHJlc3Nlcy4KKworMjU2IC0gU3RhdGljIGNhbGwgZ3JhcGgKKyAgICAgVHJhY2Ugb3BlcmF0aW9uIG9mIGAtYycgb3B0aW9uCisKKzUxMiAtIFN5bWJvbCB0YWJsZSBhbmQgYXJjIHRhYmxlIGxvb2t1cHMKKyAgICAgRGV0YWlsIG9wZXJhdGlvbiBvZiBsb29rdXAgcm91dGluZXMKKworMTAyNCAtIENhbGwgZ3JhcGggcHJvcGFnYXRpb24KKyAgICAgU2hvd3MgaG93IGZ1bmN0aW9uIHRpbWVzIGFyZSBwcm9wYWdhdGVkIGFsb25nIHRoZSBjYWxsIGdyYXBoCisKKzIwNDggLSBCYXNpYy1ibG9ja3MKKyAgICAgU2hvd3MgYmFzaWMtYmxvY2sgcmVjb3JkcyBhcyB0aGV5IGFyZSByZWFkIGZyb20gcHJvZmlsZSBkYXRhIChvbmx5CisgICAgIG1lYW5pbmdmdWwgd2l0aCBgLWwnIG9wdGlvbikKKworNDA5NiAtIFN5bXNwZWNzCisgICAgIFNob3dzIHN5bXNwZWMtdG8tc3ltYm9sIHBhdHRlcm4gbWF0Y2hpbmcgb3BlcmF0aW9uCisKKzgxOTIgLSBBbm5vdGF0ZSBzb3VyY2UKKyAgICAgVHJhY2tzIG9wZXJhdGlvbiBvZiBgLUEnIG9wdGlvbgorCisfCitGaWxlOiBncHJvZi5pbmZvLCAgTm9kZTogR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCAgUHJldjogRGV0YWlscywgIFVwOiBUb3AKKworQXBwZW5kaXggQSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4zLCAzIE5vdmVtYmVyIDIwMDgKKworICAgICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIGBodHRwOi8vZnNmLm9yZy8nCisKKyAgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgICAgIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisgIDAuIFBSRUFNQkxFCisKKyAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorICAgICBmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworICAgICBhc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKKyAgICAgd2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvcgorICAgICBub25jb21tZXJjaWFsbHkuICBTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlCisgICAgIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5IHRvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdAorICAgICBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlIGZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCisgICAgIFRoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgImNvcHlsZWZ0Iiwgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCisgICAgIHdvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4KKyAgICAgSXQgY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CisgICAgIGxpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKKyAgICAgV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvcgorICAgICBmcmVlIHNvZnR3YXJlLCBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhCisgICAgIGZyZWUgcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zCisgICAgIHRoYXQgdGhlIHNvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvCisgICAgIHNvZnR3YXJlIG1hbnVhbHM7IGl0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLCByZWdhcmRsZXNzCisgICAgIG9mIHN1YmplY3QgbWF0dGVyIG9yIHdoZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLgorICAgICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlIHByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzCisgICAgIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKworICAxLiBBUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCisgICAgIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwKKyAgICAgdGhhdCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0CisgICAgIGNhbiBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZQorICAgICBncmFudHMgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLAorICAgICB0byB1c2UgdGhhdCB3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUKKyAgICAgIkRvY3VtZW50IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIKKyAgICAgb2YgdGhlIHB1YmxpYyBpcyBhIGxpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91CisgICAgIGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UgY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYQorICAgICB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24gdW5kZXIgY29weXJpZ2h0IGxhdy4KKworICAgICBBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKKyAgICAgRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCisgICAgIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCisgICAgIEEgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24KKyAgICAgb2YgdGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorICAgICBwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudCdzIG92ZXJhbGwKKyAgICAgc3ViamVjdCAob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkCisgICAgIGZhbGwgZGlyZWN0bHkgd2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudAorICAgICBpcyBpbiBwYXJ0IGEgdGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdAorICAgICBleHBsYWluIGFueSBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mCisgICAgIGhpc3RvcmljYWwgY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvcgorICAgICBvZiBsZWdhbCwgY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24KKyAgICAgcmVnYXJkaW5nIHRoZW0uCisKKyAgICAgVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZQorICAgICB0aXRsZXMgYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4KKyAgICAgdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcworICAgICBMaWNlbnNlLiAgSWYgYSBzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZgorICAgICBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QgYWxsb3dlZCB0byBiZSBkZXNpZ25hdGVkIGFzIEludmFyaWFudC4KKyAgICAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8gSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50CisgICAgIGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQgU2VjdGlvbnMgdGhlbiB0aGVyZSBhcmUgbm9uZS4KKworICAgICBUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlCisgICAgIGxpc3RlZCwgYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZQorICAgICB0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQQorICAgICBGcm9udC1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkKKyAgICAgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworICAgICBBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCisgICAgIHJlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorICAgICBnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CisgICAgIHN0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMKKyAgICAgY29tcG9zZWQgb2YgcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUKKyAgICAgd2lkZWx5IGF2YWlsYWJsZSBkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvCisgICAgIHRleHQgZm9ybWF0dGVycyBvciBmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZgorICAgICBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbgorICAgICBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZSBmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mCisgICAgIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0IG9yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudAorICAgICBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuICBBbiBpbWFnZSBmb3JtYXQgaXMKKyAgICAgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQgb2YgdGV4dC4gIEEKKyAgICAgY29weSB0aGF0IGlzIG5vdCAiVHJhbnNwYXJlbnQiIGlzIGNhbGxlZCAiT3BhcXVlIi4KKworICAgICBFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorICAgICBBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwKKyAgICAgU0dNTCBvciBYTUwgdXNpbmcgYSBwdWJsaWNseSBhdmFpbGFibGUgRFRELCBhbmQKKyAgICAgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yCisgICAgIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mIHRyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZQorICAgICBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQKKyAgICAgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5IHByb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvcgorICAgICBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yIHByb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkKKyAgICAgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGCisgICAgIHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KKworICAgICBUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKKyAgICAgcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZQorICAgICBtYXRlcmlhbCB0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yCisgICAgIHdvcmtzIGluIGZvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlCisgICAgIFBhZ2UiIG1lYW5zIHRoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlCisgICAgIHdvcmsncyB0aXRsZSwgcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKKyAgICAgVGhlICJwdWJsaXNoZXIiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgY29waWVzCisgICAgIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLgorCisgICAgIEEgc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50CisgICAgIHdob3NlIHRpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcworICAgICBmb2xsb3dpbmcgdGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVoKKyAgICAgc3RhbmRzIGZvciBhIHNwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMKKyAgICAgIkFja25vd2xlZGdlbWVudHMiLCAiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikKKyAgICAgVG8gIlByZXNlcnZlIHRoZSBUaXRsZSIgb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZQorICAgICBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZworICAgICB0byB0aGlzIGRlZmluaXRpb24uCisKKyAgICAgVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZQorICAgICB3aGljaCBzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZQorICAgICBXYXJyYW50eSBEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4KKyAgICAgdGhpcyBMaWNlbnNlLCBidXQgb25seSBhcyByZWdhcmRzIGRpc2NsYWltaW5nIHdhcnJhbnRpZXM6IGFueSBvdGhlcgorICAgICBpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kCisgICAgIGhhcyBubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisgIDIuIFZFUkJBVElNIENPUFlJTkcKKworICAgICBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgorICAgICBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCisgICAgIGNvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UKKyAgICAgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91CisgICAgIGFkZCBubyBvdGhlciBjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91CisgICAgIG1heSBub3QgdXNlIHRlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nCisgICAgIG9yIGZ1cnRoZXIgY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLAorICAgICB5b3UgbWF5IGFjY2VwdCBjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdQorICAgICBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cKKyAgICAgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCisgICAgIFlvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsCisgICAgIGFuZCB5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisgIDMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworICAgICBJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkKKyAgICAgaGF2ZSBwcmludGVkIGNvdmVycykgb2YgdGhlIERvY3VtZW50LCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kCisgICAgIHRoZSBEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdAorICAgICBlbmNsb3NlIHRoZSBjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbAorICAgICB0aGVzZSBDb3ZlciBUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQKKyAgICAgQmFjay1Db3ZlciBUZXh0cyBvbiB0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5CisgICAgIGFuZCBsZWdpYmx5IGlkZW50aWZ5IHlvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZQorICAgICBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQgdGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlCisgICAgIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZCB2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwKKyAgICAgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4gIENvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlCisgICAgIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlIHRoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kCisgICAgIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQgYXMgdmVyYmF0aW0gY29weWluZyBpbgorICAgICBvdGhlciByZXNwZWN0cy4KKworICAgICBJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CisgICAgIGxlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKKyAgICAgcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8KKyAgICAgYWRqYWNlbnQgcGFnZXMuCisKKyAgICAgSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudAorICAgICBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYQorICAgICBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50IGNvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvcgorICAgICBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkgYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20KKyAgICAgd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZyBwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZAorICAgICB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMgYSBjb21wbGV0ZSBUcmFuc3BhcmVudAorICAgICBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4gIElmIHlvdSB1c2UgdGhlCisgICAgIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLCB3aGVuIHlvdQorICAgICBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlIHRoYXQKKyAgICAgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkCisgICAgIGxvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91CisgICAgIGRpc3RyaWJ1dGUgYW4gT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IKKyAgICAgcmV0YWlsZXJzKSBvZiB0aGF0IGVkaXRpb24gdG8gdGhlIHB1YmxpYy4KKworICAgICBJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YKKyAgICAgdGhlIERvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YKKyAgICAgY29waWVzLCB0byBnaXZlIHRoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkCisgICAgIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisgIDQuIE1PRElGSUNBVElPTlMKKworICAgICBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudAorICAgICB1bmRlciB0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdQorICAgICByZWxlYXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGgKKyAgICAgdGhlIE1vZGlmaWVkIFZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMKKyAgICAgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvCisgICAgIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weSBvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZQorICAgICB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKKyAgICAgICBBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUKKyAgICAgICAgICBkaXN0aW5jdCBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZgorICAgICAgICAgIHByZXZpb3VzIHZlcnNpb25zICh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQKKyAgICAgICAgICBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUKKyAgICAgICAgICBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbiBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mCisgICAgICAgICAgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCisKKyAgICAgICBCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yCisgICAgICAgICAgZW50aXRpZXMgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4KKyAgICAgICAgICB0aGUgTW9kaWZpZWQgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZQorICAgICAgICAgIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwKKyAgICAgICAgICBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UKKyAgICAgICAgICBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCisKKyAgICAgICBDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgICAgICAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCisKKyAgICAgICBELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KKworICAgICAgIEUuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgICAgICAgICBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCisKKyAgICAgICBGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZQorICAgICAgICAgIG5vdGljZSBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQKKyAgICAgICAgICBWZXJzaW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluCisgICAgICAgICAgdGhlIEFkZGVuZHVtIGJlbG93LgorCisgICAgICAgRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQKKyAgICAgICAgICBTZWN0aW9ucyBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MKKyAgICAgICAgICBsaWNlbnNlIG5vdGljZS4KKworICAgICAgIEguIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgICAgSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsCisgICAgICAgICAgYW5kIGFkZCB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcKKyAgICAgICAgICBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uCisgICAgICAgICAgdGhlIFRpdGxlIFBhZ2UuICBJZiB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbgorICAgICAgICAgIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZSBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywKKyAgICAgICAgICBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcyBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwKKyAgICAgICAgICB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgc3RhdGVkIGluCisgICAgICAgICAgdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorCisgICAgICAgSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50CisgICAgICAgICAgZm9yIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kCisgICAgICAgICAgbGlrZXdpc2UgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgICAgICAgICBwcmV2aW91cyB2ZXJzaW9ucyBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluCisgICAgICAgICAgdGhlICJIaXN0b3J5IiBzZWN0aW9uLiAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYQorICAgICAgICAgIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0IGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZQorICAgICAgICAgIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbgorICAgICAgICAgIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorCisgICAgICAgSy4gRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiBvciAiRGVkaWNhdGlvbnMiLAorICAgICAgICAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZQorICAgICAgICAgIHNlY3Rpb24gYWxsIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IKKyAgICAgICAgICBhY2tub3dsZWRnZW1lbnRzIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorCisgICAgICAgTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAorICAgICAgICAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKKyAgICAgICAgICBvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbgorICAgICAgICAgIHRpdGxlcy4KKworICAgICAgIE0uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICAgICAgICAgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KKworICAgICAgIE4uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkCisgICAgICAgICAgIkVuZG9yc2VtZW50cyIgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50CisgICAgICAgICAgU2VjdGlvbi4KKworICAgICAgIE8uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworICAgICBJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCisgICAgIGFwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubworICAgICBtYXRlcmlhbCBjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KKyAgICAgZGVzaWduYXRlIHNvbWUgb3IgYWxsIG9mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsCisgICAgIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlIGxpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZAorICAgICBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuICBUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueQorICAgICBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworICAgICBZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCisgICAgIG5vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworICAgICBwYXJ0aWVzLS1mb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0CisgICAgIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZQorICAgICBkZWZpbml0aW9uIG9mIGEgc3RhbmRhcmQuCisKKyAgICAgWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LAorICAgICBhbmQgYSBwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kCisgICAgIG9mIHRoZSBsaXN0IG9mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUKKyAgICAgcGFzc2FnZSBvZiBGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZQorICAgICBhZGRlZCBieSAob3IgdGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUKKyAgICAgRG9jdW1lbnQgYWxyZWFkeSBpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLAorICAgICBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvciBieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eQorICAgICB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsIHlvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heQorICAgICByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdCBwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzCisgICAgIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCisgICAgIFRoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMKKyAgICAgTGljZW5zZSBnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvCisgICAgIGFzc2VydCBvciBpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworICA1LiBDT01CSU5JTkcgRE9DVU1FTlRTCisKKyAgICAgWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlcgorICAgICB0aGlzIExpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IKKyAgICAgbW9kaWZpZWQgdmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uCisgICAgIGFsbCBvZiB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLAorICAgICB1bm1vZGlmaWVkLCBhbmQgbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91cgorICAgICBjb21iaW5lZCB3b3JrIGluIGl0cyBsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbAorICAgICB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworICAgICBUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorICAgICBtdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCisgICAgIGNvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZQorICAgICBidXQgZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUKKyAgICAgYnkgYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgb3JpZ2luYWwgYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYQorICAgICB1bmlxdWUgbnVtYmVyLiAgTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbgorICAgICB0aGUgbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZQorICAgICBjb21iaW5lZCB3b3JrLgorCisgICAgIEluIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQKKyAgICAgIkhpc3RvcnkiIGluIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbgorICAgICBFbnRpdGxlZCAiSGlzdG9yeSI7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkCisgICAgICJBY2tub3dsZWRnZW1lbnRzIiwgYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiRGVkaWNhdGlvbnMiLiAgWW91CisgICAgIG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucyBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzLiIKKworICA2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworICAgICBZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlcgorICAgICBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbAorICAgICBjb3BpZXMgb2YgdGhpcyBMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkKKyAgICAgdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZQorICAgICBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUKKyAgICAgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworICAgICBZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kCisgICAgIGRpc3RyaWJ1dGUgaXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydAorICAgICBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdworICAgICB0aGlzIExpY2Vuc2UgaW4gYWxsIG90aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mCisgICAgIHRoYXQgZG9jdW1lbnQuCisKKyAgNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCisgICAgIEEgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyCisgICAgIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mCisgICAgIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlCisgICAgIGNvcHlyaWdodCByZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlCisgICAgIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbAorICAgICB3b3JrcyBwZXJtaXQuICBXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMKKyAgICAgTGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaAorICAgICBhcmUgbm90IHRoZW1zZWx2ZXMgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRG9jdW1lbnQuCisKKyAgICAgSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKKyAgICAgY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmCisgICAgIG9mIHRoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkCisgICAgIG9uIGNvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKKyAgICAgZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYworICAgICBmb3JtLiAgT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0CisgICAgIHRoZSB3aG9sZSBhZ2dyZWdhdGUuCisKKyAgOC4gVFJBTlNMQVRJT04KKworICAgICBUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKKyAgICAgZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uCisgICAgIDQuICBSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKKyAgICAgcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCisgICAgIHRyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCisgICAgIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCisgICAgIHRyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorICAgICBEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbworICAgICBpbmNsdWRlIHRoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUKKyAgICAgb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEKKyAgICAgZGlzYWdyZWVtZW50IGJldHdlZW4gdGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZgorICAgICB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2Ugb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbAorICAgICBwcmV2YWlsLgorCisgICAgIElmIGEgc2VjdGlvbiBpbiB0aGUgRG9jdW1lbnQgaXMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorICAgICAiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0bworICAgICBQcmVzZXJ2ZSBpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUKKyAgICAgYWN0dWFsIHRpdGxlLgorCisgIDkuIFRFUk1JTkFUSU9OCisKKyAgICAgWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorICAgICBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CisgICAgIG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgaXQgaXMgdm9pZCwKKyAgICAgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCisgICAgIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorICAgICBwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkKKyAgICAgYW5kIGZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZQorICAgICBjb3B5cmlnaHQgaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lCisgICAgIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCisgICAgIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworICAgICByZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKKyAgICAgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorICAgICByZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tCisgICAgIHRoYXQgY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cworICAgICBhZnRlciB5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICAgICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlCisgICAgIHRoZSBsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbQorICAgICB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kCisgICAgIG5vdCBwZXJtYW5lbnRseSByZWluc3RhdGVkLCByZWNlaXB0IG9mIGEgY29weSBvZiBzb21lIG9yIGFsbCBvZgorICAgICB0aGUgc2FtZSBtYXRlcmlhbCBkb2VzIG5vdCBnaXZlIHlvdSBhbnkgcmlnaHRzIHRvIHVzZSBpdC4KKworIDEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCisgICAgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zIG9mCisgICAgIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldworICAgICB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKKyAgICAgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQorICAgICBgaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0LycuCisKKyAgICAgRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbgorICAgICBudW1iZXIuICBJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkCisgICAgIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91CisgICAgIGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZgorICAgICB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4KKyAgICAgcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmCisgICAgIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLAorICAgICB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwcm94eQorICAgICBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQKKyAgICAgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5CisgICAgIGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBEb2N1bWVudC4KKworIDExLiBSRUxJQ0VOU0lORworCisgICAgICJNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24gU2l0ZSIgKG9yICJNTUMgU2l0ZSIpIG1lYW5zIGFueQorICAgICBXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIgdGhhdCBwdWJsaXNoZXMgY29weXJpZ2h0YWJsZSB3b3JrcyBhbmQgYWxzbworICAgICBwcm92aWRlcyBwcm9taW5lbnQgZmFjaWxpdGllcyBmb3IgYW55Ym9keSB0byBlZGl0IHRob3NlIHdvcmtzLiAgQQorICAgICBwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLgorICAgICBBICJNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24iIChvciAiTU1DIikgY29udGFpbmVkIGluIHRoZQorICAgICBzaXRlIG1lYW5zIGFueSBzZXQgb2YgY29weXJpZ2h0YWJsZSB3b3JrcyB0aHVzIHB1Ymxpc2hlZCBvbiB0aGUgTU1DCisgICAgIHNpdGUuCisKKyAgICAgIkNDLUJZLVNBIiBtZWFucyB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZSBBbGlrZSAzLjAKKyAgICAgbGljZW5zZSBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucyBDb3Jwb3JhdGlvbiwgYSBub3QtZm9yLXByb2ZpdAorICAgICBjb3Jwb3JhdGlvbiB3aXRoIGEgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGluIFNhbiBGcmFuY2lzY28sCisgICAgIENhbGlmb3JuaWEsIGFzIHdlbGwgYXMgZnV0dXJlIGNvcHlsZWZ0IHZlcnNpb25zIG9mIHRoYXQgbGljZW5zZQorICAgICBwdWJsaXNoZWQgYnkgdGhhdCBzYW1lIG9yZ2FuaXphdGlvbi4KKworICAgICAiSW5jb3Jwb3JhdGUiIG1lYW5zIHRvIHB1Ymxpc2ggb3IgcmVwdWJsaXNoIGEgRG9jdW1lbnQsIGluIHdob2xlIG9yCisgICAgIGluIHBhcnQsIGFzIHBhcnQgb2YgYW5vdGhlciBEb2N1bWVudC4KKworICAgICBBbiBNTUMgaXMgImVsaWdpYmxlIGZvciByZWxpY2Vuc2luZyIgaWYgaXQgaXMgbGljZW5zZWQgdW5kZXIgdGhpcworICAgICBMaWNlbnNlLCBhbmQgaWYgYWxsIHdvcmtzIHRoYXQgd2VyZSBmaXJzdCBwdWJsaXNoZWQgdW5kZXIgdGhpcworICAgICBMaWNlbnNlIHNvbWV3aGVyZSBvdGhlciB0aGFuIHRoaXMgTU1DLCBhbmQgc3Vic2VxdWVudGx5CisgICAgIGluY29ycG9yYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGludG8gdGhlIE1NQywgKDEpIGhhZCBubyBjb3ZlcgorICAgICB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsIGFuZCAoMikgd2VyZSB0aHVzIGluY29ycG9yYXRlZCBwcmlvcgorICAgICB0byBOb3ZlbWJlciAxLCAyMDA4LgorCisgICAgIFRoZSBvcGVyYXRvciBvZiBhbiBNTUMgU2l0ZSBtYXkgcmVwdWJsaXNoIGFuIE1NQyBjb250YWluZWQgaW4gdGhlCisgICAgIHNpdGUgdW5kZXIgQ0MtQlktU0Egb24gdGhlIHNhbWUgc2l0ZSBhdCBhbnkgdGltZSBiZWZvcmUgQXVndXN0IDEsCisgICAgIDIwMDksIHByb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgorCisKK0FEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZQorbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCisgICAgICAgQ29weXJpZ2h0IChDKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworICAgICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIKKyAgICAgICBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYEdOVQorICAgICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlJycuCisKKyAgIElmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIKK1RleHRzLCByZXBsYWNlIHRoZSAid2l0aC4uLlRleHRzLiIgbGluZSB3aXRoIHRoaXM6CisKKyAgICAgICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aAorICAgICAgICAgdGhlIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzCisgICAgICAgICBiZWluZyBMSVNULgorCisgICBJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKKyAgIElmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB0bworcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorCisKKx8KK1RhZyBUYWJsZToKK05vZGU6IFRvcH83NzcKK05vZGU6IEludHJvZHVjdGlvbn8yMTAyCitOb2RlOiBDb21waWxpbmd/NDU5NAorTm9kZTogRXhlY3V0aW5nfzg2NTAKK05vZGU6IEludm9raW5nfzExNDM4CitOb2RlOiBPdXRwdXQgT3B0aW9uc38xMjg1MworTm9kZTogQW5hbHlzaXMgT3B0aW9uc38xOTk0MgorTm9kZTogTWlzY2VsbGFuZW91cyBPcHRpb25zfzIzNjQwCitOb2RlOiBEZXByZWNhdGVkIE9wdGlvbnN/MjQ4OTUKK05vZGU6IFN5bXNwZWNzfzI2OTY0CitOb2RlOiBPdXRwdXR/Mjg3OTAKK05vZGU6IEZsYXQgUHJvZmlsZX8yOTgzMAorTm9kZTogQ2FsbCBHcmFwaH8zNDc4MworTm9kZTogUHJpbWFyeX8zODAxNQorTm9kZTogQ2FsbGVyc380MDYwMworTm9kZTogU3Vicm91dGluZXN/NDI3MjAKK05vZGU6IEN5Y2xlc380NDU2MQorTm9kZTogTGluZS1ieS1saW5lfzUxMzM4CitOb2RlOiBBbm5vdGF0ZWQgU291cmNlfzU1NDExCitOb2RlOiBJbmFjY3VyYWN5fzU4NDEwCitOb2RlOiBTYW1wbGluZyBFcnJvcn81ODY2OAorTm9kZTogQXNzdW1wdGlvbnN/NjE1NzIKK05vZGU6IEhvdyBkbyBJP382MzA0MgorTm9kZTogSW5jb21wYXRpYmlsaXRpZXN/NjQ1OTYKK05vZGU6IERldGFpbHN/NjYwOTAKK05vZGU6IEltcGxlbWVudGF0aW9ufzY2NDgzCitOb2RlOiBGaWxlIEZvcm1hdH83MjM4MAorTm9kZTogSW50ZXJuYWxzfzc2NjcwCitOb2RlOiBEZWJ1Z2dpbmd/ODUxNjUKK05vZGU6IEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZX84Njc2NgorHworRW5kIFRhZyBUYWJsZQpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2xkLmluZm8gYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL2luZm8vbGQuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODkwNGYwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9pbmZvL2xkLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWFkZHIybGluZS4xIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWFkZHIybGluZS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOGIwY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtYWRkcjJsaW5lLjEKQEAgLTAsMCArMSwzMDIgQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjIzIChQb2Q6OlNpbXBsZSAzLjE0KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJBRERSMkxJTkUgMSIKKy5USCBBRERSMkxJTkUgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCithZGRyMmxpbmUgXC0gY29udmVydCBhZGRyZXNzZXMgaW50byBmaWxlIG5hbWVzIGFuZCBsaW5lIG51bWJlcnMuCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCithZGRyMmxpbmUgW1xmQlwtYVxmUnxcZkJcLVwtYWRkcmVzc2VzXGZSXQorICAgICAgICAgIFtcZkJcLWJcZlIgXGZJYmZkbmFtZVxmUnxcZkJcLVwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlJdCisgICAgICAgICAgW1xmQlwtQ1xmUnxcZkJcLVwtZGVtYW5nbGVcZlJbPVxmSXN0eWxlXGZSXV0KKyAgICAgICAgICBbXGZCXC1lXGZSIFxmSWZpbGVuYW1lXGZSfFxmQlwtXC1leGU9XGZSXGZJZmlsZW5hbWVcZlJdCisgICAgICAgICAgW1xmQlwtZlxmUnxcZkJcLVwtZnVuY3Rpb25zXGZSXSBbXGZCXC1zXGZSfFxmQlwtXC1iYXNlbmFtZVxmUl0KKyAgICAgICAgICBbXGZCXC1pXGZSfFxmQlwtXC1pbmxpbmVzXGZSXQorICAgICAgICAgIFtcZkJcLXBcZlJ8XGZCXC1cLXByZXR0eVwtcHJpbnRcZlJdCisgICAgICAgICAgW1xmQlwtalxmUnxcZkJcLVwtc2VjdGlvbj1cZlJcZkluYW1lXGZSXQorICAgICAgICAgIFtcZkJcLUhcZlJ8XGZCXC1cLWhlbHBcZlJdIFtcZkJcLVZcZlJ8XGZCXC1cLXZlcnNpb25cZlJdCisgICAgICAgICAgW2FkZHIgYWRkciAuLi5dCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitcJlxmQmFkZHIybGluZVxmUiB0cmFuc2xhdGVzIGFkZHJlc3NlcyBpbnRvIGZpbGUgbmFtZXMgYW5kIGxpbmUgbnVtYmVycy4KK0dpdmVuIGFuIGFkZHJlc3MgaW4gYW4gZXhlY3V0YWJsZSBvciBhbiBvZmZzZXQgaW4gYSBzZWN0aW9uIG9mIGEgcmVsb2NhdGFibGUKK29iamVjdCwgaXQgdXNlcyB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmlsZSBuYW1lIGFuZAorbGluZSBudW1iZXIgYXJlIGFzc29jaWF0ZWQgd2l0aCBpdC4KKy5QUAorVGhlIGV4ZWN1dGFibGUgb3IgcmVsb2NhdGFibGUgb2JqZWN0IHRvIHVzZSBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgXGZCXC1lXGZSCitvcHRpb24uICBUaGUgZGVmYXVsdCBpcyB0aGUgZmlsZSBcZklhLm91dFxmUi4gIFRoZSBzZWN0aW9uIGluIHRoZSByZWxvY2F0YWJsZQorb2JqZWN0IHRvIHVzZSBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgXGZCXC1qXGZSIG9wdGlvbi4KKy5QUAorXCZcZkJhZGRyMmxpbmVcZlIgaGFzIHR3byBtb2RlcyBvZiBvcGVyYXRpb24uCisuUFAKK0luIHRoZSBmaXJzdCwgaGV4YWRlY2ltYWwgYWRkcmVzc2VzIGFyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwKK2FuZCBcZkJhZGRyMmxpbmVcZlIgZGlzcGxheXMgdGhlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgZm9yIGVhY2gKK2FkZHJlc3MuCisuUFAKK0luIHRoZSBzZWNvbmQsIFxmQmFkZHIybGluZVxmUiByZWFkcyBoZXhhZGVjaW1hbCBhZGRyZXNzZXMgZnJvbQorc3RhbmRhcmQgaW5wdXQsIGFuZCBwcmludHMgdGhlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgZm9yIGVhY2gKK2FkZHJlc3Mgb24gc3RhbmRhcmQgb3V0cHV0LiAgSW4gdGhpcyBtb2RlLCBcZkJhZGRyMmxpbmVcZlIgbWF5IGJlIHVzZWQKK2luIGEgcGlwZSB0byBjb252ZXJ0IGR5bmFtaWNhbGx5IGNob3NlbiBhZGRyZXNzZXMuCisuUFAKK1RoZSBmb3JtYXQgb2YgdGhlIG91dHB1dCBpcyBcZkJccy0xRklMRU5BTUU6TElORU5PXHMwXGZSLiAgVGhlIGZpbGUgbmFtZSBhbmQKK2xpbmUgbnVtYmVyIGZvciBlYWNoIGlucHV0IGFkZHJlc3MgaXMgcHJpbnRlZCBvbiBzZXBhcmF0ZSBsaW5lcy4KKy5QUAorSWYgdGhlIFxmQlwtZlxmUiBvcHRpb24gaXMgdXNlZCwgdGhlbiBlYWNoIFxmQlxzLTFGSUxFTkFNRTpMSU5FTk9cczBcZlIKK2xpbmUgaXMgcHJlY2VkZWQgYnkgXGZCXHMtMUZVTkNUSU9OTkFNRVxzMFxmUiB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUKK2Z1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3MuCisuUFAKK0lmIHRoZSBcZkJcLWlcZlIgb3B0aW9uIGlzIHVzZWQgYW5kIHRoZSBjb2RlIGF0IHRoZSBnaXZlbiBhZGRyZXNzIGlzCitwcmVzZW50IHRoZXJlIGJlY2F1c2Ugb2YgaW5saW5pbmcgYnkgdGhlIGNvbXBpbGVyIHRoZW4gdGhlCitcJlxmQntccy0xRlVOQ1RJT05OQU1FXHMwfSBccy0xRklMRU5BTUU6TElORU5PXHMwXGZSIGluZm9ybWF0aW9uIGZvciB0aGUgaW5saW5pbmcKK2Z1bmN0aW9uIHdpbGwgYmUgZGlzcGxheWVkIGFmdGVyd2FyZHMuICBUaGlzIGNvbnRpbnVlcyByZWN1cnNpdmVseQordW50aWwgdGhlcmUgaXMgbm8gbW9yZSBpbmxpbmluZyB0byByZXBvcnQuCisuUFAKK0lmIHRoZSBcZkJcLWFcZlIgb3B0aW9uIGlzIHVzZWQgdGhlbiB0aGUgb3V0cHV0IGlzIHByZWZpeGVkIGJ5IHRoZQoraW5wdXQgYWRkcmVzcy4KKy5QUAorSWYgdGhlIFxmQlwtcFxmUiBvcHRpb24gaXMgdXNlZCB0aGVuIHRoZSBvdXRwdXQgZm9yIGVhY2ggaW5wdXQKK2FkZHJlc3MgaXMgZGlzcGxheWVkIG9uIG9uZSwgcG9zc2libHkgcXVpdGUgbG9uZywgbGluZS4gIElmCitcJlxmQlwtcFxmUiBpcyBub3QgdXNlZCB0aGVuIHRoZSBvdXRwdXQgaXMgYnJva2VuIHVwIGludG8gbXVsdGlwbGUKK2xpbmVzLCBiYXNlZCBvbiB0aGUgcGFyYWdyYXBocyBhYm92ZS4KKy5QUAorSWYgdGhlIGZpbGUgbmFtZSBvciBmdW5jdGlvbiBuYW1lIGNhbiBub3QgYmUgZGV0ZXJtaW5lZCwKK1wmXGZCYWRkcjJsaW5lXGZSIHdpbGwgcHJpbnQgdHdvIHF1ZXN0aW9uIG1hcmtzIGluIHRoZWlyIHBsYWNlLiAgSWYgdGhlCitsaW5lIG51bWJlciBjYW4gbm90IGJlIGRldGVybWluZWQsIFxmQmFkZHIybGluZVxmUiB3aWxsIHByaW50IDAuCisuU0ggIk9QVElPTlMiCisuSVggSGVhZGVyICJPUFRJT05TIgorVGhlIGxvbmcgYW5kIHNob3J0IGZvcm1zIG9mIG9wdGlvbnMsIHNob3duIGhlcmUgYXMgYWx0ZXJuYXRpdmVzLCBhcmUKK2VxdWl2YWxlbnQuCisuSVAgIlxmQlwtYVxmUiIgNAorLklYIEl0ZW0gIi1hIgorLlBEIDAKKy5JUCAiXGZCXC1cLWFkZHJlc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi0tYWRkcmVzc2VzIgorLlBECitEaXNwbGF5IHRoZSBhZGRyZXNzIGJlZm9yZSB0aGUgZnVuY3Rpb24gbmFtZSwgZmlsZSBhbmQgbGluZSBudW1iZXIKK2luZm9ybWF0aW9uLiAgVGhlIGFkZHJlc3MgaXMgcHJpbnRlZCB3aXRoIGEgXGZCMHhcZlIgcHJlZml4IHRvIGVhc2lseQoraWRlbnRpZnkgaXQuCisuSVAgIlxmQlwtYlxmUiBcZkliZmRuYW1lXGZSIiA0CisuSVggSXRlbSAiLWIgYmZkbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0PWJmZG5hbWUiCisuUEQKK1NwZWNpZnkgdGhhdCB0aGUgb2JqZWN0LWNvZGUgZm9ybWF0IGZvciB0aGUgb2JqZWN0IGZpbGVzIGlzCitcJlxmSWJmZG5hbWVcZlIuCisuSVAgIlxmQlwtQ1xmUiIgNAorLklYIEl0ZW0gIi1DIgorLlBEIDAKKy5JUCAiXGZCXC1cLWRlbWFuZ2xlWz1cZlJcZklzdHlsZVxmUlxmQl1cZlIiIDQKKy5JWCBJdGVtICItLWRlbWFuZ2xlWz1zdHlsZV0iCisuUEQKK0RlY29kZSAoXGZJZGVtYW5nbGVcZlIpIGxvdy1sZXZlbCBzeW1ib2wgbmFtZXMgaW50byB1c2VyLWxldmVsIG5hbWVzLgorQmVzaWRlcyByZW1vdmluZyBhbnkgaW5pdGlhbCB1bmRlcnNjb3JlIHByZXBlbmRlZCBieSB0aGUgc3lzdGVtLCB0aGlzCittYWtlcyBcKihDKyBmdW5jdGlvbiBuYW1lcyByZWFkYWJsZS4gIERpZmZlcmVudCBjb21waWxlcnMgaGF2ZSBkaWZmZXJlbnQKK21hbmdsaW5nIHN0eWxlcy4gVGhlIG9wdGlvbmFsIGRlbWFuZ2xpbmcgc3R5bGUgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8KK2Nob29zZSBhbiBhcHByb3ByaWF0ZSBkZW1hbmdsaW5nIHN0eWxlIGZvciB5b3VyIGNvbXBpbGVyLgorLklQICJcZkJcLWVcZlIgXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItZSBmaWxlbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1leGU9XGZSXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWV4ZT1maWxlbmFtZSIKKy5QRAorU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSBmb3Igd2hpY2ggYWRkcmVzc2VzIHNob3VsZCBiZQordHJhbnNsYXRlZC4gIFRoZSBkZWZhdWx0IGZpbGUgaXMgXGZJYS5vdXRcZlIuCisuSVAgIlxmQlwtZlxmUiIgNAorLklYIEl0ZW0gIi1mIgorLlBEIDAKKy5JUCAiXGZCXC1cLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi0tZnVuY3Rpb25zIgorLlBECitEaXNwbGF5IGZ1bmN0aW9uIG5hbWVzIGFzIHdlbGwgYXMgZmlsZSBhbmQgbGluZSBudW1iZXIgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtc1xmUiIgNAorLklYIEl0ZW0gIi1zIgorLlBEIDAKKy5JUCAiXGZCXC1cLWJhc2VuYW1lc1xmUiIgNAorLklYIEl0ZW0gIi0tYmFzZW5hbWVzIgorLlBECitEaXNwbGF5IG9ubHkgdGhlIGJhc2Ugb2YgZWFjaCBmaWxlIG5hbWUuCisuSVAgIlxmQlwtaVxmUiIgNAorLklYIEl0ZW0gIi1pIgorLlBEIDAKKy5JUCAiXGZCXC1cLWlubGluZXNcZlIiIDQKKy5JWCBJdGVtICItLWlubGluZXMiCisuUEQKK0lmIHRoZSBhZGRyZXNzIGJlbG9uZ3MgdG8gYSBmdW5jdGlvbiB0aGF0IHdhcyBpbmxpbmVkLCB0aGUgc291cmNlCitpbmZvcm1hdGlvbiBmb3IgYWxsIGVuY2xvc2luZyBzY29wZXMgYmFjayB0byB0aGUgZmlyc3Qgbm9uLWlubGluZWQKK2Z1bmN0aW9uIHdpbGwgYWxzbyBiZSBwcmludGVkLiAgRm9yIGV4YW1wbGUsIGlmIFxmKENXXCooQ2BtYWluXCooQydcZlIgaW5saW5lcworXCZcZihDV1wqKENgY2FsbGVlMVwqKEMnXGZSIHdoaWNoIGlubGluZXMgXGYoQ1dcKihDYGNhbGxlZTJcKihDJ1xmUiwgYW5kIGFkZHJlc3MgaXMgZnJvbQorXCZcZihDV1wqKENgY2FsbGVlMlwqKEMnXGZSLCB0aGUgc291cmNlIGluZm9ybWF0aW9uIGZvciBcZihDV1wqKENgY2FsbGVlMVwqKEMnXGZSIGFuZCBcZihDV1wqKENgbWFpblwqKEMnXGZSCit3aWxsIGFsc28gYmUgcHJpbnRlZC4KKy5JUCAiXGZCXC1qXGZSIiA0CisuSVggSXRlbSAiLWoiCisuUEQgMAorLklQICJcZkJcLVwtc2VjdGlvblxmUiIgNAorLklYIEl0ZW0gIi0tc2VjdGlvbiIKKy5QRAorUmVhZCBvZmZzZXRzIHJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBpbnN0ZWFkIG9mIGFic29sdXRlIGFkZHJlc3Nlcy4KKy5JUCAiXGZCXC1wXGZSIiA0CisuSVggSXRlbSAiLXAiCisuUEQgMAorLklQICJcZkJcLVwtcHJldHR5XC1wcmludFxmUiIgNAorLklYIEl0ZW0gIi0tcHJldHR5LXByaW50IgorLlBECitNYWtlIHRoZSBvdXRwdXQgbW9yZSBodW1hbiBmcmllbmRseTogZWFjaCBsb2NhdGlvbiBhcmUgcHJpbnRlZCBvbiBvbmUgbGluZS4KK0lmIG9wdGlvbiBcZkJcLWlcZlIgaXMgc3BlY2lmaWVkLCBsaW5lcyBmb3IgYWxsIGVuY2xvc2luZyBzY29wZXMgYXJlCitwcmVmaXhlZCB3aXRoIFxmQihpbmxpbmVkIGJ5KVxmUi4KKy5JUCAiXGZCQFxmUlxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICJAZmlsZSIKK1JlYWQgY29tbWFuZC1saW5lIG9wdGlvbnMgZnJvbSBcZklmaWxlXGZSLiAgVGhlIG9wdGlvbnMgcmVhZCBhcmUKK2luc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBAXGZJZmlsZVxmUiBvcHRpb24uICBJZiBcZklmaWxlXGZSCitkb2VzIG5vdCBleGlzdCwgb3IgY2Fubm90IGJlIHJlYWQsIHRoZW4gdGhlIG9wdGlvbiB3aWxsIGJlIHRyZWF0ZWQKK2xpdGVyYWxseSwgYW5kIG5vdCByZW1vdmVkLgorLlNwCitPcHRpb25zIGluIFxmSWZpbGVcZlIgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSB3aGl0ZXNwYWNlCitjaGFyYWN0ZXIgbWF5IGJlIGluY2x1ZGVkIGluIGFuIG9wdGlvbiBieSBzdXJyb3VuZGluZyB0aGUgZW50aXJlCitvcHRpb24gaW4gZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLiAgQW55IGNoYXJhY3RlciAoaW5jbHVkaW5nIGEKK2JhY2tzbGFzaCkgbWF5IGJlIGluY2x1ZGVkIGJ5IHByZWZpeGluZyB0aGUgY2hhcmFjdGVyIHRvIGJlIGluY2x1ZGVkCit3aXRoIGEgYmFja3NsYXNoLiAgVGhlIFxmSWZpbGVcZlIgbWF5IGl0c2VsZiBjb250YWluIGFkZGl0aW9uYWwKK0BcZklmaWxlXGZSIG9wdGlvbnM7IGFueSBzdWNoIG9wdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgcmVjdXJzaXZlbHkuCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitJbmZvIGVudHJpZXMgZm9yIFxmSWJpbnV0aWxzXGZSLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIFwqKEwiXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZVwqKFIiLgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWFyLjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtYXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWE2OTZkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWFyLjEKQEAgLTAsMCArMSw0NTIgQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjIzIChQb2Q6OlNpbXBsZSAzLjE0KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJBUiAxIgorLlRIIEFSIDEgIjIwMTMtMDMtMjUiICJiaW51dGlscy0yLjIzLjIiICJHTlUgRGV2ZWxvcG1lbnQgVG9vbHMiCisuXCIgRm9yIG5yb2ZmLCB0dXJuIG9mZiBqdXN0aWZpY2F0aW9uLiAgQWx3YXlzIHR1cm4gb2ZmIGh5cGhlbmF0aW9uOyBpdCBtYWtlcworLlwiIHdheSB0b28gbWFueSBtaXN0YWtlcyBpbiB0ZWNobmljYWwgZG9jdW1lbnRzLgorLmlmIG4gLmFkIGwKKy5uaAorLlNIICJOQU1FIgorYXIgXC0gY3JlYXRlLCBtb2RpZnksIGFuZCBleHRyYWN0IGZyb20gYXJjaGl2ZXMKKy5TSCAiU1lOT1BTSVMiCisuSVggSGVhZGVyICJTWU5PUFNJUyIKK2FyIFtcZkJcLVwtcGx1Z2luXGZSIFxmSW5hbWVcZlJdIFtcZkJcLVgzMl82NFxmUl0gW1xmQlwtXGZSXVxmSXBcZlJbXGZJbW9kXGZSIFtcZklyZWxwb3NcZlJdIFtcZkljb3VudFxmUl1dIFtcZkJcLVwtdGFyZ2V0XGZSIFxmSWJmZG5hbWVcZlJdIFxmSWFyY2hpdmVcZlIgW1xmSW1lbWJlclxmUi4uLl0KKy5TSCAiREVTQ1JJUFRJT04iCisuSVggSGVhZGVyICJERVNDUklQVElPTiIKK1RoZSBccy0xR05VXHMwIFxmQmFyXGZSIHByb2dyYW0gY3JlYXRlcywgbW9kaWZpZXMsIGFuZCBleHRyYWN0cyBmcm9tCithcmNoaXZlcy4gIEFuIFxmSWFyY2hpdmVcZlIgaXMgYSBzaW5nbGUgZmlsZSBob2xkaW5nIGEgY29sbGVjdGlvbiBvZgorb3RoZXIgZmlsZXMgaW4gYSBzdHJ1Y3R1cmUgdGhhdCBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXRyaWV2ZQordGhlIG9yaWdpbmFsIGluZGl2aWR1YWwgZmlsZXMgKGNhbGxlZCBcZkltZW1iZXJzXGZSIG9mIHRoZSBhcmNoaXZlKS4KKy5QUAorVGhlIG9yaWdpbmFsIGZpbGVzJyBjb250ZW50cywgbW9kZSAocGVybWlzc2lvbnMpLCB0aW1lc3RhbXAsIG93bmVyLCBhbmQKK2dyb3VwIGFyZSBwcmVzZXJ2ZWQgaW4gdGhlIGFyY2hpdmUsIGFuZCBjYW4gYmUgcmVzdG9yZWQgb24KK2V4dHJhY3Rpb24uCisuUFAKK1wmXHMtMUdOVVxzMCBcZkJhclxmUiBjYW4gbWFpbnRhaW4gYXJjaGl2ZXMgd2hvc2UgbWVtYmVycyBoYXZlIG5hbWVzIG9mIGFueQorbGVuZ3RoOyBob3dldmVyLCBkZXBlbmRpbmcgb24gaG93IFxmQmFyXGZSIGlzIGNvbmZpZ3VyZWQgb24geW91cgorc3lzdGVtLCBhIGxpbWl0IG9uIG1lbWJlci1uYW1lIGxlbmd0aCBtYXkgYmUgaW1wb3NlZCBmb3IgY29tcGF0aWJpbGl0eQord2l0aCBhcmNoaXZlIGZvcm1hdHMgbWFpbnRhaW5lZCB3aXRoIG90aGVyIHRvb2xzLiAgSWYgaXQgZXhpc3RzLCB0aGUKK2xpbWl0IGlzIG9mdGVuIDE1IGNoYXJhY3RlcnMgKHR5cGljYWwgb2YgZm9ybWF0cyByZWxhdGVkIHRvIGEub3V0KSBvciAxNgorY2hhcmFjdGVycyAodHlwaWNhbCBvZiBmb3JtYXRzIHJlbGF0ZWQgdG8gY29mZikuCisuUFAKK1wmXGZCYXJcZlIgaXMgY29uc2lkZXJlZCBhIGJpbmFyeSB1dGlsaXR5IGJlY2F1c2UgYXJjaGl2ZXMgb2YgdGhpcyBzb3J0CithcmUgbW9zdCBvZnRlbiB1c2VkIGFzIFxmSWxpYnJhcmllc1xmUiBob2xkaW5nIGNvbW1vbmx5IG5lZWRlZAorc3Vicm91dGluZXMuCisuUFAKK1wmXGZCYXJcZlIgY3JlYXRlcyBhbiBpbmRleCB0byB0aGUgc3ltYm9scyBkZWZpbmVkIGluIHJlbG9jYXRhYmxlCitvYmplY3QgbW9kdWxlcyBpbiB0aGUgYXJjaGl2ZSB3aGVuIHlvdSBzcGVjaWZ5IHRoZSBtb2RpZmllciBcZkJzXGZSLgorT25jZSBjcmVhdGVkLCB0aGlzIGluZGV4IGlzIHVwZGF0ZWQgaW4gdGhlIGFyY2hpdmUgd2hlbmV2ZXIgXGZCYXJcZlIKK21ha2VzIGEgY2hhbmdlIHRvIGl0cyBjb250ZW50cyAoc2F2ZSBmb3IgdGhlIFxmQnFcZlIgdXBkYXRlIG9wZXJhdGlvbikuCitBbiBhcmNoaXZlIHdpdGggc3VjaCBhbiBpbmRleCBzcGVlZHMgdXAgbGlua2luZyB0byB0aGUgbGlicmFyeSwgYW5kCithbGxvd3Mgcm91dGluZXMgaW4gdGhlIGxpYnJhcnkgdG8gY2FsbCBlYWNoIG90aGVyIHdpdGhvdXQgcmVnYXJkIHRvCit0aGVpciBwbGFjZW1lbnQgaW4gdGhlIGFyY2hpdmUuCisuUFAKK1lvdSBtYXkgdXNlIFxmQm5tIFwtc1xmUiBvciBcZkJubSBcLVwtcHJpbnRcLWFybWFwXGZSIHRvIGxpc3QgdGhpcyBpbmRleAordGFibGUuICBJZiBhbiBhcmNoaXZlIGxhY2tzIHRoZSB0YWJsZSwgYW5vdGhlciBmb3JtIG9mIFxmQmFyXGZSIGNhbGxlZAorXCZcZkJyYW5saWJcZlIgY2FuIGJlIHVzZWQgdG8gYWRkIGp1c3QgdGhlIHRhYmxlLgorLlBQCitcJlxzLTFHTlVcczAgXGZCYXJcZlIgY2FuIG9wdGlvbmFsbHkgY3JlYXRlIGEgXGZJdGhpblxmUiBhcmNoaXZlLAord2hpY2ggY29udGFpbnMgYSBzeW1ib2wgaW5kZXggYW5kIHJlZmVyZW5jZXMgdG8gdGhlIG9yaWdpbmFsIGNvcGllcworb2YgdGhlIG1lbWJlciBmaWxlcyBvZiB0aGUgYXJjaGl2ZXMuICBTdWNoIGFuIGFyY2hpdmUgaXMgdXNlZnVsCitmb3IgYnVpbGRpbmcgbGlicmFyaWVzIGZvciB1c2Ugd2l0aGluIGEgbG9jYWwgYnVpbGQsIHdoZXJlIHRoZQorcmVsb2NhdGFibGUgb2JqZWN0cyBhcmUgZXhwZWN0ZWQgdG8gcmVtYWluIGF2YWlsYWJsZSwgYW5kIGNvcHlpbmcgdGhlCitjb250ZW50cyBvZiBlYWNoIG9iamVjdCB3b3VsZCBvbmx5IHdhc3RlIHRpbWUgYW5kIHNwYWNlLiAgVGhpbiBhcmNoaXZlcworYXJlIGFsc28gXGZJZmxhdHRlbmVkXGZSLCBzbyB0aGF0IGFkZGluZyBvbmUgb3IgbW9yZSBhcmNoaXZlcyB0byBhCit0aGluIGFyY2hpdmUgd2lsbCBhZGQgdGhlIGVsZW1lbnRzIG9mIHRoZSBuZXN0ZWQgYXJjaGl2ZSBpbmRpdmlkdWFsbHkuCitUaGUgcGF0aHMgdG8gdGhlIGVsZW1lbnRzIG9mIHRoZSBhcmNoaXZlIGFyZSBzdG9yZWQgcmVsYXRpdmUgdG8gdGhlCithcmNoaXZlIGl0c2VsZi4KKy5QUAorXCZccy0xR05VXHMwIFxmQmFyXGZSIGlzIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0d28gZGlmZmVyZW50CitmYWNpbGl0aWVzLiAgWW91IGNhbiBjb250cm9sIGl0cyBhY3Rpdml0eSB1c2luZyBjb21tYW5kLWxpbmUgb3B0aW9ucywKK2xpa2UgdGhlIGRpZmZlcmVudCB2YXJpZXRpZXMgb2YgXGZCYXJcZlIgb24gVW5peCBzeXN0ZW1zOyBvciwgaWYgeW91CitzcGVjaWZ5IHRoZSBzaW5nbGUgY29tbWFuZC1saW5lIG9wdGlvbiBcZkJcLU1cZlIsIHlvdSBjYW4gY29udHJvbCBpdAord2l0aCBhIHNjcmlwdCBzdXBwbGllZCB2aWEgc3RhbmRhcmQgaW5wdXQsIGxpa2UgdGhlIFxzLTFNUklcczAgXCooTCJsaWJyYXJpYW5cKihSIgorcHJvZ3JhbS4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCitcJlxzLTFHTlVcczAgXGZCYXJcZlIgYWxsb3dzIHlvdSB0byBtaXggdGhlIG9wZXJhdGlvbiBjb2RlIFxmSXBcZlIgYW5kIG1vZGlmaWVyCitmbGFncyBcZkltb2RcZlIgaW4gYW55IG9yZGVyLCB3aXRoaW4gdGhlIGZpcnN0IGNvbW1hbmQtbGluZSBhcmd1bWVudC4KKy5QUAorSWYgeW91IHdpc2gsIHlvdSBtYXkgYmVnaW4gdGhlIGZpcnN0IGNvbW1hbmQtbGluZSBhcmd1bWVudCB3aXRoIGEKK2Rhc2guCisuUFAKK1RoZSBcZklwXGZSIGtleWxldHRlciBzcGVjaWZpZXMgd2hhdCBvcGVyYXRpb24gdG8gZXhlY3V0ZTsgaXQgbWF5IGJlCithbnkgb2YgdGhlIGZvbGxvd2luZywgYnV0IHlvdSBtdXN0IHNwZWNpZnkgb25seSBvbmUgb2YgdGhlbToKKy5JUCAiXGZCZFxmUiIgNAorLklYIEl0ZW0gImQiCitcJlxmSURlbGV0ZVxmUiBtb2R1bGVzIGZyb20gdGhlIGFyY2hpdmUuICBTcGVjaWZ5IHRoZSBuYW1lcyBvZiBtb2R1bGVzIHRvCitiZSBkZWxldGVkIGFzIFxmSW1lbWJlclxmUi4uLjsgdGhlIGFyY2hpdmUgaXMgdW50b3VjaGVkIGlmIHlvdQorc3BlY2lmeSBubyBmaWxlcyB0byBkZWxldGUuCisuU3AKK0lmIHlvdSBzcGVjaWZ5IHRoZSBcZkJ2XGZSIG1vZGlmaWVyLCBcZkJhclxmUiBsaXN0cyBlYWNoIG1vZHVsZQorYXMgaXQgaXMgZGVsZXRlZC4KKy5JUCAiXGZCbVxmUiIgNAorLklYIEl0ZW0gIm0iCitVc2UgdGhpcyBvcGVyYXRpb24gdG8gXGZJbW92ZVxmUiBtZW1iZXJzIGluIGFuIGFyY2hpdmUuCisuU3AKK1RoZSBvcmRlcmluZyBvZiBtZW1iZXJzIGluIGFuIGFyY2hpdmUgY2FuIG1ha2UgYSBkaWZmZXJlbmNlIGluIGhvdworcHJvZ3JhbXMgYXJlIGxpbmtlZCB1c2luZyB0aGUgbGlicmFyeSwgaWYgYSBzeW1ib2wgaXMgZGVmaW5lZCBpbiBtb3JlCit0aGFuIG9uZSBtZW1iZXIuCisuU3AKK0lmIG5vIG1vZGlmaWVycyBhcmUgdXNlZCB3aXRoIFxmKENXXCooQ2BtXCooQydcZlIsIGFueSBtZW1iZXJzIHlvdSBuYW1lIGluIHRoZQorXCZcZkltZW1iZXJcZlIgYXJndW1lbnRzIGFyZSBtb3ZlZCB0byB0aGUgXGZJZW5kXGZSIG9mIHRoZSBhcmNoaXZlOworeW91IGNhbiB1c2UgdGhlIFxmQmFcZlIsIFxmQmJcZlIsIG9yIFxmQmlcZlIgbW9kaWZpZXJzIHRvIG1vdmUgdGhlbSB0byBhCitzcGVjaWZpZWQgcGxhY2UgaW5zdGVhZC4KKy5JUCAiXGZCcFxmUiIgNAorLklYIEl0ZW0gInAiCitcJlxmSVByaW50XGZSIHRoZSBzcGVjaWZpZWQgbWVtYmVycyBvZiB0aGUgYXJjaGl2ZSwgdG8gdGhlIHN0YW5kYXJkCitvdXRwdXQgZmlsZS4gIElmIHRoZSBcZkJ2XGZSIG1vZGlmaWVyIGlzIHNwZWNpZmllZCwgc2hvdyB0aGUgbWVtYmVyCituYW1lIGJlZm9yZSBjb3B5aW5nIGl0cyBjb250ZW50cyB0byBzdGFuZGFyZCBvdXRwdXQuCisuU3AKK0lmIHlvdSBzcGVjaWZ5IG5vIFxmSW1lbWJlclxmUiBhcmd1bWVudHMsIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGFyY2hpdmUgYXJlCitwcmludGVkLgorLklQICJcZkJxXGZSIiA0CisuSVggSXRlbSAicSIKK1wmXGZJUXVpY2sgYXBwZW5kXGZSOyBIaXN0b3JpY2FsbHksIGFkZCB0aGUgZmlsZXMgXGZJbWVtYmVyXGZSLi4uIHRvIHRoZSBlbmQgb2YKK1wmXGZJYXJjaGl2ZVxmUiwgd2l0aG91dCBjaGVja2luZyBmb3IgcmVwbGFjZW1lbnQuCisuU3AKK1RoZSBtb2RpZmllcnMgXGZCYVxmUiwgXGZCYlxmUiwgYW5kIFxmQmlcZlIgZG8gXGZJbm90XGZSIGFmZmVjdCB0aGlzCitvcGVyYXRpb247IG5ldyBtZW1iZXJzIGFyZSBhbHdheXMgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIGFyY2hpdmUuCisuU3AKK1RoZSBtb2RpZmllciBcZkJ2XGZSIG1ha2VzIFxmQmFyXGZSIGxpc3QgZWFjaCBmaWxlIGFzIGl0IGlzIGFwcGVuZGVkLgorLlNwCitTaW5jZSB0aGUgcG9pbnQgb2YgdGhpcyBvcGVyYXRpb24gaXMgc3BlZWQsIHRoZSBhcmNoaXZlJ3Mgc3ltYm9sIHRhYmxlCitpbmRleCBpcyBub3QgdXBkYXRlZCwgZXZlbiBpZiBpdCBhbHJlYWR5IGV4aXN0ZWQ7IHlvdSBjYW4gdXNlIFxmQmFyIHNcZlIgb3IKK1wmXGZCcmFubGliXGZSIGV4cGxpY2l0bHkgdG8gdXBkYXRlIHRoZSBzeW1ib2wgdGFibGUgaW5kZXguCisuU3AKK0hvd2V2ZXIsIHRvbyBtYW55IGRpZmZlcmVudCBzeXN0ZW1zIGFzc3VtZSBxdWljayBhcHBlbmQgcmVidWlsZHMgdGhlCitpbmRleCwgc28gXHMtMUdOVVxzMCBcZkJhclxmUiBpbXBsZW1lbnRzIFxmQnFcZlIgYXMgYSBzeW5vbnltIGZvciBcZkJyXGZSLgorLklQICJcZkJyXGZSIiA0CisuSVggSXRlbSAiciIKK0luc2VydCB0aGUgZmlsZXMgXGZJbWVtYmVyXGZSLi4uIGludG8gXGZJYXJjaGl2ZVxmUiAod2l0aAorXCZcZklyZXBsYWNlbWVudFxmUikuIFRoaXMgb3BlcmF0aW9uIGRpZmZlcnMgZnJvbSBcZkJxXGZSIGluIHRoYXQgYW55CitwcmV2aW91c2x5IGV4aXN0aW5nIG1lbWJlcnMgYXJlIGRlbGV0ZWQgaWYgdGhlaXIgbmFtZXMgbWF0Y2ggdGhvc2UgYmVpbmcKK2FkZGVkLgorLlNwCitJZiBvbmUgb2YgdGhlIGZpbGVzIG5hbWVkIGluIFxmSW1lbWJlclxmUi4uLiBkb2VzIG5vdCBleGlzdCwgXGZCYXJcZlIKK2Rpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2UsIGFuZCBsZWF2ZXMgdW5kaXN0dXJiZWQgYW55IGV4aXN0aW5nIG1lbWJlcnMKK29mIHRoZSBhcmNoaXZlIG1hdGNoaW5nIHRoYXQgbmFtZS4KKy5TcAorQnkgZGVmYXVsdCwgbmV3IG1lbWJlcnMgYXJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGU7IGJ1dCB5b3UgbWF5Cit1c2Ugb25lIG9mIHRoZSBtb2RpZmllcnMgXGZCYVxmUiwgXGZCYlxmUiwgb3IgXGZCaVxmUiB0byByZXF1ZXN0CitwbGFjZW1lbnQgcmVsYXRpdmUgdG8gc29tZSBleGlzdGluZyBtZW1iZXIuCisuU3AKK1RoZSBtb2RpZmllciBcZkJ2XGZSIHVzZWQgd2l0aCB0aGlzIG9wZXJhdGlvbiBlbGljaXRzIGEgbGluZSBvZgorb3V0cHV0IGZvciBlYWNoIGZpbGUgaW5zZXJ0ZWQsIGFsb25nIHdpdGggb25lIG9mIHRoZSBsZXR0ZXJzIFxmQmFcZlIgb3IKK1wmXGZCclxmUiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBmaWxlIHdhcyBhcHBlbmRlZCAobm8gb2xkIG1lbWJlcgorZGVsZXRlZCkgb3IgcmVwbGFjZWQuCisuSVAgIlxmQnNcZlIiIDQKKy5JWCBJdGVtICJzIgorQWRkIGFuIGluZGV4IHRvIHRoZSBhcmNoaXZlLCBvciB1cGRhdGUgaXQgaWYgaXQgYWxyZWFkeSBleGlzdHMuICBOb3RlCit0aGlzIGNvbW1hbmQgaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlIHRoYXQgdGhlcmUgY2FuIG9ubHkgYmUgb25lCitjb21tYW5kIGxldHRlciwgYXMgaXQgaXMgcG9zc2libGUgdG8gdXNlIGl0IGFzIGVpdGhlciBhIGNvbW1hbmQgb3IgYQorbW9kaWZpZXIuICBJbiBlaXRoZXIgY2FzZSBpdCBkb2VzIHRoZSBzYW1lIHRoaW5nLgorLklQICJcZkJ0XGZSIiA0CisuSVggSXRlbSAidCIKK0Rpc3BsYXkgYSBcZkl0YWJsZVxmUiBsaXN0aW5nIHRoZSBjb250ZW50cyBvZiBcZklhcmNoaXZlXGZSLCBvciB0aG9zZQorb2YgdGhlIGZpbGVzIGxpc3RlZCBpbiBcZkltZW1iZXJcZlIuLi4gdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUKK2FyY2hpdmUuICBOb3JtYWxseSBvbmx5IHRoZSBtZW1iZXIgbmFtZSBpcyBzaG93bjsgaWYgeW91IGFsc28gd2FudCB0bworc2VlIHRoZSBtb2RlcyAocGVybWlzc2lvbnMpLCB0aW1lc3RhbXAsIG93bmVyLCBncm91cCwgYW5kIHNpemUsIHlvdSBjYW4KK3JlcXVlc3QgdGhhdCBieSBhbHNvIHNwZWNpZnlpbmcgdGhlIFxmQnZcZlIgbW9kaWZpZXIuCisuU3AKK0lmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIFxmSW1lbWJlclxmUiwgYWxsIGZpbGVzIGluIHRoZSBhcmNoaXZlCithcmUgbGlzdGVkLgorLlNwCitJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIChzYXksIFxmQmZpZVxmUikgaW4KK2FuIGFyY2hpdmUgKHNheSBcZkJiLmFcZlIpLCBcZkJhciB0IGIuYSBmaWVcZlIgbGlzdHMgb25seSB0aGUKK2ZpcnN0IGluc3RhbmNlOyB0byBzZWUgdGhlbSBhbGwsIHlvdSBtdXN0IGFzayBmb3IgYSBjb21wbGV0ZQorbGlzdGluZ1wtXC1cLWluIG91ciBleGFtcGxlLCBcZkJhciB0IGIuYVxmUi4KKy5JUCAiXGZCeFxmUiIgNAorLklYIEl0ZW0gIngiCitcJlxmSUV4dHJhY3RcZlIgbWVtYmVycyAobmFtZWQgXGZJbWVtYmVyXGZSKSBmcm9tIHRoZSBhcmNoaXZlLiAgWW91IGNhbgordXNlIHRoZSBcZkJ2XGZSIG1vZGlmaWVyIHdpdGggdGhpcyBvcGVyYXRpb24sIHRvIHJlcXVlc3QgdGhhdAorXCZcZkJhclxmUiBsaXN0IGVhY2ggbmFtZSBhcyBpdCBleHRyYWN0cyBpdC4KKy5TcAorSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgXGZJbWVtYmVyXGZSLCBhbGwgZmlsZXMgaW4gdGhlIGFyY2hpdmUKK2FyZSBleHRyYWN0ZWQuCisuU3AKK0ZpbGVzIGNhbm5vdCBiZSBleHRyYWN0ZWQgZnJvbSBhIHRoaW4gYXJjaGl2ZS4KKy5JUCAiXGZCXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCitEaXNwbGF5cyB0aGUgbGlzdCBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucyBzdXBwb3J0ZWQgYnkgXGZCYXJcZlIKK2FuZCB0aGVuIGV4aXRzLgorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKK0Rpc3BsYXlzIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIG9mIFxmQmFyXGZSIGFuZCB0aGVuIGV4aXRzLgorLlBQCitBIG51bWJlciBvZiBtb2RpZmllcnMgKFxmSW1vZFxmUikgbWF5IGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUgXGZJcFxmUgora2V5bGV0dGVyLCB0byBzcGVjaWZ5IHZhcmlhdGlvbnMgb24gYW4gb3BlcmF0aW9uJ3MgYmVoYXZpb3I6CisuSVAgIlxmQmFcZlIiIDQKKy5JWCBJdGVtICJhIgorQWRkIG5ldyBmaWxlcyBcZklhZnRlclxmUiBhbiBleGlzdGluZyBtZW1iZXIgb2YgdGhlCithcmNoaXZlLiAgSWYgeW91IHVzZSB0aGUgbW9kaWZpZXIgXGZCYVxmUiwgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYXJjaGl2ZQorbWVtYmVyIG11c3QgYmUgcHJlc2VudCBhcyB0aGUgXGZJcmVscG9zXGZSIGFyZ3VtZW50LCBiZWZvcmUgdGhlCitcJlxmSWFyY2hpdmVcZlIgc3BlY2lmaWNhdGlvbi4KKy5JUCAiXGZCYlxmUiIgNAorLklYIEl0ZW0gImIiCitBZGQgbmV3IGZpbGVzIFxmSWJlZm9yZVxmUiBhbiBleGlzdGluZyBtZW1iZXIgb2YgdGhlCithcmNoaXZlLiAgSWYgeW91IHVzZSB0aGUgbW9kaWZpZXIgXGZCYlxmUiwgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgYXJjaGl2ZQorbWVtYmVyIG11c3QgYmUgcHJlc2VudCBhcyB0aGUgXGZJcmVscG9zXGZSIGFyZ3VtZW50LCBiZWZvcmUgdGhlCitcJlxmSWFyY2hpdmVcZlIgc3BlY2lmaWNhdGlvbi4gIChzYW1lIGFzIFxmQmlcZlIpLgorLklQICJcZkJjXGZSIiA0CisuSVggSXRlbSAiYyIKK1wmXGZJQ3JlYXRlXGZSIHRoZSBhcmNoaXZlLiAgVGhlIHNwZWNpZmllZCBcZklhcmNoaXZlXGZSIGlzIGFsd2F5cworY3JlYXRlZCBpZiBpdCBkaWQgbm90IGV4aXN0LCB3aGVuIHlvdSByZXF1ZXN0IGFuIHVwZGF0ZS4gIEJ1dCBhIHdhcm5pbmcgaXMKK2lzc3VlZCB1bmxlc3MgeW91IHNwZWNpZnkgaW4gYWR2YW5jZSB0aGF0IHlvdSBleHBlY3QgdG8gY3JlYXRlIGl0LCBieQordXNpbmcgdGhpcyBtb2RpZmllci4KKy5JUCAiXGZCRFxmUiIgNAorLklYIEl0ZW0gIkQiCitPcGVyYXRlIGluIFxmSWRldGVybWluaXN0aWNcZlIgbW9kZS4gIFdoZW4gYWRkaW5nIGZpbGVzIGFuZCB0aGUgYXJjaGl2ZQoraW5kZXggdXNlIHplcm8gZm9yIFVJRHMsIEdJRHMsIHRpbWVzdGFtcHMsIGFuZCB1c2UgY29uc2lzdGVudCBmaWxlIG1vZGVzCitmb3IgYWxsIGZpbGVzLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBpZiBcZkJhclxmUiBpcyB1c2VkIHdpdGgKK2lkZW50aWNhbCBvcHRpb25zIGFuZCBpZGVudGljYWwgaW5wdXQgZmlsZXMsIG11bHRpcGxlIHJ1bnMgd2lsbCBjcmVhdGUKK2lkZW50aWNhbCBvdXRwdXQgZmlsZXMgcmVnYXJkbGVzcyBvZiB0aGUgaW5wdXQgZmlsZXMnIG93bmVycywgZ3JvdXBzLAorZmlsZSBtb2Rlcywgb3IgbW9kaWZpY2F0aW9uIHRpbWVzLgorLlNwCitJZiBcZkliaW51dGlsc1xmUiB3YXMgY29uZmlndXJlZCB3aXRoCitcJlxmQlwtXC1lbmFibGVcLWRldGVybWluaXN0aWNcLWFyY2hpdmVzXGZSLCB0aGVuIHRoaXMgbW9kZSBpcyBvbiBieSBkZWZhdWx0LgorSXQgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlIFxmQlVcZlIgbW9kaWZpZXIsIGJlbG93LgorLklQICJcZkJmXGZSIiA0CisuSVggSXRlbSAiZiIKK1RydW5jYXRlIG5hbWVzIGluIHRoZSBhcmNoaXZlLiAgXHMtMUdOVVxzMCBcZkJhclxmUiB3aWxsIG5vcm1hbGx5IHBlcm1pdCBmaWxlCituYW1lcyBvZiBhbnkgbGVuZ3RoLiAgVGhpcyB3aWxsIGNhdXNlIGl0IHRvIGNyZWF0ZSBhcmNoaXZlcyB3aGljaCBhcmUKK25vdCBjb21wYXRpYmxlIHdpdGggdGhlIG5hdGl2ZSBcZkJhclxmUiBwcm9ncmFtIG9uIHNvbWUgc3lzdGVtcy4gIElmCit0aGlzIGlzIGEgY29uY2VybiwgdGhlIFxmQmZcZlIgbW9kaWZpZXIgbWF5IGJlIHVzZWQgdG8gdHJ1bmNhdGUgZmlsZQorbmFtZXMgd2hlbiBwdXR0aW5nIHRoZW0gaW4gdGhlIGFyY2hpdmUuCisuSVAgIlxmQmlcZlIiIDQKKy5JWCBJdGVtICJpIgorSW5zZXJ0IG5ldyBmaWxlcyBcZkliZWZvcmVcZlIgYW4gZXhpc3RpbmcgbWVtYmVyIG9mIHRoZQorYXJjaGl2ZS4gIElmIHlvdSB1c2UgdGhlIG1vZGlmaWVyIFxmQmlcZlIsIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGFyY2hpdmUKK21lbWJlciBtdXN0IGJlIHByZXNlbnQgYXMgdGhlIFxmSXJlbHBvc1xmUiBhcmd1bWVudCwgYmVmb3JlIHRoZQorXCZcZklhcmNoaXZlXGZSIHNwZWNpZmljYXRpb24uICAoc2FtZSBhcyBcZkJiXGZSKS4KKy5JUCAiXGZCbFxmUiIgNAorLklYIEl0ZW0gImwiCitUaGlzIG1vZGlmaWVyIGlzIGFjY2VwdGVkIGJ1dCBub3QgdXNlZC4KKy5JUCAiXGZCTlxmUiIgNAorLklYIEl0ZW0gIk4iCitVc2VzIHRoZSBcZkljb3VudFxmUiBwYXJhbWV0ZXIuICBUaGlzIGlzIHVzZWQgaWYgdGhlcmUgYXJlIG11bHRpcGxlCitlbnRyaWVzIGluIHRoZSBhcmNoaXZlIHdpdGggdGhlIHNhbWUgbmFtZS4gIEV4dHJhY3Qgb3IgZGVsZXRlIGluc3RhbmNlCitcJlxmSWNvdW50XGZSIG9mIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGFyY2hpdmUuCisuSVAgIlxmQm9cZlIiIDQKKy5JWCBJdGVtICJvIgorUHJlc2VydmUgdGhlIFxmSW9yaWdpbmFsXGZSIGRhdGVzIG9mIG1lbWJlcnMgd2hlbiBleHRyYWN0aW5nIHRoZW0uICBJZgoreW91IGRvIG5vdCBzcGVjaWZ5IHRoaXMgbW9kaWZpZXIsIGZpbGVzIGV4dHJhY3RlZCBmcm9tIHRoZSBhcmNoaXZlCithcmUgc3RhbXBlZCB3aXRoIHRoZSB0aW1lIG9mIGV4dHJhY3Rpb24uCisuSVAgIlxmQlBcZlIiIDQKKy5JWCBJdGVtICJQIgorVXNlIHRoZSBmdWxsIHBhdGggbmFtZSB3aGVuIG1hdGNoaW5nIG5hbWVzIGluIHRoZSBhcmNoaXZlLiAgXHMtMUdOVVxzMAorXCZcZkJhclxmUiBjYW4gbm90IGNyZWF0ZSBhbiBhcmNoaXZlIHdpdGggYSBmdWxsIHBhdGggbmFtZSAoc3VjaCBhcmNoaXZlcworYXJlIG5vdCBccy0xUE9TSVhcczAgY29tcGxhaW50KSwgYnV0IG90aGVyIGFyY2hpdmUgY3JlYXRvcnMgY2FuLiAgVGhpcyBvcHRpb24KK3dpbGwgY2F1c2UgXHMtMUdOVVxzMCBcZkJhclxmUiB0byBtYXRjaCBmaWxlIG5hbWVzIHVzaW5nIGEgY29tcGxldGUgcGF0aAorbmFtZSwgd2hpY2ggY2FuIGJlIGNvbnZlbmllbnQgd2hlbiBleHRyYWN0aW5nIGEgc2luZ2xlIGZpbGUgZnJvbSBhbgorYXJjaGl2ZSBjcmVhdGVkIGJ5IGFub3RoZXIgdG9vbC4KKy5JUCAiXGZCc1xmUiIgNAorLklYIEl0ZW0gInMiCitXcml0ZSBhbiBvYmplY3QtZmlsZSBpbmRleCBpbnRvIHRoZSBhcmNoaXZlLCBvciB1cGRhdGUgYW4gZXhpc3Rpbmcgb25lLAorZXZlbiBpZiBubyBvdGhlciBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgYXJjaGl2ZS4gIFlvdSBtYXkgdXNlIHRoaXMgbW9kaWZpZXIKK2ZsYWcgZWl0aGVyIHdpdGggYW55IG9wZXJhdGlvbiwgb3IgYWxvbmUuICBSdW5uaW5nIFxmQmFyIHNcZlIgb24gYW4KK2FyY2hpdmUgaXMgZXF1aXZhbGVudCB0byBydW5uaW5nIFxmQnJhbmxpYlxmUiBvbiBpdC4KKy5JUCAiXGZCU1xmUiIgNAorLklYIEl0ZW0gIlMiCitEbyBub3QgZ2VuZXJhdGUgYW4gYXJjaGl2ZSBzeW1ib2wgdGFibGUuICBUaGlzIGNhbiBzcGVlZCB1cCBidWlsZGluZyBhCitsYXJnZSBsaWJyYXJ5IGluIHNldmVyYWwgc3RlcHMuICBUaGUgcmVzdWx0aW5nIGFyY2hpdmUgY2FuIG5vdCBiZSB1c2VkCit3aXRoIHRoZSBsaW5rZXIuICBJbiBvcmRlciB0byBidWlsZCBhIHN5bWJvbCB0YWJsZSwgeW91IG11c3Qgb21pdCB0aGUKK1wmXGZCU1xmUiBtb2RpZmllciBvbiB0aGUgbGFzdCBleGVjdXRpb24gb2YgXGZCYXJcZlIsIG9yIHlvdSBtdXN0IHJ1bgorXCZcZkJyYW5saWJcZlIgb24gdGhlIGFyY2hpdmUuCisuSVAgIlxmQlRcZlIiIDQKKy5JWCBJdGVtICJUIgorTWFrZSB0aGUgc3BlY2lmaWVkIFxmSWFyY2hpdmVcZlIgYSBcZkl0aGluXGZSIGFyY2hpdmUuICBJZiBpdCBhbHJlYWR5CitleGlzdHMgYW5kIGlzIGEgcmVndWxhciBhcmNoaXZlLCB0aGUgZXhpc3RpbmcgbWVtYmVycyBtdXN0IGJlIHByZXNlbnQKK2luIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBcZklhcmNoaXZlXGZSLgorLklQICJcZkJ1XGZSIiA0CisuSVggSXRlbSAidSIKK05vcm1hbGx5LCBcZkJhciByXGZSLi4uIGluc2VydHMgYWxsIGZpbGVzCitsaXN0ZWQgaW50byB0aGUgYXJjaGl2ZS4gIElmIHlvdSB3b3VsZCBsaWtlIHRvIGluc2VydCBcZklvbmx5XGZSIHRob3NlCitvZiB0aGUgZmlsZXMgeW91IGxpc3QgdGhhdCBhcmUgbmV3ZXIgdGhhbiBleGlzdGluZyBtZW1iZXJzIG9mIHRoZSBzYW1lCituYW1lcywgdXNlIHRoaXMgbW9kaWZpZXIuICBUaGUgXGZCdVxmUiBtb2RpZmllciBpcyBhbGxvd2VkIG9ubHkgZm9yIHRoZQorb3BlcmF0aW9uIFxmQnJcZlIgKHJlcGxhY2UpLiAgSW4gcGFydGljdWxhciwgdGhlIGNvbWJpbmF0aW9uIFxmQnF1XGZSIGlzCitub3QgYWxsb3dlZCwgc2luY2UgY2hlY2tpbmcgdGhlIHRpbWVzdGFtcHMgd291bGQgbG9zZSBhbnkgc3BlZWQKK2FkdmFudGFnZSBmcm9tIHRoZSBvcGVyYXRpb24gXGZCcVxmUi4KKy5JUCAiXGZCVVxmUiIgNAorLklYIEl0ZW0gIlUiCitEbyBcZklub3RcZlIgb3BlcmF0ZSBpbiBcZklkZXRlcm1pbmlzdGljXGZSIG1vZGUuICBUaGlzIGlzIHRoZSBpbnZlcnNlCitvZiB0aGUgXGZCRFxmUiBtb2RpZmllciwgYWJvdmU6IGFkZGVkIGZpbGVzIGFuZCB0aGUgYXJjaGl2ZSBpbmRleCB3aWxsCitnZXQgdGhlaXIgYWN0dWFsIFxzLTFVSURcczAsIFxzLTFHSURcczAsIHRpbWVzdGFtcCwgYW5kIGZpbGUgbW9kZSB2YWx1ZXMuCisuU3AKK1RoaXMgaXMgdGhlIGRlZmF1bHQgdW5sZXNzIFxmSWJpbnV0aWxzXGZSIHdhcyBjb25maWd1cmVkIHdpdGgKK1wmXGZCXC1cLWVuYWJsZVwtZGV0ZXJtaW5pc3RpY1wtYXJjaGl2ZXNcZlIuCisuSVAgIlxmQnZcZlIiIDQKKy5JWCBJdGVtICJ2IgorVGhpcyBtb2RpZmllciByZXF1ZXN0cyB0aGUgXGZJdmVyYm9zZVxmUiB2ZXJzaW9uIG9mIGFuIG9wZXJhdGlvbi4gIE1hbnkKK29wZXJhdGlvbnMgZGlzcGxheSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzdWNoIGFzIGZpbGVuYW1lcyBwcm9jZXNzZWQsCit3aGVuIHRoZSBtb2RpZmllciBcZkJ2XGZSIGlzIGFwcGVuZGVkLgorLklQICJcZkJWXGZSIiA0CisuSVggSXRlbSAiViIKK1RoaXMgbW9kaWZpZXIgc2hvd3MgdGhlIHZlcnNpb24gbnVtYmVyIG9mIFxmQmFyXGZSLgorLlBQCitcJlxmQmFyXGZSIGlnbm9yZXMgYW4gaW5pdGlhbCBvcHRpb24gc3BlbHQgXGZCXC1YMzJfNjRcZlIsIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIFxzLTFBSVhcczAuICBUaGUgYmVoYXZpb3VyIHByb2R1Y2VkIGJ5IHRoaXMgb3B0aW9uIGlzIHRoZQorZGVmYXVsdCBmb3IgXHMtMUdOVVxzMCBcZkJhclxmUi4gIFxmQmFyXGZSIGRvZXMgbm90IHN1cHBvcnQgYW55IG9mIHRoZSBvdGhlcgorXCZcZkJcLVhcZlIgb3B0aW9uczsgaW4gcGFydGljdWxhciwgaXQgZG9lcyBub3Qgc3VwcG9ydCBcZkJcLVgzMlxmUgord2hpY2ggaXMgdGhlIGRlZmF1bHQgZm9yIFxzLTFBSVhcczAgXGZCYXJcZlIuCisuUFAKK1RoZSBvcHRpb25hbCBjb21tYW5kIGxpbmUgc3dpdGNoIFxmQlwtXC1wbHVnaW5cZlIgXGZJbmFtZVxmUiBjYXVzZXMKK1wmXGZCYXJcZlIgdG8gbG9hZCB0aGUgcGx1Z2luIGNhbGxlZCBcZkluYW1lXGZSIHdoaWNoIGFkZHMgc3VwcG9ydAorZm9yIG1vcmUgZmlsZSBmb3JtYXRzLiAgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIHRvb2xjaGFpbgoraGFzIGJlZW4gYnVpbHQgd2l0aCBwbHVnaW4gc3VwcG9ydCBlbmFibGVkLgorLlBQCitUaGUgb3B0aW9uYWwgY29tbWFuZCBsaW5lIHN3aXRjaCBcZkJcLVwtdGFyZ2V0XGZSIFxmSWJmZG5hbWVcZlIKK3NwZWNpZmllcyB0aGF0IHRoZSBhcmNoaXZlIG1lbWJlcnMgYXJlIGluIGFuIG9iamVjdCBjb2RlIGZvcm1hdAorZGlmZmVyZW50IGZyb20geW91ciBzeXN0ZW0ncyBkZWZhdWx0IGZvcm1hdC4gIFNlZQorLklQICJcZkJAXGZSXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIkBmaWxlIgorUmVhZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tIFxmSWZpbGVcZlIuICBUaGUgb3B0aW9ucyByZWFkIGFyZQoraW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIEBcZklmaWxlXGZSIG9wdGlvbi4gIElmIFxmSWZpbGVcZlIKK2RvZXMgbm90IGV4aXN0LCBvciBjYW5ub3QgYmUgcmVhZCwgdGhlbiB0aGUgb3B0aW9uIHdpbGwgYmUgdHJlYXRlZAorbGl0ZXJhbGx5LCBhbmQgbm90IHJlbW92ZWQuCisuU3AKK09wdGlvbnMgaW4gXGZJZmlsZVxmUiBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBBIHdoaXRlc3BhY2UKK2NoYXJhY3RlciBtYXkgYmUgaW5jbHVkZWQgaW4gYW4gb3B0aW9uIGJ5IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUKK29wdGlvbiBpbiBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMuICBBbnkgY2hhcmFjdGVyIChpbmNsdWRpbmcgYQorYmFja3NsYXNoKSBtYXkgYmUgaW5jbHVkZWQgYnkgcHJlZml4aW5nIHRoZSBjaGFyYWN0ZXIgdG8gYmUgaW5jbHVkZWQKK3dpdGggYSBiYWNrc2xhc2guICBUaGUgXGZJZmlsZVxmUiBtYXkgaXRzZWxmIGNvbnRhaW4gYWRkaXRpb25hbAorQFxmSWZpbGVcZlIgb3B0aW9uczsgYW55IHN1Y2ggb3B0aW9ucyB3aWxsIGJlIHByb2Nlc3NlZCByZWN1cnNpdmVseS4KKy5TSCAiU0VFIEFMU08iCisuSVggSGVhZGVyICJTRUUgQUxTTyIKK1wmXGZJbm1cZlJcfCgxKSwgXGZJcmFubGliXGZSXHwoMSksIGFuZCB0aGUgSW5mbyBlbnRyaWVzIGZvciBcZkliaW51dGlsc1xmUi4KKy5TSCAiQ09QWVJJR0hUIgorLklYIEhlYWRlciAiQ09QWVJJR0hUIgorQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBcKihMIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcKihSIi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1hcy4xIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWFzLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxMzJlNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1hcy4xCkBAIC0wLDAgKzEsMTgzNSBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjMgKFBvZDo6U2ltcGxlIDMuMTQpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIkFTIDEiCisuVEggQVMgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitBUyBcLSB0aGUgcG9ydGFibGUgR05VIGFzc2VtYmxlci4KKy5TSCAiU1lOT1BTSVMiCisuSVggSGVhZGVyICJTWU5PUFNJUyIKK2FzIFtcZkJcLWFcZlJbXGZCY2RnaGxuc1xmUl1bPVxmSWZpbGVcZlJdXSBbXGZCXC1cLWFsdGVybmF0ZVxmUl0gW1xmQlwtRFxmUl0KKyBbXGZCXC1cLWNvbXByZXNzXC1kZWJ1Z1wtc2VjdGlvbnNcZlJdICBbXGZCXC1cLW5vY29tcHJlc3NcLWRlYnVnXC1zZWN0aW9uc1xmUl0KKyBbXGZCXC1cLWRlYnVnXC1wcmVmaXhcLW1hcFxmUiBcZklvbGRcZlI9XGZJbmV3XGZSXQorIFtcZkJcLVwtZGVmc3ltXGZSIFxmSXN5bVxmUj1cZkl2YWxcZlJdIFtcZkJcLWZcZlJdIFtcZkJcLWdcZlJdIFtcZkJcLVwtZ3N0YWJzXGZSXQorIFtcZkJcLVwtZ3N0YWJzK1xmUl0gW1xmQlwtXC1nZHdhcmZcLTJcZlJdIFtcZkJcLVwtaGVscFxmUl0gW1xmQlwtSVxmUiBcZklkaXJcZlJdIFtcZkJcLUpcZlJdCisgW1xmQlwtS1xmUl0gW1xmQlwtTFxmUl0gW1xmQlwtXC1saXN0aW5nXC1saHNcLXdpZHRoXGZSPVxmSVxzLTFOVU1cczBcZlJdCisgW1xmQlwtXC1saXN0aW5nXC1saHNcLXdpZHRoMlxmUj1cZklccy0xTlVNXHMwXGZSXSBbXGZCXC1cLWxpc3RpbmdcLXJoc1wtd2lkdGhcZlI9XGZJXHMtMU5VTVxzMFxmUl0KKyBbXGZCXC1cLWxpc3RpbmdcLWNvbnRcLWxpbmVzXGZSPVxmSVxzLTFOVU1cczBcZlJdIFtcZkJcLVwta2VlcFwtbG9jYWxzXGZSXSBbXGZCXC1vXGZSCisgXGZJb2JqZmlsZVxmUl0gW1xmQlwtUlxmUl0gW1xmQlwtXC1yZWR1Y2VcLW1lbW9yeVwtb3ZlcmhlYWRzXGZSXSBbXGZCXC1cLXN0YXRpc3RpY3NcZlJdCisgW1xmQlwtdlxmUl0gW1xmQlwtdmVyc2lvblxmUl0gW1xmQlwtXC12ZXJzaW9uXGZSXSBbXGZCXC1XXGZSXSBbXGZCXC1cLXdhcm5cZlJdCisgW1xmQlwtXC1mYXRhbFwtd2FybmluZ3NcZlJdIFtcZkJcLXdcZlJdIFtcZkJcLXhcZlJdIFtcZkJcLVpcZlJdIFtcZkJAXGZSXGZJXHMtMUZJTEVcczBcZlJdCisgW1xmQlwtXC1zaXplXC1jaGVjaz1bZXJyb3J8d2FybmluZ11cZlJdCisgW1xmQlwtXC10YXJnZXRcLWhlbHBcZlJdIFtcZkl0YXJnZXQtb3B0aW9uc1xmUl0KKyBbXGZCXC1cLVxmUnxcZklmaWxlc1xmUiAuLi5dCisuUFAKK1wmXGZJVGFyZ2V0IEFBcmNoNjQgb3B0aW9uczpcZlIKKyAgIFtcZkJcLUVCXGZSfFxmQlwtRUxcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IEFscGhhIG9wdGlvbnM6XGZSCisgICBbXGZCXC1tXGZSXGZJY3B1XGZSXQorICAgW1xmQlwtbWRlYnVnXGZSIHwgXGZCXC1ub1wtbWRlYnVnXGZSXQorICAgW1xmQlwtcmVwbGFjZVxmUiB8IFxmQlwtbm9yZXBsYWNlXGZSXQorICAgW1xmQlwtcmVsYXhcZlJdIFtcZkJcLWdcZlJdIFtcZkJcLUdcZlJcZklzaXplXGZSXQorICAgW1xmQlwtRlxmUl0gW1xmQlwtMzJhZGRyXGZSXQorLlBQCitcJlxmSVRhcmdldCBccy0xQVJDXHMwIG9wdGlvbnM6XGZSCisgICBbXGZCXC1tYXJjWzV8Nnw3fDhdXGZSXQorICAgW1xmQlwtRUJcZlJ8XGZCXC1FTFxmUl0KKy5QUAorXCZcZklUYXJnZXQgXHMtMUFSTVxzMCBvcHRpb25zOlxmUgorICAgW1xmQlwtbWNwdVxmUj1cZklwcm9jZXNzb3JcZlJbK1xmSWV4dGVuc2lvblxmUi4uLl1dCisgICBbXGZCXC1tYXJjaFxmUj1cZklhcmNoaXRlY3R1cmVcZlJbK1xmSWV4dGVuc2lvblxmUi4uLl1dCisgICBbXGZCXC1tZnB1XGZSPVxmSWZsb2F0aW5nLXBvaW50LWZvcm1hdFxmUl0KKyAgIFtcZkJcLW1mbG9hdFwtYWJpXGZSPVxmSWFiaVxmUl0KKyAgIFtcZkJcLW1lYWJpXGZSPVxmSXZlclxmUl0KKyAgIFtcZkJcLW10aHVtYlxmUl0KKyAgIFtcZkJcLUVCXGZSfFxmQlwtRUxcZlJdCisgICBbXGZCXC1tYXBjc1wtMzJcZlJ8XGZCXC1tYXBjc1wtMjZcZlJ8XGZCXC1tYXBjc1wtZmxvYXRcZlJ8CisgICAgXGZCXC1tYXBjc1wtcmVlbnRyYW50XGZSXQorICAgW1xmQlwtbXRodW1iXC1pbnRlcndvcmtcZlJdIFtcZkJcLWtcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IEJsYWNrZmluIG9wdGlvbnM6XGZSCisgICBbXGZCXC1tY3B1XGZSPVxmSXByb2Nlc3NvclxmUltcLVxmSXNpcmV2aXNpb25cZlJdXQorICAgW1xmQlwtbWZkcGljXGZSXQorICAgW1xmQlwtbW5vXC1mZHBpY1xmUl0KKyAgIFtcZkJcLW1ub3BpY1xmUl0KKy5QUAorXCZcZklUYXJnZXQgXHMtMUNSSVNcczAgb3B0aW9uczpcZlIKKyAgIFtcZkJcLVwtdW5kZXJzY29yZVxmUiB8IFxmQlwtXC1ub1wtdW5kZXJzY29yZVxmUl0KKyAgIFtcZkJcLVwtcGljXGZSXSBbXGZCXC1OXGZSXQorICAgW1xmQlwtXC1lbXVsYXRpb249Y3Jpc2VsZlxmUiB8IFxmQlwtXC1lbXVsYXRpb249Y3Jpc2FvdXRcZlJdCisgICBbXGZCXC1cLW1hcmNoPXYwX3YxMFxmUiB8IFxmQlwtXC1tYXJjaD12MTBcZlIgfCBcZkJcLVwtbWFyY2g9djMyXGZSIHwgXGZCXC1cLW1hcmNoPWNvbW1vbl92MTBfdjMyXGZSXQorLlBQCitcJlxmSVRhcmdldCBEMTBWIG9wdGlvbnM6XGZSCisgICBbXGZCXC1PXGZSXQorLlBQCitcJlxmSVRhcmdldCBEMzBWIG9wdGlvbnM6XGZSCisgICBbXGZCXC1PXGZSfFxmQlwtblxmUnxcZkJcLU5cZlJdCisuUFAKK1wmXGZJVGFyZ2V0IFxzLTFFUElQSEFOWVxzMCBvcHRpb25zOlxmUgorICAgW1xmQlwtbWVwaXBoYW55XGZSfFxmQlwtbWVwaXBoYW55MTZcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IEg4LzMwMCBvcHRpb25zOlxmUgorICAgW1wtaFwtdGlja1wtaGV4XQorLlBQCitcJlxmSVRhcmdldCBpMzg2IG9wdGlvbnM6XGZSCisgICBbXGZCXC1cLTMyXGZSfFxmQlwtXC1uMzJcZlJ8XGZCXC1cLTY0XGZSXSBbXGZCXC1uXGZSXQorICAgW1xmQlwtbWFyY2hcZlI9XGZJXHMtMUNQVVxzMFxmUlsrXGZJXHMtMUVYVEVOU0lPTlxzMFxmUi4uLl1dIFtcZkJcLW10dW5lXGZSPVxmSVxzLTFDUFVcczBcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IGk5NjAgb3B0aW9uczpcZlIKKyAgIFtcZkJcLUFDQVxmUnxcZkJcLUFDQV9BXGZSfFxmQlwtQUNCXGZSfFxmQlwtQUNDXGZSfFxmQlwtQUtBXGZSfFxmQlwtQUtCXGZSfAorICAgIFxmQlwtQUtDXGZSfFxmQlwtQU1DXGZSXQorICAgW1xmQlwtYlxmUl0gW1xmQlwtbm9cLXJlbGF4XGZSXQorLlBQCitcJlxmSVRhcmdldCBccy0xSUFcLTY0XHMwIG9wdGlvbnM6XGZSCisgICBbXGZCXC1tY29uc3RhbnRcLWdwXGZSfFxmQlwtbWF1dG9cLXBpY1xmUl0KKyAgIFtcZkJcLW1pbHAzMlxmUnxcZkJcLW1pbHA2NFxmUnxcZkJcLW1scDY0XGZSfFxmQlwtbXA2NFxmUl0KKyAgIFtcZkJcLW1sZVxmUnxcZkJtYmVcZlJdCisgICBbXGZCXC1tdHVuZT1pdGFuaXVtMVxmUnxcZkJcLW10dW5lPWl0YW5pdW0yXGZSXQorICAgW1xmQlwtbXVud2luZFwtY2hlY2s9d2FybmluZ1xmUnxcZkJcLW11bndpbmRcLWNoZWNrPWVycm9yXGZSXQorICAgW1xmQlwtbWhpbnQuYj1va1xmUnxcZkJcLW1oaW50LmI9d2FybmluZ1xmUnxcZkJcLW1oaW50LmI9ZXJyb3JcZlJdCisgICBbXGZCXC14XGZSfFxmQlwteGV4cGxpY2l0XGZSXSBbXGZCXC14YXV0b1xmUl0gW1xmQlwteGRlYnVnXGZSXQorLlBQCitcJlxmSVRhcmdldCBccy0xSVAyS1xzMCBvcHRpb25zOlxmUgorICAgW1xmQlwtbWlwMjAyMlxmUnxcZkJcLW1pcDIwMjJleHRcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IE0zMkMgb3B0aW9uczpcZlIKKyAgIFtcZkJcLW0zMmNcZlJ8XGZCXC1tMTZjXGZSXSBbXC1yZWxheF0gW1wtaFwtdGlja1wtaGV4XQorLlBQCitcJlxmSVRhcmdldCBNMzJSIG9wdGlvbnM6XGZSCisgICBbXGZCXC1cLW0zMnJ4XGZSfFxmQlwtXC1bbm9cLV13YXJuXC1leHBsaWNpdFwtcGFyYWxsZWxcLWNvbmZsaWN0c1xmUnwKKyAgIFxmQlwtXC1XW25dcFxmUl0KKy5QUAorXCZcZklUYXJnZXQgTTY4MFgwIG9wdGlvbnM6XGZSCisgICBbXGZCXC1sXGZSXSBbXGZCXC1tNjgwMDBcZlJ8XGZCXC1tNjgwMTBcZlJ8XGZCXC1tNjgwMjBcZlJ8Li4uXQorLlBQCitcJlxmSVRhcmdldCBNNjhIQzExIG9wdGlvbnM6XGZSCisgICBbXGZCXC1tNjhoYzExXGZSfFxmQlwtbTY4aGMxMlxmUnxcZkJcLW02OGhjczEyXGZSfFxmQlwtbW05czEyeFxmUnxcZkJcLW1tOXMxMnhnXGZSXQorICAgW1xmQlwtbXNob3J0XGZSfFxmQlwtbWxvbmdcZlJdCisgICBbXGZCXC1tc2hvcnRcLWRvdWJsZVxmUnxcZkJcLW1sb25nXC1kb3VibGVcZlJdCisgICBbXGZCXC1cLWZvcmNlXC1sb25nXC1icmFuY2hlc1xmUl0gW1xmQlwtXC1zaG9ydFwtYnJhbmNoZXNcZlJdCisgICBbXGZCXC1cLXN0cmljdFwtZGlyZWN0XC1tb2RlXGZSXSBbXGZCXC1cLXByaW50XC1pbnNuXC1zeW50YXhcZlJdCisgICBbXGZCXC1cLXByaW50XC1vcGNvZGVzXGZSXSBbXGZCXC1cLWdlbmVyYXRlXC1leGFtcGxlXGZSXQorLlBQCitcJlxmSVRhcmdldCBccy0xTUNPUkVcczAgb3B0aW9uczpcZlIKKyAgIFtcZkJcLWpzcmkyYnNyXGZSXSBbXGZCXC1zaWZpbHRlclxmUl0gW1xmQlwtcmVsYXhcZlJdCisgICBbXGZCXC1tY3B1PVsyMTB8MzQwXVxmUl0KK1wmXGZJVGFyZ2V0IFxzLTFNSUNST0JMQVpFXHMwIG9wdGlvbnM6XGZSCisuUFAKK1wmXGZJVGFyZ2V0IFxzLTFNSVBTXHMwIG9wdGlvbnM6XGZSCisgICBbXGZCXC1ub2NwcFxmUl0gW1xmQlwtRUxcZlJdIFtcZkJcLUVCXGZSXSBbXGZCXC1PXGZSW1xmSW9wdGltaXphdGlvbiBsZXZlbFxmUl1dCisgICBbXGZCXC1nXGZSW1xmSWRlYnVnIGxldmVsXGZSXV0gW1xmQlwtR1xmUiBcZkludW1cZlJdIFtcZkJcLUtQSUNcZlJdIFtcZkJcLWNhbGxfc2hhcmVkXGZSXQorICAgW1xmQlwtbm9uX3NoYXJlZFxmUl0gW1xmQlwteGdvdFxmUiBbXGZCXC1tdnh3b3Jrc1wtcGljXGZSXQorICAgW1xmQlwtbWFiaVxmUj1cZklccy0xQUJJXHMwXGZSXSBbXGZCXC0zMlxmUl0gW1xmQlwtbjMyXGZSXSBbXGZCXC02NFxmUl0gW1xmQlwtbWZwMzJcZlJdIFtcZkJcLW1ncDMyXGZSXQorICAgW1xmQlwtbWFyY2hcZlI9XGZJXHMtMUNQVVxzMFxmUl0gW1xmQlwtbXR1bmVcZlI9XGZJXHMtMUNQVVxzMFxmUl0gW1xmQlwtbWlwczFcZlJdIFtcZkJcLW1pcHMyXGZSXQorICAgW1xmQlwtbWlwczNcZlJdIFtcZkJcLW1pcHM0XGZSXSBbXGZCXC1taXBzNVxmUl0gW1xmQlwtbWlwczMyXGZSXSBbXGZCXC1taXBzMzJyMlxmUl0KKyAgIFtcZkJcLW1pcHM2NFxmUl0gW1xmQlwtbWlwczY0cjJcZlJdCisgICBbXGZCXC1jb25zdHJ1Y3RcLWZsb2F0c1xmUl0gW1xmQlwtbm9cLWNvbnN0cnVjdFwtZmxvYXRzXGZSXQorICAgW1xmQlwtdHJhcFxmUl0gW1xmQlwtbm9cLWJyZWFrXGZSXSBbXGZCXC1icmVha1xmUl0gW1xmQlwtbm9cLXRyYXBcZlJdCisgICBbXGZCXC1taXBzMTZcZlJdIFtcZkJcLW5vXC1taXBzMTZcZlJdCisgICBbXGZCXC1tbWljcm9taXBzXGZSXSBbXGZCXC1tbm9cLW1pY3JvbWlwc1xmUl0KKyAgIFtcZkJcLW1zbWFydG1pcHNcZlJdIFtcZkJcLW1ub1wtc21hcnRtaXBzXGZSXQorICAgW1xmQlwtbWlwczNkXGZSXSBbXGZCXC1ub1wtbWlwczNkXGZSXQorICAgW1xmQlwtbWRteFxmUl0gW1xmQlwtbm9cLW1kbXhcZlJdCisgICBbXGZCXC1tZHNwXGZSXSBbXGZCXC1tbm9cLWRzcFxmUl0KKyAgIFtcZkJcLW1kc3ByMlxmUl0gW1xmQlwtbW5vXC1kc3ByMlxmUl0KKyAgIFtcZkJcLW1tdFxmUl0gW1xmQlwtbW5vXC1tdFxmUl0KKyAgIFtcZkJcLW1tY3VcZlJdIFtcZkJcLW1ub1wtbWN1XGZSXQorICAgW1xmQlwtbWZpeDcwMDBcZlJdIFtcZkJcLW1ub1wtZml4NzAwMFxmUl0KKyAgIFtcZkJcLW1maXhcLXZyNDEyMFxmUl0gW1xmQlwtbW5vXC1maXhcLXZyNDEyMFxmUl0KKyAgIFtcZkJcLW1maXhcLXZyNDEzMFxmUl0gW1xmQlwtbW5vXC1maXhcLXZyNDEzMFxmUl0KKyAgIFtcZkJcLW1kZWJ1Z1xmUl0gW1xmQlwtbm9cLW1kZWJ1Z1xmUl0KKyAgIFtcZkJcLW1wZHJcZlJdIFtcZkJcLW1ub1wtcGRyXGZSXQorLlBQCitcJlxmSVRhcmdldCBccy0xTU1JWFxzMCBvcHRpb25zOlxmUgorICAgW1xmQlwtXC1maXhlZFwtc3BlY2lhbFwtcmVnaXN0ZXJcLW5hbWVzXGZSXSBbXGZCXC1cLWdsb2JhbGl6ZVwtc3ltYm9sc1xmUl0KKyAgIFtcZkJcLVwtZ251XC1zeW50YXhcZlJdIFtcZkJcLVwtcmVsYXhcZlJdIFtcZkJcLVwtbm9cLXByZWRlZmluZWRcLXN5bWJvbHNcZlJdCisgICBbXGZCXC1cLW5vXC1leHBhbmRcZlJdIFtcZkJcLVwtbm9cLW1lcmdlXC1ncmVnc1xmUl0gW1xmQlwteFxmUl0KKyAgIFtcZkJcLVwtbGlua2VyXC1hbGxvY2F0ZWRcLWdyZWdzXGZSXQorLlBQCitcJlxmSVRhcmdldCBccy0xUERQMTFcczAgb3B0aW9uczpcZlIKKyAgIFtcZkJcLW1waWNcZlJ8XGZCXC1tbm9cLXBpY1xmUl0gW1xmQlwtbWFsbFxmUl0gW1xmQlwtbW5vXC1leHRlbnNpb25zXGZSXQorICAgW1xmQlwtbVxmUlxmSWV4dGVuc2lvblxmUnxcZkJcLW1ub1wtXGZSXGZJZXh0ZW5zaW9uXGZSXQorICAgW1xmQlwtbVxmUlxmSWNwdVxmUl0gW1xmQlwtbVxmUlxmSW1hY2hpbmVcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IHBpY29KYXZhIG9wdGlvbnM6XGZSCisgICBbXGZCXC1tYlxmUnxcZkJcLW1lXGZSXQorLlBQCitcJlxmSVRhcmdldCBQb3dlclBDIG9wdGlvbnM6XGZSCisgICBbXGZCXC1hMzJcZlJ8XGZCXC1hNjRcZlJdCisgICBbXGZCXC1tcHdyeFxmUnxcZkJcLW1wd3IyXGZSfFxmQlwtbXB3clxmUnxcZkJcLW02MDFcZlJ8XGZCXC1tcHBjXGZSfFxmQlwtbXBwYzMyXGZSfFxmQlwtbTYwM1xmUnxcZkJcLW02MDRcZlJ8XGZCXC1tNDAzXGZSfFxmQlwtbTQwNVxmUnwKKyAgICBcZkJcLW00NDBcZlJ8XGZCXC1tNDY0XGZSfFxmQlwtbTQ3NlxmUnxcZkJcLW03NDAwXGZSfFxmQlwtbTc0MTBcZlJ8XGZCXC1tNzQ1MFxmUnxcZkJcLW03NDU1XGZSfFxmQlwtbTc1MGNsXGZSfFxmQlwtbXBwYzY0XGZSfAorICAgIFxmQlwtbTYyMFxmUnxcZkJcLW1lNTAwXGZSfFxmQlwtZTUwMHgyXGZSfFxmQlwtbWU1MDBtY1xmUnxcZkJcLW1lNTAwbWM2NFxmUnxcZkJcLW1lNTUwMFxmUnxcZkJcLW1lNjUwMFxmUnxcZkJcLW1wcGM2NGJyaWRnZVxmUnwKKyAgICBcZkJcLW1ib29rZVxmUnxcZkJcLW1wb3dlcjRcZlJ8XGZCXC1tcHI0XGZSfFxmQlwtbXBvd2VyNVxmUnxcZkJcLW1wd3I1XGZSfFxmQlwtbXB3cjV4XGZSfFxmQlwtbXBvd2VyNlxmUnxcZkJcLW1wd3I2XGZSfAorICAgIFxmQlwtbXBvd2VyN1xmUnxcZkJcLW1wdzdcZlJ8XGZCXC1tYTJcZlJ8XGZCXC1tY2VsbFxmUnxcZkJcLW1zcGVcZlJ8XGZCXC1tdGl0YW5cZlJ8XGZCXC1tZTMwMFxmUnxcZkJcLW1jb21cZlJdCisgICBbXGZCXC1tYW55XGZSXSBbXGZCXC1tYWx0aXZlY1xmUnxcZkJcLW12c3hcZlJdCisgICBbXGZCXC1tcmVnbmFtZXNcZlJ8XGZCXC1tbm9cLXJlZ25hbWVzXGZSXQorICAgW1xmQlwtbXJlbG9jYXRhYmxlXGZSfFxmQlwtbXJlbG9jYXRhYmxlXC1saWJcZlJ8XGZCXC1LIFxzLTFQSUNcczBcZlJdIFtcZkJcLW1lbWJcZlJdCisgICBbXGZCXC1tbGl0dGxlXGZSfFxmQlwtbWxpdHRsZVwtZW5kaWFuXGZSfFxmQlwtbGVcZlJ8XGZCXC1tYmlnXGZSfFxmQlwtbWJpZ1wtZW5kaWFuXGZSfFxmQlwtYmVcZlJdCisgICBbXGZCXC1tc29sYXJpc1xmUnxcZkJcLW1ub1wtc29sYXJpc1xmUl0KKyAgIFtcZkJcLW5vcHM9XGZSXGZJY291bnRcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IFxzLTFSWFxzMCBvcHRpb25zOlxmUgorICAgW1xmQlwtbWxpdHRsZVwtZW5kaWFuXGZSfFxmQlwtbWJpZ1wtZW5kaWFuXGZSXQorICAgW1xmQlwtbTMyYml0XC1pbnRzXGZSfFxmQlwtbTE2Yml0XC1pbnRzXGZSXQorICAgW1xmQlwtbTMyYml0XC1kb3VibGVzXGZSfFxmQlwtbTY0Yml0XC1kb3VibGVzXGZSXQorLlBQCitcJlxmSVRhcmdldCBzMzkwIG9wdGlvbnM6XGZSCisgICBbXGZCXC1tMzFcZlJ8XGZCXC1tNjRcZlJdIFtcZkJcLW1lc2FcZlJ8XGZCXC1temFyY2hcZlJdIFtcZkJcLW1hcmNoXGZSPVxmSVxzLTFDUFVcczBcZlJdCisgICBbXGZCXC1tcmVnbmFtZXNcZlJ8XGZCXC1tbm9cLXJlZ25hbWVzXGZSXQorICAgW1xmQlwtbXdhcm5cLWFyZWdcLXplcm9cZlJdCisuUFAKK1wmXGZJVGFyZ2V0IFxzLTFTQ09SRVxzMCBvcHRpb25zOlxmUgorICAgW1xmQlwtRUJcZlJdW1xmQlwtRUxcZlJdW1xmQlwtRklYRERcZlJdW1xmQlwtTldBUk5cZlJdCisgICBbXGZCXC1TQ09SRTVcZlJdW1xmQlwtU0NPUkU1VVxmUl1bXGZCXC1TQ09SRTdcZlJdW1xmQlwtU0NPUkUzXGZSXQorICAgW1xmQlwtbWFyY2g9c2NvcmU3XGZSXVtcZkJcLW1hcmNoPXNjb3JlM1xmUl0KKyAgIFtcZkJcLVVTRV9SMVxmUl1bXGZCXC1LUElDXGZSXVtcZkJcLU8wXGZSXVtcZkJcLUdcZlIgXGZJbnVtXGZSXVtcZkJcLVZcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IFxzLTFTUEFSQ1xzMCBvcHRpb25zOlxmUgorICAgW1xmQlwtQXY2XGZSfFxmQlwtQXY3XGZSfFxmQlwtQXY4XGZSfFxmQlwtQXNwYXJjbGV0XGZSfFxmQlwtQXNwYXJjbGl0ZVxmUgorICAgIFxmQlwtQXY4cGx1c1xmUnxcZkJcLUF2OHBsdXNhXGZSfFxmQlwtQXY5XGZSfFxmQlwtQXY5YVxmUl0KKyAgIFtcZkJcLXhhcmNoPXY4cGx1c1xmUnxcZkJcLXhhcmNoPXY4cGx1c2FcZlJdIFtcZkJcLWJ1bXBcZlJdCisgICBbXGZCXC0zMlxmUnxcZkJcLTY0XGZSXQorLlBQCitcJlxmSVRhcmdldCBccy0xVElDNTRYXHMwIG9wdGlvbnM6XGZSCisgW1xmQlwtbWNwdT01NFsxMjM1ODldXGZSfFxmQlwtbWNwdT01NFs1Nl1scFxmUl0gW1xmQlwtbWZhclwtbW9kZVxmUnxcZkJcLW1mXGZSXQorIFtcZkJcLW1lcnJvcnNcLXRvXC1maWxlXGZSIFxmSTxmaWxlbmFtZT5cZlJ8XGZCXC1tZVxmUiBcZkk8ZmlsZW5hbWU+XGZSXQorLlBQCitcJlxmSVRhcmdldCBccy0xVElDNlhcczAgb3B0aW9uczpcZlIKKyAgIFtcZkJcLW1hcmNoPVxmUlxmSWFyY2hcZlJdIFtcZkJcLW1iaWdcLWVuZGlhblxmUnxcZkJcLW1saXR0bGVcLWVuZGlhblxmUl0KKyAgIFtcZkJcLW1kc2J0XGZSfFxmQlwtbW5vXC1kc2J0XGZSXSBbXGZCXC1tcGlkPW5vXGZSfFxmQlwtbXBpZD1uZWFyXGZSfFxmQlwtbXBpZD1mYXJcZlJdCisgICBbXGZCXC1tcGljXGZSfFxmQlwtbW5vXC1waWNcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IFRJTEUtR3ggb3B0aW9uczpcZlIKKyAgIFtcZkJcLW0zMlxmUnxcZkJcLW02NFxmUl1bXGZCXC1FQlxmUl1bXGZCXC1FTFxmUl0KKy5QUAorXCZcZklUYXJnZXQgWHRlbnNhIG9wdGlvbnM6XGZSCisgW1xmQlwtXC1bbm9cLV10ZXh0XC1zZWN0aW9uXC1saXRlcmFsc1xmUl0gW1xmQlwtXC1bbm9cLV1hYnNvbHV0ZVwtbGl0ZXJhbHNcZlJdCisgW1xmQlwtXC1bbm9cLV10YXJnZXRcLWFsaWduXGZSXSBbXGZCXC1cLVtub1wtXWxvbmdjYWxsc1xmUl0KKyBbXGZCXC1cLVtub1wtXXRyYW5zZm9ybVxmUl0KKyBbXGZCXC1cLXJlbmFtZVwtc2VjdGlvblxmUiBcZklvbGRuYW1lXGZSPVxmSW5ld25hbWVcZlJdCisuUFAKK1wmXGZJVGFyZ2V0IFo4MCBvcHRpb25zOlxmUgorICBbXGZCXC16ODBcZlJdIFtcZkJcLXI4MDBcZlJdCisgIFsgXGZCXC1pZ25vcmVcLXVuZG9jdW1lbnRlZFwtaW5zdHJ1Y3Rpb25zXGZSXSBbXGZCXC1XbnVkXGZSXQorICBbIFxmQlwtaWdub3JlXC11bnBvcnRhYmxlXC1pbnN0cnVjdGlvbnNcZlJdIFtcZkJcLVdudXBcZlJdCisgIFsgXGZCXC13YXJuXC11bmRvY3VtZW50ZWRcLWluc3RydWN0aW9uc1xmUl0gW1xmQlwtV3VkXGZSXQorICBbIFxmQlwtd2FyblwtdW5wb3J0YWJsZVwtaW5zdHJ1Y3Rpb25zXGZSXSBbXGZCXC1XdXBcZlJdCisgIFsgXGZCXC1mb3JiaWRcLXVuZG9jdW1lbnRlZFwtaW5zdHJ1Y3Rpb25zXGZSXSBbXGZCXC1GdWRcZlJdCisgIFsgXGZCXC1mb3JiaWRcLXVucG9ydGFibGVcLWluc3RydWN0aW9uc1xmUl0gW1xmQlwtRnVwXGZSXQorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorXCZccy0xR05VXHMwIFxmQmFzXGZSIGlzIHJlYWxseSBhIGZhbWlseSBvZiBhc3NlbWJsZXJzLgorSWYgeW91IHVzZSAob3IgaGF2ZSB1c2VkKSB0aGUgXHMtMUdOVVxzMCBhc3NlbWJsZXIgb24gb25lIGFyY2hpdGVjdHVyZSwgeW91CitzaG91bGQgZmluZCBhIGZhaXJseSBzaW1pbGFyIGVudmlyb25tZW50IHdoZW4geW91IHVzZSBpdCBvbiBhbm90aGVyCithcmNoaXRlY3R1cmUuICBFYWNoIHZlcnNpb24gaGFzIG11Y2ggaW4gY29tbW9uIHdpdGggdGhlIG90aGVycywKK2luY2x1ZGluZyBvYmplY3QgZmlsZSBmb3JtYXRzLCBtb3N0IGFzc2VtYmxlciBkaXJlY3RpdmVzIChvZnRlbiBjYWxsZWQKK1wmXGZJcHNldWRvLW9wc1xmUikgYW5kIGFzc2VtYmxlciBzeW50YXguCisuUFAKK1wmXGZCYXNcZlIgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGFzc2VtYmxlIHRoZSBvdXRwdXQgb2YgdGhlCitcJlxzLTFHTlVcczAgQyBjb21waWxlciBcZihDV1wqKENgZ2NjXCooQydcZlIgZm9yIHVzZSBieSB0aGUgbGlua2VyCitcJlxmKENXXCooQ2BsZFwqKEMnXGZSLiAgTmV2ZXJ0aGVsZXNzLCB3ZSd2ZSB0cmllZCB0byBtYWtlIFxmQmFzXGZSCithc3NlbWJsZSBjb3JyZWN0bHkgZXZlcnl0aGluZyB0aGF0IG90aGVyIGFzc2VtYmxlcnMgZm9yIHRoZSBzYW1lCittYWNoaW5lIHdvdWxkIGFzc2VtYmxlLgorQW55IGV4Y2VwdGlvbnMgYXJlIGRvY3VtZW50ZWQgZXhwbGljaXRseS4KK1RoaXMgZG9lc24ndCBtZWFuIFxmQmFzXGZSIGFsd2F5cyB1c2VzIHRoZSBzYW1lIHN5bnRheCBhcyBhbm90aGVyCithc3NlbWJsZXIgZm9yIHRoZSBzYW1lIGFyY2hpdGVjdHVyZTsgZm9yIGV4YW1wbGUsIHdlIGtub3cgb2Ygc2V2ZXJhbAoraW5jb21wYXRpYmxlIHZlcnNpb25zIG9mIDY4MHgwIGFzc2VtYmx5IGxhbmd1YWdlIHN5bnRheC4KKy5QUAorRWFjaCB0aW1lIHlvdSBydW4gXGZCYXNcZlIgaXQgYXNzZW1ibGVzIGV4YWN0bHkgb25lIHNvdXJjZQorcHJvZ3JhbS4gIFRoZSBzb3VyY2UgcHJvZ3JhbSBpcyBtYWRlIHVwIG9mIG9uZSBvciBtb3JlIGZpbGVzLgorKFRoZSBzdGFuZGFyZCBpbnB1dCBpcyBhbHNvIGEgZmlsZS4pCisuUFAKK1lvdSBnaXZlIFxmQmFzXGZSIGEgY29tbWFuZCBsaW5lIHRoYXQgaGFzIHplcm8gb3IgbW9yZSBpbnB1dCBmaWxlCituYW1lcy4gIFRoZSBpbnB1dCBmaWxlcyBhcmUgcmVhZCAoZnJvbSBsZWZ0IGZpbGUgbmFtZSB0byByaWdodCkuICBBCitjb21tYW5kIGxpbmUgYXJndW1lbnQgKGluIGFueSBwb3NpdGlvbikgdGhhdCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nCitpcyB0YWtlbiB0byBiZSBhbiBpbnB1dCBmaWxlIG5hbWUuCisuUFAKK0lmIHlvdSBnaXZlIFxmQmFzXGZSIG5vIGZpbGUgbmFtZXMgaXQgYXR0ZW1wdHMgdG8gcmVhZCBvbmUgaW5wdXQgZmlsZQorZnJvbSB0aGUgXGZCYXNcZlIgc3RhbmRhcmQgaW5wdXQsIHdoaWNoIGlzIG5vcm1hbGx5IHlvdXIgdGVybWluYWwuICBZb3UKK21heSBoYXZlIHRvIHR5cGUgXGZCY3RsLURcZlIgdG8gdGVsbCBcZkJhc1xmUiB0aGVyZSBpcyBubyBtb3JlIHByb2dyYW0KK3RvIGFzc2VtYmxlLgorLlBQCitVc2UgXGZCXC1cLVxmUiBpZiB5b3UgbmVlZCB0byBleHBsaWNpdGx5IG5hbWUgdGhlIHN0YW5kYXJkIGlucHV0IGZpbGUKK2luIHlvdXIgY29tbWFuZCBsaW5lLgorLlBQCitJZiB0aGUgc291cmNlIGlzIGVtcHR5LCBcZkJhc1xmUiBwcm9kdWNlcyBhIHNtYWxsLCBlbXB0eSBvYmplY3QKK2ZpbGUuCisuUFAKK1wmXGZCYXNcZlIgbWF5IHdyaXRlIHdhcm5pbmdzIGFuZCBlcnJvciBtZXNzYWdlcyB0byB0aGUgc3RhbmRhcmQgZXJyb3IKK2ZpbGUgKHVzdWFsbHkgeW91ciB0ZXJtaW5hbCkuICBUaGlzIHNob3VsZCBub3QgaGFwcGVuIHdoZW4gIGEgY29tcGlsZXIKK3J1bnMgXGZCYXNcZlIgYXV0b21hdGljYWxseS4gIFdhcm5pbmdzIHJlcG9ydCBhbiBhc3N1bXB0aW9uIG1hZGUgc28KK3RoYXQgXGZCYXNcZlIgY291bGQga2VlcCBhc3NlbWJsaW5nIGEgZmxhd2VkIHByb2dyYW07IGVycm9ycyByZXBvcnQgYQorZ3JhdmUgcHJvYmxlbSB0aGF0IHN0b3BzIHRoZSBhc3NlbWJseS4KKy5QUAorSWYgeW91IGFyZSBpbnZva2luZyBcZkJhc1xmUiB2aWEgdGhlIFxzLTFHTlVcczAgQyBjb21waWxlciwKK3lvdSBjYW4gdXNlIHRoZSBcZkJcLVdhXGZSIG9wdGlvbiB0byBwYXNzIGFyZ3VtZW50cyB0aHJvdWdoIHRvIHRoZSBhc3NlbWJsZXIuCitUaGUgYXNzZW1ibGVyIGFyZ3VtZW50cyBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgKGFuZCB0aGUgXGZCXC1XYVxmUikKK2J5IGNvbW1hcy4gIEZvciBleGFtcGxlOgorLlBQCisuVmIgMQorXCYgICAgICAgIGdjYyBcLWMgXC1nIFwtTyBcLVdhLFwtYWxoLFwtTCBmaWxlLmMKKy5WZQorLlBQCitUaGlzIHBhc3NlcyB0d28gb3B0aW9ucyB0byB0aGUgYXNzZW1ibGVyOiBcZkJcLWFsaFxmUiAoZW1pdCBhIGxpc3RpbmcgdG8KK3N0YW5kYXJkIG91dHB1dCB3aXRoIGhpZ2gtbGV2ZWwgYW5kIGFzc2VtYmx5IHNvdXJjZSkgYW5kIFxmQlwtTFxmUiAocmV0YWluCitsb2NhbCBzeW1ib2xzIGluIHRoZSBzeW1ib2wgdGFibGUpLgorLlBQCitVc3VhbGx5IHlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhpcyBcZkJcLVdhXGZSIG1lY2hhbmlzbSwgc2luY2UgbWFueSBjb21waWxlcgorY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkgcGFzc2VkIHRvIHRoZSBhc3NlbWJsZXIgYnkgdGhlIGNvbXBpbGVyLgorKFlvdSBjYW4gY2FsbCB0aGUgXHMtMUdOVVxzMCBjb21waWxlciBkcml2ZXIgd2l0aCB0aGUgXGZCXC12XGZSIG9wdGlvbiB0byBzZWUKK3ByZWNpc2VseSB3aGF0IG9wdGlvbnMgaXQgcGFzc2VzIHRvIGVhY2ggY29tcGlsYXRpb24gcGFzcywgaW5jbHVkaW5nIHRoZQorYXNzZW1ibGVyLikKKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLklQICJcZkJcLWFbY2RnaGxtbnNdXGZSIiA0CisuSVggSXRlbSAiLWFbY2RnaGxtbnNdIgorVHVybiBvbiBsaXN0aW5ncywgaW4gYW55IG9mIGEgdmFyaWV0eSBvZiB3YXlzOgorLlJTIDQKKy5JUCAiXGZCXC1hY1xmUiIgNAorLklYIEl0ZW0gIi1hYyIKK29taXQgZmFsc2UgY29uZGl0aW9uYWxzCisuSVAgIlxmQlwtYWRcZlIiIDQKKy5JWCBJdGVtICItYWQiCitvbWl0IGRlYnVnZ2luZyBkaXJlY3RpdmVzCisuSVAgIlxmQlwtYWdcZlIiIDQKKy5JWCBJdGVtICItYWciCitpbmNsdWRlIGdlbmVyYWwgaW5mb3JtYXRpb24sIGxpa2UgYXMgdmVyc2lvbiBhbmQgb3B0aW9ucyBwYXNzZWQKKy5JUCAiXGZCXC1haFxmUiIgNAorLklYIEl0ZW0gIi1haCIKK2luY2x1ZGUgaGlnaC1sZXZlbCBzb3VyY2UKKy5JUCAiXGZCXC1hbFxmUiIgNAorLklYIEl0ZW0gIi1hbCIKK2luY2x1ZGUgYXNzZW1ibHkKKy5JUCAiXGZCXC1hbVxmUiIgNAorLklYIEl0ZW0gIi1hbSIKK2luY2x1ZGUgbWFjcm8gZXhwYW5zaW9ucworLklQICJcZkJcLWFuXGZSIiA0CisuSVggSXRlbSAiLWFuIgorb21pdCBmb3JtcyBwcm9jZXNzaW5nCisuSVAgIlxmQlwtYXNcZlIiIDQKKy5JWCBJdGVtICItYXMiCitpbmNsdWRlIHN5bWJvbHMKKy5JUCAiXGZCPWZpbGVcZlIiIDQKKy5JWCBJdGVtICI9ZmlsZSIKK3NldCB0aGUgbmFtZSBvZiB0aGUgbGlzdGluZyBmaWxlCisuUkUKKy5SUyA0CisuU3AKK1lvdSBtYXkgY29tYmluZSB0aGVzZSBvcHRpb25zOyBmb3IgZXhhbXBsZSwgdXNlIFxmQlwtYWxuXGZSIGZvciBhc3NlbWJseQorbGlzdGluZyB3aXRob3V0IGZvcm1zIHByb2Nlc3NpbmcuICBUaGUgXGZCPWZpbGVcZlIgb3B0aW9uLCBpZiB1c2VkLCBtdXN0IGJlCit0aGUgbGFzdCBvbmUuICBCeSBpdHNlbGYsIFxmQlwtYVxmUiBkZWZhdWx0cyB0byBcZkJcLWFobHNcZlIuCisuUkUKKy5JUCAiXGZCXC1cLWFsdGVybmF0ZVxmUiIgNAorLklYIEl0ZW0gIi0tYWx0ZXJuYXRlIgorQmVnaW4gaW4gYWx0ZXJuYXRlIG1hY3JvIG1vZGUuCisuSVAgIlxmQlwtXC1jb21wcmVzc1wtZGVidWdcLXNlY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLS1jb21wcmVzcy1kZWJ1Zy1zZWN0aW9ucyIKK0NvbXByZXNzIFxzLTFEV0FSRlxzMCBkZWJ1ZyBzZWN0aW9ucyB1c2luZyB6bGliLiAgVGhlIGRlYnVnIHNlY3Rpb25zIGFyZSByZW5hbWVkCit0byBiZWdpbiB3aXRoIFxmQi56ZGVidWdcZlIsIGFuZCB0aGUgcmVzdWx0aW5nIG9iamVjdCBmaWxlIG1heSBub3QgYmUKK2NvbXBhdGlibGUgd2l0aCBvbGRlciBsaW5rZXJzIGFuZCBvYmplY3QgZmlsZSB1dGlsaXRpZXMuCisuSVAgIlxmQlwtXC1ub2NvbXByZXNzXC1kZWJ1Z1wtc2VjdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItLW5vY29tcHJlc3MtZGVidWctc2VjdGlvbnMiCitEbyBub3QgY29tcHJlc3MgXHMtMURXQVJGXHMwIGRlYnVnIHNlY3Rpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1EXGZSIiA0CisuSVggSXRlbSAiLUQiCitJZ25vcmVkLiAgVGhpcyBvcHRpb24gaXMgYWNjZXB0ZWQgZm9yIHNjcmlwdCBjb21wYXRpYmlsaXR5IHdpdGggY2FsbHMgdG8KK290aGVyIGFzc2VtYmxlcnMuCisuSVAgIlxmQlwtXC1kZWJ1Z1wtcHJlZml4XC1tYXBcZlIgXGZJb2xkXGZSXGZCPVxmUlxmSW5ld1xmUiIgNAorLklYIEl0ZW0gIi0tZGVidWctcHJlZml4LW1hcCBvbGQ9bmV3IgorV2hlbiBhc3NlbWJsaW5nIGZpbGVzIGluIGRpcmVjdG9yeSBcZklcZklvbGRcZklcZlIsIHJlY29yZCBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlbSBhcyBpbiBcZklcZkluZXdcZklcZlIgaW5zdGVhZC4KKy5JUCAiXGZCXC1cLWRlZnN5bVxmUiBcZklzeW1cZlJcZkI9XGZSXGZJdmFsdWVcZlIiIDQKKy5JWCBJdGVtICItLWRlZnN5bSBzeW09dmFsdWUiCitEZWZpbmUgdGhlIHN5bWJvbCBcZklzeW1cZlIgdG8gYmUgXGZJdmFsdWVcZlIgYmVmb3JlIGFzc2VtYmxpbmcgdGhlIGlucHV0IGZpbGUuCitcJlxmSXZhbHVlXGZSIG11c3QgYmUgYW4gaW50ZWdlciBjb25zdGFudC4gIEFzIGluIEMsIGEgbGVhZGluZyBcZkIweFxmUgoraW5kaWNhdGVzIGEgaGV4YWRlY2ltYWwgdmFsdWUsIGFuZCBhIGxlYWRpbmcgXGZCMFxmUiBpbmRpY2F0ZXMgYW4gb2N0YWwKK3ZhbHVlLiAgVGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wgY2FuIGJlIG92ZXJyaWRkZW4gaW5zaWRlIGEgc291cmNlIGZpbGUgdmlhIHRoZQordXNlIG9mIGEgXGYoQ1dcKihDYC5zZXRcKihDJ1xmUiBwc2V1ZG8tb3AuCisuSVAgIlxmQlwtZlxmUiIgNAorLklYIEl0ZW0gIi1mIgorXCZcKihMImZhc3RcKihSIlwtXC1cLXNraXAgd2hpdGVzcGFjZSBhbmQgY29tbWVudCBwcmVwcm9jZXNzaW5nIChhc3N1bWUgc291cmNlIGlzCitjb21waWxlciBvdXRwdXQpLgorLklQICJcZkJcLWdcZlIiIDQKKy5JWCBJdGVtICItZyIKKy5QRCAwCisuSVAgIlxmQlwtXC1nZW5cLWRlYnVnXGZSIiA0CisuSVggSXRlbSAiLS1nZW4tZGVidWciCisuUEQKK0dlbmVyYXRlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgZWFjaCBhc3NlbWJsZXIgc291cmNlIGxpbmUgdXNpbmcgd2hpY2hldmVyCitkZWJ1ZyBmb3JtYXQgaXMgcHJlZmVycmVkIGJ5IHRoZSB0YXJnZXQuICBUaGlzIGN1cnJlbnRseSBtZWFucyBlaXRoZXIgXHMtMVNUQUJTXHMwLAorXCZccy0xRUNPRkZcczAgb3IgXHMtMURXQVJGMlxzMC4KKy5JUCAiXGZCXC1cLWdzdGFic1xmUiIgNAorLklYIEl0ZW0gIi0tZ3N0YWJzIgorR2VuZXJhdGUgc3RhYnMgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIGFzc2VtYmxlciBsaW5lLiAgVGhpcworbWF5IGhlbHAgZGVidWdnaW5nIGFzc2VtYmxlciBjb2RlLCBpZiB0aGUgZGVidWdnZXIgY2FuIGhhbmRsZSBpdC4KKy5JUCAiXGZCXC1cLWdzdGFicytcZlIiIDQKKy5JWCBJdGVtICItLWdzdGFicysiCitHZW5lcmF0ZSBzdGFicyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGVhY2ggYXNzZW1ibGVyIGxpbmUsIHdpdGggXHMtMUdOVVxzMAorZXh0ZW5zaW9ucyB0aGF0IHByb2JhYmx5IG9ubHkgZ2RiIGNhbiBoYW5kbGUsIGFuZCB0aGF0IGNvdWxkIG1ha2Ugb3RoZXIKK2RlYnVnZ2VycyBjcmFzaCBvciByZWZ1c2UgdG8gcmVhZCB5b3VyIHByb2dyYW0uICBUaGlzCittYXkgaGVscCBkZWJ1Z2dpbmcgYXNzZW1ibGVyIGNvZGUuICBDdXJyZW50bHkgdGhlIG9ubHkgXHMtMUdOVVxzMCBleHRlbnNpb24gaXMKK3RoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhdCBhc3NlbWJsaW5nIHRpbWUuCisuSVAgIlxmQlwtXC1nZHdhcmZcLTJcZlIiIDQKKy5JWCBJdGVtICItLWdkd2FyZi0yIgorR2VuZXJhdGUgXHMtMURXQVJGMlxzMCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGVhY2ggYXNzZW1ibGVyIGxpbmUuICBUaGlzCittYXkgaGVscCBkZWJ1Z2dpbmcgYXNzZW1ibGVyIGNvZGUsIGlmIHRoZSBkZWJ1Z2dlciBjYW4gaGFuZGxlIGl0LiAgTm90ZVwtXC1cLXRoaXMKK29wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIHRhcmdldHMsIG5vdCBhbGwgb2YgdGhlbS4KKy5JUCAiXGZCXC1cLXNpemVcLWNoZWNrPWVycm9yXGZSIiA0CisuSVggSXRlbSAiLS1zaXplLWNoZWNrPWVycm9yIgorLlBEIDAKKy5JUCAiXGZCXC1cLXNpemVcLWNoZWNrPXdhcm5pbmdcZlIiIDQKKy5JWCBJdGVtICItLXNpemUtY2hlY2s9d2FybmluZyIKKy5QRAorSXNzdWUgYW4gZXJyb3Igb3Igd2FybmluZyBmb3IgaW52YWxpZCBccy0xRUxGXHMwIC5zaXplIGRpcmVjdGl2ZS4KKy5JUCAiXGZCXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCitQcmludCBhIHN1bW1hcnkgb2YgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCBleGl0LgorLklQICJcZkJcLVwtdGFyZ2V0XC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS10YXJnZXQtaGVscCIKK1ByaW50IGEgc3VtbWFyeSBvZiBhbGwgdGFyZ2V0IHNwZWNpZmljIG9wdGlvbnMgYW5kIGV4aXQuCisuSVAgIlxmQlwtSVxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItSSBkaXIiCitBZGQgZGlyZWN0b3J5IFxmSWRpclxmUiB0byB0aGUgc2VhcmNoIGxpc3QgZm9yIFxmKENXXCooQ2AuaW5jbHVkZVwqKEMnXGZSIGRpcmVjdGl2ZXMuCisuSVAgIlxmQlwtSlxmUiIgNAorLklYIEl0ZW0gIi1KIgorRG9uJ3Qgd2FybiBhYm91dCBzaWduZWQgb3ZlcmZsb3cuCisuSVAgIlxmQlwtS1xmUiIgNAorLklYIEl0ZW0gIi1LIgorSXNzdWUgd2FybmluZ3Mgd2hlbiBkaWZmZXJlbmNlIHRhYmxlcyBhbHRlcmVkIGZvciBsb25nIGRpc3BsYWNlbWVudHMuCisuSVAgIlxmQlwtTFxmUiIgNAorLklYIEl0ZW0gIi1MIgorLlBEIDAKKy5JUCAiXGZCXC1cLWtlZXBcLWxvY2Fsc1xmUiIgNAorLklYIEl0ZW0gIi0ta2VlcC1sb2NhbHMiCisuUEQKK0tlZXAgKGluIHRoZSBzeW1ib2wgdGFibGUpIGxvY2FsIHN5bWJvbHMuICBUaGVzZSBzeW1ib2xzIHN0YXJ0IHdpdGgKK3N5c3RlbS1zcGVjaWZpYyBsb2NhbCBsYWJlbCBwcmVmaXhlcywgdHlwaWNhbGx5IFxmQi5MXGZSIGZvciBccy0xRUxGXHMwIHN5c3RlbXMKK29yIFxmQkxcZlIgZm9yIHRyYWRpdGlvbmFsIGEub3V0IHN5c3RlbXMuCisuSVAgIlxmQlwtXC1saXN0aW5nXC1saHNcLXdpZHRoPVxmUlxmSW51bWJlclxmUiIgNAorLklYIEl0ZW0gIi0tbGlzdGluZy1saHMtd2lkdGg9bnVtYmVyIgorU2V0IHRoZSBtYXhpbXVtIHdpZHRoLCBpbiB3b3Jkcywgb2YgdGhlIG91dHB1dCBkYXRhIGNvbHVtbiBmb3IgYW4gYXNzZW1ibGVyCitsaXN0aW5nIHRvIFxmSW51bWJlclxmUi4KKy5JUCAiXGZCXC1cLWxpc3RpbmdcLWxoc1wtd2lkdGgyPVxmUlxmSW51bWJlclxmUiIgNAorLklYIEl0ZW0gIi0tbGlzdGluZy1saHMtd2lkdGgyPW51bWJlciIKK1NldCB0aGUgbWF4aW11bSB3aWR0aCwgaW4gd29yZHMsIG9mIHRoZSBvdXRwdXQgZGF0YSBjb2x1bW4gZm9yIGNvbnRpbnVhdGlvbgorbGluZXMgaW4gYW4gYXNzZW1ibGVyIGxpc3RpbmcgdG8gXGZJbnVtYmVyXGZSLgorLklQICJcZkJcLVwtbGlzdGluZ1wtcmhzXC13aWR0aD1cZlJcZkludW1iZXJcZlIiIDQKKy5JWCBJdGVtICItLWxpc3RpbmctcmhzLXdpZHRoPW51bWJlciIKK1NldCB0aGUgbWF4aW11bSB3aWR0aCBvZiBhbiBpbnB1dCBzb3VyY2UgbGluZSwgYXMgZGlzcGxheWVkIGluIGEgbGlzdGluZywgdG8KK1wmXGZJbnVtYmVyXGZSIGJ5dGVzLgorLklQICJcZkJcLVwtbGlzdGluZ1wtY29udFwtbGluZXM9XGZSXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAiLS1saXN0aW5nLWNvbnQtbGluZXM9bnVtYmVyIgorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyBwcmludGVkIGluIGEgbGlzdGluZyBmb3IgYSBzaW5nbGUgbGluZSBvZiBpbnB1dAordG8gXGZJbnVtYmVyXGZSICsgMS4KKy5JUCAiXGZCXC1vXGZSIFxmSW9iamZpbGVcZlIiIDQKKy5JWCBJdGVtICItbyBvYmpmaWxlIgorTmFtZSB0aGUgb2JqZWN0LWZpbGUgb3V0cHV0IGZyb20gXGZCYXNcZlIgXGZJb2JqZmlsZVxmUi4KKy5JUCAiXGZCXC1SXGZSIiA0CisuSVggSXRlbSAiLVIiCitGb2xkIHRoZSBkYXRhIHNlY3Rpb24gaW50byB0aGUgdGV4dCBzZWN0aW9uLgorLlNwCitTZXQgdGhlIGRlZmF1bHQgc2l6ZSBvZiBccy0xR0FTXHMwJ3MgaGFzaCB0YWJsZXMgdG8gYSBwcmltZSBudW1iZXIgY2xvc2UgdG8KK1wmXGZJbnVtYmVyXGZSLiAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIGNhbiByZWR1Y2UgdGhlIGxlbmd0aCBvZiB0aW1lIGl0IHRha2VzIHRoZQorYXNzZW1ibGVyIHRvIHBlcmZvcm0gaXRzIHRhc2tzLCBhdCB0aGUgZXhwZW5zZSBvZiBpbmNyZWFzaW5nIHRoZSBhc3NlbWJsZXIncworbWVtb3J5IHJlcXVpcmVtZW50cy4gIFNpbWlsYXJseSByZWR1Y2luZyB0aGlzIHZhbHVlIGNhbiByZWR1Y2UgdGhlIG1lbW9yeQorcmVxdWlyZW1lbnRzIGF0IHRoZSBleHBlbnNlIG9mIHNwZWVkLgorLklQICJcZkJcLVwtcmVkdWNlXC1tZW1vcnlcLW92ZXJoZWFkc1xmUiIgNAorLklYIEl0ZW0gIi0tcmVkdWNlLW1lbW9yeS1vdmVyaGVhZHMiCitUaGlzIG9wdGlvbiByZWR1Y2VzIFxzLTFHQVNcczAncyBtZW1vcnkgcmVxdWlyZW1lbnRzLCBhdCB0aGUgZXhwZW5zZSBvZiBtYWtpbmcgdGhlCithc3NlbWJseSBwcm9jZXNzZXMgc2xvd2VyLiAgQ3VycmVudGx5IHRoaXMgc3dpdGNoIGlzIGEgc3lub255bSBmb3IKK1wmXGZCXC1cLWhhc2hcLXNpemU9NDA1MVxmUiwgYnV0IGluIHRoZSBmdXR1cmUgaXQgbWF5IGhhdmUgb3RoZXIgZWZmZWN0cyBhcyB3ZWxsLgorLklQICJcZkJcLVwtc3RhdGlzdGljc1xmUiIgNAorLklYIEl0ZW0gIi0tc3RhdGlzdGljcyIKK1ByaW50IHRoZSBtYXhpbXVtIHNwYWNlIChpbiBieXRlcykgYW5kIHRvdGFsIHRpbWUgKGluIHNlY29uZHMpIHVzZWQgYnkKK2Fzc2VtYmx5LgorLklQICJcZkJcLVwtc3RyaXBcLWxvY2FsXC1hYnNvbHV0ZVxmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtbG9jYWwtYWJzb2x1dGUiCitSZW1vdmUgbG9jYWwgYWJzb2x1dGUgc3ltYm9scyBmcm9tIHRoZSBvdXRnb2luZyBzeW1ib2wgdGFibGUuCisuSVAgIlxmQlwtdlxmUiIgNAorLklYIEl0ZW0gIi12IgorLlBEIDAKKy5JUCAiXGZCXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLXZlcnNpb24iCisuUEQKK1ByaW50IHRoZSBcZkJhc1xmUiB2ZXJzaW9uLgorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKK1ByaW50IHRoZSBcZkJhc1xmUiB2ZXJzaW9uIGFuZCBleGl0LgorLklQICJcZkJcLVdcZlIiIDQKKy5JWCBJdGVtICItVyIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtd2FyblxmUiIgNAorLklYIEl0ZW0gIi0tbm8td2FybiIKKy5QRAorU3VwcHJlc3Mgd2FybmluZyBtZXNzYWdlcy4KKy5JUCAiXGZCXC1cLWZhdGFsXC13YXJuaW5nc1xmUiIgNAorLklYIEl0ZW0gIi0tZmF0YWwtd2FybmluZ3MiCitUcmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMuCisuSVAgIlxmQlwtXC13YXJuXGZSIiA0CisuSVggSXRlbSAiLS13YXJuIgorRG9uJ3Qgc3VwcHJlc3Mgd2FybmluZyBtZXNzYWdlcyBvciB0cmVhdCB0aGVtIGFzIGVycm9ycy4KKy5JUCAiXGZCXC13XGZSIiA0CisuSVggSXRlbSAiLXciCitJZ25vcmVkLgorLklQICJcZkJcLXhcZlIiIDQKKy5JWCBJdGVtICIteCIKK0lnbm9yZWQuCisuSVAgIlxmQlwtWlxmUiIgNAorLklYIEl0ZW0gIi1aIgorR2VuZXJhdGUgYW4gb2JqZWN0IGZpbGUgZXZlbiBhZnRlciBlcnJvcnMuCisuSVAgIlxmQlwtXC0gfFxmUiBcZklmaWxlc1xmUiBcZkIuLi5cZlIiIDQKKy5JWCBJdGVtICItLSB8IGZpbGVzIC4uLiIKK1N0YW5kYXJkIGlucHV0LCBvciBzb3VyY2UgZmlsZXMgdG8gYXNzZW1ibGUuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgdGhlCis2NFwtYml0IG1vZGUgb2YgdGhlIFxzLTFBUk1cczAgQXJjaGl0ZWN0dXJlIChBQXJjaDY0KS4KKy5JUCAiXGZCXC1FQlxmUiIgNAorLklYIEl0ZW0gIi1FQiIKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBhc3NlbWJsZXIgc2hvdWxkCitiZSBtYXJrZWQgYXMgYmVpbmcgZW5jb2RlZCBmb3IgYSBiaWctZW5kaWFuIHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1FTFxmUiIgNAorLklYIEl0ZW0gIi1FTCIKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZSBhc3NlbWJsZXIgc2hvdWxkCitiZSBtYXJrZWQgYXMgYmVpbmcgZW5jb2RlZCBmb3IgYSBsaXR0bGUtZW5kaWFuIHByb2Nlc3Nvci4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvciBhbiBBbHBoYQorcHJvY2Vzc29yLgorLklQICJcZkJcLW1cZlJcZkljcHVcZlIiIDQKKy5JWCBJdGVtICItbWNwdSIKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgdGFyZ2V0IHByb2Nlc3Nvci4gIElmIGFuIGF0dGVtcHQgaXMgbWFkZSB0bworYXNzZW1ibGUgYW4gaW5zdHJ1Y3Rpb24gd2hpY2ggd2lsbCBub3QgZXhlY3V0ZSBvbiB0aGUgdGFyZ2V0IHByb2Nlc3NvciwKK3RoZSBhc3NlbWJsZXIgbWF5IGVpdGhlciBleHBhbmQgdGhlIGluc3RydWN0aW9uIGFzIGEgbWFjcm8gb3IgaXNzdWUgYW4KK2Vycm9yIG1lc3NhZ2UuICBUaGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBcZihDV1wqKENgLmFyY2hcKihDJ1xmUiBkaXJlY3RpdmUuCisuU3AKK1RoZSBmb2xsb3dpbmcgcHJvY2Vzc29yIG5hbWVzIGFyZSByZWNvZ25pemVkOiAKK1wmXGYoQ1cyMTA2NFxmUiwKK1wmXGYoQ1dcKihDYDIxMDY0YVwqKEMnXGZSLAorXCZcZihDVzIxMDY2XGZSLAorXCZcZihDVzIxMDY4XGZSLAorXCZcZihDVzIxMTY0XGZSLAorXCZcZihDV1wqKENgMjExNjRhXCooQydcZlIsCitcJlxmKENXXCooQ2AyMTE2NHBjXCooQydcZlIsCitcJlxmKENXMjEyNjRcZlIsCitcJlxmKENXXCooQ2AyMTI2NGFcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYDIxMjY0YlwqKEMnXGZSLAorXCZcZihDV1wqKENgZXY0XCooQydcZlIsCitcJlxmKENXXCooQ2BldjVcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGxjYTQ1XCooQydcZlIsCitcJlxmKENXXCooQ2BldjVcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGV2NTZcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHBjYTU2XCooQydcZlIsCitcJlxmKENXXCooQ2BldjZcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGV2NjdcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGV2NjhcKihDJ1xmUi4KK1RoZSBzcGVjaWFsIG5hbWUgXGYoQ1dcKihDYGFsbFwqKEMnXGZSIG1heSBiZSB1c2VkIHRvIGFsbG93IHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0CitpbnN0cnVjdGlvbnMgdmFsaWQgZm9yIGFueSBBbHBoYSBwcm9jZXNzb3IuCisuU3AKK0luIG9yZGVyIHRvIHN1cHBvcnQgZXhpc3RpbmcgcHJhY3RpY2UgaW4gXHMtMU9TRi8xXHMwIHdpdGggcmVzcGVjdCB0byBcZihDV1wqKENgLmFyY2hcKihDJ1xmUiwKK2FuZCBleGlzdGluZyBwcmFjdGljZSB3aXRoaW4gXGZCXHMtMU1JTE9cczBcZlIgKHRoZSBMaW51eCBccy0xQVJDXHMwIGJvb3Rsb2FkZXIpLCB0aGUKK251bWJlcmVkIHByb2Nlc3NvciBuYW1lcyAoZS5nLiAyMTA2NCkgZW5hYmxlIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgUEFMY29kZQoraW5zdHJ1Y3Rpb25zLCB3aGlsZSB0aGUgXCooTCJlbGVjdHJvLXZsYXNpY1wqKFIiIG5hbWVzIChlLmcuIFxmKENXXCooQ2BldjRcKihDJ1xmUikgZG8gbm90LgorLklQICJcZkJcLW1kZWJ1Z1xmUiIgNAorLklYIEl0ZW0gIi1tZGVidWciCisuUEQgMAorLklQICJcZkJcLW5vXC1tZGVidWdcZlIiIDQKKy5JWCBJdGVtICItbm8tbWRlYnVnIgorLlBECitFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIFxmKENXXCooQ2AubWRlYnVnXCooQydcZlIgZW5jYXBzdWxhdGlvbiBmb3IKK3N0YWJzIGRpcmVjdGl2ZXMgYW5kIHByb2NlZHVyZSBkZXNjcmlwdG9ycy4gIFRoZSBkZWZhdWx0IGlzIHRvIGF1dG9tYXRpY2FsbHkKK2VuYWJsZSBcZihDV1wqKENgLm1kZWJ1Z1wqKEMnXGZSIHdoZW4gdGhlIGZpcnN0IHN0YWJzIGRpcmVjdGl2ZSBpcyBzZWVuLgorLklQICJcZkJcLXJlbGF4XGZSIiA0CisuSVggSXRlbSAiLXJlbGF4IgorVGhpcyBvcHRpb24gZm9yY2VzIGFsbCByZWxvY2F0aW9ucyB0byBiZSBwdXQgaW50byB0aGUgb2JqZWN0IGZpbGUsIGluc3RlYWQKK29mIHNhdmluZyBzcGFjZSBhbmQgcmVzb2x2aW5nIHNvbWUgcmVsb2NhdGlvbnMgYXQgYXNzZW1ibHkgdGltZS4gIE5vdGUgdGhhdAordGhpcyBvcHRpb24gZG9lcyBub3QgcHJvcGFnYXRlIGFsbCBzeW1ib2wgYXJpdGhtZXRpYyBpbnRvIHRoZSBvYmplY3QgZmlsZSwKK2JlY2F1c2Ugbm90IGFsbCBzeW1ib2wgYXJpdGhtZXRpYyBjYW4gYmUgcmVwcmVzZW50ZWQuICBIb3dldmVyLCB0aGUgb3B0aW9uCitjYW4gc3RpbGwgYmUgdXNlZnVsIGluIHNwZWNpZmljIGFwcGxpY2F0aW9ucy4KKy5JUCAiXGZCXC1yZXBsYWNlXGZSIiA0CisuSVggSXRlbSAiLXJlcGxhY2UiCisuUEQgMAorLklQICJcZkJcLW5vcmVwbGFjZVxmUiIgNAorLklYIEl0ZW0gIi1ub3JlcGxhY2UiCisuUEQKK0VuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIG9wdGltaXphdGlvbiBvZiBwcm9jZWR1cmUgY2FsbHMsIGJvdGggYXQgYXNzZW1ibGFnZQorYW5kIGF0IGxpbmsgdGltZS4gIFRoZXNlIG9wdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciBccy0xVk1TXHMwIHRhcmdldHMgYW5kCitcJlxmKENXXCooQ2BcLXJlcGxhY2VcKihDJ1xmUiBpcyB0aGUgZGVmYXVsdC4gIFNlZSBzZWN0aW9uIDEuNC4xIG9mIHRoZSBPcGVuVk1TIExpbmtlcgorVXRpbGl0eSBNYW51YWwuCisuSVAgIlxmQlwtZ1xmUiIgNAorLklYIEl0ZW0gIi1nIgorVGhpcyBvcHRpb24gaXMgdXNlZCB3aGVuIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgZGVidWcgaW5mb3JtYXRpb24uICBXaGVuCitcJlxmQmdjY1xmUiBpcyB1c2luZyBcZkJtaXBzLXRmaWxlXGZSIHRvIGdlbmVyYXRlIGRlYnVnCitpbmZvcm1hdGlvbiBmb3IgXHMtMUVDT0ZGXHMwLCBsb2NhbCBsYWJlbHMgbXVzdCBiZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgb2JqZWN0CitmaWxlLiAgT3RoZXJ3aXNlIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisuSVAgIlxmQlwtR1xmUlxmSXNpemVcZlIiIDQKKy5JWCBJdGVtICItR3NpemUiCitBIGxvY2FsIGNvbW1vbiBzeW1ib2wgbGFyZ2VyIHRoYW4gXGZJc2l6ZVxmUiBpcyBwbGFjZWQgaW4gXGYoQ1dcKihDYC5ic3NcKihDJ1xmUiwKK3doaWxlIHNtYWxsZXIgc3ltYm9scyBhcmUgcGxhY2VkIGluIFxmKENXXCooQ2Auc2Jzc1wqKEMnXGZSLgorLklQICJcZkJcLUZcZlIiIDQKKy5JWCBJdGVtICItRiIKKy5QRCAwCisuSVAgIlxmQlwtMzJhZGRyXGZSIiA0CisuSVggSXRlbSAiLTMyYWRkciIKKy5QRAorVGhlc2Ugb3B0aW9ucyBhcmUgaWdub3JlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvcgorYW4gXHMtMUFSQ1xzMCBwcm9jZXNzb3IuCisuSVAgIlxmQlwtbWFyY1s1fDZ8N3w4XVxmUiIgNAorLklYIEl0ZW0gIi1tYXJjWzV8Nnw3fDhdIgorVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgY29yZSBwcm9jZXNzb3IgdmFyaWFudC4KKy5JUCAiXGZCXC1FQiB8IFwtRUxcZlIiIDQKKy5JWCBJdGVtICItRUIgfCAtRUwiCitTZWxlY3QgZWl0aGVyIGJpZy1lbmRpYW4gKFwtRUIpIG9yIGxpdHRsZS1lbmRpYW4gKFwtRUwpIG91dHB1dC4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvciB0aGUgXHMtMUFSTVxzMAorcHJvY2Vzc29yIGZhbWlseS4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSXByb2Nlc3NvclxmUlxmQlsrXGZSXGZJZXh0ZW5zaW9uXGZSXGZCLi4uXVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PXByb2Nlc3NvclsrZXh0ZW5zaW9uLi4uXSIKK1NwZWNpZnkgd2hpY2ggXHMtMUFSTVxzMCBwcm9jZXNzb3IgdmFyaWFudCBpcyB0aGUgdGFyZ2V0LgorLklQICJcZkJcLW1hcmNoPVxmUlxmSWFyY2hpdGVjdHVyZVxmUlxmQlsrXGZSXGZJZXh0ZW5zaW9uXGZSXGZCLi4uXVxmUiIgNAorLklYIEl0ZW0gIi1tYXJjaD1hcmNoaXRlY3R1cmVbK2V4dGVuc2lvbi4uLl0iCitTcGVjaWZ5IHdoaWNoIFxzLTFBUk1cczAgYXJjaGl0ZWN0dXJlIHZhcmlhbnQgaXMgdXNlZCBieSB0aGUgdGFyZ2V0LgorLklQICJcZkJcLW1mcHU9XGZSXGZJZmxvYXRpbmctcG9pbnQtZm9ybWF0XGZSIiA0CisuSVggSXRlbSAiLW1mcHU9ZmxvYXRpbmctcG9pbnQtZm9ybWF0IgorU2VsZWN0IHdoaWNoIEZsb2F0aW5nIFBvaW50IGFyY2hpdGVjdHVyZSBpcyB0aGUgdGFyZ2V0LgorLklQICJcZkJcLW1mbG9hdFwtYWJpPVxmUlxmSWFiaVxmUiIgNAorLklYIEl0ZW0gIi1tZmxvYXQtYWJpPWFiaSIKK1NlbGVjdCB3aGljaCBmbG9hdGluZyBwb2ludCBccy0xQUJJXHMwIGlzIGluIHVzZS4KKy5JUCAiXGZCXC1tdGh1bWJcZlIiIDQKKy5JWCBJdGVtICItbXRodW1iIgorRW5hYmxlIFRodW1iIG9ubHkgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcuCisuSVAgIlxmQlwtbWFwY3NcLTMyIHwgXC1tYXBjc1wtMjYgfCBcLW1hcGNzXC1mbG9hdCB8IFwtbWFwY3NcLXJlZW50cmFudFxmUiIgNAorLklYIEl0ZW0gIi1tYXBjcy0zMiB8IC1tYXBjcy0yNiB8IC1tYXBjcy1mbG9hdCB8IC1tYXBjcy1yZWVudHJhbnQiCitTZWxlY3Qgd2hpY2ggcHJvY2VkdXJlIGNhbGxpbmcgY29udmVudGlvbiBpcyBpbiB1c2UuCisuSVAgIlxmQlwtRUIgfCBcLUVMXGZSIiA0CisuSVggSXRlbSAiLUVCIHwgLUVMIgorU2VsZWN0IGVpdGhlciBiaWctZW5kaWFuIChcLUVCKSBvciBsaXR0bGUtZW5kaWFuIChcLUVMKSBvdXRwdXQuCisuSVAgIlxmQlwtbXRodW1iXC1pbnRlcndvcmtcZlIiIDQKKy5JWCBJdGVtICItbXRodW1iLWludGVyd29yayIKK1NwZWNpZnkgdGhhdCB0aGUgY29kZSBoYXMgYmVlbiBnZW5lcmF0ZWQgd2l0aCBpbnRlcndvcmtpbmcgYmV0d2VlbiBUaHVtYiBhbmQKK1wmXHMtMUFSTVxzMCBjb2RlIGluIG1pbmQuCisuSVAgIlxmQlwta1xmUiIgNAorLklYIEl0ZW0gIi1rIgorU3BlY2lmeSB0aGF0IFxzLTFQSUNcczAgY29kZSBoYXMgYmVlbiBnZW5lcmF0ZWQuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IKK3RoZSBCbGFja2ZpbiBwcm9jZXNzb3IgZmFtaWx5LgorLklQICJcZkJcLW1jcHU9XGZSXGZJcHJvY2Vzc29yXGZSW1xmQlwtXGZSXGZJc2lyZXZpc2lvblxmUl0iIDQKKy5JWCBJdGVtICItbWNwdT1wcm9jZXNzb3JbLXNpcmV2aXNpb25dIgorVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiAgVGhlIG9wdGlvbmFsIFxmSXNpcmV2aXNpb25cZlIKK2lzIG5vdCB1c2VkIGluIGFzc2VtYmxlci4gIEl0J3MgaGVyZSBzdWNoIHRoYXQgXHMtMUdDQ1xzMCBjYW4gZWFzaWx5IHBhc3MgZG93biBpdHMKK1wmXGYoQ1dcKihDYFwtbWNwdT1cKihDJ1xmUiBvcHRpb24uICBUaGUgYXNzZW1ibGVyIHdpbGwgaXNzdWUgYW4KK2Vycm9yIG1lc3NhZ2UgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFzc2VtYmxlIGFuIGluc3RydWN0aW9uIHdoaWNoCit3aWxsIG5vdCBleGVjdXRlIG9uIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiAgVGhlIGZvbGxvd2luZyBwcm9jZXNzb3IgbmFtZXMgYXJlCityZWNvZ25pemVkOiAKK1wmXGYoQ1dcKihDYGJmNTA0XCooQydcZlIsCitcJlxmKENXXCooQ2BiZjUwNlwqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1MTJcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJmNTE0XCooQydcZlIsCitcJlxmKENXXCooQ2BiZjUxNlwqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1MThcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJmNTIyXCooQydcZlIsCitcJlxmKENXXCooQ2BiZjUyM1wqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1MjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJmNTI1XCooQydcZlIsCitcJlxmKENXXCooQ2BiZjUyNlwqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1MjdcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJmNTMxXCooQydcZlIsCitcJlxmKENXXCooQ2BiZjUzMlwqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1MzNcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJmNTM0XCooQydcZlIsCitcJlxmKENXXCooQ2BiZjUzNVwqKEMnXGZSIChub3QgaW1wbGVtZW50ZWQgeWV0KSwKK1wmXGYoQ1dcKihDYGJmNTM2XCooQydcZlIsCitcJlxmKENXXCooQ2BiZjUzN1wqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1MzhcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJmNTM5XCooQydcZlIsCitcJlxmKENXXCooQ2BiZjU0MlwqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1NDJtXCooQydcZlIsCitcJlxmKENXXCooQ2BiZjU0NFwqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1NDRtXCooQydcZlIsCitcJlxmKENXXCooQ2BiZjU0N1wqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1NDdtXCooQydcZlIsCitcJlxmKENXXCooQ2BiZjU0OFwqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1NDhtXCooQydcZlIsCitcJlxmKENXXCooQ2BiZjU0OVwqKEMnXGZSLAorXCZcZihDV1wqKENgYmY1NDltXCooQydcZlIsCitcJlxmKENXXCooQ2BiZjU2MVwqKEMnXGZSLAorYW5kCitcJlxmKENXXCooQ2BiZjU5MlwqKEMnXGZSLgorLklQICJcZkJcLW1mZHBpY1xmUiIgNAorLklYIEl0ZW0gIi1tZmRwaWMiCitBc3NlbWJsZSBmb3IgdGhlIFxzLTFGRFBJQ1xzMCBccy0xQUJJXHMwLgorLklQICJcZkJcLW1ub1wtZmRwaWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZkcGljIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9waWNcZlIiIDQKKy5JWCBJdGVtICItbW5vcGljIgorLlBECitEaXNhYmxlIFwtbWZkcGljLgorLlBQCitTZWUgdGhlIGluZm8gcGFnZXMgZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIENSSVMtc3BlY2lmaWMgb3B0aW9ucy4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvcgorYSBEMTBWIHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1PXGZSIiA0CisuSVggSXRlbSAiLU8iCitPcHRpbWl6ZSBvdXRwdXQgYnkgcGFyYWxsZWxpemluZyBpbnN0cnVjdGlvbnMuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgYSBEMzBWCitwcm9jZXNzb3IuCisuSVAgIlxmQlwtT1xmUiIgNAorLklYIEl0ZW0gIi1PIgorT3B0aW1pemUgb3V0cHV0IGJ5IHBhcmFsbGVsaXppbmcgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW5cZlIiIDQKKy5JWCBJdGVtICItbiIKK1dhcm4gd2hlbiBub3BzIGFyZSBnZW5lcmF0ZWQuCisuSVAgIlxmQlwtTlxmUiIgNAorLklYIEl0ZW0gIi1OIgorV2FybiB3aGVuIGEgbm9wIGFmdGVyIGEgMzJcLWJpdCBtdWx0aXBseSBpbnN0cnVjdGlvbiBpcyBnZW5lcmF0ZWQuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IKK2FuIEVwaXBoYW55IHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1tZXBpcGhhbnlcZlIiIDQKKy5JWCBJdGVtICItbWVwaXBoYW55IgorU3BlY2lmaWVzIHRoYXQgdGhlIGJvdGggMzIgYW5kIDE2IGJpdCBpbnN0cnVjdGlvbnMgYXJlIGFsbG93ZWQuICBUaGlzIGlzIHRoZQorZGVmYXVsdCBiZWhhdmlvci4KKy5JUCAiXGZCXC1tZXBpcGhhbnkxNlxmUiIgNAorLklYIEl0ZW0gIi1tZXBpcGhhbnkxNiIKK1Jlc3RyaWN0cyB0aGUgcGVybWl0dGVkIGluc3RydWN0aW9ucyB0byBqdXN0IHRoZSAxNiBiaXQgc2V0LgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yCithbiBpMzg2IHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1cLTMyIHwgXC1cLXgzMiB8IFwtXC02NFxmUiIgNAorLklYIEl0ZW0gIi0tMzIgfCAtLXgzMiB8IC0tNjQiCitTZWxlY3QgdGhlIHdvcmQgc2l6ZSwgZWl0aGVyIDMyIGJpdHMgb3IgNjQgYml0cy4gIFxmQlwtXC0zMlxmUgoraW1wbGllcyBJbnRlbCBpMzg2IGFyY2hpdGVjdHVyZSwgd2hpbGUgXGZCXC1cLXgzMlxmUiBhbmQgXGZCXC1cLTY0XGZSCitpbXBseSBccy0xQU1EXHMwIHg4NlwtNjQgYXJjaGl0ZWN0dXJlIHdpdGggMzJcLWJpdCBvciA2NFwtYml0IHdvcmQtc2l6ZQorcmVzcGVjdGl2ZWx5LgorLlNwCitUaGVzZSBvcHRpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIHRoZSBccy0xRUxGXHMwIG9iamVjdCBmaWxlIGZvcm1hdCwgYW5kCityZXF1aXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBccy0xQkZEXHMwIHN1cHBvcnQgaGFzIGJlZW4gaW5jbHVkZWQgKG9uIGEgMzJcLWJpdAorcGxhdGZvcm0geW91IGhhdmUgdG8gYWRkIFwtXC1lbmFibGVcLTY0XC1iaXRcLWJmZCB0byBjb25maWd1cmUgZW5hYmxlIDY0XC1iaXQKK3VzYWdlIGFuZCB1c2UgeDg2XC02NCBhcyB0YXJnZXQgcGxhdGZvcm0pLgorLklQICJcZkJcLW5cZlIiIDQKKy5JWCBJdGVtICItbiIKK0J5IGRlZmF1bHQsIHg4NiBccy0xR0FTXHMwIHJlcGxhY2VzIG11bHRpcGxlIG5vcCBpbnN0cnVjdGlvbnMgdXNlZCBmb3IKK2FsaWdubWVudCB3aXRoaW4gY29kZSBzZWN0aW9ucyB3aXRoIG11bHRpLWJ5dGUgbm9wIGluc3RydWN0aW9ucyBzdWNoCithcyBsZWFsIDAoJWVzaSwxKSwlZXNpLiAgVGhpcyBzd2l0Y2ggZGlzYWJsZXMgdGhlIG9wdGltaXphdGlvbi4KKy5JUCAiXGZCXC1cLWRpdmlkZVxmUiIgNAorLklYIEl0ZW0gIi0tZGl2aWRlIgorT24gU1ZSNFwtZGVyaXZlZCBwbGF0Zm9ybXMsIHRoZSBjaGFyYWN0ZXIgXGZCL1xmUiBpcyB0cmVhdGVkIGFzIGEgY29tbWVudAorY2hhcmFjdGVyLCB3aGljaCBtZWFucyB0aGF0IGl0IGNhbm5vdCBiZSB1c2VkIGluIGV4cHJlc3Npb25zLiAgVGhlCitcJlxmQlwtXC1kaXZpZGVcZlIgb3B0aW9uIHR1cm5zIFxmQi9cZlIgaW50byBhIG5vcm1hbCBjaGFyYWN0ZXIuICBUaGlzIGRvZXMKK25vdCBkaXNhYmxlIFxmQi9cZlIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgc3RhcnRpbmcgYSBjb21tZW50LCBvcgorYWZmZWN0IHVzaW5nIFxmQiNcZlIgZm9yIHN0YXJ0aW5nIGEgY29tbWVudC4KKy5JUCAiXGZCXC1tYXJjaD1cZlJcZklccy0xQ1BVXHMwXGZSXGZCWytcZlJcZklccy0xRVhURU5TSU9OXHMwXGZSXGZCLi4uXVxmUiIgNAorLklYIEl0ZW0gIi1tYXJjaD1DUFVbK0VYVEVOU0lPTi4uLl0iCitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIHRhcmdldCBwcm9jZXNzb3IuICBUaGUgYXNzZW1ibGVyIHdpbGwKK2lzc3VlIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFzc2VtYmxlIGFuIGluc3RydWN0aW9uCit3aGljaCB3aWxsIG5vdCBleGVjdXRlIG9uIHRoZSB0YXJnZXQgcHJvY2Vzc29yLiAgVGhlIGZvbGxvd2luZworcHJvY2Vzc29yIG5hbWVzIGFyZSByZWNvZ25pemVkOiAKK1wmXGYoQ1dcKihDYGk4MDg2XCooQydcZlIsCitcJlxmKENXXCooQ2BpMTg2XCooQydcZlIsCitcJlxmKENXXCooQ2BpMjg2XCooQydcZlIsCitcJlxmKENXXCooQ2BpMzg2XCooQydcZlIsCitcJlxmKENXXCooQ2BpNDg2XCooQydcZlIsCitcJlxmKENXXCooQ2BpNTg2XCooQydcZlIsCitcJlxmKENXXCooQ2BpNjg2XCooQydcZlIsCitcJlxmKENXXCooQ2BwZW50aXVtXCooQydcZlIsCitcJlxmKENXXCooQ2BwZW50aXVtcHJvXCooQydcZlIsCitcJlxmKENXXCooQ2BwZW50aXVtaWlcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHBlbnRpdW1paWlcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHBlbnRpdW00XCooQydcZlIsCitcJlxmKENXXCooQ2BwcmVzY290dFwqKEMnXGZSLAorXCZcZihDV1wqKENgbm9jb25hXCooQydcZlIsCitcJlxmKENXXCooQ2Bjb3JlXCooQydcZlIsCitcJlxmKENXXCooQ2Bjb3JlMlwqKEMnXGZSLAorXCZcZihDV1wqKENgY29yZWk3XCooQydcZlIsCitcJlxmKENXXCooQ2BsMW9tXCooQydcZlIsCitcJlxmKENXXCooQ2BrMW9tXCooQydcZlIsCitcJlxmKENXXCooQ2BrNlwqKEMnXGZSLAorXCZcZihDV1wqKENgazZfMlwqKEMnXGZSLAorXCZcZihDV1wqKENgYXRobG9uXCooQydcZlIsCitcJlxmKENXXCooQ2BvcHRlcm9uXCooQydcZlIsCitcJlxmKENXXCooQ2BrOFwqKEMnXGZSLAorXCZcZihDV1wqKENgYW1kZmFtMTBcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJkdmVyMVwqKEMnXGZSLAorXCZcZihDV1wqKENgYmR2ZXIyXCooQydcZlIsCitcJlxmKENXXCooQ2BiZHZlcjNcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJ0dmVyMVwqKEMnXGZSLAorXCZcZihDV1wqKENgYnR2ZXIyXCooQydcZlIsCitcJlxmKENXXCooQ2BnZW5lcmljMzJcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYGdlbmVyaWM2NFwqKEMnXGZSLgorLlNwCitJbiBhZGRpdGlvbiB0byB0aGUgYmFzaWMgaW5zdHJ1Y3Rpb24gc2V0LCB0aGUgYXNzZW1ibGVyIGNhbiBiZSB0b2xkIHRvIAorYWNjZXB0IHZhcmlvdXMgZXh0ZW5zaW9uIG1uZW1vbmljcy4gIEZvciBleGFtcGxlLAorXCZcZihDV1wqKENgXC1tYXJjaD1pNjg2K3NzZTQrdm14XCooQydcZlIgZXh0ZW5kcyBcZklpNjg2XGZSIHdpdGggXGZJc3NlNFxmUiBhbmQKK1wmXGZJdm14XGZSLiAgVGhlIGZvbGxvd2luZyBleHRlbnNpb25zIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOgorXCZcZihDVzgwODdcZlIsCitcJlxmKENXMjg3XGZSLAorXCZcZihDVzM4N1xmUiwKK1wmXGYoQ1dcKihDYG5vODdcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYG1teFwqKEMnXGZSLAorXCZcZihDV1wqKENgbm9tbXhcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHNzZVwqKEMnXGZSLAorXCZcZihDV1wqKENgc3NlMlwqKEMnXGZSLAorXCZcZihDV1wqKENgc3NlM1wqKEMnXGZSLAorXCZcZihDV1wqKENgc3NzZTNcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHNzZTQuMVwqKEMnXGZSLAorXCZcZihDV1wqKENgc3NlNC4yXCooQydcZlIsCitcJlxmKENXXCooQ2Bzc2U0XCooQydcZlIsCitcJlxmKENXXCooQ2Bub3NzZVwqKEMnXGZSLAorXCZcZihDV1wqKENgYXZ4XCooQydcZlIsCitcJlxmKENXXCooQ2BhdngyXCooQydcZlIsCitcJlxmKENXXCooQ2BhZHhcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHJkc2VlZFwqKEMnXGZSLAorXCZcZihDV1wqKENgcHJmY2h3XCooQydcZlIsCitcJlxmKENXXCooQ2Bub2F2eFwqKEMnXGZSLAorXCZcZihDV1wqKENgdm14XCooQydcZlIsCitcJlxmKENXXCooQ2B2bWZ1bmNcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHNteFwqKEMnXGZSLAorXCZcZihDV1wqKENgeHNhdmVcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHhzYXZlb3B0XCooQydcZlIsCitcJlxmKENXXCooQ2BhZXNcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHBjbG11bFwqKEMnXGZSLAorXCZcZihDV1wqKENgZnNnc2Jhc2VcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHJkcm5kXCooQydcZlIsCitcJlxmKENXXCooQ2BmMTZjXCooQydcZlIsCitcJlxmKENXXCooQ2BibWkyXCooQydcZlIsCitcJlxmKENXXCooQ2BmbWFcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYG1vdmJlXCooQydcZlIsCitcJlxmKENXXCooQ2BlcHRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGx6Y250XCooQydcZlIsCitcJlxmKENXXCooQ2BobGVcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHJ0bVwqKEMnXGZSLAorXCZcZihDV1wqKENgaW52cGNpZFwqKEMnXGZSLAorXCZcZihDV1wqKENgY2xmbHVzaFwqKEMnXGZSLAorXCZcZihDV1wqKENgbHdwXCooQydcZlIsCitcJlxmKENXXCooQ2BmbWE0XCooQydcZlIsCitcJlxmKENXXCooQ2B4b3BcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHN5c2NhbGxcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHJkdHNjcFwqKEMnXGZSLAorXCZcZihDV1wqKENgM2Rub3dcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYDNkbm93YVwqKEMnXGZSLAorXCZcZihDV1wqKENgc3NlNGFcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHNzZTVcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHN2bWVcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGFibVwqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgcGFkbG9ja1wqKEMnXGZSLgorTm90ZSB0aGF0IHJhdGhlciB0aGFuIGV4dGVuZGluZyBhIGJhc2ljIGluc3RydWN0aW9uIHNldCwgdGhlIGV4dGVuc2lvbgorbW5lbW9uaWNzIHN0YXJ0aW5nIHdpdGggXGYoQ1dcKihDYG5vXCooQydcZlIgcmV2b2tlIHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9uYWxpdHkuCisuU3AKK1doZW4gdGhlIFxmKENXXCooQ2AuYXJjaFwqKEMnXGZSIGRpcmVjdGl2ZSBpcyB1c2VkIHdpdGggXGZCXC1tYXJjaFxmUiwgdGhlCitcJlxmKENXXCooQ2AuYXJjaFwqKEMnXGZSIGRpcmVjdGl2ZSB3aWxsIHRha2UgcHJlY2VkZW50LgorLklQICJcZkJcLW10dW5lPVxmUlxmSVxzLTFDUFVcczBcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9Q1BVIgorVGhpcyBvcHRpb24gc3BlY2lmaWVzIGEgcHJvY2Vzc29yIHRvIG9wdGltaXplIGZvci4gV2hlbiB1c2VkIGluCitjb25qdW5jdGlvbiB3aXRoIHRoZSBcZkJcLW1hcmNoXGZSIG9wdGlvbiwgb25seSBpbnN0cnVjdGlvbnMKK29mIHRoZSBwcm9jZXNzb3Igc3BlY2lmaWVkIGJ5IHRoZSBcZkJcLW1hcmNoXGZSIG9wdGlvbiB3aWxsIGJlCitnZW5lcmF0ZWQuCisuU3AKK1ZhbGlkIFxmSVxzLTFDUFVcczBcZlIgdmFsdWVzIGFyZSBpZGVudGljYWwgdG8gdGhlIHByb2Nlc3NvciBsaXN0IG9mCitcJlxmQlwtbWFyY2g9XGZSXGZJXHMtMUNQVVxzMFxmUi4KKy5JUCAiXGZCXC1tc3NlMmF2eFxmUiIgNAorLklYIEl0ZW0gIi1tc3NlMmF2eCIKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBhc3NlbWJsZXIgc2hvdWxkIGVuY29kZSBccy0xU1NFXHMwIGluc3RydWN0aW9ucword2l0aCBccy0xVkVYXHMwIHByZWZpeC4KKy5JUCAiXGZCXC1tc3NlXC1jaGVjaz1cZlJcZklub25lXGZSIiA0CisuSVggSXRlbSAiLW1zc2UtY2hlY2s9bm9uZSIKKy5QRCAwCisuSVAgIlxmQlwtbXNzZVwtY2hlY2s9XGZSXGZJd2FybmluZ1xmUiIgNAorLklYIEl0ZW0gIi1tc3NlLWNoZWNrPXdhcm5pbmciCisuSVAgIlxmQlwtbXNzZVwtY2hlY2s9XGZSXGZJZXJyb3JcZlIiIDQKKy5JWCBJdGVtICItbXNzZS1jaGVjaz1lcnJvciIKKy5QRAorVGhlc2Ugb3B0aW9ucyBjb250cm9sIGlmIHRoZSBhc3NlbWJsZXIgc2hvdWxkIGNoZWNrIFxzLTFTU0VcczAgaW50cnVjdGlvbnMuCitcJlxmQlwtbXNzZVwtY2hlY2s9XGZSXGZJbm9uZVxmUiB3aWxsIG1ha2UgdGhlIGFzc2VtYmxlciBub3QgdG8gY2hlY2sgXHMtMVNTRVxzMAoraW5zdHJ1Y3Rpb25zLCAgd2hpY2ggaXMgdGhlIGRlZmF1bHQuICBcZkJcLW1zc2VcLWNoZWNrPVxmUlxmSXdhcm5pbmdcZlIKK3dpbGwgbWFrZSB0aGUgYXNzZW1ibGVyIGlzc3VlIGEgd2FybmluZyBmb3IgYW55IFxzLTFTU0VcczAgaW50cnVjdGlvbi4KK1wmXGZCXC1tc3NlXC1jaGVjaz1cZlJcZkllcnJvclxmUiB3aWxsIG1ha2UgdGhlIGFzc2VtYmxlciBpc3N1ZSBhbiBlcnJvcgorZm9yIGFueSBccy0xU1NFXHMwIGludHJ1Y3Rpb24uCisuSVAgIlxmQlwtbWF2eHNjYWxhcj1cZlJcZkkxMjhcZlIiIDQKKy5JWCBJdGVtICItbWF2eHNjYWxhcj0xMjgiCisuUEQgMAorLklQICJcZkJcLW1hdnhzY2FsYXI9XGZSXGZJMjU2XGZSIiA0CisuSVggSXRlbSAiLW1hdnhzY2FsYXI9MjU2IgorLlBECitUaGVzZSBvcHRpb25zIGNvbnRyb2wgaG93IHRoZSBhc3NlbWJsZXIgc2hvdWxkIGVuY29kZSBzY2FsYXIgXHMtMUFWWFxzMAoraW5zdHJ1Y3Rpb25zLiAgXGZCXC1tYXZ4c2NhbGFyPVxmUlxmSTEyOFxmUiB3aWxsIGVuY29kZSBzY2FsYXIKK1wmXHMtMUFWWFxzMCBpbnN0cnVjdGlvbnMgd2l0aCAxMjhiaXQgdmVjdG9yIGxlbmd0aCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCitcJlxmQlwtbWF2eHNjYWxhcj1cZlJcZkkyNTZcZlIgd2lsbCBlbmNvZGUgc2NhbGFyIFxzLTFBVlhcczAgaW5zdHJ1Y3Rpb25zCit3aXRoIDI1NmJpdCB2ZWN0b3IgbGVuZ3RoLgorLklQICJcZkJcLW1tbmVtb25pYz1cZlJcZklhdHRcZlIiIDQKKy5JWCBJdGVtICItbW1uZW1vbmljPWF0dCIKKy5QRCAwCisuSVAgIlxmQlwtbW1uZW1vbmljPVxmUlxmSWludGVsXGZSIiA0CisuSVggSXRlbSAiLW1tbmVtb25pYz1pbnRlbCIKKy5QRAorVGhpcyBvcHRpb24gc3BlY2lmaWVzIGluc3RydWN0aW9uIG1uZW1vbmljIGZvciBtYXRjaGluZyBpbnN0cnVjdGlvbnMuIAorVGhlIFxmKENXXCooQ2AuYXR0X21uZW1vbmljXCooQydcZlIgYW5kIFxmKENXXCooQ2AuaW50ZWxfbW5lbW9uaWNcKihDJ1xmUiBkaXJlY3RpdmVzIHdpbGwKK3Rha2UgcHJlY2VkZW50LgorLklQICJcZkJcLW1zeW50YXg9XGZSXGZJYXR0XGZSIiA0CisuSVggSXRlbSAiLW1zeW50YXg9YXR0IgorLlBEIDAKKy5JUCAiXGZCXC1tc3ludGF4PVxmUlxmSWludGVsXGZSIiA0CisuSVggSXRlbSAiLW1zeW50YXg9aW50ZWwiCisuUEQKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyBpbnN0cnVjdGlvbiBzeW50YXggd2hlbiBwcm9jZXNzaW5nIGluc3RydWN0aW9ucy4gCitUaGUgXGYoQ1dcKihDYC5hdHRfc3ludGF4XCooQydcZlIgYW5kIFxmKENXXCooQ2AuaW50ZWxfc3ludGF4XCooQydcZlIgZGlyZWN0aXZlcyB3aWxsCit0YWtlIHByZWNlZGVudC4KKy5JUCAiXGZCXC1tbmFrZWRcLXJlZ1xmUiIgNAorLklYIEl0ZW0gIi1tbmFrZWQtcmVnIgorVGhpcyBvcGV0aW9uIHNwZWNpZmllcyB0aGF0IHJlZ2lzdGVycyBkb24ndCByZXF1aXJlIGEgXGZCJVxmUiBwcmVmaXguCitUaGUgXGYoQ1dcKihDYC5hdHRfc3ludGF4XCooQydcZlIgYW5kIFxmKENXXCooQ2AuaW50ZWxfc3ludGF4XCooQydcZlIgZGlyZWN0aXZlcyB3aWxsIHRha2UgcHJlY2VkZW50LgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZQorSW50ZWwgODA5NjAgcHJvY2Vzc29yLgorLklQICJcZkJcLUFDQSB8IFwtQUNBX0EgfCBcLUFDQiB8IFwtQUNDIHwgXC1BS0EgfCBcLUFLQiB8IFwtQUtDIHwgXC1BTUNcZlIiIDQKKy5JWCBJdGVtICItQUNBIHwgLUFDQV9BIHwgLUFDQiB8IC1BQ0MgfCAtQUtBIHwgLUFLQiB8IC1BS0MgfCAtQU1DIgorU3BlY2lmeSB3aGljaCB2YXJpYW50IG9mIHRoZSA5NjAgYXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQuCisuSVAgIlxmQlwtYlxmUiIgNAorLklYIEl0ZW0gIi1iIgorQWRkIGNvZGUgdG8gY29sbGVjdCBzdGF0aXN0aWNzIGFib3V0IGJyYW5jaGVzIHRha2VuLgorLklQICJcZkJcLW5vXC1yZWxheFxmUiIgNAorLklYIEl0ZW0gIi1uby1yZWxheCIKK0RvIG5vdCBhbHRlciBjb21wYXJlLWFuZC1icmFuY2ggaW5zdHJ1Y3Rpb25zIGZvciBsb25nIGRpc3BsYWNlbWVudHM7CitlcnJvciBpZiBuZWNlc3NhcnkuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgdGhlCitVYmljb20gXHMtMUlQMktcczAgc2VyaWVzLgorLklQICJcZkJcLW1pcDIwMjJleHRcZlIiIDQKKy5JWCBJdGVtICItbWlwMjAyMmV4dCIKK1NwZWNpZmllcyB0aGF0IHRoZSBleHRlbmRlZCBccy0xSVAyMDIyXHMwIGluc3RydWN0aW9ucyBhcmUgYWxsb3dlZC4KKy5JUCAiXGZCXC1taXAyMDIyXGZSIiA0CisuSVggSXRlbSAiLW1pcDIwMjIiCitSZXN0b3JlcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIsIHdoaWNoIHJlc3RyaWN0cyB0aGUgcGVybWl0dGVkIGluc3RydWN0aW9ucyB0bworanVzdCB0aGUgYmFzaWMgXHMtMUlQMjAyMlxzMCBvbmVzLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZQorUmVuZXNhcyBNMzJDIGFuZCBNMTZDIHByb2Nlc3NvcnMuCisuSVAgIlxmQlwtbTMyY1xmUiIgNAorLklYIEl0ZW0gIi1tMzJjIgorQXNzZW1ibGUgTTMyQyBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbTE2Y1xmUiIgNAorLklYIEl0ZW0gIi1tMTZjIgorQXNzZW1ibGUgTTE2QyBpbnN0cnVjdGlvbnMgKHRoZSBkZWZhdWx0KS4KKy5JUCAiXGZCXC1yZWxheFxmUiIgNAorLklYIEl0ZW0gIi1yZWxheCIKK0VuYWJsZSBzdXBwb3J0IGZvciBsaW5rLXRpbWUgcmVsYXhhdGlvbnMuCisuSVAgIlxmQlwtaFwtdGlja1wtaGV4XGZSIiA0CisuSVggSXRlbSAiLWgtdGljay1oZXgiCitTdXBwb3J0IEgnMDAgc3R5bGUgaGV4IGNvbnN0YW50cyBpbiBhZGRpdGlvbiB0byAweDAwIHN0eWxlLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZQorUmVuZXNhcyBNMzJSIChmb3JtZXJseSBNaXRzdWJpc2hpIE0zMlIpIHNlcmllcy4KKy5JUCAiXGZCXC1cLW0zMnJ4XGZSIiA0CisuSVggSXRlbSAiLS1tMzJyeCIKK1NwZWNpZnkgd2hpY2ggcHJvY2Vzc29yIGluIHRoZSBNMzJSIGZhbWlseSBpcyB0aGUgdGFyZ2V0LiAgVGhlIGRlZmF1bHQKK2lzIG5vcm1hbGx5IHRoZSBNMzJSLCBidXQgdGhpcyBvcHRpb24gY2hhbmdlcyBpdCB0byB0aGUgTTMyUlguCisuSVAgIlxmQlwtXC13YXJuXC1leHBsaWNpdFwtcGFyYWxsZWxcLWNvbmZsaWN0cyBvciBcLVwtV3BcZlIiIDQKKy5JWCBJdGVtICItLXdhcm4tZXhwbGljaXQtcGFyYWxsZWwtY29uZmxpY3RzIG9yIC0tV3AiCitQcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMgd2hlbiBxdWVzdGlvbmFibGUgcGFyYWxsZWwgY29uc3RydWN0cyBhcmUKK2VuY291bnRlcmVkLgorLklQICJcZkJcLVwtbm9cLXdhcm5cLWV4cGxpY2l0XC1wYXJhbGxlbFwtY29uZmxpY3RzIG9yIFwtXC1XbnBcZlIiIDQKKy5JWCBJdGVtICItLW5vLXdhcm4tZXhwbGljaXQtcGFyYWxsZWwtY29uZmxpY3RzIG9yIC0tV25wIgorRG8gbm90IHByb2R1Y2Ugd2FybmluZyBtZXNzYWdlcyB3aGVuIHF1ZXN0aW9uYWJsZSBwYXJhbGxlbCBjb25zdHJ1Y3RzIGFyZQorZW5jb3VudGVyZWQuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgdGhlCitNb3Rvcm9sYSA2ODAwMCBzZXJpZXMuCisuSVAgIlxmQlwtbFxmUiIgNAorLklYIEl0ZW0gIi1sIgorU2hvcnRlbiByZWZlcmVuY2VzIHRvIHVuZGVmaW5lZCBzeW1ib2xzLCB0byBvbmUgd29yZCBpbnN0ZWFkIG9mIHR3by4KKy5JUCAiXGZCXC1tNjgwMDAgfCBcLW02ODAwOCB8IFwtbTY4MDEwIHwgXC1tNjgwMjAgfCBcLW02ODAzMFxmUiIgNAorLklYIEl0ZW0gIi1tNjgwMDAgfCAtbTY4MDA4IHwgLW02ODAxMCB8IC1tNjgwMjAgfCAtbTY4MDMwIgorLlBEIDAKKy5JUCAiXGZCfCBcLW02ODA0MCB8IFwtbTY4MDYwIHwgXC1tNjgzMDIgfCBcLW02ODMzMSB8IFwtbTY4MzMyXGZSIiA0CisuSVggSXRlbSAifCAtbTY4MDQwIHwgLW02ODA2MCB8IC1tNjgzMDIgfCAtbTY4MzMxIHwgLW02ODMzMiIKKy5JUCAiXGZCfCBcLW02ODMzMyB8IFwtbTY4MzQwIHwgXC1tY3B1MzIgfCBcLW01MjAwXGZSIiA0CisuSVggSXRlbSAifCAtbTY4MzMzIHwgLW02ODM0MCB8IC1tY3B1MzIgfCAtbTUyMDAiCisuUEQKK1NwZWNpZnkgd2hhdCBwcm9jZXNzb3IgaW4gdGhlIDY4MDAwIGZhbWlseSBpcyB0aGUgdGFyZ2V0LiAgVGhlIGRlZmF1bHQKK2lzIG5vcm1hbGx5IHRoZSA2ODAyMCwgYnV0IHRoaXMgY2FuIGJlIGNoYW5nZWQgYXQgY29uZmlndXJhdGlvbiB0aW1lLgorLklQICJcZkJcLW02ODg4MSB8IFwtbTY4ODgyIHwgXC1tbm9cLTY4ODgxIHwgXC1tbm9cLTY4ODgyXGZSIiA0CisuSVggSXRlbSAiLW02ODg4MSB8IC1tNjg4ODIgfCAtbW5vLTY4ODgxIHwgLW1uby02ODg4MiIKK1RoZSB0YXJnZXQgbWFjaGluZSBkb2VzIChvciBkb2VzIG5vdCkgaGF2ZSBhIGZsb2F0aW5nLXBvaW50IGNvcHJvY2Vzc29yLgorVGhlIGRlZmF1bHQgaXMgdG8gYXNzdW1lIGEgY29wcm9jZXNzb3IgZm9yIDY4MDIwLCA2ODAzMCwgYW5kIGNwdTMyLiAgQWx0aG91Z2gKK3RoZSBiYXNpYyA2ODAwMCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSA2ODg4MSwgYSBjb21iaW5hdGlvbiBvZiB0aGUKK3R3byBjYW4gYmUgc3BlY2lmaWVkLCBzaW5jZSBpdCdzIHBvc3NpYmxlIHRvIGRvIGVtdWxhdGlvbiBvZiB0aGUKK2NvcHJvY2Vzc29yIGluc3RydWN0aW9ucyB3aXRoIHRoZSBtYWluIHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1tNjg4NTEgfCBcLW1ub1wtNjg4NTFcZlIiIDQKKy5JWCBJdGVtICItbTY4ODUxIHwgLW1uby02ODg1MSIKK1RoZSB0YXJnZXQgbWFjaGluZSBkb2VzIChvciBkb2VzIG5vdCkgaGF2ZSBhIG1lbW9yeS1tYW5hZ2VtZW50Cit1bml0IGNvcHJvY2Vzc29yLiAgVGhlIGRlZmF1bHQgaXMgdG8gYXNzdW1lIGFuIFxzLTFNTVVcczAgZm9yIDY4MDIwIGFuZCB1cC4KKy5QUAorRm9yIGRldGFpbHMgYWJvdXQgdGhlIFxzLTFQRFBcLTExXHMwIG1hY2hpbmUgZGVwZW5kZW50IGZlYXR1cmVzIG9wdGlvbnMsCitzZWUgXGZCUERQXC0xMVwtT3B0aW9uc1xmUi4KKy5JUCAiXGZCXC1tcGljIHwgXC1tbm9cLXBpY1xmUiIgNAorLklYIEl0ZW0gIi1tcGljIHwgLW1uby1waWMiCitHZW5lcmF0ZSBwb3NpdGlvbi1pbmRlcGVuZGVudCAob3IgcG9zaXRpb24tZGVwZW5kZW50KSBjb2RlLiAgVGhlCitkZWZhdWx0IGlzIFxmQlwtbXBpY1xmUi4KKy5JUCAiXGZCXC1tYWxsXGZSIiA0CisuSVggSXRlbSAiLW1hbGwiCisuUEQgMAorLklQICJcZkJcLW1hbGxcLWV4dGVuc2lvbnNcZlIiIDQKKy5JWCBJdGVtICItbWFsbC1leHRlbnNpb25zIgorLlBECitFbmFibGUgYWxsIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbm9cLWV4dGVuc2lvbnNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWV4dGVuc2lvbnMiCitEaXNhYmxlIGFsbCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4KKy5JUCAiXGZCXC1tXGZSXGZJZXh0ZW5zaW9uXGZSIFxmQnwgXC1tbm9cLVxmUlxmSWV4dGVuc2lvblxmUiIgNAorLklYIEl0ZW0gIi1tZXh0ZW5zaW9uIHwgLW1uby1leHRlbnNpb24iCitFbmFibGUgKG9yIGRpc2FibGUpIGEgcGFydGljdWxhciBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9uLgorLklQICJcZkJcLW1cZlJcZkljcHVcZlIiIDQKKy5JWCBJdGVtICItbWNwdSIKK0VuYWJsZSB0aGUgaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMgc3VwcG9ydGVkIGJ5IGEgcGFydGljdWxhciBccy0xQ1BVXHMwLCBhbmQKK2Rpc2FibGUgYWxsIG90aGVyIGV4dGVuc2lvbnMuCisuSVAgIlxmQlwtbVxmUlxmSW1hY2hpbmVcZlIiIDQKKy5JWCBJdGVtICItbW1hY2hpbmUiCitFbmFibGUgdGhlIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zIHN1cHBvcnRlZCBieSBhIHBhcnRpY3VsYXIgbWFjaGluZQorbW9kZWwsIGFuZCBkaXNhYmxlIGFsbCBvdGhlciBleHRlbnNpb25zLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yCithIHBpY29KYXZhIHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1tYlxmUiIgNAorLklYIEl0ZW0gIi1tYiIKK0dlbmVyYXRlIFwqKEwiYmlnIGVuZGlhblwqKFIiIGZvcm1hdCBvdXRwdXQuCisuSVAgIlxmQlwtbWxcZlIiIDQKKy5JWCBJdGVtICItbWwiCitHZW5lcmF0ZSBcKihMImxpdHRsZSBlbmRpYW5cKihSIiBmb3JtYXQgb3V0cHV0LgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZQorTW90b3JvbGEgNjhIQzExIG9yIDY4SEMxMiBzZXJpZXMuCisuSVAgIlxmQlwtbTY4aGMxMSB8IFwtbTY4aGMxMiB8IFwtbTY4aGNzMTIgfCBcLW1tOXMxMnggfCBcLW1tOXMxMnhnXGZSIiA0CisuSVggSXRlbSAiLW02OGhjMTEgfCAtbTY4aGMxMiB8IC1tNjhoY3MxMiB8IC1tbTlzMTJ4IHwgLW1tOXMxMnhnIgorU3BlY2lmeSB3aGF0IHByb2Nlc3NvciBpcyB0aGUgdGFyZ2V0LiAgVGhlIGRlZmF1bHQgaXMKK2RlZmluZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdoZW4gYnVpbGRpbmcgdGhlIGFzc2VtYmxlci4KKy5JUCAiXGZCXC1cLXhnYXRlXC1yYW1vZmZzZXRcZlIiIDQKKy5JWCBJdGVtICItLXhnYXRlLXJhbW9mZnNldCIKK0luc3RydWN0IHRoZSBsaW5rZXIgdG8gb2Zmc2V0IFxzLTFSQU1cczAgYWRkcmVzc2VzIGZyb20gUzEyWCBhZGRyZXNzIHNwYWNlIGludG8KK1wmXHMtMVhHQVRFXHMwIGFkZHJlc3Mgc3BhY2UuCisuSVAgIlxmQlwtbXNob3J0XGZSIiA0CisuSVggSXRlbSAiLW1zaG9ydCIKK1NwZWNpZnkgdG8gdXNlIHRoZSAxNlwtYml0IGludGVnZXIgXHMtMUFCSVxzMC4KKy5JUCAiXGZCXC1tbG9uZ1xmUiIgNAorLklYIEl0ZW0gIi1tbG9uZyIKK1NwZWNpZnkgdG8gdXNlIHRoZSAzMlwtYml0IGludGVnZXIgXHMtMUFCSVxzMC4KKy5JUCAiXGZCXC1tc2hvcnRcLWRvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tc2hvcnQtZG91YmxlIgorU3BlY2lmeSB0byB1c2UgdGhlIDMyXC1iaXQgZG91YmxlIFxzLTFBQklcczAuCisuSVAgIlxmQlwtbWxvbmdcLWRvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tbG9uZy1kb3VibGUiCitTcGVjaWZ5IHRvIHVzZSB0aGUgNjRcLWJpdCBkb3VibGUgXHMtMUFCSVxzMC4KKy5JUCAiXGZCXC1cLWZvcmNlXC1sb25nXC1icmFuY2hlc1xmUiIgNAorLklYIEl0ZW0gIi0tZm9yY2UtbG9uZy1icmFuY2hlcyIKK1JlbGF0aXZlIGJyYW5jaGVzIGFyZSB0dXJuZWQgaW50byBhYnNvbHV0ZSBvbmVzLiBUaGlzIGNvbmNlcm5zCitjb25kaXRpb25hbCBicmFuY2hlcywgdW5jb25kaXRpb25hbCBicmFuY2hlcyBhbmQgYnJhbmNoZXMgdG8gYQorc3ViIHJvdXRpbmUuCisuSVAgIlxmQlwtUyB8IFwtXC1zaG9ydFwtYnJhbmNoZXNcZlIiIDQKKy5JWCBJdGVtICItUyB8IC0tc2hvcnQtYnJhbmNoZXMiCitEbyBub3QgdHVybiByZWxhdGl2ZSBicmFuY2hlcyBpbnRvIGFic29sdXRlIG9uZXMKK3doZW4gdGhlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UuCisuSVAgIlxmQlwtXC1zdHJpY3RcLWRpcmVjdFwtbW9kZVxmUiIgNAorLklYIEl0ZW0gIi0tc3RyaWN0LWRpcmVjdC1tb2RlIgorRG8gbm90IHR1cm4gdGhlIGRpcmVjdCBhZGRyZXNzaW5nIG1vZGUgaW50byBleHRlbmRlZCBhZGRyZXNzaW5nIG1vZGUKK3doZW4gdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IHN1cHBvcnQgZGlyZWN0IGFkZHJlc3NpbmcgbW9kZS4KKy5JUCAiXGZCXC1cLXByaW50XC1pbnNuXC1zeW50YXhcZlIiIDQKKy5JWCBJdGVtICItLXByaW50LWluc24tc3ludGF4IgorUHJpbnQgdGhlIHN5bnRheCBvZiBpbnN0cnVjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgorLklQICJcZkJcLVwtcHJpbnRcLW9wY29kZXNcZlIiIDQKKy5JWCBJdGVtICItLXByaW50LW9wY29kZXMiCitQcmludCB0aGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMgd2l0aCBzeW50YXggYW5kIHRoZW4gZXhpdC4KKy5JUCAiXGZCXC1cLWdlbmVyYXRlXC1leGFtcGxlXGZSIiA0CisuSVggSXRlbSAiLS1nZW5lcmF0ZS1leGFtcGxlIgorUHJpbnQgYW4gZXhhbXBsZSBvZiBpbnN0cnVjdGlvbiBmb3IgZWFjaCBwb3NzaWJsZSBpbnN0cnVjdGlvbiBhbmQgdGhlbiBleGl0LgorVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgZm9yIHRlc3RpbmcgXGZCYXNcZlIuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gXGZCYXNcZlIgaXMgY29uZmlndXJlZAorZm9yIHRoZSBccy0xU1BBUkNcczAgYXJjaGl0ZWN0dXJlOgorLklQICJcZkJcLUF2NiB8IFwtQXY3IHwgXC1BdjggfCBcLUFzcGFyY2xldCB8IFwtQXNwYXJjbGl0ZVxmUiIgNAorLklYIEl0ZW0gIi1BdjYgfCAtQXY3IHwgLUF2OCB8IC1Bc3BhcmNsZXQgfCAtQXNwYXJjbGl0ZSIKKy5QRCAwCisuSVAgIlxmQlwtQXY4cGx1cyB8IFwtQXY4cGx1c2EgfCBcLUF2OSB8IFwtQXY5YVxmUiIgNAorLklYIEl0ZW0gIi1BdjhwbHVzIHwgLUF2OHBsdXNhIHwgLUF2OSB8IC1BdjlhIgorLlBECitFeHBsaWNpdGx5IHNlbGVjdCBhIHZhcmlhbnQgb2YgdGhlIFxzLTFTUEFSQ1xzMCBhcmNoaXRlY3R1cmUuCisuU3AKK1wmXGZCXC1BdjhwbHVzXGZSIGFuZCBcZkJcLUF2OHBsdXNhXGZSIHNlbGVjdCBhIDMyIGJpdCBlbnZpcm9ubWVudC4KK1wmXGZCXC1BdjlcZlIgYW5kIFxmQlwtQXY5YVxmUiBzZWxlY3QgYSA2NCBiaXQgZW52aXJvbm1lbnQuCisuU3AKK1wmXGZCXC1BdjhwbHVzYVxmUiBhbmQgXGZCXC1BdjlhXGZSIGVuYWJsZSB0aGUgXHMtMVNQQVJDXHMwIFY5IGluc3RydWN0aW9uIHNldCB3aXRoCitVbHRyYVNQQVJDIGV4dGVuc2lvbnMuCisuSVAgIlxmQlwteGFyY2g9djhwbHVzIHwgXC14YXJjaD12OHBsdXNhXGZSIiA0CisuSVggSXRlbSAiLXhhcmNoPXY4cGx1cyB8IC14YXJjaD12OHBsdXNhIgorRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgU29sYXJpcyB2OSBhc3NlbWJsZXIuICBUaGVzZSBvcHRpb25zIGFyZQorZXF1aXZhbGVudCB0byBcLUF2OHBsdXMgYW5kIFwtQXY4cGx1c2EsIHJlc3BlY3RpdmVseS4KKy5JUCAiXGZCXC1idW1wXGZSIiA0CisuSVggSXRlbSAiLWJ1bXAiCitXYXJuIHdoZW4gdGhlIGFzc2VtYmxlciBzd2l0Y2hlcyB0byBhbm90aGVyIGFyY2hpdGVjdHVyZS4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvciB0aGUgJ2M1NHgKK2FyY2hpdGVjdHVyZS4KKy5JUCAiXGZCXC1tZmFyXC1tb2RlXGZSIiA0CisuSVggSXRlbSAiLW1mYXItbW9kZSIKK0VuYWJsZSBleHRlbmRlZCBhZGRyZXNzaW5nIG1vZGUuICBBbGwgYWRkcmVzc2VzIGFuZCByZWxvY2F0aW9ucyB3aWxsIGFzc3VtZQorZXh0ZW5kZWQgYWRkcmVzc2luZyAodXN1YWxseSAyMyBiaXRzKS4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSVxzLTFDUFVfVkVSU0lPTlxzMFxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PUNQVV9WRVJTSU9OIgorU2V0cyB0aGUgXHMtMUNQVVxzMCB2ZXJzaW9uIGJlaW5nIGNvbXBpbGVkIGZvci4KKy5JUCAiXGZCXC1tZXJyb3JzXC10b1wtZmlsZVxmUiBcZklccy0xRklMRU5BTUVcczBcZlIiIDQKKy5JWCBJdGVtICItbWVycm9ycy10by1maWxlIEZJTEVOQU1FIgorUmVkaXJlY3QgZXJyb3Igb3V0cHV0IHRvIGEgZmlsZSwgZm9yIGJyb2tlbiBzeXN0ZW1zIHdoaWNoIGRvbid0IHN1cHBvcnQgc3VjaAorYmVoYXZpb3VyIGluIHRoZSBzaGVsbC4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgd2hlbiBhcyBpcyBjb25maWd1cmVkIGZvcgorYSBccy0xTUlQU1xzMCBwcm9jZXNzb3IuCisuSVAgIlxmQlwtR1xmUiBcZkludW1cZlIiIDQKKy5JWCBJdGVtICItRyBudW0iCitUaGlzIG9wdGlvbiBzZXRzIHRoZSBsYXJnZXN0IHNpemUgb2YgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQKK2ltcGxpY2l0bHkgd2l0aCB0aGUgXGYoQ1dcKihDYGdwXCooQydcZlIgcmVnaXN0ZXIuICBJdCBpcyBvbmx5IGFjY2VwdGVkIGZvciB0YXJnZXRzIHRoYXQKK3VzZSBccy0xRUNPRkZcczAgZm9ybWF0LCBzdWNoIGFzIGEgREVDc3RhdGlvbiBydW5uaW5nIFVsdHJpeC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDguCisuSVAgIlxmQlwtRUJcZlIiIDQKKy5JWCBJdGVtICItRUIiCitHZW5lcmF0ZSBcKihMImJpZyBlbmRpYW5cKihSIiBmb3JtYXQgb3V0cHV0LgorLklQICJcZkJcLUVMXGZSIiA0CisuSVggSXRlbSAiLUVMIgorR2VuZXJhdGUgXCooTCJsaXR0bGUgZW5kaWFuXCooUiIgZm9ybWF0IG91dHB1dC4KKy5JUCAiXGZCXC1taXBzMVxmUiIgNAorLklYIEl0ZW0gIi1taXBzMSIKKy5QRCAwCisuSVAgIlxmQlwtbWlwczJcZlIiIDQKKy5JWCBJdGVtICItbWlwczIiCisuSVAgIlxmQlwtbWlwczNcZlIiIDQKKy5JWCBJdGVtICItbWlwczMiCisuSVAgIlxmQlwtbWlwczRcZlIiIDQKKy5JWCBJdGVtICItbWlwczQiCisuSVAgIlxmQlwtbWlwczVcZlIiIDQKKy5JWCBJdGVtICItbWlwczUiCisuSVAgIlxmQlwtbWlwczMyXGZSIiA0CisuSVggSXRlbSAiLW1pcHMzMiIKKy5JUCAiXGZCXC1taXBzMzJyMlxmUiIgNAorLklYIEl0ZW0gIi1taXBzMzJyMiIKKy5JUCAiXGZCXC1taXBzNjRcZlIiIDQKKy5JWCBJdGVtICItbWlwczY0IgorLklQICJcZkJcLW1pcHM2NHIyXGZSIiA0CisuSVggSXRlbSAiLW1pcHM2NHIyIgorLlBECitHZW5lcmF0ZSBjb2RlIGZvciBhIHBhcnRpY3VsYXIgXHMtMU1JUFNcczAgSW5zdHJ1Y3Rpb24gU2V0IEFyY2hpdGVjdHVyZSBsZXZlbC4KK1wmXGZCXC1taXBzMVxmUiBpcyBhbiBhbGlhcyBmb3IgXGZCXC1tYXJjaD1yMzAwMFxmUiwgXGZCXC1taXBzMlxmUiBpcyBhbgorYWxpYXMgZm9yIFxmQlwtbWFyY2g9cjYwMDBcZlIsIFxmQlwtbWlwczNcZlIgaXMgYW4gYWxpYXMgZm9yCitcJlxmQlwtbWFyY2g9cjQwMDBcZlIgYW5kIFxmQlwtbWlwczRcZlIgaXMgYW4gYWxpYXMgZm9yIFxmQlwtbWFyY2g9cjgwMDBcZlIuCitcJlxmQlwtbWlwczVcZlIsIFxmQlwtbWlwczMyXGZSLCBcZkJcLW1pcHMzMnIyXGZSLCBcZkJcLW1pcHM2NFxmUiwgYW5kCitcJlxmQlwtbWlwczY0cjJcZlIKK2NvcnJlc3BvbmQgdG8gZ2VuZXJpYworXCZcZkJccy0xTUlQU1xzMCBWXGZSLCBcZkJccy0xTUlQUzMyXHMwXGZSLCBcZkJccy0xTUlQUzMyXHMwIFJlbGVhc2UgMlxmUiwgXGZCXHMtMU1JUFM2NFxzMFxmUiwKK2FuZCBcZkJccy0xTUlQUzY0XHMwIFJlbGVhc2UgMlxmUgorXCZccy0xSVNBXHMwIHByb2Nlc3NvcnMsIHJlc3BlY3RpdmVseS4KKy5JUCAiXGZCXC1tYXJjaD1cZlJcZklccy0xQ1BVXHMwXGZSIiA0CisuSVggSXRlbSAiLW1hcmNoPUNQVSIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgcGFydGljdWxhciBccy0xTUlQU1xzMCBjcHUuCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJY3B1XGZSIiA0CisuSVggSXRlbSAiLW10dW5lPWNwdSIKK1NjaGVkdWxlIGFuZCB0dW5lIGZvciBhIHBhcnRpY3VsYXIgXHMtMU1JUFNcczAgY3B1LgorLklQICJcZkJcLW1maXg3MDAwXGZSIiA0CisuSVggSXRlbSAiLW1maXg3MDAwIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZpeDcwMDBcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZpeDcwMDAiCisuUEQKK0NhdXNlIG5vcHMgdG8gYmUgaW5zZXJ0ZWQgaWYgdGhlIHJlYWQgb2YgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCitvZiBhbiBtZmhpIG9yIG1mbG8gaW5zdHJ1Y3Rpb24gb2NjdXJzIGluIHRoZSBmb2xsb3dpbmcgdHdvIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tZGVidWdcZlIiIDQKKy5JWCBJdGVtICItbWRlYnVnIgorLlBEIDAKKy5JUCAiXGZCXC1ub1wtbWRlYnVnXGZSIiA0CisuSVggSXRlbSAiLW5vLW1kZWJ1ZyIKKy5QRAorQ2F1c2Ugc3RhYnMtc3R5bGUgZGVidWdnaW5nIG91dHB1dCB0byBnbyBpbnRvIGFuIEVDT0ZGLXN0eWxlIC5tZGVidWcKK3NlY3Rpb24gaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgXHMtMUVMRlxzMCAuc3RhYnMgc2VjdGlvbnMuCisuSVAgIlxmQlwtbXBkclxmUiIgNAorLklYIEl0ZW0gIi1tcGRyIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBkclxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcGRyIgorLlBECitDb250cm9sIGdlbmVyYXRpb24gb2YgXGYoQ1dcKihDYC5wZHJcKihDJ1xmUiBzZWN0aW9ucy4KKy5JUCAiXGZCXC1tZ3AzMlxmUiIgNAorLklYIEl0ZW0gIi1tZ3AzMiIKKy5QRCAwCisuSVAgIlxmQlwtbWZwMzJcZlIiIDQKKy5JWCBJdGVtICItbWZwMzIiCisuUEQKK1RoZSByZWdpc3RlciBzaXplcyBhcmUgbm9ybWFsbHkgaW5mZXJyZWQgZnJvbSB0aGUgXHMtMUlTQVxzMCBhbmQgXHMtMUFCSVxzMCwgYnV0IHRoZXNlCitmbGFncyBmb3JjZSBhIGNlcnRhaW4gZ3JvdXAgb2YgcmVnaXN0ZXJzIHRvIGJlIHRyZWF0ZWQgYXMgMzIgYml0cyB3aWRlIGF0CithbGwgdGltZXMuICBcZkJcLW1ncDMyXGZSIGNvbnRyb2xzIHRoZSBzaXplIG9mIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMKK2FuZCBcZkJcLW1mcDMyXGZSIGNvbnRyb2xzIHRoZSBzaXplIG9mIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1taXBzMTZcZlIiIDQKKy5JWCBJdGVtICItbWlwczE2IgorLlBEIDAKKy5JUCAiXGZCXC1ub1wtbWlwczE2XGZSIiA0CisuSVggSXRlbSAiLW5vLW1pcHMxNiIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFxzLTFNSVBTXHMwIDE2IHByb2Nlc3Nvci4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBwdXR0aW5nCitcJlxmKENXXCooQ2Auc2V0IG1pcHMxNlwqKEMnXGZSIGF0IHRoZSBzdGFydCBvZiB0aGUgYXNzZW1ibHkgZmlsZS4gIFxmQlwtbm9cLW1pcHMxNlxmUgordHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorLklQICJcZkJcLW1taWNyb21pcHNcZlIiIDQKKy5JWCBJdGVtICItbW1pY3JvbWlwcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1taWNyb21pcHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLW1pY3JvbWlwcyIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgdGhlIG1pY3JvTUlQUyBwcm9jZXNzb3IuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gcHV0dGluZworXCZcZihDV1wqKENgLnNldCBtaWNyb21pcHNcKihDJ1xmUiBhdCB0aGUgc3RhcnQgb2YgdGhlIGFzc2VtYmx5IGZpbGUuICBcZkJcLW1ub1wtbWljcm9taXBzXGZSCit0dXJucyBvZmYgdGhpcyBvcHRpb24uICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gcHV0dGluZyBcZihDV1wqKENgLnNldCBub21pY3JvbWlwc1wqKEMnXGZSCithdCB0aGUgc3RhcnQgb2YgdGhlIGFzc2VtYmx5IGZpbGUuCisuSVAgIlxmQlwtbXNtYXJ0bWlwc1xmUiIgNAorLklYIEl0ZW0gIi1tc21hcnRtaXBzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNtYXJ0bWlwc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc21hcnRtaXBzIgorLlBECitFbmFibGVzIHRoZSBTbWFydE1JUFMgZXh0ZW5zaW9uIHRvIHRoZSBccy0xTUlQUzMyXHMwIGluc3RydWN0aW9uIHNldC4gVGhpcyBpcworZXF1aXZhbGVudCB0byBwdXR0aW5nIFxmKENXXCooQ2Auc2V0IHNtYXJ0bWlwc1wqKEMnXGZSIGF0IHRoZSBzdGFydCBvZiB0aGUgYXNzZW1ibHkgZmlsZS4KK1wmXGZCXC1tbm9cLXNtYXJ0bWlwc1xmUiB0dXJucyBvZmYgdGhpcyBvcHRpb24uCisuSVAgIlxmQlwtbWlwczNkXGZSIiA0CisuSVggSXRlbSAiLW1pcHMzZCIKKy5QRCAwCisuSVAgIlxmQlwtbm9cLW1pcHMzZFxmUiIgNAorLklYIEl0ZW0gIi1uby1taXBzM2QiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBccy0xTUlQU1wtM0RcczAgQXBwbGljYXRpb24gU3BlY2lmaWMgRXh0ZW5zaW9uLgorVGhpcyB0ZWxscyB0aGUgYXNzZW1ibGVyIHRvIGFjY2VwdCBccy0xTUlQU1wtM0RcczAgaW5zdHJ1Y3Rpb25zLgorXCZcZkJcLW5vXC1taXBzM2RcZlIgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorLklQICJcZkJcLW1kbXhcZlIiIDQKKy5JWCBJdGVtICItbWRteCIKKy5QRCAwCisuSVAgIlxmQlwtbm9cLW1kbXhcZlIiIDQKKy5JWCBJdGVtICItbm8tbWRteCIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFxzLTFNRE1YXHMwIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4KK1RoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgXHMtMU1ETVhcczAgaW5zdHJ1Y3Rpb25zLgorXCZcZkJcLW5vXC1tZG14XGZSIHR1cm5zIG9mZiB0aGlzIG9wdGlvbi4KKy5JUCAiXGZCXC1tZHNwXGZSIiA0CisuSVggSXRlbSAiLW1kc3AiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZHNwXGZSIiA0CisuSVggSXRlbSAiLW1uby1kc3AiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBccy0xRFNQXHMwIFJlbGVhc2UgMSBBcHBsaWNhdGlvbiBTcGVjaWZpYyBFeHRlbnNpb24uCitUaGlzIHRlbGxzIHRoZSBhc3NlbWJsZXIgdG8gYWNjZXB0IFxzLTFEU1BcczAgUmVsZWFzZSAxIGluc3RydWN0aW9ucy4KK1wmXGZCXC1tbm9cLWRzcFxmUiB0dXJucyBvZmYgdGhpcyBvcHRpb24uCisuSVAgIlxmQlwtbWRzcHIyXGZSIiA0CisuSVggSXRlbSAiLW1kc3ByMiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1kc3ByMlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZHNwcjIiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBccy0xRFNQXHMwIFJlbGVhc2UgMiBBcHBsaWNhdGlvbiBTcGVjaWZpYyBFeHRlbnNpb24uCitUaGlzIG9wdGlvbiBpbXBsaWVzIFwtbWRzcC4KK1RoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgXHMtMURTUFxzMCBSZWxlYXNlIDIgaW5zdHJ1Y3Rpb25zLgorXCZcZkJcLW1ub1wtZHNwcjJcZlIgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorLklQICJcZkJcLW1tdFxmUiIgNAorLklYIEl0ZW0gIi1tbXQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbXRcZlIiIDQKKy5JWCBJdGVtICItbW5vLW10IgorLlBECitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgXHMtMU1UXHMwIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4KK1RoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgXHMtMU1UXHMwIGluc3RydWN0aW9ucy4KK1wmXGZCXC1tbm9cLW10XGZSIHR1cm5zIG9mZiB0aGlzIG9wdGlvbi4KKy5JUCAiXGZCXC1tbWN1XGZSIiA0CisuSVggSXRlbSAiLW1tY3UiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbWN1XGZSIiA0CisuSVggSXRlbSAiLW1uby1tY3UiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBccy0xTUNVXHMwIEFwcGxpY2F0aW9uIFNwZWNpZmljIEV4dGVuc2lvbi4KK1RoaXMgdGVsbHMgdGhlIGFzc2VtYmxlciB0byBhY2NlcHQgXHMtMU1DVVxzMCBpbnN0cnVjdGlvbnMuCitcJlxmQlwtbW5vXC1tY3VcZlIgdHVybnMgb2ZmIHRoaXMgb3B0aW9uLgorLklQICJcZkJcLVwtY29uc3RydWN0XC1mbG9hdHNcZlIiIDQKKy5JWCBJdGVtICItLWNvbnN0cnVjdC1mbG9hdHMiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLWNvbnN0cnVjdFwtZmxvYXRzXGZSIiA0CisuSVggSXRlbSAiLS1uby1jb25zdHJ1Y3QtZmxvYXRzIgorLlBECitUaGUgXGZCXC1cLW5vXC1jb25zdHJ1Y3RcLWZsb2F0c1xmUiBvcHRpb24gZGlzYWJsZXMgdGhlIGNvbnN0cnVjdGlvbiBvZgorZG91YmxlIHdpZHRoIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cyBieSBsb2FkaW5nIHRoZSB0d28gaGFsdmVzIG9mIHRoZQordmFsdWUgaW50byB0aGUgdHdvIHNpbmdsZSB3aWR0aCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgdGhhdCBtYWtlIHVwCit0aGUgZG91YmxlIHdpZHRoIHJlZ2lzdGVyLiAgQnkgZGVmYXVsdCBcZkJcLVwtY29uc3RydWN0XC1mbG9hdHNcZlIgaXMKK3NlbGVjdGVkLCBhbGxvd2luZyBjb25zdHJ1Y3Rpb24gb2YgdGhlc2UgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzLgorLklQICJcZkJcLVwtZW11bGF0aW9uPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWVtdWxhdGlvbj1uYW1lIgorVGhpcyBvcHRpb24gY2F1c2VzIFxmQmFzXGZSIHRvIGVtdWxhdGUgXGZCYXNcZlIgY29uZmlndXJlZAorZm9yIHNvbWUgb3RoZXIgdGFyZ2V0LCBpbiBhbGwgcmVzcGVjdHMsIGluY2x1ZGluZyBvdXRwdXQgZm9ybWF0IChjaG9vc2luZworYmV0d2VlbiBccy0xRUxGXHMwIGFuZCBccy0xRUNPRkZcczAgb25seSksIGhhbmRsaW5nIG9mIHBzZXVkby1vcGNvZGVzIHdoaWNoIG1heSBnZW5lcmF0ZQorZGVidWdnaW5nIGluZm9ybWF0aW9uIG9yIHN0b3JlIHN5bWJvbCB0YWJsZSBpbmZvcm1hdGlvbiwgYW5kIGRlZmF1bHQKK2VuZGlhbm5lc3MuICBUaGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gbmFtZXMgYXJlOiBcZkJtaXBzZWNvZmZcZlIsCitcJlxmQm1pcHNlbGZcZlIsIFxmQm1pcHNsZWNvZmZcZlIsIFxmQm1pcHNiZWNvZmZcZlIsIFxmQm1pcHNsZWxmXGZSLAorXCZcZkJtaXBzYmVsZlxmUi4gIFRoZSBmaXJzdCB0d28gZG8gbm90IGFsdGVyIHRoZSBkZWZhdWx0IGVuZGlhbm5lc3MgZnJvbSB0aGF0CitvZiB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIHdoaWNoIHRoZSBhc3NlbWJsZXIgd2FzIGNvbmZpZ3VyZWQ7IHRoZSBvdGhlcnMgY2hhbmdlCit0aGUgZGVmYXVsdCB0byBsaXR0bGVcLSBvciBiaWctZW5kaWFuIGFzIGluZGljYXRlZCBieSB0aGUgXGZCYlxmUiBvciBcZkJsXGZSCitpbiB0aGUgbmFtZS4gIFVzaW5nIFxmQlwtRUJcZlIgb3IgXGZCXC1FTFxmUiB3aWxsIG92ZXJyaWRlIHRoZSBlbmRpYW5uZXNzCitzZWxlY3Rpb24gaW4gYW55IGNhc2UuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSB3aGVuIHRoZSBwcmltYXJ5IHRhcmdldAorXCZcZkJhc1xmUiBpcyBjb25maWd1cmVkIGZvciBpcyBhIFxzLTFNSVBTXHMwIFxzLTFFTEZcczAgb3IgXHMtMUVDT0ZGXHMwIHRhcmdldC4KK0Z1cnRoZXJtb3JlLCB0aGUgcHJpbWFyeSB0YXJnZXQgb3Igb3RoZXJzIHNwZWNpZmllZCB3aXRoCitcJlxmQlwtXC1lbmFibGVcLXRhcmdldHM9Li4uXGZSIGF0IGNvbmZpZ3VyYXRpb24gdGltZSBtdXN0IGluY2x1ZGUgc3VwcG9ydCBmb3IKK3RoZSBvdGhlciBmb3JtYXQsIGlmIGJvdGggYXJlIHRvIGJlIGF2YWlsYWJsZS4gIEZvciBleGFtcGxlLCB0aGUgSXJpeCA1Citjb25maWd1cmF0aW9uIGluY2x1ZGVzIHN1cHBvcnQgZm9yIGJvdGguCisuU3AKK0V2ZW50dWFsbHksIHRoaXMgb3B0aW9uIHdpbGwgc3VwcG9ydCBtb3JlIGNvbmZpZ3VyYXRpb25zLCB3aXRoIG1vcmUKK2ZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdGhlIGFzc2VtYmxlcidzIGJlaGF2aW9yLCBhbmQgd2lsbCBiZSBzdXBwb3J0ZWQgZm9yCittb3JlIHByb2Nlc3NvcnMuCisuSVAgIlxmQlwtbm9jcHBcZlIiIDQKKy5JWCBJdGVtICItbm9jcHAiCitcJlxmQmFzXGZSIGlnbm9yZXMgdGhpcyBvcHRpb24uICBJdCBpcyBhY2NlcHRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCit0aGUgbmF0aXZlIHRvb2xzLgorLklQICJcZkJcLVwtdHJhcFxmUiIgNAorLklYIEl0ZW0gIi0tdHJhcCIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtdHJhcFxmUiIgNAorLklYIEl0ZW0gIi0tbm8tdHJhcCIKKy5JUCAiXGZCXC1cLWJyZWFrXGZSIiA0CisuSVggSXRlbSAiLS1icmVhayIKKy5JUCAiXGZCXC1cLW5vXC1icmVha1xmUiIgNAorLklYIEl0ZW0gIi0tbm8tYnJlYWsiCisuUEQKK0NvbnRyb2wgaG93IHRvIGRlYWwgd2l0aCBtdWx0aXBsaWNhdGlvbiBvdmVyZmxvdyBhbmQgZGl2aXNpb24gYnkgemVyby4KK1wmXGZCXC1cLXRyYXBcZlIgb3IgXGZCXC1cLW5vXC1icmVha1xmUiAod2hpY2ggYXJlIHN5bm9ueW1zKSB0YWtlIGEgdHJhcCBleGNlcHRpb24KKyhhbmQgb25seSB3b3JrIGZvciBJbnN0cnVjdGlvbiBTZXQgQXJjaGl0ZWN0dXJlIGxldmVsIDIgYW5kIGhpZ2hlcik7CitcJlxmQlwtXC1icmVha1xmUiBvciBcZkJcLVwtbm9cLXRyYXBcZlIgKGFsc28gc3lub255bXMsIGFuZCB0aGUgZGVmYXVsdCkgdGFrZSBhCiticmVhayBleGNlcHRpb24uCisuSVAgIlxmQlwtblxmUiIgNAorLklYIEl0ZW0gIi1uIgorV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBcZkJhc1xmUiB3aWxsIGlzc3VlIGEgd2FybmluZyBldmVyeQordGltZSBpdCBnZW5lcmF0ZXMgYSBub3AgaW5zdHJ1Y3Rpb24gZnJvbSBhIG1hY3JvLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yCithbiBNQ29yZSBwcm9jZXNzb3IuCisuSVAgIlxmQlwtanNyaTJic3JcZlIiIDQKKy5JWCBJdGVtICItanNyaTJic3IiCisuUEQgMAorLklQICJcZkJcLW5vanNyaTJic3JcZlIiIDQKKy5JWCBJdGVtICItbm9qc3JpMmJzciIKKy5QRAorRW5hYmxlIG9yIGRpc2FibGUgdGhlIFxzLTFKU1JJXHMwIHRvIFxzLTFCU1JcczAgdHJhbnNmb3JtYXRpb24uICBCeSBkZWZhdWx0IHRoaXMgaXMgZW5hYmxlZC4KK1RoZSBjb21tYW5kIGxpbmUgb3B0aW9uIFxmQlwtbm9qc3JpMmJzclxmUiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIGl0LgorLklQICJcZkJcLXNpZmlsdGVyXGZSIiA0CisuSVggSXRlbSAiLXNpZmlsdGVyIgorLlBEIDAKKy5JUCAiXGZCXC1ub3NpZmlsdGVyXGZSIiA0CisuSVggSXRlbSAiLW5vc2lmaWx0ZXIiCisuUEQKK0VuYWJsZSBvciBkaXNhYmxlIHRoZSBzaWxpY29uIGZpbHRlciBiZWhhdmlvdXIuICBCeSBkZWZhdWx0IHRoaXMgaXMgZGlzYWJsZWQuCitUaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgXGZCXC1zaWZpbHRlclxmUiBjb21tYW5kIGxpbmUgb3B0aW9uLgorLklQICJcZkJcLXJlbGF4XGZSIiA0CisuSVggSXRlbSAiLXJlbGF4IgorQWx0ZXIganVtcCBpbnN0cnVjdGlvbnMgZm9yIGxvbmcgZGlzcGxhY2VtZW50cy4KKy5JUCAiXGZCXC1tY3B1PVsyMTB8MzQwXVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PVsyMTB8MzQwXSIKK1NlbGVjdCB0aGUgY3B1IHR5cGUgb24gdGhlIHRhcmdldCBoYXJkd2FyZS4gIFRoaXMgY29udHJvbHMgd2hpY2ggaW5zdHJ1Y3Rpb25zCitjYW4gYmUgYXNzZW1ibGVkLgorLklQICJcZkJcLUVCXGZSIiA0CisuSVggSXRlbSAiLUVCIgorQXNzZW1ibGUgZm9yIGEgYmlnIGVuZGlhbiB0YXJnZXQuCisuSVAgIlxmQlwtRUxcZlIiIDQKKy5JWCBJdGVtICItRUwiCitBc3NlbWJsZSBmb3IgYSBsaXR0bGUgZW5kaWFuIHRhcmdldC4KKy5QUAorU2VlIHRoZSBpbmZvIHBhZ2VzIGZvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBNTUlYLXNwZWNpZmljIG9wdGlvbnMuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgYQorUG93ZXJQQyBwcm9jZXNzb3IuCisuSVAgIlxmQlwtYTMyXGZSIiA0CisuSVggSXRlbSAiLWEzMiIKK0dlbmVyYXRlIFxzLTFFTEYzMlxzMCBvciBccy0xWENPRkYzMlxzMC4KKy5JUCAiXGZCXC1hNjRcZlIiIDQKKy5JWCBJdGVtICItYTY0IgorR2VuZXJhdGUgXHMtMUVMRjY0XHMwIG9yIFxzLTFYQ09GRjY0XHMwLgorLklQICJcZkJcLUsgXHMtMVBJQ1xzMFxmUiIgNAorLklYIEl0ZW0gIi1LIFBJQyIKK1NldCBccy0xRUZfUFBDX1JFTE9DQVRBQkxFX0xJQlxzMCBpbiBccy0xRUxGXHMwIGZsYWdzLgorLklQICJcZkJcLW1wd3J4IHwgXC1tcHdyMlxmUiIgNAorLklYIEl0ZW0gIi1tcHdyeCB8IC1tcHdyMiIKK0dlbmVyYXRlIGNvZGUgZm9yIFxzLTFQT1dFUi8yXHMwIChccy0xUklPUzJcczApLgorLklQICJcZkJcLW1wd3JcZlIiIDQKKy5JWCBJdGVtICItbXB3ciIKK0dlbmVyYXRlIGNvZGUgZm9yIFxzLTFQT1dFUlxzMCAoXHMtMVJJT1MxXHMwKQorLklQICJcZkJcLW02MDFcZlIiIDQKKy5JWCBJdGVtICItbTYwMSIKK0dlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNjAxLgorLklQICJcZkJcLW1wcGMsIFwtbXBwYzMyLCBcLW02MDMsIFwtbTYwNFxmUiIgNAorLklYIEl0ZW0gIi1tcHBjLCAtbXBwYzMyLCAtbTYwMywgLW02MDQiCitHZW5lcmF0ZSBjb2RlIGZvciBQb3dlclBDIDYwMy82MDQuCisuSVAgIlxmQlwtbTQwMywgXC1tNDA1XGZSIiA0CisuSVggSXRlbSAiLW00MDMsIC1tNDA1IgorR2VuZXJhdGUgY29kZSBmb3IgUG93ZXJQQyA0MDMvNDA1LgorLklQICJcZkJcLW00NDBcZlIiIDQKKy5JWCBJdGVtICItbTQ0MCIKK0dlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNDQwLiAgQm9va0UgYW5kIHNvbWUgNDA1IGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tNDY0XGZSIiA0CisuSVggSXRlbSAiLW00NjQiCitHZW5lcmF0ZSBjb2RlIGZvciBQb3dlclBDIDQ2NC4KKy5JUCAiXGZCXC1tNDc2XGZSIiA0CisuSVggSXRlbSAiLW00NzYiCitHZW5lcmF0ZSBjb2RlIGZvciBQb3dlclBDIDQ3Ni4KKy5JUCAiXGZCXC1tNzQwMCwgXC1tNzQxMCwgXC1tNzQ1MCwgXC1tNzQ1NVxmUiIgNAorLklYIEl0ZW0gIi1tNzQwMCwgLW03NDEwLCAtbTc0NTAsIC1tNzQ1NSIKK0dlbmVyYXRlIGNvZGUgZm9yIFBvd2VyUEMgNzQwMC83NDEwLzc0NTAvNzQ1NS4KKy5JUCAiXGZCXC1tNzUwY2xcZlIiIDQKKy5JWCBJdGVtICItbTc1MGNsIgorR2VuZXJhdGUgY29kZSBmb3IgUG93ZXJQQyA3NTBDTC4KKy5JUCAiXGZCXC1tcHBjNjQsIFwtbTYyMFxmUiIgNAorLklYIEl0ZW0gIi1tcHBjNjQsIC1tNjIwIgorR2VuZXJhdGUgY29kZSBmb3IgUG93ZXJQQyA2MjAvNjI1LzYzMC4KKy5JUCAiXGZCXC1tZTUwMCwgXC1tZTUwMHgyXGZSIiA0CisuSVggSXRlbSAiLW1lNTAwLCAtbWU1MDB4MiIKK0dlbmVyYXRlIGNvZGUgZm9yIE1vdG9yb2xhIGU1MDAgY29yZSBjb21wbGV4LgorLklQICJcZkJcLW1lNTAwbWNcZlIiIDQKKy5JWCBJdGVtICItbWU1MDBtYyIKK0dlbmVyYXRlIGNvZGUgZm9yIEZyZWVzY2FsZSBlNTAwbWMgY29yZSBjb21wbGV4LgorLklQICJcZkJcLW1lNTAwbWM2NFxmUiIgNAorLklYIEl0ZW0gIi1tZTUwMG1jNjQiCitHZW5lcmF0ZSBjb2RlIGZvciBGcmVlc2NhbGUgZTUwMG1jNjQgY29yZSBjb21wbGV4LgorLklQICJcZkJcLW1lNTUwMFxmUiIgNAorLklYIEl0ZW0gIi1tZTU1MDAiCitHZW5lcmF0ZSBjb2RlIGZvciBGcmVlc2NhbGUgZTU1MDAgY29yZSBjb21wbGV4LgorLklQICJcZkJcLW1lNjUwMFxmUiIgNAorLklYIEl0ZW0gIi1tZTY1MDAiCitHZW5lcmF0ZSBjb2RlIGZvciBGcmVlc2NhbGUgZTY1MDAgY29yZSBjb21wbGV4LgorLklQICJcZkJcLW1zcGVcZlIiIDQKKy5JWCBJdGVtICItbXNwZSIKK0dlbmVyYXRlIGNvZGUgZm9yIE1vdG9yb2xhIFxzLTFTUEVcczAgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW10aXRhblxmUiIgNAorLklYIEl0ZW0gIi1tdGl0YW4iCitHZW5lcmF0ZSBjb2RlIGZvciBBcHBsaWVkTWljcm8gVGl0YW4gY29yZSBjb21wbGV4LgorLklQICJcZkJcLW1wcGM2NGJyaWRnZVxmUiIgNAorLklYIEl0ZW0gIi1tcHBjNjRicmlkZ2UiCitHZW5lcmF0ZSBjb2RlIGZvciBQb3dlclBDIDY0LCBpbmNsdWRpbmcgYnJpZGdlIGluc25zLgorLklQICJcZkJcLW1ib29rZVxmUiIgNAorLklYIEl0ZW0gIi1tYm9va2UiCitHZW5lcmF0ZSBjb2RlIGZvciAzMlwtYml0IEJvb2tFLgorLklQICJcZkJcLW1hMlxmUiIgNAorLklYIEl0ZW0gIi1tYTIiCitHZW5lcmF0ZSBjb2RlIGZvciBBMiBhcmNoaXRlY3R1cmUuCisuSVAgIlxmQlwtbWUzMDBcZlIiIDQKKy5JWCBJdGVtICItbWUzMDAiCitHZW5lcmF0ZSBjb2RlIGZvciBQb3dlclBDIGUzMDAgZmFtaWx5LgorLklQICJcZkJcLW1hbHRpdmVjXGZSIiA0CisuSVggSXRlbSAiLW1hbHRpdmVjIgorR2VuZXJhdGUgY29kZSBmb3IgcHJvY2Vzc29ycyB3aXRoIEFsdGlWZWMgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW12c3hcZlIiIDQKKy5JWCBJdGVtICItbXZzeCIKK0dlbmVyYXRlIGNvZGUgZm9yIHByb2Nlc3NvcnMgd2l0aCBWZWN0b3ItU2NhbGFyIChccy0xVlNYXHMwKSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXBvd2VyNCwgXC1tcHdyNFxmUiIgNAorLklYIEl0ZW0gIi1tcG93ZXI0LCAtbXB3cjQiCitHZW5lcmF0ZSBjb2RlIGZvciBQb3dlcjQgYXJjaGl0ZWN0dXJlLgorLklQICJcZkJcLW1wb3dlcjUsIFwtbXB3cjUsIFwtbXB3cjV4XGZSIiA0CisuSVggSXRlbSAiLW1wb3dlcjUsIC1tcHdyNSwgLW1wd3I1eCIKK0dlbmVyYXRlIGNvZGUgZm9yIFBvd2VyNSBhcmNoaXRlY3R1cmUuCisuSVAgIlxmQlwtbXBvd2VyNiwgXC1tcHdyNlxmUiIgNAorLklYIEl0ZW0gIi1tcG93ZXI2LCAtbXB3cjYiCitHZW5lcmF0ZSBjb2RlIGZvciBQb3dlcjYgYXJjaGl0ZWN0dXJlLgorLklQICJcZkJcLW1wb3dlcjcsIFwtbXB3cjdcZlIiIDQKKy5JWCBJdGVtICItbXBvd2VyNywgLW1wd3I3IgorR2VuZXJhdGUgY29kZSBmb3IgUG93ZXI3IGFyY2hpdGVjdHVyZS4KKy5JUCAiXGZCXC1tY2VsbFxmUiIgNAorLklYIEl0ZW0gIi1tY2VsbCIKK0dlbmVyYXRlIGNvZGUgZm9yIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBhcmNoaXRlY3R1cmUuCisuSVAgIlxmQlwtbWNvbVxmUiIgNAorLklYIEl0ZW0gIi1tY29tIgorR2VuZXJhdGUgY29kZSBQb3dlci9Qb3dlclBDIGNvbW1vbiBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbWFueVxmUiIgNAorLklYIEl0ZW0gIi1tYW55IgorR2VuZXJhdGUgY29kZSBmb3IgYW55IGFyY2hpdGVjdHVyZSAoXHMtMVBXUi9QV1JYL1BQQ1xzMCkuCisuSVAgIlxmQlwtbXJlZ25hbWVzXGZSIiA0CisuSVggSXRlbSAiLW1yZWduYW1lcyIKK0FsbG93IHN5bWJvbGljIG5hbWVzIGZvciByZWdpc3RlcnMuCisuSVAgIlxmQlwtbW5vXC1yZWduYW1lc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVnbmFtZXMiCitEbyBub3QgYWxsb3cgc3ltYm9saWMgbmFtZXMgZm9yIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tcmVsb2NhdGFibGVcZlIiIDQKKy5JWCBJdGVtICItbXJlbG9jYXRhYmxlIgorU3VwcG9ydCBmb3IgXHMtMUdDQ1xzMCdzIFwtbXJlbG9jYXRhYmxlIG9wdGlvbi4KKy5JUCAiXGZCXC1tcmVsb2NhdGFibGVcLWxpYlxmUiIgNAorLklYIEl0ZW0gIi1tcmVsb2NhdGFibGUtbGliIgorU3VwcG9ydCBmb3IgXHMtMUdDQ1xzMCdzIFwtbXJlbG9jYXRhYmxlXC1saWIgb3B0aW9uLgorLklQICJcZkJcLW1lbWJcZlIiIDQKKy5JWCBJdGVtICItbWVtYiIKK1NldCBccy0xUFBDX0VNQlxzMCBiaXQgaW4gXHMtMUVMRlxzMCBmbGFncy4KKy5JUCAiXGZCXC1tbGl0dGxlLCBcLW1saXR0bGVcLWVuZGlhbiwgXC1sZVxmUiIgNAorLklYIEl0ZW0gIi1tbGl0dGxlLCAtbWxpdHRsZS1lbmRpYW4sIC1sZSIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgbGl0dGxlIGVuZGlhbiBtYWNoaW5lLgorLklQICJcZkJcLW1iaWcsIFwtbWJpZ1wtZW5kaWFuLCBcLWJlXGZSIiA0CisuSVggSXRlbSAiLW1iaWcsIC1tYmlnLWVuZGlhbiwgLWJlIgorR2VuZXJhdGUgY29kZSBmb3IgYSBiaWcgZW5kaWFuIG1hY2hpbmUuCisuSVAgIlxmQlwtbXNvbGFyaXNcZlIiIDQKKy5JWCBJdGVtICItbXNvbGFyaXMiCitHZW5lcmF0ZSBjb2RlIGZvciBTb2xhcmlzLgorLklQICJcZkJcLW1ub1wtc29sYXJpc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc29sYXJpcyIKK0RvIG5vdCBnZW5lcmF0ZSBjb2RlIGZvciBTb2xhcmlzLgorLklQICJcZkJcLW5vcHM9XGZSXGZJY291bnRcZlIiIDQKKy5JWCBJdGVtICItbm9wcz1jb3VudCIKK0lmIGFuIGFsaWdubWVudCBkaXJlY3RpdmUgaW5zZXJ0cyBtb3JlIHRoYW4gXGZJY291bnRcZlIgbm9wcywgcHV0IGEKK2JyYW5jaCBhdCB0aGUgYmVnaW5uaW5nIHRvIHNraXAgZXhlY3V0aW9uIG9mIHRoZSBub3BzLgorLlBQCitTZWUgdGhlIGluZm8gcGFnZXMgZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIFJYLXNwZWNpZmljIG9wdGlvbnMuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgdGhlIHMzOTAKK3Byb2Nlc3NvciBmYW1pbHkuCisuSVAgIlxmQlwtbTMxXGZSIiA0CisuSVggSXRlbSAiLW0zMSIKKy5QRCAwCisuSVAgIlxmQlwtbTY0XGZSIiA0CisuSVggSXRlbSAiLW02NCIKKy5QRAorU2VsZWN0IHRoZSB3b3JkIHNpemUsIGVpdGhlciAzMS8zMiBiaXRzIG9yIDY0IGJpdHMuCisuSVAgIlxmQlwtbWVzYVxmUiIgNAorLklYIEl0ZW0gIi1tZXNhIgorLlBEIDAKKy5JUCAiXGZCXC1temFyY2hcZlIiIDQKKy5JWCBJdGVtICItbXphcmNoIgorLlBECitTZWxlY3QgdGhlIGFyY2hpdGVjdHVyZSBtb2RlLCBlaXRoZXIgdGhlIEVudGVycHJpc2UgU3lzdGVtCitBcmNoaXRlY3R1cmUgKGVzYSkgb3IgdGhlIHovQXJjaGl0ZWN0dXJlIG1vZGUgKHphcmNoKS4KKy5JUCAiXGZCXC1tYXJjaD1cZlJcZklwcm9jZXNzb3JcZlIiIDQKKy5JWCBJdGVtICItbWFyY2g9cHJvY2Vzc29yIgorU3BlY2lmeSB3aGljaCBzMzkwIHByb2Nlc3NvciB2YXJpYW50IGlzIHRoZSB0YXJnZXQsIFxmQmc2XGZSLCBcZkJnNlxmUiwKK1wmXGZCejkwMFxmUiwgXGZCejk5MFxmUiwgXGZCejlcLTEwOVxmUiwgXGZCejlcLWVjXGZSLCBvciBcZkJ6MTBcZlIuCisuSVAgIlxmQlwtbXJlZ25hbWVzXGZSIiA0CisuSVggSXRlbSAiLW1yZWduYW1lcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWduYW1lc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVnbmFtZXMiCisuUEQKK0FsbG93IG9yIGRpc2FsbG93IHN5bWJvbGljIG5hbWVzIGZvciByZWdpc3RlcnMuCisuSVAgIlxmQlwtbXdhcm5cLWFyZWdcLXplcm9cZlIiIDQKKy5JWCBJdGVtICItbXdhcm4tYXJlZy16ZXJvIgorV2FybiB3aGVuZXZlciB0aGUgb3BlcmFuZCBmb3IgYSBiYXNlIG9yIGluZGV4IHJlZ2lzdGVyIGhhcyBiZWVuIHNwZWNpZmllZAorYnV0IGV2YWx1YXRlcyB0byB6ZXJvLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIGEKK1wmXHMtMVRNUzMyMEM2MDAwXHMwIHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1tYXJjaD1cZlJcZklhcmNoXGZSIiA0CisuSVggSXRlbSAiLW1hcmNoPWFyY2giCitFbmFibGUgKG9ubHkpIGluc3RydWN0aW9ucyBmcm9tIGFyY2hpdGVjdHVyZSBcZklhcmNoXGZSLiAgQnkgZGVmYXVsdCwKK2FsbCBpbnN0cnVjdGlvbnMgYXJlIHBlcm1pdHRlZC4KKy5TcAorVGhlIGZvbGxvd2luZyB2YWx1ZXMgb2YgXGZJYXJjaFxmUiBhcmUgYWNjZXB0ZWQ6IFxmKENXXCooQ2BjNjJ4XCooQydcZlIsCitcJlxmKENXXCooQ2BjNjR4XCooQydcZlIsIFxmKENXXCooQ2BjNjR4K1wqKEMnXGZSLCBcZihDV1wqKENgYzY3eFwqKEMnXGZSLCBcZihDV1wqKENgYzY3eCtcKihDJ1xmUiwgXGYoQ1dcKihDYGM2NzR4XCooQydcZlIuCisuSVAgIlxmQlwtbWRzYnRcZlIiIDQKKy5JWCBJdGVtICItbWRzYnQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZHNidFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZHNidCIKKy5QRAorVGhlIFxmQlwtbWRzYnRcZlIgb3B0aW9uIGNhdXNlcyB0aGUgYXNzZW1ibGVyIHRvIGdlbmVyYXRlIHRoZQorXCZcZihDV1wqKENgVGFnX0FCSV9EU0JUXCooQydcZlIgYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBvZiAxLCBpbmRpY2F0aW5nIHRoYXQgdGhlCitjb2RlIGlzIHVzaW5nIFxzLTFEU0JUXHMwIGFkZHJlc3NpbmcuICBUaGUgXGZCXC1tbm9cLWRzYnRcZlIgb3B0aW9uLCB0aGUKK2RlZmF1bHQsIGNhdXNlcyB0aGUgdGFnIHRvIGhhdmUgYSB2YWx1ZSBvZiAwLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGNvZGUKK2RvZXMgbm90IHVzZSBccy0xRFNCVFxzMCBhZGRyZXNzaW5nLiAgVGhlIGxpbmtlciB3aWxsIGVtaXQgYSB3YXJuaW5nIGlmCitvYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlIChccy0xRFNCVFxzMCBhbmQgbm9uLURTQlQpIGFyZSBsaW5rZWQgdG9nZXRoZXIuCisuSVAgIlxmQlwtbXBpZD1ub1xmUiIgNAorLklYIEl0ZW0gIi1tcGlkPW5vIgorLlBEIDAKKy5JUCAiXGZCXC1tcGlkPW5lYXJcZlIiIDQKKy5JWCBJdGVtICItbXBpZD1uZWFyIgorLklQICJcZkJcLW1waWQ9ZmFyXGZSIiA0CisuSVggSXRlbSAiLW1waWQ9ZmFyIgorLlBECitUaGUgXGZCXC1tcGlkPVxmUiBvcHRpb24gY2F1c2VzIHRoZSBhc3NlbWJsZXIgdG8gZ2VuZXJhdGUgdGhlCitcJlxmKENXXCooQ2BUYWdfQUJJX1BJRFwqKEMnXGZSIGF0dHJpYnV0ZSB3aXRoIGEgdmFsdWUgaW5kaWNhdGluZyB0aGUgZm9ybSBvZiBkYXRhCithZGRyZXNzaW5nIHVzZWQgYnkgdGhlIGNvZGUuICBcZkJcLW1waWQ9bm9cZlIsIHRoZSBkZWZhdWx0LAoraW5kaWNhdGVzIHBvc2l0aW9uLWRlcGVuZGVudCBkYXRhIGFkZHJlc3NpbmcsIFxmQlwtbXBpZD1uZWFyXGZSCitpbmRpY2F0ZXMgcG9zaXRpb24taW5kZXBlbmRlbnQgYWRkcmVzc2luZyB3aXRoIFxzLTFHT1RcczAgYWNjZXNzZXMgdXNpbmcgbmVhcgorXCZccy0xRFBcczAgYWRkcmVzc2luZywgYW5kIFxmQlwtbXBpZD1mYXJcZlIgaW5kaWNhdGVzIHBvc2l0aW9uLWluZGVwZW5kZW50CithZGRyZXNzaW5nIHdpdGggXHMtMUdPVFxzMCBhY2Nlc3NlcyB1c2luZyBmYXIgXHMtMURQXHMwIGFkZHJlc3NpbmcuICBUaGUgbGlua2VyIHdpbGwKK2VtaXQgYSB3YXJuaW5nIGlmIG9iamVjdHMgYnVpbHQgd2l0aCBkaWZmZXJlbnQgc2V0dGluZ3Mgb2YgdGhpcyBvcHRpb24KK2FyZSBsaW5rZWQgdG9nZXRoZXIuCisuSVAgIlxmQlwtbXBpY1xmUiIgNAorLklYIEl0ZW0gIi1tcGljIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBpY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcGljIgorLlBECitUaGUgXGZCXC1tcGljXGZSIG9wdGlvbiBjYXVzZXMgdGhlIGFzc2VtYmxlciB0byBnZW5lcmF0ZSB0aGUKK1wmXGYoQ1dcKihDYFRhZ19BQklfUElDXCooQydcZlIgYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBvZiAxLCBpbmRpY2F0aW5nIHRoYXQgdGhlCitjb2RlIGlzIHVzaW5nIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgYWRkcmVzc2luZywgIFRoZQorXCZcZihDV1wqKENgXC1tbm9cLXBpY1wqKEMnXGZSIG9wdGlvbiwgdGhlIGRlZmF1bHQsIGNhdXNlcyB0aGUgdGFnIHRvIGhhdmUgYSB2YWx1ZSBvZgorMCwgaW5kaWNhdGluZyBwb3NpdGlvbi1kZXBlbmRlbnQgY29kZSBhZGRyZXNzaW5nLiAgVGhlIGxpbmtlciB3aWxsCitlbWl0IGEgd2FybmluZyBpZiBvYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlIChwb3NpdGlvbi1kZXBlbmRlbnQgYW5kCitwb3NpdGlvbi1pbmRlcGVuZGVudCkgYXJlIGxpbmtlZCB0b2dldGhlci4KKy5JUCAiXGZCXC1tYmlnXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWJpZy1lbmRpYW4iCisuUEQgMAorLklQICJcZkJcLW1saXR0bGVcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tbGl0dGxlLWVuZGlhbiIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBlbmRpYW5uZXNzLiAgVGhlIGRlZmF1bHQgaXMKK2xpdHRsZS1lbmRpYW4uCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHdoZW4gYXMgaXMgY29uZmlndXJlZCBmb3IgYSBUSUxFLUd4Citwcm9jZXNzb3IuCisuSVAgIlxmQlwtbTMyIHwgXC1tNjRcZlIiIDQKKy5JWCBJdGVtICItbTMyIHwgLW02NCIKK1NlbGVjdCB0aGUgd29yZCBzaXplLCBlaXRoZXIgMzIgYml0cyBvciA2NCBiaXRzLgorLklQICJcZkJcLUVCIHwgXC1FTFxmUiIgNAorLklYIEl0ZW0gIi1FQiB8IC1FTCIKK1NlbGVjdCB0aGUgZW5kaWFubmVzcywgZWl0aGVyIGJpZy1lbmRpYW4gKFwtRUIpIG9yIGxpdHRsZS1lbmRpYW4gKFwtRUwpLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yIGFuCitYdGVuc2EgcHJvY2Vzc29yLgorLklQICJcZkJcLVwtdGV4dFwtc2VjdGlvblwtbGl0ZXJhbHMgfCBcLVwtbm9cLXRleHRcLXNlY3Rpb25cLWxpdGVyYWxzXGZSIiA0CisuSVggSXRlbSAiLS10ZXh0LXNlY3Rpb24tbGl0ZXJhbHMgfCAtLW5vLXRleHQtc2VjdGlvbi1saXRlcmFscyIKK0NvbnRyb2wgdGhlIHRyZWF0bWVudCBvZiBsaXRlcmFsIHBvb2xzLiAgVGhlIGRlZmF1bHQgaXMKK1wmXGZCXC1cLW5vXC10ZXh0XC1zZWN0aW9uXC1saXRlcmFsc1xmUiwgd2hpY2ggcGxhY2VzIGxpdGVyYWxzIGluCitzZXBhcmF0ZSBzZWN0aW9ucyBpbiB0aGUgb3V0cHV0IGZpbGUuICBUaGlzIGFsbG93cyB0aGUgbGl0ZXJhbCBwb29sIHRvIGJlCitwbGFjZWQgaW4gYSBkYXRhIFxzLTFSQU0vUk9NXHMwLiAgV2l0aCBcZkJcLVwtdGV4dFwtc2VjdGlvblwtbGl0ZXJhbHNcZlIsIHRoZQorbGl0ZXJhbHMgYXJlIGludGVyc3BlcnNlZCBpbiB0aGUgdGV4dCBzZWN0aW9uIGluIG9yZGVyIHRvIGtlZXAgdGhlbSBhcworY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlaXIgcmVmZXJlbmNlcy4gIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgbGFyZ2UKK2Fzc2VtYmx5IGZpbGVzLCB3aGVyZSB0aGUgbGl0ZXJhbHMgd291bGQgb3RoZXJ3aXNlIGJlIG91dCBvZiByYW5nZSBvZiB0aGUKK1wmXGYoQ1dcKihDYEwzMlJcKihDJ1xmUiBpbnN0cnVjdGlvbnMgaW4gdGhlIHRleHQgc2VjdGlvbi4gIFRoZXNlIG9wdGlvbnMgb25seSBhZmZlY3QKK2xpdGVyYWxzIHJlZmVyZW5jZWQgdmlhIFBDLXJlbGF0aXZlIFxmKENXXCooQ2BMMzJSXCooQydcZlIgaW5zdHJ1Y3Rpb25zOyBsaXRlcmFscworZm9yIGFic29sdXRlIG1vZGUgXGYoQ1dcKihDYEwzMlJcKihDJ1xmUiBpbnN0cnVjdGlvbnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4KKy5JUCAiXGZCXC1cLWFic29sdXRlXC1saXRlcmFscyB8IFwtXC1ub1wtYWJzb2x1dGVcLWxpdGVyYWxzXGZSIiA0CisuSVggSXRlbSAiLS1hYnNvbHV0ZS1saXRlcmFscyB8IC0tbm8tYWJzb2x1dGUtbGl0ZXJhbHMiCitJbmRpY2F0ZSB0byB0aGUgYXNzZW1ibGVyIHdoZXRoZXIgXGYoQ1dcKihDYEwzMlJcKihDJ1xmUiBpbnN0cnVjdGlvbnMgdXNlIGFic29sdXRlCitvciBQQy1yZWxhdGl2ZSBhZGRyZXNzaW5nLiAgSWYgdGhlIHByb2Nlc3NvciBpbmNsdWRlcyB0aGUgYWJzb2x1dGUKK2FkZHJlc3Npbmcgb3B0aW9uLCB0aGUgZGVmYXVsdCBpcyB0byB1c2UgYWJzb2x1dGUgXGYoQ1dcKihDYEwzMlJcKihDJ1xmUgorcmVsb2NhdGlvbnMuICBPdGhlcndpc2UsIG9ubHkgdGhlIFBDLXJlbGF0aXZlIFxmKENXXCooQ2BMMzJSXCooQydcZlIgcmVsb2NhdGlvbnMKK2NhbiBiZSB1c2VkLgorLklQICJcZkJcLVwtdGFyZ2V0XC1hbGlnbiB8IFwtXC1ub1wtdGFyZ2V0XC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0LWFsaWduIHwgLS1uby10YXJnZXQtYWxpZ24iCitFbmFibGUgb3IgZGlzYWJsZSBhdXRvbWF0aWMgYWxpZ25tZW50IHRvIHJlZHVjZSBicmFuY2ggcGVuYWx0aWVzIGF0IHNvbWUKK2V4cGVuc2UgaW4gY29kZSBzaXplLiAgICBUaGlzIG9wdGltaXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuICBOb3RlCit0aGF0IHRoZSBhc3NlbWJsZXIgd2lsbCBhbHdheXMgYWxpZ24gaW5zdHJ1Y3Rpb25zIGxpa2UgXGYoQ1dcKihDYExPT1BcKihDJ1xmUiB0aGF0CitoYXZlIGZpeGVkIGFsaWdubWVudCByZXF1aXJlbWVudHMuCisuSVAgIlxmQlwtXC1sb25nY2FsbHMgfCBcLVwtbm9cLWxvbmdjYWxsc1xmUiIgNAorLklYIEl0ZW0gIi0tbG9uZ2NhbGxzIHwgLS1uby1sb25nY2FsbHMiCitFbmFibGUgb3IgZGlzYWJsZSB0cmFuc2Zvcm1hdGlvbiBvZiBjYWxsIGluc3RydWN0aW9ucyB0byBhbGxvdyBjYWxscworYWNyb3NzIGEgZ3JlYXRlciByYW5nZSBvZiBhZGRyZXNzZXMuICAgIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdoZW4gY2FsbAordGFyZ2V0cyBjYW4gcG90ZW50aWFsbHkgYmUgb3V0IG9mIHJhbmdlLiAgSXQgbWF5IGRlZ3JhZGUgYm90aCBjb2RlIHNpemUKK2FuZCBwZXJmb3JtYW5jZSwgYnV0IHRoZSBsaW5rZXIgY2FuIGdlbmVyYWxseSBvcHRpbWl6ZSBhd2F5IHRoZQordW5uZWNlc3Nhcnkgb3ZlcmhlYWQgd2hlbiBhIGNhbGwgZW5kcyB1cCB3aXRoaW4gcmFuZ2UuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLVwtbm9cLWxvbmdjYWxsc1xmUi4KKy5JUCAiXGZCXC1cLXRyYW5zZm9ybSB8IFwtXC1ub1wtdHJhbnNmb3JtXGZSIiA0CisuSVggSXRlbSAiLS10cmFuc2Zvcm0gfCAtLW5vLXRyYW5zZm9ybSIKK0VuYWJsZSBvciBkaXNhYmxlIGFsbCBhc3NlbWJsZXIgdHJhbnNmb3JtYXRpb25zIG9mIFh0ZW5zYSBpbnN0cnVjdGlvbnMsCitpbmNsdWRpbmcgYm90aCByZWxheGF0aW9uIGFuZCBvcHRpbWl6YXRpb24uICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLVwtdHJhbnNmb3JtXGZSOyBcZkJcLVwtbm9cLXRyYW5zZm9ybVxmUiBzaG91bGQgb25seSBiZSB1c2VkIGluIHRoZQorcmFyZSBjYXNlcyB3aGVuIHRoZSBpbnN0cnVjdGlvbnMgbXVzdCBiZSBleGFjdGx5IGFzIHNwZWNpZmllZCBpbiB0aGUKK2Fzc2VtYmx5IHNvdXJjZS4gIFVzaW5nIFxmQlwtXC1ub1wtdHJhbnNmb3JtXGZSIGNhdXNlcyBvdXQgb2YgcmFuZ2UKK2luc3RydWN0aW9uIG9wZXJhbmRzIHRvIGJlIGVycm9ycy4KKy5JUCAiXGZCXC1cLXJlbmFtZVwtc2VjdGlvblxmUiBcZklvbGRuYW1lXGZSXGZCPVxmUlxmSW5ld25hbWVcZlIiIDQKKy5JWCBJdGVtICItLXJlbmFtZS1zZWN0aW9uIG9sZG5hbWU9bmV3bmFtZSIKK1JlbmFtZSB0aGUgXGZJb2xkbmFtZVxmUiBzZWN0aW9uIHRvIFxmSW5ld25hbWVcZlIuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZAorbXVsdGlwbGUgdGltZXMgdG8gcmVuYW1lIG11bHRpcGxlIHNlY3Rpb25zLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGFzIGlzIGNvbmZpZ3VyZWQgZm9yCithIFo4MCBmYW1pbHkgcHJvY2Vzc29yLgorLklQICJcZkJcLXo4MFxmUiIgNAorLklYIEl0ZW0gIi16ODAiCitBc3NlbWJsZSBmb3IgWjgwIHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1yODAwXGZSIiA0CisuSVggSXRlbSAiLXI4MDAiCitBc3NlbWJsZSBmb3IgUjgwMCBwcm9jZXNzb3IuCisuSVAgIlxmQlwtaWdub3JlXC11bmRvY3VtZW50ZWRcLWluc3RydWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1pZ25vcmUtdW5kb2N1bWVudGVkLWluc3RydWN0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtV251ZFxmUiIgNAorLklYIEl0ZW0gIi1XbnVkIgorLlBECitBc3NlbWJsZSB1bmRvY3VtZW50ZWQgWjgwIGluc3RydWN0aW9ucyB0aGF0IGFsc28gd29yayBvbiBSODAwIHdpdGhvdXQgd2FybmluZy4KKy5JUCAiXGZCXC1pZ25vcmVcLXVucG9ydGFibGVcLWluc3RydWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1pZ25vcmUtdW5wb3J0YWJsZS1pbnN0cnVjdGlvbnMiCisuUEQgMAorLklQICJcZkJcLVdudXBcZlIiIDQKKy5JWCBJdGVtICItV251cCIKKy5QRAorQXNzZW1ibGUgYWxsIHVuZG9jdW1lbnRlZCBaODAgaW5zdHJ1Y3Rpb25zIHdpdGhvdXQgd2FybmluZy4KKy5JUCAiXGZCXC13YXJuXC11bmRvY3VtZW50ZWRcLWluc3RydWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi13YXJuLXVuZG9jdW1lbnRlZC1pbnN0cnVjdGlvbnMiCisuUEQgMAorLklQICJcZkJcLVd1ZFxmUiIgNAorLklYIEl0ZW0gIi1XdWQiCisuUEQKK0lzc3VlIGEgd2FybmluZyBmb3IgdW5kb2N1bWVudGVkIFo4MCBpbnN0cnVjdGlvbnMgdGhhdCBhbHNvIHdvcmsgb24gUjgwMC4KKy5JUCAiXGZCXC13YXJuXC11bnBvcnRhYmxlXC1pbnN0cnVjdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItd2Fybi11bnBvcnRhYmxlLWluc3RydWN0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtV3VwXGZSIiA0CisuSVggSXRlbSAiLVd1cCIKKy5QRAorSXNzdWUgYSB3YXJuaW5nIGZvciB1bmRvY3VtZW50ZWQgWjgwIGluc3RydWN0aW9ucyB0aGF0IGRvIG5vdCB3b3JrIG9uIFI4MDAuCisuSVAgIlxmQlwtZm9yYmlkXC11bmRvY3VtZW50ZWRcLWluc3RydWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mb3JiaWQtdW5kb2N1bWVudGVkLWluc3RydWN0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtRnVkXGZSIiA0CisuSVggSXRlbSAiLUZ1ZCIKKy5QRAorVHJlYXQgYWxsIHVuZG9jdW1lbnRlZCBpbnN0cnVjdGlvbnMgYXMgZXJyb3JzLgorLklQICJcZkJcLWZvcmJpZFwtdW5wb3J0YWJsZVwtaW5zdHJ1Y3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLWZvcmJpZC11bnBvcnRhYmxlLWluc3RydWN0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtRnVwXGZSIiA0CisuSVggSXRlbSAiLUZ1cCIKKy5QRAorVHJlYXQgdW5kb2N1bWVudGVkIFo4MCBpbnN0cnVjdGlvbnMgdGhhdCBkbyBub3Qgd29yayBvbiBSODAwIGFzIGVycm9ycy4KKy5TSCAiU0VFIEFMU08iCisuSVggSGVhZGVyICJTRUUgQUxTTyIKK1wmXGZJZ2NjXGZSXHwoMSksIFxmSWxkXGZSXHwoMSksIGFuZCB0aGUgSW5mbyBlbnRyaWVzIGZvciBcZkliaW51dGlsc1xmUiBhbmQgXGZJbGRcZlIuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKzIwMDAsIDIwMDEsIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBcKihMIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcKihSIi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1jKytmaWx0LjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtYysrZmlsdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOWNiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtYysrZmlsdC4xCkBAIC0wLDAgKzEsMzM5IEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yMyAoUG9kOjpTaW1wbGUgMy4xNCkKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiQysrRklMVCAxIgorLlRIIEMrK0ZJTFQgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitjKytmaWx0IFwtIERlbWFuZ2xlIEMrKyBhbmQgSmF2YSBzeW1ib2xzLgorLlNIICJTWU5PUFNJUyIKKy5JWCBIZWFkZXIgIlNZTk9QU0lTIgorYysrZmlsdCBbXGZCXC1fXGZSfFxmQlwtXC1zdHJpcFwtdW5kZXJzY29yZVxmUl0KKyAgICAgICAgW1xmQlwtblxmUnxcZkJcLVwtbm9cLXN0cmlwXC11bmRlcnNjb3JlXGZSXQorICAgICAgICBbXGZCXC1wXGZSfFxmQlwtXC1ub1wtcGFyYW1zXGZSXQorICAgICAgICBbXGZCXC10XGZSfFxmQlwtXC10eXBlc1xmUl0KKyAgICAgICAgW1xmQlwtaVxmUnxcZkJcLVwtbm9cLXZlcmJvc2VcZlJdCisgICAgICAgIFtcZkJcLXNcZlIgXGZJZm9ybWF0XGZSfFxmQlwtXC1mb3JtYXQ9XGZSXGZJZm9ybWF0XGZSXQorICAgICAgICBbXGZCXC1cLWhlbHBcZlJdICBbXGZCXC1cLXZlcnNpb25cZlJdICBbXGZJc3ltYm9sXGZSLi4uXQorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorVGhlIFwqKEMrIGFuZCBKYXZhIGxhbmd1YWdlcyBwcm92aWRlIGZ1bmN0aW9uIG92ZXJsb2FkaW5nLCB3aGljaCBtZWFucwordGhhdCB5b3UgY2FuIHdyaXRlIG1hbnkgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSwgcHJvdmlkaW5nIHRoYXQKK2VhY2ggZnVuY3Rpb24gdGFrZXMgcGFyYW1ldGVycyBvZiBkaWZmZXJlbnQgdHlwZXMuICBJbiBvcmRlciB0byBiZQorYWJsZSB0byBkaXN0aW5ndWlzaCB0aGVzZSBzaW1pbGFybHkgbmFtZWQgZnVuY3Rpb25zIFwqKEMrIGFuZCBKYXZhCitlbmNvZGUgdGhlbSBpbnRvIGEgbG93LWxldmVsIGFzc2VtYmxlciBuYW1lIHdoaWNoIHVuaXF1ZWx5IGlkZW50aWZpZXMKK2VhY2ggZGlmZmVyZW50IHZlcnNpb24uICBUaGlzIHByb2Nlc3MgaXMga25vd24gYXMgXGZJbWFuZ2xpbmdcZlIuIFRoZQorXCZcZkJjKytmaWx0XGZSCitbMV0KK3Byb2dyYW0gZG9lcyB0aGUgaW52ZXJzZSBtYXBwaW5nOiBpdCBkZWNvZGVzIChcZklkZW1hbmdsZXNcZlIpIGxvdy1sZXZlbAorbmFtZXMgaW50byB1c2VyLWxldmVsIG5hbWVzIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVhZC4KKy5QUAorRXZlcnkgYWxwaGFudW1lcmljIHdvcmQgKGNvbnNpc3Rpbmcgb2YgbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlcywKK2RvbGxhcnMsIG9yIHBlcmlvZHMpIHNlZW4gaW4gdGhlIGlucHV0IGlzIGEgcG90ZW50aWFsIG1hbmdsZWQgbmFtZS4KK0lmIHRoZSBuYW1lIGRlY29kZXMgaW50byBhIFwqKEMrIG5hbWUsIHRoZSBcKihDKyBuYW1lIHJlcGxhY2VzIHRoZQorbG93LWxldmVsIG5hbWUgaW4gdGhlIG91dHB1dCwgb3RoZXJ3aXNlIHRoZSBvcmlnaW5hbCB3b3JkIGlzIG91dHB1dC4KK0luIHRoaXMgd2F5IHlvdSBjYW4gcGFzcyBhbiBlbnRpcmUgYXNzZW1ibGVyIHNvdXJjZSBmaWxlLCBjb250YWluaW5nCittYW5nbGVkIG5hbWVzLCB0aHJvdWdoIFxmQmMrK2ZpbHRcZlIgYW5kIHNlZSB0aGUgc2FtZSBzb3VyY2UgZmlsZQorY29udGFpbmluZyBkZW1hbmdsZWQgbmFtZXMuCisuUFAKK1lvdSBjYW4gYWxzbyB1c2UgXGZCYysrZmlsdFxmUiB0byBkZWNpcGhlciBpbmRpdmlkdWFsIHN5bWJvbHMgYnkKK3Bhc3NpbmcgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lOgorLlBQCisuVmIgMQorXCYgICAgICAgIGMrK2ZpbHQgPHN5bWJvbD4KKy5WZQorLlBQCitJZiBubyBcZklzeW1ib2xcZlIgYXJndW1lbnRzIGFyZSBnaXZlbiwgXGZCYysrZmlsdFxmUiByZWFkcyBzeW1ib2wKK25hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGluc3RlYWQuICBBbGwgdGhlIHJlc3VsdHMgYXJlIHByaW50ZWQgb24KK3RoZSBzdGFuZGFyZCBvdXRwdXQuICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlYWRpbmcgbmFtZXMgZnJvbSB0aGUKK2NvbW1hbmQgbGluZSB2ZXJzdXMgcmVhZGluZyBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBpcyB0aGF0Citjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBleHBlY3RlZCB0byBiZSBqdXN0IG1hbmdsZWQgbmFtZXMgYW5kIG5vCitjaGVja2luZyBpcyBwZXJmb3JtZWQgdG8gc2VwYXJhdGUgdGhlbSBmcm9tIHN1cnJvdW5kaW5nIHRleHQuICBUaHVzCitmb3IgZXhhbXBsZToKKy5QUAorLlZiIDEKK1wmICAgICAgICBjKytmaWx0IFwtbiBfWjFmdgorLlZlCisuUFAKK3dpbGwgd29yayBhbmQgZGVtYW5nbGUgdGhlIG5hbWUgdG8gXCooTCJmKClcKihSIiB3aGVyZWFzOgorLlBQCisuVmIgMQorXCYgICAgICAgIGMrK2ZpbHQgXC1uIF9aMWZ2LAorLlZlCisuUFAKK3dpbGwgbm90IHdvcmsuICAoTm90ZSB0aGUgZXh0cmEgY29tbWEgYXQgdGhlIGVuZCBvZiB0aGUgbWFuZ2xlZAorbmFtZSB3aGljaCBtYWtlcyBpdCBpbnZhbGlkKS4gIFRoaXMgY29tbWFuZCBob3dldmVyIHdpbGwgd29yazoKKy5QUAorLlZiIDEKK1wmICAgICAgICBlY2hvIF9aMWZ2LCB8IGMrK2ZpbHQgXC1uCisuVmUKKy5QUAorYW5kIHdpbGwgZGlzcGxheSBcKihMImYoKSxcKihSIiwgaS5lLiwgdGhlIGRlbWFuZ2xlZCBuYW1lIGZvbGxvd2VkIGJ5IGEKK3RyYWlsaW5nIGNvbW1hLiAgVGhpcyBiZWhhdmlvdXIgaXMgYmVjYXVzZSB3aGVuIHRoZSBuYW1lcyBhcmUgcmVhZAorZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGV5IG1pZ2h0IGJlIHBhcnQgb2YgYW4KK2Fzc2VtYmxlciBzb3VyY2UgZmlsZSB3aGVyZSB0aGVyZSBtaWdodCBiZSBleHRyYSwgZXh0cmFuZW91cworY2hhcmFjdGVycyB0cmFpbGluZyBhZnRlciBhIG1hbmdsZWQgbmFtZS4gIEZvciBleGFtcGxlOgorLlBQCisuVmIgMQorXCYgICAgICAgICAgICAudHlwZSAgIF9aMWZ2LCBAZnVuY3Rpb24KKy5WZQorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKKy5JUCAiXGZCXC1fXGZSIiA0CisuSVggSXRlbSAiLV8iCisuUEQgMAorLklQICJcZkJcLVwtc3RyaXBcLXVuZGVyc2NvcmVcZlIiIDQKKy5JWCBJdGVtICItLXN0cmlwLXVuZGVyc2NvcmUiCisuUEQKK09uIHNvbWUgc3lzdGVtcywgYm90aCB0aGUgQyBhbmQgXCooQysgY29tcGlsZXJzIHB1dCBhbiB1bmRlcnNjb3JlIGluIGZyb250CitvZiBldmVyeSBuYW1lLiAgRm9yIGV4YW1wbGUsIHRoZSBDIG5hbWUgXGYoQ1dcKihDYGZvb1wqKEMnXGZSIGdldHMgdGhlIGxvdy1sZXZlbAorbmFtZSBcZihDV1wqKENgX2Zvb1wqKEMnXGZSLiAgVGhpcyBvcHRpb24gcmVtb3ZlcyB0aGUgaW5pdGlhbCB1bmRlcnNjb3JlLiAgV2hldGhlcgorXCZcZkJjKytmaWx0XGZSIHJlbW92ZXMgdGhlIHVuZGVyc2NvcmUgYnkgZGVmYXVsdCBpcyB0YXJnZXQgZGVwZW5kZW50LgorLklQICJcZkJcLW5cZlIiIDQKKy5JWCBJdGVtICItbiIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtc3RyaXBcLXVuZGVyc2NvcmVcZlIiIDQKKy5JWCBJdGVtICItLW5vLXN0cmlwLXVuZGVyc2NvcmUiCisuUEQKK0RvIG5vdCByZW1vdmUgdGhlIGluaXRpYWwgdW5kZXJzY29yZS4KKy5JUCAiXGZCXC1wXGZSIiA0CisuSVggSXRlbSAiLXAiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLXBhcmFtc1xmUiIgNAorLklYIEl0ZW0gIi0tbm8tcGFyYW1zIgorLlBECitXaGVuIGRlbWFuZ2xpbmcgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiwgZG8gbm90IGRpc3BsYXkgdGhlIHR5cGVzIG9mCit0aGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLgorLklQICJcZkJcLXRcZlIiIDQKKy5JWCBJdGVtICItdCIKKy5QRCAwCisuSVAgIlxmQlwtXC10eXBlc1xmUiIgNAorLklYIEl0ZW0gIi0tdHlwZXMiCisuUEQKK0F0dGVtcHQgdG8gZGVtYW5nbGUgdHlwZXMgYXMgd2VsbCBhcyBmdW5jdGlvbiBuYW1lcy4gIFRoaXMgaXMgZGlzYWJsZWQKK2J5IGRlZmF1bHQgc2luY2UgbWFuZ2xlZCB0eXBlcyBhcmUgbm9ybWFsbHkgb25seSB1c2VkIGludGVybmFsbHkgaW4KK3RoZSBjb21waWxlciwgYW5kIHRoZXkgY2FuIGJlIGNvbmZ1c2VkIHdpdGggbm9uLW1hbmdsZWQgbmFtZXMuICBGb3IgZXhhbXBsZSwKK2EgZnVuY3Rpb24gY2FsbGVkIFwqKEwiYVwqKFIiIHRyZWF0ZWQgYXMgYSBtYW5nbGVkIHR5cGUgbmFtZSB3b3VsZCBiZQorZGVtYW5nbGVkIHRvIFwqKEwic2lnbmVkIGNoYXJcKihSIi4KKy5JUCAiXGZCXC1pXGZSIiA0CisuSVggSXRlbSAiLWkiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLXZlcmJvc2VcZlIiIDQKKy5JWCBJdGVtICItLW5vLXZlcmJvc2UiCisuUEQKK0RvIG5vdCBpbmNsdWRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgKGlmIGFueSkgaW4gdGhlIGRlbWFuZ2xlZAorb3V0cHV0LgorLklQICJcZkJcLXNcZlIgXGZJZm9ybWF0XGZSIiA0CisuSVggSXRlbSAiLXMgZm9ybWF0IgorLlBEIDAKKy5JUCAiXGZCXC1cLWZvcm1hdD1cZlJcZklmb3JtYXRcZlIiIDQKKy5JWCBJdGVtICItLWZvcm1hdD1mb3JtYXQiCisuUEQKK1wmXGZCYysrZmlsdFxmUiBjYW4gZGVjb2RlIHZhcmlvdXMgbWV0aG9kcyBvZiBtYW5nbGluZywgdXNlZCBieQorZGlmZmVyZW50IGNvbXBpbGVycy4gIFRoZSBhcmd1bWVudCB0byB0aGlzIG9wdGlvbiBzZWxlY3RzIHdoaWNoCittZXRob2QgaXQgdXNlczoKKy5SUyA0CisuaWUgbiAuSVAgIiIiYXV0byIiIiA0CisuZWwgLklQICJcZihDV2F1dG9cZlIiIDQKKy5JWCBJdGVtICJhdXRvIgorQXV0b21hdGljIHNlbGVjdGlvbiBiYXNlZCBvbiBleGVjdXRhYmxlICh0aGUgZGVmYXVsdCBtZXRob2QpCisuaWUgbiAuSVAgIiIiZ251IiIiIDQKKy5lbCAuSVAgIlxmKENXZ251XGZSIiA0CisuSVggSXRlbSAiZ251IgordGhlIG9uZSB1c2VkIGJ5IHRoZSBccy0xR05VXHMwIFwqKEMrIGNvbXBpbGVyIChnKyspCisuaWUgbiAuSVAgIiIibHVjaWQiIiIgNAorLmVsIC5JUCAiXGYoQ1dsdWNpZFxmUiIgNAorLklYIEl0ZW0gImx1Y2lkIgordGhlIG9uZSB1c2VkIGJ5IHRoZSBMdWNpZCBjb21waWxlciAobGNjKQorLmllIG4gLklQICIiImFybSIiIiA0CisuZWwgLklQICJcZihDV2FybVxmUiIgNAorLklYIEl0ZW0gImFybSIKK3RoZSBvbmUgc3BlY2lmaWVkIGJ5IHRoZSBcKihDKyBBbm5vdGF0ZWQgUmVmZXJlbmNlIE1hbnVhbAorLmllIG4gLklQICIiImhwIiIiIDQKKy5lbCAuSVAgIlxmKENXaHBcZlIiIDQKKy5JWCBJdGVtICJocCIKK3RoZSBvbmUgdXNlZCBieSB0aGUgXHMtMUhQXHMwIGNvbXBpbGVyIChhQ0MpCisuaWUgbiAuSVAgIiIiZWRnIiIiIDQKKy5lbCAuSVAgIlxmKENXZWRnXGZSIiA0CisuSVggSXRlbSAiZWRnIgordGhlIG9uZSB1c2VkIGJ5IHRoZSBccy0xRURHXHMwIGNvbXBpbGVyCisuaWUgbiAuSVAgIiIiZ251XC12MyIiIiA0CisuZWwgLklQICJcZihDV2dudVwtdjNcZlIiIDQKKy5JWCBJdGVtICJnbnUtdjMiCit0aGUgb25lIHVzZWQgYnkgdGhlIFxzLTFHTlVcczAgXCooQysgY29tcGlsZXIgKGcrKykgd2l0aCB0aGUgVjMgXHMtMUFCSVxzMC4KKy5pZSBuIC5JUCAiIiJqYXZhIiIiIDQKKy5lbCAuSVAgIlxmKENXamF2YVxmUiIgNAorLklYIEl0ZW0gImphdmEiCit0aGUgb25lIHVzZWQgYnkgdGhlIFxzLTFHTlVcczAgSmF2YSBjb21waWxlciAoZ2NqKQorLmllIG4gLklQICIiImduYXQiIiIgNAorLmVsIC5JUCAiXGYoQ1dnbmF0XGZSIiA0CisuSVggSXRlbSAiZ25hdCIKK3RoZSBvbmUgdXNlZCBieSB0aGUgXHMtMUdOVVxzMCBBZGEgY29tcGlsZXIgKFxzLTFHTkFUXHMwKS4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKK1ByaW50IGEgc3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byBcZkJjKytmaWx0XGZSIGFuZCBleGl0LgorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKK1ByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBcZkJjKytmaWx0XGZSIGFuZCBleGl0LgorLklQICJcZkJAXGZSXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIkBmaWxlIgorUmVhZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tIFxmSWZpbGVcZlIuICBUaGUgb3B0aW9ucyByZWFkIGFyZQoraW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIEBcZklmaWxlXGZSIG9wdGlvbi4gIElmIFxmSWZpbGVcZlIKK2RvZXMgbm90IGV4aXN0LCBvciBjYW5ub3QgYmUgcmVhZCwgdGhlbiB0aGUgb3B0aW9uIHdpbGwgYmUgdHJlYXRlZAorbGl0ZXJhbGx5LCBhbmQgbm90IHJlbW92ZWQuCisuU3AKK09wdGlvbnMgaW4gXGZJZmlsZVxmUiBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBBIHdoaXRlc3BhY2UKK2NoYXJhY3RlciBtYXkgYmUgaW5jbHVkZWQgaW4gYW4gb3B0aW9uIGJ5IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUKK29wdGlvbiBpbiBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMuICBBbnkgY2hhcmFjdGVyIChpbmNsdWRpbmcgYQorYmFja3NsYXNoKSBtYXkgYmUgaW5jbHVkZWQgYnkgcHJlZml4aW5nIHRoZSBjaGFyYWN0ZXIgdG8gYmUgaW5jbHVkZWQKK3dpdGggYSBiYWNrc2xhc2guICBUaGUgXGZJZmlsZVxmUiBtYXkgaXRzZWxmIGNvbnRhaW4gYWRkaXRpb25hbAorQFxmSWZpbGVcZlIgb3B0aW9uczsgYW55IHN1Y2ggb3B0aW9ucyB3aWxsIGJlIHByb2Nlc3NlZCByZWN1cnNpdmVseS4KKy5TSCAiRk9PVE5PVEVTIgorLklYIEhlYWRlciAiRk9PVE5PVEVTIgorLklQICIxLiIgNAorTVMtRE9TIGRvZXMgbm90IGFsbG93IFxmKENXXCooQ2ArXCooQydcZlIgY2hhcmFjdGVycyBpbiBmaWxlIG5hbWVzLCBzbyBvbgorTVMtRE9TIHRoaXMgcHJvZ3JhbSBpcyBuYW1lZCBcZkJccy0xQ1hYRklMVFxzMFxmUi4KKy5TSCAiU0VFIEFMU08iCisuSVggSGVhZGVyICJTRUUgQUxTTyIKK3RoZSBJbmZvIGVudHJpZXMgZm9yIFxmSWJpbnV0aWxzXGZSLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIFwqKEwiXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZVwqKFIiLgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWNwcC4xIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWNwcC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OGRhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtY3BwLjEKQEAgLTAsMCArMSwxMDM3IEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yNSAoUG9kOjpTaW1wbGUgMy4xNikKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiQ1BQIDEiCisuVEggQ1BQIDEgIjIwMTMtMTEtMTEiICJnY2MtNC44LjMiICJHTlUiCisuXCIgRm9yIG5yb2ZmLCB0dXJuIG9mZiBqdXN0aWZpY2F0aW9uLiAgQWx3YXlzIHR1cm4gb2ZmIGh5cGhlbmF0aW9uOyBpdCBtYWtlcworLlwiIHdheSB0b28gbWFueSBtaXN0YWtlcyBpbiB0ZWNobmljYWwgZG9jdW1lbnRzLgorLmlmIG4gLmFkIGwKKy5uaAorLlNIICJOQU1FIgorY3BwIFwtIFRoZSBDIFByZXByb2Nlc3NvcgorLlNIICJTWU5PUFNJUyIKKy5JWCBIZWFkZXIgIlNZTk9QU0lTIgorY3BwIFtcZkJcLURcZlJcZkltYWNyb1xmUls9XGZJZGVmblxmUl0uLi5dIFtcZkJcLVVcZlJcZkltYWNyb1xmUl0KKyAgICBbXGZCXC1JXGZSXGZJZGlyXGZSLi4uXSBbXGZCXC1pcXVvdGVcZlJcZklkaXJcZlIuLi5dCisgICAgW1xmQlwtV1xmUlxmSXdhcm5cZlIuLi5dCisgICAgW1xmQlwtTVxmUnxcZkJcLU1NXGZSXSBbXGZCXC1NR1xmUl0gW1xmQlwtTUZcZlIgXGZJZmlsZW5hbWVcZlJdCisgICAgW1xmQlwtTVBcZlJdIFtcZkJcLU1RXGZSIFxmSXRhcmdldFxmUi4uLl0KKyAgICBbXGZCXC1NVFxmUiBcZkl0YXJnZXRcZlIuLi5dCisgICAgW1xmQlwtUFxmUl0gW1xmQlwtZm5vXC13b3JraW5nXC1kaXJlY3RvcnlcZlJdCisgICAgW1xmQlwteFxmUiBcZklsYW5ndWFnZVxmUl0gW1xmQlwtc3RkPVxmUlxmSXN0YW5kYXJkXGZSXQorICAgIFxmSWluZmlsZVxmUiBcZklvdXRmaWxlXGZSCisuUFAKK09ubHkgdGhlIG1vc3QgdXNlZnVsIG9wdGlvbnMgYXJlIGxpc3RlZCBoZXJlOyBzZWUgYmVsb3cgZm9yIHRoZSByZW1haW5kZXIuCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitUaGUgQyBwcmVwcm9jZXNzb3IsIG9mdGVuIGtub3duIGFzIFxmSWNwcFxmUiwgaXMgYSBcZkltYWNybyBwcm9jZXNzb3JcZlIKK3RoYXQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBDIGNvbXBpbGVyIHRvIHRyYW5zZm9ybSB5b3VyIHByb2dyYW0KK2JlZm9yZSBjb21waWxhdGlvbi4gIEl0IGlzIGNhbGxlZCBhIG1hY3JvIHByb2Nlc3NvciBiZWNhdXNlIGl0IGFsbG93cworeW91IHRvIGRlZmluZSBcZkltYWNyb3NcZlIsIHdoaWNoIGFyZSBicmllZiBhYmJyZXZpYXRpb25zIGZvciBsb25nZXIKK2NvbnN0cnVjdHMuCisuUFAKK1RoZSBDIHByZXByb2Nlc3NvciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIG9ubHkgd2l0aCBDLCBcKihDKywgYW5kCitPYmplY3RpdmUtQyBzb3VyY2UgY29kZS4gIEluIHRoZSBwYXN0LCBpdCBoYXMgYmVlbiBhYnVzZWQgYXMgYSBnZW5lcmFsCit0ZXh0IHByb2Nlc3Nvci4gIEl0IHdpbGwgY2hva2Ugb24gaW5wdXQgd2hpY2ggZG9lcyBub3Qgb2JleSBDJ3MgbGV4aWNhbAorcnVsZXMuICBGb3IgZXhhbXBsZSwgYXBvc3Ryb3BoZXMgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyB0aGUgYmVnaW5uaW5nIG9mCitjaGFyYWN0ZXIgY29uc3RhbnRzLCBhbmQgY2F1c2UgZXJyb3JzLiAgQWxzbywgeW91IGNhbm5vdCByZWx5IG9uIGl0CitwcmVzZXJ2aW5nIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgaW5wdXQgd2hpY2ggYXJlIG5vdCBzaWduaWZpY2FudCB0bworQ1wtZmFtaWx5IGxhbmd1YWdlcy4gIElmIGEgTWFrZWZpbGUgaXMgcHJlcHJvY2Vzc2VkLCBhbGwgdGhlIGhhcmQgdGFicword2lsbCBiZSByZW1vdmVkLCBhbmQgdGhlIE1ha2VmaWxlIHdpbGwgbm90IHdvcmsuCisuUFAKK0hhdmluZyBzYWlkIHRoYXQsIHlvdSBjYW4gb2Z0ZW4gZ2V0IGF3YXkgd2l0aCB1c2luZyBjcHAgb24gdGhpbmdzIHdoaWNoCithcmUgbm90IEMuICBPdGhlciBBbGdvbC1pc2ggcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIGFyZSBvZnRlbiBzYWZlCisoUGFzY2FsLCBBZGEsIGV0Yy4pIFNvIGlzIGFzc2VtYmx5LCB3aXRoIGNhdXRpb24uICBcZkJcLXRyYWRpdGlvbmFsXC1jcHBcZlIKK21vZGUgcHJlc2VydmVzIG1vcmUgd2hpdGUgc3BhY2UsIGFuZCBpcyBvdGhlcndpc2UgbW9yZSBwZXJtaXNzaXZlLiAgTWFueQorb2YgdGhlIHByb2JsZW1zIGNhbiBiZSBhdm9pZGVkIGJ5IHdyaXRpbmcgQyBvciBcKihDKyBzdHlsZSBjb21tZW50cworaW5zdGVhZCBvZiBuYXRpdmUgbGFuZ3VhZ2UgY29tbWVudHMsIGFuZCBrZWVwaW5nIG1hY3JvcyBzaW1wbGUuCisuUFAKK1doZXJldmVyIHBvc3NpYmxlLCB5b3Ugc2hvdWxkIHVzZSBhIHByZXByb2Nlc3NvciBnZWFyZWQgdG8gdGhlIGxhbmd1YWdlCit5b3UgYXJlIHdyaXRpbmcgaW4uICBNb2Rlcm4gdmVyc2lvbnMgb2YgdGhlIFxzLTFHTlVcczAgYXNzZW1ibGVyIGhhdmUgbWFjcm8KK2ZhY2lsaXRpZXMuICBNb3N0IGhpZ2ggbGV2ZWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIGhhdmUgdGhlaXIgb3duCitjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgaW5jbHVzaW9uIG1lY2hhbmlzbS4gIElmIGFsbCBlbHNlIGZhaWxzLAordHJ5IGEgdHJ1ZSBnZW5lcmFsIHRleHQgcHJvY2Vzc29yLCBzdWNoIGFzIFxzLTFHTlVcczAgTTQuCisuUFAKK0MgcHJlcHJvY2Vzc29ycyB2YXJ5IGluIHNvbWUgZGV0YWlscy4gIFRoaXMgbWFudWFsIGRpc2N1c3NlcyB0aGUgXHMtMUdOVVxzMCBDCitwcmVwcm9jZXNzb3IsIHdoaWNoIHByb3ZpZGVzIGEgc21hbGwgc3VwZXJzZXQgb2YgdGhlIGZlYXR1cmVzIG9mIFxzLTFJU09cczAKK1N0YW5kYXJkIEMuICBJbiBpdHMgZGVmYXVsdCBtb2RlLCB0aGUgXHMtMUdOVVxzMCBDIHByZXByb2Nlc3NvciBkb2VzIG5vdCBkbyBhCitmZXcgdGhpbmdzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZC4gIFRoZXNlIGFyZSBmZWF0dXJlcyB3aGljaCBhcmUKK3JhcmVseSwgaWYgZXZlciwgdXNlZCwgYW5kIG1heSBjYXVzZSBzdXJwcmlzaW5nIGNoYW5nZXMgdG8gdGhlIG1lYW5pbmcKK29mIGEgcHJvZ3JhbSB3aGljaCBkb2VzIG5vdCBleHBlY3QgdGhlbS4gIFRvIGdldCBzdHJpY3QgXHMtMUlTT1xzMCBTdGFuZGFyZCBDLAoreW91IHNob3VsZCB1c2UgdGhlIFxmQlwtc3RkPWM5MFxmUiwgXGZCXC1zdGQ9Yzk5XGZSIG9yCitcJlxmQlwtc3RkPWMxMVxmUiBvcHRpb25zLCBkZXBlbmRpbmcKK29uIHdoaWNoIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIHlvdSB3YW50LiAgVG8gZ2V0IGFsbCB0aGUgbWFuZGF0b3J5CitkaWFnbm9zdGljcywgeW91IG11c3QgYWxzbyB1c2UgXGZCXC1wZWRhbnRpY1xmUi4KKy5QUAorVGhpcyBtYW51YWwgZGVzY3JpYmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgXHMtMUlTT1xzMCBwcmVwcm9jZXNzb3IuICBUbworbWluaW1pemUgZ3JhdHVpdG91cyBkaWZmZXJlbmNlcywgd2hlcmUgdGhlIFxzLTFJU09cczAgcHJlcHJvY2Vzc29yJ3MKK2JlaGF2aW9yIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggdHJhZGl0aW9uYWwgc2VtYW50aWNzLCB0aGUKK3RyYWRpdGlvbmFsIHByZXByb2Nlc3NvciBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIHdheS4gIFRoZSB2YXJpb3VzCitkaWZmZXJlbmNlcyB0aGF0IGRvIGV4aXN0IGFyZSBkZXRhaWxlZCBpbiB0aGUgc2VjdGlvbiBcZkJUcmFkaXRpb25hbAorTW9kZVxmUi4KKy5QUAorRm9yIGNsYXJpdHksIHVubGVzcyBub3RlZCBvdGhlcndpc2UsIHJlZmVyZW5jZXMgdG8gXGZCXHMtMUNQUFxzMFxmUiBpbiB0aGlzCittYW51YWwgcmVmZXIgdG8gXHMtMUdOVVxzMCBccy0xQ1BQXHMwLgorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKK1RoZSBDIHByZXByb2Nlc3NvciBleHBlY3RzIHR3byBmaWxlIG5hbWVzIGFzIGFyZ3VtZW50cywgXGZJaW5maWxlXGZSIGFuZAorXCZcZklvdXRmaWxlXGZSLiAgVGhlIHByZXByb2Nlc3NvciByZWFkcyBcZklpbmZpbGVcZlIgdG9nZXRoZXIgd2l0aCBhbnkKK290aGVyIGZpbGVzIGl0IHNwZWNpZmllcyB3aXRoIFxmQiNpbmNsdWRlXGZSLiAgQWxsIHRoZSBvdXRwdXQgZ2VuZXJhdGVkCitieSB0aGUgY29tYmluZWQgaW5wdXQgZmlsZXMgaXMgd3JpdHRlbiBpbiBcZklvdXRmaWxlXGZSLgorLlBQCitFaXRoZXIgXGZJaW5maWxlXGZSIG9yIFxmSW91dGZpbGVcZlIgbWF5IGJlIFxmQlwtXGZSLCB3aGljaCBhcworXCZcZklpbmZpbGVcZlIgbWVhbnMgdG8gcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0IGFuZCBhcyBcZklvdXRmaWxlXGZSCittZWFucyB0byB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQuICBBbHNvLCBpZiBlaXRoZXIgZmlsZSBpcyBvbWl0dGVkLCBpdAorbWVhbnMgdGhlIHNhbWUgYXMgaWYgXGZCXC1cZlIgaGFkIGJlZW4gc3BlY2lmaWVkIGZvciB0aGF0IGZpbGUuCisuUFAKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIG9yIHRoZSBvcHRpb24gZW5kcyBpbiBcZkI9XGZSLCBhbGwgb3B0aW9ucword2hpY2ggdGFrZSBhbiBhcmd1bWVudCBtYXkgaGF2ZSB0aGF0IGFyZ3VtZW50IGFwcGVhciBlaXRoZXIgaW1tZWRpYXRlbHkKK2FmdGVyIHRoZSBvcHRpb24sIG9yIHdpdGggYSBzcGFjZSBiZXR3ZWVuIG9wdGlvbiBhbmQgYXJndW1lbnQ6CitcJlxmQlwtSWZvb1xmUiBhbmQgXGZCXC1JIGZvb1xmUiBoYXZlIHRoZSBzYW1lIGVmZmVjdC4KKy5QUAorTWFueSBvcHRpb25zIGhhdmUgbXVsdGktbGV0dGVyIG5hbWVzOyB0aGVyZWZvcmUgbXVsdGlwbGUgc2luZ2xlLWxldHRlcgorb3B0aW9ucyBtYXkgXGZJbm90XGZSIGJlIGdyb3VwZWQ6IFxmQlwtZE1cZlIgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbQorXCZcZkJcLWRcIFwtTVxmUi4KKy5JUCAiXGZCXC1EXGZSIFxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItRCBuYW1lIgorUHJlZGVmaW5lIFxmSW5hbWVcZlIgYXMgYSBtYWNybywgd2l0aCBkZWZpbml0aW9uIFxmKENXMVxmUi4KKy5JUCAiXGZCXC1EXGZSIFxmSW5hbWVcZlJcZkI9XGZSXGZJZGVmaW5pdGlvblxmUiIgNAorLklYIEl0ZW0gIi1EIG5hbWU9ZGVmaW5pdGlvbiIKK1RoZSBjb250ZW50cyBvZiBcZklkZWZpbml0aW9uXGZSIGFyZSB0b2tlbml6ZWQgYW5kIHByb2Nlc3NlZCBhcyBpZgordGhleSBhcHBlYXJlZCBkdXJpbmcgdHJhbnNsYXRpb24gcGhhc2UgdGhyZWUgaW4gYSBcZkIjZGVmaW5lXGZSCitkaXJlY3RpdmUuICBJbiBwYXJ0aWN1bGFyLCB0aGUgZGVmaW5pdGlvbiB3aWxsIGJlIHRydW5jYXRlZCBieQorZW1iZWRkZWQgbmV3bGluZSBjaGFyYWN0ZXJzLgorLlNwCitJZiB5b3UgYXJlIGludm9raW5nIHRoZSBwcmVwcm9jZXNzb3IgZnJvbSBhIHNoZWxsIG9yIHNoZWxsLWxpa2UKK3Byb2dyYW0geW91IG1heSBuZWVkIHRvIHVzZSB0aGUgc2hlbGwncyBxdW90aW5nIHN5bnRheCB0byBwcm90ZWN0CitjaGFyYWN0ZXJzIHN1Y2ggYXMgc3BhY2VzIHRoYXQgaGF2ZSBhIG1lYW5pbmcgaW4gdGhlIHNoZWxsIHN5bnRheC4KKy5TcAorSWYgeW91IHdpc2ggdG8gZGVmaW5lIGEgZnVuY3Rpb24tbGlrZSBtYWNybyBvbiB0aGUgY29tbWFuZCBsaW5lLCB3cml0ZQoraXRzIGFyZ3VtZW50IGxpc3Qgd2l0aCBzdXJyb3VuZGluZyBwYXJlbnRoZXNlcyBiZWZvcmUgdGhlIGVxdWFscyBzaWduCisoaWYgYW55KS4gIFBhcmVudGhlc2VzIGFyZSBtZWFuaW5nZnVsIHRvIG1vc3Qgc2hlbGxzLCBzbyB5b3Ugd2lsbCBuZWVkCit0byBxdW90ZSB0aGUgb3B0aW9uLiAgV2l0aCBcZkJzaFxmUiBhbmQgXGZCY3NoXGZSLAorXCZcZkJcLUQnXGZSXGZJbmFtZVxmUlxmQihcZlJcZklhcmdzLi4uXGZSXGZCKT1cZlJcZklkZWZpbml0aW9uXGZSXGZCJ1xmUiB3b3Jrcy4KKy5TcAorXCZcZkJcLURcZlIgYW5kIFxmQlwtVVxmUiBvcHRpb25zIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIHRoZXkKK2FyZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgQWxsIFxmQlwtaW1hY3Jvc1xmUiBcZklmaWxlXGZSIGFuZAorXCZcZkJcLWluY2x1ZGVcZlIgXGZJZmlsZVxmUiBvcHRpb25zIGFyZSBwcm9jZXNzZWQgYWZ0ZXIgYWxsCitcJlxmQlwtRFxmUiBhbmQgXGZCXC1VXGZSIG9wdGlvbnMuCisuSVAgIlxmQlwtVVxmUiBcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLVUgbmFtZSIKK0NhbmNlbCBhbnkgcHJldmlvdXMgZGVmaW5pdGlvbiBvZiBcZkluYW1lXGZSLCBlaXRoZXIgYnVpbHQgaW4gb3IKK3Byb3ZpZGVkIHdpdGggYSBcZkJcLURcZlIgb3B0aW9uLgorLklQICJcZkJcLXVuZGVmXGZSIiA0CisuSVggSXRlbSAiLXVuZGVmIgorRG8gbm90IHByZWRlZmluZSBhbnkgc3lzdGVtLXNwZWNpZmljIG9yIEdDQy1zcGVjaWZpYyBtYWNyb3MuICBUaGUKK3N0YW5kYXJkIHByZWRlZmluZWQgbWFjcm9zIHJlbWFpbiBkZWZpbmVkLgorLklQICJcZkJcLUlcZlIgXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLUkgZGlyIgorQWRkIHRoZSBkaXJlY3RvcnkgXGZJZGlyXGZSIHRvIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkCitmb3IgaGVhZGVyIGZpbGVzLgorLlNwCitEaXJlY3RvcmllcyBuYW1lZCBieSBcZkJcLUlcZlIgYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgc3RhbmRhcmQKK3N5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzLiAgSWYgdGhlIGRpcmVjdG9yeSBcZklkaXJcZlIgaXMgYSBzdGFuZGFyZAorc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LCB0aGUgb3B0aW9uIGlzIGlnbm9yZWQgdG8gZW5zdXJlIHRoYXQgdGhlCitkZWZhdWx0IHNlYXJjaCBvcmRlciBmb3Igc3lzdGVtIGRpcmVjdG9yaWVzIGFuZCB0aGUgc3BlY2lhbCB0cmVhdG1lbnQKK29mIHN5c3RlbSBoZWFkZXJzIGFyZSBub3QgZGVmZWF0ZWQKK1wmLgorSWYgXGZJZGlyXGZSIGJlZ2lucyB3aXRoIFxmKENXXCooQ2A9XCooQydcZlIsIHRoZW4gdGhlIFxmKENXXCooQ2A9XCooQydcZlIgd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgXGZCXC1cLXN5c3Jvb3RcZlIgYW5kIFxmQlwtaXN5c3Jvb3RcZlIuCisuSVAgIlxmQlwtb1xmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLW8gZmlsZSIKK1dyaXRlIG91dHB1dCB0byBcZklmaWxlXGZSLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIFxmSWZpbGVcZlIKK2FzIHRoZSBzZWNvbmQgbm9uLW9wdGlvbiBhcmd1bWVudCB0byBcZkJjcHBcZlIuICBcZkJnY2NcZlIgaGFzIGEKK2RpZmZlcmVudCBpbnRlcnByZXRhdGlvbiBvZiBhIHNlY29uZCBub24tb3B0aW9uIGFyZ3VtZW50LCBzbyB5b3UgbXVzdAordXNlIFxmQlwtb1xmUiB0byBzcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZS4KKy5JUCAiXGZCXC1XYWxsXGZSIiA0CisuSVggSXRlbSAiLVdhbGwiCitUdXJucyBvbiBhbGwgb3B0aW9uYWwgd2FybmluZ3Mgd2hpY2ggYXJlIGRlc2lyYWJsZSBmb3Igbm9ybWFsIGNvZGUuCitBdCBwcmVzZW50IHRoaXMgaXMgXGZCXC1XY29tbWVudFxmUiwgXGZCXC1XdHJpZ3JhcGhzXGZSLAorXCZcZkJcLVdtdWx0aWNoYXJcZlIgYW5kIGEgd2FybmluZyBhYm91dCBpbnRlZ2VyIHByb21vdGlvbiBjYXVzaW5nIGEKK2NoYW5nZSBvZiBzaWduIGluIFxmKENXXCooQ2AjaWZcKihDJ1xmUiBleHByZXNzaW9ucy4gIE5vdGUgdGhhdCBtYW55IG9mIHRoZQorcHJlcHJvY2Vzc29yJ3Mgd2FybmluZ3MgYXJlIG9uIGJ5IGRlZmF1bHQgYW5kIGhhdmUgbm8gb3B0aW9ucyB0bworY29udHJvbCB0aGVtLgorLklQICJcZkJcLVdjb21tZW50XGZSIiA0CisuSVggSXRlbSAiLVdjb21tZW50IgorLlBEIDAKKy5JUCAiXGZCXC1XY29tbWVudHNcZlIiIDQKKy5JWCBJdGVtICItV2NvbW1lbnRzIgorLlBECitXYXJuIHdoZW5ldmVyIGEgY29tbWVudC1zdGFydCBzZXF1ZW5jZSBcZkIvKlxmUiBhcHBlYXJzIGluIGEgXGZCLypcZlIKK2NvbW1lbnQsIG9yIHdoZW5ldmVyIGEgYmFja3NsYXNoLW5ld2xpbmUgYXBwZWFycyBpbiBhIFxmQi8vXGZSIGNvbW1lbnQuCisoQm90aCBmb3JtcyBoYXZlIHRoZSBzYW1lIGVmZmVjdC4pCisuSVAgIlxmQlwtV3RyaWdyYXBoc1xmUiIgNAorLklYIEl0ZW0gIi1XdHJpZ3JhcGhzIgorTW9zdCB0cmlncmFwaHMgaW4gY29tbWVudHMgY2Fubm90IGFmZmVjdCB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbS4KK0hvd2V2ZXIsIGEgdHJpZ3JhcGggdGhhdCB3b3VsZCBmb3JtIGFuIGVzY2FwZWQgbmV3bGluZSAoXGZCPz8vXGZSIGF0Cit0aGUgZW5kIG9mIGEgbGluZSkgY2FuLCBieSBjaGFuZ2luZyB3aGVyZSB0aGUgY29tbWVudCBiZWdpbnMgb3IgZW5kcy4KK1RoZXJlZm9yZSwgb25seSB0cmlncmFwaHMgdGhhdCB3b3VsZCBmb3JtIGVzY2FwZWQgbmV3bGluZXMgcHJvZHVjZQord2FybmluZ3MgaW5zaWRlIGEgY29tbWVudC4KKy5TcAorVGhpcyBvcHRpb24gaXMgaW1wbGllZCBieSBcZkJcLVdhbGxcZlIuICBJZiBcZkJcLVdhbGxcZlIgaXMgbm90CitnaXZlbiwgdGhpcyBvcHRpb24gaXMgc3RpbGwgZW5hYmxlZCB1bmxlc3MgdHJpZ3JhcGhzIGFyZSBlbmFibGVkLiAgVG8KK2dldCB0cmlncmFwaCBjb252ZXJzaW9uIHdpdGhvdXQgd2FybmluZ3MsIGJ1dCBnZXQgdGhlIG90aGVyCitcJlxmQlwtV2FsbFxmUiB3YXJuaW5ncywgdXNlIFxmQlwtdHJpZ3JhcGhzIFwtV2FsbCBcLVdub1wtdHJpZ3JhcGhzXGZSLgorLklQICJcZkJcLVd0cmFkaXRpb25hbFxmUiIgNAorLklYIEl0ZW0gIi1XdHJhZGl0aW9uYWwiCitXYXJuIGFib3V0IGNlcnRhaW4gY29uc3RydWN0cyB0aGF0IGJlaGF2ZSBkaWZmZXJlbnRseSBpbiB0cmFkaXRpb25hbCBhbmQKK1wmXHMtMUlTT1xzMCBDLiAgQWxzbyB3YXJuIGFib3V0IFxzLTFJU09cczAgQyBjb25zdHJ1Y3RzIHRoYXQgaGF2ZSBubyB0cmFkaXRpb25hbCBDCitlcXVpdmFsZW50LCBhbmQgcHJvYmxlbWF0aWMgY29uc3RydWN0cyB3aGljaCBzaG91bGQgYmUgYXZvaWRlZC4KKy5JUCAiXGZCXC1XdW5kZWZcZlIiIDQKKy5JWCBJdGVtICItV3VuZGVmIgorV2FybiB3aGVuZXZlciBhbiBpZGVudGlmaWVyIHdoaWNoIGlzIG5vdCBhIG1hY3JvIGlzIGVuY291bnRlcmVkIGluIGFuCitcJlxmQiNpZlxmUiBkaXJlY3RpdmUsIG91dHNpZGUgb2YgXGZCZGVmaW5lZFxmUi4gIFN1Y2ggaWRlbnRpZmllcnMgYXJlCityZXBsYWNlZCB3aXRoIHplcm8uCisuSVAgIlxmQlwtV3VudXNlZFwtbWFjcm9zXGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtbWFjcm9zIgorV2FybiBhYm91dCBtYWNyb3MgZGVmaW5lZCBpbiB0aGUgbWFpbiBmaWxlIHRoYXQgYXJlIHVudXNlZC4gIEEgbWFjcm8KK2lzIFxmSXVzZWRcZlIgaWYgaXQgaXMgZXhwYW5kZWQgb3IgdGVzdGVkIGZvciBleGlzdGVuY2UgYXQgbGVhc3Qgb25jZS4KK1RoZSBwcmVwcm9jZXNzb3Igd2lsbCBhbHNvIHdhcm4gaWYgdGhlIG1hY3JvIGhhcyBub3QgYmVlbiB1c2VkIGF0IHRoZQordGltZSBpdCBpcyByZWRlZmluZWQgb3IgdW5kZWZpbmVkLgorLlNwCitCdWlsdC1pbiBtYWNyb3MsIG1hY3JvcyBkZWZpbmVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBtYWNyb3MKK2RlZmluZWQgaW4gaW5jbHVkZSBmaWxlcyBhcmUgbm90IHdhcm5lZCBhYm91dC4KKy5TcAorXCZcZklOb3RlOlxmUiBJZiBhIG1hY3JvIGlzIGFjdHVhbGx5IHVzZWQsIGJ1dCBvbmx5IHVzZWQgaW4gc2tpcHBlZAorY29uZGl0aW9uYWwgYmxvY2tzLCB0aGVuIFxzLTFDUFBcczAgd2lsbCByZXBvcnQgaXQgYXMgdW51c2VkLiAgVG8gYXZvaWQgdGhlCit3YXJuaW5nIGluIHN1Y2ggYSBjYXNlLCB5b3UgbWlnaHQgaW1wcm92ZSB0aGUgc2NvcGUgb2YgdGhlIG1hY3JvJ3MKK2RlZmluaXRpb24gYnksIGZvciBleGFtcGxlLCBtb3ZpbmcgaXQgaW50byB0aGUgZmlyc3Qgc2tpcHBlZCBibG9jay4KK0FsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBwcm92aWRlIGEgZHVtbXkgdXNlIHdpdGggc29tZXRoaW5nIGxpa2U6CisuU3AKKy5WYiAyCitcJiAgICAgICAgI2lmIGRlZmluZWQgdGhlX21hY3JvX2NhdXNpbmdfdGhlX3dhcm5pbmcKK1wmICAgICAgICAjZW5kaWYKKy5WZQorLklQICJcZkJcLVdlbmRpZlwtbGFiZWxzXGZSIiA0CisuSVggSXRlbSAiLVdlbmRpZi1sYWJlbHMiCitXYXJuIHdoZW5ldmVyIGFuIFxmQiNlbHNlXGZSIG9yIGFuIFxmQiNlbmRpZlxmUiBhcmUgZm9sbG93ZWQgYnkgdGV4dC4KK1RoaXMgdXN1YWxseSBoYXBwZW5zIGluIGNvZGUgb2YgdGhlIGZvcm0KKy5TcAorLlZiIDUKK1wmICAgICAgICAjaWYgRk9PCitcJiAgICAgICAgLi4uCitcJiAgICAgICAgI2Vsc2UgRk9PCitcJiAgICAgICAgLi4uCitcJiAgICAgICAgI2VuZGlmIEZPTworLlZlCisuU3AKK1RoZSBzZWNvbmQgYW5kIHRoaXJkIFxmKENXXCooQ2BGT09cKihDJ1xmUiBzaG91bGQgYmUgaW4gY29tbWVudHMsIGJ1dCBvZnRlbiBhcmUgbm90CitpbiBvbGRlciBwcm9ncmFtcy4gIFRoaXMgd2FybmluZyBpcyBvbiBieSBkZWZhdWx0LgorLklQICJcZkJcLVdlcnJvclxmUiIgNAorLklYIEl0ZW0gIi1XZXJyb3IiCitNYWtlIGFsbCB3YXJuaW5ncyBpbnRvIGhhcmQgZXJyb3JzLiAgU291cmNlIGNvZGUgd2hpY2ggdHJpZ2dlcnMgd2FybmluZ3MKK3dpbGwgYmUgcmVqZWN0ZWQuCisuSVAgIlxmQlwtV3N5c3RlbVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi1Xc3lzdGVtLWhlYWRlcnMiCitJc3N1ZSB3YXJuaW5ncyBmb3IgY29kZSBpbiBzeXN0ZW0gaGVhZGVycy4gIFRoZXNlIGFyZSBub3JtYWxseSB1bmhlbHBmdWwKK2luIGZpbmRpbmcgYnVncyBpbiB5b3VyIG93biBjb2RlLCB0aGVyZWZvcmUgc3VwcHJlc3NlZC4gIElmIHlvdSBhcmUKK3Jlc3BvbnNpYmxlIGZvciB0aGUgc3lzdGVtIGxpYnJhcnksIHlvdSBtYXkgd2FudCB0byBzZWUgdGhlbS4KKy5JUCAiXGZCXC13XGZSIiA0CisuSVggSXRlbSAiLXciCitTdXBwcmVzcyBhbGwgd2FybmluZ3MsIGluY2x1ZGluZyB0aG9zZSB3aGljaCBccy0xR05VXHMwIFxzLTFDUFBcczAgaXNzdWVzIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtcGVkYW50aWNcZlIiIDQKKy5JWCBJdGVtICItcGVkYW50aWMiCitJc3N1ZSBhbGwgdGhlIG1hbmRhdG9yeSBkaWFnbm9zdGljcyBsaXN0ZWQgaW4gdGhlIEMgc3RhbmRhcmQuICBTb21lIG9mCit0aGVtIGFyZSBsZWZ0IG91dCBieSBkZWZhdWx0LCBzaW5jZSB0aGV5IHRyaWdnZXIgZnJlcXVlbnRseSBvbiBoYXJtbGVzcworY29kZS4KKy5JUCAiXGZCXC1wZWRhbnRpY1wtZXJyb3JzXGZSIiA0CisuSVggSXRlbSAiLXBlZGFudGljLWVycm9ycyIKK0lzc3VlIGFsbCB0aGUgbWFuZGF0b3J5IGRpYWdub3N0aWNzLCBhbmQgbWFrZSBhbGwgbWFuZGF0b3J5IGRpYWdub3N0aWNzCitpbnRvIGVycm9ycy4gIFRoaXMgaW5jbHVkZXMgbWFuZGF0b3J5IGRpYWdub3N0aWNzIHRoYXQgXHMtMUdDQ1xzMCBpc3N1ZXMKK3dpdGhvdXQgXGZCXC1wZWRhbnRpY1xmUiBidXQgdHJlYXRzIGFzIHdhcm5pbmdzLgorLklQICJcZkJcLU1cZlIiIDQKKy5JWCBJdGVtICItTSIKK0luc3RlYWQgb2Ygb3V0cHV0dGluZyB0aGUgcmVzdWx0IG9mIHByZXByb2Nlc3NpbmcsIG91dHB1dCBhIHJ1bGUKK3N1aXRhYmxlIGZvciBcZkJtYWtlXGZSIGRlc2NyaWJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgbWFpbgorc291cmNlIGZpbGUuICBUaGUgcHJlcHJvY2Vzc29yIG91dHB1dHMgb25lIFxmQm1ha2VcZlIgcnVsZSBjb250YWluaW5nCit0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhhdCBzb3VyY2UgZmlsZSwgYSBjb2xvbiwgYW5kIHRoZSBuYW1lcyBvZiBhbGwKK3RoZSBpbmNsdWRlZCBmaWxlcywgaW5jbHVkaW5nIHRob3NlIGNvbWluZyBmcm9tIFxmQlwtaW5jbHVkZVxmUiBvcgorXCZcZkJcLWltYWNyb3NcZlIgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisuU3AKK1VubGVzcyBzcGVjaWZpZWQgZXhwbGljaXRseSAod2l0aCBcZkJcLU1UXGZSIG9yIFxmQlwtTVFcZlIpLCB0aGUKK29iamVjdCBmaWxlIG5hbWUgY29uc2lzdHMgb2YgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHdpdGggYW55CitzdWZmaXggcmVwbGFjZWQgd2l0aCBvYmplY3QgZmlsZSBzdWZmaXggYW5kIHdpdGggYW55IGxlYWRpbmcgZGlyZWN0b3J5CitwYXJ0cyByZW1vdmVkLiAgSWYgdGhlcmUgYXJlIG1hbnkgaW5jbHVkZWQgZmlsZXMgdGhlbiB0aGUgcnVsZSBpcworc3BsaXQgaW50byBzZXZlcmFsIGxpbmVzIHVzaW5nIFxmQlxlXGZSXC1uZXdsaW5lLiAgVGhlIHJ1bGUgaGFzIG5vCitjb21tYW5kcy4KKy5TcAorVGhpcyBvcHRpb24gZG9lcyBub3Qgc3VwcHJlc3MgdGhlIHByZXByb2Nlc3NvcidzIGRlYnVnIG91dHB1dCwgc3VjaCBhcworXCZcZkJcLWRNXGZSLiAgVG8gYXZvaWQgbWl4aW5nIHN1Y2ggZGVidWcgb3V0cHV0IHdpdGggdGhlIGRlcGVuZGVuY3kKK3J1bGVzIHlvdSBzaG91bGQgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBkZXBlbmRlbmN5IG91dHB1dCBmaWxlIHdpdGgKK1wmXGZCXC1NRlxmUiwgb3IgdXNlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGxpa2UKK1wmXGZCXHMtMURFUEVOREVOQ0lFU19PVVRQVVRcczBcZlIuICBEZWJ1ZyBvdXRwdXQKK3dpbGwgc3RpbGwgYmUgc2VudCB0byB0aGUgcmVndWxhciBvdXRwdXQgc3RyZWFtIGFzIG5vcm1hbC4KKy5TcAorUGFzc2luZyBcZkJcLU1cZlIgdG8gdGhlIGRyaXZlciBpbXBsaWVzIFxmQlwtRVxmUiwgYW5kIHN1cHByZXNzZXMKK3dhcm5pbmdzIHdpdGggYW4gaW1wbGljaXQgXGZCXC13XGZSLgorLklQICJcZkJcLU1NXGZSIiA0CisuSVggSXRlbSAiLU1NIgorTGlrZSBcZkJcLU1cZlIgYnV0IGRvIG5vdCBtZW50aW9uIGhlYWRlciBmaWxlcyB0aGF0IGFyZSBmb3VuZCBpbgorc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllcywgbm9yIGhlYWRlciBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCwKK2RpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gc3VjaCBhIGhlYWRlci4KKy5TcAorVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNob2ljZSBvZiBhbmdsZSBicmFja2V0cyBvciBkb3VibGUgcXVvdGVzIGluIGFuCitcJlxmQiNpbmNsdWRlXGZSIGRpcmVjdGl2ZSBkb2VzIG5vdCBpbiBpdHNlbGYgZGV0ZXJtaW5lIHdoZXRoZXIgdGhhdAoraGVhZGVyIHdpbGwgYXBwZWFyIGluIFxmQlwtTU1cZlIgZGVwZW5kZW5jeSBvdXRwdXQuICBUaGlzIGlzIGEKK3NsaWdodCBjaGFuZ2UgaW4gc2VtYW50aWNzIGZyb20gXHMtMUdDQ1xzMCB2ZXJzaW9ucyAzLjAgYW5kIGVhcmxpZXIuCisuSVAgIlxmQlwtTUZcZlIgXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1NRiBmaWxlIgorV2hlbiB1c2VkIHdpdGggXGZCXC1NXGZSIG9yIFxmQlwtTU1cZlIsIHNwZWNpZmllcyBhCitmaWxlIHRvIHdyaXRlIHRoZSBkZXBlbmRlbmNpZXMgdG8uICBJZiBubyBcZkJcLU1GXGZSIHN3aXRjaCBpcyBnaXZlbgordGhlIHByZXByb2Nlc3NvciBzZW5kcyB0aGUgcnVsZXMgdG8gdGhlIHNhbWUgcGxhY2UgaXQgd291bGQgaGF2ZSBzZW50CitwcmVwcm9jZXNzZWQgb3V0cHV0LgorLlNwCitXaGVuIHVzZWQgd2l0aCB0aGUgZHJpdmVyIG9wdGlvbnMgXGZCXC1NRFxmUiBvciBcZkJcLU1NRFxmUiwKK1wmXGZCXC1NRlxmUiBvdmVycmlkZXMgdGhlIGRlZmF1bHQgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZS4KKy5JUCAiXGZCXC1NR1xmUiIgNAorLklYIEl0ZW0gIi1NRyIKK0luIGNvbmp1bmN0aW9uIHdpdGggYW4gb3B0aW9uIHN1Y2ggYXMgXGZCXC1NXGZSIHJlcXVlc3RpbmcKK2RlcGVuZGVuY3kgZ2VuZXJhdGlvbiwgXGZCXC1NR1xmUiBhc3N1bWVzIG1pc3NpbmcgaGVhZGVyIGZpbGVzIGFyZQorZ2VuZXJhdGVkIGZpbGVzIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGRlcGVuZGVuY3kgbGlzdCB3aXRob3V0IHJhaXNpbmcKK2FuIGVycm9yLiAgVGhlIGRlcGVuZGVuY3kgZmlsZW5hbWUgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUKK1wmXGYoQ1dcKihDYCNpbmNsdWRlXCooQydcZlIgZGlyZWN0aXZlIHdpdGhvdXQgcHJlcGVuZGluZyBhbnkgcGF0aC4gIFxmQlwtTUdcZlIKK2Fsc28gc3VwcHJlc3NlcyBwcmVwcm9jZXNzZWQgb3V0cHV0LCBhcyBhIG1pc3NpbmcgaGVhZGVyIGZpbGUgcmVuZGVycwordGhpcyB1c2VsZXNzLgorLlNwCitUaGlzIGZlYXR1cmUgaXMgdXNlZCBpbiBhdXRvbWF0aWMgdXBkYXRpbmcgb2YgbWFrZWZpbGVzLgorLklQICJcZkJcLU1QXGZSIiA0CisuSVggSXRlbSAiLU1QIgorVGhpcyBvcHRpb24gaW5zdHJ1Y3RzIFxzLTFDUFBcczAgdG8gYWRkIGEgcGhvbnkgdGFyZ2V0IGZvciBlYWNoIGRlcGVuZGVuY3kKK290aGVyIHRoYW4gdGhlIG1haW4gZmlsZSwgY2F1c2luZyBlYWNoIHRvIGRlcGVuZCBvbiBub3RoaW5nLiAgVGhlc2UKK2R1bW15IHJ1bGVzIHdvcmsgYXJvdW5kIGVycm9ycyBcZkJtYWtlXGZSIGdpdmVzIGlmIHlvdSByZW1vdmUgaGVhZGVyCitmaWxlcyB3aXRob3V0IHVwZGF0aW5nIHRoZSBcZklNYWtlZmlsZVxmUiB0byBtYXRjaC4KKy5TcAorVGhpcyBpcyB0eXBpY2FsIG91dHB1dDoKKy5TcAorLlZiIDEKK1wmICAgICAgICB0ZXN0Lm86IHRlc3QuYyB0ZXN0LmgKK1wmICAgICAgICAKK1wmICAgICAgICB0ZXN0Lmg6CisuVmUKKy5JUCAiXGZCXC1NVFxmUiBcZkl0YXJnZXRcZlIiIDQKKy5JWCBJdGVtICItTVQgdGFyZ2V0IgorQ2hhbmdlIHRoZSB0YXJnZXQgb2YgdGhlIHJ1bGUgZW1pdHRlZCBieSBkZXBlbmRlbmN5IGdlbmVyYXRpb24uICBCeQorZGVmYXVsdCBccy0xQ1BQXHMwIHRha2VzIHRoZSBuYW1lIG9mIHRoZSBtYWluIGlucHV0IGZpbGUsIGRlbGV0ZXMgYW55CitkaXJlY3RvcnkgY29tcG9uZW50cyBhbmQgYW55IGZpbGUgc3VmZml4IHN1Y2ggYXMgXGZCLmNcZlIsIGFuZAorYXBwZW5kcyB0aGUgcGxhdGZvcm0ncyB1c3VhbCBvYmplY3Qgc3VmZml4LiAgVGhlIHJlc3VsdCBpcyB0aGUgdGFyZ2V0LgorLlNwCitBbiBcZkJcLU1UXGZSIG9wdGlvbiB3aWxsIHNldCB0aGUgdGFyZ2V0IHRvIGJlIGV4YWN0bHkgdGhlIHN0cmluZyB5b3UKK3NwZWNpZnkuICBJZiB5b3Ugd2FudCBtdWx0aXBsZSB0YXJnZXRzLCB5b3UgY2FuIHNwZWNpZnkgdGhlbSBhcyBhIHNpbmdsZQorYXJndW1lbnQgdG8gXGZCXC1NVFxmUiwgb3IgdXNlIG11bHRpcGxlIFxmQlwtTVRcZlIgb3B0aW9ucy4KKy5TcAorRm9yIGV4YW1wbGUsIFxmQlwtTVRcICckKG9ianBmeClmb28ubydcZlIgbWlnaHQgZ2l2ZQorLlNwCisuVmIgMQorXCYgICAgICAgICQob2JqcGZ4KWZvby5vOiBmb28uYworLlZlCisuSVAgIlxmQlwtTVFcZlIgXGZJdGFyZ2V0XGZSIiA0CisuSVggSXRlbSAiLU1RIHRhcmdldCIKK1NhbWUgYXMgXGZCXC1NVFxmUiwgYnV0IGl0IHF1b3RlcyBhbnkgY2hhcmFjdGVycyB3aGljaCBhcmUgc3BlY2lhbCB0bworTWFrZS4gIFxmQlwtTVFcICckKG9ianBmeClmb28ubydcZlIgZ2l2ZXMKKy5TcAorLlZiIDEKK1wmICAgICAgICAkJChvYmpwZngpZm9vLm86IGZvby5jCisuVmUKKy5TcAorVGhlIGRlZmF1bHQgdGFyZ2V0IGlzIGF1dG9tYXRpY2FsbHkgcXVvdGVkLCBhcyBpZiBpdCB3ZXJlIGdpdmVuIHdpdGgKK1wmXGZCXC1NUVxmUi4KKy5JUCAiXGZCXC1NRFxmUiIgNAorLklYIEl0ZW0gIi1NRCIKK1wmXGZCXC1NRFxmUiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtTSBcLU1GXGZSIFxmSWZpbGVcZlIsIGV4Y2VwdCB0aGF0CitcJlxmQlwtRVxmUiBpcyBub3QgaW1wbGllZC4gIFRoZSBkcml2ZXIgZGV0ZXJtaW5lcyBcZklmaWxlXGZSIGJhc2VkIG9uCit3aGV0aGVyIGFuIFxmQlwtb1xmUiBvcHRpb24gaXMgZ2l2ZW4uICBJZiBpdCBpcywgdGhlIGRyaXZlciB1c2VzIGl0cworYXJndW1lbnQgYnV0IHdpdGggYSBzdWZmaXggb2YgXGZJLmRcZlIsIG90aGVyd2lzZSBpdCB0YWtlcyB0aGUgbmFtZQorb2YgdGhlIGlucHV0IGZpbGUsIHJlbW92ZXMgYW55IGRpcmVjdG9yeSBjb21wb25lbnRzIGFuZCBzdWZmaXgsIGFuZAorYXBwbGllcyBhIFxmSS5kXGZSIHN1ZmZpeC4KKy5TcAorSWYgXGZCXC1NRFxmUiBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggXGZCXC1FXGZSLCBhbnkKK1wmXGZCXC1vXGZSIHN3aXRjaCBpcyB1bmRlcnN0b29kIHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGUsIGJ1dCBpZiB1c2VkIHdpdGhvdXQgXGZCXC1FXGZSLCBlYWNoIFxmQlwtb1xmUgoraXMgdW5kZXJzdG9vZCB0byBzcGVjaWZ5IGEgdGFyZ2V0IG9iamVjdCBmaWxlLgorLlNwCitTaW5jZSBcZkJcLUVcZlIgaXMgbm90IGltcGxpZWQsIFxmQlwtTURcZlIgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUKK2EgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZSBhcyBhIHNpZGUtZWZmZWN0IG9mIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLgorLklQICJcZkJcLU1NRFxmUiIgNAorLklYIEl0ZW0gIi1NTUQiCitMaWtlIFxmQlwtTURcZlIgZXhjZXB0IG1lbnRpb24gb25seSB1c2VyIGhlYWRlciBmaWxlcywgbm90IHN5c3RlbQoraGVhZGVyIGZpbGVzLgorLklQICJcZkJcLXggY1xmUiIgNAorLklYIEl0ZW0gIi14IGMiCisuUEQgMAorLklQICJcZkJcLXggYysrXGZSIiA0CisuSVggSXRlbSAiLXggYysrIgorLklQICJcZkJcLXggb2JqZWN0aXZlLWNcZlIiIDQKKy5JWCBJdGVtICIteCBvYmplY3RpdmUtYyIKKy5JUCAiXGZCXC14IGFzc2VtYmxlci13aXRoLWNwcFxmUiIgNAorLklYIEl0ZW0gIi14IGFzc2VtYmxlci13aXRoLWNwcCIKKy5QRAorU3BlY2lmeSB0aGUgc291cmNlIGxhbmd1YWdlOiBDLCBcKihDKywgT2JqZWN0aXZlLUMsIG9yIGFzc2VtYmx5LiAgVGhpcyBoYXMKK25vdGhpbmcgdG8gZG8gd2l0aCBzdGFuZGFyZHMgY29uZm9ybWFuY2Ugb3IgZXh0ZW5zaW9uczsgaXQgbWVyZWx5CitzZWxlY3RzIHdoaWNoIGJhc2Ugc3ludGF4IHRvIGV4cGVjdC4gIElmIHlvdSBnaXZlIG5vbmUgb2YgdGhlc2Ugb3B0aW9ucywKK2NwcCB3aWxsIGRlZHVjZSB0aGUgbGFuZ3VhZ2UgZnJvbSB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBzb3VyY2UgZmlsZToKK1wmXGZCLmNcZlIsIFxmQi5jY1xmUiwgXGZCLm1cZlIsIG9yIFxmQi5TXGZSLiAgU29tZSBvdGhlciBjb21tb24KK2V4dGVuc2lvbnMgZm9yIFwqKEMrIGFuZCBhc3NlbWJseSBhcmUgYWxzbyByZWNvZ25pemVkLiAgSWYgY3BwIGRvZXMgbm90CityZWNvZ25pemUgdGhlIGV4dGVuc2lvbiwgaXQgd2lsbCB0cmVhdCB0aGUgZmlsZSBhcyBDOyB0aGlzIGlzIHRoZSBtb3N0CitnZW5lcmljIG1vZGUuCisuU3AKK1wmXGZJTm90ZTpcZlIgUHJldmlvdXMgdmVyc2lvbnMgb2YgY3BwIGFjY2VwdGVkIGEgXGZCXC1sYW5nXGZSIG9wdGlvbgord2hpY2ggc2VsZWN0ZWQgYm90aCB0aGUgbGFuZ3VhZ2UgYW5kIHRoZSBzdGFuZGFyZHMgY29uZm9ybWFuY2UgbGV2ZWwuCitUaGlzIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLCBiZWNhdXNlIGl0IGNvbmZsaWN0cyB3aXRoIHRoZSBcZkJcLWxcZlIKK29wdGlvbi4KKy5JUCAiXGZCXC1zdGQ9XGZSXGZJc3RhbmRhcmRcZlIiIDQKKy5JWCBJdGVtICItc3RkPXN0YW5kYXJkIgorLlBEIDAKKy5JUCAiXGZCXC1hbnNpXGZSIiA0CisuSVggSXRlbSAiLWFuc2kiCisuUEQKK1NwZWNpZnkgdGhlIHN0YW5kYXJkIHRvIHdoaWNoIHRoZSBjb2RlIHNob3VsZCBjb25mb3JtLiAgQ3VycmVudGx5IFxzLTFDUFBcczAKK2tub3dzIGFib3V0IEMgYW5kIFwqKEMrIHN0YW5kYXJkczsgb3RoZXJzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorLlNwCitcJlxmSXN0YW5kYXJkXGZSCittYXkgYmUgb25lIG9mOgorLlJTIDQKKy5pZSBuIC5JUCAiIiJjOTAiIiIgNAorLmVsIC5JUCAiXGYoQ1djOTBcZlIiIDQKKy5JWCBJdGVtICJjOTAiCisuUEQgMAorLmllIG4gLklQICIiImM4OSIiIiA0CisuZWwgLklQICJcZihDV2M4OVxmUiIgNAorLklYIEl0ZW0gImM4OSIKKy5pZSBuIC5JUCAiIiJpc285ODk5OjE5OTAiIiIgNAorLmVsIC5JUCAiXGYoQ1dpc285ODk5OjE5OTBcZlIiIDQKKy5JWCBJdGVtICJpc285ODk5OjE5OTAiCisuUEQKK1RoZSBccy0xSVNPXHMwIEMgc3RhbmRhcmQgZnJvbSAxOTkwLiAgXGZCYzkwXGZSIGlzIHRoZSBjdXN0b21hcnkgc2hvcnRoYW5kIGZvcgordGhpcyB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZC4KKy5TcAorVGhlIFxmQlwtYW5zaVxmUiBvcHRpb24gaXMgZXF1aXZhbGVudCB0byBcZkJcLXN0ZD1jOTBcZlIuCisuaWUgbiAuSVAgIiIiaXNvOTg5OToxOTk0MDkiIiIgNAorLmVsIC5JUCAiXGYoQ1dpc285ODk5OjE5OTQwOVxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5NDA5IgorVGhlIDE5OTAgQyBzdGFuZGFyZCwgYXMgYW1lbmRlZCBpbiAxOTk0LgorLmllIG4gLklQICIiImlzbzk4OTk6MTk5OSIiIiA0CisuZWwgLklQICJcZihDV2lzbzk4OTk6MTk5OVxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5OSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiYzk5IiIiIDQKKy5lbCAuSVAgIlxmKENXYzk5XGZSIiA0CisuSVggSXRlbSAiYzk5IgorLmllIG4gLklQICIiImlzbzk4OTk6MTk5eCIiIiA0CisuZWwgLklQICJcZihDV2lzbzk4OTk6MTk5eFxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5eCIKKy5pZSBuIC5JUCAiIiJjOXgiIiIgNAorLmVsIC5JUCAiXGYoQ1djOXhcZlIiIDQKKy5JWCBJdGVtICJjOXgiCisuUEQKK1RoZSByZXZpc2VkIFxzLTFJU09cczAgQyBzdGFuZGFyZCwgcHVibGlzaGVkIGluIERlY2VtYmVyIDE5OTkuICBCZWZvcmUKK3B1YmxpY2F0aW9uLCB0aGlzIHdhcyBrbm93biBhcyBDOVguCisuaWUgbiAuSVAgIiIiaXNvOTg5OToyMDExIiIiIDQKKy5lbCAuSVAgIlxmKENXaXNvOTg5OToyMDExXGZSIiA0CisuSVggSXRlbSAiaXNvOTg5OToyMDExIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJjMTEiIiIgNAorLmVsIC5JUCAiXGYoQ1djMTFcZlIiIDQKKy5JWCBJdGVtICJjMTEiCisuaWUgbiAuSVAgIiIiYzF4IiIiIDQKKy5lbCAuSVAgIlxmKENXYzF4XGZSIiA0CisuSVggSXRlbSAiYzF4IgorLlBECitUaGUgcmV2aXNlZCBccy0xSVNPXHMwIEMgc3RhbmRhcmQsIHB1Ymxpc2hlZCBpbiBEZWNlbWJlciAyMDExLiAgQmVmb3JlCitwdWJsaWNhdGlvbiwgdGhpcyB3YXMga25vd24gYXMgQzFYLgorLmllIG4gLklQICIiImdudTkwIiIiIDQKKy5lbCAuSVAgIlxmKENXZ251OTBcZlIiIDQKKy5JWCBJdGVtICJnbnU5MCIKKy5QRCAwCisuaWUgbiAuSVAgIiIiZ251ODkiIiIgNAorLmVsIC5JUCAiXGYoQ1dnbnU4OVxmUiIgNAorLklYIEl0ZW0gImdudTg5IgorLlBECitUaGUgMTk5MCBDIHN0YW5kYXJkIHBsdXMgXHMtMUdOVVxzMCBleHRlbnNpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5pZSBuIC5JUCAiIiJnbnU5OSIiIiA0CisuZWwgLklQICJcZihDV2dudTk5XGZSIiA0CisuSVggSXRlbSAiZ251OTkiCisuUEQgMAorLmllIG4gLklQICIiImdudTl4IiIiIDQKKy5lbCAuSVAgIlxmKENXZ251OXhcZlIiIDQKKy5JWCBJdGVtICJnbnU5eCIKKy5QRAorVGhlIDE5OTkgQyBzdGFuZGFyZCBwbHVzIFxzLTFHTlVcczAgZXh0ZW5zaW9ucy4KKy5pZSBuIC5JUCAiIiJnbnUxMSIiIiA0CisuZWwgLklQICJcZihDV2dudTExXGZSIiA0CisuSVggSXRlbSAiZ251MTEiCisuUEQgMAorLmllIG4gLklQICIiImdudTF4IiIiIDQKKy5lbCAuSVAgIlxmKENXZ251MXhcZlIiIDQKKy5JWCBJdGVtICJnbnUxeCIKKy5QRAorVGhlIDIwMTEgQyBzdGFuZGFyZCBwbHVzIFxzLTFHTlVcczAgZXh0ZW5zaW9ucy4KKy5pZSBuIC5JUCAiIiJjKys5OCIiIiA0CisuZWwgLklQICJcZihDV2MrKzk4XGZSIiA0CisuSVggSXRlbSAiYysrOTgiCitUaGUgMTk5OCBccy0xSVNPXHMwIFwqKEMrIHN0YW5kYXJkIHBsdXMgYW1lbmRtZW50cy4KKy5pZSBuIC5JUCAiIiJnbnUrKzk4IiIiIDQKKy5lbCAuSVAgIlxmKENXZ251Kys5OFxmUiIgNAorLklYIEl0ZW0gImdudSsrOTgiCitUaGUgc2FtZSBhcyBcZkJcLXN0ZD1jKys5OFxmUiBwbHVzIFxzLTFHTlVcczAgZXh0ZW5zaW9ucy4gIFRoaXMgaXMgdGhlCitkZWZhdWx0IGZvciBcKihDKyBjb2RlLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtSVwtXGZSIiA0CisuSVggSXRlbSAiLUktIgorU3BsaXQgdGhlIGluY2x1ZGUgcGF0aC4gIEFueSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgd2l0aCBcZkJcLUlcZlIKK29wdGlvbnMgYmVmb3JlIFxmQlwtSVwtXGZSIGFyZSBzZWFyY2hlZCBvbmx5IGZvciBoZWFkZXJzIHJlcXVlc3RlZCB3aXRoCitcJlxmKENXXCooQ2AjaW5jbHVkZVwgIlxmKENJZmlsZVxmKENXIlwqKEMnXGZSOyB0aGV5IGFyZSBub3Qgc2VhcmNoZWQgZm9yCitcJlxmKENXXCooQ2AjaW5jbHVkZVwgPFxmKENJZmlsZVxmKENXPlwqKEMnXGZSLiAgSWYgYWRkaXRpb25hbCBkaXJlY3RvcmllcyBhcmUKK3NwZWNpZmllZCB3aXRoIFxmQlwtSVxmUiBvcHRpb25zIGFmdGVyIHRoZSBcZkJcLUlcLVxmUiwgdGhvc2UKK2RpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBmb3IgYWxsIFxmQiNpbmNsdWRlXGZSIGRpcmVjdGl2ZXMuCisuU3AKK0luIGFkZGl0aW9uLCBcZkJcLUlcLVxmUiBpbmhpYml0cyB0aGUgdXNlIG9mIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQKK2ZpbGUgZGlyZWN0b3J5IGFzIHRoZSBmaXJzdCBzZWFyY2ggZGlyZWN0b3J5IGZvciBcZihDV1wqKENgI2luY2x1ZGVcICJcZihDSWZpbGVcZihDVyJcKihDJ1xmUi4KKy5TcAorVGhpcyBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4KKy5JUCAiXGZCXC1ub3N0ZGluY1xmUiIgNAorLklYIEl0ZW0gIi1ub3N0ZGluYyIKK0RvIG5vdCBzZWFyY2ggdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcyBmb3IgaGVhZGVyIGZpbGVzLgorT25seSB0aGUgZGlyZWN0b3JpZXMgeW91IGhhdmUgc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSIG9wdGlvbnMKKyhhbmQgdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBmaWxlLCBpZiBhcHByb3ByaWF0ZSkgYXJlIHNlYXJjaGVkLgorLklQICJcZkJcLW5vc3RkaW5jKytcZlIiIDQKKy5JWCBJdGVtICItbm9zdGRpbmMrKyIKK0RvIG5vdCBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcyBpbiB0aGUgXCooQytcLXNwZWNpZmljIHN0YW5kYXJkIGRpcmVjdG9yaWVzLAorYnV0IGRvIHN0aWxsIHNlYXJjaCB0aGUgb3RoZXIgc3RhbmRhcmQgZGlyZWN0b3JpZXMuICAoVGhpcyBvcHRpb24gaXMKK3VzZWQgd2hlbiBidWlsZGluZyB0aGUgXCooQysgbGlicmFyeS4pCisuSVAgIlxmQlwtaW5jbHVkZVxmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLWluY2x1ZGUgZmlsZSIKK1Byb2Nlc3MgXGZJZmlsZVxmUiBhcyBpZiBcZihDV1wqKENgI2luY2x1ZGUgImZpbGUiXCooQydcZlIgYXBwZWFyZWQgYXMgdGhlIGZpcnN0CitsaW5lIG9mIHRoZSBwcmltYXJ5IHNvdXJjZSBmaWxlLiAgSG93ZXZlciwgdGhlIGZpcnN0IGRpcmVjdG9yeSBzZWFyY2hlZAorZm9yIFxmSWZpbGVcZlIgaXMgdGhlIHByZXByb2Nlc3NvcidzIHdvcmtpbmcgZGlyZWN0b3J5IFxmSWluc3RlYWQgb2ZcZlIKK3RoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbWFpbiBzb3VyY2UgZmlsZS4gIElmIG5vdCBmb3VuZCB0aGVyZSwgaXQKK2lzIHNlYXJjaGVkIGZvciBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBcZihDV1wqKENgI2luY2x1ZGUgIi4uLiJcKihDJ1xmUiBzZWFyY2gKK2NoYWluIGFzIG5vcm1hbC4KKy5TcAorSWYgbXVsdGlwbGUgXGZCXC1pbmNsdWRlXGZSIG9wdGlvbnMgYXJlIGdpdmVuLCB0aGUgZmlsZXMgYXJlIGluY2x1ZGVkCitpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5JUCAiXGZCXC1pbWFjcm9zXGZSIFxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICItaW1hY3JvcyBmaWxlIgorRXhhY3RseSBsaWtlIFxmQlwtaW5jbHVkZVxmUiwgZXhjZXB0IHRoYXQgYW55IG91dHB1dCBwcm9kdWNlZCBieQorc2Nhbm5pbmcgXGZJZmlsZVxmUiBpcyB0aHJvd24gYXdheS4gIE1hY3JvcyBpdCBkZWZpbmVzIHJlbWFpbiBkZWZpbmVkLgorVGhpcyBhbGxvd3MgeW91IHRvIGFjcXVpcmUgYWxsIHRoZSBtYWNyb3MgZnJvbSBhIGhlYWRlciB3aXRob3V0IGFsc28KK3Byb2Nlc3NpbmcgaXRzIGRlY2xhcmF0aW9ucy4KKy5TcAorQWxsIGZpbGVzIHNwZWNpZmllZCBieSBcZkJcLWltYWNyb3NcZlIgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYWxsIGZpbGVzCitzcGVjaWZpZWQgYnkgXGZCXC1pbmNsdWRlXGZSLgorLklQICJcZkJcLWlkaXJhZnRlclxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaWRpcmFmdGVyIGRpciIKK1NlYXJjaCBcZklkaXJcZlIgZm9yIGhlYWRlciBmaWxlcywgYnV0IGRvIGl0IFxmSWFmdGVyXGZSIGFsbAorZGlyZWN0b3JpZXMgc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSIGFuZCB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzCitoYXZlIGJlZW4gZXhoYXVzdGVkLiAgXGZJZGlyXGZSIGlzIHRyZWF0ZWQgYXMgYSBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCitJZiBcZklkaXJcZlIgYmVnaW5zIHdpdGggXGYoQ1dcKihDYD1cKihDJ1xmUiwgdGhlbiB0aGUgXGYoQ1dcKihDYD1cKihDJ1xmUiB3aWxsIGJlIHJlcGxhY2VkCitieSB0aGUgc3lzcm9vdCBwcmVmaXg7IHNlZSBcZkJcLVwtc3lzcm9vdFxmUiBhbmQgXGZCXC1pc3lzcm9vdFxmUi4KKy5JUCAiXGZCXC1pcHJlZml4XGZSIFxmSXByZWZpeFxmUiIgNAorLklYIEl0ZW0gIi1pcHJlZml4IHByZWZpeCIKK1NwZWNpZnkgXGZJcHJlZml4XGZSIGFzIHRoZSBwcmVmaXggZm9yIHN1YnNlcXVlbnQgXGZCXC1pd2l0aHByZWZpeFxmUgorb3B0aW9ucy4gIElmIHRoZSBwcmVmaXggcmVwcmVzZW50cyBhIGRpcmVjdG9yeSwgeW91IHNob3VsZCBpbmNsdWRlIHRoZQorZmluYWwgXGZCL1xmUi4KKy5JUCAiXGZCXC1pd2l0aHByZWZpeFxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXdpdGhwcmVmaXggZGlyIgorLlBEIDAKKy5JUCAiXGZCXC1pd2l0aHByZWZpeGJlZm9yZVxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXdpdGhwcmVmaXhiZWZvcmUgZGlyIgorLlBECitBcHBlbmQgXGZJZGlyXGZSIHRvIHRoZSBwcmVmaXggc3BlY2lmaWVkIHByZXZpb3VzbHkgd2l0aAorXCZcZkJcLWlwcmVmaXhcZlIsIGFuZCBhZGQgdGhlIHJlc3VsdGluZyBkaXJlY3RvcnkgdG8gdGhlIGluY2x1ZGUgc2VhcmNoCitwYXRoLiAgXGZCXC1pd2l0aHByZWZpeGJlZm9yZVxmUiBwdXRzIGl0IGluIHRoZSBzYW1lIHBsYWNlIFxmQlwtSVxmUgord291bGQ7IFxmQlwtaXdpdGhwcmVmaXhcZlIgcHV0cyBpdCB3aGVyZSBcZkJcLWlkaXJhZnRlclxmUiB3b3VsZC4KKy5JUCAiXGZCXC1pc3lzcm9vdFxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXN5c3Jvb3QgZGlyIgorVGhpcyBvcHRpb24gaXMgbGlrZSB0aGUgXGZCXC1cLXN5c3Jvb3RcZlIgb3B0aW9uLCBidXQgYXBwbGllcyBvbmx5IHRvCitoZWFkZXIgZmlsZXMgKGV4Y2VwdCBmb3IgRGFyd2luIHRhcmdldHMsIHdoZXJlIGl0IGFwcGxpZXMgdG8gYm90aCBoZWFkZXIKK2ZpbGVzIGFuZCBsaWJyYXJpZXMpLiAgU2VlIHRoZSBcZkJcLVwtc3lzcm9vdFxmUiBvcHRpb24gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorLklQICJcZkJcLWltdWx0aWxpYlxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaW11bHRpbGliIGRpciIKK1VzZSBcZklkaXJcZlIgYXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCit0YXJnZXQtc3BlY2lmaWMgXCooQysgaGVhZGVycy4KKy5JUCAiXGZCXC1pc3lzdGVtXGZSIFxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pc3lzdGVtIGRpciIKK1NlYXJjaCBcZklkaXJcZlIgZm9yIGhlYWRlciBmaWxlcywgYWZ0ZXIgYWxsIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieQorXCZcZkJcLUlcZlIgYnV0IGJlZm9yZSB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzLiAgTWFyayBpdAorYXMgYSBzeXN0ZW0gZGlyZWN0b3J5LCBzbyB0aGF0IGl0IGdldHMgdGhlIHNhbWUgc3BlY2lhbCB0cmVhdG1lbnQgYXMKK2lzIGFwcGxpZWQgdG8gdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4KKy5TcAorSWYgXGZJZGlyXGZSIGJlZ2lucyB3aXRoIFxmKENXXCooQ2A9XCooQydcZlIsIHRoZW4gdGhlIFxmKENXXCooQ2A9XCooQydcZlIgd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgXGZCXC1cLXN5c3Jvb3RcZlIgYW5kIFxmQlwtaXN5c3Jvb3RcZlIuCisuSVAgIlxmQlwtaXF1b3RlXGZSIFxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pcXVvdGUgZGlyIgorU2VhcmNoIFxmSWRpclxmUiBvbmx5IGZvciBoZWFkZXIgZmlsZXMgcmVxdWVzdGVkIHdpdGgKK1wmXGYoQ1dcKihDYCNpbmNsdWRlXCAiXGYoQ0lmaWxlXGYoQ1ciXCooQydcZlI7IHRoZXkgYXJlIG5vdCBzZWFyY2hlZCBmb3IKK1wmXGYoQ1dcKihDYCNpbmNsdWRlXCA8XGYoQ0lmaWxlXGYoQ1c+XCooQydcZlIsIGJlZm9yZSBhbGwgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5CitcJlxmQlwtSVxmUiBhbmQgYmVmb3JlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMuCisuU3AKK0lmIFxmSWRpclxmUiBiZWdpbnMgd2l0aCBcZihDV1wqKENgPVwqKEMnXGZSLCB0aGVuIHRoZSBcZihDV1wqKENgPVwqKEMnXGZSIHdpbGwgYmUgcmVwbGFjZWQKK2J5IHRoZSBzeXNyb290IHByZWZpeDsgc2VlIFxmQlwtXC1zeXNyb290XGZSIGFuZCBcZkJcLWlzeXNyb290XGZSLgorLklQICJcZkJcLWZkaXJlY3RpdmVzXC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLWZkaXJlY3RpdmVzLW9ubHkiCitXaGVuIHByZXByb2Nlc3NpbmcsIGhhbmRsZSBkaXJlY3RpdmVzLCBidXQgZG8gbm90IGV4cGFuZCBtYWNyb3MuCisuU3AKK1RoZSBvcHRpb24ncyBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBcZkJcLUVcZlIgYW5kIFxmQlwtZnByZXByb2Nlc3NlZFxmUgorb3B0aW9ucy4KKy5TcAorV2l0aCBcZkJcLUVcZlIsIHByZXByb2Nlc3NpbmcgaXMgbGltaXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgZGlyZWN0aXZlcworc3VjaCBhcyBcZihDV1wqKENgI2RlZmluZVwqKEMnXGZSLCBcZihDV1wqKENgI2lmZGVmXCooQydcZlIsIGFuZCBcZihDV1wqKENgI2Vycm9yXCooQydcZlIuICBPdGhlcgorcHJlcHJvY2Vzc29yIG9wZXJhdGlvbnMsIHN1Y2ggYXMgbWFjcm8gZXhwYW5zaW9uIGFuZCB0cmlncmFwaAorY29udmVyc2lvbiBhcmUgbm90IHBlcmZvcm1lZC4gIEluIGFkZGl0aW9uLCB0aGUgXGZCXC1kRFxmUiBvcHRpb24gaXMKK2ltcGxpY2l0bHkgZW5hYmxlZC4KKy5TcAorV2l0aCBcZkJcLWZwcmVwcm9jZXNzZWRcZlIsIHByZWRlZmluaXRpb24gb2YgY29tbWFuZCBsaW5lIGFuZCBtb3N0CitidWlsdGluIG1hY3JvcyBpcyBkaXNhYmxlZC4gIE1hY3JvcyBzdWNoIGFzIFxmKENXXCooQ2BfXHxfTElORV9cfF9cKihDJ1xmUiwgd2hpY2ggYXJlCitjb250ZXh0dWFsbHkgZGVwZW5kZW50LCBhcmUgaGFuZGxlZCBub3JtYWxseS4gIFRoaXMgZW5hYmxlcyBjb21waWxhdGlvbiBvZgorZmlsZXMgcHJldmlvdXNseSBwcmVwcm9jZXNzZWQgd2l0aCBcZihDV1wqKENgXC1FIFwtZmRpcmVjdGl2ZXNcLW9ubHlcKihDJ1xmUi4KKy5TcAorV2l0aCBib3RoIFxmQlwtRVxmUiBhbmQgXGZCXC1mcHJlcHJvY2Vzc2VkXGZSLCB0aGUgcnVsZXMgZm9yCitcJlxmQlwtZnByZXByb2Nlc3NlZFxmUiB0YWtlIHByZWNlZGVuY2UuICBUaGlzIGVuYWJsZXMgZnVsbCBwcmVwcm9jZXNzaW5nIG9mCitmaWxlcyBwcmV2aW91c2x5IHByZXByb2Nlc3NlZCB3aXRoIFxmKENXXCooQ2BcLUUgXC1mZGlyZWN0aXZlc1wtb25seVwqKEMnXGZSLgorLklQICJcZkJcLWZkb2xsYXJzXC1pblwtaWRlbnRpZmllcnNcZlIiIDQKKy5JWCBJdGVtICItZmRvbGxhcnMtaW4taWRlbnRpZmllcnMiCitBY2NlcHQgXGZCJFxmUiBpbiBpZGVudGlmaWVycy4KKy5JUCAiXGZCXC1mZXh0ZW5kZWRcLWlkZW50aWZpZXJzXGZSIiA0CisuSVggSXRlbSAiLWZleHRlbmRlZC1pZGVudGlmaWVycyIKK0FjY2VwdCB1bml2ZXJzYWwgY2hhcmFjdGVyIG5hbWVzIGluIGlkZW50aWZpZXJzLiAgVGhpcyBvcHRpb24gaXMKK2V4cGVyaW1lbnRhbDsgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBccy0xR0NDXHMwLCBpdCB3aWxsIGJlIGVuYWJsZWQgYnkKK2RlZmF1bHQgZm9yIEM5OSBhbmQgXCooQysuCisuSVAgIlxmQlwtZm5vXC1jYW5vbmljYWxcLXN5c3RlbVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tY2Fub25pY2FsLXN5c3RlbS1oZWFkZXJzIgorV2hlbiBwcmVwcm9jZXNzaW5nLCBkbyBub3Qgc2hvcnRlbiBzeXN0ZW0gaGVhZGVyIHBhdGhzIHdpdGggY2Fub25pY2FsaXphdGlvbi4KKy5JUCAiXGZCXC1mcHJlcHJvY2Vzc2VkXGZSIiA0CisuSVggSXRlbSAiLWZwcmVwcm9jZXNzZWQiCitJbmRpY2F0ZSB0byB0aGUgcHJlcHJvY2Vzc29yIHRoYXQgdGhlIGlucHV0IGZpbGUgaGFzIGFscmVhZHkgYmVlbgorcHJlcHJvY2Vzc2VkLiAgVGhpcyBzdXBwcmVzc2VzIHRoaW5ncyBsaWtlIG1hY3JvIGV4cGFuc2lvbiwgdHJpZ3JhcGgKK2NvbnZlcnNpb24sIGVzY2FwZWQgbmV3bGluZSBzcGxpY2luZywgYW5kIHByb2Nlc3Npbmcgb2YgbW9zdCBkaXJlY3RpdmVzLgorVGhlIHByZXByb2Nlc3NvciBzdGlsbCByZWNvZ25pemVzIGFuZCByZW1vdmVzIGNvbW1lbnRzLCBzbyB0aGF0IHlvdSBjYW4KK3Bhc3MgYSBmaWxlIHByZXByb2Nlc3NlZCB3aXRoIFxmQlwtQ1xmUiB0byB0aGUgY29tcGlsZXIgd2l0aG91dAorcHJvYmxlbXMuICBJbiB0aGlzIG1vZGUgdGhlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29yIGlzIGxpdHRsZSBtb3JlIHRoYW4KK2EgdG9rZW5pemVyIGZvciB0aGUgZnJvbnQgZW5kcy4KKy5TcAorXCZcZkJcLWZwcmVwcm9jZXNzZWRcZlIgaXMgaW1wbGljaXQgaWYgdGhlIGlucHV0IGZpbGUgaGFzIG9uZSBvZiB0aGUKK2V4dGVuc2lvbnMgXGZCLmlcZlIsIFxmQi5paVxmUiBvciBcZkIubWlcZlIuICBUaGVzZSBhcmUgdGhlCitleHRlbnNpb25zIHRoYXQgXHMtMUdDQ1xzMCB1c2VzIGZvciBwcmVwcm9jZXNzZWQgZmlsZXMgY3JlYXRlZCBieQorXCZcZkJcLXNhdmVcLXRlbXBzXGZSLgorLklQICJcZkJcLWZ0YWJzdG9wPVxmUlxmSXdpZHRoXGZSIiA0CisuSVggSXRlbSAiLWZ0YWJzdG9wPXdpZHRoIgorU2V0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRhYiBzdG9wcy4gIFRoaXMgaGVscHMgdGhlIHByZXByb2Nlc3NvciByZXBvcnQKK2NvcnJlY3QgY29sdW1uIG51bWJlcnMgaW4gd2FybmluZ3Mgb3IgZXJyb3JzLCBldmVuIGlmIHRhYnMgYXBwZWFyIG9uIHRoZQorbGluZS4gIElmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gMTAwLCB0aGUgb3B0aW9uIGlzCitpZ25vcmVkLiAgVGhlIGRlZmF1bHQgaXMgOC4KKy5JUCAiXGZCXC1mZGVidWdcLWNwcFxmUiIgNAorLklYIEl0ZW0gIi1mZGVidWctY3BwIgorVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBccy0xR0NDXHMwLiAgV2hlbiB1c2VkIHdpdGgKK1wmXGZCXC1FXGZSLCBkdW1wcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgbG9jYXRpb24gbWFwcy4gIEV2ZXJ5Cit0b2tlbiBpbiB0aGUgb3V0cHV0IGlzIHByZWNlZGVkIGJ5IHRoZSBkdW1wIG9mIHRoZSBtYXAgaXRzIGxvY2F0aW9uCitiZWxvbmdzIHRvLiAgVGhlIGR1bXAgb2YgdGhlIG1hcCBob2xkaW5nIHRoZSBsb2NhdGlvbiBvZiBhIHRva2VuIHdvdWxkCitiZToKKy5TcAorLlZiIDEKK1wmICAgICAgICB7IlAiOkY8L2ZpbGUvcGF0aD47IkYiOkY8L2luY2x1ZGVyL3BhdGg+OyJMIjo8bGluZV9udW0+OyJDIjo8Y29sX251bT47IlMiOjxzeXN0ZW1faGVhZGVyX3A+OyJNIjo8bWFwX2FkZHJlc3M+OyJFIjo8bWFjcm9fZXhwYW5zaW9uX3A+LCJsb2MiOjxsb2NhdGlvbj59CisuVmUKKy5TcAorV2hlbiB1c2VkIHdpdGhvdXQgXGZCXC1FXGZSLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorLklQICJcZkJcLWZ0cmFja1wtbWFjcm9cLWV4cGFuc2lvblxmUltcZkI9XGZSXGZJbGV2ZWxcZlJdIiA0CisuSVggSXRlbSAiLWZ0cmFjay1tYWNyby1leHBhbnNpb25bPWxldmVsXSIKK1RyYWNrIGxvY2F0aW9ucyBvZiB0b2tlbnMgYWNyb3NzIG1hY3JvIGV4cGFuc2lvbnMuIFRoaXMgYWxsb3dzIHRoZQorY29tcGlsZXIgdG8gZW1pdCBkaWFnbm9zdGljIGFib3V0IHRoZSBjdXJyZW50IG1hY3JvIGV4cGFuc2lvbiBzdGFjaword2hlbiBhIGNvbXBpbGF0aW9uIGVycm9yIG9jY3VycyBpbiBhIG1hY3JvIGV4cGFuc2lvbi4gVXNpbmcgdGhpcworb3B0aW9uIG1ha2VzIHRoZSBwcmVwcm9jZXNzb3IgYW5kIHRoZSBjb21waWxlciBjb25zdW1lIG1vcmUKK21lbW9yeS4gVGhlIFxmSWxldmVsXGZSIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBjaG9vc2UgdGhlIGxldmVsIG9mCitwcmVjaXNpb24gb2YgdG9rZW4gbG9jYXRpb24gdHJhY2tpbmcgdGh1cyBkZWNyZWFzaW5nIHRoZSBtZW1vcnkKK2NvbnN1bXB0aW9uIGlmIG5lY2Vzc2FyeS4gVmFsdWUgXGZCMFxmUiBvZiBcZklsZXZlbFxmUiBkZS1hY3RpdmF0ZXMKK3RoaXMgb3B0aW9uIGp1c3QgYXMgaWYgbm8gXGZCXC1mdHJhY2tcLW1hY3JvXC1leHBhbnNpb25cZlIgd2FzIHByZXNlbnQKK29uIHRoZSBjb21tYW5kIGxpbmUuIFZhbHVlIFxmQjFcZlIgdHJhY2tzIHRva2VucyBsb2NhdGlvbnMgaW4gYQorZGVncmFkZWQgbW9kZSBmb3IgdGhlIHNha2Ugb2YgbWluaW1hbCBtZW1vcnkgb3ZlcmhlYWQuIEluIHRoaXMgbW9kZQorYWxsIHRva2VucyByZXN1bHRpbmcgZnJvbSB0aGUgZXhwYW5zaW9uIG9mIGFuIGFyZ3VtZW50IG9mIGEKK2Z1bmN0aW9uLWxpa2UgbWFjcm8gaGF2ZSB0aGUgc2FtZSBsb2NhdGlvbi4gVmFsdWUgXGZCMlxmUiB0cmFja3MKK3Rva2VucyBsb2NhdGlvbnMgY29tcGxldGVseS4gVGhpcyB2YWx1ZSBpcyB0aGUgbW9zdCBtZW1vcnkgaHVuZ3J5LgorV2hlbiB0aGlzIG9wdGlvbiBpcyBnaXZlbiBubyBhcmd1bWVudCwgdGhlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIGlzCitcJlxmQjJcZlIuCisuU3AKK05vdGUgdGhhdCBcLWZ0cmFja1wtbWFjcm9cLWV4cGFuc2lvbj0yIGlzIGFjdGl2YXRlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLWZleGVjXC1jaGFyc2V0PVxmUlxmSWNoYXJzZXRcZlIiIDQKKy5JWCBJdGVtICItZmV4ZWMtY2hhcnNldD1jaGFyc2V0IgorU2V0IHRoZSBleGVjdXRpb24gY2hhcmFjdGVyIHNldCwgdXNlZCBmb3Igc3RyaW5nIGFuZCBjaGFyYWN0ZXIKK2NvbnN0YW50cy4gIFRoZSBkZWZhdWx0IGlzIFxzLTFVVEZcLThcczAuICBcZkljaGFyc2V0XGZSIGNhbiBiZSBhbnkgZW5jb2RpbmcKK3N1cHBvcnRlZCBieSB0aGUgc3lzdGVtJ3MgXGYoQ1dcKihDYGljb252XCooQydcZlIgbGlicmFyeSByb3V0aW5lLgorLklQICJcZkJcLWZ3aWRlXC1leGVjXC1jaGFyc2V0PVxmUlxmSWNoYXJzZXRcZlIiIDQKKy5JWCBJdGVtICItZndpZGUtZXhlYy1jaGFyc2V0PWNoYXJzZXQiCitTZXQgdGhlIHdpZGUgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQsIHVzZWQgZm9yIHdpZGUgc3RyaW5nIGFuZAorY2hhcmFjdGVyIGNvbnN0YW50cy4gIFRoZSBkZWZhdWx0IGlzIFxzLTFVVEZcLTMyXHMwIG9yIFxzLTFVVEZcLTE2XHMwLCB3aGljaGV2ZXIKK2NvcnJlc3BvbmRzIHRvIHRoZSB3aWR0aCBvZiBcZihDV1wqKENgd2NoYXJfdFwqKEMnXGZSLiAgQXMgd2l0aAorXCZcZkJcLWZleGVjXC1jaGFyc2V0XGZSLCBcZkljaGFyc2V0XGZSIGNhbiBiZSBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkCitieSB0aGUgc3lzdGVtJ3MgXGYoQ1dcKihDYGljb252XCooQydcZlIgbGlicmFyeSByb3V0aW5lOyBob3dldmVyLCB5b3Ugd2lsbCBoYXZlCitwcm9ibGVtcyB3aXRoIGVuY29kaW5ncyB0aGF0IGRvIG5vdCBmaXQgZXhhY3RseSBpbiBcZihDV1wqKENgd2NoYXJfdFwqKEMnXGZSLgorLklQICJcZkJcLWZpbnB1dFwtY2hhcnNldD1cZlJcZkljaGFyc2V0XGZSIiA0CisuSVggSXRlbSAiLWZpbnB1dC1jaGFyc2V0PWNoYXJzZXQiCitTZXQgdGhlIGlucHV0IGNoYXJhY3RlciBzZXQsIHVzZWQgZm9yIHRyYW5zbGF0aW9uIGZyb20gdGhlIGNoYXJhY3Rlcgorc2V0IG9mIHRoZSBpbnB1dCBmaWxlIHRvIHRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IFxzLTFHQ0NcczAuICBJZiB0aGUKK2xvY2FsZSBkb2VzIG5vdCBzcGVjaWZ5LCBvciBccy0xR0NDXHMwIGNhbm5vdCBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZQorbG9jYWxlLCB0aGUgZGVmYXVsdCBpcyBccy0xVVRGXC04XHMwLiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBlaXRoZXIgdGhlIGxvY2FsZQorb3IgdGhpcyBjb21tYW5kIGxpbmUgb3B0aW9uLiAgQ3VycmVudGx5IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIHRha2VzCitwcmVjZWRlbmNlIGlmIHRoZXJlJ3MgYSBjb25mbGljdC4gIFxmSWNoYXJzZXRcZlIgY2FuIGJlIGFueSBlbmNvZGluZworc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0ncyBcZihDV1wqKENgaWNvbnZcKihDJ1xmUiBsaWJyYXJ5IHJvdXRpbmUuCisuSVAgIlxmQlwtZndvcmtpbmdcLWRpcmVjdG9yeVxmUiIgNAorLklYIEl0ZW0gIi1md29ya2luZy1kaXJlY3RvcnkiCitFbmFibGUgZ2VuZXJhdGlvbiBvZiBsaW5lbWFya2VycyBpbiB0aGUgcHJlcHJvY2Vzc29yIG91dHB1dCB0aGF0IHdpbGwKK2xldCB0aGUgY29tcGlsZXIga25vdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhdCB0aGUgdGltZSBvZgorcHJlcHJvY2Vzc2luZy4gIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIHByZXByb2Nlc3NvciB3aWxsCitlbWl0LCBhZnRlciB0aGUgaW5pdGlhbCBsaW5lbWFya2VyLCBhIHNlY29uZCBsaW5lbWFya2VyIHdpdGggdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvbGxvd2VkIGJ5IHR3byBzbGFzaGVzLiAgXHMtMUdDQ1xzMCB3aWxsIHVzZSB0aGlzCitkaXJlY3RvcnksIHdoZW4gaXQncyBwcmVzZW50IGluIHRoZSBwcmVwcm9jZXNzZWQgaW5wdXQsIGFzIHRoZQorZGlyZWN0b3J5IGVtaXR0ZWQgYXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaW4gc29tZSBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGZvcm1hdHMuICBUaGlzIG9wdGlvbiBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgaWYgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBpcyBlbmFibGVkLCBidXQgdGhpcyBjYW4gYmUgaW5oaWJpdGVkIHdpdGggdGhlIG5lZ2F0ZWQKK2Zvcm0gXGZCXC1mbm9cLXdvcmtpbmdcLWRpcmVjdG9yeVxmUi4gIElmIHRoZSBcZkJcLVBcZlIgZmxhZyBpcworcHJlc2VudCBpbiB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LCBzaW5jZSBubworXCZcZihDV1wqKENgI2xpbmVcKihDJ1xmUiBkaXJlY3RpdmVzIGFyZSBlbWl0dGVkIHdoYXRzb2V2ZXIuCisuSVAgIlxmQlwtZm5vXC1zaG93XC1jb2x1bW5cZlIiIDQKKy5JWCBJdGVtICItZm5vLXNob3ctY29sdW1uIgorRG8gbm90IHByaW50IGNvbHVtbiBudW1iZXJzIGluIGRpYWdub3N0aWNzLiAgVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IGlmCitkaWFnbm9zdGljcyBhcmUgYmVpbmcgc2Nhbm5lZCBieSBhIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZQorY29sdW1uIG51bWJlcnMsIHN1Y2ggYXMgXGZCZGVqYWdudVxmUi4KKy5JUCAiXGZCXC1BXGZSIFxmSXByZWRpY2F0ZVxmUlxmQj1cZlJcZklhbnN3ZXJcZlIiIDQKKy5JWCBJdGVtICItQSBwcmVkaWNhdGU9YW5zd2VyIgorTWFrZSBhbiBhc3NlcnRpb24gd2l0aCB0aGUgcHJlZGljYXRlIFxmSXByZWRpY2F0ZVxmUiBhbmQgYW5zd2VyCitcJlxmSWFuc3dlclxmUi4gIFRoaXMgZm9ybSBpcyBwcmVmZXJyZWQgdG8gdGhlIG9sZGVyIGZvcm0gXGZCXC1BXGZSCitcJlxmSXByZWRpY2F0ZVxmUlxmQihcZlJcZklhbnN3ZXJcZlJcZkIpXGZSLCB3aGljaCBpcyBzdGlsbCBzdXBwb3J0ZWQsIGJlY2F1c2UKK2l0IGRvZXMgbm90IHVzZSBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuCisuSVAgIlxmQlwtQSBcLVxmUlxmSXByZWRpY2F0ZVxmUlxmQj1cZlJcZklhbnN3ZXJcZlIiIDQKKy5JWCBJdGVtICItQSAtcHJlZGljYXRlPWFuc3dlciIKK0NhbmNlbCBhbiBhc3NlcnRpb24gd2l0aCB0aGUgcHJlZGljYXRlIFxmSXByZWRpY2F0ZVxmUiBhbmQgYW5zd2VyCitcJlxmSWFuc3dlclxmUi4KKy5JUCAiXGZCXC1kQ0hBUlNcZlIiIDQKKy5JWCBJdGVtICItZENIQVJTIgorXCZcZklccy0xQ0hBUlNcczBcZlIgaXMgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMsCithbmQgbXVzdCBub3QgYmUgcHJlY2VkZWQgYnkgYSBzcGFjZS4gIE90aGVyIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkCitieSB0aGUgY29tcGlsZXIgcHJvcGVyLCBvciByZXNlcnZlZCBmb3IgZnV0dXJlIHZlcnNpb25zIG9mIFxzLTFHQ0NcczAsIGFuZCBzbworYXJlIHNpbGVudGx5IGlnbm9yZWQuICBJZiB5b3Ugc3BlY2lmeSBjaGFyYWN0ZXJzIHdob3NlIGJlaGF2aW9yCitjb25mbGljdHMsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorLlJTIDQKKy5JUCAiXGZCTVxmUiIgNAorLklYIEl0ZW0gIk0iCitJbnN0ZWFkIG9mIHRoZSBub3JtYWwgb3V0cHV0LCBnZW5lcmF0ZSBhIGxpc3Qgb2YgXGZCI2RlZmluZVxmUgorZGlyZWN0aXZlcyBmb3IgYWxsIHRoZSBtYWNyb3MgZGVmaW5lZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKK3ByZXByb2Nlc3NvciwgaW5jbHVkaW5nIHByZWRlZmluZWQgbWFjcm9zLiAgVGhpcyBnaXZlcyB5b3UgYSB3YXkgb2YKK2ZpbmRpbmcgb3V0IHdoYXQgaXMgcHJlZGVmaW5lZCBpbiB5b3VyIHZlcnNpb24gb2YgdGhlIHByZXByb2Nlc3Nvci4KK0Fzc3VtaW5nIHlvdSBoYXZlIG5vIGZpbGUgXGZJZm9vLmhcZlIsIHRoZSBjb21tYW5kCisuU3AKKy5WYiAxCitcJiAgICAgICAgdG91Y2ggZm9vLmg7IGNwcCBcLWRNIGZvby5oCisuVmUKKy5TcAord2lsbCBzaG93IGFsbCB0aGUgcHJlZGVmaW5lZCBtYWNyb3MuCisuU3AKK0lmIHlvdSB1c2UgXGZCXC1kTVxmUiB3aXRob3V0IHRoZSBcZkJcLUVcZlIgb3B0aW9uLCBcZkJcLWRNXGZSIGlzCitpbnRlcnByZXRlZCBhcyBhIHN5bm9ueW0gZm9yIFxmQlwtZmR1bXBcLXJ0bFwtbWFjaFxmUi4KKy5JUCAiXGZCRFxmUiIgNAorLklYIEl0ZW0gIkQiCitMaWtlIFxmQk1cZlIgZXhjZXB0IGluIHR3byByZXNwZWN0czogaXQgZG9lcyBcZklub3RcZlIgaW5jbHVkZSB0aGUKK3ByZWRlZmluZWQgbWFjcm9zLCBhbmQgaXQgb3V0cHV0cyBcZklib3RoXGZSIHRoZSBcZkIjZGVmaW5lXGZSCitkaXJlY3RpdmVzIGFuZCB0aGUgcmVzdWx0IG9mIHByZXByb2Nlc3NpbmcuICBCb3RoIGtpbmRzIG9mIG91dHB1dCBnbyB0bwordGhlIHN0YW5kYXJkIG91dHB1dCBmaWxlLgorLklQICJcZkJOXGZSIiA0CisuSVggSXRlbSAiTiIKK0xpa2UgXGZCRFxmUiwgYnV0IGVtaXQgb25seSB0aGUgbWFjcm8gbmFtZXMsIG5vdCB0aGVpciBleHBhbnNpb25zLgorLklQICJcZkJJXGZSIiA0CisuSVggSXRlbSAiSSIKK091dHB1dCBcZkIjaW5jbHVkZVxmUiBkaXJlY3RpdmVzIGluIGFkZGl0aW9uIHRvIHRoZSByZXN1bHQgb2YKK3ByZXByb2Nlc3NpbmcuCisuSVAgIlxmQlVcZlIiIDQKKy5JWCBJdGVtICJVIgorTGlrZSBcZkJEXGZSIGV4Y2VwdCB0aGF0IG9ubHkgbWFjcm9zIHRoYXQgYXJlIGV4cGFuZGVkLCBvciB3aG9zZQorZGVmaW5lZG5lc3MgaXMgdGVzdGVkIGluIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhcmUgb3V0cHV0OyB0aGUKK291dHB1dCBpcyBkZWxheWVkIHVudGlsIHRoZSB1c2Ugb3IgdGVzdCBvZiB0aGUgbWFjcm87IGFuZAorXCZcZkIjdW5kZWZcZlIgZGlyZWN0aXZlcyBhcmUgYWxzbyBvdXRwdXQgZm9yIG1hY3JvcyB0ZXN0ZWQgYnV0Cit1bmRlZmluZWQgYXQgdGhlIHRpbWUuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1QXGZSIiA0CisuSVggSXRlbSAiLVAiCitJbmhpYml0IGdlbmVyYXRpb24gb2YgbGluZW1hcmtlcnMgaW4gdGhlIG91dHB1dCBmcm9tIHRoZSBwcmVwcm9jZXNzb3IuCitUaGlzIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhlIHByZXByb2Nlc3NvciBvbiBzb21ldGhpbmcgdGhhdCBpcworbm90IEMgY29kZSwgYW5kIHdpbGwgYmUgc2VudCB0byBhIHByb2dyYW0gd2hpY2ggbWlnaHQgYmUgY29uZnVzZWQgYnkgdGhlCitsaW5lbWFya2Vycy4KKy5JUCAiXGZCXC1DXGZSIiA0CisuSVggSXRlbSAiLUMiCitEbyBub3QgZGlzY2FyZCBjb21tZW50cy4gIEFsbCBjb21tZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dAorZmlsZSwgZXhjZXB0IGZvciBjb21tZW50cyBpbiBwcm9jZXNzZWQgZGlyZWN0aXZlcywgd2hpY2ggYXJlIGRlbGV0ZWQKK2Fsb25nIHdpdGggdGhlIGRpcmVjdGl2ZS4KKy5TcAorWW91IHNob3VsZCBiZSBwcmVwYXJlZCBmb3Igc2lkZSBlZmZlY3RzIHdoZW4gdXNpbmcgXGZCXC1DXGZSOyBpdAorY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgdG8gdHJlYXQgY29tbWVudHMgYXMgdG9rZW5zIGluIHRoZWlyIG93biByaWdodC4KK0ZvciBleGFtcGxlLCBjb21tZW50cyBhcHBlYXJpbmcgYXQgdGhlIHN0YXJ0IG9mIHdoYXQgd291bGQgYmUgYQorZGlyZWN0aXZlIGxpbmUgaGF2ZSB0aGUgZWZmZWN0IG9mIHR1cm5pbmcgdGhhdCBsaW5lIGludG8gYW4gb3JkaW5hcnkKK3NvdXJjZSBsaW5lLCBzaW5jZSB0aGUgZmlyc3QgdG9rZW4gb24gdGhlIGxpbmUgaXMgbm8gbG9uZ2VyIGEgXGZCI1xmUi4KKy5JUCAiXGZCXC1DQ1xmUiIgNAorLklYIEl0ZW0gIi1DQyIKK0RvIG5vdCBkaXNjYXJkIGNvbW1lbnRzLCBpbmNsdWRpbmcgZHVyaW5nIG1hY3JvIGV4cGFuc2lvbi4gIFRoaXMgaXMKK2xpa2UgXGZCXC1DXGZSLCBleGNlcHQgdGhhdCBjb21tZW50cyBjb250YWluZWQgd2l0aGluIG1hY3JvcyBhcmUKK2Fsc28gcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dCBmaWxlIHdoZXJlIHRoZSBtYWNybyBpcyBleHBhbmRlZC4KKy5TcAorSW4gYWRkaXRpb24gdG8gdGhlIHNpZGUtZWZmZWN0cyBvZiB0aGUgXGZCXC1DXGZSIG9wdGlvbiwgdGhlCitcJlxmQlwtQ0NcZlIgb3B0aW9uIGNhdXNlcyBhbGwgXCooQytcLXN0eWxlIGNvbW1lbnRzIGluc2lkZSBhIG1hY3JvCit0byBiZSBjb252ZXJ0ZWQgdG8gQ1wtc3R5bGUgY29tbWVudHMuICBUaGlzIGlzIHRvIHByZXZlbnQgbGF0ZXIgdXNlCitvZiB0aGF0IG1hY3JvIGZyb20gaW5hZHZlcnRlbnRseSBjb21tZW50aW5nIG91dCB0aGUgcmVtYWluZGVyIG9mCit0aGUgc291cmNlIGxpbmUuCisuU3AKK1RoZSBcZkJcLUNDXGZSIG9wdGlvbiBpcyBnZW5lcmFsbHkgdXNlZCB0byBzdXBwb3J0IGxpbnQgY29tbWVudHMuCisuSVAgIlxmQlwtdHJhZGl0aW9uYWxcLWNwcFxmUiIgNAorLklYIEl0ZW0gIi10cmFkaXRpb25hbC1jcHAiCitUcnkgdG8gaW1pdGF0ZSB0aGUgYmVoYXZpb3Igb2Ygb2xkLWZhc2hpb25lZCBDIHByZXByb2Nlc3NvcnMsIGFzCitvcHBvc2VkIHRvIFxzLTFJU09cczAgQyBwcmVwcm9jZXNzb3JzLgorLklQICJcZkJcLXRyaWdyYXBoc1xmUiIgNAorLklYIEl0ZW0gIi10cmlncmFwaHMiCitQcm9jZXNzIHRyaWdyYXBoIHNlcXVlbmNlcy4KKy5JUCAiXGZCXC1yZW1hcFxmUiIgNAorLklYIEl0ZW0gIi1yZW1hcCIKK0VuYWJsZSBzcGVjaWFsIGNvZGUgdG8gd29yayBhcm91bmQgZmlsZSBzeXN0ZW1zIHdoaWNoIG9ubHkgcGVybWl0IHZlcnkKK3Nob3J0IGZpbGUgbmFtZXMsIHN1Y2ggYXMgTVMtRE9TLgorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKKy5QRCAwCisuSVAgIlxmQlwtXC10YXJnZXRcLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLXRhcmdldC1oZWxwIgorLlBECitQcmludCB0ZXh0IGRlc2NyaWJpbmcgYWxsIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBpbnN0ZWFkIG9mCitwcmVwcm9jZXNzaW5nIGFueXRoaW5nLgorLklQICJcZkJcLXZcZlIiIDQKKy5JWCBJdGVtICItdiIKK1ZlcmJvc2UgbW9kZS4gIFByaW50IG91dCBccy0xR05VXHMwIFxzLTFDUFBcczAncyB2ZXJzaW9uIG51bWJlciBhdCB0aGUgYmVnaW5uaW5nIG9mCitleGVjdXRpb24sIGFuZCByZXBvcnQgdGhlIGZpbmFsIGZvcm0gb2YgdGhlIGluY2x1ZGUgcGF0aC4KKy5JUCAiXGZCXC1IXGZSIiA0CisuSVggSXRlbSAiLUgiCitQcmludCB0aGUgbmFtZSBvZiBlYWNoIGhlYWRlciBmaWxlIHVzZWQsIGluIGFkZGl0aW9uIHRvIG90aGVyIG5vcm1hbAorYWN0aXZpdGllcy4gIEVhY2ggbmFtZSBpcyBpbmRlbnRlZCB0byBzaG93IGhvdyBkZWVwIGluIHRoZQorXCZcZkIjaW5jbHVkZVxmUiBzdGFjayBpdCBpcy4gIFByZWNvbXBpbGVkIGhlYWRlciBmaWxlcyBhcmUgYWxzbworcHJpbnRlZCwgZXZlbiBpZiB0aGV5IGFyZSBmb3VuZCB0byBiZSBpbnZhbGlkOyBhbiBpbnZhbGlkIHByZWNvbXBpbGVkCitoZWFkZXIgZmlsZSBpcyBwcmludGVkIHdpdGggXGZCLi4ueFxmUiBhbmQgYSB2YWxpZCBvbmUgd2l0aCBcZkIuLi4hXGZSIC4KKy5JUCAiXGZCXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLXZlcnNpb24iCisuUEQgMAorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKKy5QRAorUHJpbnQgb3V0IFxzLTFHTlVcczAgXHMtMUNQUFxzMCdzIHZlcnNpb24gbnVtYmVyLiAgV2l0aCBvbmUgZGFzaCwgcHJvY2VlZCB0bworcHJlcHJvY2VzcyBhcyBub3JtYWwuICBXaXRoIHR3byBkYXNoZXMsIGV4aXQgaW1tZWRpYXRlbHkuCisuU0ggIkVOVklST05NRU5UIgorLklYIEhlYWRlciAiRU5WSVJPTk1FTlQiCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgaG93IFxzLTFDUFBcczAKK29wZXJhdGVzLiAgWW91IGNhbiB1c2UgdGhlbSB0byBzcGVjaWZ5IGRpcmVjdG9yaWVzIG9yIHByZWZpeGVzIHRvIHVzZQord2hlbiBzZWFyY2hpbmcgZm9yIGluY2x1ZGUgZmlsZXMsIG9yIHRvIGNvbnRyb2wgZGVwZW5kZW5jeSBvdXRwdXQuCisuUFAKK05vdGUgdGhhdCB5b3UgY2FuIGFsc28gc3BlY2lmeSBwbGFjZXMgdG8gc2VhcmNoIHVzaW5nIG9wdGlvbnMgc3VjaCBhcworXCZcZkJcLUlcZlIsIGFuZCBjb250cm9sIGRlcGVuZGVuY3kgb3V0cHV0IHdpdGggb3B0aW9ucyBsaWtlCitcJlxmQlwtTVxmUi4gIFRoZXNlIHRha2UgcHJlY2VkZW5jZSBvdmVyCitlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIGluIHR1cm4gdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlCitjb25maWd1cmF0aW9uIG9mIFxzLTFHQ0NcczAuCisuSVAgIlxmQlxzLTFDUEFUSFxzMFxmUiIgNAorLklYIEl0ZW0gIkNQQVRIIgorLlBEIDAKKy5JUCAiXGZCQ19JTkNMVURFX1BBVEhcZlIiIDQKKy5JWCBJdGVtICJDX0lOQ0xVREVfUEFUSCIKKy5JUCAiXGZCXHMtMUNQTFVTX0lOQ0xVREVfUEFUSFxzMFxmUiIgNAorLklYIEl0ZW0gIkNQTFVTX0lOQ0xVREVfUEFUSCIKKy5JUCAiXGZCXHMtMU9CSkNfSU5DTFVERV9QQVRIXHMwXGZSIiA0CisuSVggSXRlbSAiT0JKQ19JTkNMVURFX1BBVEgiCisuUEQKK0VhY2ggdmFyaWFibGUncyB2YWx1ZSBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IGEgc3BlY2lhbAorY2hhcmFjdGVyLCBtdWNoIGxpa2UgXGZCXHMtMVBBVEhcczBcZlIsIGluIHdoaWNoIHRvIGxvb2sgZm9yIGhlYWRlciBmaWxlcy4KK1RoZSBzcGVjaWFsIGNoYXJhY3RlciwgXGYoQ1dcKihDYFBBVEhfU0VQQVJBVE9SXCooQydcZlIsIGlzIHRhcmdldC1kZXBlbmRlbnQgYW5kCitkZXRlcm1pbmVkIGF0IFxzLTFHQ0NcczAgYnVpbGQgdGltZS4gIEZvciBNaWNyb3NvZnQgV2luZG93cy1iYXNlZCB0YXJnZXRzIGl0IGlzIGEKK3NlbWljb2xvbiwgYW5kIGZvciBhbG1vc3QgYWxsIG90aGVyIHRhcmdldHMgaXQgaXMgYSBjb2xvbi4KKy5TcAorXCZcZkJccy0xQ1BBVEhcczBcZlIgc3BlY2lmaWVzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCBhcyBpZgorc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSLCBidXQgYWZ0ZXIgYW55IHBhdGhzIGdpdmVuIHdpdGggXGZCXC1JXGZSCitvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQKK3JlZ2FyZGxlc3Mgb2Ygd2hpY2ggbGFuZ3VhZ2UgaXMgYmVpbmcgcHJlcHJvY2Vzc2VkLgorLlNwCitUaGUgcmVtYWluaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcHBseSBvbmx5IHdoZW4gcHJlcHJvY2Vzc2luZyB0aGUKK3BhcnRpY3VsYXIgbGFuZ3VhZ2UgaW5kaWNhdGVkLiAgRWFjaCBzcGVjaWZpZXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzCit0byBiZSBzZWFyY2hlZCBhcyBpZiBzcGVjaWZpZWQgd2l0aCBcZkJcLWlzeXN0ZW1cZlIsIGJ1dCBhZnRlciBhbnkKK3BhdGhzIGdpdmVuIHdpdGggXGZCXC1pc3lzdGVtXGZSIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5TcAorSW4gYWxsIHRoZXNlIHZhcmlhYmxlcywgYW4gZW1wdHkgZWxlbWVudCBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyIHRvCitzZWFyY2ggaXRzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBFbXB0eSBlbGVtZW50cyBjYW4gYXBwZWFyIGF0IHRoZQorYmVnaW5uaW5nIG9yIGVuZCBvZiBhIHBhdGguICBGb3IgaW5zdGFuY2UsIGlmIHRoZSB2YWx1ZSBvZgorXCZcZkJccy0xQ1BBVEhcczBcZlIgaXMgXGYoQ1dcKihDYDovc3BlY2lhbC9pbmNsdWRlXCooQydcZlIsIHRoYXQgaGFzIHRoZSBzYW1lCitlZmZlY3QgYXMgXGZCXC1JLlwgXC1JL3NwZWNpYWwvaW5jbHVkZVxmUi4KKy5JUCAiXGZCXHMtMURFUEVOREVOQ0lFU19PVVRQVVRcczBcZlIiIDQKKy5JWCBJdGVtICJERVBFTkRFTkNJRVNfT1VUUFVUIgorSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQsIGl0cyB2YWx1ZSBzcGVjaWZpZXMgaG93IHRvIG91dHB1dAorZGVwZW5kZW5jaWVzIGZvciBNYWtlIGJhc2VkIG9uIHRoZSBub24tc3lzdGVtIGhlYWRlciBmaWxlcyBwcm9jZXNzZWQKK2J5IHRoZSBjb21waWxlci4gIFN5c3RlbSBoZWFkZXIgZmlsZXMgYXJlIGlnbm9yZWQgaW4gdGhlIGRlcGVuZGVuY3kKK291dHB1dC4KKy5TcAorVGhlIHZhbHVlIG9mIFxmQlxzLTFERVBFTkRFTkNJRVNfT1VUUFVUXHMwXGZSIGNhbiBiZSBqdXN0IGEgZmlsZSBuYW1lLCBpbgord2hpY2ggY2FzZSB0aGUgTWFrZSBydWxlcyBhcmUgd3JpdHRlbiB0byB0aGF0IGZpbGUsIGd1ZXNzaW5nIHRoZSB0YXJnZXQKK25hbWUgZnJvbSB0aGUgc291cmNlIGZpbGUgbmFtZS4gIE9yIHRoZSB2YWx1ZSBjYW4gaGF2ZSB0aGUgZm9ybQorXCZcZklmaWxlXGZSXGZCIFxmUlxmSXRhcmdldFxmUiwgaW4gd2hpY2ggY2FzZSB0aGUgcnVsZXMgYXJlIHdyaXR0ZW4gdG8KK2ZpbGUgXGZJZmlsZVxmUiB1c2luZyBcZkl0YXJnZXRcZlIgYXMgdGhlIHRhcmdldCBuYW1lLgorLlNwCitJbiBvdGhlciB3b3JkcywgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBlcXVpdmFsZW50IHRvIGNvbWJpbmluZwordGhlIG9wdGlvbnMgXGZCXC1NTVxmUiBhbmQgXGZCXC1NRlxmUiwKK3dpdGggYW4gb3B0aW9uYWwgXGZCXC1NVFxmUiBzd2l0Y2ggdG9vLgorLklQICJcZkJccy0xU1VOUFJPX0RFUEVOREVOQ0lFU1xzMFxmUiIgNAorLklYIEl0ZW0gIlNVTlBST19ERVBFTkRFTkNJRVMiCitUaGlzIHZhcmlhYmxlIGlzIHRoZSBzYW1lIGFzIFxmQlxzLTFERVBFTkRFTkNJRVNfT1VUUFVUXHMwXGZSIChzZWUgYWJvdmUpLAorZXhjZXB0IHRoYXQgc3lzdGVtIGhlYWRlciBmaWxlcyBhcmUgbm90IGlnbm9yZWQsIHNvIGl0IGltcGxpZXMKK1wmXGZCXC1NXGZSIHJhdGhlciB0aGFuIFxmQlwtTU1cZlIuICBIb3dldmVyLCB0aGUgZGVwZW5kZW5jZSBvbiB0aGUKK21haW4gaW5wdXQgZmlsZSBpcyBvbWl0dGVkLgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgorXCZcZklncGxcZlJcfCg3KSwgXGZJZ2ZkbFxmUlx8KDcpLCBcZklmc2ZcLWZ1bmRpbmdcZlJcfCg3KSwKK1wmXGZJZ2NjXGZSXHwoMSksIFxmSWFzXGZSXHwoMSksIFxmSWxkXGZSXHwoMSksIGFuZCB0aGUgSW5mbyBlbnRyaWVzIGZvciBcZkljcHBcZlIsIFxmSWdjY1xmUiwgYW5kCitcJlxmSWJpbnV0aWxzXGZSLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5ODdcLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBIGNvcHkgb2YKK3RoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorbWFuIHBhZ2UgXGZJZ2ZkbFxmUlx8KDcpLgorVGhpcyBtYW51YWwgY29udGFpbnMgbm8gSW52YXJpYW50IFNlY3Rpb25zLiAgVGhlIEZyb250LUNvdmVyIFRleHRzIGFyZQorKGEpIChzZWUgYmVsb3cpLCBhbmQgdGhlIEJhY2stQ292ZXIgVGV4dHMgYXJlIChiKSAoc2VlIGJlbG93KS4KKy5QUAorKGEpIFRoZSBccy0xRlNGXHMwJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKy5QUAorLlZiIDEKK1wmICAgICBBIEdOVSBNYW51YWwKKy5WZQorLlBQCisoYikgVGhlIFxzLTFGU0ZcczAncyBCYWNrLUNvdmVyIFRleHQgaXM6CisuUFAKKy5WYiAzCitcJiAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorXCYgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCitcJiAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy5WZQpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWRsbHRvb2wuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1kbGx0b29sLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczNDY5NgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1kbGx0b29sLjEKQEAgLTAsMCArMSw1MzIgQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjIzIChQb2Q6OlNpbXBsZSAzLjE0KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJETExUT09MIDEiCisuVEggRExMVE9PTCAxICIyMDEzLTAzLTI1IiAiYmludXRpbHMtMi4yMy4yIiAiR05VIERldmVsb3BtZW50IFRvb2xzIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK2RsbHRvb2wgXC0gQ3JlYXRlIGZpbGVzIG5lZWRlZCB0byBidWlsZCBhbmQgdXNlIERMTHMuCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCitkbGx0b29sIFtcZkJcLWRcZlJ8XGZCXC1cLWlucHV0XC1kZWZcZlIgXGZJZGVmLWZpbGUtbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtYlxmUnxcZkJcLVwtYmFzZVwtZmlsZVxmUiBcZkliYXNlLWZpbGUtbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtZVxmUnxcZkJcLVwtb3V0cHV0XC1leHBcZlIgXGZJZXhwb3J0cy1maWxlLW5hbWVcZlJdCisgICAgICAgIFtcZkJcLXpcZlJ8XGZCXC1cLW91dHB1dFwtZGVmXGZSIFxmSWRlZi1maWxlLW5hbWVcZlJdCisgICAgICAgIFtcZkJcLWxcZlJ8XGZCXC1cLW91dHB1dFwtbGliXGZSIFxmSWxpYnJhcnktZmlsZS1uYW1lXGZSXQorICAgICAgICBbXGZCXC15XGZSfFxmQlwtXC1vdXRwdXRcLWRlbGF5bGliXGZSIFxmSWxpYnJhcnktZmlsZS1uYW1lXGZSXQorICAgICAgICBbXGZCXC1cLWV4cG9ydFwtYWxsXC1zeW1ib2xzXGZSXSBbXGZCXC1cLW5vXC1leHBvcnRcLWFsbFwtc3ltYm9sc1xmUl0KKyAgICAgICAgW1xmQlwtXC1leGNsdWRlXC1zeW1ib2xzXGZSIFxmSWxpc3RcZlJdCisgICAgICAgIFtcZkJcLVwtbm9cLWRlZmF1bHRcLWV4Y2x1ZGVzXGZSXQorICAgICAgICBbXGZCXC1TXGZSfFxmQlwtXC1hc1xmUiBcZklwYXRoLXRvLWFzc2VtYmxlclxmUl0gW1xmQlwtZlxmUnxcZkJcLVwtYXNcLWZsYWdzXGZSIFxmSW9wdGlvbnNcZlJdCisgICAgICAgIFtcZkJcLURcZlJ8XGZCXC1cLWRsbG5hbWVcZlIgXGZJbmFtZVxmUl0gW1xmQlwtbVxmUnxcZkJcLVwtbWFjaGluZVxmUiBcZkltYWNoaW5lXGZSXQorICAgICAgICBbXGZCXC1hXGZSfFxmQlwtXC1hZGRcLWluZGlyZWN0XGZSXQorICAgICAgICBbXGZCXC1VXGZSfFxmQlwtXC1hZGRcLXVuZGVyc2NvcmVcZlJdIFtcZkJcLVwtYWRkXC1zdGRjYWxsXC11bmRlcnNjb3JlXGZSXQorICAgICAgICBbXGZCXC1rXGZSfFxmQlwtXC1raWxsXC1hdFxmUl0gW1xmQlwtQVxmUnxcZkJcLVwtYWRkXC1zdGRjYWxsXC1hbGlhc1xmUl0KKyAgICAgICAgW1xmQlwtcFxmUnxcZkJcLVwtZXh0XC1wcmVmaXhcLWFsaWFzXGZSIFxmSXByZWZpeFxmUl0KKyAgICAgICAgW1xmQlwteFxmUnxcZkJcLVwtbm9cLWlkYXRhNFxmUl0gW1xmQlwtY1xmUnxcZkJcLVwtbm9cLWlkYXRhNVxmUl0KKyAgICAgICAgW1xmQlwtXC11c2VcLW51bFwtcHJlZml4ZWRcLWltcG9ydFwtdGFibGVzXGZSXQorICAgICAgICBbXGZCXC1JXGZSfFxmQlwtXC1pZGVudGlmeVxmUiBcZklsaWJyYXJ5LWZpbGUtbmFtZVxmUl0gW1xmQlwtXC1pZGVudGlmeVwtc3RyaWN0XGZSXQorICAgICAgICBbXGZCXC1pXGZSfFxmQlwtXC1pbnRlcndvcmtcZlJdCisgICAgICAgIFtcZkJcLW5cZlJ8XGZCXC1cLW5vZGVsZXRlXGZSXSBbXGZCXC10XGZSfFxmQlwtXC10ZW1wXC1wcmVmaXhcZlIgXGZJcHJlZml4XGZSXQorICAgICAgICBbXGZCXC12XGZSfFxmQlwtXC12ZXJib3NlXGZSXQorICAgICAgICBbXGZCXC1oXGZSfFxmQlwtXC1oZWxwXGZSXSBbXGZCXC1WXGZSfFxmQlwtXC12ZXJzaW9uXGZSXQorICAgICAgICBbXGZCXC1cLW5vXC1sZWFkaW5nXC11bmRlcnNjb3JlXGZSXSBbXGZCXC1cLWxlYWRpbmdcLXVuZGVyc2NvcmVcZlJdCisgICAgICAgIFtvYmplY3RcLWZpbGUgLi4uXQorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorXCZcZkJkbGx0b29sXGZSIHJlYWRzIGl0cyBpbnB1dHMsIHdoaWNoIGNhbiBjb21lIGZyb20gdGhlIFxmQlwtZFxmUiBhbmQKK1wmXGZCXC1iXGZSIG9wdGlvbnMgYXMgd2VsbCBhcyBvYmplY3QgZmlsZXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kCitsaW5lLiAgSXQgdGhlbiBwcm9jZXNzZXMgdGhlc2UgaW5wdXRzIGFuZCBpZiB0aGUgXGZCXC1lXGZSIG9wdGlvbiBoYXMKK2JlZW4gc3BlY2lmaWVkIGl0IGNyZWF0ZXMgYSBleHBvcnRzIGZpbGUuICBJZiB0aGUgXGZCXC1sXGZSIG9wdGlvbgoraGFzIGJlZW4gc3BlY2lmaWVkIGl0IGNyZWF0ZXMgYSBsaWJyYXJ5IGZpbGUgYW5kIGlmIHRoZSBcZkJcLXpcZlIgb3B0aW9uCitoYXMgYmVlbiBzcGVjaWZpZWQgaXQgY3JlYXRlcyBhIGRlZiBmaWxlLiAgQW55IG9yIGFsbCBvZiB0aGUgXGZCXC1lXGZSLAorXCZcZkJcLWxcZlIgYW5kIFxmQlwtelxmUiBvcHRpb25zIGNhbiBiZSBwcmVzZW50IGluIG9uZSBpbnZvY2F0aW9uIG9mCitkbGx0b29sLgorLlBQCitXaGVuIGNyZWF0aW5nIGEgXHMtMURMTFxzMCwgYWxvbmcgd2l0aCB0aGUgc291cmNlIGZvciB0aGUgXHMtMURMTFxzMCwgaXQgaXMgbmVjZXNzYXJ5Cit0byBoYXZlIHRocmVlIG90aGVyIGZpbGVzLiAgXGZCZGxsdG9vbFxmUiBjYW4gaGVscCB3aXRoIHRoZSBjcmVhdGlvbiBvZgordGhlc2UgZmlsZXMuCisuUFAKK1RoZSBmaXJzdCBmaWxlIGlzIGEgXGZJLmRlZlxmUiBmaWxlIHdoaWNoIHNwZWNpZmllcyB3aGljaCBmdW5jdGlvbnMgYXJlCitleHBvcnRlZCBmcm9tIHRoZSBccy0xRExMXHMwLCB3aGljaCBmdW5jdGlvbnMgdGhlIFxzLTFETExcczAgaW1wb3J0cywgYW5kIHNvIG9uLiAgVGhpcworaXMgYSB0ZXh0IGZpbGUgYW5kIGNhbiBiZSBjcmVhdGVkIGJ5IGhhbmQsIG9yIFxmQmRsbHRvb2xcZlIgY2FuIGJlIHVzZWQKK3RvIGNyZWF0ZSBpdCB1c2luZyB0aGUgXGZCXC16XGZSIG9wdGlvbi4gIEluIHRoaXMgY2FzZSBcZkJkbGx0b29sXGZSCit3aWxsIHNjYW4gdGhlIG9iamVjdCBmaWxlcyBzcGVjaWZpZWQgb24gaXRzIGNvbW1hbmQgbGluZSBsb29raW5nIGZvcgordGhvc2UgZnVuY3Rpb25zIHdoaWNoIGhhdmUgYmVlbiBzcGVjaWFsbHkgbWFya2VkIGFzIGJlaW5nIGV4cG9ydGVkIGFuZAorcHV0IGVudHJpZXMgZm9yIHRoZW0gaW4gdGhlIFxmSS5kZWZcZlIgZmlsZSBpdCBjcmVhdGVzLgorLlBQCitJbiBvcmRlciB0byBtYXJrIGEgZnVuY3Rpb24gYXMgYmVpbmcgZXhwb3J0ZWQgZnJvbSBhIFxzLTFETExcczAsIGl0IG5lZWRzIHRvCitoYXZlIGFuIFxmQlwtZXhwb3J0OjxuYW1lX29mX2Z1bmN0aW9uPlxmUiBlbnRyeSBpbiB0aGUgXGZCLmRyZWN0dmVcZlIKK3NlY3Rpb24gb2YgdGhlIG9iamVjdCBmaWxlLiAgVGhpcyBjYW4gYmUgZG9uZSBpbiBDIGJ5IHVzaW5nIHRoZQorXCZcZklhc20oKVxmUiBvcGVyYXRvcjoKKy5QUAorLlZiIDIKK1wmICAgICAgICAgIGFzbSAoIi5zZWN0aW9uIC5kcmVjdHZlIik7CitcJiAgICAgICAgICBhc20gKCIuYXNjaWkgXGUiXC1leHBvcnQ6bXlfZnVuY1xlIiIpOworXCYgICAgICAgIAorXCYgICAgICAgICAgaW50IG15X2Z1bmMgKHZvaWQpIHsgLi4uIH0KKy5WZQorLlBQCitUaGUgc2Vjb25kIGZpbGUgbmVlZGVkIGZvciBccy0xRExMXHMwIGNyZWF0aW9uIGlzIGFuIGV4cG9ydHMgZmlsZS4gIFRoaXMgZmlsZQoraXMgbGlua2VkIHdpdGggdGhlIG9iamVjdCBmaWxlcyB0aGF0IG1ha2UgdXAgdGhlIGJvZHkgb2YgdGhlIFxzLTFETExcczAgYW5kIGl0CitoYW5kbGVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgXHMtMURMTFxzMCBhbmQgdGhlIG91dHNpZGUgd29ybGQuICBUaGlzIGlzIGEKK2JpbmFyeSBmaWxlIGFuZCBpdCBjYW4gYmUgY3JlYXRlZCBieSBnaXZpbmcgdGhlIFxmQlwtZVxmUiBvcHRpb24gdG8KK1wmXGZCZGxsdG9vbFxmUiB3aGVuIGl0IGlzIGNyZWF0aW5nIG9yIHJlYWRpbmcgaW4gYSBcZkkuZGVmXGZSIGZpbGUuCisuUFAKK1RoZSB0aGlyZCBmaWxlIG5lZWRlZCBmb3IgXHMtMURMTFxzMCBjcmVhdGlvbiBpcyB0aGUgbGlicmFyeSBmaWxlIHRoYXQgcHJvZ3JhbXMKK3dpbGwgbGluayB3aXRoIGluIG9yZGVyIHRvIGFjY2VzcyB0aGUgZnVuY3Rpb25zIGluIHRoZSBccy0xRExMXHMwIChhbiBgaW1wb3J0CitsaWJyYXJ5JykuICBUaGlzIGZpbGUgY2FuIGJlIGNyZWF0ZWQgYnkgZ2l2aW5nIHRoZSBcZkJcLWxcZlIgb3B0aW9uIHRvCitkbGx0b29sIHdoZW4gaXQgaXMgY3JlYXRpbmcgb3IgcmVhZGluZyBpbiBhIFxmSS5kZWZcZlIgZmlsZS4KKy5QUAorSWYgdGhlIFxmQlwteVxmUiBvcHRpb24gaXMgc3BlY2lmaWVkLCBkbGx0b29sIGdlbmVyYXRlcyBhIGRlbGF5LWltcG9ydAorbGlicmFyeSB0aGF0IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBpbXBvcnQgbGlicmFyeSB0byBhbGxvdworYSBwcm9ncmFtIHRvIGxpbmsgdG8gdGhlIGRsbCBvbmx5IGFzIHNvb24gYXMgYW4gaW1wb3J0ZWQgZnVuY3Rpb24gaXMKK2NhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUuIFRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB3aWxsIG5lZWQgdG8gYmUKK2xpbmtlZCB0byB0aGUgc3RhdGljIGRlbGF5aW1wIGxpYnJhcnkgY29udGFpbmluZyBfXHxcZklfZGVsYXlMb2FkSGVscGVyMigpXGZSLAord2hpY2ggaW4gdHVybiB3aWxsIGltcG9ydCBMb2FkTGlicmFyeUEgYW5kIEdldFByb2NBZGRyZXNzIGZyb20ga2VybmVsMzIuCisuUFAKK1wmXGZCZGxsdG9vbFxmUiBidWlsZHMgdGhlIGxpYnJhcnkgZmlsZSBieSBoYW5kLCBidXQgaXQgYnVpbGRzIHRoZQorZXhwb3J0cyBmaWxlIGJ5IGNyZWF0aW5nIHRlbXBvcmFyeSBmaWxlcyBjb250YWluaW5nIGFzc2VtYmxlciBzdGF0ZW1lbnRzCithbmQgdGhlbiBhc3NlbWJsaW5nIHRoZXNlLiAgVGhlIFxmQlwtU1xmUiBjb21tYW5kIGxpbmUgb3B0aW9uIGNhbiBiZQordXNlZCB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZSBhc3NlbWJsZXIgdGhhdCBkbGx0b29sIHdpbGwgdXNlLAorYW5kIHRoZSBcZkJcLWZcZlIgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHBhc3Mgc3BlY2lmaWMgZmxhZ3MgdG8gdGhhdAorYXNzZW1ibGVyLiAgVGhlIFxmQlwtblxmUiBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IGRsbHRvb2wgZnJvbSBkZWxldGluZwordGhlc2UgdGVtcG9yYXJ5IGFzc2VtYmxlciBmaWxlcyB3aGVuIGl0IGlzIGRvbmUsIGFuZCBpZiBcZkJcLW5cZlIgaXMKK3NwZWNpZmllZCB0d2ljZSB0aGVuIHRoaXMgd2lsbCBwcmV2ZW50IGRsbHRvb2wgZnJvbSBkZWxldGluZyB0aGUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZXMgaXQgdXNlZCB0byBidWlsZCB0aGUgbGlicmFyeS4KKy5QUAorSGVyZSBpcyBhbiBleGFtcGxlIG9mIGNyZWF0aW5nIGEgXHMtMURMTFxzMCBmcm9tIGEgc291cmNlIGZpbGUgXGZCZGxsLmNcZlIgYW5kCithbHNvIGNyZWF0aW5nIGEgcHJvZ3JhbSAoZnJvbSBhbiBvYmplY3QgZmlsZSBjYWxsZWQgXGZCcHJvZ3JhbS5vXGZSKQordGhhdCB1c2VzIHRoYXQgXHMtMURMTDpcczAKKy5QUAorLlZiIDQKK1wmICAgICAgICAgIGdjYyBcLWMgZGxsLmMKK1wmICAgICAgICAgIGRsbHRvb2wgXC1lIGV4cG9ydHMubyBcLWwgZGxsLmxpYiBkbGwubworXCYgICAgICAgICAgZ2NjIGRsbC5vIGV4cG9ydHMubyBcLW8gZGxsLmRsbAorXCYgICAgICAgICAgZ2NjIHByb2dyYW0ubyBkbGwubGliIFwtbyBwcm9ncmFtCisuVmUKKy5QUAorXCZcZkJkbGx0b29sXGZSIG1heSBhbHNvIGJlIHVzZWQgdG8gcXVlcnkgYW4gZXhpc3RpbmcgaW1wb3J0IGxpYnJhcnkKK3RvIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgXHMtMURMTFxzMCB0byB3aGljaCBpdCBpcyBhc3NvY2lhdGVkLiAgU2VlIHRoZQorZGVzY3JpcHRpb24gb2YgdGhlIFxmQlwtSVxmUiBvciBcZkJcLVwtaWRlbnRpZnlcZlIgb3B0aW9uLgorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKK1RoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisuSVAgIlxmQlwtZFxmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1kIGZpbGVuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLWlucHV0XC1kZWZcZlIgXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWlucHV0LWRlZiBmaWxlbmFtZSIKKy5QRAorU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgXGZJLmRlZlxmUiBmaWxlIHRvIGJlIHJlYWQgaW4gYW5kIHByb2Nlc3NlZC4KKy5JUCAiXGZCXC1iXGZSIFxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLWIgZmlsZW5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtYmFzZVwtZmlsZVxmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tYmFzZS1maWxlIGZpbGVuYW1lIgorLlBECitTcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBiYXNlIGZpbGUgdG8gYmUgcmVhZCBpbiBhbmQgcHJvY2Vzc2VkLiAgVGhlCitjb250ZW50cyBvZiB0aGlzIGZpbGUgd2lsbCBiZSBhZGRlZCB0byB0aGUgcmVsb2NhdGlvbiBzZWN0aW9uIGluIHRoZQorZXhwb3J0cyBmaWxlIGdlbmVyYXRlZCBieSBkbGx0b29sLgorLklQICJcZkJcLWVcZlIgXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItZSBmaWxlbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1vdXRwdXRcLWV4cFxmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tb3V0cHV0LWV4cCBmaWxlbmFtZSIKKy5QRAorU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBleHBvcnQgZmlsZSB0byBiZSBjcmVhdGVkIGJ5IGRsbHRvb2wuCisuSVAgIlxmQlwtelxmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi16IGZpbGVuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLW91dHB1dFwtZGVmXGZSIFxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1vdXRwdXQtZGVmIGZpbGVuYW1lIgorLlBECitTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIFxmSS5kZWZcZlIgZmlsZSB0byBiZSBjcmVhdGVkIGJ5IGRsbHRvb2wuCisuSVAgIlxmQlwtbFxmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1sIGZpbGVuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLW91dHB1dFwtbGliXGZSIFxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1vdXRwdXQtbGliIGZpbGVuYW1lIgorLlBECitTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgZmlsZSB0byBiZSBjcmVhdGVkIGJ5IGRsbHRvb2wuCisuSVAgIlxmQlwteVxmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi15IGZpbGVuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLW91dHB1dFwtZGVsYXlsaWJcZlIgXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLW91dHB1dC1kZWxheWxpYiBmaWxlbmFtZSIKKy5QRAorU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBkZWxheS1pbXBvcnQgbGlicmFyeSBmaWxlIHRvIGJlIGNyZWF0ZWQgYnkgZGxsdG9vbC4KKy5JUCAiXGZCXC1cLWV4cG9ydFwtYWxsXC1zeW1ib2xzXGZSIiA0CisuSVggSXRlbSAiLS1leHBvcnQtYWxsLXN5bWJvbHMiCitUcmVhdCBhbGwgZ2xvYmFsIGFuZCB3ZWFrIGRlZmluZWQgc3ltYm9scyBmb3VuZCBpbiB0aGUgaW5wdXQgb2JqZWN0CitmaWxlcyBhcyBzeW1ib2xzIHRvIGJlIGV4cG9ydGVkLiAgVGhlcmUgaXMgYSBzbWFsbCBsaXN0IG9mIHN5bWJvbHMgd2hpY2gKK2FyZSBub3QgZXhwb3J0ZWQgYnkgZGVmYXVsdDsgc2VlIHRoZSBcZkJcLVwtbm9cLWRlZmF1bHRcLWV4Y2x1ZGVzXGZSCitvcHRpb24uICBZb3UgbWF5IGFkZCB0byB0aGUgbGlzdCBvZiBzeW1ib2xzIHRvIG5vdCBleHBvcnQgYnkgdXNpbmcgdGhlCitcJlxmQlwtXC1leGNsdWRlXC1zeW1ib2xzXGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1cLW5vXC1leHBvcnRcLWFsbFwtc3ltYm9sc1xmUiIgNAorLklYIEl0ZW0gIi0tbm8tZXhwb3J0LWFsbC1zeW1ib2xzIgorT25seSBleHBvcnQgc3ltYm9scyBleHBsaWNpdGx5IGxpc3RlZCBpbiBhbiBpbnB1dCBcZkkuZGVmXGZSIGZpbGUgb3IgaW4KK1wmXGZCLmRyZWN0dmVcZlIgc2VjdGlvbnMgaW4gdGhlIGlucHV0IG9iamVjdCBmaWxlcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK2JlaGF2aW91ci4gIFRoZSBcZkIuZHJlY3R2ZVxmUiBzZWN0aW9ucyBhcmUgY3JlYXRlZCBieSBcZkJkbGxleHBvcnRcZlIKK2F0dHJpYnV0ZXMgaW4gdGhlIHNvdXJjZSBjb2RlLgorLklQICJcZkJcLVwtZXhjbHVkZVwtc3ltYm9sc1xmUiBcZklsaXN0XGZSIiA0CisuSVggSXRlbSAiLS1leGNsdWRlLXN5bWJvbHMgbGlzdCIKK0RvIG5vdCBleHBvcnQgdGhlIHN5bWJvbHMgaW4gXGZJbGlzdFxmUi4gIFRoaXMgaXMgYSBsaXN0IG9mIHN5bWJvbCBuYW1lcworc2VwYXJhdGVkIGJ5IGNvbW1hIG9yIGNvbG9uIGNoYXJhY3RlcnMuICBUaGUgc3ltYm9sIG5hbWVzIHNob3VsZCBub3QKK2NvbnRhaW4gYSBsZWFkaW5nIHVuZGVyc2NvcmUuICBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuCitcJlxmQlwtXC1leHBvcnRcLWFsbFwtc3ltYm9sc1xmUiBpcyB1c2VkLgorLklQICJcZkJcLVwtbm9cLWRlZmF1bHRcLWV4Y2x1ZGVzXGZSIiA0CisuSVggSXRlbSAiLS1uby1kZWZhdWx0LWV4Y2x1ZGVzIgorV2hlbiBcZkJcLVwtZXhwb3J0XC1hbGxcLXN5bWJvbHNcZlIgaXMgdXNlZCwgaXQgd2lsbCBieSBkZWZhdWx0IGF2b2lkCitleHBvcnRpbmcgY2VydGFpbiBzcGVjaWFsIHN5bWJvbHMuICBUaGUgY3VycmVudCBsaXN0IG9mIHN5bWJvbHMgdG8gYXZvaWQKK2V4cG9ydGluZyBpcyBcZkJEbGxNYWluQDEyXGZSLCBcZkJEbGxFbnRyeVBvaW50QDBcZlIsCitcJlxmQmltcHVyZV9wdHJcZlIuICBZb3UgbWF5IHVzZSB0aGUgXGZCXC1cLW5vXC1kZWZhdWx0XC1leGNsdWRlc1xmUiBvcHRpb24KK3RvIGdvIGFoZWFkIGFuZCBleHBvcnQgdGhlc2Ugc3BlY2lhbCBzeW1ib2xzLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwKK3doZW4gXGZCXC1cLWV4cG9ydFwtYWxsXC1zeW1ib2xzXGZSIGlzIHVzZWQuCisuSVAgIlxmQlwtU1xmUiBcZklwYXRoXGZSIiA0CisuSVggSXRlbSAiLVMgcGF0aCIKKy5QRCAwCisuSVAgIlxmQlwtXC1hc1xmUiBcZklwYXRoXGZSIiA0CisuSVggSXRlbSAiLS1hcyBwYXRoIgorLlBECitTcGVjaWZpZXMgdGhlIHBhdGgsIGluY2x1ZGluZyB0aGUgZmlsZW5hbWUsIG9mIHRoZSBhc3NlbWJsZXIgdG8gYmUgdXNlZAordG8gY3JlYXRlIHRoZSBleHBvcnRzIGZpbGUuCisuSVAgIlxmQlwtZlxmUiBcZklvcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLWYgb3B0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtXC1hc1wtZmxhZ3NcZlIgXGZJb3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi0tYXMtZmxhZ3Mgb3B0aW9ucyIKKy5QRAorU3BlY2lmaWVzIGFueSBzcGVjaWZpYyBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byBiZSBwYXNzZWQgdG8gdGhlCithc3NlbWJsZXIgd2hlbiBidWlsZGluZyB0aGUgZXhwb3J0cyBmaWxlLiAgVGhpcyBvcHRpb24gd2lsbCB3b3JrIGV2ZW4gaWYKK3RoZSBcZkJcLVNcZlIgb3B0aW9uIGlzIG5vdCB1c2VkLiAgVGhpcyBvcHRpb24gb25seSB0YWtlcyBvbmUgYXJndW1lbnQsCithbmQgaWYgaXQgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZW4gbGF0ZXIKK29jY3VycmVuY2VzIHdpbGwgb3ZlcnJpZGUgZWFybGllciBvY2N1cnJlbmNlcy4gIFNvIGlmIGl0IGlzIG5lY2Vzc2FyeSB0bworcGFzcyBtdWx0aXBsZSBvcHRpb25zIHRvIHRoZSBhc3NlbWJsZXIgdGhleSBzaG91bGQgYmUgZW5jbG9zZWQgaW4KK2RvdWJsZSBxdW90ZXMuCisuSVAgIlxmQlwtRFxmUiBcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLUQgbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1kbGxcLW5hbWVcZlIgXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tZGxsLW5hbWUgbmFtZSIKKy5QRAorU3BlY2lmaWVzIHRoZSBuYW1lIHRvIGJlIHN0b3JlZCBpbiB0aGUgXGZJLmRlZlxmUiBmaWxlIGFzIHRoZSBuYW1lIG9mCit0aGUgXHMtMURMTFxzMCB3aGVuIHRoZSBcZkJcLWVcZlIgb3B0aW9uIGlzIHVzZWQuICBJZiB0aGlzIG9wdGlvbiBpcyBub3QKK3ByZXNlbnQsIHRoZW4gdGhlIGZpbGVuYW1lIGdpdmVuIHRvIHRoZSBcZkJcLWVcZlIgb3B0aW9uIHdpbGwgYmUKK3VzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIFxzLTFETExcczAuCisuSVAgIlxmQlwtbVxmUiBcZkltYWNoaW5lXGZSIiA0CisuSVggSXRlbSAiLW0gbWFjaGluZSIKKy5QRCAwCisuSVAgIlxmQlwtbWFjaGluZVxmUiBcZkltYWNoaW5lXGZSIiA0CisuSVggSXRlbSAiLW1hY2hpbmUgbWFjaGluZSIKKy5QRAorU3BlY2lmaWVzIHRoZSB0eXBlIG9mIG1hY2hpbmUgZm9yIHdoaWNoIHRoZSBsaWJyYXJ5IGZpbGUgc2hvdWxkIGJlCitidWlsdC4gIFxmQmRsbHRvb2xcZlIgaGFzIGEgYnVpbHQgaW4gZGVmYXVsdCB0eXBlLCBkZXBlbmRpbmcgdXBvbiBob3cKK2l0IHdhcyBjcmVhdGVkLCBidXQgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhhdC4gIFRoaXMgaXMKK25vcm1hbGx5IG9ubHkgdXNlZnVsIHdoZW4gY3JlYXRpbmcgRExMcyBmb3IgYW4gXHMtMUFSTVxzMCBwcm9jZXNzb3IsIHdoZW4gdGhlCitjb250ZW50cyBvZiB0aGUgXHMtMURMTFxzMCBhcmUgYWN0dWFsbHkgZW5jb2RlIHVzaW5nIFRodW1iIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1hXGZSIiA0CisuSVggSXRlbSAiLWEiCisuUEQgMAorLklQICJcZkJcLVwtYWRkXC1pbmRpcmVjdFxmUiIgNAorLklYIEl0ZW0gIi0tYWRkLWluZGlyZWN0IgorLlBECitTcGVjaWZpZXMgdGhhdCB3aGVuIFxmQmRsbHRvb2xcZlIgaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgZmlsZSBpdAorc2hvdWxkIGFkZCBhIHNlY3Rpb24gd2hpY2ggYWxsb3dzIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgdG8gYmUKK3JlZmVyZW5jZWQgd2l0aG91dCB1c2luZyB0aGUgaW1wb3J0IGxpYnJhcnkuICBXaGF0ZXZlciB0aGUgaGVsbCB0aGF0CittZWFucyEKKy5JUCAiXGZCXC1VXGZSIiA0CisuSVggSXRlbSAiLVUiCisuUEQgMAorLklQICJcZkJcLVwtYWRkXC11bmRlcnNjb3JlXGZSIiA0CisuSVggSXRlbSAiLS1hZGQtdW5kZXJzY29yZSIKKy5QRAorU3BlY2lmaWVzIHRoYXQgd2hlbiBcZkJkbGx0b29sXGZSIGlzIGNyZWF0aW5nIHRoZSBleHBvcnRzIGZpbGUgaXQKK3Nob3VsZCBwcmVwZW5kIGFuIHVuZGVyc2NvcmUgdG8gdGhlIG5hbWVzIG9mIFxmSWFsbFxmUiBleHBvcnRlZCBzeW1ib2xzLgorLklQICJcZkJcLVwtbm9cLWxlYWRpbmdcLXVuZGVyc2NvcmVcZlIiIDQKKy5JWCBJdGVtICItLW5vLWxlYWRpbmctdW5kZXJzY29yZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1sZWFkaW5nXC11bmRlcnNjb3JlXGZSIiA0CisuSVggSXRlbSAiLS1sZWFkaW5nLXVuZGVyc2NvcmUiCisuUEQKK1NwZWNpZmllcyB3aGV0aGVyIHN0YW5kYXJkIHN5bWJvbCBzaG91bGQgYmUgZm9yY2VkIHRvIGJlIHByZWZpeGVkLCBvcgorbm90LgorLklQICJcZkJcLVwtYWRkXC1zdGRjYWxsXC11bmRlcnNjb3JlXGZSIiA0CisuSVggSXRlbSAiLS1hZGQtc3RkY2FsbC11bmRlcnNjb3JlIgorU3BlY2lmaWVzIHRoYXQgd2hlbiBcZkJkbGx0b29sXGZSIGlzIGNyZWF0aW5nIHRoZSBleHBvcnRzIGZpbGUgaXQKK3Nob3VsZCBwcmVwZW5kIGFuIHVuZGVyc2NvcmUgdG8gdGhlIG5hbWVzIG9mIGV4cG9ydGVkIFxmSXN0ZGNhbGxcZlIKK2Z1bmN0aW9ucy4gVmFyaWFibGUgbmFtZXMgYW5kIG5vbi1zdGRjYWxsIGZ1bmN0aW9uIG5hbWVzIGFyZSBub3QgbW9kaWZpZWQuCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBjcmVhdGluZyBHTlUtY29tcGF0aWJsZSBpbXBvcnQgbGlicyBmb3IgdGhpcmQKK3BhcnR5IERMTHMgdGhhdCB3ZXJlIGJ1aWx0IHdpdGggTVMtV2luZG93cyB0b29scy4KKy5JUCAiXGZCXC1rXGZSIiA0CisuSVggSXRlbSAiLWsiCisuUEQgMAorLklQICJcZkJcLVwta2lsbFwtYXRcZlIiIDQKKy5JWCBJdGVtICItLWtpbGwtYXQiCisuUEQKK1NwZWNpZmllcyB0aGF0IHdoZW4gXGZCZGxsdG9vbFxmUiBpcyBjcmVhdGluZyB0aGUgZXhwb3J0cyBmaWxlIGl0CitzaG91bGQgbm90IGFwcGVuZCB0aGUgc3RyaW5nIFxmQkAgPG51bWJlcj5cZlIuICBUaGVzZSBudW1iZXJzIGFyZQorY2FsbGVkIG9yZGluYWwgbnVtYmVycyBhbmQgdGhleSByZXByZXNlbnQgYW5vdGhlciB3YXkgb2YgYWNjZXNzaW5nIHRoZQorZnVuY3Rpb24gaW4gYSBccy0xRExMXHMwLCBvdGhlciB0aGFuIGJ5IG5hbWUuCisuSVAgIlxmQlwtQVxmUiIgNAorLklYIEl0ZW0gIi1BIgorLlBEIDAKKy5JUCAiXGZCXC1cLWFkZFwtc3RkY2FsbFwtYWxpYXNcZlIiIDQKKy5JWCBJdGVtICItLWFkZC1zdGRjYWxsLWFsaWFzIgorLlBECitTcGVjaWZpZXMgdGhhdCB3aGVuIFxmQmRsbHRvb2xcZlIgaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgZmlsZSBpdAorc2hvdWxkIGFkZCBhbGlhc2VzIGZvciBzdGRjYWxsIHN5bWJvbHMgd2l0aG91dCBcZkJAIDxudW1iZXI+XGZSCitpbiBhZGRpdGlvbiB0byB0aGUgc3ltYm9scyB3aXRoIFxmQkAgPG51bWJlcj5cZlIuCisuSVAgIlxmQlwtcFxmUiIgNAorLklYIEl0ZW0gIi1wIgorLlBEIDAKKy5JUCAiXGZCXC1cLWV4dFwtcHJlZml4XC1hbGlhc1xmUiBcZklwcmVmaXhcZlIiIDQKKy5JWCBJdGVtICItLWV4dC1wcmVmaXgtYWxpYXMgcHJlZml4IgorLlBECitDYXVzZXMgXGZCZGxsdG9vbFxmUiB0byBjcmVhdGUgZXh0ZXJuYWwgYWxpYXNlcyBmb3IgYWxsIFxzLTFETExcczAKK2ltcG9ydHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeC4gIFRoZSBhbGlhc2VzIGFyZSBjcmVhdGVkIGZvciBib3RoCitleHRlcm5hbCBhbmQgaW1wb3J0IHN5bWJvbHMgd2l0aCBubyBsZWFkaW5nIHVuZGVyc2NvcmUuCisuSVAgIlxmQlwteFxmUiIgNAorLklYIEl0ZW0gIi14IgorLlBEIDAKKy5JUCAiXGZCXC1cLW5vXC1pZGF0YTRcZlIiIDQKKy5JWCBJdGVtICItLW5vLWlkYXRhNCIKKy5QRAorU3BlY2lmaWVzIHRoYXQgd2hlbiBcZkJkbGx0b29sXGZSIGlzIGNyZWF0aW5nIHRoZSBleHBvcnRzIGFuZCBsaWJyYXJ5CitmaWxlcyBpdCBzaG91bGQgb21pdCB0aGUgXGYoQ1dcKihDYC5pZGF0YTRcKihDJ1xmUiBzZWN0aW9uLiAgVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eQord2l0aCBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zLgorLklQICJcZkJcLVwtdXNlXC1udWxcLXByZWZpeGVkXC1pbXBvcnRcLXRhYmxlc1xmUiIgNAorLklYIEl0ZW0gIi0tdXNlLW51bC1wcmVmaXhlZC1pbXBvcnQtdGFibGVzIgorU3BlY2lmaWVzIHRoYXQgd2hlbiBcZkJkbGx0b29sXGZSIGlzIGNyZWF0aW5nIHRoZSBleHBvcnRzIGFuZCBsaWJyYXJ5CitmaWxlcyBpdCBzaG91bGQgcHJlZml4IHRoZSBcZihDV1wqKENgLmlkYXRhNFwqKEMnXGZSIGFuZCBcZihDV1wqKENgLmlkYXRhNVwqKEMnXGZSIGJ5IHplcm8gYW4KK2VsZW1lbnQuIFRoaXMgZW11bGF0ZXMgb2xkIGdudSBpbXBvcnQgbGlicmFyeSBnZW5lcmF0aW9uIG9mCitcJlxmKENXXCooQ2BkbGx0b29sXCooQydcZlIuIEJ5IGRlZmF1bHQgdGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZi4KKy5JUCAiXGZCXC1jXGZSIiA0CisuSVggSXRlbSAiLWMiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLWlkYXRhNVxmUiIgNAorLklYIEl0ZW0gIi0tbm8taWRhdGE1IgorLlBECitTcGVjaWZpZXMgdGhhdCB3aGVuIFxmQmRsbHRvb2xcZlIgaXMgY3JlYXRpbmcgdGhlIGV4cG9ydHMgYW5kIGxpYnJhcnkKK2ZpbGVzIGl0IHNob3VsZCBvbWl0IHRoZSBcZihDV1wqKENgLmlkYXRhNVwqKEMnXGZSIHNlY3Rpb24uICBUaGlzIGlzIGZvciBjb21wYXRpYmlsaXR5Cit3aXRoIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisuSVAgIlxmQlwtSVxmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1JIGZpbGVuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLWlkZW50aWZ5XGZSIFxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1pZGVudGlmeSBmaWxlbmFtZSIKKy5QRAorU3BlY2lmaWVzIHRoYXQgXGZCZGxsdG9vbFxmUiBzaG91bGQgaW5zcGVjdCB0aGUgaW1wb3J0IGxpYnJhcnkKK2luZGljYXRlZCBieSBcZklmaWxlbmFtZVxmUiBhbmQgcmVwb3J0LCBvbiBcZihDV1wqKENgc3Rkb3V0XCooQydcZlIsIHRoZSBuYW1lKHMpCitvZiB0aGUgYXNzb2NpYXRlZCBccy0xRExMXHMwKHMpLiAgVGhpcyBjYW4gYmUgcGVyZm9ybWVkIGluIGFkZGl0aW9uIHRvIGFueQorb3RoZXIgb3BlcmF0aW9ucyBpbmRpY2F0ZWQgYnkgdGhlIG90aGVyIG9wdGlvbnMgYW5kIGFyZ3VtZW50cy4KK1wmXGZCZGxsdG9vbFxmUiBmYWlscyBpZiB0aGUgaW1wb3J0IGxpYnJhcnkgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90CithY3R1YWxseSBhbiBpbXBvcnQgbGlicmFyeS4gU2VlIGFsc28gXGZCXC1cLWlkZW50aWZ5XC1zdHJpY3RcZlIuCisuSVAgIlxmQlwtXC1pZGVudGlmeVwtc3RyaWN0XGZSIiA0CisuSVggSXRlbSAiLS1pZGVudGlmeS1zdHJpY3QiCitNb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFxmQlwtXC1pZGVudGlmeVxmUiBvcHRpb24sIHN1Y2gKK3RoYXQgYW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgXGZJZmlsZW5hbWVcZlIgaXMgYXNzb2NpYXRlZCB3aXRoCittb3JlIHRoYW4gb25lIFxzLTFETExcczAuCisuSVAgIlxmQlwtaVxmUiIgNAorLklYIEl0ZW0gIi1pIgorLlBEIDAKKy5JUCAiXGZCXC1cLWludGVyd29ya1xmUiIgNAorLklYIEl0ZW0gIi0taW50ZXJ3b3JrIgorLlBECitTcGVjaWZpZXMgdGhhdCBcZkJkbGx0b29sXGZSIHNob3VsZCBtYXJrIHRoZSBvYmplY3RzIGluIHRoZSBsaWJyYXJ5CitmaWxlIGFuZCBleHBvcnRzIGZpbGUgdGhhdCBpdCBwcm9kdWNlcyBhcyBzdXBwb3J0aW5nIGludGVyd29ya2luZworYmV0d2VlbiBccy0xQVJNXHMwIGFuZCBUaHVtYiBjb2RlLgorLklQICJcZkJcLW5cZlIiIDQKKy5JWCBJdGVtICItbiIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub2RlbGV0ZVxmUiIgNAorLklYIEl0ZW0gIi0tbm9kZWxldGUiCisuUEQKK01ha2VzIFxmQmRsbHRvb2xcZlIgcHJlc2VydmUgdGhlIHRlbXBvcmFyeSBhc3NlbWJsZXIgZmlsZXMgaXQgdXNlZCB0bworY3JlYXRlIHRoZSBleHBvcnRzIGZpbGUuICBJZiB0aGlzIG9wdGlvbiBpcyByZXBlYXRlZCB0aGVuIGRsbHRvb2wgd2lsbAorYWxzbyBwcmVzZXJ2ZSB0aGUgdGVtcG9yYXJ5IG9iamVjdCBmaWxlcyBpdCB1c2VzIHRvIGNyZWF0ZSB0aGUgbGlicmFyeQorZmlsZS4KKy5JUCAiXGZCXC10XGZSIFxmSXByZWZpeFxmUiIgNAorLklYIEl0ZW0gIi10IHByZWZpeCIKKy5QRCAwCisuSVAgIlxmQlwtXC10ZW1wXC1wcmVmaXhcZlIgXGZJcHJlZml4XGZSIiA0CisuSVggSXRlbSAiLS10ZW1wLXByZWZpeCBwcmVmaXgiCisuUEQKK01ha2VzIFxmQmRsbHRvb2xcZlIgdXNlIFxmSXByZWZpeFxmUiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgbmFtZXMgb2YKK3RlbXBvcmFyeSBhc3NlbWJsZXIgYW5kIG9iamVjdCBmaWxlcy4gIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wIGZpbGUgcHJlZml4CitpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgcGlkLgorLklQICJcZkJcLXZcZlIiIDQKKy5JWCBJdGVtICItdiIKKy5QRCAwCisuSVAgIlxmQlwtXC12ZXJib3NlXGZSIiA0CisuSVggSXRlbSAiLS12ZXJib3NlIgorLlBECitNYWtlIGRsbHRvb2wgZGVzY3JpYmUgd2hhdCBpdCBpcyBkb2luZy4KKy5JUCAiXGZCXC1oXGZSIiA0CisuSVggSXRlbSAiLWgiCisuUEQgMAorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKKy5QRAorRGlzcGxheXMgYSBsaXN0IG9mIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCB0aGVuIGV4aXRzLgorLklQICJcZkJcLVZcZlIiIDQKKy5JWCBJdGVtICItViIKKy5QRCAwCisuSVAgIlxmQlwtXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLS12ZXJzaW9uIgorLlBECitEaXNwbGF5cyBkbGx0b29sJ3MgdmVyc2lvbiBudW1iZXIgYW5kIHRoZW4gZXhpdHMuCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgorVGhlIEluZm8gcGFnZXMgZm9yIFxmSWJpbnV0aWxzXGZSLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIFwqKEwiXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZVwqKFIiLgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWVsZmVkaXQuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1lbGZlZGl0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhMzYxYgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1lbGZlZGl0LjEKQEAgLTAsMCArMSwyMzYgQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjIzIChQb2Q6OlNpbXBsZSAzLjE0KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJFTEZFRElUIDEiCisuVEggRUxGRURJVCAxICIyMDEzLTAzLTI1IiAiYmludXRpbHMtMi4yMy4yIiAiR05VIERldmVsb3BtZW50IFRvb2xzIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK2VsZmVkaXQgXC0gVXBkYXRlIHRoZSBFTEYgaGVhZGVyIG9mIEVMRiBmaWxlcy4KKy5TSCAiU1lOT1BTSVMiCisuSVggSGVhZGVyICJTWU5PUFNJUyIKK2VsZmVkaXQgW1xmQlwtXC1pbnB1dFwtbWFjaD1cZlJcZkltYWNoaW5lXGZSXQorICAgICAgICBbXGZCXC1cLWlucHV0XC10eXBlPVxmUlxmSXR5cGVcZlJdCisgICAgICAgIFtcZkJcLVwtaW5wdXRcLW9zYWJpPVxmUlxmSW9zYWJpXGZSXQorICAgICAgICBcZkJcLVwtb3V0cHV0XC1tYWNoPVxmUlxmSW1hY2hpbmVcZlIKKyAgICAgICAgXGZCXC1cLW91dHB1dFwtdHlwZT1cZlJcZkl0eXBlXGZSCisgICAgICAgIFxmQlwtXC1vdXRwdXRcLW9zYWJpPVxmUlxmSW9zYWJpXGZSCisgICAgICAgIFtcZkJcLXZcZlJ8XGZCXC1cLXZlcnNpb25cZlJdCisgICAgICAgIFtcZkJcLWhcZlJ8XGZCXC1cLWhlbHBcZlJdCisgICAgICAgIFxmSWVsZmZpbGVcZlIuLi4KKy5TSCAiREVTQ1JJUFRJT04iCisuSVggSGVhZGVyICJERVNDUklQVElPTiIKK1wmXGZCZWxmZWRpdFxmUiB1cGRhdGVzIHRoZSBccy0xRUxGXHMwIGhlYWRlciBvZiBccy0xRUxGXHMwIGZpbGVzIHdoaWNoIGhhdmUKK3RoZSBtYXRjaGluZyBccy0xRUxGXHMwIG1hY2hpbmUgYW5kIGZpbGUgdHlwZXMuICBUaGUgb3B0aW9ucyBjb250cm9sIGhvdyBhbmQKK3doaWNoIGZpZWxkcyBpbiB0aGUgXHMtMUVMRlxzMCBoZWFkZXIgc2hvdWxkIGJlIHVwZGF0ZWQuCisuUFAKK1wmXGZJZWxmZmlsZVxmUi4uLiBhcmUgdGhlIFxzLTFFTEZcczAgZmlsZXMgdG8gYmUgdXBkYXRlZC4gIDMyXC1iaXQgYW5kCis2NFwtYml0IFxzLTFFTEZcczAgZmlsZXMgYXJlIHN1cHBvcnRlZCwgYXMgYXJlIGFyY2hpdmVzIGNvbnRhaW5pbmcgXHMtMUVMRlxzMCBmaWxlcy4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCitUaGUgbG9uZyBhbmQgc2hvcnQgZm9ybXMgb2Ygb3B0aW9ucywgc2hvd24gaGVyZSBhcyBhbHRlcm5hdGl2ZXMsIGFyZQorZXF1aXZhbGVudC4gQXQgbGVhc3Qgb25lIG9mIHRoZSBcZkJcLVwtb3V0cHV0XC1tYWNoXGZSLAorXCZcZkJcLVwtb3V0cHV0XC10eXBlXGZSIGFuZCBcZkJcLVwtb3V0cHV0XC1vc2FiaVxmUiBvcHRpb25zIG11c3QgYmUgZ2l2ZW4uCisuSVAgIlxmQlwtXC1pbnB1dFwtbWFjaD1cZlJcZkltYWNoaW5lXGZSIiA0CisuSVggSXRlbSAiLS1pbnB1dC1tYWNoPW1hY2hpbmUiCitTZXQgdGhlIG1hdGNoaW5nIGlucHV0IFxzLTFFTEZcczAgbWFjaGluZSB0eXBlIHRvIFxmSW1hY2hpbmVcZlIuICBJZgorXCZcZkJcLVwtaW5wdXRcLW1hY2hcZlIgaXNuJ3Qgc3BlY2lmaWVkLCBpdCB3aWxsIG1hdGNoIGFueSBccy0xRUxGXHMwCittYWNoaW5lIHR5cGVzLgorLlNwCitUaGUgc3VwcG9ydGVkIFxzLTFFTEZcczAgbWFjaGluZSB0eXBlcyBhcmUsIFxmSUwxT01cZlIsIFxmSUsxT01cZlIgYW5kCitcJlxmSXg4NlwtNjRcZlIuCisuSVAgIlxmQlwtXC1vdXRwdXRcLW1hY2g9XGZSXGZJbWFjaGluZVxmUiIgNAorLklYIEl0ZW0gIi0tb3V0cHV0LW1hY2g9bWFjaGluZSIKK0NoYW5nZSB0aGUgXHMtMUVMRlxzMCBtYWNoaW5lIHR5cGUgaW4gdGhlIFxzLTFFTEZcczAgaGVhZGVyIHRvIFxmSW1hY2hpbmVcZlIuICBUaGUKK3N1cHBvcnRlZCBccy0xRUxGXHMwIG1hY2hpbmUgdHlwZXMgYXJlIHRoZSBzYW1lIGFzIFxmQlwtXC1pbnB1dFwtbWFjaFxmUi4KKy5JUCAiXGZCXC1cLWlucHV0XC10eXBlPVxmUlxmSXR5cGVcZlIiIDQKKy5JWCBJdGVtICItLWlucHV0LXR5cGU9dHlwZSIKK1NldCB0aGUgbWF0Y2hpbmcgaW5wdXQgXHMtMUVMRlxzMCBmaWxlIHR5cGUgdG8gXGZJdHlwZVxmUi4gIElmCitcJlxmQlwtXC1pbnB1dFwtdHlwZVxmUiBpc24ndCBzcGVjaWZpZWQsIGl0IHdpbGwgbWF0Y2ggYW55IFxzLTFFTEZcczAgZmlsZSB0eXBlcy4KKy5TcAorVGhlIHN1cHBvcnRlZCBccy0xRUxGXHMwIGZpbGUgdHlwZXMgYXJlLCBcZklyZWxcZlIsIFxmSWV4ZWNcZlIgYW5kIFxmSWR5blxmUi4KKy5JUCAiXGZCXC1cLW91dHB1dFwtdHlwZT1cZlJcZkl0eXBlXGZSIiA0CisuSVggSXRlbSAiLS1vdXRwdXQtdHlwZT10eXBlIgorQ2hhbmdlIHRoZSBccy0xRUxGXHMwIGZpbGUgdHlwZSBpbiB0aGUgXHMtMUVMRlxzMCBoZWFkZXIgdG8gXGZJdHlwZVxmUi4gIFRoZQorc3VwcG9ydGVkIFxzLTFFTEZcczAgdHlwZXMgYXJlIHRoZSBzYW1lIGFzIFxmQlwtXC1pbnB1dFwtdHlwZVxmUi4KKy5JUCAiXGZCXC1cLWlucHV0XC1vc2FiaT1cZlJcZklvc2FiaVxmUiIgNAorLklYIEl0ZW0gIi0taW5wdXQtb3NhYmk9b3NhYmkiCitTZXQgdGhlIG1hdGNoaW5nIGlucHV0IFxzLTFFTEZcczAgZmlsZSBccy0xT1NBQklcczAgdG8gXGZJb3NhYmlcZlIuICBJZgorXCZcZkJcLVwtaW5wdXRcLW9zYWJpXGZSIGlzbid0IHNwZWNpZmllZCwgaXQgd2lsbCBtYXRjaCBhbnkgXHMtMUVMRlxzMCBPU0FCSXMuCisuU3AKK1RoZSBzdXBwb3J0ZWQgXHMtMUVMRlxzMCBPU0FCSXMgYXJlLCBcZklub25lXGZSLCBcZklccy0xSFBVWFxzMFxmUiwgXGZJTmV0QlNEXGZSLAorXCZcZklccy0xR05VXHMwXGZSLCBcZklMaW51eFxmUiAoYWxpYXMgZm9yIFxmSVxzLTFHTlVcczBcZlIpLAorXCZcZklTb2xhcmlzXGZSLCBcZklccy0xQUlYXHMwXGZSLCBcZklJcml4XGZSLAorXCZcZklGcmVlQlNEXGZSLCBcZklccy0xVFJVNjRcczBcZlIsIFxmSU1vZGVzdG9cZlIsIFxmSU9wZW5CU0RcZlIsIFxmSU9wZW5WTVNcZlIsCitcJlxmSVxzLTFOU0tcczBcZlIsIFxmSVxzLTFBUk9TXHMwXGZSIGFuZCBcZklGZW5peE9TXGZSLgorLklQICJcZkJcLVwtb3V0cHV0XC1vc2FiaT1cZlJcZklvc2FiaVxmUiIgNAorLklYIEl0ZW0gIi0tb3V0cHV0LW9zYWJpPW9zYWJpIgorQ2hhbmdlIHRoZSBccy0xRUxGXHMwIFxzLTFPU0FCSVxzMCBpbiB0aGUgXHMtMUVMRlxzMCBoZWFkZXIgdG8gXGZJb3NhYmlcZlIuICBUaGUKK3N1cHBvcnRlZCBccy0xRUxGXHMwIFxzLTFPU0FCSVxzMCBhcmUgdGhlIHNhbWUgYXMgXGZCXC1cLWlucHV0XC1vc2FiaVxmUi4KKy5JUCAiXGZCXC12XGZSIiA0CisuSVggSXRlbSAiLXYiCisuUEQgMAorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKKy5QRAorRGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgb2YgXGZCZWxmZWRpdFxmUi4KKy5JUCAiXGZCXC1oXGZSIiA0CisuSVggSXRlbSAiLWgiCisuUEQgMAorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKKy5QRAorRGlzcGxheSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgdW5kZXJzdG9vZCBieSBcZkJlbGZlZGl0XGZSLgorLklQICJcZkJAXGZSXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIkBmaWxlIgorUmVhZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tIFxmSWZpbGVcZlIuICBUaGUgb3B0aW9ucyByZWFkIGFyZQoraW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIEBcZklmaWxlXGZSIG9wdGlvbi4gIElmIFxmSWZpbGVcZlIKK2RvZXMgbm90IGV4aXN0LCBvciBjYW5ub3QgYmUgcmVhZCwgdGhlbiB0aGUgb3B0aW9uIHdpbGwgYmUgdHJlYXRlZAorbGl0ZXJhbGx5LCBhbmQgbm90IHJlbW92ZWQuCisuU3AKK09wdGlvbnMgaW4gXGZJZmlsZVxmUiBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBBIHdoaXRlc3BhY2UKK2NoYXJhY3RlciBtYXkgYmUgaW5jbHVkZWQgaW4gYW4gb3B0aW9uIGJ5IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUKK29wdGlvbiBpbiBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMuICBBbnkgY2hhcmFjdGVyIChpbmNsdWRpbmcgYQorYmFja3NsYXNoKSBtYXkgYmUgaW5jbHVkZWQgYnkgcHJlZml4aW5nIHRoZSBjaGFyYWN0ZXIgdG8gYmUgaW5jbHVkZWQKK3dpdGggYSBiYWNrc2xhc2guICBUaGUgXGZJZmlsZVxmUiBtYXkgaXRzZWxmIGNvbnRhaW4gYWRkaXRpb25hbAorQFxmSWZpbGVcZlIgb3B0aW9uczsgYW55IHN1Y2ggb3B0aW9ucyB3aWxsIGJlIHByb2Nlc3NlZCByZWN1cnNpdmVseS4KKy5TSCAiU0VFIEFMU08iCisuSVggSGVhZGVyICJTRUUgQUxTTyIKK1wmXGZJcmVhZGVsZlxmUlx8KDEpLCBhbmQgdGhlIEluZm8gZW50cmllcyBmb3IgXGZJYmludXRpbHNcZlIuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgXCooTCJccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlXCooUiIuCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtZysrLjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtZysrLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkNGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1nKysuMQpAQCAtMCwwICsxLDE5ODU5IEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yMiAoUG9kOjpTaW1wbGUgMy4wNykKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiR0NDIDEiCisuVEggR0NDIDEgIjIwMTMtMTEtMTEiICJnY2MtNC44LjMiICJHTlUiCisuXCIgRm9yIG5yb2ZmLCB0dXJuIG9mZiBqdXN0aWZpY2F0aW9uLiAgQWx3YXlzIHR1cm4gb2ZmIGh5cGhlbmF0aW9uOyBpdCBtYWtlcworLlwiIHdheSB0b28gbWFueSBtaXN0YWtlcyBpbiB0ZWNobmljYWwgZG9jdW1lbnRzLgorLmlmIG4gLmFkIGwKKy5uaAorLlNIICJOQU1FIgorZ2NjIFwtIEdOVSBwcm9qZWN0IEMgYW5kIEMrKyBjb21waWxlcgorLlNIICJTWU5PUFNJUyIKKy5JWCBIZWFkZXIgIlNZTk9QU0lTIgorZ2NjIFtcZkJcLWNcZlJ8XGZCXC1TXGZSfFxmQlwtRVxmUl0gW1xmQlwtc3RkPVxmUlxmSXN0YW5kYXJkXGZSXQorICAgIFtcZkJcLWdcZlJdIFtcZkJcLXBnXGZSXSBbXGZCXC1PXGZSXGZJbGV2ZWxcZlJdCisgICAgW1xmQlwtV1xmUlxmSXdhcm5cZlIuLi5dIFtcZkJcLVdwZWRhbnRpY1xmUl0KKyAgICBbXGZCXC1JXGZSXGZJZGlyXGZSLi4uXSBbXGZCXC1MXGZSXGZJZGlyXGZSLi4uXQorICAgIFtcZkJcLURcZlJcZkltYWNyb1xmUls9XGZJZGVmblxmUl0uLi5dIFtcZkJcLVVcZlJcZkltYWNyb1xmUl0KKyAgICBbXGZCXC1mXGZSXGZJb3B0aW9uXGZSLi4uXSBbXGZCXC1tXGZSXGZJbWFjaGluZS1vcHRpb25cZlIuLi5dCisgICAgW1xmQlwtb1xmUiBcZklvdXRmaWxlXGZSXSBbQFxmSWZpbGVcZlJdIFxmSWluZmlsZVxmUi4uLgorLlBQCitPbmx5IHRoZSBtb3N0IHVzZWZ1bCBvcHRpb25zIGFyZSBsaXN0ZWQgaGVyZTsgc2VlIGJlbG93IGZvciB0aGUKK3JlbWFpbmRlci4gIFxmQmcrK1xmUiBhY2NlcHRzIG1vc3RseSB0aGUgc2FtZSBvcHRpb25zIGFzIFxmQmdjY1xmUi4KKy5TSCAiREVTQ1JJUFRJT04iCisuSVggSGVhZGVyICJERVNDUklQVElPTiIKK1doZW4geW91IGludm9rZSBccy0xR0NDXHMwLCBpdCBub3JtYWxseSBkb2VzIHByZXByb2Nlc3NpbmcsIGNvbXBpbGF0aW9uLAorYXNzZW1ibHkgYW5kIGxpbmtpbmcuICBUaGUgXCooTCJvdmVyYWxsIG9wdGlvbnNcKihSIiBhbGxvdyB5b3UgdG8gc3RvcCB0aGlzCitwcm9jZXNzIGF0IGFuIGludGVybWVkaWF0ZSBzdGFnZS4gIEZvciBleGFtcGxlLCB0aGUgXGZCXC1jXGZSIG9wdGlvbgorc2F5cyBub3QgdG8gcnVuIHRoZSBsaW5rZXIuICBUaGVuIHRoZSBvdXRwdXQgY29uc2lzdHMgb2Ygb2JqZWN0IGZpbGVzCitvdXRwdXQgYnkgdGhlIGFzc2VtYmxlci4KKy5QUAorT3RoZXIgb3B0aW9ucyBhcmUgcGFzc2VkIG9uIHRvIG9uZSBzdGFnZSBvZiBwcm9jZXNzaW5nLiAgU29tZSBvcHRpb25zCitjb250cm9sIHRoZSBwcmVwcm9jZXNzb3IgYW5kIG90aGVycyB0aGUgY29tcGlsZXIgaXRzZWxmLiAgWWV0IG90aGVyCitvcHRpb25zIGNvbnRyb2wgdGhlIGFzc2VtYmxlciBhbmQgbGlua2VyOyBtb3N0IG9mIHRoZXNlIGFyZSBub3QKK2RvY3VtZW50ZWQgaGVyZSwgc2luY2UgeW91IHJhcmVseSBuZWVkIHRvIHVzZSBhbnkgb2YgdGhlbS4KKy5QUAorTW9zdCBvZiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdCB5b3UgY2FuIHVzZSB3aXRoIFxzLTFHQ0NcczAgYXJlIHVzZWZ1bAorZm9yIEMgcHJvZ3JhbXM7IHdoZW4gYW4gb3B0aW9uIGlzIG9ubHkgdXNlZnVsIHdpdGggYW5vdGhlciBsYW5ndWFnZQorKHVzdWFsbHkgXCooQyspLCB0aGUgZXhwbGFuYXRpb24gc2F5cyBzbyBleHBsaWNpdGx5LiAgSWYgdGhlIGRlc2NyaXB0aW9uCitmb3IgYSBwYXJ0aWN1bGFyIG9wdGlvbiBkb2VzIG5vdCBtZW50aW9uIGEgc291cmNlIGxhbmd1YWdlLCB5b3UgY2FuIHVzZQordGhhdCBvcHRpb24gd2l0aCBhbGwgc3VwcG9ydGVkIGxhbmd1YWdlcy4KKy5QUAorVGhlIFxmQmdjY1xmUiBwcm9ncmFtIGFjY2VwdHMgb3B0aW9ucyBhbmQgZmlsZSBuYW1lcyBhcyBvcGVyYW5kcy4gIE1hbnkKK29wdGlvbnMgaGF2ZSBtdWx0aS1sZXR0ZXIgbmFtZXM7IHRoZXJlZm9yZSBtdWx0aXBsZSBzaW5nbGUtbGV0dGVyIG9wdGlvbnMKK21heSBcZklub3RcZlIgYmUgZ3JvdXBlZDogXGZCXC1kdlxmUiBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIFxmQlwtZFwgXC12XGZSLgorLlBQCitZb3UgY2FuIG1peCBvcHRpb25zIGFuZCBvdGhlciBhcmd1bWVudHMuICBGb3IgdGhlIG1vc3QgcGFydCwgdGhlIG9yZGVyCit5b3UgdXNlIGRvZXNuJ3QgbWF0dGVyLiAgT3JkZXIgZG9lcyBtYXR0ZXIgd2hlbiB5b3UgdXNlIHNldmVyYWwKK29wdGlvbnMgb2YgdGhlIHNhbWUga2luZDsgZm9yIGV4YW1wbGUsIGlmIHlvdSBzcGVjaWZ5IFxmQlwtTFxmUiBtb3JlCit0aGFuIG9uY2UsIHRoZSBkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQgaW4gdGhlIG9yZGVyIHNwZWNpZmllZC4gIEFsc28sCit0aGUgcGxhY2VtZW50IG9mIHRoZSBcZkJcLWxcZlIgb3B0aW9uIGlzIHNpZ25pZmljYW50LgorLlBQCitNYW55IG9wdGlvbnMgaGF2ZSBsb25nIG5hbWVzIHN0YXJ0aW5nIHdpdGggXGZCXC1mXGZSIG9yIHdpdGgKK1wmXGZCXC1XXGZSXC1cLVwtZm9yIGV4YW1wbGUsCitcJlxmQlwtZm1vdmVcLWxvb3BcLWludmFyaWFudHNcZlIsIFxmQlwtV2Zvcm1hdFxmUiBhbmQgc28gb24uICBNb3N0IG9mCit0aGVzZSBoYXZlIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zOyB0aGUgbmVnYXRpdmUgZm9ybSBvZgorXCZcZkJcLWZmb29cZlIgaXMgXGZCXC1mbm9cLWZvb1xmUi4gIFRoaXMgbWFudWFsIGRvY3VtZW50cworb25seSBvbmUgb2YgdGhlc2UgdHdvIGZvcm1zLCB3aGljaGV2ZXIgb25lIGlzIG5vdCB0aGUgZGVmYXVsdC4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCisuU1MgIk9wdGlvbiBTdW1tYXJ5IgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbiBTdW1tYXJ5IgorSGVyZSBpcyBhIHN1bW1hcnkgb2YgYWxsIHRoZSBvcHRpb25zLCBncm91cGVkIGJ5IHR5cGUuICBFeHBsYW5hdGlvbnMgYXJlCitpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorLklQICJcZklPdmVyYWxsIE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJPdmVyYWxsIE9wdGlvbnMiCitcJlxmQlwtYyAgXC1TICBcLUUgIFwtb1xmUiBcZklmaWxlXGZSICBcZkJcLW5vXC1jYW5vbmljYWxcLXByZWZpeGVzICAKK1wmXC1waXBlICBcLXBhc3NcLWV4aXRcLWNvZGVzICAKK1wmXC14XGZSIFxmSWxhbmd1YWdlXGZSICBcZkJcLXYgIFwtIyMjICBcLVwtaGVscFxmUltcZkI9XGZSXGZJY2xhc3NcZlJbXGZCLC4uLlxmUl1dICBcZkJcLVwtdGFyZ2V0XC1oZWxwICAKK1wmXC1cLXZlcnNpb24gXC13cmFwcGVyIEBcZlJcZklmaWxlXGZSIFxmQlwtZnBsdWdpbj1cZlJcZklmaWxlXGZSIFxmQlwtZnBsdWdpblwtYXJnXC1cZlJcZkluYW1lXGZSXGZCPVxmUlxmSWFyZ1xmUiAgCitcJlxmQlwtZmR1bXBcLWFkYVwtc3BlY1xmUltcZkJcLXNsaW1cZlJdIFxmQlwtZmFkYVwtc3BlY1wtcGFyZW50PVxmUlxmSWFyZ1xmUiBcZkJcLWZkdW1wXC1nb1wtc3BlYz1cZlJcZklmaWxlXGZSCisuSVAgIlxmSUMgTGFuZ3VhZ2UgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkMgTGFuZ3VhZ2UgT3B0aW9ucyIKK1wmXGZCXC1hbnNpICBcLXN0ZD1cZlJcZklzdGFuZGFyZFxmUiAgXGZCXC1mZ251ODlcLWlubGluZSAKK1wmXC1hdXhcLWluZm9cZlIgXGZJZmlsZW5hbWVcZlIgXGZCXC1mYWxsb3dcLXBhcmFtZXRlcmxlc3NcLXZhcmlhZGljXC1mdW5jdGlvbnMgCitcJlwtZm5vXC1hc20gIFwtZm5vXC1idWlsdGluICBcLWZub1wtYnVpbHRpblwtXGZSXGZJZnVuY3Rpb25cZlIgCitcJlxmQlwtZmhvc3RlZCAgXC1mZnJlZXN0YW5kaW5nIFwtZm9wZW5tcCBcLWZtc1wtZXh0ZW5zaW9ucyBcLWZwbGFuOVwtZXh0ZW5zaW9ucyAKK1wmXC10cmlncmFwaHMgIFwtdHJhZGl0aW9uYWwgIFwtdHJhZGl0aW9uYWxcLWNwcCAKK1wmXC1mYWxsb3dcLXNpbmdsZVwtcHJlY2lzaW9uICBcLWZjb25kXC1taXNtYXRjaCBcLWZsYXhcLXZlY3RvclwtY29udmVyc2lvbnMgCitcJlwtZnNpZ25lZFwtYml0ZmllbGRzICBcLWZzaWduZWRcLWNoYXIgCitcJlwtZnVuc2lnbmVkXC1iaXRmaWVsZHMgIFwtZnVuc2lnbmVkXC1jaGFyXGZSCisuSVAgIlxmSVwqKEMrIExhbmd1YWdlIE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICIgTGFuZ3VhZ2UgT3B0aW9ucyIKK1wmXGZCXC1mYWJpXC12ZXJzaW9uPVxmUlxmSW5cZlIgIFxmQlwtZm5vXC1hY2Nlc3NcLWNvbnRyb2wgIFwtZmNoZWNrXC1uZXcgCitcJlwtZmNvbnN0ZXhwclwtZGVwdGg9XGZSXGZJblxmUiAgXGZCXC1mZnJpZW5kXC1pbmplY3Rpb24gCitcJlwtZm5vXC1lbGlkZVwtY29uc3RydWN0b3JzIAorXCZcLWZub1wtZW5mb3JjZVwtZWhcLXNwZWNzIAorXCZcLWZmb3JcLXNjb3BlICBcLWZub1wtZm9yXC1zY29wZSAgXC1mbm9cLWdudVwta2V5d29yZHMgCitcJlwtZm5vXC1pbXBsaWNpdFwtdGVtcGxhdGVzIAorXCZcLWZub1wtaW1wbGljaXRcLWlubGluZVwtdGVtcGxhdGVzIAorXCZcLWZub1wtaW1wbGVtZW50XC1pbmxpbmVzICBcLWZtc1wtZXh0ZW5zaW9ucyAKK1wmXC1mbm9cLW5vbmFuc2lcLWJ1aWx0aW5zICBcLWZub3Rocm93XC1vcHQgIFwtZm5vXC1vcGVyYXRvclwtbmFtZXMgCitcJlwtZm5vXC1vcHRpb25hbFwtZGlhZ3MgIFwtZnBlcm1pc3NpdmUgCitcJlwtZm5vXC1wcmV0dHlcLXRlbXBsYXRlcyAKK1wmXC1mcmVwbyAgXC1mbm9cLXJ0dGkgIFwtZnN0YXRzICBcLWZ0ZW1wbGF0ZVwtYmFja3RyYWNlXC1saW1pdD1cZlJcZkluXGZSIAorXCZcZkJcLWZ0ZW1wbGF0ZVwtZGVwdGg9XGZSXGZJblxmUiAKK1wmXGZCXC1mbm9cLXRocmVhZHNhZmVcLXN0YXRpY3MgXC1mdXNlXC1jeGFcLWF0ZXhpdCAgXC1mbm9cLXdlYWsgIFwtbm9zdGRpbmMrKyAKK1wmXC1mbm9cLWRlZmF1bHRcLWlubGluZSAgXC1mdmlzaWJpbGl0eVwtaW5saW5lc1wtaGlkZGVuIAorXCZcLWZ2aXNpYmlsaXR5XC1tc1wtY29tcGF0IAorXCZcLWZleHRcLW51bWVyaWNcLWxpdGVyYWxzIAorXCZcLVdhYmkgIFwtV2NvbnZlcnNpb25cLW51bGwgIFwtV2N0b3JcLWR0b3JcLXByaXZhY3kgCitcJlwtV2RlbGV0ZVwtbm9uXC12aXJ0dWFsXC1kdG9yIFwtV2xpdGVyYWxcLXN1ZmZpeCBcLVduYXJyb3dpbmcgCitcJlwtV25vZXhjZXB0IFwtV25vblwtdmlydHVhbFwtZHRvciAgXC1XcmVvcmRlciAKK1wmXC1XZWZmYysrICBcLVdzdHJpY3RcLW51bGxcLXNlbnRpbmVsIAorXCZcLVdub1wtbm9uXC10ZW1wbGF0ZVwtZnJpZW5kICBcLVdvbGRcLXN0eWxlXC1jYXN0IAorXCZcLVdvdmVybG9hZGVkXC12aXJ0dWFsICBcLVdub1wtcG1mXC1jb252ZXJzaW9ucyAKK1wmXC1Xc2lnblwtcHJvbW9cZlIKKy5JUCAiXGZJT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgTGFuZ3VhZ2UgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtIExhbmd1YWdlIE9wdGlvbnMiCitcJlxmQlwtZmNvbnN0YW50XC1zdHJpbmdcLWNsYXNzPVxmUlxmSWNsYXNzLW5hbWVcZlIgCitcJlxmQlwtZmdudVwtcnVudGltZSAgXC1mbmV4dFwtcnVudGltZSAKK1wmXC1mbm9cLW5pbFwtcmVjZWl2ZXJzIAorXCZcLWZvYmpjXC1hYmlcLXZlcnNpb249XGZSXGZJblxmUiAKK1wmXGZCXC1mb2JqY1wtY2FsbFwtY3h4XC1jZHRvcnMgCitcJlwtZm9iamNcLWRpcmVjdFwtZGlzcGF0Y2ggCitcJlwtZm9iamNcLWV4Y2VwdGlvbnMgCitcJlwtZm9iamNcLWdjIAorXCZcLWZvYmpjXC1uaWxjaGVjayAKK1wmXC1mb2JqY1wtc3RkPW9iamMxIAorXCZcLWZyZXBsYWNlXC1vYmpjXC1jbGFzc2VzIAorXCZcLWZ6ZXJvXC1saW5rIAorXCZcLWdlblwtZGVjbHMgCitcJlwtV2Fzc2lnblwtaW50ZXJjZXB0IAorXCZcLVdub1wtcHJvdG9jb2wgIFwtV3NlbGVjdG9yIAorXCZcLVdzdHJpY3RcLXNlbGVjdG9yXC1tYXRjaCAKK1wmXC1XdW5kZWNsYXJlZFwtc2VsZWN0b3JcZlIKKy5JUCAiXGZJTGFuZ3VhZ2UgSW5kZXBlbmRlbnQgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkxhbmd1YWdlIEluZGVwZW5kZW50IE9wdGlvbnMiCitcJlxmQlwtZm1lc3NhZ2VcLWxlbmd0aD1cZlJcZkluXGZSICAKK1wmXGZCXC1mZGlhZ25vc3RpY3NcLXNob3dcLWxvY2F0aW9uPVxmUltcZkJvbmNlXGZSfFxmQmV2ZXJ5LWxpbmVcZlJdICAKK1wmXGZCXC1mbm9cLWRpYWdub3N0aWNzXC1zaG93XC1vcHRpb24gXC1mbm9cLWRpYWdub3N0aWNzXC1zaG93XC1jYXJldFxmUgorLklQICJcZklXYXJuaW5nIE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJXYXJuaW5nIE9wdGlvbnMiCitcJlxmQlwtZnN5bnRheFwtb25seSAgXC1mbWF4XC1lcnJvcnM9XGZSXGZJblxmUiAgXGZCXC1XcGVkYW50aWMgCitcJlwtcGVkYW50aWNcLWVycm9ycyAKK1wmXC13ICBcLVdleHRyYSAgXC1XYWxsICBcLVdhZGRyZXNzICBcLVdhZ2dyZWdhdGVcLXJldHVybiAgCitcJlwtV2FnZ3Jlc3NpdmVcLWxvb3BcLW9wdGltaXphdGlvbnMgXC1XYXJyYXlcLWJvdW5kcyAKK1wmXC1Xbm9cLWF0dHJpYnV0ZXMgXC1Xbm9cLWJ1aWx0aW5cLW1hY3JvXC1yZWRlZmluZWQgCitcJlwtV2MrK1wtY29tcGF0IFwtV2MrKzExXC1jb21wYXQgXC1XY2FzdFwtYWxpZ24gIFwtV2Nhc3RcLXF1YWwgIAorXCZcLVdjaGFyXC1zdWJzY3JpcHRzIFwtV2Nsb2JiZXJlZCAgXC1XY29tbWVudCAKK1wmXC1XY29udmVyc2lvbiAgXC1XY292ZXJhZ2VcLW1pc21hdGNoICBcLVdub1wtY3BwICBcLVdub1wtZGVwcmVjYXRlZCAgCitcJlwtV25vXC1kZXByZWNhdGVkXC1kZWNsYXJhdGlvbnMgXC1XZGlzYWJsZWRcLW9wdGltaXphdGlvbiAgCitcJlwtV25vXC1kaXZcLWJ5XC16ZXJvIFwtV2RvdWJsZVwtcHJvbW90aW9uIFwtV2VtcHR5XC1ib2R5ICBcLVdlbnVtXC1jb21wYXJlIAorXCZcLVdub1wtZW5kaWZcLWxhYmVscyBcLVdlcnJvciAgXC1XZXJyb3I9KiAKK1wmXC1XZmF0YWxcLWVycm9ycyAgXC1XZmxvYXRcLWVxdWFsICBcLVdmb3JtYXQgIFwtV2Zvcm1hdD0yIAorXCZcLVdub1wtZm9ybWF0XC1jb250YWluc1wtbnVsIFwtV25vXC1mb3JtYXRcLWV4dHJhXC1hcmdzIFwtV2Zvcm1hdFwtbm9ubGl0ZXJhbCAKK1wmXC1XZm9ybWF0XC1zZWN1cml0eSAgXC1XZm9ybWF0XC15MmsgCitcJlwtV2ZyYW1lXC1sYXJnZXJcLXRoYW49XGZSXGZJbGVuXGZSIFxmQlwtV25vXC1mcmVlXC1ub25oZWFwXC1vYmplY3QgXC1XanVtcFwtbWlzc2VzXC1pbml0IAorXCZcLVdpZ25vcmVkXC1xdWFsaWZpZXJzIAorXCZcLVdpbXBsaWNpdCAgXC1XaW1wbGljaXRcLWZ1bmN0aW9uXC1kZWNsYXJhdGlvbiAgXC1XaW1wbGljaXRcLWludCAKK1wmXC1XaW5pdFwtc2VsZiAgXC1XaW5saW5lIFwtV21heWJlXC11bmluaXRpYWxpemVkIAorXCZcLVdub1wtaW50XC10b1wtcG9pbnRlclwtY2FzdCBcLVdub1wtaW52YWxpZFwtb2Zmc2V0b2YgCitcJlwtV2ludmFsaWRcLXBjaCBcLVdsYXJnZXJcLXRoYW49XGZSXGZJbGVuXGZSICBcZkJcLVd1bnNhZmVcLWxvb3BcLW9wdGltaXphdGlvbnMgCitcJlwtV2xvZ2ljYWxcLW9wIFwtV2xvbmdcLWxvbmcgCitcJlwtV21haW4gXC1XbWF5YmVcLXVuaW5pdGlhbGl6ZWQgXC1XbWlzc2luZ1wtYnJhY2VzICBcLVdtaXNzaW5nXC1maWVsZFwtaW5pdGlhbGl6ZXJzIAorXCZcLVdtaXNzaW5nXC1pbmNsdWRlXC1kaXJzIAorXCZcLVdub1wtbXVkZmxhcCAKK1wmXC1Xbm9cLW11bHRpY2hhciAgXC1Xbm9ubnVsbCAgXC1Xbm9cLW92ZXJmbG93IAorXCZcLVdvdmVybGVuZ3RoXC1zdHJpbmdzICBcLVdwYWNrZWQgIFwtV3BhY2tlZFwtYml0ZmllbGRcLWNvbXBhdCAgXC1XcGFkZGVkIAorXCZcLVdwYXJlbnRoZXNlcyAgXC1XcGVkYW50aWNcLW1zXC1mb3JtYXQgXC1Xbm9cLXBlZGFudGljXC1tc1wtZm9ybWF0IAorXCZcLVdwb2ludGVyXC1hcml0aCAgXC1Xbm9cLXBvaW50ZXJcLXRvXC1pbnRcLWNhc3QgCitcJlwtV3JlZHVuZGFudFwtZGVjbHMgIFwtV25vXC1yZXR1cm5cLWxvY2FsXC1hZGRyIAorXCZcLVdyZXR1cm5cLXR5cGUgIFwtV3NlcXVlbmNlXC1wb2ludCAgXC1Xc2hhZG93IAorXCZcLVdzaWduXC1jb21wYXJlICBcLVdzaWduXC1jb252ZXJzaW9uICBcLVdzaXplb2ZcLXBvaW50ZXJcLW1lbWFjY2VzcyAKK1wmXC1Xc3RhY2tcLXByb3RlY3RvciBcLVdzdGFja1wtdXNhZ2U9XGZSXGZJbGVuXGZSIFxmQlwtV3N0cmljdFwtYWxpYXNpbmcgCitcJlwtV3N0cmljdFwtYWxpYXNpbmc9biAgXC1Xc3RyaWN0XC1vdmVyZmxvdyBcLVdzdHJpY3RcLW92ZXJmbG93PVxmUlxmSW5cZlIgCitcJlxmQlwtV3N1Z2dlc3RcLWF0dHJpYnV0ZT1cZlJbXGZCcHVyZVxmUnxcZkJjb25zdFxmUnxcZkJub3JldHVyblxmUnxcZkJmb3JtYXRcZlJdIAorXCZcZkJcLVdtaXNzaW5nXC1mb3JtYXRcLWF0dHJpYnV0ZSAKK1wmXC1Xc3dpdGNoICBcLVdzd2l0Y2hcLWRlZmF1bHQgIFwtV3N3aXRjaFwtZW51bSBcLVdzeW5jXC1uYW5kIAorXCZcLVdzeXN0ZW1cLWhlYWRlcnMgIFwtV3RyYW1wb2xpbmVzICBcLVd0cmlncmFwaHMgIFwtV3R5cGVcLWxpbWl0cyAgXC1XdW5kZWYgCitcJlwtV3VuaW5pdGlhbGl6ZWQgIFwtV3Vua25vd25cLXByYWdtYXMgIFwtV25vXC1wcmFnbWFzIAorXCZcLVd1bnN1ZmZpeGVkXC1mbG9hdFwtY29uc3RhbnRzICBcLVd1bnVzZWQgIFwtV3VudXNlZFwtZnVuY3Rpb24gCitcJlwtV3VudXNlZFwtbGFiZWwgIFwtV3VudXNlZFwtbG9jYWxcLXR5cGVkZWZzIFwtV3VudXNlZFwtcGFyYW1ldGVyIAorXCZcLVdub1wtdW51c2VkXC1yZXN1bHQgXC1XdW51c2VkXC12YWx1ZSAgXC1XdW51c2VkXC12YXJpYWJsZSAKK1wmXC1XdW51c2VkXC1idXRcLXNldFwtcGFyYW1ldGVyIFwtV3VudXNlZFwtYnV0XC1zZXRcLXZhcmlhYmxlIAorXCZcLVd1c2VsZXNzXC1jYXN0IFwtV3ZhcmlhZGljXC1tYWNyb3MgXC1XdmVjdG9yXC1vcGVyYXRpb25cLXBlcmZvcm1hbmNlIAorXCZcLVd2bGEgXC1Xdm9sYXRpbGVcLXJlZ2lzdGVyXC12YXIgIFwtV3dyaXRlXC1zdHJpbmdzIFwtV3plcm9cLWFzXC1udWxsXC1wb2ludGVyXC1jb25zdGFudFxmUgorLklQICJcZklDIGFuZCBPYmplY3RpdmUtQy1vbmx5IFdhcm5pbmcgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkMgYW5kIE9iamVjdGl2ZS1DLW9ubHkgV2FybmluZyBPcHRpb25zIgorXCZcZkJcLVdiYWRcLWZ1bmN0aW9uXC1jYXN0ICBcLVdtaXNzaW5nXC1kZWNsYXJhdGlvbnMgCitcJlwtV21pc3NpbmdcLXBhcmFtZXRlclwtdHlwZSAgXC1XbWlzc2luZ1wtcHJvdG90eXBlcyAgXC1XbmVzdGVkXC1leHRlcm5zIAorXCZcLVdvbGRcLXN0eWxlXC1kZWNsYXJhdGlvbiAgXC1Xb2xkXC1zdHlsZVwtZGVmaW5pdGlvbiAKK1wmXC1Xc3RyaWN0XC1wcm90b3R5cGVzICBcLVd0cmFkaXRpb25hbCAgXC1XdHJhZGl0aW9uYWxcLWNvbnZlcnNpb24gCitcJlwtV2RlY2xhcmF0aW9uXC1hZnRlclwtc3RhdGVtZW50IFwtV3BvaW50ZXJcLXNpZ25cZlIKKy5JUCAiXGZJRGVidWdnaW5nIE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJEZWJ1Z2dpbmcgT3B0aW9ucyIKK1wmXGZCXC1kXGZSXGZJbGV0dGVyc1xmUiAgXGZCXC1kdW1wc3BlY3MgIFwtZHVtcG1hY2hpbmUgIFwtZHVtcHZlcnNpb24gCitcJlwtZnNhbml0aXplPVxmUlxmSXN0eWxlXGZSIAorXCZcZkJcLWZkYmdcLWNudFwtbGlzdCBcLWZkYmdcLWNudD1cZlJcZkljb3VudGVyLXZhbHVlLWxpc3RcZlIgCitcJlxmQlwtZmRpc2FibGVcLWlwYVwtXGZSXGZJcGFzc19uYW1lXGZSIAorXCZcZkJcLWZkaXNhYmxlXC1ydGxcLVxmUlxmSXBhc3NfbmFtZVxmUiAKK1wmXGZCXC1mZGlzYWJsZVwtcnRsXC1cZlJcZklwYXNzLW5hbWVcZlJcZkI9XGZSXGZJcmFuZ2UtbGlzdFxmUiAKK1wmXGZCXC1mZGlzYWJsZVwtdHJlZVwtXGZSXGZJcGFzc19uYW1lXGZSIAorXCZcZkJcLWZkaXNhYmxlXC10cmVlXC1cZlJcZklwYXNzLW5hbWVcZlJcZkI9XGZSXGZJcmFuZ2UtbGlzdFxmUiAKK1wmXGZCXC1mZHVtcFwtbm9hZGRyIFwtZmR1bXBcLXVubnVtYmVyZWQgXC1mZHVtcFwtdW5udW1iZXJlZFwtbGlua3MgCitcJlwtZmR1bXBcLXRyYW5zbGF0aW9uXC11bml0XGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLWNsYXNzXC1oaWVyYXJjaHlcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtaXBhXC1hbGwgXC1mZHVtcFwtaXBhXC1jZ3JhcGggXC1mZHVtcFwtaXBhXC1pbmxpbmUgCitcJlwtZmR1bXBcLXBhc3NlcyAKK1wmXC1mZHVtcFwtc3RhdGlzdGljcyAKK1wmXC1mZHVtcFwtdHJlZVwtYWxsIAorXCZcLWZkdW1wXC10cmVlXC1vcmlnaW5hbFxmUltcZkJcLVxmUlxmSW5cZlJdICAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtb3B0aW1pemVkXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLWNmZyBcLWZkdW1wXC10cmVlXC1hbGlhcyAKK1wmXC1mZHVtcFwtdHJlZVwtY2ggCitcJlwtZmR1bXBcLXRyZWVcLXNzYVxmUltcZkJcLVxmUlxmSW5cZlJdIFxmQlwtZmR1bXBcLXRyZWVcLXByZVxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC1jY3BcZlJbXGZCXC1cZlJcZkluXGZSXSBcZkJcLWZkdW1wXC10cmVlXC1kY2VcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtZ2ltcGxlXGZSW1xmQlwtcmF3XGZSXSBcZkJcLWZkdW1wXC10cmVlXC1tdWRmbGFwXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLWRvbVxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC1kc2VcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtcGhpcHJvcFxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC1waGlvcHRcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtZm9yd3Byb3BcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtY29weXJlbmFtZVxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC1ucnYgXC1mZHVtcFwtdHJlZVwtdmVjdCAKK1wmXC1mZHVtcFwtdHJlZVwtc2luayAKK1wmXC1mZHVtcFwtdHJlZVwtc3JhXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLWZvcndwcm9wXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLWZyZVxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC12cnBcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mdHJlZVwtdmVjdG9yaXplclwtdmVyYm9zZT1cZlJcZkluXGZSIAorXCZcZkJcLWZkdW1wXC10cmVlXC1zdG9yZWNjcFxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC1maW5hbFwtaW5zbnM9XGZSXGZJZmlsZVxmUiAKK1wmXGZCXC1mY29tcGFyZVwtZGVidWdcZlJbXGZCPVxmUlxmSW9wdHNcZlJdICBcZkJcLWZjb21wYXJlXC1kZWJ1Z1wtc2Vjb25kIAorXCZcLWZlbGltaW5hdGVcLWR3YXJmMlwtZHVwcyBcLWZub1wtZWxpbWluYXRlXC11bnVzZWRcLWRlYnVnXC10eXBlcyAKK1wmXC1mZWxpbWluYXRlXC11bnVzZWRcLWRlYnVnXC1zeW1ib2xzIFwtZmVtaXRcLWNsYXNzXC1kZWJ1Z1wtYWx3YXlzIAorXCZcLWZlbmFibGVcLVxmUlxmSWtpbmRcZlJcZkJcLVxmUlxmSXBhc3NcZlIgCitcJlxmQlwtZmVuYWJsZVwtXGZSXGZJa2luZFxmUlxmQlwtXGZSXGZJcGFzc1xmUlxmQj1cZlJcZklyYW5nZS1saXN0XGZSIAorXCZcZkJcLWZkZWJ1Z1wtdHlwZXNcLXNlY3Rpb24gXC1mbWVtXC1yZXBvcnRcLXdwYSAKK1wmXC1mbWVtXC1yZXBvcnQgXC1mcHJlXC1pcGFcLW1lbVwtcmVwb3J0IFwtZnBvc3RcLWlwYVwtbWVtXC1yZXBvcnQgXC1mcHJvZmlsZVwtYXJjcyAKK1wmXC1mb3B0XC1pbmZvIAorXCZcLWZvcHRcLWluZm9cLVxmUlxmSW9wdGlvbnNcZlJbXGZCPVxmUlxmSWZpbGVcZlJdIAorXCZcZkJcLWZyYW5kb21cLXNlZWQ9XGZSXGZJc3RyaW5nXGZSIFxmQlwtZnNjaGVkXC12ZXJib3NlPVxmUlxmSW5cZlIgCitcJlxmQlwtZnNlbFwtc2NoZWRcLXZlcmJvc2UgXC1mc2VsXC1zY2hlZFwtZHVtcFwtY2ZnIFwtZnNlbFwtc2NoZWRcLXBpcGVsaW5pbmdcLXZlcmJvc2UgCitcJlwtZnN0YWNrXC11c2FnZSAgXC1mdGVzdFwtY292ZXJhZ2UgIFwtZnRpbWVcLXJlcG9ydCBcLWZ2YXJcLXRyYWNraW5nIAorXCZcLWZ2YXJcLXRyYWNraW5nXC1hc3NpZ25tZW50cyAgXC1mdmFyXC10cmFja2luZ1wtYXNzaWdubWVudHNcLXRvZ2dsZSAKK1wmXC1nICBcLWdcZlJcZklsZXZlbFxmUiAgXGZCXC1ndG9nZ2xlICBcLWdjb2ZmICBcLWdkd2FyZlwtXGZSXGZJdmVyc2lvblxmUiAKK1wmXGZCXC1nZ2RiICBcLWdyZWNvcmRcLWdjY1wtc3dpdGNoZXMgIFwtZ25vXC1yZWNvcmRcLWdjY1wtc3dpdGNoZXMgCitcJlwtZ3N0YWJzICBcLWdzdGFicysgIFwtZ3N0cmljdFwtZHdhcmYgIFwtZ25vXC1zdHJpY3RcLWR3YXJmIAorXCZcLWd2bXMgIFwtZ3hjb2ZmICBcLWd4Y29mZisgCitcJlwtZm5vXC1tZXJnZVwtZGVidWdcLXN0cmluZ3MgXC1mbm9cLWR3YXJmMlwtY2ZpXC1hc20gCitcJlwtZmRlYnVnXC1wcmVmaXhcLW1hcD1cZlJcZklvbGRcZlJcZkI9XGZSXGZJbmV3XGZSIAorXCZcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1iYXNlb25seSBcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1yZWR1Y2VkIAorXCZcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1kZXRhaWxlZFxmUltcZkI9XGZSXGZJc3BlYy1saXN0XGZSXSAKK1wmXGZCXC1wICBcLXBnICBcLXByaW50XC1maWxlXC1uYW1lPVxmUlxmSWxpYnJhcnlcZlIgIFxmQlwtcHJpbnRcLWxpYmdjY1wtZmlsZVwtbmFtZSAKK1wmXC1wcmludFwtbXVsdGlcLWRpcmVjdG9yeSAgXC1wcmludFwtbXVsdGlcLWxpYiAgXC1wcmludFwtbXVsdGlcLW9zXC1kaXJlY3RvcnkgCitcJlwtcHJpbnRcLXByb2dcLW5hbWU9XGZSXGZJcHJvZ3JhbVxmUiAgXGZCXC1wcmludFwtc2VhcmNoXC1kaXJzICBcLVEgCitcJlwtcHJpbnRcLXN5c3Jvb3QgXC1wcmludFwtc3lzcm9vdFwtaGVhZGVyc1wtc3VmZml4IAorXCZcLXNhdmVcLXRlbXBzIFwtc2F2ZVwtdGVtcHM9Y3dkIFwtc2F2ZVwtdGVtcHM9b2JqIFwtdGltZVxmUltcZkI9XGZSXGZJZmlsZVxmUl0KKy5JUCAiXGZJT3B0aW1pemF0aW9uIE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJPcHRpbWl6YXRpb24gT3B0aW9ucyIKK1wmXGZCXC1mYWdncmVzc2l2ZVwtbG9vcFwtb3B0aW1pemF0aW9ucyBcLWZhbGlnblwtZnVuY3Rpb25zWz1cZlJcZkluXGZSXGZCXSAKK1wmXC1mYWxpZ25cLWp1bXBzWz1cZlJcZkluXGZSXGZCXSAKK1wmXC1mYWxpZ25cLWxhYmVsc1s9XGZSXGZJblxmUlxmQl0gXC1mYWxpZ25cLWxvb3BzWz1cZlJcZkluXGZSXGZCXSAKK1wmXC1mYXNzb2NpYXRpdmVcLW1hdGggXC1mYXV0b1wtaW5jXC1kZWMgXC1mYnJhbmNoXC1wcm9iYWJpbGl0aWVzIAorXCZcLWZicmFuY2hcLXRhcmdldFwtbG9hZFwtb3B0aW1pemUgXC1mYnJhbmNoXC10YXJnZXRcLWxvYWRcLW9wdGltaXplMiAKK1wmXC1mYnRyXC1iYlwtZXhjbHVzaXZlIFwtZmNhbGxlclwtc2F2ZXMgCitcJlwtZmNoZWNrXC1kYXRhXC1kZXBzIFwtZmNvbWJpbmVcLXN0YWNrXC1hZGp1c3RtZW50cyBcLWZjb25zZXJ2ZVwtc3RhY2sgCitcJlwtZmNvbXBhcmVcLWVsaW0gXC1mY3Byb3BcLXJlZ2lzdGVycyBcLWZjcm9zc2p1bXBpbmcgCitcJlwtZmNzZVwtZm9sbG93XC1qdW1wcyBcLWZjc2VcLXNraXBcLWJsb2NrcyBcLWZjeFwtZm9ydHJhblwtcnVsZXMgCitcJlwtZmN4XC1saW1pdGVkXC1yYW5nZSAKK1wmXC1mZGF0YVwtc2VjdGlvbnMgXC1mZGNlIFwtZmRlbGF5ZWRcLWJyYW5jaCAKK1wmXC1mZGVsZXRlXC1udWxsXC1wb2ludGVyXC1jaGVja3MgXC1mZGV2aXJ0dWFsaXplIFwtZmRzZSAKK1wmXC1mZWFybHlcLWlubGluaW5nIFwtZmlwYVwtc3JhIFwtZmV4cGVuc2l2ZVwtb3B0aW1pemF0aW9ucyBcLWZmYXRcLWx0b1wtb2JqZWN0cyAKK1wmXC1mZmFzdFwtbWF0aCBcLWZmaW5pdGVcLW1hdGhcLW9ubHkgXC1mZmxvYXRcLXN0b3JlIFwtZmV4Y2Vzc1wtcHJlY2lzaW9uPVxmUlxmSXN0eWxlXGZSIAorXCZcZkJcLWZmb3J3YXJkXC1wcm9wYWdhdGUgXC1mZnBcLWNvbnRyYWN0PVxmUlxmSXN0eWxlXGZSIFxmQlwtZmZ1bmN0aW9uXC1zZWN0aW9ucyAKK1wmXC1mZ2NzZSBcLWZnY3NlXC1hZnRlclwtcmVsb2FkIFwtZmdjc2VcLWxhcyBcLWZnY3NlXC1sbSBcLWZncmFwaGl0ZVwtaWRlbnRpdHkgCitcJlwtZmdjc2VcLXNtIFwtZmhvaXN0XC1hZGphY2VudFwtbG9hZHMgXC1maWZcLWNvbnZlcnNpb24gCitcJlwtZmlmXC1jb252ZXJzaW9uMiBcLWZpbmRpcmVjdFwtaW5saW5pbmcgCitcJlwtZmlubGluZVwtZnVuY3Rpb25zIFwtZmlubGluZVwtZnVuY3Rpb25zXC1jYWxsZWRcLW9uY2UgXC1maW5saW5lXC1saW1pdD1cZlJcZkluXGZSIAorXCZcZkJcLWZpbmxpbmVcLXNtYWxsXC1mdW5jdGlvbnMgXC1maXBhXC1jcCBcLWZpcGFcLWNwXC1jbG9uZSAKK1wmXC1maXBhXC1wdGEgXC1maXBhXC1wcm9maWxlIFwtZmlwYVwtcHVyZVwtY29uc3QgXC1maXBhXC1yZWZlcmVuY2UgCitcJlwtZmlyYVwtYWxnb3JpdGhtPVxmUlxmSWFsZ29yaXRobVxmUiAKK1wmXGZCXC1maXJhXC1yZWdpb249XGZSXGZJcmVnaW9uXGZSIFxmQlwtZmlyYVwtaG9pc3RcLXByZXNzdXJlIAorXCZcLWZpcmFcLWxvb3BcLXByZXNzdXJlIFwtZm5vXC1pcmFcLXNoYXJlXC1zYXZlXC1zbG90cyAKK1wmXC1mbm9cLWlyYVwtc2hhcmVcLXNwaWxsXC1zbG90cyBcLWZpcmFcLXZlcmJvc2U9XGZSXGZJblxmUiAKK1wmXGZCXC1maXZvcHRzIFwtZmtlZXBcLWlubGluZVwtZnVuY3Rpb25zIFwtZmtlZXBcLXN0YXRpY1wtY29uc3RzIAorXCZcLWZsb29wXC1ibG9jayBcLWZsb29wXC1pbnRlcmNoYW5nZSBcLWZsb29wXC1zdHJpcFwtbWluZSBcLWZsb29wXC1uZXN0XC1vcHRpbWl6ZSAKK1wmXC1mbG9vcFwtcGFyYWxsZWxpemVcLWFsbCBcLWZsdG8gXC1mbHRvXC1jb21wcmVzc2lvblwtbGV2ZWwgCitcJlwtZmx0b1wtcGFydGl0aW9uPVxmUlxmSWFsZ1xmUiBcZkJcLWZsdG9cLXJlcG9ydCBcLWZtZXJnZVwtYWxsXC1jb25zdGFudHMgCitcJlwtZm1lcmdlXC1jb25zdGFudHMgXC1mbW9kdWxvXC1zY2hlZCBcLWZtb2R1bG9cLXNjaGVkXC1hbGxvd1wtcmVnbW92ZXMgCitcJlwtZm1vdmVcLWxvb3BcLWludmFyaWFudHMgZm11ZGZsYXAgXC1mbXVkZmxhcGlyIFwtZm11ZGZsYXB0aCBcLWZub1wtYnJhbmNoXC1jb3VudFwtcmVnIAorXCZcLWZub1wtZGVmYXVsdFwtaW5saW5lIAorXCZcLWZub1wtZGVmZXJcLXBvcCBcLWZub1wtZnVuY3Rpb25cLWNzZSBcLWZub1wtZ3Vlc3NcLWJyYW5jaFwtcHJvYmFiaWxpdHkgCitcJlwtZm5vXC1pbmxpbmUgXC1mbm9cLW1hdGhcLWVycm5vIFwtZm5vXC1wZWVwaG9sZSBcLWZub1wtcGVlcGhvbGUyIAorXCZcLWZub1wtc2NoZWRcLWludGVyYmxvY2sgXC1mbm9cLXNjaGVkXC1zcGVjIFwtZm5vXC1zaWduZWRcLXplcm9zIAorXCZcLWZub1wtdG9wbGV2ZWxcLXJlb3JkZXIgXC1mbm9cLXRyYXBwaW5nXC1tYXRoIFwtZm5vXC16ZXJvXC1pbml0aWFsaXplZFwtaW5cLWJzcyAKK1wmXC1mb21pdFwtZnJhbWVcLXBvaW50ZXIgXC1mb3B0aW1pemVcLXJlZ2lzdGVyXC1tb3ZlIFwtZm9wdGltaXplXC1zaWJsaW5nXC1jYWxscyAKK1wmXC1mcGFydGlhbFwtaW5saW5pbmcgXC1mcGVlbFwtbG9vcHMgXC1mcHJlZGljdGl2ZVwtY29tbW9uaW5nIAorXCZcLWZwcmVmZXRjaFwtbG9vcFwtYXJyYXlzIFwtZnByb2ZpbGVcLXJlcG9ydCAKK1wmXC1mcHJvZmlsZVwtY29ycmVjdGlvbiBcLWZwcm9maWxlXC1kaXI9XGZSXGZJcGF0aFxmUiBcZkJcLWZwcm9maWxlXC1nZW5lcmF0ZSAKK1wmXC1mcHJvZmlsZVwtZ2VuZXJhdGU9XGZSXGZJcGF0aFxmUiAKK1wmXGZCXC1mcHJvZmlsZVwtdXNlIFwtZnByb2ZpbGVcLXVzZT1cZlJcZklwYXRoXGZSIFxmQlwtZnByb2ZpbGVcLXZhbHVlcyAKK1wmXC1mcmVjaXByb2NhbFwtbWF0aCBcLWZyZWUgXC1mcmVnbW92ZSBcLWZyZW5hbWVcLXJlZ2lzdGVycyBcLWZyZW9yZGVyXC1ibG9ja3MgCitcJlwtZnJlb3JkZXJcLWJsb2Nrc1wtYW5kXC1wYXJ0aXRpb24gXC1mcmVvcmRlclwtZnVuY3Rpb25zIAorXCZcLWZyZXJ1blwtY3NlXC1hZnRlclwtbG9vcCBcLWZyZXNjaGVkdWxlXC1tb2R1bG9cLXNjaGVkdWxlZFwtbG9vcHMgCitcJlwtZnJvdW5kaW5nXC1tYXRoIFwtZnNjaGVkMlwtdXNlXC1zdXBlcmJsb2NrcyBcLWZzY2hlZFwtcHJlc3N1cmUgCitcJlwtZnNjaGVkXC1zcGVjXC1sb2FkIFwtZnNjaGVkXC1zcGVjXC1sb2FkXC1kYW5nZXJvdXMgCitcJlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNuc1wtZGVwWz1cZlJcZkluXGZSXGZCXSBcLWZzY2hlZFwtc3RhbGxlZFwtaW5zbnNbPVxmUlxmSW5cZlJcZkJdIAorXCZcLWZzY2hlZFwtZ3JvdXBcLWhldXJpc3RpYyBcLWZzY2hlZFwtY3JpdGljYWxcLXBhdGhcLWhldXJpc3RpYyAKK1wmXC1mc2NoZWRcLXNwZWNcLWluc25cLWhldXJpc3RpYyBcLWZzY2hlZFwtcmFua1wtaGV1cmlzdGljIAorXCZcLWZzY2hlZFwtbGFzdFwtaW5zblwtaGV1cmlzdGljIFwtZnNjaGVkXC1kZXBcLWNvdW50XC1oZXVyaXN0aWMgCitcJlwtZnNjaGVkdWxlXC1pbnNucyBcLWZzY2hlZHVsZVwtaW5zbnMyIFwtZnNlY3Rpb25cLWFuY2hvcnMgCitcJlwtZnNlbGVjdGl2ZVwtc2NoZWR1bGluZyBcLWZzZWxlY3RpdmVcLXNjaGVkdWxpbmcyIAorXCZcLWZzZWxcLXNjaGVkXC1waXBlbGluaW5nIFwtZnNlbFwtc2NoZWRcLXBpcGVsaW5pbmdcLW91dGVyXC1sb29wcyAKK1wmXC1mc2hyaW5rXC13cmFwIFwtZnNpZ25hbGluZ1wtbmFucyBcLWZzaW5nbGVcLXByZWNpc2lvblwtY29uc3RhbnQgCitcJlwtZnNwbGl0XC1pdnNcLWluXC11bnJvbGxlciBcLWZzcGxpdFwtd2lkZVwtdHlwZXMgXC1mc3RhY2tcLXByb3RlY3RvciAKK1wmXC1mc3RhY2tcLXByb3RlY3RvclwtYWxsIFwtZnN0cmljdFwtYWxpYXNpbmcgXC1mc3RyaWN0XC1vdmVyZmxvdyAKK1wmXC1mdGhyZWFkXC1qdW1wcyBcLWZ0cmFjZXIgXC1mdHJlZVwtYml0XC1jY3AgCitcJlwtZnRyZWVcLWJ1aWx0aW5cLWNhbGxcLWRjZSBcLWZ0cmVlXC1jY3AgXC1mdHJlZVwtY2ggCitcJlwtZnRyZWVcLWNvYWxlc2NlXC1pbmxpbmVcLXZhcnMgXC1mdHJlZVwtY29hbGVzY2VcLXZhcnMgXC1mdHJlZVwtY29weVwtcHJvcCAKK1wmXC1mdHJlZVwtY29weXJlbmFtZSBcLWZ0cmVlXC1kY2UgXC1mdHJlZVwtZG9taW5hdG9yXC1vcHRzIFwtZnRyZWVcLWRzZSAKK1wmXC1mdHJlZVwtZm9yd3Byb3AgXC1mdHJlZVwtZnJlIFwtZnRyZWVcLWxvb3BcLWlmXC1jb252ZXJ0IAorXCZcLWZ0cmVlXC1sb29wXC1pZlwtY29udmVydFwtc3RvcmVzIFwtZnRyZWVcLWxvb3BcLWltIAorXCZcLWZ0cmVlXC1waGlwcm9wIFwtZnRyZWVcLWxvb3BcLWRpc3RyaWJ1dGlvbiBcLWZ0cmVlXC1sb29wXC1kaXN0cmlidXRlXC1wYXR0ZXJucyAKK1wmXC1mdHJlZVwtbG9vcFwtaXZjYW5vbiBcLWZ0cmVlXC1sb29wXC1saW5lYXIgXC1mdHJlZVwtbG9vcFwtb3B0aW1pemUgCitcJlwtZnRyZWVcLXBhcmFsbGVsaXplXC1sb29wcz1cZlJcZkluXGZSIFxmQlwtZnRyZWVcLXByZSBcLWZ0cmVlXC1wYXJ0aWFsXC1wcmUgXC1mdHJlZVwtcHRhIAorXCZcLWZ0cmVlXC1yZWFzc29jIFwtZnRyZWVcLXNpbmsgXC1mdHJlZVwtc2xzciBcLWZ0cmVlXC1zcmEgCitcJlwtZnRyZWVcLXN3aXRjaFwtY29udmVyc2lvbiBcLWZ0cmVlXC10YWlsXC1tZXJnZSAKK1wmXC1mdHJlZVwtdGVyIFwtZnRyZWVcLXZlY3RcLWxvb3BcLXZlcnNpb24gXC1mdHJlZVwtdmVjdG9yaXplIFwtZnRyZWVcLXZycCAKK1wmXC1mdW5pdFwtYXRcLWFcLXRpbWUgXC1mdW5yb2xsXC1hbGxcLWxvb3BzIFwtZnVucm9sbFwtbG9vcHMgCitcJlwtZnVuc2FmZVwtbG9vcFwtb3B0aW1pemF0aW9ucyBcLWZ1bnNhZmVcLW1hdGhcLW9wdGltaXphdGlvbnMgXC1mdW5zd2l0Y2hcLWxvb3BzIAorXCZcLWZ2YXJpYWJsZVwtZXhwYW5zaW9uXC1pblwtdW5yb2xsZXIgXC1mdmVjdFwtY29zdFwtbW9kZWwgXC1mdnB0IFwtZndlYiAKK1wmXC1md2hvbGVcLXByb2dyYW0gXC1md3BhIFwtZnVzZVwtbGQ9XGZSXGZJbGlua2VyXGZSIFxmQlwtZnVzZVwtbGlua2VyXC1wbHVnaW4gCitcJlwtXC1wYXJhbVxmUiBcZkluYW1lXGZSXGZCPVxmUlxmSXZhbHVlXGZSCitcJlxmQlwtTyAgXC1PMCAgXC1PMSAgXC1PMiAgXC1PMyAgXC1PcyBcLU9mYXN0IFwtT2dcZlIKKy5JUCAiXGZJUHJlcHJvY2Vzc29yIE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJQcmVwcm9jZXNzb3IgT3B0aW9ucyIKK1wmXGZCXC1BXGZSXGZJcXVlc3Rpb25cZlJcZkI9XGZSXGZJYW5zd2VyXGZSIAorXCZcZkJcLUFcLVxmUlxmSXF1ZXN0aW9uXGZSW1xmQj1cZlJcZklhbnN3ZXJcZlJdIAorXCZcZkJcLUMgIFwtZEQgIFwtZEkgIFwtZE0gIFwtZE4gCitcJlwtRFxmUlxmSW1hY3JvXGZSW1xmQj1cZlJcZklkZWZuXGZSXSAgXGZCXC1FICBcLUggCitcJlwtaWRpcmFmdGVyXGZSIFxmSWRpclxmUiAKK1wmXGZCXC1pbmNsdWRlXGZSIFxmSWZpbGVcZlIgIFxmQlwtaW1hY3Jvc1xmUiBcZklmaWxlXGZSIAorXCZcZkJcLWlwcmVmaXhcZlIgXGZJZmlsZVxmUiAgXGZCXC1pd2l0aHByZWZpeFxmUiBcZklkaXJcZlIgCitcJlxmQlwtaXdpdGhwcmVmaXhiZWZvcmVcZlIgXGZJZGlyXGZSICBcZkJcLWlzeXN0ZW1cZlIgXGZJZGlyXGZSIAorXCZcZkJcLWltdWx0aWxpYlxmUiBcZklkaXJcZlIgXGZCXC1pc3lzcm9vdFxmUiBcZklkaXJcZlIgCitcJlxmQlwtTSAgXC1NTSAgXC1NRiAgXC1NRyAgXC1NUCAgXC1NUSAgXC1NVCAgXC1ub3N0ZGluYyAgCitcJlwtUCAgXC1mZGVidWdcLWNwcCBcLWZ0cmFja1wtbWFjcm9cLWV4cGFuc2lvbiBcLWZ3b3JraW5nXC1kaXJlY3RvcnkgCitcJlwtcmVtYXAgXC10cmlncmFwaHMgIFwtdW5kZWYgIFwtVVxmUlxmSW1hY3JvXGZSICAKK1wmXGZCXC1XcCxcZlJcZklvcHRpb25cZlIgXGZCXC1YcHJlcHJvY2Vzc29yXGZSIFxmSW9wdGlvblxmUiBcZkJcLW5vXC1pbnRlZ3JhdGVkXC1jcHBcZlIKKy5JUCAiXGZJQXNzZW1ibGVyIE9wdGlvblxmUiIgNAorLklYIEl0ZW0gIkFzc2VtYmxlciBPcHRpb24iCitcJlxmQlwtV2EsXGZSXGZJb3B0aW9uXGZSICBcZkJcLVhhc3NlbWJsZXJcZlIgXGZJb3B0aW9uXGZSCisuSVAgIlxmSUxpbmtlciBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiTGlua2VyIE9wdGlvbnMiCitcJlxmSW9iamVjdC1maWxlLW5hbWVcZlIgIFxmQlwtbFxmUlxmSWxpYnJhcnlcZlIgCitcJlxmQlwtbm9zdGFydGZpbGVzICBcLW5vZGVmYXVsdGxpYnMgIFwtbm9zdGRsaWIgXC1waWUgXC1yZHluYW1pYyAKK1wmXC1zICBcLXN0YXRpYyBcLXN0YXRpY1wtbGliZ2NjIFwtc3RhdGljXC1saWJzdGRjKysgCitcJlwtc3RhdGljXC1saWJhc2FuIFwtc3RhdGljXC1saWJ0c2FuIAorXCZcLXNoYXJlZCBcLXNoYXJlZFwtbGliZ2NjICBcLXN5bWJvbGljIAorXCZcLVRcZlIgXGZJc2NyaXB0XGZSICBcZkJcLVdsLFxmUlxmSW9wdGlvblxmUiAgXGZCXC1YbGlua2VyXGZSIFxmSW9wdGlvblxmUiAKK1wmXGZCXC11XGZSIFxmSXN5bWJvbFxmUgorLklQICJcZklEaXJlY3RvcnkgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkRpcmVjdG9yeSBPcHRpb25zIgorXCZcZkJcLUJcZlJcZklwcmVmaXhcZlIgXGZCXC1JXGZSXGZJZGlyXGZSIFxmQlwtaXBsdWdpbmRpcj1cZlJcZklkaXJcZlIgCitcJlxmQlwtaXF1b3RlXGZSXGZJZGlyXGZSIFxmQlwtTFxmUlxmSWRpclxmUiBcZkJcLXNwZWNzPVxmUlxmSWZpbGVcZlIgXGZCXC1JXC0gCitcJlwtXC1zeXNyb290PVxmUlxmSWRpclxmUiBcZkJcLVwtbm9cLXN5c3Jvb3RcLXN1ZmZpeFxmUgorLklQICJcZklNYWNoaW5lIERlcGVuZGVudCBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiTWFjaGluZSBEZXBlbmRlbnQgT3B0aW9ucyIKK1wmXGZJQUFyY2g2NCBPcHRpb25zXGZSCitcJlxmQlwtbWJpZ1wtZW5kaWFuICBcLW1saXR0bGVcLWVuZGlhbiAKK1wmXC1tZ2VuZXJhbFwtcmVnc1wtb25seSAKK1wmXC1tY21vZGVsPXRpbnkgIFwtbWNtb2RlbD1zbWFsbCAgXC1tY21vZGVsPWxhcmdlIAorXCZcLW1zdHJpY3RcLWFsaWduIAorXCZcLW1vbWl0XC1sZWFmXC1mcmFtZVwtcG9pbnRlciAgXC1tbm9cLW9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyIAorXCZcLW10bHNcLWRpYWxlY3Q9ZGVzYyAgXC1tdGxzXC1kaWFsZWN0PXRyYWRpdGlvbmFsIAorXCZcLW1hcmNoPVxmUlxmSW5hbWVcZlIgIFxmQlwtbWNwdT1cZlJcZkluYW1lXGZSICBcZkJcLW10dW5lPVxmUlxmSW5hbWVcZlIKKy5TcAorXCZcZklBZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zXGZSCitcJlxmQlwtbWhhbGZcLXJlZ1wtZmlsZSBcLW1wcmVmZXJcLXNob3J0XC1pbnNuXC1yZWdzIAorXCZcLW1icmFuY2hcLWNvc3Q9XGZSXGZJbnVtXGZSIFxmQlwtbWNtb3ZlIFwtbW5vcHM9XGZSXGZJbnVtXGZSIFxmQlwtbXNvZnRcLWNtcHNmIAorXCZcLW1zcGxpdFwtbG9oaSBcLW1wb3N0XC1pbmMgXC1tcG9zdFwtbW9kaWZ5IFwtbXN0YWNrXC1vZmZzZXQ9XGZSXGZJbnVtXGZSIAorXCZcZkJcLW1yb3VuZFwtbmVhcmVzdCBcLW1sb25nXC1jYWxscyBcLW1zaG9ydFwtY2FsbHMgXC1tc21hbGwxNiAKK1wmXC1tZnBcLW1vZGU9XGZSXGZJbW9kZVxmUiBcZkJcLW12ZWN0XC1kb3VibGUgXC1tYXhcLXZlY3RcLWFsaWduPVxmUlxmSW51bVxmUiAKK1wmXGZCXC1tc3BsaXRcLXZlY21vdmVcLWVhcmx5IFwtbTFyZWdcLVxmUlxmSXJlZ1xmUgorLlNwCitcJlxmSVxzLTFBUk1cczAgT3B0aW9uc1xmUgorXCZcZkJcLW1hcGNzXC1mcmFtZSAgXC1tbm9cLWFwY3NcLWZyYW1lIAorXCZcLW1hYmk9XGZSXGZJbmFtZVxmUiAKK1wmXGZCXC1tYXBjc1wtc3RhY2tcLWNoZWNrICBcLW1ub1wtYXBjc1wtc3RhY2tcLWNoZWNrIAorXCZcLW1hcGNzXC1mbG9hdCAgXC1tbm9cLWFwY3NcLWZsb2F0IAorXCZcLW1hcGNzXC1yZWVudHJhbnQgIFwtbW5vXC1hcGNzXC1yZWVudHJhbnQgCitcJlwtbXNjaGVkXC1wcm9sb2cgIFwtbW5vXC1zY2hlZFwtcHJvbG9nIAorXCZcLW1saXR0bGVcLWVuZGlhbiAgXC1tYmlnXC1lbmRpYW4gIFwtbXdvcmRzXC1saXR0bGVcLWVuZGlhbiAKK1wmXC1tZmxvYXRcLWFiaT1cZlJcZkluYW1lXGZSIAorXCZcZkJcLW1mcDE2XC1mb3JtYXQ9XGZSXGZJbmFtZVxmUgorXCZcZkJcLW10aHVtYlwtaW50ZXJ3b3JrICBcLW1ub1wtdGh1bWJcLWludGVyd29yayAKK1wmXC1tY3B1PVxmUlxmSW5hbWVcZlIgIFxmQlwtbWFyY2g9XGZSXGZJbmFtZVxmUiAgXGZCXC1tZnB1PVxmUlxmSW5hbWVcZlIgIAorXCZcZkJcLW1zdHJ1Y3R1cmVcLXNpemVcLWJvdW5kYXJ5PVxmUlxmSW5cZlIgCitcJlxmQlwtbWFib3J0XC1vblwtbm9yZXR1cm4gCitcJlwtbWxvbmdcLWNhbGxzICBcLW1ub1wtbG9uZ1wtY2FsbHMgCitcJlwtbXNpbmdsZVwtcGljXC1iYXNlICBcLW1ub1wtc2luZ2xlXC1waWNcLWJhc2UgCitcJlwtbXBpY1wtcmVnaXN0ZXI9XGZSXGZJcmVnXGZSIAorXCZcZkJcLW1ub3BcLWZ1blwtZGxsaW1wb3J0IAorXCZcLW1wb2tlXC1mdW5jdGlvblwtbmFtZSAKK1wmXC1tdGh1bWIgIFwtbWFybSAKK1wmXC1tdHBjc1wtZnJhbWUgIFwtbXRwY3NcLWxlYWZcLWZyYW1lIAorXCZcLW1jYWxsZXJcLXN1cGVyXC1pbnRlcndvcmtpbmcgIFwtbWNhbGxlZVwtc3VwZXJcLWludGVyd29ya2luZyAKK1wmXC1tdHA9XGZSXGZJbmFtZVxmUiBcZkJcLW10bHNcLWRpYWxlY3Q9XGZSXGZJZGlhbGVjdFxmUiAKK1wmXGZCXC1td29yZFwtcmVsb2NhdGlvbnMgCitcJlwtbWZpeFwtY29ydGV4XC1tM1wtbGRyZCAKK1wmXC1tdW5hbGlnbmVkXC1hY2Nlc3MgCitcJlwtbW5lb25cLWZvclwtNjRiaXRzIAorXCZcLW1yZXN0cmljdFwtaXRcZlIKKy5TcAorXCZcZklccy0xQVZSXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1tbWN1PVxmUlxmSW1jdVxmUiBcZkJcLW1hY2N1bXVsYXRlXC1hcmdzIFwtbWJyYW5jaFwtY29zdD1cZlJcZkljb3N0XGZSIAorXCZcZkJcLW1jYWxsXC1wcm9sb2d1ZXMgXC1taW50OCBcLW1ub1wtaW50ZXJydXB0cyBcLW1yZWxheCAKK1wmXC1tc3RyaWN0XC1YIFwtbXRpbnlcLXN0YWNrIFwtV2FkZHJcLXNwYWNlXC1jb252ZXJ0XGZSCisuU3AKK1wmXGZJQmxhY2tmaW4gT3B0aW9uc1xmUgorXCZcZkJcLW1jcHU9XGZSXGZJY3B1XGZSW1xmQlwtXGZSXGZJc2lyZXZpc2lvblxmUl0gCitcJlxmQlwtbXNpbSBcLW1vbWl0XC1sZWFmXC1mcmFtZVwtcG9pbnRlciAgXC1tbm9cLW9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyIAorXCZcLW1zcGVjbGRcLWFub21hbHkgIFwtbW5vXC1zcGVjbGRcLWFub21hbHkgIFwtbWNzeW5jXC1hbm9tYWx5ICBcLW1ub1wtY3N5bmNcLWFub21hbHkgCitcJlwtbWxvd1wtNjRrIFwtbW5vXC1sb3c2NGsgIFwtbXN0YWNrXC1jaGVja1wtbDEgIFwtbWlkXC1zaGFyZWRcLWxpYnJhcnkgCitcJlwtbW5vXC1pZFwtc2hhcmVkXC1saWJyYXJ5ICBcLW1zaGFyZWRcLWxpYnJhcnlcLWlkPVxmUlxmSW5cZlIgCitcJlxmQlwtbWxlYWZcLWlkXC1zaGFyZWRcLWxpYnJhcnkgIFwtbW5vXC1sZWFmXC1pZFwtc2hhcmVkXC1saWJyYXJ5IAorXCZcLW1zZXBcLWRhdGEgIFwtbW5vXC1zZXBcLWRhdGEgIFwtbWxvbmdcLWNhbGxzICBcLW1ub1wtbG9uZ1wtY2FsbHMgCitcJlwtbWZhc3RcLWZwIFwtbWlubGluZVwtcGx0IFwtbW11bHRpY29yZSAgXC1tY29yZWEgIFwtbWNvcmViICBcLW1zZHJhbSAKK1wmXC1taWNwbGJcZlIKKy5TcAorXCZcZklDNlggT3B0aW9uc1xmUgorXCZcZkJcLW1iaWdcLWVuZGlhbiAgXC1tbGl0dGxlXC1lbmRpYW4gXC1tYXJjaD1cZlJcZkljcHVcZlIgCitcJlxmQlwtbXNpbSBcLW1zZGF0YT1cZlJcZklzZGF0YS10eXBlXGZSCisuU3AKK1wmXGZJXHMtMUNSSVNcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1jcHU9XGZSXGZJY3B1XGZSICBcZkJcLW1hcmNoPVxmUlxmSWNwdVxmUiAgXGZCXC1tdHVuZT1cZlJcZkljcHVcZlIgCitcJlxmQlwtbW1heFwtc3RhY2tcLWZyYW1lPVxmUlxmSW5cZlIgIFxmQlwtbWVsaW51eFwtc3RhY2tzaXplPVxmUlxmSW5cZlIgCitcJlxmQlwtbWV0cmF4NCAgXC1tZXRyYXgxMDAgIFwtbXBkZWJ1ZyAgXC1tY2NcLWluaXQgIFwtbW5vXC1zaWRlXC1lZmZlY3RzIAorXCZcLW1zdGFja1wtYWxpZ24gIFwtbWRhdGFcLWFsaWduICBcLW1jb25zdFwtYWxpZ24gCitcJlwtbTMyXC1iaXQgIFwtbTE2XC1iaXQgIFwtbThcLWJpdCAgXC1tbm9cLXByb2xvZ3VlXC1lcGlsb2d1ZSAgXC1tbm9cLWdvdHBsdCAKK1wmXC1tZWxmICBcLW1hb3V0ICBcLW1lbGludXggIFwtbWxpbnV4ICBcLXNpbSAgXC1zaW0yIAorXCZcLW1tdWxcLWJ1Z1wtd29ya2Fyb3VuZCAgXC1tbm9cLW11bFwtYnVnXC13b3JrYXJvdW5kXGZSCisuU3AKK1wmXGZJXHMtMUNSMTZcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1tYWMgCitcJlwtbWNyMTZjcGx1cyBcLW1jcjE2YyAKK1wmXC1tc2ltIFwtbWludDMyIFwtbWJpdFwtb3BzCitcJlwtbWRhdGFcLW1vZGVsPVxmUlxmSW1vZGVsXGZSCisuU3AKK1wmXGZJRGFyd2luIE9wdGlvbnNcZlIKK1wmXGZCXC1hbGxfbG9hZCAgXC1hbGxvd2FibGVfY2xpZW50ICBcLWFyY2ggIFwtYXJjaF9lcnJvcnNfZmF0YWwgCitcJlwtYXJjaF9vbmx5ICBcLWJpbmRfYXRfbG9hZCAgXC1idW5kbGUgIFwtYnVuZGxlX2xvYWRlciAKK1wmXC1jbGllbnRfbmFtZSAgXC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gIFwtY3VycmVudF92ZXJzaW9uIAorXCZcLWRlYWRfc3RyaXAgCitcJlwtZGVwZW5kZW5jeVwtZmlsZSAgXC1keWxpYl9maWxlICBcLWR5bGlua2VyX2luc3RhbGxfbmFtZSAKK1wmXC1keW5hbWljICBcLWR5bmFtaWNsaWIgIFwtZXhwb3J0ZWRfc3ltYm9sc19saXN0IAorXCZcLWZpbGVsaXN0ICBcLWZsYXRfbmFtZXNwYWNlICBcLWZvcmNlX2NwdXN1YnR5cGVfQUxMIAorXCZcLWZvcmNlX2ZsYXRfbmFtZXNwYWNlICBcLWhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lcyAKK1wmXC1pZnJhbWV3b3JrIAorXCZcLWltYWdlX2Jhc2UgIFwtaW5pdCAgXC1pbnN0YWxsX25hbWUgIFwta2VlcF9wcml2YXRlX2V4dGVybnMgCitcJlwtbXVsdGlfbW9kdWxlICBcLW11bHRpcGx5X2RlZmluZWQgIFwtbXVsdGlwbHlfZGVmaW5lZF91bnVzZWQgCitcJlwtbm9hbGxfbG9hZCAgIFwtbm9fZGVhZF9zdHJpcF9pbml0c19hbmRfdGVybXMgCitcJlwtbm9maXhwcmViaW5kaW5nIFwtbm9tdWx0aWRlZnMgIFwtbm9wcmViaW5kICBcLW5vc2VnbGlua2VkaXQgCitcJlwtcGFnZXplcm9fc2l6ZSAgXC1wcmViaW5kICBcLXByZWJpbmRfYWxsX3R3b2xldmVsX21vZHVsZXMgCitcJlwtcHJpdmF0ZV9idW5kbGUgIFwtcmVhZF9vbmx5X3JlbG9jcyAgXC1zZWN0YWxpZ24gCitcJlwtc2VjdG9iamVjdHN5bWJvbHMgIFwtd2h5bG9hZCAgXC1zZWcxYWRkciAKK1wmXC1zZWN0Y3JlYXRlICBcLXNlY3RvYmplY3RzeW1ib2xzICBcLXNlY3RvcmRlciAKK1wmXC1zZWdhZGRyIFwtc2Vnc19yZWFkX29ubHlfYWRkciBcLXNlZ3NfcmVhZF93cml0ZV9hZGRyIAorXCZcLXNlZ19hZGRyX3RhYmxlICBcLXNlZ19hZGRyX3RhYmxlX2ZpbGVuYW1lICBcLXNlZ2xpbmtlZGl0IAorXCZcLXNlZ3Byb3QgIFwtc2Vnc19yZWFkX29ubHlfYWRkciAgXC1zZWdzX3JlYWRfd3JpdGVfYWRkciAKK1wmXC1zaW5nbGVfbW9kdWxlICBcLXN0YXRpYyAgXC1zdWJfbGlicmFyeSAgXC1zdWJfdW1icmVsbGEgCitcJlwtdHdvbGV2ZWxfbmFtZXNwYWNlICBcLXVtYnJlbGxhICBcLXVuZGVmaW5lZCAKK1wmXC11bmV4cG9ydGVkX3N5bWJvbHNfbGlzdCAgXC13ZWFrX3JlZmVyZW5jZV9taXNtYXRjaGVzIAorXCZcLXdoYXRzbG9hZGVkIFwtRiBcLWd1c2VkIFwtZ2Z1bGwgXC1tbWFjb3N4XC12ZXJzaW9uXC1taW49XGZSXGZJdmVyc2lvblxmUiAKK1wmXGZCXC1ta2VybmVsIFwtbW9uZVwtYnl0ZVwtYm9vbFxmUgorLlNwCitcJlxmSVxzLTFERUNcczAgQWxwaGEgT3B0aW9uc1xmUgorXCZcZkJcLW1ub1wtZnBcLXJlZ3MgIFwtbXNvZnRcLWZsb2F0IAorXCZcLW1pZWVlICBcLW1pZWVlXC13aXRoXC1pbmV4YWN0ICBcLW1pZWVlXC1jb25mb3JtYW50IAorXCZcLW1mcFwtdHJhcFwtbW9kZT1cZlJcZkltb2RlXGZSICBcZkJcLW1mcFwtcm91bmRpbmdcLW1vZGU9XGZSXGZJbW9kZVxmUiAKK1wmXGZCXC1tdHJhcFwtcHJlY2lzaW9uPVxmUlxmSW1vZGVcZlIgIFxmQlwtbWJ1aWxkXC1jb25zdGFudHMgCitcJlwtbWNwdT1cZlJcZkljcHUtdHlwZVxmUiAgXGZCXC1tdHVuZT1cZlJcZkljcHUtdHlwZVxmUiAKK1wmXGZCXC1tYnd4ICBcLW1tYXggIFwtbWZpeCAgXC1tY2l4IAorXCZcLW1mbG9hdFwtdmF4ICBcLW1mbG9hdFwtaWVlZSAKK1wmXC1tZXhwbGljaXRcLXJlbG9jcyAgXC1tc21hbGxcLWRhdGEgIFwtbWxhcmdlXC1kYXRhIAorXCZcLW1zbWFsbFwtdGV4dCAgXC1tbGFyZ2VcLXRleHQgCitcJlwtbW1lbW9yeVwtbGF0ZW5jeT1cZlJcZkl0aW1lXGZSCisuU3AKK1wmXGZJXHMtMUZSMzBcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1zbWFsbFwtbW9kZWwgXC1tbm9cLWxzaW1cZlIKKy5TcAorXCZcZklccy0xRlJWXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1tZ3ByXC0zMiAgXC1tZ3ByXC02NCAgXC1tZnByXC0zMiAgXC1tZnByXC02NCAKK1wmXC1taGFyZFwtZmxvYXQgIFwtbXNvZnRcLWZsb2F0IAorXCZcLW1hbGxvY1wtY2MgIFwtbWZpeGVkXC1jYyAgXC1tZHdvcmQgIFwtbW5vXC1kd29yZCAKK1wmXC1tZG91YmxlICBcLW1ub1wtZG91YmxlIAorXCZcLW1tZWRpYSAgXC1tbm9cLW1lZGlhICBcLW1tdWxhZGQgIFwtbW5vXC1tdWxhZGQgCitcJlwtbWZkcGljICBcLW1pbmxpbmVcLXBsdCBcLW1ncHJlbFwtcm8gIFwtbXVsdGlsaWJcLWxpYnJhcnlcLXBpYyAKK1wmXC1tbGlua2VkXC1mcCAgXC1tbG9uZ1wtY2FsbHMgIFwtbWFsaWduXC1sYWJlbHMgCitcJlwtbWxpYnJhcnlcLXBpYyAgXC1tYWNjXC00ICBcLW1hY2NcLTggCitcJlwtbXBhY2sgIFwtbW5vXC1wYWNrICBcLW1ub1wtZWZsYWdzICBcLW1jb25kXC1tb3ZlICBcLW1ub1wtY29uZFwtbW92ZSAKK1wmXC1tb3B0aW1pemVcLW1lbWJhciBcLW1ub1wtb3B0aW1pemVcLW1lbWJhciAKK1wmXC1tc2NjICBcLW1ub1wtc2NjICBcLW1jb25kXC1leGVjICBcLW1ub1wtY29uZFwtZXhlYyAKK1wmXC1tdmxpd1wtYnJhbmNoICBcLW1ub1wtdmxpd1wtYnJhbmNoIAorXCZcLW1tdWx0aVwtY29uZFwtZXhlYyAgXC1tbm9cLW11bHRpXC1jb25kXC1leGVjICBcLW1uZXN0ZWRcLWNvbmRcLWV4ZWMgCitcJlwtbW5vXC1uZXN0ZWRcLWNvbmRcLWV4ZWMgIFwtbXRvbWNhdFwtc3RhdHMgCitcJlwtbVRMUyBcLW10bHMgCitcJlwtbWNwdT1cZlJcZkljcHVcZlIKKy5TcAorXCZcZklHTlUvTGludXggT3B0aW9uc1xmUgorXCZcZkJcLW1nbGliYyBcLW11Y2xpYmMgXC1tYmlvbmljIFwtbWFuZHJvaWQgCitcJlwtdG5vXC1hbmRyb2lkXC1jYyBcLXRub1wtYW5kcm9pZFwtbGRcZlIKKy5TcAorXCZcZklIOC8zMDAgT3B0aW9uc1xmUgorXCZcZkJcLW1yZWxheCAgXC1taCAgXC1tcyAgXC1tbiAgXC1tZXhyIFwtbW5vXC1leHIgIFwtbWludDMyICBcLW1hbGlnblwtMzAwXGZSCisuU3AKK1wmXGZJXHMtMUhQUEFcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1hcmNoPVxmUlxmSWFyY2hpdGVjdHVyZS10eXBlXGZSIAorXCZcZkJcLW1iaWdcLXN3aXRjaCAgXC1tZGlzYWJsZVwtZnByZWdzICBcLW1kaXNhYmxlXC1pbmRleGluZyAKK1wmXC1tZmFzdFwtaW5kaXJlY3RcLWNhbGxzICBcLW1nYXMgIFwtbWdudVwtbGQgICBcLW1ocFwtbGQgCitcJlwtbWZpeGVkXC1yYW5nZT1cZlJcZklyZWdpc3Rlci1yYW5nZVxmUiAKK1wmXGZCXC1tanVtcFwtaW5cLWRlbGF5IFwtbWxpbmtlclwtb3B0IFwtbWxvbmdcLWNhbGxzIAorXCZcLW1sb25nXC1sb2FkXC1zdG9yZSAgXC1tbm9cLWJpZ1wtc3dpdGNoICBcLW1ub1wtZGlzYWJsZVwtZnByZWdzIAorXCZcLW1ub1wtZGlzYWJsZVwtaW5kZXhpbmcgIFwtbW5vXC1mYXN0XC1pbmRpcmVjdFwtY2FsbHMgIFwtbW5vXC1nYXMgCitcJlwtbW5vXC1qdW1wXC1pblwtZGVsYXkgIFwtbW5vXC1sb25nXC1sb2FkXC1zdG9yZSAKK1wmXC1tbm9cLXBvcnRhYmxlXC1ydW50aW1lICBcLW1ub1wtc29mdFwtZmxvYXQgCitcJlwtbW5vXC1zcGFjZVwtcmVncyAgXC1tc29mdFwtZmxvYXQgIFwtbXBhXC1yaXNjXC0xXC0wIAorXCZcLW1wYVwtcmlzY1wtMVwtMSAgXC1tcGFcLXJpc2NcLTJcLTAgIFwtbXBvcnRhYmxlXC1ydW50aW1lIAorXCZcLW1zY2hlZHVsZT1cZlJcZkljcHUtdHlwZVxmUiAgXGZCXC1tc3BhY2VcLXJlZ3MgIFwtbXNpbyAgXC1td3NpbyAKK1wmXC1tdW5peD1cZlJcZkl1bml4LXN0ZFxmUiAgXGZCXC1ub2xpYmRsZCAgXC1zdGF0aWMgIFwtdGhyZWFkc1xmUgorLlNwCitcJlxmSWkzODYgYW5kIHg4NlwtNjQgT3B0aW9uc1xmUgorXCZcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSICBcZkJcLW1hcmNoPVxmUlxmSWNwdS10eXBlXGZSIAorXCZcZkJcLW1mcG1hdGg9XGZSXGZJdW5pdFxmUiAKK1wmXGZCXC1tYXNtPVxmUlxmSWRpYWxlY3RcZlIgIFxmQlwtbW5vXC1mYW5jeVwtbWF0aFwtMzg3IAorXCZcLW1ub1wtZnBcLXJldFwtaW5cLTM4NyAgXC1tc29mdFwtZmxvYXQgCitcJlwtbW5vXC13aWRlXC1tdWx0aXBseSAgXC1tcnRkICBcLW1hbGlnblwtZG91YmxlIAorXCZcLW1wcmVmZXJyZWRcLXN0YWNrXC1ib3VuZGFyeT1cZlJcZkludW1cZlIgCitcJlxmQlwtbWluY29taW5nXC1zdGFja1wtYm91bmRhcnk9XGZSXGZJbnVtXGZSIAorXCZcZkJcLW1jbGQgXC1tY3gxNiBcLW1zYWhmIFwtbW1vdmJlIFwtbWNyYzMyIAorXCZcLW1yZWNpcCBcLW1yZWNpcD1cZlJcZklvcHRcZlIgCitcJlxmQlwtbXZ6ZXJvdXBwZXIgXC1tcHJlZmVyXC1hdngxMjggCitcJlwtbW1teCAgXC1tc3NlICBcLW1zc2UyIFwtbXNzZTMgXC1tc3NzZTMgXC1tc3NlNC4xIFwtbXNzZTQuMiBcLW1zc2U0IFwtbWF2eCAKK1wmXC1tYXZ4MiBcLW1hZXMgXC1tcGNsbXVsIFwtbWZzZ3NiYXNlIFwtbXJkcm5kIFwtbWYxNmMgXC1tZm1hIAorXCZcLW1zc2U0YSBcLW0zZG5vdyBcLW1wb3BjbnQgXC1tYWJtIFwtbWJtaSBcLW10Ym0gXC1tZm1hNCBcLW14b3AgXC1tbHpjbnQgCitcJlwtbWJtaTIgXC1tcnRtIFwtbWx3cCBcLW10aHJlYWRzIAorXCZcLW1ub1wtYWxpZ25cLXN0cmluZ29wcyAgXC1taW5saW5lXC1hbGxcLXN0cmluZ29wcyAKK1wmXC1taW5saW5lXC1zdHJpbmdvcHNcLWR5bmFtaWNhbGx5IFwtbXN0cmluZ29wXC1zdHJhdGVneT1cZlJcZklhbGdcZlIgCitcJlxmQlwtbXB1c2hcLWFyZ3MgIFwtbWFjY3VtdWxhdGVcLW91dGdvaW5nXC1hcmdzICBcLW0xMjhiaXRcLWxvbmdcLWRvdWJsZSAKK1wmXC1tOTZiaXRcLWxvbmdcLWRvdWJsZSBcLW1sb25nXC1kb3VibGVcLTY0IFwtbWxvbmdcLWRvdWJsZVwtODAgCitcJlwtbXJlZ3Bhcm09XGZSXGZJbnVtXGZSICBcZkJcLW1zc2VyZWdwYXJtIAorXCZcLW12ZWNsaWJhYmk9XGZSXGZJdHlwZVxmUiBcZkJcLW12ZWN0OFwtcmV0XC1pblwtbWVtIAorXCZcLW1wYzMyIFwtbXBjNjQgXC1tcGM4MCBcLW1zdGFja3JlYWxpZ24gCitcJlwtbW9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyICBcLW1ub1wtcmVkXC16b25lIFwtbW5vXC10bHNcLWRpcmVjdFwtc2VnXC1yZWZzIAorXCZcLW1jbW9kZWw9XGZSXGZJY29kZS1tb2RlbFxmUiBcZkJcLW1hYmk9XGZSXGZJbmFtZVxmUiBcZkJcLW1hZGRyZXNzXC1tb2RlPVxmUlxmSW1vZGVcZlIgCitcJlxmQlwtbTMyIFwtbTY0IFwtbXgzMiBcLW1sYXJnZVwtZGF0YVwtdGhyZXNob2xkPVxmUlxmSW51bVxmUiAKK1wmXGZCXC1tc3NlMmF2eCBcLW1mZW50cnkgXC1tOGJpdFwtaWRpdiAKK1wmXC1tYXZ4MjU2XC1zcGxpdFwtdW5hbGlnbmVkXC1sb2FkIFwtbWF2eDI1Nlwtc3BsaXRcLXVuYWxpZ25lZFwtc3RvcmVcZlIKKy5TcAorXCZcZklpMzg2IGFuZCB4ODZcLTY0IFdpbmRvd3MgT3B0aW9uc1xmUgorXCZcZkJcLW1jb25zb2xlIFwtbWN5Z3dpbiBcLW1ub1wtY3lnd2luIFwtbWRsbCAKK1wmXC1tbm9wXC1mdW5cLWRsbGltcG9ydCBcLW10aHJlYWQgCitcJlwtbXVuaWNvZGUgXC1td2luMzIgXC1td2luZG93cyBcLWZub1wtc2V0XC1zdGFja1wtZXhlY3V0YWJsZVxmUgorLlNwCitcJlxmSVxzLTFJQVwtNjRcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1iaWdcLWVuZGlhbiAgXC1tbGl0dGxlXC1lbmRpYW4gIFwtbWdudVwtYXMgIFwtbWdudVwtbGQgIFwtbW5vXC1waWMgCitcJlwtbXZvbGF0aWxlXC1hc21cLXN0b3AgIFwtbXJlZ2lzdGVyXC1uYW1lcyAgXC1tc2RhdGEgXC1tbm9cLXNkYXRhIAorXCZcLW1jb25zdGFudFwtZ3AgIFwtbWF1dG9cLXBpYyAgXC1tZnVzZWRcLW1hZGQgCitcJlwtbWlubGluZVwtZmxvYXRcLWRpdmlkZVwtbWluXC1sYXRlbmN5IAorXCZcLW1pbmxpbmVcLWZsb2F0XC1kaXZpZGVcLW1heFwtdGhyb3VnaHB1dCAKK1wmXC1tbm9cLWlubGluZVwtZmxvYXRcLWRpdmlkZSAKK1wmXC1taW5saW5lXC1pbnRcLWRpdmlkZVwtbWluXC1sYXRlbmN5IAorXCZcLW1pbmxpbmVcLWludFwtZGl2aWRlXC1tYXhcLXRocm91Z2hwdXQgIAorXCZcLW1ub1wtaW5saW5lXC1pbnRcLWRpdmlkZSAKK1wmXC1taW5saW5lXC1zcXJ0XC1taW5cLWxhdGVuY3kgXC1taW5saW5lXC1zcXJ0XC1tYXhcLXRocm91Z2hwdXQgCitcJlwtbW5vXC1pbmxpbmVcLXNxcnQgCitcJlwtbWR3YXJmMlwtYXNtIFwtbWVhcmx5XC1zdG9wXC1iaXRzIAorXCZcLW1maXhlZFwtcmFuZ2U9XGZSXGZJcmVnaXN0ZXItcmFuZ2VcZlIgXGZCXC1tdGxzXC1zaXplPVxmUlxmSXRscy1zaXplXGZSIAorXCZcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSIFxmQlwtbWlscDMyIFwtbWxwNjQgCitcJlwtbXNjaGVkXC1iclwtZGF0YVwtc3BlYyBcLW1zY2hlZFwtYXJcLWRhdGFcLXNwZWMgXC1tc2NoZWRcLWNvbnRyb2xcLXNwZWMgCitcJlwtbXNjaGVkXC1iclwtaW5cLWRhdGFcLXNwZWMgXC1tc2NoZWRcLWFyXC1pblwtZGF0YVwtc3BlYyBcLW1zY2hlZFwtaW5cLWNvbnRyb2xcLXNwZWMgCitcJlwtbXNjaGVkXC1zcGVjXC1sZGMgXC1tc2NoZWRcLXNwZWNcLWNvbnRyb2xcLWxkYyAKK1wmXC1tc2NoZWRcLXByZWZlclwtbm9uXC1kYXRhXC1zcGVjXC1pbnNucyBcLW1zY2hlZFwtcHJlZmVyXC1ub25cLWNvbnRyb2xcLXNwZWNcLWluc25zIAorXCZcLW1zY2hlZFwtc3RvcFwtYml0c1wtYWZ0ZXJcLWV2ZXJ5XC1jeWNsZSBcLW1zY2hlZFwtY291bnRcLXNwZWNcLWluXC1jcml0aWNhbFwtcGF0aCAKK1wmXC1tc2VsXC1zY2hlZFwtZG9udFwtY2hlY2tcLWNvbnRyb2xcLXNwZWMgXC1tc2NoZWRcLWZwXC1tZW1cLWRlcHNcLXplcm9cLWNvc3QgCitcJlwtbXNjaGVkXC1tYXhcLW1lbW9yeVwtaW5zbnNcLWhhcmRcLWxpbWl0IFwtbXNjaGVkXC1tYXhcLW1lbW9yeVwtaW5zbnM9XGZSXGZJbWF4LWluc25zXGZSCisuU3AKK1wmXGZJXHMtMUxNMzJcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1iYXJyZWxcLXNoaWZ0XC1lbmFibGVkIFwtbWRpdmlkZVwtZW5hYmxlZCBcLW1tdWx0aXBseVwtZW5hYmxlZCAKK1wmXC1tc2lnblwtZXh0ZW5kXC1lbmFibGVkIFwtbXVzZXJcLWVuYWJsZWRcZlIKKy5TcAorXCZcZklNMzJSL0QgT3B0aW9uc1xmUgorXCZcZkJcLW0zMnIyIFwtbTMycnggXC1tMzJyIAorXCZcLW1kZWJ1ZyAKK1wmXC1tYWxpZ25cLWxvb3BzIFwtbW5vXC1hbGlnblwtbG9vcHMgCitcJlwtbWlzc3VlXC1yYXRlPVxmUlxmSW51bWJlclxmUiAKK1wmXGZCXC1tYnJhbmNoXC1jb3N0PVxmUlxmSW51bWJlclxmUiAKK1wmXGZCXC1tbW9kZWw9XGZSXGZJY29kZS1zaXplLW1vZGVsLXR5cGVcZlIgCitcJlxmQlwtbXNkYXRhPVxmUlxmSXNkYXRhLXR5cGVcZlIgCitcJlxmQlwtbW5vXC1mbHVzaFwtZnVuYyBcLW1mbHVzaFwtZnVuYz1cZlJcZkluYW1lXGZSIAorXCZcZkJcLW1ub1wtZmx1c2hcLXRyYXAgXC1tZmx1c2hcLXRyYXA9XGZSXGZJbnVtYmVyXGZSIAorXCZcZkJcLUdcZlIgXGZJbnVtXGZSCisuU3AKK1wmXGZJTTMyQyBPcHRpb25zXGZSCitcJlxmQlwtbWNwdT1cZlJcZkljcHVcZlIgXGZCXC1tc2ltIFwtbWVtcmVncz1cZlJcZkludW1iZXJcZlIKKy5TcAorXCZcZklNNjgweDAgT3B0aW9uc1xmUgorXCZcZkJcLW1hcmNoPVxmUlxmSWFyY2hcZlIgIFxmQlwtbWNwdT1cZlJcZkljcHVcZlIgIFxmQlwtbXR1bmU9XGZSXGZJdHVuZVxmUgorXCZcZkJcLW02ODAwMCAgXC1tNjgwMjAgIFwtbTY4MDIwXC00MCAgXC1tNjgwMjBcLTYwICBcLW02ODAzMCAgXC1tNjgwNDAgCitcJlwtbTY4MDYwICBcLW1jcHUzMiAgXC1tNTIwMCAgXC1tNTIwNmUgIFwtbTUyOHggIFwtbTUzMDcgIFwtbTU0MDcgCitcJlwtbWNmdjRlICBcLW1iaXRmaWVsZCAgXC1tbm9cLWJpdGZpZWxkICBcLW1jNjgwMDAgIFwtbWM2ODAyMCAKK1wmXC1tbm9iaXRmaWVsZCAgXC1tcnRkICBcLW1ub1wtcnRkICBcLW1kaXYgIFwtbW5vXC1kaXYgIFwtbXNob3J0IAorXCZcLW1ub1wtc2hvcnQgIFwtbWhhcmRcLWZsb2F0ICBcLW02ODg4MSAgXC1tc29mdFwtZmxvYXQgIFwtbXBjcmVsIAorXCZcLW1hbGlnblwtaW50ICBcLW1zdHJpY3RcLWFsaWduICBcLW1zZXBcLWRhdGEgIFwtbW5vXC1zZXBcLWRhdGEgCitcJlwtbXNoYXJlZFwtbGlicmFyeVwtaWQ9biAgXC1taWRcLXNoYXJlZFwtbGlicmFyeSAgXC1tbm9cLWlkXC1zaGFyZWRcLWxpYnJhcnkgCitcJlwtbXhnb3QgXC1tbm9cLXhnb3RcZlIKKy5TcAorXCZcZklNQ29yZSBPcHRpb25zXGZSCitcJlxmQlwtbWhhcmRsaXQgIFwtbW5vXC1oYXJkbGl0ICBcLW1kaXYgIFwtbW5vXC1kaXYgIFwtbXJlbGF4XC1pbW1lZGlhdGVzIAorXCZcLW1ub1wtcmVsYXhcLWltbWVkaWF0ZXMgIFwtbXdpZGVcLWJpdGZpZWxkcyAgXC1tbm9cLXdpZGVcLWJpdGZpZWxkcyAKK1wmXC1tNGJ5dGVcLWZ1bmN0aW9ucyAgXC1tbm9cLTRieXRlXC1mdW5jdGlvbnMgIFwtbWNhbGxncmFwaFwtZGF0YSAKK1wmXC1tbm9cLWNhbGxncmFwaFwtZGF0YSAgXC1tc2xvd1wtYnl0ZXMgIFwtbW5vXC1zbG93XC1ieXRlcyAgXC1tbm9cLWxzaW0gCitcJlwtbWxpdHRsZVwtZW5kaWFuICBcLW1iaWdcLWVuZGlhbiAgXC1tMjEwICBcLW0zNDAgIFwtbXN0YWNrXC1pbmNyZW1lbnRcZlIKKy5TcAorXCZcZklNZVAgT3B0aW9uc1xmUgorXCZcZkJcLW1hYnNkaWZmIFwtbWFsbFwtb3B0cyBcLW1hdmVyYWdlIFwtbWJhc2VkPVxmUlxmSW5cZlIgXGZCXC1tYml0b3BzIAorXCZcLW1jPVxmUlxmSW5cZlIgXGZCXC1tY2xpcCBcLW1jb25maWc9XGZSXGZJbmFtZVxmUiBcZkJcLW1jb3AgXC1tY29wMzIgXC1tY29wNjQgXC1taXZjMiAKK1wmXC1tZGMgXC1tZGl2IFwtbWViIFwtbWVsIFwtbWlvXC12b2xhdGlsZSBcLW1sIFwtbWxlYWR6IFwtbW0gXC1tbWlubWF4IAorXCZcLW1tdWx0IFwtbW5vXC1vcHRzIFwtbXJlcGVhdCBcLW1zIFwtbXNhdHVyIFwtbXNkcmFtIFwtbXNpbSBcLW1zaW1ub3ZlYyBcLW10ZiAKK1wmXC1tdGlueT1cZlJcZkluXGZSCisuU3AKK1wmXGZJTWljcm9CbGF6ZSBPcHRpb25zXGZSCitcJlxmQlwtbXNvZnRcLWZsb2F0IFwtbWhhcmRcLWZsb2F0IFwtbXNtYWxsXC1kaXZpZGVzIFwtbWNwdT1cZlJcZkljcHVcZlIgCitcJlxmQlwtbW1lbWNweSBcLW14bFwtc29mdFwtbXVsIFwtbXhsXC1zb2Z0XC1kaXYgXC1teGxcLWJhcnJlbFwtc2hpZnQgCitcJlwtbXhsXC1wYXR0ZXJuXC1jb21wYXJlIFwtbXhsXC1zdGFja1wtY2hlY2sgXC1teGxcLWdwXC1vcHQgXC1tbm9cLWNsZWFyYnNzIAorXCZcLW14bFwtbXVsdGlwbHlcLWhpZ2ggXC1teGxcLWZsb2F0XC1jb252ZXJ0IFwtbXhsXC1mbG9hdFwtc3FydCAKK1wmXC1tYmlnXC1lbmRpYW4gXC1tbGl0dGxlXC1lbmRpYW4gXC1teGxcLXJlb3JkZXIgXC1teGxcLW1vZGVcLVxmUlxmSWFwcC1tb2RlbFxmUgorLlNwCitcJlxmSVxzLTFNSVBTXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1FTCAgXC1FQiAgXC1tYXJjaD1cZlJcZklhcmNoXGZSICBcZkJcLW10dW5lPVxmUlxmSWFyY2hcZlIgCitcJlxmQlwtbWlwczEgIFwtbWlwczIgIFwtbWlwczMgIFwtbWlwczQgIFwtbWlwczMyICBcLW1pcHMzMnIyIAorXCZcLW1pcHM2NCAgXC1taXBzNjRyMiAKK1wmXC1taXBzMTYgIFwtbW5vXC1taXBzMTYgIFwtbWZsaXBcLW1pcHMxNiAKK1wmXC1taW50ZXJsaW5rXC1taXBzMTYgIFwtbW5vXC1pbnRlcmxpbmtcLW1pcHMxNiAKK1wmXC1tYWJpPVxmUlxmSWFiaVxmUiAgXGZCXC1tYWJpY2FsbHMgIFwtbW5vXC1hYmljYWxscyAKK1wmXC1tc2hhcmVkICBcLW1ub1wtc2hhcmVkICBcLW1wbHQgIFwtbW5vXC1wbHQgIFwtbXhnb3QgIFwtbW5vXC14Z290IAorXCZcLW1ncDMyICBcLW1ncDY0ICBcLW1mcDMyICBcLW1mcDY0ICBcLW1oYXJkXC1mbG9hdCAgXC1tc29mdFwtZmxvYXQgCitcJlwtbW5vXC1mbG9hdCBcLW1zaW5nbGVcLWZsb2F0ICBcLW1kb3VibGVcLWZsb2F0ICAKK1wmXC1tZHNwICBcLW1ub1wtZHNwICBcLW1kc3ByMiAgXC1tbm9cLWRzcHIyIAorXCZcLW1tY3UgXC1tbW5vXC1tY3UgCitcJlwtbWZwdT1cZlJcZklmcHUtdHlwZVxmUiAKK1wmXGZCXC1tc21hcnRtaXBzICBcLW1ub1wtc21hcnRtaXBzIAorXCZcLW1wYWlyZWRcLXNpbmdsZSAgXC1tbm9cLXBhaXJlZFwtc2luZ2xlICBcLW1kbXggIFwtbW5vXC1tZG14IAorXCZcLW1pcHMzZCAgXC1tbm9cLW1pcHMzZCAgXC1tbXQgIFwtbW5vXC1tdCAgXC1tbGxzYyAgXC1tbm9cLWxsc2MgCitcJlwtbWxvbmc2NCAgXC1tbG9uZzMyICBcLW1zeW0zMiAgXC1tbm9cLXN5bTMyIAorXCZcLUdcZlJcZkludW1cZlIgIFxmQlwtbWxvY2FsXC1zZGF0YSAgXC1tbm9cLWxvY2FsXC1zZGF0YSAKK1wmXC1tZXh0ZXJuXC1zZGF0YSAgXC1tbm9cLWV4dGVyblwtc2RhdGEgIFwtbWdwb3B0ICBcLW1ub1wtZ29wdCAKK1wmXC1tZW1iZWRkZWRcLWRhdGEgIFwtbW5vXC1lbWJlZGRlZFwtZGF0YSAKK1wmXC1tdW5pbml0XC1jb25zdFwtaW5cLXJvZGF0YSAgXC1tbm9cLXVuaW5pdFwtY29uc3RcLWluXC1yb2RhdGEgCitcJlwtbWNvZGVcLXJlYWRhYmxlPVxmUlxmSXNldHRpbmdcZlIgCitcJlxmQlwtbXNwbGl0XC1hZGRyZXNzZXMgIFwtbW5vXC1zcGxpdFwtYWRkcmVzc2VzIAorXCZcLW1leHBsaWNpdFwtcmVsb2NzICBcLW1ub1wtZXhwbGljaXRcLXJlbG9jcyAKK1wmXC1tY2hlY2tcLXplcm9cLWRpdmlzaW9uICBcLW1ub1wtY2hlY2tcLXplcm9cLWRpdmlzaW9uIAorXCZcLW1kaXZpZGVcLXRyYXBzICBcLW1kaXZpZGVcLWJyZWFrcyAKK1wmXC1tbWVtY3B5ICBcLW1ub1wtbWVtY3B5ICBcLW1sb25nXC1jYWxscyAgXC1tbm9cLWxvbmdcLWNhbGxzIAorXCZcLW1tYWQgIFwtbW5vXC1tYWQgIFwtbWZ1c2VkXC1tYWRkICBcLW1ub1wtZnVzZWRcLW1hZGQgIFwtbm9jcHAgCitcJlwtbWZpeFwtMjRrIFwtbW5vXC1maXhcLTI0ayAKK1wmXC1tZml4XC1yNDAwMCAgXC1tbm9cLWZpeFwtcjQwMDAgIFwtbWZpeFwtcjQ0MDAgIFwtbW5vXC1maXhcLXI0NDAwIAorXCZcLW1maXhcLXIxMDAwMCBcLW1ub1wtZml4XC1yMTAwMDAgIFwtbWZpeFwtdnI0MTIwICBcLW1ub1wtZml4XC12cjQxMjAgCitcJlwtbWZpeFwtdnI0MTMwICBcLW1ub1wtZml4XC12cjQxMzAgIFwtbWZpeFwtc2IxICBcLW1ub1wtZml4XC1zYjEgCitcJlwtbWZsdXNoXC1mdW5jPVxmUlxmSWZ1bmNcZlIgIFxmQlwtbW5vXC1mbHVzaFwtZnVuYyAKK1wmXC1tYnJhbmNoXC1jb3N0PVxmUlxmSW51bVxmUiAgXGZCXC1tYnJhbmNoXC1saWtlbHkgIFwtbW5vXC1icmFuY2hcLWxpa2VseSAKK1wmXC1tZnBcLWV4Y2VwdGlvbnMgXC1tbm9cLWZwXC1leGNlcHRpb25zIAorXCZcLW12cjQxMzBcLWFsaWduIFwtbW5vXC12cjQxMzBcLWFsaWduIFwtbXN5bmNpIFwtbW5vXC1zeW5jaSAKK1wmXC1tcmVsYXhcLXBpY1wtY2FsbHMgXC1tbm9cLXJlbGF4XC1waWNcLWNhbGxzIFwtbW1jb3VudFwtcmFcLWFkZHJlc3NcZlIKKy5TcAorXCZcZklccy0xTU1JWFxzMCBPcHRpb25zXGZSCitcJlxmQlwtbWxpYmZ1bmNzICBcLW1ub1wtbGliZnVuY3MgIFwtbWVwc2lsb24gIFwtbW5vXC1lcHNpbG9uICBcLW1hYmk9Z251IAorXCZcLW1hYmk9bW1peHdhcmUgIFwtbXplcm9cLWV4dGVuZCAgXC1ta251dGhkaXYgIFwtbXRvcGxldmVsXC1zeW1ib2xzIAorXCZcLW1lbGYgIFwtbWJyYW5jaFwtcHJlZGljdCAgXC1tbm9cLWJyYW5jaFwtcHJlZGljdCAgXC1tYmFzZVwtYWRkcmVzc2VzIAorXCZcLW1ub1wtYmFzZVwtYWRkcmVzc2VzICBcLW1zaW5nbGVcLWV4aXQgIFwtbW5vXC1zaW5nbGVcLWV4aXRcZlIKKy5TcAorXCZcZklccy0xTU4xMDMwMFxzMCBPcHRpb25zXGZSCitcJlxmQlwtbW11bHRcLWJ1ZyAgXC1tbm9cLW11bHRcLWJ1ZyAKK1wmXC1tbm9cLWFtMzMgXC1tYW0zMyBcLW1hbTMzXC0yIFwtbWFtMzQgCitcJlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIgCitcJlxmQlwtbXJldHVyblwtcG9pbnRlclwtb25cLWQwIAorXCZcLW1ub1wtY3J0MCAgXC1tcmVsYXggXC1tbGl3IFwtbXNldGxiXGZSCisuU3AKK1wmXGZJTW94aWUgT3B0aW9uc1xmUgorXCZcZkJcLW1lYiBcLW1lbCBcLW1ub1wtY3J0MFxmUgorLlNwCitcJlxmSVxzLTFQRFBcLTExXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1tZnB1ICBcLW1zb2Z0XC1mbG9hdCAgXC1tYWMwICBcLW1ub1wtYWMwICBcLW00MCAgXC1tNDUgIFwtbTEwIAorXCZcLW1iY29weSAgXC1tYmNvcHlcLWJ1aWx0aW4gIFwtbWludDMyICBcLW1ub1wtaW50MTYgCitcJlwtbWludDE2ICBcLW1ub1wtaW50MzIgIFwtbWZsb2F0MzIgIFwtbW5vXC1mbG9hdDY0IAorXCZcLW1mbG9hdDY0ICBcLW1ub1wtZmxvYXQzMiAgXC1tYWJzaGkgIFwtbW5vXC1hYnNoaSAKK1wmXC1tYnJhbmNoXC1leHBlbnNpdmUgIFwtbWJyYW5jaFwtY2hlYXAgCitcJlwtbXVuaXhcLWFzbSAgXC1tZGVjXC1hc21cZlIKKy5TcAorXCZcZklwaWNvQ2hpcCBPcHRpb25zXGZSCitcJlxmQlwtbWFlPVxmUlxmSWFlX3R5cGVcZlIgXGZCXC1tdmxpd1wtbG9va2FoZWFkPVxmUlxmSU5cZlIgCitcJlxmQlwtbXN5bWJvbFwtYXNcLWFkZHJlc3MgXC1tbm9cLWluZWZmaWNpZW50XC13YXJuaW5nc1xmUgorLlNwCitcJlxmSVBvd2VyUEMgT3B0aW9uc1xmUgorU2VlIFxzLTFSUy82MDAwXHMwIGFuZCBQb3dlclBDIE9wdGlvbnMuCisuU3AKK1wmXGZJXHMtMVJMNzhcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1zaW0gXC1tbXVsPW5vbmUgXC1tbXVsPWcxMyBcLW1tdWw9cmw3OFxmUgorLlNwCitcJlxmSVxzLTFSUy82MDAwXHMwIGFuZCBQb3dlclBDIE9wdGlvbnNcZlIKK1wmXGZCXC1tY3B1PVxmUlxmSWNwdS10eXBlXGZSIAorXCZcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSIAorXCZcZkJcLW1jbW9kZWw9XGZSXGZJY29kZS1tb2RlbFxmUiAKK1wmXGZCXC1tcG93ZXJwYzY0IAorXCZcLW1hbHRpdmVjICBcLW1ub1wtYWx0aXZlYyAKK1wmXC1tcG93ZXJwY1wtZ3BvcHQgIFwtbW5vXC1wb3dlcnBjXC1ncG9wdCAKK1wmXC1tcG93ZXJwY1wtZ2Z4b3B0ICBcLW1ub1wtcG93ZXJwY1wtZ2Z4b3B0IAorXCZcLW1tZmNyZiAgXC1tbm9cLW1mY3JmICBcLW1wb3BjbnRiICBcLW1ub1wtcG9wY250YiBcLW1wb3BjbnRkIFwtbW5vXC1wb3BjbnRkIAorXCZcLW1mcHJuZCAgXC1tbm9cLWZwcm5kIAorXCZcLW1jbXBiIFwtbW5vXC1jbXBiIFwtbW1mcGdwciBcLW1ub1wtbWZwZ3ByIFwtbWhhcmRcLWRmcCBcLW1ub1wtaGFyZFwtZGZwIAorXCZcLW1mdWxsXC10b2MgICBcLW1taW5pbWFsXC10b2MgIFwtbW5vXC1mcFwtaW5cLXRvYyAgXC1tbm9cLXN1bVwtaW5cLXRvYyAKK1wmXC1tNjQgIFwtbTMyICBcLW14bFwtY29tcGF0ICBcLW1ub1wteGxcLWNvbXBhdCAgXC1tcGUgCitcJlwtbWFsaWduXC1wb3dlciAgXC1tYWxpZ25cLW5hdHVyYWwgCitcJlwtbXNvZnRcLWZsb2F0ICBcLW1oYXJkXC1mbG9hdCAgXC1tbXVsdGlwbGUgIFwtbW5vXC1tdWx0aXBsZSAKK1wmXC1tc2luZ2xlXC1mbG9hdCBcLW1kb3VibGVcLWZsb2F0IFwtbXNpbXBsZVwtZnB1IAorXCZcLW1zdHJpbmcgIFwtbW5vXC1zdHJpbmcgIFwtbXVwZGF0ZSAgXC1tbm9cLXVwZGF0ZSAKK1wmXC1tYXZvaWRcLWluZGV4ZWRcLWFkZHJlc3NlcyAgXC1tbm9cLWF2b2lkXC1pbmRleGVkXC1hZGRyZXNzZXMgCitcJlwtbWZ1c2VkXC1tYWRkICBcLW1ub1wtZnVzZWRcLW1hZGQgIFwtbWJpdFwtYWxpZ24gIFwtbW5vXC1iaXRcLWFsaWduIAorXCZcLW1zdHJpY3RcLWFsaWduICBcLW1ub1wtc3RyaWN0XC1hbGlnbiAgXC1tcmVsb2NhdGFibGUgCitcJlwtbW5vXC1yZWxvY2F0YWJsZSAgXC1tcmVsb2NhdGFibGVcLWxpYiAgXC1tbm9cLXJlbG9jYXRhYmxlXC1saWIgCitcJlwtbXRvYyAgXC1tbm9cLXRvYyAgXC1tbGl0dGxlICBcLW1saXR0bGVcLWVuZGlhbiAgXC1tYmlnICBcLW1iaWdcLWVuZGlhbiAKK1wmXC1tZHluYW1pY1wtbm9cLXBpYyAgXC1tYWx0aXZlYyBcLW1zd2RpdiAgXC1tc2luZ2xlXC1waWNcLWJhc2UgCitcJlwtbXByaW9yaXRpemVcLXJlc3RyaWN0ZWRcLWluc25zPVxmUlxmSXByaW9yaXR5XGZSIAorXCZcZkJcLW1zY2hlZFwtY29zdGx5XC1kZXA9XGZSXGZJZGVwZW5kZW5jZV90eXBlXGZSIAorXCZcZkJcLW1pbnNlcnRcLXNjaGVkXC1ub3BzPVxmUlxmSXNjaGVtZVxmUiAKK1wmXGZCXC1tY2FsbFwtc3lzdiAgXC1tY2FsbFwtbmV0YnNkIAorXCZcLW1haXhcLXN0cnVjdFwtcmV0dXJuICBcLW1zdnI0XC1zdHJ1Y3RcLXJldHVybiAKK1wmXC1tYWJpPVxmUlxmSWFiaS10eXBlXGZSIFxmQlwtbXNlY3VyZVwtcGx0IFwtbWJzc1wtcGx0IAorXCZcLW1ibG9ja1wtbW92ZVwtaW5saW5lXC1saW1pdD1cZlJcZkludW1cZlIgCitcJlxmQlwtbWlzZWwgXC1tbm9cLWlzZWwgCitcJlwtbWlzZWw9eWVzICBcLW1pc2VsPW5vIAorXCZcLW1zcGUgXC1tbm9cLXNwZSAKK1wmXC1tc3BlPXllcyAgXC1tc3BlPW5vIAorXCZcLW1wYWlyZWQgCitcJlwtbWdlblwtY2VsbFwtbWljcm9jb2RlIFwtbXdhcm5cLWNlbGxcLW1pY3JvY29kZSAKK1wmXC1tdnJzYXZlIFwtbW5vXC12cnNhdmUgCitcJlwtbW11bGh3IFwtbW5vXC1tdWxodyAKK1wmXC1tZGxtemIgXC1tbm9cLWRsbXpiIAorXCZcLW1mbG9hdFwtZ3Bycz15ZXMgIFwtbWZsb2F0XC1ncHJzPW5vIFwtbWZsb2F0XC1ncHJzPXNpbmdsZSBcLW1mbG9hdFwtZ3Bycz1kb3VibGUgCitcJlwtbXByb3RvdHlwZSAgXC1tbm9cLXByb3RvdHlwZSAKK1wmXC1tc2ltICBcLW1tdm1lICBcLW1hZHMgIFwtbXllbGxvd2tuaWZlICBcLW1lbWIgIFwtbXNkYXRhIAorXCZcLW1zZGF0YT1cZlJcZklvcHRcZlIgIFxmQlwtbXZ4d29ya3MgIFwtR1xmUiBcZkludW1cZlIgIFxmQlwtcHRocmVhZCAKK1wmXC1tcmVjaXAgXC1tcmVjaXA9XGZSXGZJb3B0XGZSIFxmQlwtbW5vXC1yZWNpcCBcLW1yZWNpcFwtcHJlY2lzaW9uIAorXCZcLW1ub1wtcmVjaXBcLXByZWNpc2lvbiAKK1wmXC1tdmVjbGliYWJpPVxmUlxmSXR5cGVcZlIgXGZCXC1tZnJpeiBcLW1ub1wtZnJpeiAKK1wmXC1tcG9pbnRlcnNcLXRvXC1uZXN0ZWRcLWZ1bmN0aW9ucyBcLW1ub1wtcG9pbnRlcnNcLXRvXC1uZXN0ZWRcLWZ1bmN0aW9ucyAKK1wmXC1tc2F2ZVwtdG9jXC1pbmRpcmVjdCBcLW1ub1wtc2F2ZVwtdG9jXC1pbmRpcmVjdFxmUgorLlNwCitcJlxmSVxzLTFSWFxzMCBPcHRpb25zXGZSCitcJlxmQlwtbTY0Yml0XC1kb3VibGVzICBcLW0zMmJpdFwtZG91YmxlcyAgXC1mcHUgIFwtbm9mcHUKK1wmXC1tY3B1PQorXCZcLW1iaWdcLWVuZGlhblwtZGF0YSBcLW1saXR0bGVcLWVuZGlhblwtZGF0YSAKK1wmXC1tc21hbGxcLWRhdGEgCitcJlwtbXNpbSAgXC1tbm9cLXNpbQorXCZcLW1hczEwMFwtc3ludGF4IFwtbW5vXC1hczEwMFwtc3ludGF4CitcJlwtbXJlbGF4CitcJlwtbW1heFwtY29uc3RhbnRcLXNpemU9CitcJlwtbWludFwtcmVnaXN0ZXI9CitcJlwtbXBpZAorXCZcLW1ub1wtd2FyblwtbXVsdGlwbGVcLWZhc3RcLWludGVycnVwdHMKK1wmXC1tc2F2ZVwtYWNjXC1pblwtaW50ZXJydXB0c1xmUgorLlNwCitcJlxmSVMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnNcZlIKK1wmXGZCXC1tdHVuZT1cZlJcZkljcHUtdHlwZVxmUiAgXGZCXC1tYXJjaD1cZlJcZkljcHUtdHlwZVxmUiAKK1wmXGZCXC1taGFyZFwtZmxvYXQgIFwtbXNvZnRcLWZsb2F0ICBcLW1oYXJkXC1kZnAgXC1tbm9cLWhhcmRcLWRmcCAKK1wmXC1tbG9uZ1wtZG91YmxlXC02NCBcLW1sb25nXC1kb3VibGVcLTEyOCAKK1wmXC1tYmFja2NoYWluICBcLW1ub1wtYmFja2NoYWluIFwtbXBhY2tlZFwtc3RhY2sgIFwtbW5vXC1wYWNrZWRcLXN0YWNrIAorXCZcLW1zbWFsbFwtZXhlYyAgXC1tbm9cLXNtYWxsXC1leGVjICBcLW1tdmNsZSBcLW1ub1wtbXZjbGUgCitcJlwtbTY0ICBcLW0zMSAgXC1tZGVidWcgIFwtbW5vXC1kZWJ1ZyAgXC1tZXNhICBcLW16YXJjaCAKK1wmXC1tdHBmXC10cmFjZSBcLW1ub1wtdHBmXC10cmFjZSAgXC1tZnVzZWRcLW1hZGQgIFwtbW5vXC1mdXNlZFwtbWFkZCAKK1wmXC1td2FyblwtZnJhbWVzaXplICBcLW13YXJuXC1keW5hbWljc3RhY2sgIFwtbXN0YWNrXC1zaXplIFwtbXN0YWNrXC1ndWFyZFxmUgorLlNwCitcJlxmSVNjb3JlIE9wdGlvbnNcZlIKK1wmXGZCXC1tZWIgXC1tZWwgCitcJlwtbW5od2xvb3AgCitcJlwtbXVscyAKK1wmXC1tbWFjIAorXCZcLW1zY29yZTUgXC1tc2NvcmU1dSBcLW1zY29yZTcgXC1tc2NvcmU3ZFxmUgorLlNwCitcJlxmSVxzLTFTSFxzMCBPcHRpb25zXGZSCitcJlxmQlwtbTEgIFwtbTIgIFwtbTJlIAorXCZcLW0yYVwtbm9mcHUgXC1tMmFcLXNpbmdsZVwtb25seSBcLW0yYVwtc2luZ2xlIFwtbTJhIAorXCZcLW0zICBcLW0zZSAKK1wmXC1tNFwtbm9mcHUgIFwtbTRcLXNpbmdsZVwtb25seSAgXC1tNFwtc2luZ2xlICBcLW00IAorXCZcLW00YVwtbm9mcHUgXC1tNGFcLXNpbmdsZVwtb25seSBcLW00YVwtc2luZ2xlIFwtbTRhIFwtbTRhbCAKK1wmXC1tNVwtNjRtZWRpYSAgXC1tNVwtNjRtZWRpYVwtbm9mcHUgCitcJlwtbTVcLTMybWVkaWEgIFwtbTVcLTMybWVkaWFcLW5vZnB1IAorXCZcLW01XC1jb21wYWN0ICBcLW01XC1jb21wYWN0XC1ub2ZwdSAKK1wmXC1tYiAgXC1tbCAgXC1tZGFsaWduICBcLW1yZWxheCAKK1wmXC1tYmlndGFibGUgXC1tZm1vdmQgXC1taGl0YWNoaSBcLW1yZW5lc2FzIFwtbW5vXC1yZW5lc2FzIFwtbW5vbWFjc2F2ZSAKK1wmXC1taWVlZSBcLW1ub1wtaWVlZSBcLW1iaXRvcHMgIFwtbWlzaXplICBcLW1pbmxpbmVcLWljX2ludmFsaWRhdGUgXC1tcGFkc3RydWN0IAorXCZcLW1zcGFjZSBcLW1wcmVmZXJnb3QgIFwtbXVzZXJtb2RlIFwtbXVsdGNvc3Q9XGZSXGZJbnVtYmVyXGZSIFxmQlwtbWRpdj1cZlJcZklzdHJhdGVneVxmUiAKK1wmXGZCXC1tZGl2c2kzX2xpYmZ1bmM9XGZSXGZJbmFtZVxmUiBcZkJcLW1maXhlZFwtcmFuZ2U9XGZSXGZJcmVnaXN0ZXItcmFuZ2VcZlIgCitcJlxmQlwtbWluZGV4ZWRcLWFkZHJlc3NpbmcgXC1tZ2V0dHJjb3N0PVxmUlxmSW51bWJlclxmUiBcZkJcLW1wdFwtZml4ZWQgCitcJlwtbWFjY3VtdWxhdGVcLW91dGdvaW5nXC1hcmdzIFwtbWludmFsaWRcLXN5bWJvbHMgCitcJlwtbWF0b21pY1wtbW9kZWw9XGZSXGZJYXRvbWljLW1vZGVsXGZSIAorXCZcZkJcLW1icmFuY2hcLWNvc3Q9XGZSXGZJbnVtXGZSIFxmQlwtbXpkY2JyYW5jaCBcLW1ub1wtemRjYnJhbmNoIFwtbWNicmFuY2hkaSBcLW1jbXBlcWRpIAorXCZcLW1mdXNlZFwtbWFkZCBcLW1ub1wtZnVzZWRcLW1hZGQgXC1tZnNjYSBcLW1ub1wtZnNjYSBcLW1mc3JyYSBcLW1ub1wtZnNycmEgCitcJlwtbXByZXRlbmRcLWNtb3ZlIFwtbXRhc1xmUgorLlNwCitcJlxmSVNvbGFyaXMgMiBPcHRpb25zXGZSCitcJlxmQlwtbWltcHVyZVwtdGV4dCAgXC1tbm9cLWltcHVyZVwtdGV4dCAKK1wmXC1wdGhyZWFkcyBcLXB0aHJlYWRcZlIKKy5TcAorXCZcZklccy0xU1BBUkNcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1jcHU9XGZSXGZJY3B1LXR5cGVcZlIgCitcJlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIgCitcJlxmQlwtbWNtb2RlbD1cZlJcZkljb2RlLW1vZGVsXGZSIAorXCZcZkJcLW1tZW1vcnlcLW1vZGVsPVxmUlxmSW1lbS1tb2RlbFxmUiAKK1wmXGZCXC1tMzIgIFwtbTY0ICBcLW1hcHBcLXJlZ3MgIFwtbW5vXC1hcHBcLXJlZ3MgCitcJlwtbWZhc3Rlclwtc3RydWN0cyAgXC1tbm9cLWZhc3Rlclwtc3RydWN0cyAgXC1tZmxhdCAgXC1tbm9cLWZsYXQgCitcJlwtbWZwdSAgXC1tbm9cLWZwdSAgXC1taGFyZFwtZmxvYXQgIFwtbXNvZnRcLWZsb2F0IAorXCZcLW1oYXJkXC1xdWFkXC1mbG9hdCAgXC1tc29mdFwtcXVhZFwtZmxvYXQgCitcJlwtbXN0YWNrXC1iaWFzICBcLW1ub1wtc3RhY2tcLWJpYXMgCitcJlwtbXVuYWxpZ25lZFwtZG91YmxlcyAgXC1tbm9cLXVuYWxpZ25lZFwtZG91YmxlcyAKK1wmXC1tdjhwbHVzICBcLW1ub1wtdjhwbHVzICBcLW12aXMgIFwtbW5vXC12aXMgCitcJlwtbXZpczIgIFwtbW5vXC12aXMyICBcLW12aXMzICBcLW1ub1wtdmlzMyAKK1wmXC1tY2Jjb25kIFwtbW5vXC1jYmNvbmQgCitcJlwtbWZtYWYgIFwtbW5vXC1mbWFmICBcLW1wb3BjICBcLW1ub1wtcG9wYyAKK1wmXC1tZml4XC1hdDY5N2ZcZlIKKy5TcAorXCZcZklccy0xU1BVXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1td2FyblwtcmVsb2MgXC1tZXJyb3JcLXJlbG9jIAorXCZcLW1zYWZlXC1kbWEgXC1tdW5zYWZlXC1kbWEgCitcJlwtbWJyYW5jaFwtaGludHMgCitcJlwtbXNtYWxsXC1tZW0gXC1tbGFyZ2VcLW1lbSBcLW1zdGRtYWluIAorXCZcLW1maXhlZFwtcmFuZ2U9XGZSXGZJcmVnaXN0ZXItcmFuZ2VcZlIgCitcJlxmQlwtbWVhMzIgXC1tZWE2NCAKK1wmXC1tYWRkcmVzc1wtc3BhY2VcLWNvbnZlcnNpb24gXC1tbm9cLWFkZHJlc3NcLXNwYWNlXC1jb252ZXJzaW9uIAorXCZcLW1jYWNoZVwtc2l6ZT1cZlJcZkljYWNoZS1zaXplXGZSIAorXCZcZkJcLW1hdG9taWNcLXVwZGF0ZXMgXC1tbm9cLWF0b21pY1wtdXBkYXRlc1xmUgorLlNwCitcJlxmSVN5c3RlbSBWIE9wdGlvbnNcZlIKK1wmXGZCXC1ReSAgXC1RbiAgXC1ZUCxcZlJcZklwYXRoc1xmUiAgXGZCXC1ZbSxcZlJcZklkaXJcZlIKKy5TcAorXCZcZklUSUxFLUd4IE9wdGlvbnNcZlIKK1wmXGZCXC1tY3B1PVxmUlxmSWNwdVxmUiBcZkJcLW0zMiBcLW02NCBcLW1jbW9kZWw9XGZSXGZJY29kZS1tb2RlbFxmUgorLlNwCitcJlxmSVRJTEVQcm8gT3B0aW9uc1xmUgorXCZcZkJcLW1jcHU9XGZSXGZJY3B1XGZSIFxmQlwtbTMyXGZSCisuU3AKK1wmXGZJVjg1MCBPcHRpb25zXGZSCitcJlxmQlwtbWxvbmdcLWNhbGxzICBcLW1ub1wtbG9uZ1wtY2FsbHMgIFwtbWVwICBcLW1ub1wtZXAgCitcJlwtbXByb2xvZ1wtZnVuY3Rpb24gIFwtbW5vXC1wcm9sb2dcLWZ1bmN0aW9uICBcLW1zcGFjZSAKK1wmXC1tdGRhPVxmUlxmSW5cZlIgIFxmQlwtbXNkYT1cZlJcZkluXGZSICBcZkJcLW16ZGE9XGZSXGZJblxmUiAKK1wmXGZCXC1tYXBwXC1yZWdzICBcLW1ub1wtYXBwXC1yZWdzIAorXCZcLW1kaXNhYmxlXC1jYWxsdCAgXC1tbm9cLWRpc2FibGVcLWNhbGx0IAorXCZcLW12ODUwZTJ2MyBcLW12ODUwZTIgXC1tdjg1MGUxIFwtbXY4NTBlcyAKK1wmXC1tdjg1MGUgXC1tdjg1MCBcLW12ODUwZTN2NSAKK1wmXC1tbG9vcCAKK1wmXC1tcmVsYXggCitcJlwtbWxvbmdcLWp1bXBzIAorXCZcLW1zb2Z0XC1mbG9hdCAKK1wmXC1taGFyZFwtZmxvYXQgCitcJlwtbWdjY1wtYWJpIAorXCZcLW1yaDg1MFwtYWJpIAorXCZcLW1iaWdcLXN3aXRjaFxmUgorLlNwCitcJlxmSVxzLTFWQVhcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1nICBcLW1nbnUgIFwtbXVuaXhcZlIKKy5TcAorXCZcZklccy0xVk1TXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1tdm1zXC1yZXR1cm5cLWNvZGVzIFwtbWRlYnVnXC1tYWluPVxmUlxmSXByZWZpeFxmUiBcZkJcLW1tYWxsb2M2NCAKK1wmXC1tcG9pbnRlclwtc2l6ZT1cZlJcZklzaXplXGZSCisuU3AKK1wmXGZJVnhXb3JrcyBPcHRpb25zXGZSCitcJlxmQlwtbXJ0cCAgXC1ub25cLXN0YXRpYyAgXC1Cc3RhdGljICBcLUJkeW5hbWljIAorXCZcLVhiaW5kXC1sYXp5ICBcLVhiaW5kXC1ub3dcZlIKKy5TcAorXCZcZkl4ODZcLTY0IE9wdGlvbnNcZlIKK1NlZSBpMzg2IGFuZCB4ODZcLTY0IE9wdGlvbnMuCisuU3AKK1wmXGZJWHN0b3JteTE2IE9wdGlvbnNcZlIKK1wmXGZCXC1tc2ltXGZSCisuU3AKK1wmXGZJWHRlbnNhIE9wdGlvbnNcZlIKK1wmXGZCXC1tY29uc3QxNiBcLW1ub1wtY29uc3QxNiAKK1wmXC1tZnVzZWRcLW1hZGQgIFwtbW5vXC1mdXNlZFwtbWFkZCAKK1wmXC1tZm9yY2VcLW5vXC1waWMgCitcJlwtbXNlcmlhbGl6ZVwtdm9sYXRpbGUgIFwtbW5vXC1zZXJpYWxpemVcLXZvbGF0aWxlIAorXCZcLW10ZXh0XC1zZWN0aW9uXC1saXRlcmFscyAgXC1tbm9cLXRleHRcLXNlY3Rpb25cLWxpdGVyYWxzIAorXCZcLW10YXJnZXRcLWFsaWduICBcLW1ub1wtdGFyZ2V0XC1hbGlnbiAKK1wmXC1tbG9uZ2NhbGxzICBcLW1ub1wtbG9uZ2NhbGxzXGZSCisuU3AKK1wmXGZJelNlcmllcyBPcHRpb25zXGZSCitTZWUgUy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9ucy4KKy5JUCAiXGZJQ29kZSBHZW5lcmF0aW9uIE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJDb2RlIEdlbmVyYXRpb24gT3B0aW9ucyIKK1wmXGZCXC1mY2FsbFwtc2F2ZWRcLVxmUlxmSXJlZ1xmUiAgXGZCXC1mY2FsbFwtdXNlZFwtXGZSXGZJcmVnXGZSIAorXCZcZkJcLWZmaXhlZFwtXGZSXGZJcmVnXGZSICBcZkJcLWZleGNlcHRpb25zIAorXCZcLWZub25cLWNhbGxcLWV4Y2VwdGlvbnMgIFwtZmRlbGV0ZVwtZGVhZFwtZXhjZXB0aW9ucyAgXC1mdW53aW5kXC10YWJsZXMgCitcJlwtZmFzeW5jaHJvbm91c1wtdW53aW5kXC10YWJsZXMgCitcJlwtZmluaGliaXRcLXNpemVcLWRpcmVjdGl2ZSAgXC1maW5zdHJ1bWVudFwtZnVuY3Rpb25zIAorXCZcLWZpbnN0cnVtZW50XC1mdW5jdGlvbnNcLWV4Y2x1ZGVcLWZ1bmN0aW9uXC1saXN0PVxmUlxmSXN5bVxmUlxmQixcZlJcZklzeW1cZlJcZkIsLi4uIAorXCZcLWZpbnN0cnVtZW50XC1mdW5jdGlvbnNcLWV4Y2x1ZGVcLWZpbGVcLWxpc3Q9XGZSXGZJZmlsZVxmUlxmQixcZlJcZklmaWxlXGZSXGZCLC4uLiAKK1wmXC1mbm9cLWNvbW1vbiAgXC1mbm9cLWlkZW50IAorXCZcLWZwY2NcLXN0cnVjdFwtcmV0dXJuICBcLWZwaWMgIFwtZlBJQyBcLWZwaWUgXC1mUElFIAorXCZcLWZub1wtanVtcFwtdGFibGVzIAorXCZcLWZyZWNvcmRcLWdjY1wtc3dpdGNoZXMgCitcJlwtZnJlZ1wtc3RydWN0XC1yZXR1cm4gIFwtZnNob3J0XC1lbnVtcyAKK1wmXC1mc2hvcnRcLWRvdWJsZSAgXC1mc2hvcnRcLXdjaGFyIAorXCZcLWZ2ZXJib3NlXC1hc20gIFwtZnBhY2tcLXN0cnVjdFs9XGZSXGZJblxmUlxmQl0gIFwtZnN0YWNrXC1jaGVjayAKK1wmXC1mc3RhY2tcLWxpbWl0XC1yZWdpc3Rlcj1cZlJcZklyZWdcZlIgIFxmQlwtZnN0YWNrXC1saW1pdFwtc3ltYm9sPVxmUlxmSXN5bVxmUiAKK1wmXGZCXC1mbm9cLXN0YWNrXC1saW1pdCBcLWZzcGxpdFwtc3RhY2sgCitcJlwtZmxlYWRpbmdcLXVuZGVyc2NvcmUgIFwtZnRsc1wtbW9kZWw9XGZSXGZJbW9kZWxcZlIgCitcJlxmQlwtZnN0YWNrXC1yZXVzZT1cZlJcZklyZXVzZV9sZXZlbFxmUiAKK1wmXGZCXC1mdHJhcHYgIFwtZndyYXB2ICBcLWZib3VuZHNcLWNoZWNrIAorXCZcLWZ2aXNpYmlsaXR5IFwtZnN0cmljdFwtdm9sYXRpbGVcLWJpdGZpZWxkcyBcLWZzeW5jXC1saWJjYWxsc1xmUgorLlNTICJPcHRpb25zIENvbnRyb2xsaW5nIHRoZSBLaW5kIG9mIE91dHB1dCIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIENvbnRyb2xsaW5nIHRoZSBLaW5kIG9mIE91dHB1dCIKK0NvbXBpbGF0aW9uIGNhbiBpbnZvbHZlIHVwIHRvIGZvdXIgc3RhZ2VzOiBwcmVwcm9jZXNzaW5nLCBjb21waWxhdGlvbgorcHJvcGVyLCBhc3NlbWJseSBhbmQgbGlua2luZywgYWx3YXlzIGluIHRoYXQgb3JkZXIuICBccy0xR0NDXHMwIGlzIGNhcGFibGUgb2YKK3ByZXByb2Nlc3NpbmcgYW5kIGNvbXBpbGluZyBzZXZlcmFsIGZpbGVzIGVpdGhlciBpbnRvIHNldmVyYWwKK2Fzc2VtYmxlciBpbnB1dCBmaWxlcywgb3IgaW50byBvbmUgYXNzZW1ibGVyIGlucHV0IGZpbGU7IHRoZW4gZWFjaAorYXNzZW1ibGVyIGlucHV0IGZpbGUgcHJvZHVjZXMgYW4gb2JqZWN0IGZpbGUsIGFuZCBsaW5raW5nIGNvbWJpbmVzIGFsbAordGhlIG9iamVjdCBmaWxlcyAodGhvc2UgbmV3bHkgY29tcGlsZWQsIGFuZCB0aG9zZSBzcGVjaWZpZWQgYXMgaW5wdXQpCitpbnRvIGFuIGV4ZWN1dGFibGUgZmlsZS4KKy5QUAorRm9yIGFueSBnaXZlbiBpbnB1dCBmaWxlLCB0aGUgZmlsZSBuYW1lIHN1ZmZpeCBkZXRlcm1pbmVzIHdoYXQga2luZCBvZgorY29tcGlsYXRpb24gaXMgZG9uZToKKy5JUCAiXGZJZmlsZVxmUlxmQi5jXGZSIiA0CisuSVggSXRlbSAiZmlsZS5jIgorQyBzb3VyY2UgY29kZSB0aGF0IG11c3QgYmUgcHJlcHJvY2Vzc2VkLgorLklQICJcZklmaWxlXGZSXGZCLmlcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmkiCitDIHNvdXJjZSBjb2RlIHRoYXQgc2hvdWxkIG5vdCBiZSBwcmVwcm9jZXNzZWQuCisuSVAgIlxmSWZpbGVcZlJcZkIuaWlcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmlpIgorXCZcKihDKyBzb3VyY2UgY29kZSB0aGF0IHNob3VsZCBub3QgYmUgcHJlcHJvY2Vzc2VkLgorLklQICJcZklmaWxlXGZSXGZCLm1cZlIiIDQKKy5JWCBJdGVtICJmaWxlLm0iCitPYmplY3RpdmUtQyBzb3VyY2UgY29kZS4gIE5vdGUgdGhhdCB5b3UgbXVzdCBsaW5rIHdpdGggdGhlIFxmSWxpYm9iamNcZlIKK2xpYnJhcnkgdG8gbWFrZSBhbiBPYmplY3RpdmUtQyBwcm9ncmFtIHdvcmsuCisuSVAgIlxmSWZpbGVcZlJcZkIubWlcZlIiIDQKKy5JWCBJdGVtICJmaWxlLm1pIgorT2JqZWN0aXZlLUMgc291cmNlIGNvZGUgdGhhdCBzaG91bGQgbm90IGJlIHByZXByb2Nlc3NlZC4KKy5JUCAiXGZJZmlsZVxmUlxmQi5tbVxmUiIgNAorLklYIEl0ZW0gImZpbGUubW0iCisuUEQgMAorLklQICJcZklmaWxlXGZSXGZCLk1cZlIiIDQKKy5JWCBJdGVtICJmaWxlLk0iCisuUEQKK09iamVjdGl2ZVwtXCooQysgc291cmNlIGNvZGUuICBOb3RlIHRoYXQgeW91IG11c3QgbGluayB3aXRoIHRoZSBcZklsaWJvYmpjXGZSCitsaWJyYXJ5IHRvIG1ha2UgYW4gT2JqZWN0aXZlXC1cKihDKyBwcm9ncmFtIHdvcmsuICBOb3RlIHRoYXQgXGZCLk1cZlIgcmVmZXJzCit0byBhIGxpdGVyYWwgY2FwaXRhbCBNLgorLklQICJcZklmaWxlXGZSXGZCLm1paVxmUiIgNAorLklYIEl0ZW0gImZpbGUubWlpIgorT2JqZWN0aXZlXC1cKihDKyBzb3VyY2UgY29kZSB0aGF0IHNob3VsZCBub3QgYmUgcHJlcHJvY2Vzc2VkLgorLklQICJcZklmaWxlXGZSXGZCLmhcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmgiCitDLCBcKihDKywgT2JqZWN0aXZlLUMgb3IgT2JqZWN0aXZlXC1cKihDKyBoZWFkZXIgZmlsZSB0byBiZSB0dXJuZWQgaW50byBhCitwcmVjb21waWxlZCBoZWFkZXIgKGRlZmF1bHQpLCBvciBDLCBcKihDKyBoZWFkZXIgZmlsZSB0byBiZSB0dXJuZWQgaW50byBhbgorQWRhIHNwZWMgKHZpYSB0aGUgXGZCXC1mZHVtcFwtYWRhXC1zcGVjXGZSIHN3aXRjaCkuCisuSVAgIlxmSWZpbGVcZlJcZkIuY2NcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmNjIgorLlBEIDAKKy5JUCAiXGZJZmlsZVxmUlxmQi5jcFxmUiIgNAorLklYIEl0ZW0gImZpbGUuY3AiCisuSVAgIlxmSWZpbGVcZlJcZkIuY3h4XGZSIiA0CisuSVggSXRlbSAiZmlsZS5jeHgiCisuSVAgIlxmSWZpbGVcZlJcZkIuY3BwXGZSIiA0CisuSVggSXRlbSAiZmlsZS5jcHAiCisuSVAgIlxmSWZpbGVcZlJcZkIuQ1BQXGZSIiA0CisuSVggSXRlbSAiZmlsZS5DUFAiCisuSVAgIlxmSWZpbGVcZlJcZkIuYysrXGZSIiA0CisuSVggSXRlbSAiZmlsZS5jKysiCisuSVAgIlxmSWZpbGVcZlJcZkIuQ1xmUiIgNAorLklYIEl0ZW0gImZpbGUuQyIKKy5QRAorXCZcKihDKyBzb3VyY2UgY29kZSB0aGF0IG11c3QgYmUgcHJlcHJvY2Vzc2VkLiAgTm90ZSB0aGF0IGluIFxmQi5jeHhcZlIsCit0aGUgbGFzdCB0d28gbGV0dGVycyBtdXN0IGJvdGggYmUgbGl0ZXJhbGx5IFxmQnhcZlIuICBMaWtld2lzZSwKK1wmXGZCLkNcZlIgcmVmZXJzIHRvIGEgbGl0ZXJhbCBjYXBpdGFsIEMuCisuSVAgIlxmSWZpbGVcZlJcZkIubW1cZlIiIDQKKy5JWCBJdGVtICJmaWxlLm1tIgorLlBEIDAKKy5JUCAiXGZJZmlsZVxmUlxmQi5NXGZSIiA0CisuSVggSXRlbSAiZmlsZS5NIgorLlBECitPYmplY3RpdmVcLVwqKEMrIHNvdXJjZSBjb2RlIHRoYXQgbXVzdCBiZSBwcmVwcm9jZXNzZWQuCisuSVAgIlxmSWZpbGVcZlJcZkIubWlpXGZSIiA0CisuSVggSXRlbSAiZmlsZS5taWkiCitPYmplY3RpdmVcLVwqKEMrIHNvdXJjZSBjb2RlIHRoYXQgc2hvdWxkIG5vdCBiZSBwcmVwcm9jZXNzZWQuCisuSVAgIlxmSWZpbGVcZlJcZkIuaGhcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmhoIgorLlBEIDAKKy5JUCAiXGZJZmlsZVxmUlxmQi5IXGZSIiA0CisuSVggSXRlbSAiZmlsZS5IIgorLklQICJcZklmaWxlXGZSXGZCLmhwXGZSIiA0CisuSVggSXRlbSAiZmlsZS5ocCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5oeHhcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmh4eCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5ocHBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmhwcCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5IUFBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLkhQUCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5oKytcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmgrKyIKKy5JUCAiXGZJZmlsZVxmUlxmQi50Y2NcZlIiIDQKKy5JWCBJdGVtICJmaWxlLnRjYyIKKy5QRAorXCZcKihDKyBoZWFkZXIgZmlsZSB0byBiZSB0dXJuZWQgaW50byBhIHByZWNvbXBpbGVkIGhlYWRlciBvciBBZGEgc3BlYy4KKy5JUCAiXGZJZmlsZVxmUlxmQi5mXGZSIiA0CisuSVggSXRlbSAiZmlsZS5mIgorLlBEIDAKKy5JUCAiXGZJZmlsZVxmUlxmQi5mb3JcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmZvciIKKy5JUCAiXGZJZmlsZVxmUlxmQi5mdG5cZlIiIDQKKy5JWCBJdGVtICJmaWxlLmZ0biIKKy5QRAorRml4ZWQgZm9ybSBGb3J0cmFuIHNvdXJjZSBjb2RlIHRoYXQgc2hvdWxkIG5vdCBiZSBwcmVwcm9jZXNzZWQuCisuSVAgIlxmSWZpbGVcZlJcZkIuRlxmUiIgNAorLklYIEl0ZW0gImZpbGUuRiIKKy5QRCAwCisuSVAgIlxmSWZpbGVcZlJcZkIuRk9SXGZSIiA0CisuSVggSXRlbSAiZmlsZS5GT1IiCisuSVAgIlxmSWZpbGVcZlJcZkIuZnBwXGZSIiA0CisuSVggSXRlbSAiZmlsZS5mcHAiCisuSVAgIlxmSWZpbGVcZlJcZkIuRlBQXGZSIiA0CisuSVggSXRlbSAiZmlsZS5GUFAiCisuSVAgIlxmSWZpbGVcZlJcZkIuRlROXGZSIiA0CisuSVggSXRlbSAiZmlsZS5GVE4iCisuUEQKK0ZpeGVkIGZvcm0gRm9ydHJhbiBzb3VyY2UgY29kZSB0aGF0IG11c3QgYmUgcHJlcHJvY2Vzc2VkICh3aXRoIHRoZSB0cmFkaXRpb25hbAorcHJlcHJvY2Vzc29yKS4KKy5JUCAiXGZJZmlsZVxmUlxmQi5mOTBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmY5MCIKKy5QRCAwCisuSVAgIlxmSWZpbGVcZlJcZkIuZjk1XGZSIiA0CisuSVggSXRlbSAiZmlsZS5mOTUiCisuSVAgIlxmSWZpbGVcZlJcZkIuZjAzXGZSIiA0CisuSVggSXRlbSAiZmlsZS5mMDMiCisuSVAgIlxmSWZpbGVcZlJcZkIuZjA4XGZSIiA0CisuSVggSXRlbSAiZmlsZS5mMDgiCisuUEQKK0ZyZWUgZm9ybSBGb3J0cmFuIHNvdXJjZSBjb2RlIHRoYXQgc2hvdWxkIG5vdCBiZSBwcmVwcm9jZXNzZWQuCisuSVAgIlxmSWZpbGVcZlJcZkIuRjkwXGZSIiA0CisuSVggSXRlbSAiZmlsZS5GOTAiCisuUEQgMAorLklQICJcZklmaWxlXGZSXGZCLkY5NVxmUiIgNAorLklYIEl0ZW0gImZpbGUuRjk1IgorLklQICJcZklmaWxlXGZSXGZCLkYwM1xmUiIgNAorLklYIEl0ZW0gImZpbGUuRjAzIgorLklQICJcZklmaWxlXGZSXGZCLkYwOFxmUiIgNAorLklYIEl0ZW0gImZpbGUuRjA4IgorLlBECitGcmVlIGZvcm0gRm9ydHJhbiBzb3VyY2UgY29kZSB0aGF0IG11c3QgYmUgcHJlcHJvY2Vzc2VkICh3aXRoIHRoZQordHJhZGl0aW9uYWwgcHJlcHJvY2Vzc29yKS4KKy5JUCAiXGZJZmlsZVxmUlxmQi5nb1xmUiIgNAorLklYIEl0ZW0gImZpbGUuZ28iCitHbyBzb3VyY2UgY29kZS4KKy5JUCAiXGZJZmlsZVxmUlxmQi5hZHNcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmFkcyIKK0FkYSBzb3VyY2UgY29kZSBmaWxlIHRoYXQgY29udGFpbnMgYSBsaWJyYXJ5IHVuaXQgZGVjbGFyYXRpb24gKGEKK2RlY2xhcmF0aW9uIG9mIGEgcGFja2FnZSwgc3VicHJvZ3JhbSwgb3IgZ2VuZXJpYywgb3IgYSBnZW5lcmljCitpbnN0YW50aWF0aW9uKSwgb3IgYSBsaWJyYXJ5IHVuaXQgcmVuYW1pbmcgZGVjbGFyYXRpb24gKGEgcGFja2FnZSwKK2dlbmVyaWMsIG9yIHN1YnByb2dyYW0gcmVuYW1pbmcgZGVjbGFyYXRpb24pLiAgU3VjaCBmaWxlcyBhcmUgYWxzbworY2FsbGVkIFxmSXNwZWNzXGZSLgorLklQICJcZklmaWxlXGZSXGZCLmFkYlxmUiIgNAorLklYIEl0ZW0gImZpbGUuYWRiIgorQWRhIHNvdXJjZSBjb2RlIGZpbGUgY29udGFpbmluZyBhIGxpYnJhcnkgdW5pdCBib2R5IChhIHN1YnByb2dyYW0gb3IKK3BhY2thZ2UgYm9keSkuICBTdWNoIGZpbGVzIGFyZSBhbHNvIGNhbGxlZCBcZklib2RpZXNcZlIuCisuSVAgIlxmSWZpbGVcZlJcZkIuc1xmUiIgNAorLklYIEl0ZW0gImZpbGUucyIKK0Fzc2VtYmxlciBjb2RlLgorLklQICJcZklmaWxlXGZSXGZCLlNcZlIiIDQKKy5JWCBJdGVtICJmaWxlLlMiCisuUEQgMAorLklQICJcZklmaWxlXGZSXGZCLnN4XGZSIiA0CisuSVggSXRlbSAiZmlsZS5zeCIKKy5QRAorQXNzZW1ibGVyIGNvZGUgdGhhdCBtdXN0IGJlIHByZXByb2Nlc3NlZC4KKy5JUCAiXGZJb3RoZXJcZlIiIDQKKy5JWCBJdGVtICJvdGhlciIKK0FuIG9iamVjdCBmaWxlIHRvIGJlIGZlZCBzdHJhaWdodCBpbnRvIGxpbmtpbmcuCitBbnkgZmlsZSBuYW1lIHdpdGggbm8gcmVjb2duaXplZCBzdWZmaXggaXMgdHJlYXRlZCB0aGlzIHdheS4KKy5QUAorWW91IGNhbiBzcGVjaWZ5IHRoZSBpbnB1dCBsYW5ndWFnZSBleHBsaWNpdGx5IHdpdGggdGhlIFxmQlwteFxmUiBvcHRpb246CisuSVAgIlxmQlwteFxmUiBcZklsYW5ndWFnZVxmUiIgNAorLklYIEl0ZW0gIi14IGxhbmd1YWdlIgorU3BlY2lmeSBleHBsaWNpdGx5IHRoZSBcZklsYW5ndWFnZVxmUiBmb3IgdGhlIGZvbGxvd2luZyBpbnB1dCBmaWxlcworKHJhdGhlciB0aGFuIGxldHRpbmcgdGhlIGNvbXBpbGVyIGNob29zZSBhIGRlZmF1bHQgYmFzZWQgb24gdGhlIGZpbGUKK25hbWUgc3VmZml4KS4gIFRoaXMgb3B0aW9uIGFwcGxpZXMgdG8gYWxsIGZvbGxvd2luZyBpbnB1dCBmaWxlcyB1bnRpbAordGhlIG5leHQgXGZCXC14XGZSIG9wdGlvbi4gIFBvc3NpYmxlIHZhbHVlcyBmb3IgXGZJbGFuZ3VhZ2VcZlIgYXJlOgorLlNwCisuVmIgOQorXCYgICAgICAgIGMgIGNcLWhlYWRlciAgY3BwXC1vdXRwdXQKK1wmICAgICAgICBjKysgIGMrK1wtaGVhZGVyICBjKytcLWNwcFwtb3V0cHV0CitcJiAgICAgICAgb2JqZWN0aXZlXC1jICBvYmplY3RpdmVcLWNcLWhlYWRlciAgb2JqZWN0aXZlXC1jXC1jcHBcLW91dHB1dAorXCYgICAgICAgIG9iamVjdGl2ZVwtYysrIG9iamVjdGl2ZVwtYysrXC1oZWFkZXIgb2JqZWN0aXZlXC1jKytcLWNwcFwtb3V0cHV0CitcJiAgICAgICAgYXNzZW1ibGVyICBhc3NlbWJsZXJcLXdpdGhcLWNwcAorXCYgICAgICAgIGFkYQorXCYgICAgICAgIGY3NyAgZjc3XC1jcHBcLWlucHV0IGY5NSAgZjk1XC1jcHBcLWlucHV0CitcJiAgICAgICAgZ28KK1wmICAgICAgICBqYXZhCisuVmUKKy5JUCAiXGZCXC14IG5vbmVcZlIiIDQKKy5JWCBJdGVtICIteCBub25lIgorVHVybiBvZmYgYW55IHNwZWNpZmljYXRpb24gb2YgYSBsYW5ndWFnZSwgc28gdGhhdCBzdWJzZXF1ZW50IGZpbGVzIGFyZQoraGFuZGxlZCBhY2NvcmRpbmcgdG8gdGhlaXIgZmlsZSBuYW1lIHN1ZmZpeGVzIChhcyB0aGV5IGFyZSBpZiBcZkJcLXhcZlIKK2hhcyBub3QgYmVlbiB1c2VkIGF0IGFsbCkuCisuSVAgIlxmQlwtcGFzc1wtZXhpdFwtY29kZXNcZlIiIDQKKy5JWCBJdGVtICItcGFzcy1leGl0LWNvZGVzIgorTm9ybWFsbHkgdGhlIFxmQmdjY1xmUiBwcm9ncmFtIGV4aXRzIHdpdGggdGhlIGNvZGUgb2YgMSBpZiBhbnkKK3BoYXNlIG9mIHRoZSBjb21waWxlciByZXR1cm5zIGEgbm9uLXN1Y2Nlc3MgcmV0dXJuIGNvZGUuICBJZiB5b3Ugc3BlY2lmeQorXCZcZkJcLXBhc3NcLWV4aXRcLWNvZGVzXGZSLCB0aGUgXGZCZ2NjXGZSIHByb2dyYW0gaW5zdGVhZCByZXR1cm5zIHdpdGgKK3RoZSBudW1lcmljYWxseSBoaWdoZXN0IGVycm9yIHByb2R1Y2VkIGJ5IGFueSBwaGFzZSByZXR1cm5pbmcgYW4gZXJyb3IKK2luZGljYXRpb24uICBUaGUgQywgXCooQyssIGFuZCBGb3J0cmFuIGZyb250IGVuZHMgcmV0dXJuIDQgaWYgYW4gaW50ZXJuYWwKK2NvbXBpbGVyIGVycm9yIGlzIGVuY291bnRlcmVkLgorLlBQCitJZiB5b3Ugb25seSB3YW50IHNvbWUgb2YgdGhlIHN0YWdlcyBvZiBjb21waWxhdGlvbiwgeW91IGNhbiB1c2UKK1wmXGZCXC14XGZSIChvciBmaWxlbmFtZSBzdWZmaXhlcykgdG8gdGVsbCBcZkJnY2NcZlIgd2hlcmUgdG8gc3RhcnQsIGFuZAorb25lIG9mIHRoZSBvcHRpb25zIFxmQlwtY1xmUiwgXGZCXC1TXGZSLCBvciBcZkJcLUVcZlIgdG8gc2F5IHdoZXJlCitcJlxmQmdjY1xmUiBpcyB0byBzdG9wLiAgTm90ZSB0aGF0IHNvbWUgY29tYmluYXRpb25zIChmb3IgZXhhbXBsZSwKK1wmXGZCXC14IGNwcC1vdXRwdXQgXC1FXGZSKSBpbnN0cnVjdCBcZkJnY2NcZlIgdG8gZG8gbm90aGluZyBhdCBhbGwuCisuSVAgIlxmQlwtY1xmUiIgNAorLklYIEl0ZW0gIi1jIgorQ29tcGlsZSBvciBhc3NlbWJsZSB0aGUgc291cmNlIGZpbGVzLCBidXQgZG8gbm90IGxpbmsuICBUaGUgbGlua2luZworc3RhZ2Ugc2ltcGx5IGlzIG5vdCBkb25lLiAgVGhlIHVsdGltYXRlIG91dHB1dCBpcyBpbiB0aGUgZm9ybSBvZiBhbgorb2JqZWN0IGZpbGUgZm9yIGVhY2ggc291cmNlIGZpbGUuCisuU3AKK0J5IGRlZmF1bHQsIHRoZSBvYmplY3QgZmlsZSBuYW1lIGZvciBhIHNvdXJjZSBmaWxlIGlzIG1hZGUgYnkgcmVwbGFjaW5nCit0aGUgc3VmZml4IFxmQi5jXGZSLCBcZkIuaVxmUiwgXGZCLnNcZlIsIGV0Yy4sIHdpdGggXGZCLm9cZlIuCisuU3AKK1VucmVjb2duaXplZCBpbnB1dCBmaWxlcywgbm90IHJlcXVpcmluZyBjb21waWxhdGlvbiBvciBhc3NlbWJseSwgYXJlCitpZ25vcmVkLgorLklQICJcZkJcLVNcZlIiIDQKKy5JWCBJdGVtICItUyIKK1N0b3AgYWZ0ZXIgdGhlIHN0YWdlIG9mIGNvbXBpbGF0aW9uIHByb3BlcjsgZG8gbm90IGFzc2VtYmxlLiAgVGhlIG91dHB1dAoraXMgaW4gdGhlIGZvcm0gb2YgYW4gYXNzZW1ibGVyIGNvZGUgZmlsZSBmb3IgZWFjaCBub24tYXNzZW1ibGVyIGlucHV0CitmaWxlIHNwZWNpZmllZC4KKy5TcAorQnkgZGVmYXVsdCwgdGhlIGFzc2VtYmxlciBmaWxlIG5hbWUgZm9yIGEgc291cmNlIGZpbGUgaXMgbWFkZSBieQorcmVwbGFjaW5nIHRoZSBzdWZmaXggXGZCLmNcZlIsIFxmQi5pXGZSLCBldGMuLCB3aXRoIFxmQi5zXGZSLgorLlNwCitJbnB1dCBmaWxlcyB0aGF0IGRvbid0IHJlcXVpcmUgY29tcGlsYXRpb24gYXJlIGlnbm9yZWQuCisuSVAgIlxmQlwtRVxmUiIgNAorLklYIEl0ZW0gIi1FIgorU3RvcCBhZnRlciB0aGUgcHJlcHJvY2Vzc2luZyBzdGFnZTsgZG8gbm90IHJ1biB0aGUgY29tcGlsZXIgcHJvcGVyLiAgVGhlCitvdXRwdXQgaXMgaW4gdGhlIGZvcm0gb2YgcHJlcHJvY2Vzc2VkIHNvdXJjZSBjb2RlLCB3aGljaCBpcyBzZW50IHRvIHRoZQorc3RhbmRhcmQgb3V0cHV0LgorLlNwCitJbnB1dCBmaWxlcyB0aGF0IGRvbid0IHJlcXVpcmUgcHJlcHJvY2Vzc2luZyBhcmUgaWdub3JlZC4KKy5JUCAiXGZCXC1vXGZSIFxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICItbyBmaWxlIgorUGxhY2Ugb3V0cHV0IGluIGZpbGUgXGZJZmlsZVxmUi4gIFRoaXMgYXBwbGllcyB0byB3aGF0ZXZlcgorc29ydCBvZiBvdXRwdXQgaXMgYmVpbmcgcHJvZHVjZWQsIHdoZXRoZXIgaXQgYmUgYW4gZXhlY3V0YWJsZSBmaWxlLAorYW4gb2JqZWN0IGZpbGUsIGFuIGFzc2VtYmxlciBmaWxlIG9yIHByZXByb2Nlc3NlZCBDIGNvZGUuCisuU3AKK0lmIFxmQlwtb1xmUiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyB0byBwdXQgYW4gZXhlY3V0YWJsZQorZmlsZSBpbiBcZklhLm91dFxmUiwgdGhlIG9iamVjdCBmaWxlIGZvcgorXCZcZklcZklzb3VyY2VcZkkuXGZJc3VmZml4XGZJXGZSIGluIFxmSVxmSXNvdXJjZVxmSS5vXGZSLCBpdHMKK2Fzc2VtYmxlciBmaWxlIGluIFxmSVxmSXNvdXJjZVxmSS5zXGZSLCBhIHByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGluCitcJlxmSVxmSXNvdXJjZVxmSS5cZklzdWZmaXhcZkkuZ2NoXGZSLCBhbmQgYWxsIHByZXByb2Nlc3NlZCBDIHNvdXJjZSBvbgorc3RhbmRhcmQgb3V0cHV0LgorLklQICJcZkJcLXZcZlIiIDQKKy5JWCBJdGVtICItdiIKK1ByaW50IChvbiBzdGFuZGFyZCBlcnJvciBvdXRwdXQpIHRoZSBjb21tYW5kcyBleGVjdXRlZCB0byBydW4gdGhlIHN0YWdlcworb2YgY29tcGlsYXRpb24uICBBbHNvIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgY29tcGlsZXIgZHJpdmVyCitwcm9ncmFtIGFuZCBvZiB0aGUgcHJlcHJvY2Vzc29yIGFuZCB0aGUgY29tcGlsZXIgcHJvcGVyLgorLklQICJcZkJcLSMjI1xmUiIgNAorLklYIEl0ZW0gIi0jIyMiCitMaWtlIFxmQlwtdlxmUiBleGNlcHQgdGhlIGNvbW1hbmRzIGFyZSBub3QgZXhlY3V0ZWQgYW5kIGFyZ3VtZW50cworYXJlIHF1b3RlZCB1bmxlc3MgdGhleSBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgXGYoQ1dcKihDYC4vXC1fXCooQydcZlIuCitUaGlzIGlzIHVzZWZ1bCBmb3Igc2hlbGwgc2NyaXB0cyB0byBjYXB0dXJlIHRoZSBkcml2ZXItZ2VuZXJhdGVkIGNvbW1hbmQgbGluZXMuCisuSVAgIlxmQlwtcGlwZVxmUiIgNAorLklYIEl0ZW0gIi1waXBlIgorVXNlIHBpcGVzIHJhdGhlciB0aGFuIHRlbXBvcmFyeSBmaWxlcyBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZQordmFyaW91cyBzdGFnZXMgb2YgY29tcGlsYXRpb24uICBUaGlzIGZhaWxzIHRvIHdvcmsgb24gc29tZSBzeXN0ZW1zIHdoZXJlCit0aGUgYXNzZW1ibGVyIGlzIHVuYWJsZSB0byByZWFkIGZyb20gYSBwaXBlOyBidXQgdGhlIFxzLTFHTlVcczAgYXNzZW1ibGVyIGhhcworbm8gdHJvdWJsZS4KKy5JUCAiXGZCXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCitQcmludCAob24gdGhlIHN0YW5kYXJkIG91dHB1dCkgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMKK3VuZGVyc3Rvb2QgYnkgXGZCZ2NjXGZSLiAgSWYgdGhlIFxmQlwtdlxmUiBvcHRpb24gaXMgYWxzbyBzcGVjaWZpZWQKK3RoZW4gXGZCXC1cLWhlbHBcZlIgaXMgYWxzbyBwYXNzZWQgb24gdG8gdGhlIHZhcmlvdXMgcHJvY2Vzc2VzCitpbnZva2VkIGJ5IFxmQmdjY1xmUiwgc28gdGhhdCB0aGV5IGNhbiBkaXNwbGF5IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucwordGhleSBhY2NlcHQuICBJZiB0aGUgXGZCXC1XZXh0cmFcZlIgb3B0aW9uIGhhcyBhbHNvIGJlZW4gc3BlY2lmaWVkCisocHJpb3IgdG8gdGhlIFxmQlwtXC1oZWxwXGZSIG9wdGlvbiksIHRoZW4gY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdAoraGF2ZSBubyBkb2N1bWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGFyZSBhbHNvIGRpc3BsYXllZC4KKy5JUCAiXGZCXC1cLXRhcmdldFwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0LWhlbHAiCitQcmludCAob24gdGhlIHN0YW5kYXJkIG91dHB1dCkgYSBkZXNjcmlwdGlvbiBvZiB0YXJnZXQtc3BlY2lmaWMgY29tbWFuZC1saW5lCitvcHRpb25zIGZvciBlYWNoIHRvb2wuICBGb3Igc29tZSB0YXJnZXRzIGV4dHJhIHRhcmdldC1zcGVjaWZpYworaW5mb3JtYXRpb24gbWF5IGFsc28gYmUgcHJpbnRlZC4KKy5JUCAiXGZCXC1cLWhlbHA9e1xmUlxmSWNsYXNzXGZSfFtcZkJeXGZSXVxmSXF1YWxpZmllclxmUlxmQn1cZlJbXGZCLC4uLlxmUl0iIDQKKy5JWCBJdGVtICItLWhlbHA9e2NsYXNzfFteXXF1YWxpZmllcn1bLC4uLl0iCitQcmludCAob24gdGhlIHN0YW5kYXJkIG91dHB1dCkgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tbWFuZC1saW5lCitvcHRpb25zIHVuZGVyc3Rvb2QgYnkgdGhlIGNvbXBpbGVyIHRoYXQgZml0IGludG8gYWxsIHNwZWNpZmllZCBjbGFzc2VzCithbmQgcXVhbGlmaWVycy4gIFRoZXNlIGFyZSB0aGUgc3VwcG9ydGVkIGNsYXNzZXM6CisuUlMgNAorLklQICJcZkJvcHRpbWl6ZXJzXGZSIiA0CisuSVggSXRlbSAib3B0aW1pemVycyIKK0Rpc3BsYXkgYWxsIG9mIHRoZSBvcHRpbWl6YXRpb24gb3B0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlCitjb21waWxlci4KKy5JUCAiXGZCd2FybmluZ3NcZlIiIDQKKy5JWCBJdGVtICJ3YXJuaW5ncyIKK0Rpc3BsYXkgYWxsIG9mIHRoZSBvcHRpb25zIGNvbnRyb2xsaW5nIHdhcm5pbmcgbWVzc2FnZXMKK3Byb2R1Y2VkIGJ5IHRoZSBjb21waWxlci4KKy5JUCAiXGZCdGFyZ2V0XGZSIiA0CisuSVggSXRlbSAidGFyZ2V0IgorRGlzcGxheSB0YXJnZXQtc3BlY2lmaWMgb3B0aW9ucy4gIFVubGlrZSB0aGUKK1wmXGZCXC1cLXRhcmdldFwtaGVscFxmUiBvcHRpb24gaG93ZXZlciwgdGFyZ2V0LXNwZWNpZmljIG9wdGlvbnMgb2YgdGhlCitsaW5rZXIgYW5kIGFzc2VtYmxlciBhcmUgbm90IGRpc3BsYXllZC4gIFRoaXMgaXMgYmVjYXVzZSB0aG9zZQordG9vbHMgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IHRoZSBleHRlbmRlZCBcZkJcLVwtaGVscD1cZlIgc3ludGF4LgorLklQICJcZkJwYXJhbXNcZlIiIDQKKy5JWCBJdGVtICJwYXJhbXMiCitEaXNwbGF5IHRoZSB2YWx1ZXMgcmVjb2duaXplZCBieSB0aGUgXGZCXC1cLXBhcmFtXGZSCitvcHRpb24uCisuSVAgIlxmSWxhbmd1YWdlXGZSIiA0CisuSVggSXRlbSAibGFuZ3VhZ2UiCitEaXNwbGF5IHRoZSBvcHRpb25zIHN1cHBvcnRlZCBmb3IgXGZJbGFuZ3VhZ2VcZlIsIHdoZXJlCitcJlxmSWxhbmd1YWdlXGZSIGlzIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBpbiB0aGlzCit2ZXJzaW9uIG9mIFxzLTFHQ0NcczAuCisuSVAgIlxmQmNvbW1vblxmUiIgNAorLklYIEl0ZW0gImNvbW1vbiIKK0Rpc3BsYXkgdGhlIG9wdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBsYW5ndWFnZXMuCisuUkUKKy5SUyA0CisuU3AKK1RoZXNlIGFyZSB0aGUgc3VwcG9ydGVkIHF1YWxpZmllcnM6CisuSVAgIlxmQnVuZG9jdW1lbnRlZFxmUiIgNAorLklYIEl0ZW0gInVuZG9jdW1lbnRlZCIKK0Rpc3BsYXkgb25seSB0aG9zZSBvcHRpb25zIHRoYXQgYXJlIHVuZG9jdW1lbnRlZC4KKy5JUCAiXGZCam9pbmVkXGZSIiA0CisuSVggSXRlbSAiam9pbmVkIgorRGlzcGxheSBvcHRpb25zIHRha2luZyBhbiBhcmd1bWVudCB0aGF0IGFwcGVhcnMgYWZ0ZXIgYW4gZXF1YWwKK3NpZ24gaW4gdGhlIHNhbWUgY29udGludW91cyBwaWVjZSBvZiB0ZXh0LCBzdWNoIGFzOgorXCZcZkJcLVwtaGVscD10YXJnZXRcZlIuCisuSVAgIlxmQnNlcGFyYXRlXGZSIiA0CisuSVggSXRlbSAic2VwYXJhdGUiCitEaXNwbGF5IG9wdGlvbnMgdGFraW5nIGFuIGFyZ3VtZW50IHRoYXQgYXBwZWFycyBhcyBhIHNlcGFyYXRlIHdvcmQKK2ZvbGxvd2luZyB0aGUgb3JpZ2luYWwgb3B0aW9uLCBzdWNoIGFzOiBcZkJcLW8gb3V0cHV0LWZpbGVcZlIuCisuUkUKKy5SUyA0CisuU3AKK1RodXMgZm9yIGV4YW1wbGUgdG8gZGlzcGxheSBhbGwgdGhlIHVuZG9jdW1lbnRlZCB0YXJnZXQtc3BlY2lmaWMKK3N3aXRjaGVzIHN1cHBvcnRlZCBieSB0aGUgY29tcGlsZXIsIHVzZToKKy5TcAorLlZiIDEKK1wmICAgICAgICBcLVwtaGVscD10YXJnZXQsdW5kb2N1bWVudGVkCisuVmUKKy5TcAorVGhlIHNlbnNlIG9mIGEgcXVhbGlmaWVyIGNhbiBiZSBpbnZlcnRlZCBieSBwcmVmaXhpbmcgaXQgd2l0aCB0aGUKK1wmXGZCXlxmUiBjaGFyYWN0ZXIsIHNvIGZvciBleGFtcGxlIHRvIGRpc3BsYXkgYWxsIGJpbmFyeSB3YXJuaW5nCitvcHRpb25zIChpLmUuLCBvbmVzIHRoYXQgYXJlIGVpdGhlciBvbiBvciBvZmYgYW5kIHRoYXQgZG8gbm90IHRha2UgYW4KK2FyZ3VtZW50KSB0aGF0IGhhdmUgYSBkZXNjcmlwdGlvbiwgdXNlOgorLlNwCisuVmIgMQorXCYgICAgICAgIFwtXC1oZWxwPXdhcm5pbmdzLF5qb2luZWQsXnVuZG9jdW1lbnRlZAorLlZlCisuU3AKK1RoZSBhcmd1bWVudCB0byBcZkJcLVwtaGVscD1cZlIgc2hvdWxkIG5vdCBjb25zaXN0IHNvbGVseSBvZiBpbnZlcnRlZAorcXVhbGlmaWVycy4KKy5TcAorQ29tYmluaW5nIHNldmVyYWwgY2xhc3NlcyBpcyBwb3NzaWJsZSwgYWx0aG91Z2ggdGhpcyB1c3VhbGx5CityZXN0cmljdHMgdGhlIG91dHB1dCBzbyBtdWNoIHRoYXQgdGhlcmUgaXMgbm90aGluZyB0byBkaXNwbGF5LiAgT25lCitjYXNlIHdoZXJlIGl0IGRvZXMgd29yaywgaG93ZXZlciwgaXMgd2hlbiBvbmUgb2YgdGhlIGNsYXNzZXMgaXMKK1wmXGZJdGFyZ2V0XGZSLiAgRm9yIGV4YW1wbGUsIHRvIGRpc3BsYXkgYWxsIHRoZSB0YXJnZXQtc3BlY2lmaWMKK29wdGltaXphdGlvbiBvcHRpb25zLCB1c2U6CisuU3AKKy5WYiAxCitcJiAgICAgICAgXC1cLWhlbHA9dGFyZ2V0LG9wdGltaXplcnMKKy5WZQorLlNwCitUaGUgXGZCXC1cLWhlbHA9XGZSIG9wdGlvbiBjYW4gYmUgcmVwZWF0ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIEVhY2gKK3N1Y2Nlc3NpdmUgdXNlIGRpc3BsYXlzIGl0cyByZXF1ZXN0ZWQgY2xhc3Mgb2Ygb3B0aW9ucywgc2tpcHBpbmcKK3Rob3NlIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGlzcGxheWVkLgorLlNwCitJZiB0aGUgXGZCXC1RXGZSIG9wdGlvbiBhcHBlYXJzIG9uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlIHRoZQorXCZcZkJcLVwtaGVscD1cZlIgb3B0aW9uLCB0aGVuIHRoZSBkZXNjcmlwdGl2ZSB0ZXh0IGRpc3BsYXllZCBieQorXCZcZkJcLVwtaGVscD1cZlIgaXMgY2hhbmdlZC4gIEluc3RlYWQgb2YgZGVzY3JpYmluZyB0aGUgZGlzcGxheWVkCitvcHRpb25zLCBhbiBpbmRpY2F0aW9uIGlzIGdpdmVuIGFzIHRvIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBlbmFibGVkLAorZGlzYWJsZWQgb3Igc2V0IHRvIGEgc3BlY2lmaWMgdmFsdWUgKGFzc3VtaW5nIHRoYXQgdGhlIGNvbXBpbGVyCitrbm93cyB0aGlzIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgXGZCXC1cLWhlbHA9XGZSIG9wdGlvbiBpcyB1c2VkKS4KKy5TcAorSGVyZSBpcyBhIHRydW5jYXRlZCBleGFtcGxlIGZyb20gdGhlIFxzLTFBUk1cczAgcG9ydCBvZiBcZkJnY2NcZlI6CisuU3AKKy5WYiA1CitcJiAgICAgICAgICAlIGdjYyBcLVEgXC1tYWJpPTIgXC1cLWhlbHA9dGFyZ2V0IFwtYworXCYgICAgICAgICAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSB0YXJnZXQgc3BlY2lmaWM6CitcJiAgICAgICAgICBcLW1hYmk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCitcJiAgICAgICAgICBcLW1hYm9ydFwtb25cLW5vcmV0dXJuICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF0KK1wmICAgICAgICAgIFwtbWFwY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF0KKy5WZQorLlNwCitUaGUgb3V0cHV0IGlzIHNlbnNpdGl2ZSB0byB0aGUgZWZmZWN0cyBvZiBwcmV2aW91cyBjb21tYW5kLWxpbmUKK29wdGlvbnMsIHNvIGZvciBleGFtcGxlIGl0IGlzIHBvc3NpYmxlIHRvIGZpbmQgb3V0IHdoaWNoIG9wdGltaXphdGlvbnMKK2FyZSBlbmFibGVkIGF0IFxmQlwtTzJcZlIgYnkgdXNpbmc6CisuU3AKKy5WYiAxCitcJiAgICAgICAgXC1RIFwtTzIgXC1cLWhlbHA9b3B0aW1pemVycworLlZlCisuU3AKK0FsdGVybmF0aXZlbHkgeW91IGNhbiBkaXNjb3ZlciB3aGljaCBiaW5hcnkgb3B0aW1pemF0aW9ucyBhcmUgZW5hYmxlZAorYnkgXGZCXC1PM1xmUiBieSB1c2luZzoKKy5TcAorLlZiIDMKK1wmICAgICAgICBnY2MgXC1jIFwtUSBcLU8zIFwtXC1oZWxwPW9wdGltaXplcnMgPiAvdG1wL08zXC1vcHRzCitcJiAgICAgICAgZ2NjIFwtYyBcLVEgXC1PMiBcLVwtaGVscD1vcHRpbWl6ZXJzID4gL3RtcC9PMlwtb3B0cworXCYgICAgICAgIGRpZmYgL3RtcC9PMlwtb3B0cyAvdG1wL08zXC1vcHRzIHwgZ3JlcCBlbmFibGVkCisuVmUKKy5SRQorLklQICJcZkJcLW5vXC1jYW5vbmljYWxcLXByZWZpeGVzXGZSIiA0CisuSVggSXRlbSAiLW5vLWNhbm9uaWNhbC1wcmVmaXhlcyIKK0RvIG5vdCBleHBhbmQgYW55IHN5bWJvbGljIGxpbmtzLCByZXNvbHZlIHJlZmVyZW5jZXMgdG8gXGZCLy4uL1xmUgorb3IgXGZCLy4vXGZSLCBvciBtYWtlIHRoZSBwYXRoIGFic29sdXRlIHdoZW4gZ2VuZXJhdGluZyBhIHJlbGF0aXZlCitwcmVmaXguCisuSVAgIlxmQlwtXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLS12ZXJzaW9uIgorRGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgYW5kIGNvcHlyaWdodHMgb2YgdGhlIGludm9rZWQgXHMtMUdDQ1xzMC4KKy5JUCAiXGZCXC13cmFwcGVyXGZSIiA0CisuSVggSXRlbSAiLXdyYXBwZXIiCitJbnZva2UgYWxsIHN1YmNvbW1hbmRzIHVuZGVyIGEgd3JhcHBlciBwcm9ncmFtLiAgVGhlIG5hbWUgb2YgdGhlCit3cmFwcGVyIHByb2dyYW0gYW5kIGl0cyBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgYXMgYSBjb21tYSBzZXBhcmF0ZWQKK2xpc3QuCisuU3AKKy5WYiAxCitcJiAgICAgICAgZ2NjIFwtYyB0LmMgXC13cmFwcGVyIGdkYixcLVwtYXJncworLlZlCisuU3AKK1RoaXMgaW52b2tlcyBhbGwgc3VicHJvZ3JhbXMgb2YgXGZCZ2NjXGZSIHVuZGVyCitcJlxmQmdkYiBcLVwtYXJnc1xmUiwgdGh1cyB0aGUgaW52b2NhdGlvbiBvZiBcZkJjYzFcZlIgaXMKK1wmXGZCZ2RiIFwtXC1hcmdzIGNjMSAuLi5cZlIuCisuSVAgIlxmQlwtZnBsdWdpbj1cZlJcZkluYW1lXGZSXGZCLnNvXGZSIiA0CisuSVggSXRlbSAiLWZwbHVnaW49bmFtZS5zbyIKK0xvYWQgdGhlIHBsdWdpbiBjb2RlIGluIGZpbGUgXGZJbmFtZVxmUi5zbywgYXNzdW1lZCB0byBiZSBhCitzaGFyZWQgb2JqZWN0IHRvIGJlIGRsb3BlbidkIGJ5IHRoZSBjb21waWxlci4gIFRoZSBiYXNlIG5hbWUgb2YKK3RoZSBzaGFyZWQgb2JqZWN0IGZpbGUgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgcGx1Z2luIGZvciB0aGUKK3B1cnBvc2VzIG9mIGFyZ3VtZW50IHBhcnNpbmcgKFNlZQorXCZcZkJcLWZwbHVnaW5cLWFyZ1wtXGZSXGZJbmFtZVxmUlxmQlwtXGZSXGZJa2V5XGZSXGZCPVxmUlxmSXZhbHVlXGZSIGJlbG93KS4KK0VhY2ggcGx1Z2luIHNob3VsZCBkZWZpbmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBzcGVjaWZpZWQgaW4gdGhlCitQbHVnaW5zIFxzLTFBUElcczAuCisuSVAgIlxmQlwtZnBsdWdpblwtYXJnXC1cZlJcZkluYW1lXGZSXGZCXC1cZlJcZklrZXlcZlJcZkI9XGZSXGZJdmFsdWVcZlIiIDQKKy5JWCBJdGVtICItZnBsdWdpbi1hcmctbmFtZS1rZXk9dmFsdWUiCitEZWZpbmUgYW4gYXJndW1lbnQgY2FsbGVkIFxmSWtleVxmUiB3aXRoIGEgdmFsdWUgb2YgXGZJdmFsdWVcZlIKK2ZvciB0aGUgcGx1Z2luIGNhbGxlZCBcZkluYW1lXGZSLgorLklQICJcZkJcLWZkdW1wXC1hZGFcLXNwZWNcZlJbXGZCXC1zbGltXGZSXSIgNAorLklYIEl0ZW0gIi1mZHVtcC1hZGEtc3BlY1stc2xpbV0iCitGb3IgQyBhbmQgXCooQysgc291cmNlIGFuZCBpbmNsdWRlIGZpbGVzLCBnZW5lcmF0ZSBjb3JyZXNwb25kaW5nIEFkYQorc3BlY3MuCisuSVAgIlxmQlwtZmR1bXBcLWdvXC1zcGVjPVxmUlxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtZ28tc3BlYz1maWxlIgorRm9yIGlucHV0IGZpbGVzIGluIGFueSBsYW5ndWFnZSwgZ2VuZXJhdGUgY29ycmVzcG9uZGluZyBHbworZGVjbGFyYXRpb25zIGluIFxmSWZpbGVcZlIuICBUaGlzIGdlbmVyYXRlcyBHbyBcZihDV1wqKENgY29uc3RcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHR5cGVcKihDJ1xmUiwgXGYoQ1dcKihDYHZhclwqKEMnXGZSLCBhbmQgXGYoQ1dcKihDYGZ1bmNcKihDJ1xmUiBkZWNsYXJhdGlvbnMgd2hpY2ggbWF5IGJlIGEKK3VzZWZ1bCB3YXkgdG8gc3RhcnQgd3JpdGluZyBhIEdvIGludGVyZmFjZSB0byBjb2RlIHdyaXR0ZW4gaW4gc29tZQorb3RoZXIgbGFuZ3VhZ2UuCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLlNTICJDb21waWxpbmcgXCooQysgUHJvZ3JhbXMiCisuSVggU3Vic2VjdGlvbiAiQ29tcGlsaW5nICBQcm9ncmFtcyIKK1wmXCooQysgc291cmNlIGZpbGVzIGNvbnZlbnRpb25hbGx5IHVzZSBvbmUgb2YgdGhlIHN1ZmZpeGVzIFxmQi5DXGZSLAorXCZcZkIuY2NcZlIsIFxmQi5jcHBcZlIsIFxmQi5DUFBcZlIsIFxmQi5jKytcZlIsIFxmQi5jcFxmUiwgb3IKK1wmXGZCLmN4eFxmUjsgXCooQysgaGVhZGVyIGZpbGVzIG9mdGVuIHVzZSBcZkIuaGhcZlIsIFxmQi5ocHBcZlIsCitcJlxmQi5IXGZSLCBvciAoZm9yIHNoYXJlZCB0ZW1wbGF0ZSBjb2RlKSBcZkIudGNjXGZSOyBhbmQKK3ByZXByb2Nlc3NlZCBcKihDKyBmaWxlcyB1c2UgdGhlIHN1ZmZpeCBcZkIuaWlcZlIuICBccy0xR0NDXHMwIHJlY29nbml6ZXMKK2ZpbGVzIHdpdGggdGhlc2UgbmFtZXMgYW5kIGNvbXBpbGVzIHRoZW0gYXMgXCooQysgcHJvZ3JhbXMgZXZlbiBpZiB5b3UKK2NhbGwgdGhlIGNvbXBpbGVyIHRoZSBzYW1lIHdheSBhcyBmb3IgY29tcGlsaW5nIEMgcHJvZ3JhbXMgKHVzdWFsbHkKK3dpdGggdGhlIG5hbWUgXGZCZ2NjXGZSKS4KKy5QUAorSG93ZXZlciwgdGhlIHVzZSBvZiBcZkJnY2NcZlIgZG9lcyBub3QgYWRkIHRoZSBcKihDKyBsaWJyYXJ5LgorXCZcZkJnKytcZlIgaXMgYSBwcm9ncmFtIHRoYXQgY2FsbHMgXHMtMUdDQ1xzMCBhbmQgYXV0b21hdGljYWxseSBzcGVjaWZpZXMgbGlua2luZworYWdhaW5zdCB0aGUgXCooQysgbGlicmFyeS4gIEl0IHRyZWF0cyBcZkIuY1xmUiwKK1wmXGZCLmhcZlIgYW5kIFxmQi5pXGZSIGZpbGVzIGFzIFwqKEMrIHNvdXJjZSBmaWxlcyBpbnN0ZWFkIG9mIEMgc291cmNlCitmaWxlcyB1bmxlc3MgXGZCXC14XGZSIGlzIHVzZWQuICBUaGlzIHByb2dyYW0gaXMgYWxzbyB1c2VmdWwgd2hlbgorcHJlY29tcGlsaW5nIGEgQyBoZWFkZXIgZmlsZSB3aXRoIGEgXGZCLmhcZlIgZXh0ZW5zaW9uIGZvciB1c2UgaW4gXCooQysKK2NvbXBpbGF0aW9ucy4gIE9uIG1hbnkgc3lzdGVtcywgXGZCZysrXGZSIGlzIGFsc28gaW5zdGFsbGVkIHdpdGgKK3RoZSBuYW1lIFxmQmMrK1xmUi4KKy5QUAorV2hlbiB5b3UgY29tcGlsZSBcKihDKyBwcm9ncmFtcywgeW91IG1heSBzcGVjaWZ5IG1hbnkgb2YgdGhlIHNhbWUKK2NvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgeW91IHVzZSBmb3IgY29tcGlsaW5nIHByb2dyYW1zIGluIGFueQorbGFuZ3VhZ2U7IG9yIGNvbW1hbmQtbGluZSBvcHRpb25zIG1lYW5pbmdmdWwgZm9yIEMgYW5kIHJlbGF0ZWQKK2xhbmd1YWdlczsgb3Igb3B0aW9ucyB0aGF0IGFyZSBtZWFuaW5nZnVsIG9ubHkgZm9yIFwqKEMrIHByb2dyYW1zLgorLlNTICJPcHRpb25zIENvbnRyb2xsaW5nIEMgRGlhbGVjdCIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIENvbnRyb2xsaW5nIEMgRGlhbGVjdCIKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBjb250cm9sIHRoZSBkaWFsZWN0IG9mIEMgKG9yIGxhbmd1YWdlcyBkZXJpdmVkCitmcm9tIEMsIHN1Y2ggYXMgXCooQyssIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrKSB0aGF0IHRoZSBjb21waWxlcgorYWNjZXB0czoKKy5JUCAiXGZCXC1hbnNpXGZSIiA0CisuSVggSXRlbSAiLWFuc2kiCitJbiBDIG1vZGUsIHRoaXMgaXMgZXF1aXZhbGVudCB0byBcZkJcLXN0ZD1jOTBcZlIuIEluIFwqKEMrIG1vZGUsIGl0IGlzCitlcXVpdmFsZW50IHRvIFxmQlwtc3RkPWMrKzk4XGZSLgorLlNwCitUaGlzIHR1cm5zIG9mZiBjZXJ0YWluIGZlYXR1cmVzIG9mIFxzLTFHQ0NcczAgdGhhdCBhcmUgaW5jb21wYXRpYmxlIHdpdGggXHMtMUlTT1xzMAorQzkwICh3aGVuIGNvbXBpbGluZyBDIGNvZGUpLCBvciBvZiBzdGFuZGFyZCBcKihDKyAod2hlbiBjb21waWxpbmcgXCooQysgY29kZSksCitzdWNoIGFzIHRoZSBcZihDV1wqKENgYXNtXCooQydcZlIgYW5kIFxmKENXXCooQ2B0eXBlb2ZcKihDJ1xmUiBrZXl3b3JkcywgYW5kCitwcmVkZWZpbmVkIG1hY3JvcyBzdWNoIGFzIFxmKENXXCooQ2B1bml4XCooQydcZlIgYW5kIFxmKENXXCooQ2B2YXhcKihDJ1xmUiB0aGF0IGlkZW50aWZ5IHRoZQordHlwZSBvZiBzeXN0ZW0geW91IGFyZSB1c2luZy4gIEl0IGFsc28gZW5hYmxlcyB0aGUgdW5kZXNpcmFibGUgYW5kCityYXJlbHkgdXNlZCBccy0xSVNPXHMwIHRyaWdyYXBoIGZlYXR1cmUuICBGb3IgdGhlIEMgY29tcGlsZXIsCitpdCBkaXNhYmxlcyByZWNvZ25pdGlvbiBvZiBcKihDKyBzdHlsZSBcZkIvL1xmUiBjb21tZW50cyBhcyB3ZWxsIGFzCit0aGUgXGYoQ1dcKihDYGlubGluZVwqKEMnXGZSIGtleXdvcmQuCisuU3AKK1RoZSBhbHRlcm5hdGUga2V5d29yZHMgXGYoQ1dcKihDYF9cfF9hc21fXHxfXCooQydcZlIsIFxmKENXXCooQ2BfXHxfZXh0ZW5zaW9uX1x8X1wqKEMnXGZSLAorXCZcZihDV1wqKENgX1x8X2lubGluZV9cfF9cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYF9cfF90eXBlb2ZfXHxfXCooQydcZlIgY29udGludWUgdG8gd29yayBkZXNwaXRlCitcJlxmQlwtYW5zaVxmUi4gIFlvdSB3b3VsZCBub3Qgd2FudCB0byB1c2UgdGhlbSBpbiBhbiBccy0xSVNPXHMwIEMgcHJvZ3JhbSwgb2YKK2NvdXJzZSwgYnV0IGl0IGlzIHVzZWZ1bCB0byBwdXQgdGhlbSBpbiBoZWFkZXIgZmlsZXMgdGhhdCBtaWdodCBiZSBpbmNsdWRlZAoraW4gY29tcGlsYXRpb25zIGRvbmUgd2l0aCBcZkJcLWFuc2lcZlIuICBBbHRlcm5hdGUgcHJlZGVmaW5lZCBtYWNyb3MKK3N1Y2ggYXMgXGYoQ1dcKihDYF9cfF91bml4X1x8X1wqKEMnXGZSIGFuZCBcZihDV1wqKENgX1x8X3ZheF9cfF9cKihDJ1xmUiBhcmUgYWxzbyBhdmFpbGFibGUsIHdpdGggb3IKK3dpdGhvdXQgXGZCXC1hbnNpXGZSLgorLlNwCitUaGUgXGZCXC1hbnNpXGZSIG9wdGlvbiBkb2VzIG5vdCBjYXVzZSBub24tSVNPIHByb2dyYW1zIHRvIGJlCityZWplY3RlZCBncmF0dWl0b3VzbHkuICBGb3IgdGhhdCwgXGZCXC1XcGVkYW50aWNcZlIgaXMgcmVxdWlyZWQgaW4KK2FkZGl0aW9uIHRvIFxmQlwtYW5zaVxmUi4KKy5TcAorVGhlIG1hY3JvIFxmKENXXCooQ2BfXHxfU1RSSUNUX0FOU0lfXHxfXCooQydcZlIgaXMgcHJlZGVmaW5lZCB3aGVuIHRoZSBcZkJcLWFuc2lcZlIKK29wdGlvbiBpcyB1c2VkLiAgU29tZSBoZWFkZXIgZmlsZXMgbWF5IG5vdGljZSB0aGlzIG1hY3JvIGFuZCByZWZyYWluCitmcm9tIGRlY2xhcmluZyBjZXJ0YWluIGZ1bmN0aW9ucyBvciBkZWZpbmluZyBjZXJ0YWluIG1hY3JvcyB0aGF0IHRoZQorXCZccy0xSVNPXHMwIHN0YW5kYXJkIGRvZXNuJ3QgY2FsbCBmb3I7IHRoaXMgaXMgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBhbnkKK3Byb2dyYW1zIHRoYXQgbWlnaHQgdXNlIHRoZXNlIG5hbWVzIGZvciBvdGhlciB0aGluZ3MuCisuU3AKK0Z1bmN0aW9ucyB0aGF0IGFyZSBub3JtYWxseSBidWlsdCBpbiBidXQgZG8gbm90IGhhdmUgc2VtYW50aWNzCitkZWZpbmVkIGJ5IFxzLTFJU09cczAgQyAoc3VjaCBhcyBcZihDV1wqKENgYWxsb2NhXCooQydcZlIgYW5kIFxmKENXXCooQ2BmZnNcKihDJ1xmUikgYXJlIG5vdCBidWlsdC1pbgorZnVuY3Rpb25zIHdoZW4gXGZCXC1hbnNpXGZSIGlzIHVzZWQuCisuSVAgIlxmQlwtc3RkPVxmUiIgNAorLklYIEl0ZW0gIi1zdGQ9IgorRGV0ZXJtaW5lIHRoZSBsYW5ndWFnZSBzdGFuZGFyZC4gICBUaGlzIG9wdGlvbgoraXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIHdoZW4gY29tcGlsaW5nIEMgb3IgXCooQysuCisuU3AKK1RoZSBjb21waWxlciBjYW4gYWNjZXB0IHNldmVyYWwgYmFzZSBzdGFuZGFyZHMsIHN1Y2ggYXMgXGZCYzkwXGZSIG9yCitcJlxmQmMrKzk4XGZSLCBhbmQgXHMtMUdOVVxzMCBkaWFsZWN0cyBvZiB0aG9zZSBzdGFuZGFyZHMsIHN1Y2ggYXMKK1wmXGZCZ251OTBcZlIgb3IgXGZCZ251Kys5OFxmUi4gIFdoZW4gYSBiYXNlIHN0YW5kYXJkIGlzIHNwZWNpZmllZCwgdGhlCitjb21waWxlciBhY2NlcHRzIGFsbCBwcm9ncmFtcyBmb2xsb3dpbmcgdGhhdCBzdGFuZGFyZCBwbHVzIHRob3NlCit1c2luZyBccy0xR05VXHMwIGV4dGVuc2lvbnMgdGhhdCBkbyBub3QgY29udHJhZGljdCBpdC4gIEZvciBleGFtcGxlLAorXCZcZkJcLXN0ZD1jOTBcZlIgdHVybnMgb2ZmIGNlcnRhaW4gZmVhdHVyZXMgb2YgXHMtMUdDQ1xzMCB0aGF0IGFyZQoraW5jb21wYXRpYmxlIHdpdGggXHMtMUlTT1xzMCBDOTAsIHN1Y2ggYXMgdGhlIFxmKENXXCooQ2Bhc21cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHR5cGVvZlwqKEMnXGZSCitrZXl3b3JkcywgYnV0IG5vdCBvdGhlciBccy0xR05VXHMwIGV4dGVuc2lvbnMgdGhhdCBkbyBub3QgaGF2ZSBhIG1lYW5pbmcgaW4KK1wmXHMtMUlTT1xzMCBDOTAsIHN1Y2ggYXMgb21pdHRpbmcgdGhlIG1pZGRsZSB0ZXJtIG9mIGEgXGYoQ1dcKihDYD86XCooQydcZlIKK2V4cHJlc3Npb24uIE9uIHRoZSBvdGhlciBoYW5kLCB3aGVuIGEgXHMtMUdOVVxzMCBkaWFsZWN0IG9mIGEgc3RhbmRhcmQgaXMKK3NwZWNpZmllZCwgYWxsIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgY29tcGlsZXIgYXJlIGVuYWJsZWQsIGV2ZW4gd2hlbgordGhvc2UgZmVhdHVyZXMgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBiYXNlIHN0YW5kYXJkLiAgQXMgYSByZXN1bHQsIHNvbWUKK3N0cmljdC1jb25mb3JtaW5nIHByb2dyYW1zIG1heSBiZSByZWplY3RlZC4gIFRoZSBwYXJ0aWN1bGFyIHN0YW5kYXJkCitpcyB1c2VkIGJ5IFxmQlwtV3BlZGFudGljXGZSIHRvIGlkZW50aWZ5IHdoaWNoIGZlYXR1cmVzIGFyZSBccy0xR05VXHMwCitleHRlbnNpb25zIGdpdmVuIHRoYXQgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQuIEZvciBleGFtcGxlCitcJlxmQlwtc3RkPWdudTkwIFwtV3BlZGFudGljXGZSIHdhcm5zIGFib3V0IFwqKEMrIHN0eWxlIFxmQi8vXGZSCitjb21tZW50cywgd2hpbGUgXGZCXC1zdGQ9Z251OTkgXC1XcGVkYW50aWNcZlIgZG9lcyBub3QuCisuU3AKK0EgdmFsdWUgZm9yIHRoaXMgb3B0aW9uIG11c3QgYmUgcHJvdmlkZWQ7IHBvc3NpYmxlIHZhbHVlcyBhcmUKKy5SUyA0CisuSVAgIlxmQmM5MFxmUiIgNAorLklYIEl0ZW0gImM5MCIKKy5QRCAwCisuSVAgIlxmQmM4OVxmUiIgNAorLklYIEl0ZW0gImM4OSIKKy5JUCAiXGZCaXNvOTg5OToxOTkwXGZSIiA0CisuSVggSXRlbSAiaXNvOTg5OToxOTkwIgorLlBECitTdXBwb3J0IGFsbCBccy0xSVNPXHMwIEM5MCBwcm9ncmFtcyAoY2VydGFpbiBccy0xR05VXHMwIGV4dGVuc2lvbnMgdGhhdCBjb25mbGljdAord2l0aCBccy0xSVNPXHMwIEM5MCBhcmUgZGlzYWJsZWQpLiBTYW1lIGFzIFxmQlwtYW5zaVxmUiBmb3IgQyBjb2RlLgorLklQICJcZkJpc285ODk5OjE5OTQwOVxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5NDA5IgorXCZccy0xSVNPXHMwIEM5MCBhcyBtb2RpZmllZCBpbiBhbWVuZG1lbnQgMS4KKy5JUCAiXGZCYzk5XGZSIiA0CisuSVggSXRlbSAiYzk5IgorLlBEIDAKKy5JUCAiXGZCYzl4XGZSIiA0CisuSVggSXRlbSAiYzl4IgorLklQICJcZkJpc285ODk5OjE5OTlcZlIiIDQKKy5JWCBJdGVtICJpc285ODk5OjE5OTkiCisuSVAgIlxmQmlzbzk4OTk6MTk5eFxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5eCIKKy5QRAorXCZccy0xSVNPXHMwIEM5OS4gIE5vdGUgdGhhdCB0aGlzIHN0YW5kYXJkIGlzIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkOyBzZWUKKzxcZkJodHRwOi8vZ2NjLmdudS5vcmcvYzk5c3RhdHVzLmh0bWxcZlI+IGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlCituYW1lcyBcZkJjOXhcZlIgYW5kIFxmQmlzbzk4OTk6MTk5eFxmUiBhcmUgZGVwcmVjYXRlZC4KKy5JUCAiXGZCYzExXGZSIiA0CisuSVggSXRlbSAiYzExIgorLlBEIDAKKy5JUCAiXGZCYzF4XGZSIiA0CisuSVggSXRlbSAiYzF4IgorLklQICJcZkJpc285ODk5OjIwMTFcZlIiIDQKKy5JWCBJdGVtICJpc285ODk5OjIwMTEiCisuUEQKK1wmXHMtMUlTT1xzMCBDMTEsIHRoZSAyMDExIHJldmlzaW9uIG9mIHRoZSBccy0xSVNPXHMwIEMgc3RhbmRhcmQuCitTdXBwb3J0IGlzIGluY29tcGxldGUgYW5kIGV4cGVyaW1lbnRhbC4gIFRoZSBuYW1lIFxmQmMxeFxmUiBpcworZGVwcmVjYXRlZC4KKy5JUCAiXGZCZ251OTBcZlIiIDQKKy5JWCBJdGVtICJnbnU5MCIKKy5QRCAwCisuSVAgIlxmQmdudTg5XGZSIiA0CisuSVggSXRlbSAiZ251ODkiCisuUEQKK1wmXHMtMUdOVVxzMCBkaWFsZWN0IG9mIFxzLTFJU09cczAgQzkwIChpbmNsdWRpbmcgc29tZSBDOTkgZmVhdHVyZXMpLiBUaGlzCitpcyB0aGUgZGVmYXVsdCBmb3IgQyBjb2RlLgorLklQICJcZkJnbnU5OVxmUiIgNAorLklYIEl0ZW0gImdudTk5IgorLlBEIDAKKy5JUCAiXGZCZ251OXhcZlIiIDQKKy5JWCBJdGVtICJnbnU5eCIKKy5QRAorXCZccy0xR05VXHMwIGRpYWxlY3Qgb2YgXHMtMUlTT1xzMCBDOTkuICBXaGVuIFxzLTFJU09cczAgQzk5IGlzIGZ1bGx5IGltcGxlbWVudGVkIGluIFxzLTFHQ0NcczAsCit0aGlzIHdpbGwgYmVjb21lIHRoZSBkZWZhdWx0LiAgVGhlIG5hbWUgXGZCZ251OXhcZlIgaXMgZGVwcmVjYXRlZC4KKy5JUCAiXGZCZ251MTFcZlIiIDQKKy5JWCBJdGVtICJnbnUxMSIKKy5QRCAwCisuSVAgIlxmQmdudTF4XGZSIiA0CisuSVggSXRlbSAiZ251MXgiCisuUEQKK1wmXHMtMUdOVVxzMCBkaWFsZWN0IG9mIFxzLTFJU09cczAgQzExLiAgU3VwcG9ydCBpcyBpbmNvbXBsZXRlIGFuZCBleHBlcmltZW50YWwuICBUaGUKK25hbWUgXGZCZ251MXhcZlIgaXMgZGVwcmVjYXRlZC4KKy5JUCAiXGZCYysrOThcZlIiIDQKKy5JWCBJdGVtICJjKys5OCIKKy5QRCAwCisuSVAgIlxmQmMrKzAzXGZSIiA0CisuSVggSXRlbSAiYysrMDMiCisuUEQKK1RoZSAxOTk4IFxzLTFJU09cczAgXCooQysgc3RhbmRhcmQgcGx1cyB0aGUgMjAwMyB0ZWNobmljYWwgY29ycmlnZW5kdW0gYW5kIHNvbWUKK2FkZGl0aW9uYWwgZGVmZWN0IHJlcG9ydHMuIFNhbWUgYXMgXGZCXC1hbnNpXGZSIGZvciBcKihDKyBjb2RlLgorLklQICJcZkJnbnUrKzk4XGZSIiA0CisuSVggSXRlbSAiZ251Kys5OCIKKy5QRCAwCisuSVAgIlxmQmdudSsrMDNcZlIiIDQKKy5JWCBJdGVtICJnbnUrKzAzIgorLlBECitcJlxzLTFHTlVcczAgZGlhbGVjdCBvZiBcZkJcLXN0ZD1jKys5OFxmUi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yCitcJlwqKEMrIGNvZGUuCisuSVAgIlxmQmMrKzExXGZSIiA0CisuSVggSXRlbSAiYysrMTEiCisuUEQgMAorLklQICJcZkJjKysweFxmUiIgNAorLklYIEl0ZW0gImMrKzB4IgorLlBECitUaGUgMjAxMSBccy0xSVNPXHMwIFwqKEMrIHN0YW5kYXJkIHBsdXMgYW1lbmRtZW50cy4gIFN1cHBvcnQgZm9yIFwqKEMrMTEgaXMgc3RpbGwKK2V4cGVyaW1lbnRhbCwgYW5kIG1heSBjaGFuZ2UgaW4gaW5jb21wYXRpYmxlIHdheXMgaW4gZnV0dXJlIHJlbGVhc2VzLgorVGhlIG5hbWUgXGZCYysrMHhcZlIgaXMgZGVwcmVjYXRlZC4KKy5JUCAiXGZCZ251KysxMVxmUiIgNAorLklYIEl0ZW0gImdudSsrMTEiCisuUEQgMAorLklQICJcZkJnbnUrKzB4XGZSIiA0CisuSVggSXRlbSAiZ251KysweCIKKy5QRAorXCZccy0xR05VXHMwIGRpYWxlY3Qgb2YgXGZCXC1zdGQ9YysrMTFcZlIuIFN1cHBvcnQgZm9yIFwqKEMrMTEgaXMgc3RpbGwKK2V4cGVyaW1lbnRhbCwgYW5kIG1heSBjaGFuZ2UgaW4gaW5jb21wYXRpYmxlIHdheXMgaW4gZnV0dXJlIHJlbGVhc2VzLgorVGhlIG5hbWUgXGZCZ251KysweFxmUiBpcyBkZXByZWNhdGVkLgorLklQICJcZkJjKysxeVxmUiIgNAorLklYIEl0ZW0gImMrKzF5IgorVGhlIG5leHQgcmV2aXNpb24gb2YgdGhlIFxzLTFJU09cczAgXCooQysgc3RhbmRhcmQsIHRlbnRhdGl2ZWx5IHBsYW5uZWQgZm9yCisyMDE3LiAgU3VwcG9ydCBpcyBoaWdobHkgZXhwZXJpbWVudGFsLCBhbmQgd2lsbCBhbG1vc3QgY2VydGFpbmx5CitjaGFuZ2UgaW4gaW5jb21wYXRpYmxlIHdheXMgaW4gZnV0dXJlIHJlbGVhc2VzLgorLklQICJcZkJnbnUrKzF5XGZSIiA0CisuSVggSXRlbSAiZ251KysxeSIKK1wmXHMtMUdOVVxzMCBkaWFsZWN0IG9mIFxmQlwtc3RkPWMrKzF5XGZSLiAgU3VwcG9ydCBpcyBoaWdobHkgZXhwZXJpbWVudGFsLAorYW5kIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBjaGFuZ2UgaW4gaW5jb21wYXRpYmxlIHdheXMgaW4gZnV0dXJlCityZWxlYXNlcy4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLWZnbnU4OVwtaW5saW5lXGZSIiA0CisuSVggSXRlbSAiLWZnbnU4OS1pbmxpbmUiCitUaGUgb3B0aW9uIFxmQlwtZmdudTg5XC1pbmxpbmVcZlIgdGVsbHMgXHMtMUdDQ1xzMCB0byB1c2UgdGhlIHRyYWRpdGlvbmFsCitcJlxzLTFHTlVcczAgc2VtYW50aWNzIGZvciBcZihDV1wqKENgaW5saW5lXCooQydcZlIgZnVuY3Rpb25zIHdoZW4gaW4gQzk5IG1vZGUuCisgIFRoaXMgb3B0aW9uCitpcyBhY2NlcHRlZCBhbmQgaWdub3JlZCBieSBccy0xR0NDXHMwIHZlcnNpb25zIDQuMS4zIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCis0LjMuICBJbiBccy0xR0NDXHMwIHZlcnNpb25zIDQuMyBhbmQgbGF0ZXIgaXQgY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgXHMtMUdDQ1xzMCBpbgorQzk5IG1vZGUuICBVc2luZyB0aGlzIG9wdGlvbiBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYWRkaW5nIHRoZQorXCZcZihDV1wqKENgZ251X2lubGluZVwqKEMnXGZSIGZ1bmN0aW9uIGF0dHJpYnV0ZSB0byBhbGwgaW5saW5lIGZ1bmN0aW9ucy4KKy5TcAorVGhlIG9wdGlvbiBcZkJcLWZub1wtZ251ODlcLWlubGluZVxmUiBleHBsaWNpdGx5IHRlbGxzIFxzLTFHQ0NcczAgdG8gdXNlIHRoZQorQzk5IHNlbWFudGljcyBmb3IgXGYoQ1dcKihDYGlubGluZVwqKEMnXGZSIHdoZW4gaW4gQzk5IG9yIGdudTk5IG1vZGUgKGkuZS4sIGl0CitzcGVjaWZpZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLiAgVGhpcyBvcHRpb24gd2FzIGZpcnN0IHN1cHBvcnRlZCBpbgorXCZccy0xR0NDXHMwIDQuMy4gIFRoaXMgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gXGZCXC1zdGQ9YzkwXGZSIG9yCitcJlxmQlwtc3RkPWdudTkwXGZSIG1vZGUuCisuU3AKK1RoZSBwcmVwcm9jZXNzb3IgbWFjcm9zIFxmKENXXCooQ2BfXHxfR05VQ19HTlVfSU5MSU5FX1x8X1wqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgX1x8X0dOVUNfU1REQ19JTkxJTkVfXHxfXCooQydcZlIgbWF5IGJlIHVzZWQgdG8gY2hlY2sgd2hpY2ggc2VtYW50aWNzIGFyZQoraW4gZWZmZWN0IGZvciBcZihDV1wqKENgaW5saW5lXCooQydcZlIgZnVuY3Rpb25zLgorLklQICJcZkJcLWF1eFwtaW5mb1xmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1hdXgtaW5mbyBmaWxlbmFtZSIKK091dHB1dCB0byB0aGUgZ2l2ZW4gZmlsZW5hbWUgcHJvdG90eXBlZCBkZWNsYXJhdGlvbnMgZm9yIGFsbCBmdW5jdGlvbnMKK2RlY2xhcmVkIGFuZC9vciBkZWZpbmVkIGluIGEgdHJhbnNsYXRpb24gdW5pdCwgaW5jbHVkaW5nIHRob3NlIGluIGhlYWRlcgorZmlsZXMuICBUaGlzIG9wdGlvbiBpcyBzaWxlbnRseSBpZ25vcmVkIGluIGFueSBsYW5ndWFnZSBvdGhlciB0aGFuIEMuCisuU3AKK0Jlc2lkZXMgZGVjbGFyYXRpb25zLCB0aGUgZmlsZSBpbmRpY2F0ZXMsIGluIGNvbW1lbnRzLCB0aGUgb3JpZ2luIG9mCitlYWNoIGRlY2xhcmF0aW9uIChzb3VyY2UgZmlsZSBhbmQgbGluZSksIHdoZXRoZXIgdGhlIGRlY2xhcmF0aW9uIHdhcworaW1wbGljaXQsIHByb3RvdHlwZWQgb3IgdW5wcm90b3R5cGVkIChcZkJJXGZSLCBcZkJOXGZSIGZvciBuZXcgb3IKK1wmXGZCT1xmUiBmb3Igb2xkLCByZXNwZWN0aXZlbHksIGluIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGxpbmUKK251bWJlciBhbmQgdGhlIGNvbG9uKSwgYW5kIHdoZXRoZXIgaXQgY2FtZSBmcm9tIGEgZGVjbGFyYXRpb24gb3IgYQorZGVmaW5pdGlvbiAoXGZCQ1xmUiBvciBcZkJGXGZSLCByZXNwZWN0aXZlbHksIGluIHRoZSBmb2xsb3dpbmcKK2NoYXJhY3RlcikuICBJbiB0aGUgY2FzZSBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucywgYSBLJlJcLXN0eWxlIGxpc3Qgb2YKK2FyZ3VtZW50cyBmb2xsb3dlZCBieSB0aGVpciBkZWNsYXJhdGlvbnMgaXMgYWxzbyBwcm92aWRlZCwgaW5zaWRlCitjb21tZW50cywgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uLgorLklQICJcZkJcLWZhbGxvd1wtcGFyYW1ldGVybGVzc1wtdmFyaWFkaWNcLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mYWxsb3ctcGFyYW1ldGVybGVzcy12YXJpYWRpYy1mdW5jdGlvbnMiCitBY2NlcHQgdmFyaWFkaWMgZnVuY3Rpb25zIHdpdGhvdXQgbmFtZWQgcGFyYW1ldGVycy4KKy5TcAorQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIHN1Y2ggYSBmdW5jdGlvbiwgdGhpcyBpcyBub3QgdmVyeQordXNlZnVsIGFzIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWFkIHRoZSBhcmd1bWVudHMuICBUaGlzIGlzIG9ubHkKK3N1cHBvcnRlZCBmb3IgQyBhcyB0aGlzIGNvbnN0cnVjdCBpcyBhbGxvd2VkIGJ5IFwqKEMrLgorLklQICJcZkJcLWZub1wtYXNtXGZSIiA0CisuSVggSXRlbSAiLWZuby1hc20iCitEbyBub3QgcmVjb2duaXplIFxmKENXXCooQ2Bhc21cKihDJ1xmUiwgXGYoQ1dcKihDYGlubGluZVwqKEMnXGZSIG9yIFxmKENXXCooQ2B0eXBlb2ZcKihDJ1xmUiBhcyBhCitrZXl3b3JkLCBzbyB0aGF0IGNvZGUgY2FuIHVzZSB0aGVzZSB3b3JkcyBhcyBpZGVudGlmaWVycy4gIFlvdSBjYW4gdXNlCit0aGUga2V5d29yZHMgXGYoQ1dcKihDYF9cfF9hc21fXHxfXCooQydcZlIsIFxmKENXXCooQ2BfXHxfaW5saW5lX1x8X1wqKEMnXGZSIGFuZCBcZihDV1wqKENgX1x8X3R5cGVvZl9cfF9cKihDJ1xmUgoraW5zdGVhZC4gIFxmQlwtYW5zaVxmUiBpbXBsaWVzIFxmQlwtZm5vXC1hc21cZlIuCisuU3AKK0luIFwqKEMrLCB0aGlzIHN3aXRjaCBvbmx5IGFmZmVjdHMgdGhlIFxmKENXXCooQ2B0eXBlb2ZcKihDJ1xmUiBrZXl3b3JkLCBzaW5jZQorXCZcZihDV1wqKENgYXNtXCooQydcZlIgYW5kIFxmKENXXCooQ2BpbmxpbmVcKihDJ1xmUiBhcmUgc3RhbmRhcmQga2V5d29yZHMuICBZb3UgbWF5IHdhbnQgdG8KK3VzZSB0aGUgXGZCXC1mbm9cLWdudVwta2V5d29yZHNcZlIgZmxhZyBpbnN0ZWFkLCB3aGljaCBoYXMgdGhlIHNhbWUKK2VmZmVjdC4gIEluIEM5OSBtb2RlIChcZkJcLXN0ZD1jOTlcZlIgb3IgXGZCXC1zdGQ9Z251OTlcZlIpLCB0aGlzCitzd2l0Y2ggb25seSBhZmZlY3RzIHRoZSBcZihDV1wqKENgYXNtXCooQydcZlIgYW5kIFxmKENXXCooQ2B0eXBlb2ZcKihDJ1xmUiBrZXl3b3Jkcywgc2luY2UKK1wmXGYoQ1dcKihDYGlubGluZVwqKEMnXGZSIGlzIGEgc3RhbmRhcmQga2V5d29yZCBpbiBccy0xSVNPXHMwIEM5OS4KKy5JUCAiXGZCXC1mbm9cLWJ1aWx0aW5cZlIiIDQKKy5JWCBJdGVtICItZm5vLWJ1aWx0aW4iCisuUEQgMAorLklQICJcZkJcLWZub1wtYnVpbHRpblwtXGZSXGZJZnVuY3Rpb25cZlIiIDQKKy5JWCBJdGVtICItZm5vLWJ1aWx0aW4tZnVuY3Rpb24iCisuUEQKK0Rvbid0IHJlY29nbml6ZSBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBkbyBub3QgYmVnaW4gd2l0aAorXCZcZkJfXHxfYnVpbHRpbl9cZlIgYXMgcHJlZml4LgorLlNwCitcJlxzLTFHQ0NcczAgbm9ybWFsbHkgZ2VuZXJhdGVzIHNwZWNpYWwgY29kZSB0byBoYW5kbGUgY2VydGFpbiBidWlsdC1pbiBmdW5jdGlvbnMKK21vcmUgZWZmaWNpZW50bHk7IGZvciBpbnN0YW5jZSwgY2FsbHMgdG8gXGYoQ1dcKihDYGFsbG9jYVwqKEMnXGZSIG1heSBiZWNvbWUgc2luZ2xlCitpbnN0cnVjdGlvbnMgd2hpY2ggYWRqdXN0IHRoZSBzdGFjayBkaXJlY3RseSwgYW5kIGNhbGxzIHRvIFxmKENXXCooQ2BtZW1jcHlcKihDJ1xmUgorbWF5IGJlY29tZSBpbmxpbmUgY29weSBsb29wcy4gIFRoZSByZXN1bHRpbmcgY29kZSBpcyBvZnRlbiBib3RoIHNtYWxsZXIKK2FuZCBmYXN0ZXIsIGJ1dCBzaW5jZSB0aGUgZnVuY3Rpb24gY2FsbHMgbm8gbG9uZ2VyIGFwcGVhciBhcyBzdWNoLCB5b3UKK2Nhbm5vdCBzZXQgYSBicmVha3BvaW50IG9uIHRob3NlIGNhbGxzLCBub3IgY2FuIHlvdSBjaGFuZ2UgdGhlIGJlaGF2aW9yCitvZiB0aGUgZnVuY3Rpb25zIGJ5IGxpbmtpbmcgd2l0aCBhIGRpZmZlcmVudCBsaWJyYXJ5LiAgSW4gYWRkaXRpb24sCit3aGVuIGEgZnVuY3Rpb24gaXMgcmVjb2duaXplZCBhcyBhIGJ1aWx0LWluIGZ1bmN0aW9uLCBccy0xR0NDXHMwIG1heSB1c2UKK2luZm9ybWF0aW9uIGFib3V0IHRoYXQgZnVuY3Rpb24gdG8gd2FybiBhYm91dCBwcm9ibGVtcyB3aXRoIGNhbGxzIHRvCit0aGF0IGZ1bmN0aW9uLCBvciB0byBnZW5lcmF0ZSBtb3JlIGVmZmljaWVudCBjb2RlLCBldmVuIGlmIHRoZQorcmVzdWx0aW5nIGNvZGUgc3RpbGwgY29udGFpbnMgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLAord2FybmluZ3MgYXJlIGdpdmVuIHdpdGggXGZCXC1XZm9ybWF0XGZSIGZvciBiYWQgY2FsbHMgdG8KK1wmXGYoQ1dcKihDYHByaW50ZlwqKEMnXGZSIHdoZW4gXGYoQ1dcKihDYHByaW50ZlwqKEMnXGZSIGlzIGJ1aWx0IGluIGFuZCBcZihDV1wqKENgc3RybGVuXCooQydcZlIgaXMKK2tub3duIG5vdCB0byBtb2RpZnkgZ2xvYmFsIG1lbW9yeS4KKy5TcAorV2l0aCB0aGUgXGZCXC1mbm9cLWJ1aWx0aW5cLVxmUlxmSWZ1bmN0aW9uXGZSIG9wdGlvbgorb25seSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gXGZJZnVuY3Rpb25cZlIgaXMKK2Rpc2FibGVkLiAgXGZJZnVuY3Rpb25cZlIgbXVzdCBub3QgYmVnaW4gd2l0aCBcZkJfXHxfYnVpbHRpbl9cZlIuICBJZiBhCitmdW5jdGlvbiBpcyBuYW1lZCB0aGF0IGlzIG5vdCBidWlsdC1pbiBpbiB0aGlzIHZlcnNpb24gb2YgXHMtMUdDQ1xzMCwgdGhpcworb3B0aW9uIGlzIGlnbm9yZWQuICBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nCitcJlxmQlwtZmJ1aWx0aW5cLVxmUlxmSWZ1bmN0aW9uXGZSIG9wdGlvbjsgaWYgeW91IHdpc2ggdG8gZW5hYmxlCitidWlsdC1pbiBmdW5jdGlvbnMgc2VsZWN0aXZlbHkgd2hlbiB1c2luZyBcZkJcLWZub1wtYnVpbHRpblxmUiBvcgorXCZcZkJcLWZmcmVlc3RhbmRpbmdcZlIsIHlvdSBtYXkgZGVmaW5lIG1hY3JvcyBzdWNoIGFzOgorLlNwCisuVmIgMgorXCYgICAgICAgICNkZWZpbmUgYWJzKG4pICAgICAgICAgIF9cfF9idWlsdGluX2FicyAoKG4pKQorXCYgICAgICAgICNkZWZpbmUgc3RyY3B5KGQsIHMpICAgIF9cfF9idWlsdGluX3N0cmNweSAoKGQpLCAocykpCisuVmUKKy5JUCAiXGZCXC1maG9zdGVkXGZSIiA0CisuSVggSXRlbSAiLWZob3N0ZWQiCitBc3NlcnQgdGhhdCBjb21waWxhdGlvbiB0YXJnZXRzIGEgaG9zdGVkIGVudmlyb25tZW50LiAgVGhpcyBpbXBsaWVzCitcJlxmQlwtZmJ1aWx0aW5cZlIuICBBIGhvc3RlZCBlbnZpcm9ubWVudCBpcyBvbmUgaW4gd2hpY2ggdGhlCitlbnRpcmUgc3RhbmRhcmQgbGlicmFyeSBpcyBhdmFpbGFibGUsIGFuZCBpbiB3aGljaCBcZihDV1wqKENgbWFpblwqKEMnXGZSIGhhcyBhIHJldHVybgordHlwZSBvZiBcZihDV1wqKENgaW50XCooQydcZlIuICBFeGFtcGxlcyBhcmUgbmVhcmx5IGV2ZXJ5dGhpbmcgZXhjZXB0IGEga2VybmVsLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIFxmQlwtZm5vXC1mcmVlc3RhbmRpbmdcZlIuCisuSVAgIlxmQlwtZmZyZWVzdGFuZGluZ1xmUiIgNAorLklYIEl0ZW0gIi1mZnJlZXN0YW5kaW5nIgorQXNzZXJ0IHRoYXQgY29tcGlsYXRpb24gdGFyZ2V0cyBhIGZyZWVzdGFuZGluZyBlbnZpcm9ubWVudC4gIFRoaXMKK2ltcGxpZXMgXGZCXC1mbm9cLWJ1aWx0aW5cZlIuICBBIGZyZWVzdGFuZGluZyBlbnZpcm9ubWVudAoraXMgb25lIGluIHdoaWNoIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG1heSBub3QgZXhpc3QsIGFuZCBwcm9ncmFtIHN0YXJ0dXAgbWF5Citub3QgbmVjZXNzYXJpbHkgYmUgYXQgXGYoQ1dcKihDYG1haW5cKihDJ1xmUi4gIFRoZSBtb3N0IG9idmlvdXMgZXhhbXBsZSBpcyBhbiBccy0xT1NcczAga2VybmVsLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIFxmQlwtZm5vXC1ob3N0ZWRcZlIuCisuSVAgIlxmQlwtZm9wZW5tcFxmUiIgNAorLklYIEl0ZW0gIi1mb3Blbm1wIgorRW5hYmxlIGhhbmRsaW5nIG9mIE9wZW5NUCBkaXJlY3RpdmVzIFxmKENXXCooQ2AjcHJhZ21hIG9tcFwqKEMnXGZSIGluIEMvXCooQysgYW5kCitcJlxmKENXXCooQ2AhJG9tcFwqKEMnXGZSIGluIEZvcnRyYW4uICBXaGVuIFxmQlwtZm9wZW5tcFxmUiBpcyBzcGVjaWZpZWQsIHRoZQorY29tcGlsZXIgZ2VuZXJhdGVzIHBhcmFsbGVsIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBPcGVuTVAgQXBwbGljYXRpb24KK1Byb2dyYW0gSW50ZXJmYWNlIHYzLjAgPFxmQmh0dHA6Ly93d3cub3Blbm1wLm9yZy9cZlI+LiAgVGhpcyBvcHRpb24KK2ltcGxpZXMgXGZCXC1wdGhyZWFkXGZSLCBhbmQgdGh1cyBpcyBvbmx5IHN1cHBvcnRlZCBvbiB0YXJnZXRzIHRoYXQKK2hhdmUgc3VwcG9ydCBmb3IgXGZCXC1wdGhyZWFkXGZSLgorLklQICJcZkJcLWZnbnVcLXRtXGZSIiA0CisuSVggSXRlbSAiLWZnbnUtdG0iCitXaGVuIHRoZSBvcHRpb24gXGZCXC1mZ251XC10bVxmUiBpcyBzcGVjaWZpZWQsIHRoZSBjb21waWxlcgorZ2VuZXJhdGVzIGNvZGUgZm9yIHRoZSBMaW51eCB2YXJpYW50IG9mIEludGVsJ3MgY3VycmVudCBUcmFuc2FjdGlvbmFsCitNZW1vcnkgXHMtMUFCSVxzMCBzcGVjaWZpY2F0aW9uIGRvY3VtZW50IChSZXZpc2lvbiAxLjEsIE1heSA2IDIwMDkpLiAgVGhpcyBpcworYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgd2hvc2UgaW50ZXJmYWNlIG1heSBjaGFuZ2UgaW4gZnV0dXJlIHZlcnNpb25zCitvZiBccy0xR0NDXHMwLCBhcyB0aGUgb2ZmaWNpYWwgc3BlY2lmaWNhdGlvbiBjaGFuZ2VzLiAgUGxlYXNlIG5vdGUgdGhhdCBub3QKK2FsbCBhcmNoaXRlY3R1cmVzIGFyZSBzdXBwb3J0ZWQgZm9yIHRoaXMgZmVhdHVyZS4KKy5TcAorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gXHMtMUdDQ1xzMCdzIHN1cHBvcnQgZm9yIHRyYW5zYWN0aW9uYWwgbWVtb3J5LAorLlNwCitOb3RlIHRoYXQgdGhlIHRyYW5zYWN0aW9uYWwgbWVtb3J5IGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCB3aXRoCitub24tY2FsbCBleGNlcHRpb25zIChcZkJcLWZub25cLWNhbGxcLWV4Y2VwdGlvbnNcZlIpLgorLklQICJcZkJcLWZtc1wtZXh0ZW5zaW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mbXMtZXh0ZW5zaW9ucyIKK0FjY2VwdCBzb21lIG5vbi1zdGFuZGFyZCBjb25zdHJ1Y3RzIHVzZWQgaW4gTWljcm9zb2Z0IGhlYWRlciBmaWxlcy4KKy5TcAorSW4gXCooQysgY29kZSwgdGhpcyBhbGxvd3MgbWVtYmVyIG5hbWVzIGluIHN0cnVjdHVyZXMgdG8gYmUgc2ltaWxhcgordG8gcHJldmlvdXMgdHlwZXMgZGVjbGFyYXRpb25zLgorLlNwCisuVmIgNAorXCYgICAgICAgIHR5cGVkZWYgaW50IFVPVzsKK1wmICAgICAgICBzdHJ1Y3QgQUJDIHsKK1wmICAgICAgICAgIFVPVyBVT1c7CitcJiAgICAgICAgfTsKKy5WZQorLlNwCitTb21lIGNhc2VzIG9mIHVubmFtZWQgZmllbGRzIGluIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBhcmUgb25seQorYWNjZXB0ZWQgd2l0aCB0aGlzIG9wdGlvbi4KKy5JUCAiXGZCXC1mcGxhbjlcLWV4dGVuc2lvbnNcZlIiIDQKKy5JWCBJdGVtICItZnBsYW45LWV4dGVuc2lvbnMiCitBY2NlcHQgc29tZSBub24tc3RhbmRhcmQgY29uc3RydWN0cyB1c2VkIGluIFBsYW4gOSBjb2RlLgorLlNwCitUaGlzIGVuYWJsZXMgXGZCXC1mbXNcLWV4dGVuc2lvbnNcZlIsIHBlcm1pdHMgcGFzc2luZyBwb2ludGVycyB0bworc3RydWN0dXJlcyB3aXRoIGFub255bW91cyBmaWVsZHMgdG8gZnVuY3Rpb25zIHRoYXQgZXhwZWN0IHBvaW50ZXJzIHRvCitlbGVtZW50cyBvZiB0aGUgdHlwZSBvZiB0aGUgZmllbGQsIGFuZCBwZXJtaXRzIHJlZmVycmluZyB0byBhbm9ueW1vdXMKK2ZpZWxkcyBkZWNsYXJlZCB1c2luZyBhIHR5cGVkZWYuICAgIFRoaXMgaXMgb25seQorc3VwcG9ydGVkIGZvciBDLCBub3QgXCooQysuCisuSVAgIlxmQlwtdHJpZ3JhcGhzXGZSIiA0CisuSVggSXRlbSAiLXRyaWdyYXBocyIKK1N1cHBvcnQgXHMtMUlTT1xzMCBDIHRyaWdyYXBocy4gIFRoZSBcZkJcLWFuc2lcZlIgb3B0aW9uIChhbmQgXGZCXC1zdGRcZlIKK29wdGlvbnMgZm9yIHN0cmljdCBccy0xSVNPXHMwIEMgY29uZm9ybWFuY2UpIGltcGxpZXMgXGZCXC10cmlncmFwaHNcZlIuCisuSVAgIlxmQlwtdHJhZGl0aW9uYWxcZlIiIDQKKy5JWCBJdGVtICItdHJhZGl0aW9uYWwiCisuUEQgMAorLklQICJcZkJcLXRyYWRpdGlvbmFsXC1jcHBcZlIiIDQKKy5JWCBJdGVtICItdHJhZGl0aW9uYWwtY3BwIgorLlBECitGb3JtZXJseSwgdGhlc2Ugb3B0aW9ucyBjYXVzZWQgXHMtMUdDQ1xzMCB0byBhdHRlbXB0IHRvIGVtdWxhdGUgYSBwcmUtc3RhbmRhcmQKK0MgY29tcGlsZXIuICBUaGV5IGFyZSBub3cgb25seSBzdXBwb3J0ZWQgd2l0aCB0aGUgXGZCXC1FXGZSIHN3aXRjaC4KK1RoZSBwcmVwcm9jZXNzb3IgY29udGludWVzIHRvIHN1cHBvcnQgYSBwcmUtc3RhbmRhcmQgbW9kZS4gIFNlZSB0aGUgXHMtMUdOVVxzMAorXCZccy0xQ1BQXHMwIG1hbnVhbCBmb3IgZGV0YWlscy4KKy5JUCAiXGZCXC1mY29uZFwtbWlzbWF0Y2hcZlIiIDQKKy5JWCBJdGVtICItZmNvbmQtbWlzbWF0Y2giCitBbGxvdyBjb25kaXRpb25hbCBleHByZXNzaW9ucyB3aXRoIG1pc21hdGNoZWQgdHlwZXMgaW4gdGhlIHNlY29uZCBhbmQKK3RoaXJkIGFyZ3VtZW50cy4gIFRoZSB2YWx1ZSBvZiBzdWNoIGFuIGV4cHJlc3Npb24gaXMgdm9pZC4gIFRoaXMgb3B0aW9uCitpcyBub3Qgc3VwcG9ydGVkIGZvciBcKihDKy4KKy5JUCAiXGZCXC1mbGF4XC12ZWN0b3JcLWNvbnZlcnNpb25zXGZSIiA0CisuSVggSXRlbSAiLWZsYXgtdmVjdG9yLWNvbnZlcnNpb25zIgorQWxsb3cgaW1wbGljaXQgY29udmVyc2lvbnMgYmV0d2VlbiB2ZWN0b3JzIHdpdGggZGlmZmVyaW5nIG51bWJlcnMgb2YKK2VsZW1lbnRzIGFuZC9vciBpbmNvbXBhdGlibGUgZWxlbWVudCB0eXBlcy4gIFRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUKK3VzZWQgZm9yIG5ldyBjb2RlLgorLklQICJcZkJcLWZ1bnNpZ25lZFwtY2hhclxmUiIgNAorLklYIEl0ZW0gIi1mdW5zaWduZWQtY2hhciIKK0xldCB0aGUgdHlwZSBcZihDV1wqKENgY2hhclwqKEMnXGZSIGJlIHVuc2lnbmVkLCBsaWtlIFxmKENXXCooQ2B1bnNpZ25lZCBjaGFyXCooQydcZlIuCisuU3AKK0VhY2gga2luZCBvZiBtYWNoaW5lIGhhcyBhIGRlZmF1bHQgZm9yIHdoYXQgXGYoQ1dcKihDYGNoYXJcKihDJ1xmUiBzaG91bGQKK2JlLiAgSXQgaXMgZWl0aGVyIGxpa2UgXGYoQ1dcKihDYHVuc2lnbmVkIGNoYXJcKihDJ1xmUiBieSBkZWZhdWx0IG9yIGxpa2UKK1wmXGYoQ1dcKihDYHNpZ25lZCBjaGFyXCooQydcZlIgYnkgZGVmYXVsdC4KKy5TcAorSWRlYWxseSwgYSBwb3J0YWJsZSBwcm9ncmFtIHNob3VsZCBhbHdheXMgdXNlIFxmKENXXCooQ2BzaWduZWQgY2hhclwqKEMnXGZSIG9yCitcJlxmKENXXCooQ2B1bnNpZ25lZCBjaGFyXCooQydcZlIgd2hlbiBpdCBkZXBlbmRzIG9uIHRoZSBzaWduZWRuZXNzIG9mIGFuIG9iamVjdC4KK0J1dCBtYW55IHByb2dyYW1zIGhhdmUgYmVlbiB3cml0dGVuIHRvIHVzZSBwbGFpbiBcZihDV1wqKENgY2hhclwqKEMnXGZSIGFuZAorZXhwZWN0IGl0IHRvIGJlIHNpZ25lZCwgb3IgZXhwZWN0IGl0IHRvIGJlIHVuc2lnbmVkLCBkZXBlbmRpbmcgb24gdGhlCittYWNoaW5lcyB0aGV5IHdlcmUgd3JpdHRlbiBmb3IuICBUaGlzIG9wdGlvbiwgYW5kIGl0cyBpbnZlcnNlLCBsZXQgeW91CittYWtlIHN1Y2ggYSBwcm9ncmFtIHdvcmsgd2l0aCB0aGUgb3Bwb3NpdGUgZGVmYXVsdC4KKy5TcAorVGhlIHR5cGUgXGYoQ1dcKihDYGNoYXJcKihDJ1xmUiBpcyBhbHdheXMgYSBkaXN0aW5jdCB0eXBlIGZyb20gZWFjaCBvZgorXCZcZihDV1wqKENgc2lnbmVkIGNoYXJcKihDJ1xmUiBvciBcZihDV1wqKENgdW5zaWduZWQgY2hhclwqKEMnXGZSLCBldmVuIHRob3VnaCBpdHMgYmVoYXZpb3IKK2lzIGFsd2F5cyBqdXN0IGxpa2Ugb25lIG9mIHRob3NlIHR3by4KKy5JUCAiXGZCXC1mc2lnbmVkXC1jaGFyXGZSIiA0CisuSVggSXRlbSAiLWZzaWduZWQtY2hhciIKK0xldCB0aGUgdHlwZSBcZihDV1wqKENgY2hhclwqKEMnXGZSIGJlIHNpZ25lZCwgbGlrZSBcZihDV1wqKENgc2lnbmVkIGNoYXJcKihDJ1xmUi4KKy5TcAorTm90ZSB0aGF0IHRoaXMgaXMgZXF1aXZhbGVudCB0byBcZkJcLWZub1wtdW5zaWduZWRcLWNoYXJcZlIsIHdoaWNoIGlzCit0aGUgbmVnYXRpdmUgZm9ybSBvZiBcZkJcLWZ1bnNpZ25lZFwtY2hhclxmUi4gIExpa2V3aXNlLCB0aGUgb3B0aW9uCitcJlxmQlwtZm5vXC1zaWduZWRcLWNoYXJcZlIgaXMgZXF1aXZhbGVudCB0byBcZkJcLWZ1bnNpZ25lZFwtY2hhclxmUi4KKy5JUCAiXGZCXC1mc2lnbmVkXC1iaXRmaWVsZHNcZlIiIDQKKy5JWCBJdGVtICItZnNpZ25lZC1iaXRmaWVsZHMiCisuUEQgMAorLklQICJcZkJcLWZ1bnNpZ25lZFwtYml0ZmllbGRzXGZSIiA0CisuSVggSXRlbSAiLWZ1bnNpZ25lZC1iaXRmaWVsZHMiCisuSVAgIlxmQlwtZm5vXC1zaWduZWRcLWJpdGZpZWxkc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tc2lnbmVkLWJpdGZpZWxkcyIKKy5JUCAiXGZCXC1mbm9cLXVuc2lnbmVkXC1iaXRmaWVsZHNcZlIiIDQKKy5JWCBJdGVtICItZm5vLXVuc2lnbmVkLWJpdGZpZWxkcyIKKy5QRAorVGhlc2Ugb3B0aW9ucyBjb250cm9sIHdoZXRoZXIgYSBiaXQtZmllbGQgaXMgc2lnbmVkIG9yIHVuc2lnbmVkLCB3aGVuIHRoZQorZGVjbGFyYXRpb24gZG9lcyBub3QgdXNlIGVpdGhlciBcZihDV1wqKENgc2lnbmVkXCooQydcZlIgb3IgXGYoQ1dcKihDYHVuc2lnbmVkXCooQydcZlIuICBCeQorZGVmYXVsdCwgc3VjaCBhIGJpdC1maWVsZCBpcyBzaWduZWQsIGJlY2F1c2UgdGhpcyBpcyBjb25zaXN0ZW50OiB0aGUKK2Jhc2ljIGludGVnZXIgdHlwZXMgc3VjaCBhcyBcZihDV1wqKENgaW50XCooQydcZlIgYXJlIHNpZ25lZCB0eXBlcy4KKy5TUyAiT3B0aW9ucyBDb250cm9sbGluZyBcKihDKyBEaWFsZWN0IgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgQ29udHJvbGxpbmcgIERpYWxlY3QiCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0aGF0IGFyZSBvbmx5IG1lYW5pbmdmdWwKK2ZvciBcKihDKyBwcm9ncmFtcy4gIFlvdSBjYW4gYWxzbyB1c2UgbW9zdCBvZiB0aGUgXHMtMUdOVVxzMCBjb21waWxlciBvcHRpb25zCityZWdhcmRsZXNzIG9mIHdoYXQgbGFuZ3VhZ2UgeW91ciBwcm9ncmFtIGlzIGluLiAgRm9yIGV4YW1wbGUsIHlvdQorbWlnaHQgY29tcGlsZSBhIGZpbGUgXGYoQ1dcKihDYGZpcnN0Q2xhc3MuQ1wqKEMnXGZSIGxpa2UgdGhpczoKKy5QUAorLlZiIDEKK1wmICAgICAgICBnKysgXC1nIFwtZnJlcG8gXC1PIFwtYyBmaXJzdENsYXNzLkMKKy5WZQorLlBQCitJbiB0aGlzIGV4YW1wbGUsIG9ubHkgXGZCXC1mcmVwb1xmUiBpcyBhbiBvcHRpb24gbWVhbnQKK29ubHkgZm9yIFwqKEMrIHByb2dyYW1zOyB5b3UgY2FuIHVzZSB0aGUgb3RoZXIgb3B0aW9ucyB3aXRoIGFueQorbGFuZ3VhZ2Ugc3VwcG9ydGVkIGJ5IFxzLTFHQ0NcczAuCisuUFAKK0hlcmUgaXMgYSBsaXN0IG9mIG9wdGlvbnMgdGhhdCBhcmUgXGZJb25seVxmUiBmb3IgY29tcGlsaW5nIFwqKEMrIHByb2dyYW1zOgorLklQICJcZkJcLWZhYmlcLXZlcnNpb249XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mYWJpLXZlcnNpb249biIKK1VzZSB2ZXJzaW9uIFxmSW5cZlIgb2YgdGhlIFwqKEMrIFxzLTFBQklcczAuICBUaGUgZGVmYXVsdCBpcyB2ZXJzaW9uIDIuCisuU3AKK1ZlcnNpb24gMCByZWZlcnMgdG8gdGhlIHZlcnNpb24gY29uZm9ybWluZyBtb3N0IGNsb3NlbHkgdG8KK3RoZSBcKihDKyBccy0xQUJJXHMwIHNwZWNpZmljYXRpb24uICBUaGVyZWZvcmUsIHRoZSBccy0xQUJJXHMwIG9idGFpbmVkIHVzaW5nIHZlcnNpb24gMAord2lsbCBjaGFuZ2UgaW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIEcrKyBhcyBccy0xQUJJXHMwIGJ1Z3MgYXJlIGZpeGVkLgorLlNwCitWZXJzaW9uIDEgaXMgdGhlIHZlcnNpb24gb2YgdGhlIFwqKEMrIFxzLTFBQklcczAgdGhhdCBmaXJzdCBhcHBlYXJlZCBpbiBHKysgMy4yLgorLlNwCitWZXJzaW9uIDIgaXMgdGhlIHZlcnNpb24gb2YgdGhlIFwqKEMrIFxzLTFBQklcczAgdGhhdCBmaXJzdCBhcHBlYXJlZCBpbiBHKysgMy40LgorLlNwCitWZXJzaW9uIDMgY29ycmVjdHMgYW4gZXJyb3IgaW4gbWFuZ2xpbmcgYSBjb25zdGFudCBhZGRyZXNzIGFzIGEKK3RlbXBsYXRlIGFyZ3VtZW50LgorLlNwCitWZXJzaW9uIDQsIHdoaWNoIGZpcnN0IGFwcGVhcmVkIGluIEcrKyA0LjUsIGltcGxlbWVudHMgYSBzdGFuZGFyZAorbWFuZ2xpbmcgZm9yIHZlY3RvciB0eXBlcy4KKy5TcAorVmVyc2lvbiA1LCB3aGljaCBmaXJzdCBhcHBlYXJlZCBpbiBHKysgNC42LCBjb3JyZWN0cyB0aGUgbWFuZ2xpbmcgb2YKK2F0dHJpYnV0ZSBjb25zdC92b2xhdGlsZSBvbiBmdW5jdGlvbiBwb2ludGVyIHR5cGVzLCBkZWNsdHlwZSBvZiBhCitwbGFpbiBkZWNsLCBhbmQgdXNlIG9mIGEgZnVuY3Rpb24gcGFyYW1ldGVyIGluIHRoZSBkZWNsYXJhdGlvbiBvZgorYW5vdGhlciBwYXJhbWV0ZXIuCisuU3AKK1ZlcnNpb24gNiwgd2hpY2ggZmlyc3QgYXBwZWFyZWQgaW4gRysrIDQuNywgY29ycmVjdHMgdGhlIHByb21vdGlvbgorYmVoYXZpb3Igb2YgXCooQysxMSBzY29wZWQgZW51bXMgYW5kIHRoZSBtYW5nbGluZyBvZiB0ZW1wbGF0ZSBhcmd1bWVudAorcGFja3MsIGNvbnN0L3N0YXRpY19jYXN0LCBwcmVmaXggKysgYW5kIFwtXC0sIGFuZCBhIGNsYXNzIHNjb3BlIGZ1bmN0aW9uCit1c2VkIGFzIGEgdGVtcGxhdGUgYXJndW1lbnQuCisuU3AKK1NlZSBhbHNvIFxmQlwtV2FiaVxmUi4KKy5JUCAiXGZCXC1mbm9cLWFjY2Vzc1wtY29udHJvbFxmUiIgNAorLklYIEl0ZW0gIi1mbm8tYWNjZXNzLWNvbnRyb2wiCitUdXJuIG9mZiBhbGwgYWNjZXNzIGNoZWNraW5nLiAgVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IHVzZWZ1bCBmb3Igd29ya2luZworYXJvdW5kIGJ1Z3MgaW4gdGhlIGFjY2VzcyBjb250cm9sIGNvZGUuCisuSVAgIlxmQlwtZmNoZWNrXC1uZXdcZlIiIDQKKy5JWCBJdGVtICItZmNoZWNrLW5ldyIKK0NoZWNrIHRoYXQgdGhlIHBvaW50ZXIgcmV0dXJuZWQgYnkgXGYoQ1dcKihDYG9wZXJhdG9yIG5ld1wqKEMnXGZSIGlzIG5vbi1udWxsCitiZWZvcmUgYXR0ZW1wdGluZyB0byBtb2RpZnkgdGhlIHN0b3JhZ2UgYWxsb2NhdGVkLiAgVGhpcyBjaGVjayBpcworbm9ybWFsbHkgdW5uZWNlc3NhcnkgYmVjYXVzZSB0aGUgXCooQysgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQKK1wmXGYoQ1dcKihDYG9wZXJhdG9yIG5ld1wqKEMnXGZSIG9ubHkgcmV0dXJucyBcZihDVzBcZlIgaWYgaXQgaXMgZGVjbGFyZWQKK1wmXGZCXGYoQkl0aHJvdygpXGZCXGZSLCBpbiB3aGljaCBjYXNlIHRoZSBjb21waWxlciBhbHdheXMgY2hlY2tzIHRoZQorcmV0dXJuIHZhbHVlIGV2ZW4gd2l0aG91dCB0aGlzIG9wdGlvbi4gIEluIGFsbCBvdGhlciBjYXNlcywgd2hlbgorXCZcZihDV1wqKENgb3BlcmF0b3IgbmV3XCooQydcZlIgaGFzIGEgbm9uLWVtcHR5IGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uLCBtZW1vcnkKK2V4aGF1c3Rpb24gaXMgc2lnbmFsbGVkIGJ5IHRocm93aW5nIFxmKENXXCooQ2BzdGQ6OmJhZF9hbGxvY1wqKEMnXGZSLiAgU2VlIGFsc28KK1wmXGZCbmV3IChub3Rocm93KVxmUi4KKy5JUCAiXGZCXC1mY29uc3RleHByXC1kZXB0aD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZjb25zdGV4cHItZGVwdGg9biIKK1NldCB0aGUgbWF4aW11bSBuZXN0ZWQgZXZhbHVhdGlvbiBkZXB0aCBmb3IgXCooQysxMSBjb25zdGV4cHIgZnVuY3Rpb25zCit0byBcZkluXGZSLiAgQSBsaW1pdCBpcyBuZWVkZWQgdG8gZGV0ZWN0IGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZworY29uc3RhbnQgZXhwcmVzc2lvbiBldmFsdWF0aW9uLiAgVGhlIG1pbmltdW0gc3BlY2lmaWVkIGJ5IHRoZSBzdGFuZGFyZAoraXMgNTEyLgorLklQICJcZkJcLWZkZWR1Y2VcLWluaXRcLWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmRlZHVjZS1pbml0LWxpc3QiCitFbmFibGUgZGVkdWN0aW9uIG9mIGEgdGVtcGxhdGUgdHlwZSBwYXJhbWV0ZXIgYXMKK1wmXGYoQ1dcKihDYHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdFwqKEMnXGZSIGZyb20gYSBicmFjZS1lbmNsb3NlZCBpbml0aWFsaXplciBsaXN0LCBpLmUuCisuU3AKKy5WYiA0CitcJiAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGF1dG8gZm9yd2FyZChUIHQpIFwtPiBkZWNsdHlwZSAocmVhbGZuICh0KSkKK1wmICAgICAgICB7CitcJiAgICAgICAgICByZXR1cm4gcmVhbGZuICh0KTsKK1wmICAgICAgICB9CitcJiAgICAgICAgCitcJiAgICAgICAgdm9pZCBmKCkKK1wmICAgICAgICB7CitcJiAgICAgICAgICBmb3J3YXJkKHsxLDJ9KTsgLy8gY2FsbCBmb3J3YXJkPHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxpbnQ+PgorXCYgICAgICAgIH0KKy5WZQorLlNwCitUaGlzIGRlZHVjdGlvbiB3YXMgaW1wbGVtZW50ZWQgYXMgYSBwb3NzaWJsZSBleHRlbnNpb24gdG8gdGhlCitvcmlnaW5hbGx5IHByb3Bvc2VkIHNlbWFudGljcyBmb3IgdGhlIFwqKEMrMTEgc3RhbmRhcmQsIGJ1dCB3YXMgbm90IHBhcnQKK29mIHRoZSBmaW5hbCBzdGFuZGFyZCwgc28gaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRoaXMgb3B0aW9uIGlzCitkZXByZWNhdGVkLCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBHKysuCisuSVAgIlxmQlwtZmZyaWVuZFwtaW5qZWN0aW9uXGZSIiA0CisuSVggSXRlbSAiLWZmcmllbmQtaW5qZWN0aW9uIgorSW5qZWN0IGZyaWVuZCBmdW5jdGlvbnMgaW50byB0aGUgZW5jbG9zaW5nIG5hbWVzcGFjZSwgc28gdGhhdCB0aGV5IGFyZQordmlzaWJsZSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgY2xhc3MgaW4gd2hpY2ggdGhleSBhcmUgZGVjbGFyZWQuCitGcmllbmQgZnVuY3Rpb25zIHdlcmUgZG9jdW1lbnRlZCB0byB3b3JrIHRoaXMgd2F5IGluIHRoZSBvbGQgQW5ub3RhdGVkCitcJlwqKEMrIFJlZmVyZW5jZSBNYW51YWwsIGFuZCB2ZXJzaW9ucyBvZiBHKysgYmVmb3JlIDQuMSBhbHdheXMgd29ya2VkCit0aGF0IHdheS4gIEhvd2V2ZXIsIGluIFxzLTFJU09cczAgXCooQysgYSBmcmllbmQgZnVuY3Rpb24gdGhhdCBpcyBub3QgZGVjbGFyZWQKK2luIGFuIGVuY2xvc2luZyBzY29wZSBjYW4gb25seSBiZSBmb3VuZCB1c2luZyBhcmd1bWVudCBkZXBlbmRlbnQKK2xvb2t1cC4gIFRoaXMgb3B0aW9uIGNhdXNlcyBmcmllbmRzIHRvIGJlIGluamVjdGVkIGFzIHRoZXkgd2VyZSBpbgorZWFybGllciByZWxlYXNlcy4KKy5TcAorVGhpcyBvcHRpb24gaXMgZm9yIGNvbXBhdGliaWxpdHksIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZQorcmVsZWFzZSBvZiBHKysuCisuSVAgIlxmQlwtZm5vXC1lbGlkZVwtY29uc3RydWN0b3JzXGZSIiA0CisuSVggSXRlbSAiLWZuby1lbGlkZS1jb25zdHJ1Y3RvcnMiCitUaGUgXCooQysgc3RhbmRhcmQgYWxsb3dzIGFuIGltcGxlbWVudGF0aW9uIHRvIG9taXQgY3JlYXRpbmcgYSB0ZW1wb3JhcnkKK3RoYXQgaXMgb25seSB1c2VkIHRvIGluaXRpYWxpemUgYW5vdGhlciBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZS4KK1NwZWNpZnlpbmcgdGhpcyBvcHRpb24gZGlzYWJsZXMgdGhhdCBvcHRpbWl6YXRpb24sIGFuZCBmb3JjZXMgRysrIHRvCitjYWxsIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGluIGFsbCBjYXNlcy4KKy5JUCAiXGZCXC1mbm9cLWVuZm9yY2VcLWVoXC1zcGVjc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tZW5mb3JjZS1laC1zcGVjcyIKK0Rvbid0IGdlbmVyYXRlIGNvZGUgdG8gY2hlY2sgZm9yIHZpb2xhdGlvbiBvZiBleGNlcHRpb24gc3BlY2lmaWNhdGlvbnMKK2F0IHJ1biB0aW1lLiAgVGhpcyBvcHRpb24gdmlvbGF0ZXMgdGhlIFwqKEMrIHN0YW5kYXJkLCBidXQgbWF5IGJlIHVzZWZ1bAorZm9yIHJlZHVjaW5nIGNvZGUgc2l6ZSBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgbXVjaCBsaWtlIGRlZmluaW5nCitcJlxmQlxzLTFOREVCVUdcczBcZlIuICBUaGlzIGRvZXMgbm90IGdpdmUgdXNlciBjb2RlIHBlcm1pc3Npb24gdG8gdGhyb3cKK2V4Y2VwdGlvbnMgaW4gdmlvbGF0aW9uIG9mIHRoZSBleGNlcHRpb24gc3BlY2lmaWNhdGlvbnM7IHRoZSBjb21waWxlcgorc3RpbGwgb3B0aW1pemVzIGJhc2VkIG9uIHRoZSBzcGVjaWZpY2F0aW9ucywgc28gdGhyb3dpbmcgYW4KK3VuZXhwZWN0ZWQgZXhjZXB0aW9uIHJlc3VsdHMgaW4gdW5kZWZpbmVkIGJlaGF2aW9yIGF0IHJ1biB0aW1lLgorLklQICJcZkJcLWZleHRlcm5cLXRsc1wtaW5pdFxmUiIgNAorLklYIEl0ZW0gIi1mZXh0ZXJuLXRscy1pbml0IgorLlBEIDAKKy5JUCAiXGZCXC1mbm9cLWV4dGVyblwtdGxzXC1pbml0XGZSIiA0CisuSVggSXRlbSAiLWZuby1leHRlcm4tdGxzLWluaXQiCisuUEQKK1RoZSBcKihDKzExIGFuZCBPcGVuTVAgc3RhbmRhcmRzIGFsbG93IFxmQnRocmVhZF9sb2NhbFxmUiBhbmQKK1wmXGZCdGhyZWFkcHJpdmF0ZVxmUiB2YXJpYWJsZXMgdG8gaGF2ZSBkeW5hbWljIChydW50aW1lKQoraW5pdGlhbGl6YXRpb24uICBUbyBzdXBwb3J0IHRoaXMsIGFueSB1c2Ugb2Ygc3VjaCBhIHZhcmlhYmxlIGdvZXMKK3Rocm91Z2ggYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYW55IG5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbi4KK1doZW4gdGhlIHVzZSBhbmQgZGVmaW5pdGlvbiBvZiB0aGUgdmFyaWFibGUgYXJlIGluIHRoZSBzYW1lCit0cmFuc2xhdGlvbiB1bml0LCB0aGlzIG92ZXJoZWFkIGNhbiBiZSBvcHRpbWl6ZWQgYXdheSwgYnV0IHdoZW4gdGhlCit1c2UgaXMgaW4gYSBkaWZmZXJlbnQgdHJhbnNsYXRpb24gdW5pdCB0aGVyZSBpcyBzaWduaWZpY2FudCBvdmVyaGVhZAorZXZlbiBpZiB0aGUgdmFyaWFibGUgZG9lc24ndCBhY3R1YWxseSBuZWVkIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24uICBJZgordGhlIHByb2dyYW1tZXIgY2FuIGJlIHN1cmUgdGhhdCBubyB1c2Ugb2YgdGhlIHZhcmlhYmxlIGluIGEKK25vbi1kZWZpbmluZyBccy0xVFVcczAgbmVlZHMgdG8gdHJpZ2dlciBkeW5hbWljIGluaXRpYWxpemF0aW9uIChlaXRoZXIKK2JlY2F1c2UgdGhlIHZhcmlhYmxlIGlzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIG9yIGEgdXNlIG9mIHRoZQordmFyaWFibGUgaW4gdGhlIGRlZmluaW5nIFxzLTFUVVxzMCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZSBhbnkgdXNlcyBpbgorYW5vdGhlciBccy0xVFVcczApLCB0aGV5IGNhbiBhdm9pZCB0aGlzIG92ZXJoZWFkIHdpdGggdGhlCitcJlxmQlwtZm5vXC1leHRlcm5cLXRsc1wtaW5pdFxmUiBvcHRpb24uCisuU3AKK09uIHRhcmdldHMgdGhhdCBzdXBwb3J0IHN5bWJvbCBhbGlhc2VzLCB0aGUgZGVmYXVsdCBpcworXCZcZkJcLWZleHRlcm5cLXRsc1wtaW5pdFxmUi4gIE9uIHRhcmdldHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBzeW1ib2wKK2FsaWFzZXMsIHRoZSBkZWZhdWx0IGlzIFxmQlwtZm5vXC1leHRlcm5cLXRsc1wtaW5pdFxmUi4KKy5JUCAiXGZCXC1mZm9yXC1zY29wZVxmUiIgNAorLklYIEl0ZW0gIi1mZm9yLXNjb3BlIgorLlBEIDAKKy5JUCAiXGZCXC1mbm9cLWZvclwtc2NvcGVcZlIiIDQKKy5JWCBJdGVtICItZm5vLWZvci1zY29wZSIKKy5QRAorSWYgXGZCXC1mZm9yXC1zY29wZVxmUiBpcyBzcGVjaWZpZWQsIHRoZSBzY29wZSBvZiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4KK2EgXGZJZm9yLWluaXQtc3RhdGVtZW50XGZSIGlzIGxpbWl0ZWQgdG8gdGhlIFxmQmZvclxmUiBsb29wIGl0c2VsZiwKK2FzIHNwZWNpZmllZCBieSB0aGUgXCooQysgc3RhbmRhcmQuCitJZiBcZkJcLWZub1wtZm9yXC1zY29wZVxmUiBpcyBzcGVjaWZpZWQsIHRoZSBzY29wZSBvZiB2YXJpYWJsZXMgZGVjbGFyZWQgaW4KK2EgXGZJZm9yLWluaXQtc3RhdGVtZW50XGZSIGV4dGVuZHMgdG8gdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIHNjb3BlLAorYXMgd2FzIHRoZSBjYXNlIGluIG9sZCB2ZXJzaW9ucyBvZiBHKyssIGFuZCBvdGhlciAodHJhZGl0aW9uYWwpCitpbXBsZW1lbnRhdGlvbnMgb2YgXCooQysuCisuU3AKK0lmIG5laXRoZXIgZmxhZyBpcyBnaXZlbiwgdGhlIGRlZmF1bHQgaXMgdG8gZm9sbG93IHRoZSBzdGFuZGFyZCwKK2J1dCB0byBhbGxvdyBhbmQgZ2l2ZSBhIHdhcm5pbmcgZm9yIG9sZC1zdHlsZSBjb2RlIHRoYXQgd291bGQKK290aGVyd2lzZSBiZSBpbnZhbGlkLCBvciBoYXZlIGRpZmZlcmVudCBiZWhhdmlvci4KKy5JUCAiXGZCXC1mbm9cLWdudVwta2V5d29yZHNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWdudS1rZXl3b3JkcyIKK0RvIG5vdCByZWNvZ25pemUgXGYoQ1dcKihDYHR5cGVvZlwqKEMnXGZSIGFzIGEga2V5d29yZCwgc28gdGhhdCBjb2RlIGNhbiB1c2UgdGhpcword29yZCBhcyBhbiBpZGVudGlmaWVyLiAgWW91IGNhbiB1c2UgdGhlIGtleXdvcmQgXGYoQ1dcKihDYF9cfF90eXBlb2ZfXHxfXCooQydcZlIgaW5zdGVhZC4KK1wmXGZCXC1hbnNpXGZSIGltcGxpZXMgXGZCXC1mbm9cLWdudVwta2V5d29yZHNcZlIuCisuSVAgIlxmQlwtZm5vXC1pbXBsaWNpdFwtdGVtcGxhdGVzXGZSIiA0CisuSVggSXRlbSAiLWZuby1pbXBsaWNpdC10ZW1wbGF0ZXMiCitOZXZlciBlbWl0IGNvZGUgZm9yIG5vbi1pbmxpbmUgdGVtcGxhdGVzIHRoYXQgYXJlIGluc3RhbnRpYXRlZAoraW1wbGljaXRseSAoaS5lLiBieSB1c2UpOyBvbmx5IGVtaXQgY29kZSBmb3IgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMuCisuSVAgIlxmQlwtZm5vXC1pbXBsaWNpdFwtaW5saW5lXC10ZW1wbGF0ZXNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWltcGxpY2l0LWlubGluZS10ZW1wbGF0ZXMiCitEb24ndCBlbWl0IGNvZGUgZm9yIGltcGxpY2l0IGluc3RhbnRpYXRpb25zIG9mIGlubGluZSB0ZW1wbGF0ZXMsIGVpdGhlci4KK1RoZSBkZWZhdWx0IGlzIHRvIGhhbmRsZSBpbmxpbmVzIGRpZmZlcmVudGx5IHNvIHRoYXQgY29tcGlsZXMgd2l0aCBhbmQKK3dpdGhvdXQgb3B0aW1pemF0aW9uIG5lZWQgdGhlIHNhbWUgc2V0IG9mIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zLgorLklQICJcZkJcLWZub1wtaW1wbGVtZW50XC1pbmxpbmVzXGZSIiA0CisuSVggSXRlbSAiLWZuby1pbXBsZW1lbnQtaW5saW5lcyIKK1RvIHNhdmUgc3BhY2UsIGRvIG5vdCBlbWl0IG91dC1vZi1saW5lIGNvcGllcyBvZiBpbmxpbmUgZnVuY3Rpb25zCitjb250cm9sbGVkIGJ5IFxmQiNwcmFnbWEgaW1wbGVtZW50YXRpb25cZlIuICBUaGlzIGNhdXNlcyBsaW5rZXIKK2Vycm9ycyBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbmxpbmVkIGV2ZXJ5d2hlcmUgdGhleSBhcmUgY2FsbGVkLgorLklQICJcZkJcLWZtc1wtZXh0ZW5zaW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mbXMtZXh0ZW5zaW9ucyIKK0Rpc2FibGUgV3BlZGFudGljIHdhcm5pbmdzIGFib3V0IGNvbnN0cnVjdHMgdXNlZCBpbiBccy0xTUZDXHMwLCBzdWNoIGFzIGltcGxpY2l0CitpbnQgYW5kIGdldHRpbmcgYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbiB2aWEgbm9uLXN0YW5kYXJkIHN5bnRheC4KKy5JUCAiXGZCXC1mbm9cLW5vbmFuc2lcLWJ1aWx0aW5zXGZSIiA0CisuSVggSXRlbSAiLWZuby1ub25hbnNpLWJ1aWx0aW5zIgorRGlzYWJsZSBidWlsdC1pbiBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBtYW5kYXRlZCBieQorXCZccy0xQU5TSS9JU09cczAgQy4gIFRoZXNlIGluY2x1ZGUgXGYoQ1dcKihDYGZmc1wqKEMnXGZSLCBcZihDV1wqKENgYWxsb2NhXCooQydcZlIsIFxmKENXXCooQ2BfZXhpdFwqKEMnXGZSLAorXCZcZihDV1wqKENgaW5kZXhcKihDJ1xmUiwgXGYoQ1dcKihDYGJ6ZXJvXCooQydcZlIsIFxmKENXXCooQ2Bjb25qZlwqKEMnXGZSLCBhbmQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuCisuSVAgIlxmQlwtZm5vdGhyb3dcLW9wdFxmUiIgNAorLklYIEl0ZW0gIi1mbm90aHJvdy1vcHQiCitUcmVhdCBhIFxmKENXXCooQ2B0aHJvdygpXCooQydcZlIgZXhjZXB0aW9uIHNwZWNpZmljYXRpb24gYXMgaWYgaXQgd2VyZSBhCitcJlxmKENXXCooQ2Bub2V4Y2VwdFwqKEMnXGZSIHNwZWNpZmljYXRpb24gdG8gcmVkdWNlIG9yIGVsaW1pbmF0ZSB0aGUgdGV4dCBzaXplCitvdmVyaGVhZCByZWxhdGl2ZSB0byBhIGZ1bmN0aW9uIHdpdGggbm8gZXhjZXB0aW9uIHNwZWNpZmljYXRpb24uICBJZgordGhlIGZ1bmN0aW9uIGhhcyBsb2NhbCB2YXJpYWJsZXMgb2YgdHlwZXMgd2l0aCBub24tdHJpdmlhbAorZGVzdHJ1Y3RvcnMsIHRoZSBleGNlcHRpb24gc3BlY2lmaWNhdGlvbiBhY3R1YWxseSBtYWtlcyB0aGUKK2Z1bmN0aW9uIHNtYWxsZXIgYmVjYXVzZSB0aGUgXHMtMUVIXHMwIGNsZWFudXBzIGZvciB0aG9zZSB2YXJpYWJsZXMgY2FuIGJlCitvcHRpbWl6ZWQgYXdheS4gIFRoZSBzZW1hbnRpYyBlZmZlY3QgaXMgdGhhdCBhbiBleGNlcHRpb24gdGhyb3duIG91dCBvZgorYSBmdW5jdGlvbiB3aXRoIHN1Y2ggYW4gZXhjZXB0aW9uIHNwZWNpZmljYXRpb24gcmVzdWx0cyBpbiBhIGNhbGwKK3RvIFxmKENXXCooQ2B0ZXJtaW5hdGVcKihDJ1xmUiByYXRoZXIgdGhhbiBcZihDV1wqKENgdW5leHBlY3RlZFwqKEMnXGZSLgorLklQICJcZkJcLWZub1wtb3BlcmF0b3JcLW5hbWVzXGZSIiA0CisuSVggSXRlbSAiLWZuby1vcGVyYXRvci1uYW1lcyIKK0RvIG5vdCB0cmVhdCB0aGUgb3BlcmF0b3IgbmFtZSBrZXl3b3JkcyBcZihDV1wqKENgYW5kXCooQydcZlIsIFxmKENXXCooQ2BiaXRhbmRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGJpdG9yXCooQydcZlIsIFxmKENXXCooQ2Bjb21wbFwqKEMnXGZSLCBcZihDV1wqKENgbm90XCooQydcZlIsIFxmKENXXCooQ2BvclwqKEMnXGZSIGFuZCBcZihDV1wqKENgeG9yXCooQydcZlIgYXMKK3N5bm9ueW1zIGFzIGtleXdvcmRzLgorLklQICJcZkJcLWZub1wtb3B0aW9uYWxcLWRpYWdzXGZSIiA0CisuSVggSXRlbSAiLWZuby1vcHRpb25hbC1kaWFncyIKK0Rpc2FibGUgZGlhZ25vc3RpY3MgdGhhdCB0aGUgc3RhbmRhcmQgc2F5cyBhIGNvbXBpbGVyIGRvZXMgbm90IG5lZWQgdG8KK2lzc3VlLiAgQ3VycmVudGx5LCB0aGUgb25seSBzdWNoIGRpYWdub3N0aWMgaXNzdWVkIGJ5IEcrKyBpcyB0aGUgb25lIGZvcgorYSBuYW1lIGhhdmluZyBtdWx0aXBsZSBtZWFuaW5ncyB3aXRoaW4gYSBjbGFzcy4KKy5JUCAiXGZCXC1mcGVybWlzc2l2ZVxmUiIgNAorLklYIEl0ZW0gIi1mcGVybWlzc2l2ZSIKK0Rvd25ncmFkZSBzb21lIGRpYWdub3N0aWNzIGFib3V0IG5vbmNvbmZvcm1hbnQgY29kZSBmcm9tIGVycm9ycyB0bword2FybmluZ3MuICBUaHVzLCB1c2luZyBcZkJcLWZwZXJtaXNzaXZlXGZSIGFsbG93cyBzb21lCitub25jb25mb3JtaW5nIGNvZGUgdG8gY29tcGlsZS4KKy5JUCAiXGZCXC1mbm9cLXByZXR0eVwtdGVtcGxhdGVzXGZSIiA0CisuSVggSXRlbSAiLWZuby1wcmV0dHktdGVtcGxhdGVzIgorV2hlbiBhbiBlcnJvciBtZXNzYWdlIHJlZmVycyB0byBhIHNwZWNpYWxpemF0aW9uIG9mIGEgZnVuY3Rpb24KK3RlbXBsYXRlLCB0aGUgY29tcGlsZXIgbm9ybWFsbHkgcHJpbnRzIHRoZSBzaWduYXR1cmUgb2YgdGhlCit0ZW1wbGF0ZSBmb2xsb3dlZCBieSB0aGUgdGVtcGxhdGUgYXJndW1lbnRzIGFuZCBhbnkgdHlwZWRlZnMgb3IKK3R5cGVuYW1lcyBpbiB0aGUgc2lnbmF0dXJlIChlLmcuIFxmKENXXCooQ2B2b2lkIGYoVCkgW3dpdGggVCA9IGludF1cKihDJ1xmUgorcmF0aGVyIHRoYW4gXGYoQ1dcKihDYHZvaWQgZihpbnQpXCooQydcZlIpIHNvIHRoYXQgaXQncyBjbGVhciB3aGljaCB0ZW1wbGF0ZSBpcworaW52b2x2ZWQuICBXaGVuIGFuIGVycm9yIG1lc3NhZ2UgcmVmZXJzIHRvIGEgc3BlY2lhbGl6YXRpb24gb2YgYSBjbGFzcwordGVtcGxhdGUsIHRoZSBjb21waWxlciBvbWl0cyBhbnkgdGVtcGxhdGUgYXJndW1lbnRzIHRoYXQgbWF0Y2gKK3RoZSBkZWZhdWx0IHRlbXBsYXRlIGFyZ3VtZW50cyBmb3IgdGhhdCB0ZW1wbGF0ZS4gIElmIGVpdGhlciBvZiB0aGVzZQorYmVoYXZpb3JzIG1ha2UgaXQgaGFyZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIG1lc3NhZ2UgcmF0aGVyIHRoYW4KK2Vhc2llciwgeW91IGNhbiB1c2UgXGZCXC1mbm9cLXByZXR0eVwtdGVtcGxhdGVzXGZSIHRvIGRpc2FibGUgdGhlbS4KKy5JUCAiXGZCXC1mcmVwb1xmUiIgNAorLklYIEl0ZW0gIi1mcmVwbyIKK0VuYWJsZSBhdXRvbWF0aWMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiBhdCBsaW5rIHRpbWUuICBUaGlzIG9wdGlvbiBhbHNvCitpbXBsaWVzIFxmQlwtZm5vXC1pbXBsaWNpdFwtdGVtcGxhdGVzXGZSLgorLklQICJcZkJcLWZub1wtcnR0aVxmUiIgNAorLklYIEl0ZW0gIi1mbm8tcnR0aSIKK0Rpc2FibGUgZ2VuZXJhdGlvbiBvZiBpbmZvcm1hdGlvbiBhYm91dCBldmVyeSBjbGFzcyB3aXRoIHZpcnR1YWwKK2Z1bmN0aW9ucyBmb3IgdXNlIGJ5IHRoZSBcKihDKyBydW4tdGltZSB0eXBlIGlkZW50aWZpY2F0aW9uIGZlYXR1cmVzCisoXGZCZHluYW1pY19jYXN0XGZSIGFuZCBcZkJ0eXBlaWRcZlIpLiAgSWYgeW91IGRvbid0IHVzZSB0aG9zZSBwYXJ0cworb2YgdGhlIGxhbmd1YWdlLCB5b3UgY2FuIHNhdmUgc29tZSBzcGFjZSBieSB1c2luZyB0aGlzIGZsYWcuICBOb3RlIHRoYXQKK2V4Y2VwdGlvbiBoYW5kbGluZyB1c2VzIHRoZSBzYW1lIGluZm9ybWF0aW9uLCBidXQgRysrIGdlbmVyYXRlcyBpdCBhcworbmVlZGVkLiBUaGUgXGZCZHluYW1pY19jYXN0XGZSIG9wZXJhdG9yIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBjYXN0cyB0aGF0CitkbyBub3QgcmVxdWlyZSBydW4tdGltZSB0eXBlIGluZm9ybWF0aW9uLCBpLmUuIGNhc3RzIHRvIFxmKENXXCooQ2B2b2lkICpcKihDJ1xmUiBvciB0bwordW5hbWJpZ3VvdXMgYmFzZSBjbGFzc2VzLgorLklQICJcZkJcLWZzdGF0c1xmUiIgNAorLklYIEl0ZW0gIi1mc3RhdHMiCitFbWl0IHN0YXRpc3RpY3MgYWJvdXQgZnJvbnQtZW5kIHByb2Nlc3NpbmcgYXQgdGhlIGVuZCBvZiB0aGUgY29tcGlsYXRpb24uCitUaGlzIGluZm9ybWF0aW9uIGlzIGdlbmVyYWxseSBvbmx5IHVzZWZ1bCB0byB0aGUgRysrIGRldmVsb3BtZW50IHRlYW0uCisuSVAgIlxmQlwtZnN0cmljdFwtZW51bXNcZlIiIDQKKy5JWCBJdGVtICItZnN0cmljdC1lbnVtcyIKK0FsbG93IHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSB1c2luZyB0aGUgYXNzdW1wdGlvbiB0aGF0IGEgdmFsdWUgb2YKK2VudW1lcmF0ZWQgdHlwZSBjYW4gb25seSBiZSBvbmUgb2YgdGhlIHZhbHVlcyBvZiB0aGUgZW51bWVyYXRpb24gKGFzCitkZWZpbmVkIGluIHRoZSBcKihDKyBzdGFuZGFyZDsgYmFzaWNhbGx5LCBhIHZhbHVlIHRoYXQgY2FuIGJlCityZXByZXNlbnRlZCBpbiB0aGUgbWluaW11bSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IGFsbCB0aGUKK2VudW1lcmF0b3JzKS4gIFRoaXMgYXNzdW1wdGlvbiBtYXkgbm90IGJlIHZhbGlkIGlmIHRoZSBwcm9ncmFtIHVzZXMgYQorY2FzdCB0byBjb252ZXJ0IGFuIGFyYml0cmFyeSBpbnRlZ2VyIHZhbHVlIHRvIHRoZSBlbnVtZXJhdGVkIHR5cGUuCisuSVAgIlxmQlwtZnRlbXBsYXRlXC1iYWNrdHJhY2VcLWxpbWl0PVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZnRlbXBsYXRlLWJhY2t0cmFjZS1saW1pdD1uIgorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIG5vdGVzIGZvciBhIHNpbmdsZQord2FybmluZyBvciBlcnJvciB0byBcZkluXGZSLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisuSVAgIlxmQlwtZnRlbXBsYXRlXC1kZXB0aD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZ0ZW1wbGF0ZS1kZXB0aD1uIgorU2V0IHRoZSBtYXhpbXVtIGluc3RhbnRpYXRpb24gZGVwdGggZm9yIHRlbXBsYXRlIGNsYXNzZXMgdG8gXGZJblxmUi4KK0EgbGltaXQgb24gdGhlIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gZGVwdGggaXMgbmVlZGVkIHRvIGRldGVjdAorZW5kbGVzcyByZWN1cnNpb25zIGR1cmluZyB0ZW1wbGF0ZSBjbGFzcyBpbnN0YW50aWF0aW9uLiAgXHMtMUFOU0kvSVNPXHMwIFwqKEMrCitjb25mb3JtaW5nIHByb2dyYW1zIG11c3Qgbm90IHJlbHkgb24gYSBtYXhpbXVtIGRlcHRoIGdyZWF0ZXIgdGhhbiAxNworKGNoYW5nZWQgdG8gMTAyNCBpbiBcKihDKzExKS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDkwMCwgYXMgdGhlIGNvbXBpbGVyCitjYW4gcnVuIG91dCBvZiBzdGFjayBzcGFjZSBiZWZvcmUgaGl0dGluZyAxMDI0IGluIHNvbWUgc2l0dWF0aW9ucy4KKy5JUCAiXGZCXC1mbm9cLXRocmVhZHNhZmVcLXN0YXRpY3NcZlIiIDQKKy5JWCBJdGVtICItZm5vLXRocmVhZHNhZmUtc3RhdGljcyIKK0RvIG5vdCBlbWl0IHRoZSBleHRyYSBjb2RlIHRvIHVzZSB0aGUgcm91dGluZXMgc3BlY2lmaWVkIGluIHRoZSBcKihDKworXCZccy0xQUJJXHMwIGZvciB0aHJlYWQtc2FmZSBpbml0aWFsaXphdGlvbiBvZiBsb2NhbCBzdGF0aWNzLiAgWW91IGNhbiB1c2UgdGhpcworb3B0aW9uIHRvIHJlZHVjZSBjb2RlIHNpemUgc2xpZ2h0bHkgaW4gY29kZSB0aGF0IGRvZXNuJ3QgbmVlZCB0byBiZQordGhyZWFkLXNhZmUuCisuSVAgIlxmQlwtZnVzZVwtY3hhXC1hdGV4aXRcZlIiIDQKKy5JWCBJdGVtICItZnVzZS1jeGEtYXRleGl0IgorUmVnaXN0ZXIgZGVzdHJ1Y3RvcnMgZm9yIG9iamVjdHMgd2l0aCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiB3aXRoIHRoZQorXCZcZihDV1wqKENgX1x8X2N4YV9hdGV4aXRcKihDJ1xmUiBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgXGYoQ1dcKihDYGF0ZXhpdFwqKEMnXGZSIGZ1bmN0aW9uLgorVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIGZ1bGx5IHN0YW5kYXJkcy1jb21wbGlhbnQgaGFuZGxpbmcgb2Ygc3RhdGljCitkZXN0cnVjdG9ycywgYnV0IG9ubHkgd29ya3MgaWYgeW91ciBDIGxpYnJhcnkgc3VwcG9ydHMKK1wmXGYoQ1dcKihDYF9cfF9jeGFfYXRleGl0XCooQydcZlIuCisuSVAgIlxmQlwtZm5vXC11c2VcLWN4YVwtZ2V0XC1leGNlcHRpb25cLXB0clxmUiIgNAorLklYIEl0ZW0gIi1mbm8tdXNlLWN4YS1nZXQtZXhjZXB0aW9uLXB0ciIKK0Rvbid0IHVzZSB0aGUgXGYoQ1dcKihDYF9cfF9jeGFfZ2V0X2V4Y2VwdGlvbl9wdHJcKihDJ1xmUiBydW50aW1lIHJvdXRpbmUuICBUaGlzCitjYXVzZXMgXGYoQ1dcKihDYHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9uXCooQydcZlIgdG8gYmUgaW5jb3JyZWN0LCBidXQgaXMgbmVjZXNzYXJ5CitpZiB0aGUgcnVudGltZSByb3V0aW5lIGlzIG5vdCBhdmFpbGFibGUuCisuSVAgIlxmQlwtZnZpc2liaWxpdHlcLWlubGluZXNcLWhpZGRlblxmUiIgNAorLklYIEl0ZW0gIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKK1RoaXMgc3dpdGNoIGRlY2xhcmVzIHRoYXQgdGhlIHVzZXIgZG9lcyBub3QgYXR0ZW1wdCB0byBjb21wYXJlCitwb2ludGVycyB0byBpbmxpbmUgZnVuY3Rpb25zIG9yIG1ldGhvZHMgd2hlcmUgdGhlIGFkZHJlc3NlcyBvZiB0aGUgdHdvIGZ1bmN0aW9ucworYXJlIHRha2VuIGluIGRpZmZlcmVudCBzaGFyZWQgb2JqZWN0cy4KKy5TcAorVGhlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgXHMtMUdDQ1xzMCBtYXksIGVmZmVjdGl2ZWx5LCBtYXJrIGlubGluZSBtZXRob2RzIHdpdGgKK1wmXGYoQ1dcKihDYF9cfF9hdHRyaWJ1dGVfXHxfICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSlcKihDJ1xmUiBzbyB0aGF0IHRoZXkgZG8gbm90CithcHBlYXIgaW4gdGhlIGV4cG9ydCB0YWJsZSBvZiBhIFxzLTFEU09cczAgYW5kIGRvIG5vdCByZXF1aXJlIGEgXHMtMVBMVFxzMCBpbmRpcmVjdGlvbgord2hlbiB1c2VkIHdpdGhpbiB0aGUgXHMtMURTT1xzMC4gIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGNhbiBoYXZlIGEgZHJhbWF0aWMgZWZmZWN0CitvbiBsb2FkIGFuZCBsaW5rIHRpbWVzIG9mIGEgXHMtMURTT1xzMCBhcyBpdCBtYXNzaXZlbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUKK2R5bmFtaWMgZXhwb3J0IHRhYmxlIHdoZW4gdGhlIGxpYnJhcnkgbWFrZXMgaGVhdnkgdXNlIG9mIHRlbXBsYXRlcy4KKy5TcAorVGhlIGJlaGF2aW9yIG9mIHRoaXMgc3dpdGNoIGlzIG5vdCBxdWl0ZSB0aGUgc2FtZSBhcyBtYXJraW5nIHRoZQorbWV0aG9kcyBhcyBoaWRkZW4gZGlyZWN0bHksIGJlY2F1c2UgaXQgZG9lcyBub3QgYWZmZWN0IHN0YXRpYyB2YXJpYWJsZXMKK2xvY2FsIHRvIHRoZSBmdW5jdGlvbiBvciBjYXVzZSB0aGUgY29tcGlsZXIgdG8gZGVkdWNlIHRoYXQKK3RoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIG9ubHkgb25lIHNoYXJlZCBvYmplY3QuCisuU3AKK1lvdSBtYXkgbWFyayBhIG1ldGhvZCBhcyBoYXZpbmcgYSB2aXNpYmlsaXR5IGV4cGxpY2l0bHkgdG8gbmVnYXRlIHRoZQorZWZmZWN0IG9mIHRoZSBzd2l0Y2ggZm9yIHRoYXQgbWV0aG9kLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkbyB3YW50IHRvCitjb21wYXJlIHBvaW50ZXJzIHRvIGEgcGFydGljdWxhciBpbmxpbmUgbWV0aG9kLCB5b3UgbWlnaHQgbWFyayBpdCBhcworaGF2aW5nIGRlZmF1bHQgdmlzaWJpbGl0eS4gIE1hcmtpbmcgdGhlIGVuY2xvc2luZyBjbGFzcyB3aXRoIGV4cGxpY2l0Cit2aXNpYmlsaXR5IGhhcyBubyBlZmZlY3QuCisuU3AKK0V4cGxpY2l0bHkgaW5zdGFudGlhdGVkIGlubGluZSBtZXRob2RzIGFyZSB1bmFmZmVjdGVkIGJ5IHRoaXMgb3B0aW9uCithcyB0aGVpciBsaW5rYWdlIG1pZ2h0IG90aGVyd2lzZSBjcm9zcyBhIHNoYXJlZCBsaWJyYXJ5IGJvdW5kYXJ5LgorLklQICJcZkJcLWZ2aXNpYmlsaXR5XC1tc1wtY29tcGF0XGZSIiA0CisuSVggSXRlbSAiLWZ2aXNpYmlsaXR5LW1zLWNvbXBhdCIKK1RoaXMgZmxhZyBhdHRlbXB0cyB0byB1c2UgdmlzaWJpbGl0eSBzZXR0aW5ncyB0byBtYWtlIFxzLTFHQ0NcczAncyBcKihDKworbGlua2FnZSBtb2RlbCBjb21wYXRpYmxlIHdpdGggdGhhdCBvZiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4KKy5TcAorVGhlIGZsYWcgbWFrZXMgdGhlc2UgY2hhbmdlcyB0byBccy0xR0NDXHMwJ3MgbGlua2FnZSBtb2RlbDoKKy5SUyA0CisuSVAgIjEuIiA0CitJdCBzZXRzIHRoZSBkZWZhdWx0IHZpc2liaWxpdHkgdG8gXGYoQ1dcKihDYGhpZGRlblwqKEMnXGZSLCBsaWtlCitcJlxmQlwtZnZpc2liaWxpdHk9aGlkZGVuXGZSLgorLklQICIyLiIgNAorVHlwZXMsIGJ1dCBub3QgdGhlaXIgbWVtYmVycywgYXJlIG5vdCBoaWRkZW4gYnkgZGVmYXVsdC4KKy5JUCAiMy4iIDQKK1RoZSBPbmUgRGVmaW5pdGlvbiBSdWxlIGlzIHJlbGF4ZWQgZm9yIHR5cGVzIHdpdGhvdXQgZXhwbGljaXQKK3Zpc2liaWxpdHkgc3BlY2lmaWNhdGlvbnMgdGhhdCBhcmUgZGVmaW5lZCBpbiBtb3JlIHRoYW4gb25lCitzaGFyZWQgb2JqZWN0OiB0aG9zZSBkZWNsYXJhdGlvbnMgYXJlIHBlcm1pdHRlZCBpZiB0aGV5IGFyZQorcGVybWl0dGVkIHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHVzZWQuCisuUkUKKy5SUyA0CisuU3AKK0luIG5ldyBjb2RlIGl0IGlzIGJldHRlciB0byB1c2UgXGZCXC1mdmlzaWJpbGl0eT1oaWRkZW5cZlIgYW5kCitleHBvcnQgdGhvc2UgY2xhc3NlcyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSBleHRlcm5hbGx5IHZpc2libGUuCitVbmZvcnR1bmF0ZWx5IGl0IGlzIHBvc3NpYmxlIGZvciBjb2RlIHRvIHJlbHksIHBlcmhhcHMgYWNjaWRlbnRhbGx5LAorb24gdGhlIFZpc3VhbCBTdHVkaW8gYmVoYXZpb3IuCisuU3AKK0Ftb25nIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhlc2UgY2hhbmdlcyBhcmUgdGhhdCBzdGF0aWMgZGF0YSBtZW1iZXJzCitvZiB0aGUgc2FtZSB0eXBlIHdpdGggdGhlIHNhbWUgbmFtZSBidXQgZGVmaW5lZCBpbiBkaWZmZXJlbnQgc2hhcmVkCitvYmplY3RzIGFyZSBkaWZmZXJlbnQsIHNvIGNoYW5naW5nIG9uZSBkb2VzIG5vdCBjaGFuZ2UgdGhlIG90aGVyOworYW5kIHRoYXQgcG9pbnRlcnMgdG8gZnVuY3Rpb24gbWVtYmVycyBkZWZpbmVkIGluIGRpZmZlcmVudCBzaGFyZWQKK29iamVjdHMgbWF5IG5vdCBjb21wYXJlIGVxdWFsLiAgV2hlbiB0aGlzIGZsYWcgaXMgZ2l2ZW4sIGl0IGlzIGEKK3Zpb2xhdGlvbiBvZiB0aGUgXHMtMU9EUlxzMCB0byBkZWZpbmUgdHlwZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGRpZmZlcmVudGx5LgorLlJFCisuSVAgIlxmQlwtZm5vXC13ZWFrXGZSIiA0CisuSVggSXRlbSAiLWZuby13ZWFrIgorRG8gbm90IHVzZSB3ZWFrIHN5bWJvbCBzdXBwb3J0LCBldmVuIGlmIGl0IGlzIHByb3ZpZGVkIGJ5IHRoZSBsaW5rZXIuCitCeSBkZWZhdWx0LCBHKysgdXNlcyB3ZWFrIHN5bWJvbHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLiAgVGhpcworb3B0aW9uIGV4aXN0cyBvbmx5IGZvciB0ZXN0aW5nLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IGVuZC11c2VyczsKK2l0IHJlc3VsdHMgaW4gaW5mZXJpb3IgY29kZSBhbmQgaGFzIG5vIGJlbmVmaXRzLiAgVGhpcyBvcHRpb24gbWF5CitiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgRysrLgorLklQICJcZkJcLW5vc3RkaW5jKytcZlIiIDQKKy5JWCBJdGVtICItbm9zdGRpbmMrKyIKK0RvIG5vdCBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcyBpbiB0aGUgc3RhbmRhcmQgZGlyZWN0b3JpZXMgc3BlY2lmaWMgdG8KK1wmXCooQyssIGJ1dCBkbyBzdGlsbCBzZWFyY2ggdGhlIG90aGVyIHN0YW5kYXJkIGRpcmVjdG9yaWVzLiAgKFRoaXMgb3B0aW9uCitpcyB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIFwqKEMrIGxpYnJhcnkuKQorLlBQCitJbiBhZGRpdGlvbiwgdGhlc2Ugb3B0aW1pemF0aW9uLCB3YXJuaW5nLCBhbmQgY29kZSBnZW5lcmF0aW9uIG9wdGlvbnMKK2hhdmUgbWVhbmluZ3Mgb25seSBmb3IgXCooQysgcHJvZ3JhbXM6CisuSVAgIlxmQlwtZm5vXC1kZWZhdWx0XC1pbmxpbmVcZlIiIDQKKy5JWCBJdGVtICItZm5vLWRlZmF1bHQtaW5saW5lIgorRG8gbm90IGFzc3VtZSBcZkJpbmxpbmVcZlIgZm9yIGZ1bmN0aW9ucyBkZWZpbmVkIGluc2lkZSBhIGNsYXNzIHNjb3BlLgorICBOb3RlIHRoYXQgdGhlc2UKK2Z1bmN0aW9ucyBoYXZlIGxpbmthZ2UgbGlrZSBpbmxpbmUgZnVuY3Rpb25zOyB0aGV5IGp1c3QgYXJlbid0CitpbmxpbmVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtV2FiaVxmUiAoQywgT2JqZWN0aXZlLUMsIFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdhYmkgKEMsIE9iamVjdGl2ZS1DLCAgYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIHdoZW4gRysrIGdlbmVyYXRlcyBjb2RlIHRoYXQgaXMgcHJvYmFibHkgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUKK3ZlbmRvci1uZXV0cmFsIFwqKEMrIFxzLTFBQklcczAuICBBbHRob3VnaCBhbiBlZmZvcnQgaGFzIGJlZW4gbWFkZSB0byB3YXJuIGFib3V0CithbGwgc3VjaCBjYXNlcywgdGhlcmUgYXJlIHByb2JhYmx5IHNvbWUgY2FzZXMgdGhhdCBhcmUgbm90IHdhcm5lZCBhYm91dCwKK2V2ZW4gdGhvdWdoIEcrKyBpcyBnZW5lcmF0aW5nIGluY29tcGF0aWJsZSBjb2RlLiAgVGhlcmUgbWF5IGFsc28gYmUKK2Nhc2VzIHdoZXJlIHdhcm5pbmdzIGFyZSBlbWl0dGVkIGV2ZW4gdGhvdWdoIHRoZSBjb2RlIHRoYXQgaXMgZ2VuZXJhdGVkCitpcyBjb21wYXRpYmxlLgorLlNwCitZb3Ugc2hvdWxkIHJld3JpdGUgeW91ciBjb2RlIHRvIGF2b2lkIHRoZXNlIHdhcm5pbmdzIGlmIHlvdSBhcmUKK2NvbmNlcm5lZCBhYm91dCB0aGUgZmFjdCB0aGF0IGNvZGUgZ2VuZXJhdGVkIGJ5IEcrKyBtYXkgbm90IGJlIGJpbmFyeQorY29tcGF0aWJsZSB3aXRoIGNvZGUgZ2VuZXJhdGVkIGJ5IG90aGVyIGNvbXBpbGVycy4KKy5TcAorVGhlIGtub3duIGluY29tcGF0aWJpbGl0aWVzIGluIFxmQlwtZmFiaVwtdmVyc2lvbj0yXGZSICh0aGUgZGVmYXVsdCkgaW5jbHVkZToKKy5SUyA0CisuSVAgIlwoYnUiIDQKK0EgdGVtcGxhdGUgd2l0aCBhIG5vbi10eXBlIHRlbXBsYXRlIHBhcmFtZXRlciBvZiByZWZlcmVuY2UgdHlwZSBpcworbWFuZ2xlZCBpbmNvcnJlY3RseToKKy5TcAorLlZiIDMKK1wmICAgICAgICBleHRlcm4gaW50IE47CitcJiAgICAgICAgdGVtcGxhdGUgPGludCAmPiBzdHJ1Y3QgUyB7fTsKK1wmICAgICAgICB2b2lkIG4gKFM8Tj4pIHsyfQorLlZlCisuU3AKK1RoaXMgaXMgZml4ZWQgaW4gXGZCXC1mYWJpXC12ZXJzaW9uPTNcZlIuCisuSVAgIlwoYnUiIDQKK1wmXHMtMVNJTURcczAgdmVjdG9yIHR5cGVzIGRlY2xhcmVkIHVzaW5nIFxmKENXXCooQ2BfXHxfYXR0cmlidXRlICgodmVjdG9yX3NpemUpKVwqKEMnXGZSIGFyZQorbWFuZ2xlZCBpbiBhIG5vbi1zdGFuZGFyZCB3YXkgdGhhdCBkb2VzIG5vdCBhbGxvdyBmb3Igb3ZlcmxvYWRpbmcgb2YKK2Z1bmN0aW9ucyB0YWtpbmcgdmVjdG9ycyBvZiBkaWZmZXJlbnQgc2l6ZXMuCisuU3AKK1RoZSBtYW5nbGluZyBpcyBjaGFuZ2VkIGluIFxmQlwtZmFiaVwtdmVyc2lvbj00XGZSLgorLlJFCisuUlMgNAorLlNwCitUaGUga25vd24gaW5jb21wYXRpYmlsaXRpZXMgaW4gXGZCXC1mYWJpXC12ZXJzaW9uPTFcZlIgaW5jbHVkZToKKy5JUCAiXChidSIgNAorSW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRhaWwtcGFkZGluZyBmb3IgYml0LWZpZWxkcy4gIEcrKyBtYXkgYXR0ZW1wdCB0bworcGFjayBkYXRhIGludG8gdGhlIHNhbWUgYnl0ZSBhcyBhIGJhc2UgY2xhc3MuICBGb3IgZXhhbXBsZToKKy5TcAorLlZiIDIKK1wmICAgICAgICBzdHJ1Y3QgQSB7IHZpcnR1YWwgdm9pZCBmKCk7IGludCBmMSA6IDE7IH07CitcJiAgICAgICAgc3RydWN0IEIgOiBwdWJsaWMgQSB7IGludCBmMiA6IDE7IH07CisuVmUKKy5TcAorSW4gdGhpcyBjYXNlLCBHKysgcGxhY2VzIFxmKENXXCooQ2BCOjpmMlwqKEMnXGZSIGludG8gdGhlIHNhbWUgYnl0ZQorYXMgXGYoQ1dcKihDYEE6OmYxXCooQydcZlI7IG90aGVyIGNvbXBpbGVycyBkbyBub3QuICBZb3UgY2FuIGF2b2lkIHRoaXMgcHJvYmxlbQorYnkgZXhwbGljaXRseSBwYWRkaW5nIFxmKENXXCooQ2BBXCooQydcZlIgc28gdGhhdCBpdHMgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHRoZQorYnl0ZSBzaXplIG9uIHlvdXIgcGxhdGZvcm07IHRoYXQgY2F1c2VzIEcrKyBhbmQgb3RoZXIgY29tcGlsZXJzIHRvCitsYXkgb3V0IFxmKENXXCooQ2BCXCooQydcZlIgaWRlbnRpY2FsbHkuCisuSVAgIlwoYnUiIDQKK0luY29ycmVjdCBoYW5kbGluZyBvZiB0YWlsLXBhZGRpbmcgZm9yIHZpcnR1YWwgYmFzZXMuICBHKysgZG9lcyBub3QgdXNlCit0YWlsIHBhZGRpbmcgd2hlbiBsYXlpbmcgb3V0IHZpcnR1YWwgYmFzZXMuICBGb3IgZXhhbXBsZToKKy5TcAorLlZiIDMKK1wmICAgICAgICBzdHJ1Y3QgQSB7IHZpcnR1YWwgdm9pZCBmKCk7IGNoYXIgYzE7IH07CitcJiAgICAgICAgc3RydWN0IEIgeyBCKCk7IGNoYXIgYzI7IH07CitcJiAgICAgICAgc3RydWN0IEMgOiBwdWJsaWMgQSwgcHVibGljIHZpcnR1YWwgQiB7fTsKKy5WZQorLlNwCitJbiB0aGlzIGNhc2UsIEcrKyBkb2VzIG5vdCBwbGFjZSBcZihDV1wqKENgQlwqKEMnXGZSIGludG8gdGhlIHRhaWwtcGFkZGluZyBmb3IKK1wmXGYoQ1dcKihDYEFcKihDJ1xmUjsgb3RoZXIgY29tcGlsZXJzIGRvLiAgWW91IGNhbiBhdm9pZCB0aGlzIHByb2JsZW0gYnkKK2V4cGxpY2l0bHkgcGFkZGluZyBcZihDV1wqKENgQVwqKEMnXGZSIHNvIHRoYXQgaXRzIHNpemUgaXMgYSBtdWx0aXBsZSBvZiBpdHMKK2FsaWdubWVudCAoaWdub3JpbmcgdmlydHVhbCBiYXNlIGNsYXNzZXMpOyB0aGF0IGNhdXNlcyBHKysgYW5kIG90aGVyCitjb21waWxlcnMgdG8gbGF5IG91dCBcZihDV1wqKENgQ1wqKEMnXGZSIGlkZW50aWNhbGx5LgorLklQICJcKGJ1IiA0CitJbmNvcnJlY3QgaGFuZGxpbmcgb2YgYml0LWZpZWxkcyB3aXRoIGRlY2xhcmVkIHdpZHRocyBncmVhdGVyIHRoYW4gdGhhdAorb2YgdGhlaXIgdW5kZXJseWluZyB0eXBlcywgd2hlbiB0aGUgYml0LWZpZWxkcyBhcHBlYXIgaW4gYSB1bmlvbi4gIEZvcgorZXhhbXBsZToKKy5TcAorLlZiIDEKK1wmICAgICAgICB1bmlvbiBVIHsgaW50IGkgOiA0MDk2OyB9OworLlZlCisuU3AKK0Fzc3VtaW5nIHRoYXQgYW4gXGYoQ1dcKihDYGludFwqKEMnXGZSIGRvZXMgbm90IGhhdmUgNDA5NiBiaXRzLCBHKysgbWFrZXMgdGhlCit1bmlvbiB0b28gc21hbGwgYnkgdGhlIG51bWJlciBvZiBiaXRzIGluIGFuIFxmKENXXCooQ2BpbnRcKihDJ1xmUi4KKy5JUCAiXChidSIgNAorRW1wdHkgY2xhc3NlcyBjYW4gYmUgcGxhY2VkIGF0IGluY29ycmVjdCBvZmZzZXRzLiAgRm9yIGV4YW1wbGU6CisuU3AKKy5WYiAxCitcJiAgICAgICAgc3RydWN0IEEge307CitcJiAgICAgICAgCitcJiAgICAgICAgc3RydWN0IEIgeworXCYgICAgICAgICAgQSBhOworXCYgICAgICAgICAgdmlydHVhbCB2b2lkIGYgKCk7CitcJiAgICAgICAgfTsKK1wmICAgICAgICAKK1wmICAgICAgICBzdHJ1Y3QgQyA6IHB1YmxpYyBCLCBwdWJsaWMgQSB7fTsKKy5WZQorLlNwCitHKysgcGxhY2VzIHRoZSBcZihDV1wqKENgQVwqKEMnXGZSIGJhc2UgY2xhc3Mgb2YgXGYoQ1dcKihDYENcKihDJ1xmUiBhdCBhIG5vbnplcm8gb2Zmc2V0OworaXQgc2hvdWxkIGJlIHBsYWNlZCBhdCBvZmZzZXQgemVyby4gIEcrKyBtaXN0YWtlbmx5IGJlbGlldmVzIHRoYXQgdGhlCitcJlxmKENXXCooQ2BBXCooQydcZlIgZGF0YSBtZW1iZXIgb2YgXGYoQ1dcKihDYEJcKihDJ1xmUiBpcyBhbHJlYWR5IGF0IG9mZnNldCB6ZXJvLgorLklQICJcKGJ1IiA0CitOYW1lcyBvZiB0ZW1wbGF0ZSBmdW5jdGlvbnMgd2hvc2UgdHlwZXMgaW52b2x2ZSBcZihDV1wqKENgdHlwZW5hbWVcKihDJ1xmUiBvcgordGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycyBjYW4gYmUgbWFuZ2xlZCBpbmNvcnJlY3RseS4KKy5TcAorLlZiIDIKK1wmICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUT4KK1wmICAgICAgICB2b2lkIGYodHlwZW5hbWUgUTo6WCkge30KK1wmICAgICAgICAKK1wmICAgICAgICB0ZW1wbGF0ZSA8dGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBRPgorXCYgICAgICAgIHZvaWQgZih0eXBlbmFtZSBRPGludD46OlgpIHt9CisuVmUKKy5TcAorSW5zdGFudGlhdGlvbnMgb2YgdGhlc2UgdGVtcGxhdGVzIG1heSBiZSBtYW5nbGVkIGluY29ycmVjdGx5LgorLlJFCisuUlMgNAorLlNwCitJdCBhbHNvIHdhcm5zIGFib3V0IHBzQUJJLXJlbGF0ZWQgY2hhbmdlcy4gIFRoZSBrbm93biBwc0FCSSBjaGFuZ2VzIGF0IHRoaXMKK3BvaW50IGluY2x1ZGU6CisuSVAgIlwoYnUiIDQKK0ZvciBTeXNWL3g4NlwtNjQsIHVuaW9ucyB3aXRoIFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSIG1lbWJlcnMgYXJlIAorcGFzc2VkIGluIG1lbW9yeSBhcyBzcGVjaWZpZWQgaW4gcHNBQkkuICBGb3IgZXhhbXBsZToKKy5TcAorLlZiIDQKK1wmICAgICAgICB1bmlvbiBVIHsKK1wmICAgICAgICAgIGxvbmcgZG91YmxlIGxkOworXCYgICAgICAgICAgaW50IGk7CitcJiAgICAgICAgfTsKKy5WZQorLlNwCitcJlxmKENXXCooQ2B1bmlvbiBVXCooQydcZlIgaXMgYWx3YXlzIHBhc3NlZCBpbiBtZW1vcnkuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1XY3RvclwtZHRvclwtcHJpdmFjeVxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV2N0b3ItZHRvci1wcml2YWN5ICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIHdoZW4gYSBjbGFzcyBzZWVtcyB1bnVzYWJsZSBiZWNhdXNlIGFsbCB0aGUgY29uc3RydWN0b3JzIG9yCitkZXN0cnVjdG9ycyBpbiB0aGF0IGNsYXNzIGFyZSBwcml2YXRlLCBhbmQgaXQgaGFzIG5laXRoZXIgZnJpZW5kcyBub3IKK3B1YmxpYyBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucy4gIEFsc28gd2FybiBpZiB0aGVyZSBhcmUgbm8gbm9uLXByaXZhdGUKK21ldGhvZHMsIGFuZCB0aGVyZSdzIGF0IGxlYXN0IG9uZSBwcml2YXRlIG1lbWJlciBmdW5jdGlvbiB0aGF0IGlzbid0CithIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3IuCisuSVAgIlxmQlwtV2RlbGV0ZVwtbm9uXC12aXJ0dWFsXC1kdG9yXGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XZGVsZXRlLW5vbi12aXJ0dWFsLWR0b3IgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBcZkJkZWxldGVcZlIgaXMgdXNlZCB0byBkZXN0cm95IGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdAoraGFzIHZpcnR1YWwgZnVuY3Rpb25zIGFuZCBub24tdmlydHVhbCBkZXN0cnVjdG9yLiBJdCBpcyB1bnNhZmUgdG8gZGVsZXRlCithbiBpbnN0YW5jZSBvZiBhIGRlcml2ZWQgY2xhc3MgdGhyb3VnaCBhIHBvaW50ZXIgdG8gYSBiYXNlIGNsYXNzIGlmIHRoZQorYmFzZSBjbGFzcyBkb2VzIG5vdCBoYXZlIGEgdmlydHVhbCBkZXN0cnVjdG9yLiAgVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQKK2J5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XbGl0ZXJhbFwtc3VmZml4XGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XbGl0ZXJhbC1zdWZmaXggKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBhIHN0cmluZyBvciBjaGFyYWN0ZXIgbGl0ZXJhbCBpcyBmb2xsb3dlZCBieSBhIHVkLXN1ZmZpeCB3aGljaCBkb2VzCitub3QgYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlLiAgQXMgYSBjb25mb3JtaW5nIGV4dGVuc2lvbiwgXHMtMUdDQ1xzMCB0cmVhdHMgc3VjaAorc3VmZml4ZXMgYXMgc2VwYXJhdGUgcHJlcHJvY2Vzc2luZyB0b2tlbnMgaW4gb3JkZXIgdG8gbWFpbnRhaW4gYmFja3dhcmRzCitjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IHVzZXMgZm9ybWF0dGluZyBtYWNyb3MgZnJvbSBcZihDV1wqKENgPGludHR5cGVzLmg+XCooQydcZlIuCitGb3IgZXhhbXBsZToKKy5TcAorLlZiIDMKK1wmICAgICAgICAjZGVmaW5lIF9cfF9TVERDX0ZPUk1BVF9NQUNST1MKK1wmICAgICAgICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KK1wmICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KK1wmICAgICAgICAKK1wmICAgICAgICBpbnQgbWFpbigpIHsKK1wmICAgICAgICAgIGludDY0X3QgaTY0ID0gMTIzOworXCYgICAgICAgICAgcHJpbnRmKCJNeSBpbnQ2NDogJSJQUklkNjQiXGVuIiwgaTY0KTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorSW4gdGhpcyBjYXNlLCBcZihDV1wqKENgUFJJZDY0XCooQydcZlIgaXMgdHJlYXRlZCBhcyBhIHNlcGFyYXRlIHByZXByb2Nlc3NpbmcgdG9rZW4uCisuU3AKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtV25hcnJvd2luZ1xmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV25hcnJvd2luZyAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiB3aGVuIGEgbmFycm93aW5nIGNvbnZlcnNpb24gcHJvaGliaXRlZCBieSBcKihDKzExIG9jY3VycyB3aXRoaW4KK1wmXGZCeyB9XGZSLCBlLmcuCisuU3AKKy5WYiAxCitcJiAgICAgICAgaW50IGkgPSB7IDIuMiB9OyAvLyBlcnJvcjogbmFycm93aW5nIGZyb20gZG91YmxlIHRvIGludAorLlZlCisuU3AKK1RoaXMgZmxhZyBpcyBpbmNsdWRlZCBpbiBcZkJcLVdhbGxcZlIgYW5kIFxmQlwtV2MrKzExXC1jb21wYXRcZlIuCisuU3AKK1dpdGggXGZCXC1zdGQ9YysrMTFcZlIsIFxmQlwtV25vXC1uYXJyb3dpbmdcZlIgc3VwcHJlc3NlcyB0aGUgZGlhZ25vc3RpYworcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBtZWFuaW5nCitvZiB3ZWxsLWZvcm1lZCBjb2RlOyBuYXJyb3dpbmcgY29udmVyc2lvbnMgYXJlIHN0aWxsIGNvbnNpZGVyZWQKK2lsbC1mb3JtZWQgaW4gXHMtMVNGSU5BRVxzMCBjb250ZXh0LgorLklQICJcZkJcLVdub2V4Y2VwdFxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV25vZXhjZXB0ICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIHdoZW4gYSBub2V4Y2VwdC1leHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSBiZWNhdXNlIG9mIGEgY2FsbAordG8gYSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IGhhdmUgYSBub24tdGhyb3dpbmcgZXhjZXB0aW9uCitzcGVjaWZpY2F0aW9uIChpLmUuIFxmQlxmKEJJdGhyb3coKVxmQlxmUiBvciBcZkJub2V4Y2VwdFxmUikgYnV0IGlzIGtub3duIGJ5Cit0aGUgY29tcGlsZXIgdG8gbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uLgorLklQICJcZkJcLVdub25cLXZpcnR1YWxcLWR0b3JcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdub24tdmlydHVhbC1kdG9yICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIHdoZW4gYSBjbGFzcyBoYXMgdmlydHVhbCBmdW5jdGlvbnMgYW5kIGFuIGFjY2Vzc2libGUgbm9uLXZpcnR1YWwKK2Rlc3RydWN0b3IsIGluIHdoaWNoIGNhc2UgaXQgaXMgcG9zc2libGUgYnV0IHVuc2FmZSB0byBkZWxldGUKK2FuIGluc3RhbmNlIG9mIGEgZGVyaXZlZCBjbGFzcyB0aHJvdWdoIGEgcG9pbnRlciB0byB0aGUgYmFzZSBjbGFzcy4KK1RoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgaWYgXGZCXC1XZWZmYysrXGZSIGlzIHNwZWNpZmllZC4KKy5JUCAiXGZCXC1XcmVvcmRlclxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV3Jlb3JkZXIgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiB0aGUgb3JkZXIgb2YgbWVtYmVyIGluaXRpYWxpemVycyBnaXZlbiBpbiB0aGUgY29kZSBkb2VzIG5vdAorbWF0Y2ggdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgbXVzdCBiZSBleGVjdXRlZC4gIEZvciBpbnN0YW5jZToKKy5TcAorLlZiIDUKK1wmICAgICAgICBzdHJ1Y3QgQSB7CitcJiAgICAgICAgICBpbnQgaTsKK1wmICAgICAgICAgIGludCBqOworXCYgICAgICAgICAgQSgpOiBqICgwKSwgaSAoMSkgeyB9CitcJiAgICAgICAgfTsKKy5WZQorLlNwCitUaGUgY29tcGlsZXIgcmVhcnJhbmdlcyB0aGUgbWVtYmVyIGluaXRpYWxpemVycyBmb3IgXGZCaVxmUgorYW5kIFxmQmpcZlIgdG8gbWF0Y2ggdGhlIGRlY2xhcmF0aW9uIG9yZGVyIG9mIHRoZSBtZW1iZXJzLCBlbWl0dGluZworYSB3YXJuaW5nIHRvIHRoYXQgZWZmZWN0LiAgVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLWZleHRcLW51bWVyaWNcLWxpdGVyYWxzXGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK0FjY2VwdCBpbWFnaW5hcnksIGZpeGVkLXBvaW50LCBvciBtYWNoaW5lLWRlZmluZWQKK2xpdGVyYWwgbnVtYmVyIHN1ZmZpeGVzIGFzIFxzLTFHTlVcczAgZXh0ZW5zaW9ucy4KK1doZW4gdGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZiB0aGVzZSBzdWZmaXhlcyBhcmUgdHJlYXRlZAorYXMgXCooQysxMSB1c2VyLWRlZmluZWQgbGl0ZXJhbCBudW1lcmljIHN1ZmZpeGVzLgorVGhpcyBpcyBvbiBieSBkZWZhdWx0IGZvciBhbGwgcHJlXC1cKihDKzExIGRpYWxlY3RzIGFuZCBhbGwgXHMtMUdOVVxzMCBkaWFsZWN0czoKK1wmXGZCXC1zdGQ9YysrOThcZlIsIFxmQlwtc3RkPWdudSsrOThcZlIsIFxmQlwtc3RkPWdudSsrMTFcZlIsCitcJlxmQlwtc3RkPWdudSsrMXlcZlIuCitUaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdAorZm9yIFxzLTFJU09cczAgXCooQysxMSBvbndhcmRzIChcZkJcLXN0ZD1jKysxMVxmUiwgLi4uKS4KKy5QUAorVGhlIGZvbGxvd2luZyBcZkJcLVcuLi5cZlIgb3B0aW9ucyBhcmUgbm90IGFmZmVjdGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XZWZmYysrXGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XZWZmYysrICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIGFib3V0IHZpb2xhdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBzdHlsZSBndWlkZWxpbmVzIGZyb20gU2NvdHQgTWV5ZXJzJworXCZcZklFZmZlY3RpdmUgXCooQyssIFNlY29uZCBFZGl0aW9uXGZSIGJvb2s6CisuUlMgNAorLklQICJcKGJ1IiA0CitJdGVtIDExOiAgRGVmaW5lIGEgY29weSBjb25zdHJ1Y3RvciBhbmQgYW4gYXNzaWdubWVudCBvcGVyYXRvciBmb3IgY2xhc3Nlcword2l0aCBkeW5hbWljYWxseS1hbGxvY2F0ZWQgbWVtb3J5LgorLklQICJcKGJ1IiA0CitJdGVtIDEyOiAgUHJlZmVyIGluaXRpYWxpemF0aW9uIHRvIGFzc2lnbm1lbnQgaW4gY29uc3RydWN0b3JzLgorLklQICJcKGJ1IiA0CitJdGVtIDE0OiAgTWFrZSBkZXN0cnVjdG9ycyB2aXJ0dWFsIGluIGJhc2UgY2xhc3Nlcy4KKy5JUCAiXChidSIgNAorSXRlbSAxNTogIEhhdmUgXGYoQ1dcKihDYG9wZXJhdG9yPVwqKEMnXGZSIHJldHVybiBhIHJlZmVyZW5jZSB0byBcZihDVyp0aGlzXGZSLgorLklQICJcKGJ1IiA0CitJdGVtIDIzOiAgRG9uJ3QgdHJ5IHRvIHJldHVybiBhIHJlZmVyZW5jZSB3aGVuIHlvdSBtdXN0IHJldHVybiBhbiBvYmplY3QuCisuUkUKKy5SUyA0CisuU3AKK0Fsc28gd2FybiBhYm91dCB2aW9sYXRpb25zIG9mIHRoZSBmb2xsb3dpbmcgc3R5bGUgZ3VpZGVsaW5lcyBmcm9tCitTY290dCBNZXllcnMnIFxmSU1vcmUgRWZmZWN0aXZlIFwqKEMrXGZSIGJvb2s6CisuSVAgIlwoYnUiIDQKK0l0ZW0gNjogIERpc3Rpbmd1aXNoIGJldHdlZW4gcHJlZml4IGFuZCBwb3N0Zml4IGZvcm1zIG9mIGluY3JlbWVudCBhbmQKK2RlY3JlbWVudCBvcGVyYXRvcnMuCisuSVAgIlwoYnUiIDQKK0l0ZW0gNzogIE5ldmVyIG92ZXJsb2FkIFxmKENXXCooQ2AmJlwqKEMnXGZSLCBcZihDV1wqKENgfHxcKihDJ1xmUiwgb3IgXGYoQ1dcKihDYCxcKihDJ1xmUi4KKy5SRQorLlJTIDQKKy5TcAorV2hlbiBzZWxlY3RpbmcgdGhpcyBvcHRpb24sIGJlIGF3YXJlIHRoYXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkKK2hlYWRlcnMgZG8gbm90IG9iZXkgYWxsIG9mIHRoZXNlIGd1aWRlbGluZXM7IHVzZSBcZkJncmVwIFwtdlxmUgordG8gZmlsdGVyIG91dCB0aG9zZSB3YXJuaW5ncy4KKy5SRQorLklQICJcZkJcLVdzdHJpY3RcLW51bGxcLXNlbnRpbmVsXGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xc3RyaWN0LW51bGwtc2VudGluZWwgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gYWJvdXQgdGhlIHVzZSBvZiBhbiB1bmNhc3RlZCBcZihDV1wqKENgTlVMTFwqKEMnXGZSIGFzIHNlbnRpbmVsLiAgV2hlbgorY29tcGlsaW5nIG9ubHkgd2l0aCBccy0xR0NDXHMwIHRoaXMgaXMgYSB2YWxpZCBzZW50aW5lbCwgYXMgXGYoQ1dcKihDYE5VTExcKihDJ1xmUiBpcyBkZWZpbmVkCit0byBcZihDV1wqKENgX1x8X251bGxcKihDJ1xmUi4gIEFsdGhvdWdoIGl0IGlzIGEgbnVsbCBwb2ludGVyIGNvbnN0YW50IHJhdGhlciB0aGFuIGEKK251bGwgcG9pbnRlciwgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvZiB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlci4KK0J1dCB0aGlzIHVzZSBpcyBub3QgcG9ydGFibGUgYWNyb3NzIGRpZmZlcmVudCBjb21waWxlcnMuCisuSVAgIlxmQlwtV25vXC1ub25cLXRlbXBsYXRlXC1mcmllbmRcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVduby1ub24tdGVtcGxhdGUtZnJpZW5kICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitEaXNhYmxlIHdhcm5pbmdzIHdoZW4gbm9uLXRlbXBsYXRpemVkIGZyaWVuZCBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkCit3aXRoaW4gYSB0ZW1wbGF0ZS4gIFNpbmNlIHRoZSBhZHZlbnQgb2YgZXhwbGljaXQgdGVtcGxhdGUgc3BlY2lmaWNhdGlvbgorc3VwcG9ydCBpbiBHKyssIGlmIHRoZSBuYW1lIG9mIHRoZSBmcmllbmQgaXMgYW4gdW5xdWFsaWZpZWQtaWQgKGkuZS4sCitcJlxmQmZyaWVuZCBmb28oaW50KVxmUiksIHRoZSBcKihDKyBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGRlbWFuZHMgdGhhdCB0aGUKK2ZyaWVuZCBkZWNsYXJlIG9yIGRlZmluZSBhbiBvcmRpbmFyeSwgbm9udGVtcGxhdGUgZnVuY3Rpb24uICAoU2VjdGlvbgorMTQuNS4zKS4gIEJlZm9yZSBHKysgaW1wbGVtZW50ZWQgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiwgdW5xdWFsaWZpZWQtaWRzCitjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIHBhcnRpY3VsYXIgc3BlY2lhbGl6YXRpb24gb2YgYSB0ZW1wbGF0aXplZAorZnVuY3Rpb24uICBCZWNhdXNlIHRoaXMgbm9uLWNvbmZvcm1pbmcgYmVoYXZpb3IgaXMgbm8gbG9uZ2VyIHRoZSBkZWZhdWx0CitiZWhhdmlvciBmb3IgRysrLCBcZkJcLVdub25cLXRlbXBsYXRlXC1mcmllbmRcZlIgYWxsb3dzIHRoZSBjb21waWxlciB0bworY2hlY2sgZXhpc3RpbmcgY29kZSBmb3IgcG90ZW50aWFsIHRyb3VibGUgc3BvdHMgYW5kIGlzIG9uIGJ5IGRlZmF1bHQuCitUaGlzIG5ldyBjb21waWxlciBiZWhhdmlvciBjYW4gYmUgdHVybmVkIG9mZiB3aXRoCitcJlxmQlwtV25vXC1ub25cLXRlbXBsYXRlXC1mcmllbmRcZlIsIHdoaWNoIGtlZXBzIHRoZSBjb25mb3JtYW50IGNvbXBpbGVyIGNvZGUKK2J1dCBkaXNhYmxlcyB0aGUgaGVscGZ1bCB3YXJuaW5nLgorLklQICJcZkJcLVdvbGRcLXN0eWxlXC1jYXN0XGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xb2xkLXN0eWxlLWNhc3QgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gaWYgYW4gb2xkLXN0eWxlIChDXC1zdHlsZSkgY2FzdCB0byBhIG5vbi12b2lkIHR5cGUgaXMgdXNlZCB3aXRoaW4KK2EgXCooQysgcHJvZ3JhbS4gIFRoZSBuZXctc3R5bGUgY2FzdHMgKFxmQmR5bmFtaWNfY2FzdFxmUiwKK1wmXGZCc3RhdGljX2Nhc3RcZlIsIFxmQnJlaW50ZXJwcmV0X2Nhc3RcZlIsIGFuZCBcZkJjb25zdF9jYXN0XGZSKSBhcmUKK2xlc3MgdnVsbmVyYWJsZSB0byB1bmludGVuZGVkIGVmZmVjdHMgYW5kIG11Y2ggZWFzaWVyIHRvIHNlYXJjaCBmb3IuCisuSVAgIlxmQlwtV292ZXJsb2FkZWRcLXZpcnR1YWxcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdvdmVybG9hZGVkLXZpcnR1YWwgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGhpZGVzIHZpcnR1YWwgZnVuY3Rpb25zIGZyb20gYQorYmFzZSBjbGFzcy4gIEZvciBleGFtcGxlLCBpbjoKKy5TcAorLlZiIDMKK1wmICAgICAgICBzdHJ1Y3QgQSB7CitcJiAgICAgICAgICB2aXJ0dWFsIHZvaWQgZigpOworXCYgICAgICAgIH07CitcJiAgICAgICAgCitcJiAgICAgICAgc3RydWN0IEI6IHB1YmxpYyBBIHsKK1wmICAgICAgICAgIHZvaWQgZihpbnQpOworXCYgICAgICAgIH07CisuVmUKKy5TcAordGhlIFxmKENXXCooQ2BBXCooQydcZlIgY2xhc3MgdmVyc2lvbiBvZiBcZihDV1wqKENgZlwqKEMnXGZSIGlzIGhpZGRlbiBpbiBcZihDV1wqKENgQlwqKEMnXGZSLCBhbmQgY29kZQorbGlrZToKKy5TcAorLlZiIDIKK1wmICAgICAgICBCKiBiOworXCYgICAgICAgIGJcLT5mKCk7CisuVmUKKy5TcAorZmFpbHMgdG8gY29tcGlsZS4KKy5JUCAiXGZCXC1Xbm9cLXBtZlwtY29udmVyc2lvbnNcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVduby1wbWYtY29udmVyc2lvbnMgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK0Rpc2FibGUgdGhlIGRpYWdub3N0aWMgZm9yIGNvbnZlcnRpbmcgYSBib3VuZCBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbgordG8gYSBwbGFpbiBwb2ludGVyLgorLklQICJcZkJcLVdzaWduXC1wcm9tb1xmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV3NpZ24tcHJvbW8gKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBvdmVybG9hZCByZXNvbHV0aW9uIGNob29zZXMgYSBwcm9tb3Rpb24gZnJvbSB1bnNpZ25lZCBvcgorZW51bWVyYXRlZCB0eXBlIHRvIGEgc2lnbmVkIHR5cGUsIG92ZXIgYSBjb252ZXJzaW9uIHRvIGFuIHVuc2lnbmVkIHR5cGUgb2YKK3RoZSBzYW1lIHNpemUuICBQcmV2aW91cyB2ZXJzaW9ucyBvZiBHKysgdHJpZWQgdG8gcHJlc2VydmUKK3Vuc2lnbmVkbmVzcywgYnV0IHRoZSBzdGFuZGFyZCBtYW5kYXRlcyB0aGUgY3VycmVudCBiZWhhdmlvci4KKy5TUyAiT3B0aW9ucyBDb250cm9sbGluZyBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBEaWFsZWN0cyIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIENvbnRyb2xsaW5nIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtIERpYWxlY3RzIgorKFxzLTFOT1RFOlxzMCBUaGlzIG1hbnVhbCBkb2VzIG5vdCBkZXNjcmliZSB0aGUgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysKK2xhbmd1YWdlcyB0aGVtc2VsdmVzLgorLlBQCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0aGF0IGFyZSBvbmx5IG1lYW5pbmdmdWwKK2ZvciBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBwcm9ncmFtcy4gIFlvdSBjYW4gYWxzbyB1c2UgbW9zdCBvZgordGhlIGxhbmd1YWdlLWluZGVwZW5kZW50IFxzLTFHTlVcczAgY29tcGlsZXIgb3B0aW9ucy4KK0ZvciBleGFtcGxlLCB5b3UgbWlnaHQgY29tcGlsZSBhIGZpbGUgXGYoQ1dcKihDYHNvbWVfY2xhc3MubVwqKEMnXGZSIGxpa2UgdGhpczoKKy5QUAorLlZiIDEKK1wmICAgICAgICBnY2MgXC1nIFwtZmdudVwtcnVudGltZSBcLU8gXC1jIHNvbWVfY2xhc3MubQorLlZlCisuUFAKK0luIHRoaXMgZXhhbXBsZSwgXGZCXC1mZ251XC1ydW50aW1lXGZSIGlzIGFuIG9wdGlvbiBtZWFudCBvbmx5IGZvcgorT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgcHJvZ3JhbXM7IHlvdSBjYW4gdXNlIHRoZSBvdGhlciBvcHRpb25zIHdpdGgKK2FueSBsYW5ndWFnZSBzdXBwb3J0ZWQgYnkgXHMtMUdDQ1xzMC4KKy5QUAorTm90ZSB0aGF0IHNpbmNlIE9iamVjdGl2ZS1DIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgQyBsYW5ndWFnZSwgT2JqZWN0aXZlLUMKK2NvbXBpbGF0aW9ucyBtYXkgYWxzbyB1c2Ugb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgQyBmcm9udC1lbmQgKGUuZy4sCitcJlxmQlwtV3RyYWRpdGlvbmFsXGZSKS4gIFNpbWlsYXJseSwgT2JqZWN0aXZlXC1cKihDKyBjb21waWxhdGlvbnMgbWF5IHVzZQorXCZcKihDK1wtc3BlY2lmaWMgb3B0aW9ucyAoZS5nLiwgXGZCXC1XYWJpXGZSKS4KKy5QUAorSGVyZSBpcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IGFyZSBcZklvbmx5XGZSIGZvciBjb21waWxpbmcgT2JqZWN0aXZlLUMKK2FuZCBPYmplY3RpdmVcLVwqKEMrIHByb2dyYW1zOgorLklQICJcZkJcLWZjb25zdGFudFwtc3RyaW5nXC1jbGFzcz1cZlJcZkljbGFzcy1uYW1lXGZSIiA0CisuSVggSXRlbSAiLWZjb25zdGFudC1zdHJpbmctY2xhc3M9Y2xhc3MtbmFtZSIKK1VzZSBcZkljbGFzcy1uYW1lXGZSIGFzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0byBpbnN0YW50aWF0ZSBmb3IgZWFjaAorbGl0ZXJhbCBzdHJpbmcgc3BlY2lmaWVkIHdpdGggdGhlIHN5bnRheCBcZihDV1wqKENgQCIuLi4iXCooQydcZlIuICBUaGUgZGVmYXVsdAorY2xhc3MgbmFtZSBpcyBcZihDV1wqKENgTlhDb25zdGFudFN0cmluZ1wqKEMnXGZSIGlmIHRoZSBccy0xR05VXHMwIHJ1bnRpbWUgaXMgYmVpbmcgdXNlZCwgYW5kCitcJlxmKENXXCooQ2BOU0NvbnN0YW50U3RyaW5nXCooQydcZlIgaWYgdGhlIE5lWFQgcnVudGltZSBpcyBiZWluZyB1c2VkIChzZWUgYmVsb3cpLiAgVGhlCitcJlxmQlwtZmNvbnN0YW50XC1jZnN0cmluZ3NcZlIgb3B0aW9uLCBpZiBhbHNvIHByZXNlbnQsIG92ZXJyaWRlcyB0aGUKK1wmXGZCXC1mY29uc3RhbnRcLXN0cmluZ1wtY2xhc3NcZlIgc2V0dGluZyBhbmQgY2F1c2UgXGYoQ1dcKihDYEAiLi4uIlwqKEMnXGZSIGxpdGVyYWxzCit0byBiZSBsYWlkIG91dCBhcyBjb25zdGFudCBDb3JlRm91bmRhdGlvbiBzdHJpbmdzLgorLklQICJcZkJcLWZnbnVcLXJ1bnRpbWVcZlIiIDQKKy5JWCBJdGVtICItZmdudS1ydW50aW1lIgorR2VuZXJhdGUgb2JqZWN0IGNvZGUgY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZCBccy0xR05VXHMwIE9iamVjdGl2ZS1DCitydW50aW1lLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbW9zdCB0eXBlcyBvZiBzeXN0ZW1zLgorLklQICJcZkJcLWZuZXh0XC1ydW50aW1lXGZSIiA0CisuSVggSXRlbSAiLWZuZXh0LXJ1bnRpbWUiCitHZW5lcmF0ZSBvdXRwdXQgY29tcGF0aWJsZSB3aXRoIHRoZSBOZVhUIHJ1bnRpbWUuICBUaGlzIGlzIHRoZSBkZWZhdWx0Citmb3IgTmVYVC1iYXNlZCBzeXN0ZW1zLCBpbmNsdWRpbmcgRGFyd2luIGFuZCBNYWMgXHMtMU9TXHMwIFguICBUaGUgbWFjcm8KK1wmXGYoQ1dcKihDYF9cfF9ORVhUX1JVTlRJTUVfXHxfXCooQydcZlIgaXMgcHJlZGVmaW5lZCBpZiAoYW5kIG9ubHkgaWYpIHRoaXMgb3B0aW9uIGlzCit1c2VkLgorLklQICJcZkJcLWZub1wtbmlsXC1yZWNlaXZlcnNcZlIiIDQKKy5JWCBJdGVtICItZm5vLW5pbC1yZWNlaXZlcnMiCitBc3N1bWUgdGhhdCBhbGwgT2JqZWN0aXZlLUMgbWVzc2FnZSBkaXNwYXRjaGVzIChcZihDV1wqKENgW3JlY2VpdmVyCittZXNzYWdlOmFyZ11cKihDJ1xmUikgaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0IGVuc3VyZSB0aGF0IHRoZSByZWNlaXZlciBpcworbm90IFxmKENXXCooQ2BuaWxcKihDJ1xmUi4gIFRoaXMgYWxsb3dzIGZvciBtb3JlIGVmZmljaWVudCBlbnRyeSBwb2ludHMgaW4gdGhlCitydW50aW1lIHRvIGJlIHVzZWQuICBUaGlzIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoCit0aGUgTmVYVCBydW50aW1lIGFuZCBccy0xQUJJXHMwIHZlcnNpb24gMCBvciAxLgorLklQICJcZkJcLWZvYmpjXC1hYmlcLXZlcnNpb249XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mb2JqYy1hYmktdmVyc2lvbj1uIgorVXNlIHZlcnNpb24gXGZJblxmUiBvZiB0aGUgT2JqZWN0aXZlLUMgXHMtMUFCSVxzMCBmb3IgdGhlIHNlbGVjdGVkIHJ1bnRpbWUuCitUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgZm9yIHRoZSBOZVhUIHJ1bnRpbWUuICBJbiB0aGF0CitjYXNlLCBWZXJzaW9uIDAgaXMgdGhlIHRyYWRpdGlvbmFsICgzMlwtYml0KSBccy0xQUJJXHMwIHdpdGhvdXQgc3VwcG9ydCBmb3IKK3Byb3BlcnRpZXMgYW5kIG90aGVyIE9iamVjdGl2ZS1DIDIuMCBhZGRpdGlvbnMuICBWZXJzaW9uIDEgaXMgdGhlCit0cmFkaXRpb25hbCAoMzJcLWJpdCkgXHMtMUFCSVxzMCB3aXRoIHN1cHBvcnQgZm9yIHByb3BlcnRpZXMgYW5kIG90aGVyCitPYmplY3RpdmUtQyAyLjAgYWRkaXRpb25zLiAgVmVyc2lvbiAyIGlzIHRoZSBtb2Rlcm4gKDY0XC1iaXQpIFxzLTFBQklcczAuICBJZgorbm90aGluZyBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIFZlcnNpb24gMCBvbiAzMlwtYml0IHRhcmdldAorbWFjaGluZXMsIGFuZCBWZXJzaW9uIDIgb24gNjRcLWJpdCB0YXJnZXQgbWFjaGluZXMuCisuSVAgIlxmQlwtZm9iamNcLWNhbGxcLWN4eFwtY2R0b3JzXGZSIiA0CisuSVggSXRlbSAiLWZvYmpjLWNhbGwtY3h4LWNkdG9ycyIKK0ZvciBlYWNoIE9iamVjdGl2ZS1DIGNsYXNzLCBjaGVjayBpZiBhbnkgb2YgaXRzIGluc3RhbmNlIHZhcmlhYmxlcyBpcyBhCitcJlwqKEMrIG9iamVjdCB3aXRoIGEgbm9uLXRyaXZpYWwgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gIElmIHNvLCBzeW50aGVzaXplIGEKK3NwZWNpYWwgXGYoQ1dcKihDYFwtIChpZCkgLmN4eF9jb25zdHJ1Y3RcKihDJ1xmUiBpbnN0YW5jZSBtZXRob2Qgd2hpY2ggcnVucworbm9uLXRyaXZpYWwgZGVmYXVsdCBjb25zdHJ1Y3RvcnMgb24gYW55IHN1Y2ggaW5zdGFuY2UgdmFyaWFibGVzLCBpbiBvcmRlciwKK2FuZCB0aGVuIHJldHVybiBcZihDV1wqKENgc2VsZlwqKEMnXGZSLiAgU2ltaWxhcmx5LCBjaGVjayBpZiBhbnkgaW5zdGFuY2UgdmFyaWFibGUKK2lzIGEgXCooQysgb2JqZWN0IHdpdGggYSBub24tdHJpdmlhbCBkZXN0cnVjdG9yLCBhbmQgaWYgc28sIHN5bnRoZXNpemUgYQorc3BlY2lhbCBcZihDV1wqKENgXC0gKHZvaWQpIC5jeHhfZGVzdHJ1Y3RcKihDJ1xmUiBtZXRob2Qgd2hpY2ggcnVucworYWxsIHN1Y2ggZGVmYXVsdCBkZXN0cnVjdG9ycywgaW4gcmV2ZXJzZSBvcmRlci4KKy5TcAorVGhlIFxmKENXXCooQ2BcLSAoaWQpIC5jeHhfY29uc3RydWN0XCooQydcZlIgYW5kIFxmKENXXCooQ2BcLSAodm9pZCkgLmN4eF9kZXN0cnVjdFwqKEMnXGZSCittZXRob2RzIHRodXNseSBnZW5lcmF0ZWQgb25seSBvcGVyYXRlIG9uIGluc3RhbmNlIHZhcmlhYmxlcworZGVjbGFyZWQgaW4gdGhlIGN1cnJlbnQgT2JqZWN0aXZlLUMgY2xhc3MsIGFuZCBub3QgdGhvc2UgaW5oZXJpdGVkCitmcm9tIHN1cGVyY2xhc3Nlcy4gIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgT2JqZWN0aXZlLUMKK3J1bnRpbWUgdG8gaW52b2tlIGFsbCBzdWNoIG1ldGhvZHMgaW4gYW4gb2JqZWN0J3MgaW5oZXJpdGFuY2UKK2hpZXJhcmNoeS4gIFRoZSBcZihDV1wqKENgXC0gKGlkKSAuY3h4X2NvbnN0cnVjdFwqKEMnXGZSIG1ldGhvZHMgYXJlIGludm9rZWQKK2J5IHRoZSBydW50aW1lIGltbWVkaWF0ZWx5IGFmdGVyIGEgbmV3IG9iamVjdCBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQ7Cit0aGUgXGYoQ1dcKihDYFwtICh2b2lkKSAuY3h4X2Rlc3RydWN0XCooQydcZlIgbWV0aG9kcyBhcmUgaW52b2tlZCBpbW1lZGlhdGVseQorYmVmb3JlIHRoZSBydW50aW1lIGRlYWxsb2NhdGVzIGFuIG9iamVjdCBpbnN0YW5jZS4KKy5TcAorQXMgb2YgdGhpcyB3cml0aW5nLCBvbmx5IHRoZSBOZVhUIHJ1bnRpbWUgb24gTWFjIFxzLTFPU1xzMCBYIDEwLjQgYW5kIGxhdGVyIGhhcworc3VwcG9ydCBmb3IgaW52b2tpbmcgdGhlIFxmKENXXCooQ2BcLSAoaWQpIC5jeHhfY29uc3RydWN0XCooQydcZlIgYW5kCitcJlxmKENXXCooQ2BcLSAodm9pZCkgLmN4eF9kZXN0cnVjdFwqKEMnXGZSIG1ldGhvZHMuCisuSVAgIlxmQlwtZm9iamNcLWRpcmVjdFwtZGlzcGF0Y2hcZlIiIDQKKy5JWCBJdGVtICItZm9iamMtZGlyZWN0LWRpc3BhdGNoIgorQWxsb3cgZmFzdCBqdW1wcyB0byB0aGUgbWVzc2FnZSBkaXNwYXRjaGVyLiAgT24gRGFyd2luIHRoaXMgaXMKK2FjY29tcGxpc2hlZCB2aWEgdGhlIGNvbW0gcGFnZS4KKy5JUCAiXGZCXC1mb2JqY1wtZXhjZXB0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mb2JqYy1leGNlcHRpb25zIgorRW5hYmxlIHN5bnRhY3RpYyBzdXBwb3J0IGZvciBzdHJ1Y3R1cmVkIGV4Y2VwdGlvbiBoYW5kbGluZyBpbgorT2JqZWN0aXZlLUMsIHNpbWlsYXIgdG8gd2hhdCBpcyBvZmZlcmVkIGJ5IFwqKEMrIGFuZCBKYXZhLiAgVGhpcyBvcHRpb24KK2lzIHJlcXVpcmVkIHRvIHVzZSB0aGUgT2JqZWN0aXZlLUMga2V5d29yZHMgXGYoQ1dAdHJ5XGZSLAorXCZcZihDV0B0aHJvd1xmUiwgXGYoQ1dAY2F0Y2hcZlIsIFxmKENXQGZpbmFsbHlcZlIgYW5kCitcJlxmKENXQHN5bmNocm9uaXplZFxmUi4gIFRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSB3aXRoIGJvdGggdGhlIFxzLTFHTlVcczAKK3J1bnRpbWUgYW5kIHRoZSBOZVhUIHJ1bnRpbWUgKGJ1dCBub3QgYXZhaWxhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGgKK3RoZSBOZVhUIHJ1bnRpbWUgb24gTWFjIFxzLTFPU1xzMCBYIDEwLjIgYW5kIGVhcmxpZXIpLgorLklQICJcZkJcLWZvYmpjXC1nY1xmUiIgNAorLklYIEl0ZW0gIi1mb2JqYy1nYyIKK0VuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24gKFxzLTFHQ1xzMCkgaW4gT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysKK3Byb2dyYW1zLiAgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgd2l0aCB0aGUgTmVYVCBydW50aW1lOyB0aGUKK1wmXHMtMUdOVVxzMCBydW50aW1lIGhhcyBhIGRpZmZlcmVudCBnYXJiYWdlIGNvbGxlY3Rpb24gaW1wbGVtZW50YXRpb24gdGhhdAorZG9lcyBub3QgcmVxdWlyZSBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzLgorLklQICJcZkJcLWZvYmpjXC1uaWxjaGVja1xmUiIgNAorLklYIEl0ZW0gIi1mb2JqYy1uaWxjaGVjayIKK0ZvciB0aGUgTmVYVCBydW50aW1lIHdpdGggdmVyc2lvbiAyIG9mIHRoZSBccy0xQUJJXHMwLCBjaGVjayBmb3IgYSBuaWwKK3JlY2VpdmVyIGluIG1ldGhvZCBpbnZvY2F0aW9ucyBiZWZvcmUgZG9pbmcgdGhlIGFjdHVhbCBtZXRob2QgY2FsbC4KK1RoaXMgaXMgdGhlIGRlZmF1bHQgYW5kIGNhbiBiZSBkaXNhYmxlZCB1c2luZworXCZcZkJcLWZub1wtb2JqY1wtbmlsY2hlY2tcZlIuICBDbGFzcyBtZXRob2RzIGFuZCBzdXBlciBjYWxscyBhcmUgbmV2ZXIKK2NoZWNrZWQgZm9yIG5pbCBpbiB0aGlzIHdheSBubyBtYXR0ZXIgd2hhdCB0aGlzIGZsYWcgaXMgc2V0IHRvLgorQ3VycmVudGx5IHRoaXMgZmxhZyBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgXHMtMUdOVVxzMCBydW50aW1lLCBvciBhbiBvbGRlcgordmVyc2lvbiBvZiB0aGUgTmVYVCBydW50aW1lIFxzLTFBQklcczAsIGlzIHVzZWQuCisuSVAgIlxmQlwtZm9iamNcLXN0ZD1vYmpjMVxmUiIgNAorLklYIEl0ZW0gIi1mb2JqYy1zdGQ9b2JqYzEiCitDb25mb3JtIHRvIHRoZSBsYW5ndWFnZSBzeW50YXggb2YgT2JqZWN0aXZlLUMgMS4wLCB0aGUgbGFuZ3VhZ2UKK3JlY29nbml6ZWQgYnkgXHMtMUdDQ1xzMCA0LjAuICBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgT2JqZWN0aXZlLUMgYWRkaXRpb25zIHRvCit0aGUgQy9cKihDKyBsYW5ndWFnZTsgaXQgZG9lcyBub3QgYWZmZWN0IGNvbmZvcm1hbmNlIHRvIEMvXCooQysgc3RhbmRhcmRzLAord2hpY2ggaXMgY29udHJvbGxlZCBieSB0aGUgc2VwYXJhdGUgQy9cKihDKyBkaWFsZWN0IG9wdGlvbiBmbGFncy4gIFdoZW4KK3RoaXMgb3B0aW9uIGlzIHVzZWQgd2l0aCB0aGUgT2JqZWN0aXZlLUMgb3IgT2JqZWN0aXZlXC1cKihDKyBjb21waWxlciwKK2FueSBPYmplY3RpdmUtQyBzeW50YXggdGhhdCBpcyBub3QgcmVjb2duaXplZCBieSBccy0xR0NDXHMwIDQuMCBpcyByZWplY3RlZC4KK1RoaXMgaXMgdXNlZnVsIGlmIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdXIgT2JqZWN0aXZlLUMgY29kZSBjYW4KK2JlIGNvbXBpbGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgXHMtMUdDQ1xzMC4KKy5JUCAiXGZCXC1mcmVwbGFjZVwtb2JqY1wtY2xhc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi1mcmVwbGFjZS1vYmpjLWNsYXNzZXMiCitFbWl0IGEgc3BlY2lhbCBtYXJrZXIgaW5zdHJ1Y3RpbmcgXGZCXGYoQklsZFxmQlx8KDEpXGZSIG5vdCB0byBzdGF0aWNhbGx5IGxpbmsgaW4KK3RoZSByZXN1bHRpbmcgb2JqZWN0IGZpbGUsIGFuZCBhbGxvdyBcZkJcZihCSWR5bGRcZkJcfCgxKVxmUiB0byBsb2FkIGl0IGluIGF0CitydW4gdGltZSBpbnN0ZWFkLiAgVGhpcyBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIEZpeC1hbmQtQ29udGludWUKK2RlYnVnZ2luZyBtb2RlLCB3aGVyZSB0aGUgb2JqZWN0IGZpbGUgaW4gcXVlc3Rpb24gbWF5IGJlIHJlY29tcGlsZWQgYW5kCitkeW5hbWljYWxseSByZWxvYWRlZCBpbiB0aGUgY291cnNlIG9mIHByb2dyYW0gZXhlY3V0aW9uLCB3aXRob3V0IHRoZSBuZWVkCit0byByZXN0YXJ0IHRoZSBwcm9ncmFtIGl0c2VsZi4gIEN1cnJlbnRseSwgRml4LWFuZC1Db250aW51ZSBmdW5jdGlvbmFsaXR5CitpcyBvbmx5IGF2YWlsYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBOZVhUIHJ1bnRpbWUgb24gTWFjIFxzLTFPU1xzMCBYIDEwLjMKK2FuZCBsYXRlci4KKy5JUCAiXGZCXC1memVyb1wtbGlua1xmUiIgNAorLklYIEl0ZW0gIi1memVyby1saW5rIgorV2hlbiBjb21waWxpbmcgZm9yIHRoZSBOZVhUIHJ1bnRpbWUsIHRoZSBjb21waWxlciBvcmRpbmFyaWx5IHJlcGxhY2VzIGNhbGxzCit0byBcZihDV1wqKENgb2JqY19nZXRDbGFzcygiLi4uIilcKihDJ1xmUiAod2hlbiB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgaXMga25vd24gYXQKK2NvbXBpbGUgdGltZSkgd2l0aCBzdGF0aWMgY2xhc3MgcmVmZXJlbmNlcyB0aGF0IGdldCBpbml0aWFsaXplZCBhdCBsb2FkIHRpbWUsCit3aGljaCBpbXByb3ZlcyBydW4tdGltZSBwZXJmb3JtYW5jZS4gIFNwZWNpZnlpbmcgdGhlIFxmQlwtZnplcm9cLWxpbmtcZlIgZmxhZworc3VwcHJlc3NlcyB0aGlzIGJlaGF2aW9yIGFuZCBjYXVzZXMgY2FsbHMgdG8gXGYoQ1dcKihDYG9iamNfZ2V0Q2xhc3MoIi4uLiIpXCooQydcZlIKK3RvIGJlIHJldGFpbmVkLiAgVGhpcyBpcyB1c2VmdWwgaW4gWmVyby1MaW5rIGRlYnVnZ2luZyBtb2RlLCBzaW5jZSBpdCBhbGxvd3MKK2ZvciBpbmRpdmlkdWFsIGNsYXNzIGltcGxlbWVudGF0aW9ucyB0byBiZSBtb2RpZmllZCBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24uCitUaGUgXHMtMUdOVVxzMCBydW50aW1lIGN1cnJlbnRseSBhbHdheXMgcmV0YWlucyBjYWxscyB0byBcZihDV1wqKENgb2JqY19nZXRfY2xhc3MoIi4uLiIpXCooQydcZlIKK3JlZ2FyZGxlc3Mgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMuCisuSVAgIlxmQlwtZ2VuXC1kZWNsc1xmUiIgNAorLklYIEl0ZW0gIi1nZW4tZGVjbHMiCitEdW1wIGludGVyZmFjZSBkZWNsYXJhdGlvbnMgZm9yIGFsbCBjbGFzc2VzIHNlZW4gaW4gdGhlIHNvdXJjZSBmaWxlIHRvIGEKK2ZpbGUgbmFtZWQgXGZJXGZJc291cmNlbmFtZVxmSS5kZWNsXGZSLgorLklQICJcZkJcLVdhc3NpZ25cLWludGVyY2VwdFxmUiAoT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV2Fzc2lnbi1pbnRlcmNlcHQgKE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiB3aGVuZXZlciBhbiBPYmplY3RpdmUtQyBhc3NpZ25tZW50IGlzIGJlaW5nIGludGVyY2VwdGVkIGJ5IHRoZQorZ2FyYmFnZSBjb2xsZWN0b3IuCisuSVAgIlxmQlwtV25vXC1wcm90b2NvbFxmUiAoT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV25vLXByb3RvY29sIChPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK0lmIGEgY2xhc3MgaXMgZGVjbGFyZWQgdG8gaW1wbGVtZW50IGEgcHJvdG9jb2wsIGEgd2FybmluZyBpcyBpc3N1ZWQgZm9yCitldmVyeSBtZXRob2QgaW4gdGhlIHByb3RvY29sIHRoYXQgaXMgbm90IGltcGxlbWVudGVkIGJ5IHRoZSBjbGFzcy4gIFRoZQorZGVmYXVsdCBiZWhhdmlvciBpcyB0byBpc3N1ZSBhIHdhcm5pbmcgZm9yIGV2ZXJ5IG1ldGhvZCBub3QgZXhwbGljaXRseQoraW1wbGVtZW50ZWQgaW4gdGhlIGNsYXNzLCBldmVuIGlmIGEgbWV0aG9kIGltcGxlbWVudGF0aW9uIGlzIGluaGVyaXRlZAorZnJvbSB0aGUgc3VwZXJjbGFzcy4gIElmIHlvdSB1c2UgdGhlIFxmQlwtV25vXC1wcm90b2NvbFxmUiBvcHRpb24sIHRoZW4KK21ldGhvZHMgaW5oZXJpdGVkIGZyb20gdGhlIHN1cGVyY2xhc3MgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW1wbGVtZW50ZWQsCithbmQgbm8gd2FybmluZyBpcyBpc3N1ZWQgZm9yIHRoZW0uCisuSVAgIlxmQlwtV3NlbGVjdG9yXGZSIChPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xc2VsZWN0b3IgKE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiBpZiBtdWx0aXBsZSBtZXRob2RzIG9mIGRpZmZlcmVudCB0eXBlcyBmb3IgdGhlIHNhbWUgc2VsZWN0b3IgYXJlCitmb3VuZCBkdXJpbmcgY29tcGlsYXRpb24uICBUaGUgY2hlY2sgaXMgcGVyZm9ybWVkIG9uIHRoZSBsaXN0IG9mIG1ldGhvZHMKK2luIHRoZSBmaW5hbCBzdGFnZSBvZiBjb21waWxhdGlvbi4gIEFkZGl0aW9uYWxseSwgYSBjaGVjayBpcyBwZXJmb3JtZWQKK2ZvciBlYWNoIHNlbGVjdG9yIGFwcGVhcmluZyBpbiBhIFxmKENXXCooQ2BAc2VsZWN0b3IoLi4uKVwqKEMnXGZSCitleHByZXNzaW9uLCBhbmQgYSBjb3JyZXNwb25kaW5nIG1ldGhvZCBmb3IgdGhhdCBzZWxlY3RvciBoYXMgYmVlbiBmb3VuZAorZHVyaW5nIGNvbXBpbGF0aW9uLiAgQmVjYXVzZSB0aGVzZSBjaGVja3Mgc2NhbiB0aGUgbWV0aG9kIHRhYmxlIG9ubHkgYXQKK3RoZSBlbmQgb2YgY29tcGlsYXRpb24sIHRoZXNlIHdhcm5pbmdzIGFyZSBub3QgcHJvZHVjZWQgaWYgdGhlIGZpbmFsCitzdGFnZSBvZiBjb21waWxhdGlvbiBpcyBub3QgcmVhY2hlZCwgZm9yIGV4YW1wbGUgYmVjYXVzZSBhbiBlcnJvciBpcworZm91bmQgZHVyaW5nIGNvbXBpbGF0aW9uLCBvciBiZWNhdXNlIHRoZSBcZkJcLWZzeW50YXhcLW9ubHlcZlIgb3B0aW9uIGlzCitiZWluZyB1c2VkLgorLklQICJcZkJcLVdzdHJpY3RcLXNlbGVjdG9yXC1tYXRjaFxmUiAoT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV3N0cmljdC1zZWxlY3Rvci1tYXRjaCAoT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIGlmIG11bHRpcGxlIG1ldGhvZHMgd2l0aCBkaWZmZXJpbmcgYXJndW1lbnQgYW5kL29yIHJldHVybiB0eXBlcyBhcmUKK2ZvdW5kIGZvciBhIGdpdmVuIHNlbGVjdG9yIHdoZW4gYXR0ZW1wdGluZyB0byBzZW5kIGEgbWVzc2FnZSB1c2luZyB0aGlzCitzZWxlY3RvciB0byBhIHJlY2VpdmVyIG9mIHR5cGUgXGYoQ1dcKihDYGlkXCooQydcZlIgb3IgXGYoQ1dcKihDYENsYXNzXCooQydcZlIuICBXaGVuIHRoaXMgZmxhZworaXMgb2ZmICh3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciksIHRoZSBjb21waWxlciBvbWl0cyBzdWNoIHdhcm5pbmdzCitpZiBhbnkgZGlmZmVyZW5jZXMgZm91bmQgYXJlIGNvbmZpbmVkIHRvIHR5cGVzIHRoYXQgc2hhcmUgdGhlIHNhbWUgc2l6ZQorYW5kIGFsaWdubWVudC4KKy5JUCAiXGZCXC1XdW5kZWNsYXJlZFwtc2VsZWN0b3JcZlIgKE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVd1bmRlY2xhcmVkLXNlbGVjdG9yIChPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gaWYgYSBcZihDV1wqKENgQHNlbGVjdG9yKC4uLilcKihDJ1xmUiBleHByZXNzaW9uIHJlZmVycmluZyB0byBhbgordW5kZWNsYXJlZCBzZWxlY3RvciBpcyBmb3VuZC4gIEEgc2VsZWN0b3IgaXMgY29uc2lkZXJlZCB1bmRlY2xhcmVkIGlmIG5vCittZXRob2Qgd2l0aCB0aGF0IG5hbWUgaGFzIGJlZW4gZGVjbGFyZWQgYmVmb3JlIHRoZQorXCZcZihDV1wqKENgQHNlbGVjdG9yKC4uLilcKihDJ1xmUiBleHByZXNzaW9uLCBlaXRoZXIgZXhwbGljaXRseSBpbiBhbgorXCZcZihDV0BpbnRlcmZhY2VcZlIgb3IgXGYoQ1dAcHJvdG9jb2xcZlIgZGVjbGFyYXRpb24sIG9yIGltcGxpY2l0bHkgaW4KK2FuIFxmKENXQGltcGxlbWVudGF0aW9uXGZSIHNlY3Rpb24uICBUaGlzIG9wdGlvbiBhbHdheXMgcGVyZm9ybXMgaXRzCitjaGVja3MgYXMgc29vbiBhcyBhIFxmKENXXCooQ2BAc2VsZWN0b3IoLi4uKVwqKEMnXGZSIGV4cHJlc3Npb24gaXMgZm91bmQsCit3aGlsZSBcZkJcLVdzZWxlY3RvclxmUiBvbmx5IHBlcmZvcm1zIGl0cyBjaGVja3MgaW4gdGhlIGZpbmFsIHN0YWdlIG9mCitjb21waWxhdGlvbi4gIFRoaXMgYWxzbyBlbmZvcmNlcyB0aGUgY29kaW5nIHN0eWxlIGNvbnZlbnRpb24KK3RoYXQgbWV0aG9kcyBhbmQgc2VsZWN0b3JzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGJlaW5nIHVzZWQuCisuSVAgIlxmQlwtcHJpbnRcLW9iamNcLXJ1bnRpbWVcLWluZm9cZlIiIDQKKy5JWCBJdGVtICItcHJpbnQtb2JqYy1ydW50aW1lLWluZm8iCitHZW5lcmF0ZSBDIGhlYWRlciBkZXNjcmliaW5nIHRoZSBsYXJnZXN0IHN0cnVjdHVyZSB0aGF0IGlzIHBhc3NlZCBieQordmFsdWUsIGlmIGFueS4KKy5TUyAiT3B0aW9ucyB0byBDb250cm9sIERpYWdub3N0aWMgTWVzc2FnZXMgRm9ybWF0dGluZyIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIHRvIENvbnRyb2wgRGlhZ25vc3RpYyBNZXNzYWdlcyBGb3JtYXR0aW5nIgorVHJhZGl0aW9uYWxseSwgZGlhZ25vc3RpYyBtZXNzYWdlcyBoYXZlIGJlZW4gZm9ybWF0dGVkIGlycmVzcGVjdGl2ZSBvZgordGhlIG91dHB1dCBkZXZpY2UncyBhc3BlY3QgKGUuZy4gaXRzIHdpZHRoLCAuLi4pLiAgWW91IGNhbiB1c2UgdGhlCitvcHRpb25zIGRlc2NyaWJlZCBiZWxvdwordG8gY29udHJvbCB0aGUgZm9ybWF0dGluZyBhbGdvcml0aG0gZm9yIGRpYWdub3N0aWMgbWVzc2FnZXMsIAorZS5nLiBob3cgbWFueSBjaGFyYWN0ZXJzIHBlciBsaW5lLCBob3cgb2Z0ZW4gc291cmNlIGxvY2F0aW9uCitpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmVwb3J0ZWQuICBOb3RlIHRoYXQgc29tZSBsYW5ndWFnZSBmcm9udCBlbmRzIG1heSBub3QKK2hvbm9yIHRoZXNlIG9wdGlvbnMuCisuSVAgIlxmQlwtZm1lc3NhZ2VcLWxlbmd0aD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZtZXNzYWdlLWxlbmd0aD1uIgorVHJ5IHRvIGZvcm1hdCBlcnJvciBtZXNzYWdlcyBzbyB0aGF0IHRoZXkgZml0IG9uIGxpbmVzIG9mIGFib3V0IFxmSW5cZlIKK2NoYXJhY3RlcnMuICBUaGUgZGVmYXVsdCBpcyA3MiBjaGFyYWN0ZXJzIGZvciBcZkJnKytcZlIgYW5kIDAgZm9yIHRoZSByZXN0IG9mCit0aGUgZnJvbnQgZW5kcyBzdXBwb3J0ZWQgYnkgXHMtMUdDQ1xzMC4gIElmIFxmSW5cZlIgaXMgemVybywgdGhlbiBubworbGluZS13cmFwcGluZyBpcyBkb25lOyBlYWNoIGVycm9yIG1lc3NhZ2UgYXBwZWFycyBvbiBhIHNpbmdsZQorbGluZS4KKy5JUCAiXGZCXC1mZGlhZ25vc3RpY3NcLXNob3dcLWxvY2F0aW9uPW9uY2VcZlIiIDQKKy5JWCBJdGVtICItZmRpYWdub3N0aWNzLXNob3ctbG9jYXRpb249b25jZSIKK09ubHkgbWVhbmluZ2Z1bCBpbiBsaW5lLXdyYXBwaW5nIG1vZGUuICBJbnN0cnVjdHMgdGhlIGRpYWdub3N0aWMgbWVzc2FnZXMKK3JlcG9ydGVyIHRvIGVtaXQgc291cmNlIGxvY2F0aW9uIGluZm9ybWF0aW9uIFxmSW9uY2VcZlI7IHRoYXQgaXMsIGluCitjYXNlIHRoZSBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGZpdCBvbiBhIHNpbmdsZSBwaHlzaWNhbCBsaW5lIGFuZCBoYXMgdG8KK2JlIHdyYXBwZWQsIHRoZSBzb3VyY2UgbG9jYXRpb24gd29uJ3QgYmUgZW1pdHRlZCAoYXMgcHJlZml4KSBhZ2FpbiwKK292ZXIgYW5kIG92ZXIsIGluIHN1YnNlcXVlbnQgY29udGludWF0aW9uIGxpbmVzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorYmVoYXZpb3IuCisuSVAgIlxmQlwtZmRpYWdub3N0aWNzXC1zaG93XC1sb2NhdGlvbj1ldmVyeVwtbGluZVxmUiIgNAorLklYIEl0ZW0gIi1mZGlhZ25vc3RpY3Mtc2hvdy1sb2NhdGlvbj1ldmVyeS1saW5lIgorT25seSBtZWFuaW5nZnVsIGluIGxpbmUtd3JhcHBpbmcgbW9kZS4gIEluc3RydWN0cyB0aGUgZGlhZ25vc3RpYworbWVzc2FnZXMgcmVwb3J0ZXIgdG8gZW1pdCB0aGUgc2FtZSBzb3VyY2UgbG9jYXRpb24gaW5mb3JtYXRpb24gKGFzCitwcmVmaXgpIGZvciBwaHlzaWNhbCBsaW5lcyB0aGF0IHJlc3VsdCBmcm9tIHRoZSBwcm9jZXNzIG9mIGJyZWFraW5nCithIG1lc3NhZ2Ugd2hpY2ggaXMgdG9vIGxvbmcgdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUuCisuSVAgIlxmQlwtZm5vXC1kaWFnbm9zdGljc1wtc2hvd1wtb3B0aW9uXGZSIiA0CisuSVggSXRlbSAiLWZuby1kaWFnbm9zdGljcy1zaG93LW9wdGlvbiIKK0J5IGRlZmF1bHQsIGVhY2ggZGlhZ25vc3RpYyBlbWl0dGVkIGluY2x1ZGVzIHRleHQgaW5kaWNhdGluZyB0aGUKK2NvbW1hbmQtbGluZSBvcHRpb24gdGhhdCBkaXJlY3RseSBjb250cm9scyB0aGUgZGlhZ25vc3RpYyAoaWYgc3VjaCBhbgorb3B0aW9uIGlzIGtub3duIHRvIHRoZSBkaWFnbm9zdGljIG1hY2hpbmVyeSkuICBTcGVjaWZ5aW5nIHRoZQorXCZcZkJcLWZub1wtZGlhZ25vc3RpY3NcLXNob3dcLW9wdGlvblxmUiBmbGFnIHN1cHByZXNzZXMgdGhhdCBiZWhhdmlvci4KKy5JUCAiXGZCXC1mbm9cLWRpYWdub3N0aWNzXC1zaG93XC1jYXJldFxmUiIgNAorLklYIEl0ZW0gIi1mbm8tZGlhZ25vc3RpY3Mtc2hvdy1jYXJldCIKK0J5IGRlZmF1bHQsIGVhY2ggZGlhZ25vc3RpYyBlbWl0dGVkIGluY2x1ZGVzIHRoZSBvcmlnaW5hbCBzb3VyY2UgbGluZQorYW5kIGEgY2FyZXQgJ14nIGluZGljYXRpbmcgdGhlIGNvbHVtbi4gIFRoaXMgb3B0aW9uIHN1cHByZXNzZXMgdGhpcworaW5mb3JtYXRpb24uCisuU1MgIk9wdGlvbnMgdG8gUmVxdWVzdCBvciBTdXBwcmVzcyBXYXJuaW5ncyIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIHRvIFJlcXVlc3Qgb3IgU3VwcHJlc3MgV2FybmluZ3MiCitXYXJuaW5ncyBhcmUgZGlhZ25vc3RpYyBtZXNzYWdlcyB0aGF0IHJlcG9ydCBjb25zdHJ1Y3Rpb25zIHRoYXQKK2FyZSBub3QgaW5oZXJlbnRseSBlcnJvbmVvdXMgYnV0IHRoYXQgYXJlIHJpc2t5IG9yIHN1Z2dlc3QgdGhlcmUKK21heSBoYXZlIGJlZW4gYW4gZXJyb3IuCisuUFAKK1RoZSBmb2xsb3dpbmcgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgb3B0aW9ucyBkbyBub3QgZW5hYmxlIHNwZWNpZmljCit3YXJuaW5ncyBidXQgY29udHJvbCB0aGUga2luZHMgb2YgZGlhZ25vc3RpY3MgcHJvZHVjZWQgYnkgXHMtMUdDQ1xzMC4KKy5JUCAiXGZCXC1mc3ludGF4XC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLWZzeW50YXgtb25seSIKK0NoZWNrIHRoZSBjb2RlIGZvciBzeW50YXggZXJyb3JzLCBidXQgZG9uJ3QgZG8gYW55dGhpbmcgYmV5b25kIHRoYXQuCisuSVAgIlxmQlwtZm1heFwtZXJyb3JzPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZm1heC1lcnJvcnM9biIKK0xpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3IgbWVzc2FnZXMgdG8gXGZJblxmUiwgYXQgd2hpY2ggcG9pbnQKK1wmXHMtMUdDQ1xzMCBiYWlscyBvdXQgcmF0aGVyIHRoYW4gYXR0ZW1wdGluZyB0byBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBzb3VyY2UKK2NvZGUuICBJZiBcZkluXGZSIGlzIDAgKHRoZSBkZWZhdWx0KSwgdGhlcmUgaXMgbm8gbGltaXQgb24gdGhlIG51bWJlcgorb2YgZXJyb3IgbWVzc2FnZXMgcHJvZHVjZWQuICBJZiBcZkJcLVdmYXRhbFwtZXJyb3JzXGZSIGlzIGFsc28KK3NwZWNpZmllZCwgdGhlbiBcZkJcLVdmYXRhbFwtZXJyb3JzXGZSIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGlzCitvcHRpb24uCisuSVAgIlxmQlwtd1xmUiIgNAorLklYIEl0ZW0gIi13IgorSW5oaWJpdCBhbGwgd2FybmluZyBtZXNzYWdlcy4KKy5JUCAiXGZCXC1XZXJyb3JcZlIiIDQKKy5JWCBJdGVtICItV2Vycm9yIgorTWFrZSBhbGwgd2FybmluZ3MgaW50byBlcnJvcnMuCisuSVAgIlxmQlwtV2Vycm9yPVxmUiIgNAorLklYIEl0ZW0gIi1XZXJyb3I9IgorTWFrZSB0aGUgc3BlY2lmaWVkIHdhcm5pbmcgaW50byBhbiBlcnJvci4gIFRoZSBzcGVjaWZpZXIgZm9yIGEgd2FybmluZworaXMgYXBwZW5kZWQ7IGZvciBleGFtcGxlIFxmQlwtV2Vycm9yPXN3aXRjaFxmUiB0dXJucyB0aGUgd2FybmluZ3MKK2NvbnRyb2xsZWQgYnkgXGZCXC1Xc3dpdGNoXGZSIGludG8gZXJyb3JzLiAgVGhpcyBzd2l0Y2ggdGFrZXMgYQorbmVnYXRpdmUgZm9ybSwgdG8gYmUgdXNlZCB0byBuZWdhdGUgXGZCXC1XZXJyb3JcZlIgZm9yIHNwZWNpZmljCit3YXJuaW5nczsgZm9yIGV4YW1wbGUgXGZCXC1Xbm9cLWVycm9yPXN3aXRjaFxmUiBtYWtlcworXCZcZkJcLVdzd2l0Y2hcZlIgd2FybmluZ3Mgbm90IGJlIGVycm9ycywgZXZlbiB3aGVuIFxmQlwtV2Vycm9yXGZSCitpcyBpbiBlZmZlY3QuCisuU3AKK1RoZSB3YXJuaW5nIG1lc3NhZ2UgZm9yIGVhY2ggY29udHJvbGxhYmxlIHdhcm5pbmcgaW5jbHVkZXMgdGhlCitvcHRpb24gdGhhdCBjb250cm9scyB0aGUgd2FybmluZy4gIFRoYXQgb3B0aW9uIGNhbiB0aGVuIGJlIHVzZWQgd2l0aAorXCZcZkJcLVdlcnJvcj1cZlIgYW5kIFxmQlwtV25vXC1lcnJvcj1cZlIgYXMgZGVzY3JpYmVkIGFib3ZlLgorKFByaW50aW5nIG9mIHRoZSBvcHRpb24gaW4gdGhlIHdhcm5pbmcgbWVzc2FnZSBjYW4gYmUgZGlzYWJsZWQgdXNpbmcgdGhlCitcJlxmQlwtZm5vXC1kaWFnbm9zdGljc1wtc2hvd1wtb3B0aW9uXGZSIGZsYWcuKQorLlNwCitOb3RlIHRoYXQgc3BlY2lmeWluZyBcZkJcLVdlcnJvcj1cZlJcZklmb29cZlIgYXV0b21hdGljYWxseSBpbXBsaWVzCitcJlxmQlwtV1xmUlxmSWZvb1xmUi4gIEhvd2V2ZXIsIFxmQlwtV25vXC1lcnJvcj1cZlJcZklmb29cZlIgZG9lcyBub3QKK2ltcGx5IGFueXRoaW5nLgorLklQICJcZkJcLVdmYXRhbFwtZXJyb3JzXGZSIiA0CisuSVggSXRlbSAiLVdmYXRhbC1lcnJvcnMiCitUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGFib3J0IGNvbXBpbGF0aW9uIG9uIHRoZSBmaXJzdCBlcnJvcgorb2NjdXJyZWQgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGtlZXAgZ29pbmcgYW5kIHByaW50aW5nIGZ1cnRoZXIgZXJyb3IKK21lc3NhZ2VzLgorLlBQCitZb3UgY2FuIHJlcXVlc3QgbWFueSBzcGVjaWZpYyB3YXJuaW5ncyB3aXRoIG9wdGlvbnMgYmVnaW5uaW5nIHdpdGgKK1wmXGZCXC1XXGZSLCBmb3IgZXhhbXBsZSBcZkJcLVdpbXBsaWNpdFxmUiB0byByZXF1ZXN0IHdhcm5pbmdzIG9uCitpbXBsaWNpdCBkZWNsYXJhdGlvbnMuICBFYWNoIG9mIHRoZXNlIHNwZWNpZmljIHdhcm5pbmcgb3B0aW9ucyBhbHNvCitoYXMgYSBuZWdhdGl2ZSBmb3JtIGJlZ2lubmluZyBcZkJcLVdub1wtXGZSIHRvIHR1cm4gb2ZmIHdhcm5pbmdzOyBmb3IKK2V4YW1wbGUsIFxmQlwtV25vXC1pbXBsaWNpdFxmUi4gIFRoaXMgbWFudWFsIGxpc3RzIG9ubHkgb25lIG9mIHRoZQordHdvIGZvcm1zLCB3aGljaGV2ZXIgaXMgbm90IHRoZSBkZWZhdWx0LiAgRm9yIGZ1cnRoZXIKK2xhbmd1YWdlLXNwZWNpZmljIG9wdGlvbnMgYWxzbyByZWZlciB0byBcZkJcKihDKyBEaWFsZWN0IE9wdGlvbnNcZlIgYW5kCitcJlxmQk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrIERpYWxlY3QgT3B0aW9uc1xmUi4KKy5QUAorV2hlbiBhbiB1bnJlY29nbml6ZWQgd2FybmluZyBvcHRpb24gaXMgcmVxdWVzdGVkIChlLmcuLAorXCZcZkJcLVd1bmtub3duXC13YXJuaW5nXGZSKSwgXHMtMUdDQ1xzMCBlbWl0cyBhIGRpYWdub3N0aWMgc3RhdGluZwordGhhdCB0aGUgb3B0aW9uIGlzIG5vdCByZWNvZ25pemVkLiAgSG93ZXZlciwgaWYgdGhlIFxmQlwtV25vXC1cZlIgZm9ybQoraXMgdXNlZCwgdGhlIGJlaGF2aW9yIGlzIHNsaWdodGx5IGRpZmZlcmVudDogbm8gZGlhZ25vc3RpYyBpcworcHJvZHVjZWQgZm9yIFxmQlwtV25vXC11bmtub3duXC13YXJuaW5nXGZSIHVubGVzcyBvdGhlciBkaWFnbm9zdGljcworYXJlIGJlaW5nIHByb2R1Y2VkLiAgVGhpcyBhbGxvd3MgdGhlIHVzZSBvZiBuZXcgXGZCXC1Xbm9cLVxmUiBvcHRpb25zCit3aXRoIG9sZCBjb21waWxlcnMsIGJ1dCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgdGhlIGNvbXBpbGVyCit3YXJucyB0aGF0IGFuIHVucmVjb2duaXplZCBvcHRpb24gaXMgcHJlc2VudC4KKy5JUCAiXGZCXC1XcGVkYW50aWNcZlIiIDQKKy5JWCBJdGVtICItV3BlZGFudGljIgorLlBEIDAKKy5JUCAiXGZCXC1wZWRhbnRpY1xmUiIgNAorLklYIEl0ZW0gIi1wZWRhbnRpYyIKKy5QRAorSXNzdWUgYWxsIHRoZSB3YXJuaW5ncyBkZW1hbmRlZCBieSBzdHJpY3QgXHMtMUlTT1xzMCBDIGFuZCBccy0xSVNPXHMwIFwqKEMrOworcmVqZWN0IGFsbCBwcm9ncmFtcyB0aGF0IHVzZSBmb3JiaWRkZW4gZXh0ZW5zaW9ucywgYW5kIHNvbWUgb3RoZXIKK3Byb2dyYW1zIHRoYXQgZG8gbm90IGZvbGxvdyBccy0xSVNPXHMwIEMgYW5kIFxzLTFJU09cczAgXCooQysuICBGb3IgXHMtMUlTT1xzMCBDLCBmb2xsb3dzIHRoZQordmVyc2lvbiBvZiB0aGUgXHMtMUlTT1xzMCBDIHN0YW5kYXJkIHNwZWNpZmllZCBieSBhbnkgXGZCXC1zdGRcZlIgb3B0aW9uIHVzZWQuCisuU3AKK1ZhbGlkIFxzLTFJU09cczAgQyBhbmQgXHMtMUlTT1xzMCBcKihDKyBwcm9ncmFtcyBzaG91bGQgY29tcGlsZSBwcm9wZXJseSB3aXRoIG9yIHdpdGhvdXQKK3RoaXMgb3B0aW9uICh0aG91Z2ggYSByYXJlIGZldyByZXF1aXJlIFxmQlwtYW5zaVxmUiBvciBhCitcJlxmQlwtc3RkXGZSIG9wdGlvbiBzcGVjaWZ5aW5nIHRoZSByZXF1aXJlZCB2ZXJzaW9uIG9mIFxzLTFJU09cczAgQykuICBIb3dldmVyLAord2l0aG91dCB0aGlzIG9wdGlvbiwgY2VydGFpbiBccy0xR05VXHMwIGV4dGVuc2lvbnMgYW5kIHRyYWRpdGlvbmFsIEMgYW5kIFwqKEMrCitmZWF0dXJlcyBhcmUgc3VwcG9ydGVkIGFzIHdlbGwuICBXaXRoIHRoaXMgb3B0aW9uLCB0aGV5IGFyZSByZWplY3RlZC4KKy5TcAorXCZcZkJcLVdwZWRhbnRpY1xmUiBkb2VzIG5vdCBjYXVzZSB3YXJuaW5nIG1lc3NhZ2VzIGZvciB1c2Ugb2YgdGhlCithbHRlcm5hdGUga2V5d29yZHMgd2hvc2UgbmFtZXMgYmVnaW4gYW5kIGVuZCB3aXRoIFxmQl9cfF9cZlIuICBQZWRhbnRpYword2FybmluZ3MgYXJlIGFsc28gZGlzYWJsZWQgaW4gdGhlIGV4cHJlc3Npb24gdGhhdCBmb2xsb3dzCitcJlxmKENXXCooQ2BfXHxfZXh0ZW5zaW9uX1x8X1wqKEMnXGZSLiAgSG93ZXZlciwgb25seSBzeXN0ZW0gaGVhZGVyIGZpbGVzIHNob3VsZCB1c2UKK3RoZXNlIGVzY2FwZSByb3V0ZXM7IGFwcGxpY2F0aW9uIHByb2dyYW1zIHNob3VsZCBhdm9pZCB0aGVtLgorLlNwCitTb21lIHVzZXJzIHRyeSB0byB1c2UgXGZCXC1XcGVkYW50aWNcZlIgdG8gY2hlY2sgcHJvZ3JhbXMgZm9yIHN0cmljdCBccy0xSVNPXHMwCitDIGNvbmZvcm1hbmNlLiAgVGhleSBzb29uIGZpbmQgdGhhdCBpdCBkb2VzIG5vdCBkbyBxdWl0ZSB3aGF0IHRoZXkgd2FudDoKK2l0IGZpbmRzIHNvbWUgbm9uLUlTTyBwcmFjdGljZXMsIGJ1dCBub3QgYWxsXC1cLVwtb25seSB0aG9zZSBmb3Igd2hpY2gKK1wmXHMtMUlTT1xzMCBDIFxmSXJlcXVpcmVzXGZSIGEgZGlhZ25vc3RpYywgYW5kIHNvbWUgb3RoZXJzIGZvciB3aGljaAorZGlhZ25vc3RpY3MgaGF2ZSBiZWVuIGFkZGVkLgorLlNwCitBIGZlYXR1cmUgdG8gcmVwb3J0IGFueSBmYWlsdXJlIHRvIGNvbmZvcm0gdG8gXHMtMUlTT1xzMCBDIG1pZ2h0IGJlIHVzZWZ1bCBpbgorc29tZSBpbnN0YW5jZXMsIGJ1dCB3b3VsZCByZXF1aXJlIGNvbnNpZGVyYWJsZSBhZGRpdGlvbmFsIHdvcmsgYW5kIHdvdWxkCitiZSBxdWl0ZSBkaWZmZXJlbnQgZnJvbSBcZkJcLVdwZWRhbnRpY1xmUi4gIFdlIGRvbid0IGhhdmUgcGxhbnMgdG8KK3N1cHBvcnQgc3VjaCBhIGZlYXR1cmUgaW4gdGhlIG5lYXIgZnV0dXJlLgorLlNwCitXaGVyZSB0aGUgc3RhbmRhcmQgc3BlY2lmaWVkIHdpdGggXGZCXC1zdGRcZlIgcmVwcmVzZW50cyBhIFxzLTFHTlVcczAKK2V4dGVuZGVkIGRpYWxlY3Qgb2YgQywgc3VjaCBhcyBcZkJnbnU5MFxmUiBvciBcZkJnbnU5OVxmUiwgdGhlcmUgaXMgYQorY29ycmVzcG9uZGluZyBcZkliYXNlIHN0YW5kYXJkXGZSLCB0aGUgdmVyc2lvbiBvZiBccy0xSVNPXHMwIEMgb24gd2hpY2ggdGhlIFxzLTFHTlVcczAKK2V4dGVuZGVkIGRpYWxlY3QgaXMgYmFzZWQuICBXYXJuaW5ncyBmcm9tIFxmQlwtV3BlZGFudGljXGZSIGFyZSBnaXZlbgord2hlcmUgdGhleSBhcmUgcmVxdWlyZWQgYnkgdGhlIGJhc2Ugc3RhbmRhcmQuICAoSXQgZG9lcyBub3QgbWFrZSBzZW5zZQorZm9yIHN1Y2ggd2FybmluZ3MgdG8gYmUgZ2l2ZW4gb25seSBmb3IgZmVhdHVyZXMgbm90IGluIHRoZSBzcGVjaWZpZWQgXHMtMUdOVVxzMAorQyBkaWFsZWN0LCBzaW5jZSBieSBkZWZpbml0aW9uIHRoZSBccy0xR05VXHMwIGRpYWxlY3RzIG9mIEMgaW5jbHVkZSBhbGwKK2ZlYXR1cmVzIHRoZSBjb21waWxlciBzdXBwb3J0cyB3aXRoIHRoZSBnaXZlbiBvcHRpb24sIGFuZCB0aGVyZSB3b3VsZCBiZQorbm90aGluZyB0byB3YXJuIGFib3V0LikKKy5JUCAiXGZCXC1wZWRhbnRpY1wtZXJyb3JzXGZSIiA0CisuSVggSXRlbSAiLXBlZGFudGljLWVycm9ycyIKK0xpa2UgXGZCXC1XcGVkYW50aWNcZlIsIGV4Y2VwdCB0aGF0IGVycm9ycyBhcmUgcHJvZHVjZWQgcmF0aGVyIHRoYW4KK3dhcm5pbmdzLgorLklQICJcZkJcLVdhbGxcZlIiIDQKKy5JWCBJdGVtICItV2FsbCIKK1RoaXMgZW5hYmxlcyBhbGwgdGhlIHdhcm5pbmdzIGFib3V0IGNvbnN0cnVjdGlvbnMgdGhhdCBzb21lIHVzZXJzCitjb25zaWRlciBxdWVzdGlvbmFibGUsIGFuZCB0aGF0IGFyZSBlYXN5IHRvIGF2b2lkIChvciBtb2RpZnkgdG8KK3ByZXZlbnQgdGhlIHdhcm5pbmcpLCBldmVuIGluIGNvbmp1bmN0aW9uIHdpdGggbWFjcm9zLiAgVGhpcyBhbHNvCitlbmFibGVzIHNvbWUgbGFuZ3VhZ2Utc3BlY2lmaWMgd2FybmluZ3MgZGVzY3JpYmVkIGluIFxmQlwqKEMrIERpYWxlY3QKK09wdGlvbnNcZlIgYW5kIFxmQk9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrIERpYWxlY3QgT3B0aW9uc1xmUi4KKy5TcAorXCZcZkJcLVdhbGxcZlIgdHVybnMgb24gdGhlIGZvbGxvd2luZyB3YXJuaW5nIGZsYWdzOgorLlNwCitcJlxmQlwtV2FkZHJlc3MgICAKK1wmXC1XYXJyYXlcLWJvdW5kc1xmUiAob25seSB3aXRoXGZCIFxmUlxmQlwtTzJcZlIpICAKK1wmXGZCXC1XYysrMTFcLWNvbXBhdCAgCitcJlwtV2NoYXJcLXN1YnNjcmlwdHMgIAorXCZcLVdlbnVtXC1jb21wYXJlXGZSIChpbiBDL09iakM7IHRoaXMgaXMgb24gYnkgZGVmYXVsdCBpbiBcKihDKykgCitcJlxmQlwtV2ltcGxpY2l0XC1pbnRcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIAorXCZcZkJcLVdpbXBsaWNpdFwtZnVuY3Rpb25cLWRlY2xhcmF0aW9uXGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSAKK1wmXGZCXC1XY29tbWVudCAgCitcJlwtV2Zvcm1hdCAgIAorXCZcLVdtYWluXGZSIChvbmx5IGZvciBDL09iakMgYW5kIHVubGVzc1xmQiBcZlJcZkJcLWZmcmVlc3RhbmRpbmdcZlIpICAKK1wmXGZCXC1XbWF5YmVcLXVuaW5pdGlhbGl6ZWQgCitcJlwtV21pc3NpbmdcLWJyYWNlc1xmUiAob25seSBmb3IgQy9PYmpDKSAKK1wmXGZCXC1Xbm9ubnVsbCAgCitcJlwtV3BhcmVudGhlc2VzICAKK1wmXC1XcG9pbnRlclwtc2lnbiAgCitcJlwtV3Jlb3JkZXIgICAKK1wmXC1XcmV0dXJuXC10eXBlICAKK1wmXC1Xc2VxdWVuY2VcLXBvaW50ICAKK1wmXC1Xc2lnblwtY29tcGFyZVxmUiAob25seSBpbiBcKihDKykgIAorXCZcZkJcLVdzdHJpY3RcLWFsaWFzaW5nICAKK1wmXC1Xc3RyaWN0XC1vdmVyZmxvdz0xICAKK1wmXC1Xc3dpdGNoICAKK1wmXC1XdHJpZ3JhcGhzICAKK1wmXC1XdW5pbml0aWFsaXplZCAgCitcJlwtV3Vua25vd25cLXByYWdtYXMgIAorXCZcLVd1bnVzZWRcLWZ1bmN0aW9uICAKK1wmXC1XdW51c2VkXC1sYWJlbCAgICAgCitcJlwtV3VudXNlZFwtdmFsdWUgICAgIAorXCZcLVd1bnVzZWRcLXZhcmlhYmxlICAKK1wmXC1Xdm9sYXRpbGVcLXJlZ2lzdGVyXC12YXJcZlIKKy5TcAorTm90ZSB0aGF0IHNvbWUgd2FybmluZyBmbGFncyBhcmUgbm90IGltcGxpZWQgYnkgXGZCXC1XYWxsXGZSLiAgU29tZSBvZgordGhlbSB3YXJuIGFib3V0IGNvbnN0cnVjdGlvbnMgdGhhdCB1c2VycyBnZW5lcmFsbHkgZG8gbm90IGNvbnNpZGVyCitxdWVzdGlvbmFibGUsIGJ1dCB3aGljaCBvY2Nhc2lvbmFsbHkgeW91IG1pZ2h0IHdpc2ggdG8gY2hlY2sgZm9yOworb3RoZXJzIHdhcm4gYWJvdXQgY29uc3RydWN0aW9ucyB0aGF0IGFyZSBuZWNlc3Nhcnkgb3IgaGFyZCB0byBhdm9pZCBpbgorc29tZSBjYXNlcywgYW5kIHRoZXJlIGlzIG5vIHNpbXBsZSB3YXkgdG8gbW9kaWZ5IHRoZSBjb2RlIHRvIHN1cHByZXNzCit0aGUgd2FybmluZy4gU29tZSBvZiB0aGVtIGFyZSBlbmFibGVkIGJ5IFxmQlwtV2V4dHJhXGZSIGJ1dCBtYW55IG9mCit0aGVtIG11c3QgYmUgZW5hYmxlZCBpbmRpdmlkdWFsbHkuCisuSVAgIlxmQlwtV2V4dHJhXGZSIiA0CisuSVggSXRlbSAiLVdleHRyYSIKK1RoaXMgZW5hYmxlcyBzb21lIGV4dHJhIHdhcm5pbmcgZmxhZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgYnkKK1wmXGZCXC1XYWxsXGZSLiAoVGhpcyBvcHRpb24gdXNlZCB0byBiZSBjYWxsZWQgXGZCXC1XXGZSLiAgVGhlIG9sZGVyCituYW1lIGlzIHN0aWxsIHN1cHBvcnRlZCwgYnV0IHRoZSBuZXdlciBuYW1lIGlzIG1vcmUgZGVzY3JpcHRpdmUuKQorLlNwCitcJlxmQlwtV2Nsb2JiZXJlZCAgCitcJlwtV2VtcHR5XC1ib2R5ICAKK1wmXC1XaWdub3JlZFwtcXVhbGlmaWVycyAKK1wmXC1XbWlzc2luZ1wtZmllbGRcLWluaXRpYWxpemVycyAgCitcJlwtV21pc3NpbmdcLXBhcmFtZXRlclwtdHlwZVxmUiAoQyBvbmx5KSAgCitcJlxmQlwtV29sZFwtc3R5bGVcLWRlY2xhcmF0aW9uXGZSIChDIG9ubHkpICAKK1wmXGZCXC1Xb3ZlcnJpZGVcLWluaXQgIAorXCZcLVdzaWduXC1jb21wYXJlICAKK1wmXC1XdHlwZVwtbGltaXRzICAKK1wmXC1XdW5pbml0aWFsaXplZCAgCitcJlwtV3VudXNlZFwtcGFyYW1ldGVyXGZSIChvbmx5IHdpdGhcZkIgXGZSXGZCXC1XdW51c2VkXGZSXGZCIFxmUm9yXGZCIFxmUlxmQlwtV2FsbFxmUikgCitcJlxmQlwtV3VudXNlZFwtYnV0XC1zZXRcLXBhcmFtZXRlclxmUiAob25seSB3aXRoXGZCIFxmUlxmQlwtV3VudXNlZFxmUlxmQiBcZlJvclxmQiBcZlJcZkJcLVdhbGxcZlIpICBcZkIgXGZSCisuU3AKK1RoZSBvcHRpb24gXGZCXC1XZXh0cmFcZlIgYWxzbyBwcmludHMgd2FybmluZyBtZXNzYWdlcyBmb3IgdGhlCitmb2xsb3dpbmcgY2FzZXM6CisuUlMgNAorLklQICJcKGJ1IiA0CitBIHBvaW50ZXIgaXMgY29tcGFyZWQgYWdhaW5zdCBpbnRlZ2VyIHplcm8gd2l0aCBcZkI8XGZSLCBcZkI8PVxmUiwKK1wmXGZCPlxmUiwgb3IgXGZCPj1cZlIuCisuSVAgIlwoYnUiIDQKKyhcKihDKyBvbmx5KSBBbiBlbnVtZXJhdG9yIGFuZCBhIG5vbi1lbnVtZXJhdG9yIGJvdGggYXBwZWFyIGluIGEKK2NvbmRpdGlvbmFsIGV4cHJlc3Npb24uCisuSVAgIlwoYnUiIDQKKyhcKihDKyBvbmx5KSBBbWJpZ3VvdXMgdmlydHVhbCBiYXNlcy4KKy5JUCAiXChidSIgNAorKFwqKEMrIG9ubHkpIFN1YnNjcmlwdGluZyBhbiBhcnJheSB0aGF0IGhhcyBiZWVuIGRlY2xhcmVkIFxmQnJlZ2lzdGVyXGZSLgorLklQICJcKGJ1IiA0CisoXCooQysgb25seSkgVGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgdmFyaWFibGUgdGhhdCBoYXMgYmVlbiBkZWNsYXJlZAorXCZcZkJyZWdpc3RlclxmUi4KKy5JUCAiXChidSIgNAorKFwqKEMrIG9ubHkpIEEgYmFzZSBjbGFzcyBpcyBub3QgaW5pdGlhbGl6ZWQgaW4gYSBkZXJpdmVkIGNsYXNzJ3MgY29weQorY29uc3RydWN0b3IuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1XY2hhclwtc3Vic2NyaXB0c1xmUiIgNAorLklYIEl0ZW0gIi1XY2hhci1zdWJzY3JpcHRzIgorV2FybiBpZiBhbiBhcnJheSBzdWJzY3JpcHQgaGFzIHR5cGUgXGYoQ1dcKihDYGNoYXJcKihDJ1xmUi4gIFRoaXMgaXMgYSBjb21tb24gY2F1c2UKK29mIGVycm9yLCBhcyBwcm9ncmFtbWVycyBvZnRlbiBmb3JnZXQgdGhhdCB0aGlzIHR5cGUgaXMgc2lnbmVkIG9uIHNvbWUKK21hY2hpbmVzLgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdjb21tZW50XGZSIiA0CisuSVggSXRlbSAiLVdjb21tZW50IgorV2FybiB3aGVuZXZlciBhIGNvbW1lbnQtc3RhcnQgc2VxdWVuY2UgXGZCLypcZlIgYXBwZWFycyBpbiBhIFxmQi8qXGZSCitjb21tZW50LCBvciB3aGVuZXZlciBhIEJhY2tzbGFzaC1OZXdsaW5lIGFwcGVhcnMgaW4gYSBcZkIvL1xmUiBjb21tZW50LgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdub1wtY292ZXJhZ2VcLW1pc21hdGNoXGZSIiA0CisuSVggSXRlbSAiLVduby1jb3ZlcmFnZS1taXNtYXRjaCIKK1dhcm4gaWYgZmVlZGJhY2sgcHJvZmlsZXMgZG8gbm90IG1hdGNoIHdoZW4gdXNpbmcgdGhlCitcJlxmQlwtZnByb2ZpbGVcLXVzZVxmUiBvcHRpb24uCitJZiBhIHNvdXJjZSBmaWxlIGlzIGNoYW5nZWQgYmV0d2VlbiBjb21waWxpbmcgd2l0aCBcZkJcLWZwcm9maWxlXC1nZW5cZlIgYW5kCit3aXRoIFxmQlwtZnByb2ZpbGVcLXVzZVxmUiwgdGhlIGZpbGVzIHdpdGggdGhlIHByb2ZpbGUgZmVlZGJhY2sgY2FuIGZhaWwKK3RvIG1hdGNoIHRoZSBzb3VyY2UgZmlsZSBhbmQgXHMtMUdDQ1xzMCBjYW5ub3QgdXNlIHRoZSBwcm9maWxlIGZlZWRiYWNrCitpbmZvcm1hdGlvbi4gIEJ5IGRlZmF1bHQsIHRoaXMgd2FybmluZyBpcyBlbmFibGVkIGFuZCBpcyB0cmVhdGVkIGFzIGFuCitlcnJvci4gIFxmQlwtV25vXC1jb3ZlcmFnZVwtbWlzbWF0Y2hcZlIgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUKK3dhcm5pbmcgb3IgXGZCXC1Xbm9cLWVycm9yPWNvdmVyYWdlXC1taXNtYXRjaFxmUiBjYW4gYmUgdXNlZCB0bworZGlzYWJsZSB0aGUgZXJyb3IuICBEaXNhYmxpbmcgdGhlIGVycm9yIGZvciB0aGlzIHdhcm5pbmcgY2FuIHJlc3VsdCBpbgorcG9vcmx5IG9wdGltaXplZCBjb2RlIGFuZCBpcyB1c2VmdWwgb25seSBpbiB0aGUKK2Nhc2Ugb2YgdmVyeSBtaW5vciBjaGFuZ2VzIHN1Y2ggYXMgYnVnIGZpeGVzIHRvIGFuIGV4aXN0aW5nIGNvZGUtYmFzZS4KK0NvbXBsZXRlbHkgZGlzYWJsaW5nIHRoZSB3YXJuaW5nIGlzIG5vdCByZWNvbW1lbmRlZC4KKy5JUCAiXGZCXC1Xbm9cLWNwcFxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tY3BwIgorKEMsIE9iamVjdGl2ZS1DLCBcKihDKywgT2JqZWN0aXZlXC1cKihDKyBhbmQgRm9ydHJhbiBvbmx5KQorLlNwCitTdXBwcmVzcyB3YXJuaW5nIG1lc3NhZ2VzIGVtaXR0ZWQgYnkgXGYoQ1dcKihDYCN3YXJuaW5nXCooQydcZlIgZGlyZWN0aXZlcy4KKy5JUCAiXGZCXC1XZG91YmxlXC1wcm9tb3Rpb25cZlIgKEMsIFwqKEMrLCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XZG91YmxlLXByb21vdGlvbiAoQywgLCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK0dpdmUgYSB3YXJuaW5nIHdoZW4gYSB2YWx1ZSBvZiB0eXBlIFxmKENXXCooQ2BmbG9hdFwqKEMnXGZSIGlzIGltcGxpY2l0bHkKK3Byb21vdGVkIHRvIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUi4gIENQVXMgd2l0aCBhIDMyXC1iaXQgXCooTCJzaW5nbGUtcHJlY2lzaW9uXCooUiIKK2Zsb2F0aW5nLXBvaW50IHVuaXQgaW1wbGVtZW50IFxmKENXXCooQ2BmbG9hdFwqKEMnXGZSIGluIGhhcmR3YXJlLCBidXQgZW11bGF0ZQorXCZcZihDV1wqKENgZG91YmxlXCooQydcZlIgaW4gc29mdHdhcmUuICBPbiBzdWNoIGEgbWFjaGluZSwgZG9pbmcgY29tcHV0YXRpb25zCit1c2luZyBcZihDV1wqKENgZG91YmxlXCooQydcZlIgdmFsdWVzIGlzIG11Y2ggbW9yZSBleHBlbnNpdmUgYmVjYXVzZSBvZiB0aGUKK292ZXJoZWFkIHJlcXVpcmVkIGZvciBzb2Z0d2FyZSBlbXVsYXRpb24uCisuU3AKK0l0IGlzIGVhc3kgdG8gYWNjaWRlbnRhbGx5IGRvIGNvbXB1dGF0aW9ucyB3aXRoIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiBiZWNhdXNlCitmbG9hdGluZy1wb2ludCBsaXRlcmFscyBhcmUgaW1wbGljaXRseSBvZiB0eXBlIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUi4gIEZvcgorZXhhbXBsZSwgaW46CisuU3AKKy5WYiA0CitcJiAgICAgICAgZmxvYXQgYXJlYShmbG9hdCByYWRpdXMpCitcJiAgICAgICAgeworXCYgICAgICAgICAgIHJldHVybiAzLjE0MTU5ICogcmFkaXVzICogcmFkaXVzOworXCYgICAgICAgIH0KKy5WZQorLlNwCit0aGUgY29tcGlsZXIgcGVyZm9ybXMgdGhlIGVudGlyZSBjb21wdXRhdGlvbiB3aXRoIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUgorYmVjYXVzZSB0aGUgZmxvYXRpbmctcG9pbnQgbGl0ZXJhbCBpcyBhIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUi4KKy5JUCAiXGZCXC1XZm9ybWF0XGZSIiA0CisuSVggSXRlbSAiLVdmb3JtYXQiCisuUEQgMAorLklQICJcZkJcLVdmb3JtYXQ9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1XZm9ybWF0PW4iCisuUEQKK0NoZWNrIGNhbGxzIHRvIFxmKENXXCooQ2BwcmludGZcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHNjYW5mXCooQydcZlIsIGV0Yy4sIHRvIG1ha2Ugc3VyZSB0aGF0Cit0aGUgYXJndW1lbnRzIHN1cHBsaWVkIGhhdmUgdHlwZXMgYXBwcm9wcmlhdGUgdG8gdGhlIGZvcm1hdCBzdHJpbmcKK3NwZWNpZmllZCwgYW5kIHRoYXQgdGhlIGNvbnZlcnNpb25zIHNwZWNpZmllZCBpbiB0aGUgZm9ybWF0IHN0cmluZyBtYWtlCitzZW5zZS4gIFRoaXMgaW5jbHVkZXMgc3RhbmRhcmQgZnVuY3Rpb25zLCBhbmQgb3RoZXJzIHNwZWNpZmllZCBieSBmb3JtYXQKK2F0dHJpYnV0ZXMsIGluIHRoZSBcZihDV1wqKENgcHJpbnRmXCooQydcZlIsCitcJlxmKENXXCooQ2BzY2FuZlwqKEMnXGZSLCBcZihDV1wqKENgc3RyZnRpbWVcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHN0cmZtb25cKihDJ1xmUiAoYW4gWC9PcGVuIGV4dGVuc2lvbiwKK25vdCBpbiB0aGUgQyBzdGFuZGFyZCkgZmFtaWxpZXMgKG9yIG90aGVyIHRhcmdldC1zcGVjaWZpYyBmYW1pbGllcykuCitXaGljaCBmdW5jdGlvbnMgYXJlIGNoZWNrZWQgd2l0aG91dCBmb3JtYXQgYXR0cmlidXRlcyBoYXZpbmcgYmVlbgorc3BlY2lmaWVkIGRlcGVuZHMgb24gdGhlIHN0YW5kYXJkIHZlcnNpb24gc2VsZWN0ZWQsIGFuZCBzdWNoIGNoZWNrcyBvZgorZnVuY3Rpb25zIHdpdGhvdXQgdGhlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgYXJlIGRpc2FibGVkIGJ5CitcJlxmQlwtZmZyZWVzdGFuZGluZ1xmUiBvciBcZkJcLWZub1wtYnVpbHRpblxmUi4KKy5TcAorVGhlIGZvcm1hdHMgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgZm9ybWF0IGZlYXR1cmVzIHN1cHBvcnRlZCBieSBccy0xR05VXHMwCitsaWJjIHZlcnNpb24gMi4yLiAgVGhlc2UgaW5jbHVkZSBhbGwgXHMtMUlTT1xzMCBDOTAgYW5kIEM5OSBmZWF0dXJlcywgYXMgd2VsbAorYXMgZmVhdHVyZXMgZnJvbSB0aGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbiBhbmQgc29tZSBccy0xQlNEXHMwIGFuZCBccy0xR05VXHMwCitleHRlbnNpb25zLiAgT3RoZXIgbGlicmFyeSBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBzdXBwb3J0IGFsbCB0aGVzZQorZmVhdHVyZXM7IFxzLTFHQ0NcczAgZG9lcyBub3Qgc3VwcG9ydCB3YXJuaW5nIGFib3V0IGZlYXR1cmVzIHRoYXQgZ28gYmV5b25kIGEKK3BhcnRpY3VsYXIgbGlicmFyeSdzIGxpbWl0YXRpb25zLiAgSG93ZXZlciwgaWYgXGZCXC1XcGVkYW50aWNcZlIgaXMgdXNlZAord2l0aCBcZkJcLVdmb3JtYXRcZlIsIHdhcm5pbmdzIGFyZSBnaXZlbiBhYm91dCBmb3JtYXQgZmVhdHVyZXMgbm90CitpbiB0aGUgc2VsZWN0ZWQgc3RhbmRhcmQgdmVyc2lvbiAoYnV0IG5vdCBmb3IgXGYoQ1dcKihDYHN0cmZtb25cKihDJ1xmUiBmb3JtYXRzLAorc2luY2UgdGhvc2UgYXJlIG5vdCBpbiBhbnkgdmVyc2lvbiBvZiB0aGUgQyBzdGFuZGFyZCkuCisuUlMgNAorLklQICJcZkJcLVdmb3JtYXQ9MVxmUiIgNAorLklYIEl0ZW0gIi1XZm9ybWF0PTEiCisuUEQgMAorLklQICJcZkJcLVdmb3JtYXRcZlIiIDQKKy5JWCBJdGVtICItV2Zvcm1hdCIKKy5QRAorT3B0aW9uIFxmQlwtV2Zvcm1hdFxmUiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtV2Zvcm1hdD0xXGZSLCBhbmQKK1wmXGZCXC1Xbm9cLWZvcm1hdFxmUiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtV2Zvcm1hdD0wXGZSLiAgU2luY2UKK1wmXGZCXC1XZm9ybWF0XGZSIGFsc28gY2hlY2tzIGZvciBudWxsIGZvcm1hdCBhcmd1bWVudHMgZm9yIHNldmVyYWwKK2Z1bmN0aW9ucywgXGZCXC1XZm9ybWF0XGZSIGFsc28gaW1wbGllcyBcZkJcLVdub25udWxsXGZSLiAgU29tZQorYXNwZWN0cyBvZiB0aGlzIGxldmVsIG9mIGZvcm1hdCBjaGVja2luZyBjYW4gYmUgZGlzYWJsZWQgYnkgdGhlCitvcHRpb25zOiBcZkJcLVdub1wtZm9ybWF0XC1jb250YWluc1wtbnVsXGZSLAorXCZcZkJcLVdub1wtZm9ybWF0XC1leHRyYVwtYXJnc1xmUiwgYW5kIFxmQlwtV25vXC1mb3JtYXRcLXplcm9cLWxlbmd0aFxmUi4KK1wmXGZCXC1XZm9ybWF0XGZSIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdub1wtZm9ybWF0XC1jb250YWluc1wtbnVsXGZSIiA0CisuSVggSXRlbSAiLVduby1mb3JtYXQtY29udGFpbnMtbnVsIgorSWYgXGZCXC1XZm9ybWF0XGZSIGlzIHNwZWNpZmllZCwgZG8gbm90IHdhcm4gYWJvdXQgZm9ybWF0IHN0cmluZ3MgdGhhdAorY29udGFpbiBccy0xTlVMXHMwIGJ5dGVzLgorLklQICJcZkJcLVdub1wtZm9ybWF0XC1leHRyYVwtYXJnc1xmUiIgNAorLklYIEl0ZW0gIi1Xbm8tZm9ybWF0LWV4dHJhLWFyZ3MiCitJZiBcZkJcLVdmb3JtYXRcZlIgaXMgc3BlY2lmaWVkLCBkbyBub3Qgd2FybiBhYm91dCBleGNlc3MgYXJndW1lbnRzIHRvIGEKK1wmXGYoQ1dcKihDYHByaW50ZlwqKEMnXGZSIG9yIFxmKENXXCooQ2BzY2FuZlwqKEMnXGZSIGZvcm1hdCBmdW5jdGlvbi4gIFRoZSBDIHN0YW5kYXJkIHNwZWNpZmllcwordGhhdCBzdWNoIGFyZ3VtZW50cyBhcmUgaWdub3JlZC4KKy5TcAorV2hlcmUgdGhlIHVudXNlZCBhcmd1bWVudHMgbGllIGJldHdlZW4gdXNlZCBhcmd1bWVudHMgdGhhdCBhcmUKK3NwZWNpZmllZCB3aXRoIFxmQiRcZlIgb3BlcmFuZCBudW1iZXIgc3BlY2lmaWNhdGlvbnMsIG5vcm1hbGx5Cit3YXJuaW5ncyBhcmUgc3RpbGwgZ2l2ZW4sIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBjb3VsZCBub3Qga25vdyB3aGF0Cit0eXBlIHRvIHBhc3MgdG8gXGYoQ1dcKihDYHZhX2FyZ1wqKEMnXGZSIHRvIHNraXAgdGhlIHVudXNlZCBhcmd1bWVudHMuICBIb3dldmVyLAoraW4gdGhlIGNhc2Ugb2YgXGYoQ1dcKihDYHNjYW5mXCooQydcZlIgZm9ybWF0cywgdGhpcyBvcHRpb24gc3VwcHJlc3NlcyB0aGUKK3dhcm5pbmcgaWYgdGhlIHVudXNlZCBhcmd1bWVudHMgYXJlIGFsbCBwb2ludGVycywgc2luY2UgdGhlIFNpbmdsZQorVW5peCBTcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBzdWNoIHVudXNlZCBhcmd1bWVudHMgYXJlIGFsbG93ZWQuCisuSVAgIlxmQlwtV25vXC1mb3JtYXRcLXplcm9cLWxlbmd0aFxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tZm9ybWF0LXplcm8tbGVuZ3RoIgorSWYgXGZCXC1XZm9ybWF0XGZSIGlzIHNwZWNpZmllZCwgZG8gbm90IHdhcm4gYWJvdXQgemVyby1sZW5ndGggZm9ybWF0cy4KK1RoZSBDIHN0YW5kYXJkIHNwZWNpZmllcyB0aGF0IHplcm8tbGVuZ3RoIGZvcm1hdHMgYXJlIGFsbG93ZWQuCisuSVAgIlxmQlwtV2Zvcm1hdD0yXGZSIiA0CisuSVggSXRlbSAiLVdmb3JtYXQ9MiIKK0VuYWJsZSBcZkJcLVdmb3JtYXRcZlIgcGx1cyBhZGRpdGlvbmFsIGZvcm1hdCBjaGVja3MuICBDdXJyZW50bHkKK2VxdWl2YWxlbnQgdG8gXGZCXC1XZm9ybWF0IFwtV2Zvcm1hdFwtbm9ubGl0ZXJhbCBcLVdmb3JtYXRcLXNlY3VyaXR5CitcJlwtV2Zvcm1hdFwteTJrXGZSLgorLklQICJcZkJcLVdmb3JtYXRcLW5vbmxpdGVyYWxcZlIiIDQKKy5JWCBJdGVtICItV2Zvcm1hdC1ub25saXRlcmFsIgorSWYgXGZCXC1XZm9ybWF0XGZSIGlzIHNwZWNpZmllZCwgYWxzbyB3YXJuIGlmIHRoZSBmb3JtYXQgc3RyaW5nIGlzIG5vdCBhCitzdHJpbmcgbGl0ZXJhbCBhbmQgc28gY2Fubm90IGJlIGNoZWNrZWQsIHVubGVzcyB0aGUgZm9ybWF0IGZ1bmN0aW9uCit0YWtlcyBpdHMgZm9ybWF0IGFyZ3VtZW50cyBhcyBhIFxmKENXXCooQ2B2YV9saXN0XCooQydcZlIuCisuSVAgIlxmQlwtV2Zvcm1hdFwtc2VjdXJpdHlcZlIiIDQKKy5JWCBJdGVtICItV2Zvcm1hdC1zZWN1cml0eSIKK0lmIFxmQlwtV2Zvcm1hdFxmUiBpcyBzcGVjaWZpZWQsIGFsc28gd2FybiBhYm91dCB1c2VzIG9mIGZvcm1hdAorZnVuY3Rpb25zIHRoYXQgcmVwcmVzZW50IHBvc3NpYmxlIHNlY3VyaXR5IHByb2JsZW1zLiAgQXQgcHJlc2VudCwgdGhpcword2FybnMgYWJvdXQgY2FsbHMgdG8gXGYoQ1dcKihDYHByaW50ZlwqKEMnXGZSIGFuZCBcZihDV1wqKENgc2NhbmZcKihDJ1xmUiBmdW5jdGlvbnMgd2hlcmUgdGhlCitmb3JtYXQgc3RyaW5nIGlzIG5vdCBhIHN0cmluZyBsaXRlcmFsIGFuZCB0aGVyZSBhcmUgbm8gZm9ybWF0IGFyZ3VtZW50cywKK2FzIGluIFxmKENXXCooQ2BwcmludGYgKGZvbyk7XCooQydcZlIuICBUaGlzIG1heSBiZSBhIHNlY3VyaXR5IGhvbGUgaWYgdGhlIGZvcm1hdAorc3RyaW5nIGNhbWUgZnJvbSB1bnRydXN0ZWQgaW5wdXQgYW5kIGNvbnRhaW5zIFxmQlxmKENCJW5cZkJcZlIuICAoVGhpcyBpcworY3VycmVudGx5IGEgc3Vic2V0IG9mIHdoYXQgXGZCXC1XZm9ybWF0XC1ub25saXRlcmFsXGZSIHdhcm5zIGFib3V0LCBidXQKK2luIGZ1dHVyZSB3YXJuaW5ncyBtYXkgYmUgYWRkZWQgdG8gXGZCXC1XZm9ybWF0XC1zZWN1cml0eVxmUiB0aGF0IGFyZSBub3QKK2luY2x1ZGVkIGluIFxmQlwtV2Zvcm1hdFwtbm9ubGl0ZXJhbFxmUi4pCisuSVAgIlxmQlwtV2Zvcm1hdFwteTJrXGZSIiA0CisuSVggSXRlbSAiLVdmb3JtYXQteTJrIgorSWYgXGZCXC1XZm9ybWF0XGZSIGlzIHNwZWNpZmllZCwgYWxzbyB3YXJuIGFib3V0IFxmKENXXCooQ2BzdHJmdGltZVwqKEMnXGZSCitmb3JtYXRzIHRoYXQgbWF5IHlpZWxkIG9ubHkgYSB0d28tZGlnaXQgeWVhci4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLVdub25udWxsXGZSIiA0CisuSVggSXRlbSAiLVdub25udWxsIgorV2FybiBhYm91dCBwYXNzaW5nIGEgbnVsbCBwb2ludGVyIGZvciBhcmd1bWVudHMgbWFya2VkIGFzCityZXF1aXJpbmcgYSBub24tbnVsbCB2YWx1ZSBieSB0aGUgXGYoQ1dcKihDYG5vbm51bGxcKihDJ1xmUiBmdW5jdGlvbiBhdHRyaWJ1dGUuCisuU3AKK1wmXGZCXC1Xbm9ubnVsbFxmUiBpcyBpbmNsdWRlZCBpbiBcZkJcLVdhbGxcZlIgYW5kIFxmQlwtV2Zvcm1hdFxmUi4gIEl0CitjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUgXGZCXC1Xbm9cLW5vbm51bGxcZlIgb3B0aW9uLgorLklQICJcZkJcLVdpbml0XC1zZWxmXGZSIChDLCBcKihDKywgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV2luaXQtc2VsZiAoQywgLCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gYWJvdXQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGVtc2VsdmVzLgorTm90ZSB0aGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIFxmQlwtV3VuaW5pdGlhbGl6ZWRcZlIgb3B0aW9uLgorLlNwCitGb3IgZXhhbXBsZSwgXHMtMUdDQ1xzMCB3YXJucyBhYm91dCBcZihDV1wqKENgaVwqKEMnXGZSIGJlaW5nIHVuaW5pdGlhbGl6ZWQgaW4gdGhlCitmb2xsb3dpbmcgc25pcHBldCBvbmx5IHdoZW4gXGZCXC1XaW5pdFwtc2VsZlxmUiBoYXMgYmVlbiBzcGVjaWZpZWQ6CisuU3AKKy5WYiA1CitcJiAgICAgICAgaW50IGYoKQorXCYgICAgICAgIHsKK1wmICAgICAgICAgIGludCBpID0gaTsKK1wmICAgICAgICAgIHJldHVybiBpOworXCYgICAgICAgIH0KKy5WZQorLlNwCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIgaW4gXCooQysuCisuSVAgIlxmQlwtV2ltcGxpY2l0XC1pbnRcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdpbXBsaWNpdC1pbnQgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIgorV2FybiB3aGVuIGEgZGVjbGFyYXRpb24gZG9lcyBub3Qgc3BlY2lmeSBhIHR5cGUuCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2ltcGxpY2l0XC1mdW5jdGlvblwtZGVjbGFyYXRpb25cZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdpbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitHaXZlIGEgd2FybmluZyB3aGVuZXZlciBhIGZ1bmN0aW9uIGlzIHVzZWQgYmVmb3JlIGJlaW5nIGRlY2xhcmVkLiBJbgorQzk5IG1vZGUgKFxmQlwtc3RkPWM5OVxmUiBvciBcZkJcLXN0ZD1nbnU5OVxmUiksIHRoaXMgd2FybmluZyBpcworZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBpdCBpcyBtYWRlIGludG8gYW4gZXJyb3IgYnkKK1wmXGZCXC1wZWRhbnRpY1wtZXJyb3JzXGZSLiBUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5CitcJlxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XaW1wbGljaXRcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdpbXBsaWNpdCAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitTYW1lIGFzIFxmQlwtV2ltcGxpY2l0XC1pbnRcZlIgYW5kIFxmQlwtV2ltcGxpY2l0XC1mdW5jdGlvblwtZGVjbGFyYXRpb25cZlIuCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2lnbm9yZWRcLXF1YWxpZmllcnNcZlIgKEMgYW5kIFwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdpZ25vcmVkLXF1YWxpZmllcnMgKEMgYW5kICBvbmx5KSIKK1dhcm4gaWYgdGhlIHJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24gaGFzIGEgdHlwZSBxdWFsaWZpZXIKK3N1Y2ggYXMgXGYoQ1dcKihDYGNvbnN0XCooQydcZlIuICBGb3IgXHMtMUlTT1xzMCBDIHN1Y2ggYSB0eXBlIHF1YWxpZmllciBoYXMgbm8gZWZmZWN0LAorc2luY2UgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGEgZnVuY3Rpb24gaXMgbm90IGFuIGx2YWx1ZS4KK0ZvciBcKihDKywgdGhlIHdhcm5pbmcgaXMgb25seSBlbWl0dGVkIGZvciBzY2FsYXIgdHlwZXMgb3IgXGYoQ1dcKihDYHZvaWRcKihDJ1xmUi4KK1wmXHMtMUlTT1xzMCBDIHByb2hpYml0cyBxdWFsaWZpZWQgXGYoQ1dcKihDYHZvaWRcKihDJ1xmUiByZXR1cm4gdHlwZXMgb24gZnVuY3Rpb24KK2RlZmluaXRpb25zLCBzbyBzdWNoIHJldHVybiB0eXBlcyBhbHdheXMgcmVjZWl2ZSBhIHdhcm5pbmcKK2V2ZW4gd2l0aG91dCB0aGlzIG9wdGlvbi4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSBcZkJcLVdleHRyYVxmUi4KKy5JUCAiXGZCXC1XbWFpblxmUiIgNAorLklYIEl0ZW0gIi1XbWFpbiIKK1dhcm4gaWYgdGhlIHR5cGUgb2YgXGZCbWFpblxmUiBpcyBzdXNwaWNpb3VzLiAgXGZCbWFpblxmUiBzaG91bGQgYmUKK2EgZnVuY3Rpb24gd2l0aCBleHRlcm5hbCBsaW5rYWdlLCByZXR1cm5pbmcgaW50LCB0YWtpbmcgZWl0aGVyIHplcm8KK2FyZ3VtZW50cywgdHdvLCBvciB0aHJlZSBhcmd1bWVudHMgb2YgYXBwcm9wcmlhdGUgdHlwZXMuICBUaGlzIHdhcm5pbmcKK2lzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBcKihDKyBhbmQgaXMgZW5hYmxlZCBieSBlaXRoZXIgXGZCXC1XYWxsXGZSCitvciBcZkJcLVdwZWRhbnRpY1xmUi4KKy5JUCAiXGZCXC1XbWlzc2luZ1wtYnJhY2VzXGZSIiA0CisuSVggSXRlbSAiLVdtaXNzaW5nLWJyYWNlcyIKK1dhcm4gaWYgYW4gYWdncmVnYXRlIG9yIHVuaW9uIGluaXRpYWxpemVyIGlzIG5vdCBmdWxseSBicmFja2V0ZWQuICBJbgordGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgaW5pdGlhbGl6ZXIgZm9yIFxmQmFcZlIgaXMgbm90IGZ1bGx5CiticmFja2V0ZWQsIGJ1dCB0aGF0IGZvciBcZkJiXGZSIGlzIGZ1bGx5IGJyYWNrZXRlZC4gIFRoaXMgd2FybmluZyBpcworZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIgaW4gQy4KKy5TcAorLlZiIDIKK1wmICAgICAgICBpbnQgYVsyXVsyXSA9IHsgMCwgMSwgMiwgMyB9OworXCYgICAgICAgIGludCBiWzJdWzJdID0geyB7IDAsIDEgfSwgeyAyLCAzIH0gfTsKKy5WZQorLlNwCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV21pc3NpbmdcLWluY2x1ZGVcLWRpcnNcZlIgKEMsIFwqKEMrLCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XbWlzc2luZy1pbmNsdWRlLWRpcnMgKEMsICwgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIGlmIGEgdXNlci1zdXBwbGllZCBpbmNsdWRlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4KKy5JUCAiXGZCXC1XcGFyZW50aGVzZXNcZlIiIDQKKy5JWCBJdGVtICItV3BhcmVudGhlc2VzIgorV2FybiBpZiBwYXJlbnRoZXNlcyBhcmUgb21pdHRlZCBpbiBjZXJ0YWluIGNvbnRleHRzLCBzdWNoCithcyB3aGVuIHRoZXJlIGlzIGFuIGFzc2lnbm1lbnQgaW4gYSBjb250ZXh0IHdoZXJlIGEgdHJ1dGggdmFsdWUKK2lzIGV4cGVjdGVkLCBvciB3aGVuIG9wZXJhdG9ycyBhcmUgbmVzdGVkIHdob3NlIHByZWNlZGVuY2UgcGVvcGxlCitvZnRlbiBnZXQgY29uZnVzZWQgYWJvdXQuCisuU3AKK0Fsc28gd2FybiBpZiBhIGNvbXBhcmlzb24gbGlrZSBcZkJ4PD15PD16XGZSIGFwcGVhcnM7IHRoaXMgaXMKK2VxdWl2YWxlbnQgdG8gXGZCKHg8PXkgPyAxIDogMCkgPD0gelxmUiwgd2hpY2ggaXMgYSBkaWZmZXJlbnQKK2ludGVycHJldGF0aW9uIGZyb20gdGhhdCBvZiBvcmRpbmFyeSBtYXRoZW1hdGljYWwgbm90YXRpb24uCisuU3AKK0Fsc28gd2FybiBhYm91dCBjb25zdHJ1Y3Rpb25zIHdoZXJlIHRoZXJlIG1heSBiZSBjb25mdXNpb24gdG8gd2hpY2gKK1wmXGYoQ1dcKihDYGlmXCooQydcZlIgc3RhdGVtZW50IGFuIFxmKENXXCooQ2BlbHNlXCooQydcZlIgYnJhbmNoIGJlbG9uZ3MuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YKK3N1Y2ggYSBjYXNlOgorLlNwCisuVmIgNworXCYgICAgICAgIHsKK1wmICAgICAgICAgIGlmIChhKQorXCYgICAgICAgICAgICBpZiAoYikKK1wmICAgICAgICAgICAgICBmb28gKCk7CitcJiAgICAgICAgICBlbHNlCitcJiAgICAgICAgICAgIGJhciAoKTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorSW4gQy9cKihDKywgZXZlcnkgXGYoQ1dcKihDYGVsc2VcKihDJ1xmUiBicmFuY2ggYmVsb25ncyB0byB0aGUgaW5uZXJtb3N0IHBvc3NpYmxlCitcJlxmKENXXCooQ2BpZlwqKEMnXGZSIHN0YXRlbWVudCwgd2hpY2ggaW4gdGhpcyBleGFtcGxlIGlzIFxmKENXXCooQ2BpZiAoYilcKihDJ1xmUi4gIFRoaXMgaXMKK29mdGVuIG5vdCB3aGF0IHRoZSBwcm9ncmFtbWVyIGV4cGVjdGVkLCBhcyBpbGx1c3RyYXRlZCBpbiB0aGUgYWJvdmUKK2V4YW1wbGUgYnkgaW5kZW50YXRpb24gdGhlIHByb2dyYW1tZXIgY2hvc2UuICBXaGVuIHRoZXJlIGlzIHRoZQorcG90ZW50aWFsIGZvciB0aGlzIGNvbmZ1c2lvbiwgXHMtMUdDQ1xzMCBpc3N1ZXMgYSB3YXJuaW5nIHdoZW4gdGhpcyBmbGFnCitpcyBzcGVjaWZpZWQuICBUbyBlbGltaW5hdGUgdGhlIHdhcm5pbmcsIGFkZCBleHBsaWNpdCBicmFjZXMgYXJvdW5kCit0aGUgaW5uZXJtb3N0IFxmKENXXCooQ2BpZlwqKEMnXGZSIHN0YXRlbWVudCBzbyB0aGVyZSBpcyBubyB3YXkgdGhlIFxmKENXXCooQ2BlbHNlXCooQydcZlIKK2NhbiBiZWxvbmcgdG8gdGhlIGVuY2xvc2luZyBcZihDV1wqKENgaWZcKihDJ1xmUi4gIFRoZSByZXN1bHRpbmcgY29kZQorbG9va3MgbGlrZSB0aGlzOgorLlNwCisuVmIgOQorXCYgICAgICAgIHsKK1wmICAgICAgICAgIGlmIChhKQorXCYgICAgICAgICAgICB7CitcJiAgICAgICAgICAgICAgaWYgKGIpCitcJiAgICAgICAgICAgICAgICBmb28gKCk7CitcJiAgICAgICAgICAgICAgZWxzZQorXCYgICAgICAgICAgICAgICAgYmFyICgpOworXCYgICAgICAgICAgICB9CitcJiAgICAgICAgfQorLlZlCisuU3AKK0Fsc28gd2FybiBmb3IgZGFuZ2Vyb3VzIHVzZXMgb2YgdGhlIFxzLTFHTlVcczAgZXh0ZW5zaW9uIHRvCitcJlxmKENXXCooQ2A/OlwqKEMnXGZSIHdpdGggb21pdHRlZCBtaWRkbGUgb3BlcmFuZC4gV2hlbiB0aGUgY29uZGl0aW9uCitpbiB0aGUgXGYoQ1dcKihDYD9cKihDJ1xmUjogb3BlcmF0b3IgaXMgYSBib29sZWFuIGV4cHJlc3Npb24sIHRoZSBvbWl0dGVkIHZhbHVlIGlzCithbHdheXMgMS4gIE9mdGVuIHByb2dyYW1tZXJzIGV4cGVjdCBpdCB0byBiZSBhIHZhbHVlIGNvbXB1dGVkCitpbnNpZGUgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaW5zdGVhZC4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdzZXF1ZW5jZVwtcG9pbnRcZlIiIDQKKy5JWCBJdGVtICItV3NlcXVlbmNlLXBvaW50IgorV2FybiBhYm91dCBjb2RlIHRoYXQgbWF5IGhhdmUgdW5kZWZpbmVkIHNlbWFudGljcyBiZWNhdXNlIG9mIHZpb2xhdGlvbnMKK29mIHNlcXVlbmNlIHBvaW50IHJ1bGVzIGluIHRoZSBDIGFuZCBcKihDKyBzdGFuZGFyZHMuCisuU3AKK1RoZSBDIGFuZCBcKihDKyBzdGFuZGFyZHMgZGVmaW5lIHRoZSBvcmRlciBpbiB3aGljaCBleHByZXNzaW9ucyBpbiBhIEMvXCooQysKK3Byb2dyYW0gYXJlIGV2YWx1YXRlZCBpbiB0ZXJtcyBvZiBcZklzZXF1ZW5jZSBwb2ludHNcZlIsIHdoaWNoIHJlcHJlc2VudAorYSBwYXJ0aWFsIG9yZGVyaW5nIGJldHdlZW4gdGhlIGV4ZWN1dGlvbiBvZiBwYXJ0cyBvZiB0aGUgcHJvZ3JhbTogdGhvc2UKK2V4ZWN1dGVkIGJlZm9yZSB0aGUgc2VxdWVuY2UgcG9pbnQsIGFuZCB0aG9zZSBleGVjdXRlZCBhZnRlciBpdC4gIFRoZXNlCitvY2N1ciBhZnRlciB0aGUgZXZhbHVhdGlvbiBvZiBhIGZ1bGwgZXhwcmVzc2lvbiAob25lIHdoaWNoIGlzIG5vdCBwYXJ0CitvZiBhIGxhcmdlciBleHByZXNzaW9uKSwgYWZ0ZXIgdGhlIGV2YWx1YXRpb24gb2YgdGhlIGZpcnN0IG9wZXJhbmQgb2YgYQorXCZcZihDV1wqKENgJiZcKihDJ1xmUiwgXGYoQ1dcKihDYHx8XCooQydcZlIsIFxmKENXXCooQ2A/IDpcKihDJ1xmUiBvciBcZihDV1wqKENgLFwqKEMnXGZSIChjb21tYSkgb3BlcmF0b3IsIGJlZm9yZSBhCitmdW5jdGlvbiBpcyBjYWxsZWQgKGJ1dCBhZnRlciB0aGUgZXZhbHVhdGlvbiBvZiBpdHMgYXJndW1lbnRzIGFuZCB0aGUKK2V4cHJlc3Npb24gZGVub3RpbmcgdGhlIGNhbGxlZCBmdW5jdGlvbiksIGFuZCBpbiBjZXJ0YWluIG90aGVyIHBsYWNlcy4KK090aGVyIHRoYW4gYXMgZXhwcmVzc2VkIGJ5IHRoZSBzZXF1ZW5jZSBwb2ludCBydWxlcywgdGhlIG9yZGVyIG9mCitldmFsdWF0aW9uIG9mIHN1YmV4cHJlc3Npb25zIG9mIGFuIGV4cHJlc3Npb24gaXMgbm90IHNwZWNpZmllZC4gIEFsbAordGhlc2UgcnVsZXMgZGVzY3JpYmUgb25seSBhIHBhcnRpYWwgb3JkZXIgcmF0aGVyIHRoYW4gYSB0b3RhbCBvcmRlciwKK3NpbmNlLCBmb3IgZXhhbXBsZSwgaWYgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGhpbiBvbmUgZXhwcmVzc2lvbgord2l0aCBubyBzZXF1ZW5jZSBwb2ludCBiZXR3ZWVuIHRoZW0sIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZnVuY3Rpb25zCithcmUgY2FsbGVkIGlzIG5vdCBzcGVjaWZpZWQuICBIb3dldmVyLCB0aGUgc3RhbmRhcmRzIGNvbW1pdHRlZSBoYXZlCitydWxlZCB0aGF0IGZ1bmN0aW9uIGNhbGxzIGRvIG5vdCBvdmVybGFwLgorLlNwCitJdCBpcyBub3Qgc3BlY2lmaWVkIHdoZW4gYmV0d2VlbiBzZXF1ZW5jZSBwb2ludHMgbW9kaWZpY2F0aW9ucyB0byB0aGUKK3ZhbHVlcyBvZiBvYmplY3RzIHRha2UgZWZmZWN0LiAgUHJvZ3JhbXMgd2hvc2UgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGlzCitoYXZlIHVuZGVmaW5lZCBiZWhhdmlvcjsgdGhlIEMgYW5kIFwqKEMrIHN0YW5kYXJkcyBzcGVjaWZ5IHRoYXQgXCooTCJCZXR3ZWVuCit0aGUgcHJldmlvdXMgYW5kIG5leHQgc2VxdWVuY2UgcG9pbnQgYW4gb2JqZWN0IHNoYWxsIGhhdmUgaXRzIHN0b3JlZAordmFsdWUgbW9kaWZpZWQgYXQgbW9zdCBvbmNlIGJ5IHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24uCitGdXJ0aGVybW9yZSwgdGhlIHByaW9yIHZhbHVlIHNoYWxsIGJlIHJlYWQgb25seSB0byBkZXRlcm1pbmUgdGhlIHZhbHVlCit0byBiZSBzdG9yZWQuXCooUiIuICBJZiBhIHByb2dyYW0gYnJlYWtzIHRoZXNlIHJ1bGVzLCB0aGUgcmVzdWx0cyBvbiBhbnkKK3BhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gYXJlIGVudGlyZWx5IHVucHJlZGljdGFibGUuCisuU3AKK0V4YW1wbGVzIG9mIGNvZGUgd2l0aCB1bmRlZmluZWQgYmVoYXZpb3IgYXJlIFxmKENXXCooQ2BhID0gYSsrO1wqKEMnXGZSLCBcZihDV1wqKENgYVtuXQorPSBiW24rK11cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGFbaSsrXSA9IGk7XCooQydcZlIuICBTb21lIG1vcmUgY29tcGxpY2F0ZWQgY2FzZXMgYXJlIG5vdAorZGlhZ25vc2VkIGJ5IHRoaXMgb3B0aW9uLCBhbmQgaXQgbWF5IGdpdmUgYW4gb2NjYXNpb25hbCBmYWxzZSBwb3NpdGl2ZQorcmVzdWx0LCBidXQgaW4gZ2VuZXJhbCBpdCBoYXMgYmVlbiBmb3VuZCBmYWlybHkgZWZmZWN0aXZlIGF0IGRldGVjdGluZwordGhpcyBzb3J0IG9mIHByb2JsZW0gaW4gcHJvZ3JhbXMuCisuU3AKK1RoZSBzdGFuZGFyZCBpcyB3b3JkZWQgY29uZnVzaW5nbHksIHRoZXJlZm9yZSB0aGVyZSBpcyBzb21lIGRlYmF0ZQorb3ZlciB0aGUgcHJlY2lzZSBtZWFuaW5nIG9mIHRoZSBzZXF1ZW5jZSBwb2ludCBydWxlcyBpbiBzdWJ0bGUgY2FzZXMuCitMaW5rcyB0byBkaXNjdXNzaW9ucyBvZiB0aGUgcHJvYmxlbSwgaW5jbHVkaW5nIHByb3Bvc2VkIGZvcm1hbAorZGVmaW5pdGlvbnMsIG1heSBiZSBmb3VuZCBvbiB0aGUgXHMtMUdDQ1xzMCByZWFkaW5ncyBwYWdlLCBhdAorPFxmQmh0dHA6Ly9nY2MuZ251Lm9yZy9yZWFkaW5ncy5odG1sXGZSPi4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSIGZvciBDIGFuZCBcKihDKy4KKy5JUCAiXGZCXC1Xbm9cLXJldHVyblwtbG9jYWxcLWFkZHJcZlIiIDQKKy5JWCBJdGVtICItV25vLXJldHVybi1sb2NhbC1hZGRyIgorRG8gbm90IHdhcm4gYWJvdXQgcmV0dXJuaW5nIGEgcG9pbnRlciAob3IgaW4gXCooQyssIGEgcmVmZXJlbmNlKSB0byBhCit2YXJpYWJsZSB0aGF0IGdvZXMgb3V0IG9mIHNjb3BlIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorLklQICJcZkJcLVdyZXR1cm5cLXR5cGVcZlIiIDQKKy5JWCBJdGVtICItV3JldHVybi10eXBlIgorV2FybiB3aGVuZXZlciBhIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aCBhIHJldHVybiB0eXBlIHRoYXQgZGVmYXVsdHMKK3RvIFxmKENXXCooQ2BpbnRcKihDJ1xmUi4gIEFsc28gd2FybiBhYm91dCBhbnkgXGYoQ1dcKihDYHJldHVyblwqKEMnXGZSIHN0YXRlbWVudCB3aXRoIG5vCityZXR1cm4gdmFsdWUgaW4gYSBmdW5jdGlvbiB3aG9zZSByZXR1cm4gdHlwZSBpcyBub3QgXGYoQ1dcKihDYHZvaWRcKihDJ1xmUgorKGZhbGxpbmcgb2ZmIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkgaXMgY29uc2lkZXJlZCByZXR1cm5pbmcKK3dpdGhvdXQgYSB2YWx1ZSksIGFuZCBhYm91dCBhIFxmKENXXCooQ2ByZXR1cm5cKihDJ1xmUiBzdGF0ZW1lbnQgd2l0aCBhbgorZXhwcmVzc2lvbiBpbiBhIGZ1bmN0aW9uIHdob3NlIHJldHVybiB0eXBlIGlzIFxmKENXXCooQ2B2b2lkXCooQydcZlIuCisuU3AKK0ZvciBcKihDKywgYSBmdW5jdGlvbiB3aXRob3V0IHJldHVybiB0eXBlIGFsd2F5cyBwcm9kdWNlcyBhIGRpYWdub3N0aWMKK21lc3NhZ2UsIGV2ZW4gd2hlbiBcZkJcLVdub1wtcmV0dXJuXC10eXBlXGZSIGlzIHNwZWNpZmllZC4gIFRoZSBvbmx5CitleGNlcHRpb25zIGFyZSBcZkJtYWluXGZSIGFuZCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBzeXN0ZW0gaGVhZGVycy4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdzd2l0Y2hcZlIiIDQKKy5JWCBJdGVtICItV3N3aXRjaCIKK1dhcm4gd2hlbmV2ZXIgYSBcZihDV1wqKENgc3dpdGNoXCooQydcZlIgc3RhdGVtZW50IGhhcyBhbiBpbmRleCBvZiBlbnVtZXJhdGVkIHR5cGUKK2FuZCBsYWNrcyBhIFxmKENXXCooQ2BjYXNlXCooQydcZlIgZm9yIG9uZSBvciBtb3JlIG9mIHRoZSBuYW1lZCBjb2RlcyBvZiB0aGF0CitlbnVtZXJhdGlvbi4gIChUaGUgcHJlc2VuY2Ugb2YgYSBcZihDV1wqKENgZGVmYXVsdFwqKEMnXGZSIGxhYmVsIHByZXZlbnRzIHRoaXMKK3dhcm5pbmcuKSAgXGYoQ1dcKihDYGNhc2VcKihDJ1xmUiBsYWJlbHMgb3V0c2lkZSB0aGUgZW51bWVyYXRpb24gcmFuZ2UgYWxzbworcHJvdm9rZSB3YXJuaW5ncyB3aGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgKGV2ZW4gaWYgdGhlcmUgaXMgYQorXCZcZihDV1wqKENgZGVmYXVsdFwqKEMnXGZSIGxhYmVsKS4KK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1Xc3dpdGNoXC1kZWZhdWx0XGZSIiA0CisuSVggSXRlbSAiLVdzd2l0Y2gtZGVmYXVsdCIKK1dhcm4gd2hlbmV2ZXIgYSBcZihDV1wqKENgc3dpdGNoXCooQydcZlIgc3RhdGVtZW50IGRvZXMgbm90IGhhdmUgYSBcZihDV1wqKENgZGVmYXVsdFwqKEMnXGZSCitjYXNlLgorLklQICJcZkJcLVdzd2l0Y2hcLWVudW1cZlIiIDQKKy5JWCBJdGVtICItV3N3aXRjaC1lbnVtIgorV2FybiB3aGVuZXZlciBhIFxmKENXXCooQ2Bzd2l0Y2hcKihDJ1xmUiBzdGF0ZW1lbnQgaGFzIGFuIGluZGV4IG9mIGVudW1lcmF0ZWQgdHlwZQorYW5kIGxhY2tzIGEgXGYoQ1dcKihDYGNhc2VcKihDJ1xmUiBmb3Igb25lIG9yIG1vcmUgb2YgdGhlIG5hbWVkIGNvZGVzIG9mIHRoYXQKK2VudW1lcmF0aW9uLiAgXGYoQ1dcKihDYGNhc2VcKihDJ1xmUiBsYWJlbHMgb3V0c2lkZSB0aGUgZW51bWVyYXRpb24gcmFuZ2UgYWxzbworcHJvdm9rZSB3YXJuaW5ncyB3aGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQuICBUaGUgb25seSBkaWZmZXJlbmNlCitiZXR3ZWVuIFxmQlwtV3N3aXRjaFxmUiBhbmQgdGhpcyBvcHRpb24gaXMgdGhhdCB0aGlzIG9wdGlvbiBnaXZlcyBhCit3YXJuaW5nIGFib3V0IGFuIG9taXR0ZWQgZW51bWVyYXRpb24gY29kZSBldmVuIGlmIHRoZXJlIGlzIGEKK1wmXGYoQ1dcKihDYGRlZmF1bHRcKihDJ1xmUiBsYWJlbC4KKy5JUCAiXGZCXC1Xc3luY1wtbmFuZFxmUiAoQyBhbmQgXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV3N5bmMtbmFuZCAoQyBhbmQgIG9ubHkpIgorV2FybiB3aGVuIFxmKENXXCooQ2BfXHxfc3luY19mZXRjaF9hbmRfbmFuZFwqKEMnXGZSIGFuZCBcZihDV1wqKENgX1x8X3N5bmNfbmFuZF9hbmRfZmV0Y2hcKihDJ1xmUgorYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSB1c2VkLiAgVGhlc2UgZnVuY3Rpb25zIGNoYW5nZWQgc2VtYW50aWNzIGluIFxzLTFHQ0NcczAgNC40LgorLklQICJcZkJcLVd0cmlncmFwaHNcZlIiIDQKKy5JWCBJdGVtICItV3RyaWdyYXBocyIKK1dhcm4gaWYgYW55IHRyaWdyYXBocyBhcmUgZW5jb3VudGVyZWQgdGhhdCBtaWdodCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YKK3RoZSBwcm9ncmFtICh0cmlncmFwaHMgd2l0aGluIGNvbW1lbnRzIGFyZSBub3Qgd2FybmVkIGFib3V0KS4KK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XdW51c2VkXC1idXRcLXNldFwtcGFyYW1ldGVyXGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtYnV0LXNldC1wYXJhbWV0ZXIiCitXYXJuIHdoZW5ldmVyIGEgZnVuY3Rpb24gcGFyYW1ldGVyIGlzIGFzc2lnbmVkIHRvLCBidXQgb3RoZXJ3aXNlIHVudXNlZAorKGFzaWRlIGZyb20gaXRzIGRlY2xhcmF0aW9uKS4KKy5TcAorVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIHVzZSB0aGUgXGZCdW51c2VkXGZSIGF0dHJpYnV0ZS4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSBcZkJcLVd1bnVzZWRcZlIgdG9nZXRoZXIgd2l0aAorXCZcZkJcLVdleHRyYVxmUi4KKy5JUCAiXGZCXC1XdW51c2VkXC1idXRcLXNldFwtdmFyaWFibGVcZlIiIDQKKy5JWCBJdGVtICItV3VudXNlZC1idXQtc2V0LXZhcmlhYmxlIgorV2FybiB3aGVuZXZlciBhIGxvY2FsIHZhcmlhYmxlIGlzIGFzc2lnbmVkIHRvLCBidXQgb3RoZXJ3aXNlIHVudXNlZAorKGFzaWRlIGZyb20gaXRzIGRlY2xhcmF0aW9uKS4KK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5TcAorVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIHVzZSB0aGUgXGZCdW51c2VkXGZSIGF0dHJpYnV0ZS4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSBcZkJcLVd1bnVzZWRcZlIsIHdoaWNoIGlzIGVuYWJsZWQKK2J5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XdW51c2VkXC1mdW5jdGlvblxmUiIgNAorLklYIEl0ZW0gIi1XdW51c2VkLWZ1bmN0aW9uIgorV2FybiB3aGVuZXZlciBhIHN0YXRpYyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBidXQgbm90IGRlZmluZWQgb3IgYQorbm9uLWlubGluZSBzdGF0aWMgZnVuY3Rpb24gaXMgdW51c2VkLgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVd1bnVzZWRcLWxhYmVsXGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtbGFiZWwiCitXYXJuIHdoZW5ldmVyIGEgbGFiZWwgaXMgZGVjbGFyZWQgYnV0IG5vdCB1c2VkLgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLlNwCitUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSBcZkJ1bnVzZWRcZlIgYXR0cmlidXRlLgorLklQICJcZkJcLVd1bnVzZWRcLWxvY2FsXC10eXBlZGVmc1xmUiAoQywgT2JqZWN0aXZlLUMsIFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtbG9jYWwtdHlwZWRlZnMgKEMsIE9iamVjdGl2ZS1DLCAgYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIHdoZW4gYSB0eXBlZGVmIGxvY2FsbHkgZGVmaW5lZCBpbiBhIGZ1bmN0aW9uIGlzIG5vdCB1c2VkLgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVd1bnVzZWRcLXBhcmFtZXRlclxmUiIgNAorLklYIEl0ZW0gIi1XdW51c2VkLXBhcmFtZXRlciIKK1dhcm4gd2hlbmV2ZXIgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgaXMgdW51c2VkIGFzaWRlIGZyb20gaXRzIGRlY2xhcmF0aW9uLgorLlNwCitUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSBcZkJ1bnVzZWRcZlIgYXR0cmlidXRlLgorLklQICJcZkJcLVdub1wtdW51c2VkXC1yZXN1bHRcZlIiIDQKKy5JWCBJdGVtICItV25vLXVudXNlZC1yZXN1bHQiCitEbyBub3Qgd2FybiBpZiBhIGNhbGxlciBvZiBhIGZ1bmN0aW9uIG1hcmtlZCB3aXRoIGF0dHJpYnV0ZQorXCZcZihDV1wqKENgd2Fybl91bnVzZWRfcmVzdWx0XCooQydcZlIgZG9lcyBub3QgdXNlCitpdHMgcmV0dXJuIHZhbHVlLiBUaGUgZGVmYXVsdCBpcyBcZkJcLVd1bnVzZWRcLXJlc3VsdFxmUi4KKy5JUCAiXGZCXC1XdW51c2VkXC12YXJpYWJsZVxmUiIgNAorLklYIEl0ZW0gIi1XdW51c2VkLXZhcmlhYmxlIgorV2FybiB3aGVuZXZlciBhIGxvY2FsIHZhcmlhYmxlIG9yIG5vbi1jb25zdGFudCBzdGF0aWMgdmFyaWFibGUgaXMgdW51c2VkCithc2lkZSBmcm9tIGl0cyBkZWNsYXJhdGlvbi4KK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5TcAorVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIHVzZSB0aGUgXGZCdW51c2VkXGZSIGF0dHJpYnV0ZS4KKy5JUCAiXGZCXC1XdW51c2VkXC12YWx1ZVxmUiIgNAorLklYIEl0ZW0gIi1XdW51c2VkLXZhbHVlIgorV2FybiB3aGVuZXZlciBhIHN0YXRlbWVudCBjb21wdXRlcyBhIHJlc3VsdCB0aGF0IGlzIGV4cGxpY2l0bHkgbm90Cit1c2VkLiBUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgY2FzdCB0aGUgdW51c2VkIGV4cHJlc3Npb24gdG8KK1wmXGZCdm9pZFxmUi4gVGhpcyBpbmNsdWRlcyBhbiBleHByZXNzaW9uLXN0YXRlbWVudCBvciB0aGUgbGVmdC1oYW5kCitzaWRlIG9mIGEgY29tbWEgZXhwcmVzc2lvbiB0aGF0IGNvbnRhaW5zIG5vIHNpZGUgZWZmZWN0cy4gRm9yIGV4YW1wbGUsCithbiBleHByZXNzaW9uIHN1Y2ggYXMgXGZCeFtpLGpdXGZSIGNhdXNlcyBhIHdhcm5pbmcsIHdoaWxlCitcJlxmQnhbKHZvaWQpaSxqXVxmUiBkb2VzIG5vdC4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVd1bnVzZWRcZlIiIDQKKy5JWCBJdGVtICItV3VudXNlZCIKK0FsbCB0aGUgYWJvdmUgXGZCXC1XdW51c2VkXGZSIG9wdGlvbnMgY29tYmluZWQuCisuU3AKK0luIG9yZGVyIHRvIGdldCBhIHdhcm5pbmcgYWJvdXQgYW4gdW51c2VkIGZ1bmN0aW9uIHBhcmFtZXRlciwgeW91IG11c3QKK2VpdGhlciBzcGVjaWZ5IFxmQlwtV2V4dHJhIFwtV3VudXNlZFxmUiAobm90ZSB0aGF0IFxmQlwtV2FsbFxmUiBpbXBsaWVzCitcJlxmQlwtV3VudXNlZFxmUiksIG9yIHNlcGFyYXRlbHkgc3BlY2lmeSBcZkJcLVd1bnVzZWRcLXBhcmFtZXRlclxmUi4KKy5JUCAiXGZCXC1XdW5pbml0aWFsaXplZFxmUiIgNAorLklYIEl0ZW0gIi1XdW5pbml0aWFsaXplZCIKK1dhcm4gaWYgYW4gYXV0b21hdGljIHZhcmlhYmxlIGlzIHVzZWQgd2l0aG91dCBmaXJzdCBiZWluZyBpbml0aWFsaXplZAorb3IgaWYgYSB2YXJpYWJsZSBtYXkgYmUgY2xvYmJlcmVkIGJ5IGEgXGYoQ1dcKihDYHNldGptcFwqKEMnXGZSIGNhbGwuIEluIFwqKEMrLAord2FybiBpZiBhIG5vbi1zdGF0aWMgcmVmZXJlbmNlIG9yIG5vbi1zdGF0aWMgXGZCY29uc3RcZlIgbWVtYmVyCithcHBlYXJzIGluIGEgY2xhc3Mgd2l0aG91dCBjb25zdHJ1Y3RvcnMuCisuU3AKK0lmIHlvdSB3YW50IHRvIHdhcm4gYWJvdXQgY29kZSB0aGF0IHVzZXMgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgb2YgdGhlCit2YXJpYWJsZSBpbiBpdHMgb3duIGluaXRpYWxpemVyLCB1c2UgdGhlIFxmQlwtV2luaXRcLXNlbGZcZlIgb3B0aW9uLgorLlNwCitUaGVzZSB3YXJuaW5ncyBvY2N1ciBmb3IgaW5kaXZpZHVhbCB1bmluaXRpYWxpemVkIG9yIGNsb2JiZXJlZAorZWxlbWVudHMgb2Ygc3RydWN0dXJlLCB1bmlvbiBvciBhcnJheSB2YXJpYWJsZXMgYXMgd2VsbCBhcyBmb3IKK3ZhcmlhYmxlcyB0aGF0IGFyZSB1bmluaXRpYWxpemVkIG9yIGNsb2JiZXJlZCBhcyBhIHdob2xlLiAgVGhleSBkbworbm90IG9jY3VyIGZvciB2YXJpYWJsZXMgb3IgZWxlbWVudHMgZGVjbGFyZWQgXGYoQ1dcKihDYHZvbGF0aWxlXCooQydcZlIuICBCZWNhdXNlCit0aGVzZSB3YXJuaW5ncyBkZXBlbmQgb24gb3B0aW1pemF0aW9uLCB0aGUgZXhhY3QgdmFyaWFibGVzIG9yIGVsZW1lbnRzCitmb3Igd2hpY2ggdGhlcmUgYXJlIHdhcm5pbmdzIGRlcGVuZHMgb24gdGhlIHByZWNpc2Ugb3B0aW1pemF0aW9uCitvcHRpb25zIGFuZCB2ZXJzaW9uIG9mIFxzLTFHQ0NcczAgdXNlZC4KKy5TcAorTm90ZSB0aGF0IHRoZXJlIG1heSBiZSBubyB3YXJuaW5nIGFib3V0IGEgdmFyaWFibGUgdGhhdCBpcyB1c2VkIG9ubHkKK3RvIGNvbXB1dGUgYSB2YWx1ZSB0aGF0IGl0c2VsZiBpcyBuZXZlciB1c2VkLCBiZWNhdXNlIHN1Y2gKK2NvbXB1dGF0aW9ucyBtYXkgYmUgZGVsZXRlZCBieSBkYXRhIGZsb3cgYW5hbHlzaXMgYmVmb3JlIHRoZSB3YXJuaW5ncworYXJlIHByaW50ZWQuCisuSVAgIlxmQlwtV21heWJlXC11bmluaXRpYWxpemVkXGZSIiA0CisuSVggSXRlbSAiLVdtYXliZS11bmluaXRpYWxpemVkIgorRm9yIGFuIGF1dG9tYXRpYyB2YXJpYWJsZSwgaWYgdGhlcmUgZXhpc3RzIGEgcGF0aCBmcm9tIHRoZSBmdW5jdGlvbgorZW50cnkgdG8gYSB1c2Ugb2YgdGhlIHZhcmlhYmxlIHRoYXQgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB0aGVyZSBleGlzdAorc29tZSBvdGhlciBwYXRocyBmb3Igd2hpY2ggdGhlIHZhcmlhYmxlIGlzIG5vdCBpbml0aWFsaXplZCwgdGhlIGNvbXBpbGVyCitlbWl0cyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IHByb3ZlIHRoZSB1bmluaXRpYWxpemVkIHBhdGhzIGFyZSBub3QKK2V4ZWN1dGVkIGF0IHJ1biB0aW1lLiBUaGVzZSB3YXJuaW5ncyBhcmUgbWFkZSBvcHRpb25hbCBiZWNhdXNlIFxzLTFHQ0NcczAgaXMKK25vdCBzbWFydCBlbm91Z2ggdG8gc2VlIGFsbCB0aGUgcmVhc29ucyB3aHkgdGhlIGNvZGUgbWlnaHQgYmUgY29ycmVjdAoraW4gc3BpdGUgb2YgYXBwZWFyaW5nIHRvIGhhdmUgYW4gZXJyb3IuICBIZXJlIGlzIG9uZSBleGFtcGxlIG9mIGhvdwordGhpcyBjYW4gaGFwcGVuOgorLlNwCisuVmIgMTIKK1wmICAgICAgICB7CitcJiAgICAgICAgICBpbnQgeDsKK1wmICAgICAgICAgIHN3aXRjaCAoeSkKK1wmICAgICAgICAgICAgeworXCYgICAgICAgICAgICBjYXNlIDE6IHggPSAxOworXCYgICAgICAgICAgICAgIGJyZWFrOworXCYgICAgICAgICAgICBjYXNlIDI6IHggPSA0OworXCYgICAgICAgICAgICAgIGJyZWFrOworXCYgICAgICAgICAgICBjYXNlIDM6IHggPSA1OworXCYgICAgICAgICAgICB9CitcJiAgICAgICAgICBmb28gKHgpOworXCYgICAgICAgIH0KKy5WZQorLlNwCitJZiB0aGUgdmFsdWUgb2YgXGYoQ1dcKihDYHlcKihDJ1xmUiBpcyBhbHdheXMgMSwgMiBvciAzLCB0aGVuIFxmKENXXCooQ2B4XCooQydcZlIgaXMKK2Fsd2F5cyBpbml0aWFsaXplZCwgYnV0IFxzLTFHQ0NcczAgZG9lc24ndCBrbm93IHRoaXMuIFRvIHN1cHByZXNzIHRoZQord2FybmluZywgeW91IG5lZWQgdG8gcHJvdmlkZSBhIGRlZmF1bHQgY2FzZSB3aXRoIFxmSWFzc2VydFxmUlx8KDApIG9yCitzaW1pbGFyIGNvZGUuCisuU3AKK1RoaXMgb3B0aW9uIGFsc28gd2FybnMgd2hlbiBhIG5vbi12b2xhdGlsZSBhdXRvbWF0aWMgdmFyaWFibGUgbWlnaHQgYmUKK2NoYW5nZWQgYnkgYSBjYWxsIHRvIFxmKENXXCooQ2Bsb25nam1wXCooQydcZlIuICBUaGVzZSB3YXJuaW5ncyBhcyB3ZWxsIGFyZSBwb3NzaWJsZQorb25seSBpbiBvcHRpbWl6aW5nIGNvbXBpbGF0aW9uLgorLlNwCitUaGUgY29tcGlsZXIgc2VlcyBvbmx5IHRoZSBjYWxscyB0byBcZihDV1wqKENgc2V0am1wXCooQydcZlIuICBJdCBjYW5ub3Qga25vdword2hlcmUgXGYoQ1dcKihDYGxvbmdqbXBcKihDJ1xmUiB3aWxsIGJlIGNhbGxlZDsgaW4gZmFjdCwgYSBzaWduYWwgaGFuZGxlciBjb3VsZAorY2FsbCBpdCBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvZGUuICBBcyBhIHJlc3VsdCwgeW91IG1heSBnZXQgYSB3YXJuaW5nCitldmVuIHdoZW4gdGhlcmUgaXMgaW4gZmFjdCBubyBwcm9ibGVtIGJlY2F1c2UgXGYoQ1dcKihDYGxvbmdqbXBcKihDJ1xmUiBjYW5ub3QKK2luIGZhY3QgYmUgY2FsbGVkIGF0IHRoZSBwbGFjZSB0aGF0IHdvdWxkIGNhdXNlIGEgcHJvYmxlbS4KKy5TcAorU29tZSBzcHVyaW91cyB3YXJuaW5ncyBjYW4gYmUgYXZvaWRlZCBpZiB5b3UgZGVjbGFyZSBhbGwgdGhlIGZ1bmN0aW9ucworeW91IHVzZSB0aGF0IG5ldmVyIHJldHVybiBhcyBcZihDV1wqKENgbm9yZXR1cm5cKihDJ1xmUi4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSIG9yIFxmQlwtV2V4dHJhXGZSLgorLklQICJcZkJcLVd1bmtub3duXC1wcmFnbWFzXGZSIiA0CisuSVggSXRlbSAiLVd1bmtub3duLXByYWdtYXMiCitXYXJuIHdoZW4gYSBcZihDV1wqKENgI3ByYWdtYVwqKEMnXGZSIGRpcmVjdGl2ZSBpcyBlbmNvdW50ZXJlZCB0aGF0IGlzIG5vdCB1bmRlcnN0b29kIGJ5IAorXCZccy0xR0NDXHMwLiAgSWYgdGhpcyBjb21tYW5kLWxpbmUgb3B0aW9uIGlzIHVzZWQsIHdhcm5pbmdzIGFyZSBldmVuIGlzc3VlZAorZm9yIHVua25vd24gcHJhZ21hcyBpbiBzeXN0ZW0gaGVhZGVyIGZpbGVzLiAgVGhpcyBpcyBub3QgdGhlIGNhc2UgaWYKK3RoZSB3YXJuaW5ncyBhcmUgb25seSBlbmFibGVkIGJ5IHRoZSBcZkJcLVdhbGxcZlIgY29tbWFuZC1saW5lIG9wdGlvbi4KKy5JUCAiXGZCXC1Xbm9cLXByYWdtYXNcZlIiIDQKKy5JWCBJdGVtICItV25vLXByYWdtYXMiCitEbyBub3Qgd2FybiBhYm91dCBtaXN1c2VzIG9mIHByYWdtYXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBhcmFtZXRlcnMsCitpbnZhbGlkIHN5bnRheCwgb3IgY29uZmxpY3RzIGJldHdlZW4gcHJhZ21hcy4gIFNlZSBhbHNvCitcJlxmQlwtV3Vua25vd25cLXByYWdtYXNcZlIuCisuSVAgIlxmQlwtV3N0cmljdFwtYWxpYXNpbmdcZlIiIDQKKy5JWCBJdGVtICItV3N0cmljdC1hbGlhc2luZyIKK1RoaXMgb3B0aW9uIGlzIG9ubHkgYWN0aXZlIHdoZW4gXGZCXC1mc3RyaWN0XC1hbGlhc2luZ1xmUiBpcyBhY3RpdmUuCitJdCB3YXJucyBhYm91dCBjb2RlIHRoYXQgbWlnaHQgYnJlYWsgdGhlIHN0cmljdCBhbGlhc2luZyBydWxlcyB0aGF0IHRoZQorY29tcGlsZXIgaXMgdXNpbmcgZm9yIG9wdGltaXphdGlvbi4gIFRoZSB3YXJuaW5nIGRvZXMgbm90IGNhdGNoIGFsbAorY2FzZXMsIGJ1dCBkb2VzIGF0dGVtcHQgdG8gY2F0Y2ggdGhlIG1vcmUgY29tbW9uIHBpdGZhbGxzLiAgSXQgaXMKK2luY2x1ZGVkIGluIFxmQlwtV2FsbFxmUi4KK0l0IGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1Xc3RyaWN0XC1hbGlhc2luZz0zXGZSCisuSVAgIlxmQlwtV3N0cmljdFwtYWxpYXNpbmc9blxmUiIgNAorLklYIEl0ZW0gIi1Xc3RyaWN0LWFsaWFzaW5nPW4iCitUaGlzIG9wdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIFxmQlwtZnN0cmljdFwtYWxpYXNpbmdcZlIgaXMgYWN0aXZlLgorSXQgd2FybnMgYWJvdXQgY29kZSB0aGF0IG1pZ2h0IGJyZWFrIHRoZSBzdHJpY3QgYWxpYXNpbmcgcnVsZXMgdGhhdCB0aGUKK2NvbXBpbGVyIGlzIHVzaW5nIGZvciBvcHRpbWl6YXRpb24uCitIaWdoZXIgbGV2ZWxzIGNvcnJlc3BvbmQgdG8gaGlnaGVyIGFjY3VyYWN5IChmZXdlciBmYWxzZSBwb3NpdGl2ZXMpLgorSGlnaGVyIGxldmVscyBhbHNvIGNvcnJlc3BvbmQgdG8gbW9yZSBlZmZvcnQsIHNpbWlsYXIgdG8gdGhlIHdheSBcZkJcLU9cZlIgCit3b3Jrcy4KK1wmXGZCXC1Xc3RyaWN0XC1hbGlhc2luZ1xmUiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtV3N0cmljdFwtYWxpYXNpbmc9M1xmUi4KKy5TcAorTGV2ZWwgMTogTW9zdCBhZ2dyZXNzaXZlLCBxdWljaywgbGVhc3QgYWNjdXJhdGUuCitQb3NzaWJseSB1c2VmdWwgd2hlbiBoaWdoZXIgbGV2ZWxzCitkbyBub3Qgd2FybiBidXQgXGZCXC1mc3RyaWN0XC1hbGlhc2luZ1xmUiBzdGlsbCBicmVha3MgdGhlIGNvZGUsIGFzIGl0IGhhcyB2ZXJ5IGZldworZmFsc2UgbmVnYXRpdmVzLiAgSG93ZXZlciwgaXQgaGFzIG1hbnkgZmFsc2UgcG9zaXRpdmVzLgorV2FybnMgZm9yIGFsbCBwb2ludGVyIGNvbnZlcnNpb25zIGJldHdlZW4gcG9zc2libHkgaW5jb21wYXRpYmxlIHR5cGVzLAorZXZlbiBpZiBuZXZlciBkZXJlZmVyZW5jZWQuICBSdW5zIGluIHRoZSBmcm9udCBlbmQgb25seS4KKy5TcAorTGV2ZWwgMjogQWdncmVzc2l2ZSwgcXVpY2ssIG5vdCB0b28gcHJlY2lzZS4KK01heSBzdGlsbCBoYXZlIG1hbnkgZmFsc2UgcG9zaXRpdmVzIChub3QgYXMgbWFueSBhcyBsZXZlbCAxIHRob3VnaCksCithbmQgZmV3IGZhbHNlIG5lZ2F0aXZlcyAoYnV0IHBvc3NpYmx5IG1vcmUgdGhhbiBsZXZlbCAxKS4KK1VubGlrZSBsZXZlbCAxLCBpdCBvbmx5IHdhcm5zIHdoZW4gYW4gYWRkcmVzcyBpcyB0YWtlbi4gIFdhcm5zIGFib3V0CitpbmNvbXBsZXRlIHR5cGVzLiAgUnVucyBpbiB0aGUgZnJvbnQgZW5kIG9ubHkuCisuU3AKK0xldmVsIDMgKGRlZmF1bHQgZm9yIFxmQlwtV3N0cmljdFwtYWxpYXNpbmdcZlIpOgorU2hvdWxkIGhhdmUgdmVyeSBmZXcgZmFsc2UgcG9zaXRpdmVzIGFuZCBmZXcgZmFsc2UKK25lZ2F0aXZlcy4gIFNsaWdodGx5IHNsb3dlciB0aGFuIGxldmVscyAxIG9yIDIgd2hlbiBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZC4KK1Rha2VzIGNhcmUgb2YgdGhlIGNvbW1vbiBwdW4rZGVyZWZlcmVuY2UgcGF0dGVybiBpbiB0aGUgZnJvbnQgZW5kOgorXCZcZihDV1wqKENgKihpbnQqKSZzb21lX2Zsb2F0XCooQydcZlIuCitJZiBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZCwgaXQgYWxzbyBydW5zIGluIHRoZSBiYWNrIGVuZCwgd2hlcmUgaXQgZGVhbHMKK3dpdGggbXVsdGlwbGUgc3RhdGVtZW50IGNhc2VzIHVzaW5nIGZsb3ctc2Vuc2l0aXZlIHBvaW50cy10byBpbmZvcm1hdGlvbi4KK09ubHkgd2FybnMgd2hlbiB0aGUgY29udmVydGVkIHBvaW50ZXIgaXMgZGVyZWZlcmVuY2VkLgorRG9lcyBub3Qgd2FybiBhYm91dCBpbmNvbXBsZXRlIHR5cGVzLgorLklQICJcZkJcLVdzdHJpY3RcLW92ZXJmbG93XGZSIiA0CisuSVggSXRlbSAiLVdzdHJpY3Qtb3ZlcmZsb3ciCisuUEQgMAorLklQICJcZkJcLVdzdHJpY3RcLW92ZXJmbG93PVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItV3N0cmljdC1vdmVyZmxvdz1uIgorLlBECitUaGlzIG9wdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIFxmQlwtZnN0cmljdFwtb3ZlcmZsb3dcZlIgaXMgYWN0aXZlLgorSXQgd2FybnMgYWJvdXQgY2FzZXMgd2hlcmUgdGhlIGNvbXBpbGVyIG9wdGltaXplcyBiYXNlZCBvbiB0aGUKK2Fzc3VtcHRpb24gdGhhdCBzaWduZWQgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIuICBOb3RlIHRoYXQgaXQgZG9lcyBub3QKK3dhcm4gYWJvdXQgYWxsIGNhc2VzIHdoZXJlIHRoZSBjb2RlIG1pZ2h0IG92ZXJmbG93OiBpdCBvbmx5IHdhcm5zCithYm91dCBjYXNlcyB3aGVyZSB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBzb21lIG9wdGltaXphdGlvbi4gIFRodXMKK3RoaXMgd2FybmluZyBkZXBlbmRzIG9uIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwuCisuU3AKK0FuIG9wdGltaXphdGlvbiB0aGF0IGFzc3VtZXMgdGhhdCBzaWduZWQgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIgaXMKK3BlcmZlY3RseSBzYWZlIGlmIHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBhcmUgc3VjaCB0aGF0CitvdmVyZmxvdyBuZXZlciBkb2VzLCBpbiBmYWN0LCBvY2N1ci4gIFRoZXJlZm9yZSB0aGlzIHdhcm5pbmcgY2FuCitlYXNpbHkgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlOiBhIHdhcm5pbmcgYWJvdXQgY29kZSB0aGF0IGlzIG5vdAorYWN0dWFsbHkgYSBwcm9ibGVtLiAgVG8gaGVscCBmb2N1cyBvbiBpbXBvcnRhbnQgaXNzdWVzLCBzZXZlcmFsCit3YXJuaW5nIGxldmVscyBhcmUgZGVmaW5lZC4gIE5vIHdhcm5pbmdzIGFyZSBpc3N1ZWQgZm9yIHRoZSB1c2Ugb2YKK3VuZGVmaW5lZCBzaWduZWQgb3ZlcmZsb3cgd2hlbiBlc3RpbWF0aW5nIGhvdyBtYW55IGl0ZXJhdGlvbnMgYSBsb29wCityZXF1aXJlcywgaW4gcGFydGljdWxhciB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgYSBsb29wIHdpbGwgYmUKK2V4ZWN1dGVkIGF0IGFsbC4KKy5SUyA0CisuSVAgIlxmQlwtV3N0cmljdFwtb3ZlcmZsb3c9MVxmUiIgNAorLklYIEl0ZW0gIi1Xc3RyaWN0LW92ZXJmbG93PTEiCitXYXJuIGFib3V0IGNhc2VzIHRoYXQgYXJlIGJvdGggcXVlc3Rpb25hYmxlIGFuZCBlYXN5IHRvIGF2b2lkLiAgRm9yCitleGFtcGxlLCAgd2l0aCBcZkJcLWZzdHJpY3RcLW92ZXJmbG93XGZSLCB0aGUgY29tcGlsZXIgc2ltcGxpZmllcworXCZcZihDV1wqKENgeCArIDEgPiB4XCooQydcZlIgdG8gXGYoQ1cxXGZSLiAgVGhpcyBsZXZlbCBvZgorXCZcZkJcLVdzdHJpY3RcLW92ZXJmbG93XGZSIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSOyBoaWdoZXIgbGV2ZWxzCithcmUgbm90LCBhbmQgbXVzdCBiZSBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKy5JUCAiXGZCXC1Xc3RyaWN0XC1vdmVyZmxvdz0yXGZSIiA0CisuSVggSXRlbSAiLVdzdHJpY3Qtb3ZlcmZsb3c9MiIKK0Fsc28gd2FybiBhYm91dCBvdGhlciBjYXNlcyB3aGVyZSBhIGNvbXBhcmlzb24gaXMgc2ltcGxpZmllZCB0byBhCitjb25zdGFudC4gIEZvciBleGFtcGxlOiBcZihDV1wqKENgYWJzICh4KSA+PSAwXCooQydcZlIuICBUaGlzIGNhbiBvbmx5IGJlCitzaW1wbGlmaWVkIHdoZW4gXGZCXC1mc3RyaWN0XC1vdmVyZmxvd1xmUiBpcyBpbiBlZmZlY3QsIGJlY2F1c2UKK1wmXGYoQ1dcKihDYGFicyAoSU5UX01JTilcKihDJ1xmUiBvdmVyZmxvd3MgdG8gXGYoQ1dcKihDYElOVF9NSU5cKihDJ1xmUiwgd2hpY2ggaXMgbGVzcyB0aGFuCit6ZXJvLiAgXGZCXC1Xc3RyaWN0XC1vdmVyZmxvd1xmUiAod2l0aCBubyBsZXZlbCkgaXMgdGhlIHNhbWUgYXMKK1wmXGZCXC1Xc3RyaWN0XC1vdmVyZmxvdz0yXGZSLgorLklQICJcZkJcLVdzdHJpY3RcLW92ZXJmbG93PTNcZlIiIDQKKy5JWCBJdGVtICItV3N0cmljdC1vdmVyZmxvdz0zIgorQWxzbyB3YXJuIGFib3V0IG90aGVyIGNhc2VzIHdoZXJlIGEgY29tcGFyaXNvbiBpcyBzaW1wbGlmaWVkLiAgRm9yCitleGFtcGxlOiBcZihDV1wqKENgeCArIDEgPiAxXCooQydcZlIgaXMgc2ltcGxpZmllZCB0byBcZihDV1wqKENgeCA+IDBcKihDJ1xmUi4KKy5JUCAiXGZCXC1Xc3RyaWN0XC1vdmVyZmxvdz00XGZSIiA0CisuSVggSXRlbSAiLVdzdHJpY3Qtb3ZlcmZsb3c9NCIKK0Fsc28gd2FybiBhYm91dCBvdGhlciBzaW1wbGlmaWNhdGlvbnMgbm90IGNvdmVyZWQgYnkgdGhlIGFib3ZlIGNhc2VzLgorRm9yIGV4YW1wbGU6IFxmKENXXCooQ2AoeCAqIDEwKSAvIDVcKihDJ1xmUiBpcyBzaW1wbGlmaWVkIHRvIFxmKENXXCooQ2B4ICogMlwqKEMnXGZSLgorLklQICJcZkJcLVdzdHJpY3RcLW92ZXJmbG93PTVcZlIiIDQKKy5JWCBJdGVtICItV3N0cmljdC1vdmVyZmxvdz01IgorQWxzbyB3YXJuIGFib3V0IGNhc2VzIHdoZXJlIHRoZSBjb21waWxlciByZWR1Y2VzIHRoZSBtYWduaXR1ZGUgb2YgYQorY29uc3RhbnQgaW52b2x2ZWQgaW4gYSBjb21wYXJpc29uLiAgRm9yIGV4YW1wbGU6IFxmKENXXCooQ2B4ICsgMiA+IHlcKihDJ1xmUiBpcworc2ltcGxpZmllZCB0byBcZihDV1wqKENgeCArIDEgPj0geVwqKEMnXGZSLiAgVGhpcyBpcyByZXBvcnRlZCBvbmx5IGF0IHRoZQoraGlnaGVzdCB3YXJuaW5nIGxldmVsIGJlY2F1c2UgdGhpcyBzaW1wbGlmaWNhdGlvbiBhcHBsaWVzIHRvIG1hbnkKK2NvbXBhcmlzb25zLCBzbyB0aGlzIHdhcm5pbmcgbGV2ZWwgZ2l2ZXMgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZgorZmFsc2UgcG9zaXRpdmVzLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtV3N1Z2dlc3RcLWF0dHJpYnV0ZT1cZlJbXGZCcHVyZVxmUnxcZkJjb25zdFxmUnxcZkJub3JldHVyblxmUnxcZkJmb3JtYXRcZlJdIiA0CisuSVggSXRlbSAiLVdzdWdnZXN0LWF0dHJpYnV0ZT1bcHVyZXxjb25zdHxub3JldHVybnxmb3JtYXRdIgorV2FybiBmb3IgY2FzZXMgd2hlcmUgYWRkaW5nIGFuIGF0dHJpYnV0ZSBtYXkgYmUgYmVuZWZpY2lhbC4gVGhlCithdHRyaWJ1dGVzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYXJlIGxpc3RlZCBiZWxvdy4KKy5SUyA0CisuSVAgIlxmQlwtV3N1Z2dlc3RcLWF0dHJpYnV0ZT1wdXJlXGZSIiA0CisuSVggSXRlbSAiLVdzdWdnZXN0LWF0dHJpYnV0ZT1wdXJlIgorLlBEIDAKKy5JUCAiXGZCXC1Xc3VnZ2VzdFwtYXR0cmlidXRlPWNvbnN0XGZSIiA0CisuSVggSXRlbSAiLVdzdWdnZXN0LWF0dHJpYnV0ZT1jb25zdCIKKy5JUCAiXGZCXC1Xc3VnZ2VzdFwtYXR0cmlidXRlPW5vcmV0dXJuXGZSIiA0CisuSVggSXRlbSAiLVdzdWdnZXN0LWF0dHJpYnV0ZT1ub3JldHVybiIKKy5QRAorV2FybiBhYm91dCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBjYW5kaWRhdGVzIGZvciBhdHRyaWJ1dGVzCitcJlxmKENXXCooQ2BwdXJlXCooQydcZlIsIFxmKENXXCooQ2Bjb25zdFwqKEMnXGZSIG9yIFxmKENXXCooQ2Bub3JldHVyblwqKEMnXGZSLiAgVGhlIGNvbXBpbGVyIG9ubHkgd2FybnMgZm9yCitmdW5jdGlvbnMgdmlzaWJsZSBpbiBvdGhlciBjb21waWxhdGlvbiB1bml0cyBvciAoaW4gdGhlIGNhc2Ugb2YgXGYoQ1dcKihDYHB1cmVcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYGNvbnN0XCooQydcZlIpIGlmIGl0IGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG5vcm1hbGx5LiBBIGZ1bmN0aW9uCityZXR1cm5zIG5vcm1hbGx5IGlmIGl0IGRvZXNuJ3QgY29udGFpbiBhbiBpbmZpbml0ZSBsb29wIG9yIHJldHVybiBhYm5vcm1hbGx5CitieSB0aHJvd2luZywgY2FsbGluZyBcZihDV1wqKENgYWJvcnQoKVwqKEMnXGZSIG9yIHRyYXBwaW5nLiAgVGhpcyBhbmFseXNpcyByZXF1aXJlcyBvcHRpb24KK1wmXGZCXC1maXBhXC1wdXJlXC1jb25zdFxmUiwgd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQKK2hpZ2hlci4gIEhpZ2hlciBvcHRpbWl6YXRpb24gbGV2ZWxzIGltcHJvdmUgdGhlIGFjY3VyYWN5IG9mIHRoZSBhbmFseXNpcy4KKy5JUCAiXGZCXC1Xc3VnZ2VzdFwtYXR0cmlidXRlPWZvcm1hdFxmUiIgNAorLklYIEl0ZW0gIi1Xc3VnZ2VzdC1hdHRyaWJ1dGU9Zm9ybWF0IgorLlBEIDAKKy5JUCAiXGZCXC1XbWlzc2luZ1wtZm9ybWF0XC1hdHRyaWJ1dGVcZlIiIDQKKy5JWCBJdGVtICItV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSIKKy5QRAorV2FybiBhYm91dCBmdW5jdGlvbiBwb2ludGVycyB0aGF0IG1pZ2h0IGJlIGNhbmRpZGF0ZXMgZm9yIFxmKENXXCooQ2Bmb3JtYXRcKihDJ1xmUgorYXR0cmlidXRlcy4gIE5vdGUgdGhlc2UgYXJlIG9ubHkgcG9zc2libGUgY2FuZGlkYXRlcywgbm90IGFic29sdXRlIG9uZXMuCitcJlxzLTFHQ0NcczAgZ3Vlc3NlcyB0aGF0IGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGggXGYoQ1dcKihDYGZvcm1hdFwqKEMnXGZSIGF0dHJpYnV0ZXMgdGhhdAorYXJlIHVzZWQgaW4gYXNzaWdubWVudCwgaW5pdGlhbGl6YXRpb24sIHBhcmFtZXRlciBwYXNzaW5nIG9yIHJldHVybgorc3RhdGVtZW50cyBzaG91bGQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgXGYoQ1dcKihDYGZvcm1hdFwqKEMnXGZSIGF0dHJpYnV0ZSBpbiB0aGUKK3Jlc3VsdGluZyB0eXBlLiAgSS5lLiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIGFzc2lnbm1lbnQgb3IKK2luaXRpYWxpemF0aW9uLCB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyIHZhcmlhYmxlLCBvciB0aGUgcmV0dXJuIHR5cGUKK29mIHRoZSBjb250YWluaW5nIGZ1bmN0aW9uIHJlc3BlY3RpdmVseSBzaG91bGQgYWxzbyBoYXZlIGEgXGYoQ1dcKihDYGZvcm1hdFwqKEMnXGZSCithdHRyaWJ1dGUgdG8gYXZvaWQgdGhlIHdhcm5pbmcuCisuU3AKK1wmXHMtMUdDQ1xzMCBhbHNvIHdhcm5zIGFib3V0IGZ1bmN0aW9uIGRlZmluaXRpb25zIHRoYXQgbWlnaHQgYmUKK2NhbmRpZGF0ZXMgZm9yIFxmKENXXCooQ2Bmb3JtYXRcKihDJ1xmUiBhdHRyaWJ1dGVzLiAgQWdhaW4sIHRoZXNlIGFyZSBvbmx5Citwb3NzaWJsZSBjYW5kaWRhdGVzLiAgXHMtMUdDQ1xzMCBndWVzc2VzIHRoYXQgXGYoQ1dcKihDYGZvcm1hdFwqKEMnXGZSIGF0dHJpYnV0ZXMKK21pZ2h0IGJlIGFwcHJvcHJpYXRlIGZvciBhbnkgZnVuY3Rpb24gdGhhdCBjYWxscyBhIGZ1bmN0aW9uIGxpa2UKK1wmXGYoQ1dcKihDYHZwcmludGZcKihDJ1xmUiBvciBcZihDV1wqKENgdnNjYW5mXCooQydcZlIsIGJ1dCB0aGlzIG1pZ2h0IG5vdCBhbHdheXMgYmUgdGhlCitjYXNlLCBhbmQgc29tZSBmdW5jdGlvbnMgZm9yIHdoaWNoIFxmKENXXCooQ2Bmb3JtYXRcKihDJ1xmUiBhdHRyaWJ1dGVzIGFyZQorYXBwcm9wcmlhdGUgbWF5IG5vdCBiZSBkZXRlY3RlZC4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLVdhcnJheVwtYm91bmRzXGZSIiA0CisuSVggSXRlbSAiLVdhcnJheS1ib3VuZHMiCitUaGlzIG9wdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIFxmQlwtZnRyZWVcLXZycFxmUiBpcyBhY3RpdmUKKyhkZWZhdWx0IGZvciBcZkJcLU8yXGZSIGFuZCBhYm92ZSkuIEl0IHdhcm5zIGFib3V0IHN1YnNjcmlwdHMgdG8gYXJyYXlzCit0aGF0IGFyZSBhbHdheXMgb3V0IG9mIGJvdW5kcy4gVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdub1wtZGl2XC1ieVwtemVyb1xmUiIgNAorLklYIEl0ZW0gIi1Xbm8tZGl2LWJ5LXplcm8iCitEbyBub3Qgd2FybiBhYm91dCBjb21waWxlLXRpbWUgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvLiAgRmxvYXRpbmctcG9pbnQKK2RpdmlzaW9uIGJ5IHplcm8gaXMgbm90IHdhcm5lZCBhYm91dCwgYXMgaXQgY2FuIGJlIGEgbGVnaXRpbWF0ZSB3YXkgb2YKK29idGFpbmluZyBpbmZpbml0aWVzIGFuZCBOYU5zLgorLklQICJcZkJcLVdzeXN0ZW1cLWhlYWRlcnNcZlIiIDQKKy5JWCBJdGVtICItV3N5c3RlbS1oZWFkZXJzIgorUHJpbnQgd2FybmluZyBtZXNzYWdlcyBmb3IgY29uc3RydWN0cyBmb3VuZCBpbiBzeXN0ZW0gaGVhZGVyIGZpbGVzLgorV2FybmluZ3MgZnJvbSBzeXN0ZW0gaGVhZGVycyBhcmUgbm9ybWFsbHkgc3VwcHJlc3NlZCwgb24gdGhlIGFzc3VtcHRpb24KK3RoYXQgdGhleSB1c3VhbGx5IGRvIG5vdCBpbmRpY2F0ZSByZWFsIHByb2JsZW1zIGFuZCB3b3VsZCBvbmx5IG1ha2UgdGhlCitjb21waWxlciBvdXRwdXQgaGFyZGVyIHRvIHJlYWQuICBVc2luZyB0aGlzIGNvbW1hbmQtbGluZSBvcHRpb24gdGVsbHMKK1wmXHMtMUdDQ1xzMCB0byBlbWl0IHdhcm5pbmdzIGZyb20gc3lzdGVtIGhlYWRlcnMgYXMgaWYgdGhleSBvY2N1cnJlZCBpbiB1c2VyCitjb2RlLiAgSG93ZXZlciwgbm90ZSB0aGF0IHVzaW5nIFxmQlwtV2FsbFxmUiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMKK29wdGlvbiBkb2VzIFxmSW5vdFxmUiB3YXJuIGFib3V0IHVua25vd24gcHJhZ21hcyBpbiBzeXN0ZW0KK2hlYWRlcnNcLVwtXC1mb3IgdGhhdCwgXGZCXC1XdW5rbm93blwtcHJhZ21hc1xmUiBtdXN0IGFsc28gYmUgdXNlZC4KKy5JUCAiXGZCXC1XdHJhbXBvbGluZXNcZlIiIDQKKy5JWCBJdGVtICItV3RyYW1wb2xpbmVzIgorLlZiIDEKK1wmIFdhcm4gYWJvdXQgdHJhbXBvbGluZXMgZ2VuZXJhdGVkIGZvciBwb2ludGVycyB0byBuZXN0ZWQgZnVuY3Rpb25zLgorXCYKK1wmIEEgdHJhbXBvbGluZSBpcyBhIHNtYWxsIHBpZWNlIG9mIGRhdGEgb3IgY29kZSB0aGF0IGlzIGNyZWF0ZWQgYXQgcnVuCitcJiB0aW1lIG9uIHRoZSBzdGFjayB3aGVuIHRoZSBhZGRyZXNzIG9mIGEgbmVzdGVkIGZ1bmN0aW9uIGlzIHRha2VuLCBhbmQKK1wmIGlzIHVzZWQgdG8gY2FsbCB0aGUgbmVzdGVkIGZ1bmN0aW9uIGluZGlyZWN0bHkuICBGb3Igc29tZSB0YXJnZXRzLCBpdAorXCYgaXMgbWFkZSB1cCBvZiBkYXRhIG9ubHkgYW5kIHRodXMgcmVxdWlyZXMgbm8gc3BlY2lhbCB0cmVhdG1lbnQuICBCdXQsCitcJiBmb3IgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrCitcJiB0byBiZSBtYWRlIGV4ZWN1dGFibGUgaW4gb3JkZXIgZm9yIHRoZSBwcm9ncmFtIHRvIHdvcmsgcHJvcGVybHkuCisuVmUKKy5JUCAiXGZCXC1XZmxvYXRcLWVxdWFsXGZSIiA0CisuSVggSXRlbSAiLVdmbG9hdC1lcXVhbCIKK1dhcm4gaWYgZmxvYXRpbmctcG9pbnQgdmFsdWVzIGFyZSB1c2VkIGluIGVxdWFsaXR5IGNvbXBhcmlzb25zLgorLlNwCitUaGUgaWRlYSBiZWhpbmQgdGhpcyBpcyB0aGF0IHNvbWV0aW1lcyBpdCBpcyBjb252ZW5pZW50IChmb3IgdGhlCitwcm9ncmFtbWVyKSB0byBjb25zaWRlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYXMgYXBwcm94aW1hdGlvbnMgdG8KK2luZmluaXRlbHkgcHJlY2lzZSByZWFsIG51bWJlcnMuICBJZiB5b3UgYXJlIGRvaW5nIHRoaXMsIHRoZW4geW91IG5lZWQKK3RvIGNvbXB1dGUgKGJ5IGFuYWx5emluZyB0aGUgY29kZSwgb3IgaW4gc29tZSBvdGhlciB3YXkpIHRoZSBtYXhpbXVtIG9yCitsaWtlbHkgbWF4aW11bSBlcnJvciB0aGF0IHRoZSBjb21wdXRhdGlvbiBpbnRyb2R1Y2VzLCBhbmQgYWxsb3cgZm9yIGl0Cit3aGVuIHBlcmZvcm1pbmcgY29tcGFyaXNvbnMgKGFuZCB3aGVuIHByb2R1Y2luZyBvdXRwdXQsIGJ1dCB0aGF0J3MgYQorZGlmZmVyZW50IHByb2JsZW0pLiAgSW4gcGFydGljdWxhciwgaW5zdGVhZCBvZiB0ZXN0aW5nIGZvciBlcXVhbGl0eSwgeW91CitzaG91bGQgY2hlY2sgdG8gc2VlIHdoZXRoZXIgdGhlIHR3byB2YWx1ZXMgaGF2ZSByYW5nZXMgdGhhdCBvdmVybGFwOyBhbmQKK3RoaXMgaXMgZG9uZSB3aXRoIHRoZSByZWxhdGlvbmFsIG9wZXJhdG9ycywgc28gZXF1YWxpdHkgY29tcGFyaXNvbnMgYXJlCitwcm9iYWJseSBtaXN0YWtlbi4KKy5JUCAiXGZCXC1XdHJhZGl0aW9uYWxcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVd0cmFkaXRpb25hbCAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGFib3V0IGNlcnRhaW4gY29uc3RydWN0cyB0aGF0IGJlaGF2ZSBkaWZmZXJlbnRseSBpbiB0cmFkaXRpb25hbCBhbmQKK1wmXHMtMUlTT1xzMCBDLiAgQWxzbyB3YXJuIGFib3V0IFxzLTFJU09cczAgQyBjb25zdHJ1Y3RzIHRoYXQgaGF2ZSBubyB0cmFkaXRpb25hbCBDCitlcXVpdmFsZW50LCBhbmQvb3IgcHJvYmxlbWF0aWMgY29uc3RydWN0cyB0aGF0IHNob3VsZCBiZSBhdm9pZGVkLgorLlJTIDQKKy5JUCAiXChidSIgNAorTWFjcm8gcGFyYW1ldGVycyB0aGF0IGFwcGVhciB3aXRoaW4gc3RyaW5nIGxpdGVyYWxzIGluIHRoZSBtYWNybyBib2R5LgorSW4gdHJhZGl0aW9uYWwgQyBtYWNybyByZXBsYWNlbWVudCB0YWtlcyBwbGFjZSB3aXRoaW4gc3RyaW5nIGxpdGVyYWxzLAorYnV0IGluIFxzLTFJU09cczAgQyBpdCBkb2VzIG5vdC4KKy5JUCAiXChidSIgNAorSW4gdHJhZGl0aW9uYWwgQywgc29tZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBkaWQgbm90IGV4aXN0LgorVHJhZGl0aW9uYWwgcHJlcHJvY2Vzc29ycyBvbmx5IGNvbnNpZGVyZWQgYSBsaW5lIHRvIGJlIGEgZGlyZWN0aXZlCitpZiB0aGUgXGZCI1xmUiBhcHBlYXJlZCBpbiBjb2x1bW4gMSBvbiB0aGUgbGluZS4gIFRoZXJlZm9yZQorXCZcZkJcLVd0cmFkaXRpb25hbFxmUiB3YXJucyBhYm91dCBkaXJlY3RpdmVzIHRoYXQgdHJhZGl0aW9uYWwgQwordW5kZXJzdGFuZHMgYnV0IGlnbm9yZXMgYmVjYXVzZSB0aGUgXGZCI1xmUiBkb2VzIG5vdCBhcHBlYXIgYXMgdGhlCitmaXJzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUuICBJdCBhbHNvIHN1Z2dlc3RzIHlvdSBoaWRlIGRpcmVjdGl2ZXMgbGlrZQorXCZcZkIjcHJhZ21hXGZSIG5vdCB1bmRlcnN0b29kIGJ5IHRyYWRpdGlvbmFsIEMgYnkgaW5kZW50aW5nIHRoZW0uICBTb21lCit0cmFkaXRpb25hbCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IHJlY29nbml6ZSBcZkIjZWxpZlxmUiwgc28gdGhpcyBvcHRpb24KK3N1Z2dlc3RzIGF2b2lkaW5nIGl0IGFsdG9nZXRoZXIuCisuSVAgIlwoYnUiIDQKK0EgZnVuY3Rpb24tbGlrZSBtYWNybyB0aGF0IGFwcGVhcnMgd2l0aG91dCBhcmd1bWVudHMuCisuSVAgIlwoYnUiIDQKK1RoZSB1bmFyeSBwbHVzIG9wZXJhdG9yLgorLklQICJcKGJ1IiA0CitUaGUgXGZCVVxmUiBpbnRlZ2VyIGNvbnN0YW50IHN1ZmZpeCwgb3IgdGhlIFxmQkZcZlIgb3IgXGZCTFxmUiBmbG9hdGluZy1wb2ludAorY29uc3RhbnQgc3VmZml4ZXMuICAoVHJhZGl0aW9uYWwgQyBkb2VzIHN1cHBvcnQgdGhlIFxmQkxcZlIgc3VmZml4IG9uIGludGVnZXIKK2NvbnN0YW50cy4pICBOb3RlLCB0aGVzZSBzdWZmaXhlcyBhcHBlYXIgaW4gbWFjcm9zIGRlZmluZWQgaW4gdGhlIHN5c3RlbQoraGVhZGVycyBvZiBtb3N0IG1vZGVybiBzeXN0ZW1zLCBlLmcuIHRoZSBcZkJfTUlOXGZSL1xmQl9NQVhcZlIgbWFjcm9zIGluIFxmKENXXCooQ2A8bGltaXRzLmg+XCooQydcZlIuCitVc2Ugb2YgdGhlc2UgbWFjcm9zIGluIHVzZXIgY29kZSBtaWdodCBub3JtYWxseSBsZWFkIHRvIHNwdXJpb3VzCit3YXJuaW5ncywgaG93ZXZlciBccy0xR0NDXHMwJ3MgaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3IgaGFzIGVub3VnaCBjb250ZXh0IHRvCithdm9pZCB3YXJuaW5nIGluIHRoZXNlIGNhc2VzLgorLklQICJcKGJ1IiA0CitBIGZ1bmN0aW9uIGRlY2xhcmVkIGV4dGVybmFsIGluIG9uZSBibG9jayBhbmQgdGhlbiB1c2VkIGFmdGVyIHRoZSBlbmQgb2YKK3RoZSBibG9jay4KKy5JUCAiXChidSIgNAorQSBcZihDV1wqKENgc3dpdGNoXCooQydcZlIgc3RhdGVtZW50IGhhcyBhbiBvcGVyYW5kIG9mIHR5cGUgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUi4KKy5JUCAiXChidSIgNAorQSBub25cLVxmKENXXCooQ2BzdGF0aWNcKihDJ1xmUiBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmb2xsb3dzIGEgXGYoQ1dcKihDYHN0YXRpY1wqKEMnXGZSIG9uZS4KK1RoaXMgY29uc3RydWN0IGlzIG5vdCBhY2NlcHRlZCBieSBzb21lIHRyYWRpdGlvbmFsIEMgY29tcGlsZXJzLgorLklQICJcKGJ1IiA0CitUaGUgXHMtMUlTT1xzMCB0eXBlIG9mIGFuIGludGVnZXIgY29uc3RhbnQgaGFzIGEgZGlmZmVyZW50IHdpZHRoIG9yCitzaWduZWRuZXNzIGZyb20gaXRzIHRyYWRpdGlvbmFsIHR5cGUuICBUaGlzIHdhcm5pbmcgaXMgb25seSBpc3N1ZWQgaWYKK3RoZSBiYXNlIG9mIHRoZSBjb25zdGFudCBpcyB0ZW4uICBJLmUuIGhleGFkZWNpbWFsIG9yIG9jdGFsIHZhbHVlcywgd2hpY2gKK3R5cGljYWxseSByZXByZXNlbnQgYml0IHBhdHRlcm5zLCBhcmUgbm90IHdhcm5lZCBhYm91dC4KKy5JUCAiXChidSIgNAorVXNhZ2Ugb2YgXHMtMUlTT1xzMCBzdHJpbmcgY29uY2F0ZW5hdGlvbiBpcyBkZXRlY3RlZC4KKy5JUCAiXChidSIgNAorSW5pdGlhbGl6YXRpb24gb2YgYXV0b21hdGljIGFnZ3JlZ2F0ZXMuCisuSVAgIlwoYnUiIDQKK0lkZW50aWZpZXIgY29uZmxpY3RzIHdpdGggbGFiZWxzLiAgVHJhZGl0aW9uYWwgQyBsYWNrcyBhIHNlcGFyYXRlCituYW1lc3BhY2UgZm9yIGxhYmVscy4KKy5JUCAiXChidSIgNAorSW5pdGlhbGl6YXRpb24gb2YgdW5pb25zLiAgSWYgdGhlIGluaXRpYWxpemVyIGlzIHplcm8sIHRoZSB3YXJuaW5nIGlzCitvbWl0dGVkLiAgVGhpcyBpcyBkb25lIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHplcm8gaW5pdGlhbGl6ZXIgaW4KK3VzZXIgY29kZSBhcHBlYXJzIGNvbmRpdGlvbmVkIG9uIGUuZy4gXGYoQ1dcKihDYF9cfF9TVERDX1x8X1wqKEMnXGZSIHRvIGF2b2lkIG1pc3NpbmcKK2luaXRpYWxpemVyIHdhcm5pbmdzIGFuZCByZWxpZXMgb24gZGVmYXVsdCBpbml0aWFsaXphdGlvbiB0byB6ZXJvIGluIHRoZQordHJhZGl0aW9uYWwgQyBjYXNlLgorLklQICJcKGJ1IiA0CitDb252ZXJzaW9ucyBieSBwcm90b3R5cGVzIGJldHdlZW4gZml4ZWQvZmxvYXRpbmdcLXBvaW50IHZhbHVlcyBhbmQgdmljZQordmVyc2EuICBUaGUgYWJzZW5jZSBvZiB0aGVzZSBwcm90b3R5cGVzIHdoZW4gY29tcGlsaW5nIHdpdGggdHJhZGl0aW9uYWwKK0MgY2F1c2VzIHNlcmlvdXMgcHJvYmxlbXMuICBUaGlzIGlzIGEgc3Vic2V0IG9mIHRoZSBwb3NzaWJsZQorY29udmVyc2lvbiB3YXJuaW5nczsgZm9yIHRoZSBmdWxsIHNldCB1c2UgXGZCXC1XdHJhZGl0aW9uYWxcLWNvbnZlcnNpb25cZlIuCisuSVAgIlwoYnUiIDQKK1VzZSBvZiBccy0xSVNPXHMwIEMgc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBUaGlzIHdhcm5pbmcgaW50ZW50aW9uYWxseSBpcworXCZcZklub3RcZlIgaXNzdWVkIGZvciBwcm90b3R5cGUgZGVjbGFyYXRpb25zIG9yIHZhcmlhZGljIGZ1bmN0aW9ucworYmVjYXVzZSB0aGVzZSBccy0xSVNPXHMwIEMgZmVhdHVyZXMgYXBwZWFyIGluIHlvdXIgY29kZSB3aGVuIHVzaW5nCitsaWJpYmVydHkncyB0cmFkaXRpb25hbCBDIGNvbXBhdGliaWxpdHkgbWFjcm9zLCBcZihDV1wqKENgUEFSQU1TXCooQydcZlIgYW5kCitcJlxmKENXXCooQ2BWUEFSQU1TXCooQydcZlIuICBUaGlzIHdhcm5pbmcgaXMgYWxzbyBieXBhc3NlZCBmb3IgbmVzdGVkIGZ1bmN0aW9ucworYmVjYXVzZSB0aGF0IGZlYXR1cmUgaXMgYWxyZWFkeSBhIFxzLTFHQ0NcczAgZXh0ZW5zaW9uIGFuZCB0aHVzIG5vdCByZWxldmFudCB0bwordHJhZGl0aW9uYWwgQyBjb21wYXRpYmlsaXR5LgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtV3RyYWRpdGlvbmFsXC1jb252ZXJzaW9uXGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XdHJhZGl0aW9uYWwtY29udmVyc2lvbiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGlmIGEgcHJvdG90eXBlIGNhdXNlcyBhIHR5cGUgY29udmVyc2lvbiB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHdoYXQKK3dvdWxkIGhhcHBlbiB0byB0aGUgc2FtZSBhcmd1bWVudCBpbiB0aGUgYWJzZW5jZSBvZiBhIHByb3RvdHlwZS4gIFRoaXMKK2luY2x1ZGVzIGNvbnZlcnNpb25zIG9mIGZpeGVkIHBvaW50IHRvIGZsb2F0aW5nIGFuZCB2aWNlIHZlcnNhLCBhbmQKK2NvbnZlcnNpb25zIGNoYW5naW5nIHRoZSB3aWR0aCBvciBzaWduZWRuZXNzIG9mIGEgZml4ZWQtcG9pbnQgYXJndW1lbnQKK2V4Y2VwdCB3aGVuIHRoZSBzYW1lIGFzIHRoZSBkZWZhdWx0IHByb21vdGlvbi4KKy5JUCAiXGZCXC1XZGVjbGFyYXRpb25cLWFmdGVyXC1zdGF0ZW1lbnRcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIgorV2FybiB3aGVuIGEgZGVjbGFyYXRpb24gaXMgZm91bmQgYWZ0ZXIgYSBzdGF0ZW1lbnQgaW4gYSBibG9jay4gIFRoaXMKK2NvbnN0cnVjdCwga25vd24gZnJvbSBcKihDKywgd2FzIGludHJvZHVjZWQgd2l0aCBccy0xSVNPXHMwIEM5OSBhbmQgaXMgYnkgZGVmYXVsdAorYWxsb3dlZCBpbiBccy0xR0NDXHMwLiAgSXQgaXMgbm90IHN1cHBvcnRlZCBieSBccy0xSVNPXHMwIEM5MCBhbmQgd2FzIG5vdCBzdXBwb3J0ZWQgYnkKK1wmXHMtMUdDQ1xzMCB2ZXJzaW9ucyBiZWZvcmUgXHMtMUdDQ1xzMCAzLjAuCisuSVAgIlxmQlwtV3VuZGVmXGZSIiA0CisuSVggSXRlbSAiLVd1bmRlZiIKK1dhcm4gaWYgYW4gdW5kZWZpbmVkIGlkZW50aWZpZXIgaXMgZXZhbHVhdGVkIGluIGFuIFxmQiNpZlxmUiBkaXJlY3RpdmUuCisuSVAgIlxmQlwtV25vXC1lbmRpZlwtbGFiZWxzXGZSIiA0CisuSVggSXRlbSAiLVduby1lbmRpZi1sYWJlbHMiCitEbyBub3Qgd2FybiB3aGVuZXZlciBhbiBcZkIjZWxzZVxmUiBvciBhbiBcZkIjZW5kaWZcZlIgYXJlIGZvbGxvd2VkIGJ5IHRleHQuCisuSVAgIlxmQlwtV3NoYWRvd1xmUiIgNAorLklYIEl0ZW0gIi1Xc2hhZG93IgorV2FybiB3aGVuZXZlciBhIGxvY2FsIHZhcmlhYmxlIG9yIHR5cGUgZGVjbGFyYXRpb24gc2hhZG93cyBhbm90aGVyIHZhcmlhYmxlLAorcGFyYW1ldGVyLCB0eXBlLCBvciBjbGFzcyBtZW1iZXIgKGluIFwqKEMrKSwgb3Igd2hlbmV2ZXIgYSBidWlsdC1pbiBmdW5jdGlvbgoraXMgc2hhZG93ZWQuIE5vdGUgdGhhdCBpbiBcKihDKywgdGhlIGNvbXBpbGVyIHdhcm5zIGlmIGEgbG9jYWwgdmFyaWFibGUKK3NoYWRvd3MgYW4gZXhwbGljaXQgdHlwZWRlZiwgYnV0IG5vdCBpZiBpdCBzaGFkb3dzIGEgc3RydWN0L2NsYXNzL2VudW0uCisuSVAgIlxmQlwtV2xhcmdlclwtdGhhbj1cZlJcZklsZW5cZlIiIDQKKy5JWCBJdGVtICItV2xhcmdlci10aGFuPWxlbiIKK1dhcm4gd2hlbmV2ZXIgYW4gb2JqZWN0IG9mIGxhcmdlciB0aGFuIFxmSWxlblxmUiBieXRlcyBpcyBkZWZpbmVkLgorLklQICJcZkJcLVdmcmFtZVwtbGFyZ2VyXC10aGFuPVxmUlxmSWxlblxmUiIgNAorLklYIEl0ZW0gIi1XZnJhbWUtbGFyZ2VyLXRoYW49bGVuIgorV2FybiBpZiB0aGUgc2l6ZSBvZiBhIGZ1bmN0aW9uIGZyYW1lIGlzIGxhcmdlciB0aGFuIFxmSWxlblxmUiBieXRlcy4KK1RoZSBjb21wdXRhdGlvbiBkb25lIHRvIGRldGVybWluZSB0aGUgc3RhY2sgZnJhbWUgc2l6ZSBpcyBhcHByb3hpbWF0ZQorYW5kIG5vdCBjb25zZXJ2YXRpdmUuCitUaGUgYWN0dWFsIHJlcXVpcmVtZW50cyBtYXkgYmUgc29tZXdoYXQgZ3JlYXRlciB0aGFuIFxmSWxlblxmUgorZXZlbiBpZiB5b3UgZG8gbm90IGdldCBhIHdhcm5pbmcuICBJbiBhZGRpdGlvbiwgYW55IHNwYWNlIGFsbG9jYXRlZAordmlhIFxmKENXXCooQ2BhbGxvY2FcKihDJ1xmUiwgdmFyaWFibGUtbGVuZ3RoIGFycmF5cywgb3IgcmVsYXRlZCBjb25zdHJ1Y3RzCitpcyBub3QgaW5jbHVkZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4gZGV0ZXJtaW5pbmcKK3doZXRoZXIgb3Igbm90IHRvIGlzc3VlIGEgd2FybmluZy4KKy5JUCAiXGZCXC1Xbm9cLWZyZWVcLW5vbmhlYXBcLW9iamVjdFxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tZnJlZS1ub25oZWFwLW9iamVjdCIKK0RvIG5vdCB3YXJuIHdoZW4gYXR0ZW1wdGluZyB0byBmcmVlIGFuIG9iamVjdCB0aGF0IHdhcyBub3QgYWxsb2NhdGVkCitvbiB0aGUgaGVhcC4KKy5JUCAiXGZCXC1Xc3RhY2tcLXVzYWdlPVxmUlxmSWxlblxmUiIgNAorLklYIEl0ZW0gIi1Xc3RhY2stdXNhZ2U9bGVuIgorV2FybiBpZiB0aGUgc3RhY2sgdXNhZ2Ugb2YgYSBmdW5jdGlvbiBtaWdodCBiZSBsYXJnZXIgdGhhbiBcZklsZW5cZlIgYnl0ZXMuCitUaGUgY29tcHV0YXRpb24gZG9uZSB0byBkZXRlcm1pbmUgdGhlIHN0YWNrIHVzYWdlIGlzIGNvbnNlcnZhdGl2ZS4KK0FueSBzcGFjZSBhbGxvY2F0ZWQgdmlhIFxmKENXXCooQ2BhbGxvY2FcKihDJ1xmUiwgdmFyaWFibGUtbGVuZ3RoIGFycmF5cywgb3IgcmVsYXRlZAorY29uc3RydWN0cyBpcyBpbmNsdWRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCB0bworaXNzdWUgYSB3YXJuaW5nLgorLlNwCitUaGUgbWVzc2FnZSBpcyBpbiBrZWVwaW5nIHdpdGggdGhlIG91dHB1dCBvZiBcZkJcLWZzdGFja1wtdXNhZ2VcZlIuCisuUlMgNAorLklQICJcKGJ1IiA0CitJZiB0aGUgc3RhY2sgdXNhZ2UgaXMgZnVsbHkgc3RhdGljIGJ1dCBleGNlZWRzIHRoZSBzcGVjaWZpZWQgYW1vdW50LCBpdCdzOgorLlNwCisuVmIgMQorXCYgICAgICAgICAgd2FybmluZzogc3RhY2sgdXNhZ2UgaXMgMTEyMCBieXRlcworLlZlCisuSVAgIlwoYnUiIDQKK0lmIHRoZSBzdGFjayB1c2FnZSBpcyAocGFydGx5KSBkeW5hbWljIGJ1dCBib3VuZGVkLCBpdCdzOgorLlNwCisuVmIgMQorXCYgICAgICAgICAgd2FybmluZzogc3RhY2sgdXNhZ2UgbWlnaHQgYmUgMTY0OCBieXRlcworLlZlCisuSVAgIlwoYnUiIDQKK0lmIHRoZSBzdGFjayB1c2FnZSBpcyAocGFydGx5KSBkeW5hbWljIGFuZCBub3QgYm91bmRlZCwgaXQnczoKKy5TcAorLlZiIDEKK1wmICAgICAgICAgIHdhcm5pbmc6IHN0YWNrIHVzYWdlIG1pZ2h0IGJlIHVuYm91bmRlZAorLlZlCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1XdW5zYWZlXC1sb29wXC1vcHRpbWl6YXRpb25zXGZSIiA0CisuSVggSXRlbSAiLVd1bnNhZmUtbG9vcC1vcHRpbWl6YXRpb25zIgorV2FybiBpZiB0aGUgbG9vcCBjYW5ub3QgYmUgb3B0aW1pemVkIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNhbm5vdAorYXNzdW1lIGFueXRoaW5nIG9uIHRoZSBib3VuZHMgb2YgdGhlIGxvb3AgaW5kaWNlcy4gIFdpdGgKK1wmXGZCXC1mdW5zYWZlXC1sb29wXC1vcHRpbWl6YXRpb25zXGZSIHdhcm4gaWYgdGhlIGNvbXBpbGVyIG1ha2VzCitzdWNoIGFzc3VtcHRpb25zLgorLklQICJcZkJcLVdub1wtcGVkYW50aWNcLW1zXC1mb3JtYXRcZlIgKE1pbkdXIHRhcmdldHMgb25seSkiIDQKKy5JWCBJdGVtICItV25vLXBlZGFudGljLW1zLWZvcm1hdCAoTWluR1cgdGFyZ2V0cyBvbmx5KSIKK1doZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFxmQlwtV2Zvcm1hdFxmUgorYW5kIFxmQlwtcGVkYW50aWNcZlIgd2l0aG91dCBccy0xR05VXHMwIGV4dGVuc2lvbnMsIHRoaXMgb3B0aW9uCitkaXNhYmxlcyB0aGUgd2FybmluZ3MgYWJvdXQgbm9uLUlTTyBcZihDV1wqKENgcHJpbnRmXCooQydcZlIgLyBcZihDV1wqKENgc2NhbmZcKihDJ1xmUiBmb3JtYXQKK3dpZHRoIHNwZWNpZmllcnMgXGYoQ1dcKihDYEkzMlwqKEMnXGZSLCBcZihDV1wqKENgSTY0XCooQydcZlIsIGFuZCBcZihDV1wqKENgSVwqKEMnXGZSIHVzZWQgb24gV2luZG93cyB0YXJnZXRzLAord2hpY2ggZGVwZW5kIG9uIHRoZSBccy0xTVNcczAgcnVudGltZS4KKy5JUCAiXGZCXC1XcG9pbnRlclwtYXJpdGhcZlIiIDQKKy5JWCBJdGVtICItV3BvaW50ZXItYXJpdGgiCitXYXJuIGFib3V0IGFueXRoaW5nIHRoYXQgZGVwZW5kcyBvbiB0aGUgXCooTCJzaXplIG9mXCooUiIgYSBmdW5jdGlvbiB0eXBlIG9yCitvZiBcZihDV1wqKENgdm9pZFwqKEMnXGZSLiAgXHMtMUdOVVxzMCBDIGFzc2lnbnMgdGhlc2UgdHlwZXMgYSBzaXplIG9mIDEsIGZvcgorY29udmVuaWVuY2UgaW4gY2FsY3VsYXRpb25zIHdpdGggXGYoQ1dcKihDYHZvaWQgKlwqKEMnXGZSIHBvaW50ZXJzIGFuZCBwb2ludGVycwordG8gZnVuY3Rpb25zLiAgSW4gXCooQyssIHdhcm4gYWxzbyB3aGVuIGFuIGFyaXRobWV0aWMgb3BlcmF0aW9uIGludm9sdmVzCitcJlxmKENXXCooQ2BOVUxMXCooQydcZlIuICBUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IFxmQlwtV3BlZGFudGljXGZSLgorLklQICJcZkJcLVd0eXBlXC1saW1pdHNcZlIiIDQKKy5JWCBJdGVtICItV3R5cGUtbGltaXRzIgorV2FybiBpZiBhIGNvbXBhcmlzb24gaXMgYWx3YXlzIHRydWUgb3IgYWx3YXlzIGZhbHNlIGR1ZSB0byB0aGUgbGltaXRlZAorcmFuZ2Ugb2YgdGhlIGRhdGEgdHlwZSwgYnV0IGRvIG5vdCB3YXJuIGZvciBjb25zdGFudCBleHByZXNzaW9ucy4gIEZvcgorZXhhbXBsZSwgd2FybiBpZiBhbiB1bnNpZ25lZCB2YXJpYWJsZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHplcm8gd2l0aAorXCZcZkI8XGZSIG9yIFxmQj49XGZSLiAgVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieQorXCZcZkJcLVdleHRyYVxmUi4KKy5JUCAiXGZCXC1XYmFkXC1mdW5jdGlvblwtY2FzdFxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV2JhZC1mdW5jdGlvbi1jYXN0IChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gd2hlbmV2ZXIgYSBmdW5jdGlvbiBjYWxsIGlzIGNhc3QgdG8gYSBub24tbWF0Y2hpbmcgdHlwZS4KK0ZvciBleGFtcGxlLCB3YXJuIGlmIFxmKENXXCooQ2BpbnQgbWFsbG9jKClcKihDJ1xmUiBpcyBjYXN0IHRvIFxmKENXXCooQ2Bhbnl0aGluZyAqXCooQydcZlIuCisuSVAgIlxmQlwtV2MrK1wtY29tcGF0XGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XYysrLWNvbXBhdCAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGFib3V0IFxzLTFJU09cczAgQyBjb25zdHJ1Y3RzIHRoYXQgYXJlIG91dHNpZGUgb2YgdGhlIGNvbW1vbiBzdWJzZXQgb2YKK1wmXHMtMUlTT1xzMCBDIGFuZCBccy0xSVNPXHMwIFwqKEMrLCBlLmcuIHJlcXVlc3QgZm9yIGltcGxpY2l0IGNvbnZlcnNpb24gZnJvbQorXCZcZihDV1wqKENgdm9pZCAqXCooQydcZlIgdG8gYSBwb2ludGVyIHRvIG5vblwtXGYoQ1dcKihDYHZvaWRcKihDJ1xmUiB0eXBlLgorLklQICJcZkJcLVdjKysxMVwtY29tcGF0XGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XYysrMTEtY29tcGF0ICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIGFib3V0IFwqKEMrIGNvbnN0cnVjdHMgd2hvc2UgbWVhbmluZyBkaWZmZXJzIGJldHdlZW4gXHMtMUlTT1xzMCBcKihDKyAxOTk4CithbmQgXHMtMUlTT1xzMCBcKihDKyAyMDExLCBlLmcuLCBpZGVudGlmaWVycyBpbiBccy0xSVNPXHMwIFwqKEMrIDE5OTggdGhhdCBhcmUga2V5d29yZHMKK2luIFxzLTFJU09cczAgXCooQysgMjAxMS4gIFRoaXMgd2FybmluZyB0dXJucyBvbiBcZkJcLVduYXJyb3dpbmdcZlIgYW5kIGlzCitlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XY2FzdFwtcXVhbFxmUiIgNAorLklYIEl0ZW0gIi1XY2FzdC1xdWFsIgorV2FybiB3aGVuZXZlciBhIHBvaW50ZXIgaXMgY2FzdCBzbyBhcyB0byByZW1vdmUgYSB0eXBlIHF1YWxpZmllciBmcm9tCit0aGUgdGFyZ2V0IHR5cGUuICBGb3IgZXhhbXBsZSwgd2FybiBpZiBhIFxmKENXXCooQ2Bjb25zdCBjaGFyICpcKihDJ1xmUiBpcyBjYXN0Cit0byBhbiBvcmRpbmFyeSBcZihDV1wqKENgY2hhciAqXCooQydcZlIuCisuU3AKK0Fsc28gd2FybiB3aGVuIG1ha2luZyBhIGNhc3QgdGhhdCBpbnRyb2R1Y2VzIGEgdHlwZSBxdWFsaWZpZXIgaW4gYW4KK3Vuc2FmZSB3YXkuICBGb3IgZXhhbXBsZSwgY2FzdGluZyBcZihDV1wqKENgY2hhciAqKlwqKEMnXGZSIHRvIFxmKENXXCooQ2Bjb25zdCBjaGFyICoqXCooQydcZlIKK2lzIHVuc2FmZSwgYXMgaW4gdGhpcyBleGFtcGxlOgorLlNwCisuVmIgNgorXCYgICAgICAgICAgLyogcCBpcyBjaGFyICoqIHZhbHVlLiAgKi8KK1wmICAgICAgICAgIGNvbnN0IGNoYXIgKipxID0gKGNvbnN0IGNoYXIgKiopIHA7CitcJiAgICAgICAgICAvKiBBc3NpZ25tZW50IG9mIHJlYWRvbmx5IHN0cmluZyB0byBjb25zdCBjaGFyICogaXMgT0suICAqLworXCYgICAgICAgICAgKnEgPSAic3RyaW5nIjsKK1wmICAgICAgICAgIC8qIE5vdyBjaGFyKiogcG9pbnRlciBwb2ludHMgdG8gcmVhZFwtb25seSBtZW1vcnkuICAqLworXCYgICAgICAgICAgKipwID0gXCooQXFiXCooQXE7CisuVmUKKy5JUCAiXGZCXC1XY2FzdFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItV2Nhc3QtYWxpZ24iCitXYXJuIHdoZW5ldmVyIGEgcG9pbnRlciBpcyBjYXN0IHN1Y2ggdGhhdCB0aGUgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRoZQordGFyZ2V0IGlzIGluY3JlYXNlZC4gIEZvciBleGFtcGxlLCB3YXJuIGlmIGEgXGYoQ1dcKihDYGNoYXIgKlwqKEMnXGZSIGlzIGNhc3QgdG8KK2FuIFxmKENXXCooQ2BpbnQgKlwqKEMnXGZSIG9uIG1hY2hpbmVzIHdoZXJlIGludGVnZXJzIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIGF0Cit0d29cLSBvciBmb3VyLWJ5dGUgYm91bmRhcmllcy4KKy5JUCAiXGZCXC1Xd3JpdGVcLXN0cmluZ3NcZlIiIDQKKy5JWCBJdGVtICItV3dyaXRlLXN0cmluZ3MiCitXaGVuIGNvbXBpbGluZyBDLCBnaXZlIHN0cmluZyBjb25zdGFudHMgdGhlIHR5cGUgXGYoQ1dcKihDYGNvbnN0CitjaGFyW1xmKENJbGVuZ3RoXGYoQ1ddXCooQydcZlIgc28gdGhhdCBjb3B5aW5nIHRoZSBhZGRyZXNzIG9mIG9uZSBpbnRvIGEKK25vblwtXGYoQ1dcKihDYGNvbnN0XCooQydcZlIgXGYoQ1dcKihDYGNoYXIgKlwqKEMnXGZSIHBvaW50ZXIgcHJvZHVjZXMgYSB3YXJuaW5nLiAgVGhlc2UKK3dhcm5pbmdzIGhlbHAgeW91IGZpbmQgYXQgY29tcGlsZSB0aW1lIGNvZGUgdGhhdCBjYW4gdHJ5IHRvIHdyaXRlCitpbnRvIGEgc3RyaW5nIGNvbnN0YW50LCBidXQgb25seSBpZiB5b3UgaGF2ZSBiZWVuIHZlcnkgY2FyZWZ1bCBhYm91dAordXNpbmcgXGYoQ1dcKihDYGNvbnN0XCooQydcZlIgaW4gZGVjbGFyYXRpb25zIGFuZCBwcm90b3R5cGVzLiAgT3RoZXJ3aXNlLCBpdCBpcworanVzdCBhIG51aXNhbmNlLiBUaGlzIGlzIHdoeSB3ZSBkaWQgbm90IG1ha2UgXGZCXC1XYWxsXGZSIHJlcXVlc3QKK3RoZXNlIHdhcm5pbmdzLgorLlNwCitXaGVuIGNvbXBpbGluZyBcKihDKywgd2FybiBhYm91dCB0aGUgZGVwcmVjYXRlZCBjb252ZXJzaW9uIGZyb20gc3RyaW5nCitsaXRlcmFscyB0byBcZihDV1wqKENgY2hhciAqXCooQydcZlIuICBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBcKihDKworcHJvZ3JhbXMuCisuSVAgIlxmQlwtV2Nsb2JiZXJlZFxmUiIgNAorLklYIEl0ZW0gIi1XY2xvYmJlcmVkIgorV2FybiBmb3IgdmFyaWFibGVzIHRoYXQgbWlnaHQgYmUgY2hhbmdlZCBieSBcZkJsb25nam1wXGZSIG9yCitcJlxmQnZmb3JrXGZSLiAgVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSBcZkJcLVdleHRyYVxmUi4KKy5JUCAiXGZCXC1XY29udmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi1XY29udmVyc2lvbiIKK1dhcm4gZm9yIGltcGxpY2l0IGNvbnZlcnNpb25zIHRoYXQgbWF5IGFsdGVyIGEgdmFsdWUuIFRoaXMgaW5jbHVkZXMKK2NvbnZlcnNpb25zIGJldHdlZW4gcmVhbCBhbmQgaW50ZWdlciwgbGlrZSBcZihDV1wqKENgYWJzICh4KVwqKEMnXGZSIHdoZW4KK1wmXGYoQ1dcKihDYHhcKihDJ1xmUiBpcyBcZihDV1wqKENgZG91YmxlXCooQydcZlI7IGNvbnZlcnNpb25zIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCwKK2xpa2UgXGYoQ1dcKihDYHVuc2lnbmVkIHVpID0gXC0xXCooQydcZlI7IGFuZCBjb252ZXJzaW9ucyB0byBzbWFsbGVyIHR5cGVzLCBsaWtlCitcJlxmKENXXCooQ2BzcXJ0ZiAoTV9QSSlcKihDJ1xmUi4gRG8gbm90IHdhcm4gZm9yIGV4cGxpY2l0IGNhc3RzIGxpa2UgXGYoQ1dcKihDYGFicworKChpbnQpIHgpXCooQydcZlIgYW5kIFxmKENXXCooQ2B1aSA9ICh1bnNpZ25lZCkgXC0xXCooQydcZlIsIG9yIGlmIHRoZSB2YWx1ZSBpcyBub3QKK2NoYW5nZWQgYnkgdGhlIGNvbnZlcnNpb24gbGlrZSBpbiBcZihDV1wqKENgYWJzICgyLjApXCooQydcZlIuICBXYXJuaW5ncyBhYm91dAorY29udmVyc2lvbnMgYmV0d2VlbiBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXJzIGNhbiBiZSBkaXNhYmxlZCBieQordXNpbmcgXGZCXC1Xbm9cLXNpZ25cLWNvbnZlcnNpb25cZlIuCisuU3AKK0ZvciBcKihDKywgYWxzbyB3YXJuIGZvciBjb25mdXNpbmcgb3ZlcmxvYWQgcmVzb2x1dGlvbiBmb3IgdXNlci1kZWZpbmVkCitjb252ZXJzaW9uczsgYW5kIGNvbnZlcnNpb25zIHRoYXQgbmV2ZXIgdXNlIGEgdHlwZSBjb252ZXJzaW9uCitvcGVyYXRvcjogY29udmVyc2lvbnMgdG8gXGYoQ1dcKihDYHZvaWRcKihDJ1xmUiwgdGhlIHNhbWUgdHlwZSwgYSBiYXNlIGNsYXNzIG9yIGEKK3JlZmVyZW5jZSB0byB0aGVtLiBXYXJuaW5ncyBhYm91dCBjb252ZXJzaW9ucyBiZXR3ZWVuIHNpZ25lZCBhbmQKK3Vuc2lnbmVkIGludGVnZXJzIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IGluIFwqKEMrIHVubGVzcworXCZcZkJcLVdzaWduXC1jb252ZXJzaW9uXGZSIGlzIGV4cGxpY2l0bHkgZW5hYmxlZC4KKy5JUCAiXGZCXC1Xbm9cLWNvbnZlcnNpb25cLW51bGxcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVduby1jb252ZXJzaW9uLW51bGwgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK0RvIG5vdCB3YXJuIGZvciBjb252ZXJzaW9ucyBiZXR3ZWVuIFxmKENXXCooQ2BOVUxMXCooQydcZlIgYW5kIG5vbi1wb2ludGVyCit0eXBlcy4gXGZCXC1XY29udmVyc2lvblwtbnVsbFxmUiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtV3plcm9cLWFzXC1udWxsXC1wb2ludGVyXC1jb25zdGFudFxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV3plcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50ICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIHdoZW4gYSBsaXRlcmFsICcwJyBpcyB1c2VkIGFzIG51bGwgcG9pbnRlciBjb25zdGFudC4gIFRoaXMgY2FuCitiZSB1c2VmdWwgdG8gZmFjaWxpdGF0ZSB0aGUgY29udmVyc2lvbiB0byBcZihDV1wqKENgbnVsbHB0clwqKEMnXGZSIGluIFwqKEMrMTEuCisuSVAgIlxmQlwtV3VzZWxlc3NcLWNhc3RcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVd1c2VsZXNzLWNhc3QgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBhbiBleHByZXNzaW9uIGlzIGNhc3RlZCB0byBpdHMgb3duIHR5cGUuCisuSVAgIlxmQlwtV2VtcHR5XC1ib2R5XGZSIiA0CisuSVggSXRlbSAiLVdlbXB0eS1ib2R5IgorV2FybiBpZiBhbiBlbXB0eSBib2R5IG9jY3VycyBpbiBhbiBcZkJpZlxmUiwgXGZCZWxzZVxmUiBvciBcZkJkbword2hpbGVcZlIgc3RhdGVtZW50LiAgVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSBcZkJcLVdleHRyYVxmUi4KKy5JUCAiXGZCXC1XZW51bVwtY29tcGFyZVxmUiIgNAorLklYIEl0ZW0gIi1XZW51bS1jb21wYXJlIgorV2FybiBhYm91dCBhIGNvbXBhcmlzb24gYmV0d2VlbiB2YWx1ZXMgb2YgZGlmZmVyZW50IGVudW1lcmF0ZWQgdHlwZXMuCitJbiBcKihDKyBlbnVtZXJhbCBtaXNtYXRjaGVzIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIGFyZSBhbHNvCitkaWFnbm9zZWQgYW5kIHRoZSB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIEluIEMgdGhpcyB3YXJuaW5nIGlzIAorZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2p1bXBcLW1pc3Nlc1wtaW5pdFxmUiAoQywgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV2p1bXAtbWlzc2VzLWluaXQgKEMsIE9iamVjdGl2ZS1DIG9ubHkpIgorV2FybiBpZiBhIFxmKENXXCooQ2Bnb3RvXCooQydcZlIgc3RhdGVtZW50IG9yIGEgXGYoQ1dcKihDYHN3aXRjaFwqKEMnXGZSIHN0YXRlbWVudCBqdW1wcworZm9yd2FyZCBhY3Jvc3MgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgdmFyaWFibGUsIG9yIGp1bXBzIGJhY2t3YXJkIHRvIGEKK2xhYmVsIGFmdGVyIHRoZSB2YXJpYWJsZSBoYXMgYmVlbiBpbml0aWFsaXplZC4gIFRoaXMgb25seSB3YXJucyBhYm91dAordmFyaWFibGVzIHRoYXQgYXJlIGluaXRpYWxpemVkIHdoZW4gdGhleSBhcmUgZGVjbGFyZWQuICBUaGlzIHdhcm5pbmcgaXMKK29ubHkgc3VwcG9ydGVkIGZvciBDIGFuZCBPYmplY3RpdmUtQzsgaW4gXCooQysgdGhpcyBzb3J0IG9mIGJyYW5jaCBpcyBhbgorZXJyb3IgaW4gYW55IGNhc2UuCisuU3AKK1wmXGZCXC1XanVtcFwtbWlzc2VzXC1pbml0XGZSIGlzIGluY2x1ZGVkIGluIFxmQlwtV2MrK1wtY29tcGF0XGZSLiAgSXQKK2NhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZSBcZkJcLVdub1wtanVtcFwtbWlzc2VzXC1pbml0XGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1Xc2lnblwtY29tcGFyZVxmUiIgNAorLklYIEl0ZW0gIi1Xc2lnbi1jb21wYXJlIgorV2FybiB3aGVuIGEgY29tcGFyaXNvbiBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQgdmFsdWVzIGNvdWxkIHByb2R1Y2UKK2FuIGluY29ycmVjdCByZXN1bHQgd2hlbiB0aGUgc2lnbmVkIHZhbHVlIGlzIGNvbnZlcnRlZCB0byB1bnNpZ25lZC4KK1RoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgYnkgXGZCXC1XZXh0cmFcZlI7IHRvIGdldCB0aGUgb3RoZXIgd2FybmluZ3MKK29mIFxmQlwtV2V4dHJhXGZSIHdpdGhvdXQgdGhpcyB3YXJuaW5nLCB1c2UgXGZCXC1XZXh0cmEgXC1Xbm9cLXNpZ25cLWNvbXBhcmVcZlIuCisuSVAgIlxmQlwtV3NpZ25cLWNvbnZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItV3NpZ24tY29udmVyc2lvbiIKK1dhcm4gZm9yIGltcGxpY2l0IGNvbnZlcnNpb25zIHRoYXQgbWF5IGNoYW5nZSB0aGUgc2lnbiBvZiBhbiBpbnRlZ2VyCit2YWx1ZSwgbGlrZSBhc3NpZ25pbmcgYSBzaWduZWQgaW50ZWdlciBleHByZXNzaW9uIHRvIGFuIHVuc2lnbmVkCitpbnRlZ2VyIHZhcmlhYmxlLiBBbiBleHBsaWNpdCBjYXN0IHNpbGVuY2VzIHRoZSB3YXJuaW5nLiBJbiBDLCB0aGlzCitvcHRpb24gaXMgZW5hYmxlZCBhbHNvIGJ5IFxmQlwtV2NvbnZlcnNpb25cZlIuCisuSVAgIlxmQlwtV3NpemVvZlwtcG9pbnRlclwtbWVtYWNjZXNzXGZSIiA0CisuSVggSXRlbSAiLVdzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3MiCitXYXJuIGZvciBzdXNwaWNpb3VzIGxlbmd0aCBwYXJhbWV0ZXJzIHRvIGNlcnRhaW4gc3RyaW5nIGFuZCBtZW1vcnkgYnVpbHQtaW4KK2Z1bmN0aW9ucyBpZiB0aGUgYXJndW1lbnQgdXNlcyBcZihDV1wqKENgc2l6ZW9mXCooQydcZlIuICBUaGlzIHdhcm5pbmcgd2FybnMgZS5nLgorYWJvdXQgXGYoQ1dcKihDYG1lbXNldCAocHRyLCAwLCBzaXplb2YgKHB0cikpO1wqKEMnXGZSIGlmIFxmKENXXCooQ2BwdHJcKihDJ1xmUiBpcyBub3QgYW4gYXJyYXksCitidXQgYSBwb2ludGVyLCBhbmQgc3VnZ2VzdHMgYSBwb3NzaWJsZSBmaXgsIG9yIGFib3V0CitcJlxmKENXXCooQ2BtZW1jcHkgKCZmb28sIHB0ciwgc2l6ZW9mICgmZm9vKSk7XCooQydcZlIuICBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieQorXCZcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2FkZHJlc3NcZlIiIDQKKy5JWCBJdGVtICItV2FkZHJlc3MiCitXYXJuIGFib3V0IHN1c3BpY2lvdXMgdXNlcyBvZiBtZW1vcnkgYWRkcmVzc2VzLiBUaGVzZSBpbmNsdWRlIHVzaW5nCit0aGUgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIGluIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiwgc3VjaCBhcworXCZcZihDV1wqKENgdm9pZCBmdW5jKHZvaWQpOyBpZiAoZnVuYylcKihDJ1xmUiwgYW5kIGNvbXBhcmlzb25zIGFnYWluc3QgdGhlIG1lbW9yeQorYWRkcmVzcyBvZiBhIHN0cmluZyBsaXRlcmFsLCBzdWNoIGFzIFxmKENXXCooQ2BpZiAoeCA9PSAiYWJjIilcKihDJ1xmUi4gIFN1Y2gKK3VzZXMgdHlwaWNhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBlcnJvcjogdGhlIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbgorYWx3YXlzIGV2YWx1YXRlcyB0byB0cnVlLCBzbyB0aGVpciB1c2UgaW4gYSBjb25kaXRpb25hbCB1c3VhbGx5CitpbmRpY2F0ZSB0aGF0IHRoZSBwcm9ncmFtbWVyIGZvcmdvdCB0aGUgcGFyZW50aGVzZXMgaW4gYSBmdW5jdGlvbgorY2FsbDsgYW5kIGNvbXBhcmlzb25zIGFnYWluc3Qgc3RyaW5nIGxpdGVyYWxzIHJlc3VsdCBpbiB1bnNwZWNpZmllZAorYmVoYXZpb3IgYW5kIGFyZSBub3QgcG9ydGFibGUgaW4gQywgc28gdGhleSB1c3VhbGx5IGluZGljYXRlIHRoYXQgdGhlCitwcm9ncmFtbWVyIGludGVuZGVkIHRvIHVzZSBcZihDV1wqKENgc3RyY21wXCooQydcZlIuICBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieQorXCZcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2xvZ2ljYWxcLW9wXGZSIiA0CisuSVggSXRlbSAiLVdsb2dpY2FsLW9wIgorV2FybiBhYm91dCBzdXNwaWNpb3VzIHVzZXMgb2YgbG9naWNhbCBvcGVyYXRvcnMgaW4gZXhwcmVzc2lvbnMuCitUaGlzIGluY2x1ZGVzIHVzaW5nIGxvZ2ljYWwgb3BlcmF0b3JzIGluIGNvbnRleHRzIHdoZXJlIGEKK2JpdC13aXNlIG9wZXJhdG9yIGlzIGxpa2VseSB0byBiZSBleHBlY3RlZC4KKy5JUCAiXGZCXC1XYWdncmVnYXRlXC1yZXR1cm5cZlIiIDQKKy5JWCBJdGVtICItV2FnZ3JlZ2F0ZS1yZXR1cm4iCitXYXJuIGlmIGFueSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gc3RydWN0dXJlcyBvciB1bmlvbnMgYXJlIGRlZmluZWQgb3IKK2NhbGxlZC4gIChJbiBsYW5ndWFnZXMgd2hlcmUgeW91IGNhbiByZXR1cm4gYW4gYXJyYXksIHRoaXMgYWxzbyBlbGljaXRzCithIHdhcm5pbmcuKQorLklQICJcZkJcLVdub1wtYWdncmVzc2l2ZVwtbG9vcFwtb3B0aW1pemF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1Xbm8tYWdncmVzc2l2ZS1sb29wLW9wdGltaXphdGlvbnMiCitXYXJuIGlmIGluIGEgbG9vcCB3aXRoIGNvbnN0YW50IG51bWJlciBvZiBpdGVyYXRpb25zIHRoZSBjb21waWxlciBkZXRlY3RzCit1bmRlZmluZWQgYmVoYXZpb3IgaW4gc29tZSBzdGF0ZW1lbnQgZHVyaW5nIG9uZSBvciBtb3JlIG9mIHRoZSBpdGVyYXRpb25zLgorLklQICJcZkJcLVdub1wtYXR0cmlidXRlc1xmUiIgNAorLklYIEl0ZW0gIi1Xbm8tYXR0cmlidXRlcyIKK0RvIG5vdCB3YXJuIGlmIGFuIHVuZXhwZWN0ZWQgXGYoQ1dcKihDYF9cfF9hdHRyaWJ1dGVfXHxfXCooQydcZlIgaXMgdXNlZCwgc3VjaCBhcwordW5yZWNvZ25pemVkIGF0dHJpYnV0ZXMsIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgYXBwbGllZCB0byB2YXJpYWJsZXMsCitldGMuICBUaGlzIGRvZXMgbm90IHN0b3AgZXJyb3JzIGZvciBpbmNvcnJlY3QgdXNlIG9mIHN1cHBvcnRlZAorYXR0cmlidXRlcy4KKy5JUCAiXGZCXC1Xbm9cLWJ1aWx0aW5cLW1hY3JvXC1yZWRlZmluZWRcZlIiIDQKKy5JWCBJdGVtICItV25vLWJ1aWx0aW4tbWFjcm8tcmVkZWZpbmVkIgorRG8gbm90IHdhcm4gaWYgY2VydGFpbiBidWlsdC1pbiBtYWNyb3MgYXJlIHJlZGVmaW5lZC4gIFRoaXMgc3VwcHJlc3Nlcword2FybmluZ3MgZm9yIHJlZGVmaW5pdGlvbiBvZiBcZihDV1wqKENgX1x8X1RJTUVTVEFNUF9cfF9cKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF9USU1FX1x8X1wqKEMnXGZSLAorXCZcZihDV1wqKENgX1x8X0RBVEVfXHxfXCooQydcZlIsIFxmKENXXCooQ2BfXHxfRklMRV9cfF9cKihDJ1xmUiwgYW5kIFxmKENXXCooQ2BfXHxfQkFTRV9GSUxFX1x8X1wqKEMnXGZSLgorLklQICJcZkJcLVdzdHJpY3RcLXByb3RvdHlwZXNcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdzdHJpY3QtcHJvdG90eXBlcyAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGlmIGEgZnVuY3Rpb24gaXMgZGVjbGFyZWQgb3IgZGVmaW5lZCB3aXRob3V0IHNwZWNpZnlpbmcgdGhlCithcmd1bWVudCB0eXBlcy4gIChBbiBvbGQtc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBwZXJtaXR0ZWQgd2l0aG91dAorYSB3YXJuaW5nIGlmIHByZWNlZGVkIGJ5IGEgZGVjbGFyYXRpb24gdGhhdCBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50Cit0eXBlcy4pCisuSVAgIlxmQlwtV29sZFwtc3R5bGVcLWRlY2xhcmF0aW9uXGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xb2xkLXN0eWxlLWRlY2xhcmF0aW9uIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gZm9yIG9ic29sZXNjZW50IHVzYWdlcywgYWNjb3JkaW5nIHRvIHRoZSBDIFN0YW5kYXJkLCBpbiBhCitkZWNsYXJhdGlvbi4gRm9yIGV4YW1wbGUsIHdhcm4gaWYgc3RvcmFnZS1jbGFzcyBzcGVjaWZpZXJzIGxpa2UKK1wmXGYoQ1dcKihDYHN0YXRpY1wqKEMnXGZSIGFyZSBub3QgdGhlIGZpcnN0IHRoaW5ncyBpbiBhIGRlY2xhcmF0aW9uLiAgVGhpcyB3YXJuaW5nCitpcyBhbHNvIGVuYWJsZWQgYnkgXGZCXC1XZXh0cmFcZlIuCisuSVAgIlxmQlwtV29sZFwtc3R5bGVcLWRlZmluaXRpb25cZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGlmIGFuIG9sZC1zdHlsZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIHVzZWQuICBBIHdhcm5pbmcgaXMgZ2l2ZW4KK2V2ZW4gaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBwcm90b3R5cGUuCisuSVAgIlxmQlwtV21pc3NpbmdcLXBhcmFtZXRlclwtdHlwZVxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV21pc3NpbmctcGFyYW1ldGVyLXR5cGUgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIgorQSBmdW5jdGlvbiBwYXJhbWV0ZXIgaXMgZGVjbGFyZWQgd2l0aG91dCBhIHR5cGUgc3BlY2lmaWVyIGluIEsmUlwtc3R5bGUKK2Z1bmN0aW9uczoKKy5TcAorLlZiIDEKK1wmICAgICAgICB2b2lkIGZvbyhiYXIpIHsgfQorLlZlCisuU3AKK1RoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgYnkgXGZCXC1XZXh0cmFcZlIuCisuSVAgIlxmQlwtV21pc3NpbmdcLXByb3RvdHlwZXNcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdtaXNzaW5nLXByb3RvdHlwZXMgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIgorV2FybiBpZiBhIGdsb2JhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIHdpdGhvdXQgYSBwcmV2aW91cyBwcm90b3R5cGUKK2RlY2xhcmF0aW9uLiAgVGhpcyB3YXJuaW5nIGlzIGlzc3VlZCBldmVuIGlmIHRoZSBkZWZpbml0aW9uIGl0c2VsZgorcHJvdmlkZXMgYSBwcm90b3R5cGUuICBVc2UgdGhpcyBvcHRpb24gdG8gZGV0ZWN0IGdsb2JhbCBmdW5jdGlvbnMKK3RoYXQgZG8gbm90IGhhdmUgYSBtYXRjaGluZyBwcm90b3R5cGUgZGVjbGFyYXRpb24gaW4gYSBoZWFkZXIgZmlsZS4KK1RoaXMgb3B0aW9uIGlzIG5vdCB2YWxpZCBmb3IgXCooQysgYmVjYXVzZSBhbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zCitwcm92aWRlIHByb3RvdHlwZXMgYW5kIGEgbm9uLW1hdGNoaW5nIGRlY2xhcmF0aW9uIHdpbGwgZGVjbGFyZSBhbgorb3ZlcmxvYWQgcmF0aGVyIHRoYW4gY29uZmxpY3Qgd2l0aCBhbiBlYXJsaWVyIGRlY2xhcmF0aW9uLgorVXNlIFxmQlwtV21pc3NpbmdcLWRlY2xhcmF0aW9uc1xmUiB0byBkZXRlY3QgbWlzc2luZyBkZWNsYXJhdGlvbnMgaW4gXCooQysuCisuSVAgIlxmQlwtV21pc3NpbmdcLWRlY2xhcmF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1XbWlzc2luZy1kZWNsYXJhdGlvbnMiCitXYXJuIGlmIGEgZ2xvYmFsIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aG91dCBhIHByZXZpb3VzIGRlY2xhcmF0aW9uLgorRG8gc28gZXZlbiBpZiB0aGUgZGVmaW5pdGlvbiBpdHNlbGYgcHJvdmlkZXMgYSBwcm90b3R5cGUuCitVc2UgdGhpcyBvcHRpb24gdG8gZGV0ZWN0IGdsb2JhbCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IGRlY2xhcmVkIGluCitoZWFkZXIgZmlsZXMuICBJbiBDLCBubyB3YXJuaW5ncyBhcmUgaXNzdWVkIGZvciBmdW5jdGlvbnMgd2l0aCBwcmV2aW91cworbm9uLXByb3RvdHlwZSBkZWNsYXJhdGlvbnM7IHVzZSBcZkJcLVdtaXNzaW5nXC1wcm90b3R5cGVcZlIgdG8gZGV0ZWN0CittaXNzaW5nIHByb3RvdHlwZXMuICBJbiBcKihDKywgbm8gd2FybmluZ3MgYXJlIGlzc3VlZCBmb3IgZnVuY3Rpb24gdGVtcGxhdGVzLAorb3IgZm9yIGlubGluZSBmdW5jdGlvbnMsIG9yIGZvciBmdW5jdGlvbnMgaW4gYW5vbnltb3VzIG5hbWVzcGFjZXMuCisuSVAgIlxmQlwtV21pc3NpbmdcLWZpZWxkXC1pbml0aWFsaXplcnNcZlIiIDQKKy5JWCBJdGVtICItV21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIgorV2FybiBpZiBhIHN0cnVjdHVyZSdzIGluaXRpYWxpemVyIGhhcyBzb21lIGZpZWxkcyBtaXNzaW5nLiAgRm9yCitleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgY2F1c2VzIHN1Y2ggYSB3YXJuaW5nLCBiZWNhdXNlCitcJlxmKENXXCooQ2B4LmhcKihDJ1xmUiBpcyBpbXBsaWNpdGx5IHplcm86CisuU3AKKy5WYiAyCitcJiAgICAgICAgc3RydWN0IHMgeyBpbnQgZiwgZywgaDsgfTsKK1wmICAgICAgICBzdHJ1Y3QgcyB4ID0geyAzLCA0IH07CisuVmUKKy5TcAorVGhpcyBvcHRpb24gZG9lcyBub3Qgd2FybiBhYm91dCBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgc28gdGhlIGZvbGxvd2luZworbW9kaWZpY2F0aW9uIGRvZXMgbm90IHRyaWdnZXIgYSB3YXJuaW5nOgorLlNwCisuVmIgMgorXCYgICAgICAgIHN0cnVjdCBzIHsgaW50IGYsIGcsIGg7IH07CitcJiAgICAgICAgc3RydWN0IHMgeCA9IHsgLmYgPSAzLCAuZyA9IDQgfTsKKy5WZQorLlNwCitUaGlzIHdhcm5pbmcgaXMgaW5jbHVkZWQgaW4gXGZCXC1XZXh0cmFcZlIuICBUbyBnZXQgb3RoZXIgXGZCXC1XZXh0cmFcZlIKK3dhcm5pbmdzIHdpdGhvdXQgdGhpcyBvbmUsIHVzZSBcZkJcLVdleHRyYSBcLVdub1wtbWlzc2luZ1wtZmllbGRcLWluaXRpYWxpemVyc1xmUi4KKy5JUCAiXGZCXC1Xbm9cLW11bHRpY2hhclxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tbXVsdGljaGFyIgorRG8gbm90IHdhcm4gaWYgYSBtdWx0aWNoYXJhY3RlciBjb25zdGFudCAoXGZCJ1xzLTFGT09GXHMwJ1xmUikgaXMgdXNlZC4KK1VzdWFsbHkgdGhleSBpbmRpY2F0ZSBhIHR5cG8gaW4gdGhlIHVzZXIncyBjb2RlLCBhcyB0aGV5IGhhdmUKK2ltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWVzLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHBvcnRhYmxlIGNvZGUuCisuSVAgIlxmQlwtV25vcm1hbGl6ZWQ9PG5vbmV8aWR8bmZjfG5ma2M+XGZSIiA0CisuSVggSXRlbSAiLVdub3JtYWxpemVkPTxub25lfGlkfG5mY3xuZmtjPiIKK0luIFxzLTFJU09cczAgQyBhbmQgXHMtMUlTT1xzMCBcKihDKywgdHdvIGlkZW50aWZpZXJzIGFyZSBkaWZmZXJlbnQgaWYgdGhleSBhcmUKK2RpZmZlcmVudCBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycy4gIEhvd2V2ZXIsIHNvbWV0aW1lcyB3aGVuIGNoYXJhY3RlcnMKK291dHNpZGUgdGhlIGJhc2ljIFxzLTFBU0NJSVxzMCBjaGFyYWN0ZXIgc2V0IGFyZSB1c2VkLCB5b3UgY2FuIGhhdmUgdHdvCitkaWZmZXJlbnQgY2hhcmFjdGVyIHNlcXVlbmNlcyB0aGF0IGxvb2sgdGhlIHNhbWUuICBUbyBhdm9pZCBjb25mdXNpb24sCit0aGUgXHMtMUlTT1xzMCAxMDY0NiBzdGFuZGFyZCBzZXRzIG91dCBzb21lIFxmSW5vcm1hbGl6YXRpb24gcnVsZXNcZlIgd2hpY2gKK3doZW4gYXBwbGllZCBlbnN1cmUgdGhhdCB0d28gc2VxdWVuY2VzIHRoYXQgbG9vayB0aGUgc2FtZSBhcmUgdHVybmVkIGludG8KK3RoZSBzYW1lIHNlcXVlbmNlLiAgXHMtMUdDQ1xzMCBjYW4gd2FybiB5b3UgaWYgeW91IGFyZSB1c2luZyBpZGVudGlmaWVycyB0aGF0CitoYXZlIG5vdCBiZWVuIG5vcm1hbGl6ZWQ7IHRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoYXQgd2FybmluZy4KKy5TcAorVGhlcmUgYXJlIGZvdXIgbGV2ZWxzIG9mIHdhcm5pbmcgc3VwcG9ydGVkIGJ5IFxzLTFHQ0NcczAuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLVdub3JtYWxpemVkPW5mY1xmUiwgd2hpY2ggd2FybnMgYWJvdXQgYW55IGlkZW50aWZpZXIgdGhhdCBpcworbm90IGluIHRoZSBccy0xSVNPXHMwIDEwNjQ2IFwqKEwiQ1wqKFIiIG5vcm1hbGl6ZWQgZm9ybSwgXGZJXHMtMU5GQ1xzMFxmUi4gIFxzLTFORkNcczAgaXMgdGhlCityZWNvbW1lbmRlZCBmb3JtIGZvciBtb3N0IHVzZXMuCisuU3AKK1VuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBzb21lIGNoYXJhY3RlcnMgYWxsb3dlZCBpbiBpZGVudGlmaWVycyBieQorXCZccy0xSVNPXHMwIEMgYW5kIFxzLTFJU09cczAgXCooQysgdGhhdCwgd2hlbiB0dXJuZWQgaW50byBccy0xTkZDXHMwLCBhcmUgbm90IGFsbG93ZWQgaW4gCitpZGVudGlmaWVycy4gIFRoYXQgaXMsIHRoZXJlJ3Mgbm8gd2F5IHRvIHVzZSB0aGVzZSBzeW1ib2xzIGluIHBvcnRhYmxlCitcJlxzLTFJU09cczAgQyBvciBcKihDKyBhbmQgaGF2ZSBhbGwgeW91ciBpZGVudGlmaWVycyBpbiBccy0xTkZDXHMwLgorXCZcZkJcLVdub3JtYWxpemVkPWlkXGZSIHN1cHByZXNzZXMgdGhlIHdhcm5pbmcgZm9yIHRoZXNlIGNoYXJhY3RlcnMuCitJdCBpcyBob3BlZCB0aGF0IGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgc3RhbmRhcmRzIGludm9sdmVkIHdpbGwgY29ycmVjdAordGhpcywgd2hpY2ggaXMgd2h5IHRoaXMgb3B0aW9uIGlzIG5vdCB0aGUgZGVmYXVsdC4KKy5TcAorWW91IGNhbiBzd2l0Y2ggdGhlIHdhcm5pbmcgb2ZmIGZvciBhbGwgY2hhcmFjdGVycyBieSB3cml0aW5nCitcJlxmQlwtV25vcm1hbGl6ZWQ9bm9uZVxmUi4gIFlvdSBzaG91bGQgb25seSBkbyB0aGlzIGlmIHlvdQorYXJlIHVzaW5nIHNvbWUgb3RoZXIgbm9ybWFsaXphdGlvbiBzY2hlbWUgKGxpa2UgXCooTCJEXCooUiIpLCBiZWNhdXNlCitvdGhlcndpc2UgeW91IGNhbiBlYXNpbHkgY3JlYXRlIGJ1Z3MgdGhhdCBhcmUgbGl0ZXJhbGx5IGltcG9zc2libGUgdG8gc2VlLgorLlNwCitTb21lIGNoYXJhY3RlcnMgaW4gXHMtMUlTT1xzMCAxMDY0NiBoYXZlIGRpc3RpbmN0IG1lYW5pbmdzIGJ1dCBsb29rIGlkZW50aWNhbAoraW4gc29tZSBmb250cyBvciBkaXNwbGF5IG1ldGhvZG9sb2dpZXMsIGVzcGVjaWFsbHkgb25jZSBmb3JtYXR0aW5nIGhhcworYmVlbiBhcHBsaWVkLiAgRm9yIGluc3RhbmNlIFxmKENXXCooQ2BcZXUyMDdGXCooQydcZlIsIFwqKEwiXHMtMVNVUEVSU0NSSVBUXHMwIFxzLTFMQVRJTlxzMCBccy0xU01BTExcczAKK1wmXHMtMUxFVFRFUlxzMCBOXCooUiIsIGRpc3BsYXlzIGp1c3QgbGlrZSBhIHJlZ3VsYXIgXGYoQ1dcKihDYG5cKihDJ1xmUiB0aGF0IGhhcyBiZWVuCitwbGFjZWQgaW4gYSBzdXBlcnNjcmlwdC4gIFxzLTFJU09cczAgMTA2NDYgZGVmaW5lcyB0aGUgXGZJXHMtMU5GS0NcczBcZlIKK25vcm1hbGl6YXRpb24gc2NoZW1lIHRvIGNvbnZlcnQgYWxsIHRoZXNlIGludG8gYSBzdGFuZGFyZCBmb3JtIGFzCit3ZWxsLCBhbmQgXHMtMUdDQ1xzMCB3YXJucyBpZiB5b3VyIGNvZGUgaXMgbm90IGluIFxzLTFORktDXHMwIGlmIHlvdSB1c2UKK1wmXGZCXC1Xbm9ybWFsaXplZD1uZmtjXGZSLiAgVGhpcyB3YXJuaW5nIGlzIGNvbXBhcmFibGUgdG8gd2FybmluZworYWJvdXQgZXZlcnkgaWRlbnRpZmllciB0aGF0IGNvbnRhaW5zIHRoZSBsZXR0ZXIgTyBiZWNhdXNlIGl0IG1pZ2h0IGJlCitjb25mdXNlZCB3aXRoIHRoZSBkaWdpdCAwLCBhbmQgc28gaXMgbm90IHRoZSBkZWZhdWx0LCBidXQgbWF5IGJlCit1c2VmdWwgYXMgYSBsb2NhbCBjb2RpbmcgY29udmVudGlvbiBpZiB0aGUgcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQgCitjYW5ub3QgYmUgZml4ZWQgdG8gZGlzcGxheSB0aGVzZSBjaGFyYWN0ZXJzIGRpc3RpbmN0bHkuCisuSVAgIlxmQlwtV25vXC1kZXByZWNhdGVkXGZSIiA0CisuSVggSXRlbSAiLVduby1kZXByZWNhdGVkIgorRG8gbm90IHdhcm4gYWJvdXQgdXNhZ2Ugb2YgZGVwcmVjYXRlZCBmZWF0dXJlcy4KKy5JUCAiXGZCXC1Xbm9cLWRlcHJlY2F0ZWRcLWRlY2xhcmF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCitEbyBub3Qgd2FybiBhYm91dCB1c2VzIG9mIGZ1bmN0aW9ucywKK3ZhcmlhYmxlcywgYW5kIHR5cGVzIG1hcmtlZCBhcyBkZXByZWNhdGVkIGJ5IHVzaW5nIHRoZSBcZihDV1wqKENgZGVwcmVjYXRlZFwqKEMnXGZSCithdHRyaWJ1dGUuCisuSVAgIlxmQlwtV25vXC1vdmVyZmxvd1xmUiIgNAorLklYIEl0ZW0gIi1Xbm8tb3ZlcmZsb3ciCitEbyBub3Qgd2FybiBhYm91dCBjb21waWxlLXRpbWUgb3ZlcmZsb3cgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuCisuSVAgIlxmQlwtV292ZXJyaWRlXC1pbml0XGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xb3ZlcnJpZGUtaW5pdCAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGlmIGFuIGluaXRpYWxpemVkIGZpZWxkIHdpdGhvdXQgc2lkZSBlZmZlY3RzIGlzIG92ZXJyaWRkZW4gd2hlbgordXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMuCisuU3AKK1RoaXMgd2FybmluZyBpcyBpbmNsdWRlZCBpbiBcZkJcLVdleHRyYVxmUi4gIFRvIGdldCBvdGhlcgorXCZcZkJcLVdleHRyYVxmUiB3YXJuaW5ncyB3aXRob3V0IHRoaXMgb25lLCB1c2UgXGZCXC1XZXh0cmEKK1wmXC1Xbm9cLW92ZXJyaWRlXC1pbml0XGZSLgorLklQICJcZkJcLVdwYWNrZWRcZlIiIDQKKy5JWCBJdGVtICItV3BhY2tlZCIKK1dhcm4gaWYgYSBzdHJ1Y3R1cmUgaXMgZ2l2ZW4gdGhlIHBhY2tlZCBhdHRyaWJ1dGUsIGJ1dCB0aGUgcGFja2VkCithdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBvbiB0aGUgbGF5b3V0IG9yIHNpemUgb2YgdGhlIHN0cnVjdHVyZS4KK1N1Y2ggc3RydWN0dXJlcyBtYXkgYmUgbWlzLWFsaWduZWQgZm9yIGxpdHRsZSBiZW5lZml0LiAgRm9yCitpbnN0YW5jZSwgaW4gdGhpcyBjb2RlLCB0aGUgdmFyaWFibGUgXGYoQ1dcKihDYGYueFwqKEMnXGZSIGluIFxmKENXXCooQ2BzdHJ1Y3QgYmFyXCooQydcZlIKK2lzIG1pc2FsaWduZWQgZXZlbiB0aG91Z2ggXGYoQ1dcKihDYHN0cnVjdCBiYXJcKihDJ1xmUiBkb2VzIG5vdCBpdHNlbGYKK2hhdmUgdGhlIHBhY2tlZCBhdHRyaWJ1dGU6CisuU3AKKy5WYiA4CitcJiAgICAgICAgc3RydWN0IGZvbyB7CitcJiAgICAgICAgICBpbnQgeDsKK1wmICAgICAgICAgIGNoYXIgYSwgYiwgYywgZDsKK1wmICAgICAgICB9IF9cfF9hdHRyaWJ1dGVfXHxfKChwYWNrZWQpKTsKK1wmICAgICAgICBzdHJ1Y3QgYmFyIHsKK1wmICAgICAgICAgIGNoYXIgejsKK1wmICAgICAgICAgIHN0cnVjdCBmb28gZjsKK1wmICAgICAgICB9OworLlZlCisuSVAgIlxmQlwtV3BhY2tlZFwtYml0ZmllbGRcLWNvbXBhdFxmUiIgNAorLklYIEl0ZW0gIi1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCIKK1RoZSA0LjEsIDQuMiBhbmQgNC4zIHNlcmllcyBvZiBccy0xR0NDXHMwIGlnbm9yZSB0aGUgXGYoQ1dcKihDYHBhY2tlZFwqKEMnXGZSIGF0dHJpYnV0ZQorb24gYml0LWZpZWxkcyBvZiB0eXBlIFxmKENXXCooQ2BjaGFyXCooQydcZlIuICBUaGlzIGhhcyBiZWVuIGZpeGVkIGluIFxzLTFHQ0NcczAgNC40IGJ1dAordGhlIGNoYW5nZSBjYW4gbGVhZCB0byBkaWZmZXJlbmNlcyBpbiB0aGUgc3RydWN0dXJlIGxheW91dC4gIFxzLTFHQ0NcczAKK2luZm9ybXMgeW91IHdoZW4gdGhlIG9mZnNldCBvZiBzdWNoIGEgZmllbGQgaGFzIGNoYW5nZWQgaW4gXHMtMUdDQ1xzMCA0LjQuCitGb3IgZXhhbXBsZSB0aGVyZSBpcyBubyBsb25nZXIgYSA0XC1iaXQgcGFkZGluZyBiZXR3ZWVuIGZpZWxkIFxmKENXXCooQ2BhXCooQydcZlIKK2FuZCBcZihDV1wqKENgYlwqKEMnXGZSIGluIHRoaXMgc3RydWN0dXJlOgorLlNwCisuVmIgNQorXCYgICAgICAgIHN0cnVjdCBmb28KK1wmICAgICAgICB7CitcJiAgICAgICAgICBjaGFyIGE6NDsKK1wmICAgICAgICAgIGNoYXIgYjo4OworXCYgICAgICAgIH0gX1x8X2F0dHJpYnV0ZV9cfF8gKChwYWNrZWQpKTsKKy5WZQorLlNwCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAgVXNlCitcJlxmQlwtV25vXC1wYWNrZWRcLWJpdGZpZWxkXC1jb21wYXRcZlIgdG8gZGlzYWJsZSB0aGlzIHdhcm5pbmcuCisuSVAgIlxmQlwtV3BhZGRlZFxmUiIgNAorLklYIEl0ZW0gIi1XcGFkZGVkIgorV2FybiBpZiBwYWRkaW5nIGlzIGluY2x1ZGVkIGluIGEgc3RydWN0dXJlLCBlaXRoZXIgdG8gYWxpZ24gYW4gZWxlbWVudAorb2YgdGhlIHN0cnVjdHVyZSBvciB0byBhbGlnbiB0aGUgd2hvbGUgc3RydWN0dXJlLiAgU29tZXRpbWVzIHdoZW4gdGhpcworaGFwcGVucyBpdCBpcyBwb3NzaWJsZSB0byByZWFycmFuZ2UgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIHRvCityZWR1Y2UgdGhlIHBhZGRpbmcgYW5kIHNvIG1ha2UgdGhlIHN0cnVjdHVyZSBzbWFsbGVyLgorLklQICJcZkJcLVdyZWR1bmRhbnRcLWRlY2xzXGZSIiA0CisuSVggSXRlbSAiLVdyZWR1bmRhbnQtZGVjbHMiCitXYXJuIGlmIGFueXRoaW5nIGlzIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHNjb3BlLCBldmVuIGluCitjYXNlcyB3aGVyZSBtdWx0aXBsZSBkZWNsYXJhdGlvbiBpcyB2YWxpZCBhbmQgY2hhbmdlcyBub3RoaW5nLgorLklQICJcZkJcLVduZXN0ZWRcLWV4dGVybnNcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVduZXN0ZWQtZXh0ZXJucyAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGlmIGFuIFxmKENXXCooQ2BleHRlcm5cKihDJ1xmUiBkZWNsYXJhdGlvbiBpcyBlbmNvdW50ZXJlZCB3aXRoaW4gYSBmdW5jdGlvbi4KKy5JUCAiXGZCXC1Xbm9cLWluaGVyaXRlZFwtdmFyaWFkaWNcLWN0b3JcZlIiIDQKKy5JWCBJdGVtICItV25vLWluaGVyaXRlZC12YXJpYWRpYy1jdG9yIgorU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgdXNlIG9mIFwqKEMrMTEgaW5oZXJpdGluZyBjb25zdHJ1Y3RvcnMgd2hlbiB0aGUKK2Jhc2UgY2xhc3MgaW5oZXJpdGVkIGZyb20gaGFzIGEgQyB2YXJpYWRpYyBjb25zdHJ1Y3RvcjsgdGhlIHdhcm5pbmcgaXMKK29uIGJ5IGRlZmF1bHQgYmVjYXVzZSB0aGUgZWxsaXBzaXMgaXMgbm90IGluaGVyaXRlZC4KKy5JUCAiXGZCXC1XaW5saW5lXGZSIiA0CisuSVggSXRlbSAiLVdpbmxpbmUiCitXYXJuIGlmIGEgZnVuY3Rpb24gdGhhdCBpcyBkZWNsYXJlZCBhcyBpbmxpbmUgY2Fubm90IGJlIGlubGluZWQuCitFdmVuIHdpdGggdGhpcyBvcHRpb24sIHRoZSBjb21waWxlciBkb2VzIG5vdCB3YXJuIGFib3V0IGZhaWx1cmVzIHRvCitpbmxpbmUgZnVuY3Rpb25zIGRlY2xhcmVkIGluIHN5c3RlbSBoZWFkZXJzLgorLlNwCitUaGUgY29tcGlsZXIgdXNlcyBhIHZhcmlldHkgb2YgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QKK3RvIGlubGluZSBhIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZSBjb21waWxlciB0YWtlcyBpbnRvIGFjY291bnQKK3RoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiBiZWluZyBpbmxpbmVkIGFuZCB0aGUgYW1vdW50IG9mIGlubGluaW5nCit0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4gIFRoZXJlZm9yZSwKK3NlZW1pbmdseSBpbnNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIHNvdXJjZSBwcm9ncmFtIGNhbiBjYXVzZSB0aGUKK3dhcm5pbmdzIHByb2R1Y2VkIGJ5IFxmQlwtV2lubGluZVxmUiB0byBhcHBlYXIgb3IgZGlzYXBwZWFyLgorLklQICJcZkJcLVdub1wtaW52YWxpZFwtb2Zmc2V0b2ZcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVduby1pbnZhbGlkLW9mZnNldG9mICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitTdXBwcmVzcyB3YXJuaW5ncyBmcm9tIGFwcGx5aW5nIHRoZSBcZkJvZmZzZXRvZlxmUiBtYWNybyB0byBhIG5vbi1QT0QKK3R5cGUuICBBY2NvcmRpbmcgdG8gdGhlIDE5OTggXHMtMUlTT1xzMCBcKihDKyBzdGFuZGFyZCwgYXBwbHlpbmcgXGZCb2Zmc2V0b2ZcZlIKK3RvIGEgbm9uLVBPRCB0eXBlIGlzIHVuZGVmaW5lZC4gIEluIGV4aXN0aW5nIFwqKEMrIGltcGxlbWVudGF0aW9ucywKK2hvd2V2ZXIsIFxmQm9mZnNldG9mXGZSIHR5cGljYWxseSBnaXZlcyBtZWFuaW5nZnVsIHJlc3VsdHMgZXZlbiB3aGVuCithcHBsaWVkIHRvIGNlcnRhaW4ga2luZHMgb2Ygbm9uLVBPRCB0eXBlcyAoc3VjaCBhcyBhIHNpbXBsZQorXCZcZkJzdHJ1Y3RcZlIgdGhhdCBmYWlscyB0byBiZSBhIFxzLTFQT0RcczAgdHlwZSBvbmx5IGJ5IHZpcnR1ZSBvZiBoYXZpbmcgYQorY29uc3RydWN0b3IpLiAgVGhpcyBmbGFnIGlzIGZvciB1c2VycyB3aG8gYXJlIGF3YXJlIHRoYXQgdGhleSBhcmUKK3dyaXRpbmcgbm9ucG9ydGFibGUgY29kZSBhbmQgd2hvIGhhdmUgZGVsaWJlcmF0ZWx5IGNob3NlbiB0byBpZ25vcmUgdGhlCit3YXJuaW5nIGFib3V0IGl0LgorLlNwCitUaGUgcmVzdHJpY3Rpb25zIG9uIFxmQm9mZnNldG9mXGZSIG1heSBiZSByZWxheGVkIGluIGEgZnV0dXJlIHZlcnNpb24KK29mIHRoZSBcKihDKyBzdGFuZGFyZC4KKy5JUCAiXGZCXC1Xbm9cLWludFwtdG9cLXBvaW50ZXJcLWNhc3RcZlIiIDQKKy5JWCBJdGVtICItV25vLWludC10by1wb2ludGVyLWNhc3QiCitTdXBwcmVzcyB3YXJuaW5ncyBmcm9tIGNhc3RzIHRvIHBvaW50ZXIgdHlwZSBvZiBhbiBpbnRlZ2VyIG9mIGEKK2RpZmZlcmVudCBzaXplLiBJbiBcKihDKywgY2FzdGluZyB0byBhIHBvaW50ZXIgdHlwZSBvZiBzbWFsbGVyIHNpemUgaXMKK2FuIGVycm9yLiBcZkJXaW50LXRvLXBvaW50ZXItY2FzdFxmUiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtV25vXC1wb2ludGVyXC10b1wtaW50XC1jYXN0XGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitTdXBwcmVzcyB3YXJuaW5ncyBmcm9tIGNhc3RzIGZyb20gYSBwb2ludGVyIHRvIGFuIGludGVnZXIgdHlwZSBvZiBhCitkaWZmZXJlbnQgc2l6ZS4KKy5JUCAiXGZCXC1XaW52YWxpZFwtcGNoXGZSIiA0CisuSVggSXRlbSAiLVdpbnZhbGlkLXBjaCIKK1dhcm4gaWYgYSBwcmVjb21waWxlZCBoZWFkZXIgaXMgZm91bmQgaW4KK3RoZSBzZWFyY2ggcGF0aCBidXQgY2FuJ3QgYmUgdXNlZC4KKy5JUCAiXGZCXC1XbG9uZ1wtbG9uZ1xmUiIgNAorLklYIEl0ZW0gIi1XbG9uZy1sb25nIgorV2FybiBpZiBcZkJsb25nIGxvbmdcZlIgdHlwZSBpcyB1c2VkLiAgVGhpcyBpcyBlbmFibGVkIGJ5IGVpdGhlcgorXCZcZkJcLVdwZWRhbnRpY1xmUiBvciBcZkJcLVd0cmFkaXRpb25hbFxmUiBpbiBccy0xSVNPXHMwIEM5MCBhbmQgXCooQys5OAorbW9kZXMuICBUbyBpbmhpYml0IHRoZSB3YXJuaW5nIG1lc3NhZ2VzLCB1c2UgXGZCXC1Xbm9cLWxvbmdcLWxvbmdcZlIuCisuSVAgIlxmQlwtV3ZhcmlhZGljXC1tYWNyb3NcZlIiIDQKKy5JWCBJdGVtICItV3ZhcmlhZGljLW1hY3JvcyIKK1dhcm4gaWYgdmFyaWFkaWMgbWFjcm9zIGFyZSB1c2VkIGluIHBlZGFudGljIFxzLTFJU09cczAgQzkwIG1vZGUsIG9yIHRoZSBccy0xR05VXHMwCithbHRlcm5hdGUgc3ludGF4IHdoZW4gaW4gcGVkYW50aWMgXHMtMUlTT1xzMCBDOTkgbW9kZS4gIFRoaXMgaXMgZGVmYXVsdC4KK1RvIGluaGliaXQgdGhlIHdhcm5pbmcgbWVzc2FnZXMsIHVzZSBcZkJcLVdub1wtdmFyaWFkaWNcLW1hY3Jvc1xmUi4KKy5JUCAiXGZCXC1XdmFyYXJnc1xmUiIgNAorLklYIEl0ZW0gIi1XdmFyYXJncyIKK1dhcm4gdXBvbiBxdWVzdGlvbmFibGUgdXNhZ2Ugb2YgdGhlIG1hY3JvcyB1c2VkIHRvIGhhbmRsZSB2YXJpYWJsZQorYXJndW1lbnRzIGxpa2UgXGZCdmFfc3RhcnRcZlIuICBUaGlzIGlzIGRlZmF1bHQuICBUbyBpbmhpYml0IHRoZQord2FybmluZyBtZXNzYWdlcywgdXNlIFxmQlwtV25vXC12YXJhcmdzXGZSLgorLklQICJcZkJcLVd2ZWN0b3JcLW9wZXJhdGlvblwtcGVyZm9ybWFuY2VcZlIiIDQKKy5JWCBJdGVtICItV3ZlY3Rvci1vcGVyYXRpb24tcGVyZm9ybWFuY2UiCitXYXJuIGlmIHZlY3RvciBvcGVyYXRpb24gaXMgbm90IGltcGxlbWVudGVkIHZpYSBccy0xU0lNRFxzMCBjYXBhYmlsaXRpZXMgb2YgdGhlCithcmNoaXRlY3R1cmUuICBNYWlubHkgdXNlZnVsIGZvciB0aGUgcGVyZm9ybWFuY2UgdHVuaW5nLgorVmVjdG9yIG9wZXJhdGlvbiBjYW4gYmUgaW1wbGVtZW50ZWQgXGYoQ1dcKihDYHBpZWNld2lzZVwqKEMnXGZSLCB3aGljaCBtZWFucyB0aGF0IHRoZQorc2NhbGFyIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgb24gZXZlcnkgdmVjdG9yIGVsZW1lbnQ7IAorXCZcZihDV1wqKENgaW4gcGFyYWxsZWxcKihDJ1xmUiwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdmVjdG9yIG9wZXJhdGlvbiBpcyBpbXBsZW1lbnRlZAordXNpbmcgc2NhbGFycyBvZiB3aWRlciB0eXBlLCB3aGljaCBub3JtYWxseSBpcyBtb3JlIHBlcmZvcm1hbmNlIGVmZmljaWVudDsKK2FuZCBcZihDV1wqKENgYXMgYSBzaW5nbGUgc2NhbGFyXCooQydcZlIsIHdoaWNoIG1lYW5zIHRoYXQgdmVjdG9yIGZpdHMgaW50byBhCitzY2FsYXIgdHlwZS4KKy5JUCAiXGZCXC1Xbm9cLXZpcnR1YWxcLW1vdmVcLWFzc2lnblxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tdmlydHVhbC1tb3ZlLWFzc2lnbiIKK1N1cHByZXNzIHdhcm5pbmdzIGFib3V0IGluaGVyaXRpbmcgZnJvbSBhIHZpcnR1YWwgYmFzZSB3aXRoIGEKK25vbi10cml2aWFsIFwqKEMrMTEgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yLiAgVGhpcyBpcyBkYW5nZXJvdXMgYmVjYXVzZQoraWYgdGhlIHZpcnR1YWwgYmFzZSBpcyByZWFjaGFibGUgYWxvbmcgbW9yZSB0aGFuIG9uZSBwYXRoLCBpdCB3aWxsIGJlCittb3ZlZCBtdWx0aXBsZSB0aW1lcywgd2hpY2ggY2FuIG1lYW4gYm90aCBvYmplY3RzIGVuZCB1cCBpbiB0aGUKK21vdmVkLWZyb20gc3RhdGUuICBJZiB0aGUgbW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yIGlzIHdyaXR0ZW4gdG8gYXZvaWQKK21vdmluZyBmcm9tIGEgbW92ZWQtZnJvbSBvYmplY3QsIHRoaXMgd2FybmluZyBjYW4gYmUgZGlzYWJsZWQuCisuSVAgIlxmQlwtV3ZsYVxmUiIgNAorLklYIEl0ZW0gIi1XdmxhIgorV2FybiBpZiB2YXJpYWJsZSBsZW5ndGggYXJyYXkgaXMgdXNlZCBpbiB0aGUgY29kZS4KK1wmXGZCXC1Xbm9cLXZsYVxmUiBwcmV2ZW50cyB0aGUgXGZCXC1XcGVkYW50aWNcZlIgd2FybmluZyBvZgordGhlIHZhcmlhYmxlIGxlbmd0aCBhcnJheS4KKy5JUCAiXGZCXC1Xdm9sYXRpbGVcLXJlZ2lzdGVyXC12YXJcZlIiIDQKKy5JWCBJdGVtICItV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciIKK1dhcm4gaWYgYSByZWdpc3RlciB2YXJpYWJsZSBpcyBkZWNsYXJlZCB2b2xhdGlsZS4gIFRoZSB2b2xhdGlsZQorbW9kaWZpZXIgZG9lcyBub3QgaW5oaWJpdCBhbGwgb3B0aW1pemF0aW9ucyB0aGF0IG1heSBlbGltaW5hdGUgcmVhZHMKK2FuZC9vciB3cml0ZXMgdG8gcmVnaXN0ZXIgdmFyaWFibGVzLiAgVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkKK1wmXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdkaXNhYmxlZFwtb3B0aW1pemF0aW9uXGZSIiA0CisuSVggSXRlbSAiLVdkaXNhYmxlZC1vcHRpbWl6YXRpb24iCitXYXJuIGlmIGEgcmVxdWVzdGVkIG9wdGltaXphdGlvbiBwYXNzIGlzIGRpc2FibGVkLiAgVGhpcyB3YXJuaW5nIGRvZXMKK25vdCBnZW5lcmFsbHkgaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBhbnl0aGluZyB3cm9uZyB3aXRoIHlvdXIgY29kZTsgaXQKK21lcmVseSBpbmRpY2F0ZXMgdGhhdCBccy0xR0NDXHMwJ3Mgb3B0aW1pemVycyBhcmUgdW5hYmxlIHRvIGhhbmRsZSB0aGUgY29kZQorZWZmZWN0aXZlbHkuICBPZnRlbiwgdGhlIHByb2JsZW0gaXMgdGhhdCB5b3VyIGNvZGUgaXMgdG9vIGJpZyBvciB0b28KK2NvbXBsZXg7IFxzLTFHQ0NcczAgcmVmdXNlcyB0byBvcHRpbWl6ZSBwcm9ncmFtcyB3aGVuIHRoZSBvcHRpbWl6YXRpb24KK2l0c2VsZiBpcyBsaWtlbHkgdG8gdGFrZSBpbm9yZGluYXRlIGFtb3VudHMgb2YgdGltZS4KKy5JUCAiXGZCXC1XcG9pbnRlclwtc2lnblxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV3BvaW50ZXItc2lnbiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGZvciBwb2ludGVyIGFyZ3VtZW50IHBhc3Npbmcgb3IgYXNzaWdubWVudCB3aXRoIGRpZmZlcmVudCBzaWduZWRuZXNzLgorVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIEMgYW5kIE9iamVjdGl2ZS1DLiAgSXQgaXMgaW1wbGllZCBieQorXCZcZkJcLVdhbGxcZlIgYW5kIGJ5IFxmQlwtV3BlZGFudGljXGZSLCB3aGljaCBjYW4gYmUgZGlzYWJsZWQgd2l0aAorXCZcZkJcLVdub1wtcG9pbnRlclwtc2lnblxmUi4KKy5JUCAiXGZCXC1Xc3RhY2tcLXByb3RlY3RvclxmUiIgNAorLklYIEl0ZW0gIi1Xc3RhY2stcHJvdGVjdG9yIgorVGhpcyBvcHRpb24gaXMgb25seSBhY3RpdmUgd2hlbiBcZkJcLWZzdGFja1wtcHJvdGVjdG9yXGZSIGlzIGFjdGl2ZS4gIEl0Cit3YXJucyBhYm91dCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHByb3RlY3RlZCBhZ2FpbnN0IHN0YWNrIHNtYXNoaW5nLgorLklQICJcZkJcLVdub1wtbXVkZmxhcFxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tbXVkZmxhcCIKK1N1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0cnVjdHMgdGhhdCBjYW5ub3QgYmUgaW5zdHJ1bWVudGVkIGJ5CitcJlxmQlwtZm11ZGZsYXBcZlIuCisuSVAgIlxmQlwtV292ZXJsZW5ndGhcLXN0cmluZ3NcZlIiIDQKKy5JWCBJdGVtICItV292ZXJsZW5ndGgtc3RyaW5ncyIKK1dhcm4gYWJvdXQgc3RyaW5nIGNvbnN0YW50cyB0aGF0IGFyZSBsb25nZXIgdGhhbiB0aGUgXCooTCJtaW5pbXVtCittYXhpbXVtXCooUiIgbGVuZ3RoIHNwZWNpZmllZCBpbiB0aGUgQyBzdGFuZGFyZC4gIE1vZGVybiBjb21waWxlcnMKK2dlbmVyYWxseSBhbGxvdyBzdHJpbmcgY29uc3RhbnRzIHRoYXQgYXJlIG11Y2ggbG9uZ2VyIHRoYW4gdGhlCitzdGFuZGFyZCdzIG1pbmltdW0gbGltaXQsIGJ1dCB2ZXJ5IHBvcnRhYmxlIHByb2dyYW1zIHNob3VsZCBhdm9pZAordXNpbmcgbG9uZ2VyIHN0cmluZ3MuCisuU3AKK1RoZSBsaW1pdCBhcHBsaWVzIFxmSWFmdGVyXGZSIHN0cmluZyBjb25zdGFudCBjb25jYXRlbmF0aW9uLCBhbmQgZG9lcworbm90IGNvdW50IHRoZSB0cmFpbGluZyBccy0xTlVMXHMwLiAgSW4gQzkwLCB0aGUgbGltaXQgd2FzIDUwOSBjaGFyYWN0ZXJzOyBpbgorQzk5LCBpdCB3YXMgcmFpc2VkIHRvIDQwOTUuICBcKihDKzk4IGRvZXMgbm90IHNwZWNpZnkgYSBub3JtYXRpdmUKK21pbmltdW0gbWF4aW11bSwgc28gd2UgZG8gbm90IGRpYWdub3NlIG92ZXJsZW5ndGggc3RyaW5ncyBpbiBcKihDKy4KKy5TcAorVGhpcyBvcHRpb24gaXMgaW1wbGllZCBieSBcZkJcLVdwZWRhbnRpY1xmUiwgYW5kIGNhbiBiZSBkaXNhYmxlZCB3aXRoCitcJlxmQlwtV25vXC1vdmVybGVuZ3RoXC1zdHJpbmdzXGZSLgorLklQICJcZkJcLVd1bnN1ZmZpeGVkXC1mbG9hdFwtY29uc3RhbnRzXGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XdW5zdWZmaXhlZC1mbG9hdC1jb25zdGFudHMgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIgorSXNzdWUgYSB3YXJuaW5nIGZvciBhbnkgZmxvYXRpbmcgY29uc3RhbnQgdGhhdCBkb2VzIG5vdCBoYXZlCithIHN1ZmZpeC4gIFdoZW4gdXNlZCB0b2dldGhlciB3aXRoIFxmQlwtV3N5c3RlbVwtaGVhZGVyc1xmUiBpdAord2FybnMgYWJvdXQgc3VjaCBjb25zdGFudHMgaW4gc3lzdGVtIGhlYWRlciBmaWxlcy4gIFRoaXMgY2FuIGJlIHVzZWZ1bAord2hlbiBwcmVwYXJpbmcgY29kZSB0byB1c2Ugd2l0aCB0aGUgXGYoQ1dcKihDYEZMT0FUX0NPTlNUX0RFQ0lNQUw2NFwqKEMnXGZSIHByYWdtYQorZnJvbSB0aGUgZGVjaW1hbCBmbG9hdGluZy1wb2ludCBleHRlbnNpb24gdG8gQzk5LgorLlNTICJPcHRpb25zIGZvciBEZWJ1Z2dpbmcgWW91ciBQcm9ncmFtIG9yIFxzLTFHQ0NcczAiCisuSVggU3Vic2VjdGlvbiAiT3B0aW9ucyBmb3IgRGVidWdnaW5nIFlvdXIgUHJvZ3JhbSBvciBHQ0MiCitcJlxzLTFHQ0NcczAgaGFzIHZhcmlvdXMgc3BlY2lhbCBvcHRpb25zIHRoYXQgYXJlIHVzZWQgZm9yIGRlYnVnZ2luZworZWl0aGVyIHlvdXIgcHJvZ3JhbSBvciBccy0xR0NDOlxzMAorLklQICJcZkJcLWdcZlIiIDQKKy5JWCBJdGVtICItZyIKK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmF0aXZlIGZvcm1hdAorKHN0YWJzLCBccy0xQ09GRlxzMCwgXHMtMVhDT0ZGXHMwLCBvciBccy0xRFdBUkZcczAgMikuICBccy0xR0RCXHMwIGNhbiB3b3JrIHdpdGggdGhpcyBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uLgorLlNwCitPbiBtb3N0IHN5c3RlbXMgdGhhdCB1c2Ugc3RhYnMgZm9ybWF0LCBcZkJcLWdcZlIgZW5hYmxlcyB1c2Ugb2YgZXh0cmEKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiB0aGF0IG9ubHkgXHMtMUdEQlxzMCBjYW4gdXNlOyB0aGlzIGV4dHJhIGluZm9ybWF0aW9uCittYWtlcyBkZWJ1Z2dpbmcgd29yayBiZXR0ZXIgaW4gXHMtMUdEQlxzMCBidXQgcHJvYmFibHkgbWFrZXMgb3RoZXIgZGVidWdnZXJzCitjcmFzaCBvcgorcmVmdXNlIHRvIHJlYWQgdGhlIHByb2dyYW0uICBJZiB5b3Ugd2FudCB0byBjb250cm9sIGZvciBjZXJ0YWluIHdoZXRoZXIKK3RvIGdlbmVyYXRlIHRoZSBleHRyYSBpbmZvcm1hdGlvbiwgdXNlIFxmQlwtZ3N0YWJzK1xmUiwgXGZCXC1nc3RhYnNcZlIsCitcJlxmQlwtZ3hjb2ZmK1xmUiwgXGZCXC1neGNvZmZcZlIsIG9yIFxmQlwtZ3Ztc1xmUiAoc2VlIGJlbG93KS4KKy5TcAorXCZccy0xR0NDXHMwIGFsbG93cyB5b3UgdG8gdXNlIFxmQlwtZ1xmUiB3aXRoCitcJlxmQlwtT1xmUi4gIFRoZSBzaG9ydGN1dHMgdGFrZW4gYnkgb3B0aW1pemVkIGNvZGUgbWF5IG9jY2FzaW9uYWxseQorcHJvZHVjZSBzdXJwcmlzaW5nIHJlc3VsdHM6IHNvbWUgdmFyaWFibGVzIHlvdSBkZWNsYXJlZCBtYXkgbm90IGV4aXN0CithdCBhbGw7IGZsb3cgb2YgY29udHJvbCBtYXkgYnJpZWZseSBtb3ZlIHdoZXJlIHlvdSBkaWQgbm90IGV4cGVjdCBpdDsKK3NvbWUgc3RhdGVtZW50cyBtYXkgbm90IGJlIGV4ZWN1dGVkIGJlY2F1c2UgdGhleSBjb21wdXRlIGNvbnN0YW50CityZXN1bHRzIG9yIHRoZWlyIHZhbHVlcyBhcmUgYWxyZWFkeSBhdCBoYW5kOyBzb21lIHN0YXRlbWVudHMgbWF5CitleGVjdXRlIGluIGRpZmZlcmVudCBwbGFjZXMgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbiBtb3ZlZCBvdXQgb2YgbG9vcHMuCisuU3AKK05ldmVydGhlbGVzcyBpdCBwcm92ZXMgcG9zc2libGUgdG8gZGVidWcgb3B0aW1pemVkIG91dHB1dC4gIFRoaXMgbWFrZXMKK2l0IHJlYXNvbmFibGUgdG8gdXNlIHRoZSBvcHRpbWl6ZXIgZm9yIHByb2dyYW1zIHRoYXQgbWlnaHQgaGF2ZSBidWdzLgorLlNwCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVzZWZ1bCB3aGVuIFxzLTFHQ0NcczAgaXMgZ2VuZXJhdGVkIHdpdGggdGhlCitjYXBhYmlsaXR5IGZvciBtb3JlIHRoYW4gb25lIGRlYnVnZ2luZyBmb3JtYXQuCisuSVAgIlxmQlwtZ3NwbGl0XC1kd2FyZlxmUiIgNAorLklYIEl0ZW0gIi1nc3BsaXQtZHdhcmYiCitTZXBhcmF0ZSBhcyBtdWNoIGR3YXJmIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSBpbnRvIGEKK3NlcGFyYXRlIG91dHB1dCBmaWxlIHdpdGggdGhlIGV4dGVuc2lvbiAuZHdvLiAgVGhpcyBvcHRpb24gYWxsb3dzCit0aGUgYnVpbGQgc3lzdGVtIHRvIGF2b2lkIGxpbmtpbmcgZmlsZXMgd2l0aCBkZWJ1ZyBpbmZvcm1hdGlvbi4gIFRvCitiZSB1c2VmdWwsIHRoaXMgb3B0aW9uIHJlcXVpcmVzIGEgZGVidWdnZXIgY2FwYWJsZSBvZiByZWFkaW5nIC5kd28KK2ZpbGVzLgorLklQICJcZkJcLWdnZGJcZlIiIDQKKy5JWCBJdGVtICItZ2dkYiIKK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB1c2UgYnkgXHMtMUdEQlxzMC4gIFRoaXMgbWVhbnMgdG8gdXNlIHRoZQorbW9zdCBleHByZXNzaXZlIGZvcm1hdCBhdmFpbGFibGUgKFxzLTFEV0FSRlxzMCAyLCBzdGFicywgb3IgdGhlIG5hdGl2ZSBmb3JtYXQKK2lmIG5laXRoZXIgb2YgdGhvc2UgYXJlIHN1cHBvcnRlZCksIGluY2x1ZGluZyBccy0xR0RCXHMwIGV4dGVuc2lvbnMgaWYgYXQgYWxsCitwb3NzaWJsZS4KKy5JUCAiXGZCXC1ncHVibmFtZXNcZlIiIDQKKy5JWCBJdGVtICItZ3B1Ym5hbWVzIgorR2VuZXJhdGUgZHdhcmYgLmRlYnVnX3B1Ym5hbWVzIGFuZCAuZGVidWdfcHVidHlwZXMgc2VjdGlvbnMuCisuSVAgIlxmQlwtZ3N0YWJzXGZSIiA0CisuSVggSXRlbSAiLWdzdGFicyIKK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHN0YWJzIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLAord2l0aG91dCBccy0xR0RCXHMwIGV4dGVuc2lvbnMuICBUaGlzIGlzIHRoZSBmb3JtYXQgdXNlZCBieSBccy0xREJYXHMwIG9uIG1vc3QgXHMtMUJTRFxzMAorc3lzdGVtcy4gIE9uIFxzLTFNSVBTXHMwLCBBbHBoYSBhbmQgU3lzdGVtIFYgUmVsZWFzZSA0IHN5c3RlbXMgdGhpcyBvcHRpb24KK3Byb2R1Y2VzIHN0YWJzIGRlYnVnZ2luZyBvdXRwdXQgdGhhdCBpcyBub3QgdW5kZXJzdG9vZCBieSBccy0xREJYXHMwIG9yIFxzLTFTREJcczAuCitPbiBTeXN0ZW0gViBSZWxlYXNlIDQgc3lzdGVtcyB0aGlzIG9wdGlvbiByZXF1aXJlcyB0aGUgXHMtMUdOVVxzMCBhc3NlbWJsZXIuCisuSVAgIlxmQlwtZmVsaW1pbmF0ZVwtdW51c2VkXC1kZWJ1Z1wtc3ltYm9sc1xmUiIgNAorLklYIEl0ZW0gIi1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy1zeW1ib2xzIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gc3RhYnMgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCksCitmb3Igb25seSBzeW1ib2xzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQuCisuSVAgIlxmQlwtZmVtaXRcLWNsYXNzXC1kZWJ1Z1wtYWx3YXlzXGZSIiA0CisuSVggSXRlbSAiLWZlbWl0LWNsYXNzLWRlYnVnLWFsd2F5cyIKK0luc3RlYWQgb2YgZW1pdHRpbmcgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBhIFwqKEMrIGNsYXNzIGluIG9ubHkgb25lCitvYmplY3QgZmlsZSwgZW1pdCBpdCBpbiBhbGwgb2JqZWN0IGZpbGVzIHVzaW5nIHRoZSBjbGFzcy4gIFRoaXMgb3B0aW9uCitzaG91bGQgYmUgdXNlZCBvbmx5IHdpdGggZGVidWdnZXJzIHRoYXQgYXJlIHVuYWJsZSB0byBoYW5kbGUgdGhlIHdheSBccy0xR0NDXHMwCitub3JtYWxseSBlbWl0cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGNsYXNzZXMgYmVjYXVzZSB1c2luZyB0aGlzCitvcHRpb24gaW5jcmVhc2VzIHRoZSBzaXplIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBieSBhcyBtdWNoIGFzIGEKK2ZhY3RvciBvZiB0d28uCisuSVAgIlxmQlwtZmRlYnVnXC10eXBlc1wtc2VjdGlvblxmUiIgNAorLklYIEl0ZW0gIi1mZGVidWctdHlwZXMtc2VjdGlvbiIKK1doZW4gdXNpbmcgXHMtMURXQVJGXHMwIFZlcnNpb24gNCBvciBoaWdoZXIsIHR5cGUgRElFcyBjYW4gYmUgcHV0IGludG8KK3RoZWlyIG93biBcZihDV1wqKENgLmRlYnVnX3R5cGVzXCooQydcZlIgc2VjdGlvbiBpbnN0ZWFkIG9mIG1ha2luZyB0aGVtIHBhcnQgb2YgdGhlCitcJlxmKENXXCooQ2AuZGVidWdfaW5mb1wqKEMnXGZSIHNlY3Rpb24uICBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBwdXQgdGhlbSBpbiBhIHNlcGFyYXRlCitjb21kYXQgc2VjdGlvbnMgc2luY2UgdGhlIGxpbmtlciBjYW4gdGhlbiByZW1vdmUgZHVwbGljYXRlcy4KK0J1dCBub3QgYWxsIFxzLTFEV0FSRlxzMCBjb25zdW1lcnMgc3VwcG9ydCBcZihDV1wqKENgLmRlYnVnX3R5cGVzXCooQydcZlIgc2VjdGlvbnMgeWV0CithbmQgb24gc29tZSBvYmplY3RzIFxmKENXXCooQ2AuZGVidWdfdHlwZXNcKihDJ1xmUiBwcm9kdWNlcyBsYXJnZXIgaW5zdGVhZCBvZiBzbWFsbGVyCitkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtZ3N0YWJzK1xmUiIgNAorLklYIEl0ZW0gIi1nc3RhYnMrIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gc3RhYnMgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCksCit1c2luZyBccy0xR05VXHMwIGV4dGVuc2lvbnMgdW5kZXJzdG9vZCBvbmx5IGJ5IHRoZSBccy0xR05VXHMwIGRlYnVnZ2VyIChccy0xR0RCXHMwKS4gIFRoZQordXNlIG9mIHRoZXNlIGV4dGVuc2lvbnMgaXMgbGlrZWx5IHRvIG1ha2Ugb3RoZXIgZGVidWdnZXJzIGNyYXNoIG9yCityZWZ1c2UgdG8gcmVhZCB0aGUgcHJvZ3JhbS4KKy5JUCAiXGZCXC1nY29mZlxmUiIgNAorLklYIEl0ZW0gIi1nY29mZiIKK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIFxzLTFDT0ZGXHMwIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLgorVGhpcyBpcyB0aGUgZm9ybWF0IHVzZWQgYnkgXHMtMVNEQlxzMCBvbiBtb3N0IFN5c3RlbSBWIHN5c3RlbXMgcHJpb3IgdG8KK1N5c3RlbSBWIFJlbGVhc2UgNC4KKy5JUCAiXGZCXC1neGNvZmZcZlIiIDQKKy5JWCBJdGVtICItZ3hjb2ZmIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gXHMtMVhDT0ZGXHMwIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLgorVGhpcyBpcyB0aGUgZm9ybWF0IHVzZWQgYnkgdGhlIFxzLTFEQlhcczAgZGVidWdnZXIgb24gXHMtMUlCTVxzMCBccy0xUlMvNjAwMFxzMCBzeXN0ZW1zLgorLklQICJcZkJcLWd4Y29mZitcZlIiIDQKKy5JWCBJdGVtICItZ3hjb2ZmKyIKK1Byb2R1Y2UgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIFxzLTFYQ09GRlxzMCBmb3JtYXQgKGlmIHRoYXQgaXMgc3VwcG9ydGVkKSwKK3VzaW5nIFxzLTFHTlVcczAgZXh0ZW5zaW9ucyB1bmRlcnN0b29kIG9ubHkgYnkgdGhlIFxzLTFHTlVcczAgZGVidWdnZXIgKFxzLTFHREJcczApLiAgVGhlCit1c2Ugb2YgdGhlc2UgZXh0ZW5zaW9ucyBpcyBsaWtlbHkgdG8gbWFrZSBvdGhlciBkZWJ1Z2dlcnMgY3Jhc2ggb3IKK3JlZnVzZSB0byByZWFkIHRoZSBwcm9ncmFtLCBhbmQgbWF5IGNhdXNlIGFzc2VtYmxlcnMgb3RoZXIgdGhhbiB0aGUgXHMtMUdOVVxzMAorYXNzZW1ibGVyIChccy0xR0FTXHMwKSB0byBmYWlsIHdpdGggYW4gZXJyb3IuCisuSVAgIlxmQlwtZ2R3YXJmXC1cZlJcZkl2ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLWdkd2FyZi12ZXJzaW9uIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gXHMtMURXQVJGXHMwIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLgorVGhlIHZhbHVlIG9mIFxmSXZlcnNpb25cZlIgbWF5IGJlIGVpdGhlciAyLCAzIG9yIDQ7IHRoZSBkZWZhdWx0IHZlcnNpb24KK2ZvciBtb3N0IHRhcmdldHMgaXMgNC4KKy5TcAorTm90ZSB0aGF0IHdpdGggXHMtMURXQVJGXHMwIFZlcnNpb24gMiwgc29tZSBwb3J0cyByZXF1aXJlIGFuZCBhbHdheXMKK3VzZSBzb21lIG5vbi1jb25mbGljdGluZyBccy0xRFdBUkZcczAgMyBleHRlbnNpb25zIGluIHRoZSB1bndpbmQgdGFibGVzLgorLlNwCitWZXJzaW9uIDQgbWF5IHJlcXVpcmUgXHMtMUdEQlxzMCA3LjAgYW5kIFxmQlwtZnZhclwtdHJhY2tpbmdcLWFzc2lnbm1lbnRzXGZSCitmb3IgbWF4aW11bSBiZW5lZml0LgorLklQICJcZkJcLWdyZWNvcmRcLWdjY1wtc3dpdGNoZXNcZlIiIDQKKy5JWCBJdGVtICItZ3JlY29yZC1nY2Mtc3dpdGNoZXMiCitUaGlzIHN3aXRjaCBjYXVzZXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIHVzZWQgdG8gaW52b2tlIHRoZQorY29tcGlsZXIgdGhhdCBtYXkgYWZmZWN0IGNvZGUgZ2VuZXJhdGlvbiB0byBiZSBhcHBlbmRlZCB0byB0aGUKK0RXX0FUX3Byb2R1Y2VyIGF0dHJpYnV0ZSBpbiBccy0xRFdBUkZcczAgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgVGhlIG9wdGlvbnMKK2FyZSBjb25jYXRlbmF0ZWQgd2l0aCBzcGFjZXMgc2VwYXJhdGluZyB0aGVtIGZyb20gZWFjaCBvdGhlciBhbmQgZnJvbQordGhlIGNvbXBpbGVyIHZlcnNpb24uICBTZWUgYWxzbyBcZkJcLWZyZWNvcmRcLWdjY1wtc3dpdGNoZXNcZlIgZm9yIGFub3RoZXIKK3dheSBvZiBzdG9yaW5nIGNvbXBpbGVyIG9wdGlvbnMgaW50byB0aGUgb2JqZWN0IGZpbGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLWdub1wtcmVjb3JkXC1nY2NcLXN3aXRjaGVzXGZSIiA0CisuSVggSXRlbSAiLWduby1yZWNvcmQtZ2NjLXN3aXRjaGVzIgorRGlzYWxsb3cgYXBwZW5kaW5nIGNvbW1hbmQtbGluZSBvcHRpb25zIHRvIHRoZSBEV19BVF9wcm9kdWNlciBhdHRyaWJ1dGUKK2luIFxzLTFEV0FSRlxzMCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtZ3N0cmljdFwtZHdhcmZcZlIiIDQKKy5JWCBJdGVtICItZ3N0cmljdC1kd2FyZiIKK0Rpc2FsbG93IHVzaW5nIGV4dGVuc2lvbnMgb2YgbGF0ZXIgXHMtMURXQVJGXHMwIHN0YW5kYXJkIHZlcnNpb24gdGhhbiBzZWxlY3RlZAord2l0aCBcZkJcLWdkd2FyZlwtXGZSXGZJdmVyc2lvblxmUi4gIE9uIG1vc3QgdGFyZ2V0cyB1c2luZyBub24tY29uZmxpY3RpbmcKK1wmXHMtMURXQVJGXHMwIGV4dGVuc2lvbnMgZnJvbSBsYXRlciBzdGFuZGFyZCB2ZXJzaW9ucyBpcyBhbGxvd2VkLgorLklQICJcZkJcLWdub1wtc3RyaWN0XC1kd2FyZlxmUiIgNAorLklYIEl0ZW0gIi1nbm8tc3RyaWN0LWR3YXJmIgorQWxsb3cgdXNpbmcgZXh0ZW5zaW9ucyBvZiBsYXRlciBccy0xRFdBUkZcczAgc3RhbmRhcmQgdmVyc2lvbiB0aGFuIHNlbGVjdGVkIHdpdGgKK1wmXGZCXC1nZHdhcmZcLVxmUlxmSXZlcnNpb25cZlIuCisuSVAgIlxmQlwtZ3Ztc1xmUiIgNAorLklYIEl0ZW0gIi1ndm1zIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gQWxwaGEvVk1TIGRlYnVnIGZvcm1hdCAoaWYgdGhhdCBpcworc3VwcG9ydGVkKS4gIFRoaXMgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IFxzLTFERUJVR1xzMCBvbiBBbHBoYS9WTVMgc3lzdGVtcy4KKy5JUCAiXGZCXC1nXGZSXGZJbGV2ZWxcZlIiIDQKKy5JWCBJdGVtICItZ2xldmVsIgorLlBEIDAKKy5JUCAiXGZCXC1nZ2RiXGZSXGZJbGV2ZWxcZlIiIDQKKy5JWCBJdGVtICItZ2dkYmxldmVsIgorLklQICJcZkJcLWdzdGFic1xmUlxmSWxldmVsXGZSIiA0CisuSVggSXRlbSAiLWdzdGFic2xldmVsIgorLklQICJcZkJcLWdjb2ZmXGZSXGZJbGV2ZWxcZlIiIDQKKy5JWCBJdGVtICItZ2NvZmZsZXZlbCIKKy5JUCAiXGZCXC1neGNvZmZcZlJcZklsZXZlbFxmUiIgNAorLklYIEl0ZW0gIi1neGNvZmZsZXZlbCIKKy5JUCAiXGZCXC1ndm1zXGZSXGZJbGV2ZWxcZlIiIDQKKy5JWCBJdGVtICItZ3Ztc2xldmVsIgorLlBECitSZXF1ZXN0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhbmQgYWxzbyB1c2UgXGZJbGV2ZWxcZlIgdG8gc3BlY2lmeSBob3cKK211Y2ggaW5mb3JtYXRpb24uICBUaGUgZGVmYXVsdCBsZXZlbCBpcyAyLgorLlNwCitMZXZlbCAwIHByb2R1Y2VzIG5vIGRlYnVnIGluZm9ybWF0aW9uIGF0IGFsbC4gIFRodXMsIFxmQlwtZzBcZlIgbmVnYXRlcworXCZcZkJcLWdcZlIuCisuU3AKK0xldmVsIDEgcHJvZHVjZXMgbWluaW1hbCBpbmZvcm1hdGlvbiwgZW5vdWdoIGZvciBtYWtpbmcgYmFja3RyYWNlcyBpbgorcGFydHMgb2YgdGhlIHByb2dyYW0gdGhhdCB5b3UgZG9uJ3QgcGxhbiB0byBkZWJ1Zy4gIFRoaXMgaW5jbHVkZXMKK2Rlc2NyaXB0aW9ucyBvZiBmdW5jdGlvbnMgYW5kIGV4dGVybmFsIHZhcmlhYmxlcywgYnV0IG5vIGluZm9ybWF0aW9uCithYm91dCBsb2NhbCB2YXJpYWJsZXMgYW5kIG5vIGxpbmUgbnVtYmVycy4KKy5TcAorTGV2ZWwgMyBpbmNsdWRlcyBleHRyYSBpbmZvcm1hdGlvbiwgc3VjaCBhcyBhbGwgdGhlIG1hY3JvIGRlZmluaXRpb25zCitwcmVzZW50IGluIHRoZSBwcm9ncmFtLiAgU29tZSBkZWJ1Z2dlcnMgc3VwcG9ydCBtYWNybyBleHBhbnNpb24gd2hlbgoreW91IHVzZSBcZkJcLWczXGZSLgorLlNwCitcJlxmQlwtZ2R3YXJmXC0yXGZSIGRvZXMgbm90IGFjY2VwdCBhIGNvbmNhdGVuYXRlZCBkZWJ1ZyBsZXZlbCwgYmVjYXVzZQorXCZccy0xR0NDXHMwIHVzZWQgdG8gc3VwcG9ydCBhbiBvcHRpb24gXGZCXC1nZHdhcmZcZlIgdGhhdCBtZWFudCB0byBnZW5lcmF0ZQorZGVidWcgaW5mb3JtYXRpb24gaW4gdmVyc2lvbiAxIG9mIHRoZSBccy0xRFdBUkZcczAgZm9ybWF0ICh3aGljaCBpcyB2ZXJ5CitkaWZmZXJlbnQgZnJvbSB2ZXJzaW9uIDIpLCBhbmQgaXQgd291bGQgaGF2ZSBiZWVuIHRvbyBjb25mdXNpbmcuICBUaGF0CitkZWJ1ZyBmb3JtYXQgaXMgbG9uZyBvYnNvbGV0ZSwgYnV0IHRoZSBvcHRpb24gY2Fubm90IGJlIGNoYW5nZWQgbm93LgorSW5zdGVhZCB1c2UgYW4gYWRkaXRpb25hbCBcZkJcLWdcZlJcZklsZXZlbFxmUiBvcHRpb24gdG8gY2hhbmdlIHRoZQorZGVidWcgbGV2ZWwgZm9yIFxzLTFEV0FSRlxzMC4KKy5JUCAiXGZCXC1ndG9nZ2xlXGZSIiA0CisuSVggSXRlbSAiLWd0b2dnbGUiCitUdXJuIG9mZiBnZW5lcmF0aW9uIG9mIGRlYnVnIGluZm8sIGlmIGxlYXZpbmcgb3V0IHRoaXMgb3B0aW9uCitnZW5lcmF0ZXMgaXQsIG9yIHR1cm4gaXQgb24gYXQgbGV2ZWwgMiBvdGhlcndpc2UuICBUaGUgcG9zaXRpb24gb2YgdGhpcworYXJndW1lbnQgaW4gdGhlIGNvbW1hbmQgbGluZSBkb2VzIG5vdCBtYXR0ZXI7IGl0IHRha2VzIGVmZmVjdCBhZnRlciBhbGwKK290aGVyIG9wdGlvbnMgYXJlIHByb2Nlc3NlZCwgYW5kIGl0IGRvZXMgc28gb25seSBvbmNlLCBubyBtYXR0ZXIgaG93CittYW55IHRpbWVzIGl0IGlzIGdpdmVuLiAgVGhpcyBpcyBtYWlubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoCitcJlxmQlwtZmNvbXBhcmVcLWRlYnVnXGZSLgorLklQICJcZkJcLWZzYW5pdGl6ZT1hZGRyZXNzXGZSIiA0CisuSVggSXRlbSAiLWZzYW5pdGl6ZT1hZGRyZXNzIgorRW5hYmxlIEFkZHJlc3NTYW5pdGl6ZXIsIGEgZmFzdCBtZW1vcnkgZXJyb3IgZGV0ZWN0b3IuCitNZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucyB3aWxsIGJlIGluc3RydW1lbnRlZCB0byBkZXRlY3QKK291dC1vZi1ib3VuZHMgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MuCitTZWUgPFxmQmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hZGRyZXNzXC1zYW5pdGl6ZXIvXGZSPiBmb3IgbW9yZSBkZXRhaWxzLgorLklQICJcZkJcLWZzYW5pdGl6ZT10aHJlYWRcZlIiIDQKKy5JWCBJdGVtICItZnNhbml0aXplPXRocmVhZCIKK0VuYWJsZSBUaHJlYWRTYW5pdGl6ZXIsIGEgZmFzdCBkYXRhIHJhY2UgZGV0ZWN0b3IuCitNZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucyB3aWxsIGJlIGluc3RydW1lbnRlZCB0byBkZXRlY3QKK2RhdGEgcmFjZSBidWdzLgorU2VlIDxcZkJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZGF0YVwtcmFjZVwtdGVzdC93aWtpL1RocmVhZFNhbml0aXplclxmUj4gZm9yIG1vcmUgZGV0YWlscy4KKy5JUCAiXGZCXC1mZHVtcFwtZmluYWxcLWluc25zXGZSW1xmQj1cZlJcZklmaWxlXGZSXSIgNAorLklYIEl0ZW0gIi1mZHVtcC1maW5hbC1pbnNuc1s9ZmlsZV0iCitEdW1wIHRoZSBmaW5hbCBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAoXHMtMVJUTFxzMCkgdG8gXGZJZmlsZVxmUi4gIElmIHRoZQorb3B0aW9uYWwgYXJndW1lbnQgaXMgb21pdHRlZCAob3IgaWYgXGZJZmlsZVxmUiBpcyBcZihDV1wqKENgLlwqKEMnXGZSKSwgdGhlIG5hbWUKK29mIHRoZSBkdW1wIGZpbGUgaXMgZGV0ZXJtaW5lZCBieSBhcHBlbmRpbmcgXGYoQ1dcKihDYC5na2RcKihDJ1xmUiB0byB0aGUKK2NvbXBpbGF0aW9uIG91dHB1dCBmaWxlIG5hbWUuCisuSVAgIlxmQlwtZmNvbXBhcmVcLWRlYnVnXGZSW1xmQj1cZlJcZklvcHRzXGZSXSIgNAorLklYIEl0ZW0gIi1mY29tcGFyZS1kZWJ1Z1s9b3B0c10iCitJZiBubyBlcnJvciBvY2N1cnMgZHVyaW5nIGNvbXBpbGF0aW9uLCBydW4gdGhlIGNvbXBpbGVyIGEgc2Vjb25kIHRpbWUsCithZGRpbmcgXGZJb3B0c1xmUiBhbmQgXGZCXC1mY29tcGFyZVwtZGVidWdcLXNlY29uZFxmUiB0byB0aGUgYXJndW1lbnRzCitwYXNzZWQgdG8gdGhlIHNlY29uZCBjb21waWxhdGlvbi4gIER1bXAgdGhlIGZpbmFsIGludGVybmFsCityZXByZXNlbnRhdGlvbiBpbiBib3RoIGNvbXBpbGF0aW9ucywgYW5kIHByaW50IGFuIGVycm9yIGlmIHRoZXkgZGlmZmVyLgorLlNwCitJZiB0aGUgZXF1YWwgc2lnbiBpcyBvbWl0dGVkLCB0aGUgZGVmYXVsdCBcZkJcLWd0b2dnbGVcZlIgaXMgdXNlZC4KKy5TcAorVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlxzLTFHQ0NfQ09NUEFSRV9ERUJVR1xzMFxmUiwgaWYgZGVmaW5lZCwgbm9uLWVtcHR5CithbmQgbm9uemVybywgaW1wbGljaXRseSBlbmFibGVzIFxmQlwtZmNvbXBhcmVcLWRlYnVnXGZSLiAgSWYKK1wmXGZCXHMtMUdDQ19DT01QQVJFX0RFQlVHXHMwXGZSIGlzIGRlZmluZWQgdG8gYSBzdHJpbmcgc3RhcnRpbmcgd2l0aCBhIGRhc2gsCit0aGVuIGl0IGlzIHVzZWQgZm9yIFxmSW9wdHNcZlIsIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBcZkJcLWd0b2dnbGVcZlIKK2lzIHVzZWQuCisuU3AKK1wmXGZCXC1mY29tcGFyZVwtZGVidWc9XGZSLCB3aXRoIHRoZSBlcXVhbCBzaWduIGJ1dCB3aXRob3V0IFxmSW9wdHNcZlIsCitpcyBlcXVpdmFsZW50IHRvIFxmQlwtZm5vXC1jb21wYXJlXC1kZWJ1Z1xmUiwgd2hpY2ggZGlzYWJsZXMgdGhlIGR1bXBpbmcKK29mIHRoZSBmaW5hbCByZXByZXNlbnRhdGlvbiBhbmQgdGhlIHNlY29uZCBjb21waWxhdGlvbiwgcHJldmVudGluZyBldmVuCitcJlxmQlxzLTFHQ0NfQ09NUEFSRV9ERUJVR1xzMFxmUiBmcm9tIHRha2luZyBlZmZlY3QuCisuU3AKK1RvIHZlcmlmeSBmdWxsIGNvdmVyYWdlIGR1cmluZyBcZkJcLWZjb21wYXJlXC1kZWJ1Z1xmUiB0ZXN0aW5nLCBzZXQKK1wmXGZCXHMtMUdDQ19DT01QQVJFX0RFQlVHXHMwXGZSIHRvIHNheSBcZkJcLWZjb21wYXJlXC1kZWJ1Z1wtbm90XC1vdmVycmlkZGVuXGZSLAord2hpY2ggXHMtMUdDQ1xzMCByZWplY3RzIGFzIGFuIGludmFsaWQgb3B0aW9uIGluIGFueSBhY3R1YWwgY29tcGlsYXRpb24KKyhyYXRoZXIgdGhhbiBwcmVwcm9jZXNzaW5nLCBhc3NlbWJseSBvciBsaW5raW5nKS4gIFRvIGdldCBqdXN0IGEKK3dhcm5pbmcsIHNldHRpbmcgXGZCXHMtMUdDQ19DT01QQVJFX0RFQlVHXHMwXGZSIHRvIFxmQlwtdyVuXC1mY29tcGFyZVwtZGVidWcKK25vdCBvdmVycmlkZGVuXGZSIHdpbGwgZG8uCisuSVAgIlxmQlwtZmNvbXBhcmVcLWRlYnVnXC1zZWNvbmRcZlIiIDQKKy5JWCBJdGVtICItZmNvbXBhcmUtZGVidWctc2Vjb25kIgorVGhpcyBvcHRpb24gaXMgaW1wbGljaXRseSBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIGZvciB0aGUgc2Vjb25kCitjb21waWxhdGlvbiByZXF1ZXN0ZWQgYnkgXGZCXC1mY29tcGFyZVwtZGVidWdcZlIsIGFsb25nIHdpdGggb3B0aW9ucyB0bworc2lsZW5jZSB3YXJuaW5ncywgYW5kIG9taXR0aW5nIG90aGVyIG9wdGlvbnMgdGhhdCB3b3VsZCBjYXVzZQorc2lkZS1lZmZlY3QgY29tcGlsZXIgb3V0cHV0cyB0byBmaWxlcyBvciB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgRHVtcAorZmlsZXMgYW5kIHByZXNlcnZlZCB0ZW1wb3JhcnkgZmlsZXMgYXJlIHJlbmFtZWQgc28gYXMgdG8gY29udGFpbiB0aGUKK1wmXGYoQ1dcKihDYC5na1wqKEMnXGZSIGFkZGl0aW9uYWwgZXh0ZW5zaW9uIGR1cmluZyB0aGUgc2Vjb25kIGNvbXBpbGF0aW9uLCB0byBhdm9pZAorb3ZlcndyaXRpbmcgdGhvc2UgZ2VuZXJhdGVkIGJ5IHRoZSBmaXJzdC4KKy5TcAorV2hlbiB0aGlzIG9wdGlvbiBpcyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIGRyaXZlciwgaXQgY2F1c2VzIHRoZQorXCZcZklmaXJzdFxmUiBjb21waWxhdGlvbiB0byBiZSBza2lwcGVkLCB3aGljaCBtYWtlcyBpdCB1c2VmdWwgZm9yIGxpdHRsZQorb3RoZXIgdGhhbiBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIHByb3Blci4KKy5JUCAiXGZCXC1mZWxpbWluYXRlXC1kd2FyZjJcLWR1cHNcZlIiIDQKKy5JWCBJdGVtICItZmVsaW1pbmF0ZS1kd2FyZjItZHVwcyIKK0NvbXByZXNzIFxzLTFEV0FSRlxzMCAyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBieSBlbGltaW5hdGluZyBkdXBsaWNhdGVkCitpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHN5bWJvbC4gIFRoaXMgb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbgorZ2VuZXJhdGluZyBccy0xRFdBUkZcczAgMiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gd2l0aCBcZkJcLWdkd2FyZlwtMlxmUi4KKy5JUCAiXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtYmFzZW9ubHlcZlIiIDQKKy5JWCBJdGVtICItZmVtaXQtc3RydWN0LWRlYnVnLWJhc2Vvbmx5IgorRW1pdCBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3Igc3RydWN0LWxpa2UgdHlwZXMKK29ubHkgd2hlbiB0aGUgYmFzZSBuYW1lIG9mIHRoZSBjb21waWxhdGlvbiBzb3VyY2UgZmlsZQorbWF0Y2hlcyB0aGUgYmFzZSBuYW1lIG9mIGZpbGUgaW4gd2hpY2ggdGhlIHN0cnVjdCBpcyBkZWZpbmVkLgorLlNwCitUaGlzIG9wdGlvbiBzdWJzdGFudGlhbGx5IHJlZHVjZXMgdGhlIHNpemUgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uLAorYnV0IGF0IHNpZ25pZmljYW50IHBvdGVudGlhbCBsb3NzIGluIHR5cGUgaW5mb3JtYXRpb24gdG8gdGhlIGRlYnVnZ2VyLgorU2VlIFxmQlwtZmVtaXRcLXN0cnVjdFwtZGVidWdcLXJlZHVjZWRcZlIgZm9yIGEgbGVzcyBhZ2dyZXNzaXZlIG9wdGlvbi4KK1NlZSBcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1kZXRhaWxlZFxmUiBmb3IgbW9yZSBkZXRhaWxlZCBjb250cm9sLgorLlNwCitUaGlzIG9wdGlvbiB3b3JrcyBvbmx5IHdpdGggXHMtMURXQVJGXHMwIDIuCisuSVAgIlxmQlwtZmVtaXRcLXN0cnVjdFwtZGVidWdcLXJlZHVjZWRcZlIiIDQKKy5JWCBJdGVtICItZmVtaXQtc3RydWN0LWRlYnVnLXJlZHVjZWQiCitFbWl0IGRlYnVnIGluZm9ybWF0aW9uIGZvciBzdHJ1Y3QtbGlrZSB0eXBlcworb25seSB3aGVuIHRoZSBiYXNlIG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHNvdXJjZSBmaWxlCittYXRjaGVzIHRoZSBiYXNlIG5hbWUgb2YgZmlsZSBpbiB3aGljaCB0aGUgdHlwZSBpcyBkZWZpbmVkLAordW5sZXNzIHRoZSBzdHJ1Y3QgaXMgYSB0ZW1wbGF0ZSBvciBkZWZpbmVkIGluIGEgc3lzdGVtIGhlYWRlci4KKy5TcAorVGhpcyBvcHRpb24gc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRoZSBzaXplIG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiwKK3dpdGggc29tZSBwb3RlbnRpYWwgbG9zcyBpbiB0eXBlIGluZm9ybWF0aW9uIHRvIHRoZSBkZWJ1Z2dlci4KK1NlZSBcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1iYXNlb25seVxmUiBmb3IgYSBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW9uLgorU2VlIFxmQlwtZmVtaXRcLXN0cnVjdFwtZGVidWdcLWRldGFpbGVkXGZSIGZvciBtb3JlIGRldGFpbGVkIGNvbnRyb2wuCisuU3AKK1RoaXMgb3B0aW9uIHdvcmtzIG9ubHkgd2l0aCBccy0xRFdBUkZcczAgMi4KKy5JUCAiXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtZGV0YWlsZWRcZlJbXGZCPVxmUlxmSXNwZWMtbGlzdFxmUl0iIDQKKy5JWCBJdGVtICItZmVtaXQtc3RydWN0LWRlYnVnLWRldGFpbGVkWz1zcGVjLWxpc3RdIgorU3BlY2lmeSB0aGUgc3RydWN0LWxpa2UgdHlwZXMKK2ZvciB3aGljaCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGRlYnVnIGluZm9ybWF0aW9uLgorVGhlIGludGVudCBpcyB0byByZWR1Y2UgZHVwbGljYXRlIHN0cnVjdCBkZWJ1ZyBpbmZvcm1hdGlvbgorYmV0d2VlbiBkaWZmZXJlbnQgb2JqZWN0IGZpbGVzIHdpdGhpbiB0aGUgc2FtZSBwcm9ncmFtLgorLlNwCitUaGlzIG9wdGlvbiBpcyBhIGRldGFpbGVkIHZlcnNpb24gb2YKK1wmXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtcmVkdWNlZFxmUiBhbmQgXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtYmFzZW9ubHlcZlIsCit3aGljaCBzZXJ2ZXMgZm9yIG1vc3QgbmVlZHMuCisuU3AKK0Egc3BlY2lmaWNhdGlvbiBoYXMgdGhlIHN5bnRheFtcZkJkaXI6XGZSfFxmQmluZDpcZlJdW1xmQm9yZDpcZlJ8XGZCZ2VuOlxmUl0oXGZCYW55XGZSfFxmQnN5c1xmUnxcZkJiYXNlXGZSfFxmQm5vbmVcZlIpCisuU3AKK1RoZSBvcHRpb25hbCBmaXJzdCB3b3JkIGxpbWl0cyB0aGUgc3BlY2lmaWNhdGlvbiB0bworc3RydWN0cyB0aGF0IGFyZSB1c2VkIGRpcmVjdGx5IChcZkJkaXI6XGZSKSBvciB1c2VkIGluZGlyZWN0bHkgKFxmQmluZDpcZlIpLgorQSBzdHJ1Y3QgdHlwZSBpcyB1c2VkIGRpcmVjdGx5IHdoZW4gaXQgaXMgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZSwgbWVtYmVyLgorSW5kaXJlY3QgdXNlcyBhcmlzZSB0aHJvdWdoIHBvaW50ZXJzIHRvIHN0cnVjdHMuCitUaGF0IGlzLCB3aGVuIHVzZSBvZiBhbiBpbmNvbXBsZXRlIHN0cnVjdCBpcyB2YWxpZCwgdGhlIHVzZSBpcyBpbmRpcmVjdC4KK0FuIGV4YW1wbGUgaXMKK1wmXGZCc3RydWN0IG9uZSBkaXJlY3Q7IHN0cnVjdCB0d28gKiBpbmRpcmVjdDtcZlIuCisuU3AKK1RoZSBvcHRpb25hbCBzZWNvbmQgd29yZCBsaW1pdHMgdGhlIHNwZWNpZmljYXRpb24gdG8KK29yZGluYXJ5IHN0cnVjdHMgKFxmQm9yZDpcZlIpIG9yIGdlbmVyaWMgc3RydWN0cyAoXGZCZ2VuOlxmUikuCitHZW5lcmljIHN0cnVjdHMgYXJlIGEgYml0IGNvbXBsaWNhdGVkIHRvIGV4cGxhaW4uCitGb3IgXCooQyssIHRoZXNlIGFyZSBub24tZXhwbGljaXQgc3BlY2lhbGl6YXRpb25zIG9mIHRlbXBsYXRlIGNsYXNzZXMsCitvciBub24tdGVtcGxhdGUgY2xhc3NlcyB3aXRoaW4gdGhlIGFib3ZlLgorT3RoZXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIGhhdmUgZ2VuZXJpY3MsCitidXQgXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtZGV0YWlsZWRcZlIgZG9lcyBub3QgeWV0IGltcGxlbWVudCB0aGVtLgorLlNwCitUaGUgdGhpcmQgd29yZCBzcGVjaWZpZXMgdGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhvc2UKK3N0cnVjdHMgZm9yIHdoaWNoIHRoZSBjb21waWxlciBzaG91bGQgZW1pdCBkZWJ1ZyBpbmZvcm1hdGlvbi4KK1RoZSB2YWx1ZXMgXGZCbm9uZVxmUiBhbmQgXGZCYW55XGZSIGhhdmUgdGhlIG5vcm1hbCBtZWFuaW5nLgorVGhlIHZhbHVlIFxmQmJhc2VcZlIgbWVhbnMgdGhhdAordGhlIGJhc2Ugb2YgbmFtZSBvZiB0aGUgZmlsZSBpbiB3aGljaCB0aGUgdHlwZSBkZWNsYXJhdGlvbiBhcHBlYXJzCittdXN0IG1hdGNoIHRoZSBiYXNlIG9mIHRoZSBuYW1lIG9mIHRoZSBtYWluIGNvbXBpbGF0aW9uIGZpbGUuCitJbiBwcmFjdGljZSwgdGhpcyBtZWFucyB0aGF0IHdoZW4gY29tcGlsaW5nIFxmSWZvby5jXGZSLCBkZWJ1ZyBpbmZvcm1hdGlvbgoraXMgZ2VuZXJhdGVkIGZvciB0eXBlcyBkZWNsYXJlZCBpbiB0aGF0IGZpbGUgYW5kIFxmSWZvby5oXGZSLAorYnV0IG5vdCBvdGhlciBoZWFkZXIgZmlsZXMuCitUaGUgdmFsdWUgXGZCc3lzXGZSIG1lYW5zIHRob3NlIHR5cGVzIHNhdGlzZnlpbmcgXGZCYmFzZVxmUgorb3IgZGVjbGFyZWQgaW4gc3lzdGVtIG9yIGNvbXBpbGVyIGhlYWRlcnMuCisuU3AKK1lvdSBtYXkgbmVlZCB0byBleHBlcmltZW50IHRvIGRldGVybWluZSB0aGUgYmVzdCBzZXR0aW5ncyBmb3IgeW91ciBhcHBsaWNhdGlvbi4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtZGV0YWlsZWQ9YWxsXGZSLgorLlNwCitUaGlzIG9wdGlvbiB3b3JrcyBvbmx5IHdpdGggXHMtMURXQVJGXHMwIDIuCisuSVAgIlxmQlwtZm5vXC1tZXJnZVwtZGVidWdcLXN0cmluZ3NcZlIiIDQKKy5JWCBJdGVtICItZm5vLW1lcmdlLWRlYnVnLXN0cmluZ3MiCitEaXJlY3QgdGhlIGxpbmtlciB0byBub3QgbWVyZ2UgdG9nZXRoZXIgc3RyaW5ncyBpbiB0aGUgZGVidWdnaW5nCitpbmZvcm1hdGlvbiB0aGF0IGFyZSBpZGVudGljYWwgaW4gZGlmZmVyZW50IG9iamVjdCBmaWxlcy4gIE1lcmdpbmcgaXMKK25vdCBzdXBwb3J0ZWQgYnkgYWxsIGFzc2VtYmxlcnMgb3IgbGlua2Vycy4gIE1lcmdpbmcgZGVjcmVhc2VzIHRoZSBzaXplCitvZiB0aGUgZGVidWcgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBmaWxlIGF0IHRoZSBjb3N0IG9mIGluY3JlYXNpbmcKK2xpbmsgcHJvY2Vzc2luZyB0aW1lLiAgTWVyZ2luZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtZmRlYnVnXC1wcmVmaXhcLW1hcD1cZlJcZklvbGRcZlJcZkI9XGZSXGZJbmV3XGZSIiA0CisuSVggSXRlbSAiLWZkZWJ1Zy1wcmVmaXgtbWFwPW9sZD1uZXciCitXaGVuIGNvbXBpbGluZyBmaWxlcyBpbiBkaXJlY3RvcnkgXGZJXGZJb2xkXGZJXGZSLCByZWNvcmQgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZW0gYXMgaW4gXGZJXGZJbmV3XGZJXGZSIGluc3RlYWQuCisuSVAgIlxmQlwtZm5vXC1kd2FyZjJcLWNmaVwtYXNtXGZSIiA0CisuSVggSXRlbSAiLWZuby1kd2FyZjItY2ZpLWFzbSIKK0VtaXQgXHMtMURXQVJGXHMwIDIgdW53aW5kIGluZm8gYXMgY29tcGlsZXIgZ2VuZXJhdGVkIFxmKENXXCooQ2AuZWhfZnJhbWVcKihDJ1xmUiBzZWN0aW9uCitpbnN0ZWFkIG9mIHVzaW5nIFxzLTFHQVNcczAgXGYoQ1dcKihDYC5jZmlfKlwqKEMnXGZSIGRpcmVjdGl2ZXMuCisuSVAgIlxmQlwtcFxmUiIgNAorLklYIEl0ZW0gIi1wIgorR2VuZXJhdGUgZXh0cmEgY29kZSB0byB3cml0ZSBwcm9maWxlIGluZm9ybWF0aW9uIHN1aXRhYmxlIGZvciB0aGUKK2FuYWx5c2lzIHByb2dyYW0gXGZCcHJvZlxmUi4gIFlvdSBtdXN0IHVzZSB0aGlzIG9wdGlvbiB3aGVuIGNvbXBpbGluZwordGhlIHNvdXJjZSBmaWxlcyB5b3Ugd2FudCBkYXRhIGFib3V0LCBhbmQgeW91IG11c3QgYWxzbyB1c2UgaXQgd2hlbgorbGlua2luZy4KKy5JUCAiXGZCXC1wZ1xmUiIgNAorLklYIEl0ZW0gIi1wZyIKK0dlbmVyYXRlIGV4dHJhIGNvZGUgdG8gd3JpdGUgcHJvZmlsZSBpbmZvcm1hdGlvbiBzdWl0YWJsZSBmb3IgdGhlCithbmFseXNpcyBwcm9ncmFtIFxmQmdwcm9mXGZSLiAgWW91IG11c3QgdXNlIHRoaXMgb3B0aW9uIHdoZW4gY29tcGlsaW5nCit0aGUgc291cmNlIGZpbGVzIHlvdSB3YW50IGRhdGEgYWJvdXQsIGFuZCB5b3UgbXVzdCBhbHNvIHVzZSBpdCB3aGVuCitsaW5raW5nLgorLklQICJcZkJcLVFcZlIiIDQKKy5JWCBJdGVtICItUSIKK01ha2VzIHRoZSBjb21waWxlciBwcmludCBvdXQgZWFjaCBmdW5jdGlvbiBuYW1lIGFzIGl0IGlzIGNvbXBpbGVkLCBhbmQKK3ByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCBlYWNoIHBhc3Mgd2hlbiBpdCBmaW5pc2hlcy4KKy5JUCAiXGZCXC1mdGltZVwtcmVwb3J0XGZSIiA0CisuSVggSXRlbSAiLWZ0aW1lLXJlcG9ydCIKK01ha2VzIHRoZSBjb21waWxlciBwcmludCBzb21lIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHRpbWUgY29uc3VtZWQgYnkgZWFjaAorcGFzcyB3aGVuIGl0IGZpbmlzaGVzLgorLklQICJcZkJcLWZtZW1cLXJlcG9ydFxmUiIgNAorLklYIEl0ZW0gIi1mbWVtLXJlcG9ydCIKK01ha2VzIHRoZSBjb21waWxlciBwcmludCBzb21lIHN0YXRpc3RpY3MgYWJvdXQgcGVybWFuZW50IG1lbW9yeQorYWxsb2NhdGlvbiB3aGVuIGl0IGZpbmlzaGVzLgorLklQICJcZkJcLWZtZW1cLXJlcG9ydFwtd3BhXGZSIiA0CisuSVggSXRlbSAiLWZtZW0tcmVwb3J0LXdwYSIKK01ha2VzIHRoZSBjb21waWxlciBwcmludCBzb21lIHN0YXRpc3RpY3MgYWJvdXQgcGVybWFuZW50IG1lbW9yeQorYWxsb2NhdGlvbiBmb3IgdGhlIFxzLTFXUEFcczAgcGhhc2Ugb25seS4KKy5JUCAiXGZCXC1mcHJlXC1pcGFcLW1lbVwtcmVwb3J0XGZSIiA0CisuSVggSXRlbSAiLWZwcmUtaXBhLW1lbS1yZXBvcnQiCisuUEQgMAorLklQICJcZkJcLWZwb3N0XC1pcGFcLW1lbVwtcmVwb3J0XGZSIiA0CisuSVggSXRlbSAiLWZwb3N0LWlwYS1tZW0tcmVwb3J0IgorLlBECitNYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQgc29tZSBzdGF0aXN0aWNzIGFib3V0IHBlcm1hbmVudCBtZW1vcnkKK2FsbG9jYXRpb24gYmVmb3JlIG9yIGFmdGVyIGludGVycHJvY2VkdXJhbCBvcHRpbWl6YXRpb24uCisuSVAgIlxmQlwtZnByb2ZpbGVcLXJlcG9ydFxmUiIgNAorLklYIEl0ZW0gIi1mcHJvZmlsZS1yZXBvcnQiCitNYWtlcyB0aGUgY29tcGlsZXIgcHJpbnQgc29tZSBzdGF0aXN0aWNzIGFib3V0IGNvbnNpc3RlbmN5IG9mIHRoZQorKGVzdGltYXRlZCkgcHJvZmlsZSBhbmQgZWZmZWN0IG9mIGluZGl2aWR1YWwgcGFzc2VzLgorLklQICJcZkJcLWZzdGFja1wtdXNhZ2VcZlIiIDQKKy5JWCBJdGVtICItZnN0YWNrLXVzYWdlIgorTWFrZXMgdGhlIGNvbXBpbGVyIG91dHB1dCBzdGFjayB1c2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHByb2dyYW0sIG9uIGEKK3Blci1mdW5jdGlvbiBiYXNpcy4gIFRoZSBmaWxlbmFtZSBmb3IgdGhlIGR1bXAgaXMgbWFkZSBieSBhcHBlbmRpbmcKK1wmXGZJLnN1XGZSIHRvIHRoZSBcZklhdXhuYW1lXGZSLiAgXGZJYXV4bmFtZVxmUiBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgbmFtZSBvZgordGhlIG91dHB1dCBmaWxlLCBpZiBleHBsaWNpdGx5IHNwZWNpZmllZCBhbmQgaXQgaXMgbm90IGFuIGV4ZWN1dGFibGUsCitvdGhlcndpc2UgaXQgaXMgdGhlIGJhc2VuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS4gIEFuIGVudHJ5IGlzIG1hZGUgdXAKK29mIHRocmVlIGZpZWxkczoKKy5SUyA0CisuSVAgIlwoYnUiIDQKK1RoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KKy5JUCAiXChidSIgNAorQSBudW1iZXIgb2YgYnl0ZXMuCisuSVAgIlwoYnUiIDQKK09uZSBvciBtb3JlIHF1YWxpZmllcnM6IFxmKENXXCooQ2BzdGF0aWNcKihDJ1xmUiwgXGYoQ1dcKihDYGR5bmFtaWNcKihDJ1xmUiwgXGYoQ1dcKihDYGJvdW5kZWRcKihDJ1xmUi4KKy5SRQorLlJTIDQKKy5TcAorVGhlIHF1YWxpZmllciBcZihDV1wqKENgc3RhdGljXCooQydcZlIgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gbWFuaXB1bGF0ZXMgdGhlIHN0YWNrCitzdGF0aWNhbGx5OiBhIGZpeGVkIG51bWJlciBvZiBieXRlcyBhcmUgYWxsb2NhdGVkIGZvciB0aGUgZnJhbWUgb24gZnVuY3Rpb24KK2VudHJ5IGFuZCByZWxlYXNlZCBvbiBmdW5jdGlvbiBleGl0OyBubyBzdGFjayBhZGp1c3RtZW50cyBhcmUgb3RoZXJ3aXNlIG1hZGUKK2luIHRoZSBmdW5jdGlvbi4gIFRoZSBzZWNvbmQgZmllbGQgaXMgdGhpcyBmaXhlZCBudW1iZXIgb2YgYnl0ZXMuCisuU3AKK1RoZSBxdWFsaWZpZXIgXGYoQ1dcKihDYGR5bmFtaWNcKihDJ1xmUiBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBtYW5pcHVsYXRlcyB0aGUgc3RhY2sKK2R5bmFtaWNhbGx5OiBpbiBhZGRpdGlvbiB0byB0aGUgc3RhdGljIGFsbG9jYXRpb24gZGVzY3JpYmVkIGFib3ZlLCBzdGFjaworYWRqdXN0bWVudHMgYXJlIG1hZGUgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZSB0byBwdXNoL3BvcAorYXJndW1lbnRzIGFyb3VuZCBmdW5jdGlvbiBjYWxscy4gIElmIHRoZSBxdWFsaWZpZXIgXGYoQ1dcKihDYGJvdW5kZWRcKihDJ1xmUiBpcyBhbHNvCitwcmVzZW50LCB0aGUgYW1vdW50IG9mIHRoZXNlIGFkanVzdG1lbnRzIGlzIGJvdW5kZWQgYXQgY29tcGlsZSB0aW1lIGFuZAordGhlIHNlY29uZCBmaWVsZCBpcyBhbiB1cHBlciBib3VuZCBvZiB0aGUgdG90YWwgYW1vdW50IG9mIHN0YWNrIHVzZWQgYnkKK3RoZSBmdW5jdGlvbi4gIElmIGl0IGlzIG5vdCBwcmVzZW50LCB0aGUgYW1vdW50IG9mIHRoZXNlIGFkanVzdG1lbnRzIGlzCitub3QgYm91bmRlZCBhdCBjb21waWxlIHRpbWUgYW5kIHRoZSBzZWNvbmQgZmllbGQgb25seSByZXByZXNlbnRzIHRoZQorYm91bmRlZCBwYXJ0LgorLlJFCisuSVAgIlxmQlwtZnByb2ZpbGVcLWFyY3NcZlIiIDQKKy5JWCBJdGVtICItZnByb2ZpbGUtYXJjcyIKK0FkZCBjb2RlIHNvIHRoYXQgcHJvZ3JhbSBmbG93IFxmSWFyY3NcZlIgYXJlIGluc3RydW1lbnRlZC4gIER1cmluZworZXhlY3V0aW9uIHRoZSBwcm9ncmFtIHJlY29yZHMgaG93IG1hbnkgdGltZXMgZWFjaCBicmFuY2ggYW5kIGNhbGwgaXMKK2V4ZWN1dGVkIGFuZCBob3cgbWFueSB0aW1lcyBpdCBpcyB0YWtlbiBvciByZXR1cm5zLiAgV2hlbiB0aGUgY29tcGlsZWQKK3Byb2dyYW0gZXhpdHMgaXQgc2F2ZXMgdGhpcyBkYXRhIHRvIGEgZmlsZSBjYWxsZWQKK1wmXGZJXGZJYXV4bmFtZVxmSS5nY2RhXGZSIGZvciBlYWNoIHNvdXJjZSBmaWxlLiAgVGhlIGRhdGEgbWF5IGJlIHVzZWQgZm9yCitwcm9maWxlLWRpcmVjdGVkIG9wdGltaXphdGlvbnMgKFxmQlwtZmJyYW5jaFwtcHJvYmFiaWxpdGllc1xmUiksIG9yIGZvcgordGVzdCBjb3ZlcmFnZSBhbmFseXNpcyAoXGZCXC1mdGVzdFwtY292ZXJhZ2VcZlIpLiAgRWFjaCBvYmplY3QgZmlsZSdzCitcJlxmSWF1eG5hbWVcZlIgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlLCBpZgorZXhwbGljaXRseSBzcGVjaWZpZWQgYW5kIGl0IGlzIG5vdCB0aGUgZmluYWwgZXhlY3V0YWJsZSwgb3RoZXJ3aXNlIGl0IGlzCit0aGUgYmFzZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLiAgSW4gYm90aCBjYXNlcyBhbnkgc3VmZml4IGlzIHJlbW92ZWQKKyhlLmcuIFxmSWZvby5nY2RhXGZSIGZvciBpbnB1dCBmaWxlIFxmSWRpci9mb28uY1xmUiwgb3IKK1wmXGZJZGlyL2Zvby5nY2RhXGZSIGZvciBvdXRwdXQgZmlsZSBzcGVjaWZpZWQgYXMgXGZCXC1vIGRpci9mb28ub1xmUikuCisuSVAgIlxmQlwtXC1jb3ZlcmFnZVxmUiIgNAorLklYIEl0ZW0gIi0tY292ZXJhZ2UiCitUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGNvbXBpbGUgYW5kIGxpbmsgY29kZSBpbnN0cnVtZW50ZWQgZm9yIGNvdmVyYWdlCithbmFseXNpcy4gIFRoZSBvcHRpb24gaXMgYSBzeW5vbnltIGZvciBcZkJcLWZwcm9maWxlXC1hcmNzXGZSCitcJlxmQlwtZnRlc3RcLWNvdmVyYWdlXGZSICh3aGVuIGNvbXBpbGluZykgYW5kIFxmQlwtbGdjb3ZcZlIgKHdoZW4KK2xpbmtpbmcpLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aG9zZSBvcHRpb25zIGZvciBtb3JlIGRldGFpbHMuCisuUlMgNAorLklQICJcKGJ1IiA0CitDb21waWxlIHRoZSBzb3VyY2UgZmlsZXMgd2l0aCBcZkJcLWZwcm9maWxlXC1hcmNzXGZSIHBsdXMgb3B0aW1pemF0aW9uCithbmQgY29kZSBnZW5lcmF0aW9uIG9wdGlvbnMuICBGb3IgdGVzdCBjb3ZlcmFnZSBhbmFseXNpcywgdXNlIHRoZQorYWRkaXRpb25hbCBcZkJcLWZ0ZXN0XC1jb3ZlcmFnZVxmUiBvcHRpb24uICBZb3UgZG8gbm90IG5lZWQgdG8gcHJvZmlsZQorZXZlcnkgc291cmNlIGZpbGUgaW4gYSBwcm9ncmFtLgorLklQICJcKGJ1IiA0CitMaW5rIHlvdXIgb2JqZWN0IGZpbGVzIHdpdGggXGZCXC1sZ2NvdlxmUiBvciBcZkJcLWZwcm9maWxlXC1hcmNzXGZSCisodGhlIGxhdHRlciBpbXBsaWVzIHRoZSBmb3JtZXIpLgorLklQICJcKGJ1IiA0CitSdW4gdGhlIHByb2dyYW0gb24gYSByZXByZXNlbnRhdGl2ZSB3b3JrbG9hZCB0byBnZW5lcmF0ZSB0aGUgYXJjIHByb2ZpbGUKK2luZm9ybWF0aW9uLiAgVGhpcyBtYXkgYmUgcmVwZWF0ZWQgYW55IG51bWJlciBvZiB0aW1lcy4gIFlvdSBjYW4gcnVuCitjb25jdXJyZW50IGluc3RhbmNlcyBvZiB5b3VyIHByb2dyYW0sIGFuZCBwcm92aWRlZCB0aGF0IHRoZSBmaWxlIHN5c3RlbQorc3VwcG9ydHMgbG9ja2luZywgdGhlIGRhdGEgZmlsZXMgd2lsbCBiZSBjb3JyZWN0bHkgdXBkYXRlZC4gIEFsc28KK1wmXGYoQ1dcKihDYGZvcmtcKihDJ1xmUiBjYWxscyBhcmUgZGV0ZWN0ZWQgYW5kIGNvcnJlY3RseSBoYW5kbGVkIChkb3VibGUgY291bnRpbmcKK3dpbGwgbm90IGhhcHBlbikuCisuSVAgIlwoYnUiIDQKK0ZvciBwcm9maWxlLWRpcmVjdGVkIG9wdGltaXphdGlvbnMsIGNvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcyBhZ2FpbiB3aXRoCit0aGUgc2FtZSBvcHRpbWl6YXRpb24gYW5kIGNvZGUgZ2VuZXJhdGlvbiBvcHRpb25zIHBsdXMKK1wmXGZCXC1mYnJhbmNoXC1wcm9iYWJpbGl0aWVzXGZSLgorLklQICJcKGJ1IiA0CitGb3IgdGVzdCBjb3ZlcmFnZSBhbmFseXNpcywgdXNlIFxmQmdjb3ZcZlIgdG8gcHJvZHVjZSBodW1hbiByZWFkYWJsZQoraW5mb3JtYXRpb24gZnJvbSB0aGUgXGZJLmdjbm9cZlIgYW5kIFxmSS5nY2RhXGZSIGZpbGVzLiAgUmVmZXIgdG8gdGhlCitcJlxmQmdjb3ZcZlIgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKy5SRQorLlJTIDQKKy5TcAorV2l0aCBcZkJcLWZwcm9maWxlXC1hcmNzXGZSLCBmb3IgZWFjaCBmdW5jdGlvbiBvZiB5b3VyIHByb2dyYW0gXHMtMUdDQ1xzMAorY3JlYXRlcyBhIHByb2dyYW0gZmxvdyBncmFwaCwgdGhlbiBmaW5kcyBhIHNwYW5uaW5nIHRyZWUgZm9yIHRoZSBncmFwaC4KK09ubHkgYXJjcyB0aGF0IGFyZSBub3Qgb24gdGhlIHNwYW5uaW5nIHRyZWUgaGF2ZSB0byBiZSBpbnN0cnVtZW50ZWQ6IHRoZQorY29tcGlsZXIgYWRkcyBjb2RlIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGVzZSBhcmNzIGFyZQorZXhlY3V0ZWQuICBXaGVuIGFuIGFyYyBpcyB0aGUgb25seSBleGl0IG9yIG9ubHkgZW50cmFuY2UgdG8gYSBibG9jaywgdGhlCitpbnN0cnVtZW50YXRpb24gY29kZSBjYW4gYmUgYWRkZWQgdG8gdGhlIGJsb2NrOyBvdGhlcndpc2UsIGEgbmV3IGJhc2ljCitibG9jayBtdXN0IGJlIGNyZWF0ZWQgdG8gaG9sZCB0aGUgaW5zdHJ1bWVudGF0aW9uIGNvZGUuCisuUkUKKy5JUCAiXGZCXC1mdGVzdFwtY292ZXJhZ2VcZlIiIDQKKy5JWCBJdGVtICItZnRlc3QtY292ZXJhZ2UiCitQcm9kdWNlIGEgbm90ZXMgZmlsZSB0aGF0IHRoZSBcZkJnY292XGZSIGNvZGUtY292ZXJhZ2UgdXRpbGl0eSBjYW4gdXNlIHRvCitzaG93IHByb2dyYW0gY292ZXJhZ2UuICBFYWNoIHNvdXJjZSBmaWxlJ3Mgbm90ZSBmaWxlIGlzIGNhbGxlZAorXCZcZklcZklhdXhuYW1lXGZJLmdjbm9cZlIuICBSZWZlciB0byB0aGUgXGZCXC1mcHJvZmlsZVwtYXJjc1xmUiBvcHRpb24KK2Fib3ZlIGZvciBhIGRlc2NyaXB0aW9uIG9mIFxmSWF1eG5hbWVcZlIgYW5kIGluc3RydWN0aW9ucyBvbiBob3cgdG8KK2dlbmVyYXRlIHRlc3QgY292ZXJhZ2UgZGF0YS4gIENvdmVyYWdlIGRhdGEgbWF0Y2hlcyB0aGUgc291cmNlIGZpbGVzCittb3JlIGNsb3NlbHkgaWYgeW91IGRvIG5vdCBvcHRpbWl6ZS4KKy5JUCAiXGZCXC1mZGJnXC1jbnRcLWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmRiZy1jbnQtbGlzdCIKK1ByaW50IHRoZSBuYW1lIGFuZCB0aGUgY291bnRlciB1cHBlciBib3VuZCBmb3IgYWxsIGRlYnVnIGNvdW50ZXJzLgorLklQICJcZkJcLWZkYmdcLWNudD1cZlJcZkljb3VudGVyLXZhbHVlLWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmRiZy1jbnQ9Y291bnRlci12YWx1ZS1saXN0IgorU2V0IHRoZSBpbnRlcm5hbCBkZWJ1ZyBjb3VudGVyIHVwcGVyIGJvdW5kLiAgXGZJY291bnRlci12YWx1ZS1saXN0XGZSCitpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFxmSW5hbWVcZlI6XGZJdmFsdWVcZlIgcGFpcnMKK3doaWNoIHNldHMgdGhlIHVwcGVyIGJvdW5kIG9mIGVhY2ggZGVidWcgY291bnRlciBcZkluYW1lXGZSIHRvIFxmSXZhbHVlXGZSLgorQWxsIGRlYnVnIGNvdW50ZXJzIGhhdmUgdGhlIGluaXRpYWwgdXBwZXIgYm91bmQgb2YgXGYoQ1dcKihDYFVJTlRfTUFYXCooQydcZlI7Cit0aHVzIFxmKENXXCooQ2BkYmdfY250KClcKihDJ1xmUiByZXR1cm5zIHRydWUgYWx3YXlzIHVubGVzcyB0aGUgdXBwZXIgYm91bmQKK2lzIHNldCBieSB0aGlzIG9wdGlvbi4KK0ZvciBleGFtcGxlLCB3aXRoIFxmQlwtZmRiZ1wtY250PWRjZToxMCx0YWlsX2NhbGw6MFxmUiwKK1wmXGYoQ1dcKihDYGRiZ19jbnQoZGNlKVwqKEMnXGZSIHJldHVybnMgdHJ1ZSBvbmx5IGZvciBmaXJzdCAxMCBpbnZvY2F0aW9ucy4KKy5JUCAiXGZCXC1mZW5hYmxlXC1cZlJcZklraW5kXGZSXGZCXC1cZlJcZklwYXNzXGZSIiA0CisuSVggSXRlbSAiLWZlbmFibGUta2luZC1wYXNzIgorLlBEIDAKKy5JUCAiXGZCXC1mZGlzYWJsZVwtXGZSXGZJa2luZFxmUlxmQlwtXGZSXGZJcGFzc1xmUlxmQj1cZlJcZklyYW5nZS1saXN0XGZSIiA0CisuSVggSXRlbSAiLWZkaXNhYmxlLWtpbmQtcGFzcz1yYW5nZS1saXN0IgorLlBECitUaGlzIGlzIGEgc2V0IG9mIG9wdGlvbnMgdGhhdCBhcmUgdXNlZCB0byBleHBsaWNpdGx5IGRpc2FibGUvZW5hYmxlCitvcHRpbWl6YXRpb24gcGFzc2VzLiAgVGhlc2Ugb3B0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHVzZSBmb3IgZGVidWdnaW5nIFxzLTFHQ0NcczAuCitDb21waWxlciB1c2VycyBzaG91bGQgdXNlIHJlZ3VsYXIgb3B0aW9ucyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nCitwYXNzZXMgaW5zdGVhZC4KKy5SUyA0CisuSVAgIlxmQlwtZmRpc2FibGVcLWlwYVwtXGZSXGZJcGFzc1xmUiIgNAorLklYIEl0ZW0gIi1mZGlzYWJsZS1pcGEtcGFzcyIKK0Rpc2FibGUgXHMtMUlQQVxzMCBwYXNzIFxmSXBhc3NcZlIuIFxmSXBhc3NcZlIgaXMgdGhlIHBhc3MgbmFtZS4gIElmIHRoZSBzYW1lIHBhc3MgaXMKK3N0YXRpY2FsbHkgaW52b2tlZCBpbiB0aGUgY29tcGlsZXIgbXVsdGlwbGUgdGltZXMsIHRoZSBwYXNzIG5hbWUgc2hvdWxkIGJlCithcHBlbmRlZCB3aXRoIGEgc2VxdWVudGlhbCBudW1iZXIgc3RhcnRpbmcgZnJvbSAxLgorLklQICJcZkJcLWZkaXNhYmxlXC1ydGxcLVxmUlxmSXBhc3NcZlIiIDQKKy5JWCBJdGVtICItZmRpc2FibGUtcnRsLXBhc3MiCisuUEQgMAorLklQICJcZkJcLWZkaXNhYmxlXC1ydGxcLVxmUlxmSXBhc3NcZlJcZkI9XGZSXGZJcmFuZ2UtbGlzdFxmUiIgNAorLklYIEl0ZW0gIi1mZGlzYWJsZS1ydGwtcGFzcz1yYW5nZS1saXN0IgorLlBECitEaXNhYmxlIFxzLTFSVExcczAgcGFzcyBcZklwYXNzXGZSLiAgXGZJcGFzc1xmUiBpcyB0aGUgcGFzcyBuYW1lLiAgSWYgdGhlIHNhbWUgcGFzcyBpcworc3RhdGljYWxseSBpbnZva2VkIGluIHRoZSBjb21waWxlciBtdWx0aXBsZSB0aW1lcywgdGhlIHBhc3MgbmFtZSBzaG91bGQgYmUKK2FwcGVuZGVkIHdpdGggYSBzZXF1ZW50aWFsIG51bWJlciBzdGFydGluZyBmcm9tIDEuICBcZklyYW5nZS1saXN0XGZSIGlzIGEgCitjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmdW5jdGlvbiByYW5nZXMgb3IgYXNzZW1ibGVyIG5hbWVzLiAgRWFjaCByYW5nZSBpcyBhIG51bWJlcgorcGFpciBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4gIFRoZSByYW5nZSBpcyBpbmNsdXNpdmUgaW4gYm90aCBlbmRzLiAgSWYgdGhlIHJhbmdlCitpcyB0cml2aWFsLCB0aGUgbnVtYmVyIHBhaXIgY2FuIGJlIHNpbXBsaWZpZWQgYXMgYSBzaW5nbGUgbnVtYmVyLiAgSWYgdGhlCitmdW5jdGlvbidzIGNhbGwgZ3JhcGggbm9kZSdzIFxmSXVpZFxmUiBmYWxscyB3aXRoaW4gb25lIG9mIHRoZSBzcGVjaWZpZWQgcmFuZ2VzLAordGhlIFxmSXBhc3NcZlIgaXMgZGlzYWJsZWQgZm9yIHRoYXQgZnVuY3Rpb24uICBUaGUgXGZJdWlkXGZSIGlzIHNob3duIGluIHRoZQorZnVuY3Rpb24gaGVhZGVyIG9mIGEgZHVtcCBmaWxlLCBhbmQgdGhlIHBhc3MgbmFtZXMgY2FuIGJlIGR1bXBlZCBieSB1c2luZworb3B0aW9uIFxmQlwtZmR1bXBcLXBhc3Nlc1xmUi4KKy5JUCAiXGZCXC1mZGlzYWJsZVwtdHJlZVwtXGZSXGZJcGFzc1xmUiIgNAorLklYIEl0ZW0gIi1mZGlzYWJsZS10cmVlLXBhc3MiCisuUEQgMAorLklQICJcZkJcLWZkaXNhYmxlXC10cmVlXC1cZlJcZklwYXNzXGZSXGZCPVxmUlxmSXJhbmdlLWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmRpc2FibGUtdHJlZS1wYXNzPXJhbmdlLWxpc3QiCisuUEQKK0Rpc2FibGUgdHJlZSBwYXNzIFxmSXBhc3NcZlIuICBTZWUgXGZCXC1mZGlzYWJsZVwtcnRsXGZSIGZvciB0aGUgZGVzY3JpcHRpb24gb2YKK29wdGlvbiBhcmd1bWVudHMuCisuSVAgIlxmQlwtZmVuYWJsZVwtaXBhXC1cZlJcZklwYXNzXGZSIiA0CisuSVggSXRlbSAiLWZlbmFibGUtaXBhLXBhc3MiCitFbmFibGUgXHMtMUlQQVxzMCBwYXNzIFxmSXBhc3NcZlIuICBcZklwYXNzXGZSIGlzIHRoZSBwYXNzIG5hbWUuICBJZiB0aGUgc2FtZSBwYXNzIGlzCitzdGF0aWNhbGx5IGludm9rZWQgaW4gdGhlIGNvbXBpbGVyIG11bHRpcGxlIHRpbWVzLCB0aGUgcGFzcyBuYW1lIHNob3VsZCBiZQorYXBwZW5kZWQgd2l0aCBhIHNlcXVlbnRpYWwgbnVtYmVyIHN0YXJ0aW5nIGZyb20gMS4KKy5JUCAiXGZCXC1mZW5hYmxlXC1ydGxcLVxmUlxmSXBhc3NcZlIiIDQKKy5JWCBJdGVtICItZmVuYWJsZS1ydGwtcGFzcyIKKy5QRCAwCisuSVAgIlxmQlwtZmVuYWJsZVwtcnRsXC1cZlJcZklwYXNzXGZSXGZCPVxmUlxmSXJhbmdlLWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmVuYWJsZS1ydGwtcGFzcz1yYW5nZS1saXN0IgorLlBECitFbmFibGUgXHMtMVJUTFxzMCBwYXNzIFxmSXBhc3NcZlIuICBTZWUgXGZCXC1mZGlzYWJsZVwtcnRsXGZSIGZvciBvcHRpb24gYXJndW1lbnQKK2Rlc2NyaXB0aW9uIGFuZCBleGFtcGxlcy4KKy5JUCAiXGZCXC1mZW5hYmxlXC10cmVlXC1cZlJcZklwYXNzXGZSIiA0CisuSVggSXRlbSAiLWZlbmFibGUtdHJlZS1wYXNzIgorLlBEIDAKKy5JUCAiXGZCXC1mZW5hYmxlXC10cmVlXC1cZlJcZklwYXNzXGZSXGZCPVxmUlxmSXJhbmdlLWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmVuYWJsZS10cmVlLXBhc3M9cmFuZ2UtbGlzdCIKKy5QRAorRW5hYmxlIHRyZWUgcGFzcyBcZklwYXNzXGZSLiAgU2VlIFxmQlwtZmRpc2FibGVcLXJ0bFxmUiBmb3IgdGhlIGRlc2NyaXB0aW9uCitvZiBvcHRpb24gYXJndW1lbnRzLgorLlJFCisuUlMgNAorLlNwCitIZXJlIGFyZSBzb21lIGV4YW1wbGVzIHNob3dpbmcgdXNlcyBvZiB0aGVzZSBvcHRpb25zLgorLlNwCisuVmIgMTAKK1wmICAgICAgICAjIGRpc2FibGUgY2NwMSBmb3IgYWxsIGZ1bmN0aW9ucworXCYgICAgICAgICAgIFwtZmRpc2FibGVcLXRyZWVcLWNjcDEKK1wmICAgICAgICAjIGRpc2FibGUgY29tcGxldGUgdW5yb2xsIGZvciBmdW5jdGlvbiB3aG9zZSBjZ3JhcGggbm9kZSB1aWQgaXMgMQorXCYgICAgICAgICAgIFwtZmVuYWJsZVwtdHJlZVwtY3Vucm9sbD0xCitcJiAgICAgICAgIyBkaXNhYmxlIGdjc2UyIGZvciBmdW5jdGlvbnMgYXQgdGhlIGZvbGxvd2luZyByYW5nZXMgWzEsMV0sCitcJiAgICAgICAgIyBbMzAwLDQwMF0sIGFuZCBbNDAwLDEwMDBdCitcJiAgICAgICAgIyBkaXNhYmxlIGdjc2UyIGZvciBmdW5jdGlvbnMgZm9vIGFuZCBmb28yCitcJiAgICAgICAgICAgXC1mZGlzYWJsZVwtcnRsXC1nY3NlMj1mb28sZm9vMgorXCYgICAgICAgICMgZGlzYWJsZSBlYXJseSBpbmxpbmluZworXCYgICAgICAgICAgIFwtZmRpc2FibGVcLXRyZWVcLWVpbmxpbmUKK1wmICAgICAgICAjIGRpc2FibGUgaXBhIGlubGluaW5nCitcJiAgICAgICAgICAgXC1mZGlzYWJsZVwtaXBhXC1pbmxpbmUKK1wmICAgICAgICAjIGVuYWJsZSB0cmVlIGZ1bGwgdW5yb2xsCitcJiAgICAgICAgICAgXC1mZW5hYmxlXC10cmVlXC11bnJvbGwKKy5WZQorLlJFCisuSVAgIlxmQlwtZFxmUlxmSWxldHRlcnNcZlIiIDQKKy5JWCBJdGVtICItZGxldHRlcnMiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLVxmUlxmSXBhc3NcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXBhc3MiCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtXGZSXGZJcGFzc1xmUlxmQj1cZlJcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtcGFzcz1maWxlbmFtZSIKKy5QRAorU2F5cyB0byBtYWtlIGRlYnVnZ2luZyBkdW1wcyBkdXJpbmcgY29tcGlsYXRpb24gYXQgdGltZXMgc3BlY2lmaWVkIGJ5CitcJlxmSWxldHRlcnNcZlIuICBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgUlRMLWJhc2VkIHBhc3NlcyBvZiB0aGUKK2NvbXBpbGVyLiAgVGhlIGZpbGUgbmFtZXMgZm9yIG1vc3Qgb2YgdGhlIGR1bXBzIGFyZSBtYWRlIGJ5IGFwcGVuZGluZworYSBwYXNzIG51bWJlciBhbmQgYSB3b3JkIHRvIHRoZSBcZklkdW1wbmFtZVxmUiwgYW5kIHRoZSBmaWxlcyBhcmUKK2NyZWF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBvZiB0aGUgb3V0cHV0IGZpbGUuIEluIGNhc2Ugb2YKK1wmXGZCPVxmUlxmSWZpbGVuYW1lXGZSIG9wdGlvbiwgdGhlIGR1bXAgaXMgb3V0cHV0IG9uIHRoZSBnaXZlbiBmaWxlCitpbnN0ZWFkIG9mIHRoZSBwYXNzIG51bWJlcmVkIGR1bXAgZmlsZXMuIE5vdGUgdGhhdCB0aGUgcGFzcyBudW1iZXIgaXMKK2NvbXB1dGVkIHN0YXRpY2FsbHkgYXMgcGFzc2VzIGdldCByZWdpc3RlcmVkIGludG8gdGhlIHBhc3MgbWFuYWdlci4KK1RodXMgdGhlIG51bWJlcmluZyBpcyBub3QgcmVsYXRlZCB0byB0aGUgZHluYW1pYyBvcmRlciBvZiBleGVjdXRpb24gb2YKK3Bhc3Nlcy4gIEluIHBhcnRpY3VsYXIsIGEgcGFzcyBpbnN0YWxsZWQgYnkgYSBwbHVnaW4gY291bGQgaGF2ZSBhCitudW1iZXIgb3ZlciAyMDAgZXZlbiBpZiBpdCBleGVjdXRlZCBxdWl0ZSBlYXJseS4gIFxmSWR1bXBuYW1lXGZSIGlzCitnZW5lcmF0ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUsIGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkCithbmQgaXQgaXMgbm90IGFuIGV4ZWN1dGFibGUsIG90aGVyd2lzZSBpdCBpcyB0aGUgYmFzZW5hbWUgb2YgdGhlCitzb3VyY2UgZmlsZS4gVGhlc2Ugc3dpdGNoZXMgbWF5IGhhdmUgZGlmZmVyZW50IGVmZmVjdHMgd2hlbgorXCZcZkJcLUVcZlIgaXMgdXNlZCBmb3IgcHJlcHJvY2Vzc2luZy4KKy5TcAorRGVidWcgZHVtcHMgY2FuIGJlIGVuYWJsZWQgd2l0aCBhIFxmQlwtZmR1bXBcLXJ0bFxmUiBzd2l0Y2ggb3Igc29tZQorXCZcZkJcLWRcZlIgb3B0aW9uIFxmSWxldHRlcnNcZlIuICBIZXJlIGFyZSB0aGUgcG9zc2libGUKK2xldHRlcnMgZm9yIHVzZSBpbiBcZklwYXNzXGZSIGFuZCBcZklsZXR0ZXJzXGZSLCBhbmQgdGhlaXIgbWVhbmluZ3M6CisuUlMgNAorLklQICJcZkJcLWZkdW1wXC1ydGxcLWFsaWdubWVudHNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWFsaWdubWVudHMiCitEdW1wIGFmdGVyIGJyYW5jaCBhbGlnbm1lbnRzIGhhdmUgYmVlbiBjb21wdXRlZC4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1hc21jb25zXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1hc21jb25zIgorRHVtcCBhZnRlciBmaXhpbmcgcnRsIHN0YXRlbWVudHMgdGhhdCBoYXZlIHVuc2F0aXNmaWVkIGluL291dCBjb25zdHJhaW50cy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1hdXRvX2luY19kZWNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWF1dG9faW5jX2RlYyIKK0R1bXAgYWZ0ZXIgYXV0by1pbmMtZGVjIGRpc2NvdmVyeS4gIFRoaXMgcGFzcyBpcyBvbmx5IHJ1biBvbgorYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgYXV0byBpbmMgb3IgYXV0byBkZWMgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWJhcnJpZXJzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1iYXJyaWVycyIKK0R1bXAgYWZ0ZXIgY2xlYW5pbmcgdXAgdGhlIGJhcnJpZXIgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWJicGFydFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtYmJwYXJ0IgorRHVtcCBhZnRlciBwYXJ0aXRpb25pbmcgaG90IGFuZCBjb2xkIGJhc2ljIGJsb2Nrcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1iYnJvXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1iYnJvIgorRHVtcCBhZnRlciBibG9jayByZW9yZGVyaW5nLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWJ0bDFcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWJ0bDEiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLWJ0bDJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWJ0bDIiCisuUEQKK1wmXGZCXC1mZHVtcFwtcnRsXC1idGwxXGZSIGFuZCBcZkJcLWZkdW1wXC1ydGxcLWJ0bDJcZlIgZW5hYmxlIGR1bXBpbmcKK2FmdGVyIHRoZSB0d28gYnJhbmNoCit0YXJnZXQgbG9hZCBvcHRpbWl6YXRpb24gcGFzc2VzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWJ5cGFzc1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtYnlwYXNzIgorRHVtcCBhZnRlciBqdW1wIGJ5cGFzc2luZyBhbmQgY29udHJvbCBmbG93IG9wdGltaXphdGlvbnMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtY29tYmluZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY29tYmluZSIKK0R1bXAgYWZ0ZXIgdGhlIFxzLTFSVExcczAgaW5zdHJ1Y3Rpb24gY29tYmluYXRpb24gcGFzcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1jb21wZ290b3NcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWNvbXBnb3RvcyIKK0R1bXAgYWZ0ZXIgZHVwbGljYXRpbmcgdGhlIGNvbXB1dGVkIGdvdG9zLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWNlMVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY2UxIgorLlBEIDAKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1jZTJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWNlMiIKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1jZTNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWNlMyIKKy5QRAorXCZcZkJcLWZkdW1wXC1ydGxcLWNlMVxmUiwgXGZCXC1mZHVtcFwtcnRsXC1jZTJcZlIsIGFuZAorXCZcZkJcLWZkdW1wXC1ydGxcLWNlM1xmUiBlbmFibGUgZHVtcGluZyBhZnRlciB0aGUgdGhyZWUKK2lmIGNvbnZlcnNpb24gcGFzc2VzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWNwcm9wX2hhcmRyZWdcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWNwcm9wX2hhcmRyZWciCitEdW1wIGFmdGVyIGhhcmQgcmVnaXN0ZXIgY29weSBwcm9wYWdhdGlvbi4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1jc2FcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWNzYSIKK0R1bXAgYWZ0ZXIgY29tYmluaW5nIHN0YWNrIGFkanVzdG1lbnRzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWNzZTFcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWNzZTEiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLWNzZTJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWNzZTIiCisuUEQKK1wmXGZCXC1mZHVtcFwtcnRsXC1jc2UxXGZSIGFuZCBcZkJcLWZkdW1wXC1ydGxcLWNzZTJcZlIgZW5hYmxlIGR1bXBpbmcgYWZ0ZXIKK3RoZSB0d28gY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24gcGFzc2VzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWRjZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtZGNlIgorRHVtcCBhZnRlciB0aGUgc3RhbmRhbG9uZSBkZWFkIGNvZGUgZWxpbWluYXRpb24gcGFzc2VzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWRiclxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtZGJyIgorRHVtcCBhZnRlciBkZWxheWVkIGJyYW5jaCBzY2hlZHVsaW5nLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWRjZTFcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWRjZTEiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLWRjZTJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWRjZTIiCisuUEQKK1wmXGZCXC1mZHVtcFwtcnRsXC1kY2UxXGZSIGFuZCBcZkJcLWZkdW1wXC1ydGxcLWRjZTJcZlIgZW5hYmxlIGR1bXBpbmcgYWZ0ZXIKK3RoZSB0d28gZGVhZCBzdG9yZSBlbGltaW5hdGlvbiBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZWhcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWVoIgorRHVtcCBhZnRlciBmaW5hbGl6YXRpb24gb2YgXHMtMUVIXHMwIGhhbmRsaW5nIGNvZGUuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZWhfcmFuZ2VzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1laF9yYW5nZXMiCitEdW1wIGFmdGVyIGNvbnZlcnNpb24gb2YgXHMtMUVIXHMwIGhhbmRsaW5nIHJhbmdlIHJlZ2lvbnMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZXhwYW5kXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1leHBhbmQiCitEdW1wIGFmdGVyIFxzLTFSVExcczAgZ2VuZXJhdGlvbi4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1md3Byb3AxXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1md3Byb3AxIgorLlBEIDAKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1md3Byb3AyXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1md3Byb3AyIgorLlBECitcJlxmQlwtZmR1bXBcLXJ0bFwtZndwcm9wMVxmUiBhbmQgXGZCXC1mZHVtcFwtcnRsXC1md3Byb3AyXGZSIGVuYWJsZQorZHVtcGluZyBhZnRlciB0aGUgdHdvIGZvcndhcmQgcHJvcGFnYXRpb24gcGFzc2VzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWdjc2UxXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1nY3NlMSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZ2NzZTJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWdjc2UyIgorLlBECitcJlxmQlwtZmR1bXBcLXJ0bFwtZ2NzZTFcZlIgYW5kIFxmQlwtZmR1bXBcLXJ0bFwtZ2NzZTJcZlIgZW5hYmxlIGR1bXBpbmcKK2FmdGVyIGdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbi4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1pbml0XC1yZWdzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1pbml0LXJlZ3MiCitEdW1wIGFmdGVyIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcmVnaXN0ZXJzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWluaXR2YWxzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1pbml0dmFscyIKK0R1bXAgYWZ0ZXIgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBpbml0aWFsIHZhbHVlIHNldHMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtaW50b19jZmdsYXlvdXRcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWludG9fY2ZnbGF5b3V0IgorRHVtcCBhZnRlciBjb252ZXJ0aW5nIHRvIGNmZ2xheW91dCBtb2RlLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWlyYVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtaXJhIgorRHVtcCBhZnRlciBpdGVyYXRlZCByZWdpc3RlciBhbGxvY2F0aW9uLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWp1bXBcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWp1bXAiCitEdW1wIGFmdGVyIHRoZSBzZWNvbmQganVtcCBvcHRpbWl6YXRpb24uCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtbG9vcDJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWxvb3AyIgorXCZcZkJcLWZkdW1wXC1ydGxcLWxvb3AyXGZSIGVuYWJsZXMgZHVtcGluZyBhZnRlciB0aGUgcnRsCitsb29wIG9wdGltaXphdGlvbiBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtbWFjaFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtbWFjaCIKK0R1bXAgYWZ0ZXIgcGVyZm9ybWluZyB0aGUgbWFjaGluZSBkZXBlbmRlbnQgcmVvcmdhbml6YXRpb24gcGFzcywgaWYgdGhhdAorcGFzcyBleGlzdHMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtbW9kZV9zd1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtbW9kZV9zdyIKK0R1bXAgYWZ0ZXIgcmVtb3ZpbmcgcmVkdW5kYW50IG1vZGUgc3dpdGNoZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtcm5yZWdcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXJucmVnIgorRHVtcCBhZnRlciByZWdpc3RlciByZW51bWJlcmluZy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1vdXRvZl9jZmdsYXlvdXRcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLW91dG9mX2NmZ2xheW91dCIKK0R1bXAgYWZ0ZXIgY29udmVydGluZyBmcm9tIGNmZ2xheW91dCBtb2RlLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXBlZXBob2xlMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtcGVlcGhvbGUyIgorRHVtcCBhZnRlciB0aGUgcGVlcGhvbGUgcGFzcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1wb3N0cmVsb2FkXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1wb3N0cmVsb2FkIgorRHVtcCBhZnRlciBwb3N0LXJlbG9hZCBvcHRpbWl6YXRpb25zLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXByb19hbmRfZXBpbG9ndWVcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXByb19hbmRfZXBpbG9ndWUiCitEdW1wIGFmdGVyIGdlbmVyYXRpbmcgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXJlZ21vdmVcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXJlZ21vdmUiCitEdW1wIGFmdGVyIHRoZSByZWdpc3RlciBtb3ZlIHBhc3MuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc2NoZWQxXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zY2hlZDEiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLXNjaGVkMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc2NoZWQyIgorLlBECitcJlxmQlwtZmR1bXBcLXJ0bFwtc2NoZWQxXGZSIGFuZCBcZkJcLWZkdW1wXC1ydGxcLXNjaGVkMlxmUiBlbmFibGUgZHVtcGluZworYWZ0ZXIgdGhlIGJhc2ljIGJsb2NrIHNjaGVkdWxpbmcgcGFzc2VzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXNlZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc2VlIgorRHVtcCBhZnRlciBzaWduIGV4dGVuc2lvbiBlbGltaW5hdGlvbi4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zZXFhYnN0clxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc2VxYWJzdHIiCitEdW1wIGFmdGVyIGNvbW1vbiBzZXF1ZW5jZSBkaXNjb3ZlcnkuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc2hvcnRlblxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc2hvcnRlbiIKK0R1bXAgYWZ0ZXIgc2hvcnRlbmluZyBicmFuY2hlcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zaWJsaW5nXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zaWJsaW5nIgorRHVtcCBhZnRlciBzaWJsaW5nIGNhbGwgb3B0aW1pemF0aW9ucy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDFcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXNwbGl0MSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc3BsaXQyXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zcGxpdDIiCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc3BsaXQzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zcGxpdDMiCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc3BsaXQ0XGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zcGxpdDQiCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc3BsaXQ1XGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zcGxpdDUiCisuUEQKK1wmXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDFcZlIsIFxmQlwtZmR1bXBcLXJ0bFwtc3BsaXQyXGZSLAorXCZcZkJcLWZkdW1wXC1ydGxcLXNwbGl0M1xmUiwgXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDRcZlIgYW5kCitcJlxmQlwtZmR1bXBcLXJ0bFwtc3BsaXQ1XGZSIGVuYWJsZSBkdW1waW5nIGFmdGVyIGZpdmUgcm91bmRzIG9mCitpbnN0cnVjdGlvbiBzcGxpdHRpbmcuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc21zXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zbXMiCitEdW1wIGFmdGVyIG1vZHVsbyBzY2hlZHVsaW5nLiAgVGhpcyBwYXNzIGlzIG9ubHkgcnVuIG9uIHNvbWUKK2FyY2hpdGVjdHVyZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc3RhY2tcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXN0YWNrIgorRHVtcCBhZnRlciBjb252ZXJzaW9uIGZyb20gXHMtMUdDQ1xzMCdzIFwqKEwiZmxhdCByZWdpc3RlciBmaWxlXCooUiIgcmVnaXN0ZXJzIHRvIHRoZQoreDg3J3Mgc3RhY2stbGlrZSByZWdpc3RlcnMuICBUaGlzIHBhc3MgaXMgb25seSBydW4gb24geDg2IHZhcmlhbnRzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXN1YnJlZzFcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXN1YnJlZzEiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLXN1YnJlZzJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXN1YnJlZzIiCisuUEQKK1wmXGZCXC1mZHVtcFwtcnRsXC1zdWJyZWcxXGZSIGFuZCBcZkJcLWZkdW1wXC1ydGxcLXN1YnJlZzJcZlIgZW5hYmxlIGR1bXBpbmcgYWZ0ZXIKK3RoZSB0d28gc3VicmVnIGV4cGFuc2lvbiBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtdW5zaGFyZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtdW5zaGFyZSIKK0R1bXAgYWZ0ZXIgYWxsIHJ0bCBoYXMgYmVlbiB1bnNoYXJlZC4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC12YXJ0cmFja1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtdmFydHJhY2siCitEdW1wIGFmdGVyIHZhcmlhYmxlIHRyYWNraW5nLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXZyZWdzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC12cmVncyIKK0R1bXAgYWZ0ZXIgY29udmVydGluZyB2aXJ0dWFsIHJlZ2lzdGVycyB0byBoYXJkIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC13ZWJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXdlYiIKK0R1bXAgYWZ0ZXIgbGl2ZSByYW5nZSBzcGxpdHRpbmcuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtcmVnY2xhc3NcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXJlZ2NsYXNzIgorLlBEIDAKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zdWJyZWdzX29mX21vZGVfaW5pdFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc3VicmVnc19vZl9tb2RlX2luaXQiCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc3VicmVnc19vZl9tb2RlX2ZpbmlzaFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc3VicmVnc19vZl9tb2RlX2ZpbmlzaCIKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1kZmluaXRcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWRmaW5pdCIKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1kZmluaXNoXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1kZmluaXNoIgorLlBECitUaGVzZSBkdW1wcyBhcmUgZGVmaW5lZCBidXQgYWx3YXlzIHByb2R1Y2UgZW1wdHkgZmlsZXMuCisuSVAgIlxmQlwtZGFcZlIiIDQKKy5JWCBJdGVtICItZGEiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLWFsbFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtYWxsIgorLlBECitQcm9kdWNlIGFsbCB0aGUgZHVtcHMgbGlzdGVkIGFib3ZlLgorLklQICJcZkJcLWRBXGZSIiA0CisuSVggSXRlbSAiLWRBIgorQW5ub3RhdGUgdGhlIGFzc2VtYmxlciBvdXRwdXQgd2l0aCBtaXNjZWxsYW5lb3VzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKy5JUCAiXGZCXC1kRFxmUiIgNAorLklYIEl0ZW0gIi1kRCIKK0R1bXAgYWxsIG1hY3JvIGRlZmluaXRpb25zLCBhdCB0aGUgZW5kIG9mIHByZXByb2Nlc3NpbmcsIGluIGFkZGl0aW9uIHRvCitub3JtYWwgb3V0cHV0LgorLklQICJcZkJcLWRIXGZSIiA0CisuSVggSXRlbSAiLWRIIgorUHJvZHVjZSBhIGNvcmUgZHVtcCB3aGVuZXZlciBhbiBlcnJvciBvY2N1cnMuCisuSVAgIlxmQlwtZHBcZlIiIDQKKy5JWCBJdGVtICItZHAiCitBbm5vdGF0ZSB0aGUgYXNzZW1ibGVyIG91dHB1dCB3aXRoIGEgY29tbWVudCBpbmRpY2F0aW5nIHdoaWNoCitwYXR0ZXJuIGFuZCBhbHRlcm5hdGl2ZSBpcyB1c2VkLiAgVGhlIGxlbmd0aCBvZiBlYWNoIGluc3RydWN0aW9uIGlzCithbHNvIHByaW50ZWQuCisuSVAgIlxmQlwtZFBcZlIiIDQKKy5JWCBJdGVtICItZFAiCitEdW1wIHRoZSBccy0xUlRMXHMwIGluIHRoZSBhc3NlbWJsZXIgb3V0cHV0IGFzIGEgY29tbWVudCBiZWZvcmUgZWFjaCBpbnN0cnVjdGlvbi4KK0Fsc28gdHVybnMgb24gXGZCXC1kcFxmUiBhbm5vdGF0aW9uLgorLklQICJcZkJcLWR4XGZSIiA0CisuSVggSXRlbSAiLWR4IgorSnVzdCBnZW5lcmF0ZSBccy0xUlRMXHMwIGZvciBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgY29tcGlsaW5nIGl0LiAgVXN1YWxseSB1c2VkCit3aXRoIFxmQlwtZmR1bXBcLXJ0bFwtZXhwYW5kXGZSLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtZmR1bXBcLW5vYWRkclxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ub2FkZHIiCitXaGVuIGRvaW5nIGRlYnVnZ2luZyBkdW1wcywgc3VwcHJlc3MgYWRkcmVzcyBvdXRwdXQuICBUaGlzIG1ha2VzIGl0IG1vcmUKK2ZlYXNpYmxlIHRvIHVzZSBkaWZmIG9uIGRlYnVnZ2luZyBkdW1wcyBmb3IgY29tcGlsZXIgaW52b2NhdGlvbnMgd2l0aAorZGlmZmVyZW50IGNvbXBpbGVyIGJpbmFyaWVzIGFuZC9vciBkaWZmZXJlbnQKK3RleHQgLyBic3MgLyBkYXRhIC8gaGVhcCAvIHN0YWNrIC8gZHNvIHN0YXJ0IGxvY2F0aW9ucy4KKy5JUCAiXGZCXC1mZHVtcFwtdW5udW1iZXJlZFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC11bm51bWJlcmVkIgorV2hlbiBkb2luZyBkZWJ1Z2dpbmcgZHVtcHMsIHN1cHByZXNzIGluc3RydWN0aW9uIG51bWJlcnMgYW5kIGFkZHJlc3Mgb3V0cHV0LgorVGhpcyBtYWtlcyBpdCBtb3JlIGZlYXNpYmxlIHRvIHVzZSBkaWZmIG9uIGRlYnVnZ2luZyBkdW1wcyBmb3IgY29tcGlsZXIKK2ludm9jYXRpb25zIHdpdGggZGlmZmVyZW50IG9wdGlvbnMsIGluIHBhcnRpY3VsYXIgd2l0aCBhbmQgd2l0aG91dAorXCZcZkJcLWdcZlIuCisuSVAgIlxmQlwtZmR1bXBcLXVubnVtYmVyZWRcLWxpbmtzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXVubnVtYmVyZWQtbGlua3MiCitXaGVuIGRvaW5nIGRlYnVnZ2luZyBkdW1wcyAoc2VlIFxmQlwtZFxmUiBvcHRpb24gYWJvdmUpLCBzdXBwcmVzcworaW5zdHJ1Y3Rpb24gbnVtYmVycyBmb3IgdGhlIGxpbmtzIHRvIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBpbnN0cnVjdGlvbnMKK2luIGEgc2VxdWVuY2UuCisuSVAgIlxmQlwtZmR1bXBcLXRyYW5zbGF0aW9uXC11bml0XGZSIChcKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1mZHVtcC10cmFuc2xhdGlvbi11bml0ICggb25seSkiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC10cmFuc2xhdGlvblwtdW5pdFwtXGZSXGZJb3B0aW9uc1xmUlxmQiBcZlIoXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItZmR1bXAtdHJhbnNsYXRpb24tdW5pdC1vcHRpb25zICggb25seSkiCisuUEQKK0R1bXAgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgZm9yIHRoZSBlbnRpcmUgdHJhbnNsYXRpb24KK3VuaXQgdG8gYSBmaWxlLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBcZkkudHVcZlIgdG8gdGhlCitzb3VyY2UgZmlsZSBuYW1lLCBhbmQgdGhlIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCitvdXRwdXQgZmlsZS4gIElmIHRoZSBcZkJcLVxmUlxmSW9wdGlvbnNcZlIgZm9ybSBpcyB1c2VkLCBcZklvcHRpb25zXGZSCitjb250cm9scyB0aGUgZGV0YWlscyBvZiB0aGUgZHVtcCBhcyBkZXNjcmliZWQgZm9yIHRoZQorXCZcZkJcLWZkdW1wXC10cmVlXGZSIG9wdGlvbnMuCisuSVAgIlxmQlwtZmR1bXBcLWNsYXNzXC1oaWVyYXJjaHlcZlIgKFwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLWZkdW1wLWNsYXNzLWhpZXJhcmNoeSAoIG9ubHkpIgorLlBEIDAKKy5JUCAiXGZCXC1mZHVtcFwtY2xhc3NcLWhpZXJhcmNoeVwtXGZSXGZJb3B0aW9uc1xmUlxmQiBcZlIoXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItZmR1bXAtY2xhc3MtaGllcmFyY2h5LW9wdGlvbnMgKCBvbmx5KSIKKy5QRAorRHVtcCBhIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggY2xhc3MncyBoaWVyYXJjaHkgYW5kIHZpcnR1YWwgZnVuY3Rpb24KK3RhYmxlIGxheW91dCB0byBhIGZpbGUuICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nCitcJlxmSS5jbGFzc1xmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZSwgYW5kIHRoZSBmaWxlIGlzIGNyZWF0ZWQgaW4gdGhlCitzYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3V0cHV0IGZpbGUuICBJZiB0aGUgXGZCXC1cZlJcZklvcHRpb25zXGZSIGZvcm0KK2lzIHVzZWQsIFxmSW9wdGlvbnNcZlIgY29udHJvbHMgdGhlIGRldGFpbHMgb2YgdGhlIGR1bXAgYXMgZGVzY3JpYmVkCitmb3IgdGhlIFxmQlwtZmR1bXBcLXRyZWVcZlIgb3B0aW9ucy4KKy5JUCAiXGZCXC1mZHVtcFwtaXBhXC1cZlJcZklzd2l0Y2hcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtaXBhLXN3aXRjaCIKK0NvbnRyb2wgdGhlIGR1bXBpbmcgYXQgdmFyaW91cyBzdGFnZXMgb2YgaW50ZXItcHJvY2VkdXJhbCBhbmFseXNpcworbGFuZ3VhZ2UgdHJlZSB0byBhIGZpbGUuICBUaGUgZmlsZSBuYW1lIGlzIGdlbmVyYXRlZCBieSBhcHBlbmRpbmcgYQorc3dpdGNoIHNwZWNpZmljIHN1ZmZpeCB0byB0aGUgc291cmNlIGZpbGUgbmFtZSwgYW5kIHRoZSBmaWxlIGlzIGNyZWF0ZWQKK2luIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3V0cHV0IGZpbGUuICBUaGUgZm9sbG93aW5nIGR1bXBzIGFyZQorcG9zc2libGU6CisuUlMgNAorLklQICJcZkJhbGxcZlIiIDQKKy5JWCBJdGVtICJhbGwiCitFbmFibGVzIGFsbCBpbnRlci1wcm9jZWR1cmFsIGFuYWx5c2lzIGR1bXBzLgorLklQICJcZkJjZ3JhcGhcZlIiIDQKKy5JWCBJdGVtICJjZ3JhcGgiCitEdW1wcyBpbmZvcm1hdGlvbiBhYm91dCBjYWxsLWdyYXBoIG9wdGltaXphdGlvbiwgdW51c2VkIGZ1bmN0aW9uIHJlbW92YWwsCithbmQgaW5saW5pbmcgZGVjaXNpb25zLgorLklQICJcZkJpbmxpbmVcZlIiIDQKKy5JWCBJdGVtICJpbmxpbmUiCitEdW1wIGFmdGVyIGZ1bmN0aW9uIGlubGluaW5nLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtZmR1bXBcLXBhc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1wYXNzZXMiCitEdW1wIHRoZSBsaXN0IG9mIG9wdGltaXphdGlvbiBwYXNzZXMgdGhhdCBhcmUgdHVybmVkIG9uIGFuZCBvZmYgYnkKK3RoZSBjdXJyZW50IGNvbW1hbmQtbGluZSBvcHRpb25zLgorLklQICJcZkJcLWZkdW1wXC1zdGF0aXN0aWNzXC1cZlJcZklvcHRpb25cZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtc3RhdGlzdGljcy1vcHRpb24iCitFbmFibGUgYW5kIGNvbnRyb2wgZHVtcGluZyBvZiBwYXNzIHN0YXRpc3RpY3MgaW4gYSBzZXBhcmF0ZSBmaWxlLiAgVGhlCitmaWxlIG5hbWUgaXMgZ2VuZXJhdGVkIGJ5IGFwcGVuZGluZyBhIHN1ZmZpeCBlbmRpbmcgaW4KK1wmXGZCLnN0YXRpc3RpY3NcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUsIGFuZCB0aGUgZmlsZSBpcyBjcmVhdGVkIGluCit0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG91dHB1dCBmaWxlLiAgSWYgdGhlIFxmQlwtXGZSXGZJb3B0aW9uXGZSCitmb3JtIGlzIHVzZWQsIFxmQlwtc3RhdHNcZlIgY2F1c2VzIGNvdW50ZXJzIHRvIGJlIHN1bW1lZCBvdmVyIHRoZQord2hvbGUgY29tcGlsYXRpb24gdW5pdCB3aGlsZSBcZkJcLWRldGFpbHNcZlIgZHVtcHMgZXZlcnkgZXZlbnQgYXMKK3RoZSBwYXNzZXMgZ2VuZXJhdGUgdGhlbS4gIFRoZSBkZWZhdWx0IHdpdGggbm8gb3B0aW9uIGlzIHRvIHN1bQorY291bnRlcnMgZm9yIGVhY2ggZnVuY3Rpb24gY29tcGlsZWQuCisuSVAgIlxmQlwtZmR1bXBcLXRyZWVcLVxmUlxmSXN3aXRjaFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC10cmVlLXN3aXRjaCIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXRyZWVcLVxmUlxmSXN3aXRjaFxmUlxmQlwtXGZSXGZJb3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC10cmVlLXN3aXRjaC1vcHRpb25zIgorLklQICJcZkJcLWZkdW1wXC10cmVlXC1cZlJcZklzd2l0Y2hcZlJcZkJcLVxmUlxmSW9wdGlvbnNcZlJcZkI9XGZSXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtdHJlZS1zd2l0Y2gtb3B0aW9ucz1maWxlbmFtZSIKKy5QRAorQ29udHJvbCB0aGUgZHVtcGluZyBhdCB2YXJpb3VzIHN0YWdlcyBvZiBwcm9jZXNzaW5nIHRoZSBpbnRlcm1lZGlhdGUKK2xhbmd1YWdlIHRyZWUgdG8gYSBmaWxlLiAgVGhlIGZpbGUgbmFtZSBpcyBnZW5lcmF0ZWQgYnkgYXBwZW5kaW5nIGEKK3N3aXRjaC1zcGVjaWZpYyBzdWZmaXggdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUsIGFuZCB0aGUgZmlsZSBpcworY3JlYXRlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG91dHB1dCBmaWxlLiBJbiBjYXNlIG9mCitcJlxmQj1cZlJcZklmaWxlbmFtZVxmUiBvcHRpb24sIHRoZSBkdW1wIGlzIG91dHB1dCBvbiB0aGUgZ2l2ZW4gZmlsZQoraW5zdGVhZCBvZiB0aGUgYXV0byBuYW1lZCBkdW1wIGZpbGVzLiAgSWYgdGhlIFxmQlwtXGZSXGZJb3B0aW9uc1xmUgorZm9ybSBpcyB1c2VkLCBcZklvcHRpb25zXGZSIGlzIGEgbGlzdCBvZiBcZkJcLVxmUiBzZXBhcmF0ZWQgb3B0aW9ucword2hpY2ggY29udHJvbCB0aGUgZGV0YWlscyBvZiB0aGUgZHVtcC4gIE5vdCBhbGwgb3B0aW9ucyBhcmUgYXBwbGljYWJsZQordG8gYWxsIGR1bXBzOyB0aG9zZSB0aGF0IGFyZSBub3QgbWVhbmluZ2Z1bCBhcmUgaWdub3JlZC4gIFRoZQorZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZQorLlJTIDQKKy5JUCAiXGZCYWRkcmVzc1xmUiIgNAorLklYIEl0ZW0gImFkZHJlc3MiCitQcmludCB0aGUgYWRkcmVzcyBvZiBlYWNoIG5vZGUuICBVc3VhbGx5IHRoaXMgaXMgbm90IG1lYW5pbmdmdWwgYXMgaXQKK2NoYW5nZXMgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudCBhbmQgc291cmNlIGZpbGUuICBJdHMgcHJpbWFyeSB1c2UKK2lzIGZvciB0eWluZyB1cCBhIGR1bXAgZmlsZSB3aXRoIGEgZGVidWcgZW52aXJvbm1lbnQuCisuSVAgIlxmQmFzbW5hbWVcZlIiIDQKKy5JWCBJdGVtICJhc21uYW1lIgorSWYgXGYoQ1dcKihDYERFQ0xfQVNTRU1CTEVSX05BTUVcKihDJ1xmUiBoYXMgYmVlbiBzZXQgZm9yIGEgZ2l2ZW4gZGVjbCwgdXNlIHRoYXQKK2luIHRoZSBkdW1wIGluc3RlYWQgb2YgXGYoQ1dcKihDYERFQ0xfTkFNRVwqKEMnXGZSLiAgSXRzIHByaW1hcnkgdXNlIGlzIGVhc2Ugb2YKK3VzZSB3b3JraW5nIGJhY2t3YXJkIGZyb20gbWFuZ2xlZCBuYW1lcyBpbiB0aGUgYXNzZW1ibHkgZmlsZS4KKy5JUCAiXGZCc2xpbVxmUiIgNAorLklYIEl0ZW0gInNsaW0iCitXaGVuIGR1bXBpbmcgZnJvbnQtZW5kIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbnMsIGluaGliaXQgZHVtcGluZworb2YgbWVtYmVycyBvZiBhIHNjb3BlIG9yIGJvZHkgb2YgYSBmdW5jdGlvbiBtZXJlbHkgYmVjYXVzZSB0aGF0IHNjb3BlCitoYXMgYmVlbiByZWFjaGVkLiAgT25seSBkdW1wIHN1Y2ggaXRlbXMgd2hlbiB0aGV5IGFyZSBkaXJlY3RseSByZWFjaGFibGUKK2J5IHNvbWUgb3RoZXIgcGF0aC4KKy5TcAorV2hlbiBkdW1waW5nIHByZXR0eS1wcmludGVkIHRyZWVzLCB0aGlzIG9wdGlvbiBpbmhpYml0cyBkdW1waW5nIHRoZQorYm9kaWVzIG9mIGNvbnRyb2wgc3RydWN0dXJlcy4KKy5TcAorV2hlbiBkdW1waW5nIFxzLTFSVExcczAsIHByaW50IHRoZSBccy0xUlRMXHMwIGluIHNsaW0gKGNvbmRlbnNlZCkgZm9ybSBpbnN0ZWFkIG9mCit0aGUgZGVmYXVsdCBMSVNQLWxpa2UgcmVwcmVzZW50YXRpb24uCisuSVAgIlxmQnJhd1xmUiIgNAorLklYIEl0ZW0gInJhdyIKK1ByaW50IGEgcmF3IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmVlLiAgQnkgZGVmYXVsdCwgdHJlZXMgYXJlCitwcmV0dHktcHJpbnRlZCBpbnRvIGEgQ1wtbGlrZSByZXByZXNlbnRhdGlvbi4KKy5JUCAiXGZCZGV0YWlsc1xmUiIgNAorLklYIEl0ZW0gImRldGFpbHMiCitFbmFibGUgbW9yZSBkZXRhaWxlZCBkdW1wcyAobm90IGhvbm9yZWQgYnkgZXZlcnkgZHVtcCBvcHRpb24pLiBBbHNvCitpbmNsdWRlIGluZm9ybWF0aW9uIGZyb20gdGhlIG9wdGltaXphdGlvbiBwYXNzZXMuCisuSVAgIlxmQnN0YXRzXGZSIiA0CisuSVggSXRlbSAic3RhdHMiCitFbmFibGUgZHVtcGluZyB2YXJpb3VzIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHBhc3MgKG5vdCBob25vcmVkIGJ5IGV2ZXJ5IGR1bXAKK29wdGlvbikuCisuSVAgIlxmQmJsb2Nrc1xmUiIgNAorLklYIEl0ZW0gImJsb2NrcyIKK0VuYWJsZSBzaG93aW5nIGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMgKGRpc2FibGVkIGluIHJhdyBkdW1wcykuCisuSVAgIlxmQmdyYXBoXGZSIiA0CisuSVggSXRlbSAiZ3JhcGgiCitGb3IgZWFjaCBvZiB0aGUgb3RoZXIgaW5kaWNhdGVkIGR1bXAgZmlsZXMgKFxmQlwtZmR1bXBcLXJ0bFwtXGZSXGZJcGFzc1xmUiksCitkdW1wIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRyb2wgZmxvdyBncmFwaCBzdWl0YWJsZSBmb3Igdmlld2luZyB3aXRoCitHcmFwaFZpeiB0byBcZklcZklmaWxlXGZJLlxmSXBhc3NpZFxmSS5cZklwYXNzXGZJLmRvdFxmUi4gIEVhY2ggZnVuY3Rpb24gaW4KK3RoZSBmaWxlIGlzIHByZXR0eS1wcmludGVkIGFzIGEgc3ViZ3JhcGgsIHNvIHRoYXQgR3JhcGhWaXogY2FuIHJlbmRlciB0aGVtCithbGwgaW4gYSBzaW5nbGUgcGxvdC4KKy5TcAorVGhpcyBvcHRpb24gY3VycmVudGx5IG9ubHkgd29ya3MgZm9yIFxzLTFSVExcczAgZHVtcHMsIGFuZCB0aGUgXHMtMVJUTFxzMCBpcyBhbHdheXMKK2R1bXBlZCBpbiBzbGltIGZvcm0uCisuSVAgIlxmQnZvcHNcZlIiIDQKKy5JWCBJdGVtICJ2b3BzIgorRW5hYmxlIHNob3dpbmcgdmlydHVhbCBvcGVyYW5kcyBmb3IgZXZlcnkgc3RhdGVtZW50LgorLklQICJcZkJsaW5lbm9cZlIiIDQKKy5JWCBJdGVtICJsaW5lbm8iCitFbmFibGUgc2hvd2luZyBsaW5lIG51bWJlcnMgZm9yIHN0YXRlbWVudHMuCisuSVAgIlxmQnVpZFxmUiIgNAorLklYIEl0ZW0gInVpZCIKK0VuYWJsZSBzaG93aW5nIHRoZSB1bmlxdWUgXHMtMUlEXHMwIChcZihDV1wqKENgREVDTF9VSURcKihDJ1xmUikgZm9yIGVhY2ggdmFyaWFibGUuCisuSVAgIlxmQnZlcmJvc2VcZlIiIDQKKy5JWCBJdGVtICJ2ZXJib3NlIgorRW5hYmxlIHNob3dpbmcgdGhlIHRyZWUgZHVtcCBmb3IgZWFjaCBzdGF0ZW1lbnQuCisuSVAgIlxmQmVoXGZSIiA0CisuSVggSXRlbSAiZWgiCitFbmFibGUgc2hvd2luZyB0aGUgXHMtMUVIXHMwIHJlZ2lvbiBudW1iZXIgaG9sZGluZyBlYWNoIHN0YXRlbWVudC4KKy5JUCAiXGZCc2NldlxmUiIgNAorLklYIEl0ZW0gInNjZXYiCitFbmFibGUgc2hvd2luZyBzY2FsYXIgZXZvbHV0aW9uIGFuYWx5c2lzIGRldGFpbHMuCisuSVAgIlxmQm9wdGltaXplZFxmUiIgNAorLklYIEl0ZW0gIm9wdGltaXplZCIKK0VuYWJsZSBzaG93aW5nIG9wdGltaXphdGlvbiBpbmZvcm1hdGlvbiAob25seSBhdmFpbGFibGUgaW4gY2VydGFpbgorcGFzc2VzKS4KKy5JUCAiXGZCbWlzc2VkXGZSIiA0CisuSVggSXRlbSAibWlzc2VkIgorRW5hYmxlIHNob3dpbmcgbWlzc2VkIG9wdGltaXphdGlvbiBpbmZvcm1hdGlvbiAob25seSBhdmFpbGFibGUgaW4gY2VydGFpbgorcGFzc2VzKS4KKy5JUCAiXGZCbm90ZXNcZlIiIDQKKy5JWCBJdGVtICJub3RlcyIKK0VuYWJsZSBvdGhlciBkZXRhaWxlZCBvcHRpbWl6YXRpb24gaW5mb3JtYXRpb24gKG9ubHkgYXZhaWxhYmxlIGluCitjZXJ0YWluIHBhc3NlcykuCisuSVAgIlxmQj1cZlJcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIj1maWxlbmFtZSIKK0luc3RlYWQgb2YgYW4gYXV0byBuYW1lZCBkdW1wIGZpbGUsIG91dHB1dCBpbnRvIHRoZSBnaXZlbiBmaWxlCituYW1lLiBUaGUgZmlsZSBuYW1lcyBcZklzdGRvdXRcZlIgYW5kIFxmSXN0ZGVyclxmUiBhcmUgdHJlYXRlZAorc3BlY2lhbGx5IGFuZCBhcmUgY29uc2lkZXJlZCBhbHJlYWR5IG9wZW4gc3RhbmRhcmQgc3RyZWFtcy4gRm9yCitleGFtcGxlLAorLlNwCisuVmIgMgorXCYgICAgICAgIGdjYyBcLU8yIFwtZnRyZWVcLXZlY3Rvcml6ZSBcLWZkdW1wXC10cmVlXC12ZWN0XC1ibG9ja3M9Zm9vLmR1bXAKK1wmICAgICAgICAgICAgIFwtZmR1bXBcLXRyZWVcLXByZT1zdGRlcnIgZmlsZS5jCisuVmUKKy5TcAorb3V0cHV0cyB2ZWN0b3JpemVyIGR1bXAgaW50byBcZklmb28uZHVtcFxmUiwgd2hpbGUgdGhlIFxzLTFQUkVcczAgZHVtcCBpcworb3V0cHV0IG9uIHRvIFxmSXN0ZGVyclxmUi4gSWYgdHdvIGNvbmZsaWN0aW5nIGR1bXAgZmlsZW5hbWVzIGFyZQorZ2l2ZW4gZm9yIHRoZSBzYW1lIHBhc3MsIHRoZW4gdGhlIGxhdHRlciBvcHRpb24gb3ZlcnJpZGVzIHRoZSBlYXJsaWVyCitvbmUuCisuSVAgIlxmQmFsbFxmUiIgNAorLklYIEl0ZW0gImFsbCIKK1R1cm4gb24gYWxsIG9wdGlvbnMsIGV4Y2VwdCBcZkJyYXdcZlIsIFxmQnNsaW1cZlIsIFxmQnZlcmJvc2VcZlIKK2FuZCBcZkJsaW5lbm9cZlIuCisuSVAgIlxmQm9wdGFsbFxmUiIgNAorLklYIEl0ZW0gIm9wdGFsbCIKK1R1cm4gb24gYWxsIG9wdGltaXphdGlvbiBvcHRpb25zLCBpLmUuLCBcZkJvcHRpbWl6ZWRcZlIsCitcJlxmQm1pc3NlZFxmUiwgYW5kIFxmQm5vdGVcZlIuCisuUkUKKy5SUyA0CisuU3AKK1RoZSBmb2xsb3dpbmcgdHJlZSBkdW1wcyBhcmUgcG9zc2libGU6CisuSVAgIlxmQm9yaWdpbmFsXGZSIiA0CisuSVggSXRlbSAib3JpZ2luYWwiCitEdW1wIGJlZm9yZSBhbnkgdHJlZSBiYXNlZCBvcHRpbWl6YXRpb24sIHRvIFxmSVxmSWZpbGVcZkkub3JpZ2luYWxcZlIuCisuSVAgIlxmQm9wdGltaXplZFxmUiIgNAorLklYIEl0ZW0gIm9wdGltaXplZCIKK0R1bXAgYWZ0ZXIgYWxsIHRyZWUgYmFzZWQgb3B0aW1pemF0aW9uLCB0byBcZklcZklmaWxlXGZJLm9wdGltaXplZFxmUi4KKy5JUCAiXGZCZ2ltcGxlXGZSIiA0CisuSVggSXRlbSAiZ2ltcGxlIgorRHVtcCBlYWNoIGZ1bmN0aW9uIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGdpbXBsaWZpY2F0aW9uIHBhc3MgdG8gYSBmaWxlLiAgVGhlCitmaWxlIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgXGZJLmdpbXBsZVxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCY2ZnXGZSIiA0CisuSVggSXRlbSAiY2ZnIgorRHVtcCB0aGUgY29udHJvbCBmbG93IGdyYXBoIG9mIGVhY2ggZnVuY3Rpb24gdG8gYSBmaWxlLiAgVGhlIGZpbGUgbmFtZSBpcworbWFkZSBieSBhcHBlbmRpbmcgXGZJLmNmZ1xmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCY2hcZlIiIDQKKy5JWCBJdGVtICJjaCIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBjb3B5aW5nIGxvb3AgaGVhZGVycy4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZSBieQorYXBwZW5kaW5nIFxmSS5jaFxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCc3NhXGZSIiA0CisuSVggSXRlbSAic3NhIgorRHVtcCBccy0xU1NBXHMwIHJlbGF0ZWQgaW5mb3JtYXRpb24gdG8gYSBmaWxlLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZworXCZcZkkuc3NhXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJhbGlhc1xmUiIgNAorLklYIEl0ZW0gImFsaWFzIgorRHVtcCBhbGlhc2luZyBpbmZvcm1hdGlvbiBmb3IgZWFjaCBmdW5jdGlvbi4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZSBieQorYXBwZW5kaW5nIFxmSS5hbGlhc1xmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCY2NwXGZSIiA0CisuSVggSXRlbSAiY2NwIgorRHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIFxzLTFDQ1BcczAuICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nCitcJlxmSS5jY3BcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQnN0b3JlY2NwXGZSIiA0CisuSVggSXRlbSAic3RvcmVjY3AiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgU1RPUkUtQ0NQLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZworXCZcZkkuc3RvcmVjY3BcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQnByZVxmUiIgNAorLklYIEl0ZW0gInByZSIKK0R1bXAgdHJlZXMgYWZ0ZXIgcGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlCitieSBhcHBlbmRpbmcgXGZJLnByZVxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCZnJlXGZSIiA0CisuSVggSXRlbSAiZnJlIgorRHVtcCB0cmVlcyBhZnRlciBmdWxsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24uICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUKK2J5IGFwcGVuZGluZyBcZkkuZnJlXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJjb3B5cHJvcFxmUiIgNAorLklYIEl0ZW0gImNvcHlwcm9wIgorRHVtcCB0cmVlcyBhZnRlciBjb3B5IHByb3BhZ2F0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlCitieSBhcHBlbmRpbmcgXGZJLmNvcHlwcm9wXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJzdG9yZV9jb3B5cHJvcFxmUiIgNAorLklYIEl0ZW0gInN0b3JlX2NvcHlwcm9wIgorRHVtcCB0cmVlcyBhZnRlciBzdG9yZSBjb3B5LXByb3BhZ2F0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlCitieSBhcHBlbmRpbmcgXGZJLnN0b3JlX2NvcHlwcm9wXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJkY2VcZlIiIDQKKy5JWCBJdGVtICJkY2UiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgZGVhZCBjb2RlIGVsaW1pbmF0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5CithcHBlbmRpbmcgXGZJLmRjZVxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCbXVkZmxhcFxmUiIgNAorLklYIEl0ZW0gIm11ZGZsYXAiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgYWRkaW5nIG11ZGZsYXAgaW5zdHJ1bWVudGF0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcworbWFkZSBieSBhcHBlbmRpbmcgXGZJLm11ZGZsYXBcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQnNyYVxmUiIgNAorLklYIEl0ZW0gInNyYSIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBwZXJmb3JtaW5nIHNjYWxhciByZXBsYWNlbWVudCBvZiBhZ2dyZWdhdGVzLiAgVGhlCitmaWxlIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgXGZJLnNyYVxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCc2lua1xmUiIgNAorLklYIEl0ZW0gInNpbmsiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgcGVyZm9ybWluZyBjb2RlIHNpbmtpbmcuICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUKK2J5IGFwcGVuZGluZyBcZkkuc2lua1xmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCZG9tXGZSIiA0CisuSVggSXRlbSAiZG9tIgorRHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIGFwcGx5aW5nIGRvbWluYXRvciB0cmVlIG9wdGltaXphdGlvbnMuICBUaGUgZmlsZQorbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBcZkkuZG9tXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJkc2VcZlIiIDQKKy5JWCBJdGVtICJkc2UiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgYXBwbHlpbmcgZGVhZCBzdG9yZSBlbGltaW5hdGlvbi4gIFRoZSBmaWxlCituYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS5kc2VcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQnBoaW9wdFxmUiIgNAorLklYIEl0ZW0gInBoaW9wdCIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBvcHRpbWl6aW5nIFxzLTFQSElcczAgbm9kZXMgaW50byBzdHJhaWdodGxpbmUgY29kZS4gIFRoZSBmaWxlCituYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS5waGlvcHRcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQmZvcndwcm9wXGZSIiA0CisuSVggSXRlbSAiZm9yd3Byb3AiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgZm9yd2FyZCBwcm9wYWdhdGluZyBzaW5nbGUgdXNlIHZhcmlhYmxlcy4gIFRoZSBmaWxlCituYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS5mb3J3cHJvcFxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCY29weXJlbmFtZVxmUiIgNAorLklYIEl0ZW0gImNvcHlyZW5hbWUiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgYXBwbHlpbmcgdGhlIGNvcHkgcmVuYW1lIG9wdGltaXphdGlvbi4gIFRoZSBmaWxlCituYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS5jb3B5cmVuYW1lXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJucnZcZlIiIDQKKy5JWCBJdGVtICJucnYiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgYXBwbHlpbmcgdGhlIG5hbWVkIHJldHVybiB2YWx1ZSBvcHRpbWl6YXRpb24gb24KK2dlbmVyaWMgdHJlZXMuICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS5ucnZcZlIgdG8gdGhlIHNvdXJjZQorZmlsZSBuYW1lLgorLklQICJcZkJ2ZWN0XGZSIiA0CisuSVggSXRlbSAidmVjdCIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyB2ZWN0b3JpemF0aW9uIG9mIGxvb3BzLiAgVGhlIGZpbGUgbmFtZSBpcworbWFkZSBieSBhcHBlbmRpbmcgXGZJLnZlY3RcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQnNscFxmUiIgNAorLklYIEl0ZW0gInNscCIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyB2ZWN0b3JpemF0aW9uIG9mIGJhc2ljIGJsb2Nrcy4gIFRoZSBmaWxlIG5hbWUKK2lzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS5zbHBcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQnZycFxmUiIgNAorLklYIEl0ZW0gInZycCIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBWYWx1ZSBSYW5nZSBQcm9wYWdhdGlvbiAoXHMtMVZSUFxzMCkuICBUaGUgZmlsZSBuYW1lCitpcyBtYWRlIGJ5IGFwcGVuZGluZyBcZkkudnJwXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJhbGxcZlIiIDQKKy5JWCBJdGVtICJhbGwiCitFbmFibGUgYWxsIHRoZSBhdmFpbGFibGUgdHJlZSBkdW1wcyB3aXRoIHRoZSBmbGFncyBwcm92aWRlZCBpbiB0aGlzIG9wdGlvbi4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLWZvcHRcLWluZm9cZlIiIDQKKy5JWCBJdGVtICItZm9wdC1pbmZvIgorLlBEIDAKKy5JUCAiXGZCXC1mb3B0XC1pbmZvXC1cZlJcZklvcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLWZvcHQtaW5mby1vcHRpb25zIgorLklQICJcZkJcLWZvcHRcLWluZm9cLVxmUlxmSW9wdGlvbnNcZlJcZkI9XGZSXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItZm9wdC1pbmZvLW9wdGlvbnM9ZmlsZW5hbWUiCisuUEQKK0NvbnRyb2xzIG9wdGltaXphdGlvbiBkdW1wcyBmcm9tIHZhcmlvdXMgb3B0aW1pemF0aW9uIHBhc3Nlcy4gSWYgdGhlCitcJlxmQlwtXGZSXGZJb3B0aW9uc1xmUiBmb3JtIGlzIHVzZWQsIFxmSW9wdGlvbnNcZlIgaXMgYSBsaXN0IG9mCitcJlxmQlwtXGZSIHNlcGFyYXRlZCBvcHRpb25zIHRvIHNlbGVjdCB0aGUgZHVtcCBkZXRhaWxzIGFuZAorb3B0aW1pemF0aW9ucy4gIElmIFxmSW9wdGlvbnNcZlIgaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8KK1wmXGZCYWxsXGZSIGZvciBkZXRhaWxzIGFuZCBcZkJvcHRhbGxcZlIgZm9yIG9wdGltaXphdGlvbgorZ3JvdXBzLiBJZiB0aGUgXGZJZmlsZW5hbWVcZlIgaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8KK1wmXGZJc3RkZXJyXGZSLiBOb3RlIHRoYXQgdGhlIG91dHB1dCBcZklmaWxlbmFtZVxmUiB3aWxsIGJlIG92ZXJ3cml0dGVuCitpbiBjYXNlIG9mIG11bHRpcGxlIHRyYW5zbGF0aW9uIHVuaXRzLiBJZiBhIGNvbWJpbmVkIG91dHB1dCBmcm9tCittdWx0aXBsZSB0cmFuc2xhdGlvbiB1bml0cyBpcyBkZXNpcmVkLCBcZklzdGRlcnJcZlIgc2hvdWxkIGJlIHVzZWQKK2luc3RlYWQuCisuU3AKK1RoZSBvcHRpb25zIGNhbiBiZSBkaXZpZGVkIGludG8gdHdvIGdyb3VwcywgMSkgb3B0aW9ucyBkZXNjcmliaW5nIHRoZQordmVyYm9zaXR5IG9mIHRoZSBkdW1wLCBhbmQgMikgb3B0aW9ucyBkZXNjcmliaW5nIHdoaWNoIG9wdGltaXphdGlvbnMKK3Nob3VsZCBiZSBpbmNsdWRlZC4gVGhlIG9wdGlvbnMgZnJvbSBib3RoIHRoZSBncm91cHMgY2FuIGJlIGZyZWVseQorbWl4ZWQgYXMgdGhleSBhcmUgbm9uLW92ZXJsYXBwaW5nLiBIb3dldmVyLCBpbiBjYXNlIG9mIGFueSBjb25mbGljdHMsCit0aGUgbGF0dGVyIG9wdGlvbnMgb3ZlcnJpZGUgdGhlIGVhcmxpZXIgb3B0aW9ucyBvbiB0aGUgY29tbWFuZAorbGluZS4gVGhvdWdoIG11bHRpcGxlIFwtZm9wdFwtaW5mbyBvcHRpb25zIGFyZSBhY2NlcHRlZCwgb25seSBvbmUgb2YKK3RoZW0gY2FuIGhhdmUgXGZCPWZpbGVuYW1lXGZSLiBJZiBvdGhlciBmaWxlbmFtZXMgYXJlIHByb3ZpZGVkIHRoZW4KK2FsbCBidXQgdGhlIGZpcnN0IG9uZSBhcmUgaWdub3JlZC4KKy5TcAorVGhlIGR1bXAgdmVyYm9zaXR5IGhhcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMKKy5SUyA0CisuSVAgIlxmQm9wdGltaXplZFxmUiIgNAorLklYIEl0ZW0gIm9wdGltaXplZCIKK1ByaW50IGluZm9ybWF0aW9uIHdoZW4gYW4gb3B0aW1pemF0aW9uIGlzIHN1Y2Nlc3NmdWxseSBhcHBsaWVkLiBJdCBpcwordXAgdG8gYSBwYXNzIHRvIGRlY2lkZSB3aGljaCBpbmZvcm1hdGlvbiBpcyByZWxldmFudC4gRm9yIGV4YW1wbGUsIHRoZQordmVjdG9yaXplciBwYXNzZXMgcHJpbnQgdGhlIHNvdXJjZSBsb2NhdGlvbiBvZiBsb29wcyB3aGljaCBnb3QKK3N1Y2Nlc3NmdWxseSB2ZWN0b3JpemVkLgorLklQICJcZkJtaXNzZWRcZlIiIDQKKy5JWCBJdGVtICJtaXNzZWQiCitQcmludCBpbmZvcm1hdGlvbiBhYm91dCBtaXNzZWQgb3B0aW1pemF0aW9ucy4gSW5kaXZpZHVhbCBwYXNzZXMKK2NvbnRyb2wgd2hpY2ggaW5mb3JtYXRpb24gdG8gaW5jbHVkZSBpbiB0aGUgb3V0cHV0LiBGb3IgZXhhbXBsZSwKKy5TcAorLlZiIDEKK1wmICAgICAgICBnY2MgXC1PMiBcLWZ0cmVlXC12ZWN0b3JpemUgXC1mb3B0XC1pbmZvXC12ZWNcLW1pc3NlZAorLlZlCisuU3AKK3dpbGwgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgbWlzc2VkIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGZyb20KK3ZlY3Rvcml6YXRpb24gcGFzc2VzIG9uIHN0ZGVyci4KKy5JUCAiXGZCbm90ZVxmUiIgNAorLklYIEl0ZW0gIm5vdGUiCitQcmludCB2ZXJib3NlIGluZm9ybWF0aW9uIGFib3V0IG9wdGltaXphdGlvbnMsIHN1Y2ggYXMgY2VydGFpbgordHJhbnNmb3JtYXRpb25zLCBtb3JlIGRldGFpbGVkIG1lc3NhZ2VzIGFib3V0IGRlY2lzaW9ucyBldGMuCisuSVAgIlxmQmFsbFxmUiIgNAorLklYIEl0ZW0gImFsbCIKK1ByaW50IGRldGFpbGVkIG9wdGltaXphdGlvbiBpbmZvcm1hdGlvbi4gVGhpcyBpbmNsdWRlcworXCZcZklvcHRpbWl6ZWRcZlIsIFxmSW1pc3NlZFxmUiwgYW5kIFxmSW5vdGVcZlIuCisuUkUKKy5SUyA0CisuU3AKK1RoZSBzZWNvbmQgc2V0IG9mIG9wdGlvbnMgZGVzY3JpYmVzIGEgZ3JvdXAgb2Ygb3B0aW1pemF0aW9ucyBhbmQgbWF5CitpbmNsdWRlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcuCisuSVAgIlxmQmlwYVxmUiIgNAorLklYIEl0ZW0gImlwYSIKK0VuYWJsZSBkdW1wcyBmcm9tIGFsbCBpbnRlcnByb2NlZHVyYWwgb3B0aW1pemF0aW9ucy4KKy5JUCAiXGZCbG9vcFxmUiIgNAorLklYIEl0ZW0gImxvb3AiCitFbmFibGUgZHVtcHMgZnJvbSBhbGwgbG9vcCBvcHRpbWl6YXRpb25zLgorLklQICJcZkJpbmxpbmVcZlIiIDQKKy5JWCBJdGVtICJpbmxpbmUiCitFbmFibGUgZHVtcHMgZnJvbSBhbGwgaW5saW5pbmcgb3B0aW1pemF0aW9ucy4KKy5JUCAiXGZCdmVjXGZSIiA0CisuSVggSXRlbSAidmVjIgorRW5hYmxlIGR1bXBzIGZyb20gYWxsIHZlY3Rvcml6YXRpb24gb3B0aW1pemF0aW9ucy4KKy5SRQorLlJTIDQKKy5TcAorRm9yIGV4YW1wbGUsCisuU3AKKy5WYiAxCitcJiAgICAgICAgZ2NjIFwtTzMgXC1mb3B0XC1pbmZvXC1taXNzZWQ9bWlzc2VkLmFsbAorLlZlCisuU3AKK291dHB1dHMgbWlzc2VkIG9wdGltaXphdGlvbiByZXBvcnQgZnJvbSBhbGwgdGhlIHBhc3NlcyBpbnRvCitcJlxmSW1pc3NlZC5hbGxcZlIuCisuU3AKK0FzIGFub3RoZXIgZXhhbXBsZSwKKy5TcAorLlZiIDEKK1wmICAgICAgICBnY2MgXC1PMyBcLWZvcHRcLWluZm9cLWlubGluZVwtb3B0aW1pemVkXC1taXNzZWQ9aW5saW5lLnR4dAorLlZlCisuU3AKK3dpbGwgb3V0cHV0IGluZm9ybWF0aW9uIGFib3V0IG1pc3NlZCBvcHRpbWl6YXRpb25zIGFzIHdlbGwgYXMKK29wdGltaXplZCBsb2NhdGlvbnMgZnJvbSBhbGwgdGhlIGlubGluaW5nIHBhc3NlcyBpbnRvCitcJlxmSWlubGluZS50eHRcZlIuCisuU3AKK0lmIHRoZSBcZklmaWxlbmFtZVxmUiBpcyBwcm92aWRlZCwgdGhlbiB0aGUgZHVtcHMgZnJvbSBhbGwgdGhlCithcHBsaWNhYmxlIG9wdGltaXphdGlvbnMgYXJlIGNvbmNhdGVuYXRlZCBpbnRvIHRoZSBcZklmaWxlbmFtZVxmUi4KK090aGVyd2lzZSB0aGUgZHVtcCBpcyBvdXRwdXQgb250byBcZklzdGRlcnJcZlIuIElmIFxmSW9wdGlvbnNcZlIgaXMKK29taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIFxmQmFsbC1vcHRhbGxcZlIsIHdoaWNoIG1lYW5zIGR1bXAgYWxsCithdmFpbGFibGUgb3B0aW1pemF0aW9uIGluZm8gZnJvbSBhbGwgdGhlIHBhc3Nlcy4gSW4gdGhlIGZvbGxvd2luZworZXhhbXBsZSwgYWxsIG9wdGltaXphdGlvbiBpbmZvIGlzIG91dHB1dCBvbiB0byBcZklzdGRlcnJcZlIuCisuU3AKKy5WYiAxCitcJiAgICAgICAgZ2NjIFwtTzMgXC1mb3B0XC1pbmZvCisuVmUKKy5TcAorTm90ZSB0aGF0IFxmQlwtZm9wdFwtaW5mb1wtdmVjXC1taXNzZWRcZlIgYmVoYXZlcyB0aGUgc2FtZSBhcworXCZcZkJcLWZvcHRcLWluZm9cLW1pc3NlZFwtdmVjXGZSLgorLlNwCitBcyBhbm90aGVyIGV4YW1wbGUsIGNvbnNpZGVyCisuU3AKKy5WYiAxCitcJiAgICAgICAgZ2NjIFwtZm9wdFwtaW5mb1wtdmVjXC1taXNzZWQ9dmVjLm1pc3MgXC1mb3B0XC1pbmZvXC1sb29wXC1vcHRpbWl6ZWQ9bG9vcC5vcHQKKy5WZQorLlNwCitIZXJlIHRoZSB0d28gb3V0cHV0IGZpbGVuYW1lcyBcZkl2ZWMubWlzc1xmUiBhbmQgXGZJbG9vcC5vcHRcZlIgYXJlCitpbiBjb25mbGljdCBzaW5jZSBvbmx5IG9uZSBvdXRwdXQgZmlsZSBpcyBhbGxvd2VkLiBJbiB0aGlzIGNhc2UsIG9ubHkKK3RoZSBmaXJzdCBvcHRpb24gdGFrZXMgZWZmZWN0IGFuZCB0aGUgc3Vic2VxdWVudCBvcHRpb25zIGFyZQoraWdub3JlZC4gVGh1cyBvbmx5IHRoZSBcZkl2ZWMubWlzc1xmUiBpcyBwcm9kdWNlZCB3aGljaCBjb3RhaW50cworZHVtcHMgZnJvbSB0aGUgdmVjdG9yaXplciBhYm91dCBtaXNzZWQgb3Bwb3J0dW5pdGllcy4KKy5SRQorLklQICJcZkJcLWZ0cmVlXC12ZWN0b3JpemVyXC12ZXJib3NlPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtdmVjdG9yaXplci12ZXJib3NlPW4iCitUaGlzIG9wdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZgorXCZcZkJcLWZvcHRcLWluZm9cZlIuIFBsZWFzZSB1c2UgXGZCXC1mb3B0XC1pbmZvXC1cZlJcZklraW5kXGZSIGZvcm0KK2luc3RlYWQsIHdoZXJlIFxmSWtpbmRcZlIgaXMgb25lIG9mIHRoZSB2YWxpZCBvcHQtaW5mbyBvcHRpb25zLiBJdAorcHJpbnRzIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uLiAgRm9yIFxmSW5cZlI9MCBubworZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZC4gIElmIFxmSW5cZlI9MSB0aGUgdmVjdG9yaXplcgorcmVwb3J0cyBlYWNoIGxvb3AgdGhhdCBnb3QgdmVjdG9yaXplZCwgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgbG9vcHMKK3RoYXQgZ290IHZlY3Rvcml6ZWQuICBJZiBcZkluXGZSPTIgdGhlIHZlY3Rvcml6ZXIgcmVwb3J0cyBsb2NhdGlvbnMKK3doaWNoIGNvdWxkIG5vdCBiZSB2ZWN0b3JpemVkIGFuZCB0aGUgcmVhc29ucyBmb3IgdGhvc2UuIEZvciBhbnkKK2hpZ2hlciB2ZXJib3NpdHkgbGV2ZWxzIGFsbCB0aGUgYW5hbHlzaXMgYW5kIHRyYW5zZm9ybWF0aW9uCitpbmZvcm1hdGlvbiBmcm9tIHRoZSB2ZWN0b3JpemVyIGlzIHJlcG9ydGVkLgorLlNwCitOb3RlIHRoYXQgdGhlIGluZm9ybWF0aW9uIG91dHB1dCBieSBcZkJcLWZ0cmVlXC12ZWN0b3JpemVyXC12ZXJib3NlXGZSCitvcHRpb24gaXMgc2VudCB0byBcZklzdGRlcnJcZlIuIElmIHRoZSBlcXVpdmFsZW50IGZvcm0KK1wmXGZCXC1mb3B0XC1pbmZvXC1cZlJcZklvcHRpb25zXGZSXGZCPVxmUlxmSWZpbGVuYW1lXGZSIGlzIHVzZWQgdGhlbiB0aGUKK291dHB1dCBpcyBzZW50IGludG8gXGZJZmlsZW5hbWVcZlIgaW5zdGVhZC4KKy5JUCAiXGZCXC1mcmFuZG9tXC1zZWVkPVxmUlxmSXN0cmluZ1xmUiIgNAorLklYIEl0ZW0gIi1mcmFuZG9tLXNlZWQ9c3RyaW5nIgorVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBzZWVkIHRoYXQgXHMtMUdDQ1xzMCB1c2VzIGluIHBsYWNlIG9mCityYW5kb20gbnVtYmVycyBpbiBnZW5lcmF0aW5nIGNlcnRhaW4gc3ltYm9sIG5hbWVzCit0aGF0IGhhdmUgdG8gYmUgZGlmZmVyZW50IGluIGV2ZXJ5IGNvbXBpbGVkIGZpbGUuICBJdCBpcyBhbHNvIHVzZWQgdG8KK3BsYWNlIHVuaXF1ZSBzdGFtcHMgaW4gY292ZXJhZ2UgZGF0YSBmaWxlcyBhbmQgdGhlIG9iamVjdCBmaWxlcyB0aGF0Citwcm9kdWNlIHRoZW0uICBZb3UgY2FuIHVzZSB0aGUgXGZCXC1mcmFuZG9tXC1zZWVkXGZSIG9wdGlvbiB0byBwcm9kdWNlCityZXByb2R1Y2libHkgaWRlbnRpY2FsIG9iamVjdCBmaWxlcy4KKy5TcAorVGhlIFxmSXN0cmluZ1xmUiBzaG91bGQgYmUgZGlmZmVyZW50IGZvciBldmVyeSBmaWxlIHlvdSBjb21waWxlLgorLklQICJcZkJcLWZzY2hlZFwtdmVyYm9zZT1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC12ZXJib3NlPW4iCitPbiB0YXJnZXRzIHRoYXQgdXNlIGluc3RydWN0aW9uIHNjaGVkdWxpbmcsIHRoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZQorYW1vdW50IG9mIGRlYnVnZ2luZyBvdXRwdXQgdGhlIHNjaGVkdWxlciBwcmludHMuICBUaGlzIGluZm9ybWF0aW9uIGlzCit3cml0dGVuIHRvIHN0YW5kYXJkIGVycm9yLCB1bmxlc3MgXGZCXC1mZHVtcFwtcnRsXC1zY2hlZDFcZlIgb3IKK1wmXGZCXC1mZHVtcFwtcnRsXC1zY2hlZDJcZlIgaXMgc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IGlzIG91dHB1dAordG8gdGhlIHVzdWFsIGR1bXAgbGlzdGluZyBmaWxlLCBcZkkuc2NoZWQxXGZSIG9yIFxmSS5zY2hlZDJcZlIKK3Jlc3BlY3RpdmVseS4gIEhvd2V2ZXIgZm9yIFxmSW5cZlIgZ3JlYXRlciB0aGFuIG5pbmUsIHRoZSBvdXRwdXQgaXMKK2Fsd2F5cyBwcmludGVkIHRvIHN0YW5kYXJkIGVycm9yLgorLlNwCitGb3IgXGZJblxmUiBncmVhdGVyIHRoYW4gemVybywgXGZCXC1mc2NoZWRcLXZlcmJvc2VcZlIgb3V0cHV0cyB0aGUKK3NhbWUgaW5mb3JtYXRpb24gYXMgXGZCXC1mZHVtcFwtcnRsXC1zY2hlZDFcZlIgYW5kIFxmQlwtZmR1bXBcLXJ0bFwtc2NoZWQyXGZSLgorRm9yIFxmSW5cZlIgZ3JlYXRlciB0aGFuIG9uZSwgaXQgYWxzbyBvdXRwdXQgYmFzaWMgYmxvY2sgcHJvYmFiaWxpdGllcywKK2RldGFpbGVkIHJlYWR5IGxpc3QgaW5mb3JtYXRpb24gYW5kIHVuaXQvaW5zbiBpbmZvLiAgRm9yIFxmSW5cZlIgZ3JlYXRlcgordGhhbiB0d28sIGl0IGluY2x1ZGVzIFxzLTFSVExcczAgYXQgYWJvcnQgcG9pbnQsIGNvbnRyb2wtZmxvdyBhbmQgcmVnaW9ucyBpbmZvLgorQW5kIGZvciBcZkluXGZSIG92ZXIgZm91ciwgXGZCXC1mc2NoZWRcLXZlcmJvc2VcZlIgYWxzbyBpbmNsdWRlcworZGVwZW5kZW5jZSBpbmZvLgorLklQICJcZkJcLXNhdmVcLXRlbXBzXGZSIiA0CisuSVggSXRlbSAiLXNhdmUtdGVtcHMiCisuUEQgMAorLklQICJcZkJcLXNhdmVcLXRlbXBzPWN3ZFxmUiIgNAorLklYIEl0ZW0gIi1zYXZlLXRlbXBzPWN3ZCIKKy5QRAorU3RvcmUgdGhlIHVzdWFsIFwqKEwidGVtcG9yYXJ5XCooUiIgaW50ZXJtZWRpYXRlIGZpbGVzIHBlcm1hbmVudGx5OyBwbGFjZSB0aGVtCitpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIG5hbWUgdGhlbSBiYXNlZCBvbiB0aGUgc291cmNlIGZpbGUuICBUaHVzLAorY29tcGlsaW5nIFxmSWZvby5jXGZSIHdpdGggXGZCXC1jIFwtc2F2ZVwtdGVtcHNcZlIgcHJvZHVjZXMgZmlsZXMKK1wmXGZJZm9vLmlcZlIgYW5kIFxmSWZvby5zXGZSLCBhcyB3ZWxsIGFzIFxmSWZvby5vXGZSLiAgVGhpcyBjcmVhdGVzIGEKK3ByZXByb2Nlc3NlZCBcZklmb28uaVxmUiBvdXRwdXQgZmlsZSBldmVuIHRob3VnaCB0aGUgY29tcGlsZXIgbm93Citub3JtYWxseSB1c2VzIGFuIGludGVncmF0ZWQgcHJlcHJvY2Vzc29yLgorLlNwCitXaGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgXGZCXC14XGZSIGNvbW1hbmQtbGluZSBvcHRpb24sCitcJlxmQlwtc2F2ZVwtdGVtcHNcZlIgaXMgc2Vuc2libGUgZW5vdWdoIHRvIGF2b2lkIG92ZXIgd3JpdGluZyBhbgoraW5wdXQgc291cmNlIGZpbGUgd2l0aCB0aGUgc2FtZSBleHRlbnNpb24gYXMgYW4gaW50ZXJtZWRpYXRlIGZpbGUuCitUaGUgY29ycmVzcG9uZGluZyBpbnRlcm1lZGlhdGUgZmlsZSBtYXkgYmUgb2J0YWluZWQgYnkgcmVuYW1pbmcgdGhlCitzb3VyY2UgZmlsZSBiZWZvcmUgdXNpbmcgXGZCXC1zYXZlXC10ZW1wc1xmUi4KKy5TcAorSWYgeW91IGludm9rZSBccy0xR0NDXHMwIGluIHBhcmFsbGVsLCBjb21waWxpbmcgc2V2ZXJhbCBkaWZmZXJlbnQgc291cmNlCitmaWxlcyB0aGF0IHNoYXJlIGEgY29tbW9uIGJhc2UgbmFtZSBpbiBkaWZmZXJlbnQgc3ViZGlyZWN0b3JpZXMgb3IgdGhlCitzYW1lIHNvdXJjZSBmaWxlIGNvbXBpbGVkIGZvciBtdWx0aXBsZSBvdXRwdXQgZGVzdGluYXRpb25zLCBpdCBpcworbGlrZWx5IHRoYXQgdGhlIGRpZmZlcmVudCBwYXJhbGxlbCBjb21waWxlcnMgd2lsbCBpbnRlcmZlcmUgd2l0aCBlYWNoCitvdGhlciwgYW5kIG92ZXJ3cml0ZSB0aGUgdGVtcG9yYXJ5IGZpbGVzLiAgRm9yIGluc3RhbmNlOgorLlNwCisuVmIgMgorXCYgICAgICAgIGdjYyBcLXNhdmVcLXRlbXBzIFwtbyBvdXRkaXIxL2Zvby5vIGluZGlyMS9mb28uYyYKK1wmICAgICAgICBnY2MgXC1zYXZlXC10ZW1wcyBcLW8gb3V0ZGlyMi9mb28ubyBpbmRpcjIvZm9vLmMmCisuVmUKKy5TcAorbWF5IHJlc3VsdCBpbiBcZklmb28uaVxmUiBhbmQgXGZJZm9vLm9cZlIgYmVpbmcgd3JpdHRlbiB0bworc2ltdWx0YW5lb3VzbHkgYnkgYm90aCBjb21waWxlcnMuCisuSVAgIlxmQlwtc2F2ZVwtdGVtcHM9b2JqXGZSIiA0CisuSVggSXRlbSAiLXNhdmUtdGVtcHM9b2JqIgorU3RvcmUgdGhlIHVzdWFsIFwqKEwidGVtcG9yYXJ5XCooUiIgaW50ZXJtZWRpYXRlIGZpbGVzIHBlcm1hbmVudGx5LiAgSWYgdGhlCitcJlxmQlwtb1xmUiBvcHRpb24gaXMgdXNlZCwgdGhlIHRlbXBvcmFyeSBmaWxlcyBhcmUgYmFzZWQgb24gdGhlCitvYmplY3QgZmlsZS4gIElmIHRoZSBcZkJcLW9cZlIgb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGUKK1wmXGZCXC1zYXZlXC10ZW1wcz1vYmpcZlIgc3dpdGNoIGJlaGF2ZXMgbGlrZSBcZkJcLXNhdmVcLXRlbXBzXGZSLgorLlNwCitGb3IgZXhhbXBsZToKKy5TcAorLlZiIDMKK1wmICAgICAgICBnY2MgXC1zYXZlXC10ZW1wcz1vYmogXC1jIGZvby5jCitcJiAgICAgICAgZ2NjIFwtc2F2ZVwtdGVtcHM9b2JqIFwtYyBiYXIuYyBcLW8gZGlyL3hiYXIubworXCYgICAgICAgIGdjYyBcLXNhdmVcLXRlbXBzPW9iaiBmb29iYXIuYyBcLW8gZGlyMi95Zm9vYmFyCisuVmUKKy5TcAorY3JlYXRlcyBcZklmb28uaVxmUiwgXGZJZm9vLnNcZlIsIFxmSWRpci94YmFyLmlcZlIsCitcJlxmSWRpci94YmFyLnNcZlIsIFxmSWRpcjIveWZvb2Jhci5pXGZSLCBcZklkaXIyL3lmb29iYXIuc1xmUiwgYW5kCitcJlxmSWRpcjIveWZvb2Jhci5vXGZSLgorLklQICJcZkJcLXRpbWVcZlJbXGZCPVxmUlxmSWZpbGVcZlJdIiA0CisuSVggSXRlbSAiLXRpbWVbPWZpbGVdIgorUmVwb3J0IHRoZSBccy0xQ1BVXHMwIHRpbWUgdGFrZW4gYnkgZWFjaCBzdWJwcm9jZXNzIGluIHRoZSBjb21waWxhdGlvbgorc2VxdWVuY2UuICBGb3IgQyBzb3VyY2UgZmlsZXMsIHRoaXMgaXMgdGhlIGNvbXBpbGVyIHByb3BlciBhbmQgYXNzZW1ibGVyCisocGx1cyB0aGUgbGlua2VyIGlmIGxpbmtpbmcgaXMgZG9uZSkuCisuU3AKK1dpdGhvdXQgdGhlIHNwZWNpZmljYXRpb24gb2YgYW4gb3V0cHV0IGZpbGUsIHRoZSBvdXRwdXQgbG9va3MgbGlrZSB0aGlzOgorLlNwCisuVmIgMgorXCYgICAgICAgICMgY2MxIDAuMTIgMC4wMQorXCYgICAgICAgICMgYXMgMC4wMCAwLjAxCisuVmUKKy5TcAorVGhlIGZpcnN0IG51bWJlciBvbiBlYWNoIGxpbmUgaXMgdGhlIFwqKEwidXNlciB0aW1lXCooUiIsIHRoYXQgaXMgdGltZSBzcGVudAorZXhlY3V0aW5nIHRoZSBwcm9ncmFtIGl0c2VsZi4gIFRoZSBzZWNvbmQgbnVtYmVyIGlzIFwqKEwic3lzdGVtIHRpbWVcKihSIiwKK3RpbWUgc3BlbnQgZXhlY3V0aW5nIG9wZXJhdGluZyBzeXN0ZW0gcm91dGluZXMgb24gYmVoYWxmIG9mIHRoZSBwcm9ncmFtLgorQm90aCBudW1iZXJzIGFyZSBpbiBzZWNvbmRzLgorLlNwCitXaXRoIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFuIG91dHB1dCBmaWxlLCB0aGUgb3V0cHV0IGlzIGFwcGVuZGVkIHRvIHRoZQorbmFtZWQgZmlsZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhpczoKKy5TcAorLlZiIDIKK1wmICAgICAgICAwLjEyIDAuMDEgY2MxIDxvcHRpb25zPgorXCYgICAgICAgIDAuMDAgMC4wMSBhcyA8b3B0aW9ucz4KKy5WZQorLlNwCitUaGUgXCooTCJ1c2VyIHRpbWVcKihSIiBhbmQgdGhlIFwqKEwic3lzdGVtIHRpbWVcKihSIiBhcmUgbW92ZWQgYmVmb3JlIHRoZSBwcm9ncmFtCituYW1lLCBhbmQgdGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBwcm9ncmFtIGFyZSBkaXNwbGF5ZWQsIHNvIHRoYXQgb25lCitjYW4gbGF0ZXIgdGVsbCB3aGF0IGZpbGUgd2FzIGJlaW5nIGNvbXBpbGVkLCBhbmQgd2l0aCB3aGljaCBvcHRpb25zLgorLklQICJcZkJcLWZ2YXJcLXRyYWNraW5nXGZSIiA0CisuSVggSXRlbSAiLWZ2YXItdHJhY2tpbmciCitSdW4gdmFyaWFibGUgdHJhY2tpbmcgcGFzcy4gIEl0IGNvbXB1dGVzIHdoZXJlIHZhcmlhYmxlcyBhcmUgc3RvcmVkIGF0IGVhY2gKK3Bvc2l0aW9uIGluIGNvZGUuICBCZXR0ZXIgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIHRoZW4gZ2VuZXJhdGVkCisoaWYgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3JtYXQgc3VwcG9ydHMgdGhpcyBpbmZvcm1hdGlvbikuCisuU3AKK0l0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGNvbXBpbGluZyB3aXRoIG9wdGltaXphdGlvbiAoXGZCXC1Pc1xmUiwKK1wmXGZCXC1PXGZSLCBcZkJcLU8yXGZSLCAuLi4pLCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gKFxmQlwtZ1xmUikgYW5kCit0aGUgZGVidWcgaW5mbyBmb3JtYXQgc3VwcG9ydHMgaXQuCisuSVAgIlxmQlwtZnZhclwtdHJhY2tpbmdcLWFzc2lnbm1lbnRzXGZSIiA0CisuSVggSXRlbSAiLWZ2YXItdHJhY2tpbmctYXNzaWdubWVudHMiCitBbm5vdGF0ZSBhc3NpZ25tZW50cyB0byB1c2VyIHZhcmlhYmxlcyBlYXJseSBpbiB0aGUgY29tcGlsYXRpb24gYW5kCithdHRlbXB0IHRvIGNhcnJ5IHRoZSBhbm5vdGF0aW9ucyBvdmVyIHRocm91Z2hvdXQgdGhlIGNvbXBpbGF0aW9uIGFsbCB0aGUKK3dheSB0byB0aGUgZW5kLCBpbiBhbiBhdHRlbXB0IHRvIGltcHJvdmUgZGVidWcgaW5mb3JtYXRpb24gd2hpbGUKK29wdGltaXppbmcuICBVc2Ugb2YgXGZCXC1nZHdhcmZcLTRcZlIgaXMgcmVjb21tZW5kZWQgYWxvbmcgd2l0aCBpdC4KKy5TcAorSXQgY2FuIGJlIGVuYWJsZWQgZXZlbiBpZiB2YXItdHJhY2tpbmcgaXMgZGlzYWJsZWQsIGluIHdoaWNoIGNhc2UKK2Fubm90YXRpb25zIGFyZSBjcmVhdGVkIGFuZCBtYWludGFpbmVkLCBidXQgZGlzY2FyZGVkIGF0IHRoZSBlbmQuCisuSVAgIlxmQlwtZnZhclwtdHJhY2tpbmdcLWFzc2lnbm1lbnRzXC10b2dnbGVcZlIiIDQKKy5JWCBJdGVtICItZnZhci10cmFja2luZy1hc3NpZ25tZW50cy10b2dnbGUiCitUb2dnbGUgXGZCXC1mdmFyXC10cmFja2luZ1wtYXNzaWdubWVudHNcZlIsIGluIHRoZSBzYW1lIHdheSB0aGF0CitcJlxmQlwtZ3RvZ2dsZVxmUiB0b2dnbGVzIFxmQlwtZ1xmUi4KKy5JUCAiXGZCXC1wcmludFwtZmlsZVwtbmFtZT1cZlJcZklsaWJyYXJ5XGZSIiA0CisuSVggSXRlbSAiLXByaW50LWZpbGUtbmFtZT1saWJyYXJ5IgorUHJpbnQgdGhlIGZ1bGwgYWJzb2x1dGUgbmFtZSBvZiB0aGUgbGlicmFyeSBmaWxlIFxmSWxpYnJhcnlcZlIgdGhhdAord291bGQgYmUgdXNlZCB3aGVuIGxpbmtpbmdcLVwtXC1hbmQgZG9uJ3QgZG8gYW55dGhpbmcgZWxzZS4gIFdpdGggdGhpcworb3B0aW9uLCBccy0xR0NDXHMwIGRvZXMgbm90IGNvbXBpbGUgb3IgbGluayBhbnl0aGluZzsgaXQganVzdCBwcmludHMgdGhlCitmaWxlIG5hbWUuCisuSVAgIlxmQlwtcHJpbnRcLW11bHRpXC1kaXJlY3RvcnlcZlIiIDQKKy5JWCBJdGVtICItcHJpbnQtbXVsdGktZGlyZWN0b3J5IgorUHJpbnQgdGhlIGRpcmVjdG9yeSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG11bHRpbGliIHNlbGVjdGVkIGJ5IGFueQorb3RoZXIgc3dpdGNoZXMgcHJlc2VudCBpbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBkaXJlY3RvcnkgaXMgc3VwcG9zZWQKK3RvIGV4aXN0IGluIFxmQlxzLTFHQ0NfRVhFQ19QUkVGSVhcczBcZlIuCisuSVAgIlxmQlwtcHJpbnRcLW11bHRpXC1saWJcZlIiIDQKKy5JWCBJdGVtICItcHJpbnQtbXVsdGktbGliIgorUHJpbnQgdGhlIG1hcHBpbmcgZnJvbSBtdWx0aWxpYiBkaXJlY3RvcnkgbmFtZXMgdG8gY29tcGlsZXIgc3dpdGNoZXMKK3RoYXQgZW5hYmxlIHRoZW0uICBUaGUgZGlyZWN0b3J5IG5hbWUgaXMgc2VwYXJhdGVkIGZyb20gdGhlIHN3aXRjaGVzIGJ5CitcJlxmQjtcZlIsIGFuZCBlYWNoIHN3aXRjaCBzdGFydHMgd2l0aCBhbiBcZkJAXGZSIGluc3RlYWQgb2YgdGhlCitcJlxmQlwtXGZSLCB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuIG11bHRpcGxlIHN3aXRjaGVzLiAgVGhpcyBpcyBzdXBwb3NlZCB0bworZWFzZSBzaGVsbCBwcm9jZXNzaW5nLgorLklQICJcZkJcLXByaW50XC1tdWx0aVwtb3NcLWRpcmVjdG9yeVxmUiIgNAorLklYIEl0ZW0gIi1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkiCitQcmludCB0aGUgcGF0aCB0byBccy0xT1NcczAgbGlicmFyaWVzIGZvciB0aGUgc2VsZWN0ZWQKK211bHRpbGliLCByZWxhdGl2ZSB0byBzb21lIFxmSWxpYlxmUiBzdWJkaXJlY3RvcnkuICBJZiBccy0xT1NcczAgbGlicmFyaWVzIGFyZQorcHJlc2VudCBpbiB0aGUgXGZJbGliXGZSIHN1YmRpcmVjdG9yeSBhbmQgbm8gbXVsdGlsaWJzIGFyZSB1c2VkLCB0aGlzIGlzCit1c3VhbGx5IGp1c3QgXGZJLlxmUiwgaWYgXHMtMU9TXHMwIGxpYnJhcmllcyBhcmUgcHJlc2VudCBpbiBcZklsaWJcZklzdWZmaXhcZklcZlIKK3NpYmxpbmcgZGlyZWN0b3JpZXMgdGhpcyBwcmludHMgZS5nLiBcZkkuLi9saWI2NFxmUiwgXGZJLi4vbGliXGZSIG9yCitcJlxmSS4uL2xpYjMyXGZSLCBvciBpZiBccy0xT1NcczAgbGlicmFyaWVzIGFyZSBwcmVzZW50IGluIFxmSWxpYi9cZklzdWJkaXJcZklcZlIKK3N1YmRpcmVjdG9yaWVzIGl0IHByaW50cyBlLmcuIFxmSWFtZDY0XGZSLCBcZklzcGFyY3Y5XGZSIG9yIFxmSWV2NlxmUi4KKy5JUCAiXGZCXC1wcmludFwtbXVsdGlhcmNoXGZSIiA0CisuSVggSXRlbSAiLXByaW50LW11bHRpYXJjaCIKK1ByaW50IHRoZSBwYXRoIHRvIFxzLTFPU1xzMCBsaWJyYXJpZXMgZm9yIHRoZSBzZWxlY3RlZCBtdWx0aWFyY2gsCityZWxhdGl2ZSB0byBzb21lIFxmSWxpYlxmUiBzdWJkaXJlY3RvcnkuCisuSVAgIlxmQlwtcHJpbnRcLXByb2dcLW5hbWU9XGZSXGZJcHJvZ3JhbVxmUiIgNAorLklYIEl0ZW0gIi1wcmludC1wcm9nLW5hbWU9cHJvZ3JhbSIKK0xpa2UgXGZCXC1wcmludFwtZmlsZVwtbmFtZVxmUiwgYnV0IHNlYXJjaGVzIGZvciBhIHByb2dyYW0gc3VjaCBhcyBcZkJjcHBcZlIuCisuSVAgIlxmQlwtcHJpbnRcLWxpYmdjY1wtZmlsZVwtbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1wcmludC1saWJnY2MtZmlsZS1uYW1lIgorU2FtZSBhcyBcZkJcLXByaW50XC1maWxlXC1uYW1lPWxpYmdjYy5hXGZSLgorLlNwCitUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB1c2UgXGZCXC1ub3N0ZGxpYlxmUiBvciBcZkJcLW5vZGVmYXVsdGxpYnNcZlIKK2J1dCB5b3UgZG8gd2FudCB0byBsaW5rIHdpdGggXGZJbGliZ2NjLmFcZlIuICBZb3UgY2FuIGRvOgorLlNwCisuVmIgMQorXCYgICAgICAgIGdjYyBcLW5vc3RkbGliIDxmaWxlcz4uLi4gXGBnY2MgXC1wcmludFwtbGliZ2NjXC1maWxlXC1uYW1lXGAKKy5WZQorLklQICJcZkJcLXByaW50XC1zZWFyY2hcLWRpcnNcZlIiIDQKKy5JWCBJdGVtICItcHJpbnQtc2VhcmNoLWRpcnMiCitQcmludCB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJlZCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGFuZCBhIGxpc3Qgb2YKK3Byb2dyYW0gYW5kIGxpYnJhcnkgZGlyZWN0b3JpZXMgXGZCZ2NjXGZSIHNlYXJjaGVzXC1cLVwtYW5kIGRvbid0IGRvIGFueXRoaW5nIGVsc2UuCisuU3AKK1RoaXMgaXMgdXNlZnVsIHdoZW4gXGZCZ2NjXGZSIHByaW50cyB0aGUgZXJyb3IgbWVzc2FnZQorXCZcZkJpbnN0YWxsYXRpb24gcHJvYmxlbSwgY2Fubm90IGV4ZWMgY3BwMDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxmUi4KK1RvIHJlc29sdmUgdGhpcyB5b3UgZWl0aGVyIG5lZWQgdG8gcHV0IFxmSWNwcDBcZlIgYW5kIHRoZSBvdGhlciBjb21waWxlcgorY29tcG9uZW50cyB3aGVyZSBcZkJnY2NcZlIgZXhwZWN0cyB0byBmaW5kIHRoZW0sIG9yIHlvdSBjYW4gc2V0IHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgXGZCXHMtMUdDQ19FWEVDX1BSRUZJWFxzMFxmUiB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBpbnN0YWxsZWQgdGhlbS4KK0Rvbid0IGZvcmdldCB0aGUgdHJhaWxpbmcgXGZCL1xmUi4KKy5JUCAiXGZCXC1wcmludFwtc3lzcm9vdFxmUiIgNAorLklYIEl0ZW0gIi1wcmludC1zeXNyb290IgorUHJpbnQgdGhlIHRhcmdldCBzeXNyb290IGRpcmVjdG9yeSB0aGF0IGlzIHVzZWQgZHVyaW5nCitjb21waWxhdGlvbi4gIFRoaXMgaXMgdGhlIHRhcmdldCBzeXNyb290IHNwZWNpZmllZCBlaXRoZXIgYXQgY29uZmlndXJlCit0aW1lIG9yIHVzaW5nIHRoZSBcZkJcLVwtc3lzcm9vdFxmUiBvcHRpb24sIHBvc3NpYmx5IHdpdGggYW4gZXh0cmEKK3N1ZmZpeCB0aGF0IGRlcGVuZHMgb24gY29tcGlsYXRpb24gb3B0aW9ucy4gIElmIG5vIHRhcmdldCBzeXNyb290IGlzCitzcGVjaWZpZWQsIHRoZSBvcHRpb24gcHJpbnRzIG5vdGhpbmcuCisuSVAgIlxmQlwtcHJpbnRcLXN5c3Jvb3RcLWhlYWRlcnNcLXN1ZmZpeFxmUiIgNAorLklYIEl0ZW0gIi1wcmludC1zeXNyb290LWhlYWRlcnMtc3VmZml4IgorUHJpbnQgdGhlIHN1ZmZpeCBhZGRlZCB0byB0aGUgdGFyZ2V0IHN5c3Jvb3Qgd2hlbiBzZWFyY2hpbmcgZm9yCitoZWFkZXJzLCBvciBnaXZlIGFuIGVycm9yIGlmIHRoZSBjb21waWxlciBpcyBub3QgY29uZmlndXJlZCB3aXRoIHN1Y2gKK2Egc3VmZml4XC1cLVwtYW5kIGRvbid0IGRvIGFueXRoaW5nIGVsc2UuCisuSVAgIlxmQlwtZHVtcG1hY2hpbmVcZlIiIDQKKy5JWCBJdGVtICItZHVtcG1hY2hpbmUiCitQcmludCB0aGUgY29tcGlsZXIncyB0YXJnZXQgbWFjaGluZSAoZm9yIGV4YW1wbGUsCitcJlxmQmk2ODZcLXBjXC1saW51eFwtZ251XGZSKVwtXC1cLWFuZCBkb24ndCBkbyBhbnl0aGluZyBlbHNlLgorLklQICJcZkJcLWR1bXB2ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLWR1bXB2ZXJzaW9uIgorUHJpbnQgdGhlIGNvbXBpbGVyIHZlcnNpb24gKGZvciBleGFtcGxlLCBcZkIzLjBcZlIpXC1cLVwtYW5kIGRvbid0IGRvCithbnl0aGluZyBlbHNlLgorLklQICJcZkJcLWR1bXBzcGVjc1xmUiIgNAorLklYIEl0ZW0gIi1kdW1wc3BlY3MiCitQcmludCB0aGUgY29tcGlsZXIncyBidWlsdC1pbiBzcGVjc1wtXC1cLWFuZCBkb24ndCBkbyBhbnl0aGluZyBlbHNlLiAgKFRoaXMKK2lzIHVzZWQgd2hlbiBccy0xR0NDXHMwIGl0c2VsZiBpcyBiZWluZyBidWlsdC4pCisuSVAgIlxmQlwtZm5vXC1lbGltaW5hdGVcLXVudXNlZFwtZGVidWdcLXR5cGVzXGZSIiA0CisuSVggSXRlbSAiLWZuby1lbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIgorTm9ybWFsbHksIHdoZW4gcHJvZHVjaW5nIFxzLTFEV0FSRlxzMCAyIG91dHB1dCwgXHMtMUdDQ1xzMCBhdm9pZHMgcHJvZHVjaW5nIGRlYnVnIHN5bWJvbCAKK291dHB1dCBmb3IgdHlwZXMgdGhhdCBhcmUgbm93aGVyZSB1c2VkIGluIHRoZSBzb3VyY2UgZmlsZSBiZWluZyBjb21waWxlZC4KK1NvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gaGF2ZSBccy0xR0NDXHMwIGVtaXQgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBmb3IgYWxsIHR5cGVzIGRlY2xhcmVkIGluIGEgY29tcGlsYXRpb24KK3VuaXQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhleSBhcmUgYWN0dWFsbHkgdXNlZAoraW4gdGhhdCBjb21waWxhdGlvbiB1bml0LCBmb3IgZXhhbXBsZSAKK2lmLCBpbiB0aGUgZGVidWdnZXIsIHlvdSB3YW50IHRvIGNhc3QgYSB2YWx1ZSB0byBhIHR5cGUgdGhhdCBpcworbm90IGFjdHVhbGx5IHVzZWQgaW4geW91ciBwcm9ncmFtIChidXQgaXMgZGVjbGFyZWQpLiAgTW9yZSBvZnRlbiwKK2hvd2V2ZXIsIHRoaXMgcmVzdWx0cyBpbiBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB3YXN0ZWQgc3BhY2UuCisuU1MgIk9wdGlvbnMgVGhhdCBDb250cm9sIE9wdGltaXphdGlvbiIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIFRoYXQgQ29udHJvbCBPcHRpbWl6YXRpb24iCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgdmFyaW91cyBzb3J0cyBvZiBvcHRpbWl6YXRpb25zLgorLlBQCitXaXRob3V0IGFueSBvcHRpbWl6YXRpb24gb3B0aW9uLCB0aGUgY29tcGlsZXIncyBnb2FsIGlzIHRvIHJlZHVjZSB0aGUKK2Nvc3Qgb2YgY29tcGlsYXRpb24gYW5kIHRvIG1ha2UgZGVidWdnaW5nIHByb2R1Y2UgdGhlIGV4cGVjdGVkCityZXN1bHRzLiAgU3RhdGVtZW50cyBhcmUgaW5kZXBlbmRlbnQ6IGlmIHlvdSBzdG9wIHRoZSBwcm9ncmFtIHdpdGggYQorYnJlYWtwb2ludCBiZXR3ZWVuIHN0YXRlbWVudHMsIHlvdSBjYW4gdGhlbiBhc3NpZ24gYSBuZXcgdmFsdWUgdG8gYW55Cit2YXJpYWJsZSBvciBjaGFuZ2UgdGhlIHByb2dyYW0gY291bnRlciB0byBhbnkgb3RoZXIgc3RhdGVtZW50IGluIHRoZQorZnVuY3Rpb24gYW5kIGdldCBleGFjdGx5IHRoZSByZXN1bHRzIHlvdSBleHBlY3QgZnJvbSB0aGUgc291cmNlCitjb2RlLgorLlBQCitUdXJuaW5nIG9uIG9wdGltaXphdGlvbiBmbGFncyBtYWtlcyB0aGUgY29tcGlsZXIgYXR0ZW1wdCB0byBpbXByb3ZlCit0aGUgcGVyZm9ybWFuY2UgYW5kL29yIGNvZGUgc2l6ZSBhdCB0aGUgZXhwZW5zZSBvZiBjb21waWxhdGlvbiB0aW1lCithbmQgcG9zc2libHkgdGhlIGFiaWxpdHkgdG8gZGVidWcgdGhlIHByb2dyYW0uCisuUFAKK1RoZSBjb21waWxlciBwZXJmb3JtcyBvcHRpbWl6YXRpb24gYmFzZWQgb24gdGhlIGtub3dsZWRnZSBpdCBoYXMgb2YgdGhlCitwcm9ncmFtLiAgQ29tcGlsaW5nIG11bHRpcGxlIGZpbGVzIGF0IG9uY2UgdG8gYSBzaW5nbGUgb3V0cHV0IGZpbGUgbW9kZSBhbGxvd3MKK3RoZSBjb21waWxlciB0byB1c2UgaW5mb3JtYXRpb24gZ2FpbmVkIGZyb20gYWxsIG9mIHRoZSBmaWxlcyB3aGVuIGNvbXBpbGluZworZWFjaCBvZiB0aGVtLgorLlBQCitOb3QgYWxsIG9wdGltaXphdGlvbnMgYXJlIGNvbnRyb2xsZWQgZGlyZWN0bHkgYnkgYSBmbGFnLiAgT25seQorb3B0aW1pemF0aW9ucyB0aGF0IGhhdmUgYSBmbGFnIGFyZSBsaXN0ZWQgaW4gdGhpcyBzZWN0aW9uLgorLlBQCitNb3N0IG9wdGltaXphdGlvbnMgYXJlIG9ubHkgZW5hYmxlZCBpZiBhbiBcZkJcLU9cZlIgbGV2ZWwgaXMgc2V0IG9uCit0aGUgY29tbWFuZCBsaW5lLiAgT3RoZXJ3aXNlIHRoZXkgYXJlIGRpc2FibGVkLCBldmVuIGlmIGluZGl2aWR1YWwKK29wdGltaXphdGlvbiBmbGFncyBhcmUgc3BlY2lmaWVkLgorLlBQCitEZXBlbmRpbmcgb24gdGhlIHRhcmdldCBhbmQgaG93IFxzLTFHQ0NcczAgd2FzIGNvbmZpZ3VyZWQsIGEgc2xpZ2h0bHkgZGlmZmVyZW50CitzZXQgb2Ygb3B0aW1pemF0aW9ucyBtYXkgYmUgZW5hYmxlZCBhdCBlYWNoIFxmQlwtT1xmUiBsZXZlbCB0aGFuCit0aG9zZSBsaXN0ZWQgaGVyZS4gIFlvdSBjYW4gaW52b2tlIFxzLTFHQ0NcczAgd2l0aCBcZkJcLVEgXC1cLWhlbHA9b3B0aW1pemVyc1xmUgordG8gZmluZCBvdXQgdGhlIGV4YWN0IHNldCBvZiBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIGVuYWJsZWQgYXQgZWFjaCBsZXZlbC4KKy5JUCAiXGZCXC1PXGZSIiA0CisuSVggSXRlbSAiLU8iCisuUEQgMAorLklQICJcZkJcLU8xXGZSIiA0CisuSVggSXRlbSAiLU8xIgorLlBECitPcHRpbWl6ZS4gIE9wdGltaXppbmcgY29tcGlsYXRpb24gdGFrZXMgc29tZXdoYXQgbW9yZSB0aW1lLCBhbmQgYSBsb3QKK21vcmUgbWVtb3J5IGZvciBhIGxhcmdlIGZ1bmN0aW9uLgorLlNwCitXaXRoIFxmQlwtT1xmUiwgdGhlIGNvbXBpbGVyIHRyaWVzIHRvIHJlZHVjZSBjb2RlIHNpemUgYW5kIGV4ZWN1dGlvbgordGltZSwgd2l0aG91dCBwZXJmb3JtaW5nIGFueSBvcHRpbWl6YXRpb25zIHRoYXQgdGFrZSBhIGdyZWF0IGRlYWwgb2YKK2NvbXBpbGF0aW9uIHRpbWUuCisuU3AKK1wmXGZCXC1PXGZSIHR1cm5zIG9uIHRoZSBmb2xsb3dpbmcgb3B0aW1pemF0aW9uIGZsYWdzOgorLlNwCitcJlxmQlwtZmF1dG9cLWluY1wtZGVjIAorXCZcLWZjb21wYXJlXC1lbGltIAorXCZcLWZjcHJvcFwtcmVnaXN0ZXJzIAorXCZcLWZkY2UgCitcJlwtZmRlZmVyXC1wb3AgCitcJlwtZmRlbGF5ZWRcLWJyYW5jaCAKK1wmXC1mZHNlIAorXCZcLWZndWVzc1wtYnJhbmNoXC1wcm9iYWJpbGl0eSAKK1wmXC1maWZcLWNvbnZlcnNpb24yIAorXCZcLWZpZlwtY29udmVyc2lvbiAKK1wmXC1maXBhXC1wdXJlXC1jb25zdCAKK1wmXC1maXBhXC1wcm9maWxlIAorXCZcLWZpcGFcLXJlZmVyZW5jZSAKK1wmXC1mbWVyZ2VcLWNvbnN0YW50cworXCZcLWZzcGxpdFwtd2lkZVwtdHlwZXMgCitcJlwtZnRyZWVcLWJpdFwtY2NwIAorXCZcLWZ0cmVlXC1idWlsdGluXC1jYWxsXC1kY2UgCitcJlwtZnRyZWVcLWNjcCAKK1wmXC1mdHJlZVwtY2ggCitcJlwtZnRyZWVcLWNvcHlyZW5hbWUgCitcJlwtZnRyZWVcLWRjZSAKK1wmXC1mdHJlZVwtZG9taW5hdG9yXC1vcHRzIAorXCZcLWZ0cmVlXC1kc2UgCitcJlwtZnRyZWVcLWZvcndwcm9wIAorXCZcLWZ0cmVlXC1mcmUgCitcJlwtZnRyZWVcLXBoaXByb3AgCitcJlwtZnRyZWVcLXNsc3IgCitcJlwtZnRyZWVcLXNyYSAKK1wmXC1mdHJlZVwtcHRhIAorXCZcLWZ0cmVlXC10ZXIgCitcJlwtZnVuaXRcLWF0XC1hXC10aW1lXGZSCisuU3AKK1wmXGZCXC1PXGZSIGFsc28gdHVybnMgb24gXGZCXC1mb21pdFwtZnJhbWVcLXBvaW50ZXJcZlIgb24gbWFjaGluZXMKK3doZXJlIGRvaW5nIHNvIGRvZXMgbm90IGludGVyZmVyZSB3aXRoIGRlYnVnZ2luZy4KKy5JUCAiXGZCXC1PMlxmUiIgNAorLklYIEl0ZW0gIi1PMiIKK09wdGltaXplIGV2ZW4gbW9yZS4gIFxzLTFHQ0NcczAgcGVyZm9ybXMgbmVhcmx5IGFsbCBzdXBwb3J0ZWQgb3B0aW1pemF0aW9ucwordGhhdCBkbyBub3QgaW52b2x2ZSBhIHNwYWNlLXNwZWVkIHRyYWRlb2ZmLgorQXMgY29tcGFyZWQgdG8gXGZCXC1PXGZSLCB0aGlzIG9wdGlvbiBpbmNyZWFzZXMgYm90aCBjb21waWxhdGlvbiB0aW1lCithbmQgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZS4KKy5TcAorXCZcZkJcLU8yXGZSIHR1cm5zIG9uIGFsbCBvcHRpbWl6YXRpb24gZmxhZ3Mgc3BlY2lmaWVkIGJ5IFxmQlwtT1xmUi4gIEl0CithbHNvIHR1cm5zIG9uIHRoZSBmb2xsb3dpbmcgb3B0aW1pemF0aW9uIGZsYWdzOgorXCZcZkJcLWZ0aHJlYWRcLWp1bXBzIAorXCZcLWZhbGlnblwtZnVuY3Rpb25zICBcLWZhbGlnblwtanVtcHMgCitcJlwtZmFsaWduXC1sb29wcyAgXC1mYWxpZ25cLWxhYmVscyAKK1wmXC1mY2FsbGVyXC1zYXZlcyAKK1wmXC1mY3Jvc3NqdW1waW5nIAorXCZcLWZjc2VcLWZvbGxvd1wtanVtcHMgIFwtZmNzZVwtc2tpcFwtYmxvY2tzIAorXCZcLWZkZWxldGVcLW51bGxcLXBvaW50ZXJcLWNoZWNrcyAKK1wmXC1mZGV2aXJ0dWFsaXplIAorXCZcLWZleHBlbnNpdmVcLW9wdGltaXphdGlvbnMgCitcJlwtZmdjc2UgIFwtZmdjc2VcLWxtICAKK1wmXC1maG9pc3RcLWFkamFjZW50XC1sb2FkcyAKK1wmXC1maW5saW5lXC1zbWFsbFwtZnVuY3Rpb25zIAorXCZcLWZpbmRpcmVjdFwtaW5saW5pbmcgCitcJlwtZmlwYVwtc3JhIAorXCZcLWZvcHRpbWl6ZVwtc2libGluZ1wtY2FsbHMgCitcJlwtZnBhcnRpYWxcLWlubGluaW5nIAorXCZcLWZwZWVwaG9sZTIgCitcJlwtZnJlZ21vdmUgCitcJlwtZnJlb3JkZXJcLWJsb2NrcyAgXC1mcmVvcmRlclwtZnVuY3Rpb25zIAorXCZcLWZyZXJ1blwtY3NlXC1hZnRlclwtbG9vcCAgCitcJlwtZnNjaGVkXC1pbnRlcmJsb2NrICBcLWZzY2hlZFwtc3BlYyAKK1wmXC1mc2NoZWR1bGVcLWluc25zICBcLWZzY2hlZHVsZVwtaW5zbnMyIAorXCZcLWZzdHJpY3RcLWFsaWFzaW5nIFwtZnN0cmljdFwtb3ZlcmZsb3cgCitcJlwtZnRyZWVcLXN3aXRjaFwtY29udmVyc2lvbiBcLWZ0cmVlXC10YWlsXC1tZXJnZSAKK1wmXC1mdHJlZVwtcHJlIAorXCZcLWZ0cmVlXC12cnBcZlIKKy5TcAorUGxlYXNlIG5vdGUgdGhlIHdhcm5pbmcgdW5kZXIgXGZCXC1mZ2NzZVxmUiBhYm91dAoraW52b2tpbmcgXGZCXC1PMlxmUiBvbiBwcm9ncmFtcyB0aGF0IHVzZSBjb21wdXRlZCBnb3Rvcy4KKy5JUCAiXGZCXC1PM1xmUiIgNAorLklYIEl0ZW0gIi1PMyIKK09wdGltaXplIHlldCBtb3JlLiAgXGZCXC1PM1xmUiB0dXJucyBvbiBhbGwgb3B0aW1pemF0aW9ucyBzcGVjaWZpZWQKK2J5IFxmQlwtTzJcZlIgYW5kIGFsc28gdHVybnMgb24gdGhlIFxmQlwtZmlubGluZVwtZnVuY3Rpb25zXGZSLAorXCZcZkJcLWZ1bnN3aXRjaFwtbG9vcHNcZlIsIFxmQlwtZnByZWRpY3RpdmVcLWNvbW1vbmluZ1xmUiwKK1wmXGZCXC1mZ2NzZVwtYWZ0ZXJcLXJlbG9hZFxmUiwgXGZCXC1mdHJlZVwtdmVjdG9yaXplXGZSLAorXCZcZkJcLWZ2ZWN0XC1jb3N0XC1tb2RlbFxmUiwKK1wmXGZCXC1mdHJlZVwtcGFydGlhbFwtcHJlXGZSIGFuZCBcZkJcLWZpcGFcLWNwXC1jbG9uZVxmUiBvcHRpb25zLgorLklQICJcZkJcLU8wXGZSIiA0CisuSVggSXRlbSAiLU8wIgorUmVkdWNlIGNvbXBpbGF0aW9uIHRpbWUgYW5kIG1ha2UgZGVidWdnaW5nIHByb2R1Y2UgdGhlIGV4cGVjdGVkCityZXN1bHRzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1Pc1xmUiIgNAorLklYIEl0ZW0gIi1PcyIKK09wdGltaXplIGZvciBzaXplLiAgXGZCXC1Pc1xmUiBlbmFibGVzIGFsbCBcZkJcLU8yXGZSIG9wdGltaXphdGlvbnMgdGhhdAorZG8gbm90IHR5cGljYWxseSBpbmNyZWFzZSBjb2RlIHNpemUuICBJdCBhbHNvIHBlcmZvcm1zIGZ1cnRoZXIKK29wdGltaXphdGlvbnMgZGVzaWduZWQgdG8gcmVkdWNlIGNvZGUgc2l6ZS4KKy5TcAorXCZcZkJcLU9zXGZSIGRpc2FibGVzIHRoZSBmb2xsb3dpbmcgb3B0aW1pemF0aW9uIGZsYWdzOgorXCZcZkJcLWZhbGlnblwtZnVuY3Rpb25zICBcLWZhbGlnblwtanVtcHMgIFwtZmFsaWduXC1sb29wcyAKK1wmXC1mYWxpZ25cLWxhYmVscyAgXC1mcmVvcmRlclwtYmxvY2tzICBcLWZyZW9yZGVyXC1ibG9ja3NcLWFuZFwtcGFydGl0aW9uIAorXCZcLWZwcmVmZXRjaFwtbG9vcFwtYXJyYXlzICBcLWZ0cmVlXC12ZWN0XC1sb29wXC12ZXJzaW9uXGZSCisuSVAgIlxmQlwtT2Zhc3RcZlIiIDQKKy5JWCBJdGVtICItT2Zhc3QiCitEaXNyZWdhcmQgc3RyaWN0IHN0YW5kYXJkcyBjb21wbGlhbmNlLiAgXGZCXC1PZmFzdFxmUiBlbmFibGVzIGFsbAorXCZcZkJcLU8zXGZSIG9wdGltaXphdGlvbnMuICBJdCBhbHNvIGVuYWJsZXMgb3B0aW1pemF0aW9ucyB0aGF0IGFyZSBub3QKK3ZhbGlkIGZvciBhbGwgc3RhbmRhcmQtY29tcGxpYW50IHByb2dyYW1zLgorSXQgdHVybnMgb24gXGZCXC1mZmFzdFwtbWF0aFxmUiBhbmQgdGhlIEZvcnRyYW4tc3BlY2lmaWMKK1wmXGZCXC1mbm9cLXByb3RlY3RcLXBhcmVuc1xmUiBhbmQgXGZCXC1mc3RhY2tcLWFycmF5c1xmUi4KKy5JUCAiXGZCXC1PZ1xmUiIgNAorLklYIEl0ZW0gIi1PZyIKK09wdGltaXplIGRlYnVnZ2luZyBleHBlcmllbmNlLiAgXGZCXC1PZ1xmUiBlbmFibGVzIG9wdGltaXphdGlvbnMKK3RoYXQgZG8gbm90IGludGVyZmVyZSB3aXRoIGRlYnVnZ2luZy4gSXQgc2hvdWxkIGJlIHRoZSBvcHRpbWl6YXRpb24KK2xldmVsIG9mIGNob2ljZSBmb3IgdGhlIHN0YW5kYXJkIGVkaXQtY29tcGlsZS1kZWJ1ZyBjeWNsZSwgb2ZmZXJpbmcKK2EgcmVhc29uYWJsZSBsZXZlbCBvZiBvcHRpbWl6YXRpb24gd2hpbGUgbWFpbnRhaW5pbmcgZmFzdCBjb21waWxhdGlvbgorYW5kIGEgZ29vZCBkZWJ1Z2dpbmcgZXhwZXJpZW5jZS4KKy5TcAorSWYgeW91IHVzZSBtdWx0aXBsZSBcZkJcLU9cZlIgb3B0aW9ucywgd2l0aCBvciB3aXRob3V0IGxldmVsIG51bWJlcnMsCit0aGUgbGFzdCBzdWNoIG9wdGlvbiBpcyB0aGUgb25lIHRoYXQgaXMgZWZmZWN0aXZlLgorLlBQCitPcHRpb25zIG9mIHRoZSBmb3JtIFxmQlwtZlxmUlxmSWZsYWdcZlIgc3BlY2lmeSBtYWNoaW5lLWluZGVwZW5kZW50CitmbGFncy4gIE1vc3QgZmxhZ3MgaGF2ZSBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmb3JtczsgdGhlIG5lZ2F0aXZlCitmb3JtIG9mIFxmQlwtZmZvb1xmUiBpcyBcZkJcLWZub1wtZm9vXGZSLiAgSW4gdGhlIHRhYmxlCitiZWxvdywgb25seSBvbmUgb2YgdGhlIGZvcm1zIGlzIGxpc3RlZFwtXC1cLXRoZSBvbmUgeW91IHR5cGljYWxseSAKK3VzZS4gIFlvdSBjYW4gZmlndXJlIG91dCB0aGUgb3RoZXIgZm9ybSBieSBlaXRoZXIgcmVtb3ZpbmcgXGZCbm9cLVxmUgorb3IgYWRkaW5nIGl0LgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgY29udHJvbCBzcGVjaWZpYyBvcHRpbWl6YXRpb25zLiAgVGhleSBhcmUgZWl0aGVyCithY3RpdmF0ZWQgYnkgXGZCXC1PXGZSIG9wdGlvbnMgb3IgYXJlIHJlbGF0ZWQgdG8gb25lcyB0aGF0IGFyZS4gIFlvdQorY2FuIHVzZSB0aGUgZm9sbG93aW5nIGZsYWdzIGluIHRoZSByYXJlIGNhc2VzIHdoZW4gXCooTCJmaW5lLXR1bmluZ1wqKFIiIG9mCitvcHRpbWl6YXRpb25zIHRvIGJlIHBlcmZvcm1lZCBpcyBkZXNpcmVkLgorLklQICJcZkJcLWZub1wtZGVmYXVsdFwtaW5saW5lXGZSIiA0CisuSVggSXRlbSAiLWZuby1kZWZhdWx0LWlubGluZSIKK0RvIG5vdCBtYWtlIG1lbWJlciBmdW5jdGlvbnMgaW5saW5lIGJ5IGRlZmF1bHQgbWVyZWx5IGJlY2F1c2UgdGhleSBhcmUKK2RlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzY29wZSAoXCooQysgb25seSkuICBPdGhlcndpc2UsIHdoZW4geW91IHNwZWNpZnkKK1wmXGZCXC1PXGZSLCBtZW1iZXIgZnVuY3Rpb25zIGRlZmluZWQgaW5zaWRlIGNsYXNzIHNjb3BlIGFyZSBjb21waWxlZAoraW5saW5lIGJ5IGRlZmF1bHQ7IGkuZS4sIHlvdSBkb24ndCBuZWVkIHRvIGFkZCBcZkJpbmxpbmVcZlIgaW4gZnJvbnQgb2YKK3RoZSBtZW1iZXIgZnVuY3Rpb24gbmFtZS4KKy5JUCAiXGZCXC1mbm9cLWRlZmVyXC1wb3BcZlIiIDQKKy5JWCBJdGVtICItZm5vLWRlZmVyLXBvcCIKK0Fsd2F5cyBwb3AgdGhlIGFyZ3VtZW50cyB0byBlYWNoIGZ1bmN0aW9uIGNhbGwgYXMgc29vbiBhcyB0aGF0IGZ1bmN0aW9uCityZXR1cm5zLiAgRm9yIG1hY2hpbmVzIHRoYXQgbXVzdCBwb3AgYXJndW1lbnRzIGFmdGVyIGEgZnVuY3Rpb24gY2FsbCwKK3RoZSBjb21waWxlciBub3JtYWxseSBsZXRzIGFyZ3VtZW50cyBhY2N1bXVsYXRlIG9uIHRoZSBzdGFjayBmb3Igc2V2ZXJhbAorZnVuY3Rpb24gY2FsbHMgYW5kIHBvcHMgdGhlbSBhbGwgYXQgb25jZS4KKy5TcAorRGlzYWJsZWQgYXQgbGV2ZWxzIFxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mZm9yd2FyZFwtcHJvcGFnYXRlXGZSIiA0CisuSVggSXRlbSAiLWZmb3J3YXJkLXByb3BhZ2F0ZSIKK1BlcmZvcm0gYSBmb3J3YXJkIHByb3BhZ2F0aW9uIHBhc3Mgb24gXHMtMVJUTFxzMC4gIFRoZSBwYXNzIHRyaWVzIHRvIGNvbWJpbmUgdHdvCitpbnN0cnVjdGlvbnMgYW5kIGNoZWNrcyBpZiB0aGUgcmVzdWx0IGNhbiBiZSBzaW1wbGlmaWVkLiAgSWYgbG9vcCB1bnJvbGxpbmcKK2lzIGFjdGl2ZSwgdHdvIHBhc3NlcyBhcmUgcGVyZm9ybWVkIGFuZCB0aGUgc2Vjb25kIGlzIHNjaGVkdWxlZCBhZnRlcgorbG9vcCB1bnJvbGxpbmcuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBvcHRpbWl6YXRpb24gbGV2ZWxzIFxmQlwtT1xmUiwKK1wmXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mZnBcLWNvbnRyYWN0PVxmUlxmSXN0eWxlXGZSIiA0CisuSVggSXRlbSAiLWZmcC1jb250cmFjdD1zdHlsZSIKK1wmXGZCXC1mZnBcLWNvbnRyYWN0PW9mZlxmUiBkaXNhYmxlcyBmbG9hdGluZy1wb2ludCBleHByZXNzaW9uIGNvbnRyYWN0aW9uLgorXCZcZkJcLWZmcFwtY29udHJhY3Q9ZmFzdFxmUiBlbmFibGVzIGZsb2F0aW5nLXBvaW50IGV4cHJlc3Npb24gY29udHJhY3Rpb24KK3N1Y2ggYXMgZm9ybWluZyBvZiBmdXNlZCBtdWx0aXBseS1hZGQgb3BlcmF0aW9ucyBpZiB0aGUgdGFyZ2V0IGhhcworbmF0aXZlIHN1cHBvcnQgZm9yIHRoZW0uCitcJlxmQlwtZmZwXC1jb250cmFjdD1vblxmUiBlbmFibGVzIGZsb2F0aW5nLXBvaW50IGV4cHJlc3Npb24gY29udHJhY3Rpb24KK2lmIGFsbG93ZWQgYnkgdGhlIGxhbmd1YWdlIHN0YW5kYXJkLiAgVGhpcyBpcyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkCithbmQgdHJlYXRlZCBlcXVhbCB0byBcZkJcLWZmcFwtY29udHJhY3Q9b2ZmXGZSLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZmcFwtY29udHJhY3Q9ZmFzdFxmUi4KKy5JUCAiXGZCXC1mb21pdFwtZnJhbWVcLXBvaW50ZXJcZlIiIDQKKy5JWCBJdGVtICItZm9taXQtZnJhbWUtcG9pbnRlciIKK0Rvbid0IGtlZXAgdGhlIGZyYW1lIHBvaW50ZXIgaW4gYSByZWdpc3RlciBmb3IgZnVuY3Rpb25zIHRoYXQKK2Rvbid0IG5lZWQgb25lLiAgVGhpcyBhdm9pZHMgdGhlIGluc3RydWN0aW9ucyB0byBzYXZlLCBzZXQgdXAgYW5kCityZXN0b3JlIGZyYW1lIHBvaW50ZXJzOyBpdCBhbHNvIG1ha2VzIGFuIGV4dHJhIHJlZ2lzdGVyIGF2YWlsYWJsZQoraW4gbWFueSBmdW5jdGlvbnMuICBcZkJJdCBhbHNvIG1ha2VzIGRlYnVnZ2luZyBpbXBvc3NpYmxlIG9uCitzb21lIG1hY2hpbmVzLlxmUgorLlNwCitPbiBzb21lIG1hY2hpbmVzLCBzdWNoIGFzIHRoZSBccy0xVkFYXHMwLCB0aGlzIGZsYWcgaGFzIG5vIGVmZmVjdCwgYmVjYXVzZQordGhlIHN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2UgYXV0b21hdGljYWxseSBoYW5kbGVzIHRoZSBmcmFtZSBwb2ludGVyCithbmQgbm90aGluZyBpcyBzYXZlZCBieSBwcmV0ZW5kaW5nIGl0IGRvZXNuJ3QgZXhpc3QuICBUaGUKK21hY2hpbmUtZGVzY3JpcHRpb24gbWFjcm8gXGYoQ1dcKihDYEZSQU1FX1BPSU5URVJfUkVRVUlSRURcKihDJ1xmUiBjb250cm9scword2hldGhlciBhIHRhcmdldCBtYWNoaW5lIHN1cHBvcnRzIHRoaXMgZmxhZy4KKy5TcAorU3RhcnRpbmcgd2l0aCBccy0xR0NDXHMwIHZlcnNpb24gNC42LCB0aGUgZGVmYXVsdCBzZXR0aW5nICh3aGVuIG5vdCBvcHRpbWl6aW5nIGZvcgorc2l6ZSkgZm9yIDMyXC1iaXQgR05VL0xpbnV4IHg4NiBhbmQgMzJcLWJpdCBEYXJ3aW4geDg2IHRhcmdldHMgaGFzIGJlZW4gY2hhbmdlZCB0bworXCZcZkJcLWZvbWl0XC1mcmFtZVwtcG9pbnRlclxmUi4gIFRoZSBkZWZhdWx0IGNhbiBiZSByZXZlcnRlZCB0bworXCZcZkJcLWZub1wtb21pdFwtZnJhbWVcLXBvaW50ZXJcZlIgYnkgY29uZmlndXJpbmcgXHMtMUdDQ1xzMCB3aXRoIHRoZQorXCZcZkJcLVwtZW5hYmxlXC1mcmFtZVwtcG9pbnRlclxmUiBjb25maWd1cmUgb3B0aW9uLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZm9wdGltaXplXC1zaWJsaW5nXC1jYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1mb3B0aW1pemUtc2libGluZy1jYWxscyIKK09wdGltaXplIHNpYmxpbmcgYW5kIHRhaWwgcmVjdXJzaXZlIGNhbGxzLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZub1wtaW5saW5lXGZSIiA0CisuSVggSXRlbSAiLWZuby1pbmxpbmUiCitEbyBub3QgZXhwYW5kIGFueSBmdW5jdGlvbnMgaW5saW5lIGFwYXJ0IGZyb20gdGhvc2UgbWFya2VkIHdpdGgKK3RoZSBcZihDV1wqKENgYWx3YXlzX2lubGluZVwqKEMnXGZSIGF0dHJpYnV0ZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiBub3QKK29wdGltaXppbmcuCisuU3AKK1NpbmdsZSBmdW5jdGlvbnMgY2FuIGJlIGV4ZW1wdGVkIGZyb20gaW5saW5pbmcgYnkgbWFya2luZyB0aGVtCit3aXRoIHRoZSBcZihDV1wqKENgbm9pbmxpbmVcKihDJ1xmUiBhdHRyaWJ1dGUuCisuSVAgIlxmQlwtZmlubGluZVwtc21hbGxcLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1maW5saW5lLXNtYWxsLWZ1bmN0aW9ucyIKK0ludGVncmF0ZSBmdW5jdGlvbnMgaW50byB0aGVpciBjYWxsZXJzIHdoZW4gdGhlaXIgYm9keSBpcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQKK2Z1bmN0aW9uIGNhbGwgY29kZSAoc28gb3ZlcmFsbCBzaXplIG9mIHByb2dyYW0gZ2V0cyBzbWFsbGVyKS4gIFRoZSBjb21waWxlcgoraGV1cmlzdGljYWxseSBkZWNpZGVzIHdoaWNoIGZ1bmN0aW9ucyBhcmUgc2ltcGxlIGVub3VnaCB0byBiZSB3b3J0aCBpbnRlZ3JhdGluZworaW4gdGhpcyB3YXkuICBUaGlzIGlubGluaW5nIGFwcGxpZXMgdG8gYWxsIGZ1bmN0aW9ucywgZXZlbiB0aG9zZSBub3QgZGVjbGFyZWQKK2lubGluZS4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbCBcZkJcLU8yXGZSLgorLklQICJcZkJcLWZpbmRpcmVjdFwtaW5saW5pbmdcZlIiIDQKKy5JWCBJdGVtICItZmluZGlyZWN0LWlubGluaW5nIgorSW5saW5lIGFsc28gaW5kaXJlY3QgY2FsbHMgdGhhdCBhcmUgZGlzY292ZXJlZCB0byBiZSBrbm93biBhdCBjb21waWxlCit0aW1lIHRoYW5rcyB0byBwcmV2aW91cyBpbmxpbmluZy4gIFRoaXMgb3B0aW9uIGhhcyBhbnkgZWZmZWN0IG9ubHkKK3doZW4gaW5saW5pbmcgaXRzZWxmIGlzIHR1cm5lZCBvbiBieSB0aGUgXGZCXC1maW5saW5lXC1mdW5jdGlvbnNcZlIKK29yIFxmQlwtZmlubGluZVwtc21hbGxcLWZ1bmN0aW9uc1xmUiBvcHRpb25zLgorLlNwCitFbmFibGVkIGF0IGxldmVsIFxmQlwtTzJcZlIuCisuSVAgIlxmQlwtZmlubGluZVwtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLWZpbmxpbmUtZnVuY3Rpb25zIgorQ29uc2lkZXIgYWxsIGZ1bmN0aW9ucyBmb3IgaW5saW5pbmcsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGRlY2xhcmVkIGlubGluZS4KK1RoZSBjb21waWxlciBoZXVyaXN0aWNhbGx5IGRlY2lkZXMgd2hpY2ggZnVuY3Rpb25zIGFyZSB3b3J0aCBpbnRlZ3JhdGluZworaW4gdGhpcyB3YXkuCisuU3AKK0lmIGFsbCBjYWxscyB0byBhIGdpdmVuIGZ1bmN0aW9uIGFyZSBpbnRlZ3JhdGVkLCBhbmQgdGhlIGZ1bmN0aW9uIGlzCitkZWNsYXJlZCBcZihDV1wqKENgc3RhdGljXCooQydcZlIsIHRoZW4gdGhlIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IG5vdCBvdXRwdXQgYXMKK2Fzc2VtYmxlciBjb2RlIGluIGl0cyBvd24gcmlnaHQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWwgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1maW5saW5lXC1mdW5jdGlvbnNcLWNhbGxlZFwtb25jZVxmUiIgNAorLklYIEl0ZW0gIi1maW5saW5lLWZ1bmN0aW9ucy1jYWxsZWQtb25jZSIKK0NvbnNpZGVyIGFsbCBcZihDV1wqKENgc3RhdGljXCooQydcZlIgZnVuY3Rpb25zIGNhbGxlZCBvbmNlIGZvciBpbmxpbmluZyBpbnRvIHRoZWlyCitjYWxsZXIgZXZlbiBpZiB0aGV5IGFyZSBub3QgbWFya2VkIFxmKENXXCooQ2BpbmxpbmVcKihDJ1xmUi4gIElmIGEgY2FsbCB0byBhIGdpdmVuCitmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkLCB0aGVuIHRoZSBmdW5jdGlvbiBpcyBub3Qgb3V0cHV0IGFzIGFzc2VtYmxlciBjb2RlCitpbiBpdHMgb3duIHJpZ2h0LgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8xXGZSLCBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSIGFuZCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZlYXJseVwtaW5saW5pbmdcZlIiIDQKKy5JWCBJdGVtICItZmVhcmx5LWlubGluaW5nIgorSW5saW5lIGZ1bmN0aW9ucyBtYXJrZWQgYnkgXGYoQ1dcKihDYGFsd2F5c19pbmxpbmVcKihDJ1xmUiBhbmQgZnVuY3Rpb25zIHdob3NlIGJvZHkgc2VlbXMKK3NtYWxsZXIgdGhhbiB0aGUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCBlYXJseSBiZWZvcmUgZG9pbmcKK1wmXGZCXC1mcHJvZmlsZVwtZ2VuZXJhdGVcZlIgaW5zdHJ1bWVudGF0aW9uIGFuZCByZWFsIGlubGluaW5nIHBhc3MuICBEb2luZyBzbworbWFrZXMgcHJvZmlsaW5nIHNpZ25pZmljYW50bHkgY2hlYXBlciBhbmQgdXN1YWxseSBpbmxpbmluZyBmYXN0ZXIgb24gcHJvZ3JhbXMKK2hhdmluZyBsYXJnZSBjaGFpbnMgb2YgbmVzdGVkIHdyYXBwZXIgZnVuY3Rpb25zLgorLlNwCitFbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtZmlwYVwtc3JhXGZSIiA0CisuSVggSXRlbSAiLWZpcGEtc3JhIgorUGVyZm9ybSBpbnRlcnByb2NlZHVyYWwgc2NhbGFyIHJlcGxhY2VtZW50IG9mIGFnZ3JlZ2F0ZXMsIHJlbW92YWwgb2YKK3VudXNlZCBwYXJhbWV0ZXJzIGFuZCByZXBsYWNlbWVudCBvZiBwYXJhbWV0ZXJzIHBhc3NlZCBieSByZWZlcmVuY2UKK2J5IHBhcmFtZXRlcnMgcGFzc2VkIGJ5IHZhbHVlLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSIGFuZCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZpbmxpbmVcLWxpbWl0PVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZmlubGluZS1saW1pdD1uIgorQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBsaW1pdHMgdGhlIHNpemUgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGlubGluZWQuICBUaGlzIGZsYWcKK2FsbG93cyBjb2Fyc2UgY29udHJvbCBvZiB0aGlzIGxpbWl0LiAgXGZJblxmUiBpcyB0aGUgc2l6ZSBvZiBmdW5jdGlvbnMgdGhhdAorY2FuIGJlIGlubGluZWQgaW4gbnVtYmVyIG9mIHBzZXVkbyBpbnN0cnVjdGlvbnMuCisuU3AKK0lubGluaW5nIGlzIGFjdHVhbGx5IGNvbnRyb2xsZWQgYnkgYSBudW1iZXIgb2YgcGFyYW1ldGVycywgd2hpY2ggbWF5IGJlCitzcGVjaWZpZWQgaW5kaXZpZHVhbGx5IGJ5IHVzaW5nIFxmQlwtXC1wYXJhbVxmUiBcZkluYW1lXGZSXGZCPVxmUlxmSXZhbHVlXGZSLgorVGhlIFxmQlwtZmlubGluZVwtbGltaXQ9XGZSXGZJblxmUiBvcHRpb24gc2V0cyBzb21lIG9mIHRoZXNlIHBhcmFtZXRlcnMKK2FzIGZvbGxvd3M6CisuUlMgNAorLklQICJcZkJtYXgtaW5saW5lLWluc25zLXNpbmdsZVxmUiIgNAorLklYIEl0ZW0gIm1heC1pbmxpbmUtaW5zbnMtc2luZ2xlIgoraXMgc2V0IHRvIFxmSW5cZlIvMi4KKy5JUCAiXGZCbWF4LWlubGluZS1pbnNucy1hdXRvXGZSIiA0CisuSVggSXRlbSAibWF4LWlubGluZS1pbnNucy1hdXRvIgoraXMgc2V0IHRvIFxmSW5cZlIvMi4KKy5SRQorLlJTIDQKKy5TcAorU2VlIGJlbG93IGZvciBhIGRvY3VtZW50YXRpb24gb2YgdGhlIGluZGl2aWR1YWwKK3BhcmFtZXRlcnMgY29udHJvbGxpbmcgaW5saW5pbmcgYW5kIGZvciB0aGUgZGVmYXVsdHMgb2YgdGhlc2UgcGFyYW1ldGVycy4KKy5TcAorXCZcZklOb3RlOlxmUiB0aGVyZSBtYXkgYmUgbm8gdmFsdWUgdG8gXGZCXC1maW5saW5lXC1saW1pdFxmUiB0aGF0IHJlc3VsdHMKK2luIGRlZmF1bHQgYmVoYXZpb3IuCisuU3AKK1wmXGZJTm90ZTpcZlIgcHNldWRvIGluc3RydWN0aW9uIHJlcHJlc2VudHMsIGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LCBhbgorYWJzdHJhY3QgbWVhc3VyZW1lbnQgb2YgZnVuY3Rpb24ncyBzaXplLiAgSW4gbm8gd2F5IGRvZXMgaXQgcmVwcmVzZW50IGEgY291bnQKK29mIGFzc2VtYmx5IGluc3RydWN0aW9ucyBhbmQgYXMgc3VjaCBpdHMgZXhhY3QgbWVhbmluZyBtaWdodCBjaGFuZ2UgZnJvbSBvbmUKK3JlbGVhc2UgdG8gYW4gYW5vdGhlci4KKy5SRQorLklQICJcZkJcLWZub1wta2VlcFwtaW5saW5lXC1kbGxleHBvcnRcZlIiIDQKKy5JWCBJdGVtICItZm5vLWtlZXAtaW5saW5lLWRsbGV4cG9ydCIKK1RoaXMgaXMgYSBtb3JlIGZpbmUtZ3JhaW5lZCB2ZXJzaW9uIG9mIFxmQlwtZmtlZXBcLWlubGluZVwtZnVuY3Rpb25zXGZSLAord2hpY2ggYXBwbGllcyBvbmx5IHRvIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZCB1c2luZyB0aGUgXGYoQ1dcKihDYGRsbGV4cG9ydFwqKEMnXGZSCithdHRyaWJ1dGUgb3IgZGVjbHNwZWMKKy5JUCAiXGZCXC1ma2VlcFwtaW5saW5lXC1mdW5jdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZmtlZXAtaW5saW5lLWZ1bmN0aW9ucyIKK0luIEMsIGVtaXQgXGYoQ1dcKihDYHN0YXRpY1wqKEMnXGZSIGZ1bmN0aW9ucyB0aGF0IGFyZSBkZWNsYXJlZCBcZihDV1wqKENgaW5saW5lXCooQydcZlIKK2ludG8gdGhlIG9iamVjdCBmaWxlLCBldmVuIGlmIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBpbmxpbmVkIGludG8gYWxsCitvZiBpdHMgY2FsbGVycy4gIFRoaXMgc3dpdGNoIGRvZXMgbm90IGFmZmVjdCBmdW5jdGlvbnMgdXNpbmcgdGhlCitcJlxmKENXXCooQ2BleHRlcm4gaW5saW5lXCooQydcZlIgZXh0ZW5zaW9uIGluIFxzLTFHTlVcczAgQzkwLiAgSW4gXCooQyssIGVtaXQgYW55IGFuZCBhbGwKK2lubGluZSBmdW5jdGlvbnMgaW50byB0aGUgb2JqZWN0IGZpbGUuCisuSVAgIlxmQlwtZmtlZXBcLXN0YXRpY1wtY29uc3RzXGZSIiA0CisuSVggSXRlbSAiLWZrZWVwLXN0YXRpYy1jb25zdHMiCitFbWl0IHZhcmlhYmxlcyBkZWNsYXJlZCBcZihDV1wqKENgc3RhdGljIGNvbnN0XCooQydcZlIgd2hlbiBvcHRpbWl6YXRpb24gaXNuJ3QgdHVybmVkCitvbiwgZXZlbiBpZiB0aGUgdmFyaWFibGVzIGFyZW4ndCByZWZlcmVuY2VkLgorLlNwCitcJlxzLTFHQ0NcczAgZW5hYmxlcyB0aGlzIG9wdGlvbiBieSBkZWZhdWx0LiAgSWYgeW91IHdhbnQgdG8gZm9yY2UgdGhlIGNvbXBpbGVyIHRvCitjaGVjayBpZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QKK29wdGltaXphdGlvbiBpcyB0dXJuZWQgb24sIHVzZSB0aGUgXGZCXC1mbm9cLWtlZXBcLXN0YXRpY1wtY29uc3RzXGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1mbWVyZ2VcLWNvbnN0YW50c1xmUiIgNAorLklYIEl0ZW0gIi1mbWVyZ2UtY29uc3RhbnRzIgorQXR0ZW1wdCB0byBtZXJnZSBpZGVudGljYWwgY29uc3RhbnRzIChzdHJpbmcgY29uc3RhbnRzIGFuZCBmbG9hdGluZy1wb2ludAorY29uc3RhbnRzKSBhY3Jvc3MgY29tcGlsYXRpb24gdW5pdHMuCisuU3AKK1RoaXMgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IGZvciBvcHRpbWl6ZWQgY29tcGlsYXRpb24gaWYgdGhlIGFzc2VtYmxlciBhbmQKK2xpbmtlciBzdXBwb3J0IGl0LiAgVXNlIFxmQlwtZm5vXC1tZXJnZVwtY29uc3RhbnRzXGZSIHRvIGluaGliaXQgdGhpcworYmVoYXZpb3IuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mbWVyZ2VcLWFsbFwtY29uc3RhbnRzXGZSIiA0CisuSVggSXRlbSAiLWZtZXJnZS1hbGwtY29uc3RhbnRzIgorQXR0ZW1wdCB0byBtZXJnZSBpZGVudGljYWwgY29uc3RhbnRzIGFuZCBpZGVudGljYWwgdmFyaWFibGVzLgorLlNwCitUaGlzIG9wdGlvbiBpbXBsaWVzIFxmQlwtZm1lcmdlXC1jb25zdGFudHNcZlIuICBJbiBhZGRpdGlvbiB0bworXCZcZkJcLWZtZXJnZVwtY29uc3RhbnRzXGZSIHRoaXMgY29uc2lkZXJzIGUuZy4gZXZlbiBjb25zdGFudCBpbml0aWFsaXplZAorYXJyYXlzIG9yIGluaXRpYWxpemVkIGNvbnN0YW50IHZhcmlhYmxlcyB3aXRoIGludGVncmFsIG9yIGZsb2F0aW5nLXBvaW50Cit0eXBlcy4gIExhbmd1YWdlcyBsaWtlIEMgb3IgXCooQysgcmVxdWlyZSBlYWNoIHZhcmlhYmxlLCBpbmNsdWRpbmcgbXVsdGlwbGUKK2luc3RhbmNlcyBvZiB0aGUgc2FtZSB2YXJpYWJsZSBpbiByZWN1cnNpdmUgY2FsbHMsIHRvIGhhdmUgZGlzdGluY3QgbG9jYXRpb25zLAorc28gdXNpbmcgdGhpcyBvcHRpb24gcmVzdWx0cyBpbiBub24tY29uZm9ybWluZworYmVoYXZpb3IuCisuSVAgIlxmQlwtZm1vZHVsb1wtc2NoZWRcZlIiIDQKKy5JWCBJdGVtICItZm1vZHVsby1zY2hlZCIKK1BlcmZvcm0gc3dpbmcgbW9kdWxvIHNjaGVkdWxpbmcgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBmaXJzdCBzY2hlZHVsaW5nCitwYXNzLiAgVGhpcyBwYXNzIGxvb2tzIGF0IGlubmVybW9zdCBsb29wcyBhbmQgcmVvcmRlcnMgdGhlaXIKK2luc3RydWN0aW9ucyBieSBvdmVybGFwcGluZyBkaWZmZXJlbnQgaXRlcmF0aW9ucy4KKy5JUCAiXGZCXC1mbW9kdWxvXC1zY2hlZFwtYWxsb3dcLXJlZ21vdmVzXGZSIiA0CisuSVggSXRlbSAiLWZtb2R1bG8tc2NoZWQtYWxsb3ctcmVnbW92ZXMiCitQZXJmb3JtIG1vcmUgYWdncmVzc2l2ZSBTTVMtYmFzZWQgbW9kdWxvIHNjaGVkdWxpbmcgd2l0aCByZWdpc3RlciBtb3ZlcworYWxsb3dlZC4gIEJ5IHNldHRpbmcgdGhpcyBmbGFnIGNlcnRhaW4gYW50aS1kZXBlbmRlbmNlcyBlZGdlcyBhcmUKK2RlbGV0ZWQsIHdoaWNoIHRyaWdnZXJzIHRoZSBnZW5lcmF0aW9uIG9mIHJlZy1tb3ZlcyBiYXNlZCBvbiB0aGUKK2xpZmUtcmFuZ2UgYW5hbHlzaXMuICBUaGlzIG9wdGlvbiBpcyBlZmZlY3RpdmUgb25seSB3aXRoCitcJlxmQlwtZm1vZHVsb1wtc2NoZWRcZlIgZW5hYmxlZC4KKy5JUCAiXGZCXC1mbm9cLWJyYW5jaFwtY291bnRcLXJlZ1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tYnJhbmNoLWNvdW50LXJlZyIKK0RvIG5vdCB1c2UgXCooTCJkZWNyZW1lbnQgYW5kIGJyYW5jaFwqKFIiIGluc3RydWN0aW9ucyBvbiBhIGNvdW50IHJlZ2lzdGVyLAorYnV0IGluc3RlYWQgZ2VuZXJhdGUgYSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMgdGhhdCBkZWNyZW1lbnQgYQorcmVnaXN0ZXIsIGNvbXBhcmUgaXQgYWdhaW5zdCB6ZXJvLCB0aGVuIGJyYW5jaCBiYXNlZCB1cG9uIHRoZSByZXN1bHQuCitUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgc3VjaAoraW5zdHJ1Y3Rpb25zLCB3aGljaCBpbmNsdWRlIHg4NiwgUG93ZXJQQywgXHMtMUlBXC02NFxzMCBhbmQgUy8zOTAuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZmJyYW5jaFwtY291bnRcLXJlZ1xmUi4KKy5JUCAiXGZCXC1mbm9cLWZ1bmN0aW9uXC1jc2VcZlIiIDQKKy5JWCBJdGVtICItZm5vLWZ1bmN0aW9uLWNzZSIKK0RvIG5vdCBwdXQgZnVuY3Rpb24gYWRkcmVzc2VzIGluIHJlZ2lzdGVyczsgbWFrZSBlYWNoIGluc3RydWN0aW9uIHRoYXQKK2NhbGxzIGEgY29uc3RhbnQgZnVuY3Rpb24gY29udGFpbiB0aGUgZnVuY3Rpb24ncyBhZGRyZXNzIGV4cGxpY2l0bHkuCisuU3AKK1RoaXMgb3B0aW9uIHJlc3VsdHMgaW4gbGVzcyBlZmZpY2llbnQgY29kZSwgYnV0IHNvbWUgc3RyYW5nZSBoYWNrcwordGhhdCBhbHRlciB0aGUgYXNzZW1ibGVyIG91dHB1dCBtYXkgYmUgY29uZnVzZWQgYnkgdGhlIG9wdGltaXphdGlvbnMKK3BlcmZvcm1lZCB3aGVuIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZmdW5jdGlvblwtY3NlXGZSCisuSVAgIlxmQlwtZm5vXC16ZXJvXC1pbml0aWFsaXplZFwtaW5cLWJzc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8temVyby1pbml0aWFsaXplZC1pbi1ic3MiCitJZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGEgXHMtMUJTU1xzMCBzZWN0aW9uLCBccy0xR0NDXHMwIGJ5IGRlZmF1bHQgcHV0cyB2YXJpYWJsZXMgdGhhdAorYXJlIGluaXRpYWxpemVkIHRvIHplcm8gaW50byBccy0xQlNTXHMwLiAgVGhpcyBjYW4gc2F2ZSBzcGFjZSBpbiB0aGUgcmVzdWx0aW5nCitjb2RlLgorLlNwCitUaGlzIG9wdGlvbiB0dXJucyBvZmYgdGhpcyBiZWhhdmlvciBiZWNhdXNlIHNvbWUgcHJvZ3JhbXMgZXhwbGljaXRseQorcmVseSBvbiB2YXJpYWJsZXMgZ29pbmcgdG8gdGhlIGRhdGEgc2VjdGlvblwtXC1cLWUuZy4sIHNvIHRoYXQgdGhlCityZXN1bHRpbmcgZXhlY3V0YWJsZSBjYW4gZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgc2VjdGlvbiBhbmQvb3IgbWFrZQorYXNzdW1wdGlvbnMgYmFzZWQgb24gdGhhdC4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1memVyb1wtaW5pdGlhbGl6ZWRcLWluXC1ic3NcZlIuCisuSVAgIlxmQlwtZm11ZGZsYXAgXC1mbXVkZmxhcHRoIFwtZm11ZGZsYXBpclxmUiIgNAorLklYIEl0ZW0gIi1mbXVkZmxhcCAtZm11ZGZsYXB0aCAtZm11ZGZsYXBpciIKK0ZvciBmcm9udC1lbmRzIHRoYXQgc3VwcG9ydCBpdCAoQyBhbmQgXCooQyspLCBpbnN0cnVtZW50IGFsbCByaXNreQorcG9pbnRlci9hcnJheSBkZXJlZmVyZW5jaW5nIG9wZXJhdGlvbnMsIHNvbWUgc3RhbmRhcmQgbGlicmFyeQorc3RyaW5nL2hlYXAgZnVuY3Rpb25zLCBhbmQgc29tZSBvdGhlciBhc3NvY2lhdGVkIGNvbnN0cnVjdHMgd2l0aAorcmFuZ2UvdmFsaWRpdHkgdGVzdHMuICBNb2R1bGVzIHNvIGluc3RydW1lbnRlZCBzaG91bGQgYmUgaW1tdW5lIHRvCitidWZmZXIgb3ZlcmZsb3dzLCBpbnZhbGlkIGhlYXAgdXNlLCBhbmQgc29tZSBvdGhlciBjbGFzc2VzIG9mIEMvXCooQysKK3Byb2dyYW1taW5nIGVycm9ycy4gIFRoZSBpbnN0cnVtZW50YXRpb24gcmVsaWVzIG9uIGEgc2VwYXJhdGUgcnVudGltZQorbGlicmFyeSAoXGZJbGlibXVkZmxhcFxmUiksIHdoaWNoIGlzIGxpbmtlZCBpbnRvIGEgcHJvZ3JhbSBpZgorXCZcZkJcLWZtdWRmbGFwXGZSIGlzIGdpdmVuIGF0IGxpbmsgdGltZS4gIFJ1bi10aW1lIGJlaGF2aW9yIG9mIHRoZQoraW5zdHJ1bWVudGVkIHByb2dyYW0gaXMgY29udHJvbGxlZCBieSB0aGUgXGZCXHMtMU1VREZMQVBfT1BUSU9OU1xzMFxmUgorZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgXGYoQ1dcKihDYGVudiBNVURGTEFQX09QVElPTlM9XC1oZWxwIGEub3V0XCooQydcZlIKK2ZvciBpdHMgb3B0aW9ucy4KKy5TcAorVXNlIFxmQlwtZm11ZGZsYXB0aFxmUiBpbnN0ZWFkIG9mIFxmQlwtZm11ZGZsYXBcZlIgdG8gY29tcGlsZSBhbmQgdG8KK2xpbmsgaWYgeW91ciBwcm9ncmFtIGlzIG11bHRpLXRocmVhZGVkLiAgVXNlIFxmQlwtZm11ZGZsYXBpclxmUiwgaW4KK2FkZGl0aW9uIHRvIFxmQlwtZm11ZGZsYXBcZlIgb3IgXGZCXC1mbXVkZmxhcHRoXGZSLCBpZgoraW5zdHJ1bWVudGF0aW9uIHNob3VsZCBpZ25vcmUgcG9pbnRlciByZWFkcy4gIFRoaXMgcHJvZHVjZXMgbGVzcworaW5zdHJ1bWVudGF0aW9uIChhbmQgdGhlcmVmb3JlIGZhc3RlciBleGVjdXRpb24pIGFuZCBzdGlsbCBwcm92aWRlcworc29tZSBwcm90ZWN0aW9uIGFnYWluc3Qgb3V0cmlnaHQgbWVtb3J5IGNvcnJ1cHRpbmcgd3JpdGVzLCBidXQgYWxsb3dzCitlcnJvbmVvdXNseSByZWFkIGRhdGEgdG8gcHJvcGFnYXRlIHdpdGhpbiBhIHByb2dyYW0uCisuSVAgIlxmQlwtZnRocmVhZFwtanVtcHNcZlIiIDQKKy5JWCBJdGVtICItZnRocmVhZC1qdW1wcyIKK1BlcmZvcm0gb3B0aW1pemF0aW9ucyB0aGF0IGNoZWNrIHRvIHNlZSBpZiBhIGp1bXAgYnJhbmNoZXMgdG8gYQorbG9jYXRpb24gd2hlcmUgYW5vdGhlciBjb21wYXJpc29uIHN1YnN1bWVkIGJ5IHRoZSBmaXJzdCBpcyBmb3VuZC4gIElmCitzbywgdGhlIGZpcnN0IGJyYW5jaCBpcyByZWRpcmVjdGVkIHRvIGVpdGhlciB0aGUgZGVzdGluYXRpb24gb2YgdGhlCitzZWNvbmQgYnJhbmNoIG9yIGEgcG9pbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGl0LCBkZXBlbmRpbmcgb24gd2hldGhlcgordGhlIGNvbmRpdGlvbiBpcyBrbm93biB0byBiZSB0cnVlIG9yIGZhbHNlLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZzcGxpdFwtd2lkZVwtdHlwZXNcZlIiIDQKKy5JWCBJdGVtICItZnNwbGl0LXdpZGUtdHlwZXMiCitXaGVuIHVzaW5nIGEgdHlwZSB0aGF0IG9jY3VwaWVzIG11bHRpcGxlIHJlZ2lzdGVycywgc3VjaCBhcyBcZihDV1wqKENgbG9uZworbG9uZ1wqKEMnXGZSIG9uIGEgMzJcLWJpdCBzeXN0ZW0sIHNwbGl0IHRoZSByZWdpc3RlcnMgYXBhcnQgYW5kIGFsbG9jYXRlIHRoZW0KK2luZGVwZW5kZW50bHkuICBUaGlzIG5vcm1hbGx5IGdlbmVyYXRlcyBiZXR0ZXIgY29kZSBmb3IgdGhvc2UgdHlwZXMsCitidXQgbWF5IG1ha2UgZGVidWdnaW5nIG1vcmUgZGlmZmljdWx0LgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsCitcJlxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmNzZVwtZm9sbG93XC1qdW1wc1xmUiIgNAorLklYIEl0ZW0gIi1mY3NlLWZvbGxvdy1qdW1wcyIKK0luIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIChccy0xQ1NFXHMwKSwgc2NhbiB0aHJvdWdoIGp1bXAgaW5zdHJ1Y3Rpb25zCit3aGVuIHRoZSB0YXJnZXQgb2YgdGhlIGp1bXAgaXMgbm90IHJlYWNoZWQgYnkgYW55IG90aGVyIHBhdGguICBGb3IKK2V4YW1wbGUsIHdoZW4gXHMtMUNTRVxzMCBlbmNvdW50ZXJzIGFuIFxmKENXXCooQ2BpZlwqKEMnXGZSIHN0YXRlbWVudCB3aXRoIGFuCitcJlxmKENXXCooQ2BlbHNlXCooQydcZlIgY2xhdXNlLCBccy0xQ1NFXHMwIGZvbGxvd3MgdGhlIGp1bXAgd2hlbiB0aGUgY29uZGl0aW9uCit0ZXN0ZWQgaXMgZmFsc2UuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmNzZVwtc2tpcFwtYmxvY2tzXGZSIiA0CisuSVggSXRlbSAiLWZjc2Utc2tpcC1ibG9ja3MiCitUaGlzIGlzIHNpbWlsYXIgdG8gXGZCXC1mY3NlXC1mb2xsb3dcLWp1bXBzXGZSLCBidXQgY2F1c2VzIFxzLTFDU0VcczAgdG8KK2ZvbGxvdyBqdW1wcyB0aGF0IGNvbmRpdGlvbmFsbHkgc2tpcCBvdmVyIGJsb2Nrcy4gIFdoZW4gXHMtMUNTRVxzMAorZW5jb3VudGVycyBhIHNpbXBsZSBcZihDV1wqKENgaWZcKihDJ1xmUiBzdGF0ZW1lbnQgd2l0aCBubyBlbHNlIGNsYXVzZSwKK1wmXGZCXC1mY3NlXC1za2lwXC1ibG9ja3NcZlIgY2F1c2VzIFxzLTFDU0VcczAgdG8gZm9sbG93IHRoZSBqdW1wIGFyb3VuZCB0aGUKK2JvZHkgb2YgdGhlIFxmKENXXCooQ2BpZlwqKEMnXGZSLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZyZXJ1blwtY3NlXC1hZnRlclwtbG9vcFxmUiIgNAorLklYIEl0ZW0gIi1mcmVydW4tY3NlLWFmdGVyLWxvb3AiCitSZS1ydW4gY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24gYWZ0ZXIgbG9vcCBvcHRpbWl6YXRpb25zIGFyZQorcGVyZm9ybWVkLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZnY3NlXGZSIiA0CisuSVggSXRlbSAiLWZnY3NlIgorUGVyZm9ybSBhIGdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiBwYXNzLgorVGhpcyBwYXNzIGFsc28gcGVyZm9ybXMgZ2xvYmFsIGNvbnN0YW50IGFuZCBjb3B5IHByb3BhZ2F0aW9uLgorLlNwCitcJlxmSU5vdGU6XGZSIFdoZW4gY29tcGlsaW5nIGEgcHJvZ3JhbSB1c2luZyBjb21wdXRlZCBnb3RvcywgYSBccy0xR0NDXHMwCitleHRlbnNpb24sIHlvdSBtYXkgZ2V0IGJldHRlciBydW4tdGltZSBwZXJmb3JtYW5jZSBpZiB5b3UgZGlzYWJsZQordGhlIGdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiBwYXNzIGJ5IGFkZGluZworXCZcZkJcLWZub1wtZ2NzZVxmUiB0byB0aGUgY29tbWFuZCBsaW5lLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZnY3NlXC1sbVxmUiIgNAorLklYIEl0ZW0gIi1mZ2NzZS1sbSIKK1doZW4gXGZCXC1mZ2NzZVwtbG1cZlIgaXMgZW5hYmxlZCwgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uCithdHRlbXB0cyB0byBtb3ZlIGxvYWRzIHRoYXQgYXJlIG9ubHkga2lsbGVkIGJ5IHN0b3JlcyBpbnRvIHRoZW1zZWx2ZXMuICBUaGlzCithbGxvd3MgYSBsb29wIGNvbnRhaW5pbmcgYSBsb2FkL3N0b3JlIHNlcXVlbmNlIHRvIGJlIGNoYW5nZWQgdG8gYSBsb2FkIG91dHNpZGUKK3RoZSBsb29wLCBhbmQgYSBjb3B5L3N0b3JlIHdpdGhpbiB0aGUgbG9vcC4KKy5TcAorRW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gXGZCXC1mZ2NzZVxmUiBpcyBlbmFibGVkLgorLklQICJcZkJcLWZnY3NlXC1zbVxmUiIgNAorLklYIEl0ZW0gIi1mZ2NzZS1zbSIKK1doZW4gXGZCXC1mZ2NzZVwtc21cZlIgaXMgZW5hYmxlZCwgYSBzdG9yZSBtb3Rpb24gcGFzcyBpcyBydW4gYWZ0ZXIKK2dsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbi4gIFRoaXMgcGFzcyBhdHRlbXB0cyB0byBtb3ZlCitzdG9yZXMgb3V0IG9mIGxvb3BzLiAgV2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggXGZCXC1mZ2NzZVwtbG1cZlIsCitsb29wcyBjb250YWluaW5nIGEgbG9hZC9zdG9yZSBzZXF1ZW5jZSBjYW4gYmUgY2hhbmdlZCB0byBhIGxvYWQgYmVmb3JlCit0aGUgbG9vcCBhbmQgYSBzdG9yZSBhZnRlciB0aGUgbG9vcC4KKy5TcAorTm90IGVuYWJsZWQgYXQgYW55IG9wdGltaXphdGlvbiBsZXZlbC4KKy5JUCAiXGZCXC1mZ2NzZVwtbGFzXGZSIiA0CisuSVggSXRlbSAiLWZnY3NlLWxhcyIKK1doZW4gXGZCXC1mZ2NzZVwtbGFzXGZSIGlzIGVuYWJsZWQsIHRoZSBnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24KK2VsaW1pbmF0aW9uIHBhc3MgZWxpbWluYXRlcyByZWR1bmRhbnQgbG9hZHMgdGhhdCBjb21lIGFmdGVyIHN0b3JlcyB0byB0aGUKK3NhbWUgbWVtb3J5IGxvY2F0aW9uIChib3RoIHBhcnRpYWwgYW5kIGZ1bGwgcmVkdW5kYW5jaWVzKS4KKy5TcAorTm90IGVuYWJsZWQgYXQgYW55IG9wdGltaXphdGlvbiBsZXZlbC4KKy5JUCAiXGZCXC1mZ2NzZVwtYWZ0ZXJcLXJlbG9hZFxmUiIgNAorLklYIEl0ZW0gIi1mZ2NzZS1hZnRlci1yZWxvYWQiCitXaGVuIFxmQlwtZmdjc2VcLWFmdGVyXC1yZWxvYWRcZlIgaXMgZW5hYmxlZCwgYSByZWR1bmRhbnQgbG9hZCBlbGltaW5hdGlvbgorcGFzcyBpcyBwZXJmb3JtZWQgYWZ0ZXIgcmVsb2FkLiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXNzIGlzIHRvIGNsZWFuIHVwCityZWR1bmRhbnQgc3BpbGxpbmcuCisuSVAgIlxmQlwtZmFnZ3Jlc3NpdmVcLWxvb3BcLW9wdGltaXphdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZmFnZ3Jlc3NpdmUtbG9vcC1vcHRpbWl6YXRpb25zIgorVGhpcyBvcHRpb24gdGVsbHMgdGhlIGxvb3Agb3B0aW1pemVyIHRvIHVzZSBsYW5ndWFnZSBjb25zdHJhaW50cyB0bworZGVyaXZlIGJvdW5kcyBmb3IgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcC4gIFRoaXMgYXNzdW1lcyB0aGF0Citsb29wIGNvZGUgZG9lcyBub3QgaW52b2tlIHVuZGVmaW5lZCBiZWhhdmlvciBieSBmb3IgZXhhbXBsZSBjYXVzaW5nIHNpZ25lZAoraW50ZWdlciBvdmVyZmxvd3Mgb3Igb3V0LW9mLWJvdW5kIGFycmF5IGFjY2Vzc2VzLiAgVGhlIGJvdW5kcyBmb3IgdGhlCitudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiBhIGxvb3AgYXJlIHVzZWQgdG8gZ3VpZGUgbG9vcCB1bnJvbGxpbmcgYW5kIHBlZWxpbmcKK2FuZCBsb29wIGV4aXQgdGVzdCBvcHRpbWl6YXRpb25zLgorVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLWZ1bnNhZmVcLWxvb3BcLW9wdGltaXphdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZnVuc2FmZS1sb29wLW9wdGltaXphdGlvbnMiCitUaGlzIG9wdGlvbiB0ZWxscyB0aGUgbG9vcCBvcHRpbWl6ZXIgdG8gYXNzdW1lIHRoYXQgbG9vcCBpbmRpY2VzIGRvIG5vdAorb3ZlcmZsb3csIGFuZCB0aGF0IGxvb3BzIHdpdGggbm9udHJpdmlhbCBleGl0IGNvbmRpdGlvbiBhcmUgbm90CitpbmZpbml0ZS4gIFRoaXMgZW5hYmxlcyBhIHdpZGVyIHJhbmdlIG9mIGxvb3Agb3B0aW1pemF0aW9ucyBldmVuIGlmCit0aGUgbG9vcCBvcHRpbWl6ZXIgaXRzZWxmIGNhbm5vdCBwcm92ZSB0aGF0IHRoZXNlIGFzc3VtcHRpb25zIGFyZSB2YWxpZC4KK0lmIHlvdSB1c2UgXGZCXC1XdW5zYWZlXC1sb29wXC1vcHRpbWl6YXRpb25zXGZSLCB0aGUgY29tcGlsZXIgd2FybnMgeW91CitpZiBpdCBmaW5kcyB0aGlzIGtpbmQgb2YgbG9vcC4KKy5JUCAiXGZCXC1mY3Jvc3NqdW1waW5nXGZSIiA0CisuSVggSXRlbSAiLWZjcm9zc2p1bXBpbmciCitQZXJmb3JtIGNyb3NzLWp1bXBpbmcgdHJhbnNmb3JtYXRpb24uCitUaGlzIHRyYW5zZm9ybWF0aW9uIHVuaWZpZXMgZXF1aXZhbGVudCBjb2RlIGFuZCBzYXZlcyBjb2RlIHNpemUuICBUaGUKK3Jlc3VsdGluZyBjb2RlIG1heSBvciBtYXkgbm90IHBlcmZvcm0gYmV0dGVyIHRoYW4gd2l0aG91dCBjcm9zcy1qdW1waW5nLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZhdXRvXC1pbmNcLWRlY1xmUiIgNAorLklYIEl0ZW0gIi1mYXV0by1pbmMtZGVjIgorQ29tYmluZSBpbmNyZW1lbnRzIG9yIGRlY3JlbWVudHMgb2YgYWRkcmVzc2VzIHdpdGggbWVtb3J5IGFjY2Vzc2VzLgorVGhpcyBwYXNzIGlzIGFsd2F5cyBza2lwcGVkIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3QgaGF2ZQoraW5zdHJ1Y3Rpb25zIHRvIHN1cHBvcnQgdGhpcy4gIEVuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kCitoaWdoZXIgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgdGhpcy4KKy5JUCAiXGZCXC1mZGNlXGZSIiA0CisuSVggSXRlbSAiLWZkY2UiCitQZXJmb3JtIGRlYWQgY29kZSBlbGltaW5hdGlvbiAoXHMtMURDRVxzMCkgb24gXHMtMVJUTFxzMC4KK0VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mZHNlXGZSIiA0CisuSVggSXRlbSAiLWZkc2UiCitQZXJmb3JtIGRlYWQgc3RvcmUgZWxpbWluYXRpb24gKFxzLTFEU0VcczApIG9uIFxzLTFSVExcczAuCitFbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZmlmXC1jb252ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLWZpZi1jb252ZXJzaW9uIgorQXR0ZW1wdCB0byB0cmFuc2Zvcm0gY29uZGl0aW9uYWwganVtcHMgaW50byBicmFuY2gtbGVzcyBlcXVpdmFsZW50cy4gIFRoaXMKK2luY2x1ZGVzIHVzZSBvZiBjb25kaXRpb25hbCBtb3ZlcywgbWluLCBtYXgsIHNldCBmbGFncyBhbmQgYWJzIGluc3RydWN0aW9ucywgYW5kCitzb21lIHRyaWNrcyBkb2FibGUgYnkgc3RhbmRhcmQgYXJpdGhtZXRpY3MuICBUaGUgdXNlIG9mIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbgorb24gY2hpcHMgd2hlcmUgaXQgaXMgYXZhaWxhYmxlIGlzIGNvbnRyb2xsZWQgYnkgXGYoQ1dcKihDYGlmXC1jb252ZXJzaW9uMlwqKEMnXGZSLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmlmXC1jb252ZXJzaW9uMlxmUiIgNAorLklYIEl0ZW0gIi1maWYtY29udmVyc2lvbjIiCitVc2UgY29uZGl0aW9uYWwgZXhlY3V0aW9uICh3aGVyZSBhdmFpbGFibGUpIHRvIHRyYW5zZm9ybSBjb25kaXRpb25hbCBqdW1wcyBpbnRvCiticmFuY2gtbGVzcyBlcXVpdmFsZW50cy4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PXGZSLCBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZkZWxldGVcLW51bGxcLXBvaW50ZXJcLWNoZWNrc1xmUiIgNAorLklYIEl0ZW0gIi1mZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3MiCitBc3N1bWUgdGhhdCBwcm9ncmFtcyBjYW5ub3Qgc2FmZWx5IGRlcmVmZXJlbmNlIG51bGwgcG9pbnRlcnMsIGFuZCB0aGF0CitubyBjb2RlIG9yIGRhdGEgZWxlbWVudCByZXNpZGVzIHRoZXJlLiAgVGhpcyBlbmFibGVzIHNpbXBsZSBjb25zdGFudAorZm9sZGluZyBvcHRpbWl6YXRpb25zIGF0IGFsbCBvcHRpbWl6YXRpb24gbGV2ZWxzLiAgSW4gYWRkaXRpb24sIG90aGVyCitvcHRpbWl6YXRpb24gcGFzc2VzIGluIFxzLTFHQ0NcczAgdXNlIHRoaXMgZmxhZyB0byBjb250cm9sIGdsb2JhbCBkYXRhZmxvdworYW5hbHlzZXMgdGhhdCBlbGltaW5hdGUgdXNlbGVzcyBjaGVja3MgZm9yIG51bGwgcG9pbnRlcnM7IHRoZXNlIGFzc3VtZQordGhhdCBpZiBhIHBvaW50ZXIgaXMgY2hlY2tlZCBhZnRlciBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlcmVmZXJlbmNlZCwKK2l0IGNhbm5vdCBiZSBudWxsLgorLlNwCitOb3RlIGhvd2V2ZXIgdGhhdCBpbiBzb21lIGVudmlyb25tZW50cyB0aGlzIGFzc3VtcHRpb24gaXMgbm90IHRydWUuCitVc2UgXGZCXC1mbm9cLWRlbGV0ZVwtbnVsbFwtcG9pbnRlclwtY2hlY2tzXGZSIHRvIGRpc2FibGUgdGhpcyBvcHRpbWl6YXRpb24KK2ZvciBwcm9ncmFtcyB0aGF0IGRlcGVuZCBvbiB0aGF0IGJlaGF2aW9yLgorLlNwCitTb21lIHRhcmdldHMsIGVzcGVjaWFsbHkgZW1iZWRkZWQgb25lcywgZGlzYWJsZSB0aGlzIG9wdGlvbiBhdCBhbGwgbGV2ZWxzLgorT3RoZXJ3aXNlIGl0IGlzIGVuYWJsZWQgYXQgYWxsIGxldmVsczogXGZCXC1PMFxmUiwgXGZCXC1PMVxmUiwKK1wmXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4gIFBhc3NlcyB0aGF0IHVzZSB0aGUgaW5mb3JtYXRpb24KK2FyZSBlbmFibGVkIGluZGVwZW5kZW50bHkgYXQgZGlmZmVyZW50IG9wdGltaXphdGlvbiBsZXZlbHMuCisuSVAgIlxmQlwtZmRldmlydHVhbGl6ZVxmUiIgNAorLklYIEl0ZW0gIi1mZGV2aXJ0dWFsaXplIgorQXR0ZW1wdCB0byBjb252ZXJ0IGNhbGxzIHRvIHZpcnR1YWwgZnVuY3Rpb25zIHRvIGRpcmVjdCBjYWxscy4gIFRoaXMKK2lzIGRvbmUgYm90aCB3aXRoaW4gYSBwcm9jZWR1cmUgYW5kIGludGVycHJvY2VkdXJhbGx5IGFzIHBhcnQgb2YKK2luZGlyZWN0IGlubGluaW5nIChcZihDV1wqKENgXC1maW5kaXJlY3RcLWlubGluaW5nXCooQydcZlIpIGFuZCBpbnRlcnByb2NlZHVyYWwgY29uc3RhbnQKK3Byb3BhZ2F0aW9uIChcZkJcLWZpcGFcLWNwXGZSKS4KK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmV4cGVuc2l2ZVwtb3B0aW1pemF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMiCitQZXJmb3JtIGEgbnVtYmVyIG9mIG1pbm9yIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgcmVsYXRpdmVseSBleHBlbnNpdmUuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZnJlZVxmUiIgNAorLklYIEl0ZW0gIi1mcmVlIgorQXR0ZW1wdCB0byByZW1vdmUgcmVkdW5kYW50IGV4dGVuc2lvbiBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIGVzcGVjaWFsbHkKK2hlbHBmdWwgZm9yIHRoZSB4ODZcLTY0IGFyY2hpdGVjdHVyZSwgd2hpY2ggaW1wbGljaXRseSB6ZXJvLWV4dGVuZHMgaW4gNjRcLWJpdAorcmVnaXN0ZXJzIGFmdGVyIHdyaXRpbmcgdG8gdGhlaXIgbG93ZXIgMzJcLWJpdCBoYWxmLgorLlNwCitFbmFibGVkIGZvciB4ODYgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZm9wdGltaXplXC1yZWdpc3RlclwtbW92ZVxmUiIgNAorLklYIEl0ZW0gIi1mb3B0aW1pemUtcmVnaXN0ZXItbW92ZSIKKy5QRCAwCisuSVAgIlxmQlwtZnJlZ21vdmVcZlIiIDQKKy5JWCBJdGVtICItZnJlZ21vdmUiCisuUEQKK0F0dGVtcHQgdG8gcmVhc3NpZ24gcmVnaXN0ZXIgbnVtYmVycyBpbiBtb3ZlIGluc3RydWN0aW9ucyBhbmQgYXMKK29wZXJhbmRzIG9mIG90aGVyIHNpbXBsZSBpbnN0cnVjdGlvbnMgaW4gb3JkZXIgdG8gbWF4aW1pemUgdGhlIGFtb3VudCBvZgorcmVnaXN0ZXIgdHlpbmcuICBUaGlzIGlzIGVzcGVjaWFsbHkgaGVscGZ1bCBvbiBtYWNoaW5lcyB3aXRoIHR3by1vcGVyYW5kCitpbnN0cnVjdGlvbnMuCisuU3AKK05vdGUgXGZCXC1mcmVnbW92ZVxmUiBhbmQgXGZCXC1mb3B0aW1pemVcLXJlZ2lzdGVyXC1tb3ZlXGZSIGFyZSB0aGUgc2FtZQorb3B0aW1pemF0aW9uLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZpcmFcLWFsZ29yaXRobT1cZlJcZklhbGdvcml0aG1cZlIiIDQKKy5JWCBJdGVtICItZmlyYS1hbGdvcml0aG09YWxnb3JpdGhtIgorVXNlIHRoZSBzcGVjaWZpZWQgY29sb3JpbmcgYWxnb3JpdGhtIGZvciB0aGUgaW50ZWdyYXRlZCByZWdpc3RlcgorYWxsb2NhdG9yLiAgVGhlIFxmSWFsZ29yaXRobVxmUiBhcmd1bWVudCBjYW4gYmUgXGZCcHJpb3JpdHlcZlIsIHdoaWNoCitzcGVjaWZpZXMgQ2hvdydzIHByaW9yaXR5IGNvbG9yaW5nLCBvciBcZkJccy0xQ0JcczBcZlIsIHdoaWNoIHNwZWNpZmllcworQ2hhaXRpbi1CcmlnZ3MgY29sb3JpbmcuICBDaGFpdGluLUJyaWdncyBjb2xvcmluZyBpcyBub3QgaW1wbGVtZW50ZWQKK2ZvciBhbGwgYXJjaGl0ZWN0dXJlcywgYnV0IGZvciB0aG9zZSB0YXJnZXRzIHRoYXQgZG8gc3VwcG9ydCBpdCwgaXQgaXMKK3RoZSBkZWZhdWx0IGJlY2F1c2UgaXQgZ2VuZXJhdGVzIGJldHRlciBjb2RlLgorLklQICJcZkJcLWZpcmFcLXJlZ2lvbj1cZlJcZklyZWdpb25cZlIiIDQKKy5JWCBJdGVtICItZmlyYS1yZWdpb249cmVnaW9uIgorVXNlIHNwZWNpZmllZCByZWdpb25zIGZvciB0aGUgaW50ZWdyYXRlZCByZWdpc3RlciBhbGxvY2F0b3IuICBUaGUKK1wmXGZJcmVnaW9uXGZSIGFyZ3VtZW50IHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKy5SUyA0CisuSVAgIlxmQmFsbFxmUiIgNAorLklYIEl0ZW0gImFsbCIKK1VzZSBhbGwgbG9vcHMgYXMgcmVnaXN0ZXIgYWxsb2NhdGlvbiByZWdpb25zLgorVGhpcyBjYW4gZ2l2ZSB0aGUgYmVzdCByZXN1bHRzIGZvciBtYWNoaW5lcyB3aXRoIGEgc21hbGwgYW5kL29yCitpcnJlZ3VsYXIgcmVnaXN0ZXIgc2V0LgorLklQICJcZkJtaXhlZFxmUiIgNAorLklYIEl0ZW0gIm1peGVkIgorVXNlIGFsbCBsb29wcyBleGNlcHQgZm9yIGxvb3BzIHdpdGggc21hbGwgcmVnaXN0ZXIgcHJlc3N1cmUgCithcyB0aGUgcmVnaW9ucy4gIFRoaXMgdmFsdWUgdXN1YWxseSBnaXZlcwordGhlIGJlc3QgcmVzdWx0cyBpbiBtb3N0IGNhc2VzIGFuZCBmb3IgbW9zdCBhcmNoaXRlY3R1cmVzLAorYW5kIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGNvbXBpbGluZyB3aXRoIG9wdGltaXphdGlvbiBmb3Igc3BlZWQKKyhcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIC4uLikuCisuSVAgIlxmQm9uZVxmUiIgNAorLklYIEl0ZW0gIm9uZSIKK1VzZSBhbGwgZnVuY3Rpb25zIGFzIGEgc2luZ2xlIHJlZ2lvbi4gIAorVGhpcyB0eXBpY2FsbHkgcmVzdWx0cyBpbiB0aGUgc21hbGxlc3QgY29kZSBzaXplLCBhbmQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvcgorXCZcZkJcLU9zXGZSIG9yIFxmQlwtTzBcZlIuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1maXJhXC1ob2lzdFwtcHJlc3N1cmVcZlIiIDQKKy5JWCBJdGVtICItZmlyYS1ob2lzdC1wcmVzc3VyZSIKK1VzZSBccy0xSVJBXHMwIHRvIGV2YWx1YXRlIHJlZ2lzdGVyIHByZXNzdXJlIGluIHRoZSBjb2RlIGhvaXN0aW5nIHBhc3MgZm9yCitkZWNpc2lvbnMgdG8gaG9pc3QgZXhwcmVzc2lvbnMuICBUaGlzIG9wdGlvbiB1c3VhbGx5IHJlc3VsdHMgaW4gc21hbGxlcgorY29kZSwgYnV0IGl0IGNhbiBzbG93IHRoZSBjb21waWxlciBkb3duLgorLlNwCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGF0IGxldmVsIFxmQlwtT3NcZlIgZm9yIGFsbCB0YXJnZXRzLgorLklQICJcZkJcLWZpcmFcLWxvb3BcLXByZXNzdXJlXGZSIiA0CisuSVggSXRlbSAiLWZpcmEtbG9vcC1wcmVzc3VyZSIKK1VzZSBccy0xSVJBXHMwIHRvIGV2YWx1YXRlIHJlZ2lzdGVyIHByZXNzdXJlIGluIGxvb3BzIGZvciBkZWNpc2lvbnMgdG8gbW92ZQorbG9vcCBpbnZhcmlhbnRzLiAgVGhpcyBvcHRpb24gdXN1YWxseSByZXN1bHRzIGluIGdlbmVyYXRpb24KK29mIGZhc3RlciBhbmQgc21hbGxlciBjb2RlIG9uIG1hY2hpbmVzIHdpdGggbGFyZ2UgcmVnaXN0ZXIgZmlsZXMgKD49IDMyCityZWdpc3RlcnMpLCBidXQgaXQgY2FuIHNsb3cgdGhlIGNvbXBpbGVyIGRvd24uCisuU3AKK1RoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYXQgbGV2ZWwgXGZCXC1PM1xmUiBmb3Igc29tZSB0YXJnZXRzLgorLklQICJcZkJcLWZub1wtaXJhXC1zaGFyZVwtc2F2ZVwtc2xvdHNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWlyYS1zaGFyZS1zYXZlLXNsb3RzIgorRGlzYWJsZSBzaGFyaW5nIG9mIHN0YWNrIHNsb3RzIHVzZWQgZm9yIHNhdmluZyBjYWxsLXVzZWQgaGFyZAorcmVnaXN0ZXJzIGxpdmluZyB0aHJvdWdoIGEgY2FsbC4gIEVhY2ggaGFyZCByZWdpc3RlciBnZXRzIGEKK3NlcGFyYXRlIHN0YWNrIHNsb3QsIGFuZCBhcyBhIHJlc3VsdCBmdW5jdGlvbiBzdGFjayBmcmFtZXMgYXJlCitsYXJnZXIuCisuSVAgIlxmQlwtZm5vXC1pcmFcLXNoYXJlXC1zcGlsbFwtc2xvdHNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWlyYS1zaGFyZS1zcGlsbC1zbG90cyIKK0Rpc2FibGUgc2hhcmluZyBvZiBzdGFjayBzbG90cyBhbGxvY2F0ZWQgZm9yIHBzZXVkby1yZWdpc3RlcnMuICBFYWNoCitwc2V1ZG8tcmVnaXN0ZXIgdGhhdCBkb2VzIG5vdCBnZXQgYSBoYXJkIHJlZ2lzdGVyIGdldHMgYSBzZXBhcmF0ZQorc3RhY2sgc2xvdCwgYW5kIGFzIGEgcmVzdWx0IGZ1bmN0aW9uIHN0YWNrIGZyYW1lcyBhcmUgbGFyZ2VyLgorLklQICJcZkJcLWZpcmFcLXZlcmJvc2U9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1maXJhLXZlcmJvc2U9biIKK0NvbnRyb2wgdGhlIHZlcmJvc2l0eSBvZiB0aGUgZHVtcCBmaWxlIGZvciB0aGUgaW50ZWdyYXRlZCByZWdpc3RlciBhbGxvY2F0b3IuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1LiAgSWYgdGhlIHZhbHVlIFxmSW5cZlIgaXMgZ3JlYXRlciBvciBlcXVhbCB0byAxMCwKK3RoZSBkdW1wIG91dHB1dCBpcyBzZW50IHRvIHN0ZGVyciB1c2luZyB0aGUgc2FtZSBmb3JtYXQgYXMgXGZJblxmUiBtaW51cyAxMC4KKy5JUCAiXGZCXC1mZGVsYXllZFwtYnJhbmNoXGZSIiA0CisuSVggSXRlbSAiLWZkZWxheWVkLWJyYW5jaCIKK0lmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBhdHRlbXB0IHRvIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zCit0byBleHBsb2l0IGluc3RydWN0aW9uIHNsb3RzIGF2YWlsYWJsZSBhZnRlciBkZWxheWVkIGJyYW5jaAoraW5zdHJ1Y3Rpb25zLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZnNjaGVkdWxlXC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWR1bGUtaW5zbnMiCitJZiBzdXBwb3J0ZWQgZm9yIHRoZSB0YXJnZXQgbWFjaGluZSwgYXR0ZW1wdCB0byByZW9yZGVyIGluc3RydWN0aW9ucyB0bworZWxpbWluYXRlIGV4ZWN1dGlvbiBzdGFsbHMgZHVlIHRvIHJlcXVpcmVkIGRhdGEgYmVpbmcgdW5hdmFpbGFibGUuICBUaGlzCitoZWxwcyBtYWNoaW5lcyB0aGF0IGhhdmUgc2xvdyBmbG9hdGluZyBwb2ludCBvciBtZW1vcnkgbG9hZCBpbnN0cnVjdGlvbnMKK2J5IGFsbG93aW5nIG90aGVyIGluc3RydWN0aW9ucyB0byBiZSBpc3N1ZWQgdW50aWwgdGhlIHJlc3VsdCBvZiB0aGUgbG9hZAorb3IgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb24gaXMgcmVxdWlyZWQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZnNjaGVkdWxlXC1pbnNuczJcZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkdWxlLWluc25zMiIKK1NpbWlsYXIgdG8gXGZCXC1mc2NoZWR1bGVcLWluc25zXGZSLCBidXQgcmVxdWVzdHMgYW4gYWRkaXRpb25hbCBwYXNzIG9mCitpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24gaGFzIGJlZW4gZG9uZS4gIFRoaXMgaXMKK2VzcGVjaWFsbHkgdXNlZnVsIG9uIG1hY2hpbmVzIHdpdGggYSByZWxhdGl2ZWx5IHNtYWxsIG51bWJlciBvZgorcmVnaXN0ZXJzIGFuZCB3aGVyZSBtZW1vcnkgbG9hZCBpbnN0cnVjdGlvbnMgdGFrZSBtb3JlIHRoYW4gb25lIGN5Y2xlLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZub1wtc2NoZWRcLWludGVyYmxvY2tcZlIiIDQKKy5JWCBJdGVtICItZm5vLXNjaGVkLWludGVyYmxvY2siCitEb24ndCBzY2hlZHVsZSBpbnN0cnVjdGlvbnMgYWNyb3NzIGJhc2ljIGJsb2Nrcy4gIFRoaXMgaXMgbm9ybWFsbHkKK2VuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGkuZS4KK3dpdGggXGZCXC1mc2NoZWR1bGVcLWluc25zXGZSIG9yIGF0IFxmQlwtTzJcZlIgb3IgaGlnaGVyLgorLklQICJcZkJcLWZub1wtc2NoZWRcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItZm5vLXNjaGVkLXNwZWMiCitEb24ndCBhbGxvdyBzcGVjdWxhdGl2ZSBtb3Rpb24gb2Ygbm9uLWxvYWQgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBpcyBub3JtYWxseQorZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gc2NoZWR1bGluZyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaS5lLgord2l0aCBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIgb3IgYXQgXGZCXC1PMlxmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtZnNjaGVkXC1wcmVzc3VyZVxmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtcHJlc3N1cmUiCitFbmFibGUgcmVnaXN0ZXIgcHJlc3N1cmUgc2Vuc2l0aXZlIGluc24gc2NoZWR1bGluZyBiZWZvcmUgcmVnaXN0ZXIKK2FsbG9jYXRpb24uICBUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiBzY2hlZHVsaW5nIGJlZm9yZSByZWdpc3RlcgorYWxsb2NhdGlvbiBpcyBlbmFibGVkLCBpLmUuIHdpdGggXGZCXC1mc2NoZWR1bGVcLWluc25zXGZSIG9yIGF0CitcJlxmQlwtTzJcZlIgb3IgaGlnaGVyLiAgVXNhZ2Ugb2YgdGhpcyBvcHRpb24gY2FuIGltcHJvdmUgdGhlCitnZW5lcmF0ZWQgY29kZSBhbmQgZGVjcmVhc2UgaXRzIHNpemUgYnkgcHJldmVudGluZyByZWdpc3RlciBwcmVzc3VyZQoraW5jcmVhc2UgYWJvdmUgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgaGFyZCByZWdpc3RlcnMgYW5kIHN1YnNlcXVlbnQKK3NwaWxscyBpbiByZWdpc3RlciBhbGxvY2F0aW9uLgorLklQICJcZkJcLWZzY2hlZFwtc3BlY1wtbG9hZFxmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtc3BlYy1sb2FkIgorQWxsb3cgc3BlY3VsYXRpdmUgbW90aW9uIG9mIHNvbWUgbG9hZCBpbnN0cnVjdGlvbnMuICBUaGlzIG9ubHkgbWFrZXMKK3NlbnNlIHdoZW4gc2NoZWR1bGluZyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaS5lLiB3aXRoCitcJlxmQlwtZnNjaGVkdWxlXC1pbnNuc1xmUiBvciBhdCBcZkJcLU8yXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1mc2NoZWRcLXNwZWNcLWxvYWRcLWRhbmdlcm91c1xmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtc3BlYy1sb2FkLWRhbmdlcm91cyIKK0FsbG93IHNwZWN1bGF0aXZlIG1vdGlvbiBvZiBtb3JlIGxvYWQgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBvbmx5IG1ha2VzCitzZW5zZSB3aGVuIHNjaGVkdWxpbmcgYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGkuZS4gd2l0aAorXCZcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIgb3IgYXQgXGZCXC1PMlxmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtc3RhbGxlZC1pbnNucyIKKy5QRCAwCisuSVAgIlxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNucz1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1zdGFsbGVkLWluc25zPW4iCisuUEQKK0RlZmluZSBob3cgbWFueSBpbnNucyAoaWYgYW55KSBjYW4gYmUgbW92ZWQgcHJlbWF0dXJlbHkgZnJvbSB0aGUgcXVldWUKK29mIHN0YWxsZWQgaW5zbnMgaW50byB0aGUgcmVhZHkgbGlzdCBkdXJpbmcgdGhlIHNlY29uZCBzY2hlZHVsaW5nIHBhc3MuCitcJlxmQlwtZm5vXC1zY2hlZFwtc3RhbGxlZFwtaW5zbnNcZlIgbWVhbnMgdGhhdCBubyBpbnNucyBhcmUgbW92ZWQKK3ByZW1hdHVyZWx5LCBcZkJcLWZzY2hlZFwtc3RhbGxlZFwtaW5zbnM9MFxmUiBtZWFucyB0aGVyZSBpcyBubyBsaW1pdAorb24gaG93IG1hbnkgcXVldWVkIGluc25zIGNhbiBiZSBtb3ZlZCBwcmVtYXR1cmVseS4KK1wmXGZCXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zXGZSIHdpdGhvdXQgYSB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvCitcJlxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNucz0xXGZSLgorLklQICJcZkJcLWZzY2hlZFwtc3RhbGxlZFwtaW5zbnNcLWRlcFxmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtc3RhbGxlZC1pbnNucy1kZXAiCisuUEQgMAorLklQICJcZkJcLWZzY2hlZFwtc3RhbGxlZFwtaW5zbnNcLWRlcD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1zdGFsbGVkLWluc25zLWRlcD1uIgorLlBECitEZWZpbmUgaG93IG1hbnkgaW5zbiBncm91cHMgKGN5Y2xlcykgYXJlIGV4YW1pbmVkIGZvciBhIGRlcGVuZGVuY3kKK29uIGEgc3RhbGxlZCBpbnNuIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIHByZW1hdHVyZSByZW1vdmFsIGZyb20gdGhlIHF1ZXVlCitvZiBzdGFsbGVkIGluc25zLiAgVGhpcyBoYXMgYW4gZWZmZWN0IG9ubHkgZHVyaW5nIHRoZSBzZWNvbmQgc2NoZWR1bGluZyBwYXNzLAorYW5kIG9ubHkgaWYgXGZCXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zXGZSIGlzIHVzZWQuCitcJlxmQlwtZm5vXC1zY2hlZFwtc3RhbGxlZFwtaW5zbnNcLWRlcFxmUiBpcyBlcXVpdmFsZW50IHRvCitcJlxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNuc1wtZGVwPTBcZlIuCitcJlxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNuc1wtZGVwXGZSIHdpdGhvdXQgYSB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvCitcJlxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNuc1wtZGVwPTFcZlIuCisuSVAgIlxmQlwtZnNjaGVkMlwtdXNlXC1zdXBlcmJsb2Nrc1xmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQyLXVzZS1zdXBlcmJsb2NrcyIKK1doZW4gc2NoZWR1bGluZyBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uLCB1c2Ugc3VwZXJibG9jayBzY2hlZHVsaW5nLgorVGhpcyBhbGxvd3MgbW90aW9uIGFjcm9zcyBiYXNpYyBibG9jayBib3VuZGFyaWVzLAorcmVzdWx0aW5nIGluIGZhc3RlciBzY2hlZHVsZXMuICBUaGlzIG9wdGlvbiBpcyBleHBlcmltZW50YWwsIGFzIG5vdCBhbGwgbWFjaGluZQorZGVzY3JpcHRpb25zIHVzZWQgYnkgXHMtMUdDQ1xzMCBtb2RlbCB0aGUgXHMtMUNQVVxzMCBjbG9zZWx5IGVub3VnaCB0byBhdm9pZCB1bnJlbGlhYmxlCityZXN1bHRzIGZyb20gdGhlIGFsZ29yaXRobS4KKy5TcAorVGhpcyBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gc2NoZWR1bGluZyBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uLCBpLmUuIHdpdGgKK1wmXGZCXC1mc2NoZWR1bGVcLWluc25zMlxmUiBvciBhdCBcZkJcLU8yXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1mc2NoZWRcLWdyb3VwXC1oZXVyaXN0aWNcZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLWdyb3VwLWhldXJpc3RpYyIKK0VuYWJsZSB0aGUgZ3JvdXAgaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzIGhldXJpc3RpYyBmYXZvcnMKK3RoZSBpbnN0cnVjdGlvbiB0aGF0IGJlbG9uZ3MgdG8gYSBzY2hlZHVsZSBncm91cC4gIFRoaXMgaXMgZW5hYmxlZAorYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCwgaS5lLiB3aXRoIFxmQlwtZnNjaGVkdWxlXC1pbnNuc1xmUgorb3IgXGZCXC1mc2NoZWR1bGVcLWluc25zMlxmUiBvciBhdCBcZkJcLU8yXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1mc2NoZWRcLWNyaXRpY2FsXC1wYXRoXC1oZXVyaXN0aWNcZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLWNyaXRpY2FsLXBhdGgtaGV1cmlzdGljIgorRW5hYmxlIHRoZSBjcml0aWNhbC1wYXRoIGhldXJpc3RpYyBpbiB0aGUgc2NoZWR1bGVyLiAgVGhpcyBoZXVyaXN0aWMgZmF2b3JzCitpbnN0cnVjdGlvbnMgb24gdGhlIGNyaXRpY2FsIHBhdGguICBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuCitzY2hlZHVsaW5nIGlzIGVuYWJsZWQsIGkuZS4gd2l0aCBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIKK29yIFxmQlwtZnNjaGVkdWxlXC1pbnNuczJcZlIgb3IgYXQgXGZCXC1PMlxmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtZnNjaGVkXC1zcGVjXC1pbnNuXC1oZXVyaXN0aWNcZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLXNwZWMtaW5zbi1oZXVyaXN0aWMiCitFbmFibGUgdGhlIHNwZWN1bGF0aXZlIGluc3RydWN0aW9uIGhldXJpc3RpYyBpbiB0aGUgc2NoZWR1bGVyLiAgVGhpcworaGV1cmlzdGljIGZhdm9ycyBzcGVjdWxhdGl2ZSBpbnN0cnVjdGlvbnMgd2l0aCBncmVhdGVyIGRlcGVuZGVuY3kgd2Vha25lc3MuCitUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCwgaS5lLgord2l0aCBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIgb3IgXGZCXC1mc2NoZWR1bGVcLWluc25zMlxmUgorb3IgYXQgXGZCXC1PMlxmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtZnNjaGVkXC1yYW5rXC1oZXVyaXN0aWNcZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLXJhbmstaGV1cmlzdGljIgorRW5hYmxlIHRoZSByYW5rIGhldXJpc3RpYyBpbiB0aGUgc2NoZWR1bGVyLiAgVGhpcyBoZXVyaXN0aWMgZmF2b3JzCit0aGUgaW5zdHJ1Y3Rpb24gYmVsb25naW5nIHRvIGEgYmFzaWMgYmxvY2sgd2l0aCBncmVhdGVyIHNpemUgb3IgZnJlcXVlbmN5LgorVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBzY2hlZHVsaW5nIGlzIGVuYWJsZWQsIGkuZS4KK3dpdGggXGZCXC1mc2NoZWR1bGVcLWluc25zXGZSIG9yIFxmQlwtZnNjaGVkdWxlXC1pbnNuczJcZlIgb3IKK2F0IFxmQlwtTzJcZlIgb3IgaGlnaGVyLgorLklQICJcZkJcLWZzY2hlZFwtbGFzdFwtaW5zblwtaGV1cmlzdGljXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1sYXN0LWluc24taGV1cmlzdGljIgorRW5hYmxlIHRoZSBsYXN0LWluc3RydWN0aW9uIGhldXJpc3RpYyBpbiB0aGUgc2NoZWR1bGVyLiAgVGhpcyBoZXVyaXN0aWMKK2Zhdm9ycyB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBsZXNzIGRlcGVuZGVudCBvbiB0aGUgbGFzdCBpbnN0cnVjdGlvbgorc2NoZWR1bGVkLiAgVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBzY2hlZHVsaW5nIGlzIGVuYWJsZWQsCitpLmUuIHdpdGggXGZCXC1mc2NoZWR1bGVcLWluc25zXGZSIG9yIFxmQlwtZnNjaGVkdWxlXC1pbnNuczJcZlIgb3IKK2F0IFxmQlwtTzJcZlIgb3IgaGlnaGVyLgorLklQICJcZkJcLWZzY2hlZFwtZGVwXC1jb3VudFwtaGV1cmlzdGljXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1kZXAtY291bnQtaGV1cmlzdGljIgorRW5hYmxlIHRoZSBkZXBlbmRlbnQtY291bnQgaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzIGhldXJpc3RpYworZmF2b3JzIHRoZSBpbnN0cnVjdGlvbiB0aGF0IGhhcyBtb3JlIGluc3RydWN0aW9ucyBkZXBlbmRpbmcgb24gaXQuCitUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCwgaS5lLgord2l0aCBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIgb3IgXGZCXC1mc2NoZWR1bGVcLWluc25zMlxmUiBvcgorYXQgXGZCXC1PMlxmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtZnJlc2NoZWR1bGVcLW1vZHVsb1wtc2NoZWR1bGVkXC1sb29wc1xmUiIgNAorLklYIEl0ZW0gIi1mcmVzY2hlZHVsZS1tb2R1bG8tc2NoZWR1bGVkLWxvb3BzIgorTW9kdWxvIHNjaGVkdWxpbmcgaXMgcGVyZm9ybWVkIGJlZm9yZSB0cmFkaXRpb25hbCBzY2hlZHVsaW5nLiAgSWYgYSBsb29wCitpcyBtb2R1bG8gc2NoZWR1bGVkLCBsYXRlciBzY2hlZHVsaW5nIHBhc3NlcyBtYXkgY2hhbmdlIGl0cyBzY2hlZHVsZS4gIAorVXNlIHRoaXMgb3B0aW9uIHRvIGNvbnRyb2wgdGhhdCBiZWhhdmlvci4KKy5JUCAiXGZCXC1mc2VsZWN0aXZlXC1zY2hlZHVsaW5nXGZSIiA0CisuSVggSXRlbSAiLWZzZWxlY3RpdmUtc2NoZWR1bGluZyIKK1NjaGVkdWxlIGluc3RydWN0aW9ucyB1c2luZyBzZWxlY3RpdmUgc2NoZWR1bGluZyBhbGdvcml0aG0uICBTZWxlY3RpdmUKK3NjaGVkdWxpbmcgcnVucyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBzY2hlZHVsZXIgcGFzcy4KKy5JUCAiXGZCXC1mc2VsZWN0aXZlXC1zY2hlZHVsaW5nMlxmUiIgNAorLklYIEl0ZW0gIi1mc2VsZWN0aXZlLXNjaGVkdWxpbmcyIgorU2NoZWR1bGUgaW5zdHJ1Y3Rpb25zIHVzaW5nIHNlbGVjdGl2ZSBzY2hlZHVsaW5nIGFsZ29yaXRobS4gIFNlbGVjdGl2ZQorc2NoZWR1bGluZyBydW5zIGluc3RlYWQgb2YgdGhlIHNlY29uZCBzY2hlZHVsZXIgcGFzcy4KKy5JUCAiXGZCXC1mc2VsXC1zY2hlZFwtcGlwZWxpbmluZ1xmUiIgNAorLklYIEl0ZW0gIi1mc2VsLXNjaGVkLXBpcGVsaW5pbmciCitFbmFibGUgc29mdHdhcmUgcGlwZWxpbmluZyBvZiBpbm5lcm1vc3QgbG9vcHMgZHVyaW5nIHNlbGVjdGl2ZSBzY2hlZHVsaW5nLgorVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCB1bmxlc3Mgb25lIG9mIFxmQlwtZnNlbGVjdGl2ZVwtc2NoZWR1bGluZ1xmUiBvcgorXCZcZkJcLWZzZWxlY3RpdmVcLXNjaGVkdWxpbmcyXGZSIGlzIHR1cm5lZCBvbi4KKy5JUCAiXGZCXC1mc2VsXC1zY2hlZFwtcGlwZWxpbmluZ1wtb3V0ZXJcLWxvb3BzXGZSIiA0CisuSVggSXRlbSAiLWZzZWwtc2NoZWQtcGlwZWxpbmluZy1vdXRlci1sb29wcyIKK1doZW4gcGlwZWxpbmluZyBsb29wcyBkdXJpbmcgc2VsZWN0aXZlIHNjaGVkdWxpbmcsIGFsc28gcGlwZWxpbmUgb3V0ZXIgbG9vcHMuCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IHVubGVzcyBcZkJcLWZzZWxcLXNjaGVkXC1waXBlbGluaW5nXGZSIGlzIHR1cm5lZCBvbi4KKy5JUCAiXGZCXC1mc2hyaW5rXC13cmFwXGZSIiA0CisuSVggSXRlbSAiLWZzaHJpbmstd3JhcCIKK0VtaXQgZnVuY3Rpb24gcHJvbG9ndWVzIG9ubHkgYmVmb3JlIHBhcnRzIG9mIHRoZSBmdW5jdGlvbiB0aGF0IG5lZWQgaXQsCityYXRoZXIgdGhhbiBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQKK1wmXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZmNhbGxlclwtc2F2ZXNcZlIiIDQKKy5JWCBJdGVtICItZmNhbGxlci1zYXZlcyIKK0VuYWJsZSBhbGxvY2F0aW9uIG9mIHZhbHVlcyB0byByZWdpc3RlcnMgdGhhdCBhcmUgY2xvYmJlcmVkIGJ5CitmdW5jdGlvbiBjYWxscywgYnkgZW1pdHRpbmcgZXh0cmEgaW5zdHJ1Y3Rpb25zIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlCityZWdpc3RlcnMgYXJvdW5kIHN1Y2ggY2FsbHMuICBTdWNoIGFsbG9jYXRpb24gaXMgZG9uZSBvbmx5IHdoZW4gaXQKK3NlZW1zIHRvIHJlc3VsdCBpbiBiZXR0ZXIgY29kZS4KKy5TcAorVGhpcyBvcHRpb24gaXMgYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBjZXJ0YWluIG1hY2hpbmVzLCB1c3VhbGx5Cit0aG9zZSB3aGljaCBoYXZlIG5vIGNhbGwtcHJlc2VydmVkIHJlZ2lzdGVycyB0byB1c2UgaW5zdGVhZC4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mY29tYmluZVwtc3RhY2tcLWFkanVzdG1lbnRzXGZSIiA0CisuSVggSXRlbSAiLWZjb21iaW5lLXN0YWNrLWFkanVzdG1lbnRzIgorVHJhY2tzIHN0YWNrIGFkanVzdG1lbnRzIChwdXNoZXMgYW5kIHBvcHMpIGFuZCBzdGFjayBtZW1vcnkgcmVmZXJlbmNlcworYW5kIHRoZW4gdHJpZXMgdG8gZmluZCB3YXlzIHRvIGNvbWJpbmUgdGhlbS4KKy5TcAorRW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtTzFcZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mY29uc2VydmVcLXN0YWNrXGZSIiA0CisuSVggSXRlbSAiLWZjb25zZXJ2ZS1zdGFjayIKK0F0dGVtcHQgdG8gbWluaW1pemUgc3RhY2sgdXNhZ2UuICBUaGUgY29tcGlsZXIgYXR0ZW1wdHMgdG8gdXNlIGxlc3MKK3N0YWNrIHNwYWNlLCBldmVuIGlmIHRoYXQgbWFrZXMgdGhlIHByb2dyYW0gc2xvd2VyLiAgVGhpcyBvcHRpb24KK2ltcGxpZXMgc2V0dGluZyB0aGUgXGZCbGFyZ2Utc3RhY2stZnJhbWVcZlIgcGFyYW1ldGVyIHRvIDEwMAorYW5kIHRoZSBcZkJsYXJnZS1zdGFjay1mcmFtZS1ncm93dGhcZlIgcGFyYW1ldGVyIHRvIDQwMC4KKy5JUCAiXGZCXC1mdHJlZVwtcmVhc3NvY1xmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1yZWFzc29jIgorUGVyZm9ybSByZWFzc29jaWF0aW9uIG9uIHRyZWVzLiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLXByZVxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1wcmUiCitQZXJmb3JtIHBhcnRpYWwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiAoXHMtMVBSRVxzMCkgb24gdHJlZXMuICBUaGlzIGZsYWcgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU8yXGZSIGFuZCBcZkJcLU8zXGZSLgorLklQICJcZkJcLWZ0cmVlXC1wYXJ0aWFsXC1wcmVcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtcGFydGlhbC1wcmUiCitNYWtlIHBhcnRpYWwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiAoXHMtMVBSRVxzMCkgbW9yZSBhZ2dyZXNzaXZlLiAgVGhpcyBmbGFnIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mdHJlZVwtZm9yd3Byb3BcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtZm9yd3Byb3AiCitQZXJmb3JtIGZvcndhcmQgcHJvcGFnYXRpb24gb24gdHJlZXMuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0CithdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtZnJlXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWZyZSIKK1BlcmZvcm0gZnVsbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uIChccy0xRlJFXHMwKSBvbiB0cmVlcy4gIFRoZSBkaWZmZXJlbmNlCitiZXR3ZWVuIFxzLTFGUkVcczAgYW5kIFxzLTFQUkVcczAgaXMgdGhhdCBccy0xRlJFXHMwIG9ubHkgY29uc2lkZXJzIGV4cHJlc3Npb25zCit0aGF0IGFyZSBjb21wdXRlZCBvbiBhbGwgcGF0aHMgbGVhZGluZyB0byB0aGUgcmVkdW5kYW50IGNvbXB1dGF0aW9uLgorVGhpcyBhbmFseXNpcyBpcyBmYXN0ZXIgdGhhbiBccy0xUFJFXHMwLCB0aG91Z2ggaXQgZXhwb3NlcyBmZXdlciByZWR1bmRhbmNpZXMuCitUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1waGlwcm9wXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXBoaXByb3AiCitQZXJmb3JtIGhvaXN0aW5nIG9mIGxvYWRzIGZyb20gY29uZGl0aW9uYWwgcG9pbnRlcnMgb24gdHJlZXMuICBUaGlzCitwYXNzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1maG9pc3RcLWFkamFjZW50XC1sb2Fkc1xmUiIgNAorLklYIEl0ZW0gIi1maG9pc3QtYWRqYWNlbnQtbG9hZHMiCitTcGVjdWxhdGl2ZWx5IGhvaXN0IGxvYWRzIGZyb20gYm90aCBicmFuY2hlcyBvZiBhbiBpZi10aGVuLWVsc2UgaWYgdGhlCitsb2FkcyBhcmUgZnJvbSBhZGphY2VudCBsb2NhdGlvbnMgaW4gdGhlIHNhbWUgc3RydWN0dXJlIGFuZCB0aGUgdGFyZ2V0CithcmNoaXRlY3R1cmUgaGFzIGEgY29uZGl0aW9uYWwgbW92ZSBpbnN0cnVjdGlvbi4gIFRoaXMgZmxhZyBpcyBlbmFibGVkCitieSBkZWZhdWx0IGF0IFxmQlwtTzJcZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtY29weVwtcHJvcFxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1jb3B5LXByb3AiCitQZXJmb3JtIGNvcHkgcHJvcGFnYXRpb24gb24gdHJlZXMuICBUaGlzIHBhc3MgZWxpbWluYXRlcyB1bm5lY2Vzc2FyeQorY29weSBvcGVyYXRpb25zLiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kCitoaWdoZXIuCisuSVAgIlxmQlwtZmlwYVwtcHVyZVwtY29uc3RcZlIiIDQKKy5JWCBJdGVtICItZmlwYS1wdXJlLWNvbnN0IgorRGlzY292ZXIgd2hpY2ggZnVuY3Rpb25zIGFyZSBwdXJlIG9yIGNvbnN0YW50LgorRW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZpcGFcLXJlZmVyZW5jZVxmUiIgNAorLklYIEl0ZW0gIi1maXBhLXJlZmVyZW5jZSIKK0Rpc2NvdmVyIHdoaWNoIHN0YXRpYyB2YXJpYWJsZXMgZG8gbm90IGVzY2FwZSB0aGUKK2NvbXBpbGF0aW9uIHVuaXQuCitFbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZmlwYVwtcHRhXGZSIiA0CisuSVggSXRlbSAiLWZpcGEtcHRhIgorUGVyZm9ybSBpbnRlcnByb2NlZHVyYWwgcG9pbnRlciBhbmFseXNpcyBhbmQgaW50ZXJwcm9jZWR1cmFsIG1vZGlmaWNhdGlvbgorYW5kIHJlZmVyZW5jZSBhbmFseXNpcy4gIFRoaXMgb3B0aW9uIGNhbiBjYXVzZSBleGNlc3NpdmUgbWVtb3J5IGFuZAorY29tcGlsZS10aW1lIHVzYWdlIG9uIGxhcmdlIGNvbXBpbGF0aW9uIHVuaXRzLiAgSXQgaXMgbm90IGVuYWJsZWQgYnkKK2RlZmF1bHQgYXQgYW55IG9wdGltaXphdGlvbiBsZXZlbC4KKy5JUCAiXGZCXC1maXBhXC1wcm9maWxlXGZSIiA0CisuSVggSXRlbSAiLWZpcGEtcHJvZmlsZSIKK1BlcmZvcm0gaW50ZXJwcm9jZWR1cmFsIHByb2ZpbGUgcHJvcGFnYXRpb24uICBUaGUgZnVuY3Rpb25zIGNhbGxlZCBvbmx5IGZyb20KK2NvbGQgZnVuY3Rpb25zIGFyZSBtYXJrZWQgYXMgY29sZC4gQWxzbyBmdW5jdGlvbnMgZXhlY3V0ZWQgb25jZSAoc3VjaCBhcworXCZcZihDV1wqKENgY29sZFwqKEMnXGZSLCBcZihDV1wqKENgbm9yZXR1cm5cKihDJ1xmUiwgc3RhdGljIGNvbnN0cnVjdG9ycyBvciBkZXN0cnVjdG9ycykgYXJlIGlkZW50aWZpZWQuIENvbGQKK2Z1bmN0aW9ucyBhbmQgbG9vcCBsZXNzIHBhcnRzIG9mIGZ1bmN0aW9ucyBleGVjdXRlZCBvbmNlIGFyZSB0aGVuIG9wdGltaXplZCBmb3IKK3NpemUuCitFbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZmlwYVwtY3BcZlIiIDQKKy5JWCBJdGVtICItZmlwYS1jcCIKK1BlcmZvcm0gaW50ZXJwcm9jZWR1cmFsIGNvbnN0YW50IHByb3BhZ2F0aW9uLgorVGhpcyBvcHRpbWl6YXRpb24gYW5hbHl6ZXMgdGhlIHByb2dyYW0gdG8gZGV0ZXJtaW5lIHdoZW4gdmFsdWVzIHBhc3NlZAordG8gZnVuY3Rpb25zIGFyZSBjb25zdGFudHMgYW5kIHRoZW4gb3B0aW1pemVzIGFjY29yZGluZ2x5LgorVGhpcyBvcHRpbWl6YXRpb24gY2FuIHN1YnN0YW50aWFsbHkgaW5jcmVhc2UgcGVyZm9ybWFuY2UKK2lmIHRoZSBhcHBsaWNhdGlvbiBoYXMgY29uc3RhbnRzIHBhc3NlZCB0byBmdW5jdGlvbnMuCitUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtTzJcZlIsIFxmQlwtT3NcZlIgYW5kIFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZmlwYVwtY3BcLWNsb25lXGZSIiA0CisuSVggSXRlbSAiLWZpcGEtY3AtY2xvbmUiCitQZXJmb3JtIGZ1bmN0aW9uIGNsb25pbmcgdG8gbWFrZSBpbnRlcnByb2NlZHVyYWwgY29uc3RhbnQgcHJvcGFnYXRpb24gc3Ryb25nZXIuCitXaGVuIGVuYWJsZWQsIGludGVycHJvY2VkdXJhbCBjb25zdGFudCBwcm9wYWdhdGlvbiBwZXJmb3JtcyBmdW5jdGlvbiBjbG9uaW5nCit3aGVuIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGggY29uc3RhbnQgYXJndW1lbnRzLgorQmVjYXVzZSB0aGlzIG9wdGltaXphdGlvbiBjYW4gY3JlYXRlIG11bHRpcGxlIGNvcGllcyBvZiBmdW5jdGlvbnMsCitpdCBtYXkgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSBjb2RlIHNpemUKKyhzZWUgXGZCXC1cLXBhcmFtIGlwY3BcLXVuaXRcLWdyb3d0aD1cZlJcZkl2YWx1ZVxmUikuCitUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZnRyZWVcLXNpbmtcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtc2luayIKK1BlcmZvcm0gZm9yd2FyZCBzdG9yZSBtb3Rpb24gIG9uIHRyZWVzLiAgVGhpcyBmbGFnIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLWJpdFwtY2NwXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWJpdC1jY3AiCitQZXJmb3JtIHNwYXJzZSBjb25kaXRpb25hbCBiaXQgY29uc3RhbnQgcHJvcGFnYXRpb24gb24gdHJlZXMgYW5kIHByb3BhZ2F0ZQorcG9pbnRlciBhbGlnbm1lbnQgaW5mb3JtYXRpb24uCitUaGlzIHBhc3Mgb25seSBvcGVyYXRlcyBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIGFuZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2F0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLiAgSXQgcmVxdWlyZXMgdGhhdCBcZkJcLWZ0cmVlXC1jY3BcZlIgaXMgZW5hYmxlZC4KKy5JUCAiXGZCXC1mdHJlZVwtY2NwXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWNjcCIKK1BlcmZvcm0gc3BhcnNlIGNvbmRpdGlvbmFsIGNvbnN0YW50IHByb3BhZ2F0aW9uIChccy0xQ0NQXHMwKSBvbiB0cmVlcy4gIFRoaXMKK3Bhc3Mgb25seSBvcGVyYXRlcyBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIGFuZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2F0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1zd2l0Y2hcLWNvbnZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtc3dpdGNoLWNvbnZlcnNpb24iCitQZXJmb3JtIGNvbnZlcnNpb24gb2Ygc2ltcGxlIGluaXRpYWxpemF0aW9ucyBpbiBhIHN3aXRjaCB0bworaW5pdGlhbGl6YXRpb25zIGZyb20gYSBzY2FsYXIgYXJyYXkuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0CithdCBcZkJcLU8yXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLXRhaWxcLW1lcmdlXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXRhaWwtbWVyZ2UiCitMb29rIGZvciBpZGVudGljYWwgY29kZSBzZXF1ZW5jZXMuICBXaGVuIGZvdW5kLCByZXBsYWNlIG9uZSB3aXRoIGEganVtcCB0byB0aGUKK290aGVyLiAgVGhpcyBvcHRpbWl6YXRpb24gaXMga25vd24gYXMgdGFpbCBtZXJnaW5nIG9yIGNyb3NzIGp1bXBpbmcuICBUaGlzIGZsYWcKK2lzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU8yXGZSIGFuZCBoaWdoZXIuICBUaGUgY29tcGlsYXRpb24gdGltZQoraW4gdGhpcyBwYXNzIGNhbgorYmUgbGltaXRlZCB1c2luZyBcZkJtYXgtdGFpbC1tZXJnZS1jb21wYXJpc29uc1xmUiBwYXJhbWV0ZXIgYW5kCitcJlxmQm1heC10YWlsLW1lcmdlLWl0ZXJhdGlvbnNcZlIgcGFyYW1ldGVyLgorLklQICJcZkJcLWZ0cmVlXC1kY2VcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtZGNlIgorUGVyZm9ybSBkZWFkIGNvZGUgZWxpbWluYXRpb24gKFxzLTFEQ0VcczApIG9uIHRyZWVzLiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkKK2RlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLWJ1aWx0aW5cLWNhbGxcLWRjZVxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1idWlsdGluLWNhbGwtZGNlIgorUGVyZm9ybSBjb25kaXRpb25hbCBkZWFkIGNvZGUgZWxpbWluYXRpb24gKFxzLTFEQ0VcczApIGZvciBjYWxscyB0byBidWlsdC1pbiBmdW5jdGlvbnMKK3RoYXQgbWF5IHNldCBcZihDV1wqKENgZXJybm9cKihDJ1xmUiBidXQgYXJlIG90aGVyd2lzZSBzaWRlLWVmZmVjdCBmcmVlLiAgVGhpcyBmbGFnIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PMlxmUiBhbmQgaGlnaGVyIGlmIFxmQlwtT3NcZlIgaXMgbm90IGFsc28KK3NwZWNpZmllZC4KKy5JUCAiXGZCXC1mdHJlZVwtZG9taW5hdG9yXC1vcHRzXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWRvbWluYXRvci1vcHRzIgorUGVyZm9ybSBhIHZhcmlldHkgb2Ygc2ltcGxlIHNjYWxhciBjbGVhbnVwcyAoY29uc3RhbnQvY29weQorcHJvcGFnYXRpb24sIHJlZHVuZGFuY3kgZWxpbWluYXRpb24sIHJhbmdlIHByb3BhZ2F0aW9uIGFuZCBleHByZXNzaW9uCitzaW1wbGlmaWNhdGlvbikgYmFzZWQgb24gYSBkb21pbmF0b3IgdHJlZSB0cmF2ZXJzYWwuICBUaGlzIGFsc28KK3BlcmZvcm1zIGp1bXAgdGhyZWFkaW5nICh0byByZWR1Y2UganVtcHMgdG8ganVtcHMpLiBUaGlzIGZsYWcgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtZHNlXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWRzZSIKK1BlcmZvcm0gZGVhZCBzdG9yZSBlbGltaW5hdGlvbiAoXHMtMURTRVxzMCkgb24gdHJlZXMuICBBIGRlYWQgc3RvcmUgaXMgYSBzdG9yZSBpbnRvCithIG1lbW9yeSBsb2NhdGlvbiB0aGF0IGlzIGxhdGVyIG92ZXJ3cml0dGVuIGJ5IGFub3RoZXIgc3RvcmUgd2l0aG91dAorYW55IGludGVydmVuaW5nIGxvYWRzLiAgSW4gdGhpcyBjYXNlIHRoZSBlYXJsaWVyIHN0b3JlIGNhbiBiZSBkZWxldGVkLiAgVGhpcworZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLWNoXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWNoIgorUGVyZm9ybSBsb29wIGhlYWRlciBjb3B5aW5nIG9uIHRyZWVzLiAgVGhpcyBpcyBiZW5lZmljaWFsIHNpbmNlIGl0IGluY3JlYXNlcworZWZmZWN0aXZlbmVzcyBvZiBjb2RlIG1vdGlvbiBvcHRpbWl6YXRpb25zLiAgSXQgYWxzbyBzYXZlcyBvbmUganVtcC4gIFRoaXMgZmxhZworaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLiAgSXQgaXMgbm90IGVuYWJsZWQKK2ZvciBcZkJcLU9zXGZSLCBzaW5jZSBpdCB1c3VhbGx5IGluY3JlYXNlcyBjb2RlIHNpemUuCisuSVAgIlxmQlwtZnRyZWVcLWxvb3BcLW9wdGltaXplXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWxvb3Atb3B0aW1pemUiCitQZXJmb3JtIGxvb3Agb3B0aW1pemF0aW9ucyBvbiB0cmVlcy4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2F0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1sb29wXC1saW5lYXJcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtbG9vcC1saW5lYXIiCitQZXJmb3JtIGxvb3AgaW50ZXJjaGFuZ2UgdHJhbnNmb3JtYXRpb25zIG9uIHRyZWUuICBTYW1lIGFzCitcJlxmQlwtZmxvb3BcLWludGVyY2hhbmdlXGZSLiAgVG8gdXNlIHRoaXMgY29kZSB0cmFuc2Zvcm1hdGlvbiwgXHMtMUdDQ1xzMCBoYXMKK3RvIGJlIGNvbmZpZ3VyZWQgd2l0aCBcZkJcLVwtd2l0aFwtcHBsXGZSIGFuZCBcZkJcLVwtd2l0aFwtY2xvb2dcZlIgdG8KK2VuYWJsZSB0aGUgR3JhcGhpdGUgbG9vcCB0cmFuc2Zvcm1hdGlvbiBpbmZyYXN0cnVjdHVyZS4KKy5JUCAiXGZCXC1mbG9vcFwtaW50ZXJjaGFuZ2VcZlIiIDQKKy5JWCBJdGVtICItZmxvb3AtaW50ZXJjaGFuZ2UiCitQZXJmb3JtIGxvb3AgaW50ZXJjaGFuZ2UgdHJhbnNmb3JtYXRpb25zIG9uIGxvb3BzLiAgSW50ZXJjaGFuZ2luZyB0d28KK25lc3RlZCBsb29wcyBzd2l0Y2hlcyB0aGUgaW5uZXIgYW5kIG91dGVyIGxvb3BzLiAgRm9yIGV4YW1wbGUsIGdpdmVuIGEKK2xvb3AgbGlrZToKKy5TcAorLlZiIDUKK1wmICAgICAgICBETyBKID0gMSwgTQorXCYgICAgICAgICAgRE8gSSA9IDEsIE4KK1wmICAgICAgICAgICAgQShKLCBJKSA9IEEoSiwgSSkgKiBDCitcJiAgICAgICAgICBFTkRETworXCYgICAgICAgIEVORERPCisuVmUKKy5TcAorbG9vcCBpbnRlcmNoYW5nZSB0cmFuc2Zvcm1zIHRoZSBsb29wIGFzIGlmIGl0IHdlcmUgd3JpdHRlbjoKKy5TcAorLlZiIDUKK1wmICAgICAgICBETyBJID0gMSwgTgorXCYgICAgICAgICAgRE8gSiA9IDEsIE0KK1wmICAgICAgICAgICAgQShKLCBJKSA9IEEoSiwgSSkgKiBDCitcJiAgICAgICAgICBFTkRETworXCYgICAgICAgIEVORERPCisuVmUKKy5TcAord2hpY2ggY2FuIGJlIGJlbmVmaWNpYWwgd2hlbiBcZihDV1wqKENgTlwqKEMnXGZSIGlzIGxhcmdlciB0aGFuIHRoZSBjYWNoZXMsCitiZWNhdXNlIGluIEZvcnRyYW4sIHRoZSBlbGVtZW50cyBvZiBhbiBhcnJheSBhcmUgc3RvcmVkIGluIG1lbW9yeQorY29udGlndW91c2x5IGJ5IGNvbHVtbiwgYW5kIHRoZSBvcmlnaW5hbCBsb29wIGl0ZXJhdGVzIG92ZXIgcm93cywKK3BvdGVudGlhbGx5IGNyZWF0aW5nIGF0IGVhY2ggYWNjZXNzIGEgY2FjaGUgbWlzcy4gIFRoaXMgb3B0aW1pemF0aW9uCithcHBsaWVzIHRvIGFsbCB0aGUgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBccy0xR0NDXHMwIGFuZCBpcyBub3QgbGltaXRlZCB0bworRm9ydHJhbi4gIFRvIHVzZSB0aGlzIGNvZGUgdHJhbnNmb3JtYXRpb24sIFxzLTFHQ0NcczAgaGFzIHRvIGJlIGNvbmZpZ3VyZWQKK3dpdGggXGZCXC1cLXdpdGhcLXBwbFxmUiBhbmQgXGZCXC1cLXdpdGhcLWNsb29nXGZSIHRvIGVuYWJsZSB0aGUKK0dyYXBoaXRlIGxvb3AgdHJhbnNmb3JtYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisuSVAgIlxmQlwtZmxvb3BcLXN0cmlwXC1taW5lXGZSIiA0CisuSVggSXRlbSAiLWZsb29wLXN0cmlwLW1pbmUiCitQZXJmb3JtIGxvb3Agc3RyaXAgbWluaW5nIHRyYW5zZm9ybWF0aW9ucyBvbiBsb29wcy4gIFN0cmlwIG1pbmluZworc3BsaXRzIGEgbG9vcCBpbnRvIHR3byBuZXN0ZWQgbG9vcHMuICBUaGUgb3V0ZXIgbG9vcCBoYXMgc3RyaWRlcworZXF1YWwgdG8gdGhlIHN0cmlwIHNpemUgYW5kIHRoZSBpbm5lciBsb29wIGhhcyBzdHJpZGVzIG9mIHRoZQorb3JpZ2luYWwgbG9vcCB3aXRoaW4gYSBzdHJpcC4gIFRoZSBzdHJpcCBsZW5ndGggY2FuIGJlIGNoYW5nZWQKK3VzaW5nIHRoZSBcZkJsb29wLWJsb2NrLXRpbGUtc2l6ZVxmUiBwYXJhbWV0ZXIuICBGb3IgZXhhbXBsZSwKK2dpdmVuIGEgbG9vcCBsaWtlOgorLlNwCisuVmIgMworXCYgICAgICAgIERPIEkgPSAxLCBOCitcJiAgICAgICAgICBBKEkpID0gQShJKSArIEMKK1wmICAgICAgICBFTkRETworLlZlCisuU3AKK2xvb3Agc3RyaXAgbWluaW5nIHRyYW5zZm9ybXMgdGhlIGxvb3AgYXMgaWYgaXQgd2VyZSB3cml0dGVuOgorLlNwCisuVmIgNQorXCYgICAgICAgIERPIElJID0gMSwgTiwgNTEKK1wmICAgICAgICAgIERPIEkgPSBJSSwgbWluIChJSSArIDUwLCBOKQorXCYgICAgICAgICAgICBBKEkpID0gQShJKSArIEMKK1wmICAgICAgICAgIEVORERPCitcJiAgICAgICAgRU5ERE8KKy5WZQorLlNwCitUaGlzIG9wdGltaXphdGlvbiBhcHBsaWVzIHRvIGFsbCB0aGUgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBccy0xR0NDXHMwIGFuZCBpcworbm90IGxpbWl0ZWQgdG8gRm9ydHJhbi4gIFRvIHVzZSB0aGlzIGNvZGUgdHJhbnNmb3JtYXRpb24sIFxzLTFHQ0NcczAgaGFzIHRvCitiZSBjb25maWd1cmVkIHdpdGggXGZCXC1cLXdpdGhcLXBwbFxmUiBhbmQgXGZCXC1cLXdpdGhcLWNsb29nXGZSIHRvCitlbmFibGUgdGhlIEdyYXBoaXRlIGxvb3AgdHJhbnNmb3JtYXRpb24gaW5mcmFzdHJ1Y3R1cmUuCisuSVAgIlxmQlwtZmxvb3BcLWJsb2NrXGZSIiA0CisuSVggSXRlbSAiLWZsb29wLWJsb2NrIgorUGVyZm9ybSBsb29wIGJsb2NraW5nIHRyYW5zZm9ybWF0aW9ucyBvbiBsb29wcy4gIEJsb2NraW5nIHN0cmlwIG1pbmVzCitlYWNoIGxvb3AgaW4gdGhlIGxvb3AgbmVzdCBzdWNoIHRoYXQgdGhlIG1lbW9yeSBhY2Nlc3NlcyBvZiB0aGUKK2VsZW1lbnQgbG9vcHMgZml0IGluc2lkZSBjYWNoZXMuICBUaGUgc3RyaXAgbGVuZ3RoIGNhbiBiZSBjaGFuZ2VkCit1c2luZyB0aGUgXGZCbG9vcC1ibG9jay10aWxlLXNpemVcZlIgcGFyYW1ldGVyLiAgRm9yIGV4YW1wbGUsIGdpdmVuCithIGxvb3AgbGlrZToKKy5TcAorLlZiIDUKK1wmICAgICAgICBETyBJID0gMSwgTgorXCYgICAgICAgICAgRE8gSiA9IDEsIE0KK1wmICAgICAgICAgICAgQShKLCBJKSA9IEIoSSkgKyBDKEopCitcJiAgICAgICAgICBFTkRETworXCYgICAgICAgIEVORERPCisuVmUKKy5TcAorbG9vcCBibG9ja2luZyB0cmFuc2Zvcm1zIHRoZSBsb29wIGFzIGlmIGl0IHdlcmUgd3JpdHRlbjoKKy5TcAorLlZiIDkKK1wmICAgICAgICBETyBJSSA9IDEsIE4sIDUxCitcJiAgICAgICAgICBETyBKSiA9IDEsIE0sIDUxCitcJiAgICAgICAgICAgIERPIEkgPSBJSSwgbWluIChJSSArIDUwLCBOKQorXCYgICAgICAgICAgICAgIERPIEogPSBKSiwgbWluIChKSiArIDUwLCBNKQorXCYgICAgICAgICAgICAgICAgQShKLCBJKSA9IEIoSSkgKyBDKEopCitcJiAgICAgICAgICAgICAgRU5ERE8KK1wmICAgICAgICAgICAgRU5ERE8KK1wmICAgICAgICAgIEVORERPCitcJiAgICAgICAgRU5ERE8KKy5WZQorLlNwCit3aGljaCBjYW4gYmUgYmVuZWZpY2lhbCB3aGVuIFxmKENXXCooQ2BNXCooQydcZlIgaXMgbGFyZ2VyIHRoYW4gdGhlIGNhY2hlcywKK2JlY2F1c2UgdGhlIGlubmVybW9zdCBsb29wIGl0ZXJhdGVzIG92ZXIgYSBzbWFsbGVyIGFtb3VudCBvZiBkYXRhCit3aGljaCBjYW4gYmUga2VwdCBpbiB0aGUgY2FjaGVzLiAgVGhpcyBvcHRpbWl6YXRpb24gYXBwbGllcyB0byBhbGwgdGhlCitsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IFxzLTFHQ0NcczAgYW5kIGlzIG5vdCBsaW1pdGVkIHRvIEZvcnRyYW4uICBUbyB1c2UgdGhpcworY29kZSB0cmFuc2Zvcm1hdGlvbiwgXHMtMUdDQ1xzMCBoYXMgdG8gYmUgY29uZmlndXJlZCB3aXRoIFxmQlwtXC13aXRoXC1wcGxcZlIKK2FuZCBcZkJcLVwtd2l0aFwtY2xvb2dcZlIgdG8gZW5hYmxlIHRoZSBHcmFwaGl0ZSBsb29wIHRyYW5zZm9ybWF0aW9uCitpbmZyYXN0cnVjdHVyZS4KKy5JUCAiXGZCXC1mZ3JhcGhpdGVcLWlkZW50aXR5XGZSIiA0CisuSVggSXRlbSAiLWZncmFwaGl0ZS1pZGVudGl0eSIKK0VuYWJsZSB0aGUgaWRlbnRpdHkgdHJhbnNmb3JtYXRpb24gZm9yIGdyYXBoaXRlLiAgRm9yIGV2ZXJ5IFNDb1Agd2UgZ2VuZXJhdGUKK3RoZSBwb2x5aGVkcmFsIHJlcHJlc2VudGF0aW9uIGFuZCB0cmFuc2Zvcm0gaXQgYmFjayB0byBnaW1wbGUuICBVc2luZworXCZcZkJcLWZncmFwaGl0ZVwtaWRlbnRpdHlcZlIgd2UgY2FuIGNoZWNrIHRoZSBjb3N0cyBvciBiZW5lZml0cyBvZiB0aGUKK1wmXHMtMUdJTVBMRVxzMCBcLT4gXHMtMUdSQVBISVRFXHMwIFwtPiBccy0xR0lNUExFXHMwIHRyYW5zZm9ybWF0aW9uLiAgU29tZSBtaW5pbWFsIG9wdGltaXphdGlvbnMKK2FyZSBhbHNvIHBlcmZvcm1lZCBieSB0aGUgY29kZSBnZW5lcmF0b3IgQ0xvb0csIGxpa2UgaW5kZXggc3BsaXR0aW5nIGFuZAorZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIGxvb3BzLgorLklQICJcZkJcLWZsb29wXC1uZXN0XC1vcHRpbWl6ZVxmUiIgNAorLklYIEl0ZW0gIi1mbG9vcC1uZXN0LW9wdGltaXplIgorRW5hYmxlIHRoZSBccy0xSVNMXHMwIGJhc2VkIGxvb3AgbmVzdCBvcHRpbWl6ZXIuICBUaGlzIGlzIGEgZ2VuZXJpYyBsb29wIG5lc3QKK29wdGltaXplciBiYXNlZCBvbiB0aGUgUGx1dG8gb3B0aW1pemF0aW9uIGFsZ29yaXRobXMuICBJdCBjYWxjdWxhdGVzIGEgbG9vcAorc3RydWN0dXJlIG9wdGltaXplZCBmb3IgZGF0YS1sb2NhbGl0eSBhbmQgcGFyYWxsZWxpc20uICBUaGlzIG9wdGlvbgoraXMgZXhwZXJpbWVudGFsLgorLklQICJcZkJcLWZsb29wXC1wYXJhbGxlbGl6ZVwtYWxsXGZSIiA0CisuSVggSXRlbSAiLWZsb29wLXBhcmFsbGVsaXplLWFsbCIKK1VzZSB0aGUgR3JhcGhpdGUgZGF0YSBkZXBlbmRlbmNlIGFuYWx5c2lzIHRvIGlkZW50aWZ5IGxvb3BzIHRoYXQgY2FuCitiZSBwYXJhbGxlbGl6ZWQuICBQYXJhbGxlbGl6ZSBhbGwgdGhlIGxvb3BzIHRoYXQgY2FuIGJlIGFuYWx5emVkIHRvCitub3QgY29udGFpbiBsb29wIGNhcnJpZWQgZGVwZW5kZW5jZXMgd2l0aG91dCBjaGVja2luZyB0aGF0IGl0IGlzCitwcm9maXRhYmxlIHRvIHBhcmFsbGVsaXplIHRoZSBsb29wcy4KKy5JUCAiXGZCXC1mY2hlY2tcLWRhdGFcLWRlcHNcZlIiIDQKKy5JWCBJdGVtICItZmNoZWNrLWRhdGEtZGVwcyIKK0NvbXBhcmUgdGhlIHJlc3VsdHMgb2Ygc2V2ZXJhbCBkYXRhIGRlcGVuZGVuY2UgYW5hbHl6ZXJzLiAgVGhpcyBvcHRpb24KK2lzIHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgZGF0YSBkZXBlbmRlbmNlIGFuYWx5emVycy4KKy5JUCAiXGZCXC1mdHJlZVwtbG9vcFwtaWZcLWNvbnZlcnRcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtbG9vcC1pZi1jb252ZXJ0IgorQXR0ZW1wdCB0byB0cmFuc2Zvcm0gY29uZGl0aW9uYWwganVtcHMgaW4gdGhlIGlubmVybW9zdCBsb29wcyB0bworYnJhbmNoLWxlc3MgZXF1aXZhbGVudHMuICBUaGUgaW50ZW50IGlzIHRvIHJlbW92ZSBjb250cm9sLWZsb3cgZnJvbQordGhlIGlubmVybW9zdCBsb29wcyBpbiBvcmRlciB0byBpbXByb3ZlIHRoZSBhYmlsaXR5IG9mIHRoZQordmVjdG9yaXphdGlvbiBwYXNzIHRvIGhhbmRsZSB0aGVzZSBsb29wcy4gIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0CitpZiB2ZWN0b3JpemF0aW9uIGlzIGVuYWJsZWQuCisuSVAgIlxmQlwtZnRyZWVcLWxvb3BcLWlmXC1jb252ZXJ0XC1zdG9yZXNcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtbG9vcC1pZi1jb252ZXJ0LXN0b3JlcyIKK0F0dGVtcHQgdG8gYWxzbyBpZi1jb252ZXJ0IGNvbmRpdGlvbmFsIGp1bXBzIGNvbnRhaW5pbmcgbWVtb3J5IHdyaXRlcy4KK1RoaXMgdHJhbnNmb3JtYXRpb24gY2FuIGJlIHVuc2FmZSBmb3IgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgYXMgaXQKK3RyYW5zZm9ybXMgY29uZGl0aW9uYWwgbWVtb3J5IHdyaXRlcyBpbnRvIHVuY29uZGl0aW9uYWwgbWVtb3J5IHdyaXRlcy4KK0ZvciBleGFtcGxlLAorLlNwCisuVmIgMworXCYgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCitcJiAgICAgICAgICBpZiAoY29uZCkKK1wmICAgICAgICAgICAgQVtpXSA9IGV4cHI7CisuVmUKKy5TcAoraXMgdHJhbnNmb3JtZWQgdG8KKy5TcAorLlZiIDIKK1wmICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorXCYgICAgICAgICAgQVtpXSA9IGNvbmQgPyBleHByIDogQVtpXTsKKy5WZQorLlNwCitwb3RlbnRpYWxseSBwcm9kdWNpbmcgZGF0YSByYWNlcy4KKy5JUCAiXGZCXC1mdHJlZVwtbG9vcFwtZGlzdHJpYnV0aW9uXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWxvb3AtZGlzdHJpYnV0aW9uIgorUGVyZm9ybSBsb29wIGRpc3RyaWJ1dGlvbi4gIFRoaXMgZmxhZyBjYW4gaW1wcm92ZSBjYWNoZSBwZXJmb3JtYW5jZSBvbgorYmlnIGxvb3AgYm9kaWVzIGFuZCBhbGxvdyBmdXJ0aGVyIGxvb3Agb3B0aW1pemF0aW9ucywgbGlrZQorcGFyYWxsZWxpemF0aW9uIG9yIHZlY3Rvcml6YXRpb24sIHRvIHRha2UgcGxhY2UuICBGb3IgZXhhbXBsZSwgdGhlIGxvb3AKKy5TcAorLlZiIDQKK1wmICAgICAgICBETyBJID0gMSwgTgorXCYgICAgICAgICAgQShJKSA9IEIoSSkgKyBDCitcJiAgICAgICAgICBEKEkpID0gRShJKSAqIEYKK1wmICAgICAgICBFTkRETworLlZlCisuU3AKK2lzIHRyYW5zZm9ybWVkIHRvCisuU3AKKy5WYiA2CitcJiAgICAgICAgRE8gSSA9IDEsIE4KK1wmICAgICAgICAgICBBKEkpID0gQihJKSArIEMKK1wmICAgICAgICBFTkRETworXCYgICAgICAgIERPIEkgPSAxLCBOCitcJiAgICAgICAgICAgRChJKSA9IEUoSSkgKiBGCitcJiAgICAgICAgRU5ERE8KKy5WZQorLklQICJcZkJcLWZ0cmVlXC1sb29wXC1kaXN0cmlidXRlXC1wYXR0ZXJuc1xmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1sb29wLWRpc3RyaWJ1dGUtcGF0dGVybnMiCitQZXJmb3JtIGxvb3AgZGlzdHJpYnV0aW9uIG9mIHBhdHRlcm5zIHRoYXQgY2FuIGJlIGNvZGUgZ2VuZXJhdGVkIHdpdGgKK2NhbGxzIHRvIGEgbGlicmFyeS4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PM1xmUi4KKy5TcAorVGhpcyBwYXNzIGRpc3RyaWJ1dGVzIHRoZSBpbml0aWFsaXphdGlvbiBsb29wcyBhbmQgZ2VuZXJhdGVzIGEgY2FsbCB0bworbWVtc2V0IHplcm8uICBGb3IgZXhhbXBsZSwgdGhlIGxvb3AKKy5TcAorLlZiIDQKK1wmICAgICAgICBETyBJID0gMSwgTgorXCYgICAgICAgICAgQShJKSA9IDAKK1wmICAgICAgICAgIEIoSSkgPSBBKEkpICsgSQorXCYgICAgICAgIEVORERPCisuVmUKKy5TcAoraXMgdHJhbnNmb3JtZWQgdG8KKy5TcAorLlZiIDYKK1wmICAgICAgICBETyBJID0gMSwgTgorXCYgICAgICAgICAgIEEoSSkgPSAwCitcJiAgICAgICAgRU5ERE8KK1wmICAgICAgICBETyBJID0gMSwgTgorXCYgICAgICAgICAgIEIoSSkgPSBBKEkpICsgSQorXCYgICAgICAgIEVORERPCisuVmUKKy5TcAorYW5kIHRoZSBpbml0aWFsaXphdGlvbiBsb29wIGlzIHRyYW5zZm9ybWVkIGludG8gYSBjYWxsIHRvIG1lbXNldCB6ZXJvLgorLklQICJcZkJcLWZ0cmVlXC1sb29wXC1pbVxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1sb29wLWltIgorUGVyZm9ybSBsb29wIGludmFyaWFudCBtb3Rpb24gb24gdHJlZXMuICBUaGlzIHBhc3MgbW92ZXMgb25seSBpbnZhcmlhbnRzIHRoYXQKK2FyZSBoYXJkIHRvIGhhbmRsZSBhdCBccy0xUlRMXHMwIGxldmVsIChmdW5jdGlvbiBjYWxscywgb3BlcmF0aW9ucyB0aGF0IGV4cGFuZCB0bworbm9udHJpdmlhbCBzZXF1ZW5jZXMgb2YgaW5zbnMpLiAgV2l0aCBcZkJcLWZ1bnN3aXRjaFwtbG9vcHNcZlIgaXQgYWxzbyBtb3Zlcworb3BlcmFuZHMgb2YgY29uZGl0aW9ucyB0aGF0IGFyZSBpbnZhcmlhbnQgb3V0IG9mIHRoZSBsb29wLCBzbyB0aGF0IHdlIGNhbiB1c2UKK2p1c3QgdHJpdmlhbCBpbnZhcmlhbnRuZXNzIGFuYWx5c2lzIGluIGxvb3AgdW5zd2l0Y2hpbmcuICBUaGUgcGFzcyBhbHNvIGluY2x1ZGVzCitzdG9yZSBtb3Rpb24uCisuSVAgIlxmQlwtZnRyZWVcLWxvb3BcLWl2Y2Fub25cZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtbG9vcC1pdmNhbm9uIgorQ3JlYXRlIGEgY2Fub25pY2FsIGNvdW50ZXIgZm9yIG51bWJlciBvZiBpdGVyYXRpb25zIGluIGxvb3BzIGZvciB3aGljaAorZGV0ZXJtaW5pbmcgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgcmVxdWlyZXMgY29tcGxpY2F0ZWQgYW5hbHlzaXMuICBMYXRlcgorb3B0aW1pemF0aW9ucyB0aGVuIG1heSBkZXRlcm1pbmUgdGhlIG51bWJlciBlYXNpbHkuICBVc2VmdWwgZXNwZWNpYWxseQoraW4gY29ubmVjdGlvbiB3aXRoIHVucm9sbGluZy4KKy5JUCAiXGZCXC1maXZvcHRzXGZSIiA0CisuSVggSXRlbSAiLWZpdm9wdHMiCitQZXJmb3JtIGluZHVjdGlvbiB2YXJpYWJsZSBvcHRpbWl6YXRpb25zIChzdHJlbmd0aCByZWR1Y3Rpb24sIGluZHVjdGlvbgordmFyaWFibGUgbWVyZ2luZyBhbmQgaW5kdWN0aW9uIHZhcmlhYmxlIGVsaW1pbmF0aW9uKSBvbiB0cmVlcy4KKy5JUCAiXGZCXC1mdHJlZVwtcGFyYWxsZWxpemVcLWxvb3BzPW5cZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9biIKK1BhcmFsbGVsaXplIGxvb3BzLCBpLmUuLCBzcGxpdCB0aGVpciBpdGVyYXRpb24gc3BhY2UgdG8gcnVuIGluIG4gdGhyZWFkcy4KK1RoaXMgaXMgb25seSBwb3NzaWJsZSBmb3IgbG9vcHMgd2hvc2UgaXRlcmF0aW9ucyBhcmUgaW5kZXBlbmRlbnQKK2FuZCBjYW4gYmUgYXJiaXRyYXJpbHkgcmVvcmRlcmVkLiAgVGhlIG9wdGltaXphdGlvbiBpcyBvbmx5Citwcm9maXRhYmxlIG9uIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzLCBmb3IgbG9vcHMgdGhhdCBhcmUgQ1BVLWludGVuc2l2ZSwKK3JhdGhlciB0aGFuIGNvbnN0cmFpbmVkIGUuZy4gYnkgbWVtb3J5IGJhbmR3aWR0aC4gIFRoaXMgb3B0aW9uCitpbXBsaWVzIFxmQlwtcHRocmVhZFxmUiwgYW5kIHRodXMgaXMgb25seSBzdXBwb3J0ZWQgb24gdGFyZ2V0cwordGhhdCBoYXZlIHN1cHBvcnQgZm9yIFxmQlwtcHRocmVhZFxmUi4KKy5JUCAiXGZCXC1mdHJlZVwtcHRhXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXB0YSIKK1BlcmZvcm0gZnVuY3Rpb24tbG9jYWwgcG9pbnRzLXRvIGFuYWx5c2lzIG9uIHRyZWVzLiAgVGhpcyBmbGFnIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLXNyYVxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1zcmEiCitQZXJmb3JtIHNjYWxhciByZXBsYWNlbWVudCBvZiBhZ2dyZWdhdGVzLiAgVGhpcyBwYXNzIHJlcGxhY2VzIHN0cnVjdHVyZQorcmVmZXJlbmNlcyB3aXRoIHNjYWxhcnMgdG8gcHJldmVudCBjb21taXR0aW5nIHN0cnVjdHVyZXMgdG8gbWVtb3J5IHRvbworZWFybHkuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1jb3B5cmVuYW1lXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWNvcHlyZW5hbWUiCitQZXJmb3JtIGNvcHkgcmVuYW1pbmcgb24gdHJlZXMuICBUaGlzIHBhc3MgYXR0ZW1wdHMgdG8gcmVuYW1lIGNvbXBpbGVyCit0ZW1wb3JhcmllcyB0byBvdGhlciB2YXJpYWJsZXMgYXQgY29weSBsb2NhdGlvbnMsIHVzdWFsbHkgcmVzdWx0aW5nIGluCit2YXJpYWJsZSBuYW1lcyB3aGljaCBtb3JlIGNsb3NlbHkgcmVzZW1ibGUgdGhlIG9yaWdpbmFsIHZhcmlhYmxlcy4gIFRoaXMgZmxhZworaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1jb2FsZXNjZVwtaW5saW5lZFwtdmFyc1xmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1jb2FsZXNjZS1pbmxpbmVkLXZhcnMiCitUZWxsIHRoZSBjb3B5cmVuYW1lIHBhc3MgKHNlZSBcZkJcLWZ0cmVlXC1jb3B5cmVuYW1lXGZSKSB0byBhdHRlbXB0IHRvCitjb21iaW5lIHNtYWxsIHVzZXItZGVmaW5lZCB2YXJpYWJsZXMgdG9vLCBidXQgb25seSBpZiB0aGV5IHdlcmUgaW5saW5lZAorZnJvbSBvdGhlciBmdW5jdGlvbnMuICBJdCBpcyBhIG1vcmUgbGltaXRlZCBmb3JtIG9mCitcJlxmQlwtZnRyZWVcLWNvYWxlc2NlXC12YXJzXGZSLiAgVGhpcyBtYXkgaGFybSBkZWJ1ZyBpbmZvcm1hdGlvbiBvZiBzdWNoCitpbmxpbmVkIHZhcmlhYmxlcywgYnV0IGl0IHdpbGwga2VlcCB2YXJpYWJsZXMgb2YgdGhlIGlubGluZWQtaW50bworZnVuY3Rpb24gYXBhcnQgZnJvbSBlYWNoIG90aGVyLCBzdWNoIHRoYXQgdGhleSBhcmUgbW9yZSBsaWtlbHkgdG8KK2NvbnRhaW4gdGhlIGV4cGVjdGVkIHZhbHVlcyBpbiBhIGRlYnVnZ2luZyBzZXNzaW9uLiAgVGhpcyB3YXMgdGhlCitkZWZhdWx0IGluIFxzLTFHQ0NcczAgdmVyc2lvbnMgb2xkZXIgdGhhbiA0LjcuCisuSVAgIlxmQlwtZnRyZWVcLWNvYWxlc2NlXC12YXJzXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWNvYWxlc2NlLXZhcnMiCitUZWxsIHRoZSBjb3B5cmVuYW1lIHBhc3MgKHNlZSBcZkJcLWZ0cmVlXC1jb3B5cmVuYW1lXGZSKSB0byBhdHRlbXB0IHRvCitjb21iaW5lIHNtYWxsIHVzZXItZGVmaW5lZCB2YXJpYWJsZXMgdG9vLCBpbnN0ZWFkIG9mIGp1c3QgY29tcGlsZXIKK3RlbXBvcmFyaWVzLiAgVGhpcyBtYXkgc2V2ZXJlbHkgbGltaXQgdGhlIGFiaWxpdHkgdG8gZGVidWcgYW4gb3B0aW1pemVkCitwcm9ncmFtIGNvbXBpbGVkIHdpdGggXGZCXC1mbm9cLXZhclwtdHJhY2tpbmdcLWFzc2lnbm1lbnRzXGZSLiAgSW4gdGhlCituZWdhdGVkIGZvcm0sIHRoaXMgZmxhZyBwcmV2ZW50cyBccy0xU1NBXHMwIGNvYWxlc2Npbmcgb2YgdXNlciB2YXJpYWJsZXMsCitpbmNsdWRpbmcgaW5saW5lZCBvbmVzLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLWZ0cmVlXC10ZXJcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtdGVyIgorUGVyZm9ybSB0ZW1wb3JhcnkgZXhwcmVzc2lvbiByZXBsYWNlbWVudCBkdXJpbmcgdGhlIFxzLTFTU0FcLVxzMD5ub3JtYWwgcGhhc2UuICBTaW5nbGUKK3VzZS9zaW5nbGUgZGVmIHRlbXBvcmFyaWVzIGFyZSByZXBsYWNlZCBhdCB0aGVpciB1c2UgbG9jYXRpb24gd2l0aCB0aGVpcgorZGVmaW5pbmcgZXhwcmVzc2lvbi4gIFRoaXMgcmVzdWx0cyBpbiBub24tR0lNUExFIGNvZGUsIGJ1dCBnaXZlcyB0aGUgZXhwYW5kZXJzCittdWNoIG1vcmUgY29tcGxleCB0cmVlcyB0byB3b3JrIG9uIHJlc3VsdGluZyBpbiBiZXR0ZXIgXHMtMVJUTFxzMCBnZW5lcmF0aW9uLiAgVGhpcyBpcworZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1zbHNyXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXNsc3IiCitQZXJmb3JtIHN0cmFpZ2h0LWxpbmUgc3RyZW5ndGggcmVkdWN0aW9uIG9uIHRyZWVzLiAgVGhpcyByZWNvZ25pemVzIHJlbGF0ZWQKK2V4cHJlc3Npb25zIGludm9sdmluZyBtdWx0aXBsaWNhdGlvbnMgYW5kIHJlcGxhY2VzIHRoZW0gYnkgbGVzcyBleHBlbnNpdmUKK2NhbGN1bGF0aW9ucyB3aGVuIHBvc3NpYmxlLiAgVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZAoraGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC12ZWN0b3JpemVcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtdmVjdG9yaXplIgorUGVyZm9ybSBsb29wIHZlY3Rvcml6YXRpb24gb24gdHJlZXMuIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQKK1wmXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mdHJlZVwtc2xwXC12ZWN0b3JpemVcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtc2xwLXZlY3Rvcml6ZSIKK1BlcmZvcm0gYmFzaWMgYmxvY2sgdmVjdG9yaXphdGlvbiBvbiB0cmVlcy4gVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdAorXCZcZkJcLU8zXGZSIGFuZCB3aGVuIFxmQlwtZnRyZWVcLXZlY3Rvcml6ZVxmUiBpcyBlbmFibGVkLgorLklQICJcZkJcLWZ0cmVlXC12ZWN0XC1sb29wXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXZlY3QtbG9vcC12ZXJzaW9uIgorUGVyZm9ybSBsb29wIHZlcnNpb25pbmcgd2hlbiBkb2luZyBsb29wIHZlY3Rvcml6YXRpb24gb24gdHJlZXMuICBXaGVuIGEgbG9vcAorYXBwZWFycyB0byBiZSB2ZWN0b3JpemFibGUgZXhjZXB0IHRoYXQgZGF0YSBhbGlnbm1lbnQgb3IgZGF0YSBkZXBlbmRlbmNlIGNhbm5vdAorYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUsIHRoZW4gdmVjdG9yaXplZCBhbmQgbm9uLXZlY3Rvcml6ZWQgdmVyc2lvbnMgb2YKK3RoZSBsb29wIGFyZSBnZW5lcmF0ZWQgYWxvbmcgd2l0aCBydW4tdGltZSBjaGVja3MgZm9yIGFsaWdubWVudCBvciBkZXBlbmRlbmNlCit0byBjb250cm9sIHdoaWNoIHZlcnNpb24gaXMgZXhlY3V0ZWQuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2V4Y2VwdCBhdCBsZXZlbCBcZkJcLU9zXGZSIHdoZXJlIGl0IGlzIGRpc2FibGVkLgorLklQICJcZkJcLWZ2ZWN0XC1jb3N0XC1tb2RlbFxmUiIgNAorLklYIEl0ZW0gIi1mdmVjdC1jb3N0LW1vZGVsIgorRW5hYmxlIGNvc3QgbW9kZWwgZm9yIHZlY3Rvcml6YXRpb24uICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQKK1wmXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mdHJlZVwtdnJwXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXZycCIKK1BlcmZvcm0gVmFsdWUgUmFuZ2UgUHJvcGFnYXRpb24gb24gdHJlZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlCitjb25zdGFudCBwcm9wYWdhdGlvbiBwYXNzLCBidXQgaW5zdGVhZCBvZiB2YWx1ZXMsIHJhbmdlcyBvZiB2YWx1ZXMgYXJlCitwcm9wYWdhdGVkLiAgVGhpcyBhbGxvd3MgdGhlIG9wdGltaXplcnMgdG8gcmVtb3ZlIHVubmVjZXNzYXJ5IHJhbmdlCitjaGVja3MgbGlrZSBhcnJheSBib3VuZCBjaGVja3MgYW5kIG51bGwgcG9pbnRlciBjaGVja3MuICBUaGlzIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PMlxmUiBhbmQgaGlnaGVyLiAgTnVsbCBwb2ludGVyIGNoZWNrCitlbGltaW5hdGlvbiBpcyBvbmx5IGRvbmUgaWYgXGZCXC1mZGVsZXRlXC1udWxsXC1wb2ludGVyXC1jaGVja3NcZlIgaXMKK2VuYWJsZWQuCisuSVAgIlxmQlwtZnRyYWNlclxmUiIgNAorLklYIEl0ZW0gIi1mdHJhY2VyIgorUGVyZm9ybSB0YWlsIGR1cGxpY2F0aW9uIHRvIGVubGFyZ2Ugc3VwZXJibG9jayBzaXplLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbgorc2ltcGxpZmllcyB0aGUgY29udHJvbCBmbG93IG9mIHRoZSBmdW5jdGlvbiBhbGxvd2luZyBvdGhlciBvcHRpbWl6YXRpb25zIHRvIGRvCithIGJldHRlciBqb2IuCisuSVAgIlxmQlwtZnVucm9sbFwtbG9vcHNcZlIiIDQKKy5JWCBJdGVtICItZnVucm9sbC1sb29wcyIKK1Vucm9sbCBsb29wcyB3aG9zZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBjYW4gYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlCit0aW1lIG9yIHVwb24gZW50cnkgdG8gdGhlIGxvb3AuICBcZkJcLWZ1bnJvbGxcLWxvb3BzXGZSIGltcGxpZXMKK1wmXGZCXC1mcmVydW5cLWNzZVwtYWZ0ZXJcLWxvb3BcZlIuICBUaGlzIG9wdGlvbiBtYWtlcyBjb2RlIGxhcmdlciwKK2FuZCBtYXkgb3IgbWF5IG5vdCBtYWtlIGl0IHJ1biBmYXN0ZXIuCisuSVAgIlxmQlwtZnVucm9sbFwtYWxsXC1sb29wc1xmUiIgNAorLklYIEl0ZW0gIi1mdW5yb2xsLWFsbC1sb29wcyIKK1Vucm9sbCBhbGwgbG9vcHMsIGV2ZW4gaWYgdGhlaXIgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgdW5jZXJ0YWluIHdoZW4KK3RoZSBsb29wIGlzIGVudGVyZWQuICBUaGlzIHVzdWFsbHkgbWFrZXMgcHJvZ3JhbXMgcnVuIG1vcmUgc2xvd2x5LgorXCZcZkJcLWZ1bnJvbGxcLWFsbFwtbG9vcHNcZlIgaW1wbGllcyB0aGUgc2FtZSBvcHRpb25zIGFzCitcJlxmQlwtZnVucm9sbFwtbG9vcHNcZlIsCisuSVAgIlxmQlwtZnNwbGl0XC1pdnNcLWluXC11bnJvbGxlclxmUiIgNAorLklYIEl0ZW0gIi1mc3BsaXQtaXZzLWluLXVucm9sbGVyIgorRW5hYmxlcyBleHByZXNzaW9uIG9mIHZhbHVlcyBvZiBpbmR1Y3Rpb24gdmFyaWFibGVzIGluIGxhdGVyIGl0ZXJhdGlvbnMKK29mIHRoZSB1bnJvbGxlZCBsb29wIHVzaW5nIHRoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLiAgVGhpcyBicmVha3MKK2xvbmcgZGVwZW5kZW5jeSBjaGFpbnMsIHRodXMgaW1wcm92aW5nIGVmZmljaWVuY3kgb2YgdGhlIHNjaGVkdWxpbmcgcGFzc2VzLgorLlNwCitBIGNvbWJpbmF0aW9uIG9mIFxmQlwtZndlYlxmUiBhbmQgXHMtMUNTRVxzMCBpcyBvZnRlbiBzdWZmaWNpZW50IHRvIG9idGFpbiB0aGUKK3NhbWUgZWZmZWN0LiAgSG93ZXZlciwgdGhhdCBpcyBub3QgcmVsaWFibGUgaW4gY2FzZXMgd2hlcmUgdGhlIGxvb3AgYm9keQoraXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIGEgc2luZ2xlIGJhc2ljIGJsb2NrLiAgSXQgYWxzbyBkb2VzIG5vdCB3b3JrIGF0IGFsbAorb24gc29tZSBhcmNoaXRlY3R1cmVzIGR1ZSB0byByZXN0cmljdGlvbnMgaW4gdGhlIFxzLTFDU0VcczAgcGFzcy4KKy5TcAorVGhpcyBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLWZ2YXJpYWJsZVwtZXhwYW5zaW9uXC1pblwtdW5yb2xsZXJcZlIiIDQKKy5JWCBJdGVtICItZnZhcmlhYmxlLWV4cGFuc2lvbi1pbi11bnJvbGxlciIKK1dpdGggdGhpcyBvcHRpb24sIHRoZSBjb21waWxlciBjcmVhdGVzIG11bHRpcGxlIGNvcGllcyBvZiBzb21lCitsb2NhbCB2YXJpYWJsZXMgd2hlbiB1bnJvbGxpbmcgYSBsb29wLCB3aGljaCBjYW4gcmVzdWx0IGluIHN1cGVyaW9yIGNvZGUuCisuSVAgIlxmQlwtZnBhcnRpYWxcLWlubGluaW5nXGZSIiA0CisuSVggSXRlbSAiLWZwYXJ0aWFsLWlubGluaW5nIgorSW5saW5lIHBhcnRzIG9mIGZ1bmN0aW9ucy4gIFRoaXMgb3B0aW9uIGhhcyBhbnkgZWZmZWN0IG9ubHkKK3doZW4gaW5saW5pbmcgaXRzZWxmIGlzIHR1cm5lZCBvbiBieSB0aGUgXGZCXC1maW5saW5lXC1mdW5jdGlvbnNcZlIKK29yIFxmQlwtZmlubGluZVwtc21hbGxcLWZ1bmN0aW9uc1xmUiBvcHRpb25zLgorLlNwCitFbmFibGVkIGF0IGxldmVsIFxmQlwtTzJcZlIuCisuSVAgIlxmQlwtZnByZWRpY3RpdmVcLWNvbW1vbmluZ1xmUiIgNAorLklYIEl0ZW0gIi1mcHJlZGljdGl2ZS1jb21tb25pbmciCitQZXJmb3JtIHByZWRpY3RpdmUgY29tbW9uaW5nIG9wdGltaXphdGlvbiwgaS5lLiwgcmV1c2luZyBjb21wdXRhdGlvbnMKKyhlc3BlY2lhbGx5IG1lbW9yeSBsb2FkcyBhbmQgc3RvcmVzKSBwZXJmb3JtZWQgaW4gcHJldmlvdXMKK2l0ZXJhdGlvbnMgb2YgbG9vcHMuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYXQgbGV2ZWwgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mcHJlZmV0Y2hcLWxvb3BcLWFycmF5c1xmUiIgNAorLklYIEl0ZW0gIi1mcHJlZmV0Y2gtbG9vcC1hcnJheXMiCitJZiBzdXBwb3J0ZWQgYnkgdGhlIHRhcmdldCBtYWNoaW5lLCBnZW5lcmF0ZSBpbnN0cnVjdGlvbnMgdG8gcHJlZmV0Y2gKK21lbW9yeSB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBsb29wcyB0aGF0IGFjY2VzcyBsYXJnZSBhcnJheXMuCisuU3AKK1RoaXMgb3B0aW9uIG1heSBnZW5lcmF0ZSBiZXR0ZXIgb3Igd29yc2UgY29kZTsgcmVzdWx0cyBhcmUgaGlnaGx5CitkZXBlbmRlbnQgb24gdGhlIHN0cnVjdHVyZSBvZiBsb29wcyB3aXRoaW4gdGhlIHNvdXJjZSBjb2RlLgorLlNwCitEaXNhYmxlZCBhdCBsZXZlbCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZub1wtcGVlcGhvbGVcZlIiIDQKKy5JWCBJdGVtICItZm5vLXBlZXBob2xlIgorLlBEIDAKKy5JUCAiXGZCXC1mbm9cLXBlZXBob2xlMlxmUiIgNAorLklYIEl0ZW0gIi1mbm8tcGVlcGhvbGUyIgorLlBECitEaXNhYmxlIGFueSBtYWNoaW5lLXNwZWNpZmljIHBlZXBob2xlIG9wdGltaXphdGlvbnMuICBUaGUgZGlmZmVyZW5jZQorYmV0d2VlbiBcZkJcLWZub1wtcGVlcGhvbGVcZlIgYW5kIFxmQlwtZm5vXC1wZWVwaG9sZTJcZlIgaXMgaW4gaG93IHRoZXkKK2FyZSBpbXBsZW1lbnRlZCBpbiB0aGUgY29tcGlsZXI7IHNvbWUgdGFyZ2V0cyB1c2Ugb25lLCBzb21lIHVzZSB0aGUKK290aGVyLCBhIGZldyB1c2UgYm90aC4KKy5TcAorXCZcZkJcLWZwZWVwaG9sZVxmUiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCitcJlxmQlwtZnBlZXBob2xlMlxmUiBlbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZub1wtZ3Vlc3NcLWJyYW5jaFwtcHJvYmFiaWxpdHlcZlIiIDQKKy5JWCBJdGVtICItZm5vLWd1ZXNzLWJyYW5jaC1wcm9iYWJpbGl0eSIKK0RvIG5vdCBndWVzcyBicmFuY2ggcHJvYmFiaWxpdGllcyB1c2luZyBoZXVyaXN0aWNzLgorLlNwCitcJlxzLTFHQ0NcczAgdXNlcyBoZXVyaXN0aWNzIHRvIGd1ZXNzIGJyYW5jaCBwcm9iYWJpbGl0aWVzIGlmIHRoZXkgYXJlCitub3QgcHJvdmlkZWQgYnkgcHJvZmlsaW5nIGZlZWRiYWNrIChcZkJcLWZwcm9maWxlXC1hcmNzXGZSKS4gIFRoZXNlCitoZXVyaXN0aWNzIGFyZSBiYXNlZCBvbiB0aGUgY29udHJvbCBmbG93IGdyYXBoLiAgSWYgc29tZSBicmFuY2ggcHJvYmFiaWxpdGllcworYXJlIHNwZWNpZmllZCBieSBcZkJfXHxfYnVpbHRpbl9leHBlY3RcZlIsIHRoZW4gdGhlIGhldXJpc3RpY3MgYXJlCit1c2VkIHRvIGd1ZXNzIGJyYW5jaCBwcm9iYWJpbGl0aWVzIGZvciB0aGUgcmVzdCBvZiB0aGUgY29udHJvbCBmbG93IGdyYXBoLAordGFraW5nIHRoZSBcZkJfXHxfYnVpbHRpbl9leHBlY3RcZlIgaW5mbyBpbnRvIGFjY291bnQuICBUaGUgaW50ZXJhY3Rpb25zCitiZXR3ZWVuIHRoZSBoZXVyaXN0aWNzIGFuZCBcZkJfXHxfYnVpbHRpbl9leHBlY3RcZlIgY2FuIGJlIGNvbXBsZXgsIGFuZCBpbgorc29tZSBjYXNlcywgaXQgbWF5IGJlIHVzZWZ1bCB0byBkaXNhYmxlIHRoZSBoZXVyaXN0aWNzIHNvIHRoYXQgdGhlIGVmZmVjdHMKK29mIFxmQl9cfF9idWlsdGluX2V4cGVjdFxmUiBhcmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZmd1ZXNzXC1icmFuY2hcLXByb2JhYmlsaXR5XGZSIGF0IGxldmVscworXCZcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZnJlb3JkZXJcLWJsb2Nrc1xmUiIgNAorLklYIEl0ZW0gIi1mcmVvcmRlci1ibG9ja3MiCitSZW9yZGVyIGJhc2ljIGJsb2NrcyBpbiB0aGUgY29tcGlsZWQgZnVuY3Rpb24gaW4gb3JkZXIgdG8gcmVkdWNlIG51bWJlciBvZgordGFrZW4gYnJhbmNoZXMgYW5kIGltcHJvdmUgY29kZSBsb2NhbGl0eS4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mcmVvcmRlclwtYmxvY2tzXC1hbmRcLXBhcnRpdGlvblxmUiIgNAorLklYIEl0ZW0gIi1mcmVvcmRlci1ibG9ja3MtYW5kLXBhcnRpdGlvbiIKK0luIGFkZGl0aW9uIHRvIHJlb3JkZXJpbmcgYmFzaWMgYmxvY2tzIGluIHRoZSBjb21waWxlZCBmdW5jdGlvbiwgaW4gb3JkZXIKK3RvIHJlZHVjZSBudW1iZXIgb2YgdGFrZW4gYnJhbmNoZXMsIHBhcnRpdGlvbnMgaG90IGFuZCBjb2xkIGJhc2ljIGJsb2NrcworaW50byBzZXBhcmF0ZSBzZWN0aW9ucyBvZiB0aGUgYXNzZW1ibHkgYW5kIC5vIGZpbGVzLCB0byBpbXByb3ZlCitwYWdpbmcgYW5kIGNhY2hlIGxvY2FsaXR5IHBlcmZvcm1hbmNlLgorLlNwCitUaGlzIG9wdGltaXphdGlvbiBpcyBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYgaW4gdGhlIHByZXNlbmNlIG9mCitleGNlcHRpb24gaGFuZGxpbmcsIGZvciBsaW5rb25jZSBzZWN0aW9ucywgZm9yIGZ1bmN0aW9ucyB3aXRoIGEgdXNlci1kZWZpbmVkCitzZWN0aW9uIGF0dHJpYnV0ZSBhbmQgb24gYW55IGFyY2hpdGVjdHVyZSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgbmFtZWQKK3NlY3Rpb25zLgorLklQICJcZkJcLWZyZW9yZGVyXC1mdW5jdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZnJlb3JkZXItZnVuY3Rpb25zIgorUmVvcmRlciBmdW5jdGlvbnMgaW4gdGhlIG9iamVjdCBmaWxlIGluIG9yZGVyIHRvCitpbXByb3ZlIGNvZGUgbG9jYWxpdHkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHVzaW5nIHNwZWNpYWwKK3N1YnNlY3Rpb25zIFxmKENXXCooQ2AudGV4dC5ob3RcKihDJ1xmUiBmb3IgbW9zdCBmcmVxdWVudGx5IGV4ZWN1dGVkIGZ1bmN0aW9ucyBhbmQKK1wmXGYoQ1dcKihDYC50ZXh0LnVubGlrZWx5XCooQydcZlIgZm9yIHVubGlrZWx5IGV4ZWN1dGVkIGZ1bmN0aW9ucy4gIFJlb3JkZXJpbmcgaXMgZG9uZSBieQordGhlIGxpbmtlciBzbyBvYmplY3QgZmlsZSBmb3JtYXQgbXVzdCBzdXBwb3J0IG5hbWVkIHNlY3Rpb25zIGFuZCBsaW5rZXIgbXVzdAorcGxhY2UgdGhlbSBpbiBhIHJlYXNvbmFibGUgd2F5LgorLlNwCitBbHNvIHByb2ZpbGUgZmVlZGJhY2sgbXVzdCBiZSBhdmFpbGFibGUgdG8gbWFrZSB0aGlzIG9wdGlvbiBlZmZlY3RpdmUuICBTZWUKK1wmXGZCXC1mcHJvZmlsZVwtYXJjc1xmUiBmb3IgZGV0YWlscy4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mc3RyaWN0XC1hbGlhc2luZ1xmUiIgNAorLklYIEl0ZW0gIi1mc3RyaWN0LWFsaWFzaW5nIgorQWxsb3cgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSB0aGUgc3RyaWN0ZXN0IGFsaWFzaW5nIHJ1bGVzIGFwcGxpY2FibGUgdG8KK3RoZSBsYW5ndWFnZSBiZWluZyBjb21waWxlZC4gIEZvciBDIChhbmQgXCooQyspLCB0aGlzIGFjdGl2YXRlcworb3B0aW1pemF0aW9ucyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBleHByZXNzaW9ucy4gIEluIHBhcnRpY3VsYXIsIGFuCitvYmplY3Qgb2Ygb25lIHR5cGUgaXMgYXNzdW1lZCBuZXZlciB0byByZXNpZGUgYXQgdGhlIHNhbWUgYWRkcmVzcyBhcyBhbgorb2JqZWN0IG9mIGEgZGlmZmVyZW50IHR5cGUsIHVubGVzcyB0aGUgdHlwZXMgYXJlIGFsbW9zdCB0aGUgc2FtZS4gIEZvcgorZXhhbXBsZSwgYW4gXGYoQ1dcKihDYHVuc2lnbmVkIGludFwqKEMnXGZSIGNhbiBhbGlhcyBhbiBcZihDV1wqKENgaW50XCooQydcZlIsIGJ1dCBub3QgYQorXCZcZihDV1wqKENgdm9pZCpcKihDJ1xmUiBvciBhIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUi4gIEEgY2hhcmFjdGVyIHR5cGUgbWF5IGFsaWFzIGFueSBvdGhlcgordHlwZS4KKy5TcAorUGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIGNvZGUgbGlrZSB0aGlzOgorLlNwCisuVmIgNAorXCYgICAgICAgIHVuaW9uIGFfdW5pb24geworXCYgICAgICAgICAgaW50IGk7CitcJiAgICAgICAgICBkb3VibGUgZDsKK1wmICAgICAgICB9OworXCYgICAgICAgIAorXCYgICAgICAgIGludCBmKCkgeworXCYgICAgICAgICAgdW5pb24gYV91bmlvbiB0OworXCYgICAgICAgICAgdC5kID0gMy4wOworXCYgICAgICAgICAgcmV0dXJuIHQuaTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorVGhlIHByYWN0aWNlIG9mIHJlYWRpbmcgZnJvbSBhIGRpZmZlcmVudCB1bmlvbiBtZW1iZXIgdGhhbiB0aGUgb25lIG1vc3QKK3JlY2VudGx5IHdyaXR0ZW4gdG8gKGNhbGxlZCBcKihMInR5cGUtcHVubmluZ1wqKFIiKSBpcyBjb21tb24uICBFdmVuIHdpdGgKK1wmXGZCXC1mc3RyaWN0XC1hbGlhc2luZ1xmUiwgdHlwZS1wdW5uaW5nIGlzIGFsbG93ZWQsIHByb3ZpZGVkIHRoZSBtZW1vcnkKK2lzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHVuaW9uIHR5cGUuICBTbywgdGhlIGNvZGUgYWJvdmUgd29ya3MgYXMKK2V4cGVjdGVkLiAgICBIb3dldmVyLCB0aGlzIGNvZGUgbWlnaHQgbm90OgorLlNwCisuVmIgNworXCYgICAgICAgIGludCBmKCkgeworXCYgICAgICAgICAgdW5pb24gYV91bmlvbiB0OworXCYgICAgICAgICAgaW50KiBpcDsKK1wmICAgICAgICAgIHQuZCA9IDMuMDsKK1wmICAgICAgICAgIGlwID0gJnQuaTsKK1wmICAgICAgICAgIHJldHVybiAqaXA7CitcJiAgICAgICAgfQorLlZlCisuU3AKK1NpbWlsYXJseSwgYWNjZXNzIGJ5IHRha2luZyB0aGUgYWRkcmVzcywgY2FzdGluZyB0aGUgcmVzdWx0aW5nIHBvaW50ZXIKK2FuZCBkZXJlZmVyZW5jaW5nIHRoZSByZXN1bHQgaGFzIHVuZGVmaW5lZCBiZWhhdmlvciwgZXZlbiBpZiB0aGUgY2FzdAordXNlcyBhIHVuaW9uIHR5cGUsIGUuZy46CisuU3AKKy5WYiA0CitcJiAgICAgICAgaW50IGYoKSB7CitcJiAgICAgICAgICBkb3VibGUgZCA9IDMuMDsKK1wmICAgICAgICAgIHJldHVybiAoKHVuaW9uIGFfdW5pb24gKikgJmQpXC0+aTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorVGhlIFxmQlwtZnN0cmljdFwtYWxpYXNpbmdcZlIgb3B0aW9uIGlzIGVuYWJsZWQgYXQgbGV2ZWxzCitcJlxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZnN0cmljdFwtb3ZlcmZsb3dcZlIiIDQKKy5JWCBJdGVtICItZnN0cmljdC1vdmVyZmxvdyIKK0FsbG93IHRoZSBjb21waWxlciB0byBhc3N1bWUgc3RyaWN0IHNpZ25lZCBvdmVyZmxvdyBydWxlcywgZGVwZW5kaW5nCitvbiB0aGUgbGFuZ3VhZ2UgYmVpbmcgY29tcGlsZWQuICBGb3IgQyAoYW5kIFwqKEMrKSB0aGlzIG1lYW5zIHRoYXQKK292ZXJmbG93IHdoZW4gZG9pbmcgYXJpdGhtZXRpYyB3aXRoIHNpZ25lZCBudW1iZXJzIGlzIHVuZGVmaW5lZCwgd2hpY2gKK21lYW5zIHRoYXQgdGhlIGNvbXBpbGVyIG1heSBhc3N1bWUgdGhhdCBpdCBkb2VzIG5vdCBoYXBwZW4uICBUaGlzCitwZXJtaXRzIHZhcmlvdXMgb3B0aW1pemF0aW9ucy4gIEZvciBleGFtcGxlLCB0aGUgY29tcGlsZXIgYXNzdW1lcwordGhhdCBhbiBleHByZXNzaW9uIGxpa2UgXGYoQ1dcKihDYGkgKyAxMCA+IGlcKihDJ1xmUiBpcyBhbHdheXMgdHJ1ZSBmb3IKK3NpZ25lZCBcZihDV1wqKENgaVwqKEMnXGZSLiAgVGhpcyBhc3N1bXB0aW9uIGlzIG9ubHkgdmFsaWQgaWYgc2lnbmVkIG92ZXJmbG93IGlzCit1bmRlZmluZWQsIGFzIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlIGlmIFxmKENXXCooQ2BpICsgMTBcKihDJ1xmUiBvdmVyZmxvd3Mgd2hlbgordXNpbmcgdHdvcyBjb21wbGVtZW50IGFyaXRobWV0aWMuICBXaGVuIHRoaXMgb3B0aW9uIGlzIGluIGVmZmVjdCBhbnkKK2F0dGVtcHQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gb3BlcmF0aW9uIG9uIHNpZ25lZCBudW1iZXJzIAorb3ZlcmZsb3dzIG11c3QgYmUgd3JpdHRlbiBjYXJlZnVsbHkgdG8gbm90IGFjdHVhbGx5IGludm9sdmUgb3ZlcmZsb3cuCisuU3AKK1RoaXMgb3B0aW9uIGFsc28gYWxsb3dzIHRoZSBjb21waWxlciB0byBhc3N1bWUgc3RyaWN0IHBvaW50ZXIKK3NlbWFudGljczogZ2l2ZW4gYSBwb2ludGVyIHRvIGFuIG9iamVjdCwgaWYgYWRkaW5nIGFuIG9mZnNldCB0byB0aGF0Citwb2ludGVyIGRvZXMgbm90IHByb2R1Y2UgYSBwb2ludGVyIHRvIHRoZSBzYW1lIG9iamVjdCwgdGhlIGFkZGl0aW9uIGlzCit1bmRlZmluZWQuICBUaGlzIHBlcm1pdHMgdGhlIGNvbXBpbGVyIHRvIGNvbmNsdWRlIHRoYXQgXGYoQ1dcKihDYHAgKyB1ID4KK3BcKihDJ1xmUiBpcyBhbHdheXMgdHJ1ZSBmb3IgYSBwb2ludGVyIFxmKENXXCooQ2BwXCooQydcZlIgYW5kIHVuc2lnbmVkIGludGVnZXIKK1wmXGYoQ1dcKihDYHVcKihDJ1xmUi4gIFRoaXMgYXNzdW1wdGlvbiBpcyBvbmx5IHZhbGlkIGJlY2F1c2UgcG9pbnRlciB3cmFwYXJvdW5kIGlzCit1bmRlZmluZWQsIGFzIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlIGlmIFxmKENXXCooQ2BwICsgdVwqKEMnXGZSIG92ZXJmbG93cyB1c2luZwordHdvcyBjb21wbGVtZW50IGFyaXRobWV0aWMuCisuU3AKK1NlZSBhbHNvIHRoZSBcZkJcLWZ3cmFwdlxmUiBvcHRpb24uICBVc2luZyBcZkJcLWZ3cmFwdlxmUiBtZWFucwordGhhdCBpbnRlZ2VyIHNpZ25lZCBvdmVyZmxvdyBpcyBmdWxseSBkZWZpbmVkOiBpdCB3cmFwcy4gIFdoZW4KK1wmXGZCXC1md3JhcHZcZlIgaXMgdXNlZCwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuCitcJlxmQlwtZnN0cmljdFwtb3ZlcmZsb3dcZlIgYW5kIFxmQlwtZm5vXC1zdHJpY3RcLW92ZXJmbG93XGZSIGZvcgoraW50ZWdlcnMuICBXaXRoIFxmQlwtZndyYXB2XGZSIGNlcnRhaW4gdHlwZXMgb2Ygb3ZlcmZsb3cgYXJlCitwZXJtaXR0ZWQuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbXBpbGVyIGdldHMgYW4gb3ZlcmZsb3cgd2hlbiBkb2luZworYXJpdGhtZXRpYyBvbiBjb25zdGFudHMsIHRoZSBvdmVyZmxvd2VkIHZhbHVlIGNhbiBzdGlsbCBiZSB1c2VkIHdpdGgKK1wmXGZCXC1md3JhcHZcZlIsIGJ1dCBub3Qgb3RoZXJ3aXNlLgorLlNwCitUaGUgXGZCXC1mc3RyaWN0XC1vdmVyZmxvd1xmUiBvcHRpb24gaXMgZW5hYmxlZCBhdCBsZXZlbHMKK1wmXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mYWxpZ25cLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mYWxpZ24tZnVuY3Rpb25zIgorLlBEIDAKKy5JUCAiXGZCXC1mYWxpZ25cLWZ1bmN0aW9ucz1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZhbGlnbi1mdW5jdGlvbnM9biIKKy5QRAorQWxpZ24gdGhlIHN0YXJ0IG9mIGZ1bmN0aW9ucyB0byB0aGUgbmV4dCBwb3dlci1vZi10d28gZ3JlYXRlciB0aGFuCitcJlxmSW5cZlIsIHNraXBwaW5nIHVwIHRvIFxmSW5cZlIgYnl0ZXMuICBGb3IgaW5zdGFuY2UsCitcJlxmQlwtZmFsaWduXC1mdW5jdGlvbnM9MzJcZlIgYWxpZ25zIGZ1bmN0aW9ucyB0byB0aGUgbmV4dCAzMlwtYnl0ZQorYm91bmRhcnksIGJ1dCBcZkJcLWZhbGlnblwtZnVuY3Rpb25zPTI0XGZSIGFsaWducyB0byB0aGUgbmV4dAorMzJcLWJ5dGUgYm91bmRhcnkgb25seSBpZiB0aGlzIGNhbiBiZSBkb25lIGJ5IHNraXBwaW5nIDIzIGJ5dGVzIG9yIGxlc3MuCisuU3AKK1wmXGZCXC1mbm9cLWFsaWduXC1mdW5jdGlvbnNcZlIgYW5kIFxmQlwtZmFsaWduXC1mdW5jdGlvbnM9MVxmUiBhcmUKK2VxdWl2YWxlbnQgYW5kIG1lYW4gdGhhdCBmdW5jdGlvbnMgYXJlIG5vdCBhbGlnbmVkLgorLlNwCitTb21lIGFzc2VtYmxlcnMgb25seSBzdXBwb3J0IHRoaXMgZmxhZyB3aGVuIFxmSW5cZlIgaXMgYSBwb3dlciBvZiB0d287CitpbiB0aGF0IGNhc2UsIGl0IGlzIHJvdW5kZWQgdXAuCisuU3AKK0lmIFxmSW5cZlIgaXMgbm90IHNwZWNpZmllZCBvciBpcyB6ZXJvLCB1c2UgYSBtYWNoaW5lLWRlcGVuZGVudCBkZWZhdWx0LgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLgorLklQICJcZkJcLWZhbGlnblwtbGFiZWxzXGZSIiA0CisuSVggSXRlbSAiLWZhbGlnbi1sYWJlbHMiCisuUEQgMAorLklQICJcZkJcLWZhbGlnblwtbGFiZWxzPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZmFsaWduLWxhYmVscz1uIgorLlBECitBbGlnbiBhbGwgYnJhbmNoIHRhcmdldHMgdG8gYSBwb3dlci1vZi10d28gYm91bmRhcnksIHNraXBwaW5nIHVwIHRvCitcJlxmSW5cZlIgYnl0ZXMgbGlrZSBcZkJcLWZhbGlnblwtZnVuY3Rpb25zXGZSLiAgVGhpcyBvcHRpb24gY2FuIGVhc2lseQorbWFrZSBjb2RlIHNsb3dlciwgYmVjYXVzZSBpdCBtdXN0IGluc2VydCBkdW1teSBvcGVyYXRpb25zIGZvciB3aGVuIHRoZQorYnJhbmNoIHRhcmdldCBpcyByZWFjaGVkIGluIHRoZSB1c3VhbCBmbG93IG9mIHRoZSBjb2RlLgorLlNwCitcJlxmQlwtZm5vXC1hbGlnblwtbGFiZWxzXGZSIGFuZCBcZkJcLWZhbGlnblwtbGFiZWxzPTFcZlIgYXJlCitlcXVpdmFsZW50IGFuZCBtZWFuIHRoYXQgbGFiZWxzIGFyZSBub3QgYWxpZ25lZC4KKy5TcAorSWYgXGZCXC1mYWxpZ25cLWxvb3BzXGZSIG9yIFxmQlwtZmFsaWduXC1qdW1wc1xmUiBhcmUgYXBwbGljYWJsZSBhbmQKK2FyZSBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZSwgdGhlbiB0aGVpciB2YWx1ZXMgYXJlIHVzZWQgaW5zdGVhZC4KKy5TcAorSWYgXGZJblxmUiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHplcm8sIHVzZSBhIG1hY2hpbmUtZGVwZW5kZW50IGRlZmF1bHQKK3doaWNoIGlzIHZlcnkgbGlrZWx5IHRvIGJlIFxmQjFcZlIsIG1lYW5pbmcgbm8gYWxpZ25tZW50LgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLgorLklQICJcZkJcLWZhbGlnblwtbG9vcHNcZlIiIDQKKy5JWCBJdGVtICItZmFsaWduLWxvb3BzIgorLlBEIDAKKy5JUCAiXGZCXC1mYWxpZ25cLWxvb3BzPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZmFsaWduLWxvb3BzPW4iCisuUEQKK0FsaWduIGxvb3BzIHRvIGEgcG93ZXItb2YtdHdvIGJvdW5kYXJ5LCBza2lwcGluZyB1cCB0byBcZkluXGZSIGJ5dGVzCitsaWtlIFxmQlwtZmFsaWduXC1mdW5jdGlvbnNcZlIuICBJZiB0aGUgbG9vcHMgYXJlCitleGVjdXRlZCBtYW55IHRpbWVzLCB0aGlzIG1ha2VzIHVwIGZvciBhbnkgZXhlY3V0aW9uIG9mIHRoZSBkdW1teQorb3BlcmF0aW9ucy4KKy5TcAorXCZcZkJcLWZub1wtYWxpZ25cLWxvb3BzXGZSIGFuZCBcZkJcLWZhbGlnblwtbG9vcHM9MVxmUiBhcmUKK2VxdWl2YWxlbnQgYW5kIG1lYW4gdGhhdCBsb29wcyBhcmUgbm90IGFsaWduZWQuCisuU3AKK0lmIFxmSW5cZlIgaXMgbm90IHNwZWNpZmllZCBvciBpcyB6ZXJvLCB1c2UgYSBtYWNoaW5lLWRlcGVuZGVudCBkZWZhdWx0LgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLgorLklQICJcZkJcLWZhbGlnblwtanVtcHNcZlIiIDQKKy5JWCBJdGVtICItZmFsaWduLWp1bXBzIgorLlBEIDAKKy5JUCAiXGZCXC1mYWxpZ25cLWp1bXBzPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZmFsaWduLWp1bXBzPW4iCisuUEQKK0FsaWduIGJyYW5jaCB0YXJnZXRzIHRvIGEgcG93ZXItb2YtdHdvIGJvdW5kYXJ5LCBmb3IgYnJhbmNoIHRhcmdldHMKK3doZXJlIHRoZSB0YXJnZXRzIGNhbiBvbmx5IGJlIHJlYWNoZWQgYnkganVtcGluZywgc2tpcHBpbmcgdXAgdG8gXGZJblxmUgorYnl0ZXMgbGlrZSBcZkJcLWZhbGlnblwtZnVuY3Rpb25zXGZSLiAgSW4gdGhpcyBjYXNlLCBubyBkdW1teSBvcGVyYXRpb25zCituZWVkIGJlIGV4ZWN1dGVkLgorLlNwCitcJlxmQlwtZm5vXC1hbGlnblwtanVtcHNcZlIgYW5kIFxmQlwtZmFsaWduXC1qdW1wcz0xXGZSIGFyZQorZXF1aXZhbGVudCBhbmQgbWVhbiB0aGF0IGxvb3BzIGFyZSBub3QgYWxpZ25lZC4KKy5TcAorSWYgXGZJblxmUiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHplcm8sIHVzZSBhIG1hY2hpbmUtZGVwZW5kZW50IGRlZmF1bHQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZnVuaXRcLWF0XC1hXC10aW1lXGZSIiA0CisuSVggSXRlbSAiLWZ1bml0LWF0LWEtdGltZSIKK1RoaXMgb3B0aW9uIGlzIGxlZnQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gXGZCXC1mdW5pdFwtYXRcLWFcLXRpbWVcZlIKK2hhcyBubyBlZmZlY3QsIHdoaWxlIFxmQlwtZm5vXC11bml0XC1hdFwtYVwtdGltZVxmUiBpbXBsaWVzCitcJlxmQlwtZm5vXC10b3BsZXZlbFwtcmVvcmRlclxmUiBhbmQgXGZCXC1mbm9cLXNlY3Rpb25cLWFuY2hvcnNcZlIuCisuU3AKK0VuYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1mbm9cLXRvcGxldmVsXC1yZW9yZGVyXGZSIiA0CisuSVggSXRlbSAiLWZuby10b3BsZXZlbC1yZW9yZGVyIgorRG8gbm90IHJlb3JkZXIgdG9wLWxldmVsIGZ1bmN0aW9ucywgdmFyaWFibGVzLCBhbmQgXGYoQ1dcKihDYGFzbVwqKEMnXGZSCitzdGF0ZW1lbnRzLiAgT3V0cHV0IHRoZW0gaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUKK2lucHV0IGZpbGUuICBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIHVucmVmZXJlbmNlZCBzdGF0aWMgdmFyaWFibGVzCithcmUgbm90IHJlbW92ZWQuICBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBzdXBwb3J0IGV4aXN0aW5nIGNvZGUKK3RoYXQgcmVsaWVzIG9uIGEgcGFydGljdWxhciBvcmRlcmluZy4gIEZvciBuZXcgY29kZSwgaXQgaXMgYmV0dGVyIHRvCit1c2UgYXR0cmlidXRlcy4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbCBcZkJcLU8wXGZSLiAgV2hlbiBkaXNhYmxlZCBleHBsaWNpdGx5LCBpdCBhbHNvIGltcGxpZXMKK1wmXGZCXC1mbm9cLXNlY3Rpb25cLWFuY2hvcnNcZlIsIHdoaWNoIGlzIG90aGVyd2lzZSBlbmFibGVkIGF0IFxmQlwtTzBcZlIgb24gc29tZQordGFyZ2V0cy4KKy5JUCAiXGZCXC1md2ViXGZSIiA0CisuSVggSXRlbSAiLWZ3ZWIiCitDb25zdHJ1Y3RzIHdlYnMgYXMgY29tbW9ubHkgdXNlZCBmb3IgcmVnaXN0ZXIgYWxsb2NhdGlvbiBwdXJwb3NlcyBhbmQgYXNzaWduCitlYWNoIHdlYiBpbmRpdmlkdWFsIHBzZXVkbyByZWdpc3Rlci4gIFRoaXMgYWxsb3dzIHRoZSByZWdpc3RlciBhbGxvY2F0aW9uIHBhc3MKK3RvIG9wZXJhdGUgb24gcHNldWRvcyBkaXJlY3RseSwgYnV0IGFsc28gc3RyZW5ndGhlbnMgc2V2ZXJhbCBvdGhlciBvcHRpbWl6YXRpb24KK3Bhc3Nlcywgc3VjaCBhcyBccy0xQ1NFXHMwLCBsb29wIG9wdGltaXplciBhbmQgdHJpdmlhbCBkZWFkIGNvZGUgcmVtb3Zlci4gIEl0IGNhbiwKK2hvd2V2ZXIsIG1ha2UgZGVidWdnaW5nIGltcG9zc2libGUsIHNpbmNlIHZhcmlhYmxlcyBubyBsb25nZXIgc3RheSBpbiBhCitcJlwqKEwiaG9tZSByZWdpc3RlclwqKFIiLgorLlNwCitFbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCBcZkJcLWZ1bnJvbGxcLWxvb3BzXGZSLgorLklQICJcZkJcLWZ3aG9sZVwtcHJvZ3JhbVxmUiIgNAorLklYIEl0ZW0gIi1md2hvbGUtcHJvZ3JhbSIKK0Fzc3VtZSB0aGF0IHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgcmVwcmVzZW50cyB0aGUgd2hvbGUgcHJvZ3JhbSBiZWluZworY29tcGlsZWQuICBBbGwgcHVibGljIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBcZihDV1wqKENgbWFpblwqKEMnXGZSCithbmQgdGhvc2UgbWVyZ2VkIGJ5IGF0dHJpYnV0ZSBcZihDV1wqKENgZXh0ZXJuYWxseV92aXNpYmxlXCooQydcZlIgYmVjb21lIHN0YXRpYyBmdW5jdGlvbnMKK2FuZCBpbiBlZmZlY3QgYXJlIG9wdGltaXplZCBtb3JlIGFnZ3Jlc3NpdmVseSBieSBpbnRlcnByb2NlZHVyYWwgb3B0aW1pemVycy4KKy5TcAorVGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggXGYoQ1dcKihDYFwtZmx0b1wqKEMnXGZSLgorSW5zdGVhZCByZWx5aW5nIG9uIGEgbGlua2VyIHBsdWdpbiBzaG91bGQgcHJvdmlkZSBzYWZlciBhbmQgbW9yZSBwcmVjaXNlCitpbmZvcm1hdGlvbi4KKy5JUCAiXGZCXC1mbHRvWz1cZlJcZkluXGZSXGZCXVxmUiIgNAorLklYIEl0ZW0gIi1mbHRvWz1uXSIKK1RoaXMgb3B0aW9uIHJ1bnMgdGhlIHN0YW5kYXJkIGxpbmstdGltZSBvcHRpbWl6ZXIuICBXaGVuIGludm9rZWQKK3dpdGggc291cmNlIGNvZGUsIGl0IGdlbmVyYXRlcyBccy0xR0lNUExFXHMwIChvbmUgb2YgXHMtMUdDQ1xzMCdzIGludGVybmFsCityZXByZXNlbnRhdGlvbnMpIGFuZCB3cml0ZXMgaXQgdG8gc3BlY2lhbCBccy0xRUxGXHMwIHNlY3Rpb25zIGluIHRoZSBvYmplY3QKK2ZpbGUuICBXaGVuIHRoZSBvYmplY3QgZmlsZXMgYXJlIGxpbmtlZCB0b2dldGhlciwgYWxsIHRoZSBmdW5jdGlvbgorYm9kaWVzIGFyZSByZWFkIGZyb20gdGhlc2UgXHMtMUVMRlxzMCBzZWN0aW9ucyBhbmQgaW5zdGFudGlhdGVkIGFzIGlmIHRoZXkKK2hhZCBiZWVuIHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNsYXRpb24gdW5pdC4KKy5TcAorVG8gdXNlIHRoZSBsaW5rLXRpbWUgb3B0aW1pemVyLCBcZkJcLWZsdG9cZlIgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIGF0Citjb21waWxlIHRpbWUgYW5kIGR1cmluZyB0aGUgZmluYWwgbGluay4gIEZvciBleGFtcGxlOgorLlNwCisuVmIgMworXCYgICAgICAgIGdjYyBcLWMgXC1PMiBcLWZsdG8gZm9vLmMKK1wmICAgICAgICBnY2MgXC1jIFwtTzIgXC1mbHRvIGJhci5jCitcJiAgICAgICAgZ2NjIFwtbyBteXByb2cgXC1mbHRvIFwtTzIgZm9vLm8gYmFyLm8KKy5WZQorLlNwCitUaGUgZmlyc3QgdHdvIGludm9jYXRpb25zIHRvIFxzLTFHQ0NcczAgc2F2ZSBhIGJ5dGVjb2RlIHJlcHJlc2VudGF0aW9uCitvZiBccy0xR0lNUExFXHMwIGludG8gc3BlY2lhbCBccy0xRUxGXHMwIHNlY3Rpb25zIGluc2lkZSBcZklmb28ub1xmUiBhbmQKK1wmXGZJYmFyLm9cZlIuICBUaGUgZmluYWwgaW52b2NhdGlvbiByZWFkcyB0aGUgXHMtMUdJTVBMRVxzMCBieXRlY29kZSBmcm9tCitcJlxmSWZvby5vXGZSIGFuZCBcZkliYXIub1xmUiwgbWVyZ2VzIHRoZSB0d28gZmlsZXMgaW50byBhIHNpbmdsZQoraW50ZXJuYWwgaW1hZ2UsIGFuZCBjb21waWxlcyB0aGUgcmVzdWx0IGFzIHVzdWFsLiAgU2luY2UgYm90aAorXCZcZklmb28ub1xmUiBhbmQgXGZJYmFyLm9cZlIgYXJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGltYWdlLCB0aGlzCitjYXVzZXMgYWxsIHRoZSBpbnRlcnByb2NlZHVyYWwgYW5hbHlzZXMgYW5kIG9wdGltaXphdGlvbnMgaW4gXHMtMUdDQ1xzMCB0bword29yayBhY3Jvc3MgdGhlIHR3byBmaWxlcyBhcyBpZiB0aGV5IHdlcmUgYSBzaW5nbGUgb25lLiAgVGhpcyBtZWFucywKK2ZvciBleGFtcGxlLCB0aGF0IHRoZSBpbmxpbmVyIGlzIGFibGUgdG8gaW5saW5lIGZ1bmN0aW9ucyBpbgorXCZcZkliYXIub1xmUiBpbnRvIGZ1bmN0aW9ucyBpbiBcZklmb28ub1xmUiBhbmQgdmljZS12ZXJzYS4KKy5TcAorQW5vdGhlciAoc2ltcGxlcikgd2F5IHRvIGVuYWJsZSBsaW5rLXRpbWUgb3B0aW1pemF0aW9uIGlzOgorLlNwCisuVmIgMQorXCYgICAgICAgIGdjYyBcLW8gbXlwcm9nIFwtZmx0byBcLU8yIGZvby5jIGJhci5jCisuVmUKKy5TcAorVGhlIGFib3ZlIGdlbmVyYXRlcyBieXRlY29kZSBmb3IgXGZJZm9vLmNcZlIgYW5kIFxmSWJhci5jXGZSLAorbWVyZ2VzIHRoZW0gdG9nZXRoZXIgaW50byBhIHNpbmdsZSBccy0xR0lNUExFXHMwIHJlcHJlc2VudGF0aW9uIGFuZCBvcHRpbWl6ZXMKK3RoZW0gYXMgdXN1YWwgdG8gcHJvZHVjZSBcZklteXByb2dcZlIuCisuU3AKK1RoZSBvbmx5IGltcG9ydGFudCB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0byBlbmFibGUgbGluay10aW1lCitvcHRpbWl6YXRpb25zIHRoZSBcZkJcLWZsdG9cZlIgZmxhZyBuZWVkcyB0byBiZSBwYXNzZWQgdG8gYm90aCB0aGUKK2NvbXBpbGUgYW5kIHRoZSBsaW5rIGNvbW1hbmRzLgorLlNwCitUbyBtYWtlIHdob2xlIHByb2dyYW0gb3B0aW1pemF0aW9uIGVmZmVjdGl2ZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UKK2NlcnRhaW4gd2hvbGUgcHJvZ3JhbSBhc3N1bXB0aW9ucy4gIFRoZSBjb21waWxlciBuZWVkcyB0byBrbm93Cit3aGF0IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGNhbiBiZSBhY2Nlc3NlZCBieSBsaWJyYXJpZXMgYW5kIHJ1bnRpbWUKK291dHNpZGUgb2YgdGhlIGxpbmstdGltZSBvcHRpbWl6ZWQgdW5pdC4gIFdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBsaW5rZXIsCit0aGUgbGlua2VyIHBsdWdpbiAoc2VlIFxmQlwtZnVzZVwtbGlua2VyXC1wbHVnaW5cZlIpIHBhc3NlcyBpbmZvcm1hdGlvbgordG8gdGhlIGNvbXBpbGVyIGFib3V0IHVzZWQgYW5kIGV4dGVybmFsbHkgdmlzaWJsZSBzeW1ib2xzLiAgV2hlbgordGhlIGxpbmtlciBwbHVnaW4gaXMgbm90IGF2YWlsYWJsZSwgXGZCXC1md2hvbGVcLXByb2dyYW1cZlIgc2hvdWxkIGJlCit1c2VkIHRvIGFsbG93IHRoZSBjb21waWxlciB0byBtYWtlIHRoZXNlIGFzc3VtcHRpb25zLCB3aGljaCBsZWFkcwordG8gbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiBkZWNpc2lvbnMuCisuU3AKK05vdGUgdGhhdCB3aGVuIGEgZmlsZSBpcyBjb21waWxlZCB3aXRoIFxmQlwtZmx0b1xmUiwgdGhlIGdlbmVyYXRlZAorb2JqZWN0IGZpbGUgaXMgbGFyZ2VyIHRoYW4gYSByZWd1bGFyIG9iamVjdCBmaWxlIGJlY2F1c2UgaXQgCitjb250YWlucyBccy0xR0lNUExFXHMwIGJ5dGVjb2RlcyBhbmQgdGhlIHVzdWFsIGZpbmFsIGNvZGUuICBUaGlzIG1lYW5zIHRoYXQKK29iamVjdCBmaWxlcyB3aXRoIFxzLTFMVE9cczAgaW5mb3JtYXRpb24gY2FuIGJlIGxpbmtlZCBhcyBub3JtYWwgb2JqZWN0CitmaWxlczsgaWYgXGZCXC1mbHRvXGZSIGlzIG5vdCBwYXNzZWQgdG8gdGhlIGxpbmtlciwgbm8KK2ludGVycHJvY2VkdXJhbCBvcHRpbWl6YXRpb25zIGFyZSBhcHBsaWVkLgorLlNwCitBZGRpdGlvbmFsbHksIHRoZSBvcHRpbWl6YXRpb24gZmxhZ3MgdXNlZCB0byBjb21waWxlIGluZGl2aWR1YWwgZmlsZXMKK2FyZSBub3QgbmVjZXNzYXJpbHkgcmVsYXRlZCB0byB0aG9zZSB1c2VkIGF0IGxpbmsgdGltZS4gIEZvciBpbnN0YW5jZSwKKy5TcAorLlZiIDMKK1wmICAgICAgICBnY2MgXC1jIFwtTzAgXC1mbHRvIGZvby5jCitcJiAgICAgICAgZ2NjIFwtYyBcLU8wIFwtZmx0byBiYXIuYworXCYgICAgICAgIGdjYyBcLW8gbXlwcm9nIFwtZmx0byBcLU8zIGZvby5vIGJhci5vCisuVmUKKy5TcAorVGhpcyBwcm9kdWNlcyBpbmRpdmlkdWFsIG9iamVjdCBmaWxlcyB3aXRoIHVub3B0aW1pemVkIGFzc2VtYmxlcgorY29kZSwgYnV0IHRoZSByZXN1bHRpbmcgYmluYXJ5IFxmSW15cHJvZ1xmUiBpcyBvcHRpbWl6ZWQgYXQKK1wmXGZCXC1PM1xmUi4gIElmLCBpbnN0ZWFkLCB0aGUgZmluYWwgYmluYXJ5IGlzIGdlbmVyYXRlZCB3aXRob3V0CitcJlxmQlwtZmx0b1xmUiwgdGhlbiBcZklteXByb2dcZlIgaXMgbm90IG9wdGltaXplZC4KKy5TcAorV2hlbiBwcm9kdWNpbmcgdGhlIGZpbmFsIGJpbmFyeSB3aXRoIFxmQlwtZmx0b1xmUiwgXHMtMUdDQ1xzMCBvbmx5CithcHBsaWVzIGxpbmstdGltZSBvcHRpbWl6YXRpb25zIHRvIHRob3NlIGZpbGVzIHRoYXQgY29udGFpbiBieXRlY29kZS4KK1RoZXJlZm9yZSwgeW91IGNhbiBtaXggYW5kIG1hdGNoIG9iamVjdCBmaWxlcyBhbmQgbGlicmFyaWVzIHdpdGgKK1wmXHMtMUdJTVBMRVxzMCBieXRlY29kZXMgYW5kIGZpbmFsIG9iamVjdCBjb2RlLiAgXHMtMUdDQ1xzMCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMKK3doaWNoIGZpbGVzIHRvIG9wdGltaXplIGluIFxzLTFMVE9cczAgbW9kZSBhbmQgd2hpY2ggZmlsZXMgdG8gbGluayB3aXRob3V0CitmdXJ0aGVyIHByb2Nlc3NpbmcuCisuU3AKK1RoZXJlIGFyZSBzb21lIGNvZGUgZ2VuZXJhdGlvbiBmbGFncyBwcmVzZXJ2ZWQgYnkgXHMtMUdDQ1xzMCB3aGVuCitnZW5lcmF0aW5nIGJ5dGVjb2RlcywgYXMgdGhleSBuZWVkIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBmaW5hbCBsaW5rCitzdGFnZS4gIEN1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzYXZlZCBpbnRvIHRoZSBccy0xR0lNUExFXHMwCitieXRlY29kZSBmaWxlczogXGZCXC1mUElDXGZSLCBcZkJcLWZjb21tb25cZlIgYW5kIGFsbCB0aGUKK1wmXGZCXC1tXGZSIHRhcmdldCBmbGFncy4KKy5TcAorQXQgbGluayB0aW1lLCB0aGVzZSBvcHRpb25zIGFyZSByZWFkIGluIGFuZCByZWFwcGxpZWQuICBOb3RlIHRoYXQgdGhlCitjdXJyZW50IGltcGxlbWVudGF0aW9uIG1ha2VzIG5vIGF0dGVtcHQgdG8gcmVjb2duaXplIGNvbmZsaWN0aW5nCit2YWx1ZXMgZm9yIHRoZXNlIG9wdGlvbnMuICBJZiBkaWZmZXJlbnQgZmlsZXMgaGF2ZSBjb25mbGljdGluZyBvcHRpb24KK3ZhbHVlcyAoZS5nLiwgb25lIGZpbGUgaXMgY29tcGlsZWQgd2l0aCBcZkJcLWZQSUNcZlIgYW5kIGFub3RoZXIKK2lzbid0KSwgdGhlIGNvbXBpbGVyIHNpbXBseSB1c2VzIHRoZSBsYXN0IHZhbHVlIHJlYWQgZnJvbSB0aGUKK2J5dGVjb2RlIGZpbGVzLiAgSXQgaXMgcmVjb21tZW5kZWQsIHRoZW4sIHRoYXQgeW91IGNvbXBpbGUgYWxsIHRoZSBmaWxlcworcGFydGljaXBhdGluZyBpbiB0aGUgc2FtZSBsaW5rIHdpdGggdGhlIHNhbWUgb3B0aW9ucy4KKy5TcAorSWYgXHMtMUxUT1xzMCBlbmNvdW50ZXJzIG9iamVjdHMgd2l0aCBDIGxpbmthZ2UgZGVjbGFyZWQgd2l0aCBpbmNvbXBhdGlibGUKK3R5cGVzIGluIHNlcGFyYXRlIHRyYW5zbGF0aW9uIHVuaXRzIHRvIGJlIGxpbmtlZCB0b2dldGhlciAodW5kZWZpbmVkCitiZWhhdmlvciBhY2NvcmRpbmcgdG8gXHMtMUlTT1xzMCBDOTkgNi4yLjcpLCBhIG5vbi1mYXRhbCBkaWFnbm9zdGljIG1heSBiZQoraXNzdWVkLiAgVGhlIGJlaGF2aW9yIGlzIHN0aWxsIHVuZGVmaW5lZCBhdCBydW4gdGltZS4KKy5TcAorQW5vdGhlciBmZWF0dXJlIG9mIFxzLTFMVE9cczAgaXMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBhcHBseSBpbnRlcnByb2NlZHVyYWwKK29wdGltaXphdGlvbnMgb24gZmlsZXMgd3JpdHRlbiBpbiBkaWZmZXJlbnQgbGFuZ3VhZ2VzLiAgVGhpcyByZXF1aXJlcworc3VwcG9ydCBpbiB0aGUgbGFuZ3VhZ2UgZnJvbnQgZW5kLiAgQ3VycmVudGx5LCB0aGUgQywgXCooQysgYW5kCitGb3J0cmFuIGZyb250IGVuZHMgYXJlIGNhcGFibGUgb2YgZW1pdHRpbmcgXHMtMUdJTVBMRVxzMCBieXRlY29kZXMsIHNvCitzb21ldGhpbmcgbGlrZSB0aGlzIHNob3VsZCB3b3JrOgorLlNwCisuVmIgNAorXCYgICAgICAgIGdjYyBcLWMgXC1mbHRvIGZvby5jCitcJiAgICAgICAgZysrIFwtYyBcLWZsdG8gYmFyLmNjCitcJiAgICAgICAgZ2ZvcnRyYW4gXC1jIFwtZmx0byBiYXouZjkwCitcJiAgICAgICAgZysrIFwtbyBteXByb2cgXC1mbHRvIFwtTzMgZm9vLm8gYmFyLm8gYmF6Lm8gXC1sZ2ZvcnRyYW4KKy5WZQorLlNwCitOb3RpY2UgdGhhdCB0aGUgZmluYWwgbGluayBpcyBkb25lIHdpdGggXGZCZysrXGZSIHRvIGdldCB0aGUgXCooQysKK3J1bnRpbWUgbGlicmFyaWVzIGFuZCBcZkJcLWxnZm9ydHJhblxmUiBpcyBhZGRlZCB0byBnZXQgdGhlIEZvcnRyYW4KK3J1bnRpbWUgbGlicmFyaWVzLiAgSW4gZ2VuZXJhbCwgd2hlbiBtaXhpbmcgbGFuZ3VhZ2VzIGluIFxzLTFMVE9cczAgbW9kZSwgeW91CitzaG91bGQgdXNlIHRoZSBzYW1lIGxpbmsgY29tbWFuZCBvcHRpb25zIGFzIHdoZW4gbWl4aW5nIGxhbmd1YWdlcyBpbiBhCityZWd1bGFyIChub24tTFRPKSBjb21waWxhdGlvbjsgYWxsIHlvdSBuZWVkIHRvIGFkZCBpcyBcZkJcLWZsdG9cZlIgdG8KK2FsbCB0aGUgY29tcGlsZSBhbmQgbGluayBjb21tYW5kcy4KKy5TcAorSWYgb2JqZWN0IGZpbGVzIGNvbnRhaW5pbmcgXHMtMUdJTVBMRVxzMCBieXRlY29kZSBhcmUgc3RvcmVkIGluIGEgbGlicmFyeSBhcmNoaXZlLCBzYXkKK1wmXGZJbGliZm9vLmFcZlIsIGl0IGlzIHBvc3NpYmxlIHRvIGV4dHJhY3QgYW5kIHVzZSB0aGVtIGluIGFuIFxzLTFMVE9cczAgbGluayBpZiB5b3UKK2FyZSB1c2luZyBhIGxpbmtlciB3aXRoIHBsdWdpbiBzdXBwb3J0LiAgVG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwgdXNlCit0aGUgZmxhZyBcZkJcLWZ1c2VcLWxpbmtlclwtcGx1Z2luXGZSIGF0IGxpbmsgdGltZToKKy5TcAorLlZiIDEKK1wmICAgICAgICBnY2MgXC1vIG15cHJvZyBcLU8yIFwtZmx0byBcLWZ1c2VcLWxpbmtlclwtcGx1Z2luIGEubyBiLm8gXC1sZm9vCisuVmUKKy5TcAorV2l0aCB0aGUgbGlua2VyIHBsdWdpbiBlbmFibGVkLCB0aGUgbGlua2VyIGV4dHJhY3RzIHRoZSBuZWVkZWQKK1wmXHMtMUdJTVBMRVxzMCBmaWxlcyBmcm9tIFxmSWxpYmZvby5hXGZSIGFuZCBwYXNzZXMgdGhlbSBvbiB0byB0aGUgcnVubmluZyBccy0xR0NDXHMwCit0byBtYWtlIHRoZW0gcGFydCBvZiB0aGUgYWdncmVnYXRlZCBccy0xR0lNUExFXHMwIGltYWdlIHRvIGJlIG9wdGltaXplZC4KKy5TcAorSWYgeW91IGFyZSBub3QgdXNpbmcgYSBsaW5rZXIgd2l0aCBwbHVnaW4gc3VwcG9ydCBhbmQvb3IgZG8gbm90CitlbmFibGUgdGhlIGxpbmtlciBwbHVnaW4sIHRoZW4gdGhlIG9iamVjdHMgaW5zaWRlIFxmSWxpYmZvby5hXGZSCithcmUgZXh0cmFjdGVkIGFuZCBsaW5rZWQgYXMgdXN1YWwsIGJ1dCB0aGV5IGRvIG5vdCBwYXJ0aWNpcGF0ZQoraW4gdGhlIFxzLTFMVE9cczAgb3B0aW1pemF0aW9uIHByb2Nlc3MuCisuU3AKK0xpbmstdGltZSBvcHRpbWl6YXRpb25zIGRvIG5vdCByZXF1aXJlIHRoZSBwcmVzZW5jZSBvZiB0aGUgd2hvbGUgcHJvZ3JhbSB0bworb3BlcmF0ZS4gIElmIHRoZSBwcm9ncmFtIGRvZXMgbm90IHJlcXVpcmUgYW55IHN5bWJvbHMgdG8gYmUgZXhwb3J0ZWQsIGl0IGlzCitwb3NzaWJsZSB0byBjb21iaW5lIFxmQlwtZmx0b1xmUiBhbmQgXGZCXC1md2hvbGVcLXByb2dyYW1cZlIgdG8gYWxsb3cKK3RoZSBpbnRlcnByb2NlZHVyYWwgb3B0aW1pemVycyB0byB1c2UgbW9yZSBhZ2dyZXNzaXZlIGFzc3VtcHRpb25zIHdoaWNoIG1heQorbGVhZCB0byBpbXByb3ZlZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4KK1VzZSBvZiBcZkJcLWZ3aG9sZVwtcHJvZ3JhbVxmUiBpcyBub3QgbmVlZGVkIHdoZW4gbGlua2VyIHBsdWdpbiBpcworYWN0aXZlIChzZWUgXGZCXC1mdXNlXC1saW5rZXJcLXBsdWdpblxmUikuCisuU3AKK1RoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIFxzLTFMVE9cczAgbWFrZXMgbm8KK2F0dGVtcHQgdG8gZ2VuZXJhdGUgYnl0ZWNvZGUgdGhhdCBpcyBwb3J0YWJsZSBiZXR3ZWVuIGRpZmZlcmVudAordHlwZXMgb2YgaG9zdHMuICBUaGUgYnl0ZWNvZGUgZmlsZXMgYXJlIHZlcnNpb25lZCBhbmQgdGhlcmUgaXMgYQorc3RyaWN0IHZlcnNpb24gY2hlY2ssIHNvIGJ5dGVjb2RlIGZpbGVzIGdlbmVyYXRlZCBpbiBvbmUgdmVyc2lvbiBvZgorXCZccy0xR0NDXHMwIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBvbGRlci9uZXdlciB2ZXJzaW9uIG9mIFxzLTFHQ0NcczAuCisuU3AKK0xpbmstdGltZSBvcHRpbWl6YXRpb24gZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggZ2VuZXJhdGlvbiBvZiBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uLiAgQ29tYmluaW5nIFxmQlwtZmx0b1xmUiB3aXRoCitcJlxmQlwtZ1xmUiBpcyBjdXJyZW50bHkgZXhwZXJpbWVudGFsIGFuZCBleHBlY3RlZCB0byBwcm9kdWNlIHdyb25nCityZXN1bHRzLgorLlNwCitJZiB5b3Ugc3BlY2lmeSB0aGUgb3B0aW9uYWwgXGZJblxmUiwgdGhlIG9wdGltaXphdGlvbiBhbmQgY29kZQorZ2VuZXJhdGlvbiBkb25lIGF0IGxpbmsgdGltZSBpcyBleGVjdXRlZCBpbiBwYXJhbGxlbCB1c2luZyBcZkluXGZSCitwYXJhbGxlbCBqb2JzIGJ5IHV0aWxpemluZyBhbiBpbnN0YWxsZWQgXGZCbWFrZVxmUiBwcm9ncmFtLiAgVGhlCitlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJccy0xTUFLRVxzMFxmUiBtYXkgYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgcHJvZ3JhbQordXNlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBcZkluXGZSIGlzIDEuCisuU3AKK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IFxmQlwtZmx0bz1qb2JzZXJ2ZXJcZlIgdG8gdXNlIFxzLTFHTlVcczAgbWFrZSdzCitqb2Igc2VydmVyIG1vZGUgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgam9icy4gVGhpcworaXMgdXNlZnVsIHdoZW4gdGhlIE1ha2VmaWxlIGNhbGxpbmcgXHMtMUdDQ1xzMCBpcyBhbHJlYWR5IGV4ZWN1dGluZyBpbiBwYXJhbGxlbC4KK1lvdSBtdXN0IHByZXBlbmQgYSBcZkIrXGZSIHRvIHRoZSBjb21tYW5kIHJlY2lwZSBpbiB0aGUgcGFyZW50IE1ha2VmaWxlCitmb3IgdGhpcyB0byB3b3JrLiAgVGhpcyBvcHRpb24gbGlrZWx5IG9ubHkgd29ya3MgaWYgXGZCXHMtMU1BS0VcczBcZlIgaXMKK1wmXHMtMUdOVVxzMCBtYWtlLgorLlNwCitUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLWZsdG9cLXBhcnRpdGlvbj1cZlJcZklhbGdcZlIiIDQKKy5JWCBJdGVtICItZmx0by1wYXJ0aXRpb249YWxnIgorU3BlY2lmeSB0aGUgcGFydGl0aW9uaW5nIGFsZ29yaXRobSB1c2VkIGJ5IHRoZSBsaW5rLXRpbWUgb3B0aW1pemVyLgorVGhlIHZhbHVlIGlzIGVpdGhlciBcZihDV1wqKENgMXRvMVwqKEMnXGZSIHRvIHNwZWNpZnkgYSBwYXJ0aXRpb25pbmcgbWlycm9yaW5nCit0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzIG9yIFxmKENXXCooQ2BiYWxhbmNlZFwqKEMnXGZSIHRvIHNwZWNpZnkgcGFydGl0aW9uaW5nCitpbnRvIGVxdWFsbHkgc2l6ZWQgY2h1bmtzICh3aGVuZXZlciBwb3NzaWJsZSkgb3IgXGYoQ1dcKihDYG1heFwqKEMnXGZSIHRvIGNyZWF0ZQorbmV3IHBhcnRpdGlvbiBmb3IgZXZlcnkgc3ltYm9sIHdoZXJlIHBvc3NpYmxlLiAgU3BlY2lmeWluZyBcZihDV1wqKENgbm9uZVwqKEMnXGZSCithcyBhbiBhbGdvcml0aG0gZGlzYWJsZXMgcGFydGl0aW9uaW5nIGFuZCBzdHJlYW1pbmcgY29tcGxldGVseS4gCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcZihDV1wqKENgYmFsYW5jZWRcKihDJ1xmUi4gV2hpbGUgXGYoQ1dcKihDYDF0bzFcKihDJ1xmUiBjYW4gYmUgdXNlZAorYXMgYW4gd29ya2Fyb3VuZCBmb3IgdmFyaW91cyBjb2RlIG9yZGVyaW5nIGlzc3VlcywgdGhlIFxmKENXXCooQ2BtYXhcKihDJ1xmUgorcGFydGl0aW9uaW5nIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB0ZXN0aW5nIG9ubHkuCisuSVAgIlxmQlwtZmx0b1wtY29tcHJlc3Npb25cLWxldmVsPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZmx0by1jb21wcmVzc2lvbi1sZXZlbD1uIgorVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbiB1c2VkIGZvciBpbnRlcm1lZGlhdGUKK2xhbmd1YWdlIHdyaXR0ZW4gdG8gXHMtMUxUT1xzMCBvYmplY3QgZmlsZXMsIGFuZCBpcyBvbmx5IG1lYW5pbmdmdWwgaW4KK2Nvbmp1bmN0aW9uIHdpdGggXHMtMUxUT1xzMCBtb2RlIChcZkJcLWZsdG9cZlIpLiAgVmFsaWQKK3ZhbHVlcyBhcmUgMCAobm8gY29tcHJlc3Npb24pIHRvIDkgKG1heGltdW0gY29tcHJlc3Npb24pLiAgVmFsdWVzCitvdXRzaWRlIHRoaXMgcmFuZ2UgYXJlIGNsYW1wZWQgdG8gZWl0aGVyIDAgb3IgOS4gIElmIHRoZSBvcHRpb24gaXMgbm90CitnaXZlbiwgYSBkZWZhdWx0IGJhbGFuY2VkIGNvbXByZXNzaW9uIHNldHRpbmcgaXMgdXNlZC4KKy5JUCAiXGZCXC1mbHRvXC1yZXBvcnRcZlIiIDQKKy5JWCBJdGVtICItZmx0by1yZXBvcnQiCitQcmludHMgYSByZXBvcnQgd2l0aCBpbnRlcm5hbCBkZXRhaWxzIG9uIHRoZSB3b3JraW5ncyBvZiB0aGUgbGluay10aW1lCitvcHRpbWl6ZXIuICBUaGUgY29udGVudHMgb2YgdGhpcyByZXBvcnQgdmFyeSBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbi4KK0l0IGlzIG1lYW50IHRvIGJlIHVzZWZ1bCB0byBccy0xR0NDXHMwIGRldmVsb3BlcnMgd2hlbiBwcm9jZXNzaW5nIG9iamVjdAorZmlsZXMgaW4gXHMtMUxUT1xzMCBtb2RlICh2aWEgXGZCXC1mbHRvXGZSKS4KKy5TcAorRGlzYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1mdXNlXC1saW5rZXJcLXBsdWdpblxmUiIgNAorLklYIEl0ZW0gIi1mdXNlLWxpbmtlci1wbHVnaW4iCitFbmFibGVzIHRoZSB1c2Ugb2YgYSBsaW5rZXIgcGx1Z2luIGR1cmluZyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uLiAgVGhpcworb3B0aW9uIHJlbGllcyBvbiBwbHVnaW4gc3VwcG9ydCBpbiB0aGUgbGlua2VyLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gZ29sZAorb3IgaW4gXHMtMUdOVVxzMCBsZCAyLjIxIG9yIG5ld2VyLgorLlNwCitUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBleHRyYWN0aW9uIG9mIG9iamVjdCBmaWxlcyB3aXRoIFxzLTFHSU1QTEVcczAgYnl0ZWNvZGUgb3V0CitvZiBsaWJyYXJ5IGFyY2hpdmVzLiBUaGlzIGltcHJvdmVzIHRoZSBxdWFsaXR5IG9mIG9wdGltaXphdGlvbiBieSBleHBvc2luZworbW9yZSBjb2RlIHRvIHRoZSBsaW5rLXRpbWUgb3B0aW1pemVyLiAgVGhpcyBpbmZvcm1hdGlvbiBzcGVjaWZpZXMgd2hhdAorc3ltYm9scyBjYW4gYmUgYWNjZXNzZWQgZXh0ZXJuYWxseSAoYnkgbm9uLUxUTyBvYmplY3Qgb3IgZHVyaW5nIGR5bmFtaWMKK2xpbmtpbmcpLiAgUmVzdWx0aW5nIGNvZGUgcXVhbGl0eSBpbXByb3ZlbWVudHMgb24gYmluYXJpZXMgKGFuZCBzaGFyZWQKK2xpYnJhcmllcyB0aGF0IHVzZSBoaWRkZW4gdmlzaWJpbGl0eSkgYXJlIHNpbWlsYXIgdG8gXGYoQ1dcKihDYFwtZndob2xlXC1wcm9ncmFtXCooQydcZlIuCitTZWUgXGZCXC1mbHRvXGZSIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBlZmZlY3Qgb2YgdGhpcyBmbGFnIGFuZCBob3cgdG8KK3VzZSBpdC4KKy5TcAorVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gXHMtMUxUT1xzMCBzdXBwb3J0IGluIFxzLTFHQ0NcczAgaXMgZW5hYmxlZAorYW5kIFxzLTFHQ0NcczAgd2FzIGNvbmZpZ3VyZWQgZm9yIHVzZSB3aXRoCithIGxpbmtlciBzdXBwb3J0aW5nIHBsdWdpbnMgKFxzLTFHTlVcczAgbGQgMi4yMSBvciBuZXdlciBvciBnb2xkKS4KKy5JUCAiXGZCXC1mZmF0XC1sdG9cLW9iamVjdHNcZlIiIDQKKy5JWCBJdGVtICItZmZhdC1sdG8tb2JqZWN0cyIKK0ZhdCBccy0xTFRPXHMwIG9iamVjdHMgYXJlIG9iamVjdCBmaWxlcyB0aGF0IGNvbnRhaW4gYm90aCB0aGUgaW50ZXJtZWRpYXRlIGxhbmd1YWdlCithbmQgdGhlIG9iamVjdCBjb2RlLiBUaGlzIG1ha2VzIHRoZW0gdXNhYmxlIGZvciBib3RoIFxzLTFMVE9cczAgbGlua2luZyBhbmQgbm9ybWFsCitsaW5raW5nLiBUaGlzIG9wdGlvbiBpcyBlZmZlY3RpdmUgb25seSB3aGVuIGNvbXBpbGluZyB3aXRoIFxmQlwtZmx0b1xmUgorYW5kIGlzIGlnbm9yZWQgYXQgbGluayB0aW1lLgorLlNwCitcJlxmQlwtZm5vXC1mYXRcLWx0b1wtb2JqZWN0c1xmUiBpbXByb3ZlcyBjb21waWxhdGlvbiB0aW1lIG92ZXIgcGxhaW4gXHMtMUxUT1xzMCwgYnV0CityZXF1aXJlcyB0aGUgY29tcGxldGUgdG9vbGNoYWluIHRvIGJlIGF3YXJlIG9mIFxzLTFMVE9cczAuIEl0IHJlcXVpcmVzIGEgbGlua2VyIHdpdGgKK2xpbmtlciBwbHVnaW4gc3VwcG9ydCBmb3IgYmFzaWMgZnVuY3Rpb25hbGl0eS4gIEFkZGl0aW9uYWxseSwKK1wmXGZCbm1cZlIsIFxmQmFyXGZSIGFuZCBcZkJyYW5saWJcZlIKK25lZWQgdG8gc3VwcG9ydCBsaW5rZXIgcGx1Z2lucyB0byBhbGxvdyBhIGZ1bGwtZmVhdHVyZWQgYnVpbGQgZW52aXJvbm1lbnQKKyhjYXBhYmxlIG9mIGJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJpZXMgZXRjKS4gIFxzLTFHQ0NcczAgcHJvdmlkZXMgdGhlIFxmQmdjYy1hclxmUiwKK1wmXGZCZ2NjLW5tXGZSLCBcZkJnY2MtcmFubGliXGZSIHdyYXBwZXJzIHRvIHBhc3MgdGhlIHJpZ2h0IG9wdGlvbnMKK3RvIHRoZXNlIHRvb2xzLiBXaXRoIG5vbiBmYXQgXHMtMUxUT1xzMCBtYWtlZmlsZXMgbmVlZCB0byBiZSBtb2RpZmllZCB0byB1c2UgdGhlbS4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mZmF0XC1sdG9cLW9iamVjdHNcZlIgYnV0IHRoaXMgZGVmYXVsdCBpcyBpbnRlbmRlZCB0bworY2hhbmdlIGluIGZ1dHVyZSByZWxlYXNlcyB3aGVuIGxpbmtlciBwbHVnaW4gZW5hYmxlZCBlbnZpcm9ubWVudHMgYmVjb21lIG1vcmUKK2NvbW1vbi4KKy5JUCAiXGZCXC1mY29tcGFyZVwtZWxpbVxmUiIgNAorLklYIEl0ZW0gIi1mY29tcGFyZS1lbGltIgorQWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgcG9zdC1yZWdpc3RlciBhbGxvY2F0aW9uIGluc3RydWN0aW9uIHNwbGl0dGluZywKK2lkZW50aWZ5IGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zIHRoYXQgY29tcHV0ZSBwcm9jZXNzb3IgZmxhZ3Mgc2ltaWxhciB0byBhCitjb21wYXJpc29uIG9wZXJhdGlvbiBiYXNlZCBvbiB0aGF0IGFyaXRobWV0aWMuICBJZiBwb3NzaWJsZSwgZWxpbWluYXRlIHRoZQorZXhwbGljaXQgY29tcGFyaXNvbiBvcGVyYXRpb24uCisuU3AKK1RoaXMgcGFzcyBvbmx5IGFwcGxpZXMgdG8gY2VydGFpbiB0YXJnZXRzIHRoYXQgY2Fubm90IGV4cGxpY2l0bHkgcmVwcmVzZW50Cit0aGUgY29tcGFyaXNvbiBvcGVyYXRpb24gYmVmb3JlIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXMgY29tcGxldGUuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mdXNlXC1sZD1iZmRcZlIiIDQKKy5JWCBJdGVtICItZnVzZS1sZD1iZmQiCitVc2UgdGhlIFxmQmJmZFxmUiBsaW5rZXIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBsaW5rZXIuCisuSVAgIlxmQlwtZnVzZVwtbGQ9Z29sZFxmUiIgNAorLklYIEl0ZW0gIi1mdXNlLWxkPWdvbGQiCitVc2UgdGhlIFxmQmdvbGRcZlIgbGlua2VyIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgbGlua2VyLgorLklQICJcZkJcLWZjcHJvcFwtcmVnaXN0ZXJzXGZSIiA0CisuSVggSXRlbSAiLWZjcHJvcC1yZWdpc3RlcnMiCitBZnRlciByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBwb3N0LXJlZ2lzdGVyIGFsbG9jYXRpb24gaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nLAorcGVyZm9ybSBhIGNvcHktcHJvcGFnYXRpb24gcGFzcyB0byB0cnkgdG8gcmVkdWNlIHNjaGVkdWxpbmcgZGVwZW5kZW5jaWVzCithbmQgb2NjYXNpb25hbGx5IGVsaW1pbmF0ZSB0aGUgY29weS4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PXGZSLCBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZwcm9maWxlXC1jb3JyZWN0aW9uXGZSIiA0CisuSVggSXRlbSAiLWZwcm9maWxlLWNvcnJlY3Rpb24iCitQcm9maWxlcyBjb2xsZWN0ZWQgdXNpbmcgYW4gaW5zdHJ1bWVudGVkIGJpbmFyeSBmb3IgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgbWF5CitiZSBpbmNvbnNpc3RlbnQgZHVlIHRvIG1pc3NlZCBjb3VudGVyIHVwZGF0ZXMuIFdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLAorXCZccy0xR0NDXHMwIHVzZXMgaGV1cmlzdGljcyB0byBjb3JyZWN0IG9yIHNtb290aCBvdXQgc3VjaCBpbmNvbnNpc3RlbmNpZXMuIEJ5CitkZWZhdWx0LCBccy0xR0NDXHMwIGVtaXRzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBpbmNvbnNpc3RlbnQgcHJvZmlsZSBpcyBkZXRlY3RlZC4KKy5JUCAiXGZCXC1mcHJvZmlsZVwtZGlyPVxmUlxmSXBhdGhcZlIiIDQKKy5JWCBJdGVtICItZnByb2ZpbGUtZGlyPXBhdGgiCitTZXQgdGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIHRoZSBwcm9maWxlIGRhdGEgZmlsZXMgaW4gdG8gXGZJcGF0aFxmUi4KK1RoaXMgb3B0aW9uIGFmZmVjdHMgb25seSB0aGUgcHJvZmlsZSBkYXRhIGdlbmVyYXRlZCBieQorXCZcZkJcLWZwcm9maWxlXC1nZW5lcmF0ZVxmUiwgXGZCXC1mdGVzdFwtY292ZXJhZ2VcZlIsIFxmQlwtZnByb2ZpbGVcLWFyY3NcZlIKK2FuZCB1c2VkIGJ5IFxmQlwtZnByb2ZpbGVcLXVzZVxmUiBhbmQgXGZCXC1mYnJhbmNoXC1wcm9iYWJpbGl0aWVzXGZSCithbmQgaXRzIHJlbGF0ZWQgb3B0aW9ucy4gIEJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIHBhdGhzIGNhbiBiZSB1c2VkLgorQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCB1c2VzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhcyBcZklwYXRoXGZSLCB0aHVzIHRoZQorcHJvZmlsZSBkYXRhIGZpbGUgYXBwZWFycyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG9iamVjdCBmaWxlLgorLklQICJcZkJcLWZwcm9maWxlXC1nZW5lcmF0ZVxmUiIgNAorLklYIEl0ZW0gIi1mcHJvZmlsZS1nZW5lcmF0ZSIKKy5QRCAwCisuSVAgIlxmQlwtZnByb2ZpbGVcLWdlbmVyYXRlPVxmUlxmSXBhdGhcZlIiIDQKKy5JWCBJdGVtICItZnByb2ZpbGUtZ2VuZXJhdGU9cGF0aCIKKy5QRAorRW5hYmxlIG9wdGlvbnMgdXN1YWxseSB1c2VkIGZvciBpbnN0cnVtZW50aW5nIGFwcGxpY2F0aW9uIHRvIHByb2R1Y2UKK3Byb2ZpbGUgdXNlZnVsIGZvciBsYXRlciByZWNvbXBpbGF0aW9uIHdpdGggcHJvZmlsZSBmZWVkYmFjayBiYXNlZAorb3B0aW1pemF0aW9uLiAgWW91IG11c3QgdXNlIFxmQlwtZnByb2ZpbGVcLWdlbmVyYXRlXGZSIGJvdGggd2hlbgorY29tcGlsaW5nIGFuZCB3aGVuIGxpbmtpbmcgeW91ciBwcm9ncmFtLgorLlNwCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGVuYWJsZWQ6IFxmKENXXCooQ2BcLWZwcm9maWxlXC1hcmNzXCooQydcZlIsIFxmKENXXCooQ2BcLWZwcm9maWxlXC12YWx1ZXNcKihDJ1xmUiwgXGYoQ1dcKihDYFwtZnZwdFwqKEMnXGZSLgorLlNwCitJZiBcZklwYXRoXGZSIGlzIHNwZWNpZmllZCwgXHMtMUdDQ1xzMCBsb29rcyBhdCB0aGUgXGZJcGF0aFxmUiB0byBmaW5kCit0aGUgcHJvZmlsZSBmZWVkYmFjayBkYXRhIGZpbGVzLiBTZWUgXGZCXC1mcHJvZmlsZVwtZGlyXGZSLgorLklQICJcZkJcLWZwcm9maWxlXC11c2VcZlIiIDQKKy5JWCBJdGVtICItZnByb2ZpbGUtdXNlIgorLlBEIDAKKy5JUCAiXGZCXC1mcHJvZmlsZVwtdXNlPVxmUlxmSXBhdGhcZlIiIDQKKy5JWCBJdGVtICItZnByb2ZpbGUtdXNlPXBhdGgiCisuUEQKK0VuYWJsZSBwcm9maWxlIGZlZWRiYWNrIGRpcmVjdGVkIG9wdGltaXphdGlvbnMsIGFuZCBvcHRpbWl6YXRpb25zCitnZW5lcmFsbHkgcHJvZml0YWJsZSBvbmx5IHdpdGggcHJvZmlsZSBmZWVkYmFjayBhdmFpbGFibGUuCisuU3AKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZW5hYmxlZDogXGYoQ1dcKihDYFwtZmJyYW5jaFwtcHJvYmFiaWxpdGllc1wqKEMnXGZSLCBcZihDV1wqKENgXC1mdnB0XCooQydcZlIsCitcJlxmKENXXCooQ2BcLWZ1bnJvbGxcLWxvb3BzXCooQydcZlIsIFxmKENXXCooQ2BcLWZwZWVsXC1sb29wc1wqKEMnXGZSLCBcZihDV1wqKENgXC1mdHJhY2VyXCooQydcZlIsIFxmKENXXCooQ2BcLWZ0cmVlXC12ZWN0b3JpemVcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGZ0cmVlXC1sb29wXC1kaXN0cmlidXRlXC1wYXR0ZXJuc1wqKEMnXGZSCisuU3AKK0J5IGRlZmF1bHQsIFxzLTFHQ0NcczAgZW1pdHMgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZmVlZGJhY2sgcHJvZmlsZXMgZG8gbm90CittYXRjaCB0aGUgc291cmNlIGNvZGUuICBUaGlzIGVycm9yIGNhbiBiZSB0dXJuZWQgaW50byBhIHdhcm5pbmcgYnkgdXNpbmcKK1wmXGZCXC1XY292ZXJhZ2VcLW1pc21hdGNoXGZSLiAgTm90ZSB0aGlzIG1heSByZXN1bHQgaW4gcG9vcmx5IG9wdGltaXplZAorY29kZS4KKy5TcAorSWYgXGZJcGF0aFxmUiBpcyBzcGVjaWZpZWQsIFxzLTFHQ0NcczAgbG9va3MgYXQgdGhlIFxmSXBhdGhcZlIgdG8gZmluZAordGhlIHByb2ZpbGUgZmVlZGJhY2sgZGF0YSBmaWxlcy4gU2VlIFxmQlwtZnByb2ZpbGVcLWRpclxmUi4KKy5QUAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGNvbnRyb2wgY29tcGlsZXIgYmVoYXZpb3IgcmVnYXJkaW5nIGZsb2F0aW5nLXBvaW50IAorYXJpdGhtZXRpYy4gIFRoZXNlIG9wdGlvbnMgdHJhZGUgb2ZmIGJldHdlZW4gc3BlZWQgYW5kCitjb3JyZWN0bmVzcy4gIEFsbCBtdXN0IGJlIHNwZWNpZmljYWxseSBlbmFibGVkLgorLklQICJcZkJcLWZmbG9hdFwtc3RvcmVcZlIiIDQKKy5JWCBJdGVtICItZmZsb2F0LXN0b3JlIgorRG8gbm90IHN0b3JlIGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBpbiByZWdpc3RlcnMsIGFuZCBpbmhpYml0IG90aGVyCitvcHRpb25zIHRoYXQgbWlnaHQgY2hhbmdlIHdoZXRoZXIgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSBpcyB0YWtlbiBmcm9tIGEKK3JlZ2lzdGVyIG9yIG1lbW9yeS4KKy5TcAorVGhpcyBvcHRpb24gcHJldmVudHMgdW5kZXNpcmFibGUgZXhjZXNzIHByZWNpc2lvbiBvbiBtYWNoaW5lcyBzdWNoIGFzCit0aGUgNjgwMDAgd2hlcmUgdGhlIGZsb2F0aW5nIHJlZ2lzdGVycyAob2YgdGhlIDY4ODgxKSBrZWVwIG1vcmUKK3ByZWNpc2lvbiB0aGFuIGEgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSIGlzIHN1cHBvc2VkIHRvIGhhdmUuICBTaW1pbGFybHkgZm9yIHRoZQoreDg2IGFyY2hpdGVjdHVyZS4gIEZvciBtb3N0IHByb2dyYW1zLCB0aGUgZXhjZXNzIHByZWNpc2lvbiBkb2VzIG9ubHkKK2dvb2QsIGJ1dCBhIGZldyBwcm9ncmFtcyByZWx5IG9uIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gb2YgXHMtMUlFRUVcczAgZmxvYXRpbmcKK3BvaW50LiAgVXNlIFxmQlwtZmZsb2F0XC1zdG9yZVxmUiBmb3Igc3VjaCBwcm9ncmFtcywgYWZ0ZXIgbW9kaWZ5aW5nCit0aGVtIHRvIHN0b3JlIGFsbCBwZXJ0aW5lbnQgaW50ZXJtZWRpYXRlIGNvbXB1dGF0aW9ucyBpbnRvIHZhcmlhYmxlcy4KKy5JUCAiXGZCXC1mZXhjZXNzXC1wcmVjaXNpb249XGZSXGZJc3R5bGVcZlIiIDQKKy5JWCBJdGVtICItZmV4Y2Vzcy1wcmVjaXNpb249c3R5bGUiCitUaGlzIG9wdGlvbiBhbGxvd3MgZnVydGhlciBjb250cm9sIG92ZXIgZXhjZXNzIHByZWNpc2lvbiBvbiBtYWNoaW5lcword2hlcmUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIGhhdmUgbW9yZSBwcmVjaXNpb24gdGhhbiB0aGUgXHMtMUlFRUVcczAKK1wmXGYoQ1dcKihDYGZsb2F0XCooQydcZlIgYW5kIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiB0eXBlcyBhbmQgdGhlIHByb2Nlc3NvciBkb2VzIG5vdAorc3VwcG9ydCBvcGVyYXRpb25zIHJvdW5kaW5nIHRvIHRob3NlIHR5cGVzLiAgQnkgZGVmYXVsdCwKK1wmXGZCXC1mZXhjZXNzXC1wcmVjaXNpb249ZmFzdFxmUiBpcyBpbiBlZmZlY3Q7IHRoaXMgbWVhbnMgdGhhdAorb3BlcmF0aW9ucyBhcmUgY2FycmllZCBvdXQgaW4gdGhlIHByZWNpc2lvbiBvZiB0aGUgcmVnaXN0ZXJzIGFuZCB0aGF0CitpdCBpcyB1bnByZWRpY3RhYmxlIHdoZW4gcm91bmRpbmcgdG8gdGhlIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgc291cmNlCitjb2RlIHRha2VzIHBsYWNlLiAgV2hlbiBjb21waWxpbmcgQywgaWYKK1wmXGZCXC1mZXhjZXNzXC1wcmVjaXNpb249c3RhbmRhcmRcZlIgaXMgc3BlY2lmaWVkIHRoZW4gZXhjZXNzCitwcmVjaXNpb24gZm9sbG93cyB0aGUgcnVsZXMgc3BlY2lmaWVkIGluIFxzLTFJU09cczAgQzk5OyBpbiBwYXJ0aWN1bGFyLAorYm90aCBjYXN0cyBhbmQgYXNzaWdubWVudHMgY2F1c2UgdmFsdWVzIHRvIGJlIHJvdW5kZWQgdG8gdGhlaXIKK3NlbWFudGljIHR5cGVzICh3aGVyZWFzIFxmQlwtZmZsb2F0XC1zdG9yZVxmUiBvbmx5IGFmZmVjdHMKK2Fzc2lnbm1lbnRzKS4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgQyBpZiBhIHN0cmljdAorY29uZm9ybWFuY2Ugb3B0aW9uIHN1Y2ggYXMgXGZCXC1zdGQ9Yzk5XGZSIGlzIHVzZWQuCisuU3AKK1wmXGZCXC1mZXhjZXNzXC1wcmVjaXNpb249c3RhbmRhcmRcZlIgaXMgbm90IGltcGxlbWVudGVkIGZvciBsYW5ndWFnZXMKK290aGVyIHRoYW4gQywgYW5kIGhhcyBubyBlZmZlY3QgaWYKK1wmXGZCXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSIG9yIFxmQlwtZmZhc3RcLW1hdGhcZlIgaXMKK3NwZWNpZmllZC4gIE9uIHRoZSB4ODYsIGl0IGFsc28gaGFzIG5vIGVmZmVjdCBpZiBcZkJcLW1mcG1hdGg9c3NlXGZSCitvciBcZkJcLW1mcG1hdGg9c3NlKzM4N1xmUiBpcyBzcGVjaWZpZWQ7IGluIHRoZSBmb3JtZXIgY2FzZSwgXHMtMUlFRUVcczAKK3NlbWFudGljcyBhcHBseSB3aXRob3V0IGV4Y2VzcyBwcmVjaXNpb24sIGFuZCBpbiB0aGUgbGF0dGVyLCByb3VuZGluZworaXMgdW5wcmVkaWN0YWJsZS4KKy5JUCAiXGZCXC1mZmFzdFwtbWF0aFxmUiIgNAorLklYIEl0ZW0gIi1mZmFzdC1tYXRoIgorU2V0cyBcZkJcLWZub1wtbWF0aFwtZXJybm9cZlIsIFxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiwKK1wmXGZCXC1mZmluaXRlXC1tYXRoXC1vbmx5XGZSLCBcZkJcLWZub1wtcm91bmRpbmdcLW1hdGhcZlIsCitcJlxmQlwtZm5vXC1zaWduYWxpbmdcLW5hbnNcZlIgYW5kIFxmQlwtZmN4XC1saW1pdGVkXC1yYW5nZVxmUi4KKy5TcAorVGhpcyBvcHRpb24gY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gXGYoQ1dcKihDYF9cfF9GQVNUX01BVEhfXHxfXCooQydcZlIgdG8gYmUgZGVmaW5lZC4KKy5TcAorVGhpcyBvcHRpb24gaXMgbm90IHR1cm5lZCBvbiBieSBhbnkgXGZCXC1PXGZSIG9wdGlvbiBiZXNpZGVzCitcJlxmQlwtT2Zhc3RcZlIgc2luY2UgaXQgY2FuIHJlc3VsdCBpbiBpbmNvcnJlY3Qgb3V0cHV0IGZvciBwcm9ncmFtcwordGhhdCBkZXBlbmQgb24gYW4gZXhhY3QgaW1wbGVtZW50YXRpb24gb2YgXHMtMUlFRUVcczAgb3IgXHMtMUlTT1xzMCBydWxlcy9zcGVjaWZpY2F0aW9ucworZm9yIG1hdGggZnVuY3Rpb25zLiBJdCBtYXksIGhvd2V2ZXIsIHlpZWxkIGZhc3RlciBjb2RlIGZvciBwcm9ncmFtcwordGhhdCBkbyBub3QgcmVxdWlyZSB0aGUgZ3VhcmFudGVlcyBvZiB0aGVzZSBzcGVjaWZpY2F0aW9ucy4KKy5JUCAiXGZCXC1mbm9cLW1hdGhcLWVycm5vXGZSIiA0CisuSVggSXRlbSAiLWZuby1tYXRoLWVycm5vIgorRG8gbm90IHNldCBcZihDV1wqKENgZXJybm9cKihDJ1xmUiBhZnRlciBjYWxsaW5nIG1hdGggZnVuY3Rpb25zIHRoYXQgYXJlIGV4ZWN1dGVkCit3aXRoIGEgc2luZ2xlIGluc3RydWN0aW9uLCBlLmcuLCBcZihDV1wqKENgc3FydFwqKEMnXGZSLiAgQSBwcm9ncmFtIHRoYXQgcmVsaWVzIG9uCitcJlxzLTFJRUVFXHMwIGV4Y2VwdGlvbnMgZm9yIG1hdGggZXJyb3IgaGFuZGxpbmcgbWF5IHdhbnQgdG8gdXNlIHRoaXMgZmxhZworZm9yIHNwZWVkIHdoaWxlIG1haW50YWluaW5nIFxzLTFJRUVFXHMwIGFyaXRobWV0aWMgY29tcGF0aWJpbGl0eS4KKy5TcAorVGhpcyBvcHRpb24gaXMgbm90IHR1cm5lZCBvbiBieSBhbnkgXGZCXC1PXGZSIG9wdGlvbiBzaW5jZQoraXQgY2FuIHJlc3VsdCBpbiBpbmNvcnJlY3Qgb3V0cHV0IGZvciBwcm9ncmFtcyB0aGF0IGRlcGVuZCBvbgorYW4gZXhhY3QgaW1wbGVtZW50YXRpb24gb2YgXHMtMUlFRUVcczAgb3IgXHMtMUlTT1xzMCBydWxlcy9zcGVjaWZpY2F0aW9ucyBmb3IKK21hdGggZnVuY3Rpb25zLiBJdCBtYXksIGhvd2V2ZXIsIHlpZWxkIGZhc3RlciBjb2RlIGZvciBwcm9ncmFtcwordGhhdCBkbyBub3QgcmVxdWlyZSB0aGUgZ3VhcmFudGVlcyBvZiB0aGVzZSBzcGVjaWZpY2F0aW9ucy4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mbWF0aFwtZXJybm9cZlIuCisuU3AKK09uIERhcndpbiBzeXN0ZW1zLCB0aGUgbWF0aCBsaWJyYXJ5IG5ldmVyIHNldHMgXGYoQ1dcKihDYGVycm5vXCooQydcZlIuICBUaGVyZSBpcwordGhlcmVmb3JlIG5vIHJlYXNvbiBmb3IgdGhlIGNvbXBpbGVyIHRvIGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0aGF0CitpdCBtaWdodCwgYW5kIFxmQlwtZm5vXC1tYXRoXC1lcnJub1xmUiBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSIiA0CisuSVggSXRlbSAiLWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRpb25zIgorQWxsb3cgb3B0aW1pemF0aW9ucyBmb3IgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB0aGF0IChhKSBhc3N1bWUKK3RoYXQgYXJndW1lbnRzIGFuZCByZXN1bHRzIGFyZSB2YWxpZCBhbmQgKGIpIG1heSB2aW9sYXRlIFxzLTFJRUVFXHMwIG9yCitcJlxzLTFBTlNJXHMwIHN0YW5kYXJkcy4gIFdoZW4gdXNlZCBhdCBsaW5rLXRpbWUsIGl0IG1heSBpbmNsdWRlIGxpYnJhcmllcworb3Igc3RhcnR1cCBmaWxlcyB0aGF0IGNoYW5nZSB0aGUgZGVmYXVsdCBccy0xRlBVXHMwIGNvbnRyb2wgd29yZCBvciBvdGhlcgorc2ltaWxhciBvcHRpbWl6YXRpb25zLgorLlNwCitUaGlzIG9wdGlvbiBpcyBub3QgdHVybmVkIG9uIGJ5IGFueSBcZkJcLU9cZlIgb3B0aW9uIHNpbmNlCitpdCBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBvdXRwdXQgZm9yIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uCithbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBccy0xSUVFRVxzMCBvciBccy0xSVNPXHMwIHJ1bGVzL3NwZWNpZmljYXRpb25zIGZvcgorbWF0aCBmdW5jdGlvbnMuIEl0IG1heSwgaG93ZXZlciwgeWllbGQgZmFzdGVyIGNvZGUgZm9yIHByb2dyYW1zCit0aGF0IGRvIG5vdCByZXF1aXJlIHRoZSBndWFyYW50ZWVzIG9mIHRoZXNlIHNwZWNpZmljYXRpb25zLgorRW5hYmxlcyBcZkJcLWZub1wtc2lnbmVkXC16ZXJvc1xmUiwgXGZCXC1mbm9cLXRyYXBwaW5nXC1tYXRoXGZSLAorXCZcZkJcLWZhc3NvY2lhdGl2ZVwtbWF0aFxmUiBhbmQgXGZCXC1mcmVjaXByb2NhbFwtbWF0aFxmUi4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mbm9cLXVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUi4KKy5JUCAiXGZCXC1mYXNzb2NpYXRpdmVcLW1hdGhcZlIiIDQKKy5JWCBJdGVtICItZmFzc29jaWF0aXZlLW1hdGgiCitBbGxvdyByZS1hc3NvY2lhdGlvbiBvZiBvcGVyYW5kcyBpbiBzZXJpZXMgb2YgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KK1RoaXMgdmlvbGF0ZXMgdGhlIFxzLTFJU09cczAgQyBhbmQgXCooQysgbGFuZ3VhZ2Ugc3RhbmRhcmQgYnkgcG9zc2libHkgY2hhbmdpbmcKK2NvbXB1dGF0aW9uIHJlc3VsdC4gIFxzLTFOT1RFOlxzMCByZS1vcmRlcmluZyBtYXkgY2hhbmdlIHRoZSBzaWduIG9mIHplcm8gYXMKK3dlbGwgYXMgaWdub3JlIE5hTnMgYW5kIGluaGliaXQgb3IgY3JlYXRlIHVuZGVyZmxvdyBvciBvdmVyZmxvdyAoYW5kCit0aHVzIGNhbm5vdCBiZSB1c2VkIG9uIGNvZGUgdGhhdCByZWxpZXMgb24gcm91bmRpbmcgYmVoYXZpb3IgbGlrZQorXCZcZihDV1wqKENgKHggKyAyKio1MikgXC0gMioqNTJcKihDJ1xmUi4gIE1heSBhbHNvIHJlb3JkZXIgZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbnMKK2FuZCB0aHVzIG1heSBub3QgYmUgdXNlZCB3aGVuIG9yZGVyZWQgY29tcGFyaXNvbnMgYXJlIHJlcXVpcmVkLgorVGhpcyBvcHRpb24gcmVxdWlyZXMgdGhhdCBib3RoIFxmQlwtZm5vXC1zaWduZWRcLXplcm9zXGZSIGFuZAorXCZcZkJcLWZub1wtdHJhcHBpbmdcLW1hdGhcZlIgYmUgaW4gZWZmZWN0LiAgTW9yZW92ZXIsIGl0IGRvZXNuJ3QgbWFrZQorbXVjaCBzZW5zZSB3aXRoIFxmQlwtZnJvdW5kaW5nXC1tYXRoXGZSLiBGb3IgRm9ydHJhbiB0aGUgb3B0aW9uCitpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBib3RoIFxmQlwtZm5vXC1zaWduZWRcLXplcm9zXGZSIGFuZAorXCZcZkJcLWZub1wtdHJhcHBpbmdcLW1hdGhcZlIgYXJlIGluIGVmZmVjdC4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mbm9cLWFzc29jaWF0aXZlXC1tYXRoXGZSLgorLklQICJcZkJcLWZyZWNpcHJvY2FsXC1tYXRoXGZSIiA0CisuSVggSXRlbSAiLWZyZWNpcHJvY2FsLW1hdGgiCitBbGxvdyB0aGUgcmVjaXByb2NhbCBvZiBhIHZhbHVlIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiBkaXZpZGluZyBieQordGhlIHZhbHVlIGlmIHRoaXMgZW5hYmxlcyBvcHRpbWl6YXRpb25zLiAgRm9yIGV4YW1wbGUgXGYoQ1dcKihDYHggLyB5XCooQydcZlIKK2NhbiBiZSByZXBsYWNlZCB3aXRoIFxmKENXXCooQ2B4ICogKDEveSlcKihDJ1xmUiwgd2hpY2ggaXMgdXNlZnVsIGlmIFxmKENXXCooQ2AoMS95KVwqKEMnXGZSCitpcyBzdWJqZWN0IHRvIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uLiAgTm90ZSB0aGF0IHRoaXMgbG9zZXMKK3ByZWNpc2lvbiBhbmQgaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YgZmxvcHMgb3BlcmF0aW5nIG9uIHRoZSB2YWx1ZS4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mbm9cLXJlY2lwcm9jYWxcLW1hdGhcZlIuCisuSVAgIlxmQlwtZmZpbml0ZVwtbWF0aFwtb25seVxmUiIgNAorLklYIEl0ZW0gIi1mZmluaXRlLW1hdGgtb25seSIKK0FsbG93IG9wdGltaXphdGlvbnMgZm9yIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgdGhhdCBhc3N1bWUKK3RoYXQgYXJndW1lbnRzIGFuZCByZXN1bHRzIGFyZSBub3QgTmFOcyBvciArXC1JbmZzLgorLlNwCitUaGlzIG9wdGlvbiBpcyBub3QgdHVybmVkIG9uIGJ5IGFueSBcZkJcLU9cZlIgb3B0aW9uIHNpbmNlCitpdCBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBvdXRwdXQgZm9yIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uCithbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBccy0xSUVFRVxzMCBvciBccy0xSVNPXHMwIHJ1bGVzL3NwZWNpZmljYXRpb25zIGZvcgorbWF0aCBmdW5jdGlvbnMuIEl0IG1heSwgaG93ZXZlciwgeWllbGQgZmFzdGVyIGNvZGUgZm9yIHByb2dyYW1zCit0aGF0IGRvIG5vdCByZXF1aXJlIHRoZSBndWFyYW50ZWVzIG9mIHRoZXNlIHNwZWNpZmljYXRpb25zLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZub1wtZmluaXRlXC1tYXRoXC1vbmx5XGZSLgorLklQICJcZkJcLWZub1wtc2lnbmVkXC16ZXJvc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tc2lnbmVkLXplcm9zIgorQWxsb3cgb3B0aW1pemF0aW9ucyBmb3IgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB0aGF0IGlnbm9yZSB0aGUKK3NpZ25lZG5lc3Mgb2YgemVyby4gIFxzLTFJRUVFXHMwIGFyaXRobWV0aWMgc3BlY2lmaWVzIHRoZSBiZWhhdmlvciBvZgorZGlzdGluY3QgKzAuMCBhbmQgXC0wLjAgdmFsdWVzLCB3aGljaCB0aGVuIHByb2hpYml0cyBzaW1wbGlmaWNhdGlvbgorb2YgZXhwcmVzc2lvbnMgc3VjaCBhcyB4KzAuMCBvciAwLjAqeCAoZXZlbiB3aXRoIFxmQlwtZmZpbml0ZVwtbWF0aFwtb25seVxmUikuCitUaGlzIG9wdGlvbiBpbXBsaWVzIHRoYXQgdGhlIHNpZ24gb2YgYSB6ZXJvIHJlc3VsdCBpc24ndCBzaWduaWZpY2FudC4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mc2lnbmVkXC16ZXJvc1xmUi4KKy5JUCAiXGZCXC1mbm9cLXRyYXBwaW5nXC1tYXRoXGZSIiA0CisuSVggSXRlbSAiLWZuby10cmFwcGluZy1tYXRoIgorQ29tcGlsZSBjb2RlIGFzc3VtaW5nIHRoYXQgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBjYW5ub3QgZ2VuZXJhdGUKK3VzZXItdmlzaWJsZSB0cmFwcy4gIFRoZXNlIHRyYXBzIGluY2x1ZGUgZGl2aXNpb24gYnkgemVybywgb3ZlcmZsb3csCit1bmRlcmZsb3csIGluZXhhY3QgcmVzdWx0IGFuZCBpbnZhbGlkIG9wZXJhdGlvbi4gIFRoaXMgb3B0aW9uIHJlcXVpcmVzCit0aGF0IFxmQlwtZm5vXC1zaWduYWxpbmdcLW5hbnNcZlIgYmUgaW4gZWZmZWN0LiAgU2V0dGluZyB0aGlzIG9wdGlvbiBtYXkKK2FsbG93IGZhc3RlciBjb2RlIGlmIG9uZSByZWxpZXMgb24gXCooTCJub24tc3RvcFwqKFIiIFxzLTFJRUVFXHMwIGFyaXRobWV0aWMsIGZvciBleGFtcGxlLgorLlNwCitUaGlzIG9wdGlvbiBzaG91bGQgbmV2ZXIgYmUgdHVybmVkIG9uIGJ5IGFueSBcZkJcLU9cZlIgb3B0aW9uIHNpbmNlCitpdCBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBvdXRwdXQgZm9yIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uCithbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBccy0xSUVFRVxzMCBvciBccy0xSVNPXHMwIHJ1bGVzL3NwZWNpZmljYXRpb25zIGZvcgorbWF0aCBmdW5jdGlvbnMuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZnRyYXBwaW5nXC1tYXRoXGZSLgorLklQICJcZkJcLWZyb3VuZGluZ1wtbWF0aFxmUiIgNAorLklYIEl0ZW0gIi1mcm91bmRpbmctbWF0aCIKK0Rpc2FibGUgdHJhbnNmb3JtYXRpb25zIGFuZCBvcHRpbWl6YXRpb25zIHRoYXQgYXNzdW1lIGRlZmF1bHQgZmxvYXRpbmctcG9pbnQKK3JvdW5kaW5nIGJlaGF2aW9yLiAgVGhpcyBpcyByb3VuZC10by16ZXJvIGZvciBhbGwgZmxvYXRpbmcgcG9pbnQKK3RvIGludGVnZXIgY29udmVyc2lvbnMsIGFuZCByb3VuZC10by1uZWFyZXN0IGZvciBhbGwgb3RoZXIgYXJpdGhtZXRpYwordHJ1bmNhdGlvbnMuICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkIGZvciBwcm9ncmFtcyB0aGF0IGNoYW5nZQordGhlIFxzLTFGUFxzMCByb3VuZGluZyBtb2RlIGR5bmFtaWNhbGx5LCBvciB0aGF0IG1heSBiZSBleGVjdXRlZCB3aXRoIGEKK25vbi1kZWZhdWx0IHJvdW5kaW5nIG1vZGUuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyBjb25zdGFudCBmb2xkaW5nIG9mCitmbG9hdGluZy1wb2ludCBleHByZXNzaW9ucyBhdCBjb21waWxlIHRpbWUgKHdoaWNoIG1heSBiZSBhZmZlY3RlZCBieQorcm91bmRpbmcgbW9kZSkgYW5kIGFyaXRobWV0aWMgdHJhbnNmb3JtYXRpb25zIHRoYXQgYXJlIHVuc2FmZSBpbiB0aGUKK3ByZXNlbmNlIG9mIHNpZ24tZGVwZW5kZW50IHJvdW5kaW5nIG1vZGVzLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZub1wtcm91bmRpbmdcLW1hdGhcZlIuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGV4cGVyaW1lbnRhbCBhbmQgZG9lcyBub3QgY3VycmVudGx5IGd1YXJhbnRlZSB0bworZGlzYWJsZSBhbGwgXHMtMUdDQ1xzMCBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHJvdW5kaW5nIG1vZGUuCitGdXR1cmUgdmVyc2lvbnMgb2YgXHMtMUdDQ1xzMCBtYXkgcHJvdmlkZSBmaW5lciBjb250cm9sIG9mIHRoaXMgc2V0dGluZwordXNpbmcgQzk5J3MgXGYoQ1dcKihDYEZFTlZfQUNDRVNTXCooQydcZlIgcHJhZ21hLiAgVGhpcyBjb21tYW5kLWxpbmUgb3B0aW9uCit3aWxsIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZGVmYXVsdCBzdGF0ZSBmb3IgXGYoQ1dcKihDYEZFTlZfQUNDRVNTXCooQydcZlIuCisuSVAgIlxmQlwtZnNpZ25hbGluZ1wtbmFuc1xmUiIgNAorLklYIEl0ZW0gIi1mc2lnbmFsaW5nLW5hbnMiCitDb21waWxlIGNvZGUgYXNzdW1pbmcgdGhhdCBccy0xSUVFRVxzMCBzaWduYWxpbmcgTmFOcyBtYXkgZ2VuZXJhdGUgdXNlci12aXNpYmxlCit0cmFwcyBkdXJpbmcgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4gIFNldHRpbmcgdGhpcyBvcHRpb24gZGlzYWJsZXMKK29wdGltaXphdGlvbnMgdGhhdCBtYXkgY2hhbmdlIHRoZSBudW1iZXIgb2YgZXhjZXB0aW9ucyB2aXNpYmxlIHdpdGgKK3NpZ25hbGluZyBOYU5zLiAgVGhpcyBvcHRpb24gaW1wbGllcyBcZkJcLWZ0cmFwcGluZ1wtbWF0aFxmUi4KKy5TcAorVGhpcyBvcHRpb24gY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gXGYoQ1dcKihDYF9cfF9TVVBQT1JUX1NOQU5fXHxfXCooQydcZlIgdG8KK2JlIGRlZmluZWQuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZm5vXC1zaWduYWxpbmdcLW5hbnNcZlIuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGV4cGVyaW1lbnRhbCBhbmQgZG9lcyBub3QgY3VycmVudGx5IGd1YXJhbnRlZSB0bworZGlzYWJsZSBhbGwgXHMtMUdDQ1xzMCBvcHRpbWl6YXRpb25zIHRoYXQgYWZmZWN0IHNpZ25hbGluZyBOYU4gYmVoYXZpb3IuCisuSVAgIlxmQlwtZnNpbmdsZVwtcHJlY2lzaW9uXC1jb25zdGFudFxmUiIgNAorLklYIEl0ZW0gIi1mc2luZ2xlLXByZWNpc2lvbi1jb25zdGFudCIKK1RyZWF0IGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cyBhcyBzaW5nbGUgcHJlY2lzaW9uIGluc3RlYWQgb2YKK2ltcGxpY2l0bHkgY29udmVydGluZyB0aGVtIHRvIGRvdWJsZS1wcmVjaXNpb24gY29uc3RhbnRzLgorLklQICJcZkJcLWZjeFwtbGltaXRlZFwtcmFuZ2VcZlIiIDQKKy5JWCBJdGVtICItZmN4LWxpbWl0ZWQtcmFuZ2UiCitXaGVuIGVuYWJsZWQsIHRoaXMgb3B0aW9uIHN0YXRlcyB0aGF0IGEgcmFuZ2UgcmVkdWN0aW9uIHN0ZXAgaXMgbm90CituZWVkZWQgd2hlbiBwZXJmb3JtaW5nIGNvbXBsZXggZGl2aXNpb24uICBBbHNvLCB0aGVyZSBpcyBubyBjaGVja2luZword2hldGhlciB0aGUgcmVzdWx0IG9mIGEgY29tcGxleCBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiBpcyBcZihDV1wqKENgTmFOCisrIEkqTmFOXCooQydcZlIsIHdpdGggYW4gYXR0ZW1wdCB0byByZXNjdWUgdGhlIHNpdHVhdGlvbiBpbiB0aGF0IGNhc2UuICBUaGUKK2RlZmF1bHQgaXMgXGZCXC1mbm9cLWN4XC1saW1pdGVkXC1yYW5nZVxmUiwgYnV0IGlzIGVuYWJsZWQgYnkKK1wmXGZCXC1mZmFzdFwtbWF0aFxmUi4KKy5TcAorVGhpcyBvcHRpb24gY29udHJvbHMgdGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGUgXHMtMUlTT1xzMCBDOTkKK1wmXGYoQ1dcKihDYENYX0xJTUlURURfUkFOR0VcKihDJ1xmUiBwcmFnbWEuICBOZXZlcnRoZWxlc3MsIHRoZSBvcHRpb24gYXBwbGllcyB0bworYWxsIGxhbmd1YWdlcy4KKy5JUCAiXGZCXC1mY3hcLWZvcnRyYW5cLXJ1bGVzXGZSIiA0CisuSVggSXRlbSAiLWZjeC1mb3J0cmFuLXJ1bGVzIgorQ29tcGxleCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24gZm9sbG93IEZvcnRyYW4gcnVsZXMuICBSYW5nZQorcmVkdWN0aW9uIGlzIGRvbmUgYXMgcGFydCBvZiBjb21wbGV4IGRpdmlzaW9uLCBidXQgdGhlcmUgaXMgbm8gY2hlY2tpbmcKK3doZXRoZXIgdGhlIHJlc3VsdCBvZiBhIGNvbXBsZXggbXVsdGlwbGljYXRpb24gb3IgZGl2aXNpb24gaXMgXGYoQ1dcKihDYE5hTgorKyBJKk5hTlwqKEMnXGZSLCB3aXRoIGFuIGF0dGVtcHQgdG8gcmVzY3VlIHRoZSBzaXR1YXRpb24gaW4gdGhhdCBjYXNlLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZub1wtY3hcLWZvcnRyYW5cLXJ1bGVzXGZSLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgY29udHJvbCBvcHRpbWl6YXRpb25zIHRoYXQgbWF5IGltcHJvdmUKK3BlcmZvcm1hbmNlLCBidXQgYXJlIG5vdCBlbmFibGVkIGJ5IGFueSBcZkJcLU9cZlIgb3B0aW9ucy4gIFRoaXMKK3NlY3Rpb24gaW5jbHVkZXMgZXhwZXJpbWVudGFsIG9wdGlvbnMgdGhhdCBtYXkgcHJvZHVjZSBicm9rZW4gY29kZS4KKy5JUCAiXGZCXC1mYnJhbmNoXC1wcm9iYWJpbGl0aWVzXGZSIiA0CisuSVggSXRlbSAiLWZicmFuY2gtcHJvYmFiaWxpdGllcyIKK0FmdGVyIHJ1bm5pbmcgYSBwcm9ncmFtIGNvbXBpbGVkIHdpdGggXGZCXC1mcHJvZmlsZVwtYXJjc1xmUiwgeW91IGNhbiBjb21waWxlIGl0IGEgc2Vjb25kIHRpbWUgdXNpbmcKK1wmXGZCXC1mYnJhbmNoXC1wcm9iYWJpbGl0aWVzXGZSLCB0byBpbXByb3ZlIG9wdGltaXphdGlvbnMgYmFzZWQgb24KK3RoZSBudW1iZXIgb2YgdGltZXMgZWFjaCBicmFuY2ggd2FzIHRha2VuLiAgV2hlbiBhIHByb2dyYW0KK2NvbXBpbGVkIHdpdGggXGZCXC1mcHJvZmlsZVwtYXJjc1xmUiBleGl0cywgaXQgc2F2ZXMgYXJjIGV4ZWN1dGlvbgorY291bnRzIHRvIGEgZmlsZSBjYWxsZWQgXGZJXGZJc291cmNlbmFtZVxmSS5nY2RhXGZSIGZvciBlYWNoIHNvdXJjZQorZmlsZS4gIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGRhdGEgZmlsZSBpcyB2ZXJ5IGRlcGVuZGVudCBvbiB0aGUKK3N0cnVjdHVyZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsIHNvIHlvdSBtdXN0IHVzZSB0aGUgc2FtZSBzb3VyY2UgY29kZQorYW5kIHRoZSBzYW1lIG9wdGltaXphdGlvbiBvcHRpb25zIGZvciBib3RoIGNvbXBpbGF0aW9ucy4KKy5TcAorV2l0aCBcZkJcLWZicmFuY2hcLXByb2JhYmlsaXRpZXNcZlIsIFxzLTFHQ0NcczAgcHV0cyBhCitcJlxmQlxzLTFSRUdfQlJfUFJPQlxzMFxmUiBub3RlIG9uIGVhY2ggXGZCXHMtMUpVTVBfSU5TTlxzMFxmUiBhbmQgXGZCXHMtMUNBTExfSU5TTlxzMFxmUi4KK1RoZXNlIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgb3B0aW1pemF0aW9uLiAgQ3VycmVudGx5LCB0aGV5IGFyZSBvbmx5Cit1c2VkIGluIG9uZSBwbGFjZTogaW4gXGZJcmVvcmcuY1xmUiwgaW5zdGVhZCBvZiBndWVzc2luZyB3aGljaCBwYXRoIGEKK2JyYW5jaCBpcyBtb3N0IGxpa2VseSB0byB0YWtlLCB0aGUgXGZCXHMtMVJFR19CUl9QUk9CXHMwXGZSIHZhbHVlcyBhcmUgdXNlZCB0bworZXhhY3RseSBkZXRlcm1pbmUgd2hpY2ggcGF0aCBpcyB0YWtlbiBtb3JlIG9mdGVuLgorLklQICJcZkJcLWZwcm9maWxlXC12YWx1ZXNcZlIiIDQKKy5JWCBJdGVtICItZnByb2ZpbGUtdmFsdWVzIgorSWYgY29tYmluZWQgd2l0aCBcZkJcLWZwcm9maWxlXC1hcmNzXGZSLCBpdCBhZGRzIGNvZGUgc28gdGhhdCBzb21lCitkYXRhIGFib3V0IHZhbHVlcyBvZiBleHByZXNzaW9ucyBpbiB0aGUgcHJvZ3JhbSBpcyBnYXRoZXJlZC4KKy5TcAorV2l0aCBcZkJcLWZicmFuY2hcLXByb2JhYmlsaXRpZXNcZlIsIGl0IHJlYWRzIGJhY2sgdGhlIGRhdGEgZ2F0aGVyZWQKK2Zyb20gcHJvZmlsaW5nIHZhbHVlcyBvZiBleHByZXNzaW9ucyBmb3IgdXNhZ2UgaW4gb3B0aW1pemF0aW9ucy4KKy5TcAorRW5hYmxlZCB3aXRoIFxmQlwtZnByb2ZpbGVcLWdlbmVyYXRlXGZSIGFuZCBcZkJcLWZwcm9maWxlXC11c2VcZlIuCisuSVAgIlxmQlwtZnZwdFxmUiIgNAorLklYIEl0ZW0gIi1mdnB0IgorSWYgY29tYmluZWQgd2l0aCBcZkJcLWZwcm9maWxlXC1hcmNzXGZSLCB0aGlzIG9wdGlvbiBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyCit0byBhZGQgY29kZSB0byBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdmFsdWVzIG9mIGV4cHJlc3Npb25zLgorLlNwCitXaXRoIFxmQlwtZmJyYW5jaFwtcHJvYmFiaWxpdGllc1xmUiwgaXQgcmVhZHMgYmFjayB0aGUgZGF0YSBnYXRoZXJlZAorYW5kIGFjdHVhbGx5IHBlcmZvcm1zIHRoZSBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZW0uCitDdXJyZW50bHkgdGhlIG9wdGltaXphdGlvbnMgaW5jbHVkZSBzcGVjaWFsaXphdGlvbiBvZiBkaXZpc2lvbiBvcGVyYXRpb25zCit1c2luZyB0aGUga25vd2xlZGdlIGFib3V0IHRoZSB2YWx1ZSBvZiB0aGUgZGVub21pbmF0b3IuCisuSVAgIlxmQlwtZnJlbmFtZVwtcmVnaXN0ZXJzXGZSIiA0CisuSVggSXRlbSAiLWZyZW5hbWUtcmVnaXN0ZXJzIgorQXR0ZW1wdCB0byBhdm9pZCBmYWxzZSBkZXBlbmRlbmNpZXMgaW4gc2NoZWR1bGVkIGNvZGUgYnkgbWFraW5nIHVzZQorb2YgcmVnaXN0ZXJzIGxlZnQgb3ZlciBhZnRlciByZWdpc3RlciBhbGxvY2F0aW9uLiAgVGhpcyBvcHRpbWl6YXRpb24KK21vc3QgYmVuZWZpdHMgcHJvY2Vzc29ycyB3aXRoIGxvdHMgb2YgcmVnaXN0ZXJzLiAgRGVwZW5kaW5nIG9uIHRoZQorZGVidWcgaW5mb3JtYXRpb24gZm9ybWF0IGFkb3B0ZWQgYnkgdGhlIHRhcmdldCwgaG93ZXZlciwgaXQgY2FuCittYWtlIGRlYnVnZ2luZyBpbXBvc3NpYmxlLCBzaW5jZSB2YXJpYWJsZXMgbm8gbG9uZ2VyIHN0YXkgaW4KK2EgXCooTCJob21lIHJlZ2lzdGVyXCooUiIuCisuU3AKK0VuYWJsZWQgYnkgZGVmYXVsdCB3aXRoIFxmQlwtZnVucm9sbFwtbG9vcHNcZlIgYW5kIFxmQlwtZnBlZWxcLWxvb3BzXGZSLgorLklQICJcZkJcLWZ0cmFjZXJcZlIiIDQKKy5JWCBJdGVtICItZnRyYWNlciIKK1BlcmZvcm0gdGFpbCBkdXBsaWNhdGlvbiB0byBlbmxhcmdlIHN1cGVyYmxvY2sgc2l6ZS4gIFRoaXMgdHJhbnNmb3JtYXRpb24KK3NpbXBsaWZpZXMgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGUgZnVuY3Rpb24gYWxsb3dpbmcgb3RoZXIgb3B0aW1pemF0aW9ucyB0byBkbworYSBiZXR0ZXIgam9iLgorLlNwCitFbmFibGVkIHdpdGggXGZCXC1mcHJvZmlsZVwtdXNlXGZSLgorLklQICJcZkJcLWZ1bnJvbGxcLWxvb3BzXGZSIiA0CisuSVggSXRlbSAiLWZ1bnJvbGwtbG9vcHMiCitVbnJvbGwgbG9vcHMgd2hvc2UgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgY2FuIGJlIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lIG9yCit1cG9uIGVudHJ5IHRvIHRoZSBsb29wLiAgXGZCXC1mdW5yb2xsXC1sb29wc1xmUiBpbXBsaWVzCitcJlxmQlwtZnJlcnVuXC1jc2VcLWFmdGVyXC1sb29wXGZSLCBcZkJcLWZ3ZWJcZlIgYW5kIFxmQlwtZnJlbmFtZVwtcmVnaXN0ZXJzXGZSLgorSXQgYWxzbyB0dXJucyBvbiBjb21wbGV0ZSBsb29wIHBlZWxpbmcgKGkuZS4gY29tcGxldGUgcmVtb3ZhbCBvZiBsb29wcyB3aXRoCithIHNtYWxsIGNvbnN0YW50IG51bWJlciBvZiBpdGVyYXRpb25zKS4gIFRoaXMgb3B0aW9uIG1ha2VzIGNvZGUgbGFyZ2VyLCBhbmQgbWF5CitvciBtYXkgbm90IG1ha2UgaXQgcnVuIGZhc3Rlci4KKy5TcAorRW5hYmxlZCB3aXRoIFxmQlwtZnByb2ZpbGVcLXVzZVxmUi4KKy5JUCAiXGZCXC1mdW5yb2xsXC1hbGxcLWxvb3BzXGZSIiA0CisuSVggSXRlbSAiLWZ1bnJvbGwtYWxsLWxvb3BzIgorVW5yb2xsIGFsbCBsb29wcywgZXZlbiBpZiB0aGVpciBudW1iZXIgb2YgaXRlcmF0aW9ucyBpcyB1bmNlcnRhaW4gd2hlbgordGhlIGxvb3AgaXMgZW50ZXJlZC4gIFRoaXMgdXN1YWxseSBtYWtlcyBwcm9ncmFtcyBydW4gbW9yZSBzbG93bHkuCitcJlxmQlwtZnVucm9sbFwtYWxsXC1sb29wc1xmUiBpbXBsaWVzIHRoZSBzYW1lIG9wdGlvbnMgYXMKK1wmXGZCXC1mdW5yb2xsXC1sb29wc1xmUi4KKy5JUCAiXGZCXC1mcGVlbFwtbG9vcHNcZlIiIDQKKy5JWCBJdGVtICItZnBlZWwtbG9vcHMiCitQZWVscyBsb29wcyBmb3Igd2hpY2ggdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9uIHRoYXQgdGhleSBkbyBub3QKK3JvbGwgbXVjaCAoZnJvbSBwcm9maWxlIGZlZWRiYWNrKS4gIEl0IGFsc28gdHVybnMgb24gY29tcGxldGUgbG9vcCBwZWVsaW5nCisoaS5lLiBjb21wbGV0ZSByZW1vdmFsIG9mIGxvb3BzIHdpdGggc21hbGwgY29uc3RhbnQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMpLgorLlNwCitFbmFibGVkIHdpdGggXGZCXC1mcHJvZmlsZVwtdXNlXGZSLgorLklQICJcZkJcLWZtb3ZlXC1sb29wXC1pbnZhcmlhbnRzXGZSIiA0CisuSVggSXRlbSAiLWZtb3ZlLWxvb3AtaW52YXJpYW50cyIKK0VuYWJsZXMgdGhlIGxvb3AgaW52YXJpYW50IG1vdGlvbiBwYXNzIGluIHRoZSBccy0xUlRMXHMwIGxvb3Agb3B0aW1pemVyLiAgRW5hYmxlZAorYXQgbGV2ZWwgXGZCXC1PMVxmUgorLklQICJcZkJcLWZ1bnN3aXRjaFwtbG9vcHNcZlIiIDQKKy5JWCBJdGVtICItZnVuc3dpdGNoLWxvb3BzIgorTW92ZSBicmFuY2hlcyB3aXRoIGxvb3AgaW52YXJpYW50IGNvbmRpdGlvbnMgb3V0IG9mIHRoZSBsb29wLCB3aXRoIGR1cGxpY2F0ZXMKK29mIHRoZSBsb29wIG9uIGJvdGggYnJhbmNoZXMgKG1vZGlmaWVkIGFjY29yZGluZyB0byByZXN1bHQgb2YgdGhlIGNvbmRpdGlvbikuCisuSVAgIlxmQlwtZmZ1bmN0aW9uXC1zZWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mZnVuY3Rpb24tc2VjdGlvbnMiCisuUEQgMAorLklQICJcZkJcLWZkYXRhXC1zZWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mZGF0YS1zZWN0aW9ucyIKKy5QRAorUGxhY2UgZWFjaCBmdW5jdGlvbiBvciBkYXRhIGl0ZW0gaW50byBpdHMgb3duIHNlY3Rpb24gaW4gdGhlIG91dHB1dAorZmlsZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGFyYml0cmFyeSBzZWN0aW9ucy4gIFRoZSBuYW1lIG9mIHRoZQorZnVuY3Rpb24gb3IgdGhlIG5hbWUgb2YgdGhlIGRhdGEgaXRlbSBkZXRlcm1pbmVzIHRoZSBzZWN0aW9uJ3MgbmFtZQoraW4gdGhlIG91dHB1dCBmaWxlLgorLlNwCitVc2UgdGhlc2Ugb3B0aW9ucyBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBsaW5rZXIgY2FuIHBlcmZvcm0gb3B0aW1pemF0aW9ucwordG8gaW1wcm92ZSBsb2NhbGl0eSBvZiByZWZlcmVuY2UgaW4gdGhlIGluc3RydWN0aW9uIHNwYWNlLiAgTW9zdCBzeXN0ZW1zCit1c2luZyB0aGUgXHMtMUVMRlxzMCBvYmplY3QgZm9ybWF0IGFuZCBccy0xU1BBUkNcczAgcHJvY2Vzc29ycyBydW5uaW5nIFNvbGFyaXMgMiBoYXZlCitsaW5rZXJzIHdpdGggc3VjaCBvcHRpbWl6YXRpb25zLiAgXHMtMUFJWFxzMCBtYXkgaGF2ZSB0aGVzZSBvcHRpbWl6YXRpb25zIGluCit0aGUgZnV0dXJlLgorLlNwCitPbmx5IHVzZSB0aGVzZSBvcHRpb25zIHdoZW4gdGhlcmUgYXJlIHNpZ25pZmljYW50IGJlbmVmaXRzIGZyb20gZG9pbmcKK3NvLiAgV2hlbiB5b3Ugc3BlY2lmeSB0aGVzZSBvcHRpb25zLCB0aGUgYXNzZW1ibGVyIGFuZCBsaW5rZXIKK2NyZWF0ZSBsYXJnZXIgb2JqZWN0IGFuZCBleGVjdXRhYmxlIGZpbGVzIGFuZCBhcmUgYWxzbyBzbG93ZXIuCitZb3UgY2Fubm90IHVzZSBcZihDV1wqKENgZ3Byb2ZcKihDJ1xmUiBvbiBhbGwgc3lzdGVtcyBpZiB5b3UKK3NwZWNpZnkgdGhpcyBvcHRpb24sIGFuZCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMgd2l0aCBkZWJ1Z2dpbmcgaWYKK3lvdSBzcGVjaWZ5IGJvdGggdGhpcyBvcHRpb24gYW5kIFxmQlwtZ1xmUi4KKy5JUCAiXGZCXC1mYnJhbmNoXC10YXJnZXRcLWxvYWRcLW9wdGltaXplXGZSIiA0CisuSVggSXRlbSAiLWZicmFuY2gtdGFyZ2V0LWxvYWQtb3B0aW1pemUiCitQZXJmb3JtIGJyYW5jaCB0YXJnZXQgcmVnaXN0ZXIgbG9hZCBvcHRpbWl6YXRpb24gYmVmb3JlIHByb2xvZ3VlIC8gZXBpbG9ndWUKK3RocmVhZGluZy4KK1RoZSB1c2Ugb2YgdGFyZ2V0IHJlZ2lzdGVycyBjYW4gdHlwaWNhbGx5IGJlIGV4cG9zZWQgb25seSBkdXJpbmcgcmVsb2FkLAordGh1cyBob2lzdGluZyBsb2FkcyBvdXQgb2YgbG9vcHMgYW5kIGRvaW5nIGludGVyLWJsb2NrIHNjaGVkdWxpbmcgbmVlZHMKK2Egc2VwYXJhdGUgb3B0aW1pemF0aW9uIHBhc3MuCisuSVAgIlxmQlwtZmJyYW5jaFwtdGFyZ2V0XC1sb2FkXC1vcHRpbWl6ZTJcZlIiIDQKKy5JWCBJdGVtICItZmJyYW5jaC10YXJnZXQtbG9hZC1vcHRpbWl6ZTIiCitQZXJmb3JtIGJyYW5jaCB0YXJnZXQgcmVnaXN0ZXIgbG9hZCBvcHRpbWl6YXRpb24gYWZ0ZXIgcHJvbG9ndWUgLyBlcGlsb2d1ZQordGhyZWFkaW5nLgorLklQICJcZkJcLWZidHJcLWJiXC1leGNsdXNpdmVcZlIiIDQKKy5JWCBJdGVtICItZmJ0ci1iYi1leGNsdXNpdmUiCitXaGVuIHBlcmZvcm1pbmcgYnJhbmNoIHRhcmdldCByZWdpc3RlciBsb2FkIG9wdGltaXphdGlvbiwgZG9uJ3QgcmV1c2UKK2JyYW5jaCB0YXJnZXQgcmVnaXN0ZXJzIHdpdGhpbiBhbnkgYmFzaWMgYmxvY2suCisuSVAgIlxmQlwtZnN0YWNrXC1wcm90ZWN0b3JcZlIiIDQKKy5JWCBJdGVtICItZnN0YWNrLXByb3RlY3RvciIKK0VtaXQgZXh0cmEgY29kZSB0byBjaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93cywgc3VjaCBhcyBzdGFjayBzbWFzaGluZworYXR0YWNrcy4gIFRoaXMgaXMgZG9uZSBieSBhZGRpbmcgYSBndWFyZCB2YXJpYWJsZSB0byBmdW5jdGlvbnMgd2l0aAordnVsbmVyYWJsZSBvYmplY3RzLiAgVGhpcyBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjYWxsIFxmKENXXCooQ2BhbGxvY2FcKihDJ1xmUiwgYW5kCitmdW5jdGlvbnMgd2l0aCBidWZmZXJzIGxhcmdlciB0aGFuIDggYnl0ZXMuICBUaGUgZ3VhcmRzIGFyZSBpbml0aWFsaXplZAord2hlbiBhIGZ1bmN0aW9uIGlzIGVudGVyZWQgYW5kIHRoZW4gY2hlY2tlZCB3aGVuIHRoZSBmdW5jdGlvbiBleGl0cy4KK0lmIGEgZ3VhcmQgY2hlY2sgZmFpbHMsIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCBhbmQgdGhlIHByb2dyYW0gZXhpdHMuCisuSVAgIlxmQlwtZnN0YWNrXC1wcm90ZWN0b3JcLWFsbFxmUiIgNAorLklYIEl0ZW0gIi1mc3RhY2stcHJvdGVjdG9yLWFsbCIKK0xpa2UgXGZCXC1mc3RhY2tcLXByb3RlY3RvclxmUiBleGNlcHQgdGhhdCBhbGwgZnVuY3Rpb25zIGFyZSBwcm90ZWN0ZWQuCisuSVAgIlxmQlwtZnNlY3Rpb25cLWFuY2hvcnNcZlIiIDQKKy5JWCBJdGVtICItZnNlY3Rpb24tYW5jaG9ycyIKK1RyeSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBzeW1ib2xpYyBhZGRyZXNzIGNhbGN1bGF0aW9ucyBieSB1c2luZworc2hhcmVkIFwqKEwiYW5jaG9yXCooUiIgc3ltYm9scyB0byBhZGRyZXNzIG5lYXJieSBvYmplY3RzLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbgorY2FuIGhlbHAgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgXHMtMUdPVFxzMCBlbnRyaWVzIGFuZCBccy0xR09UXHMwIGFjY2Vzc2VzIG9uIHNvbWUKK3RhcmdldHMuCisuU3AKK0ZvciBleGFtcGxlLCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBcZihDV1wqKENgZm9vXCooQydcZlI6CisuU3AKKy5WYiAyCitcJiAgICAgICAgc3RhdGljIGludCBhLCBiLCBjOworXCYgICAgICAgIGludCBmb28gKHZvaWQpIHsgcmV0dXJuIGEgKyBiICsgYzsgfQorLlZlCisuU3AKK3VzdWFsbHkgY2FsY3VsYXRlcyB0aGUgYWRkcmVzc2VzIG9mIGFsbCB0aHJlZSB2YXJpYWJsZXMsIGJ1dCBpZiB5b3UKK2NvbXBpbGUgaXQgd2l0aCBcZkJcLWZzZWN0aW9uXC1hbmNob3JzXGZSLCBpdCBhY2Nlc3NlcyB0aGUgdmFyaWFibGVzCitmcm9tIGEgY29tbW9uIGFuY2hvciBwb2ludCBpbnN0ZWFkLiAgVGhlIGVmZmVjdCBpcyBzaW1pbGFyIHRvIHRoZQorZm9sbG93aW5nIHBzZXVkb2NvZGUgKHdoaWNoIGlzbid0IHZhbGlkIEMpOgorLlNwCisuVmIgNQorXCYgICAgICAgIGludCBmb28gKHZvaWQpCitcJiAgICAgICAgeworXCYgICAgICAgICAgcmVnaXN0ZXIgaW50ICp4ciA9ICZ4OworXCYgICAgICAgICAgcmV0dXJuIHhyWyZhIFwtICZ4XSArIHhyWyZiIFwtICZ4XSArIHhyWyZjIFwtICZ4XTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorTm90IGFsbCB0YXJnZXRzIHN1cHBvcnQgdGhpcyBvcHRpb24uCisuSVAgIlxmQlwtXC1wYXJhbVxmUiBcZkluYW1lXGZSXGZCPVxmUlxmSXZhbHVlXGZSIiA0CisuSVggSXRlbSAiLS1wYXJhbSBuYW1lPXZhbHVlIgorSW4gc29tZSBwbGFjZXMsIFxzLTFHQ0NcczAgdXNlcyB2YXJpb3VzIGNvbnN0YW50cyB0byBjb250cm9sIHRoZSBhbW91bnQgb2YKK29wdGltaXphdGlvbiB0aGF0IGlzIGRvbmUuICBGb3IgZXhhbXBsZSwgXHMtMUdDQ1xzMCBkb2VzIG5vdCBpbmxpbmUgZnVuY3Rpb25zCit0aGF0IGNvbnRhaW4gbW9yZSB0aGFuIGEgY2VydGFpbiBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zLiAgWW91IGNhbgorY29udHJvbCBzb21lIG9mIHRoZXNlIGNvbnN0YW50cyBvbiB0aGUgY29tbWFuZCBsaW5lIHVzaW5nIHRoZQorXCZcZkJcLVwtcGFyYW1cZlIgb3B0aW9uLgorLlNwCitUaGUgbmFtZXMgb2Ygc3BlY2lmaWMgcGFyYW1ldGVycywgYW5kIHRoZSBtZWFuaW5nIG9mIHRoZSB2YWx1ZXMsIGFyZQordGllZCB0byB0aGUgaW50ZXJuYWxzIG9mIHRoZSBjb21waWxlciwgYW5kIGFyZSBzdWJqZWN0IHRvIGNoYW5nZQord2l0aG91dCBub3RpY2UgaW4gZnV0dXJlIHJlbGVhc2VzLgorLlNwCitJbiBlYWNoIGNhc2UsIHRoZSBcZkl2YWx1ZVxmUiBpcyBhbiBpbnRlZ2VyLiAgVGhlIGFsbG93YWJsZSBjaG9pY2VzIGZvcgorXCZcZkluYW1lXGZSIGFyZToKKy5SUyA0CisuSVAgIlxmQnByZWRpY3RhYmxlLWJyYW5jaC1vdXRjb21lXGZSIiA0CisuSVggSXRlbSAicHJlZGljdGFibGUtYnJhbmNoLW91dGNvbWUiCitXaGVuIGJyYW5jaCBpcyBwcmVkaWN0ZWQgdG8gYmUgdGFrZW4gd2l0aCBwcm9iYWJpbGl0eSBsb3dlciB0aGFuIHRoaXMgdGhyZXNob2xkCisoaW4gcGVyY2VudCksIHRoZW4gaXQgaXMgY29uc2lkZXJlZCB3ZWxsIHByZWRpY3RhYmxlLiBUaGUgZGVmYXVsdCBpcyAxMC4KKy5JUCAiXGZCbWF4LWNyb3NzanVtcC1lZGdlc1xmUiIgNAorLklYIEl0ZW0gIm1heC1jcm9zc2p1bXAtZWRnZXMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgZWRnZXMgdG8gY29uc2lkZXIgZm9yIGNyb3NzLWp1bXBpbmcuCitUaGUgYWxnb3JpdGhtIHVzZWQgYnkgXGZCXC1mY3Jvc3NqdW1waW5nXGZSIGlzIE8oTl4yKSBpbgordGhlIG51bWJlciBvZiBlZGdlcyBpbmNvbWluZyB0byBlYWNoIGJsb2NrLiAgSW5jcmVhc2luZyB2YWx1ZXMgbWVhbgorbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiwgbWFraW5nIHRoZSBjb21waWxhdGlvbiB0aW1lIGluY3JlYXNlIHdpdGgKK3Byb2JhYmx5IHNtYWxsIGltcHJvdmVtZW50IGluIGV4ZWN1dGFibGUgc2l6ZS4KKy5JUCAiXGZCbWluLWNyb3NzanVtcC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1pbi1jcm9zc2p1bXAtaW5zbnMiCitUaGUgbWluaW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgbXVzdCBiZSBtYXRjaGVkIGF0IHRoZSBlbmQKK29mIHR3byBibG9ja3MgYmVmb3JlIGNyb3NzLWp1bXBpbmcgaXMgcGVyZm9ybWVkIG9uIHRoZW0uICBUaGlzCit2YWx1ZSBpcyBpZ25vcmVkIGluIHRoZSBjYXNlIHdoZXJlIGFsbCBpbnN0cnVjdGlvbnMgaW4gdGhlIGJsb2NrIGJlaW5nCitjcm9zcy1qdW1wZWQgZnJvbSBhcmUgbWF0Y2hlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuCisuSVAgIlxmQm1heC1ncm93LWNvcHktYmItaW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtZ3Jvdy1jb3B5LWJiLWluc25zIgorVGhlIG1heGltdW0gY29kZSBzaXplIGV4cGFuc2lvbiBmYWN0b3Igd2hlbiBjb3B5aW5nIGJhc2ljIGJsb2NrcworaW5zdGVhZCBvZiBqdW1waW5nLiAgVGhlIGV4cGFuc2lvbiBpcyByZWxhdGl2ZSB0byBhIGp1bXAgaW5zdHJ1Y3Rpb24uCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA4LgorLklQICJcZkJtYXgtZ290by1kdXBsaWNhdGlvbi1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1heC1nb3RvLWR1cGxpY2F0aW9uLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBkdXBsaWNhdGUgdG8gYSBibG9jayB0aGF0IGp1bXBzCit0byBhIGNvbXB1dGVkIGdvdG8uICBUbyBhdm9pZCBPKE5eMikgYmVoYXZpb3IgaW4gYSBudW1iZXIgb2YKK3Bhc3NlcywgXHMtMUdDQ1xzMCBmYWN0b3JzIGNvbXB1dGVkIGdvdG9zIGVhcmx5IGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLAorYW5kIHVuZmFjdG9ycyB0aGVtIGFzIGxhdGUgYXMgcG9zc2libGUuICBPbmx5IGNvbXB1dGVkIGp1bXBzIGF0IHRoZQorZW5kIG9mIGEgYmFzaWMgYmxvY2tzIHdpdGggbm8gbW9yZSB0aGFuIG1heC1nb3RvLWR1cGxpY2F0aW9uLWluc25zIGFyZQordW5mYWN0b3JlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDguCisuSVAgIlxmQm1heC1kZWxheS1zbG90LWluc24tc2VhcmNoXGZSIiA0CisuSVggSXRlbSAibWF4LWRlbGF5LXNsb3QtaW5zbi1zZWFyY2giCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRvIGNvbnNpZGVyIHdoZW4gbG9va2luZyBmb3IgYW4KK2luc3RydWN0aW9uIHRvIGZpbGwgYSBkZWxheSBzbG90LiAgSWYgbW9yZSB0aGFuIHRoaXMgYXJiaXRyYXJ5IG51bWJlciBvZgoraW5zdHJ1Y3Rpb25zIGFyZSBzZWFyY2hlZCwgdGhlIHRpbWUgc2F2aW5ncyBmcm9tIGZpbGxpbmcgdGhlIGRlbGF5IHNsb3QKK2FyZSBtaW5pbWFsLCBzbyBzdG9wIHNlYXJjaGluZy4gIEluY3JlYXNpbmcgdmFsdWVzIG1lYW4gbW9yZQorYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24sIG1ha2luZyB0aGUgY29tcGlsYXRpb24gdGltZSBpbmNyZWFzZSB3aXRoIHByb2JhYmx5CitzbWFsbCBpbXByb3ZlbWVudCBpbiBleGVjdXRpb24gdGltZS4KKy5JUCAiXGZCbWF4LWRlbGF5LXNsb3QtbGl2ZS1zZWFyY2hcZlIiIDQKKy5JWCBJdGVtICJtYXgtZGVsYXktc2xvdC1saXZlLXNlYXJjaCIKK1doZW4gdHJ5aW5nIHRvIGZpbGwgZGVsYXkgc2xvdHMsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8KK2NvbnNpZGVyIHdoZW4gc2VhcmNoaW5nIGZvciBhIGJsb2NrIHdpdGggdmFsaWQgbGl2ZSByZWdpc3RlcgoraW5mb3JtYXRpb24uICBJbmNyZWFzaW5nIHRoaXMgYXJiaXRyYXJpbHkgY2hvc2VuIHZhbHVlIG1lYW5zIG1vcmUKK2FnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBpbmNyZWFzaW5nIHRoZSBjb21waWxhdGlvbiB0aW1lLiAgVGhpcyBwYXJhbWV0ZXIKK3Nob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhlIGRlbGF5IHNsb3QgY29kZSBpcyByZXdyaXR0ZW4gdG8gbWFpbnRhaW4gdGhlCitjb250cm9sLWZsb3cgZ3JhcGguCisuSVAgIlxmQm1heC1nY3NlLW1lbW9yeVxmUiIgNAorLklYIEl0ZW0gIm1heC1nY3NlLW1lbW9yeSIKK1RoZSBhcHByb3hpbWF0ZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgYWxsb2NhdGVkIGluCitvcmRlciB0byBwZXJmb3JtIHRoZSBnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24KK29wdGltaXphdGlvbi4gIElmIG1vcmUgbWVtb3J5IHRoYW4gc3BlY2lmaWVkIGlzIHJlcXVpcmVkLCB0aGUKK29wdGltaXphdGlvbiBpcyBub3QgZG9uZS4KKy5JUCAiXGZCbWF4LWdjc2UtaW5zZXJ0aW9uLXJhdGlvXGZSIiA0CisuSVggSXRlbSAibWF4LWdjc2UtaW5zZXJ0aW9uLXJhdGlvIgorSWYgdGhlIHJhdGlvIG9mIGV4cHJlc3Npb24gaW5zZXJ0aW9ucyB0byBkZWxldGlvbnMgaXMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZQorZm9yIGFueSBleHByZXNzaW9uLCB0aGVuIFxzLTFSVExcczAgXHMtMVBSRVxzMCBpbnNlcnRzIG9yIHJlbW92ZXMgdGhlIGV4cHJlc3Npb24gYW5kIHRodXMKK2xlYXZlcyBwYXJ0aWFsbHkgcmVkdW5kYW50IGNvbXB1dGF0aW9ucyBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAuCisuSVAgIlxmQm1heC1wZW5kaW5nLWxpc3QtbGVuZ3RoXGZSIiA0CisuSVggSXRlbSAibWF4LXBlbmRpbmctbGlzdC1sZW5ndGgiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVuZGluZyBkZXBlbmRlbmNpZXMgc2NoZWR1bGluZyBhbGxvd3MKK2JlZm9yZSBmbHVzaGluZyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgc3RhcnRpbmcgb3Zlci4gIExhcmdlIGZ1bmN0aW9ucword2l0aCBmZXcgYnJhbmNoZXMgb3IgY2FsbHMgY2FuIGNyZWF0ZSBleGNlc3NpdmVseSBsYXJnZSBsaXN0cyB3aGljaAorbmVlZGxlc3NseSBjb25zdW1lIG1lbW9yeSBhbmQgcmVzb3VyY2VzLgorLklQICJcZkJtYXgtbW9kdWxvLWJhY2t0cmFjay1hdHRlbXB0c1xmUiIgNAorLklYIEl0ZW0gIm1heC1tb2R1bG8tYmFja3RyYWNrLWF0dGVtcHRzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGJhY2t0cmFjayBhdHRlbXB0cyB0aGUgc2NoZWR1bGVyIHNob3VsZCBtYWtlCit3aGVuIG1vZHVsbyBzY2hlZHVsaW5nIGEgbG9vcC4gIExhcmdlciB2YWx1ZXMgY2FuIGV4cG9uZW50aWFsbHkgaW5jcmVhc2UKK2NvbXBpbGF0aW9uIHRpbWUuCisuSVAgIlxmQm1heC1pbmxpbmUtaW5zbnMtc2luZ2xlXGZSIiA0CisuSVggSXRlbSAibWF4LWlubGluZS1pbnNucy1zaW5nbGUiCitTZXZlcmFsIHBhcmFtZXRlcnMgY29udHJvbCB0aGUgdHJlZSBpbmxpbmVyIHVzZWQgaW4gXHMtMUdDQ1xzMC4KK1RoaXMgbnVtYmVyIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyAoY291bnRlZCBpbiBccy0xR0NDXHMwJ3MKK2ludGVybmFsIHJlcHJlc2VudGF0aW9uKSBpbiBhIHNpbmdsZSBmdW5jdGlvbiB0aGF0IHRoZSB0cmVlIGlubGluZXIKK2NvbnNpZGVycyBmb3IgaW5saW5pbmcuICBUaGlzIG9ubHkgYWZmZWN0cyBmdW5jdGlvbnMgZGVjbGFyZWQKK2lubGluZSBhbmQgbWV0aG9kcyBpbXBsZW1lbnRlZCBpbiBhIGNsYXNzIGRlY2xhcmF0aW9uIChcKihDKykuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0MDAuCisuSVAgIlxmQm1heC1pbmxpbmUtaW5zbnMtYXV0b1xmUiIgNAorLklYIEl0ZW0gIm1heC1pbmxpbmUtaW5zbnMtYXV0byIKK1doZW4geW91IHVzZSBcZkJcLWZpbmxpbmVcLWZ1bmN0aW9uc1xmUiAoaW5jbHVkZWQgaW4gXGZCXC1PM1xmUiksCithIGxvdCBvZiBmdW5jdGlvbnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugbm90IGJlIGNvbnNpZGVyZWQgZm9yIGlubGluaW5nCitieSB0aGUgY29tcGlsZXIgYXJlIGludmVzdGlnYXRlZC4gIFRvIHRob3NlIGZ1bmN0aW9ucywgYSBkaWZmZXJlbnQKKyhtb3JlIHJlc3RyaWN0aXZlKSBsaW1pdCBjb21wYXJlZCB0byBmdW5jdGlvbnMgZGVjbGFyZWQgaW5saW5lIGNhbgorYmUgYXBwbGllZC4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDQwLgorLklQICJcZkJpbmxpbmUtbWluLXNwZWVkdXBcZlIiIDQKKy5JWCBJdGVtICJpbmxpbmUtbWluLXNwZWVkdXAiCitXaGVuIGVzdGltYXRlZCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvZiBjYWxsZXIgKyBjYWxsZWUgcnVudGltZSBleGNlZWRzIHRoaXMKK3RocmVzaG9sZCAoaW4gcHJlY2VudCksIHRoZSBmdW5jdGlvbiBjYW4gYmUgaW5saW5lZCByZWdhcmRsZXNzIHRoZSBsaW1pdCBvbgorXCZcZkJcLVwtcGFyYW0gbWF4LWlubGluZS1pbnNucy1zaW5nbGVcZlIgYW5kIFxmQlwtXC1wYXJhbQorbWF4LWlubGluZS1pbnNucy1hdXRvXGZSLgorLklQICJcZkJsYXJnZS1mdW5jdGlvbi1pbnNuc1xmUiIgNAorLklYIEl0ZW0gImxhcmdlLWZ1bmN0aW9uLWluc25zIgorVGhlIGxpbWl0IHNwZWNpZnlpbmcgcmVhbGx5IGxhcmdlIGZ1bmN0aW9ucy4gIEZvciBmdW5jdGlvbnMgbGFyZ2VyIHRoYW4gdGhpcworbGltaXQgYWZ0ZXIgaW5saW5pbmcsIGlubGluaW5nIGlzIGNvbnN0cmFpbmVkIGJ5CitcJlxmQlwtXC1wYXJhbSBsYXJnZS1mdW5jdGlvbi1ncm93dGhcZlIuICBUaGlzIHBhcmFtZXRlciBpcyB1c2VmdWwgcHJpbWFyaWx5Cit0byBhdm9pZCBleHRyZW1lIGNvbXBpbGF0aW9uIHRpbWUgY2F1c2VkIGJ5IG5vbi1saW5lYXIgYWxnb3JpdGhtcyB1c2VkIGJ5IHRoZQorYmFjayBlbmQuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNzAwLgorLklQICJcZkJsYXJnZS1mdW5jdGlvbi1ncm93dGhcZlIiIDQKKy5JWCBJdGVtICJsYXJnZS1mdW5jdGlvbi1ncm93dGgiCitTcGVjaWZpZXMgbWF4aW1hbCBncm93dGggb2YgbGFyZ2UgZnVuY3Rpb24gY2F1c2VkIGJ5IGlubGluaW5nIGluIHBlcmNlbnRzLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwIHdoaWNoIGxpbWl0cyBsYXJnZSBmdW5jdGlvbiBncm93dGggdG8gMi4wIHRpbWVzCit0aGUgb3JpZ2luYWwgc2l6ZS4KKy5JUCAiXGZCbGFyZ2UtdW5pdC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gImxhcmdlLXVuaXQtaW5zbnMiCitUaGUgbGltaXQgc3BlY2lmeWluZyBsYXJnZSB0cmFuc2xhdGlvbiB1bml0LiAgR3Jvd3RoIGNhdXNlZCBieSBpbmxpbmluZyBvZgordW5pdHMgbGFyZ2VyIHRoYW4gdGhpcyBsaW1pdCBpcyBsaW1pdGVkIGJ5IFxmQlwtXC1wYXJhbSBpbmxpbmUtdW5pdC1ncm93dGhcZlIuCitGb3Igc21hbGwgdW5pdHMgdGhpcyBtaWdodCBiZSB0b28gdGlnaHQuCitGb3IgZXhhbXBsZSwgY29uc2lkZXIgYSB1bml0IGNvbnNpc3Rpbmcgb2YgZnVuY3Rpb24gQQordGhhdCBpcyBpbmxpbmUgYW5kIEIgdGhhdCBqdXN0IGNhbGxzIEEgdGhyZWUgdGltZXMuICBJZiBCIGlzIHNtYWxsIHJlbGF0aXZlIHRvCitBLCB0aGUgZ3Jvd3RoIG9mIHVuaXQgaXMgMzAwXGUlIGFuZCB5ZXQgc3VjaCBpbmxpbmluZyBpcyB2ZXJ5IHNhbmUuICBGb3IgdmVyeQorbGFyZ2UgdW5pdHMgY29uc2lzdGluZyBvZiBzbWFsbCBpbmxpbmVhYmxlIGZ1bmN0aW9ucywgaG93ZXZlciwgdGhlIG92ZXJhbGwgdW5pdAorZ3Jvd3RoIGxpbWl0IGlzIG5lZWRlZCB0byBhdm9pZCBleHBvbmVudGlhbCBleHBsb3Npb24gb2YgY29kZSBzaXplLiAgVGh1cyBmb3IKK3NtYWxsZXIgdW5pdHMsIHRoZSBzaXplIGlzIGluY3JlYXNlZCB0byBcZkJcLVwtcGFyYW0gbGFyZ2UtdW5pdC1pbnNuc1xmUgorYmVmb3JlIGFwcGx5aW5nIFxmQlwtXC1wYXJhbSBpbmxpbmUtdW5pdC1ncm93dGhcZlIuICBUaGUgZGVmYXVsdCBpcyAxMDAwMC4KKy5JUCAiXGZCaW5saW5lLXVuaXQtZ3Jvd3RoXGZSIiA0CisuSVggSXRlbSAiaW5saW5lLXVuaXQtZ3Jvd3RoIgorU3BlY2lmaWVzIG1heGltYWwgb3ZlcmFsbCBncm93dGggb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgY2F1c2VkIGJ5IGlubGluaW5nLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAgd2hpY2ggbGltaXRzIHVuaXQgZ3Jvd3RoIHRvIDEuMyB0aW1lcyB0aGUgb3JpZ2luYWwKK3NpemUuCisuSVAgIlxmQmlwY3AtdW5pdC1ncm93dGhcZlIiIDQKKy5JWCBJdGVtICJpcGNwLXVuaXQtZ3Jvd3RoIgorU3BlY2lmaWVzIG1heGltYWwgb3ZlcmFsbCBncm93dGggb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgY2F1c2VkIGJ5CitpbnRlcnByb2NlZHVyYWwgY29uc3RhbnQgcHJvcGFnYXRpb24uICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMCB3aGljaCBsaW1pdHMKK3VuaXQgZ3Jvd3RoIHRvIDEuMSB0aW1lcyB0aGUgb3JpZ2luYWwgc2l6ZS4KKy5JUCAiXGZCbGFyZ2Utc3RhY2stZnJhbWVcZlIiIDQKKy5JWCBJdGVtICJsYXJnZS1zdGFjay1mcmFtZSIKK1RoZSBsaW1pdCBzcGVjaWZ5aW5nIGxhcmdlIHN0YWNrIGZyYW1lcy4gIFdoaWxlIGlubGluaW5nIHRoZSBhbGdvcml0aG0gaXMgdHJ5aW5nCit0byBub3QgZ3JvdyBwYXN0IHRoaXMgbGltaXQgdG9vIG11Y2guICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYgYnl0ZXMuCisuSVAgIlxmQmxhcmdlLXN0YWNrLWZyYW1lLWdyb3d0aFxmUiIgNAorLklYIEl0ZW0gImxhcmdlLXN0YWNrLWZyYW1lLWdyb3d0aCIKK1NwZWNpZmllcyBtYXhpbWFsIGdyb3d0aCBvZiBsYXJnZSBzdGFjayBmcmFtZXMgY2F1c2VkIGJ5IGlubGluaW5nIGluIHBlcmNlbnRzLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwMCB3aGljaCBsaW1pdHMgbGFyZ2Ugc3RhY2sgZnJhbWUgZ3Jvd3RoIHRvIDExIHRpbWVzCit0aGUgb3JpZ2luYWwgc2l6ZS4KKy5JUCAiXGZCbWF4LWlubGluZS1pbnNucy1yZWN1cnNpdmVcZlIiIDQKKy5JWCBJdGVtICJtYXgtaW5saW5lLWluc25zLXJlY3Vyc2l2ZSIKKy5QRCAwCisuSVAgIlxmQm1heC1pbmxpbmUtaW5zbnMtcmVjdXJzaXZlLWF1dG9cZlIiIDQKKy5JWCBJdGVtICJtYXgtaW5saW5lLWluc25zLXJlY3Vyc2l2ZS1hdXRvIgorLlBECitTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBhbiBvdXQtb2YtbGluZSBjb3B5IG9mIGEKK3NlbGYtcmVjdXJzaXZlIGlubGluZQorZnVuY3Rpb24gY2FuIGdyb3cgaW50byBieSBwZXJmb3JtaW5nIHJlY3Vyc2l2ZSBpbmxpbmluZy4KKy5TcAorRm9yIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbmxpbmUsIFxmQlwtXC1wYXJhbSBtYXgtaW5saW5lLWluc25zLXJlY3Vyc2l2ZVxmUiBpcwordGFrZW4gaW50byBhY2NvdW50LiAgRm9yIGZ1bmN0aW9ucyBub3QgZGVjbGFyZWQgaW5saW5lLCByZWN1cnNpdmUgaW5saW5pbmcKK2hhcHBlbnMgb25seSB3aGVuIFxmQlwtZmlubGluZVwtZnVuY3Rpb25zXGZSIChpbmNsdWRlZCBpbiBcZkJcLU8zXGZSKSBpcworZW5hYmxlZCBhbmQgXGZCXC1cLXBhcmFtIG1heC1pbmxpbmUtaW5zbnMtcmVjdXJzaXZlLWF1dG9cZlIgaXMgdXNlZC4gIFRoZQorZGVmYXVsdCB2YWx1ZSBpcyA0NTAuCisuSVAgIlxmQm1heC1pbmxpbmUtcmVjdXJzaXZlLWRlcHRoXGZSIiA0CisuSVggSXRlbSAibWF4LWlubGluZS1yZWN1cnNpdmUtZGVwdGgiCisuUEQgMAorLklQICJcZkJtYXgtaW5saW5lLXJlY3Vyc2l2ZS1kZXB0aC1hdXRvXGZSIiA0CisuSVggSXRlbSAibWF4LWlubGluZS1yZWN1cnNpdmUtZGVwdGgtYXV0byIKKy5QRAorU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCB1c2VkIGZvciByZWN1cnNpdmUgaW5saW5pbmcuCisuU3AKK0ZvciBmdW5jdGlvbnMgZGVjbGFyZWQgaW5saW5lLCBcZkJcLVwtcGFyYW0gbWF4LWlubGluZS1yZWN1cnNpdmUtZGVwdGhcZlIgaXMKK3Rha2VuIGludG8gYWNjb3VudC4gIEZvciBmdW5jdGlvbnMgbm90IGRlY2xhcmVkIGlubGluZSwgcmVjdXJzaXZlIGlubGluaW5nCitoYXBwZW5zIG9ubHkgd2hlbiBcZkJcLWZpbmxpbmVcLWZ1bmN0aW9uc1xmUiAoaW5jbHVkZWQgaW4gXGZCXC1PM1xmUikgaXMKK2VuYWJsZWQgYW5kIFxmQlwtXC1wYXJhbSBtYXgtaW5saW5lLXJlY3Vyc2l2ZS1kZXB0aC1hdXRvXGZSIGlzIHVzZWQuICBUaGUKK2RlZmF1bHQgdmFsdWUgaXMgOC4KKy5JUCAiXGZCbWluLWlubGluZS1yZWN1cnNpdmUtcHJvYmFiaWxpdHlcZlIiIDQKKy5JWCBJdGVtICJtaW4taW5saW5lLXJlY3Vyc2l2ZS1wcm9iYWJpbGl0eSIKK1JlY3Vyc2l2ZSBpbmxpbmluZyBpcyBwcm9maXRhYmxlIG9ubHkgZm9yIGZ1bmN0aW9uIGhhdmluZyBkZWVwIHJlY3Vyc2lvbgoraW4gYXZlcmFnZSBhbmQgY2FuIGh1cnQgZm9yIGZ1bmN0aW9uIGhhdmluZyBsaXR0bGUgcmVjdXJzaW9uIGRlcHRoIGJ5CitpbmNyZWFzaW5nIHRoZSBwcm9sb2d1ZSBzaXplIG9yIGNvbXBsZXhpdHkgb2YgZnVuY3Rpb24gYm9keSB0byBvdGhlcgorb3B0aW1pemVycy4KKy5TcAorV2hlbiBwcm9maWxlIGZlZWRiYWNrIGlzIGF2YWlsYWJsZSAoc2VlIFxmQlwtZnByb2ZpbGVcLWdlbmVyYXRlXGZSKSB0aGUgYWN0dWFsCityZWN1cnNpb24gZGVwdGggY2FuIGJlIGd1ZXNzZWQgZnJvbSBwcm9iYWJpbGl0eSB0aGF0IGZ1bmN0aW9uIHJlY3Vyc2VzIHZpYSBhCitnaXZlbiBjYWxsIGV4cHJlc3Npb24uICBUaGlzIHBhcmFtZXRlciBsaW1pdHMgaW5saW5pbmcgb25seSB0byBjYWxsIGV4cHJlc3Npb25zCit3aG9zZSBwcm9iYWJpbGl0eSBleGNlZWRzIHRoZSBnaXZlbiB0aHJlc2hvbGQgKGluIHBlcmNlbnRzKS4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorLklQICJcZkJlYXJseS1pbmxpbmluZy1pbnNuc1xmUiIgNAorLklYIEl0ZW0gImVhcmx5LWlubGluaW5nLWluc25zIgorU3BlY2lmeSBncm93dGggdGhhdCB0aGUgZWFybHkgaW5saW5lciBjYW4gbWFrZS4gIEluIGVmZmVjdCBpdCBpbmNyZWFzZXMKK3RoZSBhbW91bnQgb2YgaW5saW5pbmcgZm9yIGNvZGUgaGF2aW5nIGEgbGFyZ2UgYWJzdHJhY3Rpb24gcGVuYWx0eS4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorLklQICJcZkJtYXgtZWFybHktaW5saW5lci1pdGVyYXRpb25zXGZSIiA0CisuSVggSXRlbSAibWF4LWVhcmx5LWlubGluZXItaXRlcmF0aW9ucyIKKy5QRCAwCisuSVAgIlxmQm1heC1lYXJseS1pbmxpbmVyLWl0ZXJhdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtZWFybHktaW5saW5lci1pdGVyYXRpb25zIgorLlBECitMaW1pdCBvZiBpdGVyYXRpb25zIG9mIHRoZSBlYXJseSBpbmxpbmVyLiAgVGhpcyBiYXNpY2FsbHkgYm91bmRzCit0aGUgbnVtYmVyIG9mIG5lc3RlZCBpbmRpcmVjdCBjYWxscyB0aGUgZWFybHkgaW5saW5lciBjYW4gcmVzb2x2ZS4KK0RlZXBlciBjaGFpbnMgYXJlIHN0aWxsIGhhbmRsZWQgYnkgbGF0ZSBpbmxpbmluZy4KKy5JUCAiXGZCY29tZGF0LXNoYXJpbmctcHJvYmFiaWxpdHlcZlIiIDQKKy5JWCBJdGVtICJjb21kYXQtc2hhcmluZy1wcm9iYWJpbGl0eSIKKy5QRCAwCisuSVAgIlxmQmNvbWRhdC1zaGFyaW5nLXByb2JhYmlsaXR5XGZSIiA0CisuSVggSXRlbSAiY29tZGF0LXNoYXJpbmctcHJvYmFiaWxpdHkiCisuUEQKK1Byb2JhYmlsaXR5IChpbiBwZXJjZW50KSB0aGF0IFwqKEMrIGlubGluZSBmdW5jdGlvbiB3aXRoIGNvbWRhdCB2aXNpYmlsaXR5CithcmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSBjb21waWxhdGlvbiB1bml0cy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIwLgorLklQICJcZkJtaW4tdmVjdC1sb29wLWJvdW5kXGZSIiA0CisuSVggSXRlbSAibWluLXZlY3QtbG9vcC1ib3VuZCIKK1RoZSBtaW5pbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIHVuZGVyIHdoaWNoIGxvb3BzIGFyZSBub3QgdmVjdG9yaXplZAord2hlbiBcZkJcLWZ0cmVlXC12ZWN0b3JpemVcZlIgaXMgdXNlZC4gIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBhZnRlcgordmVjdG9yaXphdGlvbiBuZWVkcyB0byBiZSBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIHNwZWNpZmllZCBieSB0aGlzIG9wdGlvbgordG8gYWxsb3cgdmVjdG9yaXphdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuCisuSVAgIlxmQmdjc2UtY29zdC1kaXN0YW5jZS1yYXRpb1xmUiIgNAorLklYIEl0ZW0gImdjc2UtY29zdC1kaXN0YW5jZS1yYXRpbyIKK1NjYWxpbmcgZmFjdG9yIGluIGNhbGN1bGF0aW9uIG9mIG1heGltdW0gZGlzdGFuY2UgYW4gZXhwcmVzc2lvbgorY2FuIGJlIG1vdmVkIGJ5IFxzLTFHQ1NFXHMwIG9wdGltaXphdGlvbnMuICBUaGlzIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBpbiB0aGUKK2NvZGUgaG9pc3RpbmcgcGFzcy4gIFRoZSBiaWdnZXIgdGhlIHJhdGlvLCB0aGUgbW9yZSBhZ2dyZXNzaXZlIGNvZGUgaG9pc3RpbmcKK2lzIHdpdGggc2ltcGxlIGV4cHJlc3Npb25zLCBpLmUuLCB0aGUgZXhwcmVzc2lvbnMgdGhhdCBoYXZlIGNvc3QKK2xlc3MgdGhhbiBcZkJnY3NlLXVucmVzdHJpY3RlZC1jb3N0XGZSLiAgU3BlY2lmeWluZyAwIGRpc2FibGVzCitob2lzdGluZyBvZiBzaW1wbGUgZXhwcmVzc2lvbnMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKy5JUCAiXGZCZ2NzZS11bnJlc3RyaWN0ZWQtY29zdFxmUiIgNAorLklYIEl0ZW0gImdjc2UtdW5yZXN0cmljdGVkLWNvc3QiCitDb3N0LCByb3VnaGx5IG1lYXN1cmVkIGFzIHRoZSBjb3N0IG9mIGEgc2luZ2xlIHR5cGljYWwgbWFjaGluZQoraW5zdHJ1Y3Rpb24sIGF0IHdoaWNoIFxzLTFHQ1NFXHMwIG9wdGltaXphdGlvbnMgZG8gbm90IGNvbnN0cmFpbgordGhlIGRpc3RhbmNlIGFuIGV4cHJlc3Npb24gY2FuIHRyYXZlbC4gIFRoaXMgaXMgY3VycmVudGx5CitzdXBwb3J0ZWQgb25seSBpbiB0aGUgY29kZSBob2lzdGluZyBwYXNzLiAgVGhlIGxlc3NlciB0aGUgY29zdCwKK3RoZSBtb3JlIGFnZ3Jlc3NpdmUgY29kZSBob2lzdGluZyBpcy4gIFNwZWNpZnlpbmcgMCAKK2FsbG93cyBhbGwgZXhwcmVzc2lvbnMgdG8gdHJhdmVsIHVucmVzdHJpY3RlZCBkaXN0YW5jZXMuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzLgorLklQICJcZkJtYXgtaG9pc3QtZGVwdGhcZlIiIDQKKy5JWCBJdGVtICJtYXgtaG9pc3QtZGVwdGgiCitUaGUgZGVwdGggb2Ygc2VhcmNoIGluIHRoZSBkb21pbmF0b3IgdHJlZSBmb3IgZXhwcmVzc2lvbnMgdG8gaG9pc3QuCitUaGlzIGlzIHVzZWQgdG8gYXZvaWQgcXVhZHJhdGljIGJlaGF2aW9yIGluIGhvaXN0aW5nIGFsZ29yaXRobS4KK1RoZSB2YWx1ZSBvZiAwIGRvZXMgbm90IGxpbWl0IG9uIHRoZSBzZWFyY2gsIGJ1dCBtYXkgc2xvdyBkb3duIGNvbXBpbGF0aW9uCitvZiBodWdlIGZ1bmN0aW9ucy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMwLgorLklQICJcZkJtYXgtdGFpbC1tZXJnZS1jb21wYXJpc29uc1xmUiIgNAorLklYIEl0ZW0gIm1heC10YWlsLW1lcmdlLWNvbXBhcmlzb25zIgorVGhlIG1heGltdW0gYW1vdW50IG9mIHNpbWlsYXIgYmJzIHRvIGNvbXBhcmUgYSBiYiB3aXRoLiAgVGhpcyBpcyB1c2VkIHRvCithdm9pZCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gdHJlZSB0YWlsIG1lcmdpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKy5JUCAiXGZCbWF4LXRhaWwtbWVyZ2UtaXRlcmF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIm1heC10YWlsLW1lcmdlLWl0ZXJhdGlvbnMiCitUaGUgbWF4aW11bSBhbW91bnQgb2YgaXRlcmF0aW9ucyBvZiB0aGUgcGFzcyBvdmVyIHRoZSBmdW5jdGlvbi4gIFRoaXMgaXMgdXNlZCB0bworbGltaXQgY29tcGlsYXRpb24gdGltZSBpbiB0cmVlIHRhaWwgbWVyZ2luZy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIuCisuSVAgIlxmQm1heC11bnJvbGxlZC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1heC11bnJvbGxlZC1pbnNucyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhhdCBhIGxvb3AgbWF5IGhhdmUgdG8gYmUgdW5yb2xsZWQuCitJZiBhIGxvb3AgaXMgdW5yb2xsZWQsIHRoaXMgcGFyYW1ldGVyIGFsc28gZGV0ZXJtaW5lcyBob3cgbWFueSB0aW1lcwordGhlIGxvb3AgY29kZSBpcyB1bnJvbGxlZC4KKy5JUCAiXGZCbWF4LWF2ZXJhZ2UtdW5yb2xsZWQtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtYXZlcmFnZS11bnJvbGxlZC1pbnNucyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgYmlhc2VkIGJ5IHByb2JhYmlsaXRpZXMgb2YgdGhlaXIgZXhlY3V0aW9uCit0aGF0IGEgbG9vcCBtYXkgaGF2ZSB0byBiZSB1bnJvbGxlZC4gIElmIGEgbG9vcCBpcyB1bnJvbGxlZCwKK3RoaXMgcGFyYW1ldGVyIGFsc28gZGV0ZXJtaW5lcyBob3cgbWFueSB0aW1lcyB0aGUgbG9vcCBjb2RlIGlzIHVucm9sbGVkLgorLklQICJcZkJtYXgtdW5yb2xsLXRpbWVzXGZSIiA0CisuSVggSXRlbSAibWF4LXVucm9sbC10aW1lcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiB1bnJvbGxpbmdzIG9mIGEgc2luZ2xlIGxvb3AuCisuSVAgIlxmQm1heC1wZWVsZWQtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtcGVlbGVkLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0aGF0IGEgbG9vcCBtYXkgaGF2ZSB0byBiZSBwZWVsZWQuCitJZiBhIGxvb3AgaXMgcGVlbGVkLCB0aGlzIHBhcmFtZXRlciBhbHNvIGRldGVybWluZXMgaG93IG1hbnkgdGltZXMKK3RoZSBsb29wIGNvZGUgaXMgcGVlbGVkLgorLklQICJcZkJtYXgtcGVlbC10aW1lc1xmUiIgNAorLklYIEl0ZW0gIm1heC1wZWVsLXRpbWVzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIHBlZWxpbmdzIG9mIGEgc2luZ2xlIGxvb3AuCisuSVAgIlxmQm1heC1wZWVsLWJyYW5jaGVzXGZSIiA0CisuSVggSXRlbSAibWF4LXBlZWwtYnJhbmNoZXMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgYnJhbmNoZXMgb24gdGhlIGhvdCBwYXRoIHRocm91Z2ggdGhlIHBlZWxlZCBzZXF1ZW5jZS4KKy5JUCAiXGZCbWF4LWNvbXBsZXRlbHktcGVlbGVkLWluc25zXGZSIiA0CisuSVggSXRlbSAibWF4LWNvbXBsZXRlbHktcGVlbGVkLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGEgY29tcGxldGVseSBwZWVsZWQgbG9vcC4KKy5JUCAiXGZCbWF4LWNvbXBsZXRlbHktcGVlbC10aW1lc1xmUiIgNAorLklYIEl0ZW0gIm1heC1jb21wbGV0ZWx5LXBlZWwtdGltZXMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiBhIGxvb3AgdG8gYmUgc3VpdGFibGUgZm9yIGNvbXBsZXRlIHBlZWxpbmcuCisuSVAgIlxmQm1heC1jb21wbGV0ZWx5LXBlZWwtbG9vcC1uZXN0LWRlcHRoXGZSIiA0CisuSVggSXRlbSAibWF4LWNvbXBsZXRlbHktcGVlbC1sb29wLW5lc3QtZGVwdGgiCitUaGUgbWF4aW11bSBkZXB0aCBvZiBhIGxvb3AgbmVzdCBzdWl0YWJsZSBmb3IgY29tcGxldGUgcGVlbGluZy4KKy5JUCAiXGZCbWF4LXVuc3dpdGNoLWluc25zXGZSIiA0CisuSVggSXRlbSAibWF4LXVuc3dpdGNoLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIG9mIGFuIHVuc3dpdGNoZWQgbG9vcC4KKy5JUCAiXGZCbWF4LXVuc3dpdGNoLWxldmVsXGZSIiA0CisuSVggSXRlbSAibWF4LXVuc3dpdGNoLWxldmVsIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGJyYW5jaGVzIHVuc3dpdGNoZWQgaW4gYSBzaW5nbGUgbG9vcC4KKy5JUCAiXGZCbGltLWV4cGVuc2l2ZVxmUiIgNAorLklYIEl0ZW0gImxpbS1leHBlbnNpdmUiCitUaGUgbWluaW11bSBjb3N0IG9mIGFuIGV4cGVuc2l2ZSBleHByZXNzaW9uIGluIHRoZSBsb29wIGludmFyaWFudCBtb3Rpb24uCisuSVAgIlxmQml2LWNvbnNpZGVyLWFsbC1jYW5kaWRhdGVzLWJvdW5kXGZSIiA0CisuSVggSXRlbSAiaXYtY29uc2lkZXItYWxsLWNhbmRpZGF0ZXMtYm91bmQiCitCb3VuZCBvbiBudW1iZXIgb2YgY2FuZGlkYXRlcyBmb3IgaW5kdWN0aW9uIHZhcmlhYmxlcywgYmVsb3cgd2hpY2gKK2FsbCBjYW5kaWRhdGVzIGFyZSBjb25zaWRlcmVkIGZvciBlYWNoIHVzZSBpbiBpbmR1Y3Rpb24gdmFyaWFibGUKK29wdGltaXphdGlvbnMuICBJZiB0aGVyZSBhcmUgbW9yZSBjYW5kaWRhdGVzIHRoYW4gdGhpcywKK29ubHkgdGhlIG1vc3QgcmVsZXZhbnQgb25lcyBhcmUgY29uc2lkZXJlZCB0byBhdm9pZCBxdWFkcmF0aWMgdGltZSBjb21wbGV4aXR5LgorLklQICJcZkJpdi1tYXgtY29uc2lkZXJlZC11c2VzXGZSIiA0CisuSVggSXRlbSAiaXYtbWF4LWNvbnNpZGVyZWQtdXNlcyIKK1RoZSBpbmR1Y3Rpb24gdmFyaWFibGUgb3B0aW1pemF0aW9ucyBnaXZlIHVwIG9uIGxvb3BzIHRoYXQgY29udGFpbiBtb3JlCitpbmR1Y3Rpb24gdmFyaWFibGUgdXNlcy4KKy5JUCAiXGZCaXYtYWx3YXlzLXBydW5lLWNhbmQtc2V0LWJvdW5kXGZSIiA0CisuSVggSXRlbSAiaXYtYWx3YXlzLXBydW5lLWNhbmQtc2V0LWJvdW5kIgorSWYgdGhlIG51bWJlciBvZiBjYW5kaWRhdGVzIGluIHRoZSBzZXQgaXMgc21hbGxlciB0aGFuIHRoaXMgdmFsdWUsCithbHdheXMgdHJ5IHRvIHJlbW92ZSB1bm5lY2Vzc2FyeSBpdnMgZnJvbSB0aGUgc2V0Cit3aGVuIGFkZGluZyBhIG5ldyBvbmUuCisuSVAgIlxmQnNjZXYtbWF4LWV4cHItc2l6ZVxmUiIgNAorLklYIEl0ZW0gInNjZXYtbWF4LWV4cHItc2l6ZSIKK0JvdW5kIG9uIHNpemUgb2YgZXhwcmVzc2lvbnMgdXNlZCBpbiB0aGUgc2NhbGFyIGV2b2x1dGlvbnMgYW5hbHl6ZXIuCitMYXJnZSBleHByZXNzaW9ucyBzbG93IHRoZSBhbmFseXplci4KKy5JUCAiXGZCc2Nldi1tYXgtZXhwci1jb21wbGV4aXR5XGZSIiA0CisuSVggSXRlbSAic2Nldi1tYXgtZXhwci1jb21wbGV4aXR5IgorQm91bmQgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGV4cHJlc3Npb25zIGluIHRoZSBzY2FsYXIgZXZvbHV0aW9ucyBhbmFseXplci4KK0NvbXBsZXggZXhwcmVzc2lvbnMgc2xvdyB0aGUgYW5hbHl6ZXIuCisuSVAgIlxmQm9tZWdhLW1heC12YXJzXGZSIiA0CisuSVggSXRlbSAib21lZ2EtbWF4LXZhcnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgdmFyaWFibGVzIGluIGFuIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTI4LgorLklQICJcZkJvbWVnYS1tYXgtZ2Vxc1xmUiIgNAorLklYIEl0ZW0gIm9tZWdhLW1heC1nZXFzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluZXF1YWxpdGllcyBpbiBhbiBPbWVnYSBjb25zdHJhaW50IHN5c3RlbS4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDI1Ni4KKy5JUCAiXGZCb21lZ2EtbWF4LWVxc1xmUiIgNAorLklYIEl0ZW0gIm9tZWdhLW1heC1lcXMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgZXF1YWxpdGllcyBpbiBhbiBPbWVnYSBjb25zdHJhaW50IHN5c3RlbS4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEyOC4KKy5JUCAiXGZCb21lZ2EtbWF4LXdpbGQtY2FyZHNcZlIiIDQKKy5JWCBJdGVtICJvbWVnYS1tYXgtd2lsZC1jYXJkcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiB3aWxkY2FyZCB2YXJpYWJsZXMgdGhhdCB0aGUgT21lZ2Egc29sdmVyIGlzCithYmxlIHRvIGluc2VydC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE4LgorLklQICJcZkJvbWVnYS1oYXNoLXRhYmxlLXNpemVcZlIiIDQKKy5JWCBJdGVtICJvbWVnYS1oYXNoLXRhYmxlLXNpemUiCitUaGUgc2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSBpbiB0aGUgT21lZ2Egc29sdmVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKKzU1MC4KKy5JUCAiXGZCb21lZ2EtbWF4LWtleXNcZlIiIDQKKy5JWCBJdGVtICJvbWVnYS1tYXgta2V5cyIKK1RoZSBtYXhpbWFsIG51bWJlciBvZiBrZXlzIHVzZWQgYnkgdGhlIE9tZWdhIHNvbHZlci4gIFRoZSBkZWZhdWx0Cit2YWx1ZSBpcyA1MDAuCisuSVAgIlxmQm9tZWdhLWVsaW1pbmF0ZS1yZWR1bmRhbnQtY29uc3RyYWludHNcZlIiIDQKKy5JWCBJdGVtICJvbWVnYS1lbGltaW5hdGUtcmVkdW5kYW50LWNvbnN0cmFpbnRzIgorV2hlbiBzZXQgdG8gMSwgdXNlIGV4cGVuc2l2ZSBtZXRob2RzIHRvIGVsaW1pbmF0ZSBhbGwgcmVkdW5kYW50Citjb25zdHJhaW50cy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuCisuSVAgIlxmQnZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWdubWVudC1jaGVja3NcZlIiIDQKKy5JWCBJdGVtICJ2ZWN0LW1heC12ZXJzaW9uLWZvci1hbGlnbm1lbnQtY2hlY2tzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIHJ1bi10aW1lIGNoZWNrcyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgd2hlbgorZG9pbmcgbG9vcCB2ZXJzaW9uaW5nIGZvciBhbGlnbm1lbnQgaW4gdGhlIHZlY3Rvcml6ZXIuICBTZWUgb3B0aW9uCitcJlxmQlwtZnRyZWVcLXZlY3RcLWxvb3BcLXZlcnNpb25cZlIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuSVAgIlxmQnZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWFzLWNoZWNrc1xmUiIgNAorLklYIEl0ZW0gInZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWFzLWNoZWNrcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBydW4tdGltZSBjaGVja3MgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIHdoZW4KK2RvaW5nIGxvb3AgdmVyc2lvbmluZyBmb3IgYWxpYXMgaW4gdGhlIHZlY3Rvcml6ZXIuICBTZWUgb3B0aW9uCitcJlxmQlwtZnRyZWVcLXZlY3RcLWxvb3BcLXZlcnNpb25cZlIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuSVAgIlxmQm1heC1pdGVyYXRpb25zLXRvLXRyYWNrXGZSIiA0CisuSVggSXRlbSAibWF4LWl0ZXJhdGlvbnMtdG8tdHJhY2siCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiBhIGxvb3AgdGhlIGJydXRlLWZvcmNlIGFsZ29yaXRobQorZm9yIGFuYWx5c2lzIG9mIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcCB0cmllcyB0byBldmFsdWF0ZS4KKy5JUCAiXGZCaG90LWJiLWNvdW50LXdzLXBlcm1pbGxlXGZSIiA0CisuSVggSXRlbSAiaG90LWJiLWNvdW50LXdzLXBlcm1pbGxlIgorQSBiYXNpYyBibG9jayBwcm9maWxlIGNvdW50IGlzIGNvbnNpZGVyZWQgaG90IGlmIGl0IGNvbnRyaWJ1dGVzIHRvIAordGhlIGdpdmVuIHBlcm1pbGxhZ2UgKGkuZS4gMC4uLjEwMDApIG9mIHRoZSBlbnRpcmUgcHJvZmlsZWQgZXhlY3V0aW9uLgorLklQICJcZkJob3QtYmItZnJlcXVlbmN5LWZyYWN0aW9uXGZSIiA0CisuSVggSXRlbSAiaG90LWJiLWZyZXF1ZW5jeS1mcmFjdGlvbiIKK1NlbGVjdCBmcmFjdGlvbiBvZiB0aGUgZW50cnkgYmxvY2sgZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbnMgb2YgYmFzaWMgYmxvY2sgaW4KK2Z1bmN0aW9uIGdpdmVuIGJhc2ljIGJsb2NrIG5lZWRzIHRvIGhhdmUgdG8gYmUgY29uc2lkZXJlZCBob3QuCisuSVAgIlxmQm1heC1wcmVkaWN0ZWQtaXRlcmF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIm1heC1wcmVkaWN0ZWQtaXRlcmF0aW9ucyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBsb29wIGl0ZXJhdGlvbnMgd2UgcHJlZGljdCBzdGF0aWNhbGx5LiAgVGhpcyBpcyB1c2VmdWwKK2luIGNhc2VzIHdoZXJlIGEgZnVuY3Rpb24gY29udGFpbnMgYSBzaW5nbGUgbG9vcCB3aXRoIGtub3duIGJvdW5kIGFuZAorYW5vdGhlciBsb29wIHdpdGggdW5rbm93biBib3VuZC4KK1RoZSBrbm93biBudW1iZXIgb2YgaXRlcmF0aW9ucyBpcyBwcmVkaWN0ZWQgY29ycmVjdGx5LCB3aGlsZQordGhlIHVua25vd24gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgYXZlcmFnZSB0byByb3VnaGx5IDEwLiAgVGhpcyBtZWFucyB0aGF0IHRoZQorbG9vcCB3aXRob3V0IGJvdW5kcyBhcHBlYXJzIGFydGlmaWNpYWxseSBjb2xkIHJlbGF0aXZlIHRvIHRoZSBvdGhlciBvbmUuCisuSVAgIlxmQmFsaWduLXRocmVzaG9sZFxmUiIgNAorLklYIEl0ZW0gImFsaWduLXRocmVzaG9sZCIKK1NlbGVjdCBmcmFjdGlvbiBvZiB0aGUgbWF4aW1hbCBmcmVxdWVuY3kgb2YgZXhlY3V0aW9ucyBvZiBhIGJhc2ljIGJsb2NrIGluCithIGZ1bmN0aW9uIHRvIGFsaWduIHRoZSBiYXNpYyBibG9jay4KKy5JUCAiXGZCYWxpZ24tbG9vcC1pdGVyYXRpb25zXGZSIiA0CisuSVggSXRlbSAiYWxpZ24tbG9vcC1pdGVyYXRpb25zIgorQSBsb29wIGV4cGVjdGVkIHRvIGl0ZXJhdGUgYXQgbGVhc3QgdGhlIHNlbGVjdGVkIG51bWJlciBvZiBpdGVyYXRpb25zIGlzCithbGlnbmVkLgorLklQICJcZkJ0cmFjZXItZHluYW1pYy1jb3ZlcmFnZVxmUiIgNAorLklYIEl0ZW0gInRyYWNlci1keW5hbWljLWNvdmVyYWdlIgorLlBEIDAKKy5JUCAiXGZCdHJhY2VyLWR5bmFtaWMtY292ZXJhZ2UtZmVlZGJhY2tcZlIiIDQKKy5JWCBJdGVtICJ0cmFjZXItZHluYW1pYy1jb3ZlcmFnZS1mZWVkYmFjayIKKy5QRAorVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGxpbWl0IHN1cGVyYmxvY2sgZm9ybWF0aW9uIG9uY2UgdGhlIGdpdmVuIHBlcmNlbnRhZ2Ugb2YKK2V4ZWN1dGVkIGluc3RydWN0aW9ucyBpcyBjb3ZlcmVkLiAgVGhpcyBsaW1pdHMgdW5uZWNlc3NhcnkgY29kZSBzaXplCitleHBhbnNpb24uCisuU3AKK1RoZSBcZkJ0cmFjZXItZHluYW1pYy1jb3ZlcmFnZS1mZWVkYmFja1xmUiBpcyB1c2VkIG9ubHkgd2hlbiBwcm9maWxlCitmZWVkYmFjayBpcyBhdmFpbGFibGUuICBUaGUgcmVhbCBwcm9maWxlcyAoYXMgb3Bwb3NlZCB0byBzdGF0aWNhbGx5IGVzdGltYXRlZAorb25lcykgYXJlIG11Y2ggbGVzcyBiYWxhbmNlZCBhbGxvd2luZyB0aGUgdGhyZXNob2xkIHRvIGJlIGxhcmdlciB2YWx1ZS4KKy5JUCAiXGZCdHJhY2VyLW1heC1jb2RlLWdyb3d0aFxmUiIgNAorLklYIEl0ZW0gInRyYWNlci1tYXgtY29kZS1ncm93dGgiCitTdG9wIHRhaWwgZHVwbGljYXRpb24gb25jZSBjb2RlIGdyb3d0aCBoYXMgcmVhY2hlZCBnaXZlbiBwZXJjZW50YWdlLiAgVGhpcyBpcworYSByYXRoZXIgYXJ0aWZpY2lhbCBsaW1pdCwgYXMgbW9zdCBvZiB0aGUgZHVwbGljYXRlcyBhcmUgZWxpbWluYXRlZCBsYXRlciBpbgorY3Jvc3MganVtcGluZywgc28gaXQgbWF5IGJlIHNldCB0byBtdWNoIGhpZ2hlciB2YWx1ZXMgdGhhbiBpcyB0aGUgZGVzaXJlZCBjb2RlCitncm93dGguCisuSVAgIlxmQnRyYWNlci1taW4tYnJhbmNoLXJhdGlvXGZSIiA0CisuSVggSXRlbSAidHJhY2VyLW1pbi1icmFuY2gtcmF0aW8iCitTdG9wIHJldmVyc2UgZ3Jvd3RoIHdoZW4gdGhlIHJldmVyc2UgcHJvYmFiaWxpdHkgb2YgYmVzdCBlZGdlIGlzIGxlc3MgdGhhbiB0aGlzCit0aHJlc2hvbGQgKGluIHBlcmNlbnQpLgorLklQICJcZkJ0cmFjZXItbWluLWJyYW5jaC1yYXRpb1xmUiIgNAorLklYIEl0ZW0gInRyYWNlci1taW4tYnJhbmNoLXJhdGlvIgorLlBEIDAKKy5JUCAiXGZCdHJhY2VyLW1pbi1icmFuY2gtcmF0aW8tZmVlZGJhY2tcZlIiIDQKKy5JWCBJdGVtICJ0cmFjZXItbWluLWJyYW5jaC1yYXRpby1mZWVkYmFjayIKKy5QRAorU3RvcCBmb3J3YXJkIGdyb3d0aCBpZiB0aGUgYmVzdCBlZGdlIGhhcyBwcm9iYWJpbGl0eSBsb3dlciB0aGFuIHRoaXMKK3RocmVzaG9sZC4KKy5TcAorU2ltaWxhcmx5IHRvIFxmQnRyYWNlci1keW5hbWljLWNvdmVyYWdlXGZSIHR3byB2YWx1ZXMgYXJlIHByZXNlbnQsIG9uZSBmb3IKK2NvbXBpbGF0aW9uIGZvciBwcm9maWxlIGZlZWRiYWNrIGFuZCBvbmUgZm9yIGNvbXBpbGF0aW9uIHdpdGhvdXQuICBUaGUgdmFsdWUKK2ZvciBjb21waWxhdGlvbiB3aXRoIHByb2ZpbGUgZmVlZGJhY2sgbmVlZHMgdG8gYmUgbW9yZSBjb25zZXJ2YXRpdmUgKGhpZ2hlcikgaW4KK29yZGVyIHRvIG1ha2UgdHJhY2VyIGVmZmVjdGl2ZS4KKy5JUCAiXGZCbWF4LWNzZS1wYXRoLWxlbmd0aFxmUiIgNAorLklYIEl0ZW0gIm1heC1jc2UtcGF0aC1sZW5ndGgiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgYmFzaWMgYmxvY2tzIG9uIHBhdGggdGhhdCBccy0xQ1NFXHMwIGNvbnNpZGVycy4KK1RoZSBkZWZhdWx0IGlzIDEwLgorLklQICJcZkJtYXgtY3NlLWluc25zXGZSIiA0CisuSVggSXRlbSAibWF4LWNzZS1pbnNucyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgXHMtMUNTRVxzMCBwcm9jZXNzZXMgYmVmb3JlIGZsdXNoaW5nLgorVGhlIGRlZmF1bHQgaXMgMTAwMC4KKy5JUCAiXGZCZ2djLW1pbi1leHBhbmRcZlIiIDQKKy5JWCBJdGVtICJnZ2MtbWluLWV4cGFuZCIKK1wmXHMtMUdDQ1xzMCB1c2VzIGEgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gbWFuYWdlIGl0cyBvd24gbWVtb3J5IGFsbG9jYXRpb24uICBUaGlzCitwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIHBlcmNlbnRhZ2UgYnkgd2hpY2ggdGhlIGdhcmJhZ2UKK2NvbGxlY3RvcidzIGhlYXAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gZXhwYW5kIGJldHdlZW4gY29sbGVjdGlvbnMuCitUdW5pbmcgdGhpcyBtYXkgaW1wcm92ZSBjb21waWxhdGlvbiBzcGVlZDsgaXQgaGFzIG5vIGVmZmVjdCBvbiBjb2RlCitnZW5lcmF0aW9uLgorLlNwCitUaGUgZGVmYXVsdCBpcyAzMCUgKyA3MCUgKiAoXHMtMVJBTS8xR0JcczApIHdpdGggYW4gdXBwZXIgYm91bmQgb2YgMTAwJSB3aGVuCitcJlxzLTFSQU1cczAgPj0gMUdCLiAgSWYgXGYoQ1dcKihDYGdldHJsaW1pdFwqKEMnXGZSIGlzIGF2YWlsYWJsZSwgdGhlIG5vdGlvbiBvZiBcKihMIlxzLTFSQU1cczBcKihSIiBpcwordGhlIHNtYWxsZXN0IG9mIGFjdHVhbCBccy0xUkFNXHMwIGFuZCBcZihDV1wqKENgUkxJTUlUX0RBVEFcKihDJ1xmUiBvciBcZihDV1wqKENgUkxJTUlUX0FTXCooQydcZlIuICBJZgorXCZccy0xR0NDXHMwIGlzIG5vdCBhYmxlIHRvIGNhbGN1bGF0ZSBccy0xUkFNXHMwIG9uIGEgcGFydGljdWxhciBwbGF0Zm9ybSwgdGhlIGxvd2VyCitib3VuZCBvZiAzMCUgaXMgdXNlZC4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgYW5kCitcJlxmQmdnYy1taW4taGVhcHNpemVcZlIgdG8gemVybyBjYXVzZXMgYSBmdWxsIGNvbGxlY3Rpb24gdG8gb2NjdXIgYXQKK2V2ZXJ5IG9wcG9ydHVuaXR5LiAgVGhpcyBpcyBleHRyZW1lbHkgc2xvdywgYnV0IGNhbiBiZSB1c2VmdWwgZm9yCitkZWJ1Z2dpbmcuCisuSVAgIlxmQmdnYy1taW4taGVhcHNpemVcZlIiIDQKKy5JWCBJdGVtICJnZ2MtbWluLWhlYXBzaXplIgorTWluaW11bSBzaXplIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3RvcidzIGhlYXAgYmVmb3JlIGl0IGJlZ2lucyBib3RoZXJpbmcKK3RvIGNvbGxlY3QgZ2FyYmFnZS4gIFRoZSBmaXJzdCBjb2xsZWN0aW9uIG9jY3VycyBhZnRlciB0aGUgaGVhcCBleHBhbmRzCitieSBcZkJnZ2MtbWluLWV4cGFuZFxmUiUgYmV5b25kIFxmQmdnYy1taW4taGVhcHNpemVcZlIuICBBZ2FpbiwKK3R1bmluZyB0aGlzIG1heSBpbXByb3ZlIGNvbXBpbGF0aW9uIHNwZWVkLCBhbmQgaGFzIG5vIGVmZmVjdCBvbiBjb2RlCitnZW5lcmF0aW9uLgorLlNwCitUaGUgZGVmYXVsdCBpcyB0aGUgc21hbGxlciBvZiBccy0xUkFNLzhcczAsIFxzLTFSTElNSVRfUlNTXHMwLCBvciBhIGxpbWl0IHRoYXQKK3RyaWVzIHRvIGVuc3VyZSB0aGF0IFxzLTFSTElNSVRfREFUQVxzMCBvciBccy0xUkxJTUlUX0FTXHMwIGFyZSBub3QgZXhjZWVkZWQsIGJ1dAord2l0aCBhIGxvd2VyIGJvdW5kIG9mIDQwOTYgKGZvdXIgbWVnYWJ5dGVzKSBhbmQgYW4gdXBwZXIgYm91bmQgb2YKKzEzMTA3MiAoMTI4IG1lZ2FieXRlcykuICBJZiBccy0xR0NDXHMwIGlzIG5vdCBhYmxlIHRvIGNhbGN1bGF0ZSBccy0xUkFNXHMwIG9uIGEKK3BhcnRpY3VsYXIgcGxhdGZvcm0sIHRoZSBsb3dlciBib3VuZCBpcyB1c2VkLiAgU2V0dGluZyB0aGlzIHBhcmFtZXRlcgordmVyeSBsYXJnZSBlZmZlY3RpdmVseSBkaXNhYmxlcyBnYXJiYWdlIGNvbGxlY3Rpb24uICBTZXR0aW5nIHRoaXMKK3BhcmFtZXRlciBhbmQgXGZCZ2djLW1pbi1leHBhbmRcZlIgdG8gemVybyBjYXVzZXMgYSBmdWxsIGNvbGxlY3Rpb24KK3RvIG9jY3VyIGF0IGV2ZXJ5IG9wcG9ydHVuaXR5LgorLklQICJcZkJtYXgtcmVsb2FkLXNlYXJjaC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1heC1yZWxvYWQtc2VhcmNoLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9uIHJlbG9hZCBzaG91bGQgbG9vayBiYWNrd2FyZCBmb3IgZXF1aXZhbGVudAorcmVnaXN0ZXIuICBJbmNyZWFzaW5nIHZhbHVlcyBtZWFuIG1vcmUgYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24sIG1ha2luZyB0aGUKK2NvbXBpbGF0aW9uIHRpbWUgaW5jcmVhc2Ugd2l0aCBwcm9iYWJseSBzbGlnaHRseSBiZXR0ZXIgcGVyZm9ybWFuY2UuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAuCisuSVAgIlxmQm1heC1jc2VsaWItbWVtb3J5LWxvY2F0aW9uc1xmUiIgNAorLklYIEl0ZW0gIm1heC1jc2VsaWItbWVtb3J5LWxvY2F0aW9ucyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBtZW1vcnkgbG9jYXRpb25zIGNzZWxpYiBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQuCitJbmNyZWFzaW5nIHZhbHVlcyBtZWFuIG1vcmUgYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24sIG1ha2luZyB0aGUgY29tcGlsYXRpb24gdGltZQoraW5jcmVhc2Ugd2l0aCBwcm9iYWJseSBzbGlnaHRseSBiZXR0ZXIgcGVyZm9ybWFuY2UuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MDAuCisuSVAgIlxmQnJlb3JkZXItYmxvY2tzLWR1cGxpY2F0ZVxmUiIgNAorLklYIEl0ZW0gInJlb3JkZXItYmxvY2tzLWR1cGxpY2F0ZSIKKy5QRCAwCisuSVAgIlxmQnJlb3JkZXItYmxvY2tzLWR1cGxpY2F0ZS1mZWVkYmFja1xmUiIgNAorLklYIEl0ZW0gInJlb3JkZXItYmxvY2tzLWR1cGxpY2F0ZS1mZWVkYmFjayIKKy5QRAorVXNlZCBieSB0aGUgYmFzaWMgYmxvY2sgcmVvcmRlcmluZyBwYXNzIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHVzZSB1bmNvbmRpdGlvbmFsCiticmFuY2ggb3IgZHVwbGljYXRlIHRoZSBjb2RlIG9uIGl0cyBkZXN0aW5hdGlvbi4gIENvZGUgaXMgZHVwbGljYXRlZCB3aGVuIGl0cworZXN0aW1hdGVkIHNpemUgaXMgc21hbGxlciB0aGFuIHRoaXMgdmFsdWUgbXVsdGlwbGllZCBieSB0aGUgZXN0aW1hdGVkIHNpemUgb2YKK3VuY29uZGl0aW9uYWwganVtcCBpbiB0aGUgaG90IHNwb3RzIG9mIHRoZSBwcm9ncmFtLgorLlNwCitUaGUgXGZCcmVvcmRlci1ibG9jay1kdXBsaWNhdGUtZmVlZGJhY2tcZlIgaXMgdXNlZCBvbmx5IHdoZW4gcHJvZmlsZQorZmVlZGJhY2sgaXMgYXZhaWxhYmxlLiAgSXQgbWF5IGJlIHNldCB0byBoaWdoZXIgdmFsdWVzIHRoYW4KK1wmXGZCcmVvcmRlci1ibG9jay1kdXBsaWNhdGVcZlIgc2luY2UgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhvdCBzcG90cyBpcyBtb3JlCithY2N1cmF0ZS4KKy5JUCAiXGZCbWF4LXNjaGVkLXJlYWR5LWluc25zXGZSIiA0CisuSVggSXRlbSAibWF4LXNjaGVkLXJlYWR5LWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyByZWFkeSB0byBiZSBpc3N1ZWQgdGhlIHNjaGVkdWxlciBzaG91bGQKK2NvbnNpZGVyIGF0IGFueSBnaXZlbiB0aW1lIGR1cmluZyB0aGUgZmlyc3Qgc2NoZWR1bGluZyBwYXNzLiAgSW5jcmVhc2luZwordmFsdWVzIG1lYW4gbW9yZSB0aG9yb3VnaCBzZWFyY2hlcywgbWFraW5nIHRoZSBjb21waWxhdGlvbiB0aW1lIGluY3JlYXNlCit3aXRoIHByb2JhYmx5IGxpdHRsZSBiZW5lZml0LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwLgorLklQICJcZkJtYXgtc2NoZWQtcmVnaW9uLWJsb2Nrc1xmUiIgNAorLklYIEl0ZW0gIm1heC1zY2hlZC1yZWdpb24tYmxvY2tzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyBpbiBhIHJlZ2lvbiB0byBiZSBjb25zaWRlcmVkIGZvcgoraW50ZXJibG9jayBzY2hlZHVsaW5nLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisuSVAgIlxmQm1heC1waXBlbGluZS1yZWdpb24tYmxvY2tzXGZSIiA0CisuSVggSXRlbSAibWF4LXBpcGVsaW5lLXJlZ2lvbi1ibG9ja3MiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIGluIGEgcmVnaW9uIHRvIGJlIGNvbnNpZGVyZWQgZm9yCitwaXBlbGluaW5nIGluIHRoZSBzZWxlY3RpdmUgc2NoZWR1bGVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUuCisuSVAgIlxmQm1heC1zY2hlZC1yZWdpb24taW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtc2NoZWQtcmVnaW9uLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIGluIGEgcmVnaW9uIHRvIGJlIGNvbnNpZGVyZWQgZm9yCitpbnRlcmJsb2NrIHNjaGVkdWxpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAuCisuSVAgIlxmQm1heC1waXBlbGluZS1yZWdpb24taW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtcGlwZWxpbmUtcmVnaW9uLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc25zIGluIGEgcmVnaW9uIHRvIGJlIGNvbnNpZGVyZWQgZm9yCitwaXBlbGluaW5nIGluIHRoZSBzZWxlY3RpdmUgc2NoZWR1bGVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAwLgorLklQICJcZkJtaW4tc3BlYy1wcm9iXGZSIiA0CisuSVggSXRlbSAibWluLXNwZWMtcHJvYiIKK1RoZSBtaW5pbXVtIHByb2JhYmlsaXR5IChpbiBwZXJjZW50cykgb2YgcmVhY2hpbmcgYSBzb3VyY2UgYmxvY2sKK2ZvciBpbnRlcmJsb2NrIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0MC4KKy5JUCAiXGZCbWF4LXNjaGVkLWV4dGVuZC1yZWdpb25zLWl0ZXJzXGZSIiA0CisuSVggSXRlbSAibWF4LXNjaGVkLWV4dGVuZC1yZWdpb25zLWl0ZXJzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdGhyb3VnaCBccy0xQ0ZHXHMwIHRvIGV4dGVuZCByZWdpb25zLgorQSB2YWx1ZSBvZiAwICh0aGUgZGVmYXVsdCkgZGlzYWJsZXMgcmVnaW9uIGV4dGVuc2lvbnMuCisuSVAgIlxmQm1heC1zY2hlZC1pbnNuLWNvbmZsaWN0LWRlbGF5XGZSIiA0CisuSVggSXRlbSAibWF4LXNjaGVkLWluc24tY29uZmxpY3QtZGVsYXkiCitUaGUgbWF4aW11bSBjb25mbGljdCBkZWxheSBmb3IgYW4gaW5zbiB0byBiZSBjb25zaWRlcmVkIGZvciBzcGVjdWxhdGl2ZSBtb3Rpb24uCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzLgorLklQICJcZkJzY2hlZC1zcGVjLXByb2ItY3V0b2ZmXGZSIiA0CisuSVggSXRlbSAic2NoZWQtc3BlYy1wcm9iLWN1dG9mZiIKK1RoZSBtaW5pbWFsIHByb2JhYmlsaXR5IG9mIHNwZWN1bGF0aW9uIHN1Y2Nlc3MgKGluIHBlcmNlbnRzKSwgc28gdGhhdAorc3BlY3VsYXRpdmUgaW5zbnMgYXJlIHNjaGVkdWxlZC4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDQwLgorLklQICJcZkJzY2hlZC1zcGVjLXN0YXRlLWVkZ2UtcHJvYi1jdXRvZmZcZlIiIDQKKy5JWCBJdGVtICJzY2hlZC1zcGVjLXN0YXRlLWVkZ2UtcHJvYi1jdXRvZmYiCitUaGUgbWluaW11bSBwcm9iYWJpbGl0eSBhbiBlZGdlIG11c3QgaGF2ZSBmb3IgdGhlIHNjaGVkdWxlciB0byBzYXZlIGl0cworc3RhdGUgYWNyb3NzIGl0LgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisuSVAgIlxmQnNjaGVkLW1lbS10cnVlLWRlcC1jb3N0XGZSIiA0CisuSVggSXRlbSAic2NoZWQtbWVtLXRydWUtZGVwLWNvc3QiCitNaW5pbWFsIGRpc3RhbmNlIChpbiBccy0xQ1BVXHMwIGN5Y2xlcykgYmV0d2VlbiBzdG9yZSBhbmQgbG9hZCB0YXJnZXRpbmcgc2FtZQorbWVtb3J5IGxvY2F0aW9ucy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuCisuSVAgIlxmQnNlbHNjaGVkLW1heC1sb29rYWhlYWRcZlIiIDQKKy5JWCBJdGVtICJzZWxzY2hlZC1tYXgtbG9va2FoZWFkIgorVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgbG9va2FoZWFkIHdpbmRvdyBvZiBzZWxlY3RpdmUgc2NoZWR1bGluZy4gIEl0IGlzIGEKK2RlcHRoIG9mIHNlYXJjaCBmb3IgYXZhaWxhYmxlIGluc3RydWN0aW9ucy4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDUwLgorLklQICJcZkJzZWxzY2hlZC1tYXgtc2NoZWQtdGltZXNcZlIiIDQKKy5JWCBJdGVtICJzZWxzY2hlZC1tYXgtc2NoZWQtdGltZXMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhhdCBhbiBpbnN0cnVjdGlvbiBpcyBzY2hlZHVsZWQgZHVyaW5nCitzZWxlY3RpdmUgc2NoZWR1bGluZy4gIFRoaXMgaXMgdGhlIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucwordGhyb3VnaCB3aGljaCB0aGUgaW5zdHJ1Y3Rpb24gbWF5IGJlIHBpcGVsaW5lZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIuCisuSVAgIlxmQnNlbHNjaGVkLW1heC1pbnNucy10by1yZW5hbWVcZlIiIDQKKy5JWCBJdGVtICJzZWxzY2hlZC1tYXgtaW5zbnMtdG8tcmVuYW1lIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGJlc3QgaW5zdHJ1Y3Rpb25zIGluIHRoZSByZWFkeSBsaXN0IHRoYXQgYXJlIGNvbnNpZGVyZWQKK2ZvciByZW5hbWluZyBpbiB0aGUgc2VsZWN0aXZlIHNjaGVkdWxlci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIuCisuSVAgIlxmQnNtcy1taW4tc2NcZlIiIDQKKy5JWCBJdGVtICJzbXMtbWluLXNjIgorVGhlIG1pbmltdW0gdmFsdWUgb2Ygc3RhZ2UgY291bnQgdGhhdCBzd2luZyBtb2R1bG8gc2NoZWR1bGVyCitnZW5lcmF0ZXMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLgorLklQICJcZkJtYXgtbGFzdC12YWx1ZS1ydGxcZlIiIDQKKy5JWCBJdGVtICJtYXgtbGFzdC12YWx1ZS1ydGwiCitUaGUgbWF4aW11bSBzaXplIG1lYXN1cmVkIGFzIG51bWJlciBvZiBSVExzIHRoYXQgY2FuIGJlIHJlY29yZGVkIGluIGFuIGV4cHJlc3Npb24KK2luIGNvbWJpbmVyIGZvciBhIHBzZXVkbyByZWdpc3RlciBhcyBsYXN0IGtub3duIHZhbHVlIG9mIHRoYXQgcmVnaXN0ZXIuICBUaGUgZGVmYXVsdAoraXMgMTAwMDAuCisuSVAgIlxmQmludGVnZXItc2hhcmUtbGltaXRcZlIiIDQKKy5JWCBJdGVtICJpbnRlZ2VyLXNoYXJlLWxpbWl0IgorU21hbGwgaW50ZWdlciBjb25zdGFudHMgY2FuIHVzZSBhIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSwgcmVkdWNpbmcgdGhlCitjb21waWxlcidzIG1lbW9yeSB1c2FnZSBhbmQgaW5jcmVhc2luZyBpdHMgc3BlZWQuICBUaGlzIHNldHMgdGhlIG1heGltdW0KK3ZhbHVlIG9mIGEgc2hhcmVkIGludGVnZXIgY29uc3RhbnQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYuCisuSVAgIlxmQnNzcC1idWZmZXItc2l6ZVxmUiIgNAorLklYIEl0ZW0gInNzcC1idWZmZXItc2l6ZSIKK1RoZSBtaW5pbXVtIHNpemUgb2YgYnVmZmVycyAoaS5lLiBhcnJheXMpIHRoYXQgcmVjZWl2ZSBzdGFjayBzbWFzaGluZworcHJvdGVjdGlvbiB3aGVuIFxmQlwtZnN0YWNrXC1wcm90ZWN0aW9uXGZSIGlzIHVzZWQuCisuSVAgIlxmQm1heC1qdW1wLXRocmVhZC1kdXBsaWNhdGlvbi1zdG10c1xmUiIgNAorLklYIEl0ZW0gIm1heC1qdW1wLXRocmVhZC1kdXBsaWNhdGlvbi1zdG10cyIKK01heGltdW0gbnVtYmVyIG9mIHN0YXRlbWVudHMgYWxsb3dlZCBpbiBhIGJsb2NrIHRoYXQgbmVlZHMgdG8gYmUKK2R1cGxpY2F0ZWQgd2hlbiB0aHJlYWRpbmcganVtcHMuCisuSVAgIlxmQm1heC1maWVsZHMtZm9yLWZpZWxkLXNlbnNpdGl2ZVxmUiIgNAorLklYIEl0ZW0gIm1heC1maWVsZHMtZm9yLWZpZWxkLXNlbnNpdGl2ZSIKK01heGltdW0gbnVtYmVyIG9mIGZpZWxkcyBpbiBhIHN0cnVjdHVyZSB0cmVhdGVkIGluCithIGZpZWxkIHNlbnNpdGl2ZSBtYW5uZXIgZHVyaW5nIHBvaW50ZXIgYW5hbHlzaXMuICBUaGUgZGVmYXVsdCBpcyB6ZXJvCitmb3IgXGZCXC1PMFxmUiBhbmQgXGZCXC1PMVxmUiwKK2FuZCAxMDAgZm9yIFxmQlwtT3NcZlIsIFxmQlwtTzJcZlIsIGFuZCBcZkJcLU8zXGZSLgorLklQICJcZkJwcmVmZXRjaC1sYXRlbmN5XGZSIiA0CisuSVggSXRlbSAicHJlZmV0Y2gtbGF0ZW5jeSIKK0VzdGltYXRlIG9uIGF2ZXJhZ2UgbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0aGF0IGFyZSBleGVjdXRlZCBiZWZvcmUKK3ByZWZldGNoIGZpbmlzaGVzLiAgVGhlIGRpc3RhbmNlIHByZWZldGNoZWQgYWhlYWQgaXMgcHJvcG9ydGlvbmFsCit0byB0aGlzIGNvbnN0YW50LiAgSW5jcmVhc2luZyB0aGlzIG51bWJlciBtYXkgYWxzbyBsZWFkIHRvIGxlc3MKK3N0cmVhbXMgYmVpbmcgcHJlZmV0Y2hlZCAoc2VlIFxmQnNpbXVsdGFuZW91cy1wcmVmZXRjaGVzXGZSKS4KKy5JUCAiXGZCc2ltdWx0YW5lb3VzLXByZWZldGNoZXNcZlIiIDQKKy5JWCBJdGVtICJzaW11bHRhbmVvdXMtcHJlZmV0Y2hlcyIKK01heGltdW0gbnVtYmVyIG9mIHByZWZldGNoZXMgdGhhdCBjYW4gcnVuIGF0IHRoZSBzYW1lIHRpbWUuCisuSVAgIlxmQmwxXC1jYWNoZVwtbGluZVwtc2l6ZVxmUiIgNAorLklYIEl0ZW0gImwxLWNhY2hlLWxpbmUtc2l6ZSIKK1RoZSBzaXplIG9mIGNhY2hlIGxpbmUgaW4gTDEgY2FjaGUsIGluIGJ5dGVzLgorLklQICJcZkJsMVwtY2FjaGVcLXNpemVcZlIiIDQKKy5JWCBJdGVtICJsMS1jYWNoZS1zaXplIgorVGhlIHNpemUgb2YgTDEgY2FjaGUsIGluIGtpbG9ieXRlcy4KKy5JUCAiXGZCbDJcLWNhY2hlXC1zaXplXGZSIiA0CisuSVggSXRlbSAibDItY2FjaGUtc2l6ZSIKK1RoZSBzaXplIG9mIEwyIGNhY2hlLCBpbiBraWxvYnl0ZXMuCisuSVAgIlxmQm1pbi1pbnNuLXRvLXByZWZldGNoLXJhdGlvXGZSIiA0CisuSVggSXRlbSAibWluLWluc24tdG8tcHJlZmV0Y2gtcmF0aW8iCitUaGUgbWluaW11bSByYXRpbyBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUKK251bWJlciBvZiBwcmVmZXRjaGVzIHRvIGVuYWJsZSBwcmVmZXRjaGluZyBpbiBhIGxvb3AuCisuSVAgIlxmQnByZWZldGNoLW1pbi1pbnNuLXRvLW1lbS1yYXRpb1xmUiIgNAorLklYIEl0ZW0gInByZWZldGNoLW1pbi1pbnNuLXRvLW1lbS1yYXRpbyIKK1RoZSBtaW5pbXVtIHJhdGlvIGJldHdlZW4gdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgYW5kIHRoZQorbnVtYmVyIG9mIG1lbW9yeSByZWZlcmVuY2VzIHRvIGVuYWJsZSBwcmVmZXRjaGluZyBpbiBhIGxvb3AuCisuSVAgIlxmQnVzZS1jYW5vbmljYWwtdHlwZXNcZlIiIDQKKy5JWCBJdGVtICJ1c2UtY2Fub25pY2FsLXR5cGVzIgorV2hldGhlciB0aGUgY29tcGlsZXIgc2hvdWxkIHVzZSB0aGUgXCooTCJjYW5vbmljYWxcKihSIiB0eXBlIHN5c3RlbS4gIEJ5CitkZWZhdWx0LCB0aGlzIHNob3VsZCBhbHdheXMgYmUgMSwgd2hpY2ggdXNlcyBhIG1vcmUgZWZmaWNpZW50IGludGVybmFsCittZWNoYW5pc20gZm9yIGNvbXBhcmluZyB0eXBlcyBpbiBcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKy4gIEhvd2V2ZXIsIGlmCitidWdzIGluIHRoZSBjYW5vbmljYWwgdHlwZSBzeXN0ZW0gYXJlIGNhdXNpbmcgY29tcGlsYXRpb24gZmFpbHVyZXMsCitzZXQgdGhpcyB2YWx1ZSB0byAwIHRvIGRpc2FibGUgY2Fub25pY2FsIHR5cGVzLgorLklQICJcZkJzd2l0Y2gtY29udmVyc2lvbi1tYXgtYnJhbmNoLXJhdGlvXGZSIiA0CisuSVggSXRlbSAic3dpdGNoLWNvbnZlcnNpb24tbWF4LWJyYW5jaC1yYXRpbyIKK1N3aXRjaCBpbml0aWFsaXphdGlvbiBjb252ZXJzaW9uIHJlZnVzZXMgdG8gY3JlYXRlIGFycmF5cyB0aGF0IGFyZQorYmlnZ2VyIHRoYW4gXGZCc3dpdGNoLWNvbnZlcnNpb24tbWF4LWJyYW5jaC1yYXRpb1xmUiB0aW1lcyB0aGUgbnVtYmVyIG9mCiticmFuY2hlcyBpbiB0aGUgc3dpdGNoLgorLklQICJcZkJtYXgtcGFydGlhbC1hbnRpYy1sZW5ndGhcZlIiIDQKKy5JWCBJdGVtICJtYXgtcGFydGlhbC1hbnRpYy1sZW5ndGgiCitNYXhpbXVtIGxlbmd0aCBvZiB0aGUgcGFydGlhbCBhbnRpYyBzZXQgY29tcHV0ZWQgZHVyaW5nIHRoZSB0cmVlCitwYXJ0aWFsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24gb3B0aW1pemF0aW9uIChcZkJcLWZ0cmVlXC1wcmVcZlIpIHdoZW4KK29wdGltaXppbmcgYXQgXGZCXC1PM1xmUiBhbmQgYWJvdmUuICBGb3Igc29tZSBzb3J0cyBvZiBzb3VyY2UgY29kZQordGhlIGVuaGFuY2VkIHBhcnRpYWwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiBvcHRpbWl6YXRpb24gY2FuIHJ1biBhd2F5LAorY29uc3VtaW5nIGFsbCBvZiB0aGUgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgaG9zdCBtYWNoaW5lLiAgVGhpcworcGFyYW1ldGVyIHNldHMgYSBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBzZXRzIHRoYXQgYXJlIGNvbXB1dGVkLAord2hpY2ggcHJldmVudHMgdGhlIHJ1bmF3YXkgYmVoYXZpb3IuICBTZXR0aW5nIGEgdmFsdWUgb2YgMCBmb3IKK3RoaXMgcGFyYW1ldGVyIGFsbG93cyBhbiB1bmxpbWl0ZWQgc2V0IGxlbmd0aC4KKy5JUCAiXGZCc2Njdm4tbWF4LXNjYy1zaXplXGZSIiA0CisuSVggSXRlbSAic2Njdm4tbWF4LXNjYy1zaXplIgorTWF4aW11bSBzaXplIG9mIGEgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudCAoXHMtMVNDQ1xzMCkgZHVyaW5nIFxzLTFTQ0NWTlxzMAorcHJvY2Vzc2luZy4gIElmIHRoaXMgbGltaXQgaXMgaGl0LCBccy0xU0NDVk5cczAgcHJvY2Vzc2luZyBmb3IgdGhlIHdob2xlCitmdW5jdGlvbiBpcyBub3QgZG9uZSBhbmQgb3B0aW1pemF0aW9ucyBkZXBlbmRpbmcgb24gaXQgYXJlCitkaXNhYmxlZC4gIFRoZSBkZWZhdWx0IG1heGltdW0gXHMtMVNDQ1xzMCBzaXplIGlzIDEwMDAwLgorLklQICJcZkJzY2N2bi1tYXgtYWxpYXMtcXVlcmllcy1wZXItYWNjZXNzXGZSIiA0CisuSVggSXRlbSAic2Njdm4tbWF4LWFsaWFzLXF1ZXJpZXMtcGVyLWFjY2VzcyIKK01heGltdW0gbnVtYmVyIG9mIGFsaWFzLW9yYWNsZSBxdWVyaWVzIHdlIHBlcmZvcm0gd2hlbiBsb29raW5nIGZvcgorcmVkdW5kYW5jaWVzIGZvciBsb2FkcyBhbmQgc3RvcmVzLiAgSWYgdGhpcyBsaW1pdCBpcyBoaXQgdGhlIHNlYXJjaAoraXMgYWJvcnRlZCBhbmQgdGhlIGxvYWQgb3Igc3RvcmUgaXMgbm90IGNvbnNpZGVyZWQgcmVkdW5kYW50LiAgVGhlCitudW1iZXIgb2YgcXVlcmllcyBpcyBhbGdvcml0aG1pY2FsbHkgbGltaXRlZCB0byB0aGUgbnVtYmVyIG9mCitzdG9yZXMgb24gYWxsIHBhdGhzIGZyb20gdGhlIGxvYWQgdG8gdGhlIGZ1bmN0aW9uIGVudHJ5LgorVGhlIGRlZmF1bHQgbWF4bWltdW0gbnVtYmVyIG9mIHF1ZXJpZXMgaXMgMTAwMC4KKy5JUCAiXGZCaXJhLW1heC1sb29wcy1udW1cZlIiIDQKKy5JWCBJdGVtICJpcmEtbWF4LWxvb3BzLW51bSIKK1wmXHMtMUlSQVxzMCB1c2VzIHJlZ2lvbmFsIHJlZ2lzdGVyIGFsbG9jYXRpb24gYnkgZGVmYXVsdC4gIElmIGEgZnVuY3Rpb24KK2NvbnRhaW5zIG1vcmUgbG9vcHMgdGhhbiB0aGUgbnVtYmVyIGdpdmVuIGJ5IHRoaXMgcGFyYW1ldGVyLCBvbmx5IGF0IG1vc3QKK3RoZSBnaXZlbiBudW1iZXIgb2YgdGhlIG1vc3QgZnJlcXVlbnRseS1leGVjdXRlZCBsb29wcyBmb3JtIHJlZ2lvbnMKK2ZvciByZWdpb25hbCByZWdpc3RlciBhbGxvY2F0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlCitwYXJhbWV0ZXIgaXMgMTAwLgorLklQICJcZkJpcmEtbWF4LWNvbmZsaWN0LXRhYmxlLXNpemVcZlIiIDQKKy5JWCBJdGVtICJpcmEtbWF4LWNvbmZsaWN0LXRhYmxlLXNpemUiCitBbHRob3VnaCBccy0xSVJBXHMwIHVzZXMgYSBzb3BoaXN0aWNhdGVkIGFsZ29yaXRobSB0byBjb21wcmVzcyB0aGUgY29uZmxpY3QKK3RhYmxlLCB0aGUgdGFibGUgY2FuIHN0aWxsIHJlcXVpcmUgZXhjZXNzaXZlIGFtb3VudHMgb2YgbWVtb3J5IGZvcgoraHVnZSBmdW5jdGlvbnMuICBJZiB0aGUgY29uZmxpY3QgdGFibGUgZm9yIGEgZnVuY3Rpb24gY291bGQgYmUgbW9yZQordGhhbiB0aGUgc2l6ZSBpbiBccy0xTUJcczAgZ2l2ZW4gYnkgdGhpcyBwYXJhbWV0ZXIsIHRoZSByZWdpc3RlciBhbGxvY2F0b3IKK2luc3RlYWQgdXNlcyBhIGZhc3Rlciwgc2ltcGxlciwgYW5kIGxvd2VyLXF1YWxpdHkKK2FsZ29yaXRobSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgYnVpbGRpbmcgYSBwc2V1ZG8tcmVnaXN0ZXIgY29uZmxpY3QgdGFibGUuICAKK1RoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIgaXMgMjAwMC4KKy5JUCAiXGZCaXJhLWxvb3AtcmVzZXJ2ZWQtcmVnc1xmUiIgNAorLklYIEl0ZW0gImlyYS1sb29wLXJlc2VydmVkLXJlZ3MiCitcJlxzLTFJUkFcczAgY2FuIGJlIHVzZWQgdG8gZXZhbHVhdGUgbW9yZSBhY2N1cmF0ZSByZWdpc3RlciBwcmVzc3VyZSBpbiBsb29wcworZm9yIGRlY2lzaW9ucyB0byBtb3ZlIGxvb3AgaW52YXJpYW50cyAoc2VlIFxmQlwtTzNcZlIpLiAgVGhlIG51bWJlcgorb2YgYXZhaWxhYmxlIHJlZ2lzdGVycyByZXNlcnZlZCBmb3Igc29tZSBvdGhlciBwdXJwb3NlcyBpcyBnaXZlbgorYnkgdGhpcyBwYXJhbWV0ZXIuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIGlzIDIsIHdoaWNoIGlzCit0aGUgbWluaW1hbCBudW1iZXIgb2YgcmVnaXN0ZXJzIG5lZWRlZCBieSB0eXBpY2FsIGluc3RydWN0aW9ucy4KK1RoaXMgdmFsdWUgaXMgdGhlIGJlc3QgZm91bmQgZnJvbSBudW1lcm91cyBleHBlcmltZW50cy4KKy5JUCAiXGZCbG9vcC1pbnZhcmlhbnQtbWF4LWJicy1pbi1sb29wXGZSIiA0CisuSVggSXRlbSAibG9vcC1pbnZhcmlhbnQtbWF4LWJicy1pbi1sb29wIgorTG9vcCBpbnZhcmlhbnQgbW90aW9uIGNhbiBiZSB2ZXJ5IGV4cGVuc2l2ZSwgYm90aCBpbiBjb21waWxhdGlvbiB0aW1lIGFuZAoraW4gYW1vdW50IG9mIG5lZWRlZCBjb21waWxlLXRpbWUgbWVtb3J5LCB3aXRoIHZlcnkgbGFyZ2UgbG9vcHMuICBMb29wcword2l0aCBtb3JlIGJhc2ljIGJsb2NrcyB0aGFuIHRoaXMgcGFyYW1ldGVyIHdvbid0IGhhdmUgbG9vcCBpbnZhcmlhbnQKK21vdGlvbiBvcHRpbWl6YXRpb24gcGVyZm9ybWVkIG9uIHRoZW0uICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUKK3BhcmFtZXRlciBpcyAxMDAwIGZvciBcZkJcLU8xXGZSIGFuZCAxMDAwMCBmb3IgXGZCXC1PMlxmUiBhbmQgYWJvdmUuCisuSVAgIlxmQmxvb3AtbWF4LWRhdGFyZWZzLWZvci1kYXRhZGVwc1xmUiIgNAorLklYIEl0ZW0gImxvb3AtbWF4LWRhdGFyZWZzLWZvci1kYXRhZGVwcyIKK0J1aWxkaW5nIGRhdGEgZGFwZW5kZW5jaWVzIGlzIGV4cGVuc2l2ZSBmb3IgdmVyeSBsYXJnZSBsb29wcy4gIFRoaXMKK3BhcmFtZXRlciBsaW1pdHMgdGhlIG51bWJlciBvZiBkYXRhIHJlZmVyZW5jZXMgaW4gbG9vcHMgdGhhdCBhcmUKK2NvbnNpZGVyZWQgZm9yIGRhdGEgZGVwZW5kZW5jZSBhbmFseXNpcy4gIFRoZXNlIGxhcmdlIGxvb3BzIGFyZSBubworaGFuZGxlZCBieSB0aGUgb3B0aW1pemF0aW9ucyB1c2luZyBsb29wIGRhdGEgZGVwZW5kZW5jaWVzLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwMC4KKy5JUCAiXGZCbWF4LXZhcnRyYWNrLXNpemVcZlIiIDQKKy5JWCBJdGVtICJtYXgtdmFydHJhY2stc2l6ZSIKK1NldHMgYSBtYXhpbXVtIG51bWJlciBvZiBoYXNoIHRhYmxlIHNsb3RzIHRvIHVzZSBkdXJpbmcgdmFyaWFibGUKK3RyYWNraW5nIGRhdGFmbG93IGFuYWx5c2lzIG9mIGFueSBmdW5jdGlvbi4gIElmIHRoaXMgbGltaXQgaXMgZXhjZWVkZWQKK3dpdGggdmFyaWFibGUgdHJhY2tpbmcgYXQgYXNzaWdubWVudHMgZW5hYmxlZCwgYW5hbHlzaXMgZm9yIHRoYXQKK2Z1bmN0aW9uIGlzIHJldHJpZWQgd2l0aG91dCBpdCwgYWZ0ZXIgcmVtb3ZpbmcgYWxsIGRlYnVnIGluc25zIGZyb20KK3RoZSBmdW5jdGlvbi4gIElmIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBldmVuIHdpdGhvdXQgZGVidWcgaW5zbnMsIHZhcgordHJhY2tpbmcgYW5hbHlzaXMgaXMgY29tcGxldGVseSBkaXNhYmxlZCBmb3IgdGhlIGZ1bmN0aW9uLiAgU2V0dGluZwordGhlIHBhcmFtZXRlciB0byB6ZXJvIG1ha2VzIGl0IHVubGltaXRlZC4KKy5JUCAiXGZCbWF4LXZhcnRyYWNrLWV4cHItZGVwdGhcZlIiIDQKKy5JWCBJdGVtICJtYXgtdmFydHJhY2stZXhwci1kZXB0aCIKK1NldHMgYSBtYXhpbXVtIG51bWJlciBvZiByZWN1cnNpb24gbGV2ZWxzIHdoZW4gYXR0ZW1wdGluZyB0byBtYXAKK3ZhcmlhYmxlIG5hbWVzIG9yIGRlYnVnIHRlbXBvcmFyaWVzIHRvIHZhbHVlIGV4cHJlc3Npb25zLiAgVGhpcyB0cmFkZXMKK2NvbXBpbGF0aW9uIHRpbWUgZm9yIG1vcmUgY29tcGxldGUgZGVidWcgaW5mb3JtYXRpb24uICBJZiB0aGlzIGlzIHNldCB0b28KK2xvdywgdmFsdWUgZXhwcmVzc2lvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGFuZCBjb3VsZCBiZSByZXByZXNlbnRlZCBpbgorZGVidWcgaW5mb3JtYXRpb24gbWF5IGVuZCB1cCBub3QgYmVpbmcgdXNlZDsgc2V0dGluZyB0aGlzIGhpZ2hlciBtYXkKK2VuYWJsZSB0aGUgY29tcGlsZXIgdG8gZmluZCBtb3JlIGNvbXBsZXggZGVidWcgZXhwcmVzc2lvbnMsIGJ1dCBjb21waWxlCit0aW1lIGFuZCBtZW1vcnkgdXNlIG1heSBncm93LiAgVGhlIGRlZmF1bHQgaXMgMTIuCisuSVAgIlxmQm1pbi1ub25kZWJ1Zy1pbnNuLXVpZFxmUiIgNAorLklYIEl0ZW0gIm1pbi1ub25kZWJ1Zy1pbnNuLXVpZCIKK1VzZSB1aWRzIHN0YXJ0aW5nIGF0IHRoaXMgcGFyYW1ldGVyIGZvciBub25kZWJ1ZyBpbnNucy4gIFRoZSByYW5nZSBiZWxvdwordGhlIHBhcmFtZXRlciBpcyByZXNlcnZlZCBleGNsdXNpdmVseSBmb3IgZGVidWcgaW5zbnMgY3JlYXRlZCBieQorXCZcZkJcLWZ2YXJcLXRyYWNraW5nXC1hc3NpZ25tZW50c1xmUiwgYnV0IGRlYnVnIGluc25zIG1heSBnZXQKKyhub24tb3ZlcmxhcHBpbmcpIHVpZHMgYWJvdmUgaXQgaWYgdGhlIHJlc2VydmVkIHJhbmdlIGlzIGV4aGF1c3RlZC4KKy5JUCAiXGZCaXBhLXNyYS1wdHItZ3Jvd3RoLWZhY3RvclxmUiIgNAorLklYIEl0ZW0gImlwYS1zcmEtcHRyLWdyb3d0aC1mYWN0b3IiCitJUEEtU1JBIHJlcGxhY2VzIGEgcG9pbnRlciB0byBhbiBhZ2dyZWdhdGUgd2l0aCBvbmUgb3IgbW9yZSBuZXcKK3BhcmFtZXRlcnMgb25seSB3aGVuIHRoZWlyIGN1bXVsYXRpdmUgc2l6ZSBpcyBsZXNzIG9yIGVxdWFsIHRvCitcJlxmQmlwYS1zcmEtcHRyLWdyb3d0aC1mYWN0b3JcZlIgdGltZXMgdGhlIHNpemUgb2YgdGhlIG9yaWdpbmFsCitwb2ludGVyIHBhcmFtZXRlci4KKy5JUCAiXGZCdG0tbWF4LWFnZ3JlZ2F0ZS1zaXplXGZSIiA0CisuSVggSXRlbSAidG0tbWF4LWFnZ3JlZ2F0ZS1zaXplIgorV2hlbiBtYWtpbmcgY29waWVzIG9mIHRocmVhZC1sb2NhbCB2YXJpYWJsZXMgaW4gYSB0cmFuc2FjdGlvbiwgdGhpcworcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgc2l6ZSBpbiBieXRlcyBhZnRlciB3aGljaCB2YXJpYWJsZXMgYXJlCitzYXZlZCB3aXRoIHRoZSBsb2dnaW5nIGZ1bmN0aW9ucyBhcyBvcHBvc2VkIHRvIHNhdmUvcmVzdG9yZSBjb2RlCitzZXF1ZW5jZSBwYWlycy4gIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB3aGVuIHVzaW5nCitcJlxmQlwtZmdudVwtdG1cZlIuCisuSVAgIlxmQmdyYXBoaXRlLW1heC1uYi1zY29wLXBhcmFtc1xmUiIgNAorLklYIEl0ZW0gImdyYXBoaXRlLW1heC1uYi1zY29wLXBhcmFtcyIKK1RvIGF2b2lkIGV4cG9uZW50aWFsIGVmZmVjdHMgaW4gdGhlIEdyYXBoaXRlIGxvb3AgdHJhbnNmb3JtcywgdGhlCitudW1iZXIgb2YgcGFyYW1ldGVycyBpbiBhIFN0YXRpYyBDb250cm9sIFBhcnQgKFNDb1ApIGlzIGJvdW5kZWQuICBUaGUKK2RlZmF1bHQgdmFsdWUgaXMgMTAgcGFyYW1ldGVycy4gIEEgdmFyaWFibGUgd2hvc2UgdmFsdWUgaXMgdW5rbm93biBhdAorY29tcGlsYXRpb24gdGltZSBhbmQgZGVmaW5lZCBvdXRzaWRlIGEgU0NvUCBpcyBhIHBhcmFtZXRlciBvZiB0aGUgU0NvUC4KKy5JUCAiXGZCZ3JhcGhpdGUtbWF4LWJicy1wZXItZnVuY3Rpb25cZlIiIDQKKy5JWCBJdGVtICJncmFwaGl0ZS1tYXgtYmJzLXBlci1mdW5jdGlvbiIKK1RvIGF2b2lkIGV4cG9uZW50aWFsIGVmZmVjdHMgaW4gdGhlIGRldGVjdGlvbiBvZiBTQ29QcywgdGhlIHNpemUgb2YKK3RoZSBmdW5jdGlvbnMgYW5hbHl6ZWQgYnkgR3JhcGhpdGUgaXMgYm91bmRlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisxMDAgYmFzaWMgYmxvY2tzLgorLklQICJcZkJsb29wLWJsb2NrLXRpbGUtc2l6ZVxmUiIgNAorLklYIEl0ZW0gImxvb3AtYmxvY2stdGlsZS1zaXplIgorTG9vcCBibG9ja2luZyBvciBzdHJpcCBtaW5pbmcgdHJhbnNmb3JtcywgZW5hYmxlZCB3aXRoCitcJlxmQlwtZmxvb3BcLWJsb2NrXGZSIG9yIFxmQlwtZmxvb3BcLXN0cmlwXC1taW5lXGZSLCBzdHJpcCBtaW5lIGVhY2gKK2xvb3AgaW4gdGhlIGxvb3AgbmVzdCBieSBhIGdpdmVuIG51bWJlciBvZiBpdGVyYXRpb25zLiAgVGhlIHN0cmlwCitsZW5ndGggY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIFxmQmxvb3AtYmxvY2stdGlsZS1zaXplXGZSCitwYXJhbWV0ZXIuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MSBpdGVyYXRpb25zLgorLklQICJcZkJpcGEtY3AtdmFsdWUtbGlzdC1zaXplXGZSIiA0CisuSVggSXRlbSAiaXBhLWNwLXZhbHVlLWxpc3Qtc2l6ZSIKK0lQQS1DUCBhdHRlbXB0cyB0byB0cmFjayBhbGwgcG9zc2libGUgdmFsdWVzIGFuZCB0eXBlcyBwYXNzZWQgdG8gYSBmdW5jdGlvbidzCitwYXJhbWV0ZXIgaW4gb3JkZXIgdG8gcHJvcGFnYXRlIHRoZW0gYW5kIHBlcmZvcm0gZGV2aXJ0dWFsaXphdGlvbi4KK1wmXGZCaXBhLWNwLXZhbHVlLWxpc3Qtc2l6ZVxmUiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmFsdWVzIGFuZCB0eXBlcyBpdAorc3RvcmVzIHBlciBvbmUgZm9ybWFsIHBhcmFtZXRlciBvZiBhIGZ1bmN0aW9uLgorLklQICJcZkJsdG8tcGFydGl0aW9uc1xmUiIgNAorLklYIEl0ZW0gImx0by1wYXJ0aXRpb25zIgorU3BlY2lmeSBkZXNpcmVkIG51bWJlciBvZiBwYXJ0aXRpb25zIHByb2R1Y2VkIGR1cmluZyBccy0xV0hPUFJcczAgY29tcGlsYXRpb24uCitUaGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgc2hvdWxkIGV4Y2VlZCB0aGUgbnVtYmVyIG9mIENQVXMgdXNlZCBmb3IgY29tcGlsYXRpb24uCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzMi4KKy5JUCAiXGZCbHRvLW1pbnBhcnRpdGlvblxmUiIgNAorLklYIEl0ZW0gImx0by1taW5wYXJ0aXRpb24iCitTaXplIG9mIG1pbmltYWwgcGFydGl0aW9uIGZvciBccy0xV0hPUFJcczAgKGluIGVzdGltYXRlZCBpbnN0cnVjdGlvbnMpLgorVGhpcyBwcmV2ZW50cyBleHBlbnNlcyBvZiBzcGxpdHRpbmcgdmVyeSBzbWFsbCBwcm9ncmFtcyBpbnRvIHRvbyBtYW55CitwYXJ0aXRpb25zLgorLklQICJcZkJjeHgtbWF4LW5hbWVzcGFjZXMtZm9yLWRpYWdub3N0aWMtaGVscFxmUiIgNAorLklYIEl0ZW0gImN4eC1tYXgtbmFtZXNwYWNlcy1mb3ItZGlhZ25vc3RpYy1oZWxwIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIG5hbWVzcGFjZXMgdG8gY29uc3VsdCBmb3Igc3VnZ2VzdGlvbnMgd2hlbiBcKihDKworbmFtZSBsb29rdXAgZmFpbHMgZm9yIGFuIGlkZW50aWZpZXIuICBUaGUgZGVmYXVsdCBpcyAxMDAwLgorLklQICJcZkJzaW5rLWZyZXF1ZW5jeS10aHJlc2hvbGRcZlIiIDQKKy5JWCBJdGVtICJzaW5rLWZyZXF1ZW5jeS10aHJlc2hvbGQiCitUaGUgbWF4aW11bSByZWxhdGl2ZSBleGVjdXRpb24gZnJlcXVlbmN5IChpbiBwZXJjZW50cykgb2YgdGhlIHRhcmdldCBibG9jaworcmVsYXRpdmUgdG8gYSBzdGF0ZW1lbnQncyBvcmlnaW5hbCBibG9jayB0byBhbGxvdyBzdGF0ZW1lbnQgc2lua2luZyBvZiBhCitzdGF0ZW1lbnQuICBMYXJnZXIgbnVtYmVycyByZXN1bHQgaW4gbW9yZSBhZ2dyZXNzaXZlIHN0YXRlbWVudCBzaW5raW5nLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgNzUuICBBIHNtYWxsIHBvc2l0aXZlIGFkanVzdG1lbnQgaXMgYXBwbGllZCBmb3IKK3N0YXRlbWVudHMgd2l0aCBtZW1vcnkgb3BlcmFuZHMgYXMgdGhvc2UgYXJlIGV2ZW4gbW9yZSBwcm9maXRhYmxlIHNvIHNpbmsuCisuSVAgIlxmQm1heC1zdG9yZXMtdG8tc2lua1xmUiIgNAorLklYIEl0ZW0gIm1heC1zdG9yZXMtdG8tc2luayIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBjb25kaXRpb25hbCBzdG9yZXMgcGFpcmVzIHRoYXQgY2FuIGJlIHN1bmsuICBTZXQgdG8gMAoraWYgZWl0aGVyIHZlY3Rvcml6YXRpb24gKFxmQlwtZnRyZWVcLXZlY3Rvcml6ZVxmUikgb3IgaWYtY29udmVyc2lvbgorKFxmQlwtZnRyZWVcLWxvb3BcLWlmXC1jb252ZXJ0XGZSKSBpcyBkaXNhYmxlZC4gIFRoZSBkZWZhdWx0IGlzIDIuCisuSVAgIlxmQmFsbG93LWxvYWQtZGF0YS1yYWNlc1xmUiIgNAorLklYIEl0ZW0gImFsbG93LWxvYWQtZGF0YS1yYWNlcyIKK0FsbG93IG9wdGltaXplcnMgdG8gaW50cm9kdWNlIG5ldyBkYXRhIHJhY2VzIG9uIGxvYWRzLgorU2V0IHRvIDEgdG8gYWxsb3csIG90aGVyd2lzZSB0byAwLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0Cit1bmxlc3MgaW1wbGljaXRseSBzZXQgYnkgdGhlIFxmQlwtZm1lbW9yeVwtbW9kZWw9XGZSIG9wdGlvbi4KKy5JUCAiXGZCYWxsb3ctc3RvcmUtZGF0YS1yYWNlc1xmUiIgNAorLklYIEl0ZW0gImFsbG93LXN0b3JlLWRhdGEtcmFjZXMiCitBbGxvdyBvcHRpbWl6ZXJzIHRvIGludHJvZHVjZSBuZXcgZGF0YSByYWNlcyBvbiBzdG9yZXMuCitTZXQgdG8gMSB0byBhbGxvdywgb3RoZXJ3aXNlIHRvIDAuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK3VubGVzcyBpbXBsaWNpdGx5IHNldCBieSB0aGUgXGZCXC1mbWVtb3J5XC1tb2RlbD1cZlIgb3B0aW9uLgorLklQICJcZkJhbGxvdy1wYWNrZWQtbG9hZC1kYXRhLXJhY2VzXGZSIiA0CisuSVggSXRlbSAiYWxsb3ctcGFja2VkLWxvYWQtZGF0YS1yYWNlcyIKK0FsbG93IG9wdGltaXplcnMgdG8gaW50cm9kdWNlIG5ldyBkYXRhIHJhY2VzIG9uIHBhY2tlZCBkYXRhIGxvYWRzLgorU2V0IHRvIDEgdG8gYWxsb3csIG90aGVyd2lzZSB0byAwLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0Cit1bmxlc3MgaW1wbGljaXRseSBzZXQgYnkgdGhlIFxmQlwtZm1lbW9yeVwtbW9kZWw9XGZSIG9wdGlvbi4KKy5JUCAiXGZCYWxsb3ctcGFja2VkLXN0b3JlLWRhdGEtcmFjZXNcZlIiIDQKKy5JWCBJdGVtICJhbGxvdy1wYWNrZWQtc3RvcmUtZGF0YS1yYWNlcyIKK0FsbG93IG9wdGltaXplcnMgdG8gaW50cm9kdWNlIG5ldyBkYXRhIHJhY2VzIG9uIHBhY2tlZCBkYXRhIHN0b3Jlcy4KK1NldCB0byAxIHRvIGFsbG93LCBvdGhlcndpc2UgdG8gMC4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAordW5sZXNzIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSBcZkJcLWZtZW1vcnlcLW1vZGVsPVxmUiBvcHRpb24uCisuSVAgIlxmQmNhc2UtdmFsdWVzLXRocmVzaG9sZFxmUiIgNAorLklYIEl0ZW0gImNhc2UtdmFsdWVzLXRocmVzaG9sZCIKK1RoZSBzbWFsbGVzdCBudW1iZXIgb2YgZGlmZmVyZW50IHZhbHVlcyBmb3Igd2hpY2ggaXQgaXMgYmVzdCB0byB1c2UgYQoranVtcC10YWJsZSBpbnN0ZWFkIG9mIGEgdHJlZSBvZiBjb25kaXRpb25hbCBicmFuY2hlcy4gIElmIHRoZSB2YWx1ZSBpcworMCwgdXNlIHRoZSBkZWZhdWx0IGZvciB0aGUgbWFjaGluZS4gIFRoZSBkZWZhdWx0IGlzIDAuCisuSVAgIlxmQnRyZWUtcmVhc3NvYy13aWR0aFxmUiIgNAorLklYIEl0ZW0gInRyZWUtcmVhc3NvYy13aWR0aCIKK1NldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkIGluIHBhcmFsbGVsIGluCityZWFzc29jaWF0ZWQgdHJlZS4gVGhpcyBwYXJhbWV0ZXIgb3ZlcnJpZGVzIHRhcmdldCBkZXBlbmRlbnQKK2hldXJpc3RpY3MgdXNlZCBieSBkZWZhdWx0IGlmIGhhcyBub24gemVybyB2YWx1ZS4KKy5JUCAiXGZCc2NoZWQtcHJlc3N1cmUtYWxnb3JpdGhtXGZSIiA0CisuSVggSXRlbSAic2NoZWQtcHJlc3N1cmUtYWxnb3JpdGhtIgorQ2hvb3NlIGJldHdlZW4gdGhlIHR3byBhdmFpbGFibGUgaW1wbGVtZW50YXRpb25zIG9mCitcJlxmQlwtZnNjaGVkXC1wcmVzc3VyZVxmUi4gIEFsZ29yaXRobSAxIGlzIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgorYW5kIGlzIHRoZSBtb3JlIGxpa2VseSB0byBwcmV2ZW50IGluc3RydWN0aW9ucyBmcm9tIGJlaW5nIHJlb3JkZXJlZC4KK0FsZ29yaXRobSAyIHdhcyBkZXNpZ25lZCB0byBiZSBhIGNvbXByb21pc2UgYmV0d2VlbiB0aGUgcmVsYXRpdmVseQorY29uc2VydmF0aXZlIGFwcHJvYWNoIHRha2VuIGJ5IGFsZ29yaXRobSAxIGFuZCB0aGUgcmF0aGVyIGFnZ3Jlc3NpdmUKK2FwcHJvYWNoIHRha2VuIGJ5IHRoZSBkZWZhdWx0IHNjaGVkdWxlci4gIEl0IHJlbGllcyBtb3JlIGhlYXZpbHkgb24KK2hhdmluZyBhIHJlZ3VsYXIgcmVnaXN0ZXIgZmlsZSBhbmQgYWNjdXJhdGUgcmVnaXN0ZXIgcHJlc3N1cmUgY2xhc3Nlcy4KK1NlZSBcZkloYWlmYVwtc2NoZWQuY1xmUiBpbiB0aGUgXHMtMUdDQ1xzMCBzb3VyY2VzIGZvciBtb3JlIGRldGFpbHMuCisuU3AKK1RoZSBkZWZhdWx0IGNob2ljZSBkZXBlbmRzIG9uIHRoZSB0YXJnZXQuCisuSVAgIlxmQm1heC1zbHNyLWNhbmQtc2NhblxmUiIgNAorLklYIEl0ZW0gIm1heC1zbHNyLWNhbmQtc2NhbiIKK1NldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXhpc3RpbmcgY2FuZGlkYXRlcyB0aGF0IHdpbGwgYmUgY29uc2lkZXJlZCB3aGVuCitzZWVraW5nIGEgYmFzaXMgZm9yIGEgbmV3IHN0cmFpZ2h0LWxpbmUgc3RyZW5ndGggcmVkdWN0aW9uIGNhbmRpZGF0ZS4KKy5SRQorLlJTIDQKKy5SRQorLlNTICJPcHRpb25zIENvbnRyb2xsaW5nIHRoZSBQcmVwcm9jZXNzb3IiCisuSVggU3Vic2VjdGlvbiAiT3B0aW9ucyBDb250cm9sbGluZyB0aGUgUHJlcHJvY2Vzc29yIgorVGhlc2Ugb3B0aW9ucyBjb250cm9sIHRoZSBDIHByZXByb2Nlc3Nvciwgd2hpY2ggaXMgcnVuIG9uIGVhY2ggQyBzb3VyY2UKK2ZpbGUgYmVmb3JlIGFjdHVhbCBjb21waWxhdGlvbi4KKy5QUAorSWYgeW91IHVzZSB0aGUgXGZCXC1FXGZSIG9wdGlvbiwgbm90aGluZyBpcyBkb25lIGV4Y2VwdCBwcmVwcm9jZXNzaW5nLgorU29tZSBvZiB0aGVzZSBvcHRpb25zIG1ha2Ugc2Vuc2Ugb25seSB0b2dldGhlciB3aXRoIFxmQlwtRVxmUiBiZWNhdXNlCit0aGV5IGNhdXNlIHRoZSBwcmVwcm9jZXNzb3Igb3V0cHV0IHRvIGJlIHVuc3VpdGFibGUgZm9yIGFjdHVhbAorY29tcGlsYXRpb24uCisuSVAgIlxmQlwtV3AsXGZSXGZJb3B0aW9uXGZSIiA0CisuSVggSXRlbSAiLVdwLG9wdGlvbiIKK1lvdSBjYW4gdXNlIFxmQlwtV3AsXGZSXGZJb3B0aW9uXGZSIHRvIGJ5cGFzcyB0aGUgY29tcGlsZXIgZHJpdmVyCithbmQgcGFzcyBcZklvcHRpb25cZlIgZGlyZWN0bHkgdGhyb3VnaCB0byB0aGUgcHJlcHJvY2Vzc29yLiAgSWYKK1wmXGZJb3B0aW9uXGZSIGNvbnRhaW5zIGNvbW1hcywgaXQgaXMgc3BsaXQgaW50byBtdWx0aXBsZSBvcHRpb25zIGF0IHRoZQorY29tbWFzLiAgSG93ZXZlciwgbWFueSBvcHRpb25zIGFyZSBtb2RpZmllZCwgdHJhbnNsYXRlZCBvciBpbnRlcnByZXRlZAorYnkgdGhlIGNvbXBpbGVyIGRyaXZlciBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBwcmVwcm9jZXNzb3IsIGFuZAorXCZcZkJcLVdwXGZSIGZvcmNpYmx5IGJ5cGFzc2VzIHRoaXMgcGhhc2UuICBUaGUgcHJlcHJvY2Vzc29yJ3MgZGlyZWN0CitpbnRlcmZhY2UgaXMgdW5kb2N1bWVudGVkIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKK3lvdSBzaG91bGQgYXZvaWQgdXNpbmcgXGZCXC1XcFxmUiBhbmQgbGV0IHRoZSBkcml2ZXIgaGFuZGxlIHRoZQorb3B0aW9ucyBpbnN0ZWFkLgorLklQICJcZkJcLVhwcmVwcm9jZXNzb3JcZlIgXGZJb3B0aW9uXGZSIiA0CisuSVggSXRlbSAiLVhwcmVwcm9jZXNzb3Igb3B0aW9uIgorUGFzcyBcZklvcHRpb25cZlIgYXMgYW4gb3B0aW9uIHRvIHRoZSBwcmVwcm9jZXNzb3IuICBZb3UgY2FuIHVzZSB0aGlzIHRvCitzdXBwbHkgc3lzdGVtLXNwZWNpZmljIHByZXByb2Nlc3NvciBvcHRpb25zIHRoYXQgXHMtMUdDQ1xzMCBkb2VzIG5vdCAKK3JlY29nbml6ZS4KKy5TcAorSWYgeW91IHdhbnQgdG8gcGFzcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwgeW91IG11c3QgdXNlCitcJlxmQlwtWHByZXByb2Nlc3NvclxmUiB0d2ljZSwgb25jZSBmb3IgdGhlIG9wdGlvbiBhbmQgb25jZSBmb3IgdGhlIGFyZ3VtZW50LgorLklQICJcZkJcLW5vXC1pbnRlZ3JhdGVkXC1jcHBcZlIiIDQKKy5JWCBJdGVtICItbm8taW50ZWdyYXRlZC1jcHAiCitQZXJmb3JtIHByZXByb2Nlc3NpbmcgYXMgYSBzZXBhcmF0ZSBwYXNzIGJlZm9yZSBjb21waWxhdGlvbi4KK0J5IGRlZmF1bHQsIFxzLTFHQ0NcczAgcGVyZm9ybXMgcHJlcHJvY2Vzc2luZyBhcyBhbiBpbnRlZ3JhdGVkIHBhcnQgb2YKK2lucHV0IHRva2VuaXphdGlvbiBhbmQgcGFyc2luZy4KK0lmIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCB0aGUgYXBwcm9wcmlhdGUgbGFuZ3VhZ2UgZnJvbnQgZW5kCisoXGZCY2MxXGZSLCBcZkJjYzFwbHVzXGZSLCBvciBcZkJjYzFvYmpcZlIgZm9yIEMsIFwqKEMrLAorYW5kIE9iamVjdGl2ZS1DLCByZXNwZWN0aXZlbHkpIGlzIGluc3RlYWQgaW52b2tlZCB0d2ljZSwKK29uY2UgZm9yIHByZXByb2Nlc3Npbmcgb25seSBhbmQgb25jZSBmb3IgYWN0dWFsIGNvbXBpbGF0aW9uCitvZiB0aGUgcHJlcHJvY2Vzc2VkIGlucHV0LgorVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBcZkJcLUJcZlIgb3IKK1wmXGZCXC13cmFwcGVyXGZSIG9wdGlvbnMgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGUgcHJlcHJvY2Vzc29yIG9yCitwZXJmb3JtIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBvZiB0aGUgcHJvZ3JhbSBzb3VyY2UgYmV0d2Vlbgorbm9ybWFsIHByZXByb2Nlc3NpbmcgYW5kIGNvbXBpbGF0aW9uLgorLklQICJcZkJcLURcZlIgXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1EIG5hbWUiCitQcmVkZWZpbmUgXGZJbmFtZVxmUiBhcyBhIG1hY3JvLCB3aXRoIGRlZmluaXRpb24gXGYoQ1cxXGZSLgorLklQICJcZkJcLURcZlIgXGZJbmFtZVxmUlxmQj1cZlJcZklkZWZpbml0aW9uXGZSIiA0CisuSVggSXRlbSAiLUQgbmFtZT1kZWZpbml0aW9uIgorVGhlIGNvbnRlbnRzIG9mIFxmSWRlZmluaXRpb25cZlIgYXJlIHRva2VuaXplZCBhbmQgcHJvY2Vzc2VkIGFzIGlmCit0aGV5IGFwcGVhcmVkIGR1cmluZyB0cmFuc2xhdGlvbiBwaGFzZSB0aHJlZSBpbiBhIFxmQiNkZWZpbmVcZlIKK2RpcmVjdGl2ZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBkZWZpbml0aW9uIHdpbGwgYmUgdHJ1bmNhdGVkIGJ5CitlbWJlZGRlZCBuZXdsaW5lIGNoYXJhY3RlcnMuCisuU3AKK0lmIHlvdSBhcmUgaW52b2tpbmcgdGhlIHByZXByb2Nlc3NvciBmcm9tIGEgc2hlbGwgb3Igc2hlbGwtbGlrZQorcHJvZ3JhbSB5b3UgbWF5IG5lZWQgdG8gdXNlIHRoZSBzaGVsbCdzIHF1b3Rpbmcgc3ludGF4IHRvIHByb3RlY3QKK2NoYXJhY3RlcnMgc3VjaCBhcyBzcGFjZXMgdGhhdCBoYXZlIGEgbWVhbmluZyBpbiB0aGUgc2hlbGwgc3ludGF4LgorLlNwCitJZiB5b3Ugd2lzaCB0byBkZWZpbmUgYSBmdW5jdGlvbi1saWtlIG1hY3JvIG9uIHRoZSBjb21tYW5kIGxpbmUsIHdyaXRlCitpdHMgYXJndW1lbnQgbGlzdCB3aXRoIHN1cnJvdW5kaW5nIHBhcmVudGhlc2VzIGJlZm9yZSB0aGUgZXF1YWxzIHNpZ24KKyhpZiBhbnkpLiAgUGFyZW50aGVzZXMgYXJlIG1lYW5pbmdmdWwgdG8gbW9zdCBzaGVsbHMsIHNvIHlvdSB3aWxsIG5lZWQKK3RvIHF1b3RlIHRoZSBvcHRpb24uICBXaXRoIFxmQnNoXGZSIGFuZCBcZkJjc2hcZlIsCitcJlxmQlwtRCdcZlJcZkluYW1lXGZSXGZCKFxmUlxmSWFyZ3MuLi5cZlJcZkIpPVxmUlxmSWRlZmluaXRpb25cZlJcZkInXGZSIHdvcmtzLgorLlNwCitcJlxmQlwtRFxmUiBhbmQgXGZCXC1VXGZSIG9wdGlvbnMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgdGhleQorYXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuICBBbGwgXGZCXC1pbWFjcm9zXGZSIFxmSWZpbGVcZlIgYW5kCitcJlxmQlwtaW5jbHVkZVxmUiBcZklmaWxlXGZSIG9wdGlvbnMgYXJlIHByb2Nlc3NlZCBhZnRlciBhbGwKK1wmXGZCXC1EXGZSIGFuZCBcZkJcLVVcZlIgb3B0aW9ucy4KKy5JUCAiXGZCXC1VXGZSIFxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItVSBuYW1lIgorQ2FuY2VsIGFueSBwcmV2aW91cyBkZWZpbml0aW9uIG9mIFxmSW5hbWVcZlIsIGVpdGhlciBidWlsdCBpbiBvcgorcHJvdmlkZWQgd2l0aCBhIFxmQlwtRFxmUiBvcHRpb24uCisuSVAgIlxmQlwtdW5kZWZcZlIiIDQKKy5JWCBJdGVtICItdW5kZWYiCitEbyBub3QgcHJlZGVmaW5lIGFueSBzeXN0ZW0tc3BlY2lmaWMgb3IgR0NDLXNwZWNpZmljIG1hY3Jvcy4gIFRoZQorc3RhbmRhcmQgcHJlZGVmaW5lZCBtYWNyb3MgcmVtYWluIGRlZmluZWQuCisuSVAgIlxmQlwtSVxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItSSBkaXIiCitBZGQgdGhlIGRpcmVjdG9yeSBcZklkaXJcZlIgdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQKK2ZvciBoZWFkZXIgZmlsZXMuCitEaXJlY3RvcmllcyBuYW1lZCBieSBcZkJcLUlcZlIgYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgc3RhbmRhcmQKK3N5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzLiAgSWYgdGhlIGRpcmVjdG9yeSBcZklkaXJcZlIgaXMgYSBzdGFuZGFyZAorc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LCB0aGUgb3B0aW9uIGlzIGlnbm9yZWQgdG8gZW5zdXJlIHRoYXQgdGhlCitkZWZhdWx0IHNlYXJjaCBvcmRlciBmb3Igc3lzdGVtIGRpcmVjdG9yaWVzIGFuZCB0aGUgc3BlY2lhbCB0cmVhdG1lbnQKK29mIHN5c3RlbSBoZWFkZXJzIGFyZSBub3QgZGVmZWF0ZWQKK1wmLgorSWYgXGZJZGlyXGZSIGJlZ2lucyB3aXRoIFxmKENXXCooQ2A9XCooQydcZlIsIHRoZW4gdGhlIFxmKENXXCooQ2A9XCooQydcZlIgd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgXGZCXC1cLXN5c3Jvb3RcZlIgYW5kIFxmQlwtaXN5c3Jvb3RcZlIuCisuSVAgIlxmQlwtb1xmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLW8gZmlsZSIKK1dyaXRlIG91dHB1dCB0byBcZklmaWxlXGZSLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIFxmSWZpbGVcZlIKK2FzIHRoZSBzZWNvbmQgbm9uLW9wdGlvbiBhcmd1bWVudCB0byBcZkJjcHBcZlIuICBcZkJnY2NcZlIgaGFzIGEKK2RpZmZlcmVudCBpbnRlcnByZXRhdGlvbiBvZiBhIHNlY29uZCBub24tb3B0aW9uIGFyZ3VtZW50LCBzbyB5b3UgbXVzdAordXNlIFxmQlwtb1xmUiB0byBzcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZS4KKy5JUCAiXGZCXC1XYWxsXGZSIiA0CisuSVggSXRlbSAiLVdhbGwiCitUdXJucyBvbiBhbGwgb3B0aW9uYWwgd2FybmluZ3Mgd2hpY2ggYXJlIGRlc2lyYWJsZSBmb3Igbm9ybWFsIGNvZGUuCitBdCBwcmVzZW50IHRoaXMgaXMgXGZCXC1XY29tbWVudFxmUiwgXGZCXC1XdHJpZ3JhcGhzXGZSLAorXCZcZkJcLVdtdWx0aWNoYXJcZlIgYW5kIGEgd2FybmluZyBhYm91dCBpbnRlZ2VyIHByb21vdGlvbiBjYXVzaW5nIGEKK2NoYW5nZSBvZiBzaWduIGluIFxmKENXXCooQ2AjaWZcKihDJ1xmUiBleHByZXNzaW9ucy4gIE5vdGUgdGhhdCBtYW55IG9mIHRoZQorcHJlcHJvY2Vzc29yJ3Mgd2FybmluZ3MgYXJlIG9uIGJ5IGRlZmF1bHQgYW5kIGhhdmUgbm8gb3B0aW9ucyB0bworY29udHJvbCB0aGVtLgorLklQICJcZkJcLVdjb21tZW50XGZSIiA0CisuSVggSXRlbSAiLVdjb21tZW50IgorLlBEIDAKKy5JUCAiXGZCXC1XY29tbWVudHNcZlIiIDQKKy5JWCBJdGVtICItV2NvbW1lbnRzIgorLlBECitXYXJuIHdoZW5ldmVyIGEgY29tbWVudC1zdGFydCBzZXF1ZW5jZSBcZkIvKlxmUiBhcHBlYXJzIGluIGEgXGZCLypcZlIKK2NvbW1lbnQsIG9yIHdoZW5ldmVyIGEgYmFja3NsYXNoLW5ld2xpbmUgYXBwZWFycyBpbiBhIFxmQi8vXGZSIGNvbW1lbnQuCisoQm90aCBmb3JtcyBoYXZlIHRoZSBzYW1lIGVmZmVjdC4pCisuSVAgIlxmQlwtV3RyaWdyYXBoc1xmUiIgNAorLklYIEl0ZW0gIi1XdHJpZ3JhcGhzIgorTW9zdCB0cmlncmFwaHMgaW4gY29tbWVudHMgY2Fubm90IGFmZmVjdCB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbS4KK0hvd2V2ZXIsIGEgdHJpZ3JhcGggdGhhdCB3b3VsZCBmb3JtIGFuIGVzY2FwZWQgbmV3bGluZSAoXGZCPz8vXGZSIGF0Cit0aGUgZW5kIG9mIGEgbGluZSkgY2FuLCBieSBjaGFuZ2luZyB3aGVyZSB0aGUgY29tbWVudCBiZWdpbnMgb3IgZW5kcy4KK1RoZXJlZm9yZSwgb25seSB0cmlncmFwaHMgdGhhdCB3b3VsZCBmb3JtIGVzY2FwZWQgbmV3bGluZXMgcHJvZHVjZQord2FybmluZ3MgaW5zaWRlIGEgY29tbWVudC4KKy5TcAorVGhpcyBvcHRpb24gaXMgaW1wbGllZCBieSBcZkJcLVdhbGxcZlIuICBJZiBcZkJcLVdhbGxcZlIgaXMgbm90CitnaXZlbiwgdGhpcyBvcHRpb24gaXMgc3RpbGwgZW5hYmxlZCB1bmxlc3MgdHJpZ3JhcGhzIGFyZSBlbmFibGVkLiAgVG8KK2dldCB0cmlncmFwaCBjb252ZXJzaW9uIHdpdGhvdXQgd2FybmluZ3MsIGJ1dCBnZXQgdGhlIG90aGVyCitcJlxmQlwtV2FsbFxmUiB3YXJuaW5ncywgdXNlIFxmQlwtdHJpZ3JhcGhzIFwtV2FsbCBcLVdub1wtdHJpZ3JhcGhzXGZSLgorLklQICJcZkJcLVd0cmFkaXRpb25hbFxmUiIgNAorLklYIEl0ZW0gIi1XdHJhZGl0aW9uYWwiCitXYXJuIGFib3V0IGNlcnRhaW4gY29uc3RydWN0cyB0aGF0IGJlaGF2ZSBkaWZmZXJlbnRseSBpbiB0cmFkaXRpb25hbCBhbmQKK1wmXHMtMUlTT1xzMCBDLiAgQWxzbyB3YXJuIGFib3V0IFxzLTFJU09cczAgQyBjb25zdHJ1Y3RzIHRoYXQgaGF2ZSBubyB0cmFkaXRpb25hbCBDCitlcXVpdmFsZW50LCBhbmQgcHJvYmxlbWF0aWMgY29uc3RydWN0cyB3aGljaCBzaG91bGQgYmUgYXZvaWRlZC4KKy5JUCAiXGZCXC1XdW5kZWZcZlIiIDQKKy5JWCBJdGVtICItV3VuZGVmIgorV2FybiB3aGVuZXZlciBhbiBpZGVudGlmaWVyIHdoaWNoIGlzIG5vdCBhIG1hY3JvIGlzIGVuY291bnRlcmVkIGluIGFuCitcJlxmQiNpZlxmUiBkaXJlY3RpdmUsIG91dHNpZGUgb2YgXGZCZGVmaW5lZFxmUi4gIFN1Y2ggaWRlbnRpZmllcnMgYXJlCityZXBsYWNlZCB3aXRoIHplcm8uCisuSVAgIlxmQlwtV3VudXNlZFwtbWFjcm9zXGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtbWFjcm9zIgorV2FybiBhYm91dCBtYWNyb3MgZGVmaW5lZCBpbiB0aGUgbWFpbiBmaWxlIHRoYXQgYXJlIHVudXNlZC4gIEEgbWFjcm8KK2lzIFxmSXVzZWRcZlIgaWYgaXQgaXMgZXhwYW5kZWQgb3IgdGVzdGVkIGZvciBleGlzdGVuY2UgYXQgbGVhc3Qgb25jZS4KK1RoZSBwcmVwcm9jZXNzb3Igd2lsbCBhbHNvIHdhcm4gaWYgdGhlIG1hY3JvIGhhcyBub3QgYmVlbiB1c2VkIGF0IHRoZQordGltZSBpdCBpcyByZWRlZmluZWQgb3IgdW5kZWZpbmVkLgorLlNwCitCdWlsdC1pbiBtYWNyb3MsIG1hY3JvcyBkZWZpbmVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBtYWNyb3MKK2RlZmluZWQgaW4gaW5jbHVkZSBmaWxlcyBhcmUgbm90IHdhcm5lZCBhYm91dC4KKy5TcAorXCZcZklOb3RlOlxmUiBJZiBhIG1hY3JvIGlzIGFjdHVhbGx5IHVzZWQsIGJ1dCBvbmx5IHVzZWQgaW4gc2tpcHBlZAorY29uZGl0aW9uYWwgYmxvY2tzLCB0aGVuIFxzLTFDUFBcczAgd2lsbCByZXBvcnQgaXQgYXMgdW51c2VkLiAgVG8gYXZvaWQgdGhlCit3YXJuaW5nIGluIHN1Y2ggYSBjYXNlLCB5b3UgbWlnaHQgaW1wcm92ZSB0aGUgc2NvcGUgb2YgdGhlIG1hY3JvJ3MKK2RlZmluaXRpb24gYnksIGZvciBleGFtcGxlLCBtb3ZpbmcgaXQgaW50byB0aGUgZmlyc3Qgc2tpcHBlZCBibG9jay4KK0FsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBwcm92aWRlIGEgZHVtbXkgdXNlIHdpdGggc29tZXRoaW5nIGxpa2U6CisuU3AKKy5WYiAyCitcJiAgICAgICAgI2lmIGRlZmluZWQgdGhlX21hY3JvX2NhdXNpbmdfdGhlX3dhcm5pbmcKK1wmICAgICAgICAjZW5kaWYKKy5WZQorLklQICJcZkJcLVdlbmRpZlwtbGFiZWxzXGZSIiA0CisuSVggSXRlbSAiLVdlbmRpZi1sYWJlbHMiCitXYXJuIHdoZW5ldmVyIGFuIFxmQiNlbHNlXGZSIG9yIGFuIFxmQiNlbmRpZlxmUiBhcmUgZm9sbG93ZWQgYnkgdGV4dC4KK1RoaXMgdXN1YWxseSBoYXBwZW5zIGluIGNvZGUgb2YgdGhlIGZvcm0KKy5TcAorLlZiIDUKK1wmICAgICAgICAjaWYgRk9PCitcJiAgICAgICAgLi4uCitcJiAgICAgICAgI2Vsc2UgRk9PCitcJiAgICAgICAgLi4uCitcJiAgICAgICAgI2VuZGlmIEZPTworLlZlCisuU3AKK1RoZSBzZWNvbmQgYW5kIHRoaXJkIFxmKENXXCooQ2BGT09cKihDJ1xmUiBzaG91bGQgYmUgaW4gY29tbWVudHMsIGJ1dCBvZnRlbiBhcmUgbm90CitpbiBvbGRlciBwcm9ncmFtcy4gIFRoaXMgd2FybmluZyBpcyBvbiBieSBkZWZhdWx0LgorLklQICJcZkJcLVdlcnJvclxmUiIgNAorLklYIEl0ZW0gIi1XZXJyb3IiCitNYWtlIGFsbCB3YXJuaW5ncyBpbnRvIGhhcmQgZXJyb3JzLiAgU291cmNlIGNvZGUgd2hpY2ggdHJpZ2dlcnMgd2FybmluZ3MKK3dpbGwgYmUgcmVqZWN0ZWQuCisuSVAgIlxmQlwtV3N5c3RlbVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi1Xc3lzdGVtLWhlYWRlcnMiCitJc3N1ZSB3YXJuaW5ncyBmb3IgY29kZSBpbiBzeXN0ZW0gaGVhZGVycy4gIFRoZXNlIGFyZSBub3JtYWxseSB1bmhlbHBmdWwKK2luIGZpbmRpbmcgYnVncyBpbiB5b3VyIG93biBjb2RlLCB0aGVyZWZvcmUgc3VwcHJlc3NlZC4gIElmIHlvdSBhcmUKK3Jlc3BvbnNpYmxlIGZvciB0aGUgc3lzdGVtIGxpYnJhcnksIHlvdSBtYXkgd2FudCB0byBzZWUgdGhlbS4KKy5JUCAiXGZCXC13XGZSIiA0CisuSVggSXRlbSAiLXciCitTdXBwcmVzcyBhbGwgd2FybmluZ3MsIGluY2x1ZGluZyB0aG9zZSB3aGljaCBccy0xR05VXHMwIFxzLTFDUFBcczAgaXNzdWVzIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtcGVkYW50aWNcZlIiIDQKKy5JWCBJdGVtICItcGVkYW50aWMiCitJc3N1ZSBhbGwgdGhlIG1hbmRhdG9yeSBkaWFnbm9zdGljcyBsaXN0ZWQgaW4gdGhlIEMgc3RhbmRhcmQuICBTb21lIG9mCit0aGVtIGFyZSBsZWZ0IG91dCBieSBkZWZhdWx0LCBzaW5jZSB0aGV5IHRyaWdnZXIgZnJlcXVlbnRseSBvbiBoYXJtbGVzcworY29kZS4KKy5JUCAiXGZCXC1wZWRhbnRpY1wtZXJyb3JzXGZSIiA0CisuSVggSXRlbSAiLXBlZGFudGljLWVycm9ycyIKK0lzc3VlIGFsbCB0aGUgbWFuZGF0b3J5IGRpYWdub3N0aWNzLCBhbmQgbWFrZSBhbGwgbWFuZGF0b3J5IGRpYWdub3N0aWNzCitpbnRvIGVycm9ycy4gIFRoaXMgaW5jbHVkZXMgbWFuZGF0b3J5IGRpYWdub3N0aWNzIHRoYXQgXHMtMUdDQ1xzMCBpc3N1ZXMKK3dpdGhvdXQgXGZCXC1wZWRhbnRpY1xmUiBidXQgdHJlYXRzIGFzIHdhcm5pbmdzLgorLklQICJcZkJcLU1cZlIiIDQKKy5JWCBJdGVtICItTSIKK0luc3RlYWQgb2Ygb3V0cHV0dGluZyB0aGUgcmVzdWx0IG9mIHByZXByb2Nlc3NpbmcsIG91dHB1dCBhIHJ1bGUKK3N1aXRhYmxlIGZvciBcZkJtYWtlXGZSIGRlc2NyaWJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgbWFpbgorc291cmNlIGZpbGUuICBUaGUgcHJlcHJvY2Vzc29yIG91dHB1dHMgb25lIFxmQm1ha2VcZlIgcnVsZSBjb250YWluaW5nCit0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhhdCBzb3VyY2UgZmlsZSwgYSBjb2xvbiwgYW5kIHRoZSBuYW1lcyBvZiBhbGwKK3RoZSBpbmNsdWRlZCBmaWxlcywgaW5jbHVkaW5nIHRob3NlIGNvbWluZyBmcm9tIFxmQlwtaW5jbHVkZVxmUiBvcgorXCZcZkJcLWltYWNyb3NcZlIgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisuU3AKK1VubGVzcyBzcGVjaWZpZWQgZXhwbGljaXRseSAod2l0aCBcZkJcLU1UXGZSIG9yIFxmQlwtTVFcZlIpLCB0aGUKK29iamVjdCBmaWxlIG5hbWUgY29uc2lzdHMgb2YgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHdpdGggYW55CitzdWZmaXggcmVwbGFjZWQgd2l0aCBvYmplY3QgZmlsZSBzdWZmaXggYW5kIHdpdGggYW55IGxlYWRpbmcgZGlyZWN0b3J5CitwYXJ0cyByZW1vdmVkLiAgSWYgdGhlcmUgYXJlIG1hbnkgaW5jbHVkZWQgZmlsZXMgdGhlbiB0aGUgcnVsZSBpcworc3BsaXQgaW50byBzZXZlcmFsIGxpbmVzIHVzaW5nIFxmQlxlXGZSXC1uZXdsaW5lLiAgVGhlIHJ1bGUgaGFzIG5vCitjb21tYW5kcy4KKy5TcAorVGhpcyBvcHRpb24gZG9lcyBub3Qgc3VwcHJlc3MgdGhlIHByZXByb2Nlc3NvcidzIGRlYnVnIG91dHB1dCwgc3VjaCBhcworXCZcZkJcLWRNXGZSLiAgVG8gYXZvaWQgbWl4aW5nIHN1Y2ggZGVidWcgb3V0cHV0IHdpdGggdGhlIGRlcGVuZGVuY3kKK3J1bGVzIHlvdSBzaG91bGQgZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBkZXBlbmRlbmN5IG91dHB1dCBmaWxlIHdpdGgKK1wmXGZCXC1NRlxmUiwgb3IgdXNlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGxpa2UKK1wmXGZCXHMtMURFUEVOREVOQ0lFU19PVVRQVVRcczBcZlIuICBEZWJ1ZyBvdXRwdXQKK3dpbGwgc3RpbGwgYmUgc2VudCB0byB0aGUgcmVndWxhciBvdXRwdXQgc3RyZWFtIGFzIG5vcm1hbC4KKy5TcAorUGFzc2luZyBcZkJcLU1cZlIgdG8gdGhlIGRyaXZlciBpbXBsaWVzIFxmQlwtRVxmUiwgYW5kIHN1cHByZXNzZXMKK3dhcm5pbmdzIHdpdGggYW4gaW1wbGljaXQgXGZCXC13XGZSLgorLklQICJcZkJcLU1NXGZSIiA0CisuSVggSXRlbSAiLU1NIgorTGlrZSBcZkJcLU1cZlIgYnV0IGRvIG5vdCBtZW50aW9uIGhlYWRlciBmaWxlcyB0aGF0IGFyZSBmb3VuZCBpbgorc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllcywgbm9yIGhlYWRlciBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCwKK2RpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gc3VjaCBhIGhlYWRlci4KKy5TcAorVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGNob2ljZSBvZiBhbmdsZSBicmFja2V0cyBvciBkb3VibGUgcXVvdGVzIGluIGFuCitcJlxmQiNpbmNsdWRlXGZSIGRpcmVjdGl2ZSBkb2VzIG5vdCBpbiBpdHNlbGYgZGV0ZXJtaW5lIHdoZXRoZXIgdGhhdAoraGVhZGVyIHdpbGwgYXBwZWFyIGluIFxmQlwtTU1cZlIgZGVwZW5kZW5jeSBvdXRwdXQuICBUaGlzIGlzIGEKK3NsaWdodCBjaGFuZ2UgaW4gc2VtYW50aWNzIGZyb20gXHMtMUdDQ1xzMCB2ZXJzaW9ucyAzLjAgYW5kIGVhcmxpZXIuCisuSVAgIlxmQlwtTUZcZlIgXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1NRiBmaWxlIgorV2hlbiB1c2VkIHdpdGggXGZCXC1NXGZSIG9yIFxmQlwtTU1cZlIsIHNwZWNpZmllcyBhCitmaWxlIHRvIHdyaXRlIHRoZSBkZXBlbmRlbmNpZXMgdG8uICBJZiBubyBcZkJcLU1GXGZSIHN3aXRjaCBpcyBnaXZlbgordGhlIHByZXByb2Nlc3NvciBzZW5kcyB0aGUgcnVsZXMgdG8gdGhlIHNhbWUgcGxhY2UgaXQgd291bGQgaGF2ZSBzZW50CitwcmVwcm9jZXNzZWQgb3V0cHV0LgorLlNwCitXaGVuIHVzZWQgd2l0aCB0aGUgZHJpdmVyIG9wdGlvbnMgXGZCXC1NRFxmUiBvciBcZkJcLU1NRFxmUiwKK1wmXGZCXC1NRlxmUiBvdmVycmlkZXMgdGhlIGRlZmF1bHQgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZS4KKy5JUCAiXGZCXC1NR1xmUiIgNAorLklYIEl0ZW0gIi1NRyIKK0luIGNvbmp1bmN0aW9uIHdpdGggYW4gb3B0aW9uIHN1Y2ggYXMgXGZCXC1NXGZSIHJlcXVlc3RpbmcKK2RlcGVuZGVuY3kgZ2VuZXJhdGlvbiwgXGZCXC1NR1xmUiBhc3N1bWVzIG1pc3NpbmcgaGVhZGVyIGZpbGVzIGFyZQorZ2VuZXJhdGVkIGZpbGVzIGFuZCBhZGRzIHRoZW0gdG8gdGhlIGRlcGVuZGVuY3kgbGlzdCB3aXRob3V0IHJhaXNpbmcKK2FuIGVycm9yLiAgVGhlIGRlcGVuZGVuY3kgZmlsZW5hbWUgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUKK1wmXGYoQ1dcKihDYCNpbmNsdWRlXCooQydcZlIgZGlyZWN0aXZlIHdpdGhvdXQgcHJlcGVuZGluZyBhbnkgcGF0aC4gIFxmQlwtTUdcZlIKK2Fsc28gc3VwcHJlc3NlcyBwcmVwcm9jZXNzZWQgb3V0cHV0LCBhcyBhIG1pc3NpbmcgaGVhZGVyIGZpbGUgcmVuZGVycwordGhpcyB1c2VsZXNzLgorLlNwCitUaGlzIGZlYXR1cmUgaXMgdXNlZCBpbiBhdXRvbWF0aWMgdXBkYXRpbmcgb2YgbWFrZWZpbGVzLgorLklQICJcZkJcLU1QXGZSIiA0CisuSVggSXRlbSAiLU1QIgorVGhpcyBvcHRpb24gaW5zdHJ1Y3RzIFxzLTFDUFBcczAgdG8gYWRkIGEgcGhvbnkgdGFyZ2V0IGZvciBlYWNoIGRlcGVuZGVuY3kKK290aGVyIHRoYW4gdGhlIG1haW4gZmlsZSwgY2F1c2luZyBlYWNoIHRvIGRlcGVuZCBvbiBub3RoaW5nLiAgVGhlc2UKK2R1bW15IHJ1bGVzIHdvcmsgYXJvdW5kIGVycm9ycyBcZkJtYWtlXGZSIGdpdmVzIGlmIHlvdSByZW1vdmUgaGVhZGVyCitmaWxlcyB3aXRob3V0IHVwZGF0aW5nIHRoZSBcZklNYWtlZmlsZVxmUiB0byBtYXRjaC4KKy5TcAorVGhpcyBpcyB0eXBpY2FsIG91dHB1dDoKKy5TcAorLlZiIDEKK1wmICAgICAgICB0ZXN0Lm86IHRlc3QuYyB0ZXN0LmgKK1wmICAgICAgICAKK1wmICAgICAgICB0ZXN0Lmg6CisuVmUKKy5JUCAiXGZCXC1NVFxmUiBcZkl0YXJnZXRcZlIiIDQKKy5JWCBJdGVtICItTVQgdGFyZ2V0IgorQ2hhbmdlIHRoZSB0YXJnZXQgb2YgdGhlIHJ1bGUgZW1pdHRlZCBieSBkZXBlbmRlbmN5IGdlbmVyYXRpb24uICBCeQorZGVmYXVsdCBccy0xQ1BQXHMwIHRha2VzIHRoZSBuYW1lIG9mIHRoZSBtYWluIGlucHV0IGZpbGUsIGRlbGV0ZXMgYW55CitkaXJlY3RvcnkgY29tcG9uZW50cyBhbmQgYW55IGZpbGUgc3VmZml4IHN1Y2ggYXMgXGZCLmNcZlIsIGFuZAorYXBwZW5kcyB0aGUgcGxhdGZvcm0ncyB1c3VhbCBvYmplY3Qgc3VmZml4LiAgVGhlIHJlc3VsdCBpcyB0aGUgdGFyZ2V0LgorLlNwCitBbiBcZkJcLU1UXGZSIG9wdGlvbiB3aWxsIHNldCB0aGUgdGFyZ2V0IHRvIGJlIGV4YWN0bHkgdGhlIHN0cmluZyB5b3UKK3NwZWNpZnkuICBJZiB5b3Ugd2FudCBtdWx0aXBsZSB0YXJnZXRzLCB5b3UgY2FuIHNwZWNpZnkgdGhlbSBhcyBhIHNpbmdsZQorYXJndW1lbnQgdG8gXGZCXC1NVFxmUiwgb3IgdXNlIG11bHRpcGxlIFxmQlwtTVRcZlIgb3B0aW9ucy4KKy5TcAorRm9yIGV4YW1wbGUsIFxmQlwtTVRcICckKG9ianBmeClmb28ubydcZlIgbWlnaHQgZ2l2ZQorLlNwCisuVmIgMQorXCYgICAgICAgICQob2JqcGZ4KWZvby5vOiBmb28uYworLlZlCisuSVAgIlxmQlwtTVFcZlIgXGZJdGFyZ2V0XGZSIiA0CisuSVggSXRlbSAiLU1RIHRhcmdldCIKK1NhbWUgYXMgXGZCXC1NVFxmUiwgYnV0IGl0IHF1b3RlcyBhbnkgY2hhcmFjdGVycyB3aGljaCBhcmUgc3BlY2lhbCB0bworTWFrZS4gIFxmQlwtTVFcICckKG9ianBmeClmb28ubydcZlIgZ2l2ZXMKKy5TcAorLlZiIDEKK1wmICAgICAgICAkJChvYmpwZngpZm9vLm86IGZvby5jCisuVmUKKy5TcAorVGhlIGRlZmF1bHQgdGFyZ2V0IGlzIGF1dG9tYXRpY2FsbHkgcXVvdGVkLCBhcyBpZiBpdCB3ZXJlIGdpdmVuIHdpdGgKK1wmXGZCXC1NUVxmUi4KKy5JUCAiXGZCXC1NRFxmUiIgNAorLklYIEl0ZW0gIi1NRCIKK1wmXGZCXC1NRFxmUiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtTSBcLU1GXGZSIFxmSWZpbGVcZlIsIGV4Y2VwdCB0aGF0CitcJlxmQlwtRVxmUiBpcyBub3QgaW1wbGllZC4gIFRoZSBkcml2ZXIgZGV0ZXJtaW5lcyBcZklmaWxlXGZSIGJhc2VkIG9uCit3aGV0aGVyIGFuIFxmQlwtb1xmUiBvcHRpb24gaXMgZ2l2ZW4uICBJZiBpdCBpcywgdGhlIGRyaXZlciB1c2VzIGl0cworYXJndW1lbnQgYnV0IHdpdGggYSBzdWZmaXggb2YgXGZJLmRcZlIsIG90aGVyd2lzZSBpdCB0YWtlcyB0aGUgbmFtZQorb2YgdGhlIGlucHV0IGZpbGUsIHJlbW92ZXMgYW55IGRpcmVjdG9yeSBjb21wb25lbnRzIGFuZCBzdWZmaXgsIGFuZAorYXBwbGllcyBhIFxmSS5kXGZSIHN1ZmZpeC4KKy5TcAorSWYgXGZCXC1NRFxmUiBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggXGZCXC1FXGZSLCBhbnkKK1wmXGZCXC1vXGZSIHN3aXRjaCBpcyB1bmRlcnN0b29kIHRvIHNwZWNpZnkgdGhlIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGUsIGJ1dCBpZiB1c2VkIHdpdGhvdXQgXGZCXC1FXGZSLCBlYWNoIFxmQlwtb1xmUgoraXMgdW5kZXJzdG9vZCB0byBzcGVjaWZ5IGEgdGFyZ2V0IG9iamVjdCBmaWxlLgorLlNwCitTaW5jZSBcZkJcLUVcZlIgaXMgbm90IGltcGxpZWQsIFxmQlwtTURcZlIgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUKK2EgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZSBhcyBhIHNpZGUtZWZmZWN0IG9mIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLgorLklQICJcZkJcLU1NRFxmUiIgNAorLklYIEl0ZW0gIi1NTUQiCitMaWtlIFxmQlwtTURcZlIgZXhjZXB0IG1lbnRpb24gb25seSB1c2VyIGhlYWRlciBmaWxlcywgbm90IHN5c3RlbQoraGVhZGVyIGZpbGVzLgorLklQICJcZkJcLWZwY2hcLWRlcHNcZlIiIDQKKy5JWCBJdGVtICItZnBjaC1kZXBzIgorV2hlbiB1c2luZyBwcmVjb21waWxlZCBoZWFkZXJzLCB0aGlzIGZsYWcKK3dpbGwgY2F1c2UgdGhlIGRlcGVuZGVuY3ktb3V0cHV0IGZsYWdzIHRvIGFsc28gbGlzdCB0aGUgZmlsZXMgZnJvbSB0aGUKK3ByZWNvbXBpbGVkIGhlYWRlcidzIGRlcGVuZGVuY2llcy4gIElmIG5vdCBzcGVjaWZpZWQgb25seSB0aGUKK3ByZWNvbXBpbGVkIGhlYWRlciB3b3VsZCBiZSBsaXN0ZWQgYW5kIG5vdCB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVzZWQgdG8KK2NyZWF0ZSBpdCBiZWNhdXNlIHRob3NlIGZpbGVzIGFyZSBub3QgY29uc3VsdGVkIHdoZW4gYSBwcmVjb21waWxlZAoraGVhZGVyIGlzIHVzZWQuCisuSVAgIlxmQlwtZnBjaFwtcHJlcHJvY2Vzc1xmUiIgNAorLklYIEl0ZW0gIi1mcGNoLXByZXByb2Nlc3MiCitUaGlzIG9wdGlvbiBhbGxvd3MgdXNlIG9mIGEgcHJlY29tcGlsZWQgaGVhZGVyIHRvZ2V0aGVyIHdpdGggXGZCXC1FXGZSLiAgSXQgaW5zZXJ0cyBhIHNwZWNpYWwgXGYoQ1dcKihDYCNwcmFnbWFcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYCNwcmFnbWEgR0NDIHBjaF9wcmVwcm9jZXNzICJcZihDSWZpbGVuYW1lXGYoQ1ciXCooQydcZlIgaW4gdGhlIG91dHB1dCB0byBtYXJrCit0aGUgcGxhY2Ugd2hlcmUgdGhlIHByZWNvbXBpbGVkIGhlYWRlciB3YXMgZm91bmQsIGFuZCBpdHMgXGZJZmlsZW5hbWVcZlIuCitXaGVuIFxmQlwtZnByZXByb2Nlc3NlZFxmUiBpcyBpbiB1c2UsIFxzLTFHQ0NcczAgcmVjb2duaXplcyB0aGlzIFxmKENXXCooQ2AjcHJhZ21hXCooQydcZlIKK2FuZCBsb2FkcyB0aGUgXHMtMVBDSFxzMC4KKy5TcAorVGhpcyBvcHRpb24gaXMgb2ZmIGJ5IGRlZmF1bHQsIGJlY2F1c2UgdGhlIHJlc3VsdGluZyBwcmVwcm9jZXNzZWQgb3V0cHV0CitpcyBvbmx5IHJlYWxseSBzdWl0YWJsZSBhcyBpbnB1dCB0byBccy0xR0NDXHMwLiAgSXQgaXMgc3dpdGNoZWQgb24gYnkKK1wmXGZCXC1zYXZlXC10ZW1wc1xmUi4KKy5TcAorWW91IHNob3VsZCBub3Qgd3JpdGUgdGhpcyBcZihDV1wqKENgI3ByYWdtYVwqKEMnXGZSIGluIHlvdXIgb3duIGNvZGUsIGJ1dCBpdCBpcworc2FmZSB0byBlZGl0IHRoZSBmaWxlbmFtZSBpZiB0aGUgXHMtMVBDSFxzMCBmaWxlIGlzIGF2YWlsYWJsZSBpbiBhIGRpZmZlcmVudAorbG9jYXRpb24uICBUaGUgZmlsZW5hbWUgbWF5IGJlIGFic29sdXRlIG9yIGl0IG1heSBiZSByZWxhdGl2ZSB0byBccy0xR0NDXHMwJ3MKK2N1cnJlbnQgZGlyZWN0b3J5LgorLklQICJcZkJcLXggY1xmUiIgNAorLklYIEl0ZW0gIi14IGMiCisuUEQgMAorLklQICJcZkJcLXggYysrXGZSIiA0CisuSVggSXRlbSAiLXggYysrIgorLklQICJcZkJcLXggb2JqZWN0aXZlLWNcZlIiIDQKKy5JWCBJdGVtICIteCBvYmplY3RpdmUtYyIKKy5JUCAiXGZCXC14IGFzc2VtYmxlci13aXRoLWNwcFxmUiIgNAorLklYIEl0ZW0gIi14IGFzc2VtYmxlci13aXRoLWNwcCIKKy5QRAorU3BlY2lmeSB0aGUgc291cmNlIGxhbmd1YWdlOiBDLCBcKihDKywgT2JqZWN0aXZlLUMsIG9yIGFzc2VtYmx5LiAgVGhpcyBoYXMKK25vdGhpbmcgdG8gZG8gd2l0aCBzdGFuZGFyZHMgY29uZm9ybWFuY2Ugb3IgZXh0ZW5zaW9uczsgaXQgbWVyZWx5CitzZWxlY3RzIHdoaWNoIGJhc2Ugc3ludGF4IHRvIGV4cGVjdC4gIElmIHlvdSBnaXZlIG5vbmUgb2YgdGhlc2Ugb3B0aW9ucywKK2NwcCB3aWxsIGRlZHVjZSB0aGUgbGFuZ3VhZ2UgZnJvbSB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBzb3VyY2UgZmlsZToKK1wmXGZCLmNcZlIsIFxmQi5jY1xmUiwgXGZCLm1cZlIsIG9yIFxmQi5TXGZSLiAgU29tZSBvdGhlciBjb21tb24KK2V4dGVuc2lvbnMgZm9yIFwqKEMrIGFuZCBhc3NlbWJseSBhcmUgYWxzbyByZWNvZ25pemVkLiAgSWYgY3BwIGRvZXMgbm90CityZWNvZ25pemUgdGhlIGV4dGVuc2lvbiwgaXQgd2lsbCB0cmVhdCB0aGUgZmlsZSBhcyBDOyB0aGlzIGlzIHRoZSBtb3N0CitnZW5lcmljIG1vZGUuCisuU3AKK1wmXGZJTm90ZTpcZlIgUHJldmlvdXMgdmVyc2lvbnMgb2YgY3BwIGFjY2VwdGVkIGEgXGZCXC1sYW5nXGZSIG9wdGlvbgord2hpY2ggc2VsZWN0ZWQgYm90aCB0aGUgbGFuZ3VhZ2UgYW5kIHRoZSBzdGFuZGFyZHMgY29uZm9ybWFuY2UgbGV2ZWwuCitUaGlzIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLCBiZWNhdXNlIGl0IGNvbmZsaWN0cyB3aXRoIHRoZSBcZkJcLWxcZlIKK29wdGlvbi4KKy5JUCAiXGZCXC1zdGQ9XGZSXGZJc3RhbmRhcmRcZlIiIDQKKy5JWCBJdGVtICItc3RkPXN0YW5kYXJkIgorLlBEIDAKKy5JUCAiXGZCXC1hbnNpXGZSIiA0CisuSVggSXRlbSAiLWFuc2kiCisuUEQKK1NwZWNpZnkgdGhlIHN0YW5kYXJkIHRvIHdoaWNoIHRoZSBjb2RlIHNob3VsZCBjb25mb3JtLiAgQ3VycmVudGx5IFxzLTFDUFBcczAKK2tub3dzIGFib3V0IEMgYW5kIFwqKEMrIHN0YW5kYXJkczsgb3RoZXJzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorLlNwCitcJlxmSXN0YW5kYXJkXGZSCittYXkgYmUgb25lIG9mOgorLlJTIDQKKy5pZSBuIC5JUCAiIiJjOTAiIiIgNAorLmVsIC5JUCAiXGYoQ1djOTBcZlIiIDQKKy5JWCBJdGVtICJjOTAiCisuUEQgMAorLmllIG4gLklQICIiImM4OSIiIiA0CisuZWwgLklQICJcZihDV2M4OVxmUiIgNAorLklYIEl0ZW0gImM4OSIKKy5pZSBuIC5JUCAiIiJpc285ODk5OjE5OTAiIiIgNAorLmVsIC5JUCAiXGYoQ1dpc285ODk5OjE5OTBcZlIiIDQKKy5JWCBJdGVtICJpc285ODk5OjE5OTAiCisuUEQKK1RoZSBccy0xSVNPXHMwIEMgc3RhbmRhcmQgZnJvbSAxOTkwLiAgXGZCYzkwXGZSIGlzIHRoZSBjdXN0b21hcnkgc2hvcnRoYW5kIGZvcgordGhpcyB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZC4KKy5TcAorVGhlIFxmQlwtYW5zaVxmUiBvcHRpb24gaXMgZXF1aXZhbGVudCB0byBcZkJcLXN0ZD1jOTBcZlIuCisuaWUgbiAuSVAgIiIiaXNvOTg5OToxOTk0MDkiIiIgNAorLmVsIC5JUCAiXGYoQ1dpc285ODk5OjE5OTQwOVxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5NDA5IgorVGhlIDE5OTAgQyBzdGFuZGFyZCwgYXMgYW1lbmRlZCBpbiAxOTk0LgorLmllIG4gLklQICIiImlzbzk4OTk6MTk5OSIiIiA0CisuZWwgLklQICJcZihDV2lzbzk4OTk6MTk5OVxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5OSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiYzk5IiIiIDQKKy5lbCAuSVAgIlxmKENXYzk5XGZSIiA0CisuSVggSXRlbSAiYzk5IgorLmllIG4gLklQICIiImlzbzk4OTk6MTk5eCIiIiA0CisuZWwgLklQICJcZihDV2lzbzk4OTk6MTk5eFxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5eCIKKy5pZSBuIC5JUCAiIiJjOXgiIiIgNAorLmVsIC5JUCAiXGYoQ1djOXhcZlIiIDQKKy5JWCBJdGVtICJjOXgiCisuUEQKK1RoZSByZXZpc2VkIFxzLTFJU09cczAgQyBzdGFuZGFyZCwgcHVibGlzaGVkIGluIERlY2VtYmVyIDE5OTkuICBCZWZvcmUKK3B1YmxpY2F0aW9uLCB0aGlzIHdhcyBrbm93biBhcyBDOVguCisuaWUgbiAuSVAgIiIiaXNvOTg5OToyMDExIiIiIDQKKy5lbCAuSVAgIlxmKENXaXNvOTg5OToyMDExXGZSIiA0CisuSVggSXRlbSAiaXNvOTg5OToyMDExIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJjMTEiIiIgNAorLmVsIC5JUCAiXGYoQ1djMTFcZlIiIDQKKy5JWCBJdGVtICJjMTEiCisuaWUgbiAuSVAgIiIiYzF4IiIiIDQKKy5lbCAuSVAgIlxmKENXYzF4XGZSIiA0CisuSVggSXRlbSAiYzF4IgorLlBECitUaGUgcmV2aXNlZCBccy0xSVNPXHMwIEMgc3RhbmRhcmQsIHB1Ymxpc2hlZCBpbiBEZWNlbWJlciAyMDExLiAgQmVmb3JlCitwdWJsaWNhdGlvbiwgdGhpcyB3YXMga25vd24gYXMgQzFYLgorLmllIG4gLklQICIiImdudTkwIiIiIDQKKy5lbCAuSVAgIlxmKENXZ251OTBcZlIiIDQKKy5JWCBJdGVtICJnbnU5MCIKKy5QRCAwCisuaWUgbiAuSVAgIiIiZ251ODkiIiIgNAorLmVsIC5JUCAiXGYoQ1dnbnU4OVxmUiIgNAorLklYIEl0ZW0gImdudTg5IgorLlBECitUaGUgMTk5MCBDIHN0YW5kYXJkIHBsdXMgXHMtMUdOVVxzMCBleHRlbnNpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5pZSBuIC5JUCAiIiJnbnU5OSIiIiA0CisuZWwgLklQICJcZihDV2dudTk5XGZSIiA0CisuSVggSXRlbSAiZ251OTkiCisuUEQgMAorLmllIG4gLklQICIiImdudTl4IiIiIDQKKy5lbCAuSVAgIlxmKENXZ251OXhcZlIiIDQKKy5JWCBJdGVtICJnbnU5eCIKKy5QRAorVGhlIDE5OTkgQyBzdGFuZGFyZCBwbHVzIFxzLTFHTlVcczAgZXh0ZW5zaW9ucy4KKy5pZSBuIC5JUCAiIiJnbnUxMSIiIiA0CisuZWwgLklQICJcZihDV2dudTExXGZSIiA0CisuSVggSXRlbSAiZ251MTEiCisuUEQgMAorLmllIG4gLklQICIiImdudTF4IiIiIDQKKy5lbCAuSVAgIlxmKENXZ251MXhcZlIiIDQKKy5JWCBJdGVtICJnbnUxeCIKKy5QRAorVGhlIDIwMTEgQyBzdGFuZGFyZCBwbHVzIFxzLTFHTlVcczAgZXh0ZW5zaW9ucy4KKy5pZSBuIC5JUCAiIiJjKys5OCIiIiA0CisuZWwgLklQICJcZihDV2MrKzk4XGZSIiA0CisuSVggSXRlbSAiYysrOTgiCitUaGUgMTk5OCBccy0xSVNPXHMwIFwqKEMrIHN0YW5kYXJkIHBsdXMgYW1lbmRtZW50cy4KKy5pZSBuIC5JUCAiIiJnbnUrKzk4IiIiIDQKKy5lbCAuSVAgIlxmKENXZ251Kys5OFxmUiIgNAorLklYIEl0ZW0gImdudSsrOTgiCitUaGUgc2FtZSBhcyBcZkJcLXN0ZD1jKys5OFxmUiBwbHVzIFxzLTFHTlVcczAgZXh0ZW5zaW9ucy4gIFRoaXMgaXMgdGhlCitkZWZhdWx0IGZvciBcKihDKyBjb2RlLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtSVwtXGZSIiA0CisuSVggSXRlbSAiLUktIgorU3BsaXQgdGhlIGluY2x1ZGUgcGF0aC4gIEFueSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgd2l0aCBcZkJcLUlcZlIKK29wdGlvbnMgYmVmb3JlIFxmQlwtSVwtXGZSIGFyZSBzZWFyY2hlZCBvbmx5IGZvciBoZWFkZXJzIHJlcXVlc3RlZCB3aXRoCitcJlxmKENXXCooQ2AjaW5jbHVkZVwgIlxmKENJZmlsZVxmKENXIlwqKEMnXGZSOyB0aGV5IGFyZSBub3Qgc2VhcmNoZWQgZm9yCitcJlxmKENXXCooQ2AjaW5jbHVkZVwgPFxmKENJZmlsZVxmKENXPlwqKEMnXGZSLiAgSWYgYWRkaXRpb25hbCBkaXJlY3RvcmllcyBhcmUKK3NwZWNpZmllZCB3aXRoIFxmQlwtSVxmUiBvcHRpb25zIGFmdGVyIHRoZSBcZkJcLUlcLVxmUiwgdGhvc2UKK2RpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBmb3IgYWxsIFxmQiNpbmNsdWRlXGZSIGRpcmVjdGl2ZXMuCisuU3AKK0luIGFkZGl0aW9uLCBcZkJcLUlcLVxmUiBpbmhpYml0cyB0aGUgdXNlIG9mIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQKK2ZpbGUgZGlyZWN0b3J5IGFzIHRoZSBmaXJzdCBzZWFyY2ggZGlyZWN0b3J5IGZvciBcZihDV1wqKENgI2luY2x1ZGVcICJcZihDSWZpbGVcZihDVyJcKihDJ1xmUi4KK1RoaXMgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCisuSVAgIlxmQlwtbm9zdGRpbmNcZlIiIDQKKy5JWCBJdGVtICItbm9zdGRpbmMiCitEbyBub3Qgc2VhcmNoIHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMgZm9yIGhlYWRlciBmaWxlcy4KK09ubHkgdGhlIGRpcmVjdG9yaWVzIHlvdSBoYXZlIHNwZWNpZmllZCB3aXRoIFxmQlwtSVxmUiBvcHRpb25zCisoYW5kIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgZmlsZSwgaWYgYXBwcm9wcmlhdGUpIGFyZSBzZWFyY2hlZC4KKy5JUCAiXGZCXC1ub3N0ZGluYysrXGZSIiA0CisuSVggSXRlbSAiLW5vc3RkaW5jKysiCitEbyBub3Qgc2VhcmNoIGZvciBoZWFkZXIgZmlsZXMgaW4gdGhlIFwqKEMrXC1zcGVjaWZpYyBzdGFuZGFyZCBkaXJlY3RvcmllcywKK2J1dCBkbyBzdGlsbCBzZWFyY2ggdGhlIG90aGVyIHN0YW5kYXJkIGRpcmVjdG9yaWVzLiAgKFRoaXMgb3B0aW9uIGlzCit1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIFwqKEMrIGxpYnJhcnkuKQorLklQICJcZkJcLWluY2x1ZGVcZlIgXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1pbmNsdWRlIGZpbGUiCitQcm9jZXNzIFxmSWZpbGVcZlIgYXMgaWYgXGYoQ1dcKihDYCNpbmNsdWRlICJmaWxlIlwqKEMnXGZSIGFwcGVhcmVkIGFzIHRoZSBmaXJzdAorbGluZSBvZiB0aGUgcHJpbWFyeSBzb3VyY2UgZmlsZS4gIEhvd2V2ZXIsIHRoZSBmaXJzdCBkaXJlY3Rvcnkgc2VhcmNoZWQKK2ZvciBcZklmaWxlXGZSIGlzIHRoZSBwcmVwcm9jZXNzb3IncyB3b3JraW5nIGRpcmVjdG9yeSBcZklpbnN0ZWFkIG9mXGZSCit0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG1haW4gc291cmNlIGZpbGUuICBJZiBub3QgZm91bmQgdGhlcmUsIGl0CitpcyBzZWFyY2hlZCBmb3IgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgXGYoQ1dcKihDYCNpbmNsdWRlICIuLi4iXCooQydcZlIgc2VhcmNoCitjaGFpbiBhcyBub3JtYWwuCisuU3AKK0lmIG11bHRpcGxlIFxmQlwtaW5jbHVkZVxmUiBvcHRpb25zIGFyZSBnaXZlbiwgdGhlIGZpbGVzIGFyZSBpbmNsdWRlZAoraW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIG9uIHRoZSBjb21tYW5kIGxpbmUuCisuSVAgIlxmQlwtaW1hY3Jvc1xmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLWltYWNyb3MgZmlsZSIKK0V4YWN0bHkgbGlrZSBcZkJcLWluY2x1ZGVcZlIsIGV4Y2VwdCB0aGF0IGFueSBvdXRwdXQgcHJvZHVjZWQgYnkKK3NjYW5uaW5nIFxmSWZpbGVcZlIgaXMgdGhyb3duIGF3YXkuICBNYWNyb3MgaXQgZGVmaW5lcyByZW1haW4gZGVmaW5lZC4KK1RoaXMgYWxsb3dzIHlvdSB0byBhY3F1aXJlIGFsbCB0aGUgbWFjcm9zIGZyb20gYSBoZWFkZXIgd2l0aG91dCBhbHNvCitwcm9jZXNzaW5nIGl0cyBkZWNsYXJhdGlvbnMuCisuU3AKK0FsbCBmaWxlcyBzcGVjaWZpZWQgYnkgXGZCXC1pbWFjcm9zXGZSIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGFsbCBmaWxlcworc3BlY2lmaWVkIGJ5IFxmQlwtaW5jbHVkZVxmUi4KKy5JUCAiXGZCXC1pZGlyYWZ0ZXJcZlIgXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWlkaXJhZnRlciBkaXIiCitTZWFyY2ggXGZJZGlyXGZSIGZvciBoZWFkZXIgZmlsZXMsIGJ1dCBkbyBpdCBcZklhZnRlclxmUiBhbGwKK2RpcmVjdG9yaWVzIHNwZWNpZmllZCB3aXRoIFxmQlwtSVxmUiBhbmQgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcworaGF2ZSBiZWVuIGV4aGF1c3RlZC4gIFxmSWRpclxmUiBpcyB0cmVhdGVkIGFzIGEgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LgorSWYgXGZJZGlyXGZSIGJlZ2lucyB3aXRoIFxmKENXXCooQ2A9XCooQydcZlIsIHRoZW4gdGhlIFxmKENXXCooQ2A9XCooQydcZlIgd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgXGZCXC1cLXN5c3Jvb3RcZlIgYW5kIFxmQlwtaXN5c3Jvb3RcZlIuCisuSVAgIlxmQlwtaXByZWZpeFxmUiBcZklwcmVmaXhcZlIiIDQKKy5JWCBJdGVtICItaXByZWZpeCBwcmVmaXgiCitTcGVjaWZ5IFxmSXByZWZpeFxmUiBhcyB0aGUgcHJlZml4IGZvciBzdWJzZXF1ZW50IFxmQlwtaXdpdGhwcmVmaXhcZlIKK29wdGlvbnMuICBJZiB0aGUgcHJlZml4IHJlcHJlc2VudHMgYSBkaXJlY3RvcnksIHlvdSBzaG91bGQgaW5jbHVkZSB0aGUKK2ZpbmFsIFxmQi9cZlIuCisuSVAgIlxmQlwtaXdpdGhwcmVmaXhcZlIgXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWl3aXRocHJlZml4IGRpciIKKy5QRCAwCisuSVAgIlxmQlwtaXdpdGhwcmVmaXhiZWZvcmVcZlIgXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWl3aXRocHJlZml4YmVmb3JlIGRpciIKKy5QRAorQXBwZW5kIFxmSWRpclxmUiB0byB0aGUgcHJlZml4IHNwZWNpZmllZCBwcmV2aW91c2x5IHdpdGgKK1wmXGZCXC1pcHJlZml4XGZSLCBhbmQgYWRkIHRoZSByZXN1bHRpbmcgZGlyZWN0b3J5IHRvIHRoZSBpbmNsdWRlIHNlYXJjaAorcGF0aC4gIFxmQlwtaXdpdGhwcmVmaXhiZWZvcmVcZlIgcHV0cyBpdCBpbiB0aGUgc2FtZSBwbGFjZSBcZkJcLUlcZlIKK3dvdWxkOyBcZkJcLWl3aXRocHJlZml4XGZSIHB1dHMgaXQgd2hlcmUgXGZCXC1pZGlyYWZ0ZXJcZlIgd291bGQuCisuSVAgIlxmQlwtaXN5c3Jvb3RcZlIgXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWlzeXNyb290IGRpciIKK1RoaXMgb3B0aW9uIGlzIGxpa2UgdGhlIFxmQlwtXC1zeXNyb290XGZSIG9wdGlvbiwgYnV0IGFwcGxpZXMgb25seSB0bworaGVhZGVyIGZpbGVzIChleGNlcHQgZm9yIERhcndpbiB0YXJnZXRzLCB3aGVyZSBpdCBhcHBsaWVzIHRvIGJvdGggaGVhZGVyCitmaWxlcyBhbmQgbGlicmFyaWVzKS4gIFNlZSB0aGUgXGZCXC1cLXN5c3Jvb3RcZlIgb3B0aW9uIGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKy5JUCAiXGZCXC1pbXVsdGlsaWJcZlIgXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWltdWx0aWxpYiBkaXIiCitVc2UgXGZJZGlyXGZSIGFzIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZwordGFyZ2V0LXNwZWNpZmljIFwqKEMrIGhlYWRlcnMuCisuSVAgIlxmQlwtaXN5c3RlbVxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXN5c3RlbSBkaXIiCitTZWFyY2ggXGZJZGlyXGZSIGZvciBoZWFkZXIgZmlsZXMsIGFmdGVyIGFsbCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkKK1wmXGZCXC1JXGZSIGJ1dCBiZWZvcmUgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4gIE1hcmsgaXQKK2FzIGEgc3lzdGVtIGRpcmVjdG9yeSwgc28gdGhhdCBpdCBnZXRzIHRoZSBzYW1lIHNwZWNpYWwgdHJlYXRtZW50IGFzCitpcyBhcHBsaWVkIHRvIHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMuCitJZiBcZklkaXJcZlIgYmVnaW5zIHdpdGggXGYoQ1dcKihDYD1cKihDJ1xmUiwgdGhlbiB0aGUgXGYoQ1dcKihDYD1cKihDJ1xmUiB3aWxsIGJlIHJlcGxhY2VkCitieSB0aGUgc3lzcm9vdCBwcmVmaXg7IHNlZSBcZkJcLVwtc3lzcm9vdFxmUiBhbmQgXGZCXC1pc3lzcm9vdFxmUi4KKy5JUCAiXGZCXC1pcXVvdGVcZlIgXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWlxdW90ZSBkaXIiCitTZWFyY2ggXGZJZGlyXGZSIG9ubHkgZm9yIGhlYWRlciBmaWxlcyByZXF1ZXN0ZWQgd2l0aAorXCZcZihDV1wqKENgI2luY2x1ZGVcICJcZihDSWZpbGVcZihDVyJcKihDJ1xmUjsgdGhleSBhcmUgbm90IHNlYXJjaGVkIGZvcgorXCZcZihDV1wqKENgI2luY2x1ZGVcIDxcZihDSWZpbGVcZihDVz5cKihDJ1xmUiwgYmVmb3JlIGFsbCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkKK1wmXGZCXC1JXGZSIGFuZCBiZWZvcmUgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4KK0lmIFxmSWRpclxmUiBiZWdpbnMgd2l0aCBcZihDV1wqKENgPVwqKEMnXGZSLCB0aGVuIHRoZSBcZihDV1wqKENgPVwqKEMnXGZSIHdpbGwgYmUgcmVwbGFjZWQKK2J5IHRoZSBzeXNyb290IHByZWZpeDsgc2VlIFxmQlwtXC1zeXNyb290XGZSIGFuZCBcZkJcLWlzeXNyb290XGZSLgorLklQICJcZkJcLWZkaXJlY3RpdmVzXC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLWZkaXJlY3RpdmVzLW9ubHkiCitXaGVuIHByZXByb2Nlc3NpbmcsIGhhbmRsZSBkaXJlY3RpdmVzLCBidXQgZG8gbm90IGV4cGFuZCBtYWNyb3MuCisuU3AKK1RoZSBvcHRpb24ncyBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBcZkJcLUVcZlIgYW5kIFxmQlwtZnByZXByb2Nlc3NlZFxmUgorb3B0aW9ucy4KKy5TcAorV2l0aCBcZkJcLUVcZlIsIHByZXByb2Nlc3NpbmcgaXMgbGltaXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgZGlyZWN0aXZlcworc3VjaCBhcyBcZihDV1wqKENgI2RlZmluZVwqKEMnXGZSLCBcZihDV1wqKENgI2lmZGVmXCooQydcZlIsIGFuZCBcZihDV1wqKENgI2Vycm9yXCooQydcZlIuICBPdGhlcgorcHJlcHJvY2Vzc29yIG9wZXJhdGlvbnMsIHN1Y2ggYXMgbWFjcm8gZXhwYW5zaW9uIGFuZCB0cmlncmFwaAorY29udmVyc2lvbiBhcmUgbm90IHBlcmZvcm1lZC4gIEluIGFkZGl0aW9uLCB0aGUgXGZCXC1kRFxmUiBvcHRpb24gaXMKK2ltcGxpY2l0bHkgZW5hYmxlZC4KKy5TcAorV2l0aCBcZkJcLWZwcmVwcm9jZXNzZWRcZlIsIHByZWRlZmluaXRpb24gb2YgY29tbWFuZCBsaW5lIGFuZCBtb3N0CitidWlsdGluIG1hY3JvcyBpcyBkaXNhYmxlZC4gIE1hY3JvcyBzdWNoIGFzIFxmKENXXCooQ2BfXHxfTElORV9cfF9cKihDJ1xmUiwgd2hpY2ggYXJlCitjb250ZXh0dWFsbHkgZGVwZW5kZW50LCBhcmUgaGFuZGxlZCBub3JtYWxseS4gIFRoaXMgZW5hYmxlcyBjb21waWxhdGlvbiBvZgorZmlsZXMgcHJldmlvdXNseSBwcmVwcm9jZXNzZWQgd2l0aCBcZihDV1wqKENgXC1FIFwtZmRpcmVjdGl2ZXNcLW9ubHlcKihDJ1xmUi4KKy5TcAorV2l0aCBib3RoIFxmQlwtRVxmUiBhbmQgXGZCXC1mcHJlcHJvY2Vzc2VkXGZSLCB0aGUgcnVsZXMgZm9yCitcJlxmQlwtZnByZXByb2Nlc3NlZFxmUiB0YWtlIHByZWNlZGVuY2UuICBUaGlzIGVuYWJsZXMgZnVsbCBwcmVwcm9jZXNzaW5nIG9mCitmaWxlcyBwcmV2aW91c2x5IHByZXByb2Nlc3NlZCB3aXRoIFxmKENXXCooQ2BcLUUgXC1mZGlyZWN0aXZlc1wtb25seVwqKEMnXGZSLgorLklQICJcZkJcLWZkb2xsYXJzXC1pblwtaWRlbnRpZmllcnNcZlIiIDQKKy5JWCBJdGVtICItZmRvbGxhcnMtaW4taWRlbnRpZmllcnMiCitBY2NlcHQgXGZCJFxmUiBpbiBpZGVudGlmaWVycy4KKy5JUCAiXGZCXC1mZXh0ZW5kZWRcLWlkZW50aWZpZXJzXGZSIiA0CisuSVggSXRlbSAiLWZleHRlbmRlZC1pZGVudGlmaWVycyIKK0FjY2VwdCB1bml2ZXJzYWwgY2hhcmFjdGVyIG5hbWVzIGluIGlkZW50aWZpZXJzLiAgVGhpcyBvcHRpb24gaXMKK2V4cGVyaW1lbnRhbDsgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBccy0xR0NDXHMwLCBpdCB3aWxsIGJlIGVuYWJsZWQgYnkKK2RlZmF1bHQgZm9yIEM5OSBhbmQgXCooQysuCisuSVAgIlxmQlwtZm5vXC1jYW5vbmljYWxcLXN5c3RlbVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tY2Fub25pY2FsLXN5c3RlbS1oZWFkZXJzIgorV2hlbiBwcmVwcm9jZXNzaW5nLCBkbyBub3Qgc2hvcnRlbiBzeXN0ZW0gaGVhZGVyIHBhdGhzIHdpdGggY2Fub25pY2FsaXphdGlvbi4KKy5JUCAiXGZCXC1mcHJlcHJvY2Vzc2VkXGZSIiA0CisuSVggSXRlbSAiLWZwcmVwcm9jZXNzZWQiCitJbmRpY2F0ZSB0byB0aGUgcHJlcHJvY2Vzc29yIHRoYXQgdGhlIGlucHV0IGZpbGUgaGFzIGFscmVhZHkgYmVlbgorcHJlcHJvY2Vzc2VkLiAgVGhpcyBzdXBwcmVzc2VzIHRoaW5ncyBsaWtlIG1hY3JvIGV4cGFuc2lvbiwgdHJpZ3JhcGgKK2NvbnZlcnNpb24sIGVzY2FwZWQgbmV3bGluZSBzcGxpY2luZywgYW5kIHByb2Nlc3Npbmcgb2YgbW9zdCBkaXJlY3RpdmVzLgorVGhlIHByZXByb2Nlc3NvciBzdGlsbCByZWNvZ25pemVzIGFuZCByZW1vdmVzIGNvbW1lbnRzLCBzbyB0aGF0IHlvdSBjYW4KK3Bhc3MgYSBmaWxlIHByZXByb2Nlc3NlZCB3aXRoIFxmQlwtQ1xmUiB0byB0aGUgY29tcGlsZXIgd2l0aG91dAorcHJvYmxlbXMuICBJbiB0aGlzIG1vZGUgdGhlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29yIGlzIGxpdHRsZSBtb3JlIHRoYW4KK2EgdG9rZW5pemVyIGZvciB0aGUgZnJvbnQgZW5kcy4KKy5TcAorXCZcZkJcLWZwcmVwcm9jZXNzZWRcZlIgaXMgaW1wbGljaXQgaWYgdGhlIGlucHV0IGZpbGUgaGFzIG9uZSBvZiB0aGUKK2V4dGVuc2lvbnMgXGZCLmlcZlIsIFxmQi5paVxmUiBvciBcZkIubWlcZlIuICBUaGVzZSBhcmUgdGhlCitleHRlbnNpb25zIHRoYXQgXHMtMUdDQ1xzMCB1c2VzIGZvciBwcmVwcm9jZXNzZWQgZmlsZXMgY3JlYXRlZCBieQorXCZcZkJcLXNhdmVcLXRlbXBzXGZSLgorLklQICJcZkJcLWZ0YWJzdG9wPVxmUlxmSXdpZHRoXGZSIiA0CisuSVggSXRlbSAiLWZ0YWJzdG9wPXdpZHRoIgorU2V0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRhYiBzdG9wcy4gIFRoaXMgaGVscHMgdGhlIHByZXByb2Nlc3NvciByZXBvcnQKK2NvcnJlY3QgY29sdW1uIG51bWJlcnMgaW4gd2FybmluZ3Mgb3IgZXJyb3JzLCBldmVuIGlmIHRhYnMgYXBwZWFyIG9uIHRoZQorbGluZS4gIElmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gMSBvciBncmVhdGVyIHRoYW4gMTAwLCB0aGUgb3B0aW9uIGlzCitpZ25vcmVkLiAgVGhlIGRlZmF1bHQgaXMgOC4KKy5JUCAiXGZCXC1mZGVidWdcLWNwcFxmUiIgNAorLklYIEl0ZW0gIi1mZGVidWctY3BwIgorVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBccy0xR0NDXHMwLiAgV2hlbiB1c2VkIHdpdGgKK1wmXGZCXC1FXGZSLCBkdW1wcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgbG9jYXRpb24gbWFwcy4gIEV2ZXJ5Cit0b2tlbiBpbiB0aGUgb3V0cHV0IGlzIHByZWNlZGVkIGJ5IHRoZSBkdW1wIG9mIHRoZSBtYXAgaXRzIGxvY2F0aW9uCitiZWxvbmdzIHRvLiAgVGhlIGR1bXAgb2YgdGhlIG1hcCBob2xkaW5nIHRoZSBsb2NhdGlvbiBvZiBhIHRva2VuIHdvdWxkCitiZToKKy5TcAorLlZiIDEKK1wmICAgICAgICB7IlAiOkY8L2ZpbGUvcGF0aD47IkYiOkY8L2luY2x1ZGVyL3BhdGg+OyJMIjo8bGluZV9udW0+OyJDIjo8Y29sX251bT47IlMiOjxzeXN0ZW1faGVhZGVyX3A+OyJNIjo8bWFwX2FkZHJlc3M+OyJFIjo8bWFjcm9fZXhwYW5zaW9uX3A+LCJsb2MiOjxsb2NhdGlvbj59CisuVmUKKy5TcAorV2hlbiB1c2VkIHdpdGhvdXQgXGZCXC1FXGZSLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorLklQICJcZkJcLWZ0cmFja1wtbWFjcm9cLWV4cGFuc2lvblxmUltcZkI9XGZSXGZJbGV2ZWxcZlJdIiA0CisuSVggSXRlbSAiLWZ0cmFjay1tYWNyby1leHBhbnNpb25bPWxldmVsXSIKK1RyYWNrIGxvY2F0aW9ucyBvZiB0b2tlbnMgYWNyb3NzIG1hY3JvIGV4cGFuc2lvbnMuIFRoaXMgYWxsb3dzIHRoZQorY29tcGlsZXIgdG8gZW1pdCBkaWFnbm9zdGljIGFib3V0IHRoZSBjdXJyZW50IG1hY3JvIGV4cGFuc2lvbiBzdGFjaword2hlbiBhIGNvbXBpbGF0aW9uIGVycm9yIG9jY3VycyBpbiBhIG1hY3JvIGV4cGFuc2lvbi4gVXNpbmcgdGhpcworb3B0aW9uIG1ha2VzIHRoZSBwcmVwcm9jZXNzb3IgYW5kIHRoZSBjb21waWxlciBjb25zdW1lIG1vcmUKK21lbW9yeS4gVGhlIFxmSWxldmVsXGZSIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBjaG9vc2UgdGhlIGxldmVsIG9mCitwcmVjaXNpb24gb2YgdG9rZW4gbG9jYXRpb24gdHJhY2tpbmcgdGh1cyBkZWNyZWFzaW5nIHRoZSBtZW1vcnkKK2NvbnN1bXB0aW9uIGlmIG5lY2Vzc2FyeS4gVmFsdWUgXGZCMFxmUiBvZiBcZklsZXZlbFxmUiBkZS1hY3RpdmF0ZXMKK3RoaXMgb3B0aW9uIGp1c3QgYXMgaWYgbm8gXGZCXC1mdHJhY2tcLW1hY3JvXC1leHBhbnNpb25cZlIgd2FzIHByZXNlbnQKK29uIHRoZSBjb21tYW5kIGxpbmUuIFZhbHVlIFxmQjFcZlIgdHJhY2tzIHRva2VucyBsb2NhdGlvbnMgaW4gYQorZGVncmFkZWQgbW9kZSBmb3IgdGhlIHNha2Ugb2YgbWluaW1hbCBtZW1vcnkgb3ZlcmhlYWQuIEluIHRoaXMgbW9kZQorYWxsIHRva2VucyByZXN1bHRpbmcgZnJvbSB0aGUgZXhwYW5zaW9uIG9mIGFuIGFyZ3VtZW50IG9mIGEKK2Z1bmN0aW9uLWxpa2UgbWFjcm8gaGF2ZSB0aGUgc2FtZSBsb2NhdGlvbi4gVmFsdWUgXGZCMlxmUiB0cmFja3MKK3Rva2VucyBsb2NhdGlvbnMgY29tcGxldGVseS4gVGhpcyB2YWx1ZSBpcyB0aGUgbW9zdCBtZW1vcnkgaHVuZ3J5LgorV2hlbiB0aGlzIG9wdGlvbiBpcyBnaXZlbiBubyBhcmd1bWVudCwgdGhlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIGlzCitcJlxmQjJcZlIuCisuU3AKK05vdGUgdGhhdCBcLWZ0cmFja1wtbWFjcm9cLWV4cGFuc2lvbj0yIGlzIGFjdGl2YXRlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLWZleGVjXC1jaGFyc2V0PVxmUlxmSWNoYXJzZXRcZlIiIDQKKy5JWCBJdGVtICItZmV4ZWMtY2hhcnNldD1jaGFyc2V0IgorU2V0IHRoZSBleGVjdXRpb24gY2hhcmFjdGVyIHNldCwgdXNlZCBmb3Igc3RyaW5nIGFuZCBjaGFyYWN0ZXIKK2NvbnN0YW50cy4gIFRoZSBkZWZhdWx0IGlzIFxzLTFVVEZcLThcczAuICBcZkljaGFyc2V0XGZSIGNhbiBiZSBhbnkgZW5jb2RpbmcKK3N1cHBvcnRlZCBieSB0aGUgc3lzdGVtJ3MgXGYoQ1dcKihDYGljb252XCooQydcZlIgbGlicmFyeSByb3V0aW5lLgorLklQICJcZkJcLWZ3aWRlXC1leGVjXC1jaGFyc2V0PVxmUlxmSWNoYXJzZXRcZlIiIDQKKy5JWCBJdGVtICItZndpZGUtZXhlYy1jaGFyc2V0PWNoYXJzZXQiCitTZXQgdGhlIHdpZGUgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQsIHVzZWQgZm9yIHdpZGUgc3RyaW5nIGFuZAorY2hhcmFjdGVyIGNvbnN0YW50cy4gIFRoZSBkZWZhdWx0IGlzIFxzLTFVVEZcLTMyXHMwIG9yIFxzLTFVVEZcLTE2XHMwLCB3aGljaGV2ZXIKK2NvcnJlc3BvbmRzIHRvIHRoZSB3aWR0aCBvZiBcZihDV1wqKENgd2NoYXJfdFwqKEMnXGZSLiAgQXMgd2l0aAorXCZcZkJcLWZleGVjXC1jaGFyc2V0XGZSLCBcZkljaGFyc2V0XGZSIGNhbiBiZSBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkCitieSB0aGUgc3lzdGVtJ3MgXGYoQ1dcKihDYGljb252XCooQydcZlIgbGlicmFyeSByb3V0aW5lOyBob3dldmVyLCB5b3Ugd2lsbCBoYXZlCitwcm9ibGVtcyB3aXRoIGVuY29kaW5ncyB0aGF0IGRvIG5vdCBmaXQgZXhhY3RseSBpbiBcZihDV1wqKENgd2NoYXJfdFwqKEMnXGZSLgorLklQICJcZkJcLWZpbnB1dFwtY2hhcnNldD1cZlJcZkljaGFyc2V0XGZSIiA0CisuSVggSXRlbSAiLWZpbnB1dC1jaGFyc2V0PWNoYXJzZXQiCitTZXQgdGhlIGlucHV0IGNoYXJhY3RlciBzZXQsIHVzZWQgZm9yIHRyYW5zbGF0aW9uIGZyb20gdGhlIGNoYXJhY3Rlcgorc2V0IG9mIHRoZSBpbnB1dCBmaWxlIHRvIHRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IFxzLTFHQ0NcczAuICBJZiB0aGUKK2xvY2FsZSBkb2VzIG5vdCBzcGVjaWZ5LCBvciBccy0xR0NDXHMwIGNhbm5vdCBnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZQorbG9jYWxlLCB0aGUgZGVmYXVsdCBpcyBccy0xVVRGXC04XHMwLiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBlaXRoZXIgdGhlIGxvY2FsZQorb3IgdGhpcyBjb21tYW5kIGxpbmUgb3B0aW9uLiAgQ3VycmVudGx5IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIHRha2VzCitwcmVjZWRlbmNlIGlmIHRoZXJlJ3MgYSBjb25mbGljdC4gIFxmSWNoYXJzZXRcZlIgY2FuIGJlIGFueSBlbmNvZGluZworc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0ncyBcZihDV1wqKENgaWNvbnZcKihDJ1xmUiBsaWJyYXJ5IHJvdXRpbmUuCisuSVAgIlxmQlwtZndvcmtpbmdcLWRpcmVjdG9yeVxmUiIgNAorLklYIEl0ZW0gIi1md29ya2luZy1kaXJlY3RvcnkiCitFbmFibGUgZ2VuZXJhdGlvbiBvZiBsaW5lbWFya2VycyBpbiB0aGUgcHJlcHJvY2Vzc29yIG91dHB1dCB0aGF0IHdpbGwKK2xldCB0aGUgY29tcGlsZXIga25vdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhdCB0aGUgdGltZSBvZgorcHJlcHJvY2Vzc2luZy4gIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIHByZXByb2Nlc3NvciB3aWxsCitlbWl0LCBhZnRlciB0aGUgaW5pdGlhbCBsaW5lbWFya2VyLCBhIHNlY29uZCBsaW5lbWFya2VyIHdpdGggdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZvbGxvd2VkIGJ5IHR3byBzbGFzaGVzLiAgXHMtMUdDQ1xzMCB3aWxsIHVzZSB0aGlzCitkaXJlY3RvcnksIHdoZW4gaXQncyBwcmVzZW50IGluIHRoZSBwcmVwcm9jZXNzZWQgaW5wdXQsIGFzIHRoZQorZGlyZWN0b3J5IGVtaXR0ZWQgYXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaW4gc29tZSBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGZvcm1hdHMuICBUaGlzIG9wdGlvbiBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgaWYgZGVidWdnaW5nCitpbmZvcm1hdGlvbiBpcyBlbmFibGVkLCBidXQgdGhpcyBjYW4gYmUgaW5oaWJpdGVkIHdpdGggdGhlIG5lZ2F0ZWQKK2Zvcm0gXGZCXC1mbm9cLXdvcmtpbmdcLWRpcmVjdG9yeVxmUi4gIElmIHRoZSBcZkJcLVBcZlIgZmxhZyBpcworcHJlc2VudCBpbiB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LCBzaW5jZSBubworXCZcZihDV1wqKENgI2xpbmVcKihDJ1xmUiBkaXJlY3RpdmVzIGFyZSBlbWl0dGVkIHdoYXRzb2V2ZXIuCisuSVAgIlxmQlwtZm5vXC1zaG93XC1jb2x1bW5cZlIiIDQKKy5JWCBJdGVtICItZm5vLXNob3ctY29sdW1uIgorRG8gbm90IHByaW50IGNvbHVtbiBudW1iZXJzIGluIGRpYWdub3N0aWNzLiAgVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IGlmCitkaWFnbm9zdGljcyBhcmUgYmVpbmcgc2Nhbm5lZCBieSBhIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZQorY29sdW1uIG51bWJlcnMsIHN1Y2ggYXMgXGZCZGVqYWdudVxmUi4KKy5JUCAiXGZCXC1BXGZSIFxmSXByZWRpY2F0ZVxmUlxmQj1cZlJcZklhbnN3ZXJcZlIiIDQKKy5JWCBJdGVtICItQSBwcmVkaWNhdGU9YW5zd2VyIgorTWFrZSBhbiBhc3NlcnRpb24gd2l0aCB0aGUgcHJlZGljYXRlIFxmSXByZWRpY2F0ZVxmUiBhbmQgYW5zd2VyCitcJlxmSWFuc3dlclxmUi4gIFRoaXMgZm9ybSBpcyBwcmVmZXJyZWQgdG8gdGhlIG9sZGVyIGZvcm0gXGZCXC1BXGZSCitcJlxmSXByZWRpY2F0ZVxmUlxmQihcZlJcZklhbnN3ZXJcZlJcZkIpXGZSLCB3aGljaCBpcyBzdGlsbCBzdXBwb3J0ZWQsIGJlY2F1c2UKK2l0IGRvZXMgbm90IHVzZSBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuCisuSVAgIlxmQlwtQSBcLVxmUlxmSXByZWRpY2F0ZVxmUlxmQj1cZlJcZklhbnN3ZXJcZlIiIDQKKy5JWCBJdGVtICItQSAtcHJlZGljYXRlPWFuc3dlciIKK0NhbmNlbCBhbiBhc3NlcnRpb24gd2l0aCB0aGUgcHJlZGljYXRlIFxmSXByZWRpY2F0ZVxmUiBhbmQgYW5zd2VyCitcJlxmSWFuc3dlclxmUi4KKy5JUCAiXGZCXC1kQ0hBUlNcZlIiIDQKKy5JWCBJdGVtICItZENIQVJTIgorXCZcZklccy0xQ0hBUlNcczBcZlIgaXMgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMsCithbmQgbXVzdCBub3QgYmUgcHJlY2VkZWQgYnkgYSBzcGFjZS4gIE90aGVyIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkCitieSB0aGUgY29tcGlsZXIgcHJvcGVyLCBvciByZXNlcnZlZCBmb3IgZnV0dXJlIHZlcnNpb25zIG9mIFxzLTFHQ0NcczAsIGFuZCBzbworYXJlIHNpbGVudGx5IGlnbm9yZWQuICBJZiB5b3Ugc3BlY2lmeSBjaGFyYWN0ZXJzIHdob3NlIGJlaGF2aW9yCitjb25mbGljdHMsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorLlJTIDQKKy5JUCAiXGZCTVxmUiIgNAorLklYIEl0ZW0gIk0iCitJbnN0ZWFkIG9mIHRoZSBub3JtYWwgb3V0cHV0LCBnZW5lcmF0ZSBhIGxpc3Qgb2YgXGZCI2RlZmluZVxmUgorZGlyZWN0aXZlcyBmb3IgYWxsIHRoZSBtYWNyb3MgZGVmaW5lZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKK3ByZXByb2Nlc3NvciwgaW5jbHVkaW5nIHByZWRlZmluZWQgbWFjcm9zLiAgVGhpcyBnaXZlcyB5b3UgYSB3YXkgb2YKK2ZpbmRpbmcgb3V0IHdoYXQgaXMgcHJlZGVmaW5lZCBpbiB5b3VyIHZlcnNpb24gb2YgdGhlIHByZXByb2Nlc3Nvci4KK0Fzc3VtaW5nIHlvdSBoYXZlIG5vIGZpbGUgXGZJZm9vLmhcZlIsIHRoZSBjb21tYW5kCisuU3AKKy5WYiAxCitcJiAgICAgICAgdG91Y2ggZm9vLmg7IGNwcCBcLWRNIGZvby5oCisuVmUKKy5TcAord2lsbCBzaG93IGFsbCB0aGUgcHJlZGVmaW5lZCBtYWNyb3MuCisuU3AKK0lmIHlvdSB1c2UgXGZCXC1kTVxmUiB3aXRob3V0IHRoZSBcZkJcLUVcZlIgb3B0aW9uLCBcZkJcLWRNXGZSIGlzCitpbnRlcnByZXRlZCBhcyBhIHN5bm9ueW0gZm9yIFxmQlwtZmR1bXBcLXJ0bFwtbWFjaFxmUi4KKy5JUCAiXGZCRFxmUiIgNAorLklYIEl0ZW0gIkQiCitMaWtlIFxmQk1cZlIgZXhjZXB0IGluIHR3byByZXNwZWN0czogaXQgZG9lcyBcZklub3RcZlIgaW5jbHVkZSB0aGUKK3ByZWRlZmluZWQgbWFjcm9zLCBhbmQgaXQgb3V0cHV0cyBcZklib3RoXGZSIHRoZSBcZkIjZGVmaW5lXGZSCitkaXJlY3RpdmVzIGFuZCB0aGUgcmVzdWx0IG9mIHByZXByb2Nlc3NpbmcuICBCb3RoIGtpbmRzIG9mIG91dHB1dCBnbyB0bwordGhlIHN0YW5kYXJkIG91dHB1dCBmaWxlLgorLklQICJcZkJOXGZSIiA0CisuSVggSXRlbSAiTiIKK0xpa2UgXGZCRFxmUiwgYnV0IGVtaXQgb25seSB0aGUgbWFjcm8gbmFtZXMsIG5vdCB0aGVpciBleHBhbnNpb25zLgorLklQICJcZkJJXGZSIiA0CisuSVggSXRlbSAiSSIKK091dHB1dCBcZkIjaW5jbHVkZVxmUiBkaXJlY3RpdmVzIGluIGFkZGl0aW9uIHRvIHRoZSByZXN1bHQgb2YKK3ByZXByb2Nlc3NpbmcuCisuSVAgIlxmQlVcZlIiIDQKKy5JWCBJdGVtICJVIgorTGlrZSBcZkJEXGZSIGV4Y2VwdCB0aGF0IG9ubHkgbWFjcm9zIHRoYXQgYXJlIGV4cGFuZGVkLCBvciB3aG9zZQorZGVmaW5lZG5lc3MgaXMgdGVzdGVkIGluIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhcmUgb3V0cHV0OyB0aGUKK291dHB1dCBpcyBkZWxheWVkIHVudGlsIHRoZSB1c2Ugb3IgdGVzdCBvZiB0aGUgbWFjcm87IGFuZAorXCZcZkIjdW5kZWZcZlIgZGlyZWN0aXZlcyBhcmUgYWxzbyBvdXRwdXQgZm9yIG1hY3JvcyB0ZXN0ZWQgYnV0Cit1bmRlZmluZWQgYXQgdGhlIHRpbWUuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1QXGZSIiA0CisuSVggSXRlbSAiLVAiCitJbmhpYml0IGdlbmVyYXRpb24gb2YgbGluZW1hcmtlcnMgaW4gdGhlIG91dHB1dCBmcm9tIHRoZSBwcmVwcm9jZXNzb3IuCitUaGlzIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhlIHByZXByb2Nlc3NvciBvbiBzb21ldGhpbmcgdGhhdCBpcworbm90IEMgY29kZSwgYW5kIHdpbGwgYmUgc2VudCB0byBhIHByb2dyYW0gd2hpY2ggbWlnaHQgYmUgY29uZnVzZWQgYnkgdGhlCitsaW5lbWFya2Vycy4KKy5JUCAiXGZCXC1DXGZSIiA0CisuSVggSXRlbSAiLUMiCitEbyBub3QgZGlzY2FyZCBjb21tZW50cy4gIEFsbCBjb21tZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dAorZmlsZSwgZXhjZXB0IGZvciBjb21tZW50cyBpbiBwcm9jZXNzZWQgZGlyZWN0aXZlcywgd2hpY2ggYXJlIGRlbGV0ZWQKK2Fsb25nIHdpdGggdGhlIGRpcmVjdGl2ZS4KKy5TcAorWW91IHNob3VsZCBiZSBwcmVwYXJlZCBmb3Igc2lkZSBlZmZlY3RzIHdoZW4gdXNpbmcgXGZCXC1DXGZSOyBpdAorY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgdG8gdHJlYXQgY29tbWVudHMgYXMgdG9rZW5zIGluIHRoZWlyIG93biByaWdodC4KK0ZvciBleGFtcGxlLCBjb21tZW50cyBhcHBlYXJpbmcgYXQgdGhlIHN0YXJ0IG9mIHdoYXQgd291bGQgYmUgYQorZGlyZWN0aXZlIGxpbmUgaGF2ZSB0aGUgZWZmZWN0IG9mIHR1cm5pbmcgdGhhdCBsaW5lIGludG8gYW4gb3JkaW5hcnkKK3NvdXJjZSBsaW5lLCBzaW5jZSB0aGUgZmlyc3QgdG9rZW4gb24gdGhlIGxpbmUgaXMgbm8gbG9uZ2VyIGEgXGZCI1xmUi4KKy5JUCAiXGZCXC1DQ1xmUiIgNAorLklYIEl0ZW0gIi1DQyIKK0RvIG5vdCBkaXNjYXJkIGNvbW1lbnRzLCBpbmNsdWRpbmcgZHVyaW5nIG1hY3JvIGV4cGFuc2lvbi4gIFRoaXMgaXMKK2xpa2UgXGZCXC1DXGZSLCBleGNlcHQgdGhhdCBjb21tZW50cyBjb250YWluZWQgd2l0aGluIG1hY3JvcyBhcmUKK2Fsc28gcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dCBmaWxlIHdoZXJlIHRoZSBtYWNybyBpcyBleHBhbmRlZC4KKy5TcAorSW4gYWRkaXRpb24gdG8gdGhlIHNpZGUtZWZmZWN0cyBvZiB0aGUgXGZCXC1DXGZSIG9wdGlvbiwgdGhlCitcJlxmQlwtQ0NcZlIgb3B0aW9uIGNhdXNlcyBhbGwgXCooQytcLXN0eWxlIGNvbW1lbnRzIGluc2lkZSBhIG1hY3JvCit0byBiZSBjb252ZXJ0ZWQgdG8gQ1wtc3R5bGUgY29tbWVudHMuICBUaGlzIGlzIHRvIHByZXZlbnQgbGF0ZXIgdXNlCitvZiB0aGF0IG1hY3JvIGZyb20gaW5hZHZlcnRlbnRseSBjb21tZW50aW5nIG91dCB0aGUgcmVtYWluZGVyIG9mCit0aGUgc291cmNlIGxpbmUuCisuU3AKK1RoZSBcZkJcLUNDXGZSIG9wdGlvbiBpcyBnZW5lcmFsbHkgdXNlZCB0byBzdXBwb3J0IGxpbnQgY29tbWVudHMuCisuSVAgIlxmQlwtdHJhZGl0aW9uYWxcLWNwcFxmUiIgNAorLklYIEl0ZW0gIi10cmFkaXRpb25hbC1jcHAiCitUcnkgdG8gaW1pdGF0ZSB0aGUgYmVoYXZpb3Igb2Ygb2xkLWZhc2hpb25lZCBDIHByZXByb2Nlc3NvcnMsIGFzCitvcHBvc2VkIHRvIFxzLTFJU09cczAgQyBwcmVwcm9jZXNzb3JzLgorLklQICJcZkJcLXRyaWdyYXBoc1xmUiIgNAorLklYIEl0ZW0gIi10cmlncmFwaHMiCitQcm9jZXNzIHRyaWdyYXBoIHNlcXVlbmNlcy4KK1RoZXNlIGFyZSB0aHJlZS1jaGFyYWN0ZXIgc2VxdWVuY2VzLCBhbGwgc3RhcnRpbmcgd2l0aCBcZkI/P1xmUiwgdGhhdAorYXJlIGRlZmluZWQgYnkgXHMtMUlTT1xzMCBDIHRvIHN0YW5kIGZvciBzaW5nbGUgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLAorXCZcZkI/Py9cZlIgc3RhbmRzIGZvciBcZkJcZVxmUiwgc28gXGZCJz8/L24nXGZSIGlzIGEgY2hhcmFjdGVyCitjb25zdGFudCBmb3IgYSBuZXdsaW5lLiAgQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBpZ25vcmVzIHRyaWdyYXBocywgYnV0IGluCitzdGFuZGFyZC1jb25mb3JtaW5nIG1vZGVzIGl0IGNvbnZlcnRzIHRoZW0uICBTZWUgdGhlIFxmQlwtc3RkXGZSIGFuZAorXCZcZkJcLWFuc2lcZlIgb3B0aW9ucy4KKy5TcAorVGhlIG5pbmUgdHJpZ3JhcGhzIGFuZCB0aGVpciByZXBsYWNlbWVudHMgYXJlCisuU3AKKy5WYiAyCitcJiAgICAgICAgVHJpZ3JhcGg6ICAgICAgID8/KCAgPz8pICA/PzwgID8/PiAgPz89ICA/Py8gID8/XCooQXEgID8/ISAgPz9cLQorXCYgICAgICAgIFJlcGxhY2VtZW50OiAgICAgIFsgICAgXSAgICB7ICAgIH0gICAgIyAgICBcZSAgICBeICAgIHwgICAgfgorLlZlCisuSVAgIlxmQlwtcmVtYXBcZlIiIDQKKy5JWCBJdGVtICItcmVtYXAiCitFbmFibGUgc3BlY2lhbCBjb2RlIHRvIHdvcmsgYXJvdW5kIGZpbGUgc3lzdGVtcyB3aGljaCBvbmx5IHBlcm1pdCB2ZXJ5CitzaG9ydCBmaWxlIG5hbWVzLCBzdWNoIGFzIE1TLURPUy4KKy5JUCAiXGZCXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCisuUEQgMAorLklQICJcZkJcLVwtdGFyZ2V0XC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS10YXJnZXQtaGVscCIKKy5QRAorUHJpbnQgdGV4dCBkZXNjcmliaW5nIGFsbCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgaW5zdGVhZCBvZgorcHJlcHJvY2Vzc2luZyBhbnl0aGluZy4KKy5JUCAiXGZCXC12XGZSIiA0CisuSVggSXRlbSAiLXYiCitWZXJib3NlIG1vZGUuICBQcmludCBvdXQgXHMtMUdOVVxzMCBccy0xQ1BQXHMwJ3MgdmVyc2lvbiBudW1iZXIgYXQgdGhlIGJlZ2lubmluZyBvZgorZXhlY3V0aW9uLCBhbmQgcmVwb3J0IHRoZSBmaW5hbCBmb3JtIG9mIHRoZSBpbmNsdWRlIHBhdGguCisuSVAgIlxmQlwtSFxmUiIgNAorLklYIEl0ZW0gIi1IIgorUHJpbnQgdGhlIG5hbWUgb2YgZWFjaCBoZWFkZXIgZmlsZSB1c2VkLCBpbiBhZGRpdGlvbiB0byBvdGhlciBub3JtYWwKK2FjdGl2aXRpZXMuICBFYWNoIG5hbWUgaXMgaW5kZW50ZWQgdG8gc2hvdyBob3cgZGVlcCBpbiB0aGUKK1wmXGZCI2luY2x1ZGVcZlIgc3RhY2sgaXQgaXMuICBQcmVjb21waWxlZCBoZWFkZXIgZmlsZXMgYXJlIGFsc28KK3ByaW50ZWQsIGV2ZW4gaWYgdGhleSBhcmUgZm91bmQgdG8gYmUgaW52YWxpZDsgYW4gaW52YWxpZCBwcmVjb21waWxlZAoraGVhZGVyIGZpbGUgaXMgcHJpbnRlZCB3aXRoIFxmQi4uLnhcZlIgYW5kIGEgdmFsaWQgb25lIHdpdGggXGZCLi4uIVxmUiAuCisuSVAgIlxmQlwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi12ZXJzaW9uIgorLlBEIDAKKy5JUCAiXGZCXC1cLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24iCisuUEQKK1ByaW50IG91dCBccy0xR05VXHMwIFxzLTFDUFBcczAncyB2ZXJzaW9uIG51bWJlci4gIFdpdGggb25lIGRhc2gsIHByb2NlZWQgdG8KK3ByZXByb2Nlc3MgYXMgbm9ybWFsLiAgV2l0aCB0d28gZGFzaGVzLCBleGl0IGltbWVkaWF0ZWx5LgorLlNTICJQYXNzaW5nIE9wdGlvbnMgdG8gdGhlIEFzc2VtYmxlciIKKy5JWCBTdWJzZWN0aW9uICJQYXNzaW5nIE9wdGlvbnMgdG8gdGhlIEFzc2VtYmxlciIKK1lvdSBjYW4gcGFzcyBvcHRpb25zIHRvIHRoZSBhc3NlbWJsZXIuCisuSVAgIlxmQlwtV2EsXGZSXGZJb3B0aW9uXGZSIiA0CisuSVggSXRlbSAiLVdhLG9wdGlvbiIKK1Bhc3MgXGZJb3B0aW9uXGZSIGFzIGFuIG9wdGlvbiB0byB0aGUgYXNzZW1ibGVyLiAgSWYgXGZJb3B0aW9uXGZSCitjb250YWlucyBjb21tYXMsIGl0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgb3B0aW9ucyBhdCB0aGUgY29tbWFzLgorLklQICJcZkJcLVhhc3NlbWJsZXJcZlIgXGZJb3B0aW9uXGZSIiA0CisuSVggSXRlbSAiLVhhc3NlbWJsZXIgb3B0aW9uIgorUGFzcyBcZklvcHRpb25cZlIgYXMgYW4gb3B0aW9uIHRvIHRoZSBhc3NlbWJsZXIuICBZb3UgY2FuIHVzZSB0aGlzIHRvCitzdXBwbHkgc3lzdGVtLXNwZWNpZmljIGFzc2VtYmxlciBvcHRpb25zIHRoYXQgXHMtMUdDQ1xzMCBkb2VzIG5vdAorcmVjb2duaXplLgorLlNwCitJZiB5b3Ugd2FudCB0byBwYXNzIGFuIG9wdGlvbiB0aGF0IHRha2VzIGFuIGFyZ3VtZW50LCB5b3UgbXVzdCB1c2UKK1wmXGZCXC1YYXNzZW1ibGVyXGZSIHR3aWNlLCBvbmNlIGZvciB0aGUgb3B0aW9uIGFuZCBvbmNlIGZvciB0aGUgYXJndW1lbnQuCisuU1MgIk9wdGlvbnMgZm9yIExpbmtpbmciCisuSVggU3Vic2VjdGlvbiAiT3B0aW9ucyBmb3IgTGlua2luZyIKK1RoZXNlIG9wdGlvbnMgY29tZSBpbnRvIHBsYXkgd2hlbiB0aGUgY29tcGlsZXIgbGlua3Mgb2JqZWN0IGZpbGVzIGludG8KK2FuIGV4ZWN1dGFibGUgb3V0cHV0IGZpbGUuICBUaGV5IGFyZSBtZWFuaW5nbGVzcyBpZiB0aGUgY29tcGlsZXIgaXMKK25vdCBkb2luZyBhIGxpbmsgc3RlcC4KKy5JUCAiXGZJb2JqZWN0LWZpbGUtbmFtZVxmUiIgNAorLklYIEl0ZW0gIm9iamVjdC1maWxlLW5hbWUiCitBIGZpbGUgbmFtZSB0aGF0IGRvZXMgbm90IGVuZCBpbiBhIHNwZWNpYWwgcmVjb2duaXplZCBzdWZmaXggaXMKK2NvbnNpZGVyZWQgdG8gbmFtZSBhbiBvYmplY3QgZmlsZSBvciBsaWJyYXJ5LiAgKE9iamVjdCBmaWxlcyBhcmUKK2Rpc3Rpbmd1aXNoZWQgZnJvbSBsaWJyYXJpZXMgYnkgdGhlIGxpbmtlciBhY2NvcmRpbmcgdG8gdGhlIGZpbGUKK2NvbnRlbnRzLikgIElmIGxpbmtpbmcgaXMgZG9uZSwgdGhlc2Ugb2JqZWN0IGZpbGVzIGFyZSB1c2VkIGFzIGlucHV0Cit0byB0aGUgbGlua2VyLgorLklQICJcZkJcLWNcZlIiIDQKKy5JWCBJdGVtICItYyIKKy5QRCAwCisuSVAgIlxmQlwtU1xmUiIgNAorLklYIEl0ZW0gIi1TIgorLklQICJcZkJcLUVcZlIiIDQKKy5JWCBJdGVtICItRSIKKy5QRAorSWYgYW55IG9mIHRoZXNlIG9wdGlvbnMgaXMgdXNlZCwgdGhlbiB0aGUgbGlua2VyIGlzIG5vdCBydW4sIGFuZAorb2JqZWN0IGZpbGUgbmFtZXMgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGFyZ3VtZW50cy4KKy5JUCAiXGZCXC1sXGZSXGZJbGlicmFyeVxmUiIgNAorLklYIEl0ZW0gIi1sbGlicmFyeSIKKy5QRCAwCisuSVAgIlxmQlwtbFxmUiBcZklsaWJyYXJ5XGZSIiA0CisuSVggSXRlbSAiLWwgbGlicmFyeSIKKy5QRAorU2VhcmNoIHRoZSBsaWJyYXJ5IG5hbWVkIFxmSWxpYnJhcnlcZlIgd2hlbiBsaW5raW5nLiAgKFRoZSBzZWNvbmQKK2FsdGVybmF0aXZlIHdpdGggdGhlIGxpYnJhcnkgYXMgYSBzZXBhcmF0ZSBhcmd1bWVudCBpcyBvbmx5IGZvcgorXCZccy0xUE9TSVhcczAgY29tcGxpYW5jZSBhbmQgaXMgbm90IHJlY29tbWVuZGVkLikKKy5TcAorSXQgbWFrZXMgYSBkaWZmZXJlbmNlIHdoZXJlIGluIHRoZSBjb21tYW5kIHlvdSB3cml0ZSB0aGlzIG9wdGlvbjsgdGhlCitsaW5rZXIgc2VhcmNoZXMgYW5kIHByb2Nlc3NlcyBsaWJyYXJpZXMgYW5kIG9iamVjdCBmaWxlcyBpbiB0aGUgb3JkZXIgdGhleQorYXJlIHNwZWNpZmllZC4gIFRodXMsIFxmQmZvby5vIFwtbHogYmFyLm9cZlIgc2VhcmNoZXMgbGlicmFyeSBcZkJ6XGZSCithZnRlciBmaWxlIFxmSWZvby5vXGZSIGJ1dCBiZWZvcmUgXGZJYmFyLm9cZlIuICBJZiBcZkliYXIub1xmUiByZWZlcnMKK3RvIGZ1bmN0aW9ucyBpbiBcZkJ6XGZSLCB0aG9zZSBmdW5jdGlvbnMgbWF5IG5vdCBiZSBsb2FkZWQuCisuU3AKK1RoZSBsaW5rZXIgc2VhcmNoZXMgYSBzdGFuZGFyZCBsaXN0IG9mIGRpcmVjdG9yaWVzIGZvciB0aGUgbGlicmFyeSwKK3doaWNoIGlzIGFjdHVhbGx5IGEgZmlsZSBuYW1lZCBcZklsaWJcZklsaWJyYXJ5XGZJLmFcZlIuICBUaGUgbGlua2VyCit0aGVuIHVzZXMgdGhpcyBmaWxlIGFzIGlmIGl0IGhhZCBiZWVuIHNwZWNpZmllZCBwcmVjaXNlbHkgYnkgbmFtZS4KKy5TcAorVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGluY2x1ZGUgc2V2ZXJhbCBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMKK3BsdXMgYW55IHRoYXQgeW91IHNwZWNpZnkgd2l0aCBcZkJcLUxcZlIuCisuU3AKK05vcm1hbGx5IHRoZSBmaWxlcyBmb3VuZCB0aGlzIHdheSBhcmUgbGlicmFyeSBmaWxlc1wtXC1cLWFyY2hpdmUgZmlsZXMKK3dob3NlIG1lbWJlcnMgYXJlIG9iamVjdCBmaWxlcy4gIFRoZSBsaW5rZXIgaGFuZGxlcyBhbiBhcmNoaXZlIGZpbGUgYnkKK3NjYW5uaW5nIHRocm91Z2ggaXQgZm9yIG1lbWJlcnMgd2hpY2ggZGVmaW5lIHN5bWJvbHMgdGhhdCBoYXZlIHNvIGZhcgorYmVlbiByZWZlcmVuY2VkIGJ1dCBub3QgZGVmaW5lZC4gIEJ1dCBpZiB0aGUgZmlsZSB0aGF0IGlzIGZvdW5kIGlzIGFuCitvcmRpbmFyeSBvYmplY3QgZmlsZSwgaXQgaXMgbGlua2VkIGluIHRoZSB1c3VhbCBmYXNoaW9uLiAgVGhlIG9ubHkKK2RpZmZlcmVuY2UgYmV0d2VlbiB1c2luZyBhbiBcZkJcLWxcZlIgb3B0aW9uIGFuZCBzcGVjaWZ5aW5nIGEgZmlsZSBuYW1lCitpcyB0aGF0IFxmQlwtbFxmUiBzdXJyb3VuZHMgXGZJbGlicmFyeVxmUiB3aXRoIFxmQmxpYlxmUiBhbmQgXGZCLmFcZlIKK2FuZCBzZWFyY2hlcyBzZXZlcmFsIGRpcmVjdG9yaWVzLgorLklQICJcZkJcLWxvYmpjXGZSIiA0CisuSVggSXRlbSAiLWxvYmpjIgorWW91IG5lZWQgdGhpcyBzcGVjaWFsIGNhc2Ugb2YgdGhlIFxmQlwtbFxmUiBvcHRpb24gaW4gb3JkZXIgdG8KK2xpbmsgYW4gT2JqZWN0aXZlLUMgb3IgT2JqZWN0aXZlXC1cKihDKyBwcm9ncmFtLgorLklQICJcZkJcLW5vc3RhcnRmaWxlc1xmUiIgNAorLklYIEl0ZW0gIi1ub3N0YXJ0ZmlsZXMiCitEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gc3RhcnR1cCBmaWxlcyB3aGVuIGxpbmtpbmcuCitUaGUgc3RhbmRhcmQgc3lzdGVtIGxpYnJhcmllcyBhcmUgdXNlZCBub3JtYWxseSwgdW5sZXNzIFxmQlwtbm9zdGRsaWJcZlIKK29yIFxmQlwtbm9kZWZhdWx0bGlic1xmUiBpcyB1c2VkLgorLklQICJcZkJcLW5vZGVmYXVsdGxpYnNcZlIiIDQKKy5JWCBJdGVtICItbm9kZWZhdWx0bGlicyIKK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBsaWJyYXJpZXMgd2hlbiBsaW5raW5nLgorT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IGFyZSBwYXNzZWQgdG8gdGhlIGxpbmtlciwgYW5kIG9wdGlvbnMKK3NwZWNpZnlpbmcgbGlua2FnZSBvZiB0aGUgc3lzdGVtIGxpYnJhcmllcywgc3VjaCBhcyBcZihDV1wqKENgXC1zdGF0aWNcLWxpYmdjY1wqKEMnXGZSCitvciBcZihDV1wqKENgXC1zaGFyZWRcLWxpYmdjY1wqKEMnXGZSLCBhcmUgaWdub3JlZC4gIAorVGhlIHN0YW5kYXJkIHN0YXJ0dXAgZmlsZXMgYXJlIHVzZWQgbm9ybWFsbHksIHVubGVzcyBcZkJcLW5vc3RhcnRmaWxlc1xmUgoraXMgdXNlZC4KKy5TcAorVGhlIGNvbXBpbGVyIG1heSBnZW5lcmF0ZSBjYWxscyB0byBcZihDV1wqKENgbWVtY21wXCooQydcZlIsCitcJlxmKENXXCooQ2BtZW1zZXRcKihDJ1xmUiwgXGYoQ1dcKihDYG1lbWNweVwqKEMnXGZSIGFuZCBcZihDV1wqKENgbWVtbW92ZVwqKEMnXGZSLgorVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbnRyaWVzIGluCitsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKK21lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKy5JUCAiXGZCXC1ub3N0ZGxpYlxmUiIgNAorLklYIEl0ZW0gIi1ub3N0ZGxpYiIKK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBzdGFydHVwIGZpbGVzIG9yIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCitObyBzdGFydHVwIGZpbGVzIGFuZCBvbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgYXJlIHBhc3NlZCB0bwordGhlIGxpbmtlciwgYW5kIG9wdGlvbnMgc3BlY2lmeWluZyBsaW5rYWdlIG9mIHRoZSBzeXN0ZW0gbGlicmFyaWVzLCBzdWNoIGFzCitcJlxmKENXXCooQ2BcLXN0YXRpY1wtbGliZ2NjXCooQydcZlIgb3IgXGYoQ1dcKihDYFwtc2hhcmVkXC1saWJnY2NcKihDJ1xmUiwgYXJlIGlnbm9yZWQuCisuU3AKK1RoZSBjb21waWxlciBtYXkgZ2VuZXJhdGUgY2FsbHMgdG8gXGYoQ1dcKihDYG1lbWNtcFwqKEMnXGZSLCBcZihDV1wqKENgbWVtc2V0XCooQydcZlIsCitcJlxmKENXXCooQ2BtZW1jcHlcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYG1lbW1vdmVcKihDJ1xmUi4KK1RoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW50cmllcyBpbgorbGliYy4gIFRoZXNlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgc3VwcGxpZWQgdGhyb3VnaCBzb21lIG90aGVyCittZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisuU3AKK09uZSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyaWVzIGJ5cGFzc2VkIGJ5IFxmQlwtbm9zdGRsaWJcZlIgYW5kCitcJlxmQlwtbm9kZWZhdWx0bGlic1xmUiBpcyBcZklsaWJnY2MuYVxmUiwgYSBsaWJyYXJ5IG9mIGludGVybmFsIHN1YnJvdXRpbmVzCit3aGljaCBccy0xR0NDXHMwIHVzZXMgdG8gb3ZlcmNvbWUgc2hvcnRjb21pbmdzIG9mIHBhcnRpY3VsYXIgbWFjaGluZXMsIG9yIHNwZWNpYWwKK25lZWRzIGZvciBzb21lIGxhbmd1YWdlcy4KKy5TcAorSW4gbW9zdCBjYXNlcywgeW91IG5lZWQgXGZJbGliZ2NjLmFcZlIgZXZlbiB3aGVuIHlvdSB3YW50IHRvIGF2b2lkCitvdGhlciBzdGFuZGFyZCBsaWJyYXJpZXMuICBJbiBvdGhlciB3b3Jkcywgd2hlbiB5b3Ugc3BlY2lmeSBcZkJcLW5vc3RkbGliXGZSCitvciBcZkJcLW5vZGVmYXVsdGxpYnNcZlIgeW91IHNob3VsZCB1c3VhbGx5IHNwZWNpZnkgXGZCXC1sZ2NjXGZSIGFzIHdlbGwuCitUaGlzIGVuc3VyZXMgdGhhdCB5b3UgaGF2ZSBubyB1bnJlc29sdmVkIHJlZmVyZW5jZXMgdG8gaW50ZXJuYWwgXHMtMUdDQ1xzMAorbGlicmFyeSBzdWJyb3V0aW5lcy4KKyhBbiBleGFtcGxlIG9mIHN1Y2ggYW4gaW50ZXJuYWwgc3Vicm91dGluZSBpcyBcZkJfXHxfbWFpblxmUiwgdXNlZCB0byBlbnN1cmUgXCooQysKK2NvbnN0cnVjdG9ycyBhcmUgY2FsbGVkLikKKy5JUCAiXGZCXC1waWVcZlIiIDQKKy5JWCBJdGVtICItcGllIgorUHJvZHVjZSBhIHBvc2l0aW9uIGluZGVwZW5kZW50IGV4ZWN1dGFibGUgb24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQgaXQuCitGb3IgcHJlZGljdGFibGUgcmVzdWx0cywgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBzYW1lIHNldCBvZiBvcHRpb25zCit1c2VkIGZvciBjb21waWxhdGlvbiAoXGZCXC1mcGllXGZSLCBcZkJcLWZQSUVcZlIsCitvciBtb2RlbCBzdWJvcHRpb25zKSB3aGVuIHlvdSBzcGVjaWZ5IHRoaXMgbGlua2VyIG9wdGlvbi4KKy5JUCAiXGZCXC1yZHluYW1pY1xmUiIgNAorLklYIEl0ZW0gIi1yZHluYW1pYyIKK1Bhc3MgdGhlIGZsYWcgXGZCXC1leHBvcnRcLWR5bmFtaWNcZlIgdG8gdGhlIFxzLTFFTEZcczAgbGlua2VyLCBvbiB0YXJnZXRzCit0aGF0IHN1cHBvcnQgaXQuIFRoaXMgaW5zdHJ1Y3RzIHRoZSBsaW5rZXIgdG8gYWRkIGFsbCBzeW1ib2xzLCBub3QKK29ubHkgdXNlZCBvbmVzLCB0byB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUuIFRoaXMgb3B0aW9uIGlzIG5lZWRlZAorZm9yIHNvbWUgdXNlcyBvZiBcZihDV1wqKENgZGxvcGVuXCooQydcZlIgb3IgdG8gYWxsb3cgb2J0YWluaW5nIGJhY2t0cmFjZXMKK2Zyb20gd2l0aGluIGEgcHJvZ3JhbS4KKy5JUCAiXGZCXC1zXGZSIiA0CisuSVggSXRlbSAiLXMiCitSZW1vdmUgYWxsIHN5bWJvbCB0YWJsZSBhbmQgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBleGVjdXRhYmxlLgorLklQICJcZkJcLXN0YXRpY1xmUiIgNAorLklYIEl0ZW0gIi1zdGF0aWMiCitPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcsIHRoaXMgcHJldmVudHMgbGlua2luZyB3aXRoIHRoZSBzaGFyZWQKK2xpYnJhcmllcy4gIE9uIG90aGVyIHN5c3RlbXMsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisuSVAgIlxmQlwtc2hhcmVkXGZSIiA0CisuSVggSXRlbSAiLXNoYXJlZCIKK1Byb2R1Y2UgYSBzaGFyZWQgb2JqZWN0IHdoaWNoIGNhbiB0aGVuIGJlIGxpbmtlZCB3aXRoIG90aGVyIG9iamVjdHMgdG8KK2Zvcm0gYW4gZXhlY3V0YWJsZS4gIE5vdCBhbGwgc3lzdGVtcyBzdXBwb3J0IHRoaXMgb3B0aW9uLiAgRm9yIHByZWRpY3RhYmxlCityZXN1bHRzLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIHNhbWUgc2V0IG9mIG9wdGlvbnMgdXNlZCBmb3IgY29tcGlsYXRpb24KKyhcZkJcLWZwaWNcZlIsIFxmQlwtZlBJQ1xmUiwgb3IgbW9kZWwgc3Vib3B0aW9ucykgd2hlbgoreW91IHNwZWNpZnkgdGhpcyBsaW5rZXIgb3B0aW9uLlsxXQorLklQICJcZkJcLXNoYXJlZFwtbGliZ2NjXGZSIiA0CisuSVggSXRlbSAiLXNoYXJlZC1saWJnY2MiCisuUEQgMAorLklQICJcZkJcLXN0YXRpY1wtbGliZ2NjXGZSIiA0CisuSVggSXRlbSAiLXN0YXRpYy1saWJnY2MiCisuUEQKK09uIHN5c3RlbXMgdGhhdCBwcm92aWRlIFxmSWxpYmdjY1xmUiBhcyBhIHNoYXJlZCBsaWJyYXJ5LCB0aGVzZSBvcHRpb25zCitmb3JjZSB0aGUgdXNlIG9mIGVpdGhlciB0aGUgc2hhcmVkIG9yIHN0YXRpYyB2ZXJzaW9uLCByZXNwZWN0aXZlbHkuCitJZiBubyBzaGFyZWQgdmVyc2lvbiBvZiBcZklsaWJnY2NcZlIgd2FzIGJ1aWx0IHdoZW4gdGhlIGNvbXBpbGVyIHdhcworY29uZmlndXJlZCwgdGhlc2Ugb3B0aW9ucyBoYXZlIG5vIGVmZmVjdC4KKy5TcAorVGhlcmUgYXJlIHNldmVyYWwgc2l0dWF0aW9ucyBpbiB3aGljaCBhbiBhcHBsaWNhdGlvbiBzaG91bGQgdXNlIHRoZQorc2hhcmVkIFxmSWxpYmdjY1xmUiBpbnN0ZWFkIG9mIHRoZSBzdGF0aWMgdmVyc2lvbi4gIFRoZSBtb3N0IGNvbW1vbgorb2YgdGhlc2UgaXMgd2hlbiB0aGUgYXBwbGljYXRpb24gd2lzaGVzIHRvIHRocm93IGFuZCBjYXRjaCBleGNlcHRpb25zCithY3Jvc3MgZGlmZmVyZW50IHNoYXJlZCBsaWJyYXJpZXMuICBJbiB0aGF0IGNhc2UsIGVhY2ggb2YgdGhlIGxpYnJhcmllcworYXMgd2VsbCBhcyB0aGUgYXBwbGljYXRpb24gaXRzZWxmIHNob3VsZCB1c2UgdGhlIHNoYXJlZCBcZklsaWJnY2NcZlIuCisuU3AKK1RoZXJlZm9yZSwgdGhlIEcrKyBhbmQgXHMtMUdDSlxzMCBkcml2ZXJzIGF1dG9tYXRpY2FsbHkgYWRkCitcJlxmQlwtc2hhcmVkXC1saWJnY2NcZlIgd2hlbmV2ZXIgeW91IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkgb3IgYSBtYWluCitleGVjdXRhYmxlLCBiZWNhdXNlIFwqKEMrIGFuZCBKYXZhIHByb2dyYW1zIHR5cGljYWxseSB1c2UgZXhjZXB0aW9ucywgc28KK3RoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorLlNwCitJZiwgaW5zdGVhZCwgeW91IHVzZSB0aGUgXHMtMUdDQ1xzMCBkcml2ZXIgdG8gY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkKK2ZpbmQgdGhhdCB0aGV5IGFyZSBub3QgYWx3YXlzIGxpbmtlZCB3aXRoIHRoZSBzaGFyZWQgXGZJbGliZ2NjXGZSLgorSWYgXHMtMUdDQ1xzMCBmaW5kcywgYXQgaXRzIGNvbmZpZ3VyYXRpb24gdGltZSwgdGhhdCB5b3UgaGF2ZSBhIG5vbi1HTlUgbGlua2VyCitvciBhIFxzLTFHTlVcczAgbGlua2VyIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcHRpb24gXGZCXC1cLWVoXC1mcmFtZVwtaGRyXGZSLAoraXQgbGlua3MgdGhlIHNoYXJlZCB2ZXJzaW9uIG9mIFxmSWxpYmdjY1xmUiBpbnRvIHNoYXJlZCBsaWJyYXJpZXMKK2J5IGRlZmF1bHQuICBPdGhlcndpc2UsIGl0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgbGlua2VyIGFuZCBvcHRpbWl6ZXMKK2F3YXkgdGhlIGxpbmtpbmcgd2l0aCB0aGUgc2hhcmVkIHZlcnNpb24gb2YgXGZJbGliZ2NjXGZSLCBsaW5raW5nIHdpdGgKK3RoZSBzdGF0aWMgdmVyc2lvbiBvZiBsaWJnY2MgYnkgZGVmYXVsdC4gIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgdG8KK3Byb3BhZ2F0ZSB0aHJvdWdoIHN1Y2ggc2hhcmVkIGxpYnJhcmllcywgd2l0aG91dCBpbmN1cnJpbmcgcmVsb2NhdGlvbgorY29zdHMgYXQgbGlicmFyeSBsb2FkIHRpbWUuCisuU3AKK0hvd2V2ZXIsIGlmIGEgbGlicmFyeSBvciBtYWluIGV4ZWN1dGFibGUgaXMgc3VwcG9zZWQgdG8gdGhyb3cgb3IgY2F0Y2gKK2V4Y2VwdGlvbnMsIHlvdSBtdXN0IGxpbmsgaXQgdXNpbmcgdGhlIEcrKyBvciBccy0xR0NKXHMwIGRyaXZlciwgYXMgYXBwcm9wcmlhdGUKK2ZvciB0aGUgbGFuZ3VhZ2VzIHVzZWQgaW4gdGhlIHByb2dyYW0sIG9yIHVzaW5nIHRoZSBvcHRpb24KK1wmXGZCXC1zaGFyZWRcLWxpYmdjY1xmUiwgc3VjaCB0aGF0IGl0IGlzIGxpbmtlZCB3aXRoIHRoZSBzaGFyZWQKK1wmXGZJbGliZ2NjXGZSLgorLklQICJcZkJcLXN0YXRpY1wtbGliYXNhblxmUiIgNAorLklYIEl0ZW0gIi1zdGF0aWMtbGliYXNhbiIKK1doZW4gdGhlIFxmQlwtZnNhbml0aXplPWFkZHJlc3NcZlIgb3B0aW9uIGlzIHVzZWQgdG8gbGluayBhIHByb2dyYW0sCit0aGUgXHMtMUdDQ1xzMCBkcml2ZXIgYXV0b21hdGljYWxseSBsaW5rcyBhZ2FpbnN0IFxmQmxpYmFzYW5cZlIuICBJZgorXCZcZklsaWJhc2FuXGZSIGlzIGF2YWlsYWJsZSBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBhbmQgdGhlIFxmQlwtc3RhdGljXGZSCitvcHRpb24gaXMgbm90IHVzZWQsIHRoZW4gdGhpcyBsaW5rcyBhZ2FpbnN0IHRoZSBzaGFyZWQgdmVyc2lvbiBvZgorXCZcZklsaWJhc2FuXGZSLiAgVGhlIFxmQlwtc3RhdGljXC1saWJhc2FuXGZSIG9wdGlvbiBkaXJlY3RzIHRoZSBccy0xR0NDXHMwCitkcml2ZXIgdG8gbGluayBcZklsaWJhc2FuXGZSIHN0YXRpY2FsbHksIHdpdGhvdXQgbmVjZXNzYXJpbHkgbGlua2luZworb3RoZXIgbGlicmFyaWVzIHN0YXRpY2FsbHkuCisuSVAgIlxmQlwtc3RhdGljXC1saWJ0c2FuXGZSIiA0CisuSVggSXRlbSAiLXN0YXRpYy1saWJ0c2FuIgorV2hlbiB0aGUgXGZCXC1mc2FuaXRpemU9dGhyZWFkXGZSIG9wdGlvbiBpcyB1c2VkIHRvIGxpbmsgYSBwcm9ncmFtLAordGhlIFxzLTFHQ0NcczAgZHJpdmVyIGF1dG9tYXRpY2FsbHkgbGlua3MgYWdhaW5zdCBcZkJsaWJ0c2FuXGZSLiAgSWYKK1wmXGZJbGlidHNhblxmUiBpcyBhdmFpbGFibGUgYXMgYSBzaGFyZWQgbGlicmFyeSwgYW5kIHRoZSBcZkJcLXN0YXRpY1xmUgorb3B0aW9uIGlzIG5vdCB1c2VkLCB0aGVuIHRoaXMgbGlua3MgYWdhaW5zdCB0aGUgc2hhcmVkIHZlcnNpb24gb2YKK1wmXGZJbGlidHNhblxmUi4gIFRoZSBcZkJcLXN0YXRpY1wtbGlidHNhblxmUiBvcHRpb24gZGlyZWN0cyB0aGUgXHMtMUdDQ1xzMAorZHJpdmVyIHRvIGxpbmsgXGZJbGlidHNhblxmUiBzdGF0aWNhbGx5LCB3aXRob3V0IG5lY2Vzc2FyaWx5IGxpbmtpbmcKK290aGVyIGxpYnJhcmllcyBzdGF0aWNhbGx5LgorLklQICJcZkJcLXN0YXRpY1wtbGlic3RkYysrXGZSIiA0CisuSVggSXRlbSAiLXN0YXRpYy1saWJzdGRjKysiCitXaGVuIHRoZSBcZkJnKytcZlIgcHJvZ3JhbSBpcyB1c2VkIHRvIGxpbmsgYSBcKihDKyBwcm9ncmFtLCBpdAorbm9ybWFsbHkgYXV0b21hdGljYWxseSBsaW5rcyBhZ2FpbnN0IFxmQmxpYnN0ZGMrK1xmUi4gIElmCitcJlxmSWxpYnN0ZGMrK1xmUiBpcyBhdmFpbGFibGUgYXMgYSBzaGFyZWQgbGlicmFyeSwgYW5kIHRoZQorXCZcZkJcLXN0YXRpY1xmUiBvcHRpb24gaXMgbm90IHVzZWQsIHRoZW4gdGhpcyBsaW5rcyBhZ2FpbnN0IHRoZQorc2hhcmVkIHZlcnNpb24gb2YgXGZJbGlic3RkYysrXGZSLiAgVGhhdCBpcyBub3JtYWxseSBmaW5lLiAgSG93ZXZlciwgaXQKK2lzIHNvbWV0aW1lcyB1c2VmdWwgdG8gZnJlZXplIHRoZSB2ZXJzaW9uIG9mIFxmSWxpYnN0ZGMrK1xmUiB1c2VkIGJ5Cit0aGUgcHJvZ3JhbSB3aXRob3V0IGdvaW5nIGFsbCB0aGUgd2F5IHRvIGEgZnVsbHkgc3RhdGljIGxpbmsuICBUaGUKK1wmXGZCXC1zdGF0aWNcLWxpYnN0ZGMrK1xmUiBvcHRpb24gZGlyZWN0cyB0aGUgXGZCZysrXGZSIGRyaXZlciB0bworbGluayBcZklsaWJzdGRjKytcZlIgc3RhdGljYWxseSwgd2l0aG91dCBuZWNlc3NhcmlseSBsaW5raW5nIG90aGVyCitsaWJyYXJpZXMgc3RhdGljYWxseS4KKy5JUCAiXGZCXC1zeW1ib2xpY1xmUiIgNAorLklYIEl0ZW0gIi1zeW1ib2xpYyIKK0JpbmQgcmVmZXJlbmNlcyB0byBnbG9iYWwgc3ltYm9scyB3aGVuIGJ1aWxkaW5nIGEgc2hhcmVkIG9iamVjdC4gIFdhcm4KK2Fib3V0IGFueSB1bnJlc29sdmVkIHJlZmVyZW5jZXMgKHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZSBsaW5rIGVkaXRvcgorb3B0aW9uIFxmQlwtWGxpbmtlciBcLXogXC1YbGlua2VyIGRlZnNcZlIpLiAgT25seSBhIGZldyBzeXN0ZW1zIHN1cHBvcnQKK3RoaXMgb3B0aW9uLgorLklQICJcZkJcLVRcZlIgXGZJc2NyaXB0XGZSIiA0CisuSVggSXRlbSAiLVQgc2NyaXB0IgorVXNlIFxmSXNjcmlwdFxmUiBhcyB0aGUgbGlua2VyIHNjcmlwdC4gIFRoaXMgb3B0aW9uIGlzIHN1cHBvcnRlZCBieSBtb3N0CitzeXN0ZW1zIHVzaW5nIHRoZSBccy0xR05VXHMwIGxpbmtlci4gIE9uIHNvbWUgdGFyZ2V0cywgc3VjaCBhcyBiYXJlLWJvYXJkCit0YXJnZXRzIHdpdGhvdXQgYW4gb3BlcmF0aW5nIHN5c3RlbSwgdGhlIFxmQlwtVFxmUiBvcHRpb24gbWF5IGJlIHJlcXVpcmVkCit3aGVuIGxpbmtpbmcgdG8gYXZvaWQgcmVmZXJlbmNlcyB0byB1bmRlZmluZWQgc3ltYm9scy4KKy5JUCAiXGZCXC1YbGlua2VyXGZSIFxmSW9wdGlvblxmUiIgNAorLklYIEl0ZW0gIi1YbGlua2VyIG9wdGlvbiIKK1Bhc3MgXGZJb3B0aW9uXGZSIGFzIGFuIG9wdGlvbiB0byB0aGUgbGlua2VyLiAgWW91IGNhbiB1c2UgdGhpcyB0bworc3VwcGx5IHN5c3RlbS1zcGVjaWZpYyBsaW5rZXIgb3B0aW9ucyB0aGF0IFxzLTFHQ0NcczAgZG9lcyBub3QgcmVjb2duaXplLgorLlNwCitJZiB5b3Ugd2FudCB0byBwYXNzIGFuIG9wdGlvbiB0aGF0IHRha2VzIGEgc2VwYXJhdGUgYXJndW1lbnQsIHlvdSBtdXN0IHVzZQorXCZcZkJcLVhsaW5rZXJcZlIgdHdpY2UsIG9uY2UgZm9yIHRoZSBvcHRpb24gYW5kIG9uY2UgZm9yIHRoZSBhcmd1bWVudC4KK0ZvciBleGFtcGxlLCB0byBwYXNzIFxmQlwtYXNzZXJ0IGRlZmluaXRpb25zXGZSLCB5b3UgbXVzdCB3cml0ZQorXCZcZkJcLVhsaW5rZXIgXC1hc3NlcnQgXC1YbGlua2VyIGRlZmluaXRpb25zXGZSLiAgSXQgZG9lcyBub3Qgd29yayB0byB3cml0ZQorXCZcZkJcLVhsaW5rZXIgXCooTCJcLWFzc2VydCBkZWZpbml0aW9uc1wqKFIiXGZSLCBiZWNhdXNlIHRoaXMgcGFzc2VzIHRoZSBlbnRpcmUKK3N0cmluZyBhcyBhIHNpbmdsZSBhcmd1bWVudCwgd2hpY2ggaXMgbm90IHdoYXQgdGhlIGxpbmtlciBleHBlY3RzLgorLlNwCitXaGVuIHVzaW5nIHRoZSBccy0xR05VXHMwIGxpbmtlciwgaXQgaXMgdXN1YWxseSBtb3JlIGNvbnZlbmllbnQgdG8gcGFzcworYXJndW1lbnRzIHRvIGxpbmtlciBvcHRpb25zIHVzaW5nIHRoZSBcZklvcHRpb25cZlJcZkI9XGZSXGZJdmFsdWVcZlIKK3N5bnRheCB0aGFuIGFzIHNlcGFyYXRlIGFyZ3VtZW50cy4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHNwZWNpZnkKK1wmXGZCXC1YbGlua2VyIFwtTWFwPW91dHB1dC5tYXBcZlIgcmF0aGVyIHRoYW4KK1wmXGZCXC1YbGlua2VyIFwtTWFwIFwtWGxpbmtlciBvdXRwdXQubWFwXGZSLiAgT3RoZXIgbGlua2VycyBtYXkgbm90IHN1cHBvcnQKK3RoaXMgc3ludGF4IGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKy5JUCAiXGZCXC1XbCxcZlJcZklvcHRpb25cZlIiIDQKKy5JWCBJdGVtICItV2wsb3B0aW9uIgorUGFzcyBcZklvcHRpb25cZlIgYXMgYW4gb3B0aW9uIHRvIHRoZSBsaW5rZXIuICBJZiBcZklvcHRpb25cZlIgY29udGFpbnMKK2NvbW1hcywgaXQgaXMgc3BsaXQgaW50byBtdWx0aXBsZSBvcHRpb25zIGF0IHRoZSBjb21tYXMuICBZb3UgY2FuIHVzZSB0aGlzCitzeW50YXggdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgb3B0aW9uLgorRm9yIGV4YW1wbGUsIFxmQlwtV2wsXC1NYXAsb3V0cHV0Lm1hcFxmUiBwYXNzZXMgXGZCXC1NYXAgb3V0cHV0Lm1hcFxmUiB0byB0aGUKK2xpbmtlci4gIFdoZW4gdXNpbmcgdGhlIFxzLTFHTlVcczAgbGlua2VyLCB5b3UgY2FuIGFsc28gZ2V0IHRoZSBzYW1lIGVmZmVjdCB3aXRoCitcJlxmQlwtV2wsXC1NYXA9b3V0cHV0Lm1hcFxmUi4KKy5JUCAiXGZCXC11XGZSIFxmSXN5bWJvbFxmUiIgNAorLklYIEl0ZW0gIi11IHN5bWJvbCIKK1ByZXRlbmQgdGhlIHN5bWJvbCBcZklzeW1ib2xcZlIgaXMgdW5kZWZpbmVkLCB0byBmb3JjZSBsaW5raW5nIG9mCitsaWJyYXJ5IG1vZHVsZXMgdG8gZGVmaW5lIGl0LiAgWW91IGNhbiB1c2UgXGZCXC11XGZSIG11bHRpcGxlIHRpbWVzIHdpdGgKK2RpZmZlcmVudCBzeW1ib2xzIHRvIGZvcmNlIGxvYWRpbmcgb2YgYWRkaXRpb25hbCBsaWJyYXJ5IG1vZHVsZXMuCisuU1MgIk9wdGlvbnMgZm9yIERpcmVjdG9yeSBTZWFyY2giCisuSVggU3Vic2VjdGlvbiAiT3B0aW9ucyBmb3IgRGlyZWN0b3J5IFNlYXJjaCIKK1RoZXNlIG9wdGlvbnMgc3BlY2lmeSBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcywgZm9yCitsaWJyYXJpZXMgYW5kIGZvciBwYXJ0cyBvZiB0aGUgY29tcGlsZXI6CisuSVAgIlxmQlwtSVxmUlxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1JZGlyIgorQWRkIHRoZSBkaXJlY3RvcnkgXGZJZGlyXGZSIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJlCitzZWFyY2hlZCBmb3IgaGVhZGVyIGZpbGVzLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhIHN5c3RlbSBoZWFkZXIKK2ZpbGUsIHN1YnN0aXR1dGluZyB5b3VyIG93biB2ZXJzaW9uLCBzaW5jZSB0aGVzZSBkaXJlY3RvcmllcyBhcmUKK3NlYXJjaGVkIGJlZm9yZSB0aGUgc3lzdGVtIGhlYWRlciBmaWxlIGRpcmVjdG9yaWVzLiAgSG93ZXZlciwgeW91IHNob3VsZAorbm90IHVzZSB0aGlzIG9wdGlvbiB0byBhZGQgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIHZlbmRvci1zdXBwbGllZAorc3lzdGVtIGhlYWRlciBmaWxlcyAodXNlIFxmQlwtaXN5c3RlbVxmUiBmb3IgdGhhdCkuICBJZiB5b3UgdXNlIG1vcmUgdGhhbgorb25lIFxmQlwtSVxmUiBvcHRpb24sIHRoZSBkaXJlY3RvcmllcyBhcmUgc2Nhbm5lZCBpbiBsZWZ0LXRvLXJpZ2h0CitvcmRlcjsgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcyBjb21lIGFmdGVyLgorLlNwCitJZiBhIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yeSwgb3IgYSBkaXJlY3Rvcnkgc3BlY2lmaWVkIHdpdGgKK1wmXGZCXC1pc3lzdGVtXGZSLCBpcyBhbHNvIHNwZWNpZmllZCB3aXRoIFxmQlwtSVxmUiwgdGhlIFxmQlwtSVxmUgorb3B0aW9uIGlzIGlnbm9yZWQuICBUaGUgZGlyZWN0b3J5IGlzIHN0aWxsIHNlYXJjaGVkIGJ1dCBhcyBhCitzeXN0ZW0gZGlyZWN0b3J5IGF0IGl0cyBub3JtYWwgcG9zaXRpb24gaW4gdGhlIHN5c3RlbSBpbmNsdWRlIGNoYWluLgorVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBccy0xR0NDXHMwJ3MgcHJvY2VkdXJlIHRvIGZpeCBidWdneSBzeXN0ZW0gaGVhZGVycyBhbmQKK3RoZSBvcmRlcmluZyBmb3IgdGhlIFxmKENXXCooQ2BpbmNsdWRlX25leHRcKihDJ1xmUiBkaXJlY3RpdmUgYXJlIG5vdCBpbmFkdmVydGVudGx5IGNoYW5nZWQuCitJZiB5b3UgcmVhbGx5IG5lZWQgdG8gY2hhbmdlIHRoZSBzZWFyY2ggb3JkZXIgZm9yIHN5c3RlbSBkaXJlY3RvcmllcywKK3VzZSB0aGUgXGZCXC1ub3N0ZGluY1xmUiBhbmQvb3IgXGZCXC1pc3lzdGVtXGZSIG9wdGlvbnMuCisuSVAgIlxmQlwtaXBsdWdpbmRpcj1cZlJcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXBsdWdpbmRpcj1kaXIiCitTZXQgdGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIHBsdWdpbnMgdGhhdCBhcmUgcGFzc2VkCitieSBcZkJcLWZwbHVnaW49XGZSXGZJbmFtZVxmUiBpbnN0ZWFkIG9mCitcJlxmQlwtZnBsdWdpbj1cZlJcZklwYXRoXGZSXGZCL1xmUlxmSW5hbWVcZlJcZkIuc29cZlIuICBUaGlzIG9wdGlvbiBpcyBub3QgbWVhbnQKK3RvIGJlIHVzZWQgYnkgdGhlIHVzZXIsIGJ1dCBvbmx5IHBhc3NlZCBieSB0aGUgZHJpdmVyLgorLklQICJcZkJcLWlxdW90ZVxmUlxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pcXVvdGVkaXIiCitBZGQgdGhlIGRpcmVjdG9yeSBcZklkaXJcZlIgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8KK2JlIHNlYXJjaGVkIGZvciBoZWFkZXIgZmlsZXMgb25seSBmb3IgdGhlIGNhc2Ugb2YgXGZCI2luY2x1ZGUKKyJcZlJcZklmaWxlXGZSXGZCIlxmUjsgdGhleSBhcmUgbm90IHNlYXJjaGVkIGZvciBcZkIjaW5jbHVkZSA8XGZSXGZJZmlsZVxmUlxmQj5cZlIsCitvdGhlcndpc2UganVzdCBsaWtlIFxmQlwtSVxmUi4KKy5JUCAiXGZCXC1MXGZSXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLUxkaXIiCitBZGQgZGlyZWN0b3J5IFxmSWRpclxmUiB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZAorZm9yIFxmQlwtbFxmUi4KKy5JUCAiXGZCXC1CXGZSXGZJcHJlZml4XGZSIiA0CisuSVggSXRlbSAiLUJwcmVmaXgiCitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hlcmUgdG8gZmluZCB0aGUgZXhlY3V0YWJsZXMsIGxpYnJhcmllcywKK2luY2x1ZGUgZmlsZXMsIGFuZCBkYXRhIGZpbGVzIG9mIHRoZSBjb21waWxlciBpdHNlbGYuCisuU3AKK1RoZSBjb21waWxlciBkcml2ZXIgcHJvZ3JhbSBydW5zIG9uZSBvciBtb3JlIG9mIHRoZSBzdWJwcm9ncmFtcworXCZcZkJjcHBcZlIsIFxmQmNjMVxmUiwgXGZCYXNcZlIgYW5kIFxmQmxkXGZSLiAgSXQgdHJpZXMKK1wmXGZJcHJlZml4XGZSIGFzIGEgcHJlZml4IGZvciBlYWNoIHByb2dyYW0gaXQgdHJpZXMgdG8gcnVuLCBib3RoIHdpdGggYW5kCit3aXRob3V0IFxmSW1hY2hpbmVcZlJcZkIvXGZSXGZJdmVyc2lvblxmUlxmQi9cZlIuCisuU3AKK0ZvciBlYWNoIHN1YnByb2dyYW0gdG8gYmUgcnVuLCB0aGUgY29tcGlsZXIgZHJpdmVyIGZpcnN0IHRyaWVzIHRoZQorXCZcZkJcLUJcZlIgcHJlZml4LCBpZiBhbnkuICBJZiB0aGF0IG5hbWUgaXMgbm90IGZvdW5kLCBvciBpZiBcZkJcLUJcZlIKK2lzIG5vdCBzcGVjaWZpZWQsIHRoZSBkcml2ZXIgdHJpZXMgdHdvIHN0YW5kYXJkIHByZWZpeGVzLCAKK1wmXGZJL3Vzci9saWIvZ2NjL1xmUiBhbmQgXGZJL3Vzci9sb2NhbC9saWIvZ2NjL1xmUi4gIElmIG5laXRoZXIgb2YKK3Rob3NlIHJlc3VsdHMgaW4gYSBmaWxlIG5hbWUgdGhhdCBpcyBmb3VuZCwgdGhlIHVubW9kaWZpZWQgcHJvZ3JhbQorbmFtZSBpcyBzZWFyY2hlZCBmb3IgdXNpbmcgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiB5b3VyCitcJlxmQlxzLTFQQVRIXHMwXGZSIGVudmlyb25tZW50IHZhcmlhYmxlLgorLlNwCitUaGUgY29tcGlsZXIgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcGF0aCBwcm92aWRlZCBieSB0aGUgXGZCXC1CXGZSCityZWZlcnMgdG8gYSBkaXJlY3RvcnksIGFuZCBpZiBuZWNlc3NhcnkgaXQgYWRkcyBhIGRpcmVjdG9yeQorc2VwYXJhdG9yIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoLgorLlNwCitcJlxmQlwtQlxmUiBwcmVmaXhlcyB0aGF0IGVmZmVjdGl2ZWx5IHNwZWNpZnkgZGlyZWN0b3J5IG5hbWVzIGFsc28gYXBwbHkKK3RvIGxpYnJhcmllcyBpbiB0aGUgbGlua2VyLCBiZWNhdXNlIHRoZSBjb21waWxlciB0cmFuc2xhdGVzIHRoZXNlCitvcHRpb25zIGludG8gXGZCXC1MXGZSIG9wdGlvbnMgZm9yIHRoZSBsaW5rZXIuICBUaGV5IGFsc28gYXBwbHkgdG8KK2luY2x1ZGVzIGZpbGVzIGluIHRoZSBwcmVwcm9jZXNzb3IsIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHRyYW5zbGF0ZXMgdGhlc2UKK29wdGlvbnMgaW50byBcZkJcLWlzeXN0ZW1cZlIgb3B0aW9ucyBmb3IgdGhlIHByZXByb2Nlc3Nvci4gIEluIHRoaXMgY2FzZSwKK3RoZSBjb21waWxlciBhcHBlbmRzIFxmQmluY2x1ZGVcZlIgdG8gdGhlIHByZWZpeC4KKy5TcAorVGhlIHJ1bnRpbWUgc3VwcG9ydCBmaWxlIFxmSWxpYmdjYy5hXGZSIGNhbiBhbHNvIGJlIHNlYXJjaGVkIGZvciB1c2luZwordGhlIFxmQlwtQlxmUiBwcmVmaXgsIGlmIG5lZWRlZC4gIElmIGl0IGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIHR3bworc3RhbmRhcmQgcHJlZml4ZXMgYWJvdmUgYXJlIHRyaWVkLCBhbmQgdGhhdCBpcyBhbGwuICBUaGUgZmlsZSBpcyBsZWZ0CitvdXQgb2YgdGhlIGxpbmsgaWYgaXQgaXMgbm90IGZvdW5kIGJ5IHRob3NlIG1lYW5zLgorLlNwCitBbm90aGVyIHdheSB0byBzcGVjaWZ5IGEgcHJlZml4IG11Y2ggbGlrZSB0aGUgXGZCXC1CXGZSIHByZWZpeCBpcyB0byB1c2UKK3RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJccy0xR0NDX0VYRUNfUFJFRklYXHMwXGZSLgorLlNwCitBcyBhIHNwZWNpYWwga2x1ZGdlLCBpZiB0aGUgcGF0aCBwcm92aWRlZCBieSBcZkJcLUJcZlIgaXMKK1wmXGZJW2Rpci9dc3RhZ2VcZklOXGZJL1xmUiwgd2hlcmUgXGZJTlxmUiBpcyBhIG51bWJlciBpbiB0aGUgcmFuZ2UgMCB0bworOSwgdGhlbiBpdCBpcyByZXBsYWNlZCBieSBcZklbZGlyL11pbmNsdWRlXGZSLiAgVGhpcyBpcyB0byBoZWxwCit3aXRoIGJvb3Qtc3RyYXBwaW5nIHRoZSBjb21waWxlci4KKy5JUCAiXGZCXC1zcGVjcz1cZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLXNwZWNzPWZpbGUiCitQcm9jZXNzIFxmSWZpbGVcZlIgYWZ0ZXIgdGhlIGNvbXBpbGVyIHJlYWRzIGluIHRoZSBzdGFuZGFyZCBcZklzcGVjc1xmUgorZmlsZSwgaW4gb3JkZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzIHdoaWNoIHRoZSBcZkJnY2NcZlIgZHJpdmVyCitwcm9ncmFtIHVzZXMgd2hlbiBkZXRlcm1pbmluZyB3aGF0IHN3aXRjaGVzIHRvIHBhc3MgdG8gXGZCY2MxXGZSLAorXCZcZkJjYzFwbHVzXGZSLCBcZkJhc1xmUiwgXGZCbGRcZlIsIGV0Yy4gIE1vcmUgdGhhbiBvbmUKK1wmXGZCXC1zcGVjcz1cZlJcZklmaWxlXGZSIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHRoZXkKK2FyZSBwcm9jZXNzZWQgaW4gb3JkZXIsIGZyb20gbGVmdCB0byByaWdodC4KKy5JUCAiXGZCXC1cLXN5c3Jvb3Q9XGZSXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLS1zeXNyb290PWRpciIKK1VzZSBcZklkaXJcZlIgYXMgdGhlIGxvZ2ljYWwgcm9vdCBkaXJlY3RvcnkgZm9yIGhlYWRlcnMgYW5kIGxpYnJhcmllcy4KK0ZvciBleGFtcGxlLCBpZiB0aGUgY29tcGlsZXIgbm9ybWFsbHkgc2VhcmNoZXMgZm9yIGhlYWRlcnMgaW4KK1wmXGZJL3Vzci9pbmNsdWRlXGZSIGFuZCBsaWJyYXJpZXMgaW4gXGZJL3Vzci9saWJcZlIsIGl0IGluc3RlYWQKK3NlYXJjaGVzIFxmSVxmSWRpclxmSS91c3IvaW5jbHVkZVxmUiBhbmQgXGZJXGZJZGlyXGZJL3Vzci9saWJcZlIuCisuU3AKK0lmIHlvdSB1c2UgYm90aCB0aGlzIG9wdGlvbiBhbmQgdGhlIFxmQlwtaXN5c3Jvb3RcZlIgb3B0aW9uLCB0aGVuCit0aGUgXGZCXC1cLXN5c3Jvb3RcZlIgb3B0aW9uIGFwcGxpZXMgdG8gbGlicmFyaWVzLCBidXQgdGhlCitcJlxmQlwtaXN5c3Jvb3RcZlIgb3B0aW9uIGFwcGxpZXMgdG8gaGVhZGVyIGZpbGVzLgorLlNwCitUaGUgXHMtMUdOVVxzMCBsaW5rZXIgKGJlZ2lubmluZyB3aXRoIHZlcnNpb24gMi4xNikgaGFzIHRoZSBuZWNlc3Nhcnkgc3VwcG9ydAorZm9yIHRoaXMgb3B0aW9uLiAgSWYgeW91ciBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wdGlvbiwgdGhlCitoZWFkZXIgZmlsZSBhc3BlY3Qgb2YgXGZCXC1cLXN5c3Jvb3RcZlIgc3RpbGwgd29ya3MsIGJ1dCB0aGUKK2xpYnJhcnkgYXNwZWN0IGRvZXMgbm90LgorLklQICJcZkJcLVwtbm9cLXN5c3Jvb3RcLXN1ZmZpeFxmUiIgNAorLklYIEl0ZW0gIi0tbm8tc3lzcm9vdC1zdWZmaXgiCitGb3Igc29tZSB0YXJnZXRzLCBhIHN1ZmZpeCBpcyBhZGRlZCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgc3BlY2lmaWVkCit3aXRoIFxmQlwtXC1zeXNyb290XGZSLCBkZXBlbmRpbmcgb24gdGhlIG90aGVyIG9wdGlvbnMgdXNlZCwgc28gdGhhdAoraGVhZGVycyBtYXkgZm9yIGV4YW1wbGUgYmUgZm91bmQgaW4KK1wmXGZJXGZJZGlyXGZJL1xmSXN1ZmZpeFxmSS91c3IvaW5jbHVkZVxmUiBpbnN0ZWFkIG9mCitcJlxmSVxmSWRpclxmSS91c3IvaW5jbHVkZVxmUi4gIFRoaXMgb3B0aW9uIGRpc2FibGVzIHRoZSBhZGRpdGlvbiBvZgorc3VjaCBhIHN1ZmZpeC4KKy5JUCAiXGZCXC1JXC1cZlIiIDQKKy5JWCBJdGVtICItSS0iCitUaGlzIG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkLiAgUGxlYXNlIHVzZSBcZkJcLWlxdW90ZVxmUiBpbnN0ZWFkIGZvcgorXCZcZkJcLUlcZlIgZGlyZWN0b3JpZXMgYmVmb3JlIHRoZSBcZkJcLUlcLVxmUiBhbmQgcmVtb3ZlIHRoZSBcZkJcLUlcLVxmUi4KK0FueSBkaXJlY3RvcmllcyB5b3Ugc3BlY2lmeSB3aXRoIFxmQlwtSVxmUiBvcHRpb25zIGJlZm9yZSB0aGUgXGZCXC1JXC1cZlIKK29wdGlvbiBhcmUgc2VhcmNoZWQgb25seSBmb3IgdGhlIGNhc2Ugb2YgXGZCI2luY2x1ZGUgIlxmUlxmSWZpbGVcZlJcZkIiXGZSOwordGhleSBhcmUgbm90IHNlYXJjaGVkIGZvciBcZkIjaW5jbHVkZSA8XGZSXGZJZmlsZVxmUlxmQj5cZlIuCisuU3AKK0lmIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMgYXJlIHNwZWNpZmllZCB3aXRoIFxmQlwtSVxmUiBvcHRpb25zIGFmdGVyCit0aGUgXGZCXC1JXC1cZlIsIHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBmb3IgYWxsIFxmQiNpbmNsdWRlXGZSCitkaXJlY3RpdmVzLiAgKE9yZGluYXJpbHkgXGZJYWxsXGZSIFxmQlwtSVxmUiBkaXJlY3RvcmllcyBhcmUgdXNlZAordGhpcyB3YXkuKQorLlNwCitJbiBhZGRpdGlvbiwgdGhlIFxmQlwtSVwtXGZSIG9wdGlvbiBpbmhpYml0cyB0aGUgdXNlIG9mIHRoZSBjdXJyZW50CitkaXJlY3RvcnkgKHdoZXJlIHRoZSBjdXJyZW50IGlucHV0IGZpbGUgY2FtZSBmcm9tKSBhcyB0aGUgZmlyc3Qgc2VhcmNoCitkaXJlY3RvcnkgZm9yIFxmQiNpbmNsdWRlICJcZlJcZklmaWxlXGZSXGZCIlxmUi4gIFRoZXJlIGlzIG5vIHdheSB0bworb3ZlcnJpZGUgdGhpcyBlZmZlY3Qgb2YgXGZCXC1JXC1cZlIuICBXaXRoIFxmQlwtSS5cZlIgeW91IGNhbiBzcGVjaWZ5CitzZWFyY2hpbmcgdGhlIGRpcmVjdG9yeSB0aGF0IGlzIGN1cnJlbnQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2ludm9rZWQuICBUaGF0IGlzIG5vdCBleGFjdGx5IHRoZSBzYW1lIGFzIHdoYXQgdGhlIHByZXByb2Nlc3NvciBkb2VzCitieSBkZWZhdWx0LCBidXQgaXQgaXMgb2Z0ZW4gc2F0aXNmYWN0b3J5LgorLlNwCitcJlxmQlwtSVwtXGZSIGRvZXMgbm90IGluaGliaXQgdGhlIHVzZSBvZiB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzCitmb3IgaGVhZGVyIGZpbGVzLiAgVGh1cywgXGZCXC1JXC1cZlIgYW5kIFxmQlwtbm9zdGRpbmNcZlIgYXJlCitpbmRlcGVuZGVudC4KKy5TUyAiU3BlY2lmeWluZyBUYXJnZXQgTWFjaGluZSBhbmQgQ29tcGlsZXIgVmVyc2lvbiIKKy5JWCBTdWJzZWN0aW9uICJTcGVjaWZ5aW5nIFRhcmdldCBNYWNoaW5lIGFuZCBDb21waWxlciBWZXJzaW9uIgorVGhlIHVzdWFsIHdheSB0byBydW4gXHMtMUdDQ1xzMCBpcyB0byBydW4gdGhlIGV4ZWN1dGFibGUgY2FsbGVkIFxmQmdjY1xmUiwgb3IKK1wmXGZJbWFjaGluZVxmUlxmQlwtZ2NjXGZSIHdoZW4gY3Jvc3MtY29tcGlsaW5nLCBvcgorXCZcZkltYWNoaW5lXGZSXGZCXC1nY2NcLVxmUlxmSXZlcnNpb25cZlIgdG8gcnVuIGEgdmVyc2lvbiBvdGhlciB0aGFuIHRoZQorb25lIHRoYXQgd2FzIGluc3RhbGxlZCBsYXN0LgorLlNTICJIYXJkd2FyZSBNb2RlbHMgYW5kIENvbmZpZ3VyYXRpb25zIgorLklYIFN1YnNlY3Rpb24gIkhhcmR3YXJlIE1vZGVscyBhbmQgQ29uZmlndXJhdGlvbnMiCitFYWNoIHRhcmdldCBtYWNoaW5lIHR5cGVzIGNhbiBoYXZlIGl0cyBvd24KK3NwZWNpYWwgb3B0aW9ucywgc3RhcnRpbmcgd2l0aCBcZkJcLW1cZlIsIHRvIGNob29zZSBhbW9uZyB2YXJpb3VzCitoYXJkd2FyZSBtb2RlbHMgb3IgY29uZmlndXJhdGlvbnNcLVwtXC1mb3IgZXhhbXBsZSwgNjgwMTAgdnMgNjgwMjAsCitmbG9hdGluZyBjb3Byb2Nlc3NvciBvciBub25lLiAgQSBzaW5nbGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlCitjb21waWxlciBjYW4gY29tcGlsZSBmb3IgYW55IG1vZGVsIG9yIGNvbmZpZ3VyYXRpb24sIGFjY29yZGluZyB0byB0aGUKK29wdGlvbnMgc3BlY2lmaWVkLgorLlBQCitTb21lIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSBjb21waWxlciBhbHNvIHN1cHBvcnQgYWRkaXRpb25hbCBzcGVjaWFsCitvcHRpb25zLCB1c3VhbGx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgY29tcGlsZXJzIG9uIHRoZSBzYW1lCitwbGF0Zm9ybS4KKy5QUAorXGZJQUFyY2g2NCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiQUFyY2g2NCBPcHRpb25zIgorLlBQCitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBBQXJjaDY0IGltcGxlbWVudGF0aW9uczoKKy5JUCAiXGZCXC1tYmlnXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWJpZy1lbmRpYW4iCitHZW5lcmF0ZSBiaWctZW5kaWFuIGNvZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gXHMtMUdDQ1xzMCBpcyBjb25maWd1cmVkIGZvciBhbgorXCZcZkJhYXJjaDY0X2JlXC0qXC0qXGZSIHRhcmdldC4KKy5JUCAiXGZCXC1tZ2VuZXJhbFwtcmVnc1wtb25seVxmUiIgNAorLklYIEl0ZW0gIi1tZ2VuZXJhbC1yZWdzLW9ubHkiCitHZW5lcmF0ZSBjb2RlIHdoaWNoIHVzZXMgb25seSB0aGUgZ2VuZXJhbCByZWdpc3RlcnMuCisuSVAgIlxmQlwtbWxpdHRsZVwtZW5kaWFuXGZSIiA0CisuSVggSXRlbSAiLW1saXR0bGUtZW5kaWFuIgorR2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBjb2RlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIFxzLTFHQ0NcczAgaXMgY29uZmlndXJlZCBmb3IgYW4KK1wmXGZCYWFyY2g2NFwtKlwtKlxmUiBidXQgbm90IGFuIFxmQmFhcmNoNjRfYmVcLSpcLSpcZlIgdGFyZ2V0LgorLklQICJcZkJcLW1jbW9kZWw9dGlueVxmUiIgNAorLklYIEl0ZW0gIi1tY21vZGVsPXRpbnkiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgdGlueSBjb2RlIG1vZGVsLiAgVGhlIHByb2dyYW0gYW5kIGl0cyBzdGF0aWNhbGx5IGRlZmluZWQKK3N5bWJvbHMgbXVzdCBiZSB3aXRoaW4gMUdCIG9mIGVhY2ggb3RoZXIuICBQb2ludGVycyBhcmUgNjQgYml0cy4gIFByb2dyYW1zIGNhbgorYmUgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSBsaW5rZWQuICBUaGlzIG1vZGVsIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCBhbmQKK21vc3RseSB0cmVhdGVkIGFzIFxmQnNtYWxsXGZSLgorLklQICJcZkJcLW1jbW9kZWw9c21hbGxcZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1zbWFsbCIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBzbWFsbCBjb2RlIG1vZGVsLiAgVGhlIHByb2dyYW0gYW5kIGl0cyBzdGF0aWNhbGx5IGRlZmluZWQKK3N5bWJvbHMgbXVzdCBiZSB3aXRoaW4gNEdCIG9mIGVhY2ggb3RoZXIuICBQb2ludGVycyBhcmUgNjQgYml0cy4gIFByb2dyYW1zIGNhbgorYmUgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSBsaW5rZWQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvZGUgbW9kZWwuCisuSVAgIlxmQlwtbWNtb2RlbD1sYXJnZVxmUiIgNAorLklYIEl0ZW0gIi1tY21vZGVsPWxhcmdlIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIGxhcmdlIGNvZGUgbW9kZWwuICBUaGlzIG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0CithZGRyZXNzZXMgYW5kIHNpemVzIG9mIHNlY3Rpb25zLiAgUG9pbnRlcnMgYXJlIDY0IGJpdHMuICBQcm9ncmFtcyBjYW4gYmUKK3N0YXRpY2FsbHkgbGlua2VkIG9ubHkuCisuSVAgIlxmQlwtbXN0cmljdFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbXN0cmljdC1hbGlnbiIKK0RvIG5vdCBhc3N1bWUgdGhhdCB1bmFsaWduZWQgbWVtb3J5IHJlZmVyZW5jZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uCisuSVAgIlxmQlwtbW9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyXGZSIiA0CisuSVggSXRlbSAiLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1vbWl0XC1sZWFmXC1mcmFtZVwtcG9pbnRlclxmUiIgNAorLklYIEl0ZW0gIi1tbm8tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIiCisuUEQKK09taXQgb3Iga2VlcCB0aGUgZnJhbWUgcG9pbnRlciBpbiBsZWFmIGZ1bmN0aW9ucy4gIFRoZSBmb3JtZXIgYmVoYXZpb3VyIGlzIHRoZQorZGVmYXVsdC4KKy5JUCAiXGZCXC1tdGxzXC1kaWFsZWN0PWRlc2NcZlIiIDQKKy5JWCBJdGVtICItbXRscy1kaWFsZWN0PWRlc2MiCitVc2UgXHMtMVRMU1xzMCBkZXNjcmlwdG9ycyBhcyB0aGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgbWVjaGFuaXNtIGZvciBkeW5hbWljIGFjY2Vzc2VzCitvZiBccy0xVExTXHMwIHZhcmlhYmxlcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbXRsc1wtZGlhbGVjdD10cmFkaXRpb25hbFxmUiIgNAorLklYIEl0ZW0gIi1tdGxzLWRpYWxlY3Q9dHJhZGl0aW9uYWwiCitVc2UgdHJhZGl0aW9uYWwgXHMtMVRMU1xzMCBhcyB0aGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgbWVjaGFuaXNtIGZvciBkeW5hbWljIGFjY2Vzc2VzCitvZiBccy0xVExTXHMwIHZhcmlhYmxlcy4KKy5JUCAiXGZCXC1tYXJjaD1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1hcmNoPW5hbWUiCitTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBvcHRpb25hbGx5IHN1ZmZpeGVkIGJ5IG9uZSBvcgorbW9yZSBmZWF0dXJlIG1vZGlmaWVycy4gIFRoaXMgb3B0aW9uIGhhcyB0aGUgZm9ybQorXCZcZkJcLW1hcmNoPVxmUlxmSWFyY2hcZlJ7XGZCK1xmUltcZkJub1xmUl1cZklmZWF0dXJlXGZSfSosIHdoZXJlIHRoZQorb25seSB2YWx1ZSBmb3IgXGZJYXJjaFxmUiBpcyBcZkJhcm12OFwtYVxmUi4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yCitcJlxmSWZlYXR1cmVcZlIgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIHN1Yi1zZWN0aW9uIGJlbG93LgorLlNwCitXaGVyZSBjb25mbGljdGluZyBmZWF0dXJlIG1vZGlmaWVycyBhcmUgc3BlY2lmaWVkLCB0aGUgcmlnaHQtbW9zdCBmZWF0dXJlIGlzCit1c2VkLgorLlNwCitcJlxzLTFHQ0NcczAgdXNlcyB0aGlzIG5hbWUgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgaXQgY2FuIGVtaXQgd2hlbgorZ2VuZXJhdGluZyBhc3NlbWJseSBjb2RlLiAgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvcgoraW5zdGVhZCBvZiB0aGUgXGZCXC1tY3B1PVxmUiBvcHRpb24uCisuSVAgIlxmQlwtbWNwdT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9bmFtZSIKK1NwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBwcm9jZXNzb3IsIG9wdGlvbmFsbHkgc3VmZml4ZWQgYnkgb25lIG9yIG1vcmUKK2ZlYXR1cmUgbW9kaWZpZXJzLiAgVGhpcyBvcHRpb24gaGFzIHRoZSBmb3JtCitcJlxmQlwtbWNwdT1cZlJcZkljcHVcZlJ7XGZCK1xmUltcZkJub1xmUl1cZklmZWF0dXJlXGZSfSosIHdoZXJlIHRoZQorcG9zc2libGUgdmFsdWVzIGZvciBcZkljcHVcZlIgYXJlIFxmQmdlbmVyaWNcZlIsIFxmQmxhcmdlXGZSLiAgVGhlCitwb3NzaWJsZSB2YWx1ZXMgZm9yIFxmSWZlYXR1cmVcZlIgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIHN1Yi1zZWN0aW9uCitiZWxvdy4KKy5TcAorV2hlcmUgY29uZmxpY3RpbmcgZmVhdHVyZSBtb2RpZmllcnMgYXJlIHNwZWNpZmllZCwgdGhlIHJpZ2h0LW1vc3QgZmVhdHVyZSBpcwordXNlZC4KKy5TcAorXCZccy0xR0NDXHMwIHVzZXMgdGhpcyBuYW1lIHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIGl0IGNhbiBlbWl0IHdoZW4KK2dlbmVyYXRpbmcgYXNzZW1ibHkgY29kZS4KKy5JUCAiXGZCXC1tdHVuZT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW10dW5lPW5hbWUiCitTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzb3IgdG8gdHVuZSB0aGUgcGVyZm9ybWFuY2UgZm9yLiAgVGhlIGNvZGUgd2lsbAorYmUgdHVuZWQgYXMgaWYgdGhlIHRhcmdldCBwcm9jZXNzb3Igd2VyZSBvZiB0aGUgdHlwZSBzcGVjaWZpZWQgaW4gdGhpcyBvcHRpb24sCitidXQgc3RpbGwgdXNpbmcgaW5zdHJ1Y3Rpb25zIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBzcGVjaWZpZWQKK2J5IGEgXGZCXC1tY3B1PVxmUiBvcHRpb24uICBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc3VmZml4ZWQgYnkgZmVhdHVyZQorbW9kaWZpZXJzLgorLlBQCitcZkJcLW1hcmNoXGZSIGFuZCBcZkJcLW1jcHVcZlIgZmVhdHVyZSBtb2RpZmllcnMKKy5JWCBTdWJzZWN0aW9uICItbWFyY2ggYW5kIC1tY3B1IGZlYXR1cmUgbW9kaWZpZXJzIgorLlBQCitGZWF0dXJlIG1vZGlmaWVycyB1c2VkIHdpdGggXGZCXC1tYXJjaFxmUiBhbmQgXGZCXC1tY3B1XGZSIGNhbiBiZSBvbmUKK3RoZSBmb2xsb3dpbmc6CisuSVAgIlxmQmNyY1xmUiIgNAorLklYIEl0ZW0gImNyYyIKK0VuYWJsZSBccy0xQ1JDXHMwIGV4dGVuc2lvbi4KKy5JUCAiXGZCY3J5cHRvXGZSIiA0CisuSVggSXRlbSAiY3J5cHRvIgorRW5hYmxlIENyeXB0byBleHRlbnNpb24uICBUaGlzIGltcGxpZXMgQWR2YW5jZWQgXHMtMVNJTURcczAgaXMgZW5hYmxlZC4KKy5JUCAiXGZCZnBcZlIiIDQKKy5JWCBJdGVtICJmcCIKK0VuYWJsZSBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQnNpbWRcZlIiIDQKKy5JWCBJdGVtICJzaW1kIgorRW5hYmxlIEFkdmFuY2VkIFxzLTFTSU1EXHMwIGluc3RydWN0aW9ucy4gIFRoaXMgaW1wbGllcyBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMKK2FyZSBlbmFibGVkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgYWxsIGN1cnJlbnQgcG9zc2libGUgdmFsdWVzIGZvciBvcHRpb25zCitcJlxmQlwtbWFyY2hcZlIgYW5kIFxmQlwtbWNwdT1cZlIuCisuUFAKK1xmSUFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJBZGFwdGV2YSBFcGlwaGFueSBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgQWRhcHRldmEgRXBpcGhhbnk6CisuSVAgIlxmQlwtbWhhbGZcLXJlZ1wtZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1taGFsZi1yZWctZmlsZSIKK0Rvbid0IGFsbG9jYXRlIGFueSByZWdpc3RlciBpbiB0aGUgcmFuZ2UgXGYoQ1dcKihDYHIzMlwqKEMnXGZSLi4uXGYoQ1dcKihDYHI2M1wqKEMnXGZSLgorVGhhdCBhbGxvd3MgY29kZSB0byBydW4gb24gaGFyZHdhcmUgdmFyaWFudHMgdGhhdCBsYWNrIHRoZXNlIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tcHJlZmVyXC1zaG9ydFwtaW5zblwtcmVnc1xmUiIgNAorLklYIEl0ZW0gIi1tcHJlZmVyLXNob3J0LWluc24tcmVncyIKK1ByZWZlcnJlbnRpYWxseSBhbGxvY2F0ZSByZWdpc3RlcnMgdGhhdCBhbGxvdyBzaG9ydCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLgorVGhpcyBjYW4gcmVzdWx0IGluIGluY3JlYXNlZCBpbnN0cnVjdGlvbiBjb3VudCwgc28gdGhpcyBtYXkgZWl0aGVyIHJlZHVjZSBvcgoraW5jcmVhc2Ugb3ZlcmFsbCBjb2RlIHNpemUuCisuSVAgIlxmQlwtbWJyYW5jaFwtY29zdD1cZlJcZkludW1cZlIiIDQKKy5JWCBJdGVtICItbWJyYW5jaC1jb3N0PW51bSIKK1NldCB0aGUgY29zdCBvZiBicmFuY2hlcyB0byByb3VnaGx5IFxmSW51bVxmUiBcKihMInNpbXBsZVwqKFIiIGluc3RydWN0aW9ucy4KK1RoaXMgY29zdCBpcyBvbmx5IGEgaGV1cmlzdGljIGFuZCBpcyBub3QgZ3VhcmFudGVlZCB0byBwcm9kdWNlCitjb25zaXN0ZW50IHJlc3VsdHMgYWNyb3NzIHJlbGVhc2VzLgorLklQICJcZkJcLW1jbW92ZVxmUiIgNAorLklYIEl0ZW0gIi1tY21vdmUiCitFbmFibGUgdGhlIGdlbmVyYXRpb24gb2YgY29uZGl0aW9uYWwgbW92ZXMuCisuSVAgIlxmQlwtbW5vcHM9XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLW1ub3BzPW51bSIKK0VtaXQgXGZJbnVtXGZSIE5PUHMgYmVmb3JlIGV2ZXJ5IG90aGVyIGdlbmVyYXRlZCBpbnN0cnVjdGlvbi4KKy5JUCAiXGZCXC1tbm9cLXNvZnRcLWNtcHNmXGZSIiA0CisuSVggSXRlbSAiLW1uby1zb2Z0LWNtcHNmIgorRm9yIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbnMsIGVtaXQgYW4gXGYoQ1dcKihDYGZzdWJcKihDJ1xmUiBpbnN0cnVjdGlvbgorYW5kIHRlc3QgdGhlIGZsYWdzLiAgVGhpcyBpcyBmYXN0ZXIgdGhhbiBhIHNvZnR3YXJlIGNvbXBhcmlzb24sIGJ1dCBjYW4KK2dldCBpbmNvcnJlY3QgcmVzdWx0cyBpbiB0aGUgcHJlc2VuY2Ugb2YgTmFOcywgb3Igd2hlbiB0d28gZGlmZmVyZW50IHNtYWxsCitudW1iZXJzIGFyZSBjb21wYXJlZCBzdWNoIHRoYXQgdGhlaXIgZGlmZmVyZW5jZSBpcyBjYWxjdWxhdGVkIGFzIHplcm8uCitUaGUgZGVmYXVsdCBpcyBcZkJcLW1zb2Z0XC1jbXBzZlxmUiwgd2hpY2ggdXNlcyBzbG93ZXIsIGJ1dCBJRUVFLWNvbXBsaWFudCwKK3NvZnR3YXJlIGNvbXBhcmlzb25zLgorLklQICJcZkJcLW1zdGFja1wtb2Zmc2V0PVxmUlxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1tc3RhY2stb2Zmc2V0PW51bSIKK1NldCB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIHRvcCBvZiB0aGUgc3RhY2sgYW5kIHRoZSBzdGFjayBwb2ludGVyLgorRS5nLiwgYSB2YWx1ZSBvZiA4IG1lYW5zIHRoYXQgdGhlIGVpZ2h0IGJ5dGVzIGluIHRoZSByYW5nZSBcZihDV1wqKENgc3ArMC4uLnNwKzdcKihDJ1xmUgorY2FuIGJlIHVzZWQgYnkgbGVhZiBmdW5jdGlvbnMgd2l0aG91dCBzdGFjayBhbGxvY2F0aW9uLgorVmFsdWVzIG90aGVyIHRoYW4gXGZCOFxmUiBvciBcZkIxNlxmUiBhcmUgdW50ZXN0ZWQgYW5kIHVubGlrZWx5IHRvIHdvcmsuCitOb3RlIGFsc28gdGhhdCB0aGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBccy0xQUJJXHMwOyBjb21waWxpbmcgYSBwcm9ncmFtIHdpdGggYQorZGlmZmVyZW50IHN0YWNrIG9mZnNldCB0aGFuIHRoZSBsaWJyYXJpZXMgaGF2ZSBiZWVuIGNvbXBpbGVkIHdpdGgKK2dlbmVyYWxseSBkb2VzIG5vdCB3b3JrLgorVGhpcyBvcHRpb24gY2FuIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBldmFsdWF0ZSBpZiBhIGRpZmZlcmVudCBzdGFjaworb2Zmc2V0IHdvdWxkIGdpdmUgeW91IGJldHRlciBjb2RlLCBidXQgdG8gYWN0dWFsbHkgdXNlIGEgZGlmZmVyZW50IHN0YWNrCitvZmZzZXQgdG8gYnVpbGQgd29ya2luZyBwcm9ncmFtcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gY29uZmlndXJlIHRoZQordG9vbGNoYWluIHdpdGggdGhlIGFwcHJvcHJpYXRlIFxmQlwtXC13aXRoXC1zdGFja1wtb2Zmc2V0PVxmUlxmSW51bVxmUiBvcHRpb24uCisuSVAgIlxmQlwtbW5vXC1yb3VuZFwtbmVhcmVzdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcm91bmQtbmVhcmVzdCIKK01ha2UgdGhlIHNjaGVkdWxlciBhc3N1bWUgdGhhdCB0aGUgcm91bmRpbmcgbW9kZSBoYXMgYmVlbiBzZXQgdG8KK3RydW5jYXRpbmcuICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1yb3VuZFwtbmVhcmVzdFxmUi4KKy5JUCAiXGZCXC1tbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctY2FsbHMiCitJZiBub3Qgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSBhbiBhdHRyaWJ1dGUsIGFzc3VtZSBhbGwgY2FsbHMgbWlnaHQgYmUgYmV5b25kCit0aGUgb2Zmc2V0IHJhbmdlIG9mIHRoZSBcZihDV1wqKENgYlwqKEMnXGZSIC8gXGYoQ1dcKihDYGJsXCooQydcZlIgaW5zdHJ1Y3Rpb25zLCBhbmQgdGhlcmVmb3JlIGxvYWQgdGhlCitmdW5jdGlvbiBhZGRyZXNzIGludG8gYSByZWdpc3RlciBiZWZvcmUgcGVyZm9ybWluZyBhIChvdGhlcndpc2UgZGlyZWN0KSBjYWxsLgorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tc2hvcnRcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1zaG9ydC1jYWxscyIKK0lmIG5vdCBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IGFuIGF0dHJpYnV0ZSwgYXNzdW1lIGFsbCBkaXJlY3QgY2FsbHMgYXJlCitpbiB0aGUgcmFuZ2Ugb2YgdGhlIFxmKENXXCooQ2BiXCooQydcZlIgLyBcZihDV1wqKENgYmxcKihDJ1xmUiBpbnN0cnVjdGlvbnMsIHNvIHVzZSB0aGVzZSBpbnN0cnVjdGlvbnMKK2ZvciBkaXJlY3QgY2FsbHMuICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1sb25nXC1jYWxsc1xmUi4KKy5JUCAiXGZCXC1tc21hbGwxNlxmUiIgNAorLklYIEl0ZW0gIi1tc21hbGwxNiIKK0Fzc3VtZSBhZGRyZXNzZXMgY2FuIGJlIGxvYWRlZCBhcyAxNlwtYml0IHVuc2lnbmVkIHZhbHVlcy4gIFRoaXMgZG9lcyBub3QKK2FwcGx5IHRvIGZ1bmN0aW9uIGFkZHJlc3NlcyBmb3Igd2hpY2ggXGZCXC1tbG9uZ1wtY2FsbHNcZlIgc2VtYW50aWNzCithcmUgaW4gZWZmZWN0LgorLklQICJcZkJcLW1mcFwtbW9kZT1cZlJcZkltb2RlXGZSIiA0CisuSVggSXRlbSAiLW1mcC1tb2RlPW1vZGUiCitTZXQgdGhlIHByZXZhaWxpbmcgbW9kZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgdW5pdC4KK1RoaXMgZGV0ZXJtaW5lcyB0aGUgZmxvYXRpbmctcG9pbnQgbW9kZSB0aGF0IGlzIHByb3ZpZGVkIGFuZCBleHBlY3RlZAorYXQgZnVuY3Rpb24gY2FsbCBhbmQgcmV0dXJuIHRpbWUuICBNYWtpbmcgdGhpcyBtb2RlIG1hdGNoIHRoZSBtb2RlIHlvdQorcHJlZG9taW5hbnRseSBuZWVkIGF0IGZ1bmN0aW9uIHN0YXJ0IGNhbiBtYWtlIHlvdXIgcHJvZ3JhbXMgc21hbGxlciBhbmQKK2Zhc3RlciBieSBhdm9pZGluZyB1bm5lY2Vzc2FyeSBtb2RlIHN3aXRjaGVzLgorLlNwCitcJlxmSW1vZGVcZlIgY2FuIGJlIHNldCB0byBvbmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuUlMgNAorLklQICJcZkJjYWxsZXJcZlIiIDQKKy5JWCBJdGVtICJjYWxsZXIiCitBbnkgbW9kZSBhdCBmdW5jdGlvbiBlbnRyeSBpcyB2YWxpZCwgYW5kIHJldGFpbmVkIG9yIHJlc3RvcmVkIHdoZW4KK3RoZSBmdW5jdGlvbiByZXR1cm5zLCBhbmQgd2hlbiBpdCBjYWxscyBvdGhlciBmdW5jdGlvbnMuCitUaGlzIG1vZGUgaXMgdXNlZnVsIGZvciBjb21waWxpbmcgbGlicmFyaWVzIG9yIG90aGVyIGNvbXBpbGF0aW9uIHVuaXRzCit5b3UgbWlnaHQgd2FudCB0byBpbmNvcnBvcmF0ZSBpbnRvIGRpZmZlcmVudCBwcm9ncmFtcyB3aXRoIGRpZmZlcmVudAorcHJldmFpbGluZyBccy0xRlBVXHMwIG1vZGVzLCBhbmQgdGhlIGNvbnZlbmllbmNlIG9mIGJlaW5nIGFibGUgdG8gdXNlIGEgc2luZ2xlCitvYmplY3QgZmlsZSBvdXR3ZWlnaHMgdGhlIHNpemUgYW5kIHNwZWVkIG92ZXJoZWFkIGZvciBhbnkgZXh0cmEKK21vZGUgc3dpdGNoaW5nIHRoYXQgbWlnaHQgYmUgbmVlZGVkLCBjb21wYXJlZCB3aXRoIHdoYXQgd291bGQgYmUgbmVlZGVkCit3aXRoIGEgbW9yZSBzcGVjaWZpYyBjaG9pY2Ugb2YgcHJldmFpbGluZyBccy0xRlBVXHMwIG1vZGUuCisuSVAgIlxmQnRydW5jYXRlXGZSIiA0CisuSVggSXRlbSAidHJ1bmNhdGUiCitUaGlzIGlzIHRoZSBtb2RlIHVzZWQgZm9yIGZsb2F0aW5nLXBvaW50IGNhbGN1bGF0aW9ucyB3aXRoCit0cnVuY2F0aW5nIChpLmUuIHJvdW5kIHRvd2FyZHMgemVybykgcm91bmRpbmcgbW9kZS4gIFRoYXQgaW5jbHVkZXMKK2NvbnZlcnNpb24gZnJvbSBmbG9hdGluZyBwb2ludCB0byBpbnRlZ2VyLgorLklQICJcZkJyb3VuZC1uZWFyZXN0XGZSIiA0CisuSVggSXRlbSAicm91bmQtbmVhcmVzdCIKK1RoaXMgaXMgdGhlIG1vZGUgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb25zIHdpdGgKK3JvdW5kLXRvLW5lYXJlc3Qtb3ItZXZlbiByb3VuZGluZyBtb2RlLgorLklQICJcZkJpbnRcZlIiIDQKKy5JWCBJdGVtICJpbnQiCitUaGlzIGlzIHRoZSBtb2RlIHVzZWQgdG8gcGVyZm9ybSBpbnRlZ2VyIGNhbGN1bGF0aW9ucyBpbiB0aGUgXHMtMUZQVVxzMCwgZS5nLgoraW50ZWdlciBtdWx0aXBseSwgb3IgaW50ZWdlciBtdWx0aXBseS1hbmQtYWNjdW11bGF0ZS4KKy5SRQorLlJTIDQKKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1tZnBcLW1vZGU9Y2FsbGVyXGZSCisuUkUKKy5JUCAiXGZCXC1tbm9zcGxpdFwtbG9oaVxmUiIgNAorLklYIEl0ZW0gIi1tbm9zcGxpdC1sb2hpIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBvc3RpbmNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBvc3RpbmMiCisuSVAgIlxmQlwtbW5vXC1wb3N0bW9kaWZ5XGZSIiA0CisuSVggSXRlbSAiLW1uby1wb3N0bW9kaWZ5IgorLlBECitDb2RlIGdlbmVyYXRpb24gdHdlYWtzIHRoYXQgZGlzYWJsZSwgcmVzcGVjdGl2ZWx5LCBzcGxpdHRpbmcgb2YgMzJcLWJpdAorbG9hZHMsIGdlbmVyYXRpb24gb2YgcG9zdC1pbmNyZW1lbnQgYWRkcmVzc2VzLCBhbmQgZ2VuZXJhdGlvbiBvZgorcG9zdC1tb2RpZnkgYWRkcmVzc2VzLiAgVGhlIGRlZmF1bHRzIGFyZSBcZkJtc3BsaXQtbG9oaVxmUiwKK1wmXGZCXC1tcG9zdFwtaW5jXGZSLCBhbmQgXGZCXC1tcG9zdFwtbW9kaWZ5XGZSLgorLklQICJcZkJcLW1ub3ZlY3RcLWRvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tbm92ZWN0LWRvdWJsZSIKK0NoYW5nZSB0aGUgcHJlZmVycmVkIFxzLTFTSU1EXHMwIG1vZGUgdG8gU0ltb2RlLiAgVGhlIGRlZmF1bHQgaXMKK1wmXGZCXC1tdmVjdFwtZG91YmxlXGZSLCB3aGljaCB1c2VzIERJbW9kZSBhcyBwcmVmZXJyZWQgXHMtMVNJTURcczAgbW9kZS4KKy5JUCAiXGZCXC1tYXhcLXZlY3RcLWFsaWduPVxmUlxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1tYXgtdmVjdC1hbGlnbj1udW0iCitUaGUgbWF4aW11bSBhbGlnbm1lbnQgZm9yIFxzLTFTSU1EXHMwIHZlY3RvciBtb2RlIHR5cGVzLgorXCZcZkludW1cZlIgbWF5IGJlIDQgb3IgOC4gIFRoZSBkZWZhdWx0IGlzIDguCitOb3RlIHRoYXQgdGhpcyBpcyBhbiBccy0xQUJJXHMwIGNoYW5nZSwgZXZlbiB0aG91Z2ggbWFueSBsaWJyYXJ5IGZ1bmN0aW9uCitpbnRlcmZhY2VzIGFyZSB1bmFmZmVjdGVkIGlmIHRoZXkgZG9uJ3QgdXNlIFxzLTFTSU1EXHMwIHZlY3RvciBtb2RlcworaW4gcGxhY2VzIHRoYXQgYWZmZWN0IHNpemUgYW5kL29yIGFsaWdubWVudCBvZiByZWxldmFudCB0eXBlcy4KKy5JUCAiXGZCXC1tc3BsaXRcLXZlY21vdmVcLWVhcmx5XGZSIiA0CisuSVggSXRlbSAiLW1zcGxpdC12ZWNtb3ZlLWVhcmx5IgorU3BsaXQgdmVjdG9yIG1vdmVzIGludG8gc2luZ2xlIHdvcmQgbW92ZXMgYmVmb3JlIHJlbG9hZC4gIEluIHRoZW9yeSB0aGlzCitjYW4gZ2l2ZSBiZXR0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgYnV0IHNvIGZhciB0aGUgcmV2ZXJzZSBzZWVtcyB0byBiZQorZ2VuZXJhbGx5IHRoZSBjYXNlLgorLklQICJcZkJcLW0xcmVnXC1cZlJcZklyZWdcZlIiIDQKKy5JWCBJdGVtICItbTFyZWctcmVnIgorU3BlY2lmeSBhIHJlZ2lzdGVyIHRvIGhvbGQgdGhlIGNvbnN0YW50IFwtMSwgd2hpY2ggbWFrZXMgbG9hZGluZyBzbWFsbCBuZWdhdGl2ZQorY29uc3RhbnRzIGFuZCBjZXJ0YWluIGJpdG1hc2tzIGZhc3Rlci4KK0FsbG93YWJsZSB2YWx1ZXMgZm9yIFxmSXJlZ1xmUiBhcmUgXGZCcjQzXGZSIGFuZCBcZkJyNjNcZlIsCit3aGljaCBzcGVjaWZ5IHVzZSBvZiB0aGF0IHJlZ2lzdGVyIGFzIGEgZml4ZWQgcmVnaXN0ZXIsCithbmQgXGZCbm9uZVxmUiwgd2hpY2ggbWVhbnMgdGhhdCBubyByZWdpc3RlciBpcyB1c2VkIGZvciB0aGlzCitwdXJwb3NlLiAgVGhlIGRlZmF1bHQgaXMgXGZCXC1tMXJlZ1wtbm9uZVxmUi4KKy5QUAorXGZJXHMtMUFSTVxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiQVJNIE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBBZHZhbmNlZCBccy0xUklTQ1xzMCBNYWNoaW5lcyAoXHMtMUFSTVxzMCkKK2FyY2hpdGVjdHVyZXM6CisuSVAgIlxmQlwtbWFiaT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1hYmk9bmFtZSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgXHMtMUFCSVxzMC4gIFBlcm1pc3NpYmxlIHZhbHVlcyBhcmU6IFxmQmFwY3MtZ251XGZSLAorXCZcZkJhdHBjc1xmUiwgXGZCYWFwY3NcZlIsIFxmQmFhcGNzLWxpbnV4XGZSIGFuZCBcZkJpd21teHRcZlIuCisuSVAgIlxmQlwtbWFwY3NcLWZyYW1lXGZSIiA0CisuSVggSXRlbSAiLW1hcGNzLWZyYW1lIgorR2VuZXJhdGUgYSBzdGFjayBmcmFtZSB0aGF0IGlzIGNvbXBsaWFudCB3aXRoIHRoZSBccy0xQVJNXHMwIFByb2NlZHVyZSBDYWxsCitTdGFuZGFyZCBmb3IgYWxsIGZ1bmN0aW9ucywgZXZlbiBpZiB0aGlzIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yCitjb3JyZWN0IGV4ZWN1dGlvbiBvZiB0aGUgY29kZS4gIFNwZWNpZnlpbmcgXGZCXC1mb21pdFwtZnJhbWVcLXBvaW50ZXJcZlIKK3dpdGggdGhpcyBvcHRpb24gY2F1c2VzIHRoZSBzdGFjayBmcmFtZXMgbm90IHRvIGJlIGdlbmVyYXRlZCBmb3IKK2xlYWYgZnVuY3Rpb25zLiAgVGhlIGRlZmF1bHQgaXMgXGZCXC1tbm9cLWFwY3NcLWZyYW1lXGZSLgorLklQICJcZkJcLW1hcGNzXGZSIiA0CisuSVggSXRlbSAiLW1hcGNzIgorVGhpcyBpcyBhIHN5bm9ueW0gZm9yIFxmQlwtbWFwY3NcLWZyYW1lXGZSLgorLklQICJcZkJcLW10aHVtYlwtaW50ZXJ3b3JrXGZSIiA0CisuSVggSXRlbSAiLW10aHVtYi1pbnRlcndvcmsiCitHZW5lcmF0ZSBjb2RlIHRoYXQgc3VwcG9ydHMgY2FsbGluZyBiZXR3ZWVuIHRoZSBccy0xQVJNXHMwIGFuZCBUaHVtYgoraW5zdHJ1Y3Rpb24gc2V0cy4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIG9uIHByZVwtdjUgYXJjaGl0ZWN0dXJlcywgdGhlCit0d28gaW5zdHJ1Y3Rpb24gc2V0cyBjYW5ub3QgYmUgcmVsaWFibHkgdXNlZCBpbnNpZGUgb25lIHByb2dyYW0uICBUaGUKK2RlZmF1bHQgaXMgXGZCXC1tbm9cLXRodW1iXC1pbnRlcndvcmtcZlIsIHNpbmNlIHNsaWdodGx5IGxhcmdlciBjb2RlCitpcyBnZW5lcmF0ZWQgd2hlbiBcZkJcLW10aHVtYlwtaW50ZXJ3b3JrXGZSIGlzIHNwZWNpZmllZC4gIEluIFxzLTFBQVBDU1xzMAorY29uZmlndXJhdGlvbnMgdGhpcyBvcHRpb24gaXMgbWVhbmluZ2xlc3MuCisuSVAgIlxmQlwtbW5vXC1zY2hlZFwtcHJvbG9nXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1wcm9sb2ciCitQcmV2ZW50IHRoZSByZW9yZGVyaW5nIG9mIGluc3RydWN0aW9ucyBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUsIG9yIHRoZQorbWVyZ2luZyBvZiB0aG9zZSBpbnN0cnVjdGlvbiB3aXRoIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGZ1bmN0aW9uJ3MKK2JvZHkuICBUaGlzIG1lYW5zIHRoYXQgYWxsIGZ1bmN0aW9ucyBzdGFydCB3aXRoIGEgcmVjb2duaXphYmxlIHNldAorb2YgaW5zdHJ1Y3Rpb25zIChvciBpbiBmYWN0IG9uZSBvZiBhIGNob2ljZSBmcm9tIGEgc21hbGwgc2V0IG9mCitkaWZmZXJlbnQgZnVuY3Rpb24gcHJvbG9ndWVzKSwgYW5kIHRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQgdG8KK2xvY2F0ZSB0aGUgc3RhcnQgb2YgZnVuY3Rpb25zIGluc2lkZSBhbiBleGVjdXRhYmxlIHBpZWNlIG9mIGNvZGUuICBUaGUKK2RlZmF1bHQgaXMgXGZCXC1tc2NoZWRcLXByb2xvZ1xmUi4KKy5JUCAiXGZCXC1tZmxvYXRcLWFiaT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1mbG9hdC1hYmk9bmFtZSIKK1NwZWNpZmllcyB3aGljaCBmbG9hdGluZy1wb2ludCBccy0xQUJJXHMwIHRvIHVzZS4gIFBlcm1pc3NpYmxlIHZhbHVlcworYXJlOiBcZkJzb2Z0XGZSLCBcZkJzb2Z0ZnBcZlIgYW5kIFxmQmhhcmRcZlIuCisuU3AKK1NwZWNpZnlpbmcgXGZCc29mdFxmUiBjYXVzZXMgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZworbGlicmFyeSBjYWxscyBmb3IgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KK1wmXGZCc29mdGZwXGZSIGFsbG93cyB0aGUgZ2VuZXJhdGlvbiBvZiBjb2RlIHVzaW5nIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50CitpbnN0cnVjdGlvbnMsIGJ1dCBzdGlsbCB1c2VzIHRoZSBzb2Z0LWZsb2F0IGNhbGxpbmcgY29udmVudGlvbnMuCitcJlxmQmhhcmRcZlIgYWxsb3dzIGdlbmVyYXRpb24gb2YgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zCithbmQgdXNlcyBGUFUtc3BlY2lmaWMgY2FsbGluZyBjb252ZW50aW9ucy4KKy5TcAorVGhlIGRlZmF1bHQgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgdGFyZ2V0IGNvbmZpZ3VyYXRpb24uICBOb3RlIHRoYXQKK3RoZSBoYXJkLWZsb2F0IGFuZCBzb2Z0LWZsb2F0IEFCSXMgYXJlIG5vdCBsaW5rLWNvbXBhdGlibGU7IHlvdSBtdXN0Citjb21waWxlIHlvdXIgZW50aXJlIHByb2dyYW0gd2l0aCB0aGUgc2FtZSBccy0xQUJJXHMwLCBhbmQgbGluayB3aXRoIGEKK2NvbXBhdGlibGUgc2V0IG9mIGxpYnJhcmllcy4KKy5JUCAiXGZCXC1tbGl0dGxlXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWxpdHRsZS1lbmRpYW4iCitHZW5lcmF0ZSBjb2RlIGZvciBhIHByb2Nlc3NvciBydW5uaW5nIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4gIFRoaXMgaXMKK3RoZSBkZWZhdWx0IGZvciBhbGwgc3RhbmRhcmQgY29uZmlndXJhdGlvbnMuCisuSVAgIlxmQlwtbWJpZ1wtZW5kaWFuXGZSIiA0CisuSVggSXRlbSAiLW1iaWctZW5kaWFuIgorR2VuZXJhdGUgY29kZSBmb3IgYSBwcm9jZXNzb3IgcnVubmluZyBpbiBiaWctZW5kaWFuIG1vZGU7IHRoZSBkZWZhdWx0IGlzCit0byBjb21waWxlIGNvZGUgZm9yIGEgbGl0dGxlLWVuZGlhbiBwcm9jZXNzb3IuCisuSVAgIlxmQlwtbXdvcmRzXC1saXR0bGVcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1td29yZHMtbGl0dGxlLWVuZGlhbiIKK1RoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB3aGVuIGdlbmVyYXRpbmcgY29kZSBmb3IgYmlnLWVuZGlhbiBwcm9jZXNzb3JzLgorR2VuZXJhdGUgY29kZSBmb3IgYSBsaXR0bGUtZW5kaWFuIHdvcmQgb3JkZXIgYnV0IGEgYmlnLWVuZGlhbiBieXRlCitvcmRlci4gIFRoYXQgaXMsIGEgYnl0ZSBvcmRlciBvZiB0aGUgZm9ybSBcZkIzMjEwNzY1NFxmUi4gIE5vdGU6IHRoaXMKK29wdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSByZXF1aXJlIGNvbXBhdGliaWxpdHkgd2l0aCBjb2RlIGZvcgorYmlnLWVuZGlhbiBccy0xQVJNXHMwIHByb2Nlc3NvcnMgZ2VuZXJhdGVkIGJ5IHZlcnNpb25zIG9mIHRoZSBjb21waWxlciBwcmlvciB0bworMi44LiAgVGhpcyBvcHRpb24gaXMgbm93IGRlcHJlY2F0ZWQuCisuSVAgIlxmQlwtbWNwdT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9bmFtZSIKK1RoaXMgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgXHMtMUFSTVxzMCBwcm9jZXNzb3IuICBccy0xR0NDXHMwIHVzZXMgdGhpcyBuYW1lCit0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIGluc3RydWN0aW9ucyBpdCBjYW4gZW1pdCB3aGVuIGdlbmVyYXRpbmcKK2Fzc2VtYmx5IGNvZGUuICBQZXJtaXNzaWJsZSBuYW1lcyBhcmU6IFxmQmFybTJcZlIsIFxmQmFybTI1MFxmUiwKK1wmXGZCYXJtM1xmUiwgXGZCYXJtNlxmUiwgXGZCYXJtNjBcZlIsIFxmQmFybTYwMFxmUiwgXGZCYXJtNjEwXGZSLAorXCZcZkJhcm02MjBcZlIsIFxmQmFybTdcZlIsIFxmQmFybTdtXGZSLCBcZkJhcm03ZFxmUiwgXGZCYXJtN2RtXGZSLAorXCZcZkJhcm03ZGlcZlIsIFxmQmFybTdkbWlcZlIsIFxmQmFybTcwXGZSLCBcZkJhcm03MDBcZlIsCitcJlxmQmFybTcwMGlcZlIsIFxmQmFybTcxMFxmUiwgXGZCYXJtNzEwY1xmUiwgXGZCYXJtNzEwMFxmUiwKK1wmXGZCYXJtNzIwXGZSLAorXCZcZkJhcm03NTAwXGZSLCBcZkJhcm03NTAwZmVcZlIsIFxmQmFybTd0ZG1pXGZSLCBcZkJhcm03dGRtaVwtc1xmUiwKK1wmXGZCYXJtNzEwdFxmUiwgXGZCYXJtNzIwdFxmUiwgXGZCYXJtNzQwdFxmUiwKK1wmXGZCc3Ryb25nYXJtXGZSLCBcZkJzdHJvbmdhcm0xMTBcZlIsIFxmQnN0cm9uZ2FybTExMDBcZlIsCitcJlxmQnN0cm9uZ2FybTExMTBcZlIsCitcJlxmQmFybThcZlIsIFxmQmFybTgxMFxmUiwgXGZCYXJtOVxmUiwgXGZCYXJtOWVcZlIsIFxmQmFybTkyMFxmUiwKK1wmXGZCYXJtOTIwdFxmUiwgXGZCYXJtOTIydFxmUiwgXGZCYXJtOTQ2ZVwtc1xmUiwgXGZCYXJtOTY2ZVwtc1xmUiwKK1wmXGZCYXJtOTY4ZVwtc1xmUiwgXGZCYXJtOTI2ZWpcLXNcZlIsIFxmQmFybTk0MHRcZlIsIFxmQmFybTl0ZG1pXGZSLAorXCZcZkJhcm0xMHRkbWlcZlIsIFxmQmFybTEwMjB0XGZSLCBcZkJhcm0xMDI2ZWpcLXNcZlIsCitcJlxmQmFybTEwZVxmUiwgXGZCYXJtMTAyMGVcZlIsIFxmQmFybTEwMjJlXGZSLAorXCZcZkJhcm0xMTM2alwtc1xmUiwgXGZCYXJtMTEzNmpmXC1zXGZSLCBcZkJtcGNvcmVcZlIsIFxmQm1wY29yZW5vdmZwXGZSLAorXCZcZkJhcm0xMTU2dDJcLXNcZlIsIFxmQmFybTExNTZ0MmZcLXNcZlIsIFxmQmFybTExNzZqelwtc1xmUiwgXGZCYXJtMTE3Nmp6Zlwtc1xmUiwKK1wmXGZCY29ydGV4XC1hNVxmUiwgXGZCY29ydGV4XC1hN1xmUiwgXGZCY29ydGV4XC1hOFxmUiwgXGZCY29ydGV4XC1hOVxmUiwgCitcJlxmQmNvcnRleFwtYTE1XGZSLCBcZkJjb3J0ZXhcLWE1M1xmUiwgXGZCY29ydGV4XC1yNFxmUiwgXGZCY29ydGV4XC1yNGZcZlIsCitcJlxmQmNvcnRleFwtcjVcZlIsIFxmQmNvcnRleFwtcjdcZlIsIFxmQmNvcnRleFwtbTRcZlIsIFxmQmNvcnRleFwtbTNcZlIsCitcJlxmQmNvcnRleFwtbTFcZlIsCitcJlxmQmNvcnRleFwtbTBcZlIsCitcJlxmQmNvcnRleFwtbTBwbHVzXGZSLAorXCZcZkJtYXJ2ZWxsXC1wajRcZlIsCitcJlxmQnhzY2FsZVxmUiwgXGZCaXdtbXh0XGZSLCBcZkJpd21teHQyXGZSLCBcZkJlcDkzMTJcZlIsCitcJlxmQmZhNTI2XGZSLCBcZkJmYTYyNlxmUiwKK1wmXGZCZmE2MDZ0ZVxmUiwgXGZCZmE2MjZ0ZVxmUiwgXGZCZm1wNjI2XGZSLCBcZkJmYTcyNnRlXGZSLgorLlNwCitcJlxmQlwtbWNwdT1nZW5lcmljXC1cZlJcZklhcmNoXGZSIGlzIGFsc28gcGVybWlzc2libGUsIGFuZCBpcworZXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPVxmUlxmSWFyY2hcZlIgXGZCXC1tdHVuZT1nZW5lcmljXC1cZlJcZklhcmNoXGZSLgorU2VlIFxmQlwtbXR1bmVcZlIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuU3AKK1wmXGZCXC1tY3B1PW5hdGl2ZVxmUiBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGF1dG8tZGV0ZWN0IHRoZSBccy0xQ1BVXHMwCitvZiB0aGUgYnVpbGQgY29tcHV0ZXIuICBBdCBwcmVzZW50LCB0aGlzIGZlYXR1cmUgaXMgb25seSBzdXBwb3J0ZWQgb24KK0xpbnV4LCBhbmQgbm90IGFsbCBhcmNoaXRlY3R1cmVzIGFyZSByZWNvZ25pemVkLiAgSWYgdGhlIGF1dG8tZGV0ZWN0IGlzCit1bnN1Y2Nlc3NmdWwgdGhlIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorLklQICJcZkJcLW10dW5lPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9bmFtZSIKK1RoaXMgb3B0aW9uIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgXGZCXC1tY3B1PVxmUiBvcHRpb24sIGV4Y2VwdCB0aGF0CitpbnN0ZWFkIG9mIHNwZWNpZnlpbmcgdGhlIGFjdHVhbCB0YXJnZXQgcHJvY2Vzc29yIHR5cGUsIGFuZCBoZW5jZQorcmVzdHJpY3Rpbmcgd2hpY2ggaW5zdHJ1Y3Rpb25zIGNhbiBiZSB1c2VkLCBpdCBzcGVjaWZpZXMgdGhhdCBccy0xR0NDXHMwIHNob3VsZAordHVuZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGNvZGUgYXMgaWYgdGhlIHRhcmdldCB3ZXJlIG9mIHRoZSB0eXBlCitzcGVjaWZpZWQgaW4gdGhpcyBvcHRpb24sIGJ1dCBzdGlsbCBjaG9vc2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGl0CitnZW5lcmF0ZXMgYmFzZWQgb24gdGhlIFxzLTFDUFVcczAgc3BlY2lmaWVkIGJ5IGEgXGZCXC1tY3B1PVxmUiBvcHRpb24uCitGb3Igc29tZSBccy0xQVJNXHMwIGltcGxlbWVudGF0aW9ucyBiZXR0ZXIgcGVyZm9ybWFuY2UgY2FuIGJlIG9idGFpbmVkIGJ5IHVzaW5nCit0aGlzIG9wdGlvbi4KKy5TcAorXCZcZkJcLW10dW5lPWdlbmVyaWNcLVxmUlxmSWFyY2hcZlIgc3BlY2lmaWVzIHRoYXQgXHMtMUdDQ1xzMCBzaG91bGQgdHVuZSB0aGUKK3BlcmZvcm1hbmNlIGZvciBhIGJsZW5kIG9mIHByb2Nlc3NvcnMgd2l0aGluIGFyY2hpdGVjdHVyZSBcZklhcmNoXGZSLgorVGhlIGFpbSBpcyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgcnVuIHdlbGwgb24gdGhlIGN1cnJlbnQgbW9zdCBwb3B1bGFyCitwcm9jZXNzb3JzLCBiYWxhbmNpbmcgYmV0d2VlbiBvcHRpbWl6YXRpb25zIHRoYXQgYmVuZWZpdCBzb21lIENQVXMgaW4gdGhlCityYW5nZSwgYW5kIGF2b2lkaW5nIHBlcmZvcm1hbmNlIHBpdGZhbGxzIG9mIG90aGVyIENQVXMuICBUaGUgZWZmZWN0cyBvZgordGhpcyBvcHRpb24gbWF5IGNoYW5nZSBpbiBmdXR1cmUgXHMtMUdDQ1xzMCB2ZXJzaW9ucyBhcyBccy0xQ1BVXHMwIG1vZGVscyBjb21lIGFuZCBnby4KKy5TcAorXCZcZkJcLW10dW5lPW5hdGl2ZVxmUiBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGF1dG8tZGV0ZWN0IHRoZSBccy0xQ1BVXHMwCitvZiB0aGUgYnVpbGQgY29tcHV0ZXIuICBBdCBwcmVzZW50LCB0aGlzIGZlYXR1cmUgaXMgb25seSBzdXBwb3J0ZWQgb24KK0xpbnV4LCBhbmQgbm90IGFsbCBhcmNoaXRlY3R1cmVzIGFyZSByZWNvZ25pemVkLiAgSWYgdGhlIGF1dG8tZGV0ZWN0IGlzCit1bnN1Y2Nlc3NmdWwgdGhlIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorLklQICJcZkJcLW1hcmNoPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWFyY2g9bmFtZSIKK1RoaXMgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgXHMtMUFSTVxzMCBhcmNoaXRlY3R1cmUuICBccy0xR0NDXHMwIHVzZXMgdGhpcworbmFtZSB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIGluc3RydWN0aW9ucyBpdCBjYW4gZW1pdCB3aGVuIGdlbmVyYXRpbmcKK2Fzc2VtYmx5IGNvZGUuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG9yIGluc3RlYWQKK29mIHRoZSBcZkJcLW1jcHU9XGZSIG9wdGlvbi4gIFBlcm1pc3NpYmxlIG5hbWVzIGFyZTogXGZCYXJtdjJcZlIsCitcJlxmQmFybXYyYVxmUiwgXGZCYXJtdjNcZlIsIFxmQmFybXYzbVxmUiwgXGZCYXJtdjRcZlIsIFxmQmFybXY0dFxmUiwKK1wmXGZCYXJtdjVcZlIsIFxmQmFybXY1dFxmUiwgXGZCYXJtdjVlXGZSLCBcZkJhcm12NXRlXGZSLAorXCZcZkJhcm12NlxmUiwgXGZCYXJtdjZqXGZSLAorXCZcZkJhcm12NnQyXGZSLCBcZkJhcm12NnpcZlIsIFxmQmFybXY2emtcZlIsIFxmQmFybXY2XC1tXGZSLAorXCZcZkJhcm12N1xmUiwgXGZCYXJtdjdcLWFcZlIsIFxmQmFybXY3XC1yXGZSLCBcZkJhcm12N1wtbVxmUiwKK1wmXGZCYXJtdjhcLWFcZlIsCitcJlxmQml3bW14dFxmUiwgXGZCaXdtbXh0MlxmUiwgXGZCZXA5MzEyXGZSLgorLlNwCitcJlxmQlwtbWFyY2g9bmF0aXZlXGZSIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gYXV0by1kZXRlY3QgdGhlIGFyY2hpdGVjdHVyZQorb2YgdGhlIGJ1aWxkIGNvbXB1dGVyLiAgQXQgcHJlc2VudCwgdGhpcyBmZWF0dXJlIGlzIG9ubHkgc3VwcG9ydGVkIG9uCitMaW51eCwgYW5kIG5vdCBhbGwgYXJjaGl0ZWN0dXJlcyBhcmUgcmVjb2duaXplZC4gIElmIHRoZSBhdXRvLWRldGVjdCBpcwordW5zdWNjZXNzZnVsIHRoZSBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKy5JUCAiXGZCXC1tZnB1PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWZwdT1uYW1lIgorVGhpcyBzcGVjaWZpZXMgd2hhdCBmbG9hdGluZy1wb2ludCBoYXJkd2FyZSAob3IgaGFyZHdhcmUgZW11bGF0aW9uKSBpcworYXZhaWxhYmxlIG9uIHRoZSB0YXJnZXQuICBQZXJtaXNzaWJsZSBuYW1lcyBhcmU6IFxmQnZmcFxmUiwgXGZCdmZwdjNcZlIsCitcJlxmQnZmcHYzXC1mcDE2XGZSLCBcZkJ2ZnB2M1wtZDE2XGZSLCBcZkJ2ZnB2M1wtZDE2XC1mcDE2XGZSLCBcZkJ2ZnB2M3hkXGZSLAorXCZcZkJ2ZnB2M3hkXC1mcDE2XGZSLCBcZkJuZW9uXGZSLCBcZkJuZW9uXC1mcDE2XGZSLCBcZkJ2ZnB2NFxmUiwKK1wmXGZCdmZwdjRcLWQxNlxmUiwgXGZCZnB2NFwtc3BcLWQxNlxmUiwgXGZCbmVvblwtdmZwdjRcZlIsCitcJlxmQmZwXC1hcm12OFxmUiwgXGZCbmVvblwtZnBcLWFybXY4XGZSLCBhbmQgXGZCY3J5cHRvXC1uZW9uXC1mcFwtYXJtdjhcZlIuCisuU3AKK0lmIFxmQlwtbXNvZnRcLWZsb2F0XGZSIGlzIHNwZWNpZmllZCB0aGlzIHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mCitmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisuU3AKK0lmIHRoZSBzZWxlY3RlZCBmbG9hdGluZy1wb2ludCBoYXJkd2FyZSBpbmNsdWRlcyB0aGUgXHMtMU5FT05cczAgZXh0ZW5zaW9uCisoZS5nLiBcZkJcLW1mcHVcZlI9XGZCbmVvblxmUiksIG5vdGUgdGhhdCBmbG9hdGluZy1wb2ludAorb3BlcmF0aW9ucyBhcmUgbm90IGdlbmVyYXRlZCBieSBccy0xR0NDXHMwJ3MgYXV0by12ZWN0b3JpemF0aW9uIHBhc3MgdW5sZXNzCitcJlxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiBpcyBhbHNvIHNwZWNpZmllZC4gIFRoaXMgaXMKK2JlY2F1c2UgXHMtMU5FT05cczAgaGFyZHdhcmUgZG9lcyBub3QgZnVsbHkgaW1wbGVtZW50IHRoZSBccy0xSUVFRVxzMCA3NTQgc3RhbmRhcmQgZm9yCitmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIChpbiBwYXJ0aWN1bGFyIGRlbm9ybWFsIHZhbHVlcyBhcmUgdHJlYXRlZCBhcworemVybyksIHNvIHRoZSB1c2Ugb2YgXHMtMU5FT05cczAgaW5zdHJ1Y3Rpb25zIG1heSBsZWFkIHRvIGEgbG9zcyBvZiBwcmVjaXNpb24uCisuSVAgIlxmQlwtbWZwMTZcLWZvcm1hdD1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1mcDE2LWZvcm1hdD1uYW1lIgorU3BlY2lmeSB0aGUgZm9ybWF0IG9mIHRoZSBcZihDV1wqKENgX1x8X2ZwMTZcKihDJ1xmUiBoYWxmLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCB0eXBlLgorUGVybWlzc2libGUgbmFtZXMgYXJlIFxmQm5vbmVcZlIsIFxmQmllZWVcZlIsIGFuZCBcZkJhbHRlcm5hdGl2ZVxmUjsKK3RoZSBkZWZhdWx0IGlzIFxmQm5vbmVcZlIsIGluIHdoaWNoIGNhc2UgdGhlIFxmKENXXCooQ2BfXHxfZnAxNlwqKEMnXGZSIHR5cGUgaXMgbm90CitkZWZpbmVkLgorLklQICJcZkJcLW1zdHJ1Y3R1cmVcLXNpemVcLWJvdW5kYXJ5PVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItbXN0cnVjdHVyZS1zaXplLWJvdW5kYXJ5PW4iCitUaGUgc2l6ZXMgb2YgYWxsIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBhcmUgcm91bmRlZCB1cCB0byBhIG11bHRpcGxlCitvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGJ5IHRoaXMgb3B0aW9uLiAgUGVybWlzc2libGUgdmFsdWVzIGFyZSA4LCAzMgorYW5kIDY0LiAgVGhlIGRlZmF1bHQgdmFsdWUgdmFyaWVzIGZvciBkaWZmZXJlbnQgdG9vbGNoYWlucy4gIEZvciB0aGUgXHMtMUNPRkZcczAKK3RhcmdldGVkIHRvb2xjaGFpbiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyA4LiAgQSB2YWx1ZSBvZiA2NCBpcyBvbmx5IGFsbG93ZWQKK2lmIHRoZSB1bmRlcmx5aW5nIFxzLTFBQklcczAgc3VwcG9ydHMgaXQuCisuU3AKK1NwZWNpZnlpbmcgYSBsYXJnZXIgbnVtYmVyIGNhbiBwcm9kdWNlIGZhc3RlciwgbW9yZSBlZmZpY2llbnQgY29kZSwgYnV0CitjYW4gYWxzbyBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcHJvZ3JhbS4gIERpZmZlcmVudCB2YWx1ZXMgYXJlIHBvdGVudGlhbGx5CitpbmNvbXBhdGlibGUuICBDb2RlIGNvbXBpbGVkIHdpdGggb25lIHZhbHVlIGNhbm5vdCBuZWNlc3NhcmlseSBleHBlY3QgdG8KK3dvcmsgd2l0aCBjb2RlIG9yIGxpYnJhcmllcyBjb21waWxlZCB3aXRoIGFub3RoZXIgdmFsdWUsIGlmIHRoZXkgZXhjaGFuZ2UKK2luZm9ybWF0aW9uIHVzaW5nIHN0cnVjdHVyZXMgb3IgdW5pb25zLgorLklQICJcZkJcLW1hYm9ydFwtb25cLW5vcmV0dXJuXGZSIiA0CisuSVggSXRlbSAiLW1hYm9ydC1vbi1ub3JldHVybiIKK0dlbmVyYXRlIGEgY2FsbCB0byB0aGUgZnVuY3Rpb24gXGYoQ1dcKihDYGFib3J0XCooQydcZlIgYXQgdGhlIGVuZCBvZiBhCitcJlxmKENXXCooQ2Bub3JldHVyblwqKEMnXGZSIGZ1bmN0aW9uLiAgSXQgaXMgZXhlY3V0ZWQgaWYgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvCityZXR1cm4uCisuSVAgIlxmQlwtbWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1sb25nLWNhbGxzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1uby1sb25nLWNhbGxzIgorLlBECitUZWxscyB0aGUgY29tcGlsZXIgdG8gcGVyZm9ybSBmdW5jdGlvbiBjYWxscyBieSBmaXJzdCBsb2FkaW5nIHRoZQorYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gaW50byBhIHJlZ2lzdGVyIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBzdWJyb3V0aW5lCitjYWxsIG9uIHRoaXMgcmVnaXN0ZXIuICBUaGlzIHN3aXRjaCBpcyBuZWVkZWQgaWYgdGhlIHRhcmdldCBmdW5jdGlvbgorbGllcyBvdXRzaWRlIG9mIHRoZSA2NFwtbWVnYWJ5dGUgYWRkcmVzc2luZyByYW5nZSBvZiB0aGUgb2Zmc2V0LWJhc2VkCit2ZXJzaW9uIG9mIHN1YnJvdXRpbmUgY2FsbCBpbnN0cnVjdGlvbi4KKy5TcAorRXZlbiBpZiB0aGlzIHN3aXRjaCBpcyBlbmFibGVkLCBub3QgYWxsIGZ1bmN0aW9uIGNhbGxzIGFyZSB0dXJuZWQKK2ludG8gbG9uZyBjYWxscy4gIFRoZSBoZXVyaXN0aWMgaXMgdGhhdCBzdGF0aWMgZnVuY3Rpb25zLCBmdW5jdGlvbnMKK3RoYXQgaGF2ZSB0aGUgXGZCc2hvcnQtY2FsbFxmUiBhdHRyaWJ1dGUsIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnNpZGUKK3RoZSBzY29wZSBvZiBhIFxmQiNwcmFnbWEgbm9fbG9uZ19jYWxsc1xmUiBkaXJlY3RpdmUsIGFuZCBmdW5jdGlvbnMgd2hvc2UKK2RlZmluaXRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGNvbXBpbGVkIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbgordW5pdCBhcmUgbm90IHR1cm5lZCBpbnRvIGxvbmcgY2FsbHMuICBUaGUgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUgYXJlCit0aGF0IHdlYWsgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIGZ1bmN0aW9ucyB3aXRoIHRoZSBcZkJsb25nLWNhbGxcZlIKK2F0dHJpYnV0ZSBvciB0aGUgXGZCc2VjdGlvblxmUiBhdHRyaWJ1dGUsIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgd2l0aGluCit0aGUgc2NvcGUgb2YgYSBcZkIjcHJhZ21hIGxvbmdfY2FsbHNcZlIgZGlyZWN0aXZlIGFyZSBhbHdheXMKK3R1cm5lZCBpbnRvIGxvbmcgY2FsbHMuCisuU3AKK1RoaXMgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiAgU3BlY2lmeWluZworXCZcZkJcLW1ub1wtbG9uZ1wtY2FsbHNcZlIgcmVzdG9yZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIGFzIGRvZXMKK3BsYWNpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGUgc2NvcGUgb2YgYSBcZkIjcHJhZ21hCitsb25nX2NhbGxzX29mZlxmUiBkaXJlY3RpdmUuICBOb3RlIHRoZXNlIHN3aXRjaGVzIGhhdmUgbm8gZWZmZWN0IG9uIGhvdwordGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBjb2RlIHRvIGhhbmRsZSBmdW5jdGlvbiBjYWxscyB2aWEgZnVuY3Rpb24KK3BvaW50ZXJzLgorLklQICJcZkJcLW1zaW5nbGVcLXBpY1wtYmFzZVxmUiIgNAorLklYIEl0ZW0gIi1tc2luZ2xlLXBpYy1iYXNlIgorVHJlYXQgdGhlIHJlZ2lzdGVyIHVzZWQgZm9yIFxzLTFQSUNcczAgYWRkcmVzc2luZyBhcyByZWFkLW9ubHksIHJhdGhlciB0aGFuCitsb2FkaW5nIGl0IGluIHRoZSBwcm9sb2d1ZSBmb3IgZWFjaCBmdW5jdGlvbi4gIFRoZSBydW50aW1lIHN5c3RlbSBpcworcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGlzIHJlZ2lzdGVyIHdpdGggYW4gYXBwcm9wcmlhdGUgdmFsdWUKK2JlZm9yZSBleGVjdXRpb24gYmVnaW5zLgorLklQICJcZkJcLW1waWNcLXJlZ2lzdGVyPVxmUlxmSXJlZ1xmUiIgNAorLklYIEl0ZW0gIi1tcGljLXJlZ2lzdGVyPXJlZyIKK1NwZWNpZnkgdGhlIHJlZ2lzdGVyIHRvIGJlIHVzZWQgZm9yIFxzLTFQSUNcczAgYWRkcmVzc2luZy4gIFRoZSBkZWZhdWx0IGlzIFIxMAordW5sZXNzIHN0YWNrLWNoZWNraW5nIGlzIGVuYWJsZWQsIHdoZW4gUjkgaXMgdXNlZC4KKy5JUCAiXGZCXC1tcG9rZVwtZnVuY3Rpb25cLW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbXBva2UtZnVuY3Rpb24tbmFtZSIKK1dyaXRlIHRoZSBuYW1lIG9mIGVhY2ggZnVuY3Rpb24gaW50byB0aGUgdGV4dCBzZWN0aW9uLCBkaXJlY3RseQorcHJlY2VkaW5nIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4gIFRoZSBnZW5lcmF0ZWQgY29kZSBpcyBzaW1pbGFyIHRvIHRoaXM6CisuU3AKKy5WYiA5CitcJiAgICAgICAgICAgICB0MAorXCYgICAgICAgICAgICAgICAgIC5hc2NpaSAiYXJtX3Bva2VfZnVuY3Rpb25fbmFtZSIsIDAKK1wmICAgICAgICAgICAgICAgICAuYWxpZ24KK1wmICAgICAgICAgICAgIHQxCitcJiAgICAgICAgICAgICAgICAgLndvcmQgMHhmZjAwMDAwMCArICh0MSBcLSB0MCkKK1wmICAgICAgICAgICAgIGFybV9wb2tlX2Z1bmN0aW9uX25hbWUKK1wmICAgICAgICAgICAgICAgICBtb3YgICAgIGlwLCBzcAorXCYgICAgICAgICAgICAgICAgIHN0bWZkICAgc3AhLCB7ZnAsIGlwLCBsciwgcGN9CitcJiAgICAgICAgICAgICAgICAgc3ViICAgICBmcCwgaXAsICM0CisuVmUKKy5TcAorV2hlbiBwZXJmb3JtaW5nIGEgc3RhY2sgYmFja3RyYWNlLCBjb2RlIGNhbiBpbnNwZWN0IHRoZSB2YWx1ZSBvZgorXCZcZihDV1wqKENgcGNcKihDJ1xmUiBzdG9yZWQgYXQgXGYoQ1dcKihDYGZwICsgMFwqKEMnXGZSLiAgSWYgdGhlIHRyYWNlIGZ1bmN0aW9uIHRoZW4gbG9va3MgYXQKK2xvY2F0aW9uIFxmKENXXCooQ2BwYyBcLSAxMlwqKEMnXGZSIGFuZCB0aGUgdG9wIDggYml0cyBhcmUgc2V0LCB0aGVuIHdlIGtub3cgdGhhdAordGhlcmUgaXMgYSBmdW5jdGlvbiBuYW1lIGVtYmVkZGVkIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGlzIGxvY2F0aW9uCithbmQgaGFzIGxlbmd0aCBcZihDV1wqKENgKChwY1tcLTNdKSAmIDB4ZmYwMDAwMDApXCooQydcZlIuCisuSVAgIlxmQlwtbXRodW1iXGZSIiA0CisuSVggSXRlbSAiLW10aHVtYiIKKy5QRCAwCisuSVAgIlxmQlwtbWFybVxmUiIgNAorLklYIEl0ZW0gIi1tYXJtIgorLlBECitTZWxlY3QgYmV0d2VlbiBnZW5lcmF0aW5nIGNvZGUgdGhhdCBleGVjdXRlcyBpbiBccy0xQVJNXHMwIGFuZCBUaHVtYgorc3RhdGVzLiAgVGhlIGRlZmF1bHQgZm9yIG1vc3QgY29uZmlndXJhdGlvbnMgaXMgdG8gZ2VuZXJhdGUgY29kZQordGhhdCBleGVjdXRlcyBpbiBccy0xQVJNXHMwIHN0YXRlLCBidXQgdGhlIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgYnkKK2NvbmZpZ3VyaW5nIFxzLTFHQ0NcczAgd2l0aCB0aGUgXGZCXC1cLXdpdGhcLW1vZGU9XGZSXGZJc3RhdGVcZlIKK2NvbmZpZ3VyZSBvcHRpb24uCisuSVAgIlxmQlwtbXRwY3NcLWZyYW1lXGZSIiA0CisuSVggSXRlbSAiLW10cGNzLWZyYW1lIgorR2VuZXJhdGUgYSBzdGFjayBmcmFtZSB0aGF0IGlzIGNvbXBsaWFudCB3aXRoIHRoZSBUaHVtYiBQcm9jZWR1cmUgQ2FsbAorU3RhbmRhcmQgZm9yIGFsbCBub24tbGVhZiBmdW5jdGlvbnMuICAoQSBsZWFmIGZ1bmN0aW9uIGlzIG9uZSB0aGF0IGRvZXMKK25vdCBjYWxsIGFueSBvdGhlciBmdW5jdGlvbnMuKSAgVGhlIGRlZmF1bHQgaXMgXGZCXC1tbm9cLXRwY3NcLWZyYW1lXGZSLgorLklQICJcZkJcLW10cGNzXC1sZWFmXC1mcmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tdHBjcy1sZWFmLWZyYW1lIgorR2VuZXJhdGUgYSBzdGFjayBmcmFtZSB0aGF0IGlzIGNvbXBsaWFudCB3aXRoIHRoZSBUaHVtYiBQcm9jZWR1cmUgQ2FsbAorU3RhbmRhcmQgZm9yIGFsbCBsZWFmIGZ1bmN0aW9ucy4gIChBIGxlYWYgZnVuY3Rpb24gaXMgb25lIHRoYXQgZG9lcworbm90IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9ucy4pICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1ub1wtYXBjc1wtbGVhZlwtZnJhbWVcZlIuCisuSVAgIlxmQlwtbWNhbGxlZVwtc3VwZXJcLWludGVyd29ya2luZ1xmUiIgNAorLklYIEl0ZW0gIi1tY2FsbGVlLXN1cGVyLWludGVyd29ya2luZyIKK0dpdmVzIGFsbCBleHRlcm5hbGx5IHZpc2libGUgZnVuY3Rpb25zIGluIHRoZSBmaWxlIGJlaW5nIGNvbXBpbGVkIGFuIFxzLTFBUk1cczAKK2luc3RydWN0aW9uIHNldCBoZWFkZXIgd2hpY2ggc3dpdGNoZXMgdG8gVGh1bWIgbW9kZSBiZWZvcmUgZXhlY3V0aW5nIHRoZQorcmVzdCBvZiB0aGUgZnVuY3Rpb24uICBUaGlzIGFsbG93cyB0aGVzZSBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGZyb20KK25vbi1pbnRlcndvcmtpbmcgY29kZS4gIFRoaXMgb3B0aW9uIGlzIG5vdCB2YWxpZCBpbiBccy0xQUFQQ1NcczAgY29uZmlndXJhdGlvbnMKK2JlY2F1c2UgaW50ZXJ3b3JraW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tY2FsbGVyXC1zdXBlclwtaW50ZXJ3b3JraW5nXGZSIiA0CisuSVggSXRlbSAiLW1jYWxsZXItc3VwZXItaW50ZXJ3b3JraW5nIgorQWxsb3dzIGNhbGxzIHZpYSBmdW5jdGlvbiBwb2ludGVycyAoaW5jbHVkaW5nIHZpcnR1YWwgZnVuY3Rpb25zKSB0bworZXhlY3V0ZSBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB0YXJnZXQgY29kZSBoYXMgYmVlbgorY29tcGlsZWQgZm9yIGludGVyd29ya2luZyBvciBub3QuICBUaGVyZSBpcyBhIHNtYWxsIG92ZXJoZWFkIGluIHRoZSBjb3N0CitvZiBleGVjdXRpbmcgYSBmdW5jdGlvbiBwb2ludGVyIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuICBUaGlzIG9wdGlvbgoraXMgbm90IHZhbGlkIGluIFxzLTFBQVBDU1xzMCBjb25maWd1cmF0aW9ucyBiZWNhdXNlIGludGVyd29ya2luZyBpcyBlbmFibGVkCitieSBkZWZhdWx0LgorLklQICJcZkJcLW10cD1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW10cD1uYW1lIgorU3BlY2lmeSB0aGUgYWNjZXNzIG1vZGVsIGZvciB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgcG9pbnRlci4gIFRoZSB2YWxpZAorbW9kZWxzIGFyZSBcZkJzb2Z0XGZSLCB3aGljaCBnZW5lcmF0ZXMgY2FsbHMgdG8gXGYoQ1dcKihDYF9cfF9hZWFiaV9yZWFkX3RwXCooQydcZlIsCitcJlxmQmNwMTVcZlIsIHdoaWNoIGZldGNoZXMgdGhlIHRocmVhZCBwb2ludGVyIGZyb20gXGYoQ1dcKihDYGNwMTVcKihDJ1xmUiBkaXJlY3RseQorKHN1cHBvcnRlZCBpbiB0aGUgYXJtNmsgYXJjaGl0ZWN0dXJlKSwgYW5kIFxmQmF1dG9cZlIsIHdoaWNoIHVzZXMgdGhlCitiZXN0IGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoZSBzZWxlY3RlZCBwcm9jZXNzb3IuICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzCitcJlxmQmF1dG9cZlIuCisuSVAgIlxmQlwtbXRsc1wtZGlhbGVjdD1cZlJcZklkaWFsZWN0XGZSIiA0CisuSVggSXRlbSAiLW10bHMtZGlhbGVjdD1kaWFsZWN0IgorU3BlY2lmeSB0aGUgZGlhbGVjdCB0byB1c2UgZm9yIGFjY2Vzc2luZyB0aHJlYWQgbG9jYWwgc3RvcmFnZS4gIFR3bworXCZcZklkaWFsZWN0XGZScyBhcmUgc3VwcG9ydGVkXC1cLVwtXGZCZ251XGZSIGFuZCBcZkJnbnUyXGZSLiAgVGhlCitcJlxmQmdudVxmUiBkaWFsZWN0IHNlbGVjdHMgdGhlIG9yaWdpbmFsIFxzLTFHTlVcczAgc2NoZW1lIGZvciBzdXBwb3J0aW5nCitsb2NhbCBhbmQgZ2xvYmFsIGR5bmFtaWMgXHMtMVRMU1xzMCBtb2RlbHMuICBUaGUgXGZCZ251MlxmUiBkaWFsZWN0CitzZWxlY3RzIHRoZSBccy0xR05VXHMwIGRlc2NyaXB0b3Igc2NoZW1lLCB3aGljaCBwcm92aWRlcyBiZXR0ZXIgcGVyZm9ybWFuY2UKK2ZvciBzaGFyZWQgbGlicmFyaWVzLiAgVGhlIFxzLTFHTlVcczAgZGVzY3JpcHRvciBzY2hlbWUgaXMgY29tcGF0aWJsZSB3aXRoCit0aGUgb3JpZ2luYWwgc2NoZW1lLCBidXQgZG9lcyByZXF1aXJlIG5ldyBhc3NlbWJsZXIsIGxpbmtlciBhbmQKK2xpYnJhcnkgc3VwcG9ydC4gIEluaXRpYWwgYW5kIGxvY2FsIGV4ZWMgXHMtMVRMU1xzMCBtb2RlbHMgYXJlIHVuYWZmZWN0ZWQgYnkKK3RoaXMgb3B0aW9uIGFuZCBhbHdheXMgdXNlIHRoZSBvcmlnaW5hbCBzY2hlbWUuCisuSVAgIlxmQlwtbXdvcmRcLXJlbG9jYXRpb25zXGZSIiA0CisuSVggSXRlbSAiLW13b3JkLXJlbG9jYXRpb25zIgorT25seSBnZW5lcmF0ZSBhYnNvbHV0ZSByZWxvY2F0aW9ucyBvbiB3b3JkLXNpemVkIHZhbHVlcyAoaS5lLiBSX0FSTV9BQlMzMikuCitUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB0YXJnZXRzICh1Q2xpbnV4LCBTeW1iaWFuT1MpIHdoZXJlIHRoZSBydW50aW1lCitsb2FkZXIgaW1wb3NlcyB0aGlzIHJlc3RyaWN0aW9uLCBhbmQgd2hlbiBcZkJcLWZwaWNcZlIgb3IgXGZCXC1mUElDXGZSCitpcyBzcGVjaWZpZWQuCisuSVAgIlxmQlwtbWZpeFwtY29ydGV4XC1tM1wtbGRyZFxmUiIgNAorLklYIEl0ZW0gIi1tZml4LWNvcnRleC1tMy1sZHJkIgorU29tZSBDb3J0ZXhcLU0zIGNvcmVzIGNhbiBjYXVzZSBkYXRhIGNvcnJ1cHRpb24gd2hlbiBcZihDV1wqKENgbGRyZFwqKEMnXGZSIGluc3RydWN0aW9ucword2l0aCBvdmVybGFwcGluZyBkZXN0aW5hdGlvbiBhbmQgYmFzZSByZWdpc3RlcnMgYXJlIHVzZWQuICBUaGlzIG9wdGlvbiBhdm9pZHMKK2dlbmVyYXRpbmcgdGhlc2UgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4KK1wmXGZCXC1tY3B1PWNvcnRleFwtbTNcZlIgaXMgc3BlY2lmaWVkLgorLklQICJcZkJcLW11bmFsaWduZWRcLWFjY2Vzc1xmUiIgNAorLklYIEl0ZW0gIi1tdW5hbGlnbmVkLWFjY2VzcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC11bmFsaWduZWRcLWFjY2Vzc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tdW5hbGlnbmVkLWFjY2VzcyIKKy5QRAorRW5hYmxlcyAob3IgZGlzYWJsZXMpIHJlYWRpbmcgYW5kIHdyaXRpbmcgb2YgMTZcLSBhbmQgMzJcLSBiaXQgdmFsdWVzCitmcm9tIGFkZHJlc3NlcyB0aGF0IGFyZSBub3QgMTZcLSBvciAzMlwtIGJpdCBhbGlnbmVkLiAgQnkgZGVmYXVsdAordW5hbGlnbmVkIGFjY2VzcyBpcyBkaXNhYmxlZCBmb3IgYWxsIHByZVwtQVJNdjYgYW5kIGFsbCBBUk12NlwtTQorYXJjaGl0ZWN0dXJlcywgYW5kIGVuYWJsZWQgZm9yIGFsbCBvdGhlciBhcmNoaXRlY3R1cmVzLiAgSWYgdW5hbGlnbmVkCithY2Nlc3MgaXMgbm90IGVuYWJsZWQgdGhlbiB3b3JkcyBpbiBwYWNrZWQgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwgYmUKK2FjY2Vzc2VkIGEgYnl0ZSBhdCBhIHRpbWUuCisuU3AKK1RoZSBccy0xQVJNXHMwIGF0dHJpYnV0ZSBcZihDV1wqKENgVGFnX0NQVV91bmFsaWduZWRfYWNjZXNzXCooQydcZlIgd2lsbCBiZSBzZXQgaW4gdGhlCitnZW5lcmF0ZWQgb2JqZWN0IGZpbGUgdG8gZWl0aGVyIHRydWUgb3IgZmFsc2UsIGRlcGVuZGluZyB1cG9uIHRoZQorc2V0dGluZyBvZiB0aGlzIG9wdGlvbi4gIElmIHVuYWxpZ25lZCBhY2Nlc3MgaXMgZW5hYmxlZCB0aGVuIHRoZQorcHJlcHJvY2Vzc29yIHN5bWJvbCBcZihDV1wqKENgX1x8X0FSTV9GRUFUVVJFX1VOQUxJR05FRFwqKEMnXGZSIHdpbGwgYWxzbyBiZQorZGVmaW5lZC4KKy5JUCAiXGZCXC1tbmVvblwtZm9yXC02NGJpdHNcZlIiIDQKKy5JWCBJdGVtICItbW5lb24tZm9yLTY0Yml0cyIKK0VuYWJsZXMgdXNpbmcgTmVvbiB0byBoYW5kbGUgc2NhbGFyIDY0XC1iaXRzIG9wZXJhdGlvbnMuIFRoaXMgaXMKK2Rpc2FibGVkIGJ5IGRlZmF1bHQgc2luY2UgdGhlIGNvc3Qgb2YgbW92aW5nIGRhdGEgZnJvbSBjb3JlIHJlZ2lzdGVycwordG8gTmVvbiBpcyBoaWdoLgorLklQICJcZkJcLW1yZXN0cmljdFwtaXRcZlIiIDQKKy5JWCBJdGVtICItbXJlc3RyaWN0LWl0IgorUmVzdHJpY3RzIGdlbmVyYXRpb24gb2YgXHMtMUlUXHMwIGJsb2NrcyB0byBjb25mb3JtIHRvIHRoZSBydWxlcyBvZiBBUk12OC4KK1wmXHMtMUlUXHMwIGJsb2NrcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIDE2XC1iaXQgaW5zdHJ1Y3Rpb24gZnJvbSBhIHNlbGVjdAorc2V0IG9mIGluc3RydWN0aW9ucy4gVGhpcyBvcHRpb24gaXMgb24gYnkgZGVmYXVsdCBmb3IgQVJNdjggVGh1bWIgbW9kZS4KKy5QUAorXGZJXHMtMUFWUlxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiQVZSIE9wdGlvbnMiCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIFxzLTFBVlJcczAgaW1wbGVtZW50YXRpb25zOgorLklQICJcZkJcLW1tY3U9XGZSXGZJbWN1XGZSIiA0CisuSVggSXRlbSAiLW1tY3U9bWN1IgorU3BlY2lmeSBBdG1lbCBccy0xQVZSXHMwIGluc3RydWN0aW9uIHNldCBhcmNoaXRlY3R1cmVzIChccy0xSVNBXHMwKSBvciBccy0xTUNVXHMwIHR5cGUuCisuU3AKK1RoZSBkZWZhdWx0IGZvciB0aGlzIG9wdGlvbiBpc0B0aWV7fVxmKENXXCooQ2BhdnIyXCooQydcZlIuCisuU3AKK1wmXHMtMUdDQ1xzMCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIFxzLTFBVlJcczAgZGV2aWNlcyBhbmQgSVNBczoKKy5SUyA0CisuaWUgbiAuSVAgIiIiYXZyMiIiIiA0CisuZWwgLklQICJcZihDV2F2cjJcZlIiIDQKKy5JWCBJdGVtICJhdnIyIgorXCZcKihMIkNsYXNzaWNcKihSIiBkZXZpY2VzIHdpdGggdXAgdG8gOEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdHRpbnkyMlwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MjZcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBjODUzNFwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHMyMzEzXCooQydcZlIsIFxmKENXXCooQ2BhdDkwczIzMjNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBzMjMzM1wqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHMyMzQzXCooQydcZlIsIFxmKENXXCooQ2BhdDkwczQ0MTRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBzNDQzM1wqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHM0NDM0XCooQydcZlIsIFxmKENXXCooQ2BhdDkwczg1MTVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBzODUzNVwqKEMnXGZSLgorLmllIG4gLklQICIiImF2cjI1IiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyMjVcZlIiIDQKKy5JWCBJdGVtICJhdnIyNSIKK1wmXCooTCJDbGFzc2ljXCooUiIgZGV2aWNlcyB3aXRoIHVwIHRvIDhAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIHdpdGggdGhlIFxmKENXXCooQ2BNT1ZXXCooQydcZlIgaW5zdHJ1Y3Rpb24uCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXRhNTI3MlwqKEMnXGZSLCBcZihDV1wqKENgYXRhNjI4OVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MTNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTEzYVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MjMxM1wqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MjMxM2FcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTI0XCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkyNGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTI1XCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkyNjFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTI2MWFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTQzdVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55NDMxM1wqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55NDRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTQ0YVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55NDVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTQ2MVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55NDYxYVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55NDhcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTg0XCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnk4NGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTg1XCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnk4NjFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTg2MWFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTg3XCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnk4OFwqKEMnXGZSLCBcZihDV1wqKENgYXQ4NnJmNDAxXCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyMyIiIiA0CisuZWwgLklQICJcZihDV2F2cjNcZlIiIDQKKy5JWCBJdGVtICJhdnIzIgorXCZcKihMIkNsYXNzaWNcKihSIiBkZXZpY2VzIHdpdGggMTZAdGlle31LaUIgdXAgdG8gNjRAdGlle31LaUIgb2YgIHByb2dyYW0gbWVtb3J5LgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0NDN1c2IzNTVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0NzZjNzExXCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyMzEiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnIzMVxmUiIgNAorLklYIEl0ZW0gImF2cjMxIgorXCZcKihMIkNsYXNzaWNcKihSIiBkZXZpY2VzIHdpdGggMTI4QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5LgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0bWVnYTEwM1wqKEMnXGZSLCBcZihDV1wqKENgYXQ0M3VzYjMyMFwqKEMnXGZSLgorLmllIG4gLklQICIiImF2cjM1IiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyMzVcZlIiIDQKKy5JWCBJdGVtICJhdnIzNSIKK1wmXCooTCJDbGFzc2ljXCooUiIgZGV2aWNlcyB3aXRoIDE2QHRpZXt9S2lCIHVwIHRvIDY0QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5IGFuZCB3aXRoIHRoZSBcZihDV1wqKENgTU9WV1wqKEMnXGZSIGluc3RydWN0aW9uLgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0YTU1MDVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2dTJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMydTJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTh1MlwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MTYzNFwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MTY3XCooQydcZlIsIFxmKENXXCooQ2BhdDkwdXNiMTYyXCooQydcZlIsIFxmKENXXCooQ2BhdDkwdXNiODJcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnI0IiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyNFxmUiIgNAorLklYIEl0ZW0gImF2cjQiCitcJlwqKEwiRW5oYW5jZWRcKihSIiBkZXZpY2VzIHdpdGggdXAgdG8gOEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdGE2Mjg1XCooQydcZlIsIFxmKENXXCooQ2BhdGE2Mjg2XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E0OFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNDhhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E0OHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTQ4cGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYThcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYThhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E4aHZhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E4NTE1XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E4NTM1XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E4OFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhODhhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E4OHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTg4cGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBwd20xXCooQydcZlIsIFxmKENXXCooQ2BhdDkwcHdtMlwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHB3bTJiXCooQydcZlIsIFxmKENXXCooQ2BhdDkwcHdtM1wqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHB3bTNiXCooQydcZlIsIFxmKENXXCooQ2BhdDkwcHdtODFcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnI1IiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyNVxmUiIgNAorLklYIEl0ZW0gImF2cjUiCitcJlwqKEwiRW5oYW5jZWRcKihSIiBkZXZpY2VzIHdpdGggMTZAdGlle31LaUIgdXAgdG8gNjRAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkuCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXRhNTc5MFwqKEMnXGZSLCBcZihDV1wqKENgYXRhNTc5MG5cKihDJ1xmUiwgXGYoQ1dcKihDYGF0YTU3OTVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExNmFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2aHZhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExNmh2YTJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2aHZiXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExNmh2YnJldmJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2bTFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2dTRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2MVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTYyXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExNjNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2NGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2NHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2NHBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExNjVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2NWFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2NXBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2NXBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExNjhcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2OGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2OHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2OHBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExNjlcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2OWFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2OXBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2OXBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EyNmh2Z1wqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJjMVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJodmJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyaHZicmV2YlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJtMVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJ1NFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJ1NlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzIzXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjRhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjRwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjRwYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI1XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjVhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjVwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjUwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjUwYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI1MHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyNTBwYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI4XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjhwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjlcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyOWFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyOXBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyOXBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjkwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjkwYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI5MHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyOTBwYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNDA2XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E0OGh2ZlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjRjMVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjRodmVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0bTFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0cmZhMlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjRyZnIyXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0NFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ0YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ0cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ0cGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0NVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ1YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ1cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ1MFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ1MGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0NTBwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDlcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0OWFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0OXBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0OTBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0OTBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDkwcFwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MGNhbjMyXCooQydcZlIsIFxmKENXXCooQ2BhdDkwY2FuNjRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBwd20xNjFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBwd20yMTZcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBwd20zMTZcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBzY3IxMDBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTB1c2I2NDZcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTB1c2I2NDdcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTRrXCooQydcZlIsIFxmKENXXCooQ2BtMzAwMFwqKEMnXGZSLgorLmllIG4gLklQICIiImF2cjUxIiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyNTFcZlIiIDQKKy5JWCBJdGVtICJhdnI1MSIKK1wmXCooTCJFbmhhbmNlZFwqKFIiIGRldmljZXMgd2l0aCAxMjhAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkuCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXRtZWdhMTI4XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExMjhhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExMjhyZmExXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExMjgwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExMjgxXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExMjg0XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExMjg0cFwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MGNhbjEyOFwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHVzYjEyODZcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTB1c2IxMjg3XCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyNiIiIiA0CisuZWwgLklQICJcZihDV2F2cjZcZlIiIDQKKy5JWCBJdGVtICJhdnI2IgorXCZcKihMIkVuaGFuY2VkXCooUiIgZGV2aWNlcyB3aXRoIDNcLWJ5dGUgXHMtMVBDXHMwLCBpLmUuIHdpdGggbW9yZSB0aGFuIDEyOEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdG1lZ2EyNTYwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EyNTYxXCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyeG1lZ2EyIiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyeG1lZ2EyXGZSIiA0CisuSVggSXRlbSAiYXZyeG1lZ2EyIgorXCZcKihMIlxzLTFYTUVHQVxzMFwqKFIiIGRldmljZXMgd2l0aCBtb3JlIHRoYW4gOEB0aWV7fUtpQiBhbmQgdXAgdG8gNjRAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkuCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXRteHQxMTJzbFwqKEMnXGZSLCBcZihDV1wqKENgYXRteHQyMjRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bXh0MjI0ZVwqKEMnXGZSLCBcZihDV1wqKENgYXRteHQzMzZzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTZhNFwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTE2YTR1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTZjNFwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTE2ZDRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExNngxXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMzJhNFwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTMyYTR1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMzJjNFwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTMyZDRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2EzMmU1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMzJ4MVwqKEMnXGZSLgorLmllIG4gLklQICIiImF2cnhtZWdhNCIiIiA0CisuZWwgLklQICJcZihDV2F2cnhtZWdhNFxmUiIgNAorLklYIEl0ZW0gImF2cnhtZWdhNCIKK1wmXCooTCJccy0xWE1FR0FcczBcKihSIiBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDY0QHRpZXt9S2lCIGFuZCB1cCB0byAxMjhAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkuCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXR4bWVnYTY0YTNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2E2NGEzdVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTY0YTR1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhNjRiMVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTY0YjNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2E2NGMzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhNjRkM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTY0ZDRcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnJ4bWVnYTUiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnJ4bWVnYTVcZlIiIDQKKy5JWCBJdGVtICJhdnJ4bWVnYTUiCitcJlwqKEwiXHMtMVhNRUdBXHMwXCooUiIgZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiA2NEB0aWV7fUtpQiBhbmQgdXAgdG8gMTI4QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5IGFuZCBtb3JlIHRoYW4gNjRAdGlle31LaUIgb2YgXHMtMVJBTVxzMC4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdHhtZWdhNjRhMVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTY0YTF1XCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyeG1lZ2E2IiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyeG1lZ2E2XGZSIiA0CisuSVggSXRlbSAiYXZyeG1lZ2E2IgorXCZcKihMIlxzLTFYTUVHQVxzMFwqKFIiIGRldmljZXMgd2l0aCBtb3JlIHRoYW4gMTI4QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5LgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0bXh0NTQwc1wqKEMnXGZSLCBcZihDV1wqKENgYXRteHQ1NDBzcmV2YVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTEyOGEzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTI4YTN1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTI4YjFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExMjhiM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTEyOGMzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTI4ZDNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExMjhkNFwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTE5MmEzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTkyYTN1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTkyYzNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExOTJkM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTI1NmEzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMjU2YTNiXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMjU2YTNidVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTI1NmEzdVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTI1NmMzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMjU2ZDNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2EzODRjM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTM4NGQzXCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyeG1lZ2E3IiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyeG1lZ2E3XGZSIiA0CisuSVggSXRlbSAiYXZyeG1lZ2E3IgorXCZcKihMIlxzLTFYTUVHQVxzMFwqKFIiIGRldmljZXMgd2l0aCBtb3JlIHRoYW4gMTI4QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5IGFuZCBtb3JlIHRoYW4gNjRAdGlle31LaUIgb2YgXHMtMVJBTVxzMC4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdHhtZWdhMTI4YTFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExMjhhMXVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExMjhhNHVcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnIxIiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyMVxmUiIgNAorLklYIEl0ZW0gImF2cjEiCitUaGlzIFxzLTFJU0FcczAgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIG1pbmltYWwgXHMtMUFWUlxzMCBjb3JlIGFuZCBzdXBwb3J0ZWQgZm9yIGFzc2VtYmxlciBvbmx5LgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0dGlueTExXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkxMlwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MTVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTI4XCooQydcZlIsIFxmKENXXCooQ2BhdDkwczEyMDBcKihDJ1xmUi4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW1hY2N1bXVsYXRlXC1hcmdzXGZSIiA0CisuSVggSXRlbSAiLW1hY2N1bXVsYXRlLWFyZ3MiCitBY2N1bXVsYXRlIG91dGdvaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cyBhbmQgYWNxdWlyZS9yZWxlYXNlIHRoZSBuZWVkZWQKK3N0YWNrIHNwYWNlIGZvciBvdXRnb2luZyBmdW5jdGlvbiBhcmd1bWVudHMgb25jZSBpbiBmdW5jdGlvbgorcHJvbG9ndWUvZXBpbG9ndWUuICBXaXRob3V0IHRoaXMgb3B0aW9uLCBvdXRnb2luZyBhcmd1bWVudHMgYXJlIHB1c2hlZAorYmVmb3JlIGNhbGxpbmcgYSBmdW5jdGlvbiBhbmQgcG9wcGVkIGFmdGVyd2FyZHMuCisuU3AKK1BvcHBpbmcgdGhlIGFyZ3VtZW50cyBhZnRlciB0aGUgZnVuY3Rpb24gY2FsbCBjYW4gYmUgZXhwZW5zaXZlIG9uCitcJlxzLTFBVlJcczAgc28gdGhhdCBhY2N1bXVsYXRpbmcgdGhlIHN0YWNrIHNwYWNlIG1pZ2h0IGxlYWQgdG8gc21hbGxlcgorZXhlY3V0YWJsZXMgYmVjYXVzZSBhcmd1bWVudHMgbmVlZCBub3QgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZQorc3RhY2sgYWZ0ZXIgc3VjaCBhIGZ1bmN0aW9uIGNhbGwuCisuU3AKK1RoaXMgb3B0aW9uIGNhbiBsZWFkIHRvIHJlZHVjZWQgY29kZSBzaXplIGZvciBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtCitzZXZlcmFsIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGdldCB0aGVpciBhcmd1bWVudHMgb24gdGhlIHN0YWNrIGxpa2UKK2NhbGxzIHRvIHByaW50Zi1saWtlIGZ1bmN0aW9ucy4KKy5JUCAiXGZCXC1tYnJhbmNoXC1jb3N0PVxmUlxmSWNvc3RcZlIiIDQKKy5JWCBJdGVtICItbWJyYW5jaC1jb3N0PWNvc3QiCitTZXQgdGhlIGJyYW5jaCBjb3N0cyBmb3IgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9ucyB0bworXCZcZkljb3N0XGZSLiAgUmVhc29uYWJsZSB2YWx1ZXMgZm9yIFxmSWNvc3RcZlIgYXJlIHNtYWxsLCBub24tbmVnYXRpdmUKK2ludGVnZXJzLiBUaGUgZGVmYXVsdCBicmFuY2ggY29zdCBpcyAwLgorLklQICJcZkJcLW1jYWxsXC1wcm9sb2d1ZXNcZlIiIDQKKy5JWCBJdGVtICItbWNhbGwtcHJvbG9ndWVzIgorRnVuY3Rpb25zIHByb2xvZ3Vlcy9lcGlsb2d1ZXMgYXJlIGV4cGFuZGVkIGFzIGNhbGxzIHRvIGFwcHJvcHJpYXRlCitzdWJyb3V0aW5lcy4gIENvZGUgc2l6ZSBpcyBzbWFsbGVyLgorLklQICJcZkJcLW1pbnQ4XGZSIiA0CisuSVggSXRlbSAiLW1pbnQ4IgorQXNzdW1lIFxmKENXXCooQ2BpbnRcKihDJ1xmUiB0byBiZSA4XC1iaXQgaW50ZWdlci4gIFRoaXMgYWZmZWN0cyB0aGUgc2l6ZXMgb2YgYWxsIHR5cGVzOiBhCitcJlxmKENXXCooQ2BjaGFyXCooQydcZlIgaXMgMSBieXRlLCBhbiBcZihDV1wqKENgaW50XCooQydcZlIgaXMgMSBieXRlLCBhIFxmKENXXCooQ2Bsb25nXCooQydcZlIgaXMgMiBieXRlcywKK2FuZCBcZihDV1wqKENgbG9uZyBsb25nXCooQydcZlIgaXMgNCBieXRlcy4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lcyBub3QKK2NvbmZvcm0gdG8gdGhlIEMgc3RhbmRhcmRzLCBidXQgaXQgcmVzdWx0cyBpbiBzbWFsbGVyIGNvZGUKK3NpemUuCisuSVAgIlxmQlwtbW5vXC1pbnRlcnJ1cHRzXGZSIiA0CisuSVggSXRlbSAiLW1uby1pbnRlcnJ1cHRzIgorR2VuZXJhdGVkIGNvZGUgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBoYXJkd2FyZSBpbnRlcnJ1cHRzLgorQ29kZSBzaXplIGlzIHNtYWxsZXIuCisuSVAgIlxmQlwtbXJlbGF4XGZSIiA0CisuSVggSXRlbSAiLW1yZWxheCIKK1RyeSB0byByZXBsYWNlIFxmKENXXCooQ2BDQUxMXCooQydcZlIgcmVzcC4gXGYoQ1dcKihDYEpNUFwqKEMnXGZSIGluc3RydWN0aW9uIGJ5IHRoZSBzaG9ydGVyCitcJlxmKENXXCooQ2BSQ0FMTFwqKEMnXGZSIHJlc3AuIFxmKENXXCooQ2BSSk1QXCooQydcZlIgaW5zdHJ1Y3Rpb24gaWYgYXBwbGljYWJsZS4KK1NldHRpbmcgXGYoQ1dcKihDYFwtbXJlbGF4XCooQydcZlIganVzdCBhZGRzIHRoZSBcZihDV1wqKENgXC1cLXJlbGF4XCooQydcZlIgb3B0aW9uIHRvIHRoZQorbGlua2VyIGNvbW1hbmQgbGluZSB3aGVuIHRoZSBsaW5rZXIgaXMgY2FsbGVkLgorLlNwCitKdW1wIHJlbGF4aW5nIGlzIHBlcmZvcm1lZCBieSB0aGUgbGlua2VyIGJlY2F1c2UganVtcCBvZmZzZXRzIGFyZSBub3QKK2tub3duIGJlZm9yZSBjb2RlIGlzIGxvY2F0ZWQuIFRoZXJlZm9yZSwgdGhlIGFzc2VtYmxlciBjb2RlIGdlbmVyYXRlZCBieSB0aGUKK2NvbXBpbGVyIGlzIHRoZSBzYW1lLCBidXQgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgZXhlY3V0YWJsZSBtYXkKK2RpZmZlciBmcm9tIGluc3RydWN0aW9ucyBpbiB0aGUgYXNzZW1ibGVyIGNvZGUuCisuU3AKK1JlbGF4aW5nIG11c3QgYmUgdHVybmVkIG9uIGlmIGxpbmtlciBzdHVicyBhcmUgbmVlZGVkLCBzZWUgdGhlCitzZWN0aW9uIG9uIFxmKENXXCooQ2BFSU5EXCooQydcZlIgYW5kIGxpbmtlciBzdHVicyBiZWxvdy4KKy5JUCAiXGZCXC1tc3A4XGZSIiA0CisuSVggSXRlbSAiLW1zcDgiCitUcmVhdCB0aGUgc3RhY2sgcG9pbnRlciByZWdpc3RlciBhcyBhbiA4XC1iaXQgcmVnaXN0ZXIsCitpLmUuIGFzc3VtZSB0aGUgaGlnaCBieXRlIG9mIHRoZSBzdGFjayBwb2ludGVyIGlzIHplcm8uCitJbiBnZW5lcmFsLCB5b3UgZG9uJ3QgbmVlZCB0byBzZXQgdGhpcyBvcHRpb24gYnkgaGFuZC4KKy5TcAorVGhpcyBvcHRpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB0byBzZWxlY3QgYW5kCitidWlsZCBtdWx0aWxpYnMgZm9yIGFyY2hpdGVjdHVyZXMgXGYoQ1dcKihDYGF2cjJcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGF2cjI1XCooQydcZlIuCitUaGVzZSBhcmNoaXRlY3R1cmVzIG1peCBkZXZpY2VzIHdpdGggYW5kIHdpdGhvdXQgXGYoQ1dcKihDYFNQSFwqKEMnXGZSLgorRm9yIGFueSBzZXR0aW5nIG90aGVyIHRoYW4gXGYoQ1dcKihDYFwtbW1jdT1hdnIyXCooQydcZlIgb3IgXGYoQ1dcKihDYFwtbW1jdT1hdnIyNVwqKEMnXGZSCit0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgYWRkIG9yIHJlbW92ZSB0aGlzIG9wdGlvbiBmcm9tIHRoZSBjb21waWxlcgorcHJvcGVyJ3MgY29tbWFuZCBsaW5lLCBiZWNhdXNlIHRoZSBjb21waWxlciB0aGVuIGtub3dzIGlmIHRoZSBkZXZpY2UKK29yIGFyY2hpdGVjdHVyZSBoYXMgYW4gOFwtYml0IHN0YWNrIHBvaW50ZXIgYW5kIHRodXMgbm8gXGYoQ1dcKihDYFNQSFwqKEMnXGZSCityZWdpc3RlciBvciBub3QuCisuSVAgIlxmQlwtbXN0cmljdFwtWFxmUiIgNAorLklYIEl0ZW0gIi1tc3RyaWN0LVgiCitVc2UgYWRkcmVzcyByZWdpc3RlciBcZihDV1wqKENgWFwqKEMnXGZSIGluIGEgd2F5IHByb3Bvc2VkIGJ5IHRoZSBoYXJkd2FyZS4gIFRoaXMgbWVhbnMKK3RoYXQgXGYoQ1dcKihDYFhcKihDJ1xmUiBpcyBvbmx5IHVzZWQgaW4gaW5kaXJlY3QsIHBvc3QtaW5jcmVtZW50IG9yCitwcmUtZGVjcmVtZW50IGFkZHJlc3NpbmcuCisuU3AKK1dpdGhvdXQgdGhpcyBvcHRpb24sIHRoZSBcZihDV1wqKENgWFwqKEMnXGZSIHJlZ2lzdGVyIG1heSBiZSB1c2VkIGluIHRoZSBzYW1lIHdheQorYXMgXGYoQ1dcKihDYFlcKihDJ1xmUiBvciBcZihDV1wqKENgWlwqKEMnXGZSIHdoaWNoIHRoZW4gaXMgZW11bGF0ZWQgYnkgYWRkaXRpb25hbAoraW5zdHJ1Y3Rpb25zLiAgCitGb3IgZXhhbXBsZSwgbG9hZGluZyBhIHZhbHVlIHdpdGggXGYoQ1dcKihDYFgrY29uc3RcKihDJ1xmUiBhZGRyZXNzaW5nIHdpdGggYQorc21hbGwgbm9uLW5lZ2F0aXZlIFxmKENXXCooQ2Bjb25zdCA8IDY0XCooQydcZlIgdG8gYSByZWdpc3RlciBcZklSblxmUiBpcworcGVyZm9ybWVkIGFzCisuU3AKKy5WYiAzCitcJiAgICAgICAgYWRpdyByMjYsIGNvbnN0ICAgOyBYICs9IGNvbnN0CitcJiAgICAgICAgbGQgICA8Um4+LCBYICAgICAgICA7IDxSbj4gPSAqWAorXCYgICAgICAgIHNiaXcgcjI2LCBjb25zdCAgIDsgWCBcLT0gY29uc3QKKy5WZQorLklQICJcZkJcLW10aW55XC1zdGFja1xmUiIgNAorLklYIEl0ZW0gIi1tdGlueS1zdGFjayIKK09ubHkgY2hhbmdlIHRoZSBsb3dlciA4QHRpZXt9Yml0cyBvZiB0aGUgc3RhY2sgcG9pbnRlci4KKy5JUCAiXGZCXC1XYWRkclwtc3BhY2VcLWNvbnZlcnRcZlIiIDQKKy5JWCBJdGVtICItV2FkZHItc3BhY2UtY29udmVydCIKK1dhcm4gYWJvdXQgY29udmVyc2lvbnMgYmV0d2VlbiBhZGRyZXNzIHNwYWNlcyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKK3Jlc3VsdGluZyBhZGRyZXNzIHNwYWNlIGlzIG5vdCBjb250YWluZWQgaW4gdGhlIGluY29taW5nIGFkZHJlc3Mgc3BhY2UuCisuUFAKK1xmKENXXCooQ2BFSU5EXCooQydcZlIgYW5kIERldmljZXMgd2l0aCBtb3JlIHRoYW4gMTI4IEtpIEJ5dGVzIG9mIEZsYXNoCisuSVggU3Vic2VjdGlvbiAiRUlORCBhbmQgRGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxMjggS2kgQnl0ZXMgb2YgRmxhc2giCisuUFAKK1BvaW50ZXJzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBhcmUgMTZAdGlle31iaXRzIHdpZGUuCitUaGUgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIG9yIGxhYmVsIGlzIHJlcHJlc2VudGVkIGFzIHdvcmQgYWRkcmVzcyBzbwordGhhdCBpbmRpcmVjdCBqdW1wcyBhbmQgY2FsbHMgY2FuIHRhcmdldCBhbnkgY29kZSBhZGRyZXNzIGluIHRoZQorcmFuZ2Ugb2YgNjRAdGlle31LaSB3b3Jkcy4KKy5QUAorSW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSBpbmRpcmVjdCBqdW1wIG9uIGRldmljZXMgd2l0aCBtb3JlIHRoYW4gMTI4QHRpZXt9S2kKK2J5dGVzIG9mIHByb2dyYW0gbWVtb3J5IHNwYWNlLCB0aGVyZSBpcyBhIHNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXIgY2FsbGVkCitcJlxmKENXXCooQ2BFSU5EXCooQydcZlIgdGhhdCBzZXJ2ZXMgYXMgbW9zdCBzaWduaWZpY2FudCBwYXJ0IG9mIHRoZSB0YXJnZXQgYWRkcmVzcword2hlbiBcZihDV1wqKENgRUlDQUxMXCooQydcZlIgb3IgXGYoQ1dcKihDYEVJSk1QXCooQydcZlIgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkLgorLlBQCitJbmRpcmVjdCBqdW1wcyBhbmQgY2FsbHMgb24gdGhlc2UgZGV2aWNlcyBhcmUgaGFuZGxlZCBhcyBmb2xsb3dzIGJ5Cit0aGUgY29tcGlsZXIgYW5kIGFyZSBzdWJqZWN0IHRvIHNvbWUgbGltaXRhdGlvbnM6CisuSVAgIlwoYnUiIDQKK1RoZSBjb21waWxlciBuZXZlciBzZXRzIFxmKENXXCooQ2BFSU5EXCooQydcZlIuCisuSVAgIlwoYnUiIDQKK1RoZSBjb21waWxlciB1c2VzIFxmKENXXCooQ2BFSU5EXCooQydcZlIgaW1wbGljaXRlbHkgaW4gXGYoQ1dcKihDYEVJQ0FMTFwqKEMnXGZSL1xmKENXXCooQ2BFSUpNUFwqKEMnXGZSCitpbnN0cnVjdGlvbnMgb3IgbWlnaHQgcmVhZCBcZihDV1wqKENgRUlORFwqKEMnXGZSIGRpcmVjdGx5IGluIG9yZGVyIHRvIGVtdWxhdGUgYW4KK2luZGlyZWN0IGNhbGwvanVtcCBieSBtZWFucyBvZiBhIFxmKENXXCooQ2BSRVRcKihDJ1xmUiBpbnN0cnVjdGlvbi4KKy5JUCAiXChidSIgNAorVGhlIGNvbXBpbGVyIGFzc3VtZXMgdGhhdCBcZihDV1wqKENgRUlORFwqKEMnXGZSIG5ldmVyIGNoYW5nZXMgZHVyaW5nIHRoZSBzdGFydHVwCitjb2RlIG9yIGR1cmluZyB0aGUgYXBwbGljYXRpb24uIEluIHBhcnRpY3VsYXIsIFxmKENXXCooQ2BFSU5EXCooQydcZlIgaXMgbm90CitzYXZlZC9yZXN0b3JlZCBpbiBmdW5jdGlvbiBvciBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCitwcm9sb2d1ZS9lcGlsb2d1ZS4KKy5JUCAiXChidSIgNAorRm9yIGluZGlyZWN0IGNhbGxzIHRvIGZ1bmN0aW9ucyBhbmQgY29tcHV0ZWQgZ290bywgdGhlIGxpbmtlcgorZ2VuZXJhdGVzIFxmSXN0dWJzXGZSLiBTdHVicyBhcmUganVtcCBwYWRzIHNvbWV0aW1lcyBhbHNvIGNhbGxlZAorXCZcZkl0cmFtcG9saW5lc1xmUi4gVGh1cywgdGhlIGluZGlyZWN0IGNhbGwvanVtcCBqdW1wcyB0byBzdWNoIGEgc3R1Yi4KK1RoZSBzdHViIGNvbnRhaW5zIGEgZGlyZWN0IGp1bXAgdG8gdGhlIGRlc2lyZWQgYWRkcmVzcy4KKy5JUCAiXChidSIgNAorTGlua2VyIHJlbGF4YXRpb24gbXVzdCBiZSB0dXJuZWQgb24gc28gdGhhdCB0aGUgbGlua2VyIHdpbGwgZ2VuZXJhdGUKK3RoZSBzdHVicyBjb3JyZWN0bHkgYW4gYWxsIHNpdHVhbHRpb24uIFNlZSB0aGUgY29tcGlsZXIgb3B0aW9uCitcJlxmKENXXCooQ2BcLW1yZWxheFwqKEMnXGZSIGFuZCB0aGUgbGlubGVyIG9wdGlvbiBcZihDV1wqKENgXC1cLXJlbGF4XCooQydcZlIuCitUaGVyZSBhcmUgY29ybmVyIGNhc2VzIHdoZXJlIHRoZSBsaW5rZXIgaXMgc3VwcG9zZWQgdG8gZ2VuZXJhdGUgc3R1YnMKK2J1dCBhYm9ydHMgd2l0aG91dCByZWxheGF0aW9uIGFuZCB3aXRob3V0IGEgaGVscGZ1bCBlcnJvciBtZXNzYWdlLgorLklQICJcKGJ1IiA0CitUaGUgZGVmYXVsdCBsaW5rZXIgc2NyaXB0IGlzIGFycmFuZ2VkIGZvciBjb2RlIHdpdGggXGYoQ1dcKihDYEVJTkQgPSAwXCooQydcZlIuCitJZiBjb2RlIGlzIHN1cHBvc2VkIHRvIHdvcmsgZm9yIGEgc2V0dXAgd2l0aCBcZihDV1wqKENgRUlORCAhPSAwXCooQydcZlIsIGEgY3VzdG9tCitsaW5rZXIgc2NyaXB0IGhhcyB0byBiZSB1c2VkIGluIG9yZGVyIHRvIHBsYWNlIHRoZSBzZWN0aW9ucyB3aG9zZQorbmFtZSBzdGFydCB3aXRoIFxmKENXXCooQ2AudHJhbXBvbGluZXNcKihDJ1xmUiBpbnRvIHRoZSBzZWdtZW50IHdoZXJlIFxmKENXXCooQ2BFSU5EXCooQydcZlIKK3BvaW50cyB0by4KKy5JUCAiXChidSIgNAorVGhlIHN0YXJ0dXAgY29kZSBmcm9tIGxpYmdjYyBuZXZlciBzZXRzIFxmKENXXCooQ2BFSU5EXCooQydcZlIuCitOb3RpY2UgdGhhdCBzdGFydHVwIGNvZGUgaXMgYSBibGVuZCBvZiBjb2RlIGZyb20gbGliZ2NjIGFuZCBBVlItTGliQy4KK0ZvciB0aGUgaW1wYWN0IG9mIEFWUi1MaWJDIG9uIFxmKENXXCooQ2BFSU5EXCooQydcZlIsIHNlZSB0aGUKK0FWUi1MaWJDXCB1c2VyXCBtYW51YWwgKFxmKENXXCooQ2BodHRwOi8vbm9uZ251Lm9yZy9hdnJcLWxpYmMvdXNlclwtbWFudWFsL1wqKEMnXGZSKS4KKy5JUCAiXChidSIgNAorSXQgaXMgbGVnaXRpbWF0ZSBmb3IgdXNlci1zcGVjaWZpYyBzdGFydHVwIGNvZGUgdG8gc2V0IHVwIFxmKENXXCooQ2BFSU5EXCooQydcZlIKK2Vhcmx5LCBmb3IgZXhhbXBsZSBieSBtZWFucyBvZiBpbml0aWFsaXphdGlvbiBjb2RlIGxvY2F0ZWQgaW4KK3NlY3Rpb24gXGYoQ1dcKihDYC5pbml0M1wqKEMnXGZSLiBTdWNoIGNvZGUgcnVucyBwcmlvciB0byBnZW5lcmFsIHN0YXJ0dXAgY29kZQordGhhdCBpbml0aWFsaXplcyBccy0xUkFNXHMwIGFuZCBjYWxscyBjb25zdHJ1Y3RvcnMsIGJ1dCBhZnRlciB0aGUgYml0CitvZiBzdGFydHVwIGNvZGUgZnJvbSBBVlItTGliQyB0aGF0IHNldHMgXGYoQ1dcKihDYEVJTkRcKihDJ1xmUiB0byB0aGUgc2VnbWVudAord2hlcmUgdGhlIHZlY3RvciB0YWJsZSBpcyBsb2NhdGVkLgorLlNwCisuVmIgMQorXCYgICAgICAgICNpbmNsdWRlIDxhdnIvaW8uaD4KK1wmICAgICAgICAKK1wmICAgICAgICBzdGF0aWMgdm9pZAorXCYgICAgICAgIF9cfF9hdHRyaWJ1dGVfXHxfKChzZWN0aW9uKCIuaW5pdDMiKSxuYWtlZCx1c2VkLG5vX2luc3RydW1lbnRfZnVuY3Rpb24pKQorXCYgICAgICAgIGluaXQzX3NldF9laW5kICh2b2lkKQorXCYgICAgICAgIHsKK1wmICAgICAgICAgIF9cfF9hc20gdm9sYXRpbGUgKCJsZGkgcjI0LHBtX2hoOChfXHxfdHJhbXBvbGluZXNfc3RhcnQpXGVuXGV0IgorXCYgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXQgJWkwLHIyNCIgOjogIm4iICgmRUlORCkgOiAicjI0IiwibWVtb3J5Iik7CitcJiAgICAgICAgfQorLlZlCisuU3AKK1RoZSBcZihDV1wqKENgX1x8X3RyYW1wb2xpbmVzX3N0YXJ0XCooQydcZlIgc3ltYm9sIGlzIGRlZmluZWQgaW4gdGhlIGxpbmtlciBzY3JpcHQuCisuSVAgIlwoYnUiIDQKK1N0dWJzIGFyZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgbGlua2VyIGlmCit0aGUgZm9sbG93aW5nIHR3byBjb25kaXRpb25zIGFyZSBtZXQ6CisuUlMgNAorLmllIG4gLklQICJcLTxUaGUgYWRkcmVzcyBvZiBhIGxhYmVsIGlzIHRha2VuIGJ5IG1lYW5zIG9mIHRoZSAiImdzIiIgbW9kaWZpZXI+IiA0CisuZWwgLklQICJcLTxUaGUgYWRkcmVzcyBvZiBhIGxhYmVsIGlzIHRha2VuIGJ5IG1lYW5zIG9mIHRoZSBcZihDV2dzXGZSIG1vZGlmaWVyPiIgNAorLklYIEl0ZW0gIi08VGhlIGFkZHJlc3Mgb2YgYSBsYWJlbCBpcyB0YWtlbiBieSBtZWFucyBvZiB0aGUgZ3MgbW9kaWZpZXI+IgorKHNob3J0IGZvciBcZklnZW5lcmF0ZSBzdHVic1xmUikgbGlrZSBzbzoKKy5TcAorLlZiIDIKK1wmICAgICAgICBMREkgcjI0LCBsbzgoZ3MoPGZ1bmM+KSkKK1wmICAgICAgICBMREkgcjI1LCBoaTgoZ3MoPGZ1bmM+KSkKKy5WZQorLklQICJcLTxUaGUgZmluYWwgbG9jYXRpb24gb2YgdGhhdCBsYWJlbCBpcyBpbiBhIGNvZGUgc2VnbWVudD4iIDQKKy5JWCBJdGVtICItPFRoZSBmaW5hbCBsb2NhdGlvbiBvZiB0aGF0IGxhYmVsIGlzIGluIGEgY29kZSBzZWdtZW50PiIKK1wmXGZJb3V0c2lkZVxmUiB0aGUgc2VnbWVudCB3aGVyZSB0aGUgc3R1YnMgYXJlIGxvY2F0ZWQuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXChidSIgNAorVGhlIGNvbXBpbGVyIGVtaXRzIHN1Y2ggXGYoQ1dcKihDYGdzXCooQydcZlIgbW9kaWZpZXJzIGZvciBjb2RlIGxhYmVscyBpbiB0aGUKK2ZvbGxvd2luZyBzaXR1YXRpb25zOgorLlJTIDQKKy5JUCAiXC08VGFraW5nIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiBvciBjb2RlIGxhYmVsLj4iIDQKKy5JWCBJdGVtICItPFRha2luZyBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gb3IgY29kZSBsYWJlbC4+IgorLlBEIDAKKy5JUCAiXC08Q29tcHV0ZWQgZ290by4+IiA0CisuSVggSXRlbSAiLTxDb21wdXRlZCBnb3RvLj4iCisuSVAgIlwtPElmIHByb2xvZ3VlLXNhdmUgZnVuY3Rpb24gaXMgdXNlZCwgc2VlIFxmQlwtbWNhbGxcLXByb2xvZ3Vlc1xmUj4iIDQKKy5JWCBJdGVtICItPElmIHByb2xvZ3VlLXNhdmUgZnVuY3Rpb24gaXMgdXNlZCwgc2VlIC1tY2FsbC1wcm9sb2d1ZXM+IgorLlBECitjb21tYW5kLWxpbmUgb3B0aW9uLgorLklQICJcLTxTd2l0Y2gvY2FzZSBkaXNwYXRjaCB0YWJsZXMuIElmIHlvdSBkbyBub3Qgd2FudCBzdWNoIGRpc3BhdGNoPiIgNAorLklYIEl0ZW0gIi08U3dpdGNoL2Nhc2UgZGlzcGF0Y2ggdGFibGVzLiBJZiB5b3UgZG8gbm90IHdhbnQgc3VjaCBkaXNwYXRjaD4iCit0YWJsZXMgeW91IGNhbiBzcGVjaWZ5IHRoZSBcZkJcLWZub1wtanVtcFwtdGFibGVzXGZSIGNvbW1hbmQtbGluZSBvcHRpb24uCisuSVAgIlwtPEMgYW5kIFwqKEMrIGNvbnN0cnVjdG9ycy9kZXN0cnVjdG9ycyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAvc2h1dGRvd24uPiIgNAorLklYIEl0ZW0gIi08QyBhbmQgIGNvbnN0cnVjdG9ycy9kZXN0cnVjdG9ycyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAvc2h1dGRvd24uPiIKKy5QRCAwCisuaWUgbiAuSVAgIlwtPElmIHRoZSB0b29scyBoaXQgYSAiImdzKCkiIiBtb2RpZmllciBleHBsYWluZWQgYWJvdmUuPiIgNAorLmVsIC5JUCAiXC08SWYgdGhlIHRvb2xzIGhpdCBhIFxmKENXZ3MoKVxmUiBtb2RpZmllciBleHBsYWluZWQgYWJvdmUuPiIgNAorLklYIEl0ZW0gIi08SWYgdGhlIHRvb2xzIGhpdCBhIGdzKCkgbW9kaWZpZXIgZXhwbGFpbmVkIGFib3ZlLj4iCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXChidSIgNAorLlBECitKdW1waW5nIHRvIG5vbi1zeW1ib2xpYyBhZGRyZXNzZXMgbGlrZSBzbyBpcyBcZklub3RcZlIgc3VwcG9ydGVkOgorLlNwCisuVmIgNQorXCYgICAgICAgIGludCBtYWluICh2b2lkKQorXCYgICAgICAgIHsKK1wmICAgICAgICAgICAgLyogQ2FsbCBmdW5jdGlvbiBhdCB3b3JkIGFkZHJlc3MgMHgyICovCitcJiAgICAgICAgICAgIHJldHVybiAoKGludCgqKSh2b2lkKSkgMHgyKSgpOworXCYgICAgICAgIH0KKy5WZQorLlNwCitJbnN0ZWFkLCBhIHN0dWIgaGFzIHRvIGJlIHNldCB1cCwgaS5lLiB0aGUgZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZAordGhyb3VnaCBhIHN5bWJvbCAoXGYoQ1dcKihDYGZ1bmNfNFwqKEMnXGZSIGluIHRoZSBleGFtcGxlKToKKy5TcAorLlZiIDMKK1wmICAgICAgICBpbnQgbWFpbiAodm9pZCkKK1wmICAgICAgICB7CitcJiAgICAgICAgICAgIGV4dGVybiBpbnQgZnVuY180ICh2b2lkKTsKK1wmICAgICAgICAKK1wmICAgICAgICAgICAgLyogQ2FsbCBmdW5jdGlvbiBhdCBieXRlIGFkZHJlc3MgMHg0ICovCitcJiAgICAgICAgICAgIHJldHVybiBmdW5jXzQoKTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorYW5kIHRoZSBhcHBsaWNhdGlvbiBiZSBsaW5rZWQgd2l0aCBcZihDV1wqKENgXC1XbCxcLVwtZGVmc3ltLGZ1bmNfND0weDRcKihDJ1xmUi4KK0FsdGVybmF0aXZlbHksIFxmKENXXCooQ2BmdW5jXzRcKihDJ1xmUiBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgbGlua2VyIHNjcmlwdC4KKy5QUAorSGFuZGxpbmcgb2YgdGhlIFxmKENXXCooQ2BSQU1QRFwqKEMnXGZSLCBcZihDV1wqKENgUkFNUFhcKihDJ1xmUiwgXGYoQ1dcKihDYFJBTVBZXCooQydcZlIgYW5kIFxmKENXXCooQ2BSQU1QWlwqKEMnXGZSIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXJzCisuSVggU3Vic2VjdGlvbiAiSGFuZGxpbmcgb2YgdGhlIFJBTVBELCBSQU1QWCwgUkFNUFkgYW5kIFJBTVBaIFNwZWNpYWwgRnVuY3Rpb24gUmVnaXN0ZXJzIgorLlBQCitTb21lIFxzLTFBVlJcczAgZGV2aWNlcyBzdXBwb3J0IG1lbW9yaWVzIGxhcmdlciB0aGFuIHRoZSA2NEB0aWV7fUtpQiByYW5nZQordGhhdCBjYW4gYmUgYWNjZXNzZWQgd2l0aCAxNlwtYml0IHBvaW50ZXJzLiAgVG8gYWNjZXNzIG1lbW9yeSBsb2NhdGlvbnMKK291dHNpZGUgdGhpcyA2NEB0aWV7fUtpQiByYW5nZSwgdGhlIGNvbnRlbnRlbnQgb2YgYSBcZihDV1wqKENgUkFNUFwqKEMnXGZSCityZWdpc3RlciBpcyB1c2VkIGFzIGhpZ2ggcGFydCBvZiB0aGUgYWRkcmVzczoKK1RoZSBcZihDV1wqKENgWFwqKEMnXGZSLCBcZihDV1wqKENgWVwqKEMnXGZSLCBcZihDV1wqKENgWlwqKEMnXGZSIGFkZHJlc3MgcmVnaXN0ZXIgaXMgY29uY2F0ZW5hdGVkCit3aXRoIHRoZSBcZihDV1wqKENgUkFNUFhcKihDJ1xmUiwgXGYoQ1dcKihDYFJBTVBZXCooQydcZlIsIFxmKENXXCooQ2BSQU1QWlwqKEMnXGZSIHNwZWNpYWwgZnVuY3Rpb24KK3JlZ2lzdGVyLCByZXNwZWN0aXZlbHksIHRvIGdldCBhIHdpZGUgYWRkcmVzcy4gU2ltaWxhcmx5LAorXCZcZihDV1wqKENgUkFNUERcKihDJ1xmUiBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggZGlyZWN0IGFkZHJlc3NpbmcuCisuSVAgIlwoYnUiIDQKK1RoZSBzdGFydHVwIGNvZGUgaW5pdGlhbGl6ZXMgdGhlIFxmKENXXCooQ2BSQU1QXCooQydcZlIgc3BlY2lhbCBmdW5jdGlvbgorcmVnaXN0ZXJzIHdpdGggemVyby4KKy5JUCAiXChidSIgNAorSWYgYSBcZkJccy0xQVZSXHMwIE5hbWVkIEFkZHJlc3MgU3BhY2VzLG5hbWVkIGFkZHJlc3Mgc3BhY2VcZlIgb3RoZXIgdGhhbgorZ2VuZXJpYyBvciBcZihDV1wqKENgX1x8X2ZsYXNoXCooQydcZlIgaXMgdXNlZCwgdGhlbiBcZihDV1wqKENgUkFNUFpcKihDJ1xmUiBpcyBzZXQKK2FzIG5lZWRlZCBiZWZvcmUgdGhlIG9wZXJhdGlvbi4KKy5JUCAiXChidSIgNAorSWYgdGhlIGRldmljZSBzdXBwb3J0cyBccy0xUkFNXHMwIGxhcmdlciB0aGFuIDY0QHRpZXtLaUJ9IGFuZCB0aGUgY29tcGlsZXIKK25lZWRzIHRvIGNoYW5nZSBcZihDV1wqKENgUkFNUFpcKihDJ1xmUiB0byBhY2NvbXBsaXNoIGFuIG9wZXJhdGlvbiwgXGYoQ1dcKihDYFJBTVBaXCooQydcZlIKK2lzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgdGhlIG9wZXJhdGlvbi4KKy5JUCAiXChidSIgNAorSWYgdGhlIGRldmljZSBjb21lcyB3aXRoIGEgc3BlY2lmaWMgXGYoQ1dcKihDYFJBTVBcKihDJ1xmUiByZWdpc3RlciwgdGhlIFxzLTFJU1JcczAKK3Byb2xvZ3VlL2VwaWxvZ3VlIHNhdmVzL3Jlc3RvcmVzIHRoYXQgXHMtMVNGUlxzMCBhbmQgaW5pdGlhbGl6ZXMgaXQgd2l0aAoremVybyBpbiBjYXNlIHRoZSBccy0xSVNSXHMwIGNvZGUgbWlnaHQgKGltcGxpY2l0bHkpIHVzZSBpdC4KKy5JUCAiXChidSIgNAorXCZccy0xUkFNXHMwIGxhcmdlciB0aGFuIDY0QHRpZXtLaUJ9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgXHMtMUdDQ1xzMCBmb3IgXHMtMUFWUlxzMCB0YXJnZXRzLgorSWYgeW91IHVzZSBpbmxpbmUgYXNzZW1ibGVyIHRvIHJlYWQgZnJvbSBsb2NhdGlvbnMgb3V0c2lkZSB0aGUKKzE2XC1iaXQgYWRkcmVzcyByYW5nZSBhbmQgY2hhbmdlIG9uZSBvZiB0aGUgXGYoQ1dcKihDYFJBTVBcKihDJ1xmUiByZWdpc3RlcnMsCit5b3UgbXVzdCByZXNldCBpdCB0byB6ZXJvIGFmdGVyIHRoZSBhY2Nlc3MuCisuUFAKK1xzLTFBVlJcczAgQnVpbHQtaW4gTWFjcm9zCisuSVggU3Vic2VjdGlvbiAiQVZSIEJ1aWx0LWluIE1hY3JvcyIKKy5QUAorXCZccy0xR0NDXHMwIGRlZmluZXMgc2V2ZXJhbCBidWlsdC1pbiBtYWNyb3Mgc28gdGhhdCB0aGUgdXNlciBjb2RlIGNhbiB0ZXN0Citmb3IgdGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgZmVhdHVyZXMuICBBbG1vc3QgYW55IG9mIHRoZSBmb2xsb3dpbmcKK2J1aWx0LWluIG1hY3JvcyBhcmUgZGVkdWNlZCBmcm9tIGRldmljZSBjYXBhYmlsaXRpZXMgYW5kIHRodXMKK3RyaWdnZXJlZCBieSB0aGUgXGYoQ1dcKihDYFwtbW1jdT1cKihDJ1xmUiBjb21tYW5kLWxpbmUgb3B0aW9uLgorLlBQCitGb3IgZXZlbiBtb3JlIEFWUi1zcGVjaWZpYyBidWlsdC1pbiBtYWNyb3Mgc2VlCitcJlxmQlxzLTFBVlJcczAgTmFtZWQgQWRkcmVzcyBTcGFjZXNcZlIgYW5kIFxmQlxzLTFBVlJcczAgQnVpbHQtaW4gRnVuY3Rpb25zXGZSLgorLmllIG4gLklQICIiIl9cfF9BVlJfQVJDSF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0FSQ0hfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfQVJDSF9fIgorQnVpbGQtaW4gbWFjcm8gdGhhdCByZXNvbHZlcyB0byBhIGRlY2ltYWwgbnVtYmVyIHRoYXQgaWRlbnRpZmllcyB0aGUKK2FyY2hpdGVjdHVyZSBhbmQgZGVwZW5kcyBvbiB0aGUgXGYoQ1dcKihDYFwtbW1jdT1cZihDSW1jdVxmKENXXCooQydcZlIgb3B0aW9uLgorUG9zc2libGUgdmFsdWVzIGFyZToKKy5TcAorXCZcZihDVzJcZlIsIFxmKENXMjVcZlIsIFxmKENXM1xmUiwgXGYoQ1czMVxmUiwgXGYoQ1czNVxmUiwKK1wmXGYoQ1c0XGZSLCBcZihDVzVcZlIsIFxmKENXNTFcZlIsIFxmKENXNlxmUiwgXGYoQ1cxMDJcZlIsIFxmKENXMTA0XGZSLAorXCZcZihDVzEwNVxmUiwgXGYoQ1cxMDZcZlIsIFxmKENXMTA3XGZSCisuU3AKK2ZvciBcZkltY3VcZlI9XGYoQ1dcKihDYGF2cjJcKihDJ1xmUiwgXGYoQ1dcKihDYGF2cjI1XCooQydcZlIsIFxmKENXXCooQ2BhdnIzXCooQydcZlIsCitcJlxmKENXXCooQ2BhdnIzMVwqKEMnXGZSLCBcZihDV1wqKENgYXZyMzVcKihDJ1xmUiwgXGYoQ1dcKihDYGF2cjRcKihDJ1xmUiwgXGYoQ1dcKihDYGF2cjVcKihDJ1xmUiwgXGYoQ1dcKihDYGF2cjUxXCooQydcZlIsCitcJlxmKENXXCooQ2BhdnI2XCooQydcZlIsIFxmKENXXCooQ2BhdnJ4bWVnYTJcKihDJ1xmUiwgXGYoQ1dcKihDYGF2cnhtZWdhNFwqKEMnXGZSLCBcZihDV1wqKENgYXZyeG1lZ2E1XCooQydcZlIsCitcJlxmKENXXCooQ2BhdnJ4bWVnYTZcKihDJ1xmUiwgXGYoQ1dcKihDYGF2cnhtZWdhN1wqKEMnXGZSLCByZXNwZWN0aXZlbHkuCitJZiBcZkltY3VcZlIgc3BlY2lmaWVzIGEgZGV2aWNlLCB0aGlzIGJ1aWx0LWluIG1hY3JvIGlzIHNldAorYWNjb3JkaW5nbHkuIEZvciBleGFtcGxlLCB3aXRoIFxmKENXXCooQ2BcLW1tY3U9YXRtZWdhOFwqKEMnXGZSIHRoZSBtYWNybyB3aWxsIGJlCitkZWZpbmVkIHRvIFxmKENXNFxmUi4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX1xmKENJRGV2aWNlXGYoQ1dfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9cZihDSURldmljZVxmKENXX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0RldmljZV9fIgorU2V0dGluZyBcZihDV1wqKENgXC1tbWN1PVxmKENJZGV2aWNlXGYoQ1dcKihDJ1xmUiBkZWZpbmVzIHRoaXMgYnVpbHQtaW4gbWFjcm8gd2hpY2ggcmVmbGVjdHMKK3RoZSBkZXZpY2UncyBuYW1lLiBGb3IgZXhhbXBsZSwgXGYoQ1dcKihDYFwtbW1jdT1hdG1lZ2E4XCooQydcZlIgZGVmaW5lcyB0aGUKK2J1aWx0LWluIG1hY3JvIFxmKENXXCooQ2BfXHxfQVZSX0FUbWVnYThfXHxfXCooQydcZlIsIFxmKENXXCooQ2BcLW1tY3U9YXR0aW55MjYxYVwqKEMnXGZSIGRlZmluZXMKK1wmXGYoQ1dcKihDYF9cfF9BVlJfQVR0aW55MjYxQV9cfF9cKihDJ1xmUiwgZXRjLgorLlNwCitUaGUgYnVpbHQtaW4gbWFjcm9zJyBuYW1lcyBmb2xsb3cKK3RoZSBzY2hlbWUgXGYoQ1dcKihDYF9cfF9BVlJfXGYoQ0lEZXZpY2VcZihDV19cfF9cKihDJ1xmUiB3aGVyZSBcZklEZXZpY2VcZlIgaXMKK3RoZSBkZXZpY2UgbmFtZSBhcyBmcm9tIHRoZSBccy0xQVZSXHMwIHVzZXIgbWFudWFsLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuCitcJlxmSURldmljZVxmUiBpbiB0aGUgYnVpbHQtaW4gbWFjcm8gYW5kIFxmSWRldmljZVxmUiBpbgorXCZcZihDV1wqKENgXC1tbWN1PVxmKENJZGV2aWNlXGYoQ1dcKihDJ1xmUiBpcyB0aGF0IHRoZSBsYXR0ZXIgaXMgYWx3YXlzIGxvd2VyY2FzZS4KKy5TcAorSWYgXGZJZGV2aWNlXGZSIGlzIG5vdCBhIGRldmljZSBidXQgb25seSBhIGNvcmUgYXJjaGl0ZWN0dXJlIGxpa2UKK1wmXGYoQ1dcKihDYGF2cjUxXCooQydcZlIsIHRoaXMgbWFjcm8gd2lsbCBub3QgYmUgZGVmaW5lZC4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX1hNRUdBX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfWE1FR0FfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfWE1FR0FfXyIKK1RoZSBkZXZpY2UgLyBhcmNoaXRlY3R1cmUgYmVsb25ncyB0byB0aGUgXHMtMVhNRUdBXHMwIGZhbWlseSBvZiBkZXZpY2VzLgorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV9FTFBNX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfSEFWRV9FTFBNX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfRUxQTV9fIgorVGhlIGRldmljZSBoYXMgdGhlIHRoZSBcZihDV1wqKENgRUxQTVwqKEMnXGZSIGluc3RydWN0aW9uLgorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV9FTFBNWF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfRUxQTVhfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9FTFBNWF9fIgorVGhlIGRldmljZSBoYXMgdGhlIFxmKENXXCooQ2BFTFBNIFJcZihDSW5cZihDVyxaXCooQydcZlIgYW5kIFxmKENXXCooQ2BFTFBNCitSXGYoQ0luXGYoQ1csWitcKihDJ1xmUiBpbnN0cnVjdGlvbnMuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX01PVldfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFX01PVldfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9NT1ZXX18iCitUaGUgZGV2aWNlIGhhcyB0aGUgXGYoQ1dcKihDYE1PVldcKihDJ1xmUiBpbnN0cnVjdGlvbiB0byBwZXJmb3JtIDE2XC1iaXQKK3JlZ2lzdGVyLXJlZ2lzdGVyIG1vdmVzLgorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV9MUE1YX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfSEFWRV9MUE1YX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfTFBNWF9fIgorVGhlIGRldmljZSBoYXMgdGhlIFxmKENXXCooQ2BMUE0gUlxmKENJblxmKENXLFpcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYExQTSBSXGYoQ0luXGYoQ1csWitcKihDJ1xmUiBpbnN0cnVjdGlvbnMuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX01VTF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfTVVMX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfTVVMX18iCitUaGUgZGV2aWNlIGhhcyBhIGhhcmR3YXJlIG11bHRpcGxpZXIuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX0pNUF9DQUxMX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfSEFWRV9KTVBfQ0FMTF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9IQVZFX0pNUF9DQUxMX18iCitUaGUgZGV2aWNlIGhhcyB0aGUgXGYoQ1dcKihDYEpNUFwqKEMnXGZSIGFuZCBcZihDV1wqKENgQ0FMTFwqKEMnXGZSIGluc3RydWN0aW9ucy4KK1RoaXMgaXMgdGhlIGNhc2UgZm9yIGRldmljZXMgd2l0aCBhdCBsZWFzdCAxNkB0aWV7fUtpQiBvZiBwcm9ncmFtCittZW1vcnkuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX0VJSk1QX0VJQ0FMTF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfRUlKTVBfRUlDQUxMX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfRUlKTVBfRUlDQUxMX18iCisuUEQgMAorLmllIG4gLklQICIiIl9cfF9BVlJfM19CWVRFX1BDX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfM19CWVRFX1BDX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSXzNfQllURV9QQ19fIgorLlBECitUaGUgZGV2aWNlIGhhcyB0aGUgXGYoQ1dcKihDYEVJSk1QXCooQydcZlIgYW5kIFxmKENXXCooQ2BFSUNBTExcKihDJ1xmUiBpbnN0cnVjdGlvbnMuCitUaGlzIGlzIHRoZSBjYXNlIGZvciBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDEyOEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KK1RoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBwcm9ncmFtIGNvdW50ZXIKKyhccy0xUENcczApIGlzIDNAdGlle31ieXRlcyB3aWRlLgorLmllIG4gLklQICIiIl9cfF9BVlJfMl9CWVRFX1BDX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfMl9CWVRFX1BDX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSXzJfQllURV9QQ19fIgorVGhlIHByb2dyYW0gY291bnRlciAoXHMtMVBDXHMwKSBpcyAyQHRpZXt9Ynl0ZXMgd2lkZS4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgZGV2aWNlcword2l0aCB1cCB0byAxMjhAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFXzhCSVRfU1BfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFXzhCSVRfU1BfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV84QklUX1NQX18iCisuUEQgMAorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV8xNkJJVF9TUF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfMTZCSVRfU1BfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV8xNkJJVF9TUF9fIgorLlBECitUaGUgc3RhY2sgcG9pbnRlciAoXHMtMVNQXHMwKSByZWdpc3RlciBpcyB0cmVhdGVkIGFzIDhcLWJpdCByZXNwZWN0aXZlbHkKKzE2XC1iaXQgcmVnaXN0ZXIgYnkgdGhlIGNvbXBpbGVyLgorVGhlIGRlZmluaXRpb24gb2YgdGhlc2UgbWFjcm9zIGlzIGFmZmVjdGVkIGJ5IFxmKENXXCooQ2BcLW10aW55XC1zdGFja1wqKEMnXGZSLgorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV9TUEhfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFX1NQSF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9IQVZFX1NQSF9fIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJfXHxfQVZSX1NQOF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX1NQOF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9TUDhfXyIKKy5QRAorVGhlIGRldmljZSBoYXMgdGhlIFxzLTFTUEhcczAgKGhpZ2ggcGFydCBvZiBzdGFjayBwb2ludGVyKSBzcGVjaWFsIGZ1bmN0aW9uCityZWdpc3RlciBvciBoYXMgYW4gOFwtYml0IHN0YWNrIHBvaW50ZXIsIHJlc3BlY3RpdmVseS4KK1RoZSBkZWZpbml0aW9uIG9mIHRoZXNlIG1hY3JvcyBpcyBhZmZlY3RlZCBieSBcZihDV1wqKENgXC1tbWN1PVwqKEMnXGZSIGFuZAoraW4gdGhlIGNhc2VzIG9mIFxmKENXXCooQ2BcLW1tY3U9YXZyMlwqKEMnXGZSIGFuZCBcZihDV1wqKENgXC1tbWN1PWF2cjI1XCooQydcZlIgYWxzbworYnkgXGYoQ1dcKihDYFwtbXNwOFwqKEMnXGZSLgorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV9SQU1QRF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfUkFNUERfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9SQU1QRF9fIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0hBVkVfUkFNUFhfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFX1JBTVBYX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfUkFNUFhfXyIKKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0hBVkVfUkFNUFlfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFX1JBTVBZX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfUkFNUFlfXyIKKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0hBVkVfUkFNUFpfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFX1JBTVBaX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfUkFNUFpfXyIKKy5QRAorVGhlIGRldmljZSBoYXMgdGhlIFxmKENXXCooQ2BSQU1QRFwqKEMnXGZSLCBcZihDV1wqKENgUkFNUFhcKihDJ1xmUiwgXGYoQ1dcKihDYFJBTVBZXCooQydcZlIsCitcJlxmKENXXCooQ2BSQU1QWlwqKEMnXGZSIHNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXIsIHJlc3BlY3RpdmVseS4KKy5pZSBuIC5JUCAiIiJfXHxfTk9fSU5URVJSVVBUU19cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfTk9fSU5URVJSVVBUU19cfF9cZlIiIDQKKy5JWCBJdGVtICJfX05PX0lOVEVSUlVQVFNfXyIKK1RoaXMgbWFjcm8gcmVmbGVjdHMgdGhlIFxmKENXXCooQ2BcLW1ub1wtaW50ZXJydXB0c1wqKEMnXGZSIGNvbW1hbmQgbGluZSBvcHRpb24uCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9FUlJBVEFfU0tJUF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0VSUkFUQV9TS0lQX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0VSUkFUQV9TS0lQX18iCisuUEQgMAorLmllIG4gLklQICIiIl9cfF9BVlJfRVJSQVRBX1NLSVBfSk1QX0NBTExfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9FUlJBVEFfU0tJUF9KTVBfQ0FMTF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9FUlJBVEFfU0tJUF9KTVBfQ0FMTF9fIgorLlBECitTb21lIFxzLTFBVlJcczAgZGV2aWNlcyAoXHMtMUFUOTBTODUxNVxzMCwgQVRtZWdhMTAzKSBtdXN0IG5vdCBza2lwIDMyXC1iaXQKK2luc3RydWN0aW9ucyBiZWNhdXNlIG9mIGEgaGFyZHdhcmUgZXJyYXR1bS4gIFNraXAgaW5zdHJ1Y3Rpb25zIGFyZQorXCZcZihDV1wqKENgU0JSU1wqKEMnXGZSLCBcZihDV1wqKENgU0JSQ1wqKEMnXGZSLCBcZihDV1wqKENgU0JJU1wqKEMnXGZSLCBcZihDV1wqKENgU0JJQ1wqKEMnXGZSIGFuZCBcZihDV1wqKENgQ1BTRVwqKEMnXGZSLgorVGhlIHNlY29uZCBtYWNybyBpcyBvbmx5IGRlZmluZWQgaWYgXGYoQ1dcKihDYF9cfF9BVlJfSEFWRV9KTVBfQ0FMTF9cfF9cKihDJ1xmUiBpcyBhbHNvCitzZXQuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9TRlJfT0ZGU0VUX1x8Xz1cZihDSW9mZnNldFxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9TRlJfT0ZGU0VUX1x8Xz1cZihDSW9mZnNldFxmKENXXGZSIiA0CisuSVggSXRlbSAiX19BVlJfU0ZSX09GRlNFVF9fPW9mZnNldCIKK0luc3RydWN0aW9ucyB0aGF0IGNhbiBhZGRyZXNzIEkvTyBzcGVjaWFsIGZ1bmN0aW9uIHJlZ2lzdGVycyBkaXJlY3RseQorbGlrZSBcZihDV1wqKENgSU5cKihDJ1xmUiwgXGYoQ1dcKihDYE9VVFwqKEMnXGZSLCBcZihDV1wqKENgU0JJXCooQydcZlIsIGV0Yy4gbWF5IHVzZSBhIGRpZmZlcmVudAorYWRkcmVzcyBhcyBpZiBhZGRyZXNzZWQgYnkgYW4gaW5zdHJ1Y3Rpb24gdG8gYWNjZXNzIFxzLTFSQU1cczAgbGlrZSBcZihDV1wqKENgTERcKihDJ1xmUgorb3IgXGYoQ1dcKihDYFNUU1wqKEMnXGZSLiBUaGlzIG9mZnNldCBkZXBlbmRzIG9uIHRoZSBkZXZpY2UgYXJjaGl0ZWN0dXJlIGFuZCBoYXMKK3RvIGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgXHMtMVJBTVxzMCBhZGRyZXNzIGluIG9yZGVyIHRvIGdldCB0aGUKK3Jlc3BlY3RpdmUgSS9PQHRpZXt9YWRkcmVzcy4KKy5pZSBuIC5JUCAiIiJfXHxfV0lUSF9BVlJMSUJDX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9XSVRIX0FWUkxJQkNfXHxfXGZSIiA0CisuSVggSXRlbSAiX19XSVRIX0FWUkxJQkNfXyIKK1RoZSBjb21waWxlciBpcyBjb25maWd1cmVkIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBBVlItTGliYy4KK1NlZSB0aGUgXGYoQ1dcKihDYFwtXC13aXRoXC1hdnJsaWJjXCooQydcZlIgY29uZmlndXJlIG9wdGlvbi4KKy5QUAorXGZJQmxhY2tmaW4gT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkJsYWNrZmluIE9wdGlvbnMiCisuSVAgIlxmQlwtbWNwdT1cZlJcZkljcHVcZlJbXGZCXC1cZlJcZklzaXJldmlzaW9uXGZSXSIgNAorLklYIEl0ZW0gIi1tY3B1PWNwdVstc2lyZXZpc2lvbl0iCitTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBCbGFja2ZpbiBwcm9jZXNzb3IuICBDdXJyZW50bHksIFxmSWNwdVxmUgorY2FuIGJlIG9uZSBvZiBcZkJiZjUxMlxmUiwgXGZCYmY1MTRcZlIsIFxmQmJmNTE2XGZSLCBcZkJiZjUxOFxmUiwKK1wmXGZCYmY1MjJcZlIsIFxmQmJmNTIzXGZSLCBcZkJiZjUyNFxmUiwgXGZCYmY1MjVcZlIsIFxmQmJmNTI2XGZSLAorXCZcZkJiZjUyN1xmUiwgXGZCYmY1MzFcZlIsIFxmQmJmNTMyXGZSLCBcZkJiZjUzM1xmUiwKK1wmXGZCYmY1MzRcZlIsIFxmQmJmNTM2XGZSLCBcZkJiZjUzN1xmUiwgXGZCYmY1MzhcZlIsIFxmQmJmNTM5XGZSLAorXCZcZkJiZjU0MlxmUiwgXGZCYmY1NDRcZlIsIFxmQmJmNTQ3XGZSLCBcZkJiZjU0OFxmUiwgXGZCYmY1NDlcZlIsCitcJlxmQmJmNTQybVxmUiwgXGZCYmY1NDRtXGZSLCBcZkJiZjU0N21cZlIsIFxmQmJmNTQ4bVxmUiwgXGZCYmY1NDltXGZSLAorXCZcZkJiZjU2MVxmUiwgXGZCYmY1OTJcZlIuCisuU3AKK1RoZSBvcHRpb25hbCBcZklzaXJldmlzaW9uXGZSIHNwZWNpZmllcyB0aGUgc2lsaWNvbiByZXZpc2lvbiBvZiB0aGUgdGFyZ2V0CitCbGFja2ZpbiBwcm9jZXNzb3IuICBBbnkgd29ya2Fyb3VuZHMgYXZhaWxhYmxlIGZvciB0aGUgdGFyZ2V0ZWQgc2lsaWNvbiByZXZpc2lvbgorYXJlIGVuYWJsZWQuICBJZiBcZklzaXJldmlzaW9uXGZSIGlzIFxmQm5vbmVcZlIsIG5vIHdvcmthcm91bmRzIGFyZSBlbmFibGVkLgorSWYgXGZJc2lyZXZpc2lvblxmUiBpcyBcZkJhbnlcZlIsIGFsbCB3b3JrYXJvdW5kcyBmb3IgdGhlIHRhcmdldGVkIHByb2Nlc3NvcgorYXJlIGVuYWJsZWQuICBUaGUgXGYoQ1dcKihDYF9cfF9TSUxJQ09OX1JFVklTSU9OX1x8X1wqKEMnXGZSIG1hY3JvIGlzIGRlZmluZWQgdG8gdHdvCitoZXhhZGVjaW1hbCBkaWdpdHMgcmVwcmVzZW50aW5nIHRoZSBtYWpvciBhbmQgbWlub3IgbnVtYmVycyBpbiB0aGUgc2lsaWNvbgorcmV2aXNpb24uICBJZiBcZklzaXJldmlzaW9uXGZSIGlzIFxmQm5vbmVcZlIsIHRoZSBcZihDV1wqKENgX1x8X1NJTElDT05fUkVWSVNJT05fXHxfXCooQydcZlIKK2lzIG5vdCBkZWZpbmVkLiAgSWYgXGZJc2lyZXZpc2lvblxmUiBpcyBcZkJhbnlcZlIsIHRoZQorXCZcZihDV1wqKENgX1x8X1NJTElDT05fUkVWSVNJT05fXHxfXCooQydcZlIgaXMgZGVmaW5lZCB0byBiZSBcZihDVzB4ZmZmZlxmUi4KK0lmIHRoaXMgb3B0aW9uYWwgXGZJc2lyZXZpc2lvblxmUiBpcyBub3QgdXNlZCwgXHMtMUdDQ1xzMCBhc3N1bWVzIHRoZSBsYXRlc3Qga25vd24KK3NpbGljb24gcmV2aXNpb24gb2YgdGhlIHRhcmdldGVkIEJsYWNrZmluIHByb2Nlc3Nvci4KKy5TcAorXCZccy0xR0NDXHMwIGRlZmluZXMgYSBwcmVwcm9jZXNzb3IgbWFjcm8gZm9yIHRoZSBzcGVjaWZpZWQgXGZJY3B1XGZSLgorRm9yIHRoZSBcZkJiZmluLWVsZlxmUiB0b29sY2hhaW4sIHRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgaGFyZHdhcmUgXHMtMUJTUFxzMAorcHJvdmlkZWQgYnkgbGliZ2xvc3MgdG8gYmUgbGlua2VkIGluIGlmIFxmQlwtbXNpbVxmUiBpcyBub3QgZ2l2ZW4uCisuU3AKK1dpdGhvdXQgdGhpcyBvcHRpb24sIFxmQmJmNTMyXGZSIGlzIHVzZWQgYXMgdGhlIHByb2Nlc3NvciBieSBkZWZhdWx0LgorLlNwCitOb3RlIHRoYXQgc3VwcG9ydCBmb3IgXGZCYmY1NjFcZlIgaXMgaW5jb21wbGV0ZS4gIEZvciBcZkJiZjU2MVxmUiwKK29ubHkgdGhlIHByZXByb2Nlc3NvciBtYWNybyBpcyBkZWZpbmVkLgorLklQICJcZkJcLW1zaW1cZlIiIDQKKy5JWCBJdGVtICItbXNpbSIKK1NwZWNpZmllcyB0aGF0IHRoZSBwcm9ncmFtIHdpbGwgYmUgcnVuIG9uIHRoZSBzaW11bGF0b3IuICBUaGlzIGNhdXNlcwordGhlIHNpbXVsYXRvciBccy0xQlNQXHMwIHByb3ZpZGVkIGJ5IGxpYmdsb3NzIHRvIGJlIGxpbmtlZCBpbi4gIFRoaXMgb3B0aW9uCitoYXMgZWZmZWN0IG9ubHkgZm9yIFxmQmJmaW4tZWxmXGZSIHRvb2xjaGFpbi4KK0NlcnRhaW4gb3RoZXIgb3B0aW9ucywgc3VjaCBhcyBcZkJcLW1pZFwtc2hhcmVkXC1saWJyYXJ5XGZSIGFuZAorXCZcZkJcLW1mZHBpY1xmUiwgaW1wbHkgXGZCXC1tc2ltXGZSLgorLklQICJcZkJcLW1vbWl0XC1sZWFmXC1mcmFtZVwtcG9pbnRlclxmUiIgNAorLklYIEl0ZW0gIi1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIiCitEb24ndCBrZWVwIHRoZSBmcmFtZSBwb2ludGVyIGluIGEgcmVnaXN0ZXIgZm9yIGxlYWYgZnVuY3Rpb25zLiAgVGhpcworYXZvaWRzIHRoZSBpbnN0cnVjdGlvbnMgdG8gc2F2ZSwgc2V0IHVwIGFuZCByZXN0b3JlIGZyYW1lIHBvaW50ZXJzIGFuZAorbWFrZXMgYW4gZXh0cmEgcmVnaXN0ZXIgYXZhaWxhYmxlIGluIGxlYWYgZnVuY3Rpb25zLiAgVGhlIG9wdGlvbgorXCZcZkJcLWZvbWl0XC1mcmFtZVwtcG9pbnRlclxmUiByZW1vdmVzIHRoZSBmcmFtZSBwb2ludGVyIGZvciBhbGwgZnVuY3Rpb25zLAord2hpY2ggbWlnaHQgbWFrZSBkZWJ1Z2dpbmcgaGFyZGVyLgorLklQICJcZkJcLW1zcGVjbGRcLWFub21hbHlcZlIiIDQKKy5JWCBJdGVtICItbXNwZWNsZC1hbm9tYWx5IgorV2hlbiBlbmFibGVkLCB0aGUgY29tcGlsZXIgZW5zdXJlcyB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSBkb2VzIG5vdAorY29udGFpbiBzcGVjdWxhdGl2ZSBsb2FkcyBhZnRlciBqdW1wIGluc3RydWN0aW9ucy4gSWYgdGhpcyBvcHRpb24gaXMgdXNlZCwKK1wmXGYoQ1dcKihDYF9cfF9XT1JLQVJPVU5EX1NQRUNVTEFUSVZFX0xPQURTXCooQydcZlIgaXMgZGVmaW5lZC4KKy5JUCAiXGZCXC1tbm9cLXNwZWNsZFwtYW5vbWFseVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3BlY2xkLWFub21hbHkiCitEb24ndCBnZW5lcmF0ZSBleHRyYSBjb2RlIHRvIHByZXZlbnQgc3BlY3VsYXRpdmUgbG9hZHMgZnJvbSBvY2N1cnJpbmcuCisuSVAgIlxmQlwtbWNzeW5jXC1hbm9tYWx5XGZSIiA0CisuSVggSXRlbSAiLW1jc3luYy1hbm9tYWx5IgorV2hlbiBlbmFibGVkLCB0aGUgY29tcGlsZXIgZW5zdXJlcyB0aGF0IHRoZSBnZW5lcmF0ZWQgY29kZSBkb2VzIG5vdAorY29udGFpbiBccy0xQ1NZTkNcczAgb3IgXHMtMVNTWU5DXHMwIGluc3RydWN0aW9ucyB0b28gc29vbiBhZnRlciBjb25kaXRpb25hbCBicmFuY2hlcy4KK0lmIHRoaXMgb3B0aW9uIGlzIHVzZWQsIFxmKENXXCooQ2BfXHxfV09SS0FST1VORF9TUEVDVUxBVElWRV9TWU5DU1wqKEMnXGZSIGlzIGRlZmluZWQuCisuSVAgIlxmQlwtbW5vXC1jc3luY1wtYW5vbWFseVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tY3N5bmMtYW5vbWFseSIKK0Rvbid0IGdlbmVyYXRlIGV4dHJhIGNvZGUgdG8gcHJldmVudCBccy0xQ1NZTkNcczAgb3IgXHMtMVNTWU5DXHMwIGluc3RydWN0aW9ucyBmcm9tCitvY2N1cnJpbmcgdG9vIHNvb24gYWZ0ZXIgYSBjb25kaXRpb25hbCBicmFuY2guCisuSVAgIlxmQlwtbWxvd1wtNjRrXGZSIiA0CisuSVggSXRlbSAiLW1sb3ctNjRrIgorV2hlbiBlbmFibGVkLCB0aGUgY29tcGlsZXIgaXMgZnJlZSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUga25vd2xlZGdlIHRoYXQKK3RoZSBlbnRpcmUgcHJvZ3JhbSBmaXRzIGludG8gdGhlIGxvdyA2NGsgb2YgbWVtb3J5LgorLklQICJcZkJcLW1ub1wtbG93XC02NGtcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxvdy02NGsiCitBc3N1bWUgdGhhdCB0aGUgcHJvZ3JhbSBpcyBhcmJpdHJhcmlseSBsYXJnZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbXN0YWNrXC1jaGVja1wtbDFcZlIiIDQKKy5JWCBJdGVtICItbXN0YWNrLWNoZWNrLWwxIgorRG8gc3RhY2sgY2hlY2tpbmcgdXNpbmcgaW5mb3JtYXRpb24gcGxhY2VkIGludG8gTDEgc2NyYXRjaHBhZCBtZW1vcnkgYnkgdGhlCit1Q2xpbnV4IGtlcm5lbC4KKy5JUCAiXGZCXC1taWRcLXNoYXJlZFwtbGlicmFyeVxmUiIgNAorLklYIEl0ZW0gIi1taWQtc2hhcmVkLWxpYnJhcnkiCitHZW5lcmF0ZSBjb2RlIHRoYXQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyB2aWEgdGhlIGxpYnJhcnkgXHMtMUlEXHMwIG1ldGhvZC4KK1RoaXMgYWxsb3dzIGZvciBleGVjdXRlIGluIHBsYWNlIGFuZCBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGVudmlyb25tZW50Cit3aXRob3V0IHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuICBUaGlzIG9wdGlvbiBpbXBsaWVzIFxmQlwtZlBJQ1xmUi4KK1dpdGggYSBcZkJiZmluLWVsZlxmUiB0YXJnZXQsIHRoaXMgb3B0aW9uIGltcGxpZXMgXGZCXC1tc2ltXGZSLgorLklQICJcZkJcLW1ub1wtaWRcLXNoYXJlZFwtbGlicmFyeVxmUiIgNAorLklYIEl0ZW0gIi1tbm8taWQtc2hhcmVkLWxpYnJhcnkiCitHZW5lcmF0ZSBjb2RlIHRoYXQgZG9lc24ndCBhc3N1bWUgSUQtYmFzZWQgc2hhcmVkIGxpYnJhcmllcyBhcmUgYmVpbmcgdXNlZC4KK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWxlYWZcLWlkXC1zaGFyZWRcLWxpYnJhcnlcZlIiIDQKKy5JWCBJdGVtICItbWxlYWYtaWQtc2hhcmVkLWxpYnJhcnkiCitHZW5lcmF0ZSBjb2RlIHRoYXQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyB2aWEgdGhlIGxpYnJhcnkgXHMtMUlEXHMwIG1ldGhvZCwKK2J1dCBhc3N1bWVzIHRoYXQgdGhpcyBsaWJyYXJ5IG9yIGV4ZWN1dGFibGUgd29uJ3QgbGluayBhZ2FpbnN0IGFueSBvdGhlcgorXCZccy0xSURcczAgc2hhcmVkIGxpYnJhcmllcy4gIFRoYXQgYWxsb3dzIHRoZSBjb21waWxlciB0byB1c2UgZmFzdGVyIGNvZGUgZm9yIGp1bXBzCithbmQgY2FsbHMuCisuSVAgIlxmQlwtbW5vXC1sZWFmXC1pZFwtc2hhcmVkXC1saWJyYXJ5XGZSIiA0CisuSVggSXRlbSAiLW1uby1sZWFmLWlkLXNoYXJlZC1saWJyYXJ5IgorRG8gbm90IGFzc3VtZSB0aGF0IHRoZSBjb2RlIGJlaW5nIGNvbXBpbGVkIHdvbid0IGxpbmsgYWdhaW5zdCBhbnkgXHMtMUlEXHMwIHNoYXJlZAorbGlicmFyaWVzLiAgU2xvd2VyIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciBqdW1wIGFuZCBjYWxsIGluc25zLgorLklQICJcZkJcLW1zaGFyZWRcLWxpYnJhcnlcLWlkPW5cZlIiIDQKKy5JWCBJdGVtICItbXNoYXJlZC1saWJyYXJ5LWlkPW4iCitTcGVjaWZpZXMgdGhlIGlkZW50aWZpY2F0aW9uIG51bWJlciBvZiB0aGUgSUQtYmFzZWQgc2hhcmVkIGxpYnJhcnkgYmVpbmcKK2NvbXBpbGVkLiAgU3BlY2lmeWluZyBhIHZhbHVlIG9mIDAgZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCBjb2RlOyBzcGVjaWZ5aW5nCitvdGhlciB2YWx1ZXMgZm9yY2VzIHRoZSBhbGxvY2F0aW9uIG9mIHRoYXQgbnVtYmVyIHRvIHRoZSBjdXJyZW50CitsaWJyYXJ5IGJ1dCBpcyBubyBtb3JlIHNwYWNlXC0gb3IgdGltZS1lZmZpY2llbnQgdGhhbiBvbWl0dGluZyB0aGlzIG9wdGlvbi4KKy5JUCAiXGZCXC1tc2VwXC1kYXRhXGZSIiA0CisuSVggSXRlbSAiLW1zZXAtZGF0YSIKK0dlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgdGhlIGRhdGEgc2VnbWVudCB0byBiZSBsb2NhdGVkIGluIGEgZGlmZmVyZW50CithcmVhIG9mIG1lbW9yeSBmcm9tIHRoZSB0ZXh0IHNlZ21lbnQuICBUaGlzIGFsbG93cyBmb3IgZXhlY3V0ZSBpbiBwbGFjZSBpbgorYW4gZW52aXJvbm1lbnQgd2l0aG91dCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IGJ5IGVsaW1pbmF0aW5nIHJlbG9jYXRpb25zCithZ2FpbnN0IHRoZSB0ZXh0IHNlY3Rpb24uCisuSVAgIlxmQlwtbW5vXC1zZXBcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNlcC1kYXRhIgorR2VuZXJhdGUgY29kZSB0aGF0IGFzc3VtZXMgdGhhdCB0aGUgZGF0YSBzZWdtZW50IGZvbGxvd3MgdGhlIHRleHQgc2VnbWVudC4KK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1sb25nLWNhbGxzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1uby1sb25nLWNhbGxzIgorLlBECitUZWxscyB0aGUgY29tcGlsZXIgdG8gcGVyZm9ybSBmdW5jdGlvbiBjYWxscyBieSBmaXJzdCBsb2FkaW5nIHRoZQorYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gaW50byBhIHJlZ2lzdGVyIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBzdWJyb3V0aW5lCitjYWxsIG9uIHRoaXMgcmVnaXN0ZXIuICBUaGlzIHN3aXRjaCBpcyBuZWVkZWQgaWYgdGhlIHRhcmdldCBmdW5jdGlvbgorbGllcyBvdXRzaWRlIG9mIHRoZSAyNFwtYml0IGFkZHJlc3NpbmcgcmFuZ2Ugb2YgdGhlIG9mZnNldC1iYXNlZAordmVyc2lvbiBvZiBzdWJyb3V0aW5lIGNhbGwgaW5zdHJ1Y3Rpb24uCisuU3AKK1RoaXMgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiAgU3BlY2lmeWluZworXCZcZkJcLW1ub1wtbG9uZ1wtY2FsbHNcZlIgcmVzdG9yZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuICBOb3RlIHRoZXNlCitzd2l0Y2hlcyBoYXZlIG5vIGVmZmVjdCBvbiBob3cgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBjb2RlIHRvIGhhbmRsZQorZnVuY3Rpb24gY2FsbHMgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzLgorLklQICJcZkJcLW1mYXN0XC1mcFxmUiIgNAorLklYIEl0ZW0gIi1tZmFzdC1mcCIKK0xpbmsgd2l0aCB0aGUgZmFzdCBmbG9hdGluZy1wb2ludCBsaWJyYXJ5LiBUaGlzIGxpYnJhcnkgcmVsYXhlcyBzb21lIG9mCit0aGUgXHMtMUlFRUVcczAgZmxvYXRpbmctcG9pbnQgc3RhbmRhcmQncyBydWxlcyBmb3IgY2hlY2tpbmcgaW5wdXRzIGFnYWluc3QKK05vdC1hLU51bWJlciAoXHMtMU5BTlxzMCksIGluIHRoZSBpbnRlcmVzdCBvZiBwZXJmb3JtYW5jZS4KKy5JUCAiXGZCXC1taW5saW5lXC1wbHRcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1wbHQiCitFbmFibGUgaW5saW5pbmcgb2YgXHMtMVBMVFxzMCBlbnRyaWVzIGluIGZ1bmN0aW9uIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGFyZQorbm90IGtub3duIHRvIGJpbmQgbG9jYWxseS4gIEl0IGhhcyBubyBlZmZlY3Qgd2l0aG91dCBcZkJcLW1mZHBpY1xmUi4KKy5JUCAiXGZCXC1tbXVsdGljb3JlXGZSIiA0CisuSVggSXRlbSAiLW1tdWx0aWNvcmUiCitCdWlsZCBhIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gZm9yIG11bHRpY29yZSBCbGFja2ZpbiBwcm9jZXNzb3JzLiAKK1RoaXMgb3B0aW9uIGNhdXNlcyBwcm9wZXIgc3RhcnQgZmlsZXMgYW5kIGxpbmsgc2NyaXB0cyBzdXBwb3J0aW5nIAorbXVsdGljb3JlIHRvIGJlIHVzZWQsIGFuZCBkZWZpbmVzIHRoZSBtYWNybyBcZihDV1wqKENgX1x8X0JGSU5fTVVMVElDT1JFXCooQydcZlIuIAorSXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFxmQlwtbWNwdT1iZjU2MVxmUltcZkJcLVxmUlxmSXNpcmV2aXNpb25cZlJdLgorLlNwCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB3aXRoIFxmQlwtbWNvcmVhXGZSIG9yIFxmQlwtbWNvcmViXGZSLCB3aGljaAorc2VsZWN0cyB0aGUgb25lLWFwcGxpY2F0aW9uLXBlci1jb3JlIHByb2dyYW1taW5nIG1vZGVsLiAgV2l0aG91dAorXCZcZkJcLW1jb3JlYVxmUiBvciBcZkJcLW1jb3JlYlxmUiwgdGhlIHNpbmdsZVwtYXBwbGljYXRpb24vZHVhbFwtY29yZQorcHJvZ3JhbW1pbmcgbW9kZWwgaXMgdXNlZC4gSW4gdGhpcyBtb2RlbCwgdGhlIG1haW4gZnVuY3Rpb24gb2YgQ29yZSBCCitzaG91bGQgYmUgbmFtZWQgYXMgXGYoQ1dcKihDYGNvcmViX21haW5cKihDJ1xmUi4KKy5TcAorSWYgdGhpcyBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSBzaW5nbGUtY29yZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworbW9kZWwgaXMgdXNlZC4KKy5JUCAiXGZCXC1tY29yZWFcZlIiIDQKKy5JWCBJdGVtICItbWNvcmVhIgorQnVpbGQgYSBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIGZvciBDb3JlIEEgb2YgXHMtMUJGNTYxXHMwIHdoZW4gdXNpbmcKK3RoZSBvbmUtYXBwbGljYXRpb24tcGVyLWNvcmUgcHJvZ3JhbW1pbmcgbW9kZWwuIFByb3BlciBzdGFydCBmaWxlcworYW5kIGxpbmsgc2NyaXB0cyBhcmUgdXNlZCB0byBzdXBwb3J0IENvcmUgQSwgYW5kIHRoZSBtYWNybworXCZcZihDV1wqKENgX1x8X0JGSU5fQ09SRUFcKihDJ1xmUiBpcyBkZWZpbmVkLgorVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIFxmQlwtbW11bHRpY29yZVxmUi4KKy5JUCAiXGZCXC1tY29yZWJcZlIiIDQKKy5JWCBJdGVtICItbWNvcmViIgorQnVpbGQgYSBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIGZvciBDb3JlIEIgb2YgXHMtMUJGNTYxXHMwIHdoZW4gdXNpbmcKK3RoZSBvbmUtYXBwbGljYXRpb24tcGVyLWNvcmUgcHJvZ3JhbW1pbmcgbW9kZWwuIFByb3BlciBzdGFydCBmaWxlcworYW5kIGxpbmsgc2NyaXB0cyBhcmUgdXNlZCB0byBzdXBwb3J0IENvcmUgQiwgYW5kIHRoZSBtYWNybworXCZcZihDV1wqKENgX1x8X0JGSU5fQ09SRUJcKihDJ1xmUiBpcyBkZWZpbmVkLiBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIFxmKENXXCooQ2Bjb3JlYl9tYWluXCooQydcZlIKK3Nob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgXGYoQ1dcKihDYG1haW5cKihDJ1xmUi4gCitUaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggXGZCXC1tbXVsdGljb3JlXGZSLgorLklQICJcZkJcLW1zZHJhbVxmUiIgNAorLklYIEl0ZW0gIi1tc2RyYW0iCitCdWlsZCBhIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gZm9yIFxzLTFTRFJBTVxzMC4gUHJvcGVyIHN0YXJ0IGZpbGVzIGFuZAorbGluayBzY3JpcHRzIGFyZSB1c2VkIHRvIHB1dCB0aGUgYXBwbGljYXRpb24gaW50byBccy0xU0RSQU1cczAsIGFuZCB0aGUgbWFjcm8KK1wmXGYoQ1dcKihDYF9cfF9CRklOX1NEUkFNXCooQydcZlIgaXMgZGVmaW5lZC4KK1RoZSBsb2FkZXIgc2hvdWxkIGluaXRpYWxpemUgXHMtMVNEUkFNXHMwIGJlZm9yZSBsb2FkaW5nIHRoZSBhcHBsaWNhdGlvbi4KKy5JUCAiXGZCXC1taWNwbGJcZlIiIDQKKy5JWCBJdGVtICItbWljcGxiIgorQXNzdW1lIHRoYXQgSUNQTEJzIGFyZSBlbmFibGVkIGF0IHJ1biB0aW1lLiAgVGhpcyBoYXMgYW4gZWZmZWN0IG9uIGNlcnRhaW4KK2Fub21hbHkgd29ya2Fyb3VuZHMuICBGb3IgTGludXggdGFyZ2V0cywgdGhlIGRlZmF1bHQgaXMgdG8gYXNzdW1lIElDUExCcworYXJlIGVuYWJsZWQ7IGZvciBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0aGUgZGVmYXVsdCBpcyBvZmYuCisuUFAKK1xmSUM2WCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiQzZYIE9wdGlvbnMiCisuSVAgIlxmQlwtbWFyY2g9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tYXJjaD1uYW1lIgorVGhpcyBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuICBccy0xR0NDXHMwIHVzZXMgdGhpcworbmFtZSB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIGluc3RydWN0aW9ucyBpdCBjYW4gZW1pdCB3aGVuIGdlbmVyYXRpbmcKK2Fzc2VtYmx5IGNvZGUuICBQZXJtaXNzaWJsZSBuYW1lcyBhcmU6IFxmQmM2MnhcZlIsCitcJlxmQmM2NHhcZlIsIFxmQmM2NHgrXGZSLCBcZkJjNjd4XGZSLCBcZkJjNjd4K1xmUiwgXGZCYzY3NHhcZlIuCisuSVAgIlxmQlwtbWJpZ1wtZW5kaWFuXGZSIiA0CisuSVggSXRlbSAiLW1iaWctZW5kaWFuIgorR2VuZXJhdGUgY29kZSBmb3IgYSBiaWctZW5kaWFuIHRhcmdldC4KKy5JUCAiXGZCXC1tbGl0dGxlXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWxpdHRsZS1lbmRpYW4iCitHZW5lcmF0ZSBjb2RlIGZvciBhIGxpdHRsZS1lbmRpYW4gdGFyZ2V0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tc2ltXGZSIiA0CisuSVggSXRlbSAiLW1zaW0iCitDaG9vc2Ugc3RhcnR1cCBmaWxlcyBhbmQgbGlua2VyIHNjcmlwdCBzdWl0YWJsZSBmb3IgdGhlIHNpbXVsYXRvci4KKy5JUCAiXGZCXC1tc2RhdGE9ZGVmYXVsdFxmUiIgNAorLklYIEl0ZW0gIi1tc2RhdGE9ZGVmYXVsdCIKK1B1dCBzbWFsbCBnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSBcZkIubmVhcmRhdGFcZlIgc2VjdGlvbiwKK3doaWNoIGlzIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIgXGYoQ1dcKihDYEIxNFwqKEMnXGZSLiAgUHV0IHNtYWxsIHVuaW5pdGlhbGl6ZWQKK2dsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlIFxmQi5ic3NcZlIgc2VjdGlvbiwgd2hpY2ggaXMgYWRqYWNlbnQKK3RvIHRoZSBcZkIubmVhcmRhdGFcZlIgc2VjdGlvbi4gIFB1dCBzbWFsbCByZWFkLW9ubHkgZGF0YSBpbnRvIHRoZQorXCZcZkIucm9kYXRhXGZSIHNlY3Rpb24uICBUaGUgY29ycmVzcG9uZGluZyBzZWN0aW9ucyB1c2VkIGZvciBsYXJnZQorcGllY2VzIG9mIGRhdGEgYXJlIFxmQi5mYXJkYXRhXGZSLCBcZkIuZmFyXGZSIGFuZCBcZkIuY29uc3RcZlIuCisuSVAgIlxmQlwtbXNkYXRhPWFsbFxmUiIgNAorLklYIEl0ZW0gIi1tc2RhdGE9YWxsIgorUHV0IGFsbCBkYXRhLCBub3QganVzdCBzbWFsbCBvYmplY3RzLCBpbnRvIHRoZSBzZWN0aW9ucyByZXNlcnZlZCBmb3IKK3NtYWxsIGRhdGEsIGFuZCB1c2UgYWRkcmVzc2luZyByZWxhdGl2ZSB0byB0aGUgXGYoQ1dcKihDYEIxNFwqKEMnXGZSIHJlZ2lzdGVyIHRvCithY2Nlc3MgdGhlbS4KKy5JUCAiXGZCXC1tc2RhdGE9bm9uZVxmUiIgNAorLklYIEl0ZW0gIi1tc2RhdGE9bm9uZSIKK01ha2Ugbm8gdXNlIG9mIHRoZSBzZWN0aW9ucyByZXNlcnZlZCBmb3Igc21hbGwgZGF0YSwgYW5kIHVzZSBhYnNvbHV0ZQorYWRkcmVzc2VzIHRvIGFjY2VzcyBhbGwgZGF0YS4gIFB1dCBhbGwgaW5pdGlhbGl6ZWQgZ2xvYmFsIGFuZCBzdGF0aWMKK2RhdGEgaW4gdGhlIFxmQi5mYXJkYXRhXGZSIHNlY3Rpb24sIGFuZCBhbGwgdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZQorXCZcZkIuZmFyXGZSIHNlY3Rpb24uICBQdXQgYWxsIGNvbnN0YW50IGRhdGEgaW50byB0aGUgXGZCLmNvbnN0XGZSCitzZWN0aW9uLgorLlBQCitcZklccy0xQ1JJU1xzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiQ1JJUyBPcHRpb25zIgorLlBQCitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIHNwZWNpZmljYWxseSBmb3IgdGhlIFxzLTFDUklTXHMwIHBvcnRzLgorLklQICJcZkJcLW1hcmNoPVxmUlxmSWFyY2hpdGVjdHVyZS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW1hcmNoPWFyY2hpdGVjdHVyZS10eXBlIgorLlBEIDAKKy5JUCAiXGZCXC1tY3B1PVxmUlxmSWFyY2hpdGVjdHVyZS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9YXJjaGl0ZWN0dXJlLXR5cGUiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLiAgVGhlIGNob2ljZXMgZm9yCitcJlxmSWFyY2hpdGVjdHVyZS10eXBlXGZSIGFyZSBcZkJ2M1xmUiwgXGZCdjhcZlIgYW5kIFxmQnYxMFxmUiBmb3IKK3Jlc3BlY3RpdmVseSBccy0xRVRSQVhcczBcIDQsIFxzLTFFVFJBWFxzMFwgMTAwLCBhbmQgXHMtMUVUUkFYXHMwXCAxMDBcIFxzLTFMWFxzMC4KK0RlZmF1bHQgaXMgXGZCdjBcZlIgZXhjZXB0IGZvciBjcmlzLWF4aXMtbGludXgtZ251LCB3aGVyZSB0aGUgZGVmYXVsdCBpcworXCZcZkJ2MTBcZlIuCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJYXJjaGl0ZWN0dXJlLXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9YXJjaGl0ZWN0dXJlLXR5cGUiCitUdW5lIHRvIFxmSWFyY2hpdGVjdHVyZS10eXBlXGZSIGV2ZXJ5dGhpbmcgYXBwbGljYWJsZSBhYm91dCB0aGUgZ2VuZXJhdGVkCitjb2RlLCBleGNlcHQgZm9yIHRoZSBccy0xQUJJXHMwIGFuZCB0aGUgc2V0IG9mIGF2YWlsYWJsZSBpbnN0cnVjdGlvbnMuICBUaGUKK2Nob2ljZXMgZm9yIFxmSWFyY2hpdGVjdHVyZS10eXBlXGZSIGFyZSB0aGUgc2FtZSBhcyBmb3IKK1wmXGZCXC1tYXJjaD1cZlJcZklhcmNoaXRlY3R1cmUtdHlwZVxmUi4KKy5JUCAiXGZCXC1tbWF4XC1zdGFja1wtZnJhbWU9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1tbWF4LXN0YWNrLWZyYW1lPW4iCitXYXJuIHdoZW4gdGhlIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gZXhjZWVkcyBcZkluXGZSIGJ5dGVzLgorLklQICJcZkJcLW1ldHJheDRcZlIiIDQKKy5JWCBJdGVtICItbWV0cmF4NCIKKy5QRCAwCisuSVAgIlxmQlwtbWV0cmF4MTAwXGZSIiA0CisuSVggSXRlbSAiLW1ldHJheDEwMCIKKy5QRAorVGhlIG9wdGlvbnMgXGZCXC1tZXRyYXg0XGZSIGFuZCBcZkJcLW1ldHJheDEwMFxmUiBhcmUgc3lub255bXMgZm9yCitcJlxmQlwtbWFyY2g9djNcZlIgYW5kIFxmQlwtbWFyY2g9djhcZlIgcmVzcGVjdGl2ZWx5LgorLklQICJcZkJcLW1tdWxcLWJ1Z1wtd29ya2Fyb3VuZFxmUiIgNAorLklYIEl0ZW0gIi1tbXVsLWJ1Zy13b3JrYXJvdW5kIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW11bFwtYnVnXC13b3JrYXJvdW5kXGZSIiA0CisuSVggSXRlbSAiLW1uby1tdWwtYnVnLXdvcmthcm91bmQiCisuUEQKK1dvcmsgYXJvdW5kIGEgYnVnIGluIHRoZSBcZihDV1wqKENgbXVsc1wqKEMnXGZSIGFuZCBcZihDV1wqKENgbXVsdVwqKEMnXGZSIGluc3RydWN0aW9ucyBmb3IgXHMtMUNQVVxzMAorbW9kZWxzIHdoZXJlIGl0IGFwcGxpZXMuICBUaGlzIG9wdGlvbiBpcyBhY3RpdmUgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tcGRlYnVnXGZSIiA0CisuSVggSXRlbSAiLW1wZGVidWciCitFbmFibGUgQ1JJUy1zcGVjaWZpYyB2ZXJib3NlIGRlYnVnLXJlbGF0ZWQgaW5mb3JtYXRpb24gaW4gdGhlIGFzc2VtYmx5Citjb2RlLiAgVGhpcyBvcHRpb24gYWxzbyBoYXMgdGhlIGVmZmVjdCBvZiB0dXJuaW5nIG9mZiB0aGUgXGZCI05PX0FQUFxmUgorZm9ybWF0dGVkLWNvZGUgaW5kaWNhdG9yIHRvIHRoZSBhc3NlbWJsZXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKK2Fzc2VtYmx5IGZpbGUuCisuSVAgIlxmQlwtbWNjXC1pbml0XGZSIiA0CisuSVggSXRlbSAiLW1jYy1pbml0IgorRG8gbm90IHVzZSBjb25kaXRpb24tY29kZSByZXN1bHRzIGZyb20gcHJldmlvdXMgaW5zdHJ1Y3Rpb247IGFsd2F5cyBlbWl0Citjb21wYXJlIGFuZCB0ZXN0IGluc3RydWN0aW9ucyBiZWZvcmUgdXNlIG9mIGNvbmRpdGlvbiBjb2Rlcy4KKy5JUCAiXGZCXC1tbm9cLXNpZGVcLWVmZmVjdHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNpZGUtZWZmZWN0cyIKK0RvIG5vdCBlbWl0IGluc3RydWN0aW9ucyB3aXRoIHNpZGUgZWZmZWN0cyBpbiBhZGRyZXNzaW5nIG1vZGVzIG90aGVyIHRoYW4KK3Bvc3QtaW5jcmVtZW50LgorLklQICJcZkJcLW1zdGFja1wtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbXN0YWNrLWFsaWduIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXN0YWNrXC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3RhY2stYWxpZ24iCisuSVAgIlxmQlwtbWRhdGFcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1kYXRhLWFsaWduIgorLklQICJcZkJcLW1ub1wtZGF0YVwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbW5vLWRhdGEtYWxpZ24iCisuSVAgIlxmQlwtbWNvbnN0XC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tY29uc3QtYWxpZ24iCisuSVAgIlxmQlwtbW5vXC1jb25zdFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbW5vLWNvbnN0LWFsaWduIgorLlBECitUaGVzZSBvcHRpb25zIChcZkJub1wtXGZSIG9wdGlvbnMpIGFycmFuZ2UgKGVsaW1pbmF0ZSBhcnJhbmdlbWVudHMpIGZvciB0aGUKK3N0YWNrIGZyYW1lLCBpbmRpdmlkdWFsIGRhdGEgYW5kIGNvbnN0YW50cyB0byBiZSBhbGlnbmVkIGZvciB0aGUgbWF4aW11bQorc2luZ2xlIGRhdGEgYWNjZXNzIHNpemUgZm9yIHRoZSBjaG9zZW4gXHMtMUNQVVxzMCBtb2RlbC4gIFRoZSBkZWZhdWx0IGlzIHRvCithcnJhbmdlIGZvciAzMlwtYml0IGFsaWdubWVudC4gIFxzLTFBQklcczAgZGV0YWlscyBzdWNoIGFzIHN0cnVjdHVyZSBsYXlvdXQgYXJlCitub3QgYWZmZWN0ZWQgYnkgdGhlc2Ugb3B0aW9ucy4KKy5JUCAiXGZCXC1tMzJcLWJpdFxmUiIgNAorLklYIEl0ZW0gIi1tMzItYml0IgorLlBEIDAKKy5JUCAiXGZCXC1tMTZcLWJpdFxmUiIgNAorLklYIEl0ZW0gIi1tMTYtYml0IgorLklQICJcZkJcLW04XC1iaXRcZlIiIDQKKy5JWCBJdGVtICItbTgtYml0IgorLlBECitTaW1pbGFyIHRvIHRoZSBzdGFja1wtIGRhdGFcLSBhbmQgY29uc3QtYWxpZ24gb3B0aW9ucyBhYm92ZSwgdGhlc2Ugb3B0aW9ucworYXJyYW5nZSBmb3Igc3RhY2sgZnJhbWUsIHdyaXRhYmxlIGRhdGEgYW5kIGNvbnN0YW50cyB0byBhbGwgYmUgMzJcLWJpdCwKKzE2XC1iaXQgb3IgOFwtYml0IGFsaWduZWQuICBUaGUgZGVmYXVsdCBpcyAzMlwtYml0IGFsaWdubWVudC4KKy5JUCAiXGZCXC1tbm9cLXByb2xvZ3VlXC1lcGlsb2d1ZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcHJvbG9ndWUtZXBpbG9ndWUiCisuUEQgMAorLklQICJcZkJcLW1wcm9sb2d1ZVwtZXBpbG9ndWVcZlIiIDQKKy5JWCBJdGVtICItbXByb2xvZ3VlLWVwaWxvZ3VlIgorLlBECitXaXRoIFxmQlwtbW5vXC1wcm9sb2d1ZVwtZXBpbG9ndWVcZlIsIHRoZSBub3JtYWwgZnVuY3Rpb24gcHJvbG9ndWUgYW5kCitlcGlsb2d1ZSB3aGljaCBzZXQgdXAgdGhlIHN0YWNrIGZyYW1lIGFyZSBvbWl0dGVkIGFuZCBubyByZXR1cm4KK2luc3RydWN0aW9ucyBvciByZXR1cm4gc2VxdWVuY2VzIGFyZSBnZW5lcmF0ZWQgaW4gdGhlIGNvZGUuICBVc2UgdGhpcworb3B0aW9uIG9ubHkgdG9nZXRoZXIgd2l0aCB2aXN1YWwgaW5zcGVjdGlvbiBvZiB0aGUgY29tcGlsZWQgY29kZTogbm8KK3dhcm5pbmdzIG9yIGVycm9ycyBhcmUgZ2VuZXJhdGVkIHdoZW4gY2FsbC1zYXZlZCByZWdpc3RlcnMgbXVzdCBiZSBzYXZlZCwKK29yIHN0b3JhZ2UgZm9yIGxvY2FsIHZhcmlhYmxlcyBuZWVkcyB0byBiZSBhbGxvY2F0ZWQuCisuSVAgIlxmQlwtbW5vXC1nb3RwbHRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWdvdHBsdCIKKy5QRCAwCisuSVAgIlxmQlwtbWdvdHBsdFxmUiIgNAorLklYIEl0ZW0gIi1tZ290cGx0IgorLlBECitXaXRoIFxmQlwtZnBpY1xmUiBhbmQgXGZCXC1mUElDXGZSLCBkb24ndCBnZW5lcmF0ZSAoZG8gZ2VuZXJhdGUpCitpbnN0cnVjdGlvbiBzZXF1ZW5jZXMgdGhhdCBsb2FkIGFkZHJlc3NlcyBmb3IgZnVuY3Rpb25zIGZyb20gdGhlIFxzLTFQTFRcczAgcGFydAorb2YgdGhlIFxzLTFHT1RcczAgcmF0aGVyIHRoYW4gKHRyYWRpdGlvbmFsIG9uIG90aGVyIGFyY2hpdGVjdHVyZXMpIGNhbGxzIHRvIHRoZQorXCZccy0xUExUXHMwLiAgVGhlIGRlZmF1bHQgaXMgXGZCXC1tZ290cGx0XGZSLgorLklQICJcZkJcLW1lbGZcZlIiIDQKKy5JWCBJdGVtICItbWVsZiIKK0xlZ2FjeSBuby1vcCBvcHRpb24gb25seSByZWNvZ25pemVkIHdpdGggdGhlIGNyaXMtYXhpcy1lbGYgYW5kCitjcmlzLWF4aXMtbGludXgtZ251IHRhcmdldHMuCisuSVAgIlxmQlwtbWxpbnV4XGZSIiA0CisuSVggSXRlbSAiLW1saW51eCIKK0xlZ2FjeSBuby1vcCBvcHRpb24gb25seSByZWNvZ25pemVkIHdpdGggdGhlIGNyaXMtYXhpcy1saW51eC1nbnUgdGFyZ2V0LgorLklQICJcZkJcLXNpbVxmUiIgNAorLklYIEl0ZW0gIi1zaW0iCitUaGlzIG9wdGlvbiwgcmVjb2duaXplZCBmb3IgdGhlIGNyaXMtYXhpcy1lbGYsIGFycmFuZ2VzCit0byBsaW5rIHdpdGggaW5wdXQtb3V0cHV0IGZ1bmN0aW9ucyBmcm9tIGEgc2ltdWxhdG9yIGxpYnJhcnkuICBDb2RlLAoraW5pdGlhbGl6ZWQgZGF0YSBhbmQgemVyby1pbml0aWFsaXplZCBkYXRhIGFyZSBhbGxvY2F0ZWQgY29uc2VjdXRpdmVseS4KKy5JUCAiXGZCXC1zaW0yXGZSIiA0CisuSVggSXRlbSAiLXNpbTIiCitMaWtlIFxmQlwtc2ltXGZSLCBidXQgcGFzcyBsaW5rZXIgb3B0aW9ucyB0byBsb2NhdGUgaW5pdGlhbGl6ZWQgZGF0YSBhdAorMHg0MDAwMDAwMCBhbmQgemVyby1pbml0aWFsaXplZCBkYXRhIGF0IDB4ODAwMDAwMDAuCisuUFAKK1xmSVxzLTFDUjE2XHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJDUjE2IE9wdGlvbnMiCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgXHMtMUNSMTZcczAgcG9ydHMuCisuSVAgIlxmQlwtbW1hY1xmUiIgNAorLklYIEl0ZW0gIi1tbWFjIgorRW5hYmxlIHRoZSB1c2Ugb2YgbXVsdGlwbHktYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMuIERpc2FibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbWNyMTZjcGx1c1xmUiIgNAorLklYIEl0ZW0gIi1tY3IxNmNwbHVzIgorLlBEIDAKKy5JUCAiXGZCXC1tY3IxNmNcZlIiIDQKKy5JWCBJdGVtICItbWNyMTZjIgorLlBECitHZW5lcmF0ZSBjb2RlIGZvciBccy0xQ1IxNkNcczAgb3IgXHMtMUNSMTZDK1xzMCBhcmNoaXRlY3R1cmUuIFxzLTFDUjE2QytcczAgYXJjaGl0ZWN0dXJlIAoraXMgZGVmYXVsdC4KKy5JUCAiXGZCXC1tc2ltXGZSIiA0CisuSVggSXRlbSAiLW1zaW0iCitMaW5rcyB0aGUgbGlicmFyeSBsaWJzaW0uYSB3aGljaCBpcyBpbiBjb21wYXRpYmxlIHdpdGggc2ltdWxhdG9yLiBBcHBsaWNhYmxlCit0byBccy0xRUxGXHMwIGNvbXBpbGVyIG9ubHkuCisuSVAgIlxmQlwtbWludDMyXGZSIiA0CisuSVggSXRlbSAiLW1pbnQzMiIKK0Nob29zZSBpbnRlZ2VyIHR5cGUgYXMgMzJcLWJpdCB3aWRlLgorLklQICJcZkJcLW1iaXRcLW9wc1xmUiIgNAorLklYIEl0ZW0gIi1tYml0LW9wcyIKK0dlbmVyYXRlcyBcZihDV1wqKENgc2JpdFwqKEMnXGZSL1xmKENXXCooQ2BjYml0XCooQydcZlIgaW5zdHJ1Y3Rpb25zIGZvciBiaXQgbWFuaXB1bGF0aW9ucy4KKy5JUCAiXGZCXC1tZGF0YVwtbW9kZWw9XGZSXGZJbW9kZWxcZlIiIDQKKy5JWCBJdGVtICItbWRhdGEtbW9kZWw9bW9kZWwiCitDaG9vc2UgYSBkYXRhIG1vZGVsLiBUaGUgY2hvaWNlcyBmb3IgXGZJbW9kZWxcZlIgYXJlIFxmQm5lYXJcZlIsCitcJlxmQmZhclxmUiBvciBcZkJtZWRpdW1cZlIuIFxmQm1lZGl1bVxmUiBpcyBkZWZhdWx0LgorSG93ZXZlciwgXGZCZmFyXGZSIGlzIG5vdCB2YWxpZCB3aXRoIFxmQlwtbWNyMTZjXGZSLCBhcyB0aGUKK1wmXHMtMUNSMTZDXHMwIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBmYXIgZGF0YSBtb2RlbC4KKy5QUAorXGZJRGFyd2luIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJEYXJ3aW4gT3B0aW9ucyIKKy5QUAorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgYWxsIGFyY2hpdGVjdHVyZXMgcnVubmluZyB0aGUgRGFyd2luIG9wZXJhdGluZworc3lzdGVtLgorLlBQCitcJlxzLTFGU0ZcczAgXHMtMUdDQ1xzMCBvbiBEYXJ3aW4gZG9lcyBub3QgY3JlYXRlIFwqKEwiZmF0XCooUiIgb2JqZWN0IGZpbGVzOyBpdCBjcmVhdGVzCithbiBvYmplY3QgZmlsZSBmb3IgdGhlIHNpbmdsZSBhcmNoaXRlY3R1cmUgdGhhdCBccy0xR0NDXHMwIHdhcyBidWlsdCB0bwordGFyZ2V0LiAgQXBwbGUncyBccy0xR0NDXHMwIG9uIERhcndpbiBkb2VzIGNyZWF0ZSBcKihMImZhdFwqKFIiIGZpbGVzIGlmIG11bHRpcGxlCitcJlxmQlwtYXJjaFxmUiBvcHRpb25zIGFyZSB1c2VkOyBpdCBkb2VzIHNvIGJ5IHJ1bm5pbmcgdGhlIGNvbXBpbGVyIG9yCitsaW5rZXIgbXVsdGlwbGUgdGltZXMgYW5kIGpvaW5pbmcgdGhlIHJlc3VsdHMgdG9nZXRoZXIgd2l0aAorXCZcZklsaXBvXGZSLgorLlBQCitUaGUgc3VidHlwZSBvZiB0aGUgZmlsZSBjcmVhdGVkIChsaWtlIFxmQnBwYzc0MDBcZlIgb3IgXGZCcHBjOTcwXGZSIG9yCitcJlxmQmk2ODZcZlIpIGlzIGRldGVybWluZWQgYnkgdGhlIGZsYWdzIHRoYXQgc3BlY2lmeSB0aGUgXHMtMUlTQVxzMAordGhhdCBccy0xR0NDXHMwIGlzIHRhcmdldGluZywgbGlrZSBcZkJcLW1jcHVcZlIgb3IgXGZCXC1tYXJjaFxmUi4gIFRoZQorXCZcZkJcLWZvcmNlX2NwdXN1YnR5cGVfQUxMXGZSIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGlzLgorLlBQCitUaGUgRGFyd2luIHRvb2xzIHZhcnkgaW4gdGhlaXIgYmVoYXZpb3Igd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiBccy0xSVNBXHMwCittaXNtYXRjaC4gIFRoZSBhc3NlbWJsZXIsIFxmSWFzXGZSLCBvbmx5IHBlcm1pdHMgaW5zdHJ1Y3Rpb25zIHRvCitiZSB1c2VkIHRoYXQgYXJlIHZhbGlkIGZvciB0aGUgc3VidHlwZSBvZiB0aGUgZmlsZSBpdCBpcyBnZW5lcmF0aW5nLAorc28geW91IGNhbm5vdCBwdXQgNjRcLWJpdCBpbnN0cnVjdGlvbnMgaW4gYSBcZkJwcGM3NTBcZlIgb2JqZWN0IGZpbGUuCitUaGUgbGlua2VyIGZvciBzaGFyZWQgbGlicmFyaWVzLCBcZkkvdXNyL2Jpbi9saWJ0b29sXGZSLCBmYWlscworYW5kIHByaW50cyBhbiBlcnJvciBpZiBhc2tlZCB0byBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSB3aXRoIGEgbGVzcworcmVzdHJpY3RpdmUgc3VidHlwZSB0aGFuIGl0cyBpbnB1dCBmaWxlcyAoZm9yIGluc3RhbmNlLCB0cnlpbmcgdG8gcHV0CithIFxmQnBwYzk3MFxmUiBvYmplY3QgZmlsZSBpbiBhIFxmQnBwYzc0MDBcZlIgbGlicmFyeSkuICBUaGUgbGlua2VyCitmb3IgZXhlY3V0YWJsZXMsIFxmQmxkXGZSLCBxdWlldGx5IGdpdmVzIHRoZSBleGVjdXRhYmxlIHRoZSBtb3N0CityZXN0cmljdGl2ZSBzdWJ0eXBlIG9mIGFueSBvZiBpdHMgaW5wdXQgZmlsZXMuCisuSVAgIlxmQlwtRlxmUlxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1GZGlyIgorQWRkIHRoZSBmcmFtZXdvcmsgZGlyZWN0b3J5IFxmSWRpclxmUiB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCBvZgorZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQgZm9yIGhlYWRlciBmaWxlcy4gIFRoZXNlIGRpcmVjdG9yaWVzIGFyZQoraW50ZXJsZWF2ZWQgd2l0aCB0aG9zZSBzcGVjaWZpZWQgYnkgXGZCXC1JXGZSIG9wdGlvbnMgYW5kIGFyZQorc2Nhbm5lZCBpbiBhIGxlZnQtdG8tcmlnaHQgb3JkZXIuCisuU3AKK0EgZnJhbWV3b3JrIGRpcmVjdG9yeSBpcyBhIGRpcmVjdG9yeSB3aXRoIGZyYW1ld29ya3MgaW4gaXQuICBBCitmcmFtZXdvcmsgaXMgYSBkaXJlY3Rvcnkgd2l0aCBhIFxmSUhlYWRlcnNcZlIgYW5kL29yCitcJlxmSVByaXZhdGVIZWFkZXJzXGZSIGRpcmVjdG9yeSBjb250YWluZWQgZGlyZWN0bHkgaW4gaXQgdGhhdCBlbmRzCitpbiBcZkkuZnJhbWV3b3JrXGZSLiAgVGhlIG5hbWUgb2YgYSBmcmFtZXdvcmsgaXMgdGhlIG5hbWUgb2YgdGhpcworZGlyZWN0b3J5IGV4Y2x1ZGluZyB0aGUgXGZJLmZyYW1ld29ya1xmUi4gIEhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoCit0aGUgZnJhbWV3b3JrIGFyZSBmb3VuZCBpbiBvbmUgb2YgdGhvc2UgdHdvIGRpcmVjdG9yaWVzLCB3aXRoCitcJlxmSUhlYWRlcnNcZlIgYmVpbmcgc2VhcmNoZWQgZmlyc3QuICBBIHN1YmZyYW1ld29yayBpcyBhIGZyYW1ld29yaworZGlyZWN0b3J5IHRoYXQgaXMgaW4gYSBmcmFtZXdvcmsncyBcZklGcmFtZXdvcmtzXGZSIGRpcmVjdG9yeS4KK0luY2x1ZGVzIG9mIHN1YmZyYW1ld29yayBoZWFkZXJzIGNhbiBvbmx5IGFwcGVhciBpbiBhIGhlYWRlciBvZiBhCitmcmFtZXdvcmsgdGhhdCBjb250YWlucyB0aGUgc3ViZnJhbWV3b3JrLCBvciBpbiBhIHNpYmxpbmcgc3ViZnJhbWV3b3JrCitoZWFkZXIuICBUd28gc3ViZnJhbWV3b3JrcyBhcmUgc2libGluZ3MgaWYgdGhleSBvY2N1ciBpbiB0aGUgc2FtZQorZnJhbWV3b3JrLiAgQSBzdWJmcmFtZXdvcmsgc2hvdWxkIG5vdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYQorZnJhbWV3b3JrOyBhIHdhcm5pbmcgaXMgaXNzdWVkIGlmIHRoaXMgaXMgdmlvbGF0ZWQuICBDdXJyZW50bHkgYQorc3ViZnJhbWV3b3JrIGNhbm5vdCBoYXZlIHN1YmZyYW1ld29ya3M7IGluIHRoZSBmdXR1cmUsIHRoZSBtZWNoYW5pc20KK21heSBiZSBleHRlbmRlZCB0byBzdXBwb3J0IHRoaXMuICBUaGUgc3RhbmRhcmQgZnJhbWV3b3JrcyBjYW4gYmUgZm91bmQKK2luIFxmSS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzXGZSIGFuZAorXCZcZkkvTGlicmFyeS9GcmFtZXdvcmtzXGZSLiAgQW4gZXhhbXBsZSBpbmNsdWRlIGxvb2tzIGxpa2UKK1wmXGYoQ1dcKihDYCNpbmNsdWRlIDxGcmFtZXdvcmsvaGVhZGVyLmg+XCooQydcZlIsIHdoZXJlIFxmSUZyYW1ld29ya1xmUiBkZW5vdGVzCit0aGUgbmFtZSBvZiB0aGUgZnJhbWV3b3JrIGFuZCBcZkloZWFkZXIuaFxmUiBpcyBmb3VuZCBpbiB0aGUKK1wmXGZJUHJpdmF0ZUhlYWRlcnNcZlIgb3IgXGZJSGVhZGVyc1xmUiBkaXJlY3RvcnkuCisuSVAgIlxmQlwtaWZyYW1ld29ya1xmUlxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pZnJhbWV3b3JrZGlyIgorTGlrZSBcZkJcLUZcZlIgZXhjZXB0IHRoZSBkaXJlY3RvcnkgaXMgYSB0cmVhdGVkIGFzIGEgc3lzdGVtCitkaXJlY3RvcnkuICBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBcZkJcLWlmcmFtZXdvcmtcZlIgYW5kCitcJlxmQlwtRlxmUiBpcyB0aGF0IHdpdGggXGZCXC1pZnJhbWV3b3JrXGZSIHRoZSBjb21waWxlciBkb2VzIG5vdAord2FybiBhYm91dCBjb25zdHJ1Y3RzIGNvbnRhaW5lZCB3aXRoaW4gaGVhZGVyIGZpbGVzIGZvdW5kIHZpYQorXCZcZklkaXJcZlIuICBUaGlzIG9wdGlvbiBpcyB2YWxpZCBvbmx5IGZvciB0aGUgQyBmYW1pbHkgb2YgbGFuZ3VhZ2VzLgorLklQICJcZkJcLWd1c2VkXGZSIiA0CisuSVggSXRlbSAiLWd1c2VkIgorRW1pdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHN5bWJvbHMgdGhhdCBhcmUgdXNlZC4gIEZvciBzdGFicworZGVidWdnaW5nIGZvcm1hdCwgdGhpcyBlbmFibGVzIFxmQlwtZmVsaW1pbmF0ZVwtdW51c2VkXC1kZWJ1Z1wtc3ltYm9sc1xmUi4KK1RoaXMgaXMgYnkgZGVmYXVsdCBccy0xT05cczAuCisuSVAgIlxmQlwtZ2Z1bGxcZlIiIDQKKy5JWCBJdGVtICItZ2Z1bGwiCitFbWl0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgYWxsIHN5bWJvbHMgYW5kIHR5cGVzLgorLklQICJcZkJcLW1tYWNvc3hcLXZlcnNpb25cLW1pbj1cZlJcZkl2ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLW1tYWNvc3gtdmVyc2lvbi1taW49dmVyc2lvbiIKK1RoZSBlYXJsaWVzdCB2ZXJzaW9uIG9mIE1hY09TIFggdGhhdCB0aGlzIGV4ZWN1dGFibGUgd2lsbCBydW4gb24KK2lzIFxmSXZlcnNpb25cZlIuICBUeXBpY2FsIHZhbHVlcyBvZiBcZkl2ZXJzaW9uXGZSIGluY2x1ZGUgXGYoQ1cxMC4xXGZSLAorXCZcZihDVzEwLjJcZlIsIGFuZCBcZihDVzEwLjMuOVxmUi4KKy5TcAorSWYgdGhlIGNvbXBpbGVyIHdhcyBidWlsdCB0byB1c2UgdGhlIHN5c3RlbSdzIGhlYWRlcnMgYnkgZGVmYXVsdCwKK3RoZW4gdGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzIHRoZSBzeXN0ZW0gdmVyc2lvbiBvbiB3aGljaCB0aGUKK2NvbXBpbGVyIGlzIHJ1bm5pbmcsIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBpcyB0byBtYWtlIGNob2ljZXMgdGhhdAorYXJlIGNvbXBhdGlibGUgd2l0aCBhcyBtYW55IHN5c3RlbXMgYW5kIGNvZGUgYmFzZXMgYXMgcG9zc2libGUuCisuSVAgIlxmQlwtbWtlcm5lbFxmUiIgNAorLklYIEl0ZW0gIi1ta2VybmVsIgorRW5hYmxlIGtlcm5lbCBkZXZlbG9wbWVudCBtb2RlLiAgVGhlIFxmQlwtbWtlcm5lbFxmUiBvcHRpb24gc2V0cworXCZcZkJcLXN0YXRpY1xmUiwgXGZCXC1mbm9cLWNvbW1vblxmUiwgXGZCXC1mbm9cLWN4YVwtYXRleGl0XGZSLAorXCZcZkJcLWZub1wtZXhjZXB0aW9uc1xmUiwgXGZCXC1mbm9cLW5vblwtY2FsbFwtZXhjZXB0aW9uc1xmUiwKK1wmXGZCXC1mYXBwbGVcLWtleHRcZlIsIFxmQlwtZm5vXC13ZWFrXGZSIGFuZCBcZkJcLWZub1wtcnR0aVxmUiB3aGVyZQorYXBwbGljYWJsZS4gIFRoaXMgbW9kZSBhbHNvIHNldHMgXGZCXC1tbm9cLWFsdGl2ZWNcZlIsCitcJlxmQlwtbXNvZnRcLWZsb2F0XGZSLCBcZkJcLWZub1wtYnVpbHRpblxmUiBhbmQKK1wmXGZCXC1tbG9uZ1wtYnJhbmNoXGZSIGZvciBQb3dlclBDIHRhcmdldHMuCisuSVAgIlxmQlwtbW9uZVwtYnl0ZVwtYm9vbFxmUiIgNAorLklYIEl0ZW0gIi1tb25lLWJ5dGUtYm9vbCIKK092ZXJyaWRlIHRoZSBkZWZhdWx0cyBmb3IgXGZCYm9vbFxmUiBzbyB0aGF0IFxmQnNpemVvZihib29sKT09MVxmUi4KK0J5IGRlZmF1bHQgXGZCc2l6ZW9mKGJvb2wpXGZSIGlzIFxmQjRcZlIgd2hlbiBjb21waWxpbmcgZm9yCitEYXJ3aW4vUG93ZXJQQyBhbmQgXGZCMVxmUiB3aGVuIGNvbXBpbGluZyBmb3IgRGFyd2luL3g4Niwgc28gdGhpcworb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24geDg2LgorLlNwCitcJlxmQldhcm5pbmc6XGZSIFRoZSBcZkJcLW1vbmVcLWJ5dGVcLWJvb2xcZlIgc3dpdGNoIGNhdXNlcyBccy0xR0NDXHMwCit0byBnZW5lcmF0ZSBjb2RlIHRoYXQgaXMgbm90IGJpbmFyeSBjb21wYXRpYmxlIHdpdGggY29kZSBnZW5lcmF0ZWQKK3dpdGhvdXQgdGhhdCBzd2l0Y2guICBVc2luZyB0aGlzIHN3aXRjaCBtYXkgcmVxdWlyZSByZWNvbXBpbGluZyBhbGwKK290aGVyIG1vZHVsZXMgaW4gYSBwcm9ncmFtLCBpbmNsdWRpbmcgc3lzdGVtIGxpYnJhcmllcy4gIFVzZSB0aGlzCitzd2l0Y2ggdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGRhdGEgbW9kZWwuCisuSVAgIlxmQlwtbWZpeFwtYW5kXC1jb250aW51ZVxmUiIgNAorLklYIEl0ZW0gIi1tZml4LWFuZC1jb250aW51ZSIKKy5QRCAwCisuSVAgIlxmQlwtZmZpeFwtYW5kXC1jb250aW51ZVxmUiIgNAorLklYIEl0ZW0gIi1mZml4LWFuZC1jb250aW51ZSIKKy5JUCAiXGZCXC1maW5kaXJlY3RcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItZmluZGlyZWN0LWRhdGEiCisuUEQKK0dlbmVyYXRlIGNvZGUgc3VpdGFibGUgZm9yIGZhc3QgdHVybmFyb3VuZCBkZXZlbG9wbWVudCwgc3VjaCBhcyB0bworYWxsb3cgXHMtMUdEQlxzMCB0byBkeW5hbWljYWxseSBsb2FkIFxmKENXXCooQ2Aub1wqKEMnXGZSIGZpbGVzIGludG8gYWxyZWFkeS1ydW5uaW5nCitwcm9ncmFtcy4gIFxmQlwtZmluZGlyZWN0XC1kYXRhXGZSIGFuZCBcZkJcLWZmaXhcLWFuZFwtY29udGludWVcZlIKK2FyZSBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisuSVAgIlxmQlwtYWxsX2xvYWRcZlIiIDQKKy5JWCBJdGVtICItYWxsX2xvYWQiCitMb2FkcyBhbGwgbWVtYmVycyBvZiBzdGF0aWMgYXJjaGl2ZSBsaWJyYXJpZXMuCitTZWUgbWFuIFxmSWxkXGZSXHwoMSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtYXJjaF9lcnJvcnNfZmF0YWxcZlIiIDQKKy5JWCBJdGVtICItYXJjaF9lcnJvcnNfZmF0YWwiCitDYXVzZSB0aGUgZXJyb3JzIGhhdmluZyB0byBkbyB3aXRoIGZpbGVzIHRoYXQgaGF2ZSB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlCit0byBiZSBmYXRhbC4KKy5JUCAiXGZCXC1iaW5kX2F0X2xvYWRcZlIiIDQKKy5JWCBJdGVtICItYmluZF9hdF9sb2FkIgorQ2F1c2VzIHRoZSBvdXRwdXQgZmlsZSB0byBiZSBtYXJrZWQgc3VjaCB0aGF0IHRoZSBkeW5hbWljIGxpbmtlciB3aWxsCitiaW5kIGFsbCB1bmRlZmluZWQgcmVmZXJlbmNlcyB3aGVuIHRoZSBmaWxlIGlzIGxvYWRlZCBvciBsYXVuY2hlZC4KKy5JUCAiXGZCXC1idW5kbGVcZlIiIDQKKy5JWCBJdGVtICItYnVuZGxlIgorUHJvZHVjZSBhIE1hY2gtbyBidW5kbGUgZm9ybWF0IGZpbGUuCitTZWUgbWFuIFxmSWxkXGZSXHwoMSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtYnVuZGxlX2xvYWRlclxmUiBcZklleGVjdXRhYmxlXGZSIiA0CisuSVggSXRlbSAiLWJ1bmRsZV9sb2FkZXIgZXhlY3V0YWJsZSIKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgXGZJZXhlY3V0YWJsZVxmUiB0aGF0IHdpbGwgbG9hZCB0aGUgYnVpbGQKK291dHB1dCBmaWxlIGJlaW5nIGxpbmtlZC4gIFNlZSBtYW4gXGZJbGRcZlJcfCgxKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5JUCAiXGZCXC1keW5hbWljbGliXGZSIiA0CisuSVggSXRlbSAiLWR5bmFtaWNsaWIiCitXaGVuIHBhc3NlZCB0aGlzIG9wdGlvbiwgXHMtMUdDQ1xzMCBwcm9kdWNlcyBhIGR5bmFtaWMgbGlicmFyeSBpbnN0ZWFkIG9mCithbiBleGVjdXRhYmxlIHdoZW4gbGlua2luZywgdXNpbmcgdGhlIERhcndpbiBcZklsaWJ0b29sXGZSIGNvbW1hbmQuCisuSVAgIlxmQlwtZm9yY2VfY3B1c3VidHlwZV9BTExcZlIiIDQKKy5JWCBJdGVtICItZm9yY2VfY3B1c3VidHlwZV9BTEwiCitUaGlzIGNhdXNlcyBccy0xR0NDXHMwJ3Mgb3V0cHV0IGZpbGUgdG8gaGF2ZSB0aGUgXGZJXHMtMUFMTFxzMFxmUiBzdWJ0eXBlLCBpbnN0ZWFkIG9mCitvbmUgY29udHJvbGxlZCBieSB0aGUgXGZCXC1tY3B1XGZSIG9yIFxmQlwtbWFyY2hcZlIgb3B0aW9uLgorLklQICJcZkJcLWFsbG93YWJsZV9jbGllbnRcZlIgIFxmSWNsaWVudF9uYW1lXGZSIiA0CisuSVggSXRlbSAiLWFsbG93YWJsZV9jbGllbnQgIGNsaWVudF9uYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1jbGllbnRfbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1jbGllbnRfbmFtZSIKKy5JUCAiXGZCXC1jb21wYXRpYmlsaXR5X3ZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItY29tcGF0aWJpbGl0eV92ZXJzaW9uIgorLklQICJcZkJcLWN1cnJlbnRfdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi1jdXJyZW50X3ZlcnNpb24iCisuSVAgIlxmQlwtZGVhZF9zdHJpcFxmUiIgNAorLklYIEl0ZW0gIi1kZWFkX3N0cmlwIgorLklQICJcZkJcLWRlcGVuZGVuY3lcLWZpbGVcZlIiIDQKKy5JWCBJdGVtICItZGVwZW5kZW5jeS1maWxlIgorLklQICJcZkJcLWR5bGliX2ZpbGVcZlIiIDQKKy5JWCBJdGVtICItZHlsaWJfZmlsZSIKKy5JUCAiXGZCXC1keWxpbmtlcl9pbnN0YWxsX25hbWVcZlIiIDQKKy5JWCBJdGVtICItZHlsaW5rZXJfaW5zdGFsbF9uYW1lIgorLklQICJcZkJcLWR5bmFtaWNcZlIiIDQKKy5JWCBJdGVtICItZHluYW1pYyIKKy5JUCAiXGZCXC1leHBvcnRlZF9zeW1ib2xzX2xpc3RcZlIiIDQKKy5JWCBJdGVtICItZXhwb3J0ZWRfc3ltYm9sc19saXN0IgorLklQICJcZkJcLWZpbGVsaXN0XGZSIiA0CisuSVggSXRlbSAiLWZpbGVsaXN0IgorLklQICJcZkJcLWZsYXRfbmFtZXNwYWNlXGZSIiA0CisuSVggSXRlbSAiLWZsYXRfbmFtZXNwYWNlIgorLklQICJcZkJcLWZvcmNlX2ZsYXRfbmFtZXNwYWNlXGZSIiA0CisuSVggSXRlbSAiLWZvcmNlX2ZsYXRfbmFtZXNwYWNlIgorLklQICJcZkJcLWhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lc1xmUiIgNAorLklYIEl0ZW0gIi1oZWFkZXJwYWRfbWF4X2luc3RhbGxfbmFtZXMiCisuSVAgIlxmQlwtaW1hZ2VfYmFzZVxmUiIgNAorLklYIEl0ZW0gIi1pbWFnZV9iYXNlIgorLklQICJcZkJcLWluaXRcZlIiIDQKKy5JWCBJdGVtICItaW5pdCIKKy5JUCAiXGZCXC1pbnN0YWxsX25hbWVcZlIiIDQKKy5JWCBJdGVtICItaW5zdGFsbF9uYW1lIgorLklQICJcZkJcLWtlZXBfcHJpdmF0ZV9leHRlcm5zXGZSIiA0CisuSVggSXRlbSAiLWtlZXBfcHJpdmF0ZV9leHRlcm5zIgorLklQICJcZkJcLW11bHRpX21vZHVsZVxmUiIgNAorLklYIEl0ZW0gIi1tdWx0aV9tb2R1bGUiCisuSVAgIlxmQlwtbXVsdGlwbHlfZGVmaW5lZFxmUiIgNAorLklYIEl0ZW0gIi1tdWx0aXBseV9kZWZpbmVkIgorLklQICJcZkJcLW11bHRpcGx5X2RlZmluZWRfdW51c2VkXGZSIiA0CisuSVggSXRlbSAiLW11bHRpcGx5X2RlZmluZWRfdW51c2VkIgorLklQICJcZkJcLW5vYWxsX2xvYWRcZlIiIDQKKy5JWCBJdGVtICItbm9hbGxfbG9hZCIKKy5JUCAiXGZCXC1ub19kZWFkX3N0cmlwX2luaXRzX2FuZF90ZXJtc1xmUiIgNAorLklYIEl0ZW0gIi1ub19kZWFkX3N0cmlwX2luaXRzX2FuZF90ZXJtcyIKKy5JUCAiXGZCXC1ub2ZpeHByZWJpbmRpbmdcZlIiIDQKKy5JWCBJdGVtICItbm9maXhwcmViaW5kaW5nIgorLklQICJcZkJcLW5vbXVsdGlkZWZzXGZSIiA0CisuSVggSXRlbSAiLW5vbXVsdGlkZWZzIgorLklQICJcZkJcLW5vcHJlYmluZFxmUiIgNAorLklYIEl0ZW0gIi1ub3ByZWJpbmQiCisuSVAgIlxmQlwtbm9zZWdsaW5rZWRpdFxmUiIgNAorLklYIEl0ZW0gIi1ub3NlZ2xpbmtlZGl0IgorLklQICJcZkJcLXBhZ2V6ZXJvX3NpemVcZlIiIDQKKy5JWCBJdGVtICItcGFnZXplcm9fc2l6ZSIKKy5JUCAiXGZCXC1wcmViaW5kXGZSIiA0CisuSVggSXRlbSAiLXByZWJpbmQiCisuSVAgIlxmQlwtcHJlYmluZF9hbGxfdHdvbGV2ZWxfbW9kdWxlc1xmUiIgNAorLklYIEl0ZW0gIi1wcmViaW5kX2FsbF90d29sZXZlbF9tb2R1bGVzIgorLklQICJcZkJcLXByaXZhdGVfYnVuZGxlXGZSIiA0CisuSVggSXRlbSAiLXByaXZhdGVfYnVuZGxlIgorLklQICJcZkJcLXJlYWRfb25seV9yZWxvY3NcZlIiIDQKKy5JWCBJdGVtICItcmVhZF9vbmx5X3JlbG9jcyIKKy5JUCAiXGZCXC1zZWN0YWxpZ25cZlIiIDQKKy5JWCBJdGVtICItc2VjdGFsaWduIgorLklQICJcZkJcLXNlY3RvYmplY3RzeW1ib2xzXGZSIiA0CisuSVggSXRlbSAiLXNlY3RvYmplY3RzeW1ib2xzIgorLklQICJcZkJcLXdoeWxvYWRcZlIiIDQKKy5JWCBJdGVtICItd2h5bG9hZCIKKy5JUCAiXGZCXC1zZWcxYWRkclxmUiIgNAorLklYIEl0ZW0gIi1zZWcxYWRkciIKKy5JUCAiXGZCXC1zZWN0Y3JlYXRlXGZSIiA0CisuSVggSXRlbSAiLXNlY3RjcmVhdGUiCisuSVAgIlxmQlwtc2VjdG9iamVjdHN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItc2VjdG9iamVjdHN5bWJvbHMiCisuSVAgIlxmQlwtc2VjdG9yZGVyXGZSIiA0CisuSVggSXRlbSAiLXNlY3RvcmRlciIKKy5JUCAiXGZCXC1zZWdhZGRyXGZSIiA0CisuSVggSXRlbSAiLXNlZ2FkZHIiCisuSVAgIlxmQlwtc2Vnc19yZWFkX29ubHlfYWRkclxmUiIgNAorLklYIEl0ZW0gIi1zZWdzX3JlYWRfb25seV9hZGRyIgorLklQICJcZkJcLXNlZ3NfcmVhZF93cml0ZV9hZGRyXGZSIiA0CisuSVggSXRlbSAiLXNlZ3NfcmVhZF93cml0ZV9hZGRyIgorLklQICJcZkJcLXNlZ19hZGRyX3RhYmxlXGZSIiA0CisuSVggSXRlbSAiLXNlZ19hZGRyX3RhYmxlIgorLklQICJcZkJcLXNlZ19hZGRyX3RhYmxlX2ZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLXNlZ19hZGRyX3RhYmxlX2ZpbGVuYW1lIgorLklQICJcZkJcLXNlZ2xpbmtlZGl0XGZSIiA0CisuSVggSXRlbSAiLXNlZ2xpbmtlZGl0IgorLklQICJcZkJcLXNlZ3Byb3RcZlIiIDQKKy5JWCBJdGVtICItc2VncHJvdCIKKy5JUCAiXGZCXC1zZWdzX3JlYWRfb25seV9hZGRyXGZSIiA0CisuSVggSXRlbSAiLXNlZ3NfcmVhZF9vbmx5X2FkZHIiCisuSVAgIlxmQlwtc2Vnc19yZWFkX3dyaXRlX2FkZHJcZlIiIDQKKy5JWCBJdGVtICItc2Vnc19yZWFkX3dyaXRlX2FkZHIiCisuSVAgIlxmQlwtc2luZ2xlX21vZHVsZVxmUiIgNAorLklYIEl0ZW0gIi1zaW5nbGVfbW9kdWxlIgorLklQICJcZkJcLXN0YXRpY1xmUiIgNAorLklYIEl0ZW0gIi1zdGF0aWMiCisuSVAgIlxmQlwtc3ViX2xpYnJhcnlcZlIiIDQKKy5JWCBJdGVtICItc3ViX2xpYnJhcnkiCisuSVAgIlxmQlwtc3ViX3VtYnJlbGxhXGZSIiA0CisuSVggSXRlbSAiLXN1Yl91bWJyZWxsYSIKKy5JUCAiXGZCXC10d29sZXZlbF9uYW1lc3BhY2VcZlIiIDQKKy5JWCBJdGVtICItdHdvbGV2ZWxfbmFtZXNwYWNlIgorLklQICJcZkJcLXVtYnJlbGxhXGZSIiA0CisuSVggSXRlbSAiLXVtYnJlbGxhIgorLklQICJcZkJcLXVuZGVmaW5lZFxmUiIgNAorLklYIEl0ZW0gIi11bmRlZmluZWQiCisuSVAgIlxmQlwtdW5leHBvcnRlZF9zeW1ib2xzX2xpc3RcZlIiIDQKKy5JWCBJdGVtICItdW5leHBvcnRlZF9zeW1ib2xzX2xpc3QiCisuSVAgIlxmQlwtd2Vha19yZWZlcmVuY2VfbWlzbWF0Y2hlc1xmUiIgNAorLklYIEl0ZW0gIi13ZWFrX3JlZmVyZW5jZV9taXNtYXRjaGVzIgorLklQICJcZkJcLXdoYXRzbG9hZGVkXGZSIiA0CisuSVggSXRlbSAiLXdoYXRzbG9hZGVkIgorLlBECitUaGVzZSBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIERhcndpbiBsaW5rZXIuICBUaGUgRGFyd2luIGxpbmtlciBtYW4gcGFnZQorZGVzY3JpYmVzIHRoZW0gaW4gZGV0YWlsLgorLlBQCitcZklccy0xREVDXHMwIEFscGhhIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJERUMgQWxwaGEgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBccy0xREVDXHMwIEFscGhhIGltcGxlbWVudGF0aW9uczoKKy5JUCAiXGZCXC1tbm9cLXNvZnRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1uby1zb2Z0LWZsb2F0IgorLlBEIDAKKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgdGhlIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBmb3IKK2Zsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuICBXaGVuIFxmQlwtbXNvZnRcLWZsb2F0XGZSIGlzIHNwZWNpZmllZCwKK2Z1bmN0aW9ucyBpbiBcZklsaWJnY2MuYVxmUiBhcmUgdXNlZCB0byBwZXJmb3JtIGZsb2F0aW5nLXBvaW50CitvcGVyYXRpb25zLiAgVW5sZXNzIHRoZXkgYXJlIHJlcGxhY2VkIGJ5IHJvdXRpbmVzIHRoYXQgZW11bGF0ZSB0aGUKK2Zsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMsIG9yIGNvbXBpbGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gY2FsbCBzdWNoCitlbXVsYXRpb25zIHJvdXRpbmVzLCB0aGVzZSByb3V0aW5lcyBpc3N1ZSBmbG9hdGluZy1wb2ludAorb3BlcmF0aW9ucy4gICBJZiB5b3UgYXJlIGNvbXBpbGluZyBmb3IgYW4gQWxwaGEgd2l0aG91dCBmbG9hdGluZy1wb2ludAorb3BlcmF0aW9ucywgeW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIGxpYnJhcnkgaXMgYnVpbHQgc28gYXMgbm90IHRvIGNhbGwKK3RoZW0uCisuU3AKK05vdGUgdGhhdCBBbHBoYSBpbXBsZW1lbnRhdGlvbnMgd2l0aG91dCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZQorcmVxdWlyZWQgdG8gaGF2ZSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuCisuSVAgIlxmQlwtbWZwXC1yZWdcZlIiIDQKKy5JWCBJdGVtICItbWZwLXJlZyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mcFwtcmVnc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnAtcmVncyIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldC4KK1wmXGZCXC1tbm9cLWZwXC1yZWdzXGZSIGltcGxpZXMgXGZCXC1tc29mdFwtZmxvYXRcZlIuICBJZiB0aGUgZmxvYXRpbmctcG9pbnQKK3JlZ2lzdGVyIHNldCBpcyBub3QgdXNlZCwgZmxvYXRpbmctcG9pbnQgb3BlcmFuZHMgYXJlIHBhc3NlZCBpbiBpbnRlZ2VyCityZWdpc3RlcnMgYXMgaWYgdGhleSB3ZXJlIGludGVnZXJzIGFuZCBmbG9hdGluZy1wb2ludCByZXN1bHRzIGFyZSBwYXNzZWQKK2luIFxmKENXJDBcZlIgaW5zdGVhZCBvZiBcZihDVyRmMFxmUi4gIFRoaXMgaXMgYSBub24tc3RhbmRhcmQgY2FsbGluZyBzZXF1ZW5jZSwKK3NvIGFueSBmdW5jdGlvbiB3aXRoIGEgZmxvYXRpbmctcG9pbnQgYXJndW1lbnQgb3IgcmV0dXJuIHZhbHVlIGNhbGxlZCBieSBjb2RlCitjb21waWxlZCB3aXRoIFxmQlwtbW5vXC1mcFwtcmVnc1xmUiBtdXN0IGFsc28gYmUgY29tcGlsZWQgd2l0aCB0aGF0CitvcHRpb24uCisuU3AKK0EgdHlwaWNhbCB1c2Ugb2YgdGhpcyBvcHRpb24gaXMgYnVpbGRpbmcgYSBrZXJuZWwgdGhhdCBkb2VzIG5vdCB1c2UsCithbmQgaGVuY2UgbmVlZCBub3Qgc2F2ZSBhbmQgcmVzdG9yZSwgYW55IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1taWVlZVxmUiIgNAorLklYIEl0ZW0gIi1taWVlZSIKK1RoZSBBbHBoYSBhcmNoaXRlY3R1cmUgaW1wbGVtZW50cyBmbG9hdGluZy1wb2ludCBoYXJkd2FyZSBvcHRpbWl6ZWQgZm9yCittYXhpbXVtIHBlcmZvcm1hbmNlLiAgSXQgaXMgbW9zdGx5IGNvbXBsaWFudCB3aXRoIHRoZSBccy0xSUVFRVxzMCBmbG9hdGluZy1wb2ludAorc3RhbmRhcmQuICBIb3dldmVyLCBmb3IgZnVsbCBjb21wbGlhbmNlLCBzb2Z0d2FyZSBhc3Npc3RhbmNlIGlzCityZXF1aXJlZC4gIFRoaXMgb3B0aW9uIGdlbmVyYXRlcyBjb2RlIGZ1bGx5IElFRUUtY29tcGxpYW50IGNvZGUKK1wmXGZJZXhjZXB0XGZSIHRoYXQgdGhlIFxmSWluZXhhY3QtZmxhZ1xmUiBpcyBub3QgbWFpbnRhaW5lZCAoc2VlIGJlbG93KS4KK0lmIHRoaXMgb3B0aW9uIGlzIHR1cm5lZCBvbiwgdGhlIHByZXByb2Nlc3NvciBtYWNybyBcZihDV1wqKENgX0lFRUVfRlBcKihDJ1xmUiBpcworZGVmaW5lZCBkdXJpbmcgY29tcGlsYXRpb24uICBUaGUgcmVzdWx0aW5nIGNvZGUgaXMgbGVzcyBlZmZpY2llbnQgYnV0IGlzCithYmxlIHRvIGNvcnJlY3RseSBzdXBwb3J0IGRlbm9ybWFsaXplZCBudW1iZXJzIGFuZCBleGNlcHRpb25hbCBccy0xSUVFRVxzMAordmFsdWVzIHN1Y2ggYXMgbm90LWEtbnVtYmVyIGFuZCBwbHVzL21pbnVzIGluZmluaXR5LiAgT3RoZXIgQWxwaGEKK2NvbXBpbGVycyBjYWxsIHRoaXMgb3B0aW9uIFxmQlwtaWVlZV93aXRoX25vX2luZXhhY3RcZlIuCisuSVAgIlxmQlwtbWllZWVcLXdpdGhcLWluZXhhY3RcZlIiIDQKKy5JWCBJdGVtICItbWllZWUtd2l0aC1pbmV4YWN0IgorVGhpcyBpcyBsaWtlIFxmQlwtbWllZWVcZlIgZXhjZXB0IHRoZSBnZW5lcmF0ZWQgY29kZSBhbHNvIG1haW50YWlucwordGhlIFxzLTFJRUVFXHMwIFxmSWluZXhhY3QtZmxhZ1xmUi4gIFR1cm5pbmcgb24gdGhpcyBvcHRpb24gY2F1c2VzIHRoZQorZ2VuZXJhdGVkIGNvZGUgdG8gaW1wbGVtZW50IGZ1bGx5LWNvbXBsaWFudCBccy0xSUVFRVxzMCBtYXRoLiAgSW4gYWRkaXRpb24gdG8KK1wmXGYoQ1dcKihDYF9JRUVFX0ZQXCooQydcZlIsIFxmKENXXCooQ2BfSUVFRV9GUF9FWEFDVFwqKEMnXGZSIGlzIGRlZmluZWQgYXMgYSBwcmVwcm9jZXNzb3IKK21hY3JvLiAgT24gc29tZSBBbHBoYSBpbXBsZW1lbnRhdGlvbnMgdGhlIHJlc3VsdGluZyBjb2RlIG1heSBleGVjdXRlCitzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuIHRoZSBjb2RlIGdlbmVyYXRlZCBieSBkZWZhdWx0LiAgU2luY2UgdGhlcmUgaXMKK3ZlcnkgbGl0dGxlIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSBcZklpbmV4YWN0LWZsYWdcZlIsIHlvdSBzaG91bGQKK25vcm1hbGx5IG5vdCBzcGVjaWZ5IHRoaXMgb3B0aW9uLiAgT3RoZXIgQWxwaGEgY29tcGlsZXJzIGNhbGwgdGhpcworb3B0aW9uIFxmQlwtaWVlZV93aXRoX2luZXhhY3RcZlIuCisuSVAgIlxmQlwtbWZwXC10cmFwXC1tb2RlPVxmUlxmSXRyYXAtbW9kZVxmUiIgNAorLklYIEl0ZW0gIi1tZnAtdHJhcC1tb2RlPXRyYXAtbW9kZSIKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHdoYXQgZmxvYXRpbmctcG9pbnQgcmVsYXRlZCB0cmFwcyBhcmUgZW5hYmxlZC4KK090aGVyIEFscGhhIGNvbXBpbGVycyBjYWxsIHRoaXMgb3B0aW9uIFxmQlwtZnB0bVxmUiBcZkl0cmFwLW1vZGVcZlIuCitUaGUgdHJhcCBtb2RlIGNhbiBiZSBzZXQgdG8gb25lIG9mIGZvdXIgdmFsdWVzOgorLlJTIDQKKy5JUCAiXGZCblxmUiIgNAorLklYIEl0ZW0gIm4iCitUaGlzIGlzIHRoZSBkZWZhdWx0IChub3JtYWwpIHNldHRpbmcuICBUaGUgb25seSB0cmFwcyB0aGF0IGFyZSBlbmFibGVkCithcmUgdGhlIG9uZXMgdGhhdCBjYW5ub3QgYmUgZGlzYWJsZWQgaW4gc29mdHdhcmUgKGUuZy4sIGRpdmlzaW9uIGJ5IHplcm8KK3RyYXApLgorLklQICJcZkJ1XGZSIiA0CisuSVggSXRlbSAidSIKK0luIGFkZGl0aW9uIHRvIHRoZSB0cmFwcyBlbmFibGVkIGJ5IFxmQm5cZlIsIHVuZGVyZmxvdyB0cmFwcyBhcmUgZW5hYmxlZAorYXMgd2VsbC4KKy5JUCAiXGZCc3VcZlIiIDQKKy5JWCBJdGVtICJzdSIKK0xpa2UgXGZCdVxmUiwgYnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIG1hcmtlZCB0byBiZSBzYWZlIGZvciBzb2Z0d2FyZQorY29tcGxldGlvbiAoc2VlIEFscGhhIGFyY2hpdGVjdHVyZSBtYW51YWwgZm9yIGRldGFpbHMpLgorLklQICJcZkJzdWlcZlIiIDQKKy5JWCBJdGVtICJzdWkiCitMaWtlIFxmQnN1XGZSLCBidXQgaW5leGFjdCB0cmFwcyBhcmUgZW5hYmxlZCBhcyB3ZWxsLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbWZwXC1yb3VuZGluZ1wtbW9kZT1cZlJcZklyb3VuZGluZy1tb2RlXGZSIiA0CisuSVggSXRlbSAiLW1mcC1yb3VuZGluZy1tb2RlPXJvdW5kaW5nLW1vZGUiCitTZWxlY3RzIHRoZSBccy0xSUVFRVxzMCByb3VuZGluZyBtb2RlLiAgT3RoZXIgQWxwaGEgY29tcGlsZXJzIGNhbGwgdGhpcyBvcHRpb24KK1wmXGZCXC1mcHJtXGZSIFxmSXJvdW5kaW5nLW1vZGVcZlIuICBUaGUgXGZJcm91bmRpbmctbW9kZVxmUiBjYW4gYmUgb25lCitvZjoKKy5SUyA0CisuSVAgIlxmQm5cZlIiIDQKKy5JWCBJdGVtICJuIgorTm9ybWFsIFxzLTFJRUVFXHMwIHJvdW5kaW5nIG1vZGUuICBGbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSByb3VuZGVkIHRvd2FyZHMKK3RoZSBuZWFyZXN0IG1hY2hpbmUgbnVtYmVyIG9yIHRvd2FyZHMgdGhlIGV2ZW4gbWFjaGluZSBudW1iZXIgaW4gY2FzZQorb2YgYSB0aWUuCisuSVAgIlxmQm1cZlIiIDQKKy5JWCBJdGVtICJtIgorUm91bmQgdG93YXJkcyBtaW51cyBpbmZpbml0eS4KKy5JUCAiXGZCY1xmUiIgNAorLklYIEl0ZW0gImMiCitDaG9wcGVkIHJvdW5kaW5nIG1vZGUuICBGbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSByb3VuZGVkIHRvd2FyZHMgemVyby4KKy5JUCAiXGZCZFxmUiIgNAorLklYIEl0ZW0gImQiCitEeW5hbWljIHJvdW5kaW5nIG1vZGUuICBBIGZpZWxkIGluIHRoZSBmbG9hdGluZy1wb2ludCBjb250cm9sIHJlZ2lzdGVyCisoXGZJZnBjclxmUiwgc2VlIEFscGhhIGFyY2hpdGVjdHVyZSByZWZlcmVuY2UgbWFudWFsKSBjb250cm9scyB0aGUKK3JvdW5kaW5nIG1vZGUgaW4gZWZmZWN0LiAgVGhlIEMgbGlicmFyeSBpbml0aWFsaXplcyB0aGlzIHJlZ2lzdGVyIGZvcgorcm91bmRpbmcgdG93YXJkcyBwbHVzIGluZmluaXR5LiAgVGh1cywgdW5sZXNzIHlvdXIgcHJvZ3JhbSBtb2RpZmllcyB0aGUKK1wmXGZJZnBjclxmUiwgXGZCZFxmUiBjb3JyZXNwb25kcyB0byByb3VuZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tdHJhcFwtcHJlY2lzaW9uPVxmUlxmSXRyYXAtcHJlY2lzaW9uXGZSIiA0CisuSVggSXRlbSAiLW10cmFwLXByZWNpc2lvbj10cmFwLXByZWNpc2lvbiIKK0luIHRoZSBBbHBoYSBhcmNoaXRlY3R1cmUsIGZsb2F0aW5nLXBvaW50IHRyYXBzIGFyZSBpbXByZWNpc2UuICBUaGlzCittZWFucyB3aXRob3V0IHNvZnR3YXJlIGFzc2lzdGFuY2UgaXQgaXMgaW1wb3NzaWJsZSB0byByZWNvdmVyIGZyb20gYQorZmxvYXRpbmcgdHJhcCBhbmQgcHJvZ3JhbSBleGVjdXRpb24gbm9ybWFsbHkgbmVlZHMgdG8gYmUgdGVybWluYXRlZC4KK1wmXHMtMUdDQ1xzMCBjYW4gZ2VuZXJhdGUgY29kZSB0aGF0IGNhbiBhc3Npc3Qgb3BlcmF0aW5nIHN5c3RlbSB0cmFwIGhhbmRsZXJzCitpbiBkZXRlcm1pbmluZyB0aGUgZXhhY3QgbG9jYXRpb24gdGhhdCBjYXVzZWQgYSBmbG9hdGluZy1wb2ludCB0cmFwLgorRGVwZW5kaW5nIG9uIHRoZSByZXF1aXJlbWVudHMgb2YgYW4gYXBwbGljYXRpb24sIGRpZmZlcmVudCBsZXZlbHMgb2YKK3ByZWNpc2lvbnMgY2FuIGJlIHNlbGVjdGVkOgorLlJTIDQKKy5JUCAiXGZCcFxmUiIgNAorLklYIEl0ZW0gInAiCitQcm9ncmFtIHByZWNpc2lvbi4gIFRoaXMgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IGFuZCBtZWFucyBhIHRyYXAgaGFuZGxlcgorY2FuIG9ubHkgaWRlbnRpZnkgd2hpY2ggcHJvZ3JhbSBjYXVzZWQgYSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24uCisuSVAgIlxmQmZcZlIiIDQKKy5JWCBJdGVtICJmIgorRnVuY3Rpb24gcHJlY2lzaW9uLiAgVGhlIHRyYXAgaGFuZGxlciBjYW4gZGV0ZXJtaW5lIHRoZSBmdW5jdGlvbiB0aGF0CitjYXVzZWQgYSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24uCisuSVAgIlxmQmlcZlIiIDQKKy5JWCBJdGVtICJpIgorSW5zdHJ1Y3Rpb24gcHJlY2lzaW9uLiAgVGhlIHRyYXAgaGFuZGxlciBjYW4gZGV0ZXJtaW5lIHRoZSBleGFjdAoraW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZWQgYSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24uCisuUkUKKy5SUyA0CisuU3AKK090aGVyIEFscGhhIGNvbXBpbGVycyBwcm92aWRlIHRoZSBlcXVpdmFsZW50IG9wdGlvbnMgY2FsbGVkCitcJlxmQlwtc2NvcGVfc2FmZVxmUiBhbmQgXGZCXC1yZXN1bXB0aW9uX3NhZmVcZlIuCisuUkUKKy5JUCAiXGZCXC1taWVlZVwtY29uZm9ybWFudFxmUiIgNAorLklYIEl0ZW0gIi1taWVlZS1jb25mb3JtYW50IgorVGhpcyBvcHRpb24gbWFya3MgdGhlIGdlbmVyYXRlZCBjb2RlIGFzIFxzLTFJRUVFXHMwIGNvbmZvcm1hbnQuICBZb3UgbXVzdCBub3QKK3VzZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBcZkJcLW10cmFwXC1wcmVjaXNpb249aVxmUiBhbmQgZWl0aGVyCitcJlxmQlwtbWZwXC10cmFwXC1tb2RlPXN1XGZSIG9yIFxmQlwtbWZwXC10cmFwXC1tb2RlPXN1aVxmUi4gIEl0cyBvbmx5IGVmZmVjdAoraXMgdG8gZW1pdCB0aGUgbGluZSBcZkIuZWZsYWcgNDhcZlIgaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIG9mIHRoZQorZ2VuZXJhdGVkIGFzc2VtYmx5IGZpbGUuCisuSVAgIlxmQlwtbWJ1aWxkXC1jb25zdGFudHNcZlIiIDQKKy5JWCBJdGVtICItbWJ1aWxkLWNvbnN0YW50cyIKK05vcm1hbGx5IFxzLTFHQ0NcczAgZXhhbWluZXMgYSAzMlwtIG9yIDY0XC1iaXQgaW50ZWdlciBjb25zdGFudCB0bworc2VlIGlmIGl0IGNhbiBjb25zdHJ1Y3QgaXQgZnJvbSBzbWFsbGVyIGNvbnN0YW50cyBpbiB0d28gb3IgdGhyZWUKK2luc3RydWN0aW9ucy4gIElmIGl0IGNhbm5vdCwgaXQgb3V0cHV0cyB0aGUgY29uc3RhbnQgYXMgYSBsaXRlcmFsIGFuZAorZ2VuZXJhdGVzIGNvZGUgdG8gbG9hZCBpdCBmcm9tIHRoZSBkYXRhIHNlZ21lbnQgYXQgcnVuIHRpbWUuCisuU3AKK1VzZSB0aGlzIG9wdGlvbiB0byByZXF1aXJlIFxzLTFHQ0NcczAgdG8gY29uc3RydWN0IFxmSWFsbFxmUiBpbnRlZ2VyIGNvbnN0YW50cwordXNpbmcgY29kZSwgZXZlbiBpZiBpdCB0YWtlcyBtb3JlIGluc3RydWN0aW9ucyAodGhlIG1heGltdW0gaXMgc2l4KS4KKy5TcAorWW91IHR5cGljYWxseSB1c2UgdGhpcyBvcHRpb24gdG8gYnVpbGQgYSBzaGFyZWQgbGlicmFyeSBkeW5hbWljCitsb2FkZXIuICBJdHNlbGYgYSBzaGFyZWQgbGlicmFyeSwgaXQgbXVzdCByZWxvY2F0ZSBpdHNlbGYgaW4gbWVtb3J5CitiZWZvcmUgaXQgY2FuIGZpbmQgdGhlIHZhcmlhYmxlcyBhbmQgY29uc3RhbnRzIGluIGl0cyBvd24gZGF0YSBzZWdtZW50LgorLklQICJcZkJcLW1id3hcZlIiIDQKKy5JWCBJdGVtICItbWJ3eCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1id3hcZlIiIDQKKy5JWCBJdGVtICItbW5vLWJ3eCIKKy5JUCAiXGZCXC1tY2l4XGZSIiA0CisuSVggSXRlbSAiLW1jaXgiCisuSVAgIlxmQlwtbW5vXC1jaXhcZlIiIDQKKy5JWCBJdGVtICItbW5vLWNpeCIKKy5JUCAiXGZCXC1tZml4XGZSIiA0CisuSVggSXRlbSAiLW1maXgiCisuSVAgIlxmQlwtbW5vXC1maXhcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZpeCIKKy5JUCAiXGZCXC1tbWF4XGZSIiA0CisuSVggSXRlbSAiLW1tYXgiCisuSVAgIlxmQlwtbW5vXC1tYXhcZlIiIDQKKy5JWCBJdGVtICItbW5vLW1heCIKKy5QRAorSW5kaWNhdGUgd2hldGhlciBccy0xR0NDXHMwIHNob3VsZCBnZW5lcmF0ZSBjb2RlIHRvIHVzZSB0aGUgb3B0aW9uYWwgXHMtMUJXWFxzMCwKK1wmXHMtMUNJWFxzMCwgXHMtMUZJWFxzMCBhbmQgXHMtMU1BWFxzMCBpbnN0cnVjdGlvbiBzZXRzLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBpbnN0cnVjdGlvbgorc2V0cyBzdXBwb3J0ZWQgYnkgdGhlIFxzLTFDUFVcczAgdHlwZSBzcGVjaWZpZWQgdmlhIFxmQlwtbWNwdT1cZlIgb3B0aW9uIG9yIHRoYXQKK29mIHRoZSBccy0xQ1BVXHMwIG9uIHdoaWNoIFxzLTFHQ0NcczAgd2FzIGJ1aWx0IGlmIG5vbmUgaXMgc3BlY2lmaWVkLgorLklQICJcZkJcLW1mbG9hdFwtdmF4XGZSIiA0CisuSVggSXRlbSAiLW1mbG9hdC12YXgiCisuUEQgMAorLklQICJcZkJcLW1mbG9hdFwtaWVlZVxmUiIgNAorLklYIEl0ZW0gIi1tZmxvYXQtaWVlZSIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgXHMtMVZBWFxzMCBGIGFuZCBHIGZsb2F0aW5nLXBvaW50Cithcml0aG1ldGljIGluc3RlYWQgb2YgXHMtMUlFRUVcczAgc2luZ2xlIGFuZCBkb3VibGUgcHJlY2lzaW9uLgorLklQICJcZkJcLW1leHBsaWNpdFwtcmVsb2NzXGZSIiA0CisuSVggSXRlbSAiLW1leHBsaWNpdC1yZWxvY3MiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZXhwbGljaXRcLXJlbG9jc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZXhwbGljaXQtcmVsb2NzIgorLlBECitPbGRlciBBbHBoYSBhc3NlbWJsZXJzIHByb3ZpZGVkIG5vIHdheSB0byBnZW5lcmF0ZSBzeW1ib2wgcmVsb2NhdGlvbnMKK2V4Y2VwdCB2aWEgYXNzZW1ibGVyIG1hY3Jvcy4gIFVzZSBvZiB0aGVzZSBtYWNyb3MgZG9lcyBub3QgYWxsb3cKK29wdGltYWwgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZy4gIFxzLTFHTlVcczAgYmludXRpbHMgYXMgb2YgdmVyc2lvbiAyLjEyCitzdXBwb3J0cyBhIG5ldyBzeW50YXggdGhhdCBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIGV4cGxpY2l0bHkgbWFyaword2hpY2ggcmVsb2NhdGlvbnMgc2hvdWxkIGFwcGx5IHRvIHdoaWNoIGluc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uCitpcyBtb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsIGFzIFxzLTFHQ0NcczAgZGV0ZWN0cyB0aGUgY2FwYWJpbGl0aWVzIG9mCit0aGUgYXNzZW1ibGVyIHdoZW4gaXQgaXMgYnVpbHQgYW5kIHNldHMgdGhlIGRlZmF1bHQgYWNjb3JkaW5nbHkuCisuSVAgIlxmQlwtbXNtYWxsXC1kYXRhXGZSIiA0CisuSVggSXRlbSAiLW1zbWFsbC1kYXRhIgorLlBEIDAKKy5JUCAiXGZCXC1tbGFyZ2VcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbWxhcmdlLWRhdGEiCisuUEQKK1doZW4gXGZCXC1tZXhwbGljaXRcLXJlbG9jc1xmUiBpcyBpbiBlZmZlY3QsIHN0YXRpYyBkYXRhIGlzCithY2Nlc3NlZCB2aWEgXGZJZ3AtcmVsYXRpdmVcZlIgcmVsb2NhdGlvbnMuICBXaGVuIFxmQlwtbXNtYWxsXC1kYXRhXGZSCitpcyB1c2VkLCBvYmplY3RzIDggYnl0ZXMgbG9uZyBvciBzbWFsbGVyIGFyZSBwbGFjZWQgaW4gYSBcZklzbWFsbCBkYXRhIGFyZWFcZlIKKyh0aGUgXGYoQ1dcKihDYC5zZGF0YVwqKEMnXGZSIGFuZCBcZihDV1wqKENgLnNic3NcKihDJ1xmUiBzZWN0aW9ucykgYW5kIGFyZSBhY2Nlc3NlZCB2aWEKKzE2XC1iaXQgcmVsb2NhdGlvbnMgb2ZmIG9mIHRoZSBcZihDVyRncFxmUiByZWdpc3Rlci4gIFRoaXMgbGltaXRzIHRoZQorc2l6ZSBvZiB0aGUgc21hbGwgZGF0YSBhcmVhIHRvIDY0S0IsIGJ1dCBhbGxvd3MgdGhlIHZhcmlhYmxlcyB0byBiZQorZGlyZWN0bHkgYWNjZXNzZWQgdmlhIGEgc2luZ2xlIGluc3RydWN0aW9uLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLW1sYXJnZVwtZGF0YVxmUi4gIFdpdGggdGhpcyBvcHRpb24gdGhlIGRhdGEgYXJlYQoraXMgbGltaXRlZCB0byBqdXN0IGJlbG93IDJHQi4gIFByb2dyYW1zIHRoYXQgcmVxdWlyZSBtb3JlIHRoYW4gMkdCIG9mCitkYXRhIG11c3QgdXNlIFxmKENXXCooQ2BtYWxsb2NcKihDJ1xmUiBvciBcZihDV1wqKENgbW1hcFwqKEMnXGZSIHRvIGFsbG9jYXRlIHRoZSBkYXRhIGluIHRoZQoraGVhcCBpbnN0ZWFkIG9mIGluIHRoZSBwcm9ncmFtJ3MgZGF0YSBzZWdtZW50LgorLlNwCitXaGVuIGdlbmVyYXRpbmcgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgXGZCXC1mcGljXGZSIGltcGxpZXMKK1wmXGZCXC1tc21hbGxcLWRhdGFcZlIgYW5kIFxmQlwtZlBJQ1xmUiBpbXBsaWVzIFxmQlwtbWxhcmdlXC1kYXRhXGZSLgorLklQICJcZkJcLW1zbWFsbFwtdGV4dFxmUiIgNAorLklYIEl0ZW0gIi1tc21hbGwtdGV4dCIKKy5QRCAwCisuSVAgIlxmQlwtbWxhcmdlXC10ZXh0XGZSIiA0CisuSVggSXRlbSAiLW1sYXJnZS10ZXh0IgorLlBECitXaGVuIFxmQlwtbXNtYWxsXC10ZXh0XGZSIGlzIHVzZWQsIHRoZSBjb21waWxlciBhc3N1bWVzIHRoYXQgdGhlCitjb2RlIG9mIHRoZSBlbnRpcmUgcHJvZ3JhbSAob3Igc2hhcmVkIGxpYnJhcnkpIGZpdHMgaW4gNE1CLCBhbmQgaXMKK3RodXMgcmVhY2hhYmxlIHdpdGggYSBicmFuY2ggaW5zdHJ1Y3Rpb24uICBXaGVuIFxmQlwtbXNtYWxsXC1kYXRhXGZSCitpcyB1c2VkLCB0aGUgY29tcGlsZXIgY2FuIGFzc3VtZSB0aGF0IGFsbCBsb2NhbCBzeW1ib2xzIHNoYXJlIHRoZQorc2FtZSBcZihDVyRncFxmUiB2YWx1ZSwgYW5kIHRodXMgcmVkdWNlIHRoZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zCityZXF1aXJlZCBmb3IgYSBmdW5jdGlvbiBjYWxsIGZyb20gNCB0byAxLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLW1sYXJnZVwtdGV4dFxmUi4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSWNwdV90eXBlXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9Y3B1X3R5cGUiCitTZXQgdGhlIGluc3RydWN0aW9uIHNldCBhbmQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvcgorbWFjaGluZSB0eXBlIFxmSWNwdV90eXBlXGZSLiAgWW91IGNhbiBzcGVjaWZ5IGVpdGhlciB0aGUgXGZCXHMtMUVWXHMwXGZSCitzdHlsZSBuYW1lIG9yIHRoZSBjb3JyZXNwb25kaW5nIGNoaXAgbnVtYmVyLiAgXHMtMUdDQ1xzMCBzdXBwb3J0cyBzY2hlZHVsaW5nCitwYXJhbWV0ZXJzIGZvciB0aGUgXHMtMUVWNFxzMCwgXHMtMUVWNVxzMCBhbmQgXHMtMUVWNlxzMCBmYW1pbHkgb2YgcHJvY2Vzc29ycyBhbmQKK2Nob29zZXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc2V0IGZyb20gdGhlIHByb2Nlc3NvcgoreW91IHNwZWNpZnkuICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBwcm9jZXNzb3IgdHlwZSwgXHMtMUdDQ1xzMCBkZWZhdWx0cwordG8gdGhlIHByb2Nlc3NvciBvbiB3aGljaCB0aGUgY29tcGlsZXIgd2FzIGJ1aWx0LgorLlNwCitTdXBwb3J0ZWQgdmFsdWVzIGZvciBcZkljcHVfdHlwZVxmUiBhcmUKKy5SUyA0CisuSVAgIlxmQmV2NFxmUiIgNAorLklYIEl0ZW0gImV2NCIKKy5QRCAwCisuSVAgIlxmQmV2NDVcZlIiIDQKKy5JWCBJdGVtICJldjQ1IgorLklQICJcZkIyMTA2NFxmUiIgNAorLklYIEl0ZW0gIjIxMDY0IgorLlBECitTY2hlZHVsZXMgYXMgYW4gXHMtMUVWNFxzMCBhbmQgaGFzIG5vIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLgorLklQICJcZkJldjVcZlIiIDQKKy5JWCBJdGVtICJldjUiCisuUEQgMAorLklQICJcZkIyMTE2NFxmUiIgNAorLklYIEl0ZW0gIjIxMTY0IgorLlBECitTY2hlZHVsZXMgYXMgYW4gXHMtMUVWNVxzMCBhbmQgaGFzIG5vIGluc3RydWN0aW9uIHNldCBleHRlbnNpb25zLgorLklQICJcZkJldjU2XGZSIiA0CisuSVggSXRlbSAiZXY1NiIKKy5QRCAwCisuSVAgIlxmQjIxMTY0YVxmUiIgNAorLklYIEl0ZW0gIjIxMTY0YSIKKy5QRAorU2NoZWR1bGVzIGFzIGFuIFxzLTFFVjVcczAgYW5kIHN1cHBvcnRzIHRoZSBccy0xQldYXHMwIGV4dGVuc2lvbi4KKy5JUCAiXGZCcGNhNTZcZlIiIDQKKy5JWCBJdGVtICJwY2E1NiIKKy5QRCAwCisuSVAgIlxmQjIxMTY0cGNcZlIiIDQKKy5JWCBJdGVtICIyMTE2NHBjIgorLklQICJcZkIyMTE2NFBDXGZSIiA0CisuSVggSXRlbSAiMjExNjRQQyIKKy5QRAorU2NoZWR1bGVzIGFzIGFuIFxzLTFFVjVcczAgYW5kIHN1cHBvcnRzIHRoZSBccy0xQldYXHMwIGFuZCBccy0xTUFYXHMwIGV4dGVuc2lvbnMuCisuSVAgIlxmQmV2NlxmUiIgNAorLklYIEl0ZW0gImV2NiIKKy5QRCAwCisuSVAgIlxmQjIxMjY0XGZSIiA0CisuSVggSXRlbSAiMjEyNjQiCisuUEQKK1NjaGVkdWxlcyBhcyBhbiBccy0xRVY2XHMwIGFuZCBzdXBwb3J0cyB0aGUgXHMtMUJXWFxzMCwgXHMtMUZJWFxzMCwgYW5kIFxzLTFNQVhcczAgZXh0ZW5zaW9ucy4KKy5JUCAiXGZCZXY2N1xmUiIgNAorLklYIEl0ZW0gImV2NjciCisuUEQgMAorLklQICJcZkIyMTI2NGFcZlIiIDQKKy5JWCBJdGVtICIyMTI2NGEiCisuUEQKK1NjaGVkdWxlcyBhcyBhbiBccy0xRVY2XHMwIGFuZCBzdXBwb3J0cyB0aGUgXHMtMUJXWFxzMCwgXHMtMUNJWFxzMCwgXHMtMUZJWFxzMCwgYW5kIFxzLTFNQVhcczAgZXh0ZW5zaW9ucy4KKy5SRQorLlJTIDQKKy5TcAorTmF0aXZlIHRvb2xjaGFpbnMgYWxzbyBzdXBwb3J0IHRoZSB2YWx1ZSBcZkJuYXRpdmVcZlIsCit3aGljaCBzZWxlY3RzIHRoZSBiZXN0IGFyY2hpdGVjdHVyZSBvcHRpb24gZm9yIHRoZSBob3N0IHByb2Nlc3Nvci4KK1wmXGZCXC1tY3B1PW5hdGl2ZVxmUiBoYXMgbm8gZWZmZWN0IGlmIFxzLTFHQ0NcczAgZG9lcyBub3QgcmVjb2duaXplCit0aGUgcHJvY2Vzc29yLgorLlJFCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJY3B1X3R5cGVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9Y3B1X3R5cGUiCitTZXQgb25seSB0aGUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvciBtYWNoaW5lIHR5cGUKK1wmXGZJY3B1X3R5cGVcZlIuICBUaGUgaW5zdHJ1Y3Rpb24gc2V0IGlzIG5vdCBjaGFuZ2VkLgorLlNwCitOYXRpdmUgdG9vbGNoYWlucyBhbHNvIHN1cHBvcnQgdGhlIHZhbHVlIFxmQm5hdGl2ZVxmUiwKK3doaWNoIHNlbGVjdHMgdGhlIGJlc3QgYXJjaGl0ZWN0dXJlIG9wdGlvbiBmb3IgdGhlIGhvc3QgcHJvY2Vzc29yLgorXCZcZkJcLW10dW5lPW5hdGl2ZVxmUiBoYXMgbm8gZWZmZWN0IGlmIFxzLTFHQ0NcczAgZG9lcyBub3QgcmVjb2duaXplCit0aGUgcHJvY2Vzc29yLgorLklQICJcZkJcLW1tZW1vcnlcLWxhdGVuY3k9XGZSXGZJdGltZVxmUiIgNAorLklYIEl0ZW0gIi1tbWVtb3J5LWxhdGVuY3k9dGltZSIKK1NldHMgdGhlIGxhdGVuY3kgdGhlIHNjaGVkdWxlciBzaG91bGQgYXNzdW1lIGZvciB0eXBpY2FsIG1lbW9yeQorcmVmZXJlbmNlcyBhcyBzZWVuIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIFRoaXMgbnVtYmVyIGlzIGhpZ2hseQorZGVwZW5kZW50IG9uIHRoZSBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uCithbmQgdGhlIHNpemUgb2YgdGhlIGV4dGVybmFsIGNhY2hlIG9uIHRoZSBtYWNoaW5lLgorLlNwCitWYWxpZCBvcHRpb25zIGZvciBcZkl0aW1lXGZSIGFyZQorLlJTIDQKKy5JUCAiXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAibnVtYmVyIgorQSBkZWNpbWFsIG51bWJlciByZXByZXNlbnRpbmcgY2xvY2sgY3ljbGVzLgorLklQICJcZkJMMVxmUiIgNAorLklYIEl0ZW0gIkwxIgorLlBEIDAKKy5JUCAiXGZCTDJcZlIiIDQKKy5JWCBJdGVtICJMMiIKKy5JUCAiXGZCTDNcZlIiIDQKKy5JWCBJdGVtICJMMyIKKy5JUCAiXGZCbWFpblxmUiIgNAorLklYIEl0ZW0gIm1haW4iCisuUEQKK1RoZSBjb21waWxlciBjb250YWlucyBlc3RpbWF0ZXMgb2YgdGhlIG51bWJlciBvZiBjbG9jayBjeWNsZXMgZm9yCitcJlwqKEwidHlwaWNhbFwqKFIiIFxzLTFFVjRcczAgJiBccy0xRVY1XHMwIGhhcmR3YXJlIGZvciB0aGUgTGV2ZWwgMSwgMiAmIDMgY2FjaGVzCisoYWxzbyBjYWxsZWQgRGNhY2hlLCBTY2FjaGUsIGFuZCBCY2FjaGUpLCBhcyB3ZWxsIGFzIHRvIG1haW4gbWVtb3J5LgorTm90ZSB0aGF0IEwzIGlzIG9ubHkgdmFsaWQgZm9yIFxzLTFFVjVcczAuCisuUkUKKy5SUyA0CisuUkUKKy5QUAorXGZJXHMtMUZSMzBcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkZSMzAgT3B0aW9ucyIKKy5QUAorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBccy0xRlIzMFxzMCBwb3J0LgorLklQICJcZkJcLW1zbWFsbFwtbW9kZWxcZlIiIDQKKy5JWCBJdGVtICItbXNtYWxsLW1vZGVsIgorVXNlIHRoZSBzbWFsbCBhZGRyZXNzIHNwYWNlIG1vZGVsLiAgVGhpcyBjYW4gcHJvZHVjZSBzbWFsbGVyIGNvZGUsIGJ1dAoraXQgZG9lcyBhc3N1bWUgdGhhdCBhbGwgc3ltYm9saWMgdmFsdWVzIGFuZCBhZGRyZXNzZXMgZml0IGludG8gYQorMjBcLWJpdCByYW5nZS4KKy5JUCAiXGZCXC1tbm9cLWxzaW1cZlIiIDQKKy5JWCBJdGVtICItbW5vLWxzaW0iCitBc3N1bWUgdGhhdCBydW50aW1lIHN1cHBvcnQgaGFzIGJlZW4gcHJvdmlkZWQgYW5kIHNvIHRoZXJlIGlzIG5vIG5lZWQKK3RvIGluY2x1ZGUgdGhlIHNpbXVsYXRvciBsaWJyYXJ5IChcZklsaWJzaW0uYVxmUikgb24gdGhlIGxpbmtlcgorY29tbWFuZCBsaW5lLgorLlBQCitcZklccy0xRlJWXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJGUlYgT3B0aW9ucyIKKy5JUCAiXGZCXC1tZ3ByXC0zMlxmUiIgNAorLklYIEl0ZW0gIi1tZ3ByLTMyIgorT25seSB1c2UgdGhlIGZpcnN0IDMyIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuCisuSVAgIlxmQlwtbWdwclwtNjRcZlIiIDQKKy5JWCBJdGVtICItbWdwci02NCIKK1VzZSBhbGwgNjQgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tZnByXC0zMlxmUiIgNAorLklYIEl0ZW0gIi1tZnByLTMyIgorVXNlIG9ubHkgdGhlIGZpcnN0IDMyIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tZnByXC02NFxmUiIgNAorLklYIEl0ZW0gIi1tZnByLTY0IgorVXNlIGFsbCA2NCBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuCisuSVAgIlxmQlwtbWhhcmRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWZsb2F0IgorVXNlIGhhcmR3YXJlIGluc3RydWN0aW9ucyBmb3IgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCitVc2UgbGlicmFyeSByb3V0aW5lcyBmb3IgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KKy5JUCAiXGZCXC1tYWxsb2NcLWNjXGZSIiA0CisuSVggSXRlbSAiLW1hbGxvYy1jYyIKK0R5bmFtaWNhbGx5IGFsbG9jYXRlIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tZml4ZWRcLWNjXGZSIiA0CisuSVggSXRlbSAiLW1maXhlZC1jYyIKK0RvIG5vdCB0cnkgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzLCBvbmx5Cit1c2UgXGYoQ1dcKihDYGljYzBcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGZjYzBcKihDJ1xmUi4KKy5JUCAiXGZCXC1tZHdvcmRcZlIiIDQKKy5JWCBJdGVtICItbWR3b3JkIgorQ2hhbmdlIFxzLTFBQklcczAgdG8gdXNlIGRvdWJsZSB3b3JkIGluc25zLgorLklQICJcZkJcLW1ub1wtZHdvcmRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWR3b3JkIgorRG8gbm90IHVzZSBkb3VibGUgd29yZCBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbWRvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tZG91YmxlIgorVXNlIGZsb2F0aW5nLXBvaW50IGRvdWJsZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW5vXC1kb3VibGVcZlIiIDQKKy5JWCBJdGVtICItbW5vLWRvdWJsZSIKK0RvIG5vdCB1c2UgZmxvYXRpbmctcG9pbnQgZG91YmxlIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tbWVkaWFcZlIiIDQKKy5JWCBJdGVtICItbW1lZGlhIgorVXNlIG1lZGlhIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tbm9cLW1lZGlhXGZSIiA0CisuSVggSXRlbSAiLW1uby1tZWRpYSIKK0RvIG5vdCB1c2UgbWVkaWEgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1tdWxhZGRcZlIiIDQKKy5JWCBJdGVtICItbW11bGFkZCIKK1VzZSBtdWx0aXBseSBhbmQgYWRkL3N1YnRyYWN0IGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tbm9cLW11bGFkZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbXVsYWRkIgorRG8gbm90IHVzZSBtdWx0aXBseSBhbmQgYWRkL3N1YnRyYWN0IGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tZmRwaWNcZlIiIDQKKy5JWCBJdGVtICItbWZkcGljIgorU2VsZWN0IHRoZSBccy0xRkRQSUNcczAgXHMtMUFCSVxzMCwgd2hpY2ggdXNlcyBmdW5jdGlvbiBkZXNjcmlwdG9ycyB0byByZXByZXNlbnQKK3BvaW50ZXJzIHRvIGZ1bmN0aW9ucy4gIFdpdGhvdXQgYW55IFBJQy9QSUVcLXJlbGF0ZWQgb3B0aW9ucywgaXQKK2ltcGxpZXMgXGZCXC1mUElFXGZSLiAgV2l0aCBcZkJcLWZwaWNcZlIgb3IgXGZCXC1mcGllXGZSLCBpdAorYXNzdW1lcyBccy0xR09UXHMwIGVudHJpZXMgYW5kIHNtYWxsIGRhdGEgYXJlIHdpdGhpbiBhIDEyXC1iaXQgcmFuZ2UgZnJvbSB0aGUKK1wmXHMtMUdPVFxzMCBiYXNlIGFkZHJlc3M7IHdpdGggXGZCXC1mUElDXGZSIG9yIFxmQlwtZlBJRVxmUiwgXHMtMUdPVFxzMCBvZmZzZXRzCithcmUgY29tcHV0ZWQgd2l0aCAzMiBiaXRzLgorV2l0aCBhIFxmQmJmaW4tZWxmXGZSIHRhcmdldCwgdGhpcyBvcHRpb24gaW1wbGllcyBcZkJcLW1zaW1cZlIuCisuSVAgIlxmQlwtbWlubGluZVwtcGx0XGZSIiA0CisuSVggSXRlbSAiLW1pbmxpbmUtcGx0IgorRW5hYmxlIGlubGluaW5nIG9mIFxzLTFQTFRcczAgZW50cmllcyBpbiBmdW5jdGlvbiBjYWxscyB0byBmdW5jdGlvbnMgdGhhdCBhcmUKK25vdCBrbm93biB0byBiaW5kIGxvY2FsbHkuICBJdCBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgXGZCXC1tZmRwaWNcZlIuCitJdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBvcHRpbWl6aW5nIGZvciBzcGVlZCBhbmQgY29tcGlsaW5nIGZvcgorc2hhcmVkIGxpYnJhcmllcyAoaS5lLiwgXGZCXC1mUElDXGZSIG9yIFxmQlwtZnBpY1xmUiksIG9yIHdoZW4gYW4KK29wdGltaXphdGlvbiBvcHRpb24gc3VjaCBhcyBcZkJcLU8zXGZSIG9yIGFib3ZlIGlzIHByZXNlbnQgaW4gdGhlCitjb21tYW5kIGxpbmUuCisuSVAgIlxmQlwtbVRMU1xmUiIgNAorLklYIEl0ZW0gIi1tVExTIgorQXNzdW1lIGEgbGFyZ2UgXHMtMVRMU1xzMCBzZWdtZW50IHdoZW4gZ2VuZXJhdGluZyB0aHJlYWQtbG9jYWwgY29kZS4KKy5JUCAiXGZCXC1tdGxzXGZSIiA0CisuSVggSXRlbSAiLW10bHMiCitEbyBub3QgYXNzdW1lIGEgbGFyZ2UgXHMtMVRMU1xzMCBzZWdtZW50IHdoZW4gZ2VuZXJhdGluZyB0aHJlYWQtbG9jYWwgY29kZS4KKy5JUCAiXGZCXC1tZ3ByZWxcLXJvXGZSIiA0CisuSVggSXRlbSAiLW1ncHJlbC1ybyIKK0VuYWJsZSB0aGUgdXNlIG9mIFxmKENXXCooQ2BHUFJFTFwqKEMnXGZSIHJlbG9jYXRpb25zIGluIHRoZSBccy0xRkRQSUNcczAgXHMtMUFCSVxzMCBmb3IgZGF0YQordGhhdCBpcyBrbm93biB0byBiZSBpbiByZWFkLW9ubHkgc2VjdGlvbnMuICBJdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwKK2V4Y2VwdCBmb3IgXGZCXC1mcGljXGZSIG9yIFxmQlwtZnBpZVxmUjogZXZlbiB0aG91Z2ggaXQgbWF5IGhlbHAKK21ha2UgdGhlIGdsb2JhbCBvZmZzZXQgdGFibGUgc21hbGxlciwgaXQgdHJhZGVzIDEgaW5zdHJ1Y3Rpb24gZm9yIDQuCitXaXRoIFxmQlwtZlBJQ1xmUiBvciBcZkJcLWZQSUVcZlIsIGl0IHRyYWRlcyAzIGluc3RydWN0aW9ucyBmb3IgNCwKK29uZSBvZiB3aGljaCBtYXkgYmUgc2hhcmVkIGJ5IG11bHRpcGxlIHN5bWJvbHMsIGFuZCBpdCBhdm9pZHMgdGhlIG5lZWQKK2ZvciBhIFxzLTFHT1RcczAgZW50cnkgZm9yIHRoZSByZWZlcmVuY2VkIHN5bWJvbCwgc28gaXQncyBtb3JlIGxpa2VseSB0byBiZSBhCit3aW4uICBJZiBpdCBpcyBub3QsIFxmQlwtbW5vXC1ncHJlbFwtcm9cZlIgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSBpdC4KKy5JUCAiXGZCXC1tdWx0aWxpYlwtbGlicmFyeVwtcGljXGZSIiA0CisuSVggSXRlbSAiLW11bHRpbGliLWxpYnJhcnktcGljIgorTGluayB3aXRoIHRoZSAobGlicmFyeSwgbm90IFxzLTFGRFxzMCkgcGljIGxpYnJhcmllcy4gIEl0J3MgaW1wbGllZCBieQorXCZcZkJcLW1saWJyYXJ5XC1waWNcZlIsIGFzIHdlbGwgYXMgYnkgXGZCXC1mUElDXGZSIGFuZAorXCZcZkJcLWZwaWNcZlIgd2l0aG91dCBcZkJcLW1mZHBpY1xmUi4gIFlvdSBzaG91bGQgbmV2ZXIgaGF2ZSB0byB1c2UKK2l0IGV4cGxpY2l0bHkuCisuSVAgIlxmQlwtbWxpbmtlZFwtZnBcZlIiIDQKKy5JWCBJdGVtICItbWxpbmtlZC1mcCIKK0ZvbGxvdyB0aGUgXHMtMUVBQklcczAgcmVxdWlyZW1lbnQgb2YgYWx3YXlzIGNyZWF0aW5nIGEgZnJhbWUgcG9pbnRlciB3aGVuZXZlcgorYSBzdGFjayBmcmFtZSBpcyBhbGxvY2F0ZWQuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIGNhbgorYmUgZGlzYWJsZWQgd2l0aCBcZkJcLW1ub1wtbGlua2VkXC1mcFxmUi4KKy5JUCAiXGZCXC1tbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctY2FsbHMiCitVc2UgaW5kaXJlY3QgYWRkcmVzc2luZyB0byBjYWxsIGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBjdXJyZW50Citjb21waWxhdGlvbiB1bml0LiAgVGhpcyBhbGxvd3MgdGhlIGZ1bmN0aW9ucyB0byBiZSBwbGFjZWQgYW55d2hlcmUKK3dpdGhpbiB0aGUgMzJcLWJpdCBhZGRyZXNzIHNwYWNlLgorLklQICJcZkJcLW1hbGlnblwtbGFiZWxzXGZSIiA0CisuSVggSXRlbSAiLW1hbGlnbi1sYWJlbHMiCitUcnkgdG8gYWxpZ24gbGFiZWxzIHRvIGFuIDhcLWJ5dGUgYm91bmRhcnkgYnkgaW5zZXJ0aW5nIE5PUHMgaW50byB0aGUKK3ByZXZpb3VzIHBhY2tldC4gIFRoaXMgb3B0aW9uIG9ubHkgaGFzIGFuIGVmZmVjdCB3aGVuIFxzLTFWTElXXHMwIHBhY2tpbmcKK2lzIGVuYWJsZWQuICBJdCBkb2Vzbid0IGNyZWF0ZSBuZXcgcGFja2V0czsgaXQgbWVyZWx5IGFkZHMgTk9QcyB0bworZXhpc3Rpbmcgb25lcy4KKy5JUCAiXGZCXC1tbGlicmFyeVwtcGljXGZSIiA0CisuSVggSXRlbSAiLW1saWJyYXJ5LXBpYyIKK0dlbmVyYXRlIHBvc2l0aW9uLWluZGVwZW5kZW50IFxzLTFFQUJJXHMwIGNvZGUuCisuSVAgIlxmQlwtbWFjY1wtNFxmUiIgNAorLklYIEl0ZW0gIi1tYWNjLTQiCitVc2Ugb25seSB0aGUgZmlyc3QgZm91ciBtZWRpYSBhY2N1bXVsYXRvciByZWdpc3RlcnMuCisuSVAgIlxmQlwtbWFjY1wtOFxmUiIgNAorLklYIEl0ZW0gIi1tYWNjLTgiCitVc2UgYWxsIGVpZ2h0IG1lZGlhIGFjY3VtdWxhdG9yIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tcGFja1xmUiIgNAorLklYIEl0ZW0gIi1tcGFjayIKK1BhY2sgXHMtMVZMSVdcczAgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1ub1wtcGFja1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcGFjayIKK0RvIG5vdCBwYWNrIFxzLTFWTElXXHMwIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tbm9cLWVmbGFnc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZWZsYWdzIgorRG8gbm90IG1hcmsgXHMtMUFCSVxzMCBzd2l0Y2hlcyBpbiBlX2ZsYWdzLgorLklQICJcZkJcLW1jb25kXC1tb3ZlXGZSIiA0CisuSVggSXRlbSAiLW1jb25kLW1vdmUiCitFbmFibGUgdGhlIHVzZSBvZiBjb25kaXRpb25hbC1tb3ZlIGluc3RydWN0aW9ucyAoZGVmYXVsdCkuCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tbm9cLWNvbmRcLW1vdmVcZlIiIDQKKy5JWCBJdGVtICItbW5vLWNvbmQtbW92ZSIKK0Rpc2FibGUgdGhlIHVzZSBvZiBjb25kaXRpb25hbC1tb3ZlIGluc3RydWN0aW9ucy4KKy5TcAorVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICJcZkJcLW1zY2NcZlIiIDQKKy5JWCBJdGVtICItbXNjYyIKK0VuYWJsZSB0aGUgdXNlIG9mIGNvbmRpdGlvbmFsIHNldCBpbnN0cnVjdGlvbnMgKGRlZmF1bHQpLgorLlNwCitUaGlzIHN3aXRjaCBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQKK2luIGEgZnV0dXJlIHZlcnNpb24uCisuSVAgIlxmQlwtbW5vXC1zY2NcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjYyIKK0Rpc2FibGUgdGhlIHVzZSBvZiBjb25kaXRpb25hbCBzZXQgaW5zdHJ1Y3Rpb25zLgorLlNwCitUaGlzIHN3aXRjaCBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQKK2luIGEgZnV0dXJlIHZlcnNpb24uCisuSVAgIlxmQlwtbWNvbmRcLWV4ZWNcZlIiIDQKKy5JWCBJdGVtICItbWNvbmQtZXhlYyIKK0VuYWJsZSB0aGUgdXNlIG9mIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiAoZGVmYXVsdCkuCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tbm9cLWNvbmRcLWV4ZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWNvbmQtZXhlYyIKK0Rpc2FibGUgdGhlIHVzZSBvZiBjb25kaXRpb25hbCBleGVjdXRpb24uCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tdmxpd1wtYnJhbmNoXGZSIiA0CisuSVggSXRlbSAiLW12bGl3LWJyYW5jaCIKK1J1biBhIHBhc3MgdG8gcGFjayBicmFuY2hlcyBpbnRvIFxzLTFWTElXXHMwIGluc3RydWN0aW9ucyAoZGVmYXVsdCkuCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tbm9cLXZsaXdcLWJyYW5jaFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tdmxpdy1icmFuY2giCitEbyBub3QgcnVuIGEgcGFzcyB0byBwYWNrIGJyYW5jaGVzIGludG8gXHMtMVZMSVdcczAgaW5zdHJ1Y3Rpb25zLgorLlNwCitUaGlzIHN3aXRjaCBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQKK2luIGEgZnV0dXJlIHZlcnNpb24uCisuSVAgIlxmQlwtbW11bHRpXC1jb25kXC1leGVjXGZSIiA0CisuSVggSXRlbSAiLW1tdWx0aS1jb25kLWV4ZWMiCitFbmFibGUgb3B0aW1pemF0aW9uIG9mIFxmKENXXCooQ2AmJlwqKEMnXGZSIGFuZCBcZihDV1wqKENgfHxcKihDJ1xmUiBpbiBjb25kaXRpb25hbCBleGVjdXRpb24KKyhkZWZhdWx0KS4KKy5TcAorVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICJcZkJcLW1ub1wtbXVsdGlcLWNvbmRcLWV4ZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLW11bHRpLWNvbmQtZXhlYyIKK0Rpc2FibGUgb3B0aW1pemF0aW9uIG9mIFxmKENXXCooQ2AmJlwqKEMnXGZSIGFuZCBcZihDV1wqKENgfHxcKihDJ1xmUiBpbiBjb25kaXRpb25hbCBleGVjdXRpb24uCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tbmVzdGVkXC1jb25kXC1leGVjXGZSIiA0CisuSVggSXRlbSAiLW1uZXN0ZWQtY29uZC1leGVjIgorRW5hYmxlIG5lc3RlZCBjb25kaXRpb25hbCBleGVjdXRpb24gb3B0aW1pemF0aW9ucyAoZGVmYXVsdCkuCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tbm9cLW5lc3RlZFwtY29uZFwtZXhlY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tbmVzdGVkLWNvbmQtZXhlYyIKK0Rpc2FibGUgbmVzdGVkIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiBvcHRpbWl6YXRpb25zLgorLlNwCitUaGlzIHN3aXRjaCBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQKK2luIGEgZnV0dXJlIHZlcnNpb24uCisuSVAgIlxmQlwtbW9wdGltaXplXC1tZW1iYXJcZlIiIDQKKy5JWCBJdGVtICItbW9wdGltaXplLW1lbWJhciIKK1RoaXMgc3dpdGNoIHJlbW92ZXMgcmVkdW5kYW50IFxmKENXXCooQ2BtZW1iYXJcKihDJ1xmUiBpbnN0cnVjdGlvbnMgZnJvbSB0aGUKK2NvbXBpbGVyLWdlbmVyYXRlZCBjb2RlLiAgSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLW1ub1wtb3B0aW1pemVcLW1lbWJhclxmUiIgNAorLklYIEl0ZW0gIi1tbm8tb3B0aW1pemUtbWVtYmFyIgorVGhpcyBzd2l0Y2ggZGlzYWJsZXMgdGhlIGF1dG9tYXRpYyByZW1vdmFsIG9mIHJlZHVuZGFudCBcZihDV1wqKENgbWVtYmFyXCooQydcZlIKK2luc3RydWN0aW9ucyBmcm9tIHRoZSBnZW5lcmF0ZWQgY29kZS4KKy5JUCAiXGZCXC1tdG9tY2F0XC1zdGF0c1xmUiIgNAorLklYIEl0ZW0gIi1tdG9tY2F0LXN0YXRzIgorQ2F1c2UgZ2FzIHRvIHByaW50IG91dCB0b21jYXQgc3RhdGlzdGljcy4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSWNwdVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PWNwdSIKK1NlbGVjdCB0aGUgcHJvY2Vzc29yIHR5cGUgZm9yIHdoaWNoIHRvIGdlbmVyYXRlIGNvZGUuICBQb3NzaWJsZSB2YWx1ZXMgYXJlCitcJlxmQmZydlxmUiwgXGZCZnI1NTBcZlIsIFxmQnRvbWNhdFxmUiwgXGZCZnI1MDBcZlIsIFxmQmZyNDUwXGZSLAorXCZcZkJmcjQwNVxmUiwgXGZCZnI0MDBcZlIsIFxmQmZyMzAwXGZSIGFuZCBcZkJzaW1wbGVcZlIuCisuUFAKK1xmSUdOVS9MaW51eCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiR05VL0xpbnV4IE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBHTlUvTGludXggdGFyZ2V0czoKKy5JUCAiXGZCXC1tZ2xpYmNcZlIiIDQKKy5JWCBJdGVtICItbWdsaWJjIgorVXNlIHRoZSBccy0xR05VXHMwIEMgbGlicmFyeS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZXhjZXB0CitvbiBcZkIqXC0qXC1saW51eFwtKnVjbGliYypcZlIgYW5kIFxmQipcLSpcLWxpbnV4XC0qYW5kcm9pZCpcZlIgdGFyZ2V0cy4KKy5JUCAiXGZCXC1tdWNsaWJjXGZSIiA0CisuSVggSXRlbSAiLW11Y2xpYmMiCitVc2UgdUNsaWJjIEMgbGlicmFyeS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgb24KK1wmXGZCKlwtKlwtbGludXhcLSp1Y2xpYmMqXGZSIHRhcmdldHMuCisuSVAgIlxmQlwtbWJpb25pY1xmUiIgNAorLklYIEl0ZW0gIi1tYmlvbmljIgorVXNlIEJpb25pYyBDIGxpYnJhcnkuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uCitcJlxmQipcLSpcLWxpbnV4XC0qYW5kcm9pZCpcZlIgdGFyZ2V0cy4KKy5JUCAiXGZCXC1tYW5kcm9pZFxmUiIgNAorLklYIEl0ZW0gIi1tYW5kcm9pZCIKK0NvbXBpbGUgY29kZSBjb21wYXRpYmxlIHdpdGggQW5kcm9pZCBwbGF0Zm9ybS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgb24KK1wmXGZCKlwtKlwtbGludXhcLSphbmRyb2lkKlxmUiB0YXJnZXRzLgorLlNwCitXaGVuIGNvbXBpbGluZywgdGhpcyBvcHRpb24gZW5hYmxlcyBcZkJcLW1iaW9uaWNcZlIsIFxmQlwtZlBJQ1xmUiwKK1wmXGZCXC1mbm9cLWV4Y2VwdGlvbnNcZlIgYW5kIFxmQlwtZm5vXC1ydHRpXGZSIGJ5IGRlZmF1bHQuICBXaGVuIGxpbmtpbmcsCit0aGlzIG9wdGlvbiBtYWtlcyB0aGUgXHMtMUdDQ1xzMCBkcml2ZXIgcGFzcyBBbmRyb2lkLXNwZWNpZmljIG9wdGlvbnMgdG8gdGhlIGxpbmtlci4KK0ZpbmFsbHksIHRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvIFxmKENXXCooQ2BfXHxfQU5EUk9JRF9cfF9cKihDJ1xmUgordG8gYmUgZGVmaW5lZC4KKy5JUCAiXGZCXC10bm9cLWFuZHJvaWRcLWNjXGZSIiA0CisuSVggSXRlbSAiLXRuby1hbmRyb2lkLWNjIgorRGlzYWJsZSBjb21waWxhdGlvbiBlZmZlY3RzIG9mIFxmQlwtbWFuZHJvaWRcZlIsIGkuZS4sIGRvIG5vdCBlbmFibGUKK1wmXGZCXC1tYmlvbmljXGZSLCBcZkJcLWZQSUNcZlIsIFxmQlwtZm5vXC1leGNlcHRpb25zXGZSIGFuZAorXCZcZkJcLWZub1wtcnR0aVxmUiBieSBkZWZhdWx0LgorLklQICJcZkJcLXRub1wtYW5kcm9pZFwtbGRcZlIiIDQKKy5JWCBJdGVtICItdG5vLWFuZHJvaWQtbGQiCitEaXNhYmxlIGxpbmtpbmcgZWZmZWN0cyBvZiBcZkJcLW1hbmRyb2lkXGZSLCBpLmUuLCBwYXNzIHN0YW5kYXJkIExpbnV4CitsaW5raW5nIG9wdGlvbnMgdG8gdGhlIGxpbmtlci4KKy5QUAorXGZJSDgvMzAwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJIOC8zMDAgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBIOC8zMDAgaW1wbGVtZW50YXRpb25zOgorLklQICJcZkJcLW1yZWxheFxmUiIgNAorLklYIEl0ZW0gIi1tcmVsYXgiCitTaG9ydGVuIHNvbWUgYWRkcmVzcyByZWZlcmVuY2VzIGF0IGxpbmsgdGltZSwgd2hlbiBwb3NzaWJsZTsgdXNlcyB0aGUKK2xpbmtlciBvcHRpb24gXGZCXC1yZWxheFxmUi4KKy5JUCAiXGZCXC1taFxmUiIgNAorLklYIEl0ZW0gIi1taCIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBIOC8zMDBILgorLklQICJcZkJcLW1zXGZSIiA0CisuSVggSXRlbSAiLW1zIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIEg4Uy4KKy5JUCAiXGZCXC1tblxmUiIgNAorLklYIEl0ZW0gIi1tbiIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBIOFMgYW5kIEg4LzMwMEggaW4gdGhlIG5vcm1hbCBtb2RlLiAgVGhpcyBzd2l0Y2gKK211c3QgYmUgdXNlZCBlaXRoZXIgd2l0aCBcZkJcLW1oXGZSIG9yIFxmQlwtbXNcZlIuCisuSVAgIlxmQlwtbXMyNjAwXGZSIiA0CisuSVggSXRlbSAiLW1zMjYwMCIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBIOFMvMjYwMC4gIFRoaXMgc3dpdGNoIG11c3QgYmUgdXNlZCB3aXRoIFxmQlwtbXNcZlIuCisuSVAgIlxmQlwtbWV4clxmUiIgNAorLklYIEl0ZW0gIi1tZXhyIgorRXh0ZW5kZWQgcmVnaXN0ZXJzIGFyZSBzdG9yZWQgb24gc3RhY2sgYmVmb3JlIGV4ZWN1dGlvbiBvZiBmdW5jdGlvbgord2l0aCBtb25pdG9yIGF0dHJpYnV0ZS4gRGVmYXVsdCBvcHRpb24gaXMgXGZCXC1tZXhyXGZSLgorVGhpcyBvcHRpb24gaXMgdmFsaWQgb25seSBmb3IgSDhTIHRhcmdldHMuCisuSVAgIlxmQlwtbW5vXC1leHJcZlIiIDQKKy5JWCBJdGVtICItbW5vLWV4ciIKK0V4dGVuZGVkIHJlZ2lzdGVycyBhcmUgbm90IHN0b3JlZCBvbiBzdGFjayBiZWZvcmUgZXhlY3V0aW9uIG9mIGZ1bmN0aW9uIAord2l0aCBtb25pdG9yIGF0dHJpYnV0ZS4gRGVmYXVsdCBvcHRpb24gaXMgXGZCXC1tbm9cLWV4clxmUi4gCitUaGlzIG9wdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBIOFMgdGFyZ2V0cy4KKy5JUCAiXGZCXC1taW50MzJcZlIiIDQKKy5JWCBJdGVtICItbWludDMyIgorTWFrZSBcZihDV1wqKENgaW50XCooQydcZlIgZGF0YSAzMiBiaXRzIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbWFsaWduXC0zMDBcZlIiIDQKKy5JWCBJdGVtICItbWFsaWduLTMwMCIKK09uIHRoZSBIOC8zMDBIIGFuZCBIOFMsIHVzZSB0aGUgc2FtZSBhbGlnbm1lbnQgcnVsZXMgYXMgZm9yIHRoZSBIOC8zMDAuCitUaGUgZGVmYXVsdCBmb3IgdGhlIEg4LzMwMEggYW5kIEg4UyBpcyB0byBhbGlnbiBsb25ncyBhbmQgZmxvYXRzIG9uCis0XC1ieXRlIGJvdW5kYXJpZXMuCitcJlxmQlwtbWFsaWduXC0zMDBcZlIgY2F1c2VzIHRoZW0gdG8gYmUgYWxpZ25lZCBvbiAyXC1ieXRlIGJvdW5kYXJpZXMuCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBIOC8zMDAuCisuUFAKK1xmSVxzLTFIUFBBXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJIUFBBIE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgXHMtMUhQUEFcczAgZmFtaWx5IG9mIGNvbXB1dGVyczoKKy5JUCAiXGZCXC1tYXJjaD1cZlJcZklhcmNoaXRlY3R1cmUtdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tYXJjaD1hcmNoaXRlY3R1cmUtdHlwZSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgYXJjaGl0ZWN0dXJlLiAgVGhlIGNob2ljZXMgZm9yCitcJlxmSWFyY2hpdGVjdHVyZS10eXBlXGZSIGFyZSBcZkIxLjBcZlIgZm9yIFxzLTFQQVxzMCAxLjAsIFxmQjEuMVxmUiBmb3IgXHMtMVBBXHMwCisxLjEsIGFuZCBcZkIyLjBcZlIgZm9yIFxzLTFQQVxzMCAyLjAgcHJvY2Vzc29ycy4gIFJlZmVyIHRvCitcJlxmSS91c3IvbGliL3NjaGVkLm1vZGVsc1xmUiBvbiBhbiBIUC1VWCBzeXN0ZW0gdG8gZGV0ZXJtaW5lIHRoZSBwcm9wZXIKK2FyY2hpdGVjdHVyZSBvcHRpb24gZm9yIHlvdXIgbWFjaGluZS4gIENvZGUgY29tcGlsZWQgZm9yIGxvd2VyIG51bWJlcmVkCithcmNoaXRlY3R1cmVzIHJ1bnMgb24gaGlnaGVyIG51bWJlcmVkIGFyY2hpdGVjdHVyZXMsIGJ1dCBub3QgdGhlCitvdGhlciB3YXkgYXJvdW5kLgorLklQICJcZkJcLW1wYVwtcmlzY1wtMVwtMFxmUiIgNAorLklYIEl0ZW0gIi1tcGEtcmlzYy0xLTAiCisuUEQgMAorLklQICJcZkJcLW1wYVwtcmlzY1wtMVwtMVxmUiIgNAorLklYIEl0ZW0gIi1tcGEtcmlzYy0xLTEiCisuSVAgIlxmQlwtbXBhXC1yaXNjXC0yXC0wXGZSIiA0CisuSVggSXRlbSAiLW1wYS1yaXNjLTItMCIKKy5QRAorU3lub255bXMgZm9yIFxmQlwtbWFyY2g9MS4wXGZSLCBcZkJcLW1hcmNoPTEuMVxmUiwgYW5kIFxmQlwtbWFyY2g9Mi4wXGZSIHJlc3BlY3RpdmVseS4KKy5JUCAiXGZCXC1tYmlnXC1zd2l0Y2hcZlIiIDQKKy5JWCBJdGVtICItbWJpZy1zd2l0Y2giCitHZW5lcmF0ZSBjb2RlIHN1aXRhYmxlIGZvciBiaWcgc3dpdGNoIHRhYmxlcy4gIFVzZSB0aGlzIG9wdGlvbiBvbmx5IGlmCit0aGUgYXNzZW1ibGVyL2xpbmtlciBjb21wbGFpbiBhYm91dCBvdXQtb2YtcmFuZ2UgYnJhbmNoZXMgd2l0aGluIGEgc3dpdGNoCit0YWJsZS4KKy5JUCAiXGZCXC1tanVtcFwtaW5cLWRlbGF5XGZSIiA0CisuSVggSXRlbSAiLW1qdW1wLWluLWRlbGF5IgorRmlsbCBkZWxheSBzbG90cyBvZiBmdW5jdGlvbiBjYWxscyB3aXRoIHVuY29uZGl0aW9uYWwganVtcCBpbnN0cnVjdGlvbnMKK2J5IG1vZGlmeWluZyB0aGUgcmV0dXJuIHBvaW50ZXIgZm9yIHRoZSBmdW5jdGlvbiBjYWxsIHRvIGJlIHRoZSB0YXJnZXQKK29mIHRoZSBjb25kaXRpb25hbCBqdW1wLgorLklQICJcZkJcLW1kaXNhYmxlXC1mcHJlZ3NcZlIiIDQKKy5JWCBJdGVtICItbWRpc2FibGUtZnByZWdzIgorUHJldmVudCBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgZnJvbSBiZWluZyB1c2VkIGluIGFueSBtYW5uZXIuICBUaGlzIGlzCituZWNlc3NhcnkgZm9yIGNvbXBpbGluZyBrZXJuZWxzIHRoYXQgcGVyZm9ybSBsYXp5IGNvbnRleHQgc3dpdGNoaW5nIG9mCitmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuICBJZiB5b3UgdXNlIHRoaXMgb3B0aW9uIGFuZCBhdHRlbXB0IHRvIHBlcmZvcm0KK2Zsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMsIHRoZSBjb21waWxlciBhYm9ydHMuCisuSVAgIlxmQlwtbWRpc2FibGVcLWluZGV4aW5nXGZSIiA0CisuSVggSXRlbSAiLW1kaXNhYmxlLWluZGV4aW5nIgorUHJldmVudCB0aGUgY29tcGlsZXIgZnJvbSB1c2luZyBpbmRleGluZyBhZGRyZXNzIG1vZGVzLiAgVGhpcyBhdm9pZHMgc29tZQorcmF0aGVyIG9ic2N1cmUgcHJvYmxlbXMgd2hlbiBjb21waWxpbmcgXHMtMU1JR1xzMCBnZW5lcmF0ZWQgY29kZSB1bmRlciBccy0xTUFDSFxzMC4KKy5JUCAiXGZCXC1tbm9cLXNwYWNlXC1yZWdzXGZSIiA0CisuSVggSXRlbSAiLW1uby1zcGFjZS1yZWdzIgorR2VuZXJhdGUgY29kZSB0aGF0IGFzc3VtZXMgdGhlIHRhcmdldCBoYXMgbm8gc3BhY2UgcmVnaXN0ZXJzLiAgVGhpcyBhbGxvd3MKK1wmXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSBmYXN0ZXIgaW5kaXJlY3QgY2FsbHMgYW5kIHVzZSB1bnNjYWxlZCBpbmRleCBhZGRyZXNzIG1vZGVzLgorLlNwCitTdWNoIGNvZGUgaXMgc3VpdGFibGUgZm9yIGxldmVsIDAgXHMtMVBBXHMwIHN5c3RlbXMgYW5kIGtlcm5lbHMuCisuSVAgIlxmQlwtbWZhc3RcLWluZGlyZWN0XC1jYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tZmFzdC1pbmRpcmVjdC1jYWxscyIKK0dlbmVyYXRlIGNvZGUgdGhhdCBhc3N1bWVzIGNhbGxzIG5ldmVyIGNyb3NzIHNwYWNlIGJvdW5kYXJpZXMuICBUaGlzCithbGxvd3MgXHMtMUdDQ1xzMCB0byBlbWl0IGNvZGUgdGhhdCBwZXJmb3JtcyBmYXN0ZXIgaW5kaXJlY3QgY2FsbHMuCisuU3AKK1RoaXMgb3B0aW9uIGRvZXMgbm90IHdvcmsgaW4gdGhlIHByZXNlbmNlIG9mIHNoYXJlZCBsaWJyYXJpZXMgb3IgbmVzdGVkCitmdW5jdGlvbnMuCisuSVAgIlxmQlwtbWZpeGVkXC1yYW5nZT1cZlJcZklyZWdpc3Rlci1yYW5nZVxmUiIgNAorLklYIEl0ZW0gIi1tZml4ZWQtcmFuZ2U9cmVnaXN0ZXItcmFuZ2UiCitHZW5lcmF0ZSBjb2RlIHRyZWF0aW5nIHRoZSBnaXZlbiByZWdpc3RlciByYW5nZSBhcyBmaXhlZCByZWdpc3RlcnMuCitBIGZpeGVkIHJlZ2lzdGVyIGlzIG9uZSB0aGF0IHRoZSByZWdpc3RlciBhbGxvY2F0b3IgY2Fubm90IHVzZS4gIFRoaXMgaXMKK3VzZWZ1bCB3aGVuIGNvbXBpbGluZyBrZXJuZWwgY29kZS4gIEEgcmVnaXN0ZXIgcmFuZ2UgaXMgc3BlY2lmaWVkIGFzCit0d28gcmVnaXN0ZXJzIHNlcGFyYXRlZCBieSBhIGRhc2guICBNdWx0aXBsZSByZWdpc3RlciByYW5nZXMgY2FuIGJlCitzcGVjaWZpZWQgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCisuSVAgIlxmQlwtbWxvbmdcLWxvYWRcLXN0b3JlXGZSIiA0CisuSVggSXRlbSAiLW1sb25nLWxvYWQtc3RvcmUiCitHZW5lcmF0ZSAzXC1pbnN0cnVjdGlvbiBsb2FkIGFuZCBzdG9yZSBzZXF1ZW5jZXMgYXMgc29tZXRpbWVzIHJlcXVpcmVkIGJ5Cit0aGUgSFAtVVggMTAgbGlua2VyLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBcZkIra1xmUiBvcHRpb24gdG8KK3RoZSBccy0xSFBcczAgY29tcGlsZXJzLgorLklQICJcZkJcLW1wb3J0YWJsZVwtcnVudGltZVxmUiIgNAorLklYIEl0ZW0gIi1tcG9ydGFibGUtcnVudGltZSIKK1VzZSB0aGUgcG9ydGFibGUgY2FsbGluZyBjb252ZW50aW9ucyBwcm9wb3NlZCBieSBccy0xSFBcczAgZm9yIFxzLTFFTEZcczAgc3lzdGVtcy4KKy5JUCAiXGZCXC1tZ2FzXGZSIiA0CisuSVggSXRlbSAiLW1nYXMiCitFbmFibGUgdGhlIHVzZSBvZiBhc3NlbWJsZXIgZGlyZWN0aXZlcyBvbmx5IFxzLTFHQVNcczAgdW5kZXJzdGFuZHMuCisuSVAgIlxmQlwtbXNjaGVkdWxlPVxmUlxmSWNwdS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZHVsZT1jcHUtdHlwZSIKK1NjaGVkdWxlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZSBjb25zdHJhaW50cyBmb3IgdGhlIG1hY2hpbmUgdHlwZQorXCZcZkljcHUtdHlwZVxmUi4gIFRoZSBjaG9pY2VzIGZvciBcZkljcHUtdHlwZVxmUiBhcmUgXGZCNzAwXGZSCitcJlxmQjcxMDBcZlIsIFxmQjcxMDBMQ1xmUiwgXGZCNzIwMFxmUiwgXGZCNzMwMFxmUiBhbmQgXGZCODAwMFxmUi4gIFJlZmVyCit0byBcZkkvdXNyL2xpYi9zY2hlZC5tb2RlbHNcZlIgb24gYW4gSFAtVVggc3lzdGVtIHRvIGRldGVybWluZSB0aGUKK3Byb3BlciBzY2hlZHVsaW5nIG9wdGlvbiBmb3IgeW91ciBtYWNoaW5lLiAgVGhlIGRlZmF1bHQgc2NoZWR1bGluZyBpcworXCZcZkI4MDAwXGZSLgorLklQICJcZkJcLW1saW5rZXJcLW9wdFxmUiIgNAorLklYIEl0ZW0gIi1tbGlua2VyLW9wdCIKK0VuYWJsZSB0aGUgb3B0aW1pemF0aW9uIHBhc3MgaW4gdGhlIEhQLVVYIGxpbmtlci4gIE5vdGUgdGhpcyBtYWtlcyBzeW1ib2xpYworZGVidWdnaW5nIGltcG9zc2libGUuICBJdCBhbHNvIHRyaWdnZXJzIGEgYnVnIGluIHRoZSBIUC1VWCA4IGFuZCBIUC1VWCA5CitsaW5rZXJzIGluIHdoaWNoIHRoZXkgZ2l2ZSBib2d1cyBlcnJvciBtZXNzYWdlcyB3aGVuIGxpbmtpbmcgc29tZSBwcm9ncmFtcy4KKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCitHZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBsaWJyYXJ5IGNhbGxzIGZvciBmbG9hdGluZyBwb2ludC4KK1wmXGZCV2FybmluZzpcZlIgdGhlIHJlcXVpc2l0ZSBsaWJyYXJpZXMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGFsbCBccy0xSFBQQVxzMAordGFyZ2V0cy4gIE5vcm1hbGx5IHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBtYWNoaW5lJ3MgdXN1YWwgQyBjb21waWxlciBhcmUKK3VzZWQsIGJ1dCB0aGlzIGNhbm5vdCBiZSBkb25lIGRpcmVjdGx5IGluIGNyb3NzLWNvbXBpbGF0aW9uLiAgWW91IG11c3QgbWFrZQoreW91ciBvd24gYXJyYW5nZW1lbnRzIHRvIHByb3ZpZGUgc3VpdGFibGUgbGlicmFyeSBmdW5jdGlvbnMgZm9yCitjcm9zcy1jb21waWxhdGlvbi4KKy5TcAorXCZcZkJcLW1zb2Z0XC1mbG9hdFxmUiBjaGFuZ2VzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gaW4gdGhlIG91dHB1dCBmaWxlOwordGhlcmVmb3JlLCBpdCBpcyBvbmx5IHVzZWZ1bCBpZiB5b3UgY29tcGlsZSBcZklhbGxcZlIgb2YgYSBwcm9ncmFtIHdpdGgKK3RoaXMgb3B0aW9uLiAgSW4gcGFydGljdWxhciwgeW91IG5lZWQgdG8gY29tcGlsZSBcZklsaWJnY2MuYVxmUiwgdGhlCitsaWJyYXJ5IHRoYXQgY29tZXMgd2l0aCBccy0xR0NDXHMwLCB3aXRoIFxmQlwtbXNvZnRcLWZsb2F0XGZSIGluIG9yZGVyIGZvcgordGhpcyB0byB3b3JrLgorLklQICJcZkJcLW1zaW9cZlIiIDQKKy5JWCBJdGVtICItbXNpbyIKK0dlbmVyYXRlIHRoZSBwcmVkZWZpbmUsIFxmKENXXCooQ2BfU0lPXCooQydcZlIsIGZvciBzZXJ2ZXIgXHMtMUlPXHMwLiAgVGhlIGRlZmF1bHQgaXMKK1wmXGZCXC1td3Npb1xmUi4gIFRoaXMgZ2VuZXJhdGVzIHRoZSBwcmVkZWZpbmVzLCBcZihDV1wqKENgX1x8X2hwOTAwMHM3MDBcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYF9cfF9ocDkwMDBzNzAwX1x8X1wqKEMnXGZSIGFuZCBcZihDV1wqKENgX1dTSU9cKihDJ1xmUiwgZm9yIHdvcmtzdGF0aW9uIFxzLTFJT1xzMC4gIFRoZXNlCitvcHRpb25zIGFyZSBhdmFpbGFibGUgdW5kZXIgSFAtVVggYW5kIEhJLVVYLgorLklQICJcZkJcLW1nbnVcLWxkXGZSIiA0CisuSVggSXRlbSAiLW1nbnUtbGQiCitVc2Ugb3B0aW9ucyBzcGVjaWZpYyB0byBccy0xR05VXHMwIFxmQmxkXGZSLgorVGhpcyBwYXNzZXMgXGZCXC1zaGFyZWRcZlIgdG8gXGZCbGRcZlIgd2hlbgorYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeS4gIEl0IGlzIHRoZSBkZWZhdWx0IHdoZW4gXHMtMUdDQ1xzMCBpcyBjb25maWd1cmVkLAorZXhwbGljaXRseSBvciBpbXBsaWNpdGx5LCB3aXRoIHRoZSBccy0xR05VXHMwIGxpbmtlci4gIFRoaXMgb3B0aW9uIGRvZXMgbm90CithZmZlY3Qgd2hpY2ggXGZCbGRcZlIgaXMgY2FsbGVkOyBpdCBvbmx5IGNoYW5nZXMgd2hhdCBwYXJhbWV0ZXJzCithcmUgcGFzc2VkIHRvIHRoYXQgXGZCbGRcZlIuCitUaGUgXGZCbGRcZlIgdGhhdCBpcyBjYWxsZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUKK1wmXGZCXC1cLXdpdGhcLWxkXGZSIGNvbmZpZ3VyZSBvcHRpb24sIFxzLTFHQ0NcczAncyBwcm9ncmFtIHNlYXJjaCBwYXRoLCBhbmQKK2ZpbmFsbHkgYnkgdGhlIHVzZXIncyBcZkJccy0xUEFUSFxzMFxmUi4gIFRoZSBsaW5rZXIgdXNlZCBieSBccy0xR0NDXHMwIGNhbiBiZSBwcmludGVkCit1c2luZyBcZkJ3aGljaCBgZ2NjIFwtcHJpbnRcLXByb2dcLW5hbWU9bGRgXGZSLiAgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUKK29uIHRoZSA2NFwtYml0IEhQLVVYIFxzLTFHQ0NcczAsIGkuZS4gY29uZmlndXJlZCB3aXRoIFxmQmhwcGEqNjQqXC0qXC1ocHV4KlxmUi4KKy5JUCAiXGZCXC1taHBcLWxkXGZSIiA0CisuSVggSXRlbSAiLW1ocC1sZCIKK1VzZSBvcHRpb25zIHNwZWNpZmljIHRvIFxzLTFIUFxzMCBcZkJsZFxmUi4KK1RoaXMgcGFzc2VzIFxmQlwtYlxmUiB0byBcZkJsZFxmUiB3aGVuIGJ1aWxkaW5nCithIHNoYXJlZCBsaWJyYXJ5IGFuZCBwYXNzZXMgXGZCK0FjY2VwdCBUeXBlTWlzbWF0Y2hcZlIgdG8gXGZCbGRcZlIgb24gYWxsCitsaW5rcy4gIEl0IGlzIHRoZSBkZWZhdWx0IHdoZW4gXHMtMUdDQ1xzMCBpcyBjb25maWd1cmVkLCBleHBsaWNpdGx5IG9yCitpbXBsaWNpdGx5LCB3aXRoIHRoZSBccy0xSFBcczAgbGlua2VyLiAgVGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0Cit3aGljaCBcZkJsZFxmUiBpcyBjYWxsZWQ7IGl0IG9ubHkgY2hhbmdlcyB3aGF0IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byB0aGF0CitcJlxmQmxkXGZSLgorVGhlIFxmQmxkXGZSIHRoYXQgaXMgY2FsbGVkIGlzIGRldGVybWluZWQgYnkgdGhlIFxmQlwtXC13aXRoXC1sZFxmUgorY29uZmlndXJlIG9wdGlvbiwgXHMtMUdDQ1xzMCdzIHByb2dyYW0gc2VhcmNoIHBhdGgsIGFuZCBmaW5hbGx5IGJ5IHRoZSB1c2VyJ3MKK1wmXGZCXHMtMVBBVEhcczBcZlIuICBUaGUgbGlua2VyIHVzZWQgYnkgXHMtMUdDQ1xzMCBjYW4gYmUgcHJpbnRlZCB1c2luZyBcZkJ3aGljaAorYGdjYyBcLXByaW50XC1wcm9nXC1uYW1lPWxkYFxmUi4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSA2NFwtYml0CitIUC1VWCBccy0xR0NDXHMwLCBpLmUuIGNvbmZpZ3VyZWQgd2l0aCBcZkJocHBhKjY0KlwtKlwtaHB1eCpcZlIuCisuSVAgIlxmQlwtbWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1sb25nLWNhbGxzIgorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgbG9uZyBjYWxsIHNlcXVlbmNlcy4gIFRoaXMgZW5zdXJlcyB0aGF0IGEgY2FsbAoraXMgYWx3YXlzIGFibGUgdG8gcmVhY2ggbGlua2VyIGdlbmVyYXRlZCBzdHVicy4gIFRoZSBkZWZhdWx0IGlzIHRvIGdlbmVyYXRlCitsb25nIGNhbGxzIG9ubHkgd2hlbiB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2FsbCBzaXRlIHRvIHRoZSBiZWdpbm5pbmcKK29mIHRoZSBmdW5jdGlvbiBvciB0cmFuc2xhdGlvbiB1bml0LCBhcyB0aGUgY2FzZSBtYXkgYmUsIGV4Y2VlZHMgYQorcHJlZGVmaW5lZCBsaW1pdCBzZXQgYnkgdGhlIGJyYW5jaCB0eXBlIGJlaW5nIHVzZWQuICBUaGUgbGltaXRzIGZvcgorbm9ybWFsIGNhbGxzIGFyZSA3LDYwMCwwMDAgYW5kIDI0MCwwMDAgYnl0ZXMsIHJlc3BlY3RpdmVseSBmb3IgdGhlCitcJlxzLTFQQVxzMCAyLjAgYW5kIFxzLTFQQVxzMCAxLlggYXJjaGl0ZWN0dXJlcy4gIFNpYmNhbGxzIGFyZSBhbHdheXMgbGltaXRlZCBhdAorMjQwLDAwMCBieXRlcy4KKy5TcAorRGlzdGFuY2VzIGFyZSBtZWFzdXJlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZnVuY3Rpb25zIHdoZW4gdXNpbmcgdGhlCitcJlxmQlwtZmZ1bmN0aW9uXC1zZWN0aW9uc1xmUiBvcHRpb24sIG9yIHdoZW4gdXNpbmcgdGhlIFxmQlwtbWdhc1xmUgorYW5kIFxmQlwtbW5vXC1wb3J0YWJsZVwtcnVudGltZVxmUiBvcHRpb25zIHRvZ2V0aGVyIHVuZGVyIEhQLVVYIHdpdGgKK3RoZSBccy0xU09NXHMwIGxpbmtlci4KKy5TcAorSXQgaXMgbm9ybWFsbHkgbm90IGRlc2lyYWJsZSB0byB1c2UgdGhpcyBvcHRpb24gYXMgaXQgZGVncmFkZXMKK3BlcmZvcm1hbmNlLiAgSG93ZXZlciwgaXQgbWF5IGJlIHVzZWZ1bCBpbiBsYXJnZSBhcHBsaWNhdGlvbnMsCitwYXJ0aWN1bGFybHkgd2hlbiBwYXJ0aWFsIGxpbmtpbmcgaXMgdXNlZCB0byBidWlsZCB0aGUgYXBwbGljYXRpb24uCisuU3AKK1RoZSB0eXBlcyBvZiBsb25nIGNhbGxzIHVzZWQgZGVwZW5kcyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZQorYXNzZW1ibGVyIGFuZCBsaW5rZXIsIGFuZCB0aGUgdHlwZSBvZiBjb2RlIGJlaW5nIGdlbmVyYXRlZC4gIFRoZQoraW1wYWN0IG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGxvbmcgYWJzb2x1dGUgY2FsbHMsIGFuZCBsb25nIHBpYworc3ltYm9sLWRpZmZlcmVuY2Ugb3IgcGMtcmVsYXRpdmUgY2FsbHMgc2hvdWxkIGJlIHJlbGF0aXZlbHkgc21hbGwuCitIb3dldmVyLCBhbiBpbmRpcmVjdCBjYWxsIGlzIHVzZWQgb24gMzJcLWJpdCBccy0xRUxGXHMwIHN5c3RlbXMgaW4gcGljIGNvZGUKK2FuZCBpdCBpcyBxdWl0ZSBsb25nLgorLklQICJcZkJcLW11bml4PVxmUlxmSXVuaXgtc3RkXGZSIiA0CisuSVggSXRlbSAiLW11bml4PXVuaXgtc3RkIgorR2VuZXJhdGUgY29tcGlsZXIgcHJlZGVmaW5lcyBhbmQgc2VsZWN0IGEgc3RhcnRmaWxlIGZvciB0aGUgc3BlY2lmaWVkCitcJlxzLTFVTklYXHMwIHN0YW5kYXJkLiAgVGhlIGNob2ljZXMgZm9yIFxmSXVuaXgtc3RkXGZSIGFyZSBcZkI5M1xmUiwgXGZCOTVcZlIKK2FuZCBcZkI5OFxmUi4gIFxmQjkzXGZSIGlzIHN1cHBvcnRlZCBvbiBhbGwgSFAtVVggdmVyc2lvbnMuICBcZkI5NVxmUgoraXMgYXZhaWxhYmxlIG9uIEhQLVVYIDEwLjEwIGFuZCBsYXRlci4gIFxmQjk4XGZSIGlzIGF2YWlsYWJsZSBvbiBIUC1VWAorMTEuMTEgYW5kIGxhdGVyLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBcZkI5M1xmUiBmb3IgSFAtVVggMTAuMDAsCitcJlxmQjk1XGZSIGZvciBIUC1VWCAxMC4xMCB0aG91Z2ggdG8gMTEuMDAsIGFuZCBcZkI5OFxmUiBmb3IgSFAtVVggMTEuMTEKK2FuZCBsYXRlci4KKy5TcAorXCZcZkJcLW11bml4PTkzXGZSIHByb3ZpZGVzIHRoZSBzYW1lIHByZWRlZmluZXMgYXMgXHMtMUdDQ1xzMCAzLjMgYW5kIDMuNC4KK1wmXGZCXC1tdW5peD05NVxmUiBwcm92aWRlcyBhZGRpdGlvbmFsIHByZWRlZmluZXMgZm9yIFxmKENXXCooQ2BYT1BFTl9VTklYXCooQydcZlIKK2FuZCBcZihDV1wqKENgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRFwqKEMnXGZSLCBhbmQgdGhlIHN0YXJ0ZmlsZSBcZkl1bml4OTUub1xmUi4KK1wmXGZCXC1tdW5peD05OFxmUiBwcm92aWRlcyBhZGRpdGlvbmFsIHByZWRlZmluZXMgZm9yIFxmKENXXCooQ2BfWE9QRU5fVU5JWFwqKEMnXGZSLAorXCZcZihDV1wqKENgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRFwqKEMnXGZSLCBcZihDV1wqKENgX0lOQ0xVREVfXHxfU1REQ19BMV9TT1VSQ0VcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYF9JTkNMVURFX1hPUEVOX1NPVVJDRV81MDBcKihDJ1xmUiwgYW5kIHRoZSBzdGFydGZpbGUgXGZJdW5peDk4Lm9cZlIuCisuU3AKK0l0IGlzIFxmSWltcG9ydGFudFxmUiB0byBub3RlIHRoYXQgdGhpcyBvcHRpb24gY2hhbmdlcyB0aGUgaW50ZXJmYWNlcworZm9yIHZhcmlvdXMgbGlicmFyeSByb3V0aW5lcy4gIEl0IGFsc28gYWZmZWN0cyB0aGUgb3BlcmF0aW9uYWwgYmVoYXZpb3IKK29mIHRoZSBDIGxpYnJhcnkuICBUaHVzLCBcZklleHRyZW1lXGZSIGNhcmUgaXMgbmVlZGVkIGluIHVzaW5nIHRoaXMKK29wdGlvbi4KKy5TcAorTGlicmFyeSBjb2RlIHRoYXQgaXMgaW50ZW5kZWQgdG8gb3BlcmF0ZSB3aXRoIG1vcmUgdGhhbiBvbmUgXHMtMVVOSVhcczAKK3N0YW5kYXJkIG11c3QgdGVzdCwgc2V0IGFuZCByZXN0b3JlIHRoZSB2YXJpYWJsZSBcZklfXHxfeHBnNF9leHRlbmRlZF9tYXNrXGZSCithcyBhcHByb3ByaWF0ZS4gIE1vc3QgXHMtMUdOVVxzMCBzb2Z0d2FyZSBkb2Vzbid0IHByb3ZpZGUgdGhpcyBjYXBhYmlsaXR5LgorLklQICJcZkJcLW5vbGliZGxkXGZSIiA0CisuSVggSXRlbSAiLW5vbGliZGxkIgorU3VwcHJlc3MgdGhlIGdlbmVyYXRpb24gb2YgbGluayBvcHRpb25zIHRvIHNlYXJjaCBsaWJkbGQuc2wgd2hlbiB0aGUKK1wmXGZCXC1zdGF0aWNcZlIgb3B0aW9uIGlzIHNwZWNpZmllZCBvbiBIUC1VWCAxMCBhbmQgbGF0ZXIuCisuSVAgIlxmQlwtc3RhdGljXGZSIiA0CisuSVggSXRlbSAiLXN0YXRpYyIKK1RoZSBIUC1VWCBpbXBsZW1lbnRhdGlvbiBvZiBzZXRsb2NhbGUgaW4gbGliYyBoYXMgYSBkZXBlbmRlbmN5IG9uCitsaWJkbGQuc2wuICBUaGVyZSBpc24ndCBhbiBhcmNoaXZlIHZlcnNpb24gb2YgbGliZGxkLnNsLiAgVGh1cywKK3doZW4gdGhlIFxmQlwtc3RhdGljXGZSIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHNwZWNpYWwgbGluayBvcHRpb25zCithcmUgbmVlZGVkIHRvIHJlc29sdmUgdGhpcyBkZXBlbmRlbmN5LgorLlNwCitPbiBIUC1VWCAxMCBhbmQgbGF0ZXIsIHRoZSBccy0xR0NDXHMwIGRyaXZlciBhZGRzIHRoZSBuZWNlc3Nhcnkgb3B0aW9ucyB0bworbGluayB3aXRoIGxpYmRsZC5zbCB3aGVuIHRoZSBcZkJcLXN0YXRpY1xmUiBvcHRpb24gaXMgc3BlY2lmaWVkLgorVGhpcyBjYXVzZXMgdGhlIHJlc3VsdGluZyBiaW5hcnkgdG8gYmUgZHluYW1pYy4gIE9uIHRoZSA2NFwtYml0IHBvcnQsCit0aGUgbGlua2VycyBnZW5lcmF0ZSBkeW5hbWljIGJpbmFyaWVzIGJ5IGRlZmF1bHQgaW4gYW55IGNhc2UuICBUaGUKK1wmXGZCXC1ub2xpYmRsZFxmUiBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcHJldmVudCB0aGUgXHMtMUdDQ1xzMCBkcml2ZXIgZnJvbQorYWRkaW5nIHRoZXNlIGxpbmsgb3B0aW9ucy4KKy5JUCAiXGZCXC10aHJlYWRzXGZSIiA0CisuSVggSXRlbSAiLXRocmVhZHMiCitBZGQgc3VwcG9ydCBmb3IgbXVsdGl0aHJlYWRpbmcgd2l0aCB0aGUgXGZJZGNlIHRocmVhZFxmUiBsaWJyYXJ5Cit1bmRlciBIUC1VWC4gIFRoaXMgb3B0aW9uIHNldHMgZmxhZ3MgZm9yIGJvdGggdGhlIHByZXByb2Nlc3NvciBhbmQKK2xpbmtlci4KKy5QUAorXGZJSW50ZWwgMzg2IGFuZCBccy0xQU1EXHMwIHg4NlwtNjQgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkludGVsIDM4NiBhbmQgQU1EIHg4Ni02NCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIGkzODYgYW5kIHg4NlwtNjQgZmFtaWx5IG9mCitjb21wdXRlcnM6CisuSVAgIlxmQlwtbWFyY2g9XGZSXGZJY3B1LXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbWFyY2g9Y3B1LXR5cGUiCitHZW5lcmF0ZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBtYWNoaW5lIHR5cGUgXGZJY3B1LXR5cGVcZlIuICBJbiBjb250cmFzdCB0bworXCZcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSLCB3aGljaCBtZXJlbHkgdHVuZXMgdGhlIGdlbmVyYXRlZCBjb2RlIAorZm9yIHRoZSBzcGVjaWZpZWQgXGZJY3B1LXR5cGVcZlIsIFxmQlwtbWFyY2g9XGZSXGZJY3B1LXR5cGVcZlIgYWxsb3dzIFxzLTFHQ0NcczAKK3RvIGdlbmVyYXRlIGNvZGUgdGhhdCBtYXkgbm90IHJ1biBhdCBhbGwgb24gcHJvY2Vzc29ycyBvdGhlciB0aGFuIHRoZSBvbmUKK2luZGljYXRlZC4gIFNwZWNpZnlpbmcgXGZCXC1tYXJjaD1cZlJcZkljcHUtdHlwZVxmUiBpbXBsaWVzIAorXCZcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSLgorLlNwCitUaGUgY2hvaWNlcyBmb3IgXGZJY3B1LXR5cGVcZlIgYXJlOgorLlJTIDQKKy5JUCAiXGZCbmF0aXZlXGZSIiA0CisuSVggSXRlbSAibmF0aXZlIgorVGhpcyBzZWxlY3RzIHRoZSBccy0xQ1BVXHMwIHRvIGdlbmVyYXRlIGNvZGUgZm9yIGF0IGNvbXBpbGF0aW9uIHRpbWUgYnkgZGV0ZXJtaW5pbmcKK3RoZSBwcm9jZXNzb3IgdHlwZSBvZiB0aGUgY29tcGlsaW5nIG1hY2hpbmUuICBVc2luZyBcZkJcLW1hcmNoPW5hdGl2ZVxmUgorZW5hYmxlcyBhbGwgaW5zdHJ1Y3Rpb24gc3Vic2V0cyBzdXBwb3J0ZWQgYnkgdGhlIGxvY2FsIG1hY2hpbmUgKGhlbmNlCit0aGUgcmVzdWx0IG1pZ2h0IG5vdCBydW4gb24gZGlmZmVyZW50IG1hY2hpbmVzKS4gIFVzaW5nIFxmQlwtbXR1bmU9bmF0aXZlXGZSCitwcm9kdWNlcyBjb2RlIG9wdGltaXplZCBmb3IgdGhlIGxvY2FsIG1hY2hpbmUgdW5kZXIgdGhlIGNvbnN0cmFpbnRzCitvZiB0aGUgc2VsZWN0ZWQgaW5zdHJ1Y3Rpb24gc2V0LgorLklQICJcZkJpMzg2XGZSIiA0CisuSVggSXRlbSAiaTM4NiIKK09yaWdpbmFsIEludGVsIGkzODYgXHMtMUNQVVxzMC4KKy5JUCAiXGZCaTQ4NlxmUiIgNAorLklYIEl0ZW0gImk0ODYiCitJbnRlbCBpNDg2IFxzLTFDUFVcczAuICAoTm8gc2NoZWR1bGluZyBpcyBpbXBsZW1lbnRlZCBmb3IgdGhpcyBjaGlwLikKKy5JUCAiXGZCaTU4NlxmUiIgNAorLklYIEl0ZW0gImk1ODYiCisuUEQgMAorLklQICJcZkJwZW50aXVtXGZSIiA0CisuSVggSXRlbSAicGVudGl1bSIKKy5QRAorSW50ZWwgUGVudGl1bSBccy0xQ1BVXHMwIHdpdGggbm8gXHMtMU1NWFxzMCBzdXBwb3J0LgorLklQICJcZkJwZW50aXVtLW1teFxmUiIgNAorLklYIEl0ZW0gInBlbnRpdW0tbW14IgorSW50ZWwgUGVudGl1bSBccy0xTU1YXHMwIFxzLTFDUFVcczAsIGJhc2VkIG9uIFBlbnRpdW0gY29yZSB3aXRoIFxzLTFNTVhcczAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQnBlbnRpdW1wcm9cZlIiIDQKKy5JWCBJdGVtICJwZW50aXVtcHJvIgorSW50ZWwgUGVudGl1bSBQcm8gXHMtMUNQVVxzMC4KKy5JUCAiXGZCaTY4NlxmUiIgNAorLklYIEl0ZW0gImk2ODYiCitXaGVuIHVzZWQgd2l0aCBcZkJcLW1hcmNoXGZSLCB0aGUgUGVudGl1bSBQcm8KK2luc3RydWN0aW9uIHNldCBpcyB1c2VkLCBzbyB0aGUgY29kZSBydW5zIG9uIGFsbCBpNjg2IGZhbWlseSBjaGlwcy4KK1doZW4gdXNlZCB3aXRoIFxmQlwtbXR1bmVcZlIsIGl0IGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIFxmQmdlbmVyaWNcZlIuCisuSVAgIlxmQnBlbnRpdW0yXGZSIiA0CisuSVggSXRlbSAicGVudGl1bTIiCitJbnRlbCBQZW50aXVtIFxzLTFJSVxzMCBccy0xQ1BVXHMwLCBiYXNlZCBvbiBQZW50aXVtIFBybyBjb3JlIHdpdGggXHMtMU1NWFxzMCBpbnN0cnVjdGlvbiBzZXQKK3N1cHBvcnQuCisuSVAgIlxmQnBlbnRpdW0zXGZSIiA0CisuSVggSXRlbSAicGVudGl1bTMiCisuUEQgMAorLklQICJcZkJwZW50aXVtM21cZlIiIDQKKy5JWCBJdGVtICJwZW50aXVtM20iCisuUEQKK0ludGVsIFBlbnRpdW0gXHMtMUlJSVxzMCBccy0xQ1BVXHMwLCBiYXNlZCBvbiBQZW50aXVtIFBybyBjb3JlIHdpdGggXHMtMU1NWFxzMCBhbmQgXHMtMVNTRVxzMCBpbnN0cnVjdGlvbgorc2V0IHN1cHBvcnQuCisuSVAgIlxmQnBlbnRpdW0tbVxmUiIgNAorLklYIEl0ZW0gInBlbnRpdW0tbSIKK0ludGVsIFBlbnRpdW0gTTsgbG93LXBvd2VyIHZlcnNpb24gb2YgSW50ZWwgUGVudGl1bSBccy0xSUlJXHMwIFxzLTFDUFVcczAKK3dpdGggXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCBhbmQgXHMtMVNTRTJcczAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuICBVc2VkIGJ5IENlbnRyaW5vIG5vdGVib29rcy4KKy5JUCAiXGZCcGVudGl1bTRcZlIiIDQKKy5JWCBJdGVtICJwZW50aXVtNCIKKy5QRCAwCisuSVAgIlxmQnBlbnRpdW00bVxmUiIgNAorLklYIEl0ZW0gInBlbnRpdW00bSIKKy5QRAorSW50ZWwgUGVudGl1bSA0IFxzLTFDUFVcczAgd2l0aCBccy0xTU1YXHMwLCBccy0xU1NFXHMwIGFuZCBccy0xU1NFMlxzMCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKy5JUCAiXGZCcHJlc2NvdHRcZlIiIDQKKy5JWCBJdGVtICJwcmVzY290dCIKK0ltcHJvdmVkIHZlcnNpb24gb2YgSW50ZWwgUGVudGl1bSA0IFxzLTFDUFVcczAgd2l0aCBccy0xTU1YXHMwLCBccy0xU1NFXHMwLCBccy0xU1NFMlxzMCBhbmQgXHMtMVNTRTNcczAgaW5zdHJ1Y3Rpb24KK3NldCBzdXBwb3J0LgorLklQICJcZkJub2NvbmFcZlIiIDQKKy5JWCBJdGVtICJub2NvbmEiCitJbXByb3ZlZCB2ZXJzaW9uIG9mIEludGVsIFBlbnRpdW0gNCBccy0xQ1BVXHMwIHdpdGggNjRcLWJpdCBleHRlbnNpb25zLCBccy0xTU1YXHMwLCBccy0xU1NFXHMwLAorXCZccy0xU1NFMlxzMCBhbmQgXHMtMVNTRTNcczAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQmNvcmUyXGZSIiA0CisuSVggSXRlbSAiY29yZTIiCitJbnRlbCBDb3JlIDIgXHMtMUNQVVxzMCB3aXRoIDY0XC1iaXQgZXh0ZW5zaW9ucywgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwgXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwIGFuZCBccy0xU1NTRTNcczAKK2luc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJjb3JlaTdcZlIiIDQKKy5JWCBJdGVtICJjb3JlaTciCitJbnRlbCBDb3JlIGk3IFxzLTFDUFVcczAgd2l0aCA2NFwtYml0IGV4dGVuc2lvbnMsIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsIFxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTU0UzXHMwLCBccy0xU1NFNFxzMC4xCithbmQgXHMtMVNTRTRcczAuMiBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKy5JUCAiXGZCY29yZWk3XC1hdnhcZlIiIDQKKy5JWCBJdGVtICJjb3JlaTctYXZ4IgorSW50ZWwgQ29yZSBpNyBccy0xQ1BVXHMwIHdpdGggNjRcLWJpdCBleHRlbnNpb25zLCBccy0xTU1YXHMwLCBccy0xU1NFXHMwLCBccy0xU1NFMlxzMCwgXHMtMVNTRTNcczAsIFxzLTFTU1NFM1xzMCwKK1wmXHMtMVNTRTRcczAuMSwgXHMtMVNTRTRcczAuMiwgXHMtMUFWWFxzMCwgXHMtMUFFU1xzMCBhbmQgXHMtMVBDTE1VTFxzMCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKy5JUCAiXGZCY29yZS1hdngtaVxmUiIgNAorLklYIEl0ZW0gImNvcmUtYXZ4LWkiCitJbnRlbCBDb3JlIFxzLTFDUFVcczAgd2l0aCA2NFwtYml0IGV4dGVuc2lvbnMsIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsIFxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTU0UzXHMwLAorXCZccy0xU1NFNFxzMC4xLCBccy0xU1NFNFxzMC4yLCBccy0xQVZYXHMwLCBccy0xQUVTXHMwLCBccy0xUENMTVVMXHMwLCBccy0xRlNHU0JBU0VcczAsIFxzLTFSRFJORFxzMCBhbmQgRjE2QyBpbnN0cnVjdGlvbgorc2V0IHN1cHBvcnQuCisuSVAgIlxmQmNvcmVcLWF2eDJcZlIiIDQKKy5JWCBJdGVtICJjb3JlLWF2eDIiCitJbnRlbCBDb3JlIFxzLTFDUFVcczAgd2l0aCA2NFwtYml0IGV4dGVuc2lvbnMsIFxzLTFNT1ZCRVxzMCwgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwgXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NTRTNcczAsCitcJlxzLTFTU0U0XHMwLjEsIFxzLTFTU0U0XHMwLjIsIFxzLTFBVlhcczAsIFxzLTFBVlgyXHMwLCBccy0xQUVTXHMwLCBccy0xUENMTVVMXHMwLCBccy0xRlNHU0JBU0VcczAsIFxzLTFSRFJORFxzMCwgXHMtMUZNQVxzMCwgXHMtMUJNSVxzMCwgXHMtMUJNSTJcczAKK2FuZCBGMTZDIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJhdG9tXGZSIiA0CisuSVggSXRlbSAiYXRvbSIKK0ludGVsIEF0b20gXHMtMUNQVVxzMCB3aXRoIDY0XC1iaXQgZXh0ZW5zaW9ucywgXHMtMU1PVkJFXHMwLCBccy0xTU1YXHMwLCBccy0xU1NFXHMwLCBccy0xU1NFMlxzMCwgXHMtMVNTRTNcczAgYW5kIFxzLTFTU1NFM1xzMAoraW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQms2XGZSIiA0CisuSVggSXRlbSAiazYiCitcJlxzLTFBTURcczAgSzYgXHMtMUNQVVxzMCB3aXRoIFxzLTFNTVhcczAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQms2XC0yXGZSIiA0CisuSVggSXRlbSAiazYtMiIKKy5QRCAwCisuSVAgIlxmQms2XC0zXGZSIiA0CisuSVggSXRlbSAiazYtMyIKKy5QRAorSW1wcm92ZWQgdmVyc2lvbnMgb2YgXHMtMUFNRFxzMCBLNiBccy0xQ1BVXHMwIHdpdGggXHMtMU1NWFxzMCBhbmQgM0ROb3chIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJhdGhsb25cZlIiIDQKKy5JWCBJdGVtICJhdGhsb24iCisuUEQgMAorLklQICJcZkJhdGhsb24tdGJpcmRcZlIiIDQKKy5JWCBJdGVtICJhdGhsb24tdGJpcmQiCisuUEQKK1wmXHMtMUFNRFxzMCBBdGhsb24gXHMtMUNQVVxzMCB3aXRoIFxzLTFNTVhcczAsIDNkTk9XISwgZW5oYW5jZWQgM0ROb3chIGFuZCBccy0xU1NFXHMwIHByZWZldGNoIGluc3RydWN0aW9ucworc3VwcG9ydC4KKy5JUCAiXGZCYXRobG9uXC00XGZSIiA0CisuSVggSXRlbSAiYXRobG9uLTQiCisuUEQgMAorLklQICJcZkJhdGhsb24teHBcZlIiIDQKKy5JWCBJdGVtICJhdGhsb24teHAiCisuSVAgIlxmQmF0aGxvbi1tcFxmUiIgNAorLklYIEl0ZW0gImF0aGxvbi1tcCIKKy5QRAorSW1wcm92ZWQgXHMtMUFNRFxzMCBBdGhsb24gXHMtMUNQVVxzMCB3aXRoIFxzLTFNTVhcczAsIDNETm93ISwgZW5oYW5jZWQgM0ROb3chIGFuZCBmdWxsIFxzLTFTU0VcczAKK2luc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJrOFxmUiIgNAorLklYIEl0ZW0gIms4IgorLlBEIDAKKy5JUCAiXGZCb3B0ZXJvblxmUiIgNAorLklYIEl0ZW0gIm9wdGVyb24iCisuSVAgIlxmQmF0aGxvbjY0XGZSIiA0CisuSVggSXRlbSAiYXRobG9uNjQiCisuSVAgIlxmQmF0aGxvbi1meFxmUiIgNAorLklYIEl0ZW0gImF0aGxvbi1meCIKKy5QRAorUHJvY2Vzc29ycyBiYXNlZCBvbiB0aGUgXHMtMUFNRFxzMCBLOCBjb3JlIHdpdGggeDg2XC02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydCwKK2luY2x1ZGluZyB0aGUgXHMtMUFNRFxzMCBPcHRlcm9uLCBBdGhsb24gNjQsIGFuZCBBdGhsb24gNjQgXHMtMUZYXHMwIHByb2Nlc3NvcnMuCisoVGhpcyBzdXBlcnNldHMgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwgXHMtMVNTRTJcczAsIDNETm93ISwgZW5oYW5jZWQgM0ROb3chIGFuZCA2NFwtYml0CitpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4pCisuSVAgIlxmQms4XC1zc2UzXGZSIiA0CisuSVggSXRlbSAiazgtc3NlMyIKKy5QRCAwCisuSVAgIlxmQm9wdGVyb25cLXNzZTNcZlIiIDQKKy5JWCBJdGVtICJvcHRlcm9uLXNzZTMiCisuSVAgIlxmQmF0aGxvbjY0XC1zc2UzXGZSIiA0CisuSVggSXRlbSAiYXRobG9uNjQtc3NlMyIKKy5QRAorSW1wcm92ZWQgdmVyc2lvbnMgb2YgXHMtMUFNRFxzMCBLOCBjb3JlcyB3aXRoIFxzLTFTU0UzXHMwIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJhbWRmYW0xMFxmUiIgNAorLklYIEl0ZW0gImFtZGZhbTEwIgorLlBEIDAKKy5JUCAiXGZCYmFyY2Vsb25hXGZSIiA0CisuSVggSXRlbSAiYmFyY2Vsb25hIgorLlBECitDUFVzIGJhc2VkIG9uIFxzLTFBTURcczAgRmFtaWx5IDEwaCBjb3JlcyB3aXRoIHg4NlwtNjQgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuICAoVGhpcworc3VwZXJzZXRzIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsIFxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTRTRBXHMwLCAzRE5vdyEsIGVuaGFuY2VkIDNETm93ISwgXHMtMUFCTVxzMCBhbmQgNjRcLWJpdAoraW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuKQorLklQICJcZkJiZHZlcjFcZlIiIDQKKy5JWCBJdGVtICJiZHZlcjEiCitDUFVzIGJhc2VkIG9uIFxzLTFBTURcczAgRmFtaWx5IDE1aCBjb3JlcyB3aXRoIHg4NlwtNjQgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuICAoVGhpcworc3VwZXJzZXRzIFxzLTFGTUE0XHMwLCBccy0xQVZYXHMwLCBccy0xWE9QXHMwLCBccy0xTFdQXHMwLCBccy0xQUVTXHMwLCBccy0xUENMX01VTFxzMCwgXHMtMUNYMTZcczAsIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsIFxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTRTRBXHMwLAorXCZccy0xU1NTRTNcczAsIFxzLTFTU0U0XHMwLjEsIFxzLTFTU0U0XHMwLjIsIFxzLTFBQk1cczAgYW5kIDY0XC1iaXQgaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuKQorLklQICJcZkJiZHZlcjJcZlIiIDQKKy5JWCBJdGVtICJiZHZlcjIiCitcJlxzLTFBTURcczAgRmFtaWx5IDE1aCBjb3JlIGJhc2VkIENQVXMgd2l0aCB4ODZcLTY0IGluc3RydWN0aW9uIHNldCBzdXBwb3J0LiAgKFRoaXMKK3N1cGVyc2V0cyBccy0xQk1JXHMwLCBccy0xVEJNXHMwLCBGMTZDLCBccy0xRk1BXHMwLCBccy0xQVZYXHMwLCBccy0xWE9QXHMwLCBccy0xTFdQXHMwLCBccy0xQUVTXHMwLCBccy0xUENMX01VTFxzMCwgXHMtMUNYMTZcczAsIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsCitcJlxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTRTRBXHMwLCBccy0xU1NTRTNcczAsIFxzLTFTU0U0XHMwLjEsIFxzLTFTU0U0XHMwLjIsIFxzLTFBQk1cczAgYW5kIDY0XC1iaXQgaW5zdHJ1Y3Rpb24gc2V0IAorZXh0ZW5zaW9ucy4pCisuSVAgIlxmQmJkdmVyM1xmUiIgNAorLklYIEl0ZW0gImJkdmVyMyIKK1wmXHMtMUFNRFxzMCBGYW1pbHkgMTVoIGNvcmUgYmFzZWQgQ1BVcyB3aXRoIHg4NlwtNjQgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuICAoVGhpcworc3VwZXJzZXRzIFxzLTFCTUlcczAsIFxzLTFUQk1cczAsIEYxNkMsIFxzLTFGTUFcczAsIFxzLTFBVlhcczAsIFxzLTFYT1BcczAsIFxzLTFMV1BcczAsIFxzLTFBRVNcczAsIFxzLTFQQ0xfTVVMXHMwLCBccy0xQ1gxNlxzMCwgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwKK1wmXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NFNEFcczAsIFxzLTFTU1NFM1xzMCwgXHMtMVNTRTRcczAuMSwgXHMtMVNTRTRcczAuMiwgXHMtMUFCTVxzMCBhbmQgNjRcLWJpdCBpbnN0cnVjdGlvbiBzZXQgCitleHRlbnNpb25zLgorLklQICJcZkJidHZlcjFcZlIiIDQKKy5JWCBJdGVtICJidHZlcjEiCitDUFVzIGJhc2VkIG9uIFxzLTFBTURcczAgRmFtaWx5IDE0aCBjb3JlcyB3aXRoIHg4NlwtNjQgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuICAoVGhpcworc3VwZXJzZXRzIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsIFxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTU0UzXHMwLCBccy0xU1NFNEFcczAsIFxzLTFDWDE2XHMwLCBccy0xQUJNXHMwIGFuZCA2NFwtYml0CitpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4pCisuSVAgIlxmQmJ0dmVyMlxmUiIgNAorLklYIEl0ZW0gImJ0dmVyMiIKK0NQVXMgYmFzZWQgb24gXHMtMUFNRFxzMCBGYW1pbHkgMTZoIGNvcmVzIHdpdGggeDg2XC02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gVGhpcworaW5jbHVkZXMgXHMtMU1PVkJFXHMwLCBGMTZDLCBccy0xQk1JXHMwLCBccy0xQVZYXHMwLCBccy0xUENMX01VTFxzMCwgXHMtMUFFU1xzMCwgXHMtMVNTRTRcczAuMiwgXHMtMVNTRTRcczAuMSwgXHMtMUNYMTZcczAsIFxzLTFBQk1cczAsCitcJlxzLTFTU0U0QVxzMCwgXHMtMVNTU0UzXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTRTJcczAsIFxzLTFTU0VcczAsIFxzLTFNTVhcczAgYW5kIDY0XC1iaXQgaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuCisuSVAgIlxmQndpbmNoaXBcLWM2XGZSIiA0CisuSVggSXRlbSAid2luY2hpcC1jNiIKK1wmXHMtMUlEVFxzMCBXaW5DaGlwIEM2IFxzLTFDUFVcczAsIGRlYWx0IGluIHNhbWUgd2F5IGFzIGk0ODYgd2l0aCBhZGRpdGlvbmFsIFxzLTFNTVhcczAgaW5zdHJ1Y3Rpb24KK3NldCBzdXBwb3J0LgorLklQICJcZkJ3aW5jaGlwMlxmUiIgNAorLklYIEl0ZW0gIndpbmNoaXAyIgorXCZccy0xSURUXHMwIFdpbkNoaXAgMiBccy0xQ1BVXHMwLCBkZWFsdCBpbiBzYW1lIHdheSBhcyBpNDg2IHdpdGggYWRkaXRpb25hbCBccy0xTU1YXHMwIGFuZCAzRE5vdyEKK2luc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJjM1xmUiIgNAorLklYIEl0ZW0gImMzIgorXCZccy0xVklBXHMwIEMzIFxzLTFDUFVcczAgd2l0aCBccy0xTU1YXHMwIGFuZCAzRE5vdyEgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuICAoTm8gc2NoZWR1bGluZyBpcworaW1wbGVtZW50ZWQgZm9yIHRoaXMgY2hpcC4pCisuSVAgIlxmQmMzXC0yXGZSIiA0CisuSVggSXRlbSAiYzMtMiIKK1wmXHMtMVZJQVxzMCBDM1wtMiAoTmVoZW1pYWgvQzVYTCkgXHMtMUNQVVxzMCB3aXRoIFxzLTFNTVhcczAgYW5kIFxzLTFTU0VcczAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisoTm8gc2NoZWR1bGluZyBpcworaW1wbGVtZW50ZWQgZm9yIHRoaXMgY2hpcC4pCisuSVAgIlxmQmdlb2RlXGZSIiA0CisuSVggSXRlbSAiZ2VvZGUiCitcJlxzLTFBTURcczAgR2VvZGUgZW1iZWRkZWQgcHJvY2Vzc29yIHdpdGggXHMtMU1NWFxzMCBhbmQgM0ROb3chIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9Y3B1LXR5cGUiCitUdW5lIHRvIFxmSWNwdS10eXBlXGZSIGV2ZXJ5dGhpbmcgYXBwbGljYWJsZSBhYm91dCB0aGUgZ2VuZXJhdGVkIGNvZGUsIGV4Y2VwdAorZm9yIHRoZSBccy0xQUJJXHMwIGFuZCB0aGUgc2V0IG9mIGF2YWlsYWJsZSBpbnN0cnVjdGlvbnMuICAKK1doaWxlIHBpY2tpbmcgYSBzcGVjaWZpYyBcZkljcHUtdHlwZVxmUiBzY2hlZHVsZXMgdGhpbmdzIGFwcHJvcHJpYXRlbHkKK2ZvciB0aGF0IHBhcnRpY3VsYXIgY2hpcCwgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGdlbmVyYXRlIGFueSBjb2RlIHRoYXQKK2Nhbm5vdCBydW4gb24gdGhlIGRlZmF1bHQgbWFjaGluZSB0eXBlIHVubGVzcyB5b3UgdXNlIGEKK1wmXGZCXC1tYXJjaD1cZlJcZkljcHUtdHlwZVxmUiBvcHRpb24uCitGb3IgZXhhbXBsZSwgaWYgXHMtMUdDQ1xzMCBpcyBjb25maWd1cmVkIGZvciBpNjg2XC1wY1wtbGludXhcLWdudQordGhlbiBcZkJcLW10dW5lPXBlbnRpdW00XGZSIGdlbmVyYXRlcyBjb2RlIHRoYXQgaXMgdHVuZWQgZm9yIFBlbnRpdW0gNAorYnV0IHN0aWxsIHJ1bnMgb24gaTY4NiBtYWNoaW5lcy4KKy5TcAorVGhlIGNob2ljZXMgZm9yIFxmSWNwdS10eXBlXGZSIGFyZSB0aGUgc2FtZSBhcyBmb3IgXGZCXC1tYXJjaFxmUi4KK0luIGFkZGl0aW9uLCBcZkJcLW10dW5lXGZSIHN1cHBvcnRzIGFuIGV4dHJhIGNob2ljZSBmb3IgXGZJY3B1LXR5cGVcZlI6CisuUlMgNAorLklQICJcZkJnZW5lcmljXGZSIiA0CisuSVggSXRlbSAiZ2VuZXJpYyIKK1Byb2R1Y2UgY29kZSBvcHRpbWl6ZWQgZm9yIHRoZSBtb3N0IGNvbW1vbiBccy0xSUEzMi9BTUQ2NC9FTTY0VFxzMCBwcm9jZXNzb3JzLgorSWYgeW91IGtub3cgdGhlIFxzLTFDUFVcczAgb24gd2hpY2ggeW91ciBjb2RlIHdpbGwgcnVuLCB0aGVuIHlvdSBzaG91bGQgdXNlCit0aGUgY29ycmVzcG9uZGluZyBcZkJcLW10dW5lXGZSIG9yIFxmQlwtbWFyY2hcZlIgb3B0aW9uIGluc3RlYWQgb2YKK1wmXGZCXC1tdHVuZT1nZW5lcmljXGZSLiAgQnV0LCBpZiB5b3UgZG8gbm90IGtub3cgZXhhY3RseSB3aGF0IFxzLTFDUFVcczAgdXNlcnMKK29mIHlvdXIgYXBwbGljYXRpb24gd2lsbCBoYXZlLCB0aGVuIHlvdSBzaG91bGQgdXNlIHRoaXMgb3B0aW9uLgorLlNwCitBcyBuZXcgcHJvY2Vzc29ycyBhcmUgZGVwbG95ZWQgaW4gdGhlIG1hcmtldHBsYWNlLCB0aGUgYmVoYXZpb3Igb2YgdGhpcworb3B0aW9uIHdpbGwgY2hhbmdlLiAgVGhlcmVmb3JlLCBpZiB5b3UgdXBncmFkZSB0byBhIG5ld2VyIHZlcnNpb24gb2YKK1wmXHMtMUdDQ1xzMCwgY29kZSBnZW5lcmF0aW9uIGNvbnRyb2xsZWQgYnkgdGhpcyBvcHRpb24gd2lsbCBjaGFuZ2UgdG8gcmVmbGVjdAordGhlIHByb2Nlc3NvcnMKK3RoYXQgYXJlIG1vc3QgY29tbW9uIGF0IHRoZSB0aW1lIHRoYXQgdmVyc2lvbiBvZiBccy0xR0NDXHMwIGlzIHJlbGVhc2VkLgorLlNwCitUaGVyZSBpcyBubyBcZkJcLW1hcmNoPWdlbmVyaWNcZlIgb3B0aW9uIGJlY2F1c2UgXGZCXC1tYXJjaFxmUgoraW5kaWNhdGVzIHRoZSBpbnN0cnVjdGlvbiBzZXQgdGhlIGNvbXBpbGVyIGNhbiB1c2UsIGFuZCB0aGVyZSBpcyBubworZ2VuZXJpYyBpbnN0cnVjdGlvbiBzZXQgYXBwbGljYWJsZSB0byBhbGwgcHJvY2Vzc29ycy4gIEluIGNvbnRyYXN0LAorXCZcZkJcLW10dW5lXGZSIGluZGljYXRlcyB0aGUgcHJvY2Vzc29yIChvciwgaW4gdGhpcyBjYXNlLCBjb2xsZWN0aW9uIG9mCitwcm9jZXNzb3JzKSBmb3Igd2hpY2ggdGhlIGNvZGUgaXMgb3B0aW1pemVkLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbWNwdT1cZlJcZkljcHUtdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PWNwdS10eXBlIgorQSBkZXByZWNhdGVkIHN5bm9ueW0gZm9yIFxmQlwtbXR1bmVcZlIuCisuSVAgIlxmQlwtbWZwbWF0aD1cZlJcZkl1bml0XGZSIiA0CisuSVggSXRlbSAiLW1mcG1hdGg9dW5pdCIKK0dlbmVyYXRlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgZm9yIHNlbGVjdGVkIHVuaXQgXGZJdW5pdFxmUi4gIFRoZSBjaG9pY2VzCitmb3IgXGZJdW5pdFxmUiBhcmU6CisuUlMgNAorLklQICJcZkIzODdcZlIiIDQKKy5JWCBJdGVtICIzODciCitVc2UgdGhlIHN0YW5kYXJkIDM4NyBmbG9hdGluZy1wb2ludCBjb3Byb2Nlc3NvciBwcmVzZW50IG9uIHRoZSBtYWpvcml0eSBvZiBjaGlwcyBhbmQKK2VtdWxhdGVkIG90aGVyd2lzZS4gIENvZGUgY29tcGlsZWQgd2l0aCB0aGlzIG9wdGlvbiBydW5zIGFsbW9zdCBldmVyeXdoZXJlLgorVGhlIHRlbXBvcmFyeSByZXN1bHRzIGFyZSBjb21wdXRlZCBpbiA4MFwtYml0IHByZWNpc2lvbiBpbnN0ZWFkIG9mIHRoZSBwcmVjaXNpb24KK3NwZWNpZmllZCBieSB0aGUgdHlwZSwgcmVzdWx0aW5nIGluIHNsaWdodGx5IGRpZmZlcmVudCByZXN1bHRzIGNvbXBhcmVkIHRvIG1vc3QKK29mIG90aGVyIGNoaXBzLiAgU2VlIFxmQlwtZmZsb2F0XC1zdG9yZVxmUiBmb3IgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4KKy5TcAorVGhpcyBpcyB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yIGkzODYgY29tcGlsZXIuCisuSVAgIlxmQnNzZVxmUiIgNAorLklYIEl0ZW0gInNzZSIKK1VzZSBzY2FsYXIgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIHByZXNlbnQgaW4gdGhlIFxzLTFTU0VcczAgaW5zdHJ1Y3Rpb24gc2V0LgorVGhpcyBpbnN0cnVjdGlvbiBzZXQgaXMgc3VwcG9ydGVkIGJ5IFBlbnRpdW0gXHMtMUlJSVxzMCBhbmQgbmV3ZXIgY2hpcHMsCithbmQgaW4gdGhlIFxzLTFBTURcczAgbGluZQorYnkgQXRobG9uXC00LCBBdGhsb24gXHMtMVhQXHMwIGFuZCBBdGhsb24gXHMtMU1QXHMwIGNoaXBzLiAgVGhlIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgXHMtMVNTRVxzMAoraW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnRzIG9ubHkgc2luZ2xlLXByZWNpc2lvbiBhcml0aG1ldGljLCB0aHVzIHRoZSBkb3VibGUgYW5kCitleHRlbmRlZC1wcmVjaXNpb24gYXJpdGhtZXRpYyBhcmUgc3RpbGwgZG9uZSB1c2luZyAzODcuICBBIGxhdGVyIHZlcnNpb24sIHByZXNlbnQKK29ubHkgaW4gUGVudGl1bSA0IGFuZCBccy0xQU1EXHMwIHg4NlwtNjQgY2hpcHMsIHN1cHBvcnRzIGRvdWJsZS1wcmVjaXNpb24KK2FyaXRobWV0aWMgdG9vLgorLlNwCitGb3IgdGhlIGkzODYgY29tcGlsZXIsIHlvdSBtdXN0IHVzZSBcZkJcLW1hcmNoPVxmUlxmSWNwdS10eXBlXGZSLCBcZkJcLW1zc2VcZlIKK29yIFxmQlwtbXNzZTJcZlIgc3dpdGNoZXMgdG8gZW5hYmxlIFxzLTFTU0VcczAgZXh0ZW5zaW9ucyBhbmQgbWFrZSB0aGlzIG9wdGlvbgorZWZmZWN0aXZlLiAgRm9yIHRoZSB4ODZcLTY0IGNvbXBpbGVyLCB0aGVzZSBleHRlbnNpb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisuU3AKK1RoZSByZXN1bHRpbmcgY29kZSBzaG91bGQgYmUgY29uc2lkZXJhYmx5IGZhc3RlciBpbiB0aGUgbWFqb3JpdHkgb2YgY2FzZXMgYW5kIGF2b2lkCit0aGUgbnVtZXJpY2FsIGluc3RhYmlsaXR5IHByb2JsZW1zIG9mIDM4NyBjb2RlLCBidXQgbWF5IGJyZWFrIHNvbWUgZXhpc3RpbmcKK2NvZGUgdGhhdCBleHBlY3RzIHRlbXBvcmFyaWVzIHRvIGJlIDgwIGJpdHMuCisuU3AKK1RoaXMgaXMgdGhlIGRlZmF1bHQgY2hvaWNlIGZvciB0aGUgeDg2XC02NCBjb21waWxlci4KKy5JUCAiXGZCc3NlLDM4N1xmUiIgNAorLklYIEl0ZW0gInNzZSwzODciCisuUEQgMAorLklQICJcZkJzc2UrMzg3XGZSIiA0CisuSVggSXRlbSAic3NlKzM4NyIKKy5JUCAiXGZCYm90aFxmUiIgNAorLklYIEl0ZW0gImJvdGgiCisuUEQKK0F0dGVtcHQgdG8gdXRpbGl6ZSBib3RoIGluc3RydWN0aW9uIHNldHMgYXQgb25jZS4gIFRoaXMgZWZmZWN0aXZlbHkgZG91YmxlcyB0aGUKK2Ftb3VudCBvZiBhdmFpbGFibGUgcmVnaXN0ZXJzLCBhbmQgb24gY2hpcHMgd2l0aCBzZXBhcmF0ZSBleGVjdXRpb24gdW5pdHMgZm9yCiszODcgYW5kIFxzLTFTU0VcczAgdGhlIGV4ZWN1dGlvbiByZXNvdXJjZXMgdG9vLiAgVXNlIHRoaXMgb3B0aW9uIHdpdGggY2FyZSwgYXMgaXQgaXMKK3N0aWxsIGV4cGVyaW1lbnRhbCwgYmVjYXVzZSB0aGUgXHMtMUdDQ1xzMCByZWdpc3RlciBhbGxvY2F0b3IgZG9lcyBub3QgbW9kZWwgc2VwYXJhdGUKK2Z1bmN0aW9uYWwgdW5pdHMgd2VsbCwgcmVzdWx0aW5nIGluIHVuc3RhYmxlIHBlcmZvcm1hbmNlLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbWFzbT1cZlJcZklkaWFsZWN0XGZSIiA0CisuSVggSXRlbSAiLW1hc209ZGlhbGVjdCIKK091dHB1dCBhc3NlbWJseSBpbnN0cnVjdGlvbnMgdXNpbmcgc2VsZWN0ZWQgXGZJZGlhbGVjdFxmUi4gIFN1cHBvcnRlZAorY2hvaWNlcyBhcmUgXGZCaW50ZWxcZlIgb3IgXGZCYXR0XGZSICh0aGUgZGVmYXVsdCkuICBEYXJ3aW4gZG9lcworbm90IHN1cHBvcnQgXGZCaW50ZWxcZlIuCisuSVAgIlxmQlwtbWllZWVcLWZwXGZSIiA0CisuSVggSXRlbSAiLW1pZWVlLWZwIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWllZWVcLWZwXGZSIiA0CisuSVggSXRlbSAiLW1uby1pZWVlLWZwIgorLlBECitDb250cm9sIHdoZXRoZXIgb3Igbm90IHRoZSBjb21waWxlciB1c2VzIFxzLTFJRUVFXHMwIGZsb2F0aW5nLXBvaW50Citjb21wYXJpc29ucy4gIFRoZXNlIGNvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHJlc3VsdCBvZiBhCitjb21wYXJpc29uIGlzIHVub3JkZXJlZC4KKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCitHZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBsaWJyYXJ5IGNhbGxzIGZvciBmbG9hdGluZyBwb2ludC4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiB0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IHBhcnQgb2YgXHMtMUdDQ1xzMC4KK05vcm1hbGx5IHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBtYWNoaW5lJ3MgdXN1YWwgQyBjb21waWxlciBhcmUgdXNlZCwgYnV0Cit0aGlzIGNhbid0IGJlIGRvbmUgZGlyZWN0bHkgaW4gY3Jvc3MtY29tcGlsYXRpb24uICBZb3UgbXVzdCBtYWtlIHlvdXIKK293biBhcnJhbmdlbWVudHMgdG8gcHJvdmlkZSBzdWl0YWJsZSBsaWJyYXJ5IGZ1bmN0aW9ucyBmb3IKK2Nyb3NzLWNvbXBpbGF0aW9uLgorLlNwCitPbiBtYWNoaW5lcyB3aGVyZSBhIGZ1bmN0aW9uIHJldHVybnMgZmxvYXRpbmctcG9pbnQgcmVzdWx0cyBpbiB0aGUgODAzODcKK3JlZ2lzdGVyIHN0YWNrLCBzb21lIGZsb2F0aW5nLXBvaW50IG9wY29kZXMgbWF5IGJlIGVtaXR0ZWQgZXZlbiBpZgorXCZcZkJcLW1zb2Z0XC1mbG9hdFxmUiBpcyB1c2VkLgorLklQICJcZkJcLW1ub1wtZnBcLXJldFwtaW5cLTM4N1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnAtcmV0LWluLTM4NyIKK0RvIG5vdCB1c2UgdGhlIFxzLTFGUFVcczAgcmVnaXN0ZXJzIGZvciByZXR1cm4gdmFsdWVzIG9mIGZ1bmN0aW9ucy4KKy5TcAorVGhlIHVzdWFsIGNhbGxpbmcgY29udmVudGlvbiBoYXMgZnVuY3Rpb25zIHJldHVybiB2YWx1ZXMgb2YgdHlwZXMKK1wmXGYoQ1dcKihDYGZsb2F0XCooQydcZlIgYW5kIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiBpbiBhbiBccy0xRlBVXHMwIHJlZ2lzdGVyLCBldmVuIGlmIHRoZXJlCitpcyBubyBccy0xRlBVXHMwLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzaG91bGQgZW11bGF0ZQorYW4gXHMtMUZQVVxzMC4KKy5TcAorVGhlIG9wdGlvbiBcZkJcLW1ub1wtZnBcLXJldFwtaW5cLTM4N1xmUiBjYXVzZXMgc3VjaCB2YWx1ZXMgdG8gYmUgcmV0dXJuZWQKK2luIG9yZGluYXJ5IFxzLTFDUFVcczAgcmVnaXN0ZXJzIGluc3RlYWQuCisuSVAgIlxmQlwtbW5vXC1mYW5jeVwtbWF0aFwtMzg3XGZSIiA0CisuSVggSXRlbSAiLW1uby1mYW5jeS1tYXRoLTM4NyIKK1NvbWUgMzg3IGVtdWxhdG9ycyBkbyBub3Qgc3VwcG9ydCB0aGUgXGYoQ1dcKihDYHNpblwqKEMnXGZSLCBcZihDV1wqKENgY29zXCooQydcZlIgYW5kCitcJlxmKENXXCooQ2BzcXJ0XCooQydcZlIgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgMzg3LiAgU3BlY2lmeSB0aGlzIG9wdGlvbiB0byBhdm9pZAorZ2VuZXJhdGluZyB0aG9zZSBpbnN0cnVjdGlvbnMuICBUaGlzIG9wdGlvbiBpcyB0aGUgZGVmYXVsdCBvbiBGcmVlQlNELAorT3BlbkJTRCBhbmQgTmV0QlNELiAgVGhpcyBvcHRpb24gaXMgb3ZlcnJpZGRlbiB3aGVuIFxmQlwtbWFyY2hcZlIKK2luZGljYXRlcyB0aGF0IHRoZSB0YXJnZXQgXHMtMUNQVVxzMCBhbHdheXMgaGFzIGFuIFxzLTFGUFVcczAgYW5kIHNvIHRoZQoraW5zdHJ1Y3Rpb24gZG9lcyBub3QgbmVlZCBlbXVsYXRpb24uICBUaGVzZQoraW5zdHJ1Y3Rpb25zIGFyZSBub3QgZ2VuZXJhdGVkIHVubGVzcyB5b3UgYWxzbyB1c2UgdGhlCitcJlxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiBzd2l0Y2guCisuSVAgIlxmQlwtbWFsaWduXC1kb3VibGVcZlIiIDQKKy5JWCBJdGVtICItbWFsaWduLWRvdWJsZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1hbGlnblwtZG91YmxlXGZSIiA0CisuSVggSXRlbSAiLW1uby1hbGlnbi1kb3VibGUiCisuUEQKK0NvbnRyb2wgd2hldGhlciBccy0xR0NDXHMwIGFsaWducyBcZihDV1wqKENgZG91YmxlXCooQydcZlIsIFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSLCBhbmQKK1wmXGYoQ1dcKihDYGxvbmcgbG9uZ1wqKEMnXGZSIHZhcmlhYmxlcyBvbiBhIHR3by13b3JkIGJvdW5kYXJ5IG9yIGEgb25lLXdvcmQKK2JvdW5kYXJ5LiAgQWxpZ25pbmcgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSIHZhcmlhYmxlcyBvbiBhIHR3by13b3JkIGJvdW5kYXJ5Citwcm9kdWNlcyBjb2RlIHRoYXQgcnVucyBzb21ld2hhdCBmYXN0ZXIgb24gYSBQZW50aXVtIGF0IHRoZQorZXhwZW5zZSBvZiBtb3JlIG1lbW9yeS4KKy5TcAorT24geDg2XC02NCwgXGZCXC1tYWxpZ25cLWRvdWJsZVxmUiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgaWYgeW91IHVzZSB0aGUgXGZCXC1tYWxpZ25cLWRvdWJsZVxmUiBzd2l0Y2gsCitzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdGhlIGFib3ZlIHR5cGVzIGFyZSBhbGlnbmVkIGRpZmZlcmVudGx5IHRoYW4KK3RoZSBwdWJsaXNoZWQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZSBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIDM4NgorYW5kIGFyZSBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBzdHJ1Y3R1cmVzIGluIGNvZGUgY29tcGlsZWQKK3dpdGhvdXQgdGhhdCBzd2l0Y2guCisuSVAgIlxmQlwtbTk2Yml0XC1sb25nXC1kb3VibGVcZlIiIDQKKy5JWCBJdGVtICItbTk2Yml0LWxvbmctZG91YmxlIgorLlBEIDAKKy5JUCAiXGZCXC1tMTI4Yml0XC1sb25nXC1kb3VibGVcZlIiIDQKKy5JWCBJdGVtICItbTEyOGJpdC1sb25nLWRvdWJsZSIKKy5QRAorVGhlc2Ugc3dpdGNoZXMgY29udHJvbCB0aGUgc2l6ZSBvZiBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUiB0eXBlLiAgVGhlIGkzODYKK2FwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2Ugc3BlY2lmaWVzIHRoZSBzaXplIHRvIGJlIDk2IGJpdHMsCitzbyBcZkJcLW05NmJpdFwtbG9uZ1wtZG91YmxlXGZSIGlzIHRoZSBkZWZhdWx0IGluIDMyXC1iaXQgbW9kZS4KKy5TcAorTW9kZXJuIGFyY2hpdGVjdHVyZXMgKFBlbnRpdW0gYW5kIG5ld2VyKSBwcmVmZXIgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIKK3RvIGJlIGFsaWduZWQgdG8gYW4gOFwtIG9yIDE2XC1ieXRlIGJvdW5kYXJ5LiAgSW4gYXJyYXlzIG9yIHN0cnVjdHVyZXMKK2NvbmZvcm1pbmcgdG8gdGhlIFxzLTFBQklcczAsIHRoaXMgaXMgbm90IHBvc3NpYmxlLiAgU28gc3BlY2lmeWluZworXCZcZkJcLW0xMjhiaXRcLWxvbmdcLWRvdWJsZVxmUiBhbGlnbnMgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIKK3RvIGEgMTZcLWJ5dGUgYm91bmRhcnkgYnkgcGFkZGluZyB0aGUgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgd2l0aCBhbiBhZGRpdGlvbmFsCiszMlwtYml0IHplcm8uCisuU3AKK0luIHRoZSB4ODZcLTY0IGNvbXBpbGVyLCBcZkJcLW0xMjhiaXRcLWxvbmdcLWRvdWJsZVxmUiBpcyB0aGUgZGVmYXVsdCBjaG9pY2UgYXMKK2l0cyBccy0xQUJJXHMwIHNwZWNpZmllcyB0aGF0IFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSIGlzIGFsaWduZWQgb24gMTZcLWJ5dGUgYm91bmRhcnkuCisuU3AKK05vdGljZSB0aGF0IG5laXRoZXIgb2YgdGhlc2Ugb3B0aW9ucyBlbmFibGUgYW55IGV4dHJhIHByZWNpc2lvbiBvdmVyIHRoZSB4ODcKK3N0YW5kYXJkIG9mIDgwIGJpdHMgZm9yIGEgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgaWYgeW91IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB5b3VyIHRhcmdldCBccy0xQUJJXHMwLCB0aGlzCitjaGFuZ2VzIHRoZSBzaXplIG9mIAorc3RydWN0dXJlcyBhbmQgYXJyYXlzIGNvbnRhaW5pbmcgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgdmFyaWFibGVzLAorYXMgd2VsbCBhcyBtb2RpZnlpbmcgdGhlIGZ1bmN0aW9uIGNhbGxpbmcgY29udmVudGlvbiBmb3IgZnVuY3Rpb25zIHRha2luZworXCZcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUi4gIEhlbmNlIHRoZXkgYXJlIG5vdCBiaW5hcnktY29tcGF0aWJsZQord2l0aCBjb2RlIGNvbXBpbGVkIHdpdGhvdXQgdGhhdCBzd2l0Y2guCisuSVAgIlxmQlwtbWxvbmdcLWRvdWJsZVwtNjRcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctZG91YmxlLTY0IgorLlBEIDAKKy5JUCAiXGZCXC1tbG9uZ1wtZG91YmxlXC04MFxmUiIgNAorLklYIEl0ZW0gIi1tbG9uZy1kb3VibGUtODAiCisuUEQKK1RoZXNlIHN3aXRjaGVzIGNvbnRyb2wgdGhlIHNpemUgb2YgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgdHlwZS4gQSBzaXplCitvZiA2NCBiaXRzIG1ha2VzIHRoZSBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUiB0eXBlIGVxdWl2YWxlbnQgdG8gdGhlIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUgordHlwZS4gVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgQmlvbmljIEMgbGlicmFyeS4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiBpZiB5b3Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHlvdXIgdGFyZ2V0IFxzLTFBQklcczAsIHRoaXMKK2NoYW5nZXMgdGhlIHNpemUgb2YKK3N0cnVjdHVyZXMgYW5kIGFycmF5cyBjb250YWluaW5nIFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSIHZhcmlhYmxlcywKK2FzIHdlbGwgYXMgbW9kaWZ5aW5nIHRoZSBmdW5jdGlvbiBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGZ1bmN0aW9ucyB0YWtpbmcKK1wmXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIuICBIZW5jZSB0aGV5IGFyZSBub3QgYmluYXJ5LWNvbXBhdGlibGUKK3dpdGggY29kZSBjb21waWxlZCB3aXRob3V0IHRoYXQgc3dpdGNoLgorLklQICJcZkJcLW1sYXJnZVwtZGF0YVwtdGhyZXNob2xkPVxmUlxmSXRocmVzaG9sZFxmUiIgNAorLklYIEl0ZW0gIi1tbGFyZ2UtZGF0YS10aHJlc2hvbGQ9dGhyZXNob2xkIgorV2hlbiBcZkJcLW1jbW9kZWw9bWVkaXVtXGZSIGlzIHNwZWNpZmllZCwgZGF0YSBvYmplY3RzIGxhcmdlciB0aGFuCitcJlxmSXRocmVzaG9sZFxmUiBhcmUgcGxhY2VkIGluIHRoZSBsYXJnZSBkYXRhIHNlY3Rpb24uICBUaGlzIHZhbHVlIG11c3QgYmUgdGhlCitzYW1lIGFjcm9zcyBhbGwgb2JqZWN0cyBsaW5rZWQgaW50byB0aGUgYmluYXJ5LCBhbmQgZGVmYXVsdHMgdG8gNjU1MzUuCisuSVAgIlxmQlwtbXJ0ZFxmUiIgNAorLklYIEl0ZW0gIi1tcnRkIgorVXNlIGEgZGlmZmVyZW50IGZ1bmN0aW9uLWNhbGxpbmcgY29udmVudGlvbiwgaW4gd2hpY2ggZnVuY3Rpb25zIHRoYXQKK3Rha2UgYSBmaXhlZCBudW1iZXIgb2YgYXJndW1lbnRzIHJldHVybiB3aXRoIHRoZSBcZihDV1wqKENgcmV0IFxmKENJbnVtXGYoQ1dcKihDJ1xmUgoraW5zdHJ1Y3Rpb24sIHdoaWNoIHBvcHMgdGhlaXIgYXJndW1lbnRzIHdoaWxlIHJldHVybmluZy4gIFRoaXMgc2F2ZXMgb25lCitpbnN0cnVjdGlvbiBpbiB0aGUgY2FsbGVyIHNpbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gcG9wIHRoZSBhcmd1bWVudHMKK3RoZXJlLgorLlNwCitZb3UgY2FuIHNwZWNpZnkgdGhhdCBhbiBpbmRpdmlkdWFsIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoaXMgY2FsbGluZworc2VxdWVuY2Ugd2l0aCB0aGUgZnVuY3Rpb24gYXR0cmlidXRlIFxmQnN0ZGNhbGxcZlIuICBZb3UgY2FuIGFsc28KK292ZXJyaWRlIHRoZSBcZkJcLW1ydGRcZlIgb3B0aW9uIGJ5IHVzaW5nIHRoZSBmdW5jdGlvbiBhdHRyaWJ1dGUKK1wmXGZCY2RlY2xcZlIuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgdGhpcyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIG9uZQorbm9ybWFsbHkgdXNlZCBvbiBVbml4LCBzbyB5b3UgY2Fubm90IHVzZSBpdCBpZiB5b3UgbmVlZCB0byBjYWxsCitsaWJyYXJpZXMgY29tcGlsZWQgd2l0aCB0aGUgVW5peCBjb21waWxlci4KKy5TcAorQWxzbywgeW91IG11c3QgcHJvdmlkZSBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhbGwgZnVuY3Rpb25zIHRoYXQKK3Rha2UgdmFyaWFibGUgbnVtYmVycyBvZiBhcmd1bWVudHMgKGluY2x1ZGluZyBcZihDV1wqKENgcHJpbnRmXCooQydcZlIpOworb3RoZXJ3aXNlIGluY29ycmVjdCBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgY2FsbHMgdG8gdGhvc2UKK2Z1bmN0aW9ucy4KKy5TcAorSW4gYWRkaXRpb24sIHNlcmlvdXNseSBpbmNvcnJlY3QgY29kZSByZXN1bHRzIGlmIHlvdSBjYWxsIGEKK2Z1bmN0aW9uIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzLiAgKE5vcm1hbGx5LCBleHRyYSBhcmd1bWVudHMgYXJlCitoYXJtbGVzc2x5IGlnbm9yZWQuKQorLklQICJcZkJcLW1yZWdwYXJtPVxmUlxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1tcmVncGFybT1udW0iCitDb250cm9sIGhvdyBtYW55IHJlZ2lzdGVycyBhcmUgdXNlZCB0byBwYXNzIGludGVnZXIgYXJndW1lbnRzLiAgQnkKK2RlZmF1bHQsIG5vIHJlZ2lzdGVycyBhcmUgdXNlZCB0byBwYXNzIGFyZ3VtZW50cywgYW5kIGF0IG1vc3QgMworcmVnaXN0ZXJzIGNhbiBiZSB1c2VkLiAgWW91IGNhbiBjb250cm9sIHRoaXMgYmVoYXZpb3IgZm9yIGEgc3BlY2lmaWMKK2Z1bmN0aW9uIGJ5IHVzaW5nIHRoZSBmdW5jdGlvbiBhdHRyaWJ1dGUgXGZCcmVncGFybVxmUi4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiBpZiB5b3UgdXNlIHRoaXMgc3dpdGNoLCBhbmQKK1wmXGZJbnVtXGZSIGlzIG5vbnplcm8sIHRoZW4geW91IG11c3QgYnVpbGQgYWxsIG1vZHVsZXMgd2l0aCB0aGUgc2FtZQordmFsdWUsIGluY2x1ZGluZyBhbnkgbGlicmFyaWVzLiAgVGhpcyBpbmNsdWRlcyB0aGUgc3lzdGVtIGxpYnJhcmllcyBhbmQKK3N0YXJ0dXAgbW9kdWxlcy4KKy5JUCAiXGZCXC1tc3NlcmVncGFybVxmUiIgNAorLklYIEl0ZW0gIi1tc3NlcmVncGFybSIKK1VzZSBccy0xU1NFXHMwIHJlZ2lzdGVyIHBhc3NpbmcgY29udmVudGlvbnMgZm9yIGZsb2F0IGFuZCBkb3VibGUgYXJndW1lbnRzCithbmQgcmV0dXJuIHZhbHVlcy4gIFlvdSBjYW4gY29udHJvbCB0aGlzIGJlaGF2aW9yIGZvciBhIHNwZWNpZmljCitmdW5jdGlvbiBieSB1c2luZyB0aGUgZnVuY3Rpb24gYXR0cmlidXRlIFxmQnNzZXJlZ3Bhcm1cZlIuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgaWYgeW91IHVzZSB0aGlzIHN3aXRjaCB0aGVuIHlvdSBtdXN0IGJ1aWxkIGFsbAorbW9kdWxlcyB3aXRoIHRoZSBzYW1lIHZhbHVlLCBpbmNsdWRpbmcgYW55IGxpYnJhcmllcy4gIFRoaXMgaW5jbHVkZXMKK3RoZSBzeXN0ZW0gbGlicmFyaWVzIGFuZCBzdGFydHVwIG1vZHVsZXMuCisuSVAgIlxmQlwtbXZlY3Q4XC1yZXRcLWluXC1tZW1cZlIiIDQKKy5JWCBJdGVtICItbXZlY3Q4LXJldC1pbi1tZW0iCitSZXR1cm4gOFwtYnl0ZSB2ZWN0b3JzIGluIG1lbW9yeSBpbnN0ZWFkIG9mIFxzLTFNTVhcczAgcmVnaXN0ZXJzLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQgb24gU29sYXJpc0B0aWV7fTggYW5kIDkgYW5kIFZ4V29ya3MgdG8gbWF0Y2ggdGhlIFxzLTFBQklcczAgb2YgdGhlIFN1bgorU3R1ZGlvIGNvbXBpbGVycyB1bnRpbCB2ZXJzaW9uIDEyLiAgTGF0ZXIgY29tcGlsZXIgdmVyc2lvbnMgKHN0YXJ0aW5nCit3aXRoIFN0dWRpbyAxMiBVcGRhdGVAdGlle30xKSBmb2xsb3cgdGhlIFxzLTFBQklcczAgdXNlZCBieSBvdGhlciB4ODYgdGFyZ2V0cywgd2hpY2gKK2lzIHRoZSBkZWZhdWx0IG9uIFNvbGFyaXNAdGlle30xMCBhbmQgbGF0ZXIuICBcZklPbmx5XGZSIHVzZSB0aGlzIG9wdGlvbiBpZgoreW91IG5lZWQgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyBjb2RlIHByb2R1Y2VkIGJ5IHRob3NlCitwcmV2aW91cyBjb21waWxlciB2ZXJzaW9ucyBvciBvbGRlciB2ZXJzaW9ucyBvZiBccy0xR0NDXHMwLgorLklQICJcZkJcLW1wYzMyXGZSIiA0CisuSVggSXRlbSAiLW1wYzMyIgorLlBEIDAKKy5JUCAiXGZCXC1tcGM2NFxmUiIgNAorLklYIEl0ZW0gIi1tcGM2NCIKKy5JUCAiXGZCXC1tcGM4MFxmUiIgNAorLklYIEl0ZW0gIi1tcGM4MCIKKy5QRAorU2V0IDgwMzg3IGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbiB0byAzMiwgNjQgb3IgODAgYml0cy4gIFdoZW4gXGZCXC1tcGMzMlxmUgoraXMgc3BlY2lmaWVkLCB0aGUgc2lnbmlmaWNhbmRzIG9mIHJlc3VsdHMgb2YgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhcmUKK3JvdW5kZWQgdG8gMjQgYml0cyAoc2luZ2xlIHByZWNpc2lvbik7IFxmQlwtbXBjNjRcZlIgcm91bmRzIHRoZQorc2lnbmlmaWNhbmRzIG9mIHJlc3VsdHMgb2YgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyB0byA1MyBiaXRzIChkb3VibGUKK3ByZWNpc2lvbikgYW5kIFxmQlwtbXBjODBcZlIgcm91bmRzIHRoZSBzaWduaWZpY2FuZHMgb2YgcmVzdWx0cyBvZgorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyB0byA2NCBiaXRzIChleHRlbmRlZCBkb3VibGUgcHJlY2lzaW9uKSwgd2hpY2ggaXMKK3RoZSBkZWZhdWx0LiAgV2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGluIGhpZ2hlcgorcHJlY2lzaW9ucyBhcmUgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbW1lciB3aXRob3V0IHNldHRpbmcgdGhlIFxzLTFGUFVcczAKK2NvbnRyb2wgd29yZCBleHBsaWNpdGx5LgorLlNwCitTZXR0aW5nIHRoZSByb3VuZGluZyBvZiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIHRvIGxlc3MgdGhhbiB0aGUgZGVmYXVsdAorODAgYml0cyBjYW4gc3BlZWQgc29tZSBwcm9ncmFtcyBieSAyJSBvciBtb3JlLiAgTm90ZSB0aGF0IHNvbWUgbWF0aGVtYXRpY2FsCitsaWJyYXJpZXMgYXNzdW1lIHRoYXQgZXh0ZW5kZWQtcHJlY2lzaW9uICg4MFwtYml0KSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zCithcmUgZW5hYmxlZCBieSBkZWZhdWx0OyByb3V0aW5lcyBpbiBzdWNoIGxpYnJhcmllcyBjb3VsZCBzdWZmZXIgc2lnbmlmaWNhbnQKK2xvc3Mgb2YgYWNjdXJhY3ksIHR5cGljYWxseSB0aHJvdWdoIHNvLWNhbGxlZCBcKihMImNhdGFzdHJvcGhpYyBjYW5jZWxsYXRpb25cKihSIiwKK3doZW4gdGhpcyBvcHRpb24gaXMgdXNlZCB0byBzZXQgdGhlIHByZWNpc2lvbiB0byBsZXNzIHRoYW4gZXh0ZW5kZWQgcHJlY2lzaW9uLgorLklQICJcZkJcLW1zdGFja3JlYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbXN0YWNrcmVhbGlnbiIKK1JlYWxpZ24gdGhlIHN0YWNrIGF0IGVudHJ5LiAgT24gdGhlIEludGVsIHg4NiwgdGhlIFxmQlwtbXN0YWNrcmVhbGlnblxmUgorb3B0aW9uIGdlbmVyYXRlcyBhbiBhbHRlcm5hdGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIHRoYXQgcmVhbGlnbnMgdGhlCitydW4tdGltZSBzdGFjayBpZiBuZWNlc3NhcnkuICBUaGlzIHN1cHBvcnRzIG1peGluZyBsZWdhY3kgY29kZXMgdGhhdCBrZWVwCis0XC1ieXRlIHN0YWNrIGFsaWdubWVudCB3aXRoIG1vZGVybiBjb2RlcyB0aGF0IGtlZXAgMTZcLWJ5dGUgc3RhY2sgYWxpZ25tZW50IGZvcgorXCZccy0xU1NFXHMwIGNvbXBhdGliaWxpdHkuICBTZWUgYWxzbyB0aGUgYXR0cmlidXRlIFxmKENXXCooQ2Bmb3JjZV9hbGlnbl9hcmdfcG9pbnRlclwqKEMnXGZSLAorYXBwbGljYWJsZSB0byBpbmRpdmlkdWFsIGZ1bmN0aW9ucy4KKy5JUCAiXGZCXC1tcHJlZmVycmVkXC1zdGFja1wtYm91bmRhcnk9XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9bnVtIgorQXR0ZW1wdCB0byBrZWVwIHRoZSBzdGFjayBib3VuZGFyeSBhbGlnbmVkIHRvIGEgMiByYWlzZWQgdG8gXGZJbnVtXGZSCitieXRlIGJvdW5kYXJ5LiAgSWYgXGZCXC1tcHJlZmVycmVkXC1zdGFja1wtYm91bmRhcnlcZlIgaXMgbm90IHNwZWNpZmllZCwKK3RoZSBkZWZhdWx0IGlzIDQgKDE2IGJ5dGVzIG9yIDEyOCBiaXRzKS4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiBXaGVuIGdlbmVyYXRpbmcgY29kZSBmb3IgdGhlIHg4NlwtNjQgYXJjaGl0ZWN0dXJlIHdpdGgKK1wmXHMtMVNTRVxzMCBleHRlbnNpb25zIGRpc2FibGVkLCBcZkJcLW1wcmVmZXJyZWRcLXN0YWNrXC1ib3VuZGFyeT0zXGZSIGNhbiBiZQordXNlZCB0byBrZWVwIHRoZSBzdGFjayBib3VuZGFyeSBhbGlnbmVkIHRvIDggYnl0ZSBib3VuZGFyeS4gIFNpbmNlCit4ODZcLTY0IFxzLTFBQklcczAgcmVxdWlyZSAxNiBieXRlIHN0YWNrIGFsaWdubWVudCwgdGhpcyBpcyBccy0xQUJJXHMwIGluY29tcGF0aWJsZSBhbmQKK2ludGVuZGVkIHRvIGJlIHVzZWQgaW4gY29udHJvbGxlZCBlbnZpcm9ubWVudCB3aGVyZSBzdGFjayBzcGFjZSBpcworaW1wb3J0YW50IGxpbWl0YXRpb24uICBUaGlzIG9wdGlvbiB3aWxsIGxlYWQgdG8gd3JvbmcgY29kZSB3aGVuIGZ1bmN0aW9ucworY29tcGlsZWQgd2l0aCAxNiBieXRlIHN0YWNrIGFsaWdubWVudCAoc3VjaCBhcyBmdW5jdGlvbnMgZnJvbSBhIHN0YW5kYXJkCitsaWJyYXJ5KSBhcmUgY2FsbGVkIHdpdGggbWlzYWxpZ25lZCBzdGFjay4gIEluIHRoaXMgY2FzZSwgXHMtMVNTRVxzMAoraW5zdHJ1Y3Rpb25zIG1heSBsZWFkIHRvIG1pc2FsaWduZWQgbWVtb3J5IGFjY2VzcyB0cmFwcy4gIEluIGFkZGl0aW9uLAordmFyaWFibGUgYXJndW1lbnRzIHdpbGwgYmUgaGFuZGxlZCBpbmNvcnJlY3RseSBmb3IgMTYgYnl0ZSBhbGlnbmVkCitvYmplY3RzIChpbmNsdWRpbmcgeDg3IGxvbmcgZG91YmxlIGFuZCBfXHxfaW50MTI4KSwgbGVhZGluZyB0byB3cm9uZworcmVzdWx0cy4gIFlvdSBtdXN0IGJ1aWxkIGFsbCBtb2R1bGVzIHdpdGgKK1wmXGZCXC1tcHJlZmVycmVkXC1zdGFja1wtYm91bmRhcnk9M1xmUiwgaW5jbHVkaW5nIGFueSBsaWJyYXJpZXMuICBUaGlzCitpbmNsdWRlcyB0aGUgc3lzdGVtIGxpYnJhcmllcyBhbmQgc3RhcnR1cCBtb2R1bGVzLgorLklQICJcZkJcLW1pbmNvbWluZ1wtc3RhY2tcLWJvdW5kYXJ5PVxmUlxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1taW5jb21pbmctc3RhY2stYm91bmRhcnk9bnVtIgorQXNzdW1lIHRoZSBpbmNvbWluZyBzdGFjayBpcyBhbGlnbmVkIHRvIGEgMiByYWlzZWQgdG8gXGZJbnVtXGZSIGJ5dGUKK2JvdW5kYXJ5LiAgSWYgXGZCXC1taW5jb21pbmdcLXN0YWNrXC1ib3VuZGFyeVxmUiBpcyBub3Qgc3BlY2lmaWVkLAordGhlIG9uZSBzcGVjaWZpZWQgYnkgXGZCXC1tcHJlZmVycmVkXC1zdGFja1wtYm91bmRhcnlcZlIgaXMgdXNlZC4KKy5TcAorT24gUGVudGl1bSBhbmQgUGVudGl1bSBQcm8sIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgdmFsdWVzCitzaG91bGQgYmUgYWxpZ25lZCB0byBhbiA4XC1ieXRlIGJvdW5kYXJ5IChzZWUgXGZCXC1tYWxpZ25cLWRvdWJsZVxmUikgb3IKK3N1ZmZlciBzaWduaWZpY2FudCBydW4gdGltZSBwZXJmb3JtYW5jZSBwZW5hbHRpZXMuICBPbiBQZW50aXVtIFxzLTFJSUlcczAsIHRoZQorU3RyZWFtaW5nIFxzLTFTSU1EXHMwIEV4dGVuc2lvbiAoXHMtMVNTRVxzMCkgZGF0YSB0eXBlIFxmKENXXCooQ2BfXHxfbTEyOFwqKEMnXGZSIG1heSBub3Qgd29yaworcHJvcGVybHkgaWYgaXQgaXMgbm90IDE2XC1ieXRlIGFsaWduZWQuCisuU3AKK1RvIGVuc3VyZSBwcm9wZXIgYWxpZ25tZW50IG9mIHRoaXMgdmFsdWVzIG9uIHRoZSBzdGFjaywgdGhlIHN0YWNrIGJvdW5kYXJ5CittdXN0IGJlIGFzIGFsaWduZWQgYXMgdGhhdCByZXF1aXJlZCBieSBhbnkgdmFsdWUgc3RvcmVkIG9uIHRoZSBzdGFjay4KK0Z1cnRoZXIsIGV2ZXJ5IGZ1bmN0aW9uIG11c3QgYmUgZ2VuZXJhdGVkIHN1Y2ggdGhhdCBpdCBrZWVwcyB0aGUgc3RhY2sKK2FsaWduZWQuICBUaHVzIGNhbGxpbmcgYSBmdW5jdGlvbiBjb21waWxlZCB3aXRoIGEgaGlnaGVyIHByZWZlcnJlZAorc3RhY2sgYm91bmRhcnkgZnJvbSBhIGZ1bmN0aW9uIGNvbXBpbGVkIHdpdGggYSBsb3dlciBwcmVmZXJyZWQgc3RhY2sKK2JvdW5kYXJ5IG1vc3QgbGlrZWx5IG1pc2FsaWducyB0aGUgc3RhY2suICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0CitsaWJyYXJpZXMgdGhhdCB1c2UgY2FsbGJhY2tzIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgc2V0dGluZy4KKy5TcAorVGhpcyBleHRyYSBhbGlnbm1lbnQgZG9lcyBjb25zdW1lIGV4dHJhIHN0YWNrIHNwYWNlLCBhbmQgZ2VuZXJhbGx5CitpbmNyZWFzZXMgY29kZSBzaXplLiAgQ29kZSB0aGF0IGlzIHNlbnNpdGl2ZSB0byBzdGFjayBzcGFjZSB1c2FnZSwgc3VjaAorYXMgZW1iZWRkZWQgc3lzdGVtcyBhbmQgb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWxzLCBtYXkgd2FudCB0byByZWR1Y2UgdGhlCitwcmVmZXJyZWQgYWxpZ25tZW50IHRvIFxmQlwtbXByZWZlcnJlZFwtc3RhY2tcLWJvdW5kYXJ5PTJcZlIuCisuSVAgIlxmQlwtbW1teFxmUiIgNAorLklYIEl0ZW0gIi1tbW14IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW1teFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbW14IgorLklQICJcZkJcLW1zc2VcZlIiIDQKKy5JWCBJdGVtICItbXNzZSIKKy5JUCAiXGZCXC1tbm9cLXNzZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3NlIgorLklQICJcZkJcLW1zc2UyXGZSIiA0CisuSVggSXRlbSAiLW1zc2UyIgorLklQICJcZkJcLW1ub1wtc3NlMlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3NlMiIKKy5JUCAiXGZCXC1tc3NlM1xmUiIgNAorLklYIEl0ZW0gIi1tc3NlMyIKKy5JUCAiXGZCXC1tbm9cLXNzZTNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNzZTMiCisuSVAgIlxmQlwtbXNzc2UzXGZSIiA0CisuSVggSXRlbSAiLW1zc3NlMyIKKy5JUCAiXGZCXC1tbm9cLXNzc2UzXGZSIiA0CisuSVggSXRlbSAiLW1uby1zc3NlMyIKKy5JUCAiXGZCXC1tc3NlNC4xXGZSIiA0CisuSVggSXRlbSAiLW1zc2U0LjEiCisuSVAgIlxmQlwtbW5vXC1zc2U0LjFcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNzZTQuMSIKKy5JUCAiXGZCXC1tc3NlNC4yXGZSIiA0CisuSVggSXRlbSAiLW1zc2U0LjIiCisuSVAgIlxmQlwtbW5vXC1zc2U0LjJcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNzZTQuMiIKKy5JUCAiXGZCXC1tc3NlNFxmUiIgNAorLklYIEl0ZW0gIi1tc3NlNCIKKy5JUCAiXGZCXC1tbm9cLXNzZTRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNzZTQiCisuSVAgIlxmQlwtbWF2eFxmUiIgNAorLklYIEl0ZW0gIi1tYXZ4IgorLklQICJcZkJcLW1ub1wtYXZ4XGZSIiA0CisuSVggSXRlbSAiLW1uby1hdngiCisuSVAgIlxmQlwtbWF2eDJcZlIiIDQKKy5JWCBJdGVtICItbWF2eDIiCisuSVAgIlxmQlwtbW5vXC1hdngyXGZSIiA0CisuSVggSXRlbSAiLW1uby1hdngyIgorLklQICJcZkJcLW1hZXNcZlIiIDQKKy5JWCBJdGVtICItbWFlcyIKKy5JUCAiXGZCXC1tbm9cLWFlc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tYWVzIgorLklQICJcZkJcLW1wY2xtdWxcZlIiIDQKKy5JWCBJdGVtICItbXBjbG11bCIKKy5JUCAiXGZCXC1tbm9cLXBjbG11bFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcGNsbXVsIgorLklQICJcZkJcLW1mc2dzYmFzZVxmUiIgNAorLklYIEl0ZW0gIi1tZnNnc2Jhc2UiCisuSVAgIlxmQlwtbW5vXC1mc2dzYmFzZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnNnc2Jhc2UiCisuSVAgIlxmQlwtbXJkcm5kXGZSIiA0CisuSVggSXRlbSAiLW1yZHJuZCIKKy5JUCAiXGZCXC1tbm9cLXJkcm5kXGZSIiA0CisuSVggSXRlbSAiLW1uby1yZHJuZCIKKy5JUCAiXGZCXC1tZjE2Y1xmUiIgNAorLklYIEl0ZW0gIi1tZjE2YyIKKy5JUCAiXGZCXC1tbm9cLWYxNmNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWYxNmMiCisuSVAgIlxmQlwtbWZtYVxmUiIgNAorLklYIEl0ZW0gIi1tZm1hIgorLklQICJcZkJcLW1ub1wtZm1hXGZSIiA0CisuSVggSXRlbSAiLW1uby1mbWEiCisuSVAgIlxmQlwtbXNzZTRhXGZSIiA0CisuSVggSXRlbSAiLW1zc2U0YSIKKy5JUCAiXGZCXC1tbm9cLXNzZTRhXGZSIiA0CisuSVggSXRlbSAiLW1uby1zc2U0YSIKKy5JUCAiXGZCXC1tZm1hNFxmUiIgNAorLklYIEl0ZW0gIi1tZm1hNCIKKy5JUCAiXGZCXC1tbm9cLWZtYTRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZtYTQiCisuSVAgIlxmQlwtbXhvcFxmUiIgNAorLklYIEl0ZW0gIi1teG9wIgorLklQICJcZkJcLW1ub1wteG9wXGZSIiA0CisuSVggSXRlbSAiLW1uby14b3AiCisuSVAgIlxmQlwtbWx3cFxmUiIgNAorLklYIEl0ZW0gIi1tbHdwIgorLklQICJcZkJcLW1ub1wtbHdwXGZSIiA0CisuSVggSXRlbSAiLW1uby1sd3AiCisuSVAgIlxmQlwtbTNkbm93XGZSIiA0CisuSVggSXRlbSAiLW0zZG5vdyIKKy5JUCAiXGZCXC1tbm9cLTNkbm93XGZSIiA0CisuSVggSXRlbSAiLW1uby0zZG5vdyIKKy5JUCAiXGZCXC1tcG9wY250XGZSIiA0CisuSVggSXRlbSAiLW1wb3BjbnQiCisuSVAgIlxmQlwtbW5vXC1wb3BjbnRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBvcGNudCIKKy5JUCAiXGZCXC1tYWJtXGZSIiA0CisuSVggSXRlbSAiLW1hYm0iCisuSVAgIlxmQlwtbW5vXC1hYm1cZlIiIDQKKy5JWCBJdGVtICItbW5vLWFibSIKKy5JUCAiXGZCXC1tYm1pXGZSIiA0CisuSVggSXRlbSAiLW1ibWkiCisuSVAgIlxmQlwtbWJtaTJcZlIiIDQKKy5JWCBJdGVtICItbWJtaTIiCisuSVAgIlxmQlwtbW5vXC1ibWlcZlIiIDQKKy5JWCBJdGVtICItbW5vLWJtaSIKKy5JUCAiXGZCXC1tbm9cLWJtaTJcZlIiIDQKKy5JWCBJdGVtICItbW5vLWJtaTIiCisuSVAgIlxmQlwtbWx6Y250XGZSIiA0CisuSVggSXRlbSAiLW1semNudCIKKy5JUCAiXGZCXC1tbm9cLWx6Y250XGZSIiA0CisuSVggSXRlbSAiLW1uby1semNudCIKKy5JUCAiXGZCXC1tcnRtXGZSIiA0CisuSVggSXRlbSAiLW1ydG0iCisuSVAgIlxmQlwtbXRibVxmUiIgNAorLklYIEl0ZW0gIi1tdGJtIgorLklQICJcZkJcLW1ub1wtdGJtXGZSIiA0CisuSVggSXRlbSAiLW1uby10Ym0iCisuUEQKK1RoZXNlIHN3aXRjaGVzIGVuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgaW5zdHJ1Y3Rpb25zIGluIHRoZSBccy0xTU1YXHMwLCBccy0xU1NFXHMwLAorXCZccy0xU1NFMlxzMCwgXHMtMVNTRTNcczAsIFxzLTFTU1NFM1xzMCwgXHMtMVNTRTRcczAuMSwgXHMtMUFWWFxzMCwgXHMtMUFWWDJcczAsIFxzLTFBRVNcczAsIFxzLTFQQ0xNVUxcczAsIFxzLTFGU0dTQkFTRVxzMCwgXHMtMVJEUk5EXHMwLCBGMTZDLAorXCZccy0xRk1BXHMwLCBccy0xU1NFNEFcczAsIFxzLTFGTUE0XHMwLCBccy0xWE9QXHMwLCBccy0xTFdQXHMwLCBccy0xQUJNXHMwLCBccy0xQk1JXHMwLCBccy0xQk1JMlxzMCwgXHMtMUxaQ05UXHMwLCBccy0xUlRNXHMwIG9yIDNETm93IQorZXh0ZW5kZWQgaW5zdHJ1Y3Rpb24gc2V0cy4KK1RoZXNlIGV4dGVuc2lvbnMgYXJlIGFsc28gYXZhaWxhYmxlIGFzIGJ1aWx0LWluIGZ1bmN0aW9uczogc2VlCitcJlxmQlg4NiBCdWlsdC1pbiBGdW5jdGlvbnNcZlIsIGZvciBkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbnMgZW5hYmxlZCBhbmQKK2Rpc2FibGVkIGJ5IHRoZXNlIHN3aXRjaGVzLgorLlNwCitUbyBnZW5lcmF0ZSBccy0xU1NFL1NTRTJcczAgaW5zdHJ1Y3Rpb25zIGF1dG9tYXRpY2FsbHkgZnJvbSBmbG9hdGluZy1wb2ludAorY29kZSAoYXMgb3Bwb3NlZCB0byAzODcgaW5zdHJ1Y3Rpb25zKSwgc2VlIFxmQlwtbWZwbWF0aD1zc2VcZlIuCisuU3AKK1wmXHMtMUdDQ1xzMCBkZXByZXNzZXMgU1NFeCBpbnN0cnVjdGlvbnMgd2hlbiBcZkJcLW1hdnhcZlIgaXMgdXNlZC4gSW5zdGVhZCwgaXQKK2dlbmVyYXRlcyBuZXcgXHMtMUFWWFxzMCBpbnN0cnVjdGlvbnMgb3IgXHMtMUFWWFxzMCBlcXVpdmFsZW5jZSBmb3IgYWxsIFNTRXggaW5zdHJ1Y3Rpb25zCit3aGVuIG5lZWRlZC4KKy5TcAorVGhlc2Ugb3B0aW9ucyBlbmFibGUgXHMtMUdDQ1xzMCB0byB1c2UgdGhlc2UgZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zIGluCitnZW5lcmF0ZWQgY29kZSwgZXZlbiB3aXRob3V0IFxmQlwtbWZwbWF0aD1zc2VcZlIuICBBcHBsaWNhdGlvbnMgdGhhdAorcGVyZm9ybSBydW4tdGltZSBccy0xQ1BVXHMwIGRldGVjdGlvbiBtdXN0IGNvbXBpbGUgc2VwYXJhdGUgZmlsZXMgZm9yIGVhY2gKK3N1cHBvcnRlZCBhcmNoaXRlY3R1cmUsIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBmbGFncy4gIEluIHBhcnRpY3VsYXIsCit0aGUgZmlsZSBjb250YWluaW5nIHRoZSBccy0xQ1BVXHMwIGRldGVjdGlvbiBjb2RlIHNob3VsZCBiZSBjb21waWxlZCB3aXRob3V0Cit0aGVzZSBvcHRpb25zLgorLklQICJcZkJcLW1jbGRcZlIiIDQKKy5JWCBJdGVtICItbWNsZCIKK1RoaXMgb3B0aW9uIGluc3RydWN0cyBccy0xR0NDXHMwIHRvIGVtaXQgYSBcZihDV1wqKENgY2xkXCooQydcZlIgaW5zdHJ1Y3Rpb24gaW4gdGhlIHByb2xvZ3VlCitvZiBmdW5jdGlvbnMgdGhhdCB1c2Ugc3RyaW5nIGluc3RydWN0aW9ucy4gIFN0cmluZyBpbnN0cnVjdGlvbnMgZGVwZW5kIG9uCit0aGUgXHMtMURGXHMwIGZsYWcgdG8gc2VsZWN0IGJldHdlZW4gYXV0b2luY3JlbWVudCBvciBhdXRvZGVjcmVtZW50IG1vZGUuICBXaGlsZSB0aGUKK1wmXHMtMUFCSVxzMCBzcGVjaWZpZXMgdGhlIFxzLTFERlxzMCBmbGFnIHRvIGJlIGNsZWFyZWQgb24gZnVuY3Rpb24gZW50cnksIHNvbWUgb3BlcmF0aW5nCitzeXN0ZW1zIHZpb2xhdGUgdGhpcyBzcGVjaWZpY2F0aW9uIGJ5IG5vdCBjbGVhcmluZyB0aGUgXHMtMURGXHMwIGZsYWcgaW4gdGhlaXIKK2V4Y2VwdGlvbiBkaXNwYXRjaGVycy4gIFRoZSBleGNlcHRpb24gaGFuZGxlciBjYW4gYmUgaW52b2tlZCB3aXRoIHRoZSBccy0xREZcczAgZmxhZworc2V0LCB3aGljaCBsZWFkcyB0byB3cm9uZyBkaXJlY3Rpb24gbW9kZSB3aGVuIHN0cmluZyBpbnN0cnVjdGlvbnMgYXJlIHVzZWQuCitUaGlzIG9wdGlvbiBjYW4gYmUgZW5hYmxlZCBieSBkZWZhdWx0IG9uIDMyXC1iaXQgeDg2IHRhcmdldHMgYnkgY29uZmlndXJpbmcKK1wmXHMtMUdDQ1xzMCB3aXRoIHRoZSBcZkJcLVwtZW5hYmxlXC1jbGRcZlIgY29uZmlndXJlIG9wdGlvbi4gIEdlbmVyYXRpb24gb2YgXGYoQ1dcKihDYGNsZFwqKEMnXGZSCitpbnN0cnVjdGlvbnMgY2FuIGJlIHN1cHByZXNzZWQgd2l0aCB0aGUgXGZCXC1tbm9cLWNsZFxmUiBjb21waWxlciBvcHRpb24KK2luIHRoaXMgY2FzZS4KKy5JUCAiXGZCXC1tdnplcm91cHBlclxmUiIgNAorLklYIEl0ZW0gIi1tdnplcm91cHBlciIKK1RoaXMgb3B0aW9uIGluc3RydWN0cyBccy0xR0NDXHMwIHRvIGVtaXQgYSBcZihDV1wqKENgdnplcm91cHBlclwqKEMnXGZSIGluc3RydWN0aW9uCitiZWZvcmUgYSB0cmFuc2ZlciBvZiBjb250cm9sIGZsb3cgb3V0IG9mIHRoZSBmdW5jdGlvbiB0byBtaW5pbWl6ZQordGhlIFxzLTFBVlhcczAgdG8gXHMtMVNTRVxzMCB0cmFuc2l0aW9uIHBlbmFsdHkgYXMgd2VsbCBhcyByZW1vdmUgdW5uZWNlc3NhcnkgXGYoQ1dcKihDYHplcm91cHBlclwqKEMnXGZSCitpbnRyaW5zaWNzLgorLklQICJcZkJcLW1wcmVmZXJcLWF2eDEyOFxmUiIgNAorLklYIEl0ZW0gIi1tcHJlZmVyLWF2eDEyOCIKK1RoaXMgb3B0aW9uIGluc3RydWN0cyBccy0xR0NDXHMwIHRvIHVzZSAxMjhcLWJpdCBccy0xQVZYXHMwIGluc3RydWN0aW9ucyBpbnN0ZWFkIG9mCisyNTZcLWJpdCBccy0xQVZYXHMwIGluc3RydWN0aW9ucyBpbiB0aGUgYXV0by12ZWN0b3JpemVyLgorLklQICJcZkJcLW1jeDE2XGZSIiA0CisuSVggSXRlbSAiLW1jeDE2IgorVGhpcyBvcHRpb24gZW5hYmxlcyBccy0xR0NDXHMwIHRvIGdlbmVyYXRlIFxmKENXXCooQ2BDTVBYQ0hHMTZCXCooQydcZlIgaW5zdHJ1Y3Rpb25zLgorXCZcZihDV1wqKENgQ01QWENIRzE2QlwqKEMnXGZSIGFsbG93cyBmb3IgYXRvbWljIG9wZXJhdGlvbnMgb24gMTI4XC1iaXQgZG91YmxlIHF1YWR3b3JkCisob3Igb3dvcmQpIGRhdGEgdHlwZXMuICAKK1RoaXMgaXMgdXNlZnVsIGZvciBoaWdoLXJlc29sdXRpb24gY291bnRlcnMgdGhhdCBjYW4gYmUgdXBkYXRlZAorYnkgbXVsdGlwbGUgcHJvY2Vzc29ycyAob3IgY29yZXMpLiAgVGhpcyBpbnN0cnVjdGlvbiBpcyBnZW5lcmF0ZWQgYXMgcGFydCBvZgorYXRvbWljIGJ1aWx0LWluIGZ1bmN0aW9uczogc2VlIFxmQl9cfF9zeW5jIEJ1aWx0aW5zXGZSIG9yCitcJlxmQl9cfF9hdG9taWMgQnVpbHRpbnNcZlIgZm9yIGRldGFpbHMuCisuSVAgIlxmQlwtbXNhaGZcZlIiIDQKKy5JWCBJdGVtICItbXNhaGYiCitUaGlzIG9wdGlvbiBlbmFibGVzIGdlbmVyYXRpb24gb2YgXGYoQ1dcKihDYFNBSEZcKihDJ1xmUiBpbnN0cnVjdGlvbnMgaW4gNjRcLWJpdCBjb2RlLgorRWFybHkgSW50ZWwgUGVudGl1bSA0IENQVXMgd2l0aCBJbnRlbCA2NCBzdXBwb3J0LAorcHJpb3IgdG8gdGhlIGludHJvZHVjdGlvbiBvZiBQZW50aXVtIDQgRzEgc3RlcCBpbiBEZWNlbWJlciAyMDA1LAorbGFja2VkIHRoZSBcZihDV1wqKENgTEFIRlwqKEMnXGZSIGFuZCBcZihDV1wqKENgU0FIRlwqKEMnXGZSIGluc3RydWN0aW9ucword2hpY2ggd2VyZSBzdXBwb3J0ZWQgYnkgXHMtMUFNRDY0XHMwLgorVGhlc2UgYXJlIGxvYWQgYW5kIHN0b3JlIGluc3RydWN0aW9ucywgcmVzcGVjdGl2ZWx5LCBmb3IgY2VydGFpbiBzdGF0dXMgZmxhZ3MuCitJbiA2NFwtYml0IG1vZGUsIHRoZSBcZihDV1wqKENgU0FIRlwqKEMnXGZSIGluc3RydWN0aW9uIGlzIHVzZWQgdG8gb3B0aW1pemUgXGYoQ1dcKihDYGZtb2RcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGRyZW1cKihDJ1xmUiwgYW5kIFxmKENXXCooQ2ByZW1haW5kZXJcKihDJ1xmUiBidWlsdC1pbiBmdW5jdGlvbnM7CitzZWUgXGZCT3RoZXIgQnVpbHRpbnNcZlIgZm9yIGRldGFpbHMuCisuSVAgIlxmQlwtbW1vdmJlXGZSIiA0CisuSVggSXRlbSAiLW1tb3ZiZSIKK1RoaXMgb3B0aW9uIGVuYWJsZXMgdXNlIG9mIHRoZSBcZihDV1wqKENgbW92YmVcKihDJ1xmUiBpbnN0cnVjdGlvbiB0byBpbXBsZW1lbnQKK1wmXGYoQ1dcKihDYF9cfF9idWlsdGluX2Jzd2FwMzJcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYF9cfF9idWlsdGluX2Jzd2FwNjRcKihDJ1xmUi4KKy5JUCAiXGZCXC1tY3JjMzJcZlIiIDQKKy5JWCBJdGVtICItbWNyYzMyIgorVGhpcyBvcHRpb24gZW5hYmxlcyBidWlsdC1pbiBmdW5jdGlvbnMgXGYoQ1dcKihDYF9cfF9idWlsdGluX2lhMzJfY3JjMzJxaVwqKEMnXGZSLAorXCZcZihDV1wqKENgX1x8X2J1aWx0aW5faWEzMl9jcmMzMmhpXCooQydcZlIsIFxmKENXXCooQ2BfXHxfYnVpbHRpbl9pYTMyX2NyYzMyc2lcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYF9cfF9idWlsdGluX2lhMzJfY3JjMzJkaVwqKEMnXGZSIHRvIGdlbmVyYXRlIHRoZSBcZihDV1wqKENgY3JjMzJcKihDJ1xmUiBtYWNoaW5lIGluc3RydWN0aW9uLgorLklQICJcZkJcLW1yZWNpcFxmUiIgNAorLklYIEl0ZW0gIi1tcmVjaXAiCitUaGlzIG9wdGlvbiBlbmFibGVzIHVzZSBvZiBcZihDV1wqKENgUkNQU1NcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYFJTUVJUU1NcKihDJ1xmUiBpbnN0cnVjdGlvbnMKKyhhbmQgdGhlaXIgdmVjdG9yaXplZCB2YXJpYW50cyBcZihDV1wqKENgUkNQUFNcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYFJTUVJUUFNcKihDJ1xmUikKK3dpdGggYW4gYWRkaXRpb25hbCBOZXd0b24tUmFwaHNvbiBzdGVwCit0byBpbmNyZWFzZSBwcmVjaXNpb24gaW5zdGVhZCBvZiBcZihDV1wqKENgRElWU1NcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYFNRUlRTU1wqKEMnXGZSCisoYW5kIHRoZWlyIHZlY3Rvcml6ZWQKK3ZhcmlhbnRzKSBmb3Igc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMuICBUaGVzZSBpbnN0cnVjdGlvbnMKK2FyZSBnZW5lcmF0ZWQgb25seSB3aGVuIFxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiBpcyBlbmFibGVkCit0b2dldGhlciB3aXRoIFxmQlwtZmluaXRlXC1tYXRoXC1vbmx5XGZSIGFuZCBcZkJcLWZub1wtdHJhcHBpbmdcLW1hdGhcZlIuCitOb3RlIHRoYXQgd2hpbGUgdGhlIHRocm91Z2hwdXQgb2YgdGhlIHNlcXVlbmNlIGlzIGhpZ2hlciB0aGFuIHRoZSB0aHJvdWdocHV0CitvZiB0aGUgbm9uLXJlY2lwcm9jYWwgaW5zdHJ1Y3Rpb24sIHRoZSBwcmVjaXNpb24gb2YgdGhlIHNlcXVlbmNlIGNhbiBiZQorZGVjcmVhc2VkIGJ5IHVwIHRvIDIgdWxwIChpLmUuIHRoZSBpbnZlcnNlIG9mIDEuMCBlcXVhbHMgMC45OTk5OTk5NCkuCisuU3AKK05vdGUgdGhhdCBccy0xR0NDXHMwIGltcGxlbWVudHMgXGYoQ1dcKihDYDEuMGYvc3FydGYoXGYoQ0l4XGYoQ1cpXCooQydcZlIgaW4gdGVybXMgb2YgXGYoQ1dcKihDYFJTUVJUU1NcKihDJ1xmUgorKG9yIFxmKENXXCooQ2BSU1FSVFBTXCooQydcZlIpIGFscmVhZHkgd2l0aCBcZkJcLWZmYXN0XC1tYXRoXGZSIChvciB0aGUgYWJvdmUgb3B0aW9uCitjb21iaW5hdGlvbiksIGFuZCBkb2Vzbid0IG5lZWQgXGZCXC1tcmVjaXBcZlIuCisuU3AKK0Fsc28gbm90ZSB0aGF0IFxzLTFHQ0NcczAgZW1pdHMgdGhlIGFib3ZlIHNlcXVlbmNlIHdpdGggYWRkaXRpb25hbCBOZXd0b24tUmFwaHNvbiBzdGVwCitmb3IgdmVjdG9yaXplZCBzaW5nbGUtZmxvYXQgZGl2aXNpb24gYW5kIHZlY3Rvcml6ZWQgXGYoQ1dcKihDYHNxcnRmKFxmKENJeFxmKENXKVwqKEMnXGZSCithbHJlYWR5IHdpdGggXGZCXC1mZmFzdFwtbWF0aFxmUiAob3IgdGhlIGFib3ZlIG9wdGlvbiBjb21iaW5hdGlvbiksIGFuZAorZG9lc24ndCBuZWVkIFxmQlwtbXJlY2lwXGZSLgorLklQICJcZkJcLW1yZWNpcD1cZlJcZklvcHRcZlIiIDQKKy5JWCBJdGVtICItbXJlY2lwPW9wdCIKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHdoaWNoIHJlY2lwcm9jYWwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zCittYXkgYmUgdXNlZC4gIFxmSW9wdFxmUiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9wdGlvbnMsIHdoaWNoIG1heQorYmUgcHJlY2VkZWQgYnkgYSBcZkIhXGZSIHRvIGludmVydCB0aGUgb3B0aW9uOgorLlJTIDQKKy5JUCAiXGZCYWxsXGZSIiA0CisuSVggSXRlbSAiYWxsIgorRW5hYmxlIGFsbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQmRlZmF1bHRcZlIiIDQKKy5JWCBJdGVtICJkZWZhdWx0IgorRW5hYmxlIHRoZSBkZWZhdWx0IGluc3RydWN0aW9ucywgZXF1aXZhbGVudCB0byBcZkJcLW1yZWNpcFxmUi4KKy5JUCAiXGZCbm9uZVxmUiIgNAorLklYIEl0ZW0gIm5vbmUiCitEaXNhYmxlIGFsbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMsIGVxdWl2YWxlbnQgdG8gXGZCXC1tbm9cLXJlY2lwXGZSLgorLklQICJcZkJkaXZcZlIiIDQKKy5JWCBJdGVtICJkaXYiCitFbmFibGUgdGhlIGFwcHJveGltYXRpb24gZm9yIHNjYWxhciBkaXZpc2lvbi4KKy5JUCAiXGZCdmVjLWRpdlxmUiIgNAorLklYIEl0ZW0gInZlYy1kaXYiCitFbmFibGUgdGhlIGFwcHJveGltYXRpb24gZm9yIHZlY3Rvcml6ZWQgZGl2aXNpb24uCisuSVAgIlxmQnNxcnRcZlIiIDQKKy5JWCBJdGVtICJzcXJ0IgorRW5hYmxlIHRoZSBhcHByb3hpbWF0aW9uIGZvciBzY2FsYXIgc3F1YXJlIHJvb3QuCisuSVAgIlxmQnZlYy1zcXJ0XGZSIiA0CisuSVggSXRlbSAidmVjLXNxcnQiCitFbmFibGUgdGhlIGFwcHJveGltYXRpb24gZm9yIHZlY3Rvcml6ZWQgc3F1YXJlIHJvb3QuCisuUkUKKy5SUyA0CisuU3AKK1NvLCBmb3IgZXhhbXBsZSwgXGZCXC1tcmVjaXA9YWxsLCFzcXJ0XGZSIGVuYWJsZXMKK2FsbCBvZiB0aGUgcmVjaXByb2NhbCBhcHByb3hpbWF0aW9ucywgZXhjZXB0IGZvciBzcXVhcmUgcm9vdC4KKy5SRQorLklQICJcZkJcLW12ZWNsaWJhYmk9XGZSXGZJdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tdmVjbGliYWJpPXR5cGUiCitTcGVjaWZpZXMgdGhlIFxzLTFBQklcczAgdHlwZSB0byB1c2UgZm9yIHZlY3Rvcml6aW5nIGludHJpbnNpY3MgdXNpbmcgYW4KK2V4dGVybmFsIGxpYnJhcnkuICBTdXBwb3J0ZWQgdmFsdWVzIGZvciBcZkl0eXBlXGZSIGFyZSBcZkJzdm1sXGZSIAorZm9yIHRoZSBJbnRlbCBzaG9ydAordmVjdG9yIG1hdGggbGlicmFyeSBhbmQgXGZCYWNtbFxmUiBmb3IgdGhlIFxzLTFBTURcczAgbWF0aCBjb3JlIGxpYnJhcnkuCitUbyB1c2UgdGhpcyBvcHRpb24sIGJvdGggXGZCXC1mdHJlZVwtdmVjdG9yaXplXGZSIGFuZAorXCZcZkJcLWZ1bnNhZmVcLW1hdGhcLW9wdGltaXphdGlvbnNcZlIgaGF2ZSB0byBiZSBlbmFibGVkLCBhbmQgYW4gXHMtMVNWTUxcczAgb3IgXHMtMUFDTUxcczAgCitBQkktY29tcGF0aWJsZSBsaWJyYXJ5IG11c3QgYmUgc3BlY2lmaWVkIGF0IGxpbmsgdGltZS4KKy5TcAorXCZccy0xR0NDXHMwIGN1cnJlbnRseSBlbWl0cyBjYWxscyB0byBcZihDV1wqKENgdm1sZEV4cDJcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHZtbGRMbjJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRMb2cxMDJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRMb2cxMDJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRQb3cyXCooQydcZlIsCitcJlxmKENXXCooQ2B2bWxkVGFuaDJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRUYW4yXCooQydcZlIsIFxmKENXXCooQ2B2bWxkQXRhbjJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRBdGFuaDJcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHZtbGRDYnJ0MlwqKEMnXGZSLCBcZihDV1wqKENgdm1sZFNpbmgyXCooQydcZlIsIFxmKENXXCooQ2B2bWxkU2luMlwqKEMnXGZSLCBcZihDV1wqKENgdm1sZEFzaW5oMlwqKEMnXGZSLAorXCZcZihDV1wqKENgdm1sZEFzaW4yXCooQydcZlIsIFxmKENXXCooQ2B2bWxkQ29zaDJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRDb3MyXCooQydcZlIsIFxmKENXXCooQ2B2bWxkQWNvc2gyXCooQydcZlIsCitcJlxmKENXXCooQ2B2bWxkQWNvczJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNFeHA0XCooQydcZlIsIFxmKENXXCooQ2B2bWxzTG40XCooQydcZlIsIFxmKENXXCooQ2B2bWxzTG9nMTA0XCooQydcZlIsCitcJlxmKENXXCooQ2B2bWxzTG9nMTA0XCooQydcZlIsIFxmKENXXCooQ2B2bWxzUG93NFwqKEMnXGZSLCBcZihDV1wqKENgdm1sc1Rhbmg0XCooQydcZlIsIFxmKENXXCooQ2B2bWxzVGFuNFwqKEMnXGZSLAorXCZcZihDV1wqKENgdm1sc0F0YW40XCooQydcZlIsIFxmKENXXCooQ2B2bWxzQXRhbmg0XCooQydcZlIsIFxmKENXXCooQ2B2bWxzQ2JydDRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNTaW5oNFwqKEMnXGZSLAorXCZcZihDV1wqKENgdm1sc1NpbjRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNBc2luaDRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNBc2luNFwqKEMnXGZSLCBcZihDV1wqKENgdm1sc0Nvc2g0XCooQydcZlIsCitcJlxmKENXXCooQ2B2bWxzQ29zNFwqKEMnXGZSLCBcZihDV1wqKENgdm1sc0Fjb3NoNFwqKEMnXGZSIGFuZCBcZihDV1wqKENgdm1sc0Fjb3M0XCooQydcZlIgZm9yIGNvcnJlc3BvbmRpbmcKK2Z1bmN0aW9uIHR5cGUgd2hlbiBcZkJcLW12ZWNsaWJhYmk9c3ZtbFxmUiBpcyB1c2VkLCBhbmQgXGYoQ1dcKihDYF9cfF92cmQyX3NpblwqKEMnXGZSLAorXCZcZihDV1wqKENgX1x8X3ZyZDJfY29zXCooQydcZlIsIFxmKENXXCooQ2BfXHxfdnJkMl9leHBcKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF92cmQyX2xvZ1wqKEMnXGZSLCBcZihDV1wqKENgX1x8X3ZyZDJfbG9nMlwqKEMnXGZSLAorXCZcZihDV1wqKENgX1x8X3ZyZDJfbG9nMTBcKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF92cnM0X3NpbmZcKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF92cnM0X2Nvc2ZcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYF9cfF92cnM0X2V4cGZcKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF92cnM0X2xvZ2ZcKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF92cnM0X2xvZzJmXCooQydcZlIsCitcJlxmKENXXCooQ2BfXHxfdnJzNF9sb2cxMGZcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYF9cfF92cnM0X3Bvd2ZcKihDJ1xmUiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdHlwZQord2hlbiBcZkJcLW12ZWNsaWJhYmk9YWNtbFxmUiBpcyB1c2VkLgorLklQICJcZkJcLW1hYmk9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPW5hbWUiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgc3BlY2lmaWVkIGNhbGxpbmcgY29udmVudGlvbi4gIFBlcm1pc3NpYmxlIHZhbHVlcworYXJlIFxmQnN5c3ZcZlIgZm9yIHRoZSBccy0xQUJJXHMwIHVzZWQgb24gR05VL0xpbnV4IGFuZCBvdGhlciBzeXN0ZW1zLCBhbmQKK1wmXGZCbXNcZlIgZm9yIHRoZSBNaWNyb3NvZnQgXHMtMUFCSVxzMC4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgTWljcm9zb2Z0CitcJlxzLTFBQklcczAgd2hlbiB0YXJnZXRpbmcgTWljcm9zb2Z0IFdpbmRvd3MgYW5kIHRoZSBTeXNWIFxzLTFBQklcczAgb24gYWxsIG90aGVyIHN5c3RlbXMuCitZb3UgY2FuIGNvbnRyb2wgdGhpcyBiZWhhdmlvciBmb3IgYSBzcGVjaWZpYyBmdW5jdGlvbiBieQordXNpbmcgdGhlIGZ1bmN0aW9uIGF0dHJpYnV0ZSBcZkJtc19hYmlcZlIvXGZCc3lzdl9hYmlcZlIuCisuSVAgIlxmQlwtbXRsc1wtZGlhbGVjdD1cZlJcZkl0eXBlXGZSIiA0CisuSVggSXRlbSAiLW10bHMtZGlhbGVjdD10eXBlIgorR2VuZXJhdGUgY29kZSB0byBhY2Nlc3MgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgdXNpbmcgdGhlIFxmQmdudVxmUiBvcgorXCZcZkJnbnUyXGZSIGNvbnZlbnRpb25zLiAgXGZCZ251XGZSIGlzIHRoZSBjb25zZXJ2YXRpdmUgZGVmYXVsdDsKK1wmXGZCZ251MlxmUiBpcyBtb3JlIGVmZmljaWVudCwgYnV0IGl0IG1heSBhZGQgY29tcGlsZVwtIGFuZCBydW4tdGltZQorcmVxdWlyZW1lbnRzIHRoYXQgY2Fubm90IGJlIHNhdGlzZmllZCBvbiBhbGwgc3lzdGVtcy4KKy5JUCAiXGZCXC1tcHVzaFwtYXJnc1xmUiIgNAorLklYIEl0ZW0gIi1tcHVzaC1hcmdzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXB1c2hcLWFyZ3NcZlIiIDQKKy5JWCBJdGVtICItbW5vLXB1c2gtYXJncyIKKy5QRAorVXNlIFxzLTFQVVNIXHMwIG9wZXJhdGlvbnMgdG8gc3RvcmUgb3V0Z29pbmcgcGFyYW1ldGVycy4gIFRoaXMgbWV0aG9kIGlzIHNob3J0ZXIKK2FuZCB1c3VhbGx5IGVxdWFsbHkgZmFzdCBhcyBtZXRob2QgdXNpbmcgXHMtMVNVQi9NT1ZcczAgb3BlcmF0aW9ucyBhbmQgaXMgZW5hYmxlZAorYnkgZGVmYXVsdC4gIEluIHNvbWUgY2FzZXMgZGlzYWJsaW5nIGl0IG1heSBpbXByb3ZlIHBlcmZvcm1hbmNlIGJlY2F1c2Ugb2YKK2ltcHJvdmVkIHNjaGVkdWxpbmcgYW5kIHJlZHVjZWQgZGVwZW5kZW5jaWVzLgorLklQICJcZkJcLW1hY2N1bXVsYXRlXC1vdXRnb2luZ1wtYXJnc1xmUiIgNAorLklYIEl0ZW0gIi1tYWNjdW11bGF0ZS1vdXRnb2luZy1hcmdzIgorSWYgZW5hYmxlZCwgdGhlIG1heGltdW0gYW1vdW50IG9mIHNwYWNlIHJlcXVpcmVkIGZvciBvdXRnb2luZyBhcmd1bWVudHMgaXMKK2NvbXB1dGVkIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZS4gIFRoaXMgaXMgZmFzdGVyIG9uIG1vc3QgbW9kZXJuIENQVXMKK2JlY2F1c2Ugb2YgcmVkdWNlZCBkZXBlbmRlbmNpZXMsIGltcHJvdmVkIHNjaGVkdWxpbmcgYW5kIHJlZHVjZWQgc3RhY2sgdXNhZ2UKK3doZW4gdGhlIHByZWZlcnJlZCBzdGFjayBib3VuZGFyeSBpcyBub3QgZXF1YWwgdG8gMi4gIFRoZSBkcmF3YmFjayBpcyBhIG5vdGFibGUKK2luY3JlYXNlIGluIGNvZGUgc2l6ZS4gIFRoaXMgc3dpdGNoIGltcGxpZXMgXGZCXC1tbm9cLXB1c2hcLWFyZ3NcZlIuCisuSVAgIlxmQlwtbXRocmVhZHNcZlIiIDQKKy5JWCBJdGVtICItbXRocmVhZHMiCitTdXBwb3J0IHRocmVhZC1zYWZlIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiBNaW5HVy4gIFByb2dyYW1zIHRoYXQgcmVseQorb24gdGhyZWFkLXNhZmUgZXhjZXB0aW9uIGhhbmRsaW5nIG11c3QgY29tcGlsZSBhbmQgbGluayBhbGwgY29kZSB3aXRoIHRoZQorXCZcZkJcLW10aHJlYWRzXGZSIG9wdGlvbi4gIFdoZW4gY29tcGlsaW5nLCBcZkJcLW10aHJlYWRzXGZSIGRlZmluZXMKK1wmXGYoQ1dcKihDYFwtRF9NVFwqKEMnXGZSOyB3aGVuIGxpbmtpbmcsIGl0IGxpbmtzIGluIGEgc3BlY2lhbCB0aHJlYWQgaGVscGVyIGxpYnJhcnkKK1wmXGZCXC1sbWluZ3d0aHJkXGZSIHdoaWNoIGNsZWFucyB1cCBwZXItdGhyZWFkIGV4Y2VwdGlvbi1oYW5kbGluZyBkYXRhLgorLklQICJcZkJcLW1ub1wtYWxpZ25cLXN0cmluZ29wc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tYWxpZ24tc3RyaW5nb3BzIgorRG8gbm90IGFsaWduIHRoZSBkZXN0aW5hdGlvbiBvZiBpbmxpbmVkIHN0cmluZyBvcGVyYXRpb25zLiAgVGhpcyBzd2l0Y2ggcmVkdWNlcworY29kZSBzaXplIGFuZCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBpbiBjYXNlIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IGFsaWduZWQsCitidXQgXHMtMUdDQ1xzMCBkb2Vzbid0IGtub3cgYWJvdXQgaXQuCisuSVAgIlxmQlwtbWlubGluZVwtYWxsXC1zdHJpbmdvcHNcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1hbGwtc3RyaW5nb3BzIgorQnkgZGVmYXVsdCBccy0xR0NDXHMwIGlubGluZXMgc3RyaW5nIG9wZXJhdGlvbnMgb25seSB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyAKK2tub3duIHRvIGJlIGFsaWduZWQgdG8gbGVhc3QgYSA0XC1ieXRlIGJvdW5kYXJ5LiAgCitUaGlzIGVuYWJsZXMgbW9yZSBpbmxpbmluZyBhbmQgaW5jcmVhc2VzIGNvZGUKK3NpemUsIGJ1dCBtYXkgaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBjb2RlIHRoYXQgZGVwZW5kcyBvbiBmYXN0CitcJlxmKENXXCooQ2BtZW1jcHlcKihDJ1xmUiwgXGYoQ1dcKihDYHN0cmxlblwqKEMnXGZSLAorYW5kIFxmKENXXCooQ2BtZW1zZXRcKihDJ1xmUiBmb3Igc2hvcnQgbGVuZ3Rocy4KKy5JUCAiXGZCXC1taW5saW5lXC1zdHJpbmdvcHNcLWR5bmFtaWNhbGx5XGZSIiA0CisuSVggSXRlbSAiLW1pbmxpbmUtc3RyaW5nb3BzLWR5bmFtaWNhbGx5IgorRm9yIHN0cmluZyBvcGVyYXRpb25zIG9mIHVua25vd24gc2l6ZSwgdXNlIHJ1bi10aW1lIGNoZWNrcyB3aXRoCitpbmxpbmUgY29kZSBmb3Igc21hbGwgYmxvY2tzIGFuZCBhIGxpYnJhcnkgY2FsbCBmb3IgbGFyZ2UgYmxvY2tzLgorLklQICJcZkJcLW1zdHJpbmdvcFwtc3RyYXRlZ3k9XGZSXGZJYWxnXGZSIiA0CisuSVggSXRlbSAiLW1zdHJpbmdvcC1zdHJhdGVneT1hbGciCitPdmVycmlkZSB0aGUgaW50ZXJuYWwgZGVjaXNpb24gaGV1cmlzdGljIGZvciB0aGUgcGFydGljdWxhciBhbGdvcml0aG0gdG8gdXNlCitmb3IgaW5saW5pbmcgc3RyaW5nIG9wZXJhdGlvbnMuICBUaGUgYWxsb3dlZCB2YWx1ZXMgZm9yIFxmSWFsZ1xmUiBhcmU6CisuUlMgNAorLklQICJcZkJyZXBfYnl0ZVxmUiIgNAorLklYIEl0ZW0gInJlcF9ieXRlIgorLlBEIDAKKy5JUCAiXGZCcmVwXzRieXRlXGZSIiA0CisuSVggSXRlbSAicmVwXzRieXRlIgorLklQICJcZkJyZXBfOGJ5dGVcZlIiIDQKKy5JWCBJdGVtICJyZXBfOGJ5dGUiCisuUEQKK0V4cGFuZCB1c2luZyBpMzg2IFxmKENXXCooQ2ByZXBcKihDJ1xmUiBwcmVmaXggb2YgdGhlIHNwZWNpZmllZCBzaXplLgorLklQICJcZkJieXRlX2xvb3BcZlIiIDQKKy5JWCBJdGVtICJieXRlX2xvb3AiCisuUEQgMAorLklQICJcZkJsb29wXGZSIiA0CisuSVggSXRlbSAibG9vcCIKKy5JUCAiXGZCdW5yb2xsZWRfbG9vcFxmUiIgNAorLklYIEl0ZW0gInVucm9sbGVkX2xvb3AiCisuUEQKK0V4cGFuZCBpbnRvIGFuIGlubGluZSBsb29wLgorLklQICJcZkJsaWJjYWxsXGZSIiA0CisuSVggSXRlbSAibGliY2FsbCIKK0Fsd2F5cyB1c2UgYSBsaWJyYXJ5IGNhbGwuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tb21pdFwtbGVhZlwtZnJhbWVcLXBvaW50ZXJcZlIiIDQKKy5JWCBJdGVtICItbW9taXQtbGVhZi1mcmFtZS1wb2ludGVyIgorRG9uJ3Qga2VlcCB0aGUgZnJhbWUgcG9pbnRlciBpbiBhIHJlZ2lzdGVyIGZvciBsZWFmIGZ1bmN0aW9ucy4gIFRoaXMKK2F2b2lkcyB0aGUgaW5zdHJ1Y3Rpb25zIHRvIHNhdmUsIHNldCB1cCwgYW5kIHJlc3RvcmUgZnJhbWUgcG9pbnRlcnMgYW5kCittYWtlcyBhbiBleHRyYSByZWdpc3RlciBhdmFpbGFibGUgaW4gbGVhZiBmdW5jdGlvbnMuICBUaGUgb3B0aW9uCitcJlxmQlwtZm9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyXGZSIHJlbW92ZXMgdGhlIGZyYW1lIHBvaW50ZXIgZm9yIGxlYWYgZnVuY3Rpb25zLAord2hpY2ggbWlnaHQgbWFrZSBkZWJ1Z2dpbmcgaGFyZGVyLgorLklQICJcZkJcLW10bHNcLWRpcmVjdFwtc2VnXC1yZWZzXGZSIiA0CisuSVggSXRlbSAiLW10bHMtZGlyZWN0LXNlZy1yZWZzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXRsc1wtZGlyZWN0XC1zZWdcLXJlZnNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXRscy1kaXJlY3Qtc2VnLXJlZnMiCisuUEQKK0NvbnRyb2xzIHdoZXRoZXIgXHMtMVRMU1xzMCB2YXJpYWJsZXMgbWF5IGJlIGFjY2Vzc2VkIHdpdGggb2Zmc2V0cyBmcm9tIHRoZQorXCZccy0xVExTXHMwIHNlZ21lbnQgcmVnaXN0ZXIgKFxmKENXJWdzXGZSIGZvciAzMlwtYml0LCBcZihDVyVmc1xmUiBmb3IgNjRcLWJpdCksCitvciB3aGV0aGVyIHRoZSB0aHJlYWQgYmFzZSBwb2ludGVyIG11c3QgYmUgYWRkZWQuICBXaGV0aGVyIG9yIG5vdCB0aGlzCitpcyB2YWxpZCBkZXBlbmRzIG9uIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBhbmQgd2hldGhlciBpdCBtYXBzIHRoZQorc2VnbWVudCB0byBjb3ZlciB0aGUgZW50aXJlIFxzLTFUTFNcczAgYXJlYS4KKy5TcAorRm9yIHN5c3RlbXMgdGhhdCB1c2UgdGhlIFxzLTFHTlVcczAgQyBMaWJyYXJ5LCB0aGUgZGVmYXVsdCBpcyBvbi4KKy5JUCAiXGZCXC1tc3NlMmF2eFxmUiIgNAorLklYIEl0ZW0gIi1tc3NlMmF2eCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zc2UyYXZ4XGZSIiA0CisuSVggSXRlbSAiLW1uby1zc2UyYXZ4IgorLlBECitTcGVjaWZ5IHRoYXQgdGhlIGFzc2VtYmxlciBzaG91bGQgZW5jb2RlIFxzLTFTU0VcczAgaW5zdHJ1Y3Rpb25zIHdpdGggXHMtMVZFWFxzMAorcHJlZml4LiAgVGhlIG9wdGlvbiBcZkJcLW1hdnhcZlIgdHVybnMgdGhpcyBvbiBieSBkZWZhdWx0LgorLklQICJcZkJcLW1mZW50cnlcZlIiIDQKKy5JWCBJdGVtICItbWZlbnRyeSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mZW50cnlcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZlbnRyeSIKKy5QRAorSWYgcHJvZmlsaW5nIGlzIGFjdGl2ZSAoXGZCXC1wZ1xmUiksIHB1dCB0aGUgcHJvZmlsaW5nCitjb3VudGVyIGNhbGwgYmVmb3JlIHRoZSBwcm9sb2d1ZS4KK05vdGU6IE9uIHg4NiBhcmNoaXRlY3R1cmVzIHRoZSBhdHRyaWJ1dGUgXGYoQ1dcKihDYG1zX2hvb2tfcHJvbG9ndWVcKihDJ1xmUgoraXNuJ3QgcG9zc2libGUgYXQgdGhlIG1vbWVudCBmb3IgXGZCXC1tZmVudHJ5XGZSIGFuZCBcZkJcLXBnXGZSLgorLklQICJcZkJcLW04Yml0XC1pZGl2XGZSIiA0CisuSVggSXRlbSAiLW04Yml0LWlkaXYiCisuUEQgMAorLklQICJcZkJcLW1ub1wtOGJpdFwtaWRpdlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tOGJpdC1pZGl2IgorLlBECitPbiBzb21lIHByb2Nlc3NvcnMsIGxpa2UgSW50ZWwgQXRvbSwgOFwtYml0IHVuc2lnbmVkIGludGVnZXIgZGl2aWRlIGlzCittdWNoIGZhc3RlciB0aGFuIDMyXC1iaXQvNjRcLWJpdCBpbnRlZ2VyIGRpdmlkZS4gIFRoaXMgb3B0aW9uIGdlbmVyYXRlcyBhCitydW4tdGltZSBjaGVjay4gIElmIGJvdGggZGl2aWRlbmQgYW5kIGRpdmlzb3IgYXJlIHdpdGhpbiByYW5nZSBvZiAwCit0byAyNTUsIDhcLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGRpdmlkZSBpcyB1c2VkIGluc3RlYWQgb2YKKzMyXC1iaXQvNjRcLWJpdCBpbnRlZ2VyIGRpdmlkZS4KKy5JUCAiXGZCXC1tYXZ4MjU2XC1zcGxpdFwtdW5hbGlnbmVkXC1sb2FkXGZSIiA0CisuSVggSXRlbSAiLW1hdngyNTYtc3BsaXQtdW5hbGlnbmVkLWxvYWQiCisuUEQgMAorLklQICJcZkJcLW1hdngyNTZcLXNwbGl0XC11bmFsaWduZWRcLXN0b3JlXGZSIiA0CisuSVggSXRlbSAiLW1hdngyNTYtc3BsaXQtdW5hbGlnbmVkLXN0b3JlIgorLlBECitTcGxpdCAzMlwtYnl0ZSBccy0xQVZYXHMwIHVuYWxpZ25lZCBsb2FkIGFuZCBzdG9yZS4KKy5QUAorVGhlc2UgXGZCXC1tXGZSIHN3aXRjaGVzIGFyZSBzdXBwb3J0ZWQgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlCitvbiB4ODZcLTY0IHByb2Nlc3NvcnMgaW4gNjRcLWJpdCBlbnZpcm9ubWVudHMuCisuSVAgIlxmQlwtbTMyXGZSIiA0CisuSVggSXRlbSAiLW0zMiIKKy5QRCAwCisuSVAgIlxmQlwtbTY0XGZSIiA0CisuSVggSXRlbSAiLW02NCIKKy5JUCAiXGZCXC1teDMyXGZSIiA0CisuSVggSXRlbSAiLW14MzIiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIGEgMzJcLWJpdCBvciA2NFwtYml0IGVudmlyb25tZW50LgorVGhlIFxmQlwtbTMyXGZSIG9wdGlvbiBzZXRzIFxmKENXXCooQ2BpbnRcKihDJ1xmUiwgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUiwgYW5kIHBvaW50ZXIgdHlwZXMKK3RvIDMyIGJpdHMsIGFuZAorZ2VuZXJhdGVzIGNvZGUgdGhhdCBydW5zIG9uIGFueSBpMzg2IHN5c3RlbS4KKy5TcAorVGhlIFxmQlwtbTY0XGZSIG9wdGlvbiBzZXRzIFxmKENXXCooQ2BpbnRcKihDJ1xmUiB0byAzMiBiaXRzIGFuZCBcZihDV1wqKENgbG9uZ1wqKEMnXGZSIGFuZCBwb2ludGVyCit0eXBlcyB0byA2NCBiaXRzLCBhbmQgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoZSB4ODZcLTY0IGFyY2hpdGVjdHVyZS4KK0ZvciBEYXJ3aW4gb25seSB0aGUgXGZCXC1tNjRcZlIgb3B0aW9uIGFsc28gdHVybnMgb2ZmIHRoZSBcZkJcLWZub1wtcGljXGZSCithbmQgXGZCXC1tZHluYW1pY1wtbm9cLXBpY1xmUiBvcHRpb25zLgorLlNwCitUaGUgXGZCXC1teDMyXGZSIG9wdGlvbiBzZXRzIFxmKENXXCooQ2BpbnRcKihDJ1xmUiwgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUiwgYW5kIHBvaW50ZXIgdHlwZXMKK3RvIDMyIGJpdHMsIGFuZAorZ2VuZXJhdGVzIGNvZGUgZm9yIHRoZSB4ODZcLTY0IGFyY2hpdGVjdHVyZS4KKy5JUCAiXGZCXC1tbm9cLXJlZFwtem9uZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVkLXpvbmUiCitEbyBub3QgdXNlIGEgc28tY2FsbGVkIFwqKEwicmVkIHpvbmVcKihSIiBmb3IgeDg2XC02NCBjb2RlLiAgVGhlIHJlZCB6b25lIGlzIG1hbmRhdGVkCitieSB0aGUgeDg2XC02NCBccy0xQUJJXHMwOyBpdCBpcyBhIDEyOFwtYnl0ZSBhcmVhIGJleW9uZCB0aGUgbG9jYXRpb24gb2YgdGhlCitzdGFjayBwb2ludGVyIHRoYXQgaXMgbm90IG1vZGlmaWVkIGJ5IHNpZ25hbCBvciBpbnRlcnJ1cHQgaGFuZGxlcnMKK2FuZCB0aGVyZWZvcmUgY2FuIGJlIHVzZWQgZm9yIHRlbXBvcmFyeSBkYXRhIHdpdGhvdXQgYWRqdXN0aW5nIHRoZSBzdGFjaworcG9pbnRlci4gIFRoZSBmbGFnIFxmQlwtbW5vXC1yZWRcLXpvbmVcZlIgZGlzYWJsZXMgdGhpcyByZWQgem9uZS4KKy5JUCAiXGZCXC1tY21vZGVsPXNtYWxsXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9c21hbGwiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgc21hbGwgY29kZSBtb2RlbDogdGhlIHByb2dyYW0gYW5kIGl0cyBzeW1ib2xzIG11c3QKK2JlIGxpbmtlZCBpbiB0aGUgbG93ZXIgMiBccy0xR0JcczAgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuICBQb2ludGVycyBhcmUgNjQgYml0cy4KK1Byb2dyYW1zIGNhbiBiZSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IGxpbmtlZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK2NvZGUgbW9kZWwuCisuSVAgIlxmQlwtbWNtb2RlbD1rZXJuZWxcZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1rZXJuZWwiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUga2VybmVsIGNvZGUgbW9kZWwuICBUaGUga2VybmVsIHJ1bnMgaW4gdGhlCituZWdhdGl2ZSAyIFxzLTFHQlxzMCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4KK1RoaXMgbW9kZWwgaGFzIHRvIGJlIHVzZWQgZm9yIExpbnV4IGtlcm5lbCBjb2RlLgorLklQICJcZkJcLW1jbW9kZWw9bWVkaXVtXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9bWVkaXVtIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIG1lZGl1bSBtb2RlbDogdGhlIHByb2dyYW0gaXMgbGlua2VkIGluIHRoZSBsb3dlciAyCitcJlxzLTFHQlxzMCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gIFNtYWxsIHN5bWJvbHMgYXJlIGFsc28gcGxhY2VkIHRoZXJlLiAgU3ltYm9scword2l0aCBzaXplcyBsYXJnZXIgdGhhbiBcZkJcLW1sYXJnZVwtZGF0YVwtdGhyZXNob2xkXGZSIGFyZSBwdXQgaW50bworbGFyZ2UgZGF0YSBvciBccy0xQlNTXHMwIHNlY3Rpb25zIGFuZCBjYW4gYmUgbG9jYXRlZCBhYm92ZSAyR0IuICBQcm9ncmFtcyBjYW4KK2JlIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgbGlua2VkLgorLklQICJcZkJcLW1jbW9kZWw9bGFyZ2VcZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1sYXJnZSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBsYXJnZSBtb2RlbC4gIFRoaXMgbW9kZWwgbWFrZXMgbm8gYXNzdW1wdGlvbnMKK2Fib3V0IGFkZHJlc3NlcyBhbmQgc2l6ZXMgb2Ygc2VjdGlvbnMuCisuSVAgIlxmQlwtbWFkZHJlc3NcLW1vZGU9bG9uZ1xmUiIgNAorLklYIEl0ZW0gIi1tYWRkcmVzcy1tb2RlPWxvbmciCitHZW5lcmF0ZSBjb2RlIGZvciBsb25nIGFkZHJlc3MgbW9kZS4gIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIDY0XC1iaXQKK2FuZCB4MzIgZW52aXJvbm1lbnRzLiAgSXQgaXMgdGhlIGRlZmF1bHQgYWRkcmVzcyBtb2RlIGZvciA2NFwtYml0CitlbnZpcm9ubWVudHMuCisuSVAgIlxmQlwtbWFkZHJlc3NcLW1vZGU9c2hvcnRcZlIiIDQKKy5JWCBJdGVtICItbWFkZHJlc3MtbW9kZT1zaG9ydCIKK0dlbmVyYXRlIGNvZGUgZm9yIHNob3J0IGFkZHJlc3MgbW9kZS4gIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIDMyXC1iaXQKK2FuZCB4MzIgZW52aXJvbm1lbnRzLiAgSXQgaXMgdGhlIGRlZmF1bHQgYWRkcmVzcyBtb2RlIGZvciAzMlwtYml0IGFuZAoreDMyIGVudmlyb25tZW50cy4KKy5QUAorXGZJaTM4NiBhbmQgeDg2XC02NCBXaW5kb3dzIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJpMzg2IGFuZCB4ODYtNjQgV2luZG93cyBPcHRpb25zIgorLlBQCitUaGVzZSBhZGRpdGlvbmFsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgTWljcm9zb2Z0IFdpbmRvd3MgdGFyZ2V0czoKKy5JUCAiXGZCXC1tY29uc29sZVxmUiIgNAorLklYIEl0ZW0gIi1tY29uc29sZSIKK1RoaXMgb3B0aW9uCitzcGVjaWZpZXMgdGhhdCBhIGNvbnNvbGUgYXBwbGljYXRpb24gaXMgdG8gYmUgZ2VuZXJhdGVkLCBieQoraW5zdHJ1Y3RpbmcgdGhlIGxpbmtlciB0byBzZXQgdGhlIFxzLTFQRVxzMCBoZWFkZXIgc3Vic3lzdGVtIHR5cGUKK3JlcXVpcmVkIGZvciBjb25zb2xlIGFwcGxpY2F0aW9ucy4KK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgQ3lnd2luIGFuZCBNaW5HVyB0YXJnZXRzIGFuZCBpcworZW5hYmxlZCBieSBkZWZhdWx0IG9uIHRob3NlIHRhcmdldHMuCisuSVAgIlxmQlwtbWRsbFxmUiIgNAorLklYIEl0ZW0gIi1tZGxsIgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBDeWd3aW4gYW5kIE1pbkdXIHRhcmdldHMuICBJdAorc3BlY2lmaWVzIHRoYXQgYSBETExcLVwtXC1hIGR5bmFtaWMgbGluayBsaWJyYXJ5XC1cLVwtaXMgdG8gYmUKK2dlbmVyYXRlZCwgZW5hYmxpbmcgdGhlIHNlbGVjdGlvbiBvZiB0aGUgcmVxdWlyZWQgcnVudGltZQorc3RhcnR1cCBvYmplY3QgYW5kIGVudHJ5IHBvaW50LgorLklQICJcZkJcLW1ub3BcLWZ1blwtZGxsaW1wb3J0XGZSIiA0CisuSVggSXRlbSAiLW1ub3AtZnVuLWRsbGltcG9ydCIKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgQ3lnd2luIGFuZCBNaW5HVyB0YXJnZXRzLiAgSXQKK3NwZWNpZmllcyB0aGF0IHRoZSBcZihDV1wqKENgZGxsaW1wb3J0XCooQydcZlIgYXR0cmlidXRlIHNob3VsZCBiZSBpZ25vcmVkLgorLklQICJcZkJcLW10aHJlYWRcZlIiIDQKKy5JWCBJdGVtICItbXRocmVhZCIKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgTWluR1cgdGFyZ2V0cy4gSXQgc3BlY2lmaWVzCit0aGF0IE1pbkdXLXNwZWNpZmljIHRocmVhZCBzdXBwb3J0IGlzIHRvIGJlIHVzZWQuCisuSVAgIlxmQlwtbXVuaWNvZGVcZlIiIDQKKy5JWCBJdGVtICItbXVuaWNvZGUiCitUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIE1pbkdXXC13NjQgdGFyZ2V0cy4gIEl0IGNhdXNlcwordGhlIFxmKENXXCooQ2BVTklDT0RFXCooQydcZlIgcHJlcHJvY2Vzc29yIG1hY3JvIHRvIGJlIHByZWRlZmluZWQsIGFuZAorY2hvb3NlcyBVbmljb2RlLWNhcGFibGUgcnVudGltZSBzdGFydHVwIGNvZGUuCisuSVAgIlxmQlwtbXdpbjMyXGZSIiA0CisuSVggSXRlbSAiLW13aW4zMiIKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgQ3lnd2luIGFuZCBNaW5HVyB0YXJnZXRzLiAgSXQKK3NwZWNpZmllcyB0aGF0IHRoZSB0eXBpY2FsIE1pY3Jvc29mdCBXaW5kb3dzIHByZWRlZmluZWQgbWFjcm9zIGFyZSB0bworYmUgc2V0IGluIHRoZSBwcmUtcHJvY2Vzc29yLCBidXQgZG9lcyBub3QgaW5mbHVlbmNlIHRoZSBjaG9pY2UKK29mIHJ1bnRpbWUgbGlicmFyeS9zdGFydHVwIGNvZGUuCisuSVAgIlxmQlwtbXdpbmRvd3NcZlIiIDQKKy5JWCBJdGVtICItbXdpbmRvd3MiCitUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIEN5Z3dpbiBhbmQgTWluR1cgdGFyZ2V0cy4gIEl0CitzcGVjaWZpZXMgdGhhdCBhIFxzLTFHVUlcczAgYXBwbGljYXRpb24gaXMgdG8gYmUgZ2VuZXJhdGVkIGJ5CitpbnN0cnVjdGluZyB0aGUgbGlua2VyIHRvIHNldCB0aGUgXHMtMVBFXHMwIGhlYWRlciBzdWJzeXN0ZW0gdHlwZQorYXBwcm9wcmlhdGVseS4KKy5JUCAiXGZCXC1mbm9cLXNldFwtc3RhY2tcLWV4ZWN1dGFibGVcZlIiIDQKKy5JWCBJdGVtICItZm5vLXNldC1zdGFjay1leGVjdXRhYmxlIgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBNaW5HVyB0YXJnZXRzLiBJdCBzcGVjaWZpZXMgdGhhdAordGhlIGV4ZWN1dGFibGUgZmxhZyBmb3IgdGhlIHN0YWNrIHVzZWQgYnkgbmVzdGVkIGZ1bmN0aW9ucyBpc24ndAorc2V0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgYmluYXJpZXMgcnVubmluZyBpbiBrZXJuZWwgbW9kZSBvZgorTWljcm9zb2Z0IFdpbmRvd3MsIGFzIHRoZXJlIHRoZSBVc2VyMzIgXHMtMUFQSVxzMCwgd2hpY2ggaXMgdXNlZCB0byBzZXQgZXhlY3V0YWJsZQorcHJpdmlsZWdlcywgaXNuJ3QgYXZhaWxhYmxlLgorLklQICJcZkJcLWZ3cml0YWJsZVwtcmVsb2NhdGVkXC1yZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1md3JpdGFibGUtcmVsb2NhdGVkLXJkYXRhIgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBNaW5HVyBhbmQgQ3lnd2luIHRhcmdldHMuICBJdCBzcGVjaWZpZXMKK3RoYXQgcmVsb2NhdGVkLWRhdGEgaW4gcmVhZC1vbmx5IHNlY3Rpb24gaXMgcHV0IGludG8gLmRhdGEKK3NlY3Rpb24uICBUaGlzIGlzIGEgbmVjZXNzYXJ5IGZvciBvbGRlciBydW50aW1lcyBub3Qgc3VwcG9ydGluZworbW9kaWZpY2F0aW9uIG9mIC5yZGF0YSBzZWN0aW9ucyBmb3IgcHNldWRvLXJlbG9jYXRpb24uCisuSVAgIlxmQlwtbXBlXC1hbGlnbmVkXC1jb21tb25zXGZSIiA0CisuSVggSXRlbSAiLW1wZS1hbGlnbmVkLWNvbW1vbnMiCitUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIEN5Z3dpbiBhbmQgTWluR1cgdGFyZ2V0cy4gIEl0CitzcGVjaWZpZXMgdGhhdCB0aGUgXHMtMUdOVVxzMCBleHRlbnNpb24gdG8gdGhlIFxzLTFQRVxzMCBmaWxlIGZvcm1hdCB0aGF0CitwZXJtaXRzIHRoZSBjb3JyZWN0IGFsaWdubWVudCBvZiBccy0xQ09NTU9OXHMwIHZhcmlhYmxlcyBzaG91bGQgYmUKK3VzZWQgd2hlbiBnZW5lcmF0aW5nIGNvZGUuICBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYKK1wmXHMtMUdDQ1xzMCBkZXRlY3RzIHRoYXQgdGhlIHRhcmdldCBhc3NlbWJsZXIgZm91bmQgZHVyaW5nIGNvbmZpZ3VyYXRpb24KK3N1cHBvcnRzIHRoZSBmZWF0dXJlLgorLlBQCitTZWUgYWxzbyB1bmRlciBcZkJpMzg2IGFuZCB4ODZcLTY0IE9wdGlvbnNcZlIgZm9yIHN0YW5kYXJkIG9wdGlvbnMuCisuUFAKK1xmSVxzLTFJQVwtNjRcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIklBLTY0IE9wdGlvbnMiCisuUFAKK1RoZXNlIGFyZSB0aGUgXGZCXC1tXGZSIG9wdGlvbnMgZGVmaW5lZCBmb3IgdGhlIEludGVsIFxzLTFJQVwtNjRcczAgYXJjaGl0ZWN0dXJlLgorLklQICJcZkJcLW1iaWdcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tYmlnLWVuZGlhbiIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgYmlnLWVuZGlhbiB0YXJnZXQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBIUC1VWC4KKy5JUCAiXGZCXC1tbGl0dGxlXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWxpdHRsZS1lbmRpYW4iCitHZW5lcmF0ZSBjb2RlIGZvciBhIGxpdHRsZS1lbmRpYW4gdGFyZ2V0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgXHMtMUFJWDVcczAKK2FuZCBHTlUvTGludXguCisuSVAgIlxmQlwtbWdudVwtYXNcZlIiIDQKKy5JWCBJdGVtICItbWdudS1hcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1nbnVcLWFzXGZSIiA0CisuSVggSXRlbSAiLW1uby1nbnUtYXMiCisuUEQKK0dlbmVyYXRlIChvciBkb24ndCkgY29kZSBmb3IgdGhlIFxzLTFHTlVcczAgYXNzZW1ibGVyLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tZ251XC1sZFxmUiIgNAorLklYIEl0ZW0gIi1tZ251LWxkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWdudVwtbGRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWdudS1sZCIKKy5QRAorR2VuZXJhdGUgKG9yIGRvbid0KSBjb2RlIGZvciB0aGUgXHMtMUdOVVxzMCBsaW5rZXIuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1ub1wtcGljXGZSIiA0CisuSVggSXRlbSAiLW1uby1waWMiCitHZW5lcmF0ZSBjb2RlIHRoYXQgZG9lcyBub3QgdXNlIGEgZ2xvYmFsIHBvaW50ZXIgcmVnaXN0ZXIuICBUaGUgcmVzdWx0CitpcyBub3QgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSwgYW5kIHZpb2xhdGVzIHRoZSBccy0xSUFcLTY0XHMwIFxzLTFBQklcczAuCisuSVAgIlxmQlwtbXZvbGF0aWxlXC1hc21cLXN0b3BcZlIiIDQKKy5JWCBJdGVtICItbXZvbGF0aWxlLWFzbS1zdG9wIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXZvbGF0aWxlXC1hc21cLXN0b3BcZlIiIDQKKy5JWCBJdGVtICItbW5vLXZvbGF0aWxlLWFzbS1zdG9wIgorLlBECitHZW5lcmF0ZSAob3IgZG9uJ3QpIGEgc3RvcCBiaXQgaW1tZWRpYXRlbHkgYmVmb3JlIGFuZCBhZnRlciB2b2xhdGlsZSBhc20KK3N0YXRlbWVudHMuCisuSVAgIlxmQlwtbXJlZ2lzdGVyXC1uYW1lc1xmUiIgNAorLklYIEl0ZW0gIi1tcmVnaXN0ZXItbmFtZXMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcmVnaXN0ZXJcLW5hbWVzXGZSIiA0CisuSVggSXRlbSAiLW1uby1yZWdpc3Rlci1uYW1lcyIKKy5QRAorR2VuZXJhdGUgKG9yIGRvbid0KSBcZkJpblxmUiwgXGZCbG9jXGZSLCBhbmQgXGZCb3V0XGZSIHJlZ2lzdGVyIG5hbWVzIGZvcgordGhlIHN0YWNrZWQgcmVnaXN0ZXJzLiAgVGhpcyBtYXkgbWFrZSBhc3NlbWJsZXIgb3V0cHV0IG1vcmUgcmVhZGFibGUuCisuSVAgIlxmQlwtbW5vXC1zZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2RhdGEiCisuUEQgMAorLklQICJcZkJcLW1zZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tc2RhdGEiCisuUEQKK0Rpc2FibGUgKG9yIGVuYWJsZSkgb3B0aW1pemF0aW9ucyB0aGF0IHVzZSB0aGUgc21hbGwgZGF0YSBzZWN0aW9uLiAgVGhpcyBtYXkKK2JlIHVzZWZ1bCBmb3Igd29ya2luZyBhcm91bmQgb3B0aW1pemVyIGJ1Z3MuCisuSVAgIlxmQlwtbWNvbnN0YW50XC1ncFxmUiIgNAorLklYIEl0ZW0gIi1tY29uc3RhbnQtZ3AiCitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBhIHNpbmdsZSBjb25zdGFudCBnbG9iYWwgcG9pbnRlciB2YWx1ZS4gIFRoaXMgaXMKK3VzZWZ1bCB3aGVuIGNvbXBpbGluZyBrZXJuZWwgY29kZS4KKy5JUCAiXGZCXC1tYXV0b1wtcGljXGZSIiA0CisuSVggSXRlbSAiLW1hdXRvLXBpYyIKK0dlbmVyYXRlIGNvZGUgdGhhdCBpcyBzZWxmLXJlbG9jYXRhYmxlLiAgVGhpcyBpbXBsaWVzIFxmQlwtbWNvbnN0YW50XC1ncFxmUi4KK1RoaXMgaXMgdXNlZnVsIHdoZW4gY29tcGlsaW5nIGZpcm13YXJlIGNvZGUuCisuSVAgIlxmQlwtbWlubGluZVwtZmxvYXRcLWRpdmlkZVwtbWluXC1sYXRlbmN5XGZSIiA0CisuSVggSXRlbSAiLW1pbmxpbmUtZmxvYXQtZGl2aWRlLW1pbi1sYXRlbmN5IgorR2VuZXJhdGUgY29kZSBmb3IgaW5saW5lIGRpdmlkZXMgb2YgZmxvYXRpbmctcG9pbnQgdmFsdWVzCit1c2luZyB0aGUgbWluaW11bSBsYXRlbmN5IGFsZ29yaXRobS4KKy5JUCAiXGZCXC1taW5saW5lXC1mbG9hdFwtZGl2aWRlXC1tYXhcLXRocm91Z2hwdXRcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1mbG9hdC1kaXZpZGUtbWF4LXRocm91Z2hwdXQiCitHZW5lcmF0ZSBjb2RlIGZvciBpbmxpbmUgZGl2aWRlcyBvZiBmbG9hdGluZy1wb2ludCB2YWx1ZXMKK3VzaW5nIHRoZSBtYXhpbXVtIHRocm91Z2hwdXQgYWxnb3JpdGhtLgorLklQICJcZkJcLW1ub1wtaW5saW5lXC1mbG9hdFwtZGl2aWRlXGZSIiA0CisuSVggSXRlbSAiLW1uby1pbmxpbmUtZmxvYXQtZGl2aWRlIgorRG8gbm90IGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciBkaXZpZGVzIG9mIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy5JUCAiXGZCXC1taW5saW5lXC1pbnRcLWRpdmlkZVwtbWluXC1sYXRlbmN5XGZSIiA0CisuSVggSXRlbSAiLW1pbmxpbmUtaW50LWRpdmlkZS1taW4tbGF0ZW5jeSIKK0dlbmVyYXRlIGNvZGUgZm9yIGlubGluZSBkaXZpZGVzIG9mIGludGVnZXIgdmFsdWVzCit1c2luZyB0aGUgbWluaW11bSBsYXRlbmN5IGFsZ29yaXRobS4KKy5JUCAiXGZCXC1taW5saW5lXC1pbnRcLWRpdmlkZVwtbWF4XC10aHJvdWdocHV0XGZSIiA0CisuSVggSXRlbSAiLW1pbmxpbmUtaW50LWRpdmlkZS1tYXgtdGhyb3VnaHB1dCIKK0dlbmVyYXRlIGNvZGUgZm9yIGlubGluZSBkaXZpZGVzIG9mIGludGVnZXIgdmFsdWVzCit1c2luZyB0aGUgbWF4aW11bSB0aHJvdWdocHV0IGFsZ29yaXRobS4KKy5JUCAiXGZCXC1tbm9cLWlubGluZVwtaW50XC1kaXZpZGVcZlIiIDQKKy5JWCBJdGVtICItbW5vLWlubGluZS1pbnQtZGl2aWRlIgorRG8gbm90IGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciBkaXZpZGVzIG9mIGludGVnZXIgdmFsdWVzLgorLklQICJcZkJcLW1pbmxpbmVcLXNxcnRcLW1pblwtbGF0ZW5jeVxmUiIgNAorLklYIEl0ZW0gIi1taW5saW5lLXNxcnQtbWluLWxhdGVuY3kiCitHZW5lcmF0ZSBjb2RlIGZvciBpbmxpbmUgc3F1YXJlIHJvb3RzCit1c2luZyB0aGUgbWluaW11bSBsYXRlbmN5IGFsZ29yaXRobS4KKy5JUCAiXGZCXC1taW5saW5lXC1zcXJ0XC1tYXhcLXRocm91Z2hwdXRcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1zcXJ0LW1heC10aHJvdWdocHV0IgorR2VuZXJhdGUgY29kZSBmb3IgaW5saW5lIHNxdWFyZSByb290cwordXNpbmcgdGhlIG1heGltdW0gdGhyb3VnaHB1dCBhbGdvcml0aG0uCisuSVAgIlxmQlwtbW5vXC1pbmxpbmVcLXNxcnRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWlubGluZS1zcXJ0IgorRG8gbm90IGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciBcZihDV1wqKENgc3FydFwqKEMnXGZSLgorLklQICJcZkJcLW1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tZnVzZWQtbWFkZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnVzZWQtbWFkZCIKKy5QRAorRG8gKGRvbid0KSBnZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyB0aGUgZnVzZWQgbXVsdGlwbHkvYWRkIG9yIG11bHRpcGx5L3N1YnRyYWN0CitpbnN0cnVjdGlvbnMuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlc2UgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1ub1wtZHdhcmYyXC1hc21cZlIiIDQKKy5JWCBJdGVtICItbW5vLWR3YXJmMi1hc20iCisuUEQgMAorLklQICJcZkJcLW1kd2FyZjJcLWFzbVxmUiIgNAorLklYIEl0ZW0gIi1tZHdhcmYyLWFzbSIKKy5QRAorRG9uJ3QgKG9yIGRvKSBnZW5lcmF0ZSBhc3NlbWJsZXIgY29kZSBmb3IgdGhlIFxzLTFEV0FSRlxzMCAyIGxpbmUgbnVtYmVyIGRlYnVnZ2luZworaW5mby4gIFRoaXMgbWF5IGJlIHVzZWZ1bCB3aGVuIG5vdCB1c2luZyB0aGUgXHMtMUdOVVxzMCBhc3NlbWJsZXIuCisuSVAgIlxmQlwtbWVhcmx5XC1zdG9wXC1iaXRzXGZSIiA0CisuSVggSXRlbSAiLW1lYXJseS1zdG9wLWJpdHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZWFybHlcLXN0b3BcLWJpdHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWVhcmx5LXN0b3AtYml0cyIKKy5QRAorQWxsb3cgc3RvcCBiaXRzIHRvIGJlIHBsYWNlZCBlYXJsaWVyIHRoYW4gaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZQoraW5zdHJ1Y3Rpb24gdGhhdCB0cmlnZ2VyZWQgdGhlIHN0b3AgYml0LiAgVGhpcyBjYW4gaW1wcm92ZSBpbnN0cnVjdGlvbgorc2NoZWR1bGluZywgYnV0IGRvZXMgbm90IGFsd2F5cyBkbyBzby4KKy5JUCAiXGZCXC1tZml4ZWRcLXJhbmdlPVxmUlxmSXJlZ2lzdGVyLXJhbmdlXGZSIiA0CisuSVggSXRlbSAiLW1maXhlZC1yYW5nZT1yZWdpc3Rlci1yYW5nZSIKK0dlbmVyYXRlIGNvZGUgdHJlYXRpbmcgdGhlIGdpdmVuIHJlZ2lzdGVyIHJhbmdlIGFzIGZpeGVkIHJlZ2lzdGVycy4KK0EgZml4ZWQgcmVnaXN0ZXIgaXMgb25lIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBjYW5ub3QgdXNlLiAgVGhpcyBpcwordXNlZnVsIHdoZW4gY29tcGlsaW5nIGtlcm5lbCBjb2RlLiAgQSByZWdpc3RlciByYW5nZSBpcyBzcGVjaWZpZWQgYXMKK3R3byByZWdpc3RlcnMgc2VwYXJhdGVkIGJ5IGEgZGFzaC4gIE11bHRpcGxlIHJlZ2lzdGVyIHJhbmdlcyBjYW4gYmUKK3NwZWNpZmllZCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4KKy5JUCAiXGZCXC1tdGxzXC1zaXplPVxmUlxmSXRscy1zaXplXGZSIiA0CisuSVggSXRlbSAiLW10bHMtc2l6ZT10bHMtc2l6ZSIKK1NwZWNpZnkgYml0IHNpemUgb2YgaW1tZWRpYXRlIFxzLTFUTFNcczAgb2Zmc2V0cy4gIFZhbGlkIHZhbHVlcyBhcmUgMTQsIDIyLCBhbmQKKzY0LgorLklQICJcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW10dW5lPWNwdS10eXBlIgorVHVuZSB0aGUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBmb3IgYSBwYXJ0aWN1bGFyIFxzLTFDUFVcczAsIFZhbGlkIHZhbHVlcyBhcmUKK1wmXGZCaXRhbml1bVxmUiwgXGZCaXRhbml1bTFcZlIsIFxmQm1lcmNlZFxmUiwgXGZCaXRhbml1bTJcZlIsCithbmQgXGZCbWNraW5sZXlcZlIuCisuSVAgIlxmQlwtbWlscDMyXGZSIiA0CisuSVggSXRlbSAiLW1pbHAzMiIKKy5QRCAwCisuSVAgIlxmQlwtbWxwNjRcZlIiIDQKKy5JWCBJdGVtICItbWxwNjQiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIGEgMzJcLWJpdCBvciA2NFwtYml0IGVudmlyb25tZW50LgorVGhlIDMyXC1iaXQgZW52aXJvbm1lbnQgc2V0cyBpbnQsIGxvbmcgYW5kIHBvaW50ZXIgdG8gMzIgYml0cy4KK1RoZSA2NFwtYml0IGVudmlyb25tZW50IHNldHMgaW50IHRvIDMyIGJpdHMgYW5kIGxvbmcgYW5kIHBvaW50ZXIKK3RvIDY0IGJpdHMuICBUaGVzZSBhcmUgSFAtVVggc3BlY2lmaWMgZmxhZ3MuCisuSVAgIlxmQlwtbW5vXC1zY2hlZFwtYnJcLWRhdGFcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLWJyLWRhdGEtc3BlYyIKKy5QRCAwCisuSVAgIlxmQlwtbXNjaGVkXC1iclwtZGF0YVwtc3BlY1xmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtYnItZGF0YS1zcGVjIgorLlBECisoRGlzL0VuKWFibGUgZGF0YSBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nIGJlZm9yZSByZWxvYWQuCitUaGlzIHJlc3VsdHMgaW4gZ2VuZXJhdGlvbiBvZiBcZihDV1wqKENgbGQuYVwqKEMnXGZSIGluc3RydWN0aW9ucyBhbmQKK3RoZSBjb3JyZXNwb25kaW5nIGNoZWNrIGluc3RydWN0aW9ucyAoXGYoQ1dcKihDYGxkLmNcKihDJ1xmUiAvIFxmKENXXCooQ2BjaGsuYVwqKEMnXGZSKS4KK1RoZSBkZWZhdWx0IGlzICdkaXNhYmxlJy4KKy5JUCAiXGZCXC1tc2NoZWRcLWFyXC1kYXRhXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1hci1kYXRhLXNwZWMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc2NoZWRcLWFyXC1kYXRhXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1hci1kYXRhLXNwZWMiCisuUEQKKyhFbi9EaXMpYWJsZSBkYXRhIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcgYWZ0ZXIgcmVsb2FkLgorVGhpcyByZXN1bHRzIGluIGdlbmVyYXRpb24gb2YgXGYoQ1dcKihDYGxkLmFcKihDJ1xmUiBpbnN0cnVjdGlvbnMgYW5kCit0aGUgY29ycmVzcG9uZGluZyBjaGVjayBpbnN0cnVjdGlvbnMgKFxmKENXXCooQ2BsZC5jXCooQydcZlIgLyBcZihDV1wqKENgY2hrLmFcKihDJ1xmUikuCitUaGUgZGVmYXVsdCBpcyAnZW5hYmxlJy4KKy5JUCAiXGZCXC1tbm9cLXNjaGVkXC1jb250cm9sXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1jb250cm9sLXNwZWMiCisuUEQgMAorLklQICJcZkJcLW1zY2hlZFwtY29udHJvbFwtc3BlY1xmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtY29udHJvbC1zcGVjIgorLlBECisoRGlzL0VuKWFibGUgY29udHJvbCBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nLiAgVGhpcyBmZWF0dXJlIGlzCithdmFpbGFibGUgb25seSBkdXJpbmcgcmVnaW9uIHNjaGVkdWxpbmcgKGkuZS4gYmVmb3JlIHJlbG9hZCkuCitUaGlzIHJlc3VsdHMgaW4gZ2VuZXJhdGlvbiBvZiB0aGUgXGYoQ1dcKihDYGxkLnNcKihDJ1xmUiBpbnN0cnVjdGlvbnMgYW5kCit0aGUgY29ycmVzcG9uZGluZyBjaGVjayBpbnN0cnVjdGlvbnMgXGYoQ1dcKihDYGNoay5zXCooQydcZlIuCitUaGUgZGVmYXVsdCBpcyAnZGlzYWJsZScuCisuSVAgIlxmQlwtbXNjaGVkXC1iclwtaW5cLWRhdGFcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLWJyLWluLWRhdGEtc3BlYyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zY2hlZFwtYnJcLWluXC1kYXRhXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1ici1pbi1kYXRhLXNwZWMiCisuUEQKKyhFbi9EaXMpYWJsZSBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nIG9mIHRoZSBpbnN0cnVjdGlvbnMgdGhhdAorYXJlIGRlcGVuZGVudCBvbiB0aGUgZGF0YSBzcGVjdWxhdGl2ZSBsb2FkcyBiZWZvcmUgcmVsb2FkLgorVGhpcyBpcyBlZmZlY3RpdmUgb25seSB3aXRoIFxmQlwtbXNjaGVkXC1iclwtZGF0YVwtc3BlY1xmUiBlbmFibGVkLgorVGhlIGRlZmF1bHQgaXMgJ2VuYWJsZScuCisuSVAgIlxmQlwtbXNjaGVkXC1hclwtaW5cLWRhdGFcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLWFyLWluLWRhdGEtc3BlYyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zY2hlZFwtYXJcLWluXC1kYXRhXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1hci1pbi1kYXRhLXNwZWMiCisuUEQKKyhFbi9EaXMpYWJsZSBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nIG9mIHRoZSBpbnN0cnVjdGlvbnMgdGhhdAorYXJlIGRlcGVuZGVudCBvbiB0aGUgZGF0YSBzcGVjdWxhdGl2ZSBsb2FkcyBhZnRlciByZWxvYWQuCitUaGlzIGlzIGVmZmVjdGl2ZSBvbmx5IHdpdGggXGZCXC1tc2NoZWRcLWFyXC1kYXRhXC1zcGVjXGZSIGVuYWJsZWQuCitUaGUgZGVmYXVsdCBpcyAnZW5hYmxlJy4KKy5JUCAiXGZCXC1tc2NoZWRcLWluXC1jb250cm9sXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1pbi1jb250cm9sLXNwZWMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc2NoZWRcLWluXC1jb250cm9sXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1pbi1jb250cm9sLXNwZWMiCisuUEQKKyhFbi9EaXMpYWJsZSBzcGVjdWxhdGl2ZSBzY2hlZHVsaW5nIG9mIHRoZSBpbnN0cnVjdGlvbnMgdGhhdAorYXJlIGRlcGVuZGVudCBvbiB0aGUgY29udHJvbCBzcGVjdWxhdGl2ZSBsb2Fkcy4KK1RoaXMgaXMgZWZmZWN0aXZlIG9ubHkgd2l0aCBcZkJcLW1zY2hlZFwtY29udHJvbFwtc3BlY1xmUiBlbmFibGVkLgorVGhlIGRlZmF1bHQgaXMgJ2VuYWJsZScuCisuSVAgIlxmQlwtbW5vXC1zY2hlZFwtcHJlZmVyXC1ub25cLWRhdGFcLXNwZWNcLWluc25zXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1wcmVmZXItbm9uLWRhdGEtc3BlYy1pbnNucyIKKy5QRCAwCisuSVAgIlxmQlwtbXNjaGVkXC1wcmVmZXJcLW5vblwtZGF0YVwtc3BlY1wtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLXByZWZlci1ub24tZGF0YS1zcGVjLWluc25zIgorLlBECitJZiBlbmFibGVkLCBkYXRhLXNwZWN1bGF0aXZlIGluc3RydWN0aW9ucyBhcmUgY2hvc2VuIGZvciBzY2hlZHVsZQorb25seSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgY2hvaWNlcyBhdCB0aGUgbW9tZW50LiAgVGhpcyBtYWtlcwordGhlIHVzZSBvZiB0aGUgZGF0YSBzcGVjdWxhdGlvbiBtdWNoIG1vcmUgY29uc2VydmF0aXZlLgorVGhlIGRlZmF1bHQgaXMgJ2Rpc2FibGUnLgorLklQICJcZkJcLW1ub1wtc2NoZWRcLXByZWZlclwtbm9uXC1jb250cm9sXC1zcGVjXC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2NoZWQtcHJlZmVyLW5vbi1jb250cm9sLXNwZWMtaW5zbnMiCisuUEQgMAorLklQICJcZkJcLW1zY2hlZFwtcHJlZmVyXC1ub25cLWNvbnRyb2xcLXNwZWNcLWluc25zXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1wcmVmZXItbm9uLWNvbnRyb2wtc3BlYy1pbnNucyIKKy5QRAorSWYgZW5hYmxlZCwgY29udHJvbC1zcGVjdWxhdGl2ZSBpbnN0cnVjdGlvbnMgYXJlIGNob3NlbiBmb3Igc2NoZWR1bGUKK29ubHkgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGNob2ljZXMgYXQgdGhlIG1vbWVudC4gIFRoaXMgbWFrZXMKK3RoZSB1c2Ugb2YgdGhlIGNvbnRyb2wgc3BlY3VsYXRpb24gbXVjaCBtb3JlIGNvbnNlcnZhdGl2ZS4KK1RoZSBkZWZhdWx0IGlzICdkaXNhYmxlJy4KKy5JUCAiXGZCXC1tbm9cLXNjaGVkXC1jb3VudFwtc3BlY1wtaW5cLWNyaXRpY2FsXC1wYXRoXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1jb3VudC1zcGVjLWluLWNyaXRpY2FsLXBhdGgiCisuUEQgMAorLklQICJcZkJcLW1zY2hlZFwtY291bnRcLXNwZWNcLWluXC1jcml0aWNhbFwtcGF0aFxmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtY291bnQtc3BlYy1pbi1jcml0aWNhbC1wYXRoIgorLlBECitJZiBlbmFibGVkLCBzcGVjdWxhdGl2ZSBkZXBlbmRlbmNpZXMgYXJlIGNvbnNpZGVyZWQgZHVyaW5nCitjb21wdXRhdGlvbiBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHByaW9yaXRpZXMuICBUaGlzIG1ha2VzIHRoZSB1c2Ugb2YgdGhlCitzcGVjdWxhdGlvbiBhIGJpdCBtb3JlIGNvbnNlcnZhdGl2ZS4KK1RoZSBkZWZhdWx0IGlzICdkaXNhYmxlJy4KKy5JUCAiXGZCXC1tc2NoZWRcLXNwZWNcLWxkY1xmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtc3BlYy1sZGMiCitVc2UgYSBzaW1wbGUgZGF0YSBzcGVjdWxhdGlvbiBjaGVjay4gIFRoaXMgb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbXNjaGVkXC1jb250cm9sXC1zcGVjXC1sZGNcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLWNvbnRyb2wtc3BlYy1sZGMiCitVc2UgYSBzaW1wbGUgY2hlY2sgZm9yIGNvbnRyb2wgc3BlY3VsYXRpb24uICBUaGlzIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0LgorLklQICJcZkJcLW1zY2hlZFwtc3RvcFwtYml0c1wtYWZ0ZXJcLWV2ZXJ5XC1jeWNsZVxmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtc3RvcC1iaXRzLWFmdGVyLWV2ZXJ5LWN5Y2xlIgorUGxhY2UgYSBzdG9wIGJpdCBhZnRlciBldmVyeSBjeWNsZSB3aGVuIHNjaGVkdWxpbmcuICBUaGlzIG9wdGlvbiBpcyBvbgorYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tc2NoZWRcLWZwXC1tZW1cLWRlcHNcLXplcm9cLWNvc3RcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLWZwLW1lbS1kZXBzLXplcm8tY29zdCIKK0Fzc3VtZSB0aGF0IGZsb2F0aW5nLXBvaW50IHN0b3JlcyBhbmQgbG9hZHMgYXJlIG5vdCBsaWtlbHkgdG8gY2F1c2UgYSBjb25mbGljdAord2hlbiBwbGFjZWQgaW50byB0aGUgc2FtZSBpbnN0cnVjdGlvbiBncm91cC4gIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5CitkZWZhdWx0LgorLklQICJcZkJcLW1zZWxcLXNjaGVkXC1kb250XC1jaGVja1wtY29udHJvbFwtc3BlY1xmUiIgNAorLklYIEl0ZW0gIi1tc2VsLXNjaGVkLWRvbnQtY2hlY2stY29udHJvbC1zcGVjIgorR2VuZXJhdGUgY2hlY2tzIGZvciBjb250cm9sIHNwZWN1bGF0aW9uIGluIHNlbGVjdGl2ZSBzY2hlZHVsaW5nLgorVGhpcyBmbGFnIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbXNjaGVkXC1tYXhcLW1lbW9yeVwtaW5zbnM9XGZSXGZJbWF4LWluc25zXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1tYXgtbWVtb3J5LWluc25zPW1heC1pbnNucyIKK0xpbWl0IG9uIHRoZSBudW1iZXIgb2YgbWVtb3J5IGluc25zIHBlciBpbnN0cnVjdGlvbiBncm91cCwgZ2l2aW5nIGxvd2VyCitwcmlvcml0eSB0byBzdWJzZXF1ZW50IG1lbW9yeSBpbnNucyBhdHRlbXB0aW5nIHRvIHNjaGVkdWxlIGluIHRoZSBzYW1lCitpbnN0cnVjdGlvbiBncm91cC4gRnJlcXVlbnRseSB1c2VmdWwgdG8gcHJldmVudCBjYWNoZSBiYW5rIGNvbmZsaWN0cy4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEuCisuSVAgIlxmQlwtbXNjaGVkXC1tYXhcLW1lbW9yeVwtaW5zbnNcLWhhcmRcLWxpbWl0XGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1tYXgtbWVtb3J5LWluc25zLWhhcmQtbGltaXQiCitNYWtlcyB0aGUgbGltaXQgc3BlY2lmaWVkIGJ5IFxmQm1zY2hlZC1tYXgtbWVtb3J5LWluc25zXGZSIGEgaGFyZCBsaW1pdCwKK2Rpc2FsbG93aW5nIG1vcmUgdGhhbiB0aGF0IG51bWJlciBpbiBhbiBpbnN0cnVjdGlvbiBncm91cC4KK090aGVyd2lzZSwgdGhlIGxpbWl0IGlzIFwqKEwic29mdFwqKFIiLCBtZWFuaW5nIHRoYXQgbm9uLW1lbW9yeSBvcGVyYXRpb25zCithcmUgcHJlZmVycmVkIHdoZW4gdGhlIGxpbWl0IGlzIHJlYWNoZWQsIGJ1dCBtZW1vcnkgb3BlcmF0aW9ucyBtYXkgc3RpbGwKK2JlIHNjaGVkdWxlZC4KKy5QUAorXGZJXHMtMUxNMzJcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkxNMzIgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBMYXR0aWNlTWljbzMyIGFyY2hpdGVjdHVyZToKKy5JUCAiXGZCXC1tYmFycmVsXC1zaGlmdFwtZW5hYmxlZFxmUiIgNAorLklYIEl0ZW0gIi1tYmFycmVsLXNoaWZ0LWVuYWJsZWQiCitFbmFibGUgYmFycmVsLXNoaWZ0IGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tZGl2aWRlXC1lbmFibGVkXGZSIiA0CisuSVggSXRlbSAiLW1kaXZpZGUtZW5hYmxlZCIKK0VuYWJsZSBkaXZpZGUgYW5kIG1vZHVsdXMgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1tdWx0aXBseVwtZW5hYmxlZFxmUiIgNAorLklYIEl0ZW0gIi1tbXVsdGlwbHktZW5hYmxlZCIKK0VuYWJsZSBtdWx0aXBseSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXNpZ25cLWV4dGVuZFwtZW5hYmxlZFxmUiIgNAorLklYIEl0ZW0gIi1tc2lnbi1leHRlbmQtZW5hYmxlZCIKK0VuYWJsZSBzaWduIGV4dGVuZCBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXVzZXJcLWVuYWJsZWRcZlIiIDQKKy5JWCBJdGVtICItbXVzZXItZW5hYmxlZCIKK0VuYWJsZSB1c2VyLWRlZmluZWQgaW5zdHJ1Y3Rpb25zLgorLlBQCitcZklNMzJDIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJNMzJDIE9wdGlvbnMiCisuSVAgIlxmQlwtbWNwdT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9bmFtZSIKK1NlbGVjdCB0aGUgXHMtMUNQVVxzMCBmb3Igd2hpY2ggY29kZSBpcyBnZW5lcmF0ZWQuICBcZkluYW1lXGZSIG1heSBiZSBvbmUgb2YKK1wmXGZCcjhjXGZSIGZvciB0aGUgUjhDL1Rpbnkgc2VyaWVzLCBcZkJtMTZjXGZSIGZvciB0aGUgTTE2QyAodXAgdG8KKy82MCkgc2VyaWVzLCBcZkJtMzJjbVxmUiBmb3IgdGhlIE0xNkMvODAgc2VyaWVzLCBvciBcZkJtMzJjXGZSIGZvcgordGhlIE0zMkMvODAgc2VyaWVzLgorLklQICJcZkJcLW1zaW1cZlIiIDQKKy5JWCBJdGVtICItbXNpbSIKK1NwZWNpZmllcyB0aGF0IHRoZSBwcm9ncmFtIHdpbGwgYmUgcnVuIG9uIHRoZSBzaW11bGF0b3IuICBUaGlzIGNhdXNlcworYW4gYWx0ZXJuYXRlIHJ1bnRpbWUgbGlicmFyeSB0byBiZSBsaW5rZWQgaW4gd2hpY2ggc3VwcG9ydHMsIGZvcgorZXhhbXBsZSwgZmlsZSBJL08uICBZb3UgbXVzdCBub3QgdXNlIHRoaXMgb3B0aW9uIHdoZW4gZ2VuZXJhdGluZworcHJvZ3JhbXMgdGhhdCB3aWxsIHJ1biBvbiByZWFsIGhhcmR3YXJlOyB5b3UgbXVzdCBwcm92aWRlIHlvdXIgb3duCitydW50aW1lIGxpYnJhcnkgZm9yIHdoYXRldmVyIEkvTyBmdW5jdGlvbnMgYXJlIG5lZWRlZC4KKy5JUCAiXGZCXC1tZW1yZWdzPVxmUlxmSW51bWJlclxmUiIgNAorLklYIEl0ZW0gIi1tZW1yZWdzPW51bWJlciIKK1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIG1lbW9yeS1iYXNlZCBwc2V1ZG8tcmVnaXN0ZXJzIFxzLTFHQ0NcczAgdXNlcworZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4gIFRoZXNlIHBzZXVkby1yZWdpc3RlcnMgYXJlIHVzZWQgbGlrZSByZWFsCityZWdpc3RlcnMsIHNvIHRoZXJlIGlzIGEgdHJhZGVvZmYgYmV0d2VlbiBccy0xR0NDXHMwJ3MgYWJpbGl0eSB0byBmaXQgdGhlCitjb2RlIGludG8gYXZhaWxhYmxlIHJlZ2lzdGVycywgYW5kIHRoZSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9mIHVzaW5nCittZW1vcnkgaW5zdGVhZCBvZiByZWdpc3RlcnMuICBOb3RlIHRoYXQgYWxsIG1vZHVsZXMgaW4gYSBwcm9ncmFtIG11c3QKK2JlIGNvbXBpbGVkIHdpdGggdGhlIHNhbWUgdmFsdWUgZm9yIHRoaXMgb3B0aW9uLiAgQmVjYXVzZSBvZiB0aGF0LCB5b3UKK211c3Qgbm90IHVzZSB0aGlzIG9wdGlvbiB3aXRoIFxzLTFHQ0NcczAncyBkZWZhdWx0IHJ1bnRpbWUgbGlicmFyaWVzLgorLlBQCitcZklNMzJSL0QgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIk0zMlIvRCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgUmVuZXNhcyBNMzJSL0QgYXJjaGl0ZWN0dXJlczoKKy5JUCAiXGZCXC1tMzJyMlxmUiIgNAorLklYIEl0ZW0gIi1tMzJyMiIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBNMzJSLzIuCisuSVAgIlxmQlwtbTMycnhcZlIiIDQKKy5JWCBJdGVtICItbTMycngiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgTTMyUi9YLgorLklQICJcZkJcLW0zMnJcZlIiIDQKKy5JWCBJdGVtICItbTMyciIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBNMzJSLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbW9kZWw9c21hbGxcZlIiIDQKKy5JWCBJdGVtICItbW1vZGVsPXNtYWxsIgorQXNzdW1lIGFsbCBvYmplY3RzIGxpdmUgaW4gdGhlIGxvd2VyIDE2TUIgb2YgbWVtb3J5IChzbyB0aGF0IHRoZWlyIGFkZHJlc3NlcworY2FuIGJlIGxvYWRlZCB3aXRoIHRoZSBcZihDV1wqKENgbGQyNFwqKEMnXGZSIGluc3RydWN0aW9uKSwgYW5kIGFzc3VtZSBhbGwgc3Vicm91dGluZXMKK2FyZSByZWFjaGFibGUgd2l0aCB0aGUgXGYoQ1dcKihDYGJsXCooQydcZlIgaW5zdHJ1Y3Rpb24uCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorLlNwCitUaGUgYWRkcmVzc2FiaWxpdHkgb2YgYSBwYXJ0aWN1bGFyIG9iamVjdCBjYW4gYmUgc2V0IHdpdGggdGhlCitcJlxmKENXXCooQ2Btb2RlbFwqKEMnXGZSIGF0dHJpYnV0ZS4KKy5JUCAiXGZCXC1tbW9kZWw9bWVkaXVtXGZSIiA0CisuSVggSXRlbSAiLW1tb2RlbD1tZWRpdW0iCitBc3N1bWUgb2JqZWN0cyBtYXkgYmUgYW55d2hlcmUgaW4gdGhlIDMyXC1iaXQgYWRkcmVzcyBzcGFjZSAodGhlIGNvbXBpbGVyCitnZW5lcmF0ZXMgXGYoQ1dcKihDYHNldGgvYWRkM1wqKEMnXGZSIGluc3RydWN0aW9ucyB0byBsb2FkIHRoZWlyIGFkZHJlc3NlcyksIGFuZAorYXNzdW1lIGFsbCBzdWJyb3V0aW5lcyBhcmUgcmVhY2hhYmxlIHdpdGggdGhlIFxmKENXXCooQ2BibFwqKEMnXGZSIGluc3RydWN0aW9uLgorLklQICJcZkJcLW1tb2RlbD1sYXJnZVxmUiIgNAorLklYIEl0ZW0gIi1tbW9kZWw9bGFyZ2UiCitBc3N1bWUgb2JqZWN0cyBtYXkgYmUgYW55d2hlcmUgaW4gdGhlIDMyXC1iaXQgYWRkcmVzcyBzcGFjZSAodGhlIGNvbXBpbGVyCitnZW5lcmF0ZXMgXGYoQ1dcKihDYHNldGgvYWRkM1wqKEMnXGZSIGluc3RydWN0aW9ucyB0byBsb2FkIHRoZWlyIGFkZHJlc3NlcyksIGFuZAorYXNzdW1lIHN1YnJvdXRpbmVzIG1heSBub3QgYmUgcmVhY2hhYmxlIHdpdGggdGhlIFxmKENXXCooQ2BibFwqKEMnXGZSIGluc3RydWN0aW9uCisodGhlIGNvbXBpbGVyIGdlbmVyYXRlcyB0aGUgbXVjaCBzbG93ZXIgXGYoQ1dcKihDYHNldGgvYWRkMy9qbFwqKEMnXGZSCitpbnN0cnVjdGlvbiBzZXF1ZW5jZSkuCisuSVAgIlxmQlwtbXNkYXRhPW5vbmVcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhPW5vbmUiCitEaXNhYmxlIHVzZSBvZiB0aGUgc21hbGwgZGF0YSBhcmVhLiAgVmFyaWFibGVzIGFyZSBwdXQgaW50bworb25lIG9mIFxmQi5kYXRhXGZSLCBcZkIuYnNzXGZSLCBvciBcZkIucm9kYXRhXGZSICh1bmxlc3MgdGhlCitcJlxmKENXXCooQ2BzZWN0aW9uXCooQydcZlIgYXR0cmlidXRlIGhhcyBiZWVuIHNwZWNpZmllZCkuCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorLlNwCitUaGUgc21hbGwgZGF0YSBhcmVhIGNvbnNpc3RzIG9mIHNlY3Rpb25zIFxmQi5zZGF0YVxmUiBhbmQgXGZCLnNic3NcZlIuCitPYmplY3RzIG1heSBiZSBleHBsaWNpdGx5IHB1dCBpbiB0aGUgc21hbGwgZGF0YSBhcmVhIHdpdGggdGhlCitcJlxmKENXXCooQ2BzZWN0aW9uXCooQydcZlIgYXR0cmlidXRlIHVzaW5nIG9uZSBvZiB0aGVzZSBzZWN0aW9ucy4KKy5JUCAiXGZCXC1tc2RhdGE9c2RhdGFcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhPXNkYXRhIgorUHV0IHNtYWxsIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlIHNtYWxsIGRhdGEgYXJlYSwgYnV0IGRvIG5vdAorZ2VuZXJhdGUgc3BlY2lhbCBjb2RlIHRvIHJlZmVyZW5jZSB0aGVtLgorLklQICJcZkJcLW1zZGF0YT11c2VcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhPXVzZSIKK1B1dCBzbWFsbCBnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSBzbWFsbCBkYXRhIGFyZWEsIGFuZCBnZW5lcmF0ZQorc3BlY2lhbCBpbnN0cnVjdGlvbnMgdG8gcmVmZXJlbmNlIHRoZW0uCisuSVAgIlxmQlwtR1xmUiBcZkludW1cZlIiIDQKKy5JWCBJdGVtICItRyBudW0iCitQdXQgZ2xvYmFsIGFuZCBzdGF0aWMgb2JqZWN0cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gXGZJbnVtXGZSIGJ5dGVzCitpbnRvIHRoZSBzbWFsbCBkYXRhIG9yIFxzLTFCU1NcczAgc2VjdGlvbnMgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGRhdGEgb3IgXHMtMUJTU1xzMAorc2VjdGlvbnMuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBcZkludW1cZlIgaXMgOC4KK1RoZSBcZkJcLW1zZGF0YVxmUiBvcHRpb24gbXVzdCBiZSBzZXQgdG8gb25lIG9mIFxmQnNkYXRhXGZSIG9yIFxmQnVzZVxmUgorZm9yIHRoaXMgb3B0aW9uIHRvIGhhdmUgYW55IGVmZmVjdC4KKy5TcAorQWxsIG1vZHVsZXMgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGggdGhlIHNhbWUgXGZCXC1HXGZSIFxmSW51bVxmUiB2YWx1ZS4KK0NvbXBpbGluZyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgb2YgXGZJbnVtXGZSIG1heSBvciBtYXkgbm90IHdvcms7IGlmIGl0Citkb2Vzbid0IHRoZSBsaW5rZXIgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZVwtXC1cLWluY29ycmVjdCBjb2RlIGlzIG5vdAorZ2VuZXJhdGVkLgorLklQICJcZkJcLW1kZWJ1Z1xmUiIgNAorLklYIEl0ZW0gIi1tZGVidWciCitNYWtlcyB0aGUgTTMyUlwtc3BlY2lmaWMgY29kZSBpbiB0aGUgY29tcGlsZXIgZGlzcGxheSBzb21lIHN0YXRpc3RpY3MKK3RoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcgcHJvZ3JhbXMuCisuSVAgIlxmQlwtbWFsaWduXC1sb29wc1xmUiIgNAorLklYIEl0ZW0gIi1tYWxpZ24tbG9vcHMiCitBbGlnbiBhbGwgbG9vcHMgdG8gYSAzMlwtYnl0ZSBib3VuZGFyeS4KKy5JUCAiXGZCXC1tbm9cLWFsaWduXC1sb29wc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tYWxpZ24tbG9vcHMiCitEbyBub3QgZW5mb3JjZSBhIDMyXC1ieXRlIGFsaWdubWVudCBmb3IgbG9vcHMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1pc3N1ZVwtcmF0ZT1cZlJcZkludW1iZXJcZlIiIDQKKy5JWCBJdGVtICItbWlzc3VlLXJhdGU9bnVtYmVyIgorSXNzdWUgXGZJbnVtYmVyXGZSIGluc3RydWN0aW9ucyBwZXIgY3ljbGUuICBcZkludW1iZXJcZlIgY2FuIG9ubHkgYmUgMQorb3IgMi4KKy5JUCAiXGZCXC1tYnJhbmNoXC1jb3N0PVxmUlxmSW51bWJlclxmUiIgNAorLklYIEl0ZW0gIi1tYnJhbmNoLWNvc3Q9bnVtYmVyIgorXCZcZkludW1iZXJcZlIgY2FuIG9ubHkgYmUgMSBvciAyLiAgSWYgaXQgaXMgMSB0aGVuIGJyYW5jaGVzIGFyZQorcHJlZmVycmVkIG92ZXIgY29uZGl0aW9uYWwgY29kZSwgaWYgaXQgaXMgMiwgdGhlbiB0aGUgb3Bwb3NpdGUgYXBwbGllcy4KKy5JUCAiXGZCXC1tZmx1c2hcLXRyYXA9XGZSXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAiLW1mbHVzaC10cmFwPW51bWJlciIKK1NwZWNpZmllcyB0aGUgdHJhcCBudW1iZXIgdG8gdXNlIHRvIGZsdXNoIHRoZSBjYWNoZS4gIFRoZSBkZWZhdWx0IGlzCisxMi4gIFZhbGlkIG51bWJlcnMgYXJlIGJldHdlZW4gMCBhbmQgMTUgaW5jbHVzaXZlLgorLklQICJcZkJcLW1ub1wtZmx1c2hcLXRyYXBcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZsdXNoLXRyYXAiCitTcGVjaWZpZXMgdGhhdCB0aGUgY2FjaGUgY2Fubm90IGJlIGZsdXNoZWQgYnkgdXNpbmcgYSB0cmFwLgorLklQICJcZkJcLW1mbHVzaFwtZnVuYz1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1mbHVzaC1mdW5jPW5hbWUiCitTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZnVuY3Rpb24gdG8gY2FsbCB0byBmbHVzaAordGhlIGNhY2hlLiAgVGhlIGRlZmF1bHQgaXMgXGZJX2ZsdXNoX2NhY2hlXGZSLCBidXQgYSBmdW5jdGlvbiBjYWxsCitpcyBvbmx5IHVzZWQgaWYgYSB0cmFwIGlzIG5vdCBhdmFpbGFibGUuCisuSVAgIlxmQlwtbW5vXC1mbHVzaFwtZnVuY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZmx1c2gtZnVuYyIKK0luZGljYXRlcyB0aGF0IHRoZXJlIGlzIG5vIFxzLTFPU1xzMCBmdW5jdGlvbiBmb3IgZmx1c2hpbmcgdGhlIGNhY2hlLgorLlBQCitcZklNNjgweDAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIk02ODB4MCBPcHRpb25zIgorLlBQCitUaGVzZSBhcmUgdGhlIFxmQlwtbVxmUiBvcHRpb25zIGRlZmluZWQgZm9yIE02ODB4MCBhbmQgQ29sZEZpcmUgcHJvY2Vzc29ycy4KK1RoZSBkZWZhdWx0IHNldHRpbmdzIGRlcGVuZCBvbiB3aGljaCBhcmNoaXRlY3R1cmUgd2FzIHNlbGVjdGVkIHdoZW4KK3RoZSBjb21waWxlciB3YXMgY29uZmlndXJlZDsgdGhlIGRlZmF1bHRzIGZvciB0aGUgbW9zdCBjb21tb24gY2hvaWNlcworYXJlIGdpdmVuIGJlbG93LgorLklQICJcZkJcLW1hcmNoPVxmUlxmSWFyY2hcZlIiIDQKKy5JWCBJdGVtICItbWFyY2g9YXJjaCIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgc3BlY2lmaWMgTTY4MHgwIG9yIENvbGRGaXJlIGluc3RydWN0aW9uIHNldAorYXJjaGl0ZWN0dXJlLiAgUGVybWlzc2libGUgdmFsdWVzIG9mIFxmSWFyY2hcZlIgZm9yIE02ODB4MAorYXJjaGl0ZWN0dXJlcyBhcmU6IFxmQjY4MDAwXGZSLCBcZkI2ODAxMFxmUiwgXGZCNjgwMjBcZlIsCitcJlxmQjY4MDMwXGZSLCBcZkI2ODA0MFxmUiwgXGZCNjgwNjBcZlIgYW5kIFxmQmNwdTMyXGZSLiAgQ29sZEZpcmUKK2FyY2hpdGVjdHVyZXMgYXJlIHNlbGVjdGVkIGFjY29yZGluZyB0byBGcmVlc2NhbGUncyBccy0xSVNBXHMwIGNsYXNzaWZpY2F0aW9uCithbmQgdGhlIHBlcm1pc3NpYmxlIHZhbHVlcyBhcmU6IFxmQmlzYWFcZlIsIFxmQmlzYWFwbHVzXGZSLAorXCZcZkJpc2FiXGZSIGFuZCBcZkJpc2FjXGZSLgorLlNwCitcJlxzLTFHQ0NcczAgZGVmaW5lcyBhIG1hY3JvIFxmQl9cfF9tY2ZcZlJcZklhcmNoXGZSXGZCX1x8X1xmUiB3aGVuZXZlciBpdCBpcyBnZW5lcmF0aW5nCitjb2RlIGZvciBhIENvbGRGaXJlIHRhcmdldC4gIFRoZSBcZklhcmNoXGZSIGluIHRoaXMgbWFjcm8gaXMgb25lIG9mIHRoZQorXCZcZkJcLW1hcmNoXGZSIGFyZ3VtZW50cyBnaXZlbiBhYm92ZS4KKy5TcAorV2hlbiB1c2VkIHRvZ2V0aGVyLCBcZkJcLW1hcmNoXGZSIGFuZCBcZkJcLW10dW5lXGZSIHNlbGVjdCBjb2RlCit0aGF0IHJ1bnMgb24gYSBmYW1pbHkgb2Ygc2ltaWxhciBwcm9jZXNzb3JzIGJ1dCB0aGF0IGlzIG9wdGltaXplZAorZm9yIGEgcGFydGljdWxhciBtaWNyb2FyY2hpdGVjdHVyZS4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSWNwdVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PWNwdSIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgc3BlY2lmaWMgTTY4MHgwIG9yIENvbGRGaXJlIHByb2Nlc3Nvci4KK1RoZSBNNjgweDAgXGZJY3B1XGZScyBhcmU6IFxmQjY4MDAwXGZSLCBcZkI2ODAxMFxmUiwgXGZCNjgwMjBcZlIsCitcJlxmQjY4MDMwXGZSLCBcZkI2ODA0MFxmUiwgXGZCNjgwNjBcZlIsIFxmQjY4MzAyXGZSLCBcZkI2ODMzMlxmUgorYW5kIFxmQmNwdTMyXGZSLiAgVGhlIENvbGRGaXJlIFxmSWNwdVxmUnMgYXJlIGdpdmVuIGJ5IHRoZSB0YWJsZQorYmVsb3csIHdoaWNoIGFsc28gY2xhc3NpZmllcyB0aGUgQ1BVcyBpbnRvIGZhbWlsaWVzOgorLlJTIDQKKy5JUCAiRmFtaWx5IDogXGZCXC1tY3B1XGZSIGFyZ3VtZW50cyIgNAorLklYIEl0ZW0gIkZhbWlseSA6IC1tY3B1IGFyZ3VtZW50cyIKKy5QRCAwCisuSVAgIlxmQjUxXGZSIDogXGZCNTFcZlIgXGZCNTFhY1xmUiBcZkI1MWFnXGZSIFxmQjUxY25cZlIgXGZCNTFlbVxmUiBcZkI1MWplXGZSIFxmQjUxamZcZlIgXGZCNTFqZ1xmUiBcZkI1MWptXGZSIFxmQjUxbW1cZlIgXGZCNTFxZVxmUiBcZkI1MXFtXGZSIiA0CisuSVggSXRlbSAiNTEgOiA1MSA1MWFjIDUxYWcgNTFjbiA1MWVtIDUxamUgNTFqZiA1MWpnIDUxam0gNTFtbSA1MXFlIDUxcW0iCisuSVAgIlxmQjUyMDZcZlIgOiBcZkI1MjAyXGZSIFxmQjUyMDRcZlIgXGZCNTIwNlxmUiIgNAorLklYIEl0ZW0gIjUyMDYgOiA1MjAyIDUyMDQgNTIwNiIKKy5JUCAiXGZCNTIwNmVcZlIgOiBcZkI1MjA2ZVxmUiIgNAorLklYIEl0ZW0gIjUyMDZlIDogNTIwNmUiCisuSVAgIlxmQjUyMDhcZlIgOiBcZkI1MjA3XGZSIFxmQjUyMDhcZlIiIDQKKy5JWCBJdGVtICI1MjA4IDogNTIwNyA1MjA4IgorLklQICJcZkI1MjExYVxmUiA6IFxmQjUyMTBhXGZSIFxmQjUyMTFhXGZSIiA0CisuSVggSXRlbSAiNTIxMWEgOiA1MjEwYSA1MjExYSIKKy5JUCAiXGZCNTIxM1xmUiA6IFxmQjUyMTFcZlIgXGZCNTIxMlxmUiBcZkI1MjEzXGZSIiA0CisuSVggSXRlbSAiNTIxMyA6IDUyMTEgNTIxMiA1MjEzIgorLklQICJcZkI1MjE2XGZSIDogXGZCNTIxNFxmUiBcZkI1MjE2XGZSIiA0CisuSVggSXRlbSAiNTIxNiA6IDUyMTQgNTIxNiIKKy5JUCAiXGZCNTIyMzVcZlIgOiBcZkI1MjIzMFxmUiBcZkI1MjIzMVxmUiBcZkI1MjIzMlxmUiBcZkI1MjIzM1xmUiBcZkI1MjIzNFxmUiBcZkI1MjIzNVxmUiIgNAorLklYIEl0ZW0gIjUyMjM1IDogNTIyMzAgNTIyMzEgNTIyMzIgNTIyMzMgNTIyMzQgNTIyMzUiCisuSVAgIlxmQjUyMjVcZlIgOiBcZkI1MjI0XGZSIFxmQjUyMjVcZlIiIDQKKy5JWCBJdGVtICI1MjI1IDogNTIyNCA1MjI1IgorLklQICJcZkI1MjI1OVxmUiA6IFxmQjUyMjUyXGZSIFxmQjUyMjU0XGZSIFxmQjUyMjU1XGZSIFxmQjUyMjU2XGZSIFxmQjUyMjU4XGZSIFxmQjUyMjU5XGZSIiA0CisuSVggSXRlbSAiNTIyNTkgOiA1MjI1MiA1MjI1NCA1MjI1NSA1MjI1NiA1MjI1OCA1MjI1OSIKKy5JUCAiXGZCNTIzNVxmUiA6IFxmQjUyMzJcZlIgXGZCNTIzM1xmUiBcZkI1MjM0XGZSIFxmQjUyMzVcZlIgXGZCNTIzeFxmUiIgNAorLklYIEl0ZW0gIjUyMzUgOiA1MjMyIDUyMzMgNTIzNCA1MjM1IDUyM3giCisuSVAgIlxmQjUyNDlcZlIgOiBcZkI1MjQ5XGZSIiA0CisuSVggSXRlbSAiNTI0OSA6IDUyNDkiCisuSVAgIlxmQjUyNTBcZlIgOiBcZkI1MjUwXGZSIiA0CisuSVggSXRlbSAiNTI1MCA6IDUyNTAiCisuSVAgIlxmQjUyNzFcZlIgOiBcZkI1MjcwXGZSIFxmQjUyNzFcZlIiIDQKKy5JWCBJdGVtICI1MjcxIDogNTI3MCA1MjcxIgorLklQICJcZkI1MjcyXGZSIDogXGZCNTI3MlxmUiIgNAorLklYIEl0ZW0gIjUyNzIgOiA1MjcyIgorLklQICJcZkI1Mjc1XGZSIDogXGZCNTI3NFxmUiBcZkI1Mjc1XGZSIiA0CisuSVggSXRlbSAiNTI3NSA6IDUyNzQgNTI3NSIKKy5JUCAiXGZCNTI4MlxmUiA6IFxmQjUyODBcZlIgXGZCNTI4MVxmUiBcZkI1MjgyXGZSIFxmQjUyOHhcZlIiIDQKKy5JWCBJdGVtICI1MjgyIDogNTI4MCA1MjgxIDUyODIgNTI4eCIKKy5JUCAiXGZCNTMwMTdcZlIgOiBcZkI1MzAxMVxmUiBcZkI1MzAxMlxmUiBcZkI1MzAxM1xmUiBcZkI1MzAxNFxmUiBcZkI1MzAxNVxmUiBcZkI1MzAxNlxmUiBcZkI1MzAxN1xmUiIgNAorLklYIEl0ZW0gIjUzMDE3IDogNTMwMTEgNTMwMTIgNTMwMTMgNTMwMTQgNTMwMTUgNTMwMTYgNTMwMTciCisuSVAgIlxmQjUzMDdcZlIgOiBcZkI1MzA3XGZSIiA0CisuSVggSXRlbSAiNTMwNyA6IDUzMDciCisuSVAgIlxmQjUzMjlcZlIgOiBcZkI1MzI3XGZSIFxmQjUzMjhcZlIgXGZCNTMyOVxmUiBcZkI1MzJ4XGZSIiA0CisuSVggSXRlbSAiNTMyOSA6IDUzMjcgNTMyOCA1MzI5IDUzMngiCisuSVAgIlxmQjUzNzNcZlIgOiBcZkI1MzcyXGZSIFxmQjUzNzNcZlIgXGZCNTM3eFxmUiIgNAorLklYIEl0ZW0gIjUzNzMgOiA1MzcyIDUzNzMgNTM3eCIKKy5JUCAiXGZCNTQwN1xmUiA6IFxmQjU0MDdcZlIiIDQKKy5JWCBJdGVtICI1NDA3IDogNTQwNyIKKy5JUCAiXGZCNTQ3NVxmUiA6IFxmQjU0NzBcZlIgXGZCNTQ3MVxmUiBcZkI1NDcyXGZSIFxmQjU0NzNcZlIgXGZCNTQ3NFxmUiBcZkI1NDc1XGZSIFxmQjU0N3hcZlIgXGZCNTQ4MFxmUiBcZkI1NDgxXGZSIFxmQjU0ODJcZlIgXGZCNTQ4M1xmUiBcZkI1NDg0XGZSIFxmQjU0ODVcZlIiIDQKKy5JWCBJdGVtICI1NDc1IDogNTQ3MCA1NDcxIDU0NzIgNTQ3MyA1NDc0IDU0NzUgNTQ3eCA1NDgwIDU0ODEgNTQ4MiA1NDgzIDU0ODQgNTQ4NSIKKy5SRQorLlJTIDQKKy5QRAorLlNwCitcJlxmQlwtbWNwdT1cZlJcZkljcHVcZlIgb3ZlcnJpZGVzIFxmQlwtbWFyY2g9XGZSXGZJYXJjaFxmUiBpZgorXCZcZklhcmNoXGZSIGlzIGNvbXBhdGlibGUgd2l0aCBcZkljcHVcZlIuICBPdGhlciBjb21iaW5hdGlvbnMgb2YKK1wmXGZCXC1tY3B1XGZSIGFuZCBcZkJcLW1hcmNoXGZSIGFyZSByZWplY3RlZC4KKy5TcAorXCZccy0xR0NDXHMwIGRlZmluZXMgdGhlIG1hY3JvIFxmQl9cfF9tY2ZfY3B1X1xmUlxmSWNwdVxmUiB3aGVuIENvbGRGaXJlIHRhcmdldAorXCZcZkljcHVcZlIgaXMgc2VsZWN0ZWQuICBJdCBhbHNvIGRlZmluZXMgXGZCX1x8X21jZl9mYW1pbHlfXGZSXGZJZmFtaWx5XGZSLAord2hlcmUgdGhlIHZhbHVlIG9mIFxmSWZhbWlseVxmUiBpcyBnaXZlbiBieSB0aGUgdGFibGUgYWJvdmUuCisuUkUKKy5JUCAiXGZCXC1tdHVuZT1cZlJcZkl0dW5lXGZSIiA0CisuSVggSXRlbSAiLW10dW5lPXR1bmUiCitUdW5lIHRoZSBjb2RlIGZvciBhIHBhcnRpY3VsYXIgbWljcm9hcmNoaXRlY3R1cmUgd2l0aGluIHRoZQorY29uc3RyYWludHMgc2V0IGJ5IFxmQlwtbWFyY2hcZlIgYW5kIFxmQlwtbWNwdVxmUi4KK1RoZSBNNjgweDAgbWljcm9hcmNoaXRlY3R1cmVzIGFyZTogXGZCNjgwMDBcZlIsIFxmQjY4MDEwXGZSLAorXCZcZkI2ODAyMFxmUiwgXGZCNjgwMzBcZlIsIFxmQjY4MDQwXGZSLCBcZkI2ODA2MFxmUgorYW5kIFxmQmNwdTMyXGZSLiAgVGhlIENvbGRGaXJlIG1pY3JvYXJjaGl0ZWN0dXJlcworYXJlOiBcZkJjZnYxXGZSLCBcZkJjZnYyXGZSLCBcZkJjZnYzXGZSLCBcZkJjZnY0XGZSIGFuZCBcZkJjZnY0ZVxmUi4KKy5TcAorWW91IGNhbiBhbHNvIHVzZSBcZkJcLW10dW5lPTY4MDIwXC00MFxmUiBmb3IgY29kZSB0aGF0IG5lZWRzCit0byBydW4gcmVsYXRpdmVseSB3ZWxsIG9uIDY4MDIwLCA2ODAzMCBhbmQgNjgwNDAgdGFyZ2V0cy4KK1wmXGZCXC1tdHVuZT02ODAyMFwtNjBcZlIgaXMgc2ltaWxhciBidXQgaW5jbHVkZXMgNjgwNjAgdGFyZ2V0cworYXMgd2VsbC4gIFRoZXNlIHR3byBvcHRpb25zIHNlbGVjdCB0aGUgc2FtZSB0dW5pbmcgZGVjaXNpb25zIGFzCitcJlxmQlwtbTY4MDIwXC00MFxmUiBhbmQgXGZCXC1tNjgwMjBcLTYwXGZSIHJlc3BlY3RpdmVseS4KKy5TcAorXCZccy0xR0NDXHMwIGRlZmluZXMgdGhlIG1hY3JvcyBcZkJfXHxfbWNcZlJcZklhcmNoXGZSIGFuZCBcZkJfXHxfbWNcZlJcZklhcmNoXGZSXGZCX1x8X1xmUgord2hlbiB0dW5pbmcgZm9yIDY4MHgwIGFyY2hpdGVjdHVyZSBcZklhcmNoXGZSLiAgSXQgYWxzbyBkZWZpbmVzCitcJlxmQm1jXGZSXGZJYXJjaFxmUiB1bmxlc3MgZWl0aGVyIFxmQlwtYW5zaVxmUiBvciBhIG5vbi1HTlUgXGZCXC1zdGRcZlIKK29wdGlvbiBpcyB1c2VkLiAgSWYgXHMtMUdDQ1xzMCBpcyB0dW5pbmcgZm9yIGEgcmFuZ2Ugb2YgYXJjaGl0ZWN0dXJlcywKK2FzIHNlbGVjdGVkIGJ5IFxmQlwtbXR1bmU9NjgwMjBcLTQwXGZSIG9yIFxmQlwtbXR1bmU9NjgwMjBcLTYwXGZSLAoraXQgZGVmaW5lcyB0aGUgbWFjcm9zIGZvciBldmVyeSBhcmNoaXRlY3R1cmUgaW4gdGhlIHJhbmdlLgorLlNwCitcJlxzLTFHQ0NcczAgYWxzbyBkZWZpbmVzIHRoZSBtYWNybyBcZkJfXHxfbVxmUlxmSXVhcmNoXGZSXGZCX1x8X1xmUiB3aGVuIHR1bmluZyBmb3IKK0NvbGRGaXJlIG1pY3JvYXJjaGl0ZWN0dXJlIFxmSXVhcmNoXGZSLCB3aGVyZSBcZkl1YXJjaFxmUiBpcyBvbmUKK29mIHRoZSBhcmd1bWVudHMgZ2l2ZW4gYWJvdmUuCisuSVAgIlxmQlwtbTY4MDAwXGZSIiA0CisuSVggSXRlbSAiLW02ODAwMCIKKy5QRCAwCisuSVAgIlxmQlwtbWM2ODAwMFxmUiIgNAorLklYIEl0ZW0gIi1tYzY4MDAwIgorLlBECitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNjgwMDAuICBUaGlzIGlzIHRoZSBkZWZhdWx0Cit3aGVuIHRoZSBjb21waWxlciBpcyBjb25maWd1cmVkIGZvciA2ODAwMFwtYmFzZWQgc3lzdGVtcy4KK0l0IGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD02ODAwMFxmUi4KKy5TcAorVXNlIHRoaXMgb3B0aW9uIGZvciBtaWNyb2NvbnRyb2xsZXJzIHdpdGggYSA2ODAwMCBvciBccy0xRUMwMDBcczAgY29yZSwKK2luY2x1ZGluZyB0aGUgNjgwMDgsIDY4MzAyLCA2ODMwNiwgNjgzMDcsIDY4MzIyLCA2ODMyOCBhbmQgNjgzNTYuCisuSVAgIlxmQlwtbTY4MDEwXGZSIiA0CisuSVggSXRlbSAiLW02ODAxMCIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODAxMC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK3doZW4gdGhlIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgZm9yIDY4MDEwXC1iYXNlZCBzeXN0ZW1zLgorSXQgaXMgZXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPTY4MDEwXGZSLgorLklQICJcZkJcLW02ODAyMFxmUiIgNAorLklYIEl0ZW0gIi1tNjgwMjAiCisuUEQgMAorLklQICJcZkJcLW1jNjgwMjBcZlIiIDQKKy5JWCBJdGVtICItbWM2ODAyMCIKKy5QRAorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDIwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAord2hlbiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCBmb3IgNjgwMjBcLWJhc2VkIHN5c3RlbXMuCitJdCBpcyBlcXVpdmFsZW50IHRvIFxmQlwtbWFyY2g9NjgwMjBcZlIuCisuSVAgIlxmQlwtbTY4MDMwXGZSIiA0CisuSVggSXRlbSAiLW02ODAzMCIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODAzMC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2NvbmZpZ3VyZWQgZm9yIDY4MDMwXC1iYXNlZCBzeXN0ZW1zLiAgSXQgaXMgZXF1aXZhbGVudCB0bworXCZcZkJcLW1hcmNoPTY4MDMwXGZSLgorLklQICJcZkJcLW02ODA0MFxmUiIgNAorLklYIEl0ZW0gIi1tNjgwNDAiCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNjgwNDAuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGNvbXBpbGVyIGlzCitjb25maWd1cmVkIGZvciA2ODA0MFwtYmFzZWQgc3lzdGVtcy4gIEl0IGlzIGVxdWl2YWxlbnQgdG8KK1wmXGZCXC1tYXJjaD02ODA0MFxmUi4KKy5TcAorVGhpcyBvcHRpb24gaW5oaWJpdHMgdGhlIHVzZSBvZiA2ODg4MS82ODg4MiBpbnN0cnVjdGlvbnMgdGhhdCBoYXZlIHRvIGJlCitlbXVsYXRlZCBieSBzb2Z0d2FyZSBvbiB0aGUgNjgwNDAuICBVc2UgdGhpcyBvcHRpb24gaWYgeW91ciA2ODA0MCBkb2VzIG5vdAoraGF2ZSBjb2RlIHRvIGVtdWxhdGUgdGhvc2UgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW02ODA2MFxmUiIgNAorLklYIEl0ZW0gIi1tNjgwNjAiCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNjgwNjAuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGNvbXBpbGVyIGlzCitjb25maWd1cmVkIGZvciA2ODA2MFwtYmFzZWQgc3lzdGVtcy4gIEl0IGlzIGVxdWl2YWxlbnQgdG8KK1wmXGZCXC1tYXJjaD02ODA2MFxmUi4KKy5TcAorVGhpcyBvcHRpb24gaW5oaWJpdHMgdGhlIHVzZSBvZiA2ODAyMCBhbmQgNjg4ODEvNjg4ODIgaW5zdHJ1Y3Rpb25zIHRoYXQKK2hhdmUgdG8gYmUgZW11bGF0ZWQgYnkgc29mdHdhcmUgb24gdGhlIDY4MDYwLiAgVXNlIHRoaXMgb3B0aW9uIGlmIHlvdXIgNjgwNjAKK2RvZXMgbm90IGhhdmUgY29kZSB0byBlbXVsYXRlIHRob3NlIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tY3B1MzJcZlIiIDQKKy5JWCBJdGVtICItbWNwdTMyIgorR2VuZXJhdGUgb3V0cHV0IGZvciBhIFxzLTFDUFUzMlxzMC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK3doZW4gdGhlIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgZm9yIENQVTMyXC1iYXNlZCBzeXN0ZW1zLgorSXQgaXMgZXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPWNwdTMyXGZSLgorLlNwCitVc2UgdGhpcyBvcHRpb24gZm9yIG1pY3JvY29udHJvbGxlcnMgd2l0aCBhCitcJlxzLTFDUFUzMlxzMCBvciBccy0xQ1BVMzIrXHMwIGNvcmUsIGluY2x1ZGluZyB0aGUgNjgzMzAsIDY4MzMxLCA2ODMzMiwgNjgzMzMsIDY4MzM0LAorNjgzMzYsIDY4MzQwLCA2ODM0MSwgNjgzNDkgYW5kIDY4MzYwLgorLklQICJcZkJcLW01MjAwXGZSIiA0CisuSVggSXRlbSAiLW01MjAwIgorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDUyMFggQ29sZEZpcmUgXHMtMUNQVVxzMC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK3doZW4gdGhlIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgZm9yIDUyMFhcLWJhc2VkIHN5c3RlbXMuCitJdCBpcyBlcXVpdmFsZW50IHRvIFxmQlwtbWNwdT01MjA2XGZSLCBhbmQgaXMgbm93IGRlcHJlY2F0ZWQKK2luIGZhdm9yIG9mIHRoYXQgb3B0aW9uLgorLlNwCitVc2UgdGhpcyBvcHRpb24gZm9yIG1pY3JvY29udHJvbGxlciB3aXRoIGEgNTIwMCBjb3JlLCBpbmNsdWRpbmcKK3RoZSBccy0xTUNGNTIwMlxzMCwgXHMtMU1DRjUyMDNcczAsIFxzLTFNQ0Y1MjA0XHMwIGFuZCBccy0xTUNGNTIwNlxzMC4KKy5JUCAiXGZCXC1tNTIwNmVcZlIiIDQKKy5JWCBJdGVtICItbTUyMDZlIgorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDUyMDZlIENvbGRGaXJlIFxzLTFDUFVcczAuICBUaGUgb3B0aW9uIGlzIG5vdworZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgZXF1aXZhbGVudCBcZkJcLW1jcHU9NTIwNmVcZlIuCisuSVAgIlxmQlwtbTUyOHhcZlIiIDQKKy5JWCBJdGVtICItbTUyOHgiCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgbWVtYmVyIG9mIHRoZSBDb2xkRmlyZSA1MjhYIGZhbWlseS4KK1RoZSBvcHRpb24gaXMgbm93IGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIGVxdWl2YWxlbnQKK1wmXGZCXC1tY3B1PTUyOHhcZlIuCisuSVAgIlxmQlwtbTUzMDdcZlIiIDQKKy5JWCBJdGVtICItbTUzMDciCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgQ29sZEZpcmUgNTMwNyBccy0xQ1BVXHMwLiAgVGhlIG9wdGlvbiBpcyBub3cgZGVwcmVjYXRlZAoraW4gZmF2b3Igb2YgdGhlIGVxdWl2YWxlbnQgXGZCXC1tY3B1PTUzMDdcZlIuCisuSVAgIlxmQlwtbTU0MDdcZlIiIDQKKy5JWCBJdGVtICItbTU0MDciCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgQ29sZEZpcmUgNTQwNyBccy0xQ1BVXHMwLiAgVGhlIG9wdGlvbiBpcyBub3cgZGVwcmVjYXRlZAoraW4gZmF2b3Igb2YgdGhlIGVxdWl2YWxlbnQgXGZCXC1tY3B1PTU0MDdcZlIuCisuSVAgIlxmQlwtbWNmdjRlXGZSIiA0CisuSVggSXRlbSAiLW1jZnY0ZSIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSBDb2xkRmlyZSBWNGUgZmFtaWx5IFxzLTFDUFVcczAgKGUuZy4gNTQ3eC81NDh4KS4KK1RoaXMgaW5jbHVkZXMgdXNlIG9mIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4KK1RoZSBvcHRpb24gaXMgZXF1aXZhbGVudCB0byBcZkJcLW1jcHU9NTQ3eFxmUiwgYW5kIGlzIG5vdworZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGF0IG9wdGlvbi4KKy5JUCAiXGZCXC1tNjgwMjBcLTQwXGZSIiA0CisuSVggSXRlbSAiLW02ODAyMC00MCIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODA0MCwgd2l0aG91dCB1c2luZyBhbnkgb2YgdGhlIG5ldyBpbnN0cnVjdGlvbnMuCitUaGlzIHJlc3VsdHMgaW4gY29kZSB0aGF0IGNhbiBydW4gcmVsYXRpdmVseSBlZmZpY2llbnRseSBvbiBlaXRoZXIgYQorNjgwMjAvNjg4ODEgb3IgYSA2ODAzMCBvciBhIDY4MDQwLiAgVGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgdXNlIHRoZQorNjg4ODEgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGVtdWxhdGVkIG9uIHRoZSA2ODA0MC4KKy5TcAorVGhlIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtbWFyY2g9NjgwMjBcZlIgXGZCXC1tdHVuZT02ODAyMFwtNDBcZlIuCisuSVAgIlxmQlwtbTY4MDIwXC02MFxmUiIgNAorLklYIEl0ZW0gIi1tNjgwMjAtNjAiCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNjgwNjAsIHdpdGhvdXQgdXNpbmcgYW55IG9mIHRoZSBuZXcgaW5zdHJ1Y3Rpb25zLgorVGhpcyByZXN1bHRzIGluIGNvZGUgdGhhdCBjYW4gcnVuIHJlbGF0aXZlbHkgZWZmaWNpZW50bHkgb24gZWl0aGVyIGEKKzY4MDIwLzY4ODgxIG9yIGEgNjgwMzAgb3IgYSA2ODA0MC4gIFRoZSBnZW5lcmF0ZWQgY29kZSBkb2VzIHVzZSB0aGUKKzY4ODgxIGluc3RydWN0aW9ucyB0aGF0IGFyZSBlbXVsYXRlZCBvbiB0aGUgNjgwNjAuCisuU3AKK1RoZSBvcHRpb24gaXMgZXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPTY4MDIwXGZSIFxmQlwtbXR1bmU9NjgwMjBcLTYwXGZSLgorLklQICJcZkJcLW1oYXJkXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1taGFyZC1mbG9hdCIKKy5QRCAwCisuSVAgIlxmQlwtbTY4ODgxXGZSIiA0CisuSVggSXRlbSAiLW02ODg4MSIKKy5QRAorR2VuZXJhdGUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgNjgwMjAKK2FuZCBhYm92ZSwgYW5kIGZvciBDb2xkRmlyZSBkZXZpY2VzIHRoYXQgaGF2ZSBhbiBccy0xRlBVXHMwLiAgSXQgZGVmaW5lcyB0aGUKK21hY3JvIFxmQl9cfF9IQVZFXzY4ODgxX1x8X1xmUiBvbiBNNjgweDAgdGFyZ2V0cyBhbmQgXGZCX1x8X21jZmZwdV9cfF9cZlIKK29uIENvbGRGaXJlIHRhcmdldHMuCisuSVAgIlxmQlwtbXNvZnRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1zb2Z0LWZsb2F0IgorRG8gbm90IGdlbmVyYXRlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uczsgdXNlIGxpYnJhcnkgY2FsbHMgaW5zdGVhZC4KK1RoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIDY4MDAwLCA2ODAxMCwgYW5kIDY4ODMyIHRhcmdldHMuICBJdCBpcyBhbHNvCit0aGUgZGVmYXVsdCBmb3IgQ29sZEZpcmUgZGV2aWNlcyB0aGF0IGhhdmUgbm8gXHMtMUZQVVxzMC4KKy5JUCAiXGZCXC1tZGl2XGZSIiA0CisuSVggSXRlbSAiLW1kaXYiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZGl2XGZSIiA0CisuSVggSXRlbSAiLW1uby1kaXYiCisuUEQKK0dlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIENvbGRGaXJlIGhhcmR3YXJlIGRpdmlkZSBhbmQgcmVtYWluZGVyCitpbnN0cnVjdGlvbnMuICBJZiBcZkJcLW1hcmNoXGZSIGlzIHVzZWQgd2l0aG91dCBcZkJcLW1jcHVcZlIsCit0aGUgZGVmYXVsdCBpcyBcKihMIm9uXCooUiIgZm9yIENvbGRGaXJlIGFyY2hpdGVjdHVyZXMgYW5kIFwqKEwib2ZmXCooUiIgZm9yIE02ODB4MAorYXJjaGl0ZWN0dXJlcy4gIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgdGFrZW4gZnJvbSB0aGUgdGFyZ2V0IFxzLTFDUFVcczAKKyhlaXRoZXIgdGhlIGRlZmF1bHQgXHMtMUNQVVxzMCwgb3IgdGhlIG9uZSBzcGVjaWZpZWQgYnkgXGZCXC1tY3B1XGZSKS4gIEZvcgorZXhhbXBsZSwgdGhlIGRlZmF1bHQgaXMgXCooTCJvZmZcKihSIiBmb3IgXGZCXC1tY3B1PTUyMDZcZlIgYW5kIFwqKEwib25cKihSIiBmb3IKK1wmXGZCXC1tY3B1PTUyMDZlXGZSLgorLlNwCitcJlxzLTFHQ0NcczAgZGVmaW5lcyB0aGUgbWFjcm8gXGZCX1x8X21jZmh3ZGl2X1x8X1xmUiB3aGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuCisuSVAgIlxmQlwtbXNob3J0XGZSIiA0CisuSVggSXRlbSAiLW1zaG9ydCIKK0NvbnNpZGVyIHR5cGUgXGYoQ1dcKihDYGludFwqKEMnXGZSIHRvIGJlIDE2IGJpdHMgd2lkZSwgbGlrZSBcZihDV1wqKENgc2hvcnQgaW50XCooQydcZlIuCitBZGRpdGlvbmFsbHksIHBhcmFtZXRlcnMgcGFzc2VkIG9uIHRoZSBzdGFjayBhcmUgYWxzbyBhbGlnbmVkIHRvIGEKKzE2XC1iaXQgYm91bmRhcnkgZXZlbiBvbiB0YXJnZXRzIHdob3NlIFxzLTFBUElcczAgbWFuZGF0ZXMgcHJvbW90aW9uIHRvIDMyXC1iaXQuCisuSVAgIlxmQlwtbW5vXC1zaG9ydFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2hvcnQiCitEbyBub3QgY29uc2lkZXIgdHlwZSBcZihDV1wqKENgaW50XCooQydcZlIgdG8gYmUgMTYgYml0cyB3aWRlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbm9iaXRmaWVsZFxmUiIgNAorLklYIEl0ZW0gIi1tbm9iaXRmaWVsZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1iaXRmaWVsZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYml0ZmllbGQiCisuUEQKK0RvIG5vdCB1c2UgdGhlIGJpdC1maWVsZCBpbnN0cnVjdGlvbnMuICBUaGUgXGZCXC1tNjgwMDBcZlIsIFxmQlwtbWNwdTMyXGZSCithbmQgXGZCXC1tNTIwMFxmUiBvcHRpb25zIGltcGx5IFxmQlwtbW5vYml0ZmllbGRcZlIuCisuSVAgIlxmQlwtbWJpdGZpZWxkXGZSIiA0CisuSVggSXRlbSAiLW1iaXRmaWVsZCIKK0RvIHVzZSB0aGUgYml0LWZpZWxkIGluc3RydWN0aW9ucy4gIFRoZSBcZkJcLW02ODAyMFxmUiBvcHRpb24gaW1wbGllcworXCZcZkJcLW1iaXRmaWVsZFxmUi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgeW91IHVzZSBhIGNvbmZpZ3VyYXRpb24KK2Rlc2lnbmVkIGZvciBhIDY4MDIwLgorLklQICJcZkJcLW1ydGRcZlIiIDQKKy5JWCBJdGVtICItbXJ0ZCIKK1VzZSBhIGRpZmZlcmVudCBmdW5jdGlvbi1jYWxsaW5nIGNvbnZlbnRpb24sIGluIHdoaWNoIGZ1bmN0aW9ucwordGhhdCB0YWtlIGEgZml4ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyByZXR1cm4gd2l0aCB0aGUgXGYoQ1dcKihDYHJ0ZFwqKEMnXGZSCitpbnN0cnVjdGlvbiwgd2hpY2ggcG9wcyB0aGVpciBhcmd1bWVudHMgd2hpbGUgcmV0dXJuaW5nLiAgVGhpcworc2F2ZXMgb25lIGluc3RydWN0aW9uIGluIHRoZSBjYWxsZXIgc2luY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBwb3AKK3RoZSBhcmd1bWVudHMgdGhlcmUuCisuU3AKK1RoaXMgY2FsbGluZyBjb252ZW50aW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgbm9ybWFsbHkKK3VzZWQgb24gVW5peCwgc28geW91IGNhbm5vdCB1c2UgaXQgaWYgeW91IG5lZWQgdG8gY2FsbCBsaWJyYXJpZXMKK2NvbXBpbGVkIHdpdGggdGhlIFVuaXggY29tcGlsZXIuCisuU3AKK0Fsc28sIHlvdSBtdXN0IHByb3ZpZGUgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYWxsIGZ1bmN0aW9ucyB0aGF0Cit0YWtlIHZhcmlhYmxlIG51bWJlcnMgb2YgYXJndW1lbnRzIChpbmNsdWRpbmcgXGYoQ1dcKihDYHByaW50ZlwqKEMnXGZSKTsKK290aGVyd2lzZSBpbmNvcnJlY3QgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIGNhbGxzIHRvIHRob3NlCitmdW5jdGlvbnMuCisuU3AKK0luIGFkZGl0aW9uLCBzZXJpb3VzbHkgaW5jb3JyZWN0IGNvZGUgcmVzdWx0cyBpZiB5b3UgY2FsbCBhCitmdW5jdGlvbiB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cy4gIChOb3JtYWxseSwgZXh0cmEgYXJndW1lbnRzIGFyZQoraGFybWxlc3NseSBpZ25vcmVkLikKKy5TcAorVGhlIFxmKENXXCooQ2BydGRcKihDJ1xmUiBpbnN0cnVjdGlvbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIDY4MDEwLCA2ODAyMCwgNjgwMzAsCis2ODA0MCwgNjgwNjAgYW5kIFxzLTFDUFUzMlxzMCBwcm9jZXNzb3JzLCBidXQgbm90IGJ5IHRoZSA2ODAwMCBvciA1MjAwLgorLklQICJcZkJcLW1ub1wtcnRkXGZSIiA0CisuSVggSXRlbSAiLW1uby1ydGQiCitEbyBub3QgdXNlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIHNlbGVjdGVkIGJ5IFxmQlwtbXJ0ZFxmUi4KK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWFsaWduXC1pbnRcZlIiIDQKKy5JWCBJdGVtICItbWFsaWduLWludCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1hbGlnblwtaW50XGZSIiA0CisuSVggSXRlbSAiLW1uby1hbGlnbi1pbnQiCisuUEQKK0NvbnRyb2wgd2hldGhlciBccy0xR0NDXHMwIGFsaWducyBcZihDV1wqKENgaW50XCooQydcZlIsIFxmKENXXCooQ2Bsb25nXCooQydcZlIsIFxmKENXXCooQ2Bsb25nIGxvbmdcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGZsb2F0XCooQydcZlIsIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiwgYW5kIFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSIHZhcmlhYmxlcyBvbiBhIDMyXC1iaXQKK2JvdW5kYXJ5IChcZkJcLW1hbGlnblwtaW50XGZSKSBvciBhIDE2XC1iaXQgYm91bmRhcnkgKFxmQlwtbW5vXC1hbGlnblwtaW50XGZSKS4KK0FsaWduaW5nIHZhcmlhYmxlcyBvbiAzMlwtYml0IGJvdW5kYXJpZXMgcHJvZHVjZXMgY29kZSB0aGF0IHJ1bnMgc29tZXdoYXQKK2Zhc3RlciBvbiBwcm9jZXNzb3JzIHdpdGggMzJcLWJpdCBidXNzZXMgYXQgdGhlIGV4cGVuc2Ugb2YgbW9yZSBtZW1vcnkuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgaWYgeW91IHVzZSB0aGUgXGZCXC1tYWxpZ25cLWludFxmUiBzd2l0Y2gsIFxzLTFHQ0NcczAKK2FsaWducyBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdGhlIGFib3ZlIHR5cGVzIGRpZmZlcmVudGx5IHRoYW4KK21vc3QgcHVibGlzaGVkIGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBtNjhrLgorLklQICJcZkJcLW1wY3JlbFxmUiIgNAorLklYIEl0ZW0gIi1tcGNyZWwiCitVc2UgdGhlIHBjLXJlbGF0aXZlIGFkZHJlc3NpbmcgbW9kZSBvZiB0aGUgNjgwMDAgZGlyZWN0bHksIGluc3RlYWQgb2YKK3VzaW5nIGEgZ2xvYmFsIG9mZnNldCB0YWJsZS4gIEF0IHByZXNlbnQsIHRoaXMgb3B0aW9uIGltcGxpZXMgXGZCXC1mcGljXGZSLAorYWxsb3dpbmcgYXQgbW9zdCBhIDE2XC1iaXQgb2Zmc2V0IGZvciBwYy1yZWxhdGl2ZSBhZGRyZXNzaW5nLiAgXGZCXC1mUElDXGZSIGlzCitub3QgcHJlc2VudGx5IHN1cHBvcnRlZCB3aXRoIFxmQlwtbXBjcmVsXGZSLCB0aG91Z2ggdGhpcyBjb3VsZCBiZSBzdXBwb3J0ZWQgZm9yCis2ODAyMCBhbmQgaGlnaGVyIHByb2Nlc3NvcnMuCisuSVAgIlxmQlwtbW5vXC1zdHJpY3RcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1uby1zdHJpY3QtYWxpZ24iCisuUEQgMAorLklQICJcZkJcLW1zdHJpY3RcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1zdHJpY3QtYWxpZ24iCisuUEQKK0RvIG5vdCAoZG8pIGFzc3VtZSB0aGF0IHVuYWxpZ25lZCBtZW1vcnkgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBieQordGhlIHN5c3RlbS4KKy5JUCAiXGZCXC1tc2VwXC1kYXRhXGZSIiA0CisuSVggSXRlbSAiLW1zZXAtZGF0YSIKK0dlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgdGhlIGRhdGEgc2VnbWVudCB0byBiZSBsb2NhdGVkIGluIGEgZGlmZmVyZW50CithcmVhIG9mIG1lbW9yeSBmcm9tIHRoZSB0ZXh0IHNlZ21lbnQuICBUaGlzIGFsbG93cyBmb3IgZXhlY3V0ZS1pbi1wbGFjZSBpbgorYW4gZW52aXJvbm1lbnQgd2l0aG91dCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiAgVGhpcyBvcHRpb24gaW1wbGllcworXCZcZkJcLWZQSUNcZlIuCisuSVAgIlxmQlwtbW5vXC1zZXBcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNlcC1kYXRhIgorR2VuZXJhdGUgY29kZSB0aGF0IGFzc3VtZXMgdGhhdCB0aGUgZGF0YSBzZWdtZW50IGZvbGxvd3MgdGhlIHRleHQgc2VnbWVudC4KK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWlkXC1zaGFyZWRcLWxpYnJhcnlcZlIiIDQKKy5JWCBJdGVtICItbWlkLXNoYXJlZC1saWJyYXJ5IgorR2VuZXJhdGUgY29kZSB0aGF0IHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMgdmlhIHRoZSBsaWJyYXJ5IFxzLTFJRFxzMCBtZXRob2QuCitUaGlzIGFsbG93cyBmb3IgZXhlY3V0ZS1pbi1wbGFjZSBhbmQgc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBlbnZpcm9ubWVudAord2l0aG91dCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50LiAgVGhpcyBvcHRpb24gaW1wbGllcyBcZkJcLWZQSUNcZlIuCisuSVAgIlxmQlwtbW5vXC1pZFwtc2hhcmVkXC1saWJyYXJ5XGZSIiA0CisuSVggSXRlbSAiLW1uby1pZC1zaGFyZWQtbGlicmFyeSIKK0dlbmVyYXRlIGNvZGUgdGhhdCBkb2Vzbid0IGFzc3VtZSBJRC1iYXNlZCBzaGFyZWQgbGlicmFyaWVzIGFyZSBiZWluZyB1c2VkLgorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tc2hhcmVkXC1saWJyYXJ5XC1pZD1uXGZSIiA0CisuSVggSXRlbSAiLW1zaGFyZWQtbGlicmFyeS1pZD1uIgorU3BlY2lmaWVzIHRoZSBpZGVudGlmaWNhdGlvbiBudW1iZXIgb2YgdGhlIElELWJhc2VkIHNoYXJlZCBsaWJyYXJ5IGJlaW5nCitjb21waWxlZC4gIFNwZWNpZnlpbmcgYSB2YWx1ZSBvZiAwIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgY29kZTsgc3BlY2lmeWluZworb3RoZXIgdmFsdWVzIGZvcmNlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGF0IG51bWJlciB0byB0aGUgY3VycmVudAorbGlicmFyeSwgYnV0IGlzIG5vIG1vcmUgc3BhY2VcLSBvciB0aW1lLWVmZmljaWVudCB0aGFuIG9taXR0aW5nIHRoaXMgb3B0aW9uLgorLklQICJcZkJcLW14Z290XGZSIiA0CisuSVggSXRlbSAiLW14Z290IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXhnb3RcZlIiIDQKKy5JWCBJdGVtICItbW5vLXhnb3QiCisuUEQKK1doZW4gZ2VuZXJhdGluZyBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIGZvciBDb2xkRmlyZSwgZ2VuZXJhdGUgY29kZQordGhhdCB3b3JrcyBpZiB0aGUgXHMtMUdPVFxzMCBoYXMgbW9yZSB0aGFuIDgxOTIgZW50cmllcy4gIFRoaXMgY29kZSBpcworbGFyZ2VyIGFuZCBzbG93ZXIgdGhhbiBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoaXMgb3B0aW9uLiAgT24gTTY4MHgwCitwcm9jZXNzb3JzLCB0aGlzIG9wdGlvbiBpcyBub3QgbmVlZGVkOyBcZkJcLWZQSUNcZlIgc3VmZmljZXMuCisuU3AKK1wmXHMtMUdDQ1xzMCBub3JtYWxseSB1c2VzIGEgc2luZ2xlIGluc3RydWN0aW9uIHRvIGxvYWQgdmFsdWVzIGZyb20gdGhlIFxzLTFHT1RcczAuCitXaGlsZSB0aGlzIGlzIHJlbGF0aXZlbHkgZWZmaWNpZW50LCBpdCBvbmx5IHdvcmtzIGlmIHRoZSBccy0xR09UXHMwCitpcyBzbWFsbGVyIHRoYW4gYWJvdXQgNjRrLiAgQW55dGhpbmcgbGFyZ2VyIGNhdXNlcyB0aGUgbGlua2VyCit0byByZXBvcnQgYW4gZXJyb3Igc3VjaCBhczoKKy5TcAorLlZiIDEKK1wmICAgICAgICByZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ6IFJfNjhLX0dPVDE2TyBmb29iYXIKKy5WZQorLlNwCitJZiB0aGlzIGhhcHBlbnMsIHlvdSBzaG91bGQgcmVjb21waWxlIHlvdXIgY29kZSB3aXRoIFxmQlwtbXhnb3RcZlIuCitJdCBzaG91bGQgdGhlbiB3b3JrIHdpdGggdmVyeSBsYXJnZSBHT1RzLiAgSG93ZXZlciwgY29kZSBnZW5lcmF0ZWQgd2l0aAorXCZcZkJcLW14Z290XGZSIGlzIGxlc3MgZWZmaWNpZW50LCBzaW5jZSBpdCB0YWtlcyA0IGluc3RydWN0aW9ucyB0byBmZXRjaAordGhlIHZhbHVlIG9mIGEgZ2xvYmFsIHN5bWJvbC4KKy5TcAorTm90ZSB0aGF0IHNvbWUgbGlua2VycywgaW5jbHVkaW5nIG5ld2VyIHZlcnNpb25zIG9mIHRoZSBccy0xR05VXHMwIGxpbmtlciwKK2NhbiBjcmVhdGUgbXVsdGlwbGUgR09UcyBhbmQgc29ydCBccy0xR09UXHMwIGVudHJpZXMuICBJZiB5b3UgaGF2ZSBzdWNoIGEgbGlua2VyLAoreW91IHNob3VsZCBvbmx5IG5lZWQgdG8gdXNlIFxmQlwtbXhnb3RcZlIgd2hlbiBjb21waWxpbmcgYSBzaW5nbGUKK29iamVjdCBmaWxlIHRoYXQgYWNjZXNzZXMgbW9yZSB0aGFuIDgxOTIgXHMtMUdPVFxzMCBlbnRyaWVzLiAgVmVyeSBmZXcgZG8uCisuU3AKK1RoZXNlIG9wdGlvbnMgaGF2ZSBubyBlZmZlY3QgdW5sZXNzIFxzLTFHQ0NcczAgaXMgZ2VuZXJhdGluZworcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZS4KKy5QUAorXGZJTUNvcmUgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIk1Db3JlIE9wdGlvbnMiCisuUFAKK1RoZXNlIGFyZSB0aGUgXGZCXC1tXGZSIG9wdGlvbnMgZGVmaW5lZCBmb3IgdGhlIE1vdG9yb2xhIE0qQ29yZQorcHJvY2Vzc29ycy4KKy5JUCAiXGZCXC1taGFyZGxpdFxmUiIgNAorLklYIEl0ZW0gIi1taGFyZGxpdCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1oYXJkbGl0XGZSIiA0CisuSVggSXRlbSAiLW1uby1oYXJkbGl0IgorLlBECitJbmxpbmUgY29uc3RhbnRzIGludG8gdGhlIGNvZGUgc3RyZWFtIGlmIGl0IGNhbiBiZSBkb25lIGluIHR3bworaW5zdHJ1Y3Rpb25zIG9yIGxlc3MuCisuSVAgIlxmQlwtbWRpdlxmUiIgNAorLklYIEl0ZW0gIi1tZGl2IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWRpdlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZGl2IgorLlBECitVc2UgdGhlIGRpdmlkZSBpbnN0cnVjdGlvbi4gIChFbmFibGVkIGJ5IGRlZmF1bHQpLgorLklQICJcZkJcLW1yZWxheFwtaW1tZWRpYXRlXGZSIiA0CisuSVggSXRlbSAiLW1yZWxheC1pbW1lZGlhdGUiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcmVsYXhcLWltbWVkaWF0ZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVsYXgtaW1tZWRpYXRlIgorLlBECitBbGxvdyBhcmJpdHJhcnktc2l6ZWQgaW1tZWRpYXRlcyBpbiBiaXQgb3BlcmF0aW9ucy4KKy5JUCAiXGZCXC1td2lkZVwtYml0ZmllbGRzXGZSIiA0CisuSVggSXRlbSAiLW13aWRlLWJpdGZpZWxkcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC13aWRlXC1iaXRmaWVsZHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXdpZGUtYml0ZmllbGRzIgorLlBECitBbHdheXMgdHJlYXQgYml0LWZpZWxkcyBhcyBcZihDV1wqKENgaW50XCooQydcZlJcLXNpemVkLgorLklQICJcZkJcLW00Ynl0ZVwtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLW00Ynl0ZS1mdW5jdGlvbnMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtNGJ5dGVcLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tNGJ5dGUtZnVuY3Rpb25zIgorLlBECitGb3JjZSBhbGwgZnVuY3Rpb25zIHRvIGJlIGFsaWduZWQgdG8gYSA0XC1ieXRlIGJvdW5kYXJ5LgorLklQICJcZkJcLW1jYWxsZ3JhcGhcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbWNhbGxncmFwaC1kYXRhIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWNhbGxncmFwaFwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tY2FsbGdyYXBoLWRhdGEiCisuUEQKK0VtaXQgY2FsbGdyYXBoIGluZm9ybWF0aW9uLgorLklQICJcZkJcLW1zbG93XC1ieXRlc1xmUiIgNAorLklYIEl0ZW0gIi1tc2xvdy1ieXRlcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zbG93XC1ieXRlc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2xvdy1ieXRlcyIKKy5QRAorUHJlZmVyIHdvcmQgYWNjZXNzIHdoZW4gcmVhZGluZyBieXRlIHF1YW50aXRpZXMuCisuSVAgIlxmQlwtbWxpdHRsZVwtZW5kaWFuXGZSIiA0CisuSVggSXRlbSAiLW1saXR0bGUtZW5kaWFuIgorLlBEIDAKKy5JUCAiXGZCXC1tYmlnXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWJpZy1lbmRpYW4iCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIGEgbGl0dGxlLWVuZGlhbiB0YXJnZXQuCisuSVAgIlxmQlwtbTIxMFxmUiIgNAorLklYIEl0ZW0gIi1tMjEwIgorLlBEIDAKKy5JUCAiXGZCXC1tMzQwXGZSIiA0CisuSVggSXRlbSAiLW0zNDAiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSAyMTAgcHJvY2Vzc29yLgorLklQICJcZkJcLW1ub1wtbHNpbVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbHNpbSIKK0Fzc3VtZSB0aGF0IHJ1bnRpbWUgc3VwcG9ydCBoYXMgYmVlbiBwcm92aWRlZCBhbmQgc28gb21pdCB0aGUKK3NpbXVsYXRvciBsaWJyYXJ5IChcZklsaWJzaW0uYSlcZlIgZnJvbSB0aGUgbGlua2VyIGNvbW1hbmQgbGluZS4KKy5JUCAiXGZCXC1tc3RhY2tcLWluY3JlbWVudD1cZlJcZklzaXplXGZSIiA0CisuSVggSXRlbSAiLW1zdGFjay1pbmNyZW1lbnQ9c2l6ZSIKK1NldCB0aGUgbWF4aW11bSBhbW91bnQgZm9yIGEgc2luZ2xlIHN0YWNrIGluY3JlbWVudCBvcGVyYXRpb24uICBMYXJnZQordmFsdWVzIGNhbiBpbmNyZWFzZSB0aGUgc3BlZWQgb2YgcHJvZ3JhbXMgdGhhdCBjb250YWluIGZ1bmN0aW9ucwordGhhdCBuZWVkIGEgbGFyZ2UgYW1vdW50IG9mIHN0YWNrIHNwYWNlLCBidXQgdGhleSBjYW4gYWxzbyB0cmlnZ2VyIGEKK3NlZ21lbnRhdGlvbiBmYXVsdCBpZiB0aGUgc3RhY2sgaXMgZXh0ZW5kZWQgdG9vIG11Y2guICBUaGUgZGVmYXVsdAordmFsdWUgaXMgMHgxMDAwLgorLlBQCitcZklNZVAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIk1lUCBPcHRpb25zIgorLklQICJcZkJcLW1hYnNkaWZmXGZSIiA0CisuSVggSXRlbSAiLW1hYnNkaWZmIgorRW5hYmxlcyB0aGUgXGYoQ1dcKihDYGFic1wqKEMnXGZSIGluc3RydWN0aW9uLCB3aGljaCBpcyB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZQorYmV0d2VlbiB0d28gcmVnaXN0ZXJzLgorLklQICJcZkJcLW1hbGxcLW9wdHNcZlIiIDQKKy5JWCBJdGVtICItbWFsbC1vcHRzIgorRW5hYmxlcyBhbGwgdGhlIG9wdGlvbmFsIGluc3RydWN0aW9uc1wtXC1cLWF2ZXJhZ2UsIG11bHRpcGx5LCBkaXZpZGUsIGJpdAorb3BlcmF0aW9ucywgbGVhZGluZyB6ZXJvLCBhYnNvbHV0ZSBkaWZmZXJlbmNlLCBtaW4vbWF4LCBjbGlwLCBhbmQKK3NhdHVyYXRpb24uCisuSVAgIlxmQlwtbWF2ZXJhZ2VcZlIiIDQKKy5JWCBJdGVtICItbWF2ZXJhZ2UiCitFbmFibGVzIHRoZSBcZihDV1wqKENgYXZlXCooQydcZlIgaW5zdHJ1Y3Rpb24sIHdoaWNoIGNvbXB1dGVzIHRoZSBhdmVyYWdlIG9mIHR3bworcmVnaXN0ZXJzLgorLklQICJcZkJcLW1iYXNlZD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLW1iYXNlZD1uIgorVmFyaWFibGVzIG9mIHNpemUgXGZJblxmUiBieXRlcyBvciBzbWFsbGVyIGFyZSBwbGFjZWQgaW4gdGhlCitcJlxmKENXXCooQ2AuYmFzZWRcKihDJ1xmUiBzZWN0aW9uIGJ5IGRlZmF1bHQuICBCYXNlZCB2YXJpYWJsZXMgdXNlIHRoZSBcZihDVyR0cFxmUgorcmVnaXN0ZXIgYXMgYSBiYXNlIHJlZ2lzdGVyLCBhbmQgdGhlcmUgaXMgYSAxMjhcLWJ5dGUgbGltaXQgdG8gdGhlCitcJlxmKENXXCooQ2AuYmFzZWRcKihDJ1xmUiBzZWN0aW9uLgorLklQICJcZkJcLW1iaXRvcHNcZlIiIDQKKy5JWCBJdGVtICItbWJpdG9wcyIKK0VuYWJsZXMgdGhlIGJpdCBvcGVyYXRpb24gaW5zdHJ1Y3Rpb25zXC1cLVwtYml0IHRlc3QgKFxmKENXXCooQ2BidHN0bVwqKEMnXGZSKSwgc2V0CisoXGYoQ1dcKihDYGJzZXRtXCooQydcZlIpLCBjbGVhciAoXGYoQ1dcKihDYGJjbHJtXCooQydcZlIpLCBpbnZlcnQgKFxmKENXXCooQ2Bibm90bVwqKEMnXGZSKSwgYW5kCit0ZXN0LWFuZC1zZXQgKFxmKENXXCooQ2B0YXNcKihDJ1xmUikuCisuSVAgIlxmQlwtbWM9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tYz1uYW1lIgorU2VsZWN0cyB3aGljaCBzZWN0aW9uIGNvbnN0YW50IGRhdGEgaXMgcGxhY2VkIGluLiAgXGZJbmFtZVxmUiBtYXkKK2JlIFxmKENXXCooQ2B0aW55XCooQydcZlIsIFxmKENXXCooQ2BuZWFyXCooQydcZlIsIG9yIFxmKENXXCooQ2BmYXJcKihDJ1xmUi4KKy5JUCAiXGZCXC1tY2xpcFxmUiIgNAorLklYIEl0ZW0gIi1tY2xpcCIKK0VuYWJsZXMgdGhlIFxmKENXXCooQ2BjbGlwXCooQydcZlIgaW5zdHJ1Y3Rpb24uICBOb3RlIHRoYXQgXGYoQ1dcKihDYFwtbWNsaXBcKihDJ1xmUiBpcyBub3QKK3VzZWZ1bCB1bmxlc3MgeW91IGFsc28gcHJvdmlkZSBcZihDV1wqKENgXC1tbWlubWF4XCooQydcZlIuCisuSVAgIlxmQlwtbWNvbmZpZz1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1jb25maWc9bmFtZSIKK1NlbGVjdHMgb25lIG9mIHRoZSBidWlsdC1pbiBjb3JlIGNvbmZpZ3VyYXRpb25zLiAgRWFjaCBNZVAgY2hpcCBoYXMKK29uZSBvciBtb3JlIG1vZHVsZXMgaW4gaXQ7IGVhY2ggbW9kdWxlIGhhcyBhIGNvcmUgXHMtMUNQVVxzMCBhbmQgYSB2YXJpZXR5IG9mCitjb3Byb2Nlc3NvcnMsIG9wdGlvbmFsIGluc3RydWN0aW9ucywgYW5kIHBlcmlwaGVyYWxzLiAgVGhlCitcJlxmKENXXCooQ2BNZVBcLUludGVncmF0b3JcKihDJ1xmUiB0b29sLCBub3QgcGFydCBvZiBccy0xR0NDXHMwLCBwcm92aWRlcyB0aGVzZQorY29uZmlndXJhdGlvbnMgdGhyb3VnaCB0aGlzIG9wdGlvbjsgdXNpbmcgdGhpcyBvcHRpb24gaXMgdGhlIHNhbWUgYXMKK3VzaW5nIGFsbCB0aGUgY29ycmVzcG9uZGluZyBjb21tYW5kLWxpbmUgb3B0aW9ucy4gIFRoZSBkZWZhdWx0Citjb25maWd1cmF0aW9uIGlzIFxmKENXXCooQ2BkZWZhdWx0XCooQydcZlIuCisuSVAgIlxmQlwtbWNvcFxmUiIgNAorLklYIEl0ZW0gIi1tY29wIgorRW5hYmxlcyB0aGUgY29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBhIDMyXC1iaXQKK2NvcHJvY2Vzc29yLiAgTm90ZSB0aGF0IHRoZSBjb3Byb2Nlc3NvciBpcyBub3JtYWxseSBlbmFibGVkIHZpYSB0aGUKK1wmXGYoQ1dcKihDYFwtbWNvbmZpZz1cKihDJ1xmUiBvcHRpb24uCisuSVAgIlxmQlwtbWNvcDMyXGZSIiA0CisuSVggSXRlbSAiLW1jb3AzMiIKK0VuYWJsZXMgdGhlIDMyXC1iaXQgY29wcm9jZXNzb3IncyBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbWNvcDY0XGZSIiA0CisuSVggSXRlbSAiLW1jb3A2NCIKK0VuYWJsZXMgdGhlIDY0XC1iaXQgY29wcm9jZXNzb3IncyBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbWl2YzJcZlIiIDQKKy5JWCBJdGVtICItbWl2YzIiCitFbmFibGVzIFxzLTFJVkMyXHMwIHNjaGVkdWxpbmcuICBccy0xSVZDMlxzMCBpcyBhIDY0XC1iaXQgXHMtMVZMSVdcczAgY29wcm9jZXNzb3IuCisuSVAgIlxmQlwtbWRjXGZSIiA0CisuSVggSXRlbSAiLW1kYyIKK0NhdXNlcyBjb25zdGFudCB2YXJpYWJsZXMgdG8gYmUgcGxhY2VkIGluIHRoZSBcZihDV1wqKENgLm5lYXJcKihDJ1xmUiBzZWN0aW9uLgorLklQICJcZkJcLW1kaXZcZlIiIDQKKy5JWCBJdGVtICItbWRpdiIKK0VuYWJsZXMgdGhlIFxmKENXXCooQ2BkaXZcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGRpdnVcKihDJ1xmUiBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbWViXGZSIiA0CisuSVggSXRlbSAiLW1lYiIKK0dlbmVyYXRlIGJpZy1lbmRpYW4gY29kZS4KKy5JUCAiXGZCXC1tZWxcZlIiIDQKKy5JWCBJdGVtICItbWVsIgorR2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBjb2RlLgorLklQICJcZkJcLW1pb1wtdm9sYXRpbGVcZlIiIDQKKy5JWCBJdGVtICItbWlvLXZvbGF0aWxlIgorVGVsbHMgdGhlIGNvbXBpbGVyIHRoYXQgYW55IHZhcmlhYmxlIG1hcmtlZCB3aXRoIHRoZSBcZihDV1wqKENgaW9cKihDJ1xmUgorYXR0cmlidXRlIGlzIHRvIGJlIGNvbnNpZGVyZWQgdm9sYXRpbGUuCisuSVAgIlxmQlwtbWxcZlIiIDQKKy5JWCBJdGVtICItbWwiCitDYXVzZXMgdmFyaWFibGVzIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBcZihDV1wqKENgLmZhclwqKEMnXGZSIHNlY3Rpb24gYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbGVhZHpcZlIiIDQKKy5JWCBJdGVtICItbWxlYWR6IgorRW5hYmxlcyB0aGUgXGYoQ1dcKihDYGxlYWR6XCooQydcZlIgKGxlYWRpbmcgemVybykgaW5zdHJ1Y3Rpb24uCisuSVAgIlxmQlwtbW1cZlIiIDQKKy5JWCBJdGVtICItbW0iCitDYXVzZXMgdmFyaWFibGVzIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBcZihDV1wqKENgLm5lYXJcKihDJ1xmUiBzZWN0aW9uIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbW1pbm1heFxmUiIgNAorLklYIEl0ZW0gIi1tbWlubWF4IgorRW5hYmxlcyB0aGUgXGYoQ1dcKihDYG1pblwqKEMnXGZSIGFuZCBcZihDV1wqKENgbWF4XCooQydcZlIgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1tdWx0XGZSIiA0CisuSVggSXRlbSAiLW1tdWx0IgorRW5hYmxlcyB0aGUgbXVsdGlwbGljYXRpb24gYW5kIG11bHRpcGx5LWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1ub1wtb3B0c1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tb3B0cyIKK0Rpc2FibGVzIGFsbCB0aGUgb3B0aW9uYWwgaW5zdHJ1Y3Rpb25zIGVuYWJsZWQgYnkgXGYoQ1dcKihDYFwtbWFsbFwtb3B0c1wqKEMnXGZSLgorLklQICJcZkJcLW1yZXBlYXRcZlIiIDQKKy5JWCBJdGVtICItbXJlcGVhdCIKK0VuYWJsZXMgdGhlIFxmKENXXCooQ2ByZXBlYXRcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGVyZXBlYXRcKihDJ1xmUiBpbnN0cnVjdGlvbnMsIHVzZWQgZm9yCitsb3ctb3ZlcmhlYWQgbG9vcGluZy4KKy5JUCAiXGZCXC1tc1xmUiIgNAorLklYIEl0ZW0gIi1tcyIKK0NhdXNlcyBhbGwgdmFyaWFibGVzIHRvIGRlZmF1bHQgdG8gdGhlIFxmKENXXCooQ2AudGlueVwqKEMnXGZSIHNlY3Rpb24uICBOb3RlCit0aGF0IHRoZXJlIGlzIGEgNjU1MzZcLWJ5dGUgbGltaXQgdG8gdGhpcyBzZWN0aW9uLiAgQWNjZXNzZXMgdG8gdGhlc2UKK3ZhcmlhYmxlcyB1c2UgdGhlIFxmKENXJWdwXGZSIGJhc2UgcmVnaXN0ZXIuCisuSVAgIlxmQlwtbXNhdHVyXGZSIiA0CisuSVggSXRlbSAiLW1zYXR1ciIKK0VuYWJsZXMgdGhlIHNhdHVyYXRpb24gaW5zdHJ1Y3Rpb25zLiAgTm90ZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdAorY3VycmVudGx5IGdlbmVyYXRlIHRoZXNlIGl0c2VsZiwgYnV0IHRoaXMgb3B0aW9uIGlzIGluY2x1ZGVkIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHRvb2xzLCBsaWtlIFxmKENXXCooQ2Bhc1wqKEMnXGZSLgorLklQICJcZkJcLW1zZHJhbVxmUiIgNAorLklYIEl0ZW0gIi1tc2RyYW0iCitMaW5rIHRoZSBTRFJBTS1iYXNlZCBydW50aW1lIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgUk9NLWJhc2VkIHJ1bnRpbWUuCisuSVAgIlxmQlwtbXNpbVxmUiIgNAorLklYIEl0ZW0gIi1tc2ltIgorTGluayB0aGUgc2ltdWxhdG9yIHJ1bnRpbWUgbGlicmFyaWVzLgorLklQICJcZkJcLW1zaW1ub3ZlY1xmUiIgNAorLklYIEl0ZW0gIi1tc2ltbm92ZWMiCitMaW5rIHRoZSBzaW11bGF0b3IgcnVudGltZSBsaWJyYXJpZXMsIGV4Y2x1ZGluZyBidWlsdC1pbiBzdXBwb3J0Citmb3IgcmVzZXQgYW5kIGV4Y2VwdGlvbiB2ZWN0b3JzIGFuZCB0YWJsZXMuCisuSVAgIlxmQlwtbXRmXGZSIiA0CisuSVggSXRlbSAiLW10ZiIKK0NhdXNlcyBhbGwgZnVuY3Rpb25zIHRvIGRlZmF1bHQgdG8gdGhlIFxmKENXXCooQ2AuZmFyXCooQydcZlIgc2VjdGlvbi4gIFdpdGhvdXQKK3RoaXMgb3B0aW9uLCBmdW5jdGlvbnMgZGVmYXVsdCB0byB0aGUgXGYoQ1dcKihDYC5uZWFyXCooQydcZlIgc2VjdGlvbi4KKy5JUCAiXGZCXC1tdGlueT1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLW10aW55PW4iCitWYXJpYWJsZXMgdGhhdCBhcmUgXGZJblxmUiBieXRlcyBvciBzbWFsbGVyIGFyZSBhbGxvY2F0ZWQgdG8gdGhlCitcJlxmKENXXCooQ2AudGlueVwqKEMnXGZSIHNlY3Rpb24uICBUaGVzZSB2YXJpYWJsZXMgdXNlIHRoZSBcZihDVyRncFxmUiBiYXNlCityZWdpc3Rlci4gIFRoZSBkZWZhdWx0IGZvciB0aGlzIG9wdGlvbiBpcyA0LCBidXQgbm90ZSB0aGF0IHRoZXJlJ3MgYQorNjU1MzZcLWJ5dGUgbGltaXQgdG8gdGhlIFxmKENXXCooQ2AudGlueVwqKEMnXGZSIHNlY3Rpb24uCisuUFAKK1xmSU1pY3JvQmxhemUgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIk1pY3JvQmxhemUgT3B0aW9ucyIKKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCitVc2Ugc29mdHdhcmUgZW11bGF0aW9uIGZvciBmbG9hdGluZyBwb2ludCAoZGVmYXVsdCkuCisuSVAgIlxmQlwtbWhhcmRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWZsb2F0IgorVXNlIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tbWVtY3B5XGZSIiA0CisuSVggSXRlbSAiLW1tZW1jcHkiCitEbyBub3Qgb3B0aW1pemUgYmxvY2sgbW92ZXMsIHVzZSBcZihDV1wqKENgbWVtY3B5XCooQydcZlIuCisuSVAgIlxmQlwtbW5vXC1jbGVhcmJzc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tY2xlYXJic3MiCitUaGlzIG9wdGlvbiBpcyBkZXByZWNhdGVkLiAgVXNlIFxmQlwtZm5vXC16ZXJvXC1pbml0aWFsaXplZFwtaW5cLWJzc1xmUiBpbnN0ZWFkLgorLklQICJcZkJcLW1jcHU9XGZSXGZJY3B1LXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1jcHUtdHlwZSIKK1VzZSBmZWF0dXJlcyBvZiwgYW5kIHNjaGVkdWxlIGNvZGUgZm9yLCB0aGUgZ2l2ZW4gXHMtMUNQVVxzMC4KK1N1cHBvcnRlZCB2YWx1ZXMgYXJlIGluIHRoZSBmb3JtYXQgXGZCdlxmUlxmSVhcZlJcZkIuXGZSXGZJXHMtMVlZXHMwXGZSXGZCLlxmUlxmSVpcZlIsCit3aGVyZSBcZklYXGZSIGlzIGEgbWFqb3IgdmVyc2lvbiwgXGZJXHMtMVlZXHMwXGZSIGlzIHRoZSBtaW5vciB2ZXJzaW9uLCBhbmQKK1wmXGZJWlxmUiBpcyBjb21wYXRpYmlsaXR5IGNvZGUuICBFeGFtcGxlIHZhbHVlcyBhcmUgXGZCdjMuMDAuYVxmUiwKK1wmXGZCdjQuMDAuYlxmUiwgXGZCdjUuMDAuYVxmUiwgXGZCdjUuMDAuYlxmUiwgXGZCdjUuMDAuYlxmUiwgXGZCdjYuMDAuYVxmUi4KKy5JUCAiXGZCXC1teGxcLXNvZnRcLW11bFxmUiIgNAorLklYIEl0ZW0gIi1teGwtc29mdC1tdWwiCitVc2Ugc29mdHdhcmUgbXVsdGlwbHkgZW11bGF0aW9uIChkZWZhdWx0KS4KKy5JUCAiXGZCXC1teGxcLXNvZnRcLWRpdlxmUiIgNAorLklYIEl0ZW0gIi1teGwtc29mdC1kaXYiCitVc2Ugc29mdHdhcmUgZW11bGF0aW9uIGZvciBkaXZpZGVzIChkZWZhdWx0KS4KKy5JUCAiXGZCXC1teGxcLWJhcnJlbFwtc2hpZnRcZlIiIDQKKy5JWCBJdGVtICItbXhsLWJhcnJlbC1zaGlmdCIKK1VzZSB0aGUgaGFyZHdhcmUgYmFycmVsIHNoaWZ0ZXIuCisuSVAgIlxmQlwtbXhsXC1wYXR0ZXJuXC1jb21wYXJlXGZSIiA0CisuSVggSXRlbSAiLW14bC1wYXR0ZXJuLWNvbXBhcmUiCitVc2UgcGF0dGVybiBjb21wYXJlIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tc21hbGxcLWRpdmlkZXNcZlIiIDQKKy5JWCBJdGVtICItbXNtYWxsLWRpdmlkZXMiCitVc2UgdGFibGUgbG9va3VwIG9wdGltaXphdGlvbiBmb3Igc21hbGwgc2lnbmVkIGludGVnZXIgZGl2aXNpb25zLgorLklQICJcZkJcLW14bFwtc3RhY2tcLWNoZWNrXGZSIiA0CisuSVggSXRlbSAiLW14bC1zdGFjay1jaGVjayIKK1RoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuICBVc2UgXGZCXC1mc3RhY2tcLWNoZWNrXGZSIGluc3RlYWQuCisuSVAgIlxmQlwtbXhsXC1ncFwtb3B0XGZSIiA0CisuSVggSXRlbSAiLW14bC1ncC1vcHQiCitVc2UgR1AtcmVsYXRpdmUgXGYoQ1dcKihDYC5zZGF0YVwqKEMnXGZSL1xmKENXXCooQ2Auc2Jzc1wqKEMnXGZSIHNlY3Rpb25zLgorLklQICJcZkJcLW14bFwtbXVsdGlwbHlcLWhpZ2hcZlIiIDQKKy5JWCBJdGVtICItbXhsLW11bHRpcGx5LWhpZ2giCitVc2UgbXVsdGlwbHkgaGlnaCBpbnN0cnVjdGlvbnMgZm9yIGhpZ2ggcGFydCBvZiAzMngzMiBtdWx0aXBseS4KKy5JUCAiXGZCXC1teGxcLWZsb2F0XC1jb252ZXJ0XGZSIiA0CisuSVggSXRlbSAiLW14bC1mbG9hdC1jb252ZXJ0IgorVXNlIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IGNvbnZlcnNpb24gaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW14bFwtZmxvYXRcLXNxcnRcZlIiIDQKKy5JWCBJdGVtICItbXhsLWZsb2F0LXNxcnQiCitVc2UgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgc3F1YXJlIHJvb3QgaW5zdHJ1Y3Rpb24uCisuSVAgIlxmQlwtbWJpZ1wtZW5kaWFuXGZSIiA0CisuSVggSXRlbSAiLW1iaWctZW5kaWFuIgorR2VuZXJhdGUgY29kZSBmb3IgYSBiaWctZW5kaWFuIHRhcmdldC4KKy5JUCAiXGZCXC1tbGl0dGxlXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWxpdHRsZS1lbmRpYW4iCitHZW5lcmF0ZSBjb2RlIGZvciBhIGxpdHRsZS1lbmRpYW4gdGFyZ2V0LgorLklQICJcZkJcLW14bFwtcmVvcmRlclxmUiIgNAorLklYIEl0ZW0gIi1teGwtcmVvcmRlciIKK1VzZSByZW9yZGVyIGluc3RydWN0aW9ucyAoc3dhcCBhbmQgYnl0ZSByZXZlcnNlZCBsb2FkL3N0b3JlKS4KKy5JUCAiXGZCXC1teGxcLW1vZGVcLVxmUlxmSWFwcC1tb2RlbFxmUiIgNAorLklYIEl0ZW0gIi1teGwtbW9kZS1hcHAtbW9kZWwiCitTZWxlY3QgYXBwbGljYXRpb24gbW9kZWwgXGZJYXBwLW1vZGVsXGZSLiAgVmFsaWQgbW9kZWxzIGFyZQorLlJTIDQKKy5JUCAiXGZCZXhlY3V0YWJsZVxmUiIgNAorLklYIEl0ZW0gImV4ZWN1dGFibGUiCitub3JtYWwgZXhlY3V0YWJsZSAoZGVmYXVsdCksIHVzZXMgc3RhcnR1cCBjb2RlIFxmSWNydDAub1xmUi4KKy5JUCAiXGZCeG1kc3R1YlxmUiIgNAorLklYIEl0ZW0gInhtZHN0dWIiCitmb3IgdXNlIHdpdGggWGlsaW54IE1pY3JvcHJvY2Vzc29yIERlYnVnZ2VyIChccy0xWE1EXHMwKSBiYXNlZAorc29mdHdhcmUgaW50cnVzaXZlIGRlYnVnIGFnZW50IGNhbGxlZCB4bWRzdHViLiBUaGlzIHVzZXMgc3RhcnR1cCBmaWxlCitcJlxmSWNydDEub1xmUiBhbmQgc2V0cyB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgcHJvZ3JhbSB0byAweDgwMC4KKy5JUCAiXGZCYm9vdHN0cmFwXGZSIiA0CisuSVggSXRlbSAiYm9vdHN0cmFwIgorZm9yIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBsb2FkZWQgdXNpbmcgYSBib290bG9hZGVyLgorVGhpcyBtb2RlbCB1c2VzIHN0YXJ0dXAgZmlsZSBcZkljcnQyLm9cZlIgd2hpY2ggZG9lcyBub3QgY29udGFpbiBhIHByb2Nlc3NvcgorcmVzZXQgdmVjdG9yIGhhbmRsZXIuIFRoaXMgaXMgc3VpdGFibGUgZm9yIHRyYW5zZmVycmluZyBjb250cm9sIG9uIGEKK3Byb2Nlc3NvciByZXNldCB0byB0aGUgYm9vdGxvYWRlciByYXRoZXIgdGhhbiB0aGUgYXBwbGljYXRpb24uCisuSVAgIlxmQm5vdmVjdG9yc1xmUiIgNAorLklYIEl0ZW0gIm5vdmVjdG9ycyIKK2ZvciBhcHBsaWNhdGlvbnMgdGhhdCBkbyBub3QgcmVxdWlyZSBhbnkgb2YgdGhlCitNaWNyb0JsYXplIHZlY3RvcnMuIFRoaXMgb3B0aW9uIG1heSBiZSB1c2VmdWwgZm9yIGFwcGxpY2F0aW9ucyBydW5uaW5nCit3aXRoaW4gYSBtb25pdG9yaW5nIGFwcGxpY2F0aW9uLiBUaGlzIG1vZGVsIHVzZXMgXGZJY3J0My5vXGZSIGFzIGEgc3RhcnR1cCBmaWxlLgorLlJFCisuUlMgNAorLlNwCitPcHRpb24gXGZCXC14bFwtbW9kZVwtXGZSXGZJYXBwLW1vZGVsXGZSIGlzIGEgZGVwcmVjYXRlZCBhbGlhcyBmb3IKK1wmXGZCXC1teGxcLW1vZGVcLVxmUlxmSWFwcC1tb2RlbFxmUi4KKy5SRQorLlBQCitcZklccy0xTUlQU1xzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTUlQUyBPcHRpb25zIgorLklQICJcZkJcLUVCXGZSIiA0CisuSVggSXRlbSAiLUVCIgorR2VuZXJhdGUgYmlnLWVuZGlhbiBjb2RlLgorLklQICJcZkJcLUVMXGZSIiA0CisuSVggSXRlbSAiLUVMIgorR2VuZXJhdGUgbGl0dGxlLWVuZGlhbiBjb2RlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgXGZCbWlwcyplbFwtKlwtKlxmUgorY29uZmlndXJhdGlvbnMuCisuSVAgIlxmQlwtbWFyY2g9XGZSXGZJYXJjaFxmUiIgNAorLklYIEl0ZW0gIi1tYXJjaD1hcmNoIgorR2VuZXJhdGUgY29kZSB0aGF0IHJ1bnMgb24gXGZJYXJjaFxmUiwgd2hpY2ggY2FuIGJlIHRoZSBuYW1lIG9mIGEKK2dlbmVyaWMgXHMtMU1JUFNcczAgXHMtMUlTQVxzMCwgb3IgdGhlIG5hbWUgb2YgYSBwYXJ0aWN1bGFyIHByb2Nlc3Nvci4KK1RoZSBccy0xSVNBXHMwIG5hbWVzIGFyZToKK1wmXGZCbWlwczFcZlIsIFxmQm1pcHMyXGZSLCBcZkJtaXBzM1xmUiwgXGZCbWlwczRcZlIsCitcJlxmQm1pcHMzMlxmUiwgXGZCbWlwczMycjJcZlIsIFxmQm1pcHM2NFxmUiBhbmQgXGZCbWlwczY0cjJcZlIuCitUaGUgcHJvY2Vzc29yIG5hbWVzIGFyZToKK1wmXGZCNGtjXGZSLCBcZkI0a21cZlIsIFxmQjRrcFxmUiwgXGZCNGtzY1xmUiwKK1wmXGZCNGtlY1xmUiwgXGZCNGtlbVxmUiwgXGZCNGtlcFxmUiwgXGZCNGtzZFxmUiwKK1wmXGZCNWtjXGZSLCBcZkI1a2ZcZlIsCitcJlxmQjIwa2NcZlIsCitcJlxmQjI0a2NcZlIsIFxmQjI0a2YyXzFcZlIsIFxmQjI0a2YxXzFcZlIsCitcJlxmQjI0a2VjXGZSLCBcZkIyNGtlZjJfMVxmUiwgXGZCMjRrZWYxXzFcZlIsCitcJlxmQjM0a2NcZlIsIFxmQjM0a2YyXzFcZlIsIFxmQjM0a2YxXzFcZlIsIFxmQjM0a25cZlIsCitcJlxmQjc0a2NcZlIsIFxmQjc0a2YyXzFcZlIsIFxmQjc0a2YxXzFcZlIsIFxmQjc0a2YzXzJcZlIsCitcJlxmQjEwMDRrY1xmUiwgXGZCMTAwNGtmMl8xXGZSLCBcZkIxMDA0a2YxXzFcZlIsCitcJlxmQmxvb25nc29uMmVcZlIsIFxmQmxvb25nc29uMmZcZlIsIFxmQmxvb25nc29uM2FcZlIsCitcJlxmQm00a1xmUiwKK1wmXGZCb2N0ZW9uXGZSLCBcZkJvY3Rlb24rXGZSLCBcZkJvY3Rlb24yXGZSLAorXCZcZkJvcmlvblxmUiwKK1wmXGZCcjIwMDBcZlIsIFxmQnIzMDAwXGZSLCBcZkJyMzkwMFxmUiwgXGZCcjQwMDBcZlIsIFxmQnI0NDAwXGZSLAorXCZcZkJyNDYwMFxmUiwgXGZCcjQ2NTBcZlIsIFxmQnI0NzAwXGZSLCBcZkJyNjAwMFxmUiwgXGZCcjgwMDBcZlIsCitcJlxmQnJtNzAwMFxmUiwgXGZCcm05MDAwXGZSLAorXCZcZkJyMTAwMDBcZlIsIFxmQnIxMjAwMFxmUiwgXGZCcjE0MDAwXGZSLCBcZkJyMTYwMDBcZlIsCitcJlxmQnNiMVxmUiwKK1wmXGZCc3I3MTAwMFxmUiwKK1wmXGZCdnI0MTAwXGZSLCBcZkJ2cjQxMTFcZlIsIFxmQnZyNDEyMFxmUiwgXGZCdnI0MTMwXGZSLCBcZkJ2cjQzMDBcZlIsCitcJlxmQnZyNTAwMFxmUiwgXGZCdnI1NDAwXGZSLCBcZkJ2cjU1MDBcZlIsCitcJlxmQnhsclxmUiBhbmQgXGZCeGxwXGZSLgorVGhlIHNwZWNpYWwgdmFsdWUgXGZCZnJvbS1hYmlcZlIgc2VsZWN0cyB0aGUKK21vc3QgY29tcGF0aWJsZSBhcmNoaXRlY3R1cmUgZm9yIHRoZSBzZWxlY3RlZCBccy0xQUJJXHMwICh0aGF0IGlzLAorXCZcZkJtaXBzMVxmUiBmb3IgMzJcLWJpdCBBQklzIGFuZCBcZkJtaXBzM1xmUiBmb3IgNjRcLWJpdCBBQklzKS4KKy5TcAorVGhlIG5hdGl2ZSBMaW51eC9HTlUgdG9vbGNoYWluIGFsc28gc3VwcG9ydHMgdGhlIHZhbHVlIFxmQm5hdGl2ZVxmUiwKK3doaWNoIHNlbGVjdHMgdGhlIGJlc3QgYXJjaGl0ZWN0dXJlIG9wdGlvbiBmb3IgdGhlIGhvc3QgcHJvY2Vzc29yLgorXCZcZkJcLW1hcmNoPW5hdGl2ZVxmUiBoYXMgbm8gZWZmZWN0IGlmIFxzLTFHQ0NcczAgZG9lcyBub3QgcmVjb2duaXplCit0aGUgcHJvY2Vzc29yLgorLlNwCitJbiBwcm9jZXNzb3IgbmFtZXMsIGEgZmluYWwgXGZCMDAwXGZSIGNhbiBiZSBhYmJyZXZpYXRlZCBhcyBcZkJrXGZSCisoZm9yIGV4YW1wbGUsIFxmQlwtbWFyY2g9cjJrXGZSKS4gIFByZWZpeGVzIGFyZSBvcHRpb25hbCwgYW5kCitcJlxmQnZyXGZSIG1heSBiZSB3cml0dGVuIFxmQnJcZlIuCisuU3AKK05hbWVzIG9mIHRoZSBmb3JtIFxmSW5cZlJcZkJmMl8xXGZSIHJlZmVyIHRvIHByb2Nlc3NvcnMgd2l0aAorRlBVcyBjbG9ja2VkIGF0IGhhbGYgdGhlIHJhdGUgb2YgdGhlIGNvcmUsIG5hbWVzIG9mIHRoZSBmb3JtCitcJlxmSW5cZlJcZkJmMV8xXGZSIHJlZmVyIHRvIHByb2Nlc3NvcnMgd2l0aCBGUFVzIGNsb2NrZWQgYXQgdGhlIHNhbWUKK3JhdGUgYXMgdGhlIGNvcmUsIGFuZCBuYW1lcyBvZiB0aGUgZm9ybSBcZkluXGZSXGZCZjNfMlxmUiByZWZlciB0bworcHJvY2Vzc29ycyB3aXRoIEZQVXMgY2xvY2tlZCBhIHJhdGlvIG9mIDM6MiB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvcmUuCitGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCBcZkluXGZSXGZCZlxmUiBpcyBhY2NlcHRlZCBhcyBhIHN5bm9ueW0KK2ZvciBcZkluXGZSXGZCZjJfMVxmUiB3aGlsZSBcZkluXGZSXGZCeFxmUiBhbmQgXGZJYlxmUlxmQmZ4XGZSIGFyZQorYWNjZXB0ZWQgYXMgc3lub255bXMgZm9yIFxmSW5cZlJcZkJmMV8xXGZSLgorLlNwCitcJlxzLTFHQ0NcczAgZGVmaW5lcyB0d28gbWFjcm9zIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbi4gIFRoZSBmaXJzdAoraXMgXGZCX01JUFNfQVJDSFxmUiwgd2hpY2ggZ2l2ZXMgdGhlIG5hbWUgb2YgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYXMKK2Egc3RyaW5nLiAgVGhlIHNlY29uZCBoYXMgdGhlIGZvcm0gXGZCX01JUFNfQVJDSF9cZlJcZklmb29cZlIsCit3aGVyZSBcZklmb29cZlIgaXMgdGhlIGNhcGl0YWxpemVkIHZhbHVlIG9mIFxmQl9NSVBTX0FSQ0hcZlIuCitGb3IgZXhhbXBsZSwgXGZCXC1tYXJjaD1yMjAwMFxmUiBzZXRzIFxmQl9NSVBTX0FSQ0hcZlIKK3RvIFxmQlwqKEwicjIwMDBcKihSIlxmUiBhbmQgZGVmaW5lcyB0aGUgbWFjcm8gXGZCX01JUFNfQVJDSF9SMjAwMFxmUi4KKy5TcAorTm90ZSB0aGF0IHRoZSBcZkJfTUlQU19BUkNIXGZSIG1hY3JvIHVzZXMgdGhlIHByb2Nlc3NvciBuYW1lcyBnaXZlbgorYWJvdmUuICBJbiBvdGhlciB3b3JkcywgaXQgaGFzIHRoZSBmdWxsIHByZWZpeCBhbmQgZG9lcyBub3QKK2FiYnJldmlhdGUgXGZCMDAwXGZSIGFzIFxmQmtcZlIuICBJbiB0aGUgY2FzZSBvZiBcZkJmcm9tLWFiaVxmUiwKK3RoZSBtYWNybyBuYW1lcyB0aGUgcmVzb2x2ZWQgYXJjaGl0ZWN0dXJlIChlaXRoZXIgXGZCXCooTCJtaXBzMVwqKFIiXGZSIG9yCitcJlxmQlwqKEwibWlwczNcKihSIlxmUikuICBJdCBuYW1lcyB0aGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUgd2hlbiBubworXCZcZkJcLW1hcmNoXGZSIG9wdGlvbiBpcyBnaXZlbi4KKy5JUCAiXGZCXC1tdHVuZT1cZlJcZklhcmNoXGZSIiA0CisuSVggSXRlbSAiLW10dW5lPWFyY2giCitPcHRpbWl6ZSBmb3IgXGZJYXJjaFxmUi4gIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBvcHRpb24gY29udHJvbHMKK3RoZSB3YXkgaW5zdHJ1Y3Rpb25zIGFyZSBzY2hlZHVsZWQsIGFuZCB0aGUgcGVyY2VpdmVkIGNvc3Qgb2YgYXJpdGhtZXRpYworb3BlcmF0aW9ucy4gIFRoZSBsaXN0IG9mIFxmSWFyY2hcZlIgdmFsdWVzIGlzIHRoZSBzYW1lIGFzIGZvcgorXCZcZkJcLW1hcmNoXGZSLgorLlNwCitXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLCBccy0xR0NDXHMwIG9wdGltaXplcyBmb3IgdGhlIHByb2Nlc3Nvcgorc3BlY2lmaWVkIGJ5IFxmQlwtbWFyY2hcZlIuICBCeSB1c2luZyBcZkJcLW1hcmNoXGZSIGFuZAorXCZcZkJcLW10dW5lXGZSIHRvZ2V0aGVyLCBpdCBpcyBwb3NzaWJsZSB0byBnZW5lcmF0ZSBjb2RlIHRoYXQKK3J1bnMgb24gYSBmYW1pbHkgb2YgcHJvY2Vzc29ycywgYnV0IG9wdGltaXplIHRoZSBjb2RlIGZvciBvbmUKK3BhcnRpY3VsYXIgbWVtYmVyIG9mIHRoYXQgZmFtaWx5LgorLlNwCitcJlxmQlwtbXR1bmVcZlIgZGVmaW5lcyB0aGUgbWFjcm9zIFxmQl9NSVBTX1RVTkVcZlIgYW5kCitcJlxmQl9NSVBTX1RVTkVfXGZSXGZJZm9vXGZSLCB3aGljaCB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyB0aGUKK1wmXGZCXC1tYXJjaFxmUiBvbmVzIGRlc2NyaWJlZCBhYm92ZS4KKy5JUCAiXGZCXC1taXBzMVxmUiIgNAorLklYIEl0ZW0gIi1taXBzMSIKK0VxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD1taXBzMVxmUi4KKy5JUCAiXGZCXC1taXBzMlxmUiIgNAorLklYIEl0ZW0gIi1taXBzMiIKK0VxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD1taXBzMlxmUi4KKy5JUCAiXGZCXC1taXBzM1xmUiIgNAorLklYIEl0ZW0gIi1taXBzMyIKK0VxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD1taXBzM1xmUi4KKy5JUCAiXGZCXC1taXBzNFxmUiIgNAorLklYIEl0ZW0gIi1taXBzNCIKK0VxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD1taXBzNFxmUi4KKy5JUCAiXGZCXC1taXBzMzJcZlIiIDQKKy5JWCBJdGVtICItbWlwczMyIgorRXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPW1pcHMzMlxmUi4KKy5JUCAiXGZCXC1taXBzMzJyMlxmUiIgNAorLklYIEl0ZW0gIi1taXBzMzJyMiIKK0VxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD1taXBzMzJyMlxmUi4KKy5JUCAiXGZCXC1taXBzNjRcZlIiIDQKKy5JWCBJdGVtICItbWlwczY0IgorRXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPW1pcHM2NFxmUi4KKy5JUCAiXGZCXC1taXBzNjRyMlxmUiIgNAorLklYIEl0ZW0gIi1taXBzNjRyMiIKK0VxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD1taXBzNjRyMlxmUi4KKy5JUCAiXGZCXC1taXBzMTZcZlIiIDQKKy5JWCBJdGVtICItbWlwczE2IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW1pcHMxNlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWlwczE2IgorLlBECitHZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSBccy0xTUlQUzE2XHMwIGNvZGUuICBJZiBccy0xR0NDXHMwIGlzIHRhcmdldGluZyBhCitcJlxzLTFNSVBTMzJcczAgb3IgXHMtMU1JUFM2NFxzMCBhcmNoaXRlY3R1cmUsIGl0IG1ha2VzIHVzZSBvZiB0aGUgTUlQUzE2ZSBccy0xQVNFXHMwLgorLlNwCitcJlxzLTFNSVBTMTZcczAgY29kZSBnZW5lcmF0aW9uIGNhbiBhbHNvIGJlIGNvbnRyb2xsZWQgb24gYSBwZXItZnVuY3Rpb24gYmFzaXMKK2J5IG1lYW5zIG9mIFxmKENXXCooQ2BtaXBzMTZcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYG5vbWlwczE2XCooQydcZlIgYXR0cmlidXRlcy4KKy5JUCAiXGZCXC1tZmxpcFwtbWlwczE2XGZSIiA0CisuSVggSXRlbSAiLW1mbGlwLW1pcHMxNiIKK0dlbmVyYXRlIFxzLTFNSVBTMTZcczAgY29kZSBvbiBhbHRlcm5hdGluZyBmdW5jdGlvbnMuICBUaGlzIG9wdGlvbiBpcyBwcm92aWRlZAorZm9yIHJlZ3Jlc3Npb24gdGVzdGluZyBvZiBtaXhlZCBNSVBTMTYvbm9uXC1NSVBTMTYgY29kZSBnZW5lcmF0aW9uLCBhbmQgaXMKK25vdCBpbnRlbmRlZCBmb3Igb3JkaW5hcnkgdXNlIGluIGNvbXBpbGluZyB1c2VyIGNvZGUuCisuSVAgIlxmQlwtbWludGVybGlua1wtbWlwczE2XGZSIiA0CisuSVggSXRlbSAiLW1pbnRlcmxpbmstbWlwczE2IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWludGVybGlua1wtbWlwczE2XGZSIiA0CisuSVggSXRlbSAiLW1uby1pbnRlcmxpbmstbWlwczE2IgorLlBECitSZXF1aXJlIChkbyBub3QgcmVxdWlyZSkgdGhhdCBub25cLU1JUFMxNiBjb2RlIGJlIGxpbmstY29tcGF0aWJsZSB3aXRoCitcJlxzLTFNSVBTMTZcczAgY29kZS4KKy5TcAorRm9yIGV4YW1wbGUsIG5vblwtTUlQUzE2IGNvZGUgY2Fubm90IGp1bXAgZGlyZWN0bHkgdG8gXHMtMU1JUFMxNlxzMCBjb2RlOworaXQgbXVzdCBlaXRoZXIgdXNlIGEgY2FsbCBvciBhbiBpbmRpcmVjdCBqdW1wLiAgXGZCXC1taW50ZXJsaW5rXC1taXBzMTZcZlIKK3RoZXJlZm9yZSBkaXNhYmxlcyBkaXJlY3QganVtcHMgdW5sZXNzIFxzLTFHQ0NcczAga25vd3MgdGhhdCB0aGUgdGFyZ2V0IG9mIHRoZQoranVtcCBpcyBub3QgXHMtMU1JUFMxNlxzMC4KKy5JUCAiXGZCXC1tYWJpPTMyXGZSIiA0CisuSVggSXRlbSAiLW1hYmk9MzIiCisuUEQgMAorLklQICJcZkJcLW1hYmk9bzY0XGZSIiA0CisuSVggSXRlbSAiLW1hYmk9bzY0IgorLklQICJcZkJcLW1hYmk9bjMyXGZSIiA0CisuSVggSXRlbSAiLW1hYmk9bjMyIgorLklQICJcZkJcLW1hYmk9NjRcZlIiIDQKKy5JWCBJdGVtICItbWFiaT02NCIKKy5JUCAiXGZCXC1tYWJpPWVhYmlcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1lYWJpIgorLlBECitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgZ2l2ZW4gXHMtMUFCSVxzMC4KKy5TcAorTm90ZSB0aGF0IHRoZSBccy0xRUFCSVxzMCBoYXMgYSAzMlwtYml0IGFuZCBhIDY0XC1iaXQgdmFyaWFudC4gIFxzLTFHQ0NcczAgbm9ybWFsbHkKK2dlbmVyYXRlcyA2NFwtYml0IGNvZGUgd2hlbiB5b3Ugc2VsZWN0IGEgNjRcLWJpdCBhcmNoaXRlY3R1cmUsIGJ1dCB5b3UKK2NhbiB1c2UgXGZCXC1tZ3AzMlxmUiB0byBnZXQgMzJcLWJpdCBjb2RlIGluc3RlYWQuCisuU3AKK0ZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgTzY0IFxzLTFBQklcczAsIHNlZQorPFxmQmh0dHA6Ly9nY2MuZ251Lm9yZy9wcm9qZWN0cy9taXBzbzY0XC1hYmkuaHRtbFxmUj4uCisuU3AKK1wmXHMtMUdDQ1xzMCBzdXBwb3J0cyBhIHZhcmlhbnQgb2YgdGhlIG8zMiBccy0xQUJJXHMwIGluIHdoaWNoIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycworYXJlIDY0IHJhdGhlciB0aGFuIDMyIGJpdHMgd2lkZS4gIFlvdSBjYW4gc2VsZWN0IHRoaXMgY29tYmluYXRpb24gd2l0aAorXCZcZkJcLW1hYmk9MzJcZlIgXGZCXC1tZnA2NFxmUi4gIFRoaXMgXHMtMUFCSVxzMCByZWxpZXMgb24gdGhlIFxmKENXXCooQ2BtdGhjMVwqKEMnXGZSCithbmQgXGYoQ1dcKihDYG1maGMxXCooQydcZlIgaW5zdHJ1Y3Rpb25zIGFuZCBpcyB0aGVyZWZvcmUgb25seSBzdXBwb3J0ZWQgZm9yCitcJlxzLTFNSVBTMzJSMlxzMCBwcm9jZXNzb3JzLgorLlNwCitUaGUgcmVnaXN0ZXIgYXNzaWdubWVudHMgZm9yIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcyByZW1haW4gdGhlCitzYW1lLCBidXQgZWFjaCBzY2FsYXIgdmFsdWUgaXMgcGFzc2VkIGluIGEgc2luZ2xlIDY0XC1iaXQgcmVnaXN0ZXIKK3JhdGhlciB0aGFuIGEgcGFpciBvZiAzMlwtYml0IHJlZ2lzdGVycy4gIEZvciBleGFtcGxlLCBzY2FsYXIKK2Zsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gXGZCXGYoQ0IkZjBcZkJcZlIgb25seSwgbm90IGEKK1wmXGZCXGYoQ0IkZjBcZkJcZlIvXGZCXGYoQ0IkZjFcZkJcZlIgcGFpci4gIFRoZSBzZXQgb2YgY2FsbC1zYXZlZCByZWdpc3RlcnMgYWxzbworcmVtYWlucyB0aGUgc2FtZSwgYnV0IGFsbCA2NCBiaXRzIGFyZSBzYXZlZC4KKy5JUCAiXGZCXC1tYWJpY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbWFiaWNhbGxzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWFiaWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1uby1hYmljYWxscyIKKy5QRAorR2VuZXJhdGUgKGRvIG5vdCBnZW5lcmF0ZSkgY29kZSB0aGF0IGlzIHN1aXRhYmxlIGZvciBTVlI0XC1zdHlsZQorZHluYW1pYyBvYmplY3RzLiAgXGZCXC1tYWJpY2FsbHNcZlIgaXMgdGhlIGRlZmF1bHQgZm9yIFNWUjRcLWJhc2VkCitzeXN0ZW1zLgorLklQICJcZkJcLW1zaGFyZWRcZlIiIDQKKy5JWCBJdGVtICItbXNoYXJlZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zaGFyZWRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNoYXJlZCIKKy5QRAorR2VuZXJhdGUgKGRvIG5vdCBnZW5lcmF0ZSkgY29kZSB0aGF0IGlzIGZ1bGx5IHBvc2l0aW9uLWluZGVwZW5kZW50LAorYW5kIHRoYXQgY2FuIHRoZXJlZm9yZSBiZSBsaW5rZWQgaW50byBzaGFyZWQgbGlicmFyaWVzLiAgVGhpcyBvcHRpb24KK29ubHkgYWZmZWN0cyBcZkJcLW1hYmljYWxsc1xmUi4KKy5TcAorQWxsIFxmQlwtbWFiaWNhbGxzXGZSIGNvZGUgaGFzIHRyYWRpdGlvbmFsbHkgYmVlbiBwb3NpdGlvbi1pbmRlcGVuZGVudCwKK3JlZ2FyZGxlc3Mgb2Ygb3B0aW9ucyBsaWtlIFxmQlwtZlBJQ1xmUiBhbmQgXGZCXC1mcGljXGZSLiAgSG93ZXZlciwKK2FzIGFuIGV4dGVuc2lvbiwgdGhlIFxzLTFHTlVcczAgdG9vbGNoYWluIGFsbG93cyBleGVjdXRhYmxlcyB0byB1c2UgYWJzb2x1dGUKK2FjY2Vzc2VzIGZvciBsb2NhbGx5LWJpbmRpbmcgc3ltYm9scy4gIEl0IGNhbiBhbHNvIHVzZSBzaG9ydGVyIFxzLTFHUFxzMAoraW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIGFuZCBnZW5lcmF0ZSBkaXJlY3QgY2FsbHMgdG8gbG9jYWxseS1kZWZpbmVkCitmdW5jdGlvbnMuICBUaGlzIG1vZGUgaXMgc2VsZWN0ZWQgYnkgXGZCXC1tbm9cLXNoYXJlZFxmUi4KKy5TcAorXCZcZkJcLW1ub1wtc2hhcmVkXGZSIGRlcGVuZHMgb24gYmludXRpbHMgMi4xNiBvciBoaWdoZXIgYW5kIGdlbmVyYXRlcworb2JqZWN0cyB0aGF0IGNhbiBvbmx5IGJlIGxpbmtlZCBieSB0aGUgXHMtMUdOVVxzMCBsaW5rZXIuICBIb3dldmVyLCB0aGUgb3B0aW9uCitkb2VzIG5vdCBhZmZlY3QgdGhlIFxzLTFBQklcczAgb2YgdGhlIGZpbmFsIGV4ZWN1dGFibGU7IGl0IG9ubHkgYWZmZWN0cyB0aGUgXHMtMUFCSVxzMAorb2YgcmVsb2NhdGFibGUgb2JqZWN0cy4gIFVzaW5nIFxmQlwtbW5vXC1zaGFyZWRcZlIgZ2VuZXJhbGx5IG1ha2VzCitleGVjdXRhYmxlcyBib3RoIHNtYWxsZXIgYW5kIHF1aWNrZXIuCisuU3AKK1wmXGZCXC1tc2hhcmVkXGZSIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1wbHRcZlIiIDQKKy5JWCBJdGVtICItbXBsdCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1wbHRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBsdCIKKy5QRAorQXNzdW1lIChkbyBub3QgYXNzdW1lKSB0aGF0IHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgbGlua2Vycworc3VwcG9ydCBQTFRzIGFuZCBjb3B5IHJlbG9jYXRpb25zLiAgVGhpcyBvcHRpb24gb25seSBhZmZlY3RzCitcJlxmQlwtbW5vXC1zaGFyZWQgXC1tYWJpY2FsbHNcZlIuICBGb3IgdGhlIG42NCBccy0xQUJJXHMwLCB0aGlzIG9wdGlvbgoraGFzIG5vIGVmZmVjdCB3aXRob3V0IFxmQlwtbXN5bTMyXGZSLgorLlNwCitZb3UgY2FuIG1ha2UgXGZCXC1tcGx0XGZSIHRoZSBkZWZhdWx0IGJ5IGNvbmZpZ3VyaW5nCitcJlxzLTFHQ0NcczAgd2l0aCBcZkJcLVwtd2l0aFwtbWlwc1wtcGx0XGZSLiAgVGhlIGRlZmF1bHQgaXMKK1wmXGZCXC1tbm9cLXBsdFxmUiBvdGhlcndpc2UuCisuSVAgIlxmQlwtbXhnb3RcZlIiIDQKKy5JWCBJdGVtICItbXhnb3QiCisuUEQgMAorLklQICJcZkJcLW1ub1wteGdvdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8teGdvdCIKKy5QRAorTGlmdCAoZG8gbm90IGxpZnQpIHRoZSB1c3VhbCByZXN0cmljdGlvbnMgb24gdGhlIHNpemUgb2YgdGhlIGdsb2JhbAorb2Zmc2V0IHRhYmxlLgorLlNwCitcJlxzLTFHQ0NcczAgbm9ybWFsbHkgdXNlcyBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byBsb2FkIHZhbHVlcyBmcm9tIHRoZSBccy0xR09UXHMwLgorV2hpbGUgdGhpcyBpcyByZWxhdGl2ZWx5IGVmZmljaWVudCwgaXQgb25seSB3b3JrcyBpZiB0aGUgXHMtMUdPVFxzMAoraXMgc21hbGxlciB0aGFuIGFib3V0IDY0ay4gIEFueXRoaW5nIGxhcmdlciBjYXVzZXMgdGhlIGxpbmtlcgordG8gcmVwb3J0IGFuIGVycm9yIHN1Y2ggYXM6CisuU3AKKy5WYiAxCitcJiAgICAgICAgcmVsb2NhdGlvbiB0cnVuY2F0ZWQgdG8gZml0OiBSX01JUFNfR09UMTYgZm9vYmFyCisuVmUKKy5TcAorSWYgdGhpcyBoYXBwZW5zLCB5b3Ugc2hvdWxkIHJlY29tcGlsZSB5b3VyIGNvZGUgd2l0aCBcZkJcLW14Z290XGZSLgorVGhpcyB3b3JrcyB3aXRoIHZlcnkgbGFyZ2UgR09UcywgYWx0aG91Z2ggdGhlIGNvZGUgaXMgYWxzbworbGVzcyBlZmZpY2llbnQsIHNpbmNlIGl0IHRha2VzIHRocmVlIGluc3RydWN0aW9ucyB0byBmZXRjaCB0aGUKK3ZhbHVlIG9mIGEgZ2xvYmFsIHN5bWJvbC4KKy5TcAorTm90ZSB0aGF0IHNvbWUgbGlua2VycyBjYW4gY3JlYXRlIG11bHRpcGxlIEdPVHMuICBJZiB5b3UgaGF2ZSBzdWNoIGEKK2xpbmtlciwgeW91IHNob3VsZCBvbmx5IG5lZWQgdG8gdXNlIFxmQlwtbXhnb3RcZlIgd2hlbiBhIHNpbmdsZSBvYmplY3QKK2ZpbGUgYWNjZXNzZXMgbW9yZSB0aGFuIDY0aydzIHdvcnRoIG9mIFxzLTFHT1RcczAgZW50cmllcy4gIFZlcnkgZmV3IGRvLgorLlNwCitUaGVzZSBvcHRpb25zIGhhdmUgbm8gZWZmZWN0IHVubGVzcyBccy0xR0NDXHMwIGlzIGdlbmVyYXRpbmcgcG9zaXRpb24KK2luZGVwZW5kZW50IGNvZGUuCisuSVAgIlxmQlwtbWdwMzJcZlIiIDQKKy5JWCBJdGVtICItbWdwMzIiCitBc3N1bWUgdGhhdCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGFyZSAzMiBiaXRzIHdpZGUuCisuSVAgIlxmQlwtbWdwNjRcZlIiIDQKKy5JWCBJdGVtICItbWdwNjQiCitBc3N1bWUgdGhhdCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzIGFyZSA2NCBiaXRzIHdpZGUuCisuSVAgIlxmQlwtbWZwMzJcZlIiIDQKKy5JWCBJdGVtICItbWZwMzIiCitBc3N1bWUgdGhhdCBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgYXJlIDMyIGJpdHMgd2lkZS4KKy5JUCAiXGZCXC1tZnA2NFxmUiIgNAorLklYIEl0ZW0gIi1tZnA2NCIKK0Fzc3VtZSB0aGF0IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBhcmUgNjQgYml0cyB3aWRlLgorLklQICJcZkJcLW1oYXJkXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1taGFyZC1mbG9hdCIKK1VzZSBmbG9hdGluZy1wb2ludCBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXNvZnRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1zb2Z0LWZsb2F0IgorRG8gbm90IHVzZSBmbG9hdGluZy1wb2ludCBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuICBJbXBsZW1lbnQKK2Zsb2F0aW5nLXBvaW50IGNhbGN1bGF0aW9ucyB1c2luZyBsaWJyYXJ5IGNhbGxzIGluc3RlYWQuCisuSVAgIlxmQlwtbW5vXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZmxvYXQiCitFcXVpdmFsZW50IHRvIFxmQlwtbXNvZnRcLWZsb2F0XGZSLCBidXQgYWRkaXRpb25hbGx5IGFzc2VydHMgdGhhdCB0aGUKK3Byb2dyYW0gYmVpbmcgY29tcGlsZWQgZG9lcyBub3QgcGVyZm9ybSBhbnkgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KK1RoaXMgb3B0aW9uIGlzIHByZXNlbnRseSBzdXBwb3J0ZWQgb25seSBieSBzb21lIGJhcmUtbWV0YWwgXHMtMU1JUFNcczAKK2NvbmZpZ3VyYXRpb25zLCB3aGVyZSBpdCBtYXkgc2VsZWN0IGEgc3BlY2lhbCBzZXQgb2YgbGlicmFyaWVzCit0aGF0IGxhY2sgYWxsIGZsb2F0aW5nLXBvaW50IHN1cHBvcnQgKGluY2x1ZGluZywgZm9yIGV4YW1wbGUsIHRoZQorZmxvYXRpbmctcG9pbnQgXGYoQ1dcKihDYHByaW50ZlwqKEMnXGZSIGZvcm1hdHMpLiAgCitJZiBjb2RlIGNvbXBpbGVkIHdpdGggXGYoQ1dcKihDYFwtbW5vXC1mbG9hdFwqKEMnXGZSIGFjY2lkZW50YWxseSBjb250YWlucworZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucywgaXQgaXMgbGlrZWx5IHRvIHN1ZmZlciBhIGxpbmstdGltZQorb3IgcnVuLXRpbWUgZmFpbHVyZS4KKy5JUCAiXGZCXC1tc2luZ2xlXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc2luZ2xlLWZsb2F0IgorQXNzdW1lIHRoYXQgdGhlIGZsb2F0aW5nLXBvaW50IGNvcHJvY2Vzc29yIG9ubHkgc3VwcG9ydHMgc2luZ2xlLXByZWNpc2lvbgorb3BlcmF0aW9ucy4KKy5JUCAiXGZCXC1tZG91YmxlXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tZG91YmxlLWZsb2F0IgorQXNzdW1lIHRoYXQgdGhlIGZsb2F0aW5nLXBvaW50IGNvcHJvY2Vzc29yIHN1cHBvcnRzIGRvdWJsZS1wcmVjaXNpb24KK29wZXJhdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1sbHNjXGZSIiA0CisuSVggSXRlbSAiLW1sbHNjIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxsc2NcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxsc2MiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgXGZCbGxcZlIsIFxmQnNjXGZSLCBhbmQgXGZCc3luY1xmUiBpbnN0cnVjdGlvbnMgdG8KK2ltcGxlbWVudCBhdG9taWMgbWVtb3J5IGJ1aWx0LWluIGZ1bmN0aW9ucy4gIFdoZW4gbmVpdGhlciBvcHRpb24gaXMKK3NwZWNpZmllZCwgXHMtMUdDQ1xzMCB1c2VzIHRoZSBpbnN0cnVjdGlvbnMgaWYgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUKK3N1cHBvcnRzIHRoZW0uCisuU3AKK1wmXGZCXC1tbGxzY1xmUiBpcyB1c2VmdWwgaWYgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgY2FuIGVtdWxhdGUgdGhlCitpbnN0cnVjdGlvbnMgYW5kIFxmQlwtbW5vXC1sbHNjXGZSIGNhbiBiZSB1c2VmdWwgd2hlbiBjb21waWxpbmcgZm9yCitub25zdGFuZGFyZCBJU0FzLiAgWW91IGNhbiBtYWtlIGVpdGhlciBvcHRpb24gdGhlIGRlZmF1bHQgYnkKK2NvbmZpZ3VyaW5nIFxzLTFHQ0NcczAgd2l0aCBcZkJcLVwtd2l0aFwtbGxzY1xmUiBhbmQgXGZCXC1cLXdpdGhvdXRcLWxsc2NcZlIKK3Jlc3BlY3RpdmVseS4gIFxmQlwtXC13aXRoXC1sbHNjXGZSIGlzIHRoZSBkZWZhdWx0IGZvciBzb21lCitjb25maWd1cmF0aW9uczsgc2VlIHRoZSBpbnN0YWxsYXRpb24gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKy5JUCAiXGZCXC1tZHNwXGZSIiA0CisuSVggSXRlbSAiLW1kc3AiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZHNwXGZSIiA0CisuSVggSXRlbSAiLW1uby1kc3AiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgcmV2aXNpb24gMSBvZiB0aGUgXHMtMU1JUFNcczAgXHMtMURTUFxzMCBccy0xQVNFXHMwLgorICBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZQorcHJlcHJvY2Vzc29yIG1hY3JvIFxmQl9cfF9taXBzX2RzcFxmUi4gIEl0IGFsc28gZGVmaW5lcworXCZcZkJfXHxfbWlwc19kc3BfcmV2XGZSIHRvIDEuCisuSVAgIlxmQlwtbWRzcHIyXGZSIiA0CisuSVggSXRlbSAiLW1kc3ByMiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1kc3ByMlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZHNwcjIiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgcmV2aXNpb24gMiBvZiB0aGUgXHMtMU1JUFNcczAgXHMtMURTUFxzMCBccy0xQVNFXHMwLgorICBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZQorcHJlcHJvY2Vzc29yIG1hY3JvcyBcZkJfXHxfbWlwc19kc3BcZlIgYW5kIFxmQl9cfF9taXBzX2RzcHIyXGZSLgorSXQgYWxzbyBkZWZpbmVzIFxmQl9cfF9taXBzX2RzcF9yZXZcZlIgdG8gMi4KKy5JUCAiXGZCXC1tc21hcnRtaXBzXGZSIiA0CisuSVggSXRlbSAiLW1zbWFydG1pcHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc21hcnRtaXBzXGZSIiA0CisuSVggSXRlbSAiLW1uby1zbWFydG1pcHMiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgdGhlIFxzLTFNSVBTXHMwIFNtYXJ0TUlQUyBccy0xQVNFXHMwLgorLklQICJcZkJcLW1wYWlyZWRcLXNpbmdsZVxmUiIgNAorLklYIEl0ZW0gIi1tcGFpcmVkLXNpbmdsZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1wYWlyZWRcLXNpbmdsZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcGFpcmVkLXNpbmdsZSIKKy5QRAorVXNlIChkbyBub3QgdXNlKSBwYWlyZWQtc2luZ2xlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4KKyAgVGhpcyBvcHRpb24gcmVxdWlyZXMKK2hhcmR3YXJlIGZsb2F0aW5nLXBvaW50IHN1cHBvcnQgdG8gYmUgZW5hYmxlZC4KKy5JUCAiXGZCXC1tZG14XGZSIiA0CisuSVggSXRlbSAiLW1kbXgiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbWRteFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWRteCIKKy5QRAorVXNlIChkbyBub3QgdXNlKSBccy0xTUlQU1xzMCBEaWdpdGFsIE1lZGlhIEV4dGVuc2lvbiBpbnN0cnVjdGlvbnMuCitUaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyA2NFwtYml0IGNvZGUgYW5kIHJlcXVpcmVzCitoYXJkd2FyZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0IHRvIGJlIGVuYWJsZWQuCisuSVAgIlxmQlwtbWlwczNkXGZSIiA0CisuSVggSXRlbSAiLW1pcHMzZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1taXBzM2RcZlIiIDQKKy5JWCBJdGVtICItbW5vLW1pcHMzZCIKKy5QRAorVXNlIChkbyBub3QgdXNlKSB0aGUgXHMtMU1JUFNcLTNEXHMwIFxzLTFBU0VcczAuICAKK1RoZSBvcHRpb24gXGZCXC1taXBzM2RcZlIgaW1wbGllcyBcZkJcLW1wYWlyZWRcLXNpbmdsZVxmUi4KKy5JUCAiXGZCXC1tbXRcZlIiIDQKKy5JWCBJdGVtICItbW10IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW10XGZSIiA0CisuSVggSXRlbSAiLW1uby1tdCIKKy5QRAorVXNlIChkbyBub3QgdXNlKSBccy0xTVRcczAgTXVsdGl0aHJlYWRpbmcgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1tY3VcZlIiIDQKKy5JWCBJdGVtICItbW1jdSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1tY3VcZlIiIDQKKy5JWCBJdGVtICItbW5vLW1jdSIKKy5QRAorVXNlIChkbyBub3QgdXNlKSB0aGUgXHMtMU1JUFNcczAgXHMtMU1DVVxzMCBccy0xQVNFXHMwIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tbG9uZzY0XGZSIiA0CisuSVggSXRlbSAiLW1sb25nNjQiCitGb3JjZSBcZihDV1wqKENgbG9uZ1wqKEMnXGZSIHR5cGVzIHRvIGJlIDY0IGJpdHMgd2lkZS4gIFNlZSBcZkJcLW1sb25nMzJcZlIgZm9yCithbiBleHBsYW5hdGlvbiBvZiB0aGUgZGVmYXVsdCBhbmQgdGhlIHdheSB0aGF0IHRoZSBwb2ludGVyIHNpemUgaXMKK2RldGVybWluZWQuCisuSVAgIlxmQlwtbWxvbmczMlxmUiIgNAorLklYIEl0ZW0gIi1tbG9uZzMyIgorRm9yY2UgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUiwgXGYoQ1dcKihDYGludFwqKEMnXGZSLCBhbmQgcG9pbnRlciB0eXBlcyB0byBiZSAzMiBiaXRzIHdpZGUuCisuU3AKK1RoZSBkZWZhdWx0IHNpemUgb2YgXGYoQ1dcKihDYGludFwqKEMnXGZScywgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUnMgYW5kIHBvaW50ZXJzIGRlcGVuZHMgb24KK3RoZSBccy0xQUJJXHMwLiAgQWxsIHRoZSBzdXBwb3J0ZWQgQUJJcyB1c2UgMzJcLWJpdCBcZihDV1wqKENgaW50XCooQydcZlJzLiAgVGhlIG42NCBccy0xQUJJXHMwCit1c2VzIDY0XC1iaXQgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUnMsIGFzIGRvZXMgdGhlIDY0XC1iaXQgXHMtMUVBQklcczA7IHRoZSBvdGhlcnMgdXNlCiszMlwtYml0IFxmKENXXCooQ2Bsb25nXCooQydcZlJzLiAgUG9pbnRlcnMgYXJlIHRoZSBzYW1lIHNpemUgYXMgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUnMsCitvciB0aGUgc2FtZSBzaXplIGFzIGludGVnZXIgcmVnaXN0ZXJzLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKy5JUCAiXGZCXC1tc3ltMzJcZlIiIDQKKy5JWCBJdGVtICItbXN5bTMyIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXN5bTMyXGZSIiA0CisuSVggSXRlbSAiLW1uby1zeW0zMiIKKy5QRAorQXNzdW1lIChkbyBub3QgYXNzdW1lKSB0aGF0IGFsbCBzeW1ib2xzIGhhdmUgMzJcLWJpdCB2YWx1ZXMsIHJlZ2FyZGxlc3MKK29mIHRoZSBzZWxlY3RlZCBccy0xQUJJXHMwLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGluIGNvbWJpbmF0aW9uIHdpdGgKK1wmXGZCXC1tYWJpPTY0XGZSIGFuZCBcZkJcLW1ub1wtYWJpY2FsbHNcZlIgYmVjYXVzZSBpdCBhbGxvd3MgXHMtMUdDQ1xzMAordG8gZ2VuZXJhdGUgc2hvcnRlciBhbmQgZmFzdGVyIHJlZmVyZW5jZXMgdG8gc3ltYm9saWMgYWRkcmVzc2VzLgorLklQICJcZkJcLUdcZlIgXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLUcgbnVtIgorUHV0IGRlZmluaXRpb25zIG9mIGV4dGVybmFsbHktdmlzaWJsZSBkYXRhIGluIGEgc21hbGwgZGF0YSBzZWN0aW9uCitpZiB0aGF0IGRhdGEgaXMgbm8gYmlnZ2VyIHRoYW4gXGZJbnVtXGZSIGJ5dGVzLiAgXHMtMUdDQ1xzMCBjYW4gdGhlbiBnZW5lcmF0ZQorbW9yZSBlZmZpY2llbnQgYWNjZXNzZXMgdG8gdGhlIGRhdGE7IHNlZSBcZkJcLW1ncG9wdFxmUiBmb3IgZGV0YWlscy4KKy5TcAorVGhlIGRlZmF1bHQgXGZCXC1HXGZSIG9wdGlvbiBkZXBlbmRzIG9uIHRoZSBjb25maWd1cmF0aW9uLgorLklQICJcZkJcLW1sb2NhbFwtc2RhdGFcZlIiIDQKKy5JWCBJdGVtICItbWxvY2FsLXNkYXRhIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxvY2FsXC1zZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbG9jYWwtc2RhdGEiCisuUEQKK0V4dGVuZCAoZG8gbm90IGV4dGVuZCkgdGhlIFxmQlwtR1xmUiBiZWhhdmlvciB0byBsb2NhbCBkYXRhIHRvbywKK3N1Y2ggYXMgdG8gc3RhdGljIHZhcmlhYmxlcyBpbiBDLiAgXGZCXC1tbG9jYWxcLXNkYXRhXGZSIGlzIHRoZQorZGVmYXVsdCBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zLgorLlNwCitJZiB0aGUgbGlua2VyIGNvbXBsYWlucyB0aGF0IGFuIGFwcGxpY2F0aW9uIGlzIHVzaW5nIHRvbyBtdWNoIHNtYWxsIGRhdGEsCit5b3UgbWlnaHQgd2FudCB0byB0cnkgcmVidWlsZGluZyB0aGUgbGVzcyBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXJ0cyB3aXRoCitcJlxmQlwtbW5vXC1sb2NhbFwtc2RhdGFcZlIuICBZb3UgbWlnaHQgYWxzbyB3YW50IHRvIGJ1aWxkIGxhcmdlCitsaWJyYXJpZXMgd2l0aCBcZkJcLW1ub1wtbG9jYWxcLXNkYXRhXGZSLCBzbyB0aGF0IHRoZSBsaWJyYXJpZXMgbGVhdmUKK21vcmUgcm9vbSBmb3IgdGhlIG1haW4gcHJvZ3JhbS4KKy5JUCAiXGZCXC1tZXh0ZXJuXC1zZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tZXh0ZXJuLXNkYXRhIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWV4dGVyblwtc2RhdGFcZlIiIDQKKy5JWCBJdGVtICItbW5vLWV4dGVybi1zZGF0YSIKKy5QRAorQXNzdW1lIChkbyBub3QgYXNzdW1lKSB0aGF0IGV4dGVybmFsbHktZGVmaW5lZCBkYXRhIGlzIGluCithIHNtYWxsIGRhdGEgc2VjdGlvbiBpZiB0aGUgc2l6ZSBvZiB0aGF0IGRhdGEgaXMgd2l0aGluIHRoZSBcZkJcLUdcZlIgbGltaXQuCitcJlxmQlwtbWV4dGVyblwtc2RhdGFcZlIgaXMgdGhlIGRlZmF1bHQgZm9yIGFsbCBjb25maWd1cmF0aW9ucy4KKy5TcAorSWYgeW91IGNvbXBpbGUgYSBtb2R1bGUgXGZJTW9kXGZSIHdpdGggXGZCXC1tZXh0ZXJuXC1zZGF0YVxmUiBcZkJcLUdcZlIKK1wmXGZJbnVtXGZSIFxmQlwtbWdwb3B0XGZSLCBhbmQgXGZJTW9kXGZSIHJlZmVyZW5jZXMgYSB2YXJpYWJsZSBcZklWYXJcZlIKK3RoYXQgaXMgbm8gYmlnZ2VyIHRoYW4gXGZJbnVtXGZSIGJ5dGVzLCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhhdCBcZklWYXJcZlIKK2lzIHBsYWNlZCBpbiBhIHNtYWxsIGRhdGEgc2VjdGlvbi4gIElmIFxmSVZhclxmUiBpcyBkZWZpbmVkIGJ5IGFub3RoZXIKK21vZHVsZSwgeW91IG11c3QgZWl0aGVyIGNvbXBpbGUgdGhhdCBtb2R1bGUgd2l0aCBhIGhpZ2gtZW5vdWdoCitcJlxmQlwtR1xmUiBzZXR0aW5nIG9yIGF0dGFjaCBhIFxmKENXXCooQ2BzZWN0aW9uXCooQydcZlIgYXR0cmlidXRlIHRvIFxmSVZhclxmUidzCitkZWZpbml0aW9uLiAgSWYgXGZJVmFyXGZSIGlzIGNvbW1vbiwgeW91IG11c3QgbGluayB0aGUgYXBwbGljYXRpb24KK3dpdGggYSBoaWdoLWVub3VnaCBcZkJcLUdcZlIgc2V0dGluZy4KKy5TcAorVGhlIGVhc2llc3Qgd2F5IG9mIHNhdGlzZnlpbmcgdGhlc2UgcmVzdHJpY3Rpb25zIGlzIHRvIGNvbXBpbGUKK2FuZCBsaW5rIGV2ZXJ5IG1vZHVsZSB3aXRoIHRoZSBzYW1lIFxmQlwtR1xmUiBvcHRpb24uICBIb3dldmVyLAoreW91IG1heSB3aXNoIHRvIGJ1aWxkIGEgbGlicmFyeSB0aGF0IHN1cHBvcnRzIHNldmVyYWwgZGlmZmVyZW50CitzbWFsbCBkYXRhIGxpbWl0cy4gIFlvdSBjYW4gZG8gdGhpcyBieSBjb21waWxpbmcgdGhlIGxpYnJhcnkgd2l0aAordGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIFxmQlwtR1xmUiBzZXR0aW5nIGFuZCBhZGRpdGlvbmFsbHkgdXNpbmcKK1wmXGZCXC1tbm9cLWV4dGVyblwtc2RhdGFcZlIgdG8gc3RvcCB0aGUgbGlicmFyeSBmcm9tIG1ha2luZyBhc3N1bXB0aW9ucworYWJvdXQgZXh0ZXJuYWxseS1kZWZpbmVkIGRhdGEuCisuSVAgIlxmQlwtbWdwb3B0XGZSIiA0CisuSVggSXRlbSAiLW1ncG9wdCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1ncG9wdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZ3BvcHQiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgR1AtcmVsYXRpdmUgYWNjZXNzZXMgZm9yIHN5bWJvbHMgdGhhdCBhcmUga25vd24gdG8gYmUKK2luIGEgc21hbGwgZGF0YSBzZWN0aW9uOyBzZWUgXGZCXC1HXGZSLCBcZkJcLW1sb2NhbFwtc2RhdGFcZlIgYW5kCitcJlxmQlwtbWV4dGVyblwtc2RhdGFcZlIuICBcZkJcLW1ncG9wdFxmUiBpcyB0aGUgZGVmYXVsdCBmb3IgYWxsCitjb25maWd1cmF0aW9ucy4KKy5TcAorXCZcZkJcLW1ub1wtZ3BvcHRcZlIgaXMgdXNlZnVsIGZvciBjYXNlcyB3aGVyZSB0aGUgXGYoQ1ckZ3BcZlIgcmVnaXN0ZXIKK21pZ2h0IG5vdCBob2xkIHRoZSB2YWx1ZSBvZiBcZihDV1wqKENgX2dwXCooQydcZlIuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvZGUgaXMKK3BhcnQgb2YgYSBsaWJyYXJ5IHRoYXQgbWlnaHQgYmUgdXNlZCBpbiBhIGJvb3QgbW9uaXRvciwgcHJvZ3JhbXMgdGhhdAorY2FsbCBib290IG1vbml0b3Igcm91dGluZXMgcGFzcyBhbiB1bmtub3duIHZhbHVlIGluIFxmKENXJGdwXGZSLgorKEluIHN1Y2ggc2l0dWF0aW9ucywgdGhlIGJvb3QgbW9uaXRvciBpdHNlbGYgaXMgdXN1YWxseSBjb21waWxlZAord2l0aCBcZkJcLUcwXGZSLikKKy5TcAorXCZcZkJcLW1ub1wtZ3BvcHRcZlIgaW1wbGllcyBcZkJcLW1ub1wtbG9jYWxcLXNkYXRhXGZSIGFuZAorXCZcZkJcLW1ub1wtZXh0ZXJuXC1zZGF0YVxmUi4KKy5JUCAiXGZCXC1tZW1iZWRkZWRcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbWVtYmVkZGVkLWRhdGEiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZW1iZWRkZWRcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbW5vLWVtYmVkZGVkLWRhdGEiCisuUEQKK0FsbG9jYXRlIHZhcmlhYmxlcyB0byB0aGUgcmVhZC1vbmx5IGRhdGEgc2VjdGlvbiBmaXJzdCBpZiBwb3NzaWJsZSwgdGhlbgorbmV4dCBpbiB0aGUgc21hbGwgZGF0YSBzZWN0aW9uIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgaW4gZGF0YS4gIFRoaXMgZ2l2ZXMKK3NsaWdodGx5IHNsb3dlciBjb2RlIHRoYW4gdGhlIGRlZmF1bHQsIGJ1dCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgXHMtMVJBTVxzMCByZXF1aXJlZAord2hlbiBleGVjdXRpbmcsIGFuZCB0aHVzIG1heSBiZSBwcmVmZXJyZWQgZm9yIHNvbWUgZW1iZWRkZWQgc3lzdGVtcy4KKy5JUCAiXGZCXC1tdW5pbml0XC1jb25zdFwtaW5cLXJvZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tdW5pbml0LWNvbnN0LWluLXJvZGF0YSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC11bmluaXRcLWNvbnN0XC1pblwtcm9kYXRhXGZSIiA0CisuSVggSXRlbSAiLW1uby11bmluaXQtY29uc3QtaW4tcm9kYXRhIgorLlBECitQdXQgdW5pbml0aWFsaXplZCBcZihDV1wqKENgY29uc3RcKihDJ1xmUiB2YXJpYWJsZXMgaW4gdGhlIHJlYWQtb25seSBkYXRhIHNlY3Rpb24uCitUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgaW4gY29uanVuY3Rpb24gd2l0aCBcZkJcLW1lbWJlZGRlZFwtZGF0YVxmUi4KKy5JUCAiXGZCXC1tY29kZVwtcmVhZGFibGU9XGZSXGZJc2V0dGluZ1xmUiIgNAorLklYIEl0ZW0gIi1tY29kZS1yZWFkYWJsZT1zZXR0aW5nIgorU3BlY2lmeSB3aGV0aGVyIFxzLTFHQ0NcczAgbWF5IGdlbmVyYXRlIGNvZGUgdGhhdCByZWFkcyBmcm9tIGV4ZWN1dGFibGUgc2VjdGlvbnMuCitUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgc2V0dGluZ3M6CisuUlMgNAorLklQICJcZkJcLW1jb2RlXC1yZWFkYWJsZT15ZXNcZlIiIDQKKy5JWCBJdGVtICItbWNvZGUtcmVhZGFibGU9eWVzIgorSW5zdHJ1Y3Rpb25zIG1heSBmcmVlbHkgYWNjZXNzIGV4ZWN1dGFibGUgc2VjdGlvbnMuICBUaGlzIGlzIHRoZQorZGVmYXVsdCBzZXR0aW5nLgorLklQICJcZkJcLW1jb2RlXC1yZWFkYWJsZT1wY3JlbFxmUiIgNAorLklYIEl0ZW0gIi1tY29kZS1yZWFkYWJsZT1wY3JlbCIKK1wmXHMtMU1JUFMxNlxzMCBQQy1yZWxhdGl2ZSBsb2FkIGluc3RydWN0aW9ucyBjYW4gYWNjZXNzIGV4ZWN1dGFibGUgc2VjdGlvbnMsCitidXQgb3RoZXIgaW5zdHJ1Y3Rpb25zIG11c3Qgbm90IGRvIHNvLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIG9uIDRLU2MKK2FuZCA0S1NkIHByb2Nlc3NvcnMgd2hlbiB0aGUgY29kZSBUTEJzIGhhdmUgdGhlIFJlYWQgSW5oaWJpdCBiaXQgc2V0LgorSXQgaXMgYWxzbyB1c2VmdWwgb24gcHJvY2Vzc29ycyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIHRvIGhhdmUgYSBkdWFsCitpbnN0cnVjdGlvbi9kYXRhIFxzLTFTUkFNXHMwIGludGVyZmFjZSBhbmQgdGhhdCwgbGlrZSB0aGUgTTRLLCBhdXRvbWF0aWNhbGx5CityZWRpcmVjdCBQQy1yZWxhdGl2ZSBsb2FkcyB0byB0aGUgaW5zdHJ1Y3Rpb24gXHMtMVJBTVxzMC4KKy5JUCAiXGZCXC1tY29kZVwtcmVhZGFibGU9bm9cZlIiIDQKKy5JWCBJdGVtICItbWNvZGUtcmVhZGFibGU9bm8iCitJbnN0cnVjdGlvbnMgbXVzdCBub3QgYWNjZXNzIGV4ZWN1dGFibGUgc2VjdGlvbnMuICBUaGlzIG9wdGlvbiBjYW4gYmUKK3VzZWZ1bCBvbiB0YXJnZXRzIHRoYXQgYXJlIGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIGR1YWwgaW5zdHJ1Y3Rpb24vZGF0YQorXCZccy0xU1JBTVxzMCBpbnRlcmZhY2UgYnV0IHRoYXQgKHVubGlrZSB0aGUgTTRLKSBkbyBub3QgYXV0b21hdGljYWxseSByZWRpcmVjdAorUEMtcmVsYXRpdmUgbG9hZHMgdG8gdGhlIGluc3RydWN0aW9uIFxzLTFSQU1cczAuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tc3BsaXRcLWFkZHJlc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi1tc3BsaXQtYWRkcmVzc2VzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNwbGl0XC1hZGRyZXNzZXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNwbGl0LWFkZHJlc3NlcyIKKy5QRAorRW5hYmxlIChkaXNhYmxlKSB1c2Ugb2YgdGhlIFxmKENXXCooQ2AlaGkoKVwqKEMnXGZSIGFuZCBcZihDV1wqKENgJWxvKClcKihDJ1xmUiBhc3NlbWJsZXIKK3JlbG9jYXRpb24gb3BlcmF0b3JzLiAgVGhpcyBvcHRpb24gaGFzIGJlZW4gc3VwZXJzZWRlZCBieQorXCZcZkJcLW1leHBsaWNpdFwtcmVsb2NzXGZSIGJ1dCBpcyByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisuSVAgIlxmQlwtbWV4cGxpY2l0XC1yZWxvY3NcZlIiIDQKKy5JWCBJdGVtICItbWV4cGxpY2l0LXJlbG9jcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1leHBsaWNpdFwtcmVsb2NzXGZSIiA0CisuSVggSXRlbSAiLW1uby1leHBsaWNpdC1yZWxvY3MiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgYXNzZW1ibGVyIHJlbG9jYXRpb24gb3BlcmF0b3JzIHdoZW4gZGVhbGluZyB3aXRoIHN5bWJvbGljCithZGRyZXNzZXMuICBUaGUgYWx0ZXJuYXRpdmUsIHNlbGVjdGVkIGJ5IFxmQlwtbW5vXC1leHBsaWNpdFwtcmVsb2NzXGZSLAoraXMgdG8gdXNlIGFzc2VtYmxlciBtYWNyb3MgaW5zdGVhZC4KKy5TcAorXCZcZkJcLW1leHBsaWNpdFwtcmVsb2NzXGZSIGlzIHRoZSBkZWZhdWx0IGlmIFxzLTFHQ0NcczAgd2FzIGNvbmZpZ3VyZWQKK3RvIHVzZSBhbiBhc3NlbWJsZXIgdGhhdCBzdXBwb3J0cyByZWxvY2F0aW9uIG9wZXJhdG9ycy4KKy5JUCAiXGZCXC1tY2hlY2tcLXplcm9cLWRpdmlzaW9uXGZSIiA0CisuSVggSXRlbSAiLW1jaGVjay16ZXJvLWRpdmlzaW9uIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWNoZWNrXC16ZXJvXC1kaXZpc2lvblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tY2hlY2stemVyby1kaXZpc2lvbiIKKy5QRAorVHJhcCAoZG8gbm90IHRyYXApIG9uIGludGVnZXIgZGl2aXNpb24gYnkgemVyby4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1tY2hlY2tcLXplcm9cLWRpdmlzaW9uXGZSLgorLklQICJcZkJcLW1kaXZpZGVcLXRyYXBzXGZSIiA0CisuSVggSXRlbSAiLW1kaXZpZGUtdHJhcHMiCisuUEQgMAorLklQICJcZkJcLW1kaXZpZGVcLWJyZWFrc1xmUiIgNAorLklYIEl0ZW0gIi1tZGl2aWRlLWJyZWFrcyIKKy5QRAorXCZccy0xTUlQU1xzMCBzeXN0ZW1zIGNoZWNrIGZvciBkaXZpc2lvbiBieSB6ZXJvIGJ5IGdlbmVyYXRpbmcgZWl0aGVyIGEKK2NvbmRpdGlvbmFsIHRyYXAgb3IgYSBicmVhayBpbnN0cnVjdGlvbi4gIFVzaW5nIHRyYXBzIHJlc3VsdHMgaW4KK3NtYWxsZXIgY29kZSwgYnV0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIFxzLTFNSVBTXHMwIFxzLTFJSVxzMCBhbmQgbGF0ZXIuICBBbHNvLCBzb21lCit2ZXJzaW9ucyBvZiB0aGUgTGludXgga2VybmVsIGhhdmUgYSBidWcgdGhhdCBwcmV2ZW50cyB0cmFwIGZyb20KK2dlbmVyYXRpbmcgdGhlIHByb3BlciBzaWduYWwgKFxmKENXXCooQ2BTSUdGUEVcKihDJ1xmUikuICBVc2UgXGZCXC1tZGl2aWRlXC10cmFwc1xmUiB0bworYWxsb3cgY29uZGl0aW9uYWwgdHJhcHMgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgdGhlbSBhbmQKK1wmXGZCXC1tZGl2aWRlXC1icmVha3NcZlIgdG8gZm9yY2UgdGhlIHVzZSBvZiBicmVha3MuCisuU3AKK1RoZSBkZWZhdWx0IGlzIHVzdWFsbHkgXGZCXC1tZGl2aWRlXC10cmFwc1xmUiwgYnV0IHRoaXMgY2FuIGJlCitvdmVycmlkZGVuIGF0IGNvbmZpZ3VyZSB0aW1lIHVzaW5nIFxmQlwtXC13aXRoXC1kaXZpZGU9YnJlYWtzXGZSLgorRGl2aWRlLWJ5LXplcm8gY2hlY2tzIGNhbiBiZSBjb21wbGV0ZWx5IGRpc2FibGVkIHVzaW5nCitcJlxmQlwtbW5vXC1jaGVja1wtemVyb1wtZGl2aXNpb25cZlIuCisuSVAgIlxmQlwtbW1lbWNweVxmUiIgNAorLklYIEl0ZW0gIi1tbWVtY3B5IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW1lbWNweVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWVtY3B5IgorLlBECitGb3JjZSAoZG8gbm90IGZvcmNlKSB0aGUgdXNlIG9mIFxmKENXXCooQ2BtZW1jcHkoKVwqKEMnXGZSIGZvciBub24tdHJpdmlhbCBibG9jaworbW92ZXMuICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1ub1wtbWVtY3B5XGZSLCB3aGljaCBhbGxvd3MgXHMtMUdDQ1xzMCB0byBpbmxpbmUKK21vc3QgY29uc3RhbnQtc2l6ZWQgY29waWVzLgorLklQICJcZkJcLW1sb25nXC1jYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tbG9uZy1jYWxscyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1sb25nXC1jYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tbG9uZy1jYWxscyIKKy5QRAorRGlzYWJsZSAoZG8gbm90IGRpc2FibGUpIHVzZSBvZiB0aGUgXGYoQ1dcKihDYGphbFwqKEMnXGZSIGluc3RydWN0aW9uLiAgQ2FsbGluZworZnVuY3Rpb25zIHVzaW5nIFxmKENXXCooQ2BqYWxcKihDJ1xmUiBpcyBtb3JlIGVmZmljaWVudCBidXQgcmVxdWlyZXMgdGhlIGNhbGxlcgorYW5kIGNhbGxlZSB0byBiZSBpbiB0aGUgc2FtZSAyNTYgbWVnYWJ5dGUgc2VnbWVudC4KKy5TcAorVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiBhYmljYWxscyBjb2RlLiAgVGhlIGRlZmF1bHQgaXMKK1wmXGZCXC1tbm9cLWxvbmdcLWNhbGxzXGZSLgorLklQICJcZkJcLW1tYWRcZlIiIDQKKy5JWCBJdGVtICItbW1hZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1tYWRcZlIiIDQKKy5JWCBJdGVtICItbW5vLW1hZCIKKy5QRAorRW5hYmxlIChkaXNhYmxlKSB1c2Ugb2YgdGhlIFxmKENXXCooQ2BtYWRcKihDJ1xmUiwgXGYoQ1dcKihDYG1hZHVcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYG11bFwqKEMnXGZSCitpbnN0cnVjdGlvbnMsIGFzIHByb3ZpZGVkIGJ5IHRoZSBSNDY1MCBccy0xSVNBXHMwLgorLklQICJcZkJcLW1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tZnVzZWQtbWFkZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnVzZWQtbWFkZCIKKy5QRAorRW5hYmxlIChkaXNhYmxlKSB1c2Ugb2YgdGhlIGZsb2F0aW5nLXBvaW50IG11bHRpcGx5LWFjY3VtdWxhdGUKK2luc3RydWN0aW9ucywgd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLW1mdXNlZFwtbWFkZFxmUi4KKy5TcAorT24gdGhlIFI4MDAwIFxzLTFDUFVcczAgd2hlbiBtdWx0aXBseS1hY2N1bXVsYXRlIGluc3RydWN0aW9ucyBhcmUgdXNlZCwKK3RoZSBpbnRlcm1lZGlhdGUgcHJvZHVjdCBpcyBjYWxjdWxhdGVkIHRvIGluZmluaXRlIHByZWNpc2lvbgorYW5kIGlzIG5vdCBzdWJqZWN0IHRvIHRoZSBccy0xRkNTUlxzMCBGbHVzaCB0byBaZXJvIGJpdC4gIFRoaXMgbWF5IGJlCit1bmRlc2lyYWJsZSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuICBPbiBvdGhlciBwcm9jZXNzb3JzIHRoZSByZXN1bHQKK2lzIG51bWVyaWNhbGx5IGlkZW50aWNhbCB0byB0aGUgZXF1aXZhbGVudCBjb21wdXRhdGlvbiB1c2luZworc2VwYXJhdGUgbXVsdGlwbHksIGFkZCwgc3VidHJhY3QgYW5kIG5lZ2F0ZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbm9jcHBcZlIiIDQKKy5JWCBJdGVtICItbm9jcHAiCitUZWxsIHRoZSBccy0xTUlQU1xzMCBhc3NlbWJsZXIgdG8gbm90IHJ1biBpdHMgcHJlcHJvY2Vzc29yIG92ZXIgdXNlcgorYXNzZW1ibGVyIGZpbGVzICh3aXRoIGEgXGZCLnNcZlIgc3VmZml4KSB3aGVuIGFzc2VtYmxpbmcgdGhlbS4KKy5JUCAiXGZCXC1tZml4XC0yNGtcZlIiIDQKKy5JWCBJdGVtICItbWZpeC0yNGsiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZml4XC0yNGtcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZpeC0yNGsiCisuUEQKK1dvcmsgYXJvdW5kIHRoZSAyNEsgRTQ4IChsb3N0IGRhdGEgb24gc3RvcmVzIGR1cmluZyByZWZpbGwpIGVycmF0YS4KK1RoZSB3b3JrYXJvdW5kcyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFzc2VtYmxlciByYXRoZXIgdGhhbiBieSBccy0xR0NDXHMwLgorLklQICJcZkJcLW1maXhcLXI0MDAwXGZSIiA0CisuSVggSXRlbSAiLW1maXgtcjQwMDAiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZml4XC1yNDAwMFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZml4LXI0MDAwIgorLlBECitXb3JrIGFyb3VuZCBjZXJ0YWluIFI0MDAwIFxzLTFDUFVcczAgZXJyYXRhOgorLlJTIDQKKy5JUCAiXC0iIDQKK0EgZG91YmxlLXdvcmQgb3IgYSB2YXJpYWJsZSBzaGlmdCBtYXkgZ2l2ZSBhbiBpbmNvcnJlY3QgcmVzdWx0IGlmIGV4ZWN1dGVkCitpbW1lZGlhdGVseSBhZnRlciBzdGFydGluZyBhbiBpbnRlZ2VyIGRpdmlzaW9uLgorLklQICJcLSIgNAorQSBkb3VibGUtd29yZCBvciBhIHZhcmlhYmxlIHNoaWZ0IG1heSBnaXZlIGFuIGluY29ycmVjdCByZXN1bHQgaWYgZXhlY3V0ZWQKK3doaWxlIGFuIGludGVnZXIgbXVsdGlwbGljYXRpb24gaXMgaW4gcHJvZ3Jlc3MuCisuSVAgIlwtIiA0CitBbiBpbnRlZ2VyIGRpdmlzaW9uIG1heSBnaXZlIGFuIGluY29ycmVjdCByZXN1bHQgaWYgc3RhcnRlZCBpbiBhIGRlbGF5IHNsb3QKK29mIGEgdGFrZW4gYnJhbmNoIG9yIGEganVtcC4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW1maXhcLXI0NDAwXGZSIiA0CisuSVggSXRlbSAiLW1maXgtcjQ0MDAiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZml4XC1yNDQwMFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZml4LXI0NDAwIgorLlBECitXb3JrIGFyb3VuZCBjZXJ0YWluIFI0NDAwIFxzLTFDUFVcczAgZXJyYXRhOgorLlJTIDQKKy5JUCAiXC0iIDQKK0EgZG91YmxlLXdvcmQgb3IgYSB2YXJpYWJsZSBzaGlmdCBtYXkgZ2l2ZSBhbiBpbmNvcnJlY3QgcmVzdWx0IGlmIGV4ZWN1dGVkCitpbW1lZGlhdGVseSBhZnRlciBzdGFydGluZyBhbiBpbnRlZ2VyIGRpdmlzaW9uLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbWZpeFwtcjEwMDAwXGZSIiA0CisuSVggSXRlbSAiLW1maXgtcjEwMDAwIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZpeFwtcjEwMDAwXGZSIiA0CisuSVggSXRlbSAiLW1uby1maXgtcjEwMDAwIgorLlBECitXb3JrIGFyb3VuZCBjZXJ0YWluIFIxMDAwMCBlcnJhdGE6CisuUlMgNAorLklQICJcLSIgNAorXCZcZihDV1wqKENgbGxcKihDJ1xmUi9cZihDV1wqKENgc2NcKihDJ1xmUiBzZXF1ZW5jZXMgbWF5IG5vdCBiZWhhdmUgYXRvbWljYWxseSBvbiByZXZpc2lvbnMKK3ByaW9yIHRvIDMuMC4gIFRoZXkgbWF5IGRlYWRsb2NrIG9uIHJldmlzaW9ucyAyLjYgYW5kIGVhcmxpZXIuCisuUkUKKy5SUyA0CisuU3AKK1RoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgaWYgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgc3VwcG9ydHMKK2JyYW5jaC1saWtlbHkgaW5zdHJ1Y3Rpb25zLiAgXGZCXC1tZml4XC1yMTAwMDBcZlIgaXMgdGhlIGRlZmF1bHQgd2hlbgorXCZcZkJcLW1hcmNoPXIxMDAwMFxmUiBpcyB1c2VkOyBcZkJcLW1ub1wtZml4XC1yMTAwMDBcZlIgaXMgdGhlIGRlZmF1bHQKK290aGVyd2lzZS4KKy5SRQorLklQICJcZkJcLW1maXhcLXZyNDEyMFxmUiIgNAorLklYIEl0ZW0gIi1tZml4LXZyNDEyMCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1maXhcLXZyNDEyMFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZml4LXZyNDEyMCIKKy5QRAorV29yayBhcm91bmQgY2VydGFpbiBccy0xVlI0MTIwXHMwIGVycmF0YToKKy5SUyA0CisuSVAgIlwtIiA0CitcJlxmKENXXCooQ2BkbXVsdHVcKihDJ1xmUiBkb2VzIG5vdCBhbHdheXMgcHJvZHVjZSB0aGUgY29ycmVjdCByZXN1bHQuCisuSVAgIlwtIiA0CitcJlxmKENXXCooQ2BkaXZcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGRkaXZcKihDJ1xmUiBkbyBub3QgYWx3YXlzIHByb2R1Y2UgdGhlIGNvcnJlY3QgcmVzdWx0IGlmIG9uZQorb2YgdGhlIG9wZXJhbmRzIGlzIG5lZ2F0aXZlLgorLlJFCisuUlMgNAorLlNwCitUaGUgd29ya2Fyb3VuZHMgZm9yIHRoZSBkaXZpc2lvbiBlcnJhdGEgcmVseSBvbiBzcGVjaWFsIGZ1bmN0aW9ucyBpbgorXCZcZklsaWJnY2MuYVxmUi4gIEF0IHByZXNlbnQsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBwcm92aWRlZCBieQordGhlIFxmKENXXCooQ2BtaXBzNjR2cipcLWVsZlwqKEMnXGZSIGNvbmZpZ3VyYXRpb25zLgorLlNwCitPdGhlciBccy0xVlI0MTIwXHMwIGVycmF0YSByZXF1aXJlIGEgXHMtMU5PUFxzMCB0byBiZSBpbnNlcnRlZCBiZXR3ZWVuIGNlcnRhaW4gcGFpcnMgb2YKK2luc3RydWN0aW9ucy4gIFRoZXNlIGVycmF0YSBhcmUgaGFuZGxlZCBieSB0aGUgYXNzZW1ibGVyLCBub3QgYnkgXHMtMUdDQ1xzMCBpdHNlbGYuCisuUkUKKy5JUCAiXGZCXC1tZml4XC12cjQxMzBcZlIiIDQKKy5JWCBJdGVtICItbWZpeC12cjQxMzAiCitXb3JrIGFyb3VuZCB0aGUgXHMtMVZSNDEzMFxzMCBcZihDV1wqKENgbWZsb1wqKEMnXGZSL1xmKENXXCooQ2BtZmhpXCooQydcZlIgZXJyYXRhLiAgVGhlCit3b3JrYXJvdW5kcyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFzc2VtYmxlciByYXRoZXIgdGhhbiBieSBccy0xR0NDXHMwLAorYWx0aG91Z2ggXHMtMUdDQ1xzMCBhdm9pZHMgdXNpbmcgXGYoQ1dcKihDYG1mbG9cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYG1maGlcKihDJ1xmUiBpZiB0aGUKK1wmXHMtMVZSNDEzMFxzMCBcZihDV1wqKENgbWFjY1wqKEMnXGZSLCBcZihDV1wqKENgbWFjY2hpXCooQydcZlIsIFxmKENXXCooQ2BkbWFjY1wqKEMnXGZSIGFuZCBcZihDV1wqKENgZG1hY2NoaVwqKEMnXGZSCitpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZSBpbnN0ZWFkLgorLklQICJcZkJcLW1maXhcLXNiMVxmUiIgNAorLklYIEl0ZW0gIi1tZml4LXNiMSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1maXhcLXNiMVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZml4LXNiMSIKKy5QRAorV29yayBhcm91bmQgY2VydGFpbiBccy0xU0JcLTFcczAgXHMtMUNQVVxzMCBjb3JlIGVycmF0YS4KKyhUaGlzIGZsYWcgY3VycmVudGx5IHdvcmtzIGFyb3VuZCB0aGUgXHMtMVNCXC0xXHMwIHJldmlzaW9uIDIKK1wmXCooTCJGMVwqKFIiIGFuZCBcKihMIkYyXCooUiIgZmxvYXRpbmctcG9pbnQgZXJyYXRhLikKKy5JUCAiXGZCXC1tcjEwa1wtY2FjaGVcLWJhcnJpZXI9XGZSXGZJc2V0dGluZ1xmUiIgNAorLklYIEl0ZW0gIi1tcjEway1jYWNoZS1iYXJyaWVyPXNldHRpbmciCitTcGVjaWZ5IHdoZXRoZXIgXHMtMUdDQ1xzMCBzaG91bGQgaW5zZXJ0IGNhY2hlIGJhcnJpZXJzIHRvIGF2b2lkIHRoZQorc2lkZS1lZmZlY3RzIG9mIHNwZWN1bGF0aW9uIG9uIFIxMEsgcHJvY2Vzc29ycy4KKy5TcAorSW4gY29tbW9uIHdpdGggbWFueSBwcm9jZXNzb3JzLCB0aGUgUjEwSyB0cmllcyB0byBwcmVkaWN0IHRoZSBvdXRjb21lCitvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaCBhbmQgc3BlY3VsYXRpdmVseSBleGVjdXRlcyBpbnN0cnVjdGlvbnMgZnJvbQordGhlIFwqKEwidGFrZW5cKihSIiBicmFuY2guICBJdCBsYXRlciBhYm9ydHMgdGhlc2UgaW5zdHJ1Y3Rpb25zIGlmIHRoZQorcHJlZGljdGVkIG91dGNvbWUgaXMgd3JvbmcuICBIb3dldmVyLCBvbiB0aGUgUjEwSywgZXZlbiBhYm9ydGVkCitpbnN0cnVjdGlvbnMgY2FuIGhhdmUgc2lkZSBlZmZlY3RzLgorLlNwCitUaGlzIHByb2JsZW0gb25seSBhZmZlY3RzIGtlcm5lbCBzdG9yZXMgYW5kLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSwKK2tlcm5lbCBsb2Fkcy4gIEFzIGFuIGV4YW1wbGUsIGEgc3BlY3VsYXRpdmVseS1leGVjdXRlZCBzdG9yZSBtYXkgbG9hZAordGhlIHRhcmdldCBtZW1vcnkgaW50byBjYWNoZSBhbmQgbWFyayB0aGUgY2FjaGUgbGluZSBhcyBkaXJ0eSwgZXZlbiBpZgordGhlIHN0b3JlIGl0c2VsZiBpcyBsYXRlciBhYm9ydGVkLiAgSWYgYSBccy0xRE1BXHMwIG9wZXJhdGlvbiB3cml0ZXMgdG8gdGhlCitzYW1lIGFyZWEgb2YgbWVtb3J5IGJlZm9yZSB0aGUgXCooTCJkaXJ0eVwqKFIiIGxpbmUgaXMgZmx1c2hlZCwgdGhlIGNhY2hlZAorZGF0YSBvdmVyd3JpdGVzIHRoZSBETUEtZWQgZGF0YS4gIFNlZSB0aGUgUjEwSyBwcm9jZXNzb3IgbWFudWFsCitmb3IgYSBmdWxsIGRlc2NyaXB0aW9uLCBpbmNsdWRpbmcgb3RoZXIgcG90ZW50aWFsIHByb2JsZW1zLgorLlNwCitPbmUgd29ya2Fyb3VuZCBpcyB0byBpbnNlcnQgY2FjaGUgYmFycmllciBpbnN0cnVjdGlvbnMgYmVmb3JlIGV2ZXJ5IG1lbW9yeQorYWNjZXNzIHRoYXQgbWlnaHQgYmUgc3BlY3VsYXRpdmVseSBleGVjdXRlZCBhbmQgdGhhdCBtaWdodCBoYXZlIHNpZGUKK2VmZmVjdHMgZXZlbiBpZiBhYm9ydGVkLiAgXGZCXC1tcjEwa1wtY2FjaGVcLWJhcnJpZXI9XGZSXGZJc2V0dGluZ1xmUgorY29udHJvbHMgXHMtMUdDQ1xzMCdzIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgd29ya2Fyb3VuZC4gIEl0IGFzc3VtZXMgdGhhdAorYWJvcnRlZCBhY2Nlc3NlcyB0byBhbnkgYnl0ZSBpbiB0aGUgZm9sbG93aW5nIHJlZ2lvbnMgZG9lcyBub3QgaGF2ZQorc2lkZSBlZmZlY3RzOgorLlJTIDQKKy5JUCAiMS4iIDQKK3RoZSBtZW1vcnkgb2NjdXBpZWQgYnkgdGhlIGN1cnJlbnQgZnVuY3Rpb24ncyBzdGFjayBmcmFtZTsKKy5JUCAiMi4iIDQKK3RoZSBtZW1vcnkgb2NjdXBpZWQgYnkgYW4gaW5jb21pbmcgc3RhY2sgYXJndW1lbnQ7CisuSVAgIjMuIiA0Cit0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IGFuIG9iamVjdCB3aXRoIGEgbGluay10aW1lLWNvbnN0YW50IGFkZHJlc3MuCisuUkUKKy5SUyA0CisuU3AKK0l0IGlzIHRoZSBrZXJuZWwncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBzcGVjdWxhdGl2ZQorYWNjZXNzZXMgdG8gdGhlc2UgcmVnaW9ucyBhcmUgaW5kZWVkIHNhZmUuCisuU3AKK0lmIHRoZSBpbnB1dCBwcm9ncmFtIGNvbnRhaW5zIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gc3VjaCBhczoKKy5TcAorLlZiIDEKK1wmICAgICAgICB2b2lkIGZvbyAodm9pZCk7CisuVmUKKy5TcAordGhlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgXGYoQ1dcKihDYGZvb1wqKEMnXGZSIG11c3QgYWxsb3cgXGYoQ1dcKihDYGogZm9vXCooQydcZlIgYW5kCitcJlxmKENXXCooQ2BqYWwgZm9vXCooQydcZlIgdG8gYmUgZXhlY3V0ZWQgc3BlY3VsYXRpdmVseS4gIFxzLTFHQ0NcczAgaG9ub3JzIHRoaXMKK3Jlc3RyaWN0aW9uIGZvciBmdW5jdGlvbnMgaXQgY29tcGlsZXMgaXRzZWxmLiAgSXQgZXhwZWN0cyBub24tR0NDCitmdW5jdGlvbnMgKHN1Y2ggYXMgaGFuZC13cml0dGVuIGFzc2VtYmx5IGNvZGUpIHRvIGRvIHRoZSBzYW1lLgorLlNwCitUaGUgb3B0aW9uIGhhcyB0aHJlZSBmb3JtczoKKy5JUCAiXGZCXC1tcjEwa1wtY2FjaGVcLWJhcnJpZXI9bG9hZFwtc3RvcmVcZlIiIDQKKy5JWCBJdGVtICItbXIxMGstY2FjaGUtYmFycmllcj1sb2FkLXN0b3JlIgorSW5zZXJ0IGEgY2FjaGUgYmFycmllciBiZWZvcmUgYSBsb2FkIG9yIHN0b3JlIHRoYXQgbWlnaHQgYmUKK3NwZWN1bGF0aXZlbHkgZXhlY3V0ZWQgYW5kIHRoYXQgbWlnaHQgaGF2ZSBzaWRlIGVmZmVjdHMgZXZlbgoraWYgYWJvcnRlZC4KKy5JUCAiXGZCXC1tcjEwa1wtY2FjaGVcLWJhcnJpZXI9c3RvcmVcZlIiIDQKKy5JWCBJdGVtICItbXIxMGstY2FjaGUtYmFycmllcj1zdG9yZSIKK0luc2VydCBhIGNhY2hlIGJhcnJpZXIgYmVmb3JlIGEgc3RvcmUgdGhhdCBtaWdodCBiZSBzcGVjdWxhdGl2ZWx5CitleGVjdXRlZCBhbmQgdGhhdCBtaWdodCBoYXZlIHNpZGUgZWZmZWN0cyBldmVuIGlmIGFib3J0ZWQuCisuSVAgIlxmQlwtbXIxMGtcLWNhY2hlXC1iYXJyaWVyPW5vbmVcZlIiIDQKKy5JWCBJdGVtICItbXIxMGstY2FjaGUtYmFycmllcj1ub25lIgorRGlzYWJsZSB0aGUgaW5zZXJ0aW9uIG9mIGNhY2hlIGJhcnJpZXJzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbWZsdXNoXC1mdW5jPVxmUlxmSWZ1bmNcZlIiIDQKKy5JWCBJdGVtICItbWZsdXNoLWZ1bmM9ZnVuYyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mbHVzaFwtZnVuY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZmx1c2gtZnVuYyIKKy5QRAorU3BlY2lmaWVzIHRoZSBmdW5jdGlvbiB0byBjYWxsIHRvIGZsdXNoIHRoZSBJIGFuZCBEIGNhY2hlcywgb3IgdG8gbm90CitjYWxsIGFueSBzdWNoIGZ1bmN0aW9uLiAgSWYgY2FsbGVkLCB0aGUgZnVuY3Rpb24gbXVzdCB0YWtlIHRoZSBzYW1lCithcmd1bWVudHMgYXMgdGhlIGNvbW1vbiBcZihDV1wqKENgX2ZsdXNoX2Z1bmMoKVwqKEMnXGZSLCB0aGF0IGlzLCB0aGUgYWRkcmVzcyBvZiB0aGUKK21lbW9yeSByYW5nZSBmb3Igd2hpY2ggdGhlIGNhY2hlIGlzIGJlaW5nIGZsdXNoZWQsIHRoZSBzaXplIG9mIHRoZQorbWVtb3J5IHJhbmdlLCBhbmQgdGhlIG51bWJlciAzICh0byBmbHVzaCBib3RoIGNhY2hlcykuICBUaGUgZGVmYXVsdAorZGVwZW5kcyBvbiB0aGUgdGFyZ2V0IFxzLTFHQ0NcczAgd2FzIGNvbmZpZ3VyZWQgZm9yLCBidXQgY29tbW9ubHkgaXMgZWl0aGVyCitcJlxmQl9mbHVzaF9mdW5jXGZSIG9yIFxmQl9cfF9jcHVfZmx1c2hcZlIuCisuSVAgIlxmQm1icmFuY2hcLWNvc3Q9XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAibWJyYW5jaC1jb3N0PW51bSIKK1NldCB0aGUgY29zdCBvZiBicmFuY2hlcyB0byByb3VnaGx5IFxmSW51bVxmUiBcKihMInNpbXBsZVwqKFIiIGluc3RydWN0aW9ucy4KK1RoaXMgY29zdCBpcyBvbmx5IGEgaGV1cmlzdGljIGFuZCBpcyBub3QgZ3VhcmFudGVlZCB0byBwcm9kdWNlCitjb25zaXN0ZW50IHJlc3VsdHMgYWNyb3NzIHJlbGVhc2VzLiAgQSB6ZXJvIGNvc3QgcmVkdW5kYW50bHkgc2VsZWN0cwordGhlIGRlZmF1bHQsIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBcZkJcLW10dW5lXGZSIHNldHRpbmcuCisuSVAgIlxmQlwtbWJyYW5jaFwtbGlrZWx5XGZSIiA0CisuSVggSXRlbSAiLW1icmFuY2gtbGlrZWx5IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWJyYW5jaFwtbGlrZWx5XGZSIiA0CisuSVggSXRlbSAiLW1uby1icmFuY2gtbGlrZWx5IgorLlBECitFbmFibGUgb3IgZGlzYWJsZSB1c2Ugb2YgQnJhbmNoIExpa2VseSBpbnN0cnVjdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlCitkZWZhdWx0IGZvciB0aGUgc2VsZWN0ZWQgYXJjaGl0ZWN0dXJlLiAgQnkgZGVmYXVsdCwgQnJhbmNoIExpa2VseQoraW5zdHJ1Y3Rpb25zIG1heSBiZSBnZW5lcmF0ZWQgaWYgdGhleSBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBzZWxlY3RlZAorYXJjaGl0ZWN0dXJlLiAgQW4gZXhjZXB0aW9uIGlzIGZvciB0aGUgXHMtMU1JUFMzMlxzMCBhbmQgXHMtMU1JUFM2NFxzMCBhcmNoaXRlY3R1cmVzCithbmQgcHJvY2Vzc29ycyB0aGF0IGltcGxlbWVudCB0aG9zZSBhcmNoaXRlY3R1cmVzOyBmb3IgdGhvc2UsIEJyYW5jaAorTGlrZWx5IGluc3RydWN0aW9ucyBhcmUgbm90IGJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIFxzLTFNSVBTMzJcczAKK2FuZCBccy0xTUlQUzY0XHMwIGFyY2hpdGVjdHVyZXMgc3BlY2lmaWNhbGx5IGRlcHJlY2F0ZSB0aGVpciB1c2UuCisuSVAgIlxmQlwtbWZwXC1leGNlcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLW1mcC1leGNlcHRpb25zIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZwXC1leGNlcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLW1uby1mcC1leGNlcHRpb25zIgorLlBECitTcGVjaWZpZXMgd2hldGhlciBccy0xRlBcczAgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4gIFRoaXMgYWZmZWN0cyBob3cKK1wmXHMtMUZQXHMwIGluc3RydWN0aW9ucyBhcmUgc2NoZWR1bGVkIGZvciBzb21lIHByb2Nlc3NvcnMuCitUaGUgZGVmYXVsdCBpcyB0aGF0IFxzLTFGUFxzMCBleGNlcHRpb25zIGFyZQorZW5hYmxlZC4KKy5TcAorRm9yIGluc3RhbmNlLCBvbiB0aGUgXHMtMVNCXC0xXHMwLCBpZiBccy0xRlBcczAgZXhjZXB0aW9ucyBhcmUgZGlzYWJsZWQsIGFuZCB3ZSBhcmUgZW1pdHRpbmcKKzY0XC1iaXQgY29kZSwgdGhlbiB3ZSBjYW4gdXNlIGJvdGggXHMtMUZQXHMwIHBpcGVzLiAgT3RoZXJ3aXNlLCB3ZSBjYW4gb25seSB1c2Ugb25lCitcJlxzLTFGUFxzMCBwaXBlLgorLklQICJcZkJcLW12cjQxMzBcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW12cjQxMzAtYWxpZ24iCisuUEQgMAorLklQICJcZkJcLW1ub1wtdnI0MTMwXC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tdnI0MTMwLWFsaWduIgorLlBECitUaGUgXHMtMVZSNDEzMFxzMCBwaXBlbGluZSBpcyB0d28td2F5IHN1cGVyc2NhbGFyLCBidXQgY2FuIG9ubHkgaXNzdWUgdHdvCitpbnN0cnVjdGlvbnMgdG9nZXRoZXIgaWYgdGhlIGZpcnN0IG9uZSBpcyA4XC1ieXRlIGFsaWduZWQuICBXaGVuIHRoaXMKK29wdGlvbiBpcyBlbmFibGVkLCBccy0xR0NDXHMwIGFsaWducyBwYWlycyBvZiBpbnN0cnVjdGlvbnMgdGhhdCBpdAordGhpbmtzIHNob3VsZCBleGVjdXRlIGluIHBhcmFsbGVsLgorLlNwCitUaGlzIG9wdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3Qgd2hlbiBvcHRpbWl6aW5nIGZvciB0aGUgXHMtMVZSNDEzMFxzMC4KK0l0IG5vcm1hbGx5IG1ha2VzIGNvZGUgZmFzdGVyLCBidXQgYXQgdGhlIGV4cGVuc2Ugb2YgbWFraW5nIGl0IGJpZ2dlci4KK0l0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBvcHRpbWl6YXRpb24gbGV2ZWwgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1tc3luY2lcZlIiIDQKKy5JWCBJdGVtICItbXN5bmNpIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXN5bmNpXGZSIiA0CisuSVggSXRlbSAiLW1uby1zeW5jaSIKKy5QRAorRW5hYmxlIChkaXNhYmxlKSBnZW5lcmF0aW9uIG9mIFxmKENXXCooQ2BzeW5jaVwqKEMnXGZSIGluc3RydWN0aW9ucyBvbgorYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQuICBUaGUgXGYoQ1dcKihDYHN5bmNpXCooQydcZlIgaW5zdHJ1Y3Rpb25zIChpZgorZW5hYmxlZCkgYXJlIGdlbmVyYXRlZCB3aGVuIFxmKENXXCooQ2BfXHxfYnVpbHRpbl9cfF9cfF9jbGVhcl9jYWNoZSgpXCooQydcZlIgaXMKK2NvbXBpbGVkLgorLlNwCitUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byBcZihDV1wqKENgXC1tbm9cLXN5bmNpXCooQydcZlIsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUKK292ZXJyaWRkZW4gYnkgY29uZmlndXJpbmcgd2l0aCBcZihDV1wqKENgXC1cLXdpdGhcLXN5bmNpXCooQydcZlIuCisuU3AKK1doZW4gY29tcGlsaW5nIGNvZGUgZm9yIHNpbmdsZSBwcm9jZXNzb3Igc3lzdGVtcywgaXQgaXMgZ2VuZXJhbGx5IHNhZmUKK3RvIHVzZSBcZihDV1wqKENgc3luY2lcKihDJ1xmUi4gIEhvd2V2ZXIsIG9uIG1hbnkgbXVsdGktY29yZSAoXHMtMVNNUFxzMCkgc3lzdGVtcywgaXQKK2RvZXMgbm90IGludmFsaWRhdGUgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBvbiBhbGwgY29yZXMgYW5kIG1heSBsZWFkCit0byB1bmRlZmluZWQgYmVoYXZpb3IuCisuSVAgIlxmQlwtbXJlbGF4XC1waWNcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1yZWxheC1waWMtY2FsbHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcmVsYXhcLXBpY1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXJlbGF4LXBpYy1jYWxscyIKKy5QRAorVHJ5IHRvIHR1cm4gXHMtMVBJQ1xzMCBjYWxscyB0aGF0IGFyZSBub3JtYWxseSBkaXNwYXRjaGVkIHZpYSByZWdpc3RlcgorXCZcZihDVyQyNVxmUiBpbnRvIGRpcmVjdCBjYWxscy4gIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgbGlua2VyIGNhbgorcmVzb2x2ZSB0aGUgZGVzdGluYXRpb24gYXQgbGluay10aW1lIGFuZCBpZiB0aGUgZGVzdGluYXRpb24gaXMgd2l0aGluCityYW5nZSBmb3IgYSBkaXJlY3QgY2FsbC4KKy5TcAorXCZcZkJcLW1yZWxheFwtcGljXC1jYWxsc1xmUiBpcyB0aGUgZGVmYXVsdCBpZiBccy0xR0NDXHMwIHdhcyBjb25maWd1cmVkIHRvIHVzZQorYW4gYXNzZW1ibGVyIGFuZCBhIGxpbmtlciB0aGF0IHN1cHBvcnQgdGhlIFxmKENXXCooQ2AucmVsb2NcKihDJ1xmUiBhc3NlbWJseQorZGlyZWN0aXZlIGFuZCBcZihDV1wqKENgXC1tZXhwbGljaXRcLXJlbG9jc1wqKEMnXGZSIGlzIGluIGVmZmVjdC4gIFdpdGgKK1wmXGYoQ1dcKihDYFwtbW5vXC1leHBsaWNpdFwtcmVsb2NzXCooQydcZlIsIHRoaXMgb3B0aW1pemF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgYnkgdGhlCithc3NlbWJsZXIgYW5kIHRoZSBsaW5rZXIgYWxvbmUgd2l0aG91dCBoZWxwIGZyb20gdGhlIGNvbXBpbGVyLgorLklQICJcZkJcLW1tY291bnRcLXJhXC1hZGRyZXNzXGZSIiA0CisuSVggSXRlbSAiLW1tY291bnQtcmEtYWRkcmVzcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1tY291bnRcLXJhXC1hZGRyZXNzXGZSIiA0CisuSVggSXRlbSAiLW1uby1tY291bnQtcmEtYWRkcmVzcyIKKy5QRAorRW1pdCAoZG8gbm90IGVtaXQpIGNvZGUgdGhhdCBhbGxvd3MgXGYoQ1dcKihDYF9tY291bnRcKihDJ1xmUiB0byBtb2RpZnkgdGhlCitjYWxsaW5nIGZ1bmN0aW9uJ3MgcmV0dXJuIGFkZHJlc3MuICBXaGVuIGVuYWJsZWQsIHRoaXMgb3B0aW9uIGV4dGVuZHMKK3RoZSB1c3VhbCBcZihDV1wqKENgX21jb3VudFwqKEMnXGZSIGludGVyZmFjZSB3aXRoIGEgbmV3IFxmSXJhLWFkZHJlc3NcZlIKK3BhcmFtZXRlciwgd2hpY2ggaGFzIHR5cGUgXGYoQ1dcKihDYGludHB0cl90ICpcKihDJ1xmUiBhbmQgaXMgcGFzc2VkIGluIHJlZ2lzdGVyCitcJlxmKENXJDEyXGZSLiAgXGYoQ1dcKihDYF9tY291bnRcKihDJ1xmUiBjYW4gdGhlbiBtb2RpZnkgdGhlIHJldHVybiBhZGRyZXNzIGJ5Citkb2luZyBib3RoIG9mIHRoZSBmb2xsb3dpbmc6CisuUlMgNAorLklQICJcKGJ1IiA0CitSZXR1cm5pbmcgdGhlIG5ldyBhZGRyZXNzIGluIHJlZ2lzdGVyIFxmKENXJDMxXGZSLgorLklQICJcKGJ1IiA0CitTdG9yaW5nIHRoZSBuZXcgYWRkcmVzcyBpbiBcZihDV1wqKENgKlxmKENJcmFcLWFkZHJlc3NcZihDV1wqKEMnXGZSLAoraWYgXGZJcmEtYWRkcmVzc1xmUiBpcyBub25udWxsLgorLlJFCisuUlMgNAorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLW1ub1wtbWNvdW50XC1yYVwtYWRkcmVzc1xmUi4KKy5SRQorLlBQCitcZklccy0xTU1JWFxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTU1JWCBPcHRpb25zIgorLlBQCitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgXHMtMU1NSVg6XHMwCisuSVAgIlxmQlwtbWxpYmZ1bmNzXGZSIiA0CisuSVggSXRlbSAiLW1saWJmdW5jcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1saWJmdW5jc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tbGliZnVuY3MiCisuUEQKK1NwZWNpZnkgdGhhdCBpbnRyaW5zaWMgbGlicmFyeSBmdW5jdGlvbnMgYXJlIGJlaW5nIGNvbXBpbGVkLCBwYXNzaW5nIGFsbAordmFsdWVzIGluIHJlZ2lzdGVycywgbm8gbWF0dGVyIHRoZSBzaXplLgorLklQICJcZkJcLW1lcHNpbG9uXGZSIiA0CisuSVggSXRlbSAiLW1lcHNpbG9uIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWVwc2lsb25cZlIiIDQKKy5JWCBJdGVtICItbW5vLWVwc2lsb24iCisuUEQKK0dlbmVyYXRlIGZsb2F0aW5nLXBvaW50IGNvbXBhcmlzb24gaW5zdHJ1Y3Rpb25zIHRoYXQgY29tcGFyZSB3aXRoIHJlc3BlY3QKK3RvIHRoZSBcZihDV1wqKENgckVcKihDJ1xmUiBlcHNpbG9uIHJlZ2lzdGVyLgorLklQICJcZkJcLW1hYmk9bW1peHdhcmVcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1tbWl4d2FyZSIKKy5QRCAwCisuSVAgIlxmQlwtbWFiaT1nbnVcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1nbnUiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCBwYXNzZXMgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlcyB0aGF0IChpbgordGhlIGNhbGxlZCBmdW5jdGlvbikgYXJlIHNlZW4gYXMgcmVnaXN0ZXJzIFxmKENXJDBcZlIgYW5kIHVwLCBhcyBvcHBvc2VkIHRvCit0aGUgXHMtMUdOVVxzMCBccy0xQUJJXHMwIHdoaWNoIHVzZXMgZ2xvYmFsIHJlZ2lzdGVycyBcZihDVyQyMzFcZlIgYW5kIHVwLgorLklQICJcZkJcLW16ZXJvXC1leHRlbmRcZlIiIDQKKy5JWCBJdGVtICItbXplcm8tZXh0ZW5kIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXplcm9cLWV4dGVuZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8temVyby1leHRlbmQiCisuUEQKK1doZW4gcmVhZGluZyBkYXRhIGZyb20gbWVtb3J5IGluIHNpemVzIHNob3J0ZXIgdGhhbiA2NCBiaXRzLCB1c2UgKGRvIG5vdAordXNlKSB6ZXJvLWV4dGVuZGluZyBsb2FkIGluc3RydWN0aW9ucyBieSBkZWZhdWx0LCByYXRoZXIgdGhhbgorc2lnbi1leHRlbmRpbmcgb25lcy4KKy5JUCAiXGZCXC1ta251dGhkaXZcZlIiIDQKKy5JWCBJdGVtICItbWtudXRoZGl2IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWtudXRoZGl2XGZSIiA0CisuSVggSXRlbSAiLW1uby1rbnV0aGRpdiIKKy5QRAorTWFrZSB0aGUgcmVzdWx0IG9mIGEgZGl2aXNpb24geWllbGRpbmcgYSByZW1haW5kZXIgaGF2ZSB0aGUgc2FtZSBzaWduIGFzCit0aGUgZGl2aXNvci4gIFdpdGggdGhlIGRlZmF1bHQsIFxmQlwtbW5vXC1rbnV0aGRpdlxmUiwgdGhlIHNpZ24gb2YgdGhlCityZW1haW5kZXIgZm9sbG93cyB0aGUgc2lnbiBvZiB0aGUgZGl2aWRlbmQuICBCb3RoIG1ldGhvZHMgYXJlCithcml0aG1ldGljYWxseSB2YWxpZCwgdGhlIGxhdHRlciBiZWluZyBhbG1vc3QgZXhjbHVzaXZlbHkgdXNlZC4KKy5JUCAiXGZCXC1tdG9wbGV2ZWxcLXN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItbXRvcGxldmVsLXN5bWJvbHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdG9wbGV2ZWxcLXN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXRvcGxldmVsLXN5bWJvbHMiCisuUEQKK1ByZXBlbmQgKGRvIG5vdCBwcmVwZW5kKSBhIFxmQjpcZlIgdG8gYWxsIGdsb2JhbCBzeW1ib2xzLCBzbyB0aGUgYXNzZW1ibHkKK2NvZGUgY2FuIGJlIHVzZWQgd2l0aCB0aGUgXGYoQ1dcKihDYFBSRUZJWFwqKEMnXGZSIGFzc2VtYmx5IGRpcmVjdGl2ZS4KKy5JUCAiXGZCXC1tZWxmXGZSIiA0CisuSVggSXRlbSAiLW1lbGYiCitHZW5lcmF0ZSBhbiBleGVjdXRhYmxlIGluIHRoZSBccy0xRUxGXHMwIGZvcm1hdCwgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQKK1wmXGZCbW1vXGZSIGZvcm1hdCB1c2VkIGJ5IHRoZSBcZkJtbWl4XGZSIHNpbXVsYXRvci4KKy5JUCAiXGZCXC1tYnJhbmNoXC1wcmVkaWN0XGZSIiA0CisuSVggSXRlbSAiLW1icmFuY2gtcHJlZGljdCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1icmFuY2hcLXByZWRpY3RcZlIiIDQKKy5JWCBJdGVtICItbW5vLWJyYW5jaC1wcmVkaWN0IgorLlBECitVc2UgKGRvIG5vdCB1c2UpIHRoZSBwcm9iYWJsZS1icmFuY2ggaW5zdHJ1Y3Rpb25zLCB3aGVuIHN0YXRpYyBicmFuY2gKK3ByZWRpY3Rpb24gaW5kaWNhdGVzIGEgcHJvYmFibGUgYnJhbmNoLgorLklQICJcZkJcLW1iYXNlXC1hZGRyZXNzZXNcZlIiIDQKKy5JWCBJdGVtICItbWJhc2UtYWRkcmVzc2VzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWJhc2VcLWFkZHJlc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tYmFzZS1hZGRyZXNzZXMiCisuUEQKK0dlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIGNvZGUgdGhhdCB1c2VzIFxmSWJhc2UgYWRkcmVzc2VzXGZSLiAgVXNpbmcgYQorYmFzZSBhZGRyZXNzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGEgcmVxdWVzdCAoaGFuZGxlZCBieSB0aGUgYXNzZW1ibGVyCithbmQgdGhlIGxpbmtlcikgZm9yIGEgY29uc3RhbnQgdG8gYmUgc2V0IHVwIGluIGEgZ2xvYmFsIHJlZ2lzdGVyLiAgVGhlCityZWdpc3RlciBpcyB1c2VkIGZvciBvbmUgb3IgbW9yZSBiYXNlIGFkZHJlc3MgcmVxdWVzdHMgd2l0aGluIHRoZSByYW5nZSAwCit0byAyNTUgZnJvbSB0aGUgdmFsdWUgaGVsZCBpbiB0aGUgcmVnaXN0ZXIuICBUaGUgZ2VuZXJhbGx5IGxlYWRzIHRvIHNob3J0CithbmQgZmFzdCBjb2RlLCBidXQgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgZGF0YSBpdGVtcyB0aGF0IGNhbiBiZQorYWRkcmVzc2VkIGlzIGxpbWl0ZWQuICBUaGlzIG1lYW5zIHRoYXQgYSBwcm9ncmFtIHRoYXQgdXNlcyBsb3RzIG9mIHN0YXRpYworZGF0YSBtYXkgcmVxdWlyZSBcZkJcLW1ub1wtYmFzZVwtYWRkcmVzc2VzXGZSLgorLklQICJcZkJcLW1zaW5nbGVcLWV4aXRcZlIiIDQKKy5JWCBJdGVtICItbXNpbmdsZS1leGl0IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNpbmdsZVwtZXhpdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2luZ2xlLWV4aXQiCisuUEQKK0ZvcmNlIChkbyBub3QgZm9yY2UpIGdlbmVyYXRlZCBjb2RlIHRvIGhhdmUgYSBzaW5nbGUgZXhpdCBwb2ludCBpbiBlYWNoCitmdW5jdGlvbi4KKy5QUAorXGZJXHMtMU1OMTAzMDBcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIk1OMTAzMDAgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIE1hdHN1c2hpdGEgXHMtMU1OMTAzMDBcczAgYXJjaGl0ZWN0dXJlczoKKy5JUCAiXGZCXC1tbXVsdFwtYnVnXGZSIiA0CisuSVggSXRlbSAiLW1tdWx0LWJ1ZyIKK0dlbmVyYXRlIGNvZGUgdG8gYXZvaWQgYnVncyBpbiB0aGUgbXVsdGlwbHkgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgXHMtMU1OMTAzMDBcczAKK3Byb2Nlc3NvcnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1ub1wtbXVsdFwtYnVnXGZSIiA0CisuSVggSXRlbSAiLW1uby1tdWx0LWJ1ZyIKK0RvIG5vdCBnZW5lcmF0ZSBjb2RlIHRvIGF2b2lkIGJ1Z3MgaW4gdGhlIG11bHRpcGx5IGluc3RydWN0aW9ucyBmb3IgdGhlCitcJlxzLTFNTjEwMzAwXHMwIHByb2Nlc3NvcnMuCisuSVAgIlxmQlwtbWFtMzNcZlIiIDQKKy5JWCBJdGVtICItbWFtMzMiCitHZW5lcmF0ZSBjb2RlIHVzaW5nIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBccy0xQU0zM1xzMCBwcm9jZXNzb3IuCisuSVAgIlxmQlwtbW5vXC1hbTMzXGZSIiA0CisuSVggSXRlbSAiLW1uby1hbTMzIgorRG8gbm90IGdlbmVyYXRlIGNvZGUgdXNpbmcgZmVhdHVyZXMgc3BlY2lmaWMgdG8gdGhlIFxzLTFBTTMzXHMwIHByb2Nlc3Nvci4gIFRoaXMKK2lzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1hbTMzXC0yXGZSIiA0CisuSVggSXRlbSAiLW1hbTMzLTIiCitHZW5lcmF0ZSBjb2RlIHVzaW5nIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBccy0xQU0zMy8yXHMwLjAgcHJvY2Vzc29yLgorLklQICJcZkJcLW1hbTM0XGZSIiA0CisuSVggSXRlbSAiLW1hbTM0IgorR2VuZXJhdGUgY29kZSB1c2luZyBmZWF0dXJlcyBzcGVjaWZpYyB0byB0aGUgXHMtMUFNMzRcczAgcHJvY2Vzc29yLgorLklQICJcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW10dW5lPWNwdS10eXBlIgorVXNlIHRoZSB0aW1pbmcgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBpbmRpY2F0ZWQgXHMtMUNQVVxzMCB0eXBlIHdoZW4KK3NjaGVkdWxpbmcgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHRhcmdldGVkIHByb2Nlc3NvcgordHlwZS4gIFRoZSBccy0xQ1BVXHMwIHR5cGUgbXVzdCBiZSBvbmUgb2YgXGZCbW4xMDMwMFxmUiwgXGZCYW0zM1xmUiwKK1wmXGZCYW0zM1wtMlxmUiBvciBcZkJhbTM0XGZSLgorLklQICJcZkJcLW1yZXR1cm5cLXBvaW50ZXJcLW9uXC1kMFxmUiIgNAorLklYIEl0ZW0gIi1tcmV0dXJuLXBvaW50ZXItb24tZDAiCitXaGVuIGdlbmVyYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwb2ludGVyLCByZXR1cm4gdGhlIHBvaW50ZXIKK2luIGJvdGggXGYoQ1dcKihDYGEwXCooQydcZlIgYW5kIFxmKENXXCooQ2BkMFwqKEMnXGZSLiAgT3RoZXJ3aXNlLCB0aGUgcG9pbnRlciBpcyByZXR1cm5lZAorb25seSBpbiBcZihDV1wqKENgYTBcKihDJ1xmUiwgYW5kIGF0dGVtcHRzIHRvIGNhbGwgc3VjaCBmdW5jdGlvbnMgd2l0aG91dCBhIHByb3RvdHlwZQorcmVzdWx0IGluIGVycm9ycy4gIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0OyB1c2UKK1wmXGZCXC1tbm9cLXJldHVyblwtcG9pbnRlclwtb25cLWQwXGZSIHRvIGRpc2FibGUgaXQuCisuSVAgIlxmQlwtbW5vXC1jcnQwXGZSIiA0CisuSVggSXRlbSAiLW1uby1jcnQwIgorRG8gbm90IGxpbmsgaW4gdGhlIEMgcnVuLXRpbWUgaW5pdGlhbGl6YXRpb24gb2JqZWN0IGZpbGUuCisuSVAgIlxmQlwtbXJlbGF4XGZSIiA0CisuSVggSXRlbSAiLW1yZWxheCIKK0luZGljYXRlIHRvIHRoZSBsaW5rZXIgdGhhdCBpdCBzaG91bGQgcGVyZm9ybSBhIHJlbGF4YXRpb24gb3B0aW1pemF0aW9uIHBhc3MKK3RvIHNob3J0ZW4gYnJhbmNoZXMsIGNhbGxzIGFuZCBhYnNvbHV0ZSBtZW1vcnkgYWRkcmVzc2VzLiAgVGhpcyBvcHRpb24gb25seQoraGFzIGFuIGVmZmVjdCB3aGVuIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBmb3IgdGhlIGZpbmFsIGxpbmsgc3RlcC4KKy5TcAorVGhpcyBvcHRpb24gbWFrZXMgc3ltYm9saWMgZGVidWdnaW5nIGltcG9zc2libGUuCisuSVAgIlxmQlwtbWxpd1xmUiIgNAorLklYIEl0ZW0gIi1tbGl3IgorQWxsb3cgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIFxmSUxvbmcgSW5zdHJ1Y3Rpb24gV29yZFxmUgoraW5zdHJ1Y3Rpb25zIGlmIHRoZSB0YXJnZXQgaXMgdGhlIFxmQlxzLTFBTTMzXHMwXGZSIG9yIGxhdGVyLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuICBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gXGZCX1x8X0xJV19cfF9cZlIuCisuSVAgIlxmQlwtbW5vbGl3XGZSIiA0CisuSVggSXRlbSAiLW1ub2xpdyIKK0RvIG5vdCBhbGxvdyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgXGZJTG9uZyBJbnN0cnVjdGlvbiBXb3JkXGZSCitpbnN0cnVjdGlvbnMuICBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8KK1wmXGZCX1x8X05PX0xJV19cfF9cZlIuCisuSVAgIlxmQlwtbXNldGxiXGZSIiA0CisuSVggSXRlbSAiLW1zZXRsYiIKK0FsbG93IHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSB0aGUgXGZJXHMtMVNFVExCXHMwXGZSIGFuZCBcZklMY2NcZlIKK2luc3RydWN0aW9ucyBpZiB0aGUgdGFyZ2V0IGlzIHRoZSBcZkJccy0xQU0zM1xzMFxmUiBvciBsYXRlci4gIFRoaXMgaXMgdGhlCitkZWZhdWx0LiAgVGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvIFxmQl9cfF9TRVRMQl9cfF9cZlIuCisuSVAgIlxmQlwtbW5vc2V0bGJcZlIiIDQKKy5JWCBJdGVtICItbW5vc2V0bGIiCitEbyBub3QgYWxsb3cgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIFxmSVxzLTFTRVRMQlxzMFxmUiBvciBcZklMY2NcZlIKK2luc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHByZXByb2Nlc3NvciBtYWNybworXCZcZkJfXHxfTk9fU0VUTEJfXHxfXGZSLgorLlBQCitcZklNb3hpZSBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTW94aWUgT3B0aW9ucyIKKy5JUCAiXGZCXC1tZWJcZlIiIDQKKy5JWCBJdGVtICItbWViIgorR2VuZXJhdGUgYmlnLWVuZGlhbiBjb2RlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgXGZCbW94aWVcLSpcLSpcZlIKK2NvbmZpZ3VyYXRpb25zLgorLklQICJcZkJcLW1lbFxmUiIgNAorLklYIEl0ZW0gIi1tZWwiCitHZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIGNvZGUuCisuSVAgIlxmQlwtbW5vXC1jcnQwXGZSIiA0CisuSVggSXRlbSAiLW1uby1jcnQwIgorRG8gbm90IGxpbmsgaW4gdGhlIEMgcnVuLXRpbWUgaW5pdGlhbGl6YXRpb24gb2JqZWN0IGZpbGUuCisuUFAKK1xmSVxzLTFQRFBcLTExXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJQRFAtMTEgT3B0aW9ucyIKKy5QUAorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIFxzLTFQRFBcLTExOlxzMAorLklQICJcZkJcLW1mcHVcZlIiIDQKKy5JWCBJdGVtICItbWZwdSIKK1VzZSBoYXJkd2FyZSBccy0xRlBQXHMwIGZsb2F0aW5nIHBvaW50LiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4gIChccy0xRklTXHMwIGZsb2F0aW5nCitwb2ludCBvbiB0aGUgXHMtMVBEUFwtMTEvNDBcczAgaXMgbm90IHN1cHBvcnRlZC4pCisuSVAgIlxmQlwtbXNvZnRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1zb2Z0LWZsb2F0IgorRG8gbm90IHVzZSBoYXJkd2FyZSBmbG9hdGluZyBwb2ludC4KKy5JUCAiXGZCXC1tYWMwXGZSIiA0CisuSVggSXRlbSAiLW1hYzAiCitSZXR1cm4gZmxvYXRpbmctcG9pbnQgcmVzdWx0cyBpbiBhYzAgKGZyMCBpbiBVbml4IGFzc2VtYmxlciBzeW50YXgpLgorLklQICJcZkJcLW1ub1wtYWMwXGZSIiA0CisuSVggSXRlbSAiLW1uby1hYzAiCitSZXR1cm4gZmxvYXRpbmctcG9pbnQgcmVzdWx0cyBpbiBtZW1vcnkuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW00MFxmUiIgNAorLklYIEl0ZW0gIi1tNDAiCitHZW5lcmF0ZSBjb2RlIGZvciBhIFxzLTFQRFBcLTExLzQwXHMwLgorLklQICJcZkJcLW00NVxmUiIgNAorLklYIEl0ZW0gIi1tNDUiCitHZW5lcmF0ZSBjb2RlIGZvciBhIFxzLTFQRFBcLTExLzQ1XHMwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tMTBcZlIiIDQKKy5JWCBJdGVtICItbTEwIgorR2VuZXJhdGUgY29kZSBmb3IgYSBccy0xUERQXC0xMS8xMFxzMC4KKy5JUCAiXGZCXC1tYmNvcHlcLWJ1aWx0aW5cZlIiIDQKKy5JWCBJdGVtICItbWJjb3B5LWJ1aWx0aW4iCitVc2UgaW5saW5lIFxmKENXXCooQ2Btb3ZtZW1oaVwqKEMnXGZSIHBhdHRlcm5zIGZvciBjb3B5aW5nIG1lbW9yeS4gIFRoaXMgaXMgdGhlCitkZWZhdWx0LgorLklQICJcZkJcLW1iY29weVxmUiIgNAorLklYIEl0ZW0gIi1tYmNvcHkiCitEbyBub3QgdXNlIGlubGluZSBcZihDV1wqKENgbW92bWVtaGlcKihDJ1xmUiBwYXR0ZXJucyBmb3IgY29weWluZyBtZW1vcnkuCisuSVAgIlxmQlwtbWludDE2XGZSIiA0CisuSVggSXRlbSAiLW1pbnQxNiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1pbnQzMlxmUiIgNAorLklYIEl0ZW0gIi1tbm8taW50MzIiCisuUEQKK1VzZSAxNlwtYml0IFxmKENXXCooQ2BpbnRcKihDJ1xmUi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWludDMyXGZSIiA0CisuSVggSXRlbSAiLW1pbnQzMiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1pbnQxNlxmUiIgNAorLklYIEl0ZW0gIi1tbm8taW50MTYiCisuUEQKK1VzZSAzMlwtYml0IFxmKENXXCooQ2BpbnRcKihDJ1xmUi4KKy5JUCAiXGZCXC1tZmxvYXQ2NFxmUiIgNAorLklYIEl0ZW0gIi1tZmxvYXQ2NCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mbG9hdDMyXGZSIiA0CisuSVggSXRlbSAiLW1uby1mbG9hdDMyIgorLlBECitVc2UgNjRcLWJpdCBcZihDV1wqKENgZmxvYXRcKihDJ1xmUi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWZsb2F0MzJcZlIiIDQKKy5JWCBJdGVtICItbWZsb2F0MzIiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZmxvYXQ2NFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZmxvYXQ2NCIKKy5QRAorVXNlIDMyXC1iaXQgXGYoQ1dcKihDYGZsb2F0XCooQydcZlIuCisuSVAgIlxmQlwtbWFic2hpXGZSIiA0CisuSVggSXRlbSAiLW1hYnNoaSIKK1VzZSBcZihDV1wqKENgYWJzaGkyXCooQydcZlIgcGF0dGVybi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbW5vXC1hYnNoaVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYWJzaGkiCitEbyBub3QgdXNlIFxmKENXXCooQ2BhYnNoaTJcKihDJ1xmUiBwYXR0ZXJuLgorLklQICJcZkJcLW1icmFuY2hcLWV4cGVuc2l2ZVxmUiIgNAorLklYIEl0ZW0gIi1tYnJhbmNoLWV4cGVuc2l2ZSIKK1ByZXRlbmQgdGhhdCBicmFuY2hlcyBhcmUgZXhwZW5zaXZlLiAgVGhpcyBpcyBmb3IgZXhwZXJpbWVudGluZyB3aXRoCitjb2RlIGdlbmVyYXRpb24gb25seS4KKy5JUCAiXGZCXC1tYnJhbmNoXC1jaGVhcFxmUiIgNAorLklYIEl0ZW0gIi1tYnJhbmNoLWNoZWFwIgorRG8gbm90IHByZXRlbmQgdGhhdCBicmFuY2hlcyBhcmUgZXhwZW5zaXZlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tdW5peFwtYXNtXGZSIiA0CisuSVggSXRlbSAiLW11bml4LWFzbSIKK1VzZSBVbml4IGFzc2VtYmxlciBzeW50YXguICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gY29uZmlndXJlZCBmb3IKK1wmXGZCcGRwMTFcLSpcLWJzZFxmUi4KKy5JUCAiXGZCXC1tZGVjXC1hc21cZlIiIDQKKy5JWCBJdGVtICItbWRlYy1hc20iCitVc2UgXHMtMURFQ1xzMCBhc3NlbWJsZXIgc3ludGF4LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIGNvbmZpZ3VyZWQgZm9yIGFueQorXCZccy0xUERQXC0xMVxzMCB0YXJnZXQgb3RoZXIgdGhhbiBcZkJwZHAxMVwtKlwtYnNkXGZSLgorLlBQCitcZklwaWNvQ2hpcCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAicGljb0NoaXAgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHBpY29DaGlwIGltcGxlbWVudGF0aW9uczoKKy5JUCAiXGZCXC1tYWU9XGZSXGZJYWVfdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tYWU9YWVfdHlwZSIKK1NldCB0aGUgaW5zdHJ1Y3Rpb24gc2V0LCByZWdpc3RlciBzZXQsIGFuZCBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nCitwYXJhbWV0ZXJzIGZvciBhcnJheSBlbGVtZW50IHR5cGUgXGZJYWVfdHlwZVxmUi4gIFN1cHBvcnRlZCB2YWx1ZXMKK2ZvciBcZklhZV90eXBlXGZSIGFyZSBcZkJccy0xQU5ZXHMwXGZSLCBcZkJccy0xTVVMXHMwXGZSLCBhbmQgXGZCXHMtMU1BQ1xzMFxmUi4KKy5TcAorXCZcZkJcLW1hZT1BTllcZlIgc2VsZWN0cyBhIGNvbXBsZXRlbHkgZ2VuZXJpYyBccy0xQUVcczAgdHlwZS4gIENvZGUKK2dlbmVyYXRlZCB3aXRoIHRoaXMgb3B0aW9uIHJ1bnMgb24gYW55IG9mIHRoZSBvdGhlciBccy0xQUVcczAgdHlwZXMuICBUaGUKK2NvZGUgaXMgbm90IGFzIGVmZmljaWVudCBhcyBpdCB3b3VsZCBiZSBpZiBjb21waWxlZCBmb3IgYSBzcGVjaWZpYworXCZccy0xQUVcczAgdHlwZSwgYW5kIHNvbWUgdHlwZXMgb2Ygb3BlcmF0aW9uIChlLmcuLCBtdWx0aXBsaWNhdGlvbikgZG8gbm90Cit3b3JrIHByb3Blcmx5IG9uIGFsbCB0eXBlcyBvZiBccy0xQUVcczAuCisuU3AKK1wmXGZCXC1tYWU9TVVMXGZSIHNlbGVjdHMgYSBccy0xTVVMXHMwIFxzLTFBRVxzMCB0eXBlLiAgVGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgXHMtMUFFXHMwIHR5cGUKK2ZvciBjb21waWxlZCBjb2RlLCBhbmQgaXMgdGhlIGRlZmF1bHQuCisuU3AKK1wmXGZCXC1tYWU9TUFDXGZSIHNlbGVjdHMgYSBEU1Atc3R5bGUgXHMtMU1BQ1xzMCBccy0xQUVcczAuICBDb2RlIGNvbXBpbGVkIHdpdGggdGhpcworb3B0aW9uIG1heSBzdWZmZXIgZnJvbSBwb29yIHBlcmZvcm1hbmNlIG9mIGJ5dGUgKGNoYXIpIG1hbmlwdWxhdGlvbiwKK3NpbmNlIHRoZSBccy0xRFNQXHMwIFxzLTFBRVxzMCBkb2VzIG5vdCBwcm92aWRlIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGJ5dGUgbG9hZC9zdG9yZXMuCisuSVAgIlxmQlwtbXN5bWJvbFwtYXNcLWFkZHJlc3NcZlIiIDQKKy5JWCBJdGVtICItbXN5bWJvbC1hcy1hZGRyZXNzIgorRW5hYmxlIHRoZSBjb21waWxlciB0byBkaXJlY3RseSB1c2UgYSBzeW1ib2wgbmFtZSBhcyBhbiBhZGRyZXNzIGluIGEKK2xvYWQvc3RvcmUgaW5zdHJ1Y3Rpb24sIHdpdGhvdXQgZmlyc3QgbG9hZGluZyBpdCBpbnRvIGEKK3JlZ2lzdGVyLiAgVHlwaWNhbGx5LCB0aGUgdXNlIG9mIHRoaXMgb3B0aW9uIGdlbmVyYXRlcyBsYXJnZXIKK3Byb2dyYW1zLCB3aGljaCBydW4gZmFzdGVyIHRoYW4gd2hlbiB0aGUgb3B0aW9uIGlzbid0IHVzZWQuICBIb3dldmVyLCB0aGUKK3Jlc3VsdHMgdmFyeSBmcm9tIHByb2dyYW0gdG8gcHJvZ3JhbSwgc28gaXQgaXMgbGVmdCBhcyBhIHVzZXIgb3B0aW9uLAorcmF0aGVyIHRoYW4gYmVpbmcgcGVybWFuZW50bHkgZW5hYmxlZC4KKy5JUCAiXGZCXC1tbm9cLWluZWZmaWNpZW50XC13YXJuaW5nc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8taW5lZmZpY2llbnQtd2FybmluZ3MiCitEaXNhYmxlcyB3YXJuaW5ncyBhYm91dCB0aGUgZ2VuZXJhdGlvbiBvZiBpbmVmZmljaWVudCBjb2RlLiAgVGhlc2UKK3dhcm5pbmdzIGNhbiBiZSBnZW5lcmF0ZWQsIGZvciBleGFtcGxlLCB3aGVuIGNvbXBpbGluZyBjb2RlIHRoYXQKK3BlcmZvcm1zIGJ5dGUtbGV2ZWwgbWVtb3J5IG9wZXJhdGlvbnMgb24gdGhlIFxzLTFNQUNcczAgXHMtMUFFXHMwIHR5cGUuICBUaGUgXHMtMU1BQ1xzMCBccy0xQUVcczAgaGFzCitubyBoYXJkd2FyZSBzdXBwb3J0IGZvciBieXRlLWxldmVsIG1lbW9yeSBvcGVyYXRpb25zLCBzbyBhbGwgYnl0ZQorbG9hZC9zdG9yZXMgbXVzdCBiZSBzeW50aGVzaXplZCBmcm9tIHdvcmQgbG9hZC9zdG9yZSBvcGVyYXRpb25zLiAgVGhpcyBpcworaW5lZmZpY2llbnQgYW5kIGEgd2FybmluZyBpcyBnZW5lcmF0ZWQgdG8gaW5kaWNhdGUKK3RoYXQgeW91IHNob3VsZCByZXdyaXRlIHRoZSBjb2RlIHRvIGF2b2lkIGJ5dGUgb3BlcmF0aW9ucywgb3IgdG8gdGFyZ2V0CithbiBccy0xQUVcczAgdHlwZSB0aGF0IGhhcyB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIHN1cHBvcnQuICBUaGlzIG9wdGlvbiBkaXNhYmxlcwordGhlc2Ugd2FybmluZ3MuCisuUFAKK1xmSVBvd2VyUEMgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlBvd2VyUEMgT3B0aW9ucyIKKy5QUAorVGhlc2UgYXJlIGxpc3RlZCB1bmRlcgorLlBQCitcZklccy0xUkw3OFxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiUkw3OCBPcHRpb25zIgorLklQICJcZkJcLW1zaW1cZlIiIDQKKy5JWCBJdGVtICItbXNpbSIKK0xpbmtzIGluIGFkZGl0aW9uYWwgdGFyZ2V0IGxpYnJhcmllcyB0byBzdXBwb3J0IG9wZXJhdGlvbiB3aXRoaW4gYQorc2ltdWxhdG9yLgorLklQICJcZkJcLW1tdWw9bm9uZVxmUiIgNAorLklYIEl0ZW0gIi1tbXVsPW5vbmUiCisuUEQgMAorLklQICJcZkJcLW1tdWw9ZzEzXGZSIiA0CisuSVggSXRlbSAiLW1tdWw9ZzEzIgorLklQICJcZkJcLW1tdWw9cmw3OFxmUiIgNAorLklYIEl0ZW0gIi1tbXVsPXJsNzgiCisuUEQKK1NwZWNpZmllcyB0aGUgdHlwZSBvZiBoYXJkd2FyZSBtdWx0aXBsaWNhdGlvbiBzdXBwb3J0IHRvIGJlIHVzZWQuICBUaGUKK2RlZmF1bHQgaXMgXGYoQ1dcKihDYG5vbmVcKihDJ1xmUiwgd2hpY2ggdXNlcyBzb2Z0d2FyZSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbnMuCitUaGUgXGYoQ1dcKihDYGcxM1wqKEMnXGZSIG9wdGlvbiBpcyBmb3IgdGhlIGhhcmR3YXJlIG11bHRpcGx5L2RpdmlkZSBwZXJpcGhlcmFsCitvbmx5IG9uIHRoZSBccy0xUkw3OC9HMTNcczAgdGFyZ2V0cy4gIFRoZSBcZihDV1wqKENgcmw3OFwqKEMnXGZSIG9wdGlvbiBpcyBmb3IgdGhlCitzdGFuZGFyZCBoYXJkd2FyZSBtdWx0aXBsaWNhdGlvbiBkZWZpbmVkIGluIHRoZSBccy0xUkw3OFxzMCBzb2Z0d2FyZSBtYW51YWwuCisuUFAKK1xmSVxzLTFJQk1cczAgXHMtMVJTLzYwMDBcczAgYW5kIFBvd2VyUEMgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIklCTSBSUy82MDAwIGFuZCBQb3dlclBDIE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgXHMtMUlCTVxzMCBccy0xUlMvNjAwMFxzMCBhbmQgUG93ZXJQQzoKKy5JUCAiXGZCXC1tcG93ZXJwY1wtZ3BvcHRcZlIiIDQKKy5JWCBJdGVtICItbXBvd2VycGMtZ3BvcHQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcG93ZXJwY1wtZ3BvcHRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBvd2VycGMtZ3BvcHQiCisuSVAgIlxmQlwtbXBvd2VycGNcLWdmeG9wdFxmUiIgNAorLklYIEl0ZW0gIi1tcG93ZXJwYy1nZnhvcHQiCisuSVAgIlxmQlwtbW5vXC1wb3dlcnBjXC1nZnhvcHRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBvd2VycGMtZ2Z4b3B0IgorLklQICJcZkJcLW1wb3dlcnBjNjRcZlIiIDQKKy5JWCBJdGVtICItbXBvd2VycGM2NCIKKy5JUCAiXGZCXC1tbm9cLXBvd2VycGM2NFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcG93ZXJwYzY0IgorLklQICJcZkJcLW1tZmNyZlxmUiIgNAorLklYIEl0ZW0gIi1tbWZjcmYiCisuSVAgIlxmQlwtbW5vXC1tZmNyZlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWZjcmYiCisuSVAgIlxmQlwtbXBvcGNudGJcZlIiIDQKKy5JWCBJdGVtICItbXBvcGNudGIiCisuSVAgIlxmQlwtbW5vXC1wb3BjbnRiXGZSIiA0CisuSVggSXRlbSAiLW1uby1wb3BjbnRiIgorLklQICJcZkJcLW1wb3BjbnRkXGZSIiA0CisuSVggSXRlbSAiLW1wb3BjbnRkIgorLklQICJcZkJcLW1ub1wtcG9wY250ZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcG9wY250ZCIKKy5JUCAiXGZCXC1tZnBybmRcZlIiIDQKKy5JWCBJdGVtICItbWZwcm5kIgorLklQICJcZkJcLW1ub1wtZnBybmRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZwcm5kIgorLklQICJcZkJcLW1jbXBiXGZSIiA0CisuSVggSXRlbSAiLW1jbXBiIgorLklQICJcZkJcLW1ub1wtY21wYlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tY21wYiIKKy5JUCAiXGZCXC1tbWZwZ3ByXGZSIiA0CisuSVggSXRlbSAiLW1tZnBncHIiCisuSVAgIlxmQlwtbW5vXC1tZnBncHJcZlIiIDQKKy5JWCBJdGVtICItbW5vLW1mcGdwciIKKy5JUCAiXGZCXC1taGFyZFwtZGZwXGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWRmcCIKKy5JUCAiXGZCXC1tbm9cLWhhcmRcLWRmcFxmUiIgNAorLklYIEl0ZW0gIi1tbm8taGFyZC1kZnAiCisuUEQKK1lvdSB1c2UgdGhlc2Ugb3B0aW9ucyB0byBzcGVjaWZ5IHdoaWNoIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRoZQorcHJvY2Vzc29yIHlvdSBhcmUgdXNpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGVzZSBvcHRpb25zIGlzCitkZXRlcm1pbmVkIHdoZW4gY29uZmlndXJpbmcgXHMtMUdDQ1xzMC4gIFNwZWNpZnlpbmcgdGhlCitcJlxmQlwtbWNwdT1cZlJcZkljcHVfdHlwZVxmUiBvdmVycmlkZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlc2UKK29wdGlvbnMuICBXZSByZWNvbW1lbmQgeW91IHVzZSB0aGUgXGZCXC1tY3B1PVxmUlxmSWNwdV90eXBlXGZSIG9wdGlvbgorcmF0aGVyIHRoYW4gdGhlIG9wdGlvbnMgbGlzdGVkIGFib3ZlLgorLlNwCitTcGVjaWZ5aW5nIFxmQlwtbXBvd2VycGNcLWdwb3B0XGZSIGFsbG93cworXCZccy0xR0NDXHMwIHRvIHVzZSB0aGUgb3B0aW9uYWwgUG93ZXJQQyBhcmNoaXRlY3R1cmUgaW5zdHJ1Y3Rpb25zIGluIHRoZQorR2VuZXJhbCBQdXJwb3NlIGdyb3VwLCBpbmNsdWRpbmcgZmxvYXRpbmctcG9pbnQgc3F1YXJlIHJvb3QuICBTcGVjaWZ5aW5nCitcJlxmQlwtbXBvd2VycGNcLWdmeG9wdFxmUiBhbGxvd3MgXHMtMUdDQ1xzMCB0bwordXNlIHRoZSBvcHRpb25hbCBQb3dlclBDIGFyY2hpdGVjdHVyZSBpbnN0cnVjdGlvbnMgaW4gdGhlIEdyYXBoaWNzCitncm91cCwgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHNlbGVjdC4KKy5TcAorVGhlIFxmQlwtbW1mY3JmXGZSIG9wdGlvbiBhbGxvd3MgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSB0aGUgbW92ZSBmcm9tCitjb25kaXRpb24gcmVnaXN0ZXIgZmllbGQgaW5zdHJ1Y3Rpb24gaW1wbGVtZW50ZWQgb24gdGhlIFxzLTFQT1dFUjRcczAKK3Byb2Nlc3NvciBhbmQgb3RoZXIgcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIFBvd2VyUEMgVjIuMDEKK2FyY2hpdGVjdHVyZS4KK1RoZSBcZkJcLW1wb3BjbnRiXGZSIG9wdGlvbiBhbGxvd3MgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSB0aGUgcG9wY291bnQgYW5kCitkb3VibGUtcHJlY2lzaW9uIFxzLTFGUFxzMCByZWNpcHJvY2FsIGVzdGltYXRlIGluc3RydWN0aW9uIGltcGxlbWVudGVkIG9uIHRoZQorXCZccy0xUE9XRVI1XHMwIHByb2Nlc3NvciBhbmQgb3RoZXIgcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIFBvd2VyUEMgVjIuMDIKK2FyY2hpdGVjdHVyZS4KK1RoZSBcZkJcLW1wb3BjbnRkXGZSIG9wdGlvbiBhbGxvd3MgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSB0aGUgcG9wY291bnQKK2luc3RydWN0aW9uIGltcGxlbWVudGVkIG9uIHRoZSBccy0xUE9XRVI3XHMwIHByb2Nlc3NvciBhbmQgb3RoZXIgcHJvY2Vzc29ycwordGhhdCBzdXBwb3J0IHRoZSBQb3dlclBDIFYyLjA2IGFyY2hpdGVjdHVyZS4KK1RoZSBcZkJcLW1mcHJuZFxmUiBvcHRpb24gYWxsb3dzIFxzLTFHQ0NcczAgdG8gZ2VuZXJhdGUgdGhlIFxzLTFGUFxzMCByb3VuZCB0bworaW50ZWdlciBpbnN0cnVjdGlvbnMgaW1wbGVtZW50ZWQgb24gdGhlIFxzLTFQT1dFUjUrXHMwIHByb2Nlc3NvciBhbmQgb3RoZXIKK3Byb2Nlc3NvcnMgdGhhdCBzdXBwb3J0IHRoZSBQb3dlclBDIFYyLjAzIGFyY2hpdGVjdHVyZS4KK1RoZSBcZkJcLW1jbXBiXGZSIG9wdGlvbiBhbGxvd3MgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSB0aGUgY29tcGFyZSBieXRlcworaW5zdHJ1Y3Rpb24gaW1wbGVtZW50ZWQgb24gdGhlIFxzLTFQT1dFUjZcczAgcHJvY2Vzc29yIGFuZCBvdGhlciBwcm9jZXNzb3JzCit0aGF0IHN1cHBvcnQgdGhlIFBvd2VyUEMgVjIuMDUgYXJjaGl0ZWN0dXJlLgorVGhlIFxmQlwtbW1mcGdwclxmUiBvcHRpb24gYWxsb3dzIFxzLTFHQ0NcczAgdG8gZ2VuZXJhdGUgdGhlIFxzLTFGUFxzMCBtb3ZlIHRvL2Zyb20KK2dlbmVyYWwtcHVycG9zZSByZWdpc3RlciBpbnN0cnVjdGlvbnMgaW1wbGVtZW50ZWQgb24gdGhlIFxzLTFQT1dFUjZYXHMwCitwcm9jZXNzb3IgYW5kIG90aGVyIHByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0IHRoZSBleHRlbmRlZCBQb3dlclBDIFYyLjA1CithcmNoaXRlY3R1cmUuCitUaGUgXGZCXC1taGFyZFwtZGZwXGZSIG9wdGlvbiBhbGxvd3MgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSB0aGUgZGVjaW1hbAorZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGltcGxlbWVudGVkIG9uIHNvbWUgXHMtMVBPV0VSXHMwIHByb2Nlc3NvcnMuCisuU3AKK1RoZSBcZkJcLW1wb3dlcnBjNjRcZlIgb3B0aW9uIGFsbG93cyBccy0xR0NDXHMwIHRvIGdlbmVyYXRlIHRoZSBhZGRpdGlvbmFsCis2NFwtYml0IGluc3RydWN0aW9ucyB0aGF0IGFyZSBmb3VuZCBpbiB0aGUgZnVsbCBQb3dlclBDNjQgYXJjaGl0ZWN0dXJlCithbmQgdG8gdHJlYXQgR1BScyBhcyA2NFwtYml0LCBkb3VibGV3b3JkIHF1YW50aXRpZXMuICBccy0xR0NDXHMwIGRlZmF1bHRzIHRvCitcJlxmQlwtbW5vXC1wb3dlcnBjNjRcZlIuCisuSVAgIlxmQlwtbWNwdT1cZlJcZkljcHVfdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PWNwdV90eXBlIgorU2V0IGFyY2hpdGVjdHVyZSB0eXBlLCByZWdpc3RlciB1c2FnZSwgYW5kCitpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIG1hY2hpbmUgdHlwZSBcZkljcHVfdHlwZVxmUi4KK1N1cHBvcnRlZCB2YWx1ZXMgZm9yIFxmSWNwdV90eXBlXGZSIGFyZSBcZkI0MDFcZlIsIFxmQjQwM1xmUiwKK1wmXGZCNDA1XGZSLCBcZkI0MDVmcFxmUiwgXGZCNDQwXGZSLCBcZkI0NDBmcFxmUiwgXGZCNDY0XGZSLCBcZkI0NjRmcFxmUiwKK1wmXGZCNDc2XGZSLCBcZkI0NzZmcFxmUiwgXGZCNTA1XGZSLCBcZkI2MDFcZlIsIFxmQjYwMlxmUiwgXGZCNjAzXGZSLAorXCZcZkI2MDNlXGZSLCBcZkI2MDRcZlIsIFxmQjYwNGVcZlIsIFxmQjYyMFxmUiwgXGZCNjMwXGZSLCBcZkI3NDBcZlIsCitcJlxmQjc0MDBcZlIsIFxmQjc0NTBcZlIsIFxmQjc1MFxmUiwgXGZCODAxXGZSLCBcZkI4MjFcZlIsIFxmQjgyM1xmUiwKK1wmXGZCODYwXGZSLCBcZkI5NzBcZlIsIFxmQjg1NDBcZlIsIFxmQmEyXGZSLCBcZkJlMzAwYzJcZlIsCitcJlxmQmUzMDBjM1xmUiwgXGZCZTUwMG1jXGZSLCBcZkJlNTAwbWM2NFxmUiwgXGZCZTU1MDBcZlIsCitcJlxmQmU2NTAwXGZSLCBcZkJlYzYwM2VcZlIsIFxmQkczXGZSLCBcZkJHNFxmUiwgXGZCRzVcZlIsCitcJlxmQnRpdGFuXGZSLCBcZkJwb3dlcjNcZlIsIFxmQnBvd2VyNFxmUiwgXGZCcG93ZXI1XGZSLCBcZkJwb3dlcjUrXGZSLAorXCZcZkJwb3dlcjZcZlIsIFxmQnBvd2VyNnhcZlIsIFxmQnBvd2VyN1xmUiwgXGZCcG93ZXI4XGZSLCBcZkJwb3dlcnBjXGZSLAorXCZcZkJwb3dlcnBjNjRcZlIsIGFuZCBcZkJyczY0XGZSLgorLlNwCitcJlxmQlwtbWNwdT1wb3dlcnBjXGZSLCBhbmQgXGZCXC1tY3B1PXBvd2VycGM2NFxmUiBzcGVjaWZ5IHB1cmUgMzJcLWJpdAorUG93ZXJQQyBhbmQgNjRcLWJpdCBQb3dlclBDIGFyY2hpdGVjdHVyZSBtYWNoaW5lCit0eXBlcywgd2l0aCBhbiBhcHByb3ByaWF0ZSwgZ2VuZXJpYyBwcm9jZXNzb3IgbW9kZWwgYXNzdW1lZCBmb3IKK3NjaGVkdWxpbmcgcHVycG9zZXMuCisuU3AKK1RoZSBvdGhlciBvcHRpb25zIHNwZWNpZnkgYSBzcGVjaWZpYyBwcm9jZXNzb3IuICBDb2RlIGdlbmVyYXRlZCB1bmRlcgordGhvc2Ugb3B0aW9ucyBydW5zIGJlc3Qgb24gdGhhdCBwcm9jZXNzb3IsIGFuZCBtYXkgbm90IHJ1biBhdCBhbGwgb24KK290aGVycy4KKy5TcAorVGhlIFxmQlwtbWNwdVxmUiBvcHRpb25zIGF1dG9tYXRpY2FsbHkgZW5hYmxlIG9yIGRpc2FibGUgdGhlCitmb2xsb3dpbmcgb3B0aW9uczoKKy5TcAorXCZcZkJcLW1hbHRpdmVjICBcLW1mcHJuZCAgXC1taGFyZFwtZmxvYXQgIFwtbW1mY3JmICBcLW1tdWx0aXBsZSAKK1wmXC1tcG9wY250YiBcLW1wb3BjbnRkICBcLW1wb3dlcnBjNjQgCitcJlwtbXBvd2VycGNcLWdwb3B0ICBcLW1wb3dlcnBjXC1nZnhvcHQgIFwtbXNpbmdsZVwtZmxvYXQgXC1tZG91YmxlXC1mbG9hdCAKK1wmXC1tc2ltcGxlXC1mcHUgXC1tc3RyaW5nICBcLW1tdWxodyAgXC1tZGxtemIgIFwtbW1mcGdwciBcLW12c3hcZlIKKy5TcAorVGhlIHBhcnRpY3VsYXIgb3B0aW9ucyBzZXQgZm9yIGFueSBwYXJ0aWN1bGFyIFxzLTFDUFVcczAgdmFyaWVzIGJldHdlZW4KK2NvbXBpbGVyIHZlcnNpb25zLCBkZXBlbmRpbmcgb24gd2hhdCBzZXR0aW5nIHNlZW1zIHRvIHByb2R1Y2Ugb3B0aW1hbAorY29kZSBmb3IgdGhhdCBccy0xQ1BVXHMwOyBpdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IHJlZmxlY3QgdGhlIGFjdHVhbCBoYXJkd2FyZSdzCitjYXBhYmlsaXRpZXMuICBJZiB5b3Ugd2lzaCB0byBzZXQgYW4gaW5kaXZpZHVhbCBvcHRpb24gdG8gYSBwYXJ0aWN1bGFyCit2YWx1ZSwgeW91IG1heSBzcGVjaWZ5IGl0IGFmdGVyIHRoZSBcZkJcLW1jcHVcZlIgb3B0aW9uLCBsaWtlCitcJlxmQlwtbWNwdT05NzAgXC1tbm9cLWFsdGl2ZWNcZlIuCisuU3AKK09uIFxzLTFBSVhcczAsIHRoZSBcZkJcLW1hbHRpdmVjXGZSIGFuZCBcZkJcLW1wb3dlcnBjNjRcZlIgb3B0aW9ucyBhcmUKK25vdCBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IHRoZSBcZkJcLW1jcHVcZlIgb3B0aW9uIGF0IHByZXNlbnQgYmVjYXVzZQorXCZccy0xQUlYXHMwIGRvZXMgbm90IGhhdmUgZnVsbCBzdXBwb3J0IGZvciB0aGVzZSBvcHRpb25zLiAgWW91IG1heSBzdGlsbAorZW5hYmxlIG9yIGRpc2FibGUgdGhlbSBpbmRpdmlkdWFsbHkgaWYgeW91J3JlIHN1cmUgaXQnbGwgd29yayBpbiB5b3VyCitlbnZpcm9ubWVudC4KKy5JUCAiXGZCXC1tdHVuZT1cZlJcZkljcHVfdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tdHVuZT1jcHVfdHlwZSIKK1NldCB0aGUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvciBtYWNoaW5lIHR5cGUKK1wmXGZJY3B1X3R5cGVcZlIsIGJ1dCBkbyBub3Qgc2V0IHRoZSBhcmNoaXRlY3R1cmUgdHlwZSBvciByZWdpc3RlciB1c2FnZSwKK2FzIFxmQlwtbWNwdT1cZlJcZkljcHVfdHlwZVxmUiBkb2VzLiAgVGhlIHNhbWUKK3ZhbHVlcyBmb3IgXGZJY3B1X3R5cGVcZlIgYXJlIHVzZWQgZm9yIFxmQlwtbXR1bmVcZlIgYXMgZm9yCitcJlxmQlwtbWNwdVxmUi4gIElmIGJvdGggYXJlIHNwZWNpZmllZCwgdGhlIGNvZGUgZ2VuZXJhdGVkIHVzZXMgdGhlCithcmNoaXRlY3R1cmUgYW5kIHJlZ2lzdGVycyBzZXQgYnkgXGZCXC1tY3B1XGZSLCBidXQgdGhlCitzY2hlZHVsaW5nIHBhcmFtZXRlcnMgc2V0IGJ5IFxmQlwtbXR1bmVcZlIuCisuSVAgIlxmQlwtbWNtb2RlbD1zbWFsbFxmUiIgNAorLklYIEl0ZW0gIi1tY21vZGVsPXNtYWxsIgorR2VuZXJhdGUgUG93ZXJQQzY0IGNvZGUgZm9yIHRoZSBzbWFsbCBtb2RlbDogVGhlIFxzLTFUT0NcczAgaXMgbGltaXRlZCB0bworNjRrLgorLklQICJcZkJcLW1jbW9kZWw9bWVkaXVtXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9bWVkaXVtIgorR2VuZXJhdGUgUG93ZXJQQzY0IGNvZGUgZm9yIHRoZSBtZWRpdW0gbW9kZWw6IFRoZSBccy0xVE9DXHMwIGFuZCBvdGhlciBzdGF0aWMKK2RhdGEgbWF5IGJlIHVwIHRvIGEgdG90YWwgb2YgNEcgaW4gc2l6ZS4KKy5JUCAiXGZCXC1tY21vZGVsPWxhcmdlXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9bGFyZ2UiCitHZW5lcmF0ZSBQb3dlclBDNjQgY29kZSBmb3IgdGhlIGxhcmdlIG1vZGVsOiBUaGUgXHMtMVRPQ1xzMCBtYXkgYmUgdXAgdG8gNEcKK2luIHNpemUuICBPdGhlciBkYXRhIGFuZCBjb2RlIGlzIG9ubHkgbGltaXRlZCBieSB0aGUgNjRcLWJpdCBhZGRyZXNzCitzcGFjZS4KKy5JUCAiXGZCXC1tYWx0aXZlY1xmUiIgNAorLklYIEl0ZW0gIi1tYWx0aXZlYyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1hbHRpdmVjXGZSIiA0CisuSVggSXRlbSAiLW1uby1hbHRpdmVjIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSBBbHRpVmVjIGluc3RydWN0aW9ucywgYW5kIGFsc28KK2VuYWJsZSB0aGUgdXNlIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGF0IGFsbG93IG1vcmUgZGlyZWN0IGFjY2VzcyB0bwordGhlIEFsdGlWZWMgaW5zdHJ1Y3Rpb24gc2V0LiAgWW91IG1heSBhbHNvIG5lZWQgdG8gc2V0CitcJlxmQlwtbWFiaT1hbHRpdmVjXGZSIHRvIGFkanVzdCB0aGUgY3VycmVudCBccy0xQUJJXHMwIHdpdGggQWx0aVZlYyBccy0xQUJJXHMwCitlbmhhbmNlbWVudHMuCisuSVAgIlxmQlwtbXZyc2F2ZVxmUiIgNAorLklYIEl0ZW0gIi1tdnJzYXZlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXZyc2F2ZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tdnJzYXZlIgorLlBECitHZW5lcmF0ZSBccy0xVlJTQVZFXHMwIGluc3RydWN0aW9ucyB3aGVuIGdlbmVyYXRpbmcgQWx0aVZlYyBjb2RlLgorLklQICJcZkJcLW1nZW5cLWNlbGxcLW1pY3JvY29kZVxmUiIgNAorLklYIEl0ZW0gIi1tZ2VuLWNlbGwtbWljcm9jb2RlIgorR2VuZXJhdGUgQ2VsbCBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW13YXJuXC1jZWxsXC1taWNyb2NvZGVcZlIiIDQKKy5JWCBJdGVtICItbXdhcm4tY2VsbC1taWNyb2NvZGUiCitXYXJuIHdoZW4gYSBDZWxsIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBpcyBlbWl0dGVkLiAgQW4gZXhhbXBsZQorb2YgYSBDZWxsIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBpcyBhIHZhcmlhYmxlIHNoaWZ0LgorLklQICJcZkJcLW1zZWN1cmVcLXBsdFxmUiIgNAorLklYIEl0ZW0gIi1tc2VjdXJlLXBsdCIKK0dlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgXGZCbGRcZlIgYW5kIFxmQmxkLnNvXGZSCit0byBidWlsZCBleGVjdXRhYmxlcyBhbmQgc2hhcmVkCitsaWJyYXJpZXMgd2l0aCBub24tZXhlY3V0YWJsZSBcZihDV1wqKENgLnBsdFwqKEMnXGZSIGFuZCBcZihDV1wqKENgLmdvdFwqKEMnXGZSIHNlY3Rpb25zLgorVGhpcyBpcyBhIFBvd2VyUEMKKzMyXC1iaXQgXHMtMVNZU1ZcczAgXHMtMUFCSVxzMCBvcHRpb24uCisuSVAgIlxmQlwtbWJzc1wtcGx0XGZSIiA0CisuSVggSXRlbSAiLW1ic3MtcGx0IgorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgYSBccy0xQlNTXHMwIFxmKENXXCooQ2AucGx0XCooQydcZlIgc2VjdGlvbiB0aGF0IFxmQmxkLnNvXGZSCitmaWxscyBpbiwgYW5kCityZXF1aXJlcyBcZihDV1wqKENgLnBsdFwqKEMnXGZSIGFuZCBcZihDV1wqKENgLmdvdFwqKEMnXGZSCitzZWN0aW9ucyB0aGF0IGFyZSBib3RoIHdyaXRhYmxlIGFuZCBleGVjdXRhYmxlLgorVGhpcyBpcyBhIFBvd2VyUEMgMzJcLWJpdCBccy0xU1lTVlxzMCBccy0xQUJJXHMwIG9wdGlvbi4KKy5JUCAiXGZCXC1taXNlbFxmUiIgNAorLklYIEl0ZW0gIi1taXNlbCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1pc2VsXGZSIiA0CisuSVggSXRlbSAiLW1uby1pc2VsIgorLlBECitUaGlzIHN3aXRjaCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIFxzLTFJU0VMXHMwIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1taXNlbD1cZlJcZkl5ZXMvbm9cZlIiIDQKKy5JWCBJdGVtICItbWlzZWw9eWVzL25vIgorVGhpcyBzd2l0Y2ggaGFzIGJlZW4gZGVwcmVjYXRlZC4gIFVzZSBcZkJcLW1pc2VsXGZSIGFuZAorXCZcZkJcLW1ub1wtaXNlbFxmUiBpbnN0ZWFkLgorLklQICJcZkJcLW1zcGVcZlIiIDQKKy5JWCBJdGVtICItbXNwZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zcGVcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNwZSIKKy5QRAorVGhpcyBzd2l0Y2ggZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBccy0xU1BFXHMwIHNpbWQKK2luc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tcGFpcmVkXGZSIiA0CisuSVggSXRlbSAiLW1wYWlyZWQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcGFpcmVkXGZSIiA0CisuSVggSXRlbSAiLW1uby1wYWlyZWQiCisuUEQKK1RoaXMgc3dpdGNoIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgXHMtMVBBSVJFRFxzMCBzaW1kCitpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXNwZT1cZlJcZkl5ZXMvbm9cZlIiIDQKKy5JWCBJdGVtICItbXNwZT15ZXMvbm8iCitUaGlzIG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkLiAgVXNlIFxmQlwtbXNwZVxmUiBhbmQKK1wmXGZCXC1tbm9cLXNwZVxmUiBpbnN0ZWFkLgorLklQICJcZkJcLW12c3hcZlIiIDQKKy5JWCBJdGVtICItbXZzeCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC12c3hcZlIiIDQKKy5JWCBJdGVtICItbW5vLXZzeCIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdmVjdG9yL3NjYWxhciAoXHMtMVZTWFxzMCkKK2luc3RydWN0aW9ucywgYW5kIGFsc28gZW5hYmxlIHRoZSB1c2Ugb2YgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgYWxsb3cKK21vcmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgXHMtMVZTWFxzMCBpbnN0cnVjdGlvbiBzZXQuCisuSVAgIlxmQlwtbWZsb2F0XC1ncHJzPVxmUlxmSXllcy9zaW5nbGUvZG91YmxlL25vXGZSIiA0CisuSVggSXRlbSAiLW1mbG9hdC1ncHJzPXllcy9zaW5nbGUvZG91YmxlL25vIgorLlBEIDAKKy5JUCAiXGZCXC1tZmxvYXRcLWdwcnNcZlIiIDQKKy5JWCBJdGVtICItbWZsb2F0LWdwcnMiCisuUEQKK1RoaXMgc3dpdGNoIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgZmxvYXRpbmctcG9pbnQKK29wZXJhdGlvbnMgb24gdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdAorc3VwcG9ydCBpdC4KKy5TcAorVGhlIGFyZ3VtZW50IFxmSXllc1xmUiBvciBcZklzaW5nbGVcZlIgZW5hYmxlcyB0aGUgdXNlIG9mCitzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuCisuU3AKK1RoZSBhcmd1bWVudCBcZklkb3VibGVcZlIgZW5hYmxlcyB0aGUgdXNlIG9mIHNpbmdsZSBhbmQKK2RvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KKy5TcAorVGhlIGFyZ3VtZW50IFxmSW5vXGZSIGRpc2FibGVzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgb24gdGhlCitnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLgorLlNwCitUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkgb25seSBhdmFpbGFibGUgb24gdGhlIE1QQzg1NHguCisuSVAgIlxmQlwtbTMyXGZSIiA0CisuSVggSXRlbSAiLW0zMiIKKy5QRCAwCisuSVAgIlxmQlwtbTY0XGZSIiA0CisuSVggSXRlbSAiLW02NCIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgMzJcLWJpdCBvciA2NFwtYml0IGVudmlyb25tZW50cyBvZiBEYXJ3aW4gYW5kIFxzLTFTVlI0XHMwCit0YXJnZXRzIChpbmNsdWRpbmcgR05VL0xpbnV4KS4gIFRoZSAzMlwtYml0IGVudmlyb25tZW50IHNldHMgaW50LCBsb25nCithbmQgcG9pbnRlciB0byAzMiBiaXRzIGFuZCBnZW5lcmF0ZXMgY29kZSB0aGF0IHJ1bnMgb24gYW55IFBvd2VyUEMKK3ZhcmlhbnQuICBUaGUgNjRcLWJpdCBlbnZpcm9ubWVudCBzZXRzIGludCB0byAzMiBiaXRzIGFuZCBsb25nIGFuZAorcG9pbnRlciB0byA2NCBiaXRzLCBhbmQgZ2VuZXJhdGVzIGNvZGUgZm9yIFBvd2VyUEM2NCwgYXMgZm9yCitcJlxmQlwtbXBvd2VycGM2NFxmUi4KKy5JUCAiXGZCXC1tZnVsbFwtdG9jXGZSIiA0CisuSVggSXRlbSAiLW1mdWxsLXRvYyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mcFwtaW5cLXRvY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnAtaW4tdG9jIgorLklQICJcZkJcLW1ub1wtc3VtXC1pblwtdG9jXGZSIiA0CisuSVggSXRlbSAiLW1uby1zdW0taW4tdG9jIgorLklQICJcZkJcLW1taW5pbWFsXC10b2NcZlIiIDQKKy5JWCBJdGVtICItbW1pbmltYWwtdG9jIgorLlBECitNb2RpZnkgZ2VuZXJhdGlvbiBvZiB0aGUgXHMtMVRPQ1xzMCAoVGFibGUgT2YgQ29udGVudHMpLCB3aGljaCBpcyBjcmVhdGVkIGZvcgorZXZlcnkgZXhlY3V0YWJsZSBmaWxlLiAgVGhlIFxmQlwtbWZ1bGxcLXRvY1xmUiBvcHRpb24gaXMgc2VsZWN0ZWQgYnkKK2RlZmF1bHQuICBJbiB0aGF0IGNhc2UsIFxzLTFHQ0NcczAgYWxsb2NhdGVzIGF0IGxlYXN0IG9uZSBccy0xVE9DXHMwIGVudHJ5IGZvcgorZWFjaCB1bmlxdWUgbm9uLWF1dG9tYXRpYyB2YXJpYWJsZSByZWZlcmVuY2UgaW4geW91ciBwcm9ncmFtLiAgXHMtMUdDQ1xzMAorYWxzbyBwbGFjZXMgZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzIGluIHRoZSBccy0xVE9DXHMwLiAgSG93ZXZlciwgb25seQorMTYsMzg0IGVudHJpZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgXHMtMVRPQ1xzMC4KKy5TcAorSWYgeW91IHJlY2VpdmUgYSBsaW5rZXIgZXJyb3IgbWVzc2FnZSB0aGF0IHNheWluZyB5b3UgaGF2ZSBvdmVyZmxvd2VkCit0aGUgYXZhaWxhYmxlIFxzLTFUT0NcczAgc3BhY2UsIHlvdSBjYW4gcmVkdWNlIHRoZSBhbW91bnQgb2YgXHMtMVRPQ1xzMCBzcGFjZSB1c2VkCit3aXRoIHRoZSBcZkJcLW1ub1wtZnBcLWluXC10b2NcZlIgYW5kIFxmQlwtbW5vXC1zdW1cLWluXC10b2NcZlIgb3B0aW9ucy4KK1wmXGZCXC1tbm9cLWZwXC1pblwtdG9jXGZSIHByZXZlbnRzIFxzLTFHQ0NcczAgZnJvbSBwdXR0aW5nIGZsb2F0aW5nLXBvaW50Citjb25zdGFudHMgaW4gdGhlIFxzLTFUT0NcczAgYW5kIFxmQlwtbW5vXC1zdW1cLWluXC10b2NcZlIgZm9yY2VzIFxzLTFHQ0NcczAgdG8KK2dlbmVyYXRlIGNvZGUgdG8gY2FsY3VsYXRlIHRoZSBzdW0gb2YgYW4gYWRkcmVzcyBhbmQgYSBjb25zdGFudCBhdAorcnVuIHRpbWUgaW5zdGVhZCBvZiBwdXR0aW5nIHRoYXQgc3VtIGludG8gdGhlIFxzLTFUT0NcczAuICBZb3UgbWF5IHNwZWNpZnkgb25lCitvciBib3RoIG9mIHRoZXNlIG9wdGlvbnMuICBFYWNoIGNhdXNlcyBccy0xR0NDXHMwIHRvIHByb2R1Y2UgdmVyeSBzbGlnaHRseQorc2xvd2VyIGFuZCBsYXJnZXIgY29kZSBhdCB0aGUgZXhwZW5zZSBvZiBjb25zZXJ2aW5nIFxzLTFUT0NcczAgc3BhY2UuCisuU3AKK0lmIHlvdSBzdGlsbCBydW4gb3V0IG9mIHNwYWNlIGluIHRoZSBccy0xVE9DXHMwIGV2ZW4gd2hlbiB5b3Ugc3BlY2lmeSBib3RoIG9mCit0aGVzZSBvcHRpb25zLCBzcGVjaWZ5IFxmQlwtbW1pbmltYWxcLXRvY1xmUiBpbnN0ZWFkLiAgVGhpcyBvcHRpb24gY2F1c2VzCitcJlxzLTFHQ0NcczAgdG8gbWFrZSBvbmx5IG9uZSBccy0xVE9DXHMwIGVudHJ5IGZvciBldmVyeSBmaWxlLiAgV2hlbiB5b3Ugc3BlY2lmeSB0aGlzCitvcHRpb24sIFxzLTFHQ0NcczAgcHJvZHVjZXMgY29kZSB0aGF0IGlzIHNsb3dlciBhbmQgbGFyZ2VyIGJ1dCB3aGljaAordXNlcyBleHRyZW1lbHkgbGl0dGxlIFxzLTFUT0NcczAgc3BhY2UuICBZb3UgbWF5IHdpc2ggdG8gdXNlIHRoaXMgb3B0aW9uCitvbmx5IG9uIGZpbGVzIHRoYXQgY29udGFpbiBsZXNzIGZyZXF1ZW50bHktZXhlY3V0ZWQgY29kZS4KKy5JUCAiXGZCXC1tYWl4NjRcZlIiIDQKKy5JWCBJdGVtICItbWFpeDY0IgorLlBEIDAKKy5JUCAiXGZCXC1tYWl4MzJcZlIiIDQKKy5JWCBJdGVtICItbWFpeDMyIgorLlBECitFbmFibGUgNjRcLWJpdCBccy0xQUlYXHMwIFxzLTFBQklcczAgYW5kIGNhbGxpbmcgY29udmVudGlvbjogNjRcLWJpdCBwb2ludGVycywgNjRcLWJpdAorXCZcZihDV1wqKENgbG9uZ1wqKEMnXGZSIHR5cGUsIGFuZCB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIHRvIHN1cHBvcnQgdGhlbS4KK1NwZWNpZnlpbmcgXGZCXC1tYWl4NjRcZlIgaW1wbGllcyBcZkJcLW1wb3dlcnBjNjRcZlIsCit3aGlsZSBcZkJcLW1haXgzMlxmUiBkaXNhYmxlcyB0aGUgNjRcLWJpdCBccy0xQUJJXHMwIGFuZAoraW1wbGllcyBcZkJcLW1ub1wtcG93ZXJwYzY0XGZSLiAgXHMtMUdDQ1xzMCBkZWZhdWx0cyB0byBcZkJcLW1haXgzMlxmUi4KKy5JUCAiXGZCXC1teGxcLWNvbXBhdFxmUiIgNAorLklYIEl0ZW0gIi1teGwtY29tcGF0IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXhsXC1jb21wYXRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXhsLWNvbXBhdCIKKy5QRAorUHJvZHVjZSBjb2RlIHRoYXQgY29uZm9ybXMgbW9yZSBjbG9zZWx5IHRvIFxzLTFJQk1cczAgXHMtMVhMXHMwIGNvbXBpbGVyIHNlbWFudGljcword2hlbiB1c2luZyBBSVgtY29tcGF0aWJsZSBccy0xQUJJXHMwLiAgUGFzcyBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMgdG8KK3Byb3RvdHlwZWQgZnVuY3Rpb25zIGJleW9uZCB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhIChccy0xUlNBXHMwKSBvbiB0aGUgc3RhY2sKK2luIGFkZGl0aW9uIHRvIGFyZ3VtZW50IEZQUnMuICBEbyBub3QgYXNzdW1lIHRoYXQgbW9zdCBzaWduaWZpY2FudAorZG91YmxlIGluIDEyOFwtYml0IGxvbmcgZG91YmxlIHZhbHVlIGlzIHByb3Blcmx5IHJvdW5kZWQgd2hlbiBjb21wYXJpbmcKK3ZhbHVlcyBhbmQgY29udmVydGluZyB0byBkb3VibGUuICBVc2UgXHMtMVhMXHMwIHN5bWJvbCBuYW1lcyBmb3IgbG9uZyBkb3VibGUKK3N1cHBvcnQgcm91dGluZXMuCisuU3AKK1RoZSBccy0xQUlYXHMwIGNhbGxpbmcgY29udmVudGlvbiB3YXMgZXh0ZW5kZWQgYnV0IG5vdCBpbml0aWFsbHkgZG9jdW1lbnRlZCB0bworaGFuZGxlIGFuIG9ic2N1cmUgSyZSIEMgY2FzZSBvZiBjYWxsaW5nIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUKK2FkZHJlc3Mgb2YgaXRzIGFyZ3VtZW50cyB3aXRoIGZld2VyIGFyZ3VtZW50cyB0aGFuIGRlY2xhcmVkLiAgXHMtMUlCTVxzMCBccy0xWExcczAKK2NvbXBpbGVycyBhY2Nlc3MgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzIHRoYXQgZG8gbm90IGZpdCBpbiB0aGUKK1wmXHMtMVJTQVxzMCBmcm9tIHRoZSBzdGFjayB3aGVuIGEgc3Vicm91dGluZSBpcyBjb21waWxlZCB3aXRob3V0CitvcHRpbWl6YXRpb24uICBCZWNhdXNlIGFsd2F5cyBzdG9yaW5nIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cyBvbiB0aGUKK3N0YWNrIGlzIGluZWZmaWNpZW50IGFuZCByYXJlbHkgbmVlZGVkLCB0aGlzIG9wdGlvbiBpcyBub3QgZW5hYmxlZCBieQorZGVmYXVsdCBhbmQgb25seSBpcyBuZWNlc3Nhcnkgd2hlbiBjYWxsaW5nIHN1YnJvdXRpbmVzIGNvbXBpbGVkIGJ5IFxzLTFJQk1cczAKK1wmXHMtMVhMXHMwIGNvbXBpbGVycyB3aXRob3V0IG9wdGltaXphdGlvbi4KKy5JUCAiXGZCXC1tcGVcZlIiIDQKKy5JWCBJdGVtICItbXBlIgorU3VwcG9ydCBcZklccy0xSUJNXHMwIFxzLTFSUy82MDAwXHMwIFxzLTFTUFxzMFxmUiBcZklQYXJhbGxlbCBFbnZpcm9ubWVudFxmUiAoXHMtMVBFXHMwKS4gIExpbmsgYW4KK2FwcGxpY2F0aW9uIHdyaXR0ZW4gdG8gdXNlIG1lc3NhZ2UgcGFzc2luZyB3aXRoIHNwZWNpYWwgc3RhcnR1cCBjb2RlIHRvCitlbmFibGUgdGhlIGFwcGxpY2F0aW9uIHRvIHJ1bi4gIFRoZSBzeXN0ZW0gbXVzdCBoYXZlIFxzLTFQRVxzMCBpbnN0YWxsZWQgaW4gdGhlCitzdGFuZGFyZCBsb2NhdGlvbiAoXGZJL3Vzci9scHAvcHBlLnBvZS9cZlIpLCBvciB0aGUgXGZJc3BlY3NcZlIgZmlsZQorbXVzdCBiZSBvdmVycmlkZGVuIHdpdGggdGhlIFxmQlwtc3BlY3M9XGZSIG9wdGlvbiB0byBzcGVjaWZ5IHRoZQorYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGxvY2F0aW9uLiAgVGhlIFBhcmFsbGVsIEVudmlyb25tZW50IGRvZXMgbm90CitzdXBwb3J0IHRocmVhZHMsIHNvIHRoZSBcZkJcLW1wZVxmUiBvcHRpb24gYW5kIHRoZSBcZkJcLXB0aHJlYWRcZlIKK29wdGlvbiBhcmUgaW5jb21wYXRpYmxlLgorLklQICJcZkJcLW1hbGlnblwtbmF0dXJhbFxmUiIgNAorLklYIEl0ZW0gIi1tYWxpZ24tbmF0dXJhbCIKKy5QRCAwCisuSVAgIlxmQlwtbWFsaWduXC1wb3dlclxmUiIgNAorLklYIEl0ZW0gIi1tYWxpZ24tcG93ZXIiCisuUEQKK09uIFxzLTFBSVhcczAsIDMyXC1iaXQgRGFyd2luLCBhbmQgNjRcLWJpdCBQb3dlclBDIEdOVS9MaW51eCwgdGhlIG9wdGlvbgorXCZcZkJcLW1hbGlnblwtbmF0dXJhbFxmUiBvdmVycmlkZXMgdGhlIEFCSS1kZWZpbmVkIGFsaWdubWVudCBvZiBsYXJnZXIKK3R5cGVzLCBzdWNoIGFzIGZsb2F0aW5nLXBvaW50IGRvdWJsZXMsIG9uIHRoZWlyIG5hdHVyYWwgc2l6ZS1iYXNlZCBib3VuZGFyeS4KK1RoZSBvcHRpb24gXGZCXC1tYWxpZ25cLXBvd2VyXGZSIGluc3RydWN0cyBccy0xR0NDXHMwIHRvIGZvbGxvdyB0aGUgQUJJLXNwZWNpZmllZAorYWxpZ25tZW50IHJ1bGVzLiAgXHMtMUdDQ1xzMCBkZWZhdWx0cyB0byB0aGUgc3RhbmRhcmQgYWxpZ25tZW50IGRlZmluZWQgaW4gdGhlIFxzLTFBQklcczAuCisuU3AKK09uIDY0XC1iaXQgRGFyd2luLCBuYXR1cmFsIGFsaWdubWVudCBpcyB0aGUgZGVmYXVsdCwgYW5kIFxmQlwtbWFsaWduXC1wb3dlclxmUgoraXMgbm90IHN1cHBvcnRlZC4KKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCisuUEQgMAorLklQICJcZkJcLW1oYXJkXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1taGFyZC1mbG9hdCIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IGRvZXMgbm90IHVzZSAodXNlcykgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldC4KK1NvZnR3YXJlIGZsb2F0aW5nLXBvaW50IGVtdWxhdGlvbiBpcyBwcm92aWRlZCBpZiB5b3UgdXNlIHRoZQorXCZcZkJcLW1zb2Z0XC1mbG9hdFxmUiBvcHRpb24sIGFuZCBwYXNzIHRoZSBvcHRpb24gdG8gXHMtMUdDQ1xzMCB3aGVuIGxpbmtpbmcuCisuSVAgIlxmQlwtbXNpbmdsZVwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNpbmdsZS1mbG9hdCIKKy5QRCAwCisuSVAgIlxmQlwtbWRvdWJsZVwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbWRvdWJsZS1mbG9hdCIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3Igc2luZ2xlXC0gb3IgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorXCZcZkJcLW1kb3VibGVcLWZsb2F0XGZSIGltcGxpZXMgXGZCXC1tc2luZ2xlXC1mbG9hdFxmUi4KKy5JUCAiXGZCXC1tc2ltcGxlXC1mcHVcZlIiIDQKKy5JWCBJdGVtICItbXNpbXBsZS1mcHUiCitEbyBub3QgZ2VuZXJhdGUgXGYoQ1dcKihDYHNxcnRcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGRpdlwqKEMnXGZSIGluc3RydWN0aW9ucyBmb3IgaGFyZHdhcmUKK2Zsb2F0aW5nLXBvaW50IHVuaXQuCisuSVAgIlxmQlwtbWZwdT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1mcHU9bmFtZSIKK1NwZWNpZnkgdHlwZSBvZiBmbG9hdGluZy1wb2ludCB1bml0LiAgVmFsaWQgdmFsdWVzIGZvciBcZkluYW1lXGZSIGFyZQorXCZcZkJzcF9saXRlXGZSIChlcXVpdmFsZW50IHRvIFxmQlwtbXNpbmdsZVwtZmxvYXQgXC1tc2ltcGxlXC1mcHVcZlIpLAorXCZcZkJkcF9saXRlXGZSIChlcXVpdmFsZW50IHRvIFxmQlwtbWRvdWJsZVwtZmxvYXQgXC1tc2ltcGxlXC1mcHVcZlIpLAorXCZcZkJzcF9mdWxsXGZSIChlcXVpdmFsZW50IHRvIFxmQlwtbXNpbmdsZVwtZmxvYXRcZlIpLAorYW5kIFxmQmRwX2Z1bGxcZlIgKGVxdWl2YWxlbnQgdG8gXGZCXC1tZG91YmxlXC1mbG9hdFxmUikuCisuSVAgIlxmQlwtbXhpbGlueFwtZnB1XGZSIiA0CisuSVggSXRlbSAiLW14aWxpbngtZnB1IgorUGVyZm9ybSBvcHRpbWl6YXRpb25zIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgdW5pdCBvbiBYaWxpbnggXHMtMVBQQ1xzMCA0MDUvNDQwLgorLklQICJcZkJcLW1tdWx0aXBsZVxmUiIgNAorLklYIEl0ZW0gIi1tbXVsdGlwbGUiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbXVsdGlwbGVcZlIiIDQKKy5JWCBJdGVtICItbW5vLW11bHRpcGxlIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgbG9hZCBtdWx0aXBsZSB3b3JkCitpbnN0cnVjdGlvbnMgYW5kIHRoZSBzdG9yZSBtdWx0aXBsZSB3b3JkIGluc3RydWN0aW9ucy4gIFRoZXNlCitpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IG9uIFxzLTFQT1dFUlxzMCBzeXN0ZW1zLCBhbmQgbm90CitnZW5lcmF0ZWQgb24gUG93ZXJQQyBzeXN0ZW1zLiAgRG8gbm90IHVzZSBcZkJcLW1tdWx0aXBsZVxmUiBvbiBsaXR0bGUtZW5kaWFuCitQb3dlclBDIHN5c3RlbXMsIHNpbmNlIHRob3NlIGluc3RydWN0aW9ucyBkbyBub3Qgd29yayB3aGVuIHRoZQorcHJvY2Vzc29yIGlzIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4gIFRoZSBleGNlcHRpb25zIGFyZSBccy0xUFBDNzQwXHMwIGFuZAorXCZccy0xUFBDNzUwXHMwIHdoaWNoIHBlcm1pdCB0aGVzZSBpbnN0cnVjdGlvbnMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgorLklQICJcZkJcLW1zdHJpbmdcZlIiIDQKKy5JWCBJdGVtICItbXN0cmluZyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zdHJpbmdcZlIiIDQKKy5JWCBJdGVtICItbW5vLXN0cmluZyIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGxvYWQgc3RyaW5nIGluc3RydWN0aW9ucworYW5kIHRoZSBzdG9yZSBzdHJpbmcgd29yZCBpbnN0cnVjdGlvbnMgdG8gc2F2ZSBtdWx0aXBsZSByZWdpc3RlcnMgYW5kCitkbyBzbWFsbCBibG9jayBtb3Zlcy4gIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgb24KK1wmXHMtMVBPV0VSXHMwIHN5c3RlbXMsIGFuZCBub3QgZ2VuZXJhdGVkIG9uIFBvd2VyUEMgc3lzdGVtcy4gIERvIG5vdCB1c2UKK1wmXGZCXC1tc3RyaW5nXGZSIG9uIGxpdHRsZS1lbmRpYW4gUG93ZXJQQyBzeXN0ZW1zLCBzaW5jZSB0aG9zZQoraW5zdHJ1Y3Rpb25zIGRvIG5vdCB3b3JrIHdoZW4gdGhlIHByb2Nlc3NvciBpcyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuCitUaGUgZXhjZXB0aW9ucyBhcmUgXHMtMVBQQzc0MFxzMCBhbmQgXHMtMVBQQzc1MFxzMCB3aGljaCBwZXJtaXQgdGhlc2UgaW5zdHJ1Y3Rpb25zCitpbiBsaXR0bGUtZW5kaWFuIG1vZGUuCisuSVAgIlxmQlwtbXVwZGF0ZVxmUiIgNAorLklYIEl0ZW0gIi1tdXBkYXRlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXVwZGF0ZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tdXBkYXRlIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgbG9hZCBvciBzdG9yZSBpbnN0cnVjdGlvbnMKK3RoYXQgdXBkYXRlIHRoZSBiYXNlIHJlZ2lzdGVyIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWxjdWxhdGVkIG1lbW9yeQorbG9jYXRpb24uICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0LiAgSWYgeW91IHVzZQorXCZcZkJcLW1ub1wtdXBkYXRlXGZSLCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBiZXR3ZWVuIHRoZSB0aW1lIHRoYXQgdGhlCitzdGFjayBwb2ludGVyIGlzIHVwZGF0ZWQgYW5kIHRoZSBhZGRyZXNzIG9mIHRoZSBwcmV2aW91cyBmcmFtZSBpcworc3RvcmVkLCB3aGljaCBtZWFucyBjb2RlIHRoYXQgd2Fsa3MgdGhlIHN0YWNrIGZyYW1lIGFjcm9zcyBpbnRlcnJ1cHRzIG9yCitzaWduYWxzIG1heSBnZXQgY29ycnVwdGVkIGRhdGEuCisuSVAgIlxmQlwtbWF2b2lkXC1pbmRleGVkXC1hZGRyZXNzZXNcZlIiIDQKKy5JWCBJdGVtICItbWF2b2lkLWluZGV4ZWQtYWRkcmVzc2VzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWF2b2lkXC1pbmRleGVkXC1hZGRyZXNzZXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWF2b2lkLWluZGV4ZWQtYWRkcmVzc2VzIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdHJpZXMgdG8gYXZvaWQgKG5vdCBhdm9pZCkgdGhlIHVzZSBvZiBpbmRleGVkIGxvYWQKK29yIHN0b3JlIGluc3RydWN0aW9ucy4gVGhlc2UgaW5zdHJ1Y3Rpb25zIGNhbiBpbmN1ciBhIHBlcmZvcm1hbmNlCitwZW5hbHR5IG9uIFBvd2VyNiBwcm9jZXNzb3JzIGluIGNlcnRhaW4gc2l0dWF0aW9ucywgc3VjaCBhcyB3aGVuCitzdGVwcGluZyB0aHJvdWdoIGxhcmdlIGFycmF5cyB0aGF0IGNyb3NzIGEgMTZNIGJvdW5kYXJ5LiAgVGhpcyBvcHRpb24KK2lzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRhcmdldGluZyBQb3dlcjYgYW5kIGRpc2FibGVkIG90aGVyd2lzZS4KKy5JUCAiXGZCXC1tZnVzZWRcLW1hZGRcZlIiIDQKKy5JWCBJdGVtICItbWZ1c2VkLW1hZGQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZnVzZWRcLW1hZGRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZ1c2VkLW1hZGQiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBmbG9hdGluZy1wb2ludCBtdWx0aXBseSBhbmQKK2FjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLiAgVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgZGVmYXVsdAoraWYgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQgaXMgdXNlZC4gIFRoZSBtYWNoaW5lLWRlcGVuZGVudAorXCZcZkJcLW1mdXNlZFwtbWFkZFxmUiBvcHRpb24gaXMgbm93IG1hcHBlZCB0byB0aGUgbWFjaGluZS1pbmRlcGVuZGVudAorXCZcZkJcLWZmcFwtY29udHJhY3Q9ZmFzdFxmUiBvcHRpb24sIGFuZCBcZkJcLW1ub1wtZnVzZWRcLW1hZGRcZlIgaXMKK21hcHBlZCB0byBcZkJcLWZmcFwtY29udHJhY3Q9b2ZmXGZSLgorLklQICJcZkJcLW1tdWxod1xmUiIgNAorLklYIEl0ZW0gIi1tbXVsaHciCisuUEQgMAorLklQICJcZkJcLW1ub1wtbXVsaHdcZlIiIDQKKy5JWCBJdGVtICItbW5vLW11bGh3IgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgaGFsZi13b3JkIG11bHRpcGx5IGFuZAorbXVsdGlwbHktYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMgb24gdGhlIFxzLTFJQk1cczAgNDA1LCA0NDAsIDQ2NCBhbmQgNDc2IHByb2Nlc3NvcnMuCitUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IHdoZW4gdGFyZ2V0aW5nIHRob3NlCitwcm9jZXNzb3JzLgorLklQICJcZkJcLW1kbG16YlxmUiIgNAorLklYIEl0ZW0gIi1tZGxtemIiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZGxtemJcZlIiIDQKKy5JWCBJdGVtICItbW5vLWRsbXpiIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgc3RyaW5nLXNlYXJjaCBcZkJkbG16YlxmUgoraW5zdHJ1Y3Rpb24gb24gdGhlIFxzLTFJQk1cczAgNDA1LCA0NDAsIDQ2NCBhbmQgNDc2IHByb2Nlc3NvcnMuICBUaGlzIGluc3RydWN0aW9uIGlzCitnZW5lcmF0ZWQgYnkgZGVmYXVsdCB3aGVuIHRhcmdldGluZyB0aG9zZSBwcm9jZXNzb3JzLgorLklQICJcZkJcLW1ub1wtYml0XC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYml0LWFsaWduIgorLlBEIDAKKy5JUCAiXGZCXC1tYml0XC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tYml0LWFsaWduIgorLlBECitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgZG8gbm90IChkbykgZm9yY2Ugc3RydWN0dXJlcworYW5kIHVuaW9ucyB0aGF0IGNvbnRhaW4gYml0LWZpZWxkcyB0byBiZSBhbGlnbmVkIHRvIHRoZSBiYXNlIHR5cGUgb2YgdGhlCitiaXQtZmllbGQuCisuU3AKK0ZvciBleGFtcGxlLCBieSBkZWZhdWx0IGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgbm90aGluZyBidXQgOAorXCZcZihDV1wqKENgdW5zaWduZWRcKihDJ1xmUiBiaXQtZmllbGRzIG9mIGxlbmd0aCAxIGlzIGFsaWduZWQgdG8gYSA0XC1ieXRlCitib3VuZGFyeSBhbmQgaGFzIGEgc2l6ZSBvZiA0IGJ5dGVzLiAgQnkgdXNpbmcgXGZCXC1tbm9cLWJpdFwtYWxpZ25cZlIsCit0aGUgc3RydWN0dXJlIGlzIGFsaWduZWQgdG8gYSAxXC1ieXRlIGJvdW5kYXJ5IGFuZCBpcyAxIGJ5dGUgaW4KK3NpemUuCisuSVAgIlxmQlwtbW5vXC1zdHJpY3RcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1uby1zdHJpY3QtYWxpZ24iCisuUEQgMAorLklQICJcZkJcLW1zdHJpY3RcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1zdHJpY3QtYWxpZ24iCisuUEQKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBkbyBub3QgKGRvKSBhc3N1bWUgdGhhdAordW5hbGlnbmVkIG1lbW9yeSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uCisuSVAgIlxmQlwtbXJlbG9jYXRhYmxlXGZSIiA0CisuSVggSXRlbSAiLW1yZWxvY2F0YWJsZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWxvY2F0YWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVsb2NhdGFibGUiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgKGRvZXMgbm90IGFsbG93KSBhIHN0YXRpYyBleGVjdXRhYmxlIHRvIGJlCityZWxvY2F0ZWQgdG8gYSBkaWZmZXJlbnQgYWRkcmVzcyBhdCBydW4gdGltZS4gIEEgc2ltcGxlIGVtYmVkZGVkCitQb3dlclBDIHN5c3RlbSBsb2FkZXIgc2hvdWxkIHJlbG9jYXRlIHRoZSBlbnRpcmUgY29udGVudHMgb2YKK1wmXGYoQ1dcKihDYC5nb3QyXCooQydcZlIgYW5kIDRcLWJ5dGUgbG9jYXRpb25zIGxpc3RlZCBpbiB0aGUgXGYoQ1dcKihDYC5maXh1cFwqKEMnXGZSIHNlY3Rpb24sCithIHRhYmxlIG9mIDMyXC1iaXQgYWRkcmVzc2VzIGdlbmVyYXRlZCBieSB0aGlzIG9wdGlvbi4gIEZvciB0aGlzIHRvCit3b3JrLCBhbGwgb2JqZWN0cyBsaW5rZWQgdG9nZXRoZXIgbXVzdCBiZSBjb21waWxlZCB3aXRoCitcJlxmQlwtbXJlbG9jYXRhYmxlXGZSIG9yIFxmQlwtbXJlbG9jYXRhYmxlXC1saWJcZlIuCitcJlxmQlwtbXJlbG9jYXRhYmxlXGZSIGNvZGUgYWxpZ25zIHRoZSBzdGFjayB0byBhbiA4XC1ieXRlIGJvdW5kYXJ5LgorLklQICJcZkJcLW1yZWxvY2F0YWJsZVwtbGliXGZSIiA0CisuSVggSXRlbSAiLW1yZWxvY2F0YWJsZS1saWIiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcmVsb2NhdGFibGVcLWxpYlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVsb2NhdGFibGUtbGliIgorLlBECitMaWtlIFxmQlwtbXJlbG9jYXRhYmxlXGZSLCBcZkJcLW1yZWxvY2F0YWJsZVwtbGliXGZSIGdlbmVyYXRlcyBhCitcJlxmKENXXCooQ2AuZml4dXBcKihDJ1xmUiBzZWN0aW9uIHRvIGFsbG93IHN0YXRpYyBleGVjdXRhYmxlcyB0byBiZSByZWxvY2F0ZWQgYXQKK3J1biB0aW1lLCBidXQgXGZCXC1tcmVsb2NhdGFibGVcLWxpYlxmUiBkb2VzIG5vdCB1c2UgdGhlIHNtYWxsZXIgc3RhY2sKK2FsaWdubWVudCBvZiBcZkJcLW1yZWxvY2F0YWJsZVxmUi4gIE9iamVjdHMgY29tcGlsZWQgd2l0aAorXCZcZkJcLW1yZWxvY2F0YWJsZVwtbGliXGZSIG1heSBiZSBsaW5rZWQgd2l0aCBvYmplY3RzIGNvbXBpbGVkIHdpdGgKK2FueSBjb21iaW5hdGlvbiBvZiB0aGUgXGZCXC1tcmVsb2NhdGFibGVcZlIgb3B0aW9ucy4KKy5JUCAiXGZCXC1tbm9cLXRvY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tdG9jIgorLlBEIDAKKy5JUCAiXGZCXC1tdG9jXGZSIiA0CisuSVggSXRlbSAiLW10b2MiCisuUEQKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBkbyBub3QgKGRvKSBhc3N1bWUgdGhhdAorcmVnaXN0ZXIgMiBjb250YWlucyBhIHBvaW50ZXIgdG8gYSBnbG9iYWwgYXJlYSBwb2ludGluZyB0byB0aGUgYWRkcmVzc2VzCit1c2VkIGluIHRoZSBwcm9ncmFtLgorLklQICJcZkJcLW1saXR0bGVcZlIiIDQKKy5JWCBJdGVtICItbWxpdHRsZSIKKy5QRCAwCisuSVAgIlxmQlwtbWxpdHRsZVwtZW5kaWFuXGZSIiA0CisuSVggSXRlbSAiLW1saXR0bGUtZW5kaWFuIgorLlBECitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgY29tcGlsZSBjb2RlIGZvciB0aGUKK3Byb2Nlc3NvciBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuICBUaGUgXGZCXC1tbGl0dGxlXC1lbmRpYW5cZlIgb3B0aW9uIGlzCit0aGUgc2FtZSBhcyBcZkJcLW1saXR0bGVcZlIuCisuSVAgIlxmQlwtbWJpZ1xmUiIgNAorLklYIEl0ZW0gIi1tYmlnIgorLlBEIDAKKy5JUCAiXGZCXC1tYmlnXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWJpZy1lbmRpYW4iCisuUEQKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZQorcHJvY2Vzc29yIGluIGJpZy1lbmRpYW4gbW9kZS4gIFRoZSBcZkJcLW1iaWdcLWVuZGlhblxmUiBvcHRpb24gaXMKK3RoZSBzYW1lIGFzIFxmQlwtbWJpZ1xmUi4KKy5JUCAiXGZCXC1tZHluYW1pY1wtbm9cLXBpY1xmUiIgNAorLklYIEl0ZW0gIi1tZHluYW1pYy1uby1waWMiCitPbiBEYXJ3aW4gYW5kIE1hYyBccy0xT1NcczAgWCBzeXN0ZW1zLCBjb21waWxlIGNvZGUgc28gdGhhdCBpdCBpcyBub3QKK3JlbG9jYXRhYmxlLCBidXQgdGhhdCBpdHMgZXh0ZXJuYWwgcmVmZXJlbmNlcyBhcmUgcmVsb2NhdGFibGUuICBUaGUKK3Jlc3VsdGluZyBjb2RlIGlzIHN1aXRhYmxlIGZvciBhcHBsaWNhdGlvbnMsIGJ1dCBub3Qgc2hhcmVkCitsaWJyYXJpZXMuCisuSVAgIlxmQlwtbXNpbmdsZVwtcGljXC1iYXNlXGZSIiA0CisuSVggSXRlbSAiLW1zaW5nbGUtcGljLWJhc2UiCitUcmVhdCB0aGUgcmVnaXN0ZXIgdXNlZCBmb3IgXHMtMVBJQ1xzMCBhZGRyZXNzaW5nIGFzIHJlYWQtb25seSwgcmF0aGVyIHRoYW4KK2xvYWRpbmcgaXQgaW4gdGhlIHByb2xvZ3VlIGZvciBlYWNoIGZ1bmN0aW9uLiAgVGhlIHJ1bnRpbWUgc3lzdGVtIGlzCityZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoaXMgcmVnaXN0ZXIgd2l0aCBhbiBhcHByb3ByaWF0ZSB2YWx1ZQorYmVmb3JlIGV4ZWN1dGlvbiBiZWdpbnMuCisuSVAgIlxmQlwtbXByaW9yaXRpemVcLXJlc3RyaWN0ZWRcLWluc25zPVxmUlxmSXByaW9yaXR5XGZSIiA0CisuSVggSXRlbSAiLW1wcmlvcml0aXplLXJlc3RyaWN0ZWQtaW5zbnM9cHJpb3JpdHkiCitUaGlzIG9wdGlvbiBjb250cm9scyB0aGUgcHJpb3JpdHkgdGhhdCBpcyBhc3NpZ25lZCB0bworZGlzcGF0Y2gtc2xvdCByZXN0cmljdGVkIGluc3RydWN0aW9ucyBkdXJpbmcgdGhlIHNlY29uZCBzY2hlZHVsaW5nCitwYXNzLiAgVGhlIGFyZ3VtZW50IFxmSXByaW9yaXR5XGZSIHRha2VzIHRoZSB2YWx1ZSBcZkIwXGZSLCBcZkIxXGZSLAorb3IgXGZCMlxmUiB0byBhc3NpZ24gbm8sIGhpZ2hlc3QsIG9yIHNlY29uZC1oaWdoZXN0IChyZXNwZWN0aXZlbHkpIAorcHJpb3JpdHkgdG8gZGlzcGF0Y2gtc2xvdCByZXN0cmljdGVkCitpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXNjaGVkXC1jb3N0bHlcLWRlcD1cZlJcZklkZXBlbmRlbmNlX3R5cGVcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLWNvc3RseS1kZXA9ZGVwZW5kZW5jZV90eXBlIgorVGhpcyBvcHRpb24gY29udHJvbHMgd2hpY2ggZGVwZW5kZW5jZXMgYXJlIGNvbnNpZGVyZWQgY29zdGx5CitieSB0aGUgdGFyZ2V0IGR1cmluZyBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLiAgVGhlIGFyZ3VtZW50CitcJlxmSWRlcGVuZGVuY2VfdHlwZVxmUiB0YWtlcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisuUlMgNAorLklQICJcZkJub1xmUiIgNAorLklYIEl0ZW0gIm5vIgorTm8gZGVwZW5kZW5jZSBpcyBjb3N0bHkuCisuSVAgIlxmQmFsbFxmUiIgNAorLklYIEl0ZW0gImFsbCIKK0FsbCBkZXBlbmRlbmNlcyBhcmUgY29zdGx5LgorLklQICJcZkJ0cnVlX3N0b3JlX3RvX2xvYWRcZlIiIDQKKy5JWCBJdGVtICJ0cnVlX3N0b3JlX3RvX2xvYWQiCitBIHRydWUgZGVwZW5kZW5jZSBmcm9tIHN0b3JlIHRvIGxvYWQgaXMgY29zdGx5LgorLklQICJcZkJzdG9yZV90b19sb2FkXGZSIiA0CisuSVggSXRlbSAic3RvcmVfdG9fbG9hZCIKK0FueSBkZXBlbmRlbmNlIGZyb20gc3RvcmUgdG8gbG9hZCBpcyBjb3N0bHkuCisuSVAgIlxmSW51bWJlclxmUiIgNAorLklYIEl0ZW0gIm51bWJlciIKK0FueSBkZXBlbmRlbmNlIGZvciB3aGljaCB0aGUgbGF0ZW5jeSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gCitcJlxmSW51bWJlclxmUiBpcyBjb3N0bHkuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1taW5zZXJ0XC1zY2hlZFwtbm9wcz1cZlJcZklzY2hlbWVcZlIiIDQKKy5JWCBJdGVtICItbWluc2VydC1zY2hlZC1ub3BzPXNjaGVtZSIKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHdoaWNoIFxzLTFOT1BcczAgaW5zZXJ0aW9uIHNjaGVtZSBpcyB1c2VkIGR1cmluZwordGhlIHNlY29uZCBzY2hlZHVsaW5nIHBhc3MuICBUaGUgYXJndW1lbnQgXGZJc2NoZW1lXGZSIHRha2VzIG9uZSBvZiB0aGUKK2ZvbGxvd2luZyB2YWx1ZXM6CisuUlMgNAorLklQICJcZkJub1xmUiIgNAorLklYIEl0ZW0gIm5vIgorRG9uJ3QgaW5zZXJ0IE5PUHMuCisuSVAgIlxmQnBhZFxmUiIgNAorLklYIEl0ZW0gInBhZCIKK1BhZCB3aXRoIE5PUHMgYW55IGRpc3BhdGNoIGdyb3VwIHRoYXQgaGFzIHZhY2FudCBpc3N1ZSBzbG90cywKK2FjY29yZGluZyB0byB0aGUgc2NoZWR1bGVyJ3MgZ3JvdXBpbmcuCisuSVAgIlxmQnJlZ3JvdXBfZXhhY3RcZlIiIDQKKy5JWCBJdGVtICJyZWdyb3VwX2V4YWN0IgorSW5zZXJ0IE5PUHMgdG8gZm9yY2UgY29zdGx5IGRlcGVuZGVudCBpbnNucyBpbnRvCitzZXBhcmF0ZSBncm91cHMuICBJbnNlcnQgZXhhY3RseSBhcyBtYW55IE5PUHMgYXMgbmVlZGVkIHRvIGZvcmNlIGFuIGluc24KK3RvIGEgbmV3IGdyb3VwLCBhY2NvcmRpbmcgdG8gdGhlIGVzdGltYXRlZCBwcm9jZXNzb3IgZ3JvdXBpbmcuCisuSVAgIlxmSW51bWJlclxmUiIgNAorLklYIEl0ZW0gIm51bWJlciIKK0luc2VydCBOT1BzIHRvIGZvcmNlIGNvc3RseSBkZXBlbmRlbnQgaW5zbnMgaW50bworc2VwYXJhdGUgZ3JvdXBzLiAgSW5zZXJ0IFxmSW51bWJlclxmUiBOT1BzIHRvIGZvcmNlIGFuIGluc24gdG8gYSBuZXcgZ3JvdXAuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tY2FsbFwtc3lzdlxmUiIgNAorLklYIEl0ZW0gIi1tY2FsbC1zeXN2IgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSB1c2luZyBjYWxsaW5nCitjb252ZW50aW9ucyB0aGF0IGFkaGVyZSB0byB0aGUgTWFyY2ggMTk5NSBkcmFmdCBvZiB0aGUgU3lzdGVtIFYKK0FwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UsIFBvd2VyUEMgcHJvY2Vzc29yIHN1cHBsZW1lbnQuICBUaGlzIGlzIHRoZQorZGVmYXVsdCB1bmxlc3MgeW91IGNvbmZpZ3VyZWQgXHMtMUdDQ1xzMCB1c2luZyBcZkJwb3dlcnBjXC0qXC1lYWJpYWl4XGZSLgorLklQICJcZkJcLW1jYWxsXC1zeXN2XC1lYWJpXGZSIiA0CisuSVggSXRlbSAiLW1jYWxsLXN5c3YtZWFiaSIKKy5QRCAwCisuSVAgIlxmQlwtbWNhbGxcLWVhYmlcZlIiIDQKKy5JWCBJdGVtICItbWNhbGwtZWFiaSIKKy5QRAorU3BlY2lmeSBib3RoIFxmQlwtbWNhbGxcLXN5c3ZcZlIgYW5kIFxmQlwtbWVhYmlcZlIgb3B0aW9ucy4KKy5JUCAiXGZCXC1tY2FsbFwtc3lzdlwtbm9lYWJpXGZSIiA0CisuSVggSXRlbSAiLW1jYWxsLXN5c3Ytbm9lYWJpIgorU3BlY2lmeSBib3RoIFxmQlwtbWNhbGxcLXN5c3ZcZlIgYW5kIFxmQlwtbW5vXC1lYWJpXGZSIG9wdGlvbnMuCisuSVAgIlxmQlwtbWNhbGxcLWFpeGRlc2NcZlIiIDQKKy5JWCBJdGVtICItbWNhbGwtYWl4ZGVzYyIKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZSBccy0xQUlYXHMwCitvcGVyYXRpbmcgc3lzdGVtLgorLklQICJcZkJcLW1jYWxsXC1saW51eFxmUiIgNAorLklYIEl0ZW0gIi1tY2FsbC1saW51eCIKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZQorTGludXgtYmFzZWQgXHMtMUdOVVxzMCBzeXN0ZW0uCisuSVAgIlxmQlwtbWNhbGxcLWZyZWVic2RcZlIiIDQKKy5JWCBJdGVtICItbWNhbGwtZnJlZWJzZCIKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZQorRnJlZUJTRCBvcGVyYXRpbmcgc3lzdGVtLgorLklQICJcZkJcLW1jYWxsXC1uZXRic2RcZlIiIDQKKy5JWCBJdGVtICItbWNhbGwtbmV0YnNkIgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlCitOZXRCU0Qgb3BlcmF0aW5nIHN5c3RlbS4KKy5JUCAiXGZCXC1tY2FsbFwtb3BlbmJzZFxmUiIgNAorLklYIEl0ZW0gIi1tY2FsbC1vcGVuYnNkIgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlCitPcGVuQlNEIG9wZXJhdGluZyBzeXN0ZW0uCisuSVAgIlxmQlwtbWFpeFwtc3RydWN0XC1yZXR1cm5cZlIiIDQKKy5JWCBJdGVtICItbWFpeC1zdHJ1Y3QtcmV0dXJuIgorUmV0dXJuIGFsbCBzdHJ1Y3R1cmVzIGluIG1lbW9yeSAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBccy0xQUlYXHMwIFxzLTFBQklcczApLgorLklQICJcZkJcLW1zdnI0XC1zdHJ1Y3RcLXJldHVyblxmUiIgNAorLklYIEl0ZW0gIi1tc3ZyNC1zdHJ1Y3QtcmV0dXJuIgorUmV0dXJuIHN0cnVjdHVyZXMgc21hbGxlciB0aGFuIDggYnl0ZXMgaW4gcmVnaXN0ZXJzIChhcyBzcGVjaWZpZWQgYnkgdGhlCitcJlxzLTFTVlI0XHMwIFxzLTFBQklcczApLgorLklQICJcZkJcLW1hYmk9XGZSXGZJYWJpLXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1hYmktdHlwZSIKK0V4dGVuZCB0aGUgY3VycmVudCBccy0xQUJJXHMwIHdpdGggYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbiwgb3IgcmVtb3ZlIHN1Y2ggZXh0ZW5zaW9uLgorVmFsaWQgdmFsdWVzIGFyZSBcZklhbHRpdmVjXGZSLCBcZkluby1hbHRpdmVjXGZSLCBcZklzcGVcZlIsCitcJlxmSW5vLXNwZVxmUiwgXGZJaWJtbG9uZ2RvdWJsZVxmUiwgXGZJaWVlZWxvbmdkb3VibGVcZlIuCisuSVAgIlxmQlwtbWFiaT1zcGVcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1zcGUiCitFeHRlbmQgdGhlIGN1cnJlbnQgXHMtMUFCSVxzMCB3aXRoIFxzLTFTUEVcczAgXHMtMUFCSVxzMCBleHRlbnNpb25zLiAgVGhpcyBkb2VzIG5vdCBjaGFuZ2UKK3RoZSBkZWZhdWx0IFxzLTFBQklcczAsIGluc3RlYWQgaXQgYWRkcyB0aGUgXHMtMVNQRVxzMCBccy0xQUJJXHMwIGV4dGVuc2lvbnMgdG8gdGhlIGN1cnJlbnQKK1wmXHMtMUFCSVxzMC4KKy5JUCAiXGZCXC1tYWJpPW5vXC1zcGVcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1uby1zcGUiCitEaXNhYmxlIEJvb2stRSBccy0xU1BFXHMwIFxzLTFBQklcczAgZXh0ZW5zaW9ucyBmb3IgdGhlIGN1cnJlbnQgXHMtMUFCSVxzMC4KKy5JUCAiXGZCXC1tYWJpPWlibWxvbmdkb3VibGVcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1pYm1sb25nZG91YmxlIgorQ2hhbmdlIHRoZSBjdXJyZW50IFxzLTFBQklcczAgdG8gdXNlIFxzLTFJQk1cczAgZXh0ZW5kZWQtcHJlY2lzaW9uIGxvbmcgZG91YmxlLgorVGhpcyBpcyBhIFBvd2VyUEMgMzJcLWJpdCBccy0xU1lTVlxzMCBccy0xQUJJXHMwIG9wdGlvbi4KKy5JUCAiXGZCXC1tYWJpPWllZWVsb25nZG91YmxlXGZSIiA0CisuSVggSXRlbSAiLW1hYmk9aWVlZWxvbmdkb3VibGUiCitDaGFuZ2UgdGhlIGN1cnJlbnQgXHMtMUFCSVxzMCB0byB1c2UgXHMtMUlFRUVcczAgZXh0ZW5kZWQtcHJlY2lzaW9uIGxvbmcgZG91YmxlLgorVGhpcyBpcyBhIFBvd2VyUEMgMzJcLWJpdCBMaW51eCBccy0xQUJJXHMwIG9wdGlvbi4KKy5JUCAiXGZCXC1tcHJvdG90eXBlXGZSIiA0CisuSVggSXRlbSAiLW1wcm90b3R5cGUiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcHJvdG90eXBlXGZSIiA0CisuSVggSXRlbSAiLW1uby1wcm90b3R5cGUiCisuUEQKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBhc3N1bWUgdGhhdCBhbGwgY2FsbHMgdG8KK3ZhcmlhYmxlIGFyZ3VtZW50IGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgcHJvdG90eXBlZC4gIE90aGVyd2lzZSwgdGhlCitjb21waWxlciBtdXN0IGluc2VydCBhbiBpbnN0cnVjdGlvbiBiZWZvcmUgZXZlcnkgbm9uLXByb3RvdHlwZWQgY2FsbCB0bworc2V0IG9yIGNsZWFyIGJpdCA2IG9mIHRoZSBjb25kaXRpb24gY29kZSByZWdpc3RlciAoXGZJXHMtMUNSXHMwXGZSKSB0bworaW5kaWNhdGUgd2hldGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYXJlIHBhc3NlZCBpbiB0aGUgZmxvYXRpbmctcG9pbnQKK3JlZ2lzdGVycyBpbiBjYXNlIHRoZSBmdW5jdGlvbiB0YWtlcyB2YXJpYWJsZSBhcmd1bWVudHMuICBXaXRoCitcJlxmQlwtbXByb3RvdHlwZVxmUiwgb25seSBjYWxscyB0byBwcm90b3R5cGVkIHZhcmlhYmxlIGFyZ3VtZW50IGZ1bmN0aW9ucworc2V0IG9yIGNsZWFyIHRoZSBiaXQuCisuSVAgIlxmQlwtbXNpbVxmUiIgNAorLklYIEl0ZW0gIi1tc2ltIgorT24gZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBhc3N1bWUgdGhhdCB0aGUgc3RhcnR1cCBtb2R1bGUgaXMgY2FsbGVkCitcJlxmSXNpbVwtY3J0MC5vXGZSIGFuZCB0aGF0IHRoZSBzdGFuZGFyZCBDIGxpYnJhcmllcyBhcmUgXGZJbGlic2ltLmFcZlIgYW5kCitcJlxmSWxpYmMuYVxmUi4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIFxmQnBvd2VycGNcLSpcLWVhYmlzaW1cZlIKK2NvbmZpZ3VyYXRpb25zLgorLklQICJcZkJcLW1tdm1lXGZSIiA0CisuSVggSXRlbSAiLW1tdm1lIgorT24gZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBhc3N1bWUgdGhhdCB0aGUgc3RhcnR1cCBtb2R1bGUgaXMgY2FsbGVkCitcJlxmSWNydDAub1xmUiBhbmQgdGhlIHN0YW5kYXJkIEMgbGlicmFyaWVzIGFyZSBcZklsaWJtdm1lLmFcZlIgYW5kCitcJlxmSWxpYmMuYVxmUi4KKy5JUCAiXGZCXC1tYWRzXGZSIiA0CisuSVggSXRlbSAiLW1hZHMiCitPbiBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIGFzc3VtZSB0aGF0IHRoZSBzdGFydHVwIG1vZHVsZSBpcyBjYWxsZWQKK1wmXGZJY3J0MC5vXGZSIGFuZCB0aGUgc3RhbmRhcmQgQyBsaWJyYXJpZXMgYXJlIFxmSWxpYmFkcy5hXGZSIGFuZAorXCZcZklsaWJjLmFcZlIuCisuSVAgIlxmQlwtbXllbGxvd2tuaWZlXGZSIiA0CisuSVggSXRlbSAiLW15ZWxsb3drbmlmZSIKK09uIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcywgYXNzdW1lIHRoYXQgdGhlIHN0YXJ0dXAgbW9kdWxlIGlzIGNhbGxlZAorXCZcZkljcnQwLm9cZlIgYW5kIHRoZSBzdGFuZGFyZCBDIGxpYnJhcmllcyBhcmUgXGZJbGlieWsuYVxmUiBhbmQKK1wmXGZJbGliYy5hXGZSLgorLklQICJcZkJcLW12eHdvcmtzXGZSIiA0CisuSVggSXRlbSAiLW12eHdvcmtzIgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBzcGVjaWZ5IHRoYXQgeW91IGFyZQorY29tcGlsaW5nIGZvciBhIFZ4V29ya3Mgc3lzdGVtLgorLklQICJcZkJcLW1lbWJcZlIiIDQKKy5JWCBJdGVtICItbWVtYiIKK09uIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcywgc2V0IHRoZSBcZklccy0xUFBDX0VNQlxzMFxmUiBiaXQgaW4gdGhlIFxzLTFFTEZcczAgZmxhZ3MKK2hlYWRlciB0byBpbmRpY2F0ZSB0aGF0IFxmQmVhYmlcZlIgZXh0ZW5kZWQgcmVsb2NhdGlvbnMgYXJlIHVzZWQuCisuSVAgIlxmQlwtbWVhYmlcZlIiIDQKKy5JWCBJdGVtICItbWVhYmkiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZWFiaVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZWFiaSIKKy5QRAorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGRvIChkbyBub3QpIGFkaGVyZSB0byB0aGUKK0VtYmVkZGVkIEFwcGxpY2F0aW9ucyBCaW5hcnkgSW50ZXJmYWNlIChccy0xRUFCSVxzMCksIHdoaWNoIGlzIGEgc2V0IG9mCittb2RpZmljYXRpb25zIHRvIHRoZSBTeXN0ZW0gVi40IHNwZWNpZmljYXRpb25zLiAgU2VsZWN0aW5nIFxmQlwtbWVhYmlcZlIKK21lYW5zIHRoYXQgdGhlIHN0YWNrIGlzIGFsaWduZWQgdG8gYW4gOFwtYnl0ZSBib3VuZGFyeSwgYSBmdW5jdGlvbgorXCZcZihDV1wqKENgX1x8X2VhYmlcKihDJ1xmUiBpcyBjYWxsZWQgZnJvbSBcZihDV1wqKENgbWFpblwqKEMnXGZSIHRvIHNldCB1cCB0aGUgXHMtMUVBQklcczAKK2Vudmlyb25tZW50LCBhbmQgdGhlIFxmQlwtbXNkYXRhXGZSIG9wdGlvbiBjYW4gdXNlIGJvdGggXGYoQ1dcKihDYHIyXCooQydcZlIgYW5kCitcJlxmKENXXCooQ2ByMTNcKihDJ1xmUiB0byBwb2ludCB0byB0d28gc2VwYXJhdGUgc21hbGwgZGF0YSBhcmVhcy4gIFNlbGVjdGluZworXCZcZkJcLW1ub1wtZWFiaVxmUiBtZWFucyB0aGF0IHRoZSBzdGFjayBpcyBhbGlnbmVkIHRvIGEgMTZcLWJ5dGUgYm91bmRhcnksCitubyBccy0xRUFCSVxzMCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBcZihDV1wqKENgbWFpblwqKEMnXGZSLCBhbmQgdGhlCitcJlxmQlwtbXNkYXRhXGZSIG9wdGlvbiBvbmx5IHVzZXMgXGYoQ1dcKihDYHIxM1wqKEMnXGZSIHRvIHBvaW50IHRvIGEgc2luZ2xlCitzbWFsbCBkYXRhIGFyZWEuICBUaGUgXGZCXC1tZWFiaVxmUiBvcHRpb24gaXMgb24gYnkgZGVmYXVsdCBpZiB5b3UKK2NvbmZpZ3VyZWQgXHMtMUdDQ1xzMCB1c2luZyBvbmUgb2YgdGhlIFxmQnBvd2VycGMqXC0qXC1lYWJpKlxmUiBvcHRpb25zLgorLklQICJcZkJcLW1zZGF0YT1lYWJpXGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YT1lYWJpIgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBwdXQgc21hbGwgaW5pdGlhbGl6ZWQKK1wmXGYoQ1dcKihDYGNvbnN0XCooQydcZlIgZ2xvYmFsIGFuZCBzdGF0aWMgZGF0YSBpbiB0aGUgXGZCLnNkYXRhMlxmUiBzZWN0aW9uLCB3aGljaAoraXMgcG9pbnRlZCB0byBieSByZWdpc3RlciBcZihDV1wqKENgcjJcKihDJ1xmUi4gIFB1dCBzbWFsbCBpbml0aWFsaXplZAorbm9uXC1cZihDV1wqKENgY29uc3RcKihDJ1xmUiBnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSBcZkIuc2RhdGFcZlIgc2VjdGlvbiwKK3doaWNoIGlzIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIgXGYoQ1dcKihDYHIxM1wqKEMnXGZSLiAgUHV0IHNtYWxsIHVuaW5pdGlhbGl6ZWQKK2dsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlIFxmQi5zYnNzXGZSIHNlY3Rpb24sIHdoaWNoIGlzIGFkamFjZW50IHRvCit0aGUgXGZCLnNkYXRhXGZSIHNlY3Rpb24uICBUaGUgXGZCXC1tc2RhdGE9ZWFiaVxmUiBvcHRpb24gaXMKK2luY29tcGF0aWJsZSB3aXRoIHRoZSBcZkJcLW1yZWxvY2F0YWJsZVxmUiBvcHRpb24uICBUaGUKK1wmXGZCXC1tc2RhdGE9ZWFiaVxmUiBvcHRpb24gYWxzbyBzZXRzIHRoZSBcZkJcLW1lbWJcZlIgb3B0aW9uLgorLklQICJcZkJcLW1zZGF0YT1zeXN2XGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YT1zeXN2IgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBwdXQgc21hbGwgZ2xvYmFsIGFuZCBzdGF0aWMKK2RhdGEgaW4gdGhlIFxmQi5zZGF0YVxmUiBzZWN0aW9uLCB3aGljaCBpcyBwb2ludGVkIHRvIGJ5IHJlZ2lzdGVyCitcJlxmKENXXCooQ2ByMTNcKihDJ1xmUi4gIFB1dCBzbWFsbCB1bmluaXRpYWxpemVkIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlCitcJlxmQi5zYnNzXGZSIHNlY3Rpb24sIHdoaWNoIGlzIGFkamFjZW50IHRvIHRoZSBcZkIuc2RhdGFcZlIgc2VjdGlvbi4KK1RoZSBcZkJcLW1zZGF0YT1zeXN2XGZSIG9wdGlvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUKK1wmXGZCXC1tcmVsb2NhdGFibGVcZlIgb3B0aW9uLgorLklQICJcZkJcLW1zZGF0YT1kZWZhdWx0XGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YT1kZWZhdWx0IgorLlBEIDAKKy5JUCAiXGZCXC1tc2RhdGFcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhIgorLlBECitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIGlmIFxmQlwtbWVhYmlcZlIgaXMgdXNlZCwKK2NvbXBpbGUgY29kZSB0aGUgc2FtZSBhcyBcZkJcLW1zZGF0YT1lYWJpXGZSLCBvdGhlcndpc2UgY29tcGlsZSBjb2RlIHRoZQorc2FtZSBhcyBcZkJcLW1zZGF0YT1zeXN2XGZSLgorLklQICJcZkJcLW1zZGF0YT1kYXRhXGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YT1kYXRhIgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBwdXQgc21hbGwgZ2xvYmFsCitkYXRhIGluIHRoZSBcZkIuc2RhdGFcZlIgc2VjdGlvbi4gIFB1dCBzbWFsbCB1bmluaXRpYWxpemVkIGdsb2JhbAorZGF0YSBpbiB0aGUgXGZCLnNic3NcZlIgc2VjdGlvbi4gIERvIG5vdCB1c2UgcmVnaXN0ZXIgXGYoQ1dcKihDYHIxM1wqKEMnXGZSCit0byBhZGRyZXNzIHNtYWxsIGRhdGEgaG93ZXZlci4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgdW5sZXNzCitvdGhlciBcZkJcLW1zZGF0YVxmUiBvcHRpb25zIGFyZSB1c2VkLgorLklQICJcZkJcLW1zZGF0YT1ub25lXGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YT1ub25lIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNkYXRhXGZSIiA0CisuSVggSXRlbSAiLW1uby1zZGF0YSIKKy5QRAorT24gZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBwdXQgYWxsIGluaXRpYWxpemVkIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEKK2luIHRoZSBcZkIuZGF0YVxmUiBzZWN0aW9uLCBhbmQgYWxsIHVuaW5pdGlhbGl6ZWQgZGF0YSBpbiB0aGUKK1wmXGZCLmJzc1xmUiBzZWN0aW9uLgorLklQICJcZkJcLW1ibG9ja1wtbW92ZVwtaW5saW5lXC1saW1pdD1cZlJcZkludW1cZlIiIDQKKy5JWCBJdGVtICItbWJsb2NrLW1vdmUtaW5saW5lLWxpbWl0PW51bSIKK0lubGluZSBhbGwgYmxvY2sgbW92ZXMgKHN1Y2ggYXMgY2FsbHMgdG8gXGYoQ1dcKihDYG1lbWNweVwqKEMnXGZSIG9yIHN0cnVjdHVyZQorY29waWVzKSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gXGZJbnVtXGZSIGJ5dGVzLiAgVGhlIG1pbmltdW0gdmFsdWUgZm9yCitcJlxmSW51bVxmUiBpcyAzMiBieXRlcyBvbiAzMlwtYml0IHRhcmdldHMgYW5kIDY0IGJ5dGVzIG9uIDY0XC1iaXQKK3RhcmdldHMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0YXJnZXQtc3BlY2lmaWMuCisuSVAgIlxmQlwtR1xmUiBcZkludW1cZlIiIDQKKy5JWCBJdGVtICItRyBudW0iCitPbiBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBnbG9iYWwgYW5kIHN0YXRpYyBpdGVtcyBsZXNzIHRoYW4gb3IKK2VxdWFsIHRvIFxmSW51bVxmUiBieXRlcyBpbnRvIHRoZSBzbWFsbCBkYXRhIG9yIFxzLTFCU1NcczAgc2VjdGlvbnMgaW5zdGVhZCBvZgordGhlIG5vcm1hbCBkYXRhIG9yIFxzLTFCU1NcczAgc2VjdGlvbi4gIEJ5IGRlZmF1bHQsIFxmSW51bVxmUiBpcyA4LiAgVGhlCitcJlxmQlwtR1xmUiBcZkludW1cZlIgc3dpdGNoIGlzIGFsc28gcGFzc2VkIHRvIHRoZSBsaW5rZXIuCitBbGwgbW9kdWxlcyBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCB0aGUgc2FtZSBcZkJcLUdcZlIgXGZJbnVtXGZSIHZhbHVlLgorLklQICJcZkJcLW1yZWduYW1lc1xmUiIgNAorLklYIEl0ZW0gIi1tcmVnbmFtZXMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcmVnbmFtZXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXJlZ25hbWVzIgorLlBECitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgZG8gKGRvIG5vdCkgZW1pdCByZWdpc3RlcgorbmFtZXMgaW4gdGhlIGFzc2VtYmx5IGxhbmd1YWdlIG91dHB1dCB1c2luZyBzeW1ib2xpYyBmb3Jtcy4KKy5JUCAiXGZCXC1tbG9uZ2NhbGxcZlIiIDQKKy5JWCBJdGVtICItbWxvbmdjYWxsIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxvbmdjYWxsXGZSIiA0CisuSVggSXRlbSAiLW1uby1sb25nY2FsbCIKKy5QRAorQnkgZGVmYXVsdCBhc3N1bWUgdGhhdCBhbGwgY2FsbHMgYXJlIGZhciBhd2F5IHNvIHRoYXQgYSBsb25nZXIgYW5kIG1vcmUKK2V4cGVuc2l2ZSBjYWxsaW5nIHNlcXVlbmNlIGlzIHJlcXVpcmVkLiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgY2FsbHMKK2ZhcnRoZXIgdGhhbiAzMiBtZWdhYnl0ZXMgKDMzLDU1NCw0MzIgYnl0ZXMpIGZyb20gdGhlIGN1cnJlbnQgbG9jYXRpb24uCitBIHNob3J0IGNhbGwgaXMgZ2VuZXJhdGVkIGlmIHRoZSBjb21waWxlciBrbm93cwordGhlIGNhbGwgY2Fubm90IGJlIHRoYXQgZmFyIGF3YXkuICBUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gYnkKK3RoZSBcZihDV1wqKENgc2hvcnRjYWxsXCooQydcZlIgZnVuY3Rpb24gYXR0cmlidXRlLCBvciBieSBcZihDV1wqKENgI3ByYWdtYQorbG9uZ2NhbGwoMClcKihDJ1xmUi4KKy5TcAorU29tZSBsaW5rZXJzIGFyZSBjYXBhYmxlIG9mIGRldGVjdGluZyBvdXQtb2YtcmFuZ2UgY2FsbHMgYW5kIGdlbmVyYXRpbmcKK2dsdWUgY29kZSBvbiB0aGUgZmx5LiAgT24gdGhlc2Ugc3lzdGVtcywgbG9uZyBjYWxscyBhcmUgdW5uZWNlc3NhcnkgYW5kCitnZW5lcmF0ZSBzbG93ZXIgY29kZS4gIEFzIG9mIHRoaXMgd3JpdGluZywgdGhlIFxzLTFBSVhcczAgbGlua2VyIGNhbiBkbyB0aGlzLAorYXMgY2FuIHRoZSBccy0xR05VXHMwIGxpbmtlciBmb3IgUG93ZXJQQy82NC4gIEl0IGlzIHBsYW5uZWQgdG8gYWRkIHRoaXMgZmVhdHVyZQordG8gdGhlIFxzLTFHTlVcczAgbGlua2VyIGZvciAzMlwtYml0IFBvd2VyUEMgc3lzdGVtcyBhcyB3ZWxsLgorLlNwCitPbiBEYXJ3aW4vUFBDIHN5c3RlbXMsIFxmKENXXCooQ2AjcHJhZ21hIGxvbmdjYWxsXCooQydcZlIgZ2VuZXJhdGVzIFxmKENXXCooQ2BqYnNyCitjYWxsZWUsIEw0MlwqKEMnXGZSLCBwbHVzIGEgXGZJYnJhbmNoIGlzbGFuZFxmUiAoZ2x1ZSBjb2RlKS4gIFRoZSB0d28gdGFyZ2V0CithZGRyZXNzZXMgcmVwcmVzZW50IHRoZSBjYWxsZWUgYW5kIHRoZSBicmFuY2ggaXNsYW5kLiAgVGhlCitEYXJ3aW4vUFBDIGxpbmtlciBwcmVmZXJzIHRoZSBmaXJzdCBhZGRyZXNzIGFuZCBnZW5lcmF0ZXMgYSBcZihDV1wqKENgYmwKK2NhbGxlZVwqKEMnXGZSIGlmIHRoZSBccy0xUFBDXHMwIFxmKENXXCooQ2BibFwqKEMnXGZSIGluc3RydWN0aW9uIHJlYWNoZXMgdGhlIGNhbGxlZSBkaXJlY3RseTsKK290aGVyd2lzZSwgdGhlIGxpbmtlciBnZW5lcmF0ZXMgXGYoQ1dcKihDYGJsIEw0MlwqKEMnXGZSIHRvIGNhbGwgdGhlIGJyYW5jaAoraXNsYW5kLiAgVGhlIGJyYW5jaCBpc2xhbmQgaXMgYXBwZW5kZWQgdG8gdGhlIGJvZHkgb2YgdGhlCitjYWxsaW5nIGZ1bmN0aW9uOyBpdCBjb21wdXRlcyB0aGUgZnVsbCAzMlwtYml0IGFkZHJlc3Mgb2YgdGhlIGNhbGxlZQorYW5kIGp1bXBzIHRvIGl0LgorLlNwCitPbiBNYWNoLU8gKERhcndpbikgc3lzdGVtcywgdGhpcyBvcHRpb24gZGlyZWN0cyB0aGUgY29tcGlsZXIgZW1pdCB0bwordGhlIGdsdWUgZm9yIGV2ZXJ5IGRpcmVjdCBjYWxsLCBhbmQgdGhlIERhcndpbiBsaW5rZXIgZGVjaWRlcyB3aGV0aGVyCit0byB1c2Ugb3IgZGlzY2FyZCBpdC4KKy5TcAorSW4gdGhlIGZ1dHVyZSwgXHMtMUdDQ1xzMCBtYXkgaWdub3JlIGFsbCBsb25nY2FsbCBzcGVjaWZpY2F0aW9ucword2hlbiB0aGUgbGlua2VyIGlzIGtub3duIHRvIGdlbmVyYXRlIGdsdWUuCisuSVAgIlxmQlwtbXRsc1wtbWFya2Vyc1xmUiIgNAorLklYIEl0ZW0gIi1tdGxzLW1hcmtlcnMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdGxzXC1tYXJrZXJzXGZSIiA0CisuSVggSXRlbSAiLW1uby10bHMtbWFya2VycyIKKy5QRAorTWFyayAoZG8gbm90IG1hcmspIGNhbGxzIHRvIFxmKENXXCooQ2BfXHxfdGxzX2dldF9hZGRyXCooQydcZlIgd2l0aCBhIHJlbG9jYXRpb24KK3NwZWNpZnlpbmcgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50LiAgVGhlIHJlbG9jYXRpb24gYWxsb3dzIHRoZSBsaW5rZXIgdG8KK3JlbGlhYmx5IGFzc29jaWF0ZSBmdW5jdGlvbiBjYWxsIHdpdGggYXJndW1lbnQgc2V0dXAgaW5zdHJ1Y3Rpb25zIGZvcgorXCZccy0xVExTXHMwIG9wdGltaXphdGlvbiwgd2hpY2ggaW4gdHVybiBhbGxvd3MgXHMtMUdDQ1xzMCB0byBiZXR0ZXIgc2NoZWR1bGUgdGhlCitzZXF1ZW5jZS4KKy5JUCAiXGZCXC1wdGhyZWFkXGZSIiA0CisuSVggSXRlbSAiLXB0aHJlYWQiCitBZGRzIHN1cHBvcnQgZm9yIG11bHRpdGhyZWFkaW5nIHdpdGggdGhlIFxmSXB0aHJlYWRzXGZSIGxpYnJhcnkuCitUaGlzIG9wdGlvbiBzZXRzIGZsYWdzIGZvciBib3RoIHRoZSBwcmVwcm9jZXNzb3IgYW5kIGxpbmtlci4KKy5JUCAiXGZCXC1tcmVjaXBcZlIiIDQKKy5JWCBJdGVtICItbXJlY2lwIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXJlY2lwXGZSIiA0CisuSVggSXRlbSAiLW1uby1yZWNpcCIKKy5QRAorVGhpcyBvcHRpb24gZW5hYmxlcyB1c2Ugb2YgdGhlIHJlY2lwcm9jYWwgZXN0aW1hdGUgYW5kCityZWNpcHJvY2FsIHNxdWFyZSByb290IGVzdGltYXRlIGluc3RydWN0aW9ucyB3aXRoIGFkZGl0aW9uYWwKK05ld3Rvbi1SYXBoc29uIHN0ZXBzIHRvIGluY3JlYXNlIHByZWNpc2lvbiBpbnN0ZWFkIG9mIGRvaW5nIGEgZGl2aWRlIG9yCitzcXVhcmUgcm9vdCBhbmQgZGl2aWRlIGZvciBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMuICBZb3Ugc2hvdWxkIHVzZQordGhlIFxmQlwtZmZhc3RcLW1hdGhcZlIgb3B0aW9uIHdoZW4gdXNpbmcgXGZCXC1tcmVjaXBcZlIgKG9yIGF0CitsZWFzdCBcZkJcLWZ1bnNhZmVcLW1hdGhcLW9wdGltaXphdGlvbnNcZlIsCitcJlxmQlwtZmluaXRlXC1tYXRoXC1vbmx5XGZSLCBcZkJcLWZyZWNpcHJvY2FsXC1tYXRoXGZSIGFuZAorXCZcZkJcLWZub1wtdHJhcHBpbmdcLW1hdGhcZlIpLiAgTm90ZSB0aGF0IHdoaWxlIHRoZSB0aHJvdWdocHV0IG9mIHRoZQorc2VxdWVuY2UgaXMgZ2VuZXJhbGx5IGhpZ2hlciB0aGFuIHRoZSB0aHJvdWdocHV0IG9mIHRoZSBub24tcmVjaXByb2NhbAoraW5zdHJ1Y3Rpb24sIHRoZSBwcmVjaXNpb24gb2YgdGhlIHNlcXVlbmNlIGNhbiBiZSBkZWNyZWFzZWQgYnkgdXAgdG8gMgordWxwIChpLmUuIHRoZSBpbnZlcnNlIG9mIDEuMCBlcXVhbHMgMC45OTk5OTk5NCkgZm9yIHJlY2lwcm9jYWwgc3F1YXJlCityb290cy4KKy5JUCAiXGZCXC1tcmVjaXA9XGZSXGZJb3B0XGZSIiA0CisuSVggSXRlbSAiLW1yZWNpcD1vcHQiCitUaGlzIG9wdGlvbiBjb250cm9scyB3aGljaCByZWNpcHJvY2FsIGVzdGltYXRlIGluc3RydWN0aW9ucworbWF5IGJlIHVzZWQuICBcZklvcHRcZlIgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcHRpb25zLCB3aGljaCBtYXkKK2JlIHByZWNlZGVkIGJ5IGEgXGYoQ1dcKihDYCFcKihDJ1xmUiB0byBpbnZlcnQgdGhlIG9wdGlvbjoKK1wmXGYoQ1dcKihDYGFsbFwqKEMnXGZSOiBlbmFibGUgYWxsIGVzdGltYXRlIGluc3RydWN0aW9ucywKK1wmXGYoQ1dcKihDYGRlZmF1bHRcKihDJ1xmUjogZW5hYmxlIHRoZSBkZWZhdWx0IGluc3RydWN0aW9ucywgZXF1aXZhbGVudCB0byBcZkJcLW1yZWNpcFxmUiwKK1wmXGYoQ1dcKihDYG5vbmVcKihDJ1xmUjogZGlzYWJsZSBhbGwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zLCBlcXVpdmFsZW50IHRvIFxmQlwtbW5vXC1yZWNpcFxmUjsKK1wmXGYoQ1dcKihDYGRpdlwqKEMnXGZSOiBlbmFibGUgdGhlIHJlY2lwcm9jYWwgYXBwcm94aW1hdGlvbiBpbnN0cnVjdGlvbnMgZm9yIGJvdGggc2luZ2xlIGFuZCBkb3VibGUgcHJlY2lzaW9uOworXCZcZihDV1wqKENgZGl2ZlwqKEMnXGZSOiBlbmFibGUgdGhlIHNpbmdsZS1wcmVjaXNpb24gcmVjaXByb2NhbCBhcHByb3hpbWF0aW9uIGluc3RydWN0aW9uczsKK1wmXGYoQ1dcKihDYGRpdmRcKihDJ1xmUjogZW5hYmxlIHRoZSBkb3VibGUtcHJlY2lzaW9uIHJlY2lwcm9jYWwgYXBwcm94aW1hdGlvbiBpbnN0cnVjdGlvbnM7CitcJlxmKENXXCooQ2Byc3FydFwqKEMnXGZSOiBlbmFibGUgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYXBwcm94aW1hdGlvbiBpbnN0cnVjdGlvbnMgZm9yIGJvdGggc2luZ2xlIGFuZCBkb3VibGUgcHJlY2lzaW9uOworXCZcZihDV1wqKENgcnNxcnRmXCooQydcZlI6IGVuYWJsZSB0aGUgc2luZ2xlLXByZWNpc2lvbiByZWNpcHJvY2FsIHNxdWFyZSByb290IGFwcHJveGltYXRpb24gaW5zdHJ1Y3Rpb25zOworXCZcZihDV1wqKENgcnNxcnRkXCooQydcZlI6IGVuYWJsZSB0aGUgZG91YmxlLXByZWNpc2lvbiByZWNpcHJvY2FsIHNxdWFyZSByb290IGFwcHJveGltYXRpb24gaW5zdHJ1Y3Rpb25zOworLlNwCitTbywgZm9yIGV4YW1wbGUsIFxmQlwtbXJlY2lwPWFsbCwhcnNxcnRkXGZSIGVuYWJsZXMKK2FsbCBvZiB0aGUgcmVjaXByb2NhbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMsIGV4Y2VwdCBmb3IgdGhlCitcJlxmKENXXCooQ2BGUlNRUlRFXCooQydcZlIsIFxmKENXXCooQ2BYU1JTUVJURURQXCooQydcZlIsIGFuZCBcZihDV1wqKENgWFZSU1FSVEVEUFwqKEMnXGZSIGluc3RydWN0aW9ucword2hpY2ggaGFuZGxlIHRoZSBkb3VibGUtcHJlY2lzaW9uIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgY2FsY3VsYXRpb25zLgorLklQICJcZkJcLW1yZWNpcFwtcHJlY2lzaW9uXGZSIiA0CisuSVggSXRlbSAiLW1yZWNpcC1wcmVjaXNpb24iCisuUEQgMAorLklQICJcZkJcLW1ub1wtcmVjaXBcLXByZWNpc2lvblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVjaXAtcHJlY2lzaW9uIgorLlBECitBc3N1bWUgKGRvIG5vdCBhc3N1bWUpIHRoYXQgdGhlIHJlY2lwcm9jYWwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zCitwcm92aWRlIGhpZ2hlci1wcmVjaXNpb24gZXN0aW1hdGVzIHRoYW4gaXMgbWFuZGF0ZWQgYnkgdGhlIFBvd2VyUEMKK1wmXHMtMUFCSVxzMC4gIFNlbGVjdGluZyBcZkJcLW1jcHU9cG93ZXI2XGZSLCBcZkJcLW1jcHU9cG93ZXI3XGZSIG9yCitcJlxmQlwtbWNwdT1wb3dlcjhcZlIgYXV0b21hdGljYWxseSBzZWxlY3RzIFxmQlwtbXJlY2lwXC1wcmVjaXNpb25cZlIuCitUaGUgZG91YmxlLXByZWNpc2lvbiBzcXVhcmUgcm9vdCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMgYXJlIG5vdCBnZW5lcmF0ZWQgYnkKK2RlZmF1bHQgb24gbG93LXByZWNpc2lvbiBtYWNoaW5lcywgc2luY2UgdGhleSBkbyBub3QgcHJvdmlkZSBhbgorZXN0aW1hdGUgdGhhdCBjb252ZXJnZXMgYWZ0ZXIgdGhyZWUgc3RlcHMuCisuSVAgIlxmQlwtbXZlY2xpYmFiaT1cZlJcZkl0eXBlXGZSIiA0CisuSVggSXRlbSAiLW12ZWNsaWJhYmk9dHlwZSIKK1NwZWNpZmllcyB0aGUgXHMtMUFCSVxzMCB0eXBlIHRvIHVzZSBmb3IgdmVjdG9yaXppbmcgaW50cmluc2ljcyB1c2luZyBhbgorZXh0ZXJuYWwgbGlicmFyeS4gIFRoZSBvbmx5IHR5cGUgc3VwcG9ydGVkIGF0IHByZXNlbnQgaXMgXGYoQ1dcKihDYG1hc3NcKihDJ1xmUiwKK3doaWNoIHNwZWNpZmllcyB0byB1c2UgXHMtMUlCTVxzMCdzIE1hdGhlbWF0aWNhbCBBY2NlbGVyYXRpb24gU3Vic3lzdGVtCisoXHMtMU1BU1NcczApIGxpYnJhcmllcyBmb3IgdmVjdG9yaXppbmcgaW50cmluc2ljcyB1c2luZyBleHRlcm5hbCBsaWJyYXJpZXMuCitcJlxzLTFHQ0NcczAgY3VycmVudGx5IGVtaXRzIGNhbGxzIHRvIFxmKENXXCooQ2BhY29zZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGFjb3NmNFwqKEMnXGZSLAorXCZcZihDV1wqKENgYWNvc2hkMlwqKEMnXGZSLCBcZihDV1wqKENgYWNvc2hmNFwqKEMnXGZSLCBcZihDV1wqKENgYXNpbmQyXCooQydcZlIsIFxmKENXXCooQ2Bhc2luZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGFzaW5oZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGFzaW5oZjRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0YW4yZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0YW4yZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGF0YW5kMlwqKEMnXGZSLCBcZihDV1wqKENgYXRhbmY0XCooQydcZlIsIFxmKENXXCooQ2BhdGFuaGQyXCooQydcZlIsIFxmKENXXCooQ2BhdGFuaGY0XCooQydcZlIsCitcJlxmKENXXCooQ2BjYnJ0ZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGNicnRmNFwqKEMnXGZSLCBcZihDV1wqKENgY29zZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGNvc2Y0XCooQydcZlIsCitcJlxmKENXXCooQ2Bjb3NoZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGNvc2hmNFwqKEMnXGZSLCBcZihDV1wqKENgZXJmY2QyXCooQydcZlIsIFxmKENXXCooQ2BlcmZjZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGVyZmQyXCooQydcZlIsIFxmKENXXCooQ2BlcmZmNFwqKEMnXGZSLCBcZihDV1wqKENgZXhwMmQyXCooQydcZlIsIFxmKENXXCooQ2BleHAyZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGV4cGQyXCooQydcZlIsIFxmKENXXCooQ2BleHBmNFwqKEMnXGZSLCBcZihDV1wqKENgZXhwbTFkMlwqKEMnXGZSLCBcZihDV1wqKENgZXhwbTFmNFwqKEMnXGZSLAorXCZcZihDV1wqKENgaHlwb3RkMlwqKEMnXGZSLCBcZihDV1wqKENgaHlwb3RmNFwqKEMnXGZSLCBcZihDV1wqKENgbGdhbW1hZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGxnYW1tYWY0XCooQydcZlIsCitcJlxmKENXXCooQ2Bsb2cxMGQyXCooQydcZlIsIFxmKENXXCooQ2Bsb2cxMGY0XCooQydcZlIsIFxmKENXXCooQ2Bsb2cxcGQyXCooQydcZlIsIFxmKENXXCooQ2Bsb2cxcGY0XCooQydcZlIsCitcJlxmKENXXCooQ2Bsb2cyZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGxvZzJmNFwqKEMnXGZSLCBcZihDV1wqKENgbG9nZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGxvZ2Y0XCooQydcZlIsCitcJlxmKENXXCooQ2Bwb3dkMlwqKEMnXGZSLCBcZihDV1wqKENgcG93ZjRcKihDJ1xmUiwgXGYoQ1dcKihDYHNpbmQyXCooQydcZlIsIFxmKENXXCooQ2BzaW5mNFwqKEMnXGZSLCBcZihDV1wqKENgc2luaGQyXCooQydcZlIsCitcJlxmKENXXCooQ2BzaW5oZjRcKihDJ1xmUiwgXGYoQ1dcKihDYHNxcnRkMlwqKEMnXGZSLCBcZihDV1wqKENgc3FydGY0XCooQydcZlIsIFxmKENXXCooQ2B0YW5kMlwqKEMnXGZSLAorXCZcZihDV1wqKENgdGFuZjRcKihDJ1xmUiwgXGYoQ1dcKihDYHRhbmhkMlwqKEMnXGZSLCBhbmQgXGYoQ1dcKihDYHRhbmhmNFwqKEMnXGZSIHdoZW4gZ2VuZXJhdGluZyBjb2RlCitmb3IgcG93ZXI3LiAgQm90aCBcZkJcLWZ0cmVlXC12ZWN0b3JpemVcZlIgYW5kCitcJlxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiBtdXN0IGFsc28gYmUgZW5hYmxlZC4gIFRoZSBccy0xTUFTU1xzMAorbGlicmFyaWVzIG11c3QgYmUgc3BlY2lmaWVkIGF0IGxpbmsgdGltZS4KKy5JUCAiXGZCXC1tZnJpelxmUiIgNAorLklYIEl0ZW0gIi1tZnJpeiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mcml6XGZSIiA0CisuSVggSXRlbSAiLW1uby1mcml6IgorLlBECitHZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSB0aGUgXGYoQ1dcKihDYGZyaXpcKihDJ1xmUiBpbnN0cnVjdGlvbiB3aGVuIHRoZQorXCZcZkJcLWZ1bnNhZmVcLW1hdGhcLW9wdGltaXphdGlvbnNcZlIgb3B0aW9uIGlzIHVzZWQgdG8gb3B0aW1pemUKK3JvdW5kaW5nIG9mIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB0byA2NFwtYml0IGludGVnZXIgYW5kIGJhY2sgdG8gZmxvYXRpbmcKK3BvaW50LiAgVGhlIFxmKENXXCooQ2Bmcml6XCooQydcZlIgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGlmCit0aGUgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gYW4gaW50ZWdlci4KKy5JUCAiXGZCXC1tcG9pbnRlcnNcLXRvXC1uZXN0ZWRcLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1tcG9pbnRlcnMtdG8tbmVzdGVkLWZ1bmN0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1wb2ludGVyc1wtdG9cLW5lc3RlZFwtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLW1uby1wb2ludGVycy10by1uZXN0ZWQtZnVuY3Rpb25zIgorLlBECitHZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSBjb2RlIHRvIGxvYWQgdXAgdGhlIHN0YXRpYyBjaGFpbiByZWdpc3RlcgorKFxmSXIxMVxmUikgd2hlbiBjYWxsaW5nIHRocm91Z2ggYSBwb2ludGVyIG9uIFxzLTFBSVhcczAgYW5kIDY0XC1iaXQgTGludXgKK3N5c3RlbXMgd2hlcmUgYSBmdW5jdGlvbiBwb2ludGVyIHBvaW50cyB0byBhIDNcLXdvcmQgZGVzY3JpcHRvciBnaXZpbmcKK3RoZSBmdW5jdGlvbiBhZGRyZXNzLCBccy0xVE9DXHMwIHZhbHVlIHRvIGJlIGxvYWRlZCBpbiByZWdpc3RlciBcZklyMlxmUiwgYW5kCitzdGF0aWMgY2hhaW4gdmFsdWUgdG8gYmUgbG9hZGVkIGluIHJlZ2lzdGVyIFxmSXIxMVxmUi4gIFRoZQorXCZcZkJcLW1wb2ludGVyc1wtdG9cLW5lc3RlZFwtZnVuY3Rpb25zXGZSIGlzIG9uIGJ5IGRlZmF1bHQuICBZb3UgY2Fubm90CitjYWxsIHRocm91Z2ggcG9pbnRlcnMgdG8gbmVzdGVkIGZ1bmN0aW9ucyBvciBwb2ludGVycwordG8gZnVuY3Rpb25zIGNvbXBpbGVkIGluIG90aGVyIGxhbmd1YWdlcyB0aGF0IHVzZSB0aGUgc3RhdGljIGNoYWluIGlmCit5b3UgdXNlIHRoZSBcZkJcLW1ub1wtcG9pbnRlcnNcLXRvXC1uZXN0ZWRcLWZ1bmN0aW9uc1xmUi4KKy5JUCAiXGZCXC1tc2F2ZVwtdG9jXC1pbmRpcmVjdFxmUiIgNAorLklYIEl0ZW0gIi1tc2F2ZS10b2MtaW5kaXJlY3QiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc2F2ZVwtdG9jXC1pbmRpcmVjdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2F2ZS10b2MtaW5kaXJlY3QiCisuUEQKK0dlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIGNvZGUgdG8gc2F2ZSB0aGUgXHMtMVRPQ1xzMCB2YWx1ZSBpbiB0aGUgcmVzZXJ2ZWQKK3N0YWNrIGxvY2F0aW9uIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSBpZiB0aGUgZnVuY3Rpb24gY2FsbHMgdGhyb3VnaAorYSBwb2ludGVyIG9uIFxzLTFBSVhcczAgYW5kIDY0XC1iaXQgTGludXggc3lzdGVtcy4gIElmIHRoZSBccy0xVE9DXHMwIHZhbHVlIGlzIG5vdAorc2F2ZWQgaW4gdGhlIHByb2xvZ3VlLCBpdCBpcyBzYXZlZCBqdXN0IGJlZm9yZSB0aGUgY2FsbCB0aHJvdWdoIHRoZQorcG9pbnRlci4gIFRoZSBcZkJcLW1ub1wtc2F2ZVwtdG9jXC1pbmRpcmVjdFxmUiBvcHRpb24gaXMgdGhlIGRlZmF1bHQuCisuUFAKK1xmSVxzLTFSWFxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiUlggT3B0aW9ucyIKKy5QUAorVGhlc2UgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIFxzLTFSWFxzMCB0YXJnZXRzOgorLklQICJcZkJcLW02NGJpdFwtZG91Ymxlc1xmUiIgNAorLklYIEl0ZW0gIi1tNjRiaXQtZG91YmxlcyIKKy5QRCAwCisuSVAgIlxmQlwtbTMyYml0XC1kb3VibGVzXGZSIiA0CisuSVggSXRlbSAiLW0zMmJpdC1kb3VibGVzIgorLlBECitNYWtlIHRoZSBcZihDV1wqKENgZG91YmxlXCooQydcZlIgZGF0YSB0eXBlIGJlIDY0IGJpdHMgKFxmQlwtbTY0Yml0XC1kb3VibGVzXGZSKQorb3IgMzIgYml0cyAoXGZCXC1tMzJiaXRcLWRvdWJsZXNcZlIpIGluIHNpemUuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLW0zMmJpdFwtZG91Ymxlc1xmUi4gIFxmSU5vdGVcZlIgXHMtMVJYXHMwIGZsb2F0aW5nLXBvaW50IGhhcmR3YXJlIG9ubHkKK3dvcmtzIG9uIDMyXC1iaXQgdmFsdWVzLCB3aGljaCBpcyB3aHkgdGhlIGRlZmF1bHQgaXMKK1wmXGZCXC1tMzJiaXRcLWRvdWJsZXNcZlIuCisuSVAgIlxmQlwtZnB1XGZSIiA0CisuSVggSXRlbSAiLWZwdSIKKy5QRCAwCisuSVAgIlxmQlwtbm9mcHVcZlIiIDQKKy5JWCBJdGVtICItbm9mcHUiCisuUEQKK0VuYWJsZXMgKFxmQlwtZnB1XGZSKSBvciBkaXNhYmxlcyAoXGZCXC1ub2ZwdVxmUikgdGhlIHVzZSBvZiBccy0xUlhcczAKK2Zsb2F0aW5nLXBvaW50IGhhcmR3YXJlLiAgVGhlIGRlZmF1bHQgaXMgZW5hYmxlZCBmb3IgdGhlIFxmSVxzLTFSWDYwMFxzMFxmUgorc2VyaWVzIGFuZCBkaXNhYmxlZCBmb3IgdGhlIFxmSVxzLTFSWDIwMFxzMFxmUiBzZXJpZXMuCisuU3AKK0Zsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBhcmUgb25seSBnZW5lcmF0ZWQgZm9yIDMyXC1iaXQgZmxvYXRpbmctcG9pbnQgCit2YWx1ZXMsIGhvd2V2ZXIsIHNvIHRoZSBccy0xRlBVXHMwIGhhcmR3YXJlIGlzIG5vdCB1c2VkIGZvciBkb3VibGVzIGlmIHRoZQorXCZcZkJcLW02NGJpdFwtZG91Ymxlc1xmUiBvcHRpb24gaXMgdXNlZC4KKy5TcAorXCZcZklOb3RlXGZSIElmIHRoZSBcZkJcLWZwdVxmUiBvcHRpb24gaXMgZW5hYmxlZCB0aGVuCitcJlxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiBpcyBhbHNvIGVuYWJsZWQgYXV0b21hdGljYWxseS4KK1RoaXMgaXMgYmVjYXVzZSB0aGUgXHMtMVJYXHMwIFxzLTFGUFVcczAgaW5zdHJ1Y3Rpb25zIGFyZSB0aGVtc2VsdmVzIHVuc2FmZS4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1uYW1lIgorU2VsZWN0cyB0aGUgdHlwZSBvZiBccy0xUlhcczAgXHMtMUNQVVxzMCB0byBiZSB0YXJnZXRlZC4gIEN1cnJlbnRseSB0aHJlZSB0eXBlcyBhcmUKK3N1cHBvcnRlZCwgdGhlIGdlbmVyaWMgXGZJXHMtMVJYNjAwXHMwXGZSIGFuZCBcZklccy0xUlgyMDBcczBcZlIgc2VyaWVzIGhhcmR3YXJlIGFuZAordGhlIHNwZWNpZmljIFxmSVxzLTFSWDYxMFxzMFxmUiBccy0xQ1BVXHMwLiAgVGhlIGRlZmF1bHQgaXMgXGZJXHMtMVJYNjAwXHMwXGZSLgorLlNwCitUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gXGZJXHMtMVJYNjAwXHMwXGZSIGFuZCBcZklccy0xUlg2MTBcczBcZlIgaXMgdGhhdCB0aGUKK1wmXGZJXHMtMVJYNjEwXHMwXGZSIGRvZXMgbm90IHN1cHBvcnQgdGhlIFxmKENXXCooQ2BNVlRJUExcKihDJ1xmUiBpbnN0cnVjdGlvbi4KKy5TcAorVGhlIFxmSVxzLTFSWDIwMFxzMFxmUiBzZXJpZXMgZG9lcyBub3QgaGF2ZSBhIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IHVuaXQKK2FuZCBzbyBcZkJcLW5vZnB1XGZSIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRoaXMgdHlwZSBpcworc2VsZWN0ZWQuCisuSVAgIlxmQlwtbWJpZ1wtZW5kaWFuXC1kYXRhXGZSIiA0CisuSVggSXRlbSAiLW1iaWctZW5kaWFuLWRhdGEiCisuUEQgMAorLklQICJcZkJcLW1saXR0bGVcLWVuZGlhblwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbGl0dGxlLWVuZGlhbi1kYXRhIgorLlBECitTdG9yZSBkYXRhIChidXQgbm90IGNvZGUpIGluIHRoZSBiaWctZW5kaWFuIGZvcm1hdC4gIFRoZSBkZWZhdWx0IGlzCitcJlxmQlwtbWxpdHRsZVwtZW5kaWFuXC1kYXRhXGZSLCBpLmUuIHRvIHN0b3JlIGRhdGEgaW4gdGhlIGxpdHRsZS1lbmRpYW4KK2Zvcm1hdC4KKy5JUCAiXGZCXC1tc21hbGxcLWRhdGFcLWxpbWl0PVxmUlxmSU5cZlIiIDQKKy5JWCBJdGVtICItbXNtYWxsLWRhdGEtbGltaXQ9TiIKK1NwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIGdsb2JhbCBhbmQgc3RhdGljIHZhcmlhYmxlcword2hpY2ggY2FuIGJlIHBsYWNlZCBpbnRvIHRoZSBzbWFsbCBkYXRhIGFyZWEuICBVc2luZyB0aGUgc21hbGwgZGF0YQorYXJlYSBjYW4gbGVhZCB0byBzbWFsbGVyIGFuZCBmYXN0ZXIgY29kZSwgYnV0IHRoZSBzaXplIG9mIGFyZWEgaXMKK2xpbWl0ZWQgYW5kIGl0IGlzIHVwIHRvIHRoZSBwcm9ncmFtbWVyIHRvIGVuc3VyZSB0aGF0IHRoZSBhcmVhIGRvZXMKK25vdCBvdmVyZmxvdy4gIEFsc28gd2hlbiB0aGUgc21hbGwgZGF0YSBhcmVhIGlzIHVzZWQgb25lIG9mIHRoZSBccy0xUlhcczAncworcmVnaXN0ZXJzICh1c3VhbGx5IFxmKENXXCooQ2ByMTNcKihDJ1xmUikgaXMgcmVzZXJ2ZWQgZm9yIHVzZSBwb2ludGluZyB0byB0aGlzCithcmVhLCBzbyBpdCBpcyBubyBsb25nZXIgYXZhaWxhYmxlIGZvciB1c2UgYnkgdGhlIGNvbXBpbGVyLiAgVGhpcworY291bGQgcmVzdWx0IGluIHNsb3dlciBhbmQvb3IgbGFyZ2VyIGNvZGUgaWYgdmFyaWFibGVzIGFyZSBwdXNoZWQgb250bwordGhlIHN0YWNrIGluc3RlYWQgb2YgYmVpbmcgaGVsZCBpbiB0aGlzIHJlZ2lzdGVyLgorLlNwCitOb3RlLCBjb21tb24gdmFyaWFibGVzICh2YXJpYWJsZXMgdGhhdCBoYXZlIG5vdCBiZWVuIGluaXRpYWxpemVkKSBhbmQKK2NvbnN0YW50cyBhcmUgbm90IHBsYWNlZCBpbnRvIHRoZSBzbWFsbCBkYXRhIGFyZWEgYXMgdGhleSBhcmUgYXNzaWduZWQKK3RvIG90aGVyIHNlY3Rpb25zIGluIHRoZSBvdXRwdXQgZXhlY3V0YWJsZS4KKy5TcAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgemVybywgd2hpY2ggZGlzYWJsZXMgdGhpcyBmZWF0dXJlLiAgTm90ZSwgdGhpcworZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggaGlnaGVyIG9wdGltaXphdGlvbiBsZXZlbHMKKyhcZkJcLU8yXGZSIGV0YykgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsbHkgZGV0cmltZW50YWwgZWZmZWN0cyBvZgorcmVzZXJ2aW5nIGEgcmVnaXN0ZXIuICBJdCBpcyB1cCB0byB0aGUgcHJvZ3JhbW1lciB0byBleHBlcmltZW50IGFuZAorZGlzY292ZXIgd2hldGhlciB0aGlzIGZlYXR1cmUgaXMgb2YgYmVuZWZpdCB0byB0aGVpciBwcm9ncmFtLiAgU2VlIHRoZQorZGVzY3JpcHRpb24gb2YgdGhlIFxmQlwtbXBpZFxmUiBvcHRpb24gZm9yIGEgZGVzY3JpcHRpb24gb2YgaG93IHRoZQorYWN0dWFsIHJlZ2lzdGVyIHRvIGhvbGQgdGhlIHNtYWxsIGRhdGEgYXJlYSBwb2ludGVyIGlzIGNob3Nlbi4KKy5JUCAiXGZCXC1tc2ltXGZSIiA0CisuSVggSXRlbSAiLW1zaW0iCisuUEQgMAorLklQICJcZkJcLW1ub1wtc2ltXGZSIiA0CisuSVggSXRlbSAiLW1uby1zaW0iCisuUEQKK1VzZSB0aGUgc2ltdWxhdG9yIHJ1bnRpbWUuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIGxpYmdsb3NzCitib2FyZC1zcGVjaWZpYyBydW50aW1lLgorLklQICJcZkJcLW1hczEwMFwtc3ludGF4XGZSIiA0CisuSVggSXRlbSAiLW1hczEwMC1zeW50YXgiCisuUEQgMAorLklQICJcZkJcLW1ub1wtYXMxMDBcLXN5bnRheFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYXMxMDAtc3ludGF4IgorLlBECitXaGVuIGdlbmVyYXRpbmcgYXNzZW1ibGVyIG91dHB1dCB1c2UgYSBzeW50YXggdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKK1JlbmVzYXMncyBccy0xQVMxMDBcczAgYXNzZW1ibGVyLiAgVGhpcyBzeW50YXggY2FuIGFsc28gYmUgaGFuZGxlZCBieSB0aGUgXHMtMUdBU1xzMAorYXNzZW1ibGVyLCBidXQgaXQgaGFzIHNvbWUgcmVzdHJpY3Rpb25zIHNvIGl0IGlzIG5vdCBnZW5lcmF0ZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbWF4XC1jb25zdGFudFwtc2l6ZT1cZlJcZklOXGZSIiA0CisuSVggSXRlbSAiLW1tYXgtY29uc3RhbnQtc2l6ZT1OIgorU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUsIGluIGJ5dGVzLCBvZiBhIGNvbnN0YW50IHRoYXQgY2FuIGJlIHVzZWQgYXMKK2FuIG9wZXJhbmQgaW4gYSBccy0xUlhcczAgaW5zdHJ1Y3Rpb24uICBBbHRob3VnaCB0aGUgXHMtMVJYXHMwIGluc3RydWN0aW9uIHNldCBkb2VzCithbGxvdyBjb25zdGFudHMgb2YgdXAgdG8gNCBieXRlcyBpbiBsZW5ndGggdG8gYmUgdXNlZCBpbiBpbnN0cnVjdGlvbnMsCithIGxvbmdlciB2YWx1ZSBlcXVhdGVzIHRvIGEgbG9uZ2VyIGluc3RydWN0aW9uLiAgVGh1cyBpbiBzb21lCitjaXJjdW1zdGFuY2VzIGl0IGNhbiBiZSBiZW5lZmljaWFsIHRvIHJlc3RyaWN0IHRoZSBzaXplIG9mIGNvbnN0YW50cwordGhhdCBhcmUgdXNlZCBpbiBpbnN0cnVjdGlvbnMuICBDb25zdGFudHMgdGhhdCBhcmUgdG9vIGJpZyBhcmUgaW5zdGVhZAorcGxhY2VkIGludG8gYSBjb25zdGFudCBwb29sIGFuZCByZWZlcmVuY2VkIHZpYSByZWdpc3RlciBpbmRpcmVjdGlvbi4KKy5TcAorVGhlIHZhbHVlIFxmSU5cZlIgY2FuIGJlIGJldHdlZW4gMCBhbmQgNC4gIEEgdmFsdWUgb2YgMCAodGhlIGRlZmF1bHQpCitvciA0IG1lYW5zIHRoYXQgY29uc3RhbnRzIG9mIGFueSBzaXplIGFyZSBhbGxvd2VkLgorLklQICJcZkJcLW1yZWxheFxmUiIgNAorLklYIEl0ZW0gIi1tcmVsYXgiCitFbmFibGUgbGlua2VyIHJlbGF4YXRpb24uICBMaW5rZXIgcmVsYXhhdGlvbiBpcyBhIHByb2Nlc3Mgd2hlcmVieSB0aGUKK2xpbmtlciBhdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNpemUgb2YgYSBwcm9ncmFtIGJ5IGZpbmRpbmcgc2hvcnRlcgordmVyc2lvbnMgb2YgdmFyaW91cyBpbnN0cnVjdGlvbnMuICBEaXNhYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLW1pbnRcLXJlZ2lzdGVyPVxmUlxmSU5cZlIiIDQKKy5JWCBJdGVtICItbWludC1yZWdpc3Rlcj1OIgorU3BlY2lmeSB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycyB0byByZXNlcnZlIGZvciBmYXN0IGludGVycnVwdCBoYW5kbGVyCitmdW5jdGlvbnMuICBUaGUgdmFsdWUgXGZJTlxmUiBjYW4gYmUgYmV0d2VlbiAwIGFuZCA0LiAgQSB2YWx1ZSBvZiAxCittZWFucyB0aGF0IHJlZ2lzdGVyIFxmKENXXCooQ2ByMTNcKihDJ1xmUiBpcyByZXNlcnZlZCBmb3IgdGhlIGV4Y2x1c2l2ZSB1c2UKK29mIGZhc3QgaW50ZXJydXB0IGhhbmRsZXJzLiAgQSB2YWx1ZSBvZiAyIHJlc2VydmVzIFxmKENXXCooQ2ByMTNcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYHIxMlwqKEMnXGZSLiAgQSB2YWx1ZSBvZiAzIHJlc2VydmVzIFxmKENXXCooQ2ByMTNcKihDJ1xmUiwgXGYoQ1dcKihDYHIxMlwqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgcjExXCooQydcZlIsIGFuZCBhIHZhbHVlIG9mIDQgcmVzZXJ2ZXMgXGYoQ1dcKihDYHIxM1wqKEMnXGZSIHRocm91Z2ggXGYoQ1dcKihDYHIxMFwqKEMnXGZSLgorQSB2YWx1ZSBvZiAwLCB0aGUgZGVmYXVsdCwgZG9lcyBub3QgcmVzZXJ2ZSBhbnkgcmVnaXN0ZXJzLgorLklQICJcZkJcLW1zYXZlXC1hY2NcLWluXC1pbnRlcnJ1cHRzXGZSIiA0CisuSVggSXRlbSAiLW1zYXZlLWFjYy1pbi1pbnRlcnJ1cHRzIgorU3BlY2lmaWVzIHRoYXQgaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb25zIHNob3VsZCBwcmVzZXJ2ZSB0aGUKK2FjY3VtdWxhdG9yIHJlZ2lzdGVyLiAgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBub3JtYWwgY29kZSBtaWdodCB1c2UKK3RoZSBhY2N1bXVsYXRvciByZWdpc3RlciwgZm9yIGV4YW1wbGUgYmVjYXVzZSBpdCBwZXJmb3JtcyA2NFwtYml0CittdWx0aXBsaWNhdGlvbnMuICBUaGUgZGVmYXVsdCBpcyB0byBpZ25vcmUgdGhlIGFjY3VtdWxhdG9yIGFzIHRoaXMKK21ha2VzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZmFzdGVyLgorLklQICJcZkJcLW1waWRcZlIiIDQKKy5JWCBJdGVtICItbXBpZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1waWRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBpZCIKKy5QRAorRW5hYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBwb3NpdGlvbiBpbmRlcGVuZGVudCBkYXRhLiAgV2hlbiBlbmFibGVkIGFueQorYWNjZXNzIHRvIGNvbnN0YW50IGRhdGEgaXMgZG9uZSB2aWEgYW4gb2Zmc2V0IGZyb20gYSBiYXNlIGFkZHJlc3MKK2hlbGQgaW4gYSByZWdpc3Rlci4gIFRoaXMgYWxsb3dzIHRoZSBsb2NhdGlvbiBvZiBjb25zdGFudCBkYXRhIHRvIGJlCitkZXRlcm1pbmVkIGF0IHJ1biB0aW1lIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBleGVjdXRhYmxlIHRvIGJlCityZWxvY2F0ZWQsIHdoaWNoIGlzIGEgYmVuZWZpdCB0byBlbWJlZGRlZCBhcHBsaWNhdGlvbnMgd2l0aCB0aWdodAorbWVtb3J5IGNvbnN0cmFpbnRzLiAgRGF0YSB0aGF0IGNhbiBiZSBtb2RpZmllZCBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcworb3B0aW9uLgorLlNwCitOb3RlLCB1c2luZyB0aGlzIGZlYXR1cmUgcmVzZXJ2ZXMgYSByZWdpc3RlciwgdXN1YWxseSBcZihDV1wqKENgcjEzXCooQydcZlIsIGZvcgordGhlIGNvbnN0YW50IGRhdGEgYmFzZSBhZGRyZXNzLiAgVGhpcyBjYW4gcmVzdWx0IGluIHNsb3dlciBhbmQvb3IKK2xhcmdlciBjb2RlLCBlc3BlY2lhbGx5IGluIGNvbXBsaWNhdGVkIGZ1bmN0aW9ucy4KKy5TcAorVGhlIGFjdHVhbCByZWdpc3RlciBjaG9zZW4gdG8gaG9sZCB0aGUgY29uc3RhbnQgZGF0YSBiYXNlIGFkZHJlc3MKK2RlcGVuZHMgdXBvbiB3aGV0aGVyIHRoZSBcZkJcLW1zbWFsbFwtZGF0YVwtbGltaXRcZlIgYW5kL29yIHRoZQorXCZcZkJcLW1pbnRcLXJlZ2lzdGVyXGZSIGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZSBlbmFibGVkLiAgU3RhcnRpbmcKK3dpdGggcmVnaXN0ZXIgXGYoQ1dcKihDYHIxM1wqKEMnXGZSIGFuZCBwcm9jZWVkaW5nIGRvd253YXJkcywgcmVnaXN0ZXJzIGFyZQorYWxsb2NhdGVkIGZpcnN0IHRvIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiBcZkJcLW1pbnRcLXJlZ2lzdGVyXGZSLAordGhlbiBcZkJcLW1waWRcZlIgYW5kIGZpbmFsbHkgXGZCXC1tc21hbGxcLWRhdGFcLWxpbWl0XGZSLiAgVGh1cyBpdAoraXMgcG9zc2libGUgZm9yIHRoZSBzbWFsbCBkYXRhIGFyZWEgcmVnaXN0ZXIgdG8gYmUgXGYoQ1dcKihDYHI4XCooQydcZlIgaWYgYm90aAorXCZcZkJcLW1pbnRcLXJlZ2lzdGVyPTRcZlIgYW5kIFxmQlwtbXBpZFxmUiBhcmUgc3BlY2lmaWVkIG9uIHRoZQorY29tbWFuZCBsaW5lLgorLlNwCitCeSBkZWZhdWx0IHRoaXMgZmVhdHVyZSBpcyBub3QgZW5hYmxlZC4gIFRoZSBkZWZhdWx0IGNhbiBiZSByZXN0b3JlZAordmlhIHRoZSBcZkJcLW1ub1wtcGlkXGZSIGNvbW1hbmQtbGluZSBvcHRpb24uCisuSVAgIlxmQlwtbW5vXC13YXJuXC1tdWx0aXBsZVwtZmFzdFwtaW50ZXJydXB0c1xmUiIgNAorLklYIEl0ZW0gIi1tbm8td2Fybi1tdWx0aXBsZS1mYXN0LWludGVycnVwdHMiCisuUEQgMAorLklQICJcZkJcLW13YXJuXC1tdWx0aXBsZVwtZmFzdFwtaW50ZXJydXB0c1xmUiIgNAorLklYIEl0ZW0gIi1td2Fybi1tdWx0aXBsZS1mYXN0LWludGVycnVwdHMiCisuUEQKK1ByZXZlbnRzIFxzLTFHQ0NcczAgZnJvbSBpc3N1aW5nIGEgd2FybmluZyBtZXNzYWdlIGlmIGl0IGZpbmRzIG1vcmUgdGhhbiBvbmUKK2Zhc3QgaW50ZXJydXB0IGhhbmRsZXIgd2hlbiBpdCBpcyBjb21waWxpbmcgYSBmaWxlLiAgVGhlIGRlZmF1bHQgaXMgdG8KK2lzc3VlIGEgd2FybmluZyBmb3IgZWFjaCBleHRyYSBmYXN0IGludGVycnVwdCBoYW5kbGVyIGZvdW5kLCBhcyB0aGUgXHMtMVJYXHMwCitvbmx5IHN1cHBvcnRzIG9uZSBzdWNoIGludGVycnVwdC4KKy5QUAorXCZcZklOb3RlOlxmUiBUaGUgZ2VuZXJpYyBccy0xR0NDXHMwIGNvbW1hbmQtbGluZSBvcHRpb24gXGZCXC1mZml4ZWRcLVxmUlxmSXJlZ1xmUgoraGFzIHNwZWNpYWwgc2lnbmlmaWNhbmNlIHRvIHRoZSBccy0xUlhcczAgcG9ydCB3aGVuIHVzZWQgd2l0aCB0aGUKK1wmXGYoQ1dcKihDYGludGVycnVwdFwqKEMnXGZSIGZ1bmN0aW9uIGF0dHJpYnV0ZS4gIFRoaXMgYXR0cmlidXRlIGluZGljYXRlcyBhCitmdW5jdGlvbiBpbnRlbmRlZCB0byBwcm9jZXNzIGZhc3QgaW50ZXJydXB0cy4gIFxzLTFHQ0NcczAgZW5zdXJlcwordGhhdCBpdCBvbmx5IHVzZXMgdGhlIHJlZ2lzdGVycyBcZihDV1wqKENgcjEwXCooQydcZlIsIFxmKENXXCooQ2ByMTFcKihDJ1xmUiwgXGYoQ1dcKihDYHIxMlwqKEMnXGZSCithbmQvb3IgXGYoQ1dcKihDYHIxM1wqKEMnXGZSIGFuZCBvbmx5IHByb3ZpZGVkIHRoYXQgdGhlIG5vcm1hbCB1c2Ugb2YgdGhlCitjb3JyZXNwb25kaW5nIHJlZ2lzdGVycyBoYXZlIGJlZW4gcmVzdHJpY3RlZCB2aWEgdGhlCitcJlxmQlwtZmZpeGVkXC1cZlJcZklyZWdcZlIgb3IgXGZCXC1taW50XC1yZWdpc3RlclxmUiBjb21tYW5kLWxpbmUKK29wdGlvbnMuCisuUFAKK1xmSVMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJTLzM5MCBhbmQgelNlcmllcyBPcHRpb25zIgorLlBQCitUaGVzZSBhcmUgdGhlIFxmQlwtbVxmUiBvcHRpb25zIGRlZmluZWQgZm9yIHRoZSBTLzM5MCBhbmQgelNlcmllcyBhcmNoaXRlY3R1cmUuCisuSVAgIlxmQlwtbWhhcmRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWZsb2F0IgorLlBEIDAKKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgdGhlIGhhcmR3YXJlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBhbmQgcmVnaXN0ZXJzCitmb3IgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4gIFdoZW4gXGZCXC1tc29mdFwtZmxvYXRcZlIgaXMgc3BlY2lmaWVkLAorZnVuY3Rpb25zIGluIFxmSWxpYmdjYy5hXGZSIGFyZSB1c2VkIHRvIHBlcmZvcm0gZmxvYXRpbmctcG9pbnQKK29wZXJhdGlvbnMuICBXaGVuIFxmQlwtbWhhcmRcLWZsb2F0XGZSIGlzIHNwZWNpZmllZCwgdGhlIGNvbXBpbGVyCitnZW5lcmF0ZXMgXHMtMUlFRUVcczAgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1taGFyZFwtZGZwXGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWRmcCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1oYXJkXC1kZnBcZlIiIDQKKy5JWCBJdGVtICItbW5vLWhhcmQtZGZwIgorLlBECitVc2UgKGRvIG5vdCB1c2UpIHRoZSBoYXJkd2FyZSBkZWNpbWFsLWZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBmb3IKK2RlY2ltYWwtZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4gIFdoZW4gXGZCXC1tbm9cLWhhcmRcLWRmcFxmUiBpcworc3BlY2lmaWVkLCBmdW5jdGlvbnMgaW4gXGZJbGliZ2NjLmFcZlIgYXJlIHVzZWQgdG8gcGVyZm9ybQorZGVjaW1hbC1mbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLiAgV2hlbiBcZkJcLW1oYXJkXC1kZnBcZlIgaXMKK3NwZWNpZmllZCwgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBkZWNpbWFsLWZsb2F0aW5nLXBvaW50IGhhcmR3YXJlCitpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBcZkJcLW1hcmNoPXo5XC1lY1xmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtbWxvbmdcLWRvdWJsZVwtNjRcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctZG91YmxlLTY0IgorLlBEIDAKKy5JUCAiXGZCXC1tbG9uZ1wtZG91YmxlXC0xMjhcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctZG91YmxlLTEyOCIKKy5QRAorVGhlc2Ugc3dpdGNoZXMgY29udHJvbCB0aGUgc2l6ZSBvZiBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUiB0eXBlLiBBIHNpemUKK29mIDY0IGJpdHMgbWFrZXMgdGhlIFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSIHR5cGUgZXF1aXZhbGVudCB0byB0aGUgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSCit0eXBlLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1iYWNrY2hhaW5cZlIiIDQKKy5JWCBJdGVtICItbWJhY2tjaGFpbiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1iYWNrY2hhaW5cZlIiIDQKKy5JWCBJdGVtICItbW5vLWJhY2tjaGFpbiIKKy5QRAorU3RvcmUgKGRvIG5vdCBzdG9yZSkgdGhlIGFkZHJlc3Mgb2YgdGhlIGNhbGxlcidzIGZyYW1lIGFzIGJhY2tjaGFpbiBwb2ludGVyCitpbnRvIHRoZSBjYWxsZWUncyBzdGFjayBmcmFtZS4KK0EgYmFja2NoYWluIG1heSBiZSBuZWVkZWQgdG8gYWxsb3cgZGVidWdnaW5nIHVzaW5nIHRvb2xzIHRoYXQgZG8gbm90IHVuZGVyc3RhbmQKK1wmXHMtMURXQVJGXHMwIDIgY2FsbCBmcmFtZSBpbmZvcm1hdGlvbi4KK1doZW4gXGZCXC1tbm9cLXBhY2tlZFwtc3RhY2tcZlIgaXMgaW4gZWZmZWN0LCB0aGUgYmFja2NoYWluIHBvaW50ZXIgaXMgc3RvcmVkCithdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayBmcmFtZTsgd2hlbiBcZkJcLW1wYWNrZWRcLXN0YWNrXGZSIGlzIGluIGVmZmVjdCwKK3RoZSBiYWNrY2hhaW4gaXMgcGxhY2VkIGludG8gdGhlIHRvcG1vc3Qgd29yZCBvZiB0aGUgOTYvMTYwIGJ5dGUgcmVnaXN0ZXIKK3NhdmUgYXJlYS4KKy5TcAorSW4gZ2VuZXJhbCwgY29kZSBjb21waWxlZCB3aXRoIFxmQlwtbWJhY2tjaGFpblxmUiBpcyBjYWxsLWNvbXBhdGlibGUgd2l0aAorY29kZSBjb21waWxlZCB3aXRoIFxmQlwtbW1vXC1iYWNrY2hhaW5cZlI7IGhvd2V2ZXIsIHVzZSBvZiB0aGUgYmFja2NoYWluCitmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHVzdWFsbHkgcmVxdWlyZXMgdGhhdCB0aGUgd2hvbGUgYmluYXJ5IGlzIGJ1aWx0IHdpdGgKK1wmXGZCXC1tYmFja2NoYWluXGZSLiAgTm90ZSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBcZkJcLW1iYWNrY2hhaW5cZlIsCitcJlxmQlwtbXBhY2tlZFwtc3RhY2tcZlIgYW5kIFxmQlwtbWhhcmRcLWZsb2F0XGZSIGlzIG5vdCBzdXBwb3J0ZWQuICBJbiBvcmRlcgordG8gYnVpbGQgYSBsaW51eCBrZXJuZWwgdXNlIFxmQlwtbXNvZnRcLWZsb2F0XGZSLgorLlNwCitUaGUgZGVmYXVsdCBpcyB0byBub3QgbWFpbnRhaW4gdGhlIGJhY2tjaGFpbi4KKy5JUCAiXGZCXC1tcGFja2VkXC1zdGFja1xmUiIgNAorLklYIEl0ZW0gIi1tcGFja2VkLXN0YWNrIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBhY2tlZFwtc3RhY2tcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBhY2tlZC1zdGFjayIKKy5QRAorVXNlIChkbyBub3QgdXNlKSB0aGUgcGFja2VkIHN0YWNrIGxheW91dC4gIFdoZW4gXGZCXC1tbm9cLXBhY2tlZFwtc3RhY2tcZlIgaXMKK3NwZWNpZmllZCwgdGhlIGNvbXBpbGVyIHVzZXMgdGhlIGFsbCBmaWVsZHMgb2YgdGhlIDk2LzE2MCBieXRlIHJlZ2lzdGVyIHNhdmUKK2FyZWEgb25seSBmb3IgdGhlaXIgZGVmYXVsdCBwdXJwb3NlOyB1bnVzZWQgZmllbGRzIHN0aWxsIHRha2UgdXAgc3RhY2sgc3BhY2UuCitXaGVuIFxmQlwtbXBhY2tlZFwtc3RhY2tcZlIgaXMgc3BlY2lmaWVkLCByZWdpc3RlciBzYXZlIHNsb3RzIGFyZSBkZW5zZWx5CitwYWNrZWQgYXQgdGhlIHRvcCBvZiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhOyB1bnVzZWQgc3BhY2UgaXMgcmV1c2VkIGZvciBvdGhlcgorcHVycG9zZXMsIGFsbG93aW5nIGZvciBtb3JlIGVmZmljaWVudCB1c2Ugb2YgdGhlIGF2YWlsYWJsZSBzdGFjayBzcGFjZS4KK0hvd2V2ZXIsIHdoZW4gXGZCXC1tYmFja2NoYWluXGZSIGlzIGFsc28gaW4gZWZmZWN0LCB0aGUgdG9wbW9zdCB3b3JkIG9mCit0aGUgc2F2ZSBhcmVhIGlzIGFsd2F5cyB1c2VkIHRvIHN0b3JlIHRoZSBiYWNrY2hhaW4sIGFuZCB0aGUgcmV0dXJuIGFkZHJlc3MKK3JlZ2lzdGVyIGlzIGFsd2F5cyBzYXZlZCB0d28gd29yZHMgYmVsb3cgdGhlIGJhY2tjaGFpbi4KKy5TcAorQXMgbG9uZyBhcyB0aGUgc3RhY2sgZnJhbWUgYmFja2NoYWluIGlzIG5vdCB1c2VkLCBjb2RlIGdlbmVyYXRlZCB3aXRoCitcJlxmQlwtbXBhY2tlZFwtc3RhY2tcZlIgaXMgY2FsbC1jb21wYXRpYmxlIHdpdGggY29kZSBnZW5lcmF0ZWQgd2l0aAorXCZcZkJcLW1ub1wtcGFja2VkXC1zdGFja1xmUi4gIE5vdGUgdGhhdCBzb21lIG5vbi1GU0YgcmVsZWFzZXMgb2YgXHMtMUdDQ1xzMCAyLjk1IGZvcgorUy8zOTAgb3IgelNlcmllcyBnZW5lcmF0ZWQgY29kZSB0aGF0IHVzZXMgdGhlIHN0YWNrIGZyYW1lIGJhY2tjaGFpbiBhdCBydW4KK3RpbWUsIG5vdCBqdXN0IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuICBTdWNoIGNvZGUgaXMgbm90IGNhbGwtY29tcGF0aWJsZQord2l0aCBjb2RlIGNvbXBpbGVkIHdpdGggXGZCXC1tcGFja2VkXC1zdGFja1xmUi4gIEFsc28sIG5vdGUgdGhhdCB0aGUKK2NvbWJpbmF0aW9uIG9mIFxmQlwtbWJhY2tjaGFpblxmUiwKK1wmXGZCXC1tcGFja2VkXC1zdGFja1xmUiBhbmQgXGZCXC1taGFyZFwtZmxvYXRcZlIgaXMgbm90IHN1cHBvcnRlZC4gIEluIG9yZGVyCit0byBidWlsZCBhIGxpbnV4IGtlcm5lbCB1c2UgXGZCXC1tc29mdFwtZmxvYXRcZlIuCisuU3AKK1RoZSBkZWZhdWx0IGlzIHRvIG5vdCB1c2UgdGhlIHBhY2tlZCBzdGFjayBsYXlvdXQuCisuSVAgIlxmQlwtbXNtYWxsXC1leGVjXGZSIiA0CisuSVggSXRlbSAiLW1zbWFsbC1leGVjIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNtYWxsXC1leGVjXGZSIiA0CisuSVggSXRlbSAiLW1uby1zbWFsbC1leGVjIgorLlBECitHZW5lcmF0ZSAob3IgZG8gbm90IGdlbmVyYXRlKSBjb2RlIHVzaW5nIHRoZSBcZihDV1wqKENgYnJhc1wqKEMnXGZSIGluc3RydWN0aW9uCit0byBkbyBzdWJyb3V0aW5lIGNhbGxzLgorVGhpcyBvbmx5IHdvcmtzIHJlbGlhYmx5IGlmIHRoZSB0b3RhbCBleGVjdXRhYmxlIHNpemUgZG9lcyBub3QKK2V4Y2VlZCA2NGsuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIFxmKENXXCooQ2BiYXNyXCooQydcZlIgaW5zdHJ1Y3Rpb24gaW5zdGVhZCwKK3doaWNoIGRvZXMgbm90IGhhdmUgdGhpcyBsaW1pdGF0aW9uLgorLklQICJcZkJcLW02NFxmUiIgNAorLklYIEl0ZW0gIi1tNjQiCisuUEQgMAorLklQICJcZkJcLW0zMVxmUiIgNAorLklYIEl0ZW0gIi1tMzEiCisuUEQKK1doZW4gXGZCXC1tMzFcZlIgaXMgc3BlY2lmaWVkLCBnZW5lcmF0ZSBjb2RlIGNvbXBsaWFudCB0byB0aGUKK0dOVS9MaW51eCBmb3IgUy8zOTAgXHMtMUFCSVxzMC4gIFdoZW4gXGZCXC1tNjRcZlIgaXMgc3BlY2lmaWVkLCBnZW5lcmF0ZQorY29kZSBjb21wbGlhbnQgdG8gdGhlIEdOVS9MaW51eCBmb3IgelNlcmllcyBccy0xQUJJXHMwLiAgVGhpcyBhbGxvd3MgXHMtMUdDQ1xzMCBpbgorcGFydGljdWxhciB0byBnZW5lcmF0ZSA2NFwtYml0IGluc3RydWN0aW9ucy4gIEZvciB0aGUgXGZCczM5MFxmUgordGFyZ2V0cywgdGhlIGRlZmF1bHQgaXMgXGZCXC1tMzFcZlIsIHdoaWxlIHRoZSBcZkJzMzkweFxmUgordGFyZ2V0cyBkZWZhdWx0IHRvIFxmQlwtbTY0XGZSLgorLklQICJcZkJcLW16YXJjaFxmUiIgNAorLklYIEl0ZW0gIi1temFyY2giCisuUEQgMAorLklQICJcZkJcLW1lc2FcZlIiIDQKKy5JWCBJdGVtICItbWVzYSIKKy5QRAorV2hlbiBcZkJcLW16YXJjaFxmUiBpcyBzcGVjaWZpZWQsIGdlbmVyYXRlIGNvZGUgdXNpbmcgdGhlCitpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIG9uIHovQXJjaGl0ZWN0dXJlLgorV2hlbiBcZkJcLW1lc2FcZlIgaXMgc3BlY2lmaWVkLCBnZW5lcmF0ZSBjb2RlIHVzaW5nIHRoZQoraW5zdHJ1Y3Rpb25zIGF2YWlsYWJsZSBvbiBccy0xRVNBLzM5MFxzMC4gIE5vdGUgdGhhdCBcZkJcLW1lc2FcZlIgaXMKK25vdCBwb3NzaWJsZSB3aXRoIFxmQlwtbTY0XGZSLgorV2hlbiBnZW5lcmF0aW5nIGNvZGUgY29tcGxpYW50IHRvIHRoZSBHTlUvTGludXggZm9yIFMvMzkwIFxzLTFBQklcczAsCit0aGUgZGVmYXVsdCBpcyBcZkJcLW1lc2FcZlIuICBXaGVuIGdlbmVyYXRpbmcgY29kZSBjb21wbGlhbnQKK3RvIHRoZSBHTlUvTGludXggZm9yIHpTZXJpZXMgXHMtMUFCSVxzMCwgdGhlIGRlZmF1bHQgaXMgXGZCXC1temFyY2hcZlIuCisuSVAgIlxmQlwtbW12Y2xlXGZSIiA0CisuSVggSXRlbSAiLW1tdmNsZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1tdmNsZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbXZjbGUiCisuUEQKK0dlbmVyYXRlIChvciBkbyBub3QgZ2VuZXJhdGUpIGNvZGUgdXNpbmcgdGhlIFxmKENXXCooQ2BtdmNsZVwqKEMnXGZSIGluc3RydWN0aW9uCit0byBwZXJmb3JtIGJsb2NrIG1vdmVzLiAgV2hlbiBcZkJcLW1ub1wtbXZjbGVcZlIgaXMgc3BlY2lmaWVkLAordXNlIGEgXGYoQ1dcKihDYG12Y1wqKEMnXGZSIGxvb3AgaW5zdGVhZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgdW5sZXNzIG9wdGltaXppbmcgZm9yCitzaXplLgorLklQICJcZkJcLW1kZWJ1Z1xmUiIgNAorLklYIEl0ZW0gIi1tZGVidWciCisuUEQgMAorLklQICJcZkJcLW1ub1wtZGVidWdcZlIiIDQKKy5JWCBJdGVtICItbW5vLWRlYnVnIgorLlBECitQcmludCAob3IgZG8gbm90IHByaW50KSBhZGRpdGlvbmFsIGRlYnVnIGluZm9ybWF0aW9uIHdoZW4gY29tcGlsaW5nLgorVGhlIGRlZmF1bHQgaXMgdG8gbm90IHByaW50IGRlYnVnIGluZm9ybWF0aW9uLgorLklQICJcZkJcLW1hcmNoPVxmUlxmSWNwdS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW1hcmNoPWNwdS10eXBlIgorR2VuZXJhdGUgY29kZSB0aGF0IHJ1bnMgb24gXGZJY3B1LXR5cGVcZlIsIHdoaWNoIGlzIHRoZSBuYW1lIG9mIGEgc3lzdGVtCityZXByZXNlbnRpbmcgYSBjZXJ0YWluIHByb2Nlc3NvciB0eXBlLiAgUG9zc2libGUgdmFsdWVzIGZvcgorXCZcZkljcHUtdHlwZVxmUiBhcmUgXGZCZzVcZlIsIFxmQmc2XGZSLCBcZkJ6OTAwXGZSLCBcZkJ6OTkwXGZSLAorXCZcZkJ6OVwtMTA5XGZSLCBcZkJ6OVwtZWNcZlIgYW5kIFxmQnoxMFxmUi4KK1doZW4gZ2VuZXJhdGluZyBjb2RlIHVzaW5nIHRoZSBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIG9uIHovQXJjaGl0ZWN0dXJlLAordGhlIGRlZmF1bHQgaXMgXGZCXC1tYXJjaD16OTAwXGZSLiAgT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBpcworXCZcZkJcLW1hcmNoPWc1XGZSLgorLklQICJcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW10dW5lPWNwdS10eXBlIgorVHVuZSB0byBcZkljcHUtdHlwZVxmUiBldmVyeXRoaW5nIGFwcGxpY2FibGUgYWJvdXQgdGhlIGdlbmVyYXRlZCBjb2RlLAorZXhjZXB0IGZvciB0aGUgXHMtMUFCSVxzMCBhbmQgdGhlIHNldCBvZiBhdmFpbGFibGUgaW5zdHJ1Y3Rpb25zLgorVGhlIGxpc3Qgb2YgXGZJY3B1LXR5cGVcZlIgdmFsdWVzIGlzIHRoZSBzYW1lIGFzIGZvciBcZkJcLW1hcmNoXGZSLgorVGhlIGRlZmF1bHQgaXMgdGhlIHZhbHVlIHVzZWQgZm9yIFxmQlwtbWFyY2hcZlIuCisuSVAgIlxmQlwtbXRwZlwtdHJhY2VcZlIiIDQKKy5JWCBJdGVtICItbXRwZi10cmFjZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC10cGZcLXRyYWNlXGZSIiA0CisuSVggSXRlbSAiLW1uby10cGYtdHJhY2UiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCBhZGRzIChkb2VzIG5vdCBhZGQpIGluIFxzLTFUUEZcczAgXHMtMU9TXHMwIHNwZWNpZmljIGJyYW5jaGVzIHRvIHRyYWNlCityb3V0aW5lcyBpbiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFRoaXMgb3B0aW9uIGlzIG9mZiBieSBkZWZhdWx0LCBldmVuCit3aGVuIGNvbXBpbGluZyBmb3IgdGhlIFxzLTFUUEZcczAgXHMtMU9TXHMwLgorLklQICJcZkJcLW1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tZnVzZWQtbWFkZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnVzZWQtbWFkZCIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGZsb2F0aW5nLXBvaW50IG11bHRpcGx5IGFuZAorYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMuICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0IGlmCitoYXJkd2FyZSBmbG9hdGluZyBwb2ludCBpcyB1c2VkLgorLklQICJcZkJcLW13YXJuXC1mcmFtZXNpemU9XGZSXGZJZnJhbWVzaXplXGZSIiA0CisuSVggSXRlbSAiLW13YXJuLWZyYW1lc2l6ZT1mcmFtZXNpemUiCitFbWl0IGEgd2FybmluZyBpZiB0aGUgY3VycmVudCBmdW5jdGlvbiBleGNlZWRzIHRoZSBnaXZlbiBmcmFtZSBzaXplLiAgQmVjYXVzZQordGhpcyBpcyBhIGNvbXBpbGUtdGltZSBjaGVjayBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgYSByZWFsIHByb2JsZW0gd2hlbiB0aGUgcHJvZ3JhbQorcnVucy4gIEl0IGlzIGludGVuZGVkIHRvIGlkZW50aWZ5IGZ1bmN0aW9ucyB0aGF0IG1vc3QgcHJvYmFibHkgY2F1c2UKK2Egc3RhY2sgb3ZlcmZsb3cuICBJdCBpcyB1c2VmdWwgdG8gYmUgdXNlZCBpbiBhbiBlbnZpcm9ubWVudCB3aXRoIGxpbWl0ZWQgc3RhY2sKK3NpemUgZS5nLiB0aGUgbGludXgga2VybmVsLgorLklQICJcZkJcLW13YXJuXC1keW5hbWljc3RhY2tcZlIiIDQKKy5JWCBJdGVtICItbXdhcm4tZHluYW1pY3N0YWNrIgorRW1pdCBhIHdhcm5pbmcgaWYgdGhlIGZ1bmN0aW9uIGNhbGxzIFxmKENXXCooQ2BhbGxvY2FcKihDJ1xmUiBvciB1c2VzIGR5bmFtaWNhbGx5LXNpemVkCithcnJheXMuICBUaGlzIGlzIGdlbmVyYWxseSBhIGJhZCBpZGVhIHdpdGggYSBsaW1pdGVkIHN0YWNrIHNpemUuCisuSVAgIlxmQlwtbXN0YWNrXC1ndWFyZD1cZlJcZklzdGFjay1ndWFyZFxmUiIgNAorLklYIEl0ZW0gIi1tc3RhY2stZ3VhcmQ9c3RhY2stZ3VhcmQiCisuUEQgMAorLklQICJcZkJcLW1zdGFja1wtc2l6ZT1cZlJcZklzdGFjay1zaXplXGZSIiA0CisuSVggSXRlbSAiLW1zdGFjay1zaXplPXN0YWNrLXNpemUiCisuUEQKK0lmIHRoZXNlIG9wdGlvbnMgYXJlIHByb3ZpZGVkIHRoZSBTLzM5MCBiYWNrIGVuZCBlbWl0cyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyBpbgordGhlIGZ1bmN0aW9uIHByb2xvZ3VlIHRoYXQgdHJpZ2dlciBhIHRyYXAgaWYgdGhlIHN0YWNrIHNpemUgaXMgXGZJc3RhY2stZ3VhcmRcZlIKK2J5dGVzIGFib3ZlIHRoZSBcZklzdGFjay1zaXplXGZSIChyZW1lbWJlciB0aGF0IHRoZSBzdGFjayBvbiBTLzM5MCBncm93cyBkb3dud2FyZCkuCitJZiB0aGUgXGZJc3RhY2stZ3VhcmRcZlIgb3B0aW9uIGlzIG9taXR0ZWQgdGhlIHNtYWxsZXN0IHBvd2VyIG9mIDIgbGFyZ2VyIHRoYW4KK3RoZSBmcmFtZSBzaXplIG9mIHRoZSBjb21waWxlZCBmdW5jdGlvbiBpcyBjaG9zZW4uCitUaGVzZSBvcHRpb25zIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGhlbHAgZGVidWdnaW5nIHN0YWNrIG92ZXJmbG93IHByb2JsZW1zLgorVGhlIGFkZGl0aW9uYWxseSBlbWl0dGVkIGNvZGUgY2F1c2VzIG9ubHkgbGl0dGxlIG92ZXJoZWFkIGFuZCBoZW5jZSBjYW4gYWxzbyBiZQordXNlZCBpbiBwcm9kdWN0aW9uLWxpa2Ugc3lzdGVtcyB3aXRob3V0IGdyZWF0ZXIgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uICBUaGUgZ2l2ZW4KK3ZhbHVlcyBoYXZlIHRvIGJlIGV4YWN0IHBvd2VycyBvZiAyIGFuZCBcZklzdGFjay1zaXplXGZSIGhhcyB0byBiZSBncmVhdGVyIHRoYW4KK1wmXGZJc3RhY2stZ3VhcmRcZlIgd2l0aG91dCBleGNlZWRpbmcgNjRrLgorSW4gb3JkZXIgdG8gYmUgZWZmaWNpZW50IHRoZSBleHRyYSBjb2RlIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHN0YWNrIHN0YXJ0cworYXQgYW4gYWRkcmVzcyBhbGlnbmVkIHRvIHRoZSB2YWx1ZSBnaXZlbiBieSBcZklzdGFjay1zaXplXGZSLgorVGhlIFxmSXN0YWNrLWd1YXJkXGZSIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggXGZJc3RhY2stc2l6ZVxmUi4KKy5QUAorXGZJU2NvcmUgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlNjb3JlIE9wdGlvbnMiCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIFNjb3JlIGltcGxlbWVudGF0aW9uczoKKy5JUCAiXGZCXC1tZWJcZlIiIDQKKy5JWCBJdGVtICItbWViIgorQ29tcGlsZSBjb2RlIGZvciBiaWctZW5kaWFuIG1vZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1lbFxmUiIgNAorLklYIEl0ZW0gIi1tZWwiCitDb21waWxlIGNvZGUgZm9yIGxpdHRsZS1lbmRpYW4gbW9kZS4KKy5JUCAiXGZCXC1tbmh3bG9vcFxmUiIgNAorLklYIEl0ZW0gIi1tbmh3bG9vcCIKK0Rpc2FibGUgZ2VuZXJhdGlvbiBvZiBcZihDV1wqKENgYmNuelwqKEMnXGZSIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tdWxzXGZSIiA0CisuSVggSXRlbSAiLW11bHMiCitFbmFibGUgZ2VuZXJhdGlvbiBvZiB1bmFsaWduZWQgbG9hZCBhbmQgc3RvcmUgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1tYWNcZlIiIDQKKy5JWCBJdGVtICItbW1hYyIKK0VuYWJsZSB0aGUgdXNlIG9mIG11bHRpcGx5LWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLiBEaXNhYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLW1zY29yZTVcZlIiIDQKKy5JWCBJdGVtICItbXNjb3JlNSIKK1NwZWNpZnkgdGhlIFxzLTFTQ09SRTVcczAgYXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisuSVAgIlxmQlwtbXNjb3JlNXVcZlIiIDQKKy5JWCBJdGVtICItbXNjb3JlNXUiCitTcGVjaWZ5IHRoZSBccy0xU0NPUkU1VVxzMCBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKy5JUCAiXGZCXC1tc2NvcmU3XGZSIiA0CisuSVggSXRlbSAiLW1zY29yZTciCitTcGVjaWZ5IHRoZSBccy0xU0NPUkU3XHMwIGFzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1zY29yZTdkXGZSIiA0CisuSVggSXRlbSAiLW1zY29yZTdkIgorU3BlY2lmeSB0aGUgXHMtMVNDT1JFN0RcczAgYXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCisuUFAKK1xmSVxzLTFTSFxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiU0ggT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBccy0xU0hcczAgaW1wbGVtZW50YXRpb25zOgorLklQICJcZkJcLW0xXGZSIiA0CisuSVggSXRlbSAiLW0xIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFxzLTFTSDFcczAuCisuSVAgIlxmQlwtbTJcZlIiIDQKKy5JWCBJdGVtICItbTIiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgXHMtMVNIMlxzMC4KKy5JUCAiXGZCXC1tMmVcZlIiIDQKKy5JWCBJdGVtICItbTJlIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIMmUuCisuSVAgIlxmQlwtbTJhXC1ub2ZwdVxmUiIgNAorLklYIEl0ZW0gIi1tMmEtbm9mcHUiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0gyYSB3aXRob3V0IFxzLTFGUFVcczAsIG9yIGZvciBhIFNIMmFcLUZQVSBpbiBzdWNoIGEgd2F5Cit0aGF0IHRoZSBmbG9hdGluZy1wb2ludCB1bml0IGlzIG5vdCB1c2VkLgorLklQICJcZkJcLW0yYVwtc2luZ2xlXC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLW0yYS1zaW5nbGUtb25seSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDJhXC1GUFUsIGluIHN1Y2ggYSB3YXkgdGhhdCBubyBkb3VibGUtcHJlY2lzaW9uCitmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZSB1c2VkLgorLklQICJcZkJcLW0yYVwtc2luZ2xlXGZSIiA0CisuSVggSXRlbSAiLW0yYS1zaW5nbGUiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0gyYVwtRlBVIGFzc3VtaW5nIHRoZSBmbG9hdGluZy1wb2ludCB1bml0IGlzIGluCitzaW5nbGUtcHJlY2lzaW9uIG1vZGUgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tMmFcZlIiIDQKKy5JWCBJdGVtICItbTJhIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIMmFcLUZQVSBhc3N1bWluZyB0aGUgZmxvYXRpbmctcG9pbnQgdW5pdCBpcyBpbgorZG91YmxlLXByZWNpc2lvbiBtb2RlIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbTNcZlIiIDQKKy5JWCBJdGVtICItbTMiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgXHMtMVNIM1xzMC4KKy5JUCAiXGZCXC1tM2VcZlIiIDQKKy5JWCBJdGVtICItbTNlIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIM2UuCisuSVAgIlxmQlwtbTRcLW5vZnB1XGZSIiA0CisuSVggSXRlbSAiLW00LW5vZnB1IgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFxzLTFTSDRcczAgd2l0aG91dCBhIGZsb2F0aW5nLXBvaW50IHVuaXQuCisuSVAgIlxmQlwtbTRcLXNpbmdsZVwtb25seVxmUiIgNAorLklYIEl0ZW0gIi1tNC1zaW5nbGUtb25seSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBccy0xU0g0XHMwIHdpdGggYSBmbG9hdGluZy1wb2ludCB1bml0IHRoYXQgb25seQorc3VwcG9ydHMgc2luZ2xlLXByZWNpc2lvbiBhcml0aG1ldGljLgorLklQICJcZkJcLW00XC1zaW5nbGVcZlIiIDQKKy5JWCBJdGVtICItbTQtc2luZ2xlIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFxzLTFTSDRcczAgYXNzdW1pbmcgdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgaXMgaW4KK3NpbmdsZS1wcmVjaXNpb24gbW9kZSBieSBkZWZhdWx0LgorLklQICJcZkJcLW00XGZSIiA0CisuSVggSXRlbSAiLW00IgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFxzLTFTSDRcczAuCisuSVAgIlxmQlwtbTRhXC1ub2ZwdVxmUiIgNAorLklYIEl0ZW0gIi1tNGEtbm9mcHUiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0g0YWxcLWRzcCwgb3IgZm9yIGEgU0g0YSBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlCitmbG9hdGluZy1wb2ludCB1bml0IGlzIG5vdCB1c2VkLgorLklQICJcZkJcLW00YVwtc2luZ2xlXC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLW00YS1zaW5nbGUtb25seSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDRhLCBpbiBzdWNoIGEgd2F5IHRoYXQgbm8gZG91YmxlLXByZWNpc2lvbgorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhcmUgdXNlZC4KKy5JUCAiXGZCXC1tNGFcLXNpbmdsZVxmUiIgNAorLklYIEl0ZW0gIi1tNGEtc2luZ2xlIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFNINGEgYXNzdW1pbmcgdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgaXMgaW4KK3NpbmdsZS1wcmVjaXNpb24gbW9kZSBieSBkZWZhdWx0LgorLklQICJcZkJcLW00YVxmUiIgNAorLklYIEl0ZW0gIi1tNGEiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0g0YS4KKy5JUCAiXGZCXC1tNGFsXGZSIiA0CisuSVggSXRlbSAiLW00YWwiCitTYW1lIGFzIFxmQlwtbTRhXC1ub2ZwdVxmUiwgZXhjZXB0IHRoYXQgaXQgaW1wbGljaXRseSBwYXNzZXMKK1wmXGZCXC1kc3BcZlIgdG8gdGhlIGFzc2VtYmxlci4gIFxzLTFHQ0NcczAgZG9lc24ndCBnZW5lcmF0ZSBhbnkgXHMtMURTUFxzMAoraW5zdHJ1Y3Rpb25zIGF0IHRoZSBtb21lbnQuCisuSVAgIlxmQlwtbWJcZlIiIDQKKy5JWCBJdGVtICItbWIiCitDb21waWxlIGNvZGUgZm9yIHRoZSBwcm9jZXNzb3IgaW4gYmlnLWVuZGlhbiBtb2RlLgorLklQICJcZkJcLW1sXGZSIiA0CisuSVggSXRlbSAiLW1sIgorQ29tcGlsZSBjb2RlIGZvciB0aGUgcHJvY2Vzc29yIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4KKy5JUCAiXGZCXC1tZGFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1kYWxpZ24iCitBbGlnbiBkb3VibGVzIGF0IDY0XC1iaXQgYm91bmRhcmllcy4gIE5vdGUgdGhhdCB0aGlzIGNoYW5nZXMgdGhlIGNhbGxpbmcKK2NvbnZlbnRpb25zLCBhbmQgdGh1cyBzb21lIGZ1bmN0aW9ucyBmcm9tIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgZG8KK25vdCB3b3JrIHVubGVzcyB5b3UgcmVjb21waWxlIGl0IGZpcnN0IHdpdGggXGZCXC1tZGFsaWduXGZSLgorLklQICJcZkJcLW1yZWxheFxmUiIgNAorLklYIEl0ZW0gIi1tcmVsYXgiCitTaG9ydGVuIHNvbWUgYWRkcmVzcyByZWZlcmVuY2VzIGF0IGxpbmsgdGltZSwgd2hlbiBwb3NzaWJsZTsgdXNlcyB0aGUKK2xpbmtlciBvcHRpb24gXGZCXC1yZWxheFxmUi4KKy5JUCAiXGZCXC1tYmlndGFibGVcZlIiIDQKKy5JWCBJdGVtICItbWJpZ3RhYmxlIgorVXNlIDMyXC1iaXQgb2Zmc2V0cyBpbiBcZihDV1wqKENgc3dpdGNoXCooQydcZlIgdGFibGVzLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlCisxNlwtYml0IG9mZnNldHMuCisuSVAgIlxmQlwtbWJpdG9wc1xmUiIgNAorLklYIEl0ZW0gIi1tYml0b3BzIgorRW5hYmxlIHRoZSB1c2Ugb2YgYml0IG1hbmlwdWxhdGlvbiBpbnN0cnVjdGlvbnMgb24gXHMtMVNIMkFcczAuCisuSVAgIlxmQlwtbWZtb3ZkXGZSIiA0CisuSVggSXRlbSAiLW1mbW92ZCIKK0VuYWJsZSB0aGUgdXNlIG9mIHRoZSBpbnN0cnVjdGlvbiBcZihDV1wqKENgZm1vdmRcKihDJ1xmUi4gIENoZWNrIFxmQlwtbWRhbGlnblxmUiBmb3IKK2FsaWdubWVudCBjb25zdHJhaW50cy4KKy5JUCAiXGZCXC1taGl0YWNoaVxmUiIgNAorLklYIEl0ZW0gIi1taGl0YWNoaSIKK0NvbXBseSB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGRlZmluZWQgYnkgUmVuZXNhcy4KKy5JUCAiXGZCXC1tcmVuZXNhc1xmUiIgNAorLklYIEl0ZW0gIi1tcmVuZXNhcyIKK0NvbXBseSB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGRlZmluZWQgYnkgUmVuZXNhcy4KKy5JUCAiXGZCXC1tbm9cLXJlbmVzYXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXJlbmVzYXMiCitDb21wbHkgd2l0aCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBkZWZpbmVkIGZvciBccy0xR0NDXHMwIGJlZm9yZSB0aGUgUmVuZXNhcworY29udmVudGlvbnMgd2VyZSBhdmFpbGFibGUuICBUaGlzIG9wdGlvbiBpcyB0aGUgZGVmYXVsdCBmb3IgYWxsCit0YXJnZXRzIG9mIHRoZSBccy0xU0hcczAgdG9vbGNoYWluLgorLklQICJcZkJcLW1ub21hY3NhdmVcZlIiIDQKKy5JWCBJdGVtICItbW5vbWFjc2F2ZSIKK01hcmsgdGhlIFxmKENXXCooQ2BNQUNcKihDJ1xmUiByZWdpc3RlciBhcyBjYWxsLWNsb2JiZXJlZCwgZXZlbiBpZgorXCZcZkJcLW1oaXRhY2hpXGZSIGlzIGdpdmVuLgorLklQICJcZkJcLW1pZWVlXGZSIiA0CisuSVggSXRlbSAiLW1pZWVlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWllZWVcZlIiIDQKKy5JWCBJdGVtICItbW5vLWllZWUiCisuUEQKK0NvbnRyb2wgdGhlIFxzLTFJRUVFXHMwIGNvbXBsaWFuY2Ugb2YgZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbnMsIHdoaWNoIGFmZmVjdHMgdGhlCitoYW5kbGluZyBvZiBjYXNlcyB3aGVyZSB0aGUgcmVzdWx0IG9mIGEgY29tcGFyaXNvbiBpcyB1bm9yZGVyZWQuICBCeSBkZWZhdWx0CitcJlxmQlwtbWllZWVcZlIgaXMgaW1wbGljaXRseSBlbmFibGVkLiAgSWYgXGZCXC1mZmluaXRlXC1tYXRoXC1vbmx5XGZSIGlzCitlbmFibGVkIFxmQlwtbW5vXC1pZWVlXGZSIGlzIGltcGxpY2l0bHkgc2V0LCB3aGljaCByZXN1bHRzIGluIGZhc3RlcgorZmxvYXRpbmctcG9pbnQgZ3JlYXRlci1lcXVhbCBhbmQgbGVzcy1lcXVhbCBjb21wYXJpc29ucy4gIFRoZSBpbXBsY2l0IHNldHRpbmdzCitjYW4gYmUgb3ZlcnJpZGRlbiBieSBzcGVjaWZ5aW5nIGVpdGhlciBcZkJcLW1pZWVlXGZSIG9yIFxmQlwtbW5vXC1pZWVlXGZSLgorLklQICJcZkJcLW1pbmxpbmVcLWljX2ludmFsaWRhdGVcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1pY19pbnZhbGlkYXRlIgorSW5saW5lIGNvZGUgdG8gaW52YWxpZGF0ZSBpbnN0cnVjdGlvbiBjYWNoZSBlbnRyaWVzIGFmdGVyIHNldHRpbmcgdXAKK25lc3RlZCBmdW5jdGlvbiB0cmFtcG9saW5lcy4KK1RoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgaWYgXGZCXC1tdXNlcm1vZGVcZlIgaXMgaW4gZWZmZWN0IGFuZCB0aGUgc2VsZWN0ZWQKK2NvZGUgZ2VuZXJhdGlvbiBvcHRpb24gKGUuZy4gXGZCXC1tNFxmUikgZG9lcyBub3QgYWxsb3cgdGhlIHVzZSBvZiB0aGUgXGYoQ1dcKihDYGljYmlcKihDJ1xmUgoraW5zdHJ1Y3Rpb24uCitJZiB0aGUgc2VsZWN0ZWQgY29kZSBnZW5lcmF0aW9uIG9wdGlvbiBkb2VzIG5vdCBhbGxvdyB0aGUgdXNlIG9mIHRoZSBcZihDV1wqKENgaWNiaVwqKEMnXGZSCitpbnN0cnVjdGlvbiwgYW5kIFxmQlwtbXVzZXJtb2RlXGZSIGlzIG5vdCBpbiBlZmZlY3QsIHRoZSBpbmxpbmVkIGNvZGUKK21hbmlwdWxhdGVzIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBhZGRyZXNzIGFycmF5IGRpcmVjdGx5IHdpdGggYW4gYXNzb2NpYXRpdmUKK3dyaXRlLiAgVGhpcyBub3Qgb25seSByZXF1aXJlcyBwcml2aWxlZ2VkIG1vZGUgYXQgcnVuIHRpbWUsIGJ1dCBpdCBhbHNvCitmYWlscyBpZiB0aGUgY2FjaGUgbGluZSBoYWQgYmVlbiBtYXBwZWQgdmlhIHRoZSBccy0xVExCXHMwIGFuZCBoYXMgYmVjb21lIHVubWFwcGVkLgorLklQICJcZkJcLW1pc2l6ZVxmUiIgNAorLklYIEl0ZW0gIi1taXNpemUiCitEdW1wIGluc3RydWN0aW9uIHNpemUgYW5kIGxvY2F0aW9uIGluIHRoZSBhc3NlbWJseSBjb2RlLgorLklQICJcZkJcLW1wYWRzdHJ1Y3RcZlIiIDQKKy5JWCBJdGVtICItbXBhZHN0cnVjdCIKK1RoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuICBJdCBwYWRzIHN0cnVjdHVyZXMgdG8gbXVsdGlwbGUgb2YgNCBieXRlcywKK3doaWNoIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBccy0xU0hcczAgXHMtMUFCSVxzMC4KKy5JUCAiXGZCXC1tYXRvbWljXC1tb2RlbD1cZlJcZkltb2RlbFxmUiIgNAorLklYIEl0ZW0gIi1tYXRvbWljLW1vZGVsPW1vZGVsIgorU2V0cyB0aGUgbW9kZWwgb2YgYXRvbWljIG9wZXJhdGlvbnMgYW5kIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcyBhIGNvbW1hCitzZXBhcmF0ZWQgbGlzdC4gIEZvciBkZXRhaWxzIG9uIHRoZSBhdG9taWMgYnVpbHQtaW4gZnVuY3Rpb25zIHNlZQorXCZcZkJfXHxfYXRvbWljIEJ1aWx0aW5zXGZSLiAgVGhlIGZvbGxvd2luZyBtb2RlbHMgYW5kIHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZDoKKy5SUyA0CisuSVAgIlxmQm5vbmVcZlIiIDQKKy5JWCBJdGVtICJub25lIgorRGlzYWJsZSBjb21waWxlciBnZW5lcmF0ZWQgYXRvbWljIHNlcXVlbmNlcyBhbmQgZW1pdCBsaWJyYXJ5IGNhbGxzIGZvciBhdG9taWMKK29wZXJhdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB0YXJnZXQgaXMgbm90IFxmKENXXCooQ2BzaFwtKlwtbGludXgqXCooQydcZlIuCisuSVAgIlxmQnNvZnQtZ3VzYVxmUiIgNAorLklYIEl0ZW0gInNvZnQtZ3VzYSIKK0dlbmVyYXRlIEdOVS9MaW51eCBjb21wYXRpYmxlIGdVU0Egc29mdHdhcmUgYXRvbWljIHNlcXVlbmNlcyBmb3IgdGhlIGF0b21pYworYnVpbHQtaW4gZnVuY3Rpb25zLiAgVGhlIGdlbmVyYXRlZCBhdG9taWMgc2VxdWVuY2VzIHJlcXVpcmUgYWRkaXRpb25hbCBzdXBwb3J0Citmcm9tIHRoZSBpbnRlcnJ1cHQvZXhjZXB0aW9uIGhhbmRsaW5nIGNvZGUgb2YgdGhlIHN5c3RlbSBhbmQgYXJlIG9ubHkgc3VpdGFibGUKK2ZvciBTSDMqIGFuZCBTSDQqIHNpbmdsZS1jb3JlIHN5c3RlbXMuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbgordGhlIHRhcmdldCBpcyBcZihDV1wqKENgc2hcLSpcLWxpbnV4KlwqKEMnXGZSIGFuZCBTSDMqIG9yIFNINCouICBXaGVuIHRoZSB0YXJnZXQgaXMgXHMtMVNINEFcczAsCit0aGlzIG9wdGlvbiB3aWxsIGFsc28gcGFydGlhbGx5IHV0aWxpemUgdGhlIGhhcmR3YXJlIGF0b21pYyBpbnN0cnVjdGlvbnMKK1wmXGYoQ1dcKihDYG1vdmxpLmxcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYG1vdmNvLmxcKihDJ1xmUiB0byBjcmVhdGUgbW9yZSBlZmZpY2llbnQgY29kZSwgdW5sZXNzCitcJlxmQnN0cmljdFxmUiBpcyBzcGVjaWZpZWQuCisuSVAgIlxmQnNvZnQtdGNiXGZSIiA0CisuSVggSXRlbSAic29mdC10Y2IiCitHZW5lcmF0ZSBzb2Z0d2FyZSBhdG9taWMgc2VxdWVuY2VzIHRoYXQgdXNlIGEgdmFyaWFibGUgaW4gdGhlIHRocmVhZCBjb250cm9sCitibG9jay4gIFRoaXMgaXMgYSB2YXJpYXRpb24gb2YgdGhlIGdVU0Egc2VxdWVuY2VzIHdoaWNoIGNhbiBhbHNvIGJlIHVzZWQgb24KK1NIMSogYW5kIFNIMiogdGFyZ2V0cy4gIFRoZSBnZW5lcmF0ZWQgYXRvbWljIHNlcXVlbmNlcyByZXF1aXJlIGFkZGl0aW9uYWwKK3N1cHBvcnQgZnJvbSB0aGUgaW50ZXJydXB0L2V4Y2VwdGlvbiBoYW5kbGluZyBjb2RlIG9mIHRoZSBzeXN0ZW0gYW5kIGFyZSBvbmx5CitzdWl0YWJsZSBmb3Igc2luZ2xlLWNvcmUgc3lzdGVtcy4gIFdoZW4gdXNpbmcgdGhpcyBtb2RlbCwgdGhlIFxmQmdiclwtb2Zmc2V0PVxmUgorcGFyYW1ldGVyIGhhcyB0byBiZSBzcGVjaWZpZWQgYXMgd2VsbC4KKy5JUCAiXGZCc29mdC1pbWFza1xmUiIgNAorLklYIEl0ZW0gInNvZnQtaW1hc2siCitHZW5lcmF0ZSBzb2Z0d2FyZSBhdG9taWMgc2VxdWVuY2VzIHRoYXQgdGVtcG9yYXJpbHkgZGlzYWJsZSBpbnRlcnJ1cHRzIGJ5CitzZXR0aW5nIFxmKENXXCooQ2BTUi5JTUFTSyA9IDExMTFcKihDJ1xmUi4gIFRoaXMgbW9kZWwgd29ya3Mgb25seSB3aGVuIHRoZSBwcm9ncmFtIHJ1bnMKK2luIHByaXZpbGVnZWQgbW9kZSBhbmQgaXMgb25seSBzdWl0YWJsZSBmb3Igc2luZ2xlLWNvcmUgc3lzdGVtcy4gIEFkZGl0aW9uYWwKK3N1cHBvcnQgZnJvbSB0aGUgaW50ZXJydXB0L2V4Y2VwdGlvbiBoYW5kbGluZyBjb2RlIG9mIHRoZSBzeXN0ZW0gaXMgbm90CityZXF1aXJlZC4gIFRoaXMgbW9kZWwgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gdGhlIHRhcmdldCBpcworXCZcZihDV1wqKENgc2hcLSpcLWxpbnV4KlwqKEMnXGZSIGFuZCBTSDEqIG9yIFNIMiouCisuSVAgIlxmQmhhcmQtbGxjc1xmUiIgNAorLklYIEl0ZW0gImhhcmQtbGxjcyIKK0dlbmVyYXRlIGhhcmR3YXJlIGF0b21pYyBzZXF1ZW5jZXMgdXNpbmcgdGhlIFxmKENXXCooQ2Btb3ZsaS5sXCooQydcZlIgYW5kIFxmKENXXCooQ2Btb3Zjby5sXCooQydcZlIKK2luc3RydWN0aW9ucyBvbmx5LiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBvbiBccy0xU0g0QVxzMCBhbmQgaXMgc3VpdGFibGUgZm9yCittdWx0aS1jb3JlIHN5c3RlbXMuICBTaW5jZSB0aGUgaGFyZHdhcmUgaW5zdHJ1Y3Rpb25zIHN1cHBvcnQgb25seSAzMiBiaXQgYXRvbWljCit2YXJpYWJsZXMgYWNjZXNzIHRvIDggb3IgMTYgYml0IHZhcmlhYmxlcyBpcyBlbXVsYXRlZCB3aXRoIDMyIGJpdCBhY2Nlc3Nlcy4KK0NvZGUgY29tcGlsZWQgd2l0aCB0aGlzIG9wdGlvbiB3aWxsIGFsc28gYmUgY29tcGF0aWJsZSB3aXRoIG90aGVyIHNvZnR3YXJlCithdG9taWMgbW9kZWwgaW50ZXJydXB0L2V4Y2VwdGlvbiBoYW5kbGluZyBzeXN0ZW1zIGlmIGV4ZWN1dGVkIG9uIGFuIFxzLTFTSDRBXHMwCitzeXN0ZW0uICBBZGRpdGlvbmFsIHN1cHBvcnQgZnJvbSB0aGUgaW50ZXJydXB0L2V4Y2VwdGlvbiBoYW5kbGluZyBjb2RlIG9mIHRoZQorc3lzdGVtIGlzIG5vdCByZXF1aXJlZCBmb3IgdGhpcyBtb2RlbC4KKy5JUCAiXGZCZ2JyXC1vZmZzZXQ9XGZSIiA0CisuSVggSXRlbSAiZ2JyLW9mZnNldD0iCitUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG9mZnNldCBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUgaW4gdGhlIHRocmVhZAorY29udHJvbCBibG9jayBzdHJ1Y3R1cmUgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB0aGUgZ2VuZXJhdGVkIGF0b21pYyBzZXF1ZW5jZXMKK3doZW4gdGhlIFxmQnNvZnQtdGNiXGZSIG1vZGVsIGhhcyBiZWVuIHNlbGVjdGVkLiAgRm9yIG90aGVyIG1vZGVscyB0aGlzCitwYXJhbWV0ZXIgaXMgaWdub3JlZC4gIFRoZSBzcGVjaWZpZWQgdmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIGZvdXIKK2FuZCBpbiB0aGUgcmFuZ2UgMFwtMTAyMC4KKy5JUCAiXGZCc3RyaWN0XGZSIiA0CisuSVggSXRlbSAic3RyaWN0IgorVGhpcyBwYXJhbWV0ZXIgcHJldmVudHMgbWl4ZWQgdXNhZ2Ugb2YgbXVsdGlwbGUgYXRvbWljIG1vZGVscywgZXZlbiB0aG91Z2ggdGhleQord291bGQgYmUgY29tcGF0aWJsZSwgYW5kIHdpbGwgbWFrZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGUgYXRvbWljIHNlcXVlbmNlcyBvZiB0aGUKK3NwZWNpZmllZCBtb2RlbCBvbmx5LgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbXRhc1xmUiIgNAorLklYIEl0ZW0gIi1tdGFzIgorR2VuZXJhdGUgdGhlIFxmKENXXCooQ2B0YXMuYlwqKEMnXGZSIG9wY29kZSBmb3IgXGYoQ1dcKihDYF9cfF9hdG9taWNfdGVzdF9hbmRfc2V0XCooQydcZlIuCitOb3RpY2UgdGhhdCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24KK3RoaXMgY2FuIGRlZ3JhZGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIG9wZXJhbmQgY2FjaGUgbGluZSBmbHVzaGVzCit0aGF0IGFyZSBpbXBsaWVkIGJ5IHRoZSBcZihDV1wqKENgdGFzLmJcKihDJ1xmUiBpbnN0cnVjdGlvbi4gIE9uIG11bHRpLWNvcmUgXHMtMVNINEFcczAKK3Byb2Nlc3NvcnMgdGhlIFxmKENXXCooQ2B0YXMuYlwqKEMnXGZSIGluc3RydWN0aW9uIG11c3QgYmUgdXNlZCB3aXRoIGNhdXRpb24gc2luY2UgaXQKK2NhbiByZXN1bHQgaW4gZGF0YSBjb3JydXB0aW9uIGZvciBjZXJ0YWluIGNhY2hlIGNvbmZpZ3VyYXRpb25zLgorLklQICJcZkJcLW1zcGFjZVxmUiIgNAorLklYIEl0ZW0gIi1tc3BhY2UiCitPcHRpbWl6ZSBmb3Igc3BhY2UgaW5zdGVhZCBvZiBzcGVlZC4gIEltcGxpZWQgYnkgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1tcHJlZmVyZ290XGZSIiA0CisuSVggSXRlbSAiLW1wcmVmZXJnb3QiCitXaGVuIGdlbmVyYXRpbmcgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSwgZW1pdCBmdW5jdGlvbiBjYWxscyB1c2luZwordGhlIEdsb2JhbCBPZmZzZXQgVGFibGUgaW5zdGVhZCBvZiB0aGUgUHJvY2VkdXJlIExpbmthZ2UgVGFibGUuCisuSVAgIlxmQlwtbXVzZXJtb2RlXGZSIiA0CisuSVggSXRlbSAiLW11c2VybW9kZSIKK0Rvbid0IGdlbmVyYXRlIHByaXZpbGVnZWQgbW9kZSBvbmx5IGNvZGUuICBUaGlzIG9wdGlvbgoraW1wbGllcyBcZkJcLW1ub1wtaW5saW5lXC1pY19pbnZhbGlkYXRlXGZSCitpZiB0aGUgaW5saW5lZCBjb2RlIHdvdWxkIG5vdCB3b3JrIGluIHVzZXIgbW9kZS4KK1RoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgdGFyZ2V0IGlzIFxmKENXXCooQ2BzaFwtKlwtbGludXgqXCooQydcZlIuCisuSVAgIlxmQlwtbXVsdGNvc3Q9XGZSXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAiLW11bHRjb3N0PW51bWJlciIKK1NldCB0aGUgY29zdCB0byBhc3N1bWUgZm9yIGEgbXVsdGlwbHkgaW5zbi4KKy5JUCAiXGZCXC1tZGl2PVxmUlxmSXN0cmF0ZWd5XGZSIiA0CisuSVggSXRlbSAiLW1kaXY9c3RyYXRlZ3kiCitTZXQgdGhlIGRpdmlzaW9uIHN0cmF0ZWd5IHRvIGJlIHVzZWQgZm9yIGludGVnZXIgZGl2aXNpb24gb3BlcmF0aW9ucy4KK0ZvciBTSG1lZGlhIFxmSXN0cmF0ZWd5XGZSIGNhbiBiZSBvbmUgb2Y6CisuUlMgNAorLklQICJcZkJmcFxmUiIgNAorLklYIEl0ZW0gImZwIgorUGVyZm9ybXMgdGhlIG9wZXJhdGlvbiBpbiBmbG9hdGluZyBwb2ludC4gIFRoaXMgaGFzIGEgdmVyeSBoaWdoIGxhdGVuY3ksCitidXQgbmVlZHMgb25seSBhIGZldyBpbnN0cnVjdGlvbnMsIHNvIGl0IG1pZ2h0IGJlIGEgZ29vZCBjaG9pY2UgaWYKK3lvdXIgY29kZSBoYXMgZW5vdWdoIGVhc2lseS1leHBsb2l0YWJsZSBccy0xSUxQXHMwIHRvIGFsbG93IHRoZSBjb21waWxlciB0bworc2NoZWR1bGUgdGhlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyB0b2dldGhlciB3aXRoIG90aGVyIGluc3RydWN0aW9ucy4KK0RpdmlzaW9uIGJ5IHplcm8gY2F1c2VzIGEgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uLgorLklQICJcZkJpbnZcZlIiIDQKKy5JWCBJdGVtICJpbnYiCitVc2VzIGludGVnZXIgb3BlcmF0aW9ucyB0byBjYWxjdWxhdGUgdGhlIGludmVyc2Ugb2YgdGhlIGRpdmlzb3IsCithbmQgdGhlbiBtdWx0aXBsaWVzIHRoZSBkaXZpZGVuZCB3aXRoIHRoZSBpbnZlcnNlLiAgVGhpcyBzdHJhdGVneSBhbGxvd3MKK1wmXHMtMUNTRVxzMCBhbmQgaG9pc3Rpbmcgb2YgdGhlIGludmVyc2UgY2FsY3VsYXRpb24uICBEaXZpc2lvbiBieSB6ZXJvIGNhbGN1bGF0ZXMKK2FuIHVuc3BlY2lmaWVkIHJlc3VsdCwgYnV0IGRvZXMgbm90IHRyYXAuCisuSVAgIlxmQmludjptaW5sYXRcZlIiIDQKKy5JWCBJdGVtICJpbnY6bWlubGF0IgorQSB2YXJpYW50IG9mIFxmQmludlxmUiB3aGVyZSwgaWYgbm8gXHMtMUNTRVxzMCBvciBob2lzdGluZyBvcHBvcnR1bml0aWVzCitoYXZlIGJlZW4gZm91bmQsIG9yIGlmIHRoZSBlbnRpcmUgb3BlcmF0aW9uIGhhcyBiZWVuIGhvaXN0ZWQgdG8gdGhlIHNhbWUKK3BsYWNlLCB0aGUgbGFzdCBzdGFnZXMgb2YgdGhlIGludmVyc2UgY2FsY3VsYXRpb24gYXJlIGludGVydHdpbmVkIHdpdGggdGhlCitmaW5hbCBtdWx0aXBseSB0byByZWR1Y2UgdGhlIG92ZXJhbGwgbGF0ZW5jeSwgYXQgdGhlIGV4cGVuc2Ugb2YgdXNpbmcgYSBmZXcKK21vcmUgaW5zdHJ1Y3Rpb25zLCBhbmQgdGh1cyBvZmZlcmluZyBmZXdlciBzY2hlZHVsaW5nIG9wcG9ydHVuaXRpZXMgd2l0aAorb3RoZXIgY29kZS4KKy5JUCAiXGZCY2FsbFxmUiIgNAorLklYIEl0ZW0gImNhbGwiCitDYWxscyBhIGxpYnJhcnkgZnVuY3Rpb24gdGhhdCB1c3VhbGx5IGltcGxlbWVudHMgdGhlIFxmQmludjptaW5sYXRcZlIKK3N0cmF0ZWd5LgorVGhpcyBnaXZlcyBoaWdoIGNvZGUgZGVuc2l0eSBmb3IgXGYoQ1dcKihDYG01XC0qbWVkaWFcLW5vZnB1XCooQydcZlIgY29tcGlsYXRpb25zLgorLklQICJcZkJjYWxsMlxmUiIgNAorLklYIEl0ZW0gImNhbGwyIgorVXNlcyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBvZiB0aGUgc2FtZSBsaWJyYXJ5IGZ1bmN0aW9uLCB3aGVyZSBpdAorYXNzdW1lcyB0aGF0IGEgcG9pbnRlciB0byBhIGxvb2t1cCB0YWJsZSBoYXMgYWxyZWFkeSBiZWVuIHNldCB1cCwgd2hpY2gKK2V4cG9zZXMgdGhlIHBvaW50ZXIgbG9hZCB0byBccy0xQ1NFXHMwIGFuZCBjb2RlIGhvaXN0aW5nIG9wdGltaXphdGlvbnMuCisuSVAgIlxmQmludjpjYWxsXGZSIiA0CisuSVggSXRlbSAiaW52OmNhbGwiCisuUEQgMAorLklQICJcZkJpbnY6Y2FsbDJcZlIiIDQKKy5JWCBJdGVtICJpbnY6Y2FsbDIiCisuSVAgIlxmQmludjpmcFxmUiIgNAorLklYIEl0ZW0gImludjpmcCIKKy5QRAorVXNlIHRoZSBcZkJpbnZcZlIgYWxnb3JpdGhtIGZvciBpbml0aWFsCitjb2RlIGdlbmVyYXRpb24sIGJ1dCBpZiB0aGUgY29kZSBzdGF5cyB1bm9wdGltaXplZCwgcmV2ZXJ0IHRvIHRoZSBcZkJjYWxsXGZSLAorXCZcZkJjYWxsMlxmUiwgb3IgXGZCZnBcZlIgc3RyYXRlZ2llcywgcmVzcGVjdGl2ZWx5LiAgTm90ZSB0aGF0IHRoZQorcG90ZW50aWFsbHktdHJhcHBpbmcgc2lkZSBlZmZlY3Qgb2YgZGl2aXNpb24gYnkgemVybyBpcyBjYXJyaWVkIGJ5IGEKK3NlcGFyYXRlIGluc3RydWN0aW9uLCBzbyBpdCBpcyBwb3NzaWJsZSB0aGF0IGFsbCB0aGUgaW50ZWdlciBpbnN0cnVjdGlvbnMKK2FyZSBob2lzdGVkIG91dCwgYnV0IHRoZSBtYXJrZXIgZm9yIHRoZSBzaWRlIGVmZmVjdCBzdGF5cyB3aGVyZSBpdCBpcy4KK0EgcmVjb21iaW5hdGlvbiB0byBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIG9yIGEgY2FsbCBpcyBub3QgcG9zc2libGUKK2luIHRoYXQgY2FzZS4KKy5JUCAiXGZCaW52MjB1XGZSIiA0CisuSVggSXRlbSAiaW52MjB1IgorLlBEIDAKKy5JUCAiXGZCaW52MjBsXGZSIiA0CisuSVggSXRlbSAiaW52MjBsIgorLlBECitWYXJpYW50cyBvZiB0aGUgXGZCaW52Om1pbmxhdFxmUiBzdHJhdGVneS4gIEluIHRoZSBjYXNlCit0aGF0IHRoZSBpbnZlcnNlIGNhbGN1bGF0aW9uIGlzIG5vdCBzZXBhcmF0ZWQgZnJvbSB0aGUgbXVsdGlwbHksIHRoZXkgc3BlZWQKK3VwIGRpdmlzaW9uIHdoZXJlIHRoZSBkaXZpZGVuZCBmaXRzIGludG8gMjAgYml0cyAocGx1cyBzaWduIHdoZXJlIGFwcGxpY2FibGUpCitieSBpbnNlcnRpbmcgYSB0ZXN0IHRvIHNraXAgYSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBpbiB0aGlzIGNhc2U7IHRoaXMgdGVzdAorc2xvd3MgZG93biB0aGUgY2FzZSBvZiBsYXJnZXIgZGl2aWRlbmRzLiAgXGZCaW52MjB1XGZSIGFzc3VtZXMgdGhlIGNhc2Ugb2YgYSBzdWNoCithIHNtYWxsIGRpdmlkZW5kIHRvIGJlIHVubGlrZWx5LCBhbmQgXGZCaW52MjBsXGZSIGFzc3VtZXMgaXQgdG8gYmUgbGlrZWx5LgorLlJFCisuUlMgNAorLlNwCitGb3IgdGFyZ2V0cyBvdGhlciB0aGFuIFNIbWVkaWEgXGZJc3RyYXRlZ3lcZlIgY2FuIGJlIG9uZSBvZjoKKy5JUCAiXGZCY2FsbFwtZGl2MVxmUiIgNAorLklYIEl0ZW0gImNhbGwtZGl2MSIKK0NhbGxzIGEgbGlicmFyeSBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIHNpbmdsZS1zdGVwIGRpdmlzaW9uIGluc3RydWN0aW9uCitcJlxmKENXXCooQ2BkaXYxXCooQydcZlIgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiAgRGl2aXNpb24gYnkgemVybyBjYWxjdWxhdGVzIGFuCit1bnNwZWNpZmllZCByZXN1bHQgYW5kIGRvZXMgbm90IHRyYXAuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGV4Y2VwdCBmb3IgXHMtMVNINFxzMCwKK1wmXHMtMVNIMkFcczAgYW5kIFNIY29tcGFjdC4KKy5JUCAiXGZCY2FsbC1mcFxmUiIgNAorLklYIEl0ZW0gImNhbGwtZnAiCitDYWxscyBhIGxpYnJhcnkgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyB0aGUgb3BlcmF0aW9uIGluIGRvdWJsZSBwcmVjaXNpb24KK2Zsb2F0aW5nIHBvaW50LiAgRGl2aXNpb24gYnkgemVybyBjYXVzZXMgYSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24uICBUaGlzIGlzCit0aGUgZGVmYXVsdCBmb3IgU0hjb21wYWN0IHdpdGggXHMtMUZQVVxzMC4gIFNwZWNpZnlpbmcgdGhpcyBmb3IgdGFyZ2V0cyB0aGF0IGRvIG5vdAoraGF2ZSBhIGRvdWJsZSBwcmVjaXNpb24gXHMtMUZQVVxzMCB3aWxsIGRlZmF1bHQgdG8gXGYoQ1dcKihDYGNhbGxcLWRpdjFcKihDJ1xmUi4KKy5JUCAiXGZCY2FsbC10YWJsZVxmUiIgNAorLklYIEl0ZW0gImNhbGwtdGFibGUiCitDYWxscyBhIGxpYnJhcnkgZnVuY3Rpb24gdGhhdCB1c2VzIGEgbG9va3VwIHRhYmxlIGZvciBzbWFsbCBkaXZpc29ycyBhbmQKK3RoZSBcZihDV1wqKENgZGl2MVwqKEMnXGZSIGluc3RydWN0aW9uIHdpdGggY2FzZSBkaXN0aW5jdGlvbiBmb3IgbGFyZ2VyIGRpdmlzb3JzLiAgRGl2aXNpb24KK2J5IHplcm8gY2FsY3VsYXRlcyBhbiB1bnNwZWNpZmllZCByZXN1bHQgYW5kIGRvZXMgbm90IHRyYXAuICBUaGlzIGlzIHRoZSBkZWZhdWx0Citmb3IgXHMtMVNINFxzMC4gIFNwZWNpZnlpbmcgdGhpcyBmb3IgdGFyZ2V0cyB0aGF0IGRvIG5vdCBoYXZlIGR5bmFtaWMgc2hpZnQKK2luc3RydWN0aW9ucyB3aWxsIGRlZmF1bHQgdG8gXGYoQ1dcKihDYGNhbGxcLWRpdjFcKihDJ1xmUi4KKy5SRQorLlJTIDQKKy5TcAorV2hlbiBhIGRpdmlzaW9uIHN0cmF0ZWd5IGhhcyBub3QgYmVlbiBzcGVjaWZpZWQgdGhlIGRlZmF1bHQgc3RyYXRlZ3kgd2lsbCBiZQorc2VsZWN0ZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGFyZ2V0LiAgRm9yIFxzLTFTSDJBXHMwIHRoZSBkZWZhdWx0IHN0cmF0ZWd5IGlzIHRvCit1c2UgdGhlIFxmKENXXCooQ2BkaXZzXCooQydcZlIgYW5kIFxmKENXXCooQ2BkaXZ1XCooQydcZlIgaW5zdHJ1Y3Rpb25zIGluc3RlYWQgb2YgbGlicmFyeSBmdW5jdGlvbgorY2FsbHMuCisuUkUKKy5JUCAiXGZCXC1tYWNjdW11bGF0ZVwtb3V0Z29pbmdcLWFyZ3NcZlIiIDQKKy5JWCBJdGVtICItbWFjY3VtdWxhdGUtb3V0Z29pbmctYXJncyIKK1Jlc2VydmUgc3BhY2Ugb25jZSBmb3Igb3V0Z29pbmcgYXJndW1lbnRzIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSByYXRoZXIKK3RoYW4gYXJvdW5kIGVhY2ggY2FsbC4gIEdlbmVyYWxseSBiZW5lZmljaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2l6ZS4gIEFsc28KK25lZWRlZCBmb3IgdW53aW5kaW5nIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBzdGFjayBmcmFtZSBhcm91bmQgY29uZGl0aW9uYWwgY29kZS4KKy5JUCAiXGZCXC1tZGl2c2kzX2xpYmZ1bmM9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tZGl2c2kzX2xpYmZ1bmM9bmFtZSIKK1NldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBmdW5jdGlvbiB1c2VkIGZvciAzMlwtYml0IHNpZ25lZCBkaXZpc2lvbiB0bworXCZcZkluYW1lXGZSLgorVGhpcyBvbmx5IGFmZmVjdHMgdGhlIG5hbWUgdXNlZCBpbiB0aGUgXGZCY2FsbFxmUiBhbmQgXGZCaW52OmNhbGxcZlIKK2RpdmlzaW9uIHN0cmF0ZWdpZXMsIGFuZCB0aGUgY29tcGlsZXIgc3RpbGwgZXhwZWN0cyB0aGUgc2FtZQorc2V0cyBvZiBpbnB1dC9vdXRwdXQvY2xvYmJlcmVkIHJlZ2lzdGVycyBhcyBpZiB0aGlzIG9wdGlvbiB3ZXJlIG5vdCBwcmVzZW50LgorLklQICJcZkJcLW1maXhlZFwtcmFuZ2U9XGZSXGZJcmVnaXN0ZXItcmFuZ2VcZlIiIDQKKy5JWCBJdGVtICItbWZpeGVkLXJhbmdlPXJlZ2lzdGVyLXJhbmdlIgorR2VuZXJhdGUgY29kZSB0cmVhdGluZyB0aGUgZ2l2ZW4gcmVnaXN0ZXIgcmFuZ2UgYXMgZml4ZWQgcmVnaXN0ZXJzLgorQSBmaXhlZCByZWdpc3RlciBpcyBvbmUgdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbiBub3QgdXNlLiAgVGhpcyBpcwordXNlZnVsIHdoZW4gY29tcGlsaW5nIGtlcm5lbCBjb2RlLiAgQSByZWdpc3RlciByYW5nZSBpcyBzcGVjaWZpZWQgYXMKK3R3byByZWdpc3RlcnMgc2VwYXJhdGVkIGJ5IGEgZGFzaC4gIE11bHRpcGxlIHJlZ2lzdGVyIHJhbmdlcyBjYW4gYmUKK3NwZWNpZmllZCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4KKy5JUCAiXGZCXC1taW5kZXhlZFwtYWRkcmVzc2luZ1xmUiIgNAorLklYIEl0ZW0gIi1taW5kZXhlZC1hZGRyZXNzaW5nIgorRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIGluZGV4ZWQgYWRkcmVzc2luZyBtb2RlIGZvciBTSG1lZGlhMzIvU0hjb21wYWN0LgorVGhpcyBpcyBvbmx5IHNhZmUgaWYgdGhlIGhhcmR3YXJlIGFuZC9vciBccy0xT1NcczAgaW1wbGVtZW50IDMyXC1iaXQgd3JhcC1hcm91bmQKK3NlbWFudGljcyBmb3IgdGhlIGluZGV4ZWQgYWRkcmVzc2luZyBtb2RlLiAgVGhlIGFyY2hpdGVjdHVyZSBhbGxvd3MgdGhlCitpbXBsZW1lbnRhdGlvbiBvZiBwcm9jZXNzb3JzIHdpdGggNjRcLWJpdCBccy0xTU1VXHMwLCB3aGljaCB0aGUgXHMtMU9TXHMwIGNvdWxkIHVzZSB0bworZ2V0IDMyXC1iaXQgYWRkcmVzc2luZywgYnV0IHNpbmNlIG5vIGN1cnJlbnQgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMKK3RoaXMgb3IgYW55IG90aGVyIHdheSB0byBtYWtlIHRoZSBpbmRleGVkIGFkZHJlc3NpbmcgbW9kZSBzYWZlIHRvIHVzZSBpbgordGhlIDMyXC1iaXQgXHMtMUFCSVxzMCwgdGhlIGRlZmF1bHQgaXMgXGZCXC1tbm9cLWluZGV4ZWRcLWFkZHJlc3NpbmdcZlIuCisuSVAgIlxmQlwtbWdldHRyY29zdD1cZlJcZkludW1iZXJcZlIiIDQKKy5JWCBJdGVtICItbWdldHRyY29zdD1udW1iZXIiCitTZXQgdGhlIGNvc3QgYXNzdW1lZCBmb3IgdGhlIFxmKENXXCooQ2BnZXR0clwqKEMnXGZSIGluc3RydWN0aW9uIHRvIFxmSW51bWJlclxmUi4KK1RoZSBkZWZhdWx0IGlzIDIgaWYgXGZCXC1tcHRcLWZpeGVkXGZSIGlzIGluIGVmZmVjdCwgMTAwIG90aGVyd2lzZS4KKy5JUCAiXGZCXC1tcHRcLWZpeGVkXGZSIiA0CisuSVggSXRlbSAiLW1wdC1maXhlZCIKK0Fzc3VtZSBcZihDV1wqKENgcHQqXCooQydcZlIgaW5zdHJ1Y3Rpb25zIHdvbid0IHRyYXAuICBUaGlzIGdlbmVyYWxseSBnZW5lcmF0ZXMKK2JldHRlci1zY2hlZHVsZWQgY29kZSwgYnV0IGlzIHVuc2FmZSBvbiBjdXJyZW50IGhhcmR3YXJlLgorVGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlCitkZWZpbml0aW9uIHNheXMgdGhhdCBcZihDV1wqKENgcHRhYnNcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHB0cmVsXCooQydcZlIgdHJhcCB3aGVuIHRoZSB0YXJnZXQgCithbmRlZCB3aXRoIDMgaXMgMy4KK1RoaXMgaGFzIHRoZSB1bmludGVudGlvbmFsIGVmZmVjdCBvZiBtYWtpbmcgaXQgdW5zYWZlIHRvIHNjaGVkdWxlIHRoZXNlCitpbnN0cnVjdGlvbnMgYmVmb3JlIGEgYnJhbmNoLCBvciBob2lzdCB0aGVtIG91dCBvZiBhIGxvb3AuICBGb3IgZXhhbXBsZSwKK1wmXGYoQ1dcKihDYF9cfF9kb19nbG9iYWxfY3RvcnNcKihDJ1xmUiwgYSBwYXJ0IG9mIFxmSWxpYmdjY1xmUgordGhhdCBydW5zIGNvbnN0cnVjdG9ycyBhdCBwcm9ncmFtCitzdGFydHVwLCBjYWxscyBmdW5jdGlvbnMgaW4gYSBsaXN0IHdoaWNoIGlzIGRlbGltaXRlZCBieSBcLTEuICBXaXRoIHRoZQorXCZcZkJcLW1wdFwtZml4ZWRcZlIgb3B0aW9uLCB0aGUgXGYoQ1dcKihDYHB0YWJzXCooQydcZlIgaXMgZG9uZSBiZWZvcmUgdGVzdGluZyBhZ2FpbnN0IFwtMS4KK1RoYXQgbWVhbnMgdGhhdCBhbGwgdGhlIGNvbnN0cnVjdG9ycyBydW4gYSBiaXQgbW9yZSBxdWlja2x5LCBidXQgd2hlbgordGhlIGxvb3AgY29tZXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCwgdGhlIHByb2dyYW0gY3Jhc2hlcyBiZWNhdXNlIFxmKENXXCooQ2BwdGFic1wqKEMnXGZSCitsb2FkcyBcLTEgaW50byBhIHRhcmdldCByZWdpc3Rlci4KKy5TcAorU2luY2UgdGhpcyBvcHRpb24gaXMgdW5zYWZlIGZvciBhbnkKK2hhcmR3YXJlIGltcGxlbWVudGluZyB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbiwgdGhlIGRlZmF1bHQKK2lzIFxmQlwtbW5vXC1wdFwtZml4ZWRcZlIuICBVbmxlc3Mgc3BlY2lmaWVkIGV4cGxpY2l0bHkgd2l0aCAKK1wmXGZCXC1tZ2V0dHJjb3N0XGZSLCBcZkJcLW1ub1wtcHRcLWZpeGVkXGZSIGFsc28gaW1wbGllcyBcZkJcLW1nZXR0cmNvc3Q9MTAwXGZSOwordGhpcyBkZXRlcnMgcmVnaXN0ZXIgYWxsb2NhdGlvbiBmcm9tIHVzaW5nIHRhcmdldCByZWdpc3RlcnMgZm9yIHN0b3JpbmcKK29yZGluYXJ5IGludGVnZXJzLgorLklQICJcZkJcLW1pbnZhbGlkXC1zeW1ib2xzXGZSIiA0CisuSVggSXRlbSAiLW1pbnZhbGlkLXN5bWJvbHMiCitBc3N1bWUgc3ltYm9scyBtaWdodCBiZSBpbnZhbGlkLiAgT3JkaW5hcnkgZnVuY3Rpb24gc3ltYm9scyBnZW5lcmF0ZWQgYnkKK3RoZSBjb21waWxlciBhcmUgYWx3YXlzIHZhbGlkIHRvIGxvYWQgd2l0aAorXCZcZihDV1wqKENgbW92aVwqKEMnXGZSL1xmKENXXCooQ2BzaG9yaVwqKEMnXGZSL1xmKENXXCooQ2BwdGFic1wqKEMnXGZSIG9yCitcJlxmKENXXCooQ2Btb3ZpXCooQydcZlIvXGYoQ1dcKihDYHNob3JpXCooQydcZlIvXGYoQ1dcKihDYHB0cmVsXCooQydcZlIsCitidXQgd2l0aCBhc3NlbWJsZXIgYW5kL29yIGxpbmtlciB0cmlja3MgaXQgaXMgcG9zc2libGUKK3RvIGdlbmVyYXRlIHN5bWJvbHMgdGhhdCBjYXVzZSBcZihDV1wqKENgcHRhYnNcKihDJ1xmUiBvciBcZihDV1wqKENgcHRyZWxcKihDJ1xmUiB0byB0cmFwLgorVGhpcyBvcHRpb24gaXMgb25seSBtZWFuaW5nZnVsIHdoZW4gXGZCXC1tbm9cLXB0XC1maXhlZFxmUiBpcyBpbiBlZmZlY3QuCitJdCBwcmV2ZW50cyBjcm9zcy1iYXNpYy1ibG9jayBccy0xQ1NFXHMwLCBob2lzdGluZyBhbmQgbW9zdCBzY2hlZHVsaW5nCitvZiBzeW1ib2wgbG9hZHMuICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1ub1wtaW52YWxpZFwtc3ltYm9sc1xmUi4KKy5JUCAiXGZCXC1tYnJhbmNoXC1jb3N0PVxmUlxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1tYnJhbmNoLWNvc3Q9bnVtIgorQXNzdW1lIFxmSW51bVxmUiB0byBiZSB0aGUgY29zdCBmb3IgYSBicmFuY2ggaW5zdHJ1Y3Rpb24uICBIaWdoZXIgbnVtYmVycworbWFrZSB0aGUgY29tcGlsZXIgdHJ5IHRvIGdlbmVyYXRlIG1vcmUgYnJhbmNoLWZyZWUgY29kZSBpZiBwb3NzaWJsZS4gIAorSWYgbm90IHNwZWNpZmllZCB0aGUgdmFsdWUgaXMgc2VsZWN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBwcm9jZXNzb3IgdHlwZSB0aGF0CitpcyBiZWluZyBjb21waWxlZCBmb3IuCisuSVAgIlxmQlwtbXpkY2JyYW5jaFxmUiIgNAorLklYIEl0ZW0gIi1temRjYnJhbmNoIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXpkY2JyYW5jaFxmUiIgNAorLklYIEl0ZW0gIi1tbm8temRjYnJhbmNoIgorLlBECitBc3N1bWUgKGRvIG5vdCBhc3N1bWUpIHRoYXQgemVybyBkaXNwbGFjZW1lbnQgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9ucworXCZcZihDV1wqKENgYnRcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGJmXCooQydcZlIgYXJlIGZhc3QuICBJZiBcZkJcLW16ZGNicmFuY2hcZlIgaXMgc3BlY2lmaWVkLCB0aGUKK2NvbXBpbGVyIHdpbGwgdHJ5IHRvIHByZWZlciB6ZXJvIGRpc3BsYWNlbWVudCBicmFuY2ggY29kZSBzZXF1ZW5jZXMuICBUaGlzIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yIFxzLTFTSDRcczAgYW5kIFxzLTFTSDRBXHMwLiAgSXQgY2FuIGJlIGV4cGxpY2l0bHkKK2Rpc2FibGVkIGJ5IHNwZWNpZnlpbmcgXGZCXC1tbm9cLXpkY2JyYW5jaFxmUi4KKy5JUCAiXGZCXC1tY2JyYW5jaGRpXGZSIiA0CisuSVggSXRlbSAiLW1jYnJhbmNoZGkiCitFbmFibGUgdGhlIFxmKENXXCooQ2BjYnJhbmNoZGk0XCooQydcZlIgaW5zdHJ1Y3Rpb24gcGF0dGVybi4KKy5JUCAiXGZCXC1tY21wZXFkaVxmUiIgNAorLklYIEl0ZW0gIi1tY21wZXFkaSIKK0VtaXQgdGhlIFxmKENXXCooQ2BjbXBlcWRpX3RcKihDJ1xmUiBpbnN0cnVjdGlvbiBwYXR0ZXJuIGV2ZW4gd2hlbiBcZkJcLW1jYnJhbmNoZGlcZlIKK2lzIGluIGVmZmVjdC4KKy5JUCAiXGZCXC1tZnVzZWRcLW1hZGRcZlIiIDQKKy5JWCBJdGVtICItbWZ1c2VkLW1hZGQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZnVzZWRcLW1hZGRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZ1c2VkLW1hZGQiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBmbG9hdGluZy1wb2ludCBtdWx0aXBseSBhbmQKK2FjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zLiAgVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgZGVmYXVsdAoraWYgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQgaXMgdXNlZC4gIFRoZSBtYWNoaW5lLWRlcGVuZGVudAorXCZcZkJcLW1mdXNlZFwtbWFkZFxmUiBvcHRpb24gaXMgbm93IG1hcHBlZCB0byB0aGUgbWFjaGluZS1pbmRlcGVuZGVudAorXCZcZkJcLWZmcFwtY29udHJhY3Q9ZmFzdFxmUiBvcHRpb24sIGFuZCBcZkJcLW1ub1wtZnVzZWRcLW1hZGRcZlIgaXMKK21hcHBlZCB0byBcZkJcLWZmcFwtY29udHJhY3Q9b2ZmXGZSLgorLklQICJcZkJcLW1mc2NhXGZSIiA0CisuSVggSXRlbSAiLW1mc2NhIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZzY2FcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZzY2EiCisuUEQKK0FsbG93IG9yIGRpc2FsbG93IHRoZSBjb21waWxlciB0byBlbWl0IHRoZSBcZihDV1wqKENgZnNjYVwqKEMnXGZSIGluc3RydWN0aW9uIGZvciBzaW5lCithbmQgY29zaW5lIGFwcHJveGltYXRpb25zLiAgVGhlIG9wdGlvbiBcZihDV1wqKENgXC1tZnNjYVwqKEMnXGZSIG11c3QgYmUgdXNlZCBpbgorY29tYmluYXRpb24gd2l0aCBcZihDV1wqKENgXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXCooQydcZlIuICBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK3doZW4gZ2VuZXJhdGluZyBjb2RlIGZvciBccy0xU0g0QVxzMC4gIFVzaW5nIFxmKENXXCooQ2BcLW1ub1wtZnNjYVwqKEMnXGZSIGRpc2FibGVzIHNpbmUgYW5kIGNvc2luZQorYXBwcm94aW1hdGlvbnMgZXZlbiBpZiBcZihDV1wqKENgXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXCooQydcZlIgaXMgaW4gZWZmZWN0LgorLklQICJcZkJcLW1mc3JyYVxmUiIgNAorLklYIEl0ZW0gIi1tZnNycmEiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZnNycmFcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZzcnJhIgorLlBECitBbGxvdyBvciBkaXNhbGxvdyB0aGUgY29tcGlsZXIgdG8gZW1pdCB0aGUgXGYoQ1dcKihDYGZzcnJhXCooQydcZlIgaW5zdHJ1Y3Rpb24gZm9yCityZWNpcHJvY2FsIHNxdWFyZSByb290IGFwcHJveGltYXRpb25zLiAgVGhlIG9wdGlvbiBcZihDV1wqKENgXC1tZnNycmFcKihDJ1xmUiBtdXN0IGJlIHVzZWQKK2luIGNvbWJpbmF0aW9uIHdpdGggXGYoQ1dcKihDYFwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1wqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgXC1mZmluaXRlXC1tYXRoXC1vbmx5XCooQydcZlIuICBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yCitcJlxzLTFTSDRBXHMwLiAgVXNpbmcgXGYoQ1dcKihDYFwtbW5vXC1mc3JyYVwqKEMnXGZSIGRpc2FibGVzIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYXBwcm94aW1hdGlvbnMKK2V2ZW4gaWYgXGYoQ1dcKihDYFwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1wqKEMnXGZSIGFuZCBcZihDV1wqKENgXC1mZmluaXRlXC1tYXRoXC1vbmx5XCooQydcZlIgYXJlCitpbiBlZmZlY3QuCisuSVAgIlxmQlwtbXByZXRlbmRcLWNtb3ZlXGZSIiA0CisuSVggSXRlbSAiLW1wcmV0ZW5kLWNtb3ZlIgorUHJlZmVyIHplcm8tZGlzcGxhY2VtZW50IGNvbmRpdGlvbmFsIGJyYW5jaGVzIGZvciBjb25kaXRpb25hbCBtb3ZlIGluc3RydWN0aW9uCitwYXR0ZXJucy4gIFRoaXMgY2FuIHJlc3VsdCBpbiBmYXN0ZXIgY29kZSBvbiB0aGUgXHMtMVNINFxzMCBwcm9jZXNzb3IuCisuUFAKK1xmSVNvbGFyaXMgMiBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiU29sYXJpcyAyIE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgb24gU29sYXJpcyAyOgorLklQICJcZkJcLW1pbXB1cmVcLXRleHRcZlIiIDQKKy5JWCBJdGVtICItbWltcHVyZS10ZXh0IgorXCZcZkJcLW1pbXB1cmVcLXRleHRcZlIsIHVzZWQgaW4gYWRkaXRpb24gdG8gXGZCXC1zaGFyZWRcZlIsIHRlbGxzCit0aGUgY29tcGlsZXIgdG8gbm90IHBhc3MgXGZCXC16IHRleHRcZlIgdG8gdGhlIGxpbmtlciB3aGVuIGxpbmtpbmcgYQorc2hhcmVkIG9iamVjdC4gIFVzaW5nIHRoaXMgb3B0aW9uLCB5b3UgY2FuIGxpbmsgcG9zaXRpb24tZGVwZW5kZW50Citjb2RlIGludG8gYSBzaGFyZWQgb2JqZWN0LgorLlNwCitcJlxmQlwtbWltcHVyZVwtdGV4dFxmUiBzdXBwcmVzc2VzIHRoZSBcKihMInJlbG9jYXRpb25zIHJlbWFpbiBhZ2FpbnN0CithbGxvY2F0YWJsZSBidXQgbm9uLXdyaXRhYmxlIHNlY3Rpb25zXCooUiIgbGlua2VyIGVycm9yIG1lc3NhZ2UuCitIb3dldmVyLCB0aGUgbmVjZXNzYXJ5IHJlbG9jYXRpb25zIHRyaWdnZXIgY29weS1vbi13cml0ZSwgYW5kIHRoZQorc2hhcmVkIG9iamVjdCBpcyBub3QgYWN0dWFsbHkgc2hhcmVkIGFjcm9zcyBwcm9jZXNzZXMuICBJbnN0ZWFkIG9mCit1c2luZyBcZkJcLW1pbXB1cmVcLXRleHRcZlIsIHlvdSBzaG91bGQgY29tcGlsZSBhbGwgc291cmNlIGNvZGUgd2l0aAorXCZcZkJcLWZwaWNcZlIgb3IgXGZCXC1mUElDXGZSLgorLlBQCitUaGVzZSBzd2l0Y2hlcyBhcmUgc3VwcG9ydGVkIGluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBvbiBTb2xhcmlzIDI6CisuSVAgIlxmQlwtcHRocmVhZHNcZlIiIDQKKy5JWCBJdGVtICItcHRocmVhZHMiCitBZGQgc3VwcG9ydCBmb3IgbXVsdGl0aHJlYWRpbmcgdXNpbmcgdGhlIFxzLTFQT1NJWFxzMCB0aHJlYWRzIGxpYnJhcnkuICBUaGlzCitvcHRpb24gc2V0cyBmbGFncyBmb3IgYm90aCB0aGUgcHJlcHJvY2Vzc29yIGFuZCBsaW5rZXIuICBUaGlzIG9wdGlvbiBkb2VzCitub3QgYWZmZWN0IHRoZSB0aHJlYWQgc2FmZXR5IG9mIG9iamVjdCBjb2RlIHByb2R1Y2VkICBieSB0aGUgY29tcGlsZXIgb3IKK3RoYXQgb2YgbGlicmFyaWVzIHN1cHBsaWVkIHdpdGggaXQuCisuSVAgIlxmQlwtcHRocmVhZFxmUiIgNAorLklYIEl0ZW0gIi1wdGhyZWFkIgorVGhpcyBpcyBhIHN5bm9ueW0gZm9yIFxmQlwtcHRocmVhZHNcZlIuCisuUFAKK1xmSVxzLTFTUEFSQ1xzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiU1BBUkMgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBvbiB0aGUgXHMtMVNQQVJDOlxzMAorLklQICJcZkJcLW1ub1wtYXBwXC1yZWdzXGZSIiA0CisuSVggSXRlbSAiLW1uby1hcHAtcmVncyIKKy5QRCAwCisuSVAgIlxmQlwtbWFwcFwtcmVnc1xmUiIgNAorLklYIEl0ZW0gIi1tYXBwLXJlZ3MiCisuUEQKK1NwZWNpZnkgXGZCXC1tYXBwXC1yZWdzXGZSIHRvIGdlbmVyYXRlIG91dHB1dCB1c2luZyB0aGUgZ2xvYmFsIHJlZ2lzdGVycworMiB0aHJvdWdoIDQsIHdoaWNoIHRoZSBccy0xU1BBUkNcczAgXHMtMVNWUjRcczAgXHMtMUFCSVxzMCByZXNlcnZlcyBmb3IgYXBwbGljYXRpb25zLiAgVGhpcworaXMgdGhlIGRlZmF1bHQuCisuU3AKK1RvIGJlIGZ1bGx5IFxzLTFTVlI0XHMwIEFCSS1jb21wbGlhbnQgYXQgdGhlIGNvc3Qgb2Ygc29tZSBwZXJmb3JtYW5jZSBsb3NzLAorc3BlY2lmeSBcZkJcLW1ub1wtYXBwXC1yZWdzXGZSLiAgWW91IHNob3VsZCBjb21waWxlIGxpYnJhcmllcyBhbmQgc3lzdGVtCitzb2Z0d2FyZSB3aXRoIHRoaXMgb3B0aW9uLgorLklQICJcZkJcLW1mbGF0XGZSIiA0CisuSVggSXRlbSAiLW1mbGF0IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZsYXRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZsYXQiCisuUEQKK1dpdGggXGZCXC1tZmxhdFxmUiwgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGdlbmVyYXRlIHNhdmUvcmVzdG9yZSBpbnN0cnVjdGlvbnMKK2FuZCB1c2VzIGEgXCooTCJmbGF0XCooUiIgb3Igc2luZ2xlIHJlZ2lzdGVyIHdpbmRvdyBtb2RlbC4gIFRoaXMgbW9kZWwgaXMgY29tcGF0aWJsZQord2l0aCB0aGUgcmVndWxhciByZWdpc3RlciB3aW5kb3cgbW9kZWwuICBUaGUgbG9jYWwgcmVnaXN0ZXJzIGFuZCB0aGUgaW5wdXQKK3JlZ2lzdGVycyAoMFwtXC01KSBhcmUgc3RpbGwgdHJlYXRlZCBhcyBcKihMImNhbGwtc2F2ZWRcKihSIiByZWdpc3RlcnMgYW5kIGFyZQorc2F2ZWQgb24gdGhlIHN0YWNrIGFzIG5lZWRlZC4KKy5TcAorV2l0aCBcZkJcLW1ub1wtZmxhdFxmUiAodGhlIGRlZmF1bHQpLCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIHNhdmUvcmVzdG9yZQoraW5zdHJ1Y3Rpb25zIChleGNlcHQgZm9yIGxlYWYgZnVuY3Rpb25zKS4gIFRoaXMgaXMgdGhlIG5vcm1hbCBvcGVyYXRpbmcgbW9kZS4KKy5JUCAiXGZCXC1tZnB1XGZSIiA0CisuSVggSXRlbSAiLW1mcHUiCisuUEQgMAorLklQICJcZkJcLW1oYXJkXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1taGFyZC1mbG9hdCIKKy5QRAorR2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuCisuSVAgIlxmQlwtbW5vXC1mcHVcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZwdSIKKy5QRCAwCisuSVAgIlxmQlwtbXNvZnRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1zb2Z0LWZsb2F0IgorLlBECitHZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBsaWJyYXJ5IGNhbGxzIGZvciBmbG9hdGluZyBwb2ludC4KK1wmXGZCV2FybmluZzpcZlIgdGhlIHJlcXVpc2l0ZSBsaWJyYXJpZXMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGFsbCBccy0xU1BBUkNcczAKK3RhcmdldHMuICBOb3JtYWxseSB0aGUgZmFjaWxpdGllcyBvZiB0aGUgbWFjaGluZSdzIHVzdWFsIEMgY29tcGlsZXIgYXJlCit1c2VkLCBidXQgdGhpcyBjYW5ub3QgYmUgZG9uZSBkaXJlY3RseSBpbiBjcm9zcy1jb21waWxhdGlvbi4gIFlvdSBtdXN0IG1ha2UKK3lvdXIgb3duIGFycmFuZ2VtZW50cyB0byBwcm92aWRlIHN1aXRhYmxlIGxpYnJhcnkgZnVuY3Rpb25zIGZvcgorY3Jvc3MtY29tcGlsYXRpb24uICBUaGUgZW1iZWRkZWQgdGFyZ2V0cyBcZkJzcGFyY1wtKlwtYW91dFxmUiBhbmQKK1wmXGZCc3BhcmNsaXRlXC0qXC0qXGZSIGRvIHByb3ZpZGUgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgc3VwcG9ydC4KKy5TcAorXCZcZkJcLW1zb2Z0XC1mbG9hdFxmUiBjaGFuZ2VzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gaW4gdGhlIG91dHB1dCBmaWxlOwordGhlcmVmb3JlLCBpdCBpcyBvbmx5IHVzZWZ1bCBpZiB5b3UgY29tcGlsZSBcZklhbGxcZlIgb2YgYSBwcm9ncmFtIHdpdGgKK3RoaXMgb3B0aW9uLiAgSW4gcGFydGljdWxhciwgeW91IG5lZWQgdG8gY29tcGlsZSBcZklsaWJnY2MuYVxmUiwgdGhlCitsaWJyYXJ5IHRoYXQgY29tZXMgd2l0aCBccy0xR0NDXHMwLCB3aXRoIFxmQlwtbXNvZnRcLWZsb2F0XGZSIGluIG9yZGVyIGZvcgordGhpcyB0byB3b3JrLgorLklQICJcZkJcLW1oYXJkXC1xdWFkXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1taGFyZC1xdWFkLWZsb2F0IgorR2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcgcXVhZC13b3JkIChsb25nIGRvdWJsZSkgZmxvYXRpbmctcG9pbnQKK2luc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tc29mdFwtcXVhZFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtcXVhZC1mbG9hdCIKK0dlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIGxpYnJhcnkgY2FsbHMgZm9yIHF1YWQtd29yZCAobG9uZyBkb3VibGUpCitmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuICBUaGUgZnVuY3Rpb25zIGNhbGxlZCBhcmUgdGhvc2Ugc3BlY2lmaWVkCitpbiB0aGUgXHMtMVNQQVJDXHMwIFxzLTFBQklcczAuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLlNwCitBcyBvZiB0aGlzIHdyaXRpbmcsIHRoZXJlIGFyZSBubyBccy0xU1BBUkNcczAgaW1wbGVtZW50YXRpb25zIHRoYXQgaGF2ZSBoYXJkd2FyZQorc3VwcG9ydCBmb3IgdGhlIHF1YWQtd29yZCBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuICBUaGV5IGFsbCBpbnZva2UKK2EgdHJhcCBoYW5kbGVyIGZvciBvbmUgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zLCBhbmQgdGhlbiB0aGUgdHJhcCBoYW5kbGVyCitlbXVsYXRlcyB0aGUgZWZmZWN0IG9mIHRoZSBpbnN0cnVjdGlvbi4gIEJlY2F1c2Ugb2YgdGhlIHRyYXAgaGFuZGxlciBvdmVyaGVhZCwKK3RoaXMgaXMgbXVjaCBzbG93ZXIgdGhhbiBjYWxsaW5nIHRoZSBccy0xQUJJXHMwIGxpYnJhcnkgcm91dGluZXMuICBUaHVzIHRoZQorXCZcZkJcLW1zb2Z0XC1xdWFkXC1mbG9hdFxmUiBvcHRpb24gaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbW5vXC11bmFsaWduZWRcLWRvdWJsZXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXVuYWxpZ25lZC1kb3VibGVzIgorLlBEIDAKKy5JUCAiXGZCXC1tdW5hbGlnbmVkXC1kb3VibGVzXGZSIiA0CisuSVggSXRlbSAiLW11bmFsaWduZWQtZG91YmxlcyIKKy5QRAorQXNzdW1lIHRoYXQgZG91YmxlcyBoYXZlIDhcLWJ5dGUgYWxpZ25tZW50LiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5TcAorV2l0aCBcZkJcLW11bmFsaWduZWRcLWRvdWJsZXNcZlIsIFxzLTFHQ0NcczAgYXNzdW1lcyB0aGF0IGRvdWJsZXMgaGF2ZSA4XC1ieXRlCithbGlnbm1lbnQgb25seSBpZiB0aGV5IGFyZSBjb250YWluZWQgaW4gYW5vdGhlciB0eXBlLCBvciBpZiB0aGV5IGhhdmUgYW4KK2Fic29sdXRlIGFkZHJlc3MuICBPdGhlcndpc2UsIGl0IGFzc3VtZXMgdGhleSBoYXZlIDRcLWJ5dGUgYWxpZ25tZW50LgorU3BlY2lmeWluZyB0aGlzIG9wdGlvbiBhdm9pZHMgc29tZSByYXJlIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMgd2l0aCBjb2RlCitnZW5lcmF0ZWQgYnkgb3RoZXIgY29tcGlsZXJzLiAgSXQgaXMgbm90IHRoZSBkZWZhdWx0IGJlY2F1c2UgaXQgcmVzdWx0cworaW4gYSBwZXJmb3JtYW5jZSBsb3NzLCBlc3BlY2lhbGx5IGZvciBmbG9hdGluZy1wb2ludCBjb2RlLgorLklQICJcZkJcLW1ub1wtZmFzdGVyXC1zdHJ1Y3RzXGZSIiA0CisuSVggSXRlbSAiLW1uby1mYXN0ZXItc3RydWN0cyIKKy5QRCAwCisuSVAgIlxmQlwtbWZhc3Rlclwtc3RydWN0c1xmUiIgNAorLklYIEl0ZW0gIi1tZmFzdGVyLXN0cnVjdHMiCisuUEQKK1dpdGggXGZCXC1tZmFzdGVyXC1zdHJ1Y3RzXGZSLCB0aGUgY29tcGlsZXIgYXNzdW1lcyB0aGF0IHN0cnVjdHVyZXMKK3Nob3VsZCBoYXZlIDhcLWJ5dGUgYWxpZ25tZW50LiAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgcGFpcnMgb2YKK1wmXGYoQ1dcKihDYGxkZFwqKEMnXGZSIGFuZCBcZihDV1wqKENgc3RkXCooQydcZlIgaW5zdHJ1Y3Rpb25zIGZvciBjb3BpZXMgaW4gc3RydWN0dXJlCithc3NpZ25tZW50LCBpbiBwbGFjZSBvZiB0d2ljZSBhcyBtYW55IFxmKENXXCooQ2BsZFwqKEMnXGZSIGFuZCBcZihDV1wqKENgc3RcKihDJ1xmUiBwYWlycy4KK0hvd2V2ZXIsIHRoZSB1c2Ugb2YgdGhpcyBjaGFuZ2VkIGFsaWdubWVudCBkaXJlY3RseSB2aW9sYXRlcyB0aGUgXHMtMVNQQVJDXHMwCitcJlxzLTFBQklcczAuICBUaHVzLCBpdCdzIGludGVuZGVkIG9ubHkgZm9yIHVzZSBvbiB0YXJnZXRzIHdoZXJlIHRoZSBkZXZlbG9wZXIKK2Fja25vd2xlZGdlcyB0aGF0IHRoZWlyIHJlc3VsdGluZyBjb2RlIGlzIG5vdCBkaXJlY3RseSBpbiBsaW5lIHdpdGgKK3RoZSBydWxlcyBvZiB0aGUgXHMtMUFCSVxzMC4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSWNwdV90eXBlXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9Y3B1X3R5cGUiCitTZXQgdGhlIGluc3RydWN0aW9uIHNldCwgcmVnaXN0ZXIgc2V0LCBhbmQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBwYXJhbWV0ZXJzCitmb3IgbWFjaGluZSB0eXBlIFxmSWNwdV90eXBlXGZSLiAgU3VwcG9ydGVkIHZhbHVlcyBmb3IgXGZJY3B1X3R5cGVcZlIgYXJlCitcJlxmQnY3XGZSLCBcZkJjeXByZXNzXGZSLCBcZkJ2OFxmUiwgXGZCc3VwZXJzcGFyY1xmUiwgXGZCaHlwZXJzcGFyY1xmUiwKK1wmXGZCbGVvblxmUiwgXGZCc3BhcmNsaXRlXGZSLCBcZkJmOTMwXGZSLCBcZkJmOTM0XGZSLCBcZkJzcGFyY2xpdGU4NnhcZlIsCitcJlxmQnNwYXJjbGV0XGZSLCBcZkJ0c2M3MDFcZlIsIFxmQnY5XGZSLCBcZkJ1bHRyYXNwYXJjXGZSLAorXCZcZkJ1bHRyYXNwYXJjM1xmUiwgXGZCbmlhZ2FyYVxmUiwgXGZCbmlhZ2FyYTJcZlIsIFxmQm5pYWdhcmEzXGZSLAorYW5kIFxmQm5pYWdhcmE0XGZSLgorLlNwCitOYXRpdmUgU29sYXJpcyBhbmQgR05VL0xpbnV4IHRvb2xjaGFpbnMgYWxzbyBzdXBwb3J0IHRoZSB2YWx1ZSBcZkJuYXRpdmVcZlIsCit3aGljaCBzZWxlY3RzIHRoZSBiZXN0IGFyY2hpdGVjdHVyZSBvcHRpb24gZm9yIHRoZSBob3N0IHByb2Nlc3Nvci4KK1wmXGZCXC1tY3B1PW5hdGl2ZVxmUiBoYXMgbm8gZWZmZWN0IGlmIFxzLTFHQ0NcczAgZG9lcyBub3QgcmVjb2duaXplCit0aGUgcHJvY2Vzc29yLgorLlNwCitEZWZhdWx0IGluc3RydWN0aW9uIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBhcmUgdXNlZCBmb3IgdmFsdWVzIHRoYXQgc2VsZWN0CithbiBhcmNoaXRlY3R1cmUgYW5kIG5vdCBhbiBpbXBsZW1lbnRhdGlvbi4gIFRoZXNlIGFyZSBcZkJ2N1xmUiwgXGZCdjhcZlIsCitcJlxmQnNwYXJjbGl0ZVxmUiwgXGZCc3BhcmNsZXRcZlIsIFxmQnY5XGZSLgorLlNwCitIZXJlIGlzIGEgbGlzdCBvZiBlYWNoIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmUgYW5kIHRoZWlyIHN1cHBvcnRlZAoraW1wbGVtZW50YXRpb25zLgorLlJTIDQKKy5JUCAidjciIDQKKy5JWCBJdGVtICJ2NyIKK2N5cHJlc3MKKy5JUCAidjgiIDQKKy5JWCBJdGVtICJ2OCIKK3N1cGVyc3BhcmMsIGh5cGVyc3BhcmMsIGxlb24KKy5JUCAic3BhcmNsaXRlIiA0CisuSVggSXRlbSAic3BhcmNsaXRlIgorZjkzMCwgZjkzNCwgc3BhcmNsaXRlODZ4CisuSVAgInNwYXJjbGV0IiA0CisuSVggSXRlbSAic3BhcmNsZXQiCit0c2M3MDEKKy5JUCAidjkiIDQKKy5JWCBJdGVtICJ2OSIKK3VsdHJhc3BhcmMsIHVsdHJhc3BhcmMzLCBuaWFnYXJhLCBuaWFnYXJhMiwgbmlhZ2FyYTMsIG5pYWdhcmE0CisuUkUKKy5SUyA0CisuU3AKK0J5IGRlZmF1bHQgKHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZSksIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoZSBWNwordmFyaWFudCBvZiB0aGUgXHMtMVNQQVJDXHMwIGFyY2hpdGVjdHVyZS4gIFdpdGggXGZCXC1tY3B1PWN5cHJlc3NcZlIsIHRoZSBjb21waWxlcgorYWRkaXRpb25hbGx5IG9wdGltaXplcyBpdCBmb3IgdGhlIEN5cHJlc3MgXHMtMUNZN0M2MDJcczAgY2hpcCwgYXMgdXNlZCBpbiB0aGUKK1NQQVJDU3RhdGlvbi9TUEFSQ1NlcnZlciAzeHggc2VyaWVzLiAgVGhpcyBpcyBhbHNvIGFwcHJvcHJpYXRlIGZvciB0aGUgb2xkZXIKK1NQQVJDU3RhdGlvbiAxLCAyLCBccy0xSVBYXHMwIGV0Yy4KKy5TcAorV2l0aCBcZkJcLW1jcHU9djhcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoZSBWOCB2YXJpYW50IG9mIHRoZSBccy0xU1BBUkNcczAKK2FyY2hpdGVjdHVyZS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSBWNyBjb2RlIGlzIHRoYXQgdGhlIGNvbXBpbGVyIGVtaXRzCit0aGUgaW50ZWdlciBtdWx0aXBseSBhbmQgaW50ZWdlciBkaXZpZGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIGV4aXN0IGluIFxzLTFTUEFSQ1wtVjhcczAKK2J1dCBub3QgaW4gXHMtMVNQQVJDXC1WN1xzMC4gIFdpdGggXGZCXC1tY3B1PXN1cGVyc3BhcmNcZlIsIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkKK29wdGltaXplcyBpdCBmb3IgdGhlIFN1cGVyU1BBUkMgY2hpcCwgYXMgdXNlZCBpbiB0aGUgU1BBUkNTdGF0aW9uIDEwLCAxMDAwIGFuZAorMjAwMCBzZXJpZXMuCisuU3AKK1dpdGggXGZCXC1tY3B1PXNwYXJjbGl0ZVxmUiwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIFNQQVJDbGl0ZSB2YXJpYW50IG9mCit0aGUgXHMtMVNQQVJDXHMwIGFyY2hpdGVjdHVyZS4gIFRoaXMgYWRkcyB0aGUgaW50ZWdlciBtdWx0aXBseSwgaW50ZWdlciBkaXZpZGUgc3RlcAorYW5kIHNjYW4gKFxmKENXXCooQ2BmZnNcKihDJ1xmUikgaW5zdHJ1Y3Rpb25zIHdoaWNoIGV4aXN0IGluIFNQQVJDbGl0ZSBidXQgbm90IGluIFxzLTFTUEFSQ1wtVjdcczAuCitXaXRoIFxmQlwtbWNwdT1mOTMwXGZSLCB0aGUgY29tcGlsZXIgYWRkaXRpb25hbGx5IG9wdGltaXplcyBpdCBmb3IgdGhlCitGdWppdHN1IFxzLTFNQjg2OTMwXHMwIGNoaXAsIHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBTUEFSQ2xpdGUsIHdpdGggbm8gXHMtMUZQVVxzMC4gIFdpdGgKK1wmXGZCXC1tY3B1PWY5MzRcZlIsIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciB0aGUgRnVqaXRzdQorXCZccy0xTUI4NjkzNFxzMCBjaGlwLCB3aGljaCBpcyB0aGUgbW9yZSByZWNlbnQgU1BBUkNsaXRlIHdpdGggXHMtMUZQVVxzMC4KKy5TcAorV2l0aCBcZkJcLW1jcHU9c3BhcmNsZXRcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoZSBTUEFSQ2xldCB2YXJpYW50IG9mCit0aGUgXHMtMVNQQVJDXHMwIGFyY2hpdGVjdHVyZS4gIFRoaXMgYWRkcyB0aGUgaW50ZWdlciBtdWx0aXBseSwgbXVsdGlwbHkvYWNjdW11bGF0ZSwKK2ludGVnZXIgZGl2aWRlIHN0ZXAgYW5kIHNjYW4gKFxmKENXXCooQ2BmZnNcKihDJ1xmUikgaW5zdHJ1Y3Rpb25zIHdoaWNoIGV4aXN0IGluIFNQQVJDbGV0CitidXQgbm90IGluIFxzLTFTUEFSQ1wtVjdcczAuICBXaXRoIFxmQlwtbWNwdT10c2M3MDFcZlIsIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkKK29wdGltaXplcyBpdCBmb3IgdGhlIFxzLTFURU1JQ1xzMCBTUEFSQ2xldCBjaGlwLgorLlNwCitXaXRoIFxmQlwtbWNwdT12OVxmUiwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIFY5IHZhcmlhbnQgb2YgdGhlIFxzLTFTUEFSQ1xzMAorYXJjaGl0ZWN0dXJlLiAgVGhpcyBhZGRzIDY0XC1iaXQgaW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgbW92ZSBpbnN0cnVjdGlvbnMsCiszIGFkZGl0aW9uYWwgZmxvYXRpbmctcG9pbnQgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzIGFuZCBjb25kaXRpb25hbCBtb3ZlCitpbnN0cnVjdGlvbnMuICBXaXRoIFxmQlwtbWNwdT11bHRyYXNwYXJjXGZSLCB0aGUgY29tcGlsZXIgYWRkaXRpb25hbGx5CitvcHRpbWl6ZXMgaXQgZm9yIHRoZSBTdW4gVWx0cmFTUEFSQyBJL0lJL0lJaSBjaGlwcy4gIFdpdGgKK1wmXGZCXC1tY3B1PXVsdHJhc3BhcmMzXGZSLCB0aGUgY29tcGlsZXIgYWRkaXRpb25hbGx5IG9wdGltaXplcyBpdCBmb3IgdGhlCitTdW4gVWx0cmFTUEFSQyBJSUkvSUlJKy9JSUlpL0lJSWkrL0lWL0lWKyBjaGlwcy4gIFdpdGgKK1wmXGZCXC1tY3B1PW5pYWdhcmFcZlIsIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvcgorU3VuIFVsdHJhU1BBUkMgVDEgY2hpcHMuICBXaXRoIFxmQlwtbWNwdT1uaWFnYXJhMlxmUiwgdGhlIGNvbXBpbGVyCithZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciBTdW4gVWx0cmFTUEFSQyBUMiBjaGlwcy4gV2l0aAorXCZcZkJcLW1jcHU9bmlhZ2FyYTNcZlIsIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciBTdW4KK1VsdHJhU1BBUkMgVDMgY2hpcHMuICBXaXRoIFxmQlwtbWNwdT1uaWFnYXJhNFxmUiwgdGhlIGNvbXBpbGVyCithZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciBTdW4gVWx0cmFTUEFSQyBUNCBjaGlwcy4KKy5SRQorLklQICJcZkJcLW10dW5lPVxmUlxmSWNwdV90eXBlXGZSIiA0CisuSVggSXRlbSAiLW10dW5lPWNwdV90eXBlIgorU2V0IHRoZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIG1hY2hpbmUgdHlwZQorXCZcZkljcHVfdHlwZVxmUiwgYnV0IGRvIG5vdCBzZXQgdGhlIGluc3RydWN0aW9uIHNldCBvciByZWdpc3RlciBzZXQgdGhhdCB0aGUKK29wdGlvbiBcZkJcLW1jcHU9XGZSXGZJY3B1X3R5cGVcZlIgZG9lcy4KKy5TcAorVGhlIHNhbWUgdmFsdWVzIGZvciBcZkJcLW1jcHU9XGZSXGZJY3B1X3R5cGVcZlIgY2FuIGJlIHVzZWQgZm9yCitcJlxmQlwtbXR1bmU9XGZSXGZJY3B1X3R5cGVcZlIsIGJ1dCB0aGUgb25seSB1c2VmdWwgdmFsdWVzIGFyZSB0aG9zZQordGhhdCBzZWxlY3QgYSBwYXJ0aWN1bGFyIFxzLTFDUFVcczAgaW1wbGVtZW50YXRpb24uICBUaG9zZSBhcmUgXGZCY3lwcmVzc1xmUiwKK1wmXGZCc3VwZXJzcGFyY1xmUiwgXGZCaHlwZXJzcGFyY1xmUiwgXGZCbGVvblxmUiwgXGZCZjkzMFxmUiwgXGZCZjkzNFxmUiwKK1wmXGZCc3BhcmNsaXRlODZ4XGZSLCBcZkJ0c2M3MDFcZlIsIFxmQnVsdHJhc3BhcmNcZlIsIFxmQnVsdHJhc3BhcmMzXGZSLAorXCZcZkJuaWFnYXJhXGZSLCBcZkJuaWFnYXJhMlxmUiwgXGZCbmlhZ2FyYTNcZlIgYW5kIFxmQm5pYWdhcmE0XGZSLiAgV2l0aAorbmF0aXZlIFNvbGFyaXMgYW5kIEdOVS9MaW51eCB0b29sY2hhaW5zLCBcZkJuYXRpdmVcZlIgY2FuIGFsc28gYmUgdXNlZC4KKy5JUCAiXGZCXC1tdjhwbHVzXGZSIiA0CisuSVggSXRlbSAiLW12OHBsdXMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdjhwbHVzXGZSIiA0CisuSVggSXRlbSAiLW1uby12OHBsdXMiCisuUEQKK1dpdGggXGZCXC1tdjhwbHVzXGZSLCBccy0xR0NDXHMwIGdlbmVyYXRlcyBjb2RlIGZvciB0aGUgXHMtMVNQQVJDXC1WOCtcczAgXHMtMUFCSVxzMC4gIFRoZQorZGlmZmVyZW5jZSBmcm9tIHRoZSBWOCBccy0xQUJJXHMwIGlzIHRoYXQgdGhlIGdsb2JhbCBhbmQgb3V0IHJlZ2lzdGVycyBhcmUKK2NvbnNpZGVyZWQgNjQgYml0cyB3aWRlLiAgVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gU29sYXJpcyBpbiAzMlwtYml0Cittb2RlIGZvciBhbGwgXHMtMVNQQVJDXC1WOVxzMCBwcm9jZXNzb3JzLgorLklQICJcZkJcLW12aXNcZlIiIDQKKy5JWCBJdGVtICItbXZpcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC12aXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXZpcyIKKy5QRAorV2l0aCBcZkJcLW12aXNcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIFVsdHJhU1BBUkMKK1Zpc3VhbCBJbnN0cnVjdGlvbiBTZXQgZXh0ZW5zaW9ucy4gIFRoZSBkZWZhdWx0IGlzIFxmQlwtbW5vXC12aXNcZlIuCisuSVAgIlxmQlwtbXZpczJcZlIiIDQKKy5JWCBJdGVtICItbXZpczIiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdmlzMlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tdmlzMiIKKy5QRAorV2l0aCBcZkJcLW12aXMyXGZSLCBccy0xR0NDXHMwIGdlbmVyYXRlcyBjb2RlIHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mCit2ZXJzaW9uIDIuMCBvZiB0aGUgVWx0cmFTUEFSQyBWaXN1YWwgSW5zdHJ1Y3Rpb24gU2V0IGV4dGVuc2lvbnMuICBUaGUKK2RlZmF1bHQgaXMgXGZCXC1tdmlzMlxmUiB3aGVuIHRhcmdldGluZyBhIGNwdSB0aGF0IHN1cHBvcnRzIHN1Y2gKK2luc3RydWN0aW9ucywgc3VjaCBhcyBVbHRyYVNQQVJDLUlJSSBhbmQgbGF0ZXIuICBTZXR0aW5nIFxmQlwtbXZpczJcZlIKK2Fsc28gc2V0cyBcZkJcLW12aXNcZlIuCisuSVAgIlxmQlwtbXZpczNcZlIiIDQKKy5JWCBJdGVtICItbXZpczMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdmlzM1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tdmlzMyIKKy5QRAorV2l0aCBcZkJcLW12aXMzXGZSLCBccy0xR0NDXHMwIGdlbmVyYXRlcyBjb2RlIHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mCit2ZXJzaW9uIDMuMCBvZiB0aGUgVWx0cmFTUEFSQyBWaXN1YWwgSW5zdHJ1Y3Rpb24gU2V0IGV4dGVuc2lvbnMuICBUaGUKK2RlZmF1bHQgaXMgXGZCXC1tdmlzM1xmUiB3aGVuIHRhcmdldGluZyBhIGNwdSB0aGF0IHN1cHBvcnRzIHN1Y2gKK2luc3RydWN0aW9ucywgc3VjaCBhcyBuaWFnYXJhXC0zIGFuZCBsYXRlci4gIFNldHRpbmcgXGZCXC1tdmlzM1xmUgorYWxzbyBzZXRzIFxmQlwtbXZpczJcZlIgYW5kIFxmQlwtbXZpc1xmUi4KKy5JUCAiXGZCXC1tY2Jjb25kXGZSIiA0CisuSVggSXRlbSAiLW1jYmNvbmQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtY2Jjb25kXGZSIiA0CisuSVggSXRlbSAiLW1uby1jYmNvbmQiCisuUEQKK1dpdGggXGZCXC1tY2Jjb25kXGZSLCBccy0xR0NDXHMwIGdlbmVyYXRlcyBjb2RlIHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mCitjb21wYXJlLWFuZC1icmFuY2ggaW5zdHJ1Y3Rpb25zLCBhcyBkZWZpbmVkIGluIHRoZSBTcGFyYyBBcmNoaXRlY3R1cmUgMjAxMS4KK1RoZSBkZWZhdWx0IGlzIFxmQlwtbWNiY29uZFxmUiB3aGVuIHRhcmdldGluZyBhIGNwdSB0aGF0IHN1cHBvcnRzIHN1Y2gKK2luc3RydWN0aW9ucywgc3VjaCBhcyBuaWFnYXJhXC00IGFuZCBsYXRlci4KKy5JUCAiXGZCXC1tcG9wY1xmUiIgNAorLklYIEl0ZW0gIi1tcG9wYyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1wb3BjXGZSIiA0CisuSVggSXRlbSAiLW1uby1wb3BjIgorLlBECitXaXRoIFxmQlwtbXBvcGNcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIFVsdHJhU1BBUkMKK3BvcHVsYXRpb24gY291bnQgaW5zdHJ1Y3Rpb24uICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1wb3BjXGZSCit3aGVuIHRhcmdldGluZyBhIGNwdSB0aGF0IHN1cHBvcnRzIHN1Y2ggaW5zdHJ1Y3Rpb25zLCBzdWNoIGFzIE5pYWdhcmFcLTIgYW5kCitsYXRlci4KKy5JUCAiXGZCXC1tZm1hZlxmUiIgNAorLklYIEl0ZW0gIi1tZm1hZiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mbWFmXGZSIiA0CisuSVggSXRlbSAiLW1uby1mbWFmIgorLlBECitXaXRoIFxmQlwtbWZtYWZcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIFVsdHJhU1BBUkMKK0Z1c2VkIE11bHRpcGx5LUFkZCBGbG9hdGluZy1wb2ludCBleHRlbnNpb25zLiAgVGhlIGRlZmF1bHQgaXMgXGZCXC1tZm1hZlxmUgord2hlbiB0YXJnZXRpbmcgYSBjcHUgdGhhdCBzdXBwb3J0cyBzdWNoIGluc3RydWN0aW9ucywgc3VjaCBhcyBOaWFnYXJhXC0zIGFuZAorbGF0ZXIuCisuSVAgIlxmQlwtbWZpeFwtYXQ2OTdmXGZSIiA0CisuSVggSXRlbSAiLW1maXgtYXQ2OTdmIgorRW5hYmxlIHRoZSBkb2N1bWVudGVkIHdvcmthcm91bmQgZm9yIHRoZSBzaW5nbGUgZXJyYXR1bSBvZiB0aGUgQXRtZWwgXHMtMUFUNjk3RlxzMAorcHJvY2Vzc29yICh3aGljaCBjb3JyZXNwb25kcyB0byBlcnJhdHVtICMxMyBvZiB0aGUgXHMtMUFUNjk3RVxzMCBwcm9jZXNzb3IpLgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZQorb24gXHMtMVNQQVJDXC1WOVxzMCBwcm9jZXNzb3JzIGluIDY0XC1iaXQgZW52aXJvbm1lbnRzOgorLklQICJcZkJcLW0zMlxmUiIgNAorLklYIEl0ZW0gIi1tMzIiCisuUEQgMAorLklQICJcZkJcLW02NFxmUiIgNAorLklYIEl0ZW0gIi1tNjQiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIGEgMzJcLWJpdCBvciA2NFwtYml0IGVudmlyb25tZW50LgorVGhlIDMyXC1iaXQgZW52aXJvbm1lbnQgc2V0cyBpbnQsIGxvbmcgYW5kIHBvaW50ZXIgdG8gMzIgYml0cy4KK1RoZSA2NFwtYml0IGVudmlyb25tZW50IHNldHMgaW50IHRvIDMyIGJpdHMgYW5kIGxvbmcgYW5kIHBvaW50ZXIKK3RvIDY0IGJpdHMuCisuSVAgIlxmQlwtbWNtb2RlbD1cZlJcZkl3aGljaFxmUiIgNAorLklYIEl0ZW0gIi1tY21vZGVsPXdoaWNoIgorU2V0IHRoZSBjb2RlIG1vZGVsIHRvIG9uZSBvZgorLlJTIDQKKy5JUCAiXGZCbWVkbG93XGZSIiA0CisuSVggSXRlbSAibWVkbG93IgorVGhlIE1lZGl1bS9Mb3cgY29kZSBtb2RlbDogNjRcLWJpdCBhZGRyZXNzZXMsIHByb2dyYW1zCittdXN0IGJlIGxpbmtlZCBpbiB0aGUgbG93IDMyIGJpdHMgb2YgbWVtb3J5LiAgUHJvZ3JhbXMgY2FuIGJlIHN0YXRpY2FsbHkKK29yIGR5bmFtaWNhbGx5IGxpbmtlZC4KKy5JUCAiXGZCbWVkbWlkXGZSIiA0CisuSVggSXRlbSAibWVkbWlkIgorVGhlIE1lZGl1bS9NaWRkbGUgY29kZSBtb2RlbDogNjRcLWJpdCBhZGRyZXNzZXMsIHByb2dyYW1zCittdXN0IGJlIGxpbmtlZCBpbiB0aGUgbG93IDQ0IGJpdHMgb2YgbWVtb3J5LCB0aGUgdGV4dCBhbmQgZGF0YSBzZWdtZW50cyBtdXN0CitiZSBsZXNzIHRoYW4gMkdCIGluIHNpemUgYW5kIHRoZSBkYXRhIHNlZ21lbnQgbXVzdCBiZSBsb2NhdGVkIHdpdGhpbiAyR0Igb2YKK3RoZSB0ZXh0IHNlZ21lbnQuCisuSVAgIlxmQm1lZGFueVxmUiIgNAorLklYIEl0ZW0gIm1lZGFueSIKK1RoZSBNZWRpdW0vQW55d2hlcmUgY29kZSBtb2RlbDogNjRcLWJpdCBhZGRyZXNzZXMsIHByb2dyYW1zCittYXkgYmUgbGlua2VkIGFueXdoZXJlIGluIG1lbW9yeSwgdGhlIHRleHQgYW5kIGRhdGEgc2VnbWVudHMgbXVzdCBiZSBsZXNzCit0aGFuIDJHQiBpbiBzaXplIGFuZCB0aGUgZGF0YSBzZWdtZW50IG11c3QgYmUgbG9jYXRlZCB3aXRoaW4gMkdCIG9mIHRoZQordGV4dCBzZWdtZW50LgorLklQICJcZkJlbWJtZWRhbnlcZlIiIDQKKy5JWCBJdGVtICJlbWJtZWRhbnkiCitUaGUgTWVkaXVtL0FueXdoZXJlIGNvZGUgbW9kZWwgZm9yIGVtYmVkZGVkIHN5c3RlbXM6Cis2NFwtYml0IGFkZHJlc3NlcywgdGhlIHRleHQgYW5kIGRhdGEgc2VnbWVudHMgbXVzdCBiZSBsZXNzIHRoYW4gMkdCIGluCitzaXplLCBib3RoIHN0YXJ0aW5nIGFueXdoZXJlIGluIG1lbW9yeSAoZGV0ZXJtaW5lZCBhdCBsaW5rIHRpbWUpLiAgVGhlCitnbG9iYWwgcmVnaXN0ZXIgXGYoQ1clZzRcZlIgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSBkYXRhIHNlZ21lbnQuICBQcm9ncmFtcworYXJlIHN0YXRpY2FsbHkgbGlua2VkIGFuZCBccy0xUElDXHMwIGlzIG5vdCBzdXBwb3J0ZWQuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tbWVtb3J5XC1tb2RlbD1cZlJcZkltZW0tbW9kZWxcZlIiIDQKKy5JWCBJdGVtICItbW1lbW9yeS1tb2RlbD1tZW0tbW9kZWwiCitTZXQgdGhlIG1lbW9yeSBtb2RlbCBpbiBmb3JjZSBvbiB0aGUgcHJvY2Vzc29yIHRvIG9uZSBvZgorLlJTIDQKKy5JUCAiXGZCZGVmYXVsdFxmUiIgNAorLklYIEl0ZW0gImRlZmF1bHQiCitUaGUgZGVmYXVsdCBtZW1vcnkgbW9kZWwgZm9yIHRoZSBwcm9jZXNzb3IgYW5kIG9wZXJhdGluZyBzeXN0ZW0uCisuSVAgIlxmQnJtb1xmUiIgNAorLklYIEl0ZW0gInJtbyIKK1JlbGF4ZWQgTWVtb3J5IE9yZGVyCisuSVAgIlxmQnBzb1xmUiIgNAorLklYIEl0ZW0gInBzbyIKK1BhcnRpYWwgU3RvcmUgT3JkZXIKKy5JUCAiXGZCdHNvXGZSIiA0CisuSVggSXRlbSAidHNvIgorVG90YWwgU3RvcmUgT3JkZXIKKy5JUCAiXGZCc2NcZlIiIDQKKy5JWCBJdGVtICJzYyIKK1NlcXVlbnRpYWwgQ29uc2lzdGVuY3kKKy5SRQorLlJTIDQKKy5TcAorVGhlc2UgbWVtb3J5IG1vZGVscyBhcmUgZm9ybWFsbHkgZGVmaW5lZCBpbiBBcHBlbmRpeCBEIG9mIHRoZSBTcGFyYyBWOQorYXJjaGl0ZWN0dXJlIG1hbnVhbCwgYXMgc2V0IGluIHRoZSBwcm9jZXNzb3IncyBcZihDV1wqKENgUFNUQVRFLk1NXCooQydcZlIgZmllbGQuCisuUkUKKy5JUCAiXGZCXC1tc3RhY2tcLWJpYXNcZlIiIDQKKy5JWCBJdGVtICItbXN0YWNrLWJpYXMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc3RhY2tcLWJpYXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXN0YWNrLWJpYXMiCisuUEQKK1dpdGggXGZCXC1tc3RhY2tcLWJpYXNcZlIsIFxzLTFHQ0NcczAgYXNzdW1lcyB0aGF0IHRoZSBzdGFjayBwb2ludGVyLCBhbmQKK2ZyYW1lIHBvaW50ZXIgaWYgcHJlc2VudCwgYXJlIG9mZnNldCBieSBcLTIwNDcgd2hpY2ggbXVzdCBiZSBhZGRlZCBiYWNrCit3aGVuIG1ha2luZyBzdGFjayBmcmFtZSByZWZlcmVuY2VzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpbiA2NFwtYml0IG1vZGUuCitPdGhlcndpc2UsIGFzc3VtZSBubyBzdWNoIG9mZnNldCBpcyBwcmVzZW50LgorLlBQCitcZklccy0xU1BVXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJTUFUgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBvbiB0aGUgXHMtMVNQVTpcczAKKy5JUCAiXGZCXC1td2FyblwtcmVsb2NcZlIiIDQKKy5JWCBJdGVtICItbXdhcm4tcmVsb2MiCisuUEQgMAorLklQICJcZkJcLW1lcnJvclwtcmVsb2NcZlIiIDQKKy5JWCBJdGVtICItbWVycm9yLXJlbG9jIgorLlBECitUaGUgbG9hZGVyIGZvciBccy0xU1BVXHMwIGRvZXMgbm90IGhhbmRsZSBkeW5hbWljIHJlbG9jYXRpb25zLiAgQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMAorZ2l2ZXMgYW4gZXJyb3Igd2hlbiBpdCBnZW5lcmF0ZXMgY29kZSB0aGF0IHJlcXVpcmVzIGEgZHluYW1pYworcmVsb2NhdGlvbi4gIFxmQlwtbW5vXC1lcnJvclwtcmVsb2NcZlIgZGlzYWJsZXMgdGhlIGVycm9yLAorXCZcZkJcLW13YXJuXC1yZWxvY1xmUiBnZW5lcmF0ZXMgYSB3YXJuaW5nIGluc3RlYWQuCisuSVAgIlxmQlwtbXNhZmVcLWRtYVxmUiIgNAorLklYIEl0ZW0gIi1tc2FmZS1kbWEiCisuUEQgMAorLklQICJcZkJcLW11bnNhZmVcLWRtYVxmUiIgNAorLklYIEl0ZW0gIi1tdW5zYWZlLWRtYSIKKy5QRAorSW5zdHJ1Y3Rpb25zIHRoYXQgaW5pdGlhdGUgb3IgdGVzdCBjb21wbGV0aW9uIG9mIFxzLTFETUFcczAgbXVzdCBub3QgYmUKK3Jlb3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gbG9hZHMgYW5kIHN0b3JlcyBvZiB0aGUgbWVtb3J5IHRoYXQgaXMgYmVpbmcKK2FjY2Vzc2VkLgorV2l0aCBcZkJcLW11bnNhZmVcLWRtYVxmUiB5b3UgbXVzdCB1c2UgdGhlIFxmKENXXCooQ2B2b2xhdGlsZVwqKEMnXGZSIGtleXdvcmQgdG8gcHJvdGVjdAorbWVtb3J5IGFjY2Vzc2VzLCBidXQgdGhhdCBjYW4gbGVhZCB0byBpbmVmZmljaWVudCBjb2RlIGluIHBsYWNlcyB3aGVyZSB0aGUKK21lbW9yeSBpcyBrbm93biB0byBub3QgY2hhbmdlLiAgUmF0aGVyIHRoYW4gbWFyayB0aGUgbWVtb3J5IGFzIHZvbGF0aWxlLAoreW91IGNhbiB1c2UgXGZCXC1tc2FmZVwtZG1hXGZSIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRvIHRyZWF0Cit0aGUgXHMtMURNQVxzMCBpbnN0cnVjdGlvbnMgYXMgcG90ZW50aWFsbHkgYWZmZWN0aW5nIGFsbCBtZW1vcnkuCisuSVAgIlxmQlwtbWJyYW5jaFwtaGludHNcZlIiIDQKKy5JWCBJdGVtICItbWJyYW5jaC1oaW50cyIKK0J5IGRlZmF1bHQsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGEgYnJhbmNoIGhpbnQgaW5zdHJ1Y3Rpb24gdG8gYXZvaWQKK3BpcGVsaW5lIHN0YWxscyBmb3IgYWx3YXlzLXRha2VuIG9yIHByb2JhYmx5LXRha2VuIGJyYW5jaGVzLiAgQSBoaW50CitpcyBub3QgZ2VuZXJhdGVkIGNsb3NlciB0aGFuIDggaW5zdHJ1Y3Rpb25zIGF3YXkgZnJvbSBpdHMgYnJhbmNoLgorVGhlcmUgaXMgbGl0dGxlIHJlYXNvbiB0byBkaXNhYmxlIHRoZW0sIGV4Y2VwdCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLAorb3IgdG8gbWFrZSBhbiBvYmplY3QgYSBsaXR0bGUgYml0IHNtYWxsZXIuCisuSVAgIlxmQlwtbXNtYWxsXC1tZW1cZlIiIDQKKy5JWCBJdGVtICItbXNtYWxsLW1lbSIKKy5QRCAwCisuSVAgIlxmQlwtbWxhcmdlXC1tZW1cZlIiIDQKKy5JWCBJdGVtICItbWxhcmdlLW1lbSIKKy5QRAorQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSBhc3N1bWluZyB0aGF0IGFkZHJlc3NlcyBhcmUgbmV2ZXIgbGFyZ2VyCit0aGFuIDE4IGJpdHMuICBXaXRoIFxmQlwtbWxhcmdlXC1tZW1cZlIgY29kZSBpcyBnZW5lcmF0ZWQgdGhhdCBhc3N1bWVzCithIGZ1bGwgMzJcLWJpdCBhZGRyZXNzLgorLklQICJcZkJcLW1zdGRtYWluXGZSIiA0CisuSVggSXRlbSAiLW1zdGRtYWluIgorQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBsaW5rcyBhZ2FpbnN0IHN0YXJ0dXAgY29kZSB0aGF0IGFzc3VtZXMgdGhlIFNQVS1zdHlsZQorbWFpbiBmdW5jdGlvbiBpbnRlcmZhY2UgKHdoaWNoIGhhcyBhbiB1bmNvbnZlbnRpb25hbCBwYXJhbWV0ZXIgbGlzdCkuCitXaXRoIFxmQlwtbXN0ZG1haW5cZlIsIFxzLTFHQ0NcczAgbGlua3MgeW91ciBwcm9ncmFtIGFnYWluc3Qgc3RhcnR1cAorY29kZSB0aGF0IGFzc3VtZXMgYSBDOTlcLXN0eWxlIGludGVyZmFjZSB0byBcZihDV1wqKENgbWFpblwqKEMnXGZSLCBpbmNsdWRpbmcgYQorbG9jYWwgY29weSBvZiBcZihDV1wqKENgYXJndlwqKEMnXGZSIHN0cmluZ3MuCisuSVAgIlxmQlwtbWZpeGVkXC1yYW5nZT1cZlJcZklyZWdpc3Rlci1yYW5nZVxmUiIgNAorLklYIEl0ZW0gIi1tZml4ZWQtcmFuZ2U9cmVnaXN0ZXItcmFuZ2UiCitHZW5lcmF0ZSBjb2RlIHRyZWF0aW5nIHRoZSBnaXZlbiByZWdpc3RlciByYW5nZSBhcyBmaXhlZCByZWdpc3RlcnMuCitBIGZpeGVkIHJlZ2lzdGVyIGlzIG9uZSB0aGF0IHRoZSByZWdpc3RlciBhbGxvY2F0b3IgY2Fubm90IHVzZS4gIFRoaXMgaXMKK3VzZWZ1bCB3aGVuIGNvbXBpbGluZyBrZXJuZWwgY29kZS4gIEEgcmVnaXN0ZXIgcmFuZ2UgaXMgc3BlY2lmaWVkIGFzCit0d28gcmVnaXN0ZXJzIHNlcGFyYXRlZCBieSBhIGRhc2guICBNdWx0aXBsZSByZWdpc3RlciByYW5nZXMgY2FuIGJlCitzcGVjaWZpZWQgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCisuSVAgIlxmQlwtbWVhMzJcZlIiIDQKKy5JWCBJdGVtICItbWVhMzIiCisuUEQgMAorLklQICJcZkJcLW1lYTY0XGZSIiA0CisuSVggSXRlbSAiLW1lYTY0IgorLlBECitDb21waWxlIGNvZGUgYXNzdW1pbmcgdGhhdCBwb2ludGVycyB0byB0aGUgXHMtMVBQVVxzMCBhZGRyZXNzIHNwYWNlIGFjY2Vzc2VkCit2aWEgdGhlIFxmKENXXCooQ2BfXHxfZWFcKihDJ1xmUiBuYW1lZCBhZGRyZXNzIHNwYWNlIHF1YWxpZmllciBhcmUgZWl0aGVyIDMyIG9yIDY0CitiaXRzIHdpZGUuICBUaGUgZGVmYXVsdCBpcyAzMiBiaXRzLiAgQXMgdGhpcyBpcyBhbiBBQkktY2hhbmdpbmcgb3B0aW9uLAorYWxsIG9iamVjdCBjb2RlIGluIGFuIGV4ZWN1dGFibGUgbXVzdCBiZSBjb21waWxlZCB3aXRoIHRoZSBzYW1lIHNldHRpbmcuCisuSVAgIlxmQlwtbWFkZHJlc3NcLXNwYWNlXC1jb252ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLW1hZGRyZXNzLXNwYWNlLWNvbnZlcnNpb24iCisuUEQgMAorLklQICJcZkJcLW1ub1wtYWRkcmVzc1wtc3BhY2VcLWNvbnZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItbW5vLWFkZHJlc3Mtc3BhY2UtY29udmVyc2lvbiIKKy5QRAorQWxsb3cvZGlzYWxsb3cgdHJlYXRpbmcgdGhlIFxmKENXXCooQ2BfXHxfZWFcKihDJ1xmUiBhZGRyZXNzIHNwYWNlIGFzIHN1cGVyc2V0CitvZiB0aGUgZ2VuZXJpYyBhZGRyZXNzIHNwYWNlLiAgVGhpcyBlbmFibGVzIGV4cGxpY2l0IHR5cGUgY2FzdHMKK2JldHdlZW4gXGYoQ1dcKihDYF9cfF9lYVwqKEMnXGZSIGFuZCBnZW5lcmljIHBvaW50ZXIgYXMgd2VsbCBhcyBpbXBsaWNpdAorY29udmVyc2lvbnMgb2YgZ2VuZXJpYyBwb2ludGVycyB0byBcZihDV1wqKENgX1x8X2VhXCooQydcZlIgcG9pbnRlcnMuICBUaGUKK2RlZmF1bHQgaXMgdG8gYWxsb3cgYWRkcmVzcyBzcGFjZSBwb2ludGVyIGNvbnZlcnNpb25zLgorLklQICJcZkJcLW1jYWNoZVwtc2l6ZT1cZlJcZkljYWNoZS1zaXplXGZSIiA0CisuSVggSXRlbSAiLW1jYWNoZS1zaXplPWNhY2hlLXNpemUiCitUaGlzIG9wdGlvbiBjb250cm9scyB0aGUgdmVyc2lvbiBvZiBsaWJnY2MgdGhhdCB0aGUgY29tcGlsZXIgbGlua3MgdG8gYW4KK2V4ZWN1dGFibGUgYW5kIHNlbGVjdHMgYSBzb2Z0d2FyZS1tYW5hZ2VkIGNhY2hlIGZvciBhY2Nlc3NpbmcgdmFyaWFibGVzCitpbiB0aGUgXGYoQ1dcKihDYF9cfF9lYVwqKEMnXGZSIGFkZHJlc3Mgc3BhY2Ugd2l0aCBhIHBhcnRpY3VsYXIgY2FjaGUgc2l6ZS4gIFBvc3NpYmxlCitvcHRpb25zIGZvciBcZkljYWNoZS1zaXplXGZSIGFyZSBcZkI4XGZSLCBcZkIxNlxmUiwgXGZCMzJcZlIsIFxmQjY0XGZSCithbmQgXGZCMTI4XGZSLiAgVGhlIGRlZmF1bHQgY2FjaGUgc2l6ZSBpcyA2NEtCLgorLklQICJcZkJcLW1hdG9taWNcLXVwZGF0ZXNcZlIiIDQKKy5JWCBJdGVtICItbWF0b21pYy11cGRhdGVzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWF0b21pY1wtdXBkYXRlc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tYXRvbWljLXVwZGF0ZXMiCisuUEQKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSB2ZXJzaW9uIG9mIGxpYmdjYyB0aGF0IHRoZSBjb21waWxlciBsaW5rcyB0byBhbgorZXhlY3V0YWJsZSBhbmQgc2VsZWN0cyB3aGV0aGVyIGF0b21pYyB1cGRhdGVzIHRvIHRoZSBzb2Z0d2FyZS1tYW5hZ2VkCitjYWNoZSBvZiBQUFUtc2lkZSB2YXJpYWJsZXMgYXJlIHVzZWQuICBJZiB5b3UgdXNlIGF0b21pYyB1cGRhdGVzLCBjaGFuZ2VzCit0byBhIFxzLTFQUFVcczAgdmFyaWFibGUgZnJvbSBccy0xU1BVXHMwIGNvZGUgdXNpbmcgdGhlIFxmKENXXCooQ2BfXHxfZWFcKihDJ1xmUiBuYW1lZCBhZGRyZXNzIHNwYWNlCitxdWFsaWZpZXIgZG8gbm90IGludGVyZmVyZSB3aXRoIGNoYW5nZXMgdG8gb3RoZXIgXHMtMVBQVVxzMCB2YXJpYWJsZXMgcmVzaWRpbmcKK2luIHRoZSBzYW1lIGNhY2hlIGxpbmUgZnJvbSBccy0xUFBVXHMwIGNvZGUuICBJZiB5b3UgZG8gbm90IHVzZSBhdG9taWMgdXBkYXRlcywKK3N1Y2ggaW50ZXJmZXJlbmNlIG1heSBvY2N1cjsgaG93ZXZlciwgd3JpdGluZyBiYWNrIGNhY2hlIGxpbmVzIGlzCittb3JlIGVmZmljaWVudC4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHVzZSBhdG9taWMgdXBkYXRlcy4KKy5JUCAiXGZCXC1tZHVhbFwtbm9wc1xmUiIgNAorLklYIEl0ZW0gIi1tZHVhbC1ub3BzIgorLlBEIDAKKy5JUCAiXGZCXC1tZHVhbFwtbm9wcz1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLW1kdWFsLW5vcHM9biIKKy5QRAorQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBpbnNlcnRzIG5vcHMgdG8gaW5jcmVhc2UgZHVhbCBpc3N1ZSB3aGVuIGl0IGV4cGVjdHMKK2l0IHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlLiAgXGZJblxmUiBjYW4gYmUgYSB2YWx1ZSBmcm9tIDAgdG8gMTAuICBBCitzbWFsbGVyIFxmSW5cZlIgaW5zZXJ0cyBmZXdlciBub3BzLiAgMTAgaXMgdGhlIGRlZmF1bHQsIDAgaXMgdGhlCitzYW1lIGFzIFxmQlwtbW5vXC1kdWFsXC1ub3BzXGZSLiAgRGlzYWJsZWQgd2l0aCBcZkJcLU9zXGZSLgorLklQICJcZkJcLW1oaW50XC1tYXhcLW5vcHM9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1taGludC1tYXgtbm9wcz1uIgorTWF4aW11bSBudW1iZXIgb2Ygbm9wcyB0byBpbnNlcnQgZm9yIGEgYnJhbmNoIGhpbnQuICBBIGJyYW5jaCBoaW50IG11c3QKK2JlIGF0IGxlYXN0IDggaW5zdHJ1Y3Rpb25zIGF3YXkgZnJvbSB0aGUgYnJhbmNoIGl0IGlzIGFmZmVjdGluZy4gIFxzLTFHQ0NcczAKK2luc2VydHMgdXAgdG8gXGZJblxmUiBub3BzIHRvIGVuZm9yY2UgdGhpcywgb3RoZXJ3aXNlIGl0IGRvZXMgbm90CitnZW5lcmF0ZSB0aGUgYnJhbmNoIGhpbnQuCisuSVAgIlxmQlwtbWhpbnRcLW1heFwtZGlzdGFuY2U9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1taGludC1tYXgtZGlzdGFuY2U9biIKK1RoZSBlbmNvZGluZyBvZiB0aGUgYnJhbmNoIGhpbnQgaW5zdHJ1Y3Rpb24gbGltaXRzIHRoZSBoaW50IHRvIGJlIHdpdGhpbgorMjU2IGluc3RydWN0aW9ucyBvZiB0aGUgYnJhbmNoIGl0IGlzIGFmZmVjdGluZy4gIEJ5IGRlZmF1bHQsIFxzLTFHQ0NcczAgbWFrZXMKK3N1cmUgaXQgaXMgd2l0aGluIDEyNS4KKy5JUCAiXGZCXC1tc2FmZVwtaGludHNcZlIiIDQKKy5JWCBJdGVtICItbXNhZmUtaGludHMiCitXb3JrIGFyb3VuZCBhIGhhcmR3YXJlIGJ1ZyB0aGF0IGNhdXNlcyB0aGUgXHMtMVNQVVxzMCB0byBzdGFsbCBpbmRlZmluaXRlbHkuCitCeSBkZWZhdWx0LCBccy0xR0NDXHMwIGluc2VydHMgdGhlIFxmKENXXCooQ2BoYnJwXCooQydcZlIgaW5zdHJ1Y3Rpb24gdG8gbWFrZSBzdXJlCit0aGlzIHN0YWxsIHdvbid0IGhhcHBlbi4KKy5QUAorXGZJT3B0aW9ucyBmb3IgU3lzdGVtIFZcZlIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIGZvciBTeXN0ZW0gViIKKy5QUAorVGhlc2UgYWRkaXRpb25hbCBvcHRpb25zIGFyZSBhdmFpbGFibGUgb24gU3lzdGVtIFYgUmVsZWFzZSA0IGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNvbXBpbGVycyBvbiB0aG9zZSBzeXN0ZW1zOgorLklQICJcZkJcLUdcZlIiIDQKKy5JWCBJdGVtICItRyIKK0NyZWF0ZSBhIHNoYXJlZCBvYmplY3QuCitJdCBpcyByZWNvbW1lbmRlZCB0aGF0IFxmQlwtc3ltYm9saWNcZlIgb3IgXGZCXC1zaGFyZWRcZlIgYmUgdXNlZCBpbnN0ZWFkLgorLklQICJcZkJcLVF5XGZSIiA0CisuSVggSXRlbSAiLVF5IgorSWRlbnRpZnkgdGhlIHZlcnNpb25zIG9mIGVhY2ggdG9vbCB1c2VkIGJ5IHRoZSBjb21waWxlciwgaW4gYQorXCZcZihDV1wqKENgLmlkZW50XCooQydcZlIgYXNzZW1ibGVyIGRpcmVjdGl2ZSBpbiB0aGUgb3V0cHV0LgorLklQICJcZkJcLVFuXGZSIiA0CisuSVggSXRlbSAiLVFuIgorUmVmcmFpbiBmcm9tIGFkZGluZyBcZihDV1wqKENgLmlkZW50XCooQydcZlIgZGlyZWN0aXZlcyB0byB0aGUgb3V0cHV0IGZpbGUgKHRoaXMgaXMKK3RoZSBkZWZhdWx0KS4KKy5JUCAiXGZCXC1ZUCxcZlJcZklkaXJzXGZSIiA0CisuSVggSXRlbSAiLVlQLGRpcnMiCitTZWFyY2ggdGhlIGRpcmVjdG9yaWVzIFxmSWRpcnNcZlIsIGFuZCBubyBvdGhlcnMsIGZvciBsaWJyYXJpZXMKK3NwZWNpZmllZCB3aXRoIFxmQlwtbFxmUi4KKy5JUCAiXGZCXC1ZbSxcZlJcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItWW0sZGlyIgorTG9vayBpbiB0aGUgZGlyZWN0b3J5IFxmSWRpclxmUiB0byBmaW5kIHRoZSBNNCBwcmVwcm9jZXNzb3IuCitUaGUgYXNzZW1ibGVyIHVzZXMgdGhpcyBvcHRpb24uCisuUFAKK1xmSVRJTEUtR3ggT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlRJTEUtR3ggT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBvbiB0aGUgVElMRS1HeDoKKy5JUCAiXGZCXC1tY21vZGVsPXNtYWxsXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9c21hbGwiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgc21hbGwgbW9kZWwuICBUaGUgZGlzdGFuY2UgZm9yIGRpcmVjdCBjYWxscyBpcworbGltaXRlZCB0byA1MDBNIGluIGVpdGhlciBkaXJlY3Rpb24uICBQQy1yZWxhdGl2ZSBhZGRyZXNzZXMgYXJlIDMyCitiaXRzLiAgQWJzb2x1dGUgYWRkcmVzc2VzIHN1cHBvcnQgdGhlIGZ1bGwgYWRkcmVzcyByYW5nZS4KKy5JUCAiXGZCXC1tY21vZGVsPWxhcmdlXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9bGFyZ2UiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgbGFyZ2UgbW9kZWwuICBUaGVyZSBpcyBubyBsaW1pdGF0aW9uIG9uIGNhbGwKK2Rpc3RhbmNlLCBwYy1yZWxhdGl2ZSBhZGRyZXNzZXMsIG9yIGFic29sdXRlIGFkZHJlc3Nlcy4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1uYW1lIgorU2VsZWN0cyB0aGUgdHlwZSBvZiBccy0xQ1BVXHMwIHRvIGJlIHRhcmdldGVkLiAgQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZAordHlwZSBpcyBcZkJ0aWxlZ3hcZlIuCisuSVAgIlxmQlwtbTMyXGZSIiA0CisuSVggSXRlbSAiLW0zMiIKKy5QRCAwCisuSVAgIlxmQlwtbTY0XGZSIiA0CisuSVggSXRlbSAiLW02NCIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgYSAzMlwtYml0IG9yIDY0XC1iaXQgZW52aXJvbm1lbnQuICBUaGUgMzJcLWJpdAorZW52aXJvbm1lbnQgc2V0cyBpbnQsIGxvbmcsIGFuZCBwb2ludGVyIHRvIDMyIGJpdHMuICBUaGUgNjRcLWJpdAorZW52aXJvbm1lbnQgc2V0cyBpbnQgdG8gMzIgYml0cyBhbmQgbG9uZyBhbmQgcG9pbnRlciB0byA2NCBiaXRzLgorLlBQCitcZklUSUxFUHJvIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJUSUxFUHJvIE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgb24gdGhlIFRJTEVQcm86CisuSVAgIlxmQlwtbWNwdT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9bmFtZSIKK1NlbGVjdHMgdGhlIHR5cGUgb2YgXHMtMUNQVVxzMCB0byBiZSB0YXJnZXRlZC4gIEN1cnJlbnRseSB0aGUgb25seSBzdXBwb3J0ZWQKK3R5cGUgaXMgXGZCdGlsZXByb1xmUi4KKy5JUCAiXGZCXC1tMzJcZlIiIDQKKy5JWCBJdGVtICItbTMyIgorR2VuZXJhdGUgY29kZSBmb3IgYSAzMlwtYml0IGVudmlyb25tZW50LCB3aGljaCBzZXRzIGludCwgbG9uZywgYW5kCitwb2ludGVyIHRvIDMyIGJpdHMuICBUaGlzIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBiZWhhdmlvciBzbyB0aGUgZmxhZworaXMgZXNzZW50aWFsbHkgaWdub3JlZC4KKy5QUAorXGZJVjg1MCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiVjg1MCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgVjg1MCBpbXBsZW1lbnRhdGlvbnM6CisuSVAgIlxmQlwtbWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1sb25nLWNhbGxzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1uby1sb25nLWNhbGxzIgorLlBECitUcmVhdCBhbGwgY2FsbHMgYXMgYmVpbmcgZmFyIGF3YXkgKG5lYXIpLiAgSWYgY2FsbHMgYXJlIGFzc3VtZWQgdG8gYmUKK2ZhciBhd2F5LCB0aGUgY29tcGlsZXIgYWx3YXlzIGxvYWRzIHRoZSBmdW5jdGlvbidzIGFkZHJlc3MgaW50byBhCityZWdpc3RlciwgYW5kIGNhbGxzIGluZGlyZWN0IHRocm91Z2ggdGhlIHBvaW50ZXIuCisuSVAgIlxmQlwtbW5vXC1lcFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZXAiCisuUEQgMAorLklQICJcZkJcLW1lcFxmUiIgNAorLklYIEl0ZW0gIi1tZXAiCisuUEQKK0RvIG5vdCBvcHRpbWl6ZSAoZG8gb3B0aW1pemUpIGJhc2ljIGJsb2NrcyB0aGF0IHVzZSB0aGUgc2FtZSBpbmRleAorcG9pbnRlciA0IG9yIG1vcmUgdGltZXMgdG8gY29weSBwb2ludGVyIGludG8gdGhlIFxmKENXXCooQ2BlcFwqKEMnXGZSIHJlZ2lzdGVyLCBhbmQKK3VzZSB0aGUgc2hvcnRlciBcZihDV1wqKENgc2xkXCooQydcZlIgYW5kIFxmKENXXCooQ2Bzc3RcKihDJ1xmUiBpbnN0cnVjdGlvbnMuICBUaGUgXGZCXC1tZXBcZlIKK29wdGlvbiBpcyBvbiBieSBkZWZhdWx0IGlmIHlvdSBvcHRpbWl6ZS4KKy5JUCAiXGZCXC1tbm9cLXByb2xvZ1wtZnVuY3Rpb25cZlIiIDQKKy5JWCBJdGVtICItbW5vLXByb2xvZy1mdW5jdGlvbiIKKy5QRCAwCisuSVAgIlxmQlwtbXByb2xvZ1wtZnVuY3Rpb25cZlIiIDQKKy5JWCBJdGVtICItbXByb2xvZy1mdW5jdGlvbiIKKy5QRAorRG8gbm90IHVzZSAoZG8gdXNlKSBleHRlcm5hbCBmdW5jdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlcnMKK2F0IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgb2YgYSBmdW5jdGlvbi4gIFRoZSBleHRlcm5hbCBmdW5jdGlvbnMKK2FyZSBzbG93ZXIsIGJ1dCB1c2UgbGVzcyBjb2RlIHNwYWNlIGlmIG1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gc2F2ZXMKK3RoZSBzYW1lIG51bWJlciBvZiByZWdpc3RlcnMuICBUaGUgXGZCXC1tcHJvbG9nXC1mdW5jdGlvblxmUiBvcHRpb24KK2lzIG9uIGJ5IGRlZmF1bHQgaWYgeW91IG9wdGltaXplLgorLklQICJcZkJcLW1zcGFjZVxmUiIgNAorLklYIEl0ZW0gIi1tc3BhY2UiCitUcnkgdG8gbWFrZSB0aGUgY29kZSBhcyBzbWFsbCBhcyBwb3NzaWJsZS4gIEF0IHByZXNlbnQsIHRoaXMganVzdCB0dXJucworb24gdGhlIFxmQlwtbWVwXGZSIGFuZCBcZkJcLW1wcm9sb2dcLWZ1bmN0aW9uXGZSIG9wdGlvbnMuCisuSVAgIlxmQlwtbXRkYT1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLW10ZGE9biIKK1B1dCBzdGF0aWMgb3IgZ2xvYmFsIHZhcmlhYmxlcyB3aG9zZSBzaXplIGlzIFxmSW5cZlIgYnl0ZXMgb3IgbGVzcyBpbnRvCit0aGUgdGlueSBkYXRhIGFyZWEgdGhhdCByZWdpc3RlciBcZihDV1wqKENgZXBcKihDJ1xmUiBwb2ludHMgdG8uICBUaGUgdGlueSBkYXRhCithcmVhIGNhbiBob2xkIHVwIHRvIDI1NiBieXRlcyBpbiB0b3RhbCAoMTI4IGJ5dGVzIGZvciBieXRlIHJlZmVyZW5jZXMpLgorLklQICJcZkJcLW1zZGE9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1tc2RhPW4iCitQdXQgc3RhdGljIG9yIGdsb2JhbCB2YXJpYWJsZXMgd2hvc2Ugc2l6ZSBpcyBcZkluXGZSIGJ5dGVzIG9yIGxlc3MgaW50bwordGhlIHNtYWxsIGRhdGEgYXJlYSB0aGF0IHJlZ2lzdGVyIFxmKENXXCooQ2BncFwqKEMnXGZSIHBvaW50cyB0by4gIFRoZSBzbWFsbCBkYXRhCithcmVhIGNhbiBob2xkIHVwIHRvIDY0IGtpbG9ieXRlcy4KKy5JUCAiXGZCXC1temRhPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItbXpkYT1uIgorUHV0IHN0YXRpYyBvciBnbG9iYWwgdmFyaWFibGVzIHdob3NlIHNpemUgaXMgXGZJblxmUiBieXRlcyBvciBsZXNzIGludG8KK3RoZSBmaXJzdCAzMiBraWxvYnl0ZXMgb2YgbWVtb3J5LgorLklQICJcZkJcLW12ODUwXGZSIiA0CisuSVggSXRlbSAiLW12ODUwIgorU3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwLgorLklQICJcZkJcLW12ODUwZTN2NVxmUiIgNAorLklYIEl0ZW0gIi1tdjg1MGUzdjUiCitTcGVjaWZ5IHRoYXQgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgdGhlIFY4NTBFM1Y1LiAgVGhlIHByZXByb2Nlc3NvcgorY29uc3RhbnQgXGZCX1x8X3Y4NTBlM3Y1X1x8X1xmUiBpcyBkZWZpbmVkIGlmIHRoaXMgb3B0aW9uIGlzIHVzZWQuCisuSVAgIlxmQlwtbXY4NTBlMnY0XGZSIiA0CisuSVggSXRlbSAiLW12ODUwZTJ2NCIKK1NwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyB0aGUgVjg1MEUzVjUuICBUaGlzIGlzIGFuIGFsaWFzIGZvcgordGhlIFxmQlwtbXY4NTBlM3Y1XGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1tdjg1MGUydjNcZlIiIDQKKy5JWCBJdGVtICItbXY4NTBlMnYzIgorU3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRTJWMy4gIFRoZSBwcmVwcm9jZXNzb3IKK2NvbnN0YW50IFxmQl9cfF92ODUwZTJ2M19cfF9cZlIgaXMgZGVmaW5lZCBpZiB0aGlzIG9wdGlvbiBpcyB1c2VkLgorLklQICJcZkJcLW12ODUwZTJcZlIiIDQKKy5JWCBJdGVtICItbXY4NTBlMiIKK1NwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyB0aGUgVjg1MEUyLiAgVGhlIHByZXByb2Nlc3NvcgorY29uc3RhbnQgXGZCX1x8X3Y4NTBlMl9cfF9cZlIgaXMgZGVmaW5lZCBpZiB0aGlzIG9wdGlvbiBpcyB1c2VkLgorLklQICJcZkJcLW12ODUwZTFcZlIiIDQKKy5JWCBJdGVtICItbXY4NTBlMSIKK1NwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyB0aGUgVjg1MEUxLiAgVGhlIHByZXByb2Nlc3NvcgorY29uc3RhbnRzIFxmQl9cfF92ODUwZTFfXHxfXGZSIGFuZCBcZkJfXHxfdjg1MGVfXHxfXGZSIGFyZSBkZWZpbmVkIGlmCit0aGlzIG9wdGlvbiBpcyB1c2VkLgorLklQICJcZkJcLW12ODUwZXNcZlIiIDQKKy5JWCBJdGVtICItbXY4NTBlcyIKK1NwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyB0aGUgVjg1MEVTLiAgVGhpcyBpcyBhbiBhbGlhcyBmb3IKK3RoZSBcZkJcLW12ODUwZTFcZlIgb3B0aW9uLgorLklQICJcZkJcLW12ODUwZVxmUiIgNAorLklYIEl0ZW0gIi1tdjg1MGUiCitTcGVjaWZ5IHRoYXQgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgdGhlIFY4NTBFLiAgVGhlIHByZXByb2Nlc3NvcgorY29uc3RhbnQgXGZCX1x8X3Y4NTBlX1x8X1xmUiBpcyBkZWZpbmVkIGlmIHRoaXMgb3B0aW9uIGlzIHVzZWQuCisuU3AKK0lmIG5laXRoZXIgXGZCXC1tdjg1MFxmUiBub3IgXGZCXC1tdjg1MGVcZlIgbm9yIFxmQlwtbXY4NTBlMVxmUgorbm9yIFxmQlwtbXY4NTBlMlxmUiBub3IgXGZCXC1tdjg1MGUydjNcZlIgbm9yIFxmQlwtbXY4NTBlM3Y1XGZSCithcmUgZGVmaW5lZCB0aGVuIGEgZGVmYXVsdCB0YXJnZXQgcHJvY2Vzc29yIGlzIGNob3NlbiBhbmQgdGhlCityZWxldmFudCBcZkJfXHxfdjg1MCpfXHxfXGZSIHByZXByb2Nlc3NvciBjb25zdGFudCBpcyBkZWZpbmVkLgorLlNwCitUaGUgcHJlcHJvY2Vzc29yIGNvbnN0YW50cyBcZkJfXHxfdjg1MFxmUiBhbmQgXGZCX1x8X3Y4NTFfXHxfXGZSIGFyZSBhbHdheXMKK2RlZmluZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggcHJvY2Vzc29yIHZhcmlhbnQgaXMgdGhlIHRhcmdldC4KKy5JUCAiXGZCXC1tZGlzYWJsZVwtY2FsbHRcZlIiIDQKKy5JWCBJdGVtICItbWRpc2FibGUtY2FsbHQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZGlzYWJsZVwtY2FsbHRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWRpc2FibGUtY2FsbHQiCisuUEQKK1RoaXMgb3B0aW9uIHN1cHByZXNzZXMgZ2VuZXJhdGlvbiBvZiB0aGUgXGYoQ1dcKihDYENBTExUXCooQydcZlIgaW5zdHJ1Y3Rpb24gZm9yIHRoZQordjg1MGUsIHY4NTBlMSwgdjg1MGUyLCB2ODUwZTJ2MyBhbmQgdjg1MGUzdjUgZmxhdm9ycyBvZiB0aGUgdjg1MAorYXJjaGl0ZWN0dXJlLgorLlNwCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUgXHMtMVJIODUwXHMwIFxzLTFBQklcczAgaXMKK2luIHVzZSAoc2VlIFxmQlwtbXJoODUwXC1hYmlcZlIpLCBhbmQgZGlzYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRoZQorXCZccy0xR0NDXHMwIFxzLTFBQklcczAgaXMgaW4gdXNlLiAgSWYgXGYoQ1dcKihDYENBTExUXCooQydcZlIgaW5zdHJ1Y3Rpb25zIGFyZSBiZWluZyBnZW5lcmF0ZWQKK3RoZW4gdGhlIEMgcHJlcHJvY2Vzc29yIHN5bWJvbCBcZihDV1wqKENgX1x8X1Y4NTBfQ0FMTFRfXHxfXCooQydcZlIgd2lsbCBiZSBkZWZpbmVkLgorLklQICJcZkJcLW1yZWxheFxmUiIgNAorLklYIEl0ZW0gIi1tcmVsYXgiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcmVsYXhcZlIiIDQKKy5JWCBJdGVtICItbW5vLXJlbGF4IgorLlBECitQYXNzIG9uIChvciBkbyBub3QgcGFzcyBvbikgdGhlIFxmQlwtbXJlbGF4XGZSIGNvbW1hbmQgbGluZSBvcHRpb24KK3RvIHRoZSBhc3NlbWJsZXIuCisuSVAgIlxmQlwtbWxvbmdcLWp1bXBzXGZSIiA0CisuSVggSXRlbSAiLW1sb25nLWp1bXBzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxvbmdcLWp1bXBzXGZSIiA0CisuSVggSXRlbSAiLW1uby1sb25nLWp1bXBzIgorLlBECitEaXNhYmxlIChvciByZS1lbmFibGUpIHRoZSBnZW5lcmF0aW9uIG9mIFBDLXJlbGF0aXZlIGp1bXAgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1zb2Z0XC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1mbG9hdCIKKy5QRCAwCisuSVAgIlxmQlwtbWhhcmRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWZsb2F0IgorLlBECitEaXNhYmxlIChvciByZS1lbmFibGUpIHRoZSBnZW5lcmF0aW9uIG9mIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50CitpbnN0cnVjdGlvbnMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHNpZ25pZmljYW50IHdoZW4gdGhlIHRhcmdldAorYXJjaGl0ZWN0dXJlIGlzIFxmQlY4NTBFMlYzXGZSIG9yIGhpZ2hlci4gIElmIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50CitpbnN0cnVjdGlvbnMgYXJlIGJlaW5nIGdlbmVyYXRlZCB0aGVuIHRoZSBDIHByZXByb2Nlc3NvciBzeW1ib2wKK1wmXGYoQ1dcKihDYF9cfF9GUFVfT0tfXHxfXCooQydcZlIgd2lsbCBiZSBkZWZpbmVkLCBvdGhlcndpc2UgdGhlIHN5bWJvbAorXCZcZihDV1wqKENgX1x8X05PX0ZQVV9cfF9cKihDJ1xmUiB3aWxsIGJlIGRlZmluZWQuCisuSVAgIlxmQlwtbWxvb3BcZlIiIDQKKy5JWCBJdGVtICItbWxvb3AiCitFbmFibGVzIHRoZSB1c2Ugb2YgdGhlIGUzdjUgXHMtMUxPT1BcczAgaW5zdHJ1Y3Rpb24uICBUaGUgdXNlIG9mIHRoaXMKK2luc3RydWN0aW9uIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUgZTN2NSBhcmNoaXRlY3R1cmUgaXMKK3NlbGVjdGVkIGJlY2F1c2UgaXRzIHVzZSBpcyBzdGlsbCBleHBlcmltZW50YWwuCisuSVAgIlxmQlwtbXJoODUwXC1hYmlcZlIiIDQKKy5JWCBJdGVtICItbXJoODUwLWFiaSIKKy5QRCAwCisuSVAgIlxmQlwtbWdoc1xmUiIgNAorLklYIEl0ZW0gIi1tZ2hzIgorLlBECitFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBccy0xUkg4NTBcczAgdmVyc2lvbiBvZiB0aGUgVjg1MCBccy0xQUJJXHMwLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuICBXaXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUgXHMtMUFCSVxzMCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5OgorLlJTIDQKKy5JUCAiXChidSIgNAorSW50ZWdlciBzaXplZCBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgYXJlIHJldHVybmVkIHZpYSBhIG1lbW9yeSBwb2ludGVyCityYXRoZXIgdGhhbiBhIHJlZ2lzdGVyLgorLklQICJcKGJ1IiA0CitMYXJnZSBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgKG1vcmUgdGhhbiA4IGJ5dGVzIGluIHNpemUpIGFyZSBwYXNzZWQgYnkKK3ZhbHVlLgorLklQICJcKGJ1IiA0CitGdW5jdGlvbnMgYXJlIGFsaWduZWQgdG8gMTZcLWJpdCBib3VuZGFyaWVzLgorLklQICJcKGJ1IiA0CitUaGUgXGZCXC1tOGJ5dGVcLWFsaWduXGZSIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgc3VwcG9ydGVkLgorLklQICJcKGJ1IiA0CitUaGUgXGZCXC1tZGlzYWJsZVwtY2FsbHRcZlIgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBlbmFibGVkIGJ5CitkZWZhdWx0LiAgVGhlIFxmQlwtbW5vXC1kaXNhYmxlXC1jYWxsdFxmUiBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIG5vdAorc3VwcG9ydGVkLgorLlJFCisuUlMgNAorLlNwCitXaGVuIHRoaXMgdmVyc2lvbiBvZiB0aGUgXHMtMUFCSVxzMCBpcyBlbmFibGVkIHRoZSBDIHByZXByb2Nlc3NvciBzeW1ib2wKK1wmXGYoQ1dcKihDYF9cfF9WODUwX1JIODUwX0FCSV9cfF9cKihDJ1xmUiBpcyBkZWZpbmVkLgorLlJFCisuSVAgIlxmQlwtbWdjY1wtYWJpXGZSIiA0CisuSVggSXRlbSAiLW1nY2MtYWJpIgorRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgb2xkIFxzLTFHQ0NcczAgdmVyc2lvbiBvZiB0aGUgVjg1MCBccy0xQUJJXHMwLiAgV2l0aCB0aGlzCit2ZXJzaW9uIG9mIHRoZSBccy0xQUJJXHMwIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6CisuUlMgNAorLklQICJcKGJ1IiA0CitJbnRlZ2VyIHNpemVkIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBhcmUgcmV0dXJuZWQgaW4gcmVnaXN0ZXIgXGYoQ1dcKihDYHIxMFwqKEMnXGZSLgorLklQICJcKGJ1IiA0CitMYXJnZSBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMgKG1vcmUgdGhhbiA4IGJ5dGVzIGluIHNpemUpIGFyZSBwYXNzZWQgYnkKK3JlZmVyZW5jZS4KKy5JUCAiXChidSIgNAorRnVuY3Rpb25zIGFyZSBhbGlnbmVkIHRvIDMyXC1iaXQgYm91bmRhcmllcywgdW5sZXNzIG9wdGltaXppbmcgZm9yCitzaXplLgorLklQICJcKGJ1IiA0CitUaGUgXGZCXC1tOGJ5dGVcLWFsaWduXGZSIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgbm90IHN1cHBvcnRlZC4KKy5JUCAiXChidSIgNAorVGhlIFxmQlwtbWRpc2FibGVcLWNhbGx0XGZSIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgc3VwcG9ydGVkIGJ1dCBub3QKK2VuYWJsZWQgYnkgZGVmYXVsdC4KKy5SRQorLlJTIDQKKy5TcAorV2hlbiB0aGlzIHZlcnNpb24gb2YgdGhlIFxzLTFBQklcczAgaXMgZW5hYmxlZCB0aGUgQyBwcmVwcm9jZXNzb3Igc3ltYm9sCitcJlxmKENXXCooQ2BfXHxfVjg1MF9HQ0NfQUJJX1x8X1wqKEMnXGZSIGlzIGRlZmluZWQuCisuUkUKKy5JUCAiXGZCXC1tOGJ5dGVcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW04Ynl0ZS1hbGlnbiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC04Ynl0ZVwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbW5vLThieXRlLWFsaWduIgorLlBECitFbmFibGVzIHN1cHBvcnQgZm9yIFxmKENXXCooQ2Bkb3VibGVzXCooQydcZlIgYW5kIFxmKENXXCooQ2Bsb25nIGxvbmdcKihDJ1xmUiB0eXBlcyB0byBiZQorYWxpZ25lZCBvbiA4XC1ieXRlIGJvdW5kYXJpZXMuICBUaGUgZGVmYXVsdCBpcyB0byByZXN0cmljdCB0aGUKK2FsaWdubWVudCBvZiBhbGwgb2JqZWN0cyB0byBhdCBtb3N0IDRcLWJ5dGVzLiAgV2hlbgorXCZcZkJcLW04Ynl0ZVwtYWxpZ25cZlIgaXMgaW4gZWZmZWN0IHRoZSBDIHByZXByb2Nlc3NvciBzeW1ib2wKK1wmXGYoQ1dcKihDYF9cfF9WODUwXzhCWVRFX0FMSUdOX1x8X1wqKEMnXGZSIHdpbGwgYmUgZGVmaW5lZC4KKy5JUCAiXGZCXC1tYmlnXC1zd2l0Y2hcZlIiIDQKKy5JWCBJdGVtICItbWJpZy1zd2l0Y2giCitHZW5lcmF0ZSBjb2RlIHN1aXRhYmxlIGZvciBiaWcgc3dpdGNoIHRhYmxlcy4gIFVzZSB0aGlzIG9wdGlvbiBvbmx5IGlmCit0aGUgYXNzZW1ibGVyL2xpbmtlciBjb21wbGFpbiBhYm91dCBvdXQgb2YgcmFuZ2UgYnJhbmNoZXMgd2l0aGluIGEgc3dpdGNoCit0YWJsZS4KKy5JUCAiXGZCXC1tYXBwXC1yZWdzXGZSIiA0CisuSVggSXRlbSAiLW1hcHAtcmVncyIKK1RoaXMgb3B0aW9uIGNhdXNlcyByMiBhbmQgcjUgdG8gYmUgdXNlZCBpbiB0aGUgY29kZSBnZW5lcmF0ZWQgYnkKK3RoZSBjb21waWxlci4gIFRoaXMgc2V0dGluZyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbm9cLWFwcFwtcmVnc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tYXBwLXJlZ3MiCitUaGlzIG9wdGlvbiBjYXVzZXMgcjIgYW5kIHI1IHRvIGJlIHRyZWF0ZWQgYXMgZml4ZWQgcmVnaXN0ZXJzLgorLlBQCitcZklccy0xVkFYXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJWQVggT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBccy0xVkFYOlxzMAorLklQICJcZkJcLW11bml4XGZSIiA0CisuSVggSXRlbSAiLW11bml4IgorRG8gbm90IG91dHB1dCBjZXJ0YWluIGp1bXAgaW5zdHJ1Y3Rpb25zIChcZihDV1wqKENgYW9ibGVxXCooQydcZlIgYW5kIHNvIG9uKQordGhhdCB0aGUgVW5peCBhc3NlbWJsZXIgZm9yIHRoZSBccy0xVkFYXHMwIGNhbm5vdCBoYW5kbGUgYWNyb3NzIGxvbmcKK3Jhbmdlcy4KKy5JUCAiXGZCXC1tZ251XGZSIiA0CisuSVggSXRlbSAiLW1nbnUiCitEbyBvdXRwdXQgdGhvc2UganVtcCBpbnN0cnVjdGlvbnMsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlCitcJlxzLTFHTlVcczAgYXNzZW1ibGVyIGlzIGJlaW5nIHVzZWQuCisuSVAgIlxmQlwtbWdcZlIiIDQKKy5JWCBJdGVtICItbWciCitPdXRwdXQgY29kZSBmb3IgR1wtZm9ybWF0IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgaW5zdGVhZCBvZiBEXC1mb3JtYXQuCisuUFAKK1xmSVxzLTFWTVNcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlZNUyBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIFxzLTFWTVNcczAgaW1wbGVtZW50YXRpb25zOgorLklQICJcZkJcLW12bXNcLXJldHVyblwtY29kZXNcZlIiIDQKKy5JWCBJdGVtICItbXZtcy1yZXR1cm4tY29kZXMiCitSZXR1cm4gXHMtMVZNU1xzMCBjb25kaXRpb24gY29kZXMgZnJvbSBcZihDV1wqKENgbWFpblwqKEMnXGZSLiBUaGUgZGVmYXVsdCBpcyB0byByZXR1cm4gUE9TSVgtc3R5bGUKK2NvbmRpdGlvbiAoZS5nLiBlcnJvcikgY29kZXMuCisuSVAgIlxmQlwtbWRlYnVnXC1tYWluPVxmUlxmSXByZWZpeFxmUiIgNAorLklYIEl0ZW0gIi1tZGVidWctbWFpbj1wcmVmaXgiCitGbGFnIHRoZSBmaXJzdCByb3V0aW5lIHdob3NlIG5hbWUgc3RhcnRzIHdpdGggXGZJcHJlZml4XGZSIGFzIHRoZSBtYWluCityb3V0aW5lIGZvciB0aGUgZGVidWdnZXIuCisuSVAgIlxmQlwtbW1hbGxvYzY0XGZSIiA0CisuSVggSXRlbSAiLW1tYWxsb2M2NCIKK0RlZmF1bHQgdG8gNjRcLWJpdCBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KKy5JUCAiXGZCXC1tcG9pbnRlclwtc2l6ZT1cZlJcZklzaXplXGZSIiA0CisuSVggSXRlbSAiLW1wb2ludGVyLXNpemU9c2l6ZSIKK1NldCB0aGUgZGVmYXVsdCBzaXplIG9mIHBvaW50ZXJzLiBQb3NzaWJsZSBvcHRpb25zIGZvciBcZklzaXplXGZSIGFyZQorXCZcZkIzMlxmUiBvciBcZkJzaG9ydFxmUiBmb3IgMzIgYml0IHBvaW50ZXJzLCBcZkI2NFxmUiBvciBcZkJsb25nXGZSCitmb3IgNjQgYml0IHBvaW50ZXJzLCBhbmQgXGZCbm9cZlIgZm9yIHN1cHBvcnRpbmcgb25seSAzMiBiaXQgcG9pbnRlcnMuCitUaGUgbGF0ZXIgb3B0aW9uIGRpc2FibGVzIFxmKENXXCooQ2BwcmFnbWEgcG9pbnRlcl9zaXplXCooQydcZlIuCisuUFAKK1xmSVZ4V29ya3MgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlZ4V29ya3MgT3B0aW9ucyIKKy5QUAorVGhlIG9wdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGFyZSBkZWZpbmVkIGZvciBhbGwgVnhXb3JrcyB0YXJnZXRzLgorT3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgdGFyZ2V0IGhhcmR3YXJlIGFyZSBsaXN0ZWQgd2l0aCB0aGUgb3RoZXIKK29wdGlvbnMgZm9yIHRoYXQgdGFyZ2V0LgorLklQICJcZkJcLW1ydHBcZlIiIDQKKy5JWCBJdGVtICItbXJ0cCIKK1wmXHMtMUdDQ1xzMCBjYW4gZ2VuZXJhdGUgY29kZSBmb3IgYm90aCBWeFdvcmtzIGtlcm5lbHMgYW5kIHJlYWwgdGltZSBwcm9jZXNzZXMKKyhSVFBzKS4gIFRoaXMgb3B0aW9uIHN3aXRjaGVzIGZyb20gdGhlIGZvcm1lciB0byB0aGUgbGF0dGVyLiAgSXQgYWxzbworZGVmaW5lcyB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvIFxmKENXXCooQ2BfXHxfUlRQX1x8X1wqKEMnXGZSLgorLklQICJcZkJcLW5vblwtc3RhdGljXGZSIiA0CisuSVggSXRlbSAiLW5vbi1zdGF0aWMiCitMaW5rIGFuIFxzLTFSVFBcczAgZXhlY3V0YWJsZSBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJpZXMgcmF0aGVyIHRoYW4gc3RhdGljCitsaWJyYXJpZXMuICBUaGUgb3B0aW9ucyBcZkJcLXN0YXRpY1xmUiBhbmQgXGZCXC1zaGFyZWRcZlIgY2FuCithbHNvIGJlIHVzZWQgZm9yIFJUUHM7IFxmQlwtc3RhdGljXGZSCitpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1Cc3RhdGljXGZSIiA0CisuSVggSXRlbSAiLUJzdGF0aWMiCisuUEQgMAorLklQICJcZkJcLUJkeW5hbWljXGZSIiA0CisuSVggSXRlbSAiLUJkeW5hbWljIgorLlBECitUaGVzZSBvcHRpb25zIGFyZSBwYXNzZWQgZG93biB0byB0aGUgbGlua2VyLiAgVGhleSBhcmUgZGVmaW5lZCBmb3IKK2NvbXBhdGliaWxpdHkgd2l0aCBEaWFiLgorLklQICJcZkJcLVhiaW5kXC1sYXp5XGZSIiA0CisuSVggSXRlbSAiLVhiaW5kLWxhenkiCitFbmFibGUgbGF6eSBiaW5kaW5nIG9mIGZ1bmN0aW9uIGNhbGxzLiAgVGhpcyBvcHRpb24gaXMgZXF1aXZhbGVudCB0bworXCZcZkJcLVdsLFwteixub3dcZlIgYW5kIGlzIGRlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBEaWFiLgorLklQICJcZkJcLVhiaW5kXC1ub3dcZlIiIDQKKy5JWCBJdGVtICItWGJpbmQtbm93IgorRGlzYWJsZSBsYXp5IGJpbmRpbmcgb2YgZnVuY3Rpb24gY2FsbHMuICBUaGlzIG9wdGlvbiBpcyB0aGUgZGVmYXVsdCBhbmQKK2lzIGRlZmluZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBEaWFiLgorLlBQCitcZkl4ODZcLTY0IE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJ4ODYtNjQgT3B0aW9ucyIKKy5QUAorVGhlc2UgYXJlIGxpc3RlZCB1bmRlcgorLlBQCitcZklYc3Rvcm15MTYgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlhzdG9ybXkxNiBPcHRpb25zIgorLlBQCitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBYc3Rvcm15MTY6CisuSVAgIlxmQlwtbXNpbVxmUiIgNAorLklYIEl0ZW0gIi1tc2ltIgorQ2hvb3NlIHN0YXJ0dXAgZmlsZXMgYW5kIGxpbmtlciBzY3JpcHQgc3VpdGFibGUgZm9yIHRoZSBzaW11bGF0b3IuCisuUFAKK1xmSVh0ZW5zYSBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiWHRlbnNhIE9wdGlvbnMiCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBmb3IgWHRlbnNhIHRhcmdldHM6CisuSVAgIlxmQlwtbWNvbnN0MTZcZlIiIDQKKy5JWCBJdGVtICItbWNvbnN0MTYiCisuUEQgMAorLklQICJcZkJcLW1ub1wtY29uc3QxNlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tY29uc3QxNiIKKy5QRAorRW5hYmxlIG9yIGRpc2FibGUgdXNlIG9mIFxmKENXXCooQ2BDT05TVDE2XCooQydcZlIgaW5zdHJ1Y3Rpb25zIGZvciBsb2FkaW5nCitjb25zdGFudCB2YWx1ZXMuICBUaGUgXGYoQ1dcKihDYENPTlNUMTZcKihDJ1xmUiBpbnN0cnVjdGlvbiBpcyBjdXJyZW50bHkgbm90IGEKK3N0YW5kYXJkIG9wdGlvbiBmcm9tIFRlbnNpbGljYS4gIFdoZW4gZW5hYmxlZCwgXGYoQ1dcKihDYENPTlNUMTZcKihDJ1xmUgoraW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgc3RhbmRhcmQgXGYoQ1dcKihDYEwzMlJcKihDJ1xmUgoraW5zdHJ1Y3Rpb25zLiAgVGhlIHVzZSBvZiBcZihDV1wqKENgQ09OU1QxNlwqKEMnXGZSIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbmx5IGlmCit0aGUgXGYoQ1dcKihDYEwzMlJcKihDJ1xmUiBpbnN0cnVjdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorLklQICJcZkJcLW1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tZnVzZWQtbWFkZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnVzZWQtbWFkZCIKKy5QRAorRW5hYmxlIG9yIGRpc2FibGUgdXNlIG9mIGZ1c2VkIG11bHRpcGx5L2FkZCBhbmQgbXVsdGlwbHkvc3VidHJhY3QKK2luc3RydWN0aW9ucyBpbiB0aGUgZmxvYXRpbmctcG9pbnQgb3B0aW9uLiAgVGhpcyBoYXMgbm8gZWZmZWN0IGlmIHRoZQorZmxvYXRpbmctcG9pbnQgb3B0aW9uIGlzIG5vdCBhbHNvIGVuYWJsZWQuICBEaXNhYmxpbmcgZnVzZWQgbXVsdGlwbHkvYWRkCithbmQgbXVsdGlwbHkvc3VidHJhY3QgaW5zdHJ1Y3Rpb25zIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gdXNlIHNlcGFyYXRlCitpbnN0cnVjdGlvbnMgZm9yIHRoZSBtdWx0aXBseSBhbmQgYWRkL3N1YnRyYWN0IG9wZXJhdGlvbnMuICBUaGlzIG1heSBiZQorZGVzaXJhYmxlIGluIHNvbWUgY2FzZXMgd2hlcmUgc3RyaWN0IFxzLTFJRUVFXHMwIDc1NFwtY29tcGxpYW50IHJlc3VsdHMgYXJlCityZXF1aXJlZDogdGhlIGZ1c2VkIG11bHRpcGx5IGFkZC9zdWJ0cmFjdCBpbnN0cnVjdGlvbnMgZG8gbm90IHJvdW5kIHRoZQoraW50ZXJtZWRpYXRlIHJlc3VsdCwgdGhlcmVieSBwcm9kdWNpbmcgcmVzdWx0cyB3aXRoIFxmSW1vcmVcZlIgYml0cyBvZgorcHJlY2lzaW9uIHRoYW4gc3BlY2lmaWVkIGJ5IHRoZSBccy0xSUVFRVxzMCBzdGFuZGFyZC4gIERpc2FibGluZyBmdXNlZCBtdWx0aXBseQorYWRkL3N1YnRyYWN0IGluc3RydWN0aW9ucyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgcHJvZ3JhbSBvdXRwdXQgaXMgbm90CitzZW5zaXRpdmUgdG8gdGhlIGNvbXBpbGVyJ3MgYWJpbGl0eSB0byBjb21iaW5lIG11bHRpcGx5IGFuZCBhZGQvc3VidHJhY3QKK29wZXJhdGlvbnMuCisuSVAgIlxmQlwtbXNlcmlhbGl6ZVwtdm9sYXRpbGVcZlIiIDQKKy5JWCBJdGVtICItbXNlcmlhbGl6ZS12b2xhdGlsZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zZXJpYWxpemVcLXZvbGF0aWxlXGZSIiA0CisuSVggSXRlbSAiLW1uby1zZXJpYWxpemUtdm9sYXRpbGUiCisuUEQKK1doZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgXHMtMUdDQ1xzMCBpbnNlcnRzIFxmKENXXCooQ2BNRU1XXCooQydcZlIgaW5zdHJ1Y3Rpb25zIGJlZm9yZQorXCZcZihDV1wqKENgdm9sYXRpbGVcKihDJ1xmUiBtZW1vcnkgcmVmZXJlbmNlcyB0byBndWFyYW50ZWUgc2VxdWVudGlhbCBjb25zaXN0ZW5jeS4KK1RoZSBkZWZhdWx0IGlzIFxmQlwtbXNlcmlhbGl6ZVwtdm9sYXRpbGVcZlIuICBVc2UKK1wmXGZCXC1tbm9cLXNlcmlhbGl6ZVwtdm9sYXRpbGVcZlIgdG8gb21pdCB0aGUgXGYoQ1dcKihDYE1FTVdcKihDJ1xmUiBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbWZvcmNlXC1ub1wtcGljXGZSIiA0CisuSVggSXRlbSAiLW1mb3JjZS1uby1waWMiCitGb3IgdGFyZ2V0cywgbGlrZSBHTlUvTGludXgsIHdoZXJlIGFsbCB1c2VyLW1vZGUgWHRlbnNhIGNvZGUgbXVzdCBiZQorcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSAoXHMtMVBJQ1xzMCksIHRoaXMgb3B0aW9uIGRpc2FibGVzIFxzLTFQSUNcczAgZm9yIGNvbXBpbGluZwora2VybmVsIGNvZGUuCisuSVAgIlxmQlwtbXRleHRcLXNlY3Rpb25cLWxpdGVyYWxzXGZSIiA0CisuSVggSXRlbSAiLW10ZXh0LXNlY3Rpb24tbGl0ZXJhbHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdGV4dFwtc2VjdGlvblwtbGl0ZXJhbHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXRleHQtc2VjdGlvbi1saXRlcmFscyIKKy5QRAorQ29udHJvbCB0aGUgdHJlYXRtZW50IG9mIGxpdGVyYWwgcG9vbHMuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLW1ub1wtdGV4dFwtc2VjdGlvblwtbGl0ZXJhbHNcZlIsIHdoaWNoIHBsYWNlcyBsaXRlcmFscyBpbiBhIHNlcGFyYXRlCitzZWN0aW9uIGluIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMgYWxsb3dzIHRoZSBsaXRlcmFsIHBvb2wgdG8gYmUgcGxhY2VkCitpbiBhIGRhdGEgXHMtMVJBTS9ST01cczAsIGFuZCBpdCBhbHNvIGFsbG93cyB0aGUgbGlua2VyIHRvIGNvbWJpbmUgbGl0ZXJhbAorcG9vbHMgZnJvbSBzZXBhcmF0ZSBvYmplY3QgZmlsZXMgdG8gcmVtb3ZlIHJlZHVuZGFudCBsaXRlcmFscyBhbmQKK2ltcHJvdmUgY29kZSBzaXplLiAgV2l0aCBcZkJcLW10ZXh0XC1zZWN0aW9uXC1saXRlcmFsc1xmUiwgdGhlIGxpdGVyYWxzCithcmUgaW50ZXJzcGVyc2VkIGluIHRoZSB0ZXh0IHNlY3Rpb24gaW4gb3JkZXIgdG8ga2VlcCB0aGVtIGFzIGNsb3NlIGFzCitwb3NzaWJsZSB0byB0aGVpciByZWZlcmVuY2VzLiAgVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IGZvciBsYXJnZSBhc3NlbWJseQorZmlsZXMuCisuSVAgIlxmQlwtbXRhcmdldFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbXRhcmdldC1hbGlnbiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC10YXJnZXRcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1uby10YXJnZXQtYWxpZ24iCisuUEQKK1doZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgXHMtMUdDQ1xzMCBpbnN0cnVjdHMgdGhlIGFzc2VtYmxlciB0bworYXV0b21hdGljYWxseSBhbGlnbiBpbnN0cnVjdGlvbnMgdG8gcmVkdWNlIGJyYW5jaCBwZW5hbHRpZXMgYXQgdGhlCitleHBlbnNlIG9mIHNvbWUgY29kZSBkZW5zaXR5LiAgVGhlIGFzc2VtYmxlciBhdHRlbXB0cyB0byB3aWRlbiBkZW5zaXR5CitpbnN0cnVjdGlvbnMgdG8gYWxpZ24gYnJhbmNoIHRhcmdldHMgYW5kIHRoZSBpbnN0cnVjdGlvbnMgZm9sbG93aW5nIGNhbGwKK2luc3RydWN0aW9ucy4gIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHByZWNlZGluZyBzYWZlIGRlbnNpdHkKK2luc3RydWN0aW9ucyB0byBhbGlnbiBhIHRhcmdldCwgbm8gd2lkZW5pbmcgaXMgcGVyZm9ybWVkLiAgVGhlCitkZWZhdWx0IGlzIFxmQlwtbXRhcmdldFwtYWxpZ25cZlIuICBUaGVzZSBvcHRpb25zIGRvIG5vdCBhZmZlY3QgdGhlCit0cmVhdG1lbnQgb2YgYXV0by1hbGlnbmVkIGluc3RydWN0aW9ucyBsaWtlIFxmKENXXCooQ2BMT09QXCooQydcZlIsIHdoaWNoIHRoZQorYXNzZW1ibGVyIGFsd2F5cyBhbGlnbnMsIGVpdGhlciBieSB3aWRlbmluZyBkZW5zaXR5IGluc3RydWN0aW9ucyBvcgorYnkgaW5zZXJ0aW5nIFxzLTFOT1BcczAgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1sb25nY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbWxvbmdjYWxscyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1sb25nY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxvbmdjYWxscyIKKy5QRAorV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBccy0xR0NDXHMwIGluc3RydWN0cyB0aGUgYXNzZW1ibGVyIHRvIHRyYW5zbGF0ZQorZGlyZWN0IGNhbGxzIHRvIGluZGlyZWN0IGNhbGxzIHVubGVzcyBpdCBjYW4gZGV0ZXJtaW5lIHRoYXQgdGhlIHRhcmdldAorb2YgYSBkaXJlY3QgY2FsbCBpcyBpbiB0aGUgcmFuZ2UgYWxsb3dlZCBieSB0aGUgY2FsbCBpbnN0cnVjdGlvbi4gIFRoaXMKK3RyYW5zbGF0aW9uIHR5cGljYWxseSBvY2N1cnMgZm9yIGNhbGxzIHRvIGZ1bmN0aW9ucyBpbiBvdGhlciBzb3VyY2UKK2ZpbGVzLiAgU3BlY2lmaWNhbGx5LCB0aGUgYXNzZW1ibGVyIHRyYW5zbGF0ZXMgYSBkaXJlY3QgXGYoQ1dcKihDYENBTExcKihDJ1xmUgoraW5zdHJ1Y3Rpb24gaW50byBhbiBcZihDV1wqKENgTDMyUlwqKEMnXGZSIGZvbGxvd2VkIGJ5IGEgXGYoQ1dcKihDYENBTExYXCooQydcZlIgaW5zdHJ1Y3Rpb24uCitUaGUgZGVmYXVsdCBpcyBcZkJcLW1ub1wtbG9uZ2NhbGxzXGZSLiAgVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaW4KK3Byb2dyYW1zIHdoZXJlIHRoZSBjYWxsIHRhcmdldCBjYW4gcG90ZW50aWFsbHkgYmUgb3V0IG9mIHJhbmdlLiAgVGhpcworb3B0aW9uIGlzIGltcGxlbWVudGVkIGluIHRoZSBhc3NlbWJsZXIsIG5vdCB0aGUgY29tcGlsZXIsIHNvIHRoZQorYXNzZW1ibHkgY29kZSBnZW5lcmF0ZWQgYnkgXHMtMUdDQ1xzMCBzdGlsbCBzaG93cyBkaXJlY3QgY2FsbAoraW5zdHJ1Y3Rpb25zXC1cLVwtbG9vayBhdCB0aGUgZGlzYXNzZW1ibGVkIG9iamVjdCBjb2RlIHRvIHNlZSB0aGUgYWN0dWFsCitpbnN0cnVjdGlvbnMuICBOb3RlIHRoYXQgdGhlIGFzc2VtYmxlciB1c2VzIGFuIGluZGlyZWN0IGNhbGwgZm9yCitldmVyeSBjcm9zcy1maWxlIGNhbGwsIG5vdCBqdXN0IHRob3NlIHRoYXQgcmVhbGx5IGFyZSBvdXQgb2YgcmFuZ2UuCisuUFAKK1xmSXpTZXJpZXMgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gInpTZXJpZXMgT3B0aW9ucyIKKy5QUAorVGhlc2UgYXJlIGxpc3RlZCB1bmRlcgorLlNTICJPcHRpb25zIGZvciBDb2RlIEdlbmVyYXRpb24gQ29udmVudGlvbnMiCisuSVggU3Vic2VjdGlvbiAiT3B0aW9ucyBmb3IgQ29kZSBHZW5lcmF0aW9uIENvbnZlbnRpb25zIgorVGhlc2UgbWFjaGluZS1pbmRlcGVuZGVudCBvcHRpb25zIGNvbnRyb2wgdGhlIGludGVyZmFjZSBjb252ZW50aW9ucwordXNlZCBpbiBjb2RlIGdlbmVyYXRpb24uCisuUFAKK01vc3Qgb2YgdGhlbSBoYXZlIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zOyB0aGUgbmVnYXRpdmUgZm9ybQorb2YgXGZCXC1mZm9vXGZSIGlzIFxmQlwtZm5vXC1mb29cZlIuICBJbiB0aGUgdGFibGUgYmVsb3csIG9ubHkKK29uZSBvZiB0aGUgZm9ybXMgaXMgbGlzdGVkXC1cLVwtdGhlIG9uZSB0aGF0IGlzIG5vdCB0aGUgZGVmYXVsdC4gIFlvdQorY2FuIGZpZ3VyZSBvdXQgdGhlIG90aGVyIGZvcm0gYnkgZWl0aGVyIHJlbW92aW5nIFxmQm5vXC1cZlIgb3IgYWRkaW5nCitpdC4KKy5JUCAiXGZCXC1mYm91bmRzXC1jaGVja1xmUiIgNAorLklYIEl0ZW0gIi1mYm91bmRzLWNoZWNrIgorRm9yIGZyb250IGVuZHMgdGhhdCBzdXBwb3J0IGl0LCBnZW5lcmF0ZSBhZGRpdGlvbmFsIGNvZGUgdG8gY2hlY2sgdGhhdAoraW5kaWNlcyB1c2VkIHRvIGFjY2VzcyBhcnJheXMgYXJlIHdpdGhpbiB0aGUgZGVjbGFyZWQgcmFuZ2UuICBUaGlzIGlzCitjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgYnkgdGhlIEphdmEgYW5kIEZvcnRyYW4gZnJvbnQgZW5kcywgd2hlcmUKK3RoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIHRydWUgYW5kIGZhbHNlIHJlc3BlY3RpdmVseS4KKy5JUCAiXGZCXC1mc3RhY2tcLXJldXNlPVxmUlxmSXJldXNlLWxldmVsXGZSIiA0CisuSVggSXRlbSAiLWZzdGFjay1yZXVzZT1yZXVzZS1sZXZlbCIKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHN0YWNrIHNwYWNlIHJldXNlIGZvciB1c2VyIGRlY2xhcmVkIGxvY2FsL2F1dG8gdmFyaWFibGVzCithbmQgY29tcGlsZXIgZ2VuZXJhdGVkIHRlbXBvcmFyaWVzLiAgXGZJcmV1c2VfbGV2ZWxcZlIgY2FuIGJlIFxmQmFsbFxmUiwKK1wmXGZCbmFtZWRfdmFyc1xmUiwgb3IgXGZCbm9uZVxmUi4gXGZCYWxsXGZSIGVuYWJsZXMgc3RhY2sgcmV1c2UgZm9yIGFsbAorbG9jYWwgdmFyaWFibGVzIGFuZCB0ZW1wb3JhcmllcywgXGZCbmFtZWRfdmFyc1xmUiBlbmFibGVzIHRoZSByZXVzZSBvbmx5IGZvcgordXNlciBkZWZpbmVkIGxvY2FsIHZhcmlhYmxlcyB3aXRoIG5hbWVzLCBhbmQgXGZCbm9uZVxmUiBkaXNhYmxlcyBzdGFjayByZXVzZQorY29tcGxldGVseS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXGZCYWxsXGZSLiBUaGUgb3B0aW9uIGlzIG5lZWRlZCB3aGVuIHRoZQorcHJvZ3JhbSBleHRlbmRzIHRoZSBsaWZldGltZSBvZiBhIHNjb3BlZCBsb2NhbCB2YXJpYWJsZSBvciBhIGNvbXBpbGVyIGdlbmVyYXRlZAordGVtcG9yYXJ5IGJleW9uZCB0aGUgZW5kIHBvaW50IGRlZmluZWQgYnkgdGhlIGxhbmd1YWdlLiAgV2hlbiBhIGxpZmV0aW1lIG9mCithIHZhcmlhYmxlIGVuZHMsIGFuZCBpZiB0aGUgdmFyaWFibGUgbGl2ZXMgaW4gbWVtb3J5LCB0aGUgb3B0aW1pemluZyBjb21waWxlcgoraGFzIHRoZSBmcmVlZG9tIHRvIHJldXNlIGl0cyBzdGFjayBzcGFjZSB3aXRoIG90aGVyIHRlbXBvcmFyaWVzIG9yIHNjb3BlZAorbG9jYWwgdmFyaWFibGVzIHdob3NlIGxpdmUgcmFuZ2UgZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGl0LiBMZWdhY3kgY29kZSBleHRlbmRpbmcKK2xvY2FsIGxpZmV0aW1lIHdpbGwgbGlrZWx5IHRvIGJyZWFrIHdpdGggdGhlIHN0YWNrIHJldXNlIG9wdGltaXphdGlvbi4KKy5TcAorRm9yIGV4YW1wbGUsCisuU3AKKy5WYiAzCitcJiAgICAgICAgICAgaW50ICpwOworXCYgICAgICAgICAgIHsKK1wmICAgICAgICAgICAgIGludCBsb2NhbDE7CitcJiAgICAgICAgCitcJiAgICAgICAgICAgICBwID0gJmxvY2FsMTsKK1wmICAgICAgICAgICAgIGxvY2FsMSA9IDEwOworXCYgICAgICAgICAgICAgLi4uLgorXCYgICAgICAgICAgIH0KK1wmICAgICAgICAgICB7CitcJiAgICAgICAgICAgICAgaW50IGxvY2FsMjsKK1wmICAgICAgICAgICAgICBsb2NhbDIgPSAyMDsKK1wmICAgICAgICAgICAgICAuLi4KK1wmICAgICAgICAgICB9CitcJiAgICAgICAgCitcJiAgICAgICAgICAgaWYgKCpwID09IDEwKSAgLy8gb3V0IG9mIHNjb3BlIHVzZSBvZiBsb2NhbDEKK1wmICAgICAgICAgICAgIHsKK1wmICAgICAgICAKK1wmICAgICAgICAgICAgIH0KKy5WZQorLlNwCitBbm90aGVyIGV4YW1wbGU6CisuU3AKKy5WYiA2CitcJiAgICAgICAgICAgc3RydWN0IEEKK1wmICAgICAgICAgICB7CitcJiAgICAgICAgICAgICAgIEEoaW50IGspIDogaShrKSwgaihrKSB7IH0KK1wmICAgICAgICAgICAgICAgaW50IGk7CitcJiAgICAgICAgICAgICAgIGludCBqOworXCYgICAgICAgICAgIH07CitcJiAgICAgICAgCitcJiAgICAgICAgICAgQSAqYXA7CitcJiAgICAgICAgCitcJiAgICAgICAgICAgdm9pZCBmb28oY29uc3QgQSYgYXIpCitcJiAgICAgICAgICAgeworXCYgICAgICAgICAgICAgIGFwID0gJmFyOworXCYgICAgICAgICAgIH0KK1wmICAgICAgICAKK1wmICAgICAgICAgICB2b2lkIGJhcigpCitcJiAgICAgICAgICAgeworXCYgICAgICAgICAgICAgIGZvbyhBKDEwKSk7IC8vIHRlbXAgb2JqZWN0XCooQXFzIGxpZmV0aW1lIGVuZHMgd2hlbiBmb28gcmV0dXJucworXCYgICAgICAgIAorXCYgICAgICAgICAgICAgIHsKK1wmICAgICAgICAgICAgICAgIEEgYSgyMCk7CitcJiAgICAgICAgICAgICAgICAuLi4uCitcJiAgICAgICAgICAgICAgfQorXCYgICAgICAgICAgICAgIGFwXC0+aSs9IDEwOyAgLy8gYXAgcmVmZXJlbmNlcyBvdXQgb2Ygc2NvcGUgdGVtcCB3aG9zZSBzcGFjZQorXCYgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyByZXVzZWQgd2l0aCBhLiBXaGF0IGlzIHRoZSB2YWx1ZSBvZiBhcFwtPmk/CitcJiAgICAgICAgICAgfQorLlZlCisuU3AKK1RoZSBsaWZldGltZSBvZiBhIGNvbXBpbGVyIGdlbmVyYXRlZCB0ZW1wb3JhcnkgaXMgd2VsbCBkZWZpbmVkIGJ5IHRoZSBcKihDKworc3RhbmRhcmQuIFdoZW4gYSBsaWZldGltZSBvZiBhIHRlbXBvcmFyeSBlbmRzLCBhbmQgaWYgdGhlIHRlbXBvcmFyeSBsaXZlcworaW4gbWVtb3J5LCB0aGUgb3B0aW1pemluZyBjb21waWxlciBoYXMgdGhlIGZyZWVkb20gdG8gcmV1c2UgaXRzIHN0YWNrCitzcGFjZSB3aXRoIG90aGVyIHRlbXBvcmFyaWVzIG9yIHNjb3BlZCBsb2NhbCB2YXJpYWJsZXMgd2hvc2UgbGl2ZSByYW5nZQorZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGl0LiBIb3dldmVyIHNvbWUgb2YgdGhlIGxlZ2FjeSBjb2RlIHJlbGllcyBvbgordGhlIGJlaGF2aW9yIG9mIG9sZGVyIGNvbXBpbGVycyBpbiB3aGljaCB0ZW1wb3Jhcmllcycgc3RhY2sgc3BhY2UgaXMKK25vdCByZXVzZWQsIHRoZSBhZ2dyZXNzaXZlIHN0YWNrIHJldXNlIGNhbiBsZWFkIHRvIHJ1bnRpbWUgZXJyb3JzLiBUaGlzCitvcHRpb24gaXMgdXNlZCB0byBjb250cm9sIHRoZSB0ZW1wb3Jhcnkgc3RhY2sgcmV1c2Ugb3B0aW1pemF0aW9uLgorLklQICJcZkJcLWZ0cmFwdlxmUiIgNAorLklYIEl0ZW0gIi1mdHJhcHYiCitUaGlzIG9wdGlvbiBnZW5lcmF0ZXMgdHJhcHMgZm9yIHNpZ25lZCBvdmVyZmxvdyBvbiBhZGRpdGlvbiwgc3VidHJhY3Rpb24sCittdWx0aXBsaWNhdGlvbiBvcGVyYXRpb25zLgorLklQICJcZkJcLWZ3cmFwdlxmUiIgNAorLklYIEl0ZW0gIi1md3JhcHYiCitUaGlzIG9wdGlvbiBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSB0aGF0IHNpZ25lZCBhcml0aG1ldGljCitvdmVyZmxvdyBvZiBhZGRpdGlvbiwgc3VidHJhY3Rpb24gYW5kIG11bHRpcGxpY2F0aW9uIHdyYXBzIGFyb3VuZAordXNpbmcgdHdvcy1jb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLiAgVGhpcyBmbGFnIGVuYWJsZXMgc29tZSBvcHRpbWl6YXRpb25zCithbmQgZGlzYWJsZXMgb3RoZXJzLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciB0aGUgSmF2YQorZnJvbnQgZW5kLCBhcyByZXF1aXJlZCBieSB0aGUgSmF2YSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uLgorLklQICJcZkJcLWZleGNlcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLWZleGNlcHRpb25zIgorRW5hYmxlIGV4Y2VwdGlvbiBoYW5kbGluZy4gIEdlbmVyYXRlcyBleHRyYSBjb2RlIG5lZWRlZCB0byBwcm9wYWdhdGUKK2V4Y2VwdGlvbnMuICBGb3Igc29tZSB0YXJnZXRzLCB0aGlzIGltcGxpZXMgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgZnJhbWUKK3Vud2luZCBpbmZvcm1hdGlvbiBmb3IgYWxsIGZ1bmN0aW9ucywgd2hpY2ggY2FuIHByb2R1Y2Ugc2lnbmlmaWNhbnQgZGF0YQorc2l6ZSBvdmVyaGVhZCwgYWx0aG91Z2ggaXQgZG9lcyBub3QgYWZmZWN0IGV4ZWN1dGlvbi4gIElmIHlvdSBkbyBub3QKK3NwZWNpZnkgdGhpcyBvcHRpb24sIFxzLTFHQ0NcczAgZW5hYmxlcyBpdCBieSBkZWZhdWx0IGZvciBsYW5ndWFnZXMgbGlrZQorXCZcKihDKyB0aGF0IG5vcm1hbGx5IHJlcXVpcmUgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgZGlzYWJsZXMgaXQgZm9yCitsYW5ndWFnZXMgbGlrZSBDIHRoYXQgZG8gbm90IG5vcm1hbGx5IHJlcXVpcmUgaXQuICBIb3dldmVyLCB5b3UgbWF5IG5lZWQKK3RvIGVuYWJsZSB0aGlzIG9wdGlvbiB3aGVuIGNvbXBpbGluZyBDIGNvZGUgdGhhdCBuZWVkcyB0byBpbnRlcm9wZXJhdGUKK3Byb3Blcmx5IHdpdGggZXhjZXB0aW9uIGhhbmRsZXJzIHdyaXR0ZW4gaW4gXCooQysuICBZb3UgbWF5IGFsc28gd2lzaCB0bworZGlzYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIGNvbXBpbGluZyBvbGRlciBcKihDKyBwcm9ncmFtcyB0aGF0IGRvbid0Cit1c2UgZXhjZXB0aW9uIGhhbmRsaW5nLgorLklQICJcZkJcLWZub25cLWNhbGxcLWV4Y2VwdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZm5vbi1jYWxsLWV4Y2VwdGlvbnMiCitHZW5lcmF0ZSBjb2RlIHRoYXQgYWxsb3dzIHRyYXBwaW5nIGluc3RydWN0aW9ucyB0byB0aHJvdyBleGNlcHRpb25zLgorTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgcGxhdGZvcm0tc3BlY2lmaWMgcnVudGltZSBzdXBwb3J0IHRoYXQgZG9lcworbm90IGV4aXN0IGV2ZXJ5d2hlcmUuICBNb3Jlb3ZlciwgaXQgb25seSBhbGxvd3MgXGZJdHJhcHBpbmdcZlIKK2luc3RydWN0aW9ucyB0byB0aHJvdyBleGNlcHRpb25zLCBpLmUuIG1lbW9yeSByZWZlcmVuY2VzIG9yIGZsb2F0aW5nLXBvaW50CitpbnN0cnVjdGlvbnMuICBJdCBkb2VzIG5vdCBhbGxvdyBleGNlcHRpb25zIHRvIGJlIHRocm93biBmcm9tCithcmJpdHJhcnkgc2lnbmFsIGhhbmRsZXJzIHN1Y2ggYXMgXGYoQ1dcKihDYFNJR0FMUk1cKihDJ1xmUi4KKy5JUCAiXGZCXC1mZGVsZXRlXC1kZWFkXC1leGNlcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLWZkZWxldGUtZGVhZC1leGNlcHRpb25zIgorQ29uc2lkZXIgdGhhdCBpbnN0cnVjdGlvbnMgdGhhdCBtYXkgdGhyb3cgZXhjZXB0aW9ucyBidXQgZG9uJ3Qgb3RoZXJ3aXNlCitjb250cmlidXRlIHRvIHRoZSBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gY2FuIGJlIG9wdGltaXplZCBhd2F5LgorVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciB0aGUgQWRhIGZyb250IGVuZCwgYXMgcGVybWl0dGVkIGJ5Cit0aGUgQWRhIGxhbmd1YWdlIHNwZWNpZmljYXRpb24uCitPcHRpbWl6YXRpb24gcGFzc2VzIHRoYXQgY2F1c2UgZGVhZCBleGNlcHRpb25zIHRvIGJlIHJlbW92ZWQgYXJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSBhdCBkaWZmZXJlbnQgb3B0aW1pemF0aW9uIGxldmVscy4KKy5JUCAiXGZCXC1mdW53aW5kXC10YWJsZXNcZlIiIDQKKy5JWCBJdGVtICItZnVud2luZC10YWJsZXMiCitTaW1pbGFyIHRvIFxmQlwtZmV4Y2VwdGlvbnNcZlIsIGV4Y2VwdCB0aGF0IGl0IGp1c3QgZ2VuZXJhdGVzIGFueSBuZWVkZWQKK3N0YXRpYyBkYXRhLCBidXQgZG9lcyBub3QgYWZmZWN0IHRoZSBnZW5lcmF0ZWQgY29kZSBpbiBhbnkgb3RoZXIgd2F5LgorWW91IG5vcm1hbGx5IGRvIG5vdCBuZWVkIHRvIGVuYWJsZSB0aGlzIG9wdGlvbjsgaW5zdGVhZCwgYSBsYW5ndWFnZSBwcm9jZXNzb3IKK3RoYXQgbmVlZHMgdGhpcyBoYW5kbGluZyBlbmFibGVzIGl0IG9uIHlvdXIgYmVoYWxmLgorLklQICJcZkJcLWZhc3luY2hyb25vdXNcLXVud2luZFwtdGFibGVzXGZSIiA0CisuSVggSXRlbSAiLWZhc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcyIKK0dlbmVyYXRlIHVud2luZCB0YWJsZSBpbiBccy0xRFdBUkZcczAgMiBmb3JtYXQsIGlmIHN1cHBvcnRlZCBieSB0YXJnZXQgbWFjaGluZS4gIFRoZQordGFibGUgaXMgZXhhY3QgYXQgZWFjaCBpbnN0cnVjdGlvbiBib3VuZGFyeSwgc28gaXQgY2FuIGJlIHVzZWQgZm9yIHN0YWNrCit1bndpbmRpbmcgZnJvbSBhc3luY2hyb25vdXMgZXZlbnRzIChzdWNoIGFzIGRlYnVnZ2VyIG9yIGdhcmJhZ2UgY29sbGVjdG9yKS4KKy5JUCAiXGZCXC1mcGNjXC1zdHJ1Y3RcLXJldHVyblxmUiIgNAorLklYIEl0ZW0gIi1mcGNjLXN0cnVjdC1yZXR1cm4iCitSZXR1cm4gXCooTCJzaG9ydFwqKFIiIFxmKENXXCooQ2BzdHJ1Y3RcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHVuaW9uXCooQydcZlIgdmFsdWVzIGluIG1lbW9yeSBsaWtlCitsb25nZXIgb25lcywgcmF0aGVyIHRoYW4gaW4gcmVnaXN0ZXJzLiAgVGhpcyBjb252ZW50aW9uIGlzIGxlc3MKK2VmZmljaWVudCwgYnV0IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mIGFsbG93aW5nIGludGVyY2FsbGFiaWxpdHkgYmV0d2VlbgorR0NDLWNvbXBpbGVkIGZpbGVzIGFuZCBmaWxlcyBjb21waWxlZCB3aXRoIG90aGVyIGNvbXBpbGVycywgcGFydGljdWxhcmx5Cit0aGUgUG9ydGFibGUgQyBDb21waWxlciAocGNjKS4KKy5TcAorVGhlIHByZWNpc2UgY29udmVudGlvbiBmb3IgcmV0dXJuaW5nIHN0cnVjdHVyZXMgaW4gbWVtb3J5IGRlcGVuZHMKK29uIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MuCisuU3AKK1Nob3J0IHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBhcmUgdGhvc2Ugd2hvc2Ugc2l6ZSBhbmQgYWxpZ25tZW50IG1hdGNoCit0aGF0IG9mIHNvbWUgaW50ZWdlciB0eXBlLgorLlNwCitcJlxmQldhcm5pbmc6XGZSIGNvZGUgY29tcGlsZWQgd2l0aCB0aGUgXGZCXC1mcGNjXC1zdHJ1Y3RcLXJldHVyblxmUgorc3dpdGNoIGlzIG5vdCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGNvZGUgY29tcGlsZWQgd2l0aCB0aGUKK1wmXGZCXC1mcmVnXC1zdHJ1Y3RcLXJldHVyblxmUiBzd2l0Y2guCitVc2UgaXQgdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisuSVAgIlxmQlwtZnJlZ1wtc3RydWN0XC1yZXR1cm5cZlIiIDQKKy5JWCBJdGVtICItZnJlZy1zdHJ1Y3QtcmV0dXJuIgorUmV0dXJuIFxmKENXXCooQ2BzdHJ1Y3RcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHVuaW9uXCooQydcZlIgdmFsdWVzIGluIHJlZ2lzdGVycyB3aGVuIHBvc3NpYmxlLgorVGhpcyBpcyBtb3JlIGVmZmljaWVudCBmb3Igc21hbGwgc3RydWN0dXJlcyB0aGFuCitcJlxmQlwtZnBjY1wtc3RydWN0XC1yZXR1cm5cZlIuCisuU3AKK0lmIHlvdSBzcGVjaWZ5IG5laXRoZXIgXGZCXC1mcGNjXC1zdHJ1Y3RcLXJldHVyblxmUiBub3IKK1wmXGZCXC1mcmVnXC1zdHJ1Y3RcLXJldHVyblxmUiwgXHMtMUdDQ1xzMCBkZWZhdWx0cyB0byB3aGljaGV2ZXIgY29udmVudGlvbiBpcworc3RhbmRhcmQgZm9yIHRoZSB0YXJnZXQuICBJZiB0aGVyZSBpcyBubyBzdGFuZGFyZCBjb252ZW50aW9uLCBccy0xR0NDXHMwCitkZWZhdWx0cyB0byBcZkJcLWZwY2NcLXN0cnVjdFwtcmV0dXJuXGZSLCBleGNlcHQgb24gdGFyZ2V0cyB3aGVyZSBccy0xR0NDXHMwIGlzCit0aGUgcHJpbmNpcGFsIGNvbXBpbGVyLiAgSW4gdGhvc2UgY2FzZXMsIHdlIGNhbiBjaG9vc2UgdGhlIHN0YW5kYXJkLCBhbmQKK3dlIGNob3NlIHRoZSBtb3JlIGVmZmljaWVudCByZWdpc3RlciByZXR1cm4gYWx0ZXJuYXRpdmUuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgY29kZSBjb21waWxlZCB3aXRoIHRoZSBcZkJcLWZyZWdcLXN0cnVjdFwtcmV0dXJuXGZSCitzd2l0Y2ggaXMgbm90IGJpbmFyeSBjb21wYXRpYmxlIHdpdGggY29kZSBjb21waWxlZCB3aXRoIHRoZQorXCZcZkJcLWZwY2NcLXN0cnVjdFwtcmV0dXJuXGZSIHN3aXRjaC4KK1VzZSBpdCB0byBjb25mb3JtIHRvIGEgbm9uLWRlZmF1bHQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4KKy5JUCAiXGZCXC1mc2hvcnRcLWVudW1zXGZSIiA0CisuSVggSXRlbSAiLWZzaG9ydC1lbnVtcyIKK0FsbG9jYXRlIHRvIGFuIFxmKENXXCooQ2BlbnVtXCooQydcZlIgdHlwZSBvbmx5IGFzIG1hbnkgYnl0ZXMgYXMgaXQgbmVlZHMgZm9yIHRoZQorZGVjbGFyZWQgcmFuZ2Ugb2YgcG9zc2libGUgdmFsdWVzLiAgU3BlY2lmaWNhbGx5LCB0aGUgXGYoQ1dcKihDYGVudW1cKihDJ1xmUiB0eXBlCitpcyBlcXVpdmFsZW50IHRvIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIHR5cGUgdGhhdCBoYXMgZW5vdWdoIHJvb20uCisuU3AKK1wmXGZCV2FybmluZzpcZlIgdGhlIFxmQlwtZnNob3J0XC1lbnVtc1xmUiBzd2l0Y2ggY2F1c2VzIFxzLTFHQ0NcczAgdG8gZ2VuZXJhdGUKK2NvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQgc3dpdGNoLgorVXNlIGl0IHRvIGNvbmZvcm0gdG8gYSBub24tZGVmYXVsdCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlLgorLklQICJcZkJcLWZzaG9ydFwtZG91YmxlXGZSIiA0CisuSVggSXRlbSAiLWZzaG9ydC1kb3VibGUiCitVc2UgdGhlIHNhbWUgc2l6ZSBmb3IgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSIGFzIGZvciBcZihDV1wqKENgZmxvYXRcKihDJ1xmUi4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiB0aGUgXGZCXC1mc2hvcnRcLWRvdWJsZVxmUiBzd2l0Y2ggY2F1c2VzIFxzLTFHQ0NcczAgdG8gZ2VuZXJhdGUKK2NvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQgc3dpdGNoLgorVXNlIGl0IHRvIGNvbmZvcm0gdG8gYSBub24tZGVmYXVsdCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlLgorLklQICJcZkJcLWZzaG9ydFwtd2NoYXJcZlIiIDQKKy5JWCBJdGVtICItZnNob3J0LXdjaGFyIgorT3ZlcnJpZGUgdGhlIHVuZGVybHlpbmcgdHlwZSBmb3IgXGZCd2NoYXJfdFxmUiB0byBiZSBcZkJzaG9ydAordW5zaWduZWQgaW50XGZSIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9yIHRoZSB0YXJnZXQuICBUaGlzIG9wdGlvbiBpcwordXNlZnVsIGZvciBidWlsZGluZyBwcm9ncmFtcyB0byBydW4gdW5kZXIgXHMtMVdJTkVcczAuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgdGhlIFxmQlwtZnNob3J0XC13Y2hhclxmUiBzd2l0Y2ggY2F1c2VzIFxzLTFHQ0NcczAgdG8gZ2VuZXJhdGUKK2NvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQgc3dpdGNoLgorVXNlIGl0IHRvIGNvbmZvcm0gdG8gYSBub24tZGVmYXVsdCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlLgorLklQICJcZkJcLWZub1wtY29tbW9uXGZSIiA0CisuSVggSXRlbSAiLWZuby1jb21tb24iCitJbiBDIGNvZGUsIGNvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdW5pbml0aWFsaXplZCBnbG9iYWwgdmFyaWFibGVzLgorVW5peCBDIGNvbXBpbGVycyBoYXZlIHRyYWRpdGlvbmFsbHkgcGVybWl0dGVkIG11bHRpcGxlIGRlZmluaXRpb25zIG9mCitzdWNoIHZhcmlhYmxlcyBpbiBkaWZmZXJlbnQgY29tcGlsYXRpb24gdW5pdHMgYnkgcGxhY2luZyB0aGUgdmFyaWFibGVzCitpbiBhIGNvbW1vbiBibG9jay4KK1RoaXMgaXMgdGhlIGJlaGF2aW9yIHNwZWNpZmllZCBieSBcZkJcLWZjb21tb25cZlIsIGFuZCBpcyB0aGUgZGVmYXVsdAorZm9yIFxzLTFHQ0NcczAgb24gbW9zdCB0YXJnZXRzLgorT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgYmVoYXZpb3IgaXMgbm90IHJlcXVpcmVkIGJ5IFxzLTFJU09cczAgQywgYW5kIG9uIHNvbWUKK3RhcmdldHMgbWF5IGNhcnJ5IGEgc3BlZWQgb3IgY29kZSBzaXplIHBlbmFsdHkgb24gdmFyaWFibGUgcmVmZXJlbmNlcy4KK1RoZSBcZkJcLWZub1wtY29tbW9uXGZSIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcGlsZXIgc2hvdWxkIHBsYWNlCit1bmluaXRpYWxpemVkIGdsb2JhbCB2YXJpYWJsZXMgaW4gdGhlIGRhdGEgc2VjdGlvbiBvZiB0aGUgb2JqZWN0IGZpbGUsCityYXRoZXIgdGhhbiBnZW5lcmF0aW5nIHRoZW0gYXMgY29tbW9uIGJsb2Nrcy4KK1RoaXMgaGFzIHRoZSBlZmZlY3QgdGhhdCBpZiB0aGUgc2FtZSB2YXJpYWJsZSBpcyBkZWNsYXJlZAorKHdpdGhvdXQgXGYoQ1dcKihDYGV4dGVyblwqKEMnXGZSKSBpbiB0d28gZGlmZmVyZW50IGNvbXBpbGF0aW9ucywKK3lvdSBnZXQgYSBtdWx0aXBsZS1kZWZpbml0aW9uIGVycm9yIHdoZW4geW91IGxpbmsgdGhlbS4KK0luIHRoaXMgY2FzZSwgeW91IG11c3QgY29tcGlsZSB3aXRoIFxmQlwtZmNvbW1vblxmUiBpbnN0ZWFkLgorQ29tcGlsaW5nIHdpdGggXGZCXC1mbm9cLWNvbW1vblxmUiBpcyB1c2VmdWwgb24gdGFyZ2V0cyBmb3Igd2hpY2gKK2l0IHByb3ZpZGVzIGJldHRlciBwZXJmb3JtYW5jZSwgb3IgaWYgeW91IHdpc2ggdG8gdmVyaWZ5IHRoYXQgdGhlCitwcm9ncmFtIHdpbGwgd29yayBvbiBvdGhlciBzeXN0ZW1zIHRoYXQgYWx3YXlzIHRyZWF0IHVuaW5pdGlhbGl6ZWQKK3ZhcmlhYmxlIGRlY2xhcmF0aW9ucyB0aGlzIHdheS4KKy5JUCAiXGZCXC1mbm9cLWlkZW50XGZSIiA0CisuSVggSXRlbSAiLWZuby1pZGVudCIKK0lnbm9yZSB0aGUgXGZCI2lkZW50XGZSIGRpcmVjdGl2ZS4KKy5JUCAiXGZCXC1maW5oaWJpdFwtc2l6ZVwtZGlyZWN0aXZlXGZSIiA0CisuSVggSXRlbSAiLWZpbmhpYml0LXNpemUtZGlyZWN0aXZlIgorRG9uJ3Qgb3V0cHV0IGEgXGYoQ1dcKihDYC5zaXplXCooQydcZlIgYXNzZW1ibGVyIGRpcmVjdGl2ZSwgb3IgYW55dGhpbmcgZWxzZSB0aGF0Cit3b3VsZCBjYXVzZSB0cm91YmxlIGlmIHRoZSBmdW5jdGlvbiBpcyBzcGxpdCBpbiB0aGUgbWlkZGxlLCBhbmQgdGhlCit0d28gaGFsdmVzIGFyZSBwbGFjZWQgYXQgbG9jYXRpb25zIGZhciBhcGFydCBpbiBtZW1vcnkuICBUaGlzIG9wdGlvbiBpcwordXNlZCB3aGVuIGNvbXBpbGluZyBcZkljcnRzdHVmZi5jXGZSOyB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIHVzZSBpdAorZm9yIGFueXRoaW5nIGVsc2UuCisuSVAgIlxmQlwtZnZlcmJvc2VcLWFzbVxmUiIgNAorLklYIEl0ZW0gIi1mdmVyYm9zZS1hc20iCitQdXQgZXh0cmEgY29tbWVudGFyeSBpbmZvcm1hdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgdG8KK21ha2UgaXQgbW9yZSByZWFkYWJsZS4gIFRoaXMgb3B0aW9uIGlzIGdlbmVyYWxseSBvbmx5IG9mIHVzZSB0byB0aG9zZQord2hvIGFjdHVhbGx5IG5lZWQgdG8gcmVhZCB0aGUgZ2VuZXJhdGVkIGFzc2VtYmx5IGNvZGUgKHBlcmhhcHMgd2hpbGUKK2RlYnVnZ2luZyB0aGUgY29tcGlsZXIgaXRzZWxmKS4KKy5TcAorXCZcZkJcLWZub1wtdmVyYm9zZVwtYXNtXGZSLCB0aGUgZGVmYXVsdCwgY2F1c2VzIHRoZQorZXh0cmEgaW5mb3JtYXRpb24gdG8gYmUgb21pdHRlZCBhbmQgaXMgdXNlZnVsIHdoZW4gY29tcGFyaW5nIHR3byBhc3NlbWJsZXIKK2ZpbGVzLgorLklQICJcZkJcLWZyZWNvcmRcLWdjY1wtc3dpdGNoZXNcZlIiIDQKKy5JWCBJdGVtICItZnJlY29yZC1nY2Mtc3dpdGNoZXMiCitUaGlzIHN3aXRjaCBjYXVzZXMgdGhlIGNvbW1hbmQgbGluZSB1c2VkIHRvIGludm9rZSB0aGUKK2NvbXBpbGVyIHRvIGJlIHJlY29yZGVkIGludG8gdGhlIG9iamVjdCBmaWxlIHRoYXQgaXMgYmVpbmcgY3JlYXRlZC4KK1RoaXMgc3dpdGNoIGlzIG9ubHkgaW1wbGVtZW50ZWQgb24gc29tZSB0YXJnZXRzIGFuZCB0aGUgZXhhY3QgZm9ybWF0CitvZiB0aGUgcmVjb3JkaW5nIGlzIHRhcmdldCBhbmQgYmluYXJ5IGZpbGUgZm9ybWF0IGRlcGVuZGVudCwgYnV0IGl0Cit1c3VhbGx5IHRha2VzIHRoZSBmb3JtIG9mIGEgc2VjdGlvbiBjb250YWluaW5nIFxzLTFBU0NJSVxzMCB0ZXh0LiAgVGhpcworc3dpdGNoIGlzIHJlbGF0ZWQgdG8gdGhlIFxmQlwtZnZlcmJvc2VcLWFzbVxmUiBzd2l0Y2gsIGJ1dCB0aGF0Citzd2l0Y2ggb25seSByZWNvcmRzIGluZm9ybWF0aW9uIGluIHRoZSBhc3NlbWJsZXIgb3V0cHV0IGZpbGUgYXMKK2NvbW1lbnRzLCBzbyBpdCBuZXZlciByZWFjaGVzIHRoZSBvYmplY3QgZmlsZS4KK1NlZSBhbHNvIFxmQlwtZ3JlY29yZFwtZ2NjXC1zd2l0Y2hlc1xmUiBmb3IgYW5vdGhlcgord2F5IG9mIHN0b3JpbmcgY29tcGlsZXIgb3B0aW9ucyBpbnRvIHRoZSBvYmplY3QgZmlsZS4KKy5JUCAiXGZCXC1mcGljXGZSIiA0CisuSVggSXRlbSAiLWZwaWMiCitHZW5lcmF0ZSBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIChccy0xUElDXHMwKSBzdWl0YWJsZSBmb3IgdXNlIGluIGEgc2hhcmVkCitsaWJyYXJ5LCBpZiBzdXBwb3J0ZWQgZm9yIHRoZSB0YXJnZXQgbWFjaGluZS4gIFN1Y2ggY29kZSBhY2Nlc3NlcyBhbGwKK2NvbnN0YW50IGFkZHJlc3NlcyB0aHJvdWdoIGEgZ2xvYmFsIG9mZnNldCB0YWJsZSAoXHMtMUdPVFxzMCkuICBUaGUgZHluYW1pYworbG9hZGVyIHJlc29sdmVzIHRoZSBccy0xR09UXHMwIGVudHJpZXMgd2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgKHRoZSBkeW5hbWljCitsb2FkZXIgaXMgbm90IHBhcnQgb2YgXHMtMUdDQ1xzMDsgaXQgaXMgcGFydCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSkuICBJZgordGhlIFxzLTFHT1RcczAgc2l6ZSBmb3IgdGhlIGxpbmtlZCBleGVjdXRhYmxlIGV4Y2VlZHMgYSBtYWNoaW5lLXNwZWNpZmljCittYXhpbXVtIHNpemUsIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBsaW5rZXIgaW5kaWNhdGluZyB0aGF0CitcJlxmQlwtZnBpY1xmUiBkb2VzIG5vdCB3b3JrOyBpbiB0aGF0IGNhc2UsIHJlY29tcGlsZSB3aXRoIFxmQlwtZlBJQ1xmUgoraW5zdGVhZC4gIChUaGVzZSBtYXhpbXVtcyBhcmUgOGsgb24gdGhlIFxzLTFTUEFSQ1xzMCBhbmQgMzJrCitvbiB0aGUgbTY4ayBhbmQgXHMtMVJTLzYwMDBcczAuICBUaGUgMzg2IGhhcyBubyBzdWNoIGxpbWl0LikKKy5TcAorUG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSByZXF1aXJlcyBzcGVjaWFsIHN1cHBvcnQsIGFuZCB0aGVyZWZvcmUgd29ya3MKK29ubHkgb24gY2VydGFpbiBtYWNoaW5lcy4gIEZvciB0aGUgMzg2LCBccy0xR0NDXHMwIHN1cHBvcnRzIFxzLTFQSUNcczAgZm9yIFN5c3RlbSBWCitidXQgbm90IGZvciB0aGUgU3VuIDM4NmkuICBDb2RlIGdlbmVyYXRlZCBmb3IgdGhlIFxzLTFJQk1cczAgXHMtMVJTLzYwMDBcczAgaXMgYWx3YXlzCitwb3NpdGlvbi1pbmRlcGVuZGVudC4KKy5TcAorV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgbWFjcm9zIFxmKENXXCooQ2BfXHxfcGljX1x8X1wqKEMnXGZSIGFuZCBcZihDV1wqKENgX1x8X1BJQ19cfF9cKihDJ1xmUgorYXJlIGRlZmluZWQgdG8gMS4KKy5JUCAiXGZCXC1mUElDXGZSIiA0CisuSVggSXRlbSAiLWZQSUMiCitJZiBzdXBwb3J0ZWQgZm9yIHRoZSB0YXJnZXQgbWFjaGluZSwgZW1pdCBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLAorc3VpdGFibGUgZm9yIGR5bmFtaWMgbGlua2luZyBhbmQgYXZvaWRpbmcgYW55IGxpbWl0IG9uIHRoZSBzaXplIG9mIHRoZQorZ2xvYmFsIG9mZnNldCB0YWJsZS4gIFRoaXMgb3B0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSBvbiB0aGUgbTY4aywKK1Bvd2VyUEMgYW5kIFxzLTFTUEFSQ1xzMC4KKy5TcAorUG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSByZXF1aXJlcyBzcGVjaWFsIHN1cHBvcnQsIGFuZCB0aGVyZWZvcmUgd29ya3MKK29ubHkgb24gY2VydGFpbiBtYWNoaW5lcy4KKy5TcAorV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCB0aGUgbWFjcm9zIFxmKENXXCooQ2BfXHxfcGljX1x8X1wqKEMnXGZSIGFuZCBcZihDV1wqKENgX1x8X1BJQ19cfF9cKihDJ1xmUgorYXJlIGRlZmluZWQgdG8gMi4KKy5JUCAiXGZCXC1mcGllXGZSIiA0CisuSVggSXRlbSAiLWZwaWUiCisuUEQgMAorLklQICJcZkJcLWZQSUVcZlIiIDQKKy5JWCBJdGVtICItZlBJRSIKKy5QRAorVGhlc2Ugb3B0aW9ucyBhcmUgc2ltaWxhciB0byBcZkJcLWZwaWNcZlIgYW5kIFxmQlwtZlBJQ1xmUiwgYnV0CitnZW5lcmF0ZWQgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBjYW4gYmUgb25seSBsaW5rZWQgaW50byBleGVjdXRhYmxlcy4KK1VzdWFsbHkgdGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCB3aGVuIFxmQlwtcGllXGZSIFxzLTFHQ0NcczAgb3B0aW9uIGlzCit1c2VkIGR1cmluZyBsaW5raW5nLgorLlNwCitcJlxmQlwtZnBpZVxmUiBhbmQgXGZCXC1mUElFXGZSIGJvdGggZGVmaW5lIHRoZSBtYWNyb3MKK1wmXGYoQ1dcKihDYF9cfF9waWVfXHxfXCooQydcZlIgYW5kIFxmKENXXCooQ2BfXHxfUElFX1x8X1wqKEMnXGZSLiAgVGhlIG1hY3JvcyBoYXZlIHRoZSB2YWx1ZSAxCitmb3IgXGZCXC1mcGllXGZSIGFuZCAyIGZvciBcZkJcLWZQSUVcZlIuCisuSVAgIlxmQlwtZm5vXC1qdW1wXC10YWJsZXNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWp1bXAtdGFibGVzIgorRG8gbm90IHVzZSBqdW1wIHRhYmxlcyBmb3Igc3dpdGNoIHN0YXRlbWVudHMgZXZlbiB3aGVyZSBpdCB3b3VsZCBiZQorbW9yZSBlZmZpY2llbnQgdGhhbiBvdGhlciBjb2RlIGdlbmVyYXRpb24gc3RyYXRlZ2llcy4gIFRoaXMgb3B0aW9uIGlzCitvZiB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBcZkJcLWZwaWNcZlIgb3IgXGZCXC1mUElDXGZSIGZvcgorYnVpbGRpbmcgY29kZSB0aGF0IGZvcm1zIHBhcnQgb2YgYSBkeW5hbWljIGxpbmtlciBhbmQgY2Fubm90CityZWZlcmVuY2UgdGhlIGFkZHJlc3Mgb2YgYSBqdW1wIHRhYmxlLiAgT24gc29tZSB0YXJnZXRzLCBqdW1wIHRhYmxlcworZG8gbm90IHJlcXVpcmUgYSBccy0xR09UXHMwIGFuZCB0aGlzIG9wdGlvbiBpcyBub3QgbmVlZGVkLgorLklQICJcZkJcLWZmaXhlZFwtXGZSXGZJcmVnXGZSIiA0CisuSVggSXRlbSAiLWZmaXhlZC1yZWciCitUcmVhdCB0aGUgcmVnaXN0ZXIgbmFtZWQgXGZJcmVnXGZSIGFzIGEgZml4ZWQgcmVnaXN0ZXI7IGdlbmVyYXRlZCBjb2RlCitzaG91bGQgbmV2ZXIgcmVmZXIgdG8gaXQgKGV4Y2VwdCBwZXJoYXBzIGFzIGEgc3RhY2sgcG9pbnRlciwgZnJhbWUKK3BvaW50ZXIgb3IgaW4gc29tZSBvdGhlciBmaXhlZCByb2xlKS4KKy5TcAorXCZcZklyZWdcZlIgbXVzdCBiZSB0aGUgbmFtZSBvZiBhIHJlZ2lzdGVyLiAgVGhlIHJlZ2lzdGVyIG5hbWVzIGFjY2VwdGVkCithcmUgbWFjaGluZS1zcGVjaWZpYyBhbmQgYXJlIGRlZmluZWQgaW4gdGhlIFxmKENXXCooQ2BSRUdJU1RFUl9OQU1FU1wqKEMnXGZSCittYWNybyBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBtYWNybyBmaWxlLgorLlNwCitUaGlzIGZsYWcgZG9lcyBub3QgaGF2ZSBhIG5lZ2F0aXZlIGZvcm0sIGJlY2F1c2UgaXQgc3BlY2lmaWVzIGEKK3RocmVlLXdheSBjaG9pY2UuCisuSVAgIlxmQlwtZmNhbGxcLXVzZWRcLVxmUlxmSXJlZ1xmUiIgNAorLklYIEl0ZW0gIi1mY2FsbC11c2VkLXJlZyIKK1RyZWF0IHRoZSByZWdpc3RlciBuYW1lZCBcZklyZWdcZlIgYXMgYW4gYWxsb2NhYmxlIHJlZ2lzdGVyIHRoYXQgaXMKK2Nsb2JiZXJlZCBieSBmdW5jdGlvbiBjYWxscy4gIEl0IG1heSBiZSBhbGxvY2F0ZWQgZm9yIHRlbXBvcmFyaWVzIG9yCit2YXJpYWJsZXMgdGhhdCBkbyBub3QgbGl2ZSBhY3Jvc3MgYSBjYWxsLiAgRnVuY3Rpb25zIGNvbXBpbGVkIHRoaXMgd2F5CitkbyBub3Qgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgcmVnaXN0ZXIgXGZJcmVnXGZSLgorLlNwCitJdCBpcyBhbiBlcnJvciB0byB1c2UgdGhpcyBmbGFnIHdpdGggdGhlIGZyYW1lIHBvaW50ZXIgb3Igc3RhY2sgcG9pbnRlci4KK1VzZSBvZiB0aGlzIGZsYWcgZm9yIG90aGVyIHJlZ2lzdGVycyB0aGF0IGhhdmUgZml4ZWQgcGVydmFzaXZlIHJvbGVzIGluCit0aGUgbWFjaGluZSdzIGV4ZWN1dGlvbiBtb2RlbCBwcm9kdWNlcyBkaXNhc3Ryb3VzIHJlc3VsdHMuCisuU3AKK1RoaXMgZmxhZyBkb2VzIG5vdCBoYXZlIGEgbmVnYXRpdmUgZm9ybSwgYmVjYXVzZSBpdCBzcGVjaWZpZXMgYQordGhyZWUtd2F5IGNob2ljZS4KKy5JUCAiXGZCXC1mY2FsbFwtc2F2ZWRcLVxmUlxmSXJlZ1xmUiIgNAorLklYIEl0ZW0gIi1mY2FsbC1zYXZlZC1yZWciCitUcmVhdCB0aGUgcmVnaXN0ZXIgbmFtZWQgXGZJcmVnXGZSIGFzIGFuIGFsbG9jYWJsZSByZWdpc3RlciBzYXZlZCBieQorZnVuY3Rpb25zLiAgSXQgbWF5IGJlIGFsbG9jYXRlZCBldmVuIGZvciB0ZW1wb3JhcmllcyBvciB2YXJpYWJsZXMgdGhhdAorbGl2ZSBhY3Jvc3MgYSBjYWxsLiAgRnVuY3Rpb25zIGNvbXBpbGVkIHRoaXMgd2F5IHNhdmUgYW5kIHJlc3RvcmUKK3RoZSByZWdpc3RlciBcZklyZWdcZlIgaWYgdGhleSB1c2UgaXQuCisuU3AKK0l0IGlzIGFuIGVycm9yIHRvIHVzZSB0aGlzIGZsYWcgd2l0aCB0aGUgZnJhbWUgcG9pbnRlciBvciBzdGFjayBwb2ludGVyLgorVXNlIG9mIHRoaXMgZmxhZyBmb3Igb3RoZXIgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBmaXhlZCBwZXJ2YXNpdmUgcm9sZXMgaW4KK3RoZSBtYWNoaW5lJ3MgZXhlY3V0aW9uIG1vZGVsIHByb2R1Y2VzIGRpc2FzdHJvdXMgcmVzdWx0cy4KKy5TcAorQSBkaWZmZXJlbnQgc29ydCBvZiBkaXNhc3RlciByZXN1bHRzIGZyb20gdGhlIHVzZSBvZiB0aGlzIGZsYWcgZm9yCithIHJlZ2lzdGVyIGluIHdoaWNoIGZ1bmN0aW9uIHZhbHVlcyBtYXkgYmUgcmV0dXJuZWQuCisuU3AKK1RoaXMgZmxhZyBkb2VzIG5vdCBoYXZlIGEgbmVnYXRpdmUgZm9ybSwgYmVjYXVzZSBpdCBzcGVjaWZpZXMgYQordGhyZWUtd2F5IGNob2ljZS4KKy5JUCAiXGZCXC1mcGFja1wtc3RydWN0Wz1cZlJcZkluXGZSXGZCXVxmUiIgNAorLklYIEl0ZW0gIi1mcGFjay1zdHJ1Y3RbPW5dIgorV2l0aG91dCBhIHZhbHVlIHNwZWNpZmllZCwgcGFjayBhbGwgc3RydWN0dXJlIG1lbWJlcnMgdG9nZXRoZXIgd2l0aG91dAoraG9sZXMuICBXaGVuIGEgdmFsdWUgaXMgc3BlY2lmaWVkICh3aGljaCBtdXN0IGJlIGEgc21hbGwgcG93ZXIgb2YgdHdvKSwgcGFjaworc3RydWN0dXJlIG1lbWJlcnMgYWNjb3JkaW5nIHRvIHRoaXMgdmFsdWUsIHJlcHJlc2VudGluZyB0aGUgbWF4aW11bQorYWxpZ25tZW50ICh0aGF0IGlzLCBvYmplY3RzIHdpdGggZGVmYXVsdCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGxhcmdlciB0aGFuCit0aGlzIGFyZSBvdXRwdXQgcG90ZW50aWFsbHkgdW5hbGlnbmVkIGF0IHRoZSBuZXh0IGZpdHRpbmcgbG9jYXRpb24uCisuU3AKK1wmXGZCV2FybmluZzpcZlIgdGhlIFxmQlwtZnBhY2tcLXN0cnVjdFxmUiBzd2l0Y2ggY2F1c2VzIFxzLTFHQ0NcczAgdG8gZ2VuZXJhdGUKK2NvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQgc3dpdGNoLgorQWRkaXRpb25hbGx5LCBpdCBtYWtlcyB0aGUgY29kZSBzdWJvcHRpbWFsLgorVXNlIGl0IHRvIGNvbmZvcm0gdG8gYSBub24tZGVmYXVsdCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlLgorLklQICJcZkJcLWZpbnN0cnVtZW50XC1mdW5jdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZmluc3RydW1lbnQtZnVuY3Rpb25zIgorR2VuZXJhdGUgaW5zdHJ1bWVudGF0aW9uIGNhbGxzIGZvciBlbnRyeSBhbmQgZXhpdCB0byBmdW5jdGlvbnMuICBKdXN0CithZnRlciBmdW5jdGlvbiBlbnRyeSBhbmQganVzdCBiZWZvcmUgZnVuY3Rpb24gZXhpdCwgdGhlIGZvbGxvd2luZworcHJvZmlsaW5nIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHdpdGggdGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQKK2Z1bmN0aW9uIGFuZCBpdHMgY2FsbCBzaXRlLiAgKE9uIHNvbWUgcGxhdGZvcm1zLAorXCZcZihDV1wqKENgX1x8X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3NcKihDJ1xmUiBkb2VzIG5vdCB3b3JrIGJleW9uZCB0aGUgY3VycmVudAorZnVuY3Rpb24sIHNvIHRoZSBjYWxsIHNpdGUgaW5mb3JtYXRpb24gbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8gdGhlCitwcm9maWxpbmcgZnVuY3Rpb25zIG90aGVyd2lzZS4pCisuU3AKKy5WYiA0CitcJiAgICAgICAgdm9pZCBfXHxfY3lnX3Byb2ZpbGVfZnVuY19lbnRlciAodm9pZCAqdGhpc19mbiwKK1wmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbF9zaXRlKTsKK1wmICAgICAgICB2b2lkIF9cfF9jeWdfcHJvZmlsZV9mdW5jX2V4aXQgICh2b2lkICp0aGlzX2ZuLAorXCYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsX3NpdGUpOworLlZlCisuU3AKK1RoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24sCit3aGljaCBtYXkgYmUgbG9va2VkIHVwIGV4YWN0bHkgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKy5TcAorVGhpcyBpbnN0cnVtZW50YXRpb24gaXMgYWxzbyBkb25lIGZvciBmdW5jdGlvbnMgZXhwYW5kZWQgaW5saW5lIGluIG90aGVyCitmdW5jdGlvbnMuICBUaGUgcHJvZmlsaW5nIGNhbGxzIGluZGljYXRlIHdoZXJlLCBjb25jZXB0dWFsbHksIHRoZQoraW5saW5lIGZ1bmN0aW9uIGlzIGVudGVyZWQgYW5kIGV4aXRlZC4gIFRoaXMgbWVhbnMgdGhhdCBhZGRyZXNzYWJsZQordmVyc2lvbnMgb2Ygc3VjaCBmdW5jdGlvbnMgbXVzdCBiZSBhdmFpbGFibGUuICBJZiBhbGwgeW91ciB1c2VzIG9mIGEKK2Z1bmN0aW9uIGFyZSBleHBhbmRlZCBpbmxpbmUsIHRoaXMgbWF5IG1lYW4gYW4gYWRkaXRpb25hbCBleHBhbnNpb24gb2YKK2NvZGUgc2l6ZS4gIElmIHlvdSB1c2UgXGZCZXh0ZXJuIGlubGluZVxmUiBpbiB5b3VyIEMgY29kZSwgYW4KK2FkZHJlc3NhYmxlIHZlcnNpb24gb2Ygc3VjaCBmdW5jdGlvbnMgbXVzdCBiZSBwcm92aWRlZC4gIChUaGlzIGlzCitub3JtYWxseSB0aGUgY2FzZSBhbnl3YXksIGJ1dCBpZiB5b3UgZ2V0IGx1Y2t5IGFuZCB0aGUgb3B0aW1pemVyIGFsd2F5cworZXhwYW5kcyB0aGUgZnVuY3Rpb25zIGlubGluZSwgeW91IG1pZ2h0IGhhdmUgZ290dGVuIGF3YXkgd2l0aG91dAorcHJvdmlkaW5nIHN0YXRpYyBjb3BpZXMuKQorLlNwCitBIGZ1bmN0aW9uIG1heSBiZSBnaXZlbiB0aGUgYXR0cmlidXRlIFxmKENXXCooQ2Bub19pbnN0cnVtZW50X2Z1bmN0aW9uXCooQydcZlIsIGluCit3aGljaCBjYXNlIHRoaXMgaW5zdHJ1bWVudGF0aW9uIGlzIG5vdCBkb25lLiAgVGhpcyBjYW4gYmUgdXNlZCwgZm9yCitleGFtcGxlLCBmb3IgdGhlIHByb2ZpbGluZyBmdW5jdGlvbnMgbGlzdGVkIGFib3ZlLCBoaWdoLXByaW9yaXR5CitpbnRlcnJ1cHQgcm91dGluZXMsIGFuZCBhbnkgZnVuY3Rpb25zIGZyb20gd2hpY2ggdGhlIHByb2ZpbGluZyBmdW5jdGlvbnMKK2Nhbm5vdCBzYWZlbHkgYmUgY2FsbGVkIChwZXJoYXBzIHNpZ25hbCBoYW5kbGVycywgaWYgdGhlIHByb2ZpbGluZworcm91dGluZXMgZ2VuZXJhdGUgb3V0cHV0IG9yIGFsbG9jYXRlIG1lbW9yeSkuCisuSVAgIlxmQlwtZmluc3RydW1lbnRcLWZ1bmN0aW9uc1wtZXhjbHVkZVwtZmlsZVwtbGlzdD1cZlJcZklmaWxlXGZSXGZCLFxmUlxmSWZpbGVcZlJcZkIsLi4uXGZSIiA0CisuSVggSXRlbSAiLWZpbnN0cnVtZW50LWZ1bmN0aW9ucy1leGNsdWRlLWZpbGUtbGlzdD1maWxlLGZpbGUsLi4uIgorU2V0IHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIGluc3RydW1lbnRhdGlvbiAoc2VlCit0aGUgZGVzY3JpcHRpb24gb2YgXGYoQ1dcKihDYFwtZmluc3RydW1lbnRcLWZ1bmN0aW9uc1wqKEMnXGZSKS4gIElmIHRoZSBmaWxlIHRoYXQKK2NvbnRhaW5zIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXRjaGVzIHdpdGggb25lIG9mIFxmSWZpbGVcZlIsIHRoZW4KK3RoYXQgZnVuY3Rpb24gaXMgbm90IGluc3RydW1lbnRlZC4gIFRoZSBtYXRjaCBpcyBkb25lIG9uIHN1YnN0cmluZ3M6CitpZiB0aGUgXGZJZmlsZVxmUiBwYXJhbWV0ZXIgaXMgYSBzdWJzdHJpbmcgb2YgdGhlIGZpbGUgbmFtZSwgaXQgaXMKK2NvbnNpZGVyZWQgdG8gYmUgYSBtYXRjaC4KKy5TcAorRm9yIGV4YW1wbGU6CisuU3AKKy5WYiAxCitcJiAgICAgICAgXC1maW5zdHJ1bWVudFwtZnVuY3Rpb25zXC1leGNsdWRlXC1maWxlXC1saXN0PS9iaXRzL3N0bCxpbmNsdWRlL3N5cworLlZlCisuU3AKK2V4Y2x1ZGVzIGFueSBpbmxpbmUgZnVuY3Rpb24gZGVmaW5lZCBpbiBmaWxlcyB3aG9zZSBwYXRobmFtZXMKK2NvbnRhaW4gXGYoQ1dcKihDYC9iaXRzL3N0bFwqKEMnXGZSIG9yIFxmKENXXCooQ2BpbmNsdWRlL3N5c1wqKEMnXGZSLgorLlNwCitJZiwgZm9yIHNvbWUgcmVhc29uLCB5b3Ugd2FudCB0byBpbmNsdWRlIGxldHRlciBcZihDV1wqKEFxLFwqKEFxXGZSIGluIG9uZSBvZgorXCZcZklzeW1cZlIsIHdyaXRlIFxmKENXXCooQXEsXCooQXFcZlIuIEZvciBleGFtcGxlLAorXCZcZihDV1wqKENgXC1maW5zdHJ1bWVudFwtZnVuY3Rpb25zXC1leGNsdWRlXC1maWxlXC1saXN0PVwqKEFxLCx0bXBcKihBcVwqKEMnXGZSCisobm90ZSB0aGUgc2luZ2xlIHF1b3RlIHN1cnJvdW5kaW5nIHRoZSBvcHRpb24pLgorLklQICJcZkJcLWZpbnN0cnVtZW50XC1mdW5jdGlvbnNcLWV4Y2x1ZGVcLWZ1bmN0aW9uXC1saXN0PVxmUlxmSXN5bVxmUlxmQixcZlJcZklzeW1cZlJcZkIsLi4uXGZSIiA0CisuSVggSXRlbSAiLWZpbnN0cnVtZW50LWZ1bmN0aW9ucy1leGNsdWRlLWZ1bmN0aW9uLWxpc3Q9c3ltLHN5bSwuLi4iCitUaGlzIGlzIHNpbWlsYXIgdG8gXGYoQ1dcKihDYFwtZmluc3RydW1lbnRcLWZ1bmN0aW9uc1wtZXhjbHVkZVwtZmlsZVwtbGlzdFwqKEMnXGZSLAorYnV0IHRoaXMgb3B0aW9uIHNldHMgdGhlIGxpc3Qgb2YgZnVuY3Rpb24gbmFtZXMgdG8gYmUgZXhjbHVkZWQgZnJvbQoraW5zdHJ1bWVudGF0aW9uLiAgVGhlIGZ1bmN0aW9uIG5hbWUgdG8gYmUgbWF0Y2hlZCBpcyBpdHMgdXNlci12aXNpYmxlCituYW1lLCBzdWNoIGFzIFxmKENXXCooQ2B2ZWN0b3I8aW50PiBibGFoKGNvbnN0IHZlY3RvcjxpbnQ+ICYpXCooQydcZlIsIG5vdCB0aGUKK2ludGVybmFsIG1hbmdsZWQgbmFtZSAoZS5nLiwgXGYoQ1dcKihDYF9aNGJsYWhSU3Q2dmVjdG9ySWlTYUlpRUVcKihDJ1xmUikuICBUaGUKK21hdGNoIGlzIGRvbmUgb24gc3Vic3RyaW5nczogaWYgdGhlIFxmSXN5bVxmUiBwYXJhbWV0ZXIgaXMgYSBzdWJzdHJpbmcKK29mIHRoZSBmdW5jdGlvbiBuYW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGJlIGEgbWF0Y2guICBGb3IgQzk5IGFuZCBcKihDKworZXh0ZW5kZWQgaWRlbnRpZmllcnMsIHRoZSBmdW5jdGlvbiBuYW1lIG11c3QgYmUgZ2l2ZW4gaW4gXHMtMVVURlwtOFxzMCwgbm90Cit1c2luZyB1bml2ZXJzYWwgY2hhcmFjdGVyIG5hbWVzLgorLklQICJcZkJcLWZzdGFja1wtY2hlY2tcZlIiIDQKKy5JWCBJdGVtICItZnN0YWNrLWNoZWNrIgorR2VuZXJhdGUgY29kZSB0byB2ZXJpZnkgdGhhdCB5b3UgZG8gbm90IGdvIGJleW9uZCB0aGUgYm91bmRhcnkgb2YgdGhlCitzdGFjay4gIFlvdSBzaG91bGQgc3BlY2lmeSB0aGlzIGZsYWcgaWYgeW91IGFyZSBydW5uaW5nIGluIGFuCitlbnZpcm9ubWVudCB3aXRoIG11bHRpcGxlIHRocmVhZHMsIGJ1dCB5b3Ugb25seSByYXJlbHkgbmVlZCB0byBzcGVjaWZ5IGl0IGluCithIHNpbmdsZS10aHJlYWRlZCBlbnZpcm9ubWVudCBzaW5jZSBzdGFjayBvdmVyZmxvdyBpcyBhdXRvbWF0aWNhbGx5CitkZXRlY3RlZCBvbiBuZWFybHkgYWxsIHN5c3RlbXMgaWYgdGhlcmUgaXMgb25seSBvbmUgc3RhY2suCisuU3AKK05vdGUgdGhhdCB0aGlzIHN3aXRjaCBkb2VzIG5vdCBhY3R1YWxseSBjYXVzZSBjaGVja2luZyB0byBiZSBkb25lOyB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb3IgdGhlIGxhbmd1YWdlIHJ1bnRpbWUgbXVzdCBkbyB0aGF0LiAgVGhlIHN3aXRjaCBjYXVzZXMKK2dlbmVyYXRpb24gb2YgY29kZSB0byBlbnN1cmUgdGhhdCB0aGV5IHNlZSB0aGUgc3RhY2sgYmVpbmcgZXh0ZW5kZWQuCisuU3AKK1lvdSBjYW4gYWRkaXRpb25hbGx5IHNwZWNpZnkgYSBzdHJpbmcgcGFyYW1ldGVyOiBcZihDV1wqKENgbm9cKihDJ1xmUiBtZWFucyBubworY2hlY2tpbmcsIFxmKENXXCooQ2BnZW5lcmljXCooQydcZlIgbWVhbnMgZm9yY2UgdGhlIHVzZSBvZiBvbGQtc3R5bGUgY2hlY2tpbmcsCitcJlxmKENXXCooQ2BzcGVjaWZpY1wqKEMnXGZSIG1lYW5zIHVzZSB0aGUgYmVzdCBjaGVja2luZyBtZXRob2QgYW5kIGlzIGVxdWl2YWxlbnQKK3RvIGJhcmUgXGZCXC1mc3RhY2tcLWNoZWNrXGZSLgorLlNwCitPbGQtc3R5bGUgY2hlY2tpbmcgaXMgYSBnZW5lcmljIG1lY2hhbmlzbSB0aGF0IHJlcXVpcmVzIG5vIHNwZWNpZmljCit0YXJnZXQgc3VwcG9ydCBpbiB0aGUgY29tcGlsZXIgYnV0IGNvbWVzIHdpdGggdGhlIGZvbGxvd2luZyBkcmF3YmFja3M6CisuUlMgNAorLklQICIxLiIgNAorTW9kaWZpZWQgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgbGFyZ2Ugb2JqZWN0czogdGhleSBhcmUgYWx3YXlzCithbGxvY2F0ZWQgZHluYW1pY2FsbHkgaWYgdGhlaXIgc2l6ZSBleGNlZWRzIGEgZml4ZWQgdGhyZXNob2xkLgorLklQICIyLiIgNAorRml4ZWQgbGltaXQgb24gdGhlIHNpemUgb2YgdGhlIHN0YXRpYyBmcmFtZSBvZiBmdW5jdGlvbnM6IHdoZW4gaXQgaXMKK3RvcHBlZCBieSBhIHBhcnRpY3VsYXIgZnVuY3Rpb24sIHN0YWNrIGNoZWNraW5nIGlzIG5vdCByZWxpYWJsZSBhbmQKK2Egd2FybmluZyBpcyBpc3N1ZWQgYnkgdGhlIGNvbXBpbGVyLgorLklQICIzLiIgNAorSW5lZmZpY2llbmN5OiBiZWNhdXNlIG9mIGJvdGggdGhlIG1vZGlmaWVkIGFsbG9jYXRpb24gc3RyYXRlZ3kgYW5kIHRoZQorZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiwgY29kZSBwZXJmb3JtYW5jZSBpcyBoYW1wZXJlZC4KKy5SRQorLlJTIDQKKy5TcAorTm90ZSB0aGF0IG9sZC1zdHlsZSBzdGFjayBjaGVja2luZyBpcyBhbHNvIHRoZSBmYWxsYmFjayBtZXRob2QgZm9yCitcJlxmKENXXCooQ2BzcGVjaWZpY1wqKEMnXGZSIGlmIG5vIHRhcmdldCBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkIGluIHRoZSBjb21waWxlci4KKy5SRQorLklQICJcZkJcLWZzdGFja1wtbGltaXRcLXJlZ2lzdGVyPVxmUlxmSXJlZ1xmUiIgNAorLklYIEl0ZW0gIi1mc3RhY2stbGltaXQtcmVnaXN0ZXI9cmVnIgorLlBEIDAKKy5JUCAiXGZCXC1mc3RhY2tcLWxpbWl0XC1zeW1ib2w9XGZSXGZJc3ltXGZSIiA0CisuSVggSXRlbSAiLWZzdGFjay1saW1pdC1zeW1ib2w9c3ltIgorLklQICJcZkJcLWZub1wtc3RhY2tcLWxpbWl0XGZSIiA0CisuSVggSXRlbSAiLWZuby1zdGFjay1saW1pdCIKKy5QRAorR2VuZXJhdGUgY29kZSB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2sgZG9lcyBub3QgZ3JvdyBiZXlvbmQgYSBjZXJ0YWluIHZhbHVlLAorZWl0aGVyIHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyIG9yIHRoZSBhZGRyZXNzIG9mIGEgc3ltYm9sLiAgSWYgYSBsYXJnZXIKK3N0YWNrIGlzIHJlcXVpcmVkLCBhIHNpZ25hbCBpcyByYWlzZWQgYXQgcnVuIHRpbWUuICBGb3IgbW9zdCB0YXJnZXRzLAordGhlIHNpZ25hbCBpcyByYWlzZWQgYmVmb3JlIHRoZSBzdGFjayBvdmVycnVucyB0aGUgYm91bmRhcnksIHNvCitpdCBpcyBwb3NzaWJsZSB0byBjYXRjaCB0aGUgc2lnbmFsIHdpdGhvdXQgdGFraW5nIHNwZWNpYWwgcHJlY2F1dGlvbnMuCisuU3AKK0ZvciBpbnN0YW5jZSwgaWYgdGhlIHN0YWNrIHN0YXJ0cyBhdCBhYnNvbHV0ZSBhZGRyZXNzIFxmQjB4ODAwMDAwMDBcZlIKK2FuZCBncm93cyBkb3dud2FyZHMsIHlvdSBjYW4gdXNlIHRoZSBmbGFncworXCZcZkJcLWZzdGFja1wtbGltaXRcLXN5bWJvbD1fXHxfc3RhY2tfbGltaXRcZlIgYW5kCitcJlxmQlwtV2wsXC1cLWRlZnN5bSxfXHxfc3RhY2tfbGltaXQ9MHg3ZmZlMDAwMFxmUiB0byBlbmZvcmNlIGEgc3RhY2sgbGltaXQKK29mIDEyOEtCLiAgTm90ZSB0aGF0IHRoaXMgbWF5IG9ubHkgd29yayB3aXRoIHRoZSBccy0xR05VXHMwIGxpbmtlci4KKy5JUCAiXGZCXC1mc3BsaXRcLXN0YWNrXGZSIiA0CisuSVggSXRlbSAiLWZzcGxpdC1zdGFjayIKK0dlbmVyYXRlIGNvZGUgdG8gYXV0b21hdGljYWxseSBzcGxpdCB0aGUgc3RhY2sgYmVmb3JlIGl0IG92ZXJmbG93cy4KK1RoZSByZXN1bHRpbmcgcHJvZ3JhbSBoYXMgYSBkaXNjb250aWd1b3VzIHN0YWNrIHdoaWNoIGNhbiBvbmx5CitvdmVyZmxvdyBpZiB0aGUgcHJvZ3JhbSBpcyB1bmFibGUgdG8gYWxsb2NhdGUgYW55IG1vcmUgbWVtb3J5LiAgVGhpcworaXMgbW9zdCB1c2VmdWwgd2hlbiBydW5uaW5nIHRocmVhZGVkIHByb2dyYW1zLCBhcyBpdCBpcyBubyBsb25nZXIKK25lY2Vzc2FyeSB0byBjYWxjdWxhdGUgYSBnb29kIHN0YWNrIHNpemUgdG8gdXNlIGZvciBlYWNoIHRocmVhZC4gIFRoaXMKK2lzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgaTM4NiBhbmQgeDg2XzY0IGJhY2sgZW5kcyBydW5uaW5nCitHTlUvTGludXguCisuU3AKK1doZW4gY29kZSBjb21waWxlZCB3aXRoIFxmQlwtZnNwbGl0XC1zdGFja1xmUiBjYWxscyBjb2RlIGNvbXBpbGVkCit3aXRob3V0IFxmQlwtZnNwbGl0XC1zdGFja1xmUiwgdGhlcmUgbWF5IG5vdCBiZSBtdWNoIHN0YWNrIHNwYWNlCithdmFpbGFibGUgZm9yIHRoZSBsYXR0ZXIgY29kZSB0byBydW4uICBJZiBjb21waWxpbmcgYWxsIGNvZGUsCitpbmNsdWRpbmcgbGlicmFyeSBjb2RlLCB3aXRoIFxmQlwtZnNwbGl0XC1zdGFja1xmUiBpcyBub3QgYW4gb3B0aW9uLAordGhlbiB0aGUgbGlua2VyIGNhbiBmaXggdXAgdGhlc2UgY2FsbHMgc28gdGhhdCB0aGUgY29kZSBjb21waWxlZAord2l0aG91dCBcZkJcLWZzcGxpdFwtc3RhY2tcZlIgYWx3YXlzIGhhcyBhIGxhcmdlIHN0YWNrLiAgU3VwcG9ydCBmb3IKK3RoaXMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGdvbGQgbGlua2VyIGluIFxzLTFHTlVcczAgYmludXRpbHMgcmVsZWFzZSAyLjIxCithbmQgbGF0ZXIuCisuSVAgIlxmQlwtZmxlYWRpbmdcLXVuZGVyc2NvcmVcZlIiIDQKKy5JWCBJdGVtICItZmxlYWRpbmctdW5kZXJzY29yZSIKK1RoaXMgb3B0aW9uIGFuZCBpdHMgY291bnRlcnBhcnQsIFxmQlwtZm5vXC1sZWFkaW5nXC11bmRlcnNjb3JlXGZSLCBmb3JjaWJseQorY2hhbmdlIHRoZSB3YXkgQyBzeW1ib2xzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgb2JqZWN0IGZpbGUuICBPbmUgdXNlCitpcyB0byBoZWxwIGxpbmsgd2l0aCBsZWdhY3kgYXNzZW1ibHkgY29kZS4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiB0aGUgXGZCXC1mbGVhZGluZ1wtdW5kZXJzY29yZVxmUiBzd2l0Y2ggY2F1c2VzIFxzLTFHQ0NcczAgdG8KK2dlbmVyYXRlIGNvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRob3V0IHRoYXQKK3N3aXRjaC4gIFVzZSBpdCB0byBjb25mb3JtIHRvIGEgbm9uLWRlZmF1bHQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4KK05vdCBhbGwgdGFyZ2V0cyBwcm92aWRlIGNvbXBsZXRlIHN1cHBvcnQgZm9yIHRoaXMgc3dpdGNoLgorLklQICJcZkJcLWZ0bHNcLW1vZGVsPVxmUlxmSW1vZGVsXGZSIiA0CisuSVggSXRlbSAiLWZ0bHMtbW9kZWw9bW9kZWwiCitBbHRlciB0aGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgbW9kZWwgdG8gYmUgdXNlZC4KK1RoZSBcZkltb2RlbFxmUiBhcmd1bWVudCBzaG91bGQgYmUgb25lIG9mIFxmKENXXCooQ2BnbG9iYWxcLWR5bmFtaWNcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGxvY2FsXC1keW5hbWljXCooQydcZlIsIFxmKENXXCooQ2Bpbml0aWFsXC1leGVjXCooQydcZlIgb3IgXGYoQ1dcKihDYGxvY2FsXC1leGVjXCooQydcZlIuCisuU3AKK1RoZSBkZWZhdWx0IHdpdGhvdXQgXGZCXC1mcGljXGZSIGlzIFxmKENXXCooQ2Bpbml0aWFsXC1leGVjXCooQydcZlI7IHdpdGgKK1wmXGZCXC1mcGljXGZSIHRoZSBkZWZhdWx0IGlzIFxmKENXXCooQ2BnbG9iYWxcLWR5bmFtaWNcKihDJ1xmUi4KKy5JUCAiXGZCXC1mdmlzaWJpbGl0eT1cZlJcZklkZWZhdWx0fGludGVybmFsfGhpZGRlbnxwcm90ZWN0ZWRcZlIiIDQKKy5JWCBJdGVtICItZnZpc2liaWxpdHk9ZGVmYXVsdHxpbnRlcm5hbHxoaWRkZW58cHJvdGVjdGVkIgorU2V0IHRoZSBkZWZhdWx0IFxzLTFFTEZcczAgaW1hZ2Ugc3ltYm9sIHZpc2liaWxpdHkgdG8gdGhlIHNwZWNpZmllZCBvcHRpb25cLVwtXC1hbGwKK3N5bWJvbHMgYXJlIG1hcmtlZCB3aXRoIHRoaXMgdW5sZXNzIG92ZXJyaWRkZW4gd2l0aGluIHRoZSBjb2RlLgorVXNpbmcgdGhpcyBmZWF0dXJlIGNhbiB2ZXJ5IHN1YnN0YW50aWFsbHkgaW1wcm92ZSBsaW5raW5nIGFuZAorbG9hZCB0aW1lcyBvZiBzaGFyZWQgb2JqZWN0IGxpYnJhcmllcywgcHJvZHVjZSBtb3JlIG9wdGltaXplZAorY29kZSwgcHJvdmlkZSBuZWFyLXBlcmZlY3QgXHMtMUFQSVxzMCBleHBvcnQgYW5kIHByZXZlbnQgc3ltYm9sIGNsYXNoZXMuCitJdCBpcyBcZkJzdHJvbmdseVxmUiByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGhpcyBpbiBhbnkgc2hhcmVkIG9iamVjdHMKK3lvdSBkaXN0cmlidXRlLgorLlNwCitEZXNwaXRlIHRoZSBub21lbmNsYXR1cmUsIFxmKENXXCooQ2BkZWZhdWx0XCooQydcZlIgYWx3YXlzIG1lYW5zIHB1YmxpYzsgaS5lLiwKK2F2YWlsYWJsZSB0byBiZSBsaW5rZWQgYWdhaW5zdCBmcm9tIG91dHNpZGUgdGhlIHNoYXJlZCBvYmplY3QuCitcJlxmKENXXCooQ2Bwcm90ZWN0ZWRcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGludGVybmFsXCooQydcZlIgYXJlIHByZXR0eSB1c2VsZXNzIGluIHJlYWwtd29ybGQKK3VzYWdlIHNvIHRoZSBvbmx5IG90aGVyIGNvbW1vbmx5IHVzZWQgb3B0aW9uIGlzIFxmKENXXCooQ2BoaWRkZW5cKihDJ1xmUi4KK1RoZSBkZWZhdWx0IGlmIFxmQlwtZnZpc2liaWxpdHlcZlIgaXNuJ3Qgc3BlY2lmaWVkIGlzCitcJlxmKENXXCooQ2BkZWZhdWx0XCooQydcZlIsIGkuZS4sIG1ha2UgZXZlcnkKK3N5bWJvbCBwdWJsaWNcLVwtXC10aGlzIGNhdXNlcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBwcmV2aW91cyB2ZXJzaW9ucyBvZgorXCZccy0xR0NDXHMwLgorLlNwCitBIGdvb2QgZXhwbGFuYXRpb24gb2YgdGhlIGJlbmVmaXRzIG9mZmVyZWQgYnkgZW5zdXJpbmcgXHMtMUVMRlxzMAorc3ltYm9scyBoYXZlIHRoZSBjb3JyZWN0IHZpc2liaWxpdHkgaXMgZ2l2ZW4gYnkgXCooTCJIb3cgVG8gV3JpdGUKK1NoYXJlZCBMaWJyYXJpZXNcKihSIiBieSBVbHJpY2ggRHJlcHBlciAod2hpY2ggY2FuIGJlIGZvdW5kIGF0Cis8XGZCaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL35kcmVwcGVyL1xmUj4pXC1cLVwtaG93ZXZlciBhIHN1cGVyaW9yCitzb2x1dGlvbiBtYWRlIHBvc3NpYmxlIGJ5IHRoaXMgb3B0aW9uIHRvIG1hcmtpbmcgdGhpbmdzIGhpZGRlbiB3aGVuCit0aGUgZGVmYXVsdCBpcyBwdWJsaWMgaXMgdG8gbWFrZSB0aGUgZGVmYXVsdCBoaWRkZW4gYW5kIG1hcmsgdGhpbmdzCitwdWJsaWMuICBUaGlzIGlzIHRoZSBub3JtIHdpdGggRExMcyBvbiBXaW5kb3dzIGFuZCB3aXRoIFxmQlwtZnZpc2liaWxpdHk9aGlkZGVuXGZSCithbmQgXGYoQ1dcKihDYF9cfF9hdHRyaWJ1dGVfXHxfICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSlcKihDJ1xmUiBpbnN0ZWFkIG9mCitcJlxmKENXXCooQ2BfXHxfZGVjbHNwZWMoZGxsZXhwb3J0KVwqKEMnXGZSIHlvdSBnZXQgYWxtb3N0IGlkZW50aWNhbCBzZW1hbnRpY3Mgd2l0aAoraWRlbnRpY2FsIHN5bnRheC4gIFRoaXMgaXMgYSBncmVhdCBib29uIHRvIHRob3NlIHdvcmtpbmcgd2l0aAorY3Jvc3MtcGxhdGZvcm0gcHJvamVjdHMuCisuU3AKK0ZvciB0aG9zZSBhZGRpbmcgdmlzaWJpbGl0eSBzdXBwb3J0IHRvIGV4aXN0aW5nIGNvZGUsIHlvdSBtYXkgZmluZAorXCZcZkIjcHJhZ21hIFxzLTFHQ0NcczAgdmlzaWJpbGl0eVxmUiBvZiB1c2UuICBUaGlzIHdvcmtzIGJ5IHlvdSBlbmNsb3NpbmcKK3RoZSBkZWNsYXJhdGlvbnMgeW91IHdpc2ggdG8gc2V0IHZpc2liaWxpdHkgZm9yIHdpdGggKGZvciBleGFtcGxlKQorXCZcZkIjcHJhZ21hIFxzLTFHQ0NcczAgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbilcZlIgYW5kCitcJlxmQiNwcmFnbWEgXHMtMUdDQ1xzMCB2aXNpYmlsaXR5IHBvcFxmUi4KK0JlYXIgaW4gbWluZCB0aGF0IHN5bWJvbCB2aXNpYmlsaXR5IHNob3VsZCBiZSB2aWV3ZWQgXGZCYXMKK3BhcnQgb2YgdGhlIFxzLTFBUElcczAgaW50ZXJmYWNlIGNvbnRyYWN0XGZSIGFuZCB0aHVzIGFsbCBuZXcgY29kZSBzaG91bGQKK2Fsd2F5cyBzcGVjaWZ5IHZpc2liaWxpdHkgd2hlbiBpdCBpcyBub3QgdGhlIGRlZmF1bHQ7IGkuZS4sIGRlY2xhcmF0aW9ucworb25seSBmb3IgdXNlIHdpdGhpbiB0aGUgbG9jYWwgXHMtMURTT1xzMCBzaG91bGQgXGZCYWx3YXlzXGZSIGJlIG1hcmtlZCBleHBsaWNpdGx5CithcyBoaWRkZW4gYXMgc28gdG8gYXZvaWQgXHMtMVBMVFxzMCBpbmRpcmVjdGlvbiBvdmVyaGVhZHNcLVwtXC1tYWtpbmcgdGhpcworYWJ1bmRhbnRseSBjbGVhciBhbHNvIGFpZHMgcmVhZGFiaWxpdHkgYW5kIHNlbGYtZG9jdW1lbnRhdGlvbiBvZiB0aGUgY29kZS4KK05vdGUgdGhhdCBkdWUgdG8gXHMtMUlTT1xzMCBcKihDKyBzcGVjaWZpY2F0aW9uIHJlcXVpcmVtZW50cywgXGYoQ1dcKihDYG9wZXJhdG9yIG5ld1wqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgb3BlcmF0b3IgZGVsZXRlXCooQydcZlIgbXVzdCBhbHdheXMgYmUgb2YgZGVmYXVsdCB2aXNpYmlsaXR5LgorLlNwCitCZSBhd2FyZSB0aGF0IGhlYWRlcnMgZnJvbSBvdXRzaWRlIHlvdXIgcHJvamVjdCwgaW4gcGFydGljdWxhciBzeXN0ZW0KK2hlYWRlcnMgYW5kIGhlYWRlcnMgZnJvbSBhbnkgb3RoZXIgbGlicmFyeSB5b3UgdXNlLCBtYXkgbm90IGJlCitleHBlY3RpbmcgdG8gYmUgY29tcGlsZWQgd2l0aCB2aXNpYmlsaXR5IG90aGVyIHRoYW4gdGhlIGRlZmF1bHQuICBZb3UKK21heSBuZWVkIHRvIGV4cGxpY2l0bHkgc2F5IFxmQiNwcmFnbWEgXHMtMUdDQ1xzMCB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdClcZlIKK2JlZm9yZSBpbmNsdWRpbmcgYW55IHN1Y2ggaGVhZGVycy4KKy5TcAorXCZcZkJleHRlcm5cZlIgZGVjbGFyYXRpb25zIGFyZSBub3QgYWZmZWN0ZWQgYnkgXGZCXC1mdmlzaWJpbGl0eVxmUiwgc28KK2EgbG90IG9mIGNvZGUgY2FuIGJlIHJlY29tcGlsZWQgd2l0aCBcZkJcLWZ2aXNpYmlsaXR5PWhpZGRlblxmUiB3aXRoCitubyBtb2RpZmljYXRpb25zLiAgSG93ZXZlciwgdGhpcyBtZWFucyB0aGF0IGNhbGxzIHRvIFxmKENXXCooQ2BleHRlcm5cKihDJ1xmUgorZnVuY3Rpb25zIHdpdGggbm8gZXhwbGljaXQgdmlzaWJpbGl0eSB1c2UgdGhlIFxzLTFQTFRcczAsIHNvIGl0IGlzIG1vcmUKK2VmZmVjdGl2ZSB0byB1c2UgXGYoQ1dcKihDYF9cfF9hdHRyaWJ1dGUgKCh2aXNpYmlsaXR5KSlcKihDJ1xmUiBhbmQvb3IKK1wmXGYoQ1dcKihDYCNwcmFnbWEgR0NDIHZpc2liaWxpdHlcKihDJ1xmUiB0byB0ZWxsIHRoZSBjb21waWxlciB3aGljaCBcZihDV1wqKENgZXh0ZXJuXCooQydcZlIKK2RlY2xhcmF0aW9ucyBzaG91bGQgYmUgdHJlYXRlZCBhcyBoaWRkZW4uCisuU3AKK05vdGUgdGhhdCBcZkJcLWZ2aXNpYmlsaXR5XGZSIGRvZXMgYWZmZWN0IFwqKEMrIHZhZ3VlIGxpbmthZ2UKK2VudGl0aWVzLiBUaGlzIG1lYW5zIHRoYXQsIGZvciBpbnN0YW5jZSwgYW4gZXhjZXB0aW9uIGNsYXNzIHRoYXQgaXMKK2JlIHRocm93biBiZXR3ZWVuIERTT3MgbXVzdCBiZSBleHBsaWNpdGx5IG1hcmtlZCB3aXRoIGRlZmF1bHQKK3Zpc2liaWxpdHkgc28gdGhhdCB0aGUgXGZCdHlwZV9pbmZvXGZSIG5vZGVzIGFyZSB1bmlmaWVkIGJldHdlZW4KK3RoZSBEU09zLgorLlNwCitBbiBvdmVydmlldyBvZiB0aGVzZSB0ZWNobmlxdWVzLCB0aGVpciBiZW5lZml0cyBhbmQgaG93IHRvIHVzZSB0aGVtCitpcyBhdCA8XGZCaHR0cDovL2djYy5nbnUub3JnL3dpa2kvVmlzaWJpbGl0eVxmUj4uCisuSVAgIlxmQlwtZnN0cmljdFwtdm9sYXRpbGVcLWJpdGZpZWxkc1xmUiIgNAorLklYIEl0ZW0gIi1mc3RyaWN0LXZvbGF0aWxlLWJpdGZpZWxkcyIKK1RoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIGlmIGFjY2Vzc2VzIHRvIHZvbGF0aWxlIGJpdC1maWVsZHMgKG9yIG90aGVyCitzdHJ1Y3R1cmUgZmllbGRzLCBhbHRob3VnaCB0aGUgY29tcGlsZXIgdXN1YWxseSBob25vcnMgdGhvc2UgdHlwZXMKK2FueXdheSkgc2hvdWxkIHVzZSBhIHNpbmdsZSBhY2Nlc3Mgb2YgdGhlIHdpZHRoIG9mIHRoZQorZmllbGQncyB0eXBlLCBhbGlnbmVkIHRvIGEgbmF0dXJhbCBhbGlnbm1lbnQgaWYgcG9zc2libGUuICBGb3IKK2V4YW1wbGUsIHRhcmdldHMgd2l0aCBtZW1vcnktbWFwcGVkIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIG1pZ2h0IHJlcXVpcmUKK2FsbCBzdWNoIGFjY2Vzc2VzIHRvIGJlIDE2IGJpdHMgd2lkZTsgd2l0aCB0aGlzIGZsYWcgeW91IGNhbgorZGVjbGFyZSBhbGwgcGVyaXBoZXJhbCBiaXQtZmllbGRzIGFzIFxmKENXXCooQ2B1bnNpZ25lZCBzaG9ydFwqKEMnXGZSIChhc3N1bWluZyBzaG9ydAoraXMgMTYgYml0cyBvbiB0aGVzZSB0YXJnZXRzKSB0byBmb3JjZSBccy0xR0NDXHMwIHRvIHVzZSAxNlwtYml0IGFjY2Vzc2VzCitpbnN0ZWFkIG9mLCBwZXJoYXBzLCBhIG1vcmUgZWZmaWNpZW50IDMyXC1iaXQgYWNjZXNzLgorLlNwCitJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZCwgdGhlIGNvbXBpbGVyIHVzZXMgdGhlIG1vc3QgZWZmaWNpZW50CitpbnN0cnVjdGlvbi4gIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGF0IG1pZ2h0IGJlIGEgMzJcLWJpdCBsb2FkCitpbnN0cnVjdGlvbiwgZXZlbiB0aG91Z2ggdGhhdCBhY2Nlc3NlcyBieXRlcyB0aGF0IGRvIG5vdCBjb250YWluCithbnkgcG9ydGlvbiBvZiB0aGUgYml0LWZpZWxkLCBvciBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycyB1bnJlbGF0ZWQgdG8KK3RoZSBvbmUgYmVpbmcgdXBkYXRlZC4KKy5TcAorSWYgdGhlIHRhcmdldCByZXF1aXJlcyBzdHJpY3QgYWxpZ25tZW50LCBhbmQgaG9ub3JpbmcgdGhlIGZpZWxkCit0eXBlIHdvdWxkIHJlcXVpcmUgdmlvbGF0aW5nIHRoaXMgYWxpZ25tZW50LCBhIHdhcm5pbmcgaXMgaXNzdWVkLgorSWYgdGhlIGZpZWxkIGhhcyBcZihDV1wqKENgcGFja2VkXCooQydcZlIgYXR0cmlidXRlLCB0aGUgYWNjZXNzIGlzIGRvbmUgd2l0aG91dAoraG9ub3JpbmcgdGhlIGZpZWxkIHR5cGUuICBJZiB0aGUgZmllbGQgZG9lc24ndCBoYXZlIFxmKENXXCooQ2BwYWNrZWRcKihDJ1xmUgorYXR0cmlidXRlLCB0aGUgYWNjZXNzIGlzIGRvbmUgaG9ub3JpbmcgdGhlIGZpZWxkIHR5cGUuICBJbiBib3RoIGNhc2VzLAorXCZccy0xR0NDXHMwIGFzc3VtZXMgdGhhdCB0aGUgdXNlciBrbm93cyBzb21ldGhpbmcgYWJvdXQgdGhlIHRhcmdldCBoYXJkd2FyZQordGhhdCBpdCBpcyB1bmF3YXJlIG9mLgorLlNwCitUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBiaW5hcnkKK2ludGVyZmFjZSBmb3IgdGhlIHRhcmdldCBwcm9jZXNzb3IuCisuSVAgIlxmQlwtZnN5bmNcLWxpYmNhbGxzXGZSIiA0CisuSVggSXRlbSAiLWZzeW5jLWxpYmNhbGxzIgorVGhpcyBvcHRpb24gY29udHJvbHMgd2hldGhlciBhbnkgb3V0LW9mLWxpbmUgaW5zdGFuY2Ugb2YgdGhlIFxmKENXXCooQ2BfXHxfc3luY1wqKEMnXGZSCitmYW1pbHkgb2YgZnVuY3Rpb25zIG1heSBiZSB1c2VkIHRvIGltcGxlbWVudCB0aGUgXCooQysxMSBcZihDV1wqKENgX1x8X2F0b21pY1wqKEMnXGZSCitmYW1pbHkgb2YgZnVuY3Rpb25zLgorLlNwCitUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aHVzIHRoZSBvbmx5IHVzZWZ1bCBmb3JtCitvZiB0aGUgb3B0aW9uIGlzIFxmQlwtZm5vXC1zeW5jXC1saWJjYWxsc1xmUi4gIFRoaXMgb3B0aW9uIGlzIHVzZWQgaW4KK3RoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgXGZJbGliYXRvbWljXGZSIHJ1bnRpbWUgbGlicmFyeS4KKy5TSCAiRU5WSVJPTk1FTlQiCisuSVggSGVhZGVyICJFTlZJUk9OTUVOVCIKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgc2V2ZXJhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgaG93IFxzLTFHQ0NcczAKK29wZXJhdGVzLiAgU29tZSBvZiB0aGVtIHdvcmsgYnkgc3BlY2lmeWluZyBkaXJlY3RvcmllcyBvciBwcmVmaXhlcyB0byB1c2UKK3doZW4gc2VhcmNoaW5nIGZvciB2YXJpb3VzIGtpbmRzIG9mIGZpbGVzLiAgU29tZSBhcmUgdXNlZCB0byBzcGVjaWZ5IG90aGVyCithc3BlY3RzIG9mIHRoZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudC4KKy5QUAorTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBzcGVjaWZ5IHBsYWNlcyB0byBzZWFyY2ggdXNpbmcgb3B0aW9ucyBzdWNoIGFzCitcJlxmQlwtQlxmUiwgXGZCXC1JXGZSIGFuZCBcZkJcLUxcZlIuICBUaGVzZQordGFrZSBwcmVjZWRlbmNlIG92ZXIgcGxhY2VzIHNwZWNpZmllZCB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoCitpbiB0dXJuIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRob3NlIHNwZWNpZmllZCBieSB0aGUgY29uZmlndXJhdGlvbiBvZiBccy0xR0NDXHMwLgorLklQICJcZkJccy0xTEFOR1xzMFxmUiIgNAorLklYIEl0ZW0gIkxBTkciCisuUEQgMAorLklQICJcZkJccy0xTENfQ1RZUEVcczBcZlIiIDQKKy5JWCBJdGVtICJMQ19DVFlQRSIKKy5JUCAiXGZCXHMtMUxDX01FU1NBR0VTXHMwXGZSIiA0CisuSVggSXRlbSAiTENfTUVTU0FHRVMiCisuSVAgIlxmQlxzLTFMQ19BTExcczBcZlIiIDQKKy5JWCBJdGVtICJMQ19BTEwiCisuUEQKK1RoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBjb250cm9sIHRoZSB3YXkgdGhhdCBccy0xR0NDXHMwIHVzZXMKK2xvY2FsaXphdGlvbiBpbmZvcm1hdGlvbiB3aGljaCBhbGxvd3MgXHMtMUdDQ1xzMCB0byB3b3JrIHdpdGggZGlmZmVyZW50CituYXRpb25hbCBjb252ZW50aW9ucy4gIFxzLTFHQ0NcczAgaW5zcGVjdHMgdGhlIGxvY2FsZSBjYXRlZ29yaWVzCitcJlxmQlxzLTFMQ19DVFlQRVxzMFxmUiBhbmQgXGZCXHMtMUxDX01FU1NBR0VTXHMwXGZSIGlmIGl0IGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gZG8KK3NvLiAgVGhlc2UgbG9jYWxlIGNhdGVnb3JpZXMgY2FuIGJlIHNldCB0byBhbnkgdmFsdWUgc3VwcG9ydGVkIGJ5IHlvdXIKK2luc3RhbGxhdGlvbi4gIEEgdHlwaWNhbCB2YWx1ZSBpcyBcZkJlbl9HQi5VVEZcLThcZlIgZm9yIEVuZ2xpc2ggaW4gdGhlIFVuaXRlZAorS2luZ2RvbSBlbmNvZGVkIGluIFxzLTFVVEZcLThcczAuCisuU3AKK1RoZSBcZkJccy0xTENfQ1RZUEVcczBcZlIgZW52aXJvbm1lbnQgdmFyaWFibGUgc3BlY2lmaWVzIGNoYXJhY3RlcgorY2xhc3NpZmljYXRpb24uICBccy0xR0NDXHMwIHVzZXMgaXQgdG8gZGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgYm91bmRhcmllcyBpbgorYSBzdHJpbmc7IHRoaXMgaXMgbmVlZGVkIGZvciBzb21lIG11bHRpYnl0ZSBlbmNvZGluZ3MgdGhhdCBjb250YWluIHF1b3RlCithbmQgZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBhcmUgb3RoZXJ3aXNlIGludGVycHJldGVkIGFzIGEgc3RyaW5nCitlbmQgb3IgZXNjYXBlLgorLlNwCitUaGUgXGZCXHMtMUxDX01FU1NBR0VTXHMwXGZSIGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgbGFuZ3VhZ2UgdG8KK3VzZSBpbiBkaWFnbm9zdGljIG1lc3NhZ2VzLgorLlNwCitJZiB0aGUgXGZCXHMtMUxDX0FMTFxzMFxmUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0IG92ZXJyaWRlcyB0aGUgdmFsdWUKK29mIFxmQlxzLTFMQ19DVFlQRVxzMFxmUiBhbmQgXGZCXHMtMUxDX01FU1NBR0VTXHMwXGZSOyBvdGhlcndpc2UsIFxmQlxzLTFMQ19DVFlQRVxzMFxmUgorYW5kIFxmQlxzLTFMQ19NRVNTQUdFU1xzMFxmUiBkZWZhdWx0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgXGZCXHMtMUxBTkdcczBcZlIKK2Vudmlyb25tZW50IHZhcmlhYmxlLiAgSWYgbm9uZSBvZiB0aGVzZSB2YXJpYWJsZXMgYXJlIHNldCwgXHMtMUdDQ1xzMAorZGVmYXVsdHMgdG8gdHJhZGl0aW9uYWwgQyBFbmdsaXNoIGJlaGF2aW9yLgorLklQICJcZkJccy0xVE1QRElSXHMwXGZSIiA0CisuSVggSXRlbSAiVE1QRElSIgorSWYgXGZCXHMtMVRNUERJUlxzMFxmUiBpcyBzZXQsIGl0IHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHRvIHVzZSBmb3IgdGVtcG9yYXJ5CitmaWxlcy4gIFxzLTFHQ0NcczAgdXNlcyB0ZW1wb3JhcnkgZmlsZXMgdG8gaG9sZCB0aGUgb3V0cHV0IG9mIG9uZSBzdGFnZSBvZgorY29tcGlsYXRpb24gd2hpY2ggaXMgdG8gYmUgdXNlZCBhcyBpbnB1dCB0byB0aGUgbmV4dCBzdGFnZTogZm9yIGV4YW1wbGUsCit0aGUgb3V0cHV0IG9mIHRoZSBwcmVwcm9jZXNzb3IsIHdoaWNoIGlzIHRoZSBpbnB1dCB0byB0aGUgY29tcGlsZXIKK3Byb3Blci4KKy5JUCAiXGZCXHMtMUdDQ19DT01QQVJFX0RFQlVHXHMwXGZSIiA0CisuSVggSXRlbSAiR0NDX0NPTVBBUkVfREVCVUciCitTZXR0aW5nIFxmQlxzLTFHQ0NfQ09NUEFSRV9ERUJVR1xzMFxmUiBpcyBuZWFybHkgZXF1aXZhbGVudCB0byBwYXNzaW5nCitcJlxmQlwtZmNvbXBhcmVcLWRlYnVnXGZSIHRvIHRoZSBjb21waWxlciBkcml2ZXIuICBTZWUgdGhlIGRvY3VtZW50YXRpb24KK29mIHRoaXMgb3B0aW9uIGZvciBtb3JlIGRldGFpbHMuCisuSVAgIlxmQlxzLTFHQ0NfRVhFQ19QUkVGSVhcczBcZlIiIDQKKy5JWCBJdGVtICJHQ0NfRVhFQ19QUkVGSVgiCitJZiBcZkJccy0xR0NDX0VYRUNfUFJFRklYXHMwXGZSIGlzIHNldCwgaXQgc3BlY2lmaWVzIGEgcHJlZml4IHRvIHVzZSBpbiB0aGUKK25hbWVzIG9mIHRoZSBzdWJwcm9ncmFtcyBleGVjdXRlZCBieSB0aGUgY29tcGlsZXIuICBObyBzbGFzaCBpcyBhZGRlZAord2hlbiB0aGlzIHByZWZpeCBpcyBjb21iaW5lZCB3aXRoIHRoZSBuYW1lIG9mIGEgc3VicHJvZ3JhbSwgYnV0IHlvdSBjYW4KK3NwZWNpZnkgYSBwcmVmaXggdGhhdCBlbmRzIHdpdGggYSBzbGFzaCBpZiB5b3Ugd2lzaC4KKy5TcAorSWYgXGZCXHMtMUdDQ19FWEVDX1BSRUZJWFxzMFxmUiBpcyBub3Qgc2V0LCBccy0xR0NDXHMwIGF0dGVtcHRzIHRvIGZpZ3VyZSBvdXQKK2FuIGFwcHJvcHJpYXRlIHByZWZpeCB0byB1c2UgYmFzZWQgb24gdGhlIHBhdGhuYW1lIGl0IGlzIGludm9rZWQgd2l0aC4KKy5TcAorSWYgXHMtMUdDQ1xzMCBjYW5ub3QgZmluZCB0aGUgc3VicHJvZ3JhbSB1c2luZyB0aGUgc3BlY2lmaWVkIHByZWZpeCwgaXQKK3RyaWVzIGxvb2tpbmcgaW4gdGhlIHVzdWFsIHBsYWNlcyBmb3IgdGhlIHN1YnByb2dyYW0uCisuU3AKK1RoZSBkZWZhdWx0IHZhbHVlIG9mIFxmQlxzLTFHQ0NfRVhFQ19QUkVGSVhcczBcZlIgaXMKK1wmXGZJXGZJcHJlZml4XGZJL2xpYi9nY2MvXGZSIHdoZXJlIFxmSXByZWZpeFxmUiBpcyB0aGUgcHJlZml4IHRvCit0aGUgaW5zdGFsbGVkIGNvbXBpbGVyLiBJbiBtYW55IGNhc2VzIFxmSXByZWZpeFxmUiBpcyB0aGUgdmFsdWUKK29mIFxmKENXXCooQ2BwcmVmaXhcKihDJ1xmUiB3aGVuIHlvdSByYW4gdGhlIFxmSWNvbmZpZ3VyZVxmUiBzY3JpcHQuCisuU3AKK090aGVyIHByZWZpeGVzIHNwZWNpZmllZCB3aXRoIFxmQlwtQlxmUiB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGlzIHByZWZpeC4KKy5TcAorVGhpcyBwcmVmaXggaXMgYWxzbyB1c2VkIGZvciBmaW5kaW5nIGZpbGVzIHN1Y2ggYXMgXGZJY3J0MC5vXGZSIHRoYXQgYXJlCit1c2VkIGZvciBsaW5raW5nLgorLlNwCitJbiBhZGRpdGlvbiwgdGhlIHByZWZpeCBpcyB1c2VkIGluIGFuIHVudXN1YWwgd2F5IGluIGZpbmRpbmcgdGhlCitkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcy4gIEZvciBlYWNoIG9mIHRoZSBzdGFuZGFyZAorZGlyZWN0b3JpZXMgd2hvc2UgbmFtZSBub3JtYWxseSBiZWdpbnMgd2l0aCBcZkIvdXNyL2xvY2FsL2xpYi9nY2NcZlIKKyhtb3JlIHByZWNpc2VseSwgd2l0aCB0aGUgdmFsdWUgb2YgXGZCXHMtMUdDQ19JTkNMVURFX0RJUlxzMFxmUiksIFxzLTFHQ0NcczAgdHJpZXMKK3JlcGxhY2luZyB0aGF0IGJlZ2lubmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4IHRvIHByb2R1Y2UgYW4KK2FsdGVybmF0ZSBkaXJlY3RvcnkgbmFtZS4gIFRodXMsIHdpdGggXGZCXC1CZm9vL1xmUiwgXHMtMUdDQ1xzMCBzZWFyY2hlcworXCZcZklmb28vYmFyXGZSIGp1c3QgYmVmb3JlIGl0IHNlYXJjaGVzIHRoZSBzdGFuZGFyZCBkaXJlY3RvcnkgCitcJlxmSS91c3IvbG9jYWwvbGliL2JhclxmUi4KK0lmIGEgc3RhbmRhcmQgZGlyZWN0b3J5IGJlZ2lucyB3aXRoIHRoZSBjb25maWd1cmVkCitcJlxmSXByZWZpeFxmUiB0aGVuIHRoZSB2YWx1ZSBvZiBcZklwcmVmaXhcZlIgaXMgcmVwbGFjZWQgYnkKK1wmXGZCXHMtMUdDQ19FWEVDX1BSRUZJWFxzMFxmUiB3aGVuIGxvb2tpbmcgZm9yIGhlYWRlciBmaWxlcy4KKy5JUCAiXGZCXHMtMUNPTVBJTEVSX1BBVEhcczBcZlIiIDQKKy5JWCBJdGVtICJDT01QSUxFUl9QQVRIIgorVGhlIHZhbHVlIG9mIFxmQlxzLTFDT01QSUxFUl9QQVRIXHMwXGZSIGlzIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YKK2RpcmVjdG9yaWVzLCBtdWNoIGxpa2UgXGZCXHMtMVBBVEhcczBcZlIuICBccy0xR0NDXHMwIHRyaWVzIHRoZSBkaXJlY3RvcmllcyB0aHVzCitzcGVjaWZpZWQgd2hlbiBzZWFyY2hpbmcgZm9yIHN1YnByb2dyYW1zLCBpZiBpdCBjYW4ndCBmaW5kIHRoZQorc3VicHJvZ3JhbXMgdXNpbmcgXGZCXHMtMUdDQ19FWEVDX1BSRUZJWFxzMFxmUi4KKy5JUCAiXGZCXHMtMUxJQlJBUllfUEFUSFxzMFxmUiIgNAorLklYIEl0ZW0gIkxJQlJBUllfUEFUSCIKK1RoZSB2YWx1ZSBvZiBcZkJccy0xTElCUkFSWV9QQVRIXHMwXGZSIGlzIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YKK2RpcmVjdG9yaWVzLCBtdWNoIGxpa2UgXGZCXHMtMVBBVEhcczBcZlIuICBXaGVuIGNvbmZpZ3VyZWQgYXMgYSBuYXRpdmUgY29tcGlsZXIsCitcJlxzLTFHQ0NcczAgdHJpZXMgdGhlIGRpcmVjdG9yaWVzIHRodXMgc3BlY2lmaWVkIHdoZW4gc2VhcmNoaW5nIGZvciBzcGVjaWFsCitsaW5rZXIgZmlsZXMsIGlmIGl0IGNhbid0IGZpbmQgdGhlbSB1c2luZyBcZkJccy0xR0NDX0VYRUNfUFJFRklYXHMwXGZSLiAgTGlua2luZwordXNpbmcgXHMtMUdDQ1xzMCBhbHNvIHVzZXMgdGhlc2UgZGlyZWN0b3JpZXMgd2hlbiBzZWFyY2hpbmcgZm9yIG9yZGluYXJ5CitsaWJyYXJpZXMgZm9yIHRoZSBcZkJcLWxcZlIgb3B0aW9uIChidXQgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIHdpdGgKK1wmXGZCXC1MXGZSIGNvbWUgZmlyc3QpLgorLklQICJcZkJccy0xTEFOR1xzMFxmUiIgNAorLklYIEl0ZW0gIkxBTkciCitUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gcGFzcyBsb2NhbGUgaW5mb3JtYXRpb24gdG8gdGhlIGNvbXBpbGVyLiAgT25lIHdheSBpbgord2hpY2ggdGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIGlzIHRvIGRldGVybWluZSB0aGUgY2hhcmFjdGVyIHNldCB0byBiZSB1c2VkCit3aGVuIGNoYXJhY3RlciBsaXRlcmFscywgc3RyaW5nIGxpdGVyYWxzIGFuZCBjb21tZW50cyBhcmUgcGFyc2VkIGluIEMgYW5kIFwqKEMrLgorV2hlbiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCB0byBhbGxvdyBtdWx0aWJ5dGUgY2hhcmFjdGVycywKK3RoZSBmb2xsb3dpbmcgdmFsdWVzIGZvciBcZkJccy0xTEFOR1xzMFxmUiBhcmUgcmVjb2duaXplZDoKKy5SUyA0CisuSVAgIlxmQkNcLUpJU1xmUiIgNAorLklYIEl0ZW0gIkMtSklTIgorUmVjb2duaXplIFxzLTFKSVNcczAgY2hhcmFjdGVycy4KKy5JUCAiXGZCQ1wtU0pJU1xmUiIgNAorLklYIEl0ZW0gIkMtU0pJUyIKK1JlY29nbml6ZSBccy0xU0pJU1xzMCBjaGFyYWN0ZXJzLgorLklQICJcZkJDXC1FVUNKUFxmUiIgNAorLklYIEl0ZW0gIkMtRVVDSlAiCitSZWNvZ25pemUgXHMtMUVVQ0pQXHMwIGNoYXJhY3RlcnMuCisuUkUKKy5SUyA0CisuU3AKK0lmIFxmQlxzLTFMQU5HXHMwXGZSIGlzIG5vdCBkZWZpbmVkLCBvciBpZiBpdCBoYXMgc29tZSBvdGhlciB2YWx1ZSwgdGhlbiB0aGUKK2NvbXBpbGVyIHVzZXMgXGYoQ1dcKihDYG1ibGVuXCooQydcZlIgYW5kIFxmKENXXCooQ2BtYnRvd2NcKihDJ1xmUiBhcyBkZWZpbmVkIGJ5IHRoZSBkZWZhdWx0IGxvY2FsZSB0bworcmVjb2duaXplIGFuZCB0cmFuc2xhdGUgbXVsdGlieXRlIGNoYXJhY3RlcnMuCisuUkUKKy5QUAorU29tZSBhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZQorcHJlcHJvY2Vzc29yLgorLklQICJcZkJccy0xQ1BBVEhcczBcZlIiIDQKKy5JWCBJdGVtICJDUEFUSCIKKy5QRCAwCisuSVAgIlxmQkNfSU5DTFVERV9QQVRIXGZSIiA0CisuSVggSXRlbSAiQ19JTkNMVURFX1BBVEgiCisuSVAgIlxmQlxzLTFDUExVU19JTkNMVURFX1BBVEhcczBcZlIiIDQKKy5JWCBJdGVtICJDUExVU19JTkNMVURFX1BBVEgiCisuSVAgIlxmQlxzLTFPQkpDX0lOQ0xVREVfUEFUSFxzMFxmUiIgNAorLklYIEl0ZW0gIk9CSkNfSU5DTFVERV9QQVRIIgorLlBECitFYWNoIHZhcmlhYmxlJ3MgdmFsdWUgaXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHNlcGFyYXRlZCBieSBhIHNwZWNpYWwKK2NoYXJhY3RlciwgbXVjaCBsaWtlIFxmQlxzLTFQQVRIXHMwXGZSLCBpbiB3aGljaCB0byBsb29rIGZvciBoZWFkZXIgZmlsZXMuCitUaGUgc3BlY2lhbCBjaGFyYWN0ZXIsIFxmKENXXCooQ2BQQVRIX1NFUEFSQVRPUlwqKEMnXGZSLCBpcyB0YXJnZXQtZGVwZW5kZW50IGFuZAorZGV0ZXJtaW5lZCBhdCBccy0xR0NDXHMwIGJ1aWxkIHRpbWUuICBGb3IgTWljcm9zb2Z0IFdpbmRvd3MtYmFzZWQgdGFyZ2V0cyBpdCBpcyBhCitzZW1pY29sb24sIGFuZCBmb3IgYWxtb3N0IGFsbCBvdGhlciB0YXJnZXRzIGl0IGlzIGEgY29sb24uCisuU3AKK1wmXGZCXHMtMUNQQVRIXHMwXGZSIHNwZWNpZmllcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQgYXMgaWYKK3NwZWNpZmllZCB3aXRoIFxmQlwtSVxmUiwgYnV0IGFmdGVyIGFueSBwYXRocyBnaXZlbiB3aXRoIFxmQlwtSVxmUgorb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1c2VkCityZWdhcmRsZXNzIG9mIHdoaWNoIGxhbmd1YWdlIGlzIGJlaW5nIHByZXByb2Nlc3NlZC4KKy5TcAorVGhlIHJlbWFpbmluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXBwbHkgb25seSB3aGVuIHByZXByb2Nlc3NpbmcgdGhlCitwYXJ0aWN1bGFyIGxhbmd1YWdlIGluZGljYXRlZC4gIEVhY2ggc3BlY2lmaWVzIGEgbGlzdCBvZiBkaXJlY3RvcmllcwordG8gYmUgc2VhcmNoZWQgYXMgaWYgc3BlY2lmaWVkIHdpdGggXGZCXC1pc3lzdGVtXGZSLCBidXQgYWZ0ZXIgYW55CitwYXRocyBnaXZlbiB3aXRoIFxmQlwtaXN5c3RlbVxmUiBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuCisuU3AKK0luIGFsbCB0aGVzZSB2YXJpYWJsZXMsIGFuIGVtcHR5IGVsZW1lbnQgaW5zdHJ1Y3RzIHRoZSBjb21waWxlciB0bworc2VhcmNoIGl0cyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgRW1wdHkgZWxlbWVudHMgY2FuIGFwcGVhciBhdCB0aGUKK2JlZ2lubmluZyBvciBlbmQgb2YgYSBwYXRoLiAgRm9yIGluc3RhbmNlLCBpZiB0aGUgdmFsdWUgb2YKK1wmXGZCXHMtMUNQQVRIXHMwXGZSIGlzIFxmKENXXCooQ2A6L3NwZWNpYWwvaW5jbHVkZVwqKEMnXGZSLCB0aGF0IGhhcyB0aGUgc2FtZQorZWZmZWN0IGFzIFxmQlwtSS5cIFwtSS9zcGVjaWFsL2luY2x1ZGVcZlIuCisuSVAgIlxmQlxzLTFERVBFTkRFTkNJRVNfT1VUUFVUXHMwXGZSIiA0CisuSVggSXRlbSAiREVQRU5ERU5DSUVTX09VVFBVVCIKK0lmIHRoaXMgdmFyaWFibGUgaXMgc2V0LCBpdHMgdmFsdWUgc3BlY2lmaWVzIGhvdyB0byBvdXRwdXQKK2RlcGVuZGVuY2llcyBmb3IgTWFrZSBiYXNlZCBvbiB0aGUgbm9uLXN5c3RlbSBoZWFkZXIgZmlsZXMgcHJvY2Vzc2VkCitieSB0aGUgY29tcGlsZXIuICBTeXN0ZW0gaGVhZGVyIGZpbGVzIGFyZSBpZ25vcmVkIGluIHRoZSBkZXBlbmRlbmN5CitvdXRwdXQuCisuU3AKK1RoZSB2YWx1ZSBvZiBcZkJccy0xREVQRU5ERU5DSUVTX09VVFBVVFxzMFxmUiBjYW4gYmUganVzdCBhIGZpbGUgbmFtZSwgaW4KK3doaWNoIGNhc2UgdGhlIE1ha2UgcnVsZXMgYXJlIHdyaXR0ZW4gdG8gdGhhdCBmaWxlLCBndWVzc2luZyB0aGUgdGFyZ2V0CituYW1lIGZyb20gdGhlIHNvdXJjZSBmaWxlIG5hbWUuICBPciB0aGUgdmFsdWUgY2FuIGhhdmUgdGhlIGZvcm0KK1wmXGZJZmlsZVxmUlxmQiBcZlJcZkl0YXJnZXRcZlIsIGluIHdoaWNoIGNhc2UgdGhlIHJ1bGVzIGFyZSB3cml0dGVuIHRvCitmaWxlIFxmSWZpbGVcZlIgdXNpbmcgXGZJdGFyZ2V0XGZSIGFzIHRoZSB0YXJnZXQgbmFtZS4KKy5TcAorSW4gb3RoZXIgd29yZHMsIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZXF1aXZhbGVudCB0byBjb21iaW5pbmcKK3RoZSBvcHRpb25zIFxmQlwtTU1cZlIgYW5kIFxmQlwtTUZcZlIsCit3aXRoIGFuIG9wdGlvbmFsIFxmQlwtTVRcZlIgc3dpdGNoIHRvby4KKy5JUCAiXGZCXHMtMVNVTlBST19ERVBFTkRFTkNJRVNcczBcZlIiIDQKKy5JWCBJdGVtICJTVU5QUk9fREVQRU5ERU5DSUVTIgorVGhpcyB2YXJpYWJsZSBpcyB0aGUgc2FtZSBhcyBcZkJccy0xREVQRU5ERU5DSUVTX09VVFBVVFxzMFxmUiAoc2VlIGFib3ZlKSwKK2V4Y2VwdCB0aGF0IHN5c3RlbSBoZWFkZXIgZmlsZXMgYXJlIG5vdCBpZ25vcmVkLCBzbyBpdCBpbXBsaWVzCitcJlxmQlwtTVxmUiByYXRoZXIgdGhhbiBcZkJcLU1NXGZSLiAgSG93ZXZlciwgdGhlIGRlcGVuZGVuY2Ugb24gdGhlCittYWluIGlucHV0IGZpbGUgaXMgb21pdHRlZC4KKy5TSCAiQlVHUyIKKy5JWCBIZWFkZXIgIkJVR1MiCitGb3IgaW5zdHJ1Y3Rpb25zIG9uIHJlcG9ydGluZyBidWdzLCBzZWUKKzxcZkJodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9nY2NcLWxpbmFyb1xmUj4uCisuU0ggIkZPT1ROT1RFUyIKKy5JWCBIZWFkZXIgIkZPT1ROT1RFUyIKKy5JUCAiMS4iIDQKK09uIHNvbWUgc3lzdGVtcywgXGZCZ2NjIFwtc2hhcmVkXGZSCituZWVkcyB0byBidWlsZCBzdXBwbGVtZW50YXJ5IHN0dWIgY29kZSBmb3IgY29uc3RydWN0b3JzIHRvIHdvcmsuICBPbgorbXVsdGktbGliYmVkIHN5c3RlbXMsIFxmQmdjYyBcLXNoYXJlZFxmUiBtdXN0IHNlbGVjdCB0aGUgY29ycmVjdCBzdXBwb3J0CitsaWJyYXJpZXMgdG8gbGluayBhZ2FpbnN0LiAgRmFpbGluZyB0byBzdXBwbHkgdGhlIGNvcnJlY3QgZmxhZ3MgbWF5IGxlYWQKK3RvIHN1YnRsZSBkZWZlY3RzLiAgU3VwcGx5aW5nIHRoZW0gaW4gY2FzZXMgd2hlcmUgdGhleSBhcmUgbm90IG5lY2Vzc2FyeQoraXMgaW5ub2N1b3VzLgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgorXCZcZklncGxcZlJcfCg3KSwgXGZJZ2ZkbFxmUlx8KDcpLCBcZklmc2ZcLWZ1bmRpbmdcZlJcfCg3KSwKK1wmXGZJY3BwXGZSXHwoMSksIFxmSWdjb3ZcZlJcfCgxKSwgXGZJYXNcZlJcfCgxKSwgXGZJbGRcZlJcfCgxKSwgXGZJZ2RiXGZSXHwoMSksIFxmSWFkYlxmUlx8KDEpLCBcZklkYnhcZlJcfCgxKSwgXGZJc2RiXGZSXHwoMSkKK2FuZCB0aGUgSW5mbyBlbnRyaWVzIGZvciBcZklnY2NcZlIsIFxmSWNwcFxmUiwgXGZJYXNcZlIsCitcJlxmSWxkXGZSLCBcZkliaW51dGlsc1xmUiBhbmQgXGZJZ2RiXGZSLgorLlNIICJBVVRIT1IiCisuSVggSGVhZGVyICJBVVRIT1IiCitTZWUgdGhlIEluZm8gZW50cnkgZm9yIFxmQmdjY1xmUiwgb3IKKzxcZkJodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvQ29udHJpYnV0b3JzLmh0bWxcZlI+LAorZm9yIGNvbnRyaWJ1dG9ycyB0byBccy0xR0NDXHMwLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5ODhcLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMyBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgXCooTCJccy0xR05VXHMwIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcKihSIiBhbmQgXCooTCJGdW5kaW5nCitGcmVlIFNvZnR3YXJlXCooUiIsIHRoZSBGcm9udC1Db3ZlciB0ZXh0cyBiZWluZyAoYSkgKHNlZSBiZWxvdyksIGFuZCB3aXRoCit0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikgKHNlZSBiZWxvdykuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMKK2luY2x1ZGVkIGluIHRoZSBcZklnZmRsXGZSXHwoNykgbWFuIHBhZ2UuCisuUFAKKyhhKSBUaGUgXHMtMUZTRlxzMCdzIEZyb250LUNvdmVyIFRleHQgaXM6CisuUFAKKy5WYiAxCitcJiAgICAgQSBHTlUgTWFudWFsCisuVmUKKy5QUAorKGIpIFRoZSBccy0xRlNGXHMwJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorLlBQCisuVmIgMworXCYgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKK1wmICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorXCYgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCisuVmUKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1nY2MuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1nY2MuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQ0ZDdmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWdjYy4xCkBAIC0wLDAgKzEsMTk4NTkgQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjIyIChQb2Q6OlNpbXBsZSAzLjA3KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJHQ0MgMSIKKy5USCBHQ0MgMSAiMjAxMy0xMS0xMSIgImdjYy00LjguMyIgIkdOVSIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitnY2MgXC0gR05VIHByb2plY3QgQyBhbmQgQysrIGNvbXBpbGVyCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCitnY2MgW1xmQlwtY1xmUnxcZkJcLVNcZlJ8XGZCXC1FXGZSXSBbXGZCXC1zdGQ9XGZSXGZJc3RhbmRhcmRcZlJdCisgICAgW1xmQlwtZ1xmUl0gW1xmQlwtcGdcZlJdIFtcZkJcLU9cZlJcZklsZXZlbFxmUl0KKyAgICBbXGZCXC1XXGZSXGZJd2FyblxmUi4uLl0gW1xmQlwtV3BlZGFudGljXGZSXQorICAgIFtcZkJcLUlcZlJcZklkaXJcZlIuLi5dIFtcZkJcLUxcZlJcZklkaXJcZlIuLi5dCisgICAgW1xmQlwtRFxmUlxmSW1hY3JvXGZSWz1cZklkZWZuXGZSXS4uLl0gW1xmQlwtVVxmUlxmSW1hY3JvXGZSXQorICAgIFtcZkJcLWZcZlJcZklvcHRpb25cZlIuLi5dIFtcZkJcLW1cZlJcZkltYWNoaW5lLW9wdGlvblxmUi4uLl0KKyAgICBbXGZCXC1vXGZSIFxmSW91dGZpbGVcZlJdIFtAXGZJZmlsZVxmUl0gXGZJaW5maWxlXGZSLi4uCisuUFAKK09ubHkgdGhlIG1vc3QgdXNlZnVsIG9wdGlvbnMgYXJlIGxpc3RlZCBoZXJlOyBzZWUgYmVsb3cgZm9yIHRoZQorcmVtYWluZGVyLiAgXGZCZysrXGZSIGFjY2VwdHMgbW9zdGx5IHRoZSBzYW1lIG9wdGlvbnMgYXMgXGZCZ2NjXGZSLgorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorV2hlbiB5b3UgaW52b2tlIFxzLTFHQ0NcczAsIGl0IG5vcm1hbGx5IGRvZXMgcHJlcHJvY2Vzc2luZywgY29tcGlsYXRpb24sCithc3NlbWJseSBhbmQgbGlua2luZy4gIFRoZSBcKihMIm92ZXJhbGwgb3B0aW9uc1wqKFIiIGFsbG93IHlvdSB0byBzdG9wIHRoaXMKK3Byb2Nlc3MgYXQgYW4gaW50ZXJtZWRpYXRlIHN0YWdlLiAgRm9yIGV4YW1wbGUsIHRoZSBcZkJcLWNcZlIgb3B0aW9uCitzYXlzIG5vdCB0byBydW4gdGhlIGxpbmtlci4gIFRoZW4gdGhlIG91dHB1dCBjb25zaXN0cyBvZiBvYmplY3QgZmlsZXMKK291dHB1dCBieSB0aGUgYXNzZW1ibGVyLgorLlBQCitPdGhlciBvcHRpb25zIGFyZSBwYXNzZWQgb24gdG8gb25lIHN0YWdlIG9mIHByb2Nlc3NpbmcuICBTb21lIG9wdGlvbnMKK2NvbnRyb2wgdGhlIHByZXByb2Nlc3NvciBhbmQgb3RoZXJzIHRoZSBjb21waWxlciBpdHNlbGYuICBZZXQgb3RoZXIKK29wdGlvbnMgY29udHJvbCB0aGUgYXNzZW1ibGVyIGFuZCBsaW5rZXI7IG1vc3Qgb2YgdGhlc2UgYXJlIG5vdAorZG9jdW1lbnRlZCBoZXJlLCBzaW5jZSB5b3UgcmFyZWx5IG5lZWQgdG8gdXNlIGFueSBvZiB0aGVtLgorLlBQCitNb3N0IG9mIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0aGF0IHlvdSBjYW4gdXNlIHdpdGggXHMtMUdDQ1xzMCBhcmUgdXNlZnVsCitmb3IgQyBwcm9ncmFtczsgd2hlbiBhbiBvcHRpb24gaXMgb25seSB1c2VmdWwgd2l0aCBhbm90aGVyIGxhbmd1YWdlCisodXN1YWxseSBcKihDKyksIHRoZSBleHBsYW5hdGlvbiBzYXlzIHNvIGV4cGxpY2l0bHkuICBJZiB0aGUgZGVzY3JpcHRpb24KK2ZvciBhIHBhcnRpY3VsYXIgb3B0aW9uIGRvZXMgbm90IG1lbnRpb24gYSBzb3VyY2UgbGFuZ3VhZ2UsIHlvdSBjYW4gdXNlCit0aGF0IG9wdGlvbiB3aXRoIGFsbCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzLgorLlBQCitUaGUgXGZCZ2NjXGZSIHByb2dyYW0gYWNjZXB0cyBvcHRpb25zIGFuZCBmaWxlIG5hbWVzIGFzIG9wZXJhbmRzLiAgTWFueQorb3B0aW9ucyBoYXZlIG11bHRpLWxldHRlciBuYW1lczsgdGhlcmVmb3JlIG11bHRpcGxlIHNpbmdsZS1sZXR0ZXIgb3B0aW9ucworbWF5IFxmSW5vdFxmUiBiZSBncm91cGVkOiBcZkJcLWR2XGZSIGlzIHZlcnkgZGlmZmVyZW50IGZyb20gXGZCXC1kXCBcLXZcZlIuCisuUFAKK1lvdSBjYW4gbWl4IG9wdGlvbnMgYW5kIG90aGVyIGFyZ3VtZW50cy4gIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgb3JkZXIKK3lvdSB1c2UgZG9lc24ndCBtYXR0ZXIuICBPcmRlciBkb2VzIG1hdHRlciB3aGVuIHlvdSB1c2Ugc2V2ZXJhbAorb3B0aW9ucyBvZiB0aGUgc2FtZSBraW5kOyBmb3IgZXhhbXBsZSwgaWYgeW91IHNwZWNpZnkgXGZCXC1MXGZSIG1vcmUKK3RoYW4gb25jZSwgdGhlIGRpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkLiAgQWxzbywKK3RoZSBwbGFjZW1lbnQgb2YgdGhlIFxmQlwtbFxmUiBvcHRpb24gaXMgc2lnbmlmaWNhbnQuCisuUFAKK01hbnkgb3B0aW9ucyBoYXZlIGxvbmcgbmFtZXMgc3RhcnRpbmcgd2l0aCBcZkJcLWZcZlIgb3Igd2l0aAorXCZcZkJcLVdcZlJcLVwtXC1mb3IgZXhhbXBsZSwKK1wmXGZCXC1mbW92ZVwtbG9vcFwtaW52YXJpYW50c1xmUiwgXGZCXC1XZm9ybWF0XGZSIGFuZCBzbyBvbi4gIE1vc3Qgb2YKK3RoZXNlIGhhdmUgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXM7IHRoZSBuZWdhdGl2ZSBmb3JtIG9mCitcJlxmQlwtZmZvb1xmUiBpcyBcZkJcLWZub1wtZm9vXGZSLiAgVGhpcyBtYW51YWwgZG9jdW1lbnRzCitvbmx5IG9uZSBvZiB0aGVzZSB0d28gZm9ybXMsIHdoaWNoZXZlciBvbmUgaXMgbm90IHRoZSBkZWZhdWx0LgorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKKy5TUyAiT3B0aW9uIFN1bW1hcnkiCisuSVggU3Vic2VjdGlvbiAiT3B0aW9uIFN1bW1hcnkiCitIZXJlIGlzIGEgc3VtbWFyeSBvZiBhbGwgdGhlIG9wdGlvbnMsIGdyb3VwZWQgYnkgdHlwZS4gIEV4cGxhbmF0aW9ucyBhcmUKK2luIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisuSVAgIlxmSU92ZXJhbGwgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIk92ZXJhbGwgT3B0aW9ucyIKK1wmXGZCXC1jICBcLVMgIFwtRSAgXC1vXGZSIFxmSWZpbGVcZlIgIFxmQlwtbm9cLWNhbm9uaWNhbFwtcHJlZml4ZXMgIAorXCZcLXBpcGUgIFwtcGFzc1wtZXhpdFwtY29kZXMgIAorXCZcLXhcZlIgXGZJbGFuZ3VhZ2VcZlIgIFxmQlwtdiAgXC0jIyMgIFwtXC1oZWxwXGZSW1xmQj1cZlJcZkljbGFzc1xmUltcZkIsLi4uXGZSXV0gIFxmQlwtXC10YXJnZXRcLWhlbHAgIAorXCZcLVwtdmVyc2lvbiBcLXdyYXBwZXIgQFxmUlxmSWZpbGVcZlIgXGZCXC1mcGx1Z2luPVxmUlxmSWZpbGVcZlIgXGZCXC1mcGx1Z2luXC1hcmdcLVxmUlxmSW5hbWVcZlJcZkI9XGZSXGZJYXJnXGZSICAKK1wmXGZCXC1mZHVtcFwtYWRhXC1zcGVjXGZSW1xmQlwtc2xpbVxmUl0gXGZCXC1mYWRhXC1zcGVjXC1wYXJlbnQ9XGZSXGZJYXJnXGZSIFxmQlwtZmR1bXBcLWdvXC1zcGVjPVxmUlxmSWZpbGVcZlIKKy5JUCAiXGZJQyBMYW5ndWFnZSBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiQyBMYW5ndWFnZSBPcHRpb25zIgorXCZcZkJcLWFuc2kgIFwtc3RkPVxmUlxmSXN0YW5kYXJkXGZSICBcZkJcLWZnbnU4OVwtaW5saW5lIAorXCZcLWF1eFwtaW5mb1xmUiBcZklmaWxlbmFtZVxmUiBcZkJcLWZhbGxvd1wtcGFyYW1ldGVybGVzc1wtdmFyaWFkaWNcLWZ1bmN0aW9ucyAKK1wmXC1mbm9cLWFzbSAgXC1mbm9cLWJ1aWx0aW4gIFwtZm5vXC1idWlsdGluXC1cZlJcZklmdW5jdGlvblxmUiAKK1wmXGZCXC1maG9zdGVkICBcLWZmcmVlc3RhbmRpbmcgXC1mb3Blbm1wIFwtZm1zXC1leHRlbnNpb25zIFwtZnBsYW45XC1leHRlbnNpb25zIAorXCZcLXRyaWdyYXBocyAgXC10cmFkaXRpb25hbCAgXC10cmFkaXRpb25hbFwtY3BwIAorXCZcLWZhbGxvd1wtc2luZ2xlXC1wcmVjaXNpb24gIFwtZmNvbmRcLW1pc21hdGNoIFwtZmxheFwtdmVjdG9yXC1jb252ZXJzaW9ucyAKK1wmXC1mc2lnbmVkXC1iaXRmaWVsZHMgIFwtZnNpZ25lZFwtY2hhciAKK1wmXC1mdW5zaWduZWRcLWJpdGZpZWxkcyAgXC1mdW5zaWduZWRcLWNoYXJcZlIKKy5JUCAiXGZJXCooQysgTGFuZ3VhZ2UgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIiBMYW5ndWFnZSBPcHRpb25zIgorXCZcZkJcLWZhYmlcLXZlcnNpb249XGZSXGZJblxmUiAgXGZCXC1mbm9cLWFjY2Vzc1wtY29udHJvbCAgXC1mY2hlY2tcLW5ldyAKK1wmXC1mY29uc3RleHByXC1kZXB0aD1cZlJcZkluXGZSICBcZkJcLWZmcmllbmRcLWluamVjdGlvbiAKK1wmXC1mbm9cLWVsaWRlXC1jb25zdHJ1Y3RvcnMgCitcJlwtZm5vXC1lbmZvcmNlXC1laFwtc3BlY3MgCitcJlwtZmZvclwtc2NvcGUgIFwtZm5vXC1mb3JcLXNjb3BlICBcLWZub1wtZ251XC1rZXl3b3JkcyAKK1wmXC1mbm9cLWltcGxpY2l0XC10ZW1wbGF0ZXMgCitcJlwtZm5vXC1pbXBsaWNpdFwtaW5saW5lXC10ZW1wbGF0ZXMgCitcJlwtZm5vXC1pbXBsZW1lbnRcLWlubGluZXMgIFwtZm1zXC1leHRlbnNpb25zIAorXCZcLWZub1wtbm9uYW5zaVwtYnVpbHRpbnMgIFwtZm5vdGhyb3dcLW9wdCAgXC1mbm9cLW9wZXJhdG9yXC1uYW1lcyAKK1wmXC1mbm9cLW9wdGlvbmFsXC1kaWFncyAgXC1mcGVybWlzc2l2ZSAKK1wmXC1mbm9cLXByZXR0eVwtdGVtcGxhdGVzIAorXCZcLWZyZXBvICBcLWZub1wtcnR0aSAgXC1mc3RhdHMgIFwtZnRlbXBsYXRlXC1iYWNrdHJhY2VcLWxpbWl0PVxmUlxmSW5cZlIgCitcJlxmQlwtZnRlbXBsYXRlXC1kZXB0aD1cZlJcZkluXGZSIAorXCZcZkJcLWZub1wtdGhyZWFkc2FmZVwtc3RhdGljcyBcLWZ1c2VcLWN4YVwtYXRleGl0ICBcLWZub1wtd2VhayAgXC1ub3N0ZGluYysrIAorXCZcLWZub1wtZGVmYXVsdFwtaW5saW5lICBcLWZ2aXNpYmlsaXR5XC1pbmxpbmVzXC1oaWRkZW4gCitcJlwtZnZpc2liaWxpdHlcLW1zXC1jb21wYXQgCitcJlwtZmV4dFwtbnVtZXJpY1wtbGl0ZXJhbHMgCitcJlwtV2FiaSAgXC1XY29udmVyc2lvblwtbnVsbCAgXC1XY3RvclwtZHRvclwtcHJpdmFjeSAKK1wmXC1XZGVsZXRlXC1ub25cLXZpcnR1YWxcLWR0b3IgXC1XbGl0ZXJhbFwtc3VmZml4IFwtV25hcnJvd2luZyAKK1wmXC1Xbm9leGNlcHQgXC1Xbm9uXC12aXJ0dWFsXC1kdG9yICBcLVdyZW9yZGVyIAorXCZcLVdlZmZjKysgIFwtV3N0cmljdFwtbnVsbFwtc2VudGluZWwgCitcJlwtV25vXC1ub25cLXRlbXBsYXRlXC1mcmllbmQgIFwtV29sZFwtc3R5bGVcLWNhc3QgCitcJlwtV292ZXJsb2FkZWRcLXZpcnR1YWwgIFwtV25vXC1wbWZcLWNvbnZlcnNpb25zIAorXCZcLVdzaWduXC1wcm9tb1xmUgorLklQICJcZklPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBMYW5ndWFnZSBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS0gTGFuZ3VhZ2UgT3B0aW9ucyIKK1wmXGZCXC1mY29uc3RhbnRcLXN0cmluZ1wtY2xhc3M9XGZSXGZJY2xhc3MtbmFtZVxmUiAKK1wmXGZCXC1mZ251XC1ydW50aW1lICBcLWZuZXh0XC1ydW50aW1lIAorXCZcLWZub1wtbmlsXC1yZWNlaXZlcnMgCitcJlwtZm9iamNcLWFiaVwtdmVyc2lvbj1cZlJcZkluXGZSIAorXCZcZkJcLWZvYmpjXC1jYWxsXC1jeHhcLWNkdG9ycyAKK1wmXC1mb2JqY1wtZGlyZWN0XC1kaXNwYXRjaCAKK1wmXC1mb2JqY1wtZXhjZXB0aW9ucyAKK1wmXC1mb2JqY1wtZ2MgCitcJlwtZm9iamNcLW5pbGNoZWNrIAorXCZcLWZvYmpjXC1zdGQ9b2JqYzEgCitcJlwtZnJlcGxhY2VcLW9iamNcLWNsYXNzZXMgCitcJlwtZnplcm9cLWxpbmsgCitcJlwtZ2VuXC1kZWNscyAKK1wmXC1XYXNzaWduXC1pbnRlcmNlcHQgCitcJlwtV25vXC1wcm90b2NvbCAgXC1Xc2VsZWN0b3IgCitcJlwtV3N0cmljdFwtc2VsZWN0b3JcLW1hdGNoIAorXCZcLVd1bmRlY2xhcmVkXC1zZWxlY3RvclxmUgorLklQICJcZklMYW5ndWFnZSBJbmRlcGVuZGVudCBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiTGFuZ3VhZ2UgSW5kZXBlbmRlbnQgT3B0aW9ucyIKK1wmXGZCXC1mbWVzc2FnZVwtbGVuZ3RoPVxmUlxmSW5cZlIgIAorXCZcZkJcLWZkaWFnbm9zdGljc1wtc2hvd1wtbG9jYXRpb249XGZSW1xmQm9uY2VcZlJ8XGZCZXZlcnktbGluZVxmUl0gIAorXCZcZkJcLWZub1wtZGlhZ25vc3RpY3NcLXNob3dcLW9wdGlvbiBcLWZub1wtZGlhZ25vc3RpY3NcLXNob3dcLWNhcmV0XGZSCisuSVAgIlxmSVdhcm5pbmcgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIldhcm5pbmcgT3B0aW9ucyIKK1wmXGZCXC1mc3ludGF4XC1vbmx5ICBcLWZtYXhcLWVycm9ycz1cZlJcZkluXGZSICBcZkJcLVdwZWRhbnRpYyAKK1wmXC1wZWRhbnRpY1wtZXJyb3JzIAorXCZcLXcgIFwtV2V4dHJhICBcLVdhbGwgIFwtV2FkZHJlc3MgIFwtV2FnZ3JlZ2F0ZVwtcmV0dXJuICAKK1wmXC1XYWdncmVzc2l2ZVwtbG9vcFwtb3B0aW1pemF0aW9ucyBcLVdhcnJheVwtYm91bmRzIAorXCZcLVdub1wtYXR0cmlidXRlcyBcLVdub1wtYnVpbHRpblwtbWFjcm9cLXJlZGVmaW5lZCAKK1wmXC1XYysrXC1jb21wYXQgXC1XYysrMTFcLWNvbXBhdCBcLVdjYXN0XC1hbGlnbiAgXC1XY2FzdFwtcXVhbCAgCitcJlwtV2NoYXJcLXN1YnNjcmlwdHMgXC1XY2xvYmJlcmVkICBcLVdjb21tZW50IAorXCZcLVdjb252ZXJzaW9uICBcLVdjb3ZlcmFnZVwtbWlzbWF0Y2ggIFwtV25vXC1jcHAgIFwtV25vXC1kZXByZWNhdGVkICAKK1wmXC1Xbm9cLWRlcHJlY2F0ZWRcLWRlY2xhcmF0aW9ucyBcLVdkaXNhYmxlZFwtb3B0aW1pemF0aW9uICAKK1wmXC1Xbm9cLWRpdlwtYnlcLXplcm8gXC1XZG91YmxlXC1wcm9tb3Rpb24gXC1XZW1wdHlcLWJvZHkgIFwtV2VudW1cLWNvbXBhcmUgCitcJlwtV25vXC1lbmRpZlwtbGFiZWxzIFwtV2Vycm9yICBcLVdlcnJvcj0qIAorXCZcLVdmYXRhbFwtZXJyb3JzICBcLVdmbG9hdFwtZXF1YWwgIFwtV2Zvcm1hdCAgXC1XZm9ybWF0PTIgCitcJlwtV25vXC1mb3JtYXRcLWNvbnRhaW5zXC1udWwgXC1Xbm9cLWZvcm1hdFwtZXh0cmFcLWFyZ3MgXC1XZm9ybWF0XC1ub25saXRlcmFsIAorXCZcLVdmb3JtYXRcLXNlY3VyaXR5ICBcLVdmb3JtYXRcLXkyayAKK1wmXC1XZnJhbWVcLWxhcmdlclwtdGhhbj1cZlJcZklsZW5cZlIgXGZCXC1Xbm9cLWZyZWVcLW5vbmhlYXBcLW9iamVjdCBcLVdqdW1wXC1taXNzZXNcLWluaXQgCitcJlwtV2lnbm9yZWRcLXF1YWxpZmllcnMgCitcJlwtV2ltcGxpY2l0ICBcLVdpbXBsaWNpdFwtZnVuY3Rpb25cLWRlY2xhcmF0aW9uICBcLVdpbXBsaWNpdFwtaW50IAorXCZcLVdpbml0XC1zZWxmICBcLVdpbmxpbmUgXC1XbWF5YmVcLXVuaW5pdGlhbGl6ZWQgCitcJlwtV25vXC1pbnRcLXRvXC1wb2ludGVyXC1jYXN0IFwtV25vXC1pbnZhbGlkXC1vZmZzZXRvZiAKK1wmXC1XaW52YWxpZFwtcGNoIFwtV2xhcmdlclwtdGhhbj1cZlJcZklsZW5cZlIgIFxmQlwtV3Vuc2FmZVwtbG9vcFwtb3B0aW1pemF0aW9ucyAKK1wmXC1XbG9naWNhbFwtb3AgXC1XbG9uZ1wtbG9uZyAKK1wmXC1XbWFpbiBcLVdtYXliZVwtdW5pbml0aWFsaXplZCBcLVdtaXNzaW5nXC1icmFjZXMgIFwtV21pc3NpbmdcLWZpZWxkXC1pbml0aWFsaXplcnMgCitcJlwtV21pc3NpbmdcLWluY2x1ZGVcLWRpcnMgCitcJlwtV25vXC1tdWRmbGFwIAorXCZcLVdub1wtbXVsdGljaGFyICBcLVdub25udWxsICBcLVdub1wtb3ZlcmZsb3cgCitcJlwtV292ZXJsZW5ndGhcLXN0cmluZ3MgIFwtV3BhY2tlZCAgXC1XcGFja2VkXC1iaXRmaWVsZFwtY29tcGF0ICBcLVdwYWRkZWQgCitcJlwtV3BhcmVudGhlc2VzICBcLVdwZWRhbnRpY1wtbXNcLWZvcm1hdCBcLVdub1wtcGVkYW50aWNcLW1zXC1mb3JtYXQgCitcJlwtV3BvaW50ZXJcLWFyaXRoICBcLVdub1wtcG9pbnRlclwtdG9cLWludFwtY2FzdCAKK1wmXC1XcmVkdW5kYW50XC1kZWNscyAgXC1Xbm9cLXJldHVyblwtbG9jYWxcLWFkZHIgCitcJlwtV3JldHVyblwtdHlwZSAgXC1Xc2VxdWVuY2VcLXBvaW50ICBcLVdzaGFkb3cgCitcJlwtV3NpZ25cLWNvbXBhcmUgIFwtV3NpZ25cLWNvbnZlcnNpb24gIFwtV3NpemVvZlwtcG9pbnRlclwtbWVtYWNjZXNzIAorXCZcLVdzdGFja1wtcHJvdGVjdG9yIFwtV3N0YWNrXC11c2FnZT1cZlJcZklsZW5cZlIgXGZCXC1Xc3RyaWN0XC1hbGlhc2luZyAKK1wmXC1Xc3RyaWN0XC1hbGlhc2luZz1uICBcLVdzdHJpY3RcLW92ZXJmbG93IFwtV3N0cmljdFwtb3ZlcmZsb3c9XGZSXGZJblxmUiAKK1wmXGZCXC1Xc3VnZ2VzdFwtYXR0cmlidXRlPVxmUltcZkJwdXJlXGZSfFxmQmNvbnN0XGZSfFxmQm5vcmV0dXJuXGZSfFxmQmZvcm1hdFxmUl0gCitcJlxmQlwtV21pc3NpbmdcLWZvcm1hdFwtYXR0cmlidXRlIAorXCZcLVdzd2l0Y2ggIFwtV3N3aXRjaFwtZGVmYXVsdCAgXC1Xc3dpdGNoXC1lbnVtIFwtV3N5bmNcLW5hbmQgCitcJlwtV3N5c3RlbVwtaGVhZGVycyAgXC1XdHJhbXBvbGluZXMgIFwtV3RyaWdyYXBocyAgXC1XdHlwZVwtbGltaXRzICBcLVd1bmRlZiAKK1wmXC1XdW5pbml0aWFsaXplZCAgXC1XdW5rbm93blwtcHJhZ21hcyAgXC1Xbm9cLXByYWdtYXMgCitcJlwtV3Vuc3VmZml4ZWRcLWZsb2F0XC1jb25zdGFudHMgIFwtV3VudXNlZCAgXC1XdW51c2VkXC1mdW5jdGlvbiAKK1wmXC1XdW51c2VkXC1sYWJlbCAgXC1XdW51c2VkXC1sb2NhbFwtdHlwZWRlZnMgXC1XdW51c2VkXC1wYXJhbWV0ZXIgCitcJlwtV25vXC11bnVzZWRcLXJlc3VsdCBcLVd1bnVzZWRcLXZhbHVlICBcLVd1bnVzZWRcLXZhcmlhYmxlIAorXCZcLVd1bnVzZWRcLWJ1dFwtc2V0XC1wYXJhbWV0ZXIgXC1XdW51c2VkXC1idXRcLXNldFwtdmFyaWFibGUgCitcJlwtV3VzZWxlc3NcLWNhc3QgXC1XdmFyaWFkaWNcLW1hY3JvcyBcLVd2ZWN0b3JcLW9wZXJhdGlvblwtcGVyZm9ybWFuY2UgCitcJlwtV3ZsYSBcLVd2b2xhdGlsZVwtcmVnaXN0ZXJcLXZhciAgXC1Xd3JpdGVcLXN0cmluZ3MgXC1XemVyb1wtYXNcLW51bGxcLXBvaW50ZXJcLWNvbnN0YW50XGZSCisuSVAgIlxmSUMgYW5kIE9iamVjdGl2ZS1DLW9ubHkgV2FybmluZyBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiQyBhbmQgT2JqZWN0aXZlLUMtb25seSBXYXJuaW5nIE9wdGlvbnMiCitcJlxmQlwtV2JhZFwtZnVuY3Rpb25cLWNhc3QgIFwtV21pc3NpbmdcLWRlY2xhcmF0aW9ucyAKK1wmXC1XbWlzc2luZ1wtcGFyYW1ldGVyXC10eXBlICBcLVdtaXNzaW5nXC1wcm90b3R5cGVzICBcLVduZXN0ZWRcLWV4dGVybnMgCitcJlwtV29sZFwtc3R5bGVcLWRlY2xhcmF0aW9uICBcLVdvbGRcLXN0eWxlXC1kZWZpbml0aW9uIAorXCZcLVdzdHJpY3RcLXByb3RvdHlwZXMgIFwtV3RyYWRpdGlvbmFsICBcLVd0cmFkaXRpb25hbFwtY29udmVyc2lvbiAKK1wmXC1XZGVjbGFyYXRpb25cLWFmdGVyXC1zdGF0ZW1lbnQgXC1XcG9pbnRlclwtc2lnblxmUgorLklQICJcZklEZWJ1Z2dpbmcgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkRlYnVnZ2luZyBPcHRpb25zIgorXCZcZkJcLWRcZlJcZklsZXR0ZXJzXGZSICBcZkJcLWR1bXBzcGVjcyAgXC1kdW1wbWFjaGluZSAgXC1kdW1wdmVyc2lvbiAKK1wmXC1mc2FuaXRpemU9XGZSXGZJc3R5bGVcZlIgCitcJlxmQlwtZmRiZ1wtY250XC1saXN0IFwtZmRiZ1wtY250PVxmUlxmSWNvdW50ZXItdmFsdWUtbGlzdFxmUiAKK1wmXGZCXC1mZGlzYWJsZVwtaXBhXC1cZlJcZklwYXNzX25hbWVcZlIgCitcJlxmQlwtZmRpc2FibGVcLXJ0bFwtXGZSXGZJcGFzc19uYW1lXGZSIAorXCZcZkJcLWZkaXNhYmxlXC1ydGxcLVxmUlxmSXBhc3MtbmFtZVxmUlxmQj1cZlJcZklyYW5nZS1saXN0XGZSIAorXCZcZkJcLWZkaXNhYmxlXC10cmVlXC1cZlJcZklwYXNzX25hbWVcZlIgCitcJlxmQlwtZmRpc2FibGVcLXRyZWVcLVxmUlxmSXBhc3MtbmFtZVxmUlxmQj1cZlJcZklyYW5nZS1saXN0XGZSIAorXCZcZkJcLWZkdW1wXC1ub2FkZHIgXC1mZHVtcFwtdW5udW1iZXJlZCBcLWZkdW1wXC11bm51bWJlcmVkXC1saW5rcyAKK1wmXC1mZHVtcFwtdHJhbnNsYXRpb25cLXVuaXRcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtY2xhc3NcLWhpZXJhcmNoeVxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC1pcGFcLWFsbCBcLWZkdW1wXC1pcGFcLWNncmFwaCBcLWZkdW1wXC1pcGFcLWlubGluZSAKK1wmXC1mZHVtcFwtcGFzc2VzIAorXCZcLWZkdW1wXC1zdGF0aXN0aWNzIAorXCZcLWZkdW1wXC10cmVlXC1hbGwgCitcJlwtZmR1bXBcLXRyZWVcLW9yaWdpbmFsXGZSW1xmQlwtXGZSXGZJblxmUl0gIAorXCZcZkJcLWZkdW1wXC10cmVlXC1vcHRpbWl6ZWRcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtY2ZnIFwtZmR1bXBcLXRyZWVcLWFsaWFzIAorXCZcLWZkdW1wXC10cmVlXC1jaCAKK1wmXC1mZHVtcFwtdHJlZVwtc3NhXGZSW1xmQlwtXGZSXGZJblxmUl0gXGZCXC1mZHVtcFwtdHJlZVwtcHJlXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLWNjcFxmUltcZkJcLVxmUlxmSW5cZlJdIFxmQlwtZmR1bXBcLXRyZWVcLWRjZVxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC1naW1wbGVcZlJbXGZCXC1yYXdcZlJdIFxmQlwtZmR1bXBcLXRyZWVcLW11ZGZsYXBcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtZG9tXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLWRzZVxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC1waGlwcm9wXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLXBoaW9wdFxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC1mb3J3cHJvcFxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZkdW1wXC10cmVlXC1jb3B5cmVuYW1lXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLW5ydiBcLWZkdW1wXC10cmVlXC12ZWN0IAorXCZcLWZkdW1wXC10cmVlXC1zaW5rIAorXCZcLWZkdW1wXC10cmVlXC1zcmFcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtZm9yd3Byb3BcZlJbXGZCXC1cZlJcZkluXGZSXSAKK1wmXGZCXC1mZHVtcFwtdHJlZVwtZnJlXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLXRyZWVcLXZycFxmUltcZkJcLVxmUlxmSW5cZlJdIAorXCZcZkJcLWZ0cmVlXC12ZWN0b3JpemVyXC12ZXJib3NlPVxmUlxmSW5cZlIgCitcJlxmQlwtZmR1bXBcLXRyZWVcLXN0b3JlY2NwXGZSW1xmQlwtXGZSXGZJblxmUl0gCitcJlxmQlwtZmR1bXBcLWZpbmFsXC1pbnNucz1cZlJcZklmaWxlXGZSIAorXCZcZkJcLWZjb21wYXJlXC1kZWJ1Z1xmUltcZkI9XGZSXGZJb3B0c1xmUl0gIFxmQlwtZmNvbXBhcmVcLWRlYnVnXC1zZWNvbmQgCitcJlwtZmVsaW1pbmF0ZVwtZHdhcmYyXC1kdXBzIFwtZm5vXC1lbGltaW5hdGVcLXVudXNlZFwtZGVidWdcLXR5cGVzIAorXCZcLWZlbGltaW5hdGVcLXVudXNlZFwtZGVidWdcLXN5bWJvbHMgXC1mZW1pdFwtY2xhc3NcLWRlYnVnXC1hbHdheXMgCitcJlwtZmVuYWJsZVwtXGZSXGZJa2luZFxmUlxmQlwtXGZSXGZJcGFzc1xmUiAKK1wmXGZCXC1mZW5hYmxlXC1cZlJcZklraW5kXGZSXGZCXC1cZlJcZklwYXNzXGZSXGZCPVxmUlxmSXJhbmdlLWxpc3RcZlIgCitcJlxmQlwtZmRlYnVnXC10eXBlc1wtc2VjdGlvbiBcLWZtZW1cLXJlcG9ydFwtd3BhIAorXCZcLWZtZW1cLXJlcG9ydCBcLWZwcmVcLWlwYVwtbWVtXC1yZXBvcnQgXC1mcG9zdFwtaXBhXC1tZW1cLXJlcG9ydCBcLWZwcm9maWxlXC1hcmNzIAorXCZcLWZvcHRcLWluZm8gCitcJlwtZm9wdFwtaW5mb1wtXGZSXGZJb3B0aW9uc1xmUltcZkI9XGZSXGZJZmlsZVxmUl0gCitcJlxmQlwtZnJhbmRvbVwtc2VlZD1cZlJcZklzdHJpbmdcZlIgXGZCXC1mc2NoZWRcLXZlcmJvc2U9XGZSXGZJblxmUiAKK1wmXGZCXC1mc2VsXC1zY2hlZFwtdmVyYm9zZSBcLWZzZWxcLXNjaGVkXC1kdW1wXC1jZmcgXC1mc2VsXC1zY2hlZFwtcGlwZWxpbmluZ1wtdmVyYm9zZSAKK1wmXC1mc3RhY2tcLXVzYWdlICBcLWZ0ZXN0XC1jb3ZlcmFnZSAgXC1mdGltZVwtcmVwb3J0IFwtZnZhclwtdHJhY2tpbmcgCitcJlwtZnZhclwtdHJhY2tpbmdcLWFzc2lnbm1lbnRzICBcLWZ2YXJcLXRyYWNraW5nXC1hc3NpZ25tZW50c1wtdG9nZ2xlIAorXCZcLWcgIFwtZ1xmUlxmSWxldmVsXGZSICBcZkJcLWd0b2dnbGUgIFwtZ2NvZmYgIFwtZ2R3YXJmXC1cZlJcZkl2ZXJzaW9uXGZSIAorXCZcZkJcLWdnZGIgIFwtZ3JlY29yZFwtZ2NjXC1zd2l0Y2hlcyAgXC1nbm9cLXJlY29yZFwtZ2NjXC1zd2l0Y2hlcyAKK1wmXC1nc3RhYnMgIFwtZ3N0YWJzKyAgXC1nc3RyaWN0XC1kd2FyZiAgXC1nbm9cLXN0cmljdFwtZHdhcmYgCitcJlwtZ3ZtcyAgXC1neGNvZmYgIFwtZ3hjb2ZmKyAKK1wmXC1mbm9cLW1lcmdlXC1kZWJ1Z1wtc3RyaW5ncyBcLWZub1wtZHdhcmYyXC1jZmlcLWFzbSAKK1wmXC1mZGVidWdcLXByZWZpeFwtbWFwPVxmUlxmSW9sZFxmUlxmQj1cZlJcZkluZXdcZlIgCitcJlxmQlwtZmVtaXRcLXN0cnVjdFwtZGVidWdcLWJhc2Vvbmx5IFwtZmVtaXRcLXN0cnVjdFwtZGVidWdcLXJlZHVjZWQgCitcJlwtZmVtaXRcLXN0cnVjdFwtZGVidWdcLWRldGFpbGVkXGZSW1xmQj1cZlJcZklzcGVjLWxpc3RcZlJdIAorXCZcZkJcLXAgIFwtcGcgIFwtcHJpbnRcLWZpbGVcLW5hbWU9XGZSXGZJbGlicmFyeVxmUiAgXGZCXC1wcmludFwtbGliZ2NjXC1maWxlXC1uYW1lIAorXCZcLXByaW50XC1tdWx0aVwtZGlyZWN0b3J5ICBcLXByaW50XC1tdWx0aVwtbGliICBcLXByaW50XC1tdWx0aVwtb3NcLWRpcmVjdG9yeSAKK1wmXC1wcmludFwtcHJvZ1wtbmFtZT1cZlJcZklwcm9ncmFtXGZSICBcZkJcLXByaW50XC1zZWFyY2hcLWRpcnMgIFwtUSAKK1wmXC1wcmludFwtc3lzcm9vdCBcLXByaW50XC1zeXNyb290XC1oZWFkZXJzXC1zdWZmaXggCitcJlwtc2F2ZVwtdGVtcHMgXC1zYXZlXC10ZW1wcz1jd2QgXC1zYXZlXC10ZW1wcz1vYmogXC10aW1lXGZSW1xmQj1cZlJcZklmaWxlXGZSXQorLklQICJcZklPcHRpbWl6YXRpb24gT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIk9wdGltaXphdGlvbiBPcHRpb25zIgorXCZcZkJcLWZhZ2dyZXNzaXZlXC1sb29wXC1vcHRpbWl6YXRpb25zIFwtZmFsaWduXC1mdW5jdGlvbnNbPVxmUlxmSW5cZlJcZkJdIAorXCZcLWZhbGlnblwtanVtcHNbPVxmUlxmSW5cZlJcZkJdIAorXCZcLWZhbGlnblwtbGFiZWxzWz1cZlJcZkluXGZSXGZCXSBcLWZhbGlnblwtbG9vcHNbPVxmUlxmSW5cZlJcZkJdIAorXCZcLWZhc3NvY2lhdGl2ZVwtbWF0aCBcLWZhdXRvXC1pbmNcLWRlYyBcLWZicmFuY2hcLXByb2JhYmlsaXRpZXMgCitcJlwtZmJyYW5jaFwtdGFyZ2V0XC1sb2FkXC1vcHRpbWl6ZSBcLWZicmFuY2hcLXRhcmdldFwtbG9hZFwtb3B0aW1pemUyIAorXCZcLWZidHJcLWJiXC1leGNsdXNpdmUgXC1mY2FsbGVyXC1zYXZlcyAKK1wmXC1mY2hlY2tcLWRhdGFcLWRlcHMgXC1mY29tYmluZVwtc3RhY2tcLWFkanVzdG1lbnRzIFwtZmNvbnNlcnZlXC1zdGFjayAKK1wmXC1mY29tcGFyZVwtZWxpbSBcLWZjcHJvcFwtcmVnaXN0ZXJzIFwtZmNyb3NzanVtcGluZyAKK1wmXC1mY3NlXC1mb2xsb3dcLWp1bXBzIFwtZmNzZVwtc2tpcFwtYmxvY2tzIFwtZmN4XC1mb3J0cmFuXC1ydWxlcyAKK1wmXC1mY3hcLWxpbWl0ZWRcLXJhbmdlIAorXCZcLWZkYXRhXC1zZWN0aW9ucyBcLWZkY2UgXC1mZGVsYXllZFwtYnJhbmNoIAorXCZcLWZkZWxldGVcLW51bGxcLXBvaW50ZXJcLWNoZWNrcyBcLWZkZXZpcnR1YWxpemUgXC1mZHNlIAorXCZcLWZlYXJseVwtaW5saW5pbmcgXC1maXBhXC1zcmEgXC1mZXhwZW5zaXZlXC1vcHRpbWl6YXRpb25zIFwtZmZhdFwtbHRvXC1vYmplY3RzIAorXCZcLWZmYXN0XC1tYXRoIFwtZmZpbml0ZVwtbWF0aFwtb25seSBcLWZmbG9hdFwtc3RvcmUgXC1mZXhjZXNzXC1wcmVjaXNpb249XGZSXGZJc3R5bGVcZlIgCitcJlxmQlwtZmZvcndhcmRcLXByb3BhZ2F0ZSBcLWZmcFwtY29udHJhY3Q9XGZSXGZJc3R5bGVcZlIgXGZCXC1mZnVuY3Rpb25cLXNlY3Rpb25zIAorXCZcLWZnY3NlIFwtZmdjc2VcLWFmdGVyXC1yZWxvYWQgXC1mZ2NzZVwtbGFzIFwtZmdjc2VcLWxtIFwtZmdyYXBoaXRlXC1pZGVudGl0eSAKK1wmXC1mZ2NzZVwtc20gXC1maG9pc3RcLWFkamFjZW50XC1sb2FkcyBcLWZpZlwtY29udmVyc2lvbiAKK1wmXC1maWZcLWNvbnZlcnNpb24yIFwtZmluZGlyZWN0XC1pbmxpbmluZyAKK1wmXC1maW5saW5lXC1mdW5jdGlvbnMgXC1maW5saW5lXC1mdW5jdGlvbnNcLWNhbGxlZFwtb25jZSBcLWZpbmxpbmVcLWxpbWl0PVxmUlxmSW5cZlIgCitcJlxmQlwtZmlubGluZVwtc21hbGxcLWZ1bmN0aW9ucyBcLWZpcGFcLWNwIFwtZmlwYVwtY3BcLWNsb25lIAorXCZcLWZpcGFcLXB0YSBcLWZpcGFcLXByb2ZpbGUgXC1maXBhXC1wdXJlXC1jb25zdCBcLWZpcGFcLXJlZmVyZW5jZSAKK1wmXC1maXJhXC1hbGdvcml0aG09XGZSXGZJYWxnb3JpdGhtXGZSIAorXCZcZkJcLWZpcmFcLXJlZ2lvbj1cZlJcZklyZWdpb25cZlIgXGZCXC1maXJhXC1ob2lzdFwtcHJlc3N1cmUgCitcJlwtZmlyYVwtbG9vcFwtcHJlc3N1cmUgXC1mbm9cLWlyYVwtc2hhcmVcLXNhdmVcLXNsb3RzIAorXCZcLWZub1wtaXJhXC1zaGFyZVwtc3BpbGxcLXNsb3RzIFwtZmlyYVwtdmVyYm9zZT1cZlJcZkluXGZSIAorXCZcZkJcLWZpdm9wdHMgXC1ma2VlcFwtaW5saW5lXC1mdW5jdGlvbnMgXC1ma2VlcFwtc3RhdGljXC1jb25zdHMgCitcJlwtZmxvb3BcLWJsb2NrIFwtZmxvb3BcLWludGVyY2hhbmdlIFwtZmxvb3BcLXN0cmlwXC1taW5lIFwtZmxvb3BcLW5lc3RcLW9wdGltaXplIAorXCZcLWZsb29wXC1wYXJhbGxlbGl6ZVwtYWxsIFwtZmx0byBcLWZsdG9cLWNvbXByZXNzaW9uXC1sZXZlbCAKK1wmXC1mbHRvXC1wYXJ0aXRpb249XGZSXGZJYWxnXGZSIFxmQlwtZmx0b1wtcmVwb3J0IFwtZm1lcmdlXC1hbGxcLWNvbnN0YW50cyAKK1wmXC1mbWVyZ2VcLWNvbnN0YW50cyBcLWZtb2R1bG9cLXNjaGVkIFwtZm1vZHVsb1wtc2NoZWRcLWFsbG93XC1yZWdtb3ZlcyAKK1wmXC1mbW92ZVwtbG9vcFwtaW52YXJpYW50cyBmbXVkZmxhcCBcLWZtdWRmbGFwaXIgXC1mbXVkZmxhcHRoIFwtZm5vXC1icmFuY2hcLWNvdW50XC1yZWcgCitcJlwtZm5vXC1kZWZhdWx0XC1pbmxpbmUgCitcJlwtZm5vXC1kZWZlclwtcG9wIFwtZm5vXC1mdW5jdGlvblwtY3NlIFwtZm5vXC1ndWVzc1wtYnJhbmNoXC1wcm9iYWJpbGl0eSAKK1wmXC1mbm9cLWlubGluZSBcLWZub1wtbWF0aFwtZXJybm8gXC1mbm9cLXBlZXBob2xlIFwtZm5vXC1wZWVwaG9sZTIgCitcJlwtZm5vXC1zY2hlZFwtaW50ZXJibG9jayBcLWZub1wtc2NoZWRcLXNwZWMgXC1mbm9cLXNpZ25lZFwtemVyb3MgCitcJlwtZm5vXC10b3BsZXZlbFwtcmVvcmRlciBcLWZub1wtdHJhcHBpbmdcLW1hdGggXC1mbm9cLXplcm9cLWluaXRpYWxpemVkXC1pblwtYnNzIAorXCZcLWZvbWl0XC1mcmFtZVwtcG9pbnRlciBcLWZvcHRpbWl6ZVwtcmVnaXN0ZXJcLW1vdmUgXC1mb3B0aW1pemVcLXNpYmxpbmdcLWNhbGxzIAorXCZcLWZwYXJ0aWFsXC1pbmxpbmluZyBcLWZwZWVsXC1sb29wcyBcLWZwcmVkaWN0aXZlXC1jb21tb25pbmcgCitcJlwtZnByZWZldGNoXC1sb29wXC1hcnJheXMgXC1mcHJvZmlsZVwtcmVwb3J0IAorXCZcLWZwcm9maWxlXC1jb3JyZWN0aW9uIFwtZnByb2ZpbGVcLWRpcj1cZlJcZklwYXRoXGZSIFxmQlwtZnByb2ZpbGVcLWdlbmVyYXRlIAorXCZcLWZwcm9maWxlXC1nZW5lcmF0ZT1cZlJcZklwYXRoXGZSIAorXCZcZkJcLWZwcm9maWxlXC11c2UgXC1mcHJvZmlsZVwtdXNlPVxmUlxmSXBhdGhcZlIgXGZCXC1mcHJvZmlsZVwtdmFsdWVzIAorXCZcLWZyZWNpcHJvY2FsXC1tYXRoIFwtZnJlZSBcLWZyZWdtb3ZlIFwtZnJlbmFtZVwtcmVnaXN0ZXJzIFwtZnJlb3JkZXJcLWJsb2NrcyAKK1wmXC1mcmVvcmRlclwtYmxvY2tzXC1hbmRcLXBhcnRpdGlvbiBcLWZyZW9yZGVyXC1mdW5jdGlvbnMgCitcJlwtZnJlcnVuXC1jc2VcLWFmdGVyXC1sb29wIFwtZnJlc2NoZWR1bGVcLW1vZHVsb1wtc2NoZWR1bGVkXC1sb29wcyAKK1wmXC1mcm91bmRpbmdcLW1hdGggXC1mc2NoZWQyXC11c2VcLXN1cGVyYmxvY2tzIFwtZnNjaGVkXC1wcmVzc3VyZSAKK1wmXC1mc2NoZWRcLXNwZWNcLWxvYWQgXC1mc2NoZWRcLXNwZWNcLWxvYWRcLWRhbmdlcm91cyAKK1wmXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zXC1kZXBbPVxmUlxmSW5cZlJcZkJdIFwtZnNjaGVkXC1zdGFsbGVkXC1pbnNuc1s9XGZSXGZJblxmUlxmQl0gCitcJlwtZnNjaGVkXC1ncm91cFwtaGV1cmlzdGljIFwtZnNjaGVkXC1jcml0aWNhbFwtcGF0aFwtaGV1cmlzdGljIAorXCZcLWZzY2hlZFwtc3BlY1wtaW5zblwtaGV1cmlzdGljIFwtZnNjaGVkXC1yYW5rXC1oZXVyaXN0aWMgCitcJlwtZnNjaGVkXC1sYXN0XC1pbnNuXC1oZXVyaXN0aWMgXC1mc2NoZWRcLWRlcFwtY291bnRcLWhldXJpc3RpYyAKK1wmXC1mc2NoZWR1bGVcLWluc25zIFwtZnNjaGVkdWxlXC1pbnNuczIgXC1mc2VjdGlvblwtYW5jaG9ycyAKK1wmXC1mc2VsZWN0aXZlXC1zY2hlZHVsaW5nIFwtZnNlbGVjdGl2ZVwtc2NoZWR1bGluZzIgCitcJlwtZnNlbFwtc2NoZWRcLXBpcGVsaW5pbmcgXC1mc2VsXC1zY2hlZFwtcGlwZWxpbmluZ1wtb3V0ZXJcLWxvb3BzIAorXCZcLWZzaHJpbmtcLXdyYXAgXC1mc2lnbmFsaW5nXC1uYW5zIFwtZnNpbmdsZVwtcHJlY2lzaW9uXC1jb25zdGFudCAKK1wmXC1mc3BsaXRcLWl2c1wtaW5cLXVucm9sbGVyIFwtZnNwbGl0XC13aWRlXC10eXBlcyBcLWZzdGFja1wtcHJvdGVjdG9yIAorXCZcLWZzdGFja1wtcHJvdGVjdG9yXC1hbGwgXC1mc3RyaWN0XC1hbGlhc2luZyBcLWZzdHJpY3RcLW92ZXJmbG93IAorXCZcLWZ0aHJlYWRcLWp1bXBzIFwtZnRyYWNlciBcLWZ0cmVlXC1iaXRcLWNjcCAKK1wmXC1mdHJlZVwtYnVpbHRpblwtY2FsbFwtZGNlIFwtZnRyZWVcLWNjcCBcLWZ0cmVlXC1jaCAKK1wmXC1mdHJlZVwtY29hbGVzY2VcLWlubGluZVwtdmFycyBcLWZ0cmVlXC1jb2FsZXNjZVwtdmFycyBcLWZ0cmVlXC1jb3B5XC1wcm9wIAorXCZcLWZ0cmVlXC1jb3B5cmVuYW1lIFwtZnRyZWVcLWRjZSBcLWZ0cmVlXC1kb21pbmF0b3JcLW9wdHMgXC1mdHJlZVwtZHNlIAorXCZcLWZ0cmVlXC1mb3J3cHJvcCBcLWZ0cmVlXC1mcmUgXC1mdHJlZVwtbG9vcFwtaWZcLWNvbnZlcnQgCitcJlwtZnRyZWVcLWxvb3BcLWlmXC1jb252ZXJ0XC1zdG9yZXMgXC1mdHJlZVwtbG9vcFwtaW0gCitcJlwtZnRyZWVcLXBoaXByb3AgXC1mdHJlZVwtbG9vcFwtZGlzdHJpYnV0aW9uIFwtZnRyZWVcLWxvb3BcLWRpc3RyaWJ1dGVcLXBhdHRlcm5zIAorXCZcLWZ0cmVlXC1sb29wXC1pdmNhbm9uIFwtZnRyZWVcLWxvb3BcLWxpbmVhciBcLWZ0cmVlXC1sb29wXC1vcHRpbWl6ZSAKK1wmXC1mdHJlZVwtcGFyYWxsZWxpemVcLWxvb3BzPVxmUlxmSW5cZlIgXGZCXC1mdHJlZVwtcHJlIFwtZnRyZWVcLXBhcnRpYWxcLXByZSBcLWZ0cmVlXC1wdGEgCitcJlwtZnRyZWVcLXJlYXNzb2MgXC1mdHJlZVwtc2luayBcLWZ0cmVlXC1zbHNyIFwtZnRyZWVcLXNyYSAKK1wmXC1mdHJlZVwtc3dpdGNoXC1jb252ZXJzaW9uIFwtZnRyZWVcLXRhaWxcLW1lcmdlIAorXCZcLWZ0cmVlXC10ZXIgXC1mdHJlZVwtdmVjdFwtbG9vcFwtdmVyc2lvbiBcLWZ0cmVlXC12ZWN0b3JpemUgXC1mdHJlZVwtdnJwIAorXCZcLWZ1bml0XC1hdFwtYVwtdGltZSBcLWZ1bnJvbGxcLWFsbFwtbG9vcHMgXC1mdW5yb2xsXC1sb29wcyAKK1wmXC1mdW5zYWZlXC1sb29wXC1vcHRpbWl6YXRpb25zIFwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9ucyBcLWZ1bnN3aXRjaFwtbG9vcHMgCitcJlwtZnZhcmlhYmxlXC1leHBhbnNpb25cLWluXC11bnJvbGxlciBcLWZ2ZWN0XC1jb3N0XC1tb2RlbCBcLWZ2cHQgXC1md2ViIAorXCZcLWZ3aG9sZVwtcHJvZ3JhbSBcLWZ3cGEgXC1mdXNlXC1sZD1cZlJcZklsaW5rZXJcZlIgXGZCXC1mdXNlXC1saW5rZXJcLXBsdWdpbiAKK1wmXC1cLXBhcmFtXGZSIFxmSW5hbWVcZlJcZkI9XGZSXGZJdmFsdWVcZlIKK1wmXGZCXC1PICBcLU8wICBcLU8xICBcLU8yICBcLU8zICBcLU9zIFwtT2Zhc3QgXC1PZ1xmUgorLklQICJcZklQcmVwcm9jZXNzb3IgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIlByZXByb2Nlc3NvciBPcHRpb25zIgorXCZcZkJcLUFcZlJcZklxdWVzdGlvblxmUlxmQj1cZlJcZklhbnN3ZXJcZlIgCitcJlxmQlwtQVwtXGZSXGZJcXVlc3Rpb25cZlJbXGZCPVxmUlxmSWFuc3dlclxmUl0gCitcJlxmQlwtQyAgXC1kRCAgXC1kSSAgXC1kTSAgXC1kTiAKK1wmXC1EXGZSXGZJbWFjcm9cZlJbXGZCPVxmUlxmSWRlZm5cZlJdICBcZkJcLUUgIFwtSCAKK1wmXC1pZGlyYWZ0ZXJcZlIgXGZJZGlyXGZSIAorXCZcZkJcLWluY2x1ZGVcZlIgXGZJZmlsZVxmUiAgXGZCXC1pbWFjcm9zXGZSIFxmSWZpbGVcZlIgCitcJlxmQlwtaXByZWZpeFxmUiBcZklmaWxlXGZSICBcZkJcLWl3aXRocHJlZml4XGZSIFxmSWRpclxmUiAKK1wmXGZCXC1pd2l0aHByZWZpeGJlZm9yZVxmUiBcZklkaXJcZlIgIFxmQlwtaXN5c3RlbVxmUiBcZklkaXJcZlIgCitcJlxmQlwtaW11bHRpbGliXGZSIFxmSWRpclxmUiBcZkJcLWlzeXNyb290XGZSIFxmSWRpclxmUiAKK1wmXGZCXC1NICBcLU1NICBcLU1GICBcLU1HICBcLU1QICBcLU1RICBcLU1UICBcLW5vc3RkaW5jICAKK1wmXC1QICBcLWZkZWJ1Z1wtY3BwIFwtZnRyYWNrXC1tYWNyb1wtZXhwYW5zaW9uIFwtZndvcmtpbmdcLWRpcmVjdG9yeSAKK1wmXC1yZW1hcCBcLXRyaWdyYXBocyAgXC11bmRlZiAgXC1VXGZSXGZJbWFjcm9cZlIgIAorXCZcZkJcLVdwLFxmUlxmSW9wdGlvblxmUiBcZkJcLVhwcmVwcm9jZXNzb3JcZlIgXGZJb3B0aW9uXGZSIFxmQlwtbm9cLWludGVncmF0ZWRcLWNwcFxmUgorLklQICJcZklBc3NlbWJsZXIgT3B0aW9uXGZSIiA0CisuSVggSXRlbSAiQXNzZW1ibGVyIE9wdGlvbiIKK1wmXGZCXC1XYSxcZlJcZklvcHRpb25cZlIgIFxmQlwtWGFzc2VtYmxlclxmUiBcZklvcHRpb25cZlIKKy5JUCAiXGZJTGlua2VyIE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJMaW5rZXIgT3B0aW9ucyIKK1wmXGZJb2JqZWN0LWZpbGUtbmFtZVxmUiAgXGZCXC1sXGZSXGZJbGlicmFyeVxmUiAKK1wmXGZCXC1ub3N0YXJ0ZmlsZXMgIFwtbm9kZWZhdWx0bGlicyAgXC1ub3N0ZGxpYiBcLXBpZSBcLXJkeW5hbWljIAorXCZcLXMgIFwtc3RhdGljIFwtc3RhdGljXC1saWJnY2MgXC1zdGF0aWNcLWxpYnN0ZGMrKyAKK1wmXC1zdGF0aWNcLWxpYmFzYW4gXC1zdGF0aWNcLWxpYnRzYW4gCitcJlwtc2hhcmVkIFwtc2hhcmVkXC1saWJnY2MgIFwtc3ltYm9saWMgCitcJlwtVFxmUiBcZklzY3JpcHRcZlIgIFxmQlwtV2wsXGZSXGZJb3B0aW9uXGZSICBcZkJcLVhsaW5rZXJcZlIgXGZJb3B0aW9uXGZSIAorXCZcZkJcLXVcZlIgXGZJc3ltYm9sXGZSCisuSVAgIlxmSURpcmVjdG9yeSBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiRGlyZWN0b3J5IE9wdGlvbnMiCitcJlxmQlwtQlxmUlxmSXByZWZpeFxmUiBcZkJcLUlcZlJcZklkaXJcZlIgXGZCXC1pcGx1Z2luZGlyPVxmUlxmSWRpclxmUiAKK1wmXGZCXC1pcXVvdGVcZlJcZklkaXJcZlIgXGZCXC1MXGZSXGZJZGlyXGZSIFxmQlwtc3BlY3M9XGZSXGZJZmlsZVxmUiBcZkJcLUlcLSAKK1wmXC1cLXN5c3Jvb3Q9XGZSXGZJZGlyXGZSIFxmQlwtXC1ub1wtc3lzcm9vdFwtc3VmZml4XGZSCisuSVAgIlxmSU1hY2hpbmUgRGVwZW5kZW50IE9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJNYWNoaW5lIERlcGVuZGVudCBPcHRpb25zIgorXCZcZklBQXJjaDY0IE9wdGlvbnNcZlIKK1wmXGZCXC1tYmlnXC1lbmRpYW4gIFwtbWxpdHRsZVwtZW5kaWFuIAorXCZcLW1nZW5lcmFsXC1yZWdzXC1vbmx5IAorXCZcLW1jbW9kZWw9dGlueSAgXC1tY21vZGVsPXNtYWxsICBcLW1jbW9kZWw9bGFyZ2UgCitcJlwtbXN0cmljdFwtYWxpZ24gCitcJlwtbW9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyICBcLW1ub1wtb21pdFwtbGVhZlwtZnJhbWVcLXBvaW50ZXIgCitcJlwtbXRsc1wtZGlhbGVjdD1kZXNjICBcLW10bHNcLWRpYWxlY3Q9dHJhZGl0aW9uYWwgCitcJlwtbWFyY2g9XGZSXGZJbmFtZVxmUiAgXGZCXC1tY3B1PVxmUlxmSW5hbWVcZlIgIFxmQlwtbXR1bmU9XGZSXGZJbmFtZVxmUgorLlNwCitcJlxmSUFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnNcZlIKK1wmXGZCXC1taGFsZlwtcmVnXC1maWxlIFwtbXByZWZlclwtc2hvcnRcLWluc25cLXJlZ3MgCitcJlwtbWJyYW5jaFwtY29zdD1cZlJcZkludW1cZlIgXGZCXC1tY21vdmUgXC1tbm9wcz1cZlJcZkludW1cZlIgXGZCXC1tc29mdFwtY21wc2YgCitcJlwtbXNwbGl0XC1sb2hpIFwtbXBvc3RcLWluYyBcLW1wb3N0XC1tb2RpZnkgXC1tc3RhY2tcLW9mZnNldD1cZlJcZkludW1cZlIgCitcJlxmQlwtbXJvdW5kXC1uZWFyZXN0IFwtbWxvbmdcLWNhbGxzIFwtbXNob3J0XC1jYWxscyBcLW1zbWFsbDE2IAorXCZcLW1mcFwtbW9kZT1cZlJcZkltb2RlXGZSIFxmQlwtbXZlY3RcLWRvdWJsZSBcLW1heFwtdmVjdFwtYWxpZ249XGZSXGZJbnVtXGZSIAorXCZcZkJcLW1zcGxpdFwtdmVjbW92ZVwtZWFybHkgXC1tMXJlZ1wtXGZSXGZJcmVnXGZSCisuU3AKK1wmXGZJXHMtMUFSTVxzMCBPcHRpb25zXGZSCitcJlxmQlwtbWFwY3NcLWZyYW1lICBcLW1ub1wtYXBjc1wtZnJhbWUgCitcJlwtbWFiaT1cZlJcZkluYW1lXGZSIAorXCZcZkJcLW1hcGNzXC1zdGFja1wtY2hlY2sgIFwtbW5vXC1hcGNzXC1zdGFja1wtY2hlY2sgCitcJlwtbWFwY3NcLWZsb2F0ICBcLW1ub1wtYXBjc1wtZmxvYXQgCitcJlwtbWFwY3NcLXJlZW50cmFudCAgXC1tbm9cLWFwY3NcLXJlZW50cmFudCAKK1wmXC1tc2NoZWRcLXByb2xvZyAgXC1tbm9cLXNjaGVkXC1wcm9sb2cgCitcJlwtbWxpdHRsZVwtZW5kaWFuICBcLW1iaWdcLWVuZGlhbiAgXC1td29yZHNcLWxpdHRsZVwtZW5kaWFuIAorXCZcLW1mbG9hdFwtYWJpPVxmUlxmSW5hbWVcZlIgCitcJlxmQlwtbWZwMTZcLWZvcm1hdD1cZlJcZkluYW1lXGZSCitcJlxmQlwtbXRodW1iXC1pbnRlcndvcmsgIFwtbW5vXC10aHVtYlwtaW50ZXJ3b3JrIAorXCZcLW1jcHU9XGZSXGZJbmFtZVxmUiAgXGZCXC1tYXJjaD1cZlJcZkluYW1lXGZSICBcZkJcLW1mcHU9XGZSXGZJbmFtZVxmUiAgCitcJlxmQlwtbXN0cnVjdHVyZVwtc2l6ZVwtYm91bmRhcnk9XGZSXGZJblxmUiAKK1wmXGZCXC1tYWJvcnRcLW9uXC1ub3JldHVybiAKK1wmXC1tbG9uZ1wtY2FsbHMgIFwtbW5vXC1sb25nXC1jYWxscyAKK1wmXC1tc2luZ2xlXC1waWNcLWJhc2UgIFwtbW5vXC1zaW5nbGVcLXBpY1wtYmFzZSAKK1wmXC1tcGljXC1yZWdpc3Rlcj1cZlJcZklyZWdcZlIgCitcJlxmQlwtbW5vcFwtZnVuXC1kbGxpbXBvcnQgCitcJlwtbXBva2VcLWZ1bmN0aW9uXC1uYW1lIAorXCZcLW10aHVtYiAgXC1tYXJtIAorXCZcLW10cGNzXC1mcmFtZSAgXC1tdHBjc1wtbGVhZlwtZnJhbWUgCitcJlwtbWNhbGxlclwtc3VwZXJcLWludGVyd29ya2luZyAgXC1tY2FsbGVlXC1zdXBlclwtaW50ZXJ3b3JraW5nIAorXCZcLW10cD1cZlJcZkluYW1lXGZSIFxmQlwtbXRsc1wtZGlhbGVjdD1cZlJcZklkaWFsZWN0XGZSIAorXCZcZkJcLW13b3JkXC1yZWxvY2F0aW9ucyAKK1wmXC1tZml4XC1jb3J0ZXhcLW0zXC1sZHJkIAorXCZcLW11bmFsaWduZWRcLWFjY2VzcyAKK1wmXC1tbmVvblwtZm9yXC02NGJpdHMgCitcJlwtbXJlc3RyaWN0XC1pdFxmUgorLlNwCitcJlxmSVxzLTFBVlJcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1tY3U9XGZSXGZJbWN1XGZSIFxmQlwtbWFjY3VtdWxhdGVcLWFyZ3MgXC1tYnJhbmNoXC1jb3N0PVxmUlxmSWNvc3RcZlIgCitcJlxmQlwtbWNhbGxcLXByb2xvZ3VlcyBcLW1pbnQ4IFwtbW5vXC1pbnRlcnJ1cHRzIFwtbXJlbGF4IAorXCZcLW1zdHJpY3RcLVggXC1tdGlueVwtc3RhY2sgXC1XYWRkclwtc3BhY2VcLWNvbnZlcnRcZlIKKy5TcAorXCZcZklCbGFja2ZpbiBPcHRpb25zXGZSCitcJlxmQlwtbWNwdT1cZlJcZkljcHVcZlJbXGZCXC1cZlJcZklzaXJldmlzaW9uXGZSXSAKK1wmXGZCXC1tc2ltIFwtbW9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyICBcLW1ub1wtb21pdFwtbGVhZlwtZnJhbWVcLXBvaW50ZXIgCitcJlwtbXNwZWNsZFwtYW5vbWFseSAgXC1tbm9cLXNwZWNsZFwtYW5vbWFseSAgXC1tY3N5bmNcLWFub21hbHkgIFwtbW5vXC1jc3luY1wtYW5vbWFseSAKK1wmXC1tbG93XC02NGsgXC1tbm9cLWxvdzY0ayAgXC1tc3RhY2tcLWNoZWNrXC1sMSAgXC1taWRcLXNoYXJlZFwtbGlicmFyeSAKK1wmXC1tbm9cLWlkXC1zaGFyZWRcLWxpYnJhcnkgIFwtbXNoYXJlZFwtbGlicmFyeVwtaWQ9XGZSXGZJblxmUiAKK1wmXGZCXC1tbGVhZlwtaWRcLXNoYXJlZFwtbGlicmFyeSAgXC1tbm9cLWxlYWZcLWlkXC1zaGFyZWRcLWxpYnJhcnkgCitcJlwtbXNlcFwtZGF0YSAgXC1tbm9cLXNlcFwtZGF0YSAgXC1tbG9uZ1wtY2FsbHMgIFwtbW5vXC1sb25nXC1jYWxscyAKK1wmXC1tZmFzdFwtZnAgXC1taW5saW5lXC1wbHQgXC1tbXVsdGljb3JlICBcLW1jb3JlYSAgXC1tY29yZWIgIFwtbXNkcmFtIAorXCZcLW1pY3BsYlxmUgorLlNwCitcJlxmSUM2WCBPcHRpb25zXGZSCitcJlxmQlwtbWJpZ1wtZW5kaWFuICBcLW1saXR0bGVcLWVuZGlhbiBcLW1hcmNoPVxmUlxmSWNwdVxmUiAKK1wmXGZCXC1tc2ltIFwtbXNkYXRhPVxmUlxmSXNkYXRhLXR5cGVcZlIKKy5TcAorXCZcZklccy0xQ1JJU1xzMCBPcHRpb25zXGZSCitcJlxmQlwtbWNwdT1cZlJcZkljcHVcZlIgIFxmQlwtbWFyY2g9XGZSXGZJY3B1XGZSICBcZkJcLW10dW5lPVxmUlxmSWNwdVxmUiAKK1wmXGZCXC1tbWF4XC1zdGFja1wtZnJhbWU9XGZSXGZJblxmUiAgXGZCXC1tZWxpbnV4XC1zdGFja3NpemU9XGZSXGZJblxmUiAKK1wmXGZCXC1tZXRyYXg0ICBcLW1ldHJheDEwMCAgXC1tcGRlYnVnICBcLW1jY1wtaW5pdCAgXC1tbm9cLXNpZGVcLWVmZmVjdHMgCitcJlwtbXN0YWNrXC1hbGlnbiAgXC1tZGF0YVwtYWxpZ24gIFwtbWNvbnN0XC1hbGlnbiAKK1wmXC1tMzJcLWJpdCAgXC1tMTZcLWJpdCAgXC1tOFwtYml0ICBcLW1ub1wtcHJvbG9ndWVcLWVwaWxvZ3VlICBcLW1ub1wtZ290cGx0IAorXCZcLW1lbGYgIFwtbWFvdXQgIFwtbWVsaW51eCAgXC1tbGludXggIFwtc2ltICBcLXNpbTIgCitcJlwtbW11bFwtYnVnXC13b3JrYXJvdW5kICBcLW1ub1wtbXVsXC1idWdcLXdvcmthcm91bmRcZlIKKy5TcAorXCZcZklccy0xQ1IxNlxzMCBPcHRpb25zXGZSCitcJlxmQlwtbW1hYyAKK1wmXC1tY3IxNmNwbHVzIFwtbWNyMTZjIAorXCZcLW1zaW0gXC1taW50MzIgXC1tYml0XC1vcHMKK1wmXC1tZGF0YVwtbW9kZWw9XGZSXGZJbW9kZWxcZlIKKy5TcAorXCZcZklEYXJ3aW4gT3B0aW9uc1xmUgorXCZcZkJcLWFsbF9sb2FkICBcLWFsbG93YWJsZV9jbGllbnQgIFwtYXJjaCAgXC1hcmNoX2Vycm9yc19mYXRhbCAKK1wmXC1hcmNoX29ubHkgIFwtYmluZF9hdF9sb2FkICBcLWJ1bmRsZSAgXC1idW5kbGVfbG9hZGVyIAorXCZcLWNsaWVudF9uYW1lICBcLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAgXC1jdXJyZW50X3ZlcnNpb24gCitcJlwtZGVhZF9zdHJpcCAKK1wmXC1kZXBlbmRlbmN5XC1maWxlICBcLWR5bGliX2ZpbGUgIFwtZHlsaW5rZXJfaW5zdGFsbF9uYW1lIAorXCZcLWR5bmFtaWMgIFwtZHluYW1pY2xpYiAgXC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgCitcJlwtZmlsZWxpc3QgIFwtZmxhdF9uYW1lc3BhY2UgIFwtZm9yY2VfY3B1c3VidHlwZV9BTEwgCitcJlwtZm9yY2VfZmxhdF9uYW1lc3BhY2UgIFwtaGVhZGVycGFkX21heF9pbnN0YWxsX25hbWVzIAorXCZcLWlmcmFtZXdvcmsgCitcJlwtaW1hZ2VfYmFzZSAgXC1pbml0ICBcLWluc3RhbGxfbmFtZSAgXC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAKK1wmXC1tdWx0aV9tb2R1bGUgIFwtbXVsdGlwbHlfZGVmaW5lZCAgXC1tdWx0aXBseV9kZWZpbmVkX3VudXNlZCAKK1wmXC1ub2FsbF9sb2FkICAgXC1ub19kZWFkX3N0cmlwX2luaXRzX2FuZF90ZXJtcyAKK1wmXC1ub2ZpeHByZWJpbmRpbmcgXC1ub211bHRpZGVmcyAgXC1ub3ByZWJpbmQgIFwtbm9zZWdsaW5rZWRpdCAKK1wmXC1wYWdlemVyb19zaXplICBcLXByZWJpbmQgIFwtcHJlYmluZF9hbGxfdHdvbGV2ZWxfbW9kdWxlcyAKK1wmXC1wcml2YXRlX2J1bmRsZSAgXC1yZWFkX29ubHlfcmVsb2NzICBcLXNlY3RhbGlnbiAKK1wmXC1zZWN0b2JqZWN0c3ltYm9scyAgXC13aHlsb2FkICBcLXNlZzFhZGRyIAorXCZcLXNlY3RjcmVhdGUgIFwtc2VjdG9iamVjdHN5bWJvbHMgIFwtc2VjdG9yZGVyIAorXCZcLXNlZ2FkZHIgXC1zZWdzX3JlYWRfb25seV9hZGRyIFwtc2Vnc19yZWFkX3dyaXRlX2FkZHIgCitcJlwtc2VnX2FkZHJfdGFibGUgIFwtc2VnX2FkZHJfdGFibGVfZmlsZW5hbWUgIFwtc2VnbGlua2VkaXQgCitcJlwtc2VncHJvdCAgXC1zZWdzX3JlYWRfb25seV9hZGRyICBcLXNlZ3NfcmVhZF93cml0ZV9hZGRyIAorXCZcLXNpbmdsZV9tb2R1bGUgIFwtc3RhdGljICBcLXN1Yl9saWJyYXJ5ICBcLXN1Yl91bWJyZWxsYSAKK1wmXC10d29sZXZlbF9uYW1lc3BhY2UgIFwtdW1icmVsbGEgIFwtdW5kZWZpbmVkIAorXCZcLXVuZXhwb3J0ZWRfc3ltYm9sc19saXN0ICBcLXdlYWtfcmVmZXJlbmNlX21pc21hdGNoZXMgCitcJlwtd2hhdHNsb2FkZWQgXC1GIFwtZ3VzZWQgXC1nZnVsbCBcLW1tYWNvc3hcLXZlcnNpb25cLW1pbj1cZlJcZkl2ZXJzaW9uXGZSIAorXCZcZkJcLW1rZXJuZWwgXC1tb25lXC1ieXRlXC1ib29sXGZSCisuU3AKK1wmXGZJXHMtMURFQ1xzMCBBbHBoYSBPcHRpb25zXGZSCitcJlxmQlwtbW5vXC1mcFwtcmVncyAgXC1tc29mdFwtZmxvYXQgCitcJlwtbWllZWUgIFwtbWllZWVcLXdpdGhcLWluZXhhY3QgIFwtbWllZWVcLWNvbmZvcm1hbnQgCitcJlwtbWZwXC10cmFwXC1tb2RlPVxmUlxmSW1vZGVcZlIgIFxmQlwtbWZwXC1yb3VuZGluZ1wtbW9kZT1cZlJcZkltb2RlXGZSIAorXCZcZkJcLW10cmFwXC1wcmVjaXNpb249XGZSXGZJbW9kZVxmUiAgXGZCXC1tYnVpbGRcLWNvbnN0YW50cyAKK1wmXC1tY3B1PVxmUlxmSWNwdS10eXBlXGZSICBcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSIAorXCZcZkJcLW1id3ggIFwtbW1heCAgXC1tZml4ICBcLW1jaXggCitcJlwtbWZsb2F0XC12YXggIFwtbWZsb2F0XC1pZWVlIAorXCZcLW1leHBsaWNpdFwtcmVsb2NzICBcLW1zbWFsbFwtZGF0YSAgXC1tbGFyZ2VcLWRhdGEgCitcJlwtbXNtYWxsXC10ZXh0ICBcLW1sYXJnZVwtdGV4dCAKK1wmXC1tbWVtb3J5XC1sYXRlbmN5PVxmUlxmSXRpbWVcZlIKKy5TcAorXCZcZklccy0xRlIzMFxzMCBPcHRpb25zXGZSCitcJlxmQlwtbXNtYWxsXC1tb2RlbCBcLW1ub1wtbHNpbVxmUgorLlNwCitcJlxmSVxzLTFGUlZcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1ncHJcLTMyICBcLW1ncHJcLTY0ICBcLW1mcHJcLTMyICBcLW1mcHJcLTY0IAorXCZcLW1oYXJkXC1mbG9hdCAgXC1tc29mdFwtZmxvYXQgCitcJlwtbWFsbG9jXC1jYyAgXC1tZml4ZWRcLWNjICBcLW1kd29yZCAgXC1tbm9cLWR3b3JkIAorXCZcLW1kb3VibGUgIFwtbW5vXC1kb3VibGUgCitcJlwtbW1lZGlhICBcLW1ub1wtbWVkaWEgIFwtbW11bGFkZCAgXC1tbm9cLW11bGFkZCAKK1wmXC1tZmRwaWMgIFwtbWlubGluZVwtcGx0IFwtbWdwcmVsXC1ybyAgXC1tdWx0aWxpYlwtbGlicmFyeVwtcGljIAorXCZcLW1saW5rZWRcLWZwICBcLW1sb25nXC1jYWxscyAgXC1tYWxpZ25cLWxhYmVscyAKK1wmXC1tbGlicmFyeVwtcGljICBcLW1hY2NcLTQgIFwtbWFjY1wtOCAKK1wmXC1tcGFjayAgXC1tbm9cLXBhY2sgIFwtbW5vXC1lZmxhZ3MgIFwtbWNvbmRcLW1vdmUgIFwtbW5vXC1jb25kXC1tb3ZlIAorXCZcLW1vcHRpbWl6ZVwtbWVtYmFyIFwtbW5vXC1vcHRpbWl6ZVwtbWVtYmFyIAorXCZcLW1zY2MgIFwtbW5vXC1zY2MgIFwtbWNvbmRcLWV4ZWMgIFwtbW5vXC1jb25kXC1leGVjIAorXCZcLW12bGl3XC1icmFuY2ggIFwtbW5vXC12bGl3XC1icmFuY2ggCitcJlwtbW11bHRpXC1jb25kXC1leGVjICBcLW1ub1wtbXVsdGlcLWNvbmRcLWV4ZWMgIFwtbW5lc3RlZFwtY29uZFwtZXhlYyAKK1wmXC1tbm9cLW5lc3RlZFwtY29uZFwtZXhlYyAgXC1tdG9tY2F0XC1zdGF0cyAKK1wmXC1tVExTIFwtbXRscyAKK1wmXC1tY3B1PVxmUlxmSWNwdVxmUgorLlNwCitcJlxmSUdOVS9MaW51eCBPcHRpb25zXGZSCitcJlxmQlwtbWdsaWJjIFwtbXVjbGliYyBcLW1iaW9uaWMgXC1tYW5kcm9pZCAKK1wmXC10bm9cLWFuZHJvaWRcLWNjIFwtdG5vXC1hbmRyb2lkXC1sZFxmUgorLlNwCitcJlxmSUg4LzMwMCBPcHRpb25zXGZSCitcJlxmQlwtbXJlbGF4ICBcLW1oICBcLW1zICBcLW1uICBcLW1leHIgXC1tbm9cLWV4ciAgXC1taW50MzIgIFwtbWFsaWduXC0zMDBcZlIKKy5TcAorXCZcZklccy0xSFBQQVxzMCBPcHRpb25zXGZSCitcJlxmQlwtbWFyY2g9XGZSXGZJYXJjaGl0ZWN0dXJlLXR5cGVcZlIgCitcJlxmQlwtbWJpZ1wtc3dpdGNoICBcLW1kaXNhYmxlXC1mcHJlZ3MgIFwtbWRpc2FibGVcLWluZGV4aW5nIAorXCZcLW1mYXN0XC1pbmRpcmVjdFwtY2FsbHMgIFwtbWdhcyAgXC1tZ251XC1sZCAgIFwtbWhwXC1sZCAKK1wmXC1tZml4ZWRcLXJhbmdlPVxmUlxmSXJlZ2lzdGVyLXJhbmdlXGZSIAorXCZcZkJcLW1qdW1wXC1pblwtZGVsYXkgXC1tbGlua2VyXC1vcHQgXC1tbG9uZ1wtY2FsbHMgCitcJlwtbWxvbmdcLWxvYWRcLXN0b3JlICBcLW1ub1wtYmlnXC1zd2l0Y2ggIFwtbW5vXC1kaXNhYmxlXC1mcHJlZ3MgCitcJlwtbW5vXC1kaXNhYmxlXC1pbmRleGluZyAgXC1tbm9cLWZhc3RcLWluZGlyZWN0XC1jYWxscyAgXC1tbm9cLWdhcyAKK1wmXC1tbm9cLWp1bXBcLWluXC1kZWxheSAgXC1tbm9cLWxvbmdcLWxvYWRcLXN0b3JlIAorXCZcLW1ub1wtcG9ydGFibGVcLXJ1bnRpbWUgIFwtbW5vXC1zb2Z0XC1mbG9hdCAKK1wmXC1tbm9cLXNwYWNlXC1yZWdzICBcLW1zb2Z0XC1mbG9hdCAgXC1tcGFcLXJpc2NcLTFcLTAgCitcJlwtbXBhXC1yaXNjXC0xXC0xICBcLW1wYVwtcmlzY1wtMlwtMCAgXC1tcG9ydGFibGVcLXJ1bnRpbWUgCitcJlwtbXNjaGVkdWxlPVxmUlxmSWNwdS10eXBlXGZSICBcZkJcLW1zcGFjZVwtcmVncyAgXC1tc2lvICBcLW13c2lvIAorXCZcLW11bml4PVxmUlxmSXVuaXgtc3RkXGZSICBcZkJcLW5vbGliZGxkICBcLXN0YXRpYyAgXC10aHJlYWRzXGZSCisuU3AKK1wmXGZJaTM4NiBhbmQgeDg2XC02NCBPcHRpb25zXGZSCitcJlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIgIFxmQlwtbWFyY2g9XGZSXGZJY3B1LXR5cGVcZlIgCitcJlxmQlwtbWZwbWF0aD1cZlJcZkl1bml0XGZSIAorXCZcZkJcLW1hc209XGZSXGZJZGlhbGVjdFxmUiAgXGZCXC1tbm9cLWZhbmN5XC1tYXRoXC0zODcgCitcJlwtbW5vXC1mcFwtcmV0XC1pblwtMzg3ICBcLW1zb2Z0XC1mbG9hdCAKK1wmXC1tbm9cLXdpZGVcLW11bHRpcGx5ICBcLW1ydGQgIFwtbWFsaWduXC1kb3VibGUgCitcJlwtbXByZWZlcnJlZFwtc3RhY2tcLWJvdW5kYXJ5PVxmUlxmSW51bVxmUiAKK1wmXGZCXC1taW5jb21pbmdcLXN0YWNrXC1ib3VuZGFyeT1cZlJcZkludW1cZlIgCitcJlxmQlwtbWNsZCBcLW1jeDE2IFwtbXNhaGYgXC1tbW92YmUgXC1tY3JjMzIgCitcJlwtbXJlY2lwIFwtbXJlY2lwPVxmUlxmSW9wdFxmUiAKK1wmXGZCXC1tdnplcm91cHBlciBcLW1wcmVmZXJcLWF2eDEyOCAKK1wmXC1tbW14ICBcLW1zc2UgIFwtbXNzZTIgXC1tc3NlMyBcLW1zc3NlMyBcLW1zc2U0LjEgXC1tc3NlNC4yIFwtbXNzZTQgXC1tYXZ4IAorXCZcLW1hdngyIFwtbWFlcyBcLW1wY2xtdWwgXC1tZnNnc2Jhc2UgXC1tcmRybmQgXC1tZjE2YyBcLW1mbWEgCitcJlwtbXNzZTRhIFwtbTNkbm93IFwtbXBvcGNudCBcLW1hYm0gXC1tYm1pIFwtbXRibSBcLW1mbWE0IFwtbXhvcCBcLW1semNudCAKK1wmXC1tYm1pMiBcLW1ydG0gXC1tbHdwIFwtbXRocmVhZHMgCitcJlwtbW5vXC1hbGlnblwtc3RyaW5nb3BzICBcLW1pbmxpbmVcLWFsbFwtc3RyaW5nb3BzIAorXCZcLW1pbmxpbmVcLXN0cmluZ29wc1wtZHluYW1pY2FsbHkgXC1tc3RyaW5nb3BcLXN0cmF0ZWd5PVxmUlxmSWFsZ1xmUiAKK1wmXGZCXC1tcHVzaFwtYXJncyAgXC1tYWNjdW11bGF0ZVwtb3V0Z29pbmdcLWFyZ3MgIFwtbTEyOGJpdFwtbG9uZ1wtZG91YmxlIAorXCZcLW05NmJpdFwtbG9uZ1wtZG91YmxlIFwtbWxvbmdcLWRvdWJsZVwtNjQgXC1tbG9uZ1wtZG91YmxlXC04MCAKK1wmXC1tcmVncGFybT1cZlJcZkludW1cZlIgIFxmQlwtbXNzZXJlZ3Bhcm0gCitcJlwtbXZlY2xpYmFiaT1cZlJcZkl0eXBlXGZSIFxmQlwtbXZlY3Q4XC1yZXRcLWluXC1tZW0gCitcJlwtbXBjMzIgXC1tcGM2NCBcLW1wYzgwIFwtbXN0YWNrcmVhbGlnbiAKK1wmXC1tb21pdFwtbGVhZlwtZnJhbWVcLXBvaW50ZXIgIFwtbW5vXC1yZWRcLXpvbmUgXC1tbm9cLXRsc1wtZGlyZWN0XC1zZWdcLXJlZnMgCitcJlwtbWNtb2RlbD1cZlJcZkljb2RlLW1vZGVsXGZSIFxmQlwtbWFiaT1cZlJcZkluYW1lXGZSIFxmQlwtbWFkZHJlc3NcLW1vZGU9XGZSXGZJbW9kZVxmUiAKK1wmXGZCXC1tMzIgXC1tNjQgXC1teDMyIFwtbWxhcmdlXC1kYXRhXC10aHJlc2hvbGQ9XGZSXGZJbnVtXGZSIAorXCZcZkJcLW1zc2UyYXZ4IFwtbWZlbnRyeSBcLW04Yml0XC1pZGl2IAorXCZcLW1hdngyNTZcLXNwbGl0XC11bmFsaWduZWRcLWxvYWQgXC1tYXZ4MjU2XC1zcGxpdFwtdW5hbGlnbmVkXC1zdG9yZVxmUgorLlNwCitcJlxmSWkzODYgYW5kIHg4NlwtNjQgV2luZG93cyBPcHRpb25zXGZSCitcJlxmQlwtbWNvbnNvbGUgXC1tY3lnd2luIFwtbW5vXC1jeWd3aW4gXC1tZGxsIAorXCZcLW1ub3BcLWZ1blwtZGxsaW1wb3J0IFwtbXRocmVhZCAKK1wmXC1tdW5pY29kZSBcLW13aW4zMiBcLW13aW5kb3dzIFwtZm5vXC1zZXRcLXN0YWNrXC1leGVjdXRhYmxlXGZSCisuU3AKK1wmXGZJXHMtMUlBXC02NFxzMCBPcHRpb25zXGZSCitcJlxmQlwtbWJpZ1wtZW5kaWFuICBcLW1saXR0bGVcLWVuZGlhbiAgXC1tZ251XC1hcyAgXC1tZ251XC1sZCAgXC1tbm9cLXBpYyAKK1wmXC1tdm9sYXRpbGVcLWFzbVwtc3RvcCAgXC1tcmVnaXN0ZXJcLW5hbWVzICBcLW1zZGF0YSBcLW1ub1wtc2RhdGEgCitcJlwtbWNvbnN0YW50XC1ncCAgXC1tYXV0b1wtcGljICBcLW1mdXNlZFwtbWFkZCAKK1wmXC1taW5saW5lXC1mbG9hdFwtZGl2aWRlXC1taW5cLWxhdGVuY3kgCitcJlwtbWlubGluZVwtZmxvYXRcLWRpdmlkZVwtbWF4XC10aHJvdWdocHV0IAorXCZcLW1ub1wtaW5saW5lXC1mbG9hdFwtZGl2aWRlIAorXCZcLW1pbmxpbmVcLWludFwtZGl2aWRlXC1taW5cLWxhdGVuY3kgCitcJlwtbWlubGluZVwtaW50XC1kaXZpZGVcLW1heFwtdGhyb3VnaHB1dCAgCitcJlwtbW5vXC1pbmxpbmVcLWludFwtZGl2aWRlIAorXCZcLW1pbmxpbmVcLXNxcnRcLW1pblwtbGF0ZW5jeSBcLW1pbmxpbmVcLXNxcnRcLW1heFwtdGhyb3VnaHB1dCAKK1wmXC1tbm9cLWlubGluZVwtc3FydCAKK1wmXC1tZHdhcmYyXC1hc20gXC1tZWFybHlcLXN0b3BcLWJpdHMgCitcJlwtbWZpeGVkXC1yYW5nZT1cZlJcZklyZWdpc3Rlci1yYW5nZVxmUiBcZkJcLW10bHNcLXNpemU9XGZSXGZJdGxzLXNpemVcZlIgCitcJlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIgXGZCXC1taWxwMzIgXC1tbHA2NCAKK1wmXC1tc2NoZWRcLWJyXC1kYXRhXC1zcGVjIFwtbXNjaGVkXC1hclwtZGF0YVwtc3BlYyBcLW1zY2hlZFwtY29udHJvbFwtc3BlYyAKK1wmXC1tc2NoZWRcLWJyXC1pblwtZGF0YVwtc3BlYyBcLW1zY2hlZFwtYXJcLWluXC1kYXRhXC1zcGVjIFwtbXNjaGVkXC1pblwtY29udHJvbFwtc3BlYyAKK1wmXC1tc2NoZWRcLXNwZWNcLWxkYyBcLW1zY2hlZFwtc3BlY1wtY29udHJvbFwtbGRjIAorXCZcLW1zY2hlZFwtcHJlZmVyXC1ub25cLWRhdGFcLXNwZWNcLWluc25zIFwtbXNjaGVkXC1wcmVmZXJcLW5vblwtY29udHJvbFwtc3BlY1wtaW5zbnMgCitcJlwtbXNjaGVkXC1zdG9wXC1iaXRzXC1hZnRlclwtZXZlcnlcLWN5Y2xlIFwtbXNjaGVkXC1jb3VudFwtc3BlY1wtaW5cLWNyaXRpY2FsXC1wYXRoIAorXCZcLW1zZWxcLXNjaGVkXC1kb250XC1jaGVja1wtY29udHJvbFwtc3BlYyBcLW1zY2hlZFwtZnBcLW1lbVwtZGVwc1wtemVyb1wtY29zdCAKK1wmXC1tc2NoZWRcLW1heFwtbWVtb3J5XC1pbnNuc1wtaGFyZFwtbGltaXQgXC1tc2NoZWRcLW1heFwtbWVtb3J5XC1pbnNucz1cZlJcZkltYXgtaW5zbnNcZlIKKy5TcAorXCZcZklccy0xTE0zMlxzMCBPcHRpb25zXGZSCitcJlxmQlwtbWJhcnJlbFwtc2hpZnRcLWVuYWJsZWQgXC1tZGl2aWRlXC1lbmFibGVkIFwtbW11bHRpcGx5XC1lbmFibGVkIAorXCZcLW1zaWduXC1leHRlbmRcLWVuYWJsZWQgXC1tdXNlclwtZW5hYmxlZFxmUgorLlNwCitcJlxmSU0zMlIvRCBPcHRpb25zXGZSCitcJlxmQlwtbTMycjIgXC1tMzJyeCBcLW0zMnIgCitcJlwtbWRlYnVnIAorXCZcLW1hbGlnblwtbG9vcHMgXC1tbm9cLWFsaWduXC1sb29wcyAKK1wmXC1taXNzdWVcLXJhdGU9XGZSXGZJbnVtYmVyXGZSIAorXCZcZkJcLW1icmFuY2hcLWNvc3Q9XGZSXGZJbnVtYmVyXGZSIAorXCZcZkJcLW1tb2RlbD1cZlJcZkljb2RlLXNpemUtbW9kZWwtdHlwZVxmUiAKK1wmXGZCXC1tc2RhdGE9XGZSXGZJc2RhdGEtdHlwZVxmUiAKK1wmXGZCXC1tbm9cLWZsdXNoXC1mdW5jIFwtbWZsdXNoXC1mdW5jPVxmUlxmSW5hbWVcZlIgCitcJlxmQlwtbW5vXC1mbHVzaFwtdHJhcCBcLW1mbHVzaFwtdHJhcD1cZlJcZkludW1iZXJcZlIgCitcJlxmQlwtR1xmUiBcZkludW1cZlIKKy5TcAorXCZcZklNMzJDIE9wdGlvbnNcZlIKK1wmXGZCXC1tY3B1PVxmUlxmSWNwdVxmUiBcZkJcLW1zaW0gXC1tZW1yZWdzPVxmUlxmSW51bWJlclxmUgorLlNwCitcJlxmSU02ODB4MCBPcHRpb25zXGZSCitcJlxmQlwtbWFyY2g9XGZSXGZJYXJjaFxmUiAgXGZCXC1tY3B1PVxmUlxmSWNwdVxmUiAgXGZCXC1tdHVuZT1cZlJcZkl0dW5lXGZSCitcJlxmQlwtbTY4MDAwICBcLW02ODAyMCAgXC1tNjgwMjBcLTQwICBcLW02ODAyMFwtNjAgIFwtbTY4MDMwICBcLW02ODA0MCAKK1wmXC1tNjgwNjAgIFwtbWNwdTMyICBcLW01MjAwICBcLW01MjA2ZSAgXC1tNTI4eCAgXC1tNTMwNyAgXC1tNTQwNyAKK1wmXC1tY2Z2NGUgIFwtbWJpdGZpZWxkICBcLW1ub1wtYml0ZmllbGQgIFwtbWM2ODAwMCAgXC1tYzY4MDIwIAorXCZcLW1ub2JpdGZpZWxkICBcLW1ydGQgIFwtbW5vXC1ydGQgIFwtbWRpdiAgXC1tbm9cLWRpdiAgXC1tc2hvcnQgCitcJlwtbW5vXC1zaG9ydCAgXC1taGFyZFwtZmxvYXQgIFwtbTY4ODgxICBcLW1zb2Z0XC1mbG9hdCAgXC1tcGNyZWwgCitcJlwtbWFsaWduXC1pbnQgIFwtbXN0cmljdFwtYWxpZ24gIFwtbXNlcFwtZGF0YSAgXC1tbm9cLXNlcFwtZGF0YSAKK1wmXC1tc2hhcmVkXC1saWJyYXJ5XC1pZD1uICBcLW1pZFwtc2hhcmVkXC1saWJyYXJ5ICBcLW1ub1wtaWRcLXNoYXJlZFwtbGlicmFyeSAKK1wmXC1teGdvdCBcLW1ub1wteGdvdFxmUgorLlNwCitcJlxmSU1Db3JlIE9wdGlvbnNcZlIKK1wmXGZCXC1taGFyZGxpdCAgXC1tbm9cLWhhcmRsaXQgIFwtbWRpdiAgXC1tbm9cLWRpdiAgXC1tcmVsYXhcLWltbWVkaWF0ZXMgCitcJlwtbW5vXC1yZWxheFwtaW1tZWRpYXRlcyAgXC1td2lkZVwtYml0ZmllbGRzICBcLW1ub1wtd2lkZVwtYml0ZmllbGRzIAorXCZcLW00Ynl0ZVwtZnVuY3Rpb25zICBcLW1ub1wtNGJ5dGVcLWZ1bmN0aW9ucyAgXC1tY2FsbGdyYXBoXC1kYXRhIAorXCZcLW1ub1wtY2FsbGdyYXBoXC1kYXRhICBcLW1zbG93XC1ieXRlcyAgXC1tbm9cLXNsb3dcLWJ5dGVzICBcLW1ub1wtbHNpbSAKK1wmXC1tbGl0dGxlXC1lbmRpYW4gIFwtbWJpZ1wtZW5kaWFuICBcLW0yMTAgIFwtbTM0MCAgXC1tc3RhY2tcLWluY3JlbWVudFxmUgorLlNwCitcJlxmSU1lUCBPcHRpb25zXGZSCitcJlxmQlwtbWFic2RpZmYgXC1tYWxsXC1vcHRzIFwtbWF2ZXJhZ2UgXC1tYmFzZWQ9XGZSXGZJblxmUiBcZkJcLW1iaXRvcHMgCitcJlwtbWM9XGZSXGZJblxmUiBcZkJcLW1jbGlwIFwtbWNvbmZpZz1cZlJcZkluYW1lXGZSIFxmQlwtbWNvcCBcLW1jb3AzMiBcLW1jb3A2NCBcLW1pdmMyIAorXCZcLW1kYyBcLW1kaXYgXC1tZWIgXC1tZWwgXC1taW9cLXZvbGF0aWxlIFwtbWwgXC1tbGVhZHogXC1tbSBcLW1taW5tYXggCitcJlwtbW11bHQgXC1tbm9cLW9wdHMgXC1tcmVwZWF0IFwtbXMgXC1tc2F0dXIgXC1tc2RyYW0gXC1tc2ltIFwtbXNpbW5vdmVjIFwtbXRmIAorXCZcLW10aW55PVxmUlxmSW5cZlIKKy5TcAorXCZcZklNaWNyb0JsYXplIE9wdGlvbnNcZlIKK1wmXGZCXC1tc29mdFwtZmxvYXQgXC1taGFyZFwtZmxvYXQgXC1tc21hbGxcLWRpdmlkZXMgXC1tY3B1PVxmUlxmSWNwdVxmUiAKK1wmXGZCXC1tbWVtY3B5IFwtbXhsXC1zb2Z0XC1tdWwgXC1teGxcLXNvZnRcLWRpdiBcLW14bFwtYmFycmVsXC1zaGlmdCAKK1wmXC1teGxcLXBhdHRlcm5cLWNvbXBhcmUgXC1teGxcLXN0YWNrXC1jaGVjayBcLW14bFwtZ3BcLW9wdCBcLW1ub1wtY2xlYXJic3MgCitcJlwtbXhsXC1tdWx0aXBseVwtaGlnaCBcLW14bFwtZmxvYXRcLWNvbnZlcnQgXC1teGxcLWZsb2F0XC1zcXJ0IAorXCZcLW1iaWdcLWVuZGlhbiBcLW1saXR0bGVcLWVuZGlhbiBcLW14bFwtcmVvcmRlciBcLW14bFwtbW9kZVwtXGZSXGZJYXBwLW1vZGVsXGZSCisuU3AKK1wmXGZJXHMtMU1JUFNcczAgT3B0aW9uc1xmUgorXCZcZkJcLUVMICBcLUVCICBcLW1hcmNoPVxmUlxmSWFyY2hcZlIgIFxmQlwtbXR1bmU9XGZSXGZJYXJjaFxmUiAKK1wmXGZCXC1taXBzMSAgXC1taXBzMiAgXC1taXBzMyAgXC1taXBzNCAgXC1taXBzMzIgIFwtbWlwczMycjIgCitcJlwtbWlwczY0ICBcLW1pcHM2NHIyIAorXCZcLW1pcHMxNiAgXC1tbm9cLW1pcHMxNiAgXC1tZmxpcFwtbWlwczE2IAorXCZcLW1pbnRlcmxpbmtcLW1pcHMxNiAgXC1tbm9cLWludGVybGlua1wtbWlwczE2IAorXCZcLW1hYmk9XGZSXGZJYWJpXGZSICBcZkJcLW1hYmljYWxscyAgXC1tbm9cLWFiaWNhbGxzIAorXCZcLW1zaGFyZWQgIFwtbW5vXC1zaGFyZWQgIFwtbXBsdCAgXC1tbm9cLXBsdCAgXC1teGdvdCAgXC1tbm9cLXhnb3QgCitcJlwtbWdwMzIgIFwtbWdwNjQgIFwtbWZwMzIgIFwtbWZwNjQgIFwtbWhhcmRcLWZsb2F0ICBcLW1zb2Z0XC1mbG9hdCAKK1wmXC1tbm9cLWZsb2F0IFwtbXNpbmdsZVwtZmxvYXQgIFwtbWRvdWJsZVwtZmxvYXQgIAorXCZcLW1kc3AgIFwtbW5vXC1kc3AgIFwtbWRzcHIyICBcLW1ub1wtZHNwcjIgCitcJlwtbW1jdSBcLW1tbm9cLW1jdSAKK1wmXC1tZnB1PVxmUlxmSWZwdS10eXBlXGZSIAorXCZcZkJcLW1zbWFydG1pcHMgIFwtbW5vXC1zbWFydG1pcHMgCitcJlwtbXBhaXJlZFwtc2luZ2xlICBcLW1ub1wtcGFpcmVkXC1zaW5nbGUgIFwtbWRteCAgXC1tbm9cLW1kbXggCitcJlwtbWlwczNkICBcLW1ub1wtbWlwczNkICBcLW1tdCAgXC1tbm9cLW10ICBcLW1sbHNjICBcLW1ub1wtbGxzYyAKK1wmXC1tbG9uZzY0ICBcLW1sb25nMzIgIFwtbXN5bTMyICBcLW1ub1wtc3ltMzIgCitcJlwtR1xmUlxmSW51bVxmUiAgXGZCXC1tbG9jYWxcLXNkYXRhICBcLW1ub1wtbG9jYWxcLXNkYXRhIAorXCZcLW1leHRlcm5cLXNkYXRhICBcLW1ub1wtZXh0ZXJuXC1zZGF0YSAgXC1tZ3BvcHQgIFwtbW5vXC1nb3B0IAorXCZcLW1lbWJlZGRlZFwtZGF0YSAgXC1tbm9cLWVtYmVkZGVkXC1kYXRhIAorXCZcLW11bmluaXRcLWNvbnN0XC1pblwtcm9kYXRhICBcLW1ub1wtdW5pbml0XC1jb25zdFwtaW5cLXJvZGF0YSAKK1wmXC1tY29kZVwtcmVhZGFibGU9XGZSXGZJc2V0dGluZ1xmUiAKK1wmXGZCXC1tc3BsaXRcLWFkZHJlc3NlcyAgXC1tbm9cLXNwbGl0XC1hZGRyZXNzZXMgCitcJlwtbWV4cGxpY2l0XC1yZWxvY3MgIFwtbW5vXC1leHBsaWNpdFwtcmVsb2NzIAorXCZcLW1jaGVja1wtemVyb1wtZGl2aXNpb24gIFwtbW5vXC1jaGVja1wtemVyb1wtZGl2aXNpb24gCitcJlwtbWRpdmlkZVwtdHJhcHMgIFwtbWRpdmlkZVwtYnJlYWtzIAorXCZcLW1tZW1jcHkgIFwtbW5vXC1tZW1jcHkgIFwtbWxvbmdcLWNhbGxzICBcLW1ub1wtbG9uZ1wtY2FsbHMgCitcJlwtbW1hZCAgXC1tbm9cLW1hZCAgXC1tZnVzZWRcLW1hZGQgIFwtbW5vXC1mdXNlZFwtbWFkZCAgXC1ub2NwcCAKK1wmXC1tZml4XC0yNGsgXC1tbm9cLWZpeFwtMjRrIAorXCZcLW1maXhcLXI0MDAwICBcLW1ub1wtZml4XC1yNDAwMCAgXC1tZml4XC1yNDQwMCAgXC1tbm9cLWZpeFwtcjQ0MDAgCitcJlwtbWZpeFwtcjEwMDAwIFwtbW5vXC1maXhcLXIxMDAwMCAgXC1tZml4XC12cjQxMjAgIFwtbW5vXC1maXhcLXZyNDEyMCAKK1wmXC1tZml4XC12cjQxMzAgIFwtbW5vXC1maXhcLXZyNDEzMCAgXC1tZml4XC1zYjEgIFwtbW5vXC1maXhcLXNiMSAKK1wmXC1tZmx1c2hcLWZ1bmM9XGZSXGZJZnVuY1xmUiAgXGZCXC1tbm9cLWZsdXNoXC1mdW5jIAorXCZcLW1icmFuY2hcLWNvc3Q9XGZSXGZJbnVtXGZSICBcZkJcLW1icmFuY2hcLWxpa2VseSAgXC1tbm9cLWJyYW5jaFwtbGlrZWx5IAorXCZcLW1mcFwtZXhjZXB0aW9ucyBcLW1ub1wtZnBcLWV4Y2VwdGlvbnMgCitcJlwtbXZyNDEzMFwtYWxpZ24gXC1tbm9cLXZyNDEzMFwtYWxpZ24gXC1tc3luY2kgXC1tbm9cLXN5bmNpIAorXCZcLW1yZWxheFwtcGljXC1jYWxscyBcLW1ub1wtcmVsYXhcLXBpY1wtY2FsbHMgXC1tbWNvdW50XC1yYVwtYWRkcmVzc1xmUgorLlNwCitcJlxmSVxzLTFNTUlYXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1tbGliZnVuY3MgIFwtbW5vXC1saWJmdW5jcyAgXC1tZXBzaWxvbiAgXC1tbm9cLWVwc2lsb24gIFwtbWFiaT1nbnUgCitcJlwtbWFiaT1tbWl4d2FyZSAgXC1temVyb1wtZXh0ZW5kICBcLW1rbnV0aGRpdiAgXC1tdG9wbGV2ZWxcLXN5bWJvbHMgCitcJlwtbWVsZiAgXC1tYnJhbmNoXC1wcmVkaWN0ICBcLW1ub1wtYnJhbmNoXC1wcmVkaWN0ICBcLW1iYXNlXC1hZGRyZXNzZXMgCitcJlwtbW5vXC1iYXNlXC1hZGRyZXNzZXMgIFwtbXNpbmdsZVwtZXhpdCAgXC1tbm9cLXNpbmdsZVwtZXhpdFxmUgorLlNwCitcJlxmSVxzLTFNTjEwMzAwXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1tbXVsdFwtYnVnICBcLW1ub1wtbXVsdFwtYnVnIAorXCZcLW1ub1wtYW0zMyBcLW1hbTMzIFwtbWFtMzNcLTIgXC1tYW0zNCAKK1wmXC1tdHVuZT1cZlJcZkljcHUtdHlwZVxmUiAKK1wmXGZCXC1tcmV0dXJuXC1wb2ludGVyXC1vblwtZDAgCitcJlwtbW5vXC1jcnQwICBcLW1yZWxheCBcLW1saXcgXC1tc2V0bGJcZlIKKy5TcAorXCZcZklNb3hpZSBPcHRpb25zXGZSCitcJlxmQlwtbWViIFwtbWVsIFwtbW5vXC1jcnQwXGZSCisuU3AKK1wmXGZJXHMtMVBEUFwtMTFcczAgT3B0aW9uc1xmUgorXCZcZkJcLW1mcHUgIFwtbXNvZnRcLWZsb2F0ICBcLW1hYzAgIFwtbW5vXC1hYzAgIFwtbTQwICBcLW00NSAgXC1tMTAgCitcJlwtbWJjb3B5ICBcLW1iY29weVwtYnVpbHRpbiAgXC1taW50MzIgIFwtbW5vXC1pbnQxNiAKK1wmXC1taW50MTYgIFwtbW5vXC1pbnQzMiAgXC1tZmxvYXQzMiAgXC1tbm9cLWZsb2F0NjQgCitcJlwtbWZsb2F0NjQgIFwtbW5vXC1mbG9hdDMyICBcLW1hYnNoaSAgXC1tbm9cLWFic2hpIAorXCZcLW1icmFuY2hcLWV4cGVuc2l2ZSAgXC1tYnJhbmNoXC1jaGVhcCAKK1wmXC1tdW5peFwtYXNtICBcLW1kZWNcLWFzbVxmUgorLlNwCitcJlxmSXBpY29DaGlwIE9wdGlvbnNcZlIKK1wmXGZCXC1tYWU9XGZSXGZJYWVfdHlwZVxmUiBcZkJcLW12bGl3XC1sb29rYWhlYWQ9XGZSXGZJTlxmUiAKK1wmXGZCXC1tc3ltYm9sXC1hc1wtYWRkcmVzcyBcLW1ub1wtaW5lZmZpY2llbnRcLXdhcm5pbmdzXGZSCisuU3AKK1wmXGZJUG93ZXJQQyBPcHRpb25zXGZSCitTZWUgXHMtMVJTLzYwMDBcczAgYW5kIFBvd2VyUEMgT3B0aW9ucy4KKy5TcAorXCZcZklccy0xUkw3OFxzMCBPcHRpb25zXGZSCitcJlxmQlwtbXNpbSBcLW1tdWw9bm9uZSBcLW1tdWw9ZzEzIFwtbW11bD1ybDc4XGZSCisuU3AKK1wmXGZJXHMtMVJTLzYwMDBcczAgYW5kIFBvd2VyUEMgT3B0aW9uc1xmUgorXCZcZkJcLW1jcHU9XGZSXGZJY3B1LXR5cGVcZlIgCitcJlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIgCitcJlxmQlwtbWNtb2RlbD1cZlJcZkljb2RlLW1vZGVsXGZSIAorXCZcZkJcLW1wb3dlcnBjNjQgCitcJlwtbWFsdGl2ZWMgIFwtbW5vXC1hbHRpdmVjIAorXCZcLW1wb3dlcnBjXC1ncG9wdCAgXC1tbm9cLXBvd2VycGNcLWdwb3B0IAorXCZcLW1wb3dlcnBjXC1nZnhvcHQgIFwtbW5vXC1wb3dlcnBjXC1nZnhvcHQgCitcJlwtbW1mY3JmICBcLW1ub1wtbWZjcmYgIFwtbXBvcGNudGIgIFwtbW5vXC1wb3BjbnRiIFwtbXBvcGNudGQgXC1tbm9cLXBvcGNudGQgCitcJlwtbWZwcm5kICBcLW1ub1wtZnBybmQgCitcJlwtbWNtcGIgXC1tbm9cLWNtcGIgXC1tbWZwZ3ByIFwtbW5vXC1tZnBncHIgXC1taGFyZFwtZGZwIFwtbW5vXC1oYXJkXC1kZnAgCitcJlwtbWZ1bGxcLXRvYyAgIFwtbW1pbmltYWxcLXRvYyAgXC1tbm9cLWZwXC1pblwtdG9jICBcLW1ub1wtc3VtXC1pblwtdG9jIAorXCZcLW02NCAgXC1tMzIgIFwtbXhsXC1jb21wYXQgIFwtbW5vXC14bFwtY29tcGF0ICBcLW1wZSAKK1wmXC1tYWxpZ25cLXBvd2VyICBcLW1hbGlnblwtbmF0dXJhbCAKK1wmXC1tc29mdFwtZmxvYXQgIFwtbWhhcmRcLWZsb2F0ICBcLW1tdWx0aXBsZSAgXC1tbm9cLW11bHRpcGxlIAorXCZcLW1zaW5nbGVcLWZsb2F0IFwtbWRvdWJsZVwtZmxvYXQgXC1tc2ltcGxlXC1mcHUgCitcJlwtbXN0cmluZyAgXC1tbm9cLXN0cmluZyAgXC1tdXBkYXRlICBcLW1ub1wtdXBkYXRlIAorXCZcLW1hdm9pZFwtaW5kZXhlZFwtYWRkcmVzc2VzICBcLW1ub1wtYXZvaWRcLWluZGV4ZWRcLWFkZHJlc3NlcyAKK1wmXC1tZnVzZWRcLW1hZGQgIFwtbW5vXC1mdXNlZFwtbWFkZCAgXC1tYml0XC1hbGlnbiAgXC1tbm9cLWJpdFwtYWxpZ24gCitcJlwtbXN0cmljdFwtYWxpZ24gIFwtbW5vXC1zdHJpY3RcLWFsaWduICBcLW1yZWxvY2F0YWJsZSAKK1wmXC1tbm9cLXJlbG9jYXRhYmxlICBcLW1yZWxvY2F0YWJsZVwtbGliICBcLW1ub1wtcmVsb2NhdGFibGVcLWxpYiAKK1wmXC1tdG9jICBcLW1ub1wtdG9jICBcLW1saXR0bGUgIFwtbWxpdHRsZVwtZW5kaWFuICBcLW1iaWcgIFwtbWJpZ1wtZW5kaWFuIAorXCZcLW1keW5hbWljXC1ub1wtcGljICBcLW1hbHRpdmVjIFwtbXN3ZGl2ICBcLW1zaW5nbGVcLXBpY1wtYmFzZSAKK1wmXC1tcHJpb3JpdGl6ZVwtcmVzdHJpY3RlZFwtaW5zbnM9XGZSXGZJcHJpb3JpdHlcZlIgCitcJlxmQlwtbXNjaGVkXC1jb3N0bHlcLWRlcD1cZlJcZklkZXBlbmRlbmNlX3R5cGVcZlIgCitcJlxmQlwtbWluc2VydFwtc2NoZWRcLW5vcHM9XGZSXGZJc2NoZW1lXGZSIAorXCZcZkJcLW1jYWxsXC1zeXN2ICBcLW1jYWxsXC1uZXRic2QgCitcJlwtbWFpeFwtc3RydWN0XC1yZXR1cm4gIFwtbXN2cjRcLXN0cnVjdFwtcmV0dXJuIAorXCZcLW1hYmk9XGZSXGZJYWJpLXR5cGVcZlIgXGZCXC1tc2VjdXJlXC1wbHQgXC1tYnNzXC1wbHQgCitcJlwtbWJsb2NrXC1tb3ZlXC1pbmxpbmVcLWxpbWl0PVxmUlxmSW51bVxmUiAKK1wmXGZCXC1taXNlbCBcLW1ub1wtaXNlbCAKK1wmXC1taXNlbD15ZXMgIFwtbWlzZWw9bm8gCitcJlwtbXNwZSBcLW1ub1wtc3BlIAorXCZcLW1zcGU9eWVzICBcLW1zcGU9bm8gCitcJlwtbXBhaXJlZCAKK1wmXC1tZ2VuXC1jZWxsXC1taWNyb2NvZGUgXC1td2FyblwtY2VsbFwtbWljcm9jb2RlIAorXCZcLW12cnNhdmUgXC1tbm9cLXZyc2F2ZSAKK1wmXC1tbXVsaHcgXC1tbm9cLW11bGh3IAorXCZcLW1kbG16YiBcLW1ub1wtZGxtemIgCitcJlwtbWZsb2F0XC1ncHJzPXllcyAgXC1tZmxvYXRcLWdwcnM9bm8gXC1tZmxvYXRcLWdwcnM9c2luZ2xlIFwtbWZsb2F0XC1ncHJzPWRvdWJsZSAKK1wmXC1tcHJvdG90eXBlICBcLW1ub1wtcHJvdG90eXBlIAorXCZcLW1zaW0gIFwtbW12bWUgIFwtbWFkcyAgXC1teWVsbG93a25pZmUgIFwtbWVtYiAgXC1tc2RhdGEgCitcJlwtbXNkYXRhPVxmUlxmSW9wdFxmUiAgXGZCXC1tdnh3b3JrcyAgXC1HXGZSIFxmSW51bVxmUiAgXGZCXC1wdGhyZWFkIAorXCZcLW1yZWNpcCBcLW1yZWNpcD1cZlJcZklvcHRcZlIgXGZCXC1tbm9cLXJlY2lwIFwtbXJlY2lwXC1wcmVjaXNpb24gCitcJlwtbW5vXC1yZWNpcFwtcHJlY2lzaW9uIAorXCZcLW12ZWNsaWJhYmk9XGZSXGZJdHlwZVxmUiBcZkJcLW1mcml6IFwtbW5vXC1mcml6IAorXCZcLW1wb2ludGVyc1wtdG9cLW5lc3RlZFwtZnVuY3Rpb25zIFwtbW5vXC1wb2ludGVyc1wtdG9cLW5lc3RlZFwtZnVuY3Rpb25zIAorXCZcLW1zYXZlXC10b2NcLWluZGlyZWN0IFwtbW5vXC1zYXZlXC10b2NcLWluZGlyZWN0XGZSCisuU3AKK1wmXGZJXHMtMVJYXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1tNjRiaXRcLWRvdWJsZXMgIFwtbTMyYml0XC1kb3VibGVzICBcLWZwdSAgXC1ub2ZwdQorXCZcLW1jcHU9CitcJlwtbWJpZ1wtZW5kaWFuXC1kYXRhIFwtbWxpdHRsZVwtZW5kaWFuXC1kYXRhIAorXCZcLW1zbWFsbFwtZGF0YSAKK1wmXC1tc2ltICBcLW1ub1wtc2ltCitcJlwtbWFzMTAwXC1zeW50YXggXC1tbm9cLWFzMTAwXC1zeW50YXgKK1wmXC1tcmVsYXgKK1wmXC1tbWF4XC1jb25zdGFudFwtc2l6ZT0KK1wmXC1taW50XC1yZWdpc3Rlcj0KK1wmXC1tcGlkCitcJlwtbW5vXC13YXJuXC1tdWx0aXBsZVwtZmFzdFwtaW50ZXJydXB0cworXCZcLW1zYXZlXC1hY2NcLWluXC1pbnRlcnJ1cHRzXGZSCisuU3AKK1wmXGZJUy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uc1xmUgorXCZcZkJcLW10dW5lPVxmUlxmSWNwdS10eXBlXGZSICBcZkJcLW1hcmNoPVxmUlxmSWNwdS10eXBlXGZSIAorXCZcZkJcLW1oYXJkXC1mbG9hdCAgXC1tc29mdFwtZmxvYXQgIFwtbWhhcmRcLWRmcCBcLW1ub1wtaGFyZFwtZGZwIAorXCZcLW1sb25nXC1kb3VibGVcLTY0IFwtbWxvbmdcLWRvdWJsZVwtMTI4IAorXCZcLW1iYWNrY2hhaW4gIFwtbW5vXC1iYWNrY2hhaW4gXC1tcGFja2VkXC1zdGFjayAgXC1tbm9cLXBhY2tlZFwtc3RhY2sgCitcJlwtbXNtYWxsXC1leGVjICBcLW1ub1wtc21hbGxcLWV4ZWMgIFwtbW12Y2xlIFwtbW5vXC1tdmNsZSAKK1wmXC1tNjQgIFwtbTMxICBcLW1kZWJ1ZyAgXC1tbm9cLWRlYnVnICBcLW1lc2EgIFwtbXphcmNoIAorXCZcLW10cGZcLXRyYWNlIFwtbW5vXC10cGZcLXRyYWNlICBcLW1mdXNlZFwtbWFkZCAgXC1tbm9cLWZ1c2VkXC1tYWRkIAorXCZcLW13YXJuXC1mcmFtZXNpemUgIFwtbXdhcm5cLWR5bmFtaWNzdGFjayAgXC1tc3RhY2tcLXNpemUgXC1tc3RhY2tcLWd1YXJkXGZSCisuU3AKK1wmXGZJU2NvcmUgT3B0aW9uc1xmUgorXCZcZkJcLW1lYiBcLW1lbCAKK1wmXC1tbmh3bG9vcCAKK1wmXC1tdWxzIAorXCZcLW1tYWMgCitcJlwtbXNjb3JlNSBcLW1zY29yZTV1IFwtbXNjb3JlNyBcLW1zY29yZTdkXGZSCisuU3AKK1wmXGZJXHMtMVNIXHMwIE9wdGlvbnNcZlIKK1wmXGZCXC1tMSAgXC1tMiAgXC1tMmUgCitcJlwtbTJhXC1ub2ZwdSBcLW0yYVwtc2luZ2xlXC1vbmx5IFwtbTJhXC1zaW5nbGUgXC1tMmEgCitcJlwtbTMgIFwtbTNlIAorXCZcLW00XC1ub2ZwdSAgXC1tNFwtc2luZ2xlXC1vbmx5ICBcLW00XC1zaW5nbGUgIFwtbTQgCitcJlwtbTRhXC1ub2ZwdSBcLW00YVwtc2luZ2xlXC1vbmx5IFwtbTRhXC1zaW5nbGUgXC1tNGEgXC1tNGFsIAorXCZcLW01XC02NG1lZGlhICBcLW01XC02NG1lZGlhXC1ub2ZwdSAKK1wmXC1tNVwtMzJtZWRpYSAgXC1tNVwtMzJtZWRpYVwtbm9mcHUgCitcJlwtbTVcLWNvbXBhY3QgIFwtbTVcLWNvbXBhY3RcLW5vZnB1IAorXCZcLW1iICBcLW1sICBcLW1kYWxpZ24gIFwtbXJlbGF4IAorXCZcLW1iaWd0YWJsZSBcLW1mbW92ZCBcLW1oaXRhY2hpIFwtbXJlbmVzYXMgXC1tbm9cLXJlbmVzYXMgXC1tbm9tYWNzYXZlIAorXCZcLW1pZWVlIFwtbW5vXC1pZWVlIFwtbWJpdG9wcyAgXC1taXNpemUgIFwtbWlubGluZVwtaWNfaW52YWxpZGF0ZSBcLW1wYWRzdHJ1Y3QgCitcJlwtbXNwYWNlIFwtbXByZWZlcmdvdCAgXC1tdXNlcm1vZGUgXC1tdWx0Y29zdD1cZlJcZkludW1iZXJcZlIgXGZCXC1tZGl2PVxmUlxmSXN0cmF0ZWd5XGZSIAorXCZcZkJcLW1kaXZzaTNfbGliZnVuYz1cZlJcZkluYW1lXGZSIFxmQlwtbWZpeGVkXC1yYW5nZT1cZlJcZklyZWdpc3Rlci1yYW5nZVxmUiAKK1wmXGZCXC1taW5kZXhlZFwtYWRkcmVzc2luZyBcLW1nZXR0cmNvc3Q9XGZSXGZJbnVtYmVyXGZSIFxmQlwtbXB0XC1maXhlZCAKK1wmXC1tYWNjdW11bGF0ZVwtb3V0Z29pbmdcLWFyZ3MgXC1taW52YWxpZFwtc3ltYm9scyAKK1wmXC1tYXRvbWljXC1tb2RlbD1cZlJcZklhdG9taWMtbW9kZWxcZlIgCitcJlxmQlwtbWJyYW5jaFwtY29zdD1cZlJcZkludW1cZlIgXGZCXC1temRjYnJhbmNoIFwtbW5vXC16ZGNicmFuY2ggXC1tY2JyYW5jaGRpIFwtbWNtcGVxZGkgCitcJlwtbWZ1c2VkXC1tYWRkIFwtbW5vXC1mdXNlZFwtbWFkZCBcLW1mc2NhIFwtbW5vXC1mc2NhIFwtbWZzcnJhIFwtbW5vXC1mc3JyYSAKK1wmXC1tcHJldGVuZFwtY21vdmUgXC1tdGFzXGZSCisuU3AKK1wmXGZJU29sYXJpcyAyIE9wdGlvbnNcZlIKK1wmXGZCXC1taW1wdXJlXC10ZXh0ICBcLW1ub1wtaW1wdXJlXC10ZXh0IAorXCZcLXB0aHJlYWRzIFwtcHRocmVhZFxmUgorLlNwCitcJlxmSVxzLTFTUEFSQ1xzMCBPcHRpb25zXGZSCitcJlxmQlwtbWNwdT1cZlJcZkljcHUtdHlwZVxmUiAKK1wmXGZCXC1tdHVuZT1cZlJcZkljcHUtdHlwZVxmUiAKK1wmXGZCXC1tY21vZGVsPVxmUlxmSWNvZGUtbW9kZWxcZlIgCitcJlxmQlwtbW1lbW9yeVwtbW9kZWw9XGZSXGZJbWVtLW1vZGVsXGZSIAorXCZcZkJcLW0zMiAgXC1tNjQgIFwtbWFwcFwtcmVncyAgXC1tbm9cLWFwcFwtcmVncyAKK1wmXC1tZmFzdGVyXC1zdHJ1Y3RzICBcLW1ub1wtZmFzdGVyXC1zdHJ1Y3RzICBcLW1mbGF0ICBcLW1ub1wtZmxhdCAKK1wmXC1tZnB1ICBcLW1ub1wtZnB1ICBcLW1oYXJkXC1mbG9hdCAgXC1tc29mdFwtZmxvYXQgCitcJlwtbWhhcmRcLXF1YWRcLWZsb2F0ICBcLW1zb2Z0XC1xdWFkXC1mbG9hdCAKK1wmXC1tc3RhY2tcLWJpYXMgIFwtbW5vXC1zdGFja1wtYmlhcyAKK1wmXC1tdW5hbGlnbmVkXC1kb3VibGVzICBcLW1ub1wtdW5hbGlnbmVkXC1kb3VibGVzIAorXCZcLW12OHBsdXMgIFwtbW5vXC12OHBsdXMgIFwtbXZpcyAgXC1tbm9cLXZpcyAKK1wmXC1tdmlzMiAgXC1tbm9cLXZpczIgIFwtbXZpczMgIFwtbW5vXC12aXMzIAorXCZcLW1jYmNvbmQgXC1tbm9cLWNiY29uZCAKK1wmXC1tZm1hZiAgXC1tbm9cLWZtYWYgIFwtbXBvcGMgIFwtbW5vXC1wb3BjIAorXCZcLW1maXhcLWF0Njk3ZlxmUgorLlNwCitcJlxmSVxzLTFTUFVcczAgT3B0aW9uc1xmUgorXCZcZkJcLW13YXJuXC1yZWxvYyBcLW1lcnJvclwtcmVsb2MgCitcJlwtbXNhZmVcLWRtYSBcLW11bnNhZmVcLWRtYSAKK1wmXC1tYnJhbmNoXC1oaW50cyAKK1wmXC1tc21hbGxcLW1lbSBcLW1sYXJnZVwtbWVtIFwtbXN0ZG1haW4gCitcJlwtbWZpeGVkXC1yYW5nZT1cZlJcZklyZWdpc3Rlci1yYW5nZVxmUiAKK1wmXGZCXC1tZWEzMiBcLW1lYTY0IAorXCZcLW1hZGRyZXNzXC1zcGFjZVwtY29udmVyc2lvbiBcLW1ub1wtYWRkcmVzc1wtc3BhY2VcLWNvbnZlcnNpb24gCitcJlwtbWNhY2hlXC1zaXplPVxmUlxmSWNhY2hlLXNpemVcZlIgCitcJlxmQlwtbWF0b21pY1wtdXBkYXRlcyBcLW1ub1wtYXRvbWljXC11cGRhdGVzXGZSCisuU3AKK1wmXGZJU3lzdGVtIFYgT3B0aW9uc1xmUgorXCZcZkJcLVF5ICBcLVFuICBcLVlQLFxmUlxmSXBhdGhzXGZSICBcZkJcLVltLFxmUlxmSWRpclxmUgorLlNwCitcJlxmSVRJTEUtR3ggT3B0aW9uc1xmUgorXCZcZkJcLW1jcHU9XGZSXGZJY3B1XGZSIFxmQlwtbTMyIFwtbTY0IFwtbWNtb2RlbD1cZlJcZkljb2RlLW1vZGVsXGZSCisuU3AKK1wmXGZJVElMRVBybyBPcHRpb25zXGZSCitcJlxmQlwtbWNwdT1cZlJcZkljcHVcZlIgXGZCXC1tMzJcZlIKKy5TcAorXCZcZklWODUwIE9wdGlvbnNcZlIKK1wmXGZCXC1tbG9uZ1wtY2FsbHMgIFwtbW5vXC1sb25nXC1jYWxscyAgXC1tZXAgIFwtbW5vXC1lcCAKK1wmXC1tcHJvbG9nXC1mdW5jdGlvbiAgXC1tbm9cLXByb2xvZ1wtZnVuY3Rpb24gIFwtbXNwYWNlIAorXCZcLW10ZGE9XGZSXGZJblxmUiAgXGZCXC1tc2RhPVxmUlxmSW5cZlIgIFxmQlwtbXpkYT1cZlJcZkluXGZSIAorXCZcZkJcLW1hcHBcLXJlZ3MgIFwtbW5vXC1hcHBcLXJlZ3MgCitcJlwtbWRpc2FibGVcLWNhbGx0ICBcLW1ub1wtZGlzYWJsZVwtY2FsbHQgCitcJlwtbXY4NTBlMnYzIFwtbXY4NTBlMiBcLW12ODUwZTEgXC1tdjg1MGVzIAorXCZcLW12ODUwZSBcLW12ODUwIFwtbXY4NTBlM3Y1IAorXCZcLW1sb29wIAorXCZcLW1yZWxheCAKK1wmXC1tbG9uZ1wtanVtcHMgCitcJlwtbXNvZnRcLWZsb2F0IAorXCZcLW1oYXJkXC1mbG9hdCAKK1wmXC1tZ2NjXC1hYmkgCitcJlwtbXJoODUwXC1hYmkgCitcJlwtbWJpZ1wtc3dpdGNoXGZSCisuU3AKK1wmXGZJXHMtMVZBWFxzMCBPcHRpb25zXGZSCitcJlxmQlwtbWcgIFwtbWdudSAgXC1tdW5peFxmUgorLlNwCitcJlxmSVxzLTFWTVNcczAgT3B0aW9uc1xmUgorXCZcZkJcLW12bXNcLXJldHVyblwtY29kZXMgXC1tZGVidWdcLW1haW49XGZSXGZJcHJlZml4XGZSIFxmQlwtbW1hbGxvYzY0IAorXCZcLW1wb2ludGVyXC1zaXplPVxmUlxmSXNpemVcZlIKKy5TcAorXCZcZklWeFdvcmtzIE9wdGlvbnNcZlIKK1wmXGZCXC1tcnRwICBcLW5vblwtc3RhdGljICBcLUJzdGF0aWMgIFwtQmR5bmFtaWMgCitcJlwtWGJpbmRcLWxhenkgIFwtWGJpbmRcLW5vd1xmUgorLlNwCitcJlxmSXg4NlwtNjQgT3B0aW9uc1xmUgorU2VlIGkzODYgYW5kIHg4NlwtNjQgT3B0aW9ucy4KKy5TcAorXCZcZklYc3Rvcm15MTYgT3B0aW9uc1xmUgorXCZcZkJcLW1zaW1cZlIKKy5TcAorXCZcZklYdGVuc2EgT3B0aW9uc1xmUgorXCZcZkJcLW1jb25zdDE2IFwtbW5vXC1jb25zdDE2IAorXCZcLW1mdXNlZFwtbWFkZCAgXC1tbm9cLWZ1c2VkXC1tYWRkIAorXCZcLW1mb3JjZVwtbm9cLXBpYyAKK1wmXC1tc2VyaWFsaXplXC12b2xhdGlsZSAgXC1tbm9cLXNlcmlhbGl6ZVwtdm9sYXRpbGUgCitcJlwtbXRleHRcLXNlY3Rpb25cLWxpdGVyYWxzICBcLW1ub1wtdGV4dFwtc2VjdGlvblwtbGl0ZXJhbHMgCitcJlwtbXRhcmdldFwtYWxpZ24gIFwtbW5vXC10YXJnZXRcLWFsaWduIAorXCZcLW1sb25nY2FsbHMgIFwtbW5vXC1sb25nY2FsbHNcZlIKKy5TcAorXCZcZkl6U2VyaWVzIE9wdGlvbnNcZlIKK1NlZSBTLzM5MCBhbmQgelNlcmllcyBPcHRpb25zLgorLklQICJcZklDb2RlIEdlbmVyYXRpb24gT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkNvZGUgR2VuZXJhdGlvbiBPcHRpb25zIgorXCZcZkJcLWZjYWxsXC1zYXZlZFwtXGZSXGZJcmVnXGZSICBcZkJcLWZjYWxsXC11c2VkXC1cZlJcZklyZWdcZlIgCitcJlxmQlwtZmZpeGVkXC1cZlJcZklyZWdcZlIgIFxmQlwtZmV4Y2VwdGlvbnMgCitcJlwtZm5vblwtY2FsbFwtZXhjZXB0aW9ucyAgXC1mZGVsZXRlXC1kZWFkXC1leGNlcHRpb25zICBcLWZ1bndpbmRcLXRhYmxlcyAKK1wmXC1mYXN5bmNocm9ub3VzXC11bndpbmRcLXRhYmxlcyAKK1wmXC1maW5oaWJpdFwtc2l6ZVwtZGlyZWN0aXZlICBcLWZpbnN0cnVtZW50XC1mdW5jdGlvbnMgCitcJlwtZmluc3RydW1lbnRcLWZ1bmN0aW9uc1wtZXhjbHVkZVwtZnVuY3Rpb25cLWxpc3Q9XGZSXGZJc3ltXGZSXGZCLFxmUlxmSXN5bVxmUlxmQiwuLi4gCitcJlwtZmluc3RydW1lbnRcLWZ1bmN0aW9uc1wtZXhjbHVkZVwtZmlsZVwtbGlzdD1cZlJcZklmaWxlXGZSXGZCLFxmUlxmSWZpbGVcZlJcZkIsLi4uIAorXCZcLWZub1wtY29tbW9uICBcLWZub1wtaWRlbnQgCitcJlwtZnBjY1wtc3RydWN0XC1yZXR1cm4gIFwtZnBpYyAgXC1mUElDIFwtZnBpZSBcLWZQSUUgCitcJlwtZm5vXC1qdW1wXC10YWJsZXMgCitcJlwtZnJlY29yZFwtZ2NjXC1zd2l0Y2hlcyAKK1wmXC1mcmVnXC1zdHJ1Y3RcLXJldHVybiAgXC1mc2hvcnRcLWVudW1zIAorXCZcLWZzaG9ydFwtZG91YmxlICBcLWZzaG9ydFwtd2NoYXIgCitcJlwtZnZlcmJvc2VcLWFzbSAgXC1mcGFja1wtc3RydWN0Wz1cZlJcZkluXGZSXGZCXSAgXC1mc3RhY2tcLWNoZWNrIAorXCZcLWZzdGFja1wtbGltaXRcLXJlZ2lzdGVyPVxmUlxmSXJlZ1xmUiAgXGZCXC1mc3RhY2tcLWxpbWl0XC1zeW1ib2w9XGZSXGZJc3ltXGZSIAorXCZcZkJcLWZub1wtc3RhY2tcLWxpbWl0IFwtZnNwbGl0XC1zdGFjayAKK1wmXC1mbGVhZGluZ1wtdW5kZXJzY29yZSAgXC1mdGxzXC1tb2RlbD1cZlJcZkltb2RlbFxmUiAKK1wmXGZCXC1mc3RhY2tcLXJldXNlPVxmUlxmSXJldXNlX2xldmVsXGZSIAorXCZcZkJcLWZ0cmFwdiAgXC1md3JhcHYgIFwtZmJvdW5kc1wtY2hlY2sgCitcJlwtZnZpc2liaWxpdHkgXC1mc3RyaWN0XC12b2xhdGlsZVwtYml0ZmllbGRzIFwtZnN5bmNcLWxpYmNhbGxzXGZSCisuU1MgIk9wdGlvbnMgQ29udHJvbGxpbmcgdGhlIEtpbmQgb2YgT3V0cHV0IgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgQ29udHJvbGxpbmcgdGhlIEtpbmQgb2YgT3V0cHV0IgorQ29tcGlsYXRpb24gY2FuIGludm9sdmUgdXAgdG8gZm91ciBzdGFnZXM6IHByZXByb2Nlc3NpbmcsIGNvbXBpbGF0aW9uCitwcm9wZXIsIGFzc2VtYmx5IGFuZCBsaW5raW5nLCBhbHdheXMgaW4gdGhhdCBvcmRlci4gIFxzLTFHQ0NcczAgaXMgY2FwYWJsZSBvZgorcHJlcHJvY2Vzc2luZyBhbmQgY29tcGlsaW5nIHNldmVyYWwgZmlsZXMgZWl0aGVyIGludG8gc2V2ZXJhbAorYXNzZW1ibGVyIGlucHV0IGZpbGVzLCBvciBpbnRvIG9uZSBhc3NlbWJsZXIgaW5wdXQgZmlsZTsgdGhlbiBlYWNoCithc3NlbWJsZXIgaW5wdXQgZmlsZSBwcm9kdWNlcyBhbiBvYmplY3QgZmlsZSwgYW5kIGxpbmtpbmcgY29tYmluZXMgYWxsCit0aGUgb2JqZWN0IGZpbGVzICh0aG9zZSBuZXdseSBjb21waWxlZCwgYW5kIHRob3NlIHNwZWNpZmllZCBhcyBpbnB1dCkKK2ludG8gYW4gZXhlY3V0YWJsZSBmaWxlLgorLlBQCitGb3IgYW55IGdpdmVuIGlucHV0IGZpbGUsIHRoZSBmaWxlIG5hbWUgc3VmZml4IGRldGVybWluZXMgd2hhdCBraW5kIG9mCitjb21waWxhdGlvbiBpcyBkb25lOgorLklQICJcZklmaWxlXGZSXGZCLmNcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmMiCitDIHNvdXJjZSBjb2RlIHRoYXQgbXVzdCBiZSBwcmVwcm9jZXNzZWQuCisuSVAgIlxmSWZpbGVcZlJcZkIuaVxmUiIgNAorLklYIEl0ZW0gImZpbGUuaSIKK0Mgc291cmNlIGNvZGUgdGhhdCBzaG91bGQgbm90IGJlIHByZXByb2Nlc3NlZC4KKy5JUCAiXGZJZmlsZVxmUlxmQi5paVxmUiIgNAorLklYIEl0ZW0gImZpbGUuaWkiCitcJlwqKEMrIHNvdXJjZSBjb2RlIHRoYXQgc2hvdWxkIG5vdCBiZSBwcmVwcm9jZXNzZWQuCisuSVAgIlxmSWZpbGVcZlJcZkIubVxmUiIgNAorLklYIEl0ZW0gImZpbGUubSIKK09iamVjdGl2ZS1DIHNvdXJjZSBjb2RlLiAgTm90ZSB0aGF0IHlvdSBtdXN0IGxpbmsgd2l0aCB0aGUgXGZJbGlib2JqY1xmUgorbGlicmFyeSB0byBtYWtlIGFuIE9iamVjdGl2ZS1DIHByb2dyYW0gd29yay4KKy5JUCAiXGZJZmlsZVxmUlxmQi5taVxmUiIgNAorLklYIEl0ZW0gImZpbGUubWkiCitPYmplY3RpdmUtQyBzb3VyY2UgY29kZSB0aGF0IHNob3VsZCBub3QgYmUgcHJlcHJvY2Vzc2VkLgorLklQICJcZklmaWxlXGZSXGZCLm1tXGZSIiA0CisuSVggSXRlbSAiZmlsZS5tbSIKKy5QRCAwCisuSVAgIlxmSWZpbGVcZlJcZkIuTVxmUiIgNAorLklYIEl0ZW0gImZpbGUuTSIKKy5QRAorT2JqZWN0aXZlXC1cKihDKyBzb3VyY2UgY29kZS4gIE5vdGUgdGhhdCB5b3UgbXVzdCBsaW5rIHdpdGggdGhlIFxmSWxpYm9iamNcZlIKK2xpYnJhcnkgdG8gbWFrZSBhbiBPYmplY3RpdmVcLVwqKEMrIHByb2dyYW0gd29yay4gIE5vdGUgdGhhdCBcZkIuTVxmUiByZWZlcnMKK3RvIGEgbGl0ZXJhbCBjYXBpdGFsIE0uCisuSVAgIlxmSWZpbGVcZlJcZkIubWlpXGZSIiA0CisuSVggSXRlbSAiZmlsZS5taWkiCitPYmplY3RpdmVcLVwqKEMrIHNvdXJjZSBjb2RlIHRoYXQgc2hvdWxkIG5vdCBiZSBwcmVwcm9jZXNzZWQuCisuSVAgIlxmSWZpbGVcZlJcZkIuaFxmUiIgNAorLklYIEl0ZW0gImZpbGUuaCIKK0MsIFwqKEMrLCBPYmplY3RpdmUtQyBvciBPYmplY3RpdmVcLVwqKEMrIGhlYWRlciBmaWxlIHRvIGJlIHR1cm5lZCBpbnRvIGEKK3ByZWNvbXBpbGVkIGhlYWRlciAoZGVmYXVsdCksIG9yIEMsIFwqKEMrIGhlYWRlciBmaWxlIHRvIGJlIHR1cm5lZCBpbnRvIGFuCitBZGEgc3BlYyAodmlhIHRoZSBcZkJcLWZkdW1wXC1hZGFcLXNwZWNcZlIgc3dpdGNoKS4KKy5JUCAiXGZJZmlsZVxmUlxmQi5jY1xmUiIgNAorLklYIEl0ZW0gImZpbGUuY2MiCisuUEQgMAorLklQICJcZklmaWxlXGZSXGZCLmNwXGZSIiA0CisuSVggSXRlbSAiZmlsZS5jcCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5jeHhcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmN4eCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5jcHBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmNwcCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5DUFBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLkNQUCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5jKytcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmMrKyIKKy5JUCAiXGZJZmlsZVxmUlxmQi5DXGZSIiA0CisuSVggSXRlbSAiZmlsZS5DIgorLlBECitcJlwqKEMrIHNvdXJjZSBjb2RlIHRoYXQgbXVzdCBiZSBwcmVwcm9jZXNzZWQuICBOb3RlIHRoYXQgaW4gXGZCLmN4eFxmUiwKK3RoZSBsYXN0IHR3byBsZXR0ZXJzIG11c3QgYm90aCBiZSBsaXRlcmFsbHkgXGZCeFxmUi4gIExpa2V3aXNlLAorXCZcZkIuQ1xmUiByZWZlcnMgdG8gYSBsaXRlcmFsIGNhcGl0YWwgQy4KKy5JUCAiXGZJZmlsZVxmUlxmQi5tbVxmUiIgNAorLklYIEl0ZW0gImZpbGUubW0iCisuUEQgMAorLklQICJcZklmaWxlXGZSXGZCLk1cZlIiIDQKKy5JWCBJdGVtICJmaWxlLk0iCisuUEQKK09iamVjdGl2ZVwtXCooQysgc291cmNlIGNvZGUgdGhhdCBtdXN0IGJlIHByZXByb2Nlc3NlZC4KKy5JUCAiXGZJZmlsZVxmUlxmQi5taWlcZlIiIDQKKy5JWCBJdGVtICJmaWxlLm1paSIKK09iamVjdGl2ZVwtXCooQysgc291cmNlIGNvZGUgdGhhdCBzaG91bGQgbm90IGJlIHByZXByb2Nlc3NlZC4KKy5JUCAiXGZJZmlsZVxmUlxmQi5oaFxmUiIgNAorLklYIEl0ZW0gImZpbGUuaGgiCisuUEQgMAorLklQICJcZklmaWxlXGZSXGZCLkhcZlIiIDQKKy5JWCBJdGVtICJmaWxlLkgiCisuSVAgIlxmSWZpbGVcZlJcZkIuaHBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmhwIgorLklQICJcZklmaWxlXGZSXGZCLmh4eFxmUiIgNAorLklYIEl0ZW0gImZpbGUuaHh4IgorLklQICJcZklmaWxlXGZSXGZCLmhwcFxmUiIgNAorLklYIEl0ZW0gImZpbGUuaHBwIgorLklQICJcZklmaWxlXGZSXGZCLkhQUFxmUiIgNAorLklYIEl0ZW0gImZpbGUuSFBQIgorLklQICJcZklmaWxlXGZSXGZCLmgrK1xmUiIgNAorLklYIEl0ZW0gImZpbGUuaCsrIgorLklQICJcZklmaWxlXGZSXGZCLnRjY1xmUiIgNAorLklYIEl0ZW0gImZpbGUudGNjIgorLlBECitcJlwqKEMrIGhlYWRlciBmaWxlIHRvIGJlIHR1cm5lZCBpbnRvIGEgcHJlY29tcGlsZWQgaGVhZGVyIG9yIEFkYSBzcGVjLgorLklQICJcZklmaWxlXGZSXGZCLmZcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmYiCisuUEQgMAorLklQICJcZklmaWxlXGZSXGZCLmZvclxmUiIgNAorLklYIEl0ZW0gImZpbGUuZm9yIgorLklQICJcZklmaWxlXGZSXGZCLmZ0blxmUiIgNAorLklYIEl0ZW0gImZpbGUuZnRuIgorLlBECitGaXhlZCBmb3JtIEZvcnRyYW4gc291cmNlIGNvZGUgdGhhdCBzaG91bGQgbm90IGJlIHByZXByb2Nlc3NlZC4KKy5JUCAiXGZJZmlsZVxmUlxmQi5GXGZSIiA0CisuSVggSXRlbSAiZmlsZS5GIgorLlBEIDAKKy5JUCAiXGZJZmlsZVxmUlxmQi5GT1JcZlIiIDQKKy5JWCBJdGVtICJmaWxlLkZPUiIKKy5JUCAiXGZJZmlsZVxmUlxmQi5mcHBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmZwcCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5GUFBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLkZQUCIKKy5JUCAiXGZJZmlsZVxmUlxmQi5GVE5cZlIiIDQKKy5JWCBJdGVtICJmaWxlLkZUTiIKKy5QRAorRml4ZWQgZm9ybSBGb3J0cmFuIHNvdXJjZSBjb2RlIHRoYXQgbXVzdCBiZSBwcmVwcm9jZXNzZWQgKHdpdGggdGhlIHRyYWRpdGlvbmFsCitwcmVwcm9jZXNzb3IpLgorLklQICJcZklmaWxlXGZSXGZCLmY5MFxmUiIgNAorLklYIEl0ZW0gImZpbGUuZjkwIgorLlBEIDAKKy5JUCAiXGZJZmlsZVxmUlxmQi5mOTVcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmY5NSIKKy5JUCAiXGZJZmlsZVxmUlxmQi5mMDNcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmYwMyIKKy5JUCAiXGZJZmlsZVxmUlxmQi5mMDhcZlIiIDQKKy5JWCBJdGVtICJmaWxlLmYwOCIKKy5QRAorRnJlZSBmb3JtIEZvcnRyYW4gc291cmNlIGNvZGUgdGhhdCBzaG91bGQgbm90IGJlIHByZXByb2Nlc3NlZC4KKy5JUCAiXGZJZmlsZVxmUlxmQi5GOTBcZlIiIDQKKy5JWCBJdGVtICJmaWxlLkY5MCIKKy5QRCAwCisuSVAgIlxmSWZpbGVcZlJcZkIuRjk1XGZSIiA0CisuSVggSXRlbSAiZmlsZS5GOTUiCisuSVAgIlxmSWZpbGVcZlJcZkIuRjAzXGZSIiA0CisuSVggSXRlbSAiZmlsZS5GMDMiCisuSVAgIlxmSWZpbGVcZlJcZkIuRjA4XGZSIiA0CisuSVggSXRlbSAiZmlsZS5GMDgiCisuUEQKK0ZyZWUgZm9ybSBGb3J0cmFuIHNvdXJjZSBjb2RlIHRoYXQgbXVzdCBiZSBwcmVwcm9jZXNzZWQgKHdpdGggdGhlCit0cmFkaXRpb25hbCBwcmVwcm9jZXNzb3IpLgorLklQICJcZklmaWxlXGZSXGZCLmdvXGZSIiA0CisuSVggSXRlbSAiZmlsZS5nbyIKK0dvIHNvdXJjZSBjb2RlLgorLklQICJcZklmaWxlXGZSXGZCLmFkc1xmUiIgNAorLklYIEl0ZW0gImZpbGUuYWRzIgorQWRhIHNvdXJjZSBjb2RlIGZpbGUgdGhhdCBjb250YWlucyBhIGxpYnJhcnkgdW5pdCBkZWNsYXJhdGlvbiAoYQorZGVjbGFyYXRpb24gb2YgYSBwYWNrYWdlLCBzdWJwcm9ncmFtLCBvciBnZW5lcmljLCBvciBhIGdlbmVyaWMKK2luc3RhbnRpYXRpb24pLCBvciBhIGxpYnJhcnkgdW5pdCByZW5hbWluZyBkZWNsYXJhdGlvbiAoYSBwYWNrYWdlLAorZ2VuZXJpYywgb3Igc3VicHJvZ3JhbSByZW5hbWluZyBkZWNsYXJhdGlvbikuICBTdWNoIGZpbGVzIGFyZSBhbHNvCitjYWxsZWQgXGZJc3BlY3NcZlIuCisuSVAgIlxmSWZpbGVcZlJcZkIuYWRiXGZSIiA0CisuSVggSXRlbSAiZmlsZS5hZGIiCitBZGEgc291cmNlIGNvZGUgZmlsZSBjb250YWluaW5nIGEgbGlicmFyeSB1bml0IGJvZHkgKGEgc3VicHJvZ3JhbSBvcgorcGFja2FnZSBib2R5KS4gIFN1Y2ggZmlsZXMgYXJlIGFsc28gY2FsbGVkIFxmSWJvZGllc1xmUi4KKy5JUCAiXGZJZmlsZVxmUlxmQi5zXGZSIiA0CisuSVggSXRlbSAiZmlsZS5zIgorQXNzZW1ibGVyIGNvZGUuCisuSVAgIlxmSWZpbGVcZlJcZkIuU1xmUiIgNAorLklYIEl0ZW0gImZpbGUuUyIKKy5QRCAwCisuSVAgIlxmSWZpbGVcZlJcZkIuc3hcZlIiIDQKKy5JWCBJdGVtICJmaWxlLnN4IgorLlBECitBc3NlbWJsZXIgY29kZSB0aGF0IG11c3QgYmUgcHJlcHJvY2Vzc2VkLgorLklQICJcZklvdGhlclxmUiIgNAorLklYIEl0ZW0gIm90aGVyIgorQW4gb2JqZWN0IGZpbGUgdG8gYmUgZmVkIHN0cmFpZ2h0IGludG8gbGlua2luZy4KK0FueSBmaWxlIG5hbWUgd2l0aCBubyByZWNvZ25pemVkIHN1ZmZpeCBpcyB0cmVhdGVkIHRoaXMgd2F5LgorLlBQCitZb3UgY2FuIHNwZWNpZnkgdGhlIGlucHV0IGxhbmd1YWdlIGV4cGxpY2l0bHkgd2l0aCB0aGUgXGZCXC14XGZSIG9wdGlvbjoKKy5JUCAiXGZCXC14XGZSIFxmSWxhbmd1YWdlXGZSIiA0CisuSVggSXRlbSAiLXggbGFuZ3VhZ2UiCitTcGVjaWZ5IGV4cGxpY2l0bHkgdGhlIFxmSWxhbmd1YWdlXGZSIGZvciB0aGUgZm9sbG93aW5nIGlucHV0IGZpbGVzCisocmF0aGVyIHRoYW4gbGV0dGluZyB0aGUgY29tcGlsZXIgY2hvb3NlIGEgZGVmYXVsdCBiYXNlZCBvbiB0aGUgZmlsZQorbmFtZSBzdWZmaXgpLiAgVGhpcyBvcHRpb24gYXBwbGllcyB0byBhbGwgZm9sbG93aW5nIGlucHV0IGZpbGVzIHVudGlsCit0aGUgbmV4dCBcZkJcLXhcZlIgb3B0aW9uLiAgUG9zc2libGUgdmFsdWVzIGZvciBcZklsYW5ndWFnZVxmUiBhcmU6CisuU3AKKy5WYiA5CitcJiAgICAgICAgYyAgY1wtaGVhZGVyICBjcHBcLW91dHB1dAorXCYgICAgICAgIGMrKyAgYysrXC1oZWFkZXIgIGMrK1wtY3BwXC1vdXRwdXQKK1wmICAgICAgICBvYmplY3RpdmVcLWMgIG9iamVjdGl2ZVwtY1wtaGVhZGVyICBvYmplY3RpdmVcLWNcLWNwcFwtb3V0cHV0CitcJiAgICAgICAgb2JqZWN0aXZlXC1jKysgb2JqZWN0aXZlXC1jKytcLWhlYWRlciBvYmplY3RpdmVcLWMrK1wtY3BwXC1vdXRwdXQKK1wmICAgICAgICBhc3NlbWJsZXIgIGFzc2VtYmxlclwtd2l0aFwtY3BwCitcJiAgICAgICAgYWRhCitcJiAgICAgICAgZjc3ICBmNzdcLWNwcFwtaW5wdXQgZjk1ICBmOTVcLWNwcFwtaW5wdXQKK1wmICAgICAgICBnbworXCYgICAgICAgIGphdmEKKy5WZQorLklQICJcZkJcLXggbm9uZVxmUiIgNAorLklYIEl0ZW0gIi14IG5vbmUiCitUdXJuIG9mZiBhbnkgc3BlY2lmaWNhdGlvbiBvZiBhIGxhbmd1YWdlLCBzbyB0aGF0IHN1YnNlcXVlbnQgZmlsZXMgYXJlCitoYW5kbGVkIGFjY29yZGluZyB0byB0aGVpciBmaWxlIG5hbWUgc3VmZml4ZXMgKGFzIHRoZXkgYXJlIGlmIFxmQlwteFxmUgoraGFzIG5vdCBiZWVuIHVzZWQgYXQgYWxsKS4KKy5JUCAiXGZCXC1wYXNzXC1leGl0XC1jb2Rlc1xmUiIgNAorLklYIEl0ZW0gIi1wYXNzLWV4aXQtY29kZXMiCitOb3JtYWxseSB0aGUgXGZCZ2NjXGZSIHByb2dyYW0gZXhpdHMgd2l0aCB0aGUgY29kZSBvZiAxIGlmIGFueQorcGhhc2Ugb2YgdGhlIGNvbXBpbGVyIHJldHVybnMgYSBub24tc3VjY2VzcyByZXR1cm4gY29kZS4gIElmIHlvdSBzcGVjaWZ5CitcJlxmQlwtcGFzc1wtZXhpdFwtY29kZXNcZlIsIHRoZSBcZkJnY2NcZlIgcHJvZ3JhbSBpbnN0ZWFkIHJldHVybnMgd2l0aAordGhlIG51bWVyaWNhbGx5IGhpZ2hlc3QgZXJyb3IgcHJvZHVjZWQgYnkgYW55IHBoYXNlIHJldHVybmluZyBhbiBlcnJvcgoraW5kaWNhdGlvbi4gIFRoZSBDLCBcKihDKywgYW5kIEZvcnRyYW4gZnJvbnQgZW5kcyByZXR1cm4gNCBpZiBhbiBpbnRlcm5hbAorY29tcGlsZXIgZXJyb3IgaXMgZW5jb3VudGVyZWQuCisuUFAKK0lmIHlvdSBvbmx5IHdhbnQgc29tZSBvZiB0aGUgc3RhZ2VzIG9mIGNvbXBpbGF0aW9uLCB5b3UgY2FuIHVzZQorXCZcZkJcLXhcZlIgKG9yIGZpbGVuYW1lIHN1ZmZpeGVzKSB0byB0ZWxsIFxmQmdjY1xmUiB3aGVyZSB0byBzdGFydCwgYW5kCitvbmUgb2YgdGhlIG9wdGlvbnMgXGZCXC1jXGZSLCBcZkJcLVNcZlIsIG9yIFxmQlwtRVxmUiB0byBzYXkgd2hlcmUKK1wmXGZCZ2NjXGZSIGlzIHRvIHN0b3AuICBOb3RlIHRoYXQgc29tZSBjb21iaW5hdGlvbnMgKGZvciBleGFtcGxlLAorXCZcZkJcLXggY3BwLW91dHB1dCBcLUVcZlIpIGluc3RydWN0IFxmQmdjY1xmUiB0byBkbyBub3RoaW5nIGF0IGFsbC4KKy5JUCAiXGZCXC1jXGZSIiA0CisuSVggSXRlbSAiLWMiCitDb21waWxlIG9yIGFzc2VtYmxlIHRoZSBzb3VyY2UgZmlsZXMsIGJ1dCBkbyBub3QgbGluay4gIFRoZSBsaW5raW5nCitzdGFnZSBzaW1wbHkgaXMgbm90IGRvbmUuICBUaGUgdWx0aW1hdGUgb3V0cHV0IGlzIGluIHRoZSBmb3JtIG9mIGFuCitvYmplY3QgZmlsZSBmb3IgZWFjaCBzb3VyY2UgZmlsZS4KKy5TcAorQnkgZGVmYXVsdCwgdGhlIG9iamVjdCBmaWxlIG5hbWUgZm9yIGEgc291cmNlIGZpbGUgaXMgbWFkZSBieSByZXBsYWNpbmcKK3RoZSBzdWZmaXggXGZCLmNcZlIsIFxmQi5pXGZSLCBcZkIuc1xmUiwgZXRjLiwgd2l0aCBcZkIub1xmUi4KKy5TcAorVW5yZWNvZ25pemVkIGlucHV0IGZpbGVzLCBub3QgcmVxdWlyaW5nIGNvbXBpbGF0aW9uIG9yIGFzc2VtYmx5LCBhcmUKK2lnbm9yZWQuCisuSVAgIlxmQlwtU1xmUiIgNAorLklYIEl0ZW0gIi1TIgorU3RvcCBhZnRlciB0aGUgc3RhZ2Ugb2YgY29tcGlsYXRpb24gcHJvcGVyOyBkbyBub3QgYXNzZW1ibGUuICBUaGUgb3V0cHV0CitpcyBpbiB0aGUgZm9ybSBvZiBhbiBhc3NlbWJsZXIgY29kZSBmaWxlIGZvciBlYWNoIG5vbi1hc3NlbWJsZXIgaW5wdXQKK2ZpbGUgc3BlY2lmaWVkLgorLlNwCitCeSBkZWZhdWx0LCB0aGUgYXNzZW1ibGVyIGZpbGUgbmFtZSBmb3IgYSBzb3VyY2UgZmlsZSBpcyBtYWRlIGJ5CityZXBsYWNpbmcgdGhlIHN1ZmZpeCBcZkIuY1xmUiwgXGZCLmlcZlIsIGV0Yy4sIHdpdGggXGZCLnNcZlIuCisuU3AKK0lucHV0IGZpbGVzIHRoYXQgZG9uJ3QgcmVxdWlyZSBjb21waWxhdGlvbiBhcmUgaWdub3JlZC4KKy5JUCAiXGZCXC1FXGZSIiA0CisuSVggSXRlbSAiLUUiCitTdG9wIGFmdGVyIHRoZSBwcmVwcm9jZXNzaW5nIHN0YWdlOyBkbyBub3QgcnVuIHRoZSBjb21waWxlciBwcm9wZXIuICBUaGUKK291dHB1dCBpcyBpbiB0aGUgZm9ybSBvZiBwcmVwcm9jZXNzZWQgc291cmNlIGNvZGUsIHdoaWNoIGlzIHNlbnQgdG8gdGhlCitzdGFuZGFyZCBvdXRwdXQuCisuU3AKK0lucHV0IGZpbGVzIHRoYXQgZG9uJ3QgcmVxdWlyZSBwcmVwcm9jZXNzaW5nIGFyZSBpZ25vcmVkLgorLklQICJcZkJcLW9cZlIgXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1vIGZpbGUiCitQbGFjZSBvdXRwdXQgaW4gZmlsZSBcZklmaWxlXGZSLiAgVGhpcyBhcHBsaWVzIHRvIHdoYXRldmVyCitzb3J0IG9mIG91dHB1dCBpcyBiZWluZyBwcm9kdWNlZCwgd2hldGhlciBpdCBiZSBhbiBleGVjdXRhYmxlIGZpbGUsCithbiBvYmplY3QgZmlsZSwgYW4gYXNzZW1ibGVyIGZpbGUgb3IgcHJlcHJvY2Vzc2VkIEMgY29kZS4KKy5TcAorSWYgXGZCXC1vXGZSIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHB1dCBhbiBleGVjdXRhYmxlCitmaWxlIGluIFxmSWEub3V0XGZSLCB0aGUgb2JqZWN0IGZpbGUgZm9yCitcJlxmSVxmSXNvdXJjZVxmSS5cZklzdWZmaXhcZklcZlIgaW4gXGZJXGZJc291cmNlXGZJLm9cZlIsIGl0cworYXNzZW1ibGVyIGZpbGUgaW4gXGZJXGZJc291cmNlXGZJLnNcZlIsIGEgcHJlY29tcGlsZWQgaGVhZGVyIGZpbGUgaW4KK1wmXGZJXGZJc291cmNlXGZJLlxmSXN1ZmZpeFxmSS5nY2hcZlIsIGFuZCBhbGwgcHJlcHJvY2Vzc2VkIEMgc291cmNlIG9uCitzdGFuZGFyZCBvdXRwdXQuCisuSVAgIlxmQlwtdlxmUiIgNAorLklYIEl0ZW0gIi12IgorUHJpbnQgKG9uIHN0YW5kYXJkIGVycm9yIG91dHB1dCkgdGhlIGNvbW1hbmRzIGV4ZWN1dGVkIHRvIHJ1biB0aGUgc3RhZ2VzCitvZiBjb21waWxhdGlvbi4gIEFsc28gcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBjb21waWxlciBkcml2ZXIKK3Byb2dyYW0gYW5kIG9mIHRoZSBwcmVwcm9jZXNzb3IgYW5kIHRoZSBjb21waWxlciBwcm9wZXIuCisuSVAgIlxmQlwtIyMjXGZSIiA0CisuSVggSXRlbSAiLSMjIyIKK0xpa2UgXGZCXC12XGZSIGV4Y2VwdCB0aGUgY29tbWFuZHMgYXJlIG5vdCBleGVjdXRlZCBhbmQgYXJndW1lbnRzCithcmUgcXVvdGVkIHVubGVzcyB0aGV5IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBcZihDV1wqKENgLi9cLV9cKihDJ1xmUi4KK1RoaXMgaXMgdXNlZnVsIGZvciBzaGVsbCBzY3JpcHRzIHRvIGNhcHR1cmUgdGhlIGRyaXZlci1nZW5lcmF0ZWQgY29tbWFuZCBsaW5lcy4KKy5JUCAiXGZCXC1waXBlXGZSIiA0CisuSVggSXRlbSAiLXBpcGUiCitVc2UgcGlwZXMgcmF0aGVyIHRoYW4gdGVtcG9yYXJ5IGZpbGVzIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlCit2YXJpb3VzIHN0YWdlcyBvZiBjb21waWxhdGlvbi4gIFRoaXMgZmFpbHMgdG8gd29yayBvbiBzb21lIHN5c3RlbXMgd2hlcmUKK3RoZSBhc3NlbWJsZXIgaXMgdW5hYmxlIHRvIHJlYWQgZnJvbSBhIHBpcGU7IGJ1dCB0aGUgXHMtMUdOVVxzMCBhc3NlbWJsZXIgaGFzCitubyB0cm91YmxlLgorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKK1ByaW50IChvbiB0aGUgc3RhbmRhcmQgb3V0cHV0KSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucwordW5kZXJzdG9vZCBieSBcZkJnY2NcZlIuICBJZiB0aGUgXGZCXC12XGZSIG9wdGlvbiBpcyBhbHNvIHNwZWNpZmllZAordGhlbiBcZkJcLVwtaGVscFxmUiBpcyBhbHNvIHBhc3NlZCBvbiB0byB0aGUgdmFyaW91cyBwcm9jZXNzZXMKK2ludm9rZWQgYnkgXGZCZ2NjXGZSLCBzbyB0aGF0IHRoZXkgY2FuIGRpc3BsYXkgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zCit0aGV5IGFjY2VwdC4gIElmIHRoZSBcZkJcLVdleHRyYVxmUiBvcHRpb24gaGFzIGFsc28gYmVlbiBzcGVjaWZpZWQKKyhwcmlvciB0byB0aGUgXGZCXC1cLWhlbHBcZlIgb3B0aW9uKSwgdGhlbiBjb21tYW5kLWxpbmUgb3B0aW9ucyB0aGF0CitoYXZlIG5vIGRvY3VtZW50YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZW0gYXJlIGFsc28gZGlzcGxheWVkLgorLklQICJcZkJcLVwtdGFyZ2V0XC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS10YXJnZXQtaGVscCIKK1ByaW50IChvbiB0aGUgc3RhbmRhcmQgb3V0cHV0KSBhIGRlc2NyaXB0aW9uIG9mIHRhcmdldC1zcGVjaWZpYyBjb21tYW5kLWxpbmUKK29wdGlvbnMgZm9yIGVhY2ggdG9vbC4gIEZvciBzb21lIHRhcmdldHMgZXh0cmEgdGFyZ2V0LXNwZWNpZmljCitpbmZvcm1hdGlvbiBtYXkgYWxzbyBiZSBwcmludGVkLgorLklQICJcZkJcLVwtaGVscD17XGZSXGZJY2xhc3NcZlJ8W1xmQl5cZlJdXGZJcXVhbGlmaWVyXGZSXGZCfVxmUltcZkIsLi4uXGZSXSIgNAorLklYIEl0ZW0gIi0taGVscD17Y2xhc3N8W15dcXVhbGlmaWVyfVssLi4uXSIKK1ByaW50IChvbiB0aGUgc3RhbmRhcmQgb3V0cHV0KSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21tYW5kLWxpbmUKK29wdGlvbnMgdW5kZXJzdG9vZCBieSB0aGUgY29tcGlsZXIgdGhhdCBmaXQgaW50byBhbGwgc3BlY2lmaWVkIGNsYXNzZXMKK2FuZCBxdWFsaWZpZXJzLiAgVGhlc2UgYXJlIHRoZSBzdXBwb3J0ZWQgY2xhc3NlczoKKy5SUyA0CisuSVAgIlxmQm9wdGltaXplcnNcZlIiIDQKKy5JWCBJdGVtICJvcHRpbWl6ZXJzIgorRGlzcGxheSBhbGwgb2YgdGhlIG9wdGltaXphdGlvbiBvcHRpb25zIHN1cHBvcnRlZCBieSB0aGUKK2NvbXBpbGVyLgorLklQICJcZkJ3YXJuaW5nc1xmUiIgNAorLklYIEl0ZW0gIndhcm5pbmdzIgorRGlzcGxheSBhbGwgb2YgdGhlIG9wdGlvbnMgY29udHJvbGxpbmcgd2FybmluZyBtZXNzYWdlcworcHJvZHVjZWQgYnkgdGhlIGNvbXBpbGVyLgorLklQICJcZkJ0YXJnZXRcZlIiIDQKKy5JWCBJdGVtICJ0YXJnZXQiCitEaXNwbGF5IHRhcmdldC1zcGVjaWZpYyBvcHRpb25zLiAgVW5saWtlIHRoZQorXCZcZkJcLVwtdGFyZ2V0XC1oZWxwXGZSIG9wdGlvbiBob3dldmVyLCB0YXJnZXQtc3BlY2lmaWMgb3B0aW9ucyBvZiB0aGUKK2xpbmtlciBhbmQgYXNzZW1ibGVyIGFyZSBub3QgZGlzcGxheWVkLiAgVGhpcyBpcyBiZWNhdXNlIHRob3NlCit0b29scyBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIGV4dGVuZGVkIFxmQlwtXC1oZWxwPVxmUiBzeW50YXguCisuSVAgIlxmQnBhcmFtc1xmUiIgNAorLklYIEl0ZW0gInBhcmFtcyIKK0Rpc3BsYXkgdGhlIHZhbHVlcyByZWNvZ25pemVkIGJ5IHRoZSBcZkJcLVwtcGFyYW1cZlIKK29wdGlvbi4KKy5JUCAiXGZJbGFuZ3VhZ2VcZlIiIDQKKy5JWCBJdGVtICJsYW5ndWFnZSIKK0Rpc3BsYXkgdGhlIG9wdGlvbnMgc3VwcG9ydGVkIGZvciBcZklsYW5ndWFnZVxmUiwgd2hlcmUKK1wmXGZJbGFuZ3VhZ2VcZlIgaXMgdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBsYW5ndWFnZXMgc3VwcG9ydGVkIGluIHRoaXMKK3ZlcnNpb24gb2YgXHMtMUdDQ1xzMC4KKy5JUCAiXGZCY29tbW9uXGZSIiA0CisuSVggSXRlbSAiY29tbW9uIgorRGlzcGxheSB0aGUgb3B0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gYWxsIGxhbmd1YWdlcy4KKy5SRQorLlJTIDQKKy5TcAorVGhlc2UgYXJlIHRoZSBzdXBwb3J0ZWQgcXVhbGlmaWVyczoKKy5JUCAiXGZCdW5kb2N1bWVudGVkXGZSIiA0CisuSVggSXRlbSAidW5kb2N1bWVudGVkIgorRGlzcGxheSBvbmx5IHRob3NlIG9wdGlvbnMgdGhhdCBhcmUgdW5kb2N1bWVudGVkLgorLklQICJcZkJqb2luZWRcZlIiIDQKKy5JWCBJdGVtICJqb2luZWQiCitEaXNwbGF5IG9wdGlvbnMgdGFraW5nIGFuIGFyZ3VtZW50IHRoYXQgYXBwZWFycyBhZnRlciBhbiBlcXVhbAorc2lnbiBpbiB0aGUgc2FtZSBjb250aW51b3VzIHBpZWNlIG9mIHRleHQsIHN1Y2ggYXM6CitcJlxmQlwtXC1oZWxwPXRhcmdldFxmUi4KKy5JUCAiXGZCc2VwYXJhdGVcZlIiIDQKKy5JWCBJdGVtICJzZXBhcmF0ZSIKK0Rpc3BsYXkgb3B0aW9ucyB0YWtpbmcgYW4gYXJndW1lbnQgdGhhdCBhcHBlYXJzIGFzIGEgc2VwYXJhdGUgd29yZAorZm9sbG93aW5nIHRoZSBvcmlnaW5hbCBvcHRpb24sIHN1Y2ggYXM6IFxmQlwtbyBvdXRwdXQtZmlsZVxmUi4KKy5SRQorLlJTIDQKKy5TcAorVGh1cyBmb3IgZXhhbXBsZSB0byBkaXNwbGF5IGFsbCB0aGUgdW5kb2N1bWVudGVkIHRhcmdldC1zcGVjaWZpYworc3dpdGNoZXMgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlciwgdXNlOgorLlNwCisuVmIgMQorXCYgICAgICAgIFwtXC1oZWxwPXRhcmdldCx1bmRvY3VtZW50ZWQKKy5WZQorLlNwCitUaGUgc2Vuc2Ugb2YgYSBxdWFsaWZpZXIgY2FuIGJlIGludmVydGVkIGJ5IHByZWZpeGluZyBpdCB3aXRoIHRoZQorXCZcZkJeXGZSIGNoYXJhY3Rlciwgc28gZm9yIGV4YW1wbGUgdG8gZGlzcGxheSBhbGwgYmluYXJ5IHdhcm5pbmcKK29wdGlvbnMgKGkuZS4sIG9uZXMgdGhhdCBhcmUgZWl0aGVyIG9uIG9yIG9mZiBhbmQgdGhhdCBkbyBub3QgdGFrZSBhbgorYXJndW1lbnQpIHRoYXQgaGF2ZSBhIGRlc2NyaXB0aW9uLCB1c2U6CisuU3AKKy5WYiAxCitcJiAgICAgICAgXC1cLWhlbHA9d2FybmluZ3MsXmpvaW5lZCxedW5kb2N1bWVudGVkCisuVmUKKy5TcAorVGhlIGFyZ3VtZW50IHRvIFxmQlwtXC1oZWxwPVxmUiBzaG91bGQgbm90IGNvbnNpc3Qgc29sZWx5IG9mIGludmVydGVkCitxdWFsaWZpZXJzLgorLlNwCitDb21iaW5pbmcgc2V2ZXJhbCBjbGFzc2VzIGlzIHBvc3NpYmxlLCBhbHRob3VnaCB0aGlzIHVzdWFsbHkKK3Jlc3RyaWN0cyB0aGUgb3V0cHV0IHNvIG11Y2ggdGhhdCB0aGVyZSBpcyBub3RoaW5nIHRvIGRpc3BsYXkuICBPbmUKK2Nhc2Ugd2hlcmUgaXQgZG9lcyB3b3JrLCBob3dldmVyLCBpcyB3aGVuIG9uZSBvZiB0aGUgY2xhc3NlcyBpcworXCZcZkl0YXJnZXRcZlIuICBGb3IgZXhhbXBsZSwgdG8gZGlzcGxheSBhbGwgdGhlIHRhcmdldC1zcGVjaWZpYworb3B0aW1pemF0aW9uIG9wdGlvbnMsIHVzZToKKy5TcAorLlZiIDEKK1wmICAgICAgICBcLVwtaGVscD10YXJnZXQsb3B0aW1pemVycworLlZlCisuU3AKK1RoZSBcZkJcLVwtaGVscD1cZlIgb3B0aW9uIGNhbiBiZSByZXBlYXRlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRWFjaAorc3VjY2Vzc2l2ZSB1c2UgZGlzcGxheXMgaXRzIHJlcXVlc3RlZCBjbGFzcyBvZiBvcHRpb25zLCBza2lwcGluZwordGhvc2UgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkaXNwbGF5ZWQuCisuU3AKK0lmIHRoZSBcZkJcLVFcZlIgb3B0aW9uIGFwcGVhcnMgb24gdGhlIGNvbW1hbmQgbGluZSBiZWZvcmUgdGhlCitcJlxmQlwtXC1oZWxwPVxmUiBvcHRpb24sIHRoZW4gdGhlIGRlc2NyaXB0aXZlIHRleHQgZGlzcGxheWVkIGJ5CitcJlxmQlwtXC1oZWxwPVxmUiBpcyBjaGFuZ2VkLiAgSW5zdGVhZCBvZiBkZXNjcmliaW5nIHRoZSBkaXNwbGF5ZWQKK29wdGlvbnMsIGFuIGluZGljYXRpb24gaXMgZ2l2ZW4gYXMgdG8gd2hldGhlciB0aGUgb3B0aW9uIGlzIGVuYWJsZWQsCitkaXNhYmxlZCBvciBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSAoYXNzdW1pbmcgdGhhdCB0aGUgY29tcGlsZXIKK2tub3dzIHRoaXMgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBcZkJcLVwtaGVscD1cZlIgb3B0aW9uIGlzIHVzZWQpLgorLlNwCitIZXJlIGlzIGEgdHJ1bmNhdGVkIGV4YW1wbGUgZnJvbSB0aGUgXHMtMUFSTVxzMCBwb3J0IG9mIFxmQmdjY1xmUjoKKy5TcAorLlZiIDUKK1wmICAgICAgICAgICUgZ2NjIFwtUSBcLW1hYmk9MiBcLVwtaGVscD10YXJnZXQgXC1jCitcJiAgICAgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHRhcmdldCBzcGVjaWZpYzoKK1wmICAgICAgICAgIFwtbWFiaT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKK1wmICAgICAgICAgIFwtbWFib3J0XC1vblwtbm9yZXR1cm4gICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXQorXCYgICAgICAgICAgXC1tYXBjcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXQorLlZlCisuU3AKK1RoZSBvdXRwdXQgaXMgc2Vuc2l0aXZlIHRvIHRoZSBlZmZlY3RzIG9mIHByZXZpb3VzIGNvbW1hbmQtbGluZQorb3B0aW9ucywgc28gZm9yIGV4YW1wbGUgaXQgaXMgcG9zc2libGUgdG8gZmluZCBvdXQgd2hpY2ggb3B0aW1pemF0aW9ucworYXJlIGVuYWJsZWQgYXQgXGZCXC1PMlxmUiBieSB1c2luZzoKKy5TcAorLlZiIDEKK1wmICAgICAgICBcLVEgXC1PMiBcLVwtaGVscD1vcHRpbWl6ZXJzCisuVmUKKy5TcAorQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGRpc2NvdmVyIHdoaWNoIGJpbmFyeSBvcHRpbWl6YXRpb25zIGFyZSBlbmFibGVkCitieSBcZkJcLU8zXGZSIGJ5IHVzaW5nOgorLlNwCisuVmIgMworXCYgICAgICAgIGdjYyBcLWMgXC1RIFwtTzMgXC1cLWhlbHA9b3B0aW1pemVycyA+IC90bXAvTzNcLW9wdHMKK1wmICAgICAgICBnY2MgXC1jIFwtUSBcLU8yIFwtXC1oZWxwPW9wdGltaXplcnMgPiAvdG1wL08yXC1vcHRzCitcJiAgICAgICAgZGlmZiAvdG1wL08yXC1vcHRzIC90bXAvTzNcLW9wdHMgfCBncmVwIGVuYWJsZWQKKy5WZQorLlJFCisuSVAgIlxmQlwtbm9cLWNhbm9uaWNhbFwtcHJlZml4ZXNcZlIiIDQKKy5JWCBJdGVtICItbm8tY2Fub25pY2FsLXByZWZpeGVzIgorRG8gbm90IGV4cGFuZCBhbnkgc3ltYm9saWMgbGlua3MsIHJlc29sdmUgcmVmZXJlbmNlcyB0byBcZkIvLi4vXGZSCitvciBcZkIvLi9cZlIsIG9yIG1ha2UgdGhlIHBhdGggYWJzb2x1dGUgd2hlbiBnZW5lcmF0aW5nIGEgcmVsYXRpdmUKK3ByZWZpeC4KKy5JUCAiXGZCXC1cLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24iCitEaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBhbmQgY29weXJpZ2h0cyBvZiB0aGUgaW52b2tlZCBccy0xR0NDXHMwLgorLklQICJcZkJcLXdyYXBwZXJcZlIiIDQKKy5JWCBJdGVtICItd3JhcHBlciIKK0ludm9rZSBhbGwgc3ViY29tbWFuZHMgdW5kZXIgYSB3cmFwcGVyIHByb2dyYW0uICBUaGUgbmFtZSBvZiB0aGUKK3dyYXBwZXIgcHJvZ3JhbSBhbmQgaXRzIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBhcyBhIGNvbW1hIHNlcGFyYXRlZAorbGlzdC4KKy5TcAorLlZiIDEKK1wmICAgICAgICBnY2MgXC1jIHQuYyBcLXdyYXBwZXIgZ2RiLFwtXC1hcmdzCisuVmUKKy5TcAorVGhpcyBpbnZva2VzIGFsbCBzdWJwcm9ncmFtcyBvZiBcZkJnY2NcZlIgdW5kZXIKK1wmXGZCZ2RiIFwtXC1hcmdzXGZSLCB0aHVzIHRoZSBpbnZvY2F0aW9uIG9mIFxmQmNjMVxmUiBpcworXCZcZkJnZGIgXC1cLWFyZ3MgY2MxIC4uLlxmUi4KKy5JUCAiXGZCXC1mcGx1Z2luPVxmUlxmSW5hbWVcZlJcZkIuc29cZlIiIDQKKy5JWCBJdGVtICItZnBsdWdpbj1uYW1lLnNvIgorTG9hZCB0aGUgcGx1Z2luIGNvZGUgaW4gZmlsZSBcZkluYW1lXGZSLnNvLCBhc3N1bWVkIHRvIGJlIGEKK3NoYXJlZCBvYmplY3QgdG8gYmUgZGxvcGVuJ2QgYnkgdGhlIGNvbXBpbGVyLiAgVGhlIGJhc2UgbmFtZSBvZgordGhlIHNoYXJlZCBvYmplY3QgZmlsZSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBwbHVnaW4gZm9yIHRoZQorcHVycG9zZXMgb2YgYXJndW1lbnQgcGFyc2luZyAoU2VlCitcJlxmQlwtZnBsdWdpblwtYXJnXC1cZlJcZkluYW1lXGZSXGZCXC1cZlJcZklrZXlcZlJcZkI9XGZSXGZJdmFsdWVcZlIgYmVsb3cpLgorRWFjaCBwbHVnaW4gc2hvdWxkIGRlZmluZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIHNwZWNpZmllZCBpbiB0aGUKK1BsdWdpbnMgXHMtMUFQSVxzMC4KKy5JUCAiXGZCXC1mcGx1Z2luXC1hcmdcLVxmUlxmSW5hbWVcZlJcZkJcLVxmUlxmSWtleVxmUlxmQj1cZlJcZkl2YWx1ZVxmUiIgNAorLklYIEl0ZW0gIi1mcGx1Z2luLWFyZy1uYW1lLWtleT12YWx1ZSIKK0RlZmluZSBhbiBhcmd1bWVudCBjYWxsZWQgXGZJa2V5XGZSIHdpdGggYSB2YWx1ZSBvZiBcZkl2YWx1ZVxmUgorZm9yIHRoZSBwbHVnaW4gY2FsbGVkIFxmSW5hbWVcZlIuCisuSVAgIlxmQlwtZmR1bXBcLWFkYVwtc3BlY1xmUltcZkJcLXNsaW1cZlJdIiA0CisuSVggSXRlbSAiLWZkdW1wLWFkYS1zcGVjWy1zbGltXSIKK0ZvciBDIGFuZCBcKihDKyBzb3VyY2UgYW5kIGluY2x1ZGUgZmlsZXMsIGdlbmVyYXRlIGNvcnJlc3BvbmRpbmcgQWRhCitzcGVjcy4KKy5JUCAiXGZCXC1mZHVtcFwtZ29cLXNwZWM9XGZSXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1nby1zcGVjPWZpbGUiCitGb3IgaW5wdXQgZmlsZXMgaW4gYW55IGxhbmd1YWdlLCBnZW5lcmF0ZSBjb3JyZXNwb25kaW5nIEdvCitkZWNsYXJhdGlvbnMgaW4gXGZJZmlsZVxmUi4gIFRoaXMgZ2VuZXJhdGVzIEdvIFxmKENXXCooQ2Bjb25zdFwqKEMnXGZSLAorXCZcZihDV1wqKENgdHlwZVwqKEMnXGZSLCBcZihDV1wqKENgdmFyXCooQydcZlIsIGFuZCBcZihDV1wqKENgZnVuY1wqKEMnXGZSIGRlY2xhcmF0aW9ucyB3aGljaCBtYXkgYmUgYQordXNlZnVsIHdheSB0byBzdGFydCB3cml0aW5nIGEgR28gaW50ZXJmYWNlIHRvIGNvZGUgd3JpdHRlbiBpbiBzb21lCitvdGhlciBsYW5ndWFnZS4KKy5JUCAiXGZCQFxmUlxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICJAZmlsZSIKK1JlYWQgY29tbWFuZC1saW5lIG9wdGlvbnMgZnJvbSBcZklmaWxlXGZSLiAgVGhlIG9wdGlvbnMgcmVhZCBhcmUKK2luc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBAXGZJZmlsZVxmUiBvcHRpb24uICBJZiBcZklmaWxlXGZSCitkb2VzIG5vdCBleGlzdCwgb3IgY2Fubm90IGJlIHJlYWQsIHRoZW4gdGhlIG9wdGlvbiB3aWxsIGJlIHRyZWF0ZWQKK2xpdGVyYWxseSwgYW5kIG5vdCByZW1vdmVkLgorLlNwCitPcHRpb25zIGluIFxmSWZpbGVcZlIgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSB3aGl0ZXNwYWNlCitjaGFyYWN0ZXIgbWF5IGJlIGluY2x1ZGVkIGluIGFuIG9wdGlvbiBieSBzdXJyb3VuZGluZyB0aGUgZW50aXJlCitvcHRpb24gaW4gZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLiAgQW55IGNoYXJhY3RlciAoaW5jbHVkaW5nIGEKK2JhY2tzbGFzaCkgbWF5IGJlIGluY2x1ZGVkIGJ5IHByZWZpeGluZyB0aGUgY2hhcmFjdGVyIHRvIGJlIGluY2x1ZGVkCit3aXRoIGEgYmFja3NsYXNoLiAgVGhlIFxmSWZpbGVcZlIgbWF5IGl0c2VsZiBjb250YWluIGFkZGl0aW9uYWwKK0BcZklmaWxlXGZSIG9wdGlvbnM7IGFueSBzdWNoIG9wdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgcmVjdXJzaXZlbHkuCisuU1MgIkNvbXBpbGluZyBcKihDKyBQcm9ncmFtcyIKKy5JWCBTdWJzZWN0aW9uICJDb21waWxpbmcgIFByb2dyYW1zIgorXCZcKihDKyBzb3VyY2UgZmlsZXMgY29udmVudGlvbmFsbHkgdXNlIG9uZSBvZiB0aGUgc3VmZml4ZXMgXGZCLkNcZlIsCitcJlxmQi5jY1xmUiwgXGZCLmNwcFxmUiwgXGZCLkNQUFxmUiwgXGZCLmMrK1xmUiwgXGZCLmNwXGZSLCBvcgorXCZcZkIuY3h4XGZSOyBcKihDKyBoZWFkZXIgZmlsZXMgb2Z0ZW4gdXNlIFxmQi5oaFxmUiwgXGZCLmhwcFxmUiwKK1wmXGZCLkhcZlIsIG9yIChmb3Igc2hhcmVkIHRlbXBsYXRlIGNvZGUpIFxmQi50Y2NcZlI7IGFuZAorcHJlcHJvY2Vzc2VkIFwqKEMrIGZpbGVzIHVzZSB0aGUgc3VmZml4IFxmQi5paVxmUi4gIFxzLTFHQ0NcczAgcmVjb2duaXplcworZmlsZXMgd2l0aCB0aGVzZSBuYW1lcyBhbmQgY29tcGlsZXMgdGhlbSBhcyBcKihDKyBwcm9ncmFtcyBldmVuIGlmIHlvdQorY2FsbCB0aGUgY29tcGlsZXIgdGhlIHNhbWUgd2F5IGFzIGZvciBjb21waWxpbmcgQyBwcm9ncmFtcyAodXN1YWxseQord2l0aCB0aGUgbmFtZSBcZkJnY2NcZlIpLgorLlBQCitIb3dldmVyLCB0aGUgdXNlIG9mIFxmQmdjY1xmUiBkb2VzIG5vdCBhZGQgdGhlIFwqKEMrIGxpYnJhcnkuCitcJlxmQmcrK1xmUiBpcyBhIHByb2dyYW0gdGhhdCBjYWxscyBccy0xR0NDXHMwIGFuZCBhdXRvbWF0aWNhbGx5IHNwZWNpZmllcyBsaW5raW5nCithZ2FpbnN0IHRoZSBcKihDKyBsaWJyYXJ5LiAgSXQgdHJlYXRzIFxmQi5jXGZSLAorXCZcZkIuaFxmUiBhbmQgXGZCLmlcZlIgZmlsZXMgYXMgXCooQysgc291cmNlIGZpbGVzIGluc3RlYWQgb2YgQyBzb3VyY2UKK2ZpbGVzIHVubGVzcyBcZkJcLXhcZlIgaXMgdXNlZC4gIFRoaXMgcHJvZ3JhbSBpcyBhbHNvIHVzZWZ1bCB3aGVuCitwcmVjb21waWxpbmcgYSBDIGhlYWRlciBmaWxlIHdpdGggYSBcZkIuaFxmUiBleHRlbnNpb24gZm9yIHVzZSBpbiBcKihDKworY29tcGlsYXRpb25zLiAgT24gbWFueSBzeXN0ZW1zLCBcZkJnKytcZlIgaXMgYWxzbyBpbnN0YWxsZWQgd2l0aAordGhlIG5hbWUgXGZCYysrXGZSLgorLlBQCitXaGVuIHlvdSBjb21waWxlIFwqKEMrIHByb2dyYW1zLCB5b3UgbWF5IHNwZWNpZnkgbWFueSBvZiB0aGUgc2FtZQorY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdCB5b3UgdXNlIGZvciBjb21waWxpbmcgcHJvZ3JhbXMgaW4gYW55CitsYW5ndWFnZTsgb3IgY29tbWFuZC1saW5lIG9wdGlvbnMgbWVhbmluZ2Z1bCBmb3IgQyBhbmQgcmVsYXRlZAorbGFuZ3VhZ2VzOyBvciBvcHRpb25zIHRoYXQgYXJlIG1lYW5pbmdmdWwgb25seSBmb3IgXCooQysgcHJvZ3JhbXMuCisuU1MgIk9wdGlvbnMgQ29udHJvbGxpbmcgQyBEaWFsZWN0IgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgQ29udHJvbGxpbmcgQyBEaWFsZWN0IgorVGhlIGZvbGxvd2luZyBvcHRpb25zIGNvbnRyb2wgdGhlIGRpYWxlY3Qgb2YgQyAob3IgbGFuZ3VhZ2VzIGRlcml2ZWQKK2Zyb20gQywgc3VjaCBhcyBcKihDKywgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQyspIHRoYXQgdGhlIGNvbXBpbGVyCithY2NlcHRzOgorLklQICJcZkJcLWFuc2lcZlIiIDQKKy5JWCBJdGVtICItYW5zaSIKK0luIEMgbW9kZSwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIFxmQlwtc3RkPWM5MFxmUi4gSW4gXCooQysgbW9kZSwgaXQgaXMKK2VxdWl2YWxlbnQgdG8gXGZCXC1zdGQ9YysrOThcZlIuCisuU3AKK1RoaXMgdHVybnMgb2ZmIGNlcnRhaW4gZmVhdHVyZXMgb2YgXHMtMUdDQ1xzMCB0aGF0IGFyZSBpbmNvbXBhdGlibGUgd2l0aCBccy0xSVNPXHMwCitDOTAgKHdoZW4gY29tcGlsaW5nIEMgY29kZSksIG9yIG9mIHN0YW5kYXJkIFwqKEMrICh3aGVuIGNvbXBpbGluZyBcKihDKyBjb2RlKSwKK3N1Y2ggYXMgdGhlIFxmKENXXCooQ2Bhc21cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHR5cGVvZlwqKEMnXGZSIGtleXdvcmRzLCBhbmQKK3ByZWRlZmluZWQgbWFjcm9zIHN1Y2ggYXMgXGYoQ1dcKihDYHVuaXhcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHZheFwqKEMnXGZSIHRoYXQgaWRlbnRpZnkgdGhlCit0eXBlIG9mIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiAgSXQgYWxzbyBlbmFibGVzIHRoZSB1bmRlc2lyYWJsZSBhbmQKK3JhcmVseSB1c2VkIFxzLTFJU09cczAgdHJpZ3JhcGggZmVhdHVyZS4gIEZvciB0aGUgQyBjb21waWxlciwKK2l0IGRpc2FibGVzIHJlY29nbml0aW9uIG9mIFwqKEMrIHN0eWxlIFxmQi8vXGZSIGNvbW1lbnRzIGFzIHdlbGwgYXMKK3RoZSBcZihDV1wqKENgaW5saW5lXCooQydcZlIga2V5d29yZC4KKy5TcAorVGhlIGFsdGVybmF0ZSBrZXl3b3JkcyBcZihDV1wqKENgX1x8X2FzbV9cfF9cKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF9leHRlbnNpb25fXHxfXCooQydcZlIsCitcJlxmKENXXCooQ2BfXHxfaW5saW5lX1x8X1wqKEMnXGZSIGFuZCBcZihDV1wqKENgX1x8X3R5cGVvZl9cfF9cKihDJ1xmUiBjb250aW51ZSB0byB3b3JrIGRlc3BpdGUKK1wmXGZCXC1hbnNpXGZSLiAgWW91IHdvdWxkIG5vdCB3YW50IHRvIHVzZSB0aGVtIGluIGFuIFxzLTFJU09cczAgQyBwcm9ncmFtLCBvZgorY291cnNlLCBidXQgaXQgaXMgdXNlZnVsIHRvIHB1dCB0aGVtIGluIGhlYWRlciBmaWxlcyB0aGF0IG1pZ2h0IGJlIGluY2x1ZGVkCitpbiBjb21waWxhdGlvbnMgZG9uZSB3aXRoIFxmQlwtYW5zaVxmUi4gIEFsdGVybmF0ZSBwcmVkZWZpbmVkIG1hY3Jvcworc3VjaCBhcyBcZihDV1wqKENgX1x8X3VuaXhfXHxfXCooQydcZlIgYW5kIFxmKENXXCooQ2BfXHxfdmF4X1x8X1wqKEMnXGZSIGFyZSBhbHNvIGF2YWlsYWJsZSwgd2l0aCBvcgord2l0aG91dCBcZkJcLWFuc2lcZlIuCisuU3AKK1RoZSBcZkJcLWFuc2lcZlIgb3B0aW9uIGRvZXMgbm90IGNhdXNlIG5vbi1JU08gcHJvZ3JhbXMgdG8gYmUKK3JlamVjdGVkIGdyYXR1aXRvdXNseS4gIEZvciB0aGF0LCBcZkJcLVdwZWRhbnRpY1xmUiBpcyByZXF1aXJlZCBpbgorYWRkaXRpb24gdG8gXGZCXC1hbnNpXGZSLgorLlNwCitUaGUgbWFjcm8gXGYoQ1dcKihDYF9cfF9TVFJJQ1RfQU5TSV9cfF9cKihDJ1xmUiBpcyBwcmVkZWZpbmVkIHdoZW4gdGhlIFxmQlwtYW5zaVxmUgorb3B0aW9uIGlzIHVzZWQuICBTb21lIGhlYWRlciBmaWxlcyBtYXkgbm90aWNlIHRoaXMgbWFjcm8gYW5kIHJlZnJhaW4KK2Zyb20gZGVjbGFyaW5nIGNlcnRhaW4gZnVuY3Rpb25zIG9yIGRlZmluaW5nIGNlcnRhaW4gbWFjcm9zIHRoYXQgdGhlCitcJlxzLTFJU09cczAgc3RhbmRhcmQgZG9lc24ndCBjYWxsIGZvcjsgdGhpcyBpcyB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGFueQorcHJvZ3JhbXMgdGhhdCBtaWdodCB1c2UgdGhlc2UgbmFtZXMgZm9yIG90aGVyIHRoaW5ncy4KKy5TcAorRnVuY3Rpb25zIHRoYXQgYXJlIG5vcm1hbGx5IGJ1aWx0IGluIGJ1dCBkbyBub3QgaGF2ZSBzZW1hbnRpY3MKK2RlZmluZWQgYnkgXHMtMUlTT1xzMCBDIChzdWNoIGFzIFxmKENXXCooQ2BhbGxvY2FcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGZmc1wqKEMnXGZSKSBhcmUgbm90IGJ1aWx0LWluCitmdW5jdGlvbnMgd2hlbiBcZkJcLWFuc2lcZlIgaXMgdXNlZC4KKy5JUCAiXGZCXC1zdGQ9XGZSIiA0CisuSVggSXRlbSAiLXN0ZD0iCitEZXRlcm1pbmUgdGhlIGxhbmd1YWdlIHN0YW5kYXJkLiAgIFRoaXMgb3B0aW9uCitpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgd2hlbiBjb21waWxpbmcgQyBvciBcKihDKy4KKy5TcAorVGhlIGNvbXBpbGVyIGNhbiBhY2NlcHQgc2V2ZXJhbCBiYXNlIHN0YW5kYXJkcywgc3VjaCBhcyBcZkJjOTBcZlIgb3IKK1wmXGZCYysrOThcZlIsIGFuZCBccy0xR05VXHMwIGRpYWxlY3RzIG9mIHRob3NlIHN0YW5kYXJkcywgc3VjaCBhcworXCZcZkJnbnU5MFxmUiBvciBcZkJnbnUrKzk4XGZSLiAgV2hlbiBhIGJhc2Ugc3RhbmRhcmQgaXMgc3BlY2lmaWVkLCB0aGUKK2NvbXBpbGVyIGFjY2VwdHMgYWxsIHByb2dyYW1zIGZvbGxvd2luZyB0aGF0IHN0YW5kYXJkIHBsdXMgdGhvc2UKK3VzaW5nIFxzLTFHTlVcczAgZXh0ZW5zaW9ucyB0aGF0IGRvIG5vdCBjb250cmFkaWN0IGl0LiAgRm9yIGV4YW1wbGUsCitcJlxmQlwtc3RkPWM5MFxmUiB0dXJucyBvZmYgY2VydGFpbiBmZWF0dXJlcyBvZiBccy0xR0NDXHMwIHRoYXQgYXJlCitpbmNvbXBhdGlibGUgd2l0aCBccy0xSVNPXHMwIEM5MCwgc3VjaCBhcyB0aGUgXGYoQ1dcKihDYGFzbVwqKEMnXGZSIGFuZCBcZihDV1wqKENgdHlwZW9mXCooQydcZlIKK2tleXdvcmRzLCBidXQgbm90IG90aGVyIFxzLTFHTlVcczAgZXh0ZW5zaW9ucyB0aGF0IGRvIG5vdCBoYXZlIGEgbWVhbmluZyBpbgorXCZccy0xSVNPXHMwIEM5MCwgc3VjaCBhcyBvbWl0dGluZyB0aGUgbWlkZGxlIHRlcm0gb2YgYSBcZihDV1wqKENgPzpcKihDJ1xmUgorZXhwcmVzc2lvbi4gT24gdGhlIG90aGVyIGhhbmQsIHdoZW4gYSBccy0xR05VXHMwIGRpYWxlY3Qgb2YgYSBzdGFuZGFyZCBpcworc3BlY2lmaWVkLCBhbGwgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlciBhcmUgZW5hYmxlZCwgZXZlbiB3aGVuCit0aG9zZSBmZWF0dXJlcyBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIGJhc2Ugc3RhbmRhcmQuICBBcyBhIHJlc3VsdCwgc29tZQorc3RyaWN0LWNvbmZvcm1pbmcgcHJvZ3JhbXMgbWF5IGJlIHJlamVjdGVkLiAgVGhlIHBhcnRpY3VsYXIgc3RhbmRhcmQKK2lzIHVzZWQgYnkgXGZCXC1XcGVkYW50aWNcZlIgdG8gaWRlbnRpZnkgd2hpY2ggZmVhdHVyZXMgYXJlIFxzLTFHTlVcczAKK2V4dGVuc2lvbnMgZ2l2ZW4gdGhhdCB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZC4gRm9yIGV4YW1wbGUKK1wmXGZCXC1zdGQ9Z251OTAgXC1XcGVkYW50aWNcZlIgd2FybnMgYWJvdXQgXCooQysgc3R5bGUgXGZCLy9cZlIKK2NvbW1lbnRzLCB3aGlsZSBcZkJcLXN0ZD1nbnU5OSBcLVdwZWRhbnRpY1xmUiBkb2VzIG5vdC4KKy5TcAorQSB2YWx1ZSBmb3IgdGhpcyBvcHRpb24gbXVzdCBiZSBwcm92aWRlZDsgcG9zc2libGUgdmFsdWVzIGFyZQorLlJTIDQKKy5JUCAiXGZCYzkwXGZSIiA0CisuSVggSXRlbSAiYzkwIgorLlBEIDAKKy5JUCAiXGZCYzg5XGZSIiA0CisuSVggSXRlbSAiYzg5IgorLklQICJcZkJpc285ODk5OjE5OTBcZlIiIDQKKy5JWCBJdGVtICJpc285ODk5OjE5OTAiCisuUEQKK1N1cHBvcnQgYWxsIFxzLTFJU09cczAgQzkwIHByb2dyYW1zIChjZXJ0YWluIFxzLTFHTlVcczAgZXh0ZW5zaW9ucyB0aGF0IGNvbmZsaWN0Cit3aXRoIFxzLTFJU09cczAgQzkwIGFyZSBkaXNhYmxlZCkuIFNhbWUgYXMgXGZCXC1hbnNpXGZSIGZvciBDIGNvZGUuCisuSVAgIlxmQmlzbzk4OTk6MTk5NDA5XGZSIiA0CisuSVggSXRlbSAiaXNvOTg5OToxOTk0MDkiCitcJlxzLTFJU09cczAgQzkwIGFzIG1vZGlmaWVkIGluIGFtZW5kbWVudCAxLgorLklQICJcZkJjOTlcZlIiIDQKKy5JWCBJdGVtICJjOTkiCisuUEQgMAorLklQICJcZkJjOXhcZlIiIDQKKy5JWCBJdGVtICJjOXgiCisuSVAgIlxmQmlzbzk4OTk6MTk5OVxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5OSIKKy5JUCAiXGZCaXNvOTg5OToxOTl4XGZSIiA0CisuSVggSXRlbSAiaXNvOTg5OToxOTl4IgorLlBECitcJlxzLTFJU09cczAgQzk5LiAgTm90ZSB0aGF0IHRoaXMgc3RhbmRhcmQgaXMgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQ7IHNlZQorPFxmQmh0dHA6Ly9nY2MuZ251Lm9yZy9jOTlzdGF0dXMuaHRtbFxmUj4gZm9yIG1vcmUgaW5mb3JtYXRpb24uICBUaGUKK25hbWVzIFxmQmM5eFxmUiBhbmQgXGZCaXNvOTg5OToxOTl4XGZSIGFyZSBkZXByZWNhdGVkLgorLklQICJcZkJjMTFcZlIiIDQKKy5JWCBJdGVtICJjMTEiCisuUEQgMAorLklQICJcZkJjMXhcZlIiIDQKKy5JWCBJdGVtICJjMXgiCisuSVAgIlxmQmlzbzk4OTk6MjAxMVxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MjAxMSIKKy5QRAorXCZccy0xSVNPXHMwIEMxMSwgdGhlIDIwMTEgcmV2aXNpb24gb2YgdGhlIFxzLTFJU09cczAgQyBzdGFuZGFyZC4KK1N1cHBvcnQgaXMgaW5jb21wbGV0ZSBhbmQgZXhwZXJpbWVudGFsLiAgVGhlIG5hbWUgXGZCYzF4XGZSIGlzCitkZXByZWNhdGVkLgorLklQICJcZkJnbnU5MFxmUiIgNAorLklYIEl0ZW0gImdudTkwIgorLlBEIDAKKy5JUCAiXGZCZ251ODlcZlIiIDQKKy5JWCBJdGVtICJnbnU4OSIKKy5QRAorXCZccy0xR05VXHMwIGRpYWxlY3Qgb2YgXHMtMUlTT1xzMCBDOTAgKGluY2x1ZGluZyBzb21lIEM5OSBmZWF0dXJlcykuIFRoaXMKK2lzIHRoZSBkZWZhdWx0IGZvciBDIGNvZGUuCisuSVAgIlxmQmdudTk5XGZSIiA0CisuSVggSXRlbSAiZ251OTkiCisuUEQgMAorLklQICJcZkJnbnU5eFxmUiIgNAorLklYIEl0ZW0gImdudTl4IgorLlBECitcJlxzLTFHTlVcczAgZGlhbGVjdCBvZiBccy0xSVNPXHMwIEM5OS4gIFdoZW4gXHMtMUlTT1xzMCBDOTkgaXMgZnVsbHkgaW1wbGVtZW50ZWQgaW4gXHMtMUdDQ1xzMCwKK3RoaXMgd2lsbCBiZWNvbWUgdGhlIGRlZmF1bHQuICBUaGUgbmFtZSBcZkJnbnU5eFxmUiBpcyBkZXByZWNhdGVkLgorLklQICJcZkJnbnUxMVxmUiIgNAorLklYIEl0ZW0gImdudTExIgorLlBEIDAKKy5JUCAiXGZCZ251MXhcZlIiIDQKKy5JWCBJdGVtICJnbnUxeCIKKy5QRAorXCZccy0xR05VXHMwIGRpYWxlY3Qgb2YgXHMtMUlTT1xzMCBDMTEuICBTdXBwb3J0IGlzIGluY29tcGxldGUgYW5kIGV4cGVyaW1lbnRhbC4gIFRoZQorbmFtZSBcZkJnbnUxeFxmUiBpcyBkZXByZWNhdGVkLgorLklQICJcZkJjKys5OFxmUiIgNAorLklYIEl0ZW0gImMrKzk4IgorLlBEIDAKKy5JUCAiXGZCYysrMDNcZlIiIDQKKy5JWCBJdGVtICJjKyswMyIKKy5QRAorVGhlIDE5OTggXHMtMUlTT1xzMCBcKihDKyBzdGFuZGFyZCBwbHVzIHRoZSAyMDAzIHRlY2huaWNhbCBjb3JyaWdlbmR1bSBhbmQgc29tZQorYWRkaXRpb25hbCBkZWZlY3QgcmVwb3J0cy4gU2FtZSBhcyBcZkJcLWFuc2lcZlIgZm9yIFwqKEMrIGNvZGUuCisuSVAgIlxmQmdudSsrOThcZlIiIDQKKy5JWCBJdGVtICJnbnUrKzk4IgorLlBEIDAKKy5JUCAiXGZCZ251KyswM1xmUiIgNAorLklYIEl0ZW0gImdudSsrMDMiCisuUEQKK1wmXHMtMUdOVVxzMCBkaWFsZWN0IG9mIFxmQlwtc3RkPWMrKzk4XGZSLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IKK1wmXCooQysgY29kZS4KKy5JUCAiXGZCYysrMTFcZlIiIDQKKy5JWCBJdGVtICJjKysxMSIKKy5QRCAwCisuSVAgIlxmQmMrKzB4XGZSIiA0CisuSVggSXRlbSAiYysrMHgiCisuUEQKK1RoZSAyMDExIFxzLTFJU09cczAgXCooQysgc3RhbmRhcmQgcGx1cyBhbWVuZG1lbnRzLiAgU3VwcG9ydCBmb3IgXCooQysxMSBpcyBzdGlsbAorZXhwZXJpbWVudGFsLCBhbmQgbWF5IGNoYW5nZSBpbiBpbmNvbXBhdGlibGUgd2F5cyBpbiBmdXR1cmUgcmVsZWFzZXMuCitUaGUgbmFtZSBcZkJjKysweFxmUiBpcyBkZXByZWNhdGVkLgorLklQICJcZkJnbnUrKzExXGZSIiA0CisuSVggSXRlbSAiZ251KysxMSIKKy5QRCAwCisuSVAgIlxmQmdudSsrMHhcZlIiIDQKKy5JWCBJdGVtICJnbnUrKzB4IgorLlBECitcJlxzLTFHTlVcczAgZGlhbGVjdCBvZiBcZkJcLXN0ZD1jKysxMVxmUi4gU3VwcG9ydCBmb3IgXCooQysxMSBpcyBzdGlsbAorZXhwZXJpbWVudGFsLCBhbmQgbWF5IGNoYW5nZSBpbiBpbmNvbXBhdGlibGUgd2F5cyBpbiBmdXR1cmUgcmVsZWFzZXMuCitUaGUgbmFtZSBcZkJnbnUrKzB4XGZSIGlzIGRlcHJlY2F0ZWQuCisuSVAgIlxmQmMrKzF5XGZSIiA0CisuSVggSXRlbSAiYysrMXkiCitUaGUgbmV4dCByZXZpc2lvbiBvZiB0aGUgXHMtMUlTT1xzMCBcKihDKyBzdGFuZGFyZCwgdGVudGF0aXZlbHkgcGxhbm5lZCBmb3IKKzIwMTcuICBTdXBwb3J0IGlzIGhpZ2hseSBleHBlcmltZW50YWwsIGFuZCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkKK2NoYW5nZSBpbiBpbmNvbXBhdGlibGUgd2F5cyBpbiBmdXR1cmUgcmVsZWFzZXMuCisuSVAgIlxmQmdudSsrMXlcZlIiIDQKKy5JWCBJdGVtICJnbnUrKzF5IgorXCZccy0xR05VXHMwIGRpYWxlY3Qgb2YgXGZCXC1zdGQ9YysrMXlcZlIuICBTdXBwb3J0IGlzIGhpZ2hseSBleHBlcmltZW50YWwsCithbmQgd2lsbCBhbG1vc3QgY2VydGFpbmx5IGNoYW5nZSBpbiBpbmNvbXBhdGlibGUgd2F5cyBpbiBmdXR1cmUKK3JlbGVhc2VzLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtZmdudTg5XC1pbmxpbmVcZlIiIDQKKy5JWCBJdGVtICItZmdudTg5LWlubGluZSIKK1RoZSBvcHRpb24gXGZCXC1mZ251ODlcLWlubGluZVxmUiB0ZWxscyBccy0xR0NDXHMwIHRvIHVzZSB0aGUgdHJhZGl0aW9uYWwKK1wmXHMtMUdOVVxzMCBzZW1hbnRpY3MgZm9yIFxmKENXXCooQ2BpbmxpbmVcKihDJ1xmUiBmdW5jdGlvbnMgd2hlbiBpbiBDOTkgbW9kZS4KKyAgVGhpcyBvcHRpb24KK2lzIGFjY2VwdGVkIGFuZCBpZ25vcmVkIGJ5IFxzLTFHQ0NcczAgdmVyc2lvbnMgNC4xLjMgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcKKzQuMy4gIEluIFxzLTFHQ0NcczAgdmVyc2lvbnMgNC4zIGFuZCBsYXRlciBpdCBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiBccy0xR0NDXHMwIGluCitDOTkgbW9kZS4gIFVzaW5nIHRoaXMgb3B0aW9uIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBhZGRpbmcgdGhlCitcJlxmKENXXCooQ2BnbnVfaW5saW5lXCooQydcZlIgZnVuY3Rpb24gYXR0cmlidXRlIHRvIGFsbCBpbmxpbmUgZnVuY3Rpb25zLgorLlNwCitUaGUgb3B0aW9uIFxmQlwtZm5vXC1nbnU4OVwtaW5saW5lXGZSIGV4cGxpY2l0bHkgdGVsbHMgXHMtMUdDQ1xzMCB0byB1c2UgdGhlCitDOTkgc2VtYW50aWNzIGZvciBcZihDV1wqKENgaW5saW5lXCooQydcZlIgd2hlbiBpbiBDOTkgb3IgZ251OTkgbW9kZSAoaS5lLiwgaXQKK3NwZWNpZmllcyB0aGUgZGVmYXVsdCBiZWhhdmlvcikuICBUaGlzIG9wdGlvbiB3YXMgZmlyc3Qgc3VwcG9ydGVkIGluCitcJlxzLTFHQ0NcczAgNC4zLiAgVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBcZkJcLXN0ZD1jOTBcZlIgb3IKK1wmXGZCXC1zdGQ9Z251OTBcZlIgbW9kZS4KKy5TcAorVGhlIHByZXByb2Nlc3NvciBtYWNyb3MgXGYoQ1dcKihDYF9cfF9HTlVDX0dOVV9JTkxJTkVfXHxfXCooQydcZlIgYW5kCitcJlxmKENXXCooQ2BfXHxfR05VQ19TVERDX0lOTElORV9cfF9cKihDJ1xmUiBtYXkgYmUgdXNlZCB0byBjaGVjayB3aGljaCBzZW1hbnRpY3MgYXJlCitpbiBlZmZlY3QgZm9yIFxmKENXXCooQ2BpbmxpbmVcKihDJ1xmUiBmdW5jdGlvbnMuCisuSVAgIlxmQlwtYXV4XC1pbmZvXGZSIFxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLWF1eC1pbmZvIGZpbGVuYW1lIgorT3V0cHV0IHRvIHRoZSBnaXZlbiBmaWxlbmFtZSBwcm90b3R5cGVkIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGZ1bmN0aW9ucworZGVjbGFyZWQgYW5kL29yIGRlZmluZWQgaW4gYSB0cmFuc2xhdGlvbiB1bml0LCBpbmNsdWRpbmcgdGhvc2UgaW4gaGVhZGVyCitmaWxlcy4gIFRoaXMgb3B0aW9uIGlzIHNpbGVudGx5IGlnbm9yZWQgaW4gYW55IGxhbmd1YWdlIG90aGVyIHRoYW4gQy4KKy5TcAorQmVzaWRlcyBkZWNsYXJhdGlvbnMsIHRoZSBmaWxlIGluZGljYXRlcywgaW4gY29tbWVudHMsIHRoZSBvcmlnaW4gb2YKK2VhY2ggZGVjbGFyYXRpb24gKHNvdXJjZSBmaWxlIGFuZCBsaW5lKSwgd2hldGhlciB0aGUgZGVjbGFyYXRpb24gd2FzCitpbXBsaWNpdCwgcHJvdG90eXBlZCBvciB1bnByb3RvdHlwZWQgKFxmQklcZlIsIFxmQk5cZlIgZm9yIG5ldyBvcgorXCZcZkJPXGZSIGZvciBvbGQsIHJlc3BlY3RpdmVseSwgaW4gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgbGluZQorbnVtYmVyIGFuZCB0aGUgY29sb24pLCBhbmQgd2hldGhlciBpdCBjYW1lIGZyb20gYSBkZWNsYXJhdGlvbiBvciBhCitkZWZpbml0aW9uIChcZkJDXGZSIG9yIFxmQkZcZlIsIHJlc3BlY3RpdmVseSwgaW4gdGhlIGZvbGxvd2luZworY2hhcmFjdGVyKS4gIEluIHRoZSBjYXNlIG9mIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBhIEsmUlwtc3R5bGUgbGlzdCBvZgorYXJndW1lbnRzIGZvbGxvd2VkIGJ5IHRoZWlyIGRlY2xhcmF0aW9ucyBpcyBhbHNvIHByb3ZpZGVkLCBpbnNpZGUKK2NvbW1lbnRzLCBhZnRlciB0aGUgZGVjbGFyYXRpb24uCisuSVAgIlxmQlwtZmFsbG93XC1wYXJhbWV0ZXJsZXNzXC12YXJpYWRpY1wtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLWZhbGxvdy1wYXJhbWV0ZXJsZXNzLXZhcmlhZGljLWZ1bmN0aW9ucyIKK0FjY2VwdCB2YXJpYWRpYyBmdW5jdGlvbnMgd2l0aG91dCBuYW1lZCBwYXJhbWV0ZXJzLgorLlNwCitBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgc3VjaCBhIGZ1bmN0aW9uLCB0aGlzIGlzIG5vdCB2ZXJ5Cit1c2VmdWwgYXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWQgdGhlIGFyZ3VtZW50cy4gIFRoaXMgaXMgb25seQorc3VwcG9ydGVkIGZvciBDIGFzIHRoaXMgY29uc3RydWN0IGlzIGFsbG93ZWQgYnkgXCooQysuCisuSVAgIlxmQlwtZm5vXC1hc21cZlIiIDQKKy5JWCBJdGVtICItZm5vLWFzbSIKK0RvIG5vdCByZWNvZ25pemUgXGYoQ1dcKihDYGFzbVwqKEMnXGZSLCBcZihDV1wqKENgaW5saW5lXCooQydcZlIgb3IgXGYoQ1dcKihDYHR5cGVvZlwqKEMnXGZSIGFzIGEKK2tleXdvcmQsIHNvIHRoYXQgY29kZSBjYW4gdXNlIHRoZXNlIHdvcmRzIGFzIGlkZW50aWZpZXJzLiAgWW91IGNhbiB1c2UKK3RoZSBrZXl3b3JkcyBcZihDV1wqKENgX1x8X2FzbV9cfF9cKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF9pbmxpbmVfXHxfXCooQydcZlIgYW5kIFxmKENXXCooQ2BfXHxfdHlwZW9mX1x8X1wqKEMnXGZSCitpbnN0ZWFkLiAgXGZCXC1hbnNpXGZSIGltcGxpZXMgXGZCXC1mbm9cLWFzbVxmUi4KKy5TcAorSW4gXCooQyssIHRoaXMgc3dpdGNoIG9ubHkgYWZmZWN0cyB0aGUgXGYoQ1dcKihDYHR5cGVvZlwqKEMnXGZSIGtleXdvcmQsIHNpbmNlCitcJlxmKENXXCooQ2Bhc21cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGlubGluZVwqKEMnXGZSIGFyZSBzdGFuZGFyZCBrZXl3b3Jkcy4gIFlvdSBtYXkgd2FudCB0bwordXNlIHRoZSBcZkJcLWZub1wtZ251XC1rZXl3b3Jkc1xmUiBmbGFnIGluc3RlYWQsIHdoaWNoIGhhcyB0aGUgc2FtZQorZWZmZWN0LiAgSW4gQzk5IG1vZGUgKFxmQlwtc3RkPWM5OVxmUiBvciBcZkJcLXN0ZD1nbnU5OVxmUiksIHRoaXMKK3N3aXRjaCBvbmx5IGFmZmVjdHMgdGhlIFxmKENXXCooQ2Bhc21cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHR5cGVvZlwqKEMnXGZSIGtleXdvcmRzLCBzaW5jZQorXCZcZihDV1wqKENgaW5saW5lXCooQydcZlIgaXMgYSBzdGFuZGFyZCBrZXl3b3JkIGluIFxzLTFJU09cczAgQzk5LgorLklQICJcZkJcLWZub1wtYnVpbHRpblxmUiIgNAorLklYIEl0ZW0gIi1mbm8tYnVpbHRpbiIKKy5QRCAwCisuSVAgIlxmQlwtZm5vXC1idWlsdGluXC1cZlJcZklmdW5jdGlvblxmUiIgNAorLklYIEl0ZW0gIi1mbm8tYnVpbHRpbi1mdW5jdGlvbiIKKy5QRAorRG9uJ3QgcmVjb2duaXplIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBiZWdpbiB3aXRoCitcJlxmQl9cfF9idWlsdGluX1xmUiBhcyBwcmVmaXguCisuU3AKK1wmXHMtMUdDQ1xzMCBub3JtYWxseSBnZW5lcmF0ZXMgc3BlY2lhbCBjb2RlIHRvIGhhbmRsZSBjZXJ0YWluIGJ1aWx0LWluIGZ1bmN0aW9ucworbW9yZSBlZmZpY2llbnRseTsgZm9yIGluc3RhbmNlLCBjYWxscyB0byBcZihDV1wqKENgYWxsb2NhXCooQydcZlIgbWF5IGJlY29tZSBzaW5nbGUKK2luc3RydWN0aW9ucyB3aGljaCBhZGp1c3QgdGhlIHN0YWNrIGRpcmVjdGx5LCBhbmQgY2FsbHMgdG8gXGYoQ1dcKihDYG1lbWNweVwqKEMnXGZSCittYXkgYmVjb21lIGlubGluZSBjb3B5IGxvb3BzLiAgVGhlIHJlc3VsdGluZyBjb2RlIGlzIG9mdGVuIGJvdGggc21hbGxlcgorYW5kIGZhc3RlciwgYnV0IHNpbmNlIHRoZSBmdW5jdGlvbiBjYWxscyBubyBsb25nZXIgYXBwZWFyIGFzIHN1Y2gsIHlvdQorY2Fubm90IHNldCBhIGJyZWFrcG9pbnQgb24gdGhvc2UgY2FsbHMsIG5vciBjYW4geW91IGNoYW5nZSB0aGUgYmVoYXZpb3IKK29mIHRoZSBmdW5jdGlvbnMgYnkgbGlua2luZyB3aXRoIGEgZGlmZmVyZW50IGxpYnJhcnkuICBJbiBhZGRpdGlvbiwKK3doZW4gYSBmdW5jdGlvbiBpcyByZWNvZ25pemVkIGFzIGEgYnVpbHQtaW4gZnVuY3Rpb24sIFxzLTFHQ0NcczAgbWF5IHVzZQoraW5mb3JtYXRpb24gYWJvdXQgdGhhdCBmdW5jdGlvbiB0byB3YXJuIGFib3V0IHByb2JsZW1zIHdpdGggY2FsbHMgdG8KK3RoYXQgZnVuY3Rpb24sIG9yIHRvIGdlbmVyYXRlIG1vcmUgZWZmaWNpZW50IGNvZGUsIGV2ZW4gaWYgdGhlCityZXN1bHRpbmcgY29kZSBzdGlsbCBjb250YWlucyBjYWxscyB0byB0aGF0IGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsCit3YXJuaW5ncyBhcmUgZ2l2ZW4gd2l0aCBcZkJcLVdmb3JtYXRcZlIgZm9yIGJhZCBjYWxscyB0bworXCZcZihDV1wqKENgcHJpbnRmXCooQydcZlIgd2hlbiBcZihDV1wqKENgcHJpbnRmXCooQydcZlIgaXMgYnVpbHQgaW4gYW5kIFxmKENXXCooQ2BzdHJsZW5cKihDJ1xmUiBpcwora25vd24gbm90IHRvIG1vZGlmeSBnbG9iYWwgbWVtb3J5LgorLlNwCitXaXRoIHRoZSBcZkJcLWZub1wtYnVpbHRpblwtXGZSXGZJZnVuY3Rpb25cZlIgb3B0aW9uCitvbmx5IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBcZklmdW5jdGlvblxmUiBpcworZGlzYWJsZWQuICBcZklmdW5jdGlvblxmUiBtdXN0IG5vdCBiZWdpbiB3aXRoIFxmQl9cfF9idWlsdGluX1xmUi4gIElmIGEKK2Z1bmN0aW9uIGlzIG5hbWVkIHRoYXQgaXMgbm90IGJ1aWx0LWluIGluIHRoaXMgdmVyc2lvbiBvZiBccy0xR0NDXHMwLCB0aGlzCitvcHRpb24gaXMgaWdub3JlZC4gIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcKK1wmXGZCXC1mYnVpbHRpblwtXGZSXGZJZnVuY3Rpb25cZlIgb3B0aW9uOyBpZiB5b3Ugd2lzaCB0byBlbmFibGUKK2J1aWx0LWluIGZ1bmN0aW9ucyBzZWxlY3RpdmVseSB3aGVuIHVzaW5nIFxmQlwtZm5vXC1idWlsdGluXGZSIG9yCitcJlxmQlwtZmZyZWVzdGFuZGluZ1xmUiwgeW91IG1heSBkZWZpbmUgbWFjcm9zIHN1Y2ggYXM6CisuU3AKKy5WYiAyCitcJiAgICAgICAgI2RlZmluZSBhYnMobikgICAgICAgICAgX1x8X2J1aWx0aW5fYWJzICgobikpCitcJiAgICAgICAgI2RlZmluZSBzdHJjcHkoZCwgcykgICAgX1x8X2J1aWx0aW5fc3RyY3B5ICgoZCksIChzKSkKKy5WZQorLklQICJcZkJcLWZob3N0ZWRcZlIiIDQKKy5JWCBJdGVtICItZmhvc3RlZCIKK0Fzc2VydCB0aGF0IGNvbXBpbGF0aW9uIHRhcmdldHMgYSBob3N0ZWQgZW52aXJvbm1lbnQuICBUaGlzIGltcGxpZXMKK1wmXGZCXC1mYnVpbHRpblxmUi4gIEEgaG9zdGVkIGVudmlyb25tZW50IGlzIG9uZSBpbiB3aGljaCB0aGUKK2VudGlyZSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGF2YWlsYWJsZSwgYW5kIGluIHdoaWNoIFxmKENXXCooQ2BtYWluXCooQydcZlIgaGFzIGEgcmV0dXJuCit0eXBlIG9mIFxmKENXXCooQ2BpbnRcKihDJ1xmUi4gIEV4YW1wbGVzIGFyZSBuZWFybHkgZXZlcnl0aGluZyBleGNlcHQgYSBrZXJuZWwuCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1mbm9cLWZyZWVzdGFuZGluZ1xmUi4KKy5JUCAiXGZCXC1mZnJlZXN0YW5kaW5nXGZSIiA0CisuSVggSXRlbSAiLWZmcmVlc3RhbmRpbmciCitBc3NlcnQgdGhhdCBjb21waWxhdGlvbiB0YXJnZXRzIGEgZnJlZXN0YW5kaW5nIGVudmlyb25tZW50LiAgVGhpcworaW1wbGllcyBcZkJcLWZub1wtYnVpbHRpblxmUi4gIEEgZnJlZXN0YW5kaW5nIGVudmlyb25tZW50CitpcyBvbmUgaW4gd2hpY2ggdGhlIHN0YW5kYXJkIGxpYnJhcnkgbWF5IG5vdCBleGlzdCwgYW5kIHByb2dyYW0gc3RhcnR1cCBtYXkKK25vdCBuZWNlc3NhcmlseSBiZSBhdCBcZihDV1wqKENgbWFpblwqKEMnXGZSLiAgVGhlIG1vc3Qgb2J2aW91cyBleGFtcGxlIGlzIGFuIFxzLTFPU1xzMCBrZXJuZWwuCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1mbm9cLWhvc3RlZFxmUi4KKy5JUCAiXGZCXC1mb3Blbm1wXGZSIiA0CisuSVggSXRlbSAiLWZvcGVubXAiCitFbmFibGUgaGFuZGxpbmcgb2YgT3Blbk1QIGRpcmVjdGl2ZXMgXGYoQ1dcKihDYCNwcmFnbWEgb21wXCooQydcZlIgaW4gQy9cKihDKyBhbmQKK1wmXGYoQ1dcKihDYCEkb21wXCooQydcZlIgaW4gRm9ydHJhbi4gIFdoZW4gXGZCXC1mb3Blbm1wXGZSIGlzIHNwZWNpZmllZCwgdGhlCitjb21waWxlciBnZW5lcmF0ZXMgcGFyYWxsZWwgY29kZSBhY2NvcmRpbmcgdG8gdGhlIE9wZW5NUCBBcHBsaWNhdGlvbgorUHJvZ3JhbSBJbnRlcmZhY2UgdjMuMCA8XGZCaHR0cDovL3d3dy5vcGVubXAub3JnL1xmUj4uICBUaGlzIG9wdGlvbgoraW1wbGllcyBcZkJcLXB0aHJlYWRcZlIsIGFuZCB0aHVzIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHRhcmdldHMgdGhhdAoraGF2ZSBzdXBwb3J0IGZvciBcZkJcLXB0aHJlYWRcZlIuCisuSVAgIlxmQlwtZmdudVwtdG1cZlIiIDQKKy5JWCBJdGVtICItZmdudS10bSIKK1doZW4gdGhlIG9wdGlvbiBcZkJcLWZnbnVcLXRtXGZSIGlzIHNwZWNpZmllZCwgdGhlIGNvbXBpbGVyCitnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIExpbnV4IHZhcmlhbnQgb2YgSW50ZWwncyBjdXJyZW50IFRyYW5zYWN0aW9uYWwKK01lbW9yeSBccy0xQUJJXHMwIHNwZWNpZmljYXRpb24gZG9jdW1lbnQgKFJldmlzaW9uIDEuMSwgTWF5IDYgMjAwOSkuICBUaGlzIGlzCithbiBleHBlcmltZW50YWwgZmVhdHVyZSB3aG9zZSBpbnRlcmZhY2UgbWF5IGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMKK29mIFxzLTFHQ0NcczAsIGFzIHRoZSBvZmZpY2lhbCBzcGVjaWZpY2F0aW9uIGNoYW5nZXMuICBQbGVhc2Ugbm90ZSB0aGF0IG5vdAorYWxsIGFyY2hpdGVjdHVyZXMgYXJlIHN1cHBvcnRlZCBmb3IgdGhpcyBmZWF0dXJlLgorLlNwCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBccy0xR0NDXHMwJ3Mgc3VwcG9ydCBmb3IgdHJhbnNhY3Rpb25hbCBtZW1vcnksCisuU3AKK05vdGUgdGhhdCB0aGUgdHJhbnNhY3Rpb25hbCBtZW1vcnkgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIHdpdGgKK25vbi1jYWxsIGV4Y2VwdGlvbnMgKFxmQlwtZm5vblwtY2FsbFwtZXhjZXB0aW9uc1xmUikuCisuSVAgIlxmQlwtZm1zXC1leHRlbnNpb25zXGZSIiA0CisuSVggSXRlbSAiLWZtcy1leHRlbnNpb25zIgorQWNjZXB0IHNvbWUgbm9uLXN0YW5kYXJkIGNvbnN0cnVjdHMgdXNlZCBpbiBNaWNyb3NvZnQgaGVhZGVyIGZpbGVzLgorLlNwCitJbiBcKihDKyBjb2RlLCB0aGlzIGFsbG93cyBtZW1iZXIgbmFtZXMgaW4gc3RydWN0dXJlcyB0byBiZSBzaW1pbGFyCit0byBwcmV2aW91cyB0eXBlcyBkZWNsYXJhdGlvbnMuCisuU3AKKy5WYiA0CitcJiAgICAgICAgdHlwZWRlZiBpbnQgVU9XOworXCYgICAgICAgIHN0cnVjdCBBQkMgeworXCYgICAgICAgICAgVU9XIFVPVzsKK1wmICAgICAgICB9OworLlZlCisuU3AKK1NvbWUgY2FzZXMgb2YgdW5uYW1lZCBmaWVsZHMgaW4gc3RydWN0dXJlcyBhbmQgdW5pb25zIGFyZSBvbmx5CithY2NlcHRlZCB3aXRoIHRoaXMgb3B0aW9uLgorLklQICJcZkJcLWZwbGFuOVwtZXh0ZW5zaW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mcGxhbjktZXh0ZW5zaW9ucyIKK0FjY2VwdCBzb21lIG5vbi1zdGFuZGFyZCBjb25zdHJ1Y3RzIHVzZWQgaW4gUGxhbiA5IGNvZGUuCisuU3AKK1RoaXMgZW5hYmxlcyBcZkJcLWZtc1wtZXh0ZW5zaW9uc1xmUiwgcGVybWl0cyBwYXNzaW5nIHBvaW50ZXJzIHRvCitzdHJ1Y3R1cmVzIHdpdGggYW5vbnltb3VzIGZpZWxkcyB0byBmdW5jdGlvbnMgdGhhdCBleHBlY3QgcG9pbnRlcnMgdG8KK2VsZW1lbnRzIG9mIHRoZSB0eXBlIG9mIHRoZSBmaWVsZCwgYW5kIHBlcm1pdHMgcmVmZXJyaW5nIHRvIGFub255bW91cworZmllbGRzIGRlY2xhcmVkIHVzaW5nIGEgdHlwZWRlZi4gICAgVGhpcyBpcyBvbmx5CitzdXBwb3J0ZWQgZm9yIEMsIG5vdCBcKihDKy4KKy5JUCAiXGZCXC10cmlncmFwaHNcZlIiIDQKKy5JWCBJdGVtICItdHJpZ3JhcGhzIgorU3VwcG9ydCBccy0xSVNPXHMwIEMgdHJpZ3JhcGhzLiAgVGhlIFxmQlwtYW5zaVxmUiBvcHRpb24gKGFuZCBcZkJcLXN0ZFxmUgorb3B0aW9ucyBmb3Igc3RyaWN0IFxzLTFJU09cczAgQyBjb25mb3JtYW5jZSkgaW1wbGllcyBcZkJcLXRyaWdyYXBoc1xmUi4KKy5JUCAiXGZCXC10cmFkaXRpb25hbFxmUiIgNAorLklYIEl0ZW0gIi10cmFkaXRpb25hbCIKKy5QRCAwCisuSVAgIlxmQlwtdHJhZGl0aW9uYWxcLWNwcFxmUiIgNAorLklYIEl0ZW0gIi10cmFkaXRpb25hbC1jcHAiCisuUEQKK0Zvcm1lcmx5LCB0aGVzZSBvcHRpb25zIGNhdXNlZCBccy0xR0NDXHMwIHRvIGF0dGVtcHQgdG8gZW11bGF0ZSBhIHByZS1zdGFuZGFyZAorQyBjb21waWxlci4gIFRoZXkgYXJlIG5vdyBvbmx5IHN1cHBvcnRlZCB3aXRoIHRoZSBcZkJcLUVcZlIgc3dpdGNoLgorVGhlIHByZXByb2Nlc3NvciBjb250aW51ZXMgdG8gc3VwcG9ydCBhIHByZS1zdGFuZGFyZCBtb2RlLiAgU2VlIHRoZSBccy0xR05VXHMwCitcJlxzLTFDUFBcczAgbWFudWFsIGZvciBkZXRhaWxzLgorLklQICJcZkJcLWZjb25kXC1taXNtYXRjaFxmUiIgNAorLklYIEl0ZW0gIi1mY29uZC1taXNtYXRjaCIKK0FsbG93IGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIHdpdGggbWlzbWF0Y2hlZCB0eXBlcyBpbiB0aGUgc2Vjb25kIGFuZAordGhpcmQgYXJndW1lbnRzLiAgVGhlIHZhbHVlIG9mIHN1Y2ggYW4gZXhwcmVzc2lvbiBpcyB2b2lkLiAgVGhpcyBvcHRpb24KK2lzIG5vdCBzdXBwb3J0ZWQgZm9yIFwqKEMrLgorLklQICJcZkJcLWZsYXhcLXZlY3RvclwtY29udmVyc2lvbnNcZlIiIDQKKy5JWCBJdGVtICItZmxheC12ZWN0b3ItY29udmVyc2lvbnMiCitBbGxvdyBpbXBsaWNpdCBjb252ZXJzaW9ucyBiZXR3ZWVuIHZlY3RvcnMgd2l0aCBkaWZmZXJpbmcgbnVtYmVycyBvZgorZWxlbWVudHMgYW5kL29yIGluY29tcGF0aWJsZSBlbGVtZW50IHR5cGVzLiAgVGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZQordXNlZCBmb3IgbmV3IGNvZGUuCisuSVAgIlxmQlwtZnVuc2lnbmVkXC1jaGFyXGZSIiA0CisuSVggSXRlbSAiLWZ1bnNpZ25lZC1jaGFyIgorTGV0IHRoZSB0eXBlIFxmKENXXCooQ2BjaGFyXCooQydcZlIgYmUgdW5zaWduZWQsIGxpa2UgXGYoQ1dcKihDYHVuc2lnbmVkIGNoYXJcKihDJ1xmUi4KKy5TcAorRWFjaCBraW5kIG9mIG1hY2hpbmUgaGFzIGEgZGVmYXVsdCBmb3Igd2hhdCBcZihDV1wqKENgY2hhclwqKEMnXGZSIHNob3VsZAorYmUuICBJdCBpcyBlaXRoZXIgbGlrZSBcZihDV1wqKENgdW5zaWduZWQgY2hhclwqKEMnXGZSIGJ5IGRlZmF1bHQgb3IgbGlrZQorXCZcZihDV1wqKENgc2lnbmVkIGNoYXJcKihDJ1xmUiBieSBkZWZhdWx0LgorLlNwCitJZGVhbGx5LCBhIHBvcnRhYmxlIHByb2dyYW0gc2hvdWxkIGFsd2F5cyB1c2UgXGYoQ1dcKihDYHNpZ25lZCBjaGFyXCooQydcZlIgb3IKK1wmXGYoQ1dcKihDYHVuc2lnbmVkIGNoYXJcKihDJ1xmUiB3aGVuIGl0IGRlcGVuZHMgb24gdGhlIHNpZ25lZG5lc3Mgb2YgYW4gb2JqZWN0LgorQnV0IG1hbnkgcHJvZ3JhbXMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdXNlIHBsYWluIFxmKENXXCooQ2BjaGFyXCooQydcZlIgYW5kCitleHBlY3QgaXQgdG8gYmUgc2lnbmVkLCBvciBleHBlY3QgaXQgdG8gYmUgdW5zaWduZWQsIGRlcGVuZGluZyBvbiB0aGUKK21hY2hpbmVzIHRoZXkgd2VyZSB3cml0dGVuIGZvci4gIFRoaXMgb3B0aW9uLCBhbmQgaXRzIGludmVyc2UsIGxldCB5b3UKK21ha2Ugc3VjaCBhIHByb2dyYW0gd29yayB3aXRoIHRoZSBvcHBvc2l0ZSBkZWZhdWx0LgorLlNwCitUaGUgdHlwZSBcZihDV1wqKENgY2hhclwqKEMnXGZSIGlzIGFsd2F5cyBhIGRpc3RpbmN0IHR5cGUgZnJvbSBlYWNoIG9mCitcJlxmKENXXCooQ2BzaWduZWQgY2hhclwqKEMnXGZSIG9yIFxmKENXXCooQ2B1bnNpZ25lZCBjaGFyXCooQydcZlIsIGV2ZW4gdGhvdWdoIGl0cyBiZWhhdmlvcgoraXMgYWx3YXlzIGp1c3QgbGlrZSBvbmUgb2YgdGhvc2UgdHdvLgorLklQICJcZkJcLWZzaWduZWRcLWNoYXJcZlIiIDQKKy5JWCBJdGVtICItZnNpZ25lZC1jaGFyIgorTGV0IHRoZSB0eXBlIFxmKENXXCooQ2BjaGFyXCooQydcZlIgYmUgc2lnbmVkLCBsaWtlIFxmKENXXCooQ2BzaWduZWQgY2hhclwqKEMnXGZSLgorLlNwCitOb3RlIHRoYXQgdGhpcyBpcyBlcXVpdmFsZW50IHRvIFxmQlwtZm5vXC11bnNpZ25lZFwtY2hhclxmUiwgd2hpY2ggaXMKK3RoZSBuZWdhdGl2ZSBmb3JtIG9mIFxmQlwtZnVuc2lnbmVkXC1jaGFyXGZSLiAgTGlrZXdpc2UsIHRoZSBvcHRpb24KK1wmXGZCXC1mbm9cLXNpZ25lZFwtY2hhclxmUiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtZnVuc2lnbmVkXC1jaGFyXGZSLgorLklQICJcZkJcLWZzaWduZWRcLWJpdGZpZWxkc1xmUiIgNAorLklYIEl0ZW0gIi1mc2lnbmVkLWJpdGZpZWxkcyIKKy5QRCAwCisuSVAgIlxmQlwtZnVuc2lnbmVkXC1iaXRmaWVsZHNcZlIiIDQKKy5JWCBJdGVtICItZnVuc2lnbmVkLWJpdGZpZWxkcyIKKy5JUCAiXGZCXC1mbm9cLXNpZ25lZFwtYml0ZmllbGRzXGZSIiA0CisuSVggSXRlbSAiLWZuby1zaWduZWQtYml0ZmllbGRzIgorLklQICJcZkJcLWZub1wtdW5zaWduZWRcLWJpdGZpZWxkc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tdW5zaWduZWQtYml0ZmllbGRzIgorLlBECitUaGVzZSBvcHRpb25zIGNvbnRyb2wgd2hldGhlciBhIGJpdC1maWVsZCBpcyBzaWduZWQgb3IgdW5zaWduZWQsIHdoZW4gdGhlCitkZWNsYXJhdGlvbiBkb2VzIG5vdCB1c2UgZWl0aGVyIFxmKENXXCooQ2BzaWduZWRcKihDJ1xmUiBvciBcZihDV1wqKENgdW5zaWduZWRcKihDJ1xmUi4gIEJ5CitkZWZhdWx0LCBzdWNoIGEgYml0LWZpZWxkIGlzIHNpZ25lZCwgYmVjYXVzZSB0aGlzIGlzIGNvbnNpc3RlbnQ6IHRoZQorYmFzaWMgaW50ZWdlciB0eXBlcyBzdWNoIGFzIFxmKENXXCooQ2BpbnRcKihDJ1xmUiBhcmUgc2lnbmVkIHR5cGVzLgorLlNTICJPcHRpb25zIENvbnRyb2xsaW5nIFwqKEMrIERpYWxlY3QiCisuSVggU3Vic2VjdGlvbiAiT3B0aW9ucyBDb250cm9sbGluZyAgRGlhbGVjdCIKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgYXJlIG9ubHkgbWVhbmluZ2Z1bAorZm9yIFwqKEMrIHByb2dyYW1zLiAgWW91IGNhbiBhbHNvIHVzZSBtb3N0IG9mIHRoZSBccy0xR05VXHMwIGNvbXBpbGVyIG9wdGlvbnMKK3JlZ2FyZGxlc3Mgb2Ygd2hhdCBsYW5ndWFnZSB5b3VyIHByb2dyYW0gaXMgaW4uICBGb3IgZXhhbXBsZSwgeW91CittaWdodCBjb21waWxlIGEgZmlsZSBcZihDV1wqKENgZmlyc3RDbGFzcy5DXCooQydcZlIgbGlrZSB0aGlzOgorLlBQCisuVmIgMQorXCYgICAgICAgIGcrKyBcLWcgXC1mcmVwbyBcLU8gXC1jIGZpcnN0Q2xhc3MuQworLlZlCisuUFAKK0luIHRoaXMgZXhhbXBsZSwgb25seSBcZkJcLWZyZXBvXGZSIGlzIGFuIG9wdGlvbiBtZWFudAorb25seSBmb3IgXCooQysgcHJvZ3JhbXM7IHlvdSBjYW4gdXNlIHRoZSBvdGhlciBvcHRpb25zIHdpdGggYW55CitsYW5ndWFnZSBzdXBwb3J0ZWQgYnkgXHMtMUdDQ1xzMC4KKy5QUAorSGVyZSBpcyBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IGFyZSBcZklvbmx5XGZSIGZvciBjb21waWxpbmcgXCooQysgcHJvZ3JhbXM6CisuSVAgIlxmQlwtZmFiaVwtdmVyc2lvbj1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZhYmktdmVyc2lvbj1uIgorVXNlIHZlcnNpb24gXGZJblxmUiBvZiB0aGUgXCooQysgXHMtMUFCSVxzMC4gIFRoZSBkZWZhdWx0IGlzIHZlcnNpb24gMi4KKy5TcAorVmVyc2lvbiAwIHJlZmVycyB0byB0aGUgdmVyc2lvbiBjb25mb3JtaW5nIG1vc3QgY2xvc2VseSB0bwordGhlIFwqKEMrIFxzLTFBQklcczAgc3BlY2lmaWNhdGlvbi4gIFRoZXJlZm9yZSwgdGhlIFxzLTFBQklcczAgb2J0YWluZWQgdXNpbmcgdmVyc2lvbiAwCit3aWxsIGNoYW5nZSBpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgRysrIGFzIFxzLTFBQklcczAgYnVncyBhcmUgZml4ZWQuCisuU3AKK1ZlcnNpb24gMSBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgXCooQysgXHMtMUFCSVxzMCB0aGF0IGZpcnN0IGFwcGVhcmVkIGluIEcrKyAzLjIuCisuU3AKK1ZlcnNpb24gMiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgXCooQysgXHMtMUFCSVxzMCB0aGF0IGZpcnN0IGFwcGVhcmVkIGluIEcrKyAzLjQuCisuU3AKK1ZlcnNpb24gMyBjb3JyZWN0cyBhbiBlcnJvciBpbiBtYW5nbGluZyBhIGNvbnN0YW50IGFkZHJlc3MgYXMgYQordGVtcGxhdGUgYXJndW1lbnQuCisuU3AKK1ZlcnNpb24gNCwgd2hpY2ggZmlyc3QgYXBwZWFyZWQgaW4gRysrIDQuNSwgaW1wbGVtZW50cyBhIHN0YW5kYXJkCittYW5nbGluZyBmb3IgdmVjdG9yIHR5cGVzLgorLlNwCitWZXJzaW9uIDUsIHdoaWNoIGZpcnN0IGFwcGVhcmVkIGluIEcrKyA0LjYsIGNvcnJlY3RzIHRoZSBtYW5nbGluZyBvZgorYXR0cmlidXRlIGNvbnN0L3ZvbGF0aWxlIG9uIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMsIGRlY2x0eXBlIG9mIGEKK3BsYWluIGRlY2wsIGFuZCB1c2Ugb2YgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgaW4gdGhlIGRlY2xhcmF0aW9uIG9mCithbm90aGVyIHBhcmFtZXRlci4KKy5TcAorVmVyc2lvbiA2LCB3aGljaCBmaXJzdCBhcHBlYXJlZCBpbiBHKysgNC43LCBjb3JyZWN0cyB0aGUgcHJvbW90aW9uCitiZWhhdmlvciBvZiBcKihDKzExIHNjb3BlZCBlbnVtcyBhbmQgdGhlIG1hbmdsaW5nIG9mIHRlbXBsYXRlIGFyZ3VtZW50CitwYWNrcywgY29uc3Qvc3RhdGljX2Nhc3QsIHByZWZpeCArKyBhbmQgXC1cLSwgYW5kIGEgY2xhc3Mgc2NvcGUgZnVuY3Rpb24KK3VzZWQgYXMgYSB0ZW1wbGF0ZSBhcmd1bWVudC4KKy5TcAorU2VlIGFsc28gXGZCXC1XYWJpXGZSLgorLklQICJcZkJcLWZub1wtYWNjZXNzXC1jb250cm9sXGZSIiA0CisuSVggSXRlbSAiLWZuby1hY2Nlc3MtY29udHJvbCIKK1R1cm4gb2ZmIGFsbCBhY2Nlc3MgY2hlY2tpbmcuICBUaGlzIHN3aXRjaCBpcyBtYWlubHkgdXNlZnVsIGZvciB3b3JraW5nCithcm91bmQgYnVncyBpbiB0aGUgYWNjZXNzIGNvbnRyb2wgY29kZS4KKy5JUCAiXGZCXC1mY2hlY2tcLW5ld1xmUiIgNAorLklYIEl0ZW0gIi1mY2hlY2stbmV3IgorQ2hlY2sgdGhhdCB0aGUgcG9pbnRlciByZXR1cm5lZCBieSBcZihDV1wqKENgb3BlcmF0b3IgbmV3XCooQydcZlIgaXMgbm9uLW51bGwKK2JlZm9yZSBhdHRlbXB0aW5nIHRvIG1vZGlmeSB0aGUgc3RvcmFnZSBhbGxvY2F0ZWQuICBUaGlzIGNoZWNrIGlzCitub3JtYWxseSB1bm5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBcKihDKyBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdAorXCZcZihDV1wqKENgb3BlcmF0b3IgbmV3XCooQydcZlIgb25seSByZXR1cm5zIFxmKENXMFxmUiBpZiBpdCBpcyBkZWNsYXJlZAorXCZcZkJcZihCSXRocm93KClcZkJcZlIsIGluIHdoaWNoIGNhc2UgdGhlIGNvbXBpbGVyIGFsd2F5cyBjaGVja3MgdGhlCityZXR1cm4gdmFsdWUgZXZlbiB3aXRob3V0IHRoaXMgb3B0aW9uLiAgSW4gYWxsIG90aGVyIGNhc2VzLCB3aGVuCitcJlxmKENXXCooQ2BvcGVyYXRvciBuZXdcKihDJ1xmUiBoYXMgYSBub24tZW1wdHkgZXhjZXB0aW9uIHNwZWNpZmljYXRpb24sIG1lbW9yeQorZXhoYXVzdGlvbiBpcyBzaWduYWxsZWQgYnkgdGhyb3dpbmcgXGYoQ1dcKihDYHN0ZDo6YmFkX2FsbG9jXCooQydcZlIuICBTZWUgYWxzbworXCZcZkJuZXcgKG5vdGhyb3cpXGZSLgorLklQICJcZkJcLWZjb25zdGV4cHJcLWRlcHRoPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZmNvbnN0ZXhwci1kZXB0aD1uIgorU2V0IHRoZSBtYXhpbXVtIG5lc3RlZCBldmFsdWF0aW9uIGRlcHRoIGZvciBcKihDKzExIGNvbnN0ZXhwciBmdW5jdGlvbnMKK3RvIFxmSW5cZlIuICBBIGxpbWl0IGlzIG5lZWRlZCB0byBkZXRlY3QgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nCitjb25zdGFudCBleHByZXNzaW9uIGV2YWx1YXRpb24uICBUaGUgbWluaW11bSBzcGVjaWZpZWQgYnkgdGhlIHN0YW5kYXJkCitpcyA1MTIuCisuSVAgIlxmQlwtZmRlZHVjZVwtaW5pdFwtbGlzdFxmUiIgNAorLklYIEl0ZW0gIi1mZGVkdWNlLWluaXQtbGlzdCIKK0VuYWJsZSBkZWR1Y3Rpb24gb2YgYSB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlciBhcworXCZcZihDV1wqKENgc3RkOjppbml0aWFsaXplcl9saXN0XCooQydcZlIgZnJvbSBhIGJyYWNlLWVuY2xvc2VkIGluaXRpYWxpemVyIGxpc3QsIGkuZS4KKy5TcAorLlZiIDQKK1wmICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gYXV0byBmb3J3YXJkKFQgdCkgXC0+IGRlY2x0eXBlIChyZWFsZm4gKHQpKQorXCYgICAgICAgIHsKK1wmICAgICAgICAgIHJldHVybiByZWFsZm4gKHQpOworXCYgICAgICAgIH0KK1wmICAgICAgICAKK1wmICAgICAgICB2b2lkIGYoKQorXCYgICAgICAgIHsKK1wmICAgICAgICAgIGZvcndhcmQoezEsMn0pOyAvLyBjYWxsIGZvcndhcmQ8c3RkOjppbml0aWFsaXplcl9saXN0PGludD4+CitcJiAgICAgICAgfQorLlZlCisuU3AKK1RoaXMgZGVkdWN0aW9uIHdhcyBpbXBsZW1lbnRlZCBhcyBhIHBvc3NpYmxlIGV4dGVuc2lvbiB0byB0aGUKK29yaWdpbmFsbHkgcHJvcG9zZWQgc2VtYW50aWNzIGZvciB0aGUgXCooQysxMSBzdGFuZGFyZCwgYnV0IHdhcyBub3QgcGFydAorb2YgdGhlIGZpbmFsIHN0YW5kYXJkLCBzbyBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVGhpcyBvcHRpb24gaXMKK2RlcHJlY2F0ZWQsIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEcrKy4KKy5JUCAiXGZCXC1mZnJpZW5kXC1pbmplY3Rpb25cZlIiIDQKKy5JWCBJdGVtICItZmZyaWVuZC1pbmplY3Rpb24iCitJbmplY3QgZnJpZW5kIGZ1bmN0aW9ucyBpbnRvIHRoZSBlbmNsb3NpbmcgbmFtZXNwYWNlLCBzbyB0aGF0IHRoZXkgYXJlCit2aXNpYmxlIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBjbGFzcyBpbiB3aGljaCB0aGV5IGFyZSBkZWNsYXJlZC4KK0ZyaWVuZCBmdW5jdGlvbnMgd2VyZSBkb2N1bWVudGVkIHRvIHdvcmsgdGhpcyB3YXkgaW4gdGhlIG9sZCBBbm5vdGF0ZWQKK1wmXCooQysgUmVmZXJlbmNlIE1hbnVhbCwgYW5kIHZlcnNpb25zIG9mIEcrKyBiZWZvcmUgNC4xIGFsd2F5cyB3b3JrZWQKK3RoYXQgd2F5LiAgSG93ZXZlciwgaW4gXHMtMUlTT1xzMCBcKihDKyBhIGZyaWVuZCBmdW5jdGlvbiB0aGF0IGlzIG5vdCBkZWNsYXJlZAoraW4gYW4gZW5jbG9zaW5nIHNjb3BlIGNhbiBvbmx5IGJlIGZvdW5kIHVzaW5nIGFyZ3VtZW50IGRlcGVuZGVudAorbG9va3VwLiAgVGhpcyBvcHRpb24gY2F1c2VzIGZyaWVuZHMgdG8gYmUgaW5qZWN0ZWQgYXMgdGhleSB3ZXJlIGluCitlYXJsaWVyIHJlbGVhc2VzLgorLlNwCitUaGlzIG9wdGlvbiBpcyBmb3IgY29tcGF0aWJpbGl0eSwgYW5kIG1heSBiZSByZW1vdmVkIGluIGEgZnV0dXJlCityZWxlYXNlIG9mIEcrKy4KKy5JUCAiXGZCXC1mbm9cLWVsaWRlXC1jb25zdHJ1Y3RvcnNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWVsaWRlLWNvbnN0cnVjdG9ycyIKK1RoZSBcKihDKyBzdGFuZGFyZCBhbGxvd3MgYW4gaW1wbGVtZW50YXRpb24gdG8gb21pdCBjcmVhdGluZyBhIHRlbXBvcmFyeQordGhhdCBpcyBvbmx5IHVzZWQgdG8gaW5pdGlhbGl6ZSBhbm90aGVyIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlLgorU3BlY2lmeWluZyB0aGlzIG9wdGlvbiBkaXNhYmxlcyB0aGF0IG9wdGltaXphdGlvbiwgYW5kIGZvcmNlcyBHKysgdG8KK2NhbGwgdGhlIGNvcHkgY29uc3RydWN0b3IgaW4gYWxsIGNhc2VzLgorLklQICJcZkJcLWZub1wtZW5mb3JjZVwtZWhcLXNwZWNzXGZSIiA0CisuSVggSXRlbSAiLWZuby1lbmZvcmNlLWVoLXNwZWNzIgorRG9uJ3QgZ2VuZXJhdGUgY29kZSB0byBjaGVjayBmb3IgdmlvbGF0aW9uIG9mIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9ucworYXQgcnVuIHRpbWUuICBUaGlzIG9wdGlvbiB2aW9sYXRlcyB0aGUgXCooQysgc3RhbmRhcmQsIGJ1dCBtYXkgYmUgdXNlZnVsCitmb3IgcmVkdWNpbmcgY29kZSBzaXplIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBtdWNoIGxpa2UgZGVmaW5pbmcKK1wmXGZCXHMtMU5ERUJVR1xzMFxmUi4gIFRoaXMgZG9lcyBub3QgZ2l2ZSB1c2VyIGNvZGUgcGVybWlzc2lvbiB0byB0aHJvdworZXhjZXB0aW9ucyBpbiB2aW9sYXRpb24gb2YgdGhlIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uczsgdGhlIGNvbXBpbGVyCitzdGlsbCBvcHRpbWl6ZXMgYmFzZWQgb24gdGhlIHNwZWNpZmljYXRpb25zLCBzbyB0aHJvd2luZyBhbgordW5leHBlY3RlZCBleGNlcHRpb24gcmVzdWx0cyBpbiB1bmRlZmluZWQgYmVoYXZpb3IgYXQgcnVuIHRpbWUuCisuSVAgIlxmQlwtZmV4dGVyblwtdGxzXC1pbml0XGZSIiA0CisuSVggSXRlbSAiLWZleHRlcm4tdGxzLWluaXQiCisuUEQgMAorLklQICJcZkJcLWZub1wtZXh0ZXJuXC10bHNcLWluaXRcZlIiIDQKKy5JWCBJdGVtICItZm5vLWV4dGVybi10bHMtaW5pdCIKKy5QRAorVGhlIFwqKEMrMTEgYW5kIE9wZW5NUCBzdGFuZGFyZHMgYWxsb3cgXGZCdGhyZWFkX2xvY2FsXGZSIGFuZAorXCZcZkJ0aHJlYWRwcml2YXRlXGZSIHZhcmlhYmxlcyB0byBoYXZlIGR5bmFtaWMgKHJ1bnRpbWUpCitpbml0aWFsaXphdGlvbi4gIFRvIHN1cHBvcnQgdGhpcywgYW55IHVzZSBvZiBzdWNoIGEgdmFyaWFibGUgZ29lcwordGhyb3VnaCBhIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhbnkgbmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uLgorV2hlbiB0aGUgdXNlIGFuZCBkZWZpbml0aW9uIG9mIHRoZSB2YXJpYWJsZSBhcmUgaW4gdGhlIHNhbWUKK3RyYW5zbGF0aW9uIHVuaXQsIHRoaXMgb3ZlcmhlYWQgY2FuIGJlIG9wdGltaXplZCBhd2F5LCBidXQgd2hlbiB0aGUKK3VzZSBpcyBpbiBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiB1bml0IHRoZXJlIGlzIHNpZ25pZmljYW50IG92ZXJoZWFkCitldmVuIGlmIHRoZSB2YXJpYWJsZSBkb2Vzbid0IGFjdHVhbGx5IG5lZWQgZHluYW1pYyBpbml0aWFsaXphdGlvbi4gIElmCit0aGUgcHJvZ3JhbW1lciBjYW4gYmUgc3VyZSB0aGF0IG5vIHVzZSBvZiB0aGUgdmFyaWFibGUgaW4gYQorbm9uLWRlZmluaW5nIFxzLTFUVVxzMCBuZWVkcyB0byB0cmlnZ2VyIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gKGVpdGhlcgorYmVjYXVzZSB0aGUgdmFyaWFibGUgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCwgb3IgYSB1c2Ugb2YgdGhlCit2YXJpYWJsZSBpbiB0aGUgZGVmaW5pbmcgXHMtMVRVXHMwIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIGFueSB1c2VzIGluCithbm90aGVyIFxzLTFUVVxzMCksIHRoZXkgY2FuIGF2b2lkIHRoaXMgb3ZlcmhlYWQgd2l0aCB0aGUKK1wmXGZCXC1mbm9cLWV4dGVyblwtdGxzXC1pbml0XGZSIG9wdGlvbi4KKy5TcAorT24gdGFyZ2V0cyB0aGF0IHN1cHBvcnQgc3ltYm9sIGFsaWFzZXMsIHRoZSBkZWZhdWx0IGlzCitcJlxmQlwtZmV4dGVyblwtdGxzXC1pbml0XGZSLiAgT24gdGFyZ2V0cyB0aGF0IGRvIG5vdCBzdXBwb3J0IHN5bWJvbAorYWxpYXNlcywgdGhlIGRlZmF1bHQgaXMgXGZCXC1mbm9cLWV4dGVyblwtdGxzXC1pbml0XGZSLgorLklQICJcZkJcLWZmb3JcLXNjb3BlXGZSIiA0CisuSVggSXRlbSAiLWZmb3Itc2NvcGUiCisuUEQgMAorLklQICJcZkJcLWZub1wtZm9yXC1zY29wZVxmUiIgNAorLklYIEl0ZW0gIi1mbm8tZm9yLXNjb3BlIgorLlBECitJZiBcZkJcLWZmb3JcLXNjb3BlXGZSIGlzIHNwZWNpZmllZCwgdGhlIHNjb3BlIG9mIHZhcmlhYmxlcyBkZWNsYXJlZCBpbgorYSBcZklmb3ItaW5pdC1zdGF0ZW1lbnRcZlIgaXMgbGltaXRlZCB0byB0aGUgXGZCZm9yXGZSIGxvb3AgaXRzZWxmLAorYXMgc3BlY2lmaWVkIGJ5IHRoZSBcKihDKyBzdGFuZGFyZC4KK0lmIFxmQlwtZm5vXC1mb3JcLXNjb3BlXGZSIGlzIHNwZWNpZmllZCwgdGhlIHNjb3BlIG9mIHZhcmlhYmxlcyBkZWNsYXJlZCBpbgorYSBcZklmb3ItaW5pdC1zdGF0ZW1lbnRcZlIgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSBlbmNsb3Npbmcgc2NvcGUsCithcyB3YXMgdGhlIGNhc2UgaW4gb2xkIHZlcnNpb25zIG9mIEcrKywgYW5kIG90aGVyICh0cmFkaXRpb25hbCkKK2ltcGxlbWVudGF0aW9ucyBvZiBcKihDKy4KKy5TcAorSWYgbmVpdGhlciBmbGFnIGlzIGdpdmVuLCB0aGUgZGVmYXVsdCBpcyB0byBmb2xsb3cgdGhlIHN0YW5kYXJkLAorYnV0IHRvIGFsbG93IGFuZCBnaXZlIGEgd2FybmluZyBmb3Igb2xkLXN0eWxlIGNvZGUgdGhhdCB3b3VsZAorb3RoZXJ3aXNlIGJlIGludmFsaWQsIG9yIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yLgorLklQICJcZkJcLWZub1wtZ251XC1rZXl3b3Jkc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tZ251LWtleXdvcmRzIgorRG8gbm90IHJlY29nbml6ZSBcZihDV1wqKENgdHlwZW9mXCooQydcZlIgYXMgYSBrZXl3b3JkLCBzbyB0aGF0IGNvZGUgY2FuIHVzZSB0aGlzCit3b3JkIGFzIGFuIGlkZW50aWZpZXIuICBZb3UgY2FuIHVzZSB0aGUga2V5d29yZCBcZihDV1wqKENgX1x8X3R5cGVvZl9cfF9cKihDJ1xmUiBpbnN0ZWFkLgorXCZcZkJcLWFuc2lcZlIgaW1wbGllcyBcZkJcLWZub1wtZ251XC1rZXl3b3Jkc1xmUi4KKy5JUCAiXGZCXC1mbm9cLWltcGxpY2l0XC10ZW1wbGF0ZXNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWltcGxpY2l0LXRlbXBsYXRlcyIKK05ldmVyIGVtaXQgY29kZSBmb3Igbm9uLWlubGluZSB0ZW1wbGF0ZXMgdGhhdCBhcmUgaW5zdGFudGlhdGVkCitpbXBsaWNpdGx5IChpLmUuIGJ5IHVzZSk7IG9ubHkgZW1pdCBjb2RlIGZvciBleHBsaWNpdCBpbnN0YW50aWF0aW9ucy4KKy5JUCAiXGZCXC1mbm9cLWltcGxpY2l0XC1pbmxpbmVcLXRlbXBsYXRlc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8taW1wbGljaXQtaW5saW5lLXRlbXBsYXRlcyIKK0Rvbid0IGVtaXQgY29kZSBmb3IgaW1wbGljaXQgaW5zdGFudGlhdGlvbnMgb2YgaW5saW5lIHRlbXBsYXRlcywgZWl0aGVyLgorVGhlIGRlZmF1bHQgaXMgdG8gaGFuZGxlIGlubGluZXMgZGlmZmVyZW50bHkgc28gdGhhdCBjb21waWxlcyB3aXRoIGFuZAord2l0aG91dCBvcHRpbWl6YXRpb24gbmVlZCB0aGUgc2FtZSBzZXQgb2YgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMuCisuSVAgIlxmQlwtZm5vXC1pbXBsZW1lbnRcLWlubGluZXNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWltcGxlbWVudC1pbmxpbmVzIgorVG8gc2F2ZSBzcGFjZSwgZG8gbm90IGVtaXQgb3V0LW9mLWxpbmUgY29waWVzIG9mIGlubGluZSBmdW5jdGlvbnMKK2NvbnRyb2xsZWQgYnkgXGZCI3ByYWdtYSBpbXBsZW1lbnRhdGlvblxmUi4gIFRoaXMgY2F1c2VzIGxpbmtlcgorZXJyb3JzIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGlubGluZWQgZXZlcnl3aGVyZSB0aGV5IGFyZSBjYWxsZWQuCisuSVAgIlxmQlwtZm1zXC1leHRlbnNpb25zXGZSIiA0CisuSVggSXRlbSAiLWZtcy1leHRlbnNpb25zIgorRGlzYWJsZSBXcGVkYW50aWMgd2FybmluZ3MgYWJvdXQgY29uc3RydWN0cyB1c2VkIGluIFxzLTFNRkNcczAsIHN1Y2ggYXMgaW1wbGljaXQKK2ludCBhbmQgZ2V0dGluZyBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uIHZpYSBub24tc3RhbmRhcmQgc3ludGF4LgorLklQICJcZkJcLWZub1wtbm9uYW5zaVwtYnVpbHRpbnNcZlIiIDQKKy5JWCBJdGVtICItZm5vLW5vbmFuc2ktYnVpbHRpbnMiCitEaXNhYmxlIGJ1aWx0LWluIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IG1hbmRhdGVkIGJ5CitcJlxzLTFBTlNJL0lTT1xzMCBDLiAgVGhlc2UgaW5jbHVkZSBcZihDV1wqKENgZmZzXCooQydcZlIsIFxmKENXXCooQ2BhbGxvY2FcKihDJ1xmUiwgXGYoQ1dcKihDYF9leGl0XCooQydcZlIsCitcJlxmKENXXCooQ2BpbmRleFwqKEMnXGZSLCBcZihDV1wqKENgYnplcm9cKihDJ1xmUiwgXGYoQ1dcKihDYGNvbmpmXCooQydcZlIsIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4KKy5JUCAiXGZCXC1mbm90aHJvd1wtb3B0XGZSIiA0CisuSVggSXRlbSAiLWZub3Rocm93LW9wdCIKK1RyZWF0IGEgXGYoQ1dcKihDYHRocm93KClcKihDJ1xmUiBleGNlcHRpb24gc3BlY2lmaWNhdGlvbiBhcyBpZiBpdCB3ZXJlIGEKK1wmXGYoQ1dcKihDYG5vZXhjZXB0XCooQydcZlIgc3BlY2lmaWNhdGlvbiB0byByZWR1Y2Ugb3IgZWxpbWluYXRlIHRoZSB0ZXh0IHNpemUKK292ZXJoZWFkIHJlbGF0aXZlIHRvIGEgZnVuY3Rpb24gd2l0aCBubyBleGNlcHRpb24gc3BlY2lmaWNhdGlvbi4gIElmCit0aGUgZnVuY3Rpb24gaGFzIGxvY2FsIHZhcmlhYmxlcyBvZiB0eXBlcyB3aXRoIG5vbi10cml2aWFsCitkZXN0cnVjdG9ycywgdGhlIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uIGFjdHVhbGx5IG1ha2VzIHRoZQorZnVuY3Rpb24gc21hbGxlciBiZWNhdXNlIHRoZSBccy0xRUhcczAgY2xlYW51cHMgZm9yIHRob3NlIHZhcmlhYmxlcyBjYW4gYmUKK29wdGltaXplZCBhd2F5LiAgVGhlIHNlbWFudGljIGVmZmVjdCBpcyB0aGF0IGFuIGV4Y2VwdGlvbiB0aHJvd24gb3V0IG9mCithIGZ1bmN0aW9uIHdpdGggc3VjaCBhbiBleGNlcHRpb24gc3BlY2lmaWNhdGlvbiByZXN1bHRzIGluIGEgY2FsbAordG8gXGYoQ1dcKihDYHRlcm1pbmF0ZVwqKEMnXGZSIHJhdGhlciB0aGFuIFxmKENXXCooQ2B1bmV4cGVjdGVkXCooQydcZlIuCisuSVAgIlxmQlwtZm5vXC1vcGVyYXRvclwtbmFtZXNcZlIiIDQKKy5JWCBJdGVtICItZm5vLW9wZXJhdG9yLW5hbWVzIgorRG8gbm90IHRyZWF0IHRoZSBvcGVyYXRvciBuYW1lIGtleXdvcmRzIFxmKENXXCooQ2BhbmRcKihDJ1xmUiwgXGYoQ1dcKihDYGJpdGFuZFwqKEMnXGZSLAorXCZcZihDV1wqKENgYml0b3JcKihDJ1xmUiwgXGYoQ1dcKihDYGNvbXBsXCooQydcZlIsIFxmKENXXCooQ2Bub3RcKihDJ1xmUiwgXGYoQ1dcKihDYG9yXCooQydcZlIgYW5kIFxmKENXXCooQ2B4b3JcKihDJ1xmUiBhcworc3lub255bXMgYXMga2V5d29yZHMuCisuSVAgIlxmQlwtZm5vXC1vcHRpb25hbFwtZGlhZ3NcZlIiIDQKKy5JWCBJdGVtICItZm5vLW9wdGlvbmFsLWRpYWdzIgorRGlzYWJsZSBkaWFnbm9zdGljcyB0aGF0IHRoZSBzdGFuZGFyZCBzYXlzIGEgY29tcGlsZXIgZG9lcyBub3QgbmVlZCB0bworaXNzdWUuICBDdXJyZW50bHksIHRoZSBvbmx5IHN1Y2ggZGlhZ25vc3RpYyBpc3N1ZWQgYnkgRysrIGlzIHRoZSBvbmUgZm9yCithIG5hbWUgaGF2aW5nIG11bHRpcGxlIG1lYW5pbmdzIHdpdGhpbiBhIGNsYXNzLgorLklQICJcZkJcLWZwZXJtaXNzaXZlXGZSIiA0CisuSVggSXRlbSAiLWZwZXJtaXNzaXZlIgorRG93bmdyYWRlIHNvbWUgZGlhZ25vc3RpY3MgYWJvdXQgbm9uY29uZm9ybWFudCBjb2RlIGZyb20gZXJyb3JzIHRvCit3YXJuaW5ncy4gIFRodXMsIHVzaW5nIFxmQlwtZnBlcm1pc3NpdmVcZlIgYWxsb3dzIHNvbWUKK25vbmNvbmZvcm1pbmcgY29kZSB0byBjb21waWxlLgorLklQICJcZkJcLWZub1wtcHJldHR5XC10ZW1wbGF0ZXNcZlIiIDQKKy5JWCBJdGVtICItZm5vLXByZXR0eS10ZW1wbGF0ZXMiCitXaGVuIGFuIGVycm9yIG1lc3NhZ2UgcmVmZXJzIHRvIGEgc3BlY2lhbGl6YXRpb24gb2YgYSBmdW5jdGlvbgordGVtcGxhdGUsIHRoZSBjb21waWxlciBub3JtYWxseSBwcmludHMgdGhlIHNpZ25hdHVyZSBvZiB0aGUKK3RlbXBsYXRlIGZvbGxvd2VkIGJ5IHRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMgYW5kIGFueSB0eXBlZGVmcyBvcgordHlwZW5hbWVzIGluIHRoZSBzaWduYXR1cmUgKGUuZy4gXGYoQ1dcKihDYHZvaWQgZihUKSBbd2l0aCBUID0gaW50XVwqKEMnXGZSCityYXRoZXIgdGhhbiBcZihDV1wqKENgdm9pZCBmKGludClcKihDJ1xmUikgc28gdGhhdCBpdCdzIGNsZWFyIHdoaWNoIHRlbXBsYXRlIGlzCitpbnZvbHZlZC4gIFdoZW4gYW4gZXJyb3IgbWVzc2FnZSByZWZlcnMgdG8gYSBzcGVjaWFsaXphdGlvbiBvZiBhIGNsYXNzCit0ZW1wbGF0ZSwgdGhlIGNvbXBpbGVyIG9taXRzIGFueSB0ZW1wbGF0ZSBhcmd1bWVudHMgdGhhdCBtYXRjaAordGhlIGRlZmF1bHQgdGVtcGxhdGUgYXJndW1lbnRzIGZvciB0aGF0IHRlbXBsYXRlLiAgSWYgZWl0aGVyIG9mIHRoZXNlCitiZWhhdmlvcnMgbWFrZSBpdCBoYXJkZXIgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3IgbWVzc2FnZSByYXRoZXIgdGhhbgorZWFzaWVyLCB5b3UgY2FuIHVzZSBcZkJcLWZub1wtcHJldHR5XC10ZW1wbGF0ZXNcZlIgdG8gZGlzYWJsZSB0aGVtLgorLklQICJcZkJcLWZyZXBvXGZSIiA0CisuSVggSXRlbSAiLWZyZXBvIgorRW5hYmxlIGF1dG9tYXRpYyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uIGF0IGxpbmsgdGltZS4gIFRoaXMgb3B0aW9uIGFsc28KK2ltcGxpZXMgXGZCXC1mbm9cLWltcGxpY2l0XC10ZW1wbGF0ZXNcZlIuCisuSVAgIlxmQlwtZm5vXC1ydHRpXGZSIiA0CisuSVggSXRlbSAiLWZuby1ydHRpIgorRGlzYWJsZSBnZW5lcmF0aW9uIG9mIGluZm9ybWF0aW9uIGFib3V0IGV2ZXJ5IGNsYXNzIHdpdGggdmlydHVhbAorZnVuY3Rpb25zIGZvciB1c2UgYnkgdGhlIFwqKEMrIHJ1bi10aW1lIHR5cGUgaWRlbnRpZmljYXRpb24gZmVhdHVyZXMKKyhcZkJkeW5hbWljX2Nhc3RcZlIgYW5kIFxmQnR5cGVpZFxmUikuICBJZiB5b3UgZG9uJ3QgdXNlIHRob3NlIHBhcnRzCitvZiB0aGUgbGFuZ3VhZ2UsIHlvdSBjYW4gc2F2ZSBzb21lIHNwYWNlIGJ5IHVzaW5nIHRoaXMgZmxhZy4gIE5vdGUgdGhhdAorZXhjZXB0aW9uIGhhbmRsaW5nIHVzZXMgdGhlIHNhbWUgaW5mb3JtYXRpb24sIGJ1dCBHKysgZ2VuZXJhdGVzIGl0IGFzCituZWVkZWQuIFRoZSBcZkJkeW5hbWljX2Nhc3RcZlIgb3BlcmF0b3IgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIGNhc3RzIHRoYXQKK2RvIG5vdCByZXF1aXJlIHJ1bi10aW1lIHR5cGUgaW5mb3JtYXRpb24sIGkuZS4gY2FzdHMgdG8gXGYoQ1dcKihDYHZvaWQgKlwqKEMnXGZSIG9yIHRvCit1bmFtYmlndW91cyBiYXNlIGNsYXNzZXMuCisuSVAgIlxmQlwtZnN0YXRzXGZSIiA0CisuSVggSXRlbSAiLWZzdGF0cyIKK0VtaXQgc3RhdGlzdGljcyBhYm91dCBmcm9udC1lbmQgcHJvY2Vzc2luZyBhdCB0aGUgZW5kIG9mIHRoZSBjb21waWxhdGlvbi4KK1RoaXMgaW5mb3JtYXRpb24gaXMgZ2VuZXJhbGx5IG9ubHkgdXNlZnVsIHRvIHRoZSBHKysgZGV2ZWxvcG1lbnQgdGVhbS4KKy5JUCAiXGZCXC1mc3RyaWN0XC1lbnVtc1xmUiIgNAorLklYIEl0ZW0gIi1mc3RyaWN0LWVudW1zIgorQWxsb3cgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIHVzaW5nIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSB2YWx1ZSBvZgorZW51bWVyYXRlZCB0eXBlIGNhbiBvbmx5IGJlIG9uZSBvZiB0aGUgdmFsdWVzIG9mIHRoZSBlbnVtZXJhdGlvbiAoYXMKK2RlZmluZWQgaW4gdGhlIFwqKEMrIHN0YW5kYXJkOyBiYXNpY2FsbHksIGEgdmFsdWUgdGhhdCBjYW4gYmUKK3JlcHJlc2VudGVkIGluIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byByZXByZXNlbnQgYWxsIHRoZQorZW51bWVyYXRvcnMpLiAgVGhpcyBhc3N1bXB0aW9uIG1heSBub3QgYmUgdmFsaWQgaWYgdGhlIHByb2dyYW0gdXNlcyBhCitjYXN0IHRvIGNvbnZlcnQgYW4gYXJiaXRyYXJ5IGludGVnZXIgdmFsdWUgdG8gdGhlIGVudW1lcmF0ZWQgdHlwZS4KKy5JUCAiXGZCXC1mdGVtcGxhdGVcLWJhY2t0cmFjZVwtbGltaXQ9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mdGVtcGxhdGUtYmFja3RyYWNlLWxpbWl0PW4iCitTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gbm90ZXMgZm9yIGEgc2luZ2xlCit3YXJuaW5nIG9yIGVycm9yIHRvIFxmSW5cZlIuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKy5JUCAiXGZCXC1mdGVtcGxhdGVcLWRlcHRoPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZnRlbXBsYXRlLWRlcHRoPW4iCitTZXQgdGhlIG1heGltdW0gaW5zdGFudGlhdGlvbiBkZXB0aCBmb3IgdGVtcGxhdGUgY2xhc3NlcyB0byBcZkluXGZSLgorQSBsaW1pdCBvbiB0aGUgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiBkZXB0aCBpcyBuZWVkZWQgdG8gZGV0ZWN0CitlbmRsZXNzIHJlY3Vyc2lvbnMgZHVyaW5nIHRlbXBsYXRlIGNsYXNzIGluc3RhbnRpYXRpb24uICBccy0xQU5TSS9JU09cczAgXCooQysKK2NvbmZvcm1pbmcgcHJvZ3JhbXMgbXVzdCBub3QgcmVseSBvbiBhIG1heGltdW0gZGVwdGggZ3JlYXRlciB0aGFuIDE3CisoY2hhbmdlZCB0byAxMDI0IGluIFwqKEMrMTEpLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgOTAwLCBhcyB0aGUgY29tcGlsZXIKK2NhbiBydW4gb3V0IG9mIHN0YWNrIHNwYWNlIGJlZm9yZSBoaXR0aW5nIDEwMjQgaW4gc29tZSBzaXR1YXRpb25zLgorLklQICJcZkJcLWZub1wtdGhyZWFkc2FmZVwtc3RhdGljc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tdGhyZWFkc2FmZS1zdGF0aWNzIgorRG8gbm90IGVtaXQgdGhlIGV4dHJhIGNvZGUgdG8gdXNlIHRoZSByb3V0aW5lcyBzcGVjaWZpZWQgaW4gdGhlIFwqKEMrCitcJlxzLTFBQklcczAgZm9yIHRocmVhZC1zYWZlIGluaXRpYWxpemF0aW9uIG9mIGxvY2FsIHN0YXRpY3MuICBZb3UgY2FuIHVzZSB0aGlzCitvcHRpb24gdG8gcmVkdWNlIGNvZGUgc2l6ZSBzbGlnaHRseSBpbiBjb2RlIHRoYXQgZG9lc24ndCBuZWVkIHRvIGJlCit0aHJlYWQtc2FmZS4KKy5JUCAiXGZCXC1mdXNlXC1jeGFcLWF0ZXhpdFxmUiIgNAorLklYIEl0ZW0gIi1mdXNlLWN4YS1hdGV4aXQiCitSZWdpc3RlciBkZXN0cnVjdG9ycyBmb3Igb2JqZWN0cyB3aXRoIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIHdpdGggdGhlCitcJlxmKENXXCooQ2BfXHxfY3hhX2F0ZXhpdFwqKEMnXGZSIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHRoZSBcZihDV1wqKENgYXRleGl0XCooQydcZlIgZnVuY3Rpb24uCitUaGlzIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgZnVsbHkgc3RhbmRhcmRzLWNvbXBsaWFudCBoYW5kbGluZyBvZiBzdGF0aWMKK2Rlc3RydWN0b3JzLCBidXQgb25seSB3b3JrcyBpZiB5b3VyIEMgbGlicmFyeSBzdXBwb3J0cworXCZcZihDV1wqKENgX1x8X2N4YV9hdGV4aXRcKihDJ1xmUi4KKy5JUCAiXGZCXC1mbm9cLXVzZVwtY3hhXC1nZXRcLWV4Y2VwdGlvblwtcHRyXGZSIiA0CisuSVggSXRlbSAiLWZuby11c2UtY3hhLWdldC1leGNlcHRpb24tcHRyIgorRG9uJ3QgdXNlIHRoZSBcZihDV1wqKENgX1x8X2N4YV9nZXRfZXhjZXB0aW9uX3B0clwqKEMnXGZSIHJ1bnRpbWUgcm91dGluZS4gIFRoaXMKK2NhdXNlcyBcZihDV1wqKENgc3RkOjp1bmNhdWdodF9leGNlcHRpb25cKihDJ1xmUiB0byBiZSBpbmNvcnJlY3QsIGJ1dCBpcyBuZWNlc3NhcnkKK2lmIHRoZSBydW50aW1lIHJvdXRpbmUgaXMgbm90IGF2YWlsYWJsZS4KKy5JUCAiXGZCXC1mdmlzaWJpbGl0eVwtaW5saW5lc1wtaGlkZGVuXGZSIiA0CisuSVggSXRlbSAiLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgorVGhpcyBzd2l0Y2ggZGVjbGFyZXMgdGhhdCB0aGUgdXNlciBkb2VzIG5vdCBhdHRlbXB0IHRvIGNvbXBhcmUKK3BvaW50ZXJzIHRvIGlubGluZSBmdW5jdGlvbnMgb3IgbWV0aG9kcyB3aGVyZSB0aGUgYWRkcmVzc2VzIG9mIHRoZSB0d28gZnVuY3Rpb25zCithcmUgdGFrZW4gaW4gZGlmZmVyZW50IHNoYXJlZCBvYmplY3RzLgorLlNwCitUaGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCBccy0xR0NDXHMwIG1heSwgZWZmZWN0aXZlbHksIG1hcmsgaW5saW5lIG1ldGhvZHMgd2l0aAorXCZcZihDV1wqKENgX1x8X2F0dHJpYnV0ZV9cfF8gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKVwqKEMnXGZSIHNvIHRoYXQgdGhleSBkbyBub3QKK2FwcGVhciBpbiB0aGUgZXhwb3J0IHRhYmxlIG9mIGEgXHMtMURTT1xzMCBhbmQgZG8gbm90IHJlcXVpcmUgYSBccy0xUExUXHMwIGluZGlyZWN0aW9uCit3aGVuIHVzZWQgd2l0aGluIHRoZSBccy0xRFNPXHMwLiAgRW5hYmxpbmcgdGhpcyBvcHRpb24gY2FuIGhhdmUgYSBkcmFtYXRpYyBlZmZlY3QKK29uIGxvYWQgYW5kIGxpbmsgdGltZXMgb2YgYSBccy0xRFNPXHMwIGFzIGl0IG1hc3NpdmVseSByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZQorZHluYW1pYyBleHBvcnQgdGFibGUgd2hlbiB0aGUgbGlicmFyeSBtYWtlcyBoZWF2eSB1c2Ugb2YgdGVtcGxhdGVzLgorLlNwCitUaGUgYmVoYXZpb3Igb2YgdGhpcyBzd2l0Y2ggaXMgbm90IHF1aXRlIHRoZSBzYW1lIGFzIG1hcmtpbmcgdGhlCittZXRob2RzIGFzIGhpZGRlbiBkaXJlY3RseSwgYmVjYXVzZSBpdCBkb2VzIG5vdCBhZmZlY3Qgc3RhdGljIHZhcmlhYmxlcworbG9jYWwgdG8gdGhlIGZ1bmN0aW9uIG9yIGNhdXNlIHRoZSBjb21waWxlciB0byBkZWR1Y2UgdGhhdAordGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gb25seSBvbmUgc2hhcmVkIG9iamVjdC4KKy5TcAorWW91IG1heSBtYXJrIGEgbWV0aG9kIGFzIGhhdmluZyBhIHZpc2liaWxpdHkgZXhwbGljaXRseSB0byBuZWdhdGUgdGhlCitlZmZlY3Qgb2YgdGhlIHN3aXRjaCBmb3IgdGhhdCBtZXRob2QuICBGb3IgZXhhbXBsZSwgaWYgeW91IGRvIHdhbnQgdG8KK2NvbXBhcmUgcG9pbnRlcnMgdG8gYSBwYXJ0aWN1bGFyIGlubGluZSBtZXRob2QsIHlvdSBtaWdodCBtYXJrIGl0IGFzCitoYXZpbmcgZGVmYXVsdCB2aXNpYmlsaXR5LiAgTWFya2luZyB0aGUgZW5jbG9zaW5nIGNsYXNzIHdpdGggZXhwbGljaXQKK3Zpc2liaWxpdHkgaGFzIG5vIGVmZmVjdC4KKy5TcAorRXhwbGljaXRseSBpbnN0YW50aWF0ZWQgaW5saW5lIG1ldGhvZHMgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb24KK2FzIHRoZWlyIGxpbmthZ2UgbWlnaHQgb3RoZXJ3aXNlIGNyb3NzIGEgc2hhcmVkIGxpYnJhcnkgYm91bmRhcnkuCisuSVAgIlxmQlwtZnZpc2liaWxpdHlcLW1zXC1jb21wYXRcZlIiIDQKKy5JWCBJdGVtICItZnZpc2liaWxpdHktbXMtY29tcGF0IgorVGhpcyBmbGFnIGF0dGVtcHRzIHRvIHVzZSB2aXNpYmlsaXR5IHNldHRpbmdzIHRvIG1ha2UgXHMtMUdDQ1xzMCdzIFwqKEMrCitsaW5rYWdlIG1vZGVsIGNvbXBhdGlibGUgd2l0aCB0aGF0IG9mIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLgorLlNwCitUaGUgZmxhZyBtYWtlcyB0aGVzZSBjaGFuZ2VzIHRvIFxzLTFHQ0NcczAncyBsaW5rYWdlIG1vZGVsOgorLlJTIDQKKy5JUCAiMS4iIDQKK0l0IHNldHMgdGhlIGRlZmF1bHQgdmlzaWJpbGl0eSB0byBcZihDV1wqKENgaGlkZGVuXCooQydcZlIsIGxpa2UKK1wmXGZCXC1mdmlzaWJpbGl0eT1oaWRkZW5cZlIuCisuSVAgIjIuIiA0CitUeXBlcywgYnV0IG5vdCB0aGVpciBtZW1iZXJzLCBhcmUgbm90IGhpZGRlbiBieSBkZWZhdWx0LgorLklQICIzLiIgNAorVGhlIE9uZSBEZWZpbml0aW9uIFJ1bGUgaXMgcmVsYXhlZCBmb3IgdHlwZXMgd2l0aG91dCBleHBsaWNpdAordmlzaWJpbGl0eSBzcGVjaWZpY2F0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGluIG1vcmUgdGhhbiBvbmUKK3NoYXJlZCBvYmplY3Q6IHRob3NlIGRlY2xhcmF0aW9ucyBhcmUgcGVybWl0dGVkIGlmIHRoZXkgYXJlCitwZXJtaXR0ZWQgd2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZC4KKy5SRQorLlJTIDQKKy5TcAorSW4gbmV3IGNvZGUgaXQgaXMgYmV0dGVyIHRvIHVzZSBcZkJcLWZ2aXNpYmlsaXR5PWhpZGRlblxmUiBhbmQKK2V4cG9ydCB0aG9zZSBjbGFzc2VzIHRoYXQgYXJlIGludGVuZGVkIHRvIGJlIGV4dGVybmFsbHkgdmlzaWJsZS4KK1VuZm9ydHVuYXRlbHkgaXQgaXMgcG9zc2libGUgZm9yIGNvZGUgdG8gcmVseSwgcGVyaGFwcyBhY2NpZGVudGFsbHksCitvbiB0aGUgVmlzdWFsIFN0dWRpbyBiZWhhdmlvci4KKy5TcAorQW1vbmcgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGVzZSBjaGFuZ2VzIGFyZSB0aGF0IHN0YXRpYyBkYXRhIG1lbWJlcnMKK29mIHRoZSBzYW1lIHR5cGUgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCBkZWZpbmVkIGluIGRpZmZlcmVudCBzaGFyZWQKK29iamVjdHMgYXJlIGRpZmZlcmVudCwgc28gY2hhbmdpbmcgb25lIGRvZXMgbm90IGNoYW5nZSB0aGUgb3RoZXI7CithbmQgdGhhdCBwb2ludGVycyB0byBmdW5jdGlvbiBtZW1iZXJzIGRlZmluZWQgaW4gZGlmZmVyZW50IHNoYXJlZAorb2JqZWN0cyBtYXkgbm90IGNvbXBhcmUgZXF1YWwuICBXaGVuIHRoaXMgZmxhZyBpcyBnaXZlbiwgaXQgaXMgYQordmlvbGF0aW9uIG9mIHRoZSBccy0xT0RSXHMwIHRvIGRlZmluZSB0eXBlcyB3aXRoIHRoZSBzYW1lIG5hbWUgZGlmZmVyZW50bHkuCisuUkUKKy5JUCAiXGZCXC1mbm9cLXdlYWtcZlIiIDQKKy5JWCBJdGVtICItZm5vLXdlYWsiCitEbyBub3QgdXNlIHdlYWsgc3ltYm9sIHN1cHBvcnQsIGV2ZW4gaWYgaXQgaXMgcHJvdmlkZWQgYnkgdGhlIGxpbmtlci4KK0J5IGRlZmF1bHQsIEcrKyB1c2VzIHdlYWsgc3ltYm9scyBpZiB0aGV5IGFyZSBhdmFpbGFibGUuICBUaGlzCitvcHRpb24gZXhpc3RzIG9ubHkgZm9yIHRlc3RpbmcsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYnkgZW5kLXVzZXJzOworaXQgcmVzdWx0cyBpbiBpbmZlcmlvciBjb2RlIGFuZCBoYXMgbm8gYmVuZWZpdHMuICBUaGlzIG9wdGlvbiBtYXkKK2JlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZSBvZiBHKysuCisuSVAgIlxmQlwtbm9zdGRpbmMrK1xmUiIgNAorLklYIEl0ZW0gIi1ub3N0ZGluYysrIgorRG8gbm90IHNlYXJjaCBmb3IgaGVhZGVyIGZpbGVzIGluIHRoZSBzdGFuZGFyZCBkaXJlY3RvcmllcyBzcGVjaWZpYyB0bworXCZcKihDKywgYnV0IGRvIHN0aWxsIHNlYXJjaCB0aGUgb3RoZXIgc3RhbmRhcmQgZGlyZWN0b3JpZXMuICAoVGhpcyBvcHRpb24KK2lzIHVzZWQgd2hlbiBidWlsZGluZyB0aGUgXCooQysgbGlicmFyeS4pCisuUFAKK0luIGFkZGl0aW9uLCB0aGVzZSBvcHRpbWl6YXRpb24sIHdhcm5pbmcsIGFuZCBjb2RlIGdlbmVyYXRpb24gb3B0aW9ucworaGF2ZSBtZWFuaW5ncyBvbmx5IGZvciBcKihDKyBwcm9ncmFtczoKKy5JUCAiXGZCXC1mbm9cLWRlZmF1bHRcLWlubGluZVxmUiIgNAorLklYIEl0ZW0gIi1mbm8tZGVmYXVsdC1pbmxpbmUiCitEbyBub3QgYXNzdW1lIFxmQmlubGluZVxmUiBmb3IgZnVuY3Rpb25zIGRlZmluZWQgaW5zaWRlIGEgY2xhc3Mgc2NvcGUuCisgIE5vdGUgdGhhdCB0aGVzZQorZnVuY3Rpb25zIGhhdmUgbGlua2FnZSBsaWtlIGlubGluZSBmdW5jdGlvbnM7IHRoZXkganVzdCBhcmVuJ3QKK2lubGluZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1XYWJpXGZSIChDLCBPYmplY3RpdmUtQywgXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV2FiaSAoQywgT2JqZWN0aXZlLUMsICBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBHKysgZ2VuZXJhdGVzIGNvZGUgdGhhdCBpcyBwcm9iYWJseSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZQordmVuZG9yLW5ldXRyYWwgXCooQysgXHMtMUFCSVxzMC4gIEFsdGhvdWdoIGFuIGVmZm9ydCBoYXMgYmVlbiBtYWRlIHRvIHdhcm4gYWJvdXQKK2FsbCBzdWNoIGNhc2VzLCB0aGVyZSBhcmUgcHJvYmFibHkgc29tZSBjYXNlcyB0aGF0IGFyZSBub3Qgd2FybmVkIGFib3V0LAorZXZlbiB0aG91Z2ggRysrIGlzIGdlbmVyYXRpbmcgaW5jb21wYXRpYmxlIGNvZGUuICBUaGVyZSBtYXkgYWxzbyBiZQorY2FzZXMgd2hlcmUgd2FybmluZ3MgYXJlIGVtaXR0ZWQgZXZlbiB0aG91Z2ggdGhlIGNvZGUgdGhhdCBpcyBnZW5lcmF0ZWQKK2lzIGNvbXBhdGlibGUuCisuU3AKK1lvdSBzaG91bGQgcmV3cml0ZSB5b3VyIGNvZGUgdG8gYXZvaWQgdGhlc2Ugd2FybmluZ3MgaWYgeW91IGFyZQorY29uY2VybmVkIGFib3V0IHRoZSBmYWN0IHRoYXQgY29kZSBnZW5lcmF0ZWQgYnkgRysrIG1heSBub3QgYmUgYmluYXJ5Citjb21wYXRpYmxlIHdpdGggY29kZSBnZW5lcmF0ZWQgYnkgb3RoZXIgY29tcGlsZXJzLgorLlNwCitUaGUga25vd24gaW5jb21wYXRpYmlsaXRpZXMgaW4gXGZCXC1mYWJpXC12ZXJzaW9uPTJcZlIgKHRoZSBkZWZhdWx0KSBpbmNsdWRlOgorLlJTIDQKKy5JUCAiXChidSIgNAorQSB0ZW1wbGF0ZSB3aXRoIGEgbm9uLXR5cGUgdGVtcGxhdGUgcGFyYW1ldGVyIG9mIHJlZmVyZW5jZSB0eXBlIGlzCittYW5nbGVkIGluY29ycmVjdGx5OgorLlNwCisuVmIgMworXCYgICAgICAgIGV4dGVybiBpbnQgTjsKK1wmICAgICAgICB0ZW1wbGF0ZSA8aW50ICY+IHN0cnVjdCBTIHt9OworXCYgICAgICAgIHZvaWQgbiAoUzxOPikgezJ9CisuVmUKKy5TcAorVGhpcyBpcyBmaXhlZCBpbiBcZkJcLWZhYmlcLXZlcnNpb249M1xmUi4KKy5JUCAiXChidSIgNAorXCZccy0xU0lNRFxzMCB2ZWN0b3IgdHlwZXMgZGVjbGFyZWQgdXNpbmcgXGYoQ1dcKihDYF9cfF9hdHRyaWJ1dGUgKCh2ZWN0b3Jfc2l6ZSkpXCooQydcZlIgYXJlCittYW5nbGVkIGluIGEgbm9uLXN0YW5kYXJkIHdheSB0aGF0IGRvZXMgbm90IGFsbG93IGZvciBvdmVybG9hZGluZyBvZgorZnVuY3Rpb25zIHRha2luZyB2ZWN0b3JzIG9mIGRpZmZlcmVudCBzaXplcy4KKy5TcAorVGhlIG1hbmdsaW5nIGlzIGNoYW5nZWQgaW4gXGZCXC1mYWJpXC12ZXJzaW9uPTRcZlIuCisuUkUKKy5SUyA0CisuU3AKK1RoZSBrbm93biBpbmNvbXBhdGliaWxpdGllcyBpbiBcZkJcLWZhYmlcLXZlcnNpb249MVxmUiBpbmNsdWRlOgorLklQICJcKGJ1IiA0CitJbmNvcnJlY3QgaGFuZGxpbmcgb2YgdGFpbC1wYWRkaW5nIGZvciBiaXQtZmllbGRzLiAgRysrIG1heSBhdHRlbXB0IHRvCitwYWNrIGRhdGEgaW50byB0aGUgc2FtZSBieXRlIGFzIGEgYmFzZSBjbGFzcy4gIEZvciBleGFtcGxlOgorLlNwCisuVmIgMgorXCYgICAgICAgIHN0cnVjdCBBIHsgdmlydHVhbCB2b2lkIGYoKTsgaW50IGYxIDogMTsgfTsKK1wmICAgICAgICBzdHJ1Y3QgQiA6IHB1YmxpYyBBIHsgaW50IGYyIDogMTsgfTsKKy5WZQorLlNwCitJbiB0aGlzIGNhc2UsIEcrKyBwbGFjZXMgXGYoQ1dcKihDYEI6OmYyXCooQydcZlIgaW50byB0aGUgc2FtZSBieXRlCithcyBcZihDV1wqKENgQTo6ZjFcKihDJ1xmUjsgb3RoZXIgY29tcGlsZXJzIGRvIG5vdC4gIFlvdSBjYW4gYXZvaWQgdGhpcyBwcm9ibGVtCitieSBleHBsaWNpdGx5IHBhZGRpbmcgXGYoQ1dcKihDYEFcKihDJ1xmUiBzbyB0aGF0IGl0cyBzaXplIGlzIGEgbXVsdGlwbGUgb2YgdGhlCitieXRlIHNpemUgb24geW91ciBwbGF0Zm9ybTsgdGhhdCBjYXVzZXMgRysrIGFuZCBvdGhlciBjb21waWxlcnMgdG8KK2xheSBvdXQgXGYoQ1dcKihDYEJcKihDJ1xmUiBpZGVudGljYWxseS4KKy5JUCAiXChidSIgNAorSW5jb3JyZWN0IGhhbmRsaW5nIG9mIHRhaWwtcGFkZGluZyBmb3IgdmlydHVhbCBiYXNlcy4gIEcrKyBkb2VzIG5vdCB1c2UKK3RhaWwgcGFkZGluZyB3aGVuIGxheWluZyBvdXQgdmlydHVhbCBiYXNlcy4gIEZvciBleGFtcGxlOgorLlNwCisuVmIgMworXCYgICAgICAgIHN0cnVjdCBBIHsgdmlydHVhbCB2b2lkIGYoKTsgY2hhciBjMTsgfTsKK1wmICAgICAgICBzdHJ1Y3QgQiB7IEIoKTsgY2hhciBjMjsgfTsKK1wmICAgICAgICBzdHJ1Y3QgQyA6IHB1YmxpYyBBLCBwdWJsaWMgdmlydHVhbCBCIHt9OworLlZlCisuU3AKK0luIHRoaXMgY2FzZSwgRysrIGRvZXMgbm90IHBsYWNlIFxmKENXXCooQ2BCXCooQydcZlIgaW50byB0aGUgdGFpbC1wYWRkaW5nIGZvcgorXCZcZihDV1wqKENgQVwqKEMnXGZSOyBvdGhlciBjb21waWxlcnMgZG8uICBZb3UgY2FuIGF2b2lkIHRoaXMgcHJvYmxlbSBieQorZXhwbGljaXRseSBwYWRkaW5nIFxmKENXXCooQ2BBXCooQydcZlIgc28gdGhhdCBpdHMgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIGl0cworYWxpZ25tZW50IChpZ25vcmluZyB2aXJ0dWFsIGJhc2UgY2xhc3Nlcyk7IHRoYXQgY2F1c2VzIEcrKyBhbmQgb3RoZXIKK2NvbXBpbGVycyB0byBsYXkgb3V0IFxmKENXXCooQ2BDXCooQydcZlIgaWRlbnRpY2FsbHkuCisuSVAgIlwoYnUiIDQKK0luY29ycmVjdCBoYW5kbGluZyBvZiBiaXQtZmllbGRzIHdpdGggZGVjbGFyZWQgd2lkdGhzIGdyZWF0ZXIgdGhhbiB0aGF0CitvZiB0aGVpciB1bmRlcmx5aW5nIHR5cGVzLCB3aGVuIHRoZSBiaXQtZmllbGRzIGFwcGVhciBpbiBhIHVuaW9uLiAgRm9yCitleGFtcGxlOgorLlNwCisuVmIgMQorXCYgICAgICAgIHVuaW9uIFUgeyBpbnQgaSA6IDQwOTY7IH07CisuVmUKKy5TcAorQXNzdW1pbmcgdGhhdCBhbiBcZihDV1wqKENgaW50XCooQydcZlIgZG9lcyBub3QgaGF2ZSA0MDk2IGJpdHMsIEcrKyBtYWtlcyB0aGUKK3VuaW9uIHRvbyBzbWFsbCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYW4gXGYoQ1dcKihDYGludFwqKEMnXGZSLgorLklQICJcKGJ1IiA0CitFbXB0eSBjbGFzc2VzIGNhbiBiZSBwbGFjZWQgYXQgaW5jb3JyZWN0IG9mZnNldHMuICBGb3IgZXhhbXBsZToKKy5TcAorLlZiIDEKK1wmICAgICAgICBzdHJ1Y3QgQSB7fTsKK1wmICAgICAgICAKK1wmICAgICAgICBzdHJ1Y3QgQiB7CitcJiAgICAgICAgICBBIGE7CitcJiAgICAgICAgICB2aXJ0dWFsIHZvaWQgZiAoKTsKK1wmICAgICAgICB9OworXCYgICAgICAgIAorXCYgICAgICAgIHN0cnVjdCBDIDogcHVibGljIEIsIHB1YmxpYyBBIHt9OworLlZlCisuU3AKK0crKyBwbGFjZXMgdGhlIFxmKENXXCooQ2BBXCooQydcZlIgYmFzZSBjbGFzcyBvZiBcZihDV1wqKENgQ1wqKEMnXGZSIGF0IGEgbm9uemVybyBvZmZzZXQ7CitpdCBzaG91bGQgYmUgcGxhY2VkIGF0IG9mZnNldCB6ZXJvLiAgRysrIG1pc3Rha2VubHkgYmVsaWV2ZXMgdGhhdCB0aGUKK1wmXGYoQ1dcKihDYEFcKihDJ1xmUiBkYXRhIG1lbWJlciBvZiBcZihDV1wqKENgQlwqKEMnXGZSIGlzIGFscmVhZHkgYXQgb2Zmc2V0IHplcm8uCisuSVAgIlwoYnUiIDQKK05hbWVzIG9mIHRlbXBsYXRlIGZ1bmN0aW9ucyB3aG9zZSB0eXBlcyBpbnZvbHZlIFxmKENXXCooQ2B0eXBlbmFtZVwqKEMnXGZSIG9yCit0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGNhbiBiZSBtYW5nbGVkIGluY29ycmVjdGx5LgorLlNwCisuVmIgMgorXCYgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBRPgorXCYgICAgICAgIHZvaWQgZih0eXBlbmFtZSBROjpYKSB7fQorXCYgICAgICAgIAorXCYgICAgICAgIHRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlwZW5hbWU+IGNsYXNzIFE+CitcJiAgICAgICAgdm9pZCBmKHR5cGVuYW1lIFE8aW50Pjo6WCkge30KKy5WZQorLlNwCitJbnN0YW50aWF0aW9ucyBvZiB0aGVzZSB0ZW1wbGF0ZXMgbWF5IGJlIG1hbmdsZWQgaW5jb3JyZWN0bHkuCisuUkUKKy5SUyA0CisuU3AKK0l0IGFsc28gd2FybnMgYWJvdXQgcHNBQkktcmVsYXRlZCBjaGFuZ2VzLiAgVGhlIGtub3duIHBzQUJJIGNoYW5nZXMgYXQgdGhpcworcG9pbnQgaW5jbHVkZToKKy5JUCAiXChidSIgNAorRm9yIFN5c1YveDg2XC02NCwgdW5pb25zIHdpdGggXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgbWVtYmVycyBhcmUgCitwYXNzZWQgaW4gbWVtb3J5IGFzIHNwZWNpZmllZCBpbiBwc0FCSS4gIEZvciBleGFtcGxlOgorLlNwCisuVmIgNAorXCYgICAgICAgIHVuaW9uIFUgeworXCYgICAgICAgICAgbG9uZyBkb3VibGUgbGQ7CitcJiAgICAgICAgICBpbnQgaTsKK1wmICAgICAgICB9OworLlZlCisuU3AKK1wmXGYoQ1dcKihDYHVuaW9uIFVcKihDJ1xmUiBpcyBhbHdheXMgcGFzc2VkIGluIG1lbW9yeS4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLVdjdG9yXC1kdG9yXC1wcml2YWN5XGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XY3Rvci1kdG9yLXByaXZhY3kgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBhIGNsYXNzIHNlZW1zIHVudXNhYmxlIGJlY2F1c2UgYWxsIHRoZSBjb25zdHJ1Y3RvcnMgb3IKK2Rlc3RydWN0b3JzIGluIHRoYXQgY2xhc3MgYXJlIHByaXZhdGUsIGFuZCBpdCBoYXMgbmVpdGhlciBmcmllbmRzIG5vcgorcHVibGljIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLiAgQWxzbyB3YXJuIGlmIHRoZXJlIGFyZSBubyBub24tcHJpdmF0ZQorbWV0aG9kcywgYW5kIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIHByaXZhdGUgbWVtYmVyIGZ1bmN0aW9uIHRoYXQgaXNuJ3QKK2EgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3Rvci4KKy5JUCAiXGZCXC1XZGVsZXRlXC1ub25cLXZpcnR1YWxcLWR0b3JcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdkZWxldGUtbm9uLXZpcnR1YWwtZHRvciAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiB3aGVuIFxmQmRlbGV0ZVxmUiBpcyB1c2VkIHRvIGRlc3Ryb3kgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0CitoYXMgdmlydHVhbCBmdW5jdGlvbnMgYW5kIG5vbi12aXJ0dWFsIGRlc3RydWN0b3IuIEl0IGlzIHVuc2FmZSB0byBkZWxldGUKK2FuIGluc3RhbmNlIG9mIGEgZGVyaXZlZCBjbGFzcyB0aHJvdWdoIGEgcG9pbnRlciB0byBhIGJhc2UgY2xhc3MgaWYgdGhlCitiYXNlIGNsYXNzIGRvZXMgbm90IGhhdmUgYSB2aXJ0dWFsIGRlc3RydWN0b3IuICBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZAorYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdsaXRlcmFsXC1zdWZmaXhcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdsaXRlcmFsLXN1ZmZpeCAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiB3aGVuIGEgc3RyaW5nIG9yIGNoYXJhY3RlciBsaXRlcmFsIGlzIGZvbGxvd2VkIGJ5IGEgdWQtc3VmZml4IHdoaWNoIGRvZXMKK25vdCBiZWdpbiB3aXRoIGFuIHVuZGVyc2NvcmUuICBBcyBhIGNvbmZvcm1pbmcgZXh0ZW5zaW9uLCBccy0xR0NDXHMwIHRyZWF0cyBzdWNoCitzdWZmaXhlcyBhcyBzZXBhcmF0ZSBwcmVwcm9jZXNzaW5nIHRva2VucyBpbiBvcmRlciB0byBtYWludGFpbiBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHkgd2l0aCBjb2RlIHRoYXQgdXNlcyBmb3JtYXR0aW5nIG1hY3JvcyBmcm9tIFxmKENXXCooQ2A8aW50dHlwZXMuaD5cKihDJ1xmUi4KK0ZvciBleGFtcGxlOgorLlNwCisuVmIgMworXCYgICAgICAgICNkZWZpbmUgX1x8X1NURENfRk9STUFUX01BQ1JPUworXCYgICAgICAgICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorXCYgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPgorXCYgICAgICAgIAorXCYgICAgICAgIGludCBtYWluKCkgeworXCYgICAgICAgICAgaW50NjRfdCBpNjQgPSAxMjM7CitcJiAgICAgICAgICBwcmludGYoIk15IGludDY0OiAlIlBSSWQ2NCJcZW4iLCBpNjQpOworXCYgICAgICAgIH0KKy5WZQorLlNwCitJbiB0aGlzIGNhc2UsIFxmKENXXCooQ2BQUklkNjRcKihDJ1xmUiBpcyB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgcHJlcHJvY2Vzc2luZyB0b2tlbi4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1XbmFycm93aW5nXGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XbmFycm93aW5nICggYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIHdoZW4gYSBuYXJyb3dpbmcgY29udmVyc2lvbiBwcm9oaWJpdGVkIGJ5IFwqKEMrMTEgb2NjdXJzIHdpdGhpbgorXCZcZkJ7IH1cZlIsIGUuZy4KKy5TcAorLlZiIDEKK1wmICAgICAgICBpbnQgaSA9IHsgMi4yIH07IC8vIGVycm9yOiBuYXJyb3dpbmcgZnJvbSBkb3VibGUgdG8gaW50CisuVmUKKy5TcAorVGhpcyBmbGFnIGlzIGluY2x1ZGVkIGluIFxmQlwtV2FsbFxmUiBhbmQgXGZCXC1XYysrMTFcLWNvbXBhdFxmUi4KKy5TcAorV2l0aCBcZkJcLXN0ZD1jKysxMVxmUiwgXGZCXC1Xbm9cLW5hcnJvd2luZ1xmUiBzdXBwcmVzc2VzIHRoZSBkaWFnbm9zdGljCityZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIG1lYW5pbmcKK29mIHdlbGwtZm9ybWVkIGNvZGU7IG5hcnJvd2luZyBjb252ZXJzaW9ucyBhcmUgc3RpbGwgY29uc2lkZXJlZAoraWxsLWZvcm1lZCBpbiBccy0xU0ZJTkFFXHMwIGNvbnRleHQuCisuSVAgIlxmQlwtV25vZXhjZXB0XGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xbm9leGNlcHQgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBhIG5vZXhjZXB0LWV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlIGJlY2F1c2Ugb2YgYSBjYWxsCit0byBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgaGF2ZSBhIG5vbi10aHJvd2luZyBleGNlcHRpb24KK3NwZWNpZmljYXRpb24gKGkuZS4gXGZCXGYoQkl0aHJvdygpXGZCXGZSIG9yIFxmQm5vZXhjZXB0XGZSKSBidXQgaXMga25vd24gYnkKK3RoZSBjb21waWxlciB0byBuZXZlciB0aHJvdyBhbiBleGNlcHRpb24uCisuSVAgIlxmQlwtV25vblwtdmlydHVhbFwtZHRvclxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV25vbi12aXJ0dWFsLWR0b3IgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBhIGNsYXNzIGhhcyB2aXJ0dWFsIGZ1bmN0aW9ucyBhbmQgYW4gYWNjZXNzaWJsZSBub24tdmlydHVhbAorZGVzdHJ1Y3RvciwgaW4gd2hpY2ggY2FzZSBpdCBpcyBwb3NzaWJsZSBidXQgdW5zYWZlIHRvIGRlbGV0ZQorYW4gaW5zdGFuY2Ugb2YgYSBkZXJpdmVkIGNsYXNzIHRocm91Z2ggYSBwb2ludGVyIHRvIHRoZSBiYXNlIGNsYXNzLgorVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBpZiBcZkJcLVdlZmZjKytcZlIgaXMgc3BlY2lmaWVkLgorLklQICJcZkJcLVdyZW9yZGVyXGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XcmVvcmRlciAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiB3aGVuIHRoZSBvcmRlciBvZiBtZW1iZXIgaW5pdGlhbGl6ZXJzIGdpdmVuIGluIHRoZSBjb2RlIGRvZXMgbm90CittYXRjaCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBtdXN0IGJlIGV4ZWN1dGVkLiAgRm9yIGluc3RhbmNlOgorLlNwCisuVmIgNQorXCYgICAgICAgIHN0cnVjdCBBIHsKK1wmICAgICAgICAgIGludCBpOworXCYgICAgICAgICAgaW50IGo7CitcJiAgICAgICAgICBBKCk6IGogKDApLCBpICgxKSB7IH0KK1wmICAgICAgICB9OworLlZlCisuU3AKK1RoZSBjb21waWxlciByZWFycmFuZ2VzIHRoZSBtZW1iZXIgaW5pdGlhbGl6ZXJzIGZvciBcZkJpXGZSCithbmQgXGZCalxmUiB0byBtYXRjaCB0aGUgZGVjbGFyYXRpb24gb3JkZXIgb2YgdGhlIG1lbWJlcnMsIGVtaXR0aW5nCithIHdhcm5pbmcgdG8gdGhhdCBlZmZlY3QuICBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtZmV4dFwtbnVtZXJpY1wtbGl0ZXJhbHNcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLWZleHQtbnVtZXJpYy1saXRlcmFscyAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorQWNjZXB0IGltYWdpbmFyeSwgZml4ZWQtcG9pbnQsIG9yIG1hY2hpbmUtZGVmaW5lZAorbGl0ZXJhbCBudW1iZXIgc3VmZml4ZXMgYXMgXHMtMUdOVVxzMCBleHRlbnNpb25zLgorV2hlbiB0aGlzIG9wdGlvbiBpcyB0dXJuZWQgb2ZmIHRoZXNlIHN1ZmZpeGVzIGFyZSB0cmVhdGVkCithcyBcKihDKzExIHVzZXItZGVmaW5lZCBsaXRlcmFsIG51bWVyaWMgc3VmZml4ZXMuCitUaGlzIGlzIG9uIGJ5IGRlZmF1bHQgZm9yIGFsbCBwcmVcLVwqKEMrMTEgZGlhbGVjdHMgYW5kIGFsbCBccy0xR05VXHMwIGRpYWxlY3RzOgorXCZcZkJcLXN0ZD1jKys5OFxmUiwgXGZCXC1zdGQ9Z251Kys5OFxmUiwgXGZCXC1zdGQ9Z251KysxMVxmUiwKK1wmXGZCXC1zdGQ9Z251KysxeVxmUi4KK1RoaXMgb3B0aW9uIGlzIG9mZiBieSBkZWZhdWx0Citmb3IgXHMtMUlTT1xzMCBcKihDKzExIG9ud2FyZHMgKFxmQlwtc3RkPWMrKzExXGZSLCAuLi4pLgorLlBQCitUaGUgZm9sbG93aW5nIFxmQlwtVy4uLlxmUiBvcHRpb25zIGFyZSBub3QgYWZmZWN0ZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdlZmZjKytcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdlZmZjKysgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gYWJvdXQgdmlvbGF0aW9ucyBvZiB0aGUgZm9sbG93aW5nIHN0eWxlIGd1aWRlbGluZXMgZnJvbSBTY290dCBNZXllcnMnCitcJlxmSUVmZmVjdGl2ZSBcKihDKywgU2Vjb25kIEVkaXRpb25cZlIgYm9vazoKKy5SUyA0CisuSVAgIlwoYnUiIDQKK0l0ZW0gMTE6ICBEZWZpbmUgYSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhbiBhc3NpZ25tZW50IG9wZXJhdG9yIGZvciBjbGFzc2VzCit3aXRoIGR5bmFtaWNhbGx5LWFsbG9jYXRlZCBtZW1vcnkuCisuSVAgIlwoYnUiIDQKK0l0ZW0gMTI6ICBQcmVmZXIgaW5pdGlhbGl6YXRpb24gdG8gYXNzaWdubWVudCBpbiBjb25zdHJ1Y3RvcnMuCisuSVAgIlwoYnUiIDQKK0l0ZW0gMTQ6ICBNYWtlIGRlc3RydWN0b3JzIHZpcnR1YWwgaW4gYmFzZSBjbGFzc2VzLgorLklQICJcKGJ1IiA0CitJdGVtIDE1OiAgSGF2ZSBcZihDV1wqKENgb3BlcmF0b3I9XCooQydcZlIgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIFxmKENXKnRoaXNcZlIuCisuSVAgIlwoYnUiIDQKK0l0ZW0gMjM6ICBEb24ndCB0cnkgdG8gcmV0dXJuIGEgcmVmZXJlbmNlIHdoZW4geW91IG11c3QgcmV0dXJuIGFuIG9iamVjdC4KKy5SRQorLlJTIDQKKy5TcAorQWxzbyB3YXJuIGFib3V0IHZpb2xhdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBzdHlsZSBndWlkZWxpbmVzIGZyb20KK1Njb3R0IE1leWVycycgXGZJTW9yZSBFZmZlY3RpdmUgXCooQytcZlIgYm9vazoKKy5JUCAiXChidSIgNAorSXRlbSA2OiAgRGlzdGluZ3Vpc2ggYmV0d2VlbiBwcmVmaXggYW5kIHBvc3RmaXggZm9ybXMgb2YgaW5jcmVtZW50IGFuZAorZGVjcmVtZW50IG9wZXJhdG9ycy4KKy5JUCAiXChidSIgNAorSXRlbSA3OiAgTmV2ZXIgb3ZlcmxvYWQgXGYoQ1dcKihDYCYmXCooQydcZlIsIFxmKENXXCooQ2B8fFwqKEMnXGZSLCBvciBcZihDV1wqKENgLFwqKEMnXGZSLgorLlJFCisuUlMgNAorLlNwCitXaGVuIHNlbGVjdGluZyB0aGlzIG9wdGlvbiwgYmUgYXdhcmUgdGhhdCB0aGUgc3RhbmRhcmQgbGlicmFyeQoraGVhZGVycyBkbyBub3Qgb2JleSBhbGwgb2YgdGhlc2UgZ3VpZGVsaW5lczsgdXNlIFxmQmdyZXAgXC12XGZSCit0byBmaWx0ZXIgb3V0IHRob3NlIHdhcm5pbmdzLgorLlJFCisuSVAgIlxmQlwtV3N0cmljdFwtbnVsbFwtc2VudGluZWxcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdzdHJpY3QtbnVsbC1zZW50aW5lbCAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiBhYm91dCB0aGUgdXNlIG9mIGFuIHVuY2FzdGVkIFxmKENXXCooQ2BOVUxMXCooQydcZlIgYXMgc2VudGluZWwuICBXaGVuCitjb21waWxpbmcgb25seSB3aXRoIFxzLTFHQ0NcczAgdGhpcyBpcyBhIHZhbGlkIHNlbnRpbmVsLCBhcyBcZihDV1wqKENgTlVMTFwqKEMnXGZSIGlzIGRlZmluZWQKK3RvIFxmKENXXCooQ2BfXHxfbnVsbFwqKEMnXGZSLiAgQWx0aG91Z2ggaXQgaXMgYSBudWxsIHBvaW50ZXIgY29uc3RhbnQgcmF0aGVyIHRoYW4gYQorbnVsbCBwb2ludGVyLCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIG9mIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyLgorQnV0IHRoaXMgdXNlIGlzIG5vdCBwb3J0YWJsZSBhY3Jvc3MgZGlmZmVyZW50IGNvbXBpbGVycy4KKy5JUCAiXGZCXC1Xbm9cLW5vblwtdGVtcGxhdGVcLWZyaWVuZFxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV25vLW5vbi10ZW1wbGF0ZS1mcmllbmQgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK0Rpc2FibGUgd2FybmluZ3Mgd2hlbiBub24tdGVtcGxhdGl6ZWQgZnJpZW5kIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQKK3dpdGhpbiBhIHRlbXBsYXRlLiAgU2luY2UgdGhlIGFkdmVudCBvZiBleHBsaWNpdCB0ZW1wbGF0ZSBzcGVjaWZpY2F0aW9uCitzdXBwb3J0IGluIEcrKywgaWYgdGhlIG5hbWUgb2YgdGhlIGZyaWVuZCBpcyBhbiB1bnF1YWxpZmllZC1pZCAoaS5lLiwKK1wmXGZCZnJpZW5kIGZvbyhpbnQpXGZSKSwgdGhlIFwqKEMrIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gZGVtYW5kcyB0aGF0IHRoZQorZnJpZW5kIGRlY2xhcmUgb3IgZGVmaW5lIGFuIG9yZGluYXJ5LCBub250ZW1wbGF0ZSBmdW5jdGlvbi4gIChTZWN0aW9uCisxNC41LjMpLiAgQmVmb3JlIEcrKyBpbXBsZW1lbnRlZCBleHBsaWNpdCBzcGVjaWZpY2F0aW9uLCB1bnF1YWxpZmllZC1pZHMKK2NvdWxkIGJlIGludGVycHJldGVkIGFzIGEgcGFydGljdWxhciBzcGVjaWFsaXphdGlvbiBvZiBhIHRlbXBsYXRpemVkCitmdW5jdGlvbi4gIEJlY2F1c2UgdGhpcyBub24tY29uZm9ybWluZyBiZWhhdmlvciBpcyBubyBsb25nZXIgdGhlIGRlZmF1bHQKK2JlaGF2aW9yIGZvciBHKyssIFxmQlwtV25vblwtdGVtcGxhdGVcLWZyaWVuZFxmUiBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvCitjaGVjayBleGlzdGluZyBjb2RlIGZvciBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cyBhbmQgaXMgb24gYnkgZGVmYXVsdC4KK1RoaXMgbmV3IGNvbXBpbGVyIGJlaGF2aW9yIGNhbiBiZSB0dXJuZWQgb2ZmIHdpdGgKK1wmXGZCXC1Xbm9cLW5vblwtdGVtcGxhdGVcLWZyaWVuZFxmUiwgd2hpY2gga2VlcHMgdGhlIGNvbmZvcm1hbnQgY29tcGlsZXIgY29kZQorYnV0IGRpc2FibGVzIHRoZSBoZWxwZnVsIHdhcm5pbmcuCisuSVAgIlxmQlwtV29sZFwtc3R5bGVcLWNhc3RcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdvbGQtc3R5bGUtY2FzdCAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiBpZiBhbiBvbGQtc3R5bGUgKENcLXN0eWxlKSBjYXN0IHRvIGEgbm9uLXZvaWQgdHlwZSBpcyB1c2VkIHdpdGhpbgorYSBcKihDKyBwcm9ncmFtLiAgVGhlIG5ldy1zdHlsZSBjYXN0cyAoXGZCZHluYW1pY19jYXN0XGZSLAorXCZcZkJzdGF0aWNfY2FzdFxmUiwgXGZCcmVpbnRlcnByZXRfY2FzdFxmUiwgYW5kIFxmQmNvbnN0X2Nhc3RcZlIpIGFyZQorbGVzcyB2dWxuZXJhYmxlIHRvIHVuaW50ZW5kZWQgZWZmZWN0cyBhbmQgbXVjaCBlYXNpZXIgdG8gc2VhcmNoIGZvci4KKy5JUCAiXGZCXC1Xb3ZlcmxvYWRlZFwtdmlydHVhbFxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV292ZXJsb2FkZWQtdmlydHVhbCAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiB3aGVuIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gaGlkZXMgdmlydHVhbCBmdW5jdGlvbnMgZnJvbSBhCitiYXNlIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGluOgorLlNwCisuVmIgMworXCYgICAgICAgIHN0cnVjdCBBIHsKK1wmICAgICAgICAgIHZpcnR1YWwgdm9pZCBmKCk7CitcJiAgICAgICAgfTsKK1wmICAgICAgICAKK1wmICAgICAgICBzdHJ1Y3QgQjogcHVibGljIEEgeworXCYgICAgICAgICAgdm9pZCBmKGludCk7CitcJiAgICAgICAgfTsKKy5WZQorLlNwCit0aGUgXGYoQ1dcKihDYEFcKihDJ1xmUiBjbGFzcyB2ZXJzaW9uIG9mIFxmKENXXCooQ2BmXCooQydcZlIgaXMgaGlkZGVuIGluIFxmKENXXCooQ2BCXCooQydcZlIsIGFuZCBjb2RlCitsaWtlOgorLlNwCisuVmIgMgorXCYgICAgICAgIEIqIGI7CitcJiAgICAgICAgYlwtPmYoKTsKKy5WZQorLlNwCitmYWlscyB0byBjb21waWxlLgorLklQICJcZkJcLVdub1wtcG1mXC1jb252ZXJzaW9uc1xmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV25vLXBtZi1jb252ZXJzaW9ucyAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorRGlzYWJsZSB0aGUgZGlhZ25vc3RpYyBmb3IgY29udmVydGluZyBhIGJvdW5kIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uCit0byBhIHBsYWluIHBvaW50ZXIuCisuSVAgIlxmQlwtV3NpZ25cLXByb21vXGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xc2lnbi1wcm9tbyAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiB3aGVuIG92ZXJsb2FkIHJlc29sdXRpb24gY2hvb3NlcyBhIHByb21vdGlvbiBmcm9tIHVuc2lnbmVkIG9yCitlbnVtZXJhdGVkIHR5cGUgdG8gYSBzaWduZWQgdHlwZSwgb3ZlciBhIGNvbnZlcnNpb24gdG8gYW4gdW5zaWduZWQgdHlwZSBvZgordGhlIHNhbWUgc2l6ZS4gIFByZXZpb3VzIHZlcnNpb25zIG9mIEcrKyB0cmllZCB0byBwcmVzZXJ2ZQordW5zaWduZWRuZXNzLCBidXQgdGhlIHN0YW5kYXJkIG1hbmRhdGVzIHRoZSBjdXJyZW50IGJlaGF2aW9yLgorLlNTICJPcHRpb25zIENvbnRyb2xsaW5nIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrIERpYWxlY3RzIgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgQ29udHJvbGxpbmcgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS0gRGlhbGVjdHMiCisoXHMtMU5PVEU6XHMwIFRoaXMgbWFudWFsIGRvZXMgbm90IGRlc2NyaWJlIHRoZSBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKworbGFuZ3VhZ2VzIHRoZW1zZWx2ZXMuCisuUFAKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgYXJlIG9ubHkgbWVhbmluZ2Z1bAorZm9yIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrIHByb2dyYW1zLiAgWW91IGNhbiBhbHNvIHVzZSBtb3N0IG9mCit0aGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgXHMtMUdOVVxzMCBjb21waWxlciBvcHRpb25zLgorRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBjb21waWxlIGEgZmlsZSBcZihDV1wqKENgc29tZV9jbGFzcy5tXCooQydcZlIgbGlrZSB0aGlzOgorLlBQCisuVmIgMQorXCYgICAgICAgIGdjYyBcLWcgXC1mZ251XC1ydW50aW1lIFwtTyBcLWMgc29tZV9jbGFzcy5tCisuVmUKKy5QUAorSW4gdGhpcyBleGFtcGxlLCBcZkJcLWZnbnVcLXJ1bnRpbWVcZlIgaXMgYW4gb3B0aW9uIG1lYW50IG9ubHkgZm9yCitPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBwcm9ncmFtczsgeW91IGNhbiB1c2UgdGhlIG90aGVyIG9wdGlvbnMgd2l0aAorYW55IGxhbmd1YWdlIHN1cHBvcnRlZCBieSBccy0xR0NDXHMwLgorLlBQCitOb3RlIHRoYXQgc2luY2UgT2JqZWN0aXZlLUMgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBDIGxhbmd1YWdlLCBPYmplY3RpdmUtQworY29tcGlsYXRpb25zIG1heSBhbHNvIHVzZSBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBDIGZyb250LWVuZCAoZS5nLiwKK1wmXGZCXC1XdHJhZGl0aW9uYWxcZlIpLiAgU2ltaWxhcmx5LCBPYmplY3RpdmVcLVwqKEMrIGNvbXBpbGF0aW9ucyBtYXkgdXNlCitcJlwqKEMrXC1zcGVjaWZpYyBvcHRpb25zIChlLmcuLCBcZkJcLVdhYmlcZlIpLgorLlBQCitIZXJlIGlzIGEgbGlzdCBvZiBvcHRpb25zIHRoYXQgYXJlIFxmSW9ubHlcZlIgZm9yIGNvbXBpbGluZyBPYmplY3RpdmUtQworYW5kIE9iamVjdGl2ZVwtXCooQysgcHJvZ3JhbXM6CisuSVAgIlxmQlwtZmNvbnN0YW50XC1zdHJpbmdcLWNsYXNzPVxmUlxmSWNsYXNzLW5hbWVcZlIiIDQKKy5JWCBJdGVtICItZmNvbnN0YW50LXN0cmluZy1jbGFzcz1jbGFzcy1uYW1lIgorVXNlIFxmSWNsYXNzLW5hbWVcZlIgYXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIGZvciBlYWNoCitsaXRlcmFsIHN0cmluZyBzcGVjaWZpZWQgd2l0aCB0aGUgc3ludGF4IFxmKENXXCooQ2BAIi4uLiJcKihDJ1xmUi4gIFRoZSBkZWZhdWx0CitjbGFzcyBuYW1lIGlzIFxmKENXXCooQ2BOWENvbnN0YW50U3RyaW5nXCooQydcZlIgaWYgdGhlIFxzLTFHTlVcczAgcnVudGltZSBpcyBiZWluZyB1c2VkLCBhbmQKK1wmXGYoQ1dcKihDYE5TQ29uc3RhbnRTdHJpbmdcKihDJ1xmUiBpZiB0aGUgTmVYVCBydW50aW1lIGlzIGJlaW5nIHVzZWQgKHNlZSBiZWxvdykuICBUaGUKK1wmXGZCXC1mY29uc3RhbnRcLWNmc3RyaW5nc1xmUiBvcHRpb24sIGlmIGFsc28gcHJlc2VudCwgb3ZlcnJpZGVzIHRoZQorXCZcZkJcLWZjb25zdGFudFwtc3RyaW5nXC1jbGFzc1xmUiBzZXR0aW5nIGFuZCBjYXVzZSBcZihDV1wqKENgQCIuLi4iXCooQydcZlIgbGl0ZXJhbHMKK3RvIGJlIGxhaWQgb3V0IGFzIGNvbnN0YW50IENvcmVGb3VuZGF0aW9uIHN0cmluZ3MuCisuSVAgIlxmQlwtZmdudVwtcnVudGltZVxmUiIgNAorLklYIEl0ZW0gIi1mZ251LXJ1bnRpbWUiCitHZW5lcmF0ZSBvYmplY3QgY29kZSBjb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkIFxzLTFHTlVcczAgT2JqZWN0aXZlLUMKK3J1bnRpbWUuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IHR5cGVzIG9mIHN5c3RlbXMuCisuSVAgIlxmQlwtZm5leHRcLXJ1bnRpbWVcZlIiIDQKKy5JWCBJdGVtICItZm5leHQtcnVudGltZSIKK0dlbmVyYXRlIG91dHB1dCBjb21wYXRpYmxlIHdpdGggdGhlIE5lWFQgcnVudGltZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK2ZvciBOZVhULWJhc2VkIHN5c3RlbXMsIGluY2x1ZGluZyBEYXJ3aW4gYW5kIE1hYyBccy0xT1NcczAgWC4gIFRoZSBtYWNybworXCZcZihDV1wqKENgX1x8X05FWFRfUlVOVElNRV9cfF9cKihDJ1xmUiBpcyBwcmVkZWZpbmVkIGlmIChhbmQgb25seSBpZikgdGhpcyBvcHRpb24gaXMKK3VzZWQuCisuSVAgIlxmQlwtZm5vXC1uaWxcLXJlY2VpdmVyc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tbmlsLXJlY2VpdmVycyIKK0Fzc3VtZSB0aGF0IGFsbCBPYmplY3RpdmUtQyBtZXNzYWdlIGRpc3BhdGNoZXMgKFxmKENXXCooQ2BbcmVjZWl2ZXIKK21lc3NhZ2U6YXJnXVwqKEMnXGZSKSBpbiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQgZW5zdXJlIHRoYXQgdGhlIHJlY2VpdmVyIGlzCitub3QgXGYoQ1dcKihDYG5pbFwqKEMnXGZSLiAgVGhpcyBhbGxvd3MgZm9yIG1vcmUgZWZmaWNpZW50IGVudHJ5IHBvaW50cyBpbiB0aGUKK3J1bnRpbWUgdG8gYmUgdXNlZC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGgKK3RoZSBOZVhUIHJ1bnRpbWUgYW5kIFxzLTFBQklcczAgdmVyc2lvbiAwIG9yIDEuCisuSVAgIlxmQlwtZm9iamNcLWFiaVwtdmVyc2lvbj1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZvYmpjLWFiaS12ZXJzaW9uPW4iCitVc2UgdmVyc2lvbiBcZkluXGZSIG9mIHRoZSBPYmplY3RpdmUtQyBccy0xQUJJXHMwIGZvciB0aGUgc2VsZWN0ZWQgcnVudGltZS4KK1RoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBmb3IgdGhlIE5lWFQgcnVudGltZS4gIEluIHRoYXQKK2Nhc2UsIFZlcnNpb24gMCBpcyB0aGUgdHJhZGl0aW9uYWwgKDMyXC1iaXQpIFxzLTFBQklcczAgd2l0aG91dCBzdXBwb3J0IGZvcgorcHJvcGVydGllcyBhbmQgb3RoZXIgT2JqZWN0aXZlLUMgMi4wIGFkZGl0aW9ucy4gIFZlcnNpb24gMSBpcyB0aGUKK3RyYWRpdGlvbmFsICgzMlwtYml0KSBccy0xQUJJXHMwIHdpdGggc3VwcG9ydCBmb3IgcHJvcGVydGllcyBhbmQgb3RoZXIKK09iamVjdGl2ZS1DIDIuMCBhZGRpdGlvbnMuICBWZXJzaW9uIDIgaXMgdGhlIG1vZGVybiAoNjRcLWJpdCkgXHMtMUFCSVxzMC4gIElmCitub3RoaW5nIGlzIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgVmVyc2lvbiAwIG9uIDMyXC1iaXQgdGFyZ2V0CittYWNoaW5lcywgYW5kIFZlcnNpb24gMiBvbiA2NFwtYml0IHRhcmdldCBtYWNoaW5lcy4KKy5JUCAiXGZCXC1mb2JqY1wtY2FsbFwtY3h4XC1jZHRvcnNcZlIiIDQKKy5JWCBJdGVtICItZm9iamMtY2FsbC1jeHgtY2R0b3JzIgorRm9yIGVhY2ggT2JqZWN0aXZlLUMgY2xhc3MsIGNoZWNrIGlmIGFueSBvZiBpdHMgaW5zdGFuY2UgdmFyaWFibGVzIGlzIGEKK1wmXCooQysgb2JqZWN0IHdpdGggYSBub24tdHJpdmlhbCBkZWZhdWx0IGNvbnN0cnVjdG9yLiAgSWYgc28sIHN5bnRoZXNpemUgYQorc3BlY2lhbCBcZihDV1wqKENgXC0gKGlkKSAuY3h4X2NvbnN0cnVjdFwqKEMnXGZSIGluc3RhbmNlIG1ldGhvZCB3aGljaCBydW5zCitub24tdHJpdmlhbCBkZWZhdWx0IGNvbnN0cnVjdG9ycyBvbiBhbnkgc3VjaCBpbnN0YW5jZSB2YXJpYWJsZXMsIGluIG9yZGVyLAorYW5kIHRoZW4gcmV0dXJuIFxmKENXXCooQ2BzZWxmXCooQydcZlIuICBTaW1pbGFybHksIGNoZWNrIGlmIGFueSBpbnN0YW5jZSB2YXJpYWJsZQoraXMgYSBcKihDKyBvYmplY3Qgd2l0aCBhIG5vbi10cml2aWFsIGRlc3RydWN0b3IsIGFuZCBpZiBzbywgc3ludGhlc2l6ZSBhCitzcGVjaWFsIFxmKENXXCooQ2BcLSAodm9pZCkgLmN4eF9kZXN0cnVjdFwqKEMnXGZSIG1ldGhvZCB3aGljaCBydW5zCithbGwgc3VjaCBkZWZhdWx0IGRlc3RydWN0b3JzLCBpbiByZXZlcnNlIG9yZGVyLgorLlNwCitUaGUgXGYoQ1dcKihDYFwtIChpZCkgLmN4eF9jb25zdHJ1Y3RcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYFwtICh2b2lkKSAuY3h4X2Rlc3RydWN0XCooQydcZlIKK21ldGhvZHMgdGh1c2x5IGdlbmVyYXRlZCBvbmx5IG9wZXJhdGUgb24gaW5zdGFuY2UgdmFyaWFibGVzCitkZWNsYXJlZCBpbiB0aGUgY3VycmVudCBPYmplY3RpdmUtQyBjbGFzcywgYW5kIG5vdCB0aG9zZSBpbmhlcml0ZWQKK2Zyb20gc3VwZXJjbGFzc2VzLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBPYmplY3RpdmUtQworcnVudGltZSB0byBpbnZva2UgYWxsIHN1Y2ggbWV0aG9kcyBpbiBhbiBvYmplY3QncyBpbmhlcml0YW5jZQoraGllcmFyY2h5LiAgVGhlIFxmKENXXCooQ2BcLSAoaWQpIC5jeHhfY29uc3RydWN0XCooQydcZlIgbWV0aG9kcyBhcmUgaW52b2tlZAorYnkgdGhlIHJ1bnRpbWUgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBuZXcgb2JqZWN0IGluc3RhbmNlIGlzIGFsbG9jYXRlZDsKK3RoZSBcZihDV1wqKENgXC0gKHZvaWQpIC5jeHhfZGVzdHJ1Y3RcKihDJ1xmUiBtZXRob2RzIGFyZSBpbnZva2VkIGltbWVkaWF0ZWx5CitiZWZvcmUgdGhlIHJ1bnRpbWUgZGVhbGxvY2F0ZXMgYW4gb2JqZWN0IGluc3RhbmNlLgorLlNwCitBcyBvZiB0aGlzIHdyaXRpbmcsIG9ubHkgdGhlIE5lWFQgcnVudGltZSBvbiBNYWMgXHMtMU9TXHMwIFggMTAuNCBhbmQgbGF0ZXIgaGFzCitzdXBwb3J0IGZvciBpbnZva2luZyB0aGUgXGYoQ1dcKihDYFwtIChpZCkgLmN4eF9jb25zdHJ1Y3RcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYFwtICh2b2lkKSAuY3h4X2Rlc3RydWN0XCooQydcZlIgbWV0aG9kcy4KKy5JUCAiXGZCXC1mb2JqY1wtZGlyZWN0XC1kaXNwYXRjaFxmUiIgNAorLklYIEl0ZW0gIi1mb2JqYy1kaXJlY3QtZGlzcGF0Y2giCitBbGxvdyBmYXN0IGp1bXBzIHRvIHRoZSBtZXNzYWdlIGRpc3BhdGNoZXIuICBPbiBEYXJ3aW4gdGhpcyBpcworYWNjb21wbGlzaGVkIHZpYSB0aGUgY29tbSBwYWdlLgorLklQICJcZkJcLWZvYmpjXC1leGNlcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLWZvYmpjLWV4Y2VwdGlvbnMiCitFbmFibGUgc3ludGFjdGljIHN1cHBvcnQgZm9yIHN0cnVjdHVyZWQgZXhjZXB0aW9uIGhhbmRsaW5nIGluCitPYmplY3RpdmUtQywgc2ltaWxhciB0byB3aGF0IGlzIG9mZmVyZWQgYnkgXCooQysgYW5kIEphdmEuICBUaGlzIG9wdGlvbgoraXMgcmVxdWlyZWQgdG8gdXNlIHRoZSBPYmplY3RpdmUtQyBrZXl3b3JkcyBcZihDV0B0cnlcZlIsCitcJlxmKENXQHRocm93XGZSLCBcZihDV0BjYXRjaFxmUiwgXGYoQ1dAZmluYWxseVxmUiBhbmQKK1wmXGYoQ1dAc3luY2hyb25pemVkXGZSLiAgVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIHdpdGggYm90aCB0aGUgXHMtMUdOVVxzMAorcnVudGltZSBhbmQgdGhlIE5lWFQgcnVudGltZSAoYnV0IG5vdCBhdmFpbGFibGUgaW4gY29uanVuY3Rpb24gd2l0aAordGhlIE5lWFQgcnVudGltZSBvbiBNYWMgXHMtMU9TXHMwIFggMTAuMiBhbmQgZWFybGllcikuCisuSVAgIlxmQlwtZm9iamNcLWdjXGZSIiA0CisuSVggSXRlbSAiLWZvYmpjLWdjIgorRW5hYmxlIGdhcmJhZ2UgY29sbGVjdGlvbiAoXHMtMUdDXHMwKSBpbiBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKworcHJvZ3JhbXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIHRoZSBOZVhUIHJ1bnRpbWU7IHRoZQorXCZccy0xR05VXHMwIHJ1bnRpbWUgaGFzIGEgZGlmZmVyZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBpbXBsZW1lbnRhdGlvbiB0aGF0Citkb2VzIG5vdCByZXF1aXJlIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MuCisuSVAgIlxmQlwtZm9iamNcLW5pbGNoZWNrXGZSIiA0CisuSVggSXRlbSAiLWZvYmpjLW5pbGNoZWNrIgorRm9yIHRoZSBOZVhUIHJ1bnRpbWUgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIFxzLTFBQklcczAsIGNoZWNrIGZvciBhIG5pbAorcmVjZWl2ZXIgaW4gbWV0aG9kIGludm9jYXRpb25zIGJlZm9yZSBkb2luZyB0aGUgYWN0dWFsIG1ldGhvZCBjYWxsLgorVGhpcyBpcyB0aGUgZGVmYXVsdCBhbmQgY2FuIGJlIGRpc2FibGVkIHVzaW5nCitcJlxmQlwtZm5vXC1vYmpjXC1uaWxjaGVja1xmUi4gIENsYXNzIG1ldGhvZHMgYW5kIHN1cGVyIGNhbGxzIGFyZSBuZXZlcgorY2hlY2tlZCBmb3IgbmlsIGluIHRoaXMgd2F5IG5vIG1hdHRlciB3aGF0IHRoaXMgZmxhZyBpcyBzZXQgdG8uCitDdXJyZW50bHkgdGhpcyBmbGFnIGRvZXMgbm90aGluZyB3aGVuIHRoZSBccy0xR05VXHMwIHJ1bnRpbWUsIG9yIGFuIG9sZGVyCit2ZXJzaW9uIG9mIHRoZSBOZVhUIHJ1bnRpbWUgXHMtMUFCSVxzMCwgaXMgdXNlZC4KKy5JUCAiXGZCXC1mb2JqY1wtc3RkPW9iamMxXGZSIiA0CisuSVggSXRlbSAiLWZvYmpjLXN0ZD1vYmpjMSIKK0NvbmZvcm0gdG8gdGhlIGxhbmd1YWdlIHN5bnRheCBvZiBPYmplY3RpdmUtQyAxLjAsIHRoZSBsYW5ndWFnZQorcmVjb2duaXplZCBieSBccy0xR0NDXHMwIDQuMC4gIFRoaXMgb25seSBhZmZlY3RzIHRoZSBPYmplY3RpdmUtQyBhZGRpdGlvbnMgdG8KK3RoZSBDL1wqKEMrIGxhbmd1YWdlOyBpdCBkb2VzIG5vdCBhZmZlY3QgY29uZm9ybWFuY2UgdG8gQy9cKihDKyBzdGFuZGFyZHMsCit3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZXBhcmF0ZSBDL1wqKEMrIGRpYWxlY3Qgb3B0aW9uIGZsYWdzLiAgV2hlbgordGhpcyBvcHRpb24gaXMgdXNlZCB3aXRoIHRoZSBPYmplY3RpdmUtQyBvciBPYmplY3RpdmVcLVwqKEMrIGNvbXBpbGVyLAorYW55IE9iamVjdGl2ZS1DIHN5bnRheCB0aGF0IGlzIG5vdCByZWNvZ25pemVkIGJ5IFxzLTFHQ0NcczAgNC4wIGlzIHJlamVjdGVkLgorVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91ciBPYmplY3RpdmUtQyBjb2RlIGNhbgorYmUgY29tcGlsZWQgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBccy0xR0NDXHMwLgorLklQICJcZkJcLWZyZXBsYWNlXC1vYmpjXC1jbGFzc2VzXGZSIiA0CisuSVggSXRlbSAiLWZyZXBsYWNlLW9iamMtY2xhc3NlcyIKK0VtaXQgYSBzcGVjaWFsIG1hcmtlciBpbnN0cnVjdGluZyBcZkJcZihCSWxkXGZCXHwoMSlcZlIgbm90IHRvIHN0YXRpY2FsbHkgbGluayBpbgordGhlIHJlc3VsdGluZyBvYmplY3QgZmlsZSwgYW5kIGFsbG93IFxmQlxmKEJJZHlsZFxmQlx8KDEpXGZSIHRvIGxvYWQgaXQgaW4gYXQKK3J1biB0aW1lIGluc3RlYWQuICBUaGlzIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgRml4LWFuZC1Db250aW51ZQorZGVidWdnaW5nIG1vZGUsIHdoZXJlIHRoZSBvYmplY3QgZmlsZSBpbiBxdWVzdGlvbiBtYXkgYmUgcmVjb21waWxlZCBhbmQKK2R5bmFtaWNhbGx5IHJlbG9hZGVkIGluIHRoZSBjb3Vyc2Ugb2YgcHJvZ3JhbSBleGVjdXRpb24sIHdpdGhvdXQgdGhlIG5lZWQKK3RvIHJlc3RhcnQgdGhlIHByb2dyYW0gaXRzZWxmLiAgQ3VycmVudGx5LCBGaXgtYW5kLUNvbnRpbnVlIGZ1bmN0aW9uYWxpdHkKK2lzIG9ubHkgYXZhaWxhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE5lWFQgcnVudGltZSBvbiBNYWMgXHMtMU9TXHMwIFggMTAuMworYW5kIGxhdGVyLgorLklQICJcZkJcLWZ6ZXJvXC1saW5rXGZSIiA0CisuSVggSXRlbSAiLWZ6ZXJvLWxpbmsiCitXaGVuIGNvbXBpbGluZyBmb3IgdGhlIE5lWFQgcnVudGltZSwgdGhlIGNvbXBpbGVyIG9yZGluYXJpbHkgcmVwbGFjZXMgY2FsbHMKK3RvIFxmKENXXCooQ2BvYmpjX2dldENsYXNzKCIuLi4iKVwqKEMnXGZSICh3aGVuIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBpcyBrbm93biBhdAorY29tcGlsZSB0aW1lKSB3aXRoIHN0YXRpYyBjbGFzcyByZWZlcmVuY2VzIHRoYXQgZ2V0IGluaXRpYWxpemVkIGF0IGxvYWQgdGltZSwKK3doaWNoIGltcHJvdmVzIHJ1bi10aW1lIHBlcmZvcm1hbmNlLiAgU3BlY2lmeWluZyB0aGUgXGZCXC1memVyb1wtbGlua1xmUiBmbGFnCitzdXBwcmVzc2VzIHRoaXMgYmVoYXZpb3IgYW5kIGNhdXNlcyBjYWxscyB0byBcZihDV1wqKENgb2JqY19nZXRDbGFzcygiLi4uIilcKihDJ1xmUgordG8gYmUgcmV0YWluZWQuICBUaGlzIGlzIHVzZWZ1bCBpbiBaZXJvLUxpbmsgZGVidWdnaW5nIG1vZGUsIHNpbmNlIGl0IGFsbG93cworZm9yIGluZGl2aWR1YWwgY2xhc3MgaW1wbGVtZW50YXRpb25zIHRvIGJlIG1vZGlmaWVkIGR1cmluZyBwcm9ncmFtIGV4ZWN1dGlvbi4KK1RoZSBccy0xR05VXHMwIHJ1bnRpbWUgY3VycmVudGx5IGFsd2F5cyByZXRhaW5zIGNhbGxzIHRvIFxmKENXXCooQ2BvYmpjX2dldF9jbGFzcygiLi4uIilcKihDJ1xmUgorcmVnYXJkbGVzcyBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKy5JUCAiXGZCXC1nZW5cLWRlY2xzXGZSIiA0CisuSVggSXRlbSAiLWdlbi1kZWNscyIKK0R1bXAgaW50ZXJmYWNlIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGNsYXNzZXMgc2VlbiBpbiB0aGUgc291cmNlIGZpbGUgdG8gYQorZmlsZSBuYW1lZCBcZklcZklzb3VyY2VuYW1lXGZJLmRlY2xcZlIuCisuSVAgIlxmQlwtV2Fzc2lnblwtaW50ZXJjZXB0XGZSIChPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XYXNzaWduLWludGVyY2VwdCAoT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIHdoZW5ldmVyIGFuIE9iamVjdGl2ZS1DIGFzc2lnbm1lbnQgaXMgYmVpbmcgaW50ZXJjZXB0ZWQgYnkgdGhlCitnYXJiYWdlIGNvbGxlY3Rvci4KKy5JUCAiXGZCXC1Xbm9cLXByb3RvY29sXGZSIChPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xbm8tcHJvdG9jb2wgKE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorSWYgYSBjbGFzcyBpcyBkZWNsYXJlZCB0byBpbXBsZW1lbnQgYSBwcm90b2NvbCwgYSB3YXJuaW5nIGlzIGlzc3VlZCBmb3IKK2V2ZXJ5IG1ldGhvZCBpbiB0aGUgcHJvdG9jb2wgdGhhdCBpcyBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIGNsYXNzLiAgVGhlCitkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGlzc3VlIGEgd2FybmluZyBmb3IgZXZlcnkgbWV0aG9kIG5vdCBleHBsaWNpdGx5CitpbXBsZW1lbnRlZCBpbiB0aGUgY2xhc3MsIGV2ZW4gaWYgYSBtZXRob2QgaW1wbGVtZW50YXRpb24gaXMgaW5oZXJpdGVkCitmcm9tIHRoZSBzdXBlcmNsYXNzLiAgSWYgeW91IHVzZSB0aGUgXGZCXC1Xbm9cLXByb3RvY29sXGZSIG9wdGlvbiwgdGhlbgorbWV0aG9kcyBpbmhlcml0ZWQgZnJvbSB0aGUgc3VwZXJjbGFzcyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbXBsZW1lbnRlZCwKK2FuZCBubyB3YXJuaW5nIGlzIGlzc3VlZCBmb3IgdGhlbS4KKy5JUCAiXGZCXC1Xc2VsZWN0b3JcZlIgKE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdzZWxlY3RvciAoT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS0gb25seSkiCitXYXJuIGlmIG11bHRpcGxlIG1ldGhvZHMgb2YgZGlmZmVyZW50IHR5cGVzIGZvciB0aGUgc2FtZSBzZWxlY3RvciBhcmUKK2ZvdW5kIGR1cmluZyBjb21waWxhdGlvbi4gIFRoZSBjaGVjayBpcyBwZXJmb3JtZWQgb24gdGhlIGxpc3Qgb2YgbWV0aG9kcworaW4gdGhlIGZpbmFsIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiAgQWRkaXRpb25hbGx5LCBhIGNoZWNrIGlzIHBlcmZvcm1lZAorZm9yIGVhY2ggc2VsZWN0b3IgYXBwZWFyaW5nIGluIGEgXGYoQ1dcKihDYEBzZWxlY3RvciguLi4pXCooQydcZlIKK2V4cHJlc3Npb24sIGFuZCBhIGNvcnJlc3BvbmRpbmcgbWV0aG9kIGZvciB0aGF0IHNlbGVjdG9yIGhhcyBiZWVuIGZvdW5kCitkdXJpbmcgY29tcGlsYXRpb24uICBCZWNhdXNlIHRoZXNlIGNoZWNrcyBzY2FuIHRoZSBtZXRob2QgdGFibGUgb25seSBhdAordGhlIGVuZCBvZiBjb21waWxhdGlvbiwgdGhlc2Ugd2FybmluZ3MgYXJlIG5vdCBwcm9kdWNlZCBpZiB0aGUgZmluYWwKK3N0YWdlIG9mIGNvbXBpbGF0aW9uIGlzIG5vdCByZWFjaGVkLCBmb3IgZXhhbXBsZSBiZWNhdXNlIGFuIGVycm9yIGlzCitmb3VuZCBkdXJpbmcgY29tcGlsYXRpb24sIG9yIGJlY2F1c2UgdGhlIFxmQlwtZnN5bnRheFwtb25seVxmUiBvcHRpb24gaXMKK2JlaW5nIHVzZWQuCisuSVAgIlxmQlwtV3N0cmljdFwtc2VsZWN0b3JcLW1hdGNoXGZSIChPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xc3RyaWN0LXNlbGVjdG9yLW1hdGNoIChPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gaWYgbXVsdGlwbGUgbWV0aG9kcyB3aXRoIGRpZmZlcmluZyBhcmd1bWVudCBhbmQvb3IgcmV0dXJuIHR5cGVzIGFyZQorZm91bmQgZm9yIGEgZ2l2ZW4gc2VsZWN0b3Igd2hlbiBhdHRlbXB0aW5nIHRvIHNlbmQgYSBtZXNzYWdlIHVzaW5nIHRoaXMKK3NlbGVjdG9yIHRvIGEgcmVjZWl2ZXIgb2YgdHlwZSBcZihDV1wqKENgaWRcKihDJ1xmUiBvciBcZihDV1wqKENgQ2xhc3NcKihDJ1xmUi4gIFdoZW4gdGhpcyBmbGFnCitpcyBvZmYgKHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKSwgdGhlIGNvbXBpbGVyIG9taXRzIHN1Y2ggd2FybmluZ3MKK2lmIGFueSBkaWZmZXJlbmNlcyBmb3VuZCBhcmUgY29uZmluZWQgdG8gdHlwZXMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzaXplCithbmQgYWxpZ25tZW50LgorLklQICJcZkJcLVd1bmRlY2xhcmVkXC1zZWxlY3RvclxmUiAoT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV3VuZGVjbGFyZWQtc2VsZWN0b3IgKE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiBpZiBhIFxmKENXXCooQ2BAc2VsZWN0b3IoLi4uKVwqKEMnXGZSIGV4cHJlc3Npb24gcmVmZXJyaW5nIHRvIGFuCit1bmRlY2xhcmVkIHNlbGVjdG9yIGlzIGZvdW5kLiAgQSBzZWxlY3RvciBpcyBjb25zaWRlcmVkIHVuZGVjbGFyZWQgaWYgbm8KK21ldGhvZCB3aXRoIHRoYXQgbmFtZSBoYXMgYmVlbiBkZWNsYXJlZCBiZWZvcmUgdGhlCitcJlxmKENXXCooQ2BAc2VsZWN0b3IoLi4uKVwqKEMnXGZSIGV4cHJlc3Npb24sIGVpdGhlciBleHBsaWNpdGx5IGluIGFuCitcJlxmKENXQGludGVyZmFjZVxmUiBvciBcZihDV0Bwcm90b2NvbFxmUiBkZWNsYXJhdGlvbiwgb3IgaW1wbGljaXRseSBpbgorYW4gXGYoQ1dAaW1wbGVtZW50YXRpb25cZlIgc2VjdGlvbi4gIFRoaXMgb3B0aW9uIGFsd2F5cyBwZXJmb3JtcyBpdHMKK2NoZWNrcyBhcyBzb29uIGFzIGEgXGYoQ1dcKihDYEBzZWxlY3RvciguLi4pXCooQydcZlIgZXhwcmVzc2lvbiBpcyBmb3VuZCwKK3doaWxlIFxmQlwtV3NlbGVjdG9yXGZSIG9ubHkgcGVyZm9ybXMgaXRzIGNoZWNrcyBpbiB0aGUgZmluYWwgc3RhZ2Ugb2YKK2NvbXBpbGF0aW9uLiAgVGhpcyBhbHNvIGVuZm9yY2VzIHRoZSBjb2Rpbmcgc3R5bGUgY29udmVudGlvbgordGhhdCBtZXRob2RzIGFuZCBzZWxlY3RvcnMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgYmVpbmcgdXNlZC4KKy5JUCAiXGZCXC1wcmludFwtb2JqY1wtcnVudGltZVwtaW5mb1xmUiIgNAorLklYIEl0ZW0gIi1wcmludC1vYmpjLXJ1bnRpbWUtaW5mbyIKK0dlbmVyYXRlIEMgaGVhZGVyIGRlc2NyaWJpbmcgdGhlIGxhcmdlc3Qgc3RydWN0dXJlIHRoYXQgaXMgcGFzc2VkIGJ5Cit2YWx1ZSwgaWYgYW55LgorLlNTICJPcHRpb25zIHRvIENvbnRyb2wgRGlhZ25vc3RpYyBNZXNzYWdlcyBGb3JtYXR0aW5nIgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgdG8gQ29udHJvbCBEaWFnbm9zdGljIE1lc3NhZ2VzIEZvcm1hdHRpbmciCitUcmFkaXRpb25hbGx5LCBkaWFnbm9zdGljIG1lc3NhZ2VzIGhhdmUgYmVlbiBmb3JtYXR0ZWQgaXJyZXNwZWN0aXZlIG9mCit0aGUgb3V0cHV0IGRldmljZSdzIGFzcGVjdCAoZS5nLiBpdHMgd2lkdGgsIC4uLikuICBZb3UgY2FuIHVzZSB0aGUKK29wdGlvbnMgZGVzY3JpYmVkIGJlbG93Cit0byBjb250cm9sIHRoZSBmb3JtYXR0aW5nIGFsZ29yaXRobSBmb3IgZGlhZ25vc3RpYyBtZXNzYWdlcywgCitlLmcuIGhvdyBtYW55IGNoYXJhY3RlcnMgcGVyIGxpbmUsIGhvdyBvZnRlbiBzb3VyY2UgbG9jYXRpb24KK2luZm9ybWF0aW9uIHNob3VsZCBiZSByZXBvcnRlZC4gIE5vdGUgdGhhdCBzb21lIGxhbmd1YWdlIGZyb250IGVuZHMgbWF5IG5vdAoraG9ub3IgdGhlc2Ugb3B0aW9ucy4KKy5JUCAiXGZCXC1mbWVzc2FnZVwtbGVuZ3RoPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZm1lc3NhZ2UtbGVuZ3RoPW4iCitUcnkgdG8gZm9ybWF0IGVycm9yIG1lc3NhZ2VzIHNvIHRoYXQgdGhleSBmaXQgb24gbGluZXMgb2YgYWJvdXQgXGZJblxmUgorY2hhcmFjdGVycy4gIFRoZSBkZWZhdWx0IGlzIDcyIGNoYXJhY3RlcnMgZm9yIFxmQmcrK1xmUiBhbmQgMCBmb3IgdGhlIHJlc3Qgb2YKK3RoZSBmcm9udCBlbmRzIHN1cHBvcnRlZCBieSBccy0xR0NDXHMwLiAgSWYgXGZJblxmUiBpcyB6ZXJvLCB0aGVuIG5vCitsaW5lLXdyYXBwaW5nIGlzIGRvbmU7IGVhY2ggZXJyb3IgbWVzc2FnZSBhcHBlYXJzIG9uIGEgc2luZ2xlCitsaW5lLgorLklQICJcZkJcLWZkaWFnbm9zdGljc1wtc2hvd1wtbG9jYXRpb249b25jZVxmUiIgNAorLklYIEl0ZW0gIi1mZGlhZ25vc3RpY3Mtc2hvdy1sb2NhdGlvbj1vbmNlIgorT25seSBtZWFuaW5nZnVsIGluIGxpbmUtd3JhcHBpbmcgbW9kZS4gIEluc3RydWN0cyB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlcworcmVwb3J0ZXIgdG8gZW1pdCBzb3VyY2UgbG9jYXRpb24gaW5mb3JtYXRpb24gXGZJb25jZVxmUjsgdGhhdCBpcywgaW4KK2Nhc2UgdGhlIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gZml0IG9uIGEgc2luZ2xlIHBoeXNpY2FsIGxpbmUgYW5kIGhhcyB0bworYmUgd3JhcHBlZCwgdGhlIHNvdXJjZSBsb2NhdGlvbiB3b24ndCBiZSBlbWl0dGVkIChhcyBwcmVmaXgpIGFnYWluLAorb3ZlciBhbmQgb3ZlciwgaW4gc3Vic2VxdWVudCBjb250aW51YXRpb24gbGluZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0CitiZWhhdmlvci4KKy5JUCAiXGZCXC1mZGlhZ25vc3RpY3NcLXNob3dcLWxvY2F0aW9uPWV2ZXJ5XC1saW5lXGZSIiA0CisuSVggSXRlbSAiLWZkaWFnbm9zdGljcy1zaG93LWxvY2F0aW9uPWV2ZXJ5LWxpbmUiCitPbmx5IG1lYW5pbmdmdWwgaW4gbGluZS13cmFwcGluZyBtb2RlLiAgSW5zdHJ1Y3RzIHRoZSBkaWFnbm9zdGljCittZXNzYWdlcyByZXBvcnRlciB0byBlbWl0IHRoZSBzYW1lIHNvdXJjZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiAoYXMKK3ByZWZpeCkgZm9yIHBoeXNpY2FsIGxpbmVzIHRoYXQgcmVzdWx0IGZyb20gdGhlIHByb2Nlc3Mgb2YgYnJlYWtpbmcKK2EgbWVzc2FnZSB3aGljaCBpcyB0b28gbG9uZyB0byBmaXQgb24gYSBzaW5nbGUgbGluZS4KKy5JUCAiXGZCXC1mbm9cLWRpYWdub3N0aWNzXC1zaG93XC1vcHRpb25cZlIiIDQKKy5JWCBJdGVtICItZm5vLWRpYWdub3N0aWNzLXNob3ctb3B0aW9uIgorQnkgZGVmYXVsdCwgZWFjaCBkaWFnbm9zdGljIGVtaXR0ZWQgaW5jbHVkZXMgdGV4dCBpbmRpY2F0aW5nIHRoZQorY29tbWFuZC1saW5lIG9wdGlvbiB0aGF0IGRpcmVjdGx5IGNvbnRyb2xzIHRoZSBkaWFnbm9zdGljIChpZiBzdWNoIGFuCitvcHRpb24gaXMga25vd24gdG8gdGhlIGRpYWdub3N0aWMgbWFjaGluZXJ5KS4gIFNwZWNpZnlpbmcgdGhlCitcJlxmQlwtZm5vXC1kaWFnbm9zdGljc1wtc2hvd1wtb3B0aW9uXGZSIGZsYWcgc3VwcHJlc3NlcyB0aGF0IGJlaGF2aW9yLgorLklQICJcZkJcLWZub1wtZGlhZ25vc3RpY3NcLXNob3dcLWNhcmV0XGZSIiA0CisuSVggSXRlbSAiLWZuby1kaWFnbm9zdGljcy1zaG93LWNhcmV0IgorQnkgZGVmYXVsdCwgZWFjaCBkaWFnbm9zdGljIGVtaXR0ZWQgaW5jbHVkZXMgdGhlIG9yaWdpbmFsIHNvdXJjZSBsaW5lCithbmQgYSBjYXJldCAnXicgaW5kaWNhdGluZyB0aGUgY29sdW1uLiAgVGhpcyBvcHRpb24gc3VwcHJlc3NlcyB0aGlzCitpbmZvcm1hdGlvbi4KKy5TUyAiT3B0aW9ucyB0byBSZXF1ZXN0IG9yIFN1cHByZXNzIFdhcm5pbmdzIgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgdG8gUmVxdWVzdCBvciBTdXBwcmVzcyBXYXJuaW5ncyIKK1dhcm5pbmdzIGFyZSBkaWFnbm9zdGljIG1lc3NhZ2VzIHRoYXQgcmVwb3J0IGNvbnN0cnVjdGlvbnMgdGhhdAorYXJlIG5vdCBpbmhlcmVudGx5IGVycm9uZW91cyBidXQgdGhhdCBhcmUgcmlza3kgb3Igc3VnZ2VzdCB0aGVyZQorbWF5IGhhdmUgYmVlbiBhbiBlcnJvci4KKy5QUAorVGhlIGZvbGxvd2luZyBsYW5ndWFnZS1pbmRlcGVuZGVudCBvcHRpb25zIGRvIG5vdCBlbmFibGUgc3BlY2lmaWMKK3dhcm5pbmdzIGJ1dCBjb250cm9sIHRoZSBraW5kcyBvZiBkaWFnbm9zdGljcyBwcm9kdWNlZCBieSBccy0xR0NDXHMwLgorLklQICJcZkJcLWZzeW50YXhcLW9ubHlcZlIiIDQKKy5JWCBJdGVtICItZnN5bnRheC1vbmx5IgorQ2hlY2sgdGhlIGNvZGUgZm9yIHN5bnRheCBlcnJvcnMsIGJ1dCBkb24ndCBkbyBhbnl0aGluZyBiZXlvbmQgdGhhdC4KKy5JUCAiXGZCXC1mbWF4XC1lcnJvcnM9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mbWF4LWVycm9ycz1uIgorTGltaXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvciBtZXNzYWdlcyB0byBcZkluXGZSLCBhdCB3aGljaCBwb2ludAorXCZccy0xR0NDXHMwIGJhaWxzIG91dCByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgdGhlIHNvdXJjZQorY29kZS4gIElmIFxmSW5cZlIgaXMgMCAodGhlIGRlZmF1bHQpLCB0aGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgbnVtYmVyCitvZiBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZC4gIElmIFxmQlwtV2ZhdGFsXC1lcnJvcnNcZlIgaXMgYWxzbworc3BlY2lmaWVkLCB0aGVuIFxmQlwtV2ZhdGFsXC1lcnJvcnNcZlIgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMKK29wdGlvbi4KKy5JUCAiXGZCXC13XGZSIiA0CisuSVggSXRlbSAiLXciCitJbmhpYml0IGFsbCB3YXJuaW5nIG1lc3NhZ2VzLgorLklQICJcZkJcLVdlcnJvclxmUiIgNAorLklYIEl0ZW0gIi1XZXJyb3IiCitNYWtlIGFsbCB3YXJuaW5ncyBpbnRvIGVycm9ycy4KKy5JUCAiXGZCXC1XZXJyb3I9XGZSIiA0CisuSVggSXRlbSAiLVdlcnJvcj0iCitNYWtlIHRoZSBzcGVjaWZpZWQgd2FybmluZyBpbnRvIGFuIGVycm9yLiAgVGhlIHNwZWNpZmllciBmb3IgYSB3YXJuaW5nCitpcyBhcHBlbmRlZDsgZm9yIGV4YW1wbGUgXGZCXC1XZXJyb3I9c3dpdGNoXGZSIHR1cm5zIHRoZSB3YXJuaW5ncworY29udHJvbGxlZCBieSBcZkJcLVdzd2l0Y2hcZlIgaW50byBlcnJvcnMuICBUaGlzIHN3aXRjaCB0YWtlcyBhCituZWdhdGl2ZSBmb3JtLCB0byBiZSB1c2VkIHRvIG5lZ2F0ZSBcZkJcLVdlcnJvclxmUiBmb3Igc3BlY2lmaWMKK3dhcm5pbmdzOyBmb3IgZXhhbXBsZSBcZkJcLVdub1wtZXJyb3I9c3dpdGNoXGZSIG1ha2VzCitcJlxmQlwtV3N3aXRjaFxmUiB3YXJuaW5ncyBub3QgYmUgZXJyb3JzLCBldmVuIHdoZW4gXGZCXC1XZXJyb3JcZlIKK2lzIGluIGVmZmVjdC4KKy5TcAorVGhlIHdhcm5pbmcgbWVzc2FnZSBmb3IgZWFjaCBjb250cm9sbGFibGUgd2FybmluZyBpbmNsdWRlcyB0aGUKK29wdGlvbiB0aGF0IGNvbnRyb2xzIHRoZSB3YXJuaW5nLiAgVGhhdCBvcHRpb24gY2FuIHRoZW4gYmUgdXNlZCB3aXRoCitcJlxmQlwtV2Vycm9yPVxmUiBhbmQgXGZCXC1Xbm9cLWVycm9yPVxmUiBhcyBkZXNjcmliZWQgYWJvdmUuCisoUHJpbnRpbmcgb2YgdGhlIG9wdGlvbiBpbiB0aGUgd2FybmluZyBtZXNzYWdlIGNhbiBiZSBkaXNhYmxlZCB1c2luZyB0aGUKK1wmXGZCXC1mbm9cLWRpYWdub3N0aWNzXC1zaG93XC1vcHRpb25cZlIgZmxhZy4pCisuU3AKK05vdGUgdGhhdCBzcGVjaWZ5aW5nIFxmQlwtV2Vycm9yPVxmUlxmSWZvb1xmUiBhdXRvbWF0aWNhbGx5IGltcGxpZXMKK1wmXGZCXC1XXGZSXGZJZm9vXGZSLiAgSG93ZXZlciwgXGZCXC1Xbm9cLWVycm9yPVxmUlxmSWZvb1xmUiBkb2VzIG5vdAoraW1wbHkgYW55dGhpbmcuCisuSVAgIlxmQlwtV2ZhdGFsXC1lcnJvcnNcZlIiIDQKKy5JWCBJdGVtICItV2ZhdGFsLWVycm9ycyIKK1RoaXMgb3B0aW9uIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gYWJvcnQgY29tcGlsYXRpb24gb24gdGhlIGZpcnN0IGVycm9yCitvY2N1cnJlZCByYXRoZXIgdGhhbiB0cnlpbmcgdG8ga2VlcCBnb2luZyBhbmQgcHJpbnRpbmcgZnVydGhlciBlcnJvcgorbWVzc2FnZXMuCisuUFAKK1lvdSBjYW4gcmVxdWVzdCBtYW55IHNwZWNpZmljIHdhcm5pbmdzIHdpdGggb3B0aW9ucyBiZWdpbm5pbmcgd2l0aAorXCZcZkJcLVdcZlIsIGZvciBleGFtcGxlIFxmQlwtV2ltcGxpY2l0XGZSIHRvIHJlcXVlc3Qgd2FybmluZ3Mgb24KK2ltcGxpY2l0IGRlY2xhcmF0aW9ucy4gIEVhY2ggb2YgdGhlc2Ugc3BlY2lmaWMgd2FybmluZyBvcHRpb25zIGFsc28KK2hhcyBhIG5lZ2F0aXZlIGZvcm0gYmVnaW5uaW5nIFxmQlwtV25vXC1cZlIgdG8gdHVybiBvZmYgd2FybmluZ3M7IGZvcgorZXhhbXBsZSwgXGZCXC1Xbm9cLWltcGxpY2l0XGZSLiAgVGhpcyBtYW51YWwgbGlzdHMgb25seSBvbmUgb2YgdGhlCit0d28gZm9ybXMsIHdoaWNoZXZlciBpcyBub3QgdGhlIGRlZmF1bHQuICBGb3IgZnVydGhlcgorbGFuZ3VhZ2Utc3BlY2lmaWMgb3B0aW9ucyBhbHNvIHJlZmVyIHRvIFxmQlwqKEMrIERpYWxlY3QgT3B0aW9uc1xmUiBhbmQKK1wmXGZCT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgRGlhbGVjdCBPcHRpb25zXGZSLgorLlBQCitXaGVuIGFuIHVucmVjb2duaXplZCB3YXJuaW5nIG9wdGlvbiBpcyByZXF1ZXN0ZWQgKGUuZy4sCitcJlxmQlwtV3Vua25vd25cLXdhcm5pbmdcZlIpLCBccy0xR0NDXHMwIGVtaXRzIGEgZGlhZ25vc3RpYyBzdGF0aW5nCit0aGF0IHRoZSBvcHRpb24gaXMgbm90IHJlY29nbml6ZWQuICBIb3dldmVyLCBpZiB0aGUgXGZCXC1Xbm9cLVxmUiBmb3JtCitpcyB1c2VkLCB0aGUgYmVoYXZpb3IgaXMgc2xpZ2h0bHkgZGlmZmVyZW50OiBubyBkaWFnbm9zdGljIGlzCitwcm9kdWNlZCBmb3IgXGZCXC1Xbm9cLXVua25vd25cLXdhcm5pbmdcZlIgdW5sZXNzIG90aGVyIGRpYWdub3N0aWNzCithcmUgYmVpbmcgcHJvZHVjZWQuICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIG5ldyBcZkJcLVdub1wtXGZSIG9wdGlvbnMKK3dpdGggb2xkIGNvbXBpbGVycywgYnV0IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLCB0aGUgY29tcGlsZXIKK3dhcm5zIHRoYXQgYW4gdW5yZWNvZ25pemVkIG9wdGlvbiBpcyBwcmVzZW50LgorLklQICJcZkJcLVdwZWRhbnRpY1xmUiIgNAorLklYIEl0ZW0gIi1XcGVkYW50aWMiCisuUEQgMAorLklQICJcZkJcLXBlZGFudGljXGZSIiA0CisuSVggSXRlbSAiLXBlZGFudGljIgorLlBECitJc3N1ZSBhbGwgdGhlIHdhcm5pbmdzIGRlbWFuZGVkIGJ5IHN0cmljdCBccy0xSVNPXHMwIEMgYW5kIFxzLTFJU09cczAgXCooQys7CityZWplY3QgYWxsIHByb2dyYW1zIHRoYXQgdXNlIGZvcmJpZGRlbiBleHRlbnNpb25zLCBhbmQgc29tZSBvdGhlcgorcHJvZ3JhbXMgdGhhdCBkbyBub3QgZm9sbG93IFxzLTFJU09cczAgQyBhbmQgXHMtMUlTT1xzMCBcKihDKy4gIEZvciBccy0xSVNPXHMwIEMsIGZvbGxvd3MgdGhlCit2ZXJzaW9uIG9mIHRoZSBccy0xSVNPXHMwIEMgc3RhbmRhcmQgc3BlY2lmaWVkIGJ5IGFueSBcZkJcLXN0ZFxmUiBvcHRpb24gdXNlZC4KKy5TcAorVmFsaWQgXHMtMUlTT1xzMCBDIGFuZCBccy0xSVNPXHMwIFwqKEMrIHByb2dyYW1zIHNob3VsZCBjb21waWxlIHByb3Blcmx5IHdpdGggb3Igd2l0aG91dAordGhpcyBvcHRpb24gKHRob3VnaCBhIHJhcmUgZmV3IHJlcXVpcmUgXGZCXC1hbnNpXGZSIG9yIGEKK1wmXGZCXC1zdGRcZlIgb3B0aW9uIHNwZWNpZnlpbmcgdGhlIHJlcXVpcmVkIHZlcnNpb24gb2YgXHMtMUlTT1xzMCBDKS4gIEhvd2V2ZXIsCit3aXRob3V0IHRoaXMgb3B0aW9uLCBjZXJ0YWluIFxzLTFHTlVcczAgZXh0ZW5zaW9ucyBhbmQgdHJhZGl0aW9uYWwgQyBhbmQgXCooQysKK2ZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQgYXMgd2VsbC4gIFdpdGggdGhpcyBvcHRpb24sIHRoZXkgYXJlIHJlamVjdGVkLgorLlNwCitcJlxmQlwtV3BlZGFudGljXGZSIGRvZXMgbm90IGNhdXNlIHdhcm5pbmcgbWVzc2FnZXMgZm9yIHVzZSBvZiB0aGUKK2FsdGVybmF0ZSBrZXl3b3JkcyB3aG9zZSBuYW1lcyBiZWdpbiBhbmQgZW5kIHdpdGggXGZCX1x8X1xmUi4gIFBlZGFudGljCit3YXJuaW5ncyBhcmUgYWxzbyBkaXNhYmxlZCBpbiB0aGUgZXhwcmVzc2lvbiB0aGF0IGZvbGxvd3MKK1wmXGYoQ1dcKihDYF9cfF9leHRlbnNpb25fXHxfXCooQydcZlIuICBIb3dldmVyLCBvbmx5IHN5c3RlbSBoZWFkZXIgZmlsZXMgc2hvdWxkIHVzZQordGhlc2UgZXNjYXBlIHJvdXRlczsgYXBwbGljYXRpb24gcHJvZ3JhbXMgc2hvdWxkIGF2b2lkIHRoZW0uCisuU3AKK1NvbWUgdXNlcnMgdHJ5IHRvIHVzZSBcZkJcLVdwZWRhbnRpY1xmUiB0byBjaGVjayBwcm9ncmFtcyBmb3Igc3RyaWN0IFxzLTFJU09cczAKK0MgY29uZm9ybWFuY2UuICBUaGV5IHNvb24gZmluZCB0aGF0IGl0IGRvZXMgbm90IGRvIHF1aXRlIHdoYXQgdGhleSB3YW50OgoraXQgZmluZHMgc29tZSBub24tSVNPIHByYWN0aWNlcywgYnV0IG5vdCBhbGxcLVwtXC1vbmx5IHRob3NlIGZvciB3aGljaAorXCZccy0xSVNPXHMwIEMgXGZJcmVxdWlyZXNcZlIgYSBkaWFnbm9zdGljLCBhbmQgc29tZSBvdGhlcnMgZm9yIHdoaWNoCitkaWFnbm9zdGljcyBoYXZlIGJlZW4gYWRkZWQuCisuU3AKK0EgZmVhdHVyZSB0byByZXBvcnQgYW55IGZhaWx1cmUgdG8gY29uZm9ybSB0byBccy0xSVNPXHMwIEMgbWlnaHQgYmUgdXNlZnVsIGluCitzb21lIGluc3RhbmNlcywgYnV0IHdvdWxkIHJlcXVpcmUgY29uc2lkZXJhYmxlIGFkZGl0aW9uYWwgd29yayBhbmQgd291bGQKK2JlIHF1aXRlIGRpZmZlcmVudCBmcm9tIFxmQlwtV3BlZGFudGljXGZSLiAgV2UgZG9uJ3QgaGF2ZSBwbGFucyB0bworc3VwcG9ydCBzdWNoIGEgZmVhdHVyZSBpbiB0aGUgbmVhciBmdXR1cmUuCisuU3AKK1doZXJlIHRoZSBzdGFuZGFyZCBzcGVjaWZpZWQgd2l0aCBcZkJcLXN0ZFxmUiByZXByZXNlbnRzIGEgXHMtMUdOVVxzMAorZXh0ZW5kZWQgZGlhbGVjdCBvZiBDLCBzdWNoIGFzIFxmQmdudTkwXGZSIG9yIFxmQmdudTk5XGZSLCB0aGVyZSBpcyBhCitjb3JyZXNwb25kaW5nIFxmSWJhc2Ugc3RhbmRhcmRcZlIsIHRoZSB2ZXJzaW9uIG9mIFxzLTFJU09cczAgQyBvbiB3aGljaCB0aGUgXHMtMUdOVVxzMAorZXh0ZW5kZWQgZGlhbGVjdCBpcyBiYXNlZC4gIFdhcm5pbmdzIGZyb20gXGZCXC1XcGVkYW50aWNcZlIgYXJlIGdpdmVuCit3aGVyZSB0aGV5IGFyZSByZXF1aXJlZCBieSB0aGUgYmFzZSBzdGFuZGFyZC4gIChJdCBkb2VzIG5vdCBtYWtlIHNlbnNlCitmb3Igc3VjaCB3YXJuaW5ncyB0byBiZSBnaXZlbiBvbmx5IGZvciBmZWF0dXJlcyBub3QgaW4gdGhlIHNwZWNpZmllZCBccy0xR05VXHMwCitDIGRpYWxlY3QsIHNpbmNlIGJ5IGRlZmluaXRpb24gdGhlIFxzLTFHTlVcczAgZGlhbGVjdHMgb2YgQyBpbmNsdWRlIGFsbAorZmVhdHVyZXMgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHdpdGggdGhlIGdpdmVuIG9wdGlvbiwgYW5kIHRoZXJlIHdvdWxkIGJlCitub3RoaW5nIHRvIHdhcm4gYWJvdXQuKQorLklQICJcZkJcLXBlZGFudGljXC1lcnJvcnNcZlIiIDQKKy5JWCBJdGVtICItcGVkYW50aWMtZXJyb3JzIgorTGlrZSBcZkJcLVdwZWRhbnRpY1xmUiwgZXhjZXB0IHRoYXQgZXJyb3JzIGFyZSBwcm9kdWNlZCByYXRoZXIgdGhhbgord2FybmluZ3MuCisuSVAgIlxmQlwtV2FsbFxmUiIgNAorLklYIEl0ZW0gIi1XYWxsIgorVGhpcyBlbmFibGVzIGFsbCB0aGUgd2FybmluZ3MgYWJvdXQgY29uc3RydWN0aW9ucyB0aGF0IHNvbWUgdXNlcnMKK2NvbnNpZGVyIHF1ZXN0aW9uYWJsZSwgYW5kIHRoYXQgYXJlIGVhc3kgdG8gYXZvaWQgKG9yIG1vZGlmeSB0bworcHJldmVudCB0aGUgd2FybmluZyksIGV2ZW4gaW4gY29uanVuY3Rpb24gd2l0aCBtYWNyb3MuICBUaGlzIGFsc28KK2VuYWJsZXMgc29tZSBsYW5ndWFnZS1zcGVjaWZpYyB3YXJuaW5ncyBkZXNjcmliZWQgaW4gXGZCXCooQysgRGlhbGVjdAorT3B0aW9uc1xmUiBhbmQgXGZCT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZVwtXCooQysgRGlhbGVjdCBPcHRpb25zXGZSLgorLlNwCitcJlxmQlwtV2FsbFxmUiB0dXJucyBvbiB0aGUgZm9sbG93aW5nIHdhcm5pbmcgZmxhZ3M6CisuU3AKK1wmXGZCXC1XYWRkcmVzcyAgIAorXCZcLVdhcnJheVwtYm91bmRzXGZSIChvbmx5IHdpdGhcZkIgXGZSXGZCXC1PMlxmUikgIAorXCZcZkJcLVdjKysxMVwtY29tcGF0ICAKK1wmXC1XY2hhclwtc3Vic2NyaXB0cyAgCitcJlwtV2VudW1cLWNvbXBhcmVcZlIgKGluIEMvT2JqQzsgdGhpcyBpcyBvbiBieSBkZWZhdWx0IGluIFwqKEMrKSAKK1wmXGZCXC1XaW1wbGljaXRcLWludFxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkgCitcJlxmQlwtV2ltcGxpY2l0XC1mdW5jdGlvblwtZGVjbGFyYXRpb25cZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIAorXCZcZkJcLVdjb21tZW50ICAKK1wmXC1XZm9ybWF0ICAgCitcJlwtV21haW5cZlIgKG9ubHkgZm9yIEMvT2JqQyBhbmQgdW5sZXNzXGZCIFxmUlxmQlwtZmZyZWVzdGFuZGluZ1xmUikgIAorXCZcZkJcLVdtYXliZVwtdW5pbml0aWFsaXplZCAKK1wmXC1XbWlzc2luZ1wtYnJhY2VzXGZSIChvbmx5IGZvciBDL09iakMpIAorXCZcZkJcLVdub25udWxsICAKK1wmXC1XcGFyZW50aGVzZXMgIAorXCZcLVdwb2ludGVyXC1zaWduICAKK1wmXC1XcmVvcmRlciAgIAorXCZcLVdyZXR1cm5cLXR5cGUgIAorXCZcLVdzZXF1ZW5jZVwtcG9pbnQgIAorXCZcLVdzaWduXC1jb21wYXJlXGZSIChvbmx5IGluIFwqKEMrKSAgCitcJlxmQlwtV3N0cmljdFwtYWxpYXNpbmcgIAorXCZcLVdzdHJpY3RcLW92ZXJmbG93PTEgIAorXCZcLVdzd2l0Y2ggIAorXCZcLVd0cmlncmFwaHMgIAorXCZcLVd1bmluaXRpYWxpemVkICAKK1wmXC1XdW5rbm93blwtcHJhZ21hcyAgCitcJlwtV3VudXNlZFwtZnVuY3Rpb24gIAorXCZcLVd1bnVzZWRcLWxhYmVsICAgICAKK1wmXC1XdW51c2VkXC12YWx1ZSAgICAgCitcJlwtV3VudXNlZFwtdmFyaWFibGUgIAorXCZcLVd2b2xhdGlsZVwtcmVnaXN0ZXJcLXZhclxmUgorLlNwCitOb3RlIHRoYXQgc29tZSB3YXJuaW5nIGZsYWdzIGFyZSBub3QgaW1wbGllZCBieSBcZkJcLVdhbGxcZlIuICBTb21lIG9mCit0aGVtIHdhcm4gYWJvdXQgY29uc3RydWN0aW9ucyB0aGF0IHVzZXJzIGdlbmVyYWxseSBkbyBub3QgY29uc2lkZXIKK3F1ZXN0aW9uYWJsZSwgYnV0IHdoaWNoIG9jY2FzaW9uYWxseSB5b3UgbWlnaHQgd2lzaCB0byBjaGVjayBmb3I7CitvdGhlcnMgd2FybiBhYm91dCBjb25zdHJ1Y3Rpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBvciBoYXJkIHRvIGF2b2lkIGluCitzb21lIGNhc2VzLCBhbmQgdGhlcmUgaXMgbm8gc2ltcGxlIHdheSB0byBtb2RpZnkgdGhlIGNvZGUgdG8gc3VwcHJlc3MKK3RoZSB3YXJuaW5nLiBTb21lIG9mIHRoZW0gYXJlIGVuYWJsZWQgYnkgXGZCXC1XZXh0cmFcZlIgYnV0IG1hbnkgb2YKK3RoZW0gbXVzdCBiZSBlbmFibGVkIGluZGl2aWR1YWxseS4KKy5JUCAiXGZCXC1XZXh0cmFcZlIiIDQKKy5JWCBJdGVtICItV2V4dHJhIgorVGhpcyBlbmFibGVzIHNvbWUgZXh0cmEgd2FybmluZyBmbGFncyB0aGF0IGFyZSBub3QgZW5hYmxlZCBieQorXCZcZkJcLVdhbGxcZlIuIChUaGlzIG9wdGlvbiB1c2VkIHRvIGJlIGNhbGxlZCBcZkJcLVdcZlIuICBUaGUgb2xkZXIKK25hbWUgaXMgc3RpbGwgc3VwcG9ydGVkLCBidXQgdGhlIG5ld2VyIG5hbWUgaXMgbW9yZSBkZXNjcmlwdGl2ZS4pCisuU3AKK1wmXGZCXC1XY2xvYmJlcmVkICAKK1wmXC1XZW1wdHlcLWJvZHkgIAorXCZcLVdpZ25vcmVkXC1xdWFsaWZpZXJzIAorXCZcLVdtaXNzaW5nXC1maWVsZFwtaW5pdGlhbGl6ZXJzICAKK1wmXC1XbWlzc2luZ1wtcGFyYW1ldGVyXC10eXBlXGZSIChDIG9ubHkpICAKK1wmXGZCXC1Xb2xkXC1zdHlsZVwtZGVjbGFyYXRpb25cZlIgKEMgb25seSkgIAorXCZcZkJcLVdvdmVycmlkZVwtaW5pdCAgCitcJlwtV3NpZ25cLWNvbXBhcmUgIAorXCZcLVd0eXBlXC1saW1pdHMgIAorXCZcLVd1bmluaXRpYWxpemVkICAKK1wmXC1XdW51c2VkXC1wYXJhbWV0ZXJcZlIgKG9ubHkgd2l0aFxmQiBcZlJcZkJcLVd1bnVzZWRcZlJcZkIgXGZSb3JcZkIgXGZSXGZCXC1XYWxsXGZSKSAKK1wmXGZCXC1XdW51c2VkXC1idXRcLXNldFwtcGFyYW1ldGVyXGZSIChvbmx5IHdpdGhcZkIgXGZSXGZCXC1XdW51c2VkXGZSXGZCIFxmUm9yXGZCIFxmUlxmQlwtV2FsbFxmUikgIFxmQiBcZlIKKy5TcAorVGhlIG9wdGlvbiBcZkJcLVdleHRyYVxmUiBhbHNvIHByaW50cyB3YXJuaW5nIG1lc3NhZ2VzIGZvciB0aGUKK2ZvbGxvd2luZyBjYXNlczoKKy5SUyA0CisuSVAgIlwoYnUiIDQKK0EgcG9pbnRlciBpcyBjb21wYXJlZCBhZ2FpbnN0IGludGVnZXIgemVybyB3aXRoIFxmQjxcZlIsIFxmQjw9XGZSLAorXCZcZkI+XGZSLCBvciBcZkI+PVxmUi4KKy5JUCAiXChidSIgNAorKFwqKEMrIG9ubHkpIEFuIGVudW1lcmF0b3IgYW5kIGEgbm9uLWVudW1lcmF0b3IgYm90aCBhcHBlYXIgaW4gYQorY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KKy5JUCAiXChidSIgNAorKFwqKEMrIG9ubHkpIEFtYmlndW91cyB2aXJ0dWFsIGJhc2VzLgorLklQICJcKGJ1IiA0CisoXCooQysgb25seSkgU3Vic2NyaXB0aW5nIGFuIGFycmF5IHRoYXQgaGFzIGJlZW4gZGVjbGFyZWQgXGZCcmVnaXN0ZXJcZlIuCisuSVAgIlwoYnUiIDQKKyhcKihDKyBvbmx5KSBUYWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSB2YXJpYWJsZSB0aGF0IGhhcyBiZWVuIGRlY2xhcmVkCitcJlxmQnJlZ2lzdGVyXGZSLgorLklQICJcKGJ1IiA0CisoXCooQysgb25seSkgQSBiYXNlIGNsYXNzIGlzIG5vdCBpbml0aWFsaXplZCBpbiBhIGRlcml2ZWQgY2xhc3MncyBjb3B5Citjb25zdHJ1Y3Rvci4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLVdjaGFyXC1zdWJzY3JpcHRzXGZSIiA0CisuSVggSXRlbSAiLVdjaGFyLXN1YnNjcmlwdHMiCitXYXJuIGlmIGFuIGFycmF5IHN1YnNjcmlwdCBoYXMgdHlwZSBcZihDV1wqKENgY2hhclwqKEMnXGZSLiAgVGhpcyBpcyBhIGNvbW1vbiBjYXVzZQorb2YgZXJyb3IsIGFzIHByb2dyYW1tZXJzIG9mdGVuIGZvcmdldCB0aGF0IHRoaXMgdHlwZSBpcyBzaWduZWQgb24gc29tZQorbWFjaGluZXMuCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2NvbW1lbnRcZlIiIDQKKy5JWCBJdGVtICItV2NvbW1lbnQiCitXYXJuIHdoZW5ldmVyIGEgY29tbWVudC1zdGFydCBzZXF1ZW5jZSBcZkIvKlxmUiBhcHBlYXJzIGluIGEgXGZCLypcZlIKK2NvbW1lbnQsIG9yIHdoZW5ldmVyIGEgQmFja3NsYXNoLU5ld2xpbmUgYXBwZWFycyBpbiBhIFxmQi8vXGZSIGNvbW1lbnQuCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV25vXC1jb3ZlcmFnZVwtbWlzbWF0Y2hcZlIiIDQKKy5JWCBJdGVtICItV25vLWNvdmVyYWdlLW1pc21hdGNoIgorV2FybiBpZiBmZWVkYmFjayBwcm9maWxlcyBkbyBub3QgbWF0Y2ggd2hlbiB1c2luZyB0aGUKK1wmXGZCXC1mcHJvZmlsZVwtdXNlXGZSIG9wdGlvbi4KK0lmIGEgc291cmNlIGZpbGUgaXMgY2hhbmdlZCBiZXR3ZWVuIGNvbXBpbGluZyB3aXRoIFxmQlwtZnByb2ZpbGVcLWdlblxmUiBhbmQKK3dpdGggXGZCXC1mcHJvZmlsZVwtdXNlXGZSLCB0aGUgZmlsZXMgd2l0aCB0aGUgcHJvZmlsZSBmZWVkYmFjayBjYW4gZmFpbAordG8gbWF0Y2ggdGhlIHNvdXJjZSBmaWxlIGFuZCBccy0xR0NDXHMwIGNhbm5vdCB1c2UgdGhlIHByb2ZpbGUgZmVlZGJhY2sKK2luZm9ybWF0aW9uLiAgQnkgZGVmYXVsdCwgdGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYW5kIGlzIHRyZWF0ZWQgYXMgYW4KK2Vycm9yLiAgXGZCXC1Xbm9cLWNvdmVyYWdlXC1taXNtYXRjaFxmUiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoZQord2FybmluZyBvciBcZkJcLVdub1wtZXJyb3I9Y292ZXJhZ2VcLW1pc21hdGNoXGZSIGNhbiBiZSB1c2VkIHRvCitkaXNhYmxlIHRoZSBlcnJvci4gIERpc2FibGluZyB0aGUgZXJyb3IgZm9yIHRoaXMgd2FybmluZyBjYW4gcmVzdWx0IGluCitwb29ybHkgb3B0aW1pemVkIGNvZGUgYW5kIGlzIHVzZWZ1bCBvbmx5IGluIHRoZQorY2FzZSBvZiB2ZXJ5IG1pbm9yIGNoYW5nZXMgc3VjaCBhcyBidWcgZml4ZXMgdG8gYW4gZXhpc3RpbmcgY29kZS1iYXNlLgorQ29tcGxldGVseSBkaXNhYmxpbmcgdGhlIHdhcm5pbmcgaXMgbm90IHJlY29tbWVuZGVkLgorLklQICJcZkJcLVdub1wtY3BwXGZSIiA0CisuSVggSXRlbSAiLVduby1jcHAiCisoQywgT2JqZWN0aXZlLUMsIFwqKEMrLCBPYmplY3RpdmVcLVwqKEMrIGFuZCBGb3J0cmFuIG9ubHkpCisuU3AKK1N1cHByZXNzIHdhcm5pbmcgbWVzc2FnZXMgZW1pdHRlZCBieSBcZihDV1wqKENgI3dhcm5pbmdcKihDJ1xmUiBkaXJlY3RpdmVzLgorLklQICJcZkJcLVdkb3VibGVcLXByb21vdGlvblxmUiAoQywgXCooQyssIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdkb3VibGUtcHJvbW90aW9uIChDLCAsIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorR2l2ZSBhIHdhcm5pbmcgd2hlbiBhIHZhbHVlIG9mIHR5cGUgXGYoQ1dcKihDYGZsb2F0XCooQydcZlIgaXMgaW1wbGljaXRseQorcHJvbW90ZWQgdG8gXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSLiAgQ1BVcyB3aXRoIGEgMzJcLWJpdCBcKihMInNpbmdsZS1wcmVjaXNpb25cKihSIgorZmxvYXRpbmctcG9pbnQgdW5pdCBpbXBsZW1lbnQgXGYoQ1dcKihDYGZsb2F0XCooQydcZlIgaW4gaGFyZHdhcmUsIGJ1dCBlbXVsYXRlCitcJlxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiBpbiBzb2Z0d2FyZS4gIE9uIHN1Y2ggYSBtYWNoaW5lLCBkb2luZyBjb21wdXRhdGlvbnMKK3VzaW5nIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiB2YWx1ZXMgaXMgbXVjaCBtb3JlIGV4cGVuc2l2ZSBiZWNhdXNlIG9mIHRoZQorb3ZlcmhlYWQgcmVxdWlyZWQgZm9yIHNvZnR3YXJlIGVtdWxhdGlvbi4KKy5TcAorSXQgaXMgZWFzeSB0byBhY2NpZGVudGFsbHkgZG8gY29tcHV0YXRpb25zIHdpdGggXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSIGJlY2F1c2UKK2Zsb2F0aW5nLXBvaW50IGxpdGVyYWxzIGFyZSBpbXBsaWNpdGx5IG9mIHR5cGUgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSLiAgRm9yCitleGFtcGxlLCBpbjoKKy5TcAorLlZiIDQKK1wmICAgICAgICBmbG9hdCBhcmVhKGZsb2F0IHJhZGl1cykKK1wmICAgICAgICB7CitcJiAgICAgICAgICAgcmV0dXJuIDMuMTQxNTkgKiByYWRpdXMgKiByYWRpdXM7CitcJiAgICAgICAgfQorLlZlCisuU3AKK3RoZSBjb21waWxlciBwZXJmb3JtcyB0aGUgZW50aXJlIGNvbXB1dGF0aW9uIHdpdGggXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSCitiZWNhdXNlIHRoZSBmbG9hdGluZy1wb2ludCBsaXRlcmFsIGlzIGEgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSLgorLklQICJcZkJcLVdmb3JtYXRcZlIiIDQKKy5JWCBJdGVtICItV2Zvcm1hdCIKKy5QRCAwCisuSVAgIlxmQlwtV2Zvcm1hdD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLVdmb3JtYXQ9biIKKy5QRAorQ2hlY2sgY2FsbHMgdG8gXGYoQ1dcKihDYHByaW50ZlwqKEMnXGZSIGFuZCBcZihDV1wqKENgc2NhbmZcKihDJ1xmUiwgZXRjLiwgdG8gbWFrZSBzdXJlIHRoYXQKK3RoZSBhcmd1bWVudHMgc3VwcGxpZWQgaGF2ZSB0eXBlcyBhcHByb3ByaWF0ZSB0byB0aGUgZm9ybWF0IHN0cmluZworc3BlY2lmaWVkLCBhbmQgdGhhdCB0aGUgY29udmVyc2lvbnMgc3BlY2lmaWVkIGluIHRoZSBmb3JtYXQgc3RyaW5nIG1ha2UKK3NlbnNlLiAgVGhpcyBpbmNsdWRlcyBzdGFuZGFyZCBmdW5jdGlvbnMsIGFuZCBvdGhlcnMgc3BlY2lmaWVkIGJ5IGZvcm1hdAorYXR0cmlidXRlcywgaW4gdGhlIFxmKENXXCooQ2BwcmludGZcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHNjYW5mXCooQydcZlIsIFxmKENXXCooQ2BzdHJmdGltZVwqKEMnXGZSIGFuZCBcZihDV1wqKENgc3RyZm1vblwqKEMnXGZSIChhbiBYL09wZW4gZXh0ZW5zaW9uLAorbm90IGluIHRoZSBDIHN0YW5kYXJkKSBmYW1pbGllcyAob3Igb3RoZXIgdGFyZ2V0LXNwZWNpZmljIGZhbWlsaWVzKS4KK1doaWNoIGZ1bmN0aW9ucyBhcmUgY2hlY2tlZCB3aXRob3V0IGZvcm1hdCBhdHRyaWJ1dGVzIGhhdmluZyBiZWVuCitzcGVjaWZpZWQgZGVwZW5kcyBvbiB0aGUgc3RhbmRhcmQgdmVyc2lvbiBzZWxlY3RlZCwgYW5kIHN1Y2ggY2hlY2tzIG9mCitmdW5jdGlvbnMgd2l0aG91dCB0aGUgYXR0cmlidXRlIHNwZWNpZmllZCBhcmUgZGlzYWJsZWQgYnkKK1wmXGZCXC1mZnJlZXN0YW5kaW5nXGZSIG9yIFxmQlwtZm5vXC1idWlsdGluXGZSLgorLlNwCitUaGUgZm9ybWF0cyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBmb3JtYXQgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IFxzLTFHTlVcczAKK2xpYmMgdmVyc2lvbiAyLjIuICBUaGVzZSBpbmNsdWRlIGFsbCBccy0xSVNPXHMwIEM5MCBhbmQgQzk5IGZlYXR1cmVzLCBhcyB3ZWxsCithcyBmZWF0dXJlcyBmcm9tIHRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uIGFuZCBzb21lIFxzLTFCU0RcczAgYW5kIFxzLTFHTlVcczAKK2V4dGVuc2lvbnMuICBPdGhlciBsaWJyYXJ5IGltcGxlbWVudGF0aW9ucyBtYXkgbm90IHN1cHBvcnQgYWxsIHRoZXNlCitmZWF0dXJlczsgXHMtMUdDQ1xzMCBkb2VzIG5vdCBzdXBwb3J0IHdhcm5pbmcgYWJvdXQgZmVhdHVyZXMgdGhhdCBnbyBiZXlvbmQgYQorcGFydGljdWxhciBsaWJyYXJ5J3MgbGltaXRhdGlvbnMuICBIb3dldmVyLCBpZiBcZkJcLVdwZWRhbnRpY1xmUiBpcyB1c2VkCit3aXRoIFxmQlwtV2Zvcm1hdFxmUiwgd2FybmluZ3MgYXJlIGdpdmVuIGFib3V0IGZvcm1hdCBmZWF0dXJlcyBub3QKK2luIHRoZSBzZWxlY3RlZCBzdGFuZGFyZCB2ZXJzaW9uIChidXQgbm90IGZvciBcZihDV1wqKENgc3RyZm1vblwqKEMnXGZSIGZvcm1hdHMsCitzaW5jZSB0aG9zZSBhcmUgbm90IGluIGFueSB2ZXJzaW9uIG9mIHRoZSBDIHN0YW5kYXJkKS4KKy5SUyA0CisuSVAgIlxmQlwtV2Zvcm1hdD0xXGZSIiA0CisuSVggSXRlbSAiLVdmb3JtYXQ9MSIKKy5QRCAwCisuSVAgIlxmQlwtV2Zvcm1hdFxmUiIgNAorLklYIEl0ZW0gIi1XZm9ybWF0IgorLlBECitPcHRpb24gXGZCXC1XZm9ybWF0XGZSIGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1XZm9ybWF0PTFcZlIsIGFuZAorXCZcZkJcLVdub1wtZm9ybWF0XGZSIGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1XZm9ybWF0PTBcZlIuICBTaW5jZQorXCZcZkJcLVdmb3JtYXRcZlIgYWxzbyBjaGVja3MgZm9yIG51bGwgZm9ybWF0IGFyZ3VtZW50cyBmb3Igc2V2ZXJhbAorZnVuY3Rpb25zLCBcZkJcLVdmb3JtYXRcZlIgYWxzbyBpbXBsaWVzIFxmQlwtV25vbm51bGxcZlIuICBTb21lCithc3BlY3RzIG9mIHRoaXMgbGV2ZWwgb2YgZm9ybWF0IGNoZWNraW5nIGNhbiBiZSBkaXNhYmxlZCBieSB0aGUKK29wdGlvbnM6IFxmQlwtV25vXC1mb3JtYXRcLWNvbnRhaW5zXC1udWxcZlIsCitcJlxmQlwtV25vXC1mb3JtYXRcLWV4dHJhXC1hcmdzXGZSLCBhbmQgXGZCXC1Xbm9cLWZvcm1hdFwtemVyb1wtbGVuZ3RoXGZSLgorXCZcZkJcLVdmb3JtYXRcZlIgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV25vXC1mb3JtYXRcLWNvbnRhaW5zXC1udWxcZlIiIDQKKy5JWCBJdGVtICItV25vLWZvcm1hdC1jb250YWlucy1udWwiCitJZiBcZkJcLVdmb3JtYXRcZlIgaXMgc3BlY2lmaWVkLCBkbyBub3Qgd2FybiBhYm91dCBmb3JtYXQgc3RyaW5ncyB0aGF0Citjb250YWluIFxzLTFOVUxcczAgYnl0ZXMuCisuSVAgIlxmQlwtV25vXC1mb3JtYXRcLWV4dHJhXC1hcmdzXGZSIiA0CisuSVggSXRlbSAiLVduby1mb3JtYXQtZXh0cmEtYXJncyIKK0lmIFxmQlwtV2Zvcm1hdFxmUiBpcyBzcGVjaWZpZWQsIGRvIG5vdCB3YXJuIGFib3V0IGV4Y2VzcyBhcmd1bWVudHMgdG8gYQorXCZcZihDV1wqKENgcHJpbnRmXCooQydcZlIgb3IgXGYoQ1dcKihDYHNjYW5mXCooQydcZlIgZm9ybWF0IGZ1bmN0aW9uLiAgVGhlIEMgc3RhbmRhcmQgc3BlY2lmaWVzCit0aGF0IHN1Y2ggYXJndW1lbnRzIGFyZSBpZ25vcmVkLgorLlNwCitXaGVyZSB0aGUgdW51c2VkIGFyZ3VtZW50cyBsaWUgYmV0d2VlbiB1c2VkIGFyZ3VtZW50cyB0aGF0IGFyZQorc3BlY2lmaWVkIHdpdGggXGZCJFxmUiBvcGVyYW5kIG51bWJlciBzcGVjaWZpY2F0aW9ucywgbm9ybWFsbHkKK3dhcm5pbmdzIGFyZSBzdGlsbCBnaXZlbiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIGNvdWxkIG5vdCBrbm93IHdoYXQKK3R5cGUgdG8gcGFzcyB0byBcZihDV1wqKENgdmFfYXJnXCooQydcZlIgdG8gc2tpcCB0aGUgdW51c2VkIGFyZ3VtZW50cy4gIEhvd2V2ZXIsCitpbiB0aGUgY2FzZSBvZiBcZihDV1wqKENgc2NhbmZcKihDJ1xmUiBmb3JtYXRzLCB0aGlzIG9wdGlvbiBzdXBwcmVzc2VzIHRoZQord2FybmluZyBpZiB0aGUgdW51c2VkIGFyZ3VtZW50cyBhcmUgYWxsIHBvaW50ZXJzLCBzaW5jZSB0aGUgU2luZ2xlCitVbml4IFNwZWNpZmljYXRpb24gc2F5cyB0aGF0IHN1Y2ggdW51c2VkIGFyZ3VtZW50cyBhcmUgYWxsb3dlZC4KKy5JUCAiXGZCXC1Xbm9cLWZvcm1hdFwtemVyb1wtbGVuZ3RoXGZSIiA0CisuSVggSXRlbSAiLVduby1mb3JtYXQtemVyby1sZW5ndGgiCitJZiBcZkJcLVdmb3JtYXRcZlIgaXMgc3BlY2lmaWVkLCBkbyBub3Qgd2FybiBhYm91dCB6ZXJvLWxlbmd0aCBmb3JtYXRzLgorVGhlIEMgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgemVyby1sZW5ndGggZm9ybWF0cyBhcmUgYWxsb3dlZC4KKy5JUCAiXGZCXC1XZm9ybWF0PTJcZlIiIDQKKy5JWCBJdGVtICItV2Zvcm1hdD0yIgorRW5hYmxlIFxmQlwtV2Zvcm1hdFxmUiBwbHVzIGFkZGl0aW9uYWwgZm9ybWF0IGNoZWNrcy4gIEN1cnJlbnRseQorZXF1aXZhbGVudCB0byBcZkJcLVdmb3JtYXQgXC1XZm9ybWF0XC1ub25saXRlcmFsIFwtV2Zvcm1hdFwtc2VjdXJpdHkKK1wmXC1XZm9ybWF0XC15MmtcZlIuCisuSVAgIlxmQlwtV2Zvcm1hdFwtbm9ubGl0ZXJhbFxmUiIgNAorLklYIEl0ZW0gIi1XZm9ybWF0LW5vbmxpdGVyYWwiCitJZiBcZkJcLVdmb3JtYXRcZlIgaXMgc3BlY2lmaWVkLCBhbHNvIHdhcm4gaWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMgbm90IGEKK3N0cmluZyBsaXRlcmFsIGFuZCBzbyBjYW5ub3QgYmUgY2hlY2tlZCwgdW5sZXNzIHRoZSBmb3JtYXQgZnVuY3Rpb24KK3Rha2VzIGl0cyBmb3JtYXQgYXJndW1lbnRzIGFzIGEgXGYoQ1dcKihDYHZhX2xpc3RcKihDJ1xmUi4KKy5JUCAiXGZCXC1XZm9ybWF0XC1zZWN1cml0eVxmUiIgNAorLklYIEl0ZW0gIi1XZm9ybWF0LXNlY3VyaXR5IgorSWYgXGZCXC1XZm9ybWF0XGZSIGlzIHNwZWNpZmllZCwgYWxzbyB3YXJuIGFib3V0IHVzZXMgb2YgZm9ybWF0CitmdW5jdGlvbnMgdGhhdCByZXByZXNlbnQgcG9zc2libGUgc2VjdXJpdHkgcHJvYmxlbXMuICBBdCBwcmVzZW50LCB0aGlzCit3YXJucyBhYm91dCBjYWxscyB0byBcZihDV1wqKENgcHJpbnRmXCooQydcZlIgYW5kIFxmKENXXCooQ2BzY2FuZlwqKEMnXGZSIGZ1bmN0aW9ucyB3aGVyZSB0aGUKK2Zvcm1hdCBzdHJpbmcgaXMgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZXJlIGFyZSBubyBmb3JtYXQgYXJndW1lbnRzLAorYXMgaW4gXGYoQ1dcKihDYHByaW50ZiAoZm9vKTtcKihDJ1xmUi4gIFRoaXMgbWF5IGJlIGEgc2VjdXJpdHkgaG9sZSBpZiB0aGUgZm9ybWF0CitzdHJpbmcgY2FtZSBmcm9tIHVudHJ1c3RlZCBpbnB1dCBhbmQgY29udGFpbnMgXGZCXGYoQ0IlblxmQlxmUi4gIChUaGlzIGlzCitjdXJyZW50bHkgYSBzdWJzZXQgb2Ygd2hhdCBcZkJcLVdmb3JtYXRcLW5vbmxpdGVyYWxcZlIgd2FybnMgYWJvdXQsIGJ1dAoraW4gZnV0dXJlIHdhcm5pbmdzIG1heSBiZSBhZGRlZCB0byBcZkJcLVdmb3JtYXRcLXNlY3VyaXR5XGZSIHRoYXQgYXJlIG5vdAoraW5jbHVkZWQgaW4gXGZCXC1XZm9ybWF0XC1ub25saXRlcmFsXGZSLikKKy5JUCAiXGZCXC1XZm9ybWF0XC15MmtcZlIiIDQKKy5JWCBJdGVtICItV2Zvcm1hdC15MmsiCitJZiBcZkJcLVdmb3JtYXRcZlIgaXMgc3BlY2lmaWVkLCBhbHNvIHdhcm4gYWJvdXQgXGYoQ1dcKihDYHN0cmZ0aW1lXCooQydcZlIKK2Zvcm1hdHMgdGhhdCBtYXkgeWllbGQgb25seSBhIHR3by1kaWdpdCB5ZWFyLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtV25vbm51bGxcZlIiIDQKKy5JWCBJdGVtICItV25vbm51bGwiCitXYXJuIGFib3V0IHBhc3NpbmcgYSBudWxsIHBvaW50ZXIgZm9yIGFyZ3VtZW50cyBtYXJrZWQgYXMKK3JlcXVpcmluZyBhIG5vbi1udWxsIHZhbHVlIGJ5IHRoZSBcZihDV1wqKENgbm9ubnVsbFwqKEMnXGZSIGZ1bmN0aW9uIGF0dHJpYnV0ZS4KKy5TcAorXCZcZkJcLVdub25udWxsXGZSIGlzIGluY2x1ZGVkIGluIFxmQlwtV2FsbFxmUiBhbmQgXGZCXC1XZm9ybWF0XGZSLiAgSXQKK2NhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZSBcZkJcLVdub1wtbm9ubnVsbFxmUiBvcHRpb24uCisuSVAgIlxmQlwtV2luaXRcLXNlbGZcZlIgKEMsIFwqKEMrLCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XaW5pdC1zZWxmIChDLCAsIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiBhYm91dCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0aGF0IGFyZSBpbml0aWFsaXplZCB3aXRoIHRoZW1zZWx2ZXMuCitOb3RlIHRoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgXGZCXC1XdW5pbml0aWFsaXplZFxmUiBvcHRpb24uCisuU3AKK0ZvciBleGFtcGxlLCBccy0xR0NDXHMwIHdhcm5zIGFib3V0IFxmKENXXCooQ2BpXCooQydcZlIgYmVpbmcgdW5pbml0aWFsaXplZCBpbiB0aGUKK2ZvbGxvd2luZyBzbmlwcGV0IG9ubHkgd2hlbiBcZkJcLVdpbml0XC1zZWxmXGZSIGhhcyBiZWVuIHNwZWNpZmllZDoKKy5TcAorLlZiIDUKK1wmICAgICAgICBpbnQgZigpCitcJiAgICAgICAgeworXCYgICAgICAgICAgaW50IGkgPSBpOworXCYgICAgICAgICAgcmV0dXJuIGk7CitcJiAgICAgICAgfQorLlZlCisuU3AKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUiBpbiBcKihDKy4KKy5JUCAiXGZCXC1XaW1wbGljaXRcLWludFxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV2ltcGxpY2l0LWludCAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIHdoZW4gYSBkZWNsYXJhdGlvbiBkb2VzIG5vdCBzcGVjaWZ5IGEgdHlwZS4KK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XaW1wbGljaXRcLWZ1bmN0aW9uXC1kZWNsYXJhdGlvblxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK0dpdmUgYSB3YXJuaW5nIHdoZW5ldmVyIGEgZnVuY3Rpb24gaXMgdXNlZCBiZWZvcmUgYmVpbmcgZGVjbGFyZWQuIEluCitDOTkgbW9kZSAoXGZCXC1zdGQ9Yzk5XGZSIG9yIFxmQlwtc3RkPWdudTk5XGZSKSwgdGhpcyB3YXJuaW5nIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYW5kIGl0IGlzIG1hZGUgaW50byBhbiBlcnJvciBieQorXCZcZkJcLXBlZGFudGljXC1lcnJvcnNcZlIuIFRoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgYnkKK1wmXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdpbXBsaWNpdFxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV2ltcGxpY2l0IChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1NhbWUgYXMgXGZCXC1XaW1wbGljaXRcLWludFxmUiBhbmQgXGZCXC1XaW1wbGljaXRcLWZ1bmN0aW9uXC1kZWNsYXJhdGlvblxmUi4KK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XaWdub3JlZFwtcXVhbGlmaWVyc1xmUiAoQyBhbmQgXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV2lnbm9yZWQtcXVhbGlmaWVycyAoQyBhbmQgIG9ubHkpIgorV2FybiBpZiB0aGUgcmV0dXJuIHR5cGUgb2YgYSBmdW5jdGlvbiBoYXMgYSB0eXBlIHF1YWxpZmllcgorc3VjaCBhcyBcZihDV1wqKENgY29uc3RcKihDJ1xmUi4gIEZvciBccy0xSVNPXHMwIEMgc3VjaCBhIHR5cGUgcXVhbGlmaWVyIGhhcyBubyBlZmZlY3QsCitzaW5jZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYSBmdW5jdGlvbiBpcyBub3QgYW4gbHZhbHVlLgorRm9yIFwqKEMrLCB0aGUgd2FybmluZyBpcyBvbmx5IGVtaXR0ZWQgZm9yIHNjYWxhciB0eXBlcyBvciBcZihDV1wqKENgdm9pZFwqKEMnXGZSLgorXCZccy0xSVNPXHMwIEMgcHJvaGliaXRzIHF1YWxpZmllZCBcZihDV1wqKENgdm9pZFwqKEMnXGZSIHJldHVybiB0eXBlcyBvbiBmdW5jdGlvbgorZGVmaW5pdGlvbnMsIHNvIHN1Y2ggcmV0dXJuIHR5cGVzIGFsd2F5cyByZWNlaXZlIGEgd2FybmluZworZXZlbiB3aXRob3V0IHRoaXMgb3B0aW9uLgorLlNwCitUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IFxmQlwtV2V4dHJhXGZSLgorLklQICJcZkJcLVdtYWluXGZSIiA0CisuSVggSXRlbSAiLVdtYWluIgorV2FybiBpZiB0aGUgdHlwZSBvZiBcZkJtYWluXGZSIGlzIHN1c3BpY2lvdXMuICBcZkJtYWluXGZSIHNob3VsZCBiZQorYSBmdW5jdGlvbiB3aXRoIGV4dGVybmFsIGxpbmthZ2UsIHJldHVybmluZyBpbnQsIHRha2luZyBlaXRoZXIgemVybworYXJndW1lbnRzLCB0d28sIG9yIHRocmVlIGFyZ3VtZW50cyBvZiBhcHByb3ByaWF0ZSB0eXBlcy4gIFRoaXMgd2FybmluZworaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIFwqKEMrIGFuZCBpcyBlbmFibGVkIGJ5IGVpdGhlciBcZkJcLVdhbGxcZlIKK29yIFxmQlwtV3BlZGFudGljXGZSLgorLklQICJcZkJcLVdtaXNzaW5nXC1icmFjZXNcZlIiIDQKKy5JWCBJdGVtICItV21pc3NpbmctYnJhY2VzIgorV2FybiBpZiBhbiBhZ2dyZWdhdGUgb3IgdW5pb24gaW5pdGlhbGl6ZXIgaXMgbm90IGZ1bGx5IGJyYWNrZXRlZC4gIEluCit0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBpbml0aWFsaXplciBmb3IgXGZCYVxmUiBpcyBub3QgZnVsbHkKK2JyYWNrZXRlZCwgYnV0IHRoYXQgZm9yIFxmQmJcZlIgaXMgZnVsbHkgYnJhY2tldGVkLiAgVGhpcyB3YXJuaW5nIGlzCitlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUiBpbiBDLgorLlNwCisuVmIgMgorXCYgICAgICAgIGludCBhWzJdWzJdID0geyAwLCAxLCAyLCAzIH07CitcJiAgICAgICAgaW50IGJbMl1bMl0gPSB7IHsgMCwgMSB9LCB7IDIsIDMgfSB9OworLlZlCisuU3AKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XbWlzc2luZ1wtaW5jbHVkZVwtZGlyc1xmUiAoQywgXCooQyssIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdtaXNzaW5nLWluY2x1ZGUtZGlycyAoQywgLCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gaWYgYSB1c2VyLXN1cHBsaWVkIGluY2x1ZGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LgorLklQICJcZkJcLVdwYXJlbnRoZXNlc1xmUiIgNAorLklYIEl0ZW0gIi1XcGFyZW50aGVzZXMiCitXYXJuIGlmIHBhcmVudGhlc2VzIGFyZSBvbWl0dGVkIGluIGNlcnRhaW4gY29udGV4dHMsIHN1Y2gKK2FzIHdoZW4gdGhlcmUgaXMgYW4gYXNzaWdubWVudCBpbiBhIGNvbnRleHQgd2hlcmUgYSB0cnV0aCB2YWx1ZQoraXMgZXhwZWN0ZWQsIG9yIHdoZW4gb3BlcmF0b3JzIGFyZSBuZXN0ZWQgd2hvc2UgcHJlY2VkZW5jZSBwZW9wbGUKK29mdGVuIGdldCBjb25mdXNlZCBhYm91dC4KKy5TcAorQWxzbyB3YXJuIGlmIGEgY29tcGFyaXNvbiBsaWtlIFxmQng8PXk8PXpcZlIgYXBwZWFyczsgdGhpcyBpcworZXF1aXZhbGVudCB0byBcZkIoeDw9eSA/IDEgOiAwKSA8PSB6XGZSLCB3aGljaCBpcyBhIGRpZmZlcmVudAoraW50ZXJwcmV0YXRpb24gZnJvbSB0aGF0IG9mIG9yZGluYXJ5IG1hdGhlbWF0aWNhbCBub3RhdGlvbi4KKy5TcAorQWxzbyB3YXJuIGFib3V0IGNvbnN0cnVjdGlvbnMgd2hlcmUgdGhlcmUgbWF5IGJlIGNvbmZ1c2lvbiB0byB3aGljaAorXCZcZihDV1wqKENgaWZcKihDJ1xmUiBzdGF0ZW1lbnQgYW4gXGYoQ1dcKihDYGVsc2VcKihDJ1xmUiBicmFuY2ggYmVsb25ncy4gIEhlcmUgaXMgYW4gZXhhbXBsZSBvZgorc3VjaCBhIGNhc2U6CisuU3AKKy5WYiA3CitcJiAgICAgICAgeworXCYgICAgICAgICAgaWYgKGEpCitcJiAgICAgICAgICAgIGlmIChiKQorXCYgICAgICAgICAgICAgIGZvbyAoKTsKK1wmICAgICAgICAgIGVsc2UKK1wmICAgICAgICAgICAgYmFyICgpOworXCYgICAgICAgIH0KKy5WZQorLlNwCitJbiBDL1wqKEMrLCBldmVyeSBcZihDV1wqKENgZWxzZVwqKEMnXGZSIGJyYW5jaCBiZWxvbmdzIHRvIHRoZSBpbm5lcm1vc3QgcG9zc2libGUKK1wmXGYoQ1dcKihDYGlmXCooQydcZlIgc3RhdGVtZW50LCB3aGljaCBpbiB0aGlzIGV4YW1wbGUgaXMgXGYoQ1dcKihDYGlmIChiKVwqKEMnXGZSLiAgVGhpcyBpcworb2Z0ZW4gbm90IHdoYXQgdGhlIHByb2dyYW1tZXIgZXhwZWN0ZWQsIGFzIGlsbHVzdHJhdGVkIGluIHRoZSBhYm92ZQorZXhhbXBsZSBieSBpbmRlbnRhdGlvbiB0aGUgcHJvZ3JhbW1lciBjaG9zZS4gIFdoZW4gdGhlcmUgaXMgdGhlCitwb3RlbnRpYWwgZm9yIHRoaXMgY29uZnVzaW9uLCBccy0xR0NDXHMwIGlzc3VlcyBhIHdhcm5pbmcgd2hlbiB0aGlzIGZsYWcKK2lzIHNwZWNpZmllZC4gIFRvIGVsaW1pbmF0ZSB0aGUgd2FybmluZywgYWRkIGV4cGxpY2l0IGJyYWNlcyBhcm91bmQKK3RoZSBpbm5lcm1vc3QgXGYoQ1dcKihDYGlmXCooQydcZlIgc3RhdGVtZW50IHNvIHRoZXJlIGlzIG5vIHdheSB0aGUgXGYoQ1dcKihDYGVsc2VcKihDJ1xmUgorY2FuIGJlbG9uZyB0byB0aGUgZW5jbG9zaW5nIFxmKENXXCooQ2BpZlwqKEMnXGZSLiAgVGhlIHJlc3VsdGluZyBjb2RlCitsb29rcyBsaWtlIHRoaXM6CisuU3AKKy5WYiA5CitcJiAgICAgICAgeworXCYgICAgICAgICAgaWYgKGEpCitcJiAgICAgICAgICAgIHsKK1wmICAgICAgICAgICAgICBpZiAoYikKK1wmICAgICAgICAgICAgICAgIGZvbyAoKTsKK1wmICAgICAgICAgICAgICBlbHNlCitcJiAgICAgICAgICAgICAgICBiYXIgKCk7CitcJiAgICAgICAgICAgIH0KK1wmICAgICAgICB9CisuVmUKKy5TcAorQWxzbyB3YXJuIGZvciBkYW5nZXJvdXMgdXNlcyBvZiB0aGUgXHMtMUdOVVxzMCBleHRlbnNpb24gdG8KK1wmXGYoQ1dcKihDYD86XCooQydcZlIgd2l0aCBvbWl0dGVkIG1pZGRsZSBvcGVyYW5kLiBXaGVuIHRoZSBjb25kaXRpb24KK2luIHRoZSBcZihDV1wqKENgP1wqKEMnXGZSOiBvcGVyYXRvciBpcyBhIGJvb2xlYW4gZXhwcmVzc2lvbiwgdGhlIG9taXR0ZWQgdmFsdWUgaXMKK2Fsd2F5cyAxLiAgT2Z0ZW4gcHJvZ3JhbW1lcnMgZXhwZWN0IGl0IHRvIGJlIGEgdmFsdWUgY29tcHV0ZWQKK2luc2lkZSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpbnN0ZWFkLgorLlNwCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV3NlcXVlbmNlXC1wb2ludFxmUiIgNAorLklYIEl0ZW0gIi1Xc2VxdWVuY2UtcG9pbnQiCitXYXJuIGFib3V0IGNvZGUgdGhhdCBtYXkgaGF2ZSB1bmRlZmluZWQgc2VtYW50aWNzIGJlY2F1c2Ugb2YgdmlvbGF0aW9ucworb2Ygc2VxdWVuY2UgcG9pbnQgcnVsZXMgaW4gdGhlIEMgYW5kIFwqKEMrIHN0YW5kYXJkcy4KKy5TcAorVGhlIEMgYW5kIFwqKEMrIHN0YW5kYXJkcyBkZWZpbmUgdGhlIG9yZGVyIGluIHdoaWNoIGV4cHJlc3Npb25zIGluIGEgQy9cKihDKworcHJvZ3JhbSBhcmUgZXZhbHVhdGVkIGluIHRlcm1zIG9mIFxmSXNlcXVlbmNlIHBvaW50c1xmUiwgd2hpY2ggcmVwcmVzZW50CithIHBhcnRpYWwgb3JkZXJpbmcgYmV0d2VlbiB0aGUgZXhlY3V0aW9uIG9mIHBhcnRzIG9mIHRoZSBwcm9ncmFtOiB0aG9zZQorZXhlY3V0ZWQgYmVmb3JlIHRoZSBzZXF1ZW5jZSBwb2ludCwgYW5kIHRob3NlIGV4ZWN1dGVkIGFmdGVyIGl0LiAgVGhlc2UKK29jY3VyIGFmdGVyIHRoZSBldmFsdWF0aW9uIG9mIGEgZnVsbCBleHByZXNzaW9uIChvbmUgd2hpY2ggaXMgbm90IHBhcnQKK29mIGEgbGFyZ2VyIGV4cHJlc3Npb24pLCBhZnRlciB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgZmlyc3Qgb3BlcmFuZCBvZiBhCitcJlxmKENXXCooQ2AmJlwqKEMnXGZSLCBcZihDV1wqKENgfHxcKihDJ1xmUiwgXGYoQ1dcKihDYD8gOlwqKEMnXGZSIG9yIFxmKENXXCooQ2AsXCooQydcZlIgKGNvbW1hKSBvcGVyYXRvciwgYmVmb3JlIGEKK2Z1bmN0aW9uIGlzIGNhbGxlZCAoYnV0IGFmdGVyIHRoZSBldmFsdWF0aW9uIG9mIGl0cyBhcmd1bWVudHMgYW5kIHRoZQorZXhwcmVzc2lvbiBkZW5vdGluZyB0aGUgY2FsbGVkIGZ1bmN0aW9uKSwgYW5kIGluIGNlcnRhaW4gb3RoZXIgcGxhY2VzLgorT3RoZXIgdGhhbiBhcyBleHByZXNzZWQgYnkgdGhlIHNlcXVlbmNlIHBvaW50IHJ1bGVzLCB0aGUgb3JkZXIgb2YKK2V2YWx1YXRpb24gb2Ygc3ViZXhwcmVzc2lvbnMgb2YgYW4gZXhwcmVzc2lvbiBpcyBub3Qgc3BlY2lmaWVkLiAgQWxsCit0aGVzZSBydWxlcyBkZXNjcmliZSBvbmx5IGEgcGFydGlhbCBvcmRlciByYXRoZXIgdGhhbiBhIHRvdGFsIG9yZGVyLAorc2luY2UsIGZvciBleGFtcGxlLCBpZiB0d28gZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aGluIG9uZSBleHByZXNzaW9uCit3aXRoIG5vIHNlcXVlbmNlIHBvaW50IGJldHdlZW4gdGhlbSwgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmdW5jdGlvbnMKK2FyZSBjYWxsZWQgaXMgbm90IHNwZWNpZmllZC4gIEhvd2V2ZXIsIHRoZSBzdGFuZGFyZHMgY29tbWl0dGVlIGhhdmUKK3J1bGVkIHRoYXQgZnVuY3Rpb24gY2FsbHMgZG8gbm90IG92ZXJsYXAuCisuU3AKK0l0IGlzIG5vdCBzcGVjaWZpZWQgd2hlbiBiZXR3ZWVuIHNlcXVlbmNlIHBvaW50cyBtb2RpZmljYXRpb25zIHRvIHRoZQordmFsdWVzIG9mIG9iamVjdHMgdGFrZSBlZmZlY3QuICBQcm9ncmFtcyB3aG9zZSBiZWhhdmlvciBkZXBlbmRzIG9uIHRoaXMKK2hhdmUgdW5kZWZpbmVkIGJlaGF2aW9yOyB0aGUgQyBhbmQgXCooQysgc3RhbmRhcmRzIHNwZWNpZnkgdGhhdCBcKihMIkJldHdlZW4KK3RoZSBwcmV2aW91cyBhbmQgbmV4dCBzZXF1ZW5jZSBwb2ludCBhbiBvYmplY3Qgc2hhbGwgaGF2ZSBpdHMgc3RvcmVkCit2YWx1ZSBtb2RpZmllZCBhdCBtb3N0IG9uY2UgYnkgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbi4KK0Z1cnRoZXJtb3JlLCB0aGUgcHJpb3IgdmFsdWUgc2hhbGwgYmUgcmVhZCBvbmx5IHRvIGRldGVybWluZSB0aGUgdmFsdWUKK3RvIGJlIHN0b3JlZC5cKihSIi4gIElmIGEgcHJvZ3JhbSBicmVha3MgdGhlc2UgcnVsZXMsIHRoZSByZXN1bHRzIG9uIGFueQorcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBhcmUgZW50aXJlbHkgdW5wcmVkaWN0YWJsZS4KKy5TcAorRXhhbXBsZXMgb2YgY29kZSB3aXRoIHVuZGVmaW5lZCBiZWhhdmlvciBhcmUgXGYoQ1dcKihDYGEgPSBhKys7XCooQydcZlIsIFxmKENXXCooQ2BhW25dCis9IGJbbisrXVwqKEMnXGZSIGFuZCBcZihDV1wqKENgYVtpKytdID0gaTtcKihDJ1xmUi4gIFNvbWUgbW9yZSBjb21wbGljYXRlZCBjYXNlcyBhcmUgbm90CitkaWFnbm9zZWQgYnkgdGhpcyBvcHRpb24sIGFuZCBpdCBtYXkgZ2l2ZSBhbiBvY2Nhc2lvbmFsIGZhbHNlIHBvc2l0aXZlCityZXN1bHQsIGJ1dCBpbiBnZW5lcmFsIGl0IGhhcyBiZWVuIGZvdW5kIGZhaXJseSBlZmZlY3RpdmUgYXQgZGV0ZWN0aW5nCit0aGlzIHNvcnQgb2YgcHJvYmxlbSBpbiBwcm9ncmFtcy4KKy5TcAorVGhlIHN0YW5kYXJkIGlzIHdvcmRlZCBjb25mdXNpbmdseSwgdGhlcmVmb3JlIHRoZXJlIGlzIHNvbWUgZGViYXRlCitvdmVyIHRoZSBwcmVjaXNlIG1lYW5pbmcgb2YgdGhlIHNlcXVlbmNlIHBvaW50IHJ1bGVzIGluIHN1YnRsZSBjYXNlcy4KK0xpbmtzIHRvIGRpc2N1c3Npb25zIG9mIHRoZSBwcm9ibGVtLCBpbmNsdWRpbmcgcHJvcG9zZWQgZm9ybWFsCitkZWZpbml0aW9ucywgbWF5IGJlIGZvdW5kIG9uIHRoZSBccy0xR0NDXHMwIHJlYWRpbmdzIHBhZ2UsIGF0Cis8XGZCaHR0cDovL2djYy5nbnUub3JnL3JlYWRpbmdzLmh0bWxcZlI+LgorLlNwCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIgZm9yIEMgYW5kIFwqKEMrLgorLklQICJcZkJcLVdub1wtcmV0dXJuXC1sb2NhbFwtYWRkclxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIiCitEbyBub3Qgd2FybiBhYm91dCByZXR1cm5pbmcgYSBwb2ludGVyIChvciBpbiBcKihDKywgYSByZWZlcmVuY2UpIHRvIGEKK3ZhcmlhYmxlIHRoYXQgZ29lcyBvdXQgb2Ygc2NvcGUgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMuCisuSVAgIlxmQlwtV3JldHVyblwtdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1XcmV0dXJuLXR5cGUiCitXYXJuIHdoZW5ldmVyIGEgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoIGEgcmV0dXJuIHR5cGUgdGhhdCBkZWZhdWx0cwordG8gXGYoQ1dcKihDYGludFwqKEMnXGZSLiAgQWxzbyB3YXJuIGFib3V0IGFueSBcZihDV1wqKENgcmV0dXJuXCooQydcZlIgc3RhdGVtZW50IHdpdGggbm8KK3JldHVybiB2YWx1ZSBpbiBhIGZ1bmN0aW9uIHdob3NlIHJldHVybiB0eXBlIGlzIG5vdCBcZihDV1wqKENgdm9pZFwqKEMnXGZSCisoZmFsbGluZyBvZmYgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gYm9keSBpcyBjb25zaWRlcmVkIHJldHVybmluZword2l0aG91dCBhIHZhbHVlKSwgYW5kIGFib3V0IGEgXGYoQ1dcKihDYHJldHVyblwqKEMnXGZSIHN0YXRlbWVudCB3aXRoIGFuCitleHByZXNzaW9uIGluIGEgZnVuY3Rpb24gd2hvc2UgcmV0dXJuIHR5cGUgaXMgXGYoQ1dcKihDYHZvaWRcKihDJ1xmUi4KKy5TcAorRm9yIFwqKEMrLCBhIGZ1bmN0aW9uIHdpdGhvdXQgcmV0dXJuIHR5cGUgYWx3YXlzIHByb2R1Y2VzIGEgZGlhZ25vc3RpYworbWVzc2FnZSwgZXZlbiB3aGVuIFxmQlwtV25vXC1yZXR1cm5cLXR5cGVcZlIgaXMgc3BlY2lmaWVkLiAgVGhlIG9ubHkKK2V4Y2VwdGlvbnMgYXJlIFxmQm1haW5cZlIgYW5kIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHN5c3RlbSBoZWFkZXJzLgorLlNwCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV3N3aXRjaFxmUiIgNAorLklYIEl0ZW0gIi1Xc3dpdGNoIgorV2FybiB3aGVuZXZlciBhIFxmKENXXCooQ2Bzd2l0Y2hcKihDJ1xmUiBzdGF0ZW1lbnQgaGFzIGFuIGluZGV4IG9mIGVudW1lcmF0ZWQgdHlwZQorYW5kIGxhY2tzIGEgXGYoQ1dcKihDYGNhc2VcKihDJ1xmUiBmb3Igb25lIG9yIG1vcmUgb2YgdGhlIG5hbWVkIGNvZGVzIG9mIHRoYXQKK2VudW1lcmF0aW9uLiAgKFRoZSBwcmVzZW5jZSBvZiBhIFxmKENXXCooQ2BkZWZhdWx0XCooQydcZlIgbGFiZWwgcHJldmVudHMgdGhpcword2FybmluZy4pICBcZihDV1wqKENgY2FzZVwqKEMnXGZSIGxhYmVscyBvdXRzaWRlIHRoZSBlbnVtZXJhdGlvbiByYW5nZSBhbHNvCitwcm92b2tlIHdhcm5pbmdzIHdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCAoZXZlbiBpZiB0aGVyZSBpcyBhCitcJlxmKENXXCooQ2BkZWZhdWx0XCooQydcZlIgbGFiZWwpLgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdzd2l0Y2hcLWRlZmF1bHRcZlIiIDQKKy5JWCBJdGVtICItV3N3aXRjaC1kZWZhdWx0IgorV2FybiB3aGVuZXZlciBhIFxmKENXXCooQ2Bzd2l0Y2hcKihDJ1xmUiBzdGF0ZW1lbnQgZG9lcyBub3QgaGF2ZSBhIFxmKENXXCooQ2BkZWZhdWx0XCooQydcZlIKK2Nhc2UuCisuSVAgIlxmQlwtV3N3aXRjaFwtZW51bVxmUiIgNAorLklYIEl0ZW0gIi1Xc3dpdGNoLWVudW0iCitXYXJuIHdoZW5ldmVyIGEgXGYoQ1dcKihDYHN3aXRjaFwqKEMnXGZSIHN0YXRlbWVudCBoYXMgYW4gaW5kZXggb2YgZW51bWVyYXRlZCB0eXBlCithbmQgbGFja3MgYSBcZihDV1wqKENgY2FzZVwqKEMnXGZSIGZvciBvbmUgb3IgbW9yZSBvZiB0aGUgbmFtZWQgY29kZXMgb2YgdGhhdAorZW51bWVyYXRpb24uICBcZihDV1wqKENgY2FzZVwqKEMnXGZSIGxhYmVscyBvdXRzaWRlIHRoZSBlbnVtZXJhdGlvbiByYW5nZSBhbHNvCitwcm92b2tlIHdhcm5pbmdzIHdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UKK2JldHdlZW4gXGZCXC1Xc3dpdGNoXGZSIGFuZCB0aGlzIG9wdGlvbiBpcyB0aGF0IHRoaXMgb3B0aW9uIGdpdmVzIGEKK3dhcm5pbmcgYWJvdXQgYW4gb21pdHRlZCBlbnVtZXJhdGlvbiBjb2RlIGV2ZW4gaWYgdGhlcmUgaXMgYQorXCZcZihDV1wqKENgZGVmYXVsdFwqKEMnXGZSIGxhYmVsLgorLklQICJcZkJcLVdzeW5jXC1uYW5kXGZSIChDIGFuZCBcKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xc3luYy1uYW5kIChDIGFuZCAgb25seSkiCitXYXJuIHdoZW4gXGYoQ1dcKihDYF9cfF9zeW5jX2ZldGNoX2FuZF9uYW5kXCooQydcZlIgYW5kIFxmKENXXCooQ2BfXHxfc3luY19uYW5kX2FuZF9mZXRjaFwqKEMnXGZSCitidWlsdC1pbiBmdW5jdGlvbnMgYXJlIHVzZWQuICBUaGVzZSBmdW5jdGlvbnMgY2hhbmdlZCBzZW1hbnRpY3MgaW4gXHMtMUdDQ1xzMCA0LjQuCisuSVAgIlxmQlwtV3RyaWdyYXBoc1xmUiIgNAorLklYIEl0ZW0gIi1XdHJpZ3JhcGhzIgorV2FybiBpZiBhbnkgdHJpZ3JhcGhzIGFyZSBlbmNvdW50ZXJlZCB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgbWVhbmluZyBvZgordGhlIHByb2dyYW0gKHRyaWdyYXBocyB3aXRoaW4gY29tbWVudHMgYXJlIG5vdCB3YXJuZWQgYWJvdXQpLgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVd1bnVzZWRcLWJ1dFwtc2V0XC1wYXJhbWV0ZXJcZlIiIDQKKy5JWCBJdGVtICItV3VudXNlZC1idXQtc2V0LXBhcmFtZXRlciIKK1dhcm4gd2hlbmV2ZXIgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgaXMgYXNzaWduZWQgdG8sIGJ1dCBvdGhlcndpc2UgdW51c2VkCisoYXNpZGUgZnJvbSBpdHMgZGVjbGFyYXRpb24pLgorLlNwCitUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSBcZkJ1bnVzZWRcZlIgYXR0cmlidXRlLgorLlNwCitUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IFxmQlwtV3VudXNlZFxmUiB0b2dldGhlciB3aXRoCitcJlxmQlwtV2V4dHJhXGZSLgorLklQICJcZkJcLVd1bnVzZWRcLWJ1dFwtc2V0XC12YXJpYWJsZVxmUiIgNAorLklYIEl0ZW0gIi1XdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUiCitXYXJuIHdoZW5ldmVyIGEgbG9jYWwgdmFyaWFibGUgaXMgYXNzaWduZWQgdG8sIGJ1dCBvdGhlcndpc2UgdW51c2VkCisoYXNpZGUgZnJvbSBpdHMgZGVjbGFyYXRpb24pLgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLlNwCitUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSBcZkJ1bnVzZWRcZlIgYXR0cmlidXRlLgorLlNwCitUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IFxmQlwtV3VudXNlZFxmUiwgd2hpY2ggaXMgZW5hYmxlZAorYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVd1bnVzZWRcLWZ1bmN0aW9uXGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtZnVuY3Rpb24iCitXYXJuIHdoZW5ldmVyIGEgc3RhdGljIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGJ1dCBub3QgZGVmaW5lZCBvciBhCitub24taW5saW5lIHN0YXRpYyBmdW5jdGlvbiBpcyB1bnVzZWQuCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV3VudXNlZFwtbGFiZWxcZlIiIDQKKy5JWCBJdGVtICItV3VudXNlZC1sYWJlbCIKK1dhcm4gd2hlbmV2ZXIgYSBsYWJlbCBpcyBkZWNsYXJlZCBidXQgbm90IHVzZWQuCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuU3AKK1RvIHN1cHByZXNzIHRoaXMgd2FybmluZyB1c2UgdGhlIFxmQnVudXNlZFxmUiBhdHRyaWJ1dGUuCisuSVAgIlxmQlwtV3VudXNlZFwtbG9jYWxcLXR5cGVkZWZzXGZSIChDLCBPYmplY3RpdmUtQywgXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV3VudXNlZC1sb2NhbC10eXBlZGVmcyAoQywgT2JqZWN0aXZlLUMsICBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBhIHR5cGVkZWYgbG9jYWxseSBkZWZpbmVkIGluIGEgZnVuY3Rpb24gaXMgbm90IHVzZWQuCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV3VudXNlZFwtcGFyYW1ldGVyXGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtcGFyYW1ldGVyIgorV2FybiB3aGVuZXZlciBhIGZ1bmN0aW9uIHBhcmFtZXRlciBpcyB1bnVzZWQgYXNpZGUgZnJvbSBpdHMgZGVjbGFyYXRpb24uCisuU3AKK1RvIHN1cHByZXNzIHRoaXMgd2FybmluZyB1c2UgdGhlIFxmQnVudXNlZFxmUiBhdHRyaWJ1dGUuCisuSVAgIlxmQlwtV25vXC11bnVzZWRcLXJlc3VsdFxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tdW51c2VkLXJlc3VsdCIKK0RvIG5vdCB3YXJuIGlmIGEgY2FsbGVyIG9mIGEgZnVuY3Rpb24gbWFya2VkIHdpdGggYXR0cmlidXRlCitcJlxmKENXXCooQ2B3YXJuX3VudXNlZF9yZXN1bHRcKihDJ1xmUiBkb2VzIG5vdCB1c2UKK2l0cyByZXR1cm4gdmFsdWUuIFRoZSBkZWZhdWx0IGlzIFxmQlwtV3VudXNlZFwtcmVzdWx0XGZSLgorLklQICJcZkJcLVd1bnVzZWRcLXZhcmlhYmxlXGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtdmFyaWFibGUiCitXYXJuIHdoZW5ldmVyIGEgbG9jYWwgdmFyaWFibGUgb3Igbm9uLWNvbnN0YW50IHN0YXRpYyB2YXJpYWJsZSBpcyB1bnVzZWQKK2FzaWRlIGZyb20gaXRzIGRlY2xhcmF0aW9uLgorVGhpcyB3YXJuaW5nIGlzIGVuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLlNwCitUbyBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgdXNlIHRoZSBcZkJ1bnVzZWRcZlIgYXR0cmlidXRlLgorLklQICJcZkJcLVd1bnVzZWRcLXZhbHVlXGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtdmFsdWUiCitXYXJuIHdoZW5ldmVyIGEgc3RhdGVtZW50IGNvbXB1dGVzIGEgcmVzdWx0IHRoYXQgaXMgZXhwbGljaXRseSBub3QKK3VzZWQuIFRvIHN1cHByZXNzIHRoaXMgd2FybmluZyBjYXN0IHRoZSB1bnVzZWQgZXhwcmVzc2lvbiB0bworXCZcZkJ2b2lkXGZSLiBUaGlzIGluY2x1ZGVzIGFuIGV4cHJlc3Npb24tc3RhdGVtZW50IG9yIHRoZSBsZWZ0LWhhbmQKK3NpZGUgb2YgYSBjb21tYSBleHByZXNzaW9uIHRoYXQgY29udGFpbnMgbm8gc2lkZSBlZmZlY3RzLiBGb3IgZXhhbXBsZSwKK2FuIGV4cHJlc3Npb24gc3VjaCBhcyBcZkJ4W2ksal1cZlIgY2F1c2VzIGEgd2FybmluZywgd2hpbGUKK1wmXGZCeFsodm9pZClpLGpdXGZSIGRvZXMgbm90LgorLlNwCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV3VudXNlZFxmUiIgNAorLklYIEl0ZW0gIi1XdW51c2VkIgorQWxsIHRoZSBhYm92ZSBcZkJcLVd1bnVzZWRcZlIgb3B0aW9ucyBjb21iaW5lZC4KKy5TcAorSW4gb3JkZXIgdG8gZ2V0IGEgd2FybmluZyBhYm91dCBhbiB1bnVzZWQgZnVuY3Rpb24gcGFyYW1ldGVyLCB5b3UgbXVzdAorZWl0aGVyIHNwZWNpZnkgXGZCXC1XZXh0cmEgXC1XdW51c2VkXGZSIChub3RlIHRoYXQgXGZCXC1XYWxsXGZSIGltcGxpZXMKK1wmXGZCXC1XdW51c2VkXGZSKSwgb3Igc2VwYXJhdGVseSBzcGVjaWZ5IFxmQlwtV3VudXNlZFwtcGFyYW1ldGVyXGZSLgorLklQICJcZkJcLVd1bmluaXRpYWxpemVkXGZSIiA0CisuSVggSXRlbSAiLVd1bmluaXRpYWxpemVkIgorV2FybiBpZiBhbiBhdXRvbWF0aWMgdmFyaWFibGUgaXMgdXNlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGluaXRpYWxpemVkCitvciBpZiBhIHZhcmlhYmxlIG1heSBiZSBjbG9iYmVyZWQgYnkgYSBcZihDV1wqKENgc2V0am1wXCooQydcZlIgY2FsbC4gSW4gXCooQyssCit3YXJuIGlmIGEgbm9uLXN0YXRpYyByZWZlcmVuY2Ugb3Igbm9uLXN0YXRpYyBcZkJjb25zdFxmUiBtZW1iZXIKK2FwcGVhcnMgaW4gYSBjbGFzcyB3aXRob3V0IGNvbnN0cnVjdG9ycy4KKy5TcAorSWYgeW91IHdhbnQgdG8gd2FybiBhYm91dCBjb2RlIHRoYXQgdXNlcyB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBvZiB0aGUKK3ZhcmlhYmxlIGluIGl0cyBvd24gaW5pdGlhbGl6ZXIsIHVzZSB0aGUgXGZCXC1XaW5pdFwtc2VsZlxmUiBvcHRpb24uCisuU3AKK1RoZXNlIHdhcm5pbmdzIG9jY3VyIGZvciBpbmRpdmlkdWFsIHVuaW5pdGlhbGl6ZWQgb3IgY2xvYmJlcmVkCitlbGVtZW50cyBvZiBzdHJ1Y3R1cmUsIHVuaW9uIG9yIGFycmF5IHZhcmlhYmxlcyBhcyB3ZWxsIGFzIGZvcgordmFyaWFibGVzIHRoYXQgYXJlIHVuaW5pdGlhbGl6ZWQgb3IgY2xvYmJlcmVkIGFzIGEgd2hvbGUuICBUaGV5IGRvCitub3Qgb2NjdXIgZm9yIHZhcmlhYmxlcyBvciBlbGVtZW50cyBkZWNsYXJlZCBcZihDV1wqKENgdm9sYXRpbGVcKihDJ1xmUi4gIEJlY2F1c2UKK3RoZXNlIHdhcm5pbmdzIGRlcGVuZCBvbiBvcHRpbWl6YXRpb24sIHRoZSBleGFjdCB2YXJpYWJsZXMgb3IgZWxlbWVudHMKK2ZvciB3aGljaCB0aGVyZSBhcmUgd2FybmluZ3MgZGVwZW5kcyBvbiB0aGUgcHJlY2lzZSBvcHRpbWl6YXRpb24KK29wdGlvbnMgYW5kIHZlcnNpb24gb2YgXHMtMUdDQ1xzMCB1c2VkLgorLlNwCitOb3RlIHRoYXQgdGhlcmUgbWF5IGJlIG5vIHdhcm5pbmcgYWJvdXQgYSB2YXJpYWJsZSB0aGF0IGlzIHVzZWQgb25seQordG8gY29tcHV0ZSBhIHZhbHVlIHRoYXQgaXRzZWxmIGlzIG5ldmVyIHVzZWQsIGJlY2F1c2Ugc3VjaAorY29tcHV0YXRpb25zIG1heSBiZSBkZWxldGVkIGJ5IGRhdGEgZmxvdyBhbmFseXNpcyBiZWZvcmUgdGhlIHdhcm5pbmdzCithcmUgcHJpbnRlZC4KKy5JUCAiXGZCXC1XbWF5YmVcLXVuaW5pdGlhbGl6ZWRcZlIiIDQKKy5JWCBJdGVtICItV21heWJlLXVuaW5pdGlhbGl6ZWQiCitGb3IgYW4gYXV0b21hdGljIHZhcmlhYmxlLCBpZiB0aGVyZSBleGlzdHMgYSBwYXRoIGZyb20gdGhlIGZ1bmN0aW9uCitlbnRyeSB0byBhIHVzZSBvZiB0aGUgdmFyaWFibGUgdGhhdCBpcyBpbml0aWFsaXplZCwgYnV0IHRoZXJlIGV4aXN0Citzb21lIG90aGVyIHBhdGhzIGZvciB3aGljaCB0aGUgdmFyaWFibGUgaXMgbm90IGluaXRpYWxpemVkLCB0aGUgY29tcGlsZXIKK2VtaXRzIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgcHJvdmUgdGhlIHVuaW5pdGlhbGl6ZWQgcGF0aHMgYXJlIG5vdAorZXhlY3V0ZWQgYXQgcnVuIHRpbWUuIFRoZXNlIHdhcm5pbmdzIGFyZSBtYWRlIG9wdGlvbmFsIGJlY2F1c2UgXHMtMUdDQ1xzMCBpcworbm90IHNtYXJ0IGVub3VnaCB0byBzZWUgYWxsIHRoZSByZWFzb25zIHdoeSB0aGUgY29kZSBtaWdodCBiZSBjb3JyZWN0CitpbiBzcGl0ZSBvZiBhcHBlYXJpbmcgdG8gaGF2ZSBhbiBlcnJvci4gIEhlcmUgaXMgb25lIGV4YW1wbGUgb2YgaG93Cit0aGlzIGNhbiBoYXBwZW46CisuU3AKKy5WYiAxMgorXCYgICAgICAgIHsKK1wmICAgICAgICAgIGludCB4OworXCYgICAgICAgICAgc3dpdGNoICh5KQorXCYgICAgICAgICAgICB7CitcJiAgICAgICAgICAgIGNhc2UgMTogeCA9IDE7CitcJiAgICAgICAgICAgICAgYnJlYWs7CitcJiAgICAgICAgICAgIGNhc2UgMjogeCA9IDQ7CitcJiAgICAgICAgICAgICAgYnJlYWs7CitcJiAgICAgICAgICAgIGNhc2UgMzogeCA9IDU7CitcJiAgICAgICAgICAgIH0KK1wmICAgICAgICAgIGZvbyAoeCk7CitcJiAgICAgICAgfQorLlZlCisuU3AKK0lmIHRoZSB2YWx1ZSBvZiBcZihDV1wqKENgeVwqKEMnXGZSIGlzIGFsd2F5cyAxLCAyIG9yIDMsIHRoZW4gXGYoQ1dcKihDYHhcKihDJ1xmUiBpcworYWx3YXlzIGluaXRpYWxpemVkLCBidXQgXHMtMUdDQ1xzMCBkb2Vzbid0IGtub3cgdGhpcy4gVG8gc3VwcHJlc3MgdGhlCit3YXJuaW5nLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIHdpdGggXGZJYXNzZXJ0XGZSXHwoMCkgb3IKK3NpbWlsYXIgY29kZS4KKy5TcAorVGhpcyBvcHRpb24gYWxzbyB3YXJucyB3aGVuIGEgbm9uLXZvbGF0aWxlIGF1dG9tYXRpYyB2YXJpYWJsZSBtaWdodCBiZQorY2hhbmdlZCBieSBhIGNhbGwgdG8gXGYoQ1dcKihDYGxvbmdqbXBcKihDJ1xmUi4gIFRoZXNlIHdhcm5pbmdzIGFzIHdlbGwgYXJlIHBvc3NpYmxlCitvbmx5IGluIG9wdGltaXppbmcgY29tcGlsYXRpb24uCisuU3AKK1RoZSBjb21waWxlciBzZWVzIG9ubHkgdGhlIGNhbGxzIHRvIFxmKENXXCooQ2BzZXRqbXBcKihDJ1xmUi4gIEl0IGNhbm5vdCBrbm93Cit3aGVyZSBcZihDV1wqKENgbG9uZ2ptcFwqKEMnXGZSIHdpbGwgYmUgY2FsbGVkOyBpbiBmYWN0LCBhIHNpZ25hbCBoYW5kbGVyIGNvdWxkCitjYWxsIGl0IGF0IGFueSBwb2ludCBpbiB0aGUgY29kZS4gIEFzIGEgcmVzdWx0LCB5b3UgbWF5IGdldCBhIHdhcm5pbmcKK2V2ZW4gd2hlbiB0aGVyZSBpcyBpbiBmYWN0IG5vIHByb2JsZW0gYmVjYXVzZSBcZihDV1wqKENgbG9uZ2ptcFwqKEMnXGZSIGNhbm5vdAoraW4gZmFjdCBiZSBjYWxsZWQgYXQgdGhlIHBsYWNlIHRoYXQgd291bGQgY2F1c2UgYSBwcm9ibGVtLgorLlNwCitTb21lIHNwdXJpb3VzIHdhcm5pbmdzIGNhbiBiZSBhdm9pZGVkIGlmIHlvdSBkZWNsYXJlIGFsbCB0aGUgZnVuY3Rpb25zCit5b3UgdXNlIHRoYXQgbmV2ZXIgcmV0dXJuIGFzIFxmKENXXCooQ2Bub3JldHVyblwqKEMnXGZSLgorLlNwCitUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIgb3IgXGZCXC1XZXh0cmFcZlIuCisuSVAgIlxmQlwtV3Vua25vd25cLXByYWdtYXNcZlIiIDQKKy5JWCBJdGVtICItV3Vua25vd24tcHJhZ21hcyIKK1dhcm4gd2hlbiBhIFxmKENXXCooQ2AjcHJhZ21hXCooQydcZlIgZGlyZWN0aXZlIGlzIGVuY291bnRlcmVkIHRoYXQgaXMgbm90IHVuZGVyc3Rvb2QgYnkgCitcJlxzLTFHQ0NcczAuICBJZiB0aGlzIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgdXNlZCwgd2FybmluZ3MgYXJlIGV2ZW4gaXNzdWVkCitmb3IgdW5rbm93biBwcmFnbWFzIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuICBUaGlzIGlzIG5vdCB0aGUgY2FzZSBpZgordGhlIHdhcm5pbmdzIGFyZSBvbmx5IGVuYWJsZWQgYnkgdGhlIFxmQlwtV2FsbFxmUiBjb21tYW5kLWxpbmUgb3B0aW9uLgorLklQICJcZkJcLVdub1wtcHJhZ21hc1xmUiIgNAorLklYIEl0ZW0gIi1Xbm8tcHJhZ21hcyIKK0RvIG5vdCB3YXJuIGFib3V0IG1pc3VzZXMgb2YgcHJhZ21hcywgc3VjaCBhcyBpbmNvcnJlY3QgcGFyYW1ldGVycywKK2ludmFsaWQgc3ludGF4LCBvciBjb25mbGljdHMgYmV0d2VlbiBwcmFnbWFzLiAgU2VlIGFsc28KK1wmXGZCXC1XdW5rbm93blwtcHJhZ21hc1xmUi4KKy5JUCAiXGZCXC1Xc3RyaWN0XC1hbGlhc2luZ1xmUiIgNAorLklYIEl0ZW0gIi1Xc3RyaWN0LWFsaWFzaW5nIgorVGhpcyBvcHRpb24gaXMgb25seSBhY3RpdmUgd2hlbiBcZkJcLWZzdHJpY3RcLWFsaWFzaW5nXGZSIGlzIGFjdGl2ZS4KK0l0IHdhcm5zIGFib3V0IGNvZGUgdGhhdCBtaWdodCBicmVhayB0aGUgc3RyaWN0IGFsaWFzaW5nIHJ1bGVzIHRoYXQgdGhlCitjb21waWxlciBpcyB1c2luZyBmb3Igb3B0aW1pemF0aW9uLiAgVGhlIHdhcm5pbmcgZG9lcyBub3QgY2F0Y2ggYWxsCitjYXNlcywgYnV0IGRvZXMgYXR0ZW1wdCB0byBjYXRjaCB0aGUgbW9yZSBjb21tb24gcGl0ZmFsbHMuICBJdCBpcworaW5jbHVkZWQgaW4gXGZCXC1XYWxsXGZSLgorSXQgaXMgZXF1aXZhbGVudCB0byBcZkJcLVdzdHJpY3RcLWFsaWFzaW5nPTNcZlIKKy5JUCAiXGZCXC1Xc3RyaWN0XC1hbGlhc2luZz1uXGZSIiA0CisuSVggSXRlbSAiLVdzdHJpY3QtYWxpYXNpbmc9biIKK1RoaXMgb3B0aW9uIGlzIG9ubHkgYWN0aXZlIHdoZW4gXGZCXC1mc3RyaWN0XC1hbGlhc2luZ1xmUiBpcyBhY3RpdmUuCitJdCB3YXJucyBhYm91dCBjb2RlIHRoYXQgbWlnaHQgYnJlYWsgdGhlIHN0cmljdCBhbGlhc2luZyBydWxlcyB0aGF0IHRoZQorY29tcGlsZXIgaXMgdXNpbmcgZm9yIG9wdGltaXphdGlvbi4KK0hpZ2hlciBsZXZlbHMgY29ycmVzcG9uZCB0byBoaWdoZXIgYWNjdXJhY3kgKGZld2VyIGZhbHNlIHBvc2l0aXZlcykuCitIaWdoZXIgbGV2ZWxzIGFsc28gY29ycmVzcG9uZCB0byBtb3JlIGVmZm9ydCwgc2ltaWxhciB0byB0aGUgd2F5IFxmQlwtT1xmUiAKK3dvcmtzLgorXCZcZkJcLVdzdHJpY3RcLWFsaWFzaW5nXGZSIGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1Xc3RyaWN0XC1hbGlhc2luZz0zXGZSLgorLlNwCitMZXZlbCAxOiBNb3N0IGFnZ3Jlc3NpdmUsIHF1aWNrLCBsZWFzdCBhY2N1cmF0ZS4KK1Bvc3NpYmx5IHVzZWZ1bCB3aGVuIGhpZ2hlciBsZXZlbHMKK2RvIG5vdCB3YXJuIGJ1dCBcZkJcLWZzdHJpY3RcLWFsaWFzaW5nXGZSIHN0aWxsIGJyZWFrcyB0aGUgY29kZSwgYXMgaXQgaGFzIHZlcnkgZmV3CitmYWxzZSBuZWdhdGl2ZXMuICBIb3dldmVyLCBpdCBoYXMgbWFueSBmYWxzZSBwb3NpdGl2ZXMuCitXYXJucyBmb3IgYWxsIHBvaW50ZXIgY29udmVyc2lvbnMgYmV0d2VlbiBwb3NzaWJseSBpbmNvbXBhdGlibGUgdHlwZXMsCitldmVuIGlmIG5ldmVyIGRlcmVmZXJlbmNlZC4gIFJ1bnMgaW4gdGhlIGZyb250IGVuZCBvbmx5LgorLlNwCitMZXZlbCAyOiBBZ2dyZXNzaXZlLCBxdWljaywgbm90IHRvbyBwcmVjaXNlLgorTWF5IHN0aWxsIGhhdmUgbWFueSBmYWxzZSBwb3NpdGl2ZXMgKG5vdCBhcyBtYW55IGFzIGxldmVsIDEgdGhvdWdoKSwKK2FuZCBmZXcgZmFsc2UgbmVnYXRpdmVzIChidXQgcG9zc2libHkgbW9yZSB0aGFuIGxldmVsIDEpLgorVW5saWtlIGxldmVsIDEsIGl0IG9ubHkgd2FybnMgd2hlbiBhbiBhZGRyZXNzIGlzIHRha2VuLiAgV2FybnMgYWJvdXQKK2luY29tcGxldGUgdHlwZXMuICBSdW5zIGluIHRoZSBmcm9udCBlbmQgb25seS4KKy5TcAorTGV2ZWwgMyAoZGVmYXVsdCBmb3IgXGZCXC1Xc3RyaWN0XC1hbGlhc2luZ1xmUik6CitTaG91bGQgaGF2ZSB2ZXJ5IGZldyBmYWxzZSBwb3NpdGl2ZXMgYW5kIGZldyBmYWxzZQorbmVnYXRpdmVzLiAgU2xpZ2h0bHkgc2xvd2VyIHRoYW4gbGV2ZWxzIDEgb3IgMiB3aGVuIG9wdGltaXphdGlvbiBpcyBlbmFibGVkLgorVGFrZXMgY2FyZSBvZiB0aGUgY29tbW9uIHB1bitkZXJlZmVyZW5jZSBwYXR0ZXJuIGluIHRoZSBmcm9udCBlbmQ6CitcJlxmKENXXCooQ2AqKGludCopJnNvbWVfZmxvYXRcKihDJ1xmUi4KK0lmIG9wdGltaXphdGlvbiBpcyBlbmFibGVkLCBpdCBhbHNvIHJ1bnMgaW4gdGhlIGJhY2sgZW5kLCB3aGVyZSBpdCBkZWFscword2l0aCBtdWx0aXBsZSBzdGF0ZW1lbnQgY2FzZXMgdXNpbmcgZmxvdy1zZW5zaXRpdmUgcG9pbnRzLXRvIGluZm9ybWF0aW9uLgorT25seSB3YXJucyB3aGVuIHRoZSBjb252ZXJ0ZWQgcG9pbnRlciBpcyBkZXJlZmVyZW5jZWQuCitEb2VzIG5vdCB3YXJuIGFib3V0IGluY29tcGxldGUgdHlwZXMuCisuSVAgIlxmQlwtV3N0cmljdFwtb3ZlcmZsb3dcZlIiIDQKKy5JWCBJdGVtICItV3N0cmljdC1vdmVyZmxvdyIKKy5QRCAwCisuSVAgIlxmQlwtV3N0cmljdFwtb3ZlcmZsb3c9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1Xc3RyaWN0LW92ZXJmbG93PW4iCisuUEQKK1RoaXMgb3B0aW9uIGlzIG9ubHkgYWN0aXZlIHdoZW4gXGZCXC1mc3RyaWN0XC1vdmVyZmxvd1xmUiBpcyBhY3RpdmUuCitJdCB3YXJucyBhYm91dCBjYXNlcyB3aGVyZSB0aGUgY29tcGlsZXIgb3B0aW1pemVzIGJhc2VkIG9uIHRoZQorYXNzdW1wdGlvbiB0aGF0IHNpZ25lZCBvdmVyZmxvdyBkb2VzIG5vdCBvY2N1ci4gIE5vdGUgdGhhdCBpdCBkb2VzIG5vdAord2FybiBhYm91dCBhbGwgY2FzZXMgd2hlcmUgdGhlIGNvZGUgbWlnaHQgb3ZlcmZsb3c6IGl0IG9ubHkgd2FybnMKK2Fib3V0IGNhc2VzIHdoZXJlIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIHNvbWUgb3B0aW1pemF0aW9uLiAgVGh1cwordGhpcyB3YXJuaW5nIGRlcGVuZHMgb24gdGhlIG9wdGltaXphdGlvbiBsZXZlbC4KKy5TcAorQW4gb3B0aW1pemF0aW9uIHRoYXQgYXNzdW1lcyB0aGF0IHNpZ25lZCBvdmVyZmxvdyBkb2VzIG5vdCBvY2N1ciBpcworcGVyZmVjdGx5IHNhZmUgaWYgdGhlIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzIGludm9sdmVkIGFyZSBzdWNoIHRoYXQKK292ZXJmbG93IG5ldmVyIGRvZXMsIGluIGZhY3QsIG9jY3VyLiAgVGhlcmVmb3JlIHRoaXMgd2FybmluZyBjYW4KK2Vhc2lseSBnaXZlIGEgZmFsc2UgcG9zaXRpdmU6IGEgd2FybmluZyBhYm91dCBjb2RlIHRoYXQgaXMgbm90CithY3R1YWxseSBhIHByb2JsZW0uICBUbyBoZWxwIGZvY3VzIG9uIGltcG9ydGFudCBpc3N1ZXMsIHNldmVyYWwKK3dhcm5pbmcgbGV2ZWxzIGFyZSBkZWZpbmVkLiAgTm8gd2FybmluZ3MgYXJlIGlzc3VlZCBmb3IgdGhlIHVzZSBvZgordW5kZWZpbmVkIHNpZ25lZCBvdmVyZmxvdyB3aGVuIGVzdGltYXRpbmcgaG93IG1hbnkgaXRlcmF0aW9ucyBhIGxvb3AKK3JlcXVpcmVzLCBpbiBwYXJ0aWN1bGFyIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIGxvb3Agd2lsbCBiZQorZXhlY3V0ZWQgYXQgYWxsLgorLlJTIDQKKy5JUCAiXGZCXC1Xc3RyaWN0XC1vdmVyZmxvdz0xXGZSIiA0CisuSVggSXRlbSAiLVdzdHJpY3Qtb3ZlcmZsb3c9MSIKK1dhcm4gYWJvdXQgY2FzZXMgdGhhdCBhcmUgYm90aCBxdWVzdGlvbmFibGUgYW5kIGVhc3kgdG8gYXZvaWQuICBGb3IKK2V4YW1wbGUsICB3aXRoIFxmQlwtZnN0cmljdFwtb3ZlcmZsb3dcZlIsIHRoZSBjb21waWxlciBzaW1wbGlmaWVzCitcJlxmKENXXCooQ2B4ICsgMSA+IHhcKihDJ1xmUiB0byBcZihDVzFcZlIuICBUaGlzIGxldmVsIG9mCitcJlxmQlwtV3N0cmljdFwtb3ZlcmZsb3dcZlIgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlI7IGhpZ2hlciBsZXZlbHMKK2FyZSBub3QsIGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgorLklQICJcZkJcLVdzdHJpY3RcLW92ZXJmbG93PTJcZlIiIDQKKy5JWCBJdGVtICItV3N0cmljdC1vdmVyZmxvdz0yIgorQWxzbyB3YXJuIGFib3V0IG90aGVyIGNhc2VzIHdoZXJlIGEgY29tcGFyaXNvbiBpcyBzaW1wbGlmaWVkIHRvIGEKK2NvbnN0YW50LiAgRm9yIGV4YW1wbGU6IFxmKENXXCooQ2BhYnMgKHgpID49IDBcKihDJ1xmUi4gIFRoaXMgY2FuIG9ubHkgYmUKK3NpbXBsaWZpZWQgd2hlbiBcZkJcLWZzdHJpY3RcLW92ZXJmbG93XGZSIGlzIGluIGVmZmVjdCwgYmVjYXVzZQorXCZcZihDV1wqKENgYWJzIChJTlRfTUlOKVwqKEMnXGZSIG92ZXJmbG93cyB0byBcZihDV1wqKENgSU5UX01JTlwqKEMnXGZSLCB3aGljaCBpcyBsZXNzIHRoYW4KK3plcm8uICBcZkJcLVdzdHJpY3RcLW92ZXJmbG93XGZSICh3aXRoIG5vIGxldmVsKSBpcyB0aGUgc2FtZSBhcworXCZcZkJcLVdzdHJpY3RcLW92ZXJmbG93PTJcZlIuCisuSVAgIlxmQlwtV3N0cmljdFwtb3ZlcmZsb3c9M1xmUiIgNAorLklYIEl0ZW0gIi1Xc3RyaWN0LW92ZXJmbG93PTMiCitBbHNvIHdhcm4gYWJvdXQgb3RoZXIgY2FzZXMgd2hlcmUgYSBjb21wYXJpc29uIGlzIHNpbXBsaWZpZWQuICBGb3IKK2V4YW1wbGU6IFxmKENXXCooQ2B4ICsgMSA+IDFcKihDJ1xmUiBpcyBzaW1wbGlmaWVkIHRvIFxmKENXXCooQ2B4ID4gMFwqKEMnXGZSLgorLklQICJcZkJcLVdzdHJpY3RcLW92ZXJmbG93PTRcZlIiIDQKKy5JWCBJdGVtICItV3N0cmljdC1vdmVyZmxvdz00IgorQWxzbyB3YXJuIGFib3V0IG90aGVyIHNpbXBsaWZpY2F0aW9ucyBub3QgY292ZXJlZCBieSB0aGUgYWJvdmUgY2FzZXMuCitGb3IgZXhhbXBsZTogXGYoQ1dcKihDYCh4ICogMTApIC8gNVwqKEMnXGZSIGlzIHNpbXBsaWZpZWQgdG8gXGYoQ1dcKihDYHggKiAyXCooQydcZlIuCisuSVAgIlxmQlwtV3N0cmljdFwtb3ZlcmZsb3c9NVxmUiIgNAorLklYIEl0ZW0gIi1Xc3RyaWN0LW92ZXJmbG93PTUiCitBbHNvIHdhcm4gYWJvdXQgY2FzZXMgd2hlcmUgdGhlIGNvbXBpbGVyIHJlZHVjZXMgdGhlIG1hZ25pdHVkZSBvZiBhCitjb25zdGFudCBpbnZvbHZlZCBpbiBhIGNvbXBhcmlzb24uICBGb3IgZXhhbXBsZTogXGYoQ1dcKihDYHggKyAyID4geVwqKEMnXGZSIGlzCitzaW1wbGlmaWVkIHRvIFxmKENXXCooQ2B4ICsgMSA+PSB5XCooQydcZlIuICBUaGlzIGlzIHJlcG9ydGVkIG9ubHkgYXQgdGhlCitoaWdoZXN0IHdhcm5pbmcgbGV2ZWwgYmVjYXVzZSB0aGlzIHNpbXBsaWZpY2F0aW9uIGFwcGxpZXMgdG8gbWFueQorY29tcGFyaXNvbnMsIHNvIHRoaXMgd2FybmluZyBsZXZlbCBnaXZlcyBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mCitmYWxzZSBwb3NpdGl2ZXMuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1Xc3VnZ2VzdFwtYXR0cmlidXRlPVxmUltcZkJwdXJlXGZSfFxmQmNvbnN0XGZSfFxmQm5vcmV0dXJuXGZSfFxmQmZvcm1hdFxmUl0iIDQKKy5JWCBJdGVtICItV3N1Z2dlc3QtYXR0cmlidXRlPVtwdXJlfGNvbnN0fG5vcmV0dXJufGZvcm1hdF0iCitXYXJuIGZvciBjYXNlcyB3aGVyZSBhZGRpbmcgYW4gYXR0cmlidXRlIG1heSBiZSBiZW5lZmljaWFsLiBUaGUKK2F0dHJpYnV0ZXMgY3VycmVudGx5IHN1cHBvcnRlZCBhcmUgbGlzdGVkIGJlbG93LgorLlJTIDQKKy5JUCAiXGZCXC1Xc3VnZ2VzdFwtYXR0cmlidXRlPXB1cmVcZlIiIDQKKy5JWCBJdGVtICItV3N1Z2dlc3QtYXR0cmlidXRlPXB1cmUiCisuUEQgMAorLklQICJcZkJcLVdzdWdnZXN0XC1hdHRyaWJ1dGU9Y29uc3RcZlIiIDQKKy5JWCBJdGVtICItV3N1Z2dlc3QtYXR0cmlidXRlPWNvbnN0IgorLklQICJcZkJcLVdzdWdnZXN0XC1hdHRyaWJ1dGU9bm9yZXR1cm5cZlIiIDQKKy5JWCBJdGVtICItV3N1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuIgorLlBECitXYXJuIGFib3V0IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNhbmRpZGF0ZXMgZm9yIGF0dHJpYnV0ZXMKK1wmXGYoQ1dcKihDYHB1cmVcKihDJ1xmUiwgXGYoQ1dcKihDYGNvbnN0XCooQydcZlIgb3IgXGYoQ1dcKihDYG5vcmV0dXJuXCooQydcZlIuICBUaGUgY29tcGlsZXIgb25seSB3YXJucyBmb3IKK2Z1bmN0aW9ucyB2aXNpYmxlIGluIG90aGVyIGNvbXBpbGF0aW9uIHVuaXRzIG9yIChpbiB0aGUgY2FzZSBvZiBcZihDV1wqKENgcHVyZVwqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgY29uc3RcKihDJ1xmUikgaWYgaXQgY2Fubm90IHByb3ZlIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9ybWFsbHkuIEEgZnVuY3Rpb24KK3JldHVybnMgbm9ybWFsbHkgaWYgaXQgZG9lc24ndCBjb250YWluIGFuIGluZmluaXRlIGxvb3Agb3IgcmV0dXJuIGFibm9ybWFsbHkKK2J5IHRocm93aW5nLCBjYWxsaW5nIFxmKENXXCooQ2BhYm9ydCgpXCooQydcZlIgb3IgdHJhcHBpbmcuICBUaGlzIGFuYWx5c2lzIHJlcXVpcmVzIG9wdGlvbgorXCZcZkJcLWZpcGFcLXB1cmVcLWNvbnN0XGZSLCB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZAoraGlnaGVyLiAgSGlnaGVyIG9wdGltaXphdGlvbiBsZXZlbHMgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YgdGhlIGFuYWx5c2lzLgorLklQICJcZkJcLVdzdWdnZXN0XC1hdHRyaWJ1dGU9Zm9ybWF0XGZSIiA0CisuSVggSXRlbSAiLVdzdWdnZXN0LWF0dHJpYnV0ZT1mb3JtYXQiCisuUEQgMAorLklQICJcZkJcLVdtaXNzaW5nXC1mb3JtYXRcLWF0dHJpYnV0ZVxmUiIgNAorLklYIEl0ZW0gIi1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIgorLlBECitXYXJuIGFib3V0IGZ1bmN0aW9uIHBvaW50ZXJzIHRoYXQgbWlnaHQgYmUgY2FuZGlkYXRlcyBmb3IgXGYoQ1dcKihDYGZvcm1hdFwqKEMnXGZSCithdHRyaWJ1dGVzLiAgTm90ZSB0aGVzZSBhcmUgb25seSBwb3NzaWJsZSBjYW5kaWRhdGVzLCBub3QgYWJzb2x1dGUgb25lcy4KK1wmXHMtMUdDQ1xzMCBndWVzc2VzIHRoYXQgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aCBcZihDV1wqKENgZm9ybWF0XCooQydcZlIgYXR0cmlidXRlcyB0aGF0CithcmUgdXNlZCBpbiBhc3NpZ25tZW50LCBpbml0aWFsaXphdGlvbiwgcGFyYW1ldGVyIHBhc3Npbmcgb3IgcmV0dXJuCitzdGF0ZW1lbnRzIHNob3VsZCBoYXZlIGEgY29ycmVzcG9uZGluZyBcZihDV1wqKENgZm9ybWF0XCooQydcZlIgYXR0cmlidXRlIGluIHRoZQorcmVzdWx0aW5nIHR5cGUuICBJLmUuIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgYXNzaWdubWVudCBvcgoraW5pdGlhbGl6YXRpb24sIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgdmFyaWFibGUsIG9yIHRoZSByZXR1cm4gdHlwZQorb2YgdGhlIGNvbnRhaW5pbmcgZnVuY3Rpb24gcmVzcGVjdGl2ZWx5IHNob3VsZCBhbHNvIGhhdmUgYSBcZihDV1wqKENgZm9ybWF0XCooQydcZlIKK2F0dHJpYnV0ZSB0byBhdm9pZCB0aGUgd2FybmluZy4KKy5TcAorXCZccy0xR0NDXHMwIGFsc28gd2FybnMgYWJvdXQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdGhhdCBtaWdodCBiZQorY2FuZGlkYXRlcyBmb3IgXGYoQ1dcKihDYGZvcm1hdFwqKEMnXGZSIGF0dHJpYnV0ZXMuICBBZ2FpbiwgdGhlc2UgYXJlIG9ubHkKK3Bvc3NpYmxlIGNhbmRpZGF0ZXMuICBccy0xR0NDXHMwIGd1ZXNzZXMgdGhhdCBcZihDV1wqKENgZm9ybWF0XCooQydcZlIgYXR0cmlidXRlcworbWlnaHQgYmUgYXBwcm9wcmlhdGUgZm9yIGFueSBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgZnVuY3Rpb24gbGlrZQorXCZcZihDV1wqKENgdnByaW50ZlwqKEMnXGZSIG9yIFxmKENXXCooQ2B2c2NhbmZcKihDJ1xmUiwgYnV0IHRoaXMgbWlnaHQgbm90IGFsd2F5cyBiZSB0aGUKK2Nhc2UsIGFuZCBzb21lIGZ1bmN0aW9ucyBmb3Igd2hpY2ggXGYoQ1dcKihDYGZvcm1hdFwqKEMnXGZSIGF0dHJpYnV0ZXMgYXJlCithcHByb3ByaWF0ZSBtYXkgbm90IGJlIGRldGVjdGVkLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtV2FycmF5XC1ib3VuZHNcZlIiIDQKKy5JWCBJdGVtICItV2FycmF5LWJvdW5kcyIKK1RoaXMgb3B0aW9uIGlzIG9ubHkgYWN0aXZlIHdoZW4gXGZCXC1mdHJlZVwtdnJwXGZSIGlzIGFjdGl2ZQorKGRlZmF1bHQgZm9yIFxmQlwtTzJcZlIgYW5kIGFib3ZlKS4gSXQgd2FybnMgYWJvdXQgc3Vic2NyaXB0cyB0byBhcnJheXMKK3RoYXQgYXJlIGFsd2F5cyBvdXQgb2YgYm91bmRzLiBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV25vXC1kaXZcLWJ5XC16ZXJvXGZSIiA0CisuSVggSXRlbSAiLVduby1kaXYtYnktemVybyIKK0RvIG5vdCB3YXJuIGFib3V0IGNvbXBpbGUtdGltZSBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8uICBGbG9hdGluZy1wb2ludAorZGl2aXNpb24gYnkgemVybyBpcyBub3Qgd2FybmVkIGFib3V0LCBhcyBpdCBjYW4gYmUgYSBsZWdpdGltYXRlIHdheSBvZgorb2J0YWluaW5nIGluZmluaXRpZXMgYW5kIE5hTnMuCisuSVAgIlxmQlwtV3N5c3RlbVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi1Xc3lzdGVtLWhlYWRlcnMiCitQcmludCB3YXJuaW5nIG1lc3NhZ2VzIGZvciBjb25zdHJ1Y3RzIGZvdW5kIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMuCitXYXJuaW5ncyBmcm9tIHN5c3RlbSBoZWFkZXJzIGFyZSBub3JtYWxseSBzdXBwcmVzc2VkLCBvbiB0aGUgYXNzdW1wdGlvbgordGhhdCB0aGV5IHVzdWFsbHkgZG8gbm90IGluZGljYXRlIHJlYWwgcHJvYmxlbXMgYW5kIHdvdWxkIG9ubHkgbWFrZSB0aGUKK2NvbXBpbGVyIG91dHB1dCBoYXJkZXIgdG8gcmVhZC4gIFVzaW5nIHRoaXMgY29tbWFuZC1saW5lIG9wdGlvbiB0ZWxscworXCZccy0xR0NDXHMwIHRvIGVtaXQgd2FybmluZ3MgZnJvbSBzeXN0ZW0gaGVhZGVycyBhcyBpZiB0aGV5IG9jY3VycmVkIGluIHVzZXIKK2NvZGUuICBIb3dldmVyLCBub3RlIHRoYXQgdXNpbmcgXGZCXC1XYWxsXGZSIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcworb3B0aW9uIGRvZXMgXGZJbm90XGZSIHdhcm4gYWJvdXQgdW5rbm93biBwcmFnbWFzIGluIHN5c3RlbQoraGVhZGVyc1wtXC1cLWZvciB0aGF0LCBcZkJcLVd1bmtub3duXC1wcmFnbWFzXGZSIG11c3QgYWxzbyBiZSB1c2VkLgorLklQICJcZkJcLVd0cmFtcG9saW5lc1xmUiIgNAorLklYIEl0ZW0gIi1XdHJhbXBvbGluZXMiCisuVmIgMQorXCYgV2FybiBhYm91dCB0cmFtcG9saW5lcyBnZW5lcmF0ZWQgZm9yIHBvaW50ZXJzIHRvIG5lc3RlZCBmdW5jdGlvbnMuCitcJgorXCYgQSB0cmFtcG9saW5lIGlzIGEgc21hbGwgcGllY2Ugb2YgZGF0YSBvciBjb2RlIHRoYXQgaXMgY3JlYXRlZCBhdCBydW4KK1wmIHRpbWUgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGFkZHJlc3Mgb2YgYSBuZXN0ZWQgZnVuY3Rpb24gaXMgdGFrZW4sIGFuZAorXCYgaXMgdXNlZCB0byBjYWxsIHRoZSBuZXN0ZWQgZnVuY3Rpb24gaW5kaXJlY3RseS4gIEZvciBzb21lIHRhcmdldHMsIGl0CitcJiBpcyBtYWRlIHVwIG9mIGRhdGEgb25seSBhbmQgdGh1cyByZXF1aXJlcyBubyBzcGVjaWFsIHRyZWF0bWVudC4gIEJ1dCwKK1wmIGZvciBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sKK1wmIHRvIGJlIG1hZGUgZXhlY3V0YWJsZSBpbiBvcmRlciBmb3IgdGhlIHByb2dyYW0gdG8gd29yayBwcm9wZXJseS4KKy5WZQorLklQICJcZkJcLVdmbG9hdFwtZXF1YWxcZlIiIDQKKy5JWCBJdGVtICItV2Zsb2F0LWVxdWFsIgorV2FybiBpZiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYXJlIHVzZWQgaW4gZXF1YWxpdHkgY29tcGFyaXNvbnMuCisuU3AKK1RoZSBpZGVhIGJlaGluZCB0aGlzIGlzIHRoYXQgc29tZXRpbWVzIGl0IGlzIGNvbnZlbmllbnQgKGZvciB0aGUKK3Byb2dyYW1tZXIpIHRvIGNvbnNpZGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBhcyBhcHByb3hpbWF0aW9ucyB0bworaW5maW5pdGVseSBwcmVjaXNlIHJlYWwgbnVtYmVycy4gIElmIHlvdSBhcmUgZG9pbmcgdGhpcywgdGhlbiB5b3UgbmVlZAordG8gY29tcHV0ZSAoYnkgYW5hbHl6aW5nIHRoZSBjb2RlLCBvciBpbiBzb21lIG90aGVyIHdheSkgdGhlIG1heGltdW0gb3IKK2xpa2VseSBtYXhpbXVtIGVycm9yIHRoYXQgdGhlIGNvbXB1dGF0aW9uIGludHJvZHVjZXMsIGFuZCBhbGxvdyBmb3IgaXQKK3doZW4gcGVyZm9ybWluZyBjb21wYXJpc29ucyAoYW5kIHdoZW4gcHJvZHVjaW5nIG91dHB1dCwgYnV0IHRoYXQncyBhCitkaWZmZXJlbnQgcHJvYmxlbSkuICBJbiBwYXJ0aWN1bGFyLCBpbnN0ZWFkIG9mIHRlc3RpbmcgZm9yIGVxdWFsaXR5LCB5b3UKK3Nob3VsZCBjaGVjayB0byBzZWUgd2hldGhlciB0aGUgdHdvIHZhbHVlcyBoYXZlIHJhbmdlcyB0aGF0IG92ZXJsYXA7IGFuZAordGhpcyBpcyBkb25lIHdpdGggdGhlIHJlbGF0aW9uYWwgb3BlcmF0b3JzLCBzbyBlcXVhbGl0eSBjb21wYXJpc29ucyBhcmUKK3Byb2JhYmx5IG1pc3Rha2VuLgorLklQICJcZkJcLVd0cmFkaXRpb25hbFxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV3RyYWRpdGlvbmFsIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gYWJvdXQgY2VydGFpbiBjb25zdHJ1Y3RzIHRoYXQgYmVoYXZlIGRpZmZlcmVudGx5IGluIHRyYWRpdGlvbmFsIGFuZAorXCZccy0xSVNPXHMwIEMuICBBbHNvIHdhcm4gYWJvdXQgXHMtMUlTT1xzMCBDIGNvbnN0cnVjdHMgdGhhdCBoYXZlIG5vIHRyYWRpdGlvbmFsIEMKK2VxdWl2YWxlbnQsIGFuZC9vciBwcm9ibGVtYXRpYyBjb25zdHJ1Y3RzIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQuCisuUlMgNAorLklQICJcKGJ1IiA0CitNYWNybyBwYXJhbWV0ZXJzIHRoYXQgYXBwZWFyIHdpdGhpbiBzdHJpbmcgbGl0ZXJhbHMgaW4gdGhlIG1hY3JvIGJvZHkuCitJbiB0cmFkaXRpb25hbCBDIG1hY3JvIHJlcGxhY2VtZW50IHRha2VzIHBsYWNlIHdpdGhpbiBzdHJpbmcgbGl0ZXJhbHMsCitidXQgaW4gXHMtMUlTT1xzMCBDIGl0IGRvZXMgbm90LgorLklQICJcKGJ1IiA0CitJbiB0cmFkaXRpb25hbCBDLCBzb21lIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGRpZCBub3QgZXhpc3QuCitUcmFkaXRpb25hbCBwcmVwcm9jZXNzb3JzIG9ubHkgY29uc2lkZXJlZCBhIGxpbmUgdG8gYmUgYSBkaXJlY3RpdmUKK2lmIHRoZSBcZkIjXGZSIGFwcGVhcmVkIGluIGNvbHVtbiAxIG9uIHRoZSBsaW5lLiAgVGhlcmVmb3JlCitcJlxmQlwtV3RyYWRpdGlvbmFsXGZSIHdhcm5zIGFib3V0IGRpcmVjdGl2ZXMgdGhhdCB0cmFkaXRpb25hbCBDCit1bmRlcnN0YW5kcyBidXQgaWdub3JlcyBiZWNhdXNlIHRoZSBcZkIjXGZSIGRvZXMgbm90IGFwcGVhciBhcyB0aGUKK2ZpcnN0IGNoYXJhY3RlciBvbiB0aGUgbGluZS4gIEl0IGFsc28gc3VnZ2VzdHMgeW91IGhpZGUgZGlyZWN0aXZlcyBsaWtlCitcJlxmQiNwcmFnbWFcZlIgbm90IHVuZGVyc3Rvb2QgYnkgdHJhZGl0aW9uYWwgQyBieSBpbmRlbnRpbmcgdGhlbS4gIFNvbWUKK3RyYWRpdGlvbmFsIGltcGxlbWVudGF0aW9ucyBkbyBub3QgcmVjb2duaXplIFxmQiNlbGlmXGZSLCBzbyB0aGlzIG9wdGlvbgorc3VnZ2VzdHMgYXZvaWRpbmcgaXQgYWx0b2dldGhlci4KKy5JUCAiXChidSIgNAorQSBmdW5jdGlvbi1saWtlIG1hY3JvIHRoYXQgYXBwZWFycyB3aXRob3V0IGFyZ3VtZW50cy4KKy5JUCAiXChidSIgNAorVGhlIHVuYXJ5IHBsdXMgb3BlcmF0b3IuCisuSVAgIlwoYnUiIDQKK1RoZSBcZkJVXGZSIGludGVnZXIgY29uc3RhbnQgc3VmZml4LCBvciB0aGUgXGZCRlxmUiBvciBcZkJMXGZSIGZsb2F0aW5nLXBvaW50Citjb25zdGFudCBzdWZmaXhlcy4gIChUcmFkaXRpb25hbCBDIGRvZXMgc3VwcG9ydCB0aGUgXGZCTFxmUiBzdWZmaXggb24gaW50ZWdlcgorY29uc3RhbnRzLikgIE5vdGUsIHRoZXNlIHN1ZmZpeGVzIGFwcGVhciBpbiBtYWNyb3MgZGVmaW5lZCBpbiB0aGUgc3lzdGVtCitoZWFkZXJzIG9mIG1vc3QgbW9kZXJuIHN5c3RlbXMsIGUuZy4gdGhlIFxmQl9NSU5cZlIvXGZCX01BWFxmUiBtYWNyb3MgaW4gXGYoQ1dcKihDYDxsaW1pdHMuaD5cKihDJ1xmUi4KK1VzZSBvZiB0aGVzZSBtYWNyb3MgaW4gdXNlciBjb2RlIG1pZ2h0IG5vcm1hbGx5IGxlYWQgdG8gc3B1cmlvdXMKK3dhcm5pbmdzLCBob3dldmVyIFxzLTFHQ0NcczAncyBpbnRlZ3JhdGVkIHByZXByb2Nlc3NvciBoYXMgZW5vdWdoIGNvbnRleHQgdG8KK2F2b2lkIHdhcm5pbmcgaW4gdGhlc2UgY2FzZXMuCisuSVAgIlwoYnUiIDQKK0EgZnVuY3Rpb24gZGVjbGFyZWQgZXh0ZXJuYWwgaW4gb25lIGJsb2NrIGFuZCB0aGVuIHVzZWQgYWZ0ZXIgdGhlIGVuZCBvZgordGhlIGJsb2NrLgorLklQICJcKGJ1IiA0CitBIFxmKENXXCooQ2Bzd2l0Y2hcKihDJ1xmUiBzdGF0ZW1lbnQgaGFzIGFuIG9wZXJhbmQgb2YgdHlwZSBcZihDV1wqKENgbG9uZ1wqKEMnXGZSLgorLklQICJcKGJ1IiA0CitBIG5vblwtXGYoQ1dcKihDYHN0YXRpY1wqKEMnXGZSIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZvbGxvd3MgYSBcZihDV1wqKENgc3RhdGljXCooQydcZlIgb25lLgorVGhpcyBjb25zdHJ1Y3QgaXMgbm90IGFjY2VwdGVkIGJ5IHNvbWUgdHJhZGl0aW9uYWwgQyBjb21waWxlcnMuCisuSVAgIlwoYnUiIDQKK1RoZSBccy0xSVNPXHMwIHR5cGUgb2YgYW4gaW50ZWdlciBjb25zdGFudCBoYXMgYSBkaWZmZXJlbnQgd2lkdGggb3IKK3NpZ25lZG5lc3MgZnJvbSBpdHMgdHJhZGl0aW9uYWwgdHlwZS4gIFRoaXMgd2FybmluZyBpcyBvbmx5IGlzc3VlZCBpZgordGhlIGJhc2Ugb2YgdGhlIGNvbnN0YW50IGlzIHRlbi4gIEkuZS4gaGV4YWRlY2ltYWwgb3Igb2N0YWwgdmFsdWVzLCB3aGljaAordHlwaWNhbGx5IHJlcHJlc2VudCBiaXQgcGF0dGVybnMsIGFyZSBub3Qgd2FybmVkIGFib3V0LgorLklQICJcKGJ1IiA0CitVc2FnZSBvZiBccy0xSVNPXHMwIHN0cmluZyBjb25jYXRlbmF0aW9uIGlzIGRldGVjdGVkLgorLklQICJcKGJ1IiA0CitJbml0aWFsaXphdGlvbiBvZiBhdXRvbWF0aWMgYWdncmVnYXRlcy4KKy5JUCAiXChidSIgNAorSWRlbnRpZmllciBjb25mbGljdHMgd2l0aCBsYWJlbHMuICBUcmFkaXRpb25hbCBDIGxhY2tzIGEgc2VwYXJhdGUKK25hbWVzcGFjZSBmb3IgbGFiZWxzLgorLklQICJcKGJ1IiA0CitJbml0aWFsaXphdGlvbiBvZiB1bmlvbnMuICBJZiB0aGUgaW5pdGlhbGl6ZXIgaXMgemVybywgdGhlIHdhcm5pbmcgaXMKK29taXR0ZWQuICBUaGlzIGlzIGRvbmUgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgemVybyBpbml0aWFsaXplciBpbgordXNlciBjb2RlIGFwcGVhcnMgY29uZGl0aW9uZWQgb24gZS5nLiBcZihDV1wqKENgX1x8X1NURENfXHxfXCooQydcZlIgdG8gYXZvaWQgbWlzc2luZworaW5pdGlhbGl6ZXIgd2FybmluZ3MgYW5kIHJlbGllcyBvbiBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHRvIHplcm8gaW4gdGhlCit0cmFkaXRpb25hbCBDIGNhc2UuCisuSVAgIlwoYnUiIDQKK0NvbnZlcnNpb25zIGJ5IHByb3RvdHlwZXMgYmV0d2VlbiBmaXhlZC9mbG9hdGluZ1wtcG9pbnQgdmFsdWVzIGFuZCB2aWNlCit2ZXJzYS4gIFRoZSBhYnNlbmNlIG9mIHRoZXNlIHByb3RvdHlwZXMgd2hlbiBjb21waWxpbmcgd2l0aCB0cmFkaXRpb25hbAorQyBjYXVzZXMgc2VyaW91cyBwcm9ibGVtcy4gIFRoaXMgaXMgYSBzdWJzZXQgb2YgdGhlIHBvc3NpYmxlCitjb252ZXJzaW9uIHdhcm5pbmdzOyBmb3IgdGhlIGZ1bGwgc2V0IHVzZSBcZkJcLVd0cmFkaXRpb25hbFwtY29udmVyc2lvblxmUi4KKy5JUCAiXChidSIgNAorVXNlIG9mIFxzLTFJU09cczAgQyBzdHlsZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoaXMgd2FybmluZyBpbnRlbnRpb25hbGx5IGlzCitcJlxmSW5vdFxmUiBpc3N1ZWQgZm9yIHByb3RvdHlwZSBkZWNsYXJhdGlvbnMgb3IgdmFyaWFkaWMgZnVuY3Rpb25zCitiZWNhdXNlIHRoZXNlIFxzLTFJU09cczAgQyBmZWF0dXJlcyBhcHBlYXIgaW4geW91ciBjb2RlIHdoZW4gdXNpbmcKK2xpYmliZXJ0eSdzIHRyYWRpdGlvbmFsIEMgY29tcGF0aWJpbGl0eSBtYWNyb3MsIFxmKENXXCooQ2BQQVJBTVNcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYFZQQVJBTVNcKihDJ1xmUi4gIFRoaXMgd2FybmluZyBpcyBhbHNvIGJ5cGFzc2VkIGZvciBuZXN0ZWQgZnVuY3Rpb25zCitiZWNhdXNlIHRoYXQgZmVhdHVyZSBpcyBhbHJlYWR5IGEgXHMtMUdDQ1xzMCBleHRlbnNpb24gYW5kIHRodXMgbm90IHJlbGV2YW50IHRvCit0cmFkaXRpb25hbCBDIGNvbXBhdGliaWxpdHkuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1XdHJhZGl0aW9uYWxcLWNvbnZlcnNpb25cZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVd0cmFkaXRpb25hbC1jb252ZXJzaW9uIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gaWYgYSBwcm90b3R5cGUgY2F1c2VzIGEgdHlwZSBjb252ZXJzaW9uIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gd2hhdAord291bGQgaGFwcGVuIHRvIHRoZSBzYW1lIGFyZ3VtZW50IGluIHRoZSBhYnNlbmNlIG9mIGEgcHJvdG90eXBlLiAgVGhpcworaW5jbHVkZXMgY29udmVyc2lvbnMgb2YgZml4ZWQgcG9pbnQgdG8gZmxvYXRpbmcgYW5kIHZpY2UgdmVyc2EsIGFuZAorY29udmVyc2lvbnMgY2hhbmdpbmcgdGhlIHdpZHRoIG9yIHNpZ25lZG5lc3Mgb2YgYSBmaXhlZC1wb2ludCBhcmd1bWVudAorZXhjZXB0IHdoZW4gdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQgcHJvbW90aW9uLgorLklQICJcZkJcLVdkZWNsYXJhdGlvblwtYWZ0ZXJcLXN0YXRlbWVudFxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIHdoZW4gYSBkZWNsYXJhdGlvbiBpcyBmb3VuZCBhZnRlciBhIHN0YXRlbWVudCBpbiBhIGJsb2NrLiAgVGhpcworY29uc3RydWN0LCBrbm93biBmcm9tIFwqKEMrLCB3YXMgaW50cm9kdWNlZCB3aXRoIFxzLTFJU09cczAgQzk5IGFuZCBpcyBieSBkZWZhdWx0CithbGxvd2VkIGluIFxzLTFHQ0NcczAuICBJdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IFxzLTFJU09cczAgQzkwIGFuZCB3YXMgbm90IHN1cHBvcnRlZCBieQorXCZccy0xR0NDXHMwIHZlcnNpb25zIGJlZm9yZSBccy0xR0NDXHMwIDMuMC4KKy5JUCAiXGZCXC1XdW5kZWZcZlIiIDQKKy5JWCBJdGVtICItV3VuZGVmIgorV2FybiBpZiBhbiB1bmRlZmluZWQgaWRlbnRpZmllciBpcyBldmFsdWF0ZWQgaW4gYW4gXGZCI2lmXGZSIGRpcmVjdGl2ZS4KKy5JUCAiXGZCXC1Xbm9cLWVuZGlmXC1sYWJlbHNcZlIiIDQKKy5JWCBJdGVtICItV25vLWVuZGlmLWxhYmVscyIKK0RvIG5vdCB3YXJuIHdoZW5ldmVyIGFuIFxmQiNlbHNlXGZSIG9yIGFuIFxmQiNlbmRpZlxmUiBhcmUgZm9sbG93ZWQgYnkgdGV4dC4KKy5JUCAiXGZCXC1Xc2hhZG93XGZSIiA0CisuSVggSXRlbSAiLVdzaGFkb3ciCitXYXJuIHdoZW5ldmVyIGEgbG9jYWwgdmFyaWFibGUgb3IgdHlwZSBkZWNsYXJhdGlvbiBzaGFkb3dzIGFub3RoZXIgdmFyaWFibGUsCitwYXJhbWV0ZXIsIHR5cGUsIG9yIGNsYXNzIG1lbWJlciAoaW4gXCooQyspLCBvciB3aGVuZXZlciBhIGJ1aWx0LWluIGZ1bmN0aW9uCitpcyBzaGFkb3dlZC4gTm90ZSB0aGF0IGluIFwqKEMrLCB0aGUgY29tcGlsZXIgd2FybnMgaWYgYSBsb2NhbCB2YXJpYWJsZQorc2hhZG93cyBhbiBleHBsaWNpdCB0eXBlZGVmLCBidXQgbm90IGlmIGl0IHNoYWRvd3MgYSBzdHJ1Y3QvY2xhc3MvZW51bS4KKy5JUCAiXGZCXC1XbGFyZ2VyXC10aGFuPVxmUlxmSWxlblxmUiIgNAorLklYIEl0ZW0gIi1XbGFyZ2VyLXRoYW49bGVuIgorV2FybiB3aGVuZXZlciBhbiBvYmplY3Qgb2YgbGFyZ2VyIHRoYW4gXGZJbGVuXGZSIGJ5dGVzIGlzIGRlZmluZWQuCisuSVAgIlxmQlwtV2ZyYW1lXC1sYXJnZXJcLXRoYW49XGZSXGZJbGVuXGZSIiA0CisuSVggSXRlbSAiLVdmcmFtZS1sYXJnZXItdGhhbj1sZW4iCitXYXJuIGlmIHRoZSBzaXplIG9mIGEgZnVuY3Rpb24gZnJhbWUgaXMgbGFyZ2VyIHRoYW4gXGZJbGVuXGZSIGJ5dGVzLgorVGhlIGNvbXB1dGF0aW9uIGRvbmUgdG8gZGV0ZXJtaW5lIHRoZSBzdGFjayBmcmFtZSBzaXplIGlzIGFwcHJveGltYXRlCithbmQgbm90IGNvbnNlcnZhdGl2ZS4KK1RoZSBhY3R1YWwgcmVxdWlyZW1lbnRzIG1heSBiZSBzb21ld2hhdCBncmVhdGVyIHRoYW4gXGZJbGVuXGZSCitldmVuIGlmIHlvdSBkbyBub3QgZ2V0IGEgd2FybmluZy4gIEluIGFkZGl0aW9uLCBhbnkgc3BhY2UgYWxsb2NhdGVkCit2aWEgXGYoQ1dcKihDYGFsbG9jYVwqKEMnXGZSLCB2YXJpYWJsZS1sZW5ndGggYXJyYXlzLCBvciByZWxhdGVkIGNvbnN0cnVjdHMKK2lzIG5vdCBpbmNsdWRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiBkZXRlcm1pbmluZword2hldGhlciBvciBub3QgdG8gaXNzdWUgYSB3YXJuaW5nLgorLklQICJcZkJcLVdub1wtZnJlZVwtbm9uaGVhcFwtb2JqZWN0XGZSIiA0CisuSVggSXRlbSAiLVduby1mcmVlLW5vbmhlYXAtb2JqZWN0IgorRG8gbm90IHdhcm4gd2hlbiBhdHRlbXB0aW5nIHRvIGZyZWUgYW4gb2JqZWN0IHRoYXQgd2FzIG5vdCBhbGxvY2F0ZWQKK29uIHRoZSBoZWFwLgorLklQICJcZkJcLVdzdGFja1wtdXNhZ2U9XGZSXGZJbGVuXGZSIiA0CisuSVggSXRlbSAiLVdzdGFjay11c2FnZT1sZW4iCitXYXJuIGlmIHRoZSBzdGFjayB1c2FnZSBvZiBhIGZ1bmN0aW9uIG1pZ2h0IGJlIGxhcmdlciB0aGFuIFxmSWxlblxmUiBieXRlcy4KK1RoZSBjb21wdXRhdGlvbiBkb25lIHRvIGRldGVybWluZSB0aGUgc3RhY2sgdXNhZ2UgaXMgY29uc2VydmF0aXZlLgorQW55IHNwYWNlIGFsbG9jYXRlZCB2aWEgXGYoQ1dcKihDYGFsbG9jYVwqKEMnXGZSLCB2YXJpYWJsZS1sZW5ndGggYXJyYXlzLCBvciByZWxhdGVkCitjb25zdHJ1Y3RzIGlzIGluY2x1ZGVkIGJ5IHRoZSBjb21waWxlciB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgb3Igbm90IHRvCitpc3N1ZSBhIHdhcm5pbmcuCisuU3AKK1RoZSBtZXNzYWdlIGlzIGluIGtlZXBpbmcgd2l0aCB0aGUgb3V0cHV0IG9mIFxmQlwtZnN0YWNrXC11c2FnZVxmUi4KKy5SUyA0CisuSVAgIlwoYnUiIDQKK0lmIHRoZSBzdGFjayB1c2FnZSBpcyBmdWxseSBzdGF0aWMgYnV0IGV4Y2VlZHMgdGhlIHNwZWNpZmllZCBhbW91bnQsIGl0J3M6CisuU3AKKy5WYiAxCitcJiAgICAgICAgICB3YXJuaW5nOiBzdGFjayB1c2FnZSBpcyAxMTIwIGJ5dGVzCisuVmUKKy5JUCAiXChidSIgNAorSWYgdGhlIHN0YWNrIHVzYWdlIGlzIChwYXJ0bHkpIGR5bmFtaWMgYnV0IGJvdW5kZWQsIGl0J3M6CisuU3AKKy5WYiAxCitcJiAgICAgICAgICB3YXJuaW5nOiBzdGFjayB1c2FnZSBtaWdodCBiZSAxNjQ4IGJ5dGVzCisuVmUKKy5JUCAiXChidSIgNAorSWYgdGhlIHN0YWNrIHVzYWdlIGlzIChwYXJ0bHkpIGR5bmFtaWMgYW5kIG5vdCBib3VuZGVkLCBpdCdzOgorLlNwCisuVmIgMQorXCYgICAgICAgICAgd2FybmluZzogc3RhY2sgdXNhZ2UgbWlnaHQgYmUgdW5ib3VuZGVkCisuVmUKKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLVd1bnNhZmVcLWxvb3BcLW9wdGltaXphdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItV3Vuc2FmZS1sb29wLW9wdGltaXphdGlvbnMiCitXYXJuIGlmIHRoZSBsb29wIGNhbm5vdCBiZSBvcHRpbWl6ZWQgYmVjYXVzZSB0aGUgY29tcGlsZXIgY2Fubm90Cithc3N1bWUgYW55dGhpbmcgb24gdGhlIGJvdW5kcyBvZiB0aGUgbG9vcCBpbmRpY2VzLiAgV2l0aAorXCZcZkJcLWZ1bnNhZmVcLWxvb3BcLW9wdGltaXphdGlvbnNcZlIgd2FybiBpZiB0aGUgY29tcGlsZXIgbWFrZXMKK3N1Y2ggYXNzdW1wdGlvbnMuCisuSVAgIlxmQlwtV25vXC1wZWRhbnRpY1wtbXNcLWZvcm1hdFxmUiAoTWluR1cgdGFyZ2V0cyBvbmx5KSIgNAorLklYIEl0ZW0gIi1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IChNaW5HVyB0YXJnZXRzIG9ubHkpIgorV2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggXGZCXC1XZm9ybWF0XGZSCithbmQgXGZCXC1wZWRhbnRpY1xmUiB3aXRob3V0IFxzLTFHTlVcczAgZXh0ZW5zaW9ucywgdGhpcyBvcHRpb24KK2Rpc2FibGVzIHRoZSB3YXJuaW5ncyBhYm91dCBub24tSVNPIFxmKENXXCooQ2BwcmludGZcKihDJ1xmUiAvIFxmKENXXCooQ2BzY2FuZlwqKEMnXGZSIGZvcm1hdAord2lkdGggc3BlY2lmaWVycyBcZihDV1wqKENgSTMyXCooQydcZlIsIFxmKENXXCooQ2BJNjRcKihDJ1xmUiwgYW5kIFxmKENXXCooQ2BJXCooQydcZlIgdXNlZCBvbiBXaW5kb3dzIHRhcmdldHMsCit3aGljaCBkZXBlbmQgb24gdGhlIFxzLTFNU1xzMCBydW50aW1lLgorLklQICJcZkJcLVdwb2ludGVyXC1hcml0aFxmUiIgNAorLklYIEl0ZW0gIi1XcG9pbnRlci1hcml0aCIKK1dhcm4gYWJvdXQgYW55dGhpbmcgdGhhdCBkZXBlbmRzIG9uIHRoZSBcKihMInNpemUgb2ZcKihSIiBhIGZ1bmN0aW9uIHR5cGUgb3IKK29mIFxmKENXXCooQ2B2b2lkXCooQydcZlIuICBccy0xR05VXHMwIEMgYXNzaWducyB0aGVzZSB0eXBlcyBhIHNpemUgb2YgMSwgZm9yCitjb252ZW5pZW5jZSBpbiBjYWxjdWxhdGlvbnMgd2l0aCBcZihDV1wqKENgdm9pZCAqXCooQydcZlIgcG9pbnRlcnMgYW5kIHBvaW50ZXJzCit0byBmdW5jdGlvbnMuICBJbiBcKihDKywgd2FybiBhbHNvIHdoZW4gYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24gaW52b2x2ZXMKK1wmXGYoQ1dcKihDYE5VTExcKihDJ1xmUi4gIFRoaXMgd2FybmluZyBpcyBhbHNvIGVuYWJsZWQgYnkgXGZCXC1XcGVkYW50aWNcZlIuCisuSVAgIlxmQlwtV3R5cGVcLWxpbWl0c1xmUiIgNAorLklYIEl0ZW0gIi1XdHlwZS1saW1pdHMiCitXYXJuIGlmIGEgY29tcGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBvciBhbHdheXMgZmFsc2UgZHVlIHRvIHRoZSBsaW1pdGVkCityYW5nZSBvZiB0aGUgZGF0YSB0eXBlLCBidXQgZG8gbm90IHdhcm4gZm9yIGNvbnN0YW50IGV4cHJlc3Npb25zLiAgRm9yCitleGFtcGxlLCB3YXJuIGlmIGFuIHVuc2lnbmVkIHZhcmlhYmxlIGlzIGNvbXBhcmVkIGFnYWluc3QgemVybyB3aXRoCitcJlxmQjxcZlIgb3IgXGZCPj1cZlIuICBUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5CitcJlxmQlwtV2V4dHJhXGZSLgorLklQICJcZkJcLVdiYWRcLWZ1bmN0aW9uXC1jYXN0XGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XYmFkLWZ1bmN0aW9uLWNhc3QgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIgorV2FybiB3aGVuZXZlciBhIGZ1bmN0aW9uIGNhbGwgaXMgY2FzdCB0byBhIG5vbi1tYXRjaGluZyB0eXBlLgorRm9yIGV4YW1wbGUsIHdhcm4gaWYgXGYoQ1dcKihDYGludCBtYWxsb2MoKVwqKEMnXGZSIGlzIGNhc3QgdG8gXGYoQ1dcKihDYGFueXRoaW5nICpcKihDJ1xmUi4KKy5JUCAiXGZCXC1XYysrXC1jb21wYXRcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdjKystY29tcGF0IChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gYWJvdXQgXHMtMUlTT1xzMCBDIGNvbnN0cnVjdHMgdGhhdCBhcmUgb3V0c2lkZSBvZiB0aGUgY29tbW9uIHN1YnNldCBvZgorXCZccy0xSVNPXHMwIEMgYW5kIFxzLTFJU09cczAgXCooQyssIGUuZy4gcmVxdWVzdCBmb3IgaW1wbGljaXQgY29udmVyc2lvbiBmcm9tCitcJlxmKENXXCooQ2B2b2lkICpcKihDJ1xmUiB0byBhIHBvaW50ZXIgdG8gbm9uXC1cZihDV1wqKENgdm9pZFwqKEMnXGZSIHR5cGUuCisuSVAgIlxmQlwtV2MrKzExXC1jb21wYXRcZlIgKFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLVdjKysxMS1jb21wYXQgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gYWJvdXQgXCooQysgY29uc3RydWN0cyB3aG9zZSBtZWFuaW5nIGRpZmZlcnMgYmV0d2VlbiBccy0xSVNPXHMwIFwqKEMrIDE5OTgKK2FuZCBccy0xSVNPXHMwIFwqKEMrIDIwMTEsIGUuZy4sIGlkZW50aWZpZXJzIGluIFxzLTFJU09cczAgXCooQysgMTk5OCB0aGF0IGFyZSBrZXl3b3JkcworaW4gXHMtMUlTT1xzMCBcKihDKyAyMDExLiAgVGhpcyB3YXJuaW5nIHR1cm5zIG9uIFxmQlwtV25hcnJvd2luZ1xmUiBhbmQgaXMKK2VuYWJsZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVdjYXN0XC1xdWFsXGZSIiA0CisuSVggSXRlbSAiLVdjYXN0LXF1YWwiCitXYXJuIHdoZW5ldmVyIGEgcG9pbnRlciBpcyBjYXN0IHNvIGFzIHRvIHJlbW92ZSBhIHR5cGUgcXVhbGlmaWVyIGZyb20KK3RoZSB0YXJnZXQgdHlwZS4gIEZvciBleGFtcGxlLCB3YXJuIGlmIGEgXGYoQ1dcKihDYGNvbnN0IGNoYXIgKlwqKEMnXGZSIGlzIGNhc3QKK3RvIGFuIG9yZGluYXJ5IFxmKENXXCooQ2BjaGFyICpcKihDJ1xmUi4KKy5TcAorQWxzbyB3YXJuIHdoZW4gbWFraW5nIGEgY2FzdCB0aGF0IGludHJvZHVjZXMgYSB0eXBlIHF1YWxpZmllciBpbiBhbgordW5zYWZlIHdheS4gIEZvciBleGFtcGxlLCBjYXN0aW5nIFxmKENXXCooQ2BjaGFyICoqXCooQydcZlIgdG8gXGYoQ1dcKihDYGNvbnN0IGNoYXIgKipcKihDJ1xmUgoraXMgdW5zYWZlLCBhcyBpbiB0aGlzIGV4YW1wbGU6CisuU3AKKy5WYiA2CitcJiAgICAgICAgICAvKiBwIGlzIGNoYXIgKiogdmFsdWUuICAqLworXCYgICAgICAgICAgY29uc3QgY2hhciAqKnEgPSAoY29uc3QgY2hhciAqKikgcDsKK1wmICAgICAgICAgIC8qIEFzc2lnbm1lbnQgb2YgcmVhZG9ubHkgc3RyaW5nIHRvIGNvbnN0IGNoYXIgKiBpcyBPSy4gICovCitcJiAgICAgICAgICAqcSA9ICJzdHJpbmciOworXCYgICAgICAgICAgLyogTm93IGNoYXIqKiBwb2ludGVyIHBvaW50cyB0byByZWFkXC1vbmx5IG1lbW9yeS4gICovCitcJiAgICAgICAgICAqKnAgPSBcKihBcWJcKihBcTsKKy5WZQorLklQICJcZkJcLVdjYXN0XC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1XY2FzdC1hbGlnbiIKK1dhcm4gd2hlbmV2ZXIgYSBwb2ludGVyIGlzIGNhc3Qgc3VjaCB0aGF0IHRoZSByZXF1aXJlZCBhbGlnbm1lbnQgb2YgdGhlCit0YXJnZXQgaXMgaW5jcmVhc2VkLiAgRm9yIGV4YW1wbGUsIHdhcm4gaWYgYSBcZihDV1wqKENgY2hhciAqXCooQydcZlIgaXMgY2FzdCB0bworYW4gXGYoQ1dcKihDYGludCAqXCooQydcZlIgb24gbWFjaGluZXMgd2hlcmUgaW50ZWdlcnMgY2FuIG9ubHkgYmUgYWNjZXNzZWQgYXQKK3R3b1wtIG9yIGZvdXItYnl0ZSBib3VuZGFyaWVzLgorLklQICJcZkJcLVd3cml0ZVwtc3RyaW5nc1xmUiIgNAorLklYIEl0ZW0gIi1Xd3JpdGUtc3RyaW5ncyIKK1doZW4gY29tcGlsaW5nIEMsIGdpdmUgc3RyaW5nIGNvbnN0YW50cyB0aGUgdHlwZSBcZihDV1wqKENgY29uc3QKK2NoYXJbXGYoQ0lsZW5ndGhcZihDV11cKihDJ1xmUiBzbyB0aGF0IGNvcHlpbmcgdGhlIGFkZHJlc3Mgb2Ygb25lIGludG8gYQorbm9uXC1cZihDV1wqKENgY29uc3RcKihDJ1xmUiBcZihDV1wqKENgY2hhciAqXCooQydcZlIgcG9pbnRlciBwcm9kdWNlcyBhIHdhcm5pbmcuICBUaGVzZQord2FybmluZ3MgaGVscCB5b3UgZmluZCBhdCBjb21waWxlIHRpbWUgY29kZSB0aGF0IGNhbiB0cnkgdG8gd3JpdGUKK2ludG8gYSBzdHJpbmcgY29uc3RhbnQsIGJ1dCBvbmx5IGlmIHlvdSBoYXZlIGJlZW4gdmVyeSBjYXJlZnVsIGFib3V0Cit1c2luZyBcZihDV1wqKENgY29uc3RcKihDJ1xmUiBpbiBkZWNsYXJhdGlvbnMgYW5kIHByb3RvdHlwZXMuICBPdGhlcndpc2UsIGl0IGlzCitqdXN0IGEgbnVpc2FuY2UuIFRoaXMgaXMgd2h5IHdlIGRpZCBub3QgbWFrZSBcZkJcLVdhbGxcZlIgcmVxdWVzdAordGhlc2Ugd2FybmluZ3MuCisuU3AKK1doZW4gY29tcGlsaW5nIFwqKEMrLCB3YXJuIGFib3V0IHRoZSBkZXByZWNhdGVkIGNvbnZlcnNpb24gZnJvbSBzdHJpbmcKK2xpdGVyYWxzIHRvIFxmKENXXCooQ2BjaGFyICpcKihDJ1xmUi4gIFRoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIFwqKEMrCitwcm9ncmFtcy4KKy5JUCAiXGZCXC1XY2xvYmJlcmVkXGZSIiA0CisuSVggSXRlbSAiLVdjbG9iYmVyZWQiCitXYXJuIGZvciB2YXJpYWJsZXMgdGhhdCBtaWdodCBiZSBjaGFuZ2VkIGJ5IFxmQmxvbmdqbXBcZlIgb3IKK1wmXGZCdmZvcmtcZlIuICBUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IFxmQlwtV2V4dHJhXGZSLgorLklQICJcZkJcLVdjb252ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLVdjb252ZXJzaW9uIgorV2FybiBmb3IgaW1wbGljaXQgY29udmVyc2lvbnMgdGhhdCBtYXkgYWx0ZXIgYSB2YWx1ZS4gVGhpcyBpbmNsdWRlcworY29udmVyc2lvbnMgYmV0d2VlbiByZWFsIGFuZCBpbnRlZ2VyLCBsaWtlIFxmKENXXCooQ2BhYnMgKHgpXCooQydcZlIgd2hlbgorXCZcZihDV1wqKENgeFwqKEMnXGZSIGlzIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUjsgY29udmVyc2lvbnMgYmV0d2VlbiBzaWduZWQgYW5kIHVuc2lnbmVkLAorbGlrZSBcZihDV1wqKENgdW5zaWduZWQgdWkgPSBcLTFcKihDJ1xmUjsgYW5kIGNvbnZlcnNpb25zIHRvIHNtYWxsZXIgdHlwZXMsIGxpa2UKK1wmXGYoQ1dcKihDYHNxcnRmIChNX1BJKVwqKEMnXGZSLiBEbyBub3Qgd2FybiBmb3IgZXhwbGljaXQgY2FzdHMgbGlrZSBcZihDV1wqKENgYWJzCisoKGludCkgeClcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHVpID0gKHVuc2lnbmVkKSBcLTFcKihDJ1xmUiwgb3IgaWYgdGhlIHZhbHVlIGlzIG5vdAorY2hhbmdlZCBieSB0aGUgY29udmVyc2lvbiBsaWtlIGluIFxmKENXXCooQ2BhYnMgKDIuMClcKihDJ1xmUi4gIFdhcm5pbmdzIGFib3V0Citjb252ZXJzaW9ucyBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQgaW50ZWdlcnMgY2FuIGJlIGRpc2FibGVkIGJ5Cit1c2luZyBcZkJcLVdub1wtc2lnblwtY29udmVyc2lvblxmUi4KKy5TcAorRm9yIFwqKEMrLCBhbHNvIHdhcm4gZm9yIGNvbmZ1c2luZyBvdmVybG9hZCByZXNvbHV0aW9uIGZvciB1c2VyLWRlZmluZWQKK2NvbnZlcnNpb25zOyBhbmQgY29udmVyc2lvbnMgdGhhdCBuZXZlciB1c2UgYSB0eXBlIGNvbnZlcnNpb24KK29wZXJhdG9yOiBjb252ZXJzaW9ucyB0byBcZihDV1wqKENgdm9pZFwqKEMnXGZSLCB0aGUgc2FtZSB0eXBlLCBhIGJhc2UgY2xhc3Mgb3IgYQorcmVmZXJlbmNlIHRvIHRoZW0uIFdhcm5pbmdzIGFib3V0IGNvbnZlcnNpb25zIGJldHdlZW4gc2lnbmVkIGFuZAordW5zaWduZWQgaW50ZWdlcnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgaW4gXCooQysgdW5sZXNzCitcJlxmQlwtV3NpZ25cLWNvbnZlcnNpb25cZlIgaXMgZXhwbGljaXRseSBlbmFibGVkLgorLklQICJcZkJcLVdub1wtY29udmVyc2lvblwtbnVsbFxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV25vLWNvbnZlcnNpb24tbnVsbCAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorRG8gbm90IHdhcm4gZm9yIGNvbnZlcnNpb25zIGJldHdlZW4gXGYoQ1dcKihDYE5VTExcKihDJ1xmUiBhbmQgbm9uLXBvaW50ZXIKK3R5cGVzLiBcZkJcLVdjb252ZXJzaW9uXC1udWxsXGZSIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1XemVyb1wtYXNcLW51bGxcLXBvaW50ZXJcLWNvbnN0YW50XGZSIChcKihDKyBhbmQgT2JqZWN0aXZlXC1cKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XemVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1dhcm4gd2hlbiBhIGxpdGVyYWwgJzAnIGlzIHVzZWQgYXMgbnVsbCBwb2ludGVyIGNvbnN0YW50LiAgVGhpcyBjYW4KK2JlIHVzZWZ1bCB0byBmYWNpbGl0YXRlIHRoZSBjb252ZXJzaW9uIHRvIFxmKENXXCooQ2BudWxscHRyXCooQydcZlIgaW4gXCooQysxMS4KKy5JUCAiXGZCXC1XdXNlbGVzc1wtY2FzdFxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV3VzZWxlc3MtY2FzdCAoIGFuZCBPYmplY3RpdmUtIG9ubHkpIgorV2FybiB3aGVuIGFuIGV4cHJlc3Npb24gaXMgY2FzdGVkIHRvIGl0cyBvd24gdHlwZS4KKy5JUCAiXGZCXC1XZW1wdHlcLWJvZHlcZlIiIDQKKy5JWCBJdGVtICItV2VtcHR5LWJvZHkiCitXYXJuIGlmIGFuIGVtcHR5IGJvZHkgb2NjdXJzIGluIGFuIFxmQmlmXGZSLCBcZkJlbHNlXGZSIG9yIFxmQmRvCit3aGlsZVxmUiBzdGF0ZW1lbnQuICBUaGlzIHdhcm5pbmcgaXMgYWxzbyBlbmFibGVkIGJ5IFxmQlwtV2V4dHJhXGZSLgorLklQICJcZkJcLVdlbnVtXC1jb21wYXJlXGZSIiA0CisuSVggSXRlbSAiLVdlbnVtLWNvbXBhcmUiCitXYXJuIGFib3V0IGEgY29tcGFyaXNvbiBiZXR3ZWVuIHZhbHVlcyBvZiBkaWZmZXJlbnQgZW51bWVyYXRlZCB0eXBlcy4KK0luIFwqKEMrIGVudW1lcmFsIG1pc21hdGNoZXMgaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgYXJlIGFsc28KK2RpYWdub3NlZCBhbmQgdGhlIHdhcm5pbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAgSW4gQyB0aGlzIHdhcm5pbmcgaXMgCitlbmFibGVkIGJ5IFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XanVtcFwtbWlzc2VzXC1pbml0XGZSIChDLCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XanVtcC1taXNzZXMtaW5pdCAoQywgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGlmIGEgXGYoQ1dcKihDYGdvdG9cKihDJ1xmUiBzdGF0ZW1lbnQgb3IgYSBcZihDV1wqKENgc3dpdGNoXCooQydcZlIgc3RhdGVtZW50IGp1bXBzCitmb3J3YXJkIGFjcm9zcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYSB2YXJpYWJsZSwgb3IganVtcHMgYmFja3dhcmQgdG8gYQorbGFiZWwgYWZ0ZXIgdGhlIHZhcmlhYmxlIGhhcyBiZWVuIGluaXRpYWxpemVkLiAgVGhpcyBvbmx5IHdhcm5zIGFib3V0Cit2YXJpYWJsZXMgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGV5IGFyZSBkZWNsYXJlZC4gIFRoaXMgd2FybmluZyBpcworb25seSBzdXBwb3J0ZWQgZm9yIEMgYW5kIE9iamVjdGl2ZS1DOyBpbiBcKihDKyB0aGlzIHNvcnQgb2YgYnJhbmNoIGlzIGFuCitlcnJvciBpbiBhbnkgY2FzZS4KKy5TcAorXCZcZkJcLVdqdW1wXC1taXNzZXNcLWluaXRcZlIgaXMgaW5jbHVkZWQgaW4gXGZCXC1XYysrXC1jb21wYXRcZlIuICBJdAorY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlIFxmQlwtV25vXC1qdW1wXC1taXNzZXNcLWluaXRcZlIgb3B0aW9uLgorLklQICJcZkJcLVdzaWduXC1jb21wYXJlXGZSIiA0CisuSVggSXRlbSAiLVdzaWduLWNvbXBhcmUiCitXYXJuIHdoZW4gYSBjb21wYXJpc29uIGJldHdlZW4gc2lnbmVkIGFuZCB1bnNpZ25lZCB2YWx1ZXMgY291bGQgcHJvZHVjZQorYW4gaW5jb3JyZWN0IHJlc3VsdCB3aGVuIHRoZSBzaWduZWQgdmFsdWUgaXMgY29udmVydGVkIHRvIHVuc2lnbmVkLgorVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSBcZkJcLVdleHRyYVxmUjsgdG8gZ2V0IHRoZSBvdGhlciB3YXJuaW5ncworb2YgXGZCXC1XZXh0cmFcZlIgd2l0aG91dCB0aGlzIHdhcm5pbmcsIHVzZSBcZkJcLVdleHRyYSBcLVdub1wtc2lnblwtY29tcGFyZVxmUi4KKy5JUCAiXGZCXC1Xc2lnblwtY29udmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi1Xc2lnbi1jb252ZXJzaW9uIgorV2FybiBmb3IgaW1wbGljaXQgY29udmVyc2lvbnMgdGhhdCBtYXkgY2hhbmdlIHRoZSBzaWduIG9mIGFuIGludGVnZXIKK3ZhbHVlLCBsaWtlIGFzc2lnbmluZyBhIHNpZ25lZCBpbnRlZ2VyIGV4cHJlc3Npb24gdG8gYW4gdW5zaWduZWQKK2ludGVnZXIgdmFyaWFibGUuIEFuIGV4cGxpY2l0IGNhc3Qgc2lsZW5jZXMgdGhlIHdhcm5pbmcuIEluIEMsIHRoaXMKK29wdGlvbiBpcyBlbmFibGVkIGFsc28gYnkgXGZCXC1XY29udmVyc2lvblxmUi4KKy5JUCAiXGZCXC1Xc2l6ZW9mXC1wb2ludGVyXC1tZW1hY2Nlc3NcZlIiIDQKKy5JWCBJdGVtICItV3NpemVvZi1wb2ludGVyLW1lbWFjY2VzcyIKK1dhcm4gZm9yIHN1c3BpY2lvdXMgbGVuZ3RoIHBhcmFtZXRlcnMgdG8gY2VydGFpbiBzdHJpbmcgYW5kIG1lbW9yeSBidWlsdC1pbgorZnVuY3Rpb25zIGlmIHRoZSBhcmd1bWVudCB1c2VzIFxmKENXXCooQ2BzaXplb2ZcKihDJ1xmUi4gIFRoaXMgd2FybmluZyB3YXJucyBlLmcuCithYm91dCBcZihDV1wqKENgbWVtc2V0IChwdHIsIDAsIHNpemVvZiAocHRyKSk7XCooQydcZlIgaWYgXGYoQ1dcKihDYHB0clwqKEMnXGZSIGlzIG5vdCBhbiBhcnJheSwKK2J1dCBhIHBvaW50ZXIsIGFuZCBzdWdnZXN0cyBhIHBvc3NpYmxlIGZpeCwgb3IgYWJvdXQKK1wmXGYoQ1dcKihDYG1lbWNweSAoJmZvbywgcHRyLCBzaXplb2YgKCZmb28pKTtcKihDJ1xmUi4gIFRoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5CitcJlxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XYWRkcmVzc1xmUiIgNAorLklYIEl0ZW0gIi1XYWRkcmVzcyIKK1dhcm4gYWJvdXQgc3VzcGljaW91cyB1c2VzIG9mIG1lbW9yeSBhZGRyZXNzZXMuIFRoZXNlIGluY2x1ZGUgdXNpbmcKK3RoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gaW4gYSBjb25kaXRpb25hbCBleHByZXNzaW9uLCBzdWNoIGFzCitcJlxmKENXXCooQ2B2b2lkIGZ1bmModm9pZCk7IGlmIChmdW5jKVwqKEMnXGZSLCBhbmQgY29tcGFyaXNvbnMgYWdhaW5zdCB0aGUgbWVtb3J5CithZGRyZXNzIG9mIGEgc3RyaW5nIGxpdGVyYWwsIHN1Y2ggYXMgXGYoQ1dcKihDYGlmICh4ID09ICJhYmMiKVwqKEMnXGZSLiAgU3VjaAordXNlcyB0eXBpY2FsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIGVycm9yOiB0aGUgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uCithbHdheXMgZXZhbHVhdGVzIHRvIHRydWUsIHNvIHRoZWlyIHVzZSBpbiBhIGNvbmRpdGlvbmFsIHVzdWFsbHkKK2luZGljYXRlIHRoYXQgdGhlIHByb2dyYW1tZXIgZm9yZ290IHRoZSBwYXJlbnRoZXNlcyBpbiBhIGZ1bmN0aW9uCitjYWxsOyBhbmQgY29tcGFyaXNvbnMgYWdhaW5zdCBzdHJpbmcgbGl0ZXJhbHMgcmVzdWx0IGluIHVuc3BlY2lmaWVkCitiZWhhdmlvciBhbmQgYXJlIG5vdCBwb3J0YWJsZSBpbiBDLCBzbyB0aGV5IHVzdWFsbHkgaW5kaWNhdGUgdGhhdCB0aGUKK3Byb2dyYW1tZXIgaW50ZW5kZWQgdG8gdXNlIFxmKENXXCooQ2BzdHJjbXBcKihDJ1xmUi4gIFRoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5CitcJlxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XbG9naWNhbFwtb3BcZlIiIDQKKy5JWCBJdGVtICItV2xvZ2ljYWwtb3AiCitXYXJuIGFib3V0IHN1c3BpY2lvdXMgdXNlcyBvZiBsb2dpY2FsIG9wZXJhdG9ycyBpbiBleHByZXNzaW9ucy4KK1RoaXMgaW5jbHVkZXMgdXNpbmcgbG9naWNhbCBvcGVyYXRvcnMgaW4gY29udGV4dHMgd2hlcmUgYQorYml0LXdpc2Ugb3BlcmF0b3IgaXMgbGlrZWx5IHRvIGJlIGV4cGVjdGVkLgorLklQICJcZkJcLVdhZ2dyZWdhdGVcLXJldHVyblxmUiIgNAorLklYIEl0ZW0gIi1XYWdncmVnYXRlLXJldHVybiIKK1dhcm4gaWYgYW55IGZ1bmN0aW9ucyB0aGF0IHJldHVybiBzdHJ1Y3R1cmVzIG9yIHVuaW9ucyBhcmUgZGVmaW5lZCBvcgorY2FsbGVkLiAgKEluIGxhbmd1YWdlcyB3aGVyZSB5b3UgY2FuIHJldHVybiBhbiBhcnJheSwgdGhpcyBhbHNvIGVsaWNpdHMKK2Egd2FybmluZy4pCisuSVAgIlxmQlwtV25vXC1hZ2dyZXNzaXZlXC1sb29wXC1vcHRpbWl6YXRpb25zXGZSIiA0CisuSVggSXRlbSAiLVduby1hZ2dyZXNzaXZlLWxvb3Atb3B0aW1pemF0aW9ucyIKK1dhcm4gaWYgaW4gYSBsb29wIHdpdGggY29uc3RhbnQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdGhlIGNvbXBpbGVyIGRldGVjdHMKK3VuZGVmaW5lZCBiZWhhdmlvciBpbiBzb21lIHN0YXRlbWVudCBkdXJpbmcgb25lIG9yIG1vcmUgb2YgdGhlIGl0ZXJhdGlvbnMuCisuSVAgIlxmQlwtV25vXC1hdHRyaWJ1dGVzXGZSIiA0CisuSVggSXRlbSAiLVduby1hdHRyaWJ1dGVzIgorRG8gbm90IHdhcm4gaWYgYW4gdW5leHBlY3RlZCBcZihDV1wqKENgX1x8X2F0dHJpYnV0ZV9cfF9cKihDJ1xmUiBpcyB1c2VkLCBzdWNoIGFzCit1bnJlY29nbml6ZWQgYXR0cmlidXRlcywgZnVuY3Rpb24gYXR0cmlidXRlcyBhcHBsaWVkIHRvIHZhcmlhYmxlcywKK2V0Yy4gIFRoaXMgZG9lcyBub3Qgc3RvcCBlcnJvcnMgZm9yIGluY29ycmVjdCB1c2Ugb2Ygc3VwcG9ydGVkCithdHRyaWJ1dGVzLgorLklQICJcZkJcLVdub1wtYnVpbHRpblwtbWFjcm9cLXJlZGVmaW5lZFxmUiIgNAorLklYIEl0ZW0gIi1Xbm8tYnVpbHRpbi1tYWNyby1yZWRlZmluZWQiCitEbyBub3Qgd2FybiBpZiBjZXJ0YWluIGJ1aWx0LWluIG1hY3JvcyBhcmUgcmVkZWZpbmVkLiAgVGhpcyBzdXBwcmVzc2VzCit3YXJuaW5ncyBmb3IgcmVkZWZpbml0aW9uIG9mIFxmKENXXCooQ2BfXHxfVElNRVNUQU1QX1x8X1wqKEMnXGZSLCBcZihDV1wqKENgX1x8X1RJTUVfXHxfXCooQydcZlIsCitcJlxmKENXXCooQ2BfXHxfREFURV9cfF9cKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF9GSUxFX1x8X1wqKEMnXGZSLCBhbmQgXGYoQ1dcKihDYF9cfF9CQVNFX0ZJTEVfXHxfXCooQydcZlIuCisuSVAgIlxmQlwtV3N0cmljdFwtcHJvdG90eXBlc1xmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV3N0cmljdC1wcm90b3R5cGVzIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gaWYgYSBmdW5jdGlvbiBpcyBkZWNsYXJlZCBvciBkZWZpbmVkIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUKK2FyZ3VtZW50IHR5cGVzLiAgKEFuIG9sZC1zdHlsZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIHBlcm1pdHRlZCB3aXRob3V0CithIHdhcm5pbmcgaWYgcHJlY2VkZWQgYnkgYSBkZWNsYXJhdGlvbiB0aGF0IHNwZWNpZmllcyB0aGUgYXJndW1lbnQKK3R5cGVzLikKKy5JUCAiXGZCXC1Xb2xkXC1zdHlsZVwtZGVjbGFyYXRpb25cZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdvbGQtc3R5bGUtZGVjbGFyYXRpb24gKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIgorV2FybiBmb3Igb2Jzb2xlc2NlbnQgdXNhZ2VzLCBhY2NvcmRpbmcgdG8gdGhlIEMgU3RhbmRhcmQsIGluIGEKK2RlY2xhcmF0aW9uLiBGb3IgZXhhbXBsZSwgd2FybiBpZiBzdG9yYWdlLWNsYXNzIHNwZWNpZmllcnMgbGlrZQorXCZcZihDV1wqKENgc3RhdGljXCooQydcZlIgYXJlIG5vdCB0aGUgZmlyc3QgdGhpbmdzIGluIGEgZGVjbGFyYXRpb24uICBUaGlzIHdhcm5pbmcKK2lzIGFsc28gZW5hYmxlZCBieSBcZkJcLVdleHRyYVxmUi4KKy5JUCAiXGZCXC1Xb2xkXC1zdHlsZVwtZGVmaW5pdGlvblxmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV29sZC1zdHlsZS1kZWZpbml0aW9uIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gaWYgYW4gb2xkLXN0eWxlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgdXNlZC4gIEEgd2FybmluZyBpcyBnaXZlbgorZXZlbiBpZiB0aGVyZSBpcyBhIHByZXZpb3VzIHByb3RvdHlwZS4KKy5JUCAiXGZCXC1XbWlzc2luZ1wtcGFyYW1ldGVyXC10eXBlXGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XbWlzc2luZy1wYXJhbWV0ZXItdHlwZSAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitBIGZ1bmN0aW9uIHBhcmFtZXRlciBpcyBkZWNsYXJlZCB3aXRob3V0IGEgdHlwZSBzcGVjaWZpZXIgaW4gSyZSXC1zdHlsZQorZnVuY3Rpb25zOgorLlNwCisuVmIgMQorXCYgICAgICAgIHZvaWQgZm9vKGJhcikgeyB9CisuVmUKKy5TcAorVGhpcyB3YXJuaW5nIGlzIGFsc28gZW5hYmxlZCBieSBcZkJcLVdleHRyYVxmUi4KKy5JUCAiXGZCXC1XbWlzc2luZ1wtcHJvdG90eXBlc1xmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV21pc3NpbmctcHJvdG90eXBlcyAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitXYXJuIGlmIGEgZ2xvYmFsIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aG91dCBhIHByZXZpb3VzIHByb3RvdHlwZQorZGVjbGFyYXRpb24uICBUaGlzIHdhcm5pbmcgaXMgaXNzdWVkIGV2ZW4gaWYgdGhlIGRlZmluaXRpb24gaXRzZWxmCitwcm92aWRlcyBhIHByb3RvdHlwZS4gIFVzZSB0aGlzIG9wdGlvbiB0byBkZXRlY3QgZ2xvYmFsIGZ1bmN0aW9ucwordGhhdCBkbyBub3QgaGF2ZSBhIG1hdGNoaW5nIHByb3RvdHlwZSBkZWNsYXJhdGlvbiBpbiBhIGhlYWRlciBmaWxlLgorVGhpcyBvcHRpb24gaXMgbm90IHZhbGlkIGZvciBcKihDKyBiZWNhdXNlIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKK3Byb3ZpZGUgcHJvdG90eXBlcyBhbmQgYSBub24tbWF0Y2hpbmcgZGVjbGFyYXRpb24gd2lsbCBkZWNsYXJlIGFuCitvdmVybG9hZCByYXRoZXIgdGhhbiBjb25mbGljdCB3aXRoIGFuIGVhcmxpZXIgZGVjbGFyYXRpb24uCitVc2UgXGZCXC1XbWlzc2luZ1wtZGVjbGFyYXRpb25zXGZSIHRvIGRldGVjdCBtaXNzaW5nIGRlY2xhcmF0aW9ucyBpbiBcKihDKy4KKy5JUCAiXGZCXC1XbWlzc2luZ1wtZGVjbGFyYXRpb25zXGZSIiA0CisuSVggSXRlbSAiLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKK1dhcm4gaWYgYSBnbG9iYWwgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRob3V0IGEgcHJldmlvdXMgZGVjbGFyYXRpb24uCitEbyBzbyBldmVuIGlmIHRoZSBkZWZpbml0aW9uIGl0c2VsZiBwcm92aWRlcyBhIHByb3RvdHlwZS4KK1VzZSB0aGlzIG9wdGlvbiB0byBkZXRlY3QgZ2xvYmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgZGVjbGFyZWQgaW4KK2hlYWRlciBmaWxlcy4gIEluIEMsIG5vIHdhcm5pbmdzIGFyZSBpc3N1ZWQgZm9yIGZ1bmN0aW9ucyB3aXRoIHByZXZpb3VzCitub24tcHJvdG90eXBlIGRlY2xhcmF0aW9uczsgdXNlIFxmQlwtV21pc3NpbmdcLXByb3RvdHlwZVxmUiB0byBkZXRlY3QKK21pc3NpbmcgcHJvdG90eXBlcy4gIEluIFwqKEMrLCBubyB3YXJuaW5ncyBhcmUgaXNzdWVkIGZvciBmdW5jdGlvbiB0ZW1wbGF0ZXMsCitvciBmb3IgaW5saW5lIGZ1bmN0aW9ucywgb3IgZm9yIGZ1bmN0aW9ucyBpbiBhbm9ueW1vdXMgbmFtZXNwYWNlcy4KKy5JUCAiXGZCXC1XbWlzc2luZ1wtZmllbGRcLWluaXRpYWxpemVyc1xmUiIgNAorLklYIEl0ZW0gIi1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMiCitXYXJuIGlmIGEgc3RydWN0dXJlJ3MgaW5pdGlhbGl6ZXIgaGFzIHNvbWUgZmllbGRzIG1pc3NpbmcuICBGb3IKK2V4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBjYXVzZXMgc3VjaCBhIHdhcm5pbmcsIGJlY2F1c2UKK1wmXGYoQ1dcKihDYHguaFwqKEMnXGZSIGlzIGltcGxpY2l0bHkgemVybzoKKy5TcAorLlZiIDIKK1wmICAgICAgICBzdHJ1Y3QgcyB7IGludCBmLCBnLCBoOyB9OworXCYgICAgICAgIHN0cnVjdCBzIHggPSB7IDMsIDQgfTsKKy5WZQorLlNwCitUaGlzIG9wdGlvbiBkb2VzIG5vdCB3YXJuIGFib3V0IGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBzbyB0aGUgZm9sbG93aW5nCittb2RpZmljYXRpb24gZG9lcyBub3QgdHJpZ2dlciBhIHdhcm5pbmc6CisuU3AKKy5WYiAyCitcJiAgICAgICAgc3RydWN0IHMgeyBpbnQgZiwgZywgaDsgfTsKK1wmICAgICAgICBzdHJ1Y3QgcyB4ID0geyAuZiA9IDMsIC5nID0gNCB9OworLlZlCisuU3AKK1RoaXMgd2FybmluZyBpcyBpbmNsdWRlZCBpbiBcZkJcLVdleHRyYVxmUi4gIFRvIGdldCBvdGhlciBcZkJcLVdleHRyYVxmUgord2FybmluZ3Mgd2l0aG91dCB0aGlzIG9uZSwgdXNlIFxmQlwtV2V4dHJhIFwtV25vXC1taXNzaW5nXC1maWVsZFwtaW5pdGlhbGl6ZXJzXGZSLgorLklQICJcZkJcLVdub1wtbXVsdGljaGFyXGZSIiA0CisuSVggSXRlbSAiLVduby1tdWx0aWNoYXIiCitEbyBub3Qgd2FybiBpZiBhIG11bHRpY2hhcmFjdGVyIGNvbnN0YW50IChcZkInXHMtMUZPT0ZcczAnXGZSKSBpcyB1c2VkLgorVXN1YWxseSB0aGV5IGluZGljYXRlIGEgdHlwbyBpbiB0aGUgdXNlcidzIGNvZGUsIGFzIHRoZXkgaGF2ZQoraW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZXMsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gcG9ydGFibGUgY29kZS4KKy5JUCAiXGZCXC1Xbm9ybWFsaXplZD08bm9uZXxpZHxuZmN8bmZrYz5cZlIiIDQKKy5JWCBJdGVtICItV25vcm1hbGl6ZWQ9PG5vbmV8aWR8bmZjfG5ma2M+IgorSW4gXHMtMUlTT1xzMCBDIGFuZCBccy0xSVNPXHMwIFwqKEMrLCB0d28gaWRlbnRpZmllcnMgYXJlIGRpZmZlcmVudCBpZiB0aGV5IGFyZQorZGlmZmVyZW50IHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzLiAgSG93ZXZlciwgc29tZXRpbWVzIHdoZW4gY2hhcmFjdGVycworb3V0c2lkZSB0aGUgYmFzaWMgXHMtMUFTQ0lJXHMwIGNoYXJhY3RlciBzZXQgYXJlIHVzZWQsIHlvdSBjYW4gaGF2ZSB0d28KK2RpZmZlcmVudCBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgbG9vayB0aGUgc2FtZS4gIFRvIGF2b2lkIGNvbmZ1c2lvbiwKK3RoZSBccy0xSVNPXHMwIDEwNjQ2IHN0YW5kYXJkIHNldHMgb3V0IHNvbWUgXGZJbm9ybWFsaXphdGlvbiBydWxlc1xmUiB3aGljaAord2hlbiBhcHBsaWVkIGVuc3VyZSB0aGF0IHR3byBzZXF1ZW5jZXMgdGhhdCBsb29rIHRoZSBzYW1lIGFyZSB0dXJuZWQgaW50bwordGhlIHNhbWUgc2VxdWVuY2UuICBccy0xR0NDXHMwIGNhbiB3YXJuIHlvdSBpZiB5b3UgYXJlIHVzaW5nIGlkZW50aWZpZXJzIHRoYXQKK2hhdmUgbm90IGJlZW4gbm9ybWFsaXplZDsgdGhpcyBvcHRpb24gY29udHJvbHMgdGhhdCB3YXJuaW5nLgorLlNwCitUaGVyZSBhcmUgZm91ciBsZXZlbHMgb2Ygd2FybmluZyBzdXBwb3J0ZWQgYnkgXHMtMUdDQ1xzMC4gIFRoZSBkZWZhdWx0IGlzCitcJlxmQlwtV25vcm1hbGl6ZWQ9bmZjXGZSLCB3aGljaCB3YXJucyBhYm91dCBhbnkgaWRlbnRpZmllciB0aGF0IGlzCitub3QgaW4gdGhlIFxzLTFJU09cczAgMTA2NDYgXCooTCJDXCooUiIgbm9ybWFsaXplZCBmb3JtLCBcZklccy0xTkZDXHMwXGZSLiAgXHMtMU5GQ1xzMCBpcyB0aGUKK3JlY29tbWVuZGVkIGZvcm0gZm9yIG1vc3QgdXNlcy4KKy5TcAorVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHNvbWUgY2hhcmFjdGVycyBhbGxvd2VkIGluIGlkZW50aWZpZXJzIGJ5CitcJlxzLTFJU09cczAgQyBhbmQgXHMtMUlTT1xzMCBcKihDKyB0aGF0LCB3aGVuIHR1cm5lZCBpbnRvIFxzLTFORkNcczAsIGFyZSBub3QgYWxsb3dlZCBpbiAKK2lkZW50aWZpZXJzLiAgVGhhdCBpcywgdGhlcmUncyBubyB3YXkgdG8gdXNlIHRoZXNlIHN5bWJvbHMgaW4gcG9ydGFibGUKK1wmXHMtMUlTT1xzMCBDIG9yIFwqKEMrIGFuZCBoYXZlIGFsbCB5b3VyIGlkZW50aWZpZXJzIGluIFxzLTFORkNcczAuCitcJlxmQlwtV25vcm1hbGl6ZWQ9aWRcZlIgc3VwcHJlc3NlcyB0aGUgd2FybmluZyBmb3IgdGhlc2UgY2hhcmFjdGVycy4KK0l0IGlzIGhvcGVkIHRoYXQgZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBzdGFuZGFyZHMgaW52b2x2ZWQgd2lsbCBjb3JyZWN0Cit0aGlzLCB3aGljaCBpcyB3aHkgdGhpcyBvcHRpb24gaXMgbm90IHRoZSBkZWZhdWx0LgorLlNwCitZb3UgY2FuIHN3aXRjaCB0aGUgd2FybmluZyBvZmYgZm9yIGFsbCBjaGFyYWN0ZXJzIGJ5IHdyaXRpbmcKK1wmXGZCXC1Xbm9ybWFsaXplZD1ub25lXGZSLiAgWW91IHNob3VsZCBvbmx5IGRvIHRoaXMgaWYgeW91CithcmUgdXNpbmcgc29tZSBvdGhlciBub3JtYWxpemF0aW9uIHNjaGVtZSAobGlrZSBcKihMIkRcKihSIiksIGJlY2F1c2UKK290aGVyd2lzZSB5b3UgY2FuIGVhc2lseSBjcmVhdGUgYnVncyB0aGF0IGFyZSBsaXRlcmFsbHkgaW1wb3NzaWJsZSB0byBzZWUuCisuU3AKK1NvbWUgY2hhcmFjdGVycyBpbiBccy0xSVNPXHMwIDEwNjQ2IGhhdmUgZGlzdGluY3QgbWVhbmluZ3MgYnV0IGxvb2sgaWRlbnRpY2FsCitpbiBzb21lIGZvbnRzIG9yIGRpc3BsYXkgbWV0aG9kb2xvZ2llcywgZXNwZWNpYWxseSBvbmNlIGZvcm1hdHRpbmcgaGFzCitiZWVuIGFwcGxpZWQuICBGb3IgaW5zdGFuY2UgXGYoQ1dcKihDYFxldTIwN0ZcKihDJ1xmUiwgXCooTCJccy0xU1VQRVJTQ1JJUFRcczAgXHMtMUxBVElOXHMwIFxzLTFTTUFMTFxzMAorXCZccy0xTEVUVEVSXHMwIE5cKihSIiwgZGlzcGxheXMganVzdCBsaWtlIGEgcmVndWxhciBcZihDV1wqKENgblwqKEMnXGZSIHRoYXQgaGFzIGJlZW4KK3BsYWNlZCBpbiBhIHN1cGVyc2NyaXB0LiAgXHMtMUlTT1xzMCAxMDY0NiBkZWZpbmVzIHRoZSBcZklccy0xTkZLQ1xzMFxmUgorbm9ybWFsaXphdGlvbiBzY2hlbWUgdG8gY29udmVydCBhbGwgdGhlc2UgaW50byBhIHN0YW5kYXJkIGZvcm0gYXMKK3dlbGwsIGFuZCBccy0xR0NDXHMwIHdhcm5zIGlmIHlvdXIgY29kZSBpcyBub3QgaW4gXHMtMU5GS0NcczAgaWYgeW91IHVzZQorXCZcZkJcLVdub3JtYWxpemVkPW5ma2NcZlIuICBUaGlzIHdhcm5pbmcgaXMgY29tcGFyYWJsZSB0byB3YXJuaW5nCithYm91dCBldmVyeSBpZGVudGlmaWVyIHRoYXQgY29udGFpbnMgdGhlIGxldHRlciBPIGJlY2F1c2UgaXQgbWlnaHQgYmUKK2NvbmZ1c2VkIHdpdGggdGhlIGRpZ2l0IDAsIGFuZCBzbyBpcyBub3QgdGhlIGRlZmF1bHQsIGJ1dCBtYXkgYmUKK3VzZWZ1bCBhcyBhIGxvY2FsIGNvZGluZyBjb252ZW50aW9uIGlmIHRoZSBwcm9ncmFtbWluZyBlbnZpcm9ubWVudCAKK2Nhbm5vdCBiZSBmaXhlZCB0byBkaXNwbGF5IHRoZXNlIGNoYXJhY3RlcnMgZGlzdGluY3RseS4KKy5JUCAiXGZCXC1Xbm9cLWRlcHJlY2F0ZWRcZlIiIDQKKy5JWCBJdGVtICItV25vLWRlcHJlY2F0ZWQiCitEbyBub3Qgd2FybiBhYm91dCB1c2FnZSBvZiBkZXByZWNhdGVkIGZlYXR1cmVzLgorLklQICJcZkJcLVdub1wtZGVwcmVjYXRlZFwtZGVjbGFyYXRpb25zXGZSIiA0CisuSVggSXRlbSAiLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKK0RvIG5vdCB3YXJuIGFib3V0IHVzZXMgb2YgZnVuY3Rpb25zLAordmFyaWFibGVzLCBhbmQgdHlwZXMgbWFya2VkIGFzIGRlcHJlY2F0ZWQgYnkgdXNpbmcgdGhlIFxmKENXXCooQ2BkZXByZWNhdGVkXCooQydcZlIKK2F0dHJpYnV0ZS4KKy5JUCAiXGZCXC1Xbm9cLW92ZXJmbG93XGZSIiA0CisuSVggSXRlbSAiLVduby1vdmVyZmxvdyIKK0RvIG5vdCB3YXJuIGFib3V0IGNvbXBpbGUtdGltZSBvdmVyZmxvdyBpbiBjb25zdGFudCBleHByZXNzaW9ucy4KKy5JUCAiXGZCXC1Xb3ZlcnJpZGVcLWluaXRcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVdvdmVycmlkZS1pbml0IChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gaWYgYW4gaW5pdGlhbGl6ZWQgZmllbGQgd2l0aG91dCBzaWRlIGVmZmVjdHMgaXMgb3ZlcnJpZGRlbiB3aGVuCit1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycy4KKy5TcAorVGhpcyB3YXJuaW5nIGlzIGluY2x1ZGVkIGluIFxmQlwtV2V4dHJhXGZSLiAgVG8gZ2V0IG90aGVyCitcJlxmQlwtV2V4dHJhXGZSIHdhcm5pbmdzIHdpdGhvdXQgdGhpcyBvbmUsIHVzZSBcZkJcLVdleHRyYQorXCZcLVdub1wtb3ZlcnJpZGVcLWluaXRcZlIuCisuSVAgIlxmQlwtV3BhY2tlZFxmUiIgNAorLklYIEl0ZW0gIi1XcGFja2VkIgorV2FybiBpZiBhIHN0cnVjdHVyZSBpcyBnaXZlbiB0aGUgcGFja2VkIGF0dHJpYnV0ZSwgYnV0IHRoZSBwYWNrZWQKK2F0dHJpYnV0ZSBoYXMgbm8gZWZmZWN0IG9uIHRoZSBsYXlvdXQgb3Igc2l6ZSBvZiB0aGUgc3RydWN0dXJlLgorU3VjaCBzdHJ1Y3R1cmVzIG1heSBiZSBtaXMtYWxpZ25lZCBmb3IgbGl0dGxlIGJlbmVmaXQuICBGb3IKK2luc3RhbmNlLCBpbiB0aGlzIGNvZGUsIHRoZSB2YXJpYWJsZSBcZihDV1wqKENgZi54XCooQydcZlIgaW4gXGYoQ1dcKihDYHN0cnVjdCBiYXJcKihDJ1xmUgoraXMgbWlzYWxpZ25lZCBldmVuIHRob3VnaCBcZihDV1wqKENgc3RydWN0IGJhclwqKEMnXGZSIGRvZXMgbm90IGl0c2VsZgoraGF2ZSB0aGUgcGFja2VkIGF0dHJpYnV0ZToKKy5TcAorLlZiIDgKK1wmICAgICAgICBzdHJ1Y3QgZm9vIHsKK1wmICAgICAgICAgIGludCB4OworXCYgICAgICAgICAgY2hhciBhLCBiLCBjLCBkOworXCYgICAgICAgIH0gX1x8X2F0dHJpYnV0ZV9cfF8oKHBhY2tlZCkpOworXCYgICAgICAgIHN0cnVjdCBiYXIgeworXCYgICAgICAgICAgY2hhciB6OworXCYgICAgICAgICAgc3RydWN0IGZvbyBmOworXCYgICAgICAgIH07CisuVmUKKy5JUCAiXGZCXC1XcGFja2VkXC1iaXRmaWVsZFwtY29tcGF0XGZSIiA0CisuSVggSXRlbSAiLVdwYWNrZWQtYml0ZmllbGQtY29tcGF0IgorVGhlIDQuMSwgNC4yIGFuZCA0LjMgc2VyaWVzIG9mIFxzLTFHQ0NcczAgaWdub3JlIHRoZSBcZihDV1wqKENgcGFja2VkXCooQydcZlIgYXR0cmlidXRlCitvbiBiaXQtZmllbGRzIG9mIHR5cGUgXGYoQ1dcKihDYGNoYXJcKihDJ1xmUi4gIFRoaXMgaGFzIGJlZW4gZml4ZWQgaW4gXHMtMUdDQ1xzMCA0LjQgYnV0Cit0aGUgY2hhbmdlIGNhbiBsZWFkIHRvIGRpZmZlcmVuY2VzIGluIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0LiAgXHMtMUdDQ1xzMAoraW5mb3JtcyB5b3Ugd2hlbiB0aGUgb2Zmc2V0IG9mIHN1Y2ggYSBmaWVsZCBoYXMgY2hhbmdlZCBpbiBccy0xR0NDXHMwIDQuNC4KK0ZvciBleGFtcGxlIHRoZXJlIGlzIG5vIGxvbmdlciBhIDRcLWJpdCBwYWRkaW5nIGJldHdlZW4gZmllbGQgXGYoQ1dcKihDYGFcKihDJ1xmUgorYW5kIFxmKENXXCooQ2BiXCooQydcZlIgaW4gdGhpcyBzdHJ1Y3R1cmU6CisuU3AKKy5WYiA1CitcJiAgICAgICAgc3RydWN0IGZvbworXCYgICAgICAgIHsKK1wmICAgICAgICAgIGNoYXIgYTo0OworXCYgICAgICAgICAgY2hhciBiOjg7CitcJiAgICAgICAgfSBfXHxfYXR0cmlidXRlX1x8XyAoKHBhY2tlZCkpOworLlZlCisuU3AKK1RoaXMgd2FybmluZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuICBVc2UKK1wmXGZCXC1Xbm9cLXBhY2tlZFwtYml0ZmllbGRcLWNvbXBhdFxmUiB0byBkaXNhYmxlIHRoaXMgd2FybmluZy4KKy5JUCAiXGZCXC1XcGFkZGVkXGZSIiA0CisuSVggSXRlbSAiLVdwYWRkZWQiCitXYXJuIGlmIHBhZGRpbmcgaXMgaW5jbHVkZWQgaW4gYSBzdHJ1Y3R1cmUsIGVpdGhlciB0byBhbGlnbiBhbiBlbGVtZW50CitvZiB0aGUgc3RydWN0dXJlIG9yIHRvIGFsaWduIHRoZSB3aG9sZSBzdHJ1Y3R1cmUuICBTb21ldGltZXMgd2hlbiB0aGlzCitoYXBwZW5zIGl0IGlzIHBvc3NpYmxlIHRvIHJlYXJyYW5nZSB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3R1cmUgdG8KK3JlZHVjZSB0aGUgcGFkZGluZyBhbmQgc28gbWFrZSB0aGUgc3RydWN0dXJlIHNtYWxsZXIuCisuSVAgIlxmQlwtV3JlZHVuZGFudFwtZGVjbHNcZlIiIDQKKy5JWCBJdGVtICItV3JlZHVuZGFudC1kZWNscyIKK1dhcm4gaWYgYW55dGhpbmcgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc2NvcGUsIGV2ZW4gaW4KK2Nhc2VzIHdoZXJlIG11bHRpcGxlIGRlY2xhcmF0aW9uIGlzIHZhbGlkIGFuZCBjaGFuZ2VzIG5vdGhpbmcuCisuSVAgIlxmQlwtV25lc3RlZFwtZXh0ZXJuc1xmUiAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiIDQKKy5JWCBJdGVtICItV25lc3RlZC1leHRlcm5zIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gaWYgYW4gXGYoQ1dcKihDYGV4dGVyblwqKEMnXGZSIGRlY2xhcmF0aW9uIGlzIGVuY291bnRlcmVkIHdpdGhpbiBhIGZ1bmN0aW9uLgorLklQICJcZkJcLVdub1wtaW5oZXJpdGVkXC12YXJpYWRpY1wtY3RvclxmUiIgNAorLklYIEl0ZW0gIi1Xbm8taW5oZXJpdGVkLXZhcmlhZGljLWN0b3IiCitTdXBwcmVzcyB3YXJuaW5ncyBhYm91dCB1c2Ugb2YgXCooQysxMSBpbmhlcml0aW5nIGNvbnN0cnVjdG9ycyB3aGVuIHRoZQorYmFzZSBjbGFzcyBpbmhlcml0ZWQgZnJvbSBoYXMgYSBDIHZhcmlhZGljIGNvbnN0cnVjdG9yOyB0aGUgd2FybmluZyBpcworb24gYnkgZGVmYXVsdCBiZWNhdXNlIHRoZSBlbGxpcHNpcyBpcyBub3QgaW5oZXJpdGVkLgorLklQICJcZkJcLVdpbmxpbmVcZlIiIDQKKy5JWCBJdGVtICItV2lubGluZSIKK1dhcm4gaWYgYSBmdW5jdGlvbiB0aGF0IGlzIGRlY2xhcmVkIGFzIGlubGluZSBjYW5ub3QgYmUgaW5saW5lZC4KK0V2ZW4gd2l0aCB0aGlzIG9wdGlvbiwgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHdhcm4gYWJvdXQgZmFpbHVyZXMgdG8KK2lubGluZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gc3lzdGVtIGhlYWRlcnMuCisuU3AKK1RoZSBjb21waWxlciB1c2VzIGEgdmFyaWV0eSBvZiBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdAordG8gaW5saW5lIGEgZnVuY3Rpb24uICBGb3IgZXhhbXBsZSwgdGhlIGNvbXBpbGVyIHRha2VzIGludG8gYWNjb3VudAordGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uIGJlaW5nIGlubGluZWQgYW5kIHRoZSBhbW91bnQgb2YgaW5saW5pbmcKK3RoYXQgaGFzIGFscmVhZHkgYmVlbiBkb25lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgVGhlcmVmb3JlLAorc2VlbWluZ2x5IGluc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiB0aGUgc291cmNlIHByb2dyYW0gY2FuIGNhdXNlIHRoZQord2FybmluZ3MgcHJvZHVjZWQgYnkgXGZCXC1XaW5saW5lXGZSIHRvIGFwcGVhciBvciBkaXNhcHBlYXIuCisuSVAgIlxmQlwtV25vXC1pbnZhbGlkXC1vZmZzZXRvZlxmUiAoXCooQysgYW5kIE9iamVjdGl2ZVwtXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItV25vLWludmFsaWQtb2Zmc2V0b2YgKCBhbmQgT2JqZWN0aXZlLSBvbmx5KSIKK1N1cHByZXNzIHdhcm5pbmdzIGZyb20gYXBwbHlpbmcgdGhlIFxmQm9mZnNldG9mXGZSIG1hY3JvIHRvIGEgbm9uLVBPRAordHlwZS4gIEFjY29yZGluZyB0byB0aGUgMTk5OCBccy0xSVNPXHMwIFwqKEMrIHN0YW5kYXJkLCBhcHBseWluZyBcZkJvZmZzZXRvZlxmUgordG8gYSBub24tUE9EIHR5cGUgaXMgdW5kZWZpbmVkLiAgSW4gZXhpc3RpbmcgXCooQysgaW1wbGVtZW50YXRpb25zLAoraG93ZXZlciwgXGZCb2Zmc2V0b2ZcZlIgdHlwaWNhbGx5IGdpdmVzIG1lYW5pbmdmdWwgcmVzdWx0cyBldmVuIHdoZW4KK2FwcGxpZWQgdG8gY2VydGFpbiBraW5kcyBvZiBub24tUE9EIHR5cGVzIChzdWNoIGFzIGEgc2ltcGxlCitcJlxmQnN0cnVjdFxmUiB0aGF0IGZhaWxzIHRvIGJlIGEgXHMtMVBPRFxzMCB0eXBlIG9ubHkgYnkgdmlydHVlIG9mIGhhdmluZyBhCitjb25zdHJ1Y3RvcikuICBUaGlzIGZsYWcgaXMgZm9yIHVzZXJzIHdobyBhcmUgYXdhcmUgdGhhdCB0aGV5IGFyZQord3JpdGluZyBub25wb3J0YWJsZSBjb2RlIGFuZCB3aG8gaGF2ZSBkZWxpYmVyYXRlbHkgY2hvc2VuIHRvIGlnbm9yZSB0aGUKK3dhcm5pbmcgYWJvdXQgaXQuCisuU3AKK1RoZSByZXN0cmljdGlvbnMgb24gXGZCb2Zmc2V0b2ZcZlIgbWF5IGJlIHJlbGF4ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbgorb2YgdGhlIFwqKEMrIHN0YW5kYXJkLgorLklQICJcZkJcLVdub1wtaW50XC10b1wtcG9pbnRlclwtY2FzdFxmUiIgNAorLklYIEl0ZW0gIi1Xbm8taW50LXRvLXBvaW50ZXItY2FzdCIKK1N1cHByZXNzIHdhcm5pbmdzIGZyb20gY2FzdHMgdG8gcG9pbnRlciB0eXBlIG9mIGFuIGludGVnZXIgb2YgYQorZGlmZmVyZW50IHNpemUuIEluIFwqKEMrLCBjYXN0aW5nIHRvIGEgcG9pbnRlciB0eXBlIG9mIHNtYWxsZXIgc2l6ZSBpcworYW4gZXJyb3IuIFxmQldpbnQtdG8tcG9pbnRlci1jYXN0XGZSIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1Xbm9cLXBvaW50ZXJcLXRvXC1pbnRcLWNhc3RcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVduby1wb2ludGVyLXRvLWludC1jYXN0IChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1N1cHByZXNzIHdhcm5pbmdzIGZyb20gY2FzdHMgZnJvbSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0eXBlIG9mIGEKK2RpZmZlcmVudCBzaXplLgorLklQICJcZkJcLVdpbnZhbGlkXC1wY2hcZlIiIDQKKy5JWCBJdGVtICItV2ludmFsaWQtcGNoIgorV2FybiBpZiBhIHByZWNvbXBpbGVkIGhlYWRlciBpcyBmb3VuZCBpbgordGhlIHNlYXJjaCBwYXRoIGJ1dCBjYW4ndCBiZSB1c2VkLgorLklQICJcZkJcLVdsb25nXC1sb25nXGZSIiA0CisuSVggSXRlbSAiLVdsb25nLWxvbmciCitXYXJuIGlmIFxmQmxvbmcgbG9uZ1xmUiB0eXBlIGlzIHVzZWQuICBUaGlzIGlzIGVuYWJsZWQgYnkgZWl0aGVyCitcJlxmQlwtV3BlZGFudGljXGZSIG9yIFxmQlwtV3RyYWRpdGlvbmFsXGZSIGluIFxzLTFJU09cczAgQzkwIGFuZCBcKihDKzk4Cittb2Rlcy4gIFRvIGluaGliaXQgdGhlIHdhcm5pbmcgbWVzc2FnZXMsIHVzZSBcZkJcLVdub1wtbG9uZ1wtbG9uZ1xmUi4KKy5JUCAiXGZCXC1XdmFyaWFkaWNcLW1hY3Jvc1xmUiIgNAorLklYIEl0ZW0gIi1XdmFyaWFkaWMtbWFjcm9zIgorV2FybiBpZiB2YXJpYWRpYyBtYWNyb3MgYXJlIHVzZWQgaW4gcGVkYW50aWMgXHMtMUlTT1xzMCBDOTAgbW9kZSwgb3IgdGhlIFxzLTFHTlVcczAKK2FsdGVybmF0ZSBzeW50YXggd2hlbiBpbiBwZWRhbnRpYyBccy0xSVNPXHMwIEM5OSBtb2RlLiAgVGhpcyBpcyBkZWZhdWx0LgorVG8gaW5oaWJpdCB0aGUgd2FybmluZyBtZXNzYWdlcywgdXNlIFxmQlwtV25vXC12YXJpYWRpY1wtbWFjcm9zXGZSLgorLklQICJcZkJcLVd2YXJhcmdzXGZSIiA0CisuSVggSXRlbSAiLVd2YXJhcmdzIgorV2FybiB1cG9uIHF1ZXN0aW9uYWJsZSB1c2FnZSBvZiB0aGUgbWFjcm9zIHVzZWQgdG8gaGFuZGxlIHZhcmlhYmxlCithcmd1bWVudHMgbGlrZSBcZkJ2YV9zdGFydFxmUi4gIFRoaXMgaXMgZGVmYXVsdC4gIFRvIGluaGliaXQgdGhlCit3YXJuaW5nIG1lc3NhZ2VzLCB1c2UgXGZCXC1Xbm9cLXZhcmFyZ3NcZlIuCisuSVAgIlxmQlwtV3ZlY3Rvclwtb3BlcmF0aW9uXC1wZXJmb3JtYW5jZVxmUiIgNAorLklYIEl0ZW0gIi1XdmVjdG9yLW9wZXJhdGlvbi1wZXJmb3JtYW5jZSIKK1dhcm4gaWYgdmVjdG9yIG9wZXJhdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgdmlhIFxzLTFTSU1EXHMwIGNhcGFiaWxpdGllcyBvZiB0aGUKK2FyY2hpdGVjdHVyZS4gIE1haW5seSB1c2VmdWwgZm9yIHRoZSBwZXJmb3JtYW5jZSB0dW5pbmcuCitWZWN0b3Igb3BlcmF0aW9uIGNhbiBiZSBpbXBsZW1lbnRlZCBcZihDV1wqKENgcGllY2V3aXNlXCooQydcZlIsIHdoaWNoIG1lYW5zIHRoYXQgdGhlCitzY2FsYXIgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbiBldmVyeSB2ZWN0b3IgZWxlbWVudDsgCitcJlxmKENXXCooQ2BpbiBwYXJhbGxlbFwqKEMnXGZSLCB3aGljaCBtZWFucyB0aGF0IHRoZSB2ZWN0b3Igb3BlcmF0aW9uIGlzIGltcGxlbWVudGVkCit1c2luZyBzY2FsYXJzIG9mIHdpZGVyIHR5cGUsIHdoaWNoIG5vcm1hbGx5IGlzIG1vcmUgcGVyZm9ybWFuY2UgZWZmaWNpZW50OworYW5kIFxmKENXXCooQ2BhcyBhIHNpbmdsZSBzY2FsYXJcKihDJ1xmUiwgd2hpY2ggbWVhbnMgdGhhdCB2ZWN0b3IgZml0cyBpbnRvIGEKK3NjYWxhciB0eXBlLgorLklQICJcZkJcLVdub1wtdmlydHVhbFwtbW92ZVwtYXNzaWduXGZSIiA0CisuSVggSXRlbSAiLVduby12aXJ0dWFsLW1vdmUtYXNzaWduIgorU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgaW5oZXJpdGluZyBmcm9tIGEgdmlydHVhbCBiYXNlIHdpdGggYQorbm9uLXRyaXZpYWwgXCooQysxMSBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IuICBUaGlzIGlzIGRhbmdlcm91cyBiZWNhdXNlCitpZiB0aGUgdmlydHVhbCBiYXNlIGlzIHJlYWNoYWJsZSBhbG9uZyBtb3JlIHRoYW4gb25lIHBhdGgsIGl0IHdpbGwgYmUKK21vdmVkIG11bHRpcGxlIHRpbWVzLCB3aGljaCBjYW4gbWVhbiBib3RoIG9iamVjdHMgZW5kIHVwIGluIHRoZQorbW92ZWQtZnJvbSBzdGF0ZS4gIElmIHRoZSBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IgaXMgd3JpdHRlbiB0byBhdm9pZAorbW92aW5nIGZyb20gYSBtb3ZlZC1mcm9tIG9iamVjdCwgdGhpcyB3YXJuaW5nIGNhbiBiZSBkaXNhYmxlZC4KKy5JUCAiXGZCXC1XdmxhXGZSIiA0CisuSVggSXRlbSAiLVd2bGEiCitXYXJuIGlmIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBpcyB1c2VkIGluIHRoZSBjb2RlLgorXCZcZkJcLVdub1wtdmxhXGZSIHByZXZlbnRzIHRoZSBcZkJcLVdwZWRhbnRpY1xmUiB3YXJuaW5nIG9mCit0aGUgdmFyaWFibGUgbGVuZ3RoIGFycmF5LgorLklQICJcZkJcLVd2b2xhdGlsZVwtcmVnaXN0ZXJcLXZhclxmUiIgNAorLklYIEl0ZW0gIi1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIgorV2FybiBpZiBhIHJlZ2lzdGVyIHZhcmlhYmxlIGlzIGRlY2xhcmVkIHZvbGF0aWxlLiAgVGhlIHZvbGF0aWxlCittb2RpZmllciBkb2VzIG5vdCBpbmhpYml0IGFsbCBvcHRpbWl6YXRpb25zIHRoYXQgbWF5IGVsaW1pbmF0ZSByZWFkcworYW5kL29yIHdyaXRlcyB0byByZWdpc3RlciB2YXJpYWJsZXMuICBUaGlzIHdhcm5pbmcgaXMgZW5hYmxlZCBieQorXCZcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2Rpc2FibGVkXC1vcHRpbWl6YXRpb25cZlIiIDQKKy5JWCBJdGVtICItV2Rpc2FibGVkLW9wdGltaXphdGlvbiIKK1dhcm4gaWYgYSByZXF1ZXN0ZWQgb3B0aW1pemF0aW9uIHBhc3MgaXMgZGlzYWJsZWQuICBUaGlzIHdhcm5pbmcgZG9lcworbm90IGdlbmVyYWxseSBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIGFueXRoaW5nIHdyb25nIHdpdGggeW91ciBjb2RlOyBpdAorbWVyZWx5IGluZGljYXRlcyB0aGF0IFxzLTFHQ0NcczAncyBvcHRpbWl6ZXJzIGFyZSB1bmFibGUgdG8gaGFuZGxlIHRoZSBjb2RlCitlZmZlY3RpdmVseS4gIE9mdGVuLCB0aGUgcHJvYmxlbSBpcyB0aGF0IHlvdXIgY29kZSBpcyB0b28gYmlnIG9yIHRvbworY29tcGxleDsgXHMtMUdDQ1xzMCByZWZ1c2VzIHRvIG9wdGltaXplIHByb2dyYW1zIHdoZW4gdGhlIG9wdGltaXphdGlvbgoraXRzZWxmIGlzIGxpa2VseSB0byB0YWtlIGlub3JkaW5hdGUgYW1vdW50cyBvZiB0aW1lLgorLklQICJcZkJcLVdwb2ludGVyXC1zaWduXGZSIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIgNAorLklYIEl0ZW0gIi1XcG9pbnRlci1zaWduIChDIGFuZCBPYmplY3RpdmUtQyBvbmx5KSIKK1dhcm4gZm9yIHBvaW50ZXIgYXJndW1lbnQgcGFzc2luZyBvciBhc3NpZ25tZW50IHdpdGggZGlmZmVyZW50IHNpZ25lZG5lc3MuCitUaGlzIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgQyBhbmQgT2JqZWN0aXZlLUMuICBJdCBpcyBpbXBsaWVkIGJ5CitcJlxmQlwtV2FsbFxmUiBhbmQgYnkgXGZCXC1XcGVkYW50aWNcZlIsIHdoaWNoIGNhbiBiZSBkaXNhYmxlZCB3aXRoCitcJlxmQlwtV25vXC1wb2ludGVyXC1zaWduXGZSLgorLklQICJcZkJcLVdzdGFja1wtcHJvdGVjdG9yXGZSIiA0CisuSVggSXRlbSAiLVdzdGFjay1wcm90ZWN0b3IiCitUaGlzIG9wdGlvbiBpcyBvbmx5IGFjdGl2ZSB3aGVuIFxmQlwtZnN0YWNrXC1wcm90ZWN0b3JcZlIgaXMgYWN0aXZlLiAgSXQKK3dhcm5zIGFib3V0IGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgcHJvdGVjdGVkIGFnYWluc3Qgc3RhY2sgc21hc2hpbmcuCisuSVAgIlxmQlwtV25vXC1tdWRmbGFwXGZSIiA0CisuSVggSXRlbSAiLVduby1tdWRmbGFwIgorU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RydWN0cyB0aGF0IGNhbm5vdCBiZSBpbnN0cnVtZW50ZWQgYnkKK1wmXGZCXC1mbXVkZmxhcFxmUi4KKy5JUCAiXGZCXC1Xb3Zlcmxlbmd0aFwtc3RyaW5nc1xmUiIgNAorLklYIEl0ZW0gIi1Xb3Zlcmxlbmd0aC1zdHJpbmdzIgorV2FybiBhYm91dCBzdHJpbmcgY29uc3RhbnRzIHRoYXQgYXJlIGxvbmdlciB0aGFuIHRoZSBcKihMIm1pbmltdW0KK21heGltdW1cKihSIiBsZW5ndGggc3BlY2lmaWVkIGluIHRoZSBDIHN0YW5kYXJkLiAgTW9kZXJuIGNvbXBpbGVycworZ2VuZXJhbGx5IGFsbG93IHN0cmluZyBjb25zdGFudHMgdGhhdCBhcmUgbXVjaCBsb25nZXIgdGhhbiB0aGUKK3N0YW5kYXJkJ3MgbWluaW11bSBsaW1pdCwgYnV0IHZlcnkgcG9ydGFibGUgcHJvZ3JhbXMgc2hvdWxkIGF2b2lkCit1c2luZyBsb25nZXIgc3RyaW5ncy4KKy5TcAorVGhlIGxpbWl0IGFwcGxpZXMgXGZJYWZ0ZXJcZlIgc3RyaW5nIGNvbnN0YW50IGNvbmNhdGVuYXRpb24sIGFuZCBkb2VzCitub3QgY291bnQgdGhlIHRyYWlsaW5nIFxzLTFOVUxcczAuICBJbiBDOTAsIHRoZSBsaW1pdCB3YXMgNTA5IGNoYXJhY3RlcnM7IGluCitDOTksIGl0IHdhcyByYWlzZWQgdG8gNDA5NS4gIFwqKEMrOTggZG9lcyBub3Qgc3BlY2lmeSBhIG5vcm1hdGl2ZQorbWluaW11bSBtYXhpbXVtLCBzbyB3ZSBkbyBub3QgZGlhZ25vc2Ugb3Zlcmxlbmd0aCBzdHJpbmdzIGluIFwqKEMrLgorLlNwCitUaGlzIG9wdGlvbiBpcyBpbXBsaWVkIGJ5IFxmQlwtV3BlZGFudGljXGZSLCBhbmQgY2FuIGJlIGRpc2FibGVkIHdpdGgKK1wmXGZCXC1Xbm9cLW92ZXJsZW5ndGhcLXN0cmluZ3NcZlIuCisuSVAgIlxmQlwtV3Vuc3VmZml4ZWRcLWZsb2F0XC1jb25zdGFudHNcZlIgKEMgYW5kIE9iamVjdGl2ZS1DIG9ubHkpIiA0CisuSVggSXRlbSAiLVd1bnN1ZmZpeGVkLWZsb2F0LWNvbnN0YW50cyAoQyBhbmQgT2JqZWN0aXZlLUMgb25seSkiCitJc3N1ZSBhIHdhcm5pbmcgZm9yIGFueSBmbG9hdGluZyBjb25zdGFudCB0aGF0IGRvZXMgbm90IGhhdmUKK2Egc3VmZml4LiAgV2hlbiB1c2VkIHRvZ2V0aGVyIHdpdGggXGZCXC1Xc3lzdGVtXC1oZWFkZXJzXGZSIGl0Cit3YXJucyBhYm91dCBzdWNoIGNvbnN0YW50cyBpbiBzeXN0ZW0gaGVhZGVyIGZpbGVzLiAgVGhpcyBjYW4gYmUgdXNlZnVsCit3aGVuIHByZXBhcmluZyBjb2RlIHRvIHVzZSB3aXRoIHRoZSBcZihDV1wqKENgRkxPQVRfQ09OU1RfREVDSU1BTDY0XCooQydcZlIgcHJhZ21hCitmcm9tIHRoZSBkZWNpbWFsIGZsb2F0aW5nLXBvaW50IGV4dGVuc2lvbiB0byBDOTkuCisuU1MgIk9wdGlvbnMgZm9yIERlYnVnZ2luZyBZb3VyIFByb2dyYW0gb3IgXHMtMUdDQ1xzMCIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIGZvciBEZWJ1Z2dpbmcgWW91ciBQcm9ncmFtIG9yIEdDQyIKK1wmXHMtMUdDQ1xzMCBoYXMgdmFyaW91cyBzcGVjaWFsIG9wdGlvbnMgdGhhdCBhcmUgdXNlZCBmb3IgZGVidWdnaW5nCitlaXRoZXIgeW91ciBwcm9ncmFtIG9yIFxzLTFHQ0M6XHMwCisuSVAgIlxmQlwtZ1xmUiIgNAorLklYIEl0ZW0gIi1nIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYXRpdmUgZm9ybWF0Cisoc3RhYnMsIFxzLTFDT0ZGXHMwLCBccy0xWENPRkZcczAsIG9yIFxzLTFEV0FSRlxzMCAyKS4gIFxzLTFHREJcczAgY2FuIHdvcmsgd2l0aCB0aGlzIGRlYnVnZ2luZworaW5mb3JtYXRpb24uCisuU3AKK09uIG1vc3Qgc3lzdGVtcyB0aGF0IHVzZSBzdGFicyBmb3JtYXQsIFxmQlwtZ1xmUiBlbmFibGVzIHVzZSBvZiBleHRyYQorZGVidWdnaW5nIGluZm9ybWF0aW9uIHRoYXQgb25seSBccy0xR0RCXHMwIGNhbiB1c2U7IHRoaXMgZXh0cmEgaW5mb3JtYXRpb24KK21ha2VzIGRlYnVnZ2luZyB3b3JrIGJldHRlciBpbiBccy0xR0RCXHMwIGJ1dCBwcm9iYWJseSBtYWtlcyBvdGhlciBkZWJ1Z2dlcnMKK2NyYXNoIG9yCityZWZ1c2UgdG8gcmVhZCB0aGUgcHJvZ3JhbS4gIElmIHlvdSB3YW50IHRvIGNvbnRyb2wgZm9yIGNlcnRhaW4gd2hldGhlcgordG8gZ2VuZXJhdGUgdGhlIGV4dHJhIGluZm9ybWF0aW9uLCB1c2UgXGZCXC1nc3RhYnMrXGZSLCBcZkJcLWdzdGFic1xmUiwKK1wmXGZCXC1neGNvZmYrXGZSLCBcZkJcLWd4Y29mZlxmUiwgb3IgXGZCXC1ndm1zXGZSIChzZWUgYmVsb3cpLgorLlNwCitcJlxzLTFHQ0NcczAgYWxsb3dzIHlvdSB0byB1c2UgXGZCXC1nXGZSIHdpdGgKK1wmXGZCXC1PXGZSLiAgVGhlIHNob3J0Y3V0cyB0YWtlbiBieSBvcHRpbWl6ZWQgY29kZSBtYXkgb2NjYXNpb25hbGx5Citwcm9kdWNlIHN1cnByaXNpbmcgcmVzdWx0czogc29tZSB2YXJpYWJsZXMgeW91IGRlY2xhcmVkIG1heSBub3QgZXhpc3QKK2F0IGFsbDsgZmxvdyBvZiBjb250cm9sIG1heSBicmllZmx5IG1vdmUgd2hlcmUgeW91IGRpZCBub3QgZXhwZWN0IGl0Oworc29tZSBzdGF0ZW1lbnRzIG1heSBub3QgYmUgZXhlY3V0ZWQgYmVjYXVzZSB0aGV5IGNvbXB1dGUgY29uc3RhbnQKK3Jlc3VsdHMgb3IgdGhlaXIgdmFsdWVzIGFyZSBhbHJlYWR5IGF0IGhhbmQ7IHNvbWUgc3RhdGVtZW50cyBtYXkKK2V4ZWN1dGUgaW4gZGlmZmVyZW50IHBsYWNlcyBiZWNhdXNlIHRoZXkgaGF2ZSBiZWVuIG1vdmVkIG91dCBvZiBsb29wcy4KKy5TcAorTmV2ZXJ0aGVsZXNzIGl0IHByb3ZlcyBwb3NzaWJsZSB0byBkZWJ1ZyBvcHRpbWl6ZWQgb3V0cHV0LiAgVGhpcyBtYWtlcworaXQgcmVhc29uYWJsZSB0byB1c2UgdGhlIG9wdGltaXplciBmb3IgcHJvZ3JhbXMgdGhhdCBtaWdodCBoYXZlIGJ1Z3MuCisuU3AKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgdXNlZnVsIHdoZW4gXHMtMUdDQ1xzMCBpcyBnZW5lcmF0ZWQgd2l0aCB0aGUKK2NhcGFiaWxpdHkgZm9yIG1vcmUgdGhhbiBvbmUgZGVidWdnaW5nIGZvcm1hdC4KKy5JUCAiXGZCXC1nc3BsaXRcLWR3YXJmXGZSIiA0CisuSVggSXRlbSAiLWdzcGxpdC1kd2FyZiIKK1NlcGFyYXRlIGFzIG11Y2ggZHdhcmYgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlIGludG8gYQorc2VwYXJhdGUgb3V0cHV0IGZpbGUgd2l0aCB0aGUgZXh0ZW5zaW9uIC5kd28uICBUaGlzIG9wdGlvbiBhbGxvd3MKK3RoZSBidWlsZCBzeXN0ZW0gdG8gYXZvaWQgbGlua2luZyBmaWxlcyB3aXRoIGRlYnVnIGluZm9ybWF0aW9uLiAgVG8KK2JlIHVzZWZ1bCwgdGhpcyBvcHRpb24gcmVxdWlyZXMgYSBkZWJ1Z2dlciBjYXBhYmxlIG9mIHJlYWRpbmcgLmR3bworZmlsZXMuCisuSVAgIlxmQlwtZ2dkYlxmUiIgNAorLklYIEl0ZW0gIi1nZ2RiIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIHVzZSBieSBccy0xR0RCXHMwLiAgVGhpcyBtZWFucyB0byB1c2UgdGhlCittb3N0IGV4cHJlc3NpdmUgZm9ybWF0IGF2YWlsYWJsZSAoXHMtMURXQVJGXHMwIDIsIHN0YWJzLCBvciB0aGUgbmF0aXZlIGZvcm1hdAoraWYgbmVpdGhlciBvZiB0aG9zZSBhcmUgc3VwcG9ydGVkKSwgaW5jbHVkaW5nIFxzLTFHREJcczAgZXh0ZW5zaW9ucyBpZiBhdCBhbGwKK3Bvc3NpYmxlLgorLklQICJcZkJcLWdwdWJuYW1lc1xmUiIgNAorLklYIEl0ZW0gIi1ncHVibmFtZXMiCitHZW5lcmF0ZSBkd2FyZiAuZGVidWdfcHVibmFtZXMgYW5kIC5kZWJ1Z19wdWJ0eXBlcyBzZWN0aW9ucy4KKy5JUCAiXGZCXC1nc3RhYnNcZlIiIDQKKy5JWCBJdGVtICItZ3N0YWJzIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gc3RhYnMgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCksCit3aXRob3V0IFxzLTFHREJcczAgZXh0ZW5zaW9ucy4gIFRoaXMgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IFxzLTFEQlhcczAgb24gbW9zdCBccy0xQlNEXHMwCitzeXN0ZW1zLiAgT24gXHMtMU1JUFNcczAsIEFscGhhIGFuZCBTeXN0ZW0gViBSZWxlYXNlIDQgc3lzdGVtcyB0aGlzIG9wdGlvbgorcHJvZHVjZXMgc3RhYnMgZGVidWdnaW5nIG91dHB1dCB0aGF0IGlzIG5vdCB1bmRlcnN0b29kIGJ5IFxzLTFEQlhcczAgb3IgXHMtMVNEQlxzMC4KK09uIFN5c3RlbSBWIFJlbGVhc2UgNCBzeXN0ZW1zIHRoaXMgb3B0aW9uIHJlcXVpcmVzIHRoZSBccy0xR05VXHMwIGFzc2VtYmxlci4KKy5JUCAiXGZCXC1mZWxpbWluYXRlXC11bnVzZWRcLWRlYnVnXC1zeW1ib2xzXGZSIiA0CisuSVggSXRlbSAiLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXN5bWJvbHMiCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBzdGFicyBmb3JtYXQgKGlmIHRoYXQgaXMgc3VwcG9ydGVkKSwKK2ZvciBvbmx5IHN5bWJvbHMgdGhhdCBhcmUgYWN0dWFsbHkgdXNlZC4KKy5JUCAiXGZCXC1mZW1pdFwtY2xhc3NcLWRlYnVnXC1hbHdheXNcZlIiIDQKKy5JWCBJdGVtICItZmVtaXQtY2xhc3MtZGVidWctYWx3YXlzIgorSW5zdGVhZCBvZiBlbWl0dGluZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGEgXCooQysgY2xhc3MgaW4gb25seSBvbmUKK29iamVjdCBmaWxlLCBlbWl0IGl0IGluIGFsbCBvYmplY3QgZmlsZXMgdXNpbmcgdGhlIGNsYXNzLiAgVGhpcyBvcHRpb24KK3Nob3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBkZWJ1Z2dlcnMgdGhhdCBhcmUgdW5hYmxlIHRvIGhhbmRsZSB0aGUgd2F5IFxzLTFHQ0NcczAKK25vcm1hbGx5IGVtaXRzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgY2xhc3NlcyBiZWNhdXNlIHVzaW5nIHRoaXMKK29wdGlvbiBpbmNyZWFzZXMgdGhlIHNpemUgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uIGJ5IGFzIG11Y2ggYXMgYQorZmFjdG9yIG9mIHR3by4KKy5JUCAiXGZCXC1mZGVidWdcLXR5cGVzXC1zZWN0aW9uXGZSIiA0CisuSVggSXRlbSAiLWZkZWJ1Zy10eXBlcy1zZWN0aW9uIgorV2hlbiB1c2luZyBccy0xRFdBUkZcczAgVmVyc2lvbiA0IG9yIGhpZ2hlciwgdHlwZSBESUVzIGNhbiBiZSBwdXQgaW50bwordGhlaXIgb3duIFxmKENXXCooQ2AuZGVidWdfdHlwZXNcKihDJ1xmUiBzZWN0aW9uIGluc3RlYWQgb2YgbWFraW5nIHRoZW0gcGFydCBvZiB0aGUKK1wmXGYoQ1dcKihDYC5kZWJ1Z19pbmZvXCooQydcZlIgc2VjdGlvbi4gIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHB1dCB0aGVtIGluIGEgc2VwYXJhdGUKK2NvbWRhdCBzZWN0aW9ucyBzaW5jZSB0aGUgbGlua2VyIGNhbiB0aGVuIHJlbW92ZSBkdXBsaWNhdGVzLgorQnV0IG5vdCBhbGwgXHMtMURXQVJGXHMwIGNvbnN1bWVycyBzdXBwb3J0IFxmKENXXCooQ2AuZGVidWdfdHlwZXNcKihDJ1xmUiBzZWN0aW9ucyB5ZXQKK2FuZCBvbiBzb21lIG9iamVjdHMgXGYoQ1dcKihDYC5kZWJ1Z190eXBlc1wqKEMnXGZSIHByb2R1Y2VzIGxhcmdlciBpbnN0ZWFkIG9mIHNtYWxsZXIKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKy5JUCAiXGZCXC1nc3RhYnMrXGZSIiA0CisuSVggSXRlbSAiLWdzdGFicysiCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBzdGFicyBmb3JtYXQgKGlmIHRoYXQgaXMgc3VwcG9ydGVkKSwKK3VzaW5nIFxzLTFHTlVcczAgZXh0ZW5zaW9ucyB1bmRlcnN0b29kIG9ubHkgYnkgdGhlIFxzLTFHTlVcczAgZGVidWdnZXIgKFxzLTFHREJcczApLiAgVGhlCit1c2Ugb2YgdGhlc2UgZXh0ZW5zaW9ucyBpcyBsaWtlbHkgdG8gbWFrZSBvdGhlciBkZWJ1Z2dlcnMgY3Jhc2ggb3IKK3JlZnVzZSB0byByZWFkIHRoZSBwcm9ncmFtLgorLklQICJcZkJcLWdjb2ZmXGZSIiA0CisuSVggSXRlbSAiLWdjb2ZmIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gXHMtMUNPRkZcczAgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCkuCitUaGlzIGlzIHRoZSBmb3JtYXQgdXNlZCBieSBccy0xU0RCXHMwIG9uIG1vc3QgU3lzdGVtIFYgc3lzdGVtcyBwcmlvciB0bworU3lzdGVtIFYgUmVsZWFzZSA0LgorLklQICJcZkJcLWd4Y29mZlxmUiIgNAorLklYIEl0ZW0gIi1neGNvZmYiCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBccy0xWENPRkZcczAgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCkuCitUaGlzIGlzIHRoZSBmb3JtYXQgdXNlZCBieSB0aGUgXHMtMURCWFxzMCBkZWJ1Z2dlciBvbiBccy0xSUJNXHMwIFxzLTFSUy82MDAwXHMwIHN5c3RlbXMuCisuSVAgIlxmQlwtZ3hjb2ZmK1xmUiIgNAorLklYIEl0ZW0gIi1neGNvZmYrIgorUHJvZHVjZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gXHMtMVhDT0ZGXHMwIGZvcm1hdCAoaWYgdGhhdCBpcyBzdXBwb3J0ZWQpLAordXNpbmcgXHMtMUdOVVxzMCBleHRlbnNpb25zIHVuZGVyc3Rvb2Qgb25seSBieSB0aGUgXHMtMUdOVVxzMCBkZWJ1Z2dlciAoXHMtMUdEQlxzMCkuICBUaGUKK3VzZSBvZiB0aGVzZSBleHRlbnNpb25zIGlzIGxpa2VseSB0byBtYWtlIG90aGVyIGRlYnVnZ2VycyBjcmFzaCBvcgorcmVmdXNlIHRvIHJlYWQgdGhlIHByb2dyYW0sIGFuZCBtYXkgY2F1c2UgYXNzZW1ibGVycyBvdGhlciB0aGFuIHRoZSBccy0xR05VXHMwCithc3NlbWJsZXIgKFxzLTFHQVNcczApIHRvIGZhaWwgd2l0aCBhbiBlcnJvci4KKy5JUCAiXGZCXC1nZHdhcmZcLVxmUlxmSXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItZ2R3YXJmLXZlcnNpb24iCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBccy0xRFdBUkZcczAgZm9ybWF0IChpZiB0aGF0IGlzIHN1cHBvcnRlZCkuCitUaGUgdmFsdWUgb2YgXGZJdmVyc2lvblxmUiBtYXkgYmUgZWl0aGVyIDIsIDMgb3IgNDsgdGhlIGRlZmF1bHQgdmVyc2lvbgorZm9yIG1vc3QgdGFyZ2V0cyBpcyA0LgorLlNwCitOb3RlIHRoYXQgd2l0aCBccy0xRFdBUkZcczAgVmVyc2lvbiAyLCBzb21lIHBvcnRzIHJlcXVpcmUgYW5kIGFsd2F5cwordXNlIHNvbWUgbm9uLWNvbmZsaWN0aW5nIFxzLTFEV0FSRlxzMCAzIGV4dGVuc2lvbnMgaW4gdGhlIHVud2luZCB0YWJsZXMuCisuU3AKK1ZlcnNpb24gNCBtYXkgcmVxdWlyZSBccy0xR0RCXHMwIDcuMCBhbmQgXGZCXC1mdmFyXC10cmFja2luZ1wtYXNzaWdubWVudHNcZlIKK2ZvciBtYXhpbXVtIGJlbmVmaXQuCisuSVAgIlxmQlwtZ3JlY29yZFwtZ2NjXC1zd2l0Y2hlc1xmUiIgNAorLklYIEl0ZW0gIi1ncmVjb3JkLWdjYy1zd2l0Y2hlcyIKK1RoaXMgc3dpdGNoIGNhdXNlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgdXNlZCB0byBpbnZva2UgdGhlCitjb21waWxlciB0aGF0IG1heSBhZmZlY3QgY29kZSBnZW5lcmF0aW9uIHRvIGJlIGFwcGVuZGVkIHRvIHRoZQorRFdfQVRfcHJvZHVjZXIgYXR0cmlidXRlIGluIFxzLTFEV0FSRlxzMCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBUaGUgb3B0aW9ucworYXJlIGNvbmNhdGVuYXRlZCB3aXRoIHNwYWNlcyBzZXBhcmF0aW5nIHRoZW0gZnJvbSBlYWNoIG90aGVyIGFuZCBmcm9tCit0aGUgY29tcGlsZXIgdmVyc2lvbi4gIFNlZSBhbHNvIFxmQlwtZnJlY29yZFwtZ2NjXC1zd2l0Y2hlc1xmUiBmb3IgYW5vdGhlcgord2F5IG9mIHN0b3JpbmcgY29tcGlsZXIgb3B0aW9ucyBpbnRvIHRoZSBvYmplY3QgZmlsZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtZ25vXC1yZWNvcmRcLWdjY1wtc3dpdGNoZXNcZlIiIDQKKy5JWCBJdGVtICItZ25vLXJlY29yZC1nY2Mtc3dpdGNoZXMiCitEaXNhbGxvdyBhcHBlbmRpbmcgY29tbWFuZC1saW5lIG9wdGlvbnMgdG8gdGhlIERXX0FUX3Byb2R1Y2VyIGF0dHJpYnV0ZQoraW4gXHMtMURXQVJGXHMwIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKy5JUCAiXGZCXC1nc3RyaWN0XC1kd2FyZlxmUiIgNAorLklYIEl0ZW0gIi1nc3RyaWN0LWR3YXJmIgorRGlzYWxsb3cgdXNpbmcgZXh0ZW5zaW9ucyBvZiBsYXRlciBccy0xRFdBUkZcczAgc3RhbmRhcmQgdmVyc2lvbiB0aGFuIHNlbGVjdGVkCit3aXRoIFxmQlwtZ2R3YXJmXC1cZlJcZkl2ZXJzaW9uXGZSLiAgT24gbW9zdCB0YXJnZXRzIHVzaW5nIG5vbi1jb25mbGljdGluZworXCZccy0xRFdBUkZcczAgZXh0ZW5zaW9ucyBmcm9tIGxhdGVyIHN0YW5kYXJkIHZlcnNpb25zIGlzIGFsbG93ZWQuCisuSVAgIlxmQlwtZ25vXC1zdHJpY3RcLWR3YXJmXGZSIiA0CisuSVggSXRlbSAiLWduby1zdHJpY3QtZHdhcmYiCitBbGxvdyB1c2luZyBleHRlbnNpb25zIG9mIGxhdGVyIFxzLTFEV0FSRlxzMCBzdGFuZGFyZCB2ZXJzaW9uIHRoYW4gc2VsZWN0ZWQgd2l0aAorXCZcZkJcLWdkd2FyZlwtXGZSXGZJdmVyc2lvblxmUi4KKy5JUCAiXGZCXC1ndm1zXGZSIiA0CisuSVggSXRlbSAiLWd2bXMiCitQcm9kdWNlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBBbHBoYS9WTVMgZGVidWcgZm9ybWF0IChpZiB0aGF0IGlzCitzdXBwb3J0ZWQpLiAgVGhpcyBpcyB0aGUgZm9ybWF0IHVzZWQgYnkgXHMtMURFQlVHXHMwIG9uIEFscGhhL1ZNUyBzeXN0ZW1zLgorLklQICJcZkJcLWdcZlJcZklsZXZlbFxmUiIgNAorLklYIEl0ZW0gIi1nbGV2ZWwiCisuUEQgMAorLklQICJcZkJcLWdnZGJcZlJcZklsZXZlbFxmUiIgNAorLklYIEl0ZW0gIi1nZ2RibGV2ZWwiCisuSVAgIlxmQlwtZ3N0YWJzXGZSXGZJbGV2ZWxcZlIiIDQKKy5JWCBJdGVtICItZ3N0YWJzbGV2ZWwiCisuSVAgIlxmQlwtZ2NvZmZcZlJcZklsZXZlbFxmUiIgNAorLklYIEl0ZW0gIi1nY29mZmxldmVsIgorLklQICJcZkJcLWd4Y29mZlxmUlxmSWxldmVsXGZSIiA0CisuSVggSXRlbSAiLWd4Y29mZmxldmVsIgorLklQICJcZkJcLWd2bXNcZlJcZklsZXZlbFxmUiIgNAorLklYIEl0ZW0gIi1ndm1zbGV2ZWwiCisuUEQKK1JlcXVlc3QgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCBhbHNvIHVzZSBcZklsZXZlbFxmUiB0byBzcGVjaWZ5IGhvdworbXVjaCBpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IGxldmVsIGlzIDIuCisuU3AKK0xldmVsIDAgcHJvZHVjZXMgbm8gZGVidWcgaW5mb3JtYXRpb24gYXQgYWxsLiAgVGh1cywgXGZCXC1nMFxmUiBuZWdhdGVzCitcJlxmQlwtZ1xmUi4KKy5TcAorTGV2ZWwgMSBwcm9kdWNlcyBtaW5pbWFsIGluZm9ybWF0aW9uLCBlbm91Z2ggZm9yIG1ha2luZyBiYWNrdHJhY2VzIGluCitwYXJ0cyBvZiB0aGUgcHJvZ3JhbSB0aGF0IHlvdSBkb24ndCBwbGFuIHRvIGRlYnVnLiAgVGhpcyBpbmNsdWRlcworZGVzY3JpcHRpb25zIG9mIGZ1bmN0aW9ucyBhbmQgZXh0ZXJuYWwgdmFyaWFibGVzLCBidXQgbm8gaW5mb3JtYXRpb24KK2Fib3V0IGxvY2FsIHZhcmlhYmxlcyBhbmQgbm8gbGluZSBudW1iZXJzLgorLlNwCitMZXZlbCAzIGluY2x1ZGVzIGV4dHJhIGluZm9ybWF0aW9uLCBzdWNoIGFzIGFsbCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMKK3ByZXNlbnQgaW4gdGhlIHByb2dyYW0uICBTb21lIGRlYnVnZ2VycyBzdXBwb3J0IG1hY3JvIGV4cGFuc2lvbiB3aGVuCit5b3UgdXNlIFxmQlwtZzNcZlIuCisuU3AKK1wmXGZCXC1nZHdhcmZcLTJcZlIgZG9lcyBub3QgYWNjZXB0IGEgY29uY2F0ZW5hdGVkIGRlYnVnIGxldmVsLCBiZWNhdXNlCitcJlxzLTFHQ0NcczAgdXNlZCB0byBzdXBwb3J0IGFuIG9wdGlvbiBcZkJcLWdkd2FyZlxmUiB0aGF0IG1lYW50IHRvIGdlbmVyYXRlCitkZWJ1ZyBpbmZvcm1hdGlvbiBpbiB2ZXJzaW9uIDEgb2YgdGhlIFxzLTFEV0FSRlxzMCBmb3JtYXQgKHdoaWNoIGlzIHZlcnkKK2RpZmZlcmVudCBmcm9tIHZlcnNpb24gMiksIGFuZCBpdCB3b3VsZCBoYXZlIGJlZW4gdG9vIGNvbmZ1c2luZy4gIFRoYXQKK2RlYnVnIGZvcm1hdCBpcyBsb25nIG9ic29sZXRlLCBidXQgdGhlIG9wdGlvbiBjYW5ub3QgYmUgY2hhbmdlZCBub3cuCitJbnN0ZWFkIHVzZSBhbiBhZGRpdGlvbmFsIFxmQlwtZ1xmUlxmSWxldmVsXGZSIG9wdGlvbiB0byBjaGFuZ2UgdGhlCitkZWJ1ZyBsZXZlbCBmb3IgXHMtMURXQVJGXHMwLgorLklQICJcZkJcLWd0b2dnbGVcZlIiIDQKKy5JWCBJdGVtICItZ3RvZ2dsZSIKK1R1cm4gb2ZmIGdlbmVyYXRpb24gb2YgZGVidWcgaW5mbywgaWYgbGVhdmluZyBvdXQgdGhpcyBvcHRpb24KK2dlbmVyYXRlcyBpdCwgb3IgdHVybiBpdCBvbiBhdCBsZXZlbCAyIG90aGVyd2lzZS4gIFRoZSBwb3NpdGlvbiBvZiB0aGlzCithcmd1bWVudCBpbiB0aGUgY29tbWFuZCBsaW5lIGRvZXMgbm90IG1hdHRlcjsgaXQgdGFrZXMgZWZmZWN0IGFmdGVyIGFsbAorb3RoZXIgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkLCBhbmQgaXQgZG9lcyBzbyBvbmx5IG9uY2UsIG5vIG1hdHRlciBob3cKK21hbnkgdGltZXMgaXQgaXMgZ2l2ZW4uICBUaGlzIGlzIG1haW5seSBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGgKK1wmXGZCXC1mY29tcGFyZVwtZGVidWdcZlIuCisuSVAgIlxmQlwtZnNhbml0aXplPWFkZHJlc3NcZlIiIDQKKy5JWCBJdGVtICItZnNhbml0aXplPWFkZHJlc3MiCitFbmFibGUgQWRkcmVzc1Nhbml0aXplciwgYSBmYXN0IG1lbW9yeSBlcnJvciBkZXRlY3Rvci4KK01lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHRvIGRldGVjdAorb3V0LW9mLWJvdW5kcyBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncy4KK1NlZSA8XGZCaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FkZHJlc3NcLXNhbml0aXplci9cZlI+IGZvciBtb3JlIGRldGFpbHMuCisuSVAgIlxmQlwtZnNhbml0aXplPXRocmVhZFxmUiIgNAorLklYIEl0ZW0gIi1mc2FuaXRpemU9dGhyZWFkIgorRW5hYmxlIFRocmVhZFNhbml0aXplciwgYSBmYXN0IGRhdGEgcmFjZSBkZXRlY3Rvci4KK01lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgaW5zdHJ1bWVudGVkIHRvIGRldGVjdAorZGF0YSByYWNlIGJ1Z3MuCitTZWUgPFxmQmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9kYXRhXC1yYWNlXC10ZXN0L3dpa2kvVGhyZWFkU2FuaXRpemVyXGZSPiBmb3IgbW9yZSBkZXRhaWxzLgorLklQICJcZkJcLWZkdW1wXC1maW5hbFwtaW5zbnNcZlJbXGZCPVxmUlxmSWZpbGVcZlJdIiA0CisuSVggSXRlbSAiLWZkdW1wLWZpbmFsLWluc25zWz1maWxlXSIKK0R1bXAgdGhlIGZpbmFsIGludGVybmFsIHJlcHJlc2VudGF0aW9uIChccy0xUlRMXHMwKSB0byBcZklmaWxlXGZSLiAgSWYgdGhlCitvcHRpb25hbCBhcmd1bWVudCBpcyBvbWl0dGVkIChvciBpZiBcZklmaWxlXGZSIGlzIFxmKENXXCooQ2AuXCooQydcZlIpLCB0aGUgbmFtZQorb2YgdGhlIGR1bXAgZmlsZSBpcyBkZXRlcm1pbmVkIGJ5IGFwcGVuZGluZyBcZihDV1wqKENgLmdrZFwqKEMnXGZSIHRvIHRoZQorY29tcGlsYXRpb24gb3V0cHV0IGZpbGUgbmFtZS4KKy5JUCAiXGZCXC1mY29tcGFyZVwtZGVidWdcZlJbXGZCPVxmUlxmSW9wdHNcZlJdIiA0CisuSVggSXRlbSAiLWZjb21wYXJlLWRlYnVnWz1vcHRzXSIKK0lmIG5vIGVycm9yIG9jY3VycyBkdXJpbmcgY29tcGlsYXRpb24sIHJ1biB0aGUgY29tcGlsZXIgYSBzZWNvbmQgdGltZSwKK2FkZGluZyBcZklvcHRzXGZSIGFuZCBcZkJcLWZjb21wYXJlXC1kZWJ1Z1wtc2Vjb25kXGZSIHRvIHRoZSBhcmd1bWVudHMKK3Bhc3NlZCB0byB0aGUgc2Vjb25kIGNvbXBpbGF0aW9uLiAgRHVtcCB0aGUgZmluYWwgaW50ZXJuYWwKK3JlcHJlc2VudGF0aW9uIGluIGJvdGggY29tcGlsYXRpb25zLCBhbmQgcHJpbnQgYW4gZXJyb3IgaWYgdGhleSBkaWZmZXIuCisuU3AKK0lmIHRoZSBlcXVhbCBzaWduIGlzIG9taXR0ZWQsIHRoZSBkZWZhdWx0IFxmQlwtZ3RvZ2dsZVxmUiBpcyB1c2VkLgorLlNwCitUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgXGZCXHMtMUdDQ19DT01QQVJFX0RFQlVHXHMwXGZSLCBpZiBkZWZpbmVkLCBub24tZW1wdHkKK2FuZCBub256ZXJvLCBpbXBsaWNpdGx5IGVuYWJsZXMgXGZCXC1mY29tcGFyZVwtZGVidWdcZlIuICBJZgorXCZcZkJccy0xR0NDX0NPTVBBUkVfREVCVUdcczBcZlIgaXMgZGVmaW5lZCB0byBhIHN0cmluZyBzdGFydGluZyB3aXRoIGEgZGFzaCwKK3RoZW4gaXQgaXMgdXNlZCBmb3IgXGZJb3B0c1xmUiwgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IFxmQlwtZ3RvZ2dsZVxmUgoraXMgdXNlZC4KKy5TcAorXCZcZkJcLWZjb21wYXJlXC1kZWJ1Zz1cZlIsIHdpdGggdGhlIGVxdWFsIHNpZ24gYnV0IHdpdGhvdXQgXGZJb3B0c1xmUiwKK2lzIGVxdWl2YWxlbnQgdG8gXGZCXC1mbm9cLWNvbXBhcmVcLWRlYnVnXGZSLCB3aGljaCBkaXNhYmxlcyB0aGUgZHVtcGluZworb2YgdGhlIGZpbmFsIHJlcHJlc2VudGF0aW9uIGFuZCB0aGUgc2Vjb25kIGNvbXBpbGF0aW9uLCBwcmV2ZW50aW5nIGV2ZW4KK1wmXGZCXHMtMUdDQ19DT01QQVJFX0RFQlVHXHMwXGZSIGZyb20gdGFraW5nIGVmZmVjdC4KKy5TcAorVG8gdmVyaWZ5IGZ1bGwgY292ZXJhZ2UgZHVyaW5nIFxmQlwtZmNvbXBhcmVcLWRlYnVnXGZSIHRlc3RpbmcsIHNldAorXCZcZkJccy0xR0NDX0NPTVBBUkVfREVCVUdcczBcZlIgdG8gc2F5IFxmQlwtZmNvbXBhcmVcLWRlYnVnXC1ub3RcLW92ZXJyaWRkZW5cZlIsCit3aGljaCBccy0xR0NDXHMwIHJlamVjdHMgYXMgYW4gaW52YWxpZCBvcHRpb24gaW4gYW55IGFjdHVhbCBjb21waWxhdGlvbgorKHJhdGhlciB0aGFuIHByZXByb2Nlc3NpbmcsIGFzc2VtYmx5IG9yIGxpbmtpbmcpLiAgVG8gZ2V0IGp1c3QgYQord2FybmluZywgc2V0dGluZyBcZkJccy0xR0NDX0NPTVBBUkVfREVCVUdcczBcZlIgdG8gXGZCXC13JW5cLWZjb21wYXJlXC1kZWJ1Zworbm90IG92ZXJyaWRkZW5cZlIgd2lsbCBkby4KKy5JUCAiXGZCXC1mY29tcGFyZVwtZGVidWdcLXNlY29uZFxmUiIgNAorLklYIEl0ZW0gIi1mY29tcGFyZS1kZWJ1Zy1zZWNvbmQiCitUaGlzIG9wdGlvbiBpcyBpbXBsaWNpdGx5IHBhc3NlZCB0byB0aGUgY29tcGlsZXIgZm9yIHRoZSBzZWNvbmQKK2NvbXBpbGF0aW9uIHJlcXVlc3RlZCBieSBcZkJcLWZjb21wYXJlXC1kZWJ1Z1xmUiwgYWxvbmcgd2l0aCBvcHRpb25zIHRvCitzaWxlbmNlIHdhcm5pbmdzLCBhbmQgb21pdHRpbmcgb3RoZXIgb3B0aW9ucyB0aGF0IHdvdWxkIGNhdXNlCitzaWRlLWVmZmVjdCBjb21waWxlciBvdXRwdXRzIHRvIGZpbGVzIG9yIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBEdW1wCitmaWxlcyBhbmQgcHJlc2VydmVkIHRlbXBvcmFyeSBmaWxlcyBhcmUgcmVuYW1lZCBzbyBhcyB0byBjb250YWluIHRoZQorXCZcZihDV1wqKENgLmdrXCooQydcZlIgYWRkaXRpb25hbCBleHRlbnNpb24gZHVyaW5nIHRoZSBzZWNvbmQgY29tcGlsYXRpb24sIHRvIGF2b2lkCitvdmVyd3JpdGluZyB0aG9zZSBnZW5lcmF0ZWQgYnkgdGhlIGZpcnN0LgorLlNwCitXaGVuIHRoaXMgb3B0aW9uIGlzIHBhc3NlZCB0byB0aGUgY29tcGlsZXIgZHJpdmVyLCBpdCBjYXVzZXMgdGhlCitcJlxmSWZpcnN0XGZSIGNvbXBpbGF0aW9uIHRvIGJlIHNraXBwZWQsIHdoaWNoIG1ha2VzIGl0IHVzZWZ1bCBmb3IgbGl0dGxlCitvdGhlciB0aGFuIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgcHJvcGVyLgorLklQICJcZkJcLWZlbGltaW5hdGVcLWR3YXJmMlwtZHVwc1xmUiIgNAorLklYIEl0ZW0gIi1mZWxpbWluYXRlLWR3YXJmMi1kdXBzIgorQ29tcHJlc3MgXHMtMURXQVJGXHMwIDIgZGVidWdnaW5nIGluZm9ybWF0aW9uIGJ5IGVsaW1pbmF0aW5nIGR1cGxpY2F0ZWQKK2luZm9ybWF0aW9uIGFib3V0IGVhY2ggc3ltYm9sLiAgVGhpcyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSB3aGVuCitnZW5lcmF0aW5nIFxzLTFEV0FSRlxzMCAyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB3aXRoIFxmQlwtZ2R3YXJmXC0yXGZSLgorLklQICJcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1iYXNlb25seVxmUiIgNAorLklYIEl0ZW0gIi1mZW1pdC1zdHJ1Y3QtZGVidWctYmFzZW9ubHkiCitFbWl0IGRlYnVnIGluZm9ybWF0aW9uIGZvciBzdHJ1Y3QtbGlrZSB0eXBlcworb25seSB3aGVuIHRoZSBiYXNlIG5hbWUgb2YgdGhlIGNvbXBpbGF0aW9uIHNvdXJjZSBmaWxlCittYXRjaGVzIHRoZSBiYXNlIG5hbWUgb2YgZmlsZSBpbiB3aGljaCB0aGUgc3RydWN0IGlzIGRlZmluZWQuCisuU3AKK1RoaXMgb3B0aW9uIHN1YnN0YW50aWFsbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sCitidXQgYXQgc2lnbmlmaWNhbnQgcG90ZW50aWFsIGxvc3MgaW4gdHlwZSBpbmZvcm1hdGlvbiB0byB0aGUgZGVidWdnZXIuCitTZWUgXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtcmVkdWNlZFxmUiBmb3IgYSBsZXNzIGFnZ3Jlc3NpdmUgb3B0aW9uLgorU2VlIFxmQlwtZmVtaXRcLXN0cnVjdFwtZGVidWdcLWRldGFpbGVkXGZSIGZvciBtb3JlIGRldGFpbGVkIGNvbnRyb2wuCisuU3AKK1RoaXMgb3B0aW9uIHdvcmtzIG9ubHkgd2l0aCBccy0xRFdBUkZcczAgMi4KKy5JUCAiXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtcmVkdWNlZFxmUiIgNAorLklYIEl0ZW0gIi1mZW1pdC1zdHJ1Y3QtZGVidWctcmVkdWNlZCIKK0VtaXQgZGVidWcgaW5mb3JtYXRpb24gZm9yIHN0cnVjdC1saWtlIHR5cGVzCitvbmx5IHdoZW4gdGhlIGJhc2UgbmFtZSBvZiB0aGUgY29tcGlsYXRpb24gc291cmNlIGZpbGUKK21hdGNoZXMgdGhlIGJhc2UgbmFtZSBvZiBmaWxlIGluIHdoaWNoIHRoZSB0eXBlIGlzIGRlZmluZWQsCit1bmxlc3MgdGhlIHN0cnVjdCBpcyBhIHRlbXBsYXRlIG9yIGRlZmluZWQgaW4gYSBzeXN0ZW0gaGVhZGVyLgorLlNwCitUaGlzIG9wdGlvbiBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIHNpemUgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uLAord2l0aCBzb21lIHBvdGVudGlhbCBsb3NzIGluIHR5cGUgaW5mb3JtYXRpb24gdG8gdGhlIGRlYnVnZ2VyLgorU2VlIFxmQlwtZmVtaXRcLXN0cnVjdFwtZGVidWdcLWJhc2Vvbmx5XGZSIGZvciBhIG1vcmUgYWdncmVzc2l2ZSBvcHRpb24uCitTZWUgXGZCXC1mZW1pdFwtc3RydWN0XC1kZWJ1Z1wtZGV0YWlsZWRcZlIgZm9yIG1vcmUgZGV0YWlsZWQgY29udHJvbC4KKy5TcAorVGhpcyBvcHRpb24gd29ya3Mgb25seSB3aXRoIFxzLTFEV0FSRlxzMCAyLgorLklQICJcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1kZXRhaWxlZFxmUltcZkI9XGZSXGZJc3BlYy1saXN0XGZSXSIgNAorLklYIEl0ZW0gIi1mZW1pdC1zdHJ1Y3QtZGVidWctZGV0YWlsZWRbPXNwZWMtbGlzdF0iCitTcGVjaWZ5IHRoZSBzdHJ1Y3QtbGlrZSB0eXBlcworZm9yIHdoaWNoIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgZGVidWcgaW5mb3JtYXRpb24uCitUaGUgaW50ZW50IGlzIHRvIHJlZHVjZSBkdXBsaWNhdGUgc3RydWN0IGRlYnVnIGluZm9ybWF0aW9uCitiZXR3ZWVuIGRpZmZlcmVudCBvYmplY3QgZmlsZXMgd2l0aGluIHRoZSBzYW1lIHByb2dyYW0uCisuU3AKK1RoaXMgb3B0aW9uIGlzIGEgZGV0YWlsZWQgdmVyc2lvbiBvZgorXCZcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1yZWR1Y2VkXGZSIGFuZCBcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1iYXNlb25seVxmUiwKK3doaWNoIHNlcnZlcyBmb3IgbW9zdCBuZWVkcy4KKy5TcAorQSBzcGVjaWZpY2F0aW9uIGhhcyB0aGUgc3ludGF4W1xmQmRpcjpcZlJ8XGZCaW5kOlxmUl1bXGZCb3JkOlxmUnxcZkJnZW46XGZSXShcZkJhbnlcZlJ8XGZCc3lzXGZSfFxmQmJhc2VcZlJ8XGZCbm9uZVxmUikKKy5TcAorVGhlIG9wdGlvbmFsIGZpcnN0IHdvcmQgbGltaXRzIHRoZSBzcGVjaWZpY2F0aW9uIHRvCitzdHJ1Y3RzIHRoYXQgYXJlIHVzZWQgZGlyZWN0bHkgKFxmQmRpcjpcZlIpIG9yIHVzZWQgaW5kaXJlY3RseSAoXGZCaW5kOlxmUikuCitBIHN0cnVjdCB0eXBlIGlzIHVzZWQgZGlyZWN0bHkgd2hlbiBpdCBpcyB0aGUgdHlwZSBvZiBhIHZhcmlhYmxlLCBtZW1iZXIuCitJbmRpcmVjdCB1c2VzIGFyaXNlIHRocm91Z2ggcG9pbnRlcnMgdG8gc3RydWN0cy4KK1RoYXQgaXMsIHdoZW4gdXNlIG9mIGFuIGluY29tcGxldGUgc3RydWN0IGlzIHZhbGlkLCB0aGUgdXNlIGlzIGluZGlyZWN0LgorQW4gZXhhbXBsZSBpcworXCZcZkJzdHJ1Y3Qgb25lIGRpcmVjdDsgc3RydWN0IHR3byAqIGluZGlyZWN0O1xmUi4KKy5TcAorVGhlIG9wdGlvbmFsIHNlY29uZCB3b3JkIGxpbWl0cyB0aGUgc3BlY2lmaWNhdGlvbiB0bworb3JkaW5hcnkgc3RydWN0cyAoXGZCb3JkOlxmUikgb3IgZ2VuZXJpYyBzdHJ1Y3RzIChcZkJnZW46XGZSKS4KK0dlbmVyaWMgc3RydWN0cyBhcmUgYSBiaXQgY29tcGxpY2F0ZWQgdG8gZXhwbGFpbi4KK0ZvciBcKihDKywgdGhlc2UgYXJlIG5vbi1leHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgb2YgdGVtcGxhdGUgY2xhc3NlcywKK29yIG5vbi10ZW1wbGF0ZSBjbGFzc2VzIHdpdGhpbiB0aGUgYWJvdmUuCitPdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMgaGF2ZSBnZW5lcmljcywKK2J1dCBcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1kZXRhaWxlZFxmUiBkb2VzIG5vdCB5ZXQgaW1wbGVtZW50IHRoZW0uCisuU3AKK1RoZSB0aGlyZCB3b3JkIHNwZWNpZmllcyB0aGUgc291cmNlIGZpbGVzIGZvciB0aG9zZQorc3RydWN0cyBmb3Igd2hpY2ggdGhlIGNvbXBpbGVyIHNob3VsZCBlbWl0IGRlYnVnIGluZm9ybWF0aW9uLgorVGhlIHZhbHVlcyBcZkJub25lXGZSIGFuZCBcZkJhbnlcZlIgaGF2ZSB0aGUgbm9ybWFsIG1lYW5pbmcuCitUaGUgdmFsdWUgXGZCYmFzZVxmUiBtZWFucyB0aGF0Cit0aGUgYmFzZSBvZiBuYW1lIG9mIHRoZSBmaWxlIGluIHdoaWNoIHRoZSB0eXBlIGRlY2xhcmF0aW9uIGFwcGVhcnMKK211c3QgbWF0Y2ggdGhlIGJhc2Ugb2YgdGhlIG5hbWUgb2YgdGhlIG1haW4gY29tcGlsYXRpb24gZmlsZS4KK0luIHByYWN0aWNlLCB0aGlzIG1lYW5zIHRoYXQgd2hlbiBjb21waWxpbmcgXGZJZm9vLmNcZlIsIGRlYnVnIGluZm9ybWF0aW9uCitpcyBnZW5lcmF0ZWQgZm9yIHR5cGVzIGRlY2xhcmVkIGluIHRoYXQgZmlsZSBhbmQgXGZJZm9vLmhcZlIsCitidXQgbm90IG90aGVyIGhlYWRlciBmaWxlcy4KK1RoZSB2YWx1ZSBcZkJzeXNcZlIgbWVhbnMgdGhvc2UgdHlwZXMgc2F0aXNmeWluZyBcZkJiYXNlXGZSCitvciBkZWNsYXJlZCBpbiBzeXN0ZW0gb3IgY29tcGlsZXIgaGVhZGVycy4KKy5TcAorWW91IG1heSBuZWVkIHRvIGV4cGVyaW1lbnQgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IHNldHRpbmdzIGZvciB5b3VyIGFwcGxpY2F0aW9uLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZlbWl0XC1zdHJ1Y3RcLWRlYnVnXC1kZXRhaWxlZD1hbGxcZlIuCisuU3AKK1RoaXMgb3B0aW9uIHdvcmtzIG9ubHkgd2l0aCBccy0xRFdBUkZcczAgMi4KKy5JUCAiXGZCXC1mbm9cLW1lcmdlXC1kZWJ1Z1wtc3RyaW5nc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tbWVyZ2UtZGVidWctc3RyaW5ncyIKK0RpcmVjdCB0aGUgbGlua2VyIHRvIG5vdCBtZXJnZSB0b2dldGhlciBzdHJpbmdzIGluIHRoZSBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIHRoYXQgYXJlIGlkZW50aWNhbCBpbiBkaWZmZXJlbnQgb2JqZWN0IGZpbGVzLiAgTWVyZ2luZyBpcworbm90IHN1cHBvcnRlZCBieSBhbGwgYXNzZW1ibGVycyBvciBsaW5rZXJzLiAgTWVyZ2luZyBkZWNyZWFzZXMgdGhlIHNpemUKK29mIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGZpbGUgYXQgdGhlIGNvc3Qgb2YgaW5jcmVhc2luZworbGluayBwcm9jZXNzaW5nIHRpbWUuICBNZXJnaW5nIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1mZGVidWdcLXByZWZpeFwtbWFwPVxmUlxmSW9sZFxmUlxmQj1cZlJcZkluZXdcZlIiIDQKKy5JWCBJdGVtICItZmRlYnVnLXByZWZpeC1tYXA9b2xkPW5ldyIKK1doZW4gY29tcGlsaW5nIGZpbGVzIGluIGRpcmVjdG9yeSBcZklcZklvbGRcZklcZlIsIHJlY29yZCBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlbSBhcyBpbiBcZklcZkluZXdcZklcZlIgaW5zdGVhZC4KKy5JUCAiXGZCXC1mbm9cLWR3YXJmMlwtY2ZpXC1hc21cZlIiIDQKKy5JWCBJdGVtICItZm5vLWR3YXJmMi1jZmktYXNtIgorRW1pdCBccy0xRFdBUkZcczAgMiB1bndpbmQgaW5mbyBhcyBjb21waWxlciBnZW5lcmF0ZWQgXGYoQ1dcKihDYC5laF9mcmFtZVwqKEMnXGZSIHNlY3Rpb24KK2luc3RlYWQgb2YgdXNpbmcgXHMtMUdBU1xzMCBcZihDV1wqKENgLmNmaV8qXCooQydcZlIgZGlyZWN0aXZlcy4KKy5JUCAiXGZCXC1wXGZSIiA0CisuSVggSXRlbSAiLXAiCitHZW5lcmF0ZSBleHRyYSBjb2RlIHRvIHdyaXRlIHByb2ZpbGUgaW5mb3JtYXRpb24gc3VpdGFibGUgZm9yIHRoZQorYW5hbHlzaXMgcHJvZ3JhbSBcZkJwcm9mXGZSLiAgWW91IG11c3QgdXNlIHRoaXMgb3B0aW9uIHdoZW4gY29tcGlsaW5nCit0aGUgc291cmNlIGZpbGVzIHlvdSB3YW50IGRhdGEgYWJvdXQsIGFuZCB5b3UgbXVzdCBhbHNvIHVzZSBpdCB3aGVuCitsaW5raW5nLgorLklQICJcZkJcLXBnXGZSIiA0CisuSVggSXRlbSAiLXBnIgorR2VuZXJhdGUgZXh0cmEgY29kZSB0byB3cml0ZSBwcm9maWxlIGluZm9ybWF0aW9uIHN1aXRhYmxlIGZvciB0aGUKK2FuYWx5c2lzIHByb2dyYW0gXGZCZ3Byb2ZcZlIuICBZb3UgbXVzdCB1c2UgdGhpcyBvcHRpb24gd2hlbiBjb21waWxpbmcKK3RoZSBzb3VyY2UgZmlsZXMgeW91IHdhbnQgZGF0YSBhYm91dCwgYW5kIHlvdSBtdXN0IGFsc28gdXNlIGl0IHdoZW4KK2xpbmtpbmcuCisuSVAgIlxmQlwtUVxmUiIgNAorLklYIEl0ZW0gIi1RIgorTWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IG91dCBlYWNoIGZ1bmN0aW9uIG5hbWUgYXMgaXQgaXMgY29tcGlsZWQsIGFuZAorcHJpbnQgc29tZSBzdGF0aXN0aWNzIGFib3V0IGVhY2ggcGFzcyB3aGVuIGl0IGZpbmlzaGVzLgorLklQICJcZkJcLWZ0aW1lXC1yZXBvcnRcZlIiIDQKKy5JWCBJdGVtICItZnRpbWUtcmVwb3J0IgorTWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCB0aGUgdGltZSBjb25zdW1lZCBieSBlYWNoCitwYXNzIHdoZW4gaXQgZmluaXNoZXMuCisuSVAgIlxmQlwtZm1lbVwtcmVwb3J0XGZSIiA0CisuSVggSXRlbSAiLWZtZW0tcmVwb3J0IgorTWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCBwZXJtYW5lbnQgbWVtb3J5CithbGxvY2F0aW9uIHdoZW4gaXQgZmluaXNoZXMuCisuSVAgIlxmQlwtZm1lbVwtcmVwb3J0XC13cGFcZlIiIDQKKy5JWCBJdGVtICItZm1lbS1yZXBvcnQtd3BhIgorTWFrZXMgdGhlIGNvbXBpbGVyIHByaW50IHNvbWUgc3RhdGlzdGljcyBhYm91dCBwZXJtYW5lbnQgbWVtb3J5CithbGxvY2F0aW9uIGZvciB0aGUgXHMtMVdQQVxzMCBwaGFzZSBvbmx5LgorLklQICJcZkJcLWZwcmVcLWlwYVwtbWVtXC1yZXBvcnRcZlIiIDQKKy5JWCBJdGVtICItZnByZS1pcGEtbWVtLXJlcG9ydCIKKy5QRCAwCisuSVAgIlxmQlwtZnBvc3RcLWlwYVwtbWVtXC1yZXBvcnRcZlIiIDQKKy5JWCBJdGVtICItZnBvc3QtaXBhLW1lbS1yZXBvcnQiCisuUEQKK01ha2VzIHRoZSBjb21waWxlciBwcmludCBzb21lIHN0YXRpc3RpY3MgYWJvdXQgcGVybWFuZW50IG1lbW9yeQorYWxsb2NhdGlvbiBiZWZvcmUgb3IgYWZ0ZXIgaW50ZXJwcm9jZWR1cmFsIG9wdGltaXphdGlvbi4KKy5JUCAiXGZCXC1mcHJvZmlsZVwtcmVwb3J0XGZSIiA0CisuSVggSXRlbSAiLWZwcm9maWxlLXJlcG9ydCIKK01ha2VzIHRoZSBjb21waWxlciBwcmludCBzb21lIHN0YXRpc3RpY3MgYWJvdXQgY29uc2lzdGVuY3kgb2YgdGhlCisoZXN0aW1hdGVkKSBwcm9maWxlIGFuZCBlZmZlY3Qgb2YgaW5kaXZpZHVhbCBwYXNzZXMuCisuSVAgIlxmQlwtZnN0YWNrXC11c2FnZVxmUiIgNAorLklYIEl0ZW0gIi1mc3RhY2stdXNhZ2UiCitNYWtlcyB0aGUgY29tcGlsZXIgb3V0cHV0IHN0YWNrIHVzYWdlIGluZm9ybWF0aW9uIGZvciB0aGUgcHJvZ3JhbSwgb24gYQorcGVyLWZ1bmN0aW9uIGJhc2lzLiAgVGhlIGZpbGVuYW1lIGZvciB0aGUgZHVtcCBpcyBtYWRlIGJ5IGFwcGVuZGluZworXCZcZkkuc3VcZlIgdG8gdGhlIFxmSWF1eG5hbWVcZlIuICBcZklhdXhuYW1lXGZSIGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBuYW1lIG9mCit0aGUgb3V0cHV0IGZpbGUsIGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFuZCBpdCBpcyBub3QgYW4gZXhlY3V0YWJsZSwKK290aGVyd2lzZSBpdCBpcyB0aGUgYmFzZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLiAgQW4gZW50cnkgaXMgbWFkZSB1cAorb2YgdGhyZWUgZmllbGRzOgorLlJTIDQKKy5JUCAiXChidSIgNAorVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLgorLklQICJcKGJ1IiA0CitBIG51bWJlciBvZiBieXRlcy4KKy5JUCAiXChidSIgNAorT25lIG9yIG1vcmUgcXVhbGlmaWVyczogXGYoQ1dcKihDYHN0YXRpY1wqKEMnXGZSLCBcZihDV1wqKENgZHluYW1pY1wqKEMnXGZSLCBcZihDV1wqKENgYm91bmRlZFwqKEMnXGZSLgorLlJFCisuUlMgNAorLlNwCitUaGUgcXVhbGlmaWVyIFxmKENXXCooQ2BzdGF0aWNcKihDJ1xmUiBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBtYW5pcHVsYXRlcyB0aGUgc3RhY2sKK3N0YXRpY2FsbHk6IGEgZml4ZWQgbnVtYmVyIG9mIGJ5dGVzIGFyZSBhbGxvY2F0ZWQgZm9yIHRoZSBmcmFtZSBvbiBmdW5jdGlvbgorZW50cnkgYW5kIHJlbGVhc2VkIG9uIGZ1bmN0aW9uIGV4aXQ7IG5vIHN0YWNrIGFkanVzdG1lbnRzIGFyZSBvdGhlcndpc2UgbWFkZQoraW4gdGhlIGZ1bmN0aW9uLiAgVGhlIHNlY29uZCBmaWVsZCBpcyB0aGlzIGZpeGVkIG51bWJlciBvZiBieXRlcy4KKy5TcAorVGhlIHF1YWxpZmllciBcZihDV1wqKENgZHluYW1pY1wqKEMnXGZSIG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIG1hbmlwdWxhdGVzIHRoZSBzdGFjaworZHluYW1pY2FsbHk6IGluIGFkZGl0aW9uIHRvIHRoZSBzdGF0aWMgYWxsb2NhdGlvbiBkZXNjcmliZWQgYWJvdmUsIHN0YWNrCithZGp1c3RtZW50cyBhcmUgbWFkZSBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGZvciBleGFtcGxlIHRvIHB1c2gvcG9wCithcmd1bWVudHMgYXJvdW5kIGZ1bmN0aW9uIGNhbGxzLiAgSWYgdGhlIHF1YWxpZmllciBcZihDV1wqKENgYm91bmRlZFwqKEMnXGZSIGlzIGFsc28KK3ByZXNlbnQsIHRoZSBhbW91bnQgb2YgdGhlc2UgYWRqdXN0bWVudHMgaXMgYm91bmRlZCBhdCBjb21waWxlIHRpbWUgYW5kCit0aGUgc2Vjb25kIGZpZWxkIGlzIGFuIHVwcGVyIGJvdW5kIG9mIHRoZSB0b3RhbCBhbW91bnQgb2Ygc3RhY2sgdXNlZCBieQordGhlIGZ1bmN0aW9uLiAgSWYgaXQgaXMgbm90IHByZXNlbnQsIHRoZSBhbW91bnQgb2YgdGhlc2UgYWRqdXN0bWVudHMgaXMKK25vdCBib3VuZGVkIGF0IGNvbXBpbGUgdGltZSBhbmQgdGhlIHNlY29uZCBmaWVsZCBvbmx5IHJlcHJlc2VudHMgdGhlCitib3VuZGVkIHBhcnQuCisuUkUKKy5JUCAiXGZCXC1mcHJvZmlsZVwtYXJjc1xmUiIgNAorLklYIEl0ZW0gIi1mcHJvZmlsZS1hcmNzIgorQWRkIGNvZGUgc28gdGhhdCBwcm9ncmFtIGZsb3cgXGZJYXJjc1xmUiBhcmUgaW5zdHJ1bWVudGVkLiAgRHVyaW5nCitleGVjdXRpb24gdGhlIHByb2dyYW0gcmVjb3JkcyBob3cgbWFueSB0aW1lcyBlYWNoIGJyYW5jaCBhbmQgY2FsbCBpcworZXhlY3V0ZWQgYW5kIGhvdyBtYW55IHRpbWVzIGl0IGlzIHRha2VuIG9yIHJldHVybnMuICBXaGVuIHRoZSBjb21waWxlZAorcHJvZ3JhbSBleGl0cyBpdCBzYXZlcyB0aGlzIGRhdGEgdG8gYSBmaWxlIGNhbGxlZAorXCZcZklcZklhdXhuYW1lXGZJLmdjZGFcZlIgZm9yIGVhY2ggc291cmNlIGZpbGUuICBUaGUgZGF0YSBtYXkgYmUgdXNlZCBmb3IKK3Byb2ZpbGUtZGlyZWN0ZWQgb3B0aW1pemF0aW9ucyAoXGZCXC1mYnJhbmNoXC1wcm9iYWJpbGl0aWVzXGZSKSwgb3IgZm9yCit0ZXN0IGNvdmVyYWdlIGFuYWx5c2lzIChcZkJcLWZ0ZXN0XC1jb3ZlcmFnZVxmUikuICBFYWNoIG9iamVjdCBmaWxlJ3MKK1wmXGZJYXV4bmFtZVxmUiBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUsIGlmCitleHBsaWNpdGx5IHNwZWNpZmllZCBhbmQgaXQgaXMgbm90IHRoZSBmaW5hbCBleGVjdXRhYmxlLCBvdGhlcndpc2UgaXQgaXMKK3RoZSBiYXNlbmFtZSBvZiB0aGUgc291cmNlIGZpbGUuICBJbiBib3RoIGNhc2VzIGFueSBzdWZmaXggaXMgcmVtb3ZlZAorKGUuZy4gXGZJZm9vLmdjZGFcZlIgZm9yIGlucHV0IGZpbGUgXGZJZGlyL2Zvby5jXGZSLCBvcgorXCZcZklkaXIvZm9vLmdjZGFcZlIgZm9yIG91dHB1dCBmaWxlIHNwZWNpZmllZCBhcyBcZkJcLW8gZGlyL2Zvby5vXGZSKS4KKy5JUCAiXGZCXC1cLWNvdmVyYWdlXGZSIiA0CisuSVggSXRlbSAiLS1jb3ZlcmFnZSIKK1RoaXMgb3B0aW9uIGlzIHVzZWQgdG8gY29tcGlsZSBhbmQgbGluayBjb2RlIGluc3RydW1lbnRlZCBmb3IgY292ZXJhZ2UKK2FuYWx5c2lzLiAgVGhlIG9wdGlvbiBpcyBhIHN5bm9ueW0gZm9yIFxmQlwtZnByb2ZpbGVcLWFyY3NcZlIKK1wmXGZCXC1mdGVzdFwtY292ZXJhZ2VcZlIgKHdoZW4gY29tcGlsaW5nKSBhbmQgXGZCXC1sZ2NvdlxmUiAod2hlbgorbGlua2luZykuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRob3NlIG9wdGlvbnMgZm9yIG1vcmUgZGV0YWlscy4KKy5SUyA0CisuSVAgIlwoYnUiIDQKK0NvbXBpbGUgdGhlIHNvdXJjZSBmaWxlcyB3aXRoIFxmQlwtZnByb2ZpbGVcLWFyY3NcZlIgcGx1cyBvcHRpbWl6YXRpb24KK2FuZCBjb2RlIGdlbmVyYXRpb24gb3B0aW9ucy4gIEZvciB0ZXN0IGNvdmVyYWdlIGFuYWx5c2lzLCB1c2UgdGhlCithZGRpdGlvbmFsIFxmQlwtZnRlc3RcLWNvdmVyYWdlXGZSIG9wdGlvbi4gIFlvdSBkbyBub3QgbmVlZCB0byBwcm9maWxlCitldmVyeSBzb3VyY2UgZmlsZSBpbiBhIHByb2dyYW0uCisuSVAgIlwoYnUiIDQKK0xpbmsgeW91ciBvYmplY3QgZmlsZXMgd2l0aCBcZkJcLWxnY292XGZSIG9yIFxmQlwtZnByb2ZpbGVcLWFyY3NcZlIKKyh0aGUgbGF0dGVyIGltcGxpZXMgdGhlIGZvcm1lcikuCisuSVAgIlwoYnUiIDQKK1J1biB0aGUgcHJvZ3JhbSBvbiBhIHJlcHJlc2VudGF0aXZlIHdvcmtsb2FkIHRvIGdlbmVyYXRlIHRoZSBhcmMgcHJvZmlsZQoraW5mb3JtYXRpb24uICBUaGlzIG1heSBiZSByZXBlYXRlZCBhbnkgbnVtYmVyIG9mIHRpbWVzLiAgWW91IGNhbiBydW4KK2NvbmN1cnJlbnQgaW5zdGFuY2VzIG9mIHlvdXIgcHJvZ3JhbSwgYW5kIHByb3ZpZGVkIHRoYXQgdGhlIGZpbGUgc3lzdGVtCitzdXBwb3J0cyBsb2NraW5nLCB0aGUgZGF0YSBmaWxlcyB3aWxsIGJlIGNvcnJlY3RseSB1cGRhdGVkLiAgQWxzbworXCZcZihDV1wqKENgZm9ya1wqKEMnXGZSIGNhbGxzIGFyZSBkZXRlY3RlZCBhbmQgY29ycmVjdGx5IGhhbmRsZWQgKGRvdWJsZSBjb3VudGluZword2lsbCBub3QgaGFwcGVuKS4KKy5JUCAiXChidSIgNAorRm9yIHByb2ZpbGUtZGlyZWN0ZWQgb3B0aW1pemF0aW9ucywgY29tcGlsZSB0aGUgc291cmNlIGZpbGVzIGFnYWluIHdpdGgKK3RoZSBzYW1lIG9wdGltaXphdGlvbiBhbmQgY29kZSBnZW5lcmF0aW9uIG9wdGlvbnMgcGx1cworXCZcZkJcLWZicmFuY2hcLXByb2JhYmlsaXRpZXNcZlIuCisuSVAgIlwoYnUiIDQKK0ZvciB0ZXN0IGNvdmVyYWdlIGFuYWx5c2lzLCB1c2UgXGZCZ2NvdlxmUiB0byBwcm9kdWNlIGh1bWFuIHJlYWRhYmxlCitpbmZvcm1hdGlvbiBmcm9tIHRoZSBcZkkuZ2Nub1xmUiBhbmQgXGZJLmdjZGFcZlIgZmlsZXMuICBSZWZlciB0byB0aGUKK1wmXGZCZ2NvdlxmUiBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorLlJFCisuUlMgNAorLlNwCitXaXRoIFxmQlwtZnByb2ZpbGVcLWFyY3NcZlIsIGZvciBlYWNoIGZ1bmN0aW9uIG9mIHlvdXIgcHJvZ3JhbSBccy0xR0NDXHMwCitjcmVhdGVzIGEgcHJvZ3JhbSBmbG93IGdyYXBoLCB0aGVuIGZpbmRzIGEgc3Bhbm5pbmcgdHJlZSBmb3IgdGhlIGdyYXBoLgorT25seSBhcmNzIHRoYXQgYXJlIG5vdCBvbiB0aGUgc3Bhbm5pbmcgdHJlZSBoYXZlIHRvIGJlIGluc3RydW1lbnRlZDogdGhlCitjb21waWxlciBhZGRzIGNvZGUgdG8gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZXNlIGFyY3MgYXJlCitleGVjdXRlZC4gIFdoZW4gYW4gYXJjIGlzIHRoZSBvbmx5IGV4aXQgb3Igb25seSBlbnRyYW5jZSB0byBhIGJsb2NrLCB0aGUKK2luc3RydW1lbnRhdGlvbiBjb2RlIGNhbiBiZSBhZGRlZCB0byB0aGUgYmxvY2s7IG90aGVyd2lzZSwgYSBuZXcgYmFzaWMKK2Jsb2NrIG11c3QgYmUgY3JlYXRlZCB0byBob2xkIHRoZSBpbnN0cnVtZW50YXRpb24gY29kZS4KKy5SRQorLklQICJcZkJcLWZ0ZXN0XC1jb3ZlcmFnZVxmUiIgNAorLklYIEl0ZW0gIi1mdGVzdC1jb3ZlcmFnZSIKK1Byb2R1Y2UgYSBub3RlcyBmaWxlIHRoYXQgdGhlIFxmQmdjb3ZcZlIgY29kZS1jb3ZlcmFnZSB1dGlsaXR5IGNhbiB1c2UgdG8KK3Nob3cgcHJvZ3JhbSBjb3ZlcmFnZS4gIEVhY2ggc291cmNlIGZpbGUncyBub3RlIGZpbGUgaXMgY2FsbGVkCitcJlxmSVxmSWF1eG5hbWVcZkkuZ2Nub1xmUi4gIFJlZmVyIHRvIHRoZSBcZkJcLWZwcm9maWxlXC1hcmNzXGZSIG9wdGlvbgorYWJvdmUgZm9yIGEgZGVzY3JpcHRpb24gb2YgXGZJYXV4bmFtZVxmUiBhbmQgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworZ2VuZXJhdGUgdGVzdCBjb3ZlcmFnZSBkYXRhLiAgQ292ZXJhZ2UgZGF0YSBtYXRjaGVzIHRoZSBzb3VyY2UgZmlsZXMKK21vcmUgY2xvc2VseSBpZiB5b3UgZG8gbm90IG9wdGltaXplLgorLklQICJcZkJcLWZkYmdcLWNudFwtbGlzdFxmUiIgNAorLklYIEl0ZW0gIi1mZGJnLWNudC1saXN0IgorUHJpbnQgdGhlIG5hbWUgYW5kIHRoZSBjb3VudGVyIHVwcGVyIGJvdW5kIGZvciBhbGwgZGVidWcgY291bnRlcnMuCisuSVAgIlxmQlwtZmRiZ1wtY250PVxmUlxmSWNvdW50ZXItdmFsdWUtbGlzdFxmUiIgNAorLklYIEl0ZW0gIi1mZGJnLWNudD1jb3VudGVyLXZhbHVlLWxpc3QiCitTZXQgdGhlIGludGVybmFsIGRlYnVnIGNvdW50ZXIgdXBwZXIgYm91bmQuICBcZkljb3VudGVyLXZhbHVlLWxpc3RcZlIKK2lzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgXGZJbmFtZVxmUjpcZkl2YWx1ZVxmUiBwYWlycword2hpY2ggc2V0cyB0aGUgdXBwZXIgYm91bmQgb2YgZWFjaCBkZWJ1ZyBjb3VudGVyIFxmSW5hbWVcZlIgdG8gXGZJdmFsdWVcZlIuCitBbGwgZGVidWcgY291bnRlcnMgaGF2ZSB0aGUgaW5pdGlhbCB1cHBlciBib3VuZCBvZiBcZihDV1wqKENgVUlOVF9NQVhcKihDJ1xmUjsKK3RodXMgXGYoQ1dcKihDYGRiZ19jbnQoKVwqKEMnXGZSIHJldHVybnMgdHJ1ZSBhbHdheXMgdW5sZXNzIHRoZSB1cHBlciBib3VuZAoraXMgc2V0IGJ5IHRoaXMgb3B0aW9uLgorRm9yIGV4YW1wbGUsIHdpdGggXGZCXC1mZGJnXC1jbnQ9ZGNlOjEwLHRhaWxfY2FsbDowXGZSLAorXCZcZihDV1wqKENgZGJnX2NudChkY2UpXCooQydcZlIgcmV0dXJucyB0cnVlIG9ubHkgZm9yIGZpcnN0IDEwIGludm9jYXRpb25zLgorLklQICJcZkJcLWZlbmFibGVcLVxmUlxmSWtpbmRcZlJcZkJcLVxmUlxmSXBhc3NcZlIiIDQKKy5JWCBJdGVtICItZmVuYWJsZS1raW5kLXBhc3MiCisuUEQgMAorLklQICJcZkJcLWZkaXNhYmxlXC1cZlJcZklraW5kXGZSXGZCXC1cZlJcZklwYXNzXGZSXGZCPVxmUlxmSXJhbmdlLWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmRpc2FibGUta2luZC1wYXNzPXJhbmdlLWxpc3QiCisuUEQKK1RoaXMgaXMgYSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGFyZSB1c2VkIHRvIGV4cGxpY2l0bHkgZGlzYWJsZS9lbmFibGUKK29wdGltaXphdGlvbiBwYXNzZXMuICBUaGVzZSBvcHRpb25zIGFyZSBpbnRlbmRlZCBmb3IgdXNlIGZvciBkZWJ1Z2dpbmcgXHMtMUdDQ1xzMC4KK0NvbXBpbGVyIHVzZXJzIHNob3VsZCB1c2UgcmVndWxhciBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcKK3Bhc3NlcyBpbnN0ZWFkLgorLlJTIDQKKy5JUCAiXGZCXC1mZGlzYWJsZVwtaXBhXC1cZlJcZklwYXNzXGZSIiA0CisuSVggSXRlbSAiLWZkaXNhYmxlLWlwYS1wYXNzIgorRGlzYWJsZSBccy0xSVBBXHMwIHBhc3MgXGZJcGFzc1xmUi4gXGZJcGFzc1xmUiBpcyB0aGUgcGFzcyBuYW1lLiAgSWYgdGhlIHNhbWUgcGFzcyBpcworc3RhdGljYWxseSBpbnZva2VkIGluIHRoZSBjb21waWxlciBtdWx0aXBsZSB0aW1lcywgdGhlIHBhc3MgbmFtZSBzaG91bGQgYmUKK2FwcGVuZGVkIHdpdGggYSBzZXF1ZW50aWFsIG51bWJlciBzdGFydGluZyBmcm9tIDEuCisuSVAgIlxmQlwtZmRpc2FibGVcLXJ0bFwtXGZSXGZJcGFzc1xmUiIgNAorLklYIEl0ZW0gIi1mZGlzYWJsZS1ydGwtcGFzcyIKKy5QRCAwCisuSVAgIlxmQlwtZmRpc2FibGVcLXJ0bFwtXGZSXGZJcGFzc1xmUlxmQj1cZlJcZklyYW5nZS1saXN0XGZSIiA0CisuSVggSXRlbSAiLWZkaXNhYmxlLXJ0bC1wYXNzPXJhbmdlLWxpc3QiCisuUEQKK0Rpc2FibGUgXHMtMVJUTFxzMCBwYXNzIFxmSXBhc3NcZlIuICBcZklwYXNzXGZSIGlzIHRoZSBwYXNzIG5hbWUuICBJZiB0aGUgc2FtZSBwYXNzIGlzCitzdGF0aWNhbGx5IGludm9rZWQgaW4gdGhlIGNvbXBpbGVyIG11bHRpcGxlIHRpbWVzLCB0aGUgcGFzcyBuYW1lIHNob3VsZCBiZQorYXBwZW5kZWQgd2l0aCBhIHNlcXVlbnRpYWwgbnVtYmVyIHN0YXJ0aW5nIGZyb20gMS4gIFxmSXJhbmdlLWxpc3RcZlIgaXMgYSAKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZ1bmN0aW9uIHJhbmdlcyBvciBhc3NlbWJsZXIgbmFtZXMuICBFYWNoIHJhbmdlIGlzIGEgbnVtYmVyCitwYWlyIHNlcGFyYXRlZCBieSBhIGNvbG9uLiAgVGhlIHJhbmdlIGlzIGluY2x1c2l2ZSBpbiBib3RoIGVuZHMuICBJZiB0aGUgcmFuZ2UKK2lzIHRyaXZpYWwsIHRoZSBudW1iZXIgcGFpciBjYW4gYmUgc2ltcGxpZmllZCBhcyBhIHNpbmdsZSBudW1iZXIuICBJZiB0aGUKK2Z1bmN0aW9uJ3MgY2FsbCBncmFwaCBub2RlJ3MgXGZJdWlkXGZSIGZhbGxzIHdpdGhpbiBvbmUgb2YgdGhlIHNwZWNpZmllZCByYW5nZXMsCit0aGUgXGZJcGFzc1xmUiBpcyBkaXNhYmxlZCBmb3IgdGhhdCBmdW5jdGlvbi4gIFRoZSBcZkl1aWRcZlIgaXMgc2hvd24gaW4gdGhlCitmdW5jdGlvbiBoZWFkZXIgb2YgYSBkdW1wIGZpbGUsIGFuZCB0aGUgcGFzcyBuYW1lcyBjYW4gYmUgZHVtcGVkIGJ5IHVzaW5nCitvcHRpb24gXGZCXC1mZHVtcFwtcGFzc2VzXGZSLgorLklQICJcZkJcLWZkaXNhYmxlXC10cmVlXC1cZlJcZklwYXNzXGZSIiA0CisuSVggSXRlbSAiLWZkaXNhYmxlLXRyZWUtcGFzcyIKKy5QRCAwCisuSVAgIlxmQlwtZmRpc2FibGVcLXRyZWVcLVxmUlxmSXBhc3NcZlJcZkI9XGZSXGZJcmFuZ2UtbGlzdFxmUiIgNAorLklYIEl0ZW0gIi1mZGlzYWJsZS10cmVlLXBhc3M9cmFuZ2UtbGlzdCIKKy5QRAorRGlzYWJsZSB0cmVlIHBhc3MgXGZJcGFzc1xmUi4gIFNlZSBcZkJcLWZkaXNhYmxlXC1ydGxcZlIgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZgorb3B0aW9uIGFyZ3VtZW50cy4KKy5JUCAiXGZCXC1mZW5hYmxlXC1pcGFcLVxmUlxmSXBhc3NcZlIiIDQKKy5JWCBJdGVtICItZmVuYWJsZS1pcGEtcGFzcyIKK0VuYWJsZSBccy0xSVBBXHMwIHBhc3MgXGZJcGFzc1xmUi4gIFxmSXBhc3NcZlIgaXMgdGhlIHBhc3MgbmFtZS4gIElmIHRoZSBzYW1lIHBhc3MgaXMKK3N0YXRpY2FsbHkgaW52b2tlZCBpbiB0aGUgY29tcGlsZXIgbXVsdGlwbGUgdGltZXMsIHRoZSBwYXNzIG5hbWUgc2hvdWxkIGJlCithcHBlbmRlZCB3aXRoIGEgc2VxdWVudGlhbCBudW1iZXIgc3RhcnRpbmcgZnJvbSAxLgorLklQICJcZkJcLWZlbmFibGVcLXJ0bFwtXGZSXGZJcGFzc1xmUiIgNAorLklYIEl0ZW0gIi1mZW5hYmxlLXJ0bC1wYXNzIgorLlBEIDAKKy5JUCAiXGZCXC1mZW5hYmxlXC1ydGxcLVxmUlxmSXBhc3NcZlJcZkI9XGZSXGZJcmFuZ2UtbGlzdFxmUiIgNAorLklYIEl0ZW0gIi1mZW5hYmxlLXJ0bC1wYXNzPXJhbmdlLWxpc3QiCisuUEQKK0VuYWJsZSBccy0xUlRMXHMwIHBhc3MgXGZJcGFzc1xmUi4gIFNlZSBcZkJcLWZkaXNhYmxlXC1ydGxcZlIgZm9yIG9wdGlvbiBhcmd1bWVudAorZGVzY3JpcHRpb24gYW5kIGV4YW1wbGVzLgorLklQICJcZkJcLWZlbmFibGVcLXRyZWVcLVxmUlxmSXBhc3NcZlIiIDQKKy5JWCBJdGVtICItZmVuYWJsZS10cmVlLXBhc3MiCisuUEQgMAorLklQICJcZkJcLWZlbmFibGVcLXRyZWVcLVxmUlxmSXBhc3NcZlJcZkI9XGZSXGZJcmFuZ2UtbGlzdFxmUiIgNAorLklYIEl0ZW0gIi1mZW5hYmxlLXRyZWUtcGFzcz1yYW5nZS1saXN0IgorLlBECitFbmFibGUgdHJlZSBwYXNzIFxmSXBhc3NcZlIuICBTZWUgXGZCXC1mZGlzYWJsZVwtcnRsXGZSIGZvciB0aGUgZGVzY3JpcHRpb24KK29mIG9wdGlvbiBhcmd1bWVudHMuCisuUkUKKy5SUyA0CisuU3AKK0hlcmUgYXJlIHNvbWUgZXhhbXBsZXMgc2hvd2luZyB1c2VzIG9mIHRoZXNlIG9wdGlvbnMuCisuU3AKKy5WYiAxMAorXCYgICAgICAgICMgZGlzYWJsZSBjY3AxIGZvciBhbGwgZnVuY3Rpb25zCitcJiAgICAgICAgICAgXC1mZGlzYWJsZVwtdHJlZVwtY2NwMQorXCYgICAgICAgICMgZGlzYWJsZSBjb21wbGV0ZSB1bnJvbGwgZm9yIGZ1bmN0aW9uIHdob3NlIGNncmFwaCBub2RlIHVpZCBpcyAxCitcJiAgICAgICAgICAgXC1mZW5hYmxlXC10cmVlXC1jdW5yb2xsPTEKK1wmICAgICAgICAjIGRpc2FibGUgZ2NzZTIgZm9yIGZ1bmN0aW9ucyBhdCB0aGUgZm9sbG93aW5nIHJhbmdlcyBbMSwxXSwKK1wmICAgICAgICAjIFszMDAsNDAwXSwgYW5kIFs0MDAsMTAwMF0KK1wmICAgICAgICAjIGRpc2FibGUgZ2NzZTIgZm9yIGZ1bmN0aW9ucyBmb28gYW5kIGZvbzIKK1wmICAgICAgICAgICBcLWZkaXNhYmxlXC1ydGxcLWdjc2UyPWZvbyxmb28yCitcJiAgICAgICAgIyBkaXNhYmxlIGVhcmx5IGlubGluaW5nCitcJiAgICAgICAgICAgXC1mZGlzYWJsZVwtdHJlZVwtZWlubGluZQorXCYgICAgICAgICMgZGlzYWJsZSBpcGEgaW5saW5pbmcKK1wmICAgICAgICAgICBcLWZkaXNhYmxlXC1pcGFcLWlubGluZQorXCYgICAgICAgICMgZW5hYmxlIHRyZWUgZnVsbCB1bnJvbGwKK1wmICAgICAgICAgICBcLWZlbmFibGVcLXRyZWVcLXVucm9sbAorLlZlCisuUkUKKy5JUCAiXGZCXC1kXGZSXGZJbGV0dGVyc1xmUiIgNAorLklYIEl0ZW0gIi1kbGV0dGVycyIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtXGZSXGZJcGFzc1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtcGFzcyIKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1cZlJcZklwYXNzXGZSXGZCPVxmUlxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1wYXNzPWZpbGVuYW1lIgorLlBECitTYXlzIHRvIG1ha2UgZGVidWdnaW5nIGR1bXBzIGR1cmluZyBjb21waWxhdGlvbiBhdCB0aW1lcyBzcGVjaWZpZWQgYnkKK1wmXGZJbGV0dGVyc1xmUi4gIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nIHRoZSBSVEwtYmFzZWQgcGFzc2VzIG9mIHRoZQorY29tcGlsZXIuICBUaGUgZmlsZSBuYW1lcyBmb3IgbW9zdCBvZiB0aGUgZHVtcHMgYXJlIG1hZGUgYnkgYXBwZW5kaW5nCithIHBhc3MgbnVtYmVyIGFuZCBhIHdvcmQgdG8gdGhlIFxmSWR1bXBuYW1lXGZSLCBhbmQgdGhlIGZpbGVzIGFyZQorY3JlYXRlZCBpbiB0aGUgZGlyZWN0b3J5IG9mIHRoZSBvdXRwdXQgZmlsZS4gSW4gY2FzZSBvZgorXCZcZkI9XGZSXGZJZmlsZW5hbWVcZlIgb3B0aW9uLCB0aGUgZHVtcCBpcyBvdXRwdXQgb24gdGhlIGdpdmVuIGZpbGUKK2luc3RlYWQgb2YgdGhlIHBhc3MgbnVtYmVyZWQgZHVtcCBmaWxlcy4gTm90ZSB0aGF0IHRoZSBwYXNzIG51bWJlciBpcworY29tcHV0ZWQgc3RhdGljYWxseSBhcyBwYXNzZXMgZ2V0IHJlZ2lzdGVyZWQgaW50byB0aGUgcGFzcyBtYW5hZ2VyLgorVGh1cyB0aGUgbnVtYmVyaW5nIGlzIG5vdCByZWxhdGVkIHRvIHRoZSBkeW5hbWljIG9yZGVyIG9mIGV4ZWN1dGlvbiBvZgorcGFzc2VzLiAgSW4gcGFydGljdWxhciwgYSBwYXNzIGluc3RhbGxlZCBieSBhIHBsdWdpbiBjb3VsZCBoYXZlIGEKK251bWJlciBvdmVyIDIwMCBldmVuIGlmIGl0IGV4ZWN1dGVkIHF1aXRlIGVhcmx5LiAgXGZJZHVtcG5hbWVcZlIgaXMKK2dlbmVyYXRlZCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZmlsZSwgaWYgZXhwbGljaXRseSBzcGVjaWZpZWQKK2FuZCBpdCBpcyBub3QgYW4gZXhlY3V0YWJsZSwgb3RoZXJ3aXNlIGl0IGlzIHRoZSBiYXNlbmFtZSBvZiB0aGUKK3NvdXJjZSBmaWxlLiBUaGVzZSBzd2l0Y2hlcyBtYXkgaGF2ZSBkaWZmZXJlbnQgZWZmZWN0cyB3aGVuCitcJlxmQlwtRVxmUiBpcyB1c2VkIGZvciBwcmVwcm9jZXNzaW5nLgorLlNwCitEZWJ1ZyBkdW1wcyBjYW4gYmUgZW5hYmxlZCB3aXRoIGEgXGZCXC1mZHVtcFwtcnRsXGZSIHN3aXRjaCBvciBzb21lCitcJlxmQlwtZFxmUiBvcHRpb24gXGZJbGV0dGVyc1xmUi4gIEhlcmUgYXJlIHRoZSBwb3NzaWJsZQorbGV0dGVycyBmb3IgdXNlIGluIFxmSXBhc3NcZlIgYW5kIFxmSWxldHRlcnNcZlIsIGFuZCB0aGVpciBtZWFuaW5nczoKKy5SUyA0CisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtYWxpZ25tZW50c1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtYWxpZ25tZW50cyIKK0R1bXAgYWZ0ZXIgYnJhbmNoIGFsaWdubWVudHMgaGF2ZSBiZWVuIGNvbXB1dGVkLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWFzbWNvbnNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWFzbWNvbnMiCitEdW1wIGFmdGVyIGZpeGluZyBydGwgc3RhdGVtZW50cyB0aGF0IGhhdmUgdW5zYXRpc2ZpZWQgaW4vb3V0IGNvbnN0cmFpbnRzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWF1dG9faW5jX2RlY1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtYXV0b19pbmNfZGVjIgorRHVtcCBhZnRlciBhdXRvLWluYy1kZWMgZGlzY292ZXJ5LiAgVGhpcyBwYXNzIGlzIG9ubHkgcnVuIG9uCithcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBhdXRvIGluYyBvciBhdXRvIGRlYyBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtYmFycmllcnNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWJhcnJpZXJzIgorRHVtcCBhZnRlciBjbGVhbmluZyB1cCB0aGUgYmFycmllciBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtYmJwYXJ0XGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1iYnBhcnQiCitEdW1wIGFmdGVyIHBhcnRpdGlvbmluZyBob3QgYW5kIGNvbGQgYmFzaWMgYmxvY2tzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWJicm9cZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWJicm8iCitEdW1wIGFmdGVyIGJsb2NrIHJlb3JkZXJpbmcuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtYnRsMVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtYnRsMSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtYnRsMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtYnRsMiIKKy5QRAorXCZcZkJcLWZkdW1wXC1ydGxcLWJ0bDFcZlIgYW5kIFxmQlwtZmR1bXBcLXJ0bFwtYnRsMlxmUiBlbmFibGUgZHVtcGluZworYWZ0ZXIgdGhlIHR3byBicmFuY2gKK3RhcmdldCBsb2FkIG9wdGltaXphdGlvbiBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtYnlwYXNzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1ieXBhc3MiCitEdW1wIGFmdGVyIGp1bXAgYnlwYXNzaW5nIGFuZCBjb250cm9sIGZsb3cgb3B0aW1pemF0aW9ucy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1jb21iaW5lXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1jb21iaW5lIgorRHVtcCBhZnRlciB0aGUgXHMtMVJUTFxzMCBpbnN0cnVjdGlvbiBjb21iaW5hdGlvbiBwYXNzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWNvbXBnb3Rvc1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY29tcGdvdG9zIgorRHVtcCBhZnRlciBkdXBsaWNhdGluZyB0aGUgY29tcHV0ZWQgZ290b3MuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtY2UxXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1jZTEiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLWNlMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY2UyIgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWNlM1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY2UzIgorLlBECitcJlxmQlwtZmR1bXBcLXJ0bFwtY2UxXGZSLCBcZkJcLWZkdW1wXC1ydGxcLWNlMlxmUiwgYW5kCitcJlxmQlwtZmR1bXBcLXJ0bFwtY2UzXGZSIGVuYWJsZSBkdW1waW5nIGFmdGVyIHRoZSB0aHJlZQoraWYgY29udmVyc2lvbiBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtY3Byb3BfaGFyZHJlZ1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY3Byb3BfaGFyZHJlZyIKK0R1bXAgYWZ0ZXIgaGFyZCByZWdpc3RlciBjb3B5IHByb3BhZ2F0aW9uLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWNzYVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY3NhIgorRHVtcCBhZnRlciBjb21iaW5pbmcgc3RhY2sgYWRqdXN0bWVudHMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtY3NlMVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY3NlMSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtY3NlMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtY3NlMiIKKy5QRAorXCZcZkJcLWZkdW1wXC1ydGxcLWNzZTFcZlIgYW5kIFxmQlwtZmR1bXBcLXJ0bFwtY3NlMlxmUiBlbmFibGUgZHVtcGluZyBhZnRlcgordGhlIHR3byBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZGNlXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1kY2UiCitEdW1wIGFmdGVyIHRoZSBzdGFuZGFsb25lIGRlYWQgY29kZSBlbGltaW5hdGlvbiBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZGJyXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1kYnIiCitEdW1wIGFmdGVyIGRlbGF5ZWQgYnJhbmNoIHNjaGVkdWxpbmcuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZGNlMVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtZGNlMSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZGNlMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtZGNlMiIKKy5QRAorXCZcZkJcLWZkdW1wXC1ydGxcLWRjZTFcZlIgYW5kIFxmQlwtZmR1bXBcLXJ0bFwtZGNlMlxmUiBlbmFibGUgZHVtcGluZyBhZnRlcgordGhlIHR3byBkZWFkIHN0b3JlIGVsaW1pbmF0aW9uIHBhc3Nlcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1laFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtZWgiCitEdW1wIGFmdGVyIGZpbmFsaXphdGlvbiBvZiBccy0xRUhcczAgaGFuZGxpbmcgY29kZS4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1laF9yYW5nZXNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWVoX3JhbmdlcyIKK0R1bXAgYWZ0ZXIgY29udmVyc2lvbiBvZiBccy0xRUhcczAgaGFuZGxpbmcgcmFuZ2UgcmVnaW9ucy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1leHBhbmRcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWV4cGFuZCIKK0R1bXAgYWZ0ZXIgXHMtMVJUTFxzMCBnZW5lcmF0aW9uLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWZ3cHJvcDFcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWZ3cHJvcDEiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLWZ3cHJvcDJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWZ3cHJvcDIiCisuUEQKK1wmXGZCXC1mZHVtcFwtcnRsXC1md3Byb3AxXGZSIGFuZCBcZkJcLWZkdW1wXC1ydGxcLWZ3cHJvcDJcZlIgZW5hYmxlCitkdW1waW5nIGFmdGVyIHRoZSB0d28gZm9yd2FyZCBwcm9wYWdhdGlvbiBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtZ2NzZTFcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWdjc2UxIgorLlBEIDAKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1nY3NlMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtZ2NzZTIiCisuUEQKK1wmXGZCXC1mZHVtcFwtcnRsXC1nY3NlMVxmUiBhbmQgXGZCXC1mZHVtcFwtcnRsXC1nY3NlMlxmUiBlbmFibGUgZHVtcGluZworYWZ0ZXIgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWluaXRcLXJlZ3NcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWluaXQtcmVncyIKK0R1bXAgYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSByZWdpc3RlcnMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtaW5pdHZhbHNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWluaXR2YWxzIgorRHVtcCBhZnRlciB0aGUgY29tcHV0YXRpb24gb2YgdGhlIGluaXRpYWwgdmFsdWUgc2V0cy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1pbnRvX2NmZ2xheW91dFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtaW50b19jZmdsYXlvdXQiCitEdW1wIGFmdGVyIGNvbnZlcnRpbmcgdG8gY2ZnbGF5b3V0IG1vZGUuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtaXJhXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1pcmEiCitEdW1wIGFmdGVyIGl0ZXJhdGVkIHJlZ2lzdGVyIGFsbG9jYXRpb24uCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtanVtcFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtanVtcCIKK0R1bXAgYWZ0ZXIgdGhlIHNlY29uZCBqdW1wIG9wdGltaXphdGlvbi4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1sb29wMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtbG9vcDIiCitcJlxmQlwtZmR1bXBcLXJ0bFwtbG9vcDJcZlIgZW5hYmxlcyBkdW1waW5nIGFmdGVyIHRoZSBydGwKK2xvb3Agb3B0aW1pemF0aW9uIHBhc3Nlcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1tYWNoXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1tYWNoIgorRHVtcCBhZnRlciBwZXJmb3JtaW5nIHRoZSBtYWNoaW5lIGRlcGVuZGVudCByZW9yZ2FuaXphdGlvbiBwYXNzLCBpZiB0aGF0CitwYXNzIGV4aXN0cy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1tb2RlX3N3XGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1tb2RlX3N3IgorRHVtcCBhZnRlciByZW1vdmluZyByZWR1bmRhbnQgbW9kZSBzd2l0Y2hlcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1ybnJlZ1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtcm5yZWciCitEdW1wIGFmdGVyIHJlZ2lzdGVyIHJlbnVtYmVyaW5nLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLW91dG9mX2NmZ2xheW91dFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtb3V0b2ZfY2ZnbGF5b3V0IgorRHVtcCBhZnRlciBjb252ZXJ0aW5nIGZyb20gY2ZnbGF5b3V0IG1vZGUuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtcGVlcGhvbGUyXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1wZWVwaG9sZTIiCitEdW1wIGFmdGVyIHRoZSBwZWVwaG9sZSBwYXNzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXBvc3RyZWxvYWRcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXBvc3RyZWxvYWQiCitEdW1wIGFmdGVyIHBvc3QtcmVsb2FkIG9wdGltaXphdGlvbnMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtcHJvX2FuZF9lcGlsb2d1ZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtcHJvX2FuZF9lcGlsb2d1ZSIKK0R1bXAgYWZ0ZXIgZ2VuZXJhdGluZyB0aGUgZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtcmVnbW92ZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtcmVnbW92ZSIKK0R1bXAgYWZ0ZXIgdGhlIHJlZ2lzdGVyIG1vdmUgcGFzcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zY2hlZDFcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXNjaGVkMSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc2NoZWQyXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zY2hlZDIiCisuUEQKK1wmXGZCXC1mZHVtcFwtcnRsXC1zY2hlZDFcZlIgYW5kIFxmQlwtZmR1bXBcLXJ0bFwtc2NoZWQyXGZSIGVuYWJsZSBkdW1waW5nCithZnRlciB0aGUgYmFzaWMgYmxvY2sgc2NoZWR1bGluZyBwYXNzZXMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc2VlXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zZWUiCitEdW1wIGFmdGVyIHNpZ24gZXh0ZW5zaW9uIGVsaW1pbmF0aW9uLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXNlcWFic3RyXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zZXFhYnN0ciIKK0R1bXAgYWZ0ZXIgY29tbW9uIHNlcXVlbmNlIGRpc2NvdmVyeS4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zaG9ydGVuXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zaG9ydGVuIgorRHVtcCBhZnRlciBzaG9ydGVuaW5nIGJyYW5jaGVzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXNpYmxpbmdcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXNpYmxpbmciCitEdW1wIGFmdGVyIHNpYmxpbmcgY2FsbCBvcHRpbWl6YXRpb25zLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXNwbGl0MVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc3BsaXQxIgorLlBEIDAKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDJcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXNwbGl0MiIKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXNwbGl0MyIKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDRcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXNwbGl0NCIKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDVcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXNwbGl0NSIKKy5QRAorXCZcZkJcLWZkdW1wXC1ydGxcLXNwbGl0MVxmUiwgXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDJcZlIsCitcJlxmQlwtZmR1bXBcLXJ0bFwtc3BsaXQzXGZSLCBcZkJcLWZkdW1wXC1ydGxcLXNwbGl0NFxmUiBhbmQKK1wmXGZCXC1mZHVtcFwtcnRsXC1zcGxpdDVcZlIgZW5hYmxlIGR1bXBpbmcgYWZ0ZXIgZml2ZSByb3VuZHMgb2YKK2luc3RydWN0aW9uIHNwbGl0dGluZy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zbXNcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXNtcyIKK0R1bXAgYWZ0ZXIgbW9kdWxvIHNjaGVkdWxpbmcuICBUaGlzIHBhc3MgaXMgb25seSBydW4gb24gc29tZQorYXJjaGl0ZWN0dXJlcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zdGFja1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc3RhY2siCitEdW1wIGFmdGVyIGNvbnZlcnNpb24gZnJvbSBccy0xR0NDXHMwJ3MgXCooTCJmbGF0IHJlZ2lzdGVyIGZpbGVcKihSIiByZWdpc3RlcnMgdG8gdGhlCit4ODcncyBzdGFjay1saWtlIHJlZ2lzdGVycy4gIFRoaXMgcGFzcyBpcyBvbmx5IHJ1biBvbiB4ODYgdmFyaWFudHMuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc3VicmVnMVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc3VicmVnMSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtc3VicmVnMlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtc3VicmVnMiIKKy5QRAorXCZcZkJcLWZkdW1wXC1ydGxcLXN1YnJlZzFcZlIgYW5kIFxmQlwtZmR1bXBcLXJ0bFwtc3VicmVnMlxmUiBlbmFibGUgZHVtcGluZyBhZnRlcgordGhlIHR3byBzdWJyZWcgZXhwYW5zaW9uIHBhc3Nlcy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC11bnNoYXJlXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC11bnNoYXJlIgorRHVtcCBhZnRlciBhbGwgcnRsIGhhcyBiZWVuIHVuc2hhcmVkLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXZhcnRyYWNrXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC12YXJ0cmFjayIKK0R1bXAgYWZ0ZXIgdmFyaWFibGUgdHJhY2tpbmcuCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtdnJlZ3NcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLXZyZWdzIgorRHVtcCBhZnRlciBjb252ZXJ0aW5nIHZpcnR1YWwgcmVnaXN0ZXJzIHRvIGhhcmQgcmVnaXN0ZXJzLgorLklQICJcZkJcLWZkdW1wXC1ydGxcLXdlYlxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtd2ViIgorRHVtcCBhZnRlciBsaXZlIHJhbmdlIHNwbGl0dGluZy4KKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1yZWdjbGFzc1xmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtcmVnY2xhc3MiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1ydGxcLXN1YnJlZ3Nfb2ZfbW9kZV9pbml0XGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zdWJyZWdzX29mX21vZGVfaW5pdCIKKy5JUCAiXGZCXC1mZHVtcFwtcnRsXC1zdWJyZWdzX29mX21vZGVfZmluaXNoXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1zdWJyZWdzX29mX21vZGVfZmluaXNoIgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWRmaW5pdFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1ydGwtZGZpbml0IgorLklQICJcZkJcLWZkdW1wXC1ydGxcLWRmaW5pc2hcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtcnRsLWRmaW5pc2giCisuUEQKK1RoZXNlIGR1bXBzIGFyZSBkZWZpbmVkIGJ1dCBhbHdheXMgcHJvZHVjZSBlbXB0eSBmaWxlcy4KKy5JUCAiXGZCXC1kYVxmUiIgNAorLklYIEl0ZW0gIi1kYSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXJ0bFwtYWxsXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXJ0bC1hbGwiCisuUEQKK1Byb2R1Y2UgYWxsIHRoZSBkdW1wcyBsaXN0ZWQgYWJvdmUuCisuSVAgIlxmQlwtZEFcZlIiIDQKKy5JWCBJdGVtICItZEEiCitBbm5vdGF0ZSB0aGUgYXNzZW1ibGVyIG91dHB1dCB3aXRoIG1pc2NlbGxhbmVvdXMgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorLklQICJcZkJcLWREXGZSIiA0CisuSVggSXRlbSAiLWREIgorRHVtcCBhbGwgbWFjcm8gZGVmaW5pdGlvbnMsIGF0IHRoZSBlbmQgb2YgcHJlcHJvY2Vzc2luZywgaW4gYWRkaXRpb24gdG8KK25vcm1hbCBvdXRwdXQuCisuSVAgIlxmQlwtZEhcZlIiIDQKKy5JWCBJdGVtICItZEgiCitQcm9kdWNlIGEgY29yZSBkdW1wIHdoZW5ldmVyIGFuIGVycm9yIG9jY3Vycy4KKy5JUCAiXGZCXC1kcFxmUiIgNAorLklYIEl0ZW0gIi1kcCIKK0Fubm90YXRlIHRoZSBhc3NlbWJsZXIgb3V0cHV0IHdpdGggYSBjb21tZW50IGluZGljYXRpbmcgd2hpY2gKK3BhdHRlcm4gYW5kIGFsdGVybmF0aXZlIGlzIHVzZWQuICBUaGUgbGVuZ3RoIG9mIGVhY2ggaW5zdHJ1Y3Rpb24gaXMKK2Fsc28gcHJpbnRlZC4KKy5JUCAiXGZCXC1kUFxmUiIgNAorLklYIEl0ZW0gIi1kUCIKK0R1bXAgdGhlIFxzLTFSVExcczAgaW4gdGhlIGFzc2VtYmxlciBvdXRwdXQgYXMgYSBjb21tZW50IGJlZm9yZSBlYWNoIGluc3RydWN0aW9uLgorQWxzbyB0dXJucyBvbiBcZkJcLWRwXGZSIGFubm90YXRpb24uCisuSVAgIlxmQlwtZHhcZlIiIDQKKy5JWCBJdGVtICItZHgiCitKdXN0IGdlbmVyYXRlIFxzLTFSVExcczAgZm9yIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBjb21waWxpbmcgaXQuICBVc3VhbGx5IHVzZWQKK3dpdGggXGZCXC1mZHVtcFwtcnRsXC1leHBhbmRcZlIuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1mZHVtcFwtbm9hZGRyXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLW5vYWRkciIKK1doZW4gZG9pbmcgZGVidWdnaW5nIGR1bXBzLCBzdXBwcmVzcyBhZGRyZXNzIG91dHB1dC4gIFRoaXMgbWFrZXMgaXQgbW9yZQorZmVhc2libGUgdG8gdXNlIGRpZmYgb24gZGVidWdnaW5nIGR1bXBzIGZvciBjb21waWxlciBpbnZvY2F0aW9ucyB3aXRoCitkaWZmZXJlbnQgY29tcGlsZXIgYmluYXJpZXMgYW5kL29yIGRpZmZlcmVudAordGV4dCAvIGJzcyAvIGRhdGEgLyBoZWFwIC8gc3RhY2sgLyBkc28gc3RhcnQgbG9jYXRpb25zLgorLklQICJcZkJcLWZkdW1wXC11bm51bWJlcmVkXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXVubnVtYmVyZWQiCitXaGVuIGRvaW5nIGRlYnVnZ2luZyBkdW1wcywgc3VwcHJlc3MgaW5zdHJ1Y3Rpb24gbnVtYmVycyBhbmQgYWRkcmVzcyBvdXRwdXQuCitUaGlzIG1ha2VzIGl0IG1vcmUgZmVhc2libGUgdG8gdXNlIGRpZmYgb24gZGVidWdnaW5nIGR1bXBzIGZvciBjb21waWxlcgoraW52b2NhdGlvbnMgd2l0aCBkaWZmZXJlbnQgb3B0aW9ucywgaW4gcGFydGljdWxhciB3aXRoIGFuZCB3aXRob3V0CitcJlxmQlwtZ1xmUi4KKy5JUCAiXGZCXC1mZHVtcFwtdW5udW1iZXJlZFwtbGlua3NcZlIiIDQKKy5JWCBJdGVtICItZmR1bXAtdW5udW1iZXJlZC1saW5rcyIKK1doZW4gZG9pbmcgZGVidWdnaW5nIGR1bXBzIChzZWUgXGZCXC1kXGZSIG9wdGlvbiBhYm92ZSksIHN1cHByZXNzCitpbnN0cnVjdGlvbiBudW1iZXJzIGZvciB0aGUgbGlua3MgdG8gdGhlIHByZXZpb3VzIGFuZCBuZXh0IGluc3RydWN0aW9ucworaW4gYSBzZXF1ZW5jZS4KKy5JUCAiXGZCXC1mZHVtcFwtdHJhbnNsYXRpb25cLXVuaXRcZlIgKFwqKEMrIG9ubHkpIiA0CisuSVggSXRlbSAiLWZkdW1wLXRyYW5zbGF0aW9uLXVuaXQgKCBvbmx5KSIKKy5QRCAwCisuSVAgIlxmQlwtZmR1bXBcLXRyYW5zbGF0aW9uXC11bml0XC1cZlJcZklvcHRpb25zXGZSXGZCIFxmUihcKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1mZHVtcC10cmFuc2xhdGlvbi11bml0LW9wdGlvbnMgKCBvbmx5KSIKKy5QRAorRHVtcCBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmVlIHN0cnVjdHVyZSBmb3IgdGhlIGVudGlyZSB0cmFuc2xhdGlvbgordW5pdCB0byBhIGZpbGUuICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS50dVxmUiB0byB0aGUKK3NvdXJjZSBmaWxlIG5hbWUsIGFuZCB0aGUgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKK291dHB1dCBmaWxlLiAgSWYgdGhlIFxmQlwtXGZSXGZJb3B0aW9uc1xmUiBmb3JtIGlzIHVzZWQsIFxmSW9wdGlvbnNcZlIKK2NvbnRyb2xzIHRoZSBkZXRhaWxzIG9mIHRoZSBkdW1wIGFzIGRlc2NyaWJlZCBmb3IgdGhlCitcJlxmQlwtZmR1bXBcLXRyZWVcZlIgb3B0aW9ucy4KKy5JUCAiXGZCXC1mZHVtcFwtY2xhc3NcLWhpZXJhcmNoeVxmUiAoXCooQysgb25seSkiIDQKKy5JWCBJdGVtICItZmR1bXAtY2xhc3MtaGllcmFyY2h5ICggb25seSkiCisuUEQgMAorLklQICJcZkJcLWZkdW1wXC1jbGFzc1wtaGllcmFyY2h5XC1cZlJcZklvcHRpb25zXGZSXGZCIFxmUihcKihDKyBvbmx5KSIgNAorLklYIEl0ZW0gIi1mZHVtcC1jbGFzcy1oaWVyYXJjaHktb3B0aW9ucyAoIG9ubHkpIgorLlBECitEdW1wIGEgcmVwcmVzZW50YXRpb24gb2YgZWFjaCBjbGFzcydzIGhpZXJhcmNoeSBhbmQgdmlydHVhbCBmdW5jdGlvbgordGFibGUgbGF5b3V0IHRvIGEgZmlsZS4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcKK1wmXGZJLmNsYXNzXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLCBhbmQgdGhlIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUKK3NhbWUgZGlyZWN0b3J5IGFzIHRoZSBvdXRwdXQgZmlsZS4gIElmIHRoZSBcZkJcLVxmUlxmSW9wdGlvbnNcZlIgZm9ybQoraXMgdXNlZCwgXGZJb3B0aW9uc1xmUiBjb250cm9scyB0aGUgZGV0YWlscyBvZiB0aGUgZHVtcCBhcyBkZXNjcmliZWQKK2ZvciB0aGUgXGZCXC1mZHVtcFwtdHJlZVxmUiBvcHRpb25zLgorLklQICJcZkJcLWZkdW1wXC1pcGFcLVxmUlxmSXN3aXRjaFxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1pcGEtc3dpdGNoIgorQ29udHJvbCB0aGUgZHVtcGluZyBhdCB2YXJpb3VzIHN0YWdlcyBvZiBpbnRlci1wcm9jZWR1cmFsIGFuYWx5c2lzCitsYW5ndWFnZSB0cmVlIHRvIGEgZmlsZS4gIFRoZSBmaWxlIG5hbWUgaXMgZ2VuZXJhdGVkIGJ5IGFwcGVuZGluZyBhCitzd2l0Y2ggc3BlY2lmaWMgc3VmZml4IHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLCBhbmQgdGhlIGZpbGUgaXMgY3JlYXRlZAoraW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBvdXRwdXQgZmlsZS4gIFRoZSBmb2xsb3dpbmcgZHVtcHMgYXJlCitwb3NzaWJsZToKKy5SUyA0CisuSVAgIlxmQmFsbFxmUiIgNAorLklYIEl0ZW0gImFsbCIKK0VuYWJsZXMgYWxsIGludGVyLXByb2NlZHVyYWwgYW5hbHlzaXMgZHVtcHMuCisuSVAgIlxmQmNncmFwaFxmUiIgNAorLklYIEl0ZW0gImNncmFwaCIKK0R1bXBzIGluZm9ybWF0aW9uIGFib3V0IGNhbGwtZ3JhcGggb3B0aW1pemF0aW9uLCB1bnVzZWQgZnVuY3Rpb24gcmVtb3ZhbCwKK2FuZCBpbmxpbmluZyBkZWNpc2lvbnMuCisuSVAgIlxmQmlubGluZVxmUiIgNAorLklYIEl0ZW0gImlubGluZSIKK0R1bXAgYWZ0ZXIgZnVuY3Rpb24gaW5saW5pbmcuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1mZHVtcFwtcGFzc2VzXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXBhc3NlcyIKK0R1bXAgdGhlIGxpc3Qgb2Ygb3B0aW1pemF0aW9uIHBhc3NlcyB0aGF0IGFyZSB0dXJuZWQgb24gYW5kIG9mZiBieQordGhlIGN1cnJlbnQgY29tbWFuZC1saW5lIG9wdGlvbnMuCisuSVAgIlxmQlwtZmR1bXBcLXN0YXRpc3RpY3NcLVxmUlxmSW9wdGlvblxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1zdGF0aXN0aWNzLW9wdGlvbiIKK0VuYWJsZSBhbmQgY29udHJvbCBkdW1waW5nIG9mIHBhc3Mgc3RhdGlzdGljcyBpbiBhIHNlcGFyYXRlIGZpbGUuICBUaGUKK2ZpbGUgbmFtZSBpcyBnZW5lcmF0ZWQgYnkgYXBwZW5kaW5nIGEgc3VmZml4IGVuZGluZyBpbgorXCZcZkIuc3RhdGlzdGljc1xmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZSwgYW5kIHRoZSBmaWxlIGlzIGNyZWF0ZWQgaW4KK3RoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3V0cHV0IGZpbGUuICBJZiB0aGUgXGZCXC1cZlJcZklvcHRpb25cZlIKK2Zvcm0gaXMgdXNlZCwgXGZCXC1zdGF0c1xmUiBjYXVzZXMgY291bnRlcnMgdG8gYmUgc3VtbWVkIG92ZXIgdGhlCit3aG9sZSBjb21waWxhdGlvbiB1bml0IHdoaWxlIFxmQlwtZGV0YWlsc1xmUiBkdW1wcyBldmVyeSBldmVudCBhcwordGhlIHBhc3NlcyBnZW5lcmF0ZSB0aGVtLiAgVGhlIGRlZmF1bHQgd2l0aCBubyBvcHRpb24gaXMgdG8gc3VtCitjb3VudGVycyBmb3IgZWFjaCBmdW5jdGlvbiBjb21waWxlZC4KKy5JUCAiXGZCXC1mZHVtcFwtdHJlZVwtXGZSXGZJc3dpdGNoXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXRyZWUtc3dpdGNoIgorLlBEIDAKKy5JUCAiXGZCXC1mZHVtcFwtdHJlZVwtXGZSXGZJc3dpdGNoXGZSXGZCXC1cZlJcZklvcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLXRyZWUtc3dpdGNoLW9wdGlvbnMiCisuSVAgIlxmQlwtZmR1bXBcLXRyZWVcLVxmUlxmSXN3aXRjaFxmUlxmQlwtXGZSXGZJb3B0aW9uc1xmUlxmQj1cZlJcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC10cmVlLXN3aXRjaC1vcHRpb25zPWZpbGVuYW1lIgorLlBECitDb250cm9sIHRoZSBkdW1waW5nIGF0IHZhcmlvdXMgc3RhZ2VzIG9mIHByb2Nlc3NpbmcgdGhlIGludGVybWVkaWF0ZQorbGFuZ3VhZ2UgdHJlZSB0byBhIGZpbGUuICBUaGUgZmlsZSBuYW1lIGlzIGdlbmVyYXRlZCBieSBhcHBlbmRpbmcgYQorc3dpdGNoLXNwZWNpZmljIHN1ZmZpeCB0byB0aGUgc291cmNlIGZpbGUgbmFtZSwgYW5kIHRoZSBmaWxlIGlzCitjcmVhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3V0cHV0IGZpbGUuIEluIGNhc2Ugb2YKK1wmXGZCPVxmUlxmSWZpbGVuYW1lXGZSIG9wdGlvbiwgdGhlIGR1bXAgaXMgb3V0cHV0IG9uIHRoZSBnaXZlbiBmaWxlCitpbnN0ZWFkIG9mIHRoZSBhdXRvIG5hbWVkIGR1bXAgZmlsZXMuICBJZiB0aGUgXGZCXC1cZlJcZklvcHRpb25zXGZSCitmb3JtIGlzIHVzZWQsIFxmSW9wdGlvbnNcZlIgaXMgYSBsaXN0IG9mIFxmQlwtXGZSIHNlcGFyYXRlZCBvcHRpb25zCit3aGljaCBjb250cm9sIHRoZSBkZXRhaWxzIG9mIHRoZSBkdW1wLiAgTm90IGFsbCBvcHRpb25zIGFyZSBhcHBsaWNhYmxlCit0byBhbGwgZHVtcHM7IHRob3NlIHRoYXQgYXJlIG5vdCBtZWFuaW5nZnVsIGFyZSBpZ25vcmVkLiAgVGhlCitmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlCisuUlMgNAorLklQICJcZkJhZGRyZXNzXGZSIiA0CisuSVggSXRlbSAiYWRkcmVzcyIKK1ByaW50IHRoZSBhZGRyZXNzIG9mIGVhY2ggbm9kZS4gIFVzdWFsbHkgdGhpcyBpcyBub3QgbWVhbmluZ2Z1bCBhcyBpdAorY2hhbmdlcyBhY2NvcmRpbmcgdG8gdGhlIGVudmlyb25tZW50IGFuZCBzb3VyY2UgZmlsZS4gIEl0cyBwcmltYXJ5IHVzZQoraXMgZm9yIHR5aW5nIHVwIGEgZHVtcCBmaWxlIHdpdGggYSBkZWJ1ZyBlbnZpcm9ubWVudC4KKy5JUCAiXGZCYXNtbmFtZVxmUiIgNAorLklYIEl0ZW0gImFzbW5hbWUiCitJZiBcZihDV1wqKENgREVDTF9BU1NFTUJMRVJfTkFNRVwqKEMnXGZSIGhhcyBiZWVuIHNldCBmb3IgYSBnaXZlbiBkZWNsLCB1c2UgdGhhdAoraW4gdGhlIGR1bXAgaW5zdGVhZCBvZiBcZihDV1wqKENgREVDTF9OQU1FXCooQydcZlIuICBJdHMgcHJpbWFyeSB1c2UgaXMgZWFzZSBvZgordXNlIHdvcmtpbmcgYmFja3dhcmQgZnJvbSBtYW5nbGVkIG5hbWVzIGluIHRoZSBhc3NlbWJseSBmaWxlLgorLklQICJcZkJzbGltXGZSIiA0CisuSVggSXRlbSAic2xpbSIKK1doZW4gZHVtcGluZyBmcm9udC1lbmQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9ucywgaW5oaWJpdCBkdW1waW5nCitvZiBtZW1iZXJzIG9mIGEgc2NvcGUgb3IgYm9keSBvZiBhIGZ1bmN0aW9uIG1lcmVseSBiZWNhdXNlIHRoYXQgc2NvcGUKK2hhcyBiZWVuIHJlYWNoZWQuICBPbmx5IGR1bXAgc3VjaCBpdGVtcyB3aGVuIHRoZXkgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZQorYnkgc29tZSBvdGhlciBwYXRoLgorLlNwCitXaGVuIGR1bXBpbmcgcHJldHR5LXByaW50ZWQgdHJlZXMsIHRoaXMgb3B0aW9uIGluaGliaXRzIGR1bXBpbmcgdGhlCitib2RpZXMgb2YgY29udHJvbCBzdHJ1Y3R1cmVzLgorLlNwCitXaGVuIGR1bXBpbmcgXHMtMVJUTFxzMCwgcHJpbnQgdGhlIFxzLTFSVExcczAgaW4gc2xpbSAoY29uZGVuc2VkKSBmb3JtIGluc3RlYWQgb2YKK3RoZSBkZWZhdWx0IExJU1AtbGlrZSByZXByZXNlbnRhdGlvbi4KKy5JUCAiXGZCcmF3XGZSIiA0CisuSVggSXRlbSAicmF3IgorUHJpbnQgYSByYXcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUuICBCeSBkZWZhdWx0LCB0cmVlcyBhcmUKK3ByZXR0eS1wcmludGVkIGludG8gYSBDXC1saWtlIHJlcHJlc2VudGF0aW9uLgorLklQICJcZkJkZXRhaWxzXGZSIiA0CisuSVggSXRlbSAiZGV0YWlscyIKK0VuYWJsZSBtb3JlIGRldGFpbGVkIGR1bXBzIChub3QgaG9ub3JlZCBieSBldmVyeSBkdW1wIG9wdGlvbikuIEFsc28KK2luY2x1ZGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3B0aW1pemF0aW9uIHBhc3Nlcy4KKy5JUCAiXGZCc3RhdHNcZlIiIDQKKy5JWCBJdGVtICJzdGF0cyIKK0VuYWJsZSBkdW1waW5nIHZhcmlvdXMgc3RhdGlzdGljcyBhYm91dCB0aGUgcGFzcyAobm90IGhvbm9yZWQgYnkgZXZlcnkgZHVtcAorb3B0aW9uKS4KKy5JUCAiXGZCYmxvY2tzXGZSIiA0CisuSVggSXRlbSAiYmxvY2tzIgorRW5hYmxlIHNob3dpbmcgYmFzaWMgYmxvY2sgYm91bmRhcmllcyAoZGlzYWJsZWQgaW4gcmF3IGR1bXBzKS4KKy5JUCAiXGZCZ3JhcGhcZlIiIDQKKy5JWCBJdGVtICJncmFwaCIKK0ZvciBlYWNoIG9mIHRoZSBvdGhlciBpbmRpY2F0ZWQgZHVtcCBmaWxlcyAoXGZCXC1mZHVtcFwtcnRsXC1cZlJcZklwYXNzXGZSKSwKK2R1bXAgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbCBmbG93IGdyYXBoIHN1aXRhYmxlIGZvciB2aWV3aW5nIHdpdGgKK0dyYXBoVml6IHRvIFxmSVxmSWZpbGVcZkkuXGZJcGFzc2lkXGZJLlxmSXBhc3NcZkkuZG90XGZSLiAgRWFjaCBmdW5jdGlvbiBpbgordGhlIGZpbGUgaXMgcHJldHR5LXByaW50ZWQgYXMgYSBzdWJncmFwaCwgc28gdGhhdCBHcmFwaFZpeiBjYW4gcmVuZGVyIHRoZW0KK2FsbCBpbiBhIHNpbmdsZSBwbG90LgorLlNwCitUaGlzIG9wdGlvbiBjdXJyZW50bHkgb25seSB3b3JrcyBmb3IgXHMtMVJUTFxzMCBkdW1wcywgYW5kIHRoZSBccy0xUlRMXHMwIGlzIGFsd2F5cworZHVtcGVkIGluIHNsaW0gZm9ybS4KKy5JUCAiXGZCdm9wc1xmUiIgNAorLklYIEl0ZW0gInZvcHMiCitFbmFibGUgc2hvd2luZyB2aXJ0dWFsIG9wZXJhbmRzIGZvciBldmVyeSBzdGF0ZW1lbnQuCisuSVAgIlxmQmxpbmVub1xmUiIgNAorLklYIEl0ZW0gImxpbmVubyIKK0VuYWJsZSBzaG93aW5nIGxpbmUgbnVtYmVycyBmb3Igc3RhdGVtZW50cy4KKy5JUCAiXGZCdWlkXGZSIiA0CisuSVggSXRlbSAidWlkIgorRW5hYmxlIHNob3dpbmcgdGhlIHVuaXF1ZSBccy0xSURcczAgKFxmKENXXCooQ2BERUNMX1VJRFwqKEMnXGZSKSBmb3IgZWFjaCB2YXJpYWJsZS4KKy5JUCAiXGZCdmVyYm9zZVxmUiIgNAorLklYIEl0ZW0gInZlcmJvc2UiCitFbmFibGUgc2hvd2luZyB0aGUgdHJlZSBkdW1wIGZvciBlYWNoIHN0YXRlbWVudC4KKy5JUCAiXGZCZWhcZlIiIDQKKy5JWCBJdGVtICJlaCIKK0VuYWJsZSBzaG93aW5nIHRoZSBccy0xRUhcczAgcmVnaW9uIG51bWJlciBob2xkaW5nIGVhY2ggc3RhdGVtZW50LgorLklQICJcZkJzY2V2XGZSIiA0CisuSVggSXRlbSAic2NldiIKK0VuYWJsZSBzaG93aW5nIHNjYWxhciBldm9sdXRpb24gYW5hbHlzaXMgZGV0YWlscy4KKy5JUCAiXGZCb3B0aW1pemVkXGZSIiA0CisuSVggSXRlbSAib3B0aW1pemVkIgorRW5hYmxlIHNob3dpbmcgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIChvbmx5IGF2YWlsYWJsZSBpbiBjZXJ0YWluCitwYXNzZXMpLgorLklQICJcZkJtaXNzZWRcZlIiIDQKKy5JWCBJdGVtICJtaXNzZWQiCitFbmFibGUgc2hvd2luZyBtaXNzZWQgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uIChvbmx5IGF2YWlsYWJsZSBpbiBjZXJ0YWluCitwYXNzZXMpLgorLklQICJcZkJub3Rlc1xmUiIgNAorLklYIEl0ZW0gIm5vdGVzIgorRW5hYmxlIG90aGVyIGRldGFpbGVkIG9wdGltaXphdGlvbiBpbmZvcm1hdGlvbiAob25seSBhdmFpbGFibGUgaW4KK2NlcnRhaW4gcGFzc2VzKS4KKy5JUCAiXGZCPVxmUlxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiPWZpbGVuYW1lIgorSW5zdGVhZCBvZiBhbiBhdXRvIG5hbWVkIGR1bXAgZmlsZSwgb3V0cHV0IGludG8gdGhlIGdpdmVuIGZpbGUKK25hbWUuIFRoZSBmaWxlIG5hbWVzIFxmSXN0ZG91dFxmUiBhbmQgXGZJc3RkZXJyXGZSIGFyZSB0cmVhdGVkCitzcGVjaWFsbHkgYW5kIGFyZSBjb25zaWRlcmVkIGFscmVhZHkgb3BlbiBzdGFuZGFyZCBzdHJlYW1zLiBGb3IKK2V4YW1wbGUsCisuU3AKKy5WYiAyCitcJiAgICAgICAgZ2NjIFwtTzIgXC1mdHJlZVwtdmVjdG9yaXplIFwtZmR1bXBcLXRyZWVcLXZlY3RcLWJsb2Nrcz1mb28uZHVtcAorXCYgICAgICAgICAgICAgXC1mZHVtcFwtdHJlZVwtcHJlPXN0ZGVyciBmaWxlLmMKKy5WZQorLlNwCitvdXRwdXRzIHZlY3Rvcml6ZXIgZHVtcCBpbnRvIFxmSWZvby5kdW1wXGZSLCB3aGlsZSB0aGUgXHMtMVBSRVxzMCBkdW1wIGlzCitvdXRwdXQgb24gdG8gXGZJc3RkZXJyXGZSLiBJZiB0d28gY29uZmxpY3RpbmcgZHVtcCBmaWxlbmFtZXMgYXJlCitnaXZlbiBmb3IgdGhlIHNhbWUgcGFzcywgdGhlbiB0aGUgbGF0dGVyIG9wdGlvbiBvdmVycmlkZXMgdGhlIGVhcmxpZXIKK29uZS4KKy5JUCAiXGZCYWxsXGZSIiA0CisuSVggSXRlbSAiYWxsIgorVHVybiBvbiBhbGwgb3B0aW9ucywgZXhjZXB0IFxmQnJhd1xmUiwgXGZCc2xpbVxmUiwgXGZCdmVyYm9zZVxmUgorYW5kIFxmQmxpbmVub1xmUi4KKy5JUCAiXGZCb3B0YWxsXGZSIiA0CisuSVggSXRlbSAib3B0YWxsIgorVHVybiBvbiBhbGwgb3B0aW1pemF0aW9uIG9wdGlvbnMsIGkuZS4sIFxmQm9wdGltaXplZFxmUiwKK1wmXGZCbWlzc2VkXGZSLCBhbmQgXGZCbm90ZVxmUi4KKy5SRQorLlJTIDQKKy5TcAorVGhlIGZvbGxvd2luZyB0cmVlIGR1bXBzIGFyZSBwb3NzaWJsZToKKy5JUCAiXGZCb3JpZ2luYWxcZlIiIDQKKy5JWCBJdGVtICJvcmlnaW5hbCIKK0R1bXAgYmVmb3JlIGFueSB0cmVlIGJhc2VkIG9wdGltaXphdGlvbiwgdG8gXGZJXGZJZmlsZVxmSS5vcmlnaW5hbFxmUi4KKy5JUCAiXGZCb3B0aW1pemVkXGZSIiA0CisuSVggSXRlbSAib3B0aW1pemVkIgorRHVtcCBhZnRlciBhbGwgdHJlZSBiYXNlZCBvcHRpbWl6YXRpb24sIHRvIFxmSVxmSWZpbGVcZkkub3B0aW1pemVkXGZSLgorLklQICJcZkJnaW1wbGVcZlIiIDQKKy5JWCBJdGVtICJnaW1wbGUiCitEdW1wIGVhY2ggZnVuY3Rpb24gYmVmb3JlIGFuZCBhZnRlciB0aGUgZ2ltcGxpZmljYXRpb24gcGFzcyB0byBhIGZpbGUuICBUaGUKK2ZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBcZkkuZ2ltcGxlXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJjZmdcZlIiIDQKKy5JWCBJdGVtICJjZmciCitEdW1wIHRoZSBjb250cm9sIGZsb3cgZ3JhcGggb2YgZWFjaCBmdW5jdGlvbiB0byBhIGZpbGUuICBUaGUgZmlsZSBuYW1lIGlzCittYWRlIGJ5IGFwcGVuZGluZyBcZkkuY2ZnXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJjaFxmUiIgNAorLklYIEl0ZW0gImNoIgorRHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIGNvcHlpbmcgbG9vcCBoZWFkZXJzLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5CithcHBlbmRpbmcgXGZJLmNoXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJzc2FcZlIiIDQKKy5JWCBJdGVtICJzc2EiCitEdW1wIFxzLTFTU0FcczAgcmVsYXRlZCBpbmZvcm1hdGlvbiB0byBhIGZpbGUuICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nCitcJlxmSS5zc2FcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQmFsaWFzXGZSIiA0CisuSVggSXRlbSAiYWxpYXMiCitEdW1wIGFsaWFzaW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIGZ1bmN0aW9uLiAgVGhlIGZpbGUgbmFtZSBpcyBtYWRlIGJ5CithcHBlbmRpbmcgXGZJLmFsaWFzXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJjY3BcZlIiIDQKKy5JWCBJdGVtICJjY3AiCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgXHMtMUNDUFxzMC4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcKK1wmXGZJLmNjcFxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCc3RvcmVjY3BcZlIiIDQKKy5JWCBJdGVtICJzdG9yZWNjcCIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBTVE9SRS1DQ1AuICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nCitcJlxmSS5zdG9yZWNjcFxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCcHJlXGZSIiA0CisuSVggSXRlbSAicHJlIgorRHVtcCB0cmVlcyBhZnRlciBwYXJ0aWFsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24uICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUKK2J5IGFwcGVuZGluZyBcZkkucHJlXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJmcmVcZlIiIDQKKy5JWCBJdGVtICJmcmUiCitEdW1wIHRyZWVzIGFmdGVyIGZ1bGwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbi4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZQorYnkgYXBwZW5kaW5nIFxmSS5mcmVcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQmNvcHlwcm9wXGZSIiA0CisuSVggSXRlbSAiY29weXByb3AiCitEdW1wIHRyZWVzIGFmdGVyIGNvcHkgcHJvcGFnYXRpb24uICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUKK2J5IGFwcGVuZGluZyBcZkkuY29weXByb3BcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQnN0b3JlX2NvcHlwcm9wXGZSIiA0CisuSVggSXRlbSAic3RvcmVfY29weXByb3AiCitEdW1wIHRyZWVzIGFmdGVyIHN0b3JlIGNvcHktcHJvcGFnYXRpb24uICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUKK2J5IGFwcGVuZGluZyBcZkkuc3RvcmVfY29weXByb3BcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQmRjZVxmUiIgNAorLklYIEl0ZW0gImRjZSIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBkZWFkIGNvZGUgZWxpbWluYXRpb24uICBUaGUgZmlsZSBuYW1lIGlzIG1hZGUgYnkKK2FwcGVuZGluZyBcZkkuZGNlXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJtdWRmbGFwXGZSIiA0CisuSVggSXRlbSAibXVkZmxhcCIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhZGRpbmcgbXVkZmxhcCBpbnN0cnVtZW50YXRpb24uICBUaGUgZmlsZSBuYW1lIGlzCittYWRlIGJ5IGFwcGVuZGluZyBcZkkubXVkZmxhcFxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCc3JhXGZSIiA0CisuSVggSXRlbSAic3JhIgorRHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIHBlcmZvcm1pbmcgc2NhbGFyIHJlcGxhY2VtZW50IG9mIGFnZ3JlZ2F0ZXMuICBUaGUKK2ZpbGUgbmFtZSBpcyBtYWRlIGJ5IGFwcGVuZGluZyBcZkkuc3JhXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJzaW5rXGZSIiA0CisuSVggSXRlbSAic2luayIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBwZXJmb3JtaW5nIGNvZGUgc2lua2luZy4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZQorYnkgYXBwZW5kaW5nIFxmSS5zaW5rXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJkb21cZlIiIDQKKy5JWCBJdGVtICJkb20iCitEdW1wIGVhY2ggZnVuY3Rpb24gYWZ0ZXIgYXBwbHlpbmcgZG9taW5hdG9yIHRyZWUgb3B0aW1pemF0aW9ucy4gIFRoZSBmaWxlCituYW1lIGlzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS5kb21cZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQmRzZVxmUiIgNAorLklYIEl0ZW0gImRzZSIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyBkZWFkIHN0b3JlIGVsaW1pbmF0aW9uLiAgVGhlIGZpbGUKK25hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgXGZJLmRzZVxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCcGhpb3B0XGZSIiA0CisuSVggSXRlbSAicGhpb3B0IgorRHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIG9wdGltaXppbmcgXHMtMVBISVxzMCBub2RlcyBpbnRvIHN0cmFpZ2h0bGluZSBjb2RlLiAgVGhlIGZpbGUKK25hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgXGZJLnBoaW9wdFxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCZm9yd3Byb3BcZlIiIDQKKy5JWCBJdGVtICJmb3J3cHJvcCIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBmb3J3YXJkIHByb3BhZ2F0aW5nIHNpbmdsZSB1c2UgdmFyaWFibGVzLiAgVGhlIGZpbGUKK25hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgXGZJLmZvcndwcm9wXGZSIHRvIHRoZSBzb3VyY2UgZmlsZSBuYW1lLgorLklQICJcZkJjb3B5cmVuYW1lXGZSIiA0CisuSVggSXRlbSAiY29weXJlbmFtZSIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyB0aGUgY29weSByZW5hbWUgb3B0aW1pemF0aW9uLiAgVGhlIGZpbGUKK25hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgXGZJLmNvcHlyZW5hbWVcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQm5ydlxmUiIgNAorLklYIEl0ZW0gIm5ydiIKK0R1bXAgZWFjaCBmdW5jdGlvbiBhZnRlciBhcHBseWluZyB0aGUgbmFtZWQgcmV0dXJuIHZhbHVlIG9wdGltaXphdGlvbiBvbgorZ2VuZXJpYyB0cmVlcy4gIFRoZSBmaWxlIG5hbWUgaXMgbWFkZSBieSBhcHBlbmRpbmcgXGZJLm5ydlxmUiB0byB0aGUgc291cmNlCitmaWxlIG5hbWUuCisuSVAgIlxmQnZlY3RcZlIiIDQKKy5JWCBJdGVtICJ2ZWN0IgorRHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIGFwcGx5aW5nIHZlY3Rvcml6YXRpb24gb2YgbG9vcHMuICBUaGUgZmlsZSBuYW1lIGlzCittYWRlIGJ5IGFwcGVuZGluZyBcZkkudmVjdFxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCc2xwXGZSIiA0CisuSVggSXRlbSAic2xwIgorRHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIGFwcGx5aW5nIHZlY3Rvcml6YXRpb24gb2YgYmFzaWMgYmxvY2tzLiAgVGhlIGZpbGUgbmFtZQoraXMgbWFkZSBieSBhcHBlbmRpbmcgXGZJLnNscFxmUiB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KKy5JUCAiXGZCdnJwXGZSIiA0CisuSVggSXRlbSAidnJwIgorRHVtcCBlYWNoIGZ1bmN0aW9uIGFmdGVyIFZhbHVlIFJhbmdlIFByb3BhZ2F0aW9uIChccy0xVlJQXHMwKS4gIFRoZSBmaWxlIG5hbWUKK2lzIG1hZGUgYnkgYXBwZW5kaW5nIFxmSS52cnBcZlIgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisuSVAgIlxmQmFsbFxmUiIgNAorLklYIEl0ZW0gImFsbCIKK0VuYWJsZSBhbGwgdGhlIGF2YWlsYWJsZSB0cmVlIGR1bXBzIHdpdGggdGhlIGZsYWdzIHByb3ZpZGVkIGluIHRoaXMgb3B0aW9uLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtZm9wdFwtaW5mb1xmUiIgNAorLklYIEl0ZW0gIi1mb3B0LWluZm8iCisuUEQgMAorLklQICJcZkJcLWZvcHRcLWluZm9cLVxmUlxmSW9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZm9wdC1pbmZvLW9wdGlvbnMiCisuSVAgIlxmQlwtZm9wdFwtaW5mb1wtXGZSXGZJb3B0aW9uc1xmUlxmQj1cZlJcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1mb3B0LWluZm8tb3B0aW9ucz1maWxlbmFtZSIKKy5QRAorQ29udHJvbHMgb3B0aW1pemF0aW9uIGR1bXBzIGZyb20gdmFyaW91cyBvcHRpbWl6YXRpb24gcGFzc2VzLiBJZiB0aGUKK1wmXGZCXC1cZlJcZklvcHRpb25zXGZSIGZvcm0gaXMgdXNlZCwgXGZJb3B0aW9uc1xmUiBpcyBhIGxpc3Qgb2YKK1wmXGZCXC1cZlIgc2VwYXJhdGVkIG9wdGlvbnMgdG8gc2VsZWN0IHRoZSBkdW1wIGRldGFpbHMgYW5kCitvcHRpbWl6YXRpb25zLiAgSWYgXGZJb3B0aW9uc1xmUiBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0bworXCZcZkJhbGxcZlIgZm9yIGRldGFpbHMgYW5kIFxmQm9wdGFsbFxmUiBmb3Igb3B0aW1pemF0aW9uCitncm91cHMuIElmIHRoZSBcZklmaWxlbmFtZVxmUiBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0bworXCZcZklzdGRlcnJcZlIuIE5vdGUgdGhhdCB0aGUgb3V0cHV0IFxmSWZpbGVuYW1lXGZSIHdpbGwgYmUgb3ZlcndyaXR0ZW4KK2luIGNhc2Ugb2YgbXVsdGlwbGUgdHJhbnNsYXRpb24gdW5pdHMuIElmIGEgY29tYmluZWQgb3V0cHV0IGZyb20KK211bHRpcGxlIHRyYW5zbGF0aW9uIHVuaXRzIGlzIGRlc2lyZWQsIFxmSXN0ZGVyclxmUiBzaG91bGQgYmUgdXNlZAoraW5zdGVhZC4KKy5TcAorVGhlIG9wdGlvbnMgY2FuIGJlIGRpdmlkZWQgaW50byB0d28gZ3JvdXBzLCAxKSBvcHRpb25zIGRlc2NyaWJpbmcgdGhlCit2ZXJib3NpdHkgb2YgdGhlIGR1bXAsIGFuZCAyKSBvcHRpb25zIGRlc2NyaWJpbmcgd2hpY2ggb3B0aW1pemF0aW9ucworc2hvdWxkIGJlIGluY2x1ZGVkLiBUaGUgb3B0aW9ucyBmcm9tIGJvdGggdGhlIGdyb3VwcyBjYW4gYmUgZnJlZWx5CittaXhlZCBhcyB0aGV5IGFyZSBub24tb3ZlcmxhcHBpbmcuIEhvd2V2ZXIsIGluIGNhc2Ugb2YgYW55IGNvbmZsaWN0cywKK3RoZSBsYXR0ZXIgb3B0aW9ucyBvdmVycmlkZSB0aGUgZWFybGllciBvcHRpb25zIG9uIHRoZSBjb21tYW5kCitsaW5lLiBUaG91Z2ggbXVsdGlwbGUgXC1mb3B0XC1pbmZvIG9wdGlvbnMgYXJlIGFjY2VwdGVkLCBvbmx5IG9uZSBvZgordGhlbSBjYW4gaGF2ZSBcZkI9ZmlsZW5hbWVcZlIuIElmIG90aGVyIGZpbGVuYW1lcyBhcmUgcHJvdmlkZWQgdGhlbgorYWxsIGJ1dCB0aGUgZmlyc3Qgb25lIGFyZSBpZ25vcmVkLgorLlNwCitUaGUgZHVtcCB2ZXJib3NpdHkgaGFzIHRoZSBmb2xsb3dpbmcgb3B0aW9ucworLlJTIDQKKy5JUCAiXGZCb3B0aW1pemVkXGZSIiA0CisuSVggSXRlbSAib3B0aW1pemVkIgorUHJpbnQgaW5mb3JtYXRpb24gd2hlbiBhbiBvcHRpbWl6YXRpb24gaXMgc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuIEl0IGlzCit1cCB0byBhIHBhc3MgdG8gZGVjaWRlIHdoaWNoIGluZm9ybWF0aW9uIGlzIHJlbGV2YW50LiBGb3IgZXhhbXBsZSwgdGhlCit2ZWN0b3JpemVyIHBhc3NlcyBwcmludCB0aGUgc291cmNlIGxvY2F0aW9uIG9mIGxvb3BzIHdoaWNoIGdvdAorc3VjY2Vzc2Z1bGx5IHZlY3Rvcml6ZWQuCisuSVAgIlxmQm1pc3NlZFxmUiIgNAorLklYIEl0ZW0gIm1pc3NlZCIKK1ByaW50IGluZm9ybWF0aW9uIGFib3V0IG1pc3NlZCBvcHRpbWl6YXRpb25zLiBJbmRpdmlkdWFsIHBhc3NlcworY29udHJvbCB3aGljaCBpbmZvcm1hdGlvbiB0byBpbmNsdWRlIGluIHRoZSBvdXRwdXQuIEZvciBleGFtcGxlLAorLlNwCisuVmIgMQorXCYgICAgICAgIGdjYyBcLU8yIFwtZnRyZWVcLXZlY3Rvcml6ZSBcLWZvcHRcLWluZm9cLXZlY1wtbWlzc2VkCisuVmUKKy5TcAord2lsbCBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBtaXNzZWQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgZnJvbQordmVjdG9yaXphdGlvbiBwYXNzZXMgb24gc3RkZXJyLgorLklQICJcZkJub3RlXGZSIiA0CisuSVggSXRlbSAibm90ZSIKK1ByaW50IHZlcmJvc2UgaW5mb3JtYXRpb24gYWJvdXQgb3B0aW1pemF0aW9ucywgc3VjaCBhcyBjZXJ0YWluCit0cmFuc2Zvcm1hdGlvbnMsIG1vcmUgZGV0YWlsZWQgbWVzc2FnZXMgYWJvdXQgZGVjaXNpb25zIGV0Yy4KKy5JUCAiXGZCYWxsXGZSIiA0CisuSVggSXRlbSAiYWxsIgorUHJpbnQgZGV0YWlsZWQgb3B0aW1pemF0aW9uIGluZm9ybWF0aW9uLiBUaGlzIGluY2x1ZGVzCitcJlxmSW9wdGltaXplZFxmUiwgXGZJbWlzc2VkXGZSLCBhbmQgXGZJbm90ZVxmUi4KKy5SRQorLlJTIDQKKy5TcAorVGhlIHNlY29uZCBzZXQgb2Ygb3B0aW9ucyBkZXNjcmliZXMgYSBncm91cCBvZiBvcHRpbWl6YXRpb25zIGFuZCBtYXkKK2luY2x1ZGUgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZy4KKy5JUCAiXGZCaXBhXGZSIiA0CisuSVggSXRlbSAiaXBhIgorRW5hYmxlIGR1bXBzIGZyb20gYWxsIGludGVycHJvY2VkdXJhbCBvcHRpbWl6YXRpb25zLgorLklQICJcZkJsb29wXGZSIiA0CisuSVggSXRlbSAibG9vcCIKK0VuYWJsZSBkdW1wcyBmcm9tIGFsbCBsb29wIG9wdGltaXphdGlvbnMuCisuSVAgIlxmQmlubGluZVxmUiIgNAorLklYIEl0ZW0gImlubGluZSIKK0VuYWJsZSBkdW1wcyBmcm9tIGFsbCBpbmxpbmluZyBvcHRpbWl6YXRpb25zLgorLklQICJcZkJ2ZWNcZlIiIDQKKy5JWCBJdGVtICJ2ZWMiCitFbmFibGUgZHVtcHMgZnJvbSBhbGwgdmVjdG9yaXphdGlvbiBvcHRpbWl6YXRpb25zLgorLlJFCisuUlMgNAorLlNwCitGb3IgZXhhbXBsZSwKKy5TcAorLlZiIDEKK1wmICAgICAgICBnY2MgXC1PMyBcLWZvcHRcLWluZm9cLW1pc3NlZD1taXNzZWQuYWxsCisuVmUKKy5TcAorb3V0cHV0cyBtaXNzZWQgb3B0aW1pemF0aW9uIHJlcG9ydCBmcm9tIGFsbCB0aGUgcGFzc2VzIGludG8KK1wmXGZJbWlzc2VkLmFsbFxmUi4KKy5TcAorQXMgYW5vdGhlciBleGFtcGxlLAorLlNwCisuVmIgMQorXCYgICAgICAgIGdjYyBcLU8zIFwtZm9wdFwtaW5mb1wtaW5saW5lXC1vcHRpbWl6ZWRcLW1pc3NlZD1pbmxpbmUudHh0CisuVmUKKy5TcAord2lsbCBvdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgbWlzc2VkIG9wdGltaXphdGlvbnMgYXMgd2VsbCBhcworb3B0aW1pemVkIGxvY2F0aW9ucyBmcm9tIGFsbCB0aGUgaW5saW5pbmcgcGFzc2VzIGludG8KK1wmXGZJaW5saW5lLnR4dFxmUi4KKy5TcAorSWYgdGhlIFxmSWZpbGVuYW1lXGZSIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBkdW1wcyBmcm9tIGFsbCB0aGUKK2FwcGxpY2FibGUgb3B0aW1pemF0aW9ucyBhcmUgY29uY2F0ZW5hdGVkIGludG8gdGhlIFxmSWZpbGVuYW1lXGZSLgorT3RoZXJ3aXNlIHRoZSBkdW1wIGlzIG91dHB1dCBvbnRvIFxmSXN0ZGVyclxmUi4gSWYgXGZJb3B0aW9uc1xmUiBpcworb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gXGZCYWxsLW9wdGFsbFxmUiwgd2hpY2ggbWVhbnMgZHVtcCBhbGwKK2F2YWlsYWJsZSBvcHRpbWl6YXRpb24gaW5mbyBmcm9tIGFsbCB0aGUgcGFzc2VzLiBJbiB0aGUgZm9sbG93aW5nCitleGFtcGxlLCBhbGwgb3B0aW1pemF0aW9uIGluZm8gaXMgb3V0cHV0IG9uIHRvIFxmSXN0ZGVyclxmUi4KKy5TcAorLlZiIDEKK1wmICAgICAgICBnY2MgXC1PMyBcLWZvcHRcLWluZm8KKy5WZQorLlNwCitOb3RlIHRoYXQgXGZCXC1mb3B0XC1pbmZvXC12ZWNcLW1pc3NlZFxmUiBiZWhhdmVzIHRoZSBzYW1lIGFzCitcJlxmQlwtZm9wdFwtaW5mb1wtbWlzc2VkXC12ZWNcZlIuCisuU3AKK0FzIGFub3RoZXIgZXhhbXBsZSwgY29uc2lkZXIKKy5TcAorLlZiIDEKK1wmICAgICAgICBnY2MgXC1mb3B0XC1pbmZvXC12ZWNcLW1pc3NlZD12ZWMubWlzcyBcLWZvcHRcLWluZm9cLWxvb3BcLW9wdGltaXplZD1sb29wLm9wdAorLlZlCisuU3AKK0hlcmUgdGhlIHR3byBvdXRwdXQgZmlsZW5hbWVzIFxmSXZlYy5taXNzXGZSIGFuZCBcZklsb29wLm9wdFxmUiBhcmUKK2luIGNvbmZsaWN0IHNpbmNlIG9ubHkgb25lIG91dHB1dCBmaWxlIGlzIGFsbG93ZWQuIEluIHRoaXMgY2FzZSwgb25seQordGhlIGZpcnN0IG9wdGlvbiB0YWtlcyBlZmZlY3QgYW5kIHRoZSBzdWJzZXF1ZW50IG9wdGlvbnMgYXJlCitpZ25vcmVkLiBUaHVzIG9ubHkgdGhlIFxmSXZlYy5taXNzXGZSIGlzIHByb2R1Y2VkIHdoaWNoIGNvdGFpbnRzCitkdW1wcyBmcm9tIHRoZSB2ZWN0b3JpemVyIGFib3V0IG1pc3NlZCBvcHBvcnR1bml0aWVzLgorLlJFCisuSVAgIlxmQlwtZnRyZWVcLXZlY3Rvcml6ZXJcLXZlcmJvc2U9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS12ZWN0b3JpemVyLXZlcmJvc2U9biIKK1RoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mCitcJlxmQlwtZm9wdFwtaW5mb1xmUi4gUGxlYXNlIHVzZSBcZkJcLWZvcHRcLWluZm9cLVxmUlxmSWtpbmRcZlIgZm9ybQoraW5zdGVhZCwgd2hlcmUgXGZJa2luZFxmUiBpcyBvbmUgb2YgdGhlIHZhbGlkIG9wdC1pbmZvIG9wdGlvbnMuIEl0CitwcmludHMgYWRkaXRpb25hbCBvcHRpbWl6YXRpb24gaW5mb3JtYXRpb24uICBGb3IgXGZJblxmUj0wIG5vCitkaWFnbm9zdGljIGluZm9ybWF0aW9uIGlzIHJlcG9ydGVkLiAgSWYgXGZJblxmUj0xIHRoZSB2ZWN0b3JpemVyCityZXBvcnRzIGVhY2ggbG9vcCB0aGF0IGdvdCB2ZWN0b3JpemVkLCBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBsb29wcwordGhhdCBnb3QgdmVjdG9yaXplZC4gIElmIFxmSW5cZlI9MiB0aGUgdmVjdG9yaXplciByZXBvcnRzIGxvY2F0aW9ucword2hpY2ggY291bGQgbm90IGJlIHZlY3Rvcml6ZWQgYW5kIHRoZSByZWFzb25zIGZvciB0aG9zZS4gRm9yIGFueQoraGlnaGVyIHZlcmJvc2l0eSBsZXZlbHMgYWxsIHRoZSBhbmFseXNpcyBhbmQgdHJhbnNmb3JtYXRpb24KK2luZm9ybWF0aW9uIGZyb20gdGhlIHZlY3Rvcml6ZXIgaXMgcmVwb3J0ZWQuCisuU3AKK05vdGUgdGhhdCB0aGUgaW5mb3JtYXRpb24gb3V0cHV0IGJ5IFxmQlwtZnRyZWVcLXZlY3Rvcml6ZXJcLXZlcmJvc2VcZlIKK29wdGlvbiBpcyBzZW50IHRvIFxmSXN0ZGVyclxmUi4gSWYgdGhlIGVxdWl2YWxlbnQgZm9ybQorXCZcZkJcLWZvcHRcLWluZm9cLVxmUlxmSW9wdGlvbnNcZlJcZkI9XGZSXGZJZmlsZW5hbWVcZlIgaXMgdXNlZCB0aGVuIHRoZQorb3V0cHV0IGlzIHNlbnQgaW50byBcZklmaWxlbmFtZVxmUiBpbnN0ZWFkLgorLklQICJcZkJcLWZyYW5kb21cLXNlZWQ9XGZSXGZJc3RyaW5nXGZSIiA0CisuSVggSXRlbSAiLWZyYW5kb20tc2VlZD1zdHJpbmciCitUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHNlZWQgdGhhdCBccy0xR0NDXHMwIHVzZXMgaW4gcGxhY2Ugb2YKK3JhbmRvbSBudW1iZXJzIGluIGdlbmVyYXRpbmcgY2VydGFpbiBzeW1ib2wgbmFtZXMKK3RoYXQgaGF2ZSB0byBiZSBkaWZmZXJlbnQgaW4gZXZlcnkgY29tcGlsZWQgZmlsZS4gIEl0IGlzIGFsc28gdXNlZCB0bworcGxhY2UgdW5pcXVlIHN0YW1wcyBpbiBjb3ZlcmFnZSBkYXRhIGZpbGVzIGFuZCB0aGUgb2JqZWN0IGZpbGVzIHRoYXQKK3Byb2R1Y2UgdGhlbS4gIFlvdSBjYW4gdXNlIHRoZSBcZkJcLWZyYW5kb21cLXNlZWRcZlIgb3B0aW9uIHRvIHByb2R1Y2UKK3JlcHJvZHVjaWJseSBpZGVudGljYWwgb2JqZWN0IGZpbGVzLgorLlNwCitUaGUgXGZJc3RyaW5nXGZSIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIGV2ZXJ5IGZpbGUgeW91IGNvbXBpbGUuCisuSVAgIlxmQlwtZnNjaGVkXC12ZXJib3NlPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLXZlcmJvc2U9biIKK09uIHRhcmdldHMgdGhhdCB1c2UgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZywgdGhpcyBvcHRpb24gY29udHJvbHMgdGhlCithbW91bnQgb2YgZGVidWdnaW5nIG91dHB1dCB0aGUgc2NoZWR1bGVyIHByaW50cy4gIFRoaXMgaW5mb3JtYXRpb24gaXMKK3dyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IsIHVubGVzcyBcZkJcLWZkdW1wXC1ydGxcLXNjaGVkMVxmUiBvcgorXCZcZkJcLWZkdW1wXC1ydGxcLXNjaGVkMlxmUiBpcyBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgaXQgaXMgb3V0cHV0Cit0byB0aGUgdXN1YWwgZHVtcCBsaXN0aW5nIGZpbGUsIFxmSS5zY2hlZDFcZlIgb3IgXGZJLnNjaGVkMlxmUgorcmVzcGVjdGl2ZWx5LiAgSG93ZXZlciBmb3IgXGZJblxmUiBncmVhdGVyIHRoYW4gbmluZSwgdGhlIG91dHB1dCBpcworYWx3YXlzIHByaW50ZWQgdG8gc3RhbmRhcmQgZXJyb3IuCisuU3AKK0ZvciBcZkluXGZSIGdyZWF0ZXIgdGhhbiB6ZXJvLCBcZkJcLWZzY2hlZFwtdmVyYm9zZVxmUiBvdXRwdXRzIHRoZQorc2FtZSBpbmZvcm1hdGlvbiBhcyBcZkJcLWZkdW1wXC1ydGxcLXNjaGVkMVxmUiBhbmQgXGZCXC1mZHVtcFwtcnRsXC1zY2hlZDJcZlIuCitGb3IgXGZJblxmUiBncmVhdGVyIHRoYW4gb25lLCBpdCBhbHNvIG91dHB1dCBiYXNpYyBibG9jayBwcm9iYWJpbGl0aWVzLAorZGV0YWlsZWQgcmVhZHkgbGlzdCBpbmZvcm1hdGlvbiBhbmQgdW5pdC9pbnNuIGluZm8uICBGb3IgXGZJblxmUiBncmVhdGVyCit0aGFuIHR3bywgaXQgaW5jbHVkZXMgXHMtMVJUTFxzMCBhdCBhYm9ydCBwb2ludCwgY29udHJvbC1mbG93IGFuZCByZWdpb25zIGluZm8uCitBbmQgZm9yIFxmSW5cZlIgb3ZlciBmb3VyLCBcZkJcLWZzY2hlZFwtdmVyYm9zZVxmUiBhbHNvIGluY2x1ZGVzCitkZXBlbmRlbmNlIGluZm8uCisuSVAgIlxmQlwtc2F2ZVwtdGVtcHNcZlIiIDQKKy5JWCBJdGVtICItc2F2ZS10ZW1wcyIKKy5QRCAwCisuSVAgIlxmQlwtc2F2ZVwtdGVtcHM9Y3dkXGZSIiA0CisuSVggSXRlbSAiLXNhdmUtdGVtcHM9Y3dkIgorLlBECitTdG9yZSB0aGUgdXN1YWwgXCooTCJ0ZW1wb3JhcnlcKihSIiBpbnRlcm1lZGlhdGUgZmlsZXMgcGVybWFuZW50bHk7IHBsYWNlIHRoZW0KK2luIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbmFtZSB0aGVtIGJhc2VkIG9uIHRoZSBzb3VyY2UgZmlsZS4gIFRodXMsCitjb21waWxpbmcgXGZJZm9vLmNcZlIgd2l0aCBcZkJcLWMgXC1zYXZlXC10ZW1wc1xmUiBwcm9kdWNlcyBmaWxlcworXCZcZklmb28uaVxmUiBhbmQgXGZJZm9vLnNcZlIsIGFzIHdlbGwgYXMgXGZJZm9vLm9cZlIuICBUaGlzIGNyZWF0ZXMgYQorcHJlcHJvY2Vzc2VkIFxmSWZvby5pXGZSIG91dHB1dCBmaWxlIGV2ZW4gdGhvdWdoIHRoZSBjb21waWxlciBub3cKK25vcm1hbGx5IHVzZXMgYW4gaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3IuCisuU3AKK1doZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBcZkJcLXhcZlIgY29tbWFuZC1saW5lIG9wdGlvbiwKK1wmXGZCXC1zYXZlXC10ZW1wc1xmUiBpcyBzZW5zaWJsZSBlbm91Z2ggdG8gYXZvaWQgb3ZlciB3cml0aW5nIGFuCitpbnB1dCBzb3VyY2UgZmlsZSB3aXRoIHRoZSBzYW1lIGV4dGVuc2lvbiBhcyBhbiBpbnRlcm1lZGlhdGUgZmlsZS4KK1RoZSBjb3JyZXNwb25kaW5nIGludGVybWVkaWF0ZSBmaWxlIG1heSBiZSBvYnRhaW5lZCBieSByZW5hbWluZyB0aGUKK3NvdXJjZSBmaWxlIGJlZm9yZSB1c2luZyBcZkJcLXNhdmVcLXRlbXBzXGZSLgorLlNwCitJZiB5b3UgaW52b2tlIFxzLTFHQ0NcczAgaW4gcGFyYWxsZWwsIGNvbXBpbGluZyBzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2UKK2ZpbGVzIHRoYXQgc2hhcmUgYSBjb21tb24gYmFzZSBuYW1lIGluIGRpZmZlcmVudCBzdWJkaXJlY3RvcmllcyBvciB0aGUKK3NhbWUgc291cmNlIGZpbGUgY29tcGlsZWQgZm9yIG11bHRpcGxlIG91dHB1dCBkZXN0aW5hdGlvbnMsIGl0IGlzCitsaWtlbHkgdGhhdCB0aGUgZGlmZmVyZW50IHBhcmFsbGVsIGNvbXBpbGVycyB3aWxsIGludGVyZmVyZSB3aXRoIGVhY2gKK290aGVyLCBhbmQgb3ZlcndyaXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMuICBGb3IgaW5zdGFuY2U6CisuU3AKKy5WYiAyCitcJiAgICAgICAgZ2NjIFwtc2F2ZVwtdGVtcHMgXC1vIG91dGRpcjEvZm9vLm8gaW5kaXIxL2Zvby5jJgorXCYgICAgICAgIGdjYyBcLXNhdmVcLXRlbXBzIFwtbyBvdXRkaXIyL2Zvby5vIGluZGlyMi9mb28uYyYKKy5WZQorLlNwCittYXkgcmVzdWx0IGluIFxmSWZvby5pXGZSIGFuZCBcZklmb28ub1xmUiBiZWluZyB3cml0dGVuIHRvCitzaW11bHRhbmVvdXNseSBieSBib3RoIGNvbXBpbGVycy4KKy5JUCAiXGZCXC1zYXZlXC10ZW1wcz1vYmpcZlIiIDQKKy5JWCBJdGVtICItc2F2ZS10ZW1wcz1vYmoiCitTdG9yZSB0aGUgdXN1YWwgXCooTCJ0ZW1wb3JhcnlcKihSIiBpbnRlcm1lZGlhdGUgZmlsZXMgcGVybWFuZW50bHkuICBJZiB0aGUKK1wmXGZCXC1vXGZSIG9wdGlvbiBpcyB1c2VkLCB0aGUgdGVtcG9yYXJ5IGZpbGVzIGFyZSBiYXNlZCBvbiB0aGUKK29iamVjdCBmaWxlLiAgSWYgdGhlIFxmQlwtb1xmUiBvcHRpb24gaXMgbm90IHVzZWQsIHRoZQorXCZcZkJcLXNhdmVcLXRlbXBzPW9ialxmUiBzd2l0Y2ggYmVoYXZlcyBsaWtlIFxmQlwtc2F2ZVwtdGVtcHNcZlIuCisuU3AKK0ZvciBleGFtcGxlOgorLlNwCisuVmIgMworXCYgICAgICAgIGdjYyBcLXNhdmVcLXRlbXBzPW9iaiBcLWMgZm9vLmMKK1wmICAgICAgICBnY2MgXC1zYXZlXC10ZW1wcz1vYmogXC1jIGJhci5jIFwtbyBkaXIveGJhci5vCitcJiAgICAgICAgZ2NjIFwtc2F2ZVwtdGVtcHM9b2JqIGZvb2Jhci5jIFwtbyBkaXIyL3lmb29iYXIKKy5WZQorLlNwCitjcmVhdGVzIFxmSWZvby5pXGZSLCBcZklmb28uc1xmUiwgXGZJZGlyL3hiYXIuaVxmUiwKK1wmXGZJZGlyL3hiYXIuc1xmUiwgXGZJZGlyMi95Zm9vYmFyLmlcZlIsIFxmSWRpcjIveWZvb2Jhci5zXGZSLCBhbmQKK1wmXGZJZGlyMi95Zm9vYmFyLm9cZlIuCisuSVAgIlxmQlwtdGltZVxmUltcZkI9XGZSXGZJZmlsZVxmUl0iIDQKKy5JWCBJdGVtICItdGltZVs9ZmlsZV0iCitSZXBvcnQgdGhlIFxzLTFDUFVcczAgdGltZSB0YWtlbiBieSBlYWNoIHN1YnByb2Nlc3MgaW4gdGhlIGNvbXBpbGF0aW9uCitzZXF1ZW5jZS4gIEZvciBDIHNvdXJjZSBmaWxlcywgdGhpcyBpcyB0aGUgY29tcGlsZXIgcHJvcGVyIGFuZCBhc3NlbWJsZXIKKyhwbHVzIHRoZSBsaW5rZXIgaWYgbGlua2luZyBpcyBkb25lKS4KKy5TcAorV2l0aG91dCB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhbiBvdXRwdXQgZmlsZSwgdGhlIG91dHB1dCBsb29rcyBsaWtlIHRoaXM6CisuU3AKKy5WYiAyCitcJiAgICAgICAgIyBjYzEgMC4xMiAwLjAxCitcJiAgICAgICAgIyBhcyAwLjAwIDAuMDEKKy5WZQorLlNwCitUaGUgZmlyc3QgbnVtYmVyIG9uIGVhY2ggbGluZSBpcyB0aGUgXCooTCJ1c2VyIHRpbWVcKihSIiwgdGhhdCBpcyB0aW1lIHNwZW50CitleGVjdXRpbmcgdGhlIHByb2dyYW0gaXRzZWxmLiAgVGhlIHNlY29uZCBudW1iZXIgaXMgXCooTCJzeXN0ZW0gdGltZVwqKFIiLAordGltZSBzcGVudCBleGVjdXRpbmcgb3BlcmF0aW5nIHN5c3RlbSByb3V0aW5lcyBvbiBiZWhhbGYgb2YgdGhlIHByb2dyYW0uCitCb3RoIG51bWJlcnMgYXJlIGluIHNlY29uZHMuCisuU3AKK1dpdGggdGhlIHNwZWNpZmljYXRpb24gb2YgYW4gb3V0cHV0IGZpbGUsIHRoZSBvdXRwdXQgaXMgYXBwZW5kZWQgdG8gdGhlCituYW1lZCBmaWxlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzOgorLlNwCisuVmIgMgorXCYgICAgICAgIDAuMTIgMC4wMSBjYzEgPG9wdGlvbnM+CitcJiAgICAgICAgMC4wMCAwLjAxIGFzIDxvcHRpb25zPgorLlZlCisuU3AKK1RoZSBcKihMInVzZXIgdGltZVwqKFIiIGFuZCB0aGUgXCooTCJzeXN0ZW0gdGltZVwqKFIiIGFyZSBtb3ZlZCBiZWZvcmUgdGhlIHByb2dyYW0KK25hbWUsIGFuZCB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHByb2dyYW0gYXJlIGRpc3BsYXllZCwgc28gdGhhdCBvbmUKK2NhbiBsYXRlciB0ZWxsIHdoYXQgZmlsZSB3YXMgYmVpbmcgY29tcGlsZWQsIGFuZCB3aXRoIHdoaWNoIG9wdGlvbnMuCisuSVAgIlxmQlwtZnZhclwtdHJhY2tpbmdcZlIiIDQKKy5JWCBJdGVtICItZnZhci10cmFja2luZyIKK1J1biB2YXJpYWJsZSB0cmFja2luZyBwYXNzLiAgSXQgY29tcHV0ZXMgd2hlcmUgdmFyaWFibGVzIGFyZSBzdG9yZWQgYXQgZWFjaAorcG9zaXRpb24gaW4gY29kZS4gIEJldHRlciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgdGhlbiBnZW5lcmF0ZWQKKyhpZiB0aGUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvcm1hdCBzdXBwb3J0cyB0aGlzIGluZm9ybWF0aW9uKS4KKy5TcAorSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gY29tcGlsaW5nIHdpdGggb3B0aW1pemF0aW9uIChcZkJcLU9zXGZSLAorXCZcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIC4uLiksIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiAoXGZCXC1nXGZSKSBhbmQKK3RoZSBkZWJ1ZyBpbmZvIGZvcm1hdCBzdXBwb3J0cyBpdC4KKy5JUCAiXGZCXC1mdmFyXC10cmFja2luZ1wtYXNzaWdubWVudHNcZlIiIDQKKy5JWCBJdGVtICItZnZhci10cmFja2luZy1hc3NpZ25tZW50cyIKK0Fubm90YXRlIGFzc2lnbm1lbnRzIHRvIHVzZXIgdmFyaWFibGVzIGVhcmx5IGluIHRoZSBjb21waWxhdGlvbiBhbmQKK2F0dGVtcHQgdG8gY2FycnkgdGhlIGFubm90YXRpb25zIG92ZXIgdGhyb3VnaG91dCB0aGUgY29tcGlsYXRpb24gYWxsIHRoZQord2F5IHRvIHRoZSBlbmQsIGluIGFuIGF0dGVtcHQgdG8gaW1wcm92ZSBkZWJ1ZyBpbmZvcm1hdGlvbiB3aGlsZQorb3B0aW1pemluZy4gIFVzZSBvZiBcZkJcLWdkd2FyZlwtNFxmUiBpcyByZWNvbW1lbmRlZCBhbG9uZyB3aXRoIGl0LgorLlNwCitJdCBjYW4gYmUgZW5hYmxlZCBldmVuIGlmIHZhci10cmFja2luZyBpcyBkaXNhYmxlZCwgaW4gd2hpY2ggY2FzZQorYW5ub3RhdGlvbnMgYXJlIGNyZWF0ZWQgYW5kIG1haW50YWluZWQsIGJ1dCBkaXNjYXJkZWQgYXQgdGhlIGVuZC4KKy5JUCAiXGZCXC1mdmFyXC10cmFja2luZ1wtYXNzaWdubWVudHNcLXRvZ2dsZVxmUiIgNAorLklYIEl0ZW0gIi1mdmFyLXRyYWNraW5nLWFzc2lnbm1lbnRzLXRvZ2dsZSIKK1RvZ2dsZSBcZkJcLWZ2YXJcLXRyYWNraW5nXC1hc3NpZ25tZW50c1xmUiwgaW4gdGhlIHNhbWUgd2F5IHRoYXQKK1wmXGZCXC1ndG9nZ2xlXGZSIHRvZ2dsZXMgXGZCXC1nXGZSLgorLklQICJcZkJcLXByaW50XC1maWxlXC1uYW1lPVxmUlxmSWxpYnJhcnlcZlIiIDQKKy5JWCBJdGVtICItcHJpbnQtZmlsZS1uYW1lPWxpYnJhcnkiCitQcmludCB0aGUgZnVsbCBhYnNvbHV0ZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IGZpbGUgXGZJbGlicmFyeVxmUiB0aGF0Cit3b3VsZCBiZSB1c2VkIHdoZW4gbGlua2luZ1wtXC1cLWFuZCBkb24ndCBkbyBhbnl0aGluZyBlbHNlLiAgV2l0aCB0aGlzCitvcHRpb24sIFxzLTFHQ0NcczAgZG9lcyBub3QgY29tcGlsZSBvciBsaW5rIGFueXRoaW5nOyBpdCBqdXN0IHByaW50cyB0aGUKK2ZpbGUgbmFtZS4KKy5JUCAiXGZCXC1wcmludFwtbXVsdGlcLWRpcmVjdG9yeVxmUiIgNAorLklYIEl0ZW0gIi1wcmludC1tdWx0aS1kaXJlY3RvcnkiCitQcmludCB0aGUgZGlyZWN0b3J5IG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbXVsdGlsaWIgc2VsZWN0ZWQgYnkgYW55CitvdGhlciBzd2l0Y2hlcyBwcmVzZW50IGluIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIGRpcmVjdG9yeSBpcyBzdXBwb3NlZAordG8gZXhpc3QgaW4gXGZCXHMtMUdDQ19FWEVDX1BSRUZJWFxzMFxmUi4KKy5JUCAiXGZCXC1wcmludFwtbXVsdGlcLWxpYlxmUiIgNAorLklYIEl0ZW0gIi1wcmludC1tdWx0aS1saWIiCitQcmludCB0aGUgbWFwcGluZyBmcm9tIG11bHRpbGliIGRpcmVjdG9yeSBuYW1lcyB0byBjb21waWxlciBzd2l0Y2hlcwordGhhdCBlbmFibGUgdGhlbS4gIFRoZSBkaXJlY3RvcnkgbmFtZSBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgc3dpdGNoZXMgYnkKK1wmXGZCO1xmUiwgYW5kIGVhY2ggc3dpdGNoIHN0YXJ0cyB3aXRoIGFuIFxmQkBcZlIgaW5zdGVhZCBvZiB0aGUKK1wmXGZCXC1cZlIsIHdpdGhvdXQgc3BhY2VzIGJldHdlZW4gbXVsdGlwbGUgc3dpdGNoZXMuICBUaGlzIGlzIHN1cHBvc2VkIHRvCitlYXNlIHNoZWxsIHByb2Nlc3NpbmcuCisuSVAgIlxmQlwtcHJpbnRcLW11bHRpXC1vc1wtZGlyZWN0b3J5XGZSIiA0CisuSVggSXRlbSAiLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSIKK1ByaW50IHRoZSBwYXRoIHRvIFxzLTFPU1xzMCBsaWJyYXJpZXMgZm9yIHRoZSBzZWxlY3RlZAorbXVsdGlsaWIsIHJlbGF0aXZlIHRvIHNvbWUgXGZJbGliXGZSIHN1YmRpcmVjdG9yeS4gIElmIFxzLTFPU1xzMCBsaWJyYXJpZXMgYXJlCitwcmVzZW50IGluIHRoZSBcZklsaWJcZlIgc3ViZGlyZWN0b3J5IGFuZCBubyBtdWx0aWxpYnMgYXJlIHVzZWQsIHRoaXMgaXMKK3VzdWFsbHkganVzdCBcZkkuXGZSLCBpZiBccy0xT1NcczAgbGlicmFyaWVzIGFyZSBwcmVzZW50IGluIFxmSWxpYlxmSXN1ZmZpeFxmSVxmUgorc2libGluZyBkaXJlY3RvcmllcyB0aGlzIHByaW50cyBlLmcuIFxmSS4uL2xpYjY0XGZSLCBcZkkuLi9saWJcZlIgb3IKK1wmXGZJLi4vbGliMzJcZlIsIG9yIGlmIFxzLTFPU1xzMCBsaWJyYXJpZXMgYXJlIHByZXNlbnQgaW4gXGZJbGliL1xmSXN1YmRpclxmSVxmUgorc3ViZGlyZWN0b3JpZXMgaXQgcHJpbnRzIGUuZy4gXGZJYW1kNjRcZlIsIFxmSXNwYXJjdjlcZlIgb3IgXGZJZXY2XGZSLgorLklQICJcZkJcLXByaW50XC1tdWx0aWFyY2hcZlIiIDQKKy5JWCBJdGVtICItcHJpbnQtbXVsdGlhcmNoIgorUHJpbnQgdGhlIHBhdGggdG8gXHMtMU9TXHMwIGxpYnJhcmllcyBmb3IgdGhlIHNlbGVjdGVkIG11bHRpYXJjaCwKK3JlbGF0aXZlIHRvIHNvbWUgXGZJbGliXGZSIHN1YmRpcmVjdG9yeS4KKy5JUCAiXGZCXC1wcmludFwtcHJvZ1wtbmFtZT1cZlJcZklwcm9ncmFtXGZSIiA0CisuSVggSXRlbSAiLXByaW50LXByb2ctbmFtZT1wcm9ncmFtIgorTGlrZSBcZkJcLXByaW50XC1maWxlXC1uYW1lXGZSLCBidXQgc2VhcmNoZXMgZm9yIGEgcHJvZ3JhbSBzdWNoIGFzIFxmQmNwcFxmUi4KKy5JUCAiXGZCXC1wcmludFwtbGliZ2NjXC1maWxlXC1uYW1lXGZSIiA0CisuSVggSXRlbSAiLXByaW50LWxpYmdjYy1maWxlLW5hbWUiCitTYW1lIGFzIFxmQlwtcHJpbnRcLWZpbGVcLW5hbWU9bGliZ2NjLmFcZlIuCisuU3AKK1RoaXMgaXMgdXNlZnVsIHdoZW4geW91IHVzZSBcZkJcLW5vc3RkbGliXGZSIG9yIFxmQlwtbm9kZWZhdWx0bGlic1xmUgorYnV0IHlvdSBkbyB3YW50IHRvIGxpbmsgd2l0aCBcZklsaWJnY2MuYVxmUi4gIFlvdSBjYW4gZG86CisuU3AKKy5WYiAxCitcJiAgICAgICAgZ2NjIFwtbm9zdGRsaWIgPGZpbGVzPi4uLiBcYGdjYyBcLXByaW50XC1saWJnY2NcLWZpbGVcLW5hbWVcYAorLlZlCisuSVAgIlxmQlwtcHJpbnRcLXNlYXJjaFwtZGlyc1xmUiIgNAorLklYIEl0ZW0gIi1wcmludC1zZWFyY2gtZGlycyIKK1ByaW50IHRoZSBuYW1lIG9mIHRoZSBjb25maWd1cmVkIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgYW5kIGEgbGlzdCBvZgorcHJvZ3JhbSBhbmQgbGlicmFyeSBkaXJlY3RvcmllcyBcZkJnY2NcZlIgc2VhcmNoZXNcLVwtXC1hbmQgZG9uJ3QgZG8gYW55dGhpbmcgZWxzZS4KKy5TcAorVGhpcyBpcyB1c2VmdWwgd2hlbiBcZkJnY2NcZlIgcHJpbnRzIHRoZSBlcnJvciBtZXNzYWdlCitcJlxmQmluc3RhbGxhdGlvbiBwcm9ibGVtLCBjYW5ub3QgZXhlYyBjcHAwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XGZSLgorVG8gcmVzb2x2ZSB0aGlzIHlvdSBlaXRoZXIgbmVlZCB0byBwdXQgXGZJY3BwMFxmUiBhbmQgdGhlIG90aGVyIGNvbXBpbGVyCitjb21wb25lbnRzIHdoZXJlIFxmQmdjY1xmUiBleHBlY3RzIHRvIGZpbmQgdGhlbSwgb3IgeW91IGNhbiBzZXQgdGhlIGVudmlyb25tZW50Cit2YXJpYWJsZSBcZkJccy0xR0NDX0VYRUNfUFJFRklYXHMwXGZSIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IGluc3RhbGxlZCB0aGVtLgorRG9uJ3QgZm9yZ2V0IHRoZSB0cmFpbGluZyBcZkIvXGZSLgorLklQICJcZkJcLXByaW50XC1zeXNyb290XGZSIiA0CisuSVggSXRlbSAiLXByaW50LXN5c3Jvb3QiCitQcmludCB0aGUgdGFyZ2V0IHN5c3Jvb3QgZGlyZWN0b3J5IHRoYXQgaXMgdXNlZCBkdXJpbmcKK2NvbXBpbGF0aW9uLiAgVGhpcyBpcyB0aGUgdGFyZ2V0IHN5c3Jvb3Qgc3BlY2lmaWVkIGVpdGhlciBhdCBjb25maWd1cmUKK3RpbWUgb3IgdXNpbmcgdGhlIFxmQlwtXC1zeXNyb290XGZSIG9wdGlvbiwgcG9zc2libHkgd2l0aCBhbiBleHRyYQorc3VmZml4IHRoYXQgZGVwZW5kcyBvbiBjb21waWxhdGlvbiBvcHRpb25zLiAgSWYgbm8gdGFyZ2V0IHN5c3Jvb3QgaXMKK3NwZWNpZmllZCwgdGhlIG9wdGlvbiBwcmludHMgbm90aGluZy4KKy5JUCAiXGZCXC1wcmludFwtc3lzcm9vdFwtaGVhZGVyc1wtc3VmZml4XGZSIiA0CisuSVggSXRlbSAiLXByaW50LXN5c3Jvb3QtaGVhZGVycy1zdWZmaXgiCitQcmludCB0aGUgc3VmZml4IGFkZGVkIHRvIHRoZSB0YXJnZXQgc3lzcm9vdCB3aGVuIHNlYXJjaGluZyBmb3IKK2hlYWRlcnMsIG9yIGdpdmUgYW4gZXJyb3IgaWYgdGhlIGNvbXBpbGVyIGlzIG5vdCBjb25maWd1cmVkIHdpdGggc3VjaAorYSBzdWZmaXhcLVwtXC1hbmQgZG9uJ3QgZG8gYW55dGhpbmcgZWxzZS4KKy5JUCAiXGZCXC1kdW1wbWFjaGluZVxmUiIgNAorLklYIEl0ZW0gIi1kdW1wbWFjaGluZSIKK1ByaW50IHRoZSBjb21waWxlcidzIHRhcmdldCBtYWNoaW5lIChmb3IgZXhhbXBsZSwKK1wmXGZCaTY4NlwtcGNcLWxpbnV4XC1nbnVcZlIpXC1cLVwtYW5kIGRvbid0IGRvIGFueXRoaW5nIGVsc2UuCisuSVAgIlxmQlwtZHVtcHZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItZHVtcHZlcnNpb24iCitQcmludCB0aGUgY29tcGlsZXIgdmVyc2lvbiAoZm9yIGV4YW1wbGUsIFxmQjMuMFxmUilcLVwtXC1hbmQgZG9uJ3QgZG8KK2FueXRoaW5nIGVsc2UuCisuSVAgIlxmQlwtZHVtcHNwZWNzXGZSIiA0CisuSVggSXRlbSAiLWR1bXBzcGVjcyIKK1ByaW50IHRoZSBjb21waWxlcidzIGJ1aWx0LWluIHNwZWNzXC1cLVwtYW5kIGRvbid0IGRvIGFueXRoaW5nIGVsc2UuICAoVGhpcworaXMgdXNlZCB3aGVuIFxzLTFHQ0NcczAgaXRzZWxmIGlzIGJlaW5nIGJ1aWx0LikKKy5JUCAiXGZCXC1mbm9cLWVsaW1pbmF0ZVwtdW51c2VkXC1kZWJ1Z1wtdHlwZXNcZlIiIDQKKy5JWCBJdGVtICItZm5vLWVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMiCitOb3JtYWxseSwgd2hlbiBwcm9kdWNpbmcgXHMtMURXQVJGXHMwIDIgb3V0cHV0LCBccy0xR0NDXHMwIGF2b2lkcyBwcm9kdWNpbmcgZGVidWcgc3ltYm9sIAorb3V0cHV0IGZvciB0eXBlcyB0aGF0IGFyZSBub3doZXJlIHVzZWQgaW4gdGhlIHNvdXJjZSBmaWxlIGJlaW5nIGNvbXBpbGVkLgorU29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBoYXZlIFxzLTFHQ0NcczAgZW1pdCBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGZvciBhbGwgdHlwZXMgZGVjbGFyZWQgaW4gYSBjb21waWxhdGlvbgordW5pdCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBhY3R1YWxseSB1c2VkCitpbiB0aGF0IGNvbXBpbGF0aW9uIHVuaXQsIGZvciBleGFtcGxlIAoraWYsIGluIHRoZSBkZWJ1Z2dlciwgeW91IHdhbnQgdG8gY2FzdCBhIHZhbHVlIHRvIGEgdHlwZSB0aGF0IGlzCitub3QgYWN0dWFsbHkgdXNlZCBpbiB5b3VyIHByb2dyYW0gKGJ1dCBpcyBkZWNsYXJlZCkuICBNb3JlIG9mdGVuLAoraG93ZXZlciwgdGhpcyByZXN1bHRzIGluIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHdhc3RlZCBzcGFjZS4KKy5TUyAiT3B0aW9ucyBUaGF0IENvbnRyb2wgT3B0aW1pemF0aW9uIgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgVGhhdCBDb250cm9sIE9wdGltaXphdGlvbiIKK1RoZXNlIG9wdGlvbnMgY29udHJvbCB2YXJpb3VzIHNvcnRzIG9mIG9wdGltaXphdGlvbnMuCisuUFAKK1dpdGhvdXQgYW55IG9wdGltaXphdGlvbiBvcHRpb24sIHRoZSBjb21waWxlcidzIGdvYWwgaXMgdG8gcmVkdWNlIHRoZQorY29zdCBvZiBjb21waWxhdGlvbiBhbmQgdG8gbWFrZSBkZWJ1Z2dpbmcgcHJvZHVjZSB0aGUgZXhwZWN0ZWQKK3Jlc3VsdHMuICBTdGF0ZW1lbnRzIGFyZSBpbmRlcGVuZGVudDogaWYgeW91IHN0b3AgdGhlIHByb2dyYW0gd2l0aCBhCiticmVha3BvaW50IGJldHdlZW4gc3RhdGVtZW50cywgeW91IGNhbiB0aGVuIGFzc2lnbiBhIG5ldyB2YWx1ZSB0byBhbnkKK3ZhcmlhYmxlIG9yIGNoYW5nZSB0aGUgcHJvZ3JhbSBjb3VudGVyIHRvIGFueSBvdGhlciBzdGF0ZW1lbnQgaW4gdGhlCitmdW5jdGlvbiBhbmQgZ2V0IGV4YWN0bHkgdGhlIHJlc3VsdHMgeW91IGV4cGVjdCBmcm9tIHRoZSBzb3VyY2UKK2NvZGUuCisuUFAKK1R1cm5pbmcgb24gb3B0aW1pemF0aW9uIGZsYWdzIG1ha2VzIHRoZSBjb21waWxlciBhdHRlbXB0IHRvIGltcHJvdmUKK3RoZSBwZXJmb3JtYW5jZSBhbmQvb3IgY29kZSBzaXplIGF0IHRoZSBleHBlbnNlIG9mIGNvbXBpbGF0aW9uIHRpbWUKK2FuZCBwb3NzaWJseSB0aGUgYWJpbGl0eSB0byBkZWJ1ZyB0aGUgcHJvZ3JhbS4KKy5QUAorVGhlIGNvbXBpbGVyIHBlcmZvcm1zIG9wdGltaXphdGlvbiBiYXNlZCBvbiB0aGUga25vd2xlZGdlIGl0IGhhcyBvZiB0aGUKK3Byb2dyYW0uICBDb21waWxpbmcgbXVsdGlwbGUgZmlsZXMgYXQgb25jZSB0byBhIHNpbmdsZSBvdXRwdXQgZmlsZSBtb2RlIGFsbG93cwordGhlIGNvbXBpbGVyIHRvIHVzZSBpbmZvcm1hdGlvbiBnYWluZWQgZnJvbSBhbGwgb2YgdGhlIGZpbGVzIHdoZW4gY29tcGlsaW5nCitlYWNoIG9mIHRoZW0uCisuUFAKK05vdCBhbGwgb3B0aW1pemF0aW9ucyBhcmUgY29udHJvbGxlZCBkaXJlY3RseSBieSBhIGZsYWcuICBPbmx5CitvcHRpbWl6YXRpb25zIHRoYXQgaGF2ZSBhIGZsYWcgYXJlIGxpc3RlZCBpbiB0aGlzIHNlY3Rpb24uCisuUFAKK01vc3Qgb3B0aW1pemF0aW9ucyBhcmUgb25seSBlbmFibGVkIGlmIGFuIFxmQlwtT1xmUiBsZXZlbCBpcyBzZXQgb24KK3RoZSBjb21tYW5kIGxpbmUuICBPdGhlcndpc2UgdGhleSBhcmUgZGlzYWJsZWQsIGV2ZW4gaWYgaW5kaXZpZHVhbAorb3B0aW1pemF0aW9uIGZsYWdzIGFyZSBzcGVjaWZpZWQuCisuUFAKK0RlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IGFuZCBob3cgXHMtMUdDQ1xzMCB3YXMgY29uZmlndXJlZCwgYSBzbGlnaHRseSBkaWZmZXJlbnQKK3NldCBvZiBvcHRpbWl6YXRpb25zIG1heSBiZSBlbmFibGVkIGF0IGVhY2ggXGZCXC1PXGZSIGxldmVsIHRoYW4KK3Rob3NlIGxpc3RlZCBoZXJlLiAgWW91IGNhbiBpbnZva2UgXHMtMUdDQ1xzMCB3aXRoIFxmQlwtUSBcLVwtaGVscD1vcHRpbWl6ZXJzXGZSCit0byBmaW5kIG91dCB0aGUgZXhhY3Qgc2V0IG9mIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgZW5hYmxlZCBhdCBlYWNoIGxldmVsLgorLklQICJcZkJcLU9cZlIiIDQKKy5JWCBJdGVtICItTyIKKy5QRCAwCisuSVAgIlxmQlwtTzFcZlIiIDQKKy5JWCBJdGVtICItTzEiCisuUEQKK09wdGltaXplLiAgT3B0aW1pemluZyBjb21waWxhdGlvbiB0YWtlcyBzb21ld2hhdCBtb3JlIHRpbWUsIGFuZCBhIGxvdAorbW9yZSBtZW1vcnkgZm9yIGEgbGFyZ2UgZnVuY3Rpb24uCisuU3AKK1dpdGggXGZCXC1PXGZSLCB0aGUgY29tcGlsZXIgdHJpZXMgdG8gcmVkdWNlIGNvZGUgc2l6ZSBhbmQgZXhlY3V0aW9uCit0aW1lLCB3aXRob3V0IHBlcmZvcm1pbmcgYW55IG9wdGltaXphdGlvbnMgdGhhdCB0YWtlIGEgZ3JlYXQgZGVhbCBvZgorY29tcGlsYXRpb24gdGltZS4KKy5TcAorXCZcZkJcLU9cZlIgdHVybnMgb24gdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gZmxhZ3M6CisuU3AKK1wmXGZCXC1mYXV0b1wtaW5jXC1kZWMgCitcJlwtZmNvbXBhcmVcLWVsaW0gCitcJlwtZmNwcm9wXC1yZWdpc3RlcnMgCitcJlwtZmRjZSAKK1wmXC1mZGVmZXJcLXBvcCAKK1wmXC1mZGVsYXllZFwtYnJhbmNoIAorXCZcLWZkc2UgCitcJlwtZmd1ZXNzXC1icmFuY2hcLXByb2JhYmlsaXR5IAorXCZcLWZpZlwtY29udmVyc2lvbjIgCitcJlwtZmlmXC1jb252ZXJzaW9uIAorXCZcLWZpcGFcLXB1cmVcLWNvbnN0IAorXCZcLWZpcGFcLXByb2ZpbGUgCitcJlwtZmlwYVwtcmVmZXJlbmNlIAorXCZcLWZtZXJnZVwtY29uc3RhbnRzCitcJlwtZnNwbGl0XC13aWRlXC10eXBlcyAKK1wmXC1mdHJlZVwtYml0XC1jY3AgCitcJlwtZnRyZWVcLWJ1aWx0aW5cLWNhbGxcLWRjZSAKK1wmXC1mdHJlZVwtY2NwIAorXCZcLWZ0cmVlXC1jaCAKK1wmXC1mdHJlZVwtY29weXJlbmFtZSAKK1wmXC1mdHJlZVwtZGNlIAorXCZcLWZ0cmVlXC1kb21pbmF0b3JcLW9wdHMgCitcJlwtZnRyZWVcLWRzZSAKK1wmXC1mdHJlZVwtZm9yd3Byb3AgCitcJlwtZnRyZWVcLWZyZSAKK1wmXC1mdHJlZVwtcGhpcHJvcCAKK1wmXC1mdHJlZVwtc2xzciAKK1wmXC1mdHJlZVwtc3JhIAorXCZcLWZ0cmVlXC1wdGEgCitcJlwtZnRyZWVcLXRlciAKK1wmXC1mdW5pdFwtYXRcLWFcLXRpbWVcZlIKKy5TcAorXCZcZkJcLU9cZlIgYWxzbyB0dXJucyBvbiBcZkJcLWZvbWl0XC1mcmFtZVwtcG9pbnRlclxmUiBvbiBtYWNoaW5lcword2hlcmUgZG9pbmcgc28gZG9lcyBub3QgaW50ZXJmZXJlIHdpdGggZGVidWdnaW5nLgorLklQICJcZkJcLU8yXGZSIiA0CisuSVggSXRlbSAiLU8yIgorT3B0aW1pemUgZXZlbiBtb3JlLiAgXHMtMUdDQ1xzMCBwZXJmb3JtcyBuZWFybHkgYWxsIHN1cHBvcnRlZCBvcHRpbWl6YXRpb25zCit0aGF0IGRvIG5vdCBpbnZvbHZlIGEgc3BhY2Utc3BlZWQgdHJhZGVvZmYuCitBcyBjb21wYXJlZCB0byBcZkJcLU9cZlIsIHRoaXMgb3B0aW9uIGluY3JlYXNlcyBib3RoIGNvbXBpbGF0aW9uIHRpbWUKK2FuZCB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGdlbmVyYXRlZCBjb2RlLgorLlNwCitcJlxmQlwtTzJcZlIgdHVybnMgb24gYWxsIG9wdGltaXphdGlvbiBmbGFncyBzcGVjaWZpZWQgYnkgXGZCXC1PXGZSLiAgSXQKK2Fsc28gdHVybnMgb24gdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gZmxhZ3M6CitcJlxmQlwtZnRocmVhZFwtanVtcHMgCitcJlwtZmFsaWduXC1mdW5jdGlvbnMgIFwtZmFsaWduXC1qdW1wcyAKK1wmXC1mYWxpZ25cLWxvb3BzICBcLWZhbGlnblwtbGFiZWxzIAorXCZcLWZjYWxsZXJcLXNhdmVzIAorXCZcLWZjcm9zc2p1bXBpbmcgCitcJlwtZmNzZVwtZm9sbG93XC1qdW1wcyAgXC1mY3NlXC1za2lwXC1ibG9ja3MgCitcJlwtZmRlbGV0ZVwtbnVsbFwtcG9pbnRlclwtY2hlY2tzIAorXCZcLWZkZXZpcnR1YWxpemUgCitcJlwtZmV4cGVuc2l2ZVwtb3B0aW1pemF0aW9ucyAKK1wmXC1mZ2NzZSAgXC1mZ2NzZVwtbG0gIAorXCZcLWZob2lzdFwtYWRqYWNlbnRcLWxvYWRzIAorXCZcLWZpbmxpbmVcLXNtYWxsXC1mdW5jdGlvbnMgCitcJlwtZmluZGlyZWN0XC1pbmxpbmluZyAKK1wmXC1maXBhXC1zcmEgCitcJlwtZm9wdGltaXplXC1zaWJsaW5nXC1jYWxscyAKK1wmXC1mcGFydGlhbFwtaW5saW5pbmcgCitcJlwtZnBlZXBob2xlMiAKK1wmXC1mcmVnbW92ZSAKK1wmXC1mcmVvcmRlclwtYmxvY2tzICBcLWZyZW9yZGVyXC1mdW5jdGlvbnMgCitcJlwtZnJlcnVuXC1jc2VcLWFmdGVyXC1sb29wICAKK1wmXC1mc2NoZWRcLWludGVyYmxvY2sgIFwtZnNjaGVkXC1zcGVjIAorXCZcLWZzY2hlZHVsZVwtaW5zbnMgIFwtZnNjaGVkdWxlXC1pbnNuczIgCitcJlwtZnN0cmljdFwtYWxpYXNpbmcgXC1mc3RyaWN0XC1vdmVyZmxvdyAKK1wmXC1mdHJlZVwtc3dpdGNoXC1jb252ZXJzaW9uIFwtZnRyZWVcLXRhaWxcLW1lcmdlIAorXCZcLWZ0cmVlXC1wcmUgCitcJlwtZnRyZWVcLXZycFxmUgorLlNwCitQbGVhc2Ugbm90ZSB0aGUgd2FybmluZyB1bmRlciBcZkJcLWZnY3NlXGZSIGFib3V0CitpbnZva2luZyBcZkJcLU8yXGZSIG9uIHByb2dyYW1zIHRoYXQgdXNlIGNvbXB1dGVkIGdvdG9zLgorLklQICJcZkJcLU8zXGZSIiA0CisuSVggSXRlbSAiLU8zIgorT3B0aW1pemUgeWV0IG1vcmUuICBcZkJcLU8zXGZSIHR1cm5zIG9uIGFsbCBvcHRpbWl6YXRpb25zIHNwZWNpZmllZAorYnkgXGZCXC1PMlxmUiBhbmQgYWxzbyB0dXJucyBvbiB0aGUgXGZCXC1maW5saW5lXC1mdW5jdGlvbnNcZlIsCitcJlxmQlwtZnVuc3dpdGNoXC1sb29wc1xmUiwgXGZCXC1mcHJlZGljdGl2ZVwtY29tbW9uaW5nXGZSLAorXCZcZkJcLWZnY3NlXC1hZnRlclwtcmVsb2FkXGZSLCBcZkJcLWZ0cmVlXC12ZWN0b3JpemVcZlIsCitcJlxmQlwtZnZlY3RcLWNvc3RcLW1vZGVsXGZSLAorXCZcZkJcLWZ0cmVlXC1wYXJ0aWFsXC1wcmVcZlIgYW5kIFxmQlwtZmlwYVwtY3BcLWNsb25lXGZSIG9wdGlvbnMuCisuSVAgIlxmQlwtTzBcZlIiIDQKKy5JWCBJdGVtICItTzAiCitSZWR1Y2UgY29tcGlsYXRpb24gdGltZSBhbmQgbWFrZSBkZWJ1Z2dpbmcgcHJvZHVjZSB0aGUgZXhwZWN0ZWQKK3Jlc3VsdHMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLU9zXGZSIiA0CisuSVggSXRlbSAiLU9zIgorT3B0aW1pemUgZm9yIHNpemUuICBcZkJcLU9zXGZSIGVuYWJsZXMgYWxsIFxmQlwtTzJcZlIgb3B0aW1pemF0aW9ucyB0aGF0CitkbyBub3QgdHlwaWNhbGx5IGluY3JlYXNlIGNvZGUgc2l6ZS4gIEl0IGFsc28gcGVyZm9ybXMgZnVydGhlcgorb3B0aW1pemF0aW9ucyBkZXNpZ25lZCB0byByZWR1Y2UgY29kZSBzaXplLgorLlNwCitcJlxmQlwtT3NcZlIgZGlzYWJsZXMgdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gZmxhZ3M6CitcJlxmQlwtZmFsaWduXC1mdW5jdGlvbnMgIFwtZmFsaWduXC1qdW1wcyAgXC1mYWxpZ25cLWxvb3BzIAorXCZcLWZhbGlnblwtbGFiZWxzICBcLWZyZW9yZGVyXC1ibG9ja3MgIFwtZnJlb3JkZXJcLWJsb2Nrc1wtYW5kXC1wYXJ0aXRpb24gCitcJlwtZnByZWZldGNoXC1sb29wXC1hcnJheXMgIFwtZnRyZWVcLXZlY3RcLWxvb3BcLXZlcnNpb25cZlIKKy5JUCAiXGZCXC1PZmFzdFxmUiIgNAorLklYIEl0ZW0gIi1PZmFzdCIKK0Rpc3JlZ2FyZCBzdHJpY3Qgc3RhbmRhcmRzIGNvbXBsaWFuY2UuICBcZkJcLU9mYXN0XGZSIGVuYWJsZXMgYWxsCitcJlxmQlwtTzNcZlIgb3B0aW1pemF0aW9ucy4gIEl0IGFsc28gZW5hYmxlcyBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIG5vdAordmFsaWQgZm9yIGFsbCBzdGFuZGFyZC1jb21wbGlhbnQgcHJvZ3JhbXMuCitJdCB0dXJucyBvbiBcZkJcLWZmYXN0XC1tYXRoXGZSIGFuZCB0aGUgRm9ydHJhbi1zcGVjaWZpYworXCZcZkJcLWZub1wtcHJvdGVjdFwtcGFyZW5zXGZSIGFuZCBcZkJcLWZzdGFja1wtYXJyYXlzXGZSLgorLklQICJcZkJcLU9nXGZSIiA0CisuSVggSXRlbSAiLU9nIgorT3B0aW1pemUgZGVidWdnaW5nIGV4cGVyaWVuY2UuICBcZkJcLU9nXGZSIGVuYWJsZXMgb3B0aW1pemF0aW9ucwordGhhdCBkbyBub3QgaW50ZXJmZXJlIHdpdGggZGVidWdnaW5nLiBJdCBzaG91bGQgYmUgdGhlIG9wdGltaXphdGlvbgorbGV2ZWwgb2YgY2hvaWNlIGZvciB0aGUgc3RhbmRhcmQgZWRpdC1jb21waWxlLWRlYnVnIGN5Y2xlLCBvZmZlcmluZworYSByZWFzb25hYmxlIGxldmVsIG9mIG9wdGltaXphdGlvbiB3aGlsZSBtYWludGFpbmluZyBmYXN0IGNvbXBpbGF0aW9uCithbmQgYSBnb29kIGRlYnVnZ2luZyBleHBlcmllbmNlLgorLlNwCitJZiB5b3UgdXNlIG11bHRpcGxlIFxmQlwtT1xmUiBvcHRpb25zLCB3aXRoIG9yIHdpdGhvdXQgbGV2ZWwgbnVtYmVycywKK3RoZSBsYXN0IHN1Y2ggb3B0aW9uIGlzIHRoZSBvbmUgdGhhdCBpcyBlZmZlY3RpdmUuCisuUFAKK09wdGlvbnMgb2YgdGhlIGZvcm0gXGZCXC1mXGZSXGZJZmxhZ1xmUiBzcGVjaWZ5IG1hY2hpbmUtaW5kZXBlbmRlbnQKK2ZsYWdzLiAgTW9zdCBmbGFncyBoYXZlIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGZvcm1zOyB0aGUgbmVnYXRpdmUKK2Zvcm0gb2YgXGZCXC1mZm9vXGZSIGlzIFxmQlwtZm5vXC1mb29cZlIuICBJbiB0aGUgdGFibGUKK2JlbG93LCBvbmx5IG9uZSBvZiB0aGUgZm9ybXMgaXMgbGlzdGVkXC1cLVwtdGhlIG9uZSB5b3UgdHlwaWNhbGx5IAordXNlLiAgWW91IGNhbiBmaWd1cmUgb3V0IHRoZSBvdGhlciBmb3JtIGJ5IGVpdGhlciByZW1vdmluZyBcZkJub1wtXGZSCitvciBhZGRpbmcgaXQuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBjb250cm9sIHNwZWNpZmljIG9wdGltaXphdGlvbnMuICBUaGV5IGFyZSBlaXRoZXIKK2FjdGl2YXRlZCBieSBcZkJcLU9cZlIgb3B0aW9ucyBvciBhcmUgcmVsYXRlZCB0byBvbmVzIHRoYXQgYXJlLiAgWW91CitjYW4gdXNlIHRoZSBmb2xsb3dpbmcgZmxhZ3MgaW4gdGhlIHJhcmUgY2FzZXMgd2hlbiBcKihMImZpbmUtdHVuaW5nXCooUiIgb2YKK29wdGltaXphdGlvbnMgdG8gYmUgcGVyZm9ybWVkIGlzIGRlc2lyZWQuCisuSVAgIlxmQlwtZm5vXC1kZWZhdWx0XC1pbmxpbmVcZlIiIDQKKy5JWCBJdGVtICItZm5vLWRlZmF1bHQtaW5saW5lIgorRG8gbm90IG1ha2UgbWVtYmVyIGZ1bmN0aW9ucyBpbmxpbmUgYnkgZGVmYXVsdCBtZXJlbHkgYmVjYXVzZSB0aGV5IGFyZQorZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHNjb3BlIChcKihDKyBvbmx5KS4gIE90aGVyd2lzZSwgd2hlbiB5b3Ugc3BlY2lmeQorXCZcZkJcLU9cZlIsIG1lbWJlciBmdW5jdGlvbnMgZGVmaW5lZCBpbnNpZGUgY2xhc3Mgc2NvcGUgYXJlIGNvbXBpbGVkCitpbmxpbmUgYnkgZGVmYXVsdDsgaS5lLiwgeW91IGRvbid0IG5lZWQgdG8gYWRkIFxmQmlubGluZVxmUiBpbiBmcm9udCBvZgordGhlIG1lbWJlciBmdW5jdGlvbiBuYW1lLgorLklQICJcZkJcLWZub1wtZGVmZXJcLXBvcFxmUiIgNAorLklYIEl0ZW0gIi1mbm8tZGVmZXItcG9wIgorQWx3YXlzIHBvcCB0aGUgYXJndW1lbnRzIHRvIGVhY2ggZnVuY3Rpb24gY2FsbCBhcyBzb29uIGFzIHRoYXQgZnVuY3Rpb24KK3JldHVybnMuICBGb3IgbWFjaGluZXMgdGhhdCBtdXN0IHBvcCBhcmd1bWVudHMgYWZ0ZXIgYSBmdW5jdGlvbiBjYWxsLAordGhlIGNvbXBpbGVyIG5vcm1hbGx5IGxldHMgYXJndW1lbnRzIGFjY3VtdWxhdGUgb24gdGhlIHN0YWNrIGZvciBzZXZlcmFsCitmdW5jdGlvbiBjYWxscyBhbmQgcG9wcyB0aGVtIGFsbCBhdCBvbmNlLgorLlNwCitEaXNhYmxlZCBhdCBsZXZlbHMgXGZCXC1PXGZSLCBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZmb3J3YXJkXC1wcm9wYWdhdGVcZlIiIDQKKy5JWCBJdGVtICItZmZvcndhcmQtcHJvcGFnYXRlIgorUGVyZm9ybSBhIGZvcndhcmQgcHJvcGFnYXRpb24gcGFzcyBvbiBccy0xUlRMXHMwLiAgVGhlIHBhc3MgdHJpZXMgdG8gY29tYmluZSB0d28KK2luc3RydWN0aW9ucyBhbmQgY2hlY2tzIGlmIHRoZSByZXN1bHQgY2FuIGJlIHNpbXBsaWZpZWQuICBJZiBsb29wIHVucm9sbGluZworaXMgYWN0aXZlLCB0d28gcGFzc2VzIGFyZSBwZXJmb3JtZWQgYW5kIHRoZSBzZWNvbmQgaXMgc2NoZWR1bGVkIGFmdGVyCitsb29wIHVucm9sbGluZy4KKy5TcAorVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IG9wdGltaXphdGlvbiBsZXZlbHMgXGZCXC1PXGZSLAorXCZcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZmcFwtY29udHJhY3Q9XGZSXGZJc3R5bGVcZlIiIDQKKy5JWCBJdGVtICItZmZwLWNvbnRyYWN0PXN0eWxlIgorXCZcZkJcLWZmcFwtY29udHJhY3Q9b2ZmXGZSIGRpc2FibGVzIGZsb2F0aW5nLXBvaW50IGV4cHJlc3Npb24gY29udHJhY3Rpb24uCitcJlxmQlwtZmZwXC1jb250cmFjdD1mYXN0XGZSIGVuYWJsZXMgZmxvYXRpbmctcG9pbnQgZXhwcmVzc2lvbiBjb250cmFjdGlvbgorc3VjaCBhcyBmb3JtaW5nIG9mIGZ1c2VkIG11bHRpcGx5LWFkZCBvcGVyYXRpb25zIGlmIHRoZSB0YXJnZXQgaGFzCituYXRpdmUgc3VwcG9ydCBmb3IgdGhlbS4KK1wmXGZCXC1mZnBcLWNvbnRyYWN0PW9uXGZSIGVuYWJsZXMgZmxvYXRpbmctcG9pbnQgZXhwcmVzc2lvbiBjb250cmFjdGlvbgoraWYgYWxsb3dlZCBieSB0aGUgbGFuZ3VhZ2Ugc3RhbmRhcmQuICBUaGlzIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQKK2FuZCB0cmVhdGVkIGVxdWFsIHRvIFxmQlwtZmZwXC1jb250cmFjdD1vZmZcZlIuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZmZwXC1jb250cmFjdD1mYXN0XGZSLgorLklQICJcZkJcLWZvbWl0XC1mcmFtZVwtcG9pbnRlclxmUiIgNAorLklYIEl0ZW0gIi1mb21pdC1mcmFtZS1wb2ludGVyIgorRG9uJ3Qga2VlcCB0aGUgZnJhbWUgcG9pbnRlciBpbiBhIHJlZ2lzdGVyIGZvciBmdW5jdGlvbnMgdGhhdAorZG9uJ3QgbmVlZCBvbmUuICBUaGlzIGF2b2lkcyB0aGUgaW5zdHJ1Y3Rpb25zIHRvIHNhdmUsIHNldCB1cCBhbmQKK3Jlc3RvcmUgZnJhbWUgcG9pbnRlcnM7IGl0IGFsc28gbWFrZXMgYW4gZXh0cmEgcmVnaXN0ZXIgYXZhaWxhYmxlCitpbiBtYW55IGZ1bmN0aW9ucy4gIFxmQkl0IGFsc28gbWFrZXMgZGVidWdnaW5nIGltcG9zc2libGUgb24KK3NvbWUgbWFjaGluZXMuXGZSCisuU3AKK09uIHNvbWUgbWFjaGluZXMsIHN1Y2ggYXMgdGhlIFxzLTFWQVhcczAsIHRoaXMgZmxhZyBoYXMgbm8gZWZmZWN0LCBiZWNhdXNlCit0aGUgc3RhbmRhcmQgY2FsbGluZyBzZXF1ZW5jZSBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdGhlIGZyYW1lIHBvaW50ZXIKK2FuZCBub3RoaW5nIGlzIHNhdmVkIGJ5IHByZXRlbmRpbmcgaXQgZG9lc24ndCBleGlzdC4gIFRoZQorbWFjaGluZS1kZXNjcmlwdGlvbiBtYWNybyBcZihDV1wqKENgRlJBTUVfUE9JTlRFUl9SRVFVSVJFRFwqKEMnXGZSIGNvbnRyb2xzCit3aGV0aGVyIGEgdGFyZ2V0IG1hY2hpbmUgc3VwcG9ydHMgdGhpcyBmbGFnLgorLlNwCitTdGFydGluZyB3aXRoIFxzLTFHQ0NcczAgdmVyc2lvbiA0LjYsIHRoZSBkZWZhdWx0IHNldHRpbmcgKHdoZW4gbm90IG9wdGltaXppbmcgZm9yCitzaXplKSBmb3IgMzJcLWJpdCBHTlUvTGludXggeDg2IGFuZCAzMlwtYml0IERhcndpbiB4ODYgdGFyZ2V0cyBoYXMgYmVlbiBjaGFuZ2VkIHRvCitcJlxmQlwtZm9taXRcLWZyYW1lXC1wb2ludGVyXGZSLiAgVGhlIGRlZmF1bHQgY2FuIGJlIHJldmVydGVkIHRvCitcJlxmQlwtZm5vXC1vbWl0XC1mcmFtZVwtcG9pbnRlclxmUiBieSBjb25maWd1cmluZyBccy0xR0NDXHMwIHdpdGggdGhlCitcJlxmQlwtXC1lbmFibGVcLWZyYW1lXC1wb2ludGVyXGZSIGNvbmZpZ3VyZSBvcHRpb24uCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mb3B0aW1pemVcLXNpYmxpbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLWZvcHRpbWl6ZS1zaWJsaW5nLWNhbGxzIgorT3B0aW1pemUgc2libGluZyBhbmQgdGFpbCByZWN1cnNpdmUgY2FsbHMuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZm5vXC1pbmxpbmVcZlIiIDQKKy5JWCBJdGVtICItZm5vLWlubGluZSIKK0RvIG5vdCBleHBhbmQgYW55IGZ1bmN0aW9ucyBpbmxpbmUgYXBhcnQgZnJvbSB0aG9zZSBtYXJrZWQgd2l0aAordGhlIFxmKENXXCooQ2BhbHdheXNfaW5saW5lXCooQydcZlIgYXR0cmlidXRlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIG5vdAorb3B0aW1pemluZy4KKy5TcAorU2luZ2xlIGZ1bmN0aW9ucyBjYW4gYmUgZXhlbXB0ZWQgZnJvbSBpbmxpbmluZyBieSBtYXJraW5nIHRoZW0KK3dpdGggdGhlIFxmKENXXCooQ2Bub2lubGluZVwqKEMnXGZSIGF0dHJpYnV0ZS4KKy5JUCAiXGZCXC1maW5saW5lXC1zbWFsbFwtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLWZpbmxpbmUtc21hbGwtZnVuY3Rpb25zIgorSW50ZWdyYXRlIGZ1bmN0aW9ucyBpbnRvIHRoZWlyIGNhbGxlcnMgd2hlbiB0aGVpciBib2R5IGlzIHNtYWxsZXIgdGhhbiBleHBlY3RlZAorZnVuY3Rpb24gY2FsbCBjb2RlIChzbyBvdmVyYWxsIHNpemUgb2YgcHJvZ3JhbSBnZXRzIHNtYWxsZXIpLiAgVGhlIGNvbXBpbGVyCitoZXVyaXN0aWNhbGx5IGRlY2lkZXMgd2hpY2ggZnVuY3Rpb25zIGFyZSBzaW1wbGUgZW5vdWdoIHRvIGJlIHdvcnRoIGludGVncmF0aW5nCitpbiB0aGlzIHdheS4gIFRoaXMgaW5saW5pbmcgYXBwbGllcyB0byBhbGwgZnVuY3Rpb25zLCBldmVuIHRob3NlIG5vdCBkZWNsYXJlZAoraW5saW5lLgorLlNwCitFbmFibGVkIGF0IGxldmVsIFxmQlwtTzJcZlIuCisuSVAgIlxmQlwtZmluZGlyZWN0XC1pbmxpbmluZ1xmUiIgNAorLklYIEl0ZW0gIi1maW5kaXJlY3QtaW5saW5pbmciCitJbmxpbmUgYWxzbyBpbmRpcmVjdCBjYWxscyB0aGF0IGFyZSBkaXNjb3ZlcmVkIHRvIGJlIGtub3duIGF0IGNvbXBpbGUKK3RpbWUgdGhhbmtzIHRvIHByZXZpb3VzIGlubGluaW5nLiAgVGhpcyBvcHRpb24gaGFzIGFueSBlZmZlY3Qgb25seQord2hlbiBpbmxpbmluZyBpdHNlbGYgaXMgdHVybmVkIG9uIGJ5IHRoZSBcZkJcLWZpbmxpbmVcLWZ1bmN0aW9uc1xmUgorb3IgXGZCXC1maW5saW5lXC1zbWFsbFwtZnVuY3Rpb25zXGZSIG9wdGlvbnMuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWwgXGZCXC1PMlxmUi4KKy5JUCAiXGZCXC1maW5saW5lXC1mdW5jdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZmlubGluZS1mdW5jdGlvbnMiCitDb25zaWRlciBhbGwgZnVuY3Rpb25zIGZvciBpbmxpbmluZywgZXZlbiBpZiB0aGV5IGFyZSBub3QgZGVjbGFyZWQgaW5saW5lLgorVGhlIGNvbXBpbGVyIGhldXJpc3RpY2FsbHkgZGVjaWRlcyB3aGljaCBmdW5jdGlvbnMgYXJlIHdvcnRoIGludGVncmF0aW5nCitpbiB0aGlzIHdheS4KKy5TcAorSWYgYWxsIGNhbGxzIHRvIGEgZ2l2ZW4gZnVuY3Rpb24gYXJlIGludGVncmF0ZWQsIGFuZCB0aGUgZnVuY3Rpb24gaXMKK2RlY2xhcmVkIFxmKENXXCooQ2BzdGF0aWNcKihDJ1xmUiwgdGhlbiB0aGUgZnVuY3Rpb24gaXMgbm9ybWFsbHkgbm90IG91dHB1dCBhcworYXNzZW1ibGVyIGNvZGUgaW4gaXRzIG93biByaWdodC4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbCBcZkJcLU8zXGZSLgorLklQICJcZkJcLWZpbmxpbmVcLWZ1bmN0aW9uc1wtY2FsbGVkXC1vbmNlXGZSIiA0CisuSVggSXRlbSAiLWZpbmxpbmUtZnVuY3Rpb25zLWNhbGxlZC1vbmNlIgorQ29uc2lkZXIgYWxsIFxmKENXXCooQ2BzdGF0aWNcKihDJ1xmUiBmdW5jdGlvbnMgY2FsbGVkIG9uY2UgZm9yIGlubGluaW5nIGludG8gdGhlaXIKK2NhbGxlciBldmVuIGlmIHRoZXkgYXJlIG5vdCBtYXJrZWQgXGYoQ1dcKihDYGlubGluZVwqKEMnXGZSLiAgSWYgYSBjYWxsIHRvIGEgZ2l2ZW4KK2Z1bmN0aW9uIGlzIGludGVncmF0ZWQsIHRoZW4gdGhlIGZ1bmN0aW9uIGlzIG5vdCBvdXRwdXQgYXMgYXNzZW1ibGVyIGNvZGUKK2luIGl0cyBvd24gcmlnaHQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzFcZlIsIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIgYW5kIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmVhcmx5XC1pbmxpbmluZ1xmUiIgNAorLklYIEl0ZW0gIi1mZWFybHktaW5saW5pbmciCitJbmxpbmUgZnVuY3Rpb25zIG1hcmtlZCBieSBcZihDV1wqKENgYWx3YXlzX2lubGluZVwqKEMnXGZSIGFuZCBmdW5jdGlvbnMgd2hvc2UgYm9keSBzZWVtcworc21hbGxlciB0aGFuIHRoZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIGVhcmx5IGJlZm9yZSBkb2luZworXCZcZkJcLWZwcm9maWxlXC1nZW5lcmF0ZVxmUiBpbnN0cnVtZW50YXRpb24gYW5kIHJlYWwgaW5saW5pbmcgcGFzcy4gIERvaW5nIHNvCittYWtlcyBwcm9maWxpbmcgc2lnbmlmaWNhbnRseSBjaGVhcGVyIGFuZCB1c3VhbGx5IGlubGluaW5nIGZhc3RlciBvbiBwcm9ncmFtcworaGF2aW5nIGxhcmdlIGNoYWlucyBvZiBuZXN0ZWQgd3JhcHBlciBmdW5jdGlvbnMuCisuU3AKK0VuYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1maXBhXC1zcmFcZlIiIDQKKy5JWCBJdGVtICItZmlwYS1zcmEiCitQZXJmb3JtIGludGVycHJvY2VkdXJhbCBzY2FsYXIgcmVwbGFjZW1lbnQgb2YgYWdncmVnYXRlcywgcmVtb3ZhbCBvZgordW51c2VkIHBhcmFtZXRlcnMgYW5kIHJlcGxhY2VtZW50IG9mIHBhcmFtZXRlcnMgcGFzc2VkIGJ5IHJlZmVyZW5jZQorYnkgcGFyYW1ldGVycyBwYXNzZWQgYnkgdmFsdWUuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIgYW5kIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmlubGluZVwtbGltaXQ9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1maW5saW5lLWxpbWl0PW4iCitCeSBkZWZhdWx0LCBccy0xR0NDXHMwIGxpbWl0cyB0aGUgc2l6ZSBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgaW5saW5lZC4gIFRoaXMgZmxhZworYWxsb3dzIGNvYXJzZSBjb250cm9sIG9mIHRoaXMgbGltaXQuICBcZkluXGZSIGlzIHRoZSBzaXplIG9mIGZ1bmN0aW9ucyB0aGF0CitjYW4gYmUgaW5saW5lZCBpbiBudW1iZXIgb2YgcHNldWRvIGluc3RydWN0aW9ucy4KKy5TcAorSW5saW5pbmcgaXMgYWN0dWFsbHkgY29udHJvbGxlZCBieSBhIG51bWJlciBvZiBwYXJhbWV0ZXJzLCB3aGljaCBtYXkgYmUKK3NwZWNpZmllZCBpbmRpdmlkdWFsbHkgYnkgdXNpbmcgXGZCXC1cLXBhcmFtXGZSIFxmSW5hbWVcZlJcZkI9XGZSXGZJdmFsdWVcZlIuCitUaGUgXGZCXC1maW5saW5lXC1saW1pdD1cZlJcZkluXGZSIG9wdGlvbiBzZXRzIHNvbWUgb2YgdGhlc2UgcGFyYW1ldGVycworYXMgZm9sbG93czoKKy5SUyA0CisuSVAgIlxmQm1heC1pbmxpbmUtaW5zbnMtc2luZ2xlXGZSIiA0CisuSVggSXRlbSAibWF4LWlubGluZS1pbnNucy1zaW5nbGUiCitpcyBzZXQgdG8gXGZJblxmUi8yLgorLklQICJcZkJtYXgtaW5saW5lLWluc25zLWF1dG9cZlIiIDQKKy5JWCBJdGVtICJtYXgtaW5saW5lLWluc25zLWF1dG8iCitpcyBzZXQgdG8gXGZJblxmUi8yLgorLlJFCisuUlMgNAorLlNwCitTZWUgYmVsb3cgZm9yIGEgZG9jdW1lbnRhdGlvbiBvZiB0aGUgaW5kaXZpZHVhbAorcGFyYW1ldGVycyBjb250cm9sbGluZyBpbmxpbmluZyBhbmQgZm9yIHRoZSBkZWZhdWx0cyBvZiB0aGVzZSBwYXJhbWV0ZXJzLgorLlNwCitcJlxmSU5vdGU6XGZSIHRoZXJlIG1heSBiZSBubyB2YWx1ZSB0byBcZkJcLWZpbmxpbmVcLWxpbWl0XGZSIHRoYXQgcmVzdWx0cworaW4gZGVmYXVsdCBiZWhhdmlvci4KKy5TcAorXCZcZklOb3RlOlxmUiBwc2V1ZG8gaW5zdHJ1Y3Rpb24gcmVwcmVzZW50cywgaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbnRleHQsIGFuCithYnN0cmFjdCBtZWFzdXJlbWVudCBvZiBmdW5jdGlvbidzIHNpemUuICBJbiBubyB3YXkgZG9lcyBpdCByZXByZXNlbnQgYSBjb3VudAorb2YgYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIGFuZCBhcyBzdWNoIGl0cyBleGFjdCBtZWFuaW5nIG1pZ2h0IGNoYW5nZSBmcm9tIG9uZQorcmVsZWFzZSB0byBhbiBhbm90aGVyLgorLlJFCisuSVAgIlxmQlwtZm5vXC1rZWVwXC1pbmxpbmVcLWRsbGV4cG9ydFxmUiIgNAorLklYIEl0ZW0gIi1mbm8ta2VlcC1pbmxpbmUtZGxsZXhwb3J0IgorVGhpcyBpcyBhIG1vcmUgZmluZS1ncmFpbmVkIHZlcnNpb24gb2YgXGZCXC1ma2VlcFwtaW5saW5lXC1mdW5jdGlvbnNcZlIsCit3aGljaCBhcHBsaWVzIG9ubHkgdG8gZnVuY3Rpb25zIHRoYXQgYXJlIGRlY2xhcmVkIHVzaW5nIHRoZSBcZihDV1wqKENgZGxsZXhwb3J0XCooQydcZlIKK2F0dHJpYnV0ZSBvciBkZWNsc3BlYworLklQICJcZkJcLWZrZWVwXC1pbmxpbmVcLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1ma2VlcC1pbmxpbmUtZnVuY3Rpb25zIgorSW4gQywgZW1pdCBcZihDV1wqKENgc3RhdGljXCooQydcZlIgZnVuY3Rpb25zIHRoYXQgYXJlIGRlY2xhcmVkIFxmKENXXCooQ2BpbmxpbmVcKihDJ1xmUgoraW50byB0aGUgb2JqZWN0IGZpbGUsIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIGlubGluZWQgaW50byBhbGwKK29mIGl0cyBjYWxsZXJzLiAgVGhpcyBzd2l0Y2ggZG9lcyBub3QgYWZmZWN0IGZ1bmN0aW9ucyB1c2luZyB0aGUKK1wmXGYoQ1dcKihDYGV4dGVybiBpbmxpbmVcKihDJ1xmUiBleHRlbnNpb24gaW4gXHMtMUdOVVxzMCBDOTAuICBJbiBcKihDKywgZW1pdCBhbnkgYW5kIGFsbAoraW5saW5lIGZ1bmN0aW9ucyBpbnRvIHRoZSBvYmplY3QgZmlsZS4KKy5JUCAiXGZCXC1ma2VlcFwtc3RhdGljXC1jb25zdHNcZlIiIDQKKy5JWCBJdGVtICItZmtlZXAtc3RhdGljLWNvbnN0cyIKK0VtaXQgdmFyaWFibGVzIGRlY2xhcmVkIFxmKENXXCooQ2BzdGF0aWMgY29uc3RcKihDJ1xmUiB3aGVuIG9wdGltaXphdGlvbiBpc24ndCB0dXJuZWQKK29uLCBldmVuIGlmIHRoZSB2YXJpYWJsZXMgYXJlbid0IHJlZmVyZW5jZWQuCisuU3AKK1wmXHMtMUdDQ1xzMCBlbmFibGVzIHRoaXMgb3B0aW9uIGJ5IGRlZmF1bHQuICBJZiB5b3Ugd2FudCB0byBmb3JjZSB0aGUgY29tcGlsZXIgdG8KK2NoZWNrIGlmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdAorb3B0aW1pemF0aW9uIGlzIHR1cm5lZCBvbiwgdXNlIHRoZSBcZkJcLWZub1wta2VlcFwtc3RhdGljXC1jb25zdHNcZlIgb3B0aW9uLgorLklQICJcZkJcLWZtZXJnZVwtY29uc3RhbnRzXGZSIiA0CisuSVggSXRlbSAiLWZtZXJnZS1jb25zdGFudHMiCitBdHRlbXB0IHRvIG1lcmdlIGlkZW50aWNhbCBjb25zdGFudHMgKHN0cmluZyBjb25zdGFudHMgYW5kIGZsb2F0aW5nLXBvaW50Citjb25zdGFudHMpIGFjcm9zcyBjb21waWxhdGlvbiB1bml0cy4KKy5TcAorVGhpcyBvcHRpb24gaXMgdGhlIGRlZmF1bHQgZm9yIG9wdGltaXplZCBjb21waWxhdGlvbiBpZiB0aGUgYXNzZW1ibGVyIGFuZAorbGlua2VyIHN1cHBvcnQgaXQuICBVc2UgXGZCXC1mbm9cLW1lcmdlXC1jb25zdGFudHNcZlIgdG8gaW5oaWJpdCB0aGlzCitiZWhhdmlvci4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PXGZSLCBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZtZXJnZVwtYWxsXC1jb25zdGFudHNcZlIiIDQKKy5JWCBJdGVtICItZm1lcmdlLWFsbC1jb25zdGFudHMiCitBdHRlbXB0IHRvIG1lcmdlIGlkZW50aWNhbCBjb25zdGFudHMgYW5kIGlkZW50aWNhbCB2YXJpYWJsZXMuCisuU3AKK1RoaXMgb3B0aW9uIGltcGxpZXMgXGZCXC1mbWVyZ2VcLWNvbnN0YW50c1xmUi4gIEluIGFkZGl0aW9uIHRvCitcJlxmQlwtZm1lcmdlXC1jb25zdGFudHNcZlIgdGhpcyBjb25zaWRlcnMgZS5nLiBldmVuIGNvbnN0YW50IGluaXRpYWxpemVkCithcnJheXMgb3IgaW5pdGlhbGl6ZWQgY29uc3RhbnQgdmFyaWFibGVzIHdpdGggaW50ZWdyYWwgb3IgZmxvYXRpbmctcG9pbnQKK3R5cGVzLiAgTGFuZ3VhZ2VzIGxpa2UgQyBvciBcKihDKyByZXF1aXJlIGVhY2ggdmFyaWFibGUsIGluY2x1ZGluZyBtdWx0aXBsZQoraW5zdGFuY2VzIG9mIHRoZSBzYW1lIHZhcmlhYmxlIGluIHJlY3Vyc2l2ZSBjYWxscywgdG8gaGF2ZSBkaXN0aW5jdCBsb2NhdGlvbnMsCitzbyB1c2luZyB0aGlzIG9wdGlvbiByZXN1bHRzIGluIG5vbi1jb25mb3JtaW5nCitiZWhhdmlvci4KKy5JUCAiXGZCXC1mbW9kdWxvXC1zY2hlZFxmUiIgNAorLklYIEl0ZW0gIi1mbW9kdWxvLXNjaGVkIgorUGVyZm9ybSBzd2luZyBtb2R1bG8gc2NoZWR1bGluZyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGZpcnN0IHNjaGVkdWxpbmcKK3Bhc3MuICBUaGlzIHBhc3MgbG9va3MgYXQgaW5uZXJtb3N0IGxvb3BzIGFuZCByZW9yZGVycyB0aGVpcgoraW5zdHJ1Y3Rpb25zIGJ5IG92ZXJsYXBwaW5nIGRpZmZlcmVudCBpdGVyYXRpb25zLgorLklQICJcZkJcLWZtb2R1bG9cLXNjaGVkXC1hbGxvd1wtcmVnbW92ZXNcZlIiIDQKKy5JWCBJdGVtICItZm1vZHVsby1zY2hlZC1hbGxvdy1yZWdtb3ZlcyIKK1BlcmZvcm0gbW9yZSBhZ2dyZXNzaXZlIFNNUy1iYXNlZCBtb2R1bG8gc2NoZWR1bGluZyB3aXRoIHJlZ2lzdGVyIG1vdmVzCithbGxvd2VkLiAgQnkgc2V0dGluZyB0aGlzIGZsYWcgY2VydGFpbiBhbnRpLWRlcGVuZGVuY2VzIGVkZ2VzIGFyZQorZGVsZXRlZCwgd2hpY2ggdHJpZ2dlcnMgdGhlIGdlbmVyYXRpb24gb2YgcmVnLW1vdmVzIGJhc2VkIG9uIHRoZQorbGlmZS1yYW5nZSBhbmFseXNpcy4gIFRoaXMgb3B0aW9uIGlzIGVmZmVjdGl2ZSBvbmx5IHdpdGgKK1wmXGZCXC1mbW9kdWxvXC1zY2hlZFxmUiBlbmFibGVkLgorLklQICJcZkJcLWZub1wtYnJhbmNoXC1jb3VudFwtcmVnXGZSIiA0CisuSVggSXRlbSAiLWZuby1icmFuY2gtY291bnQtcmVnIgorRG8gbm90IHVzZSBcKihMImRlY3JlbWVudCBhbmQgYnJhbmNoXCooUiIgaW5zdHJ1Y3Rpb25zIG9uIGEgY291bnQgcmVnaXN0ZXIsCitidXQgaW5zdGVhZCBnZW5lcmF0ZSBhIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucyB0aGF0IGRlY3JlbWVudCBhCityZWdpc3RlciwgY29tcGFyZSBpdCBhZ2FpbnN0IHplcm8sIHRoZW4gYnJhbmNoIGJhc2VkIHVwb24gdGhlIHJlc3VsdC4KK1RoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBzdWNoCitpbnN0cnVjdGlvbnMsIHdoaWNoIGluY2x1ZGUgeDg2LCBQb3dlclBDLCBccy0xSUFcLTY0XHMwIGFuZCBTLzM5MC4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mYnJhbmNoXC1jb3VudFwtcmVnXGZSLgorLklQICJcZkJcLWZub1wtZnVuY3Rpb25cLWNzZVxmUiIgNAorLklYIEl0ZW0gIi1mbm8tZnVuY3Rpb24tY3NlIgorRG8gbm90IHB1dCBmdW5jdGlvbiBhZGRyZXNzZXMgaW4gcmVnaXN0ZXJzOyBtYWtlIGVhY2ggaW5zdHJ1Y3Rpb24gdGhhdAorY2FsbHMgYSBjb25zdGFudCBmdW5jdGlvbiBjb250YWluIHRoZSBmdW5jdGlvbidzIGFkZHJlc3MgZXhwbGljaXRseS4KKy5TcAorVGhpcyBvcHRpb24gcmVzdWx0cyBpbiBsZXNzIGVmZmljaWVudCBjb2RlLCBidXQgc29tZSBzdHJhbmdlIGhhY2tzCit0aGF0IGFsdGVyIHRoZSBhc3NlbWJsZXIgb3V0cHV0IG1heSBiZSBjb25mdXNlZCBieSB0aGUgb3B0aW1pemF0aW9ucworcGVyZm9ybWVkIHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHVzZWQuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZmZ1bmN0aW9uXC1jc2VcZlIKKy5JUCAiXGZCXC1mbm9cLXplcm9cLWluaXRpYWxpemVkXC1pblwtYnNzXGZSIiA0CisuSVggSXRlbSAiLWZuby16ZXJvLWluaXRpYWxpemVkLWluLWJzcyIKK0lmIHRoZSB0YXJnZXQgc3VwcG9ydHMgYSBccy0xQlNTXHMwIHNlY3Rpb24sIFxzLTFHQ0NcczAgYnkgZGVmYXVsdCBwdXRzIHZhcmlhYmxlcyB0aGF0CithcmUgaW5pdGlhbGl6ZWQgdG8gemVybyBpbnRvIFxzLTFCU1NcczAuICBUaGlzIGNhbiBzYXZlIHNwYWNlIGluIHRoZSByZXN1bHRpbmcKK2NvZGUuCisuU3AKK1RoaXMgb3B0aW9uIHR1cm5zIG9mZiB0aGlzIGJlaGF2aW9yIGJlY2F1c2Ugc29tZSBwcm9ncmFtcyBleHBsaWNpdGx5CityZWx5IG9uIHZhcmlhYmxlcyBnb2luZyB0byB0aGUgZGF0YSBzZWN0aW9uXC1cLVwtZS5nLiwgc28gdGhhdCB0aGUKK3Jlc3VsdGluZyBleGVjdXRhYmxlIGNhbiBmaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhhdCBzZWN0aW9uIGFuZC9vciBtYWtlCithc3N1bXB0aW9ucyBiYXNlZCBvbiB0aGF0LgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZ6ZXJvXC1pbml0aWFsaXplZFwtaW5cLWJzc1xmUi4KKy5JUCAiXGZCXC1mbXVkZmxhcCBcLWZtdWRmbGFwdGggXC1mbXVkZmxhcGlyXGZSIiA0CisuSVggSXRlbSAiLWZtdWRmbGFwIC1mbXVkZmxhcHRoIC1mbXVkZmxhcGlyIgorRm9yIGZyb250LWVuZHMgdGhhdCBzdXBwb3J0IGl0IChDIGFuZCBcKihDKyksIGluc3RydW1lbnQgYWxsIHJpc2t5Citwb2ludGVyL2FycmF5IGRlcmVmZXJlbmNpbmcgb3BlcmF0aW9ucywgc29tZSBzdGFuZGFyZCBsaWJyYXJ5CitzdHJpbmcvaGVhcCBmdW5jdGlvbnMsIGFuZCBzb21lIG90aGVyIGFzc29jaWF0ZWQgY29uc3RydWN0cyB3aXRoCityYW5nZS92YWxpZGl0eSB0ZXN0cy4gIE1vZHVsZXMgc28gaW5zdHJ1bWVudGVkIHNob3VsZCBiZSBpbW11bmUgdG8KK2J1ZmZlciBvdmVyZmxvd3MsIGludmFsaWQgaGVhcCB1c2UsIGFuZCBzb21lIG90aGVyIGNsYXNzZXMgb2YgQy9cKihDKworcHJvZ3JhbW1pbmcgZXJyb3JzLiAgVGhlIGluc3RydW1lbnRhdGlvbiByZWxpZXMgb24gYSBzZXBhcmF0ZSBydW50aW1lCitsaWJyYXJ5IChcZklsaWJtdWRmbGFwXGZSKSwgd2hpY2ggaXMgbGlua2VkIGludG8gYSBwcm9ncmFtIGlmCitcJlxmQlwtZm11ZGZsYXBcZlIgaXMgZ2l2ZW4gYXQgbGluayB0aW1lLiAgUnVuLXRpbWUgYmVoYXZpb3Igb2YgdGhlCitpbnN0cnVtZW50ZWQgcHJvZ3JhbSBpcyBjb250cm9sbGVkIGJ5IHRoZSBcZkJccy0xTVVERkxBUF9PUFRJT05TXHMwXGZSCitlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFNlZSBcZihDV1wqKENgZW52IE1VREZMQVBfT1BUSU9OUz1cLWhlbHAgYS5vdXRcKihDJ1xmUgorZm9yIGl0cyBvcHRpb25zLgorLlNwCitVc2UgXGZCXC1mbXVkZmxhcHRoXGZSIGluc3RlYWQgb2YgXGZCXC1mbXVkZmxhcFxmUiB0byBjb21waWxlIGFuZCB0bworbGluayBpZiB5b3VyIHByb2dyYW0gaXMgbXVsdGktdGhyZWFkZWQuICBVc2UgXGZCXC1mbXVkZmxhcGlyXGZSLCBpbgorYWRkaXRpb24gdG8gXGZCXC1mbXVkZmxhcFxmUiBvciBcZkJcLWZtdWRmbGFwdGhcZlIsIGlmCitpbnN0cnVtZW50YXRpb24gc2hvdWxkIGlnbm9yZSBwb2ludGVyIHJlYWRzLiAgVGhpcyBwcm9kdWNlcyBsZXNzCitpbnN0cnVtZW50YXRpb24gKGFuZCB0aGVyZWZvcmUgZmFzdGVyIGV4ZWN1dGlvbikgYW5kIHN0aWxsIHByb3ZpZGVzCitzb21lIHByb3RlY3Rpb24gYWdhaW5zdCBvdXRyaWdodCBtZW1vcnkgY29ycnVwdGluZyB3cml0ZXMsIGJ1dCBhbGxvd3MKK2Vycm9uZW91c2x5IHJlYWQgZGF0YSB0byBwcm9wYWdhdGUgd2l0aGluIGEgcHJvZ3JhbS4KKy5JUCAiXGZCXC1mdGhyZWFkXC1qdW1wc1xmUiIgNAorLklYIEl0ZW0gIi1mdGhyZWFkLWp1bXBzIgorUGVyZm9ybSBvcHRpbWl6YXRpb25zIHRoYXQgY2hlY2sgdG8gc2VlIGlmIGEganVtcCBicmFuY2hlcyB0byBhCitsb2NhdGlvbiB3aGVyZSBhbm90aGVyIGNvbXBhcmlzb24gc3Vic3VtZWQgYnkgdGhlIGZpcnN0IGlzIGZvdW5kLiAgSWYKK3NvLCB0aGUgZmlyc3QgYnJhbmNoIGlzIHJlZGlyZWN0ZWQgdG8gZWl0aGVyIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUKK3NlY29uZCBicmFuY2ggb3IgYSBwb2ludCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQsIGRlcGVuZGluZyBvbiB3aGV0aGVyCit0aGUgY29uZGl0aW9uIGlzIGtub3duIHRvIGJlIHRydWUgb3IgZmFsc2UuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZnNwbGl0XC13aWRlXC10eXBlc1xmUiIgNAorLklYIEl0ZW0gIi1mc3BsaXQtd2lkZS10eXBlcyIKK1doZW4gdXNpbmcgYSB0eXBlIHRoYXQgb2NjdXBpZXMgbXVsdGlwbGUgcmVnaXN0ZXJzLCBzdWNoIGFzIFxmKENXXCooQ2Bsb25nCitsb25nXCooQydcZlIgb24gYSAzMlwtYml0IHN5c3RlbSwgc3BsaXQgdGhlIHJlZ2lzdGVycyBhcGFydCBhbmQgYWxsb2NhdGUgdGhlbQoraW5kZXBlbmRlbnRseS4gIFRoaXMgbm9ybWFsbHkgZ2VuZXJhdGVzIGJldHRlciBjb2RlIGZvciB0aG9zZSB0eXBlcywKK2J1dCBtYXkgbWFrZSBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwKK1wmXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mY3NlXC1mb2xsb3dcLWp1bXBzXGZSIiA0CisuSVggSXRlbSAiLWZjc2UtZm9sbG93LWp1bXBzIgorSW4gY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24gKFxzLTFDU0VcczApLCBzY2FuIHRocm91Z2gganVtcCBpbnN0cnVjdGlvbnMKK3doZW4gdGhlIHRhcmdldCBvZiB0aGUganVtcCBpcyBub3QgcmVhY2hlZCBieSBhbnkgb3RoZXIgcGF0aC4gIEZvcgorZXhhbXBsZSwgd2hlbiBccy0xQ1NFXHMwIGVuY291bnRlcnMgYW4gXGYoQ1dcKihDYGlmXCooQydcZlIgc3RhdGVtZW50IHdpdGggYW4KK1wmXGYoQ1dcKihDYGVsc2VcKihDJ1xmUiBjbGF1c2UsIFxzLTFDU0VcczAgZm9sbG93cyB0aGUganVtcCB3aGVuIHRoZSBjb25kaXRpb24KK3Rlc3RlZCBpcyBmYWxzZS4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mY3NlXC1za2lwXC1ibG9ja3NcZlIiIDQKKy5JWCBJdGVtICItZmNzZS1za2lwLWJsb2NrcyIKK1RoaXMgaXMgc2ltaWxhciB0byBcZkJcLWZjc2VcLWZvbGxvd1wtanVtcHNcZlIsIGJ1dCBjYXVzZXMgXHMtMUNTRVxzMCB0bworZm9sbG93IGp1bXBzIHRoYXQgY29uZGl0aW9uYWxseSBza2lwIG92ZXIgYmxvY2tzLiAgV2hlbiBccy0xQ1NFXHMwCitlbmNvdW50ZXJzIGEgc2ltcGxlIFxmKENXXCooQ2BpZlwqKEMnXGZSIHN0YXRlbWVudCB3aXRoIG5vIGVsc2UgY2xhdXNlLAorXCZcZkJcLWZjc2VcLXNraXBcLWJsb2Nrc1xmUiBjYXVzZXMgXHMtMUNTRVxzMCB0byBmb2xsb3cgdGhlIGp1bXAgYXJvdW5kIHRoZQorYm9keSBvZiB0aGUgXGYoQ1dcKihDYGlmXCooQydcZlIuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZnJlcnVuXC1jc2VcLWFmdGVyXC1sb29wXGZSIiA0CisuSVggSXRlbSAiLWZyZXJ1bi1jc2UtYWZ0ZXItbG9vcCIKK1JlLXJ1biBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiBhZnRlciBsb29wIG9wdGltaXphdGlvbnMgYXJlCitwZXJmb3JtZWQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmdjc2VcZlIiIDQKKy5JWCBJdGVtICItZmdjc2UiCitQZXJmb3JtIGEgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIHBhc3MuCitUaGlzIHBhc3MgYWxzbyBwZXJmb3JtcyBnbG9iYWwgY29uc3RhbnQgYW5kIGNvcHkgcHJvcGFnYXRpb24uCisuU3AKK1wmXGZJTm90ZTpcZlIgV2hlbiBjb21waWxpbmcgYSBwcm9ncmFtIHVzaW5nIGNvbXB1dGVkIGdvdG9zLCBhIFxzLTFHQ0NcczAKK2V4dGVuc2lvbiwgeW91IG1heSBnZXQgYmV0dGVyIHJ1bi10aW1lIHBlcmZvcm1hbmNlIGlmIHlvdSBkaXNhYmxlCit0aGUgZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIHBhc3MgYnkgYWRkaW5nCitcJlxmQlwtZm5vXC1nY3NlXGZSIHRvIHRoZSBjb21tYW5kIGxpbmUuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmdjc2VcLWxtXGZSIiA0CisuSVggSXRlbSAiLWZnY3NlLWxtIgorV2hlbiBcZkJcLWZnY3NlXC1sbVxmUiBpcyBlbmFibGVkLCBnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24KK2F0dGVtcHRzIHRvIG1vdmUgbG9hZHMgdGhhdCBhcmUgb25seSBraWxsZWQgYnkgc3RvcmVzIGludG8gdGhlbXNlbHZlcy4gIFRoaXMKK2FsbG93cyBhIGxvb3AgY29udGFpbmluZyBhIGxvYWQvc3RvcmUgc2VxdWVuY2UgdG8gYmUgY2hhbmdlZCB0byBhIGxvYWQgb3V0c2lkZQordGhlIGxvb3AsIGFuZCBhIGNvcHkvc3RvcmUgd2l0aGluIHRoZSBsb29wLgorLlNwCitFbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBcZkJcLWZnY3NlXGZSIGlzIGVuYWJsZWQuCisuSVAgIlxmQlwtZmdjc2VcLXNtXGZSIiA0CisuSVggSXRlbSAiLWZnY3NlLXNtIgorV2hlbiBcZkJcLWZnY3NlXC1zbVxmUiBpcyBlbmFibGVkLCBhIHN0b3JlIG1vdGlvbiBwYXNzIGlzIHJ1biBhZnRlcgorZ2xvYmFsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uLiAgVGhpcyBwYXNzIGF0dGVtcHRzIHRvIG1vdmUKK3N0b3JlcyBvdXQgb2YgbG9vcHMuICBXaGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBcZkJcLWZnY3NlXC1sbVxmUiwKK2xvb3BzIGNvbnRhaW5pbmcgYSBsb2FkL3N0b3JlIHNlcXVlbmNlIGNhbiBiZSBjaGFuZ2VkIHRvIGEgbG9hZCBiZWZvcmUKK3RoZSBsb29wIGFuZCBhIHN0b3JlIGFmdGVyIHRoZSBsb29wLgorLlNwCitOb3QgZW5hYmxlZCBhdCBhbnkgb3B0aW1pemF0aW9uIGxldmVsLgorLklQICJcZkJcLWZnY3NlXC1sYXNcZlIiIDQKKy5JWCBJdGVtICItZmdjc2UtbGFzIgorV2hlbiBcZkJcLWZnY3NlXC1sYXNcZlIgaXMgZW5hYmxlZCwgdGhlIGdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbgorZWxpbWluYXRpb24gcGFzcyBlbGltaW5hdGVzIHJlZHVuZGFudCBsb2FkcyB0aGF0IGNvbWUgYWZ0ZXIgc3RvcmVzIHRvIHRoZQorc2FtZSBtZW1vcnkgbG9jYXRpb24gKGJvdGggcGFydGlhbCBhbmQgZnVsbCByZWR1bmRhbmNpZXMpLgorLlNwCitOb3QgZW5hYmxlZCBhdCBhbnkgb3B0aW1pemF0aW9uIGxldmVsLgorLklQICJcZkJcLWZnY3NlXC1hZnRlclwtcmVsb2FkXGZSIiA0CisuSVggSXRlbSAiLWZnY3NlLWFmdGVyLXJlbG9hZCIKK1doZW4gXGZCXC1mZ2NzZVwtYWZ0ZXJcLXJlbG9hZFxmUiBpcyBlbmFibGVkLCBhIHJlZHVuZGFudCBsb2FkIGVsaW1pbmF0aW9uCitwYXNzIGlzIHBlcmZvcm1lZCBhZnRlciByZWxvYWQuICBUaGUgcHVycG9zZSBvZiB0aGlzIHBhc3MgaXMgdG8gY2xlYW4gdXAKK3JlZHVuZGFudCBzcGlsbGluZy4KKy5JUCAiXGZCXC1mYWdncmVzc2l2ZVwtbG9vcFwtb3B0aW1pemF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mYWdncmVzc2l2ZS1sb29wLW9wdGltaXphdGlvbnMiCitUaGlzIG9wdGlvbiB0ZWxscyB0aGUgbG9vcCBvcHRpbWl6ZXIgdG8gdXNlIGxhbmd1YWdlIGNvbnN0cmFpbnRzIHRvCitkZXJpdmUgYm91bmRzIGZvciB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb2YgYSBsb29wLiAgVGhpcyBhc3N1bWVzIHRoYXQKK2xvb3AgY29kZSBkb2VzIG5vdCBpbnZva2UgdW5kZWZpbmVkIGJlaGF2aW9yIGJ5IGZvciBleGFtcGxlIGNhdXNpbmcgc2lnbmVkCitpbnRlZ2VyIG92ZXJmbG93cyBvciBvdXQtb2YtYm91bmQgYXJyYXkgYWNjZXNzZXMuICBUaGUgYm91bmRzIGZvciB0aGUKK251bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcCBhcmUgdXNlZCB0byBndWlkZSBsb29wIHVucm9sbGluZyBhbmQgcGVlbGluZworYW5kIGxvb3AgZXhpdCB0ZXN0IG9wdGltaXphdGlvbnMuCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtZnVuc2FmZVwtbG9vcFwtb3B0aW1pemF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyIKK1RoaXMgb3B0aW9uIHRlbGxzIHRoZSBsb29wIG9wdGltaXplciB0byBhc3N1bWUgdGhhdCBsb29wIGluZGljZXMgZG8gbm90CitvdmVyZmxvdywgYW5kIHRoYXQgbG9vcHMgd2l0aCBub250cml2aWFsIGV4aXQgY29uZGl0aW9uIGFyZSBub3QKK2luZmluaXRlLiAgVGhpcyBlbmFibGVzIGEgd2lkZXIgcmFuZ2Ugb2YgbG9vcCBvcHRpbWl6YXRpb25zIGV2ZW4gaWYKK3RoZSBsb29wIG9wdGltaXplciBpdHNlbGYgY2Fubm90IHByb3ZlIHRoYXQgdGhlc2UgYXNzdW1wdGlvbnMgYXJlIHZhbGlkLgorSWYgeW91IHVzZSBcZkJcLVd1bnNhZmVcLWxvb3BcLW9wdGltaXphdGlvbnNcZlIsIHRoZSBjb21waWxlciB3YXJucyB5b3UKK2lmIGl0IGZpbmRzIHRoaXMga2luZCBvZiBsb29wLgorLklQICJcZkJcLWZjcm9zc2p1bXBpbmdcZlIiIDQKKy5JWCBJdGVtICItZmNyb3NzanVtcGluZyIKK1BlcmZvcm0gY3Jvc3MtanVtcGluZyB0cmFuc2Zvcm1hdGlvbi4KK1RoaXMgdHJhbnNmb3JtYXRpb24gdW5pZmllcyBlcXVpdmFsZW50IGNvZGUgYW5kIHNhdmVzIGNvZGUgc2l6ZS4gIFRoZQorcmVzdWx0aW5nIGNvZGUgbWF5IG9yIG1heSBub3QgcGVyZm9ybSBiZXR0ZXIgdGhhbiB3aXRob3V0IGNyb3NzLWp1bXBpbmcuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmF1dG9cLWluY1wtZGVjXGZSIiA0CisuSVggSXRlbSAiLWZhdXRvLWluYy1kZWMiCitDb21iaW5lIGluY3JlbWVudHMgb3IgZGVjcmVtZW50cyBvZiBhZGRyZXNzZXMgd2l0aCBtZW1vcnkgYWNjZXNzZXMuCitUaGlzIHBhc3MgaXMgYWx3YXlzIHNraXBwZWQgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBoYXZlCitpbnN0cnVjdGlvbnMgdG8gc3VwcG9ydCB0aGlzLiAgRW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQKK2hpZ2hlciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCB0aGlzLgorLklQICJcZkJcLWZkY2VcZlIiIDQKKy5JWCBJdGVtICItZmRjZSIKK1BlcmZvcm0gZGVhZCBjb2RlIGVsaW1pbmF0aW9uIChccy0xRENFXHMwKSBvbiBccy0xUlRMXHMwLgorRW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZkc2VcZlIiIDQKKy5JWCBJdGVtICItZmRzZSIKK1BlcmZvcm0gZGVhZCBzdG9yZSBlbGltaW5hdGlvbiAoXHMtMURTRVxzMCkgb24gXHMtMVJUTFxzMC4KK0VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1maWZcLWNvbnZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItZmlmLWNvbnZlcnNpb24iCitBdHRlbXB0IHRvIHRyYW5zZm9ybSBjb25kaXRpb25hbCBqdW1wcyBpbnRvIGJyYW5jaC1sZXNzIGVxdWl2YWxlbnRzLiAgVGhpcworaW5jbHVkZXMgdXNlIG9mIGNvbmRpdGlvbmFsIG1vdmVzLCBtaW4sIG1heCwgc2V0IGZsYWdzIGFuZCBhYnMgaW5zdHJ1Y3Rpb25zLCBhbmQKK3NvbWUgdHJpY2tzIGRvYWJsZSBieSBzdGFuZGFyZCBhcml0aG1ldGljcy4gIFRoZSB1c2Ugb2YgY29uZGl0aW9uYWwgZXhlY3V0aW9uCitvbiBjaGlwcyB3aGVyZSBpdCBpcyBhdmFpbGFibGUgaXMgY29udHJvbGxlZCBieSBcZihDV1wqKENgaWZcLWNvbnZlcnNpb24yXCooQydcZlIuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1maWZcLWNvbnZlcnNpb24yXGZSIiA0CisuSVggSXRlbSAiLWZpZi1jb252ZXJzaW9uMiIKK1VzZSBjb25kaXRpb25hbCBleGVjdXRpb24gKHdoZXJlIGF2YWlsYWJsZSkgdG8gdHJhbnNmb3JtIGNvbmRpdGlvbmFsIGp1bXBzIGludG8KK2JyYW5jaC1sZXNzIGVxdWl2YWxlbnRzLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmRlbGV0ZVwtbnVsbFwtcG9pbnRlclwtY2hlY2tzXGZSIiA0CisuSVggSXRlbSAiLWZkZWxldGUtbnVsbC1wb2ludGVyLWNoZWNrcyIKK0Fzc3VtZSB0aGF0IHByb2dyYW1zIGNhbm5vdCBzYWZlbHkgZGVyZWZlcmVuY2UgbnVsbCBwb2ludGVycywgYW5kIHRoYXQKK25vIGNvZGUgb3IgZGF0YSBlbGVtZW50IHJlc2lkZXMgdGhlcmUuICBUaGlzIGVuYWJsZXMgc2ltcGxlIGNvbnN0YW50Citmb2xkaW5nIG9wdGltaXphdGlvbnMgYXQgYWxsIG9wdGltaXphdGlvbiBsZXZlbHMuICBJbiBhZGRpdGlvbiwgb3RoZXIKK29wdGltaXphdGlvbiBwYXNzZXMgaW4gXHMtMUdDQ1xzMCB1c2UgdGhpcyBmbGFnIHRvIGNvbnRyb2wgZ2xvYmFsIGRhdGFmbG93CithbmFseXNlcyB0aGF0IGVsaW1pbmF0ZSB1c2VsZXNzIGNoZWNrcyBmb3IgbnVsbCBwb2ludGVyczsgdGhlc2UgYXNzdW1lCit0aGF0IGlmIGEgcG9pbnRlciBpcyBjaGVja2VkIGFmdGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gZGVyZWZlcmVuY2VkLAoraXQgY2Fubm90IGJlIG51bGwuCisuU3AKK05vdGUgaG93ZXZlciB0aGF0IGluIHNvbWUgZW52aXJvbm1lbnRzIHRoaXMgYXNzdW1wdGlvbiBpcyBub3QgdHJ1ZS4KK1VzZSBcZkJcLWZub1wtZGVsZXRlXC1udWxsXC1wb2ludGVyXC1jaGVja3NcZlIgdG8gZGlzYWJsZSB0aGlzIG9wdGltaXphdGlvbgorZm9yIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uIHRoYXQgYmVoYXZpb3IuCisuU3AKK1NvbWUgdGFyZ2V0cywgZXNwZWNpYWxseSBlbWJlZGRlZCBvbmVzLCBkaXNhYmxlIHRoaXMgb3B0aW9uIGF0IGFsbCBsZXZlbHMuCitPdGhlcndpc2UgaXQgaXMgZW5hYmxlZCBhdCBhbGwgbGV2ZWxzOiBcZkJcLU8wXGZSLCBcZkJcLU8xXGZSLAorXCZcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLiAgUGFzc2VzIHRoYXQgdXNlIHRoZSBpbmZvcm1hdGlvbgorYXJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSBhdCBkaWZmZXJlbnQgb3B0aW1pemF0aW9uIGxldmVscy4KKy5JUCAiXGZCXC1mZGV2aXJ0dWFsaXplXGZSIiA0CisuSVggSXRlbSAiLWZkZXZpcnR1YWxpemUiCitBdHRlbXB0IHRvIGNvbnZlcnQgY2FsbHMgdG8gdmlydHVhbCBmdW5jdGlvbnMgdG8gZGlyZWN0IGNhbGxzLiAgVGhpcworaXMgZG9uZSBib3RoIHdpdGhpbiBhIHByb2NlZHVyZSBhbmQgaW50ZXJwcm9jZWR1cmFsbHkgYXMgcGFydCBvZgoraW5kaXJlY3QgaW5saW5pbmcgKFxmKENXXCooQ2BcLWZpbmRpcmVjdFwtaW5saW5pbmdcKihDJ1xmUikgYW5kIGludGVycHJvY2VkdXJhbCBjb25zdGFudAorcHJvcGFnYXRpb24gKFxmQlwtZmlwYVwtY3BcZlIpLgorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mZXhwZW5zaXZlXC1vcHRpbWl6YXRpb25zXGZSIiA0CisuSVggSXRlbSAiLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyIKK1BlcmZvcm0gYSBudW1iZXIgb2YgbWlub3Igb3B0aW1pemF0aW9ucyB0aGF0IGFyZSByZWxhdGl2ZWx5IGV4cGVuc2l2ZS4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mcmVlXGZSIiA0CisuSVggSXRlbSAiLWZyZWUiCitBdHRlbXB0IHRvIHJlbW92ZSByZWR1bmRhbnQgZXh0ZW5zaW9uIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgZXNwZWNpYWxseQoraGVscGZ1bCBmb3IgdGhlIHg4NlwtNjQgYXJjaGl0ZWN0dXJlLCB3aGljaCBpbXBsaWNpdGx5IHplcm8tZXh0ZW5kcyBpbiA2NFwtYml0CityZWdpc3RlcnMgYWZ0ZXIgd3JpdGluZyB0byB0aGVpciBsb3dlciAzMlwtYml0IGhhbGYuCisuU3AKK0VuYWJsZWQgZm9yIHg4NiBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mb3B0aW1pemVcLXJlZ2lzdGVyXC1tb3ZlXGZSIiA0CisuSVggSXRlbSAiLWZvcHRpbWl6ZS1yZWdpc3Rlci1tb3ZlIgorLlBEIDAKKy5JUCAiXGZCXC1mcmVnbW92ZVxmUiIgNAorLklYIEl0ZW0gIi1mcmVnbW92ZSIKKy5QRAorQXR0ZW1wdCB0byByZWFzc2lnbiByZWdpc3RlciBudW1iZXJzIGluIG1vdmUgaW5zdHJ1Y3Rpb25zIGFuZCBhcworb3BlcmFuZHMgb2Ygb3RoZXIgc2ltcGxlIGluc3RydWN0aW9ucyBpbiBvcmRlciB0byBtYXhpbWl6ZSB0aGUgYW1vdW50IG9mCityZWdpc3RlciB0eWluZy4gIFRoaXMgaXMgZXNwZWNpYWxseSBoZWxwZnVsIG9uIG1hY2hpbmVzIHdpdGggdHdvLW9wZXJhbmQKK2luc3RydWN0aW9ucy4KKy5TcAorTm90ZSBcZkJcLWZyZWdtb3ZlXGZSIGFuZCBcZkJcLWZvcHRpbWl6ZVwtcmVnaXN0ZXJcLW1vdmVcZlIgYXJlIHRoZSBzYW1lCitvcHRpbWl6YXRpb24uCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZmlyYVwtYWxnb3JpdGhtPVxmUlxmSWFsZ29yaXRobVxmUiIgNAorLklYIEl0ZW0gIi1maXJhLWFsZ29yaXRobT1hbGdvcml0aG0iCitVc2UgdGhlIHNwZWNpZmllZCBjb2xvcmluZyBhbGdvcml0aG0gZm9yIHRoZSBpbnRlZ3JhdGVkIHJlZ2lzdGVyCithbGxvY2F0b3IuICBUaGUgXGZJYWxnb3JpdGhtXGZSIGFyZ3VtZW50IGNhbiBiZSBcZkJwcmlvcml0eVxmUiwgd2hpY2gKK3NwZWNpZmllcyBDaG93J3MgcHJpb3JpdHkgY29sb3JpbmcsIG9yIFxmQlxzLTFDQlxzMFxmUiwgd2hpY2ggc3BlY2lmaWVzCitDaGFpdGluLUJyaWdncyBjb2xvcmluZy4gIENoYWl0aW4tQnJpZ2dzIGNvbG9yaW5nIGlzIG5vdCBpbXBsZW1lbnRlZAorZm9yIGFsbCBhcmNoaXRlY3R1cmVzLCBidXQgZm9yIHRob3NlIHRhcmdldHMgdGhhdCBkbyBzdXBwb3J0IGl0LCBpdCBpcwordGhlIGRlZmF1bHQgYmVjYXVzZSBpdCBnZW5lcmF0ZXMgYmV0dGVyIGNvZGUuCisuSVAgIlxmQlwtZmlyYVwtcmVnaW9uPVxmUlxmSXJlZ2lvblxmUiIgNAorLklYIEl0ZW0gIi1maXJhLXJlZ2lvbj1yZWdpb24iCitVc2Ugc3BlY2lmaWVkIHJlZ2lvbnMgZm9yIHRoZSBpbnRlZ3JhdGVkIHJlZ2lzdGVyIGFsbG9jYXRvci4gIFRoZQorXCZcZklyZWdpb25cZlIgYXJndW1lbnQgc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorLlJTIDQKKy5JUCAiXGZCYWxsXGZSIiA0CisuSVggSXRlbSAiYWxsIgorVXNlIGFsbCBsb29wcyBhcyByZWdpc3RlciBhbGxvY2F0aW9uIHJlZ2lvbnMuCitUaGlzIGNhbiBnaXZlIHRoZSBiZXN0IHJlc3VsdHMgZm9yIG1hY2hpbmVzIHdpdGggYSBzbWFsbCBhbmQvb3IKK2lycmVndWxhciByZWdpc3RlciBzZXQuCisuSVAgIlxmQm1peGVkXGZSIiA0CisuSVggSXRlbSAibWl4ZWQiCitVc2UgYWxsIGxvb3BzIGV4Y2VwdCBmb3IgbG9vcHMgd2l0aCBzbWFsbCByZWdpc3RlciBwcmVzc3VyZSAKK2FzIHRoZSByZWdpb25zLiAgVGhpcyB2YWx1ZSB1c3VhbGx5IGdpdmVzCit0aGUgYmVzdCByZXN1bHRzIGluIG1vc3QgY2FzZXMgYW5kIGZvciBtb3N0IGFyY2hpdGVjdHVyZXMsCithbmQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gY29tcGlsaW5nIHdpdGggb3B0aW1pemF0aW9uIGZvciBzcGVlZAorKFxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgLi4uKS4KKy5JUCAiXGZCb25lXGZSIiA0CisuSVggSXRlbSAib25lIgorVXNlIGFsbCBmdW5jdGlvbnMgYXMgYSBzaW5nbGUgcmVnaW9uLiAgCitUaGlzIHR5cGljYWxseSByZXN1bHRzIGluIHRoZSBzbWFsbGVzdCBjb2RlIHNpemUsIGFuZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yCitcJlxmQlwtT3NcZlIgb3IgXGZCXC1PMFxmUi4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLWZpcmFcLWhvaXN0XC1wcmVzc3VyZVxmUiIgNAorLklYIEl0ZW0gIi1maXJhLWhvaXN0LXByZXNzdXJlIgorVXNlIFxzLTFJUkFcczAgdG8gZXZhbHVhdGUgcmVnaXN0ZXIgcHJlc3N1cmUgaW4gdGhlIGNvZGUgaG9pc3RpbmcgcGFzcyBmb3IKK2RlY2lzaW9ucyB0byBob2lzdCBleHByZXNzaW9ucy4gIFRoaXMgb3B0aW9uIHVzdWFsbHkgcmVzdWx0cyBpbiBzbWFsbGVyCitjb2RlLCBidXQgaXQgY2FuIHNsb3cgdGhlIGNvbXBpbGVyIGRvd24uCisuU3AKK1RoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYXQgbGV2ZWwgXGZCXC1Pc1xmUiBmb3IgYWxsIHRhcmdldHMuCisuSVAgIlxmQlwtZmlyYVwtbG9vcFwtcHJlc3N1cmVcZlIiIDQKKy5JWCBJdGVtICItZmlyYS1sb29wLXByZXNzdXJlIgorVXNlIFxzLTFJUkFcczAgdG8gZXZhbHVhdGUgcmVnaXN0ZXIgcHJlc3N1cmUgaW4gbG9vcHMgZm9yIGRlY2lzaW9ucyB0byBtb3ZlCitsb29wIGludmFyaWFudHMuICBUaGlzIG9wdGlvbiB1c3VhbGx5IHJlc3VsdHMgaW4gZ2VuZXJhdGlvbgorb2YgZmFzdGVyIGFuZCBzbWFsbGVyIGNvZGUgb24gbWFjaGluZXMgd2l0aCBsYXJnZSByZWdpc3RlciBmaWxlcyAoPj0gMzIKK3JlZ2lzdGVycyksIGJ1dCBpdCBjYW4gc2xvdyB0aGUgY29tcGlsZXIgZG93bi4KKy5TcAorVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhdCBsZXZlbCBcZkJcLU8zXGZSIGZvciBzb21lIHRhcmdldHMuCisuSVAgIlxmQlwtZm5vXC1pcmFcLXNoYXJlXC1zYXZlXC1zbG90c1xmUiIgNAorLklYIEl0ZW0gIi1mbm8taXJhLXNoYXJlLXNhdmUtc2xvdHMiCitEaXNhYmxlIHNoYXJpbmcgb2Ygc3RhY2sgc2xvdHMgdXNlZCBmb3Igc2F2aW5nIGNhbGwtdXNlZCBoYXJkCityZWdpc3RlcnMgbGl2aW5nIHRocm91Z2ggYSBjYWxsLiAgRWFjaCBoYXJkIHJlZ2lzdGVyIGdldHMgYQorc2VwYXJhdGUgc3RhY2sgc2xvdCwgYW5kIGFzIGEgcmVzdWx0IGZ1bmN0aW9uIHN0YWNrIGZyYW1lcyBhcmUKK2xhcmdlci4KKy5JUCAiXGZCXC1mbm9cLWlyYVwtc2hhcmVcLXNwaWxsXC1zbG90c1xmUiIgNAorLklYIEl0ZW0gIi1mbm8taXJhLXNoYXJlLXNwaWxsLXNsb3RzIgorRGlzYWJsZSBzaGFyaW5nIG9mIHN0YWNrIHNsb3RzIGFsbG9jYXRlZCBmb3IgcHNldWRvLXJlZ2lzdGVycy4gIEVhY2gKK3BzZXVkby1yZWdpc3RlciB0aGF0IGRvZXMgbm90IGdldCBhIGhhcmQgcmVnaXN0ZXIgZ2V0cyBhIHNlcGFyYXRlCitzdGFjayBzbG90LCBhbmQgYXMgYSByZXN1bHQgZnVuY3Rpb24gc3RhY2sgZnJhbWVzIGFyZSBsYXJnZXIuCisuSVAgIlxmQlwtZmlyYVwtdmVyYm9zZT1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZpcmEtdmVyYm9zZT1uIgorQ29udHJvbCB0aGUgdmVyYm9zaXR5IG9mIHRoZSBkdW1wIGZpbGUgZm9yIHRoZSBpbnRlZ3JhdGVkIHJlZ2lzdGVyIGFsbG9jYXRvci4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDUuICBJZiB0aGUgdmFsdWUgXGZJblxmUiBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIDEwLAordGhlIGR1bXAgb3V0cHV0IGlzIHNlbnQgdG8gc3RkZXJyIHVzaW5nIHRoZSBzYW1lIGZvcm1hdCBhcyBcZkluXGZSIG1pbnVzIDEwLgorLklQICJcZkJcLWZkZWxheWVkXC1icmFuY2hcZlIiIDQKKy5JWCBJdGVtICItZmRlbGF5ZWQtYnJhbmNoIgorSWYgc3VwcG9ydGVkIGZvciB0aGUgdGFyZ2V0IG1hY2hpbmUsIGF0dGVtcHQgdG8gcmVvcmRlciBpbnN0cnVjdGlvbnMKK3RvIGV4cGxvaXQgaW5zdHJ1Y3Rpb24gc2xvdHMgYXZhaWxhYmxlIGFmdGVyIGRlbGF5ZWQgYnJhbmNoCitpbnN0cnVjdGlvbnMuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mc2NoZWR1bGVcLWluc25zXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZHVsZS1pbnNucyIKK0lmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBhdHRlbXB0IHRvIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zIHRvCitlbGltaW5hdGUgZXhlY3V0aW9uIHN0YWxscyBkdWUgdG8gcmVxdWlyZWQgZGF0YSBiZWluZyB1bmF2YWlsYWJsZS4gIFRoaXMKK2hlbHBzIG1hY2hpbmVzIHRoYXQgaGF2ZSBzbG93IGZsb2F0aW5nIHBvaW50IG9yIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucworYnkgYWxsb3dpbmcgb3RoZXIgaW5zdHJ1Y3Rpb25zIHRvIGJlIGlzc3VlZCB1bnRpbCB0aGUgcmVzdWx0IG9mIHRoZSBsb2FkCitvciBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbiBpcyByZXF1aXJlZC4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mc2NoZWR1bGVcLWluc25zMlxmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWR1bGUtaW5zbnMyIgorU2ltaWxhciB0byBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIsIGJ1dCByZXF1ZXN0cyBhbiBhZGRpdGlvbmFsIHBhc3Mgb2YKK2luc3RydWN0aW9uIHNjaGVkdWxpbmcgYWZ0ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiBoYXMgYmVlbiBkb25lLiAgVGhpcyBpcworZXNwZWNpYWxseSB1c2VmdWwgb24gbWFjaGluZXMgd2l0aCBhIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVyIG9mCityZWdpc3RlcnMgYW5kIHdoZXJlIG1lbW9yeSBsb2FkIGluc3RydWN0aW9ucyB0YWtlIG1vcmUgdGhhbiBvbmUgY3ljbGUuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZm5vXC1zY2hlZFwtaW50ZXJibG9ja1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tc2NoZWQtaW50ZXJibG9jayIKK0Rvbid0IHNjaGVkdWxlIGluc3RydWN0aW9ucyBhY3Jvc3MgYmFzaWMgYmxvY2tzLiAgVGhpcyBpcyBub3JtYWxseQorZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gc2NoZWR1bGluZyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaS5lLgord2l0aCBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIgb3IgYXQgXGZCXC1PMlxmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtZm5vXC1zY2hlZFwtc3BlY1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tc2NoZWQtc3BlYyIKK0Rvbid0IGFsbG93IHNwZWN1bGF0aXZlIG1vdGlvbiBvZiBub24tbG9hZCBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIG5vcm1hbGx5CitlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBzY2hlZHVsaW5nIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uLCBpLmUuCit3aXRoIFxmQlwtZnNjaGVkdWxlXC1pbnNuc1xmUiBvciBhdCBcZkJcLU8yXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1mc2NoZWRcLXByZXNzdXJlXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1wcmVzc3VyZSIKK0VuYWJsZSByZWdpc3RlciBwcmVzc3VyZSBzZW5zaXRpdmUgaW5zbiBzY2hlZHVsaW5nIGJlZm9yZSByZWdpc3RlcgorYWxsb2NhdGlvbi4gIFRoaXMgb25seSBtYWtlcyBzZW5zZSB3aGVuIHNjaGVkdWxpbmcgYmVmb3JlIHJlZ2lzdGVyCithbGxvY2F0aW9uIGlzIGVuYWJsZWQsIGkuZS4gd2l0aCBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIgb3IgYXQKK1wmXGZCXC1PMlxmUiBvciBoaWdoZXIuICBVc2FnZSBvZiB0aGlzIG9wdGlvbiBjYW4gaW1wcm92ZSB0aGUKK2dlbmVyYXRlZCBjb2RlIGFuZCBkZWNyZWFzZSBpdHMgc2l6ZSBieSBwcmV2ZW50aW5nIHJlZ2lzdGVyIHByZXNzdXJlCitpbmNyZWFzZSBhYm92ZSB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBoYXJkIHJlZ2lzdGVycyBhbmQgc3Vic2VxdWVudAorc3BpbGxzIGluIHJlZ2lzdGVyIGFsbG9jYXRpb24uCisuSVAgIlxmQlwtZnNjaGVkXC1zcGVjXC1sb2FkXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1zcGVjLWxvYWQiCitBbGxvdyBzcGVjdWxhdGl2ZSBtb3Rpb24gb2Ygc29tZSBsb2FkIGluc3RydWN0aW9ucy4gIFRoaXMgb25seSBtYWtlcworc2Vuc2Ugd2hlbiBzY2hlZHVsaW5nIGJlZm9yZSByZWdpc3RlciBhbGxvY2F0aW9uLCBpLmUuIHdpdGgKK1wmXGZCXC1mc2NoZWR1bGVcLWluc25zXGZSIG9yIGF0IFxmQlwtTzJcZlIgb3IgaGlnaGVyLgorLklQICJcZkJcLWZzY2hlZFwtc3BlY1wtbG9hZFwtZGFuZ2Vyb3VzXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1zcGVjLWxvYWQtZGFuZ2Vyb3VzIgorQWxsb3cgc3BlY3VsYXRpdmUgbW90aW9uIG9mIG1vcmUgbG9hZCBpbnN0cnVjdGlvbnMuICBUaGlzIG9ubHkgbWFrZXMKK3NlbnNlIHdoZW4gc2NoZWR1bGluZyBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiwgaS5lLiB3aXRoCitcJlxmQlwtZnNjaGVkdWxlXC1pbnNuc1xmUiBvciBhdCBcZkJcLU8yXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1zdGFsbGVkLWluc25zIgorLlBEIDAKKy5JUCAiXGZCXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLXN0YWxsZWQtaW5zbnM9biIKKy5QRAorRGVmaW5lIGhvdyBtYW55IGluc25zIChpZiBhbnkpIGNhbiBiZSBtb3ZlZCBwcmVtYXR1cmVseSBmcm9tIHRoZSBxdWV1ZQorb2Ygc3RhbGxlZCBpbnNucyBpbnRvIHRoZSByZWFkeSBsaXN0IGR1cmluZyB0aGUgc2Vjb25kIHNjaGVkdWxpbmcgcGFzcy4KK1wmXGZCXC1mbm9cLXNjaGVkXC1zdGFsbGVkXC1pbnNuc1xmUiBtZWFucyB0aGF0IG5vIGluc25zIGFyZSBtb3ZlZAorcHJlbWF0dXJlbHksIFxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNucz0wXGZSIG1lYW5zIHRoZXJlIGlzIG5vIGxpbWl0CitvbiBob3cgbWFueSBxdWV1ZWQgaW5zbnMgY2FuIGJlIG1vdmVkIHByZW1hdHVyZWx5LgorXCZcZkJcLWZzY2hlZFwtc3RhbGxlZFwtaW5zbnNcZlIgd2l0aG91dCBhIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8KK1wmXGZCXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zPTFcZlIuCisuSVAgIlxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNuc1wtZGVwXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZC1zdGFsbGVkLWluc25zLWRlcCIKKy5QRCAwCisuSVAgIlxmQlwtZnNjaGVkXC1zdGFsbGVkXC1pbnNuc1wtZGVwPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLXN0YWxsZWQtaW5zbnMtZGVwPW4iCisuUEQKK0RlZmluZSBob3cgbWFueSBpbnNuIGdyb3VwcyAoY3ljbGVzKSBhcmUgZXhhbWluZWQgZm9yIGEgZGVwZW5kZW5jeQorb24gYSBzdGFsbGVkIGluc24gdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgcHJlbWF0dXJlIHJlbW92YWwgZnJvbSB0aGUgcXVldWUKK29mIHN0YWxsZWQgaW5zbnMuICBUaGlzIGhhcyBhbiBlZmZlY3Qgb25seSBkdXJpbmcgdGhlIHNlY29uZCBzY2hlZHVsaW5nIHBhc3MsCithbmQgb25seSBpZiBcZkJcLWZzY2hlZFwtc3RhbGxlZFwtaW5zbnNcZlIgaXMgdXNlZC4KK1wmXGZCXC1mbm9cLXNjaGVkXC1zdGFsbGVkXC1pbnNuc1wtZGVwXGZSIGlzIGVxdWl2YWxlbnQgdG8KK1wmXGZCXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zXC1kZXA9MFxmUi4KK1wmXGZCXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zXC1kZXBcZlIgd2l0aG91dCBhIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8KK1wmXGZCXC1mc2NoZWRcLXN0YWxsZWRcLWluc25zXC1kZXA9MVxmUi4KKy5JUCAiXGZCXC1mc2NoZWQyXC11c2VcLXN1cGVyYmxvY2tzXGZSIiA0CisuSVggSXRlbSAiLWZzY2hlZDItdXNlLXN1cGVyYmxvY2tzIgorV2hlbiBzY2hlZHVsaW5nIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24sIHVzZSBzdXBlcmJsb2NrIHNjaGVkdWxpbmcuCitUaGlzIGFsbG93cyBtb3Rpb24gYWNyb3NzIGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMsCityZXN1bHRpbmcgaW4gZmFzdGVyIHNjaGVkdWxlcy4gIFRoaXMgb3B0aW9uIGlzIGV4cGVyaW1lbnRhbCwgYXMgbm90IGFsbCBtYWNoaW5lCitkZXNjcmlwdGlvbnMgdXNlZCBieSBccy0xR0NDXHMwIG1vZGVsIHRoZSBccy0xQ1BVXHMwIGNsb3NlbHkgZW5vdWdoIHRvIGF2b2lkIHVucmVsaWFibGUKK3Jlc3VsdHMgZnJvbSB0aGUgYWxnb3JpdGhtLgorLlNwCitUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiBzY2hlZHVsaW5nIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24sIGkuZS4gd2l0aAorXCZcZkJcLWZzY2hlZHVsZVwtaW5zbnMyXGZSIG9yIGF0IFxmQlwtTzJcZlIgb3IgaGlnaGVyLgorLklQICJcZkJcLWZzY2hlZFwtZ3JvdXBcLWhldXJpc3RpY1xmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtZ3JvdXAtaGV1cmlzdGljIgorRW5hYmxlIHRoZSBncm91cCBoZXVyaXN0aWMgaW4gdGhlIHNjaGVkdWxlci4gIFRoaXMgaGV1cmlzdGljIGZhdm9ycwordGhlIGluc3RydWN0aW9uIHRoYXQgYmVsb25ncyB0byBhIHNjaGVkdWxlIGdyb3VwLiAgVGhpcyBpcyBlbmFibGVkCitieSBkZWZhdWx0IHdoZW4gc2NoZWR1bGluZyBpcyBlbmFibGVkLCBpLmUuIHdpdGggXGZCXC1mc2NoZWR1bGVcLWluc25zXGZSCitvciBcZkJcLWZzY2hlZHVsZVwtaW5zbnMyXGZSIG9yIGF0IFxmQlwtTzJcZlIgb3IgaGlnaGVyLgorLklQICJcZkJcLWZzY2hlZFwtY3JpdGljYWxcLXBhdGhcLWhldXJpc3RpY1xmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtY3JpdGljYWwtcGF0aC1oZXVyaXN0aWMiCitFbmFibGUgdGhlIGNyaXRpY2FsLXBhdGggaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzIGhldXJpc3RpYyBmYXZvcnMKK2luc3RydWN0aW9ucyBvbiB0aGUgY3JpdGljYWwgcGF0aC4gIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4KK3NjaGVkdWxpbmcgaXMgZW5hYmxlZCwgaS5lLiB3aXRoIFxmQlwtZnNjaGVkdWxlXC1pbnNuc1xmUgorb3IgXGZCXC1mc2NoZWR1bGVcLWluc25zMlxmUiBvciBhdCBcZkJcLU8yXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1mc2NoZWRcLXNwZWNcLWluc25cLWhldXJpc3RpY1xmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtc3BlYy1pbnNuLWhldXJpc3RpYyIKK0VuYWJsZSB0aGUgc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb24gaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzCitoZXVyaXN0aWMgZmF2b3JzIHNwZWN1bGF0aXZlIGluc3RydWN0aW9ucyB3aXRoIGdyZWF0ZXIgZGVwZW5kZW5jeSB3ZWFrbmVzcy4KK1RoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gc2NoZWR1bGluZyBpcyBlbmFibGVkLCBpLmUuCit3aXRoIFxmQlwtZnNjaGVkdWxlXC1pbnNuc1xmUiBvciBcZkJcLWZzY2hlZHVsZVwtaW5zbnMyXGZSCitvciBhdCBcZkJcLU8yXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1mc2NoZWRcLXJhbmtcLWhldXJpc3RpY1xmUiIgNAorLklYIEl0ZW0gIi1mc2NoZWQtcmFuay1oZXVyaXN0aWMiCitFbmFibGUgdGhlIHJhbmsgaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzIGhldXJpc3RpYyBmYXZvcnMKK3RoZSBpbnN0cnVjdGlvbiBiZWxvbmdpbmcgdG8gYSBiYXNpYyBibG9jayB3aXRoIGdyZWF0ZXIgc2l6ZSBvciBmcmVxdWVuY3kuCitUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCwgaS5lLgord2l0aCBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIgb3IgXGZCXC1mc2NoZWR1bGVcLWluc25zMlxmUiBvcgorYXQgXGZCXC1PMlxmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtZnNjaGVkXC1sYXN0XC1pbnNuXC1oZXVyaXN0aWNcZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLWxhc3QtaW5zbi1oZXVyaXN0aWMiCitFbmFibGUgdGhlIGxhc3QtaW5zdHJ1Y3Rpb24gaGV1cmlzdGljIGluIHRoZSBzY2hlZHVsZXIuICBUaGlzIGhldXJpc3RpYworZmF2b3JzIHRoZSBpbnN0cnVjdGlvbiB0aGF0IGlzIGxlc3MgZGVwZW5kZW50IG9uIHRoZSBsYXN0IGluc3RydWN0aW9uCitzY2hlZHVsZWQuICBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHNjaGVkdWxpbmcgaXMgZW5hYmxlZCwKK2kuZS4gd2l0aCBcZkJcLWZzY2hlZHVsZVwtaW5zbnNcZlIgb3IgXGZCXC1mc2NoZWR1bGVcLWluc25zMlxmUiBvcgorYXQgXGZCXC1PMlxmUiBvciBoaWdoZXIuCisuSVAgIlxmQlwtZnNjaGVkXC1kZXBcLWNvdW50XC1oZXVyaXN0aWNcZlIiIDQKKy5JWCBJdGVtICItZnNjaGVkLWRlcC1jb3VudC1oZXVyaXN0aWMiCitFbmFibGUgdGhlIGRlcGVuZGVudC1jb3VudCBoZXVyaXN0aWMgaW4gdGhlIHNjaGVkdWxlci4gIFRoaXMgaGV1cmlzdGljCitmYXZvcnMgdGhlIGluc3RydWN0aW9uIHRoYXQgaGFzIG1vcmUgaW5zdHJ1Y3Rpb25zIGRlcGVuZGluZyBvbiBpdC4KK1RoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gc2NoZWR1bGluZyBpcyBlbmFibGVkLCBpLmUuCit3aXRoIFxmQlwtZnNjaGVkdWxlXC1pbnNuc1xmUiBvciBcZkJcLWZzY2hlZHVsZVwtaW5zbnMyXGZSIG9yCithdCBcZkJcLU8yXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1mcmVzY2hlZHVsZVwtbW9kdWxvXC1zY2hlZHVsZWRcLWxvb3BzXGZSIiA0CisuSVggSXRlbSAiLWZyZXNjaGVkdWxlLW1vZHVsby1zY2hlZHVsZWQtbG9vcHMiCitNb2R1bG8gc2NoZWR1bGluZyBpcyBwZXJmb3JtZWQgYmVmb3JlIHRyYWRpdGlvbmFsIHNjaGVkdWxpbmcuICBJZiBhIGxvb3AKK2lzIG1vZHVsbyBzY2hlZHVsZWQsIGxhdGVyIHNjaGVkdWxpbmcgcGFzc2VzIG1heSBjaGFuZ2UgaXRzIHNjaGVkdWxlLiAgCitVc2UgdGhpcyBvcHRpb24gdG8gY29udHJvbCB0aGF0IGJlaGF2aW9yLgorLklQICJcZkJcLWZzZWxlY3RpdmVcLXNjaGVkdWxpbmdcZlIiIDQKKy5JWCBJdGVtICItZnNlbGVjdGl2ZS1zY2hlZHVsaW5nIgorU2NoZWR1bGUgaW5zdHJ1Y3Rpb25zIHVzaW5nIHNlbGVjdGl2ZSBzY2hlZHVsaW5nIGFsZ29yaXRobS4gIFNlbGVjdGl2ZQorc2NoZWR1bGluZyBydW5zIGluc3RlYWQgb2YgdGhlIGZpcnN0IHNjaGVkdWxlciBwYXNzLgorLklQICJcZkJcLWZzZWxlY3RpdmVcLXNjaGVkdWxpbmcyXGZSIiA0CisuSVggSXRlbSAiLWZzZWxlY3RpdmUtc2NoZWR1bGluZzIiCitTY2hlZHVsZSBpbnN0cnVjdGlvbnMgdXNpbmcgc2VsZWN0aXZlIHNjaGVkdWxpbmcgYWxnb3JpdGhtLiAgU2VsZWN0aXZlCitzY2hlZHVsaW5nIHJ1bnMgaW5zdGVhZCBvZiB0aGUgc2Vjb25kIHNjaGVkdWxlciBwYXNzLgorLklQICJcZkJcLWZzZWxcLXNjaGVkXC1waXBlbGluaW5nXGZSIiA0CisuSVggSXRlbSAiLWZzZWwtc2NoZWQtcGlwZWxpbmluZyIKK0VuYWJsZSBzb2Z0d2FyZSBwaXBlbGluaW5nIG9mIGlubmVybW9zdCBsb29wcyBkdXJpbmcgc2VsZWN0aXZlIHNjaGVkdWxpbmcuCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IHVubGVzcyBvbmUgb2YgXGZCXC1mc2VsZWN0aXZlXC1zY2hlZHVsaW5nXGZSIG9yCitcJlxmQlwtZnNlbGVjdGl2ZVwtc2NoZWR1bGluZzJcZlIgaXMgdHVybmVkIG9uLgorLklQICJcZkJcLWZzZWxcLXNjaGVkXC1waXBlbGluaW5nXC1vdXRlclwtbG9vcHNcZlIiIDQKKy5JWCBJdGVtICItZnNlbC1zY2hlZC1waXBlbGluaW5nLW91dGVyLWxvb3BzIgorV2hlbiBwaXBlbGluaW5nIGxvb3BzIGR1cmluZyBzZWxlY3RpdmUgc2NoZWR1bGluZywgYWxzbyBwaXBlbGluZSBvdXRlciBsb29wcy4KK1RoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgdW5sZXNzIFxmQlwtZnNlbFwtc2NoZWRcLXBpcGVsaW5pbmdcZlIgaXMgdHVybmVkIG9uLgorLklQICJcZkJcLWZzaHJpbmtcLXdyYXBcZlIiIDQKKy5JWCBJdGVtICItZnNocmluay13cmFwIgorRW1pdCBmdW5jdGlvbiBwcm9sb2d1ZXMgb25seSBiZWZvcmUgcGFydHMgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgbmVlZCBpdCwKK3JhdGhlciB0aGFuIGF0IHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uLiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdAorXCZcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mY2FsbGVyXC1zYXZlc1xmUiIgNAorLklYIEl0ZW0gIi1mY2FsbGVyLXNhdmVzIgorRW5hYmxlIGFsbG9jYXRpb24gb2YgdmFsdWVzIHRvIHJlZ2lzdGVycyB0aGF0IGFyZSBjbG9iYmVyZWQgYnkKK2Z1bmN0aW9uIGNhbGxzLCBieSBlbWl0dGluZyBleHRyYSBpbnN0cnVjdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKK3JlZ2lzdGVycyBhcm91bmQgc3VjaCBjYWxscy4gIFN1Y2ggYWxsb2NhdGlvbiBpcyBkb25lIG9ubHkgd2hlbiBpdAorc2VlbXMgdG8gcmVzdWx0IGluIGJldHRlciBjb2RlLgorLlNwCitUaGlzIG9wdGlvbiBpcyBhbHdheXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIGNlcnRhaW4gbWFjaGluZXMsIHVzdWFsbHkKK3Rob3NlIHdoaWNoIGhhdmUgbm8gY2FsbC1wcmVzZXJ2ZWQgcmVnaXN0ZXJzIHRvIHVzZSBpbnN0ZWFkLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZjb21iaW5lXC1zdGFja1wtYWRqdXN0bWVudHNcZlIiIDQKKy5JWCBJdGVtICItZmNvbWJpbmUtc3RhY2stYWRqdXN0bWVudHMiCitUcmFja3Mgc3RhY2sgYWRqdXN0bWVudHMgKHB1c2hlcyBhbmQgcG9wcykgYW5kIHN0YWNrIG1lbW9yeSByZWZlcmVuY2VzCithbmQgdGhlbiB0cmllcyB0byBmaW5kIHdheXMgdG8gY29tYmluZSB0aGVtLgorLlNwCitFbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PMVxmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZjb25zZXJ2ZVwtc3RhY2tcZlIiIDQKKy5JWCBJdGVtICItZmNvbnNlcnZlLXN0YWNrIgorQXR0ZW1wdCB0byBtaW5pbWl6ZSBzdGFjayB1c2FnZS4gIFRoZSBjb21waWxlciBhdHRlbXB0cyB0byB1c2UgbGVzcworc3RhY2sgc3BhY2UsIGV2ZW4gaWYgdGhhdCBtYWtlcyB0aGUgcHJvZ3JhbSBzbG93ZXIuICBUaGlzIG9wdGlvbgoraW1wbGllcyBzZXR0aW5nIHRoZSBcZkJsYXJnZS1zdGFjay1mcmFtZVxmUiBwYXJhbWV0ZXIgdG8gMTAwCithbmQgdGhlIFxmQmxhcmdlLXN0YWNrLWZyYW1lLWdyb3d0aFxmUiBwYXJhbWV0ZXIgdG8gNDAwLgorLklQICJcZkJcLWZ0cmVlXC1yZWFzc29jXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXJlYXNzb2MiCitQZXJmb3JtIHJlYXNzb2NpYXRpb24gb24gdHJlZXMuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0CithdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtcHJlXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXByZSIKK1BlcmZvcm0gcGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uIChccy0xUFJFXHMwKSBvbiB0cmVlcy4gIFRoaXMgZmxhZyBpcworZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtTzJcZlIgYW5kIFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZnRyZWVcLXBhcnRpYWxcLXByZVxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1wYXJ0aWFsLXByZSIKK01ha2UgcGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uIChccy0xUFJFXHMwKSBtb3JlIGFnZ3Jlc3NpdmUuICBUaGlzIGZsYWcgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU8zXGZSLgorLklQICJcZkJcLWZ0cmVlXC1mb3J3cHJvcFxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1mb3J3cHJvcCIKK1BlcmZvcm0gZm9yd2FyZCBwcm9wYWdhdGlvbiBvbiB0cmVlcy4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2F0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1mcmVcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtZnJlIgorUGVyZm9ybSBmdWxsIHJlZHVuZGFuY3kgZWxpbWluYXRpb24gKFxzLTFGUkVcczApIG9uIHRyZWVzLiAgVGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gXHMtMUZSRVxzMCBhbmQgXHMtMVBSRVxzMCBpcyB0aGF0IFxzLTFGUkVcczAgb25seSBjb25zaWRlcnMgZXhwcmVzc2lvbnMKK3RoYXQgYXJlIGNvbXB1dGVkIG9uIGFsbCBwYXRocyBsZWFkaW5nIHRvIHRoZSByZWR1bmRhbnQgY29tcHV0YXRpb24uCitUaGlzIGFuYWx5c2lzIGlzIGZhc3RlciB0aGFuIFxzLTFQUkVcczAsIHRob3VnaCBpdCBleHBvc2VzIGZld2VyIHJlZHVuZGFuY2llcy4KK1RoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLXBoaXByb3BcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtcGhpcHJvcCIKK1BlcmZvcm0gaG9pc3Rpbmcgb2YgbG9hZHMgZnJvbSBjb25kaXRpb25hbCBwb2ludGVycyBvbiB0cmVlcy4gIFRoaXMKK3Bhc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZob2lzdFwtYWRqYWNlbnRcLWxvYWRzXGZSIiA0CisuSVggSXRlbSAiLWZob2lzdC1hZGphY2VudC1sb2FkcyIKK1NwZWN1bGF0aXZlbHkgaG9pc3QgbG9hZHMgZnJvbSBib3RoIGJyYW5jaGVzIG9mIGFuIGlmLXRoZW4tZWxzZSBpZiB0aGUKK2xvYWRzIGFyZSBmcm9tIGFkamFjZW50IGxvY2F0aW9ucyBpbiB0aGUgc2FtZSBzdHJ1Y3R1cmUgYW5kIHRoZSB0YXJnZXQKK2FyY2hpdGVjdHVyZSBoYXMgYSBjb25kaXRpb25hbCBtb3ZlIGluc3RydWN0aW9uLiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQKK2J5IGRlZmF1bHQgYXQgXGZCXC1PMlxmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1jb3B5XC1wcm9wXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWNvcHktcHJvcCIKK1BlcmZvcm0gY29weSBwcm9wYWdhdGlvbiBvbiB0cmVlcy4gIFRoaXMgcGFzcyBlbGltaW5hdGVzIHVubmVjZXNzYXJ5Citjb3B5IG9wZXJhdGlvbnMuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQKK2hpZ2hlci4KKy5JUCAiXGZCXC1maXBhXC1wdXJlXC1jb25zdFxmUiIgNAorLklYIEl0ZW0gIi1maXBhLXB1cmUtY29uc3QiCitEaXNjb3ZlciB3aGljaCBmdW5jdGlvbnMgYXJlIHB1cmUgb3IgY29uc3RhbnQuCitFbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZmlwYVwtcmVmZXJlbmNlXGZSIiA0CisuSVggSXRlbSAiLWZpcGEtcmVmZXJlbmNlIgorRGlzY292ZXIgd2hpY2ggc3RhdGljIHZhcmlhYmxlcyBkbyBub3QgZXNjYXBlIHRoZQorY29tcGlsYXRpb24gdW5pdC4KK0VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1maXBhXC1wdGFcZlIiIDQKKy5JWCBJdGVtICItZmlwYS1wdGEiCitQZXJmb3JtIGludGVycHJvY2VkdXJhbCBwb2ludGVyIGFuYWx5c2lzIGFuZCBpbnRlcnByb2NlZHVyYWwgbW9kaWZpY2F0aW9uCithbmQgcmVmZXJlbmNlIGFuYWx5c2lzLiAgVGhpcyBvcHRpb24gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBtZW1vcnkgYW5kCitjb21waWxlLXRpbWUgdXNhZ2Ugb24gbGFyZ2UgY29tcGlsYXRpb24gdW5pdHMuICBJdCBpcyBub3QgZW5hYmxlZCBieQorZGVmYXVsdCBhdCBhbnkgb3B0aW1pemF0aW9uIGxldmVsLgorLklQICJcZkJcLWZpcGFcLXByb2ZpbGVcZlIiIDQKKy5JWCBJdGVtICItZmlwYS1wcm9maWxlIgorUGVyZm9ybSBpbnRlcnByb2NlZHVyYWwgcHJvZmlsZSBwcm9wYWdhdGlvbi4gIFRoZSBmdW5jdGlvbnMgY2FsbGVkIG9ubHkgZnJvbQorY29sZCBmdW5jdGlvbnMgYXJlIG1hcmtlZCBhcyBjb2xkLiBBbHNvIGZ1bmN0aW9ucyBleGVjdXRlZCBvbmNlIChzdWNoIGFzCitcJlxmKENXXCooQ2Bjb2xkXCooQydcZlIsIFxmKENXXCooQ2Bub3JldHVyblwqKEMnXGZSLCBzdGF0aWMgY29uc3RydWN0b3JzIG9yIGRlc3RydWN0b3JzKSBhcmUgaWRlbnRpZmllZC4gQ29sZAorZnVuY3Rpb25zIGFuZCBsb29wIGxlc3MgcGFydHMgb2YgZnVuY3Rpb25zIGV4ZWN1dGVkIG9uY2UgYXJlIHRoZW4gb3B0aW1pemVkIGZvcgorc2l6ZS4KK0VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1maXBhXC1jcFxmUiIgNAorLklYIEl0ZW0gIi1maXBhLWNwIgorUGVyZm9ybSBpbnRlcnByb2NlZHVyYWwgY29uc3RhbnQgcHJvcGFnYXRpb24uCitUaGlzIG9wdGltaXphdGlvbiBhbmFseXplcyB0aGUgcHJvZ3JhbSB0byBkZXRlcm1pbmUgd2hlbiB2YWx1ZXMgcGFzc2VkCit0byBmdW5jdGlvbnMgYXJlIGNvbnN0YW50cyBhbmQgdGhlbiBvcHRpbWl6ZXMgYWNjb3JkaW5nbHkuCitUaGlzIG9wdGltaXphdGlvbiBjYW4gc3Vic3RhbnRpYWxseSBpbmNyZWFzZSBwZXJmb3JtYW5jZQoraWYgdGhlIGFwcGxpY2F0aW9uIGhhcyBjb25zdGFudHMgcGFzc2VkIHRvIGZ1bmN0aW9ucy4KK1RoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PMlxmUiwgXGZCXC1Pc1xmUiBhbmQgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1maXBhXC1jcFwtY2xvbmVcZlIiIDQKKy5JWCBJdGVtICItZmlwYS1jcC1jbG9uZSIKK1BlcmZvcm0gZnVuY3Rpb24gY2xvbmluZyB0byBtYWtlIGludGVycHJvY2VkdXJhbCBjb25zdGFudCBwcm9wYWdhdGlvbiBzdHJvbmdlci4KK1doZW4gZW5hYmxlZCwgaW50ZXJwcm9jZWR1cmFsIGNvbnN0YW50IHByb3BhZ2F0aW9uIHBlcmZvcm1zIGZ1bmN0aW9uIGNsb25pbmcKK3doZW4gZXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCBjb25zdGFudCBhcmd1bWVudHMuCitCZWNhdXNlIHRoaXMgb3B0aW1pemF0aW9uIGNhbiBjcmVhdGUgbXVsdGlwbGUgY29waWVzIG9mIGZ1bmN0aW9ucywKK2l0IG1heSBzaWduaWZpY2FudGx5IGluY3JlYXNlIGNvZGUgc2l6ZQorKHNlZSBcZkJcLVwtcGFyYW0gaXBjcFwtdW5pdFwtZ3Jvd3RoPVxmUlxmSXZhbHVlXGZSKS4KK1RoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mdHJlZVwtc2lua1xmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1zaW5rIgorUGVyZm9ybSBmb3J3YXJkIHN0b3JlIG1vdGlvbiAgb24gdHJlZXMuICBUaGlzIGZsYWcgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtYml0XC1jY3BcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtYml0LWNjcCIKK1BlcmZvcm0gc3BhcnNlIGNvbmRpdGlvbmFsIGJpdCBjb25zdGFudCBwcm9wYWdhdGlvbiBvbiB0cmVlcyBhbmQgcHJvcGFnYXRlCitwb2ludGVyIGFsaWdubWVudCBpbmZvcm1hdGlvbi4KK1RoaXMgcGFzcyBvbmx5IG9wZXJhdGVzIG9uIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgYW5kIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuICBJdCByZXF1aXJlcyB0aGF0IFxmQlwtZnRyZWVcLWNjcFxmUiBpcyBlbmFibGVkLgorLklQICJcZkJcLWZ0cmVlXC1jY3BcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtY2NwIgorUGVyZm9ybSBzcGFyc2UgY29uZGl0aW9uYWwgY29uc3RhbnQgcHJvcGFnYXRpb24gKFxzLTFDQ1BcczApIG9uIHRyZWVzLiAgVGhpcworcGFzcyBvbmx5IG9wZXJhdGVzIG9uIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgYW5kIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLXN3aXRjaFwtY29udmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1zd2l0Y2gtY29udmVyc2lvbiIKK1BlcmZvcm0gY29udmVyc2lvbiBvZiBzaW1wbGUgaW5pdGlhbGl6YXRpb25zIGluIGEgc3dpdGNoIHRvCitpbml0aWFsaXphdGlvbnMgZnJvbSBhIHNjYWxhciBhcnJheS4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2F0IFxmQlwtTzJcZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtdGFpbFwtbWVyZ2VcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtdGFpbC1tZXJnZSIKK0xvb2sgZm9yIGlkZW50aWNhbCBjb2RlIHNlcXVlbmNlcy4gIFdoZW4gZm91bmQsIHJlcGxhY2Ugb25lIHdpdGggYSBqdW1wIHRvIHRoZQorb3RoZXIuICBUaGlzIG9wdGltaXphdGlvbiBpcyBrbm93biBhcyB0YWlsIG1lcmdpbmcgb3IgY3Jvc3MganVtcGluZy4gIFRoaXMgZmxhZworaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtTzJcZlIgYW5kIGhpZ2hlci4gIFRoZSBjb21waWxhdGlvbiB0aW1lCitpbiB0aGlzIHBhc3MgY2FuCitiZSBsaW1pdGVkIHVzaW5nIFxmQm1heC10YWlsLW1lcmdlLWNvbXBhcmlzb25zXGZSIHBhcmFtZXRlciBhbmQKK1wmXGZCbWF4LXRhaWwtbWVyZ2UtaXRlcmF0aW9uc1xmUiBwYXJhbWV0ZXIuCisuSVAgIlxmQlwtZnRyZWVcLWRjZVxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1kY2UiCitQZXJmb3JtIGRlYWQgY29kZSBlbGltaW5hdGlvbiAoXHMtMURDRVxzMCkgb24gdHJlZXMuICBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieQorZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtYnVpbHRpblwtY2FsbFwtZGNlXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWJ1aWx0aW4tY2FsbC1kY2UiCitQZXJmb3JtIGNvbmRpdGlvbmFsIGRlYWQgY29kZSBlbGltaW5hdGlvbiAoXHMtMURDRVxzMCkgZm9yIGNhbGxzIHRvIGJ1aWx0LWluIGZ1bmN0aW9ucwordGhhdCBtYXkgc2V0IFxmKENXXCooQ2BlcnJub1wqKEMnXGZSIGJ1dCBhcmUgb3RoZXJ3aXNlIHNpZGUtZWZmZWN0IGZyZWUuICBUaGlzIGZsYWcgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU8yXGZSIGFuZCBoaWdoZXIgaWYgXGZCXC1Pc1xmUiBpcyBub3QgYWxzbworc3BlY2lmaWVkLgorLklQICJcZkJcLWZ0cmVlXC1kb21pbmF0b3JcLW9wdHNcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtZG9taW5hdG9yLW9wdHMiCitQZXJmb3JtIGEgdmFyaWV0eSBvZiBzaW1wbGUgc2NhbGFyIGNsZWFudXBzIChjb25zdGFudC9jb3B5Citwcm9wYWdhdGlvbiwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiwgcmFuZ2UgcHJvcGFnYXRpb24gYW5kIGV4cHJlc3Npb24KK3NpbXBsaWZpY2F0aW9uKSBiYXNlZCBvbiBhIGRvbWluYXRvciB0cmVlIHRyYXZlcnNhbC4gIFRoaXMgYWxzbworcGVyZm9ybXMganVtcCB0aHJlYWRpbmcgKHRvIHJlZHVjZSBqdW1wcyB0byBqdW1wcykuIFRoaXMgZmxhZyBpcworZW5hYmxlZCBieSBkZWZhdWx0IGF0IFxmQlwtT1xmUiBhbmQgaGlnaGVyLgorLklQICJcZkJcLWZ0cmVlXC1kc2VcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtZHNlIgorUGVyZm9ybSBkZWFkIHN0b3JlIGVsaW1pbmF0aW9uIChccy0xRFNFXHMwKSBvbiB0cmVlcy4gIEEgZGVhZCBzdG9yZSBpcyBhIHN0b3JlIGludG8KK2EgbWVtb3J5IGxvY2F0aW9uIHRoYXQgaXMgbGF0ZXIgb3ZlcndyaXR0ZW4gYnkgYW5vdGhlciBzdG9yZSB3aXRob3V0CithbnkgaW50ZXJ2ZW5pbmcgbG9hZHMuICBJbiB0aGlzIGNhc2UgdGhlIGVhcmxpZXIgc3RvcmUgY2FuIGJlIGRlbGV0ZWQuICBUaGlzCitmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtY2hcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtY2giCitQZXJmb3JtIGxvb3AgaGVhZGVyIGNvcHlpbmcgb24gdHJlZXMuICBUaGlzIGlzIGJlbmVmaWNpYWwgc2luY2UgaXQgaW5jcmVhc2VzCitlZmZlY3RpdmVuZXNzIG9mIGNvZGUgbW90aW9uIG9wdGltaXphdGlvbnMuICBJdCBhbHNvIHNhdmVzIG9uZSBqdW1wLiAgVGhpcyBmbGFnCitpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuICBJdCBpcyBub3QgZW5hYmxlZAorZm9yIFxmQlwtT3NcZlIsIHNpbmNlIGl0IHVzdWFsbHkgaW5jcmVhc2VzIGNvZGUgc2l6ZS4KKy5JUCAiXGZCXC1mdHJlZVwtbG9vcFwtb3B0aW1pemVcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtbG9vcC1vcHRpbWl6ZSIKK1BlcmZvcm0gbG9vcCBvcHRpbWl6YXRpb25zIG9uIHRyZWVzLiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLWxvb3BcLWxpbmVhclxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1sb29wLWxpbmVhciIKK1BlcmZvcm0gbG9vcCBpbnRlcmNoYW5nZSB0cmFuc2Zvcm1hdGlvbnMgb24gdHJlZS4gIFNhbWUgYXMKK1wmXGZCXC1mbG9vcFwtaW50ZXJjaGFuZ2VcZlIuICBUbyB1c2UgdGhpcyBjb2RlIHRyYW5zZm9ybWF0aW9uLCBccy0xR0NDXHMwIGhhcwordG8gYmUgY29uZmlndXJlZCB3aXRoIFxmQlwtXC13aXRoXC1wcGxcZlIgYW5kIFxmQlwtXC13aXRoXC1jbG9vZ1xmUiB0bworZW5hYmxlIHRoZSBHcmFwaGl0ZSBsb29wIHRyYW5zZm9ybWF0aW9uIGluZnJhc3RydWN0dXJlLgorLklQICJcZkJcLWZsb29wXC1pbnRlcmNoYW5nZVxmUiIgNAorLklYIEl0ZW0gIi1mbG9vcC1pbnRlcmNoYW5nZSIKK1BlcmZvcm0gbG9vcCBpbnRlcmNoYW5nZSB0cmFuc2Zvcm1hdGlvbnMgb24gbG9vcHMuICBJbnRlcmNoYW5naW5nIHR3bworbmVzdGVkIGxvb3BzIHN3aXRjaGVzIHRoZSBpbm5lciBhbmQgb3V0ZXIgbG9vcHMuICBGb3IgZXhhbXBsZSwgZ2l2ZW4gYQorbG9vcCBsaWtlOgorLlNwCisuVmIgNQorXCYgICAgICAgIERPIEogPSAxLCBNCitcJiAgICAgICAgICBETyBJID0gMSwgTgorXCYgICAgICAgICAgICBBKEosIEkpID0gQShKLCBJKSAqIEMKK1wmICAgICAgICAgIEVORERPCitcJiAgICAgICAgRU5ERE8KKy5WZQorLlNwCitsb29wIGludGVyY2hhbmdlIHRyYW5zZm9ybXMgdGhlIGxvb3AgYXMgaWYgaXQgd2VyZSB3cml0dGVuOgorLlNwCisuVmIgNQorXCYgICAgICAgIERPIEkgPSAxLCBOCitcJiAgICAgICAgICBETyBKID0gMSwgTQorXCYgICAgICAgICAgICBBKEosIEkpID0gQShKLCBJKSAqIEMKK1wmICAgICAgICAgIEVORERPCitcJiAgICAgICAgRU5ERE8KKy5WZQorLlNwCit3aGljaCBjYW4gYmUgYmVuZWZpY2lhbCB3aGVuIFxmKENXXCooQ2BOXCooQydcZlIgaXMgbGFyZ2VyIHRoYW4gdGhlIGNhY2hlcywKK2JlY2F1c2UgaW4gRm9ydHJhbiwgdGhlIGVsZW1lbnRzIG9mIGFuIGFycmF5IGFyZSBzdG9yZWQgaW4gbWVtb3J5Citjb250aWd1b3VzbHkgYnkgY29sdW1uLCBhbmQgdGhlIG9yaWdpbmFsIGxvb3AgaXRlcmF0ZXMgb3ZlciByb3dzLAorcG90ZW50aWFsbHkgY3JlYXRpbmcgYXQgZWFjaCBhY2Nlc3MgYSBjYWNoZSBtaXNzLiAgVGhpcyBvcHRpbWl6YXRpb24KK2FwcGxpZXMgdG8gYWxsIHRoZSBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IFxzLTFHQ0NcczAgYW5kIGlzIG5vdCBsaW1pdGVkIHRvCitGb3J0cmFuLiAgVG8gdXNlIHRoaXMgY29kZSB0cmFuc2Zvcm1hdGlvbiwgXHMtMUdDQ1xzMCBoYXMgdG8gYmUgY29uZmlndXJlZAord2l0aCBcZkJcLVwtd2l0aFwtcHBsXGZSIGFuZCBcZkJcLVwtd2l0aFwtY2xvb2dcZlIgdG8gZW5hYmxlIHRoZQorR3JhcGhpdGUgbG9vcCB0cmFuc2Zvcm1hdGlvbiBpbmZyYXN0cnVjdHVyZS4KKy5JUCAiXGZCXC1mbG9vcFwtc3RyaXBcLW1pbmVcZlIiIDQKKy5JWCBJdGVtICItZmxvb3Atc3RyaXAtbWluZSIKK1BlcmZvcm0gbG9vcCBzdHJpcCBtaW5pbmcgdHJhbnNmb3JtYXRpb25zIG9uIGxvb3BzLiAgU3RyaXAgbWluaW5nCitzcGxpdHMgYSBsb29wIGludG8gdHdvIG5lc3RlZCBsb29wcy4gIFRoZSBvdXRlciBsb29wIGhhcyBzdHJpZGVzCitlcXVhbCB0byB0aGUgc3RyaXAgc2l6ZSBhbmQgdGhlIGlubmVyIGxvb3AgaGFzIHN0cmlkZXMgb2YgdGhlCitvcmlnaW5hbCBsb29wIHdpdGhpbiBhIHN0cmlwLiAgVGhlIHN0cmlwIGxlbmd0aCBjYW4gYmUgY2hhbmdlZAordXNpbmcgdGhlIFxmQmxvb3AtYmxvY2stdGlsZS1zaXplXGZSIHBhcmFtZXRlci4gIEZvciBleGFtcGxlLAorZ2l2ZW4gYSBsb29wIGxpa2U6CisuU3AKKy5WYiAzCitcJiAgICAgICAgRE8gSSA9IDEsIE4KK1wmICAgICAgICAgIEEoSSkgPSBBKEkpICsgQworXCYgICAgICAgIEVORERPCisuVmUKKy5TcAorbG9vcCBzdHJpcCBtaW5pbmcgdHJhbnNmb3JtcyB0aGUgbG9vcCBhcyBpZiBpdCB3ZXJlIHdyaXR0ZW46CisuU3AKKy5WYiA1CitcJiAgICAgICAgRE8gSUkgPSAxLCBOLCA1MQorXCYgICAgICAgICAgRE8gSSA9IElJLCBtaW4gKElJICsgNTAsIE4pCitcJiAgICAgICAgICAgIEEoSSkgPSBBKEkpICsgQworXCYgICAgICAgICAgRU5ERE8KK1wmICAgICAgICBFTkRETworLlZlCisuU3AKK1RoaXMgb3B0aW1pemF0aW9uIGFwcGxpZXMgdG8gYWxsIHRoZSBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IFxzLTFHQ0NcczAgYW5kIGlzCitub3QgbGltaXRlZCB0byBGb3J0cmFuLiAgVG8gdXNlIHRoaXMgY29kZSB0cmFuc2Zvcm1hdGlvbiwgXHMtMUdDQ1xzMCBoYXMgdG8KK2JlIGNvbmZpZ3VyZWQgd2l0aCBcZkJcLVwtd2l0aFwtcHBsXGZSIGFuZCBcZkJcLVwtd2l0aFwtY2xvb2dcZlIgdG8KK2VuYWJsZSB0aGUgR3JhcGhpdGUgbG9vcCB0cmFuc2Zvcm1hdGlvbiBpbmZyYXN0cnVjdHVyZS4KKy5JUCAiXGZCXC1mbG9vcFwtYmxvY2tcZlIiIDQKKy5JWCBJdGVtICItZmxvb3AtYmxvY2siCitQZXJmb3JtIGxvb3AgYmxvY2tpbmcgdHJhbnNmb3JtYXRpb25zIG9uIGxvb3BzLiAgQmxvY2tpbmcgc3RyaXAgbWluZXMKK2VhY2ggbG9vcCBpbiB0aGUgbG9vcCBuZXN0IHN1Y2ggdGhhdCB0aGUgbWVtb3J5IGFjY2Vzc2VzIG9mIHRoZQorZWxlbWVudCBsb29wcyBmaXQgaW5zaWRlIGNhY2hlcy4gIFRoZSBzdHJpcCBsZW5ndGggY2FuIGJlIGNoYW5nZWQKK3VzaW5nIHRoZSBcZkJsb29wLWJsb2NrLXRpbGUtc2l6ZVxmUiBwYXJhbWV0ZXIuICBGb3IgZXhhbXBsZSwgZ2l2ZW4KK2EgbG9vcCBsaWtlOgorLlNwCisuVmIgNQorXCYgICAgICAgIERPIEkgPSAxLCBOCitcJiAgICAgICAgICBETyBKID0gMSwgTQorXCYgICAgICAgICAgICBBKEosIEkpID0gQihJKSArIEMoSikKK1wmICAgICAgICAgIEVORERPCitcJiAgICAgICAgRU5ERE8KKy5WZQorLlNwCitsb29wIGJsb2NraW5nIHRyYW5zZm9ybXMgdGhlIGxvb3AgYXMgaWYgaXQgd2VyZSB3cml0dGVuOgorLlNwCisuVmIgOQorXCYgICAgICAgIERPIElJID0gMSwgTiwgNTEKK1wmICAgICAgICAgIERPIEpKID0gMSwgTSwgNTEKK1wmICAgICAgICAgICAgRE8gSSA9IElJLCBtaW4gKElJICsgNTAsIE4pCitcJiAgICAgICAgICAgICAgRE8gSiA9IEpKLCBtaW4gKEpKICsgNTAsIE0pCitcJiAgICAgICAgICAgICAgICBBKEosIEkpID0gQihJKSArIEMoSikKK1wmICAgICAgICAgICAgICBFTkRETworXCYgICAgICAgICAgICBFTkRETworXCYgICAgICAgICAgRU5ERE8KK1wmICAgICAgICBFTkRETworLlZlCisuU3AKK3doaWNoIGNhbiBiZSBiZW5lZmljaWFsIHdoZW4gXGYoQ1dcKihDYE1cKihDJ1xmUiBpcyBsYXJnZXIgdGhhbiB0aGUgY2FjaGVzLAorYmVjYXVzZSB0aGUgaW5uZXJtb3N0IGxvb3AgaXRlcmF0ZXMgb3ZlciBhIHNtYWxsZXIgYW1vdW50IG9mIGRhdGEKK3doaWNoIGNhbiBiZSBrZXB0IGluIHRoZSBjYWNoZXMuICBUaGlzIG9wdGltaXphdGlvbiBhcHBsaWVzIHRvIGFsbCB0aGUKK2xhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgXHMtMUdDQ1xzMCBhbmQgaXMgbm90IGxpbWl0ZWQgdG8gRm9ydHJhbi4gIFRvIHVzZSB0aGlzCitjb2RlIHRyYW5zZm9ybWF0aW9uLCBccy0xR0NDXHMwIGhhcyB0byBiZSBjb25maWd1cmVkIHdpdGggXGZCXC1cLXdpdGhcLXBwbFxmUgorYW5kIFxmQlwtXC13aXRoXC1jbG9vZ1xmUiB0byBlbmFibGUgdGhlIEdyYXBoaXRlIGxvb3AgdHJhbnNmb3JtYXRpb24KK2luZnJhc3RydWN0dXJlLgorLklQICJcZkJcLWZncmFwaGl0ZVwtaWRlbnRpdHlcZlIiIDQKKy5JWCBJdGVtICItZmdyYXBoaXRlLWlkZW50aXR5IgorRW5hYmxlIHRoZSBpZGVudGl0eSB0cmFuc2Zvcm1hdGlvbiBmb3IgZ3JhcGhpdGUuICBGb3IgZXZlcnkgU0NvUCB3ZSBnZW5lcmF0ZQordGhlIHBvbHloZWRyYWwgcmVwcmVzZW50YXRpb24gYW5kIHRyYW5zZm9ybSBpdCBiYWNrIHRvIGdpbXBsZS4gIFVzaW5nCitcJlxmQlwtZmdyYXBoaXRlXC1pZGVudGl0eVxmUiB3ZSBjYW4gY2hlY2sgdGhlIGNvc3RzIG9yIGJlbmVmaXRzIG9mIHRoZQorXCZccy0xR0lNUExFXHMwIFwtPiBccy0xR1JBUEhJVEVcczAgXC0+IFxzLTFHSU1QTEVcczAgdHJhbnNmb3JtYXRpb24uICBTb21lIG1pbmltYWwgb3B0aW1pemF0aW9ucworYXJlIGFsc28gcGVyZm9ybWVkIGJ5IHRoZSBjb2RlIGdlbmVyYXRvciBDTG9vRywgbGlrZSBpbmRleCBzcGxpdHRpbmcgYW5kCitkZWFkIGNvZGUgZWxpbWluYXRpb24gaW4gbG9vcHMuCisuSVAgIlxmQlwtZmxvb3BcLW5lc3RcLW9wdGltaXplXGZSIiA0CisuSVggSXRlbSAiLWZsb29wLW5lc3Qtb3B0aW1pemUiCitFbmFibGUgdGhlIFxzLTFJU0xcczAgYmFzZWQgbG9vcCBuZXN0IG9wdGltaXplci4gIFRoaXMgaXMgYSBnZW5lcmljIGxvb3AgbmVzdAorb3B0aW1pemVyIGJhc2VkIG9uIHRoZSBQbHV0byBvcHRpbWl6YXRpb24gYWxnb3JpdGhtcy4gIEl0IGNhbGN1bGF0ZXMgYSBsb29wCitzdHJ1Y3R1cmUgb3B0aW1pemVkIGZvciBkYXRhLWxvY2FsaXR5IGFuZCBwYXJhbGxlbGlzbS4gIFRoaXMgb3B0aW9uCitpcyBleHBlcmltZW50YWwuCisuSVAgIlxmQlwtZmxvb3BcLXBhcmFsbGVsaXplXC1hbGxcZlIiIDQKKy5JWCBJdGVtICItZmxvb3AtcGFyYWxsZWxpemUtYWxsIgorVXNlIHRoZSBHcmFwaGl0ZSBkYXRhIGRlcGVuZGVuY2UgYW5hbHlzaXMgdG8gaWRlbnRpZnkgbG9vcHMgdGhhdCBjYW4KK2JlIHBhcmFsbGVsaXplZC4gIFBhcmFsbGVsaXplIGFsbCB0aGUgbG9vcHMgdGhhdCBjYW4gYmUgYW5hbHl6ZWQgdG8KK25vdCBjb250YWluIGxvb3AgY2FycmllZCBkZXBlbmRlbmNlcyB3aXRob3V0IGNoZWNraW5nIHRoYXQgaXQgaXMKK3Byb2ZpdGFibGUgdG8gcGFyYWxsZWxpemUgdGhlIGxvb3BzLgorLklQICJcZkJcLWZjaGVja1wtZGF0YVwtZGVwc1xmUiIgNAorLklYIEl0ZW0gIi1mY2hlY2stZGF0YS1kZXBzIgorQ29tcGFyZSB0aGUgcmVzdWx0cyBvZiBzZXZlcmFsIGRhdGEgZGVwZW5kZW5jZSBhbmFseXplcnMuICBUaGlzIG9wdGlvbgoraXMgdXNlZCBmb3IgZGVidWdnaW5nIHRoZSBkYXRhIGRlcGVuZGVuY2UgYW5hbHl6ZXJzLgorLklQICJcZkJcLWZ0cmVlXC1sb29wXC1pZlwtY29udmVydFxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1sb29wLWlmLWNvbnZlcnQiCitBdHRlbXB0IHRvIHRyYW5zZm9ybSBjb25kaXRpb25hbCBqdW1wcyBpbiB0aGUgaW5uZXJtb3N0IGxvb3BzIHRvCiticmFuY2gtbGVzcyBlcXVpdmFsZW50cy4gIFRoZSBpbnRlbnQgaXMgdG8gcmVtb3ZlIGNvbnRyb2wtZmxvdyBmcm9tCit0aGUgaW5uZXJtb3N0IGxvb3BzIGluIG9yZGVyIHRvIGltcHJvdmUgdGhlIGFiaWxpdHkgb2YgdGhlCit2ZWN0b3JpemF0aW9uIHBhc3MgdG8gaGFuZGxlIHRoZXNlIGxvb3BzLiAgVGhpcyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK2lmIHZlY3Rvcml6YXRpb24gaXMgZW5hYmxlZC4KKy5JUCAiXGZCXC1mdHJlZVwtbG9vcFwtaWZcLWNvbnZlcnRcLXN0b3Jlc1xmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1sb29wLWlmLWNvbnZlcnQtc3RvcmVzIgorQXR0ZW1wdCB0byBhbHNvIGlmLWNvbnZlcnQgY29uZGl0aW9uYWwganVtcHMgY29udGFpbmluZyBtZW1vcnkgd3JpdGVzLgorVGhpcyB0cmFuc2Zvcm1hdGlvbiBjYW4gYmUgdW5zYWZlIGZvciBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcyBhcyBpdAordHJhbnNmb3JtcyBjb25kaXRpb25hbCBtZW1vcnkgd3JpdGVzIGludG8gdW5jb25kaXRpb25hbCBtZW1vcnkgd3JpdGVzLgorRm9yIGV4YW1wbGUsCisuU3AKKy5WYiAzCitcJiAgICAgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKK1wmICAgICAgICAgIGlmIChjb25kKQorXCYgICAgICAgICAgICBBW2ldID0gZXhwcjsKKy5WZQorLlNwCitpcyB0cmFuc2Zvcm1lZCB0bworLlNwCisuVmIgMgorXCYgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCitcJiAgICAgICAgICBBW2ldID0gY29uZCA/IGV4cHIgOiBBW2ldOworLlZlCisuU3AKK3BvdGVudGlhbGx5IHByb2R1Y2luZyBkYXRhIHJhY2VzLgorLklQICJcZkJcLWZ0cmVlXC1sb29wXC1kaXN0cmlidXRpb25cZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtbG9vcC1kaXN0cmlidXRpb24iCitQZXJmb3JtIGxvb3AgZGlzdHJpYnV0aW9uLiAgVGhpcyBmbGFnIGNhbiBpbXByb3ZlIGNhY2hlIHBlcmZvcm1hbmNlIG9uCitiaWcgbG9vcCBib2RpZXMgYW5kIGFsbG93IGZ1cnRoZXIgbG9vcCBvcHRpbWl6YXRpb25zLCBsaWtlCitwYXJhbGxlbGl6YXRpb24gb3IgdmVjdG9yaXphdGlvbiwgdG8gdGFrZSBwbGFjZS4gIEZvciBleGFtcGxlLCB0aGUgbG9vcAorLlNwCisuVmIgNAorXCYgICAgICAgIERPIEkgPSAxLCBOCitcJiAgICAgICAgICBBKEkpID0gQihJKSArIEMKK1wmICAgICAgICAgIEQoSSkgPSBFKEkpICogRgorXCYgICAgICAgIEVORERPCisuVmUKKy5TcAoraXMgdHJhbnNmb3JtZWQgdG8KKy5TcAorLlZiIDYKK1wmICAgICAgICBETyBJID0gMSwgTgorXCYgICAgICAgICAgIEEoSSkgPSBCKEkpICsgQworXCYgICAgICAgIEVORERPCitcJiAgICAgICAgRE8gSSA9IDEsIE4KK1wmICAgICAgICAgICBEKEkpID0gRShJKSAqIEYKK1wmICAgICAgICBFTkRETworLlZlCisuSVAgIlxmQlwtZnRyZWVcLWxvb3BcLWRpc3RyaWJ1dGVcLXBhdHRlcm5zXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWxvb3AtZGlzdHJpYnV0ZS1wYXR0ZXJucyIKK1BlcmZvcm0gbG9vcCBkaXN0cmlidXRpb24gb2YgcGF0dGVybnMgdGhhdCBjYW4gYmUgY29kZSBnZW5lcmF0ZWQgd2l0aAorY2FsbHMgdG8gYSBsaWJyYXJ5LiAgVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU8zXGZSLgorLlNwCitUaGlzIHBhc3MgZGlzdHJpYnV0ZXMgdGhlIGluaXRpYWxpemF0aW9uIGxvb3BzIGFuZCBnZW5lcmF0ZXMgYSBjYWxsIHRvCittZW1zZXQgemVyby4gIEZvciBleGFtcGxlLCB0aGUgbG9vcAorLlNwCisuVmIgNAorXCYgICAgICAgIERPIEkgPSAxLCBOCitcJiAgICAgICAgICBBKEkpID0gMAorXCYgICAgICAgICAgQihJKSA9IEEoSSkgKyBJCitcJiAgICAgICAgRU5ERE8KKy5WZQorLlNwCitpcyB0cmFuc2Zvcm1lZCB0bworLlNwCisuVmIgNgorXCYgICAgICAgIERPIEkgPSAxLCBOCitcJiAgICAgICAgICAgQShJKSA9IDAKK1wmICAgICAgICBFTkRETworXCYgICAgICAgIERPIEkgPSAxLCBOCitcJiAgICAgICAgICAgQihJKSA9IEEoSSkgKyBJCitcJiAgICAgICAgRU5ERE8KKy5WZQorLlNwCithbmQgdGhlIGluaXRpYWxpemF0aW9uIGxvb3AgaXMgdHJhbnNmb3JtZWQgaW50byBhIGNhbGwgdG8gbWVtc2V0IHplcm8uCisuSVAgIlxmQlwtZnRyZWVcLWxvb3BcLWltXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWxvb3AtaW0iCitQZXJmb3JtIGxvb3AgaW52YXJpYW50IG1vdGlvbiBvbiB0cmVlcy4gIFRoaXMgcGFzcyBtb3ZlcyBvbmx5IGludmFyaWFudHMgdGhhdAorYXJlIGhhcmQgdG8gaGFuZGxlIGF0IFxzLTFSVExcczAgbGV2ZWwgKGZ1bmN0aW9uIGNhbGxzLCBvcGVyYXRpb25zIHRoYXQgZXhwYW5kIHRvCitub250cml2aWFsIHNlcXVlbmNlcyBvZiBpbnNucykuICBXaXRoIFxmQlwtZnVuc3dpdGNoXC1sb29wc1xmUiBpdCBhbHNvIG1vdmVzCitvcGVyYW5kcyBvZiBjb25kaXRpb25zIHRoYXQgYXJlIGludmFyaWFudCBvdXQgb2YgdGhlIGxvb3AsIHNvIHRoYXQgd2UgY2FuIHVzZQoranVzdCB0cml2aWFsIGludmFyaWFudG5lc3MgYW5hbHlzaXMgaW4gbG9vcCB1bnN3aXRjaGluZy4gIFRoZSBwYXNzIGFsc28gaW5jbHVkZXMKK3N0b3JlIG1vdGlvbi4KKy5JUCAiXGZCXC1mdHJlZVwtbG9vcFwtaXZjYW5vblxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1sb29wLWl2Y2Fub24iCitDcmVhdGUgYSBjYW5vbmljYWwgY291bnRlciBmb3IgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaW4gbG9vcHMgZm9yIHdoaWNoCitkZXRlcm1pbmluZyBudW1iZXIgb2YgaXRlcmF0aW9ucyByZXF1aXJlcyBjb21wbGljYXRlZCBhbmFseXNpcy4gIExhdGVyCitvcHRpbWl6YXRpb25zIHRoZW4gbWF5IGRldGVybWluZSB0aGUgbnVtYmVyIGVhc2lseS4gIFVzZWZ1bCBlc3BlY2lhbGx5CitpbiBjb25uZWN0aW9uIHdpdGggdW5yb2xsaW5nLgorLklQICJcZkJcLWZpdm9wdHNcZlIiIDQKKy5JWCBJdGVtICItZml2b3B0cyIKK1BlcmZvcm0gaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMgKHN0cmVuZ3RoIHJlZHVjdGlvbiwgaW5kdWN0aW9uCit2YXJpYWJsZSBtZXJnaW5nIGFuZCBpbmR1Y3Rpb24gdmFyaWFibGUgZWxpbWluYXRpb24pIG9uIHRyZWVzLgorLklQICJcZkJcLWZ0cmVlXC1wYXJhbGxlbGl6ZVwtbG9vcHM9blxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1wYXJhbGxlbGl6ZS1sb29wcz1uIgorUGFyYWxsZWxpemUgbG9vcHMsIGkuZS4sIHNwbGl0IHRoZWlyIGl0ZXJhdGlvbiBzcGFjZSB0byBydW4gaW4gbiB0aHJlYWRzLgorVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGZvciBsb29wcyB3aG9zZSBpdGVyYXRpb25zIGFyZSBpbmRlcGVuZGVudAorYW5kIGNhbiBiZSBhcmJpdHJhcmlseSByZW9yZGVyZWQuICBUaGUgb3B0aW1pemF0aW9uIGlzIG9ubHkKK3Byb2ZpdGFibGUgb24gbXVsdGlwcm9jZXNzb3IgbWFjaGluZXMsIGZvciBsb29wcyB0aGF0IGFyZSBDUFUtaW50ZW5zaXZlLAorcmF0aGVyIHRoYW4gY29uc3RyYWluZWQgZS5nLiBieSBtZW1vcnkgYmFuZHdpZHRoLiAgVGhpcyBvcHRpb24KK2ltcGxpZXMgXGZCXC1wdGhyZWFkXGZSLCBhbmQgdGh1cyBpcyBvbmx5IHN1cHBvcnRlZCBvbiB0YXJnZXRzCit0aGF0IGhhdmUgc3VwcG9ydCBmb3IgXGZCXC1wdGhyZWFkXGZSLgorLklQICJcZkJcLWZ0cmVlXC1wdGFcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtcHRhIgorUGVyZm9ybSBmdW5jdGlvbi1sb2NhbCBwb2ludHMtdG8gYW5hbHlzaXMgb24gdHJlZXMuICBUaGlzIGZsYWcgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kIGhpZ2hlci4KKy5JUCAiXGZCXC1mdHJlZVwtc3JhXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLXNyYSIKK1BlcmZvcm0gc2NhbGFyIHJlcGxhY2VtZW50IG9mIGFnZ3JlZ2F0ZXMuICBUaGlzIHBhc3MgcmVwbGFjZXMgc3RydWN0dXJlCityZWZlcmVuY2VzIHdpdGggc2NhbGFycyB0byBwcmV2ZW50IGNvbW1pdHRpbmcgc3RydWN0dXJlcyB0byBtZW1vcnkgdG9vCitlYXJseS4gIFRoaXMgZmxhZyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLWNvcHlyZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtY29weXJlbmFtZSIKK1BlcmZvcm0gY29weSByZW5hbWluZyBvbiB0cmVlcy4gIFRoaXMgcGFzcyBhdHRlbXB0cyB0byByZW5hbWUgY29tcGlsZXIKK3RlbXBvcmFyaWVzIHRvIG90aGVyIHZhcmlhYmxlcyBhdCBjb3B5IGxvY2F0aW9ucywgdXN1YWxseSByZXN1bHRpbmcgaW4KK3ZhcmlhYmxlIG5hbWVzIHdoaWNoIG1vcmUgY2xvc2VseSByZXNlbWJsZSB0aGUgb3JpZ2luYWwgdmFyaWFibGVzLiAgVGhpcyBmbGFnCitpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLWNvYWxlc2NlXC1pbmxpbmVkXC12YXJzXGZSIiA0CisuSVggSXRlbSAiLWZ0cmVlLWNvYWxlc2NlLWlubGluZWQtdmFycyIKK1RlbGwgdGhlIGNvcHlyZW5hbWUgcGFzcyAoc2VlIFxmQlwtZnRyZWVcLWNvcHlyZW5hbWVcZlIpIHRvIGF0dGVtcHQgdG8KK2NvbWJpbmUgc21hbGwgdXNlci1kZWZpbmVkIHZhcmlhYmxlcyB0b28sIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBpbmxpbmVkCitmcm9tIG90aGVyIGZ1bmN0aW9ucy4gIEl0IGlzIGEgbW9yZSBsaW1pdGVkIGZvcm0gb2YKK1wmXGZCXC1mdHJlZVwtY29hbGVzY2VcLXZhcnNcZlIuICBUaGlzIG1heSBoYXJtIGRlYnVnIGluZm9ybWF0aW9uIG9mIHN1Y2gKK2lubGluZWQgdmFyaWFibGVzLCBidXQgaXQgd2lsbCBrZWVwIHZhcmlhYmxlcyBvZiB0aGUgaW5saW5lZC1pbnRvCitmdW5jdGlvbiBhcGFydCBmcm9tIGVhY2ggb3RoZXIsIHN1Y2ggdGhhdCB0aGV5IGFyZSBtb3JlIGxpa2VseSB0bworY29udGFpbiB0aGUgZXhwZWN0ZWQgdmFsdWVzIGluIGEgZGVidWdnaW5nIHNlc3Npb24uICBUaGlzIHdhcyB0aGUKK2RlZmF1bHQgaW4gXHMtMUdDQ1xzMCB2ZXJzaW9ucyBvbGRlciB0aGFuIDQuNy4KKy5JUCAiXGZCXC1mdHJlZVwtY29hbGVzY2VcLXZhcnNcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtY29hbGVzY2UtdmFycyIKK1RlbGwgdGhlIGNvcHlyZW5hbWUgcGFzcyAoc2VlIFxmQlwtZnRyZWVcLWNvcHlyZW5hbWVcZlIpIHRvIGF0dGVtcHQgdG8KK2NvbWJpbmUgc21hbGwgdXNlci1kZWZpbmVkIHZhcmlhYmxlcyB0b28sIGluc3RlYWQgb2YganVzdCBjb21waWxlcgordGVtcG9yYXJpZXMuICBUaGlzIG1heSBzZXZlcmVseSBsaW1pdCB0aGUgYWJpbGl0eSB0byBkZWJ1ZyBhbiBvcHRpbWl6ZWQKK3Byb2dyYW0gY29tcGlsZWQgd2l0aCBcZkJcLWZub1wtdmFyXC10cmFja2luZ1wtYXNzaWdubWVudHNcZlIuICBJbiB0aGUKK25lZ2F0ZWQgZm9ybSwgdGhpcyBmbGFnIHByZXZlbnRzIFxzLTFTU0FcczAgY29hbGVzY2luZyBvZiB1c2VyIHZhcmlhYmxlcywKK2luY2x1ZGluZyBpbmxpbmVkIG9uZXMuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtZnRyZWVcLXRlclxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS10ZXIiCitQZXJmb3JtIHRlbXBvcmFyeSBleHByZXNzaW9uIHJlcGxhY2VtZW50IGR1cmluZyB0aGUgXHMtMVNTQVwtXHMwPm5vcm1hbCBwaGFzZS4gIFNpbmdsZQordXNlL3NpbmdsZSBkZWYgdGVtcG9yYXJpZXMgYXJlIHJlcGxhY2VkIGF0IHRoZWlyIHVzZSBsb2NhdGlvbiB3aXRoIHRoZWlyCitkZWZpbmluZyBleHByZXNzaW9uLiAgVGhpcyByZXN1bHRzIGluIG5vbi1HSU1QTEUgY29kZSwgYnV0IGdpdmVzIHRoZSBleHBhbmRlcnMKK211Y2ggbW9yZSBjb21wbGV4IHRyZWVzIHRvIHdvcmsgb24gcmVzdWx0aW5nIGluIGJldHRlciBccy0xUlRMXHMwIGdlbmVyYXRpb24uICBUaGlzIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgYXQgXGZCXC1PXGZSIGFuZCBoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLXNsc3JcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtc2xzciIKK1BlcmZvcm0gc3RyYWlnaHQtbGluZSBzdHJlbmd0aCByZWR1Y3Rpb24gb24gdHJlZXMuICBUaGlzIHJlY29nbml6ZXMgcmVsYXRlZAorZXhwcmVzc2lvbnMgaW52b2x2aW5nIG11bHRpcGxpY2F0aW9ucyBhbmQgcmVwbGFjZXMgdGhlbSBieSBsZXNzIGV4cGVuc2l2ZQorY2FsY3VsYXRpb25zIHdoZW4gcG9zc2libGUuICBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU9cZlIgYW5kCitoaWdoZXIuCisuSVAgIlxmQlwtZnRyZWVcLXZlY3Rvcml6ZVxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS12ZWN0b3JpemUiCitQZXJmb3JtIGxvb3AgdmVjdG9yaXphdGlvbiBvbiB0cmVlcy4gVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdAorXCZcZkJcLU8zXGZSLgorLklQICJcZkJcLWZ0cmVlXC1zbHBcLXZlY3Rvcml6ZVxmUiIgNAorLklYIEl0ZW0gIi1mdHJlZS1zbHAtdmVjdG9yaXplIgorUGVyZm9ybSBiYXNpYyBibG9jayB2ZWN0b3JpemF0aW9uIG9uIHRyZWVzLiBUaGlzIGZsYWcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0CitcJlxmQlwtTzNcZlIgYW5kIHdoZW4gXGZCXC1mdHJlZVwtdmVjdG9yaXplXGZSIGlzIGVuYWJsZWQuCisuSVAgIlxmQlwtZnRyZWVcLXZlY3RcLWxvb3BcLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtdmVjdC1sb29wLXZlcnNpb24iCitQZXJmb3JtIGxvb3AgdmVyc2lvbmluZyB3aGVuIGRvaW5nIGxvb3AgdmVjdG9yaXphdGlvbiBvbiB0cmVlcy4gIFdoZW4gYSBsb29wCithcHBlYXJzIHRvIGJlIHZlY3Rvcml6YWJsZSBleGNlcHQgdGhhdCBkYXRhIGFsaWdubWVudCBvciBkYXRhIGRlcGVuZGVuY2UgY2Fubm90CitiZSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZSwgdGhlbiB2ZWN0b3JpemVkIGFuZCBub24tdmVjdG9yaXplZCB2ZXJzaW9ucyBvZgordGhlIGxvb3AgYXJlIGdlbmVyYXRlZCBhbG9uZyB3aXRoIHJ1bi10aW1lIGNoZWNrcyBmb3IgYWxpZ25tZW50IG9yIGRlcGVuZGVuY2UKK3RvIGNvbnRyb2wgd2hpY2ggdmVyc2lvbiBpcyBleGVjdXRlZC4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorZXhjZXB0IGF0IGxldmVsIFxmQlwtT3NcZlIgd2hlcmUgaXQgaXMgZGlzYWJsZWQuCisuSVAgIlxmQlwtZnZlY3RcLWNvc3RcLW1vZGVsXGZSIiA0CisuSVggSXRlbSAiLWZ2ZWN0LWNvc3QtbW9kZWwiCitFbmFibGUgY29zdCBtb2RlbCBmb3IgdmVjdG9yaXphdGlvbi4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdAorXCZcZkJcLU8zXGZSLgorLklQICJcZkJcLWZ0cmVlXC12cnBcZlIiIDQKKy5JWCBJdGVtICItZnRyZWUtdnJwIgorUGVyZm9ybSBWYWx1ZSBSYW5nZSBQcm9wYWdhdGlvbiBvbiB0cmVlcy4gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUKK2NvbnN0YW50IHByb3BhZ2F0aW9uIHBhc3MsIGJ1dCBpbnN0ZWFkIG9mIHZhbHVlcywgcmFuZ2VzIG9mIHZhbHVlcyBhcmUKK3Byb3BhZ2F0ZWQuICBUaGlzIGFsbG93cyB0aGUgb3B0aW1pemVycyB0byByZW1vdmUgdW5uZWNlc3NhcnkgcmFuZ2UKK2NoZWNrcyBsaWtlIGFycmF5IGJvdW5kIGNoZWNrcyBhbmQgbnVsbCBwb2ludGVyIGNoZWNrcy4gIFRoaXMgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCBhdCBcZkJcLU8yXGZSIGFuZCBoaWdoZXIuICBOdWxsIHBvaW50ZXIgY2hlY2sKK2VsaW1pbmF0aW9uIGlzIG9ubHkgZG9uZSBpZiBcZkJcLWZkZWxldGVcLW51bGxcLXBvaW50ZXJcLWNoZWNrc1xmUiBpcworZW5hYmxlZC4KKy5JUCAiXGZCXC1mdHJhY2VyXGZSIiA0CisuSVggSXRlbSAiLWZ0cmFjZXIiCitQZXJmb3JtIHRhaWwgZHVwbGljYXRpb24gdG8gZW5sYXJnZSBzdXBlcmJsb2NrIHNpemUuICBUaGlzIHRyYW5zZm9ybWF0aW9uCitzaW1wbGlmaWVzIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlIGZ1bmN0aW9uIGFsbG93aW5nIG90aGVyIG9wdGltaXphdGlvbnMgdG8gZG8KK2EgYmV0dGVyIGpvYi4KKy5JUCAiXGZCXC1mdW5yb2xsXC1sb29wc1xmUiIgNAorLklYIEl0ZW0gIi1mdW5yb2xsLWxvb3BzIgorVW5yb2xsIGxvb3BzIHdob3NlIG51bWJlciBvZiBpdGVyYXRpb25zIGNhbiBiZSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUKK3RpbWUgb3IgdXBvbiBlbnRyeSB0byB0aGUgbG9vcC4gIFxmQlwtZnVucm9sbFwtbG9vcHNcZlIgaW1wbGllcworXCZcZkJcLWZyZXJ1blwtY3NlXC1hZnRlclwtbG9vcFxmUi4gIFRoaXMgb3B0aW9uIG1ha2VzIGNvZGUgbGFyZ2VyLAorYW5kIG1heSBvciBtYXkgbm90IG1ha2UgaXQgcnVuIGZhc3Rlci4KKy5JUCAiXGZCXC1mdW5yb2xsXC1hbGxcLWxvb3BzXGZSIiA0CisuSVggSXRlbSAiLWZ1bnJvbGwtYWxsLWxvb3BzIgorVW5yb2xsIGFsbCBsb29wcywgZXZlbiBpZiB0aGVpciBudW1iZXIgb2YgaXRlcmF0aW9ucyBpcyB1bmNlcnRhaW4gd2hlbgordGhlIGxvb3AgaXMgZW50ZXJlZC4gIFRoaXMgdXN1YWxseSBtYWtlcyBwcm9ncmFtcyBydW4gbW9yZSBzbG93bHkuCitcJlxmQlwtZnVucm9sbFwtYWxsXC1sb29wc1xmUiBpbXBsaWVzIHRoZSBzYW1lIG9wdGlvbnMgYXMKK1wmXGZCXC1mdW5yb2xsXC1sb29wc1xmUiwKKy5JUCAiXGZCXC1mc3BsaXRcLWl2c1wtaW5cLXVucm9sbGVyXGZSIiA0CisuSVggSXRlbSAiLWZzcGxpdC1pdnMtaW4tdW5yb2xsZXIiCitFbmFibGVzIGV4cHJlc3Npb24gb2YgdmFsdWVzIG9mIGluZHVjdGlvbiB2YXJpYWJsZXMgaW4gbGF0ZXIgaXRlcmF0aW9ucworb2YgdGhlIHVucm9sbGVkIGxvb3AgdXNpbmcgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBpdGVyYXRpb24uICBUaGlzIGJyZWFrcworbG9uZyBkZXBlbmRlbmN5IGNoYWlucywgdGh1cyBpbXByb3ZpbmcgZWZmaWNpZW5jeSBvZiB0aGUgc2NoZWR1bGluZyBwYXNzZXMuCisuU3AKK0EgY29tYmluYXRpb24gb2YgXGZCXC1md2ViXGZSIGFuZCBccy0xQ1NFXHMwIGlzIG9mdGVuIHN1ZmZpY2llbnQgdG8gb2J0YWluIHRoZQorc2FtZSBlZmZlY3QuICBIb3dldmVyLCB0aGF0IGlzIG5vdCByZWxpYWJsZSBpbiBjYXNlcyB3aGVyZSB0aGUgbG9vcCBib2R5CitpcyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gYSBzaW5nbGUgYmFzaWMgYmxvY2suICBJdCBhbHNvIGRvZXMgbm90IHdvcmsgYXQgYWxsCitvbiBzb21lIGFyY2hpdGVjdHVyZXMgZHVlIHRvIHJlc3RyaWN0aW9ucyBpbiB0aGUgXHMtMUNTRVxzMCBwYXNzLgorLlNwCitUaGlzIG9wdGltaXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtZnZhcmlhYmxlXC1leHBhbnNpb25cLWluXC11bnJvbGxlclxmUiIgNAorLklYIEl0ZW0gIi1mdmFyaWFibGUtZXhwYW5zaW9uLWluLXVucm9sbGVyIgorV2l0aCB0aGlzIG9wdGlvbiwgdGhlIGNvbXBpbGVyIGNyZWF0ZXMgbXVsdGlwbGUgY29waWVzIG9mIHNvbWUKK2xvY2FsIHZhcmlhYmxlcyB3aGVuIHVucm9sbGluZyBhIGxvb3AsIHdoaWNoIGNhbiByZXN1bHQgaW4gc3VwZXJpb3IgY29kZS4KKy5JUCAiXGZCXC1mcGFydGlhbFwtaW5saW5pbmdcZlIiIDQKKy5JWCBJdGVtICItZnBhcnRpYWwtaW5saW5pbmciCitJbmxpbmUgcGFydHMgb2YgZnVuY3Rpb25zLiAgVGhpcyBvcHRpb24gaGFzIGFueSBlZmZlY3Qgb25seQord2hlbiBpbmxpbmluZyBpdHNlbGYgaXMgdHVybmVkIG9uIGJ5IHRoZSBcZkJcLWZpbmxpbmVcLWZ1bmN0aW9uc1xmUgorb3IgXGZCXC1maW5saW5lXC1zbWFsbFwtZnVuY3Rpb25zXGZSIG9wdGlvbnMuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWwgXGZCXC1PMlxmUi4KKy5JUCAiXGZCXC1mcHJlZGljdGl2ZVwtY29tbW9uaW5nXGZSIiA0CisuSVggSXRlbSAiLWZwcmVkaWN0aXZlLWNvbW1vbmluZyIKK1BlcmZvcm0gcHJlZGljdGl2ZSBjb21tb25pbmcgb3B0aW1pemF0aW9uLCBpLmUuLCByZXVzaW5nIGNvbXB1dGF0aW9ucworKGVzcGVjaWFsbHkgbWVtb3J5IGxvYWRzIGFuZCBzdG9yZXMpIHBlcmZvcm1lZCBpbiBwcmV2aW91cworaXRlcmF0aW9ucyBvZiBsb29wcy4KKy5TcAorVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhdCBsZXZlbCBcZkJcLU8zXGZSLgorLklQICJcZkJcLWZwcmVmZXRjaFwtbG9vcFwtYXJyYXlzXGZSIiA0CisuSVggSXRlbSAiLWZwcmVmZXRjaC1sb29wLWFycmF5cyIKK0lmIHN1cHBvcnRlZCBieSB0aGUgdGFyZ2V0IG1hY2hpbmUsIGdlbmVyYXRlIGluc3RydWN0aW9ucyB0byBwcmVmZXRjaAorbWVtb3J5IHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIGxvb3BzIHRoYXQgYWNjZXNzIGxhcmdlIGFycmF5cy4KKy5TcAorVGhpcyBvcHRpb24gbWF5IGdlbmVyYXRlIGJldHRlciBvciB3b3JzZSBjb2RlOyByZXN1bHRzIGFyZSBoaWdobHkKK2RlcGVuZGVudCBvbiB0aGUgc3RydWN0dXJlIG9mIGxvb3BzIHdpdGhpbiB0aGUgc291cmNlIGNvZGUuCisuU3AKK0Rpc2FibGVkIGF0IGxldmVsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZm5vXC1wZWVwaG9sZVxmUiIgNAorLklYIEl0ZW0gIi1mbm8tcGVlcGhvbGUiCisuUEQgMAorLklQICJcZkJcLWZub1wtcGVlcGhvbGUyXGZSIiA0CisuSVggSXRlbSAiLWZuby1wZWVwaG9sZTIiCisuUEQKK0Rpc2FibGUgYW55IG1hY2hpbmUtc3BlY2lmaWMgcGVlcGhvbGUgb3B0aW1pemF0aW9ucy4gIFRoZSBkaWZmZXJlbmNlCitiZXR3ZWVuIFxmQlwtZm5vXC1wZWVwaG9sZVxmUiBhbmQgXGZCXC1mbm9cLXBlZXBob2xlMlxmUiBpcyBpbiBob3cgdGhleQorYXJlIGltcGxlbWVudGVkIGluIHRoZSBjb21waWxlcjsgc29tZSB0YXJnZXRzIHVzZSBvbmUsIHNvbWUgdXNlIHRoZQorb3RoZXIsIGEgZmV3IHVzZSBib3RoLgorLlNwCitcJlxmQlwtZnBlZXBob2xlXGZSIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KK1wmXGZCXC1mcGVlcGhvbGUyXGZSIGVuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZm5vXC1ndWVzc1wtYnJhbmNoXC1wcm9iYWJpbGl0eVxmUiIgNAorLklYIEl0ZW0gIi1mbm8tZ3Vlc3MtYnJhbmNoLXByb2JhYmlsaXR5IgorRG8gbm90IGd1ZXNzIGJyYW5jaCBwcm9iYWJpbGl0aWVzIHVzaW5nIGhldXJpc3RpY3MuCisuU3AKK1wmXHMtMUdDQ1xzMCB1c2VzIGhldXJpc3RpY3MgdG8gZ3Vlc3MgYnJhbmNoIHByb2JhYmlsaXRpZXMgaWYgdGhleSBhcmUKK25vdCBwcm92aWRlZCBieSBwcm9maWxpbmcgZmVlZGJhY2sgKFxmQlwtZnByb2ZpbGVcLWFyY3NcZlIpLiAgVGhlc2UKK2hldXJpc3RpY3MgYXJlIGJhc2VkIG9uIHRoZSBjb250cm9sIGZsb3cgZ3JhcGguICBJZiBzb21lIGJyYW5jaCBwcm9iYWJpbGl0aWVzCithcmUgc3BlY2lmaWVkIGJ5IFxmQl9cfF9idWlsdGluX2V4cGVjdFxmUiwgdGhlbiB0aGUgaGV1cmlzdGljcyBhcmUKK3VzZWQgdG8gZ3Vlc3MgYnJhbmNoIHByb2JhYmlsaXRpZXMgZm9yIHRoZSByZXN0IG9mIHRoZSBjb250cm9sIGZsb3cgZ3JhcGgsCit0YWtpbmcgdGhlIFxmQl9cfF9idWlsdGluX2V4cGVjdFxmUiBpbmZvIGludG8gYWNjb3VudC4gIFRoZSBpbnRlcmFjdGlvbnMKK2JldHdlZW4gdGhlIGhldXJpc3RpY3MgYW5kIFxmQl9cfF9idWlsdGluX2V4cGVjdFxmUiBjYW4gYmUgY29tcGxleCwgYW5kIGluCitzb21lIGNhc2VzLCBpdCBtYXkgYmUgdXNlZnVsIHRvIGRpc2FibGUgdGhlIGhldXJpc3RpY3Mgc28gdGhhdCB0aGUgZWZmZWN0cworb2YgXGZCX1x8X2J1aWx0aW5fZXhwZWN0XGZSIGFyZSBlYXNpZXIgdG8gdW5kZXJzdGFuZC4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mZ3Vlc3NcLWJyYW5jaFwtcHJvYmFiaWxpdHlcZlIgYXQgbGV2ZWxzCitcJlxmQlwtT1xmUiwgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mcmVvcmRlclwtYmxvY2tzXGZSIiA0CisuSVggSXRlbSAiLWZyZW9yZGVyLWJsb2NrcyIKK1Jlb3JkZXIgYmFzaWMgYmxvY2tzIGluIHRoZSBjb21waWxlZCBmdW5jdGlvbiBpbiBvcmRlciB0byByZWR1Y2UgbnVtYmVyIG9mCit0YWtlbiBicmFuY2hlcyBhbmQgaW1wcm92ZSBjb2RlIGxvY2FsaXR5LgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLgorLklQICJcZkJcLWZyZW9yZGVyXC1ibG9ja3NcLWFuZFwtcGFydGl0aW9uXGZSIiA0CisuSVggSXRlbSAiLWZyZW9yZGVyLWJsb2Nrcy1hbmQtcGFydGl0aW9uIgorSW4gYWRkaXRpb24gdG8gcmVvcmRlcmluZyBiYXNpYyBibG9ja3MgaW4gdGhlIGNvbXBpbGVkIGZ1bmN0aW9uLCBpbiBvcmRlcgordG8gcmVkdWNlIG51bWJlciBvZiB0YWtlbiBicmFuY2hlcywgcGFydGl0aW9ucyBob3QgYW5kIGNvbGQgYmFzaWMgYmxvY2tzCitpbnRvIHNlcGFyYXRlIHNlY3Rpb25zIG9mIHRoZSBhc3NlbWJseSBhbmQgLm8gZmlsZXMsIHRvIGltcHJvdmUKK3BhZ2luZyBhbmQgY2FjaGUgbG9jYWxpdHkgcGVyZm9ybWFuY2UuCisuU3AKK1RoaXMgb3B0aW1pemF0aW9uIGlzIGF1dG9tYXRpY2FsbHkgdHVybmVkIG9mZiBpbiB0aGUgcHJlc2VuY2Ugb2YKK2V4Y2VwdGlvbiBoYW5kbGluZywgZm9yIGxpbmtvbmNlIHNlY3Rpb25zLCBmb3IgZnVuY3Rpb25zIHdpdGggYSB1c2VyLWRlZmluZWQKK3NlY3Rpb24gYXR0cmlidXRlIGFuZCBvbiBhbnkgYXJjaGl0ZWN0dXJlIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBuYW1lZAorc2VjdGlvbnMuCisuSVAgIlxmQlwtZnJlb3JkZXJcLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mcmVvcmRlci1mdW5jdGlvbnMiCitSZW9yZGVyIGZ1bmN0aW9ucyBpbiB0aGUgb2JqZWN0IGZpbGUgaW4gb3JkZXIgdG8KK2ltcHJvdmUgY29kZSBsb2NhbGl0eS4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgdXNpbmcgc3BlY2lhbAorc3Vic2VjdGlvbnMgXGYoQ1dcKihDYC50ZXh0LmhvdFwqKEMnXGZSIGZvciBtb3N0IGZyZXF1ZW50bHkgZXhlY3V0ZWQgZnVuY3Rpb25zIGFuZAorXCZcZihDV1wqKENgLnRleHQudW5saWtlbHlcKihDJ1xmUiBmb3IgdW5saWtlbHkgZXhlY3V0ZWQgZnVuY3Rpb25zLiAgUmVvcmRlcmluZyBpcyBkb25lIGJ5Cit0aGUgbGlua2VyIHNvIG9iamVjdCBmaWxlIGZvcm1hdCBtdXN0IHN1cHBvcnQgbmFtZWQgc2VjdGlvbnMgYW5kIGxpbmtlciBtdXN0CitwbGFjZSB0aGVtIGluIGEgcmVhc29uYWJsZSB3YXkuCisuU3AKK0Fsc28gcHJvZmlsZSBmZWVkYmFjayBtdXN0IGJlIGF2YWlsYWJsZSB0byBtYWtlIHRoaXMgb3B0aW9uIGVmZmVjdGl2ZS4gIFNlZQorXCZcZkJcLWZwcm9maWxlXC1hcmNzXGZSIGZvciBkZXRhaWxzLgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZzdHJpY3RcLWFsaWFzaW5nXGZSIiA0CisuSVggSXRlbSAiLWZzdHJpY3QtYWxpYXNpbmciCitBbGxvdyB0aGUgY29tcGlsZXIgdG8gYXNzdW1lIHRoZSBzdHJpY3Rlc3QgYWxpYXNpbmcgcnVsZXMgYXBwbGljYWJsZSB0bwordGhlIGxhbmd1YWdlIGJlaW5nIGNvbXBpbGVkLiAgRm9yIEMgKGFuZCBcKihDKyksIHRoaXMgYWN0aXZhdGVzCitvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSB0eXBlIG9mIGV4cHJlc3Npb25zLiAgSW4gcGFydGljdWxhciwgYW4KK29iamVjdCBvZiBvbmUgdHlwZSBpcyBhc3N1bWVkIG5ldmVyIHRvIHJlc2lkZSBhdCB0aGUgc2FtZSBhZGRyZXNzIGFzIGFuCitvYmplY3Qgb2YgYSBkaWZmZXJlbnQgdHlwZSwgdW5sZXNzIHRoZSB0eXBlcyBhcmUgYWxtb3N0IHRoZSBzYW1lLiAgRm9yCitleGFtcGxlLCBhbiBcZihDV1wqKENgdW5zaWduZWQgaW50XCooQydcZlIgY2FuIGFsaWFzIGFuIFxmKENXXCooQ2BpbnRcKihDJ1xmUiwgYnV0IG5vdCBhCitcJlxmKENXXCooQ2B2b2lkKlwqKEMnXGZSIG9yIGEgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSLiAgQSBjaGFyYWN0ZXIgdHlwZSBtYXkgYWxpYXMgYW55IG90aGVyCit0eXBlLgorLlNwCitQYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gY29kZSBsaWtlIHRoaXM6CisuU3AKKy5WYiA0CitcJiAgICAgICAgdW5pb24gYV91bmlvbiB7CitcJiAgICAgICAgICBpbnQgaTsKK1wmICAgICAgICAgIGRvdWJsZSBkOworXCYgICAgICAgIH07CitcJiAgICAgICAgCitcJiAgICAgICAgaW50IGYoKSB7CitcJiAgICAgICAgICB1bmlvbiBhX3VuaW9uIHQ7CitcJiAgICAgICAgICB0LmQgPSAzLjA7CitcJiAgICAgICAgICByZXR1cm4gdC5pOworXCYgICAgICAgIH0KKy5WZQorLlNwCitUaGUgcHJhY3RpY2Ugb2YgcmVhZGluZyBmcm9tIGEgZGlmZmVyZW50IHVuaW9uIG1lbWJlciB0aGFuIHRoZSBvbmUgbW9zdAorcmVjZW50bHkgd3JpdHRlbiB0byAoY2FsbGVkIFwqKEwidHlwZS1wdW5uaW5nXCooUiIpIGlzIGNvbW1vbi4gIEV2ZW4gd2l0aAorXCZcZkJcLWZzdHJpY3RcLWFsaWFzaW5nXGZSLCB0eXBlLXB1bm5pbmcgaXMgYWxsb3dlZCwgcHJvdmlkZWQgdGhlIG1lbW9yeQoraXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgdW5pb24gdHlwZS4gIFNvLCB0aGUgY29kZSBhYm92ZSB3b3JrcyBhcworZXhwZWN0ZWQuICAgIEhvd2V2ZXIsIHRoaXMgY29kZSBtaWdodCBub3Q6CisuU3AKKy5WYiA3CitcJiAgICAgICAgaW50IGYoKSB7CitcJiAgICAgICAgICB1bmlvbiBhX3VuaW9uIHQ7CitcJiAgICAgICAgICBpbnQqIGlwOworXCYgICAgICAgICAgdC5kID0gMy4wOworXCYgICAgICAgICAgaXAgPSAmdC5pOworXCYgICAgICAgICAgcmV0dXJuICppcDsKK1wmICAgICAgICB9CisuVmUKKy5TcAorU2ltaWxhcmx5LCBhY2Nlc3MgYnkgdGFraW5nIHRoZSBhZGRyZXNzLCBjYXN0aW5nIHRoZSByZXN1bHRpbmcgcG9pbnRlcgorYW5kIGRlcmVmZXJlbmNpbmcgdGhlIHJlc3VsdCBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yLCBldmVuIGlmIHRoZSBjYXN0Cit1c2VzIGEgdW5pb24gdHlwZSwgZS5nLjoKKy5TcAorLlZiIDQKK1wmICAgICAgICBpbnQgZigpIHsKK1wmICAgICAgICAgIGRvdWJsZSBkID0gMy4wOworXCYgICAgICAgICAgcmV0dXJuICgodW5pb24gYV91bmlvbiAqKSAmZClcLT5pOworXCYgICAgICAgIH0KKy5WZQorLlNwCitUaGUgXGZCXC1mc3RyaWN0XC1hbGlhc2luZ1xmUiBvcHRpb24gaXMgZW5hYmxlZCBhdCBsZXZlbHMKK1wmXGZCXC1PMlxmUiwgXGZCXC1PM1xmUiwgXGZCXC1Pc1xmUi4KKy5JUCAiXGZCXC1mc3RyaWN0XC1vdmVyZmxvd1xmUiIgNAorLklYIEl0ZW0gIi1mc3RyaWN0LW92ZXJmbG93IgorQWxsb3cgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSBzdHJpY3Qgc2lnbmVkIG92ZXJmbG93IHJ1bGVzLCBkZXBlbmRpbmcKK29uIHRoZSBsYW5ndWFnZSBiZWluZyBjb21waWxlZC4gIEZvciBDIChhbmQgXCooQyspIHRoaXMgbWVhbnMgdGhhdAorb3ZlcmZsb3cgd2hlbiBkb2luZyBhcml0aG1ldGljIHdpdGggc2lnbmVkIG51bWJlcnMgaXMgdW5kZWZpbmVkLCB3aGljaAorbWVhbnMgdGhhdCB0aGUgY29tcGlsZXIgbWF5IGFzc3VtZSB0aGF0IGl0IGRvZXMgbm90IGhhcHBlbi4gIFRoaXMKK3Blcm1pdHMgdmFyaW91cyBvcHRpbWl6YXRpb25zLiAgRm9yIGV4YW1wbGUsIHRoZSBjb21waWxlciBhc3N1bWVzCit0aGF0IGFuIGV4cHJlc3Npb24gbGlrZSBcZihDV1wqKENgaSArIDEwID4gaVwqKEMnXGZSIGlzIGFsd2F5cyB0cnVlIGZvcgorc2lnbmVkIFxmKENXXCooQ2BpXCooQydcZlIuICBUaGlzIGFzc3VtcHRpb24gaXMgb25seSB2YWxpZCBpZiBzaWduZWQgb3ZlcmZsb3cgaXMKK3VuZGVmaW5lZCwgYXMgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgaWYgXGYoQ1dcKihDYGkgKyAxMFwqKEMnXGZSIG92ZXJmbG93cyB3aGVuCit1c2luZyB0d29zIGNvbXBsZW1lbnQgYXJpdGhtZXRpYy4gIFdoZW4gdGhpcyBvcHRpb24gaXMgaW4gZWZmZWN0IGFueQorYXR0ZW1wdCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvcGVyYXRpb24gb24gc2lnbmVkIG51bWJlcnMgCitvdmVyZmxvd3MgbXVzdCBiZSB3cml0dGVuIGNhcmVmdWxseSB0byBub3QgYWN0dWFsbHkgaW52b2x2ZSBvdmVyZmxvdy4KKy5TcAorVGhpcyBvcHRpb24gYWxzbyBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSBzdHJpY3QgcG9pbnRlcgorc2VtYW50aWNzOiBnaXZlbiBhIHBvaW50ZXIgdG8gYW4gb2JqZWN0LCBpZiBhZGRpbmcgYW4gb2Zmc2V0IHRvIHRoYXQKK3BvaW50ZXIgZG9lcyBub3QgcHJvZHVjZSBhIHBvaW50ZXIgdG8gdGhlIHNhbWUgb2JqZWN0LCB0aGUgYWRkaXRpb24gaXMKK3VuZGVmaW5lZC4gIFRoaXMgcGVybWl0cyB0aGUgY29tcGlsZXIgdG8gY29uY2x1ZGUgdGhhdCBcZihDV1wqKENgcCArIHUgPgorcFwqKEMnXGZSIGlzIGFsd2F5cyB0cnVlIGZvciBhIHBvaW50ZXIgXGYoQ1dcKihDYHBcKihDJ1xmUiBhbmQgdW5zaWduZWQgaW50ZWdlcgorXCZcZihDV1wqKENgdVwqKEMnXGZSLiAgVGhpcyBhc3N1bXB0aW9uIGlzIG9ubHkgdmFsaWQgYmVjYXVzZSBwb2ludGVyIHdyYXBhcm91bmQgaXMKK3VuZGVmaW5lZCwgYXMgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgaWYgXGYoQ1dcKihDYHAgKyB1XCooQydcZlIgb3ZlcmZsb3dzIHVzaW5nCit0d29zIGNvbXBsZW1lbnQgYXJpdGhtZXRpYy4KKy5TcAorU2VlIGFsc28gdGhlIFxmQlwtZndyYXB2XGZSIG9wdGlvbi4gIFVzaW5nIFxmQlwtZndyYXB2XGZSIG1lYW5zCit0aGF0IGludGVnZXIgc2lnbmVkIG92ZXJmbG93IGlzIGZ1bGx5IGRlZmluZWQ6IGl0IHdyYXBzLiAgV2hlbgorXCZcZkJcLWZ3cmFwdlxmUiBpcyB1c2VkLCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4KK1wmXGZCXC1mc3RyaWN0XC1vdmVyZmxvd1xmUiBhbmQgXGZCXC1mbm9cLXN0cmljdFwtb3ZlcmZsb3dcZlIgZm9yCitpbnRlZ2Vycy4gIFdpdGggXGZCXC1md3JhcHZcZlIgY2VydGFpbiB0eXBlcyBvZiBvdmVyZmxvdyBhcmUKK3Blcm1pdHRlZC4gIEZvciBleGFtcGxlLCBpZiB0aGUgY29tcGlsZXIgZ2V0cyBhbiBvdmVyZmxvdyB3aGVuIGRvaW5nCithcml0aG1ldGljIG9uIGNvbnN0YW50cywgdGhlIG92ZXJmbG93ZWQgdmFsdWUgY2FuIHN0aWxsIGJlIHVzZWQgd2l0aAorXCZcZkJcLWZ3cmFwdlxmUiwgYnV0IG5vdCBvdGhlcndpc2UuCisuU3AKK1RoZSBcZkJcLWZzdHJpY3RcLW92ZXJmbG93XGZSIG9wdGlvbiBpcyBlbmFibGVkIGF0IGxldmVscworXCZcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZhbGlnblwtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLWZhbGlnbi1mdW5jdGlvbnMiCisuUEQgMAorLklQICJcZkJcLWZhbGlnblwtZnVuY3Rpb25zPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZmFsaWduLWZ1bmN0aW9ucz1uIgorLlBECitBbGlnbiB0aGUgc3RhcnQgb2YgZnVuY3Rpb25zIHRvIHRoZSBuZXh0IHBvd2VyLW9mLXR3byBncmVhdGVyIHRoYW4KK1wmXGZJblxmUiwgc2tpcHBpbmcgdXAgdG8gXGZJblxmUiBieXRlcy4gIEZvciBpbnN0YW5jZSwKK1wmXGZCXC1mYWxpZ25cLWZ1bmN0aW9ucz0zMlxmUiBhbGlnbnMgZnVuY3Rpb25zIHRvIHRoZSBuZXh0IDMyXC1ieXRlCitib3VuZGFyeSwgYnV0IFxmQlwtZmFsaWduXC1mdW5jdGlvbnM9MjRcZlIgYWxpZ25zIHRvIHRoZSBuZXh0CiszMlwtYnl0ZSBib3VuZGFyeSBvbmx5IGlmIHRoaXMgY2FuIGJlIGRvbmUgYnkgc2tpcHBpbmcgMjMgYnl0ZXMgb3IgbGVzcy4KKy5TcAorXCZcZkJcLWZub1wtYWxpZ25cLWZ1bmN0aW9uc1xmUiBhbmQgXGZCXC1mYWxpZ25cLWZ1bmN0aW9ucz0xXGZSIGFyZQorZXF1aXZhbGVudCBhbmQgbWVhbiB0aGF0IGZ1bmN0aW9ucyBhcmUgbm90IGFsaWduZWQuCisuU3AKK1NvbWUgYXNzZW1ibGVycyBvbmx5IHN1cHBvcnQgdGhpcyBmbGFnIHdoZW4gXGZJblxmUiBpcyBhIHBvd2VyIG9mIHR3bzsKK2luIHRoYXQgY2FzZSwgaXQgaXMgcm91bmRlZCB1cC4KKy5TcAorSWYgXGZJblxmUiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHplcm8sIHVzZSBhIG1hY2hpbmUtZGVwZW5kZW50IGRlZmF1bHQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZmFsaWduXC1sYWJlbHNcZlIiIDQKKy5JWCBJdGVtICItZmFsaWduLWxhYmVscyIKKy5QRCAwCisuSVAgIlxmQlwtZmFsaWduXC1sYWJlbHM9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mYWxpZ24tbGFiZWxzPW4iCisuUEQKK0FsaWduIGFsbCBicmFuY2ggdGFyZ2V0cyB0byBhIHBvd2VyLW9mLXR3byBib3VuZGFyeSwgc2tpcHBpbmcgdXAgdG8KK1wmXGZJblxmUiBieXRlcyBsaWtlIFxmQlwtZmFsaWduXC1mdW5jdGlvbnNcZlIuICBUaGlzIG9wdGlvbiBjYW4gZWFzaWx5CittYWtlIGNvZGUgc2xvd2VyLCBiZWNhdXNlIGl0IG11c3QgaW5zZXJ0IGR1bW15IG9wZXJhdGlvbnMgZm9yIHdoZW4gdGhlCiticmFuY2ggdGFyZ2V0IGlzIHJlYWNoZWQgaW4gdGhlIHVzdWFsIGZsb3cgb2YgdGhlIGNvZGUuCisuU3AKK1wmXGZCXC1mbm9cLWFsaWduXC1sYWJlbHNcZlIgYW5kIFxmQlwtZmFsaWduXC1sYWJlbHM9MVxmUiBhcmUKK2VxdWl2YWxlbnQgYW5kIG1lYW4gdGhhdCBsYWJlbHMgYXJlIG5vdCBhbGlnbmVkLgorLlNwCitJZiBcZkJcLWZhbGlnblwtbG9vcHNcZlIgb3IgXGZCXC1mYWxpZ25cLWp1bXBzXGZSIGFyZSBhcHBsaWNhYmxlIGFuZAorYXJlIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCB0aGVuIHRoZWlyIHZhbHVlcyBhcmUgdXNlZCBpbnN0ZWFkLgorLlNwCitJZiBcZkluXGZSIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgemVybywgdXNlIGEgbWFjaGluZS1kZXBlbmRlbnQgZGVmYXVsdAord2hpY2ggaXMgdmVyeSBsaWtlbHkgdG8gYmUgXGZCMVxmUiwgbWVhbmluZyBubyBhbGlnbm1lbnQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZmFsaWduXC1sb29wc1xmUiIgNAorLklYIEl0ZW0gIi1mYWxpZ24tbG9vcHMiCisuUEQgMAorLklQICJcZkJcLWZhbGlnblwtbG9vcHM9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mYWxpZ24tbG9vcHM9biIKKy5QRAorQWxpZ24gbG9vcHMgdG8gYSBwb3dlci1vZi10d28gYm91bmRhcnksIHNraXBwaW5nIHVwIHRvIFxmSW5cZlIgYnl0ZXMKK2xpa2UgXGZCXC1mYWxpZ25cLWZ1bmN0aW9uc1xmUi4gIElmIHRoZSBsb29wcyBhcmUKK2V4ZWN1dGVkIG1hbnkgdGltZXMsIHRoaXMgbWFrZXMgdXAgZm9yIGFueSBleGVjdXRpb24gb2YgdGhlIGR1bW15CitvcGVyYXRpb25zLgorLlNwCitcJlxmQlwtZm5vXC1hbGlnblwtbG9vcHNcZlIgYW5kIFxmQlwtZmFsaWduXC1sb29wcz0xXGZSIGFyZQorZXF1aXZhbGVudCBhbmQgbWVhbiB0aGF0IGxvb3BzIGFyZSBub3QgYWxpZ25lZC4KKy5TcAorSWYgXGZJblxmUiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHplcm8sIHVzZSBhIG1hY2hpbmUtZGVwZW5kZW50IGRlZmF1bHQuCisuU3AKK0VuYWJsZWQgYXQgbGV2ZWxzIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIuCisuSVAgIlxmQlwtZmFsaWduXC1qdW1wc1xmUiIgNAorLklYIEl0ZW0gIi1mYWxpZ24tanVtcHMiCisuUEQgMAorLklQICJcZkJcLWZhbGlnblwtanVtcHM9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mYWxpZ24tanVtcHM9biIKKy5QRAorQWxpZ24gYnJhbmNoIHRhcmdldHMgdG8gYSBwb3dlci1vZi10d28gYm91bmRhcnksIGZvciBicmFuY2ggdGFyZ2V0cword2hlcmUgdGhlIHRhcmdldHMgY2FuIG9ubHkgYmUgcmVhY2hlZCBieSBqdW1waW5nLCBza2lwcGluZyB1cCB0byBcZkluXGZSCitieXRlcyBsaWtlIFxmQlwtZmFsaWduXC1mdW5jdGlvbnNcZlIuICBJbiB0aGlzIGNhc2UsIG5vIGR1bW15IG9wZXJhdGlvbnMKK25lZWQgYmUgZXhlY3V0ZWQuCisuU3AKK1wmXGZCXC1mbm9cLWFsaWduXC1qdW1wc1xmUiBhbmQgXGZCXC1mYWxpZ25cLWp1bXBzPTFcZlIgYXJlCitlcXVpdmFsZW50IGFuZCBtZWFuIHRoYXQgbG9vcHMgYXJlIG5vdCBhbGlnbmVkLgorLlNwCitJZiBcZkluXGZSIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgemVybywgdXNlIGEgbWFjaGluZS1kZXBlbmRlbnQgZGVmYXVsdC4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PMlxmUiwgXGZCXC1PM1xmUi4KKy5JUCAiXGZCXC1mdW5pdFwtYXRcLWFcLXRpbWVcZlIiIDQKKy5JWCBJdGVtICItZnVuaXQtYXQtYS10aW1lIgorVGhpcyBvcHRpb24gaXMgbGVmdCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBcZkJcLWZ1bml0XC1hdFwtYVwtdGltZVxmUgoraGFzIG5vIGVmZmVjdCwgd2hpbGUgXGZCXC1mbm9cLXVuaXRcLWF0XC1hXC10aW1lXGZSIGltcGxpZXMKK1wmXGZCXC1mbm9cLXRvcGxldmVsXC1yZW9yZGVyXGZSIGFuZCBcZkJcLWZub1wtc2VjdGlvblwtYW5jaG9yc1xmUi4KKy5TcAorRW5hYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLWZub1wtdG9wbGV2ZWxcLXJlb3JkZXJcZlIiIDQKKy5JWCBJdGVtICItZm5vLXRvcGxldmVsLXJlb3JkZXIiCitEbyBub3QgcmVvcmRlciB0b3AtbGV2ZWwgZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGFuZCBcZihDV1wqKENgYXNtXCooQydcZlIKK3N0YXRlbWVudHMuICBPdXRwdXQgdGhlbSBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXBwZWFyIGluIHRoZQoraW5wdXQgZmlsZS4gIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgdW5yZWZlcmVuY2VkIHN0YXRpYyB2YXJpYWJsZXMKK2FyZSBub3QgcmVtb3ZlZC4gIFRoaXMgb3B0aW9uIGlzIGludGVuZGVkIHRvIHN1cHBvcnQgZXhpc3RpbmcgY29kZQordGhhdCByZWxpZXMgb24gYSBwYXJ0aWN1bGFyIG9yZGVyaW5nLiAgRm9yIG5ldyBjb2RlLCBpdCBpcyBiZXR0ZXIgdG8KK3VzZSBhdHRyaWJ1dGVzLgorLlNwCitFbmFibGVkIGF0IGxldmVsIFxmQlwtTzBcZlIuICBXaGVuIGRpc2FibGVkIGV4cGxpY2l0bHksIGl0IGFsc28gaW1wbGllcworXCZcZkJcLWZub1wtc2VjdGlvblwtYW5jaG9yc1xmUiwgd2hpY2ggaXMgb3RoZXJ3aXNlIGVuYWJsZWQgYXQgXGZCXC1PMFxmUiBvbiBzb21lCit0YXJnZXRzLgorLklQICJcZkJcLWZ3ZWJcZlIiIDQKKy5JWCBJdGVtICItZndlYiIKK0NvbnN0cnVjdHMgd2VicyBhcyBjb21tb25seSB1c2VkIGZvciByZWdpc3RlciBhbGxvY2F0aW9uIHB1cnBvc2VzIGFuZCBhc3NpZ24KK2VhY2ggd2ViIGluZGl2aWR1YWwgcHNldWRvIHJlZ2lzdGVyLiAgVGhpcyBhbGxvd3MgdGhlIHJlZ2lzdGVyIGFsbG9jYXRpb24gcGFzcwordG8gb3BlcmF0ZSBvbiBwc2V1ZG9zIGRpcmVjdGx5LCBidXQgYWxzbyBzdHJlbmd0aGVucyBzZXZlcmFsIG90aGVyIG9wdGltaXphdGlvbgorcGFzc2VzLCBzdWNoIGFzIFxzLTFDU0VcczAsIGxvb3Agb3B0aW1pemVyIGFuZCB0cml2aWFsIGRlYWQgY29kZSByZW1vdmVyLiAgSXQgY2FuLAoraG93ZXZlciwgbWFrZSBkZWJ1Z2dpbmcgaW1wb3NzaWJsZSwgc2luY2UgdmFyaWFibGVzIG5vIGxvbmdlciBzdGF5IGluIGEKK1wmXCooTCJob21lIHJlZ2lzdGVyXCooUiIuCisuU3AKK0VuYWJsZWQgYnkgZGVmYXVsdCB3aXRoIFxmQlwtZnVucm9sbFwtbG9vcHNcZlIuCisuSVAgIlxmQlwtZndob2xlXC1wcm9ncmFtXGZSIiA0CisuSVggSXRlbSAiLWZ3aG9sZS1wcm9ncmFtIgorQXNzdW1lIHRoYXQgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCByZXByZXNlbnRzIHRoZSB3aG9sZSBwcm9ncmFtIGJlaW5nCitjb21waWxlZC4gIEFsbCBwdWJsaWMgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIFxmKENXXCooQ2BtYWluXCooQydcZlIKK2FuZCB0aG9zZSBtZXJnZWQgYnkgYXR0cmlidXRlIFxmKENXXCooQ2BleHRlcm5hbGx5X3Zpc2libGVcKihDJ1xmUiBiZWNvbWUgc3RhdGljIGZ1bmN0aW9ucworYW5kIGluIGVmZmVjdCBhcmUgb3B0aW1pemVkIG1vcmUgYWdncmVzc2l2ZWx5IGJ5IGludGVycHJvY2VkdXJhbCBvcHRpbWl6ZXJzLgorLlNwCitUaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBcZihDV1wqKENgXC1mbHRvXCooQydcZlIuCitJbnN0ZWFkIHJlbHlpbmcgb24gYSBsaW5rZXIgcGx1Z2luIHNob3VsZCBwcm92aWRlIHNhZmVyIGFuZCBtb3JlIHByZWNpc2UKK2luZm9ybWF0aW9uLgorLklQICJcZkJcLWZsdG9bPVxmUlxmSW5cZlJcZkJdXGZSIiA0CisuSVggSXRlbSAiLWZsdG9bPW5dIgorVGhpcyBvcHRpb24gcnVucyB0aGUgc3RhbmRhcmQgbGluay10aW1lIG9wdGltaXplci4gIFdoZW4gaW52b2tlZAord2l0aCBzb3VyY2UgY29kZSwgaXQgZ2VuZXJhdGVzIFxzLTFHSU1QTEVcczAgKG9uZSBvZiBccy0xR0NDXHMwJ3MgaW50ZXJuYWwKK3JlcHJlc2VudGF0aW9ucykgYW5kIHdyaXRlcyBpdCB0byBzcGVjaWFsIFxzLTFFTEZcczAgc2VjdGlvbnMgaW4gdGhlIG9iamVjdAorZmlsZS4gIFdoZW4gdGhlIG9iamVjdCBmaWxlcyBhcmUgbGlua2VkIHRvZ2V0aGVyLCBhbGwgdGhlIGZ1bmN0aW9uCitib2RpZXMgYXJlIHJlYWQgZnJvbSB0aGVzZSBccy0xRUxGXHMwIHNlY3Rpb25zIGFuZCBpbnN0YW50aWF0ZWQgYXMgaWYgdGhleQoraGFkIGJlZW4gcGFydCBvZiB0aGUgc2FtZSB0cmFuc2xhdGlvbiB1bml0LgorLlNwCitUbyB1c2UgdGhlIGxpbmstdGltZSBvcHRpbWl6ZXIsIFxmQlwtZmx0b1xmUiBuZWVkcyB0byBiZSBzcGVjaWZpZWQgYXQKK2NvbXBpbGUgdGltZSBhbmQgZHVyaW5nIHRoZSBmaW5hbCBsaW5rLiAgRm9yIGV4YW1wbGU6CisuU3AKKy5WYiAzCitcJiAgICAgICAgZ2NjIFwtYyBcLU8yIFwtZmx0byBmb28uYworXCYgICAgICAgIGdjYyBcLWMgXC1PMiBcLWZsdG8gYmFyLmMKK1wmICAgICAgICBnY2MgXC1vIG15cHJvZyBcLWZsdG8gXC1PMiBmb28ubyBiYXIubworLlZlCisuU3AKK1RoZSBmaXJzdCB0d28gaW52b2NhdGlvbnMgdG8gXHMtMUdDQ1xzMCBzYXZlIGEgYnl0ZWNvZGUgcmVwcmVzZW50YXRpb24KK29mIFxzLTFHSU1QTEVcczAgaW50byBzcGVjaWFsIFxzLTFFTEZcczAgc2VjdGlvbnMgaW5zaWRlIFxmSWZvby5vXGZSIGFuZAorXCZcZkliYXIub1xmUi4gIFRoZSBmaW5hbCBpbnZvY2F0aW9uIHJlYWRzIHRoZSBccy0xR0lNUExFXHMwIGJ5dGVjb2RlIGZyb20KK1wmXGZJZm9vLm9cZlIgYW5kIFxmSWJhci5vXGZSLCBtZXJnZXMgdGhlIHR3byBmaWxlcyBpbnRvIGEgc2luZ2xlCitpbnRlcm5hbCBpbWFnZSwgYW5kIGNvbXBpbGVzIHRoZSByZXN1bHQgYXMgdXN1YWwuICBTaW5jZSBib3RoCitcJlxmSWZvby5vXGZSIGFuZCBcZkliYXIub1xmUiBhcmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgaW1hZ2UsIHRoaXMKK2NhdXNlcyBhbGwgdGhlIGludGVycHJvY2VkdXJhbCBhbmFseXNlcyBhbmQgb3B0aW1pemF0aW9ucyBpbiBccy0xR0NDXHMwIHRvCit3b3JrIGFjcm9zcyB0aGUgdHdvIGZpbGVzIGFzIGlmIHRoZXkgd2VyZSBhIHNpbmdsZSBvbmUuICBUaGlzIG1lYW5zLAorZm9yIGV4YW1wbGUsIHRoYXQgdGhlIGlubGluZXIgaXMgYWJsZSB0byBpbmxpbmUgZnVuY3Rpb25zIGluCitcJlxmSWJhci5vXGZSIGludG8gZnVuY3Rpb25zIGluIFxmSWZvby5vXGZSIGFuZCB2aWNlLXZlcnNhLgorLlNwCitBbm90aGVyIChzaW1wbGVyKSB3YXkgdG8gZW5hYmxlIGxpbmstdGltZSBvcHRpbWl6YXRpb24gaXM6CisuU3AKKy5WYiAxCitcJiAgICAgICAgZ2NjIFwtbyBteXByb2cgXC1mbHRvIFwtTzIgZm9vLmMgYmFyLmMKKy5WZQorLlNwCitUaGUgYWJvdmUgZ2VuZXJhdGVzIGJ5dGVjb2RlIGZvciBcZklmb28uY1xmUiBhbmQgXGZJYmFyLmNcZlIsCittZXJnZXMgdGhlbSB0b2dldGhlciBpbnRvIGEgc2luZ2xlIFxzLTFHSU1QTEVcczAgcmVwcmVzZW50YXRpb24gYW5kIG9wdGltaXplcwordGhlbSBhcyB1c3VhbCB0byBwcm9kdWNlIFxmSW15cHJvZ1xmUi4KKy5TcAorVGhlIG9ubHkgaW1wb3J0YW50IHRoaW5nIHRvIGtlZXAgaW4gbWluZCBpcyB0aGF0IHRvIGVuYWJsZSBsaW5rLXRpbWUKK29wdGltaXphdGlvbnMgdGhlIFxmQlwtZmx0b1xmUiBmbGFnIG5lZWRzIHRvIGJlIHBhc3NlZCB0byBib3RoIHRoZQorY29tcGlsZSBhbmQgdGhlIGxpbmsgY29tbWFuZHMuCisuU3AKK1RvIG1ha2Ugd2hvbGUgcHJvZ3JhbSBvcHRpbWl6YXRpb24gZWZmZWN0aXZlLCBpdCBpcyBuZWNlc3NhcnkgdG8gbWFrZQorY2VydGFpbiB3aG9sZSBwcm9ncmFtIGFzc3VtcHRpb25zLiAgVGhlIGNvbXBpbGVyIG5lZWRzIHRvIGtub3cKK3doYXQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IGxpYnJhcmllcyBhbmQgcnVudGltZQorb3V0c2lkZSBvZiB0aGUgbGluay10aW1lIG9wdGltaXplZCB1bml0LiAgV2hlbiBzdXBwb3J0ZWQgYnkgdGhlIGxpbmtlciwKK3RoZSBsaW5rZXIgcGx1Z2luIChzZWUgXGZCXC1mdXNlXC1saW5rZXJcLXBsdWdpblxmUikgcGFzc2VzIGluZm9ybWF0aW9uCit0byB0aGUgY29tcGlsZXIgYWJvdXQgdXNlZCBhbmQgZXh0ZXJuYWxseSB2aXNpYmxlIHN5bWJvbHMuICBXaGVuCit0aGUgbGlua2VyIHBsdWdpbiBpcyBub3QgYXZhaWxhYmxlLCBcZkJcLWZ3aG9sZVwtcHJvZ3JhbVxmUiBzaG91bGQgYmUKK3VzZWQgdG8gYWxsb3cgdGhlIGNvbXBpbGVyIHRvIG1ha2UgdGhlc2UgYXNzdW1wdGlvbnMsIHdoaWNoIGxlYWRzCit0byBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uIGRlY2lzaW9ucy4KKy5TcAorTm90ZSB0aGF0IHdoZW4gYSBmaWxlIGlzIGNvbXBpbGVkIHdpdGggXGZCXC1mbHRvXGZSLCB0aGUgZ2VuZXJhdGVkCitvYmplY3QgZmlsZSBpcyBsYXJnZXIgdGhhbiBhIHJlZ3VsYXIgb2JqZWN0IGZpbGUgYmVjYXVzZSBpdCAKK2NvbnRhaW5zIFxzLTFHSU1QTEVcczAgYnl0ZWNvZGVzIGFuZCB0aGUgdXN1YWwgZmluYWwgY29kZS4gIFRoaXMgbWVhbnMgdGhhdAorb2JqZWN0IGZpbGVzIHdpdGggXHMtMUxUT1xzMCBpbmZvcm1hdGlvbiBjYW4gYmUgbGlua2VkIGFzIG5vcm1hbCBvYmplY3QKK2ZpbGVzOyBpZiBcZkJcLWZsdG9cZlIgaXMgbm90IHBhc3NlZCB0byB0aGUgbGlua2VyLCBubworaW50ZXJwcm9jZWR1cmFsIG9wdGltaXphdGlvbnMgYXJlIGFwcGxpZWQuCisuU3AKK0FkZGl0aW9uYWxseSwgdGhlIG9wdGltaXphdGlvbiBmbGFncyB1c2VkIHRvIGNvbXBpbGUgaW5kaXZpZHVhbCBmaWxlcworYXJlIG5vdCBuZWNlc3NhcmlseSByZWxhdGVkIHRvIHRob3NlIHVzZWQgYXQgbGluayB0aW1lLiAgRm9yIGluc3RhbmNlLAorLlNwCisuVmIgMworXCYgICAgICAgIGdjYyBcLWMgXC1PMCBcLWZsdG8gZm9vLmMKK1wmICAgICAgICBnY2MgXC1jIFwtTzAgXC1mbHRvIGJhci5jCitcJiAgICAgICAgZ2NjIFwtbyBteXByb2cgXC1mbHRvIFwtTzMgZm9vLm8gYmFyLm8KKy5WZQorLlNwCitUaGlzIHByb2R1Y2VzIGluZGl2aWR1YWwgb2JqZWN0IGZpbGVzIHdpdGggdW5vcHRpbWl6ZWQgYXNzZW1ibGVyCitjb2RlLCBidXQgdGhlIHJlc3VsdGluZyBiaW5hcnkgXGZJbXlwcm9nXGZSIGlzIG9wdGltaXplZCBhdAorXCZcZkJcLU8zXGZSLiAgSWYsIGluc3RlYWQsIHRoZSBmaW5hbCBiaW5hcnkgaXMgZ2VuZXJhdGVkIHdpdGhvdXQKK1wmXGZCXC1mbHRvXGZSLCB0aGVuIFxmSW15cHJvZ1xmUiBpcyBub3Qgb3B0aW1pemVkLgorLlNwCitXaGVuIHByb2R1Y2luZyB0aGUgZmluYWwgYmluYXJ5IHdpdGggXGZCXC1mbHRvXGZSLCBccy0xR0NDXHMwIG9ubHkKK2FwcGxpZXMgbGluay10aW1lIG9wdGltaXphdGlvbnMgdG8gdGhvc2UgZmlsZXMgdGhhdCBjb250YWluIGJ5dGVjb2RlLgorVGhlcmVmb3JlLCB5b3UgY2FuIG1peCBhbmQgbWF0Y2ggb2JqZWN0IGZpbGVzIGFuZCBsaWJyYXJpZXMgd2l0aAorXCZccy0xR0lNUExFXHMwIGJ5dGVjb2RlcyBhbmQgZmluYWwgb2JqZWN0IGNvZGUuICBccy0xR0NDXHMwIGF1dG9tYXRpY2FsbHkgc2VsZWN0cword2hpY2ggZmlsZXMgdG8gb3B0aW1pemUgaW4gXHMtMUxUT1xzMCBtb2RlIGFuZCB3aGljaCBmaWxlcyB0byBsaW5rIHdpdGhvdXQKK2Z1cnRoZXIgcHJvY2Vzc2luZy4KKy5TcAorVGhlcmUgYXJlIHNvbWUgY29kZSBnZW5lcmF0aW9uIGZsYWdzIHByZXNlcnZlZCBieSBccy0xR0NDXHMwIHdoZW4KK2dlbmVyYXRpbmcgYnl0ZWNvZGVzLCBhcyB0aGV5IG5lZWQgdG8gYmUgdXNlZCBkdXJpbmcgdGhlIGZpbmFsIGxpbmsKK3N0YWdlLiAgQ3VycmVudGx5LCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNhdmVkIGludG8gdGhlIFxzLTFHSU1QTEVcczAKK2J5dGVjb2RlIGZpbGVzOiBcZkJcLWZQSUNcZlIsIFxmQlwtZmNvbW1vblxmUiBhbmQgYWxsIHRoZQorXCZcZkJcLW1cZlIgdGFyZ2V0IGZsYWdzLgorLlNwCitBdCBsaW5rIHRpbWUsIHRoZXNlIG9wdGlvbnMgYXJlIHJlYWQgaW4gYW5kIHJlYXBwbGllZC4gIE5vdGUgdGhhdCB0aGUKK2N1cnJlbnQgaW1wbGVtZW50YXRpb24gbWFrZXMgbm8gYXR0ZW1wdCB0byByZWNvZ25pemUgY29uZmxpY3RpbmcKK3ZhbHVlcyBmb3IgdGhlc2Ugb3B0aW9ucy4gIElmIGRpZmZlcmVudCBmaWxlcyBoYXZlIGNvbmZsaWN0aW5nIG9wdGlvbgordmFsdWVzIChlLmcuLCBvbmUgZmlsZSBpcyBjb21waWxlZCB3aXRoIFxmQlwtZlBJQ1xmUiBhbmQgYW5vdGhlcgoraXNuJ3QpLCB0aGUgY29tcGlsZXIgc2ltcGx5IHVzZXMgdGhlIGxhc3QgdmFsdWUgcmVhZCBmcm9tIHRoZQorYnl0ZWNvZGUgZmlsZXMuICBJdCBpcyByZWNvbW1lbmRlZCwgdGhlbiwgdGhhdCB5b3UgY29tcGlsZSBhbGwgdGhlIGZpbGVzCitwYXJ0aWNpcGF0aW5nIGluIHRoZSBzYW1lIGxpbmsgd2l0aCB0aGUgc2FtZSBvcHRpb25zLgorLlNwCitJZiBccy0xTFRPXHMwIGVuY291bnRlcnMgb2JqZWN0cyB3aXRoIEMgbGlua2FnZSBkZWNsYXJlZCB3aXRoIGluY29tcGF0aWJsZQordHlwZXMgaW4gc2VwYXJhdGUgdHJhbnNsYXRpb24gdW5pdHMgdG8gYmUgbGlua2VkIHRvZ2V0aGVyICh1bmRlZmluZWQKK2JlaGF2aW9yIGFjY29yZGluZyB0byBccy0xSVNPXHMwIEM5OSA2LjIuNyksIGEgbm9uLWZhdGFsIGRpYWdub3N0aWMgbWF5IGJlCitpc3N1ZWQuICBUaGUgYmVoYXZpb3IgaXMgc3RpbGwgdW5kZWZpbmVkIGF0IHJ1biB0aW1lLgorLlNwCitBbm90aGVyIGZlYXR1cmUgb2YgXHMtMUxUT1xzMCBpcyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGFwcGx5IGludGVycHJvY2VkdXJhbAorb3B0aW1pemF0aW9ucyBvbiBmaWxlcyB3cml0dGVuIGluIGRpZmZlcmVudCBsYW5ndWFnZXMuICBUaGlzIHJlcXVpcmVzCitzdXBwb3J0IGluIHRoZSBsYW5ndWFnZSBmcm9udCBlbmQuICBDdXJyZW50bHksIHRoZSBDLCBcKihDKyBhbmQKK0ZvcnRyYW4gZnJvbnQgZW5kcyBhcmUgY2FwYWJsZSBvZiBlbWl0dGluZyBccy0xR0lNUExFXHMwIGJ5dGVjb2Rlcywgc28KK3NvbWV0aGluZyBsaWtlIHRoaXMgc2hvdWxkIHdvcms6CisuU3AKKy5WYiA0CitcJiAgICAgICAgZ2NjIFwtYyBcLWZsdG8gZm9vLmMKK1wmICAgICAgICBnKysgXC1jIFwtZmx0byBiYXIuY2MKK1wmICAgICAgICBnZm9ydHJhbiBcLWMgXC1mbHRvIGJhei5mOTAKK1wmICAgICAgICBnKysgXC1vIG15cHJvZyBcLWZsdG8gXC1PMyBmb28ubyBiYXIubyBiYXoubyBcLWxnZm9ydHJhbgorLlZlCisuU3AKK05vdGljZSB0aGF0IHRoZSBmaW5hbCBsaW5rIGlzIGRvbmUgd2l0aCBcZkJnKytcZlIgdG8gZ2V0IHRoZSBcKihDKworcnVudGltZSBsaWJyYXJpZXMgYW5kIFxmQlwtbGdmb3J0cmFuXGZSIGlzIGFkZGVkIHRvIGdldCB0aGUgRm9ydHJhbgorcnVudGltZSBsaWJyYXJpZXMuICBJbiBnZW5lcmFsLCB3aGVuIG1peGluZyBsYW5ndWFnZXMgaW4gXHMtMUxUT1xzMCBtb2RlLCB5b3UKK3Nob3VsZCB1c2UgdGhlIHNhbWUgbGluayBjb21tYW5kIG9wdGlvbnMgYXMgd2hlbiBtaXhpbmcgbGFuZ3VhZ2VzIGluIGEKK3JlZ3VsYXIgKG5vbi1MVE8pIGNvbXBpbGF0aW9uOyBhbGwgeW91IG5lZWQgdG8gYWRkIGlzIFxmQlwtZmx0b1xmUiB0bworYWxsIHRoZSBjb21waWxlIGFuZCBsaW5rIGNvbW1hbmRzLgorLlNwCitJZiBvYmplY3QgZmlsZXMgY29udGFpbmluZyBccy0xR0lNUExFXHMwIGJ5dGVjb2RlIGFyZSBzdG9yZWQgaW4gYSBsaWJyYXJ5IGFyY2hpdmUsIHNheQorXCZcZklsaWJmb28uYVxmUiwgaXQgaXMgcG9zc2libGUgdG8gZXh0cmFjdCBhbmQgdXNlIHRoZW0gaW4gYW4gXHMtMUxUT1xzMCBsaW5rIGlmIHlvdQorYXJlIHVzaW5nIGEgbGlua2VyIHdpdGggcGx1Z2luIHN1cHBvcnQuICBUbyBlbmFibGUgdGhpcyBmZWF0dXJlLCB1c2UKK3RoZSBmbGFnIFxmQlwtZnVzZVwtbGlua2VyXC1wbHVnaW5cZlIgYXQgbGluayB0aW1lOgorLlNwCisuVmIgMQorXCYgICAgICAgIGdjYyBcLW8gbXlwcm9nIFwtTzIgXC1mbHRvIFwtZnVzZVwtbGlua2VyXC1wbHVnaW4gYS5vIGIubyBcLWxmb28KKy5WZQorLlNwCitXaXRoIHRoZSBsaW5rZXIgcGx1Z2luIGVuYWJsZWQsIHRoZSBsaW5rZXIgZXh0cmFjdHMgdGhlIG5lZWRlZAorXCZccy0xR0lNUExFXHMwIGZpbGVzIGZyb20gXGZJbGliZm9vLmFcZlIgYW5kIHBhc3NlcyB0aGVtIG9uIHRvIHRoZSBydW5uaW5nIFxzLTFHQ0NcczAKK3RvIG1ha2UgdGhlbSBwYXJ0IG9mIHRoZSBhZ2dyZWdhdGVkIFxzLTFHSU1QTEVcczAgaW1hZ2UgdG8gYmUgb3B0aW1pemVkLgorLlNwCitJZiB5b3UgYXJlIG5vdCB1c2luZyBhIGxpbmtlciB3aXRoIHBsdWdpbiBzdXBwb3J0IGFuZC9vciBkbyBub3QKK2VuYWJsZSB0aGUgbGlua2VyIHBsdWdpbiwgdGhlbiB0aGUgb2JqZWN0cyBpbnNpZGUgXGZJbGliZm9vLmFcZlIKK2FyZSBleHRyYWN0ZWQgYW5kIGxpbmtlZCBhcyB1c3VhbCwgYnV0IHRoZXkgZG8gbm90IHBhcnRpY2lwYXRlCitpbiB0aGUgXHMtMUxUT1xzMCBvcHRpbWl6YXRpb24gcHJvY2Vzcy4KKy5TcAorTGluay10aW1lIG9wdGltaXphdGlvbnMgZG8gbm90IHJlcXVpcmUgdGhlIHByZXNlbmNlIG9mIHRoZSB3aG9sZSBwcm9ncmFtIHRvCitvcGVyYXRlLiAgSWYgdGhlIHByb2dyYW0gZG9lcyBub3QgcmVxdWlyZSBhbnkgc3ltYm9scyB0byBiZSBleHBvcnRlZCwgaXQgaXMKK3Bvc3NpYmxlIHRvIGNvbWJpbmUgXGZCXC1mbHRvXGZSIGFuZCBcZkJcLWZ3aG9sZVwtcHJvZ3JhbVxmUiB0byBhbGxvdwordGhlIGludGVycHJvY2VkdXJhbCBvcHRpbWl6ZXJzIHRvIHVzZSBtb3JlIGFnZ3Jlc3NpdmUgYXNzdW1wdGlvbnMgd2hpY2ggbWF5CitsZWFkIHRvIGltcHJvdmVkIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLgorVXNlIG9mIFxmQlwtZndob2xlXC1wcm9ncmFtXGZSIGlzIG5vdCBuZWVkZWQgd2hlbiBsaW5rZXIgcGx1Z2luIGlzCithY3RpdmUgKHNlZSBcZkJcLWZ1c2VcLWxpbmtlclwtcGx1Z2luXGZSKS4KKy5TcAorVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgXHMtMUxUT1xzMCBtYWtlcyBubworYXR0ZW1wdCB0byBnZW5lcmF0ZSBieXRlY29kZSB0aGF0IGlzIHBvcnRhYmxlIGJldHdlZW4gZGlmZmVyZW50Cit0eXBlcyBvZiBob3N0cy4gIFRoZSBieXRlY29kZSBmaWxlcyBhcmUgdmVyc2lvbmVkIGFuZCB0aGVyZSBpcyBhCitzdHJpY3QgdmVyc2lvbiBjaGVjaywgc28gYnl0ZWNvZGUgZmlsZXMgZ2VuZXJhdGVkIGluIG9uZSB2ZXJzaW9uIG9mCitcJlxzLTFHQ0NcczAgd2lsbCBub3Qgd29yayB3aXRoIGFuIG9sZGVyL25ld2VyIHZlcnNpb24gb2YgXHMtMUdDQ1xzMC4KKy5TcAorTGluay10aW1lIG9wdGltaXphdGlvbiBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBnZW5lcmF0aW9uIG9mIGRlYnVnZ2luZworaW5mb3JtYXRpb24uICBDb21iaW5pbmcgXGZCXC1mbHRvXGZSIHdpdGgKK1wmXGZCXC1nXGZSIGlzIGN1cnJlbnRseSBleHBlcmltZW50YWwgYW5kIGV4cGVjdGVkIHRvIHByb2R1Y2Ugd3JvbmcKK3Jlc3VsdHMuCisuU3AKK0lmIHlvdSBzcGVjaWZ5IHRoZSBvcHRpb25hbCBcZkluXGZSLCB0aGUgb3B0aW1pemF0aW9uIGFuZCBjb2RlCitnZW5lcmF0aW9uIGRvbmUgYXQgbGluayB0aW1lIGlzIGV4ZWN1dGVkIGluIHBhcmFsbGVsIHVzaW5nIFxmSW5cZlIKK3BhcmFsbGVsIGpvYnMgYnkgdXRpbGl6aW5nIGFuIGluc3RhbGxlZCBcZkJtYWtlXGZSIHByb2dyYW0uICBUaGUKK2Vudmlyb25tZW50IHZhcmlhYmxlIFxmQlxzLTFNQUtFXHMwXGZSIG1heSBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBwcm9ncmFtCit1c2VkLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFxmSW5cZlIgaXMgMS4KKy5TcAorWW91IGNhbiBhbHNvIHNwZWNpZnkgXGZCXC1mbHRvPWpvYnNlcnZlclxmUiB0byB1c2UgXHMtMUdOVVxzMCBtYWtlJ3MKK2pvYiBzZXJ2ZXIgbW9kZSB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwYXJhbGxlbCBqb2JzLiBUaGlzCitpcyB1c2VmdWwgd2hlbiB0aGUgTWFrZWZpbGUgY2FsbGluZyBccy0xR0NDXHMwIGlzIGFscmVhZHkgZXhlY3V0aW5nIGluIHBhcmFsbGVsLgorWW91IG11c3QgcHJlcGVuZCBhIFxmQitcZlIgdG8gdGhlIGNvbW1hbmQgcmVjaXBlIGluIHRoZSBwYXJlbnQgTWFrZWZpbGUKK2ZvciB0aGlzIHRvIHdvcmsuICBUaGlzIG9wdGlvbiBsaWtlbHkgb25seSB3b3JrcyBpZiBcZkJccy0xTUFLRVxzMFxmUiBpcworXCZccy0xR05VXHMwIG1ha2UuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtZmx0b1wtcGFydGl0aW9uPVxmUlxmSWFsZ1xmUiIgNAorLklYIEl0ZW0gIi1mbHRvLXBhcnRpdGlvbj1hbGciCitTcGVjaWZ5IHRoZSBwYXJ0aXRpb25pbmcgYWxnb3JpdGhtIHVzZWQgYnkgdGhlIGxpbmstdGltZSBvcHRpbWl6ZXIuCitUaGUgdmFsdWUgaXMgZWl0aGVyIFxmKENXXCooQ2AxdG8xXCooQydcZlIgdG8gc3BlY2lmeSBhIHBhcnRpdGlvbmluZyBtaXJyb3JpbmcKK3RoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMgb3IgXGYoQ1dcKihDYGJhbGFuY2VkXCooQydcZlIgdG8gc3BlY2lmeSBwYXJ0aXRpb25pbmcKK2ludG8gZXF1YWxseSBzaXplZCBjaHVua3MgKHdoZW5ldmVyIHBvc3NpYmxlKSBvciBcZihDV1wqKENgbWF4XCooQydcZlIgdG8gY3JlYXRlCituZXcgcGFydGl0aW9uIGZvciBldmVyeSBzeW1ib2wgd2hlcmUgcG9zc2libGUuICBTcGVjaWZ5aW5nIFxmKENXXCooQ2Bub25lXCooQydcZlIKK2FzIGFuIGFsZ29yaXRobSBkaXNhYmxlcyBwYXJ0aXRpb25pbmcgYW5kIHN0cmVhbWluZyBjb21wbGV0ZWx5LiAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIFxmKENXXCooQ2BiYWxhbmNlZFwqKEMnXGZSLiBXaGlsZSBcZihDV1wqKENgMXRvMVwqKEMnXGZSIGNhbiBiZSB1c2VkCithcyBhbiB3b3JrYXJvdW5kIGZvciB2YXJpb3VzIGNvZGUgb3JkZXJpbmcgaXNzdWVzLCB0aGUgXGYoQ1dcKihDYG1heFwqKEMnXGZSCitwYXJ0aXRpb25pbmcgaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHRlc3Rpbmcgb25seS4KKy5JUCAiXGZCXC1mbHRvXC1jb21wcmVzc2lvblwtbGV2ZWw9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mbHRvLWNvbXByZXNzaW9uLWxldmVsPW4iCitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIGxldmVsIG9mIGNvbXByZXNzaW9uIHVzZWQgZm9yIGludGVybWVkaWF0ZQorbGFuZ3VhZ2Ugd3JpdHRlbiB0byBccy0xTFRPXHMwIG9iamVjdCBmaWxlcywgYW5kIGlzIG9ubHkgbWVhbmluZ2Z1bCBpbgorY29uanVuY3Rpb24gd2l0aCBccy0xTFRPXHMwIG1vZGUgKFxmQlwtZmx0b1xmUikuICBWYWxpZAordmFsdWVzIGFyZSAwIChubyBjb21wcmVzc2lvbikgdG8gOSAobWF4aW11bSBjb21wcmVzc2lvbikuICBWYWx1ZXMKK291dHNpZGUgdGhpcyByYW5nZSBhcmUgY2xhbXBlZCB0byBlaXRoZXIgMCBvciA5LiAgSWYgdGhlIG9wdGlvbiBpcyBub3QKK2dpdmVuLCBhIGRlZmF1bHQgYmFsYW5jZWQgY29tcHJlc3Npb24gc2V0dGluZyBpcyB1c2VkLgorLklQICJcZkJcLWZsdG9cLXJlcG9ydFxmUiIgNAorLklYIEl0ZW0gIi1mbHRvLXJlcG9ydCIKK1ByaW50cyBhIHJlcG9ydCB3aXRoIGludGVybmFsIGRldGFpbHMgb24gdGhlIHdvcmtpbmdzIG9mIHRoZSBsaW5rLXRpbWUKK29wdGltaXplci4gIFRoZSBjb250ZW50cyBvZiB0aGlzIHJlcG9ydCB2YXJ5IGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uLgorSXQgaXMgbWVhbnQgdG8gYmUgdXNlZnVsIHRvIFxzLTFHQ0NcczAgZGV2ZWxvcGVycyB3aGVuIHByb2Nlc3Npbmcgb2JqZWN0CitmaWxlcyBpbiBccy0xTFRPXHMwIG1vZGUgKHZpYSBcZkJcLWZsdG9cZlIpLgorLlNwCitEaXNhYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLWZ1c2VcLWxpbmtlclwtcGx1Z2luXGZSIiA0CisuSVggSXRlbSAiLWZ1c2UtbGlua2VyLXBsdWdpbiIKK0VuYWJsZXMgdGhlIHVzZSBvZiBhIGxpbmtlciBwbHVnaW4gZHVyaW5nIGxpbmstdGltZSBvcHRpbWl6YXRpb24uICBUaGlzCitvcHRpb24gcmVsaWVzIG9uIHBsdWdpbiBzdXBwb3J0IGluIHRoZSBsaW5rZXIsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiBnb2xkCitvciBpbiBccy0xR05VXHMwIGxkIDIuMjEgb3IgbmV3ZXIuCisuU3AKK1RoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGV4dHJhY3Rpb24gb2Ygb2JqZWN0IGZpbGVzIHdpdGggXHMtMUdJTVBMRVxzMCBieXRlY29kZSBvdXQKK29mIGxpYnJhcnkgYXJjaGl2ZXMuIFRoaXMgaW1wcm92ZXMgdGhlIHF1YWxpdHkgb2Ygb3B0aW1pemF0aW9uIGJ5IGV4cG9zaW5nCittb3JlIGNvZGUgdG8gdGhlIGxpbmstdGltZSBvcHRpbWl6ZXIuICBUaGlzIGluZm9ybWF0aW9uIHNwZWNpZmllcyB3aGF0CitzeW1ib2xzIGNhbiBiZSBhY2Nlc3NlZCBleHRlcm5hbGx5IChieSBub24tTFRPIG9iamVjdCBvciBkdXJpbmcgZHluYW1pYworbGlua2luZykuICBSZXN1bHRpbmcgY29kZSBxdWFsaXR5IGltcHJvdmVtZW50cyBvbiBiaW5hcmllcyAoYW5kIHNoYXJlZAorbGlicmFyaWVzIHRoYXQgdXNlIGhpZGRlbiB2aXNpYmlsaXR5KSBhcmUgc2ltaWxhciB0byBcZihDV1wqKENgXC1md2hvbGVcLXByb2dyYW1cKihDJ1xmUi4KK1NlZSBcZkJcLWZsdG9cZlIgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGVmZmVjdCBvZiB0aGlzIGZsYWcgYW5kIGhvdyB0bwordXNlIGl0LgorLlNwCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBccy0xTFRPXHMwIHN1cHBvcnQgaW4gXHMtMUdDQ1xzMCBpcyBlbmFibGVkCithbmQgXHMtMUdDQ1xzMCB3YXMgY29uZmlndXJlZCBmb3IgdXNlIHdpdGgKK2EgbGlua2VyIHN1cHBvcnRpbmcgcGx1Z2lucyAoXHMtMUdOVVxzMCBsZCAyLjIxIG9yIG5ld2VyIG9yIGdvbGQpLgorLklQICJcZkJcLWZmYXRcLWx0b1wtb2JqZWN0c1xmUiIgNAorLklYIEl0ZW0gIi1mZmF0LWx0by1vYmplY3RzIgorRmF0IFxzLTFMVE9cczAgb2JqZWN0cyBhcmUgb2JqZWN0IGZpbGVzIHRoYXQgY29udGFpbiBib3RoIHRoZSBpbnRlcm1lZGlhdGUgbGFuZ3VhZ2UKK2FuZCB0aGUgb2JqZWN0IGNvZGUuIFRoaXMgbWFrZXMgdGhlbSB1c2FibGUgZm9yIGJvdGggXHMtMUxUT1xzMCBsaW5raW5nIGFuZCBub3JtYWwKK2xpbmtpbmcuIFRoaXMgb3B0aW9uIGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gY29tcGlsaW5nIHdpdGggXGZCXC1mbHRvXGZSCithbmQgaXMgaWdub3JlZCBhdCBsaW5rIHRpbWUuCisuU3AKK1wmXGZCXC1mbm9cLWZhdFwtbHRvXC1vYmplY3RzXGZSIGltcHJvdmVzIGNvbXBpbGF0aW9uIHRpbWUgb3ZlciBwbGFpbiBccy0xTFRPXHMwLCBidXQKK3JlcXVpcmVzIHRoZSBjb21wbGV0ZSB0b29sY2hhaW4gdG8gYmUgYXdhcmUgb2YgXHMtMUxUT1xzMC4gSXQgcmVxdWlyZXMgYSBsaW5rZXIgd2l0aAorbGlua2VyIHBsdWdpbiBzdXBwb3J0IGZvciBiYXNpYyBmdW5jdGlvbmFsaXR5LiAgQWRkaXRpb25hbGx5LAorXCZcZkJubVxmUiwgXGZCYXJcZlIgYW5kIFxmQnJhbmxpYlxmUgorbmVlZCB0byBzdXBwb3J0IGxpbmtlciBwbHVnaW5zIHRvIGFsbG93IGEgZnVsbC1mZWF0dXJlZCBidWlsZCBlbnZpcm9ubWVudAorKGNhcGFibGUgb2YgYnVpbGRpbmcgc3RhdGljIGxpYnJhcmllcyBldGMpLiAgXHMtMUdDQ1xzMCBwcm92aWRlcyB0aGUgXGZCZ2NjLWFyXGZSLAorXCZcZkJnY2Mtbm1cZlIsIFxmQmdjYy1yYW5saWJcZlIgd3JhcHBlcnMgdG8gcGFzcyB0aGUgcmlnaHQgb3B0aW9ucwordG8gdGhlc2UgdG9vbHMuIFdpdGggbm9uIGZhdCBccy0xTFRPXHMwIG1ha2VmaWxlcyBuZWVkIHRvIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGVtLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZmYXRcLWx0b1wtb2JqZWN0c1xmUiBidXQgdGhpcyBkZWZhdWx0IGlzIGludGVuZGVkIHRvCitjaGFuZ2UgaW4gZnV0dXJlIHJlbGVhc2VzIHdoZW4gbGlua2VyIHBsdWdpbiBlbmFibGVkIGVudmlyb25tZW50cyBiZWNvbWUgbW9yZQorY29tbW9uLgorLklQICJcZkJcLWZjb21wYXJlXC1lbGltXGZSIiA0CisuSVggSXRlbSAiLWZjb21wYXJlLWVsaW0iCitBZnRlciByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBwb3N0LXJlZ2lzdGVyIGFsbG9jYXRpb24gaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nLAoraWRlbnRpZnkgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMgdGhhdCBjb21wdXRlIHByb2Nlc3NvciBmbGFncyBzaW1pbGFyIHRvIGEKK2NvbXBhcmlzb24gb3BlcmF0aW9uIGJhc2VkIG9uIHRoYXQgYXJpdGhtZXRpYy4gIElmIHBvc3NpYmxlLCBlbGltaW5hdGUgdGhlCitleHBsaWNpdCBjb21wYXJpc29uIG9wZXJhdGlvbi4KKy5TcAorVGhpcyBwYXNzIG9ubHkgYXBwbGllcyB0byBjZXJ0YWluIHRhcmdldHMgdGhhdCBjYW5ub3QgZXhwbGljaXRseSByZXByZXNlbnQKK3RoZSBjb21wYXJpc29uIG9wZXJhdGlvbiBiZWZvcmUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpcyBjb21wbGV0ZS4KKy5TcAorRW5hYmxlZCBhdCBsZXZlbHMgXGZCXC1PXGZSLCBcZkJcLU8yXGZSLCBcZkJcLU8zXGZSLCBcZkJcLU9zXGZSLgorLklQICJcZkJcLWZ1c2VcLWxkPWJmZFxmUiIgNAorLklYIEl0ZW0gIi1mdXNlLWxkPWJmZCIKK1VzZSB0aGUgXGZCYmZkXGZSIGxpbmtlciBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGxpbmtlci4KKy5JUCAiXGZCXC1mdXNlXC1sZD1nb2xkXGZSIiA0CisuSVggSXRlbSAiLWZ1c2UtbGQ9Z29sZCIKK1VzZSB0aGUgXGZCZ29sZFxmUiBsaW5rZXIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBsaW5rZXIuCisuSVAgIlxmQlwtZmNwcm9wXC1yZWdpc3RlcnNcZlIiIDQKKy5JWCBJdGVtICItZmNwcm9wLXJlZ2lzdGVycyIKK0FmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIHBvc3QtcmVnaXN0ZXIgYWxsb2NhdGlvbiBpbnN0cnVjdGlvbiBzcGxpdHRpbmcsCitwZXJmb3JtIGEgY29weS1wcm9wYWdhdGlvbiBwYXNzIHRvIHRyeSB0byByZWR1Y2Ugc2NoZWR1bGluZyBkZXBlbmRlbmNpZXMKK2FuZCBvY2Nhc2lvbmFsbHkgZWxpbWluYXRlIHRoZSBjb3B5LgorLlNwCitFbmFibGVkIGF0IGxldmVscyBcZkJcLU9cZlIsIFxmQlwtTzJcZlIsIFxmQlwtTzNcZlIsIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtZnByb2ZpbGVcLWNvcnJlY3Rpb25cZlIiIDQKKy5JWCBJdGVtICItZnByb2ZpbGUtY29ycmVjdGlvbiIKK1Byb2ZpbGVzIGNvbGxlY3RlZCB1c2luZyBhbiBpbnN0cnVtZW50ZWQgYmluYXJ5IGZvciBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcyBtYXkKK2JlIGluY29uc2lzdGVudCBkdWUgdG8gbWlzc2VkIGNvdW50ZXIgdXBkYXRlcy4gV2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsCitcJlxzLTFHQ0NcczAgdXNlcyBoZXVyaXN0aWNzIHRvIGNvcnJlY3Qgb3Igc21vb3RoIG91dCBzdWNoIGluY29uc2lzdGVuY2llcy4gQnkKK2RlZmF1bHQsIFxzLTFHQ0NcczAgZW1pdHMgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIGFuIGluY29uc2lzdGVudCBwcm9maWxlIGlzIGRldGVjdGVkLgorLklQICJcZkJcLWZwcm9maWxlXC1kaXI9XGZSXGZJcGF0aFxmUiIgNAorLklYIEl0ZW0gIi1mcHJvZmlsZS1kaXI9cGF0aCIKK1NldCB0aGUgZGlyZWN0b3J5IHRvIHNlYXJjaCBmb3IgdGhlIHByb2ZpbGUgZGF0YSBmaWxlcyBpbiB0byBcZklwYXRoXGZSLgorVGhpcyBvcHRpb24gYWZmZWN0cyBvbmx5IHRoZSBwcm9maWxlIGRhdGEgZ2VuZXJhdGVkIGJ5CitcJlxmQlwtZnByb2ZpbGVcLWdlbmVyYXRlXGZSLCBcZkJcLWZ0ZXN0XC1jb3ZlcmFnZVxmUiwgXGZCXC1mcHJvZmlsZVwtYXJjc1xmUgorYW5kIHVzZWQgYnkgXGZCXC1mcHJvZmlsZVwtdXNlXGZSIGFuZCBcZkJcLWZicmFuY2hcLXByb2JhYmlsaXRpZXNcZlIKK2FuZCBpdHMgcmVsYXRlZCBvcHRpb25zLiAgQm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgcGF0aHMgY2FuIGJlIHVzZWQuCitCeSBkZWZhdWx0LCBccy0xR0NDXHMwIHVzZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFzIFxmSXBhdGhcZlIsIHRodXMgdGhlCitwcm9maWxlIGRhdGEgZmlsZSBhcHBlYXJzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgb2JqZWN0IGZpbGUuCisuSVAgIlxmQlwtZnByb2ZpbGVcLWdlbmVyYXRlXGZSIiA0CisuSVggSXRlbSAiLWZwcm9maWxlLWdlbmVyYXRlIgorLlBEIDAKKy5JUCAiXGZCXC1mcHJvZmlsZVwtZ2VuZXJhdGU9XGZSXGZJcGF0aFxmUiIgNAorLklYIEl0ZW0gIi1mcHJvZmlsZS1nZW5lcmF0ZT1wYXRoIgorLlBECitFbmFibGUgb3B0aW9ucyB1c3VhbGx5IHVzZWQgZm9yIGluc3RydW1lbnRpbmcgYXBwbGljYXRpb24gdG8gcHJvZHVjZQorcHJvZmlsZSB1c2VmdWwgZm9yIGxhdGVyIHJlY29tcGlsYXRpb24gd2l0aCBwcm9maWxlIGZlZWRiYWNrIGJhc2VkCitvcHRpbWl6YXRpb24uICBZb3UgbXVzdCB1c2UgXGZCXC1mcHJvZmlsZVwtZ2VuZXJhdGVcZlIgYm90aCB3aGVuCitjb21waWxpbmcgYW5kIHdoZW4gbGlua2luZyB5b3VyIHByb2dyYW0uCisuU3AKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZW5hYmxlZDogXGYoQ1dcKihDYFwtZnByb2ZpbGVcLWFyY3NcKihDJ1xmUiwgXGYoQ1dcKihDYFwtZnByb2ZpbGVcLXZhbHVlc1wqKEMnXGZSLCBcZihDV1wqKENgXC1mdnB0XCooQydcZlIuCisuU3AKK0lmIFxmSXBhdGhcZlIgaXMgc3BlY2lmaWVkLCBccy0xR0NDXHMwIGxvb2tzIGF0IHRoZSBcZklwYXRoXGZSIHRvIGZpbmQKK3RoZSBwcm9maWxlIGZlZWRiYWNrIGRhdGEgZmlsZXMuIFNlZSBcZkJcLWZwcm9maWxlXC1kaXJcZlIuCisuSVAgIlxmQlwtZnByb2ZpbGVcLXVzZVxmUiIgNAorLklYIEl0ZW0gIi1mcHJvZmlsZS11c2UiCisuUEQgMAorLklQICJcZkJcLWZwcm9maWxlXC11c2U9XGZSXGZJcGF0aFxmUiIgNAorLklYIEl0ZW0gIi1mcHJvZmlsZS11c2U9cGF0aCIKKy5QRAorRW5hYmxlIHByb2ZpbGUgZmVlZGJhY2sgZGlyZWN0ZWQgb3B0aW1pemF0aW9ucywgYW5kIG9wdGltaXphdGlvbnMKK2dlbmVyYWxseSBwcm9maXRhYmxlIG9ubHkgd2l0aCBwcm9maWxlIGZlZWRiYWNrIGF2YWlsYWJsZS4KKy5TcAorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBlbmFibGVkOiBcZihDV1wqKENgXC1mYnJhbmNoXC1wcm9iYWJpbGl0aWVzXCooQydcZlIsIFxmKENXXCooQ2BcLWZ2cHRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYFwtZnVucm9sbFwtbG9vcHNcKihDJ1xmUiwgXGYoQ1dcKihDYFwtZnBlZWxcLWxvb3BzXCooQydcZlIsIFxmKENXXCooQ2BcLWZ0cmFjZXJcKihDJ1xmUiwgXGYoQ1dcKihDYFwtZnRyZWVcLXZlY3Rvcml6ZVwqKEMnXGZSLAorXCZcZihDV1wqKENgZnRyZWVcLWxvb3BcLWRpc3RyaWJ1dGVcLXBhdHRlcm5zXCooQydcZlIKKy5TcAorQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBlbWl0cyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBmZWVkYmFjayBwcm9maWxlcyBkbyBub3QKK21hdGNoIHRoZSBzb3VyY2UgY29kZS4gIFRoaXMgZXJyb3IgY2FuIGJlIHR1cm5lZCBpbnRvIGEgd2FybmluZyBieSB1c2luZworXCZcZkJcLVdjb3ZlcmFnZVwtbWlzbWF0Y2hcZlIuICBOb3RlIHRoaXMgbWF5IHJlc3VsdCBpbiBwb29ybHkgb3B0aW1pemVkCitjb2RlLgorLlNwCitJZiBcZklwYXRoXGZSIGlzIHNwZWNpZmllZCwgXHMtMUdDQ1xzMCBsb29rcyBhdCB0aGUgXGZJcGF0aFxmUiB0byBmaW5kCit0aGUgcHJvZmlsZSBmZWVkYmFjayBkYXRhIGZpbGVzLiBTZWUgXGZCXC1mcHJvZmlsZVwtZGlyXGZSLgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgY29udHJvbCBjb21waWxlciBiZWhhdmlvciByZWdhcmRpbmcgZmxvYXRpbmctcG9pbnQgCithcml0aG1ldGljLiAgVGhlc2Ugb3B0aW9ucyB0cmFkZSBvZmYgYmV0d2VlbiBzcGVlZCBhbmQKK2NvcnJlY3RuZXNzLiAgQWxsIG11c3QgYmUgc3BlY2lmaWNhbGx5IGVuYWJsZWQuCisuSVAgIlxmQlwtZmZsb2F0XC1zdG9yZVxmUiIgNAorLklYIEl0ZW0gIi1mZmxvYXQtc3RvcmUiCitEbyBub3Qgc3RvcmUgZmxvYXRpbmctcG9pbnQgdmFyaWFibGVzIGluIHJlZ2lzdGVycywgYW5kIGluaGliaXQgb3RoZXIKK29wdGlvbnMgdGhhdCBtaWdodCBjaGFuZ2Ugd2hldGhlciBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGlzIHRha2VuIGZyb20gYQorcmVnaXN0ZXIgb3IgbWVtb3J5LgorLlNwCitUaGlzIG9wdGlvbiBwcmV2ZW50cyB1bmRlc2lyYWJsZSBleGNlc3MgcHJlY2lzaW9uIG9uIG1hY2hpbmVzIHN1Y2ggYXMKK3RoZSA2ODAwMCB3aGVyZSB0aGUgZmxvYXRpbmcgcmVnaXN0ZXJzIChvZiB0aGUgNjg4ODEpIGtlZXAgbW9yZQorcHJlY2lzaW9uIHRoYW4gYSBcZihDV1wqKENgZG91YmxlXCooQydcZlIgaXMgc3VwcG9zZWQgdG8gaGF2ZS4gIFNpbWlsYXJseSBmb3IgdGhlCit4ODYgYXJjaGl0ZWN0dXJlLiAgRm9yIG1vc3QgcHJvZ3JhbXMsIHRoZSBleGNlc3MgcHJlY2lzaW9uIGRvZXMgb25seQorZ29vZCwgYnV0IGEgZmV3IHByb2dyYW1zIHJlbHkgb24gdGhlIHByZWNpc2UgZGVmaW5pdGlvbiBvZiBccy0xSUVFRVxzMCBmbG9hdGluZworcG9pbnQuICBVc2UgXGZCXC1mZmxvYXRcLXN0b3JlXGZSIGZvciBzdWNoIHByb2dyYW1zLCBhZnRlciBtb2RpZnlpbmcKK3RoZW0gdG8gc3RvcmUgYWxsIHBlcnRpbmVudCBpbnRlcm1lZGlhdGUgY29tcHV0YXRpb25zIGludG8gdmFyaWFibGVzLgorLklQICJcZkJcLWZleGNlc3NcLXByZWNpc2lvbj1cZlJcZklzdHlsZVxmUiIgNAorLklYIEl0ZW0gIi1mZXhjZXNzLXByZWNpc2lvbj1zdHlsZSIKK1RoaXMgb3B0aW9uIGFsbG93cyBmdXJ0aGVyIGNvbnRyb2wgb3ZlciBleGNlc3MgcHJlY2lzaW9uIG9uIG1hY2hpbmVzCit3aGVyZSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgaGF2ZSBtb3JlIHByZWNpc2lvbiB0aGFuIHRoZSBccy0xSUVFRVxzMAorXCZcZihDV1wqKENgZmxvYXRcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSIHR5cGVzIGFuZCB0aGUgcHJvY2Vzc29yIGRvZXMgbm90CitzdXBwb3J0IG9wZXJhdGlvbnMgcm91bmRpbmcgdG8gdGhvc2UgdHlwZXMuICBCeSBkZWZhdWx0LAorXCZcZkJcLWZleGNlc3NcLXByZWNpc2lvbj1mYXN0XGZSIGlzIGluIGVmZmVjdDsgdGhpcyBtZWFucyB0aGF0CitvcGVyYXRpb25zIGFyZSBjYXJyaWVkIG91dCBpbiB0aGUgcHJlY2lzaW9uIG9mIHRoZSByZWdpc3RlcnMgYW5kIHRoYXQKK2l0IGlzIHVucHJlZGljdGFibGUgd2hlbiByb3VuZGluZyB0byB0aGUgdHlwZXMgc3BlY2lmaWVkIGluIHRoZSBzb3VyY2UKK2NvZGUgdGFrZXMgcGxhY2UuICBXaGVuIGNvbXBpbGluZyBDLCBpZgorXCZcZkJcLWZleGNlc3NcLXByZWNpc2lvbj1zdGFuZGFyZFxmUiBpcyBzcGVjaWZpZWQgdGhlbiBleGNlc3MKK3ByZWNpc2lvbiBmb2xsb3dzIHRoZSBydWxlcyBzcGVjaWZpZWQgaW4gXHMtMUlTT1xzMCBDOTk7IGluIHBhcnRpY3VsYXIsCitib3RoIGNhc3RzIGFuZCBhc3NpZ25tZW50cyBjYXVzZSB2YWx1ZXMgdG8gYmUgcm91bmRlZCB0byB0aGVpcgorc2VtYW50aWMgdHlwZXMgKHdoZXJlYXMgXGZCXC1mZmxvYXRcLXN0b3JlXGZSIG9ubHkgYWZmZWN0cworYXNzaWdubWVudHMpLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBDIGlmIGEgc3RyaWN0Citjb25mb3JtYW5jZSBvcHRpb24gc3VjaCBhcyBcZkJcLXN0ZD1jOTlcZlIgaXMgdXNlZC4KKy5TcAorXCZcZkJcLWZleGNlc3NcLXByZWNpc2lvbj1zdGFuZGFyZFxmUiBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGxhbmd1YWdlcworb3RoZXIgdGhhbiBDLCBhbmQgaGFzIG5vIGVmZmVjdCBpZgorXCZcZkJcLWZ1bnNhZmVcLW1hdGhcLW9wdGltaXphdGlvbnNcZlIgb3IgXGZCXC1mZmFzdFwtbWF0aFxmUiBpcworc3BlY2lmaWVkLiAgT24gdGhlIHg4NiwgaXQgYWxzbyBoYXMgbm8gZWZmZWN0IGlmIFxmQlwtbWZwbWF0aD1zc2VcZlIKK29yIFxmQlwtbWZwbWF0aD1zc2UrMzg3XGZSIGlzIHNwZWNpZmllZDsgaW4gdGhlIGZvcm1lciBjYXNlLCBccy0xSUVFRVxzMAorc2VtYW50aWNzIGFwcGx5IHdpdGhvdXQgZXhjZXNzIHByZWNpc2lvbiwgYW5kIGluIHRoZSBsYXR0ZXIsIHJvdW5kaW5nCitpcyB1bnByZWRpY3RhYmxlLgorLklQICJcZkJcLWZmYXN0XC1tYXRoXGZSIiA0CisuSVggSXRlbSAiLWZmYXN0LW1hdGgiCitTZXRzIFxmQlwtZm5vXC1tYXRoXC1lcnJub1xmUiwgXGZCXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSLAorXCZcZkJcLWZmaW5pdGVcLW1hdGhcLW9ubHlcZlIsIFxmQlwtZm5vXC1yb3VuZGluZ1wtbWF0aFxmUiwKK1wmXGZCXC1mbm9cLXNpZ25hbGluZ1wtbmFuc1xmUiBhbmQgXGZCXC1mY3hcLWxpbWl0ZWRcLXJhbmdlXGZSLgorLlNwCitUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIHByZXByb2Nlc3NvciBtYWNybyBcZihDV1wqKENgX1x8X0ZBU1RfTUFUSF9cfF9cKihDJ1xmUiB0byBiZSBkZWZpbmVkLgorLlNwCitUaGlzIG9wdGlvbiBpcyBub3QgdHVybmVkIG9uIGJ5IGFueSBcZkJcLU9cZlIgb3B0aW9uIGJlc2lkZXMKK1wmXGZCXC1PZmFzdFxmUiBzaW5jZSBpdCBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBvdXRwdXQgZm9yIHByb2dyYW1zCit0aGF0IGRlcGVuZCBvbiBhbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBccy0xSUVFRVxzMCBvciBccy0xSVNPXHMwIHJ1bGVzL3NwZWNpZmljYXRpb25zCitmb3IgbWF0aCBmdW5jdGlvbnMuIEl0IG1heSwgaG93ZXZlciwgeWllbGQgZmFzdGVyIGNvZGUgZm9yIHByb2dyYW1zCit0aGF0IGRvIG5vdCByZXF1aXJlIHRoZSBndWFyYW50ZWVzIG9mIHRoZXNlIHNwZWNpZmljYXRpb25zLgorLklQICJcZkJcLWZub1wtbWF0aFwtZXJybm9cZlIiIDQKKy5JWCBJdGVtICItZm5vLW1hdGgtZXJybm8iCitEbyBub3Qgc2V0IFxmKENXXCooQ2BlcnJub1wqKEMnXGZSIGFmdGVyIGNhbGxpbmcgbWF0aCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhlY3V0ZWQKK3dpdGggYSBzaW5nbGUgaW5zdHJ1Y3Rpb24sIGUuZy4sIFxmKENXXCooQ2BzcXJ0XCooQydcZlIuICBBIHByb2dyYW0gdGhhdCByZWxpZXMgb24KK1wmXHMtMUlFRUVcczAgZXhjZXB0aW9ucyBmb3IgbWF0aCBlcnJvciBoYW5kbGluZyBtYXkgd2FudCB0byB1c2UgdGhpcyBmbGFnCitmb3Igc3BlZWQgd2hpbGUgbWFpbnRhaW5pbmcgXHMtMUlFRUVcczAgYXJpdGhtZXRpYyBjb21wYXRpYmlsaXR5LgorLlNwCitUaGlzIG9wdGlvbiBpcyBub3QgdHVybmVkIG9uIGJ5IGFueSBcZkJcLU9cZlIgb3B0aW9uIHNpbmNlCitpdCBjYW4gcmVzdWx0IGluIGluY29ycmVjdCBvdXRwdXQgZm9yIHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uCithbiBleGFjdCBpbXBsZW1lbnRhdGlvbiBvZiBccy0xSUVFRVxzMCBvciBccy0xSVNPXHMwIHJ1bGVzL3NwZWNpZmljYXRpb25zIGZvcgorbWF0aCBmdW5jdGlvbnMuIEl0IG1heSwgaG93ZXZlciwgeWllbGQgZmFzdGVyIGNvZGUgZm9yIHByb2dyYW1zCit0aGF0IGRvIG5vdCByZXF1aXJlIHRoZSBndWFyYW50ZWVzIG9mIHRoZXNlIHNwZWNpZmljYXRpb25zLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZtYXRoXC1lcnJub1xmUi4KKy5TcAorT24gRGFyd2luIHN5c3RlbXMsIHRoZSBtYXRoIGxpYnJhcnkgbmV2ZXIgc2V0cyBcZihDV1wqKENgZXJybm9cKihDJ1xmUi4gIFRoZXJlIGlzCit0aGVyZWZvcmUgbm8gcmVhc29uIGZvciB0aGUgY29tcGlsZXIgdG8gY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQKK2l0IG1pZ2h0LCBhbmQgXGZCXC1mbm9cLW1hdGhcLWVycm5vXGZSIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLWZ1bnNhZmVcLW1hdGhcLW9wdGltaXphdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZnVuc2FmZS1tYXRoLW9wdGltaXphdGlvbnMiCitBbGxvdyBvcHRpbWl6YXRpb25zIGZvciBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHRoYXQgKGEpIGFzc3VtZQordGhhdCBhcmd1bWVudHMgYW5kIHJlc3VsdHMgYXJlIHZhbGlkIGFuZCAoYikgbWF5IHZpb2xhdGUgXHMtMUlFRUVcczAgb3IKK1wmXHMtMUFOU0lcczAgc3RhbmRhcmRzLiAgV2hlbiB1c2VkIGF0IGxpbmstdGltZSwgaXQgbWF5IGluY2x1ZGUgbGlicmFyaWVzCitvciBzdGFydHVwIGZpbGVzIHRoYXQgY2hhbmdlIHRoZSBkZWZhdWx0IFxzLTFGUFVcczAgY29udHJvbCB3b3JkIG9yIG90aGVyCitzaW1pbGFyIG9wdGltaXphdGlvbnMuCisuU3AKK1RoaXMgb3B0aW9uIGlzIG5vdCB0dXJuZWQgb24gYnkgYW55IFxmQlwtT1xmUiBvcHRpb24gc2luY2UKK2l0IGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IG91dHB1dCBmb3IgcHJvZ3JhbXMgdGhhdCBkZXBlbmQgb24KK2FuIGV4YWN0IGltcGxlbWVudGF0aW9uIG9mIFxzLTFJRUVFXHMwIG9yIFxzLTFJU09cczAgcnVsZXMvc3BlY2lmaWNhdGlvbnMgZm9yCittYXRoIGZ1bmN0aW9ucy4gSXQgbWF5LCBob3dldmVyLCB5aWVsZCBmYXN0ZXIgY29kZSBmb3IgcHJvZ3JhbXMKK3RoYXQgZG8gbm90IHJlcXVpcmUgdGhlIGd1YXJhbnRlZXMgb2YgdGhlc2Ugc3BlY2lmaWNhdGlvbnMuCitFbmFibGVzIFxmQlwtZm5vXC1zaWduZWRcLXplcm9zXGZSLCBcZkJcLWZub1wtdHJhcHBpbmdcLW1hdGhcZlIsCitcJlxmQlwtZmFzc29jaWF0aXZlXC1tYXRoXGZSIGFuZCBcZkJcLWZyZWNpcHJvY2FsXC1tYXRoXGZSLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZub1wtdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSLgorLklQICJcZkJcLWZhc3NvY2lhdGl2ZVwtbWF0aFxmUiIgNAorLklYIEl0ZW0gIi1mYXNzb2NpYXRpdmUtbWF0aCIKK0FsbG93IHJlLWFzc29jaWF0aW9uIG9mIG9wZXJhbmRzIGluIHNlcmllcyBvZiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorVGhpcyB2aW9sYXRlcyB0aGUgXHMtMUlTT1xzMCBDIGFuZCBcKihDKyBsYW5ndWFnZSBzdGFuZGFyZCBieSBwb3NzaWJseSBjaGFuZ2luZworY29tcHV0YXRpb24gcmVzdWx0LiAgXHMtMU5PVEU6XHMwIHJlLW9yZGVyaW5nIG1heSBjaGFuZ2UgdGhlIHNpZ24gb2YgemVybyBhcword2VsbCBhcyBpZ25vcmUgTmFOcyBhbmQgaW5oaWJpdCBvciBjcmVhdGUgdW5kZXJmbG93IG9yIG92ZXJmbG93IChhbmQKK3RodXMgY2Fubm90IGJlIHVzZWQgb24gY29kZSB0aGF0IHJlbGllcyBvbiByb3VuZGluZyBiZWhhdmlvciBsaWtlCitcJlxmKENXXCooQ2AoeCArIDIqKjUyKSBcLSAyKio1MlwqKEMnXGZSLiAgTWF5IGFsc28gcmVvcmRlciBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucworYW5kIHRodXMgbWF5IG5vdCBiZSB1c2VkIHdoZW4gb3JkZXJlZCBjb21wYXJpc29ucyBhcmUgcmVxdWlyZWQuCitUaGlzIG9wdGlvbiByZXF1aXJlcyB0aGF0IGJvdGggXGZCXC1mbm9cLXNpZ25lZFwtemVyb3NcZlIgYW5kCitcJlxmQlwtZm5vXC10cmFwcGluZ1wtbWF0aFxmUiBiZSBpbiBlZmZlY3QuICBNb3Jlb3ZlciwgaXQgZG9lc24ndCBtYWtlCittdWNoIHNlbnNlIHdpdGggXGZCXC1mcm91bmRpbmdcLW1hdGhcZlIuIEZvciBGb3J0cmFuIHRoZSBvcHRpb24KK2lzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGJvdGggXGZCXC1mbm9cLXNpZ25lZFwtemVyb3NcZlIgYW5kCitcJlxmQlwtZm5vXC10cmFwcGluZ1wtbWF0aFxmUiBhcmUgaW4gZWZmZWN0LgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZub1wtYXNzb2NpYXRpdmVcLW1hdGhcZlIuCisuSVAgIlxmQlwtZnJlY2lwcm9jYWxcLW1hdGhcZlIiIDQKKy5JWCBJdGVtICItZnJlY2lwcm9jYWwtbWF0aCIKK0FsbG93IHRoZSByZWNpcHJvY2FsIG9mIGEgdmFsdWUgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIGRpdmlkaW5nIGJ5Cit0aGUgdmFsdWUgaWYgdGhpcyBlbmFibGVzIG9wdGltaXphdGlvbnMuICBGb3IgZXhhbXBsZSBcZihDV1wqKENgeCAvIHlcKihDJ1xmUgorY2FuIGJlIHJlcGxhY2VkIHdpdGggXGYoQ1dcKihDYHggKiAoMS95KVwqKEMnXGZSLCB3aGljaCBpcyB1c2VmdWwgaWYgXGYoQ1dcKihDYCgxL3kpXCooQydcZlIKK2lzIHN1YmplY3QgdG8gY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24uICBOb3RlIHRoYXQgdGhpcyBsb3NlcworcHJlY2lzaW9uIGFuZCBpbmNyZWFzZXMgdGhlIG51bWJlciBvZiBmbG9wcyBvcGVyYXRpbmcgb24gdGhlIHZhbHVlLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZub1wtcmVjaXByb2NhbFwtbWF0aFxmUi4KKy5JUCAiXGZCXC1mZmluaXRlXC1tYXRoXC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLWZmaW5pdGUtbWF0aC1vbmx5IgorQWxsb3cgb3B0aW1pemF0aW9ucyBmb3IgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyB0aGF0IGFzc3VtZQordGhhdCBhcmd1bWVudHMgYW5kIHJlc3VsdHMgYXJlIG5vdCBOYU5zIG9yICtcLUluZnMuCisuU3AKK1RoaXMgb3B0aW9uIGlzIG5vdCB0dXJuZWQgb24gYnkgYW55IFxmQlwtT1xmUiBvcHRpb24gc2luY2UKK2l0IGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IG91dHB1dCBmb3IgcHJvZ3JhbXMgdGhhdCBkZXBlbmQgb24KK2FuIGV4YWN0IGltcGxlbWVudGF0aW9uIG9mIFxzLTFJRUVFXHMwIG9yIFxzLTFJU09cczAgcnVsZXMvc3BlY2lmaWNhdGlvbnMgZm9yCittYXRoIGZ1bmN0aW9ucy4gSXQgbWF5LCBob3dldmVyLCB5aWVsZCBmYXN0ZXIgY29kZSBmb3IgcHJvZ3JhbXMKK3RoYXQgZG8gbm90IHJlcXVpcmUgdGhlIGd1YXJhbnRlZXMgb2YgdGhlc2Ugc3BlY2lmaWNhdGlvbnMuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZm5vXC1maW5pdGVcLW1hdGhcLW9ubHlcZlIuCisuSVAgIlxmQlwtZm5vXC1zaWduZWRcLXplcm9zXGZSIiA0CisuSVggSXRlbSAiLWZuby1zaWduZWQtemVyb3MiCitBbGxvdyBvcHRpbWl6YXRpb25zIGZvciBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHRoYXQgaWdub3JlIHRoZQorc2lnbmVkbmVzcyBvZiB6ZXJvLiAgXHMtMUlFRUVcczAgYXJpdGhtZXRpYyBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yIG9mCitkaXN0aW5jdCArMC4wIGFuZCBcLTAuMCB2YWx1ZXMsIHdoaWNoIHRoZW4gcHJvaGliaXRzIHNpbXBsaWZpY2F0aW9uCitvZiBleHByZXNzaW9ucyBzdWNoIGFzIHgrMC4wIG9yIDAuMCp4IChldmVuIHdpdGggXGZCXC1mZmluaXRlXC1tYXRoXC1vbmx5XGZSKS4KK1RoaXMgb3B0aW9uIGltcGxpZXMgdGhhdCB0aGUgc2lnbiBvZiBhIHplcm8gcmVzdWx0IGlzbid0IHNpZ25pZmljYW50LgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLWZzaWduZWRcLXplcm9zXGZSLgorLklQICJcZkJcLWZub1wtdHJhcHBpbmdcLW1hdGhcZlIiIDQKKy5JWCBJdGVtICItZm5vLXRyYXBwaW5nLW1hdGgiCitDb21waWxlIGNvZGUgYXNzdW1pbmcgdGhhdCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGNhbm5vdCBnZW5lcmF0ZQordXNlci12aXNpYmxlIHRyYXBzLiAgVGhlc2UgdHJhcHMgaW5jbHVkZSBkaXZpc2lvbiBieSB6ZXJvLCBvdmVyZmxvdywKK3VuZGVyZmxvdywgaW5leGFjdCByZXN1bHQgYW5kIGludmFsaWQgb3BlcmF0aW9uLiAgVGhpcyBvcHRpb24gcmVxdWlyZXMKK3RoYXQgXGZCXC1mbm9cLXNpZ25hbGluZ1wtbmFuc1xmUiBiZSBpbiBlZmZlY3QuICBTZXR0aW5nIHRoaXMgb3B0aW9uIG1heQorYWxsb3cgZmFzdGVyIGNvZGUgaWYgb25lIHJlbGllcyBvbiBcKihMIm5vbi1zdG9wXCooUiIgXHMtMUlFRUVcczAgYXJpdGhtZXRpYywgZm9yIGV4YW1wbGUuCisuU3AKK1RoaXMgb3B0aW9uIHNob3VsZCBuZXZlciBiZSB0dXJuZWQgb24gYnkgYW55IFxmQlwtT1xmUiBvcHRpb24gc2luY2UKK2l0IGNhbiByZXN1bHQgaW4gaW5jb3JyZWN0IG91dHB1dCBmb3IgcHJvZ3JhbXMgdGhhdCBkZXBlbmQgb24KK2FuIGV4YWN0IGltcGxlbWVudGF0aW9uIG9mIFxzLTFJRUVFXHMwIG9yIFxzLTFJU09cczAgcnVsZXMvc3BlY2lmaWNhdGlvbnMgZm9yCittYXRoIGZ1bmN0aW9ucy4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mdHJhcHBpbmdcLW1hdGhcZlIuCisuSVAgIlxmQlwtZnJvdW5kaW5nXC1tYXRoXGZSIiA0CisuSVggSXRlbSAiLWZyb3VuZGluZy1tYXRoIgorRGlzYWJsZSB0cmFuc2Zvcm1hdGlvbnMgYW5kIG9wdGltaXphdGlvbnMgdGhhdCBhc3N1bWUgZGVmYXVsdCBmbG9hdGluZy1wb2ludAorcm91bmRpbmcgYmVoYXZpb3IuICBUaGlzIGlzIHJvdW5kLXRvLXplcm8gZm9yIGFsbCBmbG9hdGluZyBwb2ludAordG8gaW50ZWdlciBjb252ZXJzaW9ucywgYW5kIHJvdW5kLXRvLW5lYXJlc3QgZm9yIGFsbCBvdGhlciBhcml0aG1ldGljCit0cnVuY2F0aW9ucy4gIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgZm9yIHByb2dyYW1zIHRoYXQgY2hhbmdlCit0aGUgXHMtMUZQXHMwIHJvdW5kaW5nIG1vZGUgZHluYW1pY2FsbHksIG9yIHRoYXQgbWF5IGJlIGV4ZWN1dGVkIHdpdGggYQorbm9uLWRlZmF1bHQgcm91bmRpbmcgbW9kZS4gIFRoaXMgb3B0aW9uIGRpc2FibGVzIGNvbnN0YW50IGZvbGRpbmcgb2YKK2Zsb2F0aW5nLXBvaW50IGV4cHJlc3Npb25zIGF0IGNvbXBpbGUgdGltZSAod2hpY2ggbWF5IGJlIGFmZmVjdGVkIGJ5Cityb3VuZGluZyBtb2RlKSBhbmQgYXJpdGhtZXRpYyB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBhcmUgdW5zYWZlIGluIHRoZQorcHJlc2VuY2Ugb2Ygc2lnbi1kZXBlbmRlbnQgcm91bmRpbmcgbW9kZXMuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZm5vXC1yb3VuZGluZ1wtbWF0aFxmUi4KKy5TcAorVGhpcyBvcHRpb24gaXMgZXhwZXJpbWVudGFsIGFuZCBkb2VzIG5vdCBjdXJyZW50bHkgZ3VhcmFudGVlIHRvCitkaXNhYmxlIGFsbCBccy0xR0NDXHMwIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgcm91bmRpbmcgbW9kZS4KK0Z1dHVyZSB2ZXJzaW9ucyBvZiBccy0xR0NDXHMwIG1heSBwcm92aWRlIGZpbmVyIGNvbnRyb2wgb2YgdGhpcyBzZXR0aW5nCit1c2luZyBDOTkncyBcZihDV1wqKENgRkVOVl9BQ0NFU1NcKihDJ1xmUiBwcmFnbWEuICBUaGlzIGNvbW1hbmQtbGluZSBvcHRpb24KK3dpbGwgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBkZWZhdWx0IHN0YXRlIGZvciBcZihDV1wqKENgRkVOVl9BQ0NFU1NcKihDJ1xmUi4KKy5JUCAiXGZCXC1mc2lnbmFsaW5nXC1uYW5zXGZSIiA0CisuSVggSXRlbSAiLWZzaWduYWxpbmctbmFucyIKK0NvbXBpbGUgY29kZSBhc3N1bWluZyB0aGF0IFxzLTFJRUVFXHMwIHNpZ25hbGluZyBOYU5zIG1heSBnZW5lcmF0ZSB1c2VyLXZpc2libGUKK3RyYXBzIGR1cmluZyBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLiAgU2V0dGluZyB0aGlzIG9wdGlvbiBkaXNhYmxlcworb3B0aW1pemF0aW9ucyB0aGF0IG1heSBjaGFuZ2UgdGhlIG51bWJlciBvZiBleGNlcHRpb25zIHZpc2libGUgd2l0aAorc2lnbmFsaW5nIE5hTnMuICBUaGlzIG9wdGlvbiBpbXBsaWVzIFxmQlwtZnRyYXBwaW5nXC1tYXRoXGZSLgorLlNwCitUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIHByZXByb2Nlc3NvciBtYWNybyBcZihDV1wqKENgX1x8X1NVUFBPUlRfU05BTl9cfF9cKihDJ1xmUiB0bworYmUgZGVmaW5lZC4KKy5TcAorVGhlIGRlZmF1bHQgaXMgXGZCXC1mbm9cLXNpZ25hbGluZ1wtbmFuc1xmUi4KKy5TcAorVGhpcyBvcHRpb24gaXMgZXhwZXJpbWVudGFsIGFuZCBkb2VzIG5vdCBjdXJyZW50bHkgZ3VhcmFudGVlIHRvCitkaXNhYmxlIGFsbCBccy0xR0NDXHMwIG9wdGltaXphdGlvbnMgdGhhdCBhZmZlY3Qgc2lnbmFsaW5nIE5hTiBiZWhhdmlvci4KKy5JUCAiXGZCXC1mc2luZ2xlXC1wcmVjaXNpb25cLWNvbnN0YW50XGZSIiA0CisuSVggSXRlbSAiLWZzaW5nbGUtcHJlY2lzaW9uLWNvbnN0YW50IgorVHJlYXQgZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzIGFzIHNpbmdsZSBwcmVjaXNpb24gaW5zdGVhZCBvZgoraW1wbGljaXRseSBjb252ZXJ0aW5nIHRoZW0gdG8gZG91YmxlLXByZWNpc2lvbiBjb25zdGFudHMuCisuSVAgIlxmQlwtZmN4XC1saW1pdGVkXC1yYW5nZVxmUiIgNAorLklYIEl0ZW0gIi1mY3gtbGltaXRlZC1yYW5nZSIKK1doZW4gZW5hYmxlZCwgdGhpcyBvcHRpb24gc3RhdGVzIHRoYXQgYSByYW5nZSByZWR1Y3Rpb24gc3RlcCBpcyBub3QKK25lZWRlZCB3aGVuIHBlcmZvcm1pbmcgY29tcGxleCBkaXZpc2lvbi4gIEFsc28sIHRoZXJlIGlzIG5vIGNoZWNraW5nCit3aGV0aGVyIHRoZSByZXN1bHQgb2YgYSBjb21wbGV4IG11bHRpcGxpY2F0aW9uIG9yIGRpdmlzaW9uIGlzIFxmKENXXCooQ2BOYU4KKysgSSpOYU5cKihDJ1xmUiwgd2l0aCBhbiBhdHRlbXB0IHRvIHJlc2N1ZSB0aGUgc2l0dWF0aW9uIGluIHRoYXQgY2FzZS4gIFRoZQorZGVmYXVsdCBpcyBcZkJcLWZub1wtY3hcLWxpbWl0ZWRcLXJhbmdlXGZSLCBidXQgaXMgZW5hYmxlZCBieQorXCZcZkJcLWZmYXN0XC1tYXRoXGZSLgorLlNwCitUaGlzIG9wdGlvbiBjb250cm9scyB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBccy0xSVNPXHMwIEM5OQorXCZcZihDV1wqKENgQ1hfTElNSVRFRF9SQU5HRVwqKEMnXGZSIHByYWdtYS4gIE5ldmVydGhlbGVzcywgdGhlIG9wdGlvbiBhcHBsaWVzIHRvCithbGwgbGFuZ3VhZ2VzLgorLklQICJcZkJcLWZjeFwtZm9ydHJhblwtcnVsZXNcZlIiIDQKKy5JWCBJdGVtICItZmN4LWZvcnRyYW4tcnVsZXMiCitDb21wbGV4IG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBmb2xsb3cgRm9ydHJhbiBydWxlcy4gIFJhbmdlCityZWR1Y3Rpb24gaXMgZG9uZSBhcyBwYXJ0IG9mIGNvbXBsZXggZGl2aXNpb24sIGJ1dCB0aGVyZSBpcyBubyBjaGVja2luZword2hldGhlciB0aGUgcmVzdWx0IG9mIGEgY29tcGxleCBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiBpcyBcZihDV1wqKENgTmFOCisrIEkqTmFOXCooQydcZlIsIHdpdGggYW4gYXR0ZW1wdCB0byByZXNjdWUgdGhlIHNpdHVhdGlvbiBpbiB0aGF0IGNhc2UuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtZm5vXC1jeFwtZm9ydHJhblwtcnVsZXNcZlIuCisuUFAKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBjb250cm9sIG9wdGltaXphdGlvbnMgdGhhdCBtYXkgaW1wcm92ZQorcGVyZm9ybWFuY2UsIGJ1dCBhcmUgbm90IGVuYWJsZWQgYnkgYW55IFxmQlwtT1xmUiBvcHRpb25zLiAgVGhpcworc2VjdGlvbiBpbmNsdWRlcyBleHBlcmltZW50YWwgb3B0aW9ucyB0aGF0IG1heSBwcm9kdWNlIGJyb2tlbiBjb2RlLgorLklQICJcZkJcLWZicmFuY2hcLXByb2JhYmlsaXRpZXNcZlIiIDQKKy5JWCBJdGVtICItZmJyYW5jaC1wcm9iYWJpbGl0aWVzIgorQWZ0ZXIgcnVubmluZyBhIHByb2dyYW0gY29tcGlsZWQgd2l0aCBcZkJcLWZwcm9maWxlXC1hcmNzXGZSLCB5b3UgY2FuIGNvbXBpbGUgaXQgYSBzZWNvbmQgdGltZSB1c2luZworXCZcZkJcLWZicmFuY2hcLXByb2JhYmlsaXRpZXNcZlIsIHRvIGltcHJvdmUgb3B0aW1pemF0aW9ucyBiYXNlZCBvbgordGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIGJyYW5jaCB3YXMgdGFrZW4uICBXaGVuIGEgcHJvZ3JhbQorY29tcGlsZWQgd2l0aCBcZkJcLWZwcm9maWxlXC1hcmNzXGZSIGV4aXRzLCBpdCBzYXZlcyBhcmMgZXhlY3V0aW9uCitjb3VudHMgdG8gYSBmaWxlIGNhbGxlZCBcZklcZklzb3VyY2VuYW1lXGZJLmdjZGFcZlIgZm9yIGVhY2ggc291cmNlCitmaWxlLiAgVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgZGF0YSBmaWxlIGlzIHZlcnkgZGVwZW5kZW50IG9uIHRoZQorc3RydWN0dXJlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSwgc28geW91IG11c3QgdXNlIHRoZSBzYW1lIHNvdXJjZSBjb2RlCithbmQgdGhlIHNhbWUgb3B0aW1pemF0aW9uIG9wdGlvbnMgZm9yIGJvdGggY29tcGlsYXRpb25zLgorLlNwCitXaXRoIFxmQlwtZmJyYW5jaFwtcHJvYmFiaWxpdGllc1xmUiwgXHMtMUdDQ1xzMCBwdXRzIGEKK1wmXGZCXHMtMVJFR19CUl9QUk9CXHMwXGZSIG5vdGUgb24gZWFjaCBcZkJccy0xSlVNUF9JTlNOXHMwXGZSIGFuZCBcZkJccy0xQ0FMTF9JTlNOXHMwXGZSLgorVGhlc2UgY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSBvcHRpbWl6YXRpb24uICBDdXJyZW50bHksIHRoZXkgYXJlIG9ubHkKK3VzZWQgaW4gb25lIHBsYWNlOiBpbiBcZklyZW9yZy5jXGZSLCBpbnN0ZWFkIG9mIGd1ZXNzaW5nIHdoaWNoIHBhdGggYQorYnJhbmNoIGlzIG1vc3QgbGlrZWx5IHRvIHRha2UsIHRoZSBcZkJccy0xUkVHX0JSX1BST0JcczBcZlIgdmFsdWVzIGFyZSB1c2VkIHRvCitleGFjdGx5IGRldGVybWluZSB3aGljaCBwYXRoIGlzIHRha2VuIG1vcmUgb2Z0ZW4uCisuSVAgIlxmQlwtZnByb2ZpbGVcLXZhbHVlc1xmUiIgNAorLklYIEl0ZW0gIi1mcHJvZmlsZS12YWx1ZXMiCitJZiBjb21iaW5lZCB3aXRoIFxmQlwtZnByb2ZpbGVcLWFyY3NcZlIsIGl0IGFkZHMgY29kZSBzbyB0aGF0IHNvbWUKK2RhdGEgYWJvdXQgdmFsdWVzIG9mIGV4cHJlc3Npb25zIGluIHRoZSBwcm9ncmFtIGlzIGdhdGhlcmVkLgorLlNwCitXaXRoIFxmQlwtZmJyYW5jaFwtcHJvYmFiaWxpdGllc1xmUiwgaXQgcmVhZHMgYmFjayB0aGUgZGF0YSBnYXRoZXJlZAorZnJvbSBwcm9maWxpbmcgdmFsdWVzIG9mIGV4cHJlc3Npb25zIGZvciB1c2FnZSBpbiBvcHRpbWl6YXRpb25zLgorLlNwCitFbmFibGVkIHdpdGggXGZCXC1mcHJvZmlsZVwtZ2VuZXJhdGVcZlIgYW5kIFxmQlwtZnByb2ZpbGVcLXVzZVxmUi4KKy5JUCAiXGZCXC1mdnB0XGZSIiA0CisuSVggSXRlbSAiLWZ2cHQiCitJZiBjb21iaW5lZCB3aXRoIFxmQlwtZnByb2ZpbGVcLWFyY3NcZlIsIHRoaXMgb3B0aW9uIGluc3RydWN0cyB0aGUgY29tcGlsZXIKK3RvIGFkZCBjb2RlIHRvIGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCB2YWx1ZXMgb2YgZXhwcmVzc2lvbnMuCisuU3AKK1dpdGggXGZCXC1mYnJhbmNoXC1wcm9iYWJpbGl0aWVzXGZSLCBpdCByZWFkcyBiYWNrIHRoZSBkYXRhIGdhdGhlcmVkCithbmQgYWN0dWFsbHkgcGVyZm9ybXMgdGhlIG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlbS4KK0N1cnJlbnRseSB0aGUgb3B0aW1pemF0aW9ucyBpbmNsdWRlIHNwZWNpYWxpemF0aW9uIG9mIGRpdmlzaW9uIG9wZXJhdGlvbnMKK3VzaW5nIHRoZSBrbm93bGVkZ2UgYWJvdXQgdGhlIHZhbHVlIG9mIHRoZSBkZW5vbWluYXRvci4KKy5JUCAiXGZCXC1mcmVuYW1lXC1yZWdpc3RlcnNcZlIiIDQKKy5JWCBJdGVtICItZnJlbmFtZS1yZWdpc3RlcnMiCitBdHRlbXB0IHRvIGF2b2lkIGZhbHNlIGRlcGVuZGVuY2llcyBpbiBzY2hlZHVsZWQgY29kZSBieSBtYWtpbmcgdXNlCitvZiByZWdpc3RlcnMgbGVmdCBvdmVyIGFmdGVyIHJlZ2lzdGVyIGFsbG9jYXRpb24uICBUaGlzIG9wdGltaXphdGlvbgorbW9zdCBiZW5lZml0cyBwcm9jZXNzb3JzIHdpdGggbG90cyBvZiByZWdpc3RlcnMuICBEZXBlbmRpbmcgb24gdGhlCitkZWJ1ZyBpbmZvcm1hdGlvbiBmb3JtYXQgYWRvcHRlZCBieSB0aGUgdGFyZ2V0LCBob3dldmVyLCBpdCBjYW4KK21ha2UgZGVidWdnaW5nIGltcG9zc2libGUsIHNpbmNlIHZhcmlhYmxlcyBubyBsb25nZXIgc3RheSBpbgorYSBcKihMImhvbWUgcmVnaXN0ZXJcKihSIi4KKy5TcAorRW5hYmxlZCBieSBkZWZhdWx0IHdpdGggXGZCXC1mdW5yb2xsXC1sb29wc1xmUiBhbmQgXGZCXC1mcGVlbFwtbG9vcHNcZlIuCisuSVAgIlxmQlwtZnRyYWNlclxmUiIgNAorLklYIEl0ZW0gIi1mdHJhY2VyIgorUGVyZm9ybSB0YWlsIGR1cGxpY2F0aW9uIHRvIGVubGFyZ2Ugc3VwZXJibG9jayBzaXplLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbgorc2ltcGxpZmllcyB0aGUgY29udHJvbCBmbG93IG9mIHRoZSBmdW5jdGlvbiBhbGxvd2luZyBvdGhlciBvcHRpbWl6YXRpb25zIHRvIGRvCithIGJldHRlciBqb2IuCisuU3AKK0VuYWJsZWQgd2l0aCBcZkJcLWZwcm9maWxlXC11c2VcZlIuCisuSVAgIlxmQlwtZnVucm9sbFwtbG9vcHNcZlIiIDQKKy5JWCBJdGVtICItZnVucm9sbC1sb29wcyIKK1Vucm9sbCBsb29wcyB3aG9zZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBjYW4gYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUgb3IKK3Vwb24gZW50cnkgdG8gdGhlIGxvb3AuICBcZkJcLWZ1bnJvbGxcLWxvb3BzXGZSIGltcGxpZXMKK1wmXGZCXC1mcmVydW5cLWNzZVwtYWZ0ZXJcLWxvb3BcZlIsIFxmQlwtZndlYlxmUiBhbmQgXGZCXC1mcmVuYW1lXC1yZWdpc3RlcnNcZlIuCitJdCBhbHNvIHR1cm5zIG9uIGNvbXBsZXRlIGxvb3AgcGVlbGluZyAoaS5lLiBjb21wbGV0ZSByZW1vdmFsIG9mIGxvb3BzIHdpdGgKK2Egc21hbGwgY29uc3RhbnQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMpLiAgVGhpcyBvcHRpb24gbWFrZXMgY29kZSBsYXJnZXIsIGFuZCBtYXkKK29yIG1heSBub3QgbWFrZSBpdCBydW4gZmFzdGVyLgorLlNwCitFbmFibGVkIHdpdGggXGZCXC1mcHJvZmlsZVwtdXNlXGZSLgorLklQICJcZkJcLWZ1bnJvbGxcLWFsbFwtbG9vcHNcZlIiIDQKKy5JWCBJdGVtICItZnVucm9sbC1hbGwtbG9vcHMiCitVbnJvbGwgYWxsIGxvb3BzLCBldmVuIGlmIHRoZWlyIG51bWJlciBvZiBpdGVyYXRpb25zIGlzIHVuY2VydGFpbiB3aGVuCit0aGUgbG9vcCBpcyBlbnRlcmVkLiAgVGhpcyB1c3VhbGx5IG1ha2VzIHByb2dyYW1zIHJ1biBtb3JlIHNsb3dseS4KK1wmXGZCXC1mdW5yb2xsXC1hbGxcLWxvb3BzXGZSIGltcGxpZXMgdGhlIHNhbWUgb3B0aW9ucyBhcworXCZcZkJcLWZ1bnJvbGxcLWxvb3BzXGZSLgorLklQICJcZkJcLWZwZWVsXC1sb29wc1xmUiIgNAorLklYIEl0ZW0gIi1mcGVlbC1sb29wcyIKK1BlZWxzIGxvb3BzIGZvciB3aGljaCB0aGVyZSBpcyBlbm91Z2ggaW5mb3JtYXRpb24gdGhhdCB0aGV5IGRvIG5vdAorcm9sbCBtdWNoIChmcm9tIHByb2ZpbGUgZmVlZGJhY2spLiAgSXQgYWxzbyB0dXJucyBvbiBjb21wbGV0ZSBsb29wIHBlZWxpbmcKKyhpLmUuIGNvbXBsZXRlIHJlbW92YWwgb2YgbG9vcHMgd2l0aCBzbWFsbCBjb25zdGFudCBudW1iZXIgb2YgaXRlcmF0aW9ucykuCisuU3AKK0VuYWJsZWQgd2l0aCBcZkJcLWZwcm9maWxlXC11c2VcZlIuCisuSVAgIlxmQlwtZm1vdmVcLWxvb3BcLWludmFyaWFudHNcZlIiIDQKKy5JWCBJdGVtICItZm1vdmUtbG9vcC1pbnZhcmlhbnRzIgorRW5hYmxlcyB0aGUgbG9vcCBpbnZhcmlhbnQgbW90aW9uIHBhc3MgaW4gdGhlIFxzLTFSVExcczAgbG9vcCBvcHRpbWl6ZXIuICBFbmFibGVkCithdCBsZXZlbCBcZkJcLU8xXGZSCisuSVAgIlxmQlwtZnVuc3dpdGNoXC1sb29wc1xmUiIgNAorLklYIEl0ZW0gIi1mdW5zd2l0Y2gtbG9vcHMiCitNb3ZlIGJyYW5jaGVzIHdpdGggbG9vcCBpbnZhcmlhbnQgY29uZGl0aW9ucyBvdXQgb2YgdGhlIGxvb3AsIHdpdGggZHVwbGljYXRlcworb2YgdGhlIGxvb3Agb24gYm90aCBicmFuY2hlcyAobW9kaWZpZWQgYWNjb3JkaW5nIHRvIHJlc3VsdCBvZiB0aGUgY29uZGl0aW9uKS4KKy5JUCAiXGZCXC1mZnVuY3Rpb25cLXNlY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLWZmdW5jdGlvbi1zZWN0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtZmRhdGFcLXNlY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLWZkYXRhLXNlY3Rpb25zIgorLlBECitQbGFjZSBlYWNoIGZ1bmN0aW9uIG9yIGRhdGEgaXRlbSBpbnRvIGl0cyBvd24gc2VjdGlvbiBpbiB0aGUgb3V0cHV0CitmaWxlIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgYXJiaXRyYXJ5IHNlY3Rpb25zLiAgVGhlIG5hbWUgb2YgdGhlCitmdW5jdGlvbiBvciB0aGUgbmFtZSBvZiB0aGUgZGF0YSBpdGVtIGRldGVybWluZXMgdGhlIHNlY3Rpb24ncyBuYW1lCitpbiB0aGUgb3V0cHV0IGZpbGUuCisuU3AKK1VzZSB0aGVzZSBvcHRpb25zIG9uIHN5c3RlbXMgd2hlcmUgdGhlIGxpbmtlciBjYW4gcGVyZm9ybSBvcHRpbWl6YXRpb25zCit0byBpbXByb3ZlIGxvY2FsaXR5IG9mIHJlZmVyZW5jZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3BhY2UuICBNb3N0IHN5c3RlbXMKK3VzaW5nIHRoZSBccy0xRUxGXHMwIG9iamVjdCBmb3JtYXQgYW5kIFxzLTFTUEFSQ1xzMCBwcm9jZXNzb3JzIHJ1bm5pbmcgU29sYXJpcyAyIGhhdmUKK2xpbmtlcnMgd2l0aCBzdWNoIG9wdGltaXphdGlvbnMuICBccy0xQUlYXHMwIG1heSBoYXZlIHRoZXNlIG9wdGltaXphdGlvbnMgaW4KK3RoZSBmdXR1cmUuCisuU3AKK09ubHkgdXNlIHRoZXNlIG9wdGlvbnMgd2hlbiB0aGVyZSBhcmUgc2lnbmlmaWNhbnQgYmVuZWZpdHMgZnJvbSBkb2luZworc28uICBXaGVuIHlvdSBzcGVjaWZ5IHRoZXNlIG9wdGlvbnMsIHRoZSBhc3NlbWJsZXIgYW5kIGxpbmtlcgorY3JlYXRlIGxhcmdlciBvYmplY3QgYW5kIGV4ZWN1dGFibGUgZmlsZXMgYW5kIGFyZSBhbHNvIHNsb3dlci4KK1lvdSBjYW5ub3QgdXNlIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIG9uIGFsbCBzeXN0ZW1zIGlmIHlvdQorc3BlY2lmeSB0aGlzIG9wdGlvbiwgYW5kIHlvdSBtYXkgaGF2ZSBwcm9ibGVtcyB3aXRoIGRlYnVnZ2luZyBpZgoreW91IHNwZWNpZnkgYm90aCB0aGlzIG9wdGlvbiBhbmQgXGZCXC1nXGZSLgorLklQICJcZkJcLWZicmFuY2hcLXRhcmdldFwtbG9hZFwtb3B0aW1pemVcZlIiIDQKKy5JWCBJdGVtICItZmJyYW5jaC10YXJnZXQtbG9hZC1vcHRpbWl6ZSIKK1BlcmZvcm0gYnJhbmNoIHRhcmdldCByZWdpc3RlciBsb2FkIG9wdGltaXphdGlvbiBiZWZvcmUgcHJvbG9ndWUgLyBlcGlsb2d1ZQordGhyZWFkaW5nLgorVGhlIHVzZSBvZiB0YXJnZXQgcmVnaXN0ZXJzIGNhbiB0eXBpY2FsbHkgYmUgZXhwb3NlZCBvbmx5IGR1cmluZyByZWxvYWQsCit0aHVzIGhvaXN0aW5nIGxvYWRzIG91dCBvZiBsb29wcyBhbmQgZG9pbmcgaW50ZXItYmxvY2sgc2NoZWR1bGluZyBuZWVkcworYSBzZXBhcmF0ZSBvcHRpbWl6YXRpb24gcGFzcy4KKy5JUCAiXGZCXC1mYnJhbmNoXC10YXJnZXRcLWxvYWRcLW9wdGltaXplMlxmUiIgNAorLklYIEl0ZW0gIi1mYnJhbmNoLXRhcmdldC1sb2FkLW9wdGltaXplMiIKK1BlcmZvcm0gYnJhbmNoIHRhcmdldCByZWdpc3RlciBsb2FkIG9wdGltaXphdGlvbiBhZnRlciBwcm9sb2d1ZSAvIGVwaWxvZ3VlCit0aHJlYWRpbmcuCisuSVAgIlxmQlwtZmJ0clwtYmJcLWV4Y2x1c2l2ZVxmUiIgNAorLklYIEl0ZW0gIi1mYnRyLWJiLWV4Y2x1c2l2ZSIKK1doZW4gcGVyZm9ybWluZyBicmFuY2ggdGFyZ2V0IHJlZ2lzdGVyIGxvYWQgb3B0aW1pemF0aW9uLCBkb24ndCByZXVzZQorYnJhbmNoIHRhcmdldCByZWdpc3RlcnMgd2l0aGluIGFueSBiYXNpYyBibG9jay4KKy5JUCAiXGZCXC1mc3RhY2tcLXByb3RlY3RvclxmUiIgNAorLklYIEl0ZW0gIi1mc3RhY2stcHJvdGVjdG9yIgorRW1pdCBleHRyYSBjb2RlIHRvIGNoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3dzLCBzdWNoIGFzIHN0YWNrIHNtYXNoaW5nCithdHRhY2tzLiAgVGhpcyBpcyBkb25lIGJ5IGFkZGluZyBhIGd1YXJkIHZhcmlhYmxlIHRvIGZ1bmN0aW9ucyB3aXRoCit2dWxuZXJhYmxlIG9iamVjdHMuICBUaGlzIGluY2x1ZGVzIGZ1bmN0aW9ucyB0aGF0IGNhbGwgXGYoQ1dcKihDYGFsbG9jYVwqKEMnXGZSLCBhbmQKK2Z1bmN0aW9ucyB3aXRoIGJ1ZmZlcnMgbGFyZ2VyIHRoYW4gOCBieXRlcy4gIFRoZSBndWFyZHMgYXJlIGluaXRpYWxpemVkCit3aGVuIGEgZnVuY3Rpb24gaXMgZW50ZXJlZCBhbmQgdGhlbiBjaGVja2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGV4aXRzLgorSWYgYSBndWFyZCBjaGVjayBmYWlscywgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkIGFuZCB0aGUgcHJvZ3JhbSBleGl0cy4KKy5JUCAiXGZCXC1mc3RhY2tcLXByb3RlY3RvclwtYWxsXGZSIiA0CisuSVggSXRlbSAiLWZzdGFjay1wcm90ZWN0b3ItYWxsIgorTGlrZSBcZkJcLWZzdGFja1wtcHJvdGVjdG9yXGZSIGV4Y2VwdCB0aGF0IGFsbCBmdW5jdGlvbnMgYXJlIHByb3RlY3RlZC4KKy5JUCAiXGZCXC1mc2VjdGlvblwtYW5jaG9yc1xmUiIgNAorLklYIEl0ZW0gIi1mc2VjdGlvbi1hbmNob3JzIgorVHJ5IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHN5bWJvbGljIGFkZHJlc3MgY2FsY3VsYXRpb25zIGJ5IHVzaW5nCitzaGFyZWQgXCooTCJhbmNob3JcKihSIiBzeW1ib2xzIHRvIGFkZHJlc3MgbmVhcmJ5IG9iamVjdHMuICBUaGlzIHRyYW5zZm9ybWF0aW9uCitjYW4gaGVscCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBccy0xR09UXHMwIGVudHJpZXMgYW5kIFxzLTFHT1RcczAgYWNjZXNzZXMgb24gc29tZQordGFyZ2V0cy4KKy5TcAorRm9yIGV4YW1wbGUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIFxmKENXXCooQ2Bmb29cKihDJ1xmUjoKKy5TcAorLlZiIDIKK1wmICAgICAgICBzdGF0aWMgaW50IGEsIGIsIGM7CitcJiAgICAgICAgaW50IGZvbyAodm9pZCkgeyByZXR1cm4gYSArIGIgKyBjOyB9CisuVmUKKy5TcAordXN1YWxseSBjYWxjdWxhdGVzIHRoZSBhZGRyZXNzZXMgb2YgYWxsIHRocmVlIHZhcmlhYmxlcywgYnV0IGlmIHlvdQorY29tcGlsZSBpdCB3aXRoIFxmQlwtZnNlY3Rpb25cLWFuY2hvcnNcZlIsIGl0IGFjY2Vzc2VzIHRoZSB2YXJpYWJsZXMKK2Zyb20gYSBjb21tb24gYW5jaG9yIHBvaW50IGluc3RlYWQuICBUaGUgZWZmZWN0IGlzIHNpbWlsYXIgdG8gdGhlCitmb2xsb3dpbmcgcHNldWRvY29kZSAod2hpY2ggaXNuJ3QgdmFsaWQgQyk6CisuU3AKKy5WYiA1CitcJiAgICAgICAgaW50IGZvbyAodm9pZCkKK1wmICAgICAgICB7CitcJiAgICAgICAgICByZWdpc3RlciBpbnQgKnhyID0gJng7CitcJiAgICAgICAgICByZXR1cm4geHJbJmEgXC0gJnhdICsgeHJbJmIgXC0gJnhdICsgeHJbJmMgXC0gJnhdOworXCYgICAgICAgIH0KKy5WZQorLlNwCitOb3QgYWxsIHRhcmdldHMgc3VwcG9ydCB0aGlzIG9wdGlvbi4KKy5JUCAiXGZCXC1cLXBhcmFtXGZSIFxmSW5hbWVcZlJcZkI9XGZSXGZJdmFsdWVcZlIiIDQKKy5JWCBJdGVtICItLXBhcmFtIG5hbWU9dmFsdWUiCitJbiBzb21lIHBsYWNlcywgXHMtMUdDQ1xzMCB1c2VzIHZhcmlvdXMgY29uc3RhbnRzIHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZgorb3B0aW1pemF0aW9uIHRoYXQgaXMgZG9uZS4gIEZvciBleGFtcGxlLCBccy0xR0NDXHMwIGRvZXMgbm90IGlubGluZSBmdW5jdGlvbnMKK3RoYXQgY29udGFpbiBtb3JlIHRoYW4gYSBjZXJ0YWluIG51bWJlciBvZiBpbnN0cnVjdGlvbnMuICBZb3UgY2FuCitjb250cm9sIHNvbWUgb2YgdGhlc2UgY29uc3RhbnRzIG9uIHRoZSBjb21tYW5kIGxpbmUgdXNpbmcgdGhlCitcJlxmQlwtXC1wYXJhbVxmUiBvcHRpb24uCisuU3AKK1RoZSBuYW1lcyBvZiBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBhbmQgdGhlIG1lYW5pbmcgb2YgdGhlIHZhbHVlcywgYXJlCit0aWVkIHRvIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGNvbXBpbGVyLCBhbmQgYXJlIHN1YmplY3QgdG8gY2hhbmdlCit3aXRob3V0IG5vdGljZSBpbiBmdXR1cmUgcmVsZWFzZXMuCisuU3AKK0luIGVhY2ggY2FzZSwgdGhlIFxmSXZhbHVlXGZSIGlzIGFuIGludGVnZXIuICBUaGUgYWxsb3dhYmxlIGNob2ljZXMgZm9yCitcJlxmSW5hbWVcZlIgYXJlOgorLlJTIDQKKy5JUCAiXGZCcHJlZGljdGFibGUtYnJhbmNoLW91dGNvbWVcZlIiIDQKKy5JWCBJdGVtICJwcmVkaWN0YWJsZS1icmFuY2gtb3V0Y29tZSIKK1doZW4gYnJhbmNoIGlzIHByZWRpY3RlZCB0byBiZSB0YWtlbiB3aXRoIHByb2JhYmlsaXR5IGxvd2VyIHRoYW4gdGhpcyB0aHJlc2hvbGQKKyhpbiBwZXJjZW50KSwgdGhlbiBpdCBpcyBjb25zaWRlcmVkIHdlbGwgcHJlZGljdGFibGUuIFRoZSBkZWZhdWx0IGlzIDEwLgorLklQICJcZkJtYXgtY3Jvc3NqdW1wLWVkZ2VzXGZSIiA0CisuSVggSXRlbSAibWF4LWNyb3NzanVtcC1lZGdlcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBpbmNvbWluZyBlZGdlcyB0byBjb25zaWRlciBmb3IgY3Jvc3MtanVtcGluZy4KK1RoZSBhbGdvcml0aG0gdXNlZCBieSBcZkJcLWZjcm9zc2p1bXBpbmdcZlIgaXMgTyhOXjIpIGluCit0aGUgbnVtYmVyIG9mIGVkZ2VzIGluY29taW5nIHRvIGVhY2ggYmxvY2suICBJbmNyZWFzaW5nIHZhbHVlcyBtZWFuCittb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLCBtYWtpbmcgdGhlIGNvbXBpbGF0aW9uIHRpbWUgaW5jcmVhc2Ugd2l0aAorcHJvYmFibHkgc21hbGwgaW1wcm92ZW1lbnQgaW4gZXhlY3V0YWJsZSBzaXplLgorLklQICJcZkJtaW4tY3Jvc3NqdW1wLWluc25zXGZSIiA0CisuSVggSXRlbSAibWluLWNyb3NzanVtcC1pbnNucyIKK1RoZSBtaW5pbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhhdCBtdXN0IGJlIG1hdGNoZWQgYXQgdGhlIGVuZAorb2YgdHdvIGJsb2NrcyBiZWZvcmUgY3Jvc3MtanVtcGluZyBpcyBwZXJmb3JtZWQgb24gdGhlbS4gIFRoaXMKK3ZhbHVlIGlzIGlnbm9yZWQgaW4gdGhlIGNhc2Ugd2hlcmUgYWxsIGluc3RydWN0aW9ucyBpbiB0aGUgYmxvY2sgYmVpbmcKK2Nyb3NzLWp1bXBlZCBmcm9tIGFyZSBtYXRjaGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS4KKy5JUCAiXGZCbWF4LWdyb3ctY29weS1iYi1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1heC1ncm93LWNvcHktYmItaW5zbnMiCitUaGUgbWF4aW11bSBjb2RlIHNpemUgZXhwYW5zaW9uIGZhY3RvciB3aGVuIGNvcHlpbmcgYmFzaWMgYmxvY2tzCitpbnN0ZWFkIG9mIGp1bXBpbmcuICBUaGUgZXhwYW5zaW9uIGlzIHJlbGF0aXZlIHRvIGEganVtcCBpbnN0cnVjdGlvbi4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDguCisuSVAgIlxmQm1heC1nb3RvLWR1cGxpY2F0aW9uLWluc25zXGZSIiA0CisuSVggSXRlbSAibWF4LWdvdG8tZHVwbGljYXRpb24taW5zbnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRvIGR1cGxpY2F0ZSB0byBhIGJsb2NrIHRoYXQganVtcHMKK3RvIGEgY29tcHV0ZWQgZ290by4gIFRvIGF2b2lkIE8oTl4yKSBiZWhhdmlvciBpbiBhIG51bWJlciBvZgorcGFzc2VzLCBccy0xR0NDXHMwIGZhY3RvcnMgY29tcHV0ZWQgZ290b3MgZWFybHkgaW4gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsCithbmQgdW5mYWN0b3JzIHRoZW0gYXMgbGF0ZSBhcyBwb3NzaWJsZS4gIE9ubHkgY29tcHV0ZWQganVtcHMgYXQgdGhlCitlbmQgb2YgYSBiYXNpYyBibG9ja3Mgd2l0aCBubyBtb3JlIHRoYW4gbWF4LWdvdG8tZHVwbGljYXRpb24taW5zbnMgYXJlCit1bmZhY3RvcmVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgOC4KKy5JUCAiXGZCbWF4LWRlbGF5LXNsb3QtaW5zbi1zZWFyY2hcZlIiIDQKKy5JWCBJdGVtICJtYXgtZGVsYXktc2xvdC1pbnNuLXNlYXJjaCIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdG8gY29uc2lkZXIgd2hlbiBsb29raW5nIGZvciBhbgoraW5zdHJ1Y3Rpb24gdG8gZmlsbCBhIGRlbGF5IHNsb3QuICBJZiBtb3JlIHRoYW4gdGhpcyBhcmJpdHJhcnkgbnVtYmVyIG9mCitpbnN0cnVjdGlvbnMgYXJlIHNlYXJjaGVkLCB0aGUgdGltZSBzYXZpbmdzIGZyb20gZmlsbGluZyB0aGUgZGVsYXkgc2xvdAorYXJlIG1pbmltYWwsIHNvIHN0b3Agc2VhcmNoaW5nLiAgSW5jcmVhc2luZyB2YWx1ZXMgbWVhbiBtb3JlCithZ2dyZXNzaXZlIG9wdGltaXphdGlvbiwgbWFraW5nIHRoZSBjb21waWxhdGlvbiB0aW1lIGluY3JlYXNlIHdpdGggcHJvYmFibHkKK3NtYWxsIGltcHJvdmVtZW50IGluIGV4ZWN1dGlvbiB0aW1lLgorLklQICJcZkJtYXgtZGVsYXktc2xvdC1saXZlLXNlYXJjaFxmUiIgNAorLklYIEl0ZW0gIm1heC1kZWxheS1zbG90LWxpdmUtc2VhcmNoIgorV2hlbiB0cnlpbmcgdG8gZmlsbCBkZWxheSBzbG90cywgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0bworY29uc2lkZXIgd2hlbiBzZWFyY2hpbmcgZm9yIGEgYmxvY2sgd2l0aCB2YWxpZCBsaXZlIHJlZ2lzdGVyCitpbmZvcm1hdGlvbi4gIEluY3JlYXNpbmcgdGhpcyBhcmJpdHJhcmlseSBjaG9zZW4gdmFsdWUgbWVhbnMgbW9yZQorYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24sIGluY3JlYXNpbmcgdGhlIGNvbXBpbGF0aW9uIHRpbWUuICBUaGlzIHBhcmFtZXRlcgorc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgZGVsYXkgc2xvdCBjb2RlIGlzIHJld3JpdHRlbiB0byBtYWludGFpbiB0aGUKK2NvbnRyb2wtZmxvdyBncmFwaC4KKy5JUCAiXGZCbWF4LWdjc2UtbWVtb3J5XGZSIiA0CisuSVggSXRlbSAibWF4LWdjc2UtbWVtb3J5IgorVGhlIGFwcHJveGltYXRlIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgaW4KK29yZGVyIHRvIHBlcmZvcm0gdGhlIGdsb2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbgorb3B0aW1pemF0aW9uLiAgSWYgbW9yZSBtZW1vcnkgdGhhbiBzcGVjaWZpZWQgaXMgcmVxdWlyZWQsIHRoZQorb3B0aW1pemF0aW9uIGlzIG5vdCBkb25lLgorLklQICJcZkJtYXgtZ2NzZS1pbnNlcnRpb24tcmF0aW9cZlIiIDQKKy5JWCBJdGVtICJtYXgtZ2NzZS1pbnNlcnRpb24tcmF0aW8iCitJZiB0aGUgcmF0aW8gb2YgZXhwcmVzc2lvbiBpbnNlcnRpb25zIHRvIGRlbGV0aW9ucyBpcyBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlCitmb3IgYW55IGV4cHJlc3Npb24sIHRoZW4gXHMtMVJUTFxzMCBccy0xUFJFXHMwIGluc2VydHMgb3IgcmVtb3ZlcyB0aGUgZXhwcmVzc2lvbiBhbmQgdGh1cworbGVhdmVzIHBhcnRpYWxseSByZWR1bmRhbnQgY29tcHV0YXRpb25zIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMC4KKy5JUCAiXGZCbWF4LXBlbmRpbmctbGlzdC1sZW5ndGhcZlIiIDQKKy5JWCBJdGVtICJtYXgtcGVuZGluZy1saXN0LWxlbmd0aCIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBwZW5kaW5nIGRlcGVuZGVuY2llcyBzY2hlZHVsaW5nIGFsbG93cworYmVmb3JlIGZsdXNoaW5nIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBzdGFydGluZyBvdmVyLiAgTGFyZ2UgZnVuY3Rpb25zCit3aXRoIGZldyBicmFuY2hlcyBvciBjYWxscyBjYW4gY3JlYXRlIGV4Y2Vzc2l2ZWx5IGxhcmdlIGxpc3RzIHdoaWNoCituZWVkbGVzc2x5IGNvbnN1bWUgbWVtb3J5IGFuZCByZXNvdXJjZXMuCisuSVAgIlxmQm1heC1tb2R1bG8tYmFja3RyYWNrLWF0dGVtcHRzXGZSIiA0CisuSVggSXRlbSAibWF4LW1vZHVsby1iYWNrdHJhY2stYXR0ZW1wdHMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgYmFja3RyYWNrIGF0dGVtcHRzIHRoZSBzY2hlZHVsZXIgc2hvdWxkIG1ha2UKK3doZW4gbW9kdWxvIHNjaGVkdWxpbmcgYSBsb29wLiAgTGFyZ2VyIHZhbHVlcyBjYW4gZXhwb25lbnRpYWxseSBpbmNyZWFzZQorY29tcGlsYXRpb24gdGltZS4KKy5JUCAiXGZCbWF4LWlubGluZS1pbnNucy1zaW5nbGVcZlIiIDQKKy5JWCBJdGVtICJtYXgtaW5saW5lLWluc25zLXNpbmdsZSIKK1NldmVyYWwgcGFyYW1ldGVycyBjb250cm9sIHRoZSB0cmVlIGlubGluZXIgdXNlZCBpbiBccy0xR0NDXHMwLgorVGhpcyBudW1iZXIgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIChjb3VudGVkIGluIFxzLTFHQ0NcczAncworaW50ZXJuYWwgcmVwcmVzZW50YXRpb24pIGluIGEgc2luZ2xlIGZ1bmN0aW9uIHRoYXQgdGhlIHRyZWUgaW5saW5lcgorY29uc2lkZXJzIGZvciBpbmxpbmluZy4gIFRoaXMgb25seSBhZmZlY3RzIGZ1bmN0aW9ucyBkZWNsYXJlZAoraW5saW5lIGFuZCBtZXRob2RzIGltcGxlbWVudGVkIGluIGEgY2xhc3MgZGVjbGFyYXRpb24gKFwqKEMrKS4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDQwMC4KKy5JUCAiXGZCbWF4LWlubGluZS1pbnNucy1hdXRvXGZSIiA0CisuSVggSXRlbSAibWF4LWlubGluZS1pbnNucy1hdXRvIgorV2hlbiB5b3UgdXNlIFxmQlwtZmlubGluZVwtZnVuY3Rpb25zXGZSIChpbmNsdWRlZCBpbiBcZkJcLU8zXGZSKSwKK2EgbG90IG9mIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG90aGVyd2lzZSBub3QgYmUgY29uc2lkZXJlZCBmb3IgaW5saW5pbmcKK2J5IHRoZSBjb21waWxlciBhcmUgaW52ZXN0aWdhdGVkLiAgVG8gdGhvc2UgZnVuY3Rpb25zLCBhIGRpZmZlcmVudAorKG1vcmUgcmVzdHJpY3RpdmUpIGxpbWl0IGNvbXBhcmVkIHRvIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbmxpbmUgY2FuCitiZSBhcHBsaWVkLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgNDAuCisuSVAgIlxmQmlubGluZS1taW4tc3BlZWR1cFxmUiIgNAorLklYIEl0ZW0gImlubGluZS1taW4tc3BlZWR1cCIKK1doZW4gZXN0aW1hdGVkIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9mIGNhbGxlciArIGNhbGxlZSBydW50aW1lIGV4Y2VlZHMgdGhpcwordGhyZXNob2xkIChpbiBwcmVjZW50KSwgdGhlIGZ1bmN0aW9uIGNhbiBiZSBpbmxpbmVkIHJlZ2FyZGxlc3MgdGhlIGxpbWl0IG9uCitcJlxmQlwtXC1wYXJhbSBtYXgtaW5saW5lLWluc25zLXNpbmdsZVxmUiBhbmQgXGZCXC1cLXBhcmFtCittYXgtaW5saW5lLWluc25zLWF1dG9cZlIuCisuSVAgIlxmQmxhcmdlLWZ1bmN0aW9uLWluc25zXGZSIiA0CisuSVggSXRlbSAibGFyZ2UtZnVuY3Rpb24taW5zbnMiCitUaGUgbGltaXQgc3BlY2lmeWluZyByZWFsbHkgbGFyZ2UgZnVuY3Rpb25zLiAgRm9yIGZ1bmN0aW9ucyBsYXJnZXIgdGhhbiB0aGlzCitsaW1pdCBhZnRlciBpbmxpbmluZywgaW5saW5pbmcgaXMgY29uc3RyYWluZWQgYnkKK1wmXGZCXC1cLXBhcmFtIGxhcmdlLWZ1bmN0aW9uLWdyb3d0aFxmUi4gIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWZ1bCBwcmltYXJpbHkKK3RvIGF2b2lkIGV4dHJlbWUgY29tcGlsYXRpb24gdGltZSBjYXVzZWQgYnkgbm9uLWxpbmVhciBhbGdvcml0aG1zIHVzZWQgYnkgdGhlCitiYWNrIGVuZC4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDI3MDAuCisuSVAgIlxmQmxhcmdlLWZ1bmN0aW9uLWdyb3d0aFxmUiIgNAorLklYIEl0ZW0gImxhcmdlLWZ1bmN0aW9uLWdyb3d0aCIKK1NwZWNpZmllcyBtYXhpbWFsIGdyb3d0aCBvZiBsYXJnZSBmdW5jdGlvbiBjYXVzZWQgYnkgaW5saW5pbmcgaW4gcGVyY2VudHMuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAgd2hpY2ggbGltaXRzIGxhcmdlIGZ1bmN0aW9uIGdyb3d0aCB0byAyLjAgdGltZXMKK3RoZSBvcmlnaW5hbCBzaXplLgorLklQICJcZkJsYXJnZS11bml0LWluc25zXGZSIiA0CisuSVggSXRlbSAibGFyZ2UtdW5pdC1pbnNucyIKK1RoZSBsaW1pdCBzcGVjaWZ5aW5nIGxhcmdlIHRyYW5zbGF0aW9uIHVuaXQuICBHcm93dGggY2F1c2VkIGJ5IGlubGluaW5nIG9mCit1bml0cyBsYXJnZXIgdGhhbiB0aGlzIGxpbWl0IGlzIGxpbWl0ZWQgYnkgXGZCXC1cLXBhcmFtIGlubGluZS11bml0LWdyb3d0aFxmUi4KK0ZvciBzbWFsbCB1bml0cyB0aGlzIG1pZ2h0IGJlIHRvbyB0aWdodC4KK0ZvciBleGFtcGxlLCBjb25zaWRlciBhIHVuaXQgY29uc2lzdGluZyBvZiBmdW5jdGlvbiBBCit0aGF0IGlzIGlubGluZSBhbmQgQiB0aGF0IGp1c3QgY2FsbHMgQSB0aHJlZSB0aW1lcy4gIElmIEIgaXMgc21hbGwgcmVsYXRpdmUgdG8KK0EsIHRoZSBncm93dGggb2YgdW5pdCBpcyAzMDBcZSUgYW5kIHlldCBzdWNoIGlubGluaW5nIGlzIHZlcnkgc2FuZS4gIEZvciB2ZXJ5CitsYXJnZSB1bml0cyBjb25zaXN0aW5nIG9mIHNtYWxsIGlubGluZWFibGUgZnVuY3Rpb25zLCBob3dldmVyLCB0aGUgb3ZlcmFsbCB1bml0Citncm93dGggbGltaXQgaXMgbmVlZGVkIHRvIGF2b2lkIGV4cG9uZW50aWFsIGV4cGxvc2lvbiBvZiBjb2RlIHNpemUuICBUaHVzIGZvcgorc21hbGxlciB1bml0cywgdGhlIHNpemUgaXMgaW5jcmVhc2VkIHRvIFxmQlwtXC1wYXJhbSBsYXJnZS11bml0LWluc25zXGZSCitiZWZvcmUgYXBwbHlpbmcgXGZCXC1cLXBhcmFtIGlubGluZS11bml0LWdyb3d0aFxmUi4gIFRoZSBkZWZhdWx0IGlzIDEwMDAwLgorLklQICJcZkJpbmxpbmUtdW5pdC1ncm93dGhcZlIiIDQKKy5JWCBJdGVtICJpbmxpbmUtdW5pdC1ncm93dGgiCitTcGVjaWZpZXMgbWF4aW1hbCBvdmVyYWxsIGdyb3d0aCBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCBjYXVzZWQgYnkgaW5saW5pbmcuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzMCB3aGljaCBsaW1pdHMgdW5pdCBncm93dGggdG8gMS4zIHRpbWVzIHRoZSBvcmlnaW5hbAorc2l6ZS4KKy5JUCAiXGZCaXBjcC11bml0LWdyb3d0aFxmUiIgNAorLklYIEl0ZW0gImlwY3AtdW5pdC1ncm93dGgiCitTcGVjaWZpZXMgbWF4aW1hbCBvdmVyYWxsIGdyb3d0aCBvZiB0aGUgY29tcGlsYXRpb24gdW5pdCBjYXVzZWQgYnkKK2ludGVycHJvY2VkdXJhbCBjb25zdGFudCBwcm9wYWdhdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwIHdoaWNoIGxpbWl0cwordW5pdCBncm93dGggdG8gMS4xIHRpbWVzIHRoZSBvcmlnaW5hbCBzaXplLgorLklQICJcZkJsYXJnZS1zdGFjay1mcmFtZVxmUiIgNAorLklYIEl0ZW0gImxhcmdlLXN0YWNrLWZyYW1lIgorVGhlIGxpbWl0IHNwZWNpZnlpbmcgbGFyZ2Ugc3RhY2sgZnJhbWVzLiAgV2hpbGUgaW5saW5pbmcgdGhlIGFsZ29yaXRobSBpcyB0cnlpbmcKK3RvIG5vdCBncm93IHBhc3QgdGhpcyBsaW1pdCB0b28gbXVjaC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDI1NiBieXRlcy4KKy5JUCAiXGZCbGFyZ2Utc3RhY2stZnJhbWUtZ3Jvd3RoXGZSIiA0CisuSVggSXRlbSAibGFyZ2Utc3RhY2stZnJhbWUtZ3Jvd3RoIgorU3BlY2lmaWVzIG1heGltYWwgZ3Jvd3RoIG9mIGxhcmdlIHN0YWNrIGZyYW1lcyBjYXVzZWQgYnkgaW5saW5pbmcgaW4gcGVyY2VudHMuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAwIHdoaWNoIGxpbWl0cyBsYXJnZSBzdGFjayBmcmFtZSBncm93dGggdG8gMTEgdGltZXMKK3RoZSBvcmlnaW5hbCBzaXplLgorLklQICJcZkJtYXgtaW5saW5lLWluc25zLXJlY3Vyc2l2ZVxmUiIgNAorLklYIEl0ZW0gIm1heC1pbmxpbmUtaW5zbnMtcmVjdXJzaXZlIgorLlBEIDAKKy5JUCAiXGZCbWF4LWlubGluZS1pbnNucy1yZWN1cnNpdmUtYXV0b1xmUiIgNAorLklYIEl0ZW0gIm1heC1pbmxpbmUtaW5zbnMtcmVjdXJzaXZlLWF1dG8iCisuUEQKK1NwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIGFuIG91dC1vZi1saW5lIGNvcHkgb2YgYQorc2VsZi1yZWN1cnNpdmUgaW5saW5lCitmdW5jdGlvbiBjYW4gZ3JvdyBpbnRvIGJ5IHBlcmZvcm1pbmcgcmVjdXJzaXZlIGlubGluaW5nLgorLlNwCitGb3IgZnVuY3Rpb25zIGRlY2xhcmVkIGlubGluZSwgXGZCXC1cLXBhcmFtIG1heC1pbmxpbmUtaW5zbnMtcmVjdXJzaXZlXGZSIGlzCit0YWtlbiBpbnRvIGFjY291bnQuICBGb3IgZnVuY3Rpb25zIG5vdCBkZWNsYXJlZCBpbmxpbmUsIHJlY3Vyc2l2ZSBpbmxpbmluZworaGFwcGVucyBvbmx5IHdoZW4gXGZCXC1maW5saW5lXC1mdW5jdGlvbnNcZlIgKGluY2x1ZGVkIGluIFxmQlwtTzNcZlIpIGlzCitlbmFibGVkIGFuZCBcZkJcLVwtcGFyYW0gbWF4LWlubGluZS1pbnNucy1yZWN1cnNpdmUtYXV0b1xmUiBpcyB1c2VkLiAgVGhlCitkZWZhdWx0IHZhbHVlIGlzIDQ1MC4KKy5JUCAiXGZCbWF4LWlubGluZS1yZWN1cnNpdmUtZGVwdGhcZlIiIDQKKy5JWCBJdGVtICJtYXgtaW5saW5lLXJlY3Vyc2l2ZS1kZXB0aCIKKy5QRCAwCisuSVAgIlxmQm1heC1pbmxpbmUtcmVjdXJzaXZlLWRlcHRoLWF1dG9cZlIiIDQKKy5JWCBJdGVtICJtYXgtaW5saW5lLXJlY3Vyc2l2ZS1kZXB0aC1hdXRvIgorLlBECitTcGVjaWZpZXMgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHVzZWQgZm9yIHJlY3Vyc2l2ZSBpbmxpbmluZy4KKy5TcAorRm9yIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbmxpbmUsIFxmQlwtXC1wYXJhbSBtYXgtaW5saW5lLXJlY3Vyc2l2ZS1kZXB0aFxmUiBpcwordGFrZW4gaW50byBhY2NvdW50LiAgRm9yIGZ1bmN0aW9ucyBub3QgZGVjbGFyZWQgaW5saW5lLCByZWN1cnNpdmUgaW5saW5pbmcKK2hhcHBlbnMgb25seSB3aGVuIFxmQlwtZmlubGluZVwtZnVuY3Rpb25zXGZSIChpbmNsdWRlZCBpbiBcZkJcLU8zXGZSKSBpcworZW5hYmxlZCBhbmQgXGZCXC1cLXBhcmFtIG1heC1pbmxpbmUtcmVjdXJzaXZlLWRlcHRoLWF1dG9cZlIgaXMgdXNlZC4gIFRoZQorZGVmYXVsdCB2YWx1ZSBpcyA4LgorLklQICJcZkJtaW4taW5saW5lLXJlY3Vyc2l2ZS1wcm9iYWJpbGl0eVxmUiIgNAorLklYIEl0ZW0gIm1pbi1pbmxpbmUtcmVjdXJzaXZlLXByb2JhYmlsaXR5IgorUmVjdXJzaXZlIGlubGluaW5nIGlzIHByb2ZpdGFibGUgb25seSBmb3IgZnVuY3Rpb24gaGF2aW5nIGRlZXAgcmVjdXJzaW9uCitpbiBhdmVyYWdlIGFuZCBjYW4gaHVydCBmb3IgZnVuY3Rpb24gaGF2aW5nIGxpdHRsZSByZWN1cnNpb24gZGVwdGggYnkKK2luY3JlYXNpbmcgdGhlIHByb2xvZ3VlIHNpemUgb3IgY29tcGxleGl0eSBvZiBmdW5jdGlvbiBib2R5IHRvIG90aGVyCitvcHRpbWl6ZXJzLgorLlNwCitXaGVuIHByb2ZpbGUgZmVlZGJhY2sgaXMgYXZhaWxhYmxlIChzZWUgXGZCXC1mcHJvZmlsZVwtZ2VuZXJhdGVcZlIpIHRoZSBhY3R1YWwKK3JlY3Vyc2lvbiBkZXB0aCBjYW4gYmUgZ3Vlc3NlZCBmcm9tIHByb2JhYmlsaXR5IHRoYXQgZnVuY3Rpb24gcmVjdXJzZXMgdmlhIGEKK2dpdmVuIGNhbGwgZXhwcmVzc2lvbi4gIFRoaXMgcGFyYW1ldGVyIGxpbWl0cyBpbmxpbmluZyBvbmx5IHRvIGNhbGwgZXhwcmVzc2lvbnMKK3dob3NlIHByb2JhYmlsaXR5IGV4Y2VlZHMgdGhlIGdpdmVuIHRocmVzaG9sZCAoaW4gcGVyY2VudHMpLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisuSVAgIlxmQmVhcmx5LWlubGluaW5nLWluc25zXGZSIiA0CisuSVggSXRlbSAiZWFybHktaW5saW5pbmctaW5zbnMiCitTcGVjaWZ5IGdyb3d0aCB0aGF0IHRoZSBlYXJseSBpbmxpbmVyIGNhbiBtYWtlLiAgSW4gZWZmZWN0IGl0IGluY3JlYXNlcwordGhlIGFtb3VudCBvZiBpbmxpbmluZyBmb3IgY29kZSBoYXZpbmcgYSBsYXJnZSBhYnN0cmFjdGlvbiBwZW5hbHR5LgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisuSVAgIlxmQm1heC1lYXJseS1pbmxpbmVyLWl0ZXJhdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtZWFybHktaW5saW5lci1pdGVyYXRpb25zIgorLlBEIDAKKy5JUCAiXGZCbWF4LWVhcmx5LWlubGluZXItaXRlcmF0aW9uc1xmUiIgNAorLklYIEl0ZW0gIm1heC1lYXJseS1pbmxpbmVyLWl0ZXJhdGlvbnMiCisuUEQKK0xpbWl0IG9mIGl0ZXJhdGlvbnMgb2YgdGhlIGVhcmx5IGlubGluZXIuICBUaGlzIGJhc2ljYWxseSBib3VuZHMKK3RoZSBudW1iZXIgb2YgbmVzdGVkIGluZGlyZWN0IGNhbGxzIHRoZSBlYXJseSBpbmxpbmVyIGNhbiByZXNvbHZlLgorRGVlcGVyIGNoYWlucyBhcmUgc3RpbGwgaGFuZGxlZCBieSBsYXRlIGlubGluaW5nLgorLklQICJcZkJjb21kYXQtc2hhcmluZy1wcm9iYWJpbGl0eVxmUiIgNAorLklYIEl0ZW0gImNvbWRhdC1zaGFyaW5nLXByb2JhYmlsaXR5IgorLlBEIDAKKy5JUCAiXGZCY29tZGF0LXNoYXJpbmctcHJvYmFiaWxpdHlcZlIiIDQKKy5JWCBJdGVtICJjb21kYXQtc2hhcmluZy1wcm9iYWJpbGl0eSIKKy5QRAorUHJvYmFiaWxpdHkgKGluIHBlcmNlbnQpIHRoYXQgXCooQysgaW5saW5lIGZ1bmN0aW9uIHdpdGggY29tZGF0IHZpc2liaWxpdHkKK2FyZSBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjAuCisuSVAgIlxmQm1pbi12ZWN0LWxvb3AtYm91bmRcZlIiIDQKKy5JWCBJdGVtICJtaW4tdmVjdC1sb29wLWJvdW5kIgorVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdW5kZXIgd2hpY2ggbG9vcHMgYXJlIG5vdCB2ZWN0b3JpemVkCit3aGVuIFxmQlwtZnRyZWVcLXZlY3Rvcml6ZVxmUiBpcyB1c2VkLiAgVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGFmdGVyCit2ZWN0b3JpemF0aW9uIG5lZWRzIHRvIGJlIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoaXMgb3B0aW9uCit0byBhbGxvdyB2ZWN0b3JpemF0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKy5JUCAiXGZCZ2NzZS1jb3N0LWRpc3RhbmNlLXJhdGlvXGZSIiA0CisuSVggSXRlbSAiZ2NzZS1jb3N0LWRpc3RhbmNlLXJhdGlvIgorU2NhbGluZyBmYWN0b3IgaW4gY2FsY3VsYXRpb24gb2YgbWF4aW11bSBkaXN0YW5jZSBhbiBleHByZXNzaW9uCitjYW4gYmUgbW92ZWQgYnkgXHMtMUdDU0VcczAgb3B0aW1pemF0aW9ucy4gIFRoaXMgaXMgY3VycmVudGx5IHN1cHBvcnRlZCBvbmx5IGluIHRoZQorY29kZSBob2lzdGluZyBwYXNzLiAgVGhlIGJpZ2dlciB0aGUgcmF0aW8sIHRoZSBtb3JlIGFnZ3Jlc3NpdmUgY29kZSBob2lzdGluZworaXMgd2l0aCBzaW1wbGUgZXhwcmVzc2lvbnMsIGkuZS4sIHRoZSBleHByZXNzaW9ucyB0aGF0IGhhdmUgY29zdAorbGVzcyB0aGFuIFxmQmdjc2UtdW5yZXN0cmljdGVkLWNvc3RcZlIuICBTcGVjaWZ5aW5nIDAgZGlzYWJsZXMKK2hvaXN0aW5nIG9mIHNpbXBsZSBleHByZXNzaW9ucy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorLklQICJcZkJnY3NlLXVucmVzdHJpY3RlZC1jb3N0XGZSIiA0CisuSVggSXRlbSAiZ2NzZS11bnJlc3RyaWN0ZWQtY29zdCIKK0Nvc3QsIHJvdWdobHkgbWVhc3VyZWQgYXMgdGhlIGNvc3Qgb2YgYSBzaW5nbGUgdHlwaWNhbCBtYWNoaW5lCitpbnN0cnVjdGlvbiwgYXQgd2hpY2ggXHMtMUdDU0VcczAgb3B0aW1pemF0aW9ucyBkbyBub3QgY29uc3RyYWluCit0aGUgZGlzdGFuY2UgYW4gZXhwcmVzc2lvbiBjYW4gdHJhdmVsLiAgVGhpcyBpcyBjdXJyZW50bHkKK3N1cHBvcnRlZCBvbmx5IGluIHRoZSBjb2RlIGhvaXN0aW5nIHBhc3MuICBUaGUgbGVzc2VyIHRoZSBjb3N0LAordGhlIG1vcmUgYWdncmVzc2l2ZSBjb2RlIGhvaXN0aW5nIGlzLiAgU3BlY2lmeWluZyAwIAorYWxsb3dzIGFsbCBleHByZXNzaW9ucyB0byB0cmF2ZWwgdW5yZXN0cmljdGVkIGRpc3RhbmNlcy4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDMuCisuSVAgIlxmQm1heC1ob2lzdC1kZXB0aFxmUiIgNAorLklYIEl0ZW0gIm1heC1ob2lzdC1kZXB0aCIKK1RoZSBkZXB0aCBvZiBzZWFyY2ggaW4gdGhlIGRvbWluYXRvciB0cmVlIGZvciBleHByZXNzaW9ucyB0byBob2lzdC4KK1RoaXMgaXMgdXNlZCB0byBhdm9pZCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gaG9pc3RpbmcgYWxnb3JpdGhtLgorVGhlIHZhbHVlIG9mIDAgZG9lcyBub3QgbGltaXQgb24gdGhlIHNlYXJjaCwgYnV0IG1heSBzbG93IGRvd24gY29tcGlsYXRpb24KK29mIGh1Z2UgZnVuY3Rpb25zLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAuCisuSVAgIlxmQm1heC10YWlsLW1lcmdlLWNvbXBhcmlzb25zXGZSIiA0CisuSVggSXRlbSAibWF4LXRhaWwtbWVyZ2UtY29tcGFyaXNvbnMiCitUaGUgbWF4aW11bSBhbW91bnQgb2Ygc2ltaWxhciBiYnMgdG8gY29tcGFyZSBhIGJiIHdpdGguICBUaGlzIGlzIHVzZWQgdG8KK2F2b2lkIHF1YWRyYXRpYyBiZWhhdmlvciBpbiB0cmVlIHRhaWwgbWVyZ2luZy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorLklQICJcZkJtYXgtdGFpbC1tZXJnZS1pdGVyYXRpb25zXGZSIiA0CisuSVggSXRlbSAibWF4LXRhaWwtbWVyZ2UtaXRlcmF0aW9ucyIKK1RoZSBtYXhpbXVtIGFtb3VudCBvZiBpdGVyYXRpb25zIG9mIHRoZSBwYXNzIG92ZXIgdGhlIGZ1bmN0aW9uLiAgVGhpcyBpcyB1c2VkIHRvCitsaW1pdCBjb21waWxhdGlvbiB0aW1lIGluIHRyZWUgdGFpbCBtZXJnaW5nLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMi4KKy5JUCAiXGZCbWF4LXVucm9sbGVkLWluc25zXGZSIiA0CisuSVggSXRlbSAibWF4LXVucm9sbGVkLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0aGF0IGEgbG9vcCBtYXkgaGF2ZSB0byBiZSB1bnJvbGxlZC4KK0lmIGEgbG9vcCBpcyB1bnJvbGxlZCwgdGhpcyBwYXJhbWV0ZXIgYWxzbyBkZXRlcm1pbmVzIGhvdyBtYW55IHRpbWVzCit0aGUgbG9vcCBjb2RlIGlzIHVucm9sbGVkLgorLklQICJcZkJtYXgtYXZlcmFnZS11bnJvbGxlZC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1heC1hdmVyYWdlLXVucm9sbGVkLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBiaWFzZWQgYnkgcHJvYmFiaWxpdGllcyBvZiB0aGVpciBleGVjdXRpb24KK3RoYXQgYSBsb29wIG1heSBoYXZlIHRvIGJlIHVucm9sbGVkLiAgSWYgYSBsb29wIGlzIHVucm9sbGVkLAordGhpcyBwYXJhbWV0ZXIgYWxzbyBkZXRlcm1pbmVzIGhvdyBtYW55IHRpbWVzIHRoZSBsb29wIGNvZGUgaXMgdW5yb2xsZWQuCisuSVAgIlxmQm1heC11bnJvbGwtdGltZXNcZlIiIDQKKy5JWCBJdGVtICJtYXgtdW5yb2xsLXRpbWVzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIHVucm9sbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcC4KKy5JUCAiXGZCbWF4LXBlZWxlZC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1heC1wZWVsZWQtaW5zbnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgYSBsb29wIG1heSBoYXZlIHRvIGJlIHBlZWxlZC4KK0lmIGEgbG9vcCBpcyBwZWVsZWQsIHRoaXMgcGFyYW1ldGVyIGFsc28gZGV0ZXJtaW5lcyBob3cgbWFueSB0aW1lcwordGhlIGxvb3AgY29kZSBpcyBwZWVsZWQuCisuSVAgIlxmQm1heC1wZWVsLXRpbWVzXGZSIiA0CisuSVggSXRlbSAibWF4LXBlZWwtdGltZXMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgcGVlbGluZ3Mgb2YgYSBzaW5nbGUgbG9vcC4KKy5JUCAiXGZCbWF4LXBlZWwtYnJhbmNoZXNcZlIiIDQKKy5JWCBJdGVtICJtYXgtcGVlbC1icmFuY2hlcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBicmFuY2hlcyBvbiB0aGUgaG90IHBhdGggdGhyb3VnaCB0aGUgcGVlbGVkIHNlcXVlbmNlLgorLklQICJcZkJtYXgtY29tcGxldGVseS1wZWVsZWQtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtY29tcGxldGVseS1wZWVsZWQtaW5zbnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgb2YgYSBjb21wbGV0ZWx5IHBlZWxlZCBsb29wLgorLklQICJcZkJtYXgtY29tcGxldGVseS1wZWVsLXRpbWVzXGZSIiA0CisuSVggSXRlbSAibWF4LWNvbXBsZXRlbHktcGVlbC10aW1lcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcCB0byBiZSBzdWl0YWJsZSBmb3IgY29tcGxldGUgcGVlbGluZy4KKy5JUCAiXGZCbWF4LWNvbXBsZXRlbHktcGVlbC1sb29wLW5lc3QtZGVwdGhcZlIiIDQKKy5JWCBJdGVtICJtYXgtY29tcGxldGVseS1wZWVsLWxvb3AtbmVzdC1kZXB0aCIKK1RoZSBtYXhpbXVtIGRlcHRoIG9mIGEgbG9vcCBuZXN0IHN1aXRhYmxlIGZvciBjb21wbGV0ZSBwZWVsaW5nLgorLklQICJcZkJtYXgtdW5zd2l0Y2gtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtdW5zd2l0Y2gtaW5zbnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgb2YgYW4gdW5zd2l0Y2hlZCBsb29wLgorLklQICJcZkJtYXgtdW5zd2l0Y2gtbGV2ZWxcZlIiIDQKKy5JWCBJdGVtICJtYXgtdW5zd2l0Y2gtbGV2ZWwiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgYnJhbmNoZXMgdW5zd2l0Y2hlZCBpbiBhIHNpbmdsZSBsb29wLgorLklQICJcZkJsaW0tZXhwZW5zaXZlXGZSIiA0CisuSVggSXRlbSAibGltLWV4cGVuc2l2ZSIKK1RoZSBtaW5pbXVtIGNvc3Qgb2YgYW4gZXhwZW5zaXZlIGV4cHJlc3Npb24gaW4gdGhlIGxvb3AgaW52YXJpYW50IG1vdGlvbi4KKy5JUCAiXGZCaXYtY29uc2lkZXItYWxsLWNhbmRpZGF0ZXMtYm91bmRcZlIiIDQKKy5JWCBJdGVtICJpdi1jb25zaWRlci1hbGwtY2FuZGlkYXRlcy1ib3VuZCIKK0JvdW5kIG9uIG51bWJlciBvZiBjYW5kaWRhdGVzIGZvciBpbmR1Y3Rpb24gdmFyaWFibGVzLCBiZWxvdyB3aGljaAorYWxsIGNhbmRpZGF0ZXMgYXJlIGNvbnNpZGVyZWQgZm9yIGVhY2ggdXNlIGluIGluZHVjdGlvbiB2YXJpYWJsZQorb3B0aW1pemF0aW9ucy4gIElmIHRoZXJlIGFyZSBtb3JlIGNhbmRpZGF0ZXMgdGhhbiB0aGlzLAorb25seSB0aGUgbW9zdCByZWxldmFudCBvbmVzIGFyZSBjb25zaWRlcmVkIHRvIGF2b2lkIHF1YWRyYXRpYyB0aW1lIGNvbXBsZXhpdHkuCisuSVAgIlxmQml2LW1heC1jb25zaWRlcmVkLXVzZXNcZlIiIDQKKy5JWCBJdGVtICJpdi1tYXgtY29uc2lkZXJlZC11c2VzIgorVGhlIGluZHVjdGlvbiB2YXJpYWJsZSBvcHRpbWl6YXRpb25zIGdpdmUgdXAgb24gbG9vcHMgdGhhdCBjb250YWluIG1vcmUKK2luZHVjdGlvbiB2YXJpYWJsZSB1c2VzLgorLklQICJcZkJpdi1hbHdheXMtcHJ1bmUtY2FuZC1zZXQtYm91bmRcZlIiIDQKKy5JWCBJdGVtICJpdi1hbHdheXMtcHJ1bmUtY2FuZC1zZXQtYm91bmQiCitJZiB0aGUgbnVtYmVyIG9mIGNhbmRpZGF0ZXMgaW4gdGhlIHNldCBpcyBzbWFsbGVyIHRoYW4gdGhpcyB2YWx1ZSwKK2Fsd2F5cyB0cnkgdG8gcmVtb3ZlIHVubmVjZXNzYXJ5IGl2cyBmcm9tIHRoZSBzZXQKK3doZW4gYWRkaW5nIGEgbmV3IG9uZS4KKy5JUCAiXGZCc2Nldi1tYXgtZXhwci1zaXplXGZSIiA0CisuSVggSXRlbSAic2Nldi1tYXgtZXhwci1zaXplIgorQm91bmQgb24gc2l6ZSBvZiBleHByZXNzaW9ucyB1c2VkIGluIHRoZSBzY2FsYXIgZXZvbHV0aW9ucyBhbmFseXplci4KK0xhcmdlIGV4cHJlc3Npb25zIHNsb3cgdGhlIGFuYWx5emVyLgorLklQICJcZkJzY2V2LW1heC1leHByLWNvbXBsZXhpdHlcZlIiIDQKKy5JWCBJdGVtICJzY2V2LW1heC1leHByLWNvbXBsZXhpdHkiCitCb3VuZCBvbiB0aGUgY29tcGxleGl0eSBvZiB0aGUgZXhwcmVzc2lvbnMgaW4gdGhlIHNjYWxhciBldm9sdXRpb25zIGFuYWx5emVyLgorQ29tcGxleCBleHByZXNzaW9ucyBzbG93IHRoZSBhbmFseXplci4KKy5JUCAiXGZCb21lZ2EtbWF4LXZhcnNcZlIiIDQKKy5JWCBJdGVtICJvbWVnYS1tYXgtdmFycyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiB2YXJpYWJsZXMgaW4gYW4gT21lZ2EgY29uc3RyYWludCBzeXN0ZW0uCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMjguCisuSVAgIlxmQm9tZWdhLW1heC1nZXFzXGZSIiA0CisuSVggSXRlbSAib21lZ2EtbWF4LWdlcXMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5lcXVhbGl0aWVzIGluIGFuIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjU2LgorLklQICJcZkJvbWVnYS1tYXgtZXFzXGZSIiA0CisuSVggSXRlbSAib21lZ2EtbWF4LWVxcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBlcXVhbGl0aWVzIGluIGFuIE9tZWdhIGNvbnN0cmFpbnQgc3lzdGVtLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTI4LgorLklQICJcZkJvbWVnYS1tYXgtd2lsZC1jYXJkc1xmUiIgNAorLklYIEl0ZW0gIm9tZWdhLW1heC13aWxkLWNhcmRzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIHdpbGRjYXJkIHZhcmlhYmxlcyB0aGF0IHRoZSBPbWVnYSBzb2x2ZXIgaXMKK2FibGUgdG8gaW5zZXJ0LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTguCisuSVAgIlxmQm9tZWdhLWhhc2gtdGFibGUtc2l6ZVxmUiIgNAorLklYIEl0ZW0gIm9tZWdhLWhhc2gtdGFibGUtc2l6ZSIKK1RoZSBzaXplIG9mIHRoZSBoYXNoIHRhYmxlIGluIHRoZSBPbWVnYSBzb2x2ZXIuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcworNTUwLgorLklQICJcZkJvbWVnYS1tYXgta2V5c1xmUiIgNAorLklYIEl0ZW0gIm9tZWdhLW1heC1rZXlzIgorVGhlIG1heGltYWwgbnVtYmVyIG9mIGtleXMgdXNlZCBieSB0aGUgT21lZ2Egc29sdmVyLiAgVGhlIGRlZmF1bHQKK3ZhbHVlIGlzIDUwMC4KKy5JUCAiXGZCb21lZ2EtZWxpbWluYXRlLXJlZHVuZGFudC1jb25zdHJhaW50c1xmUiIgNAorLklYIEl0ZW0gIm9tZWdhLWVsaW1pbmF0ZS1yZWR1bmRhbnQtY29uc3RyYWludHMiCitXaGVuIHNldCB0byAxLCB1c2UgZXhwZW5zaXZlIG1ldGhvZHMgdG8gZWxpbWluYXRlIGFsbCByZWR1bmRhbnQKK2NvbnN0cmFpbnRzLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKy5JUCAiXGZCdmVjdC1tYXgtdmVyc2lvbi1mb3ItYWxpZ25tZW50LWNoZWNrc1xmUiIgNAorLklYIEl0ZW0gInZlY3QtbWF4LXZlcnNpb24tZm9yLWFsaWdubWVudC1jaGVja3MiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgcnVuLXRpbWUgY2hlY2tzIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCB3aGVuCitkb2luZyBsb29wIHZlcnNpb25pbmcgZm9yIGFsaWdubWVudCBpbiB0aGUgdmVjdG9yaXplci4gIFNlZSBvcHRpb24KK1wmXGZCXC1mdHJlZVwtdmVjdFwtbG9vcFwtdmVyc2lvblxmUiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5JUCAiXGZCdmVjdC1tYXgtdmVyc2lvbi1mb3ItYWxpYXMtY2hlY2tzXGZSIiA0CisuSVggSXRlbSAidmVjdC1tYXgtdmVyc2lvbi1mb3ItYWxpYXMtY2hlY2tzIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIHJ1bi10aW1lIGNoZWNrcyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgd2hlbgorZG9pbmcgbG9vcCB2ZXJzaW9uaW5nIGZvciBhbGlhcyBpbiB0aGUgdmVjdG9yaXplci4gIFNlZSBvcHRpb24KK1wmXGZCXC1mdHJlZVwtdmVjdFwtbG9vcFwtdmVyc2lvblxmUiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5JUCAiXGZCbWF4LWl0ZXJhdGlvbnMtdG8tdHJhY2tcZlIiIDQKKy5JWCBJdGVtICJtYXgtaXRlcmF0aW9ucy10by10cmFjayIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIGEgbG9vcCB0aGUgYnJ1dGUtZm9yY2UgYWxnb3JpdGhtCitmb3IgYW5hbHlzaXMgb2YgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wIHRyaWVzIHRvIGV2YWx1YXRlLgorLklQICJcZkJob3QtYmItY291bnQtd3MtcGVybWlsbGVcZlIiIDQKKy5JWCBJdGVtICJob3QtYmItY291bnQtd3MtcGVybWlsbGUiCitBIGJhc2ljIGJsb2NrIHByb2ZpbGUgY291bnQgaXMgY29uc2lkZXJlZCBob3QgaWYgaXQgY29udHJpYnV0ZXMgdG8gCit0aGUgZ2l2ZW4gcGVybWlsbGFnZSAoaS5lLiAwLi4uMTAwMCkgb2YgdGhlIGVudGlyZSBwcm9maWxlZCBleGVjdXRpb24uCisuSVAgIlxmQmhvdC1iYi1mcmVxdWVuY3ktZnJhY3Rpb25cZlIiIDQKKy5JWCBJdGVtICJob3QtYmItZnJlcXVlbmN5LWZyYWN0aW9uIgorU2VsZWN0IGZyYWN0aW9uIG9mIHRoZSBlbnRyeSBibG9jayBmcmVxdWVuY3kgb2YgZXhlY3V0aW9ucyBvZiBiYXNpYyBibG9jayBpbgorZnVuY3Rpb24gZ2l2ZW4gYmFzaWMgYmxvY2sgbmVlZHMgdG8gaGF2ZSB0byBiZSBjb25zaWRlcmVkIGhvdC4KKy5JUCAiXGZCbWF4LXByZWRpY3RlZC1pdGVyYXRpb25zXGZSIiA0CisuSVggSXRlbSAibWF4LXByZWRpY3RlZC1pdGVyYXRpb25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGxvb3AgaXRlcmF0aW9ucyB3ZSBwcmVkaWN0IHN0YXRpY2FsbHkuICBUaGlzIGlzIHVzZWZ1bAoraW4gY2FzZXMgd2hlcmUgYSBmdW5jdGlvbiBjb250YWlucyBhIHNpbmdsZSBsb29wIHdpdGgga25vd24gYm91bmQgYW5kCithbm90aGVyIGxvb3Agd2l0aCB1bmtub3duIGJvdW5kLgorVGhlIGtub3duIG51bWJlciBvZiBpdGVyYXRpb25zIGlzIHByZWRpY3RlZCBjb3JyZWN0bHksIHdoaWxlCit0aGUgdW5rbm93biBudW1iZXIgb2YgaXRlcmF0aW9ucyBhdmVyYWdlIHRvIHJvdWdobHkgMTAuICBUaGlzIG1lYW5zIHRoYXQgdGhlCitsb29wIHdpdGhvdXQgYm91bmRzIGFwcGVhcnMgYXJ0aWZpY2lhbGx5IGNvbGQgcmVsYXRpdmUgdG8gdGhlIG90aGVyIG9uZS4KKy5JUCAiXGZCYWxpZ24tdGhyZXNob2xkXGZSIiA0CisuSVggSXRlbSAiYWxpZ24tdGhyZXNob2xkIgorU2VsZWN0IGZyYWN0aW9uIG9mIHRoZSBtYXhpbWFsIGZyZXF1ZW5jeSBvZiBleGVjdXRpb25zIG9mIGEgYmFzaWMgYmxvY2sgaW4KK2EgZnVuY3Rpb24gdG8gYWxpZ24gdGhlIGJhc2ljIGJsb2NrLgorLklQICJcZkJhbGlnbi1sb29wLWl0ZXJhdGlvbnNcZlIiIDQKKy5JWCBJdGVtICJhbGlnbi1sb29wLWl0ZXJhdGlvbnMiCitBIGxvb3AgZXhwZWN0ZWQgdG8gaXRlcmF0ZSBhdCBsZWFzdCB0aGUgc2VsZWN0ZWQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMKK2FsaWduZWQuCisuSVAgIlxmQnRyYWNlci1keW5hbWljLWNvdmVyYWdlXGZSIiA0CisuSVggSXRlbSAidHJhY2VyLWR5bmFtaWMtY292ZXJhZ2UiCisuUEQgMAorLklQICJcZkJ0cmFjZXItZHluYW1pYy1jb3ZlcmFnZS1mZWVkYmFja1xmUiIgNAorLklYIEl0ZW0gInRyYWNlci1keW5hbWljLWNvdmVyYWdlLWZlZWRiYWNrIgorLlBECitUaGlzIHZhbHVlIGlzIHVzZWQgdG8gbGltaXQgc3VwZXJibG9jayBmb3JtYXRpb24gb25jZSB0aGUgZ2l2ZW4gcGVyY2VudGFnZSBvZgorZXhlY3V0ZWQgaW5zdHJ1Y3Rpb25zIGlzIGNvdmVyZWQuICBUaGlzIGxpbWl0cyB1bm5lY2Vzc2FyeSBjb2RlIHNpemUKK2V4cGFuc2lvbi4KKy5TcAorVGhlIFxmQnRyYWNlci1keW5hbWljLWNvdmVyYWdlLWZlZWRiYWNrXGZSIGlzIHVzZWQgb25seSB3aGVuIHByb2ZpbGUKK2ZlZWRiYWNrIGlzIGF2YWlsYWJsZS4gIFRoZSByZWFsIHByb2ZpbGVzIChhcyBvcHBvc2VkIHRvIHN0YXRpY2FsbHkgZXN0aW1hdGVkCitvbmVzKSBhcmUgbXVjaCBsZXNzIGJhbGFuY2VkIGFsbG93aW5nIHRoZSB0aHJlc2hvbGQgdG8gYmUgbGFyZ2VyIHZhbHVlLgorLklQICJcZkJ0cmFjZXItbWF4LWNvZGUtZ3Jvd3RoXGZSIiA0CisuSVggSXRlbSAidHJhY2VyLW1heC1jb2RlLWdyb3d0aCIKK1N0b3AgdGFpbCBkdXBsaWNhdGlvbiBvbmNlIGNvZGUgZ3Jvd3RoIGhhcyByZWFjaGVkIGdpdmVuIHBlcmNlbnRhZ2UuICBUaGlzIGlzCithIHJhdGhlciBhcnRpZmljaWFsIGxpbWl0LCBhcyBtb3N0IG9mIHRoZSBkdXBsaWNhdGVzIGFyZSBlbGltaW5hdGVkIGxhdGVyIGluCitjcm9zcyBqdW1waW5nLCBzbyBpdCBtYXkgYmUgc2V0IHRvIG11Y2ggaGlnaGVyIHZhbHVlcyB0aGFuIGlzIHRoZSBkZXNpcmVkIGNvZGUKK2dyb3d0aC4KKy5JUCAiXGZCdHJhY2VyLW1pbi1icmFuY2gtcmF0aW9cZlIiIDQKKy5JWCBJdGVtICJ0cmFjZXItbWluLWJyYW5jaC1yYXRpbyIKK1N0b3AgcmV2ZXJzZSBncm93dGggd2hlbiB0aGUgcmV2ZXJzZSBwcm9iYWJpbGl0eSBvZiBiZXN0IGVkZ2UgaXMgbGVzcyB0aGFuIHRoaXMKK3RocmVzaG9sZCAoaW4gcGVyY2VudCkuCisuSVAgIlxmQnRyYWNlci1taW4tYnJhbmNoLXJhdGlvXGZSIiA0CisuSVggSXRlbSAidHJhY2VyLW1pbi1icmFuY2gtcmF0aW8iCisuUEQgMAorLklQICJcZkJ0cmFjZXItbWluLWJyYW5jaC1yYXRpby1mZWVkYmFja1xmUiIgNAorLklYIEl0ZW0gInRyYWNlci1taW4tYnJhbmNoLXJhdGlvLWZlZWRiYWNrIgorLlBECitTdG9wIGZvcndhcmQgZ3Jvd3RoIGlmIHRoZSBiZXN0IGVkZ2UgaGFzIHByb2JhYmlsaXR5IGxvd2VyIHRoYW4gdGhpcwordGhyZXNob2xkLgorLlNwCitTaW1pbGFybHkgdG8gXGZCdHJhY2VyLWR5bmFtaWMtY292ZXJhZ2VcZlIgdHdvIHZhbHVlcyBhcmUgcHJlc2VudCwgb25lIGZvcgorY29tcGlsYXRpb24gZm9yIHByb2ZpbGUgZmVlZGJhY2sgYW5kIG9uZSBmb3IgY29tcGlsYXRpb24gd2l0aG91dC4gIFRoZSB2YWx1ZQorZm9yIGNvbXBpbGF0aW9uIHdpdGggcHJvZmlsZSBmZWVkYmFjayBuZWVkcyB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZSAoaGlnaGVyKSBpbgorb3JkZXIgdG8gbWFrZSB0cmFjZXIgZWZmZWN0aXZlLgorLklQICJcZkJtYXgtY3NlLXBhdGgtbGVuZ3RoXGZSIiA0CisuSVggSXRlbSAibWF4LWNzZS1wYXRoLWxlbmd0aCIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBiYXNpYyBibG9ja3Mgb24gcGF0aCB0aGF0IFxzLTFDU0VcczAgY29uc2lkZXJzLgorVGhlIGRlZmF1bHQgaXMgMTAuCisuSVAgIlxmQm1heC1jc2UtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtY3NlLWluc25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBccy0xQ1NFXHMwIHByb2Nlc3NlcyBiZWZvcmUgZmx1c2hpbmcuCitUaGUgZGVmYXVsdCBpcyAxMDAwLgorLklQICJcZkJnZ2MtbWluLWV4cGFuZFxmUiIgNAorLklYIEl0ZW0gImdnYy1taW4tZXhwYW5kIgorXCZccy0xR0NDXHMwIHVzZXMgYSBnYXJiYWdlIGNvbGxlY3RvciB0byBtYW5hZ2UgaXRzIG93biBtZW1vcnkgYWxsb2NhdGlvbi4gIFRoaXMKK3BhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG1pbmltdW0gcGVyY2VudGFnZSBieSB3aGljaCB0aGUgZ2FyYmFnZQorY29sbGVjdG9yJ3MgaGVhcCBzaG91bGQgYmUgYWxsb3dlZCB0byBleHBhbmQgYmV0d2VlbiBjb2xsZWN0aW9ucy4KK1R1bmluZyB0aGlzIG1heSBpbXByb3ZlIGNvbXBpbGF0aW9uIHNwZWVkOyBpdCBoYXMgbm8gZWZmZWN0IG9uIGNvZGUKK2dlbmVyYXRpb24uCisuU3AKK1RoZSBkZWZhdWx0IGlzIDMwJSArIDcwJSAqIChccy0xUkFNLzFHQlxzMCkgd2l0aCBhbiB1cHBlciBib3VuZCBvZiAxMDAlIHdoZW4KK1wmXHMtMVJBTVxzMCA+PSAxR0IuICBJZiBcZihDV1wqKENgZ2V0cmxpbWl0XCooQydcZlIgaXMgYXZhaWxhYmxlLCB0aGUgbm90aW9uIG9mIFwqKEwiXHMtMVJBTVxzMFwqKFIiIGlzCit0aGUgc21hbGxlc3Qgb2YgYWN0dWFsIFxzLTFSQU1cczAgYW5kIFxmKENXXCooQ2BSTElNSVRfREFUQVwqKEMnXGZSIG9yIFxmKENXXCooQ2BSTElNSVRfQVNcKihDJ1xmUi4gIElmCitcJlxzLTFHQ0NcczAgaXMgbm90IGFibGUgdG8gY2FsY3VsYXRlIFxzLTFSQU1cczAgb24gYSBwYXJ0aWN1bGFyIHBsYXRmb3JtLCB0aGUgbG93ZXIKK2JvdW5kIG9mIDMwJSBpcyB1c2VkLiAgU2V0dGluZyB0aGlzIHBhcmFtZXRlciBhbmQKK1wmXGZCZ2djLW1pbi1oZWFwc2l6ZVxmUiB0byB6ZXJvIGNhdXNlcyBhIGZ1bGwgY29sbGVjdGlvbiB0byBvY2N1ciBhdAorZXZlcnkgb3Bwb3J0dW5pdHkuICBUaGlzIGlzIGV4dHJlbWVseSBzbG93LCBidXQgY2FuIGJlIHVzZWZ1bCBmb3IKK2RlYnVnZ2luZy4KKy5JUCAiXGZCZ2djLW1pbi1oZWFwc2l6ZVxmUiIgNAorLklYIEl0ZW0gImdnYy1taW4taGVhcHNpemUiCitNaW5pbXVtIHNpemUgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdG9yJ3MgaGVhcCBiZWZvcmUgaXQgYmVnaW5zIGJvdGhlcmluZwordG8gY29sbGVjdCBnYXJiYWdlLiAgVGhlIGZpcnN0IGNvbGxlY3Rpb24gb2NjdXJzIGFmdGVyIHRoZSBoZWFwIGV4cGFuZHMKK2J5IFxmQmdnYy1taW4tZXhwYW5kXGZSJSBiZXlvbmQgXGZCZ2djLW1pbi1oZWFwc2l6ZVxmUi4gIEFnYWluLAordHVuaW5nIHRoaXMgbWF5IGltcHJvdmUgY29tcGlsYXRpb24gc3BlZWQsIGFuZCBoYXMgbm8gZWZmZWN0IG9uIGNvZGUKK2dlbmVyYXRpb24uCisuU3AKK1RoZSBkZWZhdWx0IGlzIHRoZSBzbWFsbGVyIG9mIFxzLTFSQU0vOFxzMCwgXHMtMVJMSU1JVF9SU1NcczAsIG9yIGEgbGltaXQgdGhhdAordHJpZXMgdG8gZW5zdXJlIHRoYXQgXHMtMVJMSU1JVF9EQVRBXHMwIG9yIFxzLTFSTElNSVRfQVNcczAgYXJlIG5vdCBleGNlZWRlZCwgYnV0Cit3aXRoIGEgbG93ZXIgYm91bmQgb2YgNDA5NiAoZm91ciBtZWdhYnl0ZXMpIGFuZCBhbiB1cHBlciBib3VuZCBvZgorMTMxMDcyICgxMjggbWVnYWJ5dGVzKS4gIElmIFxzLTFHQ0NcczAgaXMgbm90IGFibGUgdG8gY2FsY3VsYXRlIFxzLTFSQU1cczAgb24gYQorcGFydGljdWxhciBwbGF0Zm9ybSwgdGhlIGxvd2VyIGJvdW5kIGlzIHVzZWQuICBTZXR0aW5nIHRoaXMgcGFyYW1ldGVyCit2ZXJ5IGxhcmdlIGVmZmVjdGl2ZWx5IGRpc2FibGVzIGdhcmJhZ2UgY29sbGVjdGlvbi4gIFNldHRpbmcgdGhpcworcGFyYW1ldGVyIGFuZCBcZkJnZ2MtbWluLWV4cGFuZFxmUiB0byB6ZXJvIGNhdXNlcyBhIGZ1bGwgY29sbGVjdGlvbgordG8gb2NjdXIgYXQgZXZlcnkgb3Bwb3J0dW5pdHkuCisuSVAgIlxmQm1heC1yZWxvYWQtc2VhcmNoLWluc25zXGZSIiA0CisuSVggSXRlbSAibWF4LXJlbG9hZC1zZWFyY2gtaW5zbnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gcmVsb2FkIHNob3VsZCBsb29rIGJhY2t3YXJkIGZvciBlcXVpdmFsZW50CityZWdpc3Rlci4gIEluY3JlYXNpbmcgdmFsdWVzIG1lYW4gbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiwgbWFraW5nIHRoZQorY29tcGlsYXRpb24gdGltZSBpbmNyZWFzZSB3aXRoIHByb2JhYmx5IHNsaWdodGx5IGJldHRlciBwZXJmb3JtYW5jZS4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMC4KKy5JUCAiXGZCbWF4LWNzZWxpYi1tZW1vcnktbG9jYXRpb25zXGZSIiA0CisuSVggSXRlbSAibWF4LWNzZWxpYi1tZW1vcnktbG9jYXRpb25zIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIG1lbW9yeSBsb2NhdGlvbnMgY3NlbGliIHNob3VsZCB0YWtlIGludG8gYWNjb3VudC4KK0luY3JlYXNpbmcgdmFsdWVzIG1lYW4gbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbiwgbWFraW5nIHRoZSBjb21waWxhdGlvbiB0aW1lCitpbmNyZWFzZSB3aXRoIHByb2JhYmx5IHNsaWdodGx5IGJldHRlciBwZXJmb3JtYW5jZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUwMC4KKy5JUCAiXGZCcmVvcmRlci1ibG9ja3MtZHVwbGljYXRlXGZSIiA0CisuSVggSXRlbSAicmVvcmRlci1ibG9ja3MtZHVwbGljYXRlIgorLlBEIDAKKy5JUCAiXGZCcmVvcmRlci1ibG9ja3MtZHVwbGljYXRlLWZlZWRiYWNrXGZSIiA0CisuSVggSXRlbSAicmVvcmRlci1ibG9ja3MtZHVwbGljYXRlLWZlZWRiYWNrIgorLlBECitVc2VkIGJ5IHRoZSBiYXNpYyBibG9jayByZW9yZGVyaW5nIHBhc3MgdG8gZGVjaWRlIHdoZXRoZXIgdG8gdXNlIHVuY29uZGl0aW9uYWwKK2JyYW5jaCBvciBkdXBsaWNhdGUgdGhlIGNvZGUgb24gaXRzIGRlc3RpbmF0aW9uLiAgQ29kZSBpcyBkdXBsaWNhdGVkIHdoZW4gaXRzCitlc3RpbWF0ZWQgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gdGhpcyB2YWx1ZSBtdWx0aXBsaWVkIGJ5IHRoZSBlc3RpbWF0ZWQgc2l6ZSBvZgordW5jb25kaXRpb25hbCBqdW1wIGluIHRoZSBob3Qgc3BvdHMgb2YgdGhlIHByb2dyYW0uCisuU3AKK1RoZSBcZkJyZW9yZGVyLWJsb2NrLWR1cGxpY2F0ZS1mZWVkYmFja1xmUiBpcyB1c2VkIG9ubHkgd2hlbiBwcm9maWxlCitmZWVkYmFjayBpcyBhdmFpbGFibGUuICBJdCBtYXkgYmUgc2V0IHRvIGhpZ2hlciB2YWx1ZXMgdGhhbgorXCZcZkJyZW9yZGVyLWJsb2NrLWR1cGxpY2F0ZVxmUiBzaW5jZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaG90IHNwb3RzIGlzIG1vcmUKK2FjY3VyYXRlLgorLklQICJcZkJtYXgtc2NoZWQtcmVhZHktaW5zbnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtc2NoZWQtcmVhZHktaW5zbnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHJlYWR5IHRvIGJlIGlzc3VlZCB0aGUgc2NoZWR1bGVyIHNob3VsZAorY29uc2lkZXIgYXQgYW55IGdpdmVuIHRpbWUgZHVyaW5nIHRoZSBmaXJzdCBzY2hlZHVsaW5nIHBhc3MuICBJbmNyZWFzaW5nCit2YWx1ZXMgbWVhbiBtb3JlIHRob3JvdWdoIHNlYXJjaGVzLCBtYWtpbmcgdGhlIGNvbXBpbGF0aW9uIHRpbWUgaW5jcmVhc2UKK3dpdGggcHJvYmFibHkgbGl0dGxlIGJlbmVmaXQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAuCisuSVAgIlxmQm1heC1zY2hlZC1yZWdpb24tYmxvY2tzXGZSIiA0CisuSVggSXRlbSAibWF4LXNjaGVkLXJlZ2lvbi1ibG9ja3MiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIGluIGEgcmVnaW9uIHRvIGJlIGNvbnNpZGVyZWQgZm9yCitpbnRlcmJsb2NrIHNjaGVkdWxpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKy5JUCAiXGZCbWF4LXBpcGVsaW5lLXJlZ2lvbi1ibG9ja3NcZlIiIDQKKy5JWCBJdGVtICJtYXgtcGlwZWxpbmUtcmVnaW9uLWJsb2NrcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgaW4gYSByZWdpb24gdG8gYmUgY29uc2lkZXJlZCBmb3IKK3BpcGVsaW5pbmcgaW4gdGhlIHNlbGVjdGl2ZSBzY2hlZHVsZXIuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNS4KKy5JUCAiXGZCbWF4LXNjaGVkLXJlZ2lvbi1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1heC1zY2hlZC1yZWdpb24taW5zbnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgaW4gYSByZWdpb24gdG8gYmUgY29uc2lkZXJlZCBmb3IKK2ludGVyYmxvY2sgc2NoZWR1bGluZy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMC4KKy5JUCAiXGZCbWF4LXBpcGVsaW5lLXJlZ2lvbi1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIm1heC1waXBlbGluZS1yZWdpb24taW5zbnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMgaW4gYSByZWdpb24gdG8gYmUgY29uc2lkZXJlZCBmb3IKK3BpcGVsaW5pbmcgaW4gdGhlIHNlbGVjdGl2ZSBzY2hlZHVsZXIuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMDAuCisuSVAgIlxmQm1pbi1zcGVjLXByb2JcZlIiIDQKKy5JWCBJdGVtICJtaW4tc3BlYy1wcm9iIgorVGhlIG1pbmltdW0gcHJvYmFiaWxpdHkgKGluIHBlcmNlbnRzKSBvZiByZWFjaGluZyBhIHNvdXJjZSBibG9jaworZm9yIGludGVyYmxvY2sgc3BlY3VsYXRpdmUgc2NoZWR1bGluZy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDQwLgorLklQICJcZkJtYXgtc2NoZWQtZXh0ZW5kLXJlZ2lvbnMtaXRlcnNcZlIiIDQKKy5JWCBJdGVtICJtYXgtc2NoZWQtZXh0ZW5kLXJlZ2lvbnMtaXRlcnMiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aHJvdWdoIFxzLTFDRkdcczAgdG8gZXh0ZW5kIHJlZ2lvbnMuCitBIHZhbHVlIG9mIDAgKHRoZSBkZWZhdWx0KSBkaXNhYmxlcyByZWdpb24gZXh0ZW5zaW9ucy4KKy5JUCAiXGZCbWF4LXNjaGVkLWluc24tY29uZmxpY3QtZGVsYXlcZlIiIDQKKy5JWCBJdGVtICJtYXgtc2NoZWQtaW5zbi1jb25mbGljdC1kZWxheSIKK1RoZSBtYXhpbXVtIGNvbmZsaWN0IGRlbGF5IGZvciBhbiBpbnNuIHRvIGJlIGNvbnNpZGVyZWQgZm9yIHNwZWN1bGF0aXZlIG1vdGlvbi4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDMuCisuSVAgIlxmQnNjaGVkLXNwZWMtcHJvYi1jdXRvZmZcZlIiIDQKKy5JWCBJdGVtICJzY2hlZC1zcGVjLXByb2ItY3V0b2ZmIgorVGhlIG1pbmltYWwgcHJvYmFiaWxpdHkgb2Ygc3BlY3VsYXRpb24gc3VjY2VzcyAoaW4gcGVyY2VudHMpLCBzbyB0aGF0CitzcGVjdWxhdGl2ZSBpbnNucyBhcmUgc2NoZWR1bGVkLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgNDAuCisuSVAgIlxmQnNjaGVkLXNwZWMtc3RhdGUtZWRnZS1wcm9iLWN1dG9mZlxmUiIgNAorLklYIEl0ZW0gInNjaGVkLXNwZWMtc3RhdGUtZWRnZS1wcm9iLWN1dG9mZiIKK1RoZSBtaW5pbXVtIHByb2JhYmlsaXR5IGFuIGVkZ2UgbXVzdCBoYXZlIGZvciB0aGUgc2NoZWR1bGVyIHRvIHNhdmUgaXRzCitzdGF0ZSBhY3Jvc3MgaXQuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKy5JUCAiXGZCc2NoZWQtbWVtLXRydWUtZGVwLWNvc3RcZlIiIDQKKy5JWCBJdGVtICJzY2hlZC1tZW0tdHJ1ZS1kZXAtY29zdCIKK01pbmltYWwgZGlzdGFuY2UgKGluIFxzLTFDUFVcczAgY3ljbGVzKSBiZXR3ZWVuIHN0b3JlIGFuZCBsb2FkIHRhcmdldGluZyBzYW1lCittZW1vcnkgbG9jYXRpb25zLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4KKy5JUCAiXGZCc2Vsc2NoZWQtbWF4LWxvb2thaGVhZFxmUiIgNAorLklYIEl0ZW0gInNlbHNjaGVkLW1heC1sb29rYWhlYWQiCitUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBsb29rYWhlYWQgd2luZG93IG9mIHNlbGVjdGl2ZSBzY2hlZHVsaW5nLiAgSXQgaXMgYQorZGVwdGggb2Ygc2VhcmNoIGZvciBhdmFpbGFibGUgaW5zdHJ1Y3Rpb25zLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgNTAuCisuSVAgIlxmQnNlbHNjaGVkLW1heC1zY2hlZC10aW1lc1xmUiIgNAorLklYIEl0ZW0gInNlbHNjaGVkLW1heC1zY2hlZC10aW1lcyIKK1RoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0aGF0IGFuIGluc3RydWN0aW9uIGlzIHNjaGVkdWxlZCBkdXJpbmcKK3NlbGVjdGl2ZSBzY2hlZHVsaW5nLiAgVGhpcyBpcyB0aGUgbGltaXQgb24gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zCit0aHJvdWdoIHdoaWNoIHRoZSBpbnN0cnVjdGlvbiBtYXkgYmUgcGlwZWxpbmVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMi4KKy5JUCAiXGZCc2Vsc2NoZWQtbWF4LWluc25zLXRvLXJlbmFtZVxmUiIgNAorLklYIEl0ZW0gInNlbHNjaGVkLW1heC1pbnNucy10by1yZW5hbWUiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgYmVzdCBpbnN0cnVjdGlvbnMgaW4gdGhlIHJlYWR5IGxpc3QgdGhhdCBhcmUgY29uc2lkZXJlZAorZm9yIHJlbmFtaW5nIGluIHRoZSBzZWxlY3RpdmUgc2NoZWR1bGVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMi4KKy5JUCAiXGZCc21zLW1pbi1zY1xmUiIgNAorLklYIEl0ZW0gInNtcy1taW4tc2MiCitUaGUgbWluaW11bSB2YWx1ZSBvZiBzdGFnZSBjb3VudCB0aGF0IHN3aW5nIG1vZHVsbyBzY2hlZHVsZXIKK2dlbmVyYXRlcy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDIuCisuSVAgIlxmQm1heC1sYXN0LXZhbHVlLXJ0bFxmUiIgNAorLklYIEl0ZW0gIm1heC1sYXN0LXZhbHVlLXJ0bCIKK1RoZSBtYXhpbXVtIHNpemUgbWVhc3VyZWQgYXMgbnVtYmVyIG9mIFJUTHMgdGhhdCBjYW4gYmUgcmVjb3JkZWQgaW4gYW4gZXhwcmVzc2lvbgoraW4gY29tYmluZXIgZm9yIGEgcHNldWRvIHJlZ2lzdGVyIGFzIGxhc3Qga25vd24gdmFsdWUgb2YgdGhhdCByZWdpc3Rlci4gIFRoZSBkZWZhdWx0CitpcyAxMDAwMC4KKy5JUCAiXGZCaW50ZWdlci1zaGFyZS1saW1pdFxmUiIgNAorLklYIEl0ZW0gImludGVnZXItc2hhcmUtbGltaXQiCitTbWFsbCBpbnRlZ2VyIGNvbnN0YW50cyBjYW4gdXNlIGEgc2hhcmVkIGRhdGEgc3RydWN0dXJlLCByZWR1Y2luZyB0aGUKK2NvbXBpbGVyJ3MgbWVtb3J5IHVzYWdlIGFuZCBpbmNyZWFzaW5nIGl0cyBzcGVlZC4gIFRoaXMgc2V0cyB0aGUgbWF4aW11bQordmFsdWUgb2YgYSBzaGFyZWQgaW50ZWdlciBjb25zdGFudC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDI1Ni4KKy5JUCAiXGZCc3NwLWJ1ZmZlci1zaXplXGZSIiA0CisuSVggSXRlbSAic3NwLWJ1ZmZlci1zaXplIgorVGhlIG1pbmltdW0gc2l6ZSBvZiBidWZmZXJzIChpLmUuIGFycmF5cykgdGhhdCByZWNlaXZlIHN0YWNrIHNtYXNoaW5nCitwcm90ZWN0aW9uIHdoZW4gXGZCXC1mc3RhY2tcLXByb3RlY3Rpb25cZlIgaXMgdXNlZC4KKy5JUCAiXGZCbWF4LWp1bXAtdGhyZWFkLWR1cGxpY2F0aW9uLXN0bXRzXGZSIiA0CisuSVggSXRlbSAibWF4LWp1bXAtdGhyZWFkLWR1cGxpY2F0aW9uLXN0bXRzIgorTWF4aW11bSBudW1iZXIgb2Ygc3RhdGVtZW50cyBhbGxvd2VkIGluIGEgYmxvY2sgdGhhdCBuZWVkcyB0byBiZQorZHVwbGljYXRlZCB3aGVuIHRocmVhZGluZyBqdW1wcy4KKy5JUCAiXGZCbWF4LWZpZWxkcy1mb3ItZmllbGQtc2Vuc2l0aXZlXGZSIiA0CisuSVggSXRlbSAibWF4LWZpZWxkcy1mb3ItZmllbGQtc2Vuc2l0aXZlIgorTWF4aW11bSBudW1iZXIgb2YgZmllbGRzIGluIGEgc3RydWN0dXJlIHRyZWF0ZWQgaW4KK2EgZmllbGQgc2Vuc2l0aXZlIG1hbm5lciBkdXJpbmcgcG9pbnRlciBhbmFseXNpcy4gIFRoZSBkZWZhdWx0IGlzIHplcm8KK2ZvciBcZkJcLU8wXGZSIGFuZCBcZkJcLU8xXGZSLAorYW5kIDEwMCBmb3IgXGZCXC1Pc1xmUiwgXGZCXC1PMlxmUiwgYW5kIFxmQlwtTzNcZlIuCisuSVAgIlxmQnByZWZldGNoLWxhdGVuY3lcZlIiIDQKKy5JWCBJdGVtICJwcmVmZXRjaC1sYXRlbmN5IgorRXN0aW1hdGUgb24gYXZlcmFnZSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGV4ZWN1dGVkIGJlZm9yZQorcHJlZmV0Y2ggZmluaXNoZXMuICBUaGUgZGlzdGFuY2UgcHJlZmV0Y2hlZCBhaGVhZCBpcyBwcm9wb3J0aW9uYWwKK3RvIHRoaXMgY29uc3RhbnQuICBJbmNyZWFzaW5nIHRoaXMgbnVtYmVyIG1heSBhbHNvIGxlYWQgdG8gbGVzcworc3RyZWFtcyBiZWluZyBwcmVmZXRjaGVkIChzZWUgXGZCc2ltdWx0YW5lb3VzLXByZWZldGNoZXNcZlIpLgorLklQICJcZkJzaW11bHRhbmVvdXMtcHJlZmV0Y2hlc1xmUiIgNAorLklYIEl0ZW0gInNpbXVsdGFuZW91cy1wcmVmZXRjaGVzIgorTWF4aW11bSBudW1iZXIgb2YgcHJlZmV0Y2hlcyB0aGF0IGNhbiBydW4gYXQgdGhlIHNhbWUgdGltZS4KKy5JUCAiXGZCbDFcLWNhY2hlXC1saW5lXC1zaXplXGZSIiA0CisuSVggSXRlbSAibDEtY2FjaGUtbGluZS1zaXplIgorVGhlIHNpemUgb2YgY2FjaGUgbGluZSBpbiBMMSBjYWNoZSwgaW4gYnl0ZXMuCisuSVAgIlxmQmwxXC1jYWNoZVwtc2l6ZVxmUiIgNAorLklYIEl0ZW0gImwxLWNhY2hlLXNpemUiCitUaGUgc2l6ZSBvZiBMMSBjYWNoZSwgaW4ga2lsb2J5dGVzLgorLklQICJcZkJsMlwtY2FjaGVcLXNpemVcZlIiIDQKKy5JWCBJdGVtICJsMi1jYWNoZS1zaXplIgorVGhlIHNpemUgb2YgTDIgY2FjaGUsIGluIGtpbG9ieXRlcy4KKy5JUCAiXGZCbWluLWluc24tdG8tcHJlZmV0Y2gtcmF0aW9cZlIiIDQKKy5JWCBJdGVtICJtaW4taW5zbi10by1wcmVmZXRjaC1yYXRpbyIKK1RoZSBtaW5pbXVtIHJhdGlvIGJldHdlZW4gdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgYW5kIHRoZQorbnVtYmVyIG9mIHByZWZldGNoZXMgdG8gZW5hYmxlIHByZWZldGNoaW5nIGluIGEgbG9vcC4KKy5JUCAiXGZCcHJlZmV0Y2gtbWluLWluc24tdG8tbWVtLXJhdGlvXGZSIiA0CisuSVggSXRlbSAicHJlZmV0Y2gtbWluLWluc24tdG8tbWVtLXJhdGlvIgorVGhlIG1pbmltdW0gcmF0aW8gYmV0d2VlbiB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBhbmQgdGhlCitudW1iZXIgb2YgbWVtb3J5IHJlZmVyZW5jZXMgdG8gZW5hYmxlIHByZWZldGNoaW5nIGluIGEgbG9vcC4KKy5JUCAiXGZCdXNlLWNhbm9uaWNhbC10eXBlc1xmUiIgNAorLklYIEl0ZW0gInVzZS1jYW5vbmljYWwtdHlwZXMiCitXaGV0aGVyIHRoZSBjb21waWxlciBzaG91bGQgdXNlIHRoZSBcKihMImNhbm9uaWNhbFwqKFIiIHR5cGUgc3lzdGVtLiAgQnkKK2RlZmF1bHQsIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSAxLCB3aGljaCB1c2VzIGEgbW9yZSBlZmZpY2llbnQgaW50ZXJuYWwKK21lY2hhbmlzbSBmb3IgY29tcGFyaW5nIHR5cGVzIGluIFwqKEMrIGFuZCBPYmplY3RpdmVcLVwqKEMrLiAgSG93ZXZlciwgaWYKK2J1Z3MgaW4gdGhlIGNhbm9uaWNhbCB0eXBlIHN5c3RlbSBhcmUgY2F1c2luZyBjb21waWxhdGlvbiBmYWlsdXJlcywKK3NldCB0aGlzIHZhbHVlIHRvIDAgdG8gZGlzYWJsZSBjYW5vbmljYWwgdHlwZXMuCisuSVAgIlxmQnN3aXRjaC1jb252ZXJzaW9uLW1heC1icmFuY2gtcmF0aW9cZlIiIDQKKy5JWCBJdGVtICJzd2l0Y2gtY29udmVyc2lvbi1tYXgtYnJhbmNoLXJhdGlvIgorU3dpdGNoIGluaXRpYWxpemF0aW9uIGNvbnZlcnNpb24gcmVmdXNlcyB0byBjcmVhdGUgYXJyYXlzIHRoYXQgYXJlCitiaWdnZXIgdGhhbiBcZkJzd2l0Y2gtY29udmVyc2lvbi1tYXgtYnJhbmNoLXJhdGlvXGZSIHRpbWVzIHRoZSBudW1iZXIgb2YKK2JyYW5jaGVzIGluIHRoZSBzd2l0Y2guCisuSVAgIlxmQm1heC1wYXJ0aWFsLWFudGljLWxlbmd0aFxmUiIgNAorLklYIEl0ZW0gIm1heC1wYXJ0aWFsLWFudGljLWxlbmd0aCIKK01heGltdW0gbGVuZ3RoIG9mIHRoZSBwYXJ0aWFsIGFudGljIHNldCBjb21wdXRlZCBkdXJpbmcgdGhlIHRyZWUKK3BhcnRpYWwgcmVkdW5kYW5jeSBlbGltaW5hdGlvbiBvcHRpbWl6YXRpb24gKFxmQlwtZnRyZWVcLXByZVxmUikgd2hlbgorb3B0aW1pemluZyBhdCBcZkJcLU8zXGZSIGFuZCBhYm92ZS4gIEZvciBzb21lIHNvcnRzIG9mIHNvdXJjZSBjb2RlCit0aGUgZW5oYW5jZWQgcGFydGlhbCByZWR1bmRhbmN5IGVsaW1pbmF0aW9uIG9wdGltaXphdGlvbiBjYW4gcnVuIGF3YXksCitjb25zdW1pbmcgYWxsIG9mIHRoZSBtZW1vcnkgYXZhaWxhYmxlIG9uIHRoZSBob3N0IG1hY2hpbmUuICBUaGlzCitwYXJhbWV0ZXIgc2V0cyBhIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgdGhlIHNldHMgdGhhdCBhcmUgY29tcHV0ZWQsCit3aGljaCBwcmV2ZW50cyB0aGUgcnVuYXdheSBiZWhhdmlvci4gIFNldHRpbmcgYSB2YWx1ZSBvZiAwIGZvcgordGhpcyBwYXJhbWV0ZXIgYWxsb3dzIGFuIHVubGltaXRlZCBzZXQgbGVuZ3RoLgorLklQICJcZkJzY2N2bi1tYXgtc2NjLXNpemVcZlIiIDQKKy5JWCBJdGVtICJzY2N2bi1tYXgtc2NjLXNpemUiCitNYXhpbXVtIHNpemUgb2YgYSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50IChccy0xU0NDXHMwKSBkdXJpbmcgXHMtMVNDQ1ZOXHMwCitwcm9jZXNzaW5nLiAgSWYgdGhpcyBsaW1pdCBpcyBoaXQsIFxzLTFTQ0NWTlxzMCBwcm9jZXNzaW5nIGZvciB0aGUgd2hvbGUKK2Z1bmN0aW9uIGlzIG5vdCBkb25lIGFuZCBvcHRpbWl6YXRpb25zIGRlcGVuZGluZyBvbiBpdCBhcmUKK2Rpc2FibGVkLiAgVGhlIGRlZmF1bHQgbWF4aW11bSBccy0xU0NDXHMwIHNpemUgaXMgMTAwMDAuCisuSVAgIlxmQnNjY3ZuLW1heC1hbGlhcy1xdWVyaWVzLXBlci1hY2Nlc3NcZlIiIDQKKy5JWCBJdGVtICJzY2N2bi1tYXgtYWxpYXMtcXVlcmllcy1wZXItYWNjZXNzIgorTWF4aW11bSBudW1iZXIgb2YgYWxpYXMtb3JhY2xlIHF1ZXJpZXMgd2UgcGVyZm9ybSB3aGVuIGxvb2tpbmcgZm9yCityZWR1bmRhbmNpZXMgZm9yIGxvYWRzIGFuZCBzdG9yZXMuICBJZiB0aGlzIGxpbWl0IGlzIGhpdCB0aGUgc2VhcmNoCitpcyBhYm9ydGVkIGFuZCB0aGUgbG9hZCBvciBzdG9yZSBpcyBub3QgY29uc2lkZXJlZCByZWR1bmRhbnQuICBUaGUKK251bWJlciBvZiBxdWVyaWVzIGlzIGFsZ29yaXRobWljYWxseSBsaW1pdGVkIHRvIHRoZSBudW1iZXIgb2YKK3N0b3JlcyBvbiBhbGwgcGF0aHMgZnJvbSB0aGUgbG9hZCB0byB0aGUgZnVuY3Rpb24gZW50cnkuCitUaGUgZGVmYXVsdCBtYXhtaW11bSBudW1iZXIgb2YgcXVlcmllcyBpcyAxMDAwLgorLklQICJcZkJpcmEtbWF4LWxvb3BzLW51bVxmUiIgNAorLklYIEl0ZW0gImlyYS1tYXgtbG9vcHMtbnVtIgorXCZccy0xSVJBXHMwIHVzZXMgcmVnaW9uYWwgcmVnaXN0ZXIgYWxsb2NhdGlvbiBieSBkZWZhdWx0LiAgSWYgYSBmdW5jdGlvbgorY29udGFpbnMgbW9yZSBsb29wcyB0aGFuIHRoZSBudW1iZXIgZ2l2ZW4gYnkgdGhpcyBwYXJhbWV0ZXIsIG9ubHkgYXQgbW9zdAordGhlIGdpdmVuIG51bWJlciBvZiB0aGUgbW9zdCBmcmVxdWVudGx5LWV4ZWN1dGVkIGxvb3BzIGZvcm0gcmVnaW9ucworZm9yIHJlZ2lvbmFsIHJlZ2lzdGVyIGFsbG9jYXRpb24uICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUKK3BhcmFtZXRlciBpcyAxMDAuCisuSVAgIlxmQmlyYS1tYXgtY29uZmxpY3QtdGFibGUtc2l6ZVxmUiIgNAorLklYIEl0ZW0gImlyYS1tYXgtY29uZmxpY3QtdGFibGUtc2l6ZSIKK0FsdGhvdWdoIFxzLTFJUkFcczAgdXNlcyBhIHNvcGhpc3RpY2F0ZWQgYWxnb3JpdGhtIHRvIGNvbXByZXNzIHRoZSBjb25mbGljdAordGFibGUsIHRoZSB0YWJsZSBjYW4gc3RpbGwgcmVxdWlyZSBleGNlc3NpdmUgYW1vdW50cyBvZiBtZW1vcnkgZm9yCitodWdlIGZ1bmN0aW9ucy4gIElmIHRoZSBjb25mbGljdCB0YWJsZSBmb3IgYSBmdW5jdGlvbiBjb3VsZCBiZSBtb3JlCit0aGFuIHRoZSBzaXplIGluIFxzLTFNQlxzMCBnaXZlbiBieSB0aGlzIHBhcmFtZXRlciwgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvcgoraW5zdGVhZCB1c2VzIGEgZmFzdGVyLCBzaW1wbGVyLCBhbmQgbG93ZXItcXVhbGl0eQorYWxnb3JpdGhtIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBidWlsZGluZyBhIHBzZXVkby1yZWdpc3RlciBjb25mbGljdCB0YWJsZS4gIAorVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBpcyAyMDAwLgorLklQICJcZkJpcmEtbG9vcC1yZXNlcnZlZC1yZWdzXGZSIiA0CisuSVggSXRlbSAiaXJhLWxvb3AtcmVzZXJ2ZWQtcmVncyIKK1wmXHMtMUlSQVxzMCBjYW4gYmUgdXNlZCB0byBldmFsdWF0ZSBtb3JlIGFjY3VyYXRlIHJlZ2lzdGVyIHByZXNzdXJlIGluIGxvb3BzCitmb3IgZGVjaXNpb25zIHRvIG1vdmUgbG9vcCBpbnZhcmlhbnRzIChzZWUgXGZCXC1PM1xmUikuICBUaGUgbnVtYmVyCitvZiBhdmFpbGFibGUgcmVnaXN0ZXJzIHJlc2VydmVkIGZvciBzb21lIG90aGVyIHB1cnBvc2VzIGlzIGdpdmVuCitieSB0aGlzIHBhcmFtZXRlci4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIgaXMgMiwgd2hpY2ggaXMKK3RoZSBtaW5pbWFsIG51bWJlciBvZiByZWdpc3RlcnMgbmVlZGVkIGJ5IHR5cGljYWwgaW5zdHJ1Y3Rpb25zLgorVGhpcyB2YWx1ZSBpcyB0aGUgYmVzdCBmb3VuZCBmcm9tIG51bWVyb3VzIGV4cGVyaW1lbnRzLgorLklQICJcZkJsb29wLWludmFyaWFudC1tYXgtYmJzLWluLWxvb3BcZlIiIDQKKy5JWCBJdGVtICJsb29wLWludmFyaWFudC1tYXgtYmJzLWluLWxvb3AiCitMb29wIGludmFyaWFudCBtb3Rpb24gY2FuIGJlIHZlcnkgZXhwZW5zaXZlLCBib3RoIGluIGNvbXBpbGF0aW9uIHRpbWUgYW5kCitpbiBhbW91bnQgb2YgbmVlZGVkIGNvbXBpbGUtdGltZSBtZW1vcnksIHdpdGggdmVyeSBsYXJnZSBsb29wcy4gIExvb3BzCit3aXRoIG1vcmUgYmFzaWMgYmxvY2tzIHRoYW4gdGhpcyBwYXJhbWV0ZXIgd29uJ3QgaGF2ZSBsb29wIGludmFyaWFudAorbW90aW9uIG9wdGltaXphdGlvbiBwZXJmb3JtZWQgb24gdGhlbS4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZQorcGFyYW1ldGVyIGlzIDEwMDAgZm9yIFxmQlwtTzFcZlIgYW5kIDEwMDAwIGZvciBcZkJcLU8yXGZSIGFuZCBhYm92ZS4KKy5JUCAiXGZCbG9vcC1tYXgtZGF0YXJlZnMtZm9yLWRhdGFkZXBzXGZSIiA0CisuSVggSXRlbSAibG9vcC1tYXgtZGF0YXJlZnMtZm9yLWRhdGFkZXBzIgorQnVpbGRpbmcgZGF0YSBkYXBlbmRlbmNpZXMgaXMgZXhwZW5zaXZlIGZvciB2ZXJ5IGxhcmdlIGxvb3BzLiAgVGhpcworcGFyYW1ldGVyIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGRhdGEgcmVmZXJlbmNlcyBpbiBsb29wcyB0aGF0IGFyZQorY29uc2lkZXJlZCBmb3IgZGF0YSBkZXBlbmRlbmNlIGFuYWx5c2lzLiAgVGhlc2UgbGFyZ2UgbG9vcHMgYXJlIG5vCitoYW5kbGVkIGJ5IHRoZSBvcHRpbWl6YXRpb25zIHVzaW5nIGxvb3AgZGF0YSBkZXBlbmRlbmNpZXMuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAwLgorLklQICJcZkJtYXgtdmFydHJhY2stc2l6ZVxmUiIgNAorLklYIEl0ZW0gIm1heC12YXJ0cmFjay1zaXplIgorU2V0cyBhIG1heGltdW0gbnVtYmVyIG9mIGhhc2ggdGFibGUgc2xvdHMgdG8gdXNlIGR1cmluZyB2YXJpYWJsZQordHJhY2tpbmcgZGF0YWZsb3cgYW5hbHlzaXMgb2YgYW55IGZ1bmN0aW9uLiAgSWYgdGhpcyBsaW1pdCBpcyBleGNlZWRlZAord2l0aCB2YXJpYWJsZSB0cmFja2luZyBhdCBhc3NpZ25tZW50cyBlbmFibGVkLCBhbmFseXNpcyBmb3IgdGhhdAorZnVuY3Rpb24gaXMgcmV0cmllZCB3aXRob3V0IGl0LCBhZnRlciByZW1vdmluZyBhbGwgZGVidWcgaW5zbnMgZnJvbQordGhlIGZ1bmN0aW9uLiAgSWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGV2ZW4gd2l0aG91dCBkZWJ1ZyBpbnNucywgdmFyCit0cmFja2luZyBhbmFseXNpcyBpcyBjb21wbGV0ZWx5IGRpc2FibGVkIGZvciB0aGUgZnVuY3Rpb24uICBTZXR0aW5nCit0aGUgcGFyYW1ldGVyIHRvIHplcm8gbWFrZXMgaXQgdW5saW1pdGVkLgorLklQICJcZkJtYXgtdmFydHJhY2stZXhwci1kZXB0aFxmUiIgNAorLklYIEl0ZW0gIm1heC12YXJ0cmFjay1leHByLWRlcHRoIgorU2V0cyBhIG1heGltdW0gbnVtYmVyIG9mIHJlY3Vyc2lvbiBsZXZlbHMgd2hlbiBhdHRlbXB0aW5nIHRvIG1hcAordmFyaWFibGUgbmFtZXMgb3IgZGVidWcgdGVtcG9yYXJpZXMgdG8gdmFsdWUgZXhwcmVzc2lvbnMuICBUaGlzIHRyYWRlcworY29tcGlsYXRpb24gdGltZSBmb3IgbW9yZSBjb21wbGV0ZSBkZWJ1ZyBpbmZvcm1hdGlvbi4gIElmIHRoaXMgaXMgc2V0IHRvbworbG93LCB2YWx1ZSBleHByZXNzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgYW5kIGNvdWxkIGJlIHJlcHJlc2VudGVkIGluCitkZWJ1ZyBpbmZvcm1hdGlvbiBtYXkgZW5kIHVwIG5vdCBiZWluZyB1c2VkOyBzZXR0aW5nIHRoaXMgaGlnaGVyIG1heQorZW5hYmxlIHRoZSBjb21waWxlciB0byBmaW5kIG1vcmUgY29tcGxleCBkZWJ1ZyBleHByZXNzaW9ucywgYnV0IGNvbXBpbGUKK3RpbWUgYW5kIG1lbW9yeSB1c2UgbWF5IGdyb3cuICBUaGUgZGVmYXVsdCBpcyAxMi4KKy5JUCAiXGZCbWluLW5vbmRlYnVnLWluc24tdWlkXGZSIiA0CisuSVggSXRlbSAibWluLW5vbmRlYnVnLWluc24tdWlkIgorVXNlIHVpZHMgc3RhcnRpbmcgYXQgdGhpcyBwYXJhbWV0ZXIgZm9yIG5vbmRlYnVnIGluc25zLiAgVGhlIHJhbmdlIGJlbG93Cit0aGUgcGFyYW1ldGVyIGlzIHJlc2VydmVkIGV4Y2x1c2l2ZWx5IGZvciBkZWJ1ZyBpbnNucyBjcmVhdGVkIGJ5CitcJlxmQlwtZnZhclwtdHJhY2tpbmdcLWFzc2lnbm1lbnRzXGZSLCBidXQgZGVidWcgaW5zbnMgbWF5IGdldAorKG5vbi1vdmVybGFwcGluZykgdWlkcyBhYm92ZSBpdCBpZiB0aGUgcmVzZXJ2ZWQgcmFuZ2UgaXMgZXhoYXVzdGVkLgorLklQICJcZkJpcGEtc3JhLXB0ci1ncm93dGgtZmFjdG9yXGZSIiA0CisuSVggSXRlbSAiaXBhLXNyYS1wdHItZ3Jvd3RoLWZhY3RvciIKK0lQQS1TUkEgcmVwbGFjZXMgYSBwb2ludGVyIHRvIGFuIGFnZ3JlZ2F0ZSB3aXRoIG9uZSBvciBtb3JlIG5ldworcGFyYW1ldGVycyBvbmx5IHdoZW4gdGhlaXIgY3VtdWxhdGl2ZSBzaXplIGlzIGxlc3Mgb3IgZXF1YWwgdG8KK1wmXGZCaXBhLXNyYS1wdHItZ3Jvd3RoLWZhY3RvclxmUiB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUgb3JpZ2luYWwKK3BvaW50ZXIgcGFyYW1ldGVyLgorLklQICJcZkJ0bS1tYXgtYWdncmVnYXRlLXNpemVcZlIiIDQKKy5JWCBJdGVtICJ0bS1tYXgtYWdncmVnYXRlLXNpemUiCitXaGVuIG1ha2luZyBjb3BpZXMgb2YgdGhyZWFkLWxvY2FsIHZhcmlhYmxlcyBpbiBhIHRyYW5zYWN0aW9uLCB0aGlzCitwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBzaXplIGluIGJ5dGVzIGFmdGVyIHdoaWNoIHZhcmlhYmxlcyBhcmUKK3NhdmVkIHdpdGggdGhlIGxvZ2dpbmcgZnVuY3Rpb25zIGFzIG9wcG9zZWQgdG8gc2F2ZS9yZXN0b3JlIGNvZGUKK3NlcXVlbmNlIHBhaXJzLiAgVGhpcyBvcHRpb24gb25seSBhcHBsaWVzIHdoZW4gdXNpbmcKK1wmXGZCXC1mZ251XC10bVxmUi4KKy5JUCAiXGZCZ3JhcGhpdGUtbWF4LW5iLXNjb3AtcGFyYW1zXGZSIiA0CisuSVggSXRlbSAiZ3JhcGhpdGUtbWF4LW5iLXNjb3AtcGFyYW1zIgorVG8gYXZvaWQgZXhwb25lbnRpYWwgZWZmZWN0cyBpbiB0aGUgR3JhcGhpdGUgbG9vcCB0cmFuc2Zvcm1zLCB0aGUKK251bWJlciBvZiBwYXJhbWV0ZXJzIGluIGEgU3RhdGljIENvbnRyb2wgUGFydCAoU0NvUCkgaXMgYm91bmRlZC4gIFRoZQorZGVmYXVsdCB2YWx1ZSBpcyAxMCBwYXJhbWV0ZXJzLiAgQSB2YXJpYWJsZSB3aG9zZSB2YWx1ZSBpcyB1bmtub3duIGF0Citjb21waWxhdGlvbiB0aW1lIGFuZCBkZWZpbmVkIG91dHNpZGUgYSBTQ29QIGlzIGEgcGFyYW1ldGVyIG9mIHRoZSBTQ29QLgorLklQICJcZkJncmFwaGl0ZS1tYXgtYmJzLXBlci1mdW5jdGlvblxmUiIgNAorLklYIEl0ZW0gImdyYXBoaXRlLW1heC1iYnMtcGVyLWZ1bmN0aW9uIgorVG8gYXZvaWQgZXhwb25lbnRpYWwgZWZmZWN0cyBpbiB0aGUgZGV0ZWN0aW9uIG9mIFNDb1BzLCB0aGUgc2l6ZSBvZgordGhlIGZ1bmN0aW9ucyBhbmFseXplZCBieSBHcmFwaGl0ZSBpcyBib3VuZGVkLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKKzEwMCBiYXNpYyBibG9ja3MuCisuSVAgIlxmQmxvb3AtYmxvY2stdGlsZS1zaXplXGZSIiA0CisuSVggSXRlbSAibG9vcC1ibG9jay10aWxlLXNpemUiCitMb29wIGJsb2NraW5nIG9yIHN0cmlwIG1pbmluZyB0cmFuc2Zvcm1zLCBlbmFibGVkIHdpdGgKK1wmXGZCXC1mbG9vcFwtYmxvY2tcZlIgb3IgXGZCXC1mbG9vcFwtc3RyaXBcLW1pbmVcZlIsIHN0cmlwIG1pbmUgZWFjaAorbG9vcCBpbiB0aGUgbG9vcCBuZXN0IGJ5IGEgZ2l2ZW4gbnVtYmVyIG9mIGl0ZXJhdGlvbnMuICBUaGUgc3RyaXAKK2xlbmd0aCBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgXGZCbG9vcC1ibG9jay10aWxlLXNpemVcZlIKK3BhcmFtZXRlci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUxIGl0ZXJhdGlvbnMuCisuSVAgIlxmQmlwYS1jcC12YWx1ZS1saXN0LXNpemVcZlIiIDQKKy5JWCBJdGVtICJpcGEtY3AtdmFsdWUtbGlzdC1zaXplIgorSVBBLUNQIGF0dGVtcHRzIHRvIHRyYWNrIGFsbCBwb3NzaWJsZSB2YWx1ZXMgYW5kIHR5cGVzIHBhc3NlZCB0byBhIGZ1bmN0aW9uJ3MKK3BhcmFtZXRlciBpbiBvcmRlciB0byBwcm9wYWdhdGUgdGhlbSBhbmQgcGVyZm9ybSBkZXZpcnR1YWxpemF0aW9uLgorXCZcZkJpcGEtY3AtdmFsdWUtbGlzdC1zaXplXGZSIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2YWx1ZXMgYW5kIHR5cGVzIGl0CitzdG9yZXMgcGVyIG9uZSBmb3JtYWwgcGFyYW1ldGVyIG9mIGEgZnVuY3Rpb24uCisuSVAgIlxmQmx0by1wYXJ0aXRpb25zXGZSIiA0CisuSVggSXRlbSAibHRvLXBhcnRpdGlvbnMiCitTcGVjaWZ5IGRlc2lyZWQgbnVtYmVyIG9mIHBhcnRpdGlvbnMgcHJvZHVjZWQgZHVyaW5nIFxzLTFXSE9QUlxzMCBjb21waWxhdGlvbi4KK1RoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBzaG91bGQgZXhjZWVkIHRoZSBudW1iZXIgb2YgQ1BVcyB1c2VkIGZvciBjb21waWxhdGlvbi4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDMyLgorLklQICJcZkJsdG8tbWlucGFydGl0aW9uXGZSIiA0CisuSVggSXRlbSAibHRvLW1pbnBhcnRpdGlvbiIKK1NpemUgb2YgbWluaW1hbCBwYXJ0aXRpb24gZm9yIFxzLTFXSE9QUlxzMCAoaW4gZXN0aW1hdGVkIGluc3RydWN0aW9ucykuCitUaGlzIHByZXZlbnRzIGV4cGVuc2VzIG9mIHNwbGl0dGluZyB2ZXJ5IHNtYWxsIHByb2dyYW1zIGludG8gdG9vIG1hbnkKK3BhcnRpdGlvbnMuCisuSVAgIlxmQmN4eC1tYXgtbmFtZXNwYWNlcy1mb3ItZGlhZ25vc3RpYy1oZWxwXGZSIiA0CisuSVggSXRlbSAiY3h4LW1heC1uYW1lc3BhY2VzLWZvci1kaWFnbm9zdGljLWhlbHAiCitUaGUgbWF4aW11bSBudW1iZXIgb2YgbmFtZXNwYWNlcyB0byBjb25zdWx0IGZvciBzdWdnZXN0aW9ucyB3aGVuIFwqKEMrCituYW1lIGxvb2t1cCBmYWlscyBmb3IgYW4gaWRlbnRpZmllci4gIFRoZSBkZWZhdWx0IGlzIDEwMDAuCisuSVAgIlxmQnNpbmstZnJlcXVlbmN5LXRocmVzaG9sZFxmUiIgNAorLklYIEl0ZW0gInNpbmstZnJlcXVlbmN5LXRocmVzaG9sZCIKK1RoZSBtYXhpbXVtIHJlbGF0aXZlIGV4ZWN1dGlvbiBmcmVxdWVuY3kgKGluIHBlcmNlbnRzKSBvZiB0aGUgdGFyZ2V0IGJsb2NrCityZWxhdGl2ZSB0byBhIHN0YXRlbWVudCdzIG9yaWdpbmFsIGJsb2NrIHRvIGFsbG93IHN0YXRlbWVudCBzaW5raW5nIG9mIGEKK3N0YXRlbWVudC4gIExhcmdlciBudW1iZXJzIHJlc3VsdCBpbiBtb3JlIGFnZ3Jlc3NpdmUgc3RhdGVtZW50IHNpbmtpbmcuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA3NS4gIEEgc21hbGwgcG9zaXRpdmUgYWRqdXN0bWVudCBpcyBhcHBsaWVkIGZvcgorc3RhdGVtZW50cyB3aXRoIG1lbW9yeSBvcGVyYW5kcyBhcyB0aG9zZSBhcmUgZXZlbiBtb3JlIHByb2ZpdGFibGUgc28gc2luay4KKy5JUCAiXGZCbWF4LXN0b3Jlcy10by1zaW5rXGZSIiA0CisuSVggSXRlbSAibWF4LXN0b3Jlcy10by1zaW5rIgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmRpdGlvbmFsIHN0b3JlcyBwYWlyZXMgdGhhdCBjYW4gYmUgc3Vuay4gIFNldCB0byAwCitpZiBlaXRoZXIgdmVjdG9yaXphdGlvbiAoXGZCXC1mdHJlZVwtdmVjdG9yaXplXGZSKSBvciBpZi1jb252ZXJzaW9uCisoXGZCXC1mdHJlZVwtbG9vcFwtaWZcLWNvbnZlcnRcZlIpIGlzIGRpc2FibGVkLiAgVGhlIGRlZmF1bHQgaXMgMi4KKy5JUCAiXGZCYWxsb3ctbG9hZC1kYXRhLXJhY2VzXGZSIiA0CisuSVggSXRlbSAiYWxsb3ctbG9hZC1kYXRhLXJhY2VzIgorQWxsb3cgb3B0aW1pemVycyB0byBpbnRyb2R1Y2UgbmV3IGRhdGEgcmFjZXMgb24gbG9hZHMuCitTZXQgdG8gMSB0byBhbGxvdywgb3RoZXJ3aXNlIHRvIDAuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK3VubGVzcyBpbXBsaWNpdGx5IHNldCBieSB0aGUgXGZCXC1mbWVtb3J5XC1tb2RlbD1cZlIgb3B0aW9uLgorLklQICJcZkJhbGxvdy1zdG9yZS1kYXRhLXJhY2VzXGZSIiA0CisuSVggSXRlbSAiYWxsb3ctc3RvcmUtZGF0YS1yYWNlcyIKK0FsbG93IG9wdGltaXplcnMgdG8gaW50cm9kdWNlIG5ldyBkYXRhIHJhY2VzIG9uIHN0b3Jlcy4KK1NldCB0byAxIHRvIGFsbG93LCBvdGhlcndpc2UgdG8gMC4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdAordW5sZXNzIGltcGxpY2l0bHkgc2V0IGJ5IHRoZSBcZkJcLWZtZW1vcnlcLW1vZGVsPVxmUiBvcHRpb24uCisuSVAgIlxmQmFsbG93LXBhY2tlZC1sb2FkLWRhdGEtcmFjZXNcZlIiIDQKKy5JWCBJdGVtICJhbGxvdy1wYWNrZWQtbG9hZC1kYXRhLXJhY2VzIgorQWxsb3cgb3B0aW1pemVycyB0byBpbnRyb2R1Y2UgbmV3IGRhdGEgcmFjZXMgb24gcGFja2VkIGRhdGEgbG9hZHMuCitTZXQgdG8gMSB0byBhbGxvdywgb3RoZXJ3aXNlIHRvIDAuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK3VubGVzcyBpbXBsaWNpdGx5IHNldCBieSB0aGUgXGZCXC1mbWVtb3J5XC1tb2RlbD1cZlIgb3B0aW9uLgorLklQICJcZkJhbGxvdy1wYWNrZWQtc3RvcmUtZGF0YS1yYWNlc1xmUiIgNAorLklYIEl0ZW0gImFsbG93LXBhY2tlZC1zdG9yZS1kYXRhLXJhY2VzIgorQWxsb3cgb3B0aW1pemVycyB0byBpbnRyb2R1Y2UgbmV3IGRhdGEgcmFjZXMgb24gcGFja2VkIGRhdGEgc3RvcmVzLgorU2V0IHRvIDEgdG8gYWxsb3csIG90aGVyd2lzZSB0byAwLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0Cit1bmxlc3MgaW1wbGljaXRseSBzZXQgYnkgdGhlIFxmQlwtZm1lbW9yeVwtbW9kZWw9XGZSIG9wdGlvbi4KKy5JUCAiXGZCY2FzZS12YWx1ZXMtdGhyZXNob2xkXGZSIiA0CisuSVggSXRlbSAiY2FzZS12YWx1ZXMtdGhyZXNob2xkIgorVGhlIHNtYWxsZXN0IG51bWJlciBvZiBkaWZmZXJlbnQgdmFsdWVzIGZvciB3aGljaCBpdCBpcyBiZXN0IHRvIHVzZSBhCitqdW1wLXRhYmxlIGluc3RlYWQgb2YgYSB0cmVlIG9mIGNvbmRpdGlvbmFsIGJyYW5jaGVzLiAgSWYgdGhlIHZhbHVlIGlzCiswLCB1c2UgdGhlIGRlZmF1bHQgZm9yIHRoZSBtYWNoaW5lLiAgVGhlIGRlZmF1bHQgaXMgMC4KKy5JUCAiXGZCdHJlZS1yZWFzc29jLXdpZHRoXGZSIiA0CisuSVggSXRlbSAidHJlZS1yZWFzc29jLXdpZHRoIgorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQgaW4gcGFyYWxsZWwgaW4KK3JlYXNzb2NpYXRlZCB0cmVlLiBUaGlzIHBhcmFtZXRlciBvdmVycmlkZXMgdGFyZ2V0IGRlcGVuZGVudAoraGV1cmlzdGljcyB1c2VkIGJ5IGRlZmF1bHQgaWYgaGFzIG5vbiB6ZXJvIHZhbHVlLgorLklQICJcZkJzY2hlZC1wcmVzc3VyZS1hbGdvcml0aG1cZlIiIDQKKy5JWCBJdGVtICJzY2hlZC1wcmVzc3VyZS1hbGdvcml0aG0iCitDaG9vc2UgYmV0d2VlbiB0aGUgdHdvIGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbnMgb2YKK1wmXGZCXC1mc2NoZWRcLXByZXNzdXJlXGZSLiAgQWxnb3JpdGhtIDEgaXMgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uCithbmQgaXMgdGhlIG1vcmUgbGlrZWx5IHRvIHByZXZlbnQgaW5zdHJ1Y3Rpb25zIGZyb20gYmVpbmcgcmVvcmRlcmVkLgorQWxnb3JpdGhtIDIgd2FzIGRlc2lnbmVkIHRvIGJlIGEgY29tcHJvbWlzZSBiZXR3ZWVuIHRoZSByZWxhdGl2ZWx5Citjb25zZXJ2YXRpdmUgYXBwcm9hY2ggdGFrZW4gYnkgYWxnb3JpdGhtIDEgYW5kIHRoZSByYXRoZXIgYWdncmVzc2l2ZQorYXBwcm9hY2ggdGFrZW4gYnkgdGhlIGRlZmF1bHQgc2NoZWR1bGVyLiAgSXQgcmVsaWVzIG1vcmUgaGVhdmlseSBvbgoraGF2aW5nIGEgcmVndWxhciByZWdpc3RlciBmaWxlIGFuZCBhY2N1cmF0ZSByZWdpc3RlciBwcmVzc3VyZSBjbGFzc2VzLgorU2VlIFxmSWhhaWZhXC1zY2hlZC5jXGZSIGluIHRoZSBccy0xR0NDXHMwIHNvdXJjZXMgZm9yIG1vcmUgZGV0YWlscy4KKy5TcAorVGhlIGRlZmF1bHQgY2hvaWNlIGRlcGVuZHMgb24gdGhlIHRhcmdldC4KKy5JUCAiXGZCbWF4LXNsc3ItY2FuZC1zY2FuXGZSIiA0CisuSVggSXRlbSAibWF4LXNsc3ItY2FuZC1zY2FuIgorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBleGlzdGluZyBjYW5kaWRhdGVzIHRoYXQgd2lsbCBiZSBjb25zaWRlcmVkIHdoZW4KK3NlZWtpbmcgYSBiYXNpcyBmb3IgYSBuZXcgc3RyYWlnaHQtbGluZSBzdHJlbmd0aCByZWR1Y3Rpb24gY2FuZGlkYXRlLgorLlJFCisuUlMgNAorLlJFCisuU1MgIk9wdGlvbnMgQ29udHJvbGxpbmcgdGhlIFByZXByb2Nlc3NvciIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIENvbnRyb2xsaW5nIHRoZSBQcmVwcm9jZXNzb3IiCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgdGhlIEMgcHJlcHJvY2Vzc29yLCB3aGljaCBpcyBydW4gb24gZWFjaCBDIHNvdXJjZQorZmlsZSBiZWZvcmUgYWN0dWFsIGNvbXBpbGF0aW9uLgorLlBQCitJZiB5b3UgdXNlIHRoZSBcZkJcLUVcZlIgb3B0aW9uLCBub3RoaW5nIGlzIGRvbmUgZXhjZXB0IHByZXByb2Nlc3NpbmcuCitTb21lIG9mIHRoZXNlIG9wdGlvbnMgbWFrZSBzZW5zZSBvbmx5IHRvZ2V0aGVyIHdpdGggXGZCXC1FXGZSIGJlY2F1c2UKK3RoZXkgY2F1c2UgdGhlIHByZXByb2Nlc3NvciBvdXRwdXQgdG8gYmUgdW5zdWl0YWJsZSBmb3IgYWN0dWFsCitjb21waWxhdGlvbi4KKy5JUCAiXGZCXC1XcCxcZlJcZklvcHRpb25cZlIiIDQKKy5JWCBJdGVtICItV3Asb3B0aW9uIgorWW91IGNhbiB1c2UgXGZCXC1XcCxcZlJcZklvcHRpb25cZlIgdG8gYnlwYXNzIHRoZSBjb21waWxlciBkcml2ZXIKK2FuZCBwYXNzIFxmSW9wdGlvblxmUiBkaXJlY3RseSB0aHJvdWdoIHRvIHRoZSBwcmVwcm9jZXNzb3IuICBJZgorXCZcZklvcHRpb25cZlIgY29udGFpbnMgY29tbWFzLCBpdCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIG9wdGlvbnMgYXQgdGhlCitjb21tYXMuICBIb3dldmVyLCBtYW55IG9wdGlvbnMgYXJlIG1vZGlmaWVkLCB0cmFuc2xhdGVkIG9yIGludGVycHJldGVkCitieSB0aGUgY29tcGlsZXIgZHJpdmVyIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gdGhlIHByZXByb2Nlc3NvciwgYW5kCitcJlxmQlwtV3BcZlIgZm9yY2libHkgYnlwYXNzZXMgdGhpcyBwaGFzZS4gIFRoZSBwcmVwcm9jZXNzb3IncyBkaXJlY3QKK2ludGVyZmFjZSBpcyB1bmRvY3VtZW50ZWQgYW5kIHN1YmplY3QgdG8gY2hhbmdlLCBzbyB3aGVuZXZlciBwb3NzaWJsZQoreW91IHNob3VsZCBhdm9pZCB1c2luZyBcZkJcLVdwXGZSIGFuZCBsZXQgdGhlIGRyaXZlciBoYW5kbGUgdGhlCitvcHRpb25zIGluc3RlYWQuCisuSVAgIlxmQlwtWHByZXByb2Nlc3NvclxmUiBcZklvcHRpb25cZlIiIDQKKy5JWCBJdGVtICItWHByZXByb2Nlc3NvciBvcHRpb24iCitQYXNzIFxmSW9wdGlvblxmUiBhcyBhbiBvcHRpb24gdG8gdGhlIHByZXByb2Nlc3Nvci4gIFlvdSBjYW4gdXNlIHRoaXMgdG8KK3N1cHBseSBzeXN0ZW0tc3BlY2lmaWMgcHJlcHJvY2Vzc29yIG9wdGlvbnMgdGhhdCBccy0xR0NDXHMwIGRvZXMgbm90IAorcmVjb2duaXplLgorLlNwCitJZiB5b3Ugd2FudCB0byBwYXNzIGFuIG9wdGlvbiB0aGF0IHRha2VzIGFuIGFyZ3VtZW50LCB5b3UgbXVzdCB1c2UKK1wmXGZCXC1YcHJlcHJvY2Vzc29yXGZSIHR3aWNlLCBvbmNlIGZvciB0aGUgb3B0aW9uIGFuZCBvbmNlIGZvciB0aGUgYXJndW1lbnQuCisuSVAgIlxmQlwtbm9cLWludGVncmF0ZWRcLWNwcFxmUiIgNAorLklYIEl0ZW0gIi1uby1pbnRlZ3JhdGVkLWNwcCIKK1BlcmZvcm0gcHJlcHJvY2Vzc2luZyBhcyBhIHNlcGFyYXRlIHBhc3MgYmVmb3JlIGNvbXBpbGF0aW9uLgorQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBwZXJmb3JtcyBwcmVwcm9jZXNzaW5nIGFzIGFuIGludGVncmF0ZWQgcGFydCBvZgoraW5wdXQgdG9rZW5pemF0aW9uIGFuZCBwYXJzaW5nLgorSWYgdGhpcyBvcHRpb24gaXMgcHJvdmlkZWQsIHRoZSBhcHByb3ByaWF0ZSBsYW5ndWFnZSBmcm9udCBlbmQKKyhcZkJjYzFcZlIsIFxmQmNjMXBsdXNcZlIsIG9yIFxmQmNjMW9ialxmUiBmb3IgQywgXCooQyssCithbmQgT2JqZWN0aXZlLUMsIHJlc3BlY3RpdmVseSkgaXMgaW5zdGVhZCBpbnZva2VkIHR3aWNlLAorb25jZSBmb3IgcHJlcHJvY2Vzc2luZyBvbmx5IGFuZCBvbmNlIGZvciBhY3R1YWwgY29tcGlsYXRpb24KK29mIHRoZSBwcmVwcm9jZXNzZWQgaW5wdXQuCitUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFxmQlwtQlxmUiBvcgorXCZcZkJcLXdyYXBwZXJcZlIgb3B0aW9ucyB0byBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBwcmVwcm9jZXNzb3Igb3IKK3BlcmZvcm0gYWRkaXRpb25hbCBwcm9jZXNzaW5nIG9mIHRoZSBwcm9ncmFtIHNvdXJjZSBiZXR3ZWVuCitub3JtYWwgcHJlcHJvY2Vzc2luZyBhbmQgY29tcGlsYXRpb24uCisuSVAgIlxmQlwtRFxmUiBcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLUQgbmFtZSIKK1ByZWRlZmluZSBcZkluYW1lXGZSIGFzIGEgbWFjcm8sIHdpdGggZGVmaW5pdGlvbiBcZihDVzFcZlIuCisuSVAgIlxmQlwtRFxmUiBcZkluYW1lXGZSXGZCPVxmUlxmSWRlZmluaXRpb25cZlIiIDQKKy5JWCBJdGVtICItRCBuYW1lPWRlZmluaXRpb24iCitUaGUgY29udGVudHMgb2YgXGZJZGVmaW5pdGlvblxmUiBhcmUgdG9rZW5pemVkIGFuZCBwcm9jZXNzZWQgYXMgaWYKK3RoZXkgYXBwZWFyZWQgZHVyaW5nIHRyYW5zbGF0aW9uIHBoYXNlIHRocmVlIGluIGEgXGZCI2RlZmluZVxmUgorZGlyZWN0aXZlLiAgSW4gcGFydGljdWxhciwgdGhlIGRlZmluaXRpb24gd2lsbCBiZSB0cnVuY2F0ZWQgYnkKK2VtYmVkZGVkIG5ld2xpbmUgY2hhcmFjdGVycy4KKy5TcAorSWYgeW91IGFyZSBpbnZva2luZyB0aGUgcHJlcHJvY2Vzc29yIGZyb20gYSBzaGVsbCBvciBzaGVsbC1saWtlCitwcm9ncmFtIHlvdSBtYXkgbmVlZCB0byB1c2UgdGhlIHNoZWxsJ3MgcXVvdGluZyBzeW50YXggdG8gcHJvdGVjdAorY2hhcmFjdGVycyBzdWNoIGFzIHNwYWNlcyB0aGF0IGhhdmUgYSBtZWFuaW5nIGluIHRoZSBzaGVsbCBzeW50YXguCisuU3AKK0lmIHlvdSB3aXNoIHRvIGRlZmluZSBhIGZ1bmN0aW9uLWxpa2UgbWFjcm8gb24gdGhlIGNvbW1hbmQgbGluZSwgd3JpdGUKK2l0cyBhcmd1bWVudCBsaXN0IHdpdGggc3Vycm91bmRpbmcgcGFyZW50aGVzZXMgYmVmb3JlIHRoZSBlcXVhbHMgc2lnbgorKGlmIGFueSkuICBQYXJlbnRoZXNlcyBhcmUgbWVhbmluZ2Z1bCB0byBtb3N0IHNoZWxscywgc28geW91IHdpbGwgbmVlZAordG8gcXVvdGUgdGhlIG9wdGlvbi4gIFdpdGggXGZCc2hcZlIgYW5kIFxmQmNzaFxmUiwKK1wmXGZCXC1EJ1xmUlxmSW5hbWVcZlJcZkIoXGZSXGZJYXJncy4uLlxmUlxmQik9XGZSXGZJZGVmaW5pdGlvblxmUlxmQidcZlIgd29ya3MuCisuU3AKK1wmXGZCXC1EXGZSIGFuZCBcZkJcLVVcZlIgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlciB0aGV5CithcmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIEFsbCBcZkJcLWltYWNyb3NcZlIgXGZJZmlsZVxmUiBhbmQKK1wmXGZCXC1pbmNsdWRlXGZSIFxmSWZpbGVcZlIgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGFmdGVyIGFsbAorXCZcZkJcLURcZlIgYW5kIFxmQlwtVVxmUiBvcHRpb25zLgorLklQICJcZkJcLVVcZlIgXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1VIG5hbWUiCitDYW5jZWwgYW55IHByZXZpb3VzIGRlZmluaXRpb24gb2YgXGZJbmFtZVxmUiwgZWl0aGVyIGJ1aWx0IGluIG9yCitwcm92aWRlZCB3aXRoIGEgXGZCXC1EXGZSIG9wdGlvbi4KKy5JUCAiXGZCXC11bmRlZlxmUiIgNAorLklYIEl0ZW0gIi11bmRlZiIKK0RvIG5vdCBwcmVkZWZpbmUgYW55IHN5c3RlbS1zcGVjaWZpYyBvciBHQ0Mtc3BlY2lmaWMgbWFjcm9zLiAgVGhlCitzdGFuZGFyZCBwcmVkZWZpbmVkIG1hY3JvcyByZW1haW4gZGVmaW5lZC4KKy5JUCAiXGZCXC1JXGZSIFxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1JIGRpciIKK0FkZCB0aGUgZGlyZWN0b3J5IFxmSWRpclxmUiB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZAorZm9yIGhlYWRlciBmaWxlcy4KK0RpcmVjdG9yaWVzIG5hbWVkIGJ5IFxmQlwtSVxmUiBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBzdGFuZGFyZAorc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMuICBJZiB0aGUgZGlyZWN0b3J5IFxmSWRpclxmUiBpcyBhIHN0YW5kYXJkCitzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnksIHRoZSBvcHRpb24gaXMgaWdub3JlZCB0byBlbnN1cmUgdGhhdCB0aGUKK2RlZmF1bHQgc2VhcmNoIG9yZGVyIGZvciBzeXN0ZW0gZGlyZWN0b3JpZXMgYW5kIHRoZSBzcGVjaWFsIHRyZWF0bWVudAorb2Ygc3lzdGVtIGhlYWRlcnMgYXJlIG5vdCBkZWZlYXRlZAorXCYuCitJZiBcZklkaXJcZlIgYmVnaW5zIHdpdGggXGYoQ1dcKihDYD1cKihDJ1xmUiwgdGhlbiB0aGUgXGYoQ1dcKihDYD1cKihDJ1xmUiB3aWxsIGJlIHJlcGxhY2VkCitieSB0aGUgc3lzcm9vdCBwcmVmaXg7IHNlZSBcZkJcLVwtc3lzcm9vdFxmUiBhbmQgXGZCXC1pc3lzcm9vdFxmUi4KKy5JUCAiXGZCXC1vXGZSIFxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICItbyBmaWxlIgorV3JpdGUgb3V0cHV0IHRvIFxmSWZpbGVcZlIuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgXGZJZmlsZVxmUgorYXMgdGhlIHNlY29uZCBub24tb3B0aW9uIGFyZ3VtZW50IHRvIFxmQmNwcFxmUi4gIFxmQmdjY1xmUiBoYXMgYQorZGlmZmVyZW50IGludGVycHJldGF0aW9uIG9mIGEgc2Vjb25kIG5vbi1vcHRpb24gYXJndW1lbnQsIHNvIHlvdSBtdXN0Cit1c2UgXGZCXC1vXGZSIHRvIHNwZWNpZnkgdGhlIG91dHB1dCBmaWxlLgorLklQICJcZkJcLVdhbGxcZlIiIDQKKy5JWCBJdGVtICItV2FsbCIKK1R1cm5zIG9uIGFsbCBvcHRpb25hbCB3YXJuaW5ncyB3aGljaCBhcmUgZGVzaXJhYmxlIGZvciBub3JtYWwgY29kZS4KK0F0IHByZXNlbnQgdGhpcyBpcyBcZkJcLVdjb21tZW50XGZSLCBcZkJcLVd0cmlncmFwaHNcZlIsCitcJlxmQlwtV211bHRpY2hhclxmUiBhbmQgYSB3YXJuaW5nIGFib3V0IGludGVnZXIgcHJvbW90aW9uIGNhdXNpbmcgYQorY2hhbmdlIG9mIHNpZ24gaW4gXGYoQ1dcKihDYCNpZlwqKEMnXGZSIGV4cHJlc3Npb25zLiAgTm90ZSB0aGF0IG1hbnkgb2YgdGhlCitwcmVwcm9jZXNzb3IncyB3YXJuaW5ncyBhcmUgb24gYnkgZGVmYXVsdCBhbmQgaGF2ZSBubyBvcHRpb25zIHRvCitjb250cm9sIHRoZW0uCisuSVAgIlxmQlwtV2NvbW1lbnRcZlIiIDQKKy5JWCBJdGVtICItV2NvbW1lbnQiCisuUEQgMAorLklQICJcZkJcLVdjb21tZW50c1xmUiIgNAorLklYIEl0ZW0gIi1XY29tbWVudHMiCisuUEQKK1dhcm4gd2hlbmV2ZXIgYSBjb21tZW50LXN0YXJ0IHNlcXVlbmNlIFxmQi8qXGZSIGFwcGVhcnMgaW4gYSBcZkIvKlxmUgorY29tbWVudCwgb3Igd2hlbmV2ZXIgYSBiYWNrc2xhc2gtbmV3bGluZSBhcHBlYXJzIGluIGEgXGZCLy9cZlIgY29tbWVudC4KKyhCb3RoIGZvcm1zIGhhdmUgdGhlIHNhbWUgZWZmZWN0LikKKy5JUCAiXGZCXC1XdHJpZ3JhcGhzXGZSIiA0CisuSVggSXRlbSAiLVd0cmlncmFwaHMiCitNb3N0IHRyaWdyYXBocyBpbiBjb21tZW50cyBjYW5ub3QgYWZmZWN0IHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtLgorSG93ZXZlciwgYSB0cmlncmFwaCB0aGF0IHdvdWxkIGZvcm0gYW4gZXNjYXBlZCBuZXdsaW5lIChcZkI/Py9cZlIgYXQKK3RoZSBlbmQgb2YgYSBsaW5lKSBjYW4sIGJ5IGNoYW5naW5nIHdoZXJlIHRoZSBjb21tZW50IGJlZ2lucyBvciBlbmRzLgorVGhlcmVmb3JlLCBvbmx5IHRyaWdyYXBocyB0aGF0IHdvdWxkIGZvcm0gZXNjYXBlZCBuZXdsaW5lcyBwcm9kdWNlCit3YXJuaW5ncyBpbnNpZGUgYSBjb21tZW50LgorLlNwCitUaGlzIG9wdGlvbiBpcyBpbXBsaWVkIGJ5IFxmQlwtV2FsbFxmUi4gIElmIFxmQlwtV2FsbFxmUiBpcyBub3QKK2dpdmVuLCB0aGlzIG9wdGlvbiBpcyBzdGlsbCBlbmFibGVkIHVubGVzcyB0cmlncmFwaHMgYXJlIGVuYWJsZWQuICBUbworZ2V0IHRyaWdyYXBoIGNvbnZlcnNpb24gd2l0aG91dCB3YXJuaW5ncywgYnV0IGdldCB0aGUgb3RoZXIKK1wmXGZCXC1XYWxsXGZSIHdhcm5pbmdzLCB1c2UgXGZCXC10cmlncmFwaHMgXC1XYWxsIFwtV25vXC10cmlncmFwaHNcZlIuCisuSVAgIlxmQlwtV3RyYWRpdGlvbmFsXGZSIiA0CisuSVggSXRlbSAiLVd0cmFkaXRpb25hbCIKK1dhcm4gYWJvdXQgY2VydGFpbiBjb25zdHJ1Y3RzIHRoYXQgYmVoYXZlIGRpZmZlcmVudGx5IGluIHRyYWRpdGlvbmFsIGFuZAorXCZccy0xSVNPXHMwIEMuICBBbHNvIHdhcm4gYWJvdXQgXHMtMUlTT1xzMCBDIGNvbnN0cnVjdHMgdGhhdCBoYXZlIG5vIHRyYWRpdGlvbmFsIEMKK2VxdWl2YWxlbnQsIGFuZCBwcm9ibGVtYXRpYyBjb25zdHJ1Y3RzIHdoaWNoIHNob3VsZCBiZSBhdm9pZGVkLgorLklQICJcZkJcLVd1bmRlZlxmUiIgNAorLklYIEl0ZW0gIi1XdW5kZWYiCitXYXJuIHdoZW5ldmVyIGFuIGlkZW50aWZpZXIgd2hpY2ggaXMgbm90IGEgbWFjcm8gaXMgZW5jb3VudGVyZWQgaW4gYW4KK1wmXGZCI2lmXGZSIGRpcmVjdGl2ZSwgb3V0c2lkZSBvZiBcZkJkZWZpbmVkXGZSLiAgU3VjaCBpZGVudGlmaWVycyBhcmUKK3JlcGxhY2VkIHdpdGggemVyby4KKy5JUCAiXGZCXC1XdW51c2VkXC1tYWNyb3NcZlIiIDQKKy5JWCBJdGVtICItV3VudXNlZC1tYWNyb3MiCitXYXJuIGFib3V0IG1hY3JvcyBkZWZpbmVkIGluIHRoZSBtYWluIGZpbGUgdGhhdCBhcmUgdW51c2VkLiAgQSBtYWNybworaXMgXGZJdXNlZFxmUiBpZiBpdCBpcyBleHBhbmRlZCBvciB0ZXN0ZWQgZm9yIGV4aXN0ZW5jZSBhdCBsZWFzdCBvbmNlLgorVGhlIHByZXByb2Nlc3NvciB3aWxsIGFsc28gd2FybiBpZiB0aGUgbWFjcm8gaGFzIG5vdCBiZWVuIHVzZWQgYXQgdGhlCit0aW1lIGl0IGlzIHJlZGVmaW5lZCBvciB1bmRlZmluZWQuCisuU3AKK0J1aWx0LWluIG1hY3JvcywgbWFjcm9zIGRlZmluZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIG1hY3JvcworZGVmaW5lZCBpbiBpbmNsdWRlIGZpbGVzIGFyZSBub3Qgd2FybmVkIGFib3V0LgorLlNwCitcJlxmSU5vdGU6XGZSIElmIGEgbWFjcm8gaXMgYWN0dWFsbHkgdXNlZCwgYnV0IG9ubHkgdXNlZCBpbiBza2lwcGVkCitjb25kaXRpb25hbCBibG9ja3MsIHRoZW4gXHMtMUNQUFxzMCB3aWxsIHJlcG9ydCBpdCBhcyB1bnVzZWQuICBUbyBhdm9pZCB0aGUKK3dhcm5pbmcgaW4gc3VjaCBhIGNhc2UsIHlvdSBtaWdodCBpbXByb3ZlIHRoZSBzY29wZSBvZiB0aGUgbWFjcm8ncworZGVmaW5pdGlvbiBieSwgZm9yIGV4YW1wbGUsIG1vdmluZyBpdCBpbnRvIHRoZSBmaXJzdCBza2lwcGVkIGJsb2NrLgorQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHByb3ZpZGUgYSBkdW1teSB1c2Ugd2l0aCBzb21ldGhpbmcgbGlrZToKKy5TcAorLlZiIDIKK1wmICAgICAgICAjaWYgZGVmaW5lZCB0aGVfbWFjcm9fY2F1c2luZ190aGVfd2FybmluZworXCYgICAgICAgICNlbmRpZgorLlZlCisuSVAgIlxmQlwtV2VuZGlmXC1sYWJlbHNcZlIiIDQKKy5JWCBJdGVtICItV2VuZGlmLWxhYmVscyIKK1dhcm4gd2hlbmV2ZXIgYW4gXGZCI2Vsc2VcZlIgb3IgYW4gXGZCI2VuZGlmXGZSIGFyZSBmb2xsb3dlZCBieSB0ZXh0LgorVGhpcyB1c3VhbGx5IGhhcHBlbnMgaW4gY29kZSBvZiB0aGUgZm9ybQorLlNwCisuVmIgNQorXCYgICAgICAgICNpZiBGT08KK1wmICAgICAgICAuLi4KK1wmICAgICAgICAjZWxzZSBGT08KK1wmICAgICAgICAuLi4KK1wmICAgICAgICAjZW5kaWYgRk9PCisuVmUKKy5TcAorVGhlIHNlY29uZCBhbmQgdGhpcmQgXGYoQ1dcKihDYEZPT1wqKEMnXGZSIHNob3VsZCBiZSBpbiBjb21tZW50cywgYnV0IG9mdGVuIGFyZSBub3QKK2luIG9sZGVyIHByb2dyYW1zLiAgVGhpcyB3YXJuaW5nIGlzIG9uIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtV2Vycm9yXGZSIiA0CisuSVggSXRlbSAiLVdlcnJvciIKK01ha2UgYWxsIHdhcm5pbmdzIGludG8gaGFyZCBlcnJvcnMuICBTb3VyY2UgY29kZSB3aGljaCB0cmlnZ2VycyB3YXJuaW5ncword2lsbCBiZSByZWplY3RlZC4KKy5JUCAiXGZCXC1Xc3lzdGVtXC1oZWFkZXJzXGZSIiA0CisuSVggSXRlbSAiLVdzeXN0ZW0taGVhZGVycyIKK0lzc3VlIHdhcm5pbmdzIGZvciBjb2RlIGluIHN5c3RlbSBoZWFkZXJzLiAgVGhlc2UgYXJlIG5vcm1hbGx5IHVuaGVscGZ1bAoraW4gZmluZGluZyBidWdzIGluIHlvdXIgb3duIGNvZGUsIHRoZXJlZm9yZSBzdXBwcmVzc2VkLiAgSWYgeW91IGFyZQorcmVzcG9uc2libGUgZm9yIHRoZSBzeXN0ZW0gbGlicmFyeSwgeW91IG1heSB3YW50IHRvIHNlZSB0aGVtLgorLklQICJcZkJcLXdcZlIiIDQKKy5JWCBJdGVtICItdyIKK1N1cHByZXNzIGFsbCB3YXJuaW5ncywgaW5jbHVkaW5nIHRob3NlIHdoaWNoIFxzLTFHTlVcczAgXHMtMUNQUFxzMCBpc3N1ZXMgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1wZWRhbnRpY1xmUiIgNAorLklYIEl0ZW0gIi1wZWRhbnRpYyIKK0lzc3VlIGFsbCB0aGUgbWFuZGF0b3J5IGRpYWdub3N0aWNzIGxpc3RlZCBpbiB0aGUgQyBzdGFuZGFyZC4gIFNvbWUgb2YKK3RoZW0gYXJlIGxlZnQgb3V0IGJ5IGRlZmF1bHQsIHNpbmNlIHRoZXkgdHJpZ2dlciBmcmVxdWVudGx5IG9uIGhhcm1sZXNzCitjb2RlLgorLklQICJcZkJcLXBlZGFudGljXC1lcnJvcnNcZlIiIDQKKy5JWCBJdGVtICItcGVkYW50aWMtZXJyb3JzIgorSXNzdWUgYWxsIHRoZSBtYW5kYXRvcnkgZGlhZ25vc3RpY3MsIGFuZCBtYWtlIGFsbCBtYW5kYXRvcnkgZGlhZ25vc3RpY3MKK2ludG8gZXJyb3JzLiAgVGhpcyBpbmNsdWRlcyBtYW5kYXRvcnkgZGlhZ25vc3RpY3MgdGhhdCBccy0xR0NDXHMwIGlzc3Vlcword2l0aG91dCBcZkJcLXBlZGFudGljXGZSIGJ1dCB0cmVhdHMgYXMgd2FybmluZ3MuCisuSVAgIlxmQlwtTVxmUiIgNAorLklYIEl0ZW0gIi1NIgorSW5zdGVhZCBvZiBvdXRwdXR0aW5nIHRoZSByZXN1bHQgb2YgcHJlcHJvY2Vzc2luZywgb3V0cHV0IGEgcnVsZQorc3VpdGFibGUgZm9yIFxmQm1ha2VcZlIgZGVzY3JpYmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBtYWluCitzb3VyY2UgZmlsZS4gIFRoZSBwcmVwcm9jZXNzb3Igb3V0cHV0cyBvbmUgXGZCbWFrZVxmUiBydWxlIGNvbnRhaW5pbmcKK3RoZSBvYmplY3QgZmlsZSBuYW1lIGZvciB0aGF0IHNvdXJjZSBmaWxlLCBhIGNvbG9uLCBhbmQgdGhlIG5hbWVzIG9mIGFsbAordGhlIGluY2x1ZGVkIGZpbGVzLCBpbmNsdWRpbmcgdGhvc2UgY29taW5nIGZyb20gXGZCXC1pbmNsdWRlXGZSIG9yCitcJlxmQlwtaW1hY3Jvc1xmUiBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKy5TcAorVW5sZXNzIHNwZWNpZmllZCBleHBsaWNpdGx5ICh3aXRoIFxmQlwtTVRcZlIgb3IgXGZCXC1NUVxmUiksIHRoZQorb2JqZWN0IGZpbGUgbmFtZSBjb25zaXN0cyBvZiB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgd2l0aCBhbnkKK3N1ZmZpeCByZXBsYWNlZCB3aXRoIG9iamVjdCBmaWxlIHN1ZmZpeCBhbmQgd2l0aCBhbnkgbGVhZGluZyBkaXJlY3RvcnkKK3BhcnRzIHJlbW92ZWQuICBJZiB0aGVyZSBhcmUgbWFueSBpbmNsdWRlZCBmaWxlcyB0aGVuIHRoZSBydWxlIGlzCitzcGxpdCBpbnRvIHNldmVyYWwgbGluZXMgdXNpbmcgXGZCXGVcZlJcLW5ld2xpbmUuICBUaGUgcnVsZSBoYXMgbm8KK2NvbW1hbmRzLgorLlNwCitUaGlzIG9wdGlvbiBkb2VzIG5vdCBzdXBwcmVzcyB0aGUgcHJlcHJvY2Vzc29yJ3MgZGVidWcgb3V0cHV0LCBzdWNoIGFzCitcJlxmQlwtZE1cZlIuICBUbyBhdm9pZCBtaXhpbmcgc3VjaCBkZWJ1ZyBvdXRwdXQgd2l0aCB0aGUgZGVwZW5kZW5jeQorcnVsZXMgeW91IHNob3VsZCBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGUgd2l0aAorXCZcZkJcLU1GXGZSLCBvciB1c2UgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbGlrZQorXCZcZkJccy0xREVQRU5ERU5DSUVTX09VVFBVVFxzMFxmUi4gIERlYnVnIG91dHB1dAord2lsbCBzdGlsbCBiZSBzZW50IHRvIHRoZSByZWd1bGFyIG91dHB1dCBzdHJlYW0gYXMgbm9ybWFsLgorLlNwCitQYXNzaW5nIFxmQlwtTVxmUiB0byB0aGUgZHJpdmVyIGltcGxpZXMgXGZCXC1FXGZSLCBhbmQgc3VwcHJlc3Nlcword2FybmluZ3Mgd2l0aCBhbiBpbXBsaWNpdCBcZkJcLXdcZlIuCisuSVAgIlxmQlwtTU1cZlIiIDQKKy5JWCBJdGVtICItTU0iCitMaWtlIFxmQlwtTVxmUiBidXQgZG8gbm90IG1lbnRpb24gaGVhZGVyIGZpbGVzIHRoYXQgYXJlIGZvdW5kIGluCitzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzLCBub3IgaGVhZGVyIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkLAorZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBzdWNoIGEgaGVhZGVyLgorLlNwCitUaGlzIGltcGxpZXMgdGhhdCB0aGUgY2hvaWNlIG9mIGFuZ2xlIGJyYWNrZXRzIG9yIGRvdWJsZSBxdW90ZXMgaW4gYW4KK1wmXGZCI2luY2x1ZGVcZlIgZGlyZWN0aXZlIGRvZXMgbm90IGluIGl0c2VsZiBkZXRlcm1pbmUgd2hldGhlciB0aGF0CitoZWFkZXIgd2lsbCBhcHBlYXIgaW4gXGZCXC1NTVxmUiBkZXBlbmRlbmN5IG91dHB1dC4gIFRoaXMgaXMgYQorc2xpZ2h0IGNoYW5nZSBpbiBzZW1hbnRpY3MgZnJvbSBccy0xR0NDXHMwIHZlcnNpb25zIDMuMCBhbmQgZWFybGllci4KKy5JUCAiXGZCXC1NRlxmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLU1GIGZpbGUiCitXaGVuIHVzZWQgd2l0aCBcZkJcLU1cZlIgb3IgXGZCXC1NTVxmUiwgc3BlY2lmaWVzIGEKK2ZpbGUgdG8gd3JpdGUgdGhlIGRlcGVuZGVuY2llcyB0by4gIElmIG5vIFxmQlwtTUZcZlIgc3dpdGNoIGlzIGdpdmVuCit0aGUgcHJlcHJvY2Vzc29yIHNlbmRzIHRoZSBydWxlcyB0byB0aGUgc2FtZSBwbGFjZSBpdCB3b3VsZCBoYXZlIHNlbnQKK3ByZXByb2Nlc3NlZCBvdXRwdXQuCisuU3AKK1doZW4gdXNlZCB3aXRoIHRoZSBkcml2ZXIgb3B0aW9ucyBcZkJcLU1EXGZSIG9yIFxmQlwtTU1EXGZSLAorXCZcZkJcLU1GXGZSIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlLgorLklQICJcZkJcLU1HXGZSIiA0CisuSVggSXRlbSAiLU1HIgorSW4gY29uanVuY3Rpb24gd2l0aCBhbiBvcHRpb24gc3VjaCBhcyBcZkJcLU1cZlIgcmVxdWVzdGluZworZGVwZW5kZW5jeSBnZW5lcmF0aW9uLCBcZkJcLU1HXGZSIGFzc3VtZXMgbWlzc2luZyBoZWFkZXIgZmlsZXMgYXJlCitnZW5lcmF0ZWQgZmlsZXMgYW5kIGFkZHMgdGhlbSB0byB0aGUgZGVwZW5kZW5jeSBsaXN0IHdpdGhvdXQgcmFpc2luZworYW4gZXJyb3IuICBUaGUgZGVwZW5kZW5jeSBmaWxlbmFtZSBpcyB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZQorXCZcZihDV1wqKENgI2luY2x1ZGVcKihDJ1xmUiBkaXJlY3RpdmUgd2l0aG91dCBwcmVwZW5kaW5nIGFueSBwYXRoLiAgXGZCXC1NR1xmUgorYWxzbyBzdXBwcmVzc2VzIHByZXByb2Nlc3NlZCBvdXRwdXQsIGFzIGEgbWlzc2luZyBoZWFkZXIgZmlsZSByZW5kZXJzCit0aGlzIHVzZWxlc3MuCisuU3AKK1RoaXMgZmVhdHVyZSBpcyB1c2VkIGluIGF1dG9tYXRpYyB1cGRhdGluZyBvZiBtYWtlZmlsZXMuCisuSVAgIlxmQlwtTVBcZlIiIDQKKy5JWCBJdGVtICItTVAiCitUaGlzIG9wdGlvbiBpbnN0cnVjdHMgXHMtMUNQUFxzMCB0byBhZGQgYSBwaG9ueSB0YXJnZXQgZm9yIGVhY2ggZGVwZW5kZW5jeQorb3RoZXIgdGhhbiB0aGUgbWFpbiBmaWxlLCBjYXVzaW5nIGVhY2ggdG8gZGVwZW5kIG9uIG5vdGhpbmcuICBUaGVzZQorZHVtbXkgcnVsZXMgd29yayBhcm91bmQgZXJyb3JzIFxmQm1ha2VcZlIgZ2l2ZXMgaWYgeW91IHJlbW92ZSBoZWFkZXIKK2ZpbGVzIHdpdGhvdXQgdXBkYXRpbmcgdGhlIFxmSU1ha2VmaWxlXGZSIHRvIG1hdGNoLgorLlNwCitUaGlzIGlzIHR5cGljYWwgb3V0cHV0OgorLlNwCisuVmIgMQorXCYgICAgICAgIHRlc3QubzogdGVzdC5jIHRlc3QuaAorXCYgICAgICAgIAorXCYgICAgICAgIHRlc3QuaDoKKy5WZQorLklQICJcZkJcLU1UXGZSIFxmSXRhcmdldFxmUiIgNAorLklYIEl0ZW0gIi1NVCB0YXJnZXQiCitDaGFuZ2UgdGhlIHRhcmdldCBvZiB0aGUgcnVsZSBlbWl0dGVkIGJ5IGRlcGVuZGVuY3kgZ2VuZXJhdGlvbi4gIEJ5CitkZWZhdWx0IFxzLTFDUFBcczAgdGFrZXMgdGhlIG5hbWUgb2YgdGhlIG1haW4gaW5wdXQgZmlsZSwgZGVsZXRlcyBhbnkKK2RpcmVjdG9yeSBjb21wb25lbnRzIGFuZCBhbnkgZmlsZSBzdWZmaXggc3VjaCBhcyBcZkIuY1xmUiwgYW5kCithcHBlbmRzIHRoZSBwbGF0Zm9ybSdzIHVzdWFsIG9iamVjdCBzdWZmaXguICBUaGUgcmVzdWx0IGlzIHRoZSB0YXJnZXQuCisuU3AKK0FuIFxmQlwtTVRcZlIgb3B0aW9uIHdpbGwgc2V0IHRoZSB0YXJnZXQgdG8gYmUgZXhhY3RseSB0aGUgc3RyaW5nIHlvdQorc3BlY2lmeS4gIElmIHlvdSB3YW50IG11bHRpcGxlIHRhcmdldHMsIHlvdSBjYW4gc3BlY2lmeSB0aGVtIGFzIGEgc2luZ2xlCithcmd1bWVudCB0byBcZkJcLU1UXGZSLCBvciB1c2UgbXVsdGlwbGUgXGZCXC1NVFxmUiBvcHRpb25zLgorLlNwCitGb3IgZXhhbXBsZSwgXGZCXC1NVFwgJyQob2JqcGZ4KWZvby5vJ1xmUiBtaWdodCBnaXZlCisuU3AKKy5WYiAxCitcJiAgICAgICAgJChvYmpwZngpZm9vLm86IGZvby5jCisuVmUKKy5JUCAiXGZCXC1NUVxmUiBcZkl0YXJnZXRcZlIiIDQKKy5JWCBJdGVtICItTVEgdGFyZ2V0IgorU2FtZSBhcyBcZkJcLU1UXGZSLCBidXQgaXQgcXVvdGVzIGFueSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBzcGVjaWFsIHRvCitNYWtlLiAgXGZCXC1NUVwgJyQob2JqcGZ4KWZvby5vJ1xmUiBnaXZlcworLlNwCisuVmIgMQorXCYgICAgICAgICQkKG9ianBmeClmb28ubzogZm9vLmMKKy5WZQorLlNwCitUaGUgZGVmYXVsdCB0YXJnZXQgaXMgYXV0b21hdGljYWxseSBxdW90ZWQsIGFzIGlmIGl0IHdlcmUgZ2l2ZW4gd2l0aAorXCZcZkJcLU1RXGZSLgorLklQICJcZkJcLU1EXGZSIiA0CisuSVggSXRlbSAiLU1EIgorXCZcZkJcLU1EXGZSIGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1NIFwtTUZcZlIgXGZJZmlsZVxmUiwgZXhjZXB0IHRoYXQKK1wmXGZCXC1FXGZSIGlzIG5vdCBpbXBsaWVkLiAgVGhlIGRyaXZlciBkZXRlcm1pbmVzIFxmSWZpbGVcZlIgYmFzZWQgb24KK3doZXRoZXIgYW4gXGZCXC1vXGZSIG9wdGlvbiBpcyBnaXZlbi4gIElmIGl0IGlzLCB0aGUgZHJpdmVyIHVzZXMgaXRzCithcmd1bWVudCBidXQgd2l0aCBhIHN1ZmZpeCBvZiBcZkkuZFxmUiwgb3RoZXJ3aXNlIGl0IHRha2VzIHRoZSBuYW1lCitvZiB0aGUgaW5wdXQgZmlsZSwgcmVtb3ZlcyBhbnkgZGlyZWN0b3J5IGNvbXBvbmVudHMgYW5kIHN1ZmZpeCwgYW5kCithcHBsaWVzIGEgXGZJLmRcZlIgc3VmZml4LgorLlNwCitJZiBcZkJcLU1EXGZSIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBcZkJcLUVcZlIsIGFueQorXCZcZkJcLW9cZlIgc3dpdGNoIGlzIHVuZGVyc3Rvb2QgdG8gc3BlY2lmeSB0aGUgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZSwgYnV0IGlmIHVzZWQgd2l0aG91dCBcZkJcLUVcZlIsIGVhY2ggXGZCXC1vXGZSCitpcyB1bmRlcnN0b29kIHRvIHNwZWNpZnkgYSB0YXJnZXQgb2JqZWN0IGZpbGUuCisuU3AKK1NpbmNlIFxmQlwtRVxmUiBpcyBub3QgaW1wbGllZCwgXGZCXC1NRFxmUiBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZQorYSBkZXBlbmRlbmN5IG91dHB1dCBmaWxlIGFzIGEgc2lkZS1lZmZlY3Qgb2YgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuCisuSVAgIlxmQlwtTU1EXGZSIiA0CisuSVggSXRlbSAiLU1NRCIKK0xpa2UgXGZCXC1NRFxmUiBleGNlcHQgbWVudGlvbiBvbmx5IHVzZXIgaGVhZGVyIGZpbGVzLCBub3Qgc3lzdGVtCitoZWFkZXIgZmlsZXMuCisuSVAgIlxmQlwtZnBjaFwtZGVwc1xmUiIgNAorLklYIEl0ZW0gIi1mcGNoLWRlcHMiCitXaGVuIHVzaW5nIHByZWNvbXBpbGVkIGhlYWRlcnMsIHRoaXMgZmxhZword2lsbCBjYXVzZSB0aGUgZGVwZW5kZW5jeS1vdXRwdXQgZmxhZ3MgdG8gYWxzbyBsaXN0IHRoZSBmaWxlcyBmcm9tIHRoZQorcHJlY29tcGlsZWQgaGVhZGVyJ3MgZGVwZW5kZW5jaWVzLiAgSWYgbm90IHNwZWNpZmllZCBvbmx5IHRoZQorcHJlY29tcGlsZWQgaGVhZGVyIHdvdWxkIGJlIGxpc3RlZCBhbmQgbm90IHRoZSBmaWxlcyB0aGF0IHdlcmUgdXNlZCB0bworY3JlYXRlIGl0IGJlY2F1c2UgdGhvc2UgZmlsZXMgYXJlIG5vdCBjb25zdWx0ZWQgd2hlbiBhIHByZWNvbXBpbGVkCitoZWFkZXIgaXMgdXNlZC4KKy5JUCAiXGZCXC1mcGNoXC1wcmVwcm9jZXNzXGZSIiA0CisuSVggSXRlbSAiLWZwY2gtcHJlcHJvY2VzcyIKK1RoaXMgb3B0aW9uIGFsbG93cyB1c2Ugb2YgYSBwcmVjb21waWxlZCBoZWFkZXIgdG9nZXRoZXIgd2l0aCBcZkJcLUVcZlIuICBJdCBpbnNlcnRzIGEgc3BlY2lhbCBcZihDV1wqKENgI3ByYWdtYVwqKEMnXGZSLAorXCZcZihDV1wqKENgI3ByYWdtYSBHQ0MgcGNoX3ByZXByb2Nlc3MgIlxmKENJZmlsZW5hbWVcZihDVyJcKihDJ1xmUiBpbiB0aGUgb3V0cHV0IHRvIG1hcmsKK3RoZSBwbGFjZSB3aGVyZSB0aGUgcHJlY29tcGlsZWQgaGVhZGVyIHdhcyBmb3VuZCwgYW5kIGl0cyBcZklmaWxlbmFtZVxmUi4KK1doZW4gXGZCXC1mcHJlcHJvY2Vzc2VkXGZSIGlzIGluIHVzZSwgXHMtMUdDQ1xzMCByZWNvZ25pemVzIHRoaXMgXGYoQ1dcKihDYCNwcmFnbWFcKihDJ1xmUgorYW5kIGxvYWRzIHRoZSBccy0xUENIXHMwLgorLlNwCitUaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdCwgYmVjYXVzZSB0aGUgcmVzdWx0aW5nIHByZXByb2Nlc3NlZCBvdXRwdXQKK2lzIG9ubHkgcmVhbGx5IHN1aXRhYmxlIGFzIGlucHV0IHRvIFxzLTFHQ0NcczAuICBJdCBpcyBzd2l0Y2hlZCBvbiBieQorXCZcZkJcLXNhdmVcLXRlbXBzXGZSLgorLlNwCitZb3Ugc2hvdWxkIG5vdCB3cml0ZSB0aGlzIFxmKENXXCooQ2AjcHJhZ21hXCooQydcZlIgaW4geW91ciBvd24gY29kZSwgYnV0IGl0IGlzCitzYWZlIHRvIGVkaXQgdGhlIGZpbGVuYW1lIGlmIHRoZSBccy0xUENIXHMwIGZpbGUgaXMgYXZhaWxhYmxlIGluIGEgZGlmZmVyZW50Citsb2NhdGlvbi4gIFRoZSBmaWxlbmFtZSBtYXkgYmUgYWJzb2x1dGUgb3IgaXQgbWF5IGJlIHJlbGF0aXZlIHRvIFxzLTFHQ0NcczAncworY3VycmVudCBkaXJlY3RvcnkuCisuSVAgIlxmQlwteCBjXGZSIiA0CisuSVggSXRlbSAiLXggYyIKKy5QRCAwCisuSVAgIlxmQlwteCBjKytcZlIiIDQKKy5JWCBJdGVtICIteCBjKysiCisuSVAgIlxmQlwteCBvYmplY3RpdmUtY1xmUiIgNAorLklYIEl0ZW0gIi14IG9iamVjdGl2ZS1jIgorLklQICJcZkJcLXggYXNzZW1ibGVyLXdpdGgtY3BwXGZSIiA0CisuSVggSXRlbSAiLXggYXNzZW1ibGVyLXdpdGgtY3BwIgorLlBECitTcGVjaWZ5IHRoZSBzb3VyY2UgbGFuZ3VhZ2U6IEMsIFwqKEMrLCBPYmplY3RpdmUtQywgb3IgYXNzZW1ibHkuICBUaGlzIGhhcworbm90aGluZyB0byBkbyB3aXRoIHN0YW5kYXJkcyBjb25mb3JtYW5jZSBvciBleHRlbnNpb25zOyBpdCBtZXJlbHkKK3NlbGVjdHMgd2hpY2ggYmFzZSBzeW50YXggdG8gZXhwZWN0LiAgSWYgeW91IGdpdmUgbm9uZSBvZiB0aGVzZSBvcHRpb25zLAorY3BwIHdpbGwgZGVkdWNlIHRoZSBsYW5ndWFnZSBmcm9tIHRoZSBleHRlbnNpb24gb2YgdGhlIHNvdXJjZSBmaWxlOgorXCZcZkIuY1xmUiwgXGZCLmNjXGZSLCBcZkIubVxmUiwgb3IgXGZCLlNcZlIuICBTb21lIG90aGVyIGNvbW1vbgorZXh0ZW5zaW9ucyBmb3IgXCooQysgYW5kIGFzc2VtYmx5IGFyZSBhbHNvIHJlY29nbml6ZWQuICBJZiBjcHAgZG9lcyBub3QKK3JlY29nbml6ZSB0aGUgZXh0ZW5zaW9uLCBpdCB3aWxsIHRyZWF0IHRoZSBmaWxlIGFzIEM7IHRoaXMgaXMgdGhlIG1vc3QKK2dlbmVyaWMgbW9kZS4KKy5TcAorXCZcZklOb3RlOlxmUiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBjcHAgYWNjZXB0ZWQgYSBcZkJcLWxhbmdcZlIgb3B0aW9uCit3aGljaCBzZWxlY3RlZCBib3RoIHRoZSBsYW5ndWFnZSBhbmQgdGhlIHN0YW5kYXJkcyBjb25mb3JtYW5jZSBsZXZlbC4KK1RoaXMgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQsIGJlY2F1c2UgaXQgY29uZmxpY3RzIHdpdGggdGhlIFxmQlwtbFxmUgorb3B0aW9uLgorLklQICJcZkJcLXN0ZD1cZlJcZklzdGFuZGFyZFxmUiIgNAorLklYIEl0ZW0gIi1zdGQ9c3RhbmRhcmQiCisuUEQgMAorLklQICJcZkJcLWFuc2lcZlIiIDQKKy5JWCBJdGVtICItYW5zaSIKKy5QRAorU3BlY2lmeSB0aGUgc3RhbmRhcmQgdG8gd2hpY2ggdGhlIGNvZGUgc2hvdWxkIGNvbmZvcm0uICBDdXJyZW50bHkgXHMtMUNQUFxzMAora25vd3MgYWJvdXQgQyBhbmQgXCooQysgc3RhbmRhcmRzOyBvdGhlcnMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCisuU3AKK1wmXGZJc3RhbmRhcmRcZlIKK21heSBiZSBvbmUgb2Y6CisuUlMgNAorLmllIG4gLklQICIiImM5MCIiIiA0CisuZWwgLklQICJcZihDV2M5MFxmUiIgNAorLklYIEl0ZW0gImM5MCIKKy5QRCAwCisuaWUgbiAuSVAgIiIiYzg5IiIiIDQKKy5lbCAuSVAgIlxmKENXYzg5XGZSIiA0CisuSVggSXRlbSAiYzg5IgorLmllIG4gLklQICIiImlzbzk4OTk6MTk5MCIiIiA0CisuZWwgLklQICJcZihDV2lzbzk4OTk6MTk5MFxmUiIgNAorLklYIEl0ZW0gImlzbzk4OTk6MTk5MCIKKy5QRAorVGhlIFxzLTFJU09cczAgQyBzdGFuZGFyZCBmcm9tIDE5OTAuICBcZkJjOTBcZlIgaXMgdGhlIGN1c3RvbWFyeSBzaG9ydGhhbmQgZm9yCit0aGlzIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkLgorLlNwCitUaGUgXGZCXC1hbnNpXGZSIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtc3RkPWM5MFxmUi4KKy5pZSBuIC5JUCAiIiJpc285ODk5OjE5OTQwOSIiIiA0CisuZWwgLklQICJcZihDV2lzbzk4OTk6MTk5NDA5XGZSIiA0CisuSVggSXRlbSAiaXNvOTg5OToxOTk0MDkiCitUaGUgMTk5MCBDIHN0YW5kYXJkLCBhcyBhbWVuZGVkIGluIDE5OTQuCisuaWUgbiAuSVAgIiIiaXNvOTg5OToxOTk5IiIiIDQKKy5lbCAuSVAgIlxmKENXaXNvOTg5OToxOTk5XGZSIiA0CisuSVggSXRlbSAiaXNvOTg5OToxOTk5IgorLlBEIDAKKy5pZSBuIC5JUCAiIiJjOTkiIiIgNAorLmVsIC5JUCAiXGYoQ1djOTlcZlIiIDQKKy5JWCBJdGVtICJjOTkiCisuaWUgbiAuSVAgIiIiaXNvOTg5OToxOTl4IiIiIDQKKy5lbCAuSVAgIlxmKENXaXNvOTg5OToxOTl4XGZSIiA0CisuSVggSXRlbSAiaXNvOTg5OToxOTl4IgorLmllIG4gLklQICIiImM5eCIiIiA0CisuZWwgLklQICJcZihDV2M5eFxmUiIgNAorLklYIEl0ZW0gImM5eCIKKy5QRAorVGhlIHJldmlzZWQgXHMtMUlTT1xzMCBDIHN0YW5kYXJkLCBwdWJsaXNoZWQgaW4gRGVjZW1iZXIgMTk5OS4gIEJlZm9yZQorcHVibGljYXRpb24sIHRoaXMgd2FzIGtub3duIGFzIEM5WC4KKy5pZSBuIC5JUCAiIiJpc285ODk5OjIwMTEiIiIgNAorLmVsIC5JUCAiXGYoQ1dpc285ODk5OjIwMTFcZlIiIDQKKy5JWCBJdGVtICJpc285ODk5OjIwMTEiCisuUEQgMAorLmllIG4gLklQICIiImMxMSIiIiA0CisuZWwgLklQICJcZihDV2MxMVxmUiIgNAorLklYIEl0ZW0gImMxMSIKKy5pZSBuIC5JUCAiIiJjMXgiIiIgNAorLmVsIC5JUCAiXGYoQ1djMXhcZlIiIDQKKy5JWCBJdGVtICJjMXgiCisuUEQKK1RoZSByZXZpc2VkIFxzLTFJU09cczAgQyBzdGFuZGFyZCwgcHVibGlzaGVkIGluIERlY2VtYmVyIDIwMTEuICBCZWZvcmUKK3B1YmxpY2F0aW9uLCB0aGlzIHdhcyBrbm93biBhcyBDMVguCisuaWUgbiAuSVAgIiIiZ251OTAiIiIgNAorLmVsIC5JUCAiXGYoQ1dnbnU5MFxmUiIgNAorLklYIEl0ZW0gImdudTkwIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJnbnU4OSIiIiA0CisuZWwgLklQICJcZihDV2dudTg5XGZSIiA0CisuSVggSXRlbSAiZ251ODkiCisuUEQKK1RoZSAxOTkwIEMgc3RhbmRhcmQgcGx1cyBccy0xR05VXHMwIGV4dGVuc2lvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLmllIG4gLklQICIiImdudTk5IiIiIDQKKy5lbCAuSVAgIlxmKENXZ251OTlcZlIiIDQKKy5JWCBJdGVtICJnbnU5OSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiZ251OXgiIiIgNAorLmVsIC5JUCAiXGYoQ1dnbnU5eFxmUiIgNAorLklYIEl0ZW0gImdudTl4IgorLlBECitUaGUgMTk5OSBDIHN0YW5kYXJkIHBsdXMgXHMtMUdOVVxzMCBleHRlbnNpb25zLgorLmllIG4gLklQICIiImdudTExIiIiIDQKKy5lbCAuSVAgIlxmKENXZ251MTFcZlIiIDQKKy5JWCBJdGVtICJnbnUxMSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiZ251MXgiIiIgNAorLmVsIC5JUCAiXGYoQ1dnbnUxeFxmUiIgNAorLklYIEl0ZW0gImdudTF4IgorLlBECitUaGUgMjAxMSBDIHN0YW5kYXJkIHBsdXMgXHMtMUdOVVxzMCBleHRlbnNpb25zLgorLmllIG4gLklQICIiImMrKzk4IiIiIDQKKy5lbCAuSVAgIlxmKENXYysrOThcZlIiIDQKKy5JWCBJdGVtICJjKys5OCIKK1RoZSAxOTk4IFxzLTFJU09cczAgXCooQysgc3RhbmRhcmQgcGx1cyBhbWVuZG1lbnRzLgorLmllIG4gLklQICIiImdudSsrOTgiIiIgNAorLmVsIC5JUCAiXGYoQ1dnbnUrKzk4XGZSIiA0CisuSVggSXRlbSAiZ251Kys5OCIKK1RoZSBzYW1lIGFzIFxmQlwtc3RkPWMrKzk4XGZSIHBsdXMgXHMtMUdOVVxzMCBleHRlbnNpb25zLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQgZm9yIFwqKEMrIGNvZGUuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1JXC1cZlIiIDQKKy5JWCBJdGVtICItSS0iCitTcGxpdCB0aGUgaW5jbHVkZSBwYXRoLiAgQW55IGRpcmVjdG9yaWVzIHNwZWNpZmllZCB3aXRoIFxmQlwtSVxmUgorb3B0aW9ucyBiZWZvcmUgXGZCXC1JXC1cZlIgYXJlIHNlYXJjaGVkIG9ubHkgZm9yIGhlYWRlcnMgcmVxdWVzdGVkIHdpdGgKK1wmXGYoQ1dcKihDYCNpbmNsdWRlXCAiXGYoQ0lmaWxlXGYoQ1ciXCooQydcZlI7IHRoZXkgYXJlIG5vdCBzZWFyY2hlZCBmb3IKK1wmXGYoQ1dcKihDYCNpbmNsdWRlXCA8XGYoQ0lmaWxlXGYoQ1c+XCooQydcZlIuICBJZiBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIGFyZQorc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSIG9wdGlvbnMgYWZ0ZXIgdGhlIFxmQlwtSVwtXGZSLCB0aG9zZQorZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGZvciBhbGwgXGZCI2luY2x1ZGVcZlIgZGlyZWN0aXZlcy4KKy5TcAorSW4gYWRkaXRpb24sIFxmQlwtSVwtXGZSIGluaGliaXRzIHRoZSB1c2Ugb2YgdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudAorZmlsZSBkaXJlY3RvcnkgYXMgdGhlIGZpcnN0IHNlYXJjaCBkaXJlY3RvcnkgZm9yIFxmKENXXCooQ2AjaW5jbHVkZVwgIlxmKENJZmlsZVxmKENXIlwqKEMnXGZSLgorVGhpcyBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZC4KKy5JUCAiXGZCXC1ub3N0ZGluY1xmUiIgNAorLklYIEl0ZW0gIi1ub3N0ZGluYyIKK0RvIG5vdCBzZWFyY2ggdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcyBmb3IgaGVhZGVyIGZpbGVzLgorT25seSB0aGUgZGlyZWN0b3JpZXMgeW91IGhhdmUgc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSIG9wdGlvbnMKKyhhbmQgdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBmaWxlLCBpZiBhcHByb3ByaWF0ZSkgYXJlIHNlYXJjaGVkLgorLklQICJcZkJcLW5vc3RkaW5jKytcZlIiIDQKKy5JWCBJdGVtICItbm9zdGRpbmMrKyIKK0RvIG5vdCBzZWFyY2ggZm9yIGhlYWRlciBmaWxlcyBpbiB0aGUgXCooQytcLXNwZWNpZmljIHN0YW5kYXJkIGRpcmVjdG9yaWVzLAorYnV0IGRvIHN0aWxsIHNlYXJjaCB0aGUgb3RoZXIgc3RhbmRhcmQgZGlyZWN0b3JpZXMuICAoVGhpcyBvcHRpb24gaXMKK3VzZWQgd2hlbiBidWlsZGluZyB0aGUgXCooQysgbGlicmFyeS4pCisuSVAgIlxmQlwtaW5jbHVkZVxmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLWluY2x1ZGUgZmlsZSIKK1Byb2Nlc3MgXGZJZmlsZVxmUiBhcyBpZiBcZihDV1wqKENgI2luY2x1ZGUgImZpbGUiXCooQydcZlIgYXBwZWFyZWQgYXMgdGhlIGZpcnN0CitsaW5lIG9mIHRoZSBwcmltYXJ5IHNvdXJjZSBmaWxlLiAgSG93ZXZlciwgdGhlIGZpcnN0IGRpcmVjdG9yeSBzZWFyY2hlZAorZm9yIFxmSWZpbGVcZlIgaXMgdGhlIHByZXByb2Nlc3NvcidzIHdvcmtpbmcgZGlyZWN0b3J5IFxmSWluc3RlYWQgb2ZcZlIKK3RoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbWFpbiBzb3VyY2UgZmlsZS4gIElmIG5vdCBmb3VuZCB0aGVyZSwgaXQKK2lzIHNlYXJjaGVkIGZvciBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBcZihDV1wqKENgI2luY2x1ZGUgIi4uLiJcKihDJ1xmUiBzZWFyY2gKK2NoYWluIGFzIG5vcm1hbC4KKy5TcAorSWYgbXVsdGlwbGUgXGZCXC1pbmNsdWRlXGZSIG9wdGlvbnMgYXJlIGdpdmVuLCB0aGUgZmlsZXMgYXJlIGluY2x1ZGVkCitpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5JUCAiXGZCXC1pbWFjcm9zXGZSIFxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICItaW1hY3JvcyBmaWxlIgorRXhhY3RseSBsaWtlIFxmQlwtaW5jbHVkZVxmUiwgZXhjZXB0IHRoYXQgYW55IG91dHB1dCBwcm9kdWNlZCBieQorc2Nhbm5pbmcgXGZJZmlsZVxmUiBpcyB0aHJvd24gYXdheS4gIE1hY3JvcyBpdCBkZWZpbmVzIHJlbWFpbiBkZWZpbmVkLgorVGhpcyBhbGxvd3MgeW91IHRvIGFjcXVpcmUgYWxsIHRoZSBtYWNyb3MgZnJvbSBhIGhlYWRlciB3aXRob3V0IGFsc28KK3Byb2Nlc3NpbmcgaXRzIGRlY2xhcmF0aW9ucy4KKy5TcAorQWxsIGZpbGVzIHNwZWNpZmllZCBieSBcZkJcLWltYWNyb3NcZlIgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYWxsIGZpbGVzCitzcGVjaWZpZWQgYnkgXGZCXC1pbmNsdWRlXGZSLgorLklQICJcZkJcLWlkaXJhZnRlclxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaWRpcmFmdGVyIGRpciIKK1NlYXJjaCBcZklkaXJcZlIgZm9yIGhlYWRlciBmaWxlcywgYnV0IGRvIGl0IFxmSWFmdGVyXGZSIGFsbAorZGlyZWN0b3JpZXMgc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSIGFuZCB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzCitoYXZlIGJlZW4gZXhoYXVzdGVkLiAgXGZJZGlyXGZSIGlzIHRyZWF0ZWQgYXMgYSBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCitJZiBcZklkaXJcZlIgYmVnaW5zIHdpdGggXGYoQ1dcKihDYD1cKihDJ1xmUiwgdGhlbiB0aGUgXGYoQ1dcKihDYD1cKihDJ1xmUiB3aWxsIGJlIHJlcGxhY2VkCitieSB0aGUgc3lzcm9vdCBwcmVmaXg7IHNlZSBcZkJcLVwtc3lzcm9vdFxmUiBhbmQgXGZCXC1pc3lzcm9vdFxmUi4KKy5JUCAiXGZCXC1pcHJlZml4XGZSIFxmSXByZWZpeFxmUiIgNAorLklYIEl0ZW0gIi1pcHJlZml4IHByZWZpeCIKK1NwZWNpZnkgXGZJcHJlZml4XGZSIGFzIHRoZSBwcmVmaXggZm9yIHN1YnNlcXVlbnQgXGZCXC1pd2l0aHByZWZpeFxmUgorb3B0aW9ucy4gIElmIHRoZSBwcmVmaXggcmVwcmVzZW50cyBhIGRpcmVjdG9yeSwgeW91IHNob3VsZCBpbmNsdWRlIHRoZQorZmluYWwgXGZCL1xmUi4KKy5JUCAiXGZCXC1pd2l0aHByZWZpeFxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXdpdGhwcmVmaXggZGlyIgorLlBEIDAKKy5JUCAiXGZCXC1pd2l0aHByZWZpeGJlZm9yZVxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXdpdGhwcmVmaXhiZWZvcmUgZGlyIgorLlBECitBcHBlbmQgXGZJZGlyXGZSIHRvIHRoZSBwcmVmaXggc3BlY2lmaWVkIHByZXZpb3VzbHkgd2l0aAorXCZcZkJcLWlwcmVmaXhcZlIsIGFuZCBhZGQgdGhlIHJlc3VsdGluZyBkaXJlY3RvcnkgdG8gdGhlIGluY2x1ZGUgc2VhcmNoCitwYXRoLiAgXGZCXC1pd2l0aHByZWZpeGJlZm9yZVxmUiBwdXRzIGl0IGluIHRoZSBzYW1lIHBsYWNlIFxmQlwtSVxmUgord291bGQ7IFxmQlwtaXdpdGhwcmVmaXhcZlIgcHV0cyBpdCB3aGVyZSBcZkJcLWlkaXJhZnRlclxmUiB3b3VsZC4KKy5JUCAiXGZCXC1pc3lzcm9vdFxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXN5c3Jvb3QgZGlyIgorVGhpcyBvcHRpb24gaXMgbGlrZSB0aGUgXGZCXC1cLXN5c3Jvb3RcZlIgb3B0aW9uLCBidXQgYXBwbGllcyBvbmx5IHRvCitoZWFkZXIgZmlsZXMgKGV4Y2VwdCBmb3IgRGFyd2luIHRhcmdldHMsIHdoZXJlIGl0IGFwcGxpZXMgdG8gYm90aCBoZWFkZXIKK2ZpbGVzIGFuZCBsaWJyYXJpZXMpLiAgU2VlIHRoZSBcZkJcLVwtc3lzcm9vdFxmUiBvcHRpb24gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorLklQICJcZkJcLWltdWx0aWxpYlxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaW11bHRpbGliIGRpciIKK1VzZSBcZklkaXJcZlIgYXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCit0YXJnZXQtc3BlY2lmaWMgXCooQysgaGVhZGVycy4KKy5JUCAiXGZCXC1pc3lzdGVtXGZSIFxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pc3lzdGVtIGRpciIKK1NlYXJjaCBcZklkaXJcZlIgZm9yIGhlYWRlciBmaWxlcywgYWZ0ZXIgYWxsIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieQorXCZcZkJcLUlcZlIgYnV0IGJlZm9yZSB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzLiAgTWFyayBpdAorYXMgYSBzeXN0ZW0gZGlyZWN0b3J5LCBzbyB0aGF0IGl0IGdldHMgdGhlIHNhbWUgc3BlY2lhbCB0cmVhdG1lbnQgYXMKK2lzIGFwcGxpZWQgdG8gdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3Rvcmllcy4KK0lmIFxmSWRpclxmUiBiZWdpbnMgd2l0aCBcZihDV1wqKENgPVwqKEMnXGZSLCB0aGVuIHRoZSBcZihDV1wqKENgPVwqKEMnXGZSIHdpbGwgYmUgcmVwbGFjZWQKK2J5IHRoZSBzeXNyb290IHByZWZpeDsgc2VlIFxmQlwtXC1zeXNyb290XGZSIGFuZCBcZkJcLWlzeXNyb290XGZSLgorLklQICJcZkJcLWlxdW90ZVxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaXF1b3RlIGRpciIKK1NlYXJjaCBcZklkaXJcZlIgb25seSBmb3IgaGVhZGVyIGZpbGVzIHJlcXVlc3RlZCB3aXRoCitcJlxmKENXXCooQ2AjaW5jbHVkZVwgIlxmKENJZmlsZVxmKENXIlwqKEMnXGZSOyB0aGV5IGFyZSBub3Qgc2VhcmNoZWQgZm9yCitcJlxmKENXXCooQ2AjaW5jbHVkZVwgPFxmKENJZmlsZVxmKENXPlwqKEMnXGZSLCBiZWZvcmUgYWxsIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieQorXCZcZkJcLUlcZlIgYW5kIGJlZm9yZSB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzLgorSWYgXGZJZGlyXGZSIGJlZ2lucyB3aXRoIFxmKENXXCooQ2A9XCooQydcZlIsIHRoZW4gdGhlIFxmKENXXCooQ2A9XCooQydcZlIgd2lsbCBiZSByZXBsYWNlZAorYnkgdGhlIHN5c3Jvb3QgcHJlZml4OyBzZWUgXGZCXC1cLXN5c3Jvb3RcZlIgYW5kIFxmQlwtaXN5c3Jvb3RcZlIuCisuSVAgIlxmQlwtZmRpcmVjdGl2ZXNcLW9ubHlcZlIiIDQKKy5JWCBJdGVtICItZmRpcmVjdGl2ZXMtb25seSIKK1doZW4gcHJlcHJvY2Vzc2luZywgaGFuZGxlIGRpcmVjdGl2ZXMsIGJ1dCBkbyBub3QgZXhwYW5kIG1hY3Jvcy4KKy5TcAorVGhlIG9wdGlvbidzIGJlaGF2aW9yIGRlcGVuZHMgb24gdGhlIFxmQlwtRVxmUiBhbmQgXGZCXC1mcHJlcHJvY2Vzc2VkXGZSCitvcHRpb25zLgorLlNwCitXaXRoIFxmQlwtRVxmUiwgcHJlcHJvY2Vzc2luZyBpcyBsaW1pdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBkaXJlY3RpdmVzCitzdWNoIGFzIFxmKENXXCooQ2AjZGVmaW5lXCooQydcZlIsIFxmKENXXCooQ2AjaWZkZWZcKihDJ1xmUiwgYW5kIFxmKENXXCooQ2AjZXJyb3JcKihDJ1xmUi4gIE90aGVyCitwcmVwcm9jZXNzb3Igb3BlcmF0aW9ucywgc3VjaCBhcyBtYWNybyBleHBhbnNpb24gYW5kIHRyaWdyYXBoCitjb252ZXJzaW9uIGFyZSBub3QgcGVyZm9ybWVkLiAgSW4gYWRkaXRpb24sIHRoZSBcZkJcLWREXGZSIG9wdGlvbiBpcworaW1wbGljaXRseSBlbmFibGVkLgorLlNwCitXaXRoIFxmQlwtZnByZXByb2Nlc3NlZFxmUiwgcHJlZGVmaW5pdGlvbiBvZiBjb21tYW5kIGxpbmUgYW5kIG1vc3QKK2J1aWx0aW4gbWFjcm9zIGlzIGRpc2FibGVkLiAgTWFjcm9zIHN1Y2ggYXMgXGYoQ1dcKihDYF9cfF9MSU5FX1x8X1wqKEMnXGZSLCB3aGljaCBhcmUKK2NvbnRleHR1YWxseSBkZXBlbmRlbnQsIGFyZSBoYW5kbGVkIG5vcm1hbGx5LiAgVGhpcyBlbmFibGVzIGNvbXBpbGF0aW9uIG9mCitmaWxlcyBwcmV2aW91c2x5IHByZXByb2Nlc3NlZCB3aXRoIFxmKENXXCooQ2BcLUUgXC1mZGlyZWN0aXZlc1wtb25seVwqKEMnXGZSLgorLlNwCitXaXRoIGJvdGggXGZCXC1FXGZSIGFuZCBcZkJcLWZwcmVwcm9jZXNzZWRcZlIsIHRoZSBydWxlcyBmb3IKK1wmXGZCXC1mcHJlcHJvY2Vzc2VkXGZSIHRha2UgcHJlY2VkZW5jZS4gIFRoaXMgZW5hYmxlcyBmdWxsIHByZXByb2Nlc3Npbmcgb2YKK2ZpbGVzIHByZXZpb3VzbHkgcHJlcHJvY2Vzc2VkIHdpdGggXGYoQ1dcKihDYFwtRSBcLWZkaXJlY3RpdmVzXC1vbmx5XCooQydcZlIuCisuSVAgIlxmQlwtZmRvbGxhcnNcLWluXC1pZGVudGlmaWVyc1xmUiIgNAorLklYIEl0ZW0gIi1mZG9sbGFycy1pbi1pZGVudGlmaWVycyIKK0FjY2VwdCBcZkIkXGZSIGluIGlkZW50aWZpZXJzLgorLklQICJcZkJcLWZleHRlbmRlZFwtaWRlbnRpZmllcnNcZlIiIDQKKy5JWCBJdGVtICItZmV4dGVuZGVkLWlkZW50aWZpZXJzIgorQWNjZXB0IHVuaXZlcnNhbCBjaGFyYWN0ZXIgbmFtZXMgaW4gaWRlbnRpZmllcnMuICBUaGlzIG9wdGlvbiBpcworZXhwZXJpbWVudGFsOyBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFxzLTFHQ0NcczAsIGl0IHdpbGwgYmUgZW5hYmxlZCBieQorZGVmYXVsdCBmb3IgQzk5IGFuZCBcKihDKy4KKy5JUCAiXGZCXC1mbm9cLWNhbm9uaWNhbFwtc3lzdGVtXC1oZWFkZXJzXGZSIiA0CisuSVggSXRlbSAiLWZuby1jYW5vbmljYWwtc3lzdGVtLWhlYWRlcnMiCitXaGVuIHByZXByb2Nlc3NpbmcsIGRvIG5vdCBzaG9ydGVuIHN5c3RlbSBoZWFkZXIgcGF0aHMgd2l0aCBjYW5vbmljYWxpemF0aW9uLgorLklQICJcZkJcLWZwcmVwcm9jZXNzZWRcZlIiIDQKKy5JWCBJdGVtICItZnByZXByb2Nlc3NlZCIKK0luZGljYXRlIHRvIHRoZSBwcmVwcm9jZXNzb3IgdGhhdCB0aGUgaW5wdXQgZmlsZSBoYXMgYWxyZWFkeSBiZWVuCitwcmVwcm9jZXNzZWQuICBUaGlzIHN1cHByZXNzZXMgdGhpbmdzIGxpa2UgbWFjcm8gZXhwYW5zaW9uLCB0cmlncmFwaAorY29udmVyc2lvbiwgZXNjYXBlZCBuZXdsaW5lIHNwbGljaW5nLCBhbmQgcHJvY2Vzc2luZyBvZiBtb3N0IGRpcmVjdGl2ZXMuCitUaGUgcHJlcHJvY2Vzc29yIHN0aWxsIHJlY29nbml6ZXMgYW5kIHJlbW92ZXMgY29tbWVudHMsIHNvIHRoYXQgeW91IGNhbgorcGFzcyBhIGZpbGUgcHJlcHJvY2Vzc2VkIHdpdGggXGZCXC1DXGZSIHRvIHRoZSBjb21waWxlciB3aXRob3V0Citwcm9ibGVtcy4gIEluIHRoaXMgbW9kZSB0aGUgaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3IgaXMgbGl0dGxlIG1vcmUgdGhhbgorYSB0b2tlbml6ZXIgZm9yIHRoZSBmcm9udCBlbmRzLgorLlNwCitcJlxmQlwtZnByZXByb2Nlc3NlZFxmUiBpcyBpbXBsaWNpdCBpZiB0aGUgaW5wdXQgZmlsZSBoYXMgb25lIG9mIHRoZQorZXh0ZW5zaW9ucyBcZkIuaVxmUiwgXGZCLmlpXGZSIG9yIFxmQi5taVxmUi4gIFRoZXNlIGFyZSB0aGUKK2V4dGVuc2lvbnMgdGhhdCBccy0xR0NDXHMwIHVzZXMgZm9yIHByZXByb2Nlc3NlZCBmaWxlcyBjcmVhdGVkIGJ5CitcJlxmQlwtc2F2ZVwtdGVtcHNcZlIuCisuSVAgIlxmQlwtZnRhYnN0b3A9XGZSXGZJd2lkdGhcZlIiIDQKKy5JWCBJdGVtICItZnRhYnN0b3A9d2lkdGgiCitTZXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGFiIHN0b3BzLiAgVGhpcyBoZWxwcyB0aGUgcHJlcHJvY2Vzc29yIHJlcG9ydAorY29ycmVjdCBjb2x1bW4gbnVtYmVycyBpbiB3YXJuaW5ncyBvciBlcnJvcnMsIGV2ZW4gaWYgdGFicyBhcHBlYXIgb24gdGhlCitsaW5lLiAgSWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiAxMDAsIHRoZSBvcHRpb24gaXMKK2lnbm9yZWQuICBUaGUgZGVmYXVsdCBpcyA4LgorLklQICJcZkJcLWZkZWJ1Z1wtY3BwXGZSIiA0CisuSVggSXRlbSAiLWZkZWJ1Zy1jcHAiCitUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIFxzLTFHQ0NcczAuICBXaGVuIHVzZWQgd2l0aAorXCZcZkJcLUVcZlIsIGR1bXBzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCBsb2NhdGlvbiBtYXBzLiAgRXZlcnkKK3Rva2VuIGluIHRoZSBvdXRwdXQgaXMgcHJlY2VkZWQgYnkgdGhlIGR1bXAgb2YgdGhlIG1hcCBpdHMgbG9jYXRpb24KK2JlbG9uZ3MgdG8uICBUaGUgZHVtcCBvZiB0aGUgbWFwIGhvbGRpbmcgdGhlIGxvY2F0aW9uIG9mIGEgdG9rZW4gd291bGQKK2JlOgorLlNwCisuVmIgMQorXCYgICAgICAgIHsiUCI6RjwvZmlsZS9wYXRoPjsiRiI6RjwvaW5jbHVkZXIvcGF0aD47IkwiOjxsaW5lX251bT47IkMiOjxjb2xfbnVtPjsiUyI6PHN5c3RlbV9oZWFkZXJfcD47Ik0iOjxtYXBfYWRkcmVzcz47IkUiOjxtYWNyb19leHBhbnNpb25fcD4sImxvYyI6PGxvY2F0aW9uPn0KKy5WZQorLlNwCitXaGVuIHVzZWQgd2l0aG91dCBcZkJcLUVcZlIsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisuSVAgIlxmQlwtZnRyYWNrXC1tYWNyb1wtZXhwYW5zaW9uXGZSW1xmQj1cZlJcZklsZXZlbFxmUl0iIDQKKy5JWCBJdGVtICItZnRyYWNrLW1hY3JvLWV4cGFuc2lvbls9bGV2ZWxdIgorVHJhY2sgbG9jYXRpb25zIG9mIHRva2VucyBhY3Jvc3MgbWFjcm8gZXhwYW5zaW9ucy4gVGhpcyBhbGxvd3MgdGhlCitjb21waWxlciB0byBlbWl0IGRpYWdub3N0aWMgYWJvdXQgdGhlIGN1cnJlbnQgbWFjcm8gZXhwYW5zaW9uIHN0YWNrCit3aGVuIGEgY29tcGlsYXRpb24gZXJyb3Igb2NjdXJzIGluIGEgbWFjcm8gZXhwYW5zaW9uLiBVc2luZyB0aGlzCitvcHRpb24gbWFrZXMgdGhlIHByZXByb2Nlc3NvciBhbmQgdGhlIGNvbXBpbGVyIGNvbnN1bWUgbW9yZQorbWVtb3J5LiBUaGUgXGZJbGV2ZWxcZlIgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGNob29zZSB0aGUgbGV2ZWwgb2YKK3ByZWNpc2lvbiBvZiB0b2tlbiBsb2NhdGlvbiB0cmFja2luZyB0aHVzIGRlY3JlYXNpbmcgdGhlIG1lbW9yeQorY29uc3VtcHRpb24gaWYgbmVjZXNzYXJ5LiBWYWx1ZSBcZkIwXGZSIG9mIFxmSWxldmVsXGZSIGRlLWFjdGl2YXRlcwordGhpcyBvcHRpb24ganVzdCBhcyBpZiBubyBcZkJcLWZ0cmFja1wtbWFjcm9cLWV4cGFuc2lvblxmUiB3YXMgcHJlc2VudAorb24gdGhlIGNvbW1hbmQgbGluZS4gVmFsdWUgXGZCMVxmUiB0cmFja3MgdG9rZW5zIGxvY2F0aW9ucyBpbiBhCitkZWdyYWRlZCBtb2RlIGZvciB0aGUgc2FrZSBvZiBtaW5pbWFsIG1lbW9yeSBvdmVyaGVhZC4gSW4gdGhpcyBtb2RlCithbGwgdG9rZW5zIHJlc3VsdGluZyBmcm9tIHRoZSBleHBhbnNpb24gb2YgYW4gYXJndW1lbnQgb2YgYQorZnVuY3Rpb24tbGlrZSBtYWNybyBoYXZlIHRoZSBzYW1lIGxvY2F0aW9uLiBWYWx1ZSBcZkIyXGZSIHRyYWNrcwordG9rZW5zIGxvY2F0aW9ucyBjb21wbGV0ZWx5LiBUaGlzIHZhbHVlIGlzIHRoZSBtb3N0IG1lbW9yeSBodW5ncnkuCitXaGVuIHRoaXMgb3B0aW9uIGlzIGdpdmVuIG5vIGFyZ3VtZW50LCB0aGUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUgaXMKK1wmXGZCMlxmUi4KKy5TcAorTm90ZSB0aGF0IFwtZnRyYWNrXC1tYWNyb1wtZXhwYW5zaW9uPTIgaXMgYWN0aXZhdGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtZmV4ZWNcLWNoYXJzZXQ9XGZSXGZJY2hhcnNldFxmUiIgNAorLklYIEl0ZW0gIi1mZXhlYy1jaGFyc2V0PWNoYXJzZXQiCitTZXQgdGhlIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0LCB1c2VkIGZvciBzdHJpbmcgYW5kIGNoYXJhY3RlcgorY29uc3RhbnRzLiAgVGhlIGRlZmF1bHQgaXMgXHMtMVVURlwtOFxzMC4gIFxmSWNoYXJzZXRcZlIgY2FuIGJlIGFueSBlbmNvZGluZworc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0ncyBcZihDV1wqKENgaWNvbnZcKihDJ1xmUiBsaWJyYXJ5IHJvdXRpbmUuCisuSVAgIlxmQlwtZndpZGVcLWV4ZWNcLWNoYXJzZXQ9XGZSXGZJY2hhcnNldFxmUiIgNAorLklYIEl0ZW0gIi1md2lkZS1leGVjLWNoYXJzZXQ9Y2hhcnNldCIKK1NldCB0aGUgd2lkZSBleGVjdXRpb24gY2hhcmFjdGVyIHNldCwgdXNlZCBmb3Igd2lkZSBzdHJpbmcgYW5kCitjaGFyYWN0ZXIgY29uc3RhbnRzLiAgVGhlIGRlZmF1bHQgaXMgXHMtMVVURlwtMzJcczAgb3IgXHMtMVVURlwtMTZcczAsIHdoaWNoZXZlcgorY29ycmVzcG9uZHMgdG8gdGhlIHdpZHRoIG9mIFxmKENXXCooQ2B3Y2hhcl90XCooQydcZlIuICBBcyB3aXRoCitcJlxmQlwtZmV4ZWNcLWNoYXJzZXRcZlIsIFxmSWNoYXJzZXRcZlIgY2FuIGJlIGFueSBlbmNvZGluZyBzdXBwb3J0ZWQKK2J5IHRoZSBzeXN0ZW0ncyBcZihDV1wqKENgaWNvbnZcKihDJ1xmUiBsaWJyYXJ5IHJvdXRpbmU7IGhvd2V2ZXIsIHlvdSB3aWxsIGhhdmUKK3Byb2JsZW1zIHdpdGggZW5jb2RpbmdzIHRoYXQgZG8gbm90IGZpdCBleGFjdGx5IGluIFxmKENXXCooQ2B3Y2hhcl90XCooQydcZlIuCisuSVAgIlxmQlwtZmlucHV0XC1jaGFyc2V0PVxmUlxmSWNoYXJzZXRcZlIiIDQKKy5JWCBJdGVtICItZmlucHV0LWNoYXJzZXQ9Y2hhcnNldCIKK1NldCB0aGUgaW5wdXQgY2hhcmFjdGVyIHNldCwgdXNlZCBmb3IgdHJhbnNsYXRpb24gZnJvbSB0aGUgY2hhcmFjdGVyCitzZXQgb2YgdGhlIGlucHV0IGZpbGUgdG8gdGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgXHMtMUdDQ1xzMC4gIElmIHRoZQorbG9jYWxlIGRvZXMgbm90IHNwZWNpZnksIG9yIFxzLTFHQ0NcczAgY2Fubm90IGdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlCitsb2NhbGUsIHRoZSBkZWZhdWx0IGlzIFxzLTFVVEZcLThcczAuICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGVpdGhlciB0aGUgbG9jYWxlCitvciB0aGlzIGNvbW1hbmQgbGluZSBvcHRpb24uICBDdXJyZW50bHkgdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gdGFrZXMKK3ByZWNlZGVuY2UgaWYgdGhlcmUncyBhIGNvbmZsaWN0LiAgXGZJY2hhcnNldFxmUiBjYW4gYmUgYW55IGVuY29kaW5nCitzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbSdzIFxmKENXXCooQ2BpY29udlwqKEMnXGZSIGxpYnJhcnkgcm91dGluZS4KKy5JUCAiXGZCXC1md29ya2luZ1wtZGlyZWN0b3J5XGZSIiA0CisuSVggSXRlbSAiLWZ3b3JraW5nLWRpcmVjdG9yeSIKK0VuYWJsZSBnZW5lcmF0aW9uIG9mIGxpbmVtYXJrZXJzIGluIHRoZSBwcmVwcm9jZXNzb3Igb3V0cHV0IHRoYXQgd2lsbAorbGV0IHRoZSBjb21waWxlciBrbm93IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGF0IHRoZSB0aW1lIG9mCitwcmVwcm9jZXNzaW5nLiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUgcHJlcHJvY2Vzc29yIHdpbGwKK2VtaXQsIGFmdGVyIHRoZSBpbml0aWFsIGxpbmVtYXJrZXIsIGEgc2Vjb25kIGxpbmVtYXJrZXIgd2l0aCB0aGUKK2N1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZm9sbG93ZWQgYnkgdHdvIHNsYXNoZXMuICBccy0xR0NDXHMwIHdpbGwgdXNlIHRoaXMKK2RpcmVjdG9yeSwgd2hlbiBpdCdzIHByZXNlbnQgaW4gdGhlIHByZXByb2Nlc3NlZCBpbnB1dCwgYXMgdGhlCitkaXJlY3RvcnkgZW1pdHRlZCBhcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpbiBzb21lIGRlYnVnZ2luZworaW5mb3JtYXRpb24gZm9ybWF0cy4gIFRoaXMgb3B0aW9uIGlzIGltcGxpY2l0bHkgZW5hYmxlZCBpZiBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIGlzIGVuYWJsZWQsIGJ1dCB0aGlzIGNhbiBiZSBpbmhpYml0ZWQgd2l0aCB0aGUgbmVnYXRlZAorZm9ybSBcZkJcLWZub1wtd29ya2luZ1wtZGlyZWN0b3J5XGZSLiAgSWYgdGhlIFxmQlwtUFxmUiBmbGFnIGlzCitwcmVzZW50IGluIHRoZSBjb21tYW5kIGxpbmUsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QsIHNpbmNlIG5vCitcJlxmKENXXCooQ2AjbGluZVwqKEMnXGZSIGRpcmVjdGl2ZXMgYXJlIGVtaXR0ZWQgd2hhdHNvZXZlci4KKy5JUCAiXGZCXC1mbm9cLXNob3dcLWNvbHVtblxmUiIgNAorLklYIEl0ZW0gIi1mbm8tc2hvdy1jb2x1bW4iCitEbyBub3QgcHJpbnQgY29sdW1uIG51bWJlcnMgaW4gZGlhZ25vc3RpY3MuICBUaGlzIG1heSBiZSBuZWNlc3NhcnkgaWYKK2RpYWdub3N0aWNzIGFyZSBiZWluZyBzY2FubmVkIGJ5IGEgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlCitjb2x1bW4gbnVtYmVycywgc3VjaCBhcyBcZkJkZWphZ251XGZSLgorLklQICJcZkJcLUFcZlIgXGZJcHJlZGljYXRlXGZSXGZCPVxmUlxmSWFuc3dlclxmUiIgNAorLklYIEl0ZW0gIi1BIHByZWRpY2F0ZT1hbnN3ZXIiCitNYWtlIGFuIGFzc2VydGlvbiB3aXRoIHRoZSBwcmVkaWNhdGUgXGZJcHJlZGljYXRlXGZSIGFuZCBhbnN3ZXIKK1wmXGZJYW5zd2VyXGZSLiAgVGhpcyBmb3JtIGlzIHByZWZlcnJlZCB0byB0aGUgb2xkZXIgZm9ybSBcZkJcLUFcZlIKK1wmXGZJcHJlZGljYXRlXGZSXGZCKFxmUlxmSWFuc3dlclxmUlxmQilcZlIsIHdoaWNoIGlzIHN0aWxsIHN1cHBvcnRlZCwgYmVjYXVzZQoraXQgZG9lcyBub3QgdXNlIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4KKy5JUCAiXGZCXC1BIFwtXGZSXGZJcHJlZGljYXRlXGZSXGZCPVxmUlxmSWFuc3dlclxmUiIgNAorLklYIEl0ZW0gIi1BIC1wcmVkaWNhdGU9YW5zd2VyIgorQ2FuY2VsIGFuIGFzc2VydGlvbiB3aXRoIHRoZSBwcmVkaWNhdGUgXGZJcHJlZGljYXRlXGZSIGFuZCBhbnN3ZXIKK1wmXGZJYW5zd2VyXGZSLgorLklQICJcZkJcLWRDSEFSU1xmUiIgNAorLklYIEl0ZW0gIi1kQ0hBUlMiCitcJlxmSVxzLTFDSEFSU1xzMFxmUiBpcyBhIHNlcXVlbmNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycywKK2FuZCBtdXN0IG5vdCBiZSBwcmVjZWRlZCBieSBhIHNwYWNlLiAgT3RoZXIgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQKK2J5IHRoZSBjb21waWxlciBwcm9wZXIsIG9yIHJlc2VydmVkIGZvciBmdXR1cmUgdmVyc2lvbnMgb2YgXHMtMUdDQ1xzMCwgYW5kIHNvCithcmUgc2lsZW50bHkgaWdub3JlZC4gIElmIHlvdSBzcGVjaWZ5IGNoYXJhY3RlcnMgd2hvc2UgYmVoYXZpb3IKK2NvbmZsaWN0cywgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCisuUlMgNAorLklQICJcZkJNXGZSIiA0CisuSVggSXRlbSAiTSIKK0luc3RlYWQgb2YgdGhlIG5vcm1hbCBvdXRwdXQsIGdlbmVyYXRlIGEgbGlzdCBvZiBcZkIjZGVmaW5lXGZSCitkaXJlY3RpdmVzIGZvciBhbGwgdGhlIG1hY3JvcyBkZWZpbmVkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZQorcHJlcHJvY2Vzc29yLCBpbmNsdWRpbmcgcHJlZGVmaW5lZCBtYWNyb3MuICBUaGlzIGdpdmVzIHlvdSBhIHdheSBvZgorZmluZGluZyBvdXQgd2hhdCBpcyBwcmVkZWZpbmVkIGluIHlvdXIgdmVyc2lvbiBvZiB0aGUgcHJlcHJvY2Vzc29yLgorQXNzdW1pbmcgeW91IGhhdmUgbm8gZmlsZSBcZklmb28uaFxmUiwgdGhlIGNvbW1hbmQKKy5TcAorLlZiIDEKK1wmICAgICAgICB0b3VjaCBmb28uaDsgY3BwIFwtZE0gZm9vLmgKKy5WZQorLlNwCit3aWxsIHNob3cgYWxsIHRoZSBwcmVkZWZpbmVkIG1hY3Jvcy4KKy5TcAorSWYgeW91IHVzZSBcZkJcLWRNXGZSIHdpdGhvdXQgdGhlIFxmQlwtRVxmUiBvcHRpb24sIFxmQlwtZE1cZlIgaXMKK2ludGVycHJldGVkIGFzIGEgc3lub255bSBmb3IgXGZCXC1mZHVtcFwtcnRsXC1tYWNoXGZSLgorLklQICJcZkJEXGZSIiA0CisuSVggSXRlbSAiRCIKK0xpa2UgXGZCTVxmUiBleGNlcHQgaW4gdHdvIHJlc3BlY3RzOiBpdCBkb2VzIFxmSW5vdFxmUiBpbmNsdWRlIHRoZQorcHJlZGVmaW5lZCBtYWNyb3MsIGFuZCBpdCBvdXRwdXRzIFxmSWJvdGhcZlIgdGhlIFxmQiNkZWZpbmVcZlIKK2RpcmVjdGl2ZXMgYW5kIHRoZSByZXN1bHQgb2YgcHJlcHJvY2Vzc2luZy4gIEJvdGgga2luZHMgb2Ygb3V0cHV0IGdvIHRvCit0aGUgc3RhbmRhcmQgb3V0cHV0IGZpbGUuCisuSVAgIlxmQk5cZlIiIDQKKy5JWCBJdGVtICJOIgorTGlrZSBcZkJEXGZSLCBidXQgZW1pdCBvbmx5IHRoZSBtYWNybyBuYW1lcywgbm90IHRoZWlyIGV4cGFuc2lvbnMuCisuSVAgIlxmQklcZlIiIDQKKy5JWCBJdGVtICJJIgorT3V0cHV0IFxmQiNpbmNsdWRlXGZSIGRpcmVjdGl2ZXMgaW4gYWRkaXRpb24gdG8gdGhlIHJlc3VsdCBvZgorcHJlcHJvY2Vzc2luZy4KKy5JUCAiXGZCVVxmUiIgNAorLklYIEl0ZW0gIlUiCitMaWtlIFxmQkRcZlIgZXhjZXB0IHRoYXQgb25seSBtYWNyb3MgdGhhdCBhcmUgZXhwYW5kZWQsIG9yIHdob3NlCitkZWZpbmVkbmVzcyBpcyB0ZXN0ZWQgaW4gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFyZSBvdXRwdXQ7IHRoZQorb3V0cHV0IGlzIGRlbGF5ZWQgdW50aWwgdGhlIHVzZSBvciB0ZXN0IG9mIHRoZSBtYWNybzsgYW5kCitcJlxmQiN1bmRlZlxmUiBkaXJlY3RpdmVzIGFyZSBhbHNvIG91dHB1dCBmb3IgbWFjcm9zIHRlc3RlZCBidXQKK3VuZGVmaW5lZCBhdCB0aGUgdGltZS4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLVBcZlIiIDQKKy5JWCBJdGVtICItUCIKK0luaGliaXQgZ2VuZXJhdGlvbiBvZiBsaW5lbWFya2VycyBpbiB0aGUgb3V0cHV0IGZyb20gdGhlIHByZXByb2Nlc3Nvci4KK1RoaXMgbWlnaHQgYmUgdXNlZnVsIHdoZW4gcnVubmluZyB0aGUgcHJlcHJvY2Vzc29yIG9uIHNvbWV0aGluZyB0aGF0IGlzCitub3QgQyBjb2RlLCBhbmQgd2lsbCBiZSBzZW50IHRvIGEgcHJvZ3JhbSB3aGljaCBtaWdodCBiZSBjb25mdXNlZCBieSB0aGUKK2xpbmVtYXJrZXJzLgorLklQICJcZkJcLUNcZlIiIDQKKy5JWCBJdGVtICItQyIKK0RvIG5vdCBkaXNjYXJkIGNvbW1lbnRzLiAgQWxsIGNvbW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgb3V0cHV0CitmaWxlLCBleGNlcHQgZm9yIGNvbW1lbnRzIGluIHByb2Nlc3NlZCBkaXJlY3RpdmVzLCB3aGljaCBhcmUgZGVsZXRlZAorYWxvbmcgd2l0aCB0aGUgZGlyZWN0aXZlLgorLlNwCitZb3Ugc2hvdWxkIGJlIHByZXBhcmVkIGZvciBzaWRlIGVmZmVjdHMgd2hlbiB1c2luZyBcZkJcLUNcZlI7IGl0CitjYXVzZXMgdGhlIHByZXByb2Nlc3NvciB0byB0cmVhdCBjb21tZW50cyBhcyB0b2tlbnMgaW4gdGhlaXIgb3duIHJpZ2h0LgorRm9yIGV4YW1wbGUsIGNvbW1lbnRzIGFwcGVhcmluZyBhdCB0aGUgc3RhcnQgb2Ygd2hhdCB3b3VsZCBiZSBhCitkaXJlY3RpdmUgbGluZSBoYXZlIHRoZSBlZmZlY3Qgb2YgdHVybmluZyB0aGF0IGxpbmUgaW50byBhbiBvcmRpbmFyeQorc291cmNlIGxpbmUsIHNpbmNlIHRoZSBmaXJzdCB0b2tlbiBvbiB0aGUgbGluZSBpcyBubyBsb25nZXIgYSBcZkIjXGZSLgorLklQICJcZkJcLUNDXGZSIiA0CisuSVggSXRlbSAiLUNDIgorRG8gbm90IGRpc2NhcmQgY29tbWVudHMsIGluY2x1ZGluZyBkdXJpbmcgbWFjcm8gZXhwYW5zaW9uLiAgVGhpcyBpcworbGlrZSBcZkJcLUNcZlIsIGV4Y2VwdCB0aGF0IGNvbW1lbnRzIGNvbnRhaW5lZCB3aXRoaW4gbWFjcm9zIGFyZQorYWxzbyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgb3V0cHV0IGZpbGUgd2hlcmUgdGhlIG1hY3JvIGlzIGV4cGFuZGVkLgorLlNwCitJbiBhZGRpdGlvbiB0byB0aGUgc2lkZS1lZmZlY3RzIG9mIHRoZSBcZkJcLUNcZlIgb3B0aW9uLCB0aGUKK1wmXGZCXC1DQ1xmUiBvcHRpb24gY2F1c2VzIGFsbCBcKihDK1wtc3R5bGUgY29tbWVudHMgaW5zaWRlIGEgbWFjcm8KK3RvIGJlIGNvbnZlcnRlZCB0byBDXC1zdHlsZSBjb21tZW50cy4gIFRoaXMgaXMgdG8gcHJldmVudCBsYXRlciB1c2UKK29mIHRoYXQgbWFjcm8gZnJvbSBpbmFkdmVydGVudGx5IGNvbW1lbnRpbmcgb3V0IHRoZSByZW1haW5kZXIgb2YKK3RoZSBzb3VyY2UgbGluZS4KKy5TcAorVGhlIFxmQlwtQ0NcZlIgb3B0aW9uIGlzIGdlbmVyYWxseSB1c2VkIHRvIHN1cHBvcnQgbGludCBjb21tZW50cy4KKy5JUCAiXGZCXC10cmFkaXRpb25hbFwtY3BwXGZSIiA0CisuSVggSXRlbSAiLXRyYWRpdGlvbmFsLWNwcCIKK1RyeSB0byBpbWl0YXRlIHRoZSBiZWhhdmlvciBvZiBvbGQtZmFzaGlvbmVkIEMgcHJlcHJvY2Vzc29ycywgYXMKK29wcG9zZWQgdG8gXHMtMUlTT1xzMCBDIHByZXByb2Nlc3NvcnMuCisuSVAgIlxmQlwtdHJpZ3JhcGhzXGZSIiA0CisuSVggSXRlbSAiLXRyaWdyYXBocyIKK1Byb2Nlc3MgdHJpZ3JhcGggc2VxdWVuY2VzLgorVGhlc2UgYXJlIHRocmVlLWNoYXJhY3RlciBzZXF1ZW5jZXMsIGFsbCBzdGFydGluZyB3aXRoIFxmQj8/XGZSLCB0aGF0CithcmUgZGVmaW5lZCBieSBccy0xSVNPXHMwIEMgdG8gc3RhbmQgZm9yIHNpbmdsZSBjaGFyYWN0ZXJzLiAgRm9yIGV4YW1wbGUsCitcJlxmQj8/L1xmUiBzdGFuZHMgZm9yIFxmQlxlXGZSLCBzbyBcZkInPz8vbidcZlIgaXMgYSBjaGFyYWN0ZXIKK2NvbnN0YW50IGZvciBhIG5ld2xpbmUuICBCeSBkZWZhdWx0LCBccy0xR0NDXHMwIGlnbm9yZXMgdHJpZ3JhcGhzLCBidXQgaW4KK3N0YW5kYXJkLWNvbmZvcm1pbmcgbW9kZXMgaXQgY29udmVydHMgdGhlbS4gIFNlZSB0aGUgXGZCXC1zdGRcZlIgYW5kCitcJlxmQlwtYW5zaVxmUiBvcHRpb25zLgorLlNwCitUaGUgbmluZSB0cmlncmFwaHMgYW5kIHRoZWlyIHJlcGxhY2VtZW50cyBhcmUKKy5TcAorLlZiIDIKK1wmICAgICAgICBUcmlncmFwaDogICAgICAgPz8oICA/PykgID8/PCAgPz8+ICA/Pz0gID8/LyAgPz9cKihBcSAgPz8hICA/P1wtCitcJiAgICAgICAgUmVwbGFjZW1lbnQ6ICAgICAgWyAgICBdICAgIHsgICAgfSAgICAjICAgIFxlICAgIF4gICAgfCAgICB+CisuVmUKKy5JUCAiXGZCXC1yZW1hcFxmUiIgNAorLklYIEl0ZW0gIi1yZW1hcCIKK0VuYWJsZSBzcGVjaWFsIGNvZGUgdG8gd29yayBhcm91bmQgZmlsZSBzeXN0ZW1zIHdoaWNoIG9ubHkgcGVybWl0IHZlcnkKK3Nob3J0IGZpbGUgbmFtZXMsIHN1Y2ggYXMgTVMtRE9TLgorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKKy5QRCAwCisuSVAgIlxmQlwtXC10YXJnZXRcLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLXRhcmdldC1oZWxwIgorLlBECitQcmludCB0ZXh0IGRlc2NyaWJpbmcgYWxsIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBpbnN0ZWFkIG9mCitwcmVwcm9jZXNzaW5nIGFueXRoaW5nLgorLklQICJcZkJcLXZcZlIiIDQKKy5JWCBJdGVtICItdiIKK1ZlcmJvc2UgbW9kZS4gIFByaW50IG91dCBccy0xR05VXHMwIFxzLTFDUFBcczAncyB2ZXJzaW9uIG51bWJlciBhdCB0aGUgYmVnaW5uaW5nIG9mCitleGVjdXRpb24sIGFuZCByZXBvcnQgdGhlIGZpbmFsIGZvcm0gb2YgdGhlIGluY2x1ZGUgcGF0aC4KKy5JUCAiXGZCXC1IXGZSIiA0CisuSVggSXRlbSAiLUgiCitQcmludCB0aGUgbmFtZSBvZiBlYWNoIGhlYWRlciBmaWxlIHVzZWQsIGluIGFkZGl0aW9uIHRvIG90aGVyIG5vcm1hbAorYWN0aXZpdGllcy4gIEVhY2ggbmFtZSBpcyBpbmRlbnRlZCB0byBzaG93IGhvdyBkZWVwIGluIHRoZQorXCZcZkIjaW5jbHVkZVxmUiBzdGFjayBpdCBpcy4gIFByZWNvbXBpbGVkIGhlYWRlciBmaWxlcyBhcmUgYWxzbworcHJpbnRlZCwgZXZlbiBpZiB0aGV5IGFyZSBmb3VuZCB0byBiZSBpbnZhbGlkOyBhbiBpbnZhbGlkIHByZWNvbXBpbGVkCitoZWFkZXIgZmlsZSBpcyBwcmludGVkIHdpdGggXGZCLi4ueFxmUiBhbmQgYSB2YWxpZCBvbmUgd2l0aCBcZkIuLi4hXGZSIC4KKy5JUCAiXGZCXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLXZlcnNpb24iCisuUEQgMAorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKKy5QRAorUHJpbnQgb3V0IFxzLTFHTlVcczAgXHMtMUNQUFxzMCdzIHZlcnNpb24gbnVtYmVyLiAgV2l0aCBvbmUgZGFzaCwgcHJvY2VlZCB0bworcHJlcHJvY2VzcyBhcyBub3JtYWwuICBXaXRoIHR3byBkYXNoZXMsIGV4aXQgaW1tZWRpYXRlbHkuCisuU1MgIlBhc3NpbmcgT3B0aW9ucyB0byB0aGUgQXNzZW1ibGVyIgorLklYIFN1YnNlY3Rpb24gIlBhc3NpbmcgT3B0aW9ucyB0byB0aGUgQXNzZW1ibGVyIgorWW91IGNhbiBwYXNzIG9wdGlvbnMgdG8gdGhlIGFzc2VtYmxlci4KKy5JUCAiXGZCXC1XYSxcZlJcZklvcHRpb25cZlIiIDQKKy5JWCBJdGVtICItV2Esb3B0aW9uIgorUGFzcyBcZklvcHRpb25cZlIgYXMgYW4gb3B0aW9uIHRvIHRoZSBhc3NlbWJsZXIuICBJZiBcZklvcHRpb25cZlIKK2NvbnRhaW5zIGNvbW1hcywgaXQgaXMgc3BsaXQgaW50byBtdWx0aXBsZSBvcHRpb25zIGF0IHRoZSBjb21tYXMuCisuSVAgIlxmQlwtWGFzc2VtYmxlclxmUiBcZklvcHRpb25cZlIiIDQKKy5JWCBJdGVtICItWGFzc2VtYmxlciBvcHRpb24iCitQYXNzIFxmSW9wdGlvblxmUiBhcyBhbiBvcHRpb24gdG8gdGhlIGFzc2VtYmxlci4gIFlvdSBjYW4gdXNlIHRoaXMgdG8KK3N1cHBseSBzeXN0ZW0tc3BlY2lmaWMgYXNzZW1ibGVyIG9wdGlvbnMgdGhhdCBccy0xR0NDXHMwIGRvZXMgbm90CityZWNvZ25pemUuCisuU3AKK0lmIHlvdSB3YW50IHRvIHBhc3MgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYW4gYXJndW1lbnQsIHlvdSBtdXN0IHVzZQorXCZcZkJcLVhhc3NlbWJsZXJcZlIgdHdpY2UsIG9uY2UgZm9yIHRoZSBvcHRpb24gYW5kIG9uY2UgZm9yIHRoZSBhcmd1bWVudC4KKy5TUyAiT3B0aW9ucyBmb3IgTGlua2luZyIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIGZvciBMaW5raW5nIgorVGhlc2Ugb3B0aW9ucyBjb21lIGludG8gcGxheSB3aGVuIHRoZSBjb21waWxlciBsaW5rcyBvYmplY3QgZmlsZXMgaW50bworYW4gZXhlY3V0YWJsZSBvdXRwdXQgZmlsZS4gIFRoZXkgYXJlIG1lYW5pbmdsZXNzIGlmIHRoZSBjb21waWxlciBpcworbm90IGRvaW5nIGEgbGluayBzdGVwLgorLklQICJcZklvYmplY3QtZmlsZS1uYW1lXGZSIiA0CisuSVggSXRlbSAib2JqZWN0LWZpbGUtbmFtZSIKK0EgZmlsZSBuYW1lIHRoYXQgZG9lcyBub3QgZW5kIGluIGEgc3BlY2lhbCByZWNvZ25pemVkIHN1ZmZpeCBpcworY29uc2lkZXJlZCB0byBuYW1lIGFuIG9iamVjdCBmaWxlIG9yIGxpYnJhcnkuICAoT2JqZWN0IGZpbGVzIGFyZQorZGlzdGluZ3Vpc2hlZCBmcm9tIGxpYnJhcmllcyBieSB0aGUgbGlua2VyIGFjY29yZGluZyB0byB0aGUgZmlsZQorY29udGVudHMuKSAgSWYgbGlua2luZyBpcyBkb25lLCB0aGVzZSBvYmplY3QgZmlsZXMgYXJlIHVzZWQgYXMgaW5wdXQKK3RvIHRoZSBsaW5rZXIuCisuSVAgIlxmQlwtY1xmUiIgNAorLklYIEl0ZW0gIi1jIgorLlBEIDAKKy5JUCAiXGZCXC1TXGZSIiA0CisuSVggSXRlbSAiLVMiCisuSVAgIlxmQlwtRVxmUiIgNAorLklYIEl0ZW0gIi1FIgorLlBECitJZiBhbnkgb2YgdGhlc2Ugb3B0aW9ucyBpcyB1c2VkLCB0aGVuIHRoZSBsaW5rZXIgaXMgbm90IHJ1biwgYW5kCitvYmplY3QgZmlsZSBuYW1lcyBzaG91bGQgbm90IGJlIHVzZWQgYXMgYXJndW1lbnRzLgorLklQICJcZkJcLWxcZlJcZklsaWJyYXJ5XGZSIiA0CisuSVggSXRlbSAiLWxsaWJyYXJ5IgorLlBEIDAKKy5JUCAiXGZCXC1sXGZSIFxmSWxpYnJhcnlcZlIiIDQKKy5JWCBJdGVtICItbCBsaWJyYXJ5IgorLlBECitTZWFyY2ggdGhlIGxpYnJhcnkgbmFtZWQgXGZJbGlicmFyeVxmUiB3aGVuIGxpbmtpbmcuICAoVGhlIHNlY29uZAorYWx0ZXJuYXRpdmUgd2l0aCB0aGUgbGlicmFyeSBhcyBhIHNlcGFyYXRlIGFyZ3VtZW50IGlzIG9ubHkgZm9yCitcJlxzLTFQT1NJWFxzMCBjb21wbGlhbmNlIGFuZCBpcyBub3QgcmVjb21tZW5kZWQuKQorLlNwCitJdCBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hlcmUgaW4gdGhlIGNvbW1hbmQgeW91IHdyaXRlIHRoaXMgb3B0aW9uOyB0aGUKK2xpbmtlciBzZWFyY2hlcyBhbmQgcHJvY2Vzc2VzIGxpYnJhcmllcyBhbmQgb2JqZWN0IGZpbGVzIGluIHRoZSBvcmRlciB0aGV5CithcmUgc3BlY2lmaWVkLiAgVGh1cywgXGZCZm9vLm8gXC1seiBiYXIub1xmUiBzZWFyY2hlcyBsaWJyYXJ5IFxmQnpcZlIKK2FmdGVyIGZpbGUgXGZJZm9vLm9cZlIgYnV0IGJlZm9yZSBcZkliYXIub1xmUi4gIElmIFxmSWJhci5vXGZSIHJlZmVycwordG8gZnVuY3Rpb25zIGluIFxmQnpcZlIsIHRob3NlIGZ1bmN0aW9ucyBtYXkgbm90IGJlIGxvYWRlZC4KKy5TcAorVGhlIGxpbmtlciBzZWFyY2hlcyBhIHN0YW5kYXJkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIHRoZSBsaWJyYXJ5LAord2hpY2ggaXMgYWN0dWFsbHkgYSBmaWxlIG5hbWVkIFxmSWxpYlxmSWxpYnJhcnlcZkkuYVxmUi4gIFRoZSBsaW5rZXIKK3RoZW4gdXNlcyB0aGlzIGZpbGUgYXMgaWYgaXQgaGFkIGJlZW4gc3BlY2lmaWVkIHByZWNpc2VseSBieSBuYW1lLgorLlNwCitUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgaW5jbHVkZSBzZXZlcmFsIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcworcGx1cyBhbnkgdGhhdCB5b3Ugc3BlY2lmeSB3aXRoIFxmQlwtTFxmUi4KKy5TcAorTm9ybWFsbHkgdGhlIGZpbGVzIGZvdW5kIHRoaXMgd2F5IGFyZSBsaWJyYXJ5IGZpbGVzXC1cLVwtYXJjaGl2ZSBmaWxlcword2hvc2UgbWVtYmVycyBhcmUgb2JqZWN0IGZpbGVzLiAgVGhlIGxpbmtlciBoYW5kbGVzIGFuIGFyY2hpdmUgZmlsZSBieQorc2Nhbm5pbmcgdGhyb3VnaCBpdCBmb3IgbWVtYmVycyB3aGljaCBkZWZpbmUgc3ltYm9scyB0aGF0IGhhdmUgc28gZmFyCitiZWVuIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkLiAgQnV0IGlmIHRoZSBmaWxlIHRoYXQgaXMgZm91bmQgaXMgYW4KK29yZGluYXJ5IG9iamVjdCBmaWxlLCBpdCBpcyBsaW5rZWQgaW4gdGhlIHVzdWFsIGZhc2hpb24uICBUaGUgb25seQorZGlmZmVyZW5jZSBiZXR3ZWVuIHVzaW5nIGFuIFxmQlwtbFxmUiBvcHRpb24gYW5kIHNwZWNpZnlpbmcgYSBmaWxlIG5hbWUKK2lzIHRoYXQgXGZCXC1sXGZSIHN1cnJvdW5kcyBcZklsaWJyYXJ5XGZSIHdpdGggXGZCbGliXGZSIGFuZCBcZkIuYVxmUgorYW5kIHNlYXJjaGVzIHNldmVyYWwgZGlyZWN0b3JpZXMuCisuSVAgIlxmQlwtbG9iamNcZlIiIDQKKy5JWCBJdGVtICItbG9iamMiCitZb3UgbmVlZCB0aGlzIHNwZWNpYWwgY2FzZSBvZiB0aGUgXGZCXC1sXGZSIG9wdGlvbiBpbiBvcmRlciB0bworbGluayBhbiBPYmplY3RpdmUtQyBvciBPYmplY3RpdmVcLVwqKEMrIHByb2dyYW0uCisuSVAgIlxmQlwtbm9zdGFydGZpbGVzXGZSIiA0CisuSVggSXRlbSAiLW5vc3RhcnRmaWxlcyIKK0RvIG5vdCB1c2UgdGhlIHN0YW5kYXJkIHN5c3RlbSBzdGFydHVwIGZpbGVzIHdoZW4gbGlua2luZy4KK1RoZSBzdGFuZGFyZCBzeXN0ZW0gbGlicmFyaWVzIGFyZSB1c2VkIG5vcm1hbGx5LCB1bmxlc3MgXGZCXC1ub3N0ZGxpYlxmUgorb3IgXGZCXC1ub2RlZmF1bHRsaWJzXGZSIGlzIHVzZWQuCisuSVAgIlxmQlwtbm9kZWZhdWx0bGlic1xmUiIgNAorLklYIEl0ZW0gIi1ub2RlZmF1bHRsaWJzIgorRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCitPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgYXJlIHBhc3NlZCB0byB0aGUgbGlua2VyLCBhbmQgb3B0aW9ucworc3BlY2lmeWluZyBsaW5rYWdlIG9mIHRoZSBzeXN0ZW0gbGlicmFyaWVzLCBzdWNoIGFzIFxmKENXXCooQ2BcLXN0YXRpY1wtbGliZ2NjXCooQydcZlIKK29yIFxmKENXXCooQ2BcLXNoYXJlZFwtbGliZ2NjXCooQydcZlIsIGFyZSBpZ25vcmVkLiAgCitUaGUgc3RhbmRhcmQgc3RhcnR1cCBmaWxlcyBhcmUgdXNlZCBub3JtYWxseSwgdW5sZXNzIFxmQlwtbm9zdGFydGZpbGVzXGZSCitpcyB1c2VkLgorLlNwCitUaGUgY29tcGlsZXIgbWF5IGdlbmVyYXRlIGNhbGxzIHRvIFxmKENXXCooQ2BtZW1jbXBcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYG1lbXNldFwqKEMnXGZSLCBcZihDV1wqKENgbWVtY3B5XCooQydcZlIgYW5kIFxmKENXXCooQ2BtZW1tb3ZlXCooQydcZlIuCitUaGVzZSBlbnRyaWVzIGFyZSB1c3VhbGx5IHJlc29sdmVkIGJ5IGVudHJpZXMgaW4KK2xpYmMuICBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGJlIHN1cHBsaWVkIHRocm91Z2ggc29tZSBvdGhlcgorbWVjaGFuaXNtIHdoZW4gdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLgorLklQICJcZkJcLW5vc3RkbGliXGZSIiA0CisuSVggSXRlbSAiLW5vc3RkbGliIgorRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIHN0YXJ0dXAgZmlsZXMgb3IgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KK05vIHN0YXJ0dXAgZmlsZXMgYW5kIG9ubHkgdGhlIGxpYnJhcmllcyB5b3Ugc3BlY2lmeSBhcmUgcGFzc2VkIHRvCit0aGUgbGlua2VyLCBhbmQgb3B0aW9ucyBzcGVjaWZ5aW5nIGxpbmthZ2Ugb2YgdGhlIHN5c3RlbSBsaWJyYXJpZXMsIHN1Y2ggYXMKK1wmXGYoQ1dcKihDYFwtc3RhdGljXC1saWJnY2NcKihDJ1xmUiBvciBcZihDV1wqKENgXC1zaGFyZWRcLWxpYmdjY1wqKEMnXGZSLCBhcmUgaWdub3JlZC4KKy5TcAorVGhlIGNvbXBpbGVyIG1heSBnZW5lcmF0ZSBjYWxscyB0byBcZihDV1wqKENgbWVtY21wXCooQydcZlIsIFxmKENXXCooQ2BtZW1zZXRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYG1lbWNweVwqKEMnXGZSIGFuZCBcZihDV1wqKENgbWVtbW92ZVwqKEMnXGZSLgorVGhlc2UgZW50cmllcyBhcmUgdXN1YWxseSByZXNvbHZlZCBieSBlbnRyaWVzIGluCitsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKK21lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKy5TcAorT25lIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJpZXMgYnlwYXNzZWQgYnkgXGZCXC1ub3N0ZGxpYlxmUiBhbmQKK1wmXGZCXC1ub2RlZmF1bHRsaWJzXGZSIGlzIFxmSWxpYmdjYy5hXGZSLCBhIGxpYnJhcnkgb2YgaW50ZXJuYWwgc3Vicm91dGluZXMKK3doaWNoIFxzLTFHQ0NcczAgdXNlcyB0byBvdmVyY29tZSBzaG9ydGNvbWluZ3Mgb2YgcGFydGljdWxhciBtYWNoaW5lcywgb3Igc3BlY2lhbAorbmVlZHMgZm9yIHNvbWUgbGFuZ3VhZ2VzLgorLlNwCitJbiBtb3N0IGNhc2VzLCB5b3UgbmVlZCBcZklsaWJnY2MuYVxmUiBldmVuIHdoZW4geW91IHdhbnQgdG8gYXZvaWQKK290aGVyIHN0YW5kYXJkIGxpYnJhcmllcy4gIEluIG90aGVyIHdvcmRzLCB3aGVuIHlvdSBzcGVjaWZ5IFxmQlwtbm9zdGRsaWJcZlIKK29yIFxmQlwtbm9kZWZhdWx0bGlic1xmUiB5b3Ugc2hvdWxkIHVzdWFsbHkgc3BlY2lmeSBcZkJcLWxnY2NcZlIgYXMgd2VsbC4KK1RoaXMgZW5zdXJlcyB0aGF0IHlvdSBoYXZlIG5vIHVucmVzb2x2ZWQgcmVmZXJlbmNlcyB0byBpbnRlcm5hbCBccy0xR0NDXHMwCitsaWJyYXJ5IHN1YnJvdXRpbmVzLgorKEFuIGV4YW1wbGUgb2Ygc3VjaCBhbiBpbnRlcm5hbCBzdWJyb3V0aW5lIGlzIFxmQl9cfF9tYWluXGZSLCB1c2VkIHRvIGVuc3VyZSBcKihDKworY29uc3RydWN0b3JzIGFyZSBjYWxsZWQuKQorLklQICJcZkJcLXBpZVxmUiIgNAorLklYIEl0ZW0gIi1waWUiCitQcm9kdWNlIGEgcG9zaXRpb24gaW5kZXBlbmRlbnQgZXhlY3V0YWJsZSBvbiB0YXJnZXRzIHRoYXQgc3VwcG9ydCBpdC4KK0ZvciBwcmVkaWN0YWJsZSByZXN1bHRzLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIHNhbWUgc2V0IG9mIG9wdGlvbnMKK3VzZWQgZm9yIGNvbXBpbGF0aW9uIChcZkJcLWZwaWVcZlIsIFxmQlwtZlBJRVxmUiwKK29yIG1vZGVsIHN1Ym9wdGlvbnMpIHdoZW4geW91IHNwZWNpZnkgdGhpcyBsaW5rZXIgb3B0aW9uLgorLklQICJcZkJcLXJkeW5hbWljXGZSIiA0CisuSVggSXRlbSAiLXJkeW5hbWljIgorUGFzcyB0aGUgZmxhZyBcZkJcLWV4cG9ydFwtZHluYW1pY1xmUiB0byB0aGUgXHMtMUVMRlxzMCBsaW5rZXIsIG9uIHRhcmdldHMKK3RoYXQgc3VwcG9ydCBpdC4gVGhpcyBpbnN0cnVjdHMgdGhlIGxpbmtlciB0byBhZGQgYWxsIHN5bWJvbHMsIG5vdAorb25seSB1c2VkIG9uZXMsIHRvIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZS4gVGhpcyBvcHRpb24gaXMgbmVlZGVkCitmb3Igc29tZSB1c2VzIG9mIFxmKENXXCooQ2BkbG9wZW5cKihDJ1xmUiBvciB0byBhbGxvdyBvYnRhaW5pbmcgYmFja3RyYWNlcworZnJvbSB3aXRoaW4gYSBwcm9ncmFtLgorLklQICJcZkJcLXNcZlIiIDQKKy5JWCBJdGVtICItcyIKK1JlbW92ZSBhbGwgc3ltYm9sIHRhYmxlIGFuZCByZWxvY2F0aW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIGV4ZWN1dGFibGUuCisuSVAgIlxmQlwtc3RhdGljXGZSIiA0CisuSVggSXRlbSAiLXN0YXRpYyIKK09uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGR5bmFtaWMgbGlua2luZywgdGhpcyBwcmV2ZW50cyBsaW5raW5nIHdpdGggdGhlIHNoYXJlZAorbGlicmFyaWVzLiAgT24gb3RoZXIgc3lzdGVtcywgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKy5JUCAiXGZCXC1zaGFyZWRcZlIiIDQKKy5JWCBJdGVtICItc2hhcmVkIgorUHJvZHVjZSBhIHNoYXJlZCBvYmplY3Qgd2hpY2ggY2FuIHRoZW4gYmUgbGlua2VkIHdpdGggb3RoZXIgb2JqZWN0cyB0bworZm9ybSBhbiBleGVjdXRhYmxlLiAgTm90IGFsbCBzeXN0ZW1zIHN1cHBvcnQgdGhpcyBvcHRpb24uICBGb3IgcHJlZGljdGFibGUKK3Jlc3VsdHMsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgc2FtZSBzZXQgb2Ygb3B0aW9ucyB1c2VkIGZvciBjb21waWxhdGlvbgorKFxmQlwtZnBpY1xmUiwgXGZCXC1mUElDXGZSLCBvciBtb2RlbCBzdWJvcHRpb25zKSB3aGVuCit5b3Ugc3BlY2lmeSB0aGlzIGxpbmtlciBvcHRpb24uWzFdCisuSVAgIlxmQlwtc2hhcmVkXC1saWJnY2NcZlIiIDQKKy5JWCBJdGVtICItc2hhcmVkLWxpYmdjYyIKKy5QRCAwCisuSVAgIlxmQlwtc3RhdGljXC1saWJnY2NcZlIiIDQKKy5JWCBJdGVtICItc3RhdGljLWxpYmdjYyIKKy5QRAorT24gc3lzdGVtcyB0aGF0IHByb3ZpZGUgXGZJbGliZ2NjXGZSIGFzIGEgc2hhcmVkIGxpYnJhcnksIHRoZXNlIG9wdGlvbnMKK2ZvcmNlIHRoZSB1c2Ugb2YgZWl0aGVyIHRoZSBzaGFyZWQgb3Igc3RhdGljIHZlcnNpb24sIHJlc3BlY3RpdmVseS4KK0lmIG5vIHNoYXJlZCB2ZXJzaW9uIG9mIFxmSWxpYmdjY1xmUiB3YXMgYnVpbHQgd2hlbiB0aGUgY29tcGlsZXIgd2FzCitjb25maWd1cmVkLCB0aGVzZSBvcHRpb25zIGhhdmUgbm8gZWZmZWN0LgorLlNwCitUaGVyZSBhcmUgc2V2ZXJhbCBzaXR1YXRpb25zIGluIHdoaWNoIGFuIGFwcGxpY2F0aW9uIHNob3VsZCB1c2UgdGhlCitzaGFyZWQgXGZJbGliZ2NjXGZSIGluc3RlYWQgb2YgdGhlIHN0YXRpYyB2ZXJzaW9uLiAgVGhlIG1vc3QgY29tbW9uCitvZiB0aGVzZSBpcyB3aGVuIHRoZSBhcHBsaWNhdGlvbiB3aXNoZXMgdG8gdGhyb3cgYW5kIGNhdGNoIGV4Y2VwdGlvbnMKK2Fjcm9zcyBkaWZmZXJlbnQgc2hhcmVkIGxpYnJhcmllcy4gIEluIHRoYXQgY2FzZSwgZWFjaCBvZiB0aGUgbGlicmFyaWVzCithcyB3ZWxsIGFzIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgc2hvdWxkIHVzZSB0aGUgc2hhcmVkIFxmSWxpYmdjY1xmUi4KKy5TcAorVGhlcmVmb3JlLCB0aGUgRysrIGFuZCBccy0xR0NKXHMwIGRyaXZlcnMgYXV0b21hdGljYWxseSBhZGQKK1wmXGZCXC1zaGFyZWRcLWxpYmdjY1xmUiB3aGVuZXZlciB5b3UgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSBvciBhIG1haW4KK2V4ZWN1dGFibGUsIGJlY2F1c2UgXCooQysgYW5kIEphdmEgcHJvZ3JhbXMgdHlwaWNhbGx5IHVzZSBleGNlcHRpb25zLCBzbwordGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisuU3AKK0lmLCBpbnN0ZWFkLCB5b3UgdXNlIHRoZSBccy0xR0NDXHMwIGRyaXZlciB0byBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcywgeW91IG1heQorZmluZCB0aGF0IHRoZXkgYXJlIG5vdCBhbHdheXMgbGlua2VkIHdpdGggdGhlIHNoYXJlZCBcZklsaWJnY2NcZlIuCitJZiBccy0xR0NDXHMwIGZpbmRzLCBhdCBpdHMgY29uZmlndXJhdGlvbiB0aW1lLCB0aGF0IHlvdSBoYXZlIGEgbm9uLUdOVSBsaW5rZXIKK29yIGEgXHMtMUdOVVxzMCBsaW5rZXIgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IG9wdGlvbiBcZkJcLVwtZWhcLWZyYW1lXC1oZHJcZlIsCitpdCBsaW5rcyB0aGUgc2hhcmVkIHZlcnNpb24gb2YgXGZJbGliZ2NjXGZSIGludG8gc2hhcmVkIGxpYnJhcmllcworYnkgZGVmYXVsdC4gIE90aGVyd2lzZSwgaXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBsaW5rZXIgYW5kIG9wdGltaXplcworYXdheSB0aGUgbGlua2luZyB3aXRoIHRoZSBzaGFyZWQgdmVyc2lvbiBvZiBcZklsaWJnY2NcZlIsIGxpbmtpbmcgd2l0aAordGhlIHN0YXRpYyB2ZXJzaW9uIG9mIGxpYmdjYyBieSBkZWZhdWx0LiAgVGhpcyBhbGxvd3MgZXhjZXB0aW9ucyB0bworcHJvcGFnYXRlIHRocm91Z2ggc3VjaCBzaGFyZWQgbGlicmFyaWVzLCB3aXRob3V0IGluY3VycmluZyByZWxvY2F0aW9uCitjb3N0cyBhdCBsaWJyYXJ5IGxvYWQgdGltZS4KKy5TcAorSG93ZXZlciwgaWYgYSBsaWJyYXJ5IG9yIG1haW4gZXhlY3V0YWJsZSBpcyBzdXBwb3NlZCB0byB0aHJvdyBvciBjYXRjaAorZXhjZXB0aW9ucywgeW91IG11c3QgbGluayBpdCB1c2luZyB0aGUgRysrIG9yIFxzLTFHQ0pcczAgZHJpdmVyLCBhcyBhcHByb3ByaWF0ZQorZm9yIHRoZSBsYW5ndWFnZXMgdXNlZCBpbiB0aGUgcHJvZ3JhbSwgb3IgdXNpbmcgdGhlIG9wdGlvbgorXCZcZkJcLXNoYXJlZFwtbGliZ2NjXGZSLCBzdWNoIHRoYXQgaXQgaXMgbGlua2VkIHdpdGggdGhlIHNoYXJlZAorXCZcZklsaWJnY2NcZlIuCisuSVAgIlxmQlwtc3RhdGljXC1saWJhc2FuXGZSIiA0CisuSVggSXRlbSAiLXN0YXRpYy1saWJhc2FuIgorV2hlbiB0aGUgXGZCXC1mc2FuaXRpemU9YWRkcmVzc1xmUiBvcHRpb24gaXMgdXNlZCB0byBsaW5rIGEgcHJvZ3JhbSwKK3RoZSBccy0xR0NDXHMwIGRyaXZlciBhdXRvbWF0aWNhbGx5IGxpbmtzIGFnYWluc3QgXGZCbGliYXNhblxmUi4gIElmCitcJlxmSWxpYmFzYW5cZlIgaXMgYXZhaWxhYmxlIGFzIGEgc2hhcmVkIGxpYnJhcnksIGFuZCB0aGUgXGZCXC1zdGF0aWNcZlIKK29wdGlvbiBpcyBub3QgdXNlZCwgdGhlbiB0aGlzIGxpbmtzIGFnYWluc3QgdGhlIHNoYXJlZCB2ZXJzaW9uIG9mCitcJlxmSWxpYmFzYW5cZlIuICBUaGUgXGZCXC1zdGF0aWNcLWxpYmFzYW5cZlIgb3B0aW9uIGRpcmVjdHMgdGhlIFxzLTFHQ0NcczAKK2RyaXZlciB0byBsaW5rIFxmSWxpYmFzYW5cZlIgc3RhdGljYWxseSwgd2l0aG91dCBuZWNlc3NhcmlseSBsaW5raW5nCitvdGhlciBsaWJyYXJpZXMgc3RhdGljYWxseS4KKy5JUCAiXGZCXC1zdGF0aWNcLWxpYnRzYW5cZlIiIDQKKy5JWCBJdGVtICItc3RhdGljLWxpYnRzYW4iCitXaGVuIHRoZSBcZkJcLWZzYW5pdGl6ZT10aHJlYWRcZlIgb3B0aW9uIGlzIHVzZWQgdG8gbGluayBhIHByb2dyYW0sCit0aGUgXHMtMUdDQ1xzMCBkcml2ZXIgYXV0b21hdGljYWxseSBsaW5rcyBhZ2FpbnN0IFxmQmxpYnRzYW5cZlIuICBJZgorXCZcZklsaWJ0c2FuXGZSIGlzIGF2YWlsYWJsZSBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBhbmQgdGhlIFxmQlwtc3RhdGljXGZSCitvcHRpb24gaXMgbm90IHVzZWQsIHRoZW4gdGhpcyBsaW5rcyBhZ2FpbnN0IHRoZSBzaGFyZWQgdmVyc2lvbiBvZgorXCZcZklsaWJ0c2FuXGZSLiAgVGhlIFxmQlwtc3RhdGljXC1saWJ0c2FuXGZSIG9wdGlvbiBkaXJlY3RzIHRoZSBccy0xR0NDXHMwCitkcml2ZXIgdG8gbGluayBcZklsaWJ0c2FuXGZSIHN0YXRpY2FsbHksIHdpdGhvdXQgbmVjZXNzYXJpbHkgbGlua2luZworb3RoZXIgbGlicmFyaWVzIHN0YXRpY2FsbHkuCisuSVAgIlxmQlwtc3RhdGljXC1saWJzdGRjKytcZlIiIDQKKy5JWCBJdGVtICItc3RhdGljLWxpYnN0ZGMrKyIKK1doZW4gdGhlIFxmQmcrK1xmUiBwcm9ncmFtIGlzIHVzZWQgdG8gbGluayBhIFwqKEMrIHByb2dyYW0sIGl0Citub3JtYWxseSBhdXRvbWF0aWNhbGx5IGxpbmtzIGFnYWluc3QgXGZCbGlic3RkYysrXGZSLiAgSWYKK1wmXGZJbGlic3RkYysrXGZSIGlzIGF2YWlsYWJsZSBhcyBhIHNoYXJlZCBsaWJyYXJ5LCBhbmQgdGhlCitcJlxmQlwtc3RhdGljXGZSIG9wdGlvbiBpcyBub3QgdXNlZCwgdGhlbiB0aGlzIGxpbmtzIGFnYWluc3QgdGhlCitzaGFyZWQgdmVyc2lvbiBvZiBcZklsaWJzdGRjKytcZlIuICBUaGF0IGlzIG5vcm1hbGx5IGZpbmUuICBIb3dldmVyLCBpdAoraXMgc29tZXRpbWVzIHVzZWZ1bCB0byBmcmVlemUgdGhlIHZlcnNpb24gb2YgXGZJbGlic3RkYysrXGZSIHVzZWQgYnkKK3RoZSBwcm9ncmFtIHdpdGhvdXQgZ29pbmcgYWxsIHRoZSB3YXkgdG8gYSBmdWxseSBzdGF0aWMgbGluay4gIFRoZQorXCZcZkJcLXN0YXRpY1wtbGlic3RkYysrXGZSIG9wdGlvbiBkaXJlY3RzIHRoZSBcZkJnKytcZlIgZHJpdmVyIHRvCitsaW5rIFxmSWxpYnN0ZGMrK1xmUiBzdGF0aWNhbGx5LCB3aXRob3V0IG5lY2Vzc2FyaWx5IGxpbmtpbmcgb3RoZXIKK2xpYnJhcmllcyBzdGF0aWNhbGx5LgorLklQICJcZkJcLXN5bWJvbGljXGZSIiA0CisuSVggSXRlbSAiLXN5bWJvbGljIgorQmluZCByZWZlcmVuY2VzIHRvIGdsb2JhbCBzeW1ib2xzIHdoZW4gYnVpbGRpbmcgYSBzaGFyZWQgb2JqZWN0LiAgV2FybgorYWJvdXQgYW55IHVucmVzb2x2ZWQgcmVmZXJlbmNlcyAodW5sZXNzIG92ZXJyaWRkZW4gYnkgdGhlIGxpbmsgZWRpdG9yCitvcHRpb24gXGZCXC1YbGlua2VyIFwteiBcLVhsaW5rZXIgZGVmc1xmUikuICBPbmx5IGEgZmV3IHN5c3RlbXMgc3VwcG9ydAordGhpcyBvcHRpb24uCisuSVAgIlxmQlwtVFxmUiBcZklzY3JpcHRcZlIiIDQKKy5JWCBJdGVtICItVCBzY3JpcHQiCitVc2UgXGZJc2NyaXB0XGZSIGFzIHRoZSBsaW5rZXIgc2NyaXB0LiAgVGhpcyBvcHRpb24gaXMgc3VwcG9ydGVkIGJ5IG1vc3QKK3N5c3RlbXMgdXNpbmcgdGhlIFxzLTFHTlVcczAgbGlua2VyLiAgT24gc29tZSB0YXJnZXRzLCBzdWNoIGFzIGJhcmUtYm9hcmQKK3RhcmdldHMgd2l0aG91dCBhbiBvcGVyYXRpbmcgc3lzdGVtLCB0aGUgXGZCXC1UXGZSIG9wdGlvbiBtYXkgYmUgcmVxdWlyZWQKK3doZW4gbGlua2luZyB0byBhdm9pZCByZWZlcmVuY2VzIHRvIHVuZGVmaW5lZCBzeW1ib2xzLgorLklQICJcZkJcLVhsaW5rZXJcZlIgXGZJb3B0aW9uXGZSIiA0CisuSVggSXRlbSAiLVhsaW5rZXIgb3B0aW9uIgorUGFzcyBcZklvcHRpb25cZlIgYXMgYW4gb3B0aW9uIHRvIHRoZSBsaW5rZXIuICBZb3UgY2FuIHVzZSB0aGlzIHRvCitzdXBwbHkgc3lzdGVtLXNwZWNpZmljIGxpbmtlciBvcHRpb25zIHRoYXQgXHMtMUdDQ1xzMCBkb2VzIG5vdCByZWNvZ25pemUuCisuU3AKK0lmIHlvdSB3YW50IHRvIHBhc3MgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYSBzZXBhcmF0ZSBhcmd1bWVudCwgeW91IG11c3QgdXNlCitcJlxmQlwtWGxpbmtlclxmUiB0d2ljZSwgb25jZSBmb3IgdGhlIG9wdGlvbiBhbmQgb25jZSBmb3IgdGhlIGFyZ3VtZW50LgorRm9yIGV4YW1wbGUsIHRvIHBhc3MgXGZCXC1hc3NlcnQgZGVmaW5pdGlvbnNcZlIsIHlvdSBtdXN0IHdyaXRlCitcJlxmQlwtWGxpbmtlciBcLWFzc2VydCBcLVhsaW5rZXIgZGVmaW5pdGlvbnNcZlIuICBJdCBkb2VzIG5vdCB3b3JrIHRvIHdyaXRlCitcJlxmQlwtWGxpbmtlciBcKihMIlwtYXNzZXJ0IGRlZmluaXRpb25zXCooUiJcZlIsIGJlY2F1c2UgdGhpcyBwYXNzZXMgdGhlIGVudGlyZQorc3RyaW5nIGFzIGEgc2luZ2xlIGFyZ3VtZW50LCB3aGljaCBpcyBub3Qgd2hhdCB0aGUgbGlua2VyIGV4cGVjdHMuCisuU3AKK1doZW4gdXNpbmcgdGhlIFxzLTFHTlVcczAgbGlua2VyLCBpdCBpcyB1c3VhbGx5IG1vcmUgY29udmVuaWVudCB0byBwYXNzCithcmd1bWVudHMgdG8gbGlua2VyIG9wdGlvbnMgdXNpbmcgdGhlIFxmSW9wdGlvblxmUlxmQj1cZlJcZkl2YWx1ZVxmUgorc3ludGF4IHRoYW4gYXMgc2VwYXJhdGUgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gc3BlY2lmeQorXCZcZkJcLVhsaW5rZXIgXC1NYXA9b3V0cHV0Lm1hcFxmUiByYXRoZXIgdGhhbgorXCZcZkJcLVhsaW5rZXIgXC1NYXAgXC1YbGlua2VyIG91dHB1dC5tYXBcZlIuICBPdGhlciBsaW5rZXJzIG1heSBub3Qgc3VwcG9ydAordGhpcyBzeW50YXggZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zLgorLklQICJcZkJcLVdsLFxmUlxmSW9wdGlvblxmUiIgNAorLklYIEl0ZW0gIi1XbCxvcHRpb24iCitQYXNzIFxmSW9wdGlvblxmUiBhcyBhbiBvcHRpb24gdG8gdGhlIGxpbmtlci4gIElmIFxmSW9wdGlvblxmUiBjb250YWlucworY29tbWFzLCBpdCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIG9wdGlvbnMgYXQgdGhlIGNvbW1hcy4gIFlvdSBjYW4gdXNlIHRoaXMKK3N5bnRheCB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSBvcHRpb24uCitGb3IgZXhhbXBsZSwgXGZCXC1XbCxcLU1hcCxvdXRwdXQubWFwXGZSIHBhc3NlcyBcZkJcLU1hcCBvdXRwdXQubWFwXGZSIHRvIHRoZQorbGlua2VyLiAgV2hlbiB1c2luZyB0aGUgXHMtMUdOVVxzMCBsaW5rZXIsIHlvdSBjYW4gYWxzbyBnZXQgdGhlIHNhbWUgZWZmZWN0IHdpdGgKK1wmXGZCXC1XbCxcLU1hcD1vdXRwdXQubWFwXGZSLgorLklQICJcZkJcLXVcZlIgXGZJc3ltYm9sXGZSIiA0CisuSVggSXRlbSAiLXUgc3ltYm9sIgorUHJldGVuZCB0aGUgc3ltYm9sIFxmSXN5bWJvbFxmUiBpcyB1bmRlZmluZWQsIHRvIGZvcmNlIGxpbmtpbmcgb2YKK2xpYnJhcnkgbW9kdWxlcyB0byBkZWZpbmUgaXQuICBZb3UgY2FuIHVzZSBcZkJcLXVcZlIgbXVsdGlwbGUgdGltZXMgd2l0aAorZGlmZmVyZW50IHN5bWJvbHMgdG8gZm9yY2UgbG9hZGluZyBvZiBhZGRpdGlvbmFsIGxpYnJhcnkgbW9kdWxlcy4KKy5TUyAiT3B0aW9ucyBmb3IgRGlyZWN0b3J5IFNlYXJjaCIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIGZvciBEaXJlY3RvcnkgU2VhcmNoIgorVGhlc2Ugb3B0aW9ucyBzcGVjaWZ5IGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgaGVhZGVyIGZpbGVzLCBmb3IKK2xpYnJhcmllcyBhbmQgZm9yIHBhcnRzIG9mIHRoZSBjb21waWxlcjoKKy5JUCAiXGZCXC1JXGZSXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLUlkaXIiCitBZGQgdGhlIGRpcmVjdG9yeSBcZklkaXJcZlIgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYmUKK3NlYXJjaGVkIGZvciBoZWFkZXIgZmlsZXMuICBUaGlzIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGEgc3lzdGVtIGhlYWRlcgorZmlsZSwgc3Vic3RpdHV0aW5nIHlvdXIgb3duIHZlcnNpb24sIHNpbmNlIHRoZXNlIGRpcmVjdG9yaWVzIGFyZQorc2VhcmNoZWQgYmVmb3JlIHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGUgZGlyZWN0b3JpZXMuICBIb3dldmVyLCB5b3Ugc2hvdWxkCitub3QgdXNlIHRoaXMgb3B0aW9uIHRvIGFkZCBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gdmVuZG9yLXN1cHBsaWVkCitzeXN0ZW0gaGVhZGVyIGZpbGVzICh1c2UgXGZCXC1pc3lzdGVtXGZSIGZvciB0aGF0KS4gIElmIHlvdSB1c2UgbW9yZSB0aGFuCitvbmUgXGZCXC1JXGZSIG9wdGlvbiwgdGhlIGRpcmVjdG9yaWVzIGFyZSBzY2FubmVkIGluIGxlZnQtdG8tcmlnaHQKK29yZGVyOyB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzIGNvbWUgYWZ0ZXIuCisuU3AKK0lmIGEgc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LCBvciBhIGRpcmVjdG9yeSBzcGVjaWZpZWQgd2l0aAorXCZcZkJcLWlzeXN0ZW1cZlIsIGlzIGFsc28gc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSLCB0aGUgXGZCXC1JXGZSCitvcHRpb24gaXMgaWdub3JlZC4gIFRoZSBkaXJlY3RvcnkgaXMgc3RpbGwgc2VhcmNoZWQgYnV0IGFzIGEKK3N5c3RlbSBkaXJlY3RvcnkgYXQgaXRzIG5vcm1hbCBwb3NpdGlvbiBpbiB0aGUgc3lzdGVtIGluY2x1ZGUgY2hhaW4uCitUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IFxzLTFHQ0NcczAncyBwcm9jZWR1cmUgdG8gZml4IGJ1Z2d5IHN5c3RlbSBoZWFkZXJzIGFuZAordGhlIG9yZGVyaW5nIGZvciB0aGUgXGYoQ1dcKihDYGluY2x1ZGVfbmV4dFwqKEMnXGZSIGRpcmVjdGl2ZSBhcmUgbm90IGluYWR2ZXJ0ZW50bHkgY2hhbmdlZC4KK0lmIHlvdSByZWFsbHkgbmVlZCB0byBjaGFuZ2UgdGhlIHNlYXJjaCBvcmRlciBmb3Igc3lzdGVtIGRpcmVjdG9yaWVzLAordXNlIHRoZSBcZkJcLW5vc3RkaW5jXGZSIGFuZC9vciBcZkJcLWlzeXN0ZW1cZlIgb3B0aW9ucy4KKy5JUCAiXGZCXC1pcGx1Z2luZGlyPVxmUlxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pcGx1Z2luZGlyPWRpciIKK1NldCB0aGUgZGlyZWN0b3J5IHRvIHNlYXJjaCBmb3IgcGx1Z2lucyB0aGF0IGFyZSBwYXNzZWQKK2J5IFxmQlwtZnBsdWdpbj1cZlJcZkluYW1lXGZSIGluc3RlYWQgb2YKK1wmXGZCXC1mcGx1Z2luPVxmUlxmSXBhdGhcZlJcZkIvXGZSXGZJbmFtZVxmUlxmQi5zb1xmUi4gIFRoaXMgb3B0aW9uIGlzIG5vdCBtZWFudAordG8gYmUgdXNlZCBieSB0aGUgdXNlciwgYnV0IG9ubHkgcGFzc2VkIGJ5IHRoZSBkcml2ZXIuCisuSVAgIlxmQlwtaXF1b3RlXGZSXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWlxdW90ZWRpciIKK0FkZCB0aGUgZGlyZWN0b3J5IFxmSWRpclxmUiB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0bworYmUgc2VhcmNoZWQgZm9yIGhlYWRlciBmaWxlcyBvbmx5IGZvciB0aGUgY2FzZSBvZiBcZkIjaW5jbHVkZQorIlxmUlxmSWZpbGVcZlJcZkIiXGZSOyB0aGV5IGFyZSBub3Qgc2VhcmNoZWQgZm9yIFxmQiNpbmNsdWRlIDxcZlJcZklmaWxlXGZSXGZCPlxmUiwKK290aGVyd2lzZSBqdXN0IGxpa2UgXGZCXC1JXGZSLgorLklQICJcZkJcLUxcZlJcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItTGRpciIKK0FkZCBkaXJlY3RvcnkgXGZJZGlyXGZSIHRvIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkCitmb3IgXGZCXC1sXGZSLgorLklQICJcZkJcLUJcZlJcZklwcmVmaXhcZlIiIDQKKy5JWCBJdGVtICItQnByZWZpeCIKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGVyZSB0byBmaW5kIHRoZSBleGVjdXRhYmxlcywgbGlicmFyaWVzLAoraW5jbHVkZSBmaWxlcywgYW5kIGRhdGEgZmlsZXMgb2YgdGhlIGNvbXBpbGVyIGl0c2VsZi4KKy5TcAorVGhlIGNvbXBpbGVyIGRyaXZlciBwcm9ncmFtIHJ1bnMgb25lIG9yIG1vcmUgb2YgdGhlIHN1YnByb2dyYW1zCitcJlxmQmNwcFxmUiwgXGZCY2MxXGZSLCBcZkJhc1xmUiBhbmQgXGZCbGRcZlIuICBJdCB0cmllcworXCZcZklwcmVmaXhcZlIgYXMgYSBwcmVmaXggZm9yIGVhY2ggcHJvZ3JhbSBpdCB0cmllcyB0byBydW4sIGJvdGggd2l0aCBhbmQKK3dpdGhvdXQgXGZJbWFjaGluZVxmUlxmQi9cZlJcZkl2ZXJzaW9uXGZSXGZCL1xmUi4KKy5TcAorRm9yIGVhY2ggc3VicHJvZ3JhbSB0byBiZSBydW4sIHRoZSBjb21waWxlciBkcml2ZXIgZmlyc3QgdHJpZXMgdGhlCitcJlxmQlwtQlxmUiBwcmVmaXgsIGlmIGFueS4gIElmIHRoYXQgbmFtZSBpcyBub3QgZm91bmQsIG9yIGlmIFxmQlwtQlxmUgoraXMgbm90IHNwZWNpZmllZCwgdGhlIGRyaXZlciB0cmllcyB0d28gc3RhbmRhcmQgcHJlZml4ZXMsIAorXCZcZkkvdXNyL2xpYi9nY2MvXGZSIGFuZCBcZkkvdXNyL2xvY2FsL2xpYi9nY2MvXGZSLiAgSWYgbmVpdGhlciBvZgordGhvc2UgcmVzdWx0cyBpbiBhIGZpbGUgbmFtZSB0aGF0IGlzIGZvdW5kLCB0aGUgdW5tb2RpZmllZCBwcm9ncmFtCituYW1lIGlzIHNlYXJjaGVkIGZvciB1c2luZyB0aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHlvdXIKK1wmXGZCXHMtMVBBVEhcczBcZlIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisuU3AKK1RoZSBjb21waWxlciBjaGVja3MgdG8gc2VlIGlmIHRoZSBwYXRoIHByb3ZpZGVkIGJ5IHRoZSBcZkJcLUJcZlIKK3JlZmVycyB0byBhIGRpcmVjdG9yeSwgYW5kIGlmIG5lY2Vzc2FyeSBpdCBhZGRzIGEgZGlyZWN0b3J5CitzZXBhcmF0b3IgY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGguCisuU3AKK1wmXGZCXC1CXGZSIHByZWZpeGVzIHRoYXQgZWZmZWN0aXZlbHkgc3BlY2lmeSBkaXJlY3RvcnkgbmFtZXMgYWxzbyBhcHBseQordG8gbGlicmFyaWVzIGluIHRoZSBsaW5rZXIsIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHRyYW5zbGF0ZXMgdGhlc2UKK29wdGlvbnMgaW50byBcZkJcLUxcZlIgb3B0aW9ucyBmb3IgdGhlIGxpbmtlci4gIFRoZXkgYWxzbyBhcHBseSB0bworaW5jbHVkZXMgZmlsZXMgaW4gdGhlIHByZXByb2Nlc3NvciwgYmVjYXVzZSB0aGUgY29tcGlsZXIgdHJhbnNsYXRlcyB0aGVzZQorb3B0aW9ucyBpbnRvIFxmQlwtaXN5c3RlbVxmUiBvcHRpb25zIGZvciB0aGUgcHJlcHJvY2Vzc29yLiAgSW4gdGhpcyBjYXNlLAordGhlIGNvbXBpbGVyIGFwcGVuZHMgXGZCaW5jbHVkZVxmUiB0byB0aGUgcHJlZml4LgorLlNwCitUaGUgcnVudGltZSBzdXBwb3J0IGZpbGUgXGZJbGliZ2NjLmFcZlIgY2FuIGFsc28gYmUgc2VhcmNoZWQgZm9yIHVzaW5nCit0aGUgXGZCXC1CXGZSIHByZWZpeCwgaWYgbmVlZGVkLiAgSWYgaXQgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgdHdvCitzdGFuZGFyZCBwcmVmaXhlcyBhYm92ZSBhcmUgdHJpZWQsIGFuZCB0aGF0IGlzIGFsbC4gIFRoZSBmaWxlIGlzIGxlZnQKK291dCBvZiB0aGUgbGluayBpZiBpdCBpcyBub3QgZm91bmQgYnkgdGhvc2UgbWVhbnMuCisuU3AKK0Fub3RoZXIgd2F5IHRvIHNwZWNpZnkgYSBwcmVmaXggbXVjaCBsaWtlIHRoZSBcZkJcLUJcZlIgcHJlZml4IGlzIHRvIHVzZQordGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFxmQlxzLTFHQ0NfRVhFQ19QUkVGSVhcczBcZlIuCisuU3AKK0FzIGEgc3BlY2lhbCBrbHVkZ2UsIGlmIHRoZSBwYXRoIHByb3ZpZGVkIGJ5IFxmQlwtQlxmUiBpcworXCZcZklbZGlyL11zdGFnZVxmSU5cZkkvXGZSLCB3aGVyZSBcZklOXGZSIGlzIGEgbnVtYmVyIGluIHRoZSByYW5nZSAwIHRvCis5LCB0aGVuIGl0IGlzIHJlcGxhY2VkIGJ5IFxmSVtkaXIvXWluY2x1ZGVcZlIuICBUaGlzIGlzIHRvIGhlbHAKK3dpdGggYm9vdC1zdHJhcHBpbmcgdGhlIGNvbXBpbGVyLgorLklQICJcZkJcLXNwZWNzPVxmUlxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICItc3BlY3M9ZmlsZSIKK1Byb2Nlc3MgXGZJZmlsZVxmUiBhZnRlciB0aGUgY29tcGlsZXIgcmVhZHMgaW4gdGhlIHN0YW5kYXJkIFxmSXNwZWNzXGZSCitmaWxlLCBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMgd2hpY2ggdGhlIFxmQmdjY1xmUiBkcml2ZXIKK3Byb2dyYW0gdXNlcyB3aGVuIGRldGVybWluaW5nIHdoYXQgc3dpdGNoZXMgdG8gcGFzcyB0byBcZkJjYzFcZlIsCitcJlxmQmNjMXBsdXNcZlIsIFxmQmFzXGZSLCBcZkJsZFxmUiwgZXRjLiAgTW9yZSB0aGFuIG9uZQorXCZcZkJcLXNwZWNzPVxmUlxmSWZpbGVcZlIgY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhleQorYXJlIHByb2Nlc3NlZCBpbiBvcmRlciwgZnJvbSBsZWZ0IHRvIHJpZ2h0LgorLklQICJcZkJcLVwtc3lzcm9vdD1cZlJcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItLXN5c3Jvb3Q9ZGlyIgorVXNlIFxmSWRpclxmUiBhcyB0aGUgbG9naWNhbCByb290IGRpcmVjdG9yeSBmb3IgaGVhZGVycyBhbmQgbGlicmFyaWVzLgorRm9yIGV4YW1wbGUsIGlmIHRoZSBjb21waWxlciBub3JtYWxseSBzZWFyY2hlcyBmb3IgaGVhZGVycyBpbgorXCZcZkkvdXNyL2luY2x1ZGVcZlIgYW5kIGxpYnJhcmllcyBpbiBcZkkvdXNyL2xpYlxmUiwgaXQgaW5zdGVhZAorc2VhcmNoZXMgXGZJXGZJZGlyXGZJL3Vzci9pbmNsdWRlXGZSIGFuZCBcZklcZklkaXJcZkkvdXNyL2xpYlxmUi4KKy5TcAorSWYgeW91IHVzZSBib3RoIHRoaXMgb3B0aW9uIGFuZCB0aGUgXGZCXC1pc3lzcm9vdFxmUiBvcHRpb24sIHRoZW4KK3RoZSBcZkJcLVwtc3lzcm9vdFxmUiBvcHRpb24gYXBwbGllcyB0byBsaWJyYXJpZXMsIGJ1dCB0aGUKK1wmXGZCXC1pc3lzcm9vdFxmUiBvcHRpb24gYXBwbGllcyB0byBoZWFkZXIgZmlsZXMuCisuU3AKK1RoZSBccy0xR05VXHMwIGxpbmtlciAoYmVnaW5uaW5nIHdpdGggdmVyc2lvbiAyLjE2KSBoYXMgdGhlIG5lY2Vzc2FyeSBzdXBwb3J0Citmb3IgdGhpcyBvcHRpb24uICBJZiB5b3VyIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3B0aW9uLCB0aGUKK2hlYWRlciBmaWxlIGFzcGVjdCBvZiBcZkJcLVwtc3lzcm9vdFxmUiBzdGlsbCB3b3JrcywgYnV0IHRoZQorbGlicmFyeSBhc3BlY3QgZG9lcyBub3QuCisuSVAgIlxmQlwtXC1ub1wtc3lzcm9vdFwtc3VmZml4XGZSIiA0CisuSVggSXRlbSAiLS1uby1zeXNyb290LXN1ZmZpeCIKK0ZvciBzb21lIHRhcmdldHMsIGEgc3VmZml4IGlzIGFkZGVkIHRvIHRoZSByb290IGRpcmVjdG9yeSBzcGVjaWZpZWQKK3dpdGggXGZCXC1cLXN5c3Jvb3RcZlIsIGRlcGVuZGluZyBvbiB0aGUgb3RoZXIgb3B0aW9ucyB1c2VkLCBzbyB0aGF0CitoZWFkZXJzIG1heSBmb3IgZXhhbXBsZSBiZSBmb3VuZCBpbgorXCZcZklcZklkaXJcZkkvXGZJc3VmZml4XGZJL3Vzci9pbmNsdWRlXGZSIGluc3RlYWQgb2YKK1wmXGZJXGZJZGlyXGZJL3Vzci9pbmNsdWRlXGZSLiAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGFkZGl0aW9uIG9mCitzdWNoIGEgc3VmZml4LgorLklQICJcZkJcLUlcLVxmUiIgNAorLklYIEl0ZW0gIi1JLSIKK1RoaXMgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBQbGVhc2UgdXNlIFxmQlwtaXF1b3RlXGZSIGluc3RlYWQgZm9yCitcJlxmQlwtSVxmUiBkaXJlY3RvcmllcyBiZWZvcmUgdGhlIFxmQlwtSVwtXGZSIGFuZCByZW1vdmUgdGhlIFxmQlwtSVwtXGZSLgorQW55IGRpcmVjdG9yaWVzIHlvdSBzcGVjaWZ5IHdpdGggXGZCXC1JXGZSIG9wdGlvbnMgYmVmb3JlIHRoZSBcZkJcLUlcLVxmUgorb3B0aW9uIGFyZSBzZWFyY2hlZCBvbmx5IGZvciB0aGUgY2FzZSBvZiBcZkIjaW5jbHVkZSAiXGZSXGZJZmlsZVxmUlxmQiJcZlI7Cit0aGV5IGFyZSBub3Qgc2VhcmNoZWQgZm9yIFxmQiNpbmNsdWRlIDxcZlJcZklmaWxlXGZSXGZCPlxmUi4KKy5TcAorSWYgYWRkaXRpb25hbCBkaXJlY3RvcmllcyBhcmUgc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSIG9wdGlvbnMgYWZ0ZXIKK3RoZSBcZkJcLUlcLVxmUiwgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIGZvciBhbGwgXGZCI2luY2x1ZGVcZlIKK2RpcmVjdGl2ZXMuICAoT3JkaW5hcmlseSBcZklhbGxcZlIgXGZCXC1JXGZSIGRpcmVjdG9yaWVzIGFyZSB1c2VkCit0aGlzIHdheS4pCisuU3AKK0luIGFkZGl0aW9uLCB0aGUgXGZCXC1JXC1cZlIgb3B0aW9uIGluaGliaXRzIHRoZSB1c2Ugb2YgdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSAod2hlcmUgdGhlIGN1cnJlbnQgaW5wdXQgZmlsZSBjYW1lIGZyb20pIGFzIHRoZSBmaXJzdCBzZWFyY2gKK2RpcmVjdG9yeSBmb3IgXGZCI2luY2x1ZGUgIlxmUlxmSWZpbGVcZlJcZkIiXGZSLiAgVGhlcmUgaXMgbm8gd2F5IHRvCitvdmVycmlkZSB0aGlzIGVmZmVjdCBvZiBcZkJcLUlcLVxmUi4gIFdpdGggXGZCXC1JLlxmUiB5b3UgY2FuIHNwZWNpZnkKK3NlYXJjaGluZyB0aGUgZGlyZWN0b3J5IHRoYXQgaXMgY3VycmVudCB3aGVuIHRoZSBjb21waWxlciBpcworaW52b2tlZC4gIFRoYXQgaXMgbm90IGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCB0aGUgcHJlcHJvY2Vzc29yIGRvZXMKK2J5IGRlZmF1bHQsIGJ1dCBpdCBpcyBvZnRlbiBzYXRpc2ZhY3RvcnkuCisuU3AKK1wmXGZCXC1JXC1cZlIgZG9lcyBub3QgaW5oaWJpdCB0aGUgdXNlIG9mIHRoZSBzdGFuZGFyZCBzeXN0ZW0gZGlyZWN0b3JpZXMKK2ZvciBoZWFkZXIgZmlsZXMuICBUaHVzLCBcZkJcLUlcLVxmUiBhbmQgXGZCXC1ub3N0ZGluY1xmUiBhcmUKK2luZGVwZW5kZW50LgorLlNTICJTcGVjaWZ5aW5nIFRhcmdldCBNYWNoaW5lIGFuZCBDb21waWxlciBWZXJzaW9uIgorLklYIFN1YnNlY3Rpb24gIlNwZWNpZnlpbmcgVGFyZ2V0IE1hY2hpbmUgYW5kIENvbXBpbGVyIFZlcnNpb24iCitUaGUgdXN1YWwgd2F5IHRvIHJ1biBccy0xR0NDXHMwIGlzIHRvIHJ1biB0aGUgZXhlY3V0YWJsZSBjYWxsZWQgXGZCZ2NjXGZSLCBvcgorXCZcZkltYWNoaW5lXGZSXGZCXC1nY2NcZlIgd2hlbiBjcm9zcy1jb21waWxpbmcsIG9yCitcJlxmSW1hY2hpbmVcZlJcZkJcLWdjY1wtXGZSXGZJdmVyc2lvblxmUiB0byBydW4gYSB2ZXJzaW9uIG90aGVyIHRoYW4gdGhlCitvbmUgdGhhdCB3YXMgaW5zdGFsbGVkIGxhc3QuCisuU1MgIkhhcmR3YXJlIE1vZGVscyBhbmQgQ29uZmlndXJhdGlvbnMiCisuSVggU3Vic2VjdGlvbiAiSGFyZHdhcmUgTW9kZWxzIGFuZCBDb25maWd1cmF0aW9ucyIKK0VhY2ggdGFyZ2V0IG1hY2hpbmUgdHlwZXMgY2FuIGhhdmUgaXRzIG93bgorc3BlY2lhbCBvcHRpb25zLCBzdGFydGluZyB3aXRoIFxmQlwtbVxmUiwgdG8gY2hvb3NlIGFtb25nIHZhcmlvdXMKK2hhcmR3YXJlIG1vZGVscyBvciBjb25maWd1cmF0aW9uc1wtXC1cLWZvciBleGFtcGxlLCA2ODAxMCB2cyA2ODAyMCwKK2Zsb2F0aW5nIGNvcHJvY2Vzc29yIG9yIG5vbmUuICBBIHNpbmdsZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUKK2NvbXBpbGVyIGNhbiBjb21waWxlIGZvciBhbnkgbW9kZWwgb3IgY29uZmlndXJhdGlvbiwgYWNjb3JkaW5nIHRvIHRoZQorb3B0aW9ucyBzcGVjaWZpZWQuCisuUFAKK1NvbWUgY29uZmlndXJhdGlvbnMgb2YgdGhlIGNvbXBpbGVyIGFsc28gc3VwcG9ydCBhZGRpdGlvbmFsIHNwZWNpYWwKK29wdGlvbnMsIHVzdWFsbHkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBjb21waWxlcnMgb24gdGhlIHNhbWUKK3BsYXRmb3JtLgorLlBQCitcZklBQXJjaDY0IE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJBQXJjaDY0IE9wdGlvbnMiCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIEFBcmNoNjQgaW1wbGVtZW50YXRpb25zOgorLklQICJcZkJcLW1iaWdcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tYmlnLWVuZGlhbiIKK0dlbmVyYXRlIGJpZy1lbmRpYW4gY29kZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiBccy0xR0NDXHMwIGlzIGNvbmZpZ3VyZWQgZm9yIGFuCitcJlxmQmFhcmNoNjRfYmVcLSpcLSpcZlIgdGFyZ2V0LgorLklQICJcZkJcLW1nZW5lcmFsXC1yZWdzXC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLW1nZW5lcmFsLXJlZ3Mtb25seSIKK0dlbmVyYXRlIGNvZGUgd2hpY2ggdXNlcyBvbmx5IHRoZSBnZW5lcmFsIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tbGl0dGxlXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWxpdHRsZS1lbmRpYW4iCitHZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIGNvZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gXHMtMUdDQ1xzMCBpcyBjb25maWd1cmVkIGZvciBhbgorXCZcZkJhYXJjaDY0XC0qXC0qXGZSIGJ1dCBub3QgYW4gXGZCYWFyY2g2NF9iZVwtKlwtKlxmUiB0YXJnZXQuCisuSVAgIlxmQlwtbWNtb2RlbD10aW55XGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9dGlueSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSB0aW55IGNvZGUgbW9kZWwuICBUaGUgcHJvZ3JhbSBhbmQgaXRzIHN0YXRpY2FsbHkgZGVmaW5lZAorc3ltYm9scyBtdXN0IGJlIHdpdGhpbiAxR0Igb2YgZWFjaCBvdGhlci4gIFBvaW50ZXJzIGFyZSA2NCBiaXRzLiAgUHJvZ3JhbXMgY2FuCitiZSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IGxpbmtlZC4gIFRoaXMgbW9kZWwgaXMgbm90IGZ1bGx5IGltcGxlbWVudGVkIGFuZAorbW9zdGx5IHRyZWF0ZWQgYXMgXGZCc21hbGxcZlIuCisuSVAgIlxmQlwtbWNtb2RlbD1zbWFsbFxmUiIgNAorLklYIEl0ZW0gIi1tY21vZGVsPXNtYWxsIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIHNtYWxsIGNvZGUgbW9kZWwuICBUaGUgcHJvZ3JhbSBhbmQgaXRzIHN0YXRpY2FsbHkgZGVmaW5lZAorc3ltYm9scyBtdXN0IGJlIHdpdGhpbiA0R0Igb2YgZWFjaCBvdGhlci4gIFBvaW50ZXJzIGFyZSA2NCBiaXRzLiAgUHJvZ3JhbXMgY2FuCitiZSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IGxpbmtlZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgY29kZSBtb2RlbC4KKy5JUCAiXGZCXC1tY21vZGVsPWxhcmdlXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9bGFyZ2UiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgbGFyZ2UgY29kZSBtb2RlbC4gIFRoaXMgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQKK2FkZHJlc3NlcyBhbmQgc2l6ZXMgb2Ygc2VjdGlvbnMuICBQb2ludGVycyBhcmUgNjQgYml0cy4gIFByb2dyYW1zIGNhbiBiZQorc3RhdGljYWxseSBsaW5rZWQgb25seS4KKy5JUCAiXGZCXC1tc3RyaWN0XC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tc3RyaWN0LWFsaWduIgorRG8gbm90IGFzc3VtZSB0aGF0IHVuYWxpZ25lZCBtZW1vcnkgcmVmZXJlbmNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIHN5c3RlbS4KKy5JUCAiXGZCXC1tb21pdFwtbGVhZlwtZnJhbWVcLXBvaW50ZXJcZlIiIDQKKy5JWCBJdGVtICItbW9taXQtbGVhZi1mcmFtZS1wb2ludGVyIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyXGZSIiA0CisuSVggSXRlbSAiLW1uby1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciIKKy5QRAorT21pdCBvciBrZWVwIHRoZSBmcmFtZSBwb2ludGVyIGluIGxlYWYgZnVuY3Rpb25zLiAgVGhlIGZvcm1lciBiZWhhdmlvdXIgaXMgdGhlCitkZWZhdWx0LgorLklQICJcZkJcLW10bHNcLWRpYWxlY3Q9ZGVzY1xmUiIgNAorLklYIEl0ZW0gIi1tdGxzLWRpYWxlY3Q9ZGVzYyIKK1VzZSBccy0xVExTXHMwIGRlc2NyaXB0b3JzIGFzIHRoZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBtZWNoYW5pc20gZm9yIGR5bmFtaWMgYWNjZXNzZXMKK29mIFxzLTFUTFNcczAgdmFyaWFibGVzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tdGxzXC1kaWFsZWN0PXRyYWRpdGlvbmFsXGZSIiA0CisuSVggSXRlbSAiLW10bHMtZGlhbGVjdD10cmFkaXRpb25hbCIKK1VzZSB0cmFkaXRpb25hbCBccy0xVExTXHMwIGFzIHRoZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBtZWNoYW5pc20gZm9yIGR5bmFtaWMgYWNjZXNzZXMKK29mIFxzLTFUTFNcczAgdmFyaWFibGVzLgorLklQICJcZkJcLW1hcmNoPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWFyY2g9bmFtZSIKK1NwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIG9wdGlvbmFsbHkgc3VmZml4ZWQgYnkgb25lIG9yCittb3JlIGZlYXR1cmUgbW9kaWZpZXJzLiAgVGhpcyBvcHRpb24gaGFzIHRoZSBmb3JtCitcJlxmQlwtbWFyY2g9XGZSXGZJYXJjaFxmUntcZkIrXGZSW1xmQm5vXGZSXVxmSWZlYXR1cmVcZlJ9Kiwgd2hlcmUgdGhlCitvbmx5IHZhbHVlIGZvciBcZklhcmNoXGZSIGlzIFxmQmFybXY4XC1hXGZSLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IKK1wmXGZJZmVhdHVyZVxmUiBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgc3ViLXNlY3Rpb24gYmVsb3cuCisuU3AKK1doZXJlIGNvbmZsaWN0aW5nIGZlYXR1cmUgbW9kaWZpZXJzIGFyZSBzcGVjaWZpZWQsIHRoZSByaWdodC1tb3N0IGZlYXR1cmUgaXMKK3VzZWQuCisuU3AKK1wmXHMtMUdDQ1xzMCB1c2VzIHRoaXMgbmFtZSB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9mIGluc3RydWN0aW9ucyBpdCBjYW4gZW1pdCB3aGVuCitnZW5lcmF0aW5nIGFzc2VtYmx5IGNvZGUuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG9yCitpbnN0ZWFkIG9mIHRoZSBcZkJcLW1jcHU9XGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1uYW1lIgorU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHByb2Nlc3Nvciwgb3B0aW9uYWxseSBzdWZmaXhlZCBieSBvbmUgb3IgbW9yZQorZmVhdHVyZSBtb2RpZmllcnMuICBUaGlzIG9wdGlvbiBoYXMgdGhlIGZvcm0KK1wmXGZCXC1tY3B1PVxmUlxmSWNwdVxmUntcZkIrXGZSW1xmQm5vXGZSXVxmSWZlYXR1cmVcZlJ9Kiwgd2hlcmUgdGhlCitwb3NzaWJsZSB2YWx1ZXMgZm9yIFxmSWNwdVxmUiBhcmUgXGZCZ2VuZXJpY1xmUiwgXGZCbGFyZ2VcZlIuICBUaGUKK3Bvc3NpYmxlIHZhbHVlcyBmb3IgXGZJZmVhdHVyZVxmUiBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgc3ViLXNlY3Rpb24KK2JlbG93LgorLlNwCitXaGVyZSBjb25mbGljdGluZyBmZWF0dXJlIG1vZGlmaWVycyBhcmUgc3BlY2lmaWVkLCB0aGUgcmlnaHQtbW9zdCBmZWF0dXJlIGlzCit1c2VkLgorLlNwCitcJlxzLTFHQ0NcczAgdXNlcyB0aGlzIG5hbWUgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBpbnN0cnVjdGlvbnMgaXQgY2FuIGVtaXQgd2hlbgorZ2VuZXJhdGluZyBhc3NlbWJseSBjb2RlLgorLklQICJcZkJcLW10dW5lPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9bmFtZSIKK1NwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIHByb2Nlc3NvciB0byB0dW5lIHRoZSBwZXJmb3JtYW5jZSBmb3IuICBUaGUgY29kZSB3aWxsCitiZSB0dW5lZCBhcyBpZiB0aGUgdGFyZ2V0IHByb2Nlc3NvciB3ZXJlIG9mIHRoZSB0eXBlIHNwZWNpZmllZCBpbiB0aGlzIG9wdGlvbiwKK2J1dCBzdGlsbCB1c2luZyBpbnN0cnVjdGlvbnMgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgcHJvY2Vzc29yIHNwZWNpZmllZAorYnkgYSBcZkJcLW1jcHU9XGZSIG9wdGlvbi4gIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzdWZmaXhlZCBieSBmZWF0dXJlCittb2RpZmllcnMuCisuUFAKK1xmQlwtbWFyY2hcZlIgYW5kIFxmQlwtbWNwdVxmUiBmZWF0dXJlIG1vZGlmaWVycworLklYIFN1YnNlY3Rpb24gIi1tYXJjaCBhbmQgLW1jcHUgZmVhdHVyZSBtb2RpZmllcnMiCisuUFAKK0ZlYXR1cmUgbW9kaWZpZXJzIHVzZWQgd2l0aCBcZkJcLW1hcmNoXGZSIGFuZCBcZkJcLW1jcHVcZlIgY2FuIGJlIG9uZQordGhlIGZvbGxvd2luZzoKKy5JUCAiXGZCY3JjXGZSIiA0CisuSVggSXRlbSAiY3JjIgorRW5hYmxlIFxzLTFDUkNcczAgZXh0ZW5zaW9uLgorLklQICJcZkJjcnlwdG9cZlIiIDQKKy5JWCBJdGVtICJjcnlwdG8iCitFbmFibGUgQ3J5cHRvIGV4dGVuc2lvbi4gIFRoaXMgaW1wbGllcyBBZHZhbmNlZCBccy0xU0lNRFxzMCBpcyBlbmFibGVkLgorLklQICJcZkJmcFxmUiIgNAorLklYIEl0ZW0gImZwIgorRW5hYmxlIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4KKy5JUCAiXGZCc2ltZFxmUiIgNAorLklYIEl0ZW0gInNpbWQiCitFbmFibGUgQWR2YW5jZWQgXHMtMVNJTURcczAgaW5zdHJ1Y3Rpb25zLiAgVGhpcyBpbXBsaWVzIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucworYXJlIGVuYWJsZWQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBhbGwgY3VycmVudCBwb3NzaWJsZSB2YWx1ZXMgZm9yIG9wdGlvbnMKK1wmXGZCXC1tYXJjaFxmUiBhbmQgXGZCXC1tY3B1PVxmUi4KKy5QUAorXGZJQWRhcHRldmEgRXBpcGhhbnkgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkFkYXB0ZXZhIEVwaXBoYW55IE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBBZGFwdGV2YSBFcGlwaGFueToKKy5JUCAiXGZCXC1taGFsZlwtcmVnXC1maWxlXGZSIiA0CisuSVggSXRlbSAiLW1oYWxmLXJlZy1maWxlIgorRG9uJ3QgYWxsb2NhdGUgYW55IHJlZ2lzdGVyIGluIHRoZSByYW5nZSBcZihDV1wqKENgcjMyXCooQydcZlIuLi5cZihDV1wqKENgcjYzXCooQydcZlIuCitUaGF0IGFsbG93cyBjb2RlIHRvIHJ1biBvbiBoYXJkd2FyZSB2YXJpYW50cyB0aGF0IGxhY2sgdGhlc2UgcmVnaXN0ZXJzLgorLklQICJcZkJcLW1wcmVmZXJcLXNob3J0XC1pbnNuXC1yZWdzXGZSIiA0CisuSVggSXRlbSAiLW1wcmVmZXItc2hvcnQtaW5zbi1yZWdzIgorUHJlZmVycmVudGlhbGx5IGFsbG9jYXRlIHJlZ2lzdGVycyB0aGF0IGFsbG93IHNob3J0IGluc3RydWN0aW9uIGdlbmVyYXRpb24uCitUaGlzIGNhbiByZXN1bHQgaW4gaW5jcmVhc2VkIGluc3RydWN0aW9uIGNvdW50LCBzbyB0aGlzIG1heSBlaXRoZXIgcmVkdWNlIG9yCitpbmNyZWFzZSBvdmVyYWxsIGNvZGUgc2l6ZS4KKy5JUCAiXGZCXC1tYnJhbmNoXC1jb3N0PVxmUlxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1tYnJhbmNoLWNvc3Q9bnVtIgorU2V0IHRoZSBjb3N0IG9mIGJyYW5jaGVzIHRvIHJvdWdobHkgXGZJbnVtXGZSIFwqKEwic2ltcGxlXCooUiIgaW5zdHJ1Y3Rpb25zLgorVGhpcyBjb3N0IGlzIG9ubHkgYSBoZXVyaXN0aWMgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIHByb2R1Y2UKK2NvbnNpc3RlbnQgcmVzdWx0cyBhY3Jvc3MgcmVsZWFzZXMuCisuSVAgIlxmQlwtbWNtb3ZlXGZSIiA0CisuSVggSXRlbSAiLW1jbW92ZSIKK0VuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBjb25kaXRpb25hbCBtb3Zlcy4KKy5JUCAiXGZCXC1tbm9wcz1cZlJcZkludW1cZlIiIDQKKy5JWCBJdGVtICItbW5vcHM9bnVtIgorRW1pdCBcZkludW1cZlIgTk9QcyBiZWZvcmUgZXZlcnkgb3RoZXIgZ2VuZXJhdGVkIGluc3RydWN0aW9uLgorLklQICJcZkJcLW1ub1wtc29mdFwtY21wc2ZcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNvZnQtY21wc2YiCitGb3Igc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucywgZW1pdCBhbiBcZihDV1wqKENgZnN1YlwqKEMnXGZSIGluc3RydWN0aW9uCithbmQgdGVzdCB0aGUgZmxhZ3MuICBUaGlzIGlzIGZhc3RlciB0aGFuIGEgc29mdHdhcmUgY29tcGFyaXNvbiwgYnV0IGNhbgorZ2V0IGluY29ycmVjdCByZXN1bHRzIGluIHRoZSBwcmVzZW5jZSBvZiBOYU5zLCBvciB3aGVuIHR3byBkaWZmZXJlbnQgc21hbGwKK251bWJlcnMgYXJlIGNvbXBhcmVkIHN1Y2ggdGhhdCB0aGVpciBkaWZmZXJlbmNlIGlzIGNhbGN1bGF0ZWQgYXMgemVyby4KK1RoZSBkZWZhdWx0IGlzIFxmQlwtbXNvZnRcLWNtcHNmXGZSLCB3aGljaCB1c2VzIHNsb3dlciwgYnV0IElFRUUtY29tcGxpYW50LAorc29mdHdhcmUgY29tcGFyaXNvbnMuCisuSVAgIlxmQlwtbXN0YWNrXC1vZmZzZXQ9XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLW1zdGFjay1vZmZzZXQ9bnVtIgorU2V0IHRoZSBvZmZzZXQgYmV0d2VlbiB0aGUgdG9wIG9mIHRoZSBzdGFjayBhbmQgdGhlIHN0YWNrIHBvaW50ZXIuCitFLmcuLCBhIHZhbHVlIG9mIDggbWVhbnMgdGhhdCB0aGUgZWlnaHQgYnl0ZXMgaW4gdGhlIHJhbmdlIFxmKENXXCooQ2BzcCswLi4uc3ArN1wqKEMnXGZSCitjYW4gYmUgdXNlZCBieSBsZWFmIGZ1bmN0aW9ucyB3aXRob3V0IHN0YWNrIGFsbG9jYXRpb24uCitWYWx1ZXMgb3RoZXIgdGhhbiBcZkI4XGZSIG9yIFxmQjE2XGZSIGFyZSB1bnRlc3RlZCBhbmQgdW5saWtlbHkgdG8gd29yay4KK05vdGUgYWxzbyB0aGF0IHRoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIFxzLTFBQklcczA7IGNvbXBpbGluZyBhIHByb2dyYW0gd2l0aCBhCitkaWZmZXJlbnQgc3RhY2sgb2Zmc2V0IHRoYW4gdGhlIGxpYnJhcmllcyBoYXZlIGJlZW4gY29tcGlsZWQgd2l0aAorZ2VuZXJhbGx5IGRvZXMgbm90IHdvcmsuCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGV2YWx1YXRlIGlmIGEgZGlmZmVyZW50IHN0YWNrCitvZmZzZXQgd291bGQgZ2l2ZSB5b3UgYmV0dGVyIGNvZGUsIGJ1dCB0byBhY3R1YWxseSB1c2UgYSBkaWZmZXJlbnQgc3RhY2sKK29mZnNldCB0byBidWlsZCB3b3JraW5nIHByb2dyYW1zLCBpdCBpcyByZWNvbW1lbmRlZCB0byBjb25maWd1cmUgdGhlCit0b29sY2hhaW4gd2l0aCB0aGUgYXBwcm9wcmlhdGUgXGZCXC1cLXdpdGhcLXN0YWNrXC1vZmZzZXQ9XGZSXGZJbnVtXGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1tbm9cLXJvdW5kXC1uZWFyZXN0XGZSIiA0CisuSVggSXRlbSAiLW1uby1yb3VuZC1uZWFyZXN0IgorTWFrZSB0aGUgc2NoZWR1bGVyIGFzc3VtZSB0aGF0IHRoZSByb3VuZGluZyBtb2RlIGhhcyBiZWVuIHNldCB0bwordHJ1bmNhdGluZy4gIFRoZSBkZWZhdWx0IGlzIFxmQlwtbXJvdW5kXC1uZWFyZXN0XGZSLgorLklQICJcZkJcLW1sb25nXC1jYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tbG9uZy1jYWxscyIKK0lmIG5vdCBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IGFuIGF0dHJpYnV0ZSwgYXNzdW1lIGFsbCBjYWxscyBtaWdodCBiZSBiZXlvbmQKK3RoZSBvZmZzZXQgcmFuZ2Ugb2YgdGhlIFxmKENXXCooQ2BiXCooQydcZlIgLyBcZihDV1wqKENgYmxcKihDJ1xmUiBpbnN0cnVjdGlvbnMsIGFuZCB0aGVyZWZvcmUgbG9hZCB0aGUKK2Z1bmN0aW9uIGFkZHJlc3MgaW50byBhIHJlZ2lzdGVyIGJlZm9yZSBwZXJmb3JtaW5nIGEgKG90aGVyd2lzZSBkaXJlY3QpIGNhbGwuCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1zaG9ydFwtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbXNob3J0LWNhbGxzIgorSWYgbm90IG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgYW4gYXR0cmlidXRlLCBhc3N1bWUgYWxsIGRpcmVjdCBjYWxscyBhcmUKK2luIHRoZSByYW5nZSBvZiB0aGUgXGYoQ1dcKihDYGJcKihDJ1xmUiAvIFxmKENXXCooQ2BibFwqKEMnXGZSIGluc3RydWN0aW9ucywgc28gdXNlIHRoZXNlIGluc3RydWN0aW9ucworZm9yIGRpcmVjdCBjYWxscy4gIFRoZSBkZWZhdWx0IGlzIFxmQlwtbWxvbmdcLWNhbGxzXGZSLgorLklQICJcZkJcLW1zbWFsbDE2XGZSIiA0CisuSVggSXRlbSAiLW1zbWFsbDE2IgorQXNzdW1lIGFkZHJlc3NlcyBjYW4gYmUgbG9hZGVkIGFzIDE2XC1iaXQgdW5zaWduZWQgdmFsdWVzLiAgVGhpcyBkb2VzIG5vdAorYXBwbHkgdG8gZnVuY3Rpb24gYWRkcmVzc2VzIGZvciB3aGljaCBcZkJcLW1sb25nXC1jYWxsc1xmUiBzZW1hbnRpY3MKK2FyZSBpbiBlZmZlY3QuCisuSVAgIlxmQlwtbWZwXC1tb2RlPVxmUlxmSW1vZGVcZlIiIDQKKy5JWCBJdGVtICItbWZwLW1vZGU9bW9kZSIKK1NldCB0aGUgcHJldmFpbGluZyBtb2RlIG9mIHRoZSBmbG9hdGluZy1wb2ludCB1bml0LgorVGhpcyBkZXRlcm1pbmVzIHRoZSBmbG9hdGluZy1wb2ludCBtb2RlIHRoYXQgaXMgcHJvdmlkZWQgYW5kIGV4cGVjdGVkCithdCBmdW5jdGlvbiBjYWxsIGFuZCByZXR1cm4gdGltZS4gIE1ha2luZyB0aGlzIG1vZGUgbWF0Y2ggdGhlIG1vZGUgeW91CitwcmVkb21pbmFudGx5IG5lZWQgYXQgZnVuY3Rpb24gc3RhcnQgY2FuIG1ha2UgeW91ciBwcm9ncmFtcyBzbWFsbGVyIGFuZAorZmFzdGVyIGJ5IGF2b2lkaW5nIHVubmVjZXNzYXJ5IG1vZGUgc3dpdGNoZXMuCisuU3AKK1wmXGZJbW9kZVxmUiBjYW4gYmUgc2V0IHRvIG9uZSB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5SUyA0CisuSVAgIlxmQmNhbGxlclxmUiIgNAorLklYIEl0ZW0gImNhbGxlciIKK0FueSBtb2RlIGF0IGZ1bmN0aW9uIGVudHJ5IGlzIHZhbGlkLCBhbmQgcmV0YWluZWQgb3IgcmVzdG9yZWQgd2hlbgordGhlIGZ1bmN0aW9uIHJldHVybnMsIGFuZCB3aGVuIGl0IGNhbGxzIG90aGVyIGZ1bmN0aW9ucy4KK1RoaXMgbW9kZSBpcyB1c2VmdWwgZm9yIGNvbXBpbGluZyBsaWJyYXJpZXMgb3Igb3RoZXIgY29tcGlsYXRpb24gdW5pdHMKK3lvdSBtaWdodCB3YW50IHRvIGluY29ycG9yYXRlIGludG8gZGlmZmVyZW50IHByb2dyYW1zIHdpdGggZGlmZmVyZW50CitwcmV2YWlsaW5nIFxzLTFGUFVcczAgbW9kZXMsIGFuZCB0aGUgY29udmVuaWVuY2Ugb2YgYmVpbmcgYWJsZSB0byB1c2UgYSBzaW5nbGUKK29iamVjdCBmaWxlIG91dHdlaWdocyB0aGUgc2l6ZSBhbmQgc3BlZWQgb3ZlcmhlYWQgZm9yIGFueSBleHRyYQorbW9kZSBzd2l0Y2hpbmcgdGhhdCBtaWdodCBiZSBuZWVkZWQsIGNvbXBhcmVkIHdpdGggd2hhdCB3b3VsZCBiZSBuZWVkZWQKK3dpdGggYSBtb3JlIHNwZWNpZmljIGNob2ljZSBvZiBwcmV2YWlsaW5nIFxzLTFGUFVcczAgbW9kZS4KKy5JUCAiXGZCdHJ1bmNhdGVcZlIiIDQKKy5JWCBJdGVtICJ0cnVuY2F0ZSIKK1RoaXMgaXMgdGhlIG1vZGUgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb25zIHdpdGgKK3RydW5jYXRpbmcgKGkuZS4gcm91bmQgdG93YXJkcyB6ZXJvKSByb3VuZGluZyBtb2RlLiAgVGhhdCBpbmNsdWRlcworY29udmVyc2lvbiBmcm9tIGZsb2F0aW5nIHBvaW50IHRvIGludGVnZXIuCisuSVAgIlxmQnJvdW5kLW5lYXJlc3RcZlIiIDQKKy5JWCBJdGVtICJyb3VuZC1uZWFyZXN0IgorVGhpcyBpcyB0aGUgbW9kZSB1c2VkIGZvciBmbG9hdGluZy1wb2ludCBjYWxjdWxhdGlvbnMgd2l0aAorcm91bmQtdG8tbmVhcmVzdC1vci1ldmVuIHJvdW5kaW5nIG1vZGUuCisuSVAgIlxmQmludFxmUiIgNAorLklYIEl0ZW0gImludCIKK1RoaXMgaXMgdGhlIG1vZGUgdXNlZCB0byBwZXJmb3JtIGludGVnZXIgY2FsY3VsYXRpb25zIGluIHRoZSBccy0xRlBVXHMwLCBlLmcuCitpbnRlZ2VyIG11bHRpcGx5LCBvciBpbnRlZ2VyIG11bHRpcGx5LWFuZC1hY2N1bXVsYXRlLgorLlJFCisuUlMgNAorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLW1mcFwtbW9kZT1jYWxsZXJcZlIKKy5SRQorLklQICJcZkJcLW1ub3NwbGl0XC1sb2hpXGZSIiA0CisuSVggSXRlbSAiLW1ub3NwbGl0LWxvaGkiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcG9zdGluY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcG9zdGluYyIKKy5JUCAiXGZCXC1tbm9cLXBvc3Rtb2RpZnlcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBvc3Rtb2RpZnkiCisuUEQKK0NvZGUgZ2VuZXJhdGlvbiB0d2Vha3MgdGhhdCBkaXNhYmxlLCByZXNwZWN0aXZlbHksIHNwbGl0dGluZyBvZiAzMlwtYml0Citsb2FkcywgZ2VuZXJhdGlvbiBvZiBwb3N0LWluY3JlbWVudCBhZGRyZXNzZXMsIGFuZCBnZW5lcmF0aW9uIG9mCitwb3N0LW1vZGlmeSBhZGRyZXNzZXMuICBUaGUgZGVmYXVsdHMgYXJlIFxmQm1zcGxpdC1sb2hpXGZSLAorXCZcZkJcLW1wb3N0XC1pbmNcZlIsIGFuZCBcZkJcLW1wb3N0XC1tb2RpZnlcZlIuCisuSVAgIlxmQlwtbW5vdmVjdFwtZG91YmxlXGZSIiA0CisuSVggSXRlbSAiLW1ub3ZlY3QtZG91YmxlIgorQ2hhbmdlIHRoZSBwcmVmZXJyZWQgXHMtMVNJTURcczAgbW9kZSB0byBTSW1vZGUuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLW12ZWN0XC1kb3VibGVcZlIsIHdoaWNoIHVzZXMgREltb2RlIGFzIHByZWZlcnJlZCBccy0xU0lNRFxzMCBtb2RlLgorLklQICJcZkJcLW1heFwtdmVjdFwtYWxpZ249XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLW1heC12ZWN0LWFsaWduPW51bSIKK1RoZSBtYXhpbXVtIGFsaWdubWVudCBmb3IgXHMtMVNJTURcczAgdmVjdG9yIG1vZGUgdHlwZXMuCitcJlxmSW51bVxmUiBtYXkgYmUgNCBvciA4LiAgVGhlIGRlZmF1bHQgaXMgOC4KK05vdGUgdGhhdCB0aGlzIGlzIGFuIFxzLTFBQklcczAgY2hhbmdlLCBldmVuIHRob3VnaCBtYW55IGxpYnJhcnkgZnVuY3Rpb24KK2ludGVyZmFjZXMgYXJlIHVuYWZmZWN0ZWQgaWYgdGhleSBkb24ndCB1c2UgXHMtMVNJTURcczAgdmVjdG9yIG1vZGVzCitpbiBwbGFjZXMgdGhhdCBhZmZlY3Qgc2l6ZSBhbmQvb3IgYWxpZ25tZW50IG9mIHJlbGV2YW50IHR5cGVzLgorLklQICJcZkJcLW1zcGxpdFwtdmVjbW92ZVwtZWFybHlcZlIiIDQKKy5JWCBJdGVtICItbXNwbGl0LXZlY21vdmUtZWFybHkiCitTcGxpdCB2ZWN0b3IgbW92ZXMgaW50byBzaW5nbGUgd29yZCBtb3ZlcyBiZWZvcmUgcmVsb2FkLiAgSW4gdGhlb3J5IHRoaXMKK2NhbiBnaXZlIGJldHRlciByZWdpc3RlciBhbGxvY2F0aW9uLCBidXQgc28gZmFyIHRoZSByZXZlcnNlIHNlZW1zIHRvIGJlCitnZW5lcmFsbHkgdGhlIGNhc2UuCisuSVAgIlxmQlwtbTFyZWdcLVxmUlxmSXJlZ1xmUiIgNAorLklYIEl0ZW0gIi1tMXJlZy1yZWciCitTcGVjaWZ5IGEgcmVnaXN0ZXIgdG8gaG9sZCB0aGUgY29uc3RhbnQgXC0xLCB3aGljaCBtYWtlcyBsb2FkaW5nIHNtYWxsIG5lZ2F0aXZlCitjb25zdGFudHMgYW5kIGNlcnRhaW4gYml0bWFza3MgZmFzdGVyLgorQWxsb3dhYmxlIHZhbHVlcyBmb3IgXGZJcmVnXGZSIGFyZSBcZkJyNDNcZlIgYW5kIFxmQnI2M1xmUiwKK3doaWNoIHNwZWNpZnkgdXNlIG9mIHRoYXQgcmVnaXN0ZXIgYXMgYSBmaXhlZCByZWdpc3RlciwKK2FuZCBcZkJub25lXGZSLCB3aGljaCBtZWFucyB0aGF0IG5vIHJlZ2lzdGVyIGlzIHVzZWQgZm9yIHRoaXMKK3B1cnBvc2UuICBUaGUgZGVmYXVsdCBpcyBcZkJcLW0xcmVnXC1ub25lXGZSLgorLlBQCitcZklccy0xQVJNXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJBUk0gT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIEFkdmFuY2VkIFxzLTFSSVNDXHMwIE1hY2hpbmVzIChccy0xQVJNXHMwKQorYXJjaGl0ZWN0dXJlczoKKy5JUCAiXGZCXC1tYWJpPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1uYW1lIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBccy0xQUJJXHMwLiAgUGVybWlzc2libGUgdmFsdWVzIGFyZTogXGZCYXBjcy1nbnVcZlIsCitcJlxmQmF0cGNzXGZSLCBcZkJhYXBjc1xmUiwgXGZCYWFwY3MtbGludXhcZlIgYW5kIFxmQml3bW14dFxmUi4KKy5JUCAiXGZCXC1tYXBjc1wtZnJhbWVcZlIiIDQKKy5JWCBJdGVtICItbWFwY3MtZnJhbWUiCitHZW5lcmF0ZSBhIHN0YWNrIGZyYW1lIHRoYXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFxzLTFBUk1cczAgUHJvY2VkdXJlIENhbGwKK1N0YW5kYXJkIGZvciBhbGwgZnVuY3Rpb25zLCBldmVuIGlmIHRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IKK2NvcnJlY3QgZXhlY3V0aW9uIG9mIHRoZSBjb2RlLiAgU3BlY2lmeWluZyBcZkJcLWZvbWl0XC1mcmFtZVwtcG9pbnRlclxmUgord2l0aCB0aGlzIG9wdGlvbiBjYXVzZXMgdGhlIHN0YWNrIGZyYW1lcyBub3QgdG8gYmUgZ2VuZXJhdGVkIGZvcgorbGVhZiBmdW5jdGlvbnMuICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1ub1wtYXBjc1wtZnJhbWVcZlIuCisuSVAgIlxmQlwtbWFwY3NcZlIiIDQKKy5JWCBJdGVtICItbWFwY3MiCitUaGlzIGlzIGEgc3lub255bSBmb3IgXGZCXC1tYXBjc1wtZnJhbWVcZlIuCisuSVAgIlxmQlwtbXRodW1iXC1pbnRlcndvcmtcZlIiIDQKKy5JWCBJdGVtICItbXRodW1iLWludGVyd29yayIKK0dlbmVyYXRlIGNvZGUgdGhhdCBzdXBwb3J0cyBjYWxsaW5nIGJldHdlZW4gdGhlIFxzLTFBUk1cczAgYW5kIFRodW1iCitpbnN0cnVjdGlvbiBzZXRzLiAgV2l0aG91dCB0aGlzIG9wdGlvbiwgb24gcHJlXC12NSBhcmNoaXRlY3R1cmVzLCB0aGUKK3R3byBpbnN0cnVjdGlvbiBzZXRzIGNhbm5vdCBiZSByZWxpYWJseSB1c2VkIGluc2lkZSBvbmUgcHJvZ3JhbS4gIFRoZQorZGVmYXVsdCBpcyBcZkJcLW1ub1wtdGh1bWJcLWludGVyd29ya1xmUiwgc2luY2Ugc2xpZ2h0bHkgbGFyZ2VyIGNvZGUKK2lzIGdlbmVyYXRlZCB3aGVuIFxmQlwtbXRodW1iXC1pbnRlcndvcmtcZlIgaXMgc3BlY2lmaWVkLiAgSW4gXHMtMUFBUENTXHMwCitjb25maWd1cmF0aW9ucyB0aGlzIG9wdGlvbiBpcyBtZWFuaW5nbGVzcy4KKy5JUCAiXGZCXC1tbm9cLXNjaGVkXC1wcm9sb2dcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLXByb2xvZyIKK1ByZXZlbnQgdGhlIHJlb3JkZXJpbmcgb2YgaW5zdHJ1Y3Rpb25zIGluIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSwgb3IgdGhlCittZXJnaW5nIG9mIHRob3NlIGluc3RydWN0aW9uIHdpdGggdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgZnVuY3Rpb24ncworYm9keS4gIFRoaXMgbWVhbnMgdGhhdCBhbGwgZnVuY3Rpb25zIHN0YXJ0IHdpdGggYSByZWNvZ25pemFibGUgc2V0CitvZiBpbnN0cnVjdGlvbnMgKG9yIGluIGZhY3Qgb25lIG9mIGEgY2hvaWNlIGZyb20gYSBzbWFsbCBzZXQgb2YKK2RpZmZlcmVudCBmdW5jdGlvbiBwcm9sb2d1ZXMpLCBhbmQgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0bworbG9jYXRlIHRoZSBzdGFydCBvZiBmdW5jdGlvbnMgaW5zaWRlIGFuIGV4ZWN1dGFibGUgcGllY2Ugb2YgY29kZS4gIFRoZQorZGVmYXVsdCBpcyBcZkJcLW1zY2hlZFwtcHJvbG9nXGZSLgorLklQICJcZkJcLW1mbG9hdFwtYWJpPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWZsb2F0LWFiaT1uYW1lIgorU3BlY2lmaWVzIHdoaWNoIGZsb2F0aW5nLXBvaW50IFxzLTFBQklcczAgdG8gdXNlLiAgUGVybWlzc2libGUgdmFsdWVzCithcmU6IFxmQnNvZnRcZlIsIFxmQnNvZnRmcFxmUiBhbmQgXGZCaGFyZFxmUi4KKy5TcAorU3BlY2lmeWluZyBcZkJzb2Z0XGZSIGNhdXNlcyBccy0xR0NDXHMwIHRvIGdlbmVyYXRlIG91dHB1dCBjb250YWluaW5nCitsaWJyYXJ5IGNhbGxzIGZvciBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorXCZcZkJzb2Z0ZnBcZlIgYWxsb3dzIHRoZSBnZW5lcmF0aW9uIG9mIGNvZGUgdXNpbmcgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQKK2luc3RydWN0aW9ucywgYnV0IHN0aWxsIHVzZXMgdGhlIHNvZnQtZmxvYXQgY2FsbGluZyBjb252ZW50aW9ucy4KK1wmXGZCaGFyZFxmUiBhbGxvd3MgZ2VuZXJhdGlvbiBvZiBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMKK2FuZCB1c2VzIEZQVS1zcGVjaWZpYyBjYWxsaW5nIGNvbnZlbnRpb25zLgorLlNwCitUaGUgZGVmYXVsdCBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyB0YXJnZXQgY29uZmlndXJhdGlvbi4gIE5vdGUgdGhhdAordGhlIGhhcmQtZmxvYXQgYW5kIHNvZnQtZmxvYXQgQUJJcyBhcmUgbm90IGxpbmstY29tcGF0aWJsZTsgeW91IG11c3QKK2NvbXBpbGUgeW91ciBlbnRpcmUgcHJvZ3JhbSB3aXRoIHRoZSBzYW1lIFxzLTFBQklcczAsIGFuZCBsaW5rIHdpdGggYQorY29tcGF0aWJsZSBzZXQgb2YgbGlicmFyaWVzLgorLklQICJcZkJcLW1saXR0bGVcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tbGl0dGxlLWVuZGlhbiIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgcHJvY2Vzc29yIHJ1bm5pbmcgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLiAgVGhpcyBpcwordGhlIGRlZmF1bHQgZm9yIGFsbCBzdGFuZGFyZCBjb25maWd1cmF0aW9ucy4KKy5JUCAiXGZCXC1tYmlnXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWJpZy1lbmRpYW4iCitHZW5lcmF0ZSBjb2RlIGZvciBhIHByb2Nlc3NvciBydW5uaW5nIGluIGJpZy1lbmRpYW4gbW9kZTsgdGhlIGRlZmF1bHQgaXMKK3RvIGNvbXBpbGUgY29kZSBmb3IgYSBsaXR0bGUtZW5kaWFuIHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1td29yZHNcLWxpdHRsZVwtZW5kaWFuXGZSIiA0CisuSVggSXRlbSAiLW13b3Jkcy1saXR0bGUtZW5kaWFuIgorVGhpcyBvcHRpb24gb25seSBhcHBsaWVzIHdoZW4gZ2VuZXJhdGluZyBjb2RlIGZvciBiaWctZW5kaWFuIHByb2Nlc3NvcnMuCitHZW5lcmF0ZSBjb2RlIGZvciBhIGxpdHRsZS1lbmRpYW4gd29yZCBvcmRlciBidXQgYSBiaWctZW5kaWFuIGJ5dGUKK29yZGVyLiAgVGhhdCBpcywgYSBieXRlIG9yZGVyIG9mIHRoZSBmb3JtIFxmQjMyMTA3NjU0XGZSLiAgTm90ZTogdGhpcworb3B0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IHJlcXVpcmUgY29tcGF0aWJpbGl0eSB3aXRoIGNvZGUgZm9yCitiaWctZW5kaWFuIFxzLTFBUk1cczAgcHJvY2Vzc29ycyBnZW5lcmF0ZWQgYnkgdmVyc2lvbnMgb2YgdGhlIGNvbXBpbGVyIHByaW9yIHRvCisyLjguICBUaGlzIG9wdGlvbiBpcyBub3cgZGVwcmVjYXRlZC4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1uYW1lIgorVGhpcyBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBccy0xQVJNXHMwIHByb2Nlc3Nvci4gIFxzLTFHQ0NcczAgdXNlcyB0aGlzIG5hbWUKK3RvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIGl0IGNhbiBlbWl0IHdoZW4gZ2VuZXJhdGluZworYXNzZW1ibHkgY29kZS4gIFBlcm1pc3NpYmxlIG5hbWVzIGFyZTogXGZCYXJtMlxmUiwgXGZCYXJtMjUwXGZSLAorXCZcZkJhcm0zXGZSLCBcZkJhcm02XGZSLCBcZkJhcm02MFxmUiwgXGZCYXJtNjAwXGZSLCBcZkJhcm02MTBcZlIsCitcJlxmQmFybTYyMFxmUiwgXGZCYXJtN1xmUiwgXGZCYXJtN21cZlIsIFxmQmFybTdkXGZSLCBcZkJhcm03ZG1cZlIsCitcJlxmQmFybTdkaVxmUiwgXGZCYXJtN2RtaVxmUiwgXGZCYXJtNzBcZlIsIFxmQmFybTcwMFxmUiwKK1wmXGZCYXJtNzAwaVxmUiwgXGZCYXJtNzEwXGZSLCBcZkJhcm03MTBjXGZSLCBcZkJhcm03MTAwXGZSLAorXCZcZkJhcm03MjBcZlIsCitcJlxmQmFybTc1MDBcZlIsIFxmQmFybTc1MDBmZVxmUiwgXGZCYXJtN3RkbWlcZlIsIFxmQmFybTd0ZG1pXC1zXGZSLAorXCZcZkJhcm03MTB0XGZSLCBcZkJhcm03MjB0XGZSLCBcZkJhcm03NDB0XGZSLAorXCZcZkJzdHJvbmdhcm1cZlIsIFxmQnN0cm9uZ2FybTExMFxmUiwgXGZCc3Ryb25nYXJtMTEwMFxmUiwKK1wmXGZCc3Ryb25nYXJtMTExMFxmUiwKK1wmXGZCYXJtOFxmUiwgXGZCYXJtODEwXGZSLCBcZkJhcm05XGZSLCBcZkJhcm05ZVxmUiwgXGZCYXJtOTIwXGZSLAorXCZcZkJhcm05MjB0XGZSLCBcZkJhcm05MjJ0XGZSLCBcZkJhcm05NDZlXC1zXGZSLCBcZkJhcm05NjZlXC1zXGZSLAorXCZcZkJhcm05NjhlXC1zXGZSLCBcZkJhcm05MjZlalwtc1xmUiwgXGZCYXJtOTQwdFxmUiwgXGZCYXJtOXRkbWlcZlIsCitcJlxmQmFybTEwdGRtaVxmUiwgXGZCYXJtMTAyMHRcZlIsIFxmQmFybTEwMjZlalwtc1xmUiwKK1wmXGZCYXJtMTBlXGZSLCBcZkJhcm0xMDIwZVxmUiwgXGZCYXJtMTAyMmVcZlIsCitcJlxmQmFybTExMzZqXC1zXGZSLCBcZkJhcm0xMTM2amZcLXNcZlIsIFxmQm1wY29yZVxmUiwgXGZCbXBjb3Jlbm92ZnBcZlIsCitcJlxmQmFybTExNTZ0Mlwtc1xmUiwgXGZCYXJtMTE1NnQyZlwtc1xmUiwgXGZCYXJtMTE3Nmp6XC1zXGZSLCBcZkJhcm0xMTc2anpmXC1zXGZSLAorXCZcZkJjb3J0ZXhcLWE1XGZSLCBcZkJjb3J0ZXhcLWE3XGZSLCBcZkJjb3J0ZXhcLWE4XGZSLCBcZkJjb3J0ZXhcLWE5XGZSLCAKK1wmXGZCY29ydGV4XC1hMTVcZlIsIFxmQmNvcnRleFwtYTUzXGZSLCBcZkJjb3J0ZXhcLXI0XGZSLCBcZkJjb3J0ZXhcLXI0ZlxmUiwKK1wmXGZCY29ydGV4XC1yNVxmUiwgXGZCY29ydGV4XC1yN1xmUiwgXGZCY29ydGV4XC1tNFxmUiwgXGZCY29ydGV4XC1tM1xmUiwKK1wmXGZCY29ydGV4XC1tMVxmUiwKK1wmXGZCY29ydGV4XC1tMFxmUiwKK1wmXGZCY29ydGV4XC1tMHBsdXNcZlIsCitcJlxmQm1hcnZlbGxcLXBqNFxmUiwKK1wmXGZCeHNjYWxlXGZSLCBcZkJpd21teHRcZlIsIFxmQml3bW14dDJcZlIsIFxmQmVwOTMxMlxmUiwKK1wmXGZCZmE1MjZcZlIsIFxmQmZhNjI2XGZSLAorXCZcZkJmYTYwNnRlXGZSLCBcZkJmYTYyNnRlXGZSLCBcZkJmbXA2MjZcZlIsIFxmQmZhNzI2dGVcZlIuCisuU3AKK1wmXGZCXC1tY3B1PWdlbmVyaWNcLVxmUlxmSWFyY2hcZlIgaXMgYWxzbyBwZXJtaXNzaWJsZSwgYW5kIGlzCitlcXVpdmFsZW50IHRvIFxmQlwtbWFyY2g9XGZSXGZJYXJjaFxmUiBcZkJcLW10dW5lPWdlbmVyaWNcLVxmUlxmSWFyY2hcZlIuCitTZWUgXGZCXC1tdHVuZVxmUiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5TcAorXCZcZkJcLW1jcHU9bmF0aXZlXGZSIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gYXV0by1kZXRlY3QgdGhlIFxzLTFDUFVcczAKK29mIHRoZSBidWlsZCBjb21wdXRlci4gIEF0IHByZXNlbnQsIHRoaXMgZmVhdHVyZSBpcyBvbmx5IHN1cHBvcnRlZCBvbgorTGludXgsIGFuZCBub3QgYWxsIGFyY2hpdGVjdHVyZXMgYXJlIHJlY29nbml6ZWQuICBJZiB0aGUgYXV0by1kZXRlY3QgaXMKK3Vuc3VjY2Vzc2Z1bCB0aGUgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tdHVuZT1uYW1lIgorVGhpcyBvcHRpb24gaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBcZkJcLW1jcHU9XGZSIG9wdGlvbiwgZXhjZXB0IHRoYXQKK2luc3RlYWQgb2Ygc3BlY2lmeWluZyB0aGUgYWN0dWFsIHRhcmdldCBwcm9jZXNzb3IgdHlwZSwgYW5kIGhlbmNlCityZXN0cmljdGluZyB3aGljaCBpbnN0cnVjdGlvbnMgY2FuIGJlIHVzZWQsIGl0IHNwZWNpZmllcyB0aGF0IFxzLTFHQ0NcczAgc2hvdWxkCit0dW5lIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29kZSBhcyBpZiB0aGUgdGFyZ2V0IHdlcmUgb2YgdGhlIHR5cGUKK3NwZWNpZmllZCBpbiB0aGlzIG9wdGlvbiwgYnV0IHN0aWxsIGNob29zaW5nIHRoZSBpbnN0cnVjdGlvbnMgaXQKK2dlbmVyYXRlcyBiYXNlZCBvbiB0aGUgXHMtMUNQVVxzMCBzcGVjaWZpZWQgYnkgYSBcZkJcLW1jcHU9XGZSIG9wdGlvbi4KK0ZvciBzb21lIFxzLTFBUk1cczAgaW1wbGVtZW50YXRpb25zIGJldHRlciBwZXJmb3JtYW5jZSBjYW4gYmUgb2J0YWluZWQgYnkgdXNpbmcKK3RoaXMgb3B0aW9uLgorLlNwCitcJlxmQlwtbXR1bmU9Z2VuZXJpY1wtXGZSXGZJYXJjaFxmUiBzcGVjaWZpZXMgdGhhdCBccy0xR0NDXHMwIHNob3VsZCB0dW5lIHRoZQorcGVyZm9ybWFuY2UgZm9yIGEgYmxlbmQgb2YgcHJvY2Vzc29ycyB3aXRoaW4gYXJjaGl0ZWN0dXJlIFxmSWFyY2hcZlIuCitUaGUgYWltIGlzIHRvIGdlbmVyYXRlIGNvZGUgdGhhdCBydW4gd2VsbCBvbiB0aGUgY3VycmVudCBtb3N0IHBvcHVsYXIKK3Byb2Nlc3NvcnMsIGJhbGFuY2luZyBiZXR3ZWVuIG9wdGltaXphdGlvbnMgdGhhdCBiZW5lZml0IHNvbWUgQ1BVcyBpbiB0aGUKK3JhbmdlLCBhbmQgYXZvaWRpbmcgcGVyZm9ybWFuY2UgcGl0ZmFsbHMgb2Ygb3RoZXIgQ1BVcy4gIFRoZSBlZmZlY3RzIG9mCit0aGlzIG9wdGlvbiBtYXkgY2hhbmdlIGluIGZ1dHVyZSBccy0xR0NDXHMwIHZlcnNpb25zIGFzIFxzLTFDUFVcczAgbW9kZWxzIGNvbWUgYW5kIGdvLgorLlNwCitcJlxmQlwtbXR1bmU9bmF0aXZlXGZSIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gYXV0by1kZXRlY3QgdGhlIFxzLTFDUFVcczAKK29mIHRoZSBidWlsZCBjb21wdXRlci4gIEF0IHByZXNlbnQsIHRoaXMgZmVhdHVyZSBpcyBvbmx5IHN1cHBvcnRlZCBvbgorTGludXgsIGFuZCBub3QgYWxsIGFyY2hpdGVjdHVyZXMgYXJlIHJlY29nbml6ZWQuICBJZiB0aGUgYXV0by1kZXRlY3QgaXMKK3Vuc3VjY2Vzc2Z1bCB0aGUgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisuSVAgIlxmQlwtbWFyY2g9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tYXJjaD1uYW1lIgorVGhpcyBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBccy0xQVJNXHMwIGFyY2hpdGVjdHVyZS4gIFxzLTFHQ0NcczAgdXNlcyB0aGlzCituYW1lIHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIGl0IGNhbiBlbWl0IHdoZW4gZ2VuZXJhdGluZworYXNzZW1ibHkgY29kZS4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3IgaW5zdGVhZAorb2YgdGhlIFxmQlwtbWNwdT1cZlIgb3B0aW9uLiAgUGVybWlzc2libGUgbmFtZXMgYXJlOiBcZkJhcm12MlxmUiwKK1wmXGZCYXJtdjJhXGZSLCBcZkJhcm12M1xmUiwgXGZCYXJtdjNtXGZSLCBcZkJhcm12NFxmUiwgXGZCYXJtdjR0XGZSLAorXCZcZkJhcm12NVxmUiwgXGZCYXJtdjV0XGZSLCBcZkJhcm12NWVcZlIsIFxmQmFybXY1dGVcZlIsCitcJlxmQmFybXY2XGZSLCBcZkJhcm12NmpcZlIsCitcJlxmQmFybXY2dDJcZlIsIFxmQmFybXY2elxmUiwgXGZCYXJtdjZ6a1xmUiwgXGZCYXJtdjZcLW1cZlIsCitcJlxmQmFybXY3XGZSLCBcZkJhcm12N1wtYVxmUiwgXGZCYXJtdjdcLXJcZlIsIFxmQmFybXY3XC1tXGZSLAorXCZcZkJhcm12OFwtYVxmUiwKK1wmXGZCaXdtbXh0XGZSLCBcZkJpd21teHQyXGZSLCBcZkJlcDkzMTJcZlIuCisuU3AKK1wmXGZCXC1tYXJjaD1uYXRpdmVcZlIgY2F1c2VzIHRoZSBjb21waWxlciB0byBhdXRvLWRldGVjdCB0aGUgYXJjaGl0ZWN0dXJlCitvZiB0aGUgYnVpbGQgY29tcHV0ZXIuICBBdCBwcmVzZW50LCB0aGlzIGZlYXR1cmUgaXMgb25seSBzdXBwb3J0ZWQgb24KK0xpbnV4LCBhbmQgbm90IGFsbCBhcmNoaXRlY3R1cmVzIGFyZSByZWNvZ25pemVkLiAgSWYgdGhlIGF1dG8tZGV0ZWN0IGlzCit1bnN1Y2Nlc3NmdWwgdGhlIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorLklQICJcZkJcLW1mcHU9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tZnB1PW5hbWUiCitUaGlzIHNwZWNpZmllcyB3aGF0IGZsb2F0aW5nLXBvaW50IGhhcmR3YXJlIChvciBoYXJkd2FyZSBlbXVsYXRpb24pIGlzCithdmFpbGFibGUgb24gdGhlIHRhcmdldC4gIFBlcm1pc3NpYmxlIG5hbWVzIGFyZTogXGZCdmZwXGZSLCBcZkJ2ZnB2M1xmUiwKK1wmXGZCdmZwdjNcLWZwMTZcZlIsIFxmQnZmcHYzXC1kMTZcZlIsIFxmQnZmcHYzXC1kMTZcLWZwMTZcZlIsIFxmQnZmcHYzeGRcZlIsCitcJlxmQnZmcHYzeGRcLWZwMTZcZlIsIFxmQm5lb25cZlIsIFxmQm5lb25cLWZwMTZcZlIsIFxmQnZmcHY0XGZSLAorXCZcZkJ2ZnB2NFwtZDE2XGZSLCBcZkJmcHY0XC1zcFwtZDE2XGZSLCBcZkJuZW9uXC12ZnB2NFxmUiwKK1wmXGZCZnBcLWFybXY4XGZSLCBcZkJuZW9uXC1mcFwtYXJtdjhcZlIsIGFuZCBcZkJjcnlwdG9cLW5lb25cLWZwXC1hcm12OFxmUi4KKy5TcAorSWYgXGZCXC1tc29mdFwtZmxvYXRcZlIgaXMgc3BlY2lmaWVkIHRoaXMgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YKK2Zsb2F0aW5nLXBvaW50IHZhbHVlcy4KKy5TcAorSWYgdGhlIHNlbGVjdGVkIGZsb2F0aW5nLXBvaW50IGhhcmR3YXJlIGluY2x1ZGVzIHRoZSBccy0xTkVPTlxzMCBleHRlbnNpb24KKyhlLmcuIFxmQlwtbWZwdVxmUj1cZkJuZW9uXGZSKSwgbm90ZSB0aGF0IGZsb2F0aW5nLXBvaW50CitvcGVyYXRpb25zIGFyZSBub3QgZ2VuZXJhdGVkIGJ5IFxzLTFHQ0NcczAncyBhdXRvLXZlY3Rvcml6YXRpb24gcGFzcyB1bmxlc3MKK1wmXGZCXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSIGlzIGFsc28gc3BlY2lmaWVkLiAgVGhpcyBpcworYmVjYXVzZSBccy0xTkVPTlxzMCBoYXJkd2FyZSBkb2VzIG5vdCBmdWxseSBpbXBsZW1lbnQgdGhlIFxzLTFJRUVFXHMwIDc1NCBzdGFuZGFyZCBmb3IKK2Zsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgKGluIHBhcnRpY3VsYXIgZGVub3JtYWwgdmFsdWVzIGFyZSB0cmVhdGVkIGFzCit6ZXJvKSwgc28gdGhlIHVzZSBvZiBccy0xTkVPTlxzMCBpbnN0cnVjdGlvbnMgbWF5IGxlYWQgdG8gYSBsb3NzIG9mIHByZWNpc2lvbi4KKy5JUCAiXGZCXC1tZnAxNlwtZm9ybWF0PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWZwMTYtZm9ybWF0PW5hbWUiCitTcGVjaWZ5IHRoZSBmb3JtYXQgb2YgdGhlIFxmKENXXCooQ2BfXHxfZnAxNlwqKEMnXGZSIGhhbGYtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHR5cGUuCitQZXJtaXNzaWJsZSBuYW1lcyBhcmUgXGZCbm9uZVxmUiwgXGZCaWVlZVxmUiwgYW5kIFxmQmFsdGVybmF0aXZlXGZSOwordGhlIGRlZmF1bHQgaXMgXGZCbm9uZVxmUiwgaW4gd2hpY2ggY2FzZSB0aGUgXGYoQ1dcKihDYF9cfF9mcDE2XCooQydcZlIgdHlwZSBpcyBub3QKK2RlZmluZWQuCisuSVAgIlxmQlwtbXN0cnVjdHVyZVwtc2l6ZVwtYm91bmRhcnk9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1tc3RydWN0dXJlLXNpemUtYm91bmRhcnk9biIKK1RoZSBzaXplcyBvZiBhbGwgc3RydWN0dXJlcyBhbmQgdW5pb25zIGFyZSByb3VuZGVkIHVwIHRvIGEgbXVsdGlwbGUKK29mIHRoZSBudW1iZXIgb2YgYml0cyBzZXQgYnkgdGhpcyBvcHRpb24uICBQZXJtaXNzaWJsZSB2YWx1ZXMgYXJlIDgsIDMyCithbmQgNjQuICBUaGUgZGVmYXVsdCB2YWx1ZSB2YXJpZXMgZm9yIGRpZmZlcmVudCB0b29sY2hhaW5zLiAgRm9yIHRoZSBccy0xQ09GRlxzMAordGFyZ2V0ZWQgdG9vbGNoYWluIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDguICBBIHZhbHVlIG9mIDY0IGlzIG9ubHkgYWxsb3dlZAoraWYgdGhlIHVuZGVybHlpbmcgXHMtMUFCSVxzMCBzdXBwb3J0cyBpdC4KKy5TcAorU3BlY2lmeWluZyBhIGxhcmdlciBudW1iZXIgY2FuIHByb2R1Y2UgZmFzdGVyLCBtb3JlIGVmZmljaWVudCBjb2RlLCBidXQKK2NhbiBhbHNvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBwcm9ncmFtLiAgRGlmZmVyZW50IHZhbHVlcyBhcmUgcG90ZW50aWFsbHkKK2luY29tcGF0aWJsZS4gIENvZGUgY29tcGlsZWQgd2l0aCBvbmUgdmFsdWUgY2Fubm90IG5lY2Vzc2FyaWx5IGV4cGVjdCB0bword29yayB3aXRoIGNvZGUgb3IgbGlicmFyaWVzIGNvbXBpbGVkIHdpdGggYW5vdGhlciB2YWx1ZSwgaWYgdGhleSBleGNoYW5nZQoraW5mb3JtYXRpb24gdXNpbmcgc3RydWN0dXJlcyBvciB1bmlvbnMuCisuSVAgIlxmQlwtbWFib3J0XC1vblwtbm9yZXR1cm5cZlIiIDQKKy5JWCBJdGVtICItbWFib3J0LW9uLW5vcmV0dXJuIgorR2VuZXJhdGUgYSBjYWxsIHRvIHRoZSBmdW5jdGlvbiBcZihDV1wqKENgYWJvcnRcKihDJ1xmUiBhdCB0aGUgZW5kIG9mIGEKK1wmXGYoQ1dcKihDYG5vcmV0dXJuXCooQydcZlIgZnVuY3Rpb24uICBJdCBpcyBleGVjdXRlZCBpZiB0aGUgZnVuY3Rpb24gdHJpZXMgdG8KK3JldHVybi4KKy5JUCAiXGZCXC1tbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctY2FsbHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxvbmctY2FsbHMiCisuUEQKK1RlbGxzIHRoZSBjb21waWxlciB0byBwZXJmb3JtIGZ1bmN0aW9uIGNhbGxzIGJ5IGZpcnN0IGxvYWRpbmcgdGhlCithZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiBpbnRvIGEgcmVnaXN0ZXIgYW5kIHRoZW4gcGVyZm9ybWluZyBhIHN1YnJvdXRpbmUKK2NhbGwgb24gdGhpcyByZWdpc3Rlci4gIFRoaXMgc3dpdGNoIGlzIG5lZWRlZCBpZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uCitsaWVzIG91dHNpZGUgb2YgdGhlIDY0XC1tZWdhYnl0ZSBhZGRyZXNzaW5nIHJhbmdlIG9mIHRoZSBvZmZzZXQtYmFzZWQKK3ZlcnNpb24gb2Ygc3Vicm91dGluZSBjYWxsIGluc3RydWN0aW9uLgorLlNwCitFdmVuIGlmIHRoaXMgc3dpdGNoIGlzIGVuYWJsZWQsIG5vdCBhbGwgZnVuY3Rpb24gY2FsbHMgYXJlIHR1cm5lZAoraW50byBsb25nIGNhbGxzLiAgVGhlIGhldXJpc3RpYyBpcyB0aGF0IHN0YXRpYyBmdW5jdGlvbnMsIGZ1bmN0aW9ucwordGhhdCBoYXZlIHRoZSBcZkJzaG9ydC1jYWxsXGZSIGF0dHJpYnV0ZSwgZnVuY3Rpb25zIHRoYXQgYXJlIGluc2lkZQordGhlIHNjb3BlIG9mIGEgXGZCI3ByYWdtYSBub19sb25nX2NhbGxzXGZSIGRpcmVjdGl2ZSwgYW5kIGZ1bmN0aW9ucyB3aG9zZQorZGVmaW5pdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gY29tcGlsZWQgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uCit1bml0IGFyZSBub3QgdHVybmVkIGludG8gbG9uZyBjYWxscy4gIFRoZSBleGNlcHRpb25zIHRvIHRoaXMgcnVsZSBhcmUKK3RoYXQgd2VhayBmdW5jdGlvbiBkZWZpbml0aW9ucywgZnVuY3Rpb25zIHdpdGggdGhlIFxmQmxvbmctY2FsbFxmUgorYXR0cmlidXRlIG9yIHRoZSBcZkJzZWN0aW9uXGZSIGF0dHJpYnV0ZSwgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSB3aXRoaW4KK3RoZSBzY29wZSBvZiBhIFxmQiNwcmFnbWEgbG9uZ19jYWxsc1xmUiBkaXJlY3RpdmUgYXJlIGFsd2F5cwordHVybmVkIGludG8gbG9uZyBjYWxscy4KKy5TcAorVGhpcyBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuICBTcGVjaWZ5aW5nCitcJlxmQlwtbW5vXC1sb25nXC1jYWxsc1xmUiByZXN0b3JlcyB0aGUgZGVmYXVsdCBiZWhhdmlvciwgYXMgZG9lcworcGxhY2luZyB0aGUgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoZSBzY29wZSBvZiBhIFxmQiNwcmFnbWEKK2xvbmdfY2FsbHNfb2ZmXGZSIGRpcmVjdGl2ZS4gIE5vdGUgdGhlc2Ugc3dpdGNoZXMgaGF2ZSBubyBlZmZlY3Qgb24gaG93Cit0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGNvZGUgdG8gaGFuZGxlIGZ1bmN0aW9uIGNhbGxzIHZpYSBmdW5jdGlvbgorcG9pbnRlcnMuCisuSVAgIlxmQlwtbXNpbmdsZVwtcGljXC1iYXNlXGZSIiA0CisuSVggSXRlbSAiLW1zaW5nbGUtcGljLWJhc2UiCitUcmVhdCB0aGUgcmVnaXN0ZXIgdXNlZCBmb3IgXHMtMVBJQ1xzMCBhZGRyZXNzaW5nIGFzIHJlYWQtb25seSwgcmF0aGVyIHRoYW4KK2xvYWRpbmcgaXQgaW4gdGhlIHByb2xvZ3VlIGZvciBlYWNoIGZ1bmN0aW9uLiAgVGhlIHJ1bnRpbWUgc3lzdGVtIGlzCityZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoaXMgcmVnaXN0ZXIgd2l0aCBhbiBhcHByb3ByaWF0ZSB2YWx1ZQorYmVmb3JlIGV4ZWN1dGlvbiBiZWdpbnMuCisuSVAgIlxmQlwtbXBpY1wtcmVnaXN0ZXI9XGZSXGZJcmVnXGZSIiA0CisuSVggSXRlbSAiLW1waWMtcmVnaXN0ZXI9cmVnIgorU3BlY2lmeSB0aGUgcmVnaXN0ZXIgdG8gYmUgdXNlZCBmb3IgXHMtMVBJQ1xzMCBhZGRyZXNzaW5nLiAgVGhlIGRlZmF1bHQgaXMgUjEwCit1bmxlc3Mgc3RhY2stY2hlY2tpbmcgaXMgZW5hYmxlZCwgd2hlbiBSOSBpcyB1c2VkLgorLklQICJcZkJcLW1wb2tlXC1mdW5jdGlvblwtbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tcG9rZS1mdW5jdGlvbi1uYW1lIgorV3JpdGUgdGhlIG5hbWUgb2YgZWFjaCBmdW5jdGlvbiBpbnRvIHRoZSB0ZXh0IHNlY3Rpb24sIGRpcmVjdGx5CitwcmVjZWRpbmcgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlLiAgVGhlIGdlbmVyYXRlZCBjb2RlIGlzIHNpbWlsYXIgdG8gdGhpczoKKy5TcAorLlZiIDkKK1wmICAgICAgICAgICAgIHQwCitcJiAgICAgICAgICAgICAgICAgLmFzY2lpICJhcm1fcG9rZV9mdW5jdGlvbl9uYW1lIiwgMAorXCYgICAgICAgICAgICAgICAgIC5hbGlnbgorXCYgICAgICAgICAgICAgdDEKK1wmICAgICAgICAgICAgICAgICAud29yZCAweGZmMDAwMDAwICsgKHQxIFwtIHQwKQorXCYgICAgICAgICAgICAgYXJtX3Bva2VfZnVuY3Rpb25fbmFtZQorXCYgICAgICAgICAgICAgICAgIG1vdiAgICAgaXAsIHNwCitcJiAgICAgICAgICAgICAgICAgc3RtZmQgICBzcCEsIHtmcCwgaXAsIGxyLCBwY30KK1wmICAgICAgICAgICAgICAgICBzdWIgICAgIGZwLCBpcCwgIzQKKy5WZQorLlNwCitXaGVuIHBlcmZvcm1pbmcgYSBzdGFjayBiYWNrdHJhY2UsIGNvZGUgY2FuIGluc3BlY3QgdGhlIHZhbHVlIG9mCitcJlxmKENXXCooQ2BwY1wqKEMnXGZSIHN0b3JlZCBhdCBcZihDV1wqKENgZnAgKyAwXCooQydcZlIuICBJZiB0aGUgdHJhY2UgZnVuY3Rpb24gdGhlbiBsb29rcyBhdAorbG9jYXRpb24gXGYoQ1dcKihDYHBjIFwtIDEyXCooQydcZlIgYW5kIHRoZSB0b3AgOCBiaXRzIGFyZSBzZXQsIHRoZW4gd2Uga25vdyB0aGF0Cit0aGVyZSBpcyBhIGZ1bmN0aW9uIG5hbWUgZW1iZWRkZWQgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoaXMgbG9jYXRpb24KK2FuZCBoYXMgbGVuZ3RoIFxmKENXXCooQ2AoKHBjW1wtM10pICYgMHhmZjAwMDAwMClcKihDJ1xmUi4KKy5JUCAiXGZCXC1tdGh1bWJcZlIiIDQKKy5JWCBJdGVtICItbXRodW1iIgorLlBEIDAKKy5JUCAiXGZCXC1tYXJtXGZSIiA0CisuSVggSXRlbSAiLW1hcm0iCisuUEQKK1NlbGVjdCBiZXR3ZWVuIGdlbmVyYXRpbmcgY29kZSB0aGF0IGV4ZWN1dGVzIGluIFxzLTFBUk1cczAgYW5kIFRodW1iCitzdGF0ZXMuICBUaGUgZGVmYXVsdCBmb3IgbW9zdCBjb25maWd1cmF0aW9ucyBpcyB0byBnZW5lcmF0ZSBjb2RlCit0aGF0IGV4ZWN1dGVzIGluIFxzLTFBUk1cczAgc3RhdGUsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZCBieQorY29uZmlndXJpbmcgXHMtMUdDQ1xzMCB3aXRoIHRoZSBcZkJcLVwtd2l0aFwtbW9kZT1cZlJcZklzdGF0ZVxmUgorY29uZmlndXJlIG9wdGlvbi4KKy5JUCAiXGZCXC1tdHBjc1wtZnJhbWVcZlIiIDQKKy5JWCBJdGVtICItbXRwY3MtZnJhbWUiCitHZW5lcmF0ZSBhIHN0YWNrIGZyYW1lIHRoYXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFRodW1iIFByb2NlZHVyZSBDYWxsCitTdGFuZGFyZCBmb3IgYWxsIG5vbi1sZWFmIGZ1bmN0aW9ucy4gIChBIGxlYWYgZnVuY3Rpb24gaXMgb25lIHRoYXQgZG9lcworbm90IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9ucy4pICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1ub1wtdHBjc1wtZnJhbWVcZlIuCisuSVAgIlxmQlwtbXRwY3NcLWxlYWZcLWZyYW1lXGZSIiA0CisuSVggSXRlbSAiLW10cGNzLWxlYWYtZnJhbWUiCitHZW5lcmF0ZSBhIHN0YWNrIGZyYW1lIHRoYXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFRodW1iIFByb2NlZHVyZSBDYWxsCitTdGFuZGFyZCBmb3IgYWxsIGxlYWYgZnVuY3Rpb25zLiAgKEEgbGVhZiBmdW5jdGlvbiBpcyBvbmUgdGhhdCBkb2VzCitub3QgY2FsbCBhbnkgb3RoZXIgZnVuY3Rpb25zLikgIFRoZSBkZWZhdWx0IGlzIFxmQlwtbW5vXC1hcGNzXC1sZWFmXC1mcmFtZVxmUi4KKy5JUCAiXGZCXC1tY2FsbGVlXC1zdXBlclwtaW50ZXJ3b3JraW5nXGZSIiA0CisuSVggSXRlbSAiLW1jYWxsZWUtc3VwZXItaW50ZXJ3b3JraW5nIgorR2l2ZXMgYWxsIGV4dGVybmFsbHkgdmlzaWJsZSBmdW5jdGlvbnMgaW4gdGhlIGZpbGUgYmVpbmcgY29tcGlsZWQgYW4gXHMtMUFSTVxzMAoraW5zdHJ1Y3Rpb24gc2V0IGhlYWRlciB3aGljaCBzd2l0Y2hlcyB0byBUaHVtYiBtb2RlIGJlZm9yZSBleGVjdXRpbmcgdGhlCityZXN0IG9mIHRoZSBmdW5jdGlvbi4gIFRoaXMgYWxsb3dzIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgZnJvbQorbm9uLWludGVyd29ya2luZyBjb2RlLiAgVGhpcyBvcHRpb24gaXMgbm90IHZhbGlkIGluIFxzLTFBQVBDU1xzMCBjb25maWd1cmF0aW9ucworYmVjYXVzZSBpbnRlcndvcmtpbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLW1jYWxsZXJcLXN1cGVyXC1pbnRlcndvcmtpbmdcZlIiIDQKKy5JWCBJdGVtICItbWNhbGxlci1zdXBlci1pbnRlcndvcmtpbmciCitBbGxvd3MgY2FsbHMgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzIChpbmNsdWRpbmcgdmlydHVhbCBmdW5jdGlvbnMpIHRvCitleGVjdXRlIGNvcnJlY3RseSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHRhcmdldCBjb2RlIGhhcyBiZWVuCitjb21waWxlZCBmb3IgaW50ZXJ3b3JraW5nIG9yIG5vdC4gIFRoZXJlIGlzIGEgc21hbGwgb3ZlcmhlYWQgaW4gdGhlIGNvc3QKK29mIGV4ZWN1dGluZyBhIGZ1bmN0aW9uIHBvaW50ZXIgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gIFRoaXMgb3B0aW9uCitpcyBub3QgdmFsaWQgaW4gXHMtMUFBUENTXHMwIGNvbmZpZ3VyYXRpb25zIGJlY2F1c2UgaW50ZXJ3b3JraW5nIGlzIGVuYWJsZWQKK2J5IGRlZmF1bHQuCisuSVAgIlxmQlwtbXRwPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbXRwPW5hbWUiCitTcGVjaWZ5IHRoZSBhY2Nlc3MgbW9kZWwgZm9yIHRoZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSBwb2ludGVyLiAgVGhlIHZhbGlkCittb2RlbHMgYXJlIFxmQnNvZnRcZlIsIHdoaWNoIGdlbmVyYXRlcyBjYWxscyB0byBcZihDV1wqKENgX1x8X2FlYWJpX3JlYWRfdHBcKihDJ1xmUiwKK1wmXGZCY3AxNVxmUiwgd2hpY2ggZmV0Y2hlcyB0aGUgdGhyZWFkIHBvaW50ZXIgZnJvbSBcZihDV1wqKENgY3AxNVwqKEMnXGZSIGRpcmVjdGx5Cisoc3VwcG9ydGVkIGluIHRoZSBhcm02ayBhcmNoaXRlY3R1cmUpLCBhbmQgXGZCYXV0b1xmUiwgd2hpY2ggdXNlcyB0aGUKK2Jlc3QgYXZhaWxhYmxlIG1ldGhvZCBmb3IgdGhlIHNlbGVjdGVkIHByb2Nlc3Nvci4gIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMKK1wmXGZCYXV0b1xmUi4KKy5JUCAiXGZCXC1tdGxzXC1kaWFsZWN0PVxmUlxmSWRpYWxlY3RcZlIiIDQKKy5JWCBJdGVtICItbXRscy1kaWFsZWN0PWRpYWxlY3QiCitTcGVjaWZ5IHRoZSBkaWFsZWN0IHRvIHVzZSBmb3IgYWNjZXNzaW5nIHRocmVhZCBsb2NhbCBzdG9yYWdlLiAgVHdvCitcJlxmSWRpYWxlY3RcZlJzIGFyZSBzdXBwb3J0ZWRcLVwtXC1cZkJnbnVcZlIgYW5kIFxmQmdudTJcZlIuICBUaGUKK1wmXGZCZ251XGZSIGRpYWxlY3Qgc2VsZWN0cyB0aGUgb3JpZ2luYWwgXHMtMUdOVVxzMCBzY2hlbWUgZm9yIHN1cHBvcnRpbmcKK2xvY2FsIGFuZCBnbG9iYWwgZHluYW1pYyBccy0xVExTXHMwIG1vZGVscy4gIFRoZSBcZkJnbnUyXGZSIGRpYWxlY3QKK3NlbGVjdHMgdGhlIFxzLTFHTlVcczAgZGVzY3JpcHRvciBzY2hlbWUsIHdoaWNoIHByb3ZpZGVzIGJldHRlciBwZXJmb3JtYW5jZQorZm9yIHNoYXJlZCBsaWJyYXJpZXMuICBUaGUgXHMtMUdOVVxzMCBkZXNjcmlwdG9yIHNjaGVtZSBpcyBjb21wYXRpYmxlIHdpdGgKK3RoZSBvcmlnaW5hbCBzY2hlbWUsIGJ1dCBkb2VzIHJlcXVpcmUgbmV3IGFzc2VtYmxlciwgbGlua2VyIGFuZAorbGlicmFyeSBzdXBwb3J0LiAgSW5pdGlhbCBhbmQgbG9jYWwgZXhlYyBccy0xVExTXHMwIG1vZGVscyBhcmUgdW5hZmZlY3RlZCBieQordGhpcyBvcHRpb24gYW5kIGFsd2F5cyB1c2UgdGhlIG9yaWdpbmFsIHNjaGVtZS4KKy5JUCAiXGZCXC1td29yZFwtcmVsb2NhdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItbXdvcmQtcmVsb2NhdGlvbnMiCitPbmx5IGdlbmVyYXRlIGFic29sdXRlIHJlbG9jYXRpb25zIG9uIHdvcmQtc2l6ZWQgdmFsdWVzIChpLmUuIFJfQVJNX0FCUzMyKS4KK1RoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHRhcmdldHMgKHVDbGludXgsIFN5bWJpYW5PUykgd2hlcmUgdGhlIHJ1bnRpbWUKK2xvYWRlciBpbXBvc2VzIHRoaXMgcmVzdHJpY3Rpb24sIGFuZCB3aGVuIFxmQlwtZnBpY1xmUiBvciBcZkJcLWZQSUNcZlIKK2lzIHNwZWNpZmllZC4KKy5JUCAiXGZCXC1tZml4XC1jb3J0ZXhcLW0zXC1sZHJkXGZSIiA0CisuSVggSXRlbSAiLW1maXgtY29ydGV4LW0zLWxkcmQiCitTb21lIENvcnRleFwtTTMgY29yZXMgY2FuIGNhdXNlIGRhdGEgY29ycnVwdGlvbiB3aGVuIFxmKENXXCooQ2BsZHJkXCooQydcZlIgaW5zdHJ1Y3Rpb25zCit3aXRoIG92ZXJsYXBwaW5nIGRlc3RpbmF0aW9uIGFuZCBiYXNlIHJlZ2lzdGVycyBhcmUgdXNlZC4gIFRoaXMgb3B0aW9uIGF2b2lkcworZ2VuZXJhdGluZyB0aGVzZSBpbnN0cnVjdGlvbnMuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbgorXCZcZkJcLW1jcHU9Y29ydGV4XC1tM1xmUiBpcyBzcGVjaWZpZWQuCisuSVAgIlxmQlwtbXVuYWxpZ25lZFwtYWNjZXNzXGZSIiA0CisuSVggSXRlbSAiLW11bmFsaWduZWQtYWNjZXNzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXVuYWxpZ25lZFwtYWNjZXNzXGZSIiA0CisuSVggSXRlbSAiLW1uby11bmFsaWduZWQtYWNjZXNzIgorLlBECitFbmFibGVzIChvciBkaXNhYmxlcykgcmVhZGluZyBhbmQgd3JpdGluZyBvZiAxNlwtIGFuZCAzMlwtIGJpdCB2YWx1ZXMKK2Zyb20gYWRkcmVzc2VzIHRoYXQgYXJlIG5vdCAxNlwtIG9yIDMyXC0gYml0IGFsaWduZWQuICBCeSBkZWZhdWx0Cit1bmFsaWduZWQgYWNjZXNzIGlzIGRpc2FibGVkIGZvciBhbGwgcHJlXC1BUk12NiBhbmQgYWxsIEFSTXY2XC1NCithcmNoaXRlY3R1cmVzLCBhbmQgZW5hYmxlZCBmb3IgYWxsIG90aGVyIGFyY2hpdGVjdHVyZXMuICBJZiB1bmFsaWduZWQKK2FjY2VzcyBpcyBub3QgZW5hYmxlZCB0aGVuIHdvcmRzIGluIHBhY2tlZCBkYXRhIHN0cnVjdHVyZXMgd2lsbCBiZQorYWNjZXNzZWQgYSBieXRlIGF0IGEgdGltZS4KKy5TcAorVGhlIFxzLTFBUk1cczAgYXR0cmlidXRlIFxmKENXXCooQ2BUYWdfQ1BVX3VuYWxpZ25lZF9hY2Nlc3NcKihDJ1xmUiB3aWxsIGJlIHNldCBpbiB0aGUKK2dlbmVyYXRlZCBvYmplY3QgZmlsZSB0byBlaXRoZXIgdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIHVwb24gdGhlCitzZXR0aW5nIG9mIHRoaXMgb3B0aW9uLiAgSWYgdW5hbGlnbmVkIGFjY2VzcyBpcyBlbmFibGVkIHRoZW4gdGhlCitwcmVwcm9jZXNzb3Igc3ltYm9sIFxmKENXXCooQ2BfXHxfQVJNX0ZFQVRVUkVfVU5BTElHTkVEXCooQydcZlIgd2lsbCBhbHNvIGJlCitkZWZpbmVkLgorLklQICJcZkJcLW1uZW9uXC1mb3JcLTY0Yml0c1xmUiIgNAorLklYIEl0ZW0gIi1tbmVvbi1mb3ItNjRiaXRzIgorRW5hYmxlcyB1c2luZyBOZW9uIHRvIGhhbmRsZSBzY2FsYXIgNjRcLWJpdHMgb3BlcmF0aW9ucy4gVGhpcyBpcworZGlzYWJsZWQgYnkgZGVmYXVsdCBzaW5jZSB0aGUgY29zdCBvZiBtb3ZpbmcgZGF0YSBmcm9tIGNvcmUgcmVnaXN0ZXJzCit0byBOZW9uIGlzIGhpZ2guCisuSVAgIlxmQlwtbXJlc3RyaWN0XC1pdFxmUiIgNAorLklYIEl0ZW0gIi1tcmVzdHJpY3QtaXQiCitSZXN0cmljdHMgZ2VuZXJhdGlvbiBvZiBccy0xSVRcczAgYmxvY2tzIHRvIGNvbmZvcm0gdG8gdGhlIHJ1bGVzIG9mIEFSTXY4LgorXCZccy0xSVRcczAgYmxvY2tzIGNhbiBvbmx5IGNvbnRhaW4gYSBzaW5nbGUgMTZcLWJpdCBpbnN0cnVjdGlvbiBmcm9tIGEgc2VsZWN0CitzZXQgb2YgaW5zdHJ1Y3Rpb25zLiBUaGlzIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0IGZvciBBUk12OCBUaHVtYiBtb2RlLgorLlBQCitcZklccy0xQVZSXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJBVlIgT3B0aW9ucyIKKy5QUAorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgXHMtMUFWUlxzMCBpbXBsZW1lbnRhdGlvbnM6CisuSVAgIlxmQlwtbW1jdT1cZlJcZkltY3VcZlIiIDQKKy5JWCBJdGVtICItbW1jdT1tY3UiCitTcGVjaWZ5IEF0bWVsIFxzLTFBVlJcczAgaW5zdHJ1Y3Rpb24gc2V0IGFyY2hpdGVjdHVyZXMgKFxzLTFJU0FcczApIG9yIFxzLTFNQ1VcczAgdHlwZS4KKy5TcAorVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzQHRpZXt9XGYoQ1dcKihDYGF2cjJcKihDJ1xmUi4KKy5TcAorXCZccy0xR0NDXHMwIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgXHMtMUFWUlxzMCBkZXZpY2VzIGFuZCBJU0FzOgorLlJTIDQKKy5pZSBuIC5JUCAiIiJhdnIyIiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyMlxmUiIgNAorLklYIEl0ZW0gImF2cjIiCitcJlwqKEwiQ2xhc3NpY1wqKFIiIGRldmljZXMgd2l0aCB1cCB0byA4QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5LgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0dGlueTIyXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkyNlwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MGM4NTM0XCooQydcZlIsIFxmKENXXCooQ2BhdDkwczIzMTNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBzMjMyM1wqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHMyMzMzXCooQydcZlIsIFxmKENXXCooQ2BhdDkwczIzNDNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBzNDQxNFwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHM0NDMzXCooQydcZlIsIFxmKENXXCooQ2BhdDkwczQ0MzRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBzODUxNVwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHM4NTM1XCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyMjUiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnIyNVxmUiIgNAorLklYIEl0ZW0gImF2cjI1IgorXCZcKihMIkNsYXNzaWNcKihSIiBkZXZpY2VzIHdpdGggdXAgdG8gOEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeSBhbmQgd2l0aCB0aGUgXGYoQ1dcKihDYE1PVldcKihDJ1xmUiBpbnN0cnVjdGlvbi4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdGE1MjcyXCooQydcZlIsIFxmKENXXCooQ2BhdGE2Mjg5XCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkxM1wqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MTNhXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkyMzEzXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkyMzEzYVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MjRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTI0YVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MjVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTI2MVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MjYxYVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55NDN1XCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnk0MzEzXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnk0NFwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55NDRhXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnk0NVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55NDYxXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnk0NjFhXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnk0OFwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55ODRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTg0YVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55ODVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTg2MVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55ODYxYVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55ODdcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTg4XCooQydcZlIsIFxmKENXXCooQ2BhdDg2cmY0MDFcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnIzIiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyM1xmUiIgNAorLklYIEl0ZW0gImF2cjMiCitcJlwqKEwiQ2xhc3NpY1wqKFIiIGRldmljZXMgd2l0aCAxNkB0aWV7fUtpQiB1cCB0byA2NEB0aWV7fUtpQiBvZiAgcHJvZ3JhbSBtZW1vcnkuCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXQ0M3VzYjM1NVwqKEMnXGZSLCBcZihDV1wqKENgYXQ3NmM3MTFcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnIzMSIiIiA0CisuZWwgLklQICJcZihDV2F2cjMxXGZSIiA0CisuSVggSXRlbSAiYXZyMzEiCitcJlwqKEwiQ2xhc3NpY1wqKFIiIGRldmljZXMgd2l0aCAxMjhAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkuCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXRtZWdhMTAzXCooQydcZlIsIFxmKENXXCooQ2BhdDQzdXNiMzIwXCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyMzUiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnIzNVxmUiIgNAorLklYIEl0ZW0gImF2cjM1IgorXCZcKihMIkNsYXNzaWNcKihSIiBkZXZpY2VzIHdpdGggMTZAdGlle31LaUIgdXAgdG8gNjRAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIHdpdGggdGhlIFxmKENXXCooQ2BNT1ZXXCooQydcZlIgaW5zdHJ1Y3Rpb24uCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXRhNTUwNVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTZ1MlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJ1MlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhOHUyXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkxNjM0XCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkxNjdcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTB1c2IxNjJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTB1c2I4MlwqKEMnXGZSLgorLmllIG4gLklQICIiImF2cjQiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnI0XGZSIiA0CisuSVggSXRlbSAiYXZyNCIKK1wmXCooTCJFbmhhbmNlZFwqKFIiIGRldmljZXMgd2l0aCB1cCB0byA4QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5LgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0YTYyODVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0YTYyODZcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTQ4XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E0OGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTQ4cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNDhwYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhOFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhOGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYThodmFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTg1MTVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTg1MzVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTg4XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E4OGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTg4cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhODhwYVwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHB3bTFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBwd20yXCooQydcZlIsIFxmKENXXCooQ2BhdDkwcHdtMmJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBwd20zXCooQydcZlIsIFxmKENXXCooQ2BhdDkwcHdtM2JcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBwd204MVwqKEMnXGZSLgorLmllIG4gLklQICIiImF2cjUiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnI1XGZSIiA0CisuSVggSXRlbSAiYXZyNSIKK1wmXCooTCJFbmhhbmNlZFwqKFIiIGRldmljZXMgd2l0aCAxNkB0aWV7fUtpQiB1cCB0byA2NEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdGE1NzkwXCooQydcZlIsIFxmKENXXCooQ2BhdGE1NzkwblwqKEMnXGZSLCBcZihDV1wqKENgYXRhNTc5NVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTZcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTZodmFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2aHZhMlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTZodmJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2aHZicmV2YlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTZtMVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTZ1NFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTYxXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2ExNjJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2M1wqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY0YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY0cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY0cGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2NVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY1YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY1cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY1cGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2OFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY4YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY4cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY4cGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTE2OVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY5YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY5cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMTY5cGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTI2aHZnXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMmMxXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMmh2YlwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzJodmJyZXZiXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMm0xXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMnU0XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMnU2XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyNGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyNHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyNHBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyNWFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyNXBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyNTBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyNTBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjUwcFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI1MHBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjhcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyOHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyOVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI5YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI5cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI5cGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyOTBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTMyOTBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2EzMjkwcFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhMzI5MHBhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E0MDZcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTQ4aHZmXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjRhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NGMxXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NGh2ZVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjRtMVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjRyZmEyXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NHJmcjJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0MFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ0XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDRhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDRwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDRwYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ1XCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDVhXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDVwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDUwXCooQydcZlIsIFxmKENXXCooQ2BhdG1lZ2E2NDUwYVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ1MHBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0OVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ5YVwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ5cFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ5MFwqKEMnXGZSLCBcZihDV1wqKENgYXRtZWdhNjQ5MGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTY0OTBwXCooQydcZlIsIFxmKENXXCooQ2BhdDkwY2FuMzJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBjYW42NFwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHB3bTE2MVwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHB3bTIxNlwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHB3bTMxNlwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHNjcjEwMFwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHVzYjY0NlwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHVzYjY0N1wqKEMnXGZSLCBcZihDV1wqKENgYXQ5NGtcKihDJ1xmUiwgXGYoQ1dcKihDYG0zMDAwXCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyNTEiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnI1MVxmUiIgNAorLklYIEl0ZW0gImF2cjUxIgorXCZcKihMIkVuaGFuY2VkXCooUiIgZGV2aWNlcyB3aXRoIDEyOEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdG1lZ2ExMjhcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTEyOGFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTEyOHJmYTFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTEyODBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTEyODFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTEyODRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTEyODRwXCooQydcZlIsIFxmKENXXCooQ2BhdDkwY2FuMTI4XCooQydcZlIsIFxmKENXXCooQ2BhdDkwdXNiMTI4NlwqKEMnXGZSLCBcZihDV1wqKENgYXQ5MHVzYjEyODdcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnI2IiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyNlxmUiIgNAorLklYIEl0ZW0gImF2cjYiCitcJlwqKEwiRW5oYW5jZWRcKihSIiBkZXZpY2VzIHdpdGggM1wtYnl0ZSBccy0xUENcczAsIGkuZS4gd2l0aCBtb3JlIHRoYW4gMTI4QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5LgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0bWVnYTI1NjBcKihDJ1xmUiwgXGYoQ1dcKihDYGF0bWVnYTI1NjFcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnJ4bWVnYTIiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnJ4bWVnYTJcZlIiIDQKKy5JWCBJdGVtICJhdnJ4bWVnYTIiCitcJlwqKEwiXHMtMVhNRUdBXHMwXCooUiIgZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiA4QHRpZXt9S2lCIGFuZCB1cCB0byA2NEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdG14dDExMnNsXCooQydcZlIsIFxmKENXXCooQ2BhdG14dDIyNFwqKEMnXGZSLCBcZihDV1wqKENgYXRteHQyMjRlXCooQydcZlIsIFxmKENXXCooQ2BhdG14dDMzNnNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExNmE0XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTZhNHVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExNmM0XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTZkNFwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTE2eDFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2EzMmE0XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMzJhNHVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2EzMmM0XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMzJkNFwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTMyZTVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2EzMngxXCooQydcZlIuCisuaWUgbiAuSVAgIiIiYXZyeG1lZ2E0IiIiIDQKKy5lbCAuSVAgIlxmKENXYXZyeG1lZ2E0XGZSIiA0CisuSVggSXRlbSAiYXZyeG1lZ2E0IgorXCZcKihMIlxzLTFYTUVHQVxzMFwqKFIiIGRldmljZXMgd2l0aCBtb3JlIHRoYW4gNjRAdGlle31LaUIgYW5kIHVwIHRvIDEyOEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KK1wmXGZJbWN1XGZSXGYoQ1dAdGllXGZSe309IFxmKENXXCooQ2BhdHhtZWdhNjRhM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTY0YTN1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhNjRhNHVcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2E2NGIxXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhNjRiM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTY0YzNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2E2NGQzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhNjRkNFwqKEMnXGZSLgorLmllIG4gLklQICIiImF2cnhtZWdhNSIiIiA0CisuZWwgLklQICJcZihDV2F2cnhtZWdhNVxmUiIgNAorLklYIEl0ZW0gImF2cnhtZWdhNSIKK1wmXCooTCJccy0xWE1FR0FcczBcKihSIiBkZXZpY2VzIHdpdGggbW9yZSB0aGFuIDY0QHRpZXt9S2lCIGFuZCB1cCB0byAxMjhAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIG1vcmUgdGhhbiA2NEB0aWV7fUtpQiBvZiBccy0xUkFNXHMwLgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0eG1lZ2E2NGExXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhNjRhMXVcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnJ4bWVnYTYiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnJ4bWVnYTZcZlIiIDQKKy5JWCBJdGVtICJhdnJ4bWVnYTYiCitcJlwqKEwiXHMtMVhNRUdBXHMwXCooUiIgZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxMjhAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkuCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXRteHQ1NDBzXCooQydcZlIsIFxmKENXXCooQ2BhdG14dDU0MHNyZXZhXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTI4YTNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExMjhhM3VcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExMjhiMVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTEyOGIzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTI4YzNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExMjhkM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTEyOGQ0XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMTkyYTNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExOTJhM3VcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2ExOTJjM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTE5MmQzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMjU2YTNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2EyNTZhM2JcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2EyNTZhM2J1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMjU2YTN1XCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMjU2YzNcKihDJ1xmUiwgXGYoQ1dcKihDYGF0eG1lZ2EyNTZkM1wqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTM4NGMzXCooQydcZlIsIFxmKENXXCooQ2BhdHhtZWdhMzg0ZDNcKihDJ1xmUi4KKy5pZSBuIC5JUCAiIiJhdnJ4bWVnYTciIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnJ4bWVnYTdcZlIiIDQKKy5JWCBJdGVtICJhdnJ4bWVnYTciCitcJlwqKEwiXHMtMVhNRUdBXHMwXCooUiIgZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxMjhAdGlle31LaUIgb2YgcHJvZ3JhbSBtZW1vcnkgYW5kIG1vcmUgdGhhbiA2NEB0aWV7fUtpQiBvZiBccy0xUkFNXHMwLgorXCZcZkltY3VcZlJcZihDV0B0aWVcZlJ7fT0gXGYoQ1dcKihDYGF0eG1lZ2ExMjhhMVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTEyOGExdVwqKEMnXGZSLCBcZihDV1wqKENgYXR4bWVnYTEyOGE0dVwqKEMnXGZSLgorLmllIG4gLklQICIiImF2cjEiIiIgNAorLmVsIC5JUCAiXGYoQ1dhdnIxXGZSIiA0CisuSVggSXRlbSAiYXZyMSIKK1RoaXMgXHMtMUlTQVxzMCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgbWluaW1hbCBccy0xQVZSXHMwIGNvcmUgYW5kIHN1cHBvcnRlZCBmb3IgYXNzZW1ibGVyIG9ubHkuCitcJlxmSW1jdVxmUlxmKENXQHRpZVxmUnt9PSBcZihDV1wqKENgYXR0aW55MTFcKihDJ1xmUiwgXGYoQ1dcKihDYGF0dGlueTEyXCooQydcZlIsIFxmKENXXCooQ2BhdHRpbnkxNVwqKEMnXGZSLCBcZihDV1wqKENgYXR0aW55MjhcKihDJ1xmUiwgXGYoQ1dcKihDYGF0OTBzMTIwMFwqKEMnXGZSLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbWFjY3VtdWxhdGVcLWFyZ3NcZlIiIDQKKy5JWCBJdGVtICItbWFjY3VtdWxhdGUtYXJncyIKK0FjY3VtdWxhdGUgb3V0Z29pbmcgZnVuY3Rpb24gYXJndW1lbnRzIGFuZCBhY3F1aXJlL3JlbGVhc2UgdGhlIG5lZWRlZAorc3RhY2sgc3BhY2UgZm9yIG91dGdvaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cyBvbmNlIGluIGZ1bmN0aW9uCitwcm9sb2d1ZS9lcGlsb2d1ZS4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIG91dGdvaW5nIGFyZ3VtZW50cyBhcmUgcHVzaGVkCitiZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uIGFuZCBwb3BwZWQgYWZ0ZXJ3YXJkcy4KKy5TcAorUG9wcGluZyB0aGUgYXJndW1lbnRzIGFmdGVyIHRoZSBmdW5jdGlvbiBjYWxsIGNhbiBiZSBleHBlbnNpdmUgb24KK1wmXHMtMUFWUlxzMCBzbyB0aGF0IGFjY3VtdWxhdGluZyB0aGUgc3RhY2sgc3BhY2UgbWlnaHQgbGVhZCB0byBzbWFsbGVyCitleGVjdXRhYmxlcyBiZWNhdXNlIGFyZ3VtZW50cyBuZWVkIG5vdCB0byBiZSByZW1vdmVkIGZyb20gdGhlCitzdGFjayBhZnRlciBzdWNoIGEgZnVuY3Rpb24gY2FsbC4KKy5TcAorVGhpcyBvcHRpb24gY2FuIGxlYWQgdG8gcmVkdWNlZCBjb2RlIHNpemUgZm9yIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0KK3NldmVyYWwgY2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQgZ2V0IHRoZWlyIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgbGlrZQorY2FsbHMgdG8gcHJpbnRmLWxpa2UgZnVuY3Rpb25zLgorLklQICJcZkJcLW1icmFuY2hcLWNvc3Q9XGZSXGZJY29zdFxmUiIgNAorLklYIEl0ZW0gIi1tYnJhbmNoLWNvc3Q9Y29zdCIKK1NldCB0aGUgYnJhbmNoIGNvc3RzIGZvciBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb25zIHRvCitcJlxmSWNvc3RcZlIuICBSZWFzb25hYmxlIHZhbHVlcyBmb3IgXGZJY29zdFxmUiBhcmUgc21hbGwsIG5vbi1uZWdhdGl2ZQoraW50ZWdlcnMuIFRoZSBkZWZhdWx0IGJyYW5jaCBjb3N0IGlzIDAuCisuSVAgIlxmQlwtbWNhbGxcLXByb2xvZ3Vlc1xmUiIgNAorLklYIEl0ZW0gIi1tY2FsbC1wcm9sb2d1ZXMiCitGdW5jdGlvbnMgcHJvbG9ndWVzL2VwaWxvZ3VlcyBhcmUgZXhwYW5kZWQgYXMgY2FsbHMgdG8gYXBwcm9wcmlhdGUKK3N1YnJvdXRpbmVzLiAgQ29kZSBzaXplIGlzIHNtYWxsZXIuCisuSVAgIlxmQlwtbWludDhcZlIiIDQKKy5JWCBJdGVtICItbWludDgiCitBc3N1bWUgXGYoQ1dcKihDYGludFwqKEMnXGZSIHRvIGJlIDhcLWJpdCBpbnRlZ2VyLiAgVGhpcyBhZmZlY3RzIHRoZSBzaXplcyBvZiBhbGwgdHlwZXM6IGEKK1wmXGYoQ1dcKihDYGNoYXJcKihDJ1xmUiBpcyAxIGJ5dGUsIGFuIFxmKENXXCooQ2BpbnRcKihDJ1xmUiBpcyAxIGJ5dGUsIGEgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUiBpcyAyIGJ5dGVzLAorYW5kIFxmKENXXCooQ2Bsb25nIGxvbmdcKihDJ1xmUiBpcyA0IGJ5dGVzLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdAorY29uZm9ybSB0byB0aGUgQyBzdGFuZGFyZHMsIGJ1dCBpdCByZXN1bHRzIGluIHNtYWxsZXIgY29kZQorc2l6ZS4KKy5JUCAiXGZCXC1tbm9cLWludGVycnVwdHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWludGVycnVwdHMiCitHZW5lcmF0ZWQgY29kZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGhhcmR3YXJlIGludGVycnVwdHMuCitDb2RlIHNpemUgaXMgc21hbGxlci4KKy5JUCAiXGZCXC1tcmVsYXhcZlIiIDQKKy5JWCBJdGVtICItbXJlbGF4IgorVHJ5IHRvIHJlcGxhY2UgXGYoQ1dcKihDYENBTExcKihDJ1xmUiByZXNwLiBcZihDV1wqKENgSk1QXCooQydcZlIgaW5zdHJ1Y3Rpb24gYnkgdGhlIHNob3J0ZXIKK1wmXGYoQ1dcKihDYFJDQUxMXCooQydcZlIgcmVzcC4gXGYoQ1dcKihDYFJKTVBcKihDJ1xmUiBpbnN0cnVjdGlvbiBpZiBhcHBsaWNhYmxlLgorU2V0dGluZyBcZihDV1wqKENgXC1tcmVsYXhcKihDJ1xmUiBqdXN0IGFkZHMgdGhlIFxmKENXXCooQ2BcLVwtcmVsYXhcKihDJ1xmUiBvcHRpb24gdG8gdGhlCitsaW5rZXIgY29tbWFuZCBsaW5lIHdoZW4gdGhlIGxpbmtlciBpcyBjYWxsZWQuCisuU3AKK0p1bXAgcmVsYXhpbmcgaXMgcGVyZm9ybWVkIGJ5IHRoZSBsaW5rZXIgYmVjYXVzZSBqdW1wIG9mZnNldHMgYXJlIG5vdAora25vd24gYmVmb3JlIGNvZGUgaXMgbG9jYXRlZC4gVGhlcmVmb3JlLCB0aGUgYXNzZW1ibGVyIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZQorY29tcGlsZXIgaXMgdGhlIHNhbWUsIGJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBleGVjdXRhYmxlIG1heQorZGlmZmVyIGZyb20gaW5zdHJ1Y3Rpb25zIGluIHRoZSBhc3NlbWJsZXIgY29kZS4KKy5TcAorUmVsYXhpbmcgbXVzdCBiZSB0dXJuZWQgb24gaWYgbGlua2VyIHN0dWJzIGFyZSBuZWVkZWQsIHNlZSB0aGUKK3NlY3Rpb24gb24gXGYoQ1dcKihDYEVJTkRcKihDJ1xmUiBhbmQgbGlua2VyIHN0dWJzIGJlbG93LgorLklQICJcZkJcLW1zcDhcZlIiIDQKKy5JWCBJdGVtICItbXNwOCIKK1RyZWF0IHRoZSBzdGFjayBwb2ludGVyIHJlZ2lzdGVyIGFzIGFuIDhcLWJpdCByZWdpc3RlciwKK2kuZS4gYXNzdW1lIHRoZSBoaWdoIGJ5dGUgb2YgdGhlIHN0YWNrIHBvaW50ZXIgaXMgemVyby4KK0luIGdlbmVyYWwsIHlvdSBkb24ndCBuZWVkIHRvIHNldCB0aGlzIG9wdGlvbiBieSBoYW5kLgorLlNwCitUaGlzIG9wdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHRvIHNlbGVjdCBhbmQKK2J1aWxkIG11bHRpbGlicyBmb3IgYXJjaGl0ZWN0dXJlcyBcZihDV1wqKENgYXZyMlwqKEMnXGZSIGFuZCBcZihDV1wqKENgYXZyMjVcKihDJ1xmUi4KK1RoZXNlIGFyY2hpdGVjdHVyZXMgbWl4IGRldmljZXMgd2l0aCBhbmQgd2l0aG91dCBcZihDV1wqKENgU1BIXCooQydcZlIuCitGb3IgYW55IHNldHRpbmcgb3RoZXIgdGhhbiBcZihDV1wqKENgXC1tbWN1PWF2cjJcKihDJ1xmUiBvciBcZihDV1wqKENgXC1tbWN1PWF2cjI1XCooQydcZlIKK3RoZSBjb21waWxlciBkcml2ZXIgd2lsbCBhZGQgb3IgcmVtb3ZlIHRoaXMgb3B0aW9uIGZyb20gdGhlIGNvbXBpbGVyCitwcm9wZXIncyBjb21tYW5kIGxpbmUsIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHRoZW4ga25vd3MgaWYgdGhlIGRldmljZQorb3IgYXJjaGl0ZWN0dXJlIGhhcyBhbiA4XC1iaXQgc3RhY2sgcG9pbnRlciBhbmQgdGh1cyBubyBcZihDV1wqKENgU1BIXCooQydcZlIKK3JlZ2lzdGVyIG9yIG5vdC4KKy5JUCAiXGZCXC1tc3RyaWN0XC1YXGZSIiA0CisuSVggSXRlbSAiLW1zdHJpY3QtWCIKK1VzZSBhZGRyZXNzIHJlZ2lzdGVyIFxmKENXXCooQ2BYXCooQydcZlIgaW4gYSB3YXkgcHJvcG9zZWQgYnkgdGhlIGhhcmR3YXJlLiAgVGhpcyBtZWFucwordGhhdCBcZihDV1wqKENgWFwqKEMnXGZSIGlzIG9ubHkgdXNlZCBpbiBpbmRpcmVjdCwgcG9zdC1pbmNyZW1lbnQgb3IKK3ByZS1kZWNyZW1lbnQgYWRkcmVzc2luZy4KKy5TcAorV2l0aG91dCB0aGlzIG9wdGlvbiwgdGhlIFxmKENXXCooQ2BYXCooQydcZlIgcmVnaXN0ZXIgbWF5IGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5CithcyBcZihDV1wqKENgWVwqKEMnXGZSIG9yIFxmKENXXCooQ2BaXCooQydcZlIgd2hpY2ggdGhlbiBpcyBlbXVsYXRlZCBieSBhZGRpdGlvbmFsCitpbnN0cnVjdGlvbnMuICAKK0ZvciBleGFtcGxlLCBsb2FkaW5nIGEgdmFsdWUgd2l0aCBcZihDV1wqKENgWCtjb25zdFwqKEMnXGZSIGFkZHJlc3Npbmcgd2l0aCBhCitzbWFsbCBub24tbmVnYXRpdmUgXGYoQ1dcKihDYGNvbnN0IDwgNjRcKihDJ1xmUiB0byBhIHJlZ2lzdGVyIFxmSVJuXGZSIGlzCitwZXJmb3JtZWQgYXMKKy5TcAorLlZiIDMKK1wmICAgICAgICBhZGl3IHIyNiwgY29uc3QgICA7IFggKz0gY29uc3QKK1wmICAgICAgICBsZCAgIDxSbj4sIFggICAgICAgIDsgPFJuPiA9ICpYCitcJiAgICAgICAgc2JpdyByMjYsIGNvbnN0ICAgOyBYIFwtPSBjb25zdAorLlZlCisuSVAgIlxmQlwtbXRpbnlcLXN0YWNrXGZSIiA0CisuSVggSXRlbSAiLW10aW55LXN0YWNrIgorT25seSBjaGFuZ2UgdGhlIGxvd2VyIDhAdGlle31iaXRzIG9mIHRoZSBzdGFjayBwb2ludGVyLgorLklQICJcZkJcLVdhZGRyXC1zcGFjZVwtY29udmVydFxmUiIgNAorLklYIEl0ZW0gIi1XYWRkci1zcGFjZS1jb252ZXJ0IgorV2FybiBhYm91dCBjb252ZXJzaW9ucyBiZXR3ZWVuIGFkZHJlc3Mgc3BhY2VzIGluIHRoZSBjYXNlIHdoZXJlIHRoZQorcmVzdWx0aW5nIGFkZHJlc3Mgc3BhY2UgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgaW5jb21pbmcgYWRkcmVzcyBzcGFjZS4KKy5QUAorXGYoQ1dcKihDYEVJTkRcKihDJ1xmUiBhbmQgRGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxMjggS2kgQnl0ZXMgb2YgRmxhc2gKKy5JWCBTdWJzZWN0aW9uICJFSU5EIGFuZCBEZXZpY2VzIHdpdGggbW9yZSB0aGFuIDEyOCBLaSBCeXRlcyBvZiBGbGFzaCIKKy5QUAorUG9pbnRlcnMgaW4gdGhlIGltcGxlbWVudGF0aW9uIGFyZSAxNkB0aWV7fWJpdHMgd2lkZS4KK1RoZSBhZGRyZXNzIG9mIGEgZnVuY3Rpb24gb3IgbGFiZWwgaXMgcmVwcmVzZW50ZWQgYXMgd29yZCBhZGRyZXNzIHNvCit0aGF0IGluZGlyZWN0IGp1bXBzIGFuZCBjYWxscyBjYW4gdGFyZ2V0IGFueSBjb2RlIGFkZHJlc3MgaW4gdGhlCityYW5nZSBvZiA2NEB0aWV7fUtpIHdvcmRzLgorLlBQCitJbiBvcmRlciB0byBmYWNpbGl0YXRlIGluZGlyZWN0IGp1bXAgb24gZGV2aWNlcyB3aXRoIG1vcmUgdGhhbiAxMjhAdGlle31LaQorYnl0ZXMgb2YgcHJvZ3JhbSBtZW1vcnkgc3BhY2UsIHRoZXJlIGlzIGEgc3BlY2lhbCBmdW5jdGlvbiByZWdpc3RlciBjYWxsZWQKK1wmXGYoQ1dcKihDYEVJTkRcKihDJ1xmUiB0aGF0IHNlcnZlcyBhcyBtb3N0IHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIHRhcmdldCBhZGRyZXNzCit3aGVuIFxmKENXXCooQ2BFSUNBTExcKihDJ1xmUiBvciBcZihDV1wqKENgRUlKTVBcKihDJ1xmUiBpbnN0cnVjdGlvbnMgYXJlIHVzZWQuCisuUFAKK0luZGlyZWN0IGp1bXBzIGFuZCBjYWxscyBvbiB0aGVzZSBkZXZpY2VzIGFyZSBoYW5kbGVkIGFzIGZvbGxvd3MgYnkKK3RoZSBjb21waWxlciBhbmQgYXJlIHN1YmplY3QgdG8gc29tZSBsaW1pdGF0aW9uczoKKy5JUCAiXChidSIgNAorVGhlIGNvbXBpbGVyIG5ldmVyIHNldHMgXGYoQ1dcKihDYEVJTkRcKihDJ1xmUi4KKy5JUCAiXChidSIgNAorVGhlIGNvbXBpbGVyIHVzZXMgXGYoQ1dcKihDYEVJTkRcKihDJ1xmUiBpbXBsaWNpdGVseSBpbiBcZihDV1wqKENgRUlDQUxMXCooQydcZlIvXGYoQ1dcKihDYEVJSk1QXCooQydcZlIKK2luc3RydWN0aW9ucyBvciBtaWdodCByZWFkIFxmKENXXCooQ2BFSU5EXCooQydcZlIgZGlyZWN0bHkgaW4gb3JkZXIgdG8gZW11bGF0ZSBhbgoraW5kaXJlY3QgY2FsbC9qdW1wIGJ5IG1lYW5zIG9mIGEgXGYoQ1dcKihDYFJFVFwqKEMnXGZSIGluc3RydWN0aW9uLgorLklQICJcKGJ1IiA0CitUaGUgY29tcGlsZXIgYXNzdW1lcyB0aGF0IFxmKENXXCooQ2BFSU5EXCooQydcZlIgbmV2ZXIgY2hhbmdlcyBkdXJpbmcgdGhlIHN0YXJ0dXAKK2NvZGUgb3IgZHVyaW5nIHRoZSBhcHBsaWNhdGlvbi4gSW4gcGFydGljdWxhciwgXGYoQ1dcKihDYEVJTkRcKihDJ1xmUiBpcyBub3QKK3NhdmVkL3Jlc3RvcmVkIGluIGZ1bmN0aW9uIG9yIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKK3Byb2xvZ3VlL2VwaWxvZ3VlLgorLklQICJcKGJ1IiA0CitGb3IgaW5kaXJlY3QgY2FsbHMgdG8gZnVuY3Rpb25zIGFuZCBjb21wdXRlZCBnb3RvLCB0aGUgbGlua2VyCitnZW5lcmF0ZXMgXGZJc3R1YnNcZlIuIFN0dWJzIGFyZSBqdW1wIHBhZHMgc29tZXRpbWVzIGFsc28gY2FsbGVkCitcJlxmSXRyYW1wb2xpbmVzXGZSLiBUaHVzLCB0aGUgaW5kaXJlY3QgY2FsbC9qdW1wIGp1bXBzIHRvIHN1Y2ggYSBzdHViLgorVGhlIHN0dWIgY29udGFpbnMgYSBkaXJlY3QganVtcCB0byB0aGUgZGVzaXJlZCBhZGRyZXNzLgorLklQICJcKGJ1IiA0CitMaW5rZXIgcmVsYXhhdGlvbiBtdXN0IGJlIHR1cm5lZCBvbiBzbyB0aGF0IHRoZSBsaW5rZXIgd2lsbCBnZW5lcmF0ZQordGhlIHN0dWJzIGNvcnJlY3RseSBhbiBhbGwgc2l0dWFsdGlvbi4gU2VlIHRoZSBjb21waWxlciBvcHRpb24KK1wmXGYoQ1dcKihDYFwtbXJlbGF4XCooQydcZlIgYW5kIHRoZSBsaW5sZXIgb3B0aW9uIFxmKENXXCooQ2BcLVwtcmVsYXhcKihDJ1xmUi4KK1RoZXJlIGFyZSBjb3JuZXIgY2FzZXMgd2hlcmUgdGhlIGxpbmtlciBpcyBzdXBwb3NlZCB0byBnZW5lcmF0ZSBzdHVicworYnV0IGFib3J0cyB3aXRob3V0IHJlbGF4YXRpb24gYW5kIHdpdGhvdXQgYSBoZWxwZnVsIGVycm9yIG1lc3NhZ2UuCisuSVAgIlwoYnUiIDQKK1RoZSBkZWZhdWx0IGxpbmtlciBzY3JpcHQgaXMgYXJyYW5nZWQgZm9yIGNvZGUgd2l0aCBcZihDV1wqKENgRUlORCA9IDBcKihDJ1xmUi4KK0lmIGNvZGUgaXMgc3VwcG9zZWQgdG8gd29yayBmb3IgYSBzZXR1cCB3aXRoIFxmKENXXCooQ2BFSU5EICE9IDBcKihDJ1xmUiwgYSBjdXN0b20KK2xpbmtlciBzY3JpcHQgaGFzIHRvIGJlIHVzZWQgaW4gb3JkZXIgdG8gcGxhY2UgdGhlIHNlY3Rpb25zIHdob3NlCituYW1lIHN0YXJ0IHdpdGggXGYoQ1dcKihDYC50cmFtcG9saW5lc1wqKEMnXGZSIGludG8gdGhlIHNlZ21lbnQgd2hlcmUgXGYoQ1dcKihDYEVJTkRcKihDJ1xmUgorcG9pbnRzIHRvLgorLklQICJcKGJ1IiA0CitUaGUgc3RhcnR1cCBjb2RlIGZyb20gbGliZ2NjIG5ldmVyIHNldHMgXGYoQ1dcKihDYEVJTkRcKihDJ1xmUi4KK05vdGljZSB0aGF0IHN0YXJ0dXAgY29kZSBpcyBhIGJsZW5kIG9mIGNvZGUgZnJvbSBsaWJnY2MgYW5kIEFWUi1MaWJDLgorRm9yIHRoZSBpbXBhY3Qgb2YgQVZSLUxpYkMgb24gXGYoQ1dcKihDYEVJTkRcKihDJ1xmUiwgc2VlIHRoZQorQVZSLUxpYkNcIHVzZXJcIG1hbnVhbCAoXGYoQ1dcKihDYGh0dHA6Ly9ub25nbnUub3JnL2F2clwtbGliYy91c2VyXC1tYW51YWwvXCooQydcZlIpLgorLklQICJcKGJ1IiA0CitJdCBpcyBsZWdpdGltYXRlIGZvciB1c2VyLXNwZWNpZmljIHN0YXJ0dXAgY29kZSB0byBzZXQgdXAgXGYoQ1dcKihDYEVJTkRcKihDJ1xmUgorZWFybHksIGZvciBleGFtcGxlIGJ5IG1lYW5zIG9mIGluaXRpYWxpemF0aW9uIGNvZGUgbG9jYXRlZCBpbgorc2VjdGlvbiBcZihDV1wqKENgLmluaXQzXCooQydcZlIuIFN1Y2ggY29kZSBydW5zIHByaW9yIHRvIGdlbmVyYWwgc3RhcnR1cCBjb2RlCit0aGF0IGluaXRpYWxpemVzIFxzLTFSQU1cczAgYW5kIGNhbGxzIGNvbnN0cnVjdG9ycywgYnV0IGFmdGVyIHRoZSBiaXQKK29mIHN0YXJ0dXAgY29kZSBmcm9tIEFWUi1MaWJDIHRoYXQgc2V0cyBcZihDV1wqKENgRUlORFwqKEMnXGZSIHRvIHRoZSBzZWdtZW50Cit3aGVyZSB0aGUgdmVjdG9yIHRhYmxlIGlzIGxvY2F0ZWQuCisuU3AKKy5WYiAxCitcJiAgICAgICAgI2luY2x1ZGUgPGF2ci9pby5oPgorXCYgICAgICAgIAorXCYgICAgICAgIHN0YXRpYyB2b2lkCitcJiAgICAgICAgX1x8X2F0dHJpYnV0ZV9cfF8oKHNlY3Rpb24oIi5pbml0MyIpLG5ha2VkLHVzZWQsbm9faW5zdHJ1bWVudF9mdW5jdGlvbikpCitcJiAgICAgICAgaW5pdDNfc2V0X2VpbmQgKHZvaWQpCitcJiAgICAgICAgeworXCYgICAgICAgICAgX1x8X2FzbSB2b2xhdGlsZSAoImxkaSByMjQscG1faGg4KF9cfF90cmFtcG9saW5lc19zdGFydClcZW5cZXQiCitcJiAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCAlaTAscjI0IiA6OiAibiIgKCZFSU5EKSA6ICJyMjQiLCJtZW1vcnkiKTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorVGhlIFxmKENXXCooQ2BfXHxfdHJhbXBvbGluZXNfc3RhcnRcKihDJ1xmUiBzeW1ib2wgaXMgZGVmaW5lZCBpbiB0aGUgbGlua2VyIHNjcmlwdC4KKy5JUCAiXChidSIgNAorU3R1YnMgYXJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBsaW5rZXIgaWYKK3RoZSBmb2xsb3dpbmcgdHdvIGNvbmRpdGlvbnMgYXJlIG1ldDoKKy5SUyA0CisuaWUgbiAuSVAgIlwtPFRoZSBhZGRyZXNzIG9mIGEgbGFiZWwgaXMgdGFrZW4gYnkgbWVhbnMgb2YgdGhlICIiZ3MiIiBtb2RpZmllcj4iIDQKKy5lbCAuSVAgIlwtPFRoZSBhZGRyZXNzIG9mIGEgbGFiZWwgaXMgdGFrZW4gYnkgbWVhbnMgb2YgdGhlIFxmKENXZ3NcZlIgbW9kaWZpZXI+IiA0CisuSVggSXRlbSAiLTxUaGUgYWRkcmVzcyBvZiBhIGxhYmVsIGlzIHRha2VuIGJ5IG1lYW5zIG9mIHRoZSBncyBtb2RpZmllcj4iCisoc2hvcnQgZm9yIFxmSWdlbmVyYXRlIHN0dWJzXGZSKSBsaWtlIHNvOgorLlNwCisuVmIgMgorXCYgICAgICAgIExESSByMjQsIGxvOChncyg8ZnVuYz4pKQorXCYgICAgICAgIExESSByMjUsIGhpOChncyg8ZnVuYz4pKQorLlZlCisuSVAgIlwtPFRoZSBmaW5hbCBsb2NhdGlvbiBvZiB0aGF0IGxhYmVsIGlzIGluIGEgY29kZSBzZWdtZW50PiIgNAorLklYIEl0ZW0gIi08VGhlIGZpbmFsIGxvY2F0aW9uIG9mIHRoYXQgbGFiZWwgaXMgaW4gYSBjb2RlIHNlZ21lbnQ+IgorXCZcZklvdXRzaWRlXGZSIHRoZSBzZWdtZW50IHdoZXJlIHRoZSBzdHVicyBhcmUgbG9jYXRlZC4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcKGJ1IiA0CitUaGUgY29tcGlsZXIgZW1pdHMgc3VjaCBcZihDV1wqKENgZ3NcKihDJ1xmUiBtb2RpZmllcnMgZm9yIGNvZGUgbGFiZWxzIGluIHRoZQorZm9sbG93aW5nIHNpdHVhdGlvbnM6CisuUlMgNAorLklQICJcLTxUYWtpbmcgYWRkcmVzcyBvZiBhIGZ1bmN0aW9uIG9yIGNvZGUgbGFiZWwuPiIgNAorLklYIEl0ZW0gIi08VGFraW5nIGFkZHJlc3Mgb2YgYSBmdW5jdGlvbiBvciBjb2RlIGxhYmVsLj4iCisuUEQgMAorLklQICJcLTxDb21wdXRlZCBnb3RvLj4iIDQKKy5JWCBJdGVtICItPENvbXB1dGVkIGdvdG8uPiIKKy5JUCAiXC08SWYgcHJvbG9ndWUtc2F2ZSBmdW5jdGlvbiBpcyB1c2VkLCBzZWUgXGZCXC1tY2FsbFwtcHJvbG9ndWVzXGZSPiIgNAorLklYIEl0ZW0gIi08SWYgcHJvbG9ndWUtc2F2ZSBmdW5jdGlvbiBpcyB1c2VkLCBzZWUgLW1jYWxsLXByb2xvZ3Vlcz4iCisuUEQKK2NvbW1hbmQtbGluZSBvcHRpb24uCisuSVAgIlwtPFN3aXRjaC9jYXNlIGRpc3BhdGNoIHRhYmxlcy4gSWYgeW91IGRvIG5vdCB3YW50IHN1Y2ggZGlzcGF0Y2g+IiA0CisuSVggSXRlbSAiLTxTd2l0Y2gvY2FzZSBkaXNwYXRjaCB0YWJsZXMuIElmIHlvdSBkbyBub3Qgd2FudCBzdWNoIGRpc3BhdGNoPiIKK3RhYmxlcyB5b3UgY2FuIHNwZWNpZnkgdGhlIFxmQlwtZm5vXC1qdW1wXC10YWJsZXNcZlIgY29tbWFuZC1saW5lIG9wdGlvbi4KKy5JUCAiXC08QyBhbmQgXCooQysgY29uc3RydWN0b3JzL2Rlc3RydWN0b3JzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC9zaHV0ZG93bi4+IiA0CisuSVggSXRlbSAiLTxDIGFuZCAgY29uc3RydWN0b3JzL2Rlc3RydWN0b3JzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC9zaHV0ZG93bi4+IgorLlBEIDAKKy5pZSBuIC5JUCAiXC08SWYgdGhlIHRvb2xzIGhpdCBhICIiZ3MoKSIiIG1vZGlmaWVyIGV4cGxhaW5lZCBhYm92ZS4+IiA0CisuZWwgLklQICJcLTxJZiB0aGUgdG9vbHMgaGl0IGEgXGYoQ1dncygpXGZSIG1vZGlmaWVyIGV4cGxhaW5lZCBhYm92ZS4+IiA0CisuSVggSXRlbSAiLTxJZiB0aGUgdG9vbHMgaGl0IGEgZ3MoKSBtb2RpZmllciBleHBsYWluZWQgYWJvdmUuPiIKKy5SRQorLlJTIDQKKy5SRQorLklQICJcKGJ1IiA0CisuUEQKK0p1bXBpbmcgdG8gbm9uLXN5bWJvbGljIGFkZHJlc3NlcyBsaWtlIHNvIGlzIFxmSW5vdFxmUiBzdXBwb3J0ZWQ6CisuU3AKKy5WYiA1CitcJiAgICAgICAgaW50IG1haW4gKHZvaWQpCitcJiAgICAgICAgeworXCYgICAgICAgICAgICAvKiBDYWxsIGZ1bmN0aW9uIGF0IHdvcmQgYWRkcmVzcyAweDIgKi8KK1wmICAgICAgICAgICAgcmV0dXJuICgoaW50KCopKHZvaWQpKSAweDIpKCk7CitcJiAgICAgICAgfQorLlZlCisuU3AKK0luc3RlYWQsIGEgc3R1YiBoYXMgdG8gYmUgc2V0IHVwLCBpLmUuIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkCit0aHJvdWdoIGEgc3ltYm9sIChcZihDV1wqKENgZnVuY180XCooQydcZlIgaW4gdGhlIGV4YW1wbGUpOgorLlNwCisuVmIgMworXCYgICAgICAgIGludCBtYWluICh2b2lkKQorXCYgICAgICAgIHsKK1wmICAgICAgICAgICAgZXh0ZXJuIGludCBmdW5jXzQgKHZvaWQpOworXCYgICAgICAgIAorXCYgICAgICAgICAgICAvKiBDYWxsIGZ1bmN0aW9uIGF0IGJ5dGUgYWRkcmVzcyAweDQgKi8KK1wmICAgICAgICAgICAgcmV0dXJuIGZ1bmNfNCgpOworXCYgICAgICAgIH0KKy5WZQorLlNwCithbmQgdGhlIGFwcGxpY2F0aW9uIGJlIGxpbmtlZCB3aXRoIFxmKENXXCooQ2BcLVdsLFwtXC1kZWZzeW0sZnVuY180PTB4NFwqKEMnXGZSLgorQWx0ZXJuYXRpdmVseSwgXGYoQ1dcKihDYGZ1bmNfNFwqKEMnXGZSIGNhbiBiZSBkZWZpbmVkIGluIHRoZSBsaW5rZXIgc2NyaXB0LgorLlBQCitIYW5kbGluZyBvZiB0aGUgXGYoQ1dcKihDYFJBTVBEXCooQydcZlIsIFxmKENXXCooQ2BSQU1QWFwqKEMnXGZSLCBcZihDV1wqKENgUkFNUFlcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYFJBTVBaXCooQydcZlIgU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlcnMKKy5JWCBTdWJzZWN0aW9uICJIYW5kbGluZyBvZiB0aGUgUkFNUEQsIFJBTVBYLCBSQU1QWSBhbmQgUkFNUFogU3BlY2lhbCBGdW5jdGlvbiBSZWdpc3RlcnMiCisuUFAKK1NvbWUgXHMtMUFWUlxzMCBkZXZpY2VzIHN1cHBvcnQgbWVtb3JpZXMgbGFyZ2VyIHRoYW4gdGhlIDY0QHRpZXt9S2lCIHJhbmdlCit0aGF0IGNhbiBiZSBhY2Nlc3NlZCB3aXRoIDE2XC1iaXQgcG9pbnRlcnMuICBUbyBhY2Nlc3MgbWVtb3J5IGxvY2F0aW9ucworb3V0c2lkZSB0aGlzIDY0QHRpZXt9S2lCIHJhbmdlLCB0aGUgY29udGVudGVudCBvZiBhIFxmKENXXCooQ2BSQU1QXCooQydcZlIKK3JlZ2lzdGVyIGlzIHVzZWQgYXMgaGlnaCBwYXJ0IG9mIHRoZSBhZGRyZXNzOgorVGhlIFxmKENXXCooQ2BYXCooQydcZlIsIFxmKENXXCooQ2BZXCooQydcZlIsIFxmKENXXCooQ2BaXCooQydcZlIgYWRkcmVzcyByZWdpc3RlciBpcyBjb25jYXRlbmF0ZWQKK3dpdGggdGhlIFxmKENXXCooQ2BSQU1QWFwqKEMnXGZSLCBcZihDV1wqKENgUkFNUFlcKihDJ1xmUiwgXGYoQ1dcKihDYFJBTVBaXCooQydcZlIgc3BlY2lhbCBmdW5jdGlvbgorcmVnaXN0ZXIsIHJlc3BlY3RpdmVseSwgdG8gZ2V0IGEgd2lkZSBhZGRyZXNzLiBTaW1pbGFybHksCitcJlxmKENXXCooQ2BSQU1QRFwqKEMnXGZSIGlzIHVzZWQgdG9nZXRoZXIgd2l0aCBkaXJlY3QgYWRkcmVzc2luZy4KKy5JUCAiXChidSIgNAorVGhlIHN0YXJ0dXAgY29kZSBpbml0aWFsaXplcyB0aGUgXGYoQ1dcKihDYFJBTVBcKihDJ1xmUiBzcGVjaWFsIGZ1bmN0aW9uCityZWdpc3RlcnMgd2l0aCB6ZXJvLgorLklQICJcKGJ1IiA0CitJZiBhIFxmQlxzLTFBVlJcczAgTmFtZWQgQWRkcmVzcyBTcGFjZXMsbmFtZWQgYWRkcmVzcyBzcGFjZVxmUiBvdGhlciB0aGFuCitnZW5lcmljIG9yIFxmKENXXCooQ2BfXHxfZmxhc2hcKihDJ1xmUiBpcyB1c2VkLCB0aGVuIFxmKENXXCooQ2BSQU1QWlwqKEMnXGZSIGlzIHNldAorYXMgbmVlZGVkIGJlZm9yZSB0aGUgb3BlcmF0aW9uLgorLklQICJcKGJ1IiA0CitJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIFxzLTFSQU1cczAgbGFyZ2VyIHRoYW4gNjRAdGlle0tpQn0gYW5kIHRoZSBjb21waWxlcgorbmVlZHMgdG8gY2hhbmdlIFxmKENXXCooQ2BSQU1QWlwqKEMnXGZSIHRvIGFjY29tcGxpc2ggYW4gb3BlcmF0aW9uLCBcZihDV1wqKENgUkFNUFpcKihDJ1xmUgoraXMgcmVzZXQgdG8gemVybyBhZnRlciB0aGUgb3BlcmF0aW9uLgorLklQICJcKGJ1IiA0CitJZiB0aGUgZGV2aWNlIGNvbWVzIHdpdGggYSBzcGVjaWZpYyBcZihDV1wqKENgUkFNUFwqKEMnXGZSIHJlZ2lzdGVyLCB0aGUgXHMtMUlTUlxzMAorcHJvbG9ndWUvZXBpbG9ndWUgc2F2ZXMvcmVzdG9yZXMgdGhhdCBccy0xU0ZSXHMwIGFuZCBpbml0aWFsaXplcyBpdCB3aXRoCit6ZXJvIGluIGNhc2UgdGhlIFxzLTFJU1JcczAgY29kZSBtaWdodCAoaW1wbGljaXRseSkgdXNlIGl0LgorLklQICJcKGJ1IiA0CitcJlxzLTFSQU1cczAgbGFyZ2VyIHRoYW4gNjRAdGlle0tpQn0gaXMgbm90IHN1cHBvcnRlZCBieSBccy0xR0NDXHMwIGZvciBccy0xQVZSXHMwIHRhcmdldHMuCitJZiB5b3UgdXNlIGlubGluZSBhc3NlbWJsZXIgdG8gcmVhZCBmcm9tIGxvY2F0aW9ucyBvdXRzaWRlIHRoZQorMTZcLWJpdCBhZGRyZXNzIHJhbmdlIGFuZCBjaGFuZ2Ugb25lIG9mIHRoZSBcZihDV1wqKENgUkFNUFwqKEMnXGZSIHJlZ2lzdGVycywKK3lvdSBtdXN0IHJlc2V0IGl0IHRvIHplcm8gYWZ0ZXIgdGhlIGFjY2Vzcy4KKy5QUAorXHMtMUFWUlxzMCBCdWlsdC1pbiBNYWNyb3MKKy5JWCBTdWJzZWN0aW9uICJBVlIgQnVpbHQtaW4gTWFjcm9zIgorLlBQCitcJlxzLTFHQ0NcczAgZGVmaW5lcyBzZXZlcmFsIGJ1aWx0LWluIG1hY3JvcyBzbyB0aGF0IHRoZSB1c2VyIGNvZGUgY2FuIHRlc3QKK2ZvciB0aGUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBmZWF0dXJlcy4gIEFsbW9zdCBhbnkgb2YgdGhlIGZvbGxvd2luZworYnVpbHQtaW4gbWFjcm9zIGFyZSBkZWR1Y2VkIGZyb20gZGV2aWNlIGNhcGFiaWxpdGllcyBhbmQgdGh1cwordHJpZ2dlcmVkIGJ5IHRoZSBcZihDV1wqKENgXC1tbWN1PVwqKEMnXGZSIGNvbW1hbmQtbGluZSBvcHRpb24uCisuUFAKK0ZvciBldmVuIG1vcmUgQVZSLXNwZWNpZmljIGJ1aWx0LWluIG1hY3JvcyBzZWUKK1wmXGZCXHMtMUFWUlxzMCBOYW1lZCBBZGRyZXNzIFNwYWNlc1xmUiBhbmQgXGZCXHMtMUFWUlxzMCBCdWlsdC1pbiBGdW5jdGlvbnNcZlIuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9BUkNIX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfQVJDSF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9BUkNIX18iCitCdWlsZC1pbiBtYWNybyB0aGF0IHJlc29sdmVzIHRvIGEgZGVjaW1hbCBudW1iZXIgdGhhdCBpZGVudGlmaWVzIHRoZQorYXJjaGl0ZWN0dXJlIGFuZCBkZXBlbmRzIG9uIHRoZSBcZihDV1wqKENgXC1tbWN1PVxmKENJbWN1XGYoQ1dcKihDJ1xmUiBvcHRpb24uCitQb3NzaWJsZSB2YWx1ZXMgYXJlOgorLlNwCitcJlxmKENXMlxmUiwgXGYoQ1cyNVxmUiwgXGYoQ1czXGZSLCBcZihDVzMxXGZSLCBcZihDVzM1XGZSLAorXCZcZihDVzRcZlIsIFxmKENXNVxmUiwgXGYoQ1c1MVxmUiwgXGYoQ1c2XGZSLCBcZihDVzEwMlxmUiwgXGYoQ1cxMDRcZlIsCitcJlxmKENXMTA1XGZSLCBcZihDVzEwNlxmUiwgXGYoQ1cxMDdcZlIKKy5TcAorZm9yIFxmSW1jdVxmUj1cZihDV1wqKENgYXZyMlwqKEMnXGZSLCBcZihDV1wqKENgYXZyMjVcKihDJ1xmUiwgXGYoQ1dcKihDYGF2cjNcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGF2cjMxXCooQydcZlIsIFxmKENXXCooQ2BhdnIzNVwqKEMnXGZSLCBcZihDV1wqKENgYXZyNFwqKEMnXGZSLCBcZihDV1wqKENgYXZyNVwqKEMnXGZSLCBcZihDV1wqKENgYXZyNTFcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGF2cjZcKihDJ1xmUiwgXGYoQ1dcKihDYGF2cnhtZWdhMlwqKEMnXGZSLCBcZihDV1wqKENgYXZyeG1lZ2E0XCooQydcZlIsIFxmKENXXCooQ2BhdnJ4bWVnYTVcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGF2cnhtZWdhNlwqKEMnXGZSLCBcZihDV1wqKENgYXZyeG1lZ2E3XCooQydcZlIsIHJlc3BlY3RpdmVseS4KK0lmIFxmSW1jdVxmUiBzcGVjaWZpZXMgYSBkZXZpY2UsIHRoaXMgYnVpbHQtaW4gbWFjcm8gaXMgc2V0CithY2NvcmRpbmdseS4gRm9yIGV4YW1wbGUsIHdpdGggXGYoQ1dcKihDYFwtbW1jdT1hdG1lZ2E4XCooQydcZlIgdGhlIG1hY3JvIHdpbGwgYmUKK2RlZmluZWQgdG8gXGYoQ1c0XGZSLgorLmllIG4gLklQICIiIl9cfF9BVlJfXGYoQ0lEZXZpY2VcZihDV19cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX1xmKENJRGV2aWNlXGYoQ1dfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfRGV2aWNlX18iCitTZXR0aW5nIFxmKENXXCooQ2BcLW1tY3U9XGYoQ0lkZXZpY2VcZihDV1wqKEMnXGZSIGRlZmluZXMgdGhpcyBidWlsdC1pbiBtYWNybyB3aGljaCByZWZsZWN0cwordGhlIGRldmljZSdzIG5hbWUuIEZvciBleGFtcGxlLCBcZihDV1wqKENgXC1tbWN1PWF0bWVnYThcKihDJ1xmUiBkZWZpbmVzIHRoZQorYnVpbHQtaW4gbWFjcm8gXGYoQ1dcKihDYF9cfF9BVlJfQVRtZWdhOF9cfF9cKihDJ1xmUiwgXGYoQ1dcKihDYFwtbW1jdT1hdHRpbnkyNjFhXCooQydcZlIgZGVmaW5lcworXCZcZihDV1wqKENgX1x8X0FWUl9BVHRpbnkyNjFBX1x8X1wqKEMnXGZSLCBldGMuCisuU3AKK1RoZSBidWlsdC1pbiBtYWNyb3MnIG5hbWVzIGZvbGxvdwordGhlIHNjaGVtZSBcZihDV1wqKENgX1x8X0FWUl9cZihDSURldmljZVxmKENXX1x8X1wqKEMnXGZSIHdoZXJlIFxmSURldmljZVxmUiBpcwordGhlIGRldmljZSBuYW1lIGFzIGZyb20gdGhlIFxzLTFBVlJcczAgdXNlciBtYW51YWwuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KK1wmXGZJRGV2aWNlXGZSIGluIHRoZSBidWlsdC1pbiBtYWNybyBhbmQgXGZJZGV2aWNlXGZSIGluCitcJlxmKENXXCooQ2BcLW1tY3U9XGYoQ0lkZXZpY2VcZihDV1wqKEMnXGZSIGlzIHRoYXQgdGhlIGxhdHRlciBpcyBhbHdheXMgbG93ZXJjYXNlLgorLlNwCitJZiBcZklkZXZpY2VcZlIgaXMgbm90IGEgZGV2aWNlIGJ1dCBvbmx5IGEgY29yZSBhcmNoaXRlY3R1cmUgbGlrZQorXCZcZihDV1wqKENgYXZyNTFcKihDJ1xmUiwgdGhpcyBtYWNybyB3aWxsIG5vdCBiZSBkZWZpbmVkLgorLmllIG4gLklQICIiIl9cfF9BVlJfWE1FR0FfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9YTUVHQV9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9YTUVHQV9fIgorVGhlIGRldmljZSAvIGFyY2hpdGVjdHVyZSBiZWxvbmdzIHRvIHRoZSBccy0xWE1FR0FcczAgZmFtaWx5IG9mIGRldmljZXMuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX0VMUE1fXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFX0VMUE1fXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9FTFBNX18iCitUaGUgZGV2aWNlIGhhcyB0aGUgdGhlIFxmKENXXCooQ2BFTFBNXCooQydcZlIgaW5zdHJ1Y3Rpb24uCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX0VMUE1YX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfSEFWRV9FTFBNWF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9IQVZFX0VMUE1YX18iCitUaGUgZGV2aWNlIGhhcyB0aGUgXGYoQ1dcKihDYEVMUE0gUlxmKENJblxmKENXLFpcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYEVMUE0KK1JcZihDSW5cZihDVyxaK1wqKEMnXGZSIGluc3RydWN0aW9ucy4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0hBVkVfTU9WV19cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfTU9WV19cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9IQVZFX01PVldfXyIKK1RoZSBkZXZpY2UgaGFzIHRoZSBcZihDV1wqKENgTU9WV1wqKEMnXGZSIGluc3RydWN0aW9uIHRvIHBlcmZvcm0gMTZcLWJpdAorcmVnaXN0ZXItcmVnaXN0ZXIgbW92ZXMuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX0xQTVhfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFX0xQTVhfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9MUE1YX18iCitUaGUgZGV2aWNlIGhhcyB0aGUgXGYoQ1dcKihDYExQTSBSXGYoQ0luXGYoQ1csWlwqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgTFBNIFJcZihDSW5cZihDVyxaK1wqKEMnXGZSIGluc3RydWN0aW9ucy4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0hBVkVfTVVMX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfSEFWRV9NVUxfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9NVUxfXyIKK1RoZSBkZXZpY2UgaGFzIGEgaGFyZHdhcmUgbXVsdGlwbGllci4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0hBVkVfSk1QX0NBTExfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl9IQVZFX0pNUF9DQUxMX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfSk1QX0NBTExfXyIKK1RoZSBkZXZpY2UgaGFzIHRoZSBcZihDV1wqKENgSk1QXCooQydcZlIgYW5kIFxmKENXXCooQ2BDQUxMXCooQydcZlIgaW5zdHJ1Y3Rpb25zLgorVGhpcyBpcyB0aGUgY2FzZSBmb3IgZGV2aWNlcyB3aXRoIGF0IGxlYXN0IDE2QHRpZXt9S2lCIG9mIHByb2dyYW0KK21lbW9yeS4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0hBVkVfRUlKTVBfRUlDQUxMX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfSEFWRV9FSUpNUF9FSUNBTExfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9FSUpNUF9FSUNBTExfXyIKKy5QRCAwCisuaWUgbiAuSVAgIiIiX1x8X0FWUl8zX0JZVEVfUENfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl8zX0JZVEVfUENfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfM19CWVRFX1BDX18iCisuUEQKK1RoZSBkZXZpY2UgaGFzIHRoZSBcZihDV1wqKENgRUlKTVBcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYEVJQ0FMTFwqKEMnXGZSIGluc3RydWN0aW9ucy4KK1RoaXMgaXMgdGhlIGNhc2UgZm9yIGRldmljZXMgd2l0aCBtb3JlIHRoYW4gMTI4QHRpZXt9S2lCIG9mIHByb2dyYW0gbWVtb3J5LgorVGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIHByb2dyYW0gY291bnRlcgorKFxzLTFQQ1xzMCkgaXMgM0B0aWV7fWJ5dGVzIHdpZGUuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl8yX0JZVEVfUENfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X0FWUl8yX0JZVEVfUENfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfMl9CWVRFX1BDX18iCitUaGUgcHJvZ3JhbSBjb3VudGVyIChccy0xUENcczApIGlzIDJAdGlle31ieXRlcyB3aWRlLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBkZXZpY2VzCit3aXRoIHVwIHRvIDEyOEB0aWV7fUtpQiBvZiBwcm9ncmFtIG1lbW9yeS4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0hBVkVfOEJJVF9TUF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfOEJJVF9TUF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9IQVZFXzhCSVRfU1BfXyIKKy5QRCAwCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFXzE2QklUX1NQX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfSEFWRV8xNkJJVF9TUF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9IQVZFXzE2QklUX1NQX18iCisuUEQKK1RoZSBzdGFjayBwb2ludGVyIChccy0xU1BcczApIHJlZ2lzdGVyIGlzIHRyZWF0ZWQgYXMgOFwtYml0IHJlc3BlY3RpdmVseQorMTZcLWJpdCByZWdpc3RlciBieSB0aGUgY29tcGlsZXIuCitUaGUgZGVmaW5pdGlvbiBvZiB0aGVzZSBtYWNyb3MgaXMgYWZmZWN0ZWQgYnkgXGYoQ1dcKihDYFwtbXRpbnlcLXN0YWNrXCooQydcZlIuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX1NQSF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfU1BIX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0hBVkVfU1BIX18iCisuUEQgMAorLmllIG4gLklQICIiIl9cfF9BVlJfU1A4X1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfU1A4X1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX1NQOF9fIgorLlBECitUaGUgZGV2aWNlIGhhcyB0aGUgXHMtMVNQSFxzMCAoaGlnaCBwYXJ0IG9mIHN0YWNrIHBvaW50ZXIpIHNwZWNpYWwgZnVuY3Rpb24KK3JlZ2lzdGVyIG9yIGhhcyBhbiA4XC1iaXQgc3RhY2sgcG9pbnRlciwgcmVzcGVjdGl2ZWx5LgorVGhlIGRlZmluaXRpb24gb2YgdGhlc2UgbWFjcm9zIGlzIGFmZmVjdGVkIGJ5IFxmKENXXCooQ2BcLW1tY3U9XCooQydcZlIgYW5kCitpbiB0aGUgY2FzZXMgb2YgXGYoQ1dcKihDYFwtbW1jdT1hdnIyXCooQydcZlIgYW5kIFxmKENXXCooQ2BcLW1tY3U9YXZyMjVcKihDJ1xmUiBhbHNvCitieSBcZihDV1wqKENgXC1tc3A4XCooQydcZlIuCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9IQVZFX1JBTVBEX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfSEFWRV9SQU1QRF9cfF9cZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9IQVZFX1JBTVBEX18iCisuUEQgMAorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV9SQU1QWF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfUkFNUFhfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9SQU1QWF9fIgorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV9SQU1QWV9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfUkFNUFlfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9SQU1QWV9fIgorLmllIG4gLklQICIiIl9cfF9BVlJfSEFWRV9SQU1QWl9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0hBVkVfUkFNUFpfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfSEFWRV9SQU1QWl9fIgorLlBECitUaGUgZGV2aWNlIGhhcyB0aGUgXGYoQ1dcKihDYFJBTVBEXCooQydcZlIsIFxmKENXXCooQ2BSQU1QWFwqKEMnXGZSLCBcZihDV1wqKENgUkFNUFlcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYFJBTVBaXCooQydcZlIgc3BlY2lhbCBmdW5jdGlvbiByZWdpc3RlciwgcmVzcGVjdGl2ZWx5LgorLmllIG4gLklQICIiIl9cfF9OT19JTlRFUlJVUFRTX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9OT19JTlRFUlJVUFRTX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fTk9fSU5URVJSVVBUU19fIgorVGhpcyBtYWNybyByZWZsZWN0cyB0aGUgXGYoQ1dcKihDYFwtbW5vXC1pbnRlcnJ1cHRzXCooQydcZlIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX0VSUkFUQV9TS0lQX1x8XyIiIiA0CisuZWwgLklQICJcZihDV19cfF9BVlJfRVJSQVRBX1NLSVBfXHxfXGZSIiA0CisuSVggSXRlbSAiX19BVlJfRVJSQVRBX1NLSVBfXyIKKy5QRCAwCisuaWUgbiAuSVAgIiIiX1x8X0FWUl9FUlJBVEFfU0tJUF9KTVBfQ0FMTF9cfF8iIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX0VSUkFUQV9TS0lQX0pNUF9DQUxMX1x8X1xmUiIgNAorLklYIEl0ZW0gIl9fQVZSX0VSUkFUQV9TS0lQX0pNUF9DQUxMX18iCisuUEQKK1NvbWUgXHMtMUFWUlxzMCBkZXZpY2VzIChccy0xQVQ5MFM4NTE1XHMwLCBBVG1lZ2ExMDMpIG11c3Qgbm90IHNraXAgMzJcLWJpdAoraW5zdHJ1Y3Rpb25zIGJlY2F1c2Ugb2YgYSBoYXJkd2FyZSBlcnJhdHVtLiAgU2tpcCBpbnN0cnVjdGlvbnMgYXJlCitcJlxmKENXXCooQ2BTQlJTXCooQydcZlIsIFxmKENXXCooQ2BTQlJDXCooQydcZlIsIFxmKENXXCooQ2BTQklTXCooQydcZlIsIFxmKENXXCooQ2BTQklDXCooQydcZlIgYW5kIFxmKENXXCooQ2BDUFNFXCooQydcZlIuCitUaGUgc2Vjb25kIG1hY3JvIGlzIG9ubHkgZGVmaW5lZCBpZiBcZihDV1wqKENgX1x8X0FWUl9IQVZFX0pNUF9DQUxMX1x8X1wqKEMnXGZSIGlzIGFsc28KK3NldC4KKy5pZSBuIC5JUCAiIiJfXHxfQVZSX1NGUl9PRkZTRVRfXHxfPVxmKENJb2Zmc2V0XGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dfXHxfQVZSX1NGUl9PRkZTRVRfXHxfPVxmKENJb2Zmc2V0XGYoQ1dcZlIiIDQKKy5JWCBJdGVtICJfX0FWUl9TRlJfT0ZGU0VUX189b2Zmc2V0IgorSW5zdHJ1Y3Rpb25zIHRoYXQgY2FuIGFkZHJlc3MgSS9PIHNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXJzIGRpcmVjdGx5CitsaWtlIFxmKENXXCooQ2BJTlwqKEMnXGZSLCBcZihDV1wqKENgT1VUXCooQydcZlIsIFxmKENXXCooQ2BTQklcKihDJ1xmUiwgZXRjLiBtYXkgdXNlIGEgZGlmZmVyZW50CithZGRyZXNzIGFzIGlmIGFkZHJlc3NlZCBieSBhbiBpbnN0cnVjdGlvbiB0byBhY2Nlc3MgXHMtMVJBTVxzMCBsaWtlIFxmKENXXCooQ2BMRFwqKEMnXGZSCitvciBcZihDV1wqKENgU1RTXCooQydcZlIuIFRoaXMgb2Zmc2V0IGRlcGVuZHMgb24gdGhlIGRldmljZSBhcmNoaXRlY3R1cmUgYW5kIGhhcwordG8gYmUgc3VidHJhY3RlZCBmcm9tIHRoZSBccy0xUkFNXHMwIGFkZHJlc3MgaW4gb3JkZXIgdG8gZ2V0IHRoZQorcmVzcGVjdGl2ZSBJL09AdGlle31hZGRyZXNzLgorLmllIG4gLklQICIiIl9cfF9XSVRIX0FWUkxJQkNfXHxfIiIiIDQKKy5lbCAuSVAgIlxmKENXX1x8X1dJVEhfQVZSTElCQ19cfF9cZlIiIDQKKy5JWCBJdGVtICJfX1dJVEhfQVZSTElCQ19fIgorVGhlIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIEFWUi1MaWJjLgorU2VlIHRoZSBcZihDV1wqKENgXC1cLXdpdGhcLWF2cmxpYmNcKihDJ1xmUiBjb25maWd1cmUgb3B0aW9uLgorLlBQCitcZklCbGFja2ZpbiBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiQmxhY2tmaW4gT3B0aW9ucyIKKy5JUCAiXGZCXC1tY3B1PVxmUlxmSWNwdVxmUltcZkJcLVxmUlxmSXNpcmV2aXNpb25cZlJdIiA0CisuSVggSXRlbSAiLW1jcHU9Y3B1Wy1zaXJldmlzaW9uXSIKK1NwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IEJsYWNrZmluIHByb2Nlc3Nvci4gIEN1cnJlbnRseSwgXGZJY3B1XGZSCitjYW4gYmUgb25lIG9mIFxmQmJmNTEyXGZSLCBcZkJiZjUxNFxmUiwgXGZCYmY1MTZcZlIsIFxmQmJmNTE4XGZSLAorXCZcZkJiZjUyMlxmUiwgXGZCYmY1MjNcZlIsIFxmQmJmNTI0XGZSLCBcZkJiZjUyNVxmUiwgXGZCYmY1MjZcZlIsCitcJlxmQmJmNTI3XGZSLCBcZkJiZjUzMVxmUiwgXGZCYmY1MzJcZlIsIFxmQmJmNTMzXGZSLAorXCZcZkJiZjUzNFxmUiwgXGZCYmY1MzZcZlIsIFxmQmJmNTM3XGZSLCBcZkJiZjUzOFxmUiwgXGZCYmY1MzlcZlIsCitcJlxmQmJmNTQyXGZSLCBcZkJiZjU0NFxmUiwgXGZCYmY1NDdcZlIsIFxmQmJmNTQ4XGZSLCBcZkJiZjU0OVxmUiwKK1wmXGZCYmY1NDJtXGZSLCBcZkJiZjU0NG1cZlIsIFxmQmJmNTQ3bVxmUiwgXGZCYmY1NDhtXGZSLCBcZkJiZjU0OW1cZlIsCitcJlxmQmJmNTYxXGZSLCBcZkJiZjU5MlxmUi4KKy5TcAorVGhlIG9wdGlvbmFsIFxmSXNpcmV2aXNpb25cZlIgc3BlY2lmaWVzIHRoZSBzaWxpY29uIHJldmlzaW9uIG9mIHRoZSB0YXJnZXQKK0JsYWNrZmluIHByb2Nlc3Nvci4gIEFueSB3b3JrYXJvdW5kcyBhdmFpbGFibGUgZm9yIHRoZSB0YXJnZXRlZCBzaWxpY29uIHJldmlzaW9uCithcmUgZW5hYmxlZC4gIElmIFxmSXNpcmV2aXNpb25cZlIgaXMgXGZCbm9uZVxmUiwgbm8gd29ya2Fyb3VuZHMgYXJlIGVuYWJsZWQuCitJZiBcZklzaXJldmlzaW9uXGZSIGlzIFxmQmFueVxmUiwgYWxsIHdvcmthcm91bmRzIGZvciB0aGUgdGFyZ2V0ZWQgcHJvY2Vzc29yCithcmUgZW5hYmxlZC4gIFRoZSBcZihDV1wqKENgX1x8X1NJTElDT05fUkVWSVNJT05fXHxfXCooQydcZlIgbWFjcm8gaXMgZGVmaW5lZCB0byB0d28KK2hleGFkZWNpbWFsIGRpZ2l0cyByZXByZXNlbnRpbmcgdGhlIG1ham9yIGFuZCBtaW5vciBudW1iZXJzIGluIHRoZSBzaWxpY29uCityZXZpc2lvbi4gIElmIFxmSXNpcmV2aXNpb25cZlIgaXMgXGZCbm9uZVxmUiwgdGhlIFxmKENXXCooQ2BfXHxfU0lMSUNPTl9SRVZJU0lPTl9cfF9cKihDJ1xmUgoraXMgbm90IGRlZmluZWQuICBJZiBcZklzaXJldmlzaW9uXGZSIGlzIFxmQmFueVxmUiwgdGhlCitcJlxmKENXXCooQ2BfXHxfU0lMSUNPTl9SRVZJU0lPTl9cfF9cKihDJ1xmUiBpcyBkZWZpbmVkIHRvIGJlIFxmKENXMHhmZmZmXGZSLgorSWYgdGhpcyBvcHRpb25hbCBcZklzaXJldmlzaW9uXGZSIGlzIG5vdCB1c2VkLCBccy0xR0NDXHMwIGFzc3VtZXMgdGhlIGxhdGVzdCBrbm93bgorc2lsaWNvbiByZXZpc2lvbiBvZiB0aGUgdGFyZ2V0ZWQgQmxhY2tmaW4gcHJvY2Vzc29yLgorLlNwCitcJlxzLTFHQ0NcczAgZGVmaW5lcyBhIHByZXByb2Nlc3NvciBtYWNybyBmb3IgdGhlIHNwZWNpZmllZCBcZkljcHVcZlIuCitGb3IgdGhlIFxmQmJmaW4tZWxmXGZSIHRvb2xjaGFpbiwgdGhpcyBvcHRpb24gY2F1c2VzIHRoZSBoYXJkd2FyZSBccy0xQlNQXHMwCitwcm92aWRlZCBieSBsaWJnbG9zcyB0byBiZSBsaW5rZWQgaW4gaWYgXGZCXC1tc2ltXGZSIGlzIG5vdCBnaXZlbi4KKy5TcAorV2l0aG91dCB0aGlzIG9wdGlvbiwgXGZCYmY1MzJcZlIgaXMgdXNlZCBhcyB0aGUgcHJvY2Vzc29yIGJ5IGRlZmF1bHQuCisuU3AKK05vdGUgdGhhdCBzdXBwb3J0IGZvciBcZkJiZjU2MVxmUiBpcyBpbmNvbXBsZXRlLiAgRm9yIFxmQmJmNTYxXGZSLAorb25seSB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvIGlzIGRlZmluZWQuCisuSVAgIlxmQlwtbXNpbVxmUiIgNAorLklYIEl0ZW0gIi1tc2ltIgorU3BlY2lmaWVzIHRoYXQgdGhlIHByb2dyYW0gd2lsbCBiZSBydW4gb24gdGhlIHNpbXVsYXRvci4gIFRoaXMgY2F1c2VzCit0aGUgc2ltdWxhdG9yIFxzLTFCU1BcczAgcHJvdmlkZWQgYnkgbGliZ2xvc3MgdG8gYmUgbGlua2VkIGluLiAgVGhpcyBvcHRpb24KK2hhcyBlZmZlY3Qgb25seSBmb3IgXGZCYmZpbi1lbGZcZlIgdG9vbGNoYWluLgorQ2VydGFpbiBvdGhlciBvcHRpb25zLCBzdWNoIGFzIFxmQlwtbWlkXC1zaGFyZWRcLWxpYnJhcnlcZlIgYW5kCitcJlxmQlwtbWZkcGljXGZSLCBpbXBseSBcZkJcLW1zaW1cZlIuCisuSVAgIlxmQlwtbW9taXRcLWxlYWZcLWZyYW1lXC1wb2ludGVyXGZSIiA0CisuSVggSXRlbSAiLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciIKK0Rvbid0IGtlZXAgdGhlIGZyYW1lIHBvaW50ZXIgaW4gYSByZWdpc3RlciBmb3IgbGVhZiBmdW5jdGlvbnMuICBUaGlzCithdm9pZHMgdGhlIGluc3RydWN0aW9ucyB0byBzYXZlLCBzZXQgdXAgYW5kIHJlc3RvcmUgZnJhbWUgcG9pbnRlcnMgYW5kCittYWtlcyBhbiBleHRyYSByZWdpc3RlciBhdmFpbGFibGUgaW4gbGVhZiBmdW5jdGlvbnMuICBUaGUgb3B0aW9uCitcJlxmQlwtZm9taXRcLWZyYW1lXC1wb2ludGVyXGZSIHJlbW92ZXMgdGhlIGZyYW1lIHBvaW50ZXIgZm9yIGFsbCBmdW5jdGlvbnMsCit3aGljaCBtaWdodCBtYWtlIGRlYnVnZ2luZyBoYXJkZXIuCisuSVAgIlxmQlwtbXNwZWNsZFwtYW5vbWFseVxmUiIgNAorLklYIEl0ZW0gIi1tc3BlY2xkLWFub21hbHkiCitXaGVuIGVuYWJsZWQsIHRoZSBjb21waWxlciBlbnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgbm90Citjb250YWluIHNwZWN1bGF0aXZlIGxvYWRzIGFmdGVyIGp1bXAgaW5zdHJ1Y3Rpb25zLiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkLAorXCZcZihDV1wqKENgX1x8X1dPUktBUk9VTkRfU1BFQ1VMQVRJVkVfTE9BRFNcKihDJ1xmUiBpcyBkZWZpbmVkLgorLklQICJcZkJcLW1ub1wtc3BlY2xkXC1hbm9tYWx5XGZSIiA0CisuSVggSXRlbSAiLW1uby1zcGVjbGQtYW5vbWFseSIKK0Rvbid0IGdlbmVyYXRlIGV4dHJhIGNvZGUgdG8gcHJldmVudCBzcGVjdWxhdGl2ZSBsb2FkcyBmcm9tIG9jY3VycmluZy4KKy5JUCAiXGZCXC1tY3N5bmNcLWFub21hbHlcZlIiIDQKKy5JWCBJdGVtICItbWNzeW5jLWFub21hbHkiCitXaGVuIGVuYWJsZWQsIHRoZSBjb21waWxlciBlbnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgbm90Citjb250YWluIFxzLTFDU1lOQ1xzMCBvciBccy0xU1NZTkNcczAgaW5zdHJ1Y3Rpb25zIHRvbyBzb29uIGFmdGVyIGNvbmRpdGlvbmFsIGJyYW5jaGVzLgorSWYgdGhpcyBvcHRpb24gaXMgdXNlZCwgXGYoQ1dcKihDYF9cfF9XT1JLQVJPVU5EX1NQRUNVTEFUSVZFX1NZTkNTXCooQydcZlIgaXMgZGVmaW5lZC4KKy5JUCAiXGZCXC1tbm9cLWNzeW5jXC1hbm9tYWx5XGZSIiA0CisuSVggSXRlbSAiLW1uby1jc3luYy1hbm9tYWx5IgorRG9uJ3QgZ2VuZXJhdGUgZXh0cmEgY29kZSB0byBwcmV2ZW50IFxzLTFDU1lOQ1xzMCBvciBccy0xU1NZTkNcczAgaW5zdHJ1Y3Rpb25zIGZyb20KK29jY3VycmluZyB0b28gc29vbiBhZnRlciBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKy5JUCAiXGZCXC1tbG93XC02NGtcZlIiIDQKKy5JWCBJdGVtICItbWxvdy02NGsiCitXaGVuIGVuYWJsZWQsIHRoZSBjb21waWxlciBpcyBmcmVlIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBrbm93bGVkZ2UgdGhhdAordGhlIGVudGlyZSBwcm9ncmFtIGZpdHMgaW50byB0aGUgbG93IDY0ayBvZiBtZW1vcnkuCisuSVAgIlxmQlwtbW5vXC1sb3dcLTY0a1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tbG93LTY0ayIKK0Fzc3VtZSB0aGF0IHRoZSBwcm9ncmFtIGlzIGFyYml0cmFyaWx5IGxhcmdlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tc3RhY2tcLWNoZWNrXC1sMVxmUiIgNAorLklYIEl0ZW0gIi1tc3RhY2stY2hlY2stbDEiCitEbyBzdGFjayBjaGVja2luZyB1c2luZyBpbmZvcm1hdGlvbiBwbGFjZWQgaW50byBMMSBzY3JhdGNocGFkIG1lbW9yeSBieSB0aGUKK3VDbGludXgga2VybmVsLgorLklQICJcZkJcLW1pZFwtc2hhcmVkXC1saWJyYXJ5XGZSIiA0CisuSVggSXRlbSAiLW1pZC1zaGFyZWQtbGlicmFyeSIKK0dlbmVyYXRlIGNvZGUgdGhhdCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIHZpYSB0aGUgbGlicmFyeSBccy0xSURcczAgbWV0aG9kLgorVGhpcyBhbGxvd3MgZm9yIGV4ZWN1dGUgaW4gcGxhY2UgYW5kIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZW52aXJvbm1lbnQKK3dpdGhvdXQgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudC4gIFRoaXMgb3B0aW9uIGltcGxpZXMgXGZCXC1mUElDXGZSLgorV2l0aCBhIFxmQmJmaW4tZWxmXGZSIHRhcmdldCwgdGhpcyBvcHRpb24gaW1wbGllcyBcZkJcLW1zaW1cZlIuCisuSVAgIlxmQlwtbW5vXC1pZFwtc2hhcmVkXC1saWJyYXJ5XGZSIiA0CisuSVggSXRlbSAiLW1uby1pZC1zaGFyZWQtbGlicmFyeSIKK0dlbmVyYXRlIGNvZGUgdGhhdCBkb2Vzbid0IGFzc3VtZSBJRC1iYXNlZCBzaGFyZWQgbGlicmFyaWVzIGFyZSBiZWluZyB1c2VkLgorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbGVhZlwtaWRcLXNoYXJlZFwtbGlicmFyeVxmUiIgNAorLklYIEl0ZW0gIi1tbGVhZi1pZC1zaGFyZWQtbGlicmFyeSIKK0dlbmVyYXRlIGNvZGUgdGhhdCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIHZpYSB0aGUgbGlicmFyeSBccy0xSURcczAgbWV0aG9kLAorYnV0IGFzc3VtZXMgdGhhdCB0aGlzIGxpYnJhcnkgb3IgZXhlY3V0YWJsZSB3b24ndCBsaW5rIGFnYWluc3QgYW55IG90aGVyCitcJlxzLTFJRFxzMCBzaGFyZWQgbGlicmFyaWVzLiAgVGhhdCBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIHVzZSBmYXN0ZXIgY29kZSBmb3IganVtcHMKK2FuZCBjYWxscy4KKy5JUCAiXGZCXC1tbm9cLWxlYWZcLWlkXC1zaGFyZWRcLWxpYnJhcnlcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxlYWYtaWQtc2hhcmVkLWxpYnJhcnkiCitEbyBub3QgYXNzdW1lIHRoYXQgdGhlIGNvZGUgYmVpbmcgY29tcGlsZWQgd29uJ3QgbGluayBhZ2FpbnN0IGFueSBccy0xSURcczAgc2hhcmVkCitsaWJyYXJpZXMuICBTbG93ZXIgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIGp1bXAgYW5kIGNhbGwgaW5zbnMuCisuSVAgIlxmQlwtbXNoYXJlZFwtbGlicmFyeVwtaWQ9blxmUiIgNAorLklYIEl0ZW0gIi1tc2hhcmVkLWxpYnJhcnktaWQ9biIKK1NwZWNpZmllcyB0aGUgaWRlbnRpZmljYXRpb24gbnVtYmVyIG9mIHRoZSBJRC1iYXNlZCBzaGFyZWQgbGlicmFyeSBiZWluZworY29tcGlsZWQuICBTcGVjaWZ5aW5nIGEgdmFsdWUgb2YgMCBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0IGNvZGU7IHNwZWNpZnlpbmcKK290aGVyIHZhbHVlcyBmb3JjZXMgdGhlIGFsbG9jYXRpb24gb2YgdGhhdCBudW1iZXIgdG8gdGhlIGN1cnJlbnQKK2xpYnJhcnkgYnV0IGlzIG5vIG1vcmUgc3BhY2VcLSBvciB0aW1lLWVmZmljaWVudCB0aGFuIG9taXR0aW5nIHRoaXMgb3B0aW9uLgorLklQICJcZkJcLW1zZXBcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbXNlcC1kYXRhIgorR2VuZXJhdGUgY29kZSB0aGF0IGFsbG93cyB0aGUgZGF0YSBzZWdtZW50IHRvIGJlIGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQKK2FyZWEgb2YgbWVtb3J5IGZyb20gdGhlIHRleHQgc2VnbWVudC4gIFRoaXMgYWxsb3dzIGZvciBleGVjdXRlIGluIHBsYWNlIGluCithbiBlbnZpcm9ubWVudCB3aXRob3V0IHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQgYnkgZWxpbWluYXRpbmcgcmVsb2NhdGlvbnMKK2FnYWluc3QgdGhlIHRleHQgc2VjdGlvbi4KKy5JUCAiXGZCXC1tbm9cLXNlcFwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2VwLWRhdGEiCitHZW5lcmF0ZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0IHRoZSBkYXRhIHNlZ21lbnQgZm9sbG93cyB0aGUgdGV4dCBzZWdtZW50LgorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctY2FsbHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxvbmctY2FsbHMiCisuUEQKK1RlbGxzIHRoZSBjb21waWxlciB0byBwZXJmb3JtIGZ1bmN0aW9uIGNhbGxzIGJ5IGZpcnN0IGxvYWRpbmcgdGhlCithZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiBpbnRvIGEgcmVnaXN0ZXIgYW5kIHRoZW4gcGVyZm9ybWluZyBhIHN1YnJvdXRpbmUKK2NhbGwgb24gdGhpcyByZWdpc3Rlci4gIFRoaXMgc3dpdGNoIGlzIG5lZWRlZCBpZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uCitsaWVzIG91dHNpZGUgb2YgdGhlIDI0XC1iaXQgYWRkcmVzc2luZyByYW5nZSBvZiB0aGUgb2Zmc2V0LWJhc2VkCit2ZXJzaW9uIG9mIHN1YnJvdXRpbmUgY2FsbCBpbnN0cnVjdGlvbi4KKy5TcAorVGhpcyBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQuICBTcGVjaWZ5aW5nCitcJlxmQlwtbW5vXC1sb25nXC1jYWxsc1xmUiByZXN0b3JlcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4gIE5vdGUgdGhlc2UKK3N3aXRjaGVzIGhhdmUgbm8gZWZmZWN0IG9uIGhvdyB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGNvZGUgdG8gaGFuZGxlCitmdW5jdGlvbiBjYWxscyB2aWEgZnVuY3Rpb24gcG9pbnRlcnMuCisuSVAgIlxmQlwtbWZhc3RcLWZwXGZSIiA0CisuSVggSXRlbSAiLW1mYXN0LWZwIgorTGluayB3aXRoIHRoZSBmYXN0IGZsb2F0aW5nLXBvaW50IGxpYnJhcnkuIFRoaXMgbGlicmFyeSByZWxheGVzIHNvbWUgb2YKK3RoZSBccy0xSUVFRVxzMCBmbG9hdGluZy1wb2ludCBzdGFuZGFyZCdzIHJ1bGVzIGZvciBjaGVja2luZyBpbnB1dHMgYWdhaW5zdAorTm90LWEtTnVtYmVyIChccy0xTkFOXHMwKSwgaW4gdGhlIGludGVyZXN0IG9mIHBlcmZvcm1hbmNlLgorLklQICJcZkJcLW1pbmxpbmVcLXBsdFxmUiIgNAorLklYIEl0ZW0gIi1taW5saW5lLXBsdCIKK0VuYWJsZSBpbmxpbmluZyBvZiBccy0xUExUXHMwIGVudHJpZXMgaW4gZnVuY3Rpb24gY2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQgYXJlCitub3Qga25vd24gdG8gYmluZCBsb2NhbGx5LiAgSXQgaGFzIG5vIGVmZmVjdCB3aXRob3V0IFxmQlwtbWZkcGljXGZSLgorLklQICJcZkJcLW1tdWx0aWNvcmVcZlIiIDQKKy5JWCBJdGVtICItbW11bHRpY29yZSIKK0J1aWxkIGEgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiBmb3IgbXVsdGljb3JlIEJsYWNrZmluIHByb2Nlc3NvcnMuIAorVGhpcyBvcHRpb24gY2F1c2VzIHByb3BlciBzdGFydCBmaWxlcyBhbmQgbGluayBzY3JpcHRzIHN1cHBvcnRpbmcgCittdWx0aWNvcmUgdG8gYmUgdXNlZCwgYW5kIGRlZmluZXMgdGhlIG1hY3JvIFxmKENXXCooQ2BfXHxfQkZJTl9NVUxUSUNPUkVcKihDJ1xmUi4gCitJdCBjYW4gb25seSBiZSB1c2VkIHdpdGggXGZCXC1tY3B1PWJmNTYxXGZSW1xmQlwtXGZSXGZJc2lyZXZpc2lvblxmUl0uCisuU3AKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHdpdGggXGZCXC1tY29yZWFcZlIgb3IgXGZCXC1tY29yZWJcZlIsIHdoaWNoCitzZWxlY3RzIHRoZSBvbmUtYXBwbGljYXRpb24tcGVyLWNvcmUgcHJvZ3JhbW1pbmcgbW9kZWwuICBXaXRob3V0CitcJlxmQlwtbWNvcmVhXGZSIG9yIFxmQlwtbWNvcmViXGZSLCB0aGUgc2luZ2xlXC1hcHBsaWNhdGlvbi9kdWFsXC1jb3JlCitwcm9ncmFtbWluZyBtb2RlbCBpcyB1c2VkLiBJbiB0aGlzIG1vZGVsLCB0aGUgbWFpbiBmdW5jdGlvbiBvZiBDb3JlIEIKK3Nob3VsZCBiZSBuYW1lZCBhcyBcZihDV1wqKENgY29yZWJfbWFpblwqKEMnXGZSLgorLlNwCitJZiB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZCwgdGhlIHNpbmdsZS1jb3JlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCittb2RlbCBpcyB1c2VkLgorLklQICJcZkJcLW1jb3JlYVxmUiIgNAorLklYIEl0ZW0gIi1tY29yZWEiCitCdWlsZCBhIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gZm9yIENvcmUgQSBvZiBccy0xQkY1NjFcczAgd2hlbiB1c2luZwordGhlIG9uZS1hcHBsaWNhdGlvbi1wZXItY29yZSBwcm9ncmFtbWluZyBtb2RlbC4gUHJvcGVyIHN0YXJ0IGZpbGVzCithbmQgbGluayBzY3JpcHRzIGFyZSB1c2VkIHRvIHN1cHBvcnQgQ29yZSBBLCBhbmQgdGhlIG1hY3JvCitcJlxmKENXXCooQ2BfXHxfQkZJTl9DT1JFQVwqKEMnXGZSIGlzIGRlZmluZWQuCitUaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggXGZCXC1tbXVsdGljb3JlXGZSLgorLklQICJcZkJcLW1jb3JlYlxmUiIgNAorLklYIEl0ZW0gIi1tY29yZWIiCitCdWlsZCBhIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gZm9yIENvcmUgQiBvZiBccy0xQkY1NjFcczAgd2hlbiB1c2luZwordGhlIG9uZS1hcHBsaWNhdGlvbi1wZXItY29yZSBwcm9ncmFtbWluZyBtb2RlbC4gUHJvcGVyIHN0YXJ0IGZpbGVzCithbmQgbGluayBzY3JpcHRzIGFyZSB1c2VkIHRvIHN1cHBvcnQgQ29yZSBCLCBhbmQgdGhlIG1hY3JvCitcJlxmKENXXCooQ2BfXHxfQkZJTl9DT1JFQlwqKEMnXGZSIGlzIGRlZmluZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgXGYoQ1dcKihDYGNvcmViX21haW5cKihDJ1xmUgorc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBcZihDV1wqKENgbWFpblwqKEMnXGZSLiAKK1RoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBcZkJcLW1tdWx0aWNvcmVcZlIuCisuSVAgIlxmQlwtbXNkcmFtXGZSIiA0CisuSVggSXRlbSAiLW1zZHJhbSIKK0J1aWxkIGEgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiBmb3IgXHMtMVNEUkFNXHMwLiBQcm9wZXIgc3RhcnQgZmlsZXMgYW5kCitsaW5rIHNjcmlwdHMgYXJlIHVzZWQgdG8gcHV0IHRoZSBhcHBsaWNhdGlvbiBpbnRvIFxzLTFTRFJBTVxzMCwgYW5kIHRoZSBtYWNybworXCZcZihDV1wqKENgX1x8X0JGSU5fU0RSQU1cKihDJ1xmUiBpcyBkZWZpbmVkLgorVGhlIGxvYWRlciBzaG91bGQgaW5pdGlhbGl6ZSBccy0xU0RSQU1cczAgYmVmb3JlIGxvYWRpbmcgdGhlIGFwcGxpY2F0aW9uLgorLklQICJcZkJcLW1pY3BsYlxmUiIgNAorLklYIEl0ZW0gIi1taWNwbGIiCitBc3N1bWUgdGhhdCBJQ1BMQnMgYXJlIGVuYWJsZWQgYXQgcnVuIHRpbWUuICBUaGlzIGhhcyBhbiBlZmZlY3Qgb24gY2VydGFpbgorYW5vbWFseSB3b3JrYXJvdW5kcy4gIEZvciBMaW51eCB0YXJnZXRzLCB0aGUgZGVmYXVsdCBpcyB0byBhc3N1bWUgSUNQTEJzCithcmUgZW5hYmxlZDsgZm9yIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRoZSBkZWZhdWx0IGlzIG9mZi4KKy5QUAorXGZJQzZYIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJDNlggT3B0aW9ucyIKKy5JUCAiXGZCXC1tYXJjaD1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1hcmNoPW5hbWUiCitUaGlzIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4gIFxzLTFHQ0NcczAgdXNlcyB0aGlzCituYW1lIHRvIGRldGVybWluZSB3aGF0IGtpbmQgb2YgaW5zdHJ1Y3Rpb25zIGl0IGNhbiBlbWl0IHdoZW4gZ2VuZXJhdGluZworYXNzZW1ibHkgY29kZS4gIFBlcm1pc3NpYmxlIG5hbWVzIGFyZTogXGZCYzYyeFxmUiwKK1wmXGZCYzY0eFxmUiwgXGZCYzY0eCtcZlIsIFxmQmM2N3hcZlIsIFxmQmM2N3grXGZSLCBcZkJjNjc0eFxmUi4KKy5JUCAiXGZCXC1tYmlnXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWJpZy1lbmRpYW4iCitHZW5lcmF0ZSBjb2RlIGZvciBhIGJpZy1lbmRpYW4gdGFyZ2V0LgorLklQICJcZkJcLW1saXR0bGVcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tbGl0dGxlLWVuZGlhbiIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgbGl0dGxlLWVuZGlhbiB0YXJnZXQuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1zaW1cZlIiIDQKKy5JWCBJdGVtICItbXNpbSIKK0Nob29zZSBzdGFydHVwIGZpbGVzIGFuZCBsaW5rZXIgc2NyaXB0IHN1aXRhYmxlIGZvciB0aGUgc2ltdWxhdG9yLgorLklQICJcZkJcLW1zZGF0YT1kZWZhdWx0XGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YT1kZWZhdWx0IgorUHV0IHNtYWxsIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlIFxmQi5uZWFyZGF0YVxmUiBzZWN0aW9uLAord2hpY2ggaXMgcG9pbnRlZCB0byBieSByZWdpc3RlciBcZihDV1wqKENgQjE0XCooQydcZlIuICBQdXQgc21hbGwgdW5pbml0aWFsaXplZAorZ2xvYmFsIGFuZCBzdGF0aWMgZGF0YSBpbiB0aGUgXGZCLmJzc1xmUiBzZWN0aW9uLCB3aGljaCBpcyBhZGphY2VudAordG8gdGhlIFxmQi5uZWFyZGF0YVxmUiBzZWN0aW9uLiAgUHV0IHNtYWxsIHJlYWQtb25seSBkYXRhIGludG8gdGhlCitcJlxmQi5yb2RhdGFcZlIgc2VjdGlvbi4gIFRoZSBjb3JyZXNwb25kaW5nIHNlY3Rpb25zIHVzZWQgZm9yIGxhcmdlCitwaWVjZXMgb2YgZGF0YSBhcmUgXGZCLmZhcmRhdGFcZlIsIFxmQi5mYXJcZlIgYW5kIFxmQi5jb25zdFxmUi4KKy5JUCAiXGZCXC1tc2RhdGE9YWxsXGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YT1hbGwiCitQdXQgYWxsIGRhdGEsIG5vdCBqdXN0IHNtYWxsIG9iamVjdHMsIGludG8gdGhlIHNlY3Rpb25zIHJlc2VydmVkIGZvcgorc21hbGwgZGF0YSwgYW5kIHVzZSBhZGRyZXNzaW5nIHJlbGF0aXZlIHRvIHRoZSBcZihDV1wqKENgQjE0XCooQydcZlIgcmVnaXN0ZXIgdG8KK2FjY2VzcyB0aGVtLgorLklQICJcZkJcLW1zZGF0YT1ub25lXGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YT1ub25lIgorTWFrZSBubyB1c2Ugb2YgdGhlIHNlY3Rpb25zIHJlc2VydmVkIGZvciBzbWFsbCBkYXRhLCBhbmQgdXNlIGFic29sdXRlCithZGRyZXNzZXMgdG8gYWNjZXNzIGFsbCBkYXRhLiAgUHV0IGFsbCBpbml0aWFsaXplZCBnbG9iYWwgYW5kIHN0YXRpYworZGF0YSBpbiB0aGUgXGZCLmZhcmRhdGFcZlIgc2VjdGlvbiwgYW5kIGFsbCB1bmluaXRpYWxpemVkIGRhdGEgaW4gdGhlCitcJlxmQi5mYXJcZlIgc2VjdGlvbi4gIFB1dCBhbGwgY29uc3RhbnQgZGF0YSBpbnRvIHRoZSBcZkIuY29uc3RcZlIKK3NlY3Rpb24uCisuUFAKK1xmSVxzLTFDUklTXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJDUklTIE9wdGlvbnMiCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgXHMtMUNSSVNcczAgcG9ydHMuCisuSVAgIlxmQlwtbWFyY2g9XGZSXGZJYXJjaGl0ZWN0dXJlLXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbWFyY2g9YXJjaGl0ZWN0dXJlLXR5cGUiCisuUEQgMAorLklQICJcZkJcLW1jcHU9XGZSXGZJYXJjaGl0ZWN0dXJlLXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1hcmNoaXRlY3R1cmUtdHlwZSIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBhcmNoaXRlY3R1cmUuICBUaGUgY2hvaWNlcyBmb3IKK1wmXGZJYXJjaGl0ZWN0dXJlLXR5cGVcZlIgYXJlIFxmQnYzXGZSLCBcZkJ2OFxmUiBhbmQgXGZCdjEwXGZSIGZvcgorcmVzcGVjdGl2ZWx5IFxzLTFFVFJBWFxzMFwgNCwgXHMtMUVUUkFYXHMwXCAxMDAsIGFuZCBccy0xRVRSQVhcczBcIDEwMFwgXHMtMUxYXHMwLgorRGVmYXVsdCBpcyBcZkJ2MFxmUiBleGNlcHQgZm9yIGNyaXMtYXhpcy1saW51eC1nbnUsIHdoZXJlIHRoZSBkZWZhdWx0IGlzCitcJlxmQnYxMFxmUi4KKy5JUCAiXGZCXC1tdHVuZT1cZlJcZklhcmNoaXRlY3R1cmUtdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tdHVuZT1hcmNoaXRlY3R1cmUtdHlwZSIKK1R1bmUgdG8gXGZJYXJjaGl0ZWN0dXJlLXR5cGVcZlIgZXZlcnl0aGluZyBhcHBsaWNhYmxlIGFib3V0IHRoZSBnZW5lcmF0ZWQKK2NvZGUsIGV4Y2VwdCBmb3IgdGhlIFxzLTFBQklcczAgYW5kIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGluc3RydWN0aW9ucy4gIFRoZQorY2hvaWNlcyBmb3IgXGZJYXJjaGl0ZWN0dXJlLXR5cGVcZlIgYXJlIHRoZSBzYW1lIGFzIGZvcgorXCZcZkJcLW1hcmNoPVxmUlxmSWFyY2hpdGVjdHVyZS10eXBlXGZSLgorLklQICJcZkJcLW1tYXhcLXN0YWNrXC1mcmFtZT1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLW1tYXgtc3RhY2stZnJhbWU9biIKK1dhcm4gd2hlbiB0aGUgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiBleGNlZWRzIFxmSW5cZlIgYnl0ZXMuCisuSVAgIlxmQlwtbWV0cmF4NFxmUiIgNAorLklYIEl0ZW0gIi1tZXRyYXg0IgorLlBEIDAKKy5JUCAiXGZCXC1tZXRyYXgxMDBcZlIiIDQKKy5JWCBJdGVtICItbWV0cmF4MTAwIgorLlBECitUaGUgb3B0aW9ucyBcZkJcLW1ldHJheDRcZlIgYW5kIFxmQlwtbWV0cmF4MTAwXGZSIGFyZSBzeW5vbnltcyBmb3IKK1wmXGZCXC1tYXJjaD12M1xmUiBhbmQgXGZCXC1tYXJjaD12OFxmUiByZXNwZWN0aXZlbHkuCisuSVAgIlxmQlwtbW11bFwtYnVnXC13b3JrYXJvdW5kXGZSIiA0CisuSVggSXRlbSAiLW1tdWwtYnVnLXdvcmthcm91bmQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbXVsXC1idWdcLXdvcmthcm91bmRcZlIiIDQKKy5JWCBJdGVtICItbW5vLW11bC1idWctd29ya2Fyb3VuZCIKKy5QRAorV29yayBhcm91bmQgYSBidWcgaW4gdGhlIFxmKENXXCooQ2BtdWxzXCooQydcZlIgYW5kIFxmKENXXCooQ2BtdWx1XCooQydcZlIgaW5zdHJ1Y3Rpb25zIGZvciBccy0xQ1BVXHMwCittb2RlbHMgd2hlcmUgaXQgYXBwbGllcy4gIFRoaXMgb3B0aW9uIGlzIGFjdGl2ZSBieSBkZWZhdWx0LgorLklQICJcZkJcLW1wZGVidWdcZlIiIDQKKy5JWCBJdGVtICItbXBkZWJ1ZyIKK0VuYWJsZSBDUklTLXNwZWNpZmljIHZlcmJvc2UgZGVidWctcmVsYXRlZCBpbmZvcm1hdGlvbiBpbiB0aGUgYXNzZW1ibHkKK2NvZGUuICBUaGlzIG9wdGlvbiBhbHNvIGhhcyB0aGUgZWZmZWN0IG9mIHR1cm5pbmcgb2ZmIHRoZSBcZkIjTk9fQVBQXGZSCitmb3JtYXR0ZWQtY29kZSBpbmRpY2F0b3IgdG8gdGhlIGFzc2VtYmxlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorYXNzZW1ibHkgZmlsZS4KKy5JUCAiXGZCXC1tY2NcLWluaXRcZlIiIDQKKy5JWCBJdGVtICItbWNjLWluaXQiCitEbyBub3QgdXNlIGNvbmRpdGlvbi1jb2RlIHJlc3VsdHMgZnJvbSBwcmV2aW91cyBpbnN0cnVjdGlvbjsgYWx3YXlzIGVtaXQKK2NvbXBhcmUgYW5kIHRlc3QgaW5zdHJ1Y3Rpb25zIGJlZm9yZSB1c2Ugb2YgY29uZGl0aW9uIGNvZGVzLgorLklQICJcZkJcLW1ub1wtc2lkZVwtZWZmZWN0c1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2lkZS1lZmZlY3RzIgorRG8gbm90IGVtaXQgaW5zdHJ1Y3Rpb25zIHdpdGggc2lkZSBlZmZlY3RzIGluIGFkZHJlc3NpbmcgbW9kZXMgb3RoZXIgdGhhbgorcG9zdC1pbmNyZW1lbnQuCisuSVAgIlxmQlwtbXN0YWNrXC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tc3RhY2stYWxpZ24iCisuUEQgMAorLklQICJcZkJcLW1ub1wtc3RhY2tcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1uby1zdGFjay1hbGlnbiIKKy5JUCAiXGZCXC1tZGF0YVwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbWRhdGEtYWxpZ24iCisuSVAgIlxmQlwtbW5vXC1kYXRhXC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZGF0YS1hbGlnbiIKKy5JUCAiXGZCXC1tY29uc3RcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1jb25zdC1hbGlnbiIKKy5JUCAiXGZCXC1tbm9cLWNvbnN0XC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tY29uc3QtYWxpZ24iCisuUEQKK1RoZXNlIG9wdGlvbnMgKFxmQm5vXC1cZlIgb3B0aW9ucykgYXJyYW5nZSAoZWxpbWluYXRlIGFycmFuZ2VtZW50cykgZm9yIHRoZQorc3RhY2sgZnJhbWUsIGluZGl2aWR1YWwgZGF0YSBhbmQgY29uc3RhbnRzIHRvIGJlIGFsaWduZWQgZm9yIHRoZSBtYXhpbXVtCitzaW5nbGUgZGF0YSBhY2Nlc3Mgc2l6ZSBmb3IgdGhlIGNob3NlbiBccy0xQ1BVXHMwIG1vZGVsLiAgVGhlIGRlZmF1bHQgaXMgdG8KK2FycmFuZ2UgZm9yIDMyXC1iaXQgYWxpZ25tZW50LiAgXHMtMUFCSVxzMCBkZXRhaWxzIHN1Y2ggYXMgc3RydWN0dXJlIGxheW91dCBhcmUKK25vdCBhZmZlY3RlZCBieSB0aGVzZSBvcHRpb25zLgorLklQICJcZkJcLW0zMlwtYml0XGZSIiA0CisuSVggSXRlbSAiLW0zMi1iaXQiCisuUEQgMAorLklQICJcZkJcLW0xNlwtYml0XGZSIiA0CisuSVggSXRlbSAiLW0xNi1iaXQiCisuSVAgIlxmQlwtbThcLWJpdFxmUiIgNAorLklYIEl0ZW0gIi1tOC1iaXQiCisuUEQKK1NpbWlsYXIgdG8gdGhlIHN0YWNrXC0gZGF0YVwtIGFuZCBjb25zdC1hbGlnbiBvcHRpb25zIGFib3ZlLCB0aGVzZSBvcHRpb25zCithcnJhbmdlIGZvciBzdGFjayBmcmFtZSwgd3JpdGFibGUgZGF0YSBhbmQgY29uc3RhbnRzIHRvIGFsbCBiZSAzMlwtYml0LAorMTZcLWJpdCBvciA4XC1iaXQgYWxpZ25lZC4gIFRoZSBkZWZhdWx0IGlzIDMyXC1iaXQgYWxpZ25tZW50LgorLklQICJcZkJcLW1ub1wtcHJvbG9ndWVcLWVwaWxvZ3VlXGZSIiA0CisuSVggSXRlbSAiLW1uby1wcm9sb2d1ZS1lcGlsb2d1ZSIKKy5QRCAwCisuSVAgIlxmQlwtbXByb2xvZ3VlXC1lcGlsb2d1ZVxmUiIgNAorLklYIEl0ZW0gIi1tcHJvbG9ndWUtZXBpbG9ndWUiCisuUEQKK1dpdGggXGZCXC1tbm9cLXByb2xvZ3VlXC1lcGlsb2d1ZVxmUiwgdGhlIG5vcm1hbCBmdW5jdGlvbiBwcm9sb2d1ZSBhbmQKK2VwaWxvZ3VlIHdoaWNoIHNldCB1cCB0aGUgc3RhY2sgZnJhbWUgYXJlIG9taXR0ZWQgYW5kIG5vIHJldHVybgoraW5zdHJ1Y3Rpb25zIG9yIHJldHVybiBzZXF1ZW5jZXMgYXJlIGdlbmVyYXRlZCBpbiB0aGUgY29kZS4gIFVzZSB0aGlzCitvcHRpb24gb25seSB0b2dldGhlciB3aXRoIHZpc3VhbCBpbnNwZWN0aW9uIG9mIHRoZSBjb21waWxlZCBjb2RlOiBubword2FybmluZ3Mgb3IgZXJyb3JzIGFyZSBnZW5lcmF0ZWQgd2hlbiBjYWxsLXNhdmVkIHJlZ2lzdGVycyBtdXN0IGJlIHNhdmVkLAorb3Igc3RvcmFnZSBmb3IgbG9jYWwgdmFyaWFibGVzIG5lZWRzIHRvIGJlIGFsbG9jYXRlZC4KKy5JUCAiXGZCXC1tbm9cLWdvdHBsdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZ290cGx0IgorLlBEIDAKKy5JUCAiXGZCXC1tZ290cGx0XGZSIiA0CisuSVggSXRlbSAiLW1nb3RwbHQiCisuUEQKK1dpdGggXGZCXC1mcGljXGZSIGFuZCBcZkJcLWZQSUNcZlIsIGRvbid0IGdlbmVyYXRlIChkbyBnZW5lcmF0ZSkKK2luc3RydWN0aW9uIHNlcXVlbmNlcyB0aGF0IGxvYWQgYWRkcmVzc2VzIGZvciBmdW5jdGlvbnMgZnJvbSB0aGUgXHMtMVBMVFxzMCBwYXJ0CitvZiB0aGUgXHMtMUdPVFxzMCByYXRoZXIgdGhhbiAodHJhZGl0aW9uYWwgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcykgY2FsbHMgdG8gdGhlCitcJlxzLTFQTFRcczAuICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1nb3RwbHRcZlIuCisuSVAgIlxmQlwtbWVsZlxmUiIgNAorLklYIEl0ZW0gIi1tZWxmIgorTGVnYWN5IG5vLW9wIG9wdGlvbiBvbmx5IHJlY29nbml6ZWQgd2l0aCB0aGUgY3Jpcy1heGlzLWVsZiBhbmQKK2NyaXMtYXhpcy1saW51eC1nbnUgdGFyZ2V0cy4KKy5JUCAiXGZCXC1tbGludXhcZlIiIDQKKy5JWCBJdGVtICItbWxpbnV4IgorTGVnYWN5IG5vLW9wIG9wdGlvbiBvbmx5IHJlY29nbml6ZWQgd2l0aCB0aGUgY3Jpcy1heGlzLWxpbnV4LWdudSB0YXJnZXQuCisuSVAgIlxmQlwtc2ltXGZSIiA0CisuSVggSXRlbSAiLXNpbSIKK1RoaXMgb3B0aW9uLCByZWNvZ25pemVkIGZvciB0aGUgY3Jpcy1heGlzLWVsZiwgYXJyYW5nZXMKK3RvIGxpbmsgd2l0aCBpbnB1dC1vdXRwdXQgZnVuY3Rpb25zIGZyb20gYSBzaW11bGF0b3IgbGlicmFyeS4gIENvZGUsCitpbml0aWFsaXplZCBkYXRhIGFuZCB6ZXJvLWluaXRpYWxpemVkIGRhdGEgYXJlIGFsbG9jYXRlZCBjb25zZWN1dGl2ZWx5LgorLklQICJcZkJcLXNpbTJcZlIiIDQKKy5JWCBJdGVtICItc2ltMiIKK0xpa2UgXGZCXC1zaW1cZlIsIGJ1dCBwYXNzIGxpbmtlciBvcHRpb25zIHRvIGxvY2F0ZSBpbml0aWFsaXplZCBkYXRhIGF0CisweDQwMDAwMDAwIGFuZCB6ZXJvLWluaXRpYWxpemVkIGRhdGEgYXQgMHg4MDAwMDAwMC4KKy5QUAorXGZJXHMtMUNSMTZcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkNSMTYgT3B0aW9ucyIKKy5QUAorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBccy0xQ1IxNlxzMCBwb3J0cy4KKy5JUCAiXGZCXC1tbWFjXGZSIiA0CisuSVggSXRlbSAiLW1tYWMiCitFbmFibGUgdGhlIHVzZSBvZiBtdWx0aXBseS1hY2N1bXVsYXRlIGluc3RydWN0aW9ucy4gRGlzYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tY3IxNmNwbHVzXGZSIiA0CisuSVggSXRlbSAiLW1jcjE2Y3BsdXMiCisuUEQgMAorLklQICJcZkJcLW1jcjE2Y1xmUiIgNAorLklYIEl0ZW0gIi1tY3IxNmMiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIFxzLTFDUjE2Q1xzMCBvciBccy0xQ1IxNkMrXHMwIGFyY2hpdGVjdHVyZS4gXHMtMUNSMTZDK1xzMCBhcmNoaXRlY3R1cmUgCitpcyBkZWZhdWx0LgorLklQICJcZkJcLW1zaW1cZlIiIDQKKy5JWCBJdGVtICItbXNpbSIKK0xpbmtzIHRoZSBsaWJyYXJ5IGxpYnNpbS5hIHdoaWNoIGlzIGluIGNvbXBhdGlibGUgd2l0aCBzaW11bGF0b3IuIEFwcGxpY2FibGUKK3RvIFxzLTFFTEZcczAgY29tcGlsZXIgb25seS4KKy5JUCAiXGZCXC1taW50MzJcZlIiIDQKKy5JWCBJdGVtICItbWludDMyIgorQ2hvb3NlIGludGVnZXIgdHlwZSBhcyAzMlwtYml0IHdpZGUuCisuSVAgIlxmQlwtbWJpdFwtb3BzXGZSIiA0CisuSVggSXRlbSAiLW1iaXQtb3BzIgorR2VuZXJhdGVzIFxmKENXXCooQ2BzYml0XCooQydcZlIvXGYoQ1dcKihDYGNiaXRcKihDJ1xmUiBpbnN0cnVjdGlvbnMgZm9yIGJpdCBtYW5pcHVsYXRpb25zLgorLklQICJcZkJcLW1kYXRhXC1tb2RlbD1cZlJcZkltb2RlbFxmUiIgNAorLklYIEl0ZW0gIi1tZGF0YS1tb2RlbD1tb2RlbCIKK0Nob29zZSBhIGRhdGEgbW9kZWwuIFRoZSBjaG9pY2VzIGZvciBcZkltb2RlbFxmUiBhcmUgXGZCbmVhclxmUiwKK1wmXGZCZmFyXGZSIG9yIFxmQm1lZGl1bVxmUi4gXGZCbWVkaXVtXGZSIGlzIGRlZmF1bHQuCitIb3dldmVyLCBcZkJmYXJcZlIgaXMgbm90IHZhbGlkIHdpdGggXGZCXC1tY3IxNmNcZlIsIGFzIHRoZQorXCZccy0xQ1IxNkNcczAgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZhciBkYXRhIG1vZGVsLgorLlBQCitcZklEYXJ3aW4gT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkRhcndpbiBPcHRpb25zIgorLlBQCitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBhbGwgYXJjaGl0ZWN0dXJlcyBydW5uaW5nIHRoZSBEYXJ3aW4gb3BlcmF0aW5nCitzeXN0ZW0uCisuUFAKK1wmXHMtMUZTRlxzMCBccy0xR0NDXHMwIG9uIERhcndpbiBkb2VzIG5vdCBjcmVhdGUgXCooTCJmYXRcKihSIiBvYmplY3QgZmlsZXM7IGl0IGNyZWF0ZXMKK2FuIG9iamVjdCBmaWxlIGZvciB0aGUgc2luZ2xlIGFyY2hpdGVjdHVyZSB0aGF0IFxzLTFHQ0NcczAgd2FzIGJ1aWx0IHRvCit0YXJnZXQuICBBcHBsZSdzIFxzLTFHQ0NcczAgb24gRGFyd2luIGRvZXMgY3JlYXRlIFwqKEwiZmF0XCooUiIgZmlsZXMgaWYgbXVsdGlwbGUKK1wmXGZCXC1hcmNoXGZSIG9wdGlvbnMgYXJlIHVzZWQ7IGl0IGRvZXMgc28gYnkgcnVubmluZyB0aGUgY29tcGlsZXIgb3IKK2xpbmtlciBtdWx0aXBsZSB0aW1lcyBhbmQgam9pbmluZyB0aGUgcmVzdWx0cyB0b2dldGhlciB3aXRoCitcJlxmSWxpcG9cZlIuCisuUFAKK1RoZSBzdWJ0eXBlIG9mIHRoZSBmaWxlIGNyZWF0ZWQgKGxpa2UgXGZCcHBjNzQwMFxmUiBvciBcZkJwcGM5NzBcZlIgb3IKK1wmXGZCaTY4NlxmUikgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZmxhZ3MgdGhhdCBzcGVjaWZ5IHRoZSBccy0xSVNBXHMwCit0aGF0IFxzLTFHQ0NcczAgaXMgdGFyZ2V0aW5nLCBsaWtlIFxmQlwtbWNwdVxmUiBvciBcZkJcLW1hcmNoXGZSLiAgVGhlCitcJlxmQlwtZm9yY2VfY3B1c3VidHlwZV9BTExcZlIgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoaXMuCisuUFAKK1RoZSBEYXJ3aW4gdG9vbHMgdmFyeSBpbiB0aGVpciBiZWhhdmlvciB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIFxzLTFJU0FcczAKK21pc21hdGNoLiAgVGhlIGFzc2VtYmxlciwgXGZJYXNcZlIsIG9ubHkgcGVybWl0cyBpbnN0cnVjdGlvbnMgdG8KK2JlIHVzZWQgdGhhdCBhcmUgdmFsaWQgZm9yIHRoZSBzdWJ0eXBlIG9mIHRoZSBmaWxlIGl0IGlzIGdlbmVyYXRpbmcsCitzbyB5b3UgY2Fubm90IHB1dCA2NFwtYml0IGluc3RydWN0aW9ucyBpbiBhIFxmQnBwYzc1MFxmUiBvYmplY3QgZmlsZS4KK1RoZSBsaW5rZXIgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIFxmSS91c3IvYmluL2xpYnRvb2xcZlIsIGZhaWxzCithbmQgcHJpbnRzIGFuIGVycm9yIGlmIGFza2VkIHRvIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IHdpdGggYSBsZXNzCityZXN0cmljdGl2ZSBzdWJ0eXBlIHRoYW4gaXRzIGlucHV0IGZpbGVzIChmb3IgaW5zdGFuY2UsIHRyeWluZyB0byBwdXQKK2EgXGZCcHBjOTcwXGZSIG9iamVjdCBmaWxlIGluIGEgXGZCcHBjNzQwMFxmUiBsaWJyYXJ5KS4gIFRoZSBsaW5rZXIKK2ZvciBleGVjdXRhYmxlcywgXGZCbGRcZlIsIHF1aWV0bHkgZ2l2ZXMgdGhlIGV4ZWN1dGFibGUgdGhlIG1vc3QKK3Jlc3RyaWN0aXZlIHN1YnR5cGUgb2YgYW55IG9mIGl0cyBpbnB1dCBmaWxlcy4KKy5JUCAiXGZCXC1GXGZSXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLUZkaXIiCitBZGQgdGhlIGZyYW1ld29yayBkaXJlY3RvcnkgXGZJZGlyXGZSIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9mCitkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCBmb3IgaGVhZGVyIGZpbGVzLiAgVGhlc2UgZGlyZWN0b3JpZXMgYXJlCitpbnRlcmxlYXZlZCB3aXRoIHRob3NlIHNwZWNpZmllZCBieSBcZkJcLUlcZlIgb3B0aW9ucyBhbmQgYXJlCitzY2FubmVkIGluIGEgbGVmdC10by1yaWdodCBvcmRlci4KKy5TcAorQSBmcmFtZXdvcmsgZGlyZWN0b3J5IGlzIGEgZGlyZWN0b3J5IHdpdGggZnJhbWV3b3JrcyBpbiBpdC4gIEEKK2ZyYW1ld29yayBpcyBhIGRpcmVjdG9yeSB3aXRoIGEgXGZJSGVhZGVyc1xmUiBhbmQvb3IKK1wmXGZJUHJpdmF0ZUhlYWRlcnNcZlIgZGlyZWN0b3J5IGNvbnRhaW5lZCBkaXJlY3RseSBpbiBpdCB0aGF0IGVuZHMKK2luIFxmSS5mcmFtZXdvcmtcZlIuICBUaGUgbmFtZSBvZiBhIGZyYW1ld29yayBpcyB0aGUgbmFtZSBvZiB0aGlzCitkaXJlY3RvcnkgZXhjbHVkaW5nIHRoZSBcZkkuZnJhbWV3b3JrXGZSLiAgSGVhZGVycyBhc3NvY2lhdGVkIHdpdGgKK3RoZSBmcmFtZXdvcmsgYXJlIGZvdW5kIGluIG9uZSBvZiB0aG9zZSB0d28gZGlyZWN0b3JpZXMsIHdpdGgKK1wmXGZJSGVhZGVyc1xmUiBiZWluZyBzZWFyY2hlZCBmaXJzdC4gIEEgc3ViZnJhbWV3b3JrIGlzIGEgZnJhbWV3b3JrCitkaXJlY3RvcnkgdGhhdCBpcyBpbiBhIGZyYW1ld29yaydzIFxmSUZyYW1ld29ya3NcZlIgZGlyZWN0b3J5LgorSW5jbHVkZXMgb2Ygc3ViZnJhbWV3b3JrIGhlYWRlcnMgY2FuIG9ubHkgYXBwZWFyIGluIGEgaGVhZGVyIG9mIGEKK2ZyYW1ld29yayB0aGF0IGNvbnRhaW5zIHRoZSBzdWJmcmFtZXdvcmssIG9yIGluIGEgc2libGluZyBzdWJmcmFtZXdvcmsKK2hlYWRlci4gIFR3byBzdWJmcmFtZXdvcmtzIGFyZSBzaWJsaW5ncyBpZiB0aGV5IG9jY3VyIGluIHRoZSBzYW1lCitmcmFtZXdvcmsuICBBIHN1YmZyYW1ld29yayBzaG91bGQgbm90IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhCitmcmFtZXdvcms7IGEgd2FybmluZyBpcyBpc3N1ZWQgaWYgdGhpcyBpcyB2aW9sYXRlZC4gIEN1cnJlbnRseSBhCitzdWJmcmFtZXdvcmsgY2Fubm90IGhhdmUgc3ViZnJhbWV3b3JrczsgaW4gdGhlIGZ1dHVyZSwgdGhlIG1lY2hhbmlzbQorbWF5IGJlIGV4dGVuZGVkIHRvIHN1cHBvcnQgdGhpcy4gIFRoZSBzdGFuZGFyZCBmcmFtZXdvcmtzIGNhbiBiZSBmb3VuZAoraW4gXGZJL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3NcZlIgYW5kCitcJlxmSS9MaWJyYXJ5L0ZyYW1ld29ya3NcZlIuICBBbiBleGFtcGxlIGluY2x1ZGUgbG9va3MgbGlrZQorXCZcZihDV1wqKENgI2luY2x1ZGUgPEZyYW1ld29yay9oZWFkZXIuaD5cKihDJ1xmUiwgd2hlcmUgXGZJRnJhbWV3b3JrXGZSIGRlbm90ZXMKK3RoZSBuYW1lIG9mIHRoZSBmcmFtZXdvcmsgYW5kIFxmSWhlYWRlci5oXGZSIGlzIGZvdW5kIGluIHRoZQorXCZcZklQcml2YXRlSGVhZGVyc1xmUiBvciBcZklIZWFkZXJzXGZSIGRpcmVjdG9yeS4KKy5JUCAiXGZCXC1pZnJhbWV3b3JrXGZSXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWlmcmFtZXdvcmtkaXIiCitMaWtlIFxmQlwtRlxmUiBleGNlcHQgdGhlIGRpcmVjdG9yeSBpcyBhIHRyZWF0ZWQgYXMgYSBzeXN0ZW0KK2RpcmVjdG9yeS4gIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIFxmQlwtaWZyYW1ld29ya1xmUiBhbmQKK1wmXGZCXC1GXGZSIGlzIHRoYXQgd2l0aCBcZkJcLWlmcmFtZXdvcmtcZlIgdGhlIGNvbXBpbGVyIGRvZXMgbm90Cit3YXJuIGFib3V0IGNvbnN0cnVjdHMgY29udGFpbmVkIHdpdGhpbiBoZWFkZXIgZmlsZXMgZm91bmQgdmlhCitcJlxmSWRpclxmUi4gIFRoaXMgb3B0aW9uIGlzIHZhbGlkIG9ubHkgZm9yIHRoZSBDIGZhbWlseSBvZiBsYW5ndWFnZXMuCisuSVAgIlxmQlwtZ3VzZWRcZlIiIDQKKy5JWCBJdGVtICItZ3VzZWQiCitFbWl0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3Igc3ltYm9scyB0aGF0IGFyZSB1c2VkLiAgRm9yIHN0YWJzCitkZWJ1Z2dpbmcgZm9ybWF0LCB0aGlzIGVuYWJsZXMgXGZCXC1mZWxpbWluYXRlXC11bnVzZWRcLWRlYnVnXC1zeW1ib2xzXGZSLgorVGhpcyBpcyBieSBkZWZhdWx0IFxzLTFPTlxzMC4KKy5JUCAiXGZCXC1nZnVsbFxmUiIgNAorLklYIEl0ZW0gIi1nZnVsbCIKK0VtaXQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBhbGwgc3ltYm9scyBhbmQgdHlwZXMuCisuSVAgIlxmQlwtbW1hY29zeFwtdmVyc2lvblwtbWluPVxmUlxmSXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItbW1hY29zeC12ZXJzaW9uLW1pbj12ZXJzaW9uIgorVGhlIGVhcmxpZXN0IHZlcnNpb24gb2YgTWFjT1MgWCB0aGF0IHRoaXMgZXhlY3V0YWJsZSB3aWxsIHJ1biBvbgoraXMgXGZJdmVyc2lvblxmUi4gIFR5cGljYWwgdmFsdWVzIG9mIFxmSXZlcnNpb25cZlIgaW5jbHVkZSBcZihDVzEwLjFcZlIsCitcJlxmKENXMTAuMlxmUiwgYW5kIFxmKENXMTAuMy45XGZSLgorLlNwCitJZiB0aGUgY29tcGlsZXIgd2FzIGJ1aWx0IHRvIHVzZSB0aGUgc3lzdGVtJ3MgaGVhZGVycyBieSBkZWZhdWx0LAordGhlbiB0aGUgZGVmYXVsdCBmb3IgdGhpcyBvcHRpb24gaXMgdGhlIHN5c3RlbSB2ZXJzaW9uIG9uIHdoaWNoIHRoZQorY29tcGlsZXIgaXMgcnVubmluZywgb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGlzIHRvIG1ha2UgY2hvaWNlcyB0aGF0CithcmUgY29tcGF0aWJsZSB3aXRoIGFzIG1hbnkgc3lzdGVtcyBhbmQgY29kZSBiYXNlcyBhcyBwb3NzaWJsZS4KKy5JUCAiXGZCXC1ta2VybmVsXGZSIiA0CisuSVggSXRlbSAiLW1rZXJuZWwiCitFbmFibGUga2VybmVsIGRldmVsb3BtZW50IG1vZGUuICBUaGUgXGZCXC1ta2VybmVsXGZSIG9wdGlvbiBzZXRzCitcJlxmQlwtc3RhdGljXGZSLCBcZkJcLWZub1wtY29tbW9uXGZSLCBcZkJcLWZub1wtY3hhXC1hdGV4aXRcZlIsCitcJlxmQlwtZm5vXC1leGNlcHRpb25zXGZSLCBcZkJcLWZub1wtbm9uXC1jYWxsXC1leGNlcHRpb25zXGZSLAorXCZcZkJcLWZhcHBsZVwta2V4dFxmUiwgXGZCXC1mbm9cLXdlYWtcZlIgYW5kIFxmQlwtZm5vXC1ydHRpXGZSIHdoZXJlCithcHBsaWNhYmxlLiAgVGhpcyBtb2RlIGFsc28gc2V0cyBcZkJcLW1ub1wtYWx0aXZlY1xmUiwKK1wmXGZCXC1tc29mdFwtZmxvYXRcZlIsIFxmQlwtZm5vXC1idWlsdGluXGZSIGFuZAorXCZcZkJcLW1sb25nXC1icmFuY2hcZlIgZm9yIFBvd2VyUEMgdGFyZ2V0cy4KKy5JUCAiXGZCXC1tb25lXC1ieXRlXC1ib29sXGZSIiA0CisuSVggSXRlbSAiLW1vbmUtYnl0ZS1ib29sIgorT3ZlcnJpZGUgdGhlIGRlZmF1bHRzIGZvciBcZkJib29sXGZSIHNvIHRoYXQgXGZCc2l6ZW9mKGJvb2wpPT0xXGZSLgorQnkgZGVmYXVsdCBcZkJzaXplb2YoYm9vbClcZlIgaXMgXGZCNFxmUiB3aGVuIGNvbXBpbGluZyBmb3IKK0Rhcndpbi9Qb3dlclBDIGFuZCBcZkIxXGZSIHdoZW4gY29tcGlsaW5nIGZvciBEYXJ3aW4veDg2LCBzbyB0aGlzCitvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB4ODYuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgVGhlIFxmQlwtbW9uZVwtYnl0ZVwtYm9vbFxmUiBzd2l0Y2ggY2F1c2VzIFxzLTFHQ0NcczAKK3RvIGdlbmVyYXRlIGNvZGUgdGhhdCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZAord2l0aG91dCB0aGF0IHN3aXRjaC4gIFVzaW5nIHRoaXMgc3dpdGNoIG1heSByZXF1aXJlIHJlY29tcGlsaW5nIGFsbAorb3RoZXIgbW9kdWxlcyBpbiBhIHByb2dyYW0sIGluY2x1ZGluZyBzeXN0ZW0gbGlicmFyaWVzLiAgVXNlIHRoaXMKK3N3aXRjaCB0byBjb25mb3JtIHRvIGEgbm9uLWRlZmF1bHQgZGF0YSBtb2RlbC4KKy5JUCAiXGZCXC1tZml4XC1hbmRcLWNvbnRpbnVlXGZSIiA0CisuSVggSXRlbSAiLW1maXgtYW5kLWNvbnRpbnVlIgorLlBEIDAKKy5JUCAiXGZCXC1mZml4XC1hbmRcLWNvbnRpbnVlXGZSIiA0CisuSVggSXRlbSAiLWZmaXgtYW5kLWNvbnRpbnVlIgorLklQICJcZkJcLWZpbmRpcmVjdFwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1maW5kaXJlY3QtZGF0YSIKKy5QRAorR2VuZXJhdGUgY29kZSBzdWl0YWJsZSBmb3IgZmFzdCB0dXJuYXJvdW5kIGRldmVsb3BtZW50LCBzdWNoIGFzIHRvCithbGxvdyBccy0xR0RCXHMwIHRvIGR5bmFtaWNhbGx5IGxvYWQgXGYoQ1dcKihDYC5vXCooQydcZlIgZmlsZXMgaW50byBhbHJlYWR5LXJ1bm5pbmcKK3Byb2dyYW1zLiAgXGZCXC1maW5kaXJlY3RcLWRhdGFcZlIgYW5kIFxmQlwtZmZpeFwtYW5kXC1jb250aW51ZVxmUgorYXJlIHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKy5JUCAiXGZCXC1hbGxfbG9hZFxmUiIgNAorLklYIEl0ZW0gIi1hbGxfbG9hZCIKK0xvYWRzIGFsbCBtZW1iZXJzIG9mIHN0YXRpYyBhcmNoaXZlIGxpYnJhcmllcy4KK1NlZSBtYW4gXGZJbGRcZlJcfCgxKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5JUCAiXGZCXC1hcmNoX2Vycm9yc19mYXRhbFxmUiIgNAorLklYIEl0ZW0gIi1hcmNoX2Vycm9yc19mYXRhbCIKK0NhdXNlIHRoZSBlcnJvcnMgaGF2aW5nIHRvIGRvIHdpdGggZmlsZXMgdGhhdCBoYXZlIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUKK3RvIGJlIGZhdGFsLgorLklQICJcZkJcLWJpbmRfYXRfbG9hZFxmUiIgNAorLklYIEl0ZW0gIi1iaW5kX2F0X2xvYWQiCitDYXVzZXMgdGhlIG91dHB1dCBmaWxlIHRvIGJlIG1hcmtlZCBzdWNoIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIHdpbGwKK2JpbmQgYWxsIHVuZGVmaW5lZCByZWZlcmVuY2VzIHdoZW4gdGhlIGZpbGUgaXMgbG9hZGVkIG9yIGxhdW5jaGVkLgorLklQICJcZkJcLWJ1bmRsZVxmUiIgNAorLklYIEl0ZW0gIi1idW5kbGUiCitQcm9kdWNlIGEgTWFjaC1vIGJ1bmRsZSBmb3JtYXQgZmlsZS4KK1NlZSBtYW4gXGZJbGRcZlJcfCgxKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKy5JUCAiXGZCXC1idW5kbGVfbG9hZGVyXGZSIFxmSWV4ZWN1dGFibGVcZlIiIDQKKy5JWCBJdGVtICItYnVuZGxlX2xvYWRlciBleGVjdXRhYmxlIgorVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBcZklleGVjdXRhYmxlXGZSIHRoYXQgd2lsbCBsb2FkIHRoZSBidWlsZAorb3V0cHV0IGZpbGUgYmVpbmcgbGlua2VkLiAgU2VlIG1hbiBcZklsZFxmUlx8KDEpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorLklQICJcZkJcLWR5bmFtaWNsaWJcZlIiIDQKKy5JWCBJdGVtICItZHluYW1pY2xpYiIKK1doZW4gcGFzc2VkIHRoaXMgb3B0aW9uLCBccy0xR0NDXHMwIHByb2R1Y2VzIGEgZHluYW1pYyBsaWJyYXJ5IGluc3RlYWQgb2YKK2FuIGV4ZWN1dGFibGUgd2hlbiBsaW5raW5nLCB1c2luZyB0aGUgRGFyd2luIFxmSWxpYnRvb2xcZlIgY29tbWFuZC4KKy5JUCAiXGZCXC1mb3JjZV9jcHVzdWJ0eXBlX0FMTFxmUiIgNAorLklYIEl0ZW0gIi1mb3JjZV9jcHVzdWJ0eXBlX0FMTCIKK1RoaXMgY2F1c2VzIFxzLTFHQ0NcczAncyBvdXRwdXQgZmlsZSB0byBoYXZlIHRoZSBcZklccy0xQUxMXHMwXGZSIHN1YnR5cGUsIGluc3RlYWQgb2YKK29uZSBjb250cm9sbGVkIGJ5IHRoZSBcZkJcLW1jcHVcZlIgb3IgXGZCXC1tYXJjaFxmUiBvcHRpb24uCisuSVAgIlxmQlwtYWxsb3dhYmxlX2NsaWVudFxmUiAgXGZJY2xpZW50X25hbWVcZlIiIDQKKy5JWCBJdGVtICItYWxsb3dhYmxlX2NsaWVudCAgY2xpZW50X25hbWUiCisuUEQgMAorLklQICJcZkJcLWNsaWVudF9uYW1lXGZSIiA0CisuSVggSXRlbSAiLWNsaWVudF9uYW1lIgorLklQICJcZkJcLWNvbXBhdGliaWxpdHlfdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi1jb21wYXRpYmlsaXR5X3ZlcnNpb24iCisuSVAgIlxmQlwtY3VycmVudF92ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLWN1cnJlbnRfdmVyc2lvbiIKKy5JUCAiXGZCXC1kZWFkX3N0cmlwXGZSIiA0CisuSVggSXRlbSAiLWRlYWRfc3RyaXAiCisuSVAgIlxmQlwtZGVwZW5kZW5jeVwtZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1kZXBlbmRlbmN5LWZpbGUiCisuSVAgIlxmQlwtZHlsaWJfZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1keWxpYl9maWxlIgorLklQICJcZkJcLWR5bGlua2VyX2luc3RhbGxfbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1keWxpbmtlcl9pbnN0YWxsX25hbWUiCisuSVAgIlxmQlwtZHluYW1pY1xmUiIgNAorLklYIEl0ZW0gIi1keW5hbWljIgorLklQICJcZkJcLWV4cG9ydGVkX3N5bWJvbHNfbGlzdFxmUiIgNAorLklYIEl0ZW0gIi1leHBvcnRlZF9zeW1ib2xzX2xpc3QiCisuSVAgIlxmQlwtZmlsZWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmlsZWxpc3QiCisuSVAgIlxmQlwtZmxhdF9uYW1lc3BhY2VcZlIiIDQKKy5JWCBJdGVtICItZmxhdF9uYW1lc3BhY2UiCisuSVAgIlxmQlwtZm9yY2VfZmxhdF9uYW1lc3BhY2VcZlIiIDQKKy5JWCBJdGVtICItZm9yY2VfZmxhdF9uYW1lc3BhY2UiCisuSVAgIlxmQlwtaGVhZGVycGFkX21heF9pbnN0YWxsX25hbWVzXGZSIiA0CisuSVggSXRlbSAiLWhlYWRlcnBhZF9tYXhfaW5zdGFsbF9uYW1lcyIKKy5JUCAiXGZCXC1pbWFnZV9iYXNlXGZSIiA0CisuSVggSXRlbSAiLWltYWdlX2Jhc2UiCisuSVAgIlxmQlwtaW5pdFxmUiIgNAorLklYIEl0ZW0gIi1pbml0IgorLklQICJcZkJcLWluc3RhbGxfbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1pbnN0YWxsX25hbWUiCisuSVAgIlxmQlwta2VlcF9wcml2YXRlX2V4dGVybnNcZlIiIDQKKy5JWCBJdGVtICIta2VlcF9wcml2YXRlX2V4dGVybnMiCisuSVAgIlxmQlwtbXVsdGlfbW9kdWxlXGZSIiA0CisuSVggSXRlbSAiLW11bHRpX21vZHVsZSIKKy5JUCAiXGZCXC1tdWx0aXBseV9kZWZpbmVkXGZSIiA0CisuSVggSXRlbSAiLW11bHRpcGx5X2RlZmluZWQiCisuSVAgIlxmQlwtbXVsdGlwbHlfZGVmaW5lZF91bnVzZWRcZlIiIDQKKy5JWCBJdGVtICItbXVsdGlwbHlfZGVmaW5lZF91bnVzZWQiCisuSVAgIlxmQlwtbm9hbGxfbG9hZFxmUiIgNAorLklYIEl0ZW0gIi1ub2FsbF9sb2FkIgorLklQICJcZkJcLW5vX2RlYWRfc3RyaXBfaW5pdHNfYW5kX3Rlcm1zXGZSIiA0CisuSVggSXRlbSAiLW5vX2RlYWRfc3RyaXBfaW5pdHNfYW5kX3Rlcm1zIgorLklQICJcZkJcLW5vZml4cHJlYmluZGluZ1xmUiIgNAorLklYIEl0ZW0gIi1ub2ZpeHByZWJpbmRpbmciCisuSVAgIlxmQlwtbm9tdWx0aWRlZnNcZlIiIDQKKy5JWCBJdGVtICItbm9tdWx0aWRlZnMiCisuSVAgIlxmQlwtbm9wcmViaW5kXGZSIiA0CisuSVggSXRlbSAiLW5vcHJlYmluZCIKKy5JUCAiXGZCXC1ub3NlZ2xpbmtlZGl0XGZSIiA0CisuSVggSXRlbSAiLW5vc2VnbGlua2VkaXQiCisuSVAgIlxmQlwtcGFnZXplcm9fc2l6ZVxmUiIgNAorLklYIEl0ZW0gIi1wYWdlemVyb19zaXplIgorLklQICJcZkJcLXByZWJpbmRcZlIiIDQKKy5JWCBJdGVtICItcHJlYmluZCIKKy5JUCAiXGZCXC1wcmViaW5kX2FsbF90d29sZXZlbF9tb2R1bGVzXGZSIiA0CisuSVggSXRlbSAiLXByZWJpbmRfYWxsX3R3b2xldmVsX21vZHVsZXMiCisuSVAgIlxmQlwtcHJpdmF0ZV9idW5kbGVcZlIiIDQKKy5JWCBJdGVtICItcHJpdmF0ZV9idW5kbGUiCisuSVAgIlxmQlwtcmVhZF9vbmx5X3JlbG9jc1xmUiIgNAorLklYIEl0ZW0gIi1yZWFkX29ubHlfcmVsb2NzIgorLklQICJcZkJcLXNlY3RhbGlnblxmUiIgNAorLklYIEl0ZW0gIi1zZWN0YWxpZ24iCisuSVAgIlxmQlwtc2VjdG9iamVjdHN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItc2VjdG9iamVjdHN5bWJvbHMiCisuSVAgIlxmQlwtd2h5bG9hZFxmUiIgNAorLklYIEl0ZW0gIi13aHlsb2FkIgorLklQICJcZkJcLXNlZzFhZGRyXGZSIiA0CisuSVggSXRlbSAiLXNlZzFhZGRyIgorLklQICJcZkJcLXNlY3RjcmVhdGVcZlIiIDQKKy5JWCBJdGVtICItc2VjdGNyZWF0ZSIKKy5JUCAiXGZCXC1zZWN0b2JqZWN0c3ltYm9sc1xmUiIgNAorLklYIEl0ZW0gIi1zZWN0b2JqZWN0c3ltYm9scyIKKy5JUCAiXGZCXC1zZWN0b3JkZXJcZlIiIDQKKy5JWCBJdGVtICItc2VjdG9yZGVyIgorLklQICJcZkJcLXNlZ2FkZHJcZlIiIDQKKy5JWCBJdGVtICItc2VnYWRkciIKKy5JUCAiXGZCXC1zZWdzX3JlYWRfb25seV9hZGRyXGZSIiA0CisuSVggSXRlbSAiLXNlZ3NfcmVhZF9vbmx5X2FkZHIiCisuSVAgIlxmQlwtc2Vnc19yZWFkX3dyaXRlX2FkZHJcZlIiIDQKKy5JWCBJdGVtICItc2Vnc19yZWFkX3dyaXRlX2FkZHIiCisuSVAgIlxmQlwtc2VnX2FkZHJfdGFibGVcZlIiIDQKKy5JWCBJdGVtICItc2VnX2FkZHJfdGFibGUiCisuSVAgIlxmQlwtc2VnX2FkZHJfdGFibGVfZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItc2VnX2FkZHJfdGFibGVfZmlsZW5hbWUiCisuSVAgIlxmQlwtc2VnbGlua2VkaXRcZlIiIDQKKy5JWCBJdGVtICItc2VnbGlua2VkaXQiCisuSVAgIlxmQlwtc2VncHJvdFxmUiIgNAorLklYIEl0ZW0gIi1zZWdwcm90IgorLklQICJcZkJcLXNlZ3NfcmVhZF9vbmx5X2FkZHJcZlIiIDQKKy5JWCBJdGVtICItc2Vnc19yZWFkX29ubHlfYWRkciIKKy5JUCAiXGZCXC1zZWdzX3JlYWRfd3JpdGVfYWRkclxmUiIgNAorLklYIEl0ZW0gIi1zZWdzX3JlYWRfd3JpdGVfYWRkciIKKy5JUCAiXGZCXC1zaW5nbGVfbW9kdWxlXGZSIiA0CisuSVggSXRlbSAiLXNpbmdsZV9tb2R1bGUiCisuSVAgIlxmQlwtc3RhdGljXGZSIiA0CisuSVggSXRlbSAiLXN0YXRpYyIKKy5JUCAiXGZCXC1zdWJfbGlicmFyeVxmUiIgNAorLklYIEl0ZW0gIi1zdWJfbGlicmFyeSIKKy5JUCAiXGZCXC1zdWJfdW1icmVsbGFcZlIiIDQKKy5JWCBJdGVtICItc3ViX3VtYnJlbGxhIgorLklQICJcZkJcLXR3b2xldmVsX25hbWVzcGFjZVxmUiIgNAorLklYIEl0ZW0gIi10d29sZXZlbF9uYW1lc3BhY2UiCisuSVAgIlxmQlwtdW1icmVsbGFcZlIiIDQKKy5JWCBJdGVtICItdW1icmVsbGEiCisuSVAgIlxmQlwtdW5kZWZpbmVkXGZSIiA0CisuSVggSXRlbSAiLXVuZGVmaW5lZCIKKy5JUCAiXGZCXC11bmV4cG9ydGVkX3N5bWJvbHNfbGlzdFxmUiIgNAorLklYIEl0ZW0gIi11bmV4cG9ydGVkX3N5bWJvbHNfbGlzdCIKKy5JUCAiXGZCXC13ZWFrX3JlZmVyZW5jZV9taXNtYXRjaGVzXGZSIiA0CisuSVggSXRlbSAiLXdlYWtfcmVmZXJlbmNlX21pc21hdGNoZXMiCisuSVAgIlxmQlwtd2hhdHNsb2FkZWRcZlIiIDQKKy5JWCBJdGVtICItd2hhdHNsb2FkZWQiCisuUEQKK1RoZXNlIG9wdGlvbnMgYXJlIHBhc3NlZCB0byB0aGUgRGFyd2luIGxpbmtlci4gIFRoZSBEYXJ3aW4gbGlua2VyIG1hbiBwYWdlCitkZXNjcmliZXMgdGhlbSBpbiBkZXRhaWwuCisuUFAKK1xmSVxzLTFERUNcczAgQWxwaGEgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkRFQyBBbHBoYSBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIFxzLTFERUNcczAgQWxwaGEgaW1wbGVtZW50YXRpb25zOgorLklQICJcZkJcLW1ub1wtc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNvZnQtZmxvYXQiCisuUEQgMAorLklQICJcZkJcLW1zb2Z0XC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1mbG9hdCIKKy5QRAorVXNlIChkbyBub3QgdXNlKSB0aGUgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGZvcgorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4gIFdoZW4gXGZCXC1tc29mdFwtZmxvYXRcZlIgaXMgc3BlY2lmaWVkLAorZnVuY3Rpb25zIGluIFxmSWxpYmdjYy5hXGZSIGFyZSB1c2VkIHRvIHBlcmZvcm0gZmxvYXRpbmctcG9pbnQKK29wZXJhdGlvbnMuICBVbmxlc3MgdGhleSBhcmUgcmVwbGFjZWQgYnkgcm91dGluZXMgdGhhdCBlbXVsYXRlIHRoZQorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucywgb3IgY29tcGlsZWQgaW4gc3VjaCBhIHdheSBhcyB0byBjYWxsIHN1Y2gKK2VtdWxhdGlvbnMgcm91dGluZXMsIHRoZXNlIHJvdXRpbmVzIGlzc3VlIGZsb2F0aW5nLXBvaW50CitvcGVyYXRpb25zLiAgIElmIHlvdSBhcmUgY29tcGlsaW5nIGZvciBhbiBBbHBoYSB3aXRob3V0IGZsb2F0aW5nLXBvaW50CitvcGVyYXRpb25zLCB5b3UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgbGlicmFyeSBpcyBidWlsdCBzbyBhcyBub3QgdG8gY2FsbAordGhlbS4KKy5TcAorTm90ZSB0aGF0IEFscGhhIGltcGxlbWVudGF0aW9ucyB3aXRob3V0IGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXJlCityZXF1aXJlZCB0byBoYXZlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tZnBcLXJlZ1xmUiIgNAorLklYIEl0ZW0gIi1tZnAtcmVnIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZwXC1yZWdzXGZSIiA0CisuSVggSXRlbSAiLW1uby1mcC1yZWdzIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0LgorXCZcZkJcLW1ub1wtZnBcLXJlZ3NcZlIgaW1wbGllcyBcZkJcLW1zb2Z0XC1mbG9hdFxmUi4gIElmIHRoZSBmbG9hdGluZy1wb2ludAorcmVnaXN0ZXIgc2V0IGlzIG5vdCB1c2VkLCBmbG9hdGluZy1wb2ludCBvcGVyYW5kcyBhcmUgcGFzc2VkIGluIGludGVnZXIKK3JlZ2lzdGVycyBhcyBpZiB0aGV5IHdlcmUgaW50ZWdlcnMgYW5kIGZsb2F0aW5nLXBvaW50IHJlc3VsdHMgYXJlIHBhc3NlZAoraW4gXGYoQ1ckMFxmUiBpbnN0ZWFkIG9mIFxmKENXJGYwXGZSLiAgVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCBjYWxsaW5nIHNlcXVlbmNlLAorc28gYW55IGZ1bmN0aW9uIHdpdGggYSBmbG9hdGluZy1wb2ludCBhcmd1bWVudCBvciByZXR1cm4gdmFsdWUgY2FsbGVkIGJ5IGNvZGUKK2NvbXBpbGVkIHdpdGggXGZCXC1tbm9cLWZwXC1yZWdzXGZSIG11c3QgYWxzbyBiZSBjb21waWxlZCB3aXRoIHRoYXQKK29wdGlvbi4KKy5TcAorQSB0eXBpY2FsIHVzZSBvZiB0aGlzIG9wdGlvbiBpcyBidWlsZGluZyBhIGtlcm5lbCB0aGF0IGRvZXMgbm90IHVzZSwKK2FuZCBoZW5jZSBuZWVkIG5vdCBzYXZlIGFuZCByZXN0b3JlLCBhbnkgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorLklQICJcZkJcLW1pZWVlXGZSIiA0CisuSVggSXRlbSAiLW1pZWVlIgorVGhlIEFscGhhIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRzIGZsb2F0aW5nLXBvaW50IGhhcmR3YXJlIG9wdGltaXplZCBmb3IKK21heGltdW0gcGVyZm9ybWFuY2UuICBJdCBpcyBtb3N0bHkgY29tcGxpYW50IHdpdGggdGhlIFxzLTFJRUVFXHMwIGZsb2F0aW5nLXBvaW50CitzdGFuZGFyZC4gIEhvd2V2ZXIsIGZvciBmdWxsIGNvbXBsaWFuY2UsIHNvZnR3YXJlIGFzc2lzdGFuY2UgaXMKK3JlcXVpcmVkLiAgVGhpcyBvcHRpb24gZ2VuZXJhdGVzIGNvZGUgZnVsbHkgSUVFRS1jb21wbGlhbnQgY29kZQorXCZcZklleGNlcHRcZlIgdGhhdCB0aGUgXGZJaW5leGFjdC1mbGFnXGZSIGlzIG5vdCBtYWludGFpbmVkIChzZWUgYmVsb3cpLgorSWYgdGhpcyBvcHRpb24gaXMgdHVybmVkIG9uLCB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvIFxmKENXXCooQ2BfSUVFRV9GUFwqKEMnXGZSIGlzCitkZWZpbmVkIGR1cmluZyBjb21waWxhdGlvbi4gIFRoZSByZXN1bHRpbmcgY29kZSBpcyBsZXNzIGVmZmljaWVudCBidXQgaXMKK2FibGUgdG8gY29ycmVjdGx5IHN1cHBvcnQgZGVub3JtYWxpemVkIG51bWJlcnMgYW5kIGV4Y2VwdGlvbmFsIFxzLTFJRUVFXHMwCit2YWx1ZXMgc3VjaCBhcyBub3QtYS1udW1iZXIgYW5kIHBsdXMvbWludXMgaW5maW5pdHkuICBPdGhlciBBbHBoYQorY29tcGlsZXJzIGNhbGwgdGhpcyBvcHRpb24gXGZCXC1pZWVlX3dpdGhfbm9faW5leGFjdFxmUi4KKy5JUCAiXGZCXC1taWVlZVwtd2l0aFwtaW5leGFjdFxmUiIgNAorLklYIEl0ZW0gIi1taWVlZS13aXRoLWluZXhhY3QiCitUaGlzIGlzIGxpa2UgXGZCXC1taWVlZVxmUiBleGNlcHQgdGhlIGdlbmVyYXRlZCBjb2RlIGFsc28gbWFpbnRhaW5zCit0aGUgXHMtMUlFRUVcczAgXGZJaW5leGFjdC1mbGFnXGZSLiAgVHVybmluZyBvbiB0aGlzIG9wdGlvbiBjYXVzZXMgdGhlCitnZW5lcmF0ZWQgY29kZSB0byBpbXBsZW1lbnQgZnVsbHktY29tcGxpYW50IFxzLTFJRUVFXHMwIG1hdGguICBJbiBhZGRpdGlvbiB0bworXCZcZihDV1wqKENgX0lFRUVfRlBcKihDJ1xmUiwgXGYoQ1dcKihDYF9JRUVFX0ZQX0VYQUNUXCooQydcZlIgaXMgZGVmaW5lZCBhcyBhIHByZXByb2Nlc3NvcgorbWFjcm8uICBPbiBzb21lIEFscGhhIGltcGxlbWVudGF0aW9ucyB0aGUgcmVzdWx0aW5nIGNvZGUgbWF5IGV4ZWN1dGUKK3NpZ25pZmljYW50bHkgc2xvd2VyIHRoYW4gdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQuICBTaW5jZSB0aGVyZSBpcwordmVyeSBsaXR0bGUgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhlIFxmSWluZXhhY3QtZmxhZ1xmUiwgeW91IHNob3VsZAorbm9ybWFsbHkgbm90IHNwZWNpZnkgdGhpcyBvcHRpb24uICBPdGhlciBBbHBoYSBjb21waWxlcnMgY2FsbCB0aGlzCitvcHRpb24gXGZCXC1pZWVlX3dpdGhfaW5leGFjdFxmUi4KKy5JUCAiXGZCXC1tZnBcLXRyYXBcLW1vZGU9XGZSXGZJdHJhcC1tb2RlXGZSIiA0CisuSVggSXRlbSAiLW1mcC10cmFwLW1vZGU9dHJhcC1tb2RlIgorVGhpcyBvcHRpb24gY29udHJvbHMgd2hhdCBmbG9hdGluZy1wb2ludCByZWxhdGVkIHRyYXBzIGFyZSBlbmFibGVkLgorT3RoZXIgQWxwaGEgY29tcGlsZXJzIGNhbGwgdGhpcyBvcHRpb24gXGZCXC1mcHRtXGZSIFxmSXRyYXAtbW9kZVxmUi4KK1RoZSB0cmFwIG1vZGUgY2FuIGJlIHNldCB0byBvbmUgb2YgZm91ciB2YWx1ZXM6CisuUlMgNAorLklQICJcZkJuXGZSIiA0CisuSVggSXRlbSAibiIKK1RoaXMgaXMgdGhlIGRlZmF1bHQgKG5vcm1hbCkgc2V0dGluZy4gIFRoZSBvbmx5IHRyYXBzIHRoYXQgYXJlIGVuYWJsZWQKK2FyZSB0aGUgb25lcyB0aGF0IGNhbm5vdCBiZSBkaXNhYmxlZCBpbiBzb2Z0d2FyZSAoZS5nLiwgZGl2aXNpb24gYnkgemVybwordHJhcCkuCisuSVAgIlxmQnVcZlIiIDQKKy5JWCBJdGVtICJ1IgorSW4gYWRkaXRpb24gdG8gdGhlIHRyYXBzIGVuYWJsZWQgYnkgXGZCblxmUiwgdW5kZXJmbG93IHRyYXBzIGFyZSBlbmFibGVkCithcyB3ZWxsLgorLklQICJcZkJzdVxmUiIgNAorLklYIEl0ZW0gInN1IgorTGlrZSBcZkJ1XGZSLCBidXQgdGhlIGluc3RydWN0aW9ucyBhcmUgbWFya2VkIHRvIGJlIHNhZmUgZm9yIHNvZnR3YXJlCitjb21wbGV0aW9uIChzZWUgQWxwaGEgYXJjaGl0ZWN0dXJlIG1hbnVhbCBmb3IgZGV0YWlscykuCisuSVAgIlxmQnN1aVxmUiIgNAorLklYIEl0ZW0gInN1aSIKK0xpa2UgXGZCc3VcZlIsIGJ1dCBpbmV4YWN0IHRyYXBzIGFyZSBlbmFibGVkIGFzIHdlbGwuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tZnBcLXJvdW5kaW5nXC1tb2RlPVxmUlxmSXJvdW5kaW5nLW1vZGVcZlIiIDQKKy5JWCBJdGVtICItbWZwLXJvdW5kaW5nLW1vZGU9cm91bmRpbmctbW9kZSIKK1NlbGVjdHMgdGhlIFxzLTFJRUVFXHMwIHJvdW5kaW5nIG1vZGUuICBPdGhlciBBbHBoYSBjb21waWxlcnMgY2FsbCB0aGlzIG9wdGlvbgorXCZcZkJcLWZwcm1cZlIgXGZJcm91bmRpbmctbW9kZVxmUi4gIFRoZSBcZklyb3VuZGluZy1tb2RlXGZSIGNhbiBiZSBvbmUKK29mOgorLlJTIDQKKy5JUCAiXGZCblxmUiIgNAorLklYIEl0ZW0gIm4iCitOb3JtYWwgXHMtMUlFRUVcczAgcm91bmRpbmcgbW9kZS4gIEZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXJlIHJvdW5kZWQgdG93YXJkcwordGhlIG5lYXJlc3QgbWFjaGluZSBudW1iZXIgb3IgdG93YXJkcyB0aGUgZXZlbiBtYWNoaW5lIG51bWJlciBpbiBjYXNlCitvZiBhIHRpZS4KKy5JUCAiXGZCbVxmUiIgNAorLklYIEl0ZW0gIm0iCitSb3VuZCB0b3dhcmRzIG1pbnVzIGluZmluaXR5LgorLklQICJcZkJjXGZSIiA0CisuSVggSXRlbSAiYyIKK0Nob3BwZWQgcm91bmRpbmcgbW9kZS4gIEZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXJlIHJvdW5kZWQgdG93YXJkcyB6ZXJvLgorLklQICJcZkJkXGZSIiA0CisuSVggSXRlbSAiZCIKK0R5bmFtaWMgcm91bmRpbmcgbW9kZS4gIEEgZmllbGQgaW4gdGhlIGZsb2F0aW5nLXBvaW50IGNvbnRyb2wgcmVnaXN0ZXIKKyhcZklmcGNyXGZSLCBzZWUgQWxwaGEgYXJjaGl0ZWN0dXJlIHJlZmVyZW5jZSBtYW51YWwpIGNvbnRyb2xzIHRoZQorcm91bmRpbmcgbW9kZSBpbiBlZmZlY3QuICBUaGUgQyBsaWJyYXJ5IGluaXRpYWxpemVzIHRoaXMgcmVnaXN0ZXIgZm9yCityb3VuZGluZyB0b3dhcmRzIHBsdXMgaW5maW5pdHkuICBUaHVzLCB1bmxlc3MgeW91ciBwcm9ncmFtIG1vZGlmaWVzIHRoZQorXCZcZklmcGNyXGZSLCBcZkJkXGZSIGNvcnJlc3BvbmRzIHRvIHJvdW5kIHRvd2FyZHMgcGx1cyBpbmZpbml0eS4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW10cmFwXC1wcmVjaXNpb249XGZSXGZJdHJhcC1wcmVjaXNpb25cZlIiIDQKKy5JWCBJdGVtICItbXRyYXAtcHJlY2lzaW9uPXRyYXAtcHJlY2lzaW9uIgorSW4gdGhlIEFscGhhIGFyY2hpdGVjdHVyZSwgZmxvYXRpbmctcG9pbnQgdHJhcHMgYXJlIGltcHJlY2lzZS4gIFRoaXMKK21lYW5zIHdpdGhvdXQgc29mdHdhcmUgYXNzaXN0YW5jZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlY292ZXIgZnJvbSBhCitmbG9hdGluZyB0cmFwIGFuZCBwcm9ncmFtIGV4ZWN1dGlvbiBub3JtYWxseSBuZWVkcyB0byBiZSB0ZXJtaW5hdGVkLgorXCZccy0xR0NDXHMwIGNhbiBnZW5lcmF0ZSBjb2RlIHRoYXQgY2FuIGFzc2lzdCBvcGVyYXRpbmcgc3lzdGVtIHRyYXAgaGFuZGxlcnMKK2luIGRldGVybWluaW5nIHRoZSBleGFjdCBsb2NhdGlvbiB0aGF0IGNhdXNlZCBhIGZsb2F0aW5nLXBvaW50IHRyYXAuCitEZXBlbmRpbmcgb24gdGhlIHJlcXVpcmVtZW50cyBvZiBhbiBhcHBsaWNhdGlvbiwgZGlmZmVyZW50IGxldmVscyBvZgorcHJlY2lzaW9ucyBjYW4gYmUgc2VsZWN0ZWQ6CisuUlMgNAorLklQICJcZkJwXGZSIiA0CisuSVggSXRlbSAicCIKK1Byb2dyYW0gcHJlY2lzaW9uLiAgVGhpcyBvcHRpb24gaXMgdGhlIGRlZmF1bHQgYW5kIG1lYW5zIGEgdHJhcCBoYW5kbGVyCitjYW4gb25seSBpZGVudGlmeSB3aGljaCBwcm9ncmFtIGNhdXNlZCBhIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4KKy5JUCAiXGZCZlxmUiIgNAorLklYIEl0ZW0gImYiCitGdW5jdGlvbiBwcmVjaXNpb24uICBUaGUgdHJhcCBoYW5kbGVyIGNhbiBkZXRlcm1pbmUgdGhlIGZ1bmN0aW9uIHRoYXQKK2NhdXNlZCBhIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4KKy5JUCAiXGZCaVxmUiIgNAorLklYIEl0ZW0gImkiCitJbnN0cnVjdGlvbiBwcmVjaXNpb24uICBUaGUgdHJhcCBoYW5kbGVyIGNhbiBkZXRlcm1pbmUgdGhlIGV4YWN0CitpbnN0cnVjdGlvbiB0aGF0IGNhdXNlZCBhIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4KKy5SRQorLlJTIDQKKy5TcAorT3RoZXIgQWxwaGEgY29tcGlsZXJzIHByb3ZpZGUgdGhlIGVxdWl2YWxlbnQgb3B0aW9ucyBjYWxsZWQKK1wmXGZCXC1zY29wZV9zYWZlXGZSIGFuZCBcZkJcLXJlc3VtcHRpb25fc2FmZVxmUi4KKy5SRQorLklQICJcZkJcLW1pZWVlXC1jb25mb3JtYW50XGZSIiA0CisuSVggSXRlbSAiLW1pZWVlLWNvbmZvcm1hbnQiCitUaGlzIG9wdGlvbiBtYXJrcyB0aGUgZ2VuZXJhdGVkIGNvZGUgYXMgXHMtMUlFRUVcczAgY29uZm9ybWFudC4gIFlvdSBtdXN0IG5vdAordXNlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYWxzbyBzcGVjaWZ5IFxmQlwtbXRyYXBcLXByZWNpc2lvbj1pXGZSIGFuZCBlaXRoZXIKK1wmXGZCXC1tZnBcLXRyYXBcLW1vZGU9c3VcZlIgb3IgXGZCXC1tZnBcLXRyYXBcLW1vZGU9c3VpXGZSLiAgSXRzIG9ubHkgZWZmZWN0CitpcyB0byBlbWl0IHRoZSBsaW5lIFxmQi5lZmxhZyA0OFxmUiBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUgb2YgdGhlCitnZW5lcmF0ZWQgYXNzZW1ibHkgZmlsZS4KKy5JUCAiXGZCXC1tYnVpbGRcLWNvbnN0YW50c1xmUiIgNAorLklYIEl0ZW0gIi1tYnVpbGQtY29uc3RhbnRzIgorTm9ybWFsbHkgXHMtMUdDQ1xzMCBleGFtaW5lcyBhIDMyXC0gb3IgNjRcLWJpdCBpbnRlZ2VyIGNvbnN0YW50IHRvCitzZWUgaWYgaXQgY2FuIGNvbnN0cnVjdCBpdCBmcm9tIHNtYWxsZXIgY29uc3RhbnRzIGluIHR3byBvciB0aHJlZQoraW5zdHJ1Y3Rpb25zLiAgSWYgaXQgY2Fubm90LCBpdCBvdXRwdXRzIHRoZSBjb25zdGFudCBhcyBhIGxpdGVyYWwgYW5kCitnZW5lcmF0ZXMgY29kZSB0byBsb2FkIGl0IGZyb20gdGhlIGRhdGEgc2VnbWVudCBhdCBydW4gdGltZS4KKy5TcAorVXNlIHRoaXMgb3B0aW9uIHRvIHJlcXVpcmUgXHMtMUdDQ1xzMCB0byBjb25zdHJ1Y3QgXGZJYWxsXGZSIGludGVnZXIgY29uc3RhbnRzCit1c2luZyBjb2RlLCBldmVuIGlmIGl0IHRha2VzIG1vcmUgaW5zdHJ1Y3Rpb25zICh0aGUgbWF4aW11bSBpcyBzaXgpLgorLlNwCitZb3UgdHlwaWNhbGx5IHVzZSB0aGlzIG9wdGlvbiB0byBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IGR5bmFtaWMKK2xvYWRlci4gIEl0c2VsZiBhIHNoYXJlZCBsaWJyYXJ5LCBpdCBtdXN0IHJlbG9jYXRlIGl0c2VsZiBpbiBtZW1vcnkKK2JlZm9yZSBpdCBjYW4gZmluZCB0aGUgdmFyaWFibGVzIGFuZCBjb25zdGFudHMgaW4gaXRzIG93biBkYXRhIHNlZ21lbnQuCisuSVAgIlxmQlwtbWJ3eFxmUiIgNAorLklYIEl0ZW0gIi1tYnd4IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWJ3eFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYnd4IgorLklQICJcZkJcLW1jaXhcZlIiIDQKKy5JWCBJdGVtICItbWNpeCIKKy5JUCAiXGZCXC1tbm9cLWNpeFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tY2l4IgorLklQICJcZkJcLW1maXhcZlIiIDQKKy5JWCBJdGVtICItbWZpeCIKKy5JUCAiXGZCXC1tbm9cLWZpeFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZml4IgorLklQICJcZkJcLW1tYXhcZlIiIDQKKy5JWCBJdGVtICItbW1heCIKKy5JUCAiXGZCXC1tbm9cLW1heFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWF4IgorLlBECitJbmRpY2F0ZSB3aGV0aGVyIFxzLTFHQ0NcczAgc2hvdWxkIGdlbmVyYXRlIGNvZGUgdG8gdXNlIHRoZSBvcHRpb25hbCBccy0xQldYXHMwLAorXCZccy0xQ0lYXHMwLCBccy0xRklYXHMwIGFuZCBccy0xTUFYXHMwIGluc3RydWN0aW9uIHNldHMuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIGluc3RydWN0aW9uCitzZXRzIHN1cHBvcnRlZCBieSB0aGUgXHMtMUNQVVxzMCB0eXBlIHNwZWNpZmllZCB2aWEgXGZCXC1tY3B1PVxmUiBvcHRpb24gb3IgdGhhdAorb2YgdGhlIFxzLTFDUFVcczAgb24gd2hpY2ggXHMtMUdDQ1xzMCB3YXMgYnVpbHQgaWYgbm9uZSBpcyBzcGVjaWZpZWQuCisuSVAgIlxmQlwtbWZsb2F0XC12YXhcZlIiIDQKKy5JWCBJdGVtICItbWZsb2F0LXZheCIKKy5QRCAwCisuSVAgIlxmQlwtbWZsb2F0XC1pZWVlXGZSIiA0CisuSVggSXRlbSAiLW1mbG9hdC1pZWVlIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSBccy0xVkFYXHMwIEYgYW5kIEcgZmxvYXRpbmctcG9pbnQKK2FyaXRobWV0aWMgaW5zdGVhZCBvZiBccy0xSUVFRVxzMCBzaW5nbGUgYW5kIGRvdWJsZSBwcmVjaXNpb24uCisuSVAgIlxmQlwtbWV4cGxpY2l0XC1yZWxvY3NcZlIiIDQKKy5JWCBJdGVtICItbWV4cGxpY2l0LXJlbG9jcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1leHBsaWNpdFwtcmVsb2NzXGZSIiA0CisuSVggSXRlbSAiLW1uby1leHBsaWNpdC1yZWxvY3MiCisuUEQKK09sZGVyIEFscGhhIGFzc2VtYmxlcnMgcHJvdmlkZWQgbm8gd2F5IHRvIGdlbmVyYXRlIHN5bWJvbCByZWxvY2F0aW9ucworZXhjZXB0IHZpYSBhc3NlbWJsZXIgbWFjcm9zLiAgVXNlIG9mIHRoZXNlIG1hY3JvcyBkb2VzIG5vdCBhbGxvdworb3B0aW1hbCBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLiAgXHMtMUdOVVxzMCBiaW51dGlscyBhcyBvZiB2ZXJzaW9uIDIuMTIKK3N1cHBvcnRzIGEgbmV3IHN5bnRheCB0aGF0IGFsbG93cyB0aGUgY29tcGlsZXIgdG8gZXhwbGljaXRseSBtYXJrCit3aGljaCByZWxvY2F0aW9ucyBzaG91bGQgYXBwbHkgdG8gd2hpY2ggaW5zdHJ1Y3Rpb25zLiAgVGhpcyBvcHRpb24KK2lzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZywgYXMgXHMtMUdDQ1xzMCBkZXRlY3RzIHRoZSBjYXBhYmlsaXRpZXMgb2YKK3RoZSBhc3NlbWJsZXIgd2hlbiBpdCBpcyBidWlsdCBhbmQgc2V0cyB0aGUgZGVmYXVsdCBhY2NvcmRpbmdseS4KKy5JUCAiXGZCXC1tc21hbGxcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbXNtYWxsLWRhdGEiCisuUEQgMAorLklQICJcZkJcLW1sYXJnZVwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbGFyZ2UtZGF0YSIKKy5QRAorV2hlbiBcZkJcLW1leHBsaWNpdFwtcmVsb2NzXGZSIGlzIGluIGVmZmVjdCwgc3RhdGljIGRhdGEgaXMKK2FjY2Vzc2VkIHZpYSBcZklncC1yZWxhdGl2ZVxmUiByZWxvY2F0aW9ucy4gIFdoZW4gXGZCXC1tc21hbGxcLWRhdGFcZlIKK2lzIHVzZWQsIG9iamVjdHMgOCBieXRlcyBsb25nIG9yIHNtYWxsZXIgYXJlIHBsYWNlZCBpbiBhIFxmSXNtYWxsIGRhdGEgYXJlYVxmUgorKHRoZSBcZihDV1wqKENgLnNkYXRhXCooQydcZlIgYW5kIFxmKENXXCooQ2Auc2Jzc1wqKEMnXGZSIHNlY3Rpb25zKSBhbmQgYXJlIGFjY2Vzc2VkIHZpYQorMTZcLWJpdCByZWxvY2F0aW9ucyBvZmYgb2YgdGhlIFxmKENXJGdwXGZSIHJlZ2lzdGVyLiAgVGhpcyBsaW1pdHMgdGhlCitzaXplIG9mIHRoZSBzbWFsbCBkYXRhIGFyZWEgdG8gNjRLQiwgYnV0IGFsbG93cyB0aGUgdmFyaWFibGVzIHRvIGJlCitkaXJlY3RseSBhY2Nlc3NlZCB2aWEgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtbWxhcmdlXC1kYXRhXGZSLiAgV2l0aCB0aGlzIG9wdGlvbiB0aGUgZGF0YSBhcmVhCitpcyBsaW1pdGVkIHRvIGp1c3QgYmVsb3cgMkdCLiAgUHJvZ3JhbXMgdGhhdCByZXF1aXJlIG1vcmUgdGhhbiAyR0Igb2YKK2RhdGEgbXVzdCB1c2UgXGYoQ1dcKihDYG1hbGxvY1wqKEMnXGZSIG9yIFxmKENXXCooQ2BtbWFwXCooQydcZlIgdG8gYWxsb2NhdGUgdGhlIGRhdGEgaW4gdGhlCitoZWFwIGluc3RlYWQgb2YgaW4gdGhlIHByb2dyYW0ncyBkYXRhIHNlZ21lbnQuCisuU3AKK1doZW4gZ2VuZXJhdGluZyBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzLCBcZkJcLWZwaWNcZlIgaW1wbGllcworXCZcZkJcLW1zbWFsbFwtZGF0YVxmUiBhbmQgXGZCXC1mUElDXGZSIGltcGxpZXMgXGZCXC1tbGFyZ2VcLWRhdGFcZlIuCisuSVAgIlxmQlwtbXNtYWxsXC10ZXh0XGZSIiA0CisuSVggSXRlbSAiLW1zbWFsbC10ZXh0IgorLlBEIDAKKy5JUCAiXGZCXC1tbGFyZ2VcLXRleHRcZlIiIDQKKy5JWCBJdGVtICItbWxhcmdlLXRleHQiCisuUEQKK1doZW4gXGZCXC1tc21hbGxcLXRleHRcZlIgaXMgdXNlZCwgdGhlIGNvbXBpbGVyIGFzc3VtZXMgdGhhdCB0aGUKK2NvZGUgb2YgdGhlIGVudGlyZSBwcm9ncmFtIChvciBzaGFyZWQgbGlicmFyeSkgZml0cyBpbiA0TUIsIGFuZCBpcwordGh1cyByZWFjaGFibGUgd2l0aCBhIGJyYW5jaCBpbnN0cnVjdGlvbi4gIFdoZW4gXGZCXC1tc21hbGxcLWRhdGFcZlIKK2lzIHVzZWQsIHRoZSBjb21waWxlciBjYW4gYXNzdW1lIHRoYXQgYWxsIGxvY2FsIHN5bWJvbHMgc2hhcmUgdGhlCitzYW1lIFxmKENXJGdwXGZSIHZhbHVlLCBhbmQgdGh1cyByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMKK3JlcXVpcmVkIGZvciBhIGZ1bmN0aW9uIGNhbGwgZnJvbSA0IHRvIDEuCisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtbWxhcmdlXC10ZXh0XGZSLgorLklQICJcZkJcLW1jcHU9XGZSXGZJY3B1X3R5cGVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1jcHVfdHlwZSIKK1NldCB0aGUgaW5zdHJ1Y3Rpb24gc2V0IGFuZCBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yCittYWNoaW5lIHR5cGUgXGZJY3B1X3R5cGVcZlIuICBZb3UgY2FuIHNwZWNpZnkgZWl0aGVyIHRoZSBcZkJccy0xRVZcczBcZlIKK3N0eWxlIG5hbWUgb3IgdGhlIGNvcnJlc3BvbmRpbmcgY2hpcCBudW1iZXIuICBccy0xR0NDXHMwIHN1cHBvcnRzIHNjaGVkdWxpbmcKK3BhcmFtZXRlcnMgZm9yIHRoZSBccy0xRVY0XHMwLCBccy0xRVY1XHMwIGFuZCBccy0xRVY2XHMwIGZhbWlseSBvZiBwcm9jZXNzb3JzIGFuZAorY2hvb3NlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBpbnN0cnVjdGlvbiBzZXQgZnJvbSB0aGUgcHJvY2Vzc29yCit5b3Ugc3BlY2lmeS4gIElmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIHByb2Nlc3NvciB0eXBlLCBccy0xR0NDXHMwIGRlZmF1bHRzCit0byB0aGUgcHJvY2Vzc29yIG9uIHdoaWNoIHRoZSBjb21waWxlciB3YXMgYnVpbHQuCisuU3AKK1N1cHBvcnRlZCB2YWx1ZXMgZm9yIFxmSWNwdV90eXBlXGZSIGFyZQorLlJTIDQKKy5JUCAiXGZCZXY0XGZSIiA0CisuSVggSXRlbSAiZXY0IgorLlBEIDAKKy5JUCAiXGZCZXY0NVxmUiIgNAorLklYIEl0ZW0gImV2NDUiCisuSVAgIlxmQjIxMDY0XGZSIiA0CisuSVggSXRlbSAiMjEwNjQiCisuUEQKK1NjaGVkdWxlcyBhcyBhbiBccy0xRVY0XHMwIGFuZCBoYXMgbm8gaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuCisuSVAgIlxmQmV2NVxmUiIgNAorLklYIEl0ZW0gImV2NSIKKy5QRCAwCisuSVAgIlxmQjIxMTY0XGZSIiA0CisuSVggSXRlbSAiMjExNjQiCisuUEQKK1NjaGVkdWxlcyBhcyBhbiBccy0xRVY1XHMwIGFuZCBoYXMgbm8gaW5zdHJ1Y3Rpb24gc2V0IGV4dGVuc2lvbnMuCisuSVAgIlxmQmV2NTZcZlIiIDQKKy5JWCBJdGVtICJldjU2IgorLlBEIDAKKy5JUCAiXGZCMjExNjRhXGZSIiA0CisuSVggSXRlbSAiMjExNjRhIgorLlBECitTY2hlZHVsZXMgYXMgYW4gXHMtMUVWNVxzMCBhbmQgc3VwcG9ydHMgdGhlIFxzLTFCV1hcczAgZXh0ZW5zaW9uLgorLklQICJcZkJwY2E1NlxmUiIgNAorLklYIEl0ZW0gInBjYTU2IgorLlBEIDAKKy5JUCAiXGZCMjExNjRwY1xmUiIgNAorLklYIEl0ZW0gIjIxMTY0cGMiCisuSVAgIlxmQjIxMTY0UENcZlIiIDQKKy5JWCBJdGVtICIyMTE2NFBDIgorLlBECitTY2hlZHVsZXMgYXMgYW4gXHMtMUVWNVxzMCBhbmQgc3VwcG9ydHMgdGhlIFxzLTFCV1hcczAgYW5kIFxzLTFNQVhcczAgZXh0ZW5zaW9ucy4KKy5JUCAiXGZCZXY2XGZSIiA0CisuSVggSXRlbSAiZXY2IgorLlBEIDAKKy5JUCAiXGZCMjEyNjRcZlIiIDQKKy5JWCBJdGVtICIyMTI2NCIKKy5QRAorU2NoZWR1bGVzIGFzIGFuIFxzLTFFVjZcczAgYW5kIHN1cHBvcnRzIHRoZSBccy0xQldYXHMwLCBccy0xRklYXHMwLCBhbmQgXHMtMU1BWFxzMCBleHRlbnNpb25zLgorLklQICJcZkJldjY3XGZSIiA0CisuSVggSXRlbSAiZXY2NyIKKy5QRCAwCisuSVAgIlxmQjIxMjY0YVxmUiIgNAorLklYIEl0ZW0gIjIxMjY0YSIKKy5QRAorU2NoZWR1bGVzIGFzIGFuIFxzLTFFVjZcczAgYW5kIHN1cHBvcnRzIHRoZSBccy0xQldYXHMwLCBccy0xQ0lYXHMwLCBccy0xRklYXHMwLCBhbmQgXHMtMU1BWFxzMCBleHRlbnNpb25zLgorLlJFCisuUlMgNAorLlNwCitOYXRpdmUgdG9vbGNoYWlucyBhbHNvIHN1cHBvcnQgdGhlIHZhbHVlIFxmQm5hdGl2ZVxmUiwKK3doaWNoIHNlbGVjdHMgdGhlIGJlc3QgYXJjaGl0ZWN0dXJlIG9wdGlvbiBmb3IgdGhlIGhvc3QgcHJvY2Vzc29yLgorXCZcZkJcLW1jcHU9bmF0aXZlXGZSIGhhcyBubyBlZmZlY3QgaWYgXHMtMUdDQ1xzMCBkb2VzIG5vdCByZWNvZ25pemUKK3RoZSBwcm9jZXNzb3IuCisuUkUKKy5JUCAiXGZCXC1tdHVuZT1cZlJcZkljcHVfdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tdHVuZT1jcHVfdHlwZSIKK1NldCBvbmx5IHRoZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIG1hY2hpbmUgdHlwZQorXCZcZkljcHVfdHlwZVxmUi4gIFRoZSBpbnN0cnVjdGlvbiBzZXQgaXMgbm90IGNoYW5nZWQuCisuU3AKK05hdGl2ZSB0b29sY2hhaW5zIGFsc28gc3VwcG9ydCB0aGUgdmFsdWUgXGZCbmF0aXZlXGZSLAord2hpY2ggc2VsZWN0cyB0aGUgYmVzdCBhcmNoaXRlY3R1cmUgb3B0aW9uIGZvciB0aGUgaG9zdCBwcm9jZXNzb3IuCitcJlxmQlwtbXR1bmU9bmF0aXZlXGZSIGhhcyBubyBlZmZlY3QgaWYgXHMtMUdDQ1xzMCBkb2VzIG5vdCByZWNvZ25pemUKK3RoZSBwcm9jZXNzb3IuCisuSVAgIlxmQlwtbW1lbW9yeVwtbGF0ZW5jeT1cZlJcZkl0aW1lXGZSIiA0CisuSVggSXRlbSAiLW1tZW1vcnktbGF0ZW5jeT10aW1lIgorU2V0cyB0aGUgbGF0ZW5jeSB0aGUgc2NoZWR1bGVyIHNob3VsZCBhc3N1bWUgZm9yIHR5cGljYWwgbWVtb3J5CityZWZlcmVuY2VzIGFzIHNlZW4gYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhpcyBudW1iZXIgaXMgaGlnaGx5CitkZXBlbmRlbnQgb24gdGhlIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMgdXNlZCBieSB0aGUgYXBwbGljYXRpb24KK2FuZCB0aGUgc2l6ZSBvZiB0aGUgZXh0ZXJuYWwgY2FjaGUgb24gdGhlIG1hY2hpbmUuCisuU3AKK1ZhbGlkIG9wdGlvbnMgZm9yIFxmSXRpbWVcZlIgYXJlCisuUlMgNAorLklQICJcZkludW1iZXJcZlIiIDQKKy5JWCBJdGVtICJudW1iZXIiCitBIGRlY2ltYWwgbnVtYmVyIHJlcHJlc2VudGluZyBjbG9jayBjeWNsZXMuCisuSVAgIlxmQkwxXGZSIiA0CisuSVggSXRlbSAiTDEiCisuUEQgMAorLklQICJcZkJMMlxmUiIgNAorLklYIEl0ZW0gIkwyIgorLklQICJcZkJMM1xmUiIgNAorLklYIEl0ZW0gIkwzIgorLklQICJcZkJtYWluXGZSIiA0CisuSVggSXRlbSAibWFpbiIKKy5QRAorVGhlIGNvbXBpbGVyIGNvbnRhaW5zIGVzdGltYXRlcyBvZiB0aGUgbnVtYmVyIG9mIGNsb2NrIGN5Y2xlcyBmb3IKK1wmXCooTCJ0eXBpY2FsXCooUiIgXHMtMUVWNFxzMCAmIFxzLTFFVjVcczAgaGFyZHdhcmUgZm9yIHRoZSBMZXZlbCAxLCAyICYgMyBjYWNoZXMKKyhhbHNvIGNhbGxlZCBEY2FjaGUsIFNjYWNoZSwgYW5kIEJjYWNoZSksIGFzIHdlbGwgYXMgdG8gbWFpbiBtZW1vcnkuCitOb3RlIHRoYXQgTDMgaXMgb25seSB2YWxpZCBmb3IgXHMtMUVWNVxzMC4KKy5SRQorLlJTIDQKKy5SRQorLlBQCitcZklccy0xRlIzMFxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiRlIzMCBPcHRpb25zIgorLlBQCitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIHNwZWNpZmljYWxseSBmb3IgdGhlIFxzLTFGUjMwXHMwIHBvcnQuCisuSVAgIlxmQlwtbXNtYWxsXC1tb2RlbFxmUiIgNAorLklYIEl0ZW0gIi1tc21hbGwtbW9kZWwiCitVc2UgdGhlIHNtYWxsIGFkZHJlc3Mgc3BhY2UgbW9kZWwuICBUaGlzIGNhbiBwcm9kdWNlIHNtYWxsZXIgY29kZSwgYnV0CitpdCBkb2VzIGFzc3VtZSB0aGF0IGFsbCBzeW1ib2xpYyB2YWx1ZXMgYW5kIGFkZHJlc3NlcyBmaXQgaW50byBhCisyMFwtYml0IHJhbmdlLgorLklQICJcZkJcLW1ub1wtbHNpbVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbHNpbSIKK0Fzc3VtZSB0aGF0IHJ1bnRpbWUgc3VwcG9ydCBoYXMgYmVlbiBwcm92aWRlZCBhbmQgc28gdGhlcmUgaXMgbm8gbmVlZAordG8gaW5jbHVkZSB0aGUgc2ltdWxhdG9yIGxpYnJhcnkgKFxmSWxpYnNpbS5hXGZSKSBvbiB0aGUgbGlua2VyCitjb21tYW5kIGxpbmUuCisuUFAKK1xmSVxzLTFGUlZcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkZSViBPcHRpb25zIgorLklQICJcZkJcLW1ncHJcLTMyXGZSIiA0CisuSVggSXRlbSAiLW1ncHItMzIiCitPbmx5IHVzZSB0aGUgZmlyc3QgMzIgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tZ3ByXC02NFxmUiIgNAorLklYIEl0ZW0gIi1tZ3ByLTY0IgorVXNlIGFsbCA2NCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLgorLklQICJcZkJcLW1mcHJcLTMyXGZSIiA0CisuSVggSXRlbSAiLW1mcHItMzIiCitVc2Ugb25seSB0aGUgZmlyc3QgMzIgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLgorLklQICJcZkJcLW1mcHJcLTY0XGZSIiA0CisuSVggSXRlbSAiLW1mcHItNjQiCitVc2UgYWxsIDY0IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1taGFyZFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbWhhcmQtZmxvYXQiCitVc2UgaGFyZHdhcmUgaW5zdHJ1Y3Rpb25zIGZvciBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorLklQICJcZkJcLW1zb2Z0XC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1mbG9hdCIKK1VzZSBsaWJyYXJ5IHJvdXRpbmVzIGZvciBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorLklQICJcZkJcLW1hbGxvY1wtY2NcZlIiIDQKKy5JWCBJdGVtICItbWFsbG9jLWNjIgorRHluYW1pY2FsbHkgYWxsb2NhdGUgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzLgorLklQICJcZkJcLW1maXhlZFwtY2NcZlIiIDQKKy5JWCBJdGVtICItbWZpeGVkLWNjIgorRG8gbm90IHRyeSB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSBjb25kaXRpb24gY29kZSByZWdpc3RlcnMsIG9ubHkKK3VzZSBcZihDV1wqKENgaWNjMFwqKEMnXGZSIGFuZCBcZihDV1wqKENgZmNjMFwqKEMnXGZSLgorLklQICJcZkJcLW1kd29yZFxmUiIgNAorLklYIEl0ZW0gIi1tZHdvcmQiCitDaGFuZ2UgXHMtMUFCSVxzMCB0byB1c2UgZG91YmxlIHdvcmQgaW5zbnMuCisuSVAgIlxmQlwtbW5vXC1kd29yZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZHdvcmQiCitEbyBub3QgdXNlIGRvdWJsZSB3b3JkIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tZG91YmxlXGZSIiA0CisuSVggSXRlbSAiLW1kb3VibGUiCitVc2UgZmxvYXRpbmctcG9pbnQgZG91YmxlIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tbm9cLWRvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZG91YmxlIgorRG8gbm90IHVzZSBmbG9hdGluZy1wb2ludCBkb3VibGUgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1tZWRpYVxmUiIgNAorLklYIEl0ZW0gIi1tbWVkaWEiCitVc2UgbWVkaWEgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1ub1wtbWVkaWFcZlIiIDQKKy5JWCBJdGVtICItbW5vLW1lZGlhIgorRG8gbm90IHVzZSBtZWRpYSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW11bGFkZFxmUiIgNAorLklYIEl0ZW0gIi1tbXVsYWRkIgorVXNlIG11bHRpcGx5IGFuZCBhZGQvc3VidHJhY3QgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1ub1wtbXVsYWRkXGZSIiA0CisuSVggSXRlbSAiLW1uby1tdWxhZGQiCitEbyBub3QgdXNlIG11bHRpcGx5IGFuZCBhZGQvc3VidHJhY3QgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1mZHBpY1xmUiIgNAorLklYIEl0ZW0gIi1tZmRwaWMiCitTZWxlY3QgdGhlIFxzLTFGRFBJQ1xzMCBccy0xQUJJXHMwLCB3aGljaCB1c2VzIGZ1bmN0aW9uIGRlc2NyaXB0b3JzIHRvIHJlcHJlc2VudAorcG9pbnRlcnMgdG8gZnVuY3Rpb25zLiAgV2l0aG91dCBhbnkgUElDL1BJRVwtcmVsYXRlZCBvcHRpb25zLCBpdAoraW1wbGllcyBcZkJcLWZQSUVcZlIuICBXaXRoIFxmQlwtZnBpY1xmUiBvciBcZkJcLWZwaWVcZlIsIGl0Cithc3N1bWVzIFxzLTFHT1RcczAgZW50cmllcyBhbmQgc21hbGwgZGF0YSBhcmUgd2l0aGluIGEgMTJcLWJpdCByYW5nZSBmcm9tIHRoZQorXCZccy0xR09UXHMwIGJhc2UgYWRkcmVzczsgd2l0aCBcZkJcLWZQSUNcZlIgb3IgXGZCXC1mUElFXGZSLCBccy0xR09UXHMwIG9mZnNldHMKK2FyZSBjb21wdXRlZCB3aXRoIDMyIGJpdHMuCitXaXRoIGEgXGZCYmZpbi1lbGZcZlIgdGFyZ2V0LCB0aGlzIG9wdGlvbiBpbXBsaWVzIFxmQlwtbXNpbVxmUi4KKy5JUCAiXGZCXC1taW5saW5lXC1wbHRcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1wbHQiCitFbmFibGUgaW5saW5pbmcgb2YgXHMtMVBMVFxzMCBlbnRyaWVzIGluIGZ1bmN0aW9uIGNhbGxzIHRvIGZ1bmN0aW9ucyB0aGF0IGFyZQorbm90IGtub3duIHRvIGJpbmQgbG9jYWxseS4gIEl0IGhhcyBubyBlZmZlY3Qgd2l0aG91dCBcZkJcLW1mZHBpY1xmUi4KK0l0J3MgZW5hYmxlZCBieSBkZWZhdWx0IGlmIG9wdGltaXppbmcgZm9yIHNwZWVkIGFuZCBjb21waWxpbmcgZm9yCitzaGFyZWQgbGlicmFyaWVzIChpLmUuLCBcZkJcLWZQSUNcZlIgb3IgXGZCXC1mcGljXGZSKSwgb3Igd2hlbiBhbgorb3B0aW1pemF0aW9uIG9wdGlvbiBzdWNoIGFzIFxmQlwtTzNcZlIgb3IgYWJvdmUgaXMgcHJlc2VudCBpbiB0aGUKK2NvbW1hbmQgbGluZS4KKy5JUCAiXGZCXC1tVExTXGZSIiA0CisuSVggSXRlbSAiLW1UTFMiCitBc3N1bWUgYSBsYXJnZSBccy0xVExTXHMwIHNlZ21lbnQgd2hlbiBnZW5lcmF0aW5nIHRocmVhZC1sb2NhbCBjb2RlLgorLklQICJcZkJcLW10bHNcZlIiIDQKKy5JWCBJdGVtICItbXRscyIKK0RvIG5vdCBhc3N1bWUgYSBsYXJnZSBccy0xVExTXHMwIHNlZ21lbnQgd2hlbiBnZW5lcmF0aW5nIHRocmVhZC1sb2NhbCBjb2RlLgorLklQICJcZkJcLW1ncHJlbFwtcm9cZlIiIDQKKy5JWCBJdGVtICItbWdwcmVsLXJvIgorRW5hYmxlIHRoZSB1c2Ugb2YgXGYoQ1dcKihDYEdQUkVMXCooQydcZlIgcmVsb2NhdGlvbnMgaW4gdGhlIFxzLTFGRFBJQ1xzMCBccy0xQUJJXHMwIGZvciBkYXRhCit0aGF0IGlzIGtub3duIHRvIGJlIGluIHJlYWQtb25seSBzZWN0aW9ucy4gIEl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LAorZXhjZXB0IGZvciBcZkJcLWZwaWNcZlIgb3IgXGZCXC1mcGllXGZSOiBldmVuIHRob3VnaCBpdCBtYXkgaGVscAorbWFrZSB0aGUgZ2xvYmFsIG9mZnNldCB0YWJsZSBzbWFsbGVyLCBpdCB0cmFkZXMgMSBpbnN0cnVjdGlvbiBmb3IgNC4KK1dpdGggXGZCXC1mUElDXGZSIG9yIFxmQlwtZlBJRVxmUiwgaXQgdHJhZGVzIDMgaW5zdHJ1Y3Rpb25zIGZvciA0LAorb25lIG9mIHdoaWNoIG1heSBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgc3ltYm9scywgYW5kIGl0IGF2b2lkcyB0aGUgbmVlZAorZm9yIGEgXHMtMUdPVFxzMCBlbnRyeSBmb3IgdGhlIHJlZmVyZW5jZWQgc3ltYm9sLCBzbyBpdCdzIG1vcmUgbGlrZWx5IHRvIGJlIGEKK3dpbi4gIElmIGl0IGlzIG5vdCwgXGZCXC1tbm9cLWdwcmVsXC1yb1xmUiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIGl0LgorLklQICJcZkJcLW11bHRpbGliXC1saWJyYXJ5XC1waWNcZlIiIDQKKy5JWCBJdGVtICItbXVsdGlsaWItbGlicmFyeS1waWMiCitMaW5rIHdpdGggdGhlIChsaWJyYXJ5LCBub3QgXHMtMUZEXHMwKSBwaWMgbGlicmFyaWVzLiAgSXQncyBpbXBsaWVkIGJ5CitcJlxmQlwtbWxpYnJhcnlcLXBpY1xmUiwgYXMgd2VsbCBhcyBieSBcZkJcLWZQSUNcZlIgYW5kCitcJlxmQlwtZnBpY1xmUiB3aXRob3V0IFxmQlwtbWZkcGljXGZSLiAgWW91IHNob3VsZCBuZXZlciBoYXZlIHRvIHVzZQoraXQgZXhwbGljaXRseS4KKy5JUCAiXGZCXC1tbGlua2VkXC1mcFxmUiIgNAorLklYIEl0ZW0gIi1tbGlua2VkLWZwIgorRm9sbG93IHRoZSBccy0xRUFCSVxzMCByZXF1aXJlbWVudCBvZiBhbHdheXMgY3JlYXRpbmcgYSBmcmFtZSBwb2ludGVyIHdoZW5ldmVyCithIHN0YWNrIGZyYW1lIGlzIGFsbG9jYXRlZC4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgY2FuCitiZSBkaXNhYmxlZCB3aXRoIFxmQlwtbW5vXC1saW5rZWRcLWZwXGZSLgorLklQICJcZkJcLW1sb25nXC1jYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tbG9uZy1jYWxscyIKK1VzZSBpbmRpcmVjdCBhZGRyZXNzaW5nIHRvIGNhbGwgZnVuY3Rpb25zIG91dHNpZGUgdGhlIGN1cnJlbnQKK2NvbXBpbGF0aW9uIHVuaXQuICBUaGlzIGFsbG93cyB0aGUgZnVuY3Rpb25zIHRvIGJlIHBsYWNlZCBhbnl3aGVyZQord2l0aGluIHRoZSAzMlwtYml0IGFkZHJlc3Mgc3BhY2UuCisuSVAgIlxmQlwtbWFsaWduXC1sYWJlbHNcZlIiIDQKKy5JWCBJdGVtICItbWFsaWduLWxhYmVscyIKK1RyeSB0byBhbGlnbiBsYWJlbHMgdG8gYW4gOFwtYnl0ZSBib3VuZGFyeSBieSBpbnNlcnRpbmcgTk9QcyBpbnRvIHRoZQorcHJldmlvdXMgcGFja2V0LiAgVGhpcyBvcHRpb24gb25seSBoYXMgYW4gZWZmZWN0IHdoZW4gXHMtMVZMSVdcczAgcGFja2luZworaXMgZW5hYmxlZC4gIEl0IGRvZXNuJ3QgY3JlYXRlIG5ldyBwYWNrZXRzOyBpdCBtZXJlbHkgYWRkcyBOT1BzIHRvCitleGlzdGluZyBvbmVzLgorLklQICJcZkJcLW1saWJyYXJ5XC1waWNcZlIiIDQKKy5JWCBJdGVtICItbWxpYnJhcnktcGljIgorR2VuZXJhdGUgcG9zaXRpb24taW5kZXBlbmRlbnQgXHMtMUVBQklcczAgY29kZS4KKy5JUCAiXGZCXC1tYWNjXC00XGZSIiA0CisuSVggSXRlbSAiLW1hY2MtNCIKK1VzZSBvbmx5IHRoZSBmaXJzdCBmb3VyIG1lZGlhIGFjY3VtdWxhdG9yIHJlZ2lzdGVycy4KKy5JUCAiXGZCXC1tYWNjXC04XGZSIiA0CisuSVggSXRlbSAiLW1hY2MtOCIKK1VzZSBhbGwgZWlnaHQgbWVkaWEgYWNjdW11bGF0b3IgcmVnaXN0ZXJzLgorLklQICJcZkJcLW1wYWNrXGZSIiA0CisuSVggSXRlbSAiLW1wYWNrIgorUGFjayBccy0xVkxJV1xzMCBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW5vXC1wYWNrXGZSIiA0CisuSVggSXRlbSAiLW1uby1wYWNrIgorRG8gbm90IHBhY2sgXHMtMVZMSVdcczAgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1ub1wtZWZsYWdzXGZSIiA0CisuSVggSXRlbSAiLW1uby1lZmxhZ3MiCitEbyBub3QgbWFyayBccy0xQUJJXHMwIHN3aXRjaGVzIGluIGVfZmxhZ3MuCisuSVAgIlxmQlwtbWNvbmRcLW1vdmVcZlIiIDQKKy5JWCBJdGVtICItbWNvbmQtbW92ZSIKK0VuYWJsZSB0aGUgdXNlIG9mIGNvbmRpdGlvbmFsLW1vdmUgaW5zdHJ1Y3Rpb25zIChkZWZhdWx0KS4KKy5TcAorVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICJcZkJcLW1ub1wtY29uZFwtbW92ZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tY29uZC1tb3ZlIgorRGlzYWJsZSB0aGUgdXNlIG9mIGNvbmRpdGlvbmFsLW1vdmUgaW5zdHJ1Y3Rpb25zLgorLlNwCitUaGlzIHN3aXRjaCBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQKK2luIGEgZnV0dXJlIHZlcnNpb24uCisuSVAgIlxmQlwtbXNjY1xmUiIgNAorLklYIEl0ZW0gIi1tc2NjIgorRW5hYmxlIHRoZSB1c2Ugb2YgY29uZGl0aW9uYWwgc2V0IGluc3RydWN0aW9ucyAoZGVmYXVsdCkuCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tbm9cLXNjY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2NjIgorRGlzYWJsZSB0aGUgdXNlIG9mIGNvbmRpdGlvbmFsIHNldCBpbnN0cnVjdGlvbnMuCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tY29uZFwtZXhlY1xmUiIgNAorLklYIEl0ZW0gIi1tY29uZC1leGVjIgorRW5hYmxlIHRoZSB1c2Ugb2YgY29uZGl0aW9uYWwgZXhlY3V0aW9uIChkZWZhdWx0KS4KKy5TcAorVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICJcZkJcLW1ub1wtY29uZFwtZXhlY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tY29uZC1leGVjIgorRGlzYWJsZSB0aGUgdXNlIG9mIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbi4KKy5TcAorVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICJcZkJcLW12bGl3XC1icmFuY2hcZlIiIDQKKy5JWCBJdGVtICItbXZsaXctYnJhbmNoIgorUnVuIGEgcGFzcyB0byBwYWNrIGJyYW5jaGVzIGludG8gXHMtMVZMSVdcczAgaW5zdHJ1Y3Rpb25zIChkZWZhdWx0KS4KKy5TcAorVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICJcZkJcLW1ub1wtdmxpd1wtYnJhbmNoXGZSIiA0CisuSVggSXRlbSAiLW1uby12bGl3LWJyYW5jaCIKK0RvIG5vdCBydW4gYSBwYXNzIHRvIHBhY2sgYnJhbmNoZXMgaW50byBccy0xVkxJV1xzMCBpbnN0cnVjdGlvbnMuCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tbXVsdGlcLWNvbmRcLWV4ZWNcZlIiIDQKKy5JWCBJdGVtICItbW11bHRpLWNvbmQtZXhlYyIKK0VuYWJsZSBvcHRpbWl6YXRpb24gb2YgXGYoQ1dcKihDYCYmXCooQydcZlIgYW5kIFxmKENXXCooQ2B8fFwqKEMnXGZSIGluIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbgorKGRlZmF1bHQpLgorLlNwCitUaGlzIHN3aXRjaCBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyB0aGUgY29tcGlsZXIgYW5kIHdpbGwgbGlrZWx5IGJlIHJlbW92ZWQKK2luIGEgZnV0dXJlIHZlcnNpb24uCisuSVAgIlxmQlwtbW5vXC1tdWx0aVwtY29uZFwtZXhlY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tbXVsdGktY29uZC1leGVjIgorRGlzYWJsZSBvcHRpbWl6YXRpb24gb2YgXGYoQ1dcKihDYCYmXCooQydcZlIgYW5kIFxmKENXXCooQ2B8fFwqKEMnXGZSIGluIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbi4KKy5TcAorVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICJcZkJcLW1uZXN0ZWRcLWNvbmRcLWV4ZWNcZlIiIDQKKy5JWCBJdGVtICItbW5lc3RlZC1jb25kLWV4ZWMiCitFbmFibGUgbmVzdGVkIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiBvcHRpbWl6YXRpb25zIChkZWZhdWx0KS4KKy5TcAorVGhpcyBzd2l0Y2ggaXMgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyIGFuZCB3aWxsIGxpa2VseSBiZSByZW1vdmVkCitpbiBhIGZ1dHVyZSB2ZXJzaW9uLgorLklQICJcZkJcLW1ub1wtbmVzdGVkXC1jb25kXC1leGVjXGZSIiA0CisuSVggSXRlbSAiLW1uby1uZXN0ZWQtY29uZC1leGVjIgorRGlzYWJsZSBuZXN0ZWQgY29uZGl0aW9uYWwgZXhlY3V0aW9uIG9wdGltaXphdGlvbnMuCisuU3AKK1RoaXMgc3dpdGNoIGlzIG1haW5seSBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlciBhbmQgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZAoraW4gYSBmdXR1cmUgdmVyc2lvbi4KKy5JUCAiXGZCXC1tb3B0aW1pemVcLW1lbWJhclxmUiIgNAorLklYIEl0ZW0gIi1tb3B0aW1pemUtbWVtYmFyIgorVGhpcyBzd2l0Y2ggcmVtb3ZlcyByZWR1bmRhbnQgXGYoQ1dcKihDYG1lbWJhclwqKEMnXGZSIGluc3RydWN0aW9ucyBmcm9tIHRoZQorY29tcGlsZXItZ2VuZXJhdGVkIGNvZGUuICBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbW5vXC1vcHRpbWl6ZVwtbWVtYmFyXGZSIiA0CisuSVggSXRlbSAiLW1uby1vcHRpbWl6ZS1tZW1iYXIiCitUaGlzIHN3aXRjaCBkaXNhYmxlcyB0aGUgYXV0b21hdGljIHJlbW92YWwgb2YgcmVkdW5kYW50IFxmKENXXCooQ2BtZW1iYXJcKihDJ1xmUgoraW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGdlbmVyYXRlZCBjb2RlLgorLklQICJcZkJcLW10b21jYXRcLXN0YXRzXGZSIiA0CisuSVggSXRlbSAiLW10b21jYXQtc3RhdHMiCitDYXVzZSBnYXMgdG8gcHJpbnQgb3V0IHRvbWNhdCBzdGF0aXN0aWNzLgorLklQICJcZkJcLW1jcHU9XGZSXGZJY3B1XGZSIiA0CisuSVggSXRlbSAiLW1jcHU9Y3B1IgorU2VsZWN0IHRoZSBwcm9jZXNzb3IgdHlwZSBmb3Igd2hpY2ggdG8gZ2VuZXJhdGUgY29kZS4gIFBvc3NpYmxlIHZhbHVlcyBhcmUKK1wmXGZCZnJ2XGZSLCBcZkJmcjU1MFxmUiwgXGZCdG9tY2F0XGZSLCBcZkJmcjUwMFxmUiwgXGZCZnI0NTBcZlIsCitcJlxmQmZyNDA1XGZSLCBcZkJmcjQwMFxmUiwgXGZCZnIzMDBcZlIgYW5kIFxmQnNpbXBsZVxmUi4KKy5QUAorXGZJR05VL0xpbnV4IE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJHTlUvTGludXggT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIEdOVS9MaW51eCB0YXJnZXRzOgorLklQICJcZkJcLW1nbGliY1xmUiIgNAorLklYIEl0ZW0gIi1tZ2xpYmMiCitVc2UgdGhlIFxzLTFHTlVcczAgQyBsaWJyYXJ5LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBleGNlcHQKK29uIFxmQipcLSpcLWxpbnV4XC0qdWNsaWJjKlxmUiBhbmQgXGZCKlwtKlwtbGludXhcLSphbmRyb2lkKlxmUiB0YXJnZXRzLgorLklQICJcZkJcLW11Y2xpYmNcZlIiIDQKKy5JWCBJdGVtICItbXVjbGliYyIKK1VzZSB1Q2xpYmMgQyBsaWJyYXJ5LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvbgorXCZcZkIqXC0qXC1saW51eFwtKnVjbGliYypcZlIgdGFyZ2V0cy4KKy5JUCAiXGZCXC1tYmlvbmljXGZSIiA0CisuSVggSXRlbSAiLW1iaW9uaWMiCitVc2UgQmlvbmljIEMgbGlicmFyeS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgb24KK1wmXGZCKlwtKlwtbGludXhcLSphbmRyb2lkKlxmUiB0YXJnZXRzLgorLklQICJcZkJcLW1hbmRyb2lkXGZSIiA0CisuSVggSXRlbSAiLW1hbmRyb2lkIgorQ29tcGlsZSBjb2RlIGNvbXBhdGlibGUgd2l0aCBBbmRyb2lkIHBsYXRmb3JtLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBvbgorXCZcZkIqXC0qXC1saW51eFwtKmFuZHJvaWQqXGZSIHRhcmdldHMuCisuU3AKK1doZW4gY29tcGlsaW5nLCB0aGlzIG9wdGlvbiBlbmFibGVzIFxmQlwtbWJpb25pY1xmUiwgXGZCXC1mUElDXGZSLAorXCZcZkJcLWZub1wtZXhjZXB0aW9uc1xmUiBhbmQgXGZCXC1mbm9cLXJ0dGlcZlIgYnkgZGVmYXVsdC4gIFdoZW4gbGlua2luZywKK3RoaXMgb3B0aW9uIG1ha2VzIHRoZSBccy0xR0NDXHMwIGRyaXZlciBwYXNzIEFuZHJvaWQtc3BlY2lmaWMgb3B0aW9ucyB0byB0aGUgbGlua2VyLgorRmluYWxseSwgdGhpcyBvcHRpb24gY2F1c2VzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gXGYoQ1dcKihDYF9cfF9BTkRST0lEX1x8X1wqKEMnXGZSCit0byBiZSBkZWZpbmVkLgorLklQICJcZkJcLXRub1wtYW5kcm9pZFwtY2NcZlIiIDQKKy5JWCBJdGVtICItdG5vLWFuZHJvaWQtY2MiCitEaXNhYmxlIGNvbXBpbGF0aW9uIGVmZmVjdHMgb2YgXGZCXC1tYW5kcm9pZFxmUiwgaS5lLiwgZG8gbm90IGVuYWJsZQorXCZcZkJcLW1iaW9uaWNcZlIsIFxmQlwtZlBJQ1xmUiwgXGZCXC1mbm9cLWV4Y2VwdGlvbnNcZlIgYW5kCitcJlxmQlwtZm5vXC1ydHRpXGZSIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtdG5vXC1hbmRyb2lkXC1sZFxmUiIgNAorLklYIEl0ZW0gIi10bm8tYW5kcm9pZC1sZCIKK0Rpc2FibGUgbGlua2luZyBlZmZlY3RzIG9mIFxmQlwtbWFuZHJvaWRcZlIsIGkuZS4sIHBhc3Mgc3RhbmRhcmQgTGludXgKK2xpbmtpbmcgb3B0aW9ucyB0byB0aGUgbGlua2VyLgorLlBQCitcZklIOC8zMDAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkg4LzMwMCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIEg4LzMwMCBpbXBsZW1lbnRhdGlvbnM6CisuSVAgIlxmQlwtbXJlbGF4XGZSIiA0CisuSVggSXRlbSAiLW1yZWxheCIKK1Nob3J0ZW4gc29tZSBhZGRyZXNzIHJlZmVyZW5jZXMgYXQgbGluayB0aW1lLCB3aGVuIHBvc3NpYmxlOyB1c2VzIHRoZQorbGlua2VyIG9wdGlvbiBcZkJcLXJlbGF4XGZSLgorLklQICJcZkJcLW1oXGZSIiA0CisuSVggSXRlbSAiLW1oIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIEg4LzMwMEguCisuSVAgIlxmQlwtbXNcZlIiIDQKKy5JWCBJdGVtICItbXMiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgSDhTLgorLklQICJcZkJcLW1uXGZSIiA0CisuSVggSXRlbSAiLW1uIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIEg4UyBhbmQgSDgvMzAwSCBpbiB0aGUgbm9ybWFsIG1vZGUuICBUaGlzIHN3aXRjaAorbXVzdCBiZSB1c2VkIGVpdGhlciB3aXRoIFxmQlwtbWhcZlIgb3IgXGZCXC1tc1xmUi4KKy5JUCAiXGZCXC1tczI2MDBcZlIiIDQKKy5JWCBJdGVtICItbXMyNjAwIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIEg4Uy8yNjAwLiAgVGhpcyBzd2l0Y2ggbXVzdCBiZSB1c2VkIHdpdGggXGZCXC1tc1xmUi4KKy5JUCAiXGZCXC1tZXhyXGZSIiA0CisuSVggSXRlbSAiLW1leHIiCitFeHRlbmRlZCByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiBzdGFjayBiZWZvcmUgZXhlY3V0aW9uIG9mIGZ1bmN0aW9uCit3aXRoIG1vbml0b3IgYXR0cmlidXRlLiBEZWZhdWx0IG9wdGlvbiBpcyBcZkJcLW1leHJcZlIuCitUaGlzIG9wdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBIOFMgdGFyZ2V0cy4KKy5JUCAiXGZCXC1tbm9cLWV4clxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZXhyIgorRXh0ZW5kZWQgcmVnaXN0ZXJzIGFyZSBub3Qgc3RvcmVkIG9uIHN0YWNrIGJlZm9yZSBleGVjdXRpb24gb2YgZnVuY3Rpb24gCit3aXRoIG1vbml0b3IgYXR0cmlidXRlLiBEZWZhdWx0IG9wdGlvbiBpcyBcZkJcLW1ub1wtZXhyXGZSLiAKK1RoaXMgb3B0aW9uIGlzIHZhbGlkIG9ubHkgZm9yIEg4UyB0YXJnZXRzLgorLklQICJcZkJcLW1pbnQzMlxmUiIgNAorLklYIEl0ZW0gIi1taW50MzIiCitNYWtlIFxmKENXXCooQ2BpbnRcKihDJ1xmUiBkYXRhIDMyIGJpdHMgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tYWxpZ25cLTMwMFxmUiIgNAorLklYIEl0ZW0gIi1tYWxpZ24tMzAwIgorT24gdGhlIEg4LzMwMEggYW5kIEg4UywgdXNlIHRoZSBzYW1lIGFsaWdubWVudCBydWxlcyBhcyBmb3IgdGhlIEg4LzMwMC4KK1RoZSBkZWZhdWx0IGZvciB0aGUgSDgvMzAwSCBhbmQgSDhTIGlzIHRvIGFsaWduIGxvbmdzIGFuZCBmbG9hdHMgb24KKzRcLWJ5dGUgYm91bmRhcmllcy4KK1wmXGZCXC1tYWxpZ25cLTMwMFxmUiBjYXVzZXMgdGhlbSB0byBiZSBhbGlnbmVkIG9uIDJcLWJ5dGUgYm91bmRhcmllcy4KK1RoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIEg4LzMwMC4KKy5QUAorXGZJXHMtMUhQUEFcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIkhQUEEgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBccy0xSFBQQVxzMCBmYW1pbHkgb2YgY29tcHV0ZXJzOgorLklQICJcZkJcLW1hcmNoPVxmUlxmSWFyY2hpdGVjdHVyZS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW1hcmNoPWFyY2hpdGVjdHVyZS10eXBlIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIHNwZWNpZmllZCBhcmNoaXRlY3R1cmUuICBUaGUgY2hvaWNlcyBmb3IKK1wmXGZJYXJjaGl0ZWN0dXJlLXR5cGVcZlIgYXJlIFxmQjEuMFxmUiBmb3IgXHMtMVBBXHMwIDEuMCwgXGZCMS4xXGZSIGZvciBccy0xUEFcczAKKzEuMSwgYW5kIFxmQjIuMFxmUiBmb3IgXHMtMVBBXHMwIDIuMCBwcm9jZXNzb3JzLiAgUmVmZXIgdG8KK1wmXGZJL3Vzci9saWIvc2NoZWQubW9kZWxzXGZSIG9uIGFuIEhQLVVYIHN5c3RlbSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcgorYXJjaGl0ZWN0dXJlIG9wdGlvbiBmb3IgeW91ciBtYWNoaW5lLiAgQ29kZSBjb21waWxlZCBmb3IgbG93ZXIgbnVtYmVyZWQKK2FyY2hpdGVjdHVyZXMgcnVucyBvbiBoaWdoZXIgbnVtYmVyZWQgYXJjaGl0ZWN0dXJlcywgYnV0IG5vdCB0aGUKK290aGVyIHdheSBhcm91bmQuCisuSVAgIlxmQlwtbXBhXC1yaXNjXC0xXC0wXGZSIiA0CisuSVggSXRlbSAiLW1wYS1yaXNjLTEtMCIKKy5QRCAwCisuSVAgIlxmQlwtbXBhXC1yaXNjXC0xXC0xXGZSIiA0CisuSVggSXRlbSAiLW1wYS1yaXNjLTEtMSIKKy5JUCAiXGZCXC1tcGFcLXJpc2NcLTJcLTBcZlIiIDQKKy5JWCBJdGVtICItbXBhLXJpc2MtMi0wIgorLlBECitTeW5vbnltcyBmb3IgXGZCXC1tYXJjaD0xLjBcZlIsIFxmQlwtbWFyY2g9MS4xXGZSLCBhbmQgXGZCXC1tYXJjaD0yLjBcZlIgcmVzcGVjdGl2ZWx5LgorLklQICJcZkJcLW1iaWdcLXN3aXRjaFxmUiIgNAorLklYIEl0ZW0gIi1tYmlnLXN3aXRjaCIKK0dlbmVyYXRlIGNvZGUgc3VpdGFibGUgZm9yIGJpZyBzd2l0Y2ggdGFibGVzLiAgVXNlIHRoaXMgb3B0aW9uIG9ubHkgaWYKK3RoZSBhc3NlbWJsZXIvbGlua2VyIGNvbXBsYWluIGFib3V0IG91dC1vZi1yYW5nZSBicmFuY2hlcyB3aXRoaW4gYSBzd2l0Y2gKK3RhYmxlLgorLklQICJcZkJcLW1qdW1wXC1pblwtZGVsYXlcZlIiIDQKKy5JWCBJdGVtICItbWp1bXAtaW4tZGVsYXkiCitGaWxsIGRlbGF5IHNsb3RzIG9mIGZ1bmN0aW9uIGNhbGxzIHdpdGggdW5jb25kaXRpb25hbCBqdW1wIGluc3RydWN0aW9ucworYnkgbW9kaWZ5aW5nIHRoZSByZXR1cm4gcG9pbnRlciBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwgdG8gYmUgdGhlIHRhcmdldAorb2YgdGhlIGNvbmRpdGlvbmFsIGp1bXAuCisuSVAgIlxmQlwtbWRpc2FibGVcLWZwcmVnc1xmUiIgNAorLklYIEl0ZW0gIi1tZGlzYWJsZS1mcHJlZ3MiCitQcmV2ZW50IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBmcm9tIGJlaW5nIHVzZWQgaW4gYW55IG1hbm5lci4gIFRoaXMgaXMKK25lY2Vzc2FyeSBmb3IgY29tcGlsaW5nIGtlcm5lbHMgdGhhdCBwZXJmb3JtIGxhenkgY29udGV4dCBzd2l0Y2hpbmcgb2YKK2Zsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gIElmIHlvdSB1c2UgdGhpcyBvcHRpb24gYW5kIGF0dGVtcHQgdG8gcGVyZm9ybQorZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucywgdGhlIGNvbXBpbGVyIGFib3J0cy4KKy5JUCAiXGZCXC1tZGlzYWJsZVwtaW5kZXhpbmdcZlIiIDQKKy5JWCBJdGVtICItbWRpc2FibGUtaW5kZXhpbmciCitQcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIHVzaW5nIGluZGV4aW5nIGFkZHJlc3MgbW9kZXMuICBUaGlzIGF2b2lkcyBzb21lCityYXRoZXIgb2JzY3VyZSBwcm9ibGVtcyB3aGVuIGNvbXBpbGluZyBccy0xTUlHXHMwIGdlbmVyYXRlZCBjb2RlIHVuZGVyIFxzLTFNQUNIXHMwLgorLklQICJcZkJcLW1ub1wtc3BhY2VcLXJlZ3NcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNwYWNlLXJlZ3MiCitHZW5lcmF0ZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGUgdGFyZ2V0IGhhcyBubyBzcGFjZSByZWdpc3RlcnMuICBUaGlzIGFsbG93cworXCZccy0xR0NDXHMwIHRvIGdlbmVyYXRlIGZhc3RlciBpbmRpcmVjdCBjYWxscyBhbmQgdXNlIHVuc2NhbGVkIGluZGV4IGFkZHJlc3MgbW9kZXMuCisuU3AKK1N1Y2ggY29kZSBpcyBzdWl0YWJsZSBmb3IgbGV2ZWwgMCBccy0xUEFcczAgc3lzdGVtcyBhbmQga2VybmVscy4KKy5JUCAiXGZCXC1tZmFzdFwtaW5kaXJlY3RcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1mYXN0LWluZGlyZWN0LWNhbGxzIgorR2VuZXJhdGUgY29kZSB0aGF0IGFzc3VtZXMgY2FsbHMgbmV2ZXIgY3Jvc3Mgc3BhY2UgYm91bmRhcmllcy4gIFRoaXMKK2FsbG93cyBccy0xR0NDXHMwIHRvIGVtaXQgY29kZSB0aGF0IHBlcmZvcm1zIGZhc3RlciBpbmRpcmVjdCBjYWxscy4KKy5TcAorVGhpcyBvcHRpb24gZG9lcyBub3Qgd29yayBpbiB0aGUgcHJlc2VuY2Ugb2Ygc2hhcmVkIGxpYnJhcmllcyBvciBuZXN0ZWQKK2Z1bmN0aW9ucy4KKy5JUCAiXGZCXC1tZml4ZWRcLXJhbmdlPVxmUlxmSXJlZ2lzdGVyLXJhbmdlXGZSIiA0CisuSVggSXRlbSAiLW1maXhlZC1yYW5nZT1yZWdpc3Rlci1yYW5nZSIKK0dlbmVyYXRlIGNvZGUgdHJlYXRpbmcgdGhlIGdpdmVuIHJlZ2lzdGVyIHJhbmdlIGFzIGZpeGVkIHJlZ2lzdGVycy4KK0EgZml4ZWQgcmVnaXN0ZXIgaXMgb25lIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBjYW5ub3QgdXNlLiAgVGhpcyBpcwordXNlZnVsIHdoZW4gY29tcGlsaW5nIGtlcm5lbCBjb2RlLiAgQSByZWdpc3RlciByYW5nZSBpcyBzcGVjaWZpZWQgYXMKK3R3byByZWdpc3RlcnMgc2VwYXJhdGVkIGJ5IGEgZGFzaC4gIE11bHRpcGxlIHJlZ2lzdGVyIHJhbmdlcyBjYW4gYmUKK3NwZWNpZmllZCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4KKy5JUCAiXGZCXC1tbG9uZ1wtbG9hZFwtc3RvcmVcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctbG9hZC1zdG9yZSIKK0dlbmVyYXRlIDNcLWluc3RydWN0aW9uIGxvYWQgYW5kIHN0b3JlIHNlcXVlbmNlcyBhcyBzb21ldGltZXMgcmVxdWlyZWQgYnkKK3RoZSBIUC1VWCAxMCBsaW5rZXIuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFxmQitrXGZSIG9wdGlvbiB0bwordGhlIFxzLTFIUFxzMCBjb21waWxlcnMuCisuSVAgIlxmQlwtbXBvcnRhYmxlXC1ydW50aW1lXGZSIiA0CisuSVggSXRlbSAiLW1wb3J0YWJsZS1ydW50aW1lIgorVXNlIHRoZSBwb3J0YWJsZSBjYWxsaW5nIGNvbnZlbnRpb25zIHByb3Bvc2VkIGJ5IFxzLTFIUFxzMCBmb3IgXHMtMUVMRlxzMCBzeXN0ZW1zLgorLklQICJcZkJcLW1nYXNcZlIiIDQKKy5JWCBJdGVtICItbWdhcyIKK0VuYWJsZSB0aGUgdXNlIG9mIGFzc2VtYmxlciBkaXJlY3RpdmVzIG9ubHkgXHMtMUdBU1xzMCB1bmRlcnN0YW5kcy4KKy5JUCAiXGZCXC1tc2NoZWR1bGU9XGZSXGZJY3B1LXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkdWxlPWNwdS10eXBlIgorU2NoZWR1bGUgY29kZSBhY2NvcmRpbmcgdG8gdGhlIGNvbnN0cmFpbnRzIGZvciB0aGUgbWFjaGluZSB0eXBlCitcJlxmSWNwdS10eXBlXGZSLiAgVGhlIGNob2ljZXMgZm9yIFxmSWNwdS10eXBlXGZSIGFyZSBcZkI3MDBcZlIKK1wmXGZCNzEwMFxmUiwgXGZCNzEwMExDXGZSLCBcZkI3MjAwXGZSLCBcZkI3MzAwXGZSIGFuZCBcZkI4MDAwXGZSLiAgUmVmZXIKK3RvIFxmSS91c3IvbGliL3NjaGVkLm1vZGVsc1xmUiBvbiBhbiBIUC1VWCBzeXN0ZW0gdG8gZGV0ZXJtaW5lIHRoZQorcHJvcGVyIHNjaGVkdWxpbmcgb3B0aW9uIGZvciB5b3VyIG1hY2hpbmUuICBUaGUgZGVmYXVsdCBzY2hlZHVsaW5nIGlzCitcJlxmQjgwMDBcZlIuCisuSVAgIlxmQlwtbWxpbmtlclwtb3B0XGZSIiA0CisuSVggSXRlbSAiLW1saW5rZXItb3B0IgorRW5hYmxlIHRoZSBvcHRpbWl6YXRpb24gcGFzcyBpbiB0aGUgSFAtVVggbGlua2VyLiAgTm90ZSB0aGlzIG1ha2VzIHN5bWJvbGljCitkZWJ1Z2dpbmcgaW1wb3NzaWJsZS4gIEl0IGFsc28gdHJpZ2dlcnMgYSBidWcgaW4gdGhlIEhQLVVYIDggYW5kIEhQLVVYIDkKK2xpbmtlcnMgaW4gd2hpY2ggdGhleSBnaXZlIGJvZ3VzIGVycm9yIG1lc3NhZ2VzIHdoZW4gbGlua2luZyBzb21lIHByb2dyYW1zLgorLklQICJcZkJcLW1zb2Z0XC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1mbG9hdCIKK0dlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIGxpYnJhcnkgY2FsbHMgZm9yIGZsb2F0aW5nIHBvaW50LgorXCZcZkJXYXJuaW5nOlxmUiB0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgYWxsIFxzLTFIUFBBXHMwCit0YXJnZXRzLiAgTm9ybWFsbHkgdGhlIGZhY2lsaXRpZXMgb2YgdGhlIG1hY2hpbmUncyB1c3VhbCBDIGNvbXBpbGVyIGFyZQordXNlZCwgYnV0IHRoaXMgY2Fubm90IGJlIGRvbmUgZGlyZWN0bHkgaW4gY3Jvc3MtY29tcGlsYXRpb24uICBZb3UgbXVzdCBtYWtlCit5b3VyIG93biBhcnJhbmdlbWVudHMgdG8gcHJvdmlkZSBzdWl0YWJsZSBsaWJyYXJ5IGZ1bmN0aW9ucyBmb3IKK2Nyb3NzLWNvbXBpbGF0aW9uLgorLlNwCitcJlxmQlwtbXNvZnRcLWZsb2F0XGZSIGNoYW5nZXMgdGhlIGNhbGxpbmcgY29udmVudGlvbiBpbiB0aGUgb3V0cHV0IGZpbGU7Cit0aGVyZWZvcmUsIGl0IGlzIG9ubHkgdXNlZnVsIGlmIHlvdSBjb21waWxlIFxmSWFsbFxmUiBvZiBhIHByb2dyYW0gd2l0aAordGhpcyBvcHRpb24uICBJbiBwYXJ0aWN1bGFyLCB5b3UgbmVlZCB0byBjb21waWxlIFxmSWxpYmdjYy5hXGZSLCB0aGUKK2xpYnJhcnkgdGhhdCBjb21lcyB3aXRoIFxzLTFHQ0NcczAsIHdpdGggXGZCXC1tc29mdFwtZmxvYXRcZlIgaW4gb3JkZXIgZm9yCit0aGlzIHRvIHdvcmsuCisuSVAgIlxmQlwtbXNpb1xmUiIgNAorLklYIEl0ZW0gIi1tc2lvIgorR2VuZXJhdGUgdGhlIHByZWRlZmluZSwgXGYoQ1dcKihDYF9TSU9cKihDJ1xmUiwgZm9yIHNlcnZlciBccy0xSU9cczAuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLW13c2lvXGZSLiAgVGhpcyBnZW5lcmF0ZXMgdGhlIHByZWRlZmluZXMsIFxmKENXXCooQ2BfXHxfaHA5MDAwczcwMFwqKEMnXGZSLAorXCZcZihDV1wqKENgX1x8X2hwOTAwMHM3MDBfXHxfXCooQydcZlIgYW5kIFxmKENXXCooQ2BfV1NJT1wqKEMnXGZSLCBmb3Igd29ya3N0YXRpb24gXHMtMUlPXHMwLiAgVGhlc2UKK29wdGlvbnMgYXJlIGF2YWlsYWJsZSB1bmRlciBIUC1VWCBhbmQgSEktVVguCisuSVAgIlxmQlwtbWdudVwtbGRcZlIiIDQKKy5JWCBJdGVtICItbWdudS1sZCIKK1VzZSBvcHRpb25zIHNwZWNpZmljIHRvIFxzLTFHTlVcczAgXGZCbGRcZlIuCitUaGlzIHBhc3NlcyBcZkJcLXNoYXJlZFxmUiB0byBcZkJsZFxmUiB3aGVuCitidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5LiAgSXQgaXMgdGhlIGRlZmF1bHQgd2hlbiBccy0xR0NDXHMwIGlzIGNvbmZpZ3VyZWQsCitleHBsaWNpdGx5IG9yIGltcGxpY2l0bHksIHdpdGggdGhlIFxzLTFHTlVcczAgbGlua2VyLiAgVGhpcyBvcHRpb24gZG9lcyBub3QKK2FmZmVjdCB3aGljaCBcZkJsZFxmUiBpcyBjYWxsZWQ7IGl0IG9ubHkgY2hhbmdlcyB3aGF0IHBhcmFtZXRlcnMKK2FyZSBwYXNzZWQgdG8gdGhhdCBcZkJsZFxmUi4KK1RoZSBcZkJsZFxmUiB0aGF0IGlzIGNhbGxlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorXCZcZkJcLVwtd2l0aFwtbGRcZlIgY29uZmlndXJlIG9wdGlvbiwgXHMtMUdDQ1xzMCdzIHByb2dyYW0gc2VhcmNoIHBhdGgsIGFuZAorZmluYWxseSBieSB0aGUgdXNlcidzIFxmQlxzLTFQQVRIXHMwXGZSLiAgVGhlIGxpbmtlciB1c2VkIGJ5IFxzLTFHQ0NcczAgY2FuIGJlIHByaW50ZWQKK3VzaW5nIFxmQndoaWNoIGBnY2MgXC1wcmludFwtcHJvZ1wtbmFtZT1sZGBcZlIuICBUaGlzIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZQorb24gdGhlIDY0XC1iaXQgSFAtVVggXHMtMUdDQ1xzMCwgaS5lLiBjb25maWd1cmVkIHdpdGggXGZCaHBwYSo2NCpcLSpcLWhwdXgqXGZSLgorLklQICJcZkJcLW1ocFwtbGRcZlIiIDQKKy5JWCBJdGVtICItbWhwLWxkIgorVXNlIG9wdGlvbnMgc3BlY2lmaWMgdG8gXHMtMUhQXHMwIFxmQmxkXGZSLgorVGhpcyBwYXNzZXMgXGZCXC1iXGZSIHRvIFxmQmxkXGZSIHdoZW4gYnVpbGRpbmcKK2Egc2hhcmVkIGxpYnJhcnkgYW5kIHBhc3NlcyBcZkIrQWNjZXB0IFR5cGVNaXNtYXRjaFxmUiB0byBcZkJsZFxmUiBvbiBhbGwKK2xpbmtzLiAgSXQgaXMgdGhlIGRlZmF1bHQgd2hlbiBccy0xR0NDXHMwIGlzIGNvbmZpZ3VyZWQsIGV4cGxpY2l0bHkgb3IKK2ltcGxpY2l0bHksIHdpdGggdGhlIFxzLTFIUFxzMCBsaW5rZXIuICBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QKK3doaWNoIFxmQmxkXGZSIGlzIGNhbGxlZDsgaXQgb25seSBjaGFuZ2VzIHdoYXQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoYXQKK1wmXGZCbGRcZlIuCitUaGUgXGZCbGRcZlIgdGhhdCBpcyBjYWxsZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgXGZCXC1cLXdpdGhcLWxkXGZSCitjb25maWd1cmUgb3B0aW9uLCBccy0xR0NDXHMwJ3MgcHJvZ3JhbSBzZWFyY2ggcGF0aCwgYW5kIGZpbmFsbHkgYnkgdGhlIHVzZXIncworXCZcZkJccy0xUEFUSFxzMFxmUi4gIFRoZSBsaW5rZXIgdXNlZCBieSBccy0xR0NDXHMwIGNhbiBiZSBwcmludGVkIHVzaW5nIFxmQndoaWNoCitgZ2NjIFwtcHJpbnRcLXByb2dcLW5hbWU9bGRgXGZSLiAgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgb24gdGhlIDY0XC1iaXQKK0hQLVVYIFxzLTFHQ0NcczAsIGkuZS4gY29uZmlndXJlZCB3aXRoIFxmQmhwcGEqNjQqXC0qXC1ocHV4KlxmUi4KKy5JUCAiXGZCXC1tbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctY2FsbHMiCitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBsb25nIGNhbGwgc2VxdWVuY2VzLiAgVGhpcyBlbnN1cmVzIHRoYXQgYSBjYWxsCitpcyBhbHdheXMgYWJsZSB0byByZWFjaCBsaW5rZXIgZ2VuZXJhdGVkIHN0dWJzLiAgVGhlIGRlZmF1bHQgaXMgdG8gZ2VuZXJhdGUKK2xvbmcgY2FsbHMgb25seSB3aGVuIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBjYWxsIHNpdGUgdG8gdGhlIGJlZ2lubmluZworb2YgdGhlIGZ1bmN0aW9uIG9yIHRyYW5zbGF0aW9uIHVuaXQsIGFzIHRoZSBjYXNlIG1heSBiZSwgZXhjZWVkcyBhCitwcmVkZWZpbmVkIGxpbWl0IHNldCBieSB0aGUgYnJhbmNoIHR5cGUgYmVpbmcgdXNlZC4gIFRoZSBsaW1pdHMgZm9yCitub3JtYWwgY2FsbHMgYXJlIDcsNjAwLDAwMCBhbmQgMjQwLDAwMCBieXRlcywgcmVzcGVjdGl2ZWx5IGZvciB0aGUKK1wmXHMtMVBBXHMwIDIuMCBhbmQgXHMtMVBBXHMwIDEuWCBhcmNoaXRlY3R1cmVzLiAgU2liY2FsbHMgYXJlIGFsd2F5cyBsaW1pdGVkIGF0CisyNDAsMDAwIGJ5dGVzLgorLlNwCitEaXN0YW5jZXMgYXJlIG1lYXN1cmVkIGZyb20gdGhlIGJlZ2lubmluZyBvZiBmdW5jdGlvbnMgd2hlbiB1c2luZyB0aGUKK1wmXGZCXC1mZnVuY3Rpb25cLXNlY3Rpb25zXGZSIG9wdGlvbiwgb3Igd2hlbiB1c2luZyB0aGUgXGZCXC1tZ2FzXGZSCithbmQgXGZCXC1tbm9cLXBvcnRhYmxlXC1ydW50aW1lXGZSIG9wdGlvbnMgdG9nZXRoZXIgdW5kZXIgSFAtVVggd2l0aAordGhlIFxzLTFTT01cczAgbGlua2VyLgorLlNwCitJdCBpcyBub3JtYWxseSBub3QgZGVzaXJhYmxlIHRvIHVzZSB0aGlzIG9wdGlvbiBhcyBpdCBkZWdyYWRlcworcGVyZm9ybWFuY2UuICBIb3dldmVyLCBpdCBtYXkgYmUgdXNlZnVsIGluIGxhcmdlIGFwcGxpY2F0aW9ucywKK3BhcnRpY3VsYXJseSB3aGVuIHBhcnRpYWwgbGlua2luZyBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbi4KKy5TcAorVGhlIHR5cGVzIG9mIGxvbmcgY2FsbHMgdXNlZCBkZXBlbmRzIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlCithc3NlbWJsZXIgYW5kIGxpbmtlciwgYW5kIHRoZSB0eXBlIG9mIGNvZGUgYmVpbmcgZ2VuZXJhdGVkLiAgVGhlCitpbXBhY3Qgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgbG9uZyBhYnNvbHV0ZSBjYWxscywgYW5kIGxvbmcgcGljCitzeW1ib2wtZGlmZmVyZW5jZSBvciBwYy1yZWxhdGl2ZSBjYWxscyBzaG91bGQgYmUgcmVsYXRpdmVseSBzbWFsbC4KK0hvd2V2ZXIsIGFuIGluZGlyZWN0IGNhbGwgaXMgdXNlZCBvbiAzMlwtYml0IFxzLTFFTEZcczAgc3lzdGVtcyBpbiBwaWMgY29kZQorYW5kIGl0IGlzIHF1aXRlIGxvbmcuCisuSVAgIlxmQlwtbXVuaXg9XGZSXGZJdW5peC1zdGRcZlIiIDQKKy5JWCBJdGVtICItbXVuaXg9dW5peC1zdGQiCitHZW5lcmF0ZSBjb21waWxlciBwcmVkZWZpbmVzIGFuZCBzZWxlY3QgYSBzdGFydGZpbGUgZm9yIHRoZSBzcGVjaWZpZWQKK1wmXHMtMVVOSVhcczAgc3RhbmRhcmQuICBUaGUgY2hvaWNlcyBmb3IgXGZJdW5peC1zdGRcZlIgYXJlIFxmQjkzXGZSLCBcZkI5NVxmUgorYW5kIFxmQjk4XGZSLiAgXGZCOTNcZlIgaXMgc3VwcG9ydGVkIG9uIGFsbCBIUC1VWCB2ZXJzaW9ucy4gIFxmQjk1XGZSCitpcyBhdmFpbGFibGUgb24gSFAtVVggMTAuMTAgYW5kIGxhdGVyLiAgXGZCOThcZlIgaXMgYXZhaWxhYmxlIG9uIEhQLVVYCisxMS4xMSBhbmQgbGF0ZXIuICBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIFxmQjkzXGZSIGZvciBIUC1VWCAxMC4wMCwKK1wmXGZCOTVcZlIgZm9yIEhQLVVYIDEwLjEwIHRob3VnaCB0byAxMS4wMCwgYW5kIFxmQjk4XGZSIGZvciBIUC1VWCAxMS4xMQorYW5kIGxhdGVyLgorLlNwCitcJlxmQlwtbXVuaXg9OTNcZlIgcHJvdmlkZXMgdGhlIHNhbWUgcHJlZGVmaW5lcyBhcyBccy0xR0NDXHMwIDMuMyBhbmQgMy40LgorXCZcZkJcLW11bml4PTk1XGZSIHByb3ZpZGVzIGFkZGl0aW9uYWwgcHJlZGVmaW5lcyBmb3IgXGYoQ1dcKihDYFhPUEVOX1VOSVhcKihDJ1xmUgorYW5kIFxmKENXXCooQ2BfWE9QRU5fU09VUkNFX0VYVEVOREVEXCooQydcZlIsIGFuZCB0aGUgc3RhcnRmaWxlIFxmSXVuaXg5NS5vXGZSLgorXCZcZkJcLW11bml4PTk4XGZSIHByb3ZpZGVzIGFkZGl0aW9uYWwgcHJlZGVmaW5lcyBmb3IgXGYoQ1dcKihDYF9YT1BFTl9VTklYXCooQydcZlIsCitcJlxmKENXXCooQ2BfWE9QRU5fU09VUkNFX0VYVEVOREVEXCooQydcZlIsIFxmKENXXCooQ2BfSU5DTFVERV9cfF9TVERDX0ExX1NPVVJDRVwqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgX0lOQ0xVREVfWE9QRU5fU09VUkNFXzUwMFwqKEMnXGZSLCBhbmQgdGhlIHN0YXJ0ZmlsZSBcZkl1bml4OTgub1xmUi4KKy5TcAorSXQgaXMgXGZJaW1wb3J0YW50XGZSIHRvIG5vdGUgdGhhdCB0aGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBpbnRlcmZhY2VzCitmb3IgdmFyaW91cyBsaWJyYXJ5IHJvdXRpbmVzLiAgSXQgYWxzbyBhZmZlY3RzIHRoZSBvcGVyYXRpb25hbCBiZWhhdmlvcgorb2YgdGhlIEMgbGlicmFyeS4gIFRodXMsIFxmSWV4dHJlbWVcZlIgY2FyZSBpcyBuZWVkZWQgaW4gdXNpbmcgdGhpcworb3B0aW9uLgorLlNwCitMaWJyYXJ5IGNvZGUgdGhhdCBpcyBpbnRlbmRlZCB0byBvcGVyYXRlIHdpdGggbW9yZSB0aGFuIG9uZSBccy0xVU5JWFxzMAorc3RhbmRhcmQgbXVzdCB0ZXN0LCBzZXQgYW5kIHJlc3RvcmUgdGhlIHZhcmlhYmxlIFxmSV9cfF94cGc0X2V4dGVuZGVkX21hc2tcZlIKK2FzIGFwcHJvcHJpYXRlLiAgTW9zdCBccy0xR05VXHMwIHNvZnR3YXJlIGRvZXNuJ3QgcHJvdmlkZSB0aGlzIGNhcGFiaWxpdHkuCisuSVAgIlxmQlwtbm9saWJkbGRcZlIiIDQKKy5JWCBJdGVtICItbm9saWJkbGQiCitTdXBwcmVzcyB0aGUgZ2VuZXJhdGlvbiBvZiBsaW5rIG9wdGlvbnMgdG8gc2VhcmNoIGxpYmRsZC5zbCB3aGVuIHRoZQorXCZcZkJcLXN0YXRpY1xmUiBvcHRpb24gaXMgc3BlY2lmaWVkIG9uIEhQLVVYIDEwIGFuZCBsYXRlci4KKy5JUCAiXGZCXC1zdGF0aWNcZlIiIDQKKy5JWCBJdGVtICItc3RhdGljIgorVGhlIEhQLVVYIGltcGxlbWVudGF0aW9uIG9mIHNldGxvY2FsZSBpbiBsaWJjIGhhcyBhIGRlcGVuZGVuY3kgb24KK2xpYmRsZC5zbC4gIFRoZXJlIGlzbid0IGFuIGFyY2hpdmUgdmVyc2lvbiBvZiBsaWJkbGQuc2wuICBUaHVzLAord2hlbiB0aGUgXGZCXC1zdGF0aWNcZlIgb3B0aW9uIGlzIHNwZWNpZmllZCwgc3BlY2lhbCBsaW5rIG9wdGlvbnMKK2FyZSBuZWVkZWQgdG8gcmVzb2x2ZSB0aGlzIGRlcGVuZGVuY3kuCisuU3AKK09uIEhQLVVYIDEwIGFuZCBsYXRlciwgdGhlIFxzLTFHQ0NcczAgZHJpdmVyIGFkZHMgdGhlIG5lY2Vzc2FyeSBvcHRpb25zIHRvCitsaW5rIHdpdGggbGliZGxkLnNsIHdoZW4gdGhlIFxmQlwtc3RhdGljXGZSIG9wdGlvbiBpcyBzcGVjaWZpZWQuCitUaGlzIGNhdXNlcyB0aGUgcmVzdWx0aW5nIGJpbmFyeSB0byBiZSBkeW5hbWljLiAgT24gdGhlIDY0XC1iaXQgcG9ydCwKK3RoZSBsaW5rZXJzIGdlbmVyYXRlIGR5bmFtaWMgYmluYXJpZXMgYnkgZGVmYXVsdCBpbiBhbnkgY2FzZS4gIFRoZQorXCZcZkJcLW5vbGliZGxkXGZSIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IHRoZSBccy0xR0NDXHMwIGRyaXZlciBmcm9tCithZGRpbmcgdGhlc2UgbGluayBvcHRpb25zLgorLklQICJcZkJcLXRocmVhZHNcZlIiIDQKKy5JWCBJdGVtICItdGhyZWFkcyIKK0FkZCBzdXBwb3J0IGZvciBtdWx0aXRocmVhZGluZyB3aXRoIHRoZSBcZklkY2UgdGhyZWFkXGZSIGxpYnJhcnkKK3VuZGVyIEhQLVVYLiAgVGhpcyBvcHRpb24gc2V0cyBmbGFncyBmb3IgYm90aCB0aGUgcHJlcHJvY2Vzc29yIGFuZAorbGlua2VyLgorLlBQCitcZklJbnRlbCAzODYgYW5kIFxzLTFBTURcczAgeDg2XC02NCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiSW50ZWwgMzg2IGFuZCBBTUQgeDg2LTY0IE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgaTM4NiBhbmQgeDg2XC02NCBmYW1pbHkgb2YKK2NvbXB1dGVyczoKKy5JUCAiXGZCXC1tYXJjaD1cZlJcZkljcHUtdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tYXJjaD1jcHUtdHlwZSIKK0dlbmVyYXRlIGluc3RydWN0aW9ucyBmb3IgdGhlIG1hY2hpbmUgdHlwZSBcZkljcHUtdHlwZVxmUi4gIEluIGNvbnRyYXN0IHRvCitcJlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIsIHdoaWNoIG1lcmVseSB0dW5lcyB0aGUgZ2VuZXJhdGVkIGNvZGUgCitmb3IgdGhlIHNwZWNpZmllZCBcZkljcHUtdHlwZVxmUiwgXGZCXC1tYXJjaD1cZlJcZkljcHUtdHlwZVxmUiBhbGxvd3MgXHMtMUdDQ1xzMAordG8gZ2VuZXJhdGUgY29kZSB0aGF0IG1heSBub3QgcnVuIGF0IGFsbCBvbiBwcm9jZXNzb3JzIG90aGVyIHRoYW4gdGhlIG9uZQoraW5kaWNhdGVkLiAgU3BlY2lmeWluZyBcZkJcLW1hcmNoPVxmUlxmSWNwdS10eXBlXGZSIGltcGxpZXMgCitcJlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIuCisuU3AKK1RoZSBjaG9pY2VzIGZvciBcZkljcHUtdHlwZVxmUiBhcmU6CisuUlMgNAorLklQICJcZkJuYXRpdmVcZlIiIDQKKy5JWCBJdGVtICJuYXRpdmUiCitUaGlzIHNlbGVjdHMgdGhlIFxzLTFDUFVcczAgdG8gZ2VuZXJhdGUgY29kZSBmb3IgYXQgY29tcGlsYXRpb24gdGltZSBieSBkZXRlcm1pbmluZwordGhlIHByb2Nlc3NvciB0eXBlIG9mIHRoZSBjb21waWxpbmcgbWFjaGluZS4gIFVzaW5nIFxmQlwtbWFyY2g9bmF0aXZlXGZSCitlbmFibGVzIGFsbCBpbnN0cnVjdGlvbiBzdWJzZXRzIHN1cHBvcnRlZCBieSB0aGUgbG9jYWwgbWFjaGluZSAoaGVuY2UKK3RoZSByZXN1bHQgbWlnaHQgbm90IHJ1biBvbiBkaWZmZXJlbnQgbWFjaGluZXMpLiAgVXNpbmcgXGZCXC1tdHVuZT1uYXRpdmVcZlIKK3Byb2R1Y2VzIGNvZGUgb3B0aW1pemVkIGZvciB0aGUgbG9jYWwgbWFjaGluZSB1bmRlciB0aGUgY29uc3RyYWludHMKK29mIHRoZSBzZWxlY3RlZCBpbnN0cnVjdGlvbiBzZXQuCisuSVAgIlxmQmkzODZcZlIiIDQKKy5JWCBJdGVtICJpMzg2IgorT3JpZ2luYWwgSW50ZWwgaTM4NiBccy0xQ1BVXHMwLgorLklQICJcZkJpNDg2XGZSIiA0CisuSVggSXRlbSAiaTQ4NiIKK0ludGVsIGk0ODYgXHMtMUNQVVxzMC4gIChObyBzY2hlZHVsaW5nIGlzIGltcGxlbWVudGVkIGZvciB0aGlzIGNoaXAuKQorLklQICJcZkJpNTg2XGZSIiA0CisuSVggSXRlbSAiaTU4NiIKKy5QRCAwCisuSVAgIlxmQnBlbnRpdW1cZlIiIDQKKy5JWCBJdGVtICJwZW50aXVtIgorLlBECitJbnRlbCBQZW50aXVtIFxzLTFDUFVcczAgd2l0aCBubyBccy0xTU1YXHMwIHN1cHBvcnQuCisuSVAgIlxmQnBlbnRpdW0tbW14XGZSIiA0CisuSVggSXRlbSAicGVudGl1bS1tbXgiCitJbnRlbCBQZW50aXVtIFxzLTFNTVhcczAgXHMtMUNQVVxzMCwgYmFzZWQgb24gUGVudGl1bSBjb3JlIHdpdGggXHMtMU1NWFxzMCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKy5JUCAiXGZCcGVudGl1bXByb1xmUiIgNAorLklYIEl0ZW0gInBlbnRpdW1wcm8iCitJbnRlbCBQZW50aXVtIFBybyBccy0xQ1BVXHMwLgorLklQICJcZkJpNjg2XGZSIiA0CisuSVggSXRlbSAiaTY4NiIKK1doZW4gdXNlZCB3aXRoIFxmQlwtbWFyY2hcZlIsIHRoZSBQZW50aXVtIFBybworaW5zdHJ1Y3Rpb24gc2V0IGlzIHVzZWQsIHNvIHRoZSBjb2RlIHJ1bnMgb24gYWxsIGk2ODYgZmFtaWx5IGNoaXBzLgorV2hlbiB1c2VkIHdpdGggXGZCXC1tdHVuZVxmUiwgaXQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgXGZCZ2VuZXJpY1xmUi4KKy5JUCAiXGZCcGVudGl1bTJcZlIiIDQKKy5JWCBJdGVtICJwZW50aXVtMiIKK0ludGVsIFBlbnRpdW0gXHMtMUlJXHMwIFxzLTFDUFVcczAsIGJhc2VkIG9uIFBlbnRpdW0gUHJvIGNvcmUgd2l0aCBccy0xTU1YXHMwIGluc3RydWN0aW9uIHNldAorc3VwcG9ydC4KKy5JUCAiXGZCcGVudGl1bTNcZlIiIDQKKy5JWCBJdGVtICJwZW50aXVtMyIKKy5QRCAwCisuSVAgIlxmQnBlbnRpdW0zbVxmUiIgNAorLklYIEl0ZW0gInBlbnRpdW0zbSIKKy5QRAorSW50ZWwgUGVudGl1bSBccy0xSUlJXHMwIFxzLTFDUFVcczAsIGJhc2VkIG9uIFBlbnRpdW0gUHJvIGNvcmUgd2l0aCBccy0xTU1YXHMwIGFuZCBccy0xU1NFXHMwIGluc3RydWN0aW9uCitzZXQgc3VwcG9ydC4KKy5JUCAiXGZCcGVudGl1bS1tXGZSIiA0CisuSVggSXRlbSAicGVudGl1bS1tIgorSW50ZWwgUGVudGl1bSBNOyBsb3ctcG93ZXIgdmVyc2lvbiBvZiBJbnRlbCBQZW50aXVtIFxzLTFJSUlcczAgXHMtMUNQVVxzMAord2l0aCBccy0xTU1YXHMwLCBccy0xU1NFXHMwIGFuZCBccy0xU1NFMlxzMCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIFVzZWQgYnkgQ2VudHJpbm8gbm90ZWJvb2tzLgorLklQICJcZkJwZW50aXVtNFxmUiIgNAorLklYIEl0ZW0gInBlbnRpdW00IgorLlBEIDAKKy5JUCAiXGZCcGVudGl1bTRtXGZSIiA0CisuSVggSXRlbSAicGVudGl1bTRtIgorLlBECitJbnRlbCBQZW50aXVtIDQgXHMtMUNQVVxzMCB3aXRoIFxzLTFNTVhcczAsIFxzLTFTU0VcczAgYW5kIFxzLTFTU0UyXHMwIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJwcmVzY290dFxmUiIgNAorLklYIEl0ZW0gInByZXNjb3R0IgorSW1wcm92ZWQgdmVyc2lvbiBvZiBJbnRlbCBQZW50aXVtIDQgXHMtMUNQVVxzMCB3aXRoIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsIFxzLTFTU0UyXHMwIGFuZCBccy0xU1NFM1xzMCBpbnN0cnVjdGlvbgorc2V0IHN1cHBvcnQuCisuSVAgIlxmQm5vY29uYVxmUiIgNAorLklYIEl0ZW0gIm5vY29uYSIKK0ltcHJvdmVkIHZlcnNpb24gb2YgSW50ZWwgUGVudGl1bSA0IFxzLTFDUFVcczAgd2l0aCA2NFwtYml0IGV4dGVuc2lvbnMsIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsCitcJlxzLTFTU0UyXHMwIGFuZCBccy0xU1NFM1xzMCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKy5JUCAiXGZCY29yZTJcZlIiIDQKKy5JWCBJdGVtICJjb3JlMiIKK0ludGVsIENvcmUgMiBccy0xQ1BVXHMwIHdpdGggNjRcLWJpdCBleHRlbnNpb25zLCBccy0xTU1YXHMwLCBccy0xU1NFXHMwLCBccy0xU1NFMlxzMCwgXHMtMVNTRTNcczAgYW5kIFxzLTFTU1NFM1xzMAoraW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQmNvcmVpN1xmUiIgNAorLklYIEl0ZW0gImNvcmVpNyIKK0ludGVsIENvcmUgaTcgXHMtMUNQVVxzMCB3aXRoIDY0XC1iaXQgZXh0ZW5zaW9ucywgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwgXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NTRTNcczAsIFxzLTFTU0U0XHMwLjEKK2FuZCBccy0xU1NFNFxzMC4yIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJjb3JlaTdcLWF2eFxmUiIgNAorLklYIEl0ZW0gImNvcmVpNy1hdngiCitJbnRlbCBDb3JlIGk3IFxzLTFDUFVcczAgd2l0aCA2NFwtYml0IGV4dGVuc2lvbnMsIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsIFxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTU0UzXHMwLAorXCZccy0xU1NFNFxzMC4xLCBccy0xU1NFNFxzMC4yLCBccy0xQVZYXHMwLCBccy0xQUVTXHMwIGFuZCBccy0xUENMTVVMXHMwIGluc3RydWN0aW9uIHNldCBzdXBwb3J0LgorLklQICJcZkJjb3JlLWF2eC1pXGZSIiA0CisuSVggSXRlbSAiY29yZS1hdngtaSIKK0ludGVsIENvcmUgXHMtMUNQVVxzMCB3aXRoIDY0XC1iaXQgZXh0ZW5zaW9ucywgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwgXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NTRTNcczAsCitcJlxzLTFTU0U0XHMwLjEsIFxzLTFTU0U0XHMwLjIsIFxzLTFBVlhcczAsIFxzLTFBRVNcczAsIFxzLTFQQ0xNVUxcczAsIFxzLTFGU0dTQkFTRVxzMCwgXHMtMVJEUk5EXHMwIGFuZCBGMTZDIGluc3RydWN0aW9uCitzZXQgc3VwcG9ydC4KKy5JUCAiXGZCY29yZVwtYXZ4MlxmUiIgNAorLklYIEl0ZW0gImNvcmUtYXZ4MiIKK0ludGVsIENvcmUgXHMtMUNQVVxzMCB3aXRoIDY0XC1iaXQgZXh0ZW5zaW9ucywgXHMtMU1PVkJFXHMwLCBccy0xTU1YXHMwLCBccy0xU1NFXHMwLCBccy0xU1NFMlxzMCwgXHMtMVNTRTNcczAsIFxzLTFTU1NFM1xzMCwKK1wmXHMtMVNTRTRcczAuMSwgXHMtMVNTRTRcczAuMiwgXHMtMUFWWFxzMCwgXHMtMUFWWDJcczAsIFxzLTFBRVNcczAsIFxzLTFQQ0xNVUxcczAsIFxzLTFGU0dTQkFTRVxzMCwgXHMtMVJEUk5EXHMwLCBccy0xRk1BXHMwLCBccy0xQk1JXHMwLCBccy0xQk1JMlxzMAorYW5kIEYxNkMgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQmF0b21cZlIiIDQKKy5JWCBJdGVtICJhdG9tIgorSW50ZWwgQXRvbSBccy0xQ1BVXHMwIHdpdGggNjRcLWJpdCBleHRlbnNpb25zLCBccy0xTU9WQkVcczAsIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsIFxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCBhbmQgXHMtMVNTU0UzXHMwCitpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKy5JUCAiXGZCazZcZlIiIDQKKy5JWCBJdGVtICJrNiIKK1wmXHMtMUFNRFxzMCBLNiBccy0xQ1BVXHMwIHdpdGggXHMtMU1NWFxzMCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKy5JUCAiXGZCazZcLTJcZlIiIDQKKy5JWCBJdGVtICJrNi0yIgorLlBEIDAKKy5JUCAiXGZCazZcLTNcZlIiIDQKKy5JWCBJdGVtICJrNi0zIgorLlBECitJbXByb3ZlZCB2ZXJzaW9ucyBvZiBccy0xQU1EXHMwIEs2IFxzLTFDUFVcczAgd2l0aCBccy0xTU1YXHMwIGFuZCAzRE5vdyEgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQmF0aGxvblxmUiIgNAorLklYIEl0ZW0gImF0aGxvbiIKKy5QRCAwCisuSVAgIlxmQmF0aGxvbi10YmlyZFxmUiIgNAorLklYIEl0ZW0gImF0aGxvbi10YmlyZCIKKy5QRAorXCZccy0xQU1EXHMwIEF0aGxvbiBccy0xQ1BVXHMwIHdpdGggXHMtMU1NWFxzMCwgM2ROT1chLCBlbmhhbmNlZCAzRE5vdyEgYW5kIFxzLTFTU0VcczAgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb25zCitzdXBwb3J0LgorLklQICJcZkJhdGhsb25cLTRcZlIiIDQKKy5JWCBJdGVtICJhdGhsb24tNCIKKy5QRCAwCisuSVAgIlxmQmF0aGxvbi14cFxmUiIgNAorLklYIEl0ZW0gImF0aGxvbi14cCIKKy5JUCAiXGZCYXRobG9uLW1wXGZSIiA0CisuSVggSXRlbSAiYXRobG9uLW1wIgorLlBECitJbXByb3ZlZCBccy0xQU1EXHMwIEF0aGxvbiBccy0xQ1BVXHMwIHdpdGggXHMtMU1NWFxzMCwgM0ROb3chLCBlbmhhbmNlZCAzRE5vdyEgYW5kIGZ1bGwgXHMtMVNTRVxzMAoraW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQms4XGZSIiA0CisuSVggSXRlbSAiazgiCisuUEQgMAorLklQICJcZkJvcHRlcm9uXGZSIiA0CisuSVggSXRlbSAib3B0ZXJvbiIKKy5JUCAiXGZCYXRobG9uNjRcZlIiIDQKKy5JWCBJdGVtICJhdGhsb242NCIKKy5JUCAiXGZCYXRobG9uLWZ4XGZSIiA0CisuSVggSXRlbSAiYXRobG9uLWZ4IgorLlBECitQcm9jZXNzb3JzIGJhc2VkIG9uIHRoZSBccy0xQU1EXHMwIEs4IGNvcmUgd2l0aCB4ODZcLTY0IGluc3RydWN0aW9uIHNldCBzdXBwb3J0LAoraW5jbHVkaW5nIHRoZSBccy0xQU1EXHMwIE9wdGVyb24sIEF0aGxvbiA2NCwgYW5kIEF0aGxvbiA2NCBccy0xRlhcczAgcHJvY2Vzc29ycy4KKyhUaGlzIHN1cGVyc2V0cyBccy0xTU1YXHMwLCBccy0xU1NFXHMwLCBccy0xU1NFMlxzMCwgM0ROb3chLCBlbmhhbmNlZCAzRE5vdyEgYW5kIDY0XC1iaXQKK2luc3RydWN0aW9uIHNldCBleHRlbnNpb25zLikKKy5JUCAiXGZCazhcLXNzZTNcZlIiIDQKKy5JWCBJdGVtICJrOC1zc2UzIgorLlBEIDAKKy5JUCAiXGZCb3B0ZXJvblwtc3NlM1xmUiIgNAorLklYIEl0ZW0gIm9wdGVyb24tc3NlMyIKKy5JUCAiXGZCYXRobG9uNjRcLXNzZTNcZlIiIDQKKy5JWCBJdGVtICJhdGhsb242NC1zc2UzIgorLlBECitJbXByb3ZlZCB2ZXJzaW9ucyBvZiBccy0xQU1EXHMwIEs4IGNvcmVzIHdpdGggXHMtMVNTRTNcczAgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQmFtZGZhbTEwXGZSIiA0CisuSVggSXRlbSAiYW1kZmFtMTAiCisuUEQgMAorLklQICJcZkJiYXJjZWxvbmFcZlIiIDQKKy5JWCBJdGVtICJiYXJjZWxvbmEiCisuUEQKK0NQVXMgYmFzZWQgb24gXHMtMUFNRFxzMCBGYW1pbHkgMTBoIGNvcmVzIHdpdGggeDg2XC02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIChUaGlzCitzdXBlcnNldHMgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwgXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NFNEFcczAsIDNETm93ISwgZW5oYW5jZWQgM0ROb3chLCBccy0xQUJNXHMwIGFuZCA2NFwtYml0CitpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4pCisuSVAgIlxmQmJkdmVyMVxmUiIgNAorLklYIEl0ZW0gImJkdmVyMSIKK0NQVXMgYmFzZWQgb24gXHMtMUFNRFxzMCBGYW1pbHkgMTVoIGNvcmVzIHdpdGggeDg2XC02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIChUaGlzCitzdXBlcnNldHMgXHMtMUZNQTRcczAsIFxzLTFBVlhcczAsIFxzLTFYT1BcczAsIFxzLTFMV1BcczAsIFxzLTFBRVNcczAsIFxzLTFQQ0xfTVVMXHMwLCBccy0xQ1gxNlxzMCwgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwgXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NFNEFcczAsCitcJlxzLTFTU1NFM1xzMCwgXHMtMVNTRTRcczAuMSwgXHMtMVNTRTRcczAuMiwgXHMtMUFCTVxzMCBhbmQgNjRcLWJpdCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4pCisuSVAgIlxmQmJkdmVyMlxmUiIgNAorLklYIEl0ZW0gImJkdmVyMiIKK1wmXHMtMUFNRFxzMCBGYW1pbHkgMTVoIGNvcmUgYmFzZWQgQ1BVcyB3aXRoIHg4NlwtNjQgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuICAoVGhpcworc3VwZXJzZXRzIFxzLTFCTUlcczAsIFxzLTFUQk1cczAsIEYxNkMsIFxzLTFGTUFcczAsIFxzLTFBVlhcczAsIFxzLTFYT1BcczAsIFxzLTFMV1BcczAsIFxzLTFBRVNcczAsIFxzLTFQQ0xfTVVMXHMwLCBccy0xQ1gxNlxzMCwgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwKK1wmXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NFNEFcczAsIFxzLTFTU1NFM1xzMCwgXHMtMVNTRTRcczAuMSwgXHMtMVNTRTRcczAuMiwgXHMtMUFCTVxzMCBhbmQgNjRcLWJpdCBpbnN0cnVjdGlvbiBzZXQgCitleHRlbnNpb25zLikKKy5JUCAiXGZCYmR2ZXIzXGZSIiA0CisuSVggSXRlbSAiYmR2ZXIzIgorXCZccy0xQU1EXHMwIEZhbWlseSAxNWggY29yZSBiYXNlZCBDUFVzIHdpdGggeDg2XC02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIChUaGlzCitzdXBlcnNldHMgXHMtMUJNSVxzMCwgXHMtMVRCTVxzMCwgRjE2QywgXHMtMUZNQVxzMCwgXHMtMUFWWFxzMCwgXHMtMVhPUFxzMCwgXHMtMUxXUFxzMCwgXHMtMUFFU1xzMCwgXHMtMVBDTF9NVUxcczAsIFxzLTFDWDE2XHMwLCBccy0xTU1YXHMwLCBccy0xU1NFXHMwLAorXCZccy0xU1NFMlxzMCwgXHMtMVNTRTNcczAsIFxzLTFTU0U0QVxzMCwgXHMtMVNTU0UzXHMwLCBccy0xU1NFNFxzMC4xLCBccy0xU1NFNFxzMC4yLCBccy0xQUJNXHMwIGFuZCA2NFwtYml0IGluc3RydWN0aW9uIHNldCAKK2V4dGVuc2lvbnMuCisuSVAgIlxmQmJ0dmVyMVxmUiIgNAorLklYIEl0ZW0gImJ0dmVyMSIKK0NQVXMgYmFzZWQgb24gXHMtMUFNRFxzMCBGYW1pbHkgMTRoIGNvcmVzIHdpdGggeDg2XC02NCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIChUaGlzCitzdXBlcnNldHMgXHMtMU1NWFxzMCwgXHMtMVNTRVxzMCwgXHMtMVNTRTJcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NTRTNcczAsIFxzLTFTU0U0QVxzMCwgXHMtMUNYMTZcczAsIFxzLTFBQk1cczAgYW5kIDY0XC1iaXQKK2luc3RydWN0aW9uIHNldCBleHRlbnNpb25zLikKKy5JUCAiXGZCYnR2ZXIyXGZSIiA0CisuSVggSXRlbSAiYnR2ZXIyIgorQ1BVcyBiYXNlZCBvbiBccy0xQU1EXHMwIEZhbWlseSAxNmggY29yZXMgd2l0aCB4ODZcLTY0IGluc3RydWN0aW9uIHNldCBzdXBwb3J0LiBUaGlzCitpbmNsdWRlcyBccy0xTU9WQkVcczAsIEYxNkMsIFxzLTFCTUlcczAsIFxzLTFBVlhcczAsIFxzLTFQQ0xfTVVMXHMwLCBccy0xQUVTXHMwLCBccy0xU1NFNFxzMC4yLCBccy0xU1NFNFxzMC4xLCBccy0xQ1gxNlxzMCwgXHMtMUFCTVxzMCwKK1wmXHMtMVNTRTRBXHMwLCBccy0xU1NTRTNcczAsIFxzLTFTU0UzXHMwLCBccy0xU1NFMlxzMCwgXHMtMVNTRVxzMCwgXHMtMU1NWFxzMCBhbmQgNjRcLWJpdCBpbnN0cnVjdGlvbiBzZXQgZXh0ZW5zaW9ucy4KKy5JUCAiXGZCd2luY2hpcFwtYzZcZlIiIDQKKy5JWCBJdGVtICJ3aW5jaGlwLWM2IgorXCZccy0xSURUXHMwIFdpbkNoaXAgQzYgXHMtMUNQVVxzMCwgZGVhbHQgaW4gc2FtZSB3YXkgYXMgaTQ4NiB3aXRoIGFkZGl0aW9uYWwgXHMtMU1NWFxzMCBpbnN0cnVjdGlvbgorc2V0IHN1cHBvcnQuCisuSVAgIlxmQndpbmNoaXAyXGZSIiA0CisuSVggSXRlbSAid2luY2hpcDIiCitcJlxzLTFJRFRcczAgV2luQ2hpcCAyIFxzLTFDUFVcczAsIGRlYWx0IGluIHNhbWUgd2F5IGFzIGk0ODYgd2l0aCBhZGRpdGlvbmFsIFxzLTFNTVhcczAgYW5kIDNETm93IQoraW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuSVAgIlxmQmMzXGZSIiA0CisuSVggSXRlbSAiYzMiCitcJlxzLTFWSUFcczAgQzMgXHMtMUNQVVxzMCB3aXRoIFxzLTFNTVhcczAgYW5kIDNETm93ISBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4gIChObyBzY2hlZHVsaW5nIGlzCitpbXBsZW1lbnRlZCBmb3IgdGhpcyBjaGlwLikKKy5JUCAiXGZCYzNcLTJcZlIiIDQKKy5JWCBJdGVtICJjMy0yIgorXCZccy0xVklBXHMwIEMzXC0yIChOZWhlbWlhaC9DNVhMKSBccy0xQ1BVXHMwIHdpdGggXHMtMU1NWFxzMCBhbmQgXHMtMVNTRVxzMCBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKyhObyBzY2hlZHVsaW5nIGlzCitpbXBsZW1lbnRlZCBmb3IgdGhpcyBjaGlwLikKKy5JUCAiXGZCZ2VvZGVcZlIiIDQKKy5JWCBJdGVtICJnZW9kZSIKK1wmXHMtMUFNRFxzMCBHZW9kZSBlbWJlZGRlZCBwcm9jZXNzb3Igd2l0aCBccy0xTU1YXHMwIGFuZCAzRE5vdyEgaW5zdHJ1Y3Rpb24gc2V0IHN1cHBvcnQuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tdHVuZT1cZlJcZkljcHUtdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tdHVuZT1jcHUtdHlwZSIKK1R1bmUgdG8gXGZJY3B1LXR5cGVcZlIgZXZlcnl0aGluZyBhcHBsaWNhYmxlIGFib3V0IHRoZSBnZW5lcmF0ZWQgY29kZSwgZXhjZXB0Citmb3IgdGhlIFxzLTFBQklcczAgYW5kIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGluc3RydWN0aW9ucy4gIAorV2hpbGUgcGlja2luZyBhIHNwZWNpZmljIFxmSWNwdS10eXBlXGZSIHNjaGVkdWxlcyB0aGluZ3MgYXBwcm9wcmlhdGVseQorZm9yIHRoYXQgcGFydGljdWxhciBjaGlwLCB0aGUgY29tcGlsZXIgZG9lcyBub3QgZ2VuZXJhdGUgYW55IGNvZGUgdGhhdAorY2Fubm90IHJ1biBvbiB0aGUgZGVmYXVsdCBtYWNoaW5lIHR5cGUgdW5sZXNzIHlvdSB1c2UgYQorXCZcZkJcLW1hcmNoPVxmUlxmSWNwdS10eXBlXGZSIG9wdGlvbi4KK0ZvciBleGFtcGxlLCBpZiBccy0xR0NDXHMwIGlzIGNvbmZpZ3VyZWQgZm9yIGk2ODZcLXBjXC1saW51eFwtZ251Cit0aGVuIFxmQlwtbXR1bmU9cGVudGl1bTRcZlIgZ2VuZXJhdGVzIGNvZGUgdGhhdCBpcyB0dW5lZCBmb3IgUGVudGl1bSA0CitidXQgc3RpbGwgcnVucyBvbiBpNjg2IG1hY2hpbmVzLgorLlNwCitUaGUgY2hvaWNlcyBmb3IgXGZJY3B1LXR5cGVcZlIgYXJlIHRoZSBzYW1lIGFzIGZvciBcZkJcLW1hcmNoXGZSLgorSW4gYWRkaXRpb24sIFxmQlwtbXR1bmVcZlIgc3VwcG9ydHMgYW4gZXh0cmEgY2hvaWNlIGZvciBcZkljcHUtdHlwZVxmUjoKKy5SUyA0CisuSVAgIlxmQmdlbmVyaWNcZlIiIDQKKy5JWCBJdGVtICJnZW5lcmljIgorUHJvZHVjZSBjb2RlIG9wdGltaXplZCBmb3IgdGhlIG1vc3QgY29tbW9uIFxzLTFJQTMyL0FNRDY0L0VNNjRUXHMwIHByb2Nlc3NvcnMuCitJZiB5b3Uga25vdyB0aGUgXHMtMUNQVVxzMCBvbiB3aGljaCB5b3VyIGNvZGUgd2lsbCBydW4sIHRoZW4geW91IHNob3VsZCB1c2UKK3RoZSBjb3JyZXNwb25kaW5nIFxmQlwtbXR1bmVcZlIgb3IgXGZCXC1tYXJjaFxmUiBvcHRpb24gaW5zdGVhZCBvZgorXCZcZkJcLW10dW5lPWdlbmVyaWNcZlIuICBCdXQsIGlmIHlvdSBkbyBub3Qga25vdyBleGFjdGx5IHdoYXQgXHMtMUNQVVxzMCB1c2Vycworb2YgeW91ciBhcHBsaWNhdGlvbiB3aWxsIGhhdmUsIHRoZW4geW91IHNob3VsZCB1c2UgdGhpcyBvcHRpb24uCisuU3AKK0FzIG5ldyBwcm9jZXNzb3JzIGFyZSBkZXBsb3llZCBpbiB0aGUgbWFya2V0cGxhY2UsIHRoZSBiZWhhdmlvciBvZiB0aGlzCitvcHRpb24gd2lsbCBjaGFuZ2UuICBUaGVyZWZvcmUsIGlmIHlvdSB1cGdyYWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZgorXCZccy0xR0NDXHMwLCBjb2RlIGdlbmVyYXRpb24gY29udHJvbGxlZCBieSB0aGlzIG9wdGlvbiB3aWxsIGNoYW5nZSB0byByZWZsZWN0Cit0aGUgcHJvY2Vzc29ycwordGhhdCBhcmUgbW9zdCBjb21tb24gYXQgdGhlIHRpbWUgdGhhdCB2ZXJzaW9uIG9mIFxzLTFHQ0NcczAgaXMgcmVsZWFzZWQuCisuU3AKK1RoZXJlIGlzIG5vIFxmQlwtbWFyY2g9Z2VuZXJpY1xmUiBvcHRpb24gYmVjYXVzZSBcZkJcLW1hcmNoXGZSCitpbmRpY2F0ZXMgdGhlIGluc3RydWN0aW9uIHNldCB0aGUgY29tcGlsZXIgY2FuIHVzZSwgYW5kIHRoZXJlIGlzIG5vCitnZW5lcmljIGluc3RydWN0aW9uIHNldCBhcHBsaWNhYmxlIHRvIGFsbCBwcm9jZXNzb3JzLiAgSW4gY29udHJhc3QsCitcJlxmQlwtbXR1bmVcZlIgaW5kaWNhdGVzIHRoZSBwcm9jZXNzb3IgKG9yLCBpbiB0aGlzIGNhc2UsIGNvbGxlY3Rpb24gb2YKK3Byb2Nlc3NvcnMpIGZvciB3aGljaCB0aGUgY29kZSBpcyBvcHRpbWl6ZWQuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tY3B1PVxmUlxmSWNwdS10eXBlXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9Y3B1LXR5cGUiCitBIGRlcHJlY2F0ZWQgc3lub255bSBmb3IgXGZCXC1tdHVuZVxmUi4KKy5JUCAiXGZCXC1tZnBtYXRoPVxmUlxmSXVuaXRcZlIiIDQKKy5JWCBJdGVtICItbWZwbWF0aD11bml0IgorR2VuZXJhdGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBmb3Igc2VsZWN0ZWQgdW5pdCBcZkl1bml0XGZSLiAgVGhlIGNob2ljZXMKK2ZvciBcZkl1bml0XGZSIGFyZToKKy5SUyA0CisuSVAgIlxmQjM4N1xmUiIgNAorLklYIEl0ZW0gIjM4NyIKK1VzZSB0aGUgc3RhbmRhcmQgMzg3IGZsb2F0aW5nLXBvaW50IGNvcHJvY2Vzc29yIHByZXNlbnQgb24gdGhlIG1ham9yaXR5IG9mIGNoaXBzIGFuZAorZW11bGF0ZWQgb3RoZXJ3aXNlLiAgQ29kZSBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uIHJ1bnMgYWxtb3N0IGV2ZXJ5d2hlcmUuCitUaGUgdGVtcG9yYXJ5IHJlc3VsdHMgYXJlIGNvbXB1dGVkIGluIDgwXC1iaXQgcHJlY2lzaW9uIGluc3RlYWQgb2YgdGhlIHByZWNpc2lvbgorc3BlY2lmaWVkIGJ5IHRoZSB0eXBlLCByZXN1bHRpbmcgaW4gc2xpZ2h0bHkgZGlmZmVyZW50IHJlc3VsdHMgY29tcGFyZWQgdG8gbW9zdAorb2Ygb3RoZXIgY2hpcHMuICBTZWUgXGZCXC1mZmxvYXRcLXN0b3JlXGZSIGZvciBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uLgorLlNwCitUaGlzIGlzIHRoZSBkZWZhdWx0IGNob2ljZSBmb3IgaTM4NiBjb21waWxlci4KKy5JUCAiXGZCc3NlXGZSIiA0CisuSVggSXRlbSAic3NlIgorVXNlIHNjYWxhciBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMgcHJlc2VudCBpbiB0aGUgXHMtMVNTRVxzMCBpbnN0cnVjdGlvbiBzZXQuCitUaGlzIGluc3RydWN0aW9uIHNldCBpcyBzdXBwb3J0ZWQgYnkgUGVudGl1bSBccy0xSUlJXHMwIGFuZCBuZXdlciBjaGlwcywKK2FuZCBpbiB0aGUgXHMtMUFNRFxzMCBsaW5lCitieSBBdGhsb25cLTQsIEF0aGxvbiBccy0xWFBcczAgYW5kIEF0aGxvbiBccy0xTVBcczAgY2hpcHMuICBUaGUgZWFybGllciB2ZXJzaW9uIG9mIHRoZSBccy0xU1NFXHMwCitpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydHMgb25seSBzaW5nbGUtcHJlY2lzaW9uIGFyaXRobWV0aWMsIHRodXMgdGhlIGRvdWJsZSBhbmQKK2V4dGVuZGVkLXByZWNpc2lvbiBhcml0aG1ldGljIGFyZSBzdGlsbCBkb25lIHVzaW5nIDM4Ny4gIEEgbGF0ZXIgdmVyc2lvbiwgcHJlc2VudAorb25seSBpbiBQZW50aXVtIDQgYW5kIFxzLTFBTURcczAgeDg2XC02NCBjaGlwcywgc3VwcG9ydHMgZG91YmxlLXByZWNpc2lvbgorYXJpdGhtZXRpYyB0b28uCisuU3AKK0ZvciB0aGUgaTM4NiBjb21waWxlciwgeW91IG11c3QgdXNlIFxmQlwtbWFyY2g9XGZSXGZJY3B1LXR5cGVcZlIsIFxmQlwtbXNzZVxmUgorb3IgXGZCXC1tc3NlMlxmUiBzd2l0Y2hlcyB0byBlbmFibGUgXHMtMVNTRVxzMCBleHRlbnNpb25zIGFuZCBtYWtlIHRoaXMgb3B0aW9uCitlZmZlY3RpdmUuICBGb3IgdGhlIHg4NlwtNjQgY29tcGlsZXIsIHRoZXNlIGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy5TcAorVGhlIHJlc3VsdGluZyBjb2RlIHNob3VsZCBiZSBjb25zaWRlcmFibHkgZmFzdGVyIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcyBhbmQgYXZvaWQKK3RoZSBudW1lcmljYWwgaW5zdGFiaWxpdHkgcHJvYmxlbXMgb2YgMzg3IGNvZGUsIGJ1dCBtYXkgYnJlYWsgc29tZSBleGlzdGluZworY29kZSB0aGF0IGV4cGVjdHMgdGVtcG9yYXJpZXMgdG8gYmUgODAgYml0cy4KKy5TcAorVGhpcyBpcyB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yIHRoZSB4ODZcLTY0IGNvbXBpbGVyLgorLklQICJcZkJzc2UsMzg3XGZSIiA0CisuSVggSXRlbSAic3NlLDM4NyIKKy5QRCAwCisuSVAgIlxmQnNzZSszODdcZlIiIDQKKy5JWCBJdGVtICJzc2UrMzg3IgorLklQICJcZkJib3RoXGZSIiA0CisuSVggSXRlbSAiYm90aCIKKy5QRAorQXR0ZW1wdCB0byB1dGlsaXplIGJvdGggaW5zdHJ1Y3Rpb24gc2V0cyBhdCBvbmNlLiAgVGhpcyBlZmZlY3RpdmVseSBkb3VibGVzIHRoZQorYW1vdW50IG9mIGF2YWlsYWJsZSByZWdpc3RlcnMsIGFuZCBvbiBjaGlwcyB3aXRoIHNlcGFyYXRlIGV4ZWN1dGlvbiB1bml0cyBmb3IKKzM4NyBhbmQgXHMtMVNTRVxzMCB0aGUgZXhlY3V0aW9uIHJlc291cmNlcyB0b28uICBVc2UgdGhpcyBvcHRpb24gd2l0aCBjYXJlLCBhcyBpdCBpcworc3RpbGwgZXhwZXJpbWVudGFsLCBiZWNhdXNlIHRoZSBccy0xR0NDXHMwIHJlZ2lzdGVyIGFsbG9jYXRvciBkb2VzIG5vdCBtb2RlbCBzZXBhcmF0ZQorZnVuY3Rpb25hbCB1bml0cyB3ZWxsLCByZXN1bHRpbmcgaW4gdW5zdGFibGUgcGVyZm9ybWFuY2UuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tYXNtPVxmUlxmSWRpYWxlY3RcZlIiIDQKKy5JWCBJdGVtICItbWFzbT1kaWFsZWN0IgorT3V0cHV0IGFzc2VtYmx5IGluc3RydWN0aW9ucyB1c2luZyBzZWxlY3RlZCBcZklkaWFsZWN0XGZSLiAgU3VwcG9ydGVkCitjaG9pY2VzIGFyZSBcZkJpbnRlbFxmUiBvciBcZkJhdHRcZlIgKHRoZSBkZWZhdWx0KS4gIERhcndpbiBkb2VzCitub3Qgc3VwcG9ydCBcZkJpbnRlbFxmUi4KKy5JUCAiXGZCXC1taWVlZVwtZnBcZlIiIDQKKy5JWCBJdGVtICItbWllZWUtZnAiCisuUEQgMAorLklQICJcZkJcLW1ub1wtaWVlZVwtZnBcZlIiIDQKKy5JWCBJdGVtICItbW5vLWllZWUtZnAiCisuUEQKK0NvbnRyb2wgd2hldGhlciBvciBub3QgdGhlIGNvbXBpbGVyIHVzZXMgXHMtMUlFRUVcczAgZmxvYXRpbmctcG9pbnQKK2NvbXBhcmlzb25zLiAgVGhlc2UgY29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgcmVzdWx0IG9mIGEKK2NvbXBhcmlzb24gaXMgdW5vcmRlcmVkLgorLklQICJcZkJcLW1zb2Z0XC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1mbG9hdCIKK0dlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIGxpYnJhcnkgY2FsbHMgZm9yIGZsb2F0aW5nIHBvaW50LgorLlNwCitcJlxmQldhcm5pbmc6XGZSIHRoZSByZXF1aXNpdGUgbGlicmFyaWVzIGFyZSBub3QgcGFydCBvZiBccy0xR0NDXHMwLgorTm9ybWFsbHkgdGhlIGZhY2lsaXRpZXMgb2YgdGhlIG1hY2hpbmUncyB1c3VhbCBDIGNvbXBpbGVyIGFyZSB1c2VkLCBidXQKK3RoaXMgY2FuJ3QgYmUgZG9uZSBkaXJlY3RseSBpbiBjcm9zcy1jb21waWxhdGlvbi4gIFlvdSBtdXN0IG1ha2UgeW91cgorb3duIGFycmFuZ2VtZW50cyB0byBwcm92aWRlIHN1aXRhYmxlIGxpYnJhcnkgZnVuY3Rpb25zIGZvcgorY3Jvc3MtY29tcGlsYXRpb24uCisuU3AKK09uIG1hY2hpbmVzIHdoZXJlIGEgZnVuY3Rpb24gcmV0dXJucyBmbG9hdGluZy1wb2ludCByZXN1bHRzIGluIHRoZSA4MDM4NworcmVnaXN0ZXIgc3RhY2ssIHNvbWUgZmxvYXRpbmctcG9pbnQgb3Bjb2RlcyBtYXkgYmUgZW1pdHRlZCBldmVuIGlmCitcJlxmQlwtbXNvZnRcLWZsb2F0XGZSIGlzIHVzZWQuCisuSVAgIlxmQlwtbW5vXC1mcFwtcmV0XC1pblwtMzg3XGZSIiA0CisuSVggSXRlbSAiLW1uby1mcC1yZXQtaW4tMzg3IgorRG8gbm90IHVzZSB0aGUgXHMtMUZQVVxzMCByZWdpc3RlcnMgZm9yIHJldHVybiB2YWx1ZXMgb2YgZnVuY3Rpb25zLgorLlNwCitUaGUgdXN1YWwgY2FsbGluZyBjb252ZW50aW9uIGhhcyBmdW5jdGlvbnMgcmV0dXJuIHZhbHVlcyBvZiB0eXBlcworXCZcZihDV1wqKENgZmxvYXRcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSIGluIGFuIFxzLTFGUFVcczAgcmVnaXN0ZXIsIGV2ZW4gaWYgdGhlcmUKK2lzIG5vIFxzLTFGUFVcczAuICBUaGUgaWRlYSBpcyB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHNob3VsZCBlbXVsYXRlCithbiBccy0xRlBVXHMwLgorLlNwCitUaGUgb3B0aW9uIFxmQlwtbW5vXC1mcFwtcmV0XC1pblwtMzg3XGZSIGNhdXNlcyBzdWNoIHZhbHVlcyB0byBiZSByZXR1cm5lZAoraW4gb3JkaW5hcnkgXHMtMUNQVVxzMCByZWdpc3RlcnMgaW5zdGVhZC4KKy5JUCAiXGZCXC1tbm9cLWZhbmN5XC1tYXRoXC0zODdcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZhbmN5LW1hdGgtMzg3IgorU29tZSAzODcgZW11bGF0b3JzIGRvIG5vdCBzdXBwb3J0IHRoZSBcZihDV1wqKENgc2luXCooQydcZlIsIFxmKENXXCooQ2Bjb3NcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYHNxcnRcKihDJ1xmUiBpbnN0cnVjdGlvbnMgZm9yIHRoZSAzODcuICBTcGVjaWZ5IHRoaXMgb3B0aW9uIHRvIGF2b2lkCitnZW5lcmF0aW5nIHRob3NlIGluc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IG9uIEZyZWVCU0QsCitPcGVuQlNEIGFuZCBOZXRCU0QuICBUaGlzIG9wdGlvbiBpcyBvdmVycmlkZGVuIHdoZW4gXGZCXC1tYXJjaFxmUgoraW5kaWNhdGVzIHRoYXQgdGhlIHRhcmdldCBccy0xQ1BVXHMwIGFsd2F5cyBoYXMgYW4gXHMtMUZQVVxzMCBhbmQgc28gdGhlCitpbnN0cnVjdGlvbiBkb2VzIG5vdCBuZWVkIGVtdWxhdGlvbi4gIFRoZXNlCitpbnN0cnVjdGlvbnMgYXJlIG5vdCBnZW5lcmF0ZWQgdW5sZXNzIHlvdSBhbHNvIHVzZSB0aGUKK1wmXGZCXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSIHN3aXRjaC4KKy5JUCAiXGZCXC1tYWxpZ25cLWRvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tYWxpZ24tZG91YmxlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWFsaWduXC1kb3VibGVcZlIiIDQKKy5JWCBJdGVtICItbW5vLWFsaWduLWRvdWJsZSIKKy5QRAorQ29udHJvbCB3aGV0aGVyIFxzLTFHQ0NcczAgYWxpZ25zIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiwgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIsIGFuZAorXCZcZihDV1wqKENgbG9uZyBsb25nXCooQydcZlIgdmFyaWFibGVzIG9uIGEgdHdvLXdvcmQgYm91bmRhcnkgb3IgYSBvbmUtd29yZAorYm91bmRhcnkuICBBbGlnbmluZyBcZihDV1wqKENgZG91YmxlXCooQydcZlIgdmFyaWFibGVzIG9uIGEgdHdvLXdvcmQgYm91bmRhcnkKK3Byb2R1Y2VzIGNvZGUgdGhhdCBydW5zIHNvbWV3aGF0IGZhc3RlciBvbiBhIFBlbnRpdW0gYXQgdGhlCitleHBlbnNlIG9mIG1vcmUgbWVtb3J5LgorLlNwCitPbiB4ODZcLTY0LCBcZkJcLW1hbGlnblwtZG91YmxlXGZSIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiBpZiB5b3UgdXNlIHRoZSBcZkJcLW1hbGlnblwtZG91YmxlXGZSIHN3aXRjaCwKK3N0cnVjdHVyZXMgY29udGFpbmluZyB0aGUgYWJvdmUgdHlwZXMgYXJlIGFsaWduZWQgZGlmZmVyZW50bHkgdGhhbgordGhlIHB1Ymxpc2hlZCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlIHNwZWNpZmljYXRpb25zIGZvciB0aGUgMzg2CithbmQgYXJlIG5vdCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHN0cnVjdHVyZXMgaW4gY29kZSBjb21waWxlZAord2l0aG91dCB0aGF0IHN3aXRjaC4KKy5JUCAiXGZCXC1tOTZiaXRcLWxvbmdcLWRvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tOTZiaXQtbG9uZy1kb3VibGUiCisuUEQgMAorLklQICJcZkJcLW0xMjhiaXRcLWxvbmdcLWRvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tMTI4Yml0LWxvbmctZG91YmxlIgorLlBECitUaGVzZSBzd2l0Y2hlcyBjb250cm9sIHRoZSBzaXplIG9mIFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSIHR5cGUuICBUaGUgaTM4NgorYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZSBzcGVjaWZpZXMgdGhlIHNpemUgdG8gYmUgOTYgYml0cywKK3NvIFxmQlwtbTk2Yml0XC1sb25nXC1kb3VibGVcZlIgaXMgdGhlIGRlZmF1bHQgaW4gMzJcLWJpdCBtb2RlLgorLlNwCitNb2Rlcm4gYXJjaGl0ZWN0dXJlcyAoUGVudGl1bSBhbmQgbmV3ZXIpIHByZWZlciBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUgordG8gYmUgYWxpZ25lZCB0byBhbiA4XC0gb3IgMTZcLWJ5dGUgYm91bmRhcnkuICBJbiBhcnJheXMgb3Igc3RydWN0dXJlcworY29uZm9ybWluZyB0byB0aGUgXHMtMUFCSVxzMCwgdGhpcyBpcyBub3QgcG9zc2libGUuICBTbyBzcGVjaWZ5aW5nCitcJlxmQlwtbTEyOGJpdFwtbG9uZ1wtZG91YmxlXGZSIGFsaWducyBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUgordG8gYSAxNlwtYnl0ZSBib3VuZGFyeSBieSBwYWRkaW5nIHRoZSBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUiB3aXRoIGFuIGFkZGl0aW9uYWwKKzMyXC1iaXQgemVyby4KKy5TcAorSW4gdGhlIHg4NlwtNjQgY29tcGlsZXIsIFxmQlwtbTEyOGJpdFwtbG9uZ1wtZG91YmxlXGZSIGlzIHRoZSBkZWZhdWx0IGNob2ljZSBhcworaXRzIFxzLTFBQklcczAgc3BlY2lmaWVzIHRoYXQgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgaXMgYWxpZ25lZCBvbiAxNlwtYnl0ZSBib3VuZGFyeS4KKy5TcAorTm90aWNlIHRoYXQgbmVpdGhlciBvZiB0aGVzZSBvcHRpb25zIGVuYWJsZSBhbnkgZXh0cmEgcHJlY2lzaW9uIG92ZXIgdGhlIHg4Nworc3RhbmRhcmQgb2YgODAgYml0cyBmb3IgYSBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUi4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiBpZiB5b3Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHlvdXIgdGFyZ2V0IFxzLTFBQklcczAsIHRoaXMKK2NoYW5nZXMgdGhlIHNpemUgb2YgCitzdHJ1Y3R1cmVzIGFuZCBhcnJheXMgY29udGFpbmluZyBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUiB2YXJpYWJsZXMsCithcyB3ZWxsIGFzIG1vZGlmeWluZyB0aGUgZnVuY3Rpb24gY2FsbGluZyBjb252ZW50aW9uIGZvciBmdW5jdGlvbnMgdGFraW5nCitcJlxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSLiAgSGVuY2UgdGhleSBhcmUgbm90IGJpbmFyeS1jb21wYXRpYmxlCit3aXRoIGNvZGUgY29tcGlsZWQgd2l0aG91dCB0aGF0IHN3aXRjaC4KKy5JUCAiXGZCXC1tbG9uZ1wtZG91YmxlXC02NFxmUiIgNAorLklYIEl0ZW0gIi1tbG9uZy1kb3VibGUtNjQiCisuUEQgMAorLklQICJcZkJcLW1sb25nXC1kb3VibGVcLTgwXGZSIiA0CisuSVggSXRlbSAiLW1sb25nLWRvdWJsZS04MCIKKy5QRAorVGhlc2Ugc3dpdGNoZXMgY29udHJvbCB0aGUgc2l6ZSBvZiBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUiB0eXBlLiBBIHNpemUKK29mIDY0IGJpdHMgbWFrZXMgdGhlIFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSIHR5cGUgZXF1aXZhbGVudCB0byB0aGUgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSCit0eXBlLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBCaW9uaWMgQyBsaWJyYXJ5LgorLlNwCitcJlxmQldhcm5pbmc6XGZSIGlmIHlvdSBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgeW91ciB0YXJnZXQgXHMtMUFCSVxzMCwgdGhpcworY2hhbmdlcyB0aGUgc2l6ZSBvZgorc3RydWN0dXJlcyBhbmQgYXJyYXlzIGNvbnRhaW5pbmcgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgdmFyaWFibGVzLAorYXMgd2VsbCBhcyBtb2RpZnlpbmcgdGhlIGZ1bmN0aW9uIGNhbGxpbmcgY29udmVudGlvbiBmb3IgZnVuY3Rpb25zIHRha2luZworXCZcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUi4gIEhlbmNlIHRoZXkgYXJlIG5vdCBiaW5hcnktY29tcGF0aWJsZQord2l0aCBjb2RlIGNvbXBpbGVkIHdpdGhvdXQgdGhhdCBzd2l0Y2guCisuSVAgIlxmQlwtbWxhcmdlXC1kYXRhXC10aHJlc2hvbGQ9XGZSXGZJdGhyZXNob2xkXGZSIiA0CisuSVggSXRlbSAiLW1sYXJnZS1kYXRhLXRocmVzaG9sZD10aHJlc2hvbGQiCitXaGVuIFxmQlwtbWNtb2RlbD1tZWRpdW1cZlIgaXMgc3BlY2lmaWVkLCBkYXRhIG9iamVjdHMgbGFyZ2VyIHRoYW4KK1wmXGZJdGhyZXNob2xkXGZSIGFyZSBwbGFjZWQgaW4gdGhlIGxhcmdlIGRhdGEgc2VjdGlvbi4gIFRoaXMgdmFsdWUgbXVzdCBiZSB0aGUKK3NhbWUgYWNyb3NzIGFsbCBvYmplY3RzIGxpbmtlZCBpbnRvIHRoZSBiaW5hcnksIGFuZCBkZWZhdWx0cyB0byA2NTUzNS4KKy5JUCAiXGZCXC1tcnRkXGZSIiA0CisuSVggSXRlbSAiLW1ydGQiCitVc2UgYSBkaWZmZXJlbnQgZnVuY3Rpb24tY2FsbGluZyBjb252ZW50aW9uLCBpbiB3aGljaCBmdW5jdGlvbnMgdGhhdAordGFrZSBhIGZpeGVkIG51bWJlciBvZiBhcmd1bWVudHMgcmV0dXJuIHdpdGggdGhlIFxmKENXXCooQ2ByZXQgXGYoQ0ludW1cZihDV1wqKEMnXGZSCitpbnN0cnVjdGlvbiwgd2hpY2ggcG9wcyB0aGVpciBhcmd1bWVudHMgd2hpbGUgcmV0dXJuaW5nLiAgVGhpcyBzYXZlcyBvbmUKK2luc3RydWN0aW9uIGluIHRoZSBjYWxsZXIgc2luY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBwb3AgdGhlIGFyZ3VtZW50cwordGhlcmUuCisuU3AKK1lvdSBjYW4gc3BlY2lmeSB0aGF0IGFuIGluZGl2aWR1YWwgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhpcyBjYWxsaW5nCitzZXF1ZW5jZSB3aXRoIHRoZSBmdW5jdGlvbiBhdHRyaWJ1dGUgXGZCc3RkY2FsbFxmUi4gIFlvdSBjYW4gYWxzbworb3ZlcnJpZGUgdGhlIFxmQlwtbXJ0ZFxmUiBvcHRpb24gYnkgdXNpbmcgdGhlIGZ1bmN0aW9uIGF0dHJpYnV0ZQorXCZcZkJjZGVjbFxmUi4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiB0aGlzIGNhbGxpbmcgY29udmVudGlvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgb25lCitub3JtYWxseSB1c2VkIG9uIFVuaXgsIHNvIHlvdSBjYW5ub3QgdXNlIGl0IGlmIHlvdSBuZWVkIHRvIGNhbGwKK2xpYnJhcmllcyBjb21waWxlZCB3aXRoIHRoZSBVbml4IGNvbXBpbGVyLgorLlNwCitBbHNvLCB5b3UgbXVzdCBwcm92aWRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFsbCBmdW5jdGlvbnMgdGhhdAordGFrZSB2YXJpYWJsZSBudW1iZXJzIG9mIGFyZ3VtZW50cyAoaW5jbHVkaW5nIFxmKENXXCooQ2BwcmludGZcKihDJ1xmUik7CitvdGhlcndpc2UgaW5jb3JyZWN0IGNvZGUgaXMgZ2VuZXJhdGVkIGZvciBjYWxscyB0byB0aG9zZQorZnVuY3Rpb25zLgorLlNwCitJbiBhZGRpdGlvbiwgc2VyaW91c2x5IGluY29ycmVjdCBjb2RlIHJlc3VsdHMgaWYgeW91IGNhbGwgYQorZnVuY3Rpb24gd2l0aCB0b28gbWFueSBhcmd1bWVudHMuICAoTm9ybWFsbHksIGV4dHJhIGFyZ3VtZW50cyBhcmUKK2hhcm1sZXNzbHkgaWdub3JlZC4pCisuSVAgIlxmQlwtbXJlZ3Bhcm09XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLW1yZWdwYXJtPW51bSIKK0NvbnRyb2wgaG93IG1hbnkgcmVnaXN0ZXJzIGFyZSB1c2VkIHRvIHBhc3MgaW50ZWdlciBhcmd1bWVudHMuICBCeQorZGVmYXVsdCwgbm8gcmVnaXN0ZXJzIGFyZSB1c2VkIHRvIHBhc3MgYXJndW1lbnRzLCBhbmQgYXQgbW9zdCAzCityZWdpc3RlcnMgY2FuIGJlIHVzZWQuICBZb3UgY2FuIGNvbnRyb2wgdGhpcyBiZWhhdmlvciBmb3IgYSBzcGVjaWZpYworZnVuY3Rpb24gYnkgdXNpbmcgdGhlIGZ1bmN0aW9uIGF0dHJpYnV0ZSBcZkJyZWdwYXJtXGZSLgorLlNwCitcJlxmQldhcm5pbmc6XGZSIGlmIHlvdSB1c2UgdGhpcyBzd2l0Y2gsIGFuZAorXCZcZkludW1cZlIgaXMgbm9uemVybywgdGhlbiB5b3UgbXVzdCBidWlsZCBhbGwgbW9kdWxlcyB3aXRoIHRoZSBzYW1lCit2YWx1ZSwgaW5jbHVkaW5nIGFueSBsaWJyYXJpZXMuICBUaGlzIGluY2x1ZGVzIHRoZSBzeXN0ZW0gbGlicmFyaWVzIGFuZAorc3RhcnR1cCBtb2R1bGVzLgorLklQICJcZkJcLW1zc2VyZWdwYXJtXGZSIiA0CisuSVggSXRlbSAiLW1zc2VyZWdwYXJtIgorVXNlIFxzLTFTU0VcczAgcmVnaXN0ZXIgcGFzc2luZyBjb252ZW50aW9ucyBmb3IgZmxvYXQgYW5kIGRvdWJsZSBhcmd1bWVudHMKK2FuZCByZXR1cm4gdmFsdWVzLiAgWW91IGNhbiBjb250cm9sIHRoaXMgYmVoYXZpb3IgZm9yIGEgc3BlY2lmaWMKK2Z1bmN0aW9uIGJ5IHVzaW5nIHRoZSBmdW5jdGlvbiBhdHRyaWJ1dGUgXGZCc3NlcmVncGFybVxmUi4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiBpZiB5b3UgdXNlIHRoaXMgc3dpdGNoIHRoZW4geW91IG11c3QgYnVpbGQgYWxsCittb2R1bGVzIHdpdGggdGhlIHNhbWUgdmFsdWUsIGluY2x1ZGluZyBhbnkgbGlicmFyaWVzLiAgVGhpcyBpbmNsdWRlcwordGhlIHN5c3RlbSBsaWJyYXJpZXMgYW5kIHN0YXJ0dXAgbW9kdWxlcy4KKy5JUCAiXGZCXC1tdmVjdDhcLXJldFwtaW5cLW1lbVxmUiIgNAorLklYIEl0ZW0gIi1tdmVjdDgtcmV0LWluLW1lbSIKK1JldHVybiA4XC1ieXRlIHZlY3RvcnMgaW4gbWVtb3J5IGluc3RlYWQgb2YgXHMtMU1NWFxzMCByZWdpc3RlcnMuICBUaGlzIGlzIHRoZQorZGVmYXVsdCBvbiBTb2xhcmlzQHRpZXt9OCBhbmQgOSBhbmQgVnhXb3JrcyB0byBtYXRjaCB0aGUgXHMtMUFCSVxzMCBvZiB0aGUgU3VuCitTdHVkaW8gY29tcGlsZXJzIHVudGlsIHZlcnNpb24gMTIuICBMYXRlciBjb21waWxlciB2ZXJzaW9ucyAoc3RhcnRpbmcKK3dpdGggU3R1ZGlvIDEyIFVwZGF0ZUB0aWV7fTEpIGZvbGxvdyB0aGUgXHMtMUFCSVxzMCB1c2VkIGJ5IG90aGVyIHg4NiB0YXJnZXRzLCB3aGljaAoraXMgdGhlIGRlZmF1bHQgb24gU29sYXJpc0B0aWV7fTEwIGFuZCBsYXRlci4gIFxmSU9ubHlcZlIgdXNlIHRoaXMgb3B0aW9uIGlmCit5b3UgbmVlZCB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nIGNvZGUgcHJvZHVjZWQgYnkgdGhvc2UKK3ByZXZpb3VzIGNvbXBpbGVyIHZlcnNpb25zIG9yIG9sZGVyIHZlcnNpb25zIG9mIFxzLTFHQ0NcczAuCisuSVAgIlxmQlwtbXBjMzJcZlIiIDQKKy5JWCBJdGVtICItbXBjMzIiCisuUEQgMAorLklQICJcZkJcLW1wYzY0XGZSIiA0CisuSVggSXRlbSAiLW1wYzY0IgorLklQICJcZkJcLW1wYzgwXGZSIiA0CisuSVggSXRlbSAiLW1wYzgwIgorLlBECitTZXQgODAzODcgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uIHRvIDMyLCA2NCBvciA4MCBiaXRzLiAgV2hlbiBcZkJcLW1wYzMyXGZSCitpcyBzcGVjaWZpZWQsIHRoZSBzaWduaWZpY2FuZHMgb2YgcmVzdWx0cyBvZiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZQorcm91bmRlZCB0byAyNCBiaXRzIChzaW5nbGUgcHJlY2lzaW9uKTsgXGZCXC1tcGM2NFxmUiByb3VuZHMgdGhlCitzaWduaWZpY2FuZHMgb2YgcmVzdWx0cyBvZiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIHRvIDUzIGJpdHMgKGRvdWJsZQorcHJlY2lzaW9uKSBhbmQgXGZCXC1tcGM4MFxmUiByb3VuZHMgdGhlIHNpZ25pZmljYW5kcyBvZiByZXN1bHRzIG9mCitmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIHRvIDY0IGJpdHMgKGV4dGVuZGVkIGRvdWJsZSBwcmVjaXNpb24pLCB3aGljaCBpcwordGhlIGRlZmF1bHQuICBXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQsIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgaW4gaGlnaGVyCitwcmVjaXNpb25zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtbWVyIHdpdGhvdXQgc2V0dGluZyB0aGUgXHMtMUZQVVxzMAorY29udHJvbCB3b3JkIGV4cGxpY2l0bHkuCisuU3AKK1NldHRpbmcgdGhlIHJvdW5kaW5nIG9mIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgdG8gbGVzcyB0aGFuIHRoZSBkZWZhdWx0Cis4MCBiaXRzIGNhbiBzcGVlZCBzb21lIHByb2dyYW1zIGJ5IDIlIG9yIG1vcmUuICBOb3RlIHRoYXQgc29tZSBtYXRoZW1hdGljYWwKK2xpYnJhcmllcyBhc3N1bWUgdGhhdCBleHRlbmRlZC1wcmVjaXNpb24gKDgwXC1iaXQpIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMKK2FyZSBlbmFibGVkIGJ5IGRlZmF1bHQ7IHJvdXRpbmVzIGluIHN1Y2ggbGlicmFyaWVzIGNvdWxkIHN1ZmZlciBzaWduaWZpY2FudAorbG9zcyBvZiBhY2N1cmFjeSwgdHlwaWNhbGx5IHRocm91Z2ggc28tY2FsbGVkIFwqKEwiY2F0YXN0cm9waGljIGNhbmNlbGxhdGlvblwqKFIiLAord2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcHJlY2lzaW9uIHRvIGxlc3MgdGhhbiBleHRlbmRlZCBwcmVjaXNpb24uCisuSVAgIlxmQlwtbXN0YWNrcmVhbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tc3RhY2tyZWFsaWduIgorUmVhbGlnbiB0aGUgc3RhY2sgYXQgZW50cnkuICBPbiB0aGUgSW50ZWwgeDg2LCB0aGUgXGZCXC1tc3RhY2tyZWFsaWduXGZSCitvcHRpb24gZ2VuZXJhdGVzIGFuIGFsdGVybmF0ZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgdGhhdCByZWFsaWducyB0aGUKK3J1bi10aW1lIHN0YWNrIGlmIG5lY2Vzc2FyeS4gIFRoaXMgc3VwcG9ydHMgbWl4aW5nIGxlZ2FjeSBjb2RlcyB0aGF0IGtlZXAKKzRcLWJ5dGUgc3RhY2sgYWxpZ25tZW50IHdpdGggbW9kZXJuIGNvZGVzIHRoYXQga2VlcCAxNlwtYnl0ZSBzdGFjayBhbGlnbm1lbnQgZm9yCitcJlxzLTFTU0VcczAgY29tcGF0aWJpbGl0eS4gIFNlZSBhbHNvIHRoZSBhdHRyaWJ1dGUgXGYoQ1dcKihDYGZvcmNlX2FsaWduX2FyZ19wb2ludGVyXCooQydcZlIsCithcHBsaWNhYmxlIHRvIGluZGl2aWR1YWwgZnVuY3Rpb25zLgorLklQICJcZkJcLW1wcmVmZXJyZWRcLXN0YWNrXC1ib3VuZGFyeT1cZlJcZkludW1cZlIiIDQKKy5JWCBJdGVtICItbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT1udW0iCitBdHRlbXB0IHRvIGtlZXAgdGhlIHN0YWNrIGJvdW5kYXJ5IGFsaWduZWQgdG8gYSAyIHJhaXNlZCB0byBcZkludW1cZlIKK2J5dGUgYm91bmRhcnkuICBJZiBcZkJcLW1wcmVmZXJyZWRcLXN0YWNrXC1ib3VuZGFyeVxmUiBpcyBub3Qgc3BlY2lmaWVkLAordGhlIGRlZmF1bHQgaXMgNCAoMTYgYnl0ZXMgb3IgMTI4IGJpdHMpLgorLlNwCitcJlxmQldhcm5pbmc6XGZSIFdoZW4gZ2VuZXJhdGluZyBjb2RlIGZvciB0aGUgeDg2XC02NCBhcmNoaXRlY3R1cmUgd2l0aAorXCZccy0xU1NFXHMwIGV4dGVuc2lvbnMgZGlzYWJsZWQsIFxmQlwtbXByZWZlcnJlZFwtc3RhY2tcLWJvdW5kYXJ5PTNcZlIgY2FuIGJlCit1c2VkIHRvIGtlZXAgdGhlIHN0YWNrIGJvdW5kYXJ5IGFsaWduZWQgdG8gOCBieXRlIGJvdW5kYXJ5LiAgU2luY2UKK3g4NlwtNjQgXHMtMUFCSVxzMCByZXF1aXJlIDE2IGJ5dGUgc3RhY2sgYWxpZ25tZW50LCB0aGlzIGlzIFxzLTFBQklcczAgaW5jb21wYXRpYmxlIGFuZAoraW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb250cm9sbGVkIGVudmlyb25tZW50IHdoZXJlIHN0YWNrIHNwYWNlIGlzCitpbXBvcnRhbnQgbGltaXRhdGlvbi4gIFRoaXMgb3B0aW9uIHdpbGwgbGVhZCB0byB3cm9uZyBjb2RlIHdoZW4gZnVuY3Rpb25zCitjb21waWxlZCB3aXRoIDE2IGJ5dGUgc3RhY2sgYWxpZ25tZW50IChzdWNoIGFzIGZ1bmN0aW9ucyBmcm9tIGEgc3RhbmRhcmQKK2xpYnJhcnkpIGFyZSBjYWxsZWQgd2l0aCBtaXNhbGlnbmVkIHN0YWNrLiAgSW4gdGhpcyBjYXNlLCBccy0xU1NFXHMwCitpbnN0cnVjdGlvbnMgbWF5IGxlYWQgdG8gbWlzYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHRyYXBzLiAgSW4gYWRkaXRpb24sCit2YXJpYWJsZSBhcmd1bWVudHMgd2lsbCBiZSBoYW5kbGVkIGluY29ycmVjdGx5IGZvciAxNiBieXRlIGFsaWduZWQKK29iamVjdHMgKGluY2x1ZGluZyB4ODcgbG9uZyBkb3VibGUgYW5kIF9cfF9pbnQxMjgpLCBsZWFkaW5nIHRvIHdyb25nCityZXN1bHRzLiAgWW91IG11c3QgYnVpbGQgYWxsIG1vZHVsZXMgd2l0aAorXCZcZkJcLW1wcmVmZXJyZWRcLXN0YWNrXC1ib3VuZGFyeT0zXGZSLCBpbmNsdWRpbmcgYW55IGxpYnJhcmllcy4gIFRoaXMKK2luY2x1ZGVzIHRoZSBzeXN0ZW0gbGlicmFyaWVzIGFuZCBzdGFydHVwIG1vZHVsZXMuCisuSVAgIlxmQlwtbWluY29taW5nXC1zdGFja1wtYm91bmRhcnk9XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLW1pbmNvbWluZy1zdGFjay1ib3VuZGFyeT1udW0iCitBc3N1bWUgdGhlIGluY29taW5nIHN0YWNrIGlzIGFsaWduZWQgdG8gYSAyIHJhaXNlZCB0byBcZkludW1cZlIgYnl0ZQorYm91bmRhcnkuICBJZiBcZkJcLW1pbmNvbWluZ1wtc3RhY2tcLWJvdW5kYXJ5XGZSIGlzIG5vdCBzcGVjaWZpZWQsCit0aGUgb25lIHNwZWNpZmllZCBieSBcZkJcLW1wcmVmZXJyZWRcLXN0YWNrXC1ib3VuZGFyeVxmUiBpcyB1c2VkLgorLlNwCitPbiBQZW50aXVtIGFuZCBQZW50aXVtIFBybywgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSIGFuZCBcZihDV1wqKENgbG9uZyBkb3VibGVcKihDJ1xmUiB2YWx1ZXMKK3Nob3VsZCBiZSBhbGlnbmVkIHRvIGFuIDhcLWJ5dGUgYm91bmRhcnkgKHNlZSBcZkJcLW1hbGlnblwtZG91YmxlXGZSKSBvcgorc3VmZmVyIHNpZ25pZmljYW50IHJ1biB0aW1lIHBlcmZvcm1hbmNlIHBlbmFsdGllcy4gIE9uIFBlbnRpdW0gXHMtMUlJSVxzMCwgdGhlCitTdHJlYW1pbmcgXHMtMVNJTURcczAgRXh0ZW5zaW9uIChccy0xU1NFXHMwKSBkYXRhIHR5cGUgXGYoQ1dcKihDYF9cfF9tMTI4XCooQydcZlIgbWF5IG5vdCB3b3JrCitwcm9wZXJseSBpZiBpdCBpcyBub3QgMTZcLWJ5dGUgYWxpZ25lZC4KKy5TcAorVG8gZW5zdXJlIHByb3BlciBhbGlnbm1lbnQgb2YgdGhpcyB2YWx1ZXMgb24gdGhlIHN0YWNrLCB0aGUgc3RhY2sgYm91bmRhcnkKK211c3QgYmUgYXMgYWxpZ25lZCBhcyB0aGF0IHJlcXVpcmVkIGJ5IGFueSB2YWx1ZSBzdG9yZWQgb24gdGhlIHN0YWNrLgorRnVydGhlciwgZXZlcnkgZnVuY3Rpb24gbXVzdCBiZSBnZW5lcmF0ZWQgc3VjaCB0aGF0IGl0IGtlZXBzIHRoZSBzdGFjaworYWxpZ25lZC4gIFRodXMgY2FsbGluZyBhIGZ1bmN0aW9uIGNvbXBpbGVkIHdpdGggYSBoaWdoZXIgcHJlZmVycmVkCitzdGFjayBib3VuZGFyeSBmcm9tIGEgZnVuY3Rpb24gY29tcGlsZWQgd2l0aCBhIGxvd2VyIHByZWZlcnJlZCBzdGFjaworYm91bmRhcnkgbW9zdCBsaWtlbHkgbWlzYWxpZ25zIHRoZSBzdGFjay4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQKK2xpYnJhcmllcyB0aGF0IHVzZSBjYWxsYmFja3MgYWx3YXlzIHVzZSB0aGUgZGVmYXVsdCBzZXR0aW5nLgorLlNwCitUaGlzIGV4dHJhIGFsaWdubWVudCBkb2VzIGNvbnN1bWUgZXh0cmEgc3RhY2sgc3BhY2UsIGFuZCBnZW5lcmFsbHkKK2luY3JlYXNlcyBjb2RlIHNpemUuICBDb2RlIHRoYXQgaXMgc2Vuc2l0aXZlIHRvIHN0YWNrIHNwYWNlIHVzYWdlLCBzdWNoCithcyBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbHMsIG1heSB3YW50IHRvIHJlZHVjZSB0aGUKK3ByZWZlcnJlZCBhbGlnbm1lbnQgdG8gXGZCXC1tcHJlZmVycmVkXC1zdGFja1wtYm91bmRhcnk9MlxmUi4KKy5JUCAiXGZCXC1tbW14XGZSIiA0CisuSVggSXRlbSAiLW1tbXgiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbW14XGZSIiA0CisuSVggSXRlbSAiLW1uby1tbXgiCisuSVAgIlxmQlwtbXNzZVxmUiIgNAorLklYIEl0ZW0gIi1tc3NlIgorLklQICJcZkJcLW1ub1wtc3NlXGZSIiA0CisuSVggSXRlbSAiLW1uby1zc2UiCisuSVAgIlxmQlwtbXNzZTJcZlIiIDQKKy5JWCBJdGVtICItbXNzZTIiCisuSVAgIlxmQlwtbW5vXC1zc2UyXGZSIiA0CisuSVggSXRlbSAiLW1uby1zc2UyIgorLklQICJcZkJcLW1zc2UzXGZSIiA0CisuSVggSXRlbSAiLW1zc2UzIgorLklQICJcZkJcLW1ub1wtc3NlM1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3NlMyIKKy5JUCAiXGZCXC1tc3NzZTNcZlIiIDQKKy5JWCBJdGVtICItbXNzc2UzIgorLklQICJcZkJcLW1ub1wtc3NzZTNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNzc2UzIgorLklQICJcZkJcLW1zc2U0LjFcZlIiIDQKKy5JWCBJdGVtICItbXNzZTQuMSIKKy5JUCAiXGZCXC1tbm9cLXNzZTQuMVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3NlNC4xIgorLklQICJcZkJcLW1zc2U0LjJcZlIiIDQKKy5JWCBJdGVtICItbXNzZTQuMiIKKy5JUCAiXGZCXC1tbm9cLXNzZTQuMlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3NlNC4yIgorLklQICJcZkJcLW1zc2U0XGZSIiA0CisuSVggSXRlbSAiLW1zc2U0IgorLklQICJcZkJcLW1ub1wtc3NlNFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3NlNCIKKy5JUCAiXGZCXC1tYXZ4XGZSIiA0CisuSVggSXRlbSAiLW1hdngiCisuSVAgIlxmQlwtbW5vXC1hdnhcZlIiIDQKKy5JWCBJdGVtICItbW5vLWF2eCIKKy5JUCAiXGZCXC1tYXZ4MlxmUiIgNAorLklYIEl0ZW0gIi1tYXZ4MiIKKy5JUCAiXGZCXC1tbm9cLWF2eDJcZlIiIDQKKy5JWCBJdGVtICItbW5vLWF2eDIiCisuSVAgIlxmQlwtbWFlc1xmUiIgNAorLklYIEl0ZW0gIi1tYWVzIgorLklQICJcZkJcLW1ub1wtYWVzXGZSIiA0CisuSVggSXRlbSAiLW1uby1hZXMiCisuSVAgIlxmQlwtbXBjbG11bFxmUiIgNAorLklYIEl0ZW0gIi1tcGNsbXVsIgorLklQICJcZkJcLW1ub1wtcGNsbXVsXGZSIiA0CisuSVggSXRlbSAiLW1uby1wY2xtdWwiCisuSVAgIlxmQlwtbWZzZ3NiYXNlXGZSIiA0CisuSVggSXRlbSAiLW1mc2dzYmFzZSIKKy5JUCAiXGZCXC1tbm9cLWZzZ3NiYXNlXGZSIiA0CisuSVggSXRlbSAiLW1uby1mc2dzYmFzZSIKKy5JUCAiXGZCXC1tcmRybmRcZlIiIDQKKy5JWCBJdGVtICItbXJkcm5kIgorLklQICJcZkJcLW1ub1wtcmRybmRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXJkcm5kIgorLklQICJcZkJcLW1mMTZjXGZSIiA0CisuSVggSXRlbSAiLW1mMTZjIgorLklQICJcZkJcLW1ub1wtZjE2Y1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZjE2YyIKKy5JUCAiXGZCXC1tZm1hXGZSIiA0CisuSVggSXRlbSAiLW1mbWEiCisuSVAgIlxmQlwtbW5vXC1mbWFcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZtYSIKKy5JUCAiXGZCXC1tc3NlNGFcZlIiIDQKKy5JWCBJdGVtICItbXNzZTRhIgorLklQICJcZkJcLW1ub1wtc3NlNGFcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNzZTRhIgorLklQICJcZkJcLW1mbWE0XGZSIiA0CisuSVggSXRlbSAiLW1mbWE0IgorLklQICJcZkJcLW1ub1wtZm1hNFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZm1hNCIKKy5JUCAiXGZCXC1teG9wXGZSIiA0CisuSVggSXRlbSAiLW14b3AiCisuSVAgIlxmQlwtbW5vXC14b3BcZlIiIDQKKy5JWCBJdGVtICItbW5vLXhvcCIKKy5JUCAiXGZCXC1tbHdwXGZSIiA0CisuSVggSXRlbSAiLW1sd3AiCisuSVAgIlxmQlwtbW5vXC1sd3BcZlIiIDQKKy5JWCBJdGVtICItbW5vLWx3cCIKKy5JUCAiXGZCXC1tM2Rub3dcZlIiIDQKKy5JWCBJdGVtICItbTNkbm93IgorLklQICJcZkJcLW1ub1wtM2Rub3dcZlIiIDQKKy5JWCBJdGVtICItbW5vLTNkbm93IgorLklQICJcZkJcLW1wb3BjbnRcZlIiIDQKKy5JWCBJdGVtICItbXBvcGNudCIKKy5JUCAiXGZCXC1tbm9cLXBvcGNudFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcG9wY250IgorLklQICJcZkJcLW1hYm1cZlIiIDQKKy5JWCBJdGVtICItbWFibSIKKy5JUCAiXGZCXC1tbm9cLWFibVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYWJtIgorLklQICJcZkJcLW1ibWlcZlIiIDQKKy5JWCBJdGVtICItbWJtaSIKKy5JUCAiXGZCXC1tYm1pMlxmUiIgNAorLklYIEl0ZW0gIi1tYm1pMiIKKy5JUCAiXGZCXC1tbm9cLWJtaVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYm1pIgorLklQICJcZkJcLW1ub1wtYm1pMlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYm1pMiIKKy5JUCAiXGZCXC1tbHpjbnRcZlIiIDQKKy5JWCBJdGVtICItbWx6Y250IgorLklQICJcZkJcLW1ub1wtbHpjbnRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWx6Y250IgorLklQICJcZkJcLW1ydG1cZlIiIDQKKy5JWCBJdGVtICItbXJ0bSIKKy5JUCAiXGZCXC1tdGJtXGZSIiA0CisuSVggSXRlbSAiLW10Ym0iCisuSVAgIlxmQlwtbW5vXC10Ym1cZlIiIDQKKy5JWCBJdGVtICItbW5vLXRibSIKKy5QRAorVGhlc2Ugc3dpdGNoZXMgZW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiBpbnN0cnVjdGlvbnMgaW4gdGhlIFxzLTFNTVhcczAsIFxzLTFTU0VcczAsCitcJlxzLTFTU0UyXHMwLCBccy0xU1NFM1xzMCwgXHMtMVNTU0UzXHMwLCBccy0xU1NFNFxzMC4xLCBccy0xQVZYXHMwLCBccy0xQVZYMlxzMCwgXHMtMUFFU1xzMCwgXHMtMVBDTE1VTFxzMCwgXHMtMUZTR1NCQVNFXHMwLCBccy0xUkRSTkRcczAsIEYxNkMsCitcJlxzLTFGTUFcczAsIFxzLTFTU0U0QVxzMCwgXHMtMUZNQTRcczAsIFxzLTFYT1BcczAsIFxzLTFMV1BcczAsIFxzLTFBQk1cczAsIFxzLTFCTUlcczAsIFxzLTFCTUkyXHMwLCBccy0xTFpDTlRcczAsIFxzLTFSVE1cczAgb3IgM0ROb3chCitleHRlbmRlZCBpbnN0cnVjdGlvbiBzZXRzLgorVGhlc2UgZXh0ZW5zaW9ucyBhcmUgYWxzbyBhdmFpbGFibGUgYXMgYnVpbHQtaW4gZnVuY3Rpb25zOiBzZWUKK1wmXGZCWDg2IEJ1aWx0LWluIEZ1bmN0aW9uc1xmUiwgZm9yIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9ucyBlbmFibGVkIGFuZAorZGlzYWJsZWQgYnkgdGhlc2Ugc3dpdGNoZXMuCisuU3AKK1RvIGdlbmVyYXRlIFxzLTFTU0UvU1NFMlxzMCBpbnN0cnVjdGlvbnMgYXV0b21hdGljYWxseSBmcm9tIGZsb2F0aW5nLXBvaW50Citjb2RlIChhcyBvcHBvc2VkIHRvIDM4NyBpbnN0cnVjdGlvbnMpLCBzZWUgXGZCXC1tZnBtYXRoPXNzZVxmUi4KKy5TcAorXCZccy0xR0NDXHMwIGRlcHJlc3NlcyBTU0V4IGluc3RydWN0aW9ucyB3aGVuIFxmQlwtbWF2eFxmUiBpcyB1c2VkLiBJbnN0ZWFkLCBpdAorZ2VuZXJhdGVzIG5ldyBccy0xQVZYXHMwIGluc3RydWN0aW9ucyBvciBccy0xQVZYXHMwIGVxdWl2YWxlbmNlIGZvciBhbGwgU1NFeCBpbnN0cnVjdGlvbnMKK3doZW4gbmVlZGVkLgorLlNwCitUaGVzZSBvcHRpb25zIGVuYWJsZSBccy0xR0NDXHMwIHRvIHVzZSB0aGVzZSBleHRlbmRlZCBpbnN0cnVjdGlvbnMgaW4KK2dlbmVyYXRlZCBjb2RlLCBldmVuIHdpdGhvdXQgXGZCXC1tZnBtYXRoPXNzZVxmUi4gIEFwcGxpY2F0aW9ucyB0aGF0CitwZXJmb3JtIHJ1bi10aW1lIFxzLTFDUFVcczAgZGV0ZWN0aW9uIG11c3QgY29tcGlsZSBzZXBhcmF0ZSBmaWxlcyBmb3IgZWFjaAorc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSwgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGZsYWdzLiAgSW4gcGFydGljdWxhciwKK3RoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIFxzLTFDUFVcczAgZGV0ZWN0aW9uIGNvZGUgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQKK3RoZXNlIG9wdGlvbnMuCisuSVAgIlxmQlwtbWNsZFxmUiIgNAorLklYIEl0ZW0gIi1tY2xkIgorVGhpcyBvcHRpb24gaW5zdHJ1Y3RzIFxzLTFHQ0NcczAgdG8gZW1pdCBhIFxmKENXXCooQ2BjbGRcKihDJ1xmUiBpbnN0cnVjdGlvbiBpbiB0aGUgcHJvbG9ndWUKK29mIGZ1bmN0aW9ucyB0aGF0IHVzZSBzdHJpbmcgaW5zdHJ1Y3Rpb25zLiAgU3RyaW5nIGluc3RydWN0aW9ucyBkZXBlbmQgb24KK3RoZSBccy0xREZcczAgZmxhZyB0byBzZWxlY3QgYmV0d2VlbiBhdXRvaW5jcmVtZW50IG9yIGF1dG9kZWNyZW1lbnQgbW9kZS4gIFdoaWxlIHRoZQorXCZccy0xQUJJXHMwIHNwZWNpZmllcyB0aGUgXHMtMURGXHMwIGZsYWcgdG8gYmUgY2xlYXJlZCBvbiBmdW5jdGlvbiBlbnRyeSwgc29tZSBvcGVyYXRpbmcKK3N5c3RlbXMgdmlvbGF0ZSB0aGlzIHNwZWNpZmljYXRpb24gYnkgbm90IGNsZWFyaW5nIHRoZSBccy0xREZcczAgZmxhZyBpbiB0aGVpcgorZXhjZXB0aW9uIGRpc3BhdGNoZXJzLiAgVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGNhbiBiZSBpbnZva2VkIHdpdGggdGhlIFxzLTFERlxzMCBmbGFnCitzZXQsIHdoaWNoIGxlYWRzIHRvIHdyb25nIGRpcmVjdGlvbiBtb2RlIHdoZW4gc3RyaW5nIGluc3RydWN0aW9ucyBhcmUgdXNlZC4KK1RoaXMgb3B0aW9uIGNhbiBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgb24gMzJcLWJpdCB4ODYgdGFyZ2V0cyBieSBjb25maWd1cmluZworXCZccy0xR0NDXHMwIHdpdGggdGhlIFxmQlwtXC1lbmFibGVcLWNsZFxmUiBjb25maWd1cmUgb3B0aW9uLiAgR2VuZXJhdGlvbiBvZiBcZihDV1wqKENgY2xkXCooQydcZlIKK2luc3RydWN0aW9ucyBjYW4gYmUgc3VwcHJlc3NlZCB3aXRoIHRoZSBcZkJcLW1ub1wtY2xkXGZSIGNvbXBpbGVyIG9wdGlvbgoraW4gdGhpcyBjYXNlLgorLklQICJcZkJcLW12emVyb3VwcGVyXGZSIiA0CisuSVggSXRlbSAiLW12emVyb3VwcGVyIgorVGhpcyBvcHRpb24gaW5zdHJ1Y3RzIFxzLTFHQ0NcczAgdG8gZW1pdCBhIFxmKENXXCooQ2B2emVyb3VwcGVyXCooQydcZlIgaW5zdHJ1Y3Rpb24KK2JlZm9yZSBhIHRyYW5zZmVyIG9mIGNvbnRyb2wgZmxvdyBvdXQgb2YgdGhlIGZ1bmN0aW9uIHRvIG1pbmltaXplCit0aGUgXHMtMUFWWFxzMCB0byBccy0xU1NFXHMwIHRyYW5zaXRpb24gcGVuYWx0eSBhcyB3ZWxsIGFzIHJlbW92ZSB1bm5lY2Vzc2FyeSBcZihDV1wqKENgemVyb3VwcGVyXCooQydcZlIKK2ludHJpbnNpY3MuCisuSVAgIlxmQlwtbXByZWZlclwtYXZ4MTI4XGZSIiA0CisuSVggSXRlbSAiLW1wcmVmZXItYXZ4MTI4IgorVGhpcyBvcHRpb24gaW5zdHJ1Y3RzIFxzLTFHQ0NcczAgdG8gdXNlIDEyOFwtYml0IFxzLTFBVlhcczAgaW5zdHJ1Y3Rpb25zIGluc3RlYWQgb2YKKzI1NlwtYml0IFxzLTFBVlhcczAgaW5zdHJ1Y3Rpb25zIGluIHRoZSBhdXRvLXZlY3Rvcml6ZXIuCisuSVAgIlxmQlwtbWN4MTZcZlIiIDQKKy5JWCBJdGVtICItbWN4MTYiCitUaGlzIG9wdGlvbiBlbmFibGVzIFxzLTFHQ0NcczAgdG8gZ2VuZXJhdGUgXGYoQ1dcKihDYENNUFhDSEcxNkJcKihDJ1xmUiBpbnN0cnVjdGlvbnMuCitcJlxmKENXXCooQ2BDTVBYQ0hHMTZCXCooQydcZlIgYWxsb3dzIGZvciBhdG9taWMgb3BlcmF0aW9ucyBvbiAxMjhcLWJpdCBkb3VibGUgcXVhZHdvcmQKKyhvciBvd29yZCkgZGF0YSB0eXBlcy4gIAorVGhpcyBpcyB1c2VmdWwgZm9yIGhpZ2gtcmVzb2x1dGlvbiBjb3VudGVycyB0aGF0IGNhbiBiZSB1cGRhdGVkCitieSBtdWx0aXBsZSBwcm9jZXNzb3JzIChvciBjb3JlcykuICBUaGlzIGluc3RydWN0aW9uIGlzIGdlbmVyYXRlZCBhcyBwYXJ0IG9mCithdG9taWMgYnVpbHQtaW4gZnVuY3Rpb25zOiBzZWUgXGZCX1x8X3N5bmMgQnVpbHRpbnNcZlIgb3IKK1wmXGZCX1x8X2F0b21pYyBCdWlsdGluc1xmUiBmb3IgZGV0YWlscy4KKy5JUCAiXGZCXC1tc2FoZlxmUiIgNAorLklYIEl0ZW0gIi1tc2FoZiIKK1RoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJhdGlvbiBvZiBcZihDV1wqKENgU0FIRlwqKEMnXGZSIGluc3RydWN0aW9ucyBpbiA2NFwtYml0IGNvZGUuCitFYXJseSBJbnRlbCBQZW50aXVtIDQgQ1BVcyB3aXRoIEludGVsIDY0IHN1cHBvcnQsCitwcmlvciB0byB0aGUgaW50cm9kdWN0aW9uIG9mIFBlbnRpdW0gNCBHMSBzdGVwIGluIERlY2VtYmVyIDIwMDUsCitsYWNrZWQgdGhlIFxmKENXXCooQ2BMQUhGXCooQydcZlIgYW5kIFxmKENXXCooQ2BTQUhGXCooQydcZlIgaW5zdHJ1Y3Rpb25zCit3aGljaCB3ZXJlIHN1cHBvcnRlZCBieSBccy0xQU1ENjRcczAuCitUaGVzZSBhcmUgbG9hZCBhbmQgc3RvcmUgaW5zdHJ1Y3Rpb25zLCByZXNwZWN0aXZlbHksIGZvciBjZXJ0YWluIHN0YXR1cyBmbGFncy4KK0luIDY0XC1iaXQgbW9kZSwgdGhlIFxmKENXXCooQ2BTQUhGXCooQydcZlIgaW5zdHJ1Y3Rpb24gaXMgdXNlZCB0byBvcHRpbWl6ZSBcZihDV1wqKENgZm1vZFwqKEMnXGZSLAorXCZcZihDV1wqKENgZHJlbVwqKEMnXGZSLCBhbmQgXGYoQ1dcKihDYHJlbWFpbmRlclwqKEMnXGZSIGJ1aWx0LWluIGZ1bmN0aW9uczsKK3NlZSBcZkJPdGhlciBCdWlsdGluc1xmUiBmb3IgZGV0YWlscy4KKy5JUCAiXGZCXC1tbW92YmVcZlIiIDQKKy5JWCBJdGVtICItbW1vdmJlIgorVGhpcyBvcHRpb24gZW5hYmxlcyB1c2Ugb2YgdGhlIFxmKENXXCooQ2Btb3ZiZVwqKEMnXGZSIGluc3RydWN0aW9uIHRvIGltcGxlbWVudAorXCZcZihDV1wqKENgX1x8X2J1aWx0aW5fYnN3YXAzMlwqKEMnXGZSIGFuZCBcZihDV1wqKENgX1x8X2J1aWx0aW5fYnN3YXA2NFwqKEMnXGZSLgorLklQICJcZkJcLW1jcmMzMlxmUiIgNAorLklYIEl0ZW0gIi1tY3JjMzIiCitUaGlzIG9wdGlvbiBlbmFibGVzIGJ1aWx0LWluIGZ1bmN0aW9ucyBcZihDV1wqKENgX1x8X2J1aWx0aW5faWEzMl9jcmMzMnFpXCooQydcZlIsCitcJlxmKENXXCooQ2BfXHxfYnVpbHRpbl9pYTMyX2NyYzMyaGlcKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF9idWlsdGluX2lhMzJfY3JjMzJzaVwqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgX1x8X2J1aWx0aW5faWEzMl9jcmMzMmRpXCooQydcZlIgdG8gZ2VuZXJhdGUgdGhlIFxmKENXXCooQ2BjcmMzMlwqKEMnXGZSIG1hY2hpbmUgaW5zdHJ1Y3Rpb24uCisuSVAgIlxmQlwtbXJlY2lwXGZSIiA0CisuSVggSXRlbSAiLW1yZWNpcCIKK1RoaXMgb3B0aW9uIGVuYWJsZXMgdXNlIG9mIFxmKENXXCooQ2BSQ1BTU1wqKEMnXGZSIGFuZCBcZihDV1wqKENgUlNRUlRTU1wqKEMnXGZSIGluc3RydWN0aW9ucworKGFuZCB0aGVpciB2ZWN0b3JpemVkIHZhcmlhbnRzIFxmKENXXCooQ2BSQ1BQU1wqKEMnXGZSIGFuZCBcZihDV1wqKENgUlNRUlRQU1wqKEMnXGZSKQord2l0aCBhbiBhZGRpdGlvbmFsIE5ld3Rvbi1SYXBoc29uIHN0ZXAKK3RvIGluY3JlYXNlIHByZWNpc2lvbiBpbnN0ZWFkIG9mIFxmKENXXCooQ2BESVZTU1wqKEMnXGZSIGFuZCBcZihDV1wqKENgU1FSVFNTXCooQydcZlIKKyhhbmQgdGhlaXIgdmVjdG9yaXplZAordmFyaWFudHMpIGZvciBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cy4gIFRoZXNlIGluc3RydWN0aW9ucworYXJlIGdlbmVyYXRlZCBvbmx5IHdoZW4gXGZCXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSIGlzIGVuYWJsZWQKK3RvZ2V0aGVyIHdpdGggXGZCXC1maW5pdGVcLW1hdGhcLW9ubHlcZlIgYW5kIFxmQlwtZm5vXC10cmFwcGluZ1wtbWF0aFxmUi4KK05vdGUgdGhhdCB3aGlsZSB0aGUgdGhyb3VnaHB1dCBvZiB0aGUgc2VxdWVuY2UgaXMgaGlnaGVyIHRoYW4gdGhlIHRocm91Z2hwdXQKK29mIHRoZSBub24tcmVjaXByb2NhbCBpbnN0cnVjdGlvbiwgdGhlIHByZWNpc2lvbiBvZiB0aGUgc2VxdWVuY2UgY2FuIGJlCitkZWNyZWFzZWQgYnkgdXAgdG8gMiB1bHAgKGkuZS4gdGhlIGludmVyc2Ugb2YgMS4wIGVxdWFscyAwLjk5OTk5OTk0KS4KKy5TcAorTm90ZSB0aGF0IFxzLTFHQ0NcczAgaW1wbGVtZW50cyBcZihDV1wqKENgMS4wZi9zcXJ0ZihcZihDSXhcZihDVylcKihDJ1xmUiBpbiB0ZXJtcyBvZiBcZihDV1wqKENgUlNRUlRTU1wqKEMnXGZSCisob3IgXGYoQ1dcKihDYFJTUVJUUFNcKihDJ1xmUikgYWxyZWFkeSB3aXRoIFxmQlwtZmZhc3RcLW1hdGhcZlIgKG9yIHRoZSBhYm92ZSBvcHRpb24KK2NvbWJpbmF0aW9uKSwgYW5kIGRvZXNuJ3QgbmVlZCBcZkJcLW1yZWNpcFxmUi4KKy5TcAorQWxzbyBub3RlIHRoYXQgXHMtMUdDQ1xzMCBlbWl0cyB0aGUgYWJvdmUgc2VxdWVuY2Ugd2l0aCBhZGRpdGlvbmFsIE5ld3Rvbi1SYXBoc29uIHN0ZXAKK2ZvciB2ZWN0b3JpemVkIHNpbmdsZS1mbG9hdCBkaXZpc2lvbiBhbmQgdmVjdG9yaXplZCBcZihDV1wqKENgc3FydGYoXGYoQ0l4XGYoQ1cpXCooQydcZlIKK2FscmVhZHkgd2l0aCBcZkJcLWZmYXN0XC1tYXRoXGZSIChvciB0aGUgYWJvdmUgb3B0aW9uIGNvbWJpbmF0aW9uKSwgYW5kCitkb2Vzbid0IG5lZWQgXGZCXC1tcmVjaXBcZlIuCisuSVAgIlxmQlwtbXJlY2lwPVxmUlxmSW9wdFxmUiIgNAorLklYIEl0ZW0gIi1tcmVjaXA9b3B0IgorVGhpcyBvcHRpb24gY29udHJvbHMgd2hpY2ggcmVjaXByb2NhbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMKK21heSBiZSB1c2VkLiAgXGZJb3B0XGZSIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb3B0aW9ucywgd2hpY2ggbWF5CitiZSBwcmVjZWRlZCBieSBhIFxmQiFcZlIgdG8gaW52ZXJ0IHRoZSBvcHRpb246CisuUlMgNAorLklQICJcZkJhbGxcZlIiIDQKKy5JWCBJdGVtICJhbGwiCitFbmFibGUgYWxsIGVzdGltYXRlIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCZGVmYXVsdFxmUiIgNAorLklYIEl0ZW0gImRlZmF1bHQiCitFbmFibGUgdGhlIGRlZmF1bHQgaW5zdHJ1Y3Rpb25zLCBlcXVpdmFsZW50IHRvIFxmQlwtbXJlY2lwXGZSLgorLklQICJcZkJub25lXGZSIiA0CisuSVggSXRlbSAibm9uZSIKK0Rpc2FibGUgYWxsIGVzdGltYXRlIGluc3RydWN0aW9ucywgZXF1aXZhbGVudCB0byBcZkJcLW1ub1wtcmVjaXBcZlIuCisuSVAgIlxmQmRpdlxmUiIgNAorLklYIEl0ZW0gImRpdiIKK0VuYWJsZSB0aGUgYXBwcm94aW1hdGlvbiBmb3Igc2NhbGFyIGRpdmlzaW9uLgorLklQICJcZkJ2ZWMtZGl2XGZSIiA0CisuSVggSXRlbSAidmVjLWRpdiIKK0VuYWJsZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdmVjdG9yaXplZCBkaXZpc2lvbi4KKy5JUCAiXGZCc3FydFxmUiIgNAorLklYIEl0ZW0gInNxcnQiCitFbmFibGUgdGhlIGFwcHJveGltYXRpb24gZm9yIHNjYWxhciBzcXVhcmUgcm9vdC4KKy5JUCAiXGZCdmVjLXNxcnRcZlIiIDQKKy5JWCBJdGVtICJ2ZWMtc3FydCIKK0VuYWJsZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdmVjdG9yaXplZCBzcXVhcmUgcm9vdC4KKy5SRQorLlJTIDQKKy5TcAorU28sIGZvciBleGFtcGxlLCBcZkJcLW1yZWNpcD1hbGwsIXNxcnRcZlIgZW5hYmxlcworYWxsIG9mIHRoZSByZWNpcHJvY2FsIGFwcHJveGltYXRpb25zLCBleGNlcHQgZm9yIHNxdWFyZSByb290LgorLlJFCisuSVAgIlxmQlwtbXZlY2xpYmFiaT1cZlJcZkl0eXBlXGZSIiA0CisuSVggSXRlbSAiLW12ZWNsaWJhYmk9dHlwZSIKK1NwZWNpZmllcyB0aGUgXHMtMUFCSVxzMCB0eXBlIHRvIHVzZSBmb3IgdmVjdG9yaXppbmcgaW50cmluc2ljcyB1c2luZyBhbgorZXh0ZXJuYWwgbGlicmFyeS4gIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIFxmSXR5cGVcZlIgYXJlIFxmQnN2bWxcZlIgCitmb3IgdGhlIEludGVsIHNob3J0Cit2ZWN0b3IgbWF0aCBsaWJyYXJ5IGFuZCBcZkJhY21sXGZSIGZvciB0aGUgXHMtMUFNRFxzMCBtYXRoIGNvcmUgbGlicmFyeS4KK1RvIHVzZSB0aGlzIG9wdGlvbiwgYm90aCBcZkJcLWZ0cmVlXC12ZWN0b3JpemVcZlIgYW5kCitcJlxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiBoYXZlIHRvIGJlIGVuYWJsZWQsIGFuZCBhbiBccy0xU1ZNTFxzMCBvciBccy0xQUNNTFxzMCAKK0FCSS1jb21wYXRpYmxlIGxpYnJhcnkgbXVzdCBiZSBzcGVjaWZpZWQgYXQgbGluayB0aW1lLgorLlNwCitcJlxzLTFHQ0NcczAgY3VycmVudGx5IGVtaXRzIGNhbGxzIHRvIFxmKENXXCooQ2B2bWxkRXhwMlwqKEMnXGZSLAorXCZcZihDV1wqKENgdm1sZExuMlwqKEMnXGZSLCBcZihDV1wqKENgdm1sZExvZzEwMlwqKEMnXGZSLCBcZihDV1wqKENgdm1sZExvZzEwMlwqKEMnXGZSLCBcZihDV1wqKENgdm1sZFBvdzJcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHZtbGRUYW5oMlwqKEMnXGZSLCBcZihDV1wqKENgdm1sZFRhbjJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRBdGFuMlwqKEMnXGZSLCBcZihDV1wqKENgdm1sZEF0YW5oMlwqKEMnXGZSLAorXCZcZihDV1wqKENgdm1sZENicnQyXCooQydcZlIsIFxmKENXXCooQ2B2bWxkU2luaDJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRTaW4yXCooQydcZlIsIFxmKENXXCooQ2B2bWxkQXNpbmgyXCooQydcZlIsCitcJlxmKENXXCooQ2B2bWxkQXNpbjJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRDb3NoMlwqKEMnXGZSLCBcZihDV1wqKENgdm1sZENvczJcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbGRBY29zaDJcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHZtbGRBY29zMlwqKEMnXGZSLCBcZihDV1wqKENgdm1sc0V4cDRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNMbjRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNMb2cxMDRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHZtbHNMb2cxMDRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNQb3c0XCooQydcZlIsIFxmKENXXCooQ2B2bWxzVGFuaDRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNUYW40XCooQydcZlIsCitcJlxmKENXXCooQ2B2bWxzQXRhbjRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNBdGFuaDRcKihDJ1xmUiwgXGYoQ1dcKihDYHZtbHNDYnJ0NFwqKEMnXGZSLCBcZihDV1wqKENgdm1sc1Npbmg0XCooQydcZlIsCitcJlxmKENXXCooQ2B2bWxzU2luNFwqKEMnXGZSLCBcZihDV1wqKENgdm1sc0FzaW5oNFwqKEMnXGZSLCBcZihDV1wqKENgdm1sc0FzaW40XCooQydcZlIsIFxmKENXXCooQ2B2bWxzQ29zaDRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHZtbHNDb3M0XCooQydcZlIsIFxmKENXXCooQ2B2bWxzQWNvc2g0XCooQydcZlIgYW5kIFxmKENXXCooQ2B2bWxzQWNvczRcKihDJ1xmUiBmb3IgY29ycmVzcG9uZGluZworZnVuY3Rpb24gdHlwZSB3aGVuIFxmQlwtbXZlY2xpYmFiaT1zdm1sXGZSIGlzIHVzZWQsIGFuZCBcZihDV1wqKENgX1x8X3ZyZDJfc2luXCooQydcZlIsCitcJlxmKENXXCooQ2BfXHxfdnJkMl9jb3NcKihDJ1xmUiwgXGYoQ1dcKihDYF9cfF92cmQyX2V4cFwqKEMnXGZSLCBcZihDV1wqKENgX1x8X3ZyZDJfbG9nXCooQydcZlIsIFxmKENXXCooQ2BfXHxfdnJkMl9sb2cyXCooQydcZlIsCitcJlxmKENXXCooQ2BfXHxfdnJkMl9sb2cxMFwqKEMnXGZSLCBcZihDV1wqKENgX1x8X3ZyczRfc2luZlwqKEMnXGZSLCBcZihDV1wqKENgX1x8X3ZyczRfY29zZlwqKEMnXGZSLAorXCZcZihDV1wqKENgX1x8X3ZyczRfZXhwZlwqKEMnXGZSLCBcZihDV1wqKENgX1x8X3ZyczRfbG9nZlwqKEMnXGZSLCBcZihDV1wqKENgX1x8X3ZyczRfbG9nMmZcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYF9cfF92cnM0X2xvZzEwZlwqKEMnXGZSIGFuZCBcZihDV1wqKENgX1x8X3ZyczRfcG93ZlwqKEMnXGZSIGZvciB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiB0eXBlCit3aGVuIFxmQlwtbXZlY2xpYmFiaT1hY21sXGZSIGlzIHVzZWQuCisuSVAgIlxmQlwtbWFiaT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1hYmk9bmFtZSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgY2FsbGluZyBjb252ZW50aW9uLiAgUGVybWlzc2libGUgdmFsdWVzCithcmUgXGZCc3lzdlxmUiBmb3IgdGhlIFxzLTFBQklcczAgdXNlZCBvbiBHTlUvTGludXggYW5kIG90aGVyIHN5c3RlbXMsIGFuZAorXCZcZkJtc1xmUiBmb3IgdGhlIE1pY3Jvc29mdCBccy0xQUJJXHMwLiAgVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBNaWNyb3NvZnQKK1wmXHMtMUFCSVxzMCB3aGVuIHRhcmdldGluZyBNaWNyb3NvZnQgV2luZG93cyBhbmQgdGhlIFN5c1YgXHMtMUFCSVxzMCBvbiBhbGwgb3RoZXIgc3lzdGVtcy4KK1lvdSBjYW4gY29udHJvbCB0aGlzIGJlaGF2aW9yIGZvciBhIHNwZWNpZmljIGZ1bmN0aW9uIGJ5Cit1c2luZyB0aGUgZnVuY3Rpb24gYXR0cmlidXRlIFxmQm1zX2FiaVxmUi9cZkJzeXN2X2FiaVxmUi4KKy5JUCAiXGZCXC1tdGxzXC1kaWFsZWN0PVxmUlxmSXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbXRscy1kaWFsZWN0PXR5cGUiCitHZW5lcmF0ZSBjb2RlIHRvIGFjY2VzcyB0aHJlYWQtbG9jYWwgc3RvcmFnZSB1c2luZyB0aGUgXGZCZ251XGZSIG9yCitcJlxmQmdudTJcZlIgY29udmVudGlvbnMuICBcZkJnbnVcZlIgaXMgdGhlIGNvbnNlcnZhdGl2ZSBkZWZhdWx0OworXCZcZkJnbnUyXGZSIGlzIG1vcmUgZWZmaWNpZW50LCBidXQgaXQgbWF5IGFkZCBjb21waWxlXC0gYW5kIHJ1bi10aW1lCityZXF1aXJlbWVudHMgdGhhdCBjYW5ub3QgYmUgc2F0aXNmaWVkIG9uIGFsbCBzeXN0ZW1zLgorLklQICJcZkJcLW1wdXNoXC1hcmdzXGZSIiA0CisuSVggSXRlbSAiLW1wdXNoLWFyZ3MiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcHVzaFwtYXJnc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcHVzaC1hcmdzIgorLlBECitVc2UgXHMtMVBVU0hcczAgb3BlcmF0aW9ucyB0byBzdG9yZSBvdXRnb2luZyBwYXJhbWV0ZXJzLiAgVGhpcyBtZXRob2QgaXMgc2hvcnRlcgorYW5kIHVzdWFsbHkgZXF1YWxseSBmYXN0IGFzIG1ldGhvZCB1c2luZyBccy0xU1VCL01PVlxzMCBvcGVyYXRpb25zIGFuZCBpcyBlbmFibGVkCitieSBkZWZhdWx0LiAgSW4gc29tZSBjYXNlcyBkaXNhYmxpbmcgaXQgbWF5IGltcHJvdmUgcGVyZm9ybWFuY2UgYmVjYXVzZSBvZgoraW1wcm92ZWQgc2NoZWR1bGluZyBhbmQgcmVkdWNlZCBkZXBlbmRlbmNpZXMuCisuSVAgIlxmQlwtbWFjY3VtdWxhdGVcLW91dGdvaW5nXC1hcmdzXGZSIiA0CisuSVggSXRlbSAiLW1hY2N1bXVsYXRlLW91dGdvaW5nLWFyZ3MiCitJZiBlbmFibGVkLCB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIG91dGdvaW5nIGFyZ3VtZW50cyBpcworY29tcHV0ZWQgaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlLiAgVGhpcyBpcyBmYXN0ZXIgb24gbW9zdCBtb2Rlcm4gQ1BVcworYmVjYXVzZSBvZiByZWR1Y2VkIGRlcGVuZGVuY2llcywgaW1wcm92ZWQgc2NoZWR1bGluZyBhbmQgcmVkdWNlZCBzdGFjayB1c2FnZQord2hlbiB0aGUgcHJlZmVycmVkIHN0YWNrIGJvdW5kYXJ5IGlzIG5vdCBlcXVhbCB0byAyLiAgVGhlIGRyYXdiYWNrIGlzIGEgbm90YWJsZQoraW5jcmVhc2UgaW4gY29kZSBzaXplLiAgVGhpcyBzd2l0Y2ggaW1wbGllcyBcZkJcLW1ub1wtcHVzaFwtYXJnc1xmUi4KKy5JUCAiXGZCXC1tdGhyZWFkc1xmUiIgNAorLklYIEl0ZW0gIi1tdGhyZWFkcyIKK1N1cHBvcnQgdGhyZWFkLXNhZmUgZXhjZXB0aW9uIGhhbmRsaW5nIG9uIE1pbkdXLiAgUHJvZ3JhbXMgdGhhdCByZWx5CitvbiB0aHJlYWQtc2FmZSBleGNlcHRpb24gaGFuZGxpbmcgbXVzdCBjb21waWxlIGFuZCBsaW5rIGFsbCBjb2RlIHdpdGggdGhlCitcJlxmQlwtbXRocmVhZHNcZlIgb3B0aW9uLiAgV2hlbiBjb21waWxpbmcsIFxmQlwtbXRocmVhZHNcZlIgZGVmaW5lcworXCZcZihDV1wqKENgXC1EX01UXCooQydcZlI7IHdoZW4gbGlua2luZywgaXQgbGlua3MgaW4gYSBzcGVjaWFsIHRocmVhZCBoZWxwZXIgbGlicmFyeQorXCZcZkJcLWxtaW5nd3RocmRcZlIgd2hpY2ggY2xlYW5zIHVwIHBlci10aHJlYWQgZXhjZXB0aW9uLWhhbmRsaW5nIGRhdGEuCisuSVAgIlxmQlwtbW5vXC1hbGlnblwtc3RyaW5nb3BzXGZSIiA0CisuSVggSXRlbSAiLW1uby1hbGlnbi1zdHJpbmdvcHMiCitEbyBub3QgYWxpZ24gdGhlIGRlc3RpbmF0aW9uIG9mIGlubGluZWQgc3RyaW5nIG9wZXJhdGlvbnMuICBUaGlzIHN3aXRjaCByZWR1Y2VzCitjb2RlIHNpemUgYW5kIGltcHJvdmVzIHBlcmZvcm1hbmNlIGluIGNhc2UgdGhlIGRlc3RpbmF0aW9uIGlzIGFscmVhZHkgYWxpZ25lZCwKK2J1dCBccy0xR0NDXHMwIGRvZXNuJ3Qga25vdyBhYm91dCBpdC4KKy5JUCAiXGZCXC1taW5saW5lXC1hbGxcLXN0cmluZ29wc1xmUiIgNAorLklYIEl0ZW0gIi1taW5saW5lLWFsbC1zdHJpbmdvcHMiCitCeSBkZWZhdWx0IFxzLTFHQ0NcczAgaW5saW5lcyBzdHJpbmcgb3BlcmF0aW9ucyBvbmx5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIAora25vd24gdG8gYmUgYWxpZ25lZCB0byBsZWFzdCBhIDRcLWJ5dGUgYm91bmRhcnkuICAKK1RoaXMgZW5hYmxlcyBtb3JlIGlubGluaW5nIGFuZCBpbmNyZWFzZXMgY29kZQorc2l6ZSwgYnV0IG1heSBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIGNvZGUgdGhhdCBkZXBlbmRzIG9uIGZhc3QKK1wmXGYoQ1dcKihDYG1lbWNweVwqKEMnXGZSLCBcZihDV1wqKENgc3RybGVuXCooQydcZlIsCithbmQgXGYoQ1dcKihDYG1lbXNldFwqKEMnXGZSIGZvciBzaG9ydCBsZW5ndGhzLgorLklQICJcZkJcLW1pbmxpbmVcLXN0cmluZ29wc1wtZHluYW1pY2FsbHlcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1zdHJpbmdvcHMtZHluYW1pY2FsbHkiCitGb3Igc3RyaW5nIG9wZXJhdGlvbnMgb2YgdW5rbm93biBzaXplLCB1c2UgcnVuLXRpbWUgY2hlY2tzIHdpdGgKK2lubGluZSBjb2RlIGZvciBzbWFsbCBibG9ja3MgYW5kIGEgbGlicmFyeSBjYWxsIGZvciBsYXJnZSBibG9ja3MuCisuSVAgIlxmQlwtbXN0cmluZ29wXC1zdHJhdGVneT1cZlJcZklhbGdcZlIiIDQKKy5JWCBJdGVtICItbXN0cmluZ29wLXN0cmF0ZWd5PWFsZyIKK092ZXJyaWRlIHRoZSBpbnRlcm5hbCBkZWNpc2lvbiBoZXVyaXN0aWMgZm9yIHRoZSBwYXJ0aWN1bGFyIGFsZ29yaXRobSB0byB1c2UKK2ZvciBpbmxpbmluZyBzdHJpbmcgb3BlcmF0aW9ucy4gIFRoZSBhbGxvd2VkIHZhbHVlcyBmb3IgXGZJYWxnXGZSIGFyZToKKy5SUyA0CisuSVAgIlxmQnJlcF9ieXRlXGZSIiA0CisuSVggSXRlbSAicmVwX2J5dGUiCisuUEQgMAorLklQICJcZkJyZXBfNGJ5dGVcZlIiIDQKKy5JWCBJdGVtICJyZXBfNGJ5dGUiCisuSVAgIlxmQnJlcF84Ynl0ZVxmUiIgNAorLklYIEl0ZW0gInJlcF84Ynl0ZSIKKy5QRAorRXhwYW5kIHVzaW5nIGkzODYgXGYoQ1dcKihDYHJlcFwqKEMnXGZSIHByZWZpeCBvZiB0aGUgc3BlY2lmaWVkIHNpemUuCisuSVAgIlxmQmJ5dGVfbG9vcFxmUiIgNAorLklYIEl0ZW0gImJ5dGVfbG9vcCIKKy5QRCAwCisuSVAgIlxmQmxvb3BcZlIiIDQKKy5JWCBJdGVtICJsb29wIgorLklQICJcZkJ1bnJvbGxlZF9sb29wXGZSIiA0CisuSVggSXRlbSAidW5yb2xsZWRfbG9vcCIKKy5QRAorRXhwYW5kIGludG8gYW4gaW5saW5lIGxvb3AuCisuSVAgIlxmQmxpYmNhbGxcZlIiIDQKKy5JWCBJdGVtICJsaWJjYWxsIgorQWx3YXlzIHVzZSBhIGxpYnJhcnkgY2FsbC4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW1vbWl0XC1sZWFmXC1mcmFtZVwtcG9pbnRlclxmUiIgNAorLklYIEl0ZW0gIi1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIiCitEb24ndCBrZWVwIHRoZSBmcmFtZSBwb2ludGVyIGluIGEgcmVnaXN0ZXIgZm9yIGxlYWYgZnVuY3Rpb25zLiAgVGhpcworYXZvaWRzIHRoZSBpbnN0cnVjdGlvbnMgdG8gc2F2ZSwgc2V0IHVwLCBhbmQgcmVzdG9yZSBmcmFtZSBwb2ludGVycyBhbmQKK21ha2VzIGFuIGV4dHJhIHJlZ2lzdGVyIGF2YWlsYWJsZSBpbiBsZWFmIGZ1bmN0aW9ucy4gIFRoZSBvcHRpb24KK1wmXGZCXC1mb21pdFwtbGVhZlwtZnJhbWVcLXBvaW50ZXJcZlIgcmVtb3ZlcyB0aGUgZnJhbWUgcG9pbnRlciBmb3IgbGVhZiBmdW5jdGlvbnMsCit3aGljaCBtaWdodCBtYWtlIGRlYnVnZ2luZyBoYXJkZXIuCisuSVAgIlxmQlwtbXRsc1wtZGlyZWN0XC1zZWdcLXJlZnNcZlIiIDQKKy5JWCBJdGVtICItbXRscy1kaXJlY3Qtc2VnLXJlZnMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdGxzXC1kaXJlY3RcLXNlZ1wtcmVmc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tdGxzLWRpcmVjdC1zZWctcmVmcyIKKy5QRAorQ29udHJvbHMgd2hldGhlciBccy0xVExTXHMwIHZhcmlhYmxlcyBtYXkgYmUgYWNjZXNzZWQgd2l0aCBvZmZzZXRzIGZyb20gdGhlCitcJlxzLTFUTFNcczAgc2VnbWVudCByZWdpc3RlciAoXGYoQ1clZ3NcZlIgZm9yIDMyXC1iaXQsIFxmKENXJWZzXGZSIGZvciA2NFwtYml0KSwKK29yIHdoZXRoZXIgdGhlIHRocmVhZCBiYXNlIHBvaW50ZXIgbXVzdCBiZSBhZGRlZC4gIFdoZXRoZXIgb3Igbm90IHRoaXMKK2lzIHZhbGlkIGRlcGVuZHMgb24gdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCB3aGV0aGVyIGl0IG1hcHMgdGhlCitzZWdtZW50IHRvIGNvdmVyIHRoZSBlbnRpcmUgXHMtMVRMU1xzMCBhcmVhLgorLlNwCitGb3Igc3lzdGVtcyB0aGF0IHVzZSB0aGUgXHMtMUdOVVxzMCBDIExpYnJhcnksIHRoZSBkZWZhdWx0IGlzIG9uLgorLklQICJcZkJcLW1zc2UyYXZ4XGZSIiA0CisuSVggSXRlbSAiLW1zc2UyYXZ4IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNzZTJhdnhcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNzZTJhdngiCisuUEQKK1NwZWNpZnkgdGhhdCB0aGUgYXNzZW1ibGVyIHNob3VsZCBlbmNvZGUgXHMtMVNTRVxzMCBpbnN0cnVjdGlvbnMgd2l0aCBccy0xVkVYXHMwCitwcmVmaXguICBUaGUgb3B0aW9uIFxmQlwtbWF2eFxmUiB0dXJucyB0aGlzIG9uIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbWZlbnRyeVxmUiIgNAorLklYIEl0ZW0gIi1tZmVudHJ5IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZlbnRyeVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZmVudHJ5IgorLlBECitJZiBwcm9maWxpbmcgaXMgYWN0aXZlIChcZkJcLXBnXGZSKSwgcHV0IHRoZSBwcm9maWxpbmcKK2NvdW50ZXIgY2FsbCBiZWZvcmUgdGhlIHByb2xvZ3VlLgorTm90ZTogT24geDg2IGFyY2hpdGVjdHVyZXMgdGhlIGF0dHJpYnV0ZSBcZihDV1wqKENgbXNfaG9va19wcm9sb2d1ZVwqKEMnXGZSCitpc24ndCBwb3NzaWJsZSBhdCB0aGUgbW9tZW50IGZvciBcZkJcLW1mZW50cnlcZlIgYW5kIFxmQlwtcGdcZlIuCisuSVAgIlxmQlwtbThiaXRcLWlkaXZcZlIiIDQKKy5JWCBJdGVtICItbThiaXQtaWRpdiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC04Yml0XC1pZGl2XGZSIiA0CisuSVggSXRlbSAiLW1uby04Yml0LWlkaXYiCisuUEQKK09uIHNvbWUgcHJvY2Vzc29ycywgbGlrZSBJbnRlbCBBdG9tLCA4XC1iaXQgdW5zaWduZWQgaW50ZWdlciBkaXZpZGUgaXMKK211Y2ggZmFzdGVyIHRoYW4gMzJcLWJpdC82NFwtYml0IGludGVnZXIgZGl2aWRlLiAgVGhpcyBvcHRpb24gZ2VuZXJhdGVzIGEKK3J1bi10aW1lIGNoZWNrLiAgSWYgYm90aCBkaXZpZGVuZCBhbmQgZGl2aXNvciBhcmUgd2l0aGluIHJhbmdlIG9mIDAKK3RvIDI1NSwgOFwtYml0IHVuc2lnbmVkIGludGVnZXIgZGl2aWRlIGlzIHVzZWQgaW5zdGVhZCBvZgorMzJcLWJpdC82NFwtYml0IGludGVnZXIgZGl2aWRlLgorLklQICJcZkJcLW1hdngyNTZcLXNwbGl0XC11bmFsaWduZWRcLWxvYWRcZlIiIDQKKy5JWCBJdGVtICItbWF2eDI1Ni1zcGxpdC11bmFsaWduZWQtbG9hZCIKKy5QRCAwCisuSVAgIlxmQlwtbWF2eDI1Nlwtc3BsaXRcLXVuYWxpZ25lZFwtc3RvcmVcZlIiIDQKKy5JWCBJdGVtICItbWF2eDI1Ni1zcGxpdC11bmFsaWduZWQtc3RvcmUiCisuUEQKK1NwbGl0IDMyXC1ieXRlIFxzLTFBVlhcczAgdW5hbGlnbmVkIGxvYWQgYW5kIHN0b3JlLgorLlBQCitUaGVzZSBcZkJcLW1cZlIgc3dpdGNoZXMgYXJlIHN1cHBvcnRlZCBpbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUKK29uIHg4NlwtNjQgcHJvY2Vzc29ycyBpbiA2NFwtYml0IGVudmlyb25tZW50cy4KKy5JUCAiXGZCXC1tMzJcZlIiIDQKKy5JWCBJdGVtICItbTMyIgorLlBEIDAKKy5JUCAiXGZCXC1tNjRcZlIiIDQKKy5JWCBJdGVtICItbTY0IgorLklQICJcZkJcLW14MzJcZlIiIDQKKy5JWCBJdGVtICItbXgzMiIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgYSAzMlwtYml0IG9yIDY0XC1iaXQgZW52aXJvbm1lbnQuCitUaGUgXGZCXC1tMzJcZlIgb3B0aW9uIHNldHMgXGYoQ1dcKihDYGludFwqKEMnXGZSLCBcZihDV1wqKENgbG9uZ1wqKEMnXGZSLCBhbmQgcG9pbnRlciB0eXBlcwordG8gMzIgYml0cywgYW5kCitnZW5lcmF0ZXMgY29kZSB0aGF0IHJ1bnMgb24gYW55IGkzODYgc3lzdGVtLgorLlNwCitUaGUgXGZCXC1tNjRcZlIgb3B0aW9uIHNldHMgXGYoQ1dcKihDYGludFwqKEMnXGZSIHRvIDMyIGJpdHMgYW5kIFxmKENXXCooQ2Bsb25nXCooQydcZlIgYW5kIHBvaW50ZXIKK3R5cGVzIHRvIDY0IGJpdHMsIGFuZCBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIHg4NlwtNjQgYXJjaGl0ZWN0dXJlLgorRm9yIERhcndpbiBvbmx5IHRoZSBcZkJcLW02NFxmUiBvcHRpb24gYWxzbyB0dXJucyBvZmYgdGhlIFxmQlwtZm5vXC1waWNcZlIKK2FuZCBcZkJcLW1keW5hbWljXC1ub1wtcGljXGZSIG9wdGlvbnMuCisuU3AKK1RoZSBcZkJcLW14MzJcZlIgb3B0aW9uIHNldHMgXGYoQ1dcKihDYGludFwqKEMnXGZSLCBcZihDV1wqKENgbG9uZ1wqKEMnXGZSLCBhbmQgcG9pbnRlciB0eXBlcwordG8gMzIgYml0cywgYW5kCitnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIHg4NlwtNjQgYXJjaGl0ZWN0dXJlLgorLklQICJcZkJcLW1ub1wtcmVkXC16b25lXGZSIiA0CisuSVggSXRlbSAiLW1uby1yZWQtem9uZSIKK0RvIG5vdCB1c2UgYSBzby1jYWxsZWQgXCooTCJyZWQgem9uZVwqKFIiIGZvciB4ODZcLTY0IGNvZGUuICBUaGUgcmVkIHpvbmUgaXMgbWFuZGF0ZWQKK2J5IHRoZSB4ODZcLTY0IFxzLTFBQklcczA7IGl0IGlzIGEgMTI4XC1ieXRlIGFyZWEgYmV5b25kIHRoZSBsb2NhdGlvbiBvZiB0aGUKK3N0YWNrIHBvaW50ZXIgdGhhdCBpcyBub3QgbW9kaWZpZWQgYnkgc2lnbmFsIG9yIGludGVycnVwdCBoYW5kbGVycworYW5kIHRoZXJlZm9yZSBjYW4gYmUgdXNlZCBmb3IgdGVtcG9yYXJ5IGRhdGEgd2l0aG91dCBhZGp1c3RpbmcgdGhlIHN0YWNrCitwb2ludGVyLiAgVGhlIGZsYWcgXGZCXC1tbm9cLXJlZFwtem9uZVxmUiBkaXNhYmxlcyB0aGlzIHJlZCB6b25lLgorLklQICJcZkJcLW1jbW9kZWw9c21hbGxcZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1zbWFsbCIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBzbWFsbCBjb2RlIG1vZGVsOiB0aGUgcHJvZ3JhbSBhbmQgaXRzIHN5bWJvbHMgbXVzdAorYmUgbGlua2VkIGluIHRoZSBsb3dlciAyIFxzLTFHQlxzMCBvZiB0aGUgYWRkcmVzcyBzcGFjZS4gIFBvaW50ZXJzIGFyZSA2NCBiaXRzLgorUHJvZ3JhbXMgY2FuIGJlIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgbGlua2VkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorY29kZSBtb2RlbC4KKy5JUCAiXGZCXC1tY21vZGVsPWtlcm5lbFxmUiIgNAorLklYIEl0ZW0gIi1tY21vZGVsPWtlcm5lbCIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBrZXJuZWwgY29kZSBtb2RlbC4gIFRoZSBrZXJuZWwgcnVucyBpbiB0aGUKK25lZ2F0aXZlIDIgXHMtMUdCXHMwIG9mIHRoZSBhZGRyZXNzIHNwYWNlLgorVGhpcyBtb2RlbCBoYXMgdG8gYmUgdXNlZCBmb3IgTGludXgga2VybmVsIGNvZGUuCisuSVAgIlxmQlwtbWNtb2RlbD1tZWRpdW1cZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1tZWRpdW0iCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgbWVkaXVtIG1vZGVsOiB0aGUgcHJvZ3JhbSBpcyBsaW5rZWQgaW4gdGhlIGxvd2VyIDIKK1wmXHMtMUdCXHMwIG9mIHRoZSBhZGRyZXNzIHNwYWNlLiAgU21hbGwgc3ltYm9scyBhcmUgYWxzbyBwbGFjZWQgdGhlcmUuICBTeW1ib2xzCit3aXRoIHNpemVzIGxhcmdlciB0aGFuIFxmQlwtbWxhcmdlXC1kYXRhXC10aHJlc2hvbGRcZlIgYXJlIHB1dCBpbnRvCitsYXJnZSBkYXRhIG9yIFxzLTFCU1NcczAgc2VjdGlvbnMgYW5kIGNhbiBiZSBsb2NhdGVkIGFib3ZlIDJHQi4gIFByb2dyYW1zIGNhbgorYmUgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSBsaW5rZWQuCisuSVAgIlxmQlwtbWNtb2RlbD1sYXJnZVxmUiIgNAorLklYIEl0ZW0gIi1tY21vZGVsPWxhcmdlIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIGxhcmdlIG1vZGVsLiAgVGhpcyBtb2RlbCBtYWtlcyBubyBhc3N1bXB0aW9ucworYWJvdXQgYWRkcmVzc2VzIGFuZCBzaXplcyBvZiBzZWN0aW9ucy4KKy5JUCAiXGZCXC1tYWRkcmVzc1wtbW9kZT1sb25nXGZSIiA0CisuSVggSXRlbSAiLW1hZGRyZXNzLW1vZGU9bG9uZyIKK0dlbmVyYXRlIGNvZGUgZm9yIGxvbmcgYWRkcmVzcyBtb2RlLiAgVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgNjRcLWJpdAorYW5kIHgzMiBlbnZpcm9ubWVudHMuICBJdCBpcyB0aGUgZGVmYXVsdCBhZGRyZXNzIG1vZGUgZm9yIDY0XC1iaXQKK2Vudmlyb25tZW50cy4KKy5JUCAiXGZCXC1tYWRkcmVzc1wtbW9kZT1zaG9ydFxmUiIgNAorLklYIEl0ZW0gIi1tYWRkcmVzcy1tb2RlPXNob3J0IgorR2VuZXJhdGUgY29kZSBmb3Igc2hvcnQgYWRkcmVzcyBtb2RlLiAgVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgMzJcLWJpdAorYW5kIHgzMiBlbnZpcm9ubWVudHMuICBJdCBpcyB0aGUgZGVmYXVsdCBhZGRyZXNzIG1vZGUgZm9yIDMyXC1iaXQgYW5kCit4MzIgZW52aXJvbm1lbnRzLgorLlBQCitcZklpMzg2IGFuZCB4ODZcLTY0IFdpbmRvd3MgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gImkzODYgYW5kIHg4Ni02NCBXaW5kb3dzIE9wdGlvbnMiCisuUFAKK1RoZXNlIGFkZGl0aW9uYWwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBNaWNyb3NvZnQgV2luZG93cyB0YXJnZXRzOgorLklQICJcZkJcLW1jb25zb2xlXGZSIiA0CisuSVggSXRlbSAiLW1jb25zb2xlIgorVGhpcyBvcHRpb24KK3NwZWNpZmllcyB0aGF0IGEgY29uc29sZSBhcHBsaWNhdGlvbiBpcyB0byBiZSBnZW5lcmF0ZWQsIGJ5CitpbnN0cnVjdGluZyB0aGUgbGlua2VyIHRvIHNldCB0aGUgXHMtMVBFXHMwIGhlYWRlciBzdWJzeXN0ZW0gdHlwZQorcmVxdWlyZWQgZm9yIGNvbnNvbGUgYXBwbGljYXRpb25zLgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBDeWd3aW4gYW5kIE1pbkdXIHRhcmdldHMgYW5kIGlzCitlbmFibGVkIGJ5IGRlZmF1bHQgb24gdGhvc2UgdGFyZ2V0cy4KKy5JUCAiXGZCXC1tZGxsXGZSIiA0CisuSVggSXRlbSAiLW1kbGwiCitUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIEN5Z3dpbiBhbmQgTWluR1cgdGFyZ2V0cy4gIEl0CitzcGVjaWZpZXMgdGhhdCBhIERMTFwtXC1cLWEgZHluYW1pYyBsaW5rIGxpYnJhcnlcLVwtXC1pcyB0byBiZQorZ2VuZXJhdGVkLCBlbmFibGluZyB0aGUgc2VsZWN0aW9uIG9mIHRoZSByZXF1aXJlZCBydW50aW1lCitzdGFydHVwIG9iamVjdCBhbmQgZW50cnkgcG9pbnQuCisuSVAgIlxmQlwtbW5vcFwtZnVuXC1kbGxpbXBvcnRcZlIiIDQKKy5JWCBJdGVtICItbW5vcC1mdW4tZGxsaW1wb3J0IgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBDeWd3aW4gYW5kIE1pbkdXIHRhcmdldHMuICBJdAorc3BlY2lmaWVzIHRoYXQgdGhlIFxmKENXXCooQ2BkbGxpbXBvcnRcKihDJ1xmUiBhdHRyaWJ1dGUgc2hvdWxkIGJlIGlnbm9yZWQuCisuSVAgIlxmQlwtbXRocmVhZFxmUiIgNAorLklYIEl0ZW0gIi1tdGhyZWFkIgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBNaW5HVyB0YXJnZXRzLiBJdCBzcGVjaWZpZXMKK3RoYXQgTWluR1ctc3BlY2lmaWMgdGhyZWFkIHN1cHBvcnQgaXMgdG8gYmUgdXNlZC4KKy5JUCAiXGZCXC1tdW5pY29kZVxmUiIgNAorLklYIEl0ZW0gIi1tdW5pY29kZSIKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgTWluR1dcLXc2NCB0YXJnZXRzLiAgSXQgY2F1c2VzCit0aGUgXGYoQ1dcKihDYFVOSUNPREVcKihDJ1xmUiBwcmVwcm9jZXNzb3IgbWFjcm8gdG8gYmUgcHJlZGVmaW5lZCwgYW5kCitjaG9vc2VzIFVuaWNvZGUtY2FwYWJsZSBydW50aW1lIHN0YXJ0dXAgY29kZS4KKy5JUCAiXGZCXC1td2luMzJcZlIiIDQKKy5JWCBJdGVtICItbXdpbjMyIgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIGZvciBDeWd3aW4gYW5kIE1pbkdXIHRhcmdldHMuICBJdAorc3BlY2lmaWVzIHRoYXQgdGhlIHR5cGljYWwgTWljcm9zb2Z0IFdpbmRvd3MgcHJlZGVmaW5lZCBtYWNyb3MgYXJlIHRvCitiZSBzZXQgaW4gdGhlIHByZS1wcm9jZXNzb3IsIGJ1dCBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGNob2ljZQorb2YgcnVudGltZSBsaWJyYXJ5L3N0YXJ0dXAgY29kZS4KKy5JUCAiXGZCXC1td2luZG93c1xmUiIgNAorLklYIEl0ZW0gIi1td2luZG93cyIKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgQ3lnd2luIGFuZCBNaW5HVyB0YXJnZXRzLiAgSXQKK3NwZWNpZmllcyB0aGF0IGEgXHMtMUdVSVxzMCBhcHBsaWNhdGlvbiBpcyB0byBiZSBnZW5lcmF0ZWQgYnkKK2luc3RydWN0aW5nIHRoZSBsaW5rZXIgdG8gc2V0IHRoZSBccy0xUEVcczAgaGVhZGVyIHN1YnN5c3RlbSB0eXBlCithcHByb3ByaWF0ZWx5LgorLklQICJcZkJcLWZub1wtc2V0XC1zdGFja1wtZXhlY3V0YWJsZVxmUiIgNAorLklYIEl0ZW0gIi1mbm8tc2V0LXN0YWNrLWV4ZWN1dGFibGUiCitUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIE1pbkdXIHRhcmdldHMuIEl0IHNwZWNpZmllcyB0aGF0Cit0aGUgZXhlY3V0YWJsZSBmbGFnIGZvciB0aGUgc3RhY2sgdXNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zIGlzbid0CitzZXQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBiaW5hcmllcyBydW5uaW5nIGluIGtlcm5lbCBtb2RlIG9mCitNaWNyb3NvZnQgV2luZG93cywgYXMgdGhlcmUgdGhlIFVzZXIzMiBccy0xQVBJXHMwLCB3aGljaCBpcyB1c2VkIHRvIHNldCBleGVjdXRhYmxlCitwcml2aWxlZ2VzLCBpc24ndCBhdmFpbGFibGUuCisuSVAgIlxmQlwtZndyaXRhYmxlXC1yZWxvY2F0ZWRcLXJkYXRhXGZSIiA0CisuSVggSXRlbSAiLWZ3cml0YWJsZS1yZWxvY2F0ZWQtcmRhdGEiCitUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIE1pbkdXIGFuZCBDeWd3aW4gdGFyZ2V0cy4gIEl0IHNwZWNpZmllcwordGhhdCByZWxvY2F0ZWQtZGF0YSBpbiByZWFkLW9ubHkgc2VjdGlvbiBpcyBwdXQgaW50byAuZGF0YQorc2VjdGlvbi4gIFRoaXMgaXMgYSBuZWNlc3NhcnkgZm9yIG9sZGVyIHJ1bnRpbWVzIG5vdCBzdXBwb3J0aW5nCittb2RpZmljYXRpb24gb2YgLnJkYXRhIHNlY3Rpb25zIGZvciBwc2V1ZG8tcmVsb2NhdGlvbi4KKy5JUCAiXGZCXC1tcGVcLWFsaWduZWRcLWNvbW1vbnNcZlIiIDQKKy5JWCBJdGVtICItbXBlLWFsaWduZWQtY29tbW9ucyIKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgQ3lnd2luIGFuZCBNaW5HVyB0YXJnZXRzLiAgSXQKK3NwZWNpZmllcyB0aGF0IHRoZSBccy0xR05VXHMwIGV4dGVuc2lvbiB0byB0aGUgXHMtMVBFXHMwIGZpbGUgZm9ybWF0IHRoYXQKK3Blcm1pdHMgdGhlIGNvcnJlY3QgYWxpZ25tZW50IG9mIFxzLTFDT01NT05cczAgdmFyaWFibGVzIHNob3VsZCBiZQordXNlZCB3aGVuIGdlbmVyYXRpbmcgY29kZS4gIEl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZgorXCZccy0xR0NDXHMwIGRldGVjdHMgdGhhdCB0aGUgdGFyZ2V0IGFzc2VtYmxlciBmb3VuZCBkdXJpbmcgY29uZmlndXJhdGlvbgorc3VwcG9ydHMgdGhlIGZlYXR1cmUuCisuUFAKK1NlZSBhbHNvIHVuZGVyIFxmQmkzODYgYW5kIHg4NlwtNjQgT3B0aW9uc1xmUiBmb3Igc3RhbmRhcmQgb3B0aW9ucy4KKy5QUAorXGZJXHMtMUlBXC02NFxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiSUEtNjQgT3B0aW9ucyIKKy5QUAorVGhlc2UgYXJlIHRoZSBcZkJcLW1cZlIgb3B0aW9ucyBkZWZpbmVkIGZvciB0aGUgSW50ZWwgXHMtMUlBXC02NFxzMCBhcmNoaXRlY3R1cmUuCisuSVAgIlxmQlwtbWJpZ1wtZW5kaWFuXGZSIiA0CisuSVggSXRlbSAiLW1iaWctZW5kaWFuIgorR2VuZXJhdGUgY29kZSBmb3IgYSBiaWctZW5kaWFuIHRhcmdldC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIEhQLVVYLgorLklQICJcZkJcLW1saXR0bGVcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tbGl0dGxlLWVuZGlhbiIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgbGl0dGxlLWVuZGlhbiB0YXJnZXQuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBccy0xQUlYNVxzMAorYW5kIEdOVS9MaW51eC4KKy5JUCAiXGZCXC1tZ251XC1hc1xmUiIgNAorLklYIEl0ZW0gIi1tZ251LWFzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWdudVwtYXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWdudS1hcyIKKy5QRAorR2VuZXJhdGUgKG9yIGRvbid0KSBjb2RlIGZvciB0aGUgXHMtMUdOVVxzMCBhc3NlbWJsZXIuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1nbnVcLWxkXGZSIiA0CisuSVggSXRlbSAiLW1nbnUtbGQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZ251XC1sZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZ251LWxkIgorLlBECitHZW5lcmF0ZSAob3IgZG9uJ3QpIGNvZGUgZm9yIHRoZSBccy0xR05VXHMwIGxpbmtlci4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbW5vXC1waWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBpYyIKK0dlbmVyYXRlIGNvZGUgdGhhdCBkb2VzIG5vdCB1c2UgYSBnbG9iYWwgcG9pbnRlciByZWdpc3Rlci4gIFRoZSByZXN1bHQKK2lzIG5vdCBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlLCBhbmQgdmlvbGF0ZXMgdGhlIFxzLTFJQVwtNjRcczAgXHMtMUFCSVxzMC4KKy5JUCAiXGZCXC1tdm9sYXRpbGVcLWFzbVwtc3RvcFxmUiIgNAorLklYIEl0ZW0gIi1tdm9sYXRpbGUtYXNtLXN0b3AiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdm9sYXRpbGVcLWFzbVwtc3RvcFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tdm9sYXRpbGUtYXNtLXN0b3AiCisuUEQKK0dlbmVyYXRlIChvciBkb24ndCkgYSBzdG9wIGJpdCBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIHZvbGF0aWxlIGFzbQorc3RhdGVtZW50cy4KKy5JUCAiXGZCXC1tcmVnaXN0ZXJcLW5hbWVzXGZSIiA0CisuSVggSXRlbSAiLW1yZWdpc3Rlci1uYW1lcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWdpc3RlclwtbmFtZXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXJlZ2lzdGVyLW5hbWVzIgorLlBECitHZW5lcmF0ZSAob3IgZG9uJ3QpIFxmQmluXGZSLCBcZkJsb2NcZlIsIGFuZCBcZkJvdXRcZlIgcmVnaXN0ZXIgbmFtZXMgZm9yCit0aGUgc3RhY2tlZCByZWdpc3RlcnMuICBUaGlzIG1heSBtYWtlIGFzc2VtYmxlciBvdXRwdXQgbW9yZSByZWFkYWJsZS4KKy5JUCAiXGZCXC1tbm9cLXNkYXRhXGZSIiA0CisuSVggSXRlbSAiLW1uby1zZGF0YSIKKy5QRCAwCisuSVAgIlxmQlwtbXNkYXRhXGZSIiA0CisuSVggSXRlbSAiLW1zZGF0YSIKKy5QRAorRGlzYWJsZSAob3IgZW5hYmxlKSBvcHRpbWl6YXRpb25zIHRoYXQgdXNlIHRoZSBzbWFsbCBkYXRhIHNlY3Rpb24uICBUaGlzIG1heQorYmUgdXNlZnVsIGZvciB3b3JraW5nIGFyb3VuZCBvcHRpbWl6ZXIgYnVncy4KKy5JUCAiXGZCXC1tY29uc3RhbnRcLWdwXGZSIiA0CisuSVggSXRlbSAiLW1jb25zdGFudC1ncCIKK0dlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIGEgc2luZ2xlIGNvbnN0YW50IGdsb2JhbCBwb2ludGVyIHZhbHVlLiAgVGhpcyBpcwordXNlZnVsIHdoZW4gY29tcGlsaW5nIGtlcm5lbCBjb2RlLgorLklQICJcZkJcLW1hdXRvXC1waWNcZlIiIDQKKy5JWCBJdGVtICItbWF1dG8tcGljIgorR2VuZXJhdGUgY29kZSB0aGF0IGlzIHNlbGYtcmVsb2NhdGFibGUuICBUaGlzIGltcGxpZXMgXGZCXC1tY29uc3RhbnRcLWdwXGZSLgorVGhpcyBpcyB1c2VmdWwgd2hlbiBjb21waWxpbmcgZmlybXdhcmUgY29kZS4KKy5JUCAiXGZCXC1taW5saW5lXC1mbG9hdFwtZGl2aWRlXC1taW5cLWxhdGVuY3lcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1mbG9hdC1kaXZpZGUtbWluLWxhdGVuY3kiCitHZW5lcmF0ZSBjb2RlIGZvciBpbmxpbmUgZGl2aWRlcyBvZiBmbG9hdGluZy1wb2ludCB2YWx1ZXMKK3VzaW5nIHRoZSBtaW5pbXVtIGxhdGVuY3kgYWxnb3JpdGhtLgorLklQICJcZkJcLW1pbmxpbmVcLWZsb2F0XC1kaXZpZGVcLW1heFwtdGhyb3VnaHB1dFxmUiIgNAorLklYIEl0ZW0gIi1taW5saW5lLWZsb2F0LWRpdmlkZS1tYXgtdGhyb3VnaHB1dCIKK0dlbmVyYXRlIGNvZGUgZm9yIGlubGluZSBkaXZpZGVzIG9mIGZsb2F0aW5nLXBvaW50IHZhbHVlcwordXNpbmcgdGhlIG1heGltdW0gdGhyb3VnaHB1dCBhbGdvcml0aG0uCisuSVAgIlxmQlwtbW5vXC1pbmxpbmVcLWZsb2F0XC1kaXZpZGVcZlIiIDQKKy5JWCBJdGVtICItbW5vLWlubGluZS1mbG9hdC1kaXZpZGUiCitEbyBub3QgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIGRpdmlkZXMgb2YgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorLklQICJcZkJcLW1pbmxpbmVcLWludFwtZGl2aWRlXC1taW5cLWxhdGVuY3lcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1pbnQtZGl2aWRlLW1pbi1sYXRlbmN5IgorR2VuZXJhdGUgY29kZSBmb3IgaW5saW5lIGRpdmlkZXMgb2YgaW50ZWdlciB2YWx1ZXMKK3VzaW5nIHRoZSBtaW5pbXVtIGxhdGVuY3kgYWxnb3JpdGhtLgorLklQICJcZkJcLW1pbmxpbmVcLWludFwtZGl2aWRlXC1tYXhcLXRocm91Z2hwdXRcZlIiIDQKKy5JWCBJdGVtICItbWlubGluZS1pbnQtZGl2aWRlLW1heC10aHJvdWdocHV0IgorR2VuZXJhdGUgY29kZSBmb3IgaW5saW5lIGRpdmlkZXMgb2YgaW50ZWdlciB2YWx1ZXMKK3VzaW5nIHRoZSBtYXhpbXVtIHRocm91Z2hwdXQgYWxnb3JpdGhtLgorLklQICJcZkJcLW1ub1wtaW5saW5lXC1pbnRcLWRpdmlkZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8taW5saW5lLWludC1kaXZpZGUiCitEbyBub3QgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIGRpdmlkZXMgb2YgaW50ZWdlciB2YWx1ZXMuCisuSVAgIlxmQlwtbWlubGluZVwtc3FydFwtbWluXC1sYXRlbmN5XGZSIiA0CisuSVggSXRlbSAiLW1pbmxpbmUtc3FydC1taW4tbGF0ZW5jeSIKK0dlbmVyYXRlIGNvZGUgZm9yIGlubGluZSBzcXVhcmUgcm9vdHMKK3VzaW5nIHRoZSBtaW5pbXVtIGxhdGVuY3kgYWxnb3JpdGhtLgorLklQICJcZkJcLW1pbmxpbmVcLXNxcnRcLW1heFwtdGhyb3VnaHB1dFxmUiIgNAorLklYIEl0ZW0gIi1taW5saW5lLXNxcnQtbWF4LXRocm91Z2hwdXQiCitHZW5lcmF0ZSBjb2RlIGZvciBpbmxpbmUgc3F1YXJlIHJvb3RzCit1c2luZyB0aGUgbWF4aW11bSB0aHJvdWdocHV0IGFsZ29yaXRobS4KKy5JUCAiXGZCXC1tbm9cLWlubGluZVwtc3FydFxmUiIgNAorLklYIEl0ZW0gIi1tbm8taW5saW5lLXNxcnQiCitEbyBub3QgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIFxmKENXXCooQ2BzcXJ0XCooQydcZlIuCisuSVAgIlxmQlwtbWZ1c2VkXC1tYWRkXGZSIiA0CisuSVggSXRlbSAiLW1mdXNlZC1tYWRkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZ1c2VkXC1tYWRkXGZSIiA0CisuSVggSXRlbSAiLW1uby1mdXNlZC1tYWRkIgorLlBECitEbyAoZG9uJ3QpIGdlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIHRoZSBmdXNlZCBtdWx0aXBseS9hZGQgb3IgbXVsdGlwbHkvc3VidHJhY3QKK2luc3RydWN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGVzZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW5vXC1kd2FyZjJcLWFzbVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZHdhcmYyLWFzbSIKKy5QRCAwCisuSVAgIlxmQlwtbWR3YXJmMlwtYXNtXGZSIiA0CisuSVggSXRlbSAiLW1kd2FyZjItYXNtIgorLlBECitEb24ndCAob3IgZG8pIGdlbmVyYXRlIGFzc2VtYmxlciBjb2RlIGZvciB0aGUgXHMtMURXQVJGXHMwIDIgbGluZSBudW1iZXIgZGVidWdnaW5nCitpbmZvLiAgVGhpcyBtYXkgYmUgdXNlZnVsIHdoZW4gbm90IHVzaW5nIHRoZSBccy0xR05VXHMwIGFzc2VtYmxlci4KKy5JUCAiXGZCXC1tZWFybHlcLXN0b3BcLWJpdHNcZlIiIDQKKy5JWCBJdGVtICItbWVhcmx5LXN0b3AtYml0cyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1lYXJseVwtc3RvcFwtYml0c1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZWFybHktc3RvcC1iaXRzIgorLlBECitBbGxvdyBzdG9wIGJpdHMgdG8gYmUgcGxhY2VkIGVhcmxpZXIgdGhhbiBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlCitpbnN0cnVjdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgc3RvcCBiaXQuICBUaGlzIGNhbiBpbXByb3ZlIGluc3RydWN0aW9uCitzY2hlZHVsaW5nLCBidXQgZG9lcyBub3QgYWx3YXlzIGRvIHNvLgorLklQICJcZkJcLW1maXhlZFwtcmFuZ2U9XGZSXGZJcmVnaXN0ZXItcmFuZ2VcZlIiIDQKKy5JWCBJdGVtICItbWZpeGVkLXJhbmdlPXJlZ2lzdGVyLXJhbmdlIgorR2VuZXJhdGUgY29kZSB0cmVhdGluZyB0aGUgZ2l2ZW4gcmVnaXN0ZXIgcmFuZ2UgYXMgZml4ZWQgcmVnaXN0ZXJzLgorQSBmaXhlZCByZWdpc3RlciBpcyBvbmUgdGhhdCB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGNhbm5vdCB1c2UuICBUaGlzIGlzCit1c2VmdWwgd2hlbiBjb21waWxpbmcga2VybmVsIGNvZGUuICBBIHJlZ2lzdGVyIHJhbmdlIGlzIHNwZWNpZmllZCBhcwordHdvIHJlZ2lzdGVycyBzZXBhcmF0ZWQgYnkgYSBkYXNoLiAgTXVsdGlwbGUgcmVnaXN0ZXIgcmFuZ2VzIGNhbiBiZQorc3BlY2lmaWVkIHNlcGFyYXRlZCBieSBhIGNvbW1hLgorLklQICJcZkJcLW10bHNcLXNpemU9XGZSXGZJdGxzLXNpemVcZlIiIDQKKy5JWCBJdGVtICItbXRscy1zaXplPXRscy1zaXplIgorU3BlY2lmeSBiaXQgc2l6ZSBvZiBpbW1lZGlhdGUgXHMtMVRMU1xzMCBvZmZzZXRzLiAgVmFsaWQgdmFsdWVzIGFyZSAxNCwgMjIsIGFuZAorNjQuCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9Y3B1LXR5cGUiCitUdW5lIHRoZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIGZvciBhIHBhcnRpY3VsYXIgXHMtMUNQVVxzMCwgVmFsaWQgdmFsdWVzIGFyZQorXCZcZkJpdGFuaXVtXGZSLCBcZkJpdGFuaXVtMVxmUiwgXGZCbWVyY2VkXGZSLCBcZkJpdGFuaXVtMlxmUiwKK2FuZCBcZkJtY2tpbmxleVxmUi4KKy5JUCAiXGZCXC1taWxwMzJcZlIiIDQKKy5JWCBJdGVtICItbWlscDMyIgorLlBEIDAKKy5JUCAiXGZCXC1tbHA2NFxmUiIgNAorLklYIEl0ZW0gIi1tbHA2NCIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgYSAzMlwtYml0IG9yIDY0XC1iaXQgZW52aXJvbm1lbnQuCitUaGUgMzJcLWJpdCBlbnZpcm9ubWVudCBzZXRzIGludCwgbG9uZyBhbmQgcG9pbnRlciB0byAzMiBiaXRzLgorVGhlIDY0XC1iaXQgZW52aXJvbm1lbnQgc2V0cyBpbnQgdG8gMzIgYml0cyBhbmQgbG9uZyBhbmQgcG9pbnRlcgordG8gNjQgYml0cy4gIFRoZXNlIGFyZSBIUC1VWCBzcGVjaWZpYyBmbGFncy4KKy5JUCAiXGZCXC1tbm9cLXNjaGVkXC1iclwtZGF0YVwtc3BlY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2NoZWQtYnItZGF0YS1zcGVjIgorLlBEIDAKKy5JUCAiXGZCXC1tc2NoZWRcLWJyXC1kYXRhXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1ici1kYXRhLXNwZWMiCisuUEQKKyhEaXMvRW4pYWJsZSBkYXRhIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcgYmVmb3JlIHJlbG9hZC4KK1RoaXMgcmVzdWx0cyBpbiBnZW5lcmF0aW9uIG9mIFxmKENXXCooQ2BsZC5hXCooQydcZlIgaW5zdHJ1Y3Rpb25zIGFuZAordGhlIGNvcnJlc3BvbmRpbmcgY2hlY2sgaW5zdHJ1Y3Rpb25zIChcZihDV1wqKENgbGQuY1wqKEMnXGZSIC8gXGYoQ1dcKihDYGNoay5hXCooQydcZlIpLgorVGhlIGRlZmF1bHQgaXMgJ2Rpc2FibGUnLgorLklQICJcZkJcLW1zY2hlZFwtYXJcLWRhdGFcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLWFyLWRhdGEtc3BlYyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zY2hlZFwtYXJcLWRhdGFcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLWFyLWRhdGEtc3BlYyIKKy5QRAorKEVuL0RpcylhYmxlIGRhdGEgc3BlY3VsYXRpdmUgc2NoZWR1bGluZyBhZnRlciByZWxvYWQuCitUaGlzIHJlc3VsdHMgaW4gZ2VuZXJhdGlvbiBvZiBcZihDV1wqKENgbGQuYVwqKEMnXGZSIGluc3RydWN0aW9ucyBhbmQKK3RoZSBjb3JyZXNwb25kaW5nIGNoZWNrIGluc3RydWN0aW9ucyAoXGYoQ1dcKihDYGxkLmNcKihDJ1xmUiAvIFxmKENXXCooQ2BjaGsuYVwqKEMnXGZSKS4KK1RoZSBkZWZhdWx0IGlzICdlbmFibGUnLgorLklQICJcZkJcLW1ub1wtc2NoZWRcLWNvbnRyb2xcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLWNvbnRyb2wtc3BlYyIKKy5QRCAwCisuSVAgIlxmQlwtbXNjaGVkXC1jb250cm9sXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1jb250cm9sLXNwZWMiCisuUEQKKyhEaXMvRW4pYWJsZSBjb250cm9sIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcuICBUaGlzIGZlYXR1cmUgaXMKK2F2YWlsYWJsZSBvbmx5IGR1cmluZyByZWdpb24gc2NoZWR1bGluZyAoaS5lLiBiZWZvcmUgcmVsb2FkKS4KK1RoaXMgcmVzdWx0cyBpbiBnZW5lcmF0aW9uIG9mIHRoZSBcZihDV1wqKENgbGQuc1wqKEMnXGZSIGluc3RydWN0aW9ucyBhbmQKK3RoZSBjb3JyZXNwb25kaW5nIGNoZWNrIGluc3RydWN0aW9ucyBcZihDV1wqKENgY2hrLnNcKihDJ1xmUi4KK1RoZSBkZWZhdWx0IGlzICdkaXNhYmxlJy4KKy5JUCAiXGZCXC1tc2NoZWRcLWJyXC1pblwtZGF0YVwtc3BlY1xmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtYnItaW4tZGF0YS1zcGVjIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNjaGVkXC1iclwtaW5cLWRhdGFcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLWJyLWluLWRhdGEtc3BlYyIKKy5QRAorKEVuL0RpcylhYmxlIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcgb2YgdGhlIGluc3RydWN0aW9ucyB0aGF0CithcmUgZGVwZW5kZW50IG9uIHRoZSBkYXRhIHNwZWN1bGF0aXZlIGxvYWRzIGJlZm9yZSByZWxvYWQuCitUaGlzIGlzIGVmZmVjdGl2ZSBvbmx5IHdpdGggXGZCXC1tc2NoZWRcLWJyXC1kYXRhXC1zcGVjXGZSIGVuYWJsZWQuCitUaGUgZGVmYXVsdCBpcyAnZW5hYmxlJy4KKy5JUCAiXGZCXC1tc2NoZWRcLWFyXC1pblwtZGF0YVwtc3BlY1xmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtYXItaW4tZGF0YS1zcGVjIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNjaGVkXC1hclwtaW5cLWRhdGFcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLWFyLWluLWRhdGEtc3BlYyIKKy5QRAorKEVuL0RpcylhYmxlIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcgb2YgdGhlIGluc3RydWN0aW9ucyB0aGF0CithcmUgZGVwZW5kZW50IG9uIHRoZSBkYXRhIHNwZWN1bGF0aXZlIGxvYWRzIGFmdGVyIHJlbG9hZC4KK1RoaXMgaXMgZWZmZWN0aXZlIG9ubHkgd2l0aCBcZkJcLW1zY2hlZFwtYXJcLWRhdGFcLXNwZWNcZlIgZW5hYmxlZC4KK1RoZSBkZWZhdWx0IGlzICdlbmFibGUnLgorLklQICJcZkJcLW1zY2hlZFwtaW5cLWNvbnRyb2xcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLWluLWNvbnRyb2wtc3BlYyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zY2hlZFwtaW5cLWNvbnRyb2xcLXNwZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLWluLWNvbnRyb2wtc3BlYyIKKy5QRAorKEVuL0RpcylhYmxlIHNwZWN1bGF0aXZlIHNjaGVkdWxpbmcgb2YgdGhlIGluc3RydWN0aW9ucyB0aGF0CithcmUgZGVwZW5kZW50IG9uIHRoZSBjb250cm9sIHNwZWN1bGF0aXZlIGxvYWRzLgorVGhpcyBpcyBlZmZlY3RpdmUgb25seSB3aXRoIFxmQlwtbXNjaGVkXC1jb250cm9sXC1zcGVjXGZSIGVuYWJsZWQuCitUaGUgZGVmYXVsdCBpcyAnZW5hYmxlJy4KKy5JUCAiXGZCXC1tbm9cLXNjaGVkXC1wcmVmZXJcLW5vblwtZGF0YVwtc3BlY1wtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLXByZWZlci1ub24tZGF0YS1zcGVjLWluc25zIgorLlBEIDAKKy5JUCAiXGZCXC1tc2NoZWRcLXByZWZlclwtbm9uXC1kYXRhXC1zcGVjXC1pbnNuc1xmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtcHJlZmVyLW5vbi1kYXRhLXNwZWMtaW5zbnMiCisuUEQKK0lmIGVuYWJsZWQsIGRhdGEtc3BlY3VsYXRpdmUgaW5zdHJ1Y3Rpb25zIGFyZSBjaG9zZW4gZm9yIHNjaGVkdWxlCitvbmx5IGlmIHRoZXJlIGFyZSBubyBvdGhlciBjaG9pY2VzIGF0IHRoZSBtb21lbnQuICBUaGlzIG1ha2VzCit0aGUgdXNlIG9mIHRoZSBkYXRhIHNwZWN1bGF0aW9uIG11Y2ggbW9yZSBjb25zZXJ2YXRpdmUuCitUaGUgZGVmYXVsdCBpcyAnZGlzYWJsZScuCisuSVAgIlxmQlwtbW5vXC1zY2hlZFwtcHJlZmVyXC1ub25cLWNvbnRyb2xcLXNwZWNcLWluc25zXGZSIiA0CisuSVggSXRlbSAiLW1uby1zY2hlZC1wcmVmZXItbm9uLWNvbnRyb2wtc3BlYy1pbnNucyIKKy5QRCAwCisuSVAgIlxmQlwtbXNjaGVkXC1wcmVmZXJcLW5vblwtY29udHJvbFwtc3BlY1wtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLXByZWZlci1ub24tY29udHJvbC1zcGVjLWluc25zIgorLlBECitJZiBlbmFibGVkLCBjb250cm9sLXNwZWN1bGF0aXZlIGluc3RydWN0aW9ucyBhcmUgY2hvc2VuIGZvciBzY2hlZHVsZQorb25seSBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgY2hvaWNlcyBhdCB0aGUgbW9tZW50LiAgVGhpcyBtYWtlcwordGhlIHVzZSBvZiB0aGUgY29udHJvbCBzcGVjdWxhdGlvbiBtdWNoIG1vcmUgY29uc2VydmF0aXZlLgorVGhlIGRlZmF1bHQgaXMgJ2Rpc2FibGUnLgorLklQICJcZkJcLW1ub1wtc2NoZWRcLWNvdW50XC1zcGVjXC1pblwtY3JpdGljYWxcLXBhdGhcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNjaGVkLWNvdW50LXNwZWMtaW4tY3JpdGljYWwtcGF0aCIKKy5QRCAwCisuSVAgIlxmQlwtbXNjaGVkXC1jb3VudFwtc3BlY1wtaW5cLWNyaXRpY2FsXC1wYXRoXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1jb3VudC1zcGVjLWluLWNyaXRpY2FsLXBhdGgiCisuUEQKK0lmIGVuYWJsZWQsIHNwZWN1bGF0aXZlIGRlcGVuZGVuY2llcyBhcmUgY29uc2lkZXJlZCBkdXJpbmcKK2NvbXB1dGF0aW9uIG9mIHRoZSBpbnN0cnVjdGlvbnMgcHJpb3JpdGllcy4gIFRoaXMgbWFrZXMgdGhlIHVzZSBvZiB0aGUKK3NwZWN1bGF0aW9uIGEgYml0IG1vcmUgY29uc2VydmF0aXZlLgorVGhlIGRlZmF1bHQgaXMgJ2Rpc2FibGUnLgorLklQICJcZkJcLW1zY2hlZFwtc3BlY1wtbGRjXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1zcGVjLWxkYyIKK1VzZSBhIHNpbXBsZSBkYXRhIHNwZWN1bGF0aW9uIGNoZWNrLiAgVGhpcyBvcHRpb24gaXMgb24gYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tc2NoZWRcLWNvbnRyb2xcLXNwZWNcLWxkY1xmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtY29udHJvbC1zcGVjLWxkYyIKK1VzZSBhIHNpbXBsZSBjaGVjayBmb3IgY29udHJvbCBzcGVjdWxhdGlvbi4gIFRoaXMgb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbXNjaGVkXC1zdG9wXC1iaXRzXC1hZnRlclwtZXZlcnlcLWN5Y2xlXGZSIiA0CisuSVggSXRlbSAiLW1zY2hlZC1zdG9wLWJpdHMtYWZ0ZXItZXZlcnktY3ljbGUiCitQbGFjZSBhIHN0b3AgYml0IGFmdGVyIGV2ZXJ5IGN5Y2xlIHdoZW4gc2NoZWR1bGluZy4gIFRoaXMgb3B0aW9uIGlzIG9uCitieSBkZWZhdWx0LgorLklQICJcZkJcLW1zY2hlZFwtZnBcLW1lbVwtZGVwc1wtemVyb1wtY29zdFxmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtZnAtbWVtLWRlcHMtemVyby1jb3N0IgorQXNzdW1lIHRoYXQgZmxvYXRpbmctcG9pbnQgc3RvcmVzIGFuZCBsb2FkcyBhcmUgbm90IGxpa2VseSB0byBjYXVzZSBhIGNvbmZsaWN0Cit3aGVuIHBsYWNlZCBpbnRvIHRoZSBzYW1lIGluc3RydWN0aW9uIGdyb3VwLiAgVGhpcyBvcHRpb24gaXMgZGlzYWJsZWQgYnkKK2RlZmF1bHQuCisuSVAgIlxmQlwtbXNlbFwtc2NoZWRcLWRvbnRcLWNoZWNrXC1jb250cm9sXC1zcGVjXGZSIiA0CisuSVggSXRlbSAiLW1zZWwtc2NoZWQtZG9udC1jaGVjay1jb250cm9sLXNwZWMiCitHZW5lcmF0ZSBjaGVja3MgZm9yIGNvbnRyb2wgc3BlY3VsYXRpb24gaW4gc2VsZWN0aXZlIHNjaGVkdWxpbmcuCitUaGlzIGZsYWcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tc2NoZWRcLW1heFwtbWVtb3J5XC1pbnNucz1cZlJcZkltYXgtaW5zbnNcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLW1heC1tZW1vcnktaW5zbnM9bWF4LWluc25zIgorTGltaXQgb24gdGhlIG51bWJlciBvZiBtZW1vcnkgaW5zbnMgcGVyIGluc3RydWN0aW9uIGdyb3VwLCBnaXZpbmcgbG93ZXIKK3ByaW9yaXR5IHRvIHN1YnNlcXVlbnQgbWVtb3J5IGluc25zIGF0dGVtcHRpbmcgdG8gc2NoZWR1bGUgaW4gdGhlIHNhbWUKK2luc3RydWN0aW9uIGdyb3VwLiBGcmVxdWVudGx5IHVzZWZ1bCB0byBwcmV2ZW50IGNhY2hlIGJhbmsgY29uZmxpY3RzLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4KKy5JUCAiXGZCXC1tc2NoZWRcLW1heFwtbWVtb3J5XC1pbnNuc1wtaGFyZFwtbGltaXRcZlIiIDQKKy5JWCBJdGVtICItbXNjaGVkLW1heC1tZW1vcnktaW5zbnMtaGFyZC1saW1pdCIKK01ha2VzIHRoZSBsaW1pdCBzcGVjaWZpZWQgYnkgXGZCbXNjaGVkLW1heC1tZW1vcnktaW5zbnNcZlIgYSBoYXJkIGxpbWl0LAorZGlzYWxsb3dpbmcgbW9yZSB0aGFuIHRoYXQgbnVtYmVyIGluIGFuIGluc3RydWN0aW9uIGdyb3VwLgorT3RoZXJ3aXNlLCB0aGUgbGltaXQgaXMgXCooTCJzb2Z0XCooUiIsIG1lYW5pbmcgdGhhdCBub24tbWVtb3J5IG9wZXJhdGlvbnMKK2FyZSBwcmVmZXJyZWQgd2hlbiB0aGUgbGltaXQgaXMgcmVhY2hlZCwgYnV0IG1lbW9yeSBvcGVyYXRpb25zIG1heSBzdGlsbAorYmUgc2NoZWR1bGVkLgorLlBQCitcZklccy0xTE0zMlxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTE0zMiBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIExhdHRpY2VNaWNvMzIgYXJjaGl0ZWN0dXJlOgorLklQICJcZkJcLW1iYXJyZWxcLXNoaWZ0XC1lbmFibGVkXGZSIiA0CisuSVggSXRlbSAiLW1iYXJyZWwtc2hpZnQtZW5hYmxlZCIKK0VuYWJsZSBiYXJyZWwtc2hpZnQgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1kaXZpZGVcLWVuYWJsZWRcZlIiIDQKKy5JWCBJdGVtICItbWRpdmlkZS1lbmFibGVkIgorRW5hYmxlIGRpdmlkZSBhbmQgbW9kdWx1cyBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW11bHRpcGx5XC1lbmFibGVkXGZSIiA0CisuSVggSXRlbSAiLW1tdWx0aXBseS1lbmFibGVkIgorRW5hYmxlIG11bHRpcGx5IGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tc2lnblwtZXh0ZW5kXC1lbmFibGVkXGZSIiA0CisuSVggSXRlbSAiLW1zaWduLWV4dGVuZC1lbmFibGVkIgorRW5hYmxlIHNpZ24gZXh0ZW5kIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tdXNlclwtZW5hYmxlZFxmUiIgNAorLklYIEl0ZW0gIi1tdXNlci1lbmFibGVkIgorRW5hYmxlIHVzZXItZGVmaW5lZCBpbnN0cnVjdGlvbnMuCisuUFAKK1xmSU0zMkMgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIk0zMkMgT3B0aW9ucyIKKy5JUCAiXGZCXC1tY3B1PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1uYW1lIgorU2VsZWN0IHRoZSBccy0xQ1BVXHMwIGZvciB3aGljaCBjb2RlIGlzIGdlbmVyYXRlZC4gIFxmSW5hbWVcZlIgbWF5IGJlIG9uZSBvZgorXCZcZkJyOGNcZlIgZm9yIHRoZSBSOEMvVGlueSBzZXJpZXMsIFxmQm0xNmNcZlIgZm9yIHRoZSBNMTZDICh1cCB0bworLzYwKSBzZXJpZXMsIFxmQm0zMmNtXGZSIGZvciB0aGUgTTE2Qy84MCBzZXJpZXMsIG9yIFxmQm0zMmNcZlIgZm9yCit0aGUgTTMyQy84MCBzZXJpZXMuCisuSVAgIlxmQlwtbXNpbVxmUiIgNAorLklYIEl0ZW0gIi1tc2ltIgorU3BlY2lmaWVzIHRoYXQgdGhlIHByb2dyYW0gd2lsbCBiZSBydW4gb24gdGhlIHNpbXVsYXRvci4gIFRoaXMgY2F1c2VzCithbiBhbHRlcm5hdGUgcnVudGltZSBsaWJyYXJ5IHRvIGJlIGxpbmtlZCBpbiB3aGljaCBzdXBwb3J0cywgZm9yCitleGFtcGxlLCBmaWxlIEkvTy4gIFlvdSBtdXN0IG5vdCB1c2UgdGhpcyBvcHRpb24gd2hlbiBnZW5lcmF0aW5nCitwcm9ncmFtcyB0aGF0IHdpbGwgcnVuIG9uIHJlYWwgaGFyZHdhcmU7IHlvdSBtdXN0IHByb3ZpZGUgeW91ciBvd24KK3J1bnRpbWUgbGlicmFyeSBmb3Igd2hhdGV2ZXIgSS9PIGZ1bmN0aW9ucyBhcmUgbmVlZGVkLgorLklQICJcZkJcLW1lbXJlZ3M9XGZSXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAiLW1lbXJlZ3M9bnVtYmVyIgorU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgbWVtb3J5LWJhc2VkIHBzZXVkby1yZWdpc3RlcnMgXHMtMUdDQ1xzMCB1c2VzCitkdXJpbmcgY29kZSBnZW5lcmF0aW9uLiAgVGhlc2UgcHNldWRvLXJlZ2lzdGVycyBhcmUgdXNlZCBsaWtlIHJlYWwKK3JlZ2lzdGVycywgc28gdGhlcmUgaXMgYSB0cmFkZW9mZiBiZXR3ZWVuIFxzLTFHQ0NcczAncyBhYmlsaXR5IHRvIGZpdCB0aGUKK2NvZGUgaW50byBhdmFpbGFibGUgcmVnaXN0ZXJzLCBhbmQgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgdXNpbmcKK21lbW9yeSBpbnN0ZWFkIG9mIHJlZ2lzdGVycy4gIE5vdGUgdGhhdCBhbGwgbW9kdWxlcyBpbiBhIHByb2dyYW0gbXVzdAorYmUgY29tcGlsZWQgd2l0aCB0aGUgc2FtZSB2YWx1ZSBmb3IgdGhpcyBvcHRpb24uICBCZWNhdXNlIG9mIHRoYXQsIHlvdQorbXVzdCBub3QgdXNlIHRoaXMgb3B0aW9uIHdpdGggXHMtMUdDQ1xzMCdzIGRlZmF1bHQgcnVudGltZSBsaWJyYXJpZXMuCisuUFAKK1xmSU0zMlIvRCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTTMyUi9EIE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBSZW5lc2FzIE0zMlIvRCBhcmNoaXRlY3R1cmVzOgorLklQICJcZkJcLW0zMnIyXGZSIiA0CisuSVggSXRlbSAiLW0zMnIyIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIE0zMlIvMi4KKy5JUCAiXGZCXC1tMzJyeFxmUiIgNAorLklYIEl0ZW0gIi1tMzJyeCIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBNMzJSL1guCisuSVAgIlxmQlwtbTMyclxmUiIgNAorLklYIEl0ZW0gIi1tMzJyIgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIE0zMlIuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1tb2RlbD1zbWFsbFxmUiIgNAorLklYIEl0ZW0gIi1tbW9kZWw9c21hbGwiCitBc3N1bWUgYWxsIG9iamVjdHMgbGl2ZSBpbiB0aGUgbG93ZXIgMTZNQiBvZiBtZW1vcnkgKHNvIHRoYXQgdGhlaXIgYWRkcmVzc2VzCitjYW4gYmUgbG9hZGVkIHdpdGggdGhlIFxmKENXXCooQ2BsZDI0XCooQydcZlIgaW5zdHJ1Y3Rpb24pLCBhbmQgYXNzdW1lIGFsbCBzdWJyb3V0aW5lcworYXJlIHJlYWNoYWJsZSB3aXRoIHRoZSBcZihDV1wqKENgYmxcKihDJ1xmUiBpbnN0cnVjdGlvbi4KK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisuU3AKK1RoZSBhZGRyZXNzYWJpbGl0eSBvZiBhIHBhcnRpY3VsYXIgb2JqZWN0IGNhbiBiZSBzZXQgd2l0aCB0aGUKK1wmXGYoQ1dcKihDYG1vZGVsXCooQydcZlIgYXR0cmlidXRlLgorLklQICJcZkJcLW1tb2RlbD1tZWRpdW1cZlIiIDQKKy5JWCBJdGVtICItbW1vZGVsPW1lZGl1bSIKK0Fzc3VtZSBvYmplY3RzIG1heSBiZSBhbnl3aGVyZSBpbiB0aGUgMzJcLWJpdCBhZGRyZXNzIHNwYWNlICh0aGUgY29tcGlsZXIKK2dlbmVyYXRlcyBcZihDV1wqKENgc2V0aC9hZGQzXCooQydcZlIgaW5zdHJ1Y3Rpb25zIHRvIGxvYWQgdGhlaXIgYWRkcmVzc2VzKSwgYW5kCithc3N1bWUgYWxsIHN1YnJvdXRpbmVzIGFyZSByZWFjaGFibGUgd2l0aCB0aGUgXGYoQ1dcKihDYGJsXCooQydcZlIgaW5zdHJ1Y3Rpb24uCisuSVAgIlxmQlwtbW1vZGVsPWxhcmdlXGZSIiA0CisuSVggSXRlbSAiLW1tb2RlbD1sYXJnZSIKK0Fzc3VtZSBvYmplY3RzIG1heSBiZSBhbnl3aGVyZSBpbiB0aGUgMzJcLWJpdCBhZGRyZXNzIHNwYWNlICh0aGUgY29tcGlsZXIKK2dlbmVyYXRlcyBcZihDV1wqKENgc2V0aC9hZGQzXCooQydcZlIgaW5zdHJ1Y3Rpb25zIHRvIGxvYWQgdGhlaXIgYWRkcmVzc2VzKSwgYW5kCithc3N1bWUgc3Vicm91dGluZXMgbWF5IG5vdCBiZSByZWFjaGFibGUgd2l0aCB0aGUgXGYoQ1dcKihDYGJsXCooQydcZlIgaW5zdHJ1Y3Rpb24KKyh0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIHRoZSBtdWNoIHNsb3dlciBcZihDV1wqKENgc2V0aC9hZGQzL2psXCooQydcZlIKK2luc3RydWN0aW9uIHNlcXVlbmNlKS4KKy5JUCAiXGZCXC1tc2RhdGE9bm9uZVxmUiIgNAorLklYIEl0ZW0gIi1tc2RhdGE9bm9uZSIKK0Rpc2FibGUgdXNlIG9mIHRoZSBzbWFsbCBkYXRhIGFyZWEuICBWYXJpYWJsZXMgYXJlIHB1dCBpbnRvCitvbmUgb2YgXGZCLmRhdGFcZlIsIFxmQi5ic3NcZlIsIG9yIFxmQi5yb2RhdGFcZlIgKHVubGVzcyB0aGUKK1wmXGYoQ1dcKihDYHNlY3Rpb25cKihDJ1xmUiBhdHRyaWJ1dGUgaGFzIGJlZW4gc3BlY2lmaWVkKS4KK1RoaXMgaXMgdGhlIGRlZmF1bHQuCisuU3AKK1RoZSBzbWFsbCBkYXRhIGFyZWEgY29uc2lzdHMgb2Ygc2VjdGlvbnMgXGZCLnNkYXRhXGZSIGFuZCBcZkIuc2Jzc1xmUi4KK09iamVjdHMgbWF5IGJlIGV4cGxpY2l0bHkgcHV0IGluIHRoZSBzbWFsbCBkYXRhIGFyZWEgd2l0aCB0aGUKK1wmXGYoQ1dcKihDYHNlY3Rpb25cKihDJ1xmUiBhdHRyaWJ1dGUgdXNpbmcgb25lIG9mIHRoZXNlIHNlY3Rpb25zLgorLklQICJcZkJcLW1zZGF0YT1zZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tc2RhdGE9c2RhdGEiCitQdXQgc21hbGwgZ2xvYmFsIGFuZCBzdGF0aWMgZGF0YSBpbiB0aGUgc21hbGwgZGF0YSBhcmVhLCBidXQgZG8gbm90CitnZW5lcmF0ZSBzcGVjaWFsIGNvZGUgdG8gcmVmZXJlbmNlIHRoZW0uCisuSVAgIlxmQlwtbXNkYXRhPXVzZVxmUiIgNAorLklYIEl0ZW0gIi1tc2RhdGE9dXNlIgorUHV0IHNtYWxsIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlIHNtYWxsIGRhdGEgYXJlYSwgYW5kIGdlbmVyYXRlCitzcGVjaWFsIGluc3RydWN0aW9ucyB0byByZWZlcmVuY2UgdGhlbS4KKy5JUCAiXGZCXC1HXGZSIFxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1HIG51bSIKK1B1dCBnbG9iYWwgYW5kIHN0YXRpYyBvYmplY3RzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBcZkludW1cZlIgYnl0ZXMKK2ludG8gdGhlIHNtYWxsIGRhdGEgb3IgXHMtMUJTU1xzMCBzZWN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgZGF0YSBvciBccy0xQlNTXHMwCitzZWN0aW9ucy4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIFxmSW51bVxmUiBpcyA4LgorVGhlIFxmQlwtbXNkYXRhXGZSIG9wdGlvbiBtdXN0IGJlIHNldCB0byBvbmUgb2YgXGZCc2RhdGFcZlIgb3IgXGZCdXNlXGZSCitmb3IgdGhpcyBvcHRpb24gdG8gaGF2ZSBhbnkgZWZmZWN0LgorLlNwCitBbGwgbW9kdWxlcyBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCB0aGUgc2FtZSBcZkJcLUdcZlIgXGZJbnVtXGZSIHZhbHVlLgorQ29tcGlsaW5nIHdpdGggZGlmZmVyZW50IHZhbHVlcyBvZiBcZkludW1cZlIgbWF5IG9yIG1heSBub3Qgd29yazsgaWYgaXQKK2RvZXNuJ3QgdGhlIGxpbmtlciBnaXZlcyBhbiBlcnJvciBtZXNzYWdlXC1cLVwtaW5jb3JyZWN0IGNvZGUgaXMgbm90CitnZW5lcmF0ZWQuCisuSVAgIlxmQlwtbWRlYnVnXGZSIiA0CisuSVggSXRlbSAiLW1kZWJ1ZyIKK01ha2VzIHRoZSBNMzJSXC1zcGVjaWZpYyBjb2RlIGluIHRoZSBjb21waWxlciBkaXNwbGF5IHNvbWUgc3RhdGlzdGljcwordGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZyBwcm9ncmFtcy4KKy5JUCAiXGZCXC1tYWxpZ25cLWxvb3BzXGZSIiA0CisuSVggSXRlbSAiLW1hbGlnbi1sb29wcyIKK0FsaWduIGFsbCBsb29wcyB0byBhIDMyXC1ieXRlIGJvdW5kYXJ5LgorLklQICJcZkJcLW1ub1wtYWxpZ25cLWxvb3BzXGZSIiA0CisuSVggSXRlbSAiLW1uby1hbGlnbi1sb29wcyIKK0RvIG5vdCBlbmZvcmNlIGEgMzJcLWJ5dGUgYWxpZ25tZW50IGZvciBsb29wcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWlzc3VlXC1yYXRlPVxmUlxmSW51bWJlclxmUiIgNAorLklYIEl0ZW0gIi1taXNzdWUtcmF0ZT1udW1iZXIiCitJc3N1ZSBcZkludW1iZXJcZlIgaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZS4gIFxmSW51bWJlclxmUiBjYW4gb25seSBiZSAxCitvciAyLgorLklQICJcZkJcLW1icmFuY2hcLWNvc3Q9XGZSXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAiLW1icmFuY2gtY29zdD1udW1iZXIiCitcJlxmSW51bWJlclxmUiBjYW4gb25seSBiZSAxIG9yIDIuICBJZiBpdCBpcyAxIHRoZW4gYnJhbmNoZXMgYXJlCitwcmVmZXJyZWQgb3ZlciBjb25kaXRpb25hbCBjb2RlLCBpZiBpdCBpcyAyLCB0aGVuIHRoZSBvcHBvc2l0ZSBhcHBsaWVzLgorLklQICJcZkJcLW1mbHVzaFwtdHJhcD1cZlJcZkludW1iZXJcZlIiIDQKKy5JWCBJdGVtICItbWZsdXNoLXRyYXA9bnVtYmVyIgorU3BlY2lmaWVzIHRoZSB0cmFwIG51bWJlciB0byB1c2UgdG8gZmx1c2ggdGhlIGNhY2hlLiAgVGhlIGRlZmF1bHQgaXMKKzEyLiAgVmFsaWQgbnVtYmVycyBhcmUgYmV0d2VlbiAwIGFuZCAxNSBpbmNsdXNpdmUuCisuSVAgIlxmQlwtbW5vXC1mbHVzaFwtdHJhcFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZmx1c2gtdHJhcCIKK1NwZWNpZmllcyB0aGF0IHRoZSBjYWNoZSBjYW5ub3QgYmUgZmx1c2hlZCBieSB1c2luZyBhIHRyYXAuCisuSVAgIlxmQlwtbWZsdXNoXC1mdW5jPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWZsdXNoLWZ1bmM9bmFtZSIKK1NwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBmdW5jdGlvbiB0byBjYWxsIHRvIGZsdXNoCit0aGUgY2FjaGUuICBUaGUgZGVmYXVsdCBpcyBcZklfZmx1c2hfY2FjaGVcZlIsIGJ1dCBhIGZ1bmN0aW9uIGNhbGwKK2lzIG9ubHkgdXNlZCBpZiBhIHRyYXAgaXMgbm90IGF2YWlsYWJsZS4KKy5JUCAiXGZCXC1tbm9cLWZsdXNoXC1mdW5jXGZSIiA0CisuSVggSXRlbSAiLW1uby1mbHVzaC1mdW5jIgorSW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbm8gXHMtMU9TXHMwIGZ1bmN0aW9uIGZvciBmbHVzaGluZyB0aGUgY2FjaGUuCisuUFAKK1xmSU02ODB4MCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTTY4MHgwIE9wdGlvbnMiCisuUFAKK1RoZXNlIGFyZSB0aGUgXGZCXC1tXGZSIG9wdGlvbnMgZGVmaW5lZCBmb3IgTTY4MHgwIGFuZCBDb2xkRmlyZSBwcm9jZXNzb3JzLgorVGhlIGRlZmF1bHQgc2V0dGluZ3MgZGVwZW5kIG9uIHdoaWNoIGFyY2hpdGVjdHVyZSB3YXMgc2VsZWN0ZWQgd2hlbgordGhlIGNvbXBpbGVyIHdhcyBjb25maWd1cmVkOyB0aGUgZGVmYXVsdHMgZm9yIHRoZSBtb3N0IGNvbW1vbiBjaG9pY2VzCithcmUgZ2l2ZW4gYmVsb3cuCisuSVAgIlxmQlwtbWFyY2g9XGZSXGZJYXJjaFxmUiIgNAorLklYIEl0ZW0gIi1tYXJjaD1hcmNoIgorR2VuZXJhdGUgY29kZSBmb3IgYSBzcGVjaWZpYyBNNjgweDAgb3IgQ29sZEZpcmUgaW5zdHJ1Y3Rpb24gc2V0CithcmNoaXRlY3R1cmUuICBQZXJtaXNzaWJsZSB2YWx1ZXMgb2YgXGZJYXJjaFxmUiBmb3IgTTY4MHgwCithcmNoaXRlY3R1cmVzIGFyZTogXGZCNjgwMDBcZlIsIFxmQjY4MDEwXGZSLCBcZkI2ODAyMFxmUiwKK1wmXGZCNjgwMzBcZlIsIFxmQjY4MDQwXGZSLCBcZkI2ODA2MFxmUiBhbmQgXGZCY3B1MzJcZlIuICBDb2xkRmlyZQorYXJjaGl0ZWN0dXJlcyBhcmUgc2VsZWN0ZWQgYWNjb3JkaW5nIHRvIEZyZWVzY2FsZSdzIFxzLTFJU0FcczAgY2xhc3NpZmljYXRpb24KK2FuZCB0aGUgcGVybWlzc2libGUgdmFsdWVzIGFyZTogXGZCaXNhYVxmUiwgXGZCaXNhYXBsdXNcZlIsCitcJlxmQmlzYWJcZlIgYW5kIFxmQmlzYWNcZlIuCisuU3AKK1wmXHMtMUdDQ1xzMCBkZWZpbmVzIGEgbWFjcm8gXGZCX1x8X21jZlxmUlxmSWFyY2hcZlJcZkJfXHxfXGZSIHdoZW5ldmVyIGl0IGlzIGdlbmVyYXRpbmcKK2NvZGUgZm9yIGEgQ29sZEZpcmUgdGFyZ2V0LiAgVGhlIFxmSWFyY2hcZlIgaW4gdGhpcyBtYWNybyBpcyBvbmUgb2YgdGhlCitcJlxmQlwtbWFyY2hcZlIgYXJndW1lbnRzIGdpdmVuIGFib3ZlLgorLlNwCitXaGVuIHVzZWQgdG9nZXRoZXIsIFxmQlwtbWFyY2hcZlIgYW5kIFxmQlwtbXR1bmVcZlIgc2VsZWN0IGNvZGUKK3RoYXQgcnVucyBvbiBhIGZhbWlseSBvZiBzaW1pbGFyIHByb2Nlc3NvcnMgYnV0IHRoYXQgaXMgb3B0aW1pemVkCitmb3IgYSBwYXJ0aWN1bGFyIG1pY3JvYXJjaGl0ZWN0dXJlLgorLklQICJcZkJcLW1jcHU9XGZSXGZJY3B1XGZSIiA0CisuSVggSXRlbSAiLW1jcHU9Y3B1IgorR2VuZXJhdGUgY29kZSBmb3IgYSBzcGVjaWZpYyBNNjgweDAgb3IgQ29sZEZpcmUgcHJvY2Vzc29yLgorVGhlIE02ODB4MCBcZkljcHVcZlJzIGFyZTogXGZCNjgwMDBcZlIsIFxmQjY4MDEwXGZSLCBcZkI2ODAyMFxmUiwKK1wmXGZCNjgwMzBcZlIsIFxmQjY4MDQwXGZSLCBcZkI2ODA2MFxmUiwgXGZCNjgzMDJcZlIsIFxmQjY4MzMyXGZSCithbmQgXGZCY3B1MzJcZlIuICBUaGUgQ29sZEZpcmUgXGZJY3B1XGZScyBhcmUgZ2l2ZW4gYnkgdGhlIHRhYmxlCitiZWxvdywgd2hpY2ggYWxzbyBjbGFzc2lmaWVzIHRoZSBDUFVzIGludG8gZmFtaWxpZXM6CisuUlMgNAorLklQICJGYW1pbHkgOiBcZkJcLW1jcHVcZlIgYXJndW1lbnRzIiA0CisuSVggSXRlbSAiRmFtaWx5IDogLW1jcHUgYXJndW1lbnRzIgorLlBEIDAKKy5JUCAiXGZCNTFcZlIgOiBcZkI1MVxmUiBcZkI1MWFjXGZSIFxmQjUxYWdcZlIgXGZCNTFjblxmUiBcZkI1MWVtXGZSIFxmQjUxamVcZlIgXGZCNTFqZlxmUiBcZkI1MWpnXGZSIFxmQjUxam1cZlIgXGZCNTFtbVxmUiBcZkI1MXFlXGZSIFxmQjUxcW1cZlIiIDQKKy5JWCBJdGVtICI1MSA6IDUxIDUxYWMgNTFhZyA1MWNuIDUxZW0gNTFqZSA1MWpmIDUxamcgNTFqbSA1MW1tIDUxcWUgNTFxbSIKKy5JUCAiXGZCNTIwNlxmUiA6IFxmQjUyMDJcZlIgXGZCNTIwNFxmUiBcZkI1MjA2XGZSIiA0CisuSVggSXRlbSAiNTIwNiA6IDUyMDIgNTIwNCA1MjA2IgorLklQICJcZkI1MjA2ZVxmUiA6IFxmQjUyMDZlXGZSIiA0CisuSVggSXRlbSAiNTIwNmUgOiA1MjA2ZSIKKy5JUCAiXGZCNTIwOFxmUiA6IFxmQjUyMDdcZlIgXGZCNTIwOFxmUiIgNAorLklYIEl0ZW0gIjUyMDggOiA1MjA3IDUyMDgiCisuSVAgIlxmQjUyMTFhXGZSIDogXGZCNTIxMGFcZlIgXGZCNTIxMWFcZlIiIDQKKy5JWCBJdGVtICI1MjExYSA6IDUyMTBhIDUyMTFhIgorLklQICJcZkI1MjEzXGZSIDogXGZCNTIxMVxmUiBcZkI1MjEyXGZSIFxmQjUyMTNcZlIiIDQKKy5JWCBJdGVtICI1MjEzIDogNTIxMSA1MjEyIDUyMTMiCisuSVAgIlxmQjUyMTZcZlIgOiBcZkI1MjE0XGZSIFxmQjUyMTZcZlIiIDQKKy5JWCBJdGVtICI1MjE2IDogNTIxNCA1MjE2IgorLklQICJcZkI1MjIzNVxmUiA6IFxmQjUyMjMwXGZSIFxmQjUyMjMxXGZSIFxmQjUyMjMyXGZSIFxmQjUyMjMzXGZSIFxmQjUyMjM0XGZSIFxmQjUyMjM1XGZSIiA0CisuSVggSXRlbSAiNTIyMzUgOiA1MjIzMCA1MjIzMSA1MjIzMiA1MjIzMyA1MjIzNCA1MjIzNSIKKy5JUCAiXGZCNTIyNVxmUiA6IFxmQjUyMjRcZlIgXGZCNTIyNVxmUiIgNAorLklYIEl0ZW0gIjUyMjUgOiA1MjI0IDUyMjUiCisuSVAgIlxmQjUyMjU5XGZSIDogXGZCNTIyNTJcZlIgXGZCNTIyNTRcZlIgXGZCNTIyNTVcZlIgXGZCNTIyNTZcZlIgXGZCNTIyNThcZlIgXGZCNTIyNTlcZlIiIDQKKy5JWCBJdGVtICI1MjI1OSA6IDUyMjUyIDUyMjU0IDUyMjU1IDUyMjU2IDUyMjU4IDUyMjU5IgorLklQICJcZkI1MjM1XGZSIDogXGZCNTIzMlxmUiBcZkI1MjMzXGZSIFxmQjUyMzRcZlIgXGZCNTIzNVxmUiBcZkI1MjN4XGZSIiA0CisuSVggSXRlbSAiNTIzNSA6IDUyMzIgNTIzMyA1MjM0IDUyMzUgNTIzeCIKKy5JUCAiXGZCNTI0OVxmUiA6IFxmQjUyNDlcZlIiIDQKKy5JWCBJdGVtICI1MjQ5IDogNTI0OSIKKy5JUCAiXGZCNTI1MFxmUiA6IFxmQjUyNTBcZlIiIDQKKy5JWCBJdGVtICI1MjUwIDogNTI1MCIKKy5JUCAiXGZCNTI3MVxmUiA6IFxmQjUyNzBcZlIgXGZCNTI3MVxmUiIgNAorLklYIEl0ZW0gIjUyNzEgOiA1MjcwIDUyNzEiCisuSVAgIlxmQjUyNzJcZlIgOiBcZkI1MjcyXGZSIiA0CisuSVggSXRlbSAiNTI3MiA6IDUyNzIiCisuSVAgIlxmQjUyNzVcZlIgOiBcZkI1Mjc0XGZSIFxmQjUyNzVcZlIiIDQKKy5JWCBJdGVtICI1Mjc1IDogNTI3NCA1Mjc1IgorLklQICJcZkI1MjgyXGZSIDogXGZCNTI4MFxmUiBcZkI1MjgxXGZSIFxmQjUyODJcZlIgXGZCNTI4eFxmUiIgNAorLklYIEl0ZW0gIjUyODIgOiA1MjgwIDUyODEgNTI4MiA1Mjh4IgorLklQICJcZkI1MzAxN1xmUiA6IFxmQjUzMDExXGZSIFxmQjUzMDEyXGZSIFxmQjUzMDEzXGZSIFxmQjUzMDE0XGZSIFxmQjUzMDE1XGZSIFxmQjUzMDE2XGZSIFxmQjUzMDE3XGZSIiA0CisuSVggSXRlbSAiNTMwMTcgOiA1MzAxMSA1MzAxMiA1MzAxMyA1MzAxNCA1MzAxNSA1MzAxNiA1MzAxNyIKKy5JUCAiXGZCNTMwN1xmUiA6IFxmQjUzMDdcZlIiIDQKKy5JWCBJdGVtICI1MzA3IDogNTMwNyIKKy5JUCAiXGZCNTMyOVxmUiA6IFxmQjUzMjdcZlIgXGZCNTMyOFxmUiBcZkI1MzI5XGZSIFxmQjUzMnhcZlIiIDQKKy5JWCBJdGVtICI1MzI5IDogNTMyNyA1MzI4IDUzMjkgNTMyeCIKKy5JUCAiXGZCNTM3M1xmUiA6IFxmQjUzNzJcZlIgXGZCNTM3M1xmUiBcZkI1Mzd4XGZSIiA0CisuSVggSXRlbSAiNTM3MyA6IDUzNzIgNTM3MyA1Mzd4IgorLklQICJcZkI1NDA3XGZSIDogXGZCNTQwN1xmUiIgNAorLklYIEl0ZW0gIjU0MDcgOiA1NDA3IgorLklQICJcZkI1NDc1XGZSIDogXGZCNTQ3MFxmUiBcZkI1NDcxXGZSIFxmQjU0NzJcZlIgXGZCNTQ3M1xmUiBcZkI1NDc0XGZSIFxmQjU0NzVcZlIgXGZCNTQ3eFxmUiBcZkI1NDgwXGZSIFxmQjU0ODFcZlIgXGZCNTQ4MlxmUiBcZkI1NDgzXGZSIFxmQjU0ODRcZlIgXGZCNTQ4NVxmUiIgNAorLklYIEl0ZW0gIjU0NzUgOiA1NDcwIDU0NzEgNTQ3MiA1NDczIDU0NzQgNTQ3NSA1NDd4IDU0ODAgNTQ4MSA1NDgyIDU0ODMgNTQ4NCA1NDg1IgorLlJFCisuUlMgNAorLlBECisuU3AKK1wmXGZCXC1tY3B1PVxmUlxmSWNwdVxmUiBvdmVycmlkZXMgXGZCXC1tYXJjaD1cZlJcZklhcmNoXGZSIGlmCitcJlxmSWFyY2hcZlIgaXMgY29tcGF0aWJsZSB3aXRoIFxmSWNwdVxmUi4gIE90aGVyIGNvbWJpbmF0aW9ucyBvZgorXCZcZkJcLW1jcHVcZlIgYW5kIFxmQlwtbWFyY2hcZlIgYXJlIHJlamVjdGVkLgorLlNwCitcJlxzLTFHQ0NcczAgZGVmaW5lcyB0aGUgbWFjcm8gXGZCX1x8X21jZl9jcHVfXGZSXGZJY3B1XGZSIHdoZW4gQ29sZEZpcmUgdGFyZ2V0CitcJlxmSWNwdVxmUiBpcyBzZWxlY3RlZC4gIEl0IGFsc28gZGVmaW5lcyBcZkJfXHxfbWNmX2ZhbWlseV9cZlJcZklmYW1pbHlcZlIsCit3aGVyZSB0aGUgdmFsdWUgb2YgXGZJZmFtaWx5XGZSIGlzIGdpdmVuIGJ5IHRoZSB0YWJsZSBhYm92ZS4KKy5SRQorLklQICJcZkJcLW10dW5lPVxmUlxmSXR1bmVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9dHVuZSIKK1R1bmUgdGhlIGNvZGUgZm9yIGEgcGFydGljdWxhciBtaWNyb2FyY2hpdGVjdHVyZSB3aXRoaW4gdGhlCitjb25zdHJhaW50cyBzZXQgYnkgXGZCXC1tYXJjaFxmUiBhbmQgXGZCXC1tY3B1XGZSLgorVGhlIE02ODB4MCBtaWNyb2FyY2hpdGVjdHVyZXMgYXJlOiBcZkI2ODAwMFxmUiwgXGZCNjgwMTBcZlIsCitcJlxmQjY4MDIwXGZSLCBcZkI2ODAzMFxmUiwgXGZCNjgwNDBcZlIsIFxmQjY4MDYwXGZSCithbmQgXGZCY3B1MzJcZlIuICBUaGUgQ29sZEZpcmUgbWljcm9hcmNoaXRlY3R1cmVzCithcmU6IFxmQmNmdjFcZlIsIFxmQmNmdjJcZlIsIFxmQmNmdjNcZlIsIFxmQmNmdjRcZlIgYW5kIFxmQmNmdjRlXGZSLgorLlNwCitZb3UgY2FuIGFsc28gdXNlIFxmQlwtbXR1bmU9NjgwMjBcLTQwXGZSIGZvciBjb2RlIHRoYXQgbmVlZHMKK3RvIHJ1biByZWxhdGl2ZWx5IHdlbGwgb24gNjgwMjAsIDY4MDMwIGFuZCA2ODA0MCB0YXJnZXRzLgorXCZcZkJcLW10dW5lPTY4MDIwXC02MFxmUiBpcyBzaW1pbGFyIGJ1dCBpbmNsdWRlcyA2ODA2MCB0YXJnZXRzCithcyB3ZWxsLiAgVGhlc2UgdHdvIG9wdGlvbnMgc2VsZWN0IHRoZSBzYW1lIHR1bmluZyBkZWNpc2lvbnMgYXMKK1wmXGZCXC1tNjgwMjBcLTQwXGZSIGFuZCBcZkJcLW02ODAyMFwtNjBcZlIgcmVzcGVjdGl2ZWx5LgorLlNwCitcJlxzLTFHQ0NcczAgZGVmaW5lcyB0aGUgbWFjcm9zIFxmQl9cfF9tY1xmUlxmSWFyY2hcZlIgYW5kIFxmQl9cfF9tY1xmUlxmSWFyY2hcZlJcZkJfXHxfXGZSCit3aGVuIHR1bmluZyBmb3IgNjgweDAgYXJjaGl0ZWN0dXJlIFxmSWFyY2hcZlIuICBJdCBhbHNvIGRlZmluZXMKK1wmXGZCbWNcZlJcZklhcmNoXGZSIHVubGVzcyBlaXRoZXIgXGZCXC1hbnNpXGZSIG9yIGEgbm9uLUdOVSBcZkJcLXN0ZFxmUgorb3B0aW9uIGlzIHVzZWQuICBJZiBccy0xR0NDXHMwIGlzIHR1bmluZyBmb3IgYSByYW5nZSBvZiBhcmNoaXRlY3R1cmVzLAorYXMgc2VsZWN0ZWQgYnkgXGZCXC1tdHVuZT02ODAyMFwtNDBcZlIgb3IgXGZCXC1tdHVuZT02ODAyMFwtNjBcZlIsCitpdCBkZWZpbmVzIHRoZSBtYWNyb3MgZm9yIGV2ZXJ5IGFyY2hpdGVjdHVyZSBpbiB0aGUgcmFuZ2UuCisuU3AKK1wmXHMtMUdDQ1xzMCBhbHNvIGRlZmluZXMgdGhlIG1hY3JvIFxmQl9cfF9tXGZSXGZJdWFyY2hcZlJcZkJfXHxfXGZSIHdoZW4gdHVuaW5nIGZvcgorQ29sZEZpcmUgbWljcm9hcmNoaXRlY3R1cmUgXGZJdWFyY2hcZlIsIHdoZXJlIFxmSXVhcmNoXGZSIGlzIG9uZQorb2YgdGhlIGFyZ3VtZW50cyBnaXZlbiBhYm92ZS4KKy5JUCAiXGZCXC1tNjgwMDBcZlIiIDQKKy5JWCBJdGVtICItbTY4MDAwIgorLlBEIDAKKy5JUCAiXGZCXC1tYzY4MDAwXGZSIiA0CisuSVggSXRlbSAiLW1jNjgwMDAiCisuUEQKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODAwMC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK3doZW4gdGhlIGNvbXBpbGVyIGlzIGNvbmZpZ3VyZWQgZm9yIDY4MDAwXC1iYXNlZCBzeXN0ZW1zLgorSXQgaXMgZXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPTY4MDAwXGZSLgorLlNwCitVc2UgdGhpcyBvcHRpb24gZm9yIG1pY3JvY29udHJvbGxlcnMgd2l0aCBhIDY4MDAwIG9yIFxzLTFFQzAwMFxzMCBjb3JlLAoraW5jbHVkaW5nIHRoZSA2ODAwOCwgNjgzMDIsIDY4MzA2LCA2ODMwNywgNjgzMjIsIDY4MzI4IGFuZCA2ODM1Ni4KKy5JUCAiXGZCXC1tNjgwMTBcZlIiIDQKKy5JWCBJdGVtICItbTY4MDEwIgorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDEwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAord2hlbiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCBmb3IgNjgwMTBcLWJhc2VkIHN5c3RlbXMuCitJdCBpcyBlcXVpdmFsZW50IHRvIFxmQlwtbWFyY2g9NjgwMTBcZlIuCisuSVAgIlxmQlwtbTY4MDIwXGZSIiA0CisuSVggSXRlbSAiLW02ODAyMCIKKy5QRCAwCisuSVAgIlxmQlwtbWM2ODAyMFxmUiIgNAorLklYIEl0ZW0gIi1tYzY4MDIwIgorLlBECitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNjgwMjAuICBUaGlzIGlzIHRoZSBkZWZhdWx0Cit3aGVuIHRoZSBjb21waWxlciBpcyBjb25maWd1cmVkIGZvciA2ODAyMFwtYmFzZWQgc3lzdGVtcy4KK0l0IGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD02ODAyMFxmUi4KKy5JUCAiXGZCXC1tNjgwMzBcZlIiIDQKKy5JWCBJdGVtICItbTY4MDMwIgorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDMwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBjb21waWxlciBpcworY29uZmlndXJlZCBmb3IgNjgwMzBcLWJhc2VkIHN5c3RlbXMuICBJdCBpcyBlcXVpdmFsZW50IHRvCitcJlxmQlwtbWFyY2g9NjgwMzBcZlIuCisuSVAgIlxmQlwtbTY4MDQwXGZSIiA0CisuSVggSXRlbSAiLW02ODA0MCIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODA0MC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2NvbmZpZ3VyZWQgZm9yIDY4MDQwXC1iYXNlZCBzeXN0ZW1zLiAgSXQgaXMgZXF1aXZhbGVudCB0bworXCZcZkJcLW1hcmNoPTY4MDQwXGZSLgorLlNwCitUaGlzIG9wdGlvbiBpbmhpYml0cyB0aGUgdXNlIG9mIDY4ODgxLzY4ODgyIGluc3RydWN0aW9ucyB0aGF0IGhhdmUgdG8gYmUKK2VtdWxhdGVkIGJ5IHNvZnR3YXJlIG9uIHRoZSA2ODA0MC4gIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3VyIDY4MDQwIGRvZXMgbm90CitoYXZlIGNvZGUgdG8gZW11bGF0ZSB0aG9zZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbTY4MDYwXGZSIiA0CisuSVggSXRlbSAiLW02ODA2MCIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODA2MC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgY29tcGlsZXIgaXMKK2NvbmZpZ3VyZWQgZm9yIDY4MDYwXC1iYXNlZCBzeXN0ZW1zLiAgSXQgaXMgZXF1aXZhbGVudCB0bworXCZcZkJcLW1hcmNoPTY4MDYwXGZSLgorLlNwCitUaGlzIG9wdGlvbiBpbmhpYml0cyB0aGUgdXNlIG9mIDY4MDIwIGFuZCA2ODg4MS82ODg4MiBpbnN0cnVjdGlvbnMgdGhhdAoraGF2ZSB0byBiZSBlbXVsYXRlZCBieSBzb2Z0d2FyZSBvbiB0aGUgNjgwNjAuICBVc2UgdGhpcyBvcHRpb24gaWYgeW91ciA2ODA2MAorZG9lcyBub3QgaGF2ZSBjb2RlIHRvIGVtdWxhdGUgdGhvc2UgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1jcHUzMlxmUiIgNAorLklYIEl0ZW0gIi1tY3B1MzIiCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgXHMtMUNQVTMyXHMwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAord2hlbiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCBmb3IgQ1BVMzJcLWJhc2VkIHN5c3RlbXMuCitJdCBpcyBlcXVpdmFsZW50IHRvIFxmQlwtbWFyY2g9Y3B1MzJcZlIuCisuU3AKK1VzZSB0aGlzIG9wdGlvbiBmb3IgbWljcm9jb250cm9sbGVycyB3aXRoIGEKK1wmXHMtMUNQVTMyXHMwIG9yIFxzLTFDUFUzMitcczAgY29yZSwgaW5jbHVkaW5nIHRoZSA2ODMzMCwgNjgzMzEsIDY4MzMyLCA2ODMzMywgNjgzMzQsCis2ODMzNiwgNjgzNDAsIDY4MzQxLCA2ODM0OSBhbmQgNjgzNjAuCisuSVAgIlxmQlwtbTUyMDBcZlIiIDQKKy5JWCBJdGVtICItbTUyMDAiCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNTIwWCBDb2xkRmlyZSBccy0xQ1BVXHMwLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAord2hlbiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCBmb3IgNTIwWFwtYmFzZWQgc3lzdGVtcy4KK0l0IGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1tY3B1PTUyMDZcZlIsIGFuZCBpcyBub3cgZGVwcmVjYXRlZAoraW4gZmF2b3Igb2YgdGhhdCBvcHRpb24uCisuU3AKK1VzZSB0aGlzIG9wdGlvbiBmb3IgbWljcm9jb250cm9sbGVyIHdpdGggYSA1MjAwIGNvcmUsIGluY2x1ZGluZwordGhlIFxzLTFNQ0Y1MjAyXHMwLCBccy0xTUNGNTIwM1xzMCwgXHMtMU1DRjUyMDRcczAgYW5kIFxzLTFNQ0Y1MjA2XHMwLgorLklQICJcZkJcLW01MjA2ZVxmUiIgNAorLklYIEl0ZW0gIi1tNTIwNmUiCitHZW5lcmF0ZSBvdXRwdXQgZm9yIGEgNTIwNmUgQ29sZEZpcmUgXHMtMUNQVVxzMC4gIFRoZSBvcHRpb24gaXMgbm93CitkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBlcXVpdmFsZW50IFxmQlwtbWNwdT01MjA2ZVxmUi4KKy5JUCAiXGZCXC1tNTI4eFxmUiIgNAorLklYIEl0ZW0gIi1tNTI4eCIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSBtZW1iZXIgb2YgdGhlIENvbGRGaXJlIDUyOFggZmFtaWx5LgorVGhlIG9wdGlvbiBpcyBub3cgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgZXF1aXZhbGVudAorXCZcZkJcLW1jcHU9NTI4eFxmUi4KKy5JUCAiXGZCXC1tNTMwN1xmUiIgNAorLklYIEl0ZW0gIi1tNTMwNyIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSBDb2xkRmlyZSA1MzA3IFxzLTFDUFVcczAuICBUaGUgb3B0aW9uIGlzIG5vdyBkZXByZWNhdGVkCitpbiBmYXZvciBvZiB0aGUgZXF1aXZhbGVudCBcZkJcLW1jcHU9NTMwN1xmUi4KKy5JUCAiXGZCXC1tNTQwN1xmUiIgNAorLklYIEl0ZW0gIi1tNTQwNyIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSBDb2xkRmlyZSA1NDA3IFxzLTFDUFVcczAuICBUaGUgb3B0aW9uIGlzIG5vdyBkZXByZWNhdGVkCitpbiBmYXZvciBvZiB0aGUgZXF1aXZhbGVudCBcZkJcLW1jcHU9NTQwN1xmUi4KKy5JUCAiXGZCXC1tY2Z2NGVcZlIiIDQKKy5JWCBJdGVtICItbWNmdjRlIgorR2VuZXJhdGUgb3V0cHV0IGZvciBhIENvbGRGaXJlIFY0ZSBmYW1pbHkgXHMtMUNQVVxzMCAoZS5nLiA1NDd4LzU0OHgpLgorVGhpcyBpbmNsdWRlcyB1c2Ugb2YgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLgorVGhlIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtbWNwdT01NDd4XGZSLCBhbmQgaXMgbm93CitkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoYXQgb3B0aW9uLgorLklQICJcZkJcLW02ODAyMFwtNDBcZlIiIDQKKy5JWCBJdGVtICItbTY4MDIwLTQwIgorR2VuZXJhdGUgb3V0cHV0IGZvciBhIDY4MDQwLCB3aXRob3V0IHVzaW5nIGFueSBvZiB0aGUgbmV3IGluc3RydWN0aW9ucy4KK1RoaXMgcmVzdWx0cyBpbiBjb2RlIHRoYXQgY2FuIHJ1biByZWxhdGl2ZWx5IGVmZmljaWVudGx5IG9uIGVpdGhlciBhCis2ODAyMC82ODg4MSBvciBhIDY4MDMwIG9yIGEgNjgwNDAuICBUaGUgZ2VuZXJhdGVkIGNvZGUgZG9lcyB1c2UgdGhlCis2ODg4MSBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgZW11bGF0ZWQgb24gdGhlIDY4MDQwLgorLlNwCitUaGUgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gXGZCXC1tYXJjaD02ODAyMFxmUiBcZkJcLW10dW5lPTY4MDIwXC00MFxmUi4KKy5JUCAiXGZCXC1tNjgwMjBcLTYwXGZSIiA0CisuSVggSXRlbSAiLW02ODAyMC02MCIKK0dlbmVyYXRlIG91dHB1dCBmb3IgYSA2ODA2MCwgd2l0aG91dCB1c2luZyBhbnkgb2YgdGhlIG5ldyBpbnN0cnVjdGlvbnMuCitUaGlzIHJlc3VsdHMgaW4gY29kZSB0aGF0IGNhbiBydW4gcmVsYXRpdmVseSBlZmZpY2llbnRseSBvbiBlaXRoZXIgYQorNjgwMjAvNjg4ODEgb3IgYSA2ODAzMCBvciBhIDY4MDQwLiAgVGhlIGdlbmVyYXRlZCBjb2RlIGRvZXMgdXNlIHRoZQorNjg4ODEgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGVtdWxhdGVkIG9uIHRoZSA2ODA2MC4KKy5TcAorVGhlIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIFxmQlwtbWFyY2g9NjgwMjBcZlIgXGZCXC1tdHVuZT02ODAyMFwtNjBcZlIuCisuSVAgIlxmQlwtbWhhcmRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWZsb2F0IgorLlBEIDAKKy5JUCAiXGZCXC1tNjg4ODFcZlIiIDQKKy5JWCBJdGVtICItbTY4ODgxIgorLlBECitHZW5lcmF0ZSBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciA2ODAyMAorYW5kIGFib3ZlLCBhbmQgZm9yIENvbGRGaXJlIGRldmljZXMgdGhhdCBoYXZlIGFuIFxzLTFGUFVcczAuICBJdCBkZWZpbmVzIHRoZQorbWFjcm8gXGZCX1x8X0hBVkVfNjg4ODFfXHxfXGZSIG9uIE02ODB4MCB0YXJnZXRzIGFuZCBcZkJfXHxfbWNmZnB1X1x8X1xmUgorb24gQ29sZEZpcmUgdGFyZ2V0cy4KKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCitEbyBub3QgZ2VuZXJhdGUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zOyB1c2UgbGlicmFyeSBjYWxscyBpbnN0ZWFkLgorVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgNjgwMDAsIDY4MDEwLCBhbmQgNjg4MzIgdGFyZ2V0cy4gIEl0IGlzIGFsc28KK3RoZSBkZWZhdWx0IGZvciBDb2xkRmlyZSBkZXZpY2VzIHRoYXQgaGF2ZSBubyBccy0xRlBVXHMwLgorLklQICJcZkJcLW1kaXZcZlIiIDQKKy5JWCBJdGVtICItbWRpdiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1kaXZcZlIiIDQKKy5JWCBJdGVtICItbW5vLWRpdiIKKy5QRAorR2VuZXJhdGUgKGRvIG5vdCBnZW5lcmF0ZSkgQ29sZEZpcmUgaGFyZHdhcmUgZGl2aWRlIGFuZCByZW1haW5kZXIKK2luc3RydWN0aW9ucy4gIElmIFxmQlwtbWFyY2hcZlIgaXMgdXNlZCB3aXRob3V0IFxmQlwtbWNwdVxmUiwKK3RoZSBkZWZhdWx0IGlzIFwqKEwib25cKihSIiBmb3IgQ29sZEZpcmUgYXJjaGl0ZWN0dXJlcyBhbmQgXCooTCJvZmZcKihSIiBmb3IgTTY4MHgwCithcmNoaXRlY3R1cmVzLiAgT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBpcyB0YWtlbiBmcm9tIHRoZSB0YXJnZXQgXHMtMUNQVVxzMAorKGVpdGhlciB0aGUgZGVmYXVsdCBccy0xQ1BVXHMwLCBvciB0aGUgb25lIHNwZWNpZmllZCBieSBcZkJcLW1jcHVcZlIpLiAgRm9yCitleGFtcGxlLCB0aGUgZGVmYXVsdCBpcyBcKihMIm9mZlwqKFIiIGZvciBcZkJcLW1jcHU9NTIwNlxmUiBhbmQgXCooTCJvblwqKFIiIGZvcgorXCZcZkJcLW1jcHU9NTIwNmVcZlIuCisuU3AKK1wmXHMtMUdDQ1xzMCBkZWZpbmVzIHRoZSBtYWNybyBcZkJfXHxfbWNmaHdkaXZfXHxfXGZSIHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4KKy5JUCAiXGZCXC1tc2hvcnRcZlIiIDQKKy5JWCBJdGVtICItbXNob3J0IgorQ29uc2lkZXIgdHlwZSBcZihDV1wqKENgaW50XCooQydcZlIgdG8gYmUgMTYgYml0cyB3aWRlLCBsaWtlIFxmKENXXCooQ2BzaG9ydCBpbnRcKihDJ1xmUi4KK0FkZGl0aW9uYWxseSwgcGFyYW1ldGVycyBwYXNzZWQgb24gdGhlIHN0YWNrIGFyZSBhbHNvIGFsaWduZWQgdG8gYQorMTZcLWJpdCBib3VuZGFyeSBldmVuIG9uIHRhcmdldHMgd2hvc2UgXHMtMUFQSVxzMCBtYW5kYXRlcyBwcm9tb3Rpb24gdG8gMzJcLWJpdC4KKy5JUCAiXGZCXC1tbm9cLXNob3J0XGZSIiA0CisuSVggSXRlbSAiLW1uby1zaG9ydCIKK0RvIG5vdCBjb25zaWRlciB0eXBlIFxmKENXXCooQ2BpbnRcKihDJ1xmUiB0byBiZSAxNiBiaXRzIHdpZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1ub2JpdGZpZWxkXGZSIiA0CisuSVggSXRlbSAiLW1ub2JpdGZpZWxkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWJpdGZpZWxkXGZSIiA0CisuSVggSXRlbSAiLW1uby1iaXRmaWVsZCIKKy5QRAorRG8gbm90IHVzZSB0aGUgYml0LWZpZWxkIGluc3RydWN0aW9ucy4gIFRoZSBcZkJcLW02ODAwMFxmUiwgXGZCXC1tY3B1MzJcZlIKK2FuZCBcZkJcLW01MjAwXGZSIG9wdGlvbnMgaW1wbHkgXGZCXC1tbm9iaXRmaWVsZFxmUi4KKy5JUCAiXGZCXC1tYml0ZmllbGRcZlIiIDQKKy5JWCBJdGVtICItbWJpdGZpZWxkIgorRG8gdXNlIHRoZSBiaXQtZmllbGQgaW5zdHJ1Y3Rpb25zLiAgVGhlIFxmQlwtbTY4MDIwXGZSIG9wdGlvbiBpbXBsaWVzCitcJlxmQlwtbWJpdGZpZWxkXGZSLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBpZiB5b3UgdXNlIGEgY29uZmlndXJhdGlvbgorZGVzaWduZWQgZm9yIGEgNjgwMjAuCisuSVAgIlxmQlwtbXJ0ZFxmUiIgNAorLklYIEl0ZW0gIi1tcnRkIgorVXNlIGEgZGlmZmVyZW50IGZ1bmN0aW9uLWNhbGxpbmcgY29udmVudGlvbiwgaW4gd2hpY2ggZnVuY3Rpb25zCit0aGF0IHRha2UgYSBmaXhlZCBudW1iZXIgb2YgYXJndW1lbnRzIHJldHVybiB3aXRoIHRoZSBcZihDV1wqKENgcnRkXCooQydcZlIKK2luc3RydWN0aW9uLCB3aGljaCBwb3BzIHRoZWlyIGFyZ3VtZW50cyB3aGlsZSByZXR1cm5pbmcuICBUaGlzCitzYXZlcyBvbmUgaW5zdHJ1Y3Rpb24gaW4gdGhlIGNhbGxlciBzaW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIHBvcAordGhlIGFyZ3VtZW50cyB0aGVyZS4KKy5TcAorVGhpcyBjYWxsaW5nIGNvbnZlbnRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIG9uZSBub3JtYWxseQordXNlZCBvbiBVbml4LCBzbyB5b3UgY2Fubm90IHVzZSBpdCBpZiB5b3UgbmVlZCB0byBjYWxsIGxpYnJhcmllcworY29tcGlsZWQgd2l0aCB0aGUgVW5peCBjb21waWxlci4KKy5TcAorQWxzbywgeW91IG11c3QgcHJvdmlkZSBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhbGwgZnVuY3Rpb25zIHRoYXQKK3Rha2UgdmFyaWFibGUgbnVtYmVycyBvZiBhcmd1bWVudHMgKGluY2x1ZGluZyBcZihDV1wqKENgcHJpbnRmXCooQydcZlIpOworb3RoZXJ3aXNlIGluY29ycmVjdCBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgY2FsbHMgdG8gdGhvc2UKK2Z1bmN0aW9ucy4KKy5TcAorSW4gYWRkaXRpb24sIHNlcmlvdXNseSBpbmNvcnJlY3QgY29kZSByZXN1bHRzIGlmIHlvdSBjYWxsIGEKK2Z1bmN0aW9uIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzLiAgKE5vcm1hbGx5LCBleHRyYSBhcmd1bWVudHMgYXJlCitoYXJtbGVzc2x5IGlnbm9yZWQuKQorLlNwCitUaGUgXGYoQ1dcKihDYHJ0ZFwqKEMnXGZSIGluc3RydWN0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgNjgwMTAsIDY4MDIwLCA2ODAzMCwKKzY4MDQwLCA2ODA2MCBhbmQgXHMtMUNQVTMyXHMwIHByb2Nlc3NvcnMsIGJ1dCBub3QgYnkgdGhlIDY4MDAwIG9yIDUyMDAuCisuSVAgIlxmQlwtbW5vXC1ydGRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXJ0ZCIKK0RvIG5vdCB1c2UgdGhlIGNhbGxpbmcgY29udmVudGlvbnMgc2VsZWN0ZWQgYnkgXGZCXC1tcnRkXGZSLgorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tYWxpZ25cLWludFxmUiIgNAorLklYIEl0ZW0gIi1tYWxpZ24taW50IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWFsaWduXC1pbnRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWFsaWduLWludCIKKy5QRAorQ29udHJvbCB3aGV0aGVyIFxzLTFHQ0NcczAgYWxpZ25zIFxmKENXXCooQ2BpbnRcKihDJ1xmUiwgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUiwgXGYoQ1dcKihDYGxvbmcgbG9uZ1wqKEMnXGZSLAorXCZcZihDV1wqKENgZmxvYXRcKihDJ1xmUiwgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSLCBhbmQgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgdmFyaWFibGVzIG9uIGEgMzJcLWJpdAorYm91bmRhcnkgKFxmQlwtbWFsaWduXC1pbnRcZlIpIG9yIGEgMTZcLWJpdCBib3VuZGFyeSAoXGZCXC1tbm9cLWFsaWduXC1pbnRcZlIpLgorQWxpZ25pbmcgdmFyaWFibGVzIG9uIDMyXC1iaXQgYm91bmRhcmllcyBwcm9kdWNlcyBjb2RlIHRoYXQgcnVucyBzb21ld2hhdAorZmFzdGVyIG9uIHByb2Nlc3NvcnMgd2l0aCAzMlwtYml0IGJ1c3NlcyBhdCB0aGUgZXhwZW5zZSBvZiBtb3JlIG1lbW9yeS4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiBpZiB5b3UgdXNlIHRoZSBcZkJcLW1hbGlnblwtaW50XGZSIHN3aXRjaCwgXHMtMUdDQ1xzMAorYWxpZ25zIHN0cnVjdHVyZXMgY29udGFpbmluZyB0aGUgYWJvdmUgdHlwZXMgZGlmZmVyZW50bHkgdGhhbgorbW9zdCBwdWJsaXNoZWQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZSBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIG02OGsuCisuSVAgIlxmQlwtbXBjcmVsXGZSIiA0CisuSVggSXRlbSAiLW1wY3JlbCIKK1VzZSB0aGUgcGMtcmVsYXRpdmUgYWRkcmVzc2luZyBtb2RlIG9mIHRoZSA2ODAwMCBkaXJlY3RseSwgaW5zdGVhZCBvZgordXNpbmcgYSBnbG9iYWwgb2Zmc2V0IHRhYmxlLiAgQXQgcHJlc2VudCwgdGhpcyBvcHRpb24gaW1wbGllcyBcZkJcLWZwaWNcZlIsCithbGxvd2luZyBhdCBtb3N0IGEgMTZcLWJpdCBvZmZzZXQgZm9yIHBjLXJlbGF0aXZlIGFkZHJlc3NpbmcuICBcZkJcLWZQSUNcZlIgaXMKK25vdCBwcmVzZW50bHkgc3VwcG9ydGVkIHdpdGggXGZCXC1tcGNyZWxcZlIsIHRob3VnaCB0aGlzIGNvdWxkIGJlIHN1cHBvcnRlZCBmb3IKKzY4MDIwIGFuZCBoaWdoZXIgcHJvY2Vzc29ycy4KKy5JUCAiXGZCXC1tbm9cLXN0cmljdFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbW5vLXN0cmljdC1hbGlnbiIKKy5QRCAwCisuSVAgIlxmQlwtbXN0cmljdFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbXN0cmljdC1hbGlnbiIKKy5QRAorRG8gbm90IChkbykgYXNzdW1lIHRoYXQgdW5hbGlnbmVkIG1lbW9yeSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGJ5Cit0aGUgc3lzdGVtLgorLklQICJcZkJcLW1zZXBcLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbXNlcC1kYXRhIgorR2VuZXJhdGUgY29kZSB0aGF0IGFsbG93cyB0aGUgZGF0YSBzZWdtZW50IHRvIGJlIGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQKK2FyZWEgb2YgbWVtb3J5IGZyb20gdGhlIHRleHQgc2VnbWVudC4gIFRoaXMgYWxsb3dzIGZvciBleGVjdXRlLWluLXBsYWNlIGluCithbiBlbnZpcm9ubWVudCB3aXRob3V0IHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuICBUaGlzIG9wdGlvbiBpbXBsaWVzCitcJlxmQlwtZlBJQ1xmUi4KKy5JUCAiXGZCXC1tbm9cLXNlcFwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2VwLWRhdGEiCitHZW5lcmF0ZSBjb2RlIHRoYXQgYXNzdW1lcyB0aGF0IHRoZSBkYXRhIHNlZ21lbnQgZm9sbG93cyB0aGUgdGV4dCBzZWdtZW50LgorVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1taWRcLXNoYXJlZFwtbGlicmFyeVxmUiIgNAorLklYIEl0ZW0gIi1taWQtc2hhcmVkLWxpYnJhcnkiCitHZW5lcmF0ZSBjb2RlIHRoYXQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyB2aWEgdGhlIGxpYnJhcnkgXHMtMUlEXHMwIG1ldGhvZC4KK1RoaXMgYWxsb3dzIGZvciBleGVjdXRlLWluLXBsYWNlIGFuZCBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGVudmlyb25tZW50Cit3aXRob3V0IHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuICBUaGlzIG9wdGlvbiBpbXBsaWVzIFxmQlwtZlBJQ1xmUi4KKy5JUCAiXGZCXC1tbm9cLWlkXC1zaGFyZWRcLWxpYnJhcnlcZlIiIDQKKy5JWCBJdGVtICItbW5vLWlkLXNoYXJlZC1saWJyYXJ5IgorR2VuZXJhdGUgY29kZSB0aGF0IGRvZXNuJ3QgYXNzdW1lIElELWJhc2VkIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGJlaW5nIHVzZWQuCitUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1zaGFyZWRcLWxpYnJhcnlcLWlkPW5cZlIiIDQKKy5JWCBJdGVtICItbXNoYXJlZC1saWJyYXJ5LWlkPW4iCitTcGVjaWZpZXMgdGhlIGlkZW50aWZpY2F0aW9uIG51bWJlciBvZiB0aGUgSUQtYmFzZWQgc2hhcmVkIGxpYnJhcnkgYmVpbmcKK2NvbXBpbGVkLiAgU3BlY2lmeWluZyBhIHZhbHVlIG9mIDAgZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCBjb2RlOyBzcGVjaWZ5aW5nCitvdGhlciB2YWx1ZXMgZm9yY2VzIHRoZSBhbGxvY2F0aW9uIG9mIHRoYXQgbnVtYmVyIHRvIHRoZSBjdXJyZW50CitsaWJyYXJ5LCBidXQgaXMgbm8gbW9yZSBzcGFjZVwtIG9yIHRpbWUtZWZmaWNpZW50IHRoYW4gb21pdHRpbmcgdGhpcyBvcHRpb24uCisuSVAgIlxmQlwtbXhnb3RcZlIiIDQKKy5JWCBJdGVtICItbXhnb3QiCisuUEQgMAorLklQICJcZkJcLW1ub1wteGdvdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8teGdvdCIKKy5QRAorV2hlbiBnZW5lcmF0aW5nIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgZm9yIENvbGRGaXJlLCBnZW5lcmF0ZSBjb2RlCit0aGF0IHdvcmtzIGlmIHRoZSBccy0xR09UXHMwIGhhcyBtb3JlIHRoYW4gODE5MiBlbnRyaWVzLiAgVGhpcyBjb2RlIGlzCitsYXJnZXIgYW5kIHNsb3dlciB0aGFuIGNvZGUgZ2VuZXJhdGVkIHdpdGhvdXQgdGhpcyBvcHRpb24uICBPbiBNNjgweDAKK3Byb2Nlc3NvcnMsIHRoaXMgb3B0aW9uIGlzIG5vdCBuZWVkZWQ7IFxmQlwtZlBJQ1xmUiBzdWZmaWNlcy4KKy5TcAorXCZccy0xR0NDXHMwIG5vcm1hbGx5IHVzZXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gdG8gbG9hZCB2YWx1ZXMgZnJvbSB0aGUgXHMtMUdPVFxzMC4KK1doaWxlIHRoaXMgaXMgcmVsYXRpdmVseSBlZmZpY2llbnQsIGl0IG9ubHkgd29ya3MgaWYgdGhlIFxzLTFHT1RcczAKK2lzIHNtYWxsZXIgdGhhbiBhYm91dCA2NGsuICBBbnl0aGluZyBsYXJnZXIgY2F1c2VzIHRoZSBsaW5rZXIKK3RvIHJlcG9ydCBhbiBlcnJvciBzdWNoIGFzOgorLlNwCisuVmIgMQorXCYgICAgICAgIHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl82OEtfR09UMTZPIGZvb2JhcgorLlZlCisuU3AKK0lmIHRoaXMgaGFwcGVucywgeW91IHNob3VsZCByZWNvbXBpbGUgeW91ciBjb2RlIHdpdGggXGZCXC1teGdvdFxmUi4KK0l0IHNob3VsZCB0aGVuIHdvcmsgd2l0aCB2ZXJ5IGxhcmdlIEdPVHMuICBIb3dldmVyLCBjb2RlIGdlbmVyYXRlZCB3aXRoCitcJlxmQlwtbXhnb3RcZlIgaXMgbGVzcyBlZmZpY2llbnQsIHNpbmNlIGl0IHRha2VzIDQgaW5zdHJ1Y3Rpb25zIHRvIGZldGNoCit0aGUgdmFsdWUgb2YgYSBnbG9iYWwgc3ltYm9sLgorLlNwCitOb3RlIHRoYXQgc29tZSBsaW5rZXJzLCBpbmNsdWRpbmcgbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIFxzLTFHTlVcczAgbGlua2VyLAorY2FuIGNyZWF0ZSBtdWx0aXBsZSBHT1RzIGFuZCBzb3J0IFxzLTFHT1RcczAgZW50cmllcy4gIElmIHlvdSBoYXZlIHN1Y2ggYSBsaW5rZXIsCit5b3Ugc2hvdWxkIG9ubHkgbmVlZCB0byB1c2UgXGZCXC1teGdvdFxmUiB3aGVuIGNvbXBpbGluZyBhIHNpbmdsZQorb2JqZWN0IGZpbGUgdGhhdCBhY2Nlc3NlcyBtb3JlIHRoYW4gODE5MiBccy0xR09UXHMwIGVudHJpZXMuICBWZXJ5IGZldyBkby4KKy5TcAorVGhlc2Ugb3B0aW9ucyBoYXZlIG5vIGVmZmVjdCB1bmxlc3MgXHMtMUdDQ1xzMCBpcyBnZW5lcmF0aW5nCitwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLgorLlBQCitcZklNQ29yZSBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTUNvcmUgT3B0aW9ucyIKKy5QUAorVGhlc2UgYXJlIHRoZSBcZkJcLW1cZlIgb3B0aW9ucyBkZWZpbmVkIGZvciB0aGUgTW90b3JvbGEgTSpDb3JlCitwcm9jZXNzb3JzLgorLklQICJcZkJcLW1oYXJkbGl0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkbGl0IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWhhcmRsaXRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWhhcmRsaXQiCisuUEQKK0lubGluZSBjb25zdGFudHMgaW50byB0aGUgY29kZSBzdHJlYW0gaWYgaXQgY2FuIGJlIGRvbmUgaW4gdHdvCitpbnN0cnVjdGlvbnMgb3IgbGVzcy4KKy5JUCAiXGZCXC1tZGl2XGZSIiA0CisuSVggSXRlbSAiLW1kaXYiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZGl2XGZSIiA0CisuSVggSXRlbSAiLW1uby1kaXYiCisuUEQKK1VzZSB0aGUgZGl2aWRlIGluc3RydWN0aW9uLiAgKEVuYWJsZWQgYnkgZGVmYXVsdCkuCisuSVAgIlxmQlwtbXJlbGF4XC1pbW1lZGlhdGVcZlIiIDQKKy5JWCBJdGVtICItbXJlbGF4LWltbWVkaWF0ZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWxheFwtaW1tZWRpYXRlXGZSIiA0CisuSVggSXRlbSAiLW1uby1yZWxheC1pbW1lZGlhdGUiCisuUEQKK0FsbG93IGFyYml0cmFyeS1zaXplZCBpbW1lZGlhdGVzIGluIGJpdCBvcGVyYXRpb25zLgorLklQICJcZkJcLW13aWRlXC1iaXRmaWVsZHNcZlIiIDQKKy5JWCBJdGVtICItbXdpZGUtYml0ZmllbGRzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXdpZGVcLWJpdGZpZWxkc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8td2lkZS1iaXRmaWVsZHMiCisuUEQKK0Fsd2F5cyB0cmVhdCBiaXQtZmllbGRzIGFzIFxmKENXXCooQ2BpbnRcKihDJ1xmUlwtc2l6ZWQuCisuSVAgIlxmQlwtbTRieXRlXC1mdW5jdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItbTRieXRlLWZ1bmN0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC00Ynl0ZVwtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLW1uby00Ynl0ZS1mdW5jdGlvbnMiCisuUEQKK0ZvcmNlIGFsbCBmdW5jdGlvbnMgdG8gYmUgYWxpZ25lZCB0byBhIDRcLWJ5dGUgYm91bmRhcnkuCisuSVAgIlxmQlwtbWNhbGxncmFwaFwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tY2FsbGdyYXBoLWRhdGEiCisuUEQgMAorLklQICJcZkJcLW1ub1wtY2FsbGdyYXBoXC1kYXRhXGZSIiA0CisuSVggSXRlbSAiLW1uby1jYWxsZ3JhcGgtZGF0YSIKKy5QRAorRW1pdCBjYWxsZ3JhcGggaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtbXNsb3dcLWJ5dGVzXGZSIiA0CisuSVggSXRlbSAiLW1zbG93LWJ5dGVzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNsb3dcLWJ5dGVzXGZSIiA0CisuSVggSXRlbSAiLW1uby1zbG93LWJ5dGVzIgorLlBECitQcmVmZXIgd29yZCBhY2Nlc3Mgd2hlbiByZWFkaW5nIGJ5dGUgcXVhbnRpdGllcy4KKy5JUCAiXGZCXC1tbGl0dGxlXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWxpdHRsZS1lbmRpYW4iCisuUEQgMAorLklQICJcZkJcLW1iaWdcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tYmlnLWVuZGlhbiIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgYSBsaXR0bGUtZW5kaWFuIHRhcmdldC4KKy5JUCAiXGZCXC1tMjEwXGZSIiA0CisuSVggSXRlbSAiLW0yMTAiCisuUEQgMAorLklQICJcZkJcLW0zNDBcZlIiIDQKKy5JWCBJdGVtICItbTM0MCIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgdGhlIDIxMCBwcm9jZXNzb3IuCisuSVAgIlxmQlwtbW5vXC1sc2ltXGZSIiA0CisuSVggSXRlbSAiLW1uby1sc2ltIgorQXNzdW1lIHRoYXQgcnVudGltZSBzdXBwb3J0IGhhcyBiZWVuIHByb3ZpZGVkIGFuZCBzbyBvbWl0IHRoZQorc2ltdWxhdG9yIGxpYnJhcnkgKFxmSWxpYnNpbS5hKVxmUiBmcm9tIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lLgorLklQICJcZkJcLW1zdGFja1wtaW5jcmVtZW50PVxmUlxmSXNpemVcZlIiIDQKKy5JWCBJdGVtICItbXN0YWNrLWluY3JlbWVudD1zaXplIgorU2V0IHRoZSBtYXhpbXVtIGFtb3VudCBmb3IgYSBzaW5nbGUgc3RhY2sgaW5jcmVtZW50IG9wZXJhdGlvbi4gIExhcmdlCit2YWx1ZXMgY2FuIGluY3JlYXNlIHRoZSBzcGVlZCBvZiBwcm9ncmFtcyB0aGF0IGNvbnRhaW4gZnVuY3Rpb25zCit0aGF0IG5lZWQgYSBsYXJnZSBhbW91bnQgb2Ygc3RhY2sgc3BhY2UsIGJ1dCB0aGV5IGNhbiBhbHNvIHRyaWdnZXIgYQorc2VnbWVudGF0aW9uIGZhdWx0IGlmIHRoZSBzdGFjayBpcyBleHRlbmRlZCB0b28gbXVjaC4gIFRoZSBkZWZhdWx0Cit2YWx1ZSBpcyAweDEwMDAuCisuUFAKK1xmSU1lUCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTWVQIE9wdGlvbnMiCisuSVAgIlxmQlwtbWFic2RpZmZcZlIiIDQKKy5JWCBJdGVtICItbWFic2RpZmYiCitFbmFibGVzIHRoZSBcZihDV1wqKENgYWJzXCooQydcZlIgaW5zdHJ1Y3Rpb24sIHdoaWNoIGlzIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlCitiZXR3ZWVuIHR3byByZWdpc3RlcnMuCisuSVAgIlxmQlwtbWFsbFwtb3B0c1xmUiIgNAorLklYIEl0ZW0gIi1tYWxsLW9wdHMiCitFbmFibGVzIGFsbCB0aGUgb3B0aW9uYWwgaW5zdHJ1Y3Rpb25zXC1cLVwtYXZlcmFnZSwgbXVsdGlwbHksIGRpdmlkZSwgYml0CitvcGVyYXRpb25zLCBsZWFkaW5nIHplcm8sIGFic29sdXRlIGRpZmZlcmVuY2UsIG1pbi9tYXgsIGNsaXAsIGFuZAorc2F0dXJhdGlvbi4KKy5JUCAiXGZCXC1tYXZlcmFnZVxmUiIgNAorLklYIEl0ZW0gIi1tYXZlcmFnZSIKK0VuYWJsZXMgdGhlIFxmKENXXCooQ2BhdmVcKihDJ1xmUiBpbnN0cnVjdGlvbiwgd2hpY2ggY29tcHV0ZXMgdGhlIGF2ZXJhZ2Ugb2YgdHdvCityZWdpc3RlcnMuCisuSVAgIlxmQlwtbWJhc2VkPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItbWJhc2VkPW4iCitWYXJpYWJsZXMgb2Ygc2l6ZSBcZkluXGZSIGJ5dGVzIG9yIHNtYWxsZXIgYXJlIHBsYWNlZCBpbiB0aGUKK1wmXGYoQ1dcKihDYC5iYXNlZFwqKEMnXGZSIHNlY3Rpb24gYnkgZGVmYXVsdC4gIEJhc2VkIHZhcmlhYmxlcyB1c2UgdGhlIFxmKENXJHRwXGZSCityZWdpc3RlciBhcyBhIGJhc2UgcmVnaXN0ZXIsIGFuZCB0aGVyZSBpcyBhIDEyOFwtYnl0ZSBsaW1pdCB0byB0aGUKK1wmXGYoQ1dcKihDYC5iYXNlZFwqKEMnXGZSIHNlY3Rpb24uCisuSVAgIlxmQlwtbWJpdG9wc1xmUiIgNAorLklYIEl0ZW0gIi1tYml0b3BzIgorRW5hYmxlcyB0aGUgYml0IG9wZXJhdGlvbiBpbnN0cnVjdGlvbnNcLVwtXC1iaXQgdGVzdCAoXGYoQ1dcKihDYGJ0c3RtXCooQydcZlIpLCBzZXQKKyhcZihDV1wqKENgYnNldG1cKihDJ1xmUiksIGNsZWFyIChcZihDV1wqKENgYmNscm1cKihDJ1xmUiksIGludmVydCAoXGYoQ1dcKihDYGJub3RtXCooQydcZlIpLCBhbmQKK3Rlc3QtYW5kLXNldCAoXGYoQ1dcKihDYHRhc1wqKEMnXGZSKS4KKy5JUCAiXGZCXC1tYz1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1jPW5hbWUiCitTZWxlY3RzIHdoaWNoIHNlY3Rpb24gY29uc3RhbnQgZGF0YSBpcyBwbGFjZWQgaW4uICBcZkluYW1lXGZSIG1heQorYmUgXGYoQ1dcKihDYHRpbnlcKihDJ1xmUiwgXGYoQ1dcKihDYG5lYXJcKihDJ1xmUiwgb3IgXGYoQ1dcKihDYGZhclwqKEMnXGZSLgorLklQICJcZkJcLW1jbGlwXGZSIiA0CisuSVggSXRlbSAiLW1jbGlwIgorRW5hYmxlcyB0aGUgXGYoQ1dcKihDYGNsaXBcKihDJ1xmUiBpbnN0cnVjdGlvbi4gIE5vdGUgdGhhdCBcZihDV1wqKENgXC1tY2xpcFwqKEMnXGZSIGlzIG5vdAordXNlZnVsIHVubGVzcyB5b3UgYWxzbyBwcm92aWRlIFxmKENXXCooQ2BcLW1taW5tYXhcKihDJ1xmUi4KKy5JUCAiXGZCXC1tY29uZmlnPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWNvbmZpZz1uYW1lIgorU2VsZWN0cyBvbmUgb2YgdGhlIGJ1aWx0LWluIGNvcmUgY29uZmlndXJhdGlvbnMuICBFYWNoIE1lUCBjaGlwIGhhcworb25lIG9yIG1vcmUgbW9kdWxlcyBpbiBpdDsgZWFjaCBtb2R1bGUgaGFzIGEgY29yZSBccy0xQ1BVXHMwIGFuZCBhIHZhcmlldHkgb2YKK2NvcHJvY2Vzc29ycywgb3B0aW9uYWwgaW5zdHJ1Y3Rpb25zLCBhbmQgcGVyaXBoZXJhbHMuICBUaGUKK1wmXGYoQ1dcKihDYE1lUFwtSW50ZWdyYXRvclwqKEMnXGZSIHRvb2wsIG5vdCBwYXJ0IG9mIFxzLTFHQ0NcczAsIHByb3ZpZGVzIHRoZXNlCitjb25maWd1cmF0aW9ucyB0aHJvdWdoIHRoaXMgb3B0aW9uOyB1c2luZyB0aGlzIG9wdGlvbiBpcyB0aGUgc2FtZSBhcwordXNpbmcgYWxsIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgVGhlIGRlZmF1bHQKK2NvbmZpZ3VyYXRpb24gaXMgXGYoQ1dcKihDYGRlZmF1bHRcKihDJ1xmUi4KKy5JUCAiXGZCXC1tY29wXGZSIiA0CisuSVggSXRlbSAiLW1jb3AiCitFbmFibGVzIHRoZSBjb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuICBCeSBkZWZhdWx0LCB0aGlzIGlzIGEgMzJcLWJpdAorY29wcm9jZXNzb3IuICBOb3RlIHRoYXQgdGhlIGNvcHJvY2Vzc29yIGlzIG5vcm1hbGx5IGVuYWJsZWQgdmlhIHRoZQorXCZcZihDV1wqKENgXC1tY29uZmlnPVwqKEMnXGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1tY29wMzJcZlIiIDQKKy5JWCBJdGVtICItbWNvcDMyIgorRW5hYmxlcyB0aGUgMzJcLWJpdCBjb3Byb2Nlc3NvcidzIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tY29wNjRcZlIiIDQKKy5JWCBJdGVtICItbWNvcDY0IgorRW5hYmxlcyB0aGUgNjRcLWJpdCBjb3Byb2Nlc3NvcidzIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1taXZjMlxmUiIgNAorLklYIEl0ZW0gIi1taXZjMiIKK0VuYWJsZXMgXHMtMUlWQzJcczAgc2NoZWR1bGluZy4gIFxzLTFJVkMyXHMwIGlzIGEgNjRcLWJpdCBccy0xVkxJV1xzMCBjb3Byb2Nlc3Nvci4KKy5JUCAiXGZCXC1tZGNcZlIiIDQKKy5JWCBJdGVtICItbWRjIgorQ2F1c2VzIGNvbnN0YW50IHZhcmlhYmxlcyB0byBiZSBwbGFjZWQgaW4gdGhlIFxmKENXXCooQ2AubmVhclwqKEMnXGZSIHNlY3Rpb24uCisuSVAgIlxmQlwtbWRpdlxmUiIgNAorLklYIEl0ZW0gIi1tZGl2IgorRW5hYmxlcyB0aGUgXGYoQ1dcKihDYGRpdlwqKEMnXGZSIGFuZCBcZihDV1wqKENgZGl2dVwqKEMnXGZSIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tZWJcZlIiIDQKKy5JWCBJdGVtICItbWViIgorR2VuZXJhdGUgYmlnLWVuZGlhbiBjb2RlLgorLklQICJcZkJcLW1lbFxmUiIgNAorLklYIEl0ZW0gIi1tZWwiCitHZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIGNvZGUuCisuSVAgIlxmQlwtbWlvXC12b2xhdGlsZVxmUiIgNAorLklYIEl0ZW0gIi1taW8tdm9sYXRpbGUiCitUZWxscyB0aGUgY29tcGlsZXIgdGhhdCBhbnkgdmFyaWFibGUgbWFya2VkIHdpdGggdGhlIFxmKENXXCooQ2Bpb1wqKEMnXGZSCithdHRyaWJ1dGUgaXMgdG8gYmUgY29uc2lkZXJlZCB2b2xhdGlsZS4KKy5JUCAiXGZCXC1tbFxmUiIgNAorLklYIEl0ZW0gIi1tbCIKK0NhdXNlcyB2YXJpYWJsZXMgdG8gYmUgYXNzaWduZWQgdG8gdGhlIFxmKENXXCooQ2AuZmFyXCooQydcZlIgc2VjdGlvbiBieSBkZWZhdWx0LgorLklQICJcZkJcLW1sZWFkelxmUiIgNAorLklYIEl0ZW0gIi1tbGVhZHoiCitFbmFibGVzIHRoZSBcZihDV1wqKENgbGVhZHpcKihDJ1xmUiAobGVhZGluZyB6ZXJvKSBpbnN0cnVjdGlvbi4KKy5JUCAiXGZCXC1tbVxmUiIgNAorLklYIEl0ZW0gIi1tbSIKK0NhdXNlcyB2YXJpYWJsZXMgdG8gYmUgYXNzaWduZWQgdG8gdGhlIFxmKENXXCooQ2AubmVhclwqKEMnXGZSIHNlY3Rpb24gYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbWlubWF4XGZSIiA0CisuSVggSXRlbSAiLW1taW5tYXgiCitFbmFibGVzIHRoZSBcZihDV1wqKENgbWluXCooQydcZlIgYW5kIFxmKENXXCooQ2BtYXhcKihDJ1xmUiBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW11bHRcZlIiIDQKKy5JWCBJdGVtICItbW11bHQiCitFbmFibGVzIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQgbXVsdGlwbHktYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW5vXC1vcHRzXGZSIiA0CisuSVggSXRlbSAiLW1uby1vcHRzIgorRGlzYWJsZXMgYWxsIHRoZSBvcHRpb25hbCBpbnN0cnVjdGlvbnMgZW5hYmxlZCBieSBcZihDV1wqKENgXC1tYWxsXC1vcHRzXCooQydcZlIuCisuSVAgIlxmQlwtbXJlcGVhdFxmUiIgNAorLklYIEl0ZW0gIi1tcmVwZWF0IgorRW5hYmxlcyB0aGUgXGYoQ1dcKihDYHJlcGVhdFwqKEMnXGZSIGFuZCBcZihDV1wqKENgZXJlcGVhdFwqKEMnXGZSIGluc3RydWN0aW9ucywgdXNlZCBmb3IKK2xvdy1vdmVyaGVhZCBsb29waW5nLgorLklQICJcZkJcLW1zXGZSIiA0CisuSVggSXRlbSAiLW1zIgorQ2F1c2VzIGFsbCB2YXJpYWJsZXMgdG8gZGVmYXVsdCB0byB0aGUgXGYoQ1dcKihDYC50aW55XCooQydcZlIgc2VjdGlvbi4gIE5vdGUKK3RoYXQgdGhlcmUgaXMgYSA2NTUzNlwtYnl0ZSBsaW1pdCB0byB0aGlzIHNlY3Rpb24uICBBY2Nlc3NlcyB0byB0aGVzZQordmFyaWFibGVzIHVzZSB0aGUgXGYoQ1clZ3BcZlIgYmFzZSByZWdpc3Rlci4KKy5JUCAiXGZCXC1tc2F0dXJcZlIiIDQKKy5JWCBJdGVtICItbXNhdHVyIgorRW5hYmxlcyB0aGUgc2F0dXJhdGlvbiBpbnN0cnVjdGlvbnMuICBOb3RlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90CitjdXJyZW50bHkgZ2VuZXJhdGUgdGhlc2UgaXRzZWxmLCBidXQgdGhpcyBvcHRpb24gaXMgaW5jbHVkZWQgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgdG9vbHMsIGxpa2UgXGYoQ1dcKihDYGFzXCooQydcZlIuCisuSVAgIlxmQlwtbXNkcmFtXGZSIiA0CisuSVggSXRlbSAiLW1zZHJhbSIKK0xpbmsgdGhlIFNEUkFNLWJhc2VkIHJ1bnRpbWUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBST00tYmFzZWQgcnVudGltZS4KKy5JUCAiXGZCXC1tc2ltXGZSIiA0CisuSVggSXRlbSAiLW1zaW0iCitMaW5rIHRoZSBzaW11bGF0b3IgcnVudGltZSBsaWJyYXJpZXMuCisuSVAgIlxmQlwtbXNpbW5vdmVjXGZSIiA0CisuSVggSXRlbSAiLW1zaW1ub3ZlYyIKK0xpbmsgdGhlIHNpbXVsYXRvciBydW50aW1lIGxpYnJhcmllcywgZXhjbHVkaW5nIGJ1aWx0LWluIHN1cHBvcnQKK2ZvciByZXNldCBhbmQgZXhjZXB0aW9uIHZlY3RvcnMgYW5kIHRhYmxlcy4KKy5JUCAiXGZCXC1tdGZcZlIiIDQKKy5JWCBJdGVtICItbXRmIgorQ2F1c2VzIGFsbCBmdW5jdGlvbnMgdG8gZGVmYXVsdCB0byB0aGUgXGYoQ1dcKihDYC5mYXJcKihDJ1xmUiBzZWN0aW9uLiAgV2l0aG91dAordGhpcyBvcHRpb24sIGZ1bmN0aW9ucyBkZWZhdWx0IHRvIHRoZSBcZihDV1wqKENgLm5lYXJcKihDJ1xmUiBzZWN0aW9uLgorLklQICJcZkJcLW10aW55PVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItbXRpbnk9biIKK1ZhcmlhYmxlcyB0aGF0IGFyZSBcZkluXGZSIGJ5dGVzIG9yIHNtYWxsZXIgYXJlIGFsbG9jYXRlZCB0byB0aGUKK1wmXGYoQ1dcKihDYC50aW55XCooQydcZlIgc2VjdGlvbi4gIFRoZXNlIHZhcmlhYmxlcyB1c2UgdGhlIFxmKENXJGdwXGZSIGJhc2UKK3JlZ2lzdGVyLiAgVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzIDQsIGJ1dCBub3RlIHRoYXQgdGhlcmUncyBhCis2NTUzNlwtYnl0ZSBsaW1pdCB0byB0aGUgXGYoQ1dcKihDYC50aW55XCooQydcZlIgc2VjdGlvbi4KKy5QUAorXGZJTWljcm9CbGF6ZSBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTWljcm9CbGF6ZSBPcHRpb25zIgorLklQICJcZkJcLW1zb2Z0XC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1mbG9hdCIKK1VzZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGZsb2F0aW5nIHBvaW50IChkZWZhdWx0KS4KKy5JUCAiXGZCXC1taGFyZFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbWhhcmQtZmxvYXQiCitVc2UgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1tZW1jcHlcZlIiIDQKKy5JWCBJdGVtICItbW1lbWNweSIKK0RvIG5vdCBvcHRpbWl6ZSBibG9jayBtb3ZlcywgdXNlIFxmKENXXCooQ2BtZW1jcHlcKihDJ1xmUi4KKy5JUCAiXGZCXC1tbm9cLWNsZWFyYnNzXGZSIiA0CisuSVggSXRlbSAiLW1uby1jbGVhcmJzcyIKK1RoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQuICBVc2UgXGZCXC1mbm9cLXplcm9cLWluaXRpYWxpemVkXC1pblwtYnNzXGZSIGluc3RlYWQuCisuSVAgIlxmQlwtbWNwdT1cZlJcZkljcHUtdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PWNwdS10eXBlIgorVXNlIGZlYXR1cmVzIG9mLCBhbmQgc2NoZWR1bGUgY29kZSBmb3IsIHRoZSBnaXZlbiBccy0xQ1BVXHMwLgorU3VwcG9ydGVkIHZhbHVlcyBhcmUgaW4gdGhlIGZvcm1hdCBcZkJ2XGZSXGZJWFxmUlxmQi5cZlJcZklccy0xWVlcczBcZlJcZkIuXGZSXGZJWlxmUiwKK3doZXJlIFxmSVhcZlIgaXMgYSBtYWpvciB2ZXJzaW9uLCBcZklccy0xWVlcczBcZlIgaXMgdGhlIG1pbm9yIHZlcnNpb24sIGFuZAorXCZcZklaXGZSIGlzIGNvbXBhdGliaWxpdHkgY29kZS4gIEV4YW1wbGUgdmFsdWVzIGFyZSBcZkJ2My4wMC5hXGZSLAorXCZcZkJ2NC4wMC5iXGZSLCBcZkJ2NS4wMC5hXGZSLCBcZkJ2NS4wMC5iXGZSLCBcZkJ2NS4wMC5iXGZSLCBcZkJ2Ni4wMC5hXGZSLgorLklQICJcZkJcLW14bFwtc29mdFwtbXVsXGZSIiA0CisuSVggSXRlbSAiLW14bC1zb2Z0LW11bCIKK1VzZSBzb2Z0d2FyZSBtdWx0aXBseSBlbXVsYXRpb24gKGRlZmF1bHQpLgorLklQICJcZkJcLW14bFwtc29mdFwtZGl2XGZSIiA0CisuSVggSXRlbSAiLW14bC1zb2Z0LWRpdiIKK1VzZSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIGRpdmlkZXMgKGRlZmF1bHQpLgorLklQICJcZkJcLW14bFwtYmFycmVsXC1zaGlmdFxmUiIgNAorLklYIEl0ZW0gIi1teGwtYmFycmVsLXNoaWZ0IgorVXNlIHRoZSBoYXJkd2FyZSBiYXJyZWwgc2hpZnRlci4KKy5JUCAiXGZCXC1teGxcLXBhdHRlcm5cLWNvbXBhcmVcZlIiIDQKKy5JWCBJdGVtICItbXhsLXBhdHRlcm4tY29tcGFyZSIKK1VzZSBwYXR0ZXJuIGNvbXBhcmUgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1zbWFsbFwtZGl2aWRlc1xmUiIgNAorLklYIEl0ZW0gIi1tc21hbGwtZGl2aWRlcyIKK1VzZSB0YWJsZSBsb29rdXAgb3B0aW1pemF0aW9uIGZvciBzbWFsbCBzaWduZWQgaW50ZWdlciBkaXZpc2lvbnMuCisuSVAgIlxmQlwtbXhsXC1zdGFja1wtY2hlY2tcZlIiIDQKKy5JWCBJdGVtICItbXhsLXN0YWNrLWNoZWNrIgorVGhpcyBvcHRpb24gaXMgZGVwcmVjYXRlZC4gIFVzZSBcZkJcLWZzdGFja1wtY2hlY2tcZlIgaW5zdGVhZC4KKy5JUCAiXGZCXC1teGxcLWdwXC1vcHRcZlIiIDQKKy5JWCBJdGVtICItbXhsLWdwLW9wdCIKK1VzZSBHUC1yZWxhdGl2ZSBcZihDV1wqKENgLnNkYXRhXCooQydcZlIvXGYoQ1dcKihDYC5zYnNzXCooQydcZlIgc2VjdGlvbnMuCisuSVAgIlxmQlwtbXhsXC1tdWx0aXBseVwtaGlnaFxmUiIgNAorLklYIEl0ZW0gIi1teGwtbXVsdGlwbHktaGlnaCIKK1VzZSBtdWx0aXBseSBoaWdoIGluc3RydWN0aW9ucyBmb3IgaGlnaCBwYXJ0IG9mIDMyeDMyIG11bHRpcGx5LgorLklQICJcZkJcLW14bFwtZmxvYXRcLWNvbnZlcnRcZlIiIDQKKy5JWCBJdGVtICItbXhsLWZsb2F0LWNvbnZlcnQiCitVc2UgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgY29udmVyc2lvbiBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXhsXC1mbG9hdFwtc3FydFxmUiIgNAorLklYIEl0ZW0gIi1teGwtZmxvYXQtc3FydCIKK1VzZSBoYXJkd2FyZSBmbG9hdGluZy1wb2ludCBzcXVhcmUgcm9vdCBpbnN0cnVjdGlvbi4KKy5JUCAiXGZCXC1tYmlnXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWJpZy1lbmRpYW4iCitHZW5lcmF0ZSBjb2RlIGZvciBhIGJpZy1lbmRpYW4gdGFyZ2V0LgorLklQICJcZkJcLW1saXR0bGVcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tbGl0dGxlLWVuZGlhbiIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgbGl0dGxlLWVuZGlhbiB0YXJnZXQuCisuSVAgIlxmQlwtbXhsXC1yZW9yZGVyXGZSIiA0CisuSVggSXRlbSAiLW14bC1yZW9yZGVyIgorVXNlIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zIChzd2FwIGFuZCBieXRlIHJldmVyc2VkIGxvYWQvc3RvcmUpLgorLklQICJcZkJcLW14bFwtbW9kZVwtXGZSXGZJYXBwLW1vZGVsXGZSIiA0CisuSVggSXRlbSAiLW14bC1tb2RlLWFwcC1tb2RlbCIKK1NlbGVjdCBhcHBsaWNhdGlvbiBtb2RlbCBcZklhcHAtbW9kZWxcZlIuICBWYWxpZCBtb2RlbHMgYXJlCisuUlMgNAorLklQICJcZkJleGVjdXRhYmxlXGZSIiA0CisuSVggSXRlbSAiZXhlY3V0YWJsZSIKK25vcm1hbCBleGVjdXRhYmxlIChkZWZhdWx0KSwgdXNlcyBzdGFydHVwIGNvZGUgXGZJY3J0MC5vXGZSLgorLklQICJcZkJ4bWRzdHViXGZSIiA0CisuSVggSXRlbSAieG1kc3R1YiIKK2ZvciB1c2Ugd2l0aCBYaWxpbnggTWljcm9wcm9jZXNzb3IgRGVidWdnZXIgKFxzLTFYTURcczApIGJhc2VkCitzb2Z0d2FyZSBpbnRydXNpdmUgZGVidWcgYWdlbnQgY2FsbGVkIHhtZHN0dWIuIFRoaXMgdXNlcyBzdGFydHVwIGZpbGUKK1wmXGZJY3J0MS5vXGZSIGFuZCBzZXRzIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBwcm9ncmFtIHRvIDB4ODAwLgorLklQICJcZkJib290c3RyYXBcZlIiIDQKKy5JWCBJdGVtICJib290c3RyYXAiCitmb3IgYXBwbGljYXRpb25zIHRoYXQgYXJlIGxvYWRlZCB1c2luZyBhIGJvb3Rsb2FkZXIuCitUaGlzIG1vZGVsIHVzZXMgc3RhcnR1cCBmaWxlIFxmSWNydDIub1xmUiB3aGljaCBkb2VzIG5vdCBjb250YWluIGEgcHJvY2Vzc29yCityZXNldCB2ZWN0b3IgaGFuZGxlci4gVGhpcyBpcyBzdWl0YWJsZSBmb3IgdHJhbnNmZXJyaW5nIGNvbnRyb2wgb24gYQorcHJvY2Vzc29yIHJlc2V0IHRvIHRoZSBib290bG9hZGVyIHJhdGhlciB0aGFuIHRoZSBhcHBsaWNhdGlvbi4KKy5JUCAiXGZCbm92ZWN0b3JzXGZSIiA0CisuSVggSXRlbSAibm92ZWN0b3JzIgorZm9yIGFwcGxpY2F0aW9ucyB0aGF0IGRvIG5vdCByZXF1aXJlIGFueSBvZiB0aGUKK01pY3JvQmxhemUgdmVjdG9ycy4gVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHJ1bm5pbmcKK3dpdGhpbiBhIG1vbml0b3JpbmcgYXBwbGljYXRpb24uIFRoaXMgbW9kZWwgdXNlcyBcZkljcnQzLm9cZlIgYXMgYSBzdGFydHVwIGZpbGUuCisuUkUKKy5SUyA0CisuU3AKK09wdGlvbiBcZkJcLXhsXC1tb2RlXC1cZlJcZklhcHAtbW9kZWxcZlIgaXMgYSBkZXByZWNhdGVkIGFsaWFzIGZvcgorXCZcZkJcLW14bFwtbW9kZVwtXGZSXGZJYXBwLW1vZGVsXGZSLgorLlJFCisuUFAKK1xmSVxzLTFNSVBTXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJNSVBTIE9wdGlvbnMiCisuSVAgIlxmQlwtRUJcZlIiIDQKKy5JWCBJdGVtICItRUIiCitHZW5lcmF0ZSBiaWctZW5kaWFuIGNvZGUuCisuSVAgIlxmQlwtRUxcZlIiIDQKKy5JWCBJdGVtICItRUwiCitHZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIGNvZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBcZkJtaXBzKmVsXC0qXC0qXGZSCitjb25maWd1cmF0aW9ucy4KKy5JUCAiXGZCXC1tYXJjaD1cZlJcZklhcmNoXGZSIiA0CisuSVggSXRlbSAiLW1hcmNoPWFyY2giCitHZW5lcmF0ZSBjb2RlIHRoYXQgcnVucyBvbiBcZklhcmNoXGZSLCB3aGljaCBjYW4gYmUgdGhlIG5hbWUgb2YgYQorZ2VuZXJpYyBccy0xTUlQU1xzMCBccy0xSVNBXHMwLCBvciB0aGUgbmFtZSBvZiBhIHBhcnRpY3VsYXIgcHJvY2Vzc29yLgorVGhlIFxzLTFJU0FcczAgbmFtZXMgYXJlOgorXCZcZkJtaXBzMVxmUiwgXGZCbWlwczJcZlIsIFxmQm1pcHMzXGZSLCBcZkJtaXBzNFxmUiwKK1wmXGZCbWlwczMyXGZSLCBcZkJtaXBzMzJyMlxmUiwgXGZCbWlwczY0XGZSIGFuZCBcZkJtaXBzNjRyMlxmUi4KK1RoZSBwcm9jZXNzb3IgbmFtZXMgYXJlOgorXCZcZkI0a2NcZlIsIFxmQjRrbVxmUiwgXGZCNGtwXGZSLCBcZkI0a3NjXGZSLAorXCZcZkI0a2VjXGZSLCBcZkI0a2VtXGZSLCBcZkI0a2VwXGZSLCBcZkI0a3NkXGZSLAorXCZcZkI1a2NcZlIsIFxmQjVrZlxmUiwKK1wmXGZCMjBrY1xmUiwKK1wmXGZCMjRrY1xmUiwgXGZCMjRrZjJfMVxmUiwgXGZCMjRrZjFfMVxmUiwKK1wmXGZCMjRrZWNcZlIsIFxmQjI0a2VmMl8xXGZSLCBcZkIyNGtlZjFfMVxmUiwKK1wmXGZCMzRrY1xmUiwgXGZCMzRrZjJfMVxmUiwgXGZCMzRrZjFfMVxmUiwgXGZCMzRrblxmUiwKK1wmXGZCNzRrY1xmUiwgXGZCNzRrZjJfMVxmUiwgXGZCNzRrZjFfMVxmUiwgXGZCNzRrZjNfMlxmUiwKK1wmXGZCMTAwNGtjXGZSLCBcZkIxMDA0a2YyXzFcZlIsIFxmQjEwMDRrZjFfMVxmUiwKK1wmXGZCbG9vbmdzb24yZVxmUiwgXGZCbG9vbmdzb24yZlxmUiwgXGZCbG9vbmdzb24zYVxmUiwKK1wmXGZCbTRrXGZSLAorXCZcZkJvY3Rlb25cZlIsIFxmQm9jdGVvbitcZlIsIFxmQm9jdGVvbjJcZlIsCitcJlxmQm9yaW9uXGZSLAorXCZcZkJyMjAwMFxmUiwgXGZCcjMwMDBcZlIsIFxmQnIzOTAwXGZSLCBcZkJyNDAwMFxmUiwgXGZCcjQ0MDBcZlIsCitcJlxmQnI0NjAwXGZSLCBcZkJyNDY1MFxmUiwgXGZCcjQ3MDBcZlIsIFxmQnI2MDAwXGZSLCBcZkJyODAwMFxmUiwKK1wmXGZCcm03MDAwXGZSLCBcZkJybTkwMDBcZlIsCitcJlxmQnIxMDAwMFxmUiwgXGZCcjEyMDAwXGZSLCBcZkJyMTQwMDBcZlIsIFxmQnIxNjAwMFxmUiwKK1wmXGZCc2IxXGZSLAorXCZcZkJzcjcxMDAwXGZSLAorXCZcZkJ2cjQxMDBcZlIsIFxmQnZyNDExMVxmUiwgXGZCdnI0MTIwXGZSLCBcZkJ2cjQxMzBcZlIsIFxmQnZyNDMwMFxmUiwKK1wmXGZCdnI1MDAwXGZSLCBcZkJ2cjU0MDBcZlIsIFxmQnZyNTUwMFxmUiwKK1wmXGZCeGxyXGZSIGFuZCBcZkJ4bHBcZlIuCitUaGUgc3BlY2lhbCB2YWx1ZSBcZkJmcm9tLWFiaVxmUiBzZWxlY3RzIHRoZQorbW9zdCBjb21wYXRpYmxlIGFyY2hpdGVjdHVyZSBmb3IgdGhlIHNlbGVjdGVkIFxzLTFBQklcczAgKHRoYXQgaXMsCitcJlxmQm1pcHMxXGZSIGZvciAzMlwtYml0IEFCSXMgYW5kIFxmQm1pcHMzXGZSIGZvciA2NFwtYml0IEFCSXMpLgorLlNwCitUaGUgbmF0aXZlIExpbnV4L0dOVSB0b29sY2hhaW4gYWxzbyBzdXBwb3J0cyB0aGUgdmFsdWUgXGZCbmF0aXZlXGZSLAord2hpY2ggc2VsZWN0cyB0aGUgYmVzdCBhcmNoaXRlY3R1cmUgb3B0aW9uIGZvciB0aGUgaG9zdCBwcm9jZXNzb3IuCitcJlxmQlwtbWFyY2g9bmF0aXZlXGZSIGhhcyBubyBlZmZlY3QgaWYgXHMtMUdDQ1xzMCBkb2VzIG5vdCByZWNvZ25pemUKK3RoZSBwcm9jZXNzb3IuCisuU3AKK0luIHByb2Nlc3NvciBuYW1lcywgYSBmaW5hbCBcZkIwMDBcZlIgY2FuIGJlIGFiYnJldmlhdGVkIGFzIFxmQmtcZlIKKyhmb3IgZXhhbXBsZSwgXGZCXC1tYXJjaD1yMmtcZlIpLiAgUHJlZml4ZXMgYXJlIG9wdGlvbmFsLCBhbmQKK1wmXGZCdnJcZlIgbWF5IGJlIHdyaXR0ZW4gXGZCclxmUi4KKy5TcAorTmFtZXMgb2YgdGhlIGZvcm0gXGZJblxmUlxmQmYyXzFcZlIgcmVmZXIgdG8gcHJvY2Vzc29ycyB3aXRoCitGUFVzIGNsb2NrZWQgYXQgaGFsZiB0aGUgcmF0ZSBvZiB0aGUgY29yZSwgbmFtZXMgb2YgdGhlIGZvcm0KK1wmXGZJblxmUlxmQmYxXzFcZlIgcmVmZXIgdG8gcHJvY2Vzc29ycyB3aXRoIEZQVXMgY2xvY2tlZCBhdCB0aGUgc2FtZQorcmF0ZSBhcyB0aGUgY29yZSwgYW5kIG5hbWVzIG9mIHRoZSBmb3JtIFxmSW5cZlJcZkJmM18yXGZSIHJlZmVyIHRvCitwcm9jZXNzb3JzIHdpdGggRlBVcyBjbG9ja2VkIGEgcmF0aW8gb2YgMzoyIHdpdGggcmVzcGVjdCB0byB0aGUgY29yZS4KK0ZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIFxmSW5cZlJcZkJmXGZSIGlzIGFjY2VwdGVkIGFzIGEgc3lub255bQorZm9yIFxmSW5cZlJcZkJmMl8xXGZSIHdoaWxlIFxmSW5cZlJcZkJ4XGZSIGFuZCBcZkliXGZSXGZCZnhcZlIgYXJlCithY2NlcHRlZCBhcyBzeW5vbnltcyBmb3IgXGZJblxmUlxmQmYxXzFcZlIuCisuU3AKK1wmXHMtMUdDQ1xzMCBkZWZpbmVzIHR3byBtYWNyb3MgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLiAgVGhlIGZpcnN0CitpcyBcZkJfTUlQU19BUkNIXGZSLCB3aGljaCBnaXZlcyB0aGUgbmFtZSBvZiB0YXJnZXQgYXJjaGl0ZWN0dXJlLCBhcworYSBzdHJpbmcuICBUaGUgc2Vjb25kIGhhcyB0aGUgZm9ybSBcZkJfTUlQU19BUkNIX1xmUlxmSWZvb1xmUiwKK3doZXJlIFxmSWZvb1xmUiBpcyB0aGUgY2FwaXRhbGl6ZWQgdmFsdWUgb2YgXGZCX01JUFNfQVJDSFxmUi4KK0ZvciBleGFtcGxlLCBcZkJcLW1hcmNoPXIyMDAwXGZSIHNldHMgXGZCX01JUFNfQVJDSFxmUgordG8gXGZCXCooTCJyMjAwMFwqKFIiXGZSIGFuZCBkZWZpbmVzIHRoZSBtYWNybyBcZkJfTUlQU19BUkNIX1IyMDAwXGZSLgorLlNwCitOb3RlIHRoYXQgdGhlIFxmQl9NSVBTX0FSQ0hcZlIgbWFjcm8gdXNlcyB0aGUgcHJvY2Vzc29yIG5hbWVzIGdpdmVuCithYm92ZS4gIEluIG90aGVyIHdvcmRzLCBpdCBoYXMgdGhlIGZ1bGwgcHJlZml4IGFuZCBkb2VzIG5vdAorYWJicmV2aWF0ZSBcZkIwMDBcZlIgYXMgXGZCa1xmUi4gIEluIHRoZSBjYXNlIG9mIFxmQmZyb20tYWJpXGZSLAordGhlIG1hY3JvIG5hbWVzIHRoZSByZXNvbHZlZCBhcmNoaXRlY3R1cmUgKGVpdGhlciBcZkJcKihMIm1pcHMxXCooUiJcZlIgb3IKK1wmXGZCXCooTCJtaXBzM1wqKFIiXGZSKS4gIEl0IG5hbWVzIHRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSB3aGVuIG5vCitcJlxmQlwtbWFyY2hcZlIgb3B0aW9uIGlzIGdpdmVuLgorLklQICJcZkJcLW10dW5lPVxmUlxmSWFyY2hcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9YXJjaCIKK09wdGltaXplIGZvciBcZklhcmNoXGZSLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIG9wdGlvbiBjb250cm9scwordGhlIHdheSBpbnN0cnVjdGlvbnMgYXJlIHNjaGVkdWxlZCwgYW5kIHRoZSBwZXJjZWl2ZWQgY29zdCBvZiBhcml0aG1ldGljCitvcGVyYXRpb25zLiAgVGhlIGxpc3Qgb2YgXGZJYXJjaFxmUiB2YWx1ZXMgaXMgdGhlIHNhbWUgYXMgZm9yCitcJlxmQlwtbWFyY2hcZlIuCisuU3AKK1doZW4gdGhpcyBvcHRpb24gaXMgbm90IHVzZWQsIFxzLTFHQ0NcczAgb3B0aW1pemVzIGZvciB0aGUgcHJvY2Vzc29yCitzcGVjaWZpZWQgYnkgXGZCXC1tYXJjaFxmUi4gIEJ5IHVzaW5nIFxmQlwtbWFyY2hcZlIgYW5kCitcJlxmQlwtbXR1bmVcZlIgdG9nZXRoZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGdlbmVyYXRlIGNvZGUgdGhhdAorcnVucyBvbiBhIGZhbWlseSBvZiBwcm9jZXNzb3JzLCBidXQgb3B0aW1pemUgdGhlIGNvZGUgZm9yIG9uZQorcGFydGljdWxhciBtZW1iZXIgb2YgdGhhdCBmYW1pbHkuCisuU3AKK1wmXGZCXC1tdHVuZVxmUiBkZWZpbmVzIHRoZSBtYWNyb3MgXGZCX01JUFNfVFVORVxmUiBhbmQKK1wmXGZCX01JUFNfVFVORV9cZlJcZklmb29cZlIsIHdoaWNoIHdvcmsgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZQorXCZcZkJcLW1hcmNoXGZSIG9uZXMgZGVzY3JpYmVkIGFib3ZlLgorLklQICJcZkJcLW1pcHMxXGZSIiA0CisuSVggSXRlbSAiLW1pcHMxIgorRXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPW1pcHMxXGZSLgorLklQICJcZkJcLW1pcHMyXGZSIiA0CisuSVggSXRlbSAiLW1pcHMyIgorRXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPW1pcHMyXGZSLgorLklQICJcZkJcLW1pcHMzXGZSIiA0CisuSVggSXRlbSAiLW1pcHMzIgorRXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPW1pcHMzXGZSLgorLklQICJcZkJcLW1pcHM0XGZSIiA0CisuSVggSXRlbSAiLW1pcHM0IgorRXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPW1pcHM0XGZSLgorLklQICJcZkJcLW1pcHMzMlxmUiIgNAorLklYIEl0ZW0gIi1taXBzMzIiCitFcXVpdmFsZW50IHRvIFxmQlwtbWFyY2g9bWlwczMyXGZSLgorLklQICJcZkJcLW1pcHMzMnIyXGZSIiA0CisuSVggSXRlbSAiLW1pcHMzMnIyIgorRXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPW1pcHMzMnIyXGZSLgorLklQICJcZkJcLW1pcHM2NFxmUiIgNAorLklYIEl0ZW0gIi1taXBzNjQiCitFcXVpdmFsZW50IHRvIFxmQlwtbWFyY2g9bWlwczY0XGZSLgorLklQICJcZkJcLW1pcHM2NHIyXGZSIiA0CisuSVggSXRlbSAiLW1pcHM2NHIyIgorRXF1aXZhbGVudCB0byBcZkJcLW1hcmNoPW1pcHM2NHIyXGZSLgorLklQICJcZkJcLW1pcHMxNlxmUiIgNAorLklYIEl0ZW0gIi1taXBzMTYiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbWlwczE2XGZSIiA0CisuSVggSXRlbSAiLW1uby1taXBzMTYiCisuUEQKK0dlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIFxzLTFNSVBTMTZcczAgY29kZS4gIElmIFxzLTFHQ0NcczAgaXMgdGFyZ2V0aW5nIGEKK1wmXHMtMU1JUFMzMlxzMCBvciBccy0xTUlQUzY0XHMwIGFyY2hpdGVjdHVyZSwgaXQgbWFrZXMgdXNlIG9mIHRoZSBNSVBTMTZlIFxzLTFBU0VcczAuCisuU3AKK1wmXHMtMU1JUFMxNlxzMCBjb2RlIGdlbmVyYXRpb24gY2FuIGFsc28gYmUgY29udHJvbGxlZCBvbiBhIHBlci1mdW5jdGlvbiBiYXNpcworYnkgbWVhbnMgb2YgXGYoQ1dcKihDYG1pcHMxNlwqKEMnXGZSIGFuZCBcZihDV1wqKENgbm9taXBzMTZcKihDJ1xmUiBhdHRyaWJ1dGVzLgorLklQICJcZkJcLW1mbGlwXC1taXBzMTZcZlIiIDQKKy5JWCBJdGVtICItbWZsaXAtbWlwczE2IgorR2VuZXJhdGUgXHMtMU1JUFMxNlxzMCBjb2RlIG9uIGFsdGVybmF0aW5nIGZ1bmN0aW9ucy4gIFRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkCitmb3IgcmVncmVzc2lvbiB0ZXN0aW5nIG9mIG1peGVkIE1JUFMxNi9ub25cLU1JUFMxNiBjb2RlIGdlbmVyYXRpb24sIGFuZCBpcworbm90IGludGVuZGVkIGZvciBvcmRpbmFyeSB1c2UgaW4gY29tcGlsaW5nIHVzZXIgY29kZS4KKy5JUCAiXGZCXC1taW50ZXJsaW5rXC1taXBzMTZcZlIiIDQKKy5JWCBJdGVtICItbWludGVybGluay1taXBzMTYiCisuUEQgMAorLklQICJcZkJcLW1ub1wtaW50ZXJsaW5rXC1taXBzMTZcZlIiIDQKKy5JWCBJdGVtICItbW5vLWludGVybGluay1taXBzMTYiCisuUEQKK1JlcXVpcmUgKGRvIG5vdCByZXF1aXJlKSB0aGF0IG5vblwtTUlQUzE2IGNvZGUgYmUgbGluay1jb21wYXRpYmxlIHdpdGgKK1wmXHMtMU1JUFMxNlxzMCBjb2RlLgorLlNwCitGb3IgZXhhbXBsZSwgbm9uXC1NSVBTMTYgY29kZSBjYW5ub3QganVtcCBkaXJlY3RseSB0byBccy0xTUlQUzE2XHMwIGNvZGU7CitpdCBtdXN0IGVpdGhlciB1c2UgYSBjYWxsIG9yIGFuIGluZGlyZWN0IGp1bXAuICBcZkJcLW1pbnRlcmxpbmtcLW1pcHMxNlxmUgordGhlcmVmb3JlIGRpc2FibGVzIGRpcmVjdCBqdW1wcyB1bmxlc3MgXHMtMUdDQ1xzMCBrbm93cyB0aGF0IHRoZSB0YXJnZXQgb2YgdGhlCitqdW1wIGlzIG5vdCBccy0xTUlQUzE2XHMwLgorLklQICJcZkJcLW1hYmk9MzJcZlIiIDQKKy5JWCBJdGVtICItbWFiaT0zMiIKKy5QRCAwCisuSVAgIlxmQlwtbWFiaT1vNjRcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1vNjQiCisuSVAgIlxmQlwtbWFiaT1uMzJcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1uMzIiCisuSVAgIlxmQlwtbWFiaT02NFxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPTY0IgorLklQICJcZkJcLW1hYmk9ZWFiaVxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPWVhYmkiCisuUEQKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBnaXZlbiBccy0xQUJJXHMwLgorLlNwCitOb3RlIHRoYXQgdGhlIFxzLTFFQUJJXHMwIGhhcyBhIDMyXC1iaXQgYW5kIGEgNjRcLWJpdCB2YXJpYW50LiAgXHMtMUdDQ1xzMCBub3JtYWxseQorZ2VuZXJhdGVzIDY0XC1iaXQgY29kZSB3aGVuIHlvdSBzZWxlY3QgYSA2NFwtYml0IGFyY2hpdGVjdHVyZSwgYnV0IHlvdQorY2FuIHVzZSBcZkJcLW1ncDMyXGZSIHRvIGdldCAzMlwtYml0IGNvZGUgaW5zdGVhZC4KKy5TcAorRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBPNjQgXHMtMUFCSVxzMCwgc2VlCis8XGZCaHR0cDovL2djYy5nbnUub3JnL3Byb2plY3RzL21pcHNvNjRcLWFiaS5odG1sXGZSPi4KKy5TcAorXCZccy0xR0NDXHMwIHN1cHBvcnRzIGEgdmFyaWFudCBvZiB0aGUgbzMyIFxzLTFBQklcczAgaW4gd2hpY2ggZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzCithcmUgNjQgcmF0aGVyIHRoYW4gMzIgYml0cyB3aWRlLiAgWW91IGNhbiBzZWxlY3QgdGhpcyBjb21iaW5hdGlvbiB3aXRoCitcJlxmQlwtbWFiaT0zMlxmUiBcZkJcLW1mcDY0XGZSLiAgVGhpcyBccy0xQUJJXHMwIHJlbGllcyBvbiB0aGUgXGYoQ1dcKihDYG10aGMxXCooQydcZlIKK2FuZCBcZihDV1wqKENgbWZoYzFcKihDJ1xmUiBpbnN0cnVjdGlvbnMgYW5kIGlzIHRoZXJlZm9yZSBvbmx5IHN1cHBvcnRlZCBmb3IKK1wmXHMtMU1JUFMzMlIyXHMwIHByb2Nlc3NvcnMuCisuU3AKK1RoZSByZWdpc3RlciBhc3NpZ25tZW50cyBmb3IgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIHJlbWFpbiB0aGUKK3NhbWUsIGJ1dCBlYWNoIHNjYWxhciB2YWx1ZSBpcyBwYXNzZWQgaW4gYSBzaW5nbGUgNjRcLWJpdCByZWdpc3RlcgorcmF0aGVyIHRoYW4gYSBwYWlyIG9mIDMyXC1iaXQgcmVnaXN0ZXJzLiAgRm9yIGV4YW1wbGUsIHNjYWxhcgorZmxvYXRpbmctcG9pbnQgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBcZkJcZihDQiRmMFxmQlxmUiBvbmx5LCBub3QgYQorXCZcZkJcZihDQiRmMFxmQlxmUi9cZkJcZihDQiRmMVxmQlxmUiBwYWlyLiAgVGhlIHNldCBvZiBjYWxsLXNhdmVkIHJlZ2lzdGVycyBhbHNvCityZW1haW5zIHRoZSBzYW1lLCBidXQgYWxsIDY0IGJpdHMgYXJlIHNhdmVkLgorLklQICJcZkJcLW1hYmljYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tYWJpY2FsbHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtYWJpY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWFiaWNhbGxzIgorLlBECitHZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSBjb2RlIHRoYXQgaXMgc3VpdGFibGUgZm9yIFNWUjRcLXN0eWxlCitkeW5hbWljIG9iamVjdHMuICBcZkJcLW1hYmljYWxsc1xmUiBpcyB0aGUgZGVmYXVsdCBmb3IgU1ZSNFwtYmFzZWQKK3N5c3RlbXMuCisuSVAgIlxmQlwtbXNoYXJlZFxmUiIgNAorLklYIEl0ZW0gIi1tc2hhcmVkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNoYXJlZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc2hhcmVkIgorLlBECitHZW5lcmF0ZSAoZG8gbm90IGdlbmVyYXRlKSBjb2RlIHRoYXQgaXMgZnVsbHkgcG9zaXRpb24taW5kZXBlbmRlbnQsCithbmQgdGhhdCBjYW4gdGhlcmVmb3JlIGJlIGxpbmtlZCBpbnRvIHNoYXJlZCBsaWJyYXJpZXMuICBUaGlzIG9wdGlvbgorb25seSBhZmZlY3RzIFxmQlwtbWFiaWNhbGxzXGZSLgorLlNwCitBbGwgXGZCXC1tYWJpY2FsbHNcZlIgY29kZSBoYXMgdHJhZGl0aW9uYWxseSBiZWVuIHBvc2l0aW9uLWluZGVwZW5kZW50LAorcmVnYXJkbGVzcyBvZiBvcHRpb25zIGxpa2UgXGZCXC1mUElDXGZSIGFuZCBcZkJcLWZwaWNcZlIuICBIb3dldmVyLAorYXMgYW4gZXh0ZW5zaW9uLCB0aGUgXHMtMUdOVVxzMCB0b29sY2hhaW4gYWxsb3dzIGV4ZWN1dGFibGVzIHRvIHVzZSBhYnNvbHV0ZQorYWNjZXNzZXMgZm9yIGxvY2FsbHktYmluZGluZyBzeW1ib2xzLiAgSXQgY2FuIGFsc28gdXNlIHNob3J0ZXIgXHMtMUdQXHMwCitpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgYW5kIGdlbmVyYXRlIGRpcmVjdCBjYWxscyB0byBsb2NhbGx5LWRlZmluZWQKK2Z1bmN0aW9ucy4gIFRoaXMgbW9kZSBpcyBzZWxlY3RlZCBieSBcZkJcLW1ub1wtc2hhcmVkXGZSLgorLlNwCitcJlxmQlwtbW5vXC1zaGFyZWRcZlIgZGVwZW5kcyBvbiBiaW51dGlscyAyLjE2IG9yIGhpZ2hlciBhbmQgZ2VuZXJhdGVzCitvYmplY3RzIHRoYXQgY2FuIG9ubHkgYmUgbGlua2VkIGJ5IHRoZSBccy0xR05VXHMwIGxpbmtlci4gIEhvd2V2ZXIsIHRoZSBvcHRpb24KK2RvZXMgbm90IGFmZmVjdCB0aGUgXHMtMUFCSVxzMCBvZiB0aGUgZmluYWwgZXhlY3V0YWJsZTsgaXQgb25seSBhZmZlY3RzIHRoZSBccy0xQUJJXHMwCitvZiByZWxvY2F0YWJsZSBvYmplY3RzLiAgVXNpbmcgXGZCXC1tbm9cLXNoYXJlZFxmUiBnZW5lcmFsbHkgbWFrZXMKK2V4ZWN1dGFibGVzIGJvdGggc21hbGxlciBhbmQgcXVpY2tlci4KKy5TcAorXCZcZkJcLW1zaGFyZWRcZlIgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbXBsdFxmUiIgNAorLklYIEl0ZW0gIi1tcGx0IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBsdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcGx0IgorLlBECitBc3N1bWUgKGRvIG5vdCBhc3N1bWUpIHRoYXQgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyBsaW5rZXJzCitzdXBwb3J0IFBMVHMgYW5kIGNvcHkgcmVsb2NhdGlvbnMuICBUaGlzIG9wdGlvbiBvbmx5IGFmZmVjdHMKK1wmXGZCXC1tbm9cLXNoYXJlZCBcLW1hYmljYWxsc1xmUi4gIEZvciB0aGUgbjY0IFxzLTFBQklcczAsIHRoaXMgb3B0aW9uCitoYXMgbm8gZWZmZWN0IHdpdGhvdXQgXGZCXC1tc3ltMzJcZlIuCisuU3AKK1lvdSBjYW4gbWFrZSBcZkJcLW1wbHRcZlIgdGhlIGRlZmF1bHQgYnkgY29uZmlndXJpbmcKK1wmXHMtMUdDQ1xzMCB3aXRoIFxmQlwtXC13aXRoXC1taXBzXC1wbHRcZlIuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLW1ub1wtcGx0XGZSIG90aGVyd2lzZS4KKy5JUCAiXGZCXC1teGdvdFxmUiIgNAorLklYIEl0ZW0gIi1teGdvdCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC14Z290XGZSIiA0CisuSVggSXRlbSAiLW1uby14Z290IgorLlBECitMaWZ0IChkbyBub3QgbGlmdCkgdGhlIHVzdWFsIHJlc3RyaWN0aW9ucyBvbiB0aGUgc2l6ZSBvZiB0aGUgZ2xvYmFsCitvZmZzZXQgdGFibGUuCisuU3AKK1wmXHMtMUdDQ1xzMCBub3JtYWxseSB1c2VzIGEgc2luZ2xlIGluc3RydWN0aW9uIHRvIGxvYWQgdmFsdWVzIGZyb20gdGhlIFxzLTFHT1RcczAuCitXaGlsZSB0aGlzIGlzIHJlbGF0aXZlbHkgZWZmaWNpZW50LCBpdCBvbmx5IHdvcmtzIGlmIHRoZSBccy0xR09UXHMwCitpcyBzbWFsbGVyIHRoYW4gYWJvdXQgNjRrLiAgQW55dGhpbmcgbGFyZ2VyIGNhdXNlcyB0aGUgbGlua2VyCit0byByZXBvcnQgYW4gZXJyb3Igc3VjaCBhczoKKy5TcAorLlZiIDEKK1wmICAgICAgICByZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ6IFJfTUlQU19HT1QxNiBmb29iYXIKKy5WZQorLlNwCitJZiB0aGlzIGhhcHBlbnMsIHlvdSBzaG91bGQgcmVjb21waWxlIHlvdXIgY29kZSB3aXRoIFxmQlwtbXhnb3RcZlIuCitUaGlzIHdvcmtzIHdpdGggdmVyeSBsYXJnZSBHT1RzLCBhbHRob3VnaCB0aGUgY29kZSBpcyBhbHNvCitsZXNzIGVmZmljaWVudCwgc2luY2UgaXQgdGFrZXMgdGhyZWUgaW5zdHJ1Y3Rpb25zIHRvIGZldGNoIHRoZQordmFsdWUgb2YgYSBnbG9iYWwgc3ltYm9sLgorLlNwCitOb3RlIHRoYXQgc29tZSBsaW5rZXJzIGNhbiBjcmVhdGUgbXVsdGlwbGUgR09Ucy4gIElmIHlvdSBoYXZlIHN1Y2ggYQorbGlua2VyLCB5b3Ugc2hvdWxkIG9ubHkgbmVlZCB0byB1c2UgXGZCXC1teGdvdFxmUiB3aGVuIGEgc2luZ2xlIG9iamVjdAorZmlsZSBhY2Nlc3NlcyBtb3JlIHRoYW4gNjRrJ3Mgd29ydGggb2YgXHMtMUdPVFxzMCBlbnRyaWVzLiAgVmVyeSBmZXcgZG8uCisuU3AKK1RoZXNlIG9wdGlvbnMgaGF2ZSBubyBlZmZlY3QgdW5sZXNzIFxzLTFHQ0NcczAgaXMgZ2VuZXJhdGluZyBwb3NpdGlvbgoraW5kZXBlbmRlbnQgY29kZS4KKy5JUCAiXGZCXC1tZ3AzMlxmUiIgNAorLklYIEl0ZW0gIi1tZ3AzMiIKK0Fzc3VtZSB0aGF0IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgYXJlIDMyIGJpdHMgd2lkZS4KKy5JUCAiXGZCXC1tZ3A2NFxmUiIgNAorLklYIEl0ZW0gIi1tZ3A2NCIKK0Fzc3VtZSB0aGF0IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgYXJlIDY0IGJpdHMgd2lkZS4KKy5JUCAiXGZCXC1tZnAzMlxmUiIgNAorLklYIEl0ZW0gIi1tZnAzMiIKK0Fzc3VtZSB0aGF0IGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBhcmUgMzIgYml0cyB3aWRlLgorLklQICJcZkJcLW1mcDY0XGZSIiA0CisuSVggSXRlbSAiLW1mcDY0IgorQXNzdW1lIHRoYXQgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIGFyZSA2NCBiaXRzIHdpZGUuCisuSVAgIlxmQlwtbWhhcmRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWZsb2F0IgorVXNlIGZsb2F0aW5nLXBvaW50IGNvcHJvY2Vzc29yIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCitEbyBub3QgdXNlIGZsb2F0aW5nLXBvaW50IGNvcHJvY2Vzc29yIGluc3RydWN0aW9ucy4gIEltcGxlbWVudAorZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb25zIHVzaW5nIGxpYnJhcnkgY2FsbHMgaW5zdGVhZC4KKy5JUCAiXGZCXC1tbm9cLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1uby1mbG9hdCIKK0VxdWl2YWxlbnQgdG8gXGZCXC1tc29mdFwtZmxvYXRcZlIsIGJ1dCBhZGRpdGlvbmFsbHkgYXNzZXJ0cyB0aGF0IHRoZQorcHJvZ3JhbSBiZWluZyBjb21waWxlZCBkb2VzIG5vdCBwZXJmb3JtIGFueSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorVGhpcyBvcHRpb24gaXMgcHJlc2VudGx5IHN1cHBvcnRlZCBvbmx5IGJ5IHNvbWUgYmFyZS1tZXRhbCBccy0xTUlQU1xzMAorY29uZmlndXJhdGlvbnMsIHdoZXJlIGl0IG1heSBzZWxlY3QgYSBzcGVjaWFsIHNldCBvZiBsaWJyYXJpZXMKK3RoYXQgbGFjayBhbGwgZmxvYXRpbmctcG9pbnQgc3VwcG9ydCAoaW5jbHVkaW5nLCBmb3IgZXhhbXBsZSwgdGhlCitmbG9hdGluZy1wb2ludCBcZihDV1wqKENgcHJpbnRmXCooQydcZlIgZm9ybWF0cykuICAKK0lmIGNvZGUgY29tcGlsZWQgd2l0aCBcZihDV1wqKENgXC1tbm9cLWZsb2F0XCooQydcZlIgYWNjaWRlbnRhbGx5IGNvbnRhaW5zCitmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLCBpdCBpcyBsaWtlbHkgdG8gc3VmZmVyIGEgbGluay10aW1lCitvciBydW4tdGltZSBmYWlsdXJlLgorLklQICJcZkJcLW1zaW5nbGVcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1zaW5nbGUtZmxvYXQiCitBc3N1bWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY29wcm9jZXNzb3Igb25seSBzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uCitvcGVyYXRpb25zLgorLklQICJcZkJcLW1kb3VibGVcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1kb3VibGUtZmxvYXQiCitBc3N1bWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY29wcm9jZXNzb3Igc3VwcG9ydHMgZG91YmxlLXByZWNpc2lvbgorb3BlcmF0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWxsc2NcZlIiIDQKKy5JWCBJdGVtICItbWxsc2MiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbGxzY1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tbGxzYyIKKy5QRAorVXNlIChkbyBub3QgdXNlKSBcZkJsbFxmUiwgXGZCc2NcZlIsIGFuZCBcZkJzeW5jXGZSIGluc3RydWN0aW9ucyB0bworaW1wbGVtZW50IGF0b21pYyBtZW1vcnkgYnVpbHQtaW4gZnVuY3Rpb25zLiAgV2hlbiBuZWl0aGVyIG9wdGlvbiBpcworc3BlY2lmaWVkLCBccy0xR0NDXHMwIHVzZXMgdGhlIGluc3RydWN0aW9ucyBpZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZQorc3VwcG9ydHMgdGhlbS4KKy5TcAorXCZcZkJcLW1sbHNjXGZSIGlzIHVzZWZ1bCBpZiB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBjYW4gZW11bGF0ZSB0aGUKK2luc3RydWN0aW9ucyBhbmQgXGZCXC1tbm9cLWxsc2NcZlIgY2FuIGJlIHVzZWZ1bCB3aGVuIGNvbXBpbGluZyBmb3IKK25vbnN0YW5kYXJkIElTQXMuICBZb3UgY2FuIG1ha2UgZWl0aGVyIG9wdGlvbiB0aGUgZGVmYXVsdCBieQorY29uZmlndXJpbmcgXHMtMUdDQ1xzMCB3aXRoIFxmQlwtXC13aXRoXC1sbHNjXGZSIGFuZCBcZkJcLVwtd2l0aG91dFwtbGxzY1xmUgorcmVzcGVjdGl2ZWx5LiAgXGZCXC1cLXdpdGhcLWxsc2NcZlIgaXMgdGhlIGRlZmF1bHQgZm9yIHNvbWUKK2NvbmZpZ3VyYXRpb25zOyBzZWUgdGhlIGluc3RhbGxhdGlvbiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorLklQICJcZkJcLW1kc3BcZlIiIDQKKy5JWCBJdGVtICItbWRzcCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1kc3BcZlIiIDQKKy5JWCBJdGVtICItbW5vLWRzcCIKKy5QRAorVXNlIChkbyBub3QgdXNlKSByZXZpc2lvbiAxIG9mIHRoZSBccy0xTUlQU1xzMCBccy0xRFNQXHMwIFxzLTFBU0VcczAuCisgIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlCitwcmVwcm9jZXNzb3IgbWFjcm8gXGZCX1x8X21pcHNfZHNwXGZSLiAgSXQgYWxzbyBkZWZpbmVzCitcJlxmQl9cfF9taXBzX2RzcF9yZXZcZlIgdG8gMS4KKy5JUCAiXGZCXC1tZHNwcjJcZlIiIDQKKy5JWCBJdGVtICItbWRzcHIyIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWRzcHIyXGZSIiA0CisuSVggSXRlbSAiLW1uby1kc3ByMiIKKy5QRAorVXNlIChkbyBub3QgdXNlKSByZXZpc2lvbiAyIG9mIHRoZSBccy0xTUlQU1xzMCBccy0xRFNQXHMwIFxzLTFBU0VcczAuCisgIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlCitwcmVwcm9jZXNzb3IgbWFjcm9zIFxmQl9cfF9taXBzX2RzcFxmUiBhbmQgXGZCX1x8X21pcHNfZHNwcjJcZlIuCitJdCBhbHNvIGRlZmluZXMgXGZCX1x8X21pcHNfZHNwX3JldlxmUiB0byAyLgorLklQICJcZkJcLW1zbWFydG1pcHNcZlIiIDQKKy5JWCBJdGVtICItbXNtYXJ0bWlwcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zbWFydG1pcHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNtYXJ0bWlwcyIKKy5QRAorVXNlIChkbyBub3QgdXNlKSB0aGUgXHMtMU1JUFNcczAgU21hcnRNSVBTIFxzLTFBU0VcczAuCisuSVAgIlxmQlwtbXBhaXJlZFwtc2luZ2xlXGZSIiA0CisuSVggSXRlbSAiLW1wYWlyZWQtc2luZ2xlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBhaXJlZFwtc2luZ2xlXGZSIiA0CisuSVggSXRlbSAiLW1uby1wYWlyZWQtc2luZ2xlIgorLlBECitVc2UgKGRvIG5vdCB1c2UpIHBhaXJlZC1zaW5nbGUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLgorICBUaGlzIG9wdGlvbiByZXF1aXJlcworaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgc3VwcG9ydCB0byBiZSBlbmFibGVkLgorLklQICJcZkJcLW1kbXhcZlIiIDQKKy5JWCBJdGVtICItbWRteCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1tZG14XGZSIiA0CisuSVggSXRlbSAiLW1uby1tZG14IgorLlBECitVc2UgKGRvIG5vdCB1c2UpIFxzLTFNSVBTXHMwIERpZ2l0YWwgTWVkaWEgRXh0ZW5zaW9uIGluc3RydWN0aW9ucy4KK1RoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIDY0XC1iaXQgY29kZSBhbmQgcmVxdWlyZXMKK2hhcmR3YXJlIGZsb2F0aW5nLXBvaW50IHN1cHBvcnQgdG8gYmUgZW5hYmxlZC4KKy5JUCAiXGZCXC1taXBzM2RcZlIiIDQKKy5JWCBJdGVtICItbWlwczNkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW1pcHMzZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWlwczNkIgorLlBECitVc2UgKGRvIG5vdCB1c2UpIHRoZSBccy0xTUlQU1wtM0RcczAgXHMtMUFTRVxzMC4gIAorVGhlIG9wdGlvbiBcZkJcLW1pcHMzZFxmUiBpbXBsaWVzIFxmQlwtbXBhaXJlZFwtc2luZ2xlXGZSLgorLklQICJcZkJcLW1tdFxmUiIgNAorLklYIEl0ZW0gIi1tbXQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbXRcZlIiIDQKKy5JWCBJdGVtICItbW5vLW10IgorLlBECitVc2UgKGRvIG5vdCB1c2UpIFxzLTFNVFxzMCBNdWx0aXRocmVhZGluZyBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW1jdVxmUiIgNAorLklYIEl0ZW0gIi1tbWN1IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW1jdVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWN1IgorLlBECitVc2UgKGRvIG5vdCB1c2UpIHRoZSBccy0xTUlQU1xzMCBccy0xTUNVXHMwIFxzLTFBU0VcczAgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1sb25nNjRcZlIiIDQKKy5JWCBJdGVtICItbWxvbmc2NCIKK0ZvcmNlIFxmKENXXCooQ2Bsb25nXCooQydcZlIgdHlwZXMgdG8gYmUgNjQgYml0cyB3aWRlLiAgU2VlIFxmQlwtbWxvbmczMlxmUiBmb3IKK2FuIGV4cGxhbmF0aW9uIG9mIHRoZSBkZWZhdWx0IGFuZCB0aGUgd2F5IHRoYXQgdGhlIHBvaW50ZXIgc2l6ZSBpcworZGV0ZXJtaW5lZC4KKy5JUCAiXGZCXC1tbG9uZzMyXGZSIiA0CisuSVggSXRlbSAiLW1sb25nMzIiCitGb3JjZSBcZihDV1wqKENgbG9uZ1wqKEMnXGZSLCBcZihDV1wqKENgaW50XCooQydcZlIsIGFuZCBwb2ludGVyIHR5cGVzIHRvIGJlIDMyIGJpdHMgd2lkZS4KKy5TcAorVGhlIGRlZmF1bHQgc2l6ZSBvZiBcZihDV1wqKENgaW50XCooQydcZlJzLCBcZihDV1wqKENgbG9uZ1wqKEMnXGZScyBhbmQgcG9pbnRlcnMgZGVwZW5kcyBvbgordGhlIFxzLTFBQklcczAuICBBbGwgdGhlIHN1cHBvcnRlZCBBQklzIHVzZSAzMlwtYml0IFxmKENXXCooQ2BpbnRcKihDJ1xmUnMuICBUaGUgbjY0IFxzLTFBQklcczAKK3VzZXMgNjRcLWJpdCBcZihDV1wqKENgbG9uZ1wqKEMnXGZScywgYXMgZG9lcyB0aGUgNjRcLWJpdCBccy0xRUFCSVxzMDsgdGhlIG90aGVycyB1c2UKKzMyXC1iaXQgXGYoQ1dcKihDYGxvbmdcKihDJ1xmUnMuICBQb2ludGVycyBhcmUgdGhlIHNhbWUgc2l6ZSBhcyBcZihDV1wqKENgbG9uZ1wqKEMnXGZScywKK29yIHRoZSBzYW1lIHNpemUgYXMgaW50ZWdlciByZWdpc3RlcnMsIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorLklQICJcZkJcLW1zeW0zMlxmUiIgNAorLklYIEl0ZW0gIi1tc3ltMzIiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc3ltMzJcZlIiIDQKKy5JWCBJdGVtICItbW5vLXN5bTMyIgorLlBECitBc3N1bWUgKGRvIG5vdCBhc3N1bWUpIHRoYXQgYWxsIHN5bWJvbHMgaGF2ZSAzMlwtYml0IHZhbHVlcywgcmVnYXJkbGVzcworb2YgdGhlIHNlbGVjdGVkIFxzLTFBQklcczAuICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaW4gY29tYmluYXRpb24gd2l0aAorXCZcZkJcLW1hYmk9NjRcZlIgYW5kIFxmQlwtbW5vXC1hYmljYWxsc1xmUiBiZWNhdXNlIGl0IGFsbG93cyBccy0xR0NDXHMwCit0byBnZW5lcmF0ZSBzaG9ydGVyIGFuZCBmYXN0ZXIgcmVmZXJlbmNlcyB0byBzeW1ib2xpYyBhZGRyZXNzZXMuCisuSVAgIlxmQlwtR1xmUiBcZkludW1cZlIiIDQKKy5JWCBJdGVtICItRyBudW0iCitQdXQgZGVmaW5pdGlvbnMgb2YgZXh0ZXJuYWxseS12aXNpYmxlIGRhdGEgaW4gYSBzbWFsbCBkYXRhIHNlY3Rpb24KK2lmIHRoYXQgZGF0YSBpcyBubyBiaWdnZXIgdGhhbiBcZkludW1cZlIgYnl0ZXMuICBccy0xR0NDXHMwIGNhbiB0aGVuIGdlbmVyYXRlCittb3JlIGVmZmljaWVudCBhY2Nlc3NlcyB0byB0aGUgZGF0YTsgc2VlIFxmQlwtbWdwb3B0XGZSIGZvciBkZXRhaWxzLgorLlNwCitUaGUgZGVmYXVsdCBcZkJcLUdcZlIgb3B0aW9uIGRlcGVuZHMgb24gdGhlIGNvbmZpZ3VyYXRpb24uCisuSVAgIlxmQlwtbWxvY2FsXC1zZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbG9jYWwtc2RhdGEiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbG9jYWxcLXNkYXRhXGZSIiA0CisuSVggSXRlbSAiLW1uby1sb2NhbC1zZGF0YSIKKy5QRAorRXh0ZW5kIChkbyBub3QgZXh0ZW5kKSB0aGUgXGZCXC1HXGZSIGJlaGF2aW9yIHRvIGxvY2FsIGRhdGEgdG9vLAorc3VjaCBhcyB0byBzdGF0aWMgdmFyaWFibGVzIGluIEMuICBcZkJcLW1sb2NhbFwtc2RhdGFcZlIgaXMgdGhlCitkZWZhdWx0IGZvciBhbGwgY29uZmlndXJhdGlvbnMuCisuU3AKK0lmIHRoZSBsaW5rZXIgY29tcGxhaW5zIHRoYXQgYW4gYXBwbGljYXRpb24gaXMgdXNpbmcgdG9vIG11Y2ggc21hbGwgZGF0YSwKK3lvdSBtaWdodCB3YW50IHRvIHRyeSByZWJ1aWxkaW5nIHRoZSBsZXNzIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhcnRzIHdpdGgKK1wmXGZCXC1tbm9cLWxvY2FsXC1zZGF0YVxmUi4gIFlvdSBtaWdodCBhbHNvIHdhbnQgdG8gYnVpbGQgbGFyZ2UKK2xpYnJhcmllcyB3aXRoIFxmQlwtbW5vXC1sb2NhbFwtc2RhdGFcZlIsIHNvIHRoYXQgdGhlIGxpYnJhcmllcyBsZWF2ZQorbW9yZSByb29tIGZvciB0aGUgbWFpbiBwcm9ncmFtLgorLklQICJcZkJcLW1leHRlcm5cLXNkYXRhXGZSIiA0CisuSVggSXRlbSAiLW1leHRlcm4tc2RhdGEiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZXh0ZXJuXC1zZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZXh0ZXJuLXNkYXRhIgorLlBECitBc3N1bWUgKGRvIG5vdCBhc3N1bWUpIHRoYXQgZXh0ZXJuYWxseS1kZWZpbmVkIGRhdGEgaXMgaW4KK2Egc21hbGwgZGF0YSBzZWN0aW9uIGlmIHRoZSBzaXplIG9mIHRoYXQgZGF0YSBpcyB3aXRoaW4gdGhlIFxmQlwtR1xmUiBsaW1pdC4KK1wmXGZCXC1tZXh0ZXJuXC1zZGF0YVxmUiBpcyB0aGUgZGVmYXVsdCBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zLgorLlNwCitJZiB5b3UgY29tcGlsZSBhIG1vZHVsZSBcZklNb2RcZlIgd2l0aCBcZkJcLW1leHRlcm5cLXNkYXRhXGZSIFxmQlwtR1xmUgorXCZcZkludW1cZlIgXGZCXC1tZ3BvcHRcZlIsIGFuZCBcZklNb2RcZlIgcmVmZXJlbmNlcyBhIHZhcmlhYmxlIFxmSVZhclxmUgordGhhdCBpcyBubyBiaWdnZXIgdGhhbiBcZkludW1cZlIgYnl0ZXMsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IFxmSVZhclxmUgoraXMgcGxhY2VkIGluIGEgc21hbGwgZGF0YSBzZWN0aW9uLiAgSWYgXGZJVmFyXGZSIGlzIGRlZmluZWQgYnkgYW5vdGhlcgorbW9kdWxlLCB5b3UgbXVzdCBlaXRoZXIgY29tcGlsZSB0aGF0IG1vZHVsZSB3aXRoIGEgaGlnaC1lbm91Z2gKK1wmXGZCXC1HXGZSIHNldHRpbmcgb3IgYXR0YWNoIGEgXGYoQ1dcKihDYHNlY3Rpb25cKihDJ1xmUiBhdHRyaWJ1dGUgdG8gXGZJVmFyXGZSJ3MKK2RlZmluaXRpb24uICBJZiBcZklWYXJcZlIgaXMgY29tbW9uLCB5b3UgbXVzdCBsaW5rIHRoZSBhcHBsaWNhdGlvbgord2l0aCBhIGhpZ2gtZW5vdWdoIFxmQlwtR1xmUiBzZXR0aW5nLgorLlNwCitUaGUgZWFzaWVzdCB3YXkgb2Ygc2F0aXNmeWluZyB0aGVzZSByZXN0cmljdGlvbnMgaXMgdG8gY29tcGlsZQorYW5kIGxpbmsgZXZlcnkgbW9kdWxlIHdpdGggdGhlIHNhbWUgXGZCXC1HXGZSIG9wdGlvbi4gIEhvd2V2ZXIsCit5b3UgbWF5IHdpc2ggdG8gYnVpbGQgYSBsaWJyYXJ5IHRoYXQgc3VwcG9ydHMgc2V2ZXJhbCBkaWZmZXJlbnQKK3NtYWxsIGRhdGEgbGltaXRzLiAgWW91IGNhbiBkbyB0aGlzIGJ5IGNvbXBpbGluZyB0aGUgbGlicmFyeSB3aXRoCit0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgXGZCXC1HXGZSIHNldHRpbmcgYW5kIGFkZGl0aW9uYWxseSB1c2luZworXCZcZkJcLW1ub1wtZXh0ZXJuXC1zZGF0YVxmUiB0byBzdG9wIHRoZSBsaWJyYXJ5IGZyb20gbWFraW5nIGFzc3VtcHRpb25zCithYm91dCBleHRlcm5hbGx5LWRlZmluZWQgZGF0YS4KKy5JUCAiXGZCXC1tZ3BvcHRcZlIiIDQKKy5JWCBJdGVtICItbWdwb3B0IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWdwb3B0XGZSIiA0CisuSVggSXRlbSAiLW1uby1ncG9wdCIKKy5QRAorVXNlIChkbyBub3QgdXNlKSBHUC1yZWxhdGl2ZSBhY2Nlc3NlcyBmb3Igc3ltYm9scyB0aGF0IGFyZSBrbm93biB0byBiZQoraW4gYSBzbWFsbCBkYXRhIHNlY3Rpb247IHNlZSBcZkJcLUdcZlIsIFxmQlwtbWxvY2FsXC1zZGF0YVxmUiBhbmQKK1wmXGZCXC1tZXh0ZXJuXC1zZGF0YVxmUi4gIFxmQlwtbWdwb3B0XGZSIGlzIHRoZSBkZWZhdWx0IGZvciBhbGwKK2NvbmZpZ3VyYXRpb25zLgorLlNwCitcJlxmQlwtbW5vXC1ncG9wdFxmUiBpcyB1c2VmdWwgZm9yIGNhc2VzIHdoZXJlIHRoZSBcZihDVyRncFxmUiByZWdpc3RlcgorbWlnaHQgbm90IGhvbGQgdGhlIHZhbHVlIG9mIFxmKENXXCooQ2BfZ3BcKihDJ1xmUi4gIEZvciBleGFtcGxlLCBpZiB0aGUgY29kZSBpcworcGFydCBvZiBhIGxpYnJhcnkgdGhhdCBtaWdodCBiZSB1c2VkIGluIGEgYm9vdCBtb25pdG9yLCBwcm9ncmFtcyB0aGF0CitjYWxsIGJvb3QgbW9uaXRvciByb3V0aW5lcyBwYXNzIGFuIHVua25vd24gdmFsdWUgaW4gXGYoQ1ckZ3BcZlIuCisoSW4gc3VjaCBzaXR1YXRpb25zLCB0aGUgYm9vdCBtb25pdG9yIGl0c2VsZiBpcyB1c3VhbGx5IGNvbXBpbGVkCit3aXRoIFxmQlwtRzBcZlIuKQorLlNwCitcJlxmQlwtbW5vXC1ncG9wdFxmUiBpbXBsaWVzIFxmQlwtbW5vXC1sb2NhbFwtc2RhdGFcZlIgYW5kCitcJlxmQlwtbW5vXC1leHRlcm5cLXNkYXRhXGZSLgorLklQICJcZkJcLW1lbWJlZGRlZFwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tZW1iZWRkZWQtZGF0YSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1lbWJlZGRlZFwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZW1iZWRkZWQtZGF0YSIKKy5QRAorQWxsb2NhdGUgdmFyaWFibGVzIHRvIHRoZSByZWFkLW9ubHkgZGF0YSBzZWN0aW9uIGZpcnN0IGlmIHBvc3NpYmxlLCB0aGVuCituZXh0IGluIHRoZSBzbWFsbCBkYXRhIHNlY3Rpb24gaWYgcG9zc2libGUsIG90aGVyd2lzZSBpbiBkYXRhLiAgVGhpcyBnaXZlcworc2xpZ2h0bHkgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCwgYnV0IHJlZHVjZXMgdGhlIGFtb3VudCBvZiBccy0xUkFNXHMwIHJlcXVpcmVkCit3aGVuIGV4ZWN1dGluZywgYW5kIHRodXMgbWF5IGJlIHByZWZlcnJlZCBmb3Igc29tZSBlbWJlZGRlZCBzeXN0ZW1zLgorLklQICJcZkJcLW11bmluaXRcLWNvbnN0XC1pblwtcm9kYXRhXGZSIiA0CisuSVggSXRlbSAiLW11bmluaXQtY29uc3QtaW4tcm9kYXRhIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXVuaW5pdFwtY29uc3RcLWluXC1yb2RhdGFcZlIiIDQKKy5JWCBJdGVtICItbW5vLXVuaW5pdC1jb25zdC1pbi1yb2RhdGEiCisuUEQKK1B1dCB1bmluaXRpYWxpemVkIFxmKENXXCooQ2Bjb25zdFwqKEMnXGZSIHZhcmlhYmxlcyBpbiB0aGUgcmVhZC1vbmx5IGRhdGEgc2VjdGlvbi4KK1RoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBpbiBjb25qdW5jdGlvbiB3aXRoIFxmQlwtbWVtYmVkZGVkXC1kYXRhXGZSLgorLklQICJcZkJcLW1jb2RlXC1yZWFkYWJsZT1cZlJcZklzZXR0aW5nXGZSIiA0CisuSVggSXRlbSAiLW1jb2RlLXJlYWRhYmxlPXNldHRpbmciCitTcGVjaWZ5IHdoZXRoZXIgXHMtMUdDQ1xzMCBtYXkgZ2VuZXJhdGUgY29kZSB0aGF0IHJlYWRzIGZyb20gZXhlY3V0YWJsZSBzZWN0aW9ucy4KK1RoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSBzZXR0aW5nczoKKy5SUyA0CisuSVAgIlxmQlwtbWNvZGVcLXJlYWRhYmxlPXllc1xmUiIgNAorLklYIEl0ZW0gIi1tY29kZS1yZWFkYWJsZT15ZXMiCitJbnN0cnVjdGlvbnMgbWF5IGZyZWVseSBhY2Nlc3MgZXhlY3V0YWJsZSBzZWN0aW9ucy4gIFRoaXMgaXMgdGhlCitkZWZhdWx0IHNldHRpbmcuCisuSVAgIlxmQlwtbWNvZGVcLXJlYWRhYmxlPXBjcmVsXGZSIiA0CisuSVggSXRlbSAiLW1jb2RlLXJlYWRhYmxlPXBjcmVsIgorXCZccy0xTUlQUzE2XHMwIFBDLXJlbGF0aXZlIGxvYWQgaW5zdHJ1Y3Rpb25zIGNhbiBhY2Nlc3MgZXhlY3V0YWJsZSBzZWN0aW9ucywKK2J1dCBvdGhlciBpbnN0cnVjdGlvbnMgbXVzdCBub3QgZG8gc28uICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgb24gNEtTYworYW5kIDRLU2QgcHJvY2Vzc29ycyB3aGVuIHRoZSBjb2RlIFRMQnMgaGF2ZSB0aGUgUmVhZCBJbmhpYml0IGJpdCBzZXQuCitJdCBpcyBhbHNvIHVzZWZ1bCBvbiBwcm9jZXNzb3JzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIGR1YWwKK2luc3RydWN0aW9uL2RhdGEgXHMtMVNSQU1cczAgaW50ZXJmYWNlIGFuZCB0aGF0LCBsaWtlIHRoZSBNNEssIGF1dG9tYXRpY2FsbHkKK3JlZGlyZWN0IFBDLXJlbGF0aXZlIGxvYWRzIHRvIHRoZSBpbnN0cnVjdGlvbiBccy0xUkFNXHMwLgorLklQICJcZkJcLW1jb2RlXC1yZWFkYWJsZT1ub1xmUiIgNAorLklYIEl0ZW0gIi1tY29kZS1yZWFkYWJsZT1ubyIKK0luc3RydWN0aW9ucyBtdXN0IG5vdCBhY2Nlc3MgZXhlY3V0YWJsZSBzZWN0aW9ucy4gIFRoaXMgb3B0aW9uIGNhbiBiZQordXNlZnVsIG9uIHRhcmdldHMgdGhhdCBhcmUgY29uZmlndXJlZCB0byBoYXZlIGEgZHVhbCBpbnN0cnVjdGlvbi9kYXRhCitcJlxzLTFTUkFNXHMwIGludGVyZmFjZSBidXQgdGhhdCAodW5saWtlIHRoZSBNNEspIGRvIG5vdCBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0CitQQy1yZWxhdGl2ZSBsb2FkcyB0byB0aGUgaW5zdHJ1Y3Rpb24gXHMtMVJBTVxzMC4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW1zcGxpdFwtYWRkcmVzc2VzXGZSIiA0CisuSVggSXRlbSAiLW1zcGxpdC1hZGRyZXNzZXMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc3BsaXRcLWFkZHJlc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3BsaXQtYWRkcmVzc2VzIgorLlBECitFbmFibGUgKGRpc2FibGUpIHVzZSBvZiB0aGUgXGYoQ1dcKihDYCVoaSgpXCooQydcZlIgYW5kIFxmKENXXCooQ2AlbG8oKVwqKEMnXGZSIGFzc2VtYmxlcgorcmVsb2NhdGlvbiBvcGVyYXRvcnMuICBUaGlzIG9wdGlvbiBoYXMgYmVlbiBzdXBlcnNlZGVkIGJ5CitcJlxmQlwtbWV4cGxpY2l0XC1yZWxvY3NcZlIgYnV0IGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKy5JUCAiXGZCXC1tZXhwbGljaXRcLXJlbG9jc1xmUiIgNAorLklYIEl0ZW0gIi1tZXhwbGljaXQtcmVsb2NzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWV4cGxpY2l0XC1yZWxvY3NcZlIiIDQKKy5JWCBJdGVtICItbW5vLWV4cGxpY2l0LXJlbG9jcyIKKy5QRAorVXNlIChkbyBub3QgdXNlKSBhc3NlbWJsZXIgcmVsb2NhdGlvbiBvcGVyYXRvcnMgd2hlbiBkZWFsaW5nIHdpdGggc3ltYm9saWMKK2FkZHJlc3Nlcy4gIFRoZSBhbHRlcm5hdGl2ZSwgc2VsZWN0ZWQgYnkgXGZCXC1tbm9cLWV4cGxpY2l0XC1yZWxvY3NcZlIsCitpcyB0byB1c2UgYXNzZW1ibGVyIG1hY3JvcyBpbnN0ZWFkLgorLlNwCitcJlxmQlwtbWV4cGxpY2l0XC1yZWxvY3NcZlIgaXMgdGhlIGRlZmF1bHQgaWYgXHMtMUdDQ1xzMCB3YXMgY29uZmlndXJlZAordG8gdXNlIGFuIGFzc2VtYmxlciB0aGF0IHN1cHBvcnRzIHJlbG9jYXRpb24gb3BlcmF0b3JzLgorLklQICJcZkJcLW1jaGVja1wtemVyb1wtZGl2aXNpb25cZlIiIDQKKy5JWCBJdGVtICItbWNoZWNrLXplcm8tZGl2aXNpb24iCisuUEQgMAorLklQICJcZkJcLW1ub1wtY2hlY2tcLXplcm9cLWRpdmlzaW9uXGZSIiA0CisuSVggSXRlbSAiLW1uby1jaGVjay16ZXJvLWRpdmlzaW9uIgorLlBECitUcmFwIChkbyBub3QgdHJhcCkgb24gaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvLgorLlNwCitUaGUgZGVmYXVsdCBpcyBcZkJcLW1jaGVja1wtemVyb1wtZGl2aXNpb25cZlIuCisuSVAgIlxmQlwtbWRpdmlkZVwtdHJhcHNcZlIiIDQKKy5JWCBJdGVtICItbWRpdmlkZS10cmFwcyIKKy5QRCAwCisuSVAgIlxmQlwtbWRpdmlkZVwtYnJlYWtzXGZSIiA0CisuSVggSXRlbSAiLW1kaXZpZGUtYnJlYWtzIgorLlBECitcJlxzLTFNSVBTXHMwIHN5c3RlbXMgY2hlY2sgZm9yIGRpdmlzaW9uIGJ5IHplcm8gYnkgZ2VuZXJhdGluZyBlaXRoZXIgYQorY29uZGl0aW9uYWwgdHJhcCBvciBhIGJyZWFrIGluc3RydWN0aW9uLiAgVXNpbmcgdHJhcHMgcmVzdWx0cyBpbgorc21hbGxlciBjb2RlLCBidXQgaXMgb25seSBzdXBwb3J0ZWQgb24gXHMtMU1JUFNcczAgXHMtMUlJXHMwIGFuZCBsYXRlci4gIEFsc28sIHNvbWUKK3ZlcnNpb25zIG9mIHRoZSBMaW51eCBrZXJuZWwgaGF2ZSBhIGJ1ZyB0aGF0IHByZXZlbnRzIHRyYXAgZnJvbQorZ2VuZXJhdGluZyB0aGUgcHJvcGVyIHNpZ25hbCAoXGYoQ1dcKihDYFNJR0ZQRVwqKEMnXGZSKS4gIFVzZSBcZkJcLW1kaXZpZGVcLXRyYXBzXGZSIHRvCithbGxvdyBjb25kaXRpb25hbCB0cmFwcyBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCB0aGVtIGFuZAorXCZcZkJcLW1kaXZpZGVcLWJyZWFrc1xmUiB0byBmb3JjZSB0aGUgdXNlIG9mIGJyZWFrcy4KKy5TcAorVGhlIGRlZmF1bHQgaXMgdXN1YWxseSBcZkJcLW1kaXZpZGVcLXRyYXBzXGZSLCBidXQgdGhpcyBjYW4gYmUKK292ZXJyaWRkZW4gYXQgY29uZmlndXJlIHRpbWUgdXNpbmcgXGZCXC1cLXdpdGhcLWRpdmlkZT1icmVha3NcZlIuCitEaXZpZGUtYnktemVybyBjaGVja3MgY2FuIGJlIGNvbXBsZXRlbHkgZGlzYWJsZWQgdXNpbmcKK1wmXGZCXC1tbm9cLWNoZWNrXC16ZXJvXC1kaXZpc2lvblxmUi4KKy5JUCAiXGZCXC1tbWVtY3B5XGZSIiA0CisuSVggSXRlbSAiLW1tZW1jcHkiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbWVtY3B5XGZSIiA0CisuSVggSXRlbSAiLW1uby1tZW1jcHkiCisuUEQKK0ZvcmNlIChkbyBub3QgZm9yY2UpIHRoZSB1c2Ugb2YgXGYoQ1dcKihDYG1lbWNweSgpXCooQydcZlIgZm9yIG5vbi10cml2aWFsIGJsb2NrCittb3Zlcy4gIFRoZSBkZWZhdWx0IGlzIFxmQlwtbW5vXC1tZW1jcHlcZlIsIHdoaWNoIGFsbG93cyBccy0xR0NDXHMwIHRvIGlubGluZQorbW9zdCBjb25zdGFudC1zaXplZCBjb3BpZXMuCisuSVAgIlxmQlwtbWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1sb25nLWNhbGxzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxvbmdcLWNhbGxzXGZSIiA0CisuSVggSXRlbSAiLW1uby1sb25nLWNhbGxzIgorLlBECitEaXNhYmxlIChkbyBub3QgZGlzYWJsZSkgdXNlIG9mIHRoZSBcZihDV1wqKENgamFsXCooQydcZlIgaW5zdHJ1Y3Rpb24uICBDYWxsaW5nCitmdW5jdGlvbnMgdXNpbmcgXGYoQ1dcKihDYGphbFwqKEMnXGZSIGlzIG1vcmUgZWZmaWNpZW50IGJ1dCByZXF1aXJlcyB0aGUgY2FsbGVyCithbmQgY2FsbGVlIHRvIGJlIGluIHRoZSBzYW1lIDI1NiBtZWdhYnl0ZSBzZWdtZW50LgorLlNwCitUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIGFiaWNhbGxzIGNvZGUuICBUaGUgZGVmYXVsdCBpcworXCZcZkJcLW1ub1wtbG9uZ1wtY2FsbHNcZlIuCisuSVAgIlxmQlwtbW1hZFxmUiIgNAorLklYIEl0ZW0gIi1tbWFkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW1hZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWFkIgorLlBECitFbmFibGUgKGRpc2FibGUpIHVzZSBvZiB0aGUgXGYoQ1dcKihDYG1hZFwqKEMnXGZSLCBcZihDV1wqKENgbWFkdVwqKEMnXGZSIGFuZCBcZihDV1wqKENgbXVsXCooQydcZlIKK2luc3RydWN0aW9ucywgYXMgcHJvdmlkZWQgYnkgdGhlIFI0NjUwIFxzLTFJU0FcczAuCisuSVAgIlxmQlwtbWZ1c2VkXC1tYWRkXGZSIiA0CisuSVggSXRlbSAiLW1mdXNlZC1tYWRkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZ1c2VkXC1tYWRkXGZSIiA0CisuSVggSXRlbSAiLW1uby1mdXNlZC1tYWRkIgorLlBECitFbmFibGUgKGRpc2FibGUpIHVzZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgbXVsdGlwbHktYWNjdW11bGF0ZQoraW5zdHJ1Y3Rpb25zLCB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4gIFRoZSBkZWZhdWx0IGlzCitcJlxmQlwtbWZ1c2VkXC1tYWRkXGZSLgorLlNwCitPbiB0aGUgUjgwMDAgXHMtMUNQVVxzMCB3aGVuIG11bHRpcGx5LWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkLAordGhlIGludGVybWVkaWF0ZSBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQgdG8gaW5maW5pdGUgcHJlY2lzaW9uCithbmQgaXMgbm90IHN1YmplY3QgdG8gdGhlIFxzLTFGQ1NSXHMwIEZsdXNoIHRvIFplcm8gYml0LiAgVGhpcyBtYXkgYmUKK3VuZGVzaXJhYmxlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4gIE9uIG90aGVyIHByb2Nlc3NvcnMgdGhlIHJlc3VsdAoraXMgbnVtZXJpY2FsbHkgaWRlbnRpY2FsIHRvIHRoZSBlcXVpdmFsZW50IGNvbXB1dGF0aW9uIHVzaW5nCitzZXBhcmF0ZSBtdWx0aXBseSwgYWRkLCBzdWJ0cmFjdCBhbmQgbmVnYXRlIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1ub2NwcFxmUiIgNAorLklYIEl0ZW0gIi1ub2NwcCIKK1RlbGwgdGhlIFxzLTFNSVBTXHMwIGFzc2VtYmxlciB0byBub3QgcnVuIGl0cyBwcmVwcm9jZXNzb3Igb3ZlciB1c2VyCithc3NlbWJsZXIgZmlsZXMgKHdpdGggYSBcZkIuc1xmUiBzdWZmaXgpIHdoZW4gYXNzZW1ibGluZyB0aGVtLgorLklQICJcZkJcLW1maXhcLTI0a1xmUiIgNAorLklYIEl0ZW0gIi1tZml4LTI0ayIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1maXhcLTI0a1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZml4LTI0ayIKKy5QRAorV29yayBhcm91bmQgdGhlIDI0SyBFNDggKGxvc3QgZGF0YSBvbiBzdG9yZXMgZHVyaW5nIHJlZmlsbCkgZXJyYXRhLgorVGhlIHdvcmthcm91bmRzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgYXNzZW1ibGVyIHJhdGhlciB0aGFuIGJ5IFxzLTFHQ0NcczAuCisuSVAgIlxmQlwtbWZpeFwtcjQwMDBcZlIiIDQKKy5JWCBJdGVtICItbWZpeC1yNDAwMCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1maXhcLXI0MDAwXGZSIiA0CisuSVggSXRlbSAiLW1uby1maXgtcjQwMDAiCisuUEQKK1dvcmsgYXJvdW5kIGNlcnRhaW4gUjQwMDAgXHMtMUNQVVxzMCBlcnJhdGE6CisuUlMgNAorLklQICJcLSIgNAorQSBkb3VibGUtd29yZCBvciBhIHZhcmlhYmxlIHNoaWZ0IG1heSBnaXZlIGFuIGluY29ycmVjdCByZXN1bHQgaWYgZXhlY3V0ZWQKK2ltbWVkaWF0ZWx5IGFmdGVyIHN0YXJ0aW5nIGFuIGludGVnZXIgZGl2aXNpb24uCisuSVAgIlwtIiA0CitBIGRvdWJsZS13b3JkIG9yIGEgdmFyaWFibGUgc2hpZnQgbWF5IGdpdmUgYW4gaW5jb3JyZWN0IHJlc3VsdCBpZiBleGVjdXRlZAord2hpbGUgYW4gaW50ZWdlciBtdWx0aXBsaWNhdGlvbiBpcyBpbiBwcm9ncmVzcy4KKy5JUCAiXC0iIDQKK0FuIGludGVnZXIgZGl2aXNpb24gbWF5IGdpdmUgYW4gaW5jb3JyZWN0IHJlc3VsdCBpZiBzdGFydGVkIGluIGEgZGVsYXkgc2xvdAorb2YgYSB0YWtlbiBicmFuY2ggb3IgYSBqdW1wLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtbWZpeFwtcjQ0MDBcZlIiIDQKKy5JWCBJdGVtICItbWZpeC1yNDQwMCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1maXhcLXI0NDAwXGZSIiA0CisuSVggSXRlbSAiLW1uby1maXgtcjQ0MDAiCisuUEQKK1dvcmsgYXJvdW5kIGNlcnRhaW4gUjQ0MDAgXHMtMUNQVVxzMCBlcnJhdGE6CisuUlMgNAorLklQICJcLSIgNAorQSBkb3VibGUtd29yZCBvciBhIHZhcmlhYmxlIHNoaWZ0IG1heSBnaXZlIGFuIGluY29ycmVjdCByZXN1bHQgaWYgZXhlY3V0ZWQKK2ltbWVkaWF0ZWx5IGFmdGVyIHN0YXJ0aW5nIGFuIGludGVnZXIgZGl2aXNpb24uCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tZml4XC1yMTAwMDBcZlIiIDQKKy5JWCBJdGVtICItbWZpeC1yMTAwMDAiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZml4XC1yMTAwMDBcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZpeC1yMTAwMDAiCisuUEQKK1dvcmsgYXJvdW5kIGNlcnRhaW4gUjEwMDAwIGVycmF0YToKKy5SUyA0CisuSVAgIlwtIiA0CitcJlxmKENXXCooQ2BsbFwqKEMnXGZSL1xmKENXXCooQ2BzY1wqKEMnXGZSIHNlcXVlbmNlcyBtYXkgbm90IGJlaGF2ZSBhdG9taWNhbGx5IG9uIHJldmlzaW9ucworcHJpb3IgdG8gMy4wLiAgVGhleSBtYXkgZGVhZGxvY2sgb24gcmV2aXNpb25zIDIuNiBhbmQgZWFybGllci4KKy5SRQorLlJTIDQKKy5TcAorVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBzdXBwb3J0cworYnJhbmNoLWxpa2VseSBpbnN0cnVjdGlvbnMuICBcZkJcLW1maXhcLXIxMDAwMFxmUiBpcyB0aGUgZGVmYXVsdCB3aGVuCitcJlxmQlwtbWFyY2g9cjEwMDAwXGZSIGlzIHVzZWQ7IFxmQlwtbW5vXC1maXhcLXIxMDAwMFxmUiBpcyB0aGUgZGVmYXVsdAorb3RoZXJ3aXNlLgorLlJFCisuSVAgIlxmQlwtbWZpeFwtdnI0MTIwXGZSIiA0CisuSVggSXRlbSAiLW1maXgtdnI0MTIwIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZpeFwtdnI0MTIwXGZSIiA0CisuSVggSXRlbSAiLW1uby1maXgtdnI0MTIwIgorLlBECitXb3JrIGFyb3VuZCBjZXJ0YWluIFxzLTFWUjQxMjBcczAgZXJyYXRhOgorLlJTIDQKKy5JUCAiXC0iIDQKK1wmXGYoQ1dcKihDYGRtdWx0dVwqKEMnXGZSIGRvZXMgbm90IGFsd2F5cyBwcm9kdWNlIHRoZSBjb3JyZWN0IHJlc3VsdC4KKy5JUCAiXC0iIDQKK1wmXGYoQ1dcKihDYGRpdlwqKEMnXGZSIGFuZCBcZihDV1wqKENgZGRpdlwqKEMnXGZSIGRvIG5vdCBhbHdheXMgcHJvZHVjZSB0aGUgY29ycmVjdCByZXN1bHQgaWYgb25lCitvZiB0aGUgb3BlcmFuZHMgaXMgbmVnYXRpdmUuCisuUkUKKy5SUyA0CisuU3AKK1RoZSB3b3JrYXJvdW5kcyBmb3IgdGhlIGRpdmlzaW9uIGVycmF0YSByZWx5IG9uIHNwZWNpYWwgZnVuY3Rpb25zIGluCitcJlxmSWxpYmdjYy5hXGZSLiAgQXQgcHJlc2VudCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHByb3ZpZGVkIGJ5Cit0aGUgXGYoQ1dcKihDYG1pcHM2NHZyKlwtZWxmXCooQydcZlIgY29uZmlndXJhdGlvbnMuCisuU3AKK090aGVyIFxzLTFWUjQxMjBcczAgZXJyYXRhIHJlcXVpcmUgYSBccy0xTk9QXHMwIHRvIGJlIGluc2VydGVkIGJldHdlZW4gY2VydGFpbiBwYWlycyBvZgoraW5zdHJ1Y3Rpb25zLiAgVGhlc2UgZXJyYXRhIGFyZSBoYW5kbGVkIGJ5IHRoZSBhc3NlbWJsZXIsIG5vdCBieSBccy0xR0NDXHMwIGl0c2VsZi4KKy5SRQorLklQICJcZkJcLW1maXhcLXZyNDEzMFxmUiIgNAorLklYIEl0ZW0gIi1tZml4LXZyNDEzMCIKK1dvcmsgYXJvdW5kIHRoZSBccy0xVlI0MTMwXHMwIFxmKENXXCooQ2BtZmxvXCooQydcZlIvXGYoQ1dcKihDYG1maGlcKihDJ1xmUiBlcnJhdGEuICBUaGUKK3dvcmthcm91bmRzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgYXNzZW1ibGVyIHJhdGhlciB0aGFuIGJ5IFxzLTFHQ0NcczAsCithbHRob3VnaCBccy0xR0NDXHMwIGF2b2lkcyB1c2luZyBcZihDV1wqKENgbWZsb1wqKEMnXGZSIGFuZCBcZihDV1wqKENgbWZoaVwqKEMnXGZSIGlmIHRoZQorXCZccy0xVlI0MTMwXHMwIFxmKENXXCooQ2BtYWNjXCooQydcZlIsIFxmKENXXCooQ2BtYWNjaGlcKihDJ1xmUiwgXGYoQ1dcKihDYGRtYWNjXCooQydcZlIgYW5kIFxmKENXXCooQ2BkbWFjY2hpXCooQydcZlIKK2luc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlIGluc3RlYWQuCisuSVAgIlxmQlwtbWZpeFwtc2IxXGZSIiA0CisuSVggSXRlbSAiLW1maXgtc2IxIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZpeFwtc2IxXGZSIiA0CisuSVggSXRlbSAiLW1uby1maXgtc2IxIgorLlBECitXb3JrIGFyb3VuZCBjZXJ0YWluIFxzLTFTQlwtMVxzMCBccy0xQ1BVXHMwIGNvcmUgZXJyYXRhLgorKFRoaXMgZmxhZyBjdXJyZW50bHkgd29ya3MgYXJvdW5kIHRoZSBccy0xU0JcLTFcczAgcmV2aXNpb24gMgorXCZcKihMIkYxXCooUiIgYW5kIFwqKEwiRjJcKihSIiBmbG9hdGluZy1wb2ludCBlcnJhdGEuKQorLklQICJcZkJcLW1yMTBrXC1jYWNoZVwtYmFycmllcj1cZlJcZklzZXR0aW5nXGZSIiA0CisuSVggSXRlbSAiLW1yMTBrLWNhY2hlLWJhcnJpZXI9c2V0dGluZyIKK1NwZWNpZnkgd2hldGhlciBccy0xR0NDXHMwIHNob3VsZCBpbnNlcnQgY2FjaGUgYmFycmllcnMgdG8gYXZvaWQgdGhlCitzaWRlLWVmZmVjdHMgb2Ygc3BlY3VsYXRpb24gb24gUjEwSyBwcm9jZXNzb3JzLgorLlNwCitJbiBjb21tb24gd2l0aCBtYW55IHByb2Nlc3NvcnMsIHRoZSBSMTBLIHRyaWVzIHRvIHByZWRpY3QgdGhlIG91dGNvbWUKK29mIGEgY29uZGl0aW9uYWwgYnJhbmNoIGFuZCBzcGVjdWxhdGl2ZWx5IGV4ZWN1dGVzIGluc3RydWN0aW9ucyBmcm9tCit0aGUgXCooTCJ0YWtlblwqKFIiIGJyYW5jaC4gIEl0IGxhdGVyIGFib3J0cyB0aGVzZSBpbnN0cnVjdGlvbnMgaWYgdGhlCitwcmVkaWN0ZWQgb3V0Y29tZSBpcyB3cm9uZy4gIEhvd2V2ZXIsIG9uIHRoZSBSMTBLLCBldmVuIGFib3J0ZWQKK2luc3RydWN0aW9ucyBjYW4gaGF2ZSBzaWRlIGVmZmVjdHMuCisuU3AKK1RoaXMgcHJvYmxlbSBvbmx5IGFmZmVjdHMga2VybmVsIHN0b3JlcyBhbmQsIGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtLAora2VybmVsIGxvYWRzLiAgQXMgYW4gZXhhbXBsZSwgYSBzcGVjdWxhdGl2ZWx5LWV4ZWN1dGVkIHN0b3JlIG1heSBsb2FkCit0aGUgdGFyZ2V0IG1lbW9yeSBpbnRvIGNhY2hlIGFuZCBtYXJrIHRoZSBjYWNoZSBsaW5lIGFzIGRpcnR5LCBldmVuIGlmCit0aGUgc3RvcmUgaXRzZWxmIGlzIGxhdGVyIGFib3J0ZWQuICBJZiBhIFxzLTFETUFcczAgb3BlcmF0aW9uIHdyaXRlcyB0byB0aGUKK3NhbWUgYXJlYSBvZiBtZW1vcnkgYmVmb3JlIHRoZSBcKihMImRpcnR5XCooUiIgbGluZSBpcyBmbHVzaGVkLCB0aGUgY2FjaGVkCitkYXRhIG92ZXJ3cml0ZXMgdGhlIERNQS1lZCBkYXRhLiAgU2VlIHRoZSBSMTBLIHByb2Nlc3NvciBtYW51YWwKK2ZvciBhIGZ1bGwgZGVzY3JpcHRpb24sIGluY2x1ZGluZyBvdGhlciBwb3RlbnRpYWwgcHJvYmxlbXMuCisuU3AKK09uZSB3b3JrYXJvdW5kIGlzIHRvIGluc2VydCBjYWNoZSBiYXJyaWVyIGluc3RydWN0aW9ucyBiZWZvcmUgZXZlcnkgbWVtb3J5CithY2Nlc3MgdGhhdCBtaWdodCBiZSBzcGVjdWxhdGl2ZWx5IGV4ZWN1dGVkIGFuZCB0aGF0IG1pZ2h0IGhhdmUgc2lkZQorZWZmZWN0cyBldmVuIGlmIGFib3J0ZWQuICBcZkJcLW1yMTBrXC1jYWNoZVwtYmFycmllcj1cZlJcZklzZXR0aW5nXGZSCitjb250cm9scyBccy0xR0NDXHMwJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhpcyB3b3JrYXJvdW5kLiAgSXQgYXNzdW1lcyB0aGF0CithYm9ydGVkIGFjY2Vzc2VzIHRvIGFueSBieXRlIGluIHRoZSBmb2xsb3dpbmcgcmVnaW9ucyBkb2VzIG5vdCBoYXZlCitzaWRlIGVmZmVjdHM6CisuUlMgNAorLklQICIxLiIgNAordGhlIG1lbW9yeSBvY2N1cGllZCBieSB0aGUgY3VycmVudCBmdW5jdGlvbidzIHN0YWNrIGZyYW1lOworLklQICIyLiIgNAordGhlIG1lbW9yeSBvY2N1cGllZCBieSBhbiBpbmNvbWluZyBzdGFjayBhcmd1bWVudDsKKy5JUCAiMy4iIDQKK3RoZSBtZW1vcnkgb2NjdXBpZWQgYnkgYW4gb2JqZWN0IHdpdGggYSBsaW5rLXRpbWUtY29uc3RhbnQgYWRkcmVzcy4KKy5SRQorLlJTIDQKKy5TcAorSXQgaXMgdGhlIGtlcm5lbCdzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHNwZWN1bGF0aXZlCithY2Nlc3NlcyB0byB0aGVzZSByZWdpb25zIGFyZSBpbmRlZWQgc2FmZS4KKy5TcAorSWYgdGhlIGlucHV0IHByb2dyYW0gY29udGFpbnMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBzdWNoIGFzOgorLlNwCisuVmIgMQorXCYgICAgICAgIHZvaWQgZm9vICh2b2lkKTsKKy5WZQorLlNwCit0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBcZihDV1wqKENgZm9vXCooQydcZlIgbXVzdCBhbGxvdyBcZihDV1wqKENgaiBmb29cKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYGphbCBmb29cKihDJ1xmUiB0byBiZSBleGVjdXRlZCBzcGVjdWxhdGl2ZWx5LiAgXHMtMUdDQ1xzMCBob25vcnMgdGhpcworcmVzdHJpY3Rpb24gZm9yIGZ1bmN0aW9ucyBpdCBjb21waWxlcyBpdHNlbGYuICBJdCBleHBlY3RzIG5vbi1HQ0MKK2Z1bmN0aW9ucyAoc3VjaCBhcyBoYW5kLXdyaXR0ZW4gYXNzZW1ibHkgY29kZSkgdG8gZG8gdGhlIHNhbWUuCisuU3AKK1RoZSBvcHRpb24gaGFzIHRocmVlIGZvcm1zOgorLklQICJcZkJcLW1yMTBrXC1jYWNoZVwtYmFycmllcj1sb2FkXC1zdG9yZVxmUiIgNAorLklYIEl0ZW0gIi1tcjEway1jYWNoZS1iYXJyaWVyPWxvYWQtc3RvcmUiCitJbnNlcnQgYSBjYWNoZSBiYXJyaWVyIGJlZm9yZSBhIGxvYWQgb3Igc3RvcmUgdGhhdCBtaWdodCBiZQorc3BlY3VsYXRpdmVseSBleGVjdXRlZCBhbmQgdGhhdCBtaWdodCBoYXZlIHNpZGUgZWZmZWN0cyBldmVuCitpZiBhYm9ydGVkLgorLklQICJcZkJcLW1yMTBrXC1jYWNoZVwtYmFycmllcj1zdG9yZVxmUiIgNAorLklYIEl0ZW0gIi1tcjEway1jYWNoZS1iYXJyaWVyPXN0b3JlIgorSW5zZXJ0IGEgY2FjaGUgYmFycmllciBiZWZvcmUgYSBzdG9yZSB0aGF0IG1pZ2h0IGJlIHNwZWN1bGF0aXZlbHkKK2V4ZWN1dGVkIGFuZCB0aGF0IG1pZ2h0IGhhdmUgc2lkZSBlZmZlY3RzIGV2ZW4gaWYgYWJvcnRlZC4KKy5JUCAiXGZCXC1tcjEwa1wtY2FjaGVcLWJhcnJpZXI9bm9uZVxmUiIgNAorLklYIEl0ZW0gIi1tcjEway1jYWNoZS1iYXJyaWVyPW5vbmUiCitEaXNhYmxlIHRoZSBpbnNlcnRpb24gb2YgY2FjaGUgYmFycmllcnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tZmx1c2hcLWZ1bmM9XGZSXGZJZnVuY1xmUiIgNAorLklYIEl0ZW0gIi1tZmx1c2gtZnVuYz1mdW5jIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZsdXNoXC1mdW5jXGZSIiA0CisuSVggSXRlbSAiLW1uby1mbHVzaC1mdW5jIgorLlBECitTcGVjaWZpZXMgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgdG8gZmx1c2ggdGhlIEkgYW5kIEQgY2FjaGVzLCBvciB0byBub3QKK2NhbGwgYW55IHN1Y2ggZnVuY3Rpb24uICBJZiBjYWxsZWQsIHRoZSBmdW5jdGlvbiBtdXN0IHRha2UgdGhlIHNhbWUKK2FyZ3VtZW50cyBhcyB0aGUgY29tbW9uIFxmKENXXCooQ2BfZmx1c2hfZnVuYygpXCooQydcZlIsIHRoYXQgaXMsIHRoZSBhZGRyZXNzIG9mIHRoZQorbWVtb3J5IHJhbmdlIGZvciB3aGljaCB0aGUgY2FjaGUgaXMgYmVpbmcgZmx1c2hlZCwgdGhlIHNpemUgb2YgdGhlCittZW1vcnkgcmFuZ2UsIGFuZCB0aGUgbnVtYmVyIDMgKHRvIGZsdXNoIGJvdGggY2FjaGVzKS4gIFRoZSBkZWZhdWx0CitkZXBlbmRzIG9uIHRoZSB0YXJnZXQgXHMtMUdDQ1xzMCB3YXMgY29uZmlndXJlZCBmb3IsIGJ1dCBjb21tb25seSBpcyBlaXRoZXIKK1wmXGZCX2ZsdXNoX2Z1bmNcZlIgb3IgXGZCX1x8X2NwdV9mbHVzaFxmUi4KKy5JUCAiXGZCbWJyYW5jaFwtY29zdD1cZlJcZkludW1cZlIiIDQKKy5JWCBJdGVtICJtYnJhbmNoLWNvc3Q9bnVtIgorU2V0IHRoZSBjb3N0IG9mIGJyYW5jaGVzIHRvIHJvdWdobHkgXGZJbnVtXGZSIFwqKEwic2ltcGxlXCooUiIgaW5zdHJ1Y3Rpb25zLgorVGhpcyBjb3N0IGlzIG9ubHkgYSBoZXVyaXN0aWMgYW5kIGlzIG5vdCBndWFyYW50ZWVkIHRvIHByb2R1Y2UKK2NvbnNpc3RlbnQgcmVzdWx0cyBhY3Jvc3MgcmVsZWFzZXMuICBBIHplcm8gY29zdCByZWR1bmRhbnRseSBzZWxlY3RzCit0aGUgZGVmYXVsdCwgd2hpY2ggaXMgYmFzZWQgb24gdGhlIFxmQlwtbXR1bmVcZlIgc2V0dGluZy4KKy5JUCAiXGZCXC1tYnJhbmNoXC1saWtlbHlcZlIiIDQKKy5JWCBJdGVtICItbWJyYW5jaC1saWtlbHkiCisuUEQgMAorLklQICJcZkJcLW1ub1wtYnJhbmNoXC1saWtlbHlcZlIiIDQKKy5JWCBJdGVtICItbW5vLWJyYW5jaC1saWtlbHkiCisuUEQKK0VuYWJsZSBvciBkaXNhYmxlIHVzZSBvZiBCcmFuY2ggTGlrZWx5IGluc3RydWN0aW9ucywgcmVnYXJkbGVzcyBvZiB0aGUKK2RlZmF1bHQgZm9yIHRoZSBzZWxlY3RlZCBhcmNoaXRlY3R1cmUuICBCeSBkZWZhdWx0LCBCcmFuY2ggTGlrZWx5CitpbnN0cnVjdGlvbnMgbWF5IGJlIGdlbmVyYXRlZCBpZiB0aGV5IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHNlbGVjdGVkCithcmNoaXRlY3R1cmUuICBBbiBleGNlcHRpb24gaXMgZm9yIHRoZSBccy0xTUlQUzMyXHMwIGFuZCBccy0xTUlQUzY0XHMwIGFyY2hpdGVjdHVyZXMKK2FuZCBwcm9jZXNzb3JzIHRoYXQgaW1wbGVtZW50IHRob3NlIGFyY2hpdGVjdHVyZXM7IGZvciB0aG9zZSwgQnJhbmNoCitMaWtlbHkgaW5zdHJ1Y3Rpb25zIGFyZSBub3QgYmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSB0aGUgXHMtMU1JUFMzMlxzMAorYW5kIFxzLTFNSVBTNjRcczAgYXJjaGl0ZWN0dXJlcyBzcGVjaWZpY2FsbHkgZGVwcmVjYXRlIHRoZWlyIHVzZS4KKy5JUCAiXGZCXC1tZnBcLWV4Y2VwdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItbWZwLWV4Y2VwdGlvbnMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZnBcLWV4Y2VwdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZwLWV4Y2VwdGlvbnMiCisuUEQKK1NwZWNpZmllcyB3aGV0aGVyIFxzLTFGUFxzMCBleGNlcHRpb25zIGFyZSBlbmFibGVkLiAgVGhpcyBhZmZlY3RzIGhvdworXCZccy0xRlBcczAgaW5zdHJ1Y3Rpb25zIGFyZSBzY2hlZHVsZWQgZm9yIHNvbWUgcHJvY2Vzc29ycy4KK1RoZSBkZWZhdWx0IGlzIHRoYXQgXHMtMUZQXHMwIGV4Y2VwdGlvbnMgYXJlCitlbmFibGVkLgorLlNwCitGb3IgaW5zdGFuY2UsIG9uIHRoZSBccy0xU0JcLTFcczAsIGlmIFxzLTFGUFxzMCBleGNlcHRpb25zIGFyZSBkaXNhYmxlZCwgYW5kIHdlIGFyZSBlbWl0dGluZworNjRcLWJpdCBjb2RlLCB0aGVuIHdlIGNhbiB1c2UgYm90aCBccy0xRlBcczAgcGlwZXMuICBPdGhlcndpc2UsIHdlIGNhbiBvbmx5IHVzZSBvbmUKK1wmXHMtMUZQXHMwIHBpcGUuCisuSVAgIlxmQlwtbXZyNDEzMFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbXZyNDEzMC1hbGlnbiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC12cjQxMzBcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1uby12cjQxMzAtYWxpZ24iCisuUEQKK1RoZSBccy0xVlI0MTMwXHMwIHBpcGVsaW5lIGlzIHR3by13YXkgc3VwZXJzY2FsYXIsIGJ1dCBjYW4gb25seSBpc3N1ZSB0d28KK2luc3RydWN0aW9ucyB0b2dldGhlciBpZiB0aGUgZmlyc3Qgb25lIGlzIDhcLWJ5dGUgYWxpZ25lZC4gIFdoZW4gdGhpcworb3B0aW9uIGlzIGVuYWJsZWQsIFxzLTFHQ0NcczAgYWxpZ25zIHBhaXJzIG9mIGluc3RydWN0aW9ucyB0aGF0IGl0Cit0aGlua3Mgc2hvdWxkIGV4ZWN1dGUgaW4gcGFyYWxsZWwuCisuU3AKK1RoaXMgb3B0aW9uIG9ubHkgaGFzIGFuIGVmZmVjdCB3aGVuIG9wdGltaXppbmcgZm9yIHRoZSBccy0xVlI0MTMwXHMwLgorSXQgbm9ybWFsbHkgbWFrZXMgY29kZSBmYXN0ZXIsIGJ1dCBhdCB0aGUgZXhwZW5zZSBvZiBtYWtpbmcgaXQgYmlnZ2VyLgorSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IG9wdGltaXphdGlvbiBsZXZlbCBcZkJcLU8zXGZSLgorLklQICJcZkJcLW1zeW5jaVxmUiIgNAorLklYIEl0ZW0gIi1tc3luY2kiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc3luY2lcZlIiIDQKKy5JWCBJdGVtICItbW5vLXN5bmNpIgorLlBECitFbmFibGUgKGRpc2FibGUpIGdlbmVyYXRpb24gb2YgXGYoQ1dcKihDYHN5bmNpXCooQydcZlIgaW5zdHJ1Y3Rpb25zIG9uCithcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdC4gIFRoZSBcZihDV1wqKENgc3luY2lcKihDJ1xmUiBpbnN0cnVjdGlvbnMgKGlmCitlbmFibGVkKSBhcmUgZ2VuZXJhdGVkIHdoZW4gXGYoQ1dcKihDYF9cfF9idWlsdGluX1x8X1x8X2NsZWFyX2NhY2hlKClcKihDJ1xmUiBpcworY29tcGlsZWQuCisuU3AKK1RoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIFxmKENXXCooQ2BcLW1ub1wtc3luY2lcKihDJ1xmUiwgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZQorb3ZlcnJpZGRlbiBieSBjb25maWd1cmluZyB3aXRoIFxmKENXXCooQ2BcLVwtd2l0aFwtc3luY2lcKihDJ1xmUi4KKy5TcAorV2hlbiBjb21waWxpbmcgY29kZSBmb3Igc2luZ2xlIHByb2Nlc3NvciBzeXN0ZW1zLCBpdCBpcyBnZW5lcmFsbHkgc2FmZQordG8gdXNlIFxmKENXXCooQ2BzeW5jaVwqKEMnXGZSLiAgSG93ZXZlciwgb24gbWFueSBtdWx0aS1jb3JlIChccy0xU01QXHMwKSBzeXN0ZW1zLCBpdAorZG9lcyBub3QgaW52YWxpZGF0ZSB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIG9uIGFsbCBjb3JlcyBhbmQgbWF5IGxlYWQKK3RvIHVuZGVmaW5lZCBiZWhhdmlvci4KKy5JUCAiXGZCXC1tcmVsYXhcLXBpY1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbXJlbGF4LXBpYy1jYWxscyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWxheFwtcGljXC1jYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVsYXgtcGljLWNhbGxzIgorLlBECitUcnkgdG8gdHVybiBccy0xUElDXHMwIGNhbGxzIHRoYXQgYXJlIG5vcm1hbGx5IGRpc3BhdGNoZWQgdmlhIHJlZ2lzdGVyCitcJlxmKENXJDI1XGZSIGludG8gZGlyZWN0IGNhbGxzLiAgVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSBsaW5rZXIgY2FuCityZXNvbHZlIHRoZSBkZXN0aW5hdGlvbiBhdCBsaW5rLXRpbWUgYW5kIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyB3aXRoaW4KK3JhbmdlIGZvciBhIGRpcmVjdCBjYWxsLgorLlNwCitcJlxmQlwtbXJlbGF4XC1waWNcLWNhbGxzXGZSIGlzIHRoZSBkZWZhdWx0IGlmIFxzLTFHQ0NcczAgd2FzIGNvbmZpZ3VyZWQgdG8gdXNlCithbiBhc3NlbWJsZXIgYW5kIGEgbGlua2VyIHRoYXQgc3VwcG9ydCB0aGUgXGYoQ1dcKihDYC5yZWxvY1wqKEMnXGZSIGFzc2VtYmx5CitkaXJlY3RpdmUgYW5kIFxmKENXXCooQ2BcLW1leHBsaWNpdFwtcmVsb2NzXCooQydcZlIgaXMgaW4gZWZmZWN0LiAgV2l0aAorXCZcZihDV1wqKENgXC1tbm9cLWV4cGxpY2l0XC1yZWxvY3NcKihDJ1xmUiwgdGhpcyBvcHRpbWl6YXRpb24gY2FuIGJlIHBlcmZvcm1lZCBieSB0aGUKK2Fzc2VtYmxlciBhbmQgdGhlIGxpbmtlciBhbG9uZSB3aXRob3V0IGhlbHAgZnJvbSB0aGUgY29tcGlsZXIuCisuSVAgIlxmQlwtbW1jb3VudFwtcmFcLWFkZHJlc3NcZlIiIDQKKy5JWCBJdGVtICItbW1jb3VudC1yYS1hZGRyZXNzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW1jb3VudFwtcmFcLWFkZHJlc3NcZlIiIDQKKy5JWCBJdGVtICItbW5vLW1jb3VudC1yYS1hZGRyZXNzIgorLlBECitFbWl0IChkbyBub3QgZW1pdCkgY29kZSB0aGF0IGFsbG93cyBcZihDV1wqKENgX21jb3VudFwqKEMnXGZSIHRvIG1vZGlmeSB0aGUKK2NhbGxpbmcgZnVuY3Rpb24ncyByZXR1cm4gYWRkcmVzcy4gIFdoZW4gZW5hYmxlZCwgdGhpcyBvcHRpb24gZXh0ZW5kcwordGhlIHVzdWFsIFxmKENXXCooQ2BfbWNvdW50XCooQydcZlIgaW50ZXJmYWNlIHdpdGggYSBuZXcgXGZJcmEtYWRkcmVzc1xmUgorcGFyYW1ldGVyLCB3aGljaCBoYXMgdHlwZSBcZihDV1wqKENgaW50cHRyX3QgKlwqKEMnXGZSIGFuZCBpcyBwYXNzZWQgaW4gcmVnaXN0ZXIKK1wmXGYoQ1ckMTJcZlIuICBcZihDV1wqKENgX21jb3VudFwqKEMnXGZSIGNhbiB0aGVuIG1vZGlmeSB0aGUgcmV0dXJuIGFkZHJlc3MgYnkKK2RvaW5nIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKy5SUyA0CisuSVAgIlwoYnUiIDQKK1JldHVybmluZyB0aGUgbmV3IGFkZHJlc3MgaW4gcmVnaXN0ZXIgXGYoQ1ckMzFcZlIuCisuSVAgIlwoYnUiIDQKK1N0b3JpbmcgdGhlIG5ldyBhZGRyZXNzIGluIFxmKENXXCooQ2AqXGYoQ0lyYVwtYWRkcmVzc1xmKENXXCooQydcZlIsCitpZiBcZklyYS1hZGRyZXNzXGZSIGlzIG5vbm51bGwuCisuUkUKKy5SUyA0CisuU3AKK1RoZSBkZWZhdWx0IGlzIFxmQlwtbW5vXC1tY291bnRcLXJhXC1hZGRyZXNzXGZSLgorLlJFCisuUFAKK1xmSVxzLTFNTUlYXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJNTUlYIE9wdGlvbnMiCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBccy0xTU1JWDpcczAKKy5JUCAiXGZCXC1tbGliZnVuY3NcZlIiIDQKKy5JWCBJdGVtICItbWxpYmZ1bmNzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxpYmZ1bmNzXGZSIiA0CisuSVggSXRlbSAiLW1uby1saWJmdW5jcyIKKy5QRAorU3BlY2lmeSB0aGF0IGludHJpbnNpYyBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgYmVpbmcgY29tcGlsZWQsIHBhc3NpbmcgYWxsCit2YWx1ZXMgaW4gcmVnaXN0ZXJzLCBubyBtYXR0ZXIgdGhlIHNpemUuCisuSVAgIlxmQlwtbWVwc2lsb25cZlIiIDQKKy5JWCBJdGVtICItbWVwc2lsb24iCisuUEQgMAorLklQICJcZkJcLW1ub1wtZXBzaWxvblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZXBzaWxvbiIKKy5QRAorR2VuZXJhdGUgZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbiBpbnN0cnVjdGlvbnMgdGhhdCBjb21wYXJlIHdpdGggcmVzcGVjdAordG8gdGhlIFxmKENXXCooQ2ByRVwqKEMnXGZSIGVwc2lsb24gcmVnaXN0ZXIuCisuSVAgIlxmQlwtbWFiaT1tbWl4d2FyZVxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPW1taXh3YXJlIgorLlBEIDAKKy5JUCAiXGZCXC1tYWJpPWdudVxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPWdudSIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IHBhc3NlcyBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWVzIHRoYXQgKGluCit0aGUgY2FsbGVkIGZ1bmN0aW9uKSBhcmUgc2VlbiBhcyByZWdpc3RlcnMgXGYoQ1ckMFxmUiBhbmQgdXAsIGFzIG9wcG9zZWQgdG8KK3RoZSBccy0xR05VXHMwIFxzLTFBQklcczAgd2hpY2ggdXNlcyBnbG9iYWwgcmVnaXN0ZXJzIFxmKENXJDIzMVxmUiBhbmQgdXAuCisuSVAgIlxmQlwtbXplcm9cLWV4dGVuZFxmUiIgNAorLklYIEl0ZW0gIi1temVyby1leHRlbmQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtemVyb1wtZXh0ZW5kXGZSIiA0CisuSVggSXRlbSAiLW1uby16ZXJvLWV4dGVuZCIKKy5QRAorV2hlbiByZWFkaW5nIGRhdGEgZnJvbSBtZW1vcnkgaW4gc2l6ZXMgc2hvcnRlciB0aGFuIDY0IGJpdHMsIHVzZSAoZG8gbm90Cit1c2UpIHplcm8tZXh0ZW5kaW5nIGxvYWQgaW5zdHJ1Y3Rpb25zIGJ5IGRlZmF1bHQsIHJhdGhlciB0aGFuCitzaWduLWV4dGVuZGluZyBvbmVzLgorLklQICJcZkJcLW1rbnV0aGRpdlxmUiIgNAorLklYIEl0ZW0gIi1ta251dGhkaXYiCisuUEQgMAorLklQICJcZkJcLW1ub1wta251dGhkaXZcZlIiIDQKKy5JWCBJdGVtICItbW5vLWtudXRoZGl2IgorLlBECitNYWtlIHRoZSByZXN1bHQgb2YgYSBkaXZpc2lvbiB5aWVsZGluZyBhIHJlbWFpbmRlciBoYXZlIHRoZSBzYW1lIHNpZ24gYXMKK3RoZSBkaXZpc29yLiAgV2l0aCB0aGUgZGVmYXVsdCwgXGZCXC1tbm9cLWtudXRoZGl2XGZSLCB0aGUgc2lnbiBvZiB0aGUKK3JlbWFpbmRlciBmb2xsb3dzIHRoZSBzaWduIG9mIHRoZSBkaXZpZGVuZC4gIEJvdGggbWV0aG9kcyBhcmUKK2FyaXRobWV0aWNhbGx5IHZhbGlkLCB0aGUgbGF0dGVyIGJlaW5nIGFsbW9zdCBleGNsdXNpdmVseSB1c2VkLgorLklQICJcZkJcLW10b3BsZXZlbFwtc3ltYm9sc1xmUiIgNAorLklYIEl0ZW0gIi1tdG9wbGV2ZWwtc3ltYm9scyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC10b3BsZXZlbFwtc3ltYm9sc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tdG9wbGV2ZWwtc3ltYm9scyIKKy5QRAorUHJlcGVuZCAoZG8gbm90IHByZXBlbmQpIGEgXGZCOlxmUiB0byBhbGwgZ2xvYmFsIHN5bWJvbHMsIHNvIHRoZSBhc3NlbWJseQorY29kZSBjYW4gYmUgdXNlZCB3aXRoIHRoZSBcZihDV1wqKENgUFJFRklYXCooQydcZlIgYXNzZW1ibHkgZGlyZWN0aXZlLgorLklQICJcZkJcLW1lbGZcZlIiIDQKKy5JWCBJdGVtICItbWVsZiIKK0dlbmVyYXRlIGFuIGV4ZWN1dGFibGUgaW4gdGhlIFxzLTFFTEZcczAgZm9ybWF0LCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdAorXCZcZkJtbW9cZlIgZm9ybWF0IHVzZWQgYnkgdGhlIFxmQm1taXhcZlIgc2ltdWxhdG9yLgorLklQICJcZkJcLW1icmFuY2hcLXByZWRpY3RcZlIiIDQKKy5JWCBJdGVtICItbWJyYW5jaC1wcmVkaWN0IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWJyYW5jaFwtcHJlZGljdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYnJhbmNoLXByZWRpY3QiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgdGhlIHByb2JhYmxlLWJyYW5jaCBpbnN0cnVjdGlvbnMsIHdoZW4gc3RhdGljIGJyYW5jaAorcHJlZGljdGlvbiBpbmRpY2F0ZXMgYSBwcm9iYWJsZSBicmFuY2guCisuSVAgIlxmQlwtbWJhc2VcLWFkZHJlc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi1tYmFzZS1hZGRyZXNzZXMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtYmFzZVwtYWRkcmVzc2VzXGZSIiA0CisuSVggSXRlbSAiLW1uby1iYXNlLWFkZHJlc3NlcyIKKy5QRAorR2VuZXJhdGUgKGRvIG5vdCBnZW5lcmF0ZSkgY29kZSB0aGF0IHVzZXMgXGZJYmFzZSBhZGRyZXNzZXNcZlIuICBVc2luZyBhCitiYXNlIGFkZHJlc3MgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYSByZXF1ZXN0IChoYW5kbGVkIGJ5IHRoZSBhc3NlbWJsZXIKK2FuZCB0aGUgbGlua2VyKSBmb3IgYSBjb25zdGFudCB0byBiZSBzZXQgdXAgaW4gYSBnbG9iYWwgcmVnaXN0ZXIuICBUaGUKK3JlZ2lzdGVyIGlzIHVzZWQgZm9yIG9uZSBvciBtb3JlIGJhc2UgYWRkcmVzcyByZXF1ZXN0cyB3aXRoaW4gdGhlIHJhbmdlIDAKK3RvIDI1NSBmcm9tIHRoZSB2YWx1ZSBoZWxkIGluIHRoZSByZWdpc3Rlci4gIFRoZSBnZW5lcmFsbHkgbGVhZHMgdG8gc2hvcnQKK2FuZCBmYXN0IGNvZGUsIGJ1dCB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBkYXRhIGl0ZW1zIHRoYXQgY2FuIGJlCithZGRyZXNzZWQgaXMgbGltaXRlZC4gIFRoaXMgbWVhbnMgdGhhdCBhIHByb2dyYW0gdGhhdCB1c2VzIGxvdHMgb2Ygc3RhdGljCitkYXRhIG1heSByZXF1aXJlIFxmQlwtbW5vXC1iYXNlXC1hZGRyZXNzZXNcZlIuCisuSVAgIlxmQlwtbXNpbmdsZVwtZXhpdFxmUiIgNAorLklYIEl0ZW0gIi1tc2luZ2xlLWV4aXQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc2luZ2xlXC1leGl0XGZSIiA0CisuSVggSXRlbSAiLW1uby1zaW5nbGUtZXhpdCIKKy5QRAorRm9yY2UgKGRvIG5vdCBmb3JjZSkgZ2VuZXJhdGVkIGNvZGUgdG8gaGF2ZSBhIHNpbmdsZSBleGl0IHBvaW50IGluIGVhY2gKK2Z1bmN0aW9uLgorLlBQCitcZklccy0xTU4xMDMwMFxzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiTU4xMDMwMCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgTWF0c3VzaGl0YSBccy0xTU4xMDMwMFxzMCBhcmNoaXRlY3R1cmVzOgorLklQICJcZkJcLW1tdWx0XC1idWdcZlIiIDQKKy5JWCBJdGVtICItbW11bHQtYnVnIgorR2VuZXJhdGUgY29kZSB0byBhdm9pZCBidWdzIGluIHRoZSBtdWx0aXBseSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBccy0xTU4xMDMwMFxzMAorcHJvY2Vzc29ycy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbW5vXC1tdWx0XC1idWdcZlIiIDQKKy5JWCBJdGVtICItbW5vLW11bHQtYnVnIgorRG8gbm90IGdlbmVyYXRlIGNvZGUgdG8gYXZvaWQgYnVncyBpbiB0aGUgbXVsdGlwbHkgaW5zdHJ1Y3Rpb25zIGZvciB0aGUKK1wmXHMtMU1OMTAzMDBcczAgcHJvY2Vzc29ycy4KKy5JUCAiXGZCXC1tYW0zM1xmUiIgNAorLklYIEl0ZW0gIi1tYW0zMyIKK0dlbmVyYXRlIGNvZGUgdXNpbmcgZmVhdHVyZXMgc3BlY2lmaWMgdG8gdGhlIFxzLTFBTTMzXHMwIHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1tbm9cLWFtMzNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWFtMzMiCitEbyBub3QgZ2VuZXJhdGUgY29kZSB1c2luZyBmZWF0dXJlcyBzcGVjaWZpYyB0byB0aGUgXHMtMUFNMzNcczAgcHJvY2Vzc29yLiAgVGhpcworaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWFtMzNcLTJcZlIiIDQKKy5JWCBJdGVtICItbWFtMzMtMiIKK0dlbmVyYXRlIGNvZGUgdXNpbmcgZmVhdHVyZXMgc3BlY2lmaWMgdG8gdGhlIFxzLTFBTTMzLzJcczAuMCBwcm9jZXNzb3IuCisuSVAgIlxmQlwtbWFtMzRcZlIiIDQKKy5JWCBJdGVtICItbWFtMzQiCitHZW5lcmF0ZSBjb2RlIHVzaW5nIGZlYXR1cmVzIHNwZWNpZmljIHRvIHRoZSBccy0xQU0zNFxzMCBwcm9jZXNzb3IuCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9Y3B1LXR5cGUiCitVc2UgdGhlIHRpbWluZyBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGluZGljYXRlZCBccy0xQ1BVXHMwIHR5cGUgd2hlbgorc2NoZWR1bGluZyBpbnN0cnVjdGlvbnMuICBUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgdGFyZ2V0ZWQgcHJvY2Vzc29yCit0eXBlLiAgVGhlIFxzLTFDUFVcczAgdHlwZSBtdXN0IGJlIG9uZSBvZiBcZkJtbjEwMzAwXGZSLCBcZkJhbTMzXGZSLAorXCZcZkJhbTMzXC0yXGZSIG9yIFxmQmFtMzRcZlIuCisuSVAgIlxmQlwtbXJldHVyblwtcG9pbnRlclwtb25cLWQwXGZSIiA0CisuSVggSXRlbSAiLW1yZXR1cm4tcG9pbnRlci1vbi1kMCIKK1doZW4gZ2VuZXJhdGluZyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHBvaW50ZXIsIHJldHVybiB0aGUgcG9pbnRlcgoraW4gYm90aCBcZihDV1wqKENgYTBcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGQwXCooQydcZlIuICBPdGhlcndpc2UsIHRoZSBwb2ludGVyIGlzIHJldHVybmVkCitvbmx5IGluIFxmKENXXCooQ2BhMFwqKEMnXGZSLCBhbmQgYXR0ZW1wdHMgdG8gY2FsbCBzdWNoIGZ1bmN0aW9ucyB3aXRob3V0IGEgcHJvdG90eXBlCityZXN1bHQgaW4gZXJyb3JzLiAgTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQ7IHVzZQorXCZcZkJcLW1ub1wtcmV0dXJuXC1wb2ludGVyXC1vblwtZDBcZlIgdG8gZGlzYWJsZSBpdC4KKy5JUCAiXGZCXC1tbm9cLWNydDBcZlIiIDQKKy5JWCBJdGVtICItbW5vLWNydDAiCitEbyBub3QgbGluayBpbiB0aGUgQyBydW4tdGltZSBpbml0aWFsaXphdGlvbiBvYmplY3QgZmlsZS4KKy5JUCAiXGZCXC1tcmVsYXhcZlIiIDQKKy5JWCBJdGVtICItbXJlbGF4IgorSW5kaWNhdGUgdG8gdGhlIGxpbmtlciB0aGF0IGl0IHNob3VsZCBwZXJmb3JtIGEgcmVsYXhhdGlvbiBvcHRpbWl6YXRpb24gcGFzcwordG8gc2hvcnRlbiBicmFuY2hlcywgY2FsbHMgYW5kIGFic29sdXRlIG1lbW9yeSBhZGRyZXNzZXMuICBUaGlzIG9wdGlvbiBvbmx5CitoYXMgYW4gZWZmZWN0IHdoZW4gdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIGZvciB0aGUgZmluYWwgbGluayBzdGVwLgorLlNwCitUaGlzIG9wdGlvbiBtYWtlcyBzeW1ib2xpYyBkZWJ1Z2dpbmcgaW1wb3NzaWJsZS4KKy5JUCAiXGZCXC1tbGl3XGZSIiA0CisuSVggSXRlbSAiLW1saXciCitBbGxvdyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgXGZJTG9uZyBJbnN0cnVjdGlvbiBXb3JkXGZSCitpbnN0cnVjdGlvbnMgaWYgdGhlIHRhcmdldCBpcyB0aGUgXGZCXHMtMUFNMzNcczBcZlIgb3IgbGF0ZXIuICBUaGlzIGlzIHRoZQorZGVmYXVsdC4gIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHByZXByb2Nlc3NvciBtYWNybyBcZkJfXHxfTElXX1x8X1xmUi4KKy5JUCAiXGZCXC1tbm9saXdcZlIiIDQKKy5JWCBJdGVtICItbW5vbGl3IgorRG8gbm90IGFsbG93IHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSBcZklMb25nIEluc3RydWN0aW9uIFdvcmRcZlIKK2luc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHByZXByb2Nlc3NvciBtYWNybworXCZcZkJfXHxfTk9fTElXX1x8X1xmUi4KKy5JUCAiXGZCXC1tc2V0bGJcZlIiIDQKKy5JWCBJdGVtICItbXNldGxiIgorQWxsb3cgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIHRoZSBcZklccy0xU0VUTEJcczBcZlIgYW5kIFxmSUxjY1xmUgoraW5zdHJ1Y3Rpb25zIGlmIHRoZSB0YXJnZXQgaXMgdGhlIFxmQlxzLTFBTTMzXHMwXGZSIG9yIGxhdGVyLiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuICBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gXGZCX1x8X1NFVExCX1x8X1xmUi4KKy5JUCAiXGZCXC1tbm9zZXRsYlxmUiIgNAorLklYIEl0ZW0gIi1tbm9zZXRsYiIKK0RvIG5vdCBhbGxvdyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgXGZJXHMtMVNFVExCXHMwXGZSIG9yIFxmSUxjY1xmUgoraW5zdHJ1Y3Rpb25zLiAgVGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgcHJlcHJvY2Vzc29yIG1hY3JvCitcJlxmQl9cfF9OT19TRVRMQl9cfF9cZlIuCisuUFAKK1xmSU1veGllIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJNb3hpZSBPcHRpb25zIgorLklQICJcZkJcLW1lYlxmUiIgNAorLklYIEl0ZW0gIi1tZWIiCitHZW5lcmF0ZSBiaWctZW5kaWFuIGNvZGUuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciBcZkJtb3hpZVwtKlwtKlxmUgorY29uZmlndXJhdGlvbnMuCisuSVAgIlxmQlwtbWVsXGZSIiA0CisuSVggSXRlbSAiLW1lbCIKK0dlbmVyYXRlIGxpdHRsZS1lbmRpYW4gY29kZS4KKy5JUCAiXGZCXC1tbm9cLWNydDBcZlIiIDQKKy5JWCBJdGVtICItbW5vLWNydDAiCitEbyBub3QgbGluayBpbiB0aGUgQyBydW4tdGltZSBpbml0aWFsaXphdGlvbiBvYmplY3QgZmlsZS4KKy5QUAorXGZJXHMtMVBEUFwtMTFcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlBEUC0xMSBPcHRpb25zIgorLlBQCitUaGVzZSBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgXHMtMVBEUFwtMTE6XHMwCisuSVAgIlxmQlwtbWZwdVxmUiIgNAorLklYIEl0ZW0gIi1tZnB1IgorVXNlIGhhcmR3YXJlIFxzLTFGUFBcczAgZmxvYXRpbmcgcG9pbnQuICBUaGlzIGlzIHRoZSBkZWZhdWx0LiAgKFxzLTFGSVNcczAgZmxvYXRpbmcKK3BvaW50IG9uIHRoZSBccy0xUERQXC0xMS80MFxzMCBpcyBub3Qgc3VwcG9ydGVkLikKKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCitEbyBub3QgdXNlIGhhcmR3YXJlIGZsb2F0aW5nIHBvaW50LgorLklQICJcZkJcLW1hYzBcZlIiIDQKKy5JWCBJdGVtICItbWFjMCIKK1JldHVybiBmbG9hdGluZy1wb2ludCByZXN1bHRzIGluIGFjMCAoZnIwIGluIFVuaXggYXNzZW1ibGVyIHN5bnRheCkuCisuSVAgIlxmQlwtbW5vXC1hYzBcZlIiIDQKKy5JWCBJdGVtICItbW5vLWFjMCIKK1JldHVybiBmbG9hdGluZy1wb2ludCByZXN1bHRzIGluIG1lbW9yeS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbTQwXGZSIiA0CisuSVggSXRlbSAiLW00MCIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgXHMtMVBEUFwtMTEvNDBcczAuCisuSVAgIlxmQlwtbTQ1XGZSIiA0CisuSVggSXRlbSAiLW00NSIKK0dlbmVyYXRlIGNvZGUgZm9yIGEgXHMtMVBEUFwtMTEvNDVcczAuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW0xMFxmUiIgNAorLklYIEl0ZW0gIi1tMTAiCitHZW5lcmF0ZSBjb2RlIGZvciBhIFxzLTFQRFBcLTExLzEwXHMwLgorLklQICJcZkJcLW1iY29weVwtYnVpbHRpblxmUiIgNAorLklYIEl0ZW0gIi1tYmNvcHktYnVpbHRpbiIKK1VzZSBpbmxpbmUgXGYoQ1dcKihDYG1vdm1lbWhpXCooQydcZlIgcGF0dGVybnMgZm9yIGNvcHlpbmcgbWVtb3J5LiAgVGhpcyBpcyB0aGUKK2RlZmF1bHQuCisuSVAgIlxmQlwtbWJjb3B5XGZSIiA0CisuSVggSXRlbSAiLW1iY29weSIKK0RvIG5vdCB1c2UgaW5saW5lIFxmKENXXCooQ2Btb3ZtZW1oaVwqKEMnXGZSIHBhdHRlcm5zIGZvciBjb3B5aW5nIG1lbW9yeS4KKy5JUCAiXGZCXC1taW50MTZcZlIiIDQKKy5JWCBJdGVtICItbWludDE2IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWludDMyXGZSIiA0CisuSVggSXRlbSAiLW1uby1pbnQzMiIKKy5QRAorVXNlIDE2XC1iaXQgXGYoQ1dcKihDYGludFwqKEMnXGZSLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1taW50MzJcZlIiIDQKKy5JWCBJdGVtICItbWludDMyIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWludDE2XGZSIiA0CisuSVggSXRlbSAiLW1uby1pbnQxNiIKKy5QRAorVXNlIDMyXC1iaXQgXGYoQ1dcKihDYGludFwqKEMnXGZSLgorLklQICJcZkJcLW1mbG9hdDY0XGZSIiA0CisuSVggSXRlbSAiLW1mbG9hdDY0IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZsb2F0MzJcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZsb2F0MzIiCisuUEQKK1VzZSA2NFwtYml0IFxmKENXXCooQ2BmbG9hdFwqKEMnXGZSLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tZmxvYXQzMlxmUiIgNAorLklYIEl0ZW0gIi1tZmxvYXQzMiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mbG9hdDY0XGZSIiA0CisuSVggSXRlbSAiLW1uby1mbG9hdDY0IgorLlBECitVc2UgMzJcLWJpdCBcZihDV1wqKENgZmxvYXRcKihDJ1xmUi4KKy5JUCAiXGZCXC1tYWJzaGlcZlIiIDQKKy5JWCBJdGVtICItbWFic2hpIgorVXNlIFxmKENXXCooQ2BhYnNoaTJcKihDJ1xmUiBwYXR0ZXJuLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbm9cLWFic2hpXGZSIiA0CisuSVggSXRlbSAiLW1uby1hYnNoaSIKK0RvIG5vdCB1c2UgXGYoQ1dcKihDYGFic2hpMlwqKEMnXGZSIHBhdHRlcm4uCisuSVAgIlxmQlwtbWJyYW5jaFwtZXhwZW5zaXZlXGZSIiA0CisuSVggSXRlbSAiLW1icmFuY2gtZXhwZW5zaXZlIgorUHJldGVuZCB0aGF0IGJyYW5jaGVzIGFyZSBleHBlbnNpdmUuICBUaGlzIGlzIGZvciBleHBlcmltZW50aW5nIHdpdGgKK2NvZGUgZ2VuZXJhdGlvbiBvbmx5LgorLklQICJcZkJcLW1icmFuY2hcLWNoZWFwXGZSIiA0CisuSVggSXRlbSAiLW1icmFuY2gtY2hlYXAiCitEbyBub3QgcHJldGVuZCB0aGF0IGJyYW5jaGVzIGFyZSBleHBlbnNpdmUuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW11bml4XC1hc21cZlIiIDQKKy5JWCBJdGVtICItbXVuaXgtYXNtIgorVXNlIFVuaXggYXNzZW1ibGVyIHN5bnRheC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiBjb25maWd1cmVkIGZvcgorXCZcZkJwZHAxMVwtKlwtYnNkXGZSLgorLklQICJcZkJcLW1kZWNcLWFzbVxmUiIgNAorLklYIEl0ZW0gIi1tZGVjLWFzbSIKK1VzZSBccy0xREVDXHMwIGFzc2VtYmxlciBzeW50YXguICBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gY29uZmlndXJlZCBmb3IgYW55CitcJlxzLTFQRFBcLTExXHMwIHRhcmdldCBvdGhlciB0aGFuIFxmQnBkcDExXC0qXC1ic2RcZlIuCisuUFAKK1xmSXBpY29DaGlwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJwaWNvQ2hpcCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgcGljb0NoaXAgaW1wbGVtZW50YXRpb25zOgorLklQICJcZkJcLW1hZT1cZlJcZklhZV90eXBlXGZSIiA0CisuSVggSXRlbSAiLW1hZT1hZV90eXBlIgorU2V0IHRoZSBpbnN0cnVjdGlvbiBzZXQsIHJlZ2lzdGVyIHNldCwgYW5kIGluc3RydWN0aW9uIHNjaGVkdWxpbmcKK3BhcmFtZXRlcnMgZm9yIGFycmF5IGVsZW1lbnQgdHlwZSBcZklhZV90eXBlXGZSLiAgU3VwcG9ydGVkIHZhbHVlcworZm9yIFxmSWFlX3R5cGVcZlIgYXJlIFxmQlxzLTFBTllcczBcZlIsIFxmQlxzLTFNVUxcczBcZlIsIGFuZCBcZkJccy0xTUFDXHMwXGZSLgorLlNwCitcJlxmQlwtbWFlPUFOWVxmUiBzZWxlY3RzIGEgY29tcGxldGVseSBnZW5lcmljIFxzLTFBRVxzMCB0eXBlLiAgQ29kZQorZ2VuZXJhdGVkIHdpdGggdGhpcyBvcHRpb24gcnVucyBvbiBhbnkgb2YgdGhlIG90aGVyIFxzLTFBRVxzMCB0eXBlcy4gIFRoZQorY29kZSBpcyBub3QgYXMgZWZmaWNpZW50IGFzIGl0IHdvdWxkIGJlIGlmIGNvbXBpbGVkIGZvciBhIHNwZWNpZmljCitcJlxzLTFBRVxzMCB0eXBlLCBhbmQgc29tZSB0eXBlcyBvZiBvcGVyYXRpb24gKGUuZy4sIG11bHRpcGxpY2F0aW9uKSBkbyBub3QKK3dvcmsgcHJvcGVybHkgb24gYWxsIHR5cGVzIG9mIFxzLTFBRVxzMC4KKy5TcAorXCZcZkJcLW1hZT1NVUxcZlIgc2VsZWN0cyBhIFxzLTFNVUxcczAgXHMtMUFFXHMwIHR5cGUuICBUaGlzIGlzIHRoZSBtb3N0IHVzZWZ1bCBccy0xQUVcczAgdHlwZQorZm9yIGNvbXBpbGVkIGNvZGUsIGFuZCBpcyB0aGUgZGVmYXVsdC4KKy5TcAorXCZcZkJcLW1hZT1NQUNcZlIgc2VsZWN0cyBhIERTUC1zdHlsZSBccy0xTUFDXHMwIFxzLTFBRVxzMC4gIENvZGUgY29tcGlsZWQgd2l0aCB0aGlzCitvcHRpb24gbWF5IHN1ZmZlciBmcm9tIHBvb3IgcGVyZm9ybWFuY2Ugb2YgYnl0ZSAoY2hhcikgbWFuaXB1bGF0aW9uLAorc2luY2UgdGhlIFxzLTFEU1BcczAgXHMtMUFFXHMwIGRvZXMgbm90IHByb3ZpZGUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgYnl0ZSBsb2FkL3N0b3Jlcy4KKy5JUCAiXGZCXC1tc3ltYm9sXC1hc1wtYWRkcmVzc1xmUiIgNAorLklYIEl0ZW0gIi1tc3ltYm9sLWFzLWFkZHJlc3MiCitFbmFibGUgdGhlIGNvbXBpbGVyIHRvIGRpcmVjdGx5IHVzZSBhIHN5bWJvbCBuYW1lIGFzIGFuIGFkZHJlc3MgaW4gYQorbG9hZC9zdG9yZSBpbnN0cnVjdGlvbiwgd2l0aG91dCBmaXJzdCBsb2FkaW5nIGl0IGludG8gYQorcmVnaXN0ZXIuICBUeXBpY2FsbHksIHRoZSB1c2Ugb2YgdGhpcyBvcHRpb24gZ2VuZXJhdGVzIGxhcmdlcgorcHJvZ3JhbXMsIHdoaWNoIHJ1biBmYXN0ZXIgdGhhbiB3aGVuIHRoZSBvcHRpb24gaXNuJ3QgdXNlZC4gIEhvd2V2ZXIsIHRoZQorcmVzdWx0cyB2YXJ5IGZyb20gcHJvZ3JhbSB0byBwcm9ncmFtLCBzbyBpdCBpcyBsZWZ0IGFzIGEgdXNlciBvcHRpb24sCityYXRoZXIgdGhhbiBiZWluZyBwZXJtYW5lbnRseSBlbmFibGVkLgorLklQICJcZkJcLW1ub1wtaW5lZmZpY2llbnRcLXdhcm5pbmdzXGZSIiA0CisuSVggSXRlbSAiLW1uby1pbmVmZmljaWVudC13YXJuaW5ncyIKK0Rpc2FibGVzIHdhcm5pbmdzIGFib3V0IHRoZSBnZW5lcmF0aW9uIG9mIGluZWZmaWNpZW50IGNvZGUuICBUaGVzZQord2FybmluZ3MgY2FuIGJlIGdlbmVyYXRlZCwgZm9yIGV4YW1wbGUsIHdoZW4gY29tcGlsaW5nIGNvZGUgdGhhdAorcGVyZm9ybXMgYnl0ZS1sZXZlbCBtZW1vcnkgb3BlcmF0aW9ucyBvbiB0aGUgXHMtMU1BQ1xzMCBccy0xQUVcczAgdHlwZS4gIFRoZSBccy0xTUFDXHMwIFxzLTFBRVxzMCBoYXMKK25vIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGJ5dGUtbGV2ZWwgbWVtb3J5IG9wZXJhdGlvbnMsIHNvIGFsbCBieXRlCitsb2FkL3N0b3JlcyBtdXN0IGJlIHN5bnRoZXNpemVkIGZyb20gd29yZCBsb2FkL3N0b3JlIG9wZXJhdGlvbnMuICBUaGlzIGlzCitpbmVmZmljaWVudCBhbmQgYSB3YXJuaW5nIGlzIGdlbmVyYXRlZCB0byBpbmRpY2F0ZQordGhhdCB5b3Ugc2hvdWxkIHJld3JpdGUgdGhlIGNvZGUgdG8gYXZvaWQgYnl0ZSBvcGVyYXRpb25zLCBvciB0byB0YXJnZXQKK2FuIFxzLTFBRVxzMCB0eXBlIHRoYXQgaGFzIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUgc3VwcG9ydC4gIFRoaXMgb3B0aW9uIGRpc2FibGVzCit0aGVzZSB3YXJuaW5ncy4KKy5QUAorXGZJUG93ZXJQQyBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiUG93ZXJQQyBPcHRpb25zIgorLlBQCitUaGVzZSBhcmUgbGlzdGVkIHVuZGVyCisuUFAKK1xmSVxzLTFSTDc4XHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJSTDc4IE9wdGlvbnMiCisuSVAgIlxmQlwtbXNpbVxmUiIgNAorLklYIEl0ZW0gIi1tc2ltIgorTGlua3MgaW4gYWRkaXRpb25hbCB0YXJnZXQgbGlicmFyaWVzIHRvIHN1cHBvcnQgb3BlcmF0aW9uIHdpdGhpbiBhCitzaW11bGF0b3IuCisuSVAgIlxmQlwtbW11bD1ub25lXGZSIiA0CisuSVggSXRlbSAiLW1tdWw9bm9uZSIKKy5QRCAwCisuSVAgIlxmQlwtbW11bD1nMTNcZlIiIDQKKy5JWCBJdGVtICItbW11bD1nMTMiCisuSVAgIlxmQlwtbW11bD1ybDc4XGZSIiA0CisuSVggSXRlbSAiLW1tdWw9cmw3OCIKKy5QRAorU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGhhcmR3YXJlIG11bHRpcGxpY2F0aW9uIHN1cHBvcnQgdG8gYmUgdXNlZC4gIFRoZQorZGVmYXVsdCBpcyBcZihDV1wqKENgbm9uZVwqKEMnXGZSLCB3aGljaCB1c2VzIHNvZnR3YXJlIG11bHRpcGxpY2F0aW9uIGZ1bmN0aW9ucy4KK1RoZSBcZihDV1wqKENgZzEzXCooQydcZlIgb3B0aW9uIGlzIGZvciB0aGUgaGFyZHdhcmUgbXVsdGlwbHkvZGl2aWRlIHBlcmlwaGVyYWwKK29ubHkgb24gdGhlIFxzLTFSTDc4L0cxM1xzMCB0YXJnZXRzLiAgVGhlIFxmKENXXCooQ2BybDc4XCooQydcZlIgb3B0aW9uIGlzIGZvciB0aGUKK3N0YW5kYXJkIGhhcmR3YXJlIG11bHRpcGxpY2F0aW9uIGRlZmluZWQgaW4gdGhlIFxzLTFSTDc4XHMwIHNvZnR3YXJlIG1hbnVhbC4KKy5QUAorXGZJXHMtMUlCTVxzMCBccy0xUlMvNjAwMFxzMCBhbmQgUG93ZXJQQyBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiSUJNIFJTLzYwMDAgYW5kIFBvd2VyUEMgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBccy0xSUJNXHMwIFxzLTFSUy82MDAwXHMwIGFuZCBQb3dlclBDOgorLklQICJcZkJcLW1wb3dlcnBjXC1ncG9wdFxmUiIgNAorLklYIEl0ZW0gIi1tcG93ZXJwYy1ncG9wdCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1wb3dlcnBjXC1ncG9wdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcG93ZXJwYy1ncG9wdCIKKy5JUCAiXGZCXC1tcG93ZXJwY1wtZ2Z4b3B0XGZSIiA0CisuSVggSXRlbSAiLW1wb3dlcnBjLWdmeG9wdCIKKy5JUCAiXGZCXC1tbm9cLXBvd2VycGNcLWdmeG9wdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcG93ZXJwYy1nZnhvcHQiCisuSVAgIlxmQlwtbXBvd2VycGM2NFxmUiIgNAorLklYIEl0ZW0gIi1tcG93ZXJwYzY0IgorLklQICJcZkJcLW1ub1wtcG93ZXJwYzY0XGZSIiA0CisuSVggSXRlbSAiLW1uby1wb3dlcnBjNjQiCisuSVAgIlxmQlwtbW1mY3JmXGZSIiA0CisuSVggSXRlbSAiLW1tZmNyZiIKKy5JUCAiXGZCXC1tbm9cLW1mY3JmXGZSIiA0CisuSVggSXRlbSAiLW1uby1tZmNyZiIKKy5JUCAiXGZCXC1tcG9wY250YlxmUiIgNAorLklYIEl0ZW0gIi1tcG9wY250YiIKKy5JUCAiXGZCXC1tbm9cLXBvcGNudGJcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBvcGNudGIiCisuSVAgIlxmQlwtbXBvcGNudGRcZlIiIDQKKy5JWCBJdGVtICItbXBvcGNudGQiCisuSVAgIlxmQlwtbW5vXC1wb3BjbnRkXGZSIiA0CisuSVggSXRlbSAiLW1uby1wb3BjbnRkIgorLklQICJcZkJcLW1mcHJuZFxmUiIgNAorLklYIEl0ZW0gIi1tZnBybmQiCisuSVAgIlxmQlwtbW5vXC1mcHJuZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnBybmQiCisuSVAgIlxmQlwtbWNtcGJcZlIiIDQKKy5JWCBJdGVtICItbWNtcGIiCisuSVAgIlxmQlwtbW5vXC1jbXBiXGZSIiA0CisuSVggSXRlbSAiLW1uby1jbXBiIgorLklQICJcZkJcLW1tZnBncHJcZlIiIDQKKy5JWCBJdGVtICItbW1mcGdwciIKKy5JUCAiXGZCXC1tbm9cLW1mcGdwclxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbWZwZ3ByIgorLklQICJcZkJcLW1oYXJkXC1kZnBcZlIiIDQKKy5JWCBJdGVtICItbWhhcmQtZGZwIgorLklQICJcZkJcLW1ub1wtaGFyZFwtZGZwXGZSIiA0CisuSVggSXRlbSAiLW1uby1oYXJkLWRmcCIKKy5QRAorWW91IHVzZSB0aGVzZSBvcHRpb25zIHRvIHNwZWNpZnkgd2hpY2ggaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUgb24gdGhlCitwcm9jZXNzb3IgeW91IGFyZSB1c2luZy4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZXNlIG9wdGlvbnMgaXMKK2RldGVybWluZWQgd2hlbiBjb25maWd1cmluZyBccy0xR0NDXHMwLiAgU3BlY2lmeWluZyB0aGUKK1wmXGZCXC1tY3B1PVxmUlxmSWNwdV90eXBlXGZSIG92ZXJyaWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGVzZQorb3B0aW9ucy4gIFdlIHJlY29tbWVuZCB5b3UgdXNlIHRoZSBcZkJcLW1jcHU9XGZSXGZJY3B1X3R5cGVcZlIgb3B0aW9uCityYXRoZXIgdGhhbiB0aGUgb3B0aW9ucyBsaXN0ZWQgYWJvdmUuCisuU3AKK1NwZWNpZnlpbmcgXGZCXC1tcG93ZXJwY1wtZ3BvcHRcZlIgYWxsb3dzCitcJlxzLTFHQ0NcczAgdG8gdXNlIHRoZSBvcHRpb25hbCBQb3dlclBDIGFyY2hpdGVjdHVyZSBpbnN0cnVjdGlvbnMgaW4gdGhlCitHZW5lcmFsIFB1cnBvc2UgZ3JvdXAsIGluY2x1ZGluZyBmbG9hdGluZy1wb2ludCBzcXVhcmUgcm9vdC4gIFNwZWNpZnlpbmcKK1wmXGZCXC1tcG93ZXJwY1wtZ2Z4b3B0XGZSIGFsbG93cyBccy0xR0NDXHMwIHRvCit1c2UgdGhlIG9wdGlvbmFsIFBvd2VyUEMgYXJjaGl0ZWN0dXJlIGluc3RydWN0aW9ucyBpbiB0aGUgR3JhcGhpY3MKK2dyb3VwLCBpbmNsdWRpbmcgZmxvYXRpbmctcG9pbnQgc2VsZWN0LgorLlNwCitUaGUgXGZCXC1tbWZjcmZcZlIgb3B0aW9uIGFsbG93cyBccy0xR0NDXHMwIHRvIGdlbmVyYXRlIHRoZSBtb3ZlIGZyb20KK2NvbmRpdGlvbiByZWdpc3RlciBmaWVsZCBpbnN0cnVjdGlvbiBpbXBsZW1lbnRlZCBvbiB0aGUgXHMtMVBPV0VSNFxzMAorcHJvY2Vzc29yIGFuZCBvdGhlciBwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCB0aGUgUG93ZXJQQyBWMi4wMQorYXJjaGl0ZWN0dXJlLgorVGhlIFxmQlwtbXBvcGNudGJcZlIgb3B0aW9uIGFsbG93cyBccy0xR0NDXHMwIHRvIGdlbmVyYXRlIHRoZSBwb3Bjb3VudCBhbmQKK2RvdWJsZS1wcmVjaXNpb24gXHMtMUZQXHMwIHJlY2lwcm9jYWwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb24gaW1wbGVtZW50ZWQgb24gdGhlCitcJlxzLTFQT1dFUjVcczAgcHJvY2Vzc29yIGFuZCBvdGhlciBwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCB0aGUgUG93ZXJQQyBWMi4wMgorYXJjaGl0ZWN0dXJlLgorVGhlIFxmQlwtbXBvcGNudGRcZlIgb3B0aW9uIGFsbG93cyBccy0xR0NDXHMwIHRvIGdlbmVyYXRlIHRoZSBwb3Bjb3VudAoraW5zdHJ1Y3Rpb24gaW1wbGVtZW50ZWQgb24gdGhlIFxzLTFQT1dFUjdcczAgcHJvY2Vzc29yIGFuZCBvdGhlciBwcm9jZXNzb3JzCit0aGF0IHN1cHBvcnQgdGhlIFBvd2VyUEMgVjIuMDYgYXJjaGl0ZWN0dXJlLgorVGhlIFxmQlwtbWZwcm5kXGZSIG9wdGlvbiBhbGxvd3MgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSB0aGUgXHMtMUZQXHMwIHJvdW5kIHRvCitpbnRlZ2VyIGluc3RydWN0aW9ucyBpbXBsZW1lbnRlZCBvbiB0aGUgXHMtMVBPV0VSNStcczAgcHJvY2Vzc29yIGFuZCBvdGhlcgorcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIFBvd2VyUEMgVjIuMDMgYXJjaGl0ZWN0dXJlLgorVGhlIFxmQlwtbWNtcGJcZlIgb3B0aW9uIGFsbG93cyBccy0xR0NDXHMwIHRvIGdlbmVyYXRlIHRoZSBjb21wYXJlIGJ5dGVzCitpbnN0cnVjdGlvbiBpbXBsZW1lbnRlZCBvbiB0aGUgXHMtMVBPV0VSNlxzMCBwcm9jZXNzb3IgYW5kIG90aGVyIHByb2Nlc3NvcnMKK3RoYXQgc3VwcG9ydCB0aGUgUG93ZXJQQyBWMi4wNSBhcmNoaXRlY3R1cmUuCitUaGUgXGZCXC1tbWZwZ3ByXGZSIG9wdGlvbiBhbGxvd3MgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZSB0aGUgXHMtMUZQXHMwIG1vdmUgdG8vZnJvbQorZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIGluc3RydWN0aW9ucyBpbXBsZW1lbnRlZCBvbiB0aGUgXHMtMVBPV0VSNlhcczAKK3Byb2Nlc3NvciBhbmQgb3RoZXIgcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgdGhlIGV4dGVuZGVkIFBvd2VyUEMgVjIuMDUKK2FyY2hpdGVjdHVyZS4KK1RoZSBcZkJcLW1oYXJkXC1kZnBcZlIgb3B0aW9uIGFsbG93cyBccy0xR0NDXHMwIHRvIGdlbmVyYXRlIHRoZSBkZWNpbWFsCitmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMgaW1wbGVtZW50ZWQgb24gc29tZSBccy0xUE9XRVJcczAgcHJvY2Vzc29ycy4KKy5TcAorVGhlIFxmQlwtbXBvd2VycGM2NFxmUiBvcHRpb24gYWxsb3dzIFxzLTFHQ0NcczAgdG8gZ2VuZXJhdGUgdGhlIGFkZGl0aW9uYWwKKzY0XC1iaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGZvdW5kIGluIHRoZSBmdWxsIFBvd2VyUEM2NCBhcmNoaXRlY3R1cmUKK2FuZCB0byB0cmVhdCBHUFJzIGFzIDY0XC1iaXQsIGRvdWJsZXdvcmQgcXVhbnRpdGllcy4gIFxzLTFHQ0NcczAgZGVmYXVsdHMgdG8KK1wmXGZCXC1tbm9cLXBvd2VycGM2NFxmUi4KKy5JUCAiXGZCXC1tY3B1PVxmUlxmSWNwdV90eXBlXGZSIiA0CisuSVggSXRlbSAiLW1jcHU9Y3B1X3R5cGUiCitTZXQgYXJjaGl0ZWN0dXJlIHR5cGUsIHJlZ2lzdGVyIHVzYWdlLCBhbmQKK2luc3RydWN0aW9uIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBmb3IgbWFjaGluZSB0eXBlIFxmSWNwdV90eXBlXGZSLgorU3VwcG9ydGVkIHZhbHVlcyBmb3IgXGZJY3B1X3R5cGVcZlIgYXJlIFxmQjQwMVxmUiwgXGZCNDAzXGZSLAorXCZcZkI0MDVcZlIsIFxmQjQwNWZwXGZSLCBcZkI0NDBcZlIsIFxmQjQ0MGZwXGZSLCBcZkI0NjRcZlIsIFxmQjQ2NGZwXGZSLAorXCZcZkI0NzZcZlIsIFxmQjQ3NmZwXGZSLCBcZkI1MDVcZlIsIFxmQjYwMVxmUiwgXGZCNjAyXGZSLCBcZkI2MDNcZlIsCitcJlxmQjYwM2VcZlIsIFxmQjYwNFxmUiwgXGZCNjA0ZVxmUiwgXGZCNjIwXGZSLCBcZkI2MzBcZlIsIFxmQjc0MFxmUiwKK1wmXGZCNzQwMFxmUiwgXGZCNzQ1MFxmUiwgXGZCNzUwXGZSLCBcZkI4MDFcZlIsIFxmQjgyMVxmUiwgXGZCODIzXGZSLAorXCZcZkI4NjBcZlIsIFxmQjk3MFxmUiwgXGZCODU0MFxmUiwgXGZCYTJcZlIsIFxmQmUzMDBjMlxmUiwKK1wmXGZCZTMwMGMzXGZSLCBcZkJlNTAwbWNcZlIsIFxmQmU1MDBtYzY0XGZSLCBcZkJlNTUwMFxmUiwKK1wmXGZCZTY1MDBcZlIsIFxmQmVjNjAzZVxmUiwgXGZCRzNcZlIsIFxmQkc0XGZSLCBcZkJHNVxmUiwKK1wmXGZCdGl0YW5cZlIsIFxmQnBvd2VyM1xmUiwgXGZCcG93ZXI0XGZSLCBcZkJwb3dlcjVcZlIsIFxmQnBvd2VyNStcZlIsCitcJlxmQnBvd2VyNlxmUiwgXGZCcG93ZXI2eFxmUiwgXGZCcG93ZXI3XGZSLCBcZkJwb3dlcjhcZlIsIFxmQnBvd2VycGNcZlIsCitcJlxmQnBvd2VycGM2NFxmUiwgYW5kIFxmQnJzNjRcZlIuCisuU3AKK1wmXGZCXC1tY3B1PXBvd2VycGNcZlIsIGFuZCBcZkJcLW1jcHU9cG93ZXJwYzY0XGZSIHNwZWNpZnkgcHVyZSAzMlwtYml0CitQb3dlclBDIGFuZCA2NFwtYml0IFBvd2VyUEMgYXJjaGl0ZWN0dXJlIG1hY2hpbmUKK3R5cGVzLCB3aXRoIGFuIGFwcHJvcHJpYXRlLCBnZW5lcmljIHByb2Nlc3NvciBtb2RlbCBhc3N1bWVkIGZvcgorc2NoZWR1bGluZyBwdXJwb3Nlcy4KKy5TcAorVGhlIG90aGVyIG9wdGlvbnMgc3BlY2lmeSBhIHNwZWNpZmljIHByb2Nlc3Nvci4gIENvZGUgZ2VuZXJhdGVkIHVuZGVyCit0aG9zZSBvcHRpb25zIHJ1bnMgYmVzdCBvbiB0aGF0IHByb2Nlc3NvciwgYW5kIG1heSBub3QgcnVuIGF0IGFsbCBvbgorb3RoZXJzLgorLlNwCitUaGUgXGZCXC1tY3B1XGZSIG9wdGlvbnMgYXV0b21hdGljYWxseSBlbmFibGUgb3IgZGlzYWJsZSB0aGUKK2ZvbGxvd2luZyBvcHRpb25zOgorLlNwCitcJlxmQlwtbWFsdGl2ZWMgIFwtbWZwcm5kICBcLW1oYXJkXC1mbG9hdCAgXC1tbWZjcmYgIFwtbW11bHRpcGxlIAorXCZcLW1wb3BjbnRiIFwtbXBvcGNudGQgIFwtbXBvd2VycGM2NCAKK1wmXC1tcG93ZXJwY1wtZ3BvcHQgIFwtbXBvd2VycGNcLWdmeG9wdCAgXC1tc2luZ2xlXC1mbG9hdCBcLW1kb3VibGVcLWZsb2F0IAorXCZcLW1zaW1wbGVcLWZwdSBcLW1zdHJpbmcgIFwtbW11bGh3ICBcLW1kbG16YiAgXC1tbWZwZ3ByIFwtbXZzeFxmUgorLlNwCitUaGUgcGFydGljdWxhciBvcHRpb25zIHNldCBmb3IgYW55IHBhcnRpY3VsYXIgXHMtMUNQVVxzMCB2YXJpZXMgYmV0d2VlbgorY29tcGlsZXIgdmVyc2lvbnMsIGRlcGVuZGluZyBvbiB3aGF0IHNldHRpbmcgc2VlbXMgdG8gcHJvZHVjZSBvcHRpbWFsCitjb2RlIGZvciB0aGF0IFxzLTFDUFVcczA7IGl0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgcmVmbGVjdCB0aGUgYWN0dWFsIGhhcmR3YXJlJ3MKK2NhcGFiaWxpdGllcy4gIElmIHlvdSB3aXNoIHRvIHNldCBhbiBpbmRpdmlkdWFsIG9wdGlvbiB0byBhIHBhcnRpY3VsYXIKK3ZhbHVlLCB5b3UgbWF5IHNwZWNpZnkgaXQgYWZ0ZXIgdGhlIFxmQlwtbWNwdVxmUiBvcHRpb24sIGxpa2UKK1wmXGZCXC1tY3B1PTk3MCBcLW1ub1wtYWx0aXZlY1xmUi4KKy5TcAorT24gXHMtMUFJWFxzMCwgdGhlIFxmQlwtbWFsdGl2ZWNcZlIgYW5kIFxmQlwtbXBvd2VycGM2NFxmUiBvcHRpb25zIGFyZQorbm90IGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgdGhlIFxmQlwtbWNwdVxmUiBvcHRpb24gYXQgcHJlc2VudCBiZWNhdXNlCitcJlxzLTFBSVhcczAgZG9lcyBub3QgaGF2ZSBmdWxsIHN1cHBvcnQgZm9yIHRoZXNlIG9wdGlvbnMuICBZb3UgbWF5IHN0aWxsCitlbmFibGUgb3IgZGlzYWJsZSB0aGVtIGluZGl2aWR1YWxseSBpZiB5b3UncmUgc3VyZSBpdCdsbCB3b3JrIGluIHlvdXIKK2Vudmlyb25tZW50LgorLklQICJcZkJcLW10dW5lPVxmUlxmSWNwdV90eXBlXGZSIiA0CisuSVggSXRlbSAiLW10dW5lPWNwdV90eXBlIgorU2V0IHRoZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIG1hY2hpbmUgdHlwZQorXCZcZkljcHVfdHlwZVxmUiwgYnV0IGRvIG5vdCBzZXQgdGhlIGFyY2hpdGVjdHVyZSB0eXBlIG9yIHJlZ2lzdGVyIHVzYWdlLAorYXMgXGZCXC1tY3B1PVxmUlxmSWNwdV90eXBlXGZSIGRvZXMuICBUaGUgc2FtZQordmFsdWVzIGZvciBcZkljcHVfdHlwZVxmUiBhcmUgdXNlZCBmb3IgXGZCXC1tdHVuZVxmUiBhcyBmb3IKK1wmXGZCXC1tY3B1XGZSLiAgSWYgYm90aCBhcmUgc3BlY2lmaWVkLCB0aGUgY29kZSBnZW5lcmF0ZWQgdXNlcyB0aGUKK2FyY2hpdGVjdHVyZSBhbmQgcmVnaXN0ZXJzIHNldCBieSBcZkJcLW1jcHVcZlIsIGJ1dCB0aGUKK3NjaGVkdWxpbmcgcGFyYW1ldGVycyBzZXQgYnkgXGZCXC1tdHVuZVxmUi4KKy5JUCAiXGZCXC1tY21vZGVsPXNtYWxsXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9c21hbGwiCitHZW5lcmF0ZSBQb3dlclBDNjQgY29kZSBmb3IgdGhlIHNtYWxsIG1vZGVsOiBUaGUgXHMtMVRPQ1xzMCBpcyBsaW1pdGVkIHRvCis2NGsuCisuSVAgIlxmQlwtbWNtb2RlbD1tZWRpdW1cZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1tZWRpdW0iCitHZW5lcmF0ZSBQb3dlclBDNjQgY29kZSBmb3IgdGhlIG1lZGl1bSBtb2RlbDogVGhlIFxzLTFUT0NcczAgYW5kIG90aGVyIHN0YXRpYworZGF0YSBtYXkgYmUgdXAgdG8gYSB0b3RhbCBvZiA0RyBpbiBzaXplLgorLklQICJcZkJcLW1jbW9kZWw9bGFyZ2VcZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1sYXJnZSIKK0dlbmVyYXRlIFBvd2VyUEM2NCBjb2RlIGZvciB0aGUgbGFyZ2UgbW9kZWw6IFRoZSBccy0xVE9DXHMwIG1heSBiZSB1cCB0byA0RworaW4gc2l6ZS4gIE90aGVyIGRhdGEgYW5kIGNvZGUgaXMgb25seSBsaW1pdGVkIGJ5IHRoZSA2NFwtYml0IGFkZHJlc3MKK3NwYWNlLgorLklQICJcZkJcLW1hbHRpdmVjXGZSIiA0CisuSVggSXRlbSAiLW1hbHRpdmVjIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWFsdGl2ZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWFsdGl2ZWMiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIEFsdGlWZWMgaW5zdHJ1Y3Rpb25zLCBhbmQgYWxzbworZW5hYmxlIHRoZSB1c2Ugb2YgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgYWxsb3cgbW9yZSBkaXJlY3QgYWNjZXNzIHRvCit0aGUgQWx0aVZlYyBpbnN0cnVjdGlvbiBzZXQuICBZb3UgbWF5IGFsc28gbmVlZCB0byBzZXQKK1wmXGZCXC1tYWJpPWFsdGl2ZWNcZlIgdG8gYWRqdXN0IHRoZSBjdXJyZW50IFxzLTFBQklcczAgd2l0aCBBbHRpVmVjIFxzLTFBQklcczAKK2VuaGFuY2VtZW50cy4KKy5JUCAiXGZCXC1tdnJzYXZlXGZSIiA0CisuSVggSXRlbSAiLW12cnNhdmUiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdnJzYXZlXGZSIiA0CisuSVggSXRlbSAiLW1uby12cnNhdmUiCisuUEQKK0dlbmVyYXRlIFxzLTFWUlNBVkVcczAgaW5zdHJ1Y3Rpb25zIHdoZW4gZ2VuZXJhdGluZyBBbHRpVmVjIGNvZGUuCisuSVAgIlxmQlwtbWdlblwtY2VsbFwtbWljcm9jb2RlXGZSIiA0CisuSVggSXRlbSAiLW1nZW4tY2VsbC1taWNyb2NvZGUiCitHZW5lcmF0ZSBDZWxsIG1pY3JvY29kZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXdhcm5cLWNlbGxcLW1pY3JvY29kZVxmUiIgNAorLklYIEl0ZW0gIi1td2Fybi1jZWxsLW1pY3JvY29kZSIKK1dhcm4gd2hlbiBhIENlbGwgbWljcm9jb2RlIGluc3RydWN0aW9uIGlzIGVtaXR0ZWQuICBBbiBleGFtcGxlCitvZiBhIENlbGwgbWljcm9jb2RlIGluc3RydWN0aW9uIGlzIGEgdmFyaWFibGUgc2hpZnQuCisuSVAgIlxmQlwtbXNlY3VyZVwtcGx0XGZSIiA0CisuSVggSXRlbSAiLW1zZWN1cmUtcGx0IgorR2VuZXJhdGUgY29kZSB0aGF0IGFsbG93cyBcZkJsZFxmUiBhbmQgXGZCbGQuc29cZlIKK3RvIGJ1aWxkIGV4ZWN1dGFibGVzIGFuZCBzaGFyZWQKK2xpYnJhcmllcyB3aXRoIG5vbi1leGVjdXRhYmxlIFxmKENXXCooQ2AucGx0XCooQydcZlIgYW5kIFxmKENXXCooQ2AuZ290XCooQydcZlIgc2VjdGlvbnMuCitUaGlzIGlzIGEgUG93ZXJQQworMzJcLWJpdCBccy0xU1lTVlxzMCBccy0xQUJJXHMwIG9wdGlvbi4KKy5JUCAiXGZCXC1tYnNzXC1wbHRcZlIiIDQKKy5JWCBJdGVtICItbWJzcy1wbHQiCitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyBhIFxzLTFCU1NcczAgXGYoQ1dcKihDYC5wbHRcKihDJ1xmUiBzZWN0aW9uIHRoYXQgXGZCbGQuc29cZlIKK2ZpbGxzIGluLCBhbmQKK3JlcXVpcmVzIFxmKENXXCooQ2AucGx0XCooQydcZlIgYW5kIFxmKENXXCooQ2AuZ290XCooQydcZlIKK3NlY3Rpb25zIHRoYXQgYXJlIGJvdGggd3JpdGFibGUgYW5kIGV4ZWN1dGFibGUuCitUaGlzIGlzIGEgUG93ZXJQQyAzMlwtYml0IFxzLTFTWVNWXHMwIFxzLTFBQklcczAgb3B0aW9uLgorLklQICJcZkJcLW1pc2VsXGZSIiA0CisuSVggSXRlbSAiLW1pc2VsIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWlzZWxcZlIiIDQKKy5JWCBJdGVtICItbW5vLWlzZWwiCisuUEQKK1RoaXMgc3dpdGNoIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgXHMtMUlTRUxcczAgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1pc2VsPVxmUlxmSXllcy9ub1xmUiIgNAorLklYIEl0ZW0gIi1taXNlbD15ZXMvbm8iCitUaGlzIHN3aXRjaCBoYXMgYmVlbiBkZXByZWNhdGVkLiAgVXNlIFxmQlwtbWlzZWxcZlIgYW5kCitcJlxmQlwtbW5vXC1pc2VsXGZSIGluc3RlYWQuCisuSVAgIlxmQlwtbXNwZVxmUiIgNAorLklYIEl0ZW0gIi1tc3BlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNwZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3BlIgorLlBECitUaGlzIHN3aXRjaCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIFxzLTFTUEVcczAgc2ltZAoraW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1wYWlyZWRcZlIiIDQKKy5JWCBJdGVtICItbXBhaXJlZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1wYWlyZWRcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBhaXJlZCIKKy5QRAorVGhpcyBzd2l0Y2ggZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBccy0xUEFJUkVEXHMwIHNpbWQKK2luc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tc3BlPVxmUlxmSXllcy9ub1xmUiIgNAorLklYIEl0ZW0gIi1tc3BlPXllcy9ubyIKK1RoaXMgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBVc2UgXGZCXC1tc3BlXGZSIGFuZAorXCZcZkJcLW1ub1wtc3BlXGZSIGluc3RlYWQuCisuSVAgIlxmQlwtbXZzeFxmUiIgNAorLklYIEl0ZW0gIi1tdnN4IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXZzeFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tdnN4IgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB2ZWN0b3Ivc2NhbGFyIChccy0xVlNYXHMwKQoraW5zdHJ1Y3Rpb25zLCBhbmQgYWxzbyBlbmFibGUgdGhlIHVzZSBvZiBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBhbGxvdworbW9yZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBccy0xVlNYXHMwIGluc3RydWN0aW9uIHNldC4KKy5JUCAiXGZCXC1tZmxvYXRcLWdwcnM9XGZSXGZJeWVzL3NpbmdsZS9kb3VibGUvbm9cZlIiIDQKKy5JWCBJdGVtICItbWZsb2F0LWdwcnM9eWVzL3NpbmdsZS9kb3VibGUvbm8iCisuUEQgMAorLklQICJcZkJcLW1mbG9hdFwtZ3Byc1xmUiIgNAorLklYIEl0ZW0gIi1tZmxvYXQtZ3BycyIKKy5QRAorVGhpcyBzd2l0Y2ggZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiBmbG9hdGluZy1wb2ludAorb3BlcmF0aW9ucyBvbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0CitzdXBwb3J0IGl0LgorLlNwCitUaGUgYXJndW1lbnQgXGZJeWVzXGZSIG9yIFxmSXNpbmdsZVxmUiBlbmFibGVzIHRoZSB1c2Ugb2YKK3NpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucy4KKy5TcAorVGhlIGFyZ3VtZW50IFxmSWRvdWJsZVxmUiBlbmFibGVzIHRoZSB1c2Ugb2Ygc2luZ2xlIGFuZAorZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLgorLlNwCitUaGUgYXJndW1lbnQgXGZJbm9cZlIgZGlzYWJsZXMgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBvbiB0aGUKK2dlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgTVBDODU0eC4KKy5JUCAiXGZCXC1tMzJcZlIiIDQKKy5JWCBJdGVtICItbTMyIgorLlBEIDAKKy5JUCAiXGZCXC1tNjRcZlIiIDQKKy5JWCBJdGVtICItbTY0IgorLlBECitHZW5lcmF0ZSBjb2RlIGZvciAzMlwtYml0IG9yIDY0XC1iaXQgZW52aXJvbm1lbnRzIG9mIERhcndpbiBhbmQgXHMtMVNWUjRcczAKK3RhcmdldHMgKGluY2x1ZGluZyBHTlUvTGludXgpLiAgVGhlIDMyXC1iaXQgZW52aXJvbm1lbnQgc2V0cyBpbnQsIGxvbmcKK2FuZCBwb2ludGVyIHRvIDMyIGJpdHMgYW5kIGdlbmVyYXRlcyBjb2RlIHRoYXQgcnVucyBvbiBhbnkgUG93ZXJQQwordmFyaWFudC4gIFRoZSA2NFwtYml0IGVudmlyb25tZW50IHNldHMgaW50IHRvIDMyIGJpdHMgYW5kIGxvbmcgYW5kCitwb2ludGVyIHRvIDY0IGJpdHMsIGFuZCBnZW5lcmF0ZXMgY29kZSBmb3IgUG93ZXJQQzY0LCBhcyBmb3IKK1wmXGZCXC1tcG93ZXJwYzY0XGZSLgorLklQICJcZkJcLW1mdWxsXC10b2NcZlIiIDQKKy5JWCBJdGVtICItbWZ1bGwtdG9jIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZwXC1pblwtdG9jXGZSIiA0CisuSVggSXRlbSAiLW1uby1mcC1pbi10b2MiCisuSVAgIlxmQlwtbW5vXC1zdW1cLWluXC10b2NcZlIiIDQKKy5JWCBJdGVtICItbW5vLXN1bS1pbi10b2MiCisuSVAgIlxmQlwtbW1pbmltYWxcLXRvY1xmUiIgNAorLklYIEl0ZW0gIi1tbWluaW1hbC10b2MiCisuUEQKK01vZGlmeSBnZW5lcmF0aW9uIG9mIHRoZSBccy0xVE9DXHMwIChUYWJsZSBPZiBDb250ZW50cyksIHdoaWNoIGlzIGNyZWF0ZWQgZm9yCitldmVyeSBleGVjdXRhYmxlIGZpbGUuICBUaGUgXGZCXC1tZnVsbFwtdG9jXGZSIG9wdGlvbiBpcyBzZWxlY3RlZCBieQorZGVmYXVsdC4gIEluIHRoYXQgY2FzZSwgXHMtMUdDQ1xzMCBhbGxvY2F0ZXMgYXQgbGVhc3Qgb25lIFxzLTFUT0NcczAgZW50cnkgZm9yCitlYWNoIHVuaXF1ZSBub24tYXV0b21hdGljIHZhcmlhYmxlIHJlZmVyZW5jZSBpbiB5b3VyIHByb2dyYW0uICBccy0xR0NDXHMwCithbHNvIHBsYWNlcyBmbG9hdGluZy1wb2ludCBjb25zdGFudHMgaW4gdGhlIFxzLTFUT0NcczAuICBIb3dldmVyLCBvbmx5CisxNiwzODQgZW50cmllcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBccy0xVE9DXHMwLgorLlNwCitJZiB5b3UgcmVjZWl2ZSBhIGxpbmtlciBlcnJvciBtZXNzYWdlIHRoYXQgc2F5aW5nIHlvdSBoYXZlIG92ZXJmbG93ZWQKK3RoZSBhdmFpbGFibGUgXHMtMVRPQ1xzMCBzcGFjZSwgeW91IGNhbiByZWR1Y2UgdGhlIGFtb3VudCBvZiBccy0xVE9DXHMwIHNwYWNlIHVzZWQKK3dpdGggdGhlIFxmQlwtbW5vXC1mcFwtaW5cLXRvY1xmUiBhbmQgXGZCXC1tbm9cLXN1bVwtaW5cLXRvY1xmUiBvcHRpb25zLgorXCZcZkJcLW1ub1wtZnBcLWluXC10b2NcZlIgcHJldmVudHMgXHMtMUdDQ1xzMCBmcm9tIHB1dHRpbmcgZmxvYXRpbmctcG9pbnQKK2NvbnN0YW50cyBpbiB0aGUgXHMtMVRPQ1xzMCBhbmQgXGZCXC1tbm9cLXN1bVwtaW5cLXRvY1xmUiBmb3JjZXMgXHMtMUdDQ1xzMCB0bworZ2VuZXJhdGUgY29kZSB0byBjYWxjdWxhdGUgdGhlIHN1bSBvZiBhbiBhZGRyZXNzIGFuZCBhIGNvbnN0YW50IGF0CitydW4gdGltZSBpbnN0ZWFkIG9mIHB1dHRpbmcgdGhhdCBzdW0gaW50byB0aGUgXHMtMVRPQ1xzMC4gIFlvdSBtYXkgc3BlY2lmeSBvbmUKK29yIGJvdGggb2YgdGhlc2Ugb3B0aW9ucy4gIEVhY2ggY2F1c2VzIFxzLTFHQ0NcczAgdG8gcHJvZHVjZSB2ZXJ5IHNsaWdodGx5CitzbG93ZXIgYW5kIGxhcmdlciBjb2RlIGF0IHRoZSBleHBlbnNlIG9mIGNvbnNlcnZpbmcgXHMtMVRPQ1xzMCBzcGFjZS4KKy5TcAorSWYgeW91IHN0aWxsIHJ1biBvdXQgb2Ygc3BhY2UgaW4gdGhlIFxzLTFUT0NcczAgZXZlbiB3aGVuIHlvdSBzcGVjaWZ5IGJvdGggb2YKK3RoZXNlIG9wdGlvbnMsIHNwZWNpZnkgXGZCXC1tbWluaW1hbFwtdG9jXGZSIGluc3RlYWQuICBUaGlzIG9wdGlvbiBjYXVzZXMKK1wmXHMtMUdDQ1xzMCB0byBtYWtlIG9ubHkgb25lIFxzLTFUT0NcczAgZW50cnkgZm9yIGV2ZXJ5IGZpbGUuICBXaGVuIHlvdSBzcGVjaWZ5IHRoaXMKK29wdGlvbiwgXHMtMUdDQ1xzMCBwcm9kdWNlcyBjb2RlIHRoYXQgaXMgc2xvd2VyIGFuZCBsYXJnZXIgYnV0IHdoaWNoCit1c2VzIGV4dHJlbWVseSBsaXR0bGUgXHMtMVRPQ1xzMCBzcGFjZS4gIFlvdSBtYXkgd2lzaCB0byB1c2UgdGhpcyBvcHRpb24KK29ubHkgb24gZmlsZXMgdGhhdCBjb250YWluIGxlc3MgZnJlcXVlbnRseS1leGVjdXRlZCBjb2RlLgorLklQICJcZkJcLW1haXg2NFxmUiIgNAorLklYIEl0ZW0gIi1tYWl4NjQiCisuUEQgMAorLklQICJcZkJcLW1haXgzMlxmUiIgNAorLklYIEl0ZW0gIi1tYWl4MzIiCisuUEQKK0VuYWJsZSA2NFwtYml0IFxzLTFBSVhcczAgXHMtMUFCSVxzMCBhbmQgY2FsbGluZyBjb252ZW50aW9uOiA2NFwtYml0IHBvaW50ZXJzLCA2NFwtYml0CitcJlxmKENXXCooQ2Bsb25nXCooQydcZlIgdHlwZSwgYW5kIHRoZSBpbmZyYXN0cnVjdHVyZSBuZWVkZWQgdG8gc3VwcG9ydCB0aGVtLgorU3BlY2lmeWluZyBcZkJcLW1haXg2NFxmUiBpbXBsaWVzIFxmQlwtbXBvd2VycGM2NFxmUiwKK3doaWxlIFxmQlwtbWFpeDMyXGZSIGRpc2FibGVzIHRoZSA2NFwtYml0IFxzLTFBQklcczAgYW5kCitpbXBsaWVzIFxmQlwtbW5vXC1wb3dlcnBjNjRcZlIuICBccy0xR0NDXHMwIGRlZmF1bHRzIHRvIFxmQlwtbWFpeDMyXGZSLgorLklQICJcZkJcLW14bFwtY29tcGF0XGZSIiA0CisuSVggSXRlbSAiLW14bC1jb21wYXQiCisuUEQgMAorLklQICJcZkJcLW1ub1wteGxcLWNvbXBhdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8teGwtY29tcGF0IgorLlBECitQcm9kdWNlIGNvZGUgdGhhdCBjb25mb3JtcyBtb3JlIGNsb3NlbHkgdG8gXHMtMUlCTVxzMCBccy0xWExcczAgY29tcGlsZXIgc2VtYW50aWNzCit3aGVuIHVzaW5nIEFJWC1jb21wYXRpYmxlIFxzLTFBQklcczAuICBQYXNzIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cyB0bworcHJvdG90eXBlZCBmdW5jdGlvbnMgYmV5b25kIHRoZSByZWdpc3RlciBzYXZlIGFyZWEgKFxzLTFSU0FcczApIG9uIHRoZSBzdGFjaworaW4gYWRkaXRpb24gdG8gYXJndW1lbnQgRlBScy4gIERvIG5vdCBhc3N1bWUgdGhhdCBtb3N0IHNpZ25pZmljYW50Citkb3VibGUgaW4gMTI4XC1iaXQgbG9uZyBkb3VibGUgdmFsdWUgaXMgcHJvcGVybHkgcm91bmRlZCB3aGVuIGNvbXBhcmluZwordmFsdWVzIGFuZCBjb252ZXJ0aW5nIHRvIGRvdWJsZS4gIFVzZSBccy0xWExcczAgc3ltYm9sIG5hbWVzIGZvciBsb25nIGRvdWJsZQorc3VwcG9ydCByb3V0aW5lcy4KKy5TcAorVGhlIFxzLTFBSVhcczAgY2FsbGluZyBjb252ZW50aW9uIHdhcyBleHRlbmRlZCBidXQgbm90IGluaXRpYWxseSBkb2N1bWVudGVkIHRvCitoYW5kbGUgYW4gb2JzY3VyZSBLJlIgQyBjYXNlIG9mIGNhbGxpbmcgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZQorYWRkcmVzcyBvZiBpdHMgYXJndW1lbnRzIHdpdGggZmV3ZXIgYXJndW1lbnRzIHRoYW4gZGVjbGFyZWQuICBccy0xSUJNXHMwIFxzLTFYTFxzMAorY29tcGlsZXJzIGFjY2VzcyBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMgdGhhdCBkbyBub3QgZml0IGluIHRoZQorXCZccy0xUlNBXHMwIGZyb20gdGhlIHN0YWNrIHdoZW4gYSBzdWJyb3V0aW5lIGlzIGNvbXBpbGVkIHdpdGhvdXQKK29wdGltaXphdGlvbi4gIEJlY2F1c2UgYWx3YXlzIHN0b3JpbmcgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzIG9uIHRoZQorc3RhY2sgaXMgaW5lZmZpY2llbnQgYW5kIHJhcmVseSBuZWVkZWQsIHRoaXMgb3B0aW9uIGlzIG5vdCBlbmFibGVkIGJ5CitkZWZhdWx0IGFuZCBvbmx5IGlzIG5lY2Vzc2FyeSB3aGVuIGNhbGxpbmcgc3Vicm91dGluZXMgY29tcGlsZWQgYnkgXHMtMUlCTVxzMAorXCZccy0xWExcczAgY29tcGlsZXJzIHdpdGhvdXQgb3B0aW1pemF0aW9uLgorLklQICJcZkJcLW1wZVxmUiIgNAorLklYIEl0ZW0gIi1tcGUiCitTdXBwb3J0IFxmSVxzLTFJQk1cczAgXHMtMVJTLzYwMDBcczAgXHMtMVNQXHMwXGZSIFxmSVBhcmFsbGVsIEVudmlyb25tZW50XGZSIChccy0xUEVcczApLiAgTGluayBhbgorYXBwbGljYXRpb24gd3JpdHRlbiB0byB1c2UgbWVzc2FnZSBwYXNzaW5nIHdpdGggc3BlY2lhbCBzdGFydHVwIGNvZGUgdG8KK2VuYWJsZSB0aGUgYXBwbGljYXRpb24gdG8gcnVuLiAgVGhlIHN5c3RlbSBtdXN0IGhhdmUgXHMtMVBFXHMwIGluc3RhbGxlZCBpbiB0aGUKK3N0YW5kYXJkIGxvY2F0aW9uIChcZkkvdXNyL2xwcC9wcGUucG9lL1xmUiksIG9yIHRoZSBcZklzcGVjc1xmUiBmaWxlCittdXN0IGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgXGZCXC1zcGVjcz1cZlIgb3B0aW9uIHRvIHNwZWNpZnkgdGhlCithcHByb3ByaWF0ZSBkaXJlY3RvcnkgbG9jYXRpb24uICBUaGUgUGFyYWxsZWwgRW52aXJvbm1lbnQgZG9lcyBub3QKK3N1cHBvcnQgdGhyZWFkcywgc28gdGhlIFxmQlwtbXBlXGZSIG9wdGlvbiBhbmQgdGhlIFxmQlwtcHRocmVhZFxmUgorb3B0aW9uIGFyZSBpbmNvbXBhdGlibGUuCisuSVAgIlxmQlwtbWFsaWduXC1uYXR1cmFsXGZSIiA0CisuSVggSXRlbSAiLW1hbGlnbi1uYXR1cmFsIgorLlBEIDAKKy5JUCAiXGZCXC1tYWxpZ25cLXBvd2VyXGZSIiA0CisuSVggSXRlbSAiLW1hbGlnbi1wb3dlciIKKy5QRAorT24gXHMtMUFJWFxzMCwgMzJcLWJpdCBEYXJ3aW4sIGFuZCA2NFwtYml0IFBvd2VyUEMgR05VL0xpbnV4LCB0aGUgb3B0aW9uCitcJlxmQlwtbWFsaWduXC1uYXR1cmFsXGZSIG92ZXJyaWRlcyB0aGUgQUJJLWRlZmluZWQgYWxpZ25tZW50IG9mIGxhcmdlcgordHlwZXMsIHN1Y2ggYXMgZmxvYXRpbmctcG9pbnQgZG91Ymxlcywgb24gdGhlaXIgbmF0dXJhbCBzaXplLWJhc2VkIGJvdW5kYXJ5LgorVGhlIG9wdGlvbiBcZkJcLW1hbGlnblwtcG93ZXJcZlIgaW5zdHJ1Y3RzIFxzLTFHQ0NcczAgdG8gZm9sbG93IHRoZSBBQkktc3BlY2lmaWVkCithbGlnbm1lbnQgcnVsZXMuICBccy0xR0NDXHMwIGRlZmF1bHRzIHRvIHRoZSBzdGFuZGFyZCBhbGlnbm1lbnQgZGVmaW5lZCBpbiB0aGUgXHMtMUFCSVxzMC4KKy5TcAorT24gNjRcLWJpdCBEYXJ3aW4sIG5hdHVyYWwgYWxpZ25tZW50IGlzIHRoZSBkZWZhdWx0LCBhbmQgXGZCXC1tYWxpZ25cLXBvd2VyXGZSCitpcyBub3Qgc3VwcG9ydGVkLgorLklQICJcZkJcLW1zb2Z0XC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1mbG9hdCIKKy5QRCAwCisuSVAgIlxmQlwtbWhhcmRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWZsb2F0IgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgZG9lcyBub3QgdXNlICh1c2VzKSB0aGUgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0LgorU29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZW11bGF0aW9uIGlzIHByb3ZpZGVkIGlmIHlvdSB1c2UgdGhlCitcJlxmQlwtbXNvZnRcLWZsb2F0XGZSIG9wdGlvbiwgYW5kIHBhc3MgdGhlIG9wdGlvbiB0byBccy0xR0NDXHMwIHdoZW4gbGlua2luZy4KKy5JUCAiXGZCXC1tc2luZ2xlXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc2luZ2xlLWZsb2F0IgorLlBEIDAKKy5JUCAiXGZCXC1tZG91YmxlXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tZG91YmxlLWZsb2F0IgorLlBECitHZW5lcmF0ZSBjb2RlIGZvciBzaW5nbGVcLSBvciBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuCitcJlxmQlwtbWRvdWJsZVwtZmxvYXRcZlIgaW1wbGllcyBcZkJcLW1zaW5nbGVcLWZsb2F0XGZSLgorLklQICJcZkJcLW1zaW1wbGVcLWZwdVxmUiIgNAorLklYIEl0ZW0gIi1tc2ltcGxlLWZwdSIKK0RvIG5vdCBnZW5lcmF0ZSBcZihDV1wqKENgc3FydFwqKEMnXGZSIGFuZCBcZihDV1wqKENgZGl2XCooQydcZlIgaW5zdHJ1Y3Rpb25zIGZvciBoYXJkd2FyZQorZmxvYXRpbmctcG9pbnQgdW5pdC4KKy5JUCAiXGZCXC1tZnB1PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWZwdT1uYW1lIgorU3BlY2lmeSB0eXBlIG9mIGZsb2F0aW5nLXBvaW50IHVuaXQuICBWYWxpZCB2YWx1ZXMgZm9yIFxmSW5hbWVcZlIgYXJlCitcJlxmQnNwX2xpdGVcZlIgKGVxdWl2YWxlbnQgdG8gXGZCXC1tc2luZ2xlXC1mbG9hdCBcLW1zaW1wbGVcLWZwdVxmUiksCitcJlxmQmRwX2xpdGVcZlIgKGVxdWl2YWxlbnQgdG8gXGZCXC1tZG91YmxlXC1mbG9hdCBcLW1zaW1wbGVcLWZwdVxmUiksCitcJlxmQnNwX2Z1bGxcZlIgKGVxdWl2YWxlbnQgdG8gXGZCXC1tc2luZ2xlXC1mbG9hdFxmUiksCithbmQgXGZCZHBfZnVsbFxmUiAoZXF1aXZhbGVudCB0byBcZkJcLW1kb3VibGVcLWZsb2F0XGZSKS4KKy5JUCAiXGZCXC1teGlsaW54XC1mcHVcZlIiIDQKKy5JWCBJdGVtICItbXhpbGlueC1mcHUiCitQZXJmb3JtIG9wdGltaXphdGlvbnMgZm9yIHRoZSBmbG9hdGluZy1wb2ludCB1bml0IG9uIFhpbGlueCBccy0xUFBDXHMwIDQwNS80NDAuCisuSVAgIlxmQlwtbW11bHRpcGxlXGZSIiA0CisuSVggSXRlbSAiLW1tdWx0aXBsZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1tdWx0aXBsZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tbXVsdGlwbGUiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBsb2FkIG11bHRpcGxlIHdvcmQKK2luc3RydWN0aW9ucyBhbmQgdGhlIHN0b3JlIG11bHRpcGxlIHdvcmQgaW5zdHJ1Y3Rpb25zLiAgVGhlc2UKK2luc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgb24gXHMtMVBPV0VSXHMwIHN5c3RlbXMsIGFuZCBub3QKK2dlbmVyYXRlZCBvbiBQb3dlclBDIHN5c3RlbXMuICBEbyBub3QgdXNlIFxmQlwtbW11bHRpcGxlXGZSIG9uIGxpdHRsZS1lbmRpYW4KK1Bvd2VyUEMgc3lzdGVtcywgc2luY2UgdGhvc2UgaW5zdHJ1Y3Rpb25zIGRvIG5vdCB3b3JrIHdoZW4gdGhlCitwcm9jZXNzb3IgaXMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLiAgVGhlIGV4Y2VwdGlvbnMgYXJlIFxzLTFQUEM3NDBcczAgYW5kCitcJlxzLTFQUEM3NTBcczAgd2hpY2ggcGVybWl0IHRoZXNlIGluc3RydWN0aW9ucyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuCisuSVAgIlxmQlwtbXN0cmluZ1xmUiIgNAorLklYIEl0ZW0gIi1tc3RyaW5nIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXN0cmluZ1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3RyaW5nIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgbG9hZCBzdHJpbmcgaW5zdHJ1Y3Rpb25zCithbmQgdGhlIHN0b3JlIHN0cmluZyB3b3JkIGluc3RydWN0aW9ucyB0byBzYXZlIG11bHRpcGxlIHJlZ2lzdGVycyBhbmQKK2RvIHNtYWxsIGJsb2NrIG1vdmVzLiAgVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBvbgorXCZccy0xUE9XRVJcczAgc3lzdGVtcywgYW5kIG5vdCBnZW5lcmF0ZWQgb24gUG93ZXJQQyBzeXN0ZW1zLiAgRG8gbm90IHVzZQorXCZcZkJcLW1zdHJpbmdcZlIgb24gbGl0dGxlLWVuZGlhbiBQb3dlclBDIHN5c3RlbXMsIHNpbmNlIHRob3NlCitpbnN0cnVjdGlvbnMgZG8gbm90IHdvcmsgd2hlbiB0aGUgcHJvY2Vzc29yIGlzIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4KK1RoZSBleGNlcHRpb25zIGFyZSBccy0xUFBDNzQwXHMwIGFuZCBccy0xUFBDNzUwXHMwIHdoaWNoIHBlcm1pdCB0aGVzZSBpbnN0cnVjdGlvbnMKK2luIGxpdHRsZS1lbmRpYW4gbW9kZS4KKy5JUCAiXGZCXC1tdXBkYXRlXGZSIiA0CisuSVggSXRlbSAiLW11cGRhdGUiCisuUEQgMAorLklQICJcZkJcLW1ub1wtdXBkYXRlXGZSIiA0CisuSVggSXRlbSAiLW1uby11cGRhdGUiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBsb2FkIG9yIHN0b3JlIGluc3RydWN0aW9ucwordGhhdCB1cGRhdGUgdGhlIGJhc2UgcmVnaXN0ZXIgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGNhbGN1bGF0ZWQgbWVtb3J5Citsb2NhdGlvbi4gIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQuICBJZiB5b3UgdXNlCitcJlxmQlwtbW5vXC11cGRhdGVcZlIsIHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGJldHdlZW4gdGhlIHRpbWUgdGhhdCB0aGUKK3N0YWNrIHBvaW50ZXIgaXMgdXBkYXRlZCBhbmQgdGhlIGFkZHJlc3Mgb2YgdGhlIHByZXZpb3VzIGZyYW1lIGlzCitzdG9yZWQsIHdoaWNoIG1lYW5zIGNvZGUgdGhhdCB3YWxrcyB0aGUgc3RhY2sgZnJhbWUgYWNyb3NzIGludGVycnVwdHMgb3IKK3NpZ25hbHMgbWF5IGdldCBjb3JydXB0ZWQgZGF0YS4KKy5JUCAiXGZCXC1tYXZvaWRcLWluZGV4ZWRcLWFkZHJlc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi1tYXZvaWQtaW5kZXhlZC1hZGRyZXNzZXMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtYXZvaWRcLWluZGV4ZWRcLWFkZHJlc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tYXZvaWQtaW5kZXhlZC1hZGRyZXNzZXMiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCB0cmllcyB0byBhdm9pZCAobm90IGF2b2lkKSB0aGUgdXNlIG9mIGluZGV4ZWQgbG9hZAorb3Igc3RvcmUgaW5zdHJ1Y3Rpb25zLiBUaGVzZSBpbnN0cnVjdGlvbnMgY2FuIGluY3VyIGEgcGVyZm9ybWFuY2UKK3BlbmFsdHkgb24gUG93ZXI2IHByb2Nlc3NvcnMgaW4gY2VydGFpbiBzaXR1YXRpb25zLCBzdWNoIGFzIHdoZW4KK3N0ZXBwaW5nIHRocm91Z2ggbGFyZ2UgYXJyYXlzIHRoYXQgY3Jvc3MgYSAxNk0gYm91bmRhcnkuICBUaGlzIG9wdGlvbgoraXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gdGFyZ2V0aW5nIFBvd2VyNiBhbmQgZGlzYWJsZWQgb3RoZXJ3aXNlLgorLklQICJcZkJcLW1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tZnVzZWQtbWFkZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnVzZWQtbWFkZCIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGZsb2F0aW5nLXBvaW50IG11bHRpcGx5IGFuZAorYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMuICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0CitpZiBoYXJkd2FyZSBmbG9hdGluZyBwb2ludCBpcyB1c2VkLiAgVGhlIG1hY2hpbmUtZGVwZW5kZW50CitcJlxmQlwtbWZ1c2VkXC1tYWRkXGZSIG9wdGlvbiBpcyBub3cgbWFwcGVkIHRvIHRoZSBtYWNoaW5lLWluZGVwZW5kZW50CitcJlxmQlwtZmZwXC1jb250cmFjdD1mYXN0XGZSIG9wdGlvbiwgYW5kIFxmQlwtbW5vXC1mdXNlZFwtbWFkZFxmUiBpcworbWFwcGVkIHRvIFxmQlwtZmZwXC1jb250cmFjdD1vZmZcZlIuCisuSVAgIlxmQlwtbW11bGh3XGZSIiA0CisuSVggSXRlbSAiLW1tdWxodyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1tdWxod1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tbXVsaHciCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBoYWxmLXdvcmQgbXVsdGlwbHkgYW5kCittdWx0aXBseS1hY2N1bXVsYXRlIGluc3RydWN0aW9ucyBvbiB0aGUgXHMtMUlCTVxzMCA0MDUsIDQ0MCwgNDY0IGFuZCA0NzYgcHJvY2Vzc29ycy4KK1RoZXNlIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgd2hlbiB0YXJnZXRpbmcgdGhvc2UKK3Byb2Nlc3NvcnMuCisuSVAgIlxmQlwtbWRsbXpiXGZSIiA0CisuSVggSXRlbSAiLW1kbG16YiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1kbG16YlxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZGxtemIiCisuUEQKK0dlbmVyYXRlIGNvZGUgdGhhdCB1c2VzIChkb2VzIG5vdCB1c2UpIHRoZSBzdHJpbmctc2VhcmNoIFxmQmRsbXpiXGZSCitpbnN0cnVjdGlvbiBvbiB0aGUgXHMtMUlCTVxzMCA0MDUsIDQ0MCwgNDY0IGFuZCA0NzYgcHJvY2Vzc29ycy4gIFRoaXMgaW5zdHJ1Y3Rpb24gaXMKK2dlbmVyYXRlZCBieSBkZWZhdWx0IHdoZW4gdGFyZ2V0aW5nIHRob3NlIHByb2Nlc3NvcnMuCisuSVAgIlxmQlwtbW5vXC1iaXRcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1uby1iaXQtYWxpZ24iCisuUEQgMAorLklQICJcZkJcLW1iaXRcLWFsaWduXGZSIiA0CisuSVggSXRlbSAiLW1iaXQtYWxpZ24iCisuUEQKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBkbyBub3QgKGRvKSBmb3JjZSBzdHJ1Y3R1cmVzCithbmQgdW5pb25zIHRoYXQgY29udGFpbiBiaXQtZmllbGRzIHRvIGJlIGFsaWduZWQgdG8gdGhlIGJhc2UgdHlwZSBvZiB0aGUKK2JpdC1maWVsZC4KKy5TcAorRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBub3RoaW5nIGJ1dCA4CitcJlxmKENXXCooQ2B1bnNpZ25lZFwqKEMnXGZSIGJpdC1maWVsZHMgb2YgbGVuZ3RoIDEgaXMgYWxpZ25lZCB0byBhIDRcLWJ5dGUKK2JvdW5kYXJ5IGFuZCBoYXMgYSBzaXplIG9mIDQgYnl0ZXMuICBCeSB1c2luZyBcZkJcLW1ub1wtYml0XC1hbGlnblxmUiwKK3RoZSBzdHJ1Y3R1cmUgaXMgYWxpZ25lZCB0byBhIDFcLWJ5dGUgYm91bmRhcnkgYW5kIGlzIDEgYnl0ZSBpbgorc2l6ZS4KKy5JUCAiXGZCXC1tbm9cLXN0cmljdFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbW5vLXN0cmljdC1hbGlnbiIKKy5QRCAwCisuSVAgIlxmQlwtbXN0cmljdFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbXN0cmljdC1hbGlnbiIKKy5QRAorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGRvIG5vdCAoZG8pIGFzc3VtZSB0aGF0Cit1bmFsaWduZWQgbWVtb3J5IHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgYnkgdGhlIHN5c3RlbS4KKy5JUCAiXGZCXC1tcmVsb2NhdGFibGVcZlIiIDQKKy5JWCBJdGVtICItbXJlbG9jYXRhYmxlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXJlbG9jYXRhYmxlXGZSIiA0CisuSVggSXRlbSAiLW1uby1yZWxvY2F0YWJsZSIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IGFsbG93cyAoZG9lcyBub3QgYWxsb3cpIGEgc3RhdGljIGV4ZWN1dGFibGUgdG8gYmUKK3JlbG9jYXRlZCB0byBhIGRpZmZlcmVudCBhZGRyZXNzIGF0IHJ1biB0aW1lLiAgQSBzaW1wbGUgZW1iZWRkZWQKK1Bvd2VyUEMgc3lzdGVtIGxvYWRlciBzaG91bGQgcmVsb2NhdGUgdGhlIGVudGlyZSBjb250ZW50cyBvZgorXCZcZihDV1wqKENgLmdvdDJcKihDJ1xmUiBhbmQgNFwtYnl0ZSBsb2NhdGlvbnMgbGlzdGVkIGluIHRoZSBcZihDV1wqKENgLmZpeHVwXCooQydcZlIgc2VjdGlvbiwKK2EgdGFibGUgb2YgMzJcLWJpdCBhZGRyZXNzZXMgZ2VuZXJhdGVkIGJ5IHRoaXMgb3B0aW9uLiAgRm9yIHRoaXMgdG8KK3dvcmssIGFsbCBvYmplY3RzIGxpbmtlZCB0b2dldGhlciBtdXN0IGJlIGNvbXBpbGVkIHdpdGgKK1wmXGZCXC1tcmVsb2NhdGFibGVcZlIgb3IgXGZCXC1tcmVsb2NhdGFibGVcLWxpYlxmUi4KK1wmXGZCXC1tcmVsb2NhdGFibGVcZlIgY29kZSBhbGlnbnMgdGhlIHN0YWNrIHRvIGFuIDhcLWJ5dGUgYm91bmRhcnkuCisuSVAgIlxmQlwtbXJlbG9jYXRhYmxlXC1saWJcZlIiIDQKKy5JWCBJdGVtICItbXJlbG9jYXRhYmxlLWxpYiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWxvY2F0YWJsZVwtbGliXGZSIiA0CisuSVggSXRlbSAiLW1uby1yZWxvY2F0YWJsZS1saWIiCisuUEQKK0xpa2UgXGZCXC1tcmVsb2NhdGFibGVcZlIsIFxmQlwtbXJlbG9jYXRhYmxlXC1saWJcZlIgZ2VuZXJhdGVzIGEKK1wmXGYoQ1dcKihDYC5maXh1cFwqKEMnXGZSIHNlY3Rpb24gdG8gYWxsb3cgc3RhdGljIGV4ZWN1dGFibGVzIHRvIGJlIHJlbG9jYXRlZCBhdAorcnVuIHRpbWUsIGJ1dCBcZkJcLW1yZWxvY2F0YWJsZVwtbGliXGZSIGRvZXMgbm90IHVzZSB0aGUgc21hbGxlciBzdGFjaworYWxpZ25tZW50IG9mIFxmQlwtbXJlbG9jYXRhYmxlXGZSLiAgT2JqZWN0cyBjb21waWxlZCB3aXRoCitcJlxmQlwtbXJlbG9jYXRhYmxlXC1saWJcZlIgbWF5IGJlIGxpbmtlZCB3aXRoIG9iamVjdHMgY29tcGlsZWQgd2l0aAorYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBcZkJcLW1yZWxvY2F0YWJsZVxmUiBvcHRpb25zLgorLklQICJcZkJcLW1ub1wtdG9jXGZSIiA0CisuSVggSXRlbSAiLW1uby10b2MiCisuUEQgMAorLklQICJcZkJcLW10b2NcZlIiIDQKKy5JWCBJdGVtICItbXRvYyIKKy5QRAorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGRvIG5vdCAoZG8pIGFzc3VtZSB0aGF0CityZWdpc3RlciAyIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIGdsb2JhbCBhcmVhIHBvaW50aW5nIHRvIHRoZSBhZGRyZXNzZXMKK3VzZWQgaW4gdGhlIHByb2dyYW0uCisuSVAgIlxmQlwtbWxpdHRsZVxmUiIgNAorLklYIEl0ZW0gIi1tbGl0dGxlIgorLlBEIDAKKy5JUCAiXGZCXC1tbGl0dGxlXC1lbmRpYW5cZlIiIDQKKy5JWCBJdGVtICItbWxpdHRsZS1lbmRpYW4iCisuUEQKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBjb21waWxlIGNvZGUgZm9yIHRoZQorcHJvY2Vzc29yIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4gIFRoZSBcZkJcLW1saXR0bGVcLWVuZGlhblxmUiBvcHRpb24gaXMKK3RoZSBzYW1lIGFzIFxmQlwtbWxpdHRsZVxmUi4KKy5JUCAiXGZCXC1tYmlnXGZSIiA0CisuSVggSXRlbSAiLW1iaWciCisuUEQgMAorLklQICJcZkJcLW1iaWdcLWVuZGlhblxmUiIgNAorLklYIEl0ZW0gIi1tYmlnLWVuZGlhbiIKKy5QRAorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlCitwcm9jZXNzb3IgaW4gYmlnLWVuZGlhbiBtb2RlLiAgVGhlIFxmQlwtbWJpZ1wtZW5kaWFuXGZSIG9wdGlvbiBpcwordGhlIHNhbWUgYXMgXGZCXC1tYmlnXGZSLgorLklQICJcZkJcLW1keW5hbWljXC1ub1wtcGljXGZSIiA0CisuSVggSXRlbSAiLW1keW5hbWljLW5vLXBpYyIKK09uIERhcndpbiBhbmQgTWFjIFxzLTFPU1xzMCBYIHN5c3RlbXMsIGNvbXBpbGUgY29kZSBzbyB0aGF0IGl0IGlzIG5vdAorcmVsb2NhdGFibGUsIGJ1dCB0aGF0IGl0cyBleHRlcm5hbCByZWZlcmVuY2VzIGFyZSByZWxvY2F0YWJsZS4gIFRoZQorcmVzdWx0aW5nIGNvZGUgaXMgc3VpdGFibGUgZm9yIGFwcGxpY2F0aW9ucywgYnV0IG5vdCBzaGFyZWQKK2xpYnJhcmllcy4KKy5JUCAiXGZCXC1tc2luZ2xlXC1waWNcLWJhc2VcZlIiIDQKKy5JWCBJdGVtICItbXNpbmdsZS1waWMtYmFzZSIKK1RyZWF0IHRoZSByZWdpc3RlciB1c2VkIGZvciBccy0xUElDXHMwIGFkZHJlc3NpbmcgYXMgcmVhZC1vbmx5LCByYXRoZXIgdGhhbgorbG9hZGluZyBpdCBpbiB0aGUgcHJvbG9ndWUgZm9yIGVhY2ggZnVuY3Rpb24uICBUaGUgcnVudGltZSBzeXN0ZW0gaXMKK3Jlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhpcyByZWdpc3RlciB3aXRoIGFuIGFwcHJvcHJpYXRlIHZhbHVlCitiZWZvcmUgZXhlY3V0aW9uIGJlZ2lucy4KKy5JUCAiXGZCXC1tcHJpb3JpdGl6ZVwtcmVzdHJpY3RlZFwtaW5zbnM9XGZSXGZJcHJpb3JpdHlcZlIiIDQKKy5JWCBJdGVtICItbXByaW9yaXRpemUtcmVzdHJpY3RlZC1pbnNucz1wcmlvcml0eSIKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBwcmlvcml0eSB0aGF0IGlzIGFzc2lnbmVkIHRvCitkaXNwYXRjaC1zbG90IHJlc3RyaWN0ZWQgaW5zdHJ1Y3Rpb25zIGR1cmluZyB0aGUgc2Vjb25kIHNjaGVkdWxpbmcKK3Bhc3MuICBUaGUgYXJndW1lbnQgXGZJcHJpb3JpdHlcZlIgdGFrZXMgdGhlIHZhbHVlIFxmQjBcZlIsIFxmQjFcZlIsCitvciBcZkIyXGZSIHRvIGFzc2lnbiBubywgaGlnaGVzdCwgb3Igc2Vjb25kLWhpZ2hlc3QgKHJlc3BlY3RpdmVseSkgCitwcmlvcml0eSB0byBkaXNwYXRjaC1zbG90IHJlc3RyaWN0ZWQKK2luc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tc2NoZWRcLWNvc3RseVwtZGVwPVxmUlxmSWRlcGVuZGVuY2VfdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tc2NoZWQtY29zdGx5LWRlcD1kZXBlbmRlbmNlX3R5cGUiCitUaGlzIG9wdGlvbiBjb250cm9scyB3aGljaCBkZXBlbmRlbmNlcyBhcmUgY29uc2lkZXJlZCBjb3N0bHkKK2J5IHRoZSB0YXJnZXQgZHVyaW5nIGluc3RydWN0aW9uIHNjaGVkdWxpbmcuICBUaGUgYXJndW1lbnQKK1wmXGZJZGVwZW5kZW5jZV90eXBlXGZSIHRha2VzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5SUyA0CisuSVAgIlxmQm5vXGZSIiA0CisuSVggSXRlbSAibm8iCitObyBkZXBlbmRlbmNlIGlzIGNvc3RseS4KKy5JUCAiXGZCYWxsXGZSIiA0CisuSVggSXRlbSAiYWxsIgorQWxsIGRlcGVuZGVuY2VzIGFyZSBjb3N0bHkuCisuSVAgIlxmQnRydWVfc3RvcmVfdG9fbG9hZFxmUiIgNAorLklYIEl0ZW0gInRydWVfc3RvcmVfdG9fbG9hZCIKK0EgdHJ1ZSBkZXBlbmRlbmNlIGZyb20gc3RvcmUgdG8gbG9hZCBpcyBjb3N0bHkuCisuSVAgIlxmQnN0b3JlX3RvX2xvYWRcZlIiIDQKKy5JWCBJdGVtICJzdG9yZV90b19sb2FkIgorQW55IGRlcGVuZGVuY2UgZnJvbSBzdG9yZSB0byBsb2FkIGlzIGNvc3RseS4KKy5JUCAiXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAibnVtYmVyIgorQW55IGRlcGVuZGVuY2UgZm9yIHdoaWNoIHRoZSBsYXRlbmN5IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAKK1wmXGZJbnVtYmVyXGZSIGlzIGNvc3RseS4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW1pbnNlcnRcLXNjaGVkXC1ub3BzPVxmUlxmSXNjaGVtZVxmUiIgNAorLklYIEl0ZW0gIi1taW5zZXJ0LXNjaGVkLW5vcHM9c2NoZW1lIgorVGhpcyBvcHRpb24gY29udHJvbHMgd2hpY2ggXHMtMU5PUFxzMCBpbnNlcnRpb24gc2NoZW1lIGlzIHVzZWQgZHVyaW5nCit0aGUgc2Vjb25kIHNjaGVkdWxpbmcgcGFzcy4gIFRoZSBhcmd1bWVudCBcZklzY2hlbWVcZlIgdGFrZXMgb25lIG9mIHRoZQorZm9sbG93aW5nIHZhbHVlczoKKy5SUyA0CisuSVAgIlxmQm5vXGZSIiA0CisuSVggSXRlbSAibm8iCitEb24ndCBpbnNlcnQgTk9Qcy4KKy5JUCAiXGZCcGFkXGZSIiA0CisuSVggSXRlbSAicGFkIgorUGFkIHdpdGggTk9QcyBhbnkgZGlzcGF0Y2ggZ3JvdXAgdGhhdCBoYXMgdmFjYW50IGlzc3VlIHNsb3RzLAorYWNjb3JkaW5nIHRvIHRoZSBzY2hlZHVsZXIncyBncm91cGluZy4KKy5JUCAiXGZCcmVncm91cF9leGFjdFxmUiIgNAorLklYIEl0ZW0gInJlZ3JvdXBfZXhhY3QiCitJbnNlcnQgTk9QcyB0byBmb3JjZSBjb3N0bHkgZGVwZW5kZW50IGluc25zIGludG8KK3NlcGFyYXRlIGdyb3Vwcy4gIEluc2VydCBleGFjdGx5IGFzIG1hbnkgTk9QcyBhcyBuZWVkZWQgdG8gZm9yY2UgYW4gaW5zbgordG8gYSBuZXcgZ3JvdXAsIGFjY29yZGluZyB0byB0aGUgZXN0aW1hdGVkIHByb2Nlc3NvciBncm91cGluZy4KKy5JUCAiXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAibnVtYmVyIgorSW5zZXJ0IE5PUHMgdG8gZm9yY2UgY29zdGx5IGRlcGVuZGVudCBpbnNucyBpbnRvCitzZXBhcmF0ZSBncm91cHMuICBJbnNlcnQgXGZJbnVtYmVyXGZSIE5PUHMgdG8gZm9yY2UgYW4gaW5zbiB0byBhIG5ldyBncm91cC4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW1jYWxsXC1zeXN2XGZSIiA0CisuSVggSXRlbSAiLW1jYWxsLXN5c3YiCitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgY29tcGlsZSBjb2RlIHVzaW5nIGNhbGxpbmcKK2NvbnZlbnRpb25zIHRoYXQgYWRoZXJlIHRvIHRoZSBNYXJjaCAxOTk1IGRyYWZ0IG9mIHRoZSBTeXN0ZW0gVgorQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSwgUG93ZXJQQyBwcm9jZXNzb3Igc3VwcGxlbWVudC4gIFRoaXMgaXMgdGhlCitkZWZhdWx0IHVubGVzcyB5b3UgY29uZmlndXJlZCBccy0xR0NDXHMwIHVzaW5nIFxmQnBvd2VycGNcLSpcLWVhYmlhaXhcZlIuCisuSVAgIlxmQlwtbWNhbGxcLXN5c3ZcLWVhYmlcZlIiIDQKKy5JWCBJdGVtICItbWNhbGwtc3lzdi1lYWJpIgorLlBEIDAKKy5JUCAiXGZCXC1tY2FsbFwtZWFiaVxmUiIgNAorLklYIEl0ZW0gIi1tY2FsbC1lYWJpIgorLlBECitTcGVjaWZ5IGJvdGggXGZCXC1tY2FsbFwtc3lzdlxmUiBhbmQgXGZCXC1tZWFiaVxmUiBvcHRpb25zLgorLklQICJcZkJcLW1jYWxsXC1zeXN2XC1ub2VhYmlcZlIiIDQKKy5JWCBJdGVtICItbWNhbGwtc3lzdi1ub2VhYmkiCitTcGVjaWZ5IGJvdGggXGZCXC1tY2FsbFwtc3lzdlxmUiBhbmQgXGZCXC1tbm9cLWVhYmlcZlIgb3B0aW9ucy4KKy5JUCAiXGZCXC1tY2FsbFwtYWl4ZGVzY1xmUiIgNAorLklYIEl0ZW0gIi1tY2FsbC1haXhkZXNjIgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlIFxzLTFBSVhcczAKK29wZXJhdGluZyBzeXN0ZW0uCisuSVAgIlxmQlwtbWNhbGxcLWxpbnV4XGZSIiA0CisuSVggSXRlbSAiLW1jYWxsLWxpbnV4IgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlCitMaW51eC1iYXNlZCBccy0xR05VXHMwIHN5c3RlbS4KKy5JUCAiXGZCXC1tY2FsbFwtZnJlZWJzZFxmUiIgNAorLklYIEl0ZW0gIi1tY2FsbC1mcmVlYnNkIgorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGNvbXBpbGUgY29kZSBmb3IgdGhlCitGcmVlQlNEIG9wZXJhdGluZyBzeXN0ZW0uCisuSVAgIlxmQlwtbWNhbGxcLW5ldGJzZFxmUiIgNAorLklYIEl0ZW0gIi1tY2FsbC1uZXRic2QiCitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgY29tcGlsZSBjb2RlIGZvciB0aGUKK05ldEJTRCBvcGVyYXRpbmcgc3lzdGVtLgorLklQICJcZkJcLW1jYWxsXC1vcGVuYnNkXGZSIiA0CisuSVggSXRlbSAiLW1jYWxsLW9wZW5ic2QiCitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgY29tcGlsZSBjb2RlIGZvciB0aGUKK09wZW5CU0Qgb3BlcmF0aW5nIHN5c3RlbS4KKy5JUCAiXGZCXC1tYWl4XC1zdHJ1Y3RcLXJldHVyblxmUiIgNAorLklYIEl0ZW0gIi1tYWl4LXN0cnVjdC1yZXR1cm4iCitSZXR1cm4gYWxsIHN0cnVjdHVyZXMgaW4gbWVtb3J5IChhcyBzcGVjaWZpZWQgYnkgdGhlIFxzLTFBSVhcczAgXHMtMUFCSVxzMCkuCisuSVAgIlxmQlwtbXN2cjRcLXN0cnVjdFwtcmV0dXJuXGZSIiA0CisuSVggSXRlbSAiLW1zdnI0LXN0cnVjdC1yZXR1cm4iCitSZXR1cm4gc3RydWN0dXJlcyBzbWFsbGVyIHRoYW4gOCBieXRlcyBpbiByZWdpc3RlcnMgKGFzIHNwZWNpZmllZCBieSB0aGUKK1wmXHMtMVNWUjRcczAgXHMtMUFCSVxzMCkuCisuSVAgIlxmQlwtbWFiaT1cZlJcZklhYmktdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPWFiaS10eXBlIgorRXh0ZW5kIHRoZSBjdXJyZW50IFxzLTFBQklcczAgd2l0aCBhIHBhcnRpY3VsYXIgZXh0ZW5zaW9uLCBvciByZW1vdmUgc3VjaCBleHRlbnNpb24uCitWYWxpZCB2YWx1ZXMgYXJlIFxmSWFsdGl2ZWNcZlIsIFxmSW5vLWFsdGl2ZWNcZlIsIFxmSXNwZVxmUiwKK1wmXGZJbm8tc3BlXGZSLCBcZklpYm1sb25nZG91YmxlXGZSLCBcZklpZWVlbG9uZ2RvdWJsZVxmUi4KKy5JUCAiXGZCXC1tYWJpPXNwZVxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPXNwZSIKK0V4dGVuZCB0aGUgY3VycmVudCBccy0xQUJJXHMwIHdpdGggXHMtMVNQRVxzMCBccy0xQUJJXHMwIGV4dGVuc2lvbnMuICBUaGlzIGRvZXMgbm90IGNoYW5nZQordGhlIGRlZmF1bHQgXHMtMUFCSVxzMCwgaW5zdGVhZCBpdCBhZGRzIHRoZSBccy0xU1BFXHMwIFxzLTFBQklcczAgZXh0ZW5zaW9ucyB0byB0aGUgY3VycmVudAorXCZccy0xQUJJXHMwLgorLklQICJcZkJcLW1hYmk9bm9cLXNwZVxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPW5vLXNwZSIKK0Rpc2FibGUgQm9vay1FIFxzLTFTUEVcczAgXHMtMUFCSVxzMCBleHRlbnNpb25zIGZvciB0aGUgY3VycmVudCBccy0xQUJJXHMwLgorLklQICJcZkJcLW1hYmk9aWJtbG9uZ2RvdWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tYWJpPWlibWxvbmdkb3VibGUiCitDaGFuZ2UgdGhlIGN1cnJlbnQgXHMtMUFCSVxzMCB0byB1c2UgXHMtMUlCTVxzMCBleHRlbmRlZC1wcmVjaXNpb24gbG9uZyBkb3VibGUuCitUaGlzIGlzIGEgUG93ZXJQQyAzMlwtYml0IFxzLTFTWVNWXHMwIFxzLTFBQklcczAgb3B0aW9uLgorLklQICJcZkJcLW1hYmk9aWVlZWxvbmdkb3VibGVcZlIiIDQKKy5JWCBJdGVtICItbWFiaT1pZWVlbG9uZ2RvdWJsZSIKK0NoYW5nZSB0aGUgY3VycmVudCBccy0xQUJJXHMwIHRvIHVzZSBccy0xSUVFRVxzMCBleHRlbmRlZC1wcmVjaXNpb24gbG9uZyBkb3VibGUuCitUaGlzIGlzIGEgUG93ZXJQQyAzMlwtYml0IExpbnV4IFxzLTFBQklcczAgb3B0aW9uLgorLklQICJcZkJcLW1wcm90b3R5cGVcZlIiIDQKKy5JWCBJdGVtICItbXByb3RvdHlwZSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1wcm90b3R5cGVcZlIiIDQKKy5JWCBJdGVtICItbW5vLXByb3RvdHlwZSIKKy5QRAorT24gU3lzdGVtIFYuNCBhbmQgZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zIGFzc3VtZSB0aGF0IGFsbCBjYWxscyB0bwordmFyaWFibGUgYXJndW1lbnQgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBwcm90b3R5cGVkLiAgT3RoZXJ3aXNlLCB0aGUKK2NvbXBpbGVyIG11c3QgaW5zZXJ0IGFuIGluc3RydWN0aW9uIGJlZm9yZSBldmVyeSBub24tcHJvdG90eXBlZCBjYWxsIHRvCitzZXQgb3IgY2xlYXIgYml0IDYgb2YgdGhlIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyIChcZklccy0xQ1JcczBcZlIpIHRvCitpbmRpY2F0ZSB3aGV0aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgcGFzc2VkIGluIHRoZSBmbG9hdGluZy1wb2ludAorcmVnaXN0ZXJzIGluIGNhc2UgdGhlIGZ1bmN0aW9uIHRha2VzIHZhcmlhYmxlIGFyZ3VtZW50cy4gIFdpdGgKK1wmXGZCXC1tcHJvdG90eXBlXGZSLCBvbmx5IGNhbGxzIHRvIHByb3RvdHlwZWQgdmFyaWFibGUgYXJndW1lbnQgZnVuY3Rpb25zCitzZXQgb3IgY2xlYXIgdGhlIGJpdC4KKy5JUCAiXGZCXC1tc2ltXGZSIiA0CisuSVggSXRlbSAiLW1zaW0iCitPbiBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIGFzc3VtZSB0aGF0IHRoZSBzdGFydHVwIG1vZHVsZSBpcyBjYWxsZWQKK1wmXGZJc2ltXC1jcnQwLm9cZlIgYW5kIHRoYXQgdGhlIHN0YW5kYXJkIEMgbGlicmFyaWVzIGFyZSBcZklsaWJzaW0uYVxmUiBhbmQKK1wmXGZJbGliYy5hXGZSLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgXGZCcG93ZXJwY1wtKlwtZWFiaXNpbVxmUgorY29uZmlndXJhdGlvbnMuCisuSVAgIlxmQlwtbW12bWVcZlIiIDQKKy5JWCBJdGVtICItbW12bWUiCitPbiBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIGFzc3VtZSB0aGF0IHRoZSBzdGFydHVwIG1vZHVsZSBpcyBjYWxsZWQKK1wmXGZJY3J0MC5vXGZSIGFuZCB0aGUgc3RhbmRhcmQgQyBsaWJyYXJpZXMgYXJlIFxmSWxpYm12bWUuYVxmUiBhbmQKK1wmXGZJbGliYy5hXGZSLgorLklQICJcZkJcLW1hZHNcZlIiIDQKKy5JWCBJdGVtICItbWFkcyIKK09uIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcywgYXNzdW1lIHRoYXQgdGhlIHN0YXJ0dXAgbW9kdWxlIGlzIGNhbGxlZAorXCZcZkljcnQwLm9cZlIgYW5kIHRoZSBzdGFuZGFyZCBDIGxpYnJhcmllcyBhcmUgXGZJbGliYWRzLmFcZlIgYW5kCitcJlxmSWxpYmMuYVxmUi4KKy5JUCAiXGZCXC1teWVsbG93a25pZmVcZlIiIDQKKy5JWCBJdGVtICItbXllbGxvd2tuaWZlIgorT24gZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBhc3N1bWUgdGhhdCB0aGUgc3RhcnR1cCBtb2R1bGUgaXMgY2FsbGVkCitcJlxmSWNydDAub1xmUiBhbmQgdGhlIHN0YW5kYXJkIEMgbGlicmFyaWVzIGFyZSBcZklsaWJ5ay5hXGZSIGFuZAorXCZcZklsaWJjLmFcZlIuCisuSVAgIlxmQlwtbXZ4d29ya3NcZlIiIDQKKy5JWCBJdGVtICItbXZ4d29ya3MiCitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHNwZWNpZnkgdGhhdCB5b3UgYXJlCitjb21waWxpbmcgZm9yIGEgVnhXb3JrcyBzeXN0ZW0uCisuSVAgIlxmQlwtbWVtYlxmUiIgNAorLklYIEl0ZW0gIi1tZW1iIgorT24gZW1iZWRkZWQgUG93ZXJQQyBzeXN0ZW1zLCBzZXQgdGhlIFxmSVxzLTFQUENfRU1CXHMwXGZSIGJpdCBpbiB0aGUgXHMtMUVMRlxzMCBmbGFncworaGVhZGVyIHRvIGluZGljYXRlIHRoYXQgXGZCZWFiaVxmUiBleHRlbmRlZCByZWxvY2F0aW9ucyBhcmUgdXNlZC4KKy5JUCAiXGZCXC1tZWFiaVxmUiIgNAorLklYIEl0ZW0gIi1tZWFiaSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1lYWJpXGZSIiA0CisuSVggSXRlbSAiLW1uby1lYWJpIgorLlBECitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMgZG8gKGRvIG5vdCkgYWRoZXJlIHRvIHRoZQorRW1iZWRkZWQgQXBwbGljYXRpb25zIEJpbmFyeSBJbnRlcmZhY2UgKFxzLTFFQUJJXHMwKSwgd2hpY2ggaXMgYSBzZXQgb2YKK21vZGlmaWNhdGlvbnMgdG8gdGhlIFN5c3RlbSBWLjQgc3BlY2lmaWNhdGlvbnMuICBTZWxlY3RpbmcgXGZCXC1tZWFiaVxmUgorbWVhbnMgdGhhdCB0aGUgc3RhY2sgaXMgYWxpZ25lZCB0byBhbiA4XC1ieXRlIGJvdW5kYXJ5LCBhIGZ1bmN0aW9uCitcJlxmKENXXCooQ2BfXHxfZWFiaVwqKEMnXGZSIGlzIGNhbGxlZCBmcm9tIFxmKENXXCooQ2BtYWluXCooQydcZlIgdG8gc2V0IHVwIHRoZSBccy0xRUFCSVxzMAorZW52aXJvbm1lbnQsIGFuZCB0aGUgXGZCXC1tc2RhdGFcZlIgb3B0aW9uIGNhbiB1c2UgYm90aCBcZihDV1wqKENgcjJcKihDJ1xmUiBhbmQKK1wmXGYoQ1dcKihDYHIxM1wqKEMnXGZSIHRvIHBvaW50IHRvIHR3byBzZXBhcmF0ZSBzbWFsbCBkYXRhIGFyZWFzLiAgU2VsZWN0aW5nCitcJlxmQlwtbW5vXC1lYWJpXGZSIG1lYW5zIHRoYXQgdGhlIHN0YWNrIGlzIGFsaWduZWQgdG8gYSAxNlwtYnl0ZSBib3VuZGFyeSwKK25vIFxzLTFFQUJJXHMwIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFxmKENXXCooQ2BtYWluXCooQydcZlIsIGFuZCB0aGUKK1wmXGZCXC1tc2RhdGFcZlIgb3B0aW9uIG9ubHkgdXNlcyBcZihDV1wqKENgcjEzXCooQydcZlIgdG8gcG9pbnQgdG8gYSBzaW5nbGUKK3NtYWxsIGRhdGEgYXJlYS4gIFRoZSBcZkJcLW1lYWJpXGZSIG9wdGlvbiBpcyBvbiBieSBkZWZhdWx0IGlmIHlvdQorY29uZmlndXJlZCBccy0xR0NDXHMwIHVzaW5nIG9uZSBvZiB0aGUgXGZCcG93ZXJwYypcLSpcLWVhYmkqXGZSIG9wdGlvbnMuCisuSVAgIlxmQlwtbXNkYXRhPWVhYmlcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhPWVhYmkiCitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBzbWFsbCBpbml0aWFsaXplZAorXCZcZihDV1wqKENgY29uc3RcKihDJ1xmUiBnbG9iYWwgYW5kIHN0YXRpYyBkYXRhIGluIHRoZSBcZkIuc2RhdGEyXGZSIHNlY3Rpb24sIHdoaWNoCitpcyBwb2ludGVkIHRvIGJ5IHJlZ2lzdGVyIFxmKENXXCooQ2ByMlwqKEMnXGZSLiAgUHV0IHNtYWxsIGluaXRpYWxpemVkCitub25cLVxmKENXXCooQ2Bjb25zdFwqKEMnXGZSIGdsb2JhbCBhbmQgc3RhdGljIGRhdGEgaW4gdGhlIFxmQi5zZGF0YVxmUiBzZWN0aW9uLAord2hpY2ggaXMgcG9pbnRlZCB0byBieSByZWdpc3RlciBcZihDV1wqKENgcjEzXCooQydcZlIuICBQdXQgc21hbGwgdW5pbml0aWFsaXplZAorZ2xvYmFsIGFuZCBzdGF0aWMgZGF0YSBpbiB0aGUgXGZCLnNic3NcZlIgc2VjdGlvbiwgd2hpY2ggaXMgYWRqYWNlbnQgdG8KK3RoZSBcZkIuc2RhdGFcZlIgc2VjdGlvbi4gIFRoZSBcZkJcLW1zZGF0YT1lYWJpXGZSIG9wdGlvbiBpcworaW5jb21wYXRpYmxlIHdpdGggdGhlIFxmQlwtbXJlbG9jYXRhYmxlXGZSIG9wdGlvbi4gIFRoZQorXCZcZkJcLW1zZGF0YT1lYWJpXGZSIG9wdGlvbiBhbHNvIHNldHMgdGhlIFxmQlwtbWVtYlxmUiBvcHRpb24uCisuSVAgIlxmQlwtbXNkYXRhPXN5c3ZcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhPXN5c3YiCitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBzbWFsbCBnbG9iYWwgYW5kIHN0YXRpYworZGF0YSBpbiB0aGUgXGZCLnNkYXRhXGZSIHNlY3Rpb24sIHdoaWNoIGlzIHBvaW50ZWQgdG8gYnkgcmVnaXN0ZXIKK1wmXGYoQ1dcKihDYHIxM1wqKEMnXGZSLiAgUHV0IHNtYWxsIHVuaW5pdGlhbGl6ZWQgZ2xvYmFsIGFuZCBzdGF0aWMgZGF0YSBpbiB0aGUKK1wmXGZCLnNic3NcZlIgc2VjdGlvbiwgd2hpY2ggaXMgYWRqYWNlbnQgdG8gdGhlIFxmQi5zZGF0YVxmUiBzZWN0aW9uLgorVGhlIFxmQlwtbXNkYXRhPXN5c3ZcZlIgb3B0aW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorXCZcZkJcLW1yZWxvY2F0YWJsZVxmUiBvcHRpb24uCisuSVAgIlxmQlwtbXNkYXRhPWRlZmF1bHRcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhPWRlZmF1bHQiCisuUEQgMAorLklQICJcZkJcLW1zZGF0YVxmUiIgNAorLklYIEl0ZW0gIi1tc2RhdGEiCisuUEQKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcywgaWYgXGZCXC1tZWFiaVxmUiBpcyB1c2VkLAorY29tcGlsZSBjb2RlIHRoZSBzYW1lIGFzIFxmQlwtbXNkYXRhPWVhYmlcZlIsIG90aGVyd2lzZSBjb21waWxlIGNvZGUgdGhlCitzYW1lIGFzIFxmQlwtbXNkYXRhPXN5c3ZcZlIuCisuSVAgIlxmQlwtbXNkYXRhPWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhPWRhdGEiCitPbiBTeXN0ZW0gVi40IGFuZCBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBzbWFsbCBnbG9iYWwKK2RhdGEgaW4gdGhlIFxmQi5zZGF0YVxmUiBzZWN0aW9uLiAgUHV0IHNtYWxsIHVuaW5pdGlhbGl6ZWQgZ2xvYmFsCitkYXRhIGluIHRoZSBcZkIuc2Jzc1xmUiBzZWN0aW9uLiAgRG8gbm90IHVzZSByZWdpc3RlciBcZihDV1wqKENgcjEzXCooQydcZlIKK3RvIGFkZHJlc3Mgc21hbGwgZGF0YSBob3dldmVyLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciB1bmxlc3MKK290aGVyIFxmQlwtbXNkYXRhXGZSIG9wdGlvbnMgYXJlIHVzZWQuCisuSVAgIlxmQlwtbXNkYXRhPW5vbmVcZlIiIDQKKy5JWCBJdGVtICItbXNkYXRhPW5vbmUiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc2RhdGFcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNkYXRhIgorLlBECitPbiBlbWJlZGRlZCBQb3dlclBDIHN5c3RlbXMsIHB1dCBhbGwgaW5pdGlhbGl6ZWQgZ2xvYmFsIGFuZCBzdGF0aWMgZGF0YQoraW4gdGhlIFxmQi5kYXRhXGZSIHNlY3Rpb24sIGFuZCBhbGwgdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZQorXCZcZkIuYnNzXGZSIHNlY3Rpb24uCisuSVAgIlxmQlwtbWJsb2NrXC1tb3ZlXC1pbmxpbmVcLWxpbWl0PVxmUlxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1tYmxvY2stbW92ZS1pbmxpbmUtbGltaXQ9bnVtIgorSW5saW5lIGFsbCBibG9jayBtb3ZlcyAoc3VjaCBhcyBjYWxscyB0byBcZihDV1wqKENgbWVtY3B5XCooQydcZlIgb3Igc3RydWN0dXJlCitjb3BpZXMpIGxlc3MgdGhhbiBvciBlcXVhbCB0byBcZkludW1cZlIgYnl0ZXMuICBUaGUgbWluaW11bSB2YWx1ZSBmb3IKK1wmXGZJbnVtXGZSIGlzIDMyIGJ5dGVzIG9uIDMyXC1iaXQgdGFyZ2V0cyBhbmQgNjQgYnl0ZXMgb24gNjRcLWJpdAordGFyZ2V0cy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRhcmdldC1zcGVjaWZpYy4KKy5JUCAiXGZCXC1HXGZSIFxmSW51bVxmUiIgNAorLklYIEl0ZW0gIi1HIG51bSIKK09uIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcywgcHV0IGdsb2JhbCBhbmQgc3RhdGljIGl0ZW1zIGxlc3MgdGhhbiBvcgorZXF1YWwgdG8gXGZJbnVtXGZSIGJ5dGVzIGludG8gdGhlIHNtYWxsIGRhdGEgb3IgXHMtMUJTU1xzMCBzZWN0aW9ucyBpbnN0ZWFkIG9mCit0aGUgbm9ybWFsIGRhdGEgb3IgXHMtMUJTU1xzMCBzZWN0aW9uLiAgQnkgZGVmYXVsdCwgXGZJbnVtXGZSIGlzIDguICBUaGUKK1wmXGZCXC1HXGZSIFxmSW51bVxmUiBzd2l0Y2ggaXMgYWxzbyBwYXNzZWQgdG8gdGhlIGxpbmtlci4KK0FsbCBtb2R1bGVzIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIHRoZSBzYW1lIFxmQlwtR1xmUiBcZkludW1cZlIgdmFsdWUuCisuSVAgIlxmQlwtbXJlZ25hbWVzXGZSIiA0CisuSVggSXRlbSAiLW1yZWduYW1lcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWduYW1lc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVnbmFtZXMiCisuUEQKK09uIFN5c3RlbSBWLjQgYW5kIGVtYmVkZGVkIFBvd2VyUEMgc3lzdGVtcyBkbyAoZG8gbm90KSBlbWl0IHJlZ2lzdGVyCituYW1lcyBpbiB0aGUgYXNzZW1ibHkgbGFuZ3VhZ2Ugb3V0cHV0IHVzaW5nIHN5bWJvbGljIGZvcm1zLgorLklQICJcZkJcLW1sb25nY2FsbFxmUiIgNAorLklYIEl0ZW0gIi1tbG9uZ2NhbGwiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbG9uZ2NhbGxcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxvbmdjYWxsIgorLlBECitCeSBkZWZhdWx0IGFzc3VtZSB0aGF0IGFsbCBjYWxscyBhcmUgZmFyIGF3YXkgc28gdGhhdCBhIGxvbmdlciBhbmQgbW9yZQorZXhwZW5zaXZlIGNhbGxpbmcgc2VxdWVuY2UgaXMgcmVxdWlyZWQuICBUaGlzIGlzIHJlcXVpcmVkIGZvciBjYWxscworZmFydGhlciB0aGFuIDMyIG1lZ2FieXRlcyAoMzMsNTU0LDQzMiBieXRlcykgZnJvbSB0aGUgY3VycmVudCBsb2NhdGlvbi4KK0Egc2hvcnQgY2FsbCBpcyBnZW5lcmF0ZWQgaWYgdGhlIGNvbXBpbGVyIGtub3dzCit0aGUgY2FsbCBjYW5ub3QgYmUgdGhhdCBmYXIgYXdheS4gIFRoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieQordGhlIFxmKENXXCooQ2BzaG9ydGNhbGxcKihDJ1xmUiBmdW5jdGlvbiBhdHRyaWJ1dGUsIG9yIGJ5IFxmKENXXCooQ2AjcHJhZ21hCitsb25nY2FsbCgwKVwqKEMnXGZSLgorLlNwCitTb21lIGxpbmtlcnMgYXJlIGNhcGFibGUgb2YgZGV0ZWN0aW5nIG91dC1vZi1yYW5nZSBjYWxscyBhbmQgZ2VuZXJhdGluZworZ2x1ZSBjb2RlIG9uIHRoZSBmbHkuICBPbiB0aGVzZSBzeXN0ZW1zLCBsb25nIGNhbGxzIGFyZSB1bm5lY2Vzc2FyeSBhbmQKK2dlbmVyYXRlIHNsb3dlciBjb2RlLiAgQXMgb2YgdGhpcyB3cml0aW5nLCB0aGUgXHMtMUFJWFxzMCBsaW5rZXIgY2FuIGRvIHRoaXMsCithcyBjYW4gdGhlIFxzLTFHTlVcczAgbGlua2VyIGZvciBQb3dlclBDLzY0LiAgSXQgaXMgcGxhbm5lZCB0byBhZGQgdGhpcyBmZWF0dXJlCit0byB0aGUgXHMtMUdOVVxzMCBsaW5rZXIgZm9yIDMyXC1iaXQgUG93ZXJQQyBzeXN0ZW1zIGFzIHdlbGwuCisuU3AKK09uIERhcndpbi9QUEMgc3lzdGVtcywgXGYoQ1dcKihDYCNwcmFnbWEgbG9uZ2NhbGxcKihDJ1xmUiBnZW5lcmF0ZXMgXGYoQ1dcKihDYGpic3IKK2NhbGxlZSwgTDQyXCooQydcZlIsIHBsdXMgYSBcZklicmFuY2ggaXNsYW5kXGZSIChnbHVlIGNvZGUpLiAgVGhlIHR3byB0YXJnZXQKK2FkZHJlc3NlcyByZXByZXNlbnQgdGhlIGNhbGxlZSBhbmQgdGhlIGJyYW5jaCBpc2xhbmQuICBUaGUKK0Rhcndpbi9QUEMgbGlua2VyIHByZWZlcnMgdGhlIGZpcnN0IGFkZHJlc3MgYW5kIGdlbmVyYXRlcyBhIFxmKENXXCooQ2BibAorY2FsbGVlXCooQydcZlIgaWYgdGhlIFxzLTFQUENcczAgXGYoQ1dcKihDYGJsXCooQydcZlIgaW5zdHJ1Y3Rpb24gcmVhY2hlcyB0aGUgY2FsbGVlIGRpcmVjdGx5Oworb3RoZXJ3aXNlLCB0aGUgbGlua2VyIGdlbmVyYXRlcyBcZihDV1wqKENgYmwgTDQyXCooQydcZlIgdG8gY2FsbCB0aGUgYnJhbmNoCitpc2xhbmQuICBUaGUgYnJhbmNoIGlzbGFuZCBpcyBhcHBlbmRlZCB0byB0aGUgYm9keSBvZiB0aGUKK2NhbGxpbmcgZnVuY3Rpb247IGl0IGNvbXB1dGVzIHRoZSBmdWxsIDMyXC1iaXQgYWRkcmVzcyBvZiB0aGUgY2FsbGVlCithbmQganVtcHMgdG8gaXQuCisuU3AKK09uIE1hY2gtTyAoRGFyd2luKSBzeXN0ZW1zLCB0aGlzIG9wdGlvbiBkaXJlY3RzIHRoZSBjb21waWxlciBlbWl0IHRvCit0aGUgZ2x1ZSBmb3IgZXZlcnkgZGlyZWN0IGNhbGwsIGFuZCB0aGUgRGFyd2luIGxpbmtlciBkZWNpZGVzIHdoZXRoZXIKK3RvIHVzZSBvciBkaXNjYXJkIGl0LgorLlNwCitJbiB0aGUgZnV0dXJlLCBccy0xR0NDXHMwIG1heSBpZ25vcmUgYWxsIGxvbmdjYWxsIHNwZWNpZmljYXRpb25zCit3aGVuIHRoZSBsaW5rZXIgaXMga25vd24gdG8gZ2VuZXJhdGUgZ2x1ZS4KKy5JUCAiXGZCXC1tdGxzXC1tYXJrZXJzXGZSIiA0CisuSVggSXRlbSAiLW10bHMtbWFya2VycyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC10bHNcLW1hcmtlcnNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXRscy1tYXJrZXJzIgorLlBECitNYXJrIChkbyBub3QgbWFyaykgY2FsbHMgdG8gXGYoQ1dcKihDYF9cfF90bHNfZ2V0X2FkZHJcKihDJ1xmUiB3aXRoIGEgcmVsb2NhdGlvbgorc3BlY2lmeWluZyB0aGUgZnVuY3Rpb24gYXJndW1lbnQuICBUaGUgcmVsb2NhdGlvbiBhbGxvd3MgdGhlIGxpbmtlciB0bworcmVsaWFibHkgYXNzb2NpYXRlIGZ1bmN0aW9uIGNhbGwgd2l0aCBhcmd1bWVudCBzZXR1cCBpbnN0cnVjdGlvbnMgZm9yCitcJlxzLTFUTFNcczAgb3B0aW1pemF0aW9uLCB3aGljaCBpbiB0dXJuIGFsbG93cyBccy0xR0NDXHMwIHRvIGJldHRlciBzY2hlZHVsZSB0aGUKK3NlcXVlbmNlLgorLklQICJcZkJcLXB0aHJlYWRcZlIiIDQKKy5JWCBJdGVtICItcHRocmVhZCIKK0FkZHMgc3VwcG9ydCBmb3IgbXVsdGl0aHJlYWRpbmcgd2l0aCB0aGUgXGZJcHRocmVhZHNcZlIgbGlicmFyeS4KK1RoaXMgb3B0aW9uIHNldHMgZmxhZ3MgZm9yIGJvdGggdGhlIHByZXByb2Nlc3NvciBhbmQgbGlua2VyLgorLklQICJcZkJcLW1yZWNpcFxmUiIgNAorLklYIEl0ZW0gIi1tcmVjaXAiCisuUEQgMAorLklQICJcZkJcLW1ub1wtcmVjaXBcZlIiIDQKKy5JWCBJdGVtICItbW5vLXJlY2lwIgorLlBECitUaGlzIG9wdGlvbiBlbmFibGVzIHVzZSBvZiB0aGUgcmVjaXByb2NhbCBlc3RpbWF0ZSBhbmQKK3JlY2lwcm9jYWwgc3F1YXJlIHJvb3QgZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zIHdpdGggYWRkaXRpb25hbAorTmV3dG9uLVJhcGhzb24gc3RlcHMgdG8gaW5jcmVhc2UgcHJlY2lzaW9uIGluc3RlYWQgb2YgZG9pbmcgYSBkaXZpZGUgb3IKK3NxdWFyZSByb290IGFuZCBkaXZpZGUgZm9yIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cy4gIFlvdSBzaG91bGQgdXNlCit0aGUgXGZCXC1mZmFzdFwtbWF0aFxmUiBvcHRpb24gd2hlbiB1c2luZyBcZkJcLW1yZWNpcFxmUiAob3IgYXQKK2xlYXN0IFxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiwKK1wmXGZCXC1maW5pdGVcLW1hdGhcLW9ubHlcZlIsIFxmQlwtZnJlY2lwcm9jYWxcLW1hdGhcZlIgYW5kCitcJlxmQlwtZm5vXC10cmFwcGluZ1wtbWF0aFxmUikuICBOb3RlIHRoYXQgd2hpbGUgdGhlIHRocm91Z2hwdXQgb2YgdGhlCitzZXF1ZW5jZSBpcyBnZW5lcmFsbHkgaGlnaGVyIHRoYW4gdGhlIHRocm91Z2hwdXQgb2YgdGhlIG5vbi1yZWNpcHJvY2FsCitpbnN0cnVjdGlvbiwgdGhlIHByZWNpc2lvbiBvZiB0aGUgc2VxdWVuY2UgY2FuIGJlIGRlY3JlYXNlZCBieSB1cCB0byAyCit1bHAgKGkuZS4gdGhlIGludmVyc2Ugb2YgMS4wIGVxdWFscyAwLjk5OTk5OTk0KSBmb3IgcmVjaXByb2NhbCBzcXVhcmUKK3Jvb3RzLgorLklQICJcZkJcLW1yZWNpcD1cZlJcZklvcHRcZlIiIDQKKy5JWCBJdGVtICItbXJlY2lwPW9wdCIKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHdoaWNoIHJlY2lwcm9jYWwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zCittYXkgYmUgdXNlZC4gIFxmSW9wdFxmUiBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9wdGlvbnMsIHdoaWNoIG1heQorYmUgcHJlY2VkZWQgYnkgYSBcZihDV1wqKENgIVwqKEMnXGZSIHRvIGludmVydCB0aGUgb3B0aW9uOgorXCZcZihDV1wqKENgYWxsXCooQydcZlI6IGVuYWJsZSBhbGwgZXN0aW1hdGUgaW5zdHJ1Y3Rpb25zLAorXCZcZihDV1wqKENgZGVmYXVsdFwqKEMnXGZSOiBlbmFibGUgdGhlIGRlZmF1bHQgaW5zdHJ1Y3Rpb25zLCBlcXVpdmFsZW50IHRvIFxmQlwtbXJlY2lwXGZSLAorXCZcZihDV1wqKENgbm9uZVwqKEMnXGZSOiBkaXNhYmxlIGFsbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMsIGVxdWl2YWxlbnQgdG8gXGZCXC1tbm9cLXJlY2lwXGZSOworXCZcZihDV1wqKENgZGl2XCooQydcZlI6IGVuYWJsZSB0aGUgcmVjaXByb2NhbCBhcHByb3hpbWF0aW9uIGluc3RydWN0aW9ucyBmb3IgYm90aCBzaW5nbGUgYW5kIGRvdWJsZSBwcmVjaXNpb247CitcJlxmKENXXCooQ2BkaXZmXCooQydcZlI6IGVuYWJsZSB0aGUgc2luZ2xlLXByZWNpc2lvbiByZWNpcHJvY2FsIGFwcHJveGltYXRpb24gaW5zdHJ1Y3Rpb25zOworXCZcZihDV1wqKENgZGl2ZFwqKEMnXGZSOiBlbmFibGUgdGhlIGRvdWJsZS1wcmVjaXNpb24gcmVjaXByb2NhbCBhcHByb3hpbWF0aW9uIGluc3RydWN0aW9uczsKK1wmXGYoQ1dcKihDYHJzcXJ0XCooQydcZlI6IGVuYWJsZSB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhcHByb3hpbWF0aW9uIGluc3RydWN0aW9ucyBmb3IgYm90aCBzaW5nbGUgYW5kIGRvdWJsZSBwcmVjaXNpb247CitcJlxmKENXXCooQ2Byc3FydGZcKihDJ1xmUjogZW5hYmxlIHRoZSBzaW5nbGUtcHJlY2lzaW9uIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYXBwcm94aW1hdGlvbiBpbnN0cnVjdGlvbnM7CitcJlxmKENXXCooQ2Byc3FydGRcKihDJ1xmUjogZW5hYmxlIHRoZSBkb3VibGUtcHJlY2lzaW9uIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYXBwcm94aW1hdGlvbiBpbnN0cnVjdGlvbnM7CisuU3AKK1NvLCBmb3IgZXhhbXBsZSwgXGZCXC1tcmVjaXA9YWxsLCFyc3FydGRcZlIgZW5hYmxlcworYWxsIG9mIHRoZSByZWNpcHJvY2FsIGVzdGltYXRlIGluc3RydWN0aW9ucywgZXhjZXB0IGZvciB0aGUKK1wmXGYoQ1dcKihDYEZSU1FSVEVcKihDJ1xmUiwgXGYoQ1dcKihDYFhTUlNRUlRFRFBcKihDJ1xmUiwgYW5kIFxmKENXXCooQ2BYVlJTUVJURURQXCooQydcZlIgaW5zdHJ1Y3Rpb25zCit3aGljaCBoYW5kbGUgdGhlIGRvdWJsZS1wcmVjaXNpb24gcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBjYWxjdWxhdGlvbnMuCisuSVAgIlxmQlwtbXJlY2lwXC1wcmVjaXNpb25cZlIiIDQKKy5JWCBJdGVtICItbXJlY2lwLXByZWNpc2lvbiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWNpcFwtcHJlY2lzaW9uXGZSIiA0CisuSVggSXRlbSAiLW1uby1yZWNpcC1wcmVjaXNpb24iCisuUEQKK0Fzc3VtZSAoZG8gbm90IGFzc3VtZSkgdGhhdCB0aGUgcmVjaXByb2NhbCBlc3RpbWF0ZSBpbnN0cnVjdGlvbnMKK3Byb3ZpZGUgaGlnaGVyLXByZWNpc2lvbiBlc3RpbWF0ZXMgdGhhbiBpcyBtYW5kYXRlZCBieSB0aGUgUG93ZXJQQworXCZccy0xQUJJXHMwLiAgU2VsZWN0aW5nIFxmQlwtbWNwdT1wb3dlcjZcZlIsIFxmQlwtbWNwdT1wb3dlcjdcZlIgb3IKK1wmXGZCXC1tY3B1PXBvd2VyOFxmUiBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgXGZCXC1tcmVjaXBcLXByZWNpc2lvblxmUi4KK1RoZSBkb3VibGUtcHJlY2lzaW9uIHNxdWFyZSByb290IGVzdGltYXRlIGluc3RydWN0aW9ucyBhcmUgbm90IGdlbmVyYXRlZCBieQorZGVmYXVsdCBvbiBsb3ctcHJlY2lzaW9uIG1hY2hpbmVzLCBzaW5jZSB0aGV5IGRvIG5vdCBwcm92aWRlIGFuCitlc3RpbWF0ZSB0aGF0IGNvbnZlcmdlcyBhZnRlciB0aHJlZSBzdGVwcy4KKy5JUCAiXGZCXC1tdmVjbGliYWJpPVxmUlxmSXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbXZlY2xpYmFiaT10eXBlIgorU3BlY2lmaWVzIHRoZSBccy0xQUJJXHMwIHR5cGUgdG8gdXNlIGZvciB2ZWN0b3JpemluZyBpbnRyaW5zaWNzIHVzaW5nIGFuCitleHRlcm5hbCBsaWJyYXJ5LiAgVGhlIG9ubHkgdHlwZSBzdXBwb3J0ZWQgYXQgcHJlc2VudCBpcyBcZihDV1wqKENgbWFzc1wqKEMnXGZSLAord2hpY2ggc3BlY2lmaWVzIHRvIHVzZSBccy0xSUJNXHMwJ3MgTWF0aGVtYXRpY2FsIEFjY2VsZXJhdGlvbiBTdWJzeXN0ZW0KKyhccy0xTUFTU1xzMCkgbGlicmFyaWVzIGZvciB2ZWN0b3JpemluZyBpbnRyaW5zaWNzIHVzaW5nIGV4dGVybmFsIGxpYnJhcmllcy4KK1wmXHMtMUdDQ1xzMCBjdXJyZW50bHkgZW1pdHMgY2FsbHMgdG8gXGYoQ1dcKihDYGFjb3NkMlwqKEMnXGZSLCBcZihDV1wqKENgYWNvc2Y0XCooQydcZlIsCitcJlxmKENXXCooQ2BhY29zaGQyXCooQydcZlIsIFxmKENXXCooQ2BhY29zaGY0XCooQydcZlIsIFxmKENXXCooQ2Bhc2luZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGFzaW5mNFwqKEMnXGZSLAorXCZcZihDV1wqKENgYXNpbmhkMlwqKEMnXGZSLCBcZihDV1wqKENgYXNpbmhmNFwqKEMnXGZSLCBcZihDV1wqKENgYXRhbjJkMlwqKEMnXGZSLCBcZihDV1wqKENgYXRhbjJmNFwqKEMnXGZSLAorXCZcZihDV1wqKENgYXRhbmQyXCooQydcZlIsIFxmKENXXCooQ2BhdGFuZjRcKihDJ1xmUiwgXGYoQ1dcKihDYGF0YW5oZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGF0YW5oZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGNicnRkMlwqKEMnXGZSLCBcZihDV1wqKENgY2JydGY0XCooQydcZlIsIFxmKENXXCooQ2Bjb3NkMlwqKEMnXGZSLCBcZihDV1wqKENgY29zZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGNvc2hkMlwqKEMnXGZSLCBcZihDV1wqKENgY29zaGY0XCooQydcZlIsIFxmKENXXCooQ2BlcmZjZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGVyZmNmNFwqKEMnXGZSLAorXCZcZihDV1wqKENgZXJmZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGVyZmY0XCooQydcZlIsIFxmKENXXCooQ2BleHAyZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGV4cDJmNFwqKEMnXGZSLAorXCZcZihDV1wqKENgZXhwZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGV4cGY0XCooQydcZlIsIFxmKENXXCooQ2BleHBtMWQyXCooQydcZlIsIFxmKENXXCooQ2BleHBtMWY0XCooQydcZlIsCitcJlxmKENXXCooQ2BoeXBvdGQyXCooQydcZlIsIFxmKENXXCooQ2BoeXBvdGY0XCooQydcZlIsIFxmKENXXCooQ2BsZ2FtbWFkMlwqKEMnXGZSLCBcZihDV1wqKENgbGdhbW1hZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGxvZzEwZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGxvZzEwZjRcKihDJ1xmUiwgXGYoQ1dcKihDYGxvZzFwZDJcKihDJ1xmUiwgXGYoQ1dcKihDYGxvZzFwZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYGxvZzJkMlwqKEMnXGZSLCBcZihDV1wqKENgbG9nMmY0XCooQydcZlIsIFxmKENXXCooQ2Bsb2dkMlwqKEMnXGZSLCBcZihDV1wqKENgbG9nZjRcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHBvd2QyXCooQydcZlIsIFxmKENXXCooQ2Bwb3dmNFwqKEMnXGZSLCBcZihDV1wqKENgc2luZDJcKihDJ1xmUiwgXGYoQ1dcKihDYHNpbmY0XCooQydcZlIsIFxmKENXXCooQ2BzaW5oZDJcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHNpbmhmNFwqKEMnXGZSLCBcZihDV1wqKENgc3FydGQyXCooQydcZlIsIFxmKENXXCooQ2BzcXJ0ZjRcKihDJ1xmUiwgXGYoQ1dcKihDYHRhbmQyXCooQydcZlIsCitcJlxmKENXXCooQ2B0YW5mNFwqKEMnXGZSLCBcZihDV1wqKENgdGFuaGQyXCooQydcZlIsIGFuZCBcZihDV1wqKENgdGFuaGY0XCooQydcZlIgd2hlbiBnZW5lcmF0aW5nIGNvZGUKK2ZvciBwb3dlcjcuICBCb3RoIFxmQlwtZnRyZWVcLXZlY3Rvcml6ZVxmUiBhbmQKK1wmXGZCXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSIG11c3QgYWxzbyBiZSBlbmFibGVkLiAgVGhlIFxzLTFNQVNTXHMwCitsaWJyYXJpZXMgbXVzdCBiZSBzcGVjaWZpZWQgYXQgbGluayB0aW1lLgorLklQICJcZkJcLW1mcml6XGZSIiA0CisuSVggSXRlbSAiLW1mcml6IgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZyaXpcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZyaXoiCisuUEQKK0dlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIHRoZSBcZihDV1wqKENgZnJpelwqKEMnXGZSIGluc3RydWN0aW9uIHdoZW4gdGhlCitcJlxmQlwtZnVuc2FmZVwtbWF0aFwtb3B0aW1pemF0aW9uc1xmUiBvcHRpb24gaXMgdXNlZCB0byBvcHRpbWl6ZQorcm91bmRpbmcgb2YgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHRvIDY0XC1iaXQgaW50ZWdlciBhbmQgYmFjayB0byBmbG9hdGluZworcG9pbnQuICBUaGUgXGYoQ1dcKihDYGZyaXpcKihDJ1xmUiBpbnN0cnVjdGlvbiBkb2VzIG5vdCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgaWYKK3RoZSBmbG9hdGluZy1wb2ludCBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiBhbiBpbnRlZ2VyLgorLklQICJcZkJcLW1wb2ludGVyc1wtdG9cLW5lc3RlZFwtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLW1wb2ludGVycy10by1uZXN0ZWQtZnVuY3Rpb25zIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBvaW50ZXJzXC10b1wtbmVzdGVkXC1mdW5jdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBvaW50ZXJzLXRvLW5lc3RlZC1mdW5jdGlvbnMiCisuUEQKK0dlbmVyYXRlIChkbyBub3QgZ2VuZXJhdGUpIGNvZGUgdG8gbG9hZCB1cCB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyCisoXGZJcjExXGZSKSB3aGVuIGNhbGxpbmcgdGhyb3VnaCBhIHBvaW50ZXIgb24gXHMtMUFJWFxzMCBhbmQgNjRcLWJpdCBMaW51eAorc3lzdGVtcyB3aGVyZSBhIGZ1bmN0aW9uIHBvaW50ZXIgcG9pbnRzIHRvIGEgM1wtd29yZCBkZXNjcmlwdG9yIGdpdmluZwordGhlIGZ1bmN0aW9uIGFkZHJlc3MsIFxzLTFUT0NcczAgdmFsdWUgdG8gYmUgbG9hZGVkIGluIHJlZ2lzdGVyIFxmSXIyXGZSLCBhbmQKK3N0YXRpYyBjaGFpbiB2YWx1ZSB0byBiZSBsb2FkZWQgaW4gcmVnaXN0ZXIgXGZJcjExXGZSLiAgVGhlCitcJlxmQlwtbXBvaW50ZXJzXC10b1wtbmVzdGVkXC1mdW5jdGlvbnNcZlIgaXMgb24gYnkgZGVmYXVsdC4gIFlvdSBjYW5ub3QKK2NhbGwgdGhyb3VnaCBwb2ludGVycyB0byBuZXN0ZWQgZnVuY3Rpb25zIG9yIHBvaW50ZXJzCit0byBmdW5jdGlvbnMgY29tcGlsZWQgaW4gb3RoZXIgbGFuZ3VhZ2VzIHRoYXQgdXNlIHRoZSBzdGF0aWMgY2hhaW4gaWYKK3lvdSB1c2UgdGhlIFxmQlwtbW5vXC1wb2ludGVyc1wtdG9cLW5lc3RlZFwtZnVuY3Rpb25zXGZSLgorLklQICJcZkJcLW1zYXZlXC10b2NcLWluZGlyZWN0XGZSIiA0CisuSVggSXRlbSAiLW1zYXZlLXRvYy1pbmRpcmVjdCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zYXZlXC10b2NcLWluZGlyZWN0XGZSIiA0CisuSVggSXRlbSAiLW1uby1zYXZlLXRvYy1pbmRpcmVjdCIKKy5QRAorR2VuZXJhdGUgKGRvIG5vdCBnZW5lcmF0ZSkgY29kZSB0byBzYXZlIHRoZSBccy0xVE9DXHMwIHZhbHVlIGluIHRoZSByZXNlcnZlZAorc3RhY2sgbG9jYXRpb24gaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIGlmIHRoZSBmdW5jdGlvbiBjYWxscyB0aHJvdWdoCithIHBvaW50ZXIgb24gXHMtMUFJWFxzMCBhbmQgNjRcLWJpdCBMaW51eCBzeXN0ZW1zLiAgSWYgdGhlIFxzLTFUT0NcczAgdmFsdWUgaXMgbm90CitzYXZlZCBpbiB0aGUgcHJvbG9ndWUsIGl0IGlzIHNhdmVkIGp1c3QgYmVmb3JlIHRoZSBjYWxsIHRocm91Z2ggdGhlCitwb2ludGVyLiAgVGhlIFxmQlwtbW5vXC1zYXZlXC10b2NcLWluZGlyZWN0XGZSIG9wdGlvbiBpcyB0aGUgZGVmYXVsdC4KKy5QUAorXGZJXHMtMVJYXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJSWCBPcHRpb25zIgorLlBQCitUaGVzZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgXHMtMVJYXHMwIHRhcmdldHM6CisuSVAgIlxmQlwtbTY0Yml0XC1kb3VibGVzXGZSIiA0CisuSVggSXRlbSAiLW02NGJpdC1kb3VibGVzIgorLlBEIDAKKy5JUCAiXGZCXC1tMzJiaXRcLWRvdWJsZXNcZlIiIDQKKy5JWCBJdGVtICItbTMyYml0LWRvdWJsZXMiCisuUEQKK01ha2UgdGhlIFxmKENXXCooQ2Bkb3VibGVcKihDJ1xmUiBkYXRhIHR5cGUgYmUgNjQgYml0cyAoXGZCXC1tNjRiaXRcLWRvdWJsZXNcZlIpCitvciAzMiBiaXRzIChcZkJcLW0zMmJpdFwtZG91Ymxlc1xmUikgaW4gc2l6ZS4gIFRoZSBkZWZhdWx0IGlzCitcJlxmQlwtbTMyYml0XC1kb3VibGVzXGZSLiAgXGZJTm90ZVxmUiBccy0xUlhcczAgZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUgb25seQord29ya3Mgb24gMzJcLWJpdCB2YWx1ZXMsIHdoaWNoIGlzIHdoeSB0aGUgZGVmYXVsdCBpcworXCZcZkJcLW0zMmJpdFwtZG91Ymxlc1xmUi4KKy5JUCAiXGZCXC1mcHVcZlIiIDQKKy5JWCBJdGVtICItZnB1IgorLlBEIDAKKy5JUCAiXGZCXC1ub2ZwdVxmUiIgNAorLklYIEl0ZW0gIi1ub2ZwdSIKKy5QRAorRW5hYmxlcyAoXGZCXC1mcHVcZlIpIG9yIGRpc2FibGVzIChcZkJcLW5vZnB1XGZSKSB0aGUgdXNlIG9mIFxzLTFSWFxzMAorZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUuICBUaGUgZGVmYXVsdCBpcyBlbmFibGVkIGZvciB0aGUgXGZJXHMtMVJYNjAwXHMwXGZSCitzZXJpZXMgYW5kIGRpc2FibGVkIGZvciB0aGUgXGZJXHMtMVJYMjAwXHMwXGZSIHNlcmllcy4KKy5TcAorRmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGFyZSBvbmx5IGdlbmVyYXRlZCBmb3IgMzJcLWJpdCBmbG9hdGluZy1wb2ludCAKK3ZhbHVlcywgaG93ZXZlciwgc28gdGhlIFxzLTFGUFVcczAgaGFyZHdhcmUgaXMgbm90IHVzZWQgZm9yIGRvdWJsZXMgaWYgdGhlCitcJlxmQlwtbTY0Yml0XC1kb3VibGVzXGZSIG9wdGlvbiBpcyB1c2VkLgorLlNwCitcJlxmSU5vdGVcZlIgSWYgdGhlIFxmQlwtZnB1XGZSIG9wdGlvbiBpcyBlbmFibGVkIHRoZW4KK1wmXGZCXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXGZSIGlzIGFsc28gZW5hYmxlZCBhdXRvbWF0aWNhbGx5LgorVGhpcyBpcyBiZWNhdXNlIHRoZSBccy0xUlhcczAgXHMtMUZQVVxzMCBpbnN0cnVjdGlvbnMgYXJlIHRoZW1zZWx2ZXMgdW5zYWZlLgorLklQICJcZkJcLW1jcHU9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PW5hbWUiCitTZWxlY3RzIHRoZSB0eXBlIG9mIFxzLTFSWFxzMCBccy0xQ1BVXHMwIHRvIGJlIHRhcmdldGVkLiAgQ3VycmVudGx5IHRocmVlIHR5cGVzIGFyZQorc3VwcG9ydGVkLCB0aGUgZ2VuZXJpYyBcZklccy0xUlg2MDBcczBcZlIgYW5kIFxmSVxzLTFSWDIwMFxzMFxmUiBzZXJpZXMgaGFyZHdhcmUgYW5kCit0aGUgc3BlY2lmaWMgXGZJXHMtMVJYNjEwXHMwXGZSIFxzLTFDUFVcczAuICBUaGUgZGVmYXVsdCBpcyBcZklccy0xUlg2MDBcczBcZlIuCisuU3AKK1RoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBcZklccy0xUlg2MDBcczBcZlIgYW5kIFxmSVxzLTFSWDYxMFxzMFxmUiBpcyB0aGF0IHRoZQorXCZcZklccy0xUlg2MTBcczBcZlIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgXGYoQ1dcKihDYE1WVElQTFwqKEMnXGZSIGluc3RydWN0aW9uLgorLlNwCitUaGUgXGZJXHMtMVJYMjAwXHMwXGZSIHNlcmllcyBkb2VzIG5vdCBoYXZlIGEgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgdW5pdAorYW5kIHNvIFxmQlwtbm9mcHVcZlIgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gdGhpcyB0eXBlIGlzCitzZWxlY3RlZC4KKy5JUCAiXGZCXC1tYmlnXC1lbmRpYW5cLWRhdGFcZlIiIDQKKy5JWCBJdGVtICItbWJpZy1lbmRpYW4tZGF0YSIKKy5QRCAwCisuSVAgIlxmQlwtbWxpdHRsZVwtZW5kaWFuXC1kYXRhXGZSIiA0CisuSVggSXRlbSAiLW1saXR0bGUtZW5kaWFuLWRhdGEiCisuUEQKK1N0b3JlIGRhdGEgKGJ1dCBub3QgY29kZSkgaW4gdGhlIGJpZy1lbmRpYW4gZm9ybWF0LiAgVGhlIGRlZmF1bHQgaXMKK1wmXGZCXC1tbGl0dGxlXC1lbmRpYW5cLWRhdGFcZlIsIGkuZS4gdG8gc3RvcmUgZGF0YSBpbiB0aGUgbGl0dGxlLWVuZGlhbgorZm9ybWF0LgorLklQICJcZkJcLW1zbWFsbFwtZGF0YVwtbGltaXQ9XGZSXGZJTlxmUiIgNAorLklYIEl0ZW0gIi1tc21hbGwtZGF0YS1saW1pdD1OIgorU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgaW4gYnl0ZXMgb2YgZ2xvYmFsIGFuZCBzdGF0aWMgdmFyaWFibGVzCit3aGljaCBjYW4gYmUgcGxhY2VkIGludG8gdGhlIHNtYWxsIGRhdGEgYXJlYS4gIFVzaW5nIHRoZSBzbWFsbCBkYXRhCithcmVhIGNhbiBsZWFkIHRvIHNtYWxsZXIgYW5kIGZhc3RlciBjb2RlLCBidXQgdGhlIHNpemUgb2YgYXJlYSBpcworbGltaXRlZCBhbmQgaXQgaXMgdXAgdG8gdGhlIHByb2dyYW1tZXIgdG8gZW5zdXJlIHRoYXQgdGhlIGFyZWEgZG9lcworbm90IG92ZXJmbG93LiAgQWxzbyB3aGVuIHRoZSBzbWFsbCBkYXRhIGFyZWEgaXMgdXNlZCBvbmUgb2YgdGhlIFxzLTFSWFxzMCdzCityZWdpc3RlcnMgKHVzdWFsbHkgXGYoQ1dcKihDYHIxM1wqKEMnXGZSKSBpcyByZXNlcnZlZCBmb3IgdXNlIHBvaW50aW5nIHRvIHRoaXMKK2FyZWEsIHNvIGl0IGlzIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgY29tcGlsZXIuICBUaGlzCitjb3VsZCByZXN1bHQgaW4gc2xvd2VyIGFuZC9vciBsYXJnZXIgY29kZSBpZiB2YXJpYWJsZXMgYXJlIHB1c2hlZCBvbnRvCit0aGUgc3RhY2sgaW5zdGVhZCBvZiBiZWluZyBoZWxkIGluIHRoaXMgcmVnaXN0ZXIuCisuU3AKK05vdGUsIGNvbW1vbiB2YXJpYWJsZXMgKHZhcmlhYmxlcyB0aGF0IGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQpIGFuZAorY29uc3RhbnRzIGFyZSBub3QgcGxhY2VkIGludG8gdGhlIHNtYWxsIGRhdGEgYXJlYSBhcyB0aGV5IGFyZSBhc3NpZ25lZAordG8gb3RoZXIgc2VjdGlvbnMgaW4gdGhlIG91dHB1dCBleGVjdXRhYmxlLgorLlNwCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyB6ZXJvLCB3aGljaCBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICBOb3RlLCB0aGlzCitmZWF0dXJlIGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCBoaWdoZXIgb3B0aW1pemF0aW9uIGxldmVscworKFxmQlwtTzJcZlIgZXRjKSBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWxseSBkZXRyaW1lbnRhbCBlZmZlY3RzIG9mCityZXNlcnZpbmcgYSByZWdpc3Rlci4gIEl0IGlzIHVwIHRvIHRoZSBwcm9ncmFtbWVyIHRvIGV4cGVyaW1lbnQgYW5kCitkaXNjb3ZlciB3aGV0aGVyIHRoaXMgZmVhdHVyZSBpcyBvZiBiZW5lZml0IHRvIHRoZWlyIHByb2dyYW0uICBTZWUgdGhlCitkZXNjcmlwdGlvbiBvZiB0aGUgXGZCXC1tcGlkXGZSIG9wdGlvbiBmb3IgYSBkZXNjcmlwdGlvbiBvZiBob3cgdGhlCithY3R1YWwgcmVnaXN0ZXIgdG8gaG9sZCB0aGUgc21hbGwgZGF0YSBhcmVhIHBvaW50ZXIgaXMgY2hvc2VuLgorLklQICJcZkJcLW1zaW1cZlIiIDQKKy5JWCBJdGVtICItbXNpbSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zaW1cZlIiIDQKKy5JWCBJdGVtICItbW5vLXNpbSIKKy5QRAorVXNlIHRoZSBzaW11bGF0b3IgcnVudGltZS4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgbGliZ2xvc3MKK2JvYXJkLXNwZWNpZmljIHJ1bnRpbWUuCisuSVAgIlxmQlwtbWFzMTAwXC1zeW50YXhcZlIiIDQKKy5JWCBJdGVtICItbWFzMTAwLXN5bnRheCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1hczEwMFwtc3ludGF4XGZSIiA0CisuSVggSXRlbSAiLW1uby1hczEwMC1zeW50YXgiCisuUEQKK1doZW4gZ2VuZXJhdGluZyBhc3NlbWJsZXIgb3V0cHV0IHVzZSBhIHN5bnRheCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAorUmVuZXNhcydzIFxzLTFBUzEwMFxzMCBhc3NlbWJsZXIuICBUaGlzIHN5bnRheCBjYW4gYWxzbyBiZSBoYW5kbGVkIGJ5IHRoZSBccy0xR0FTXHMwCithc3NlbWJsZXIsIGJ1dCBpdCBoYXMgc29tZSByZXN0cmljdGlvbnMgc28gaXQgaXMgbm90IGdlbmVyYXRlZCBieSBkZWZhdWx0LgorLklQICJcZkJcLW1tYXhcLWNvbnN0YW50XC1zaXplPVxmUlxmSU5cZlIiIDQKKy5JWCBJdGVtICItbW1heC1jb25zdGFudC1zaXplPU4iCitTcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSwgaW4gYnl0ZXMsIG9mIGEgY29uc3RhbnQgdGhhdCBjYW4gYmUgdXNlZCBhcworYW4gb3BlcmFuZCBpbiBhIFxzLTFSWFxzMCBpbnN0cnVjdGlvbi4gIEFsdGhvdWdoIHRoZSBccy0xUlhcczAgaW5zdHJ1Y3Rpb24gc2V0IGRvZXMKK2FsbG93IGNvbnN0YW50cyBvZiB1cCB0byA0IGJ5dGVzIGluIGxlbmd0aCB0byBiZSB1c2VkIGluIGluc3RydWN0aW9ucywKK2EgbG9uZ2VyIHZhbHVlIGVxdWF0ZXMgdG8gYSBsb25nZXIgaW5zdHJ1Y3Rpb24uICBUaHVzIGluIHNvbWUKK2NpcmN1bXN0YW5jZXMgaXQgY2FuIGJlIGJlbmVmaWNpYWwgdG8gcmVzdHJpY3QgdGhlIHNpemUgb2YgY29uc3RhbnRzCit0aGF0IGFyZSB1c2VkIGluIGluc3RydWN0aW9ucy4gIENvbnN0YW50cyB0aGF0IGFyZSB0b28gYmlnIGFyZSBpbnN0ZWFkCitwbGFjZWQgaW50byBhIGNvbnN0YW50IHBvb2wgYW5kIHJlZmVyZW5jZWQgdmlhIHJlZ2lzdGVyIGluZGlyZWN0aW9uLgorLlNwCitUaGUgdmFsdWUgXGZJTlxmUiBjYW4gYmUgYmV0d2VlbiAwIGFuZCA0LiAgQSB2YWx1ZSBvZiAwICh0aGUgZGVmYXVsdCkKK29yIDQgbWVhbnMgdGhhdCBjb25zdGFudHMgb2YgYW55IHNpemUgYXJlIGFsbG93ZWQuCisuSVAgIlxmQlwtbXJlbGF4XGZSIiA0CisuSVggSXRlbSAiLW1yZWxheCIKK0VuYWJsZSBsaW5rZXIgcmVsYXhhdGlvbi4gIExpbmtlciByZWxheGF0aW9uIGlzIGEgcHJvY2VzcyB3aGVyZWJ5IHRoZQorbGlua2VyIGF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiBhIHByb2dyYW0gYnkgZmluZGluZyBzaG9ydGVyCit2ZXJzaW9ucyBvZiB2YXJpb3VzIGluc3RydWN0aW9ucy4gIERpc2FibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbWludFwtcmVnaXN0ZXI9XGZSXGZJTlxmUiIgNAorLklYIEl0ZW0gIi1taW50LXJlZ2lzdGVyPU4iCitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzIHRvIHJlc2VydmUgZm9yIGZhc3QgaW50ZXJydXB0IGhhbmRsZXIKK2Z1bmN0aW9ucy4gIFRoZSB2YWx1ZSBcZklOXGZSIGNhbiBiZSBiZXR3ZWVuIDAgYW5kIDQuICBBIHZhbHVlIG9mIDEKK21lYW5zIHRoYXQgcmVnaXN0ZXIgXGYoQ1dcKihDYHIxM1wqKEMnXGZSIGlzIHJlc2VydmVkIGZvciB0aGUgZXhjbHVzaXZlIHVzZQorb2YgZmFzdCBpbnRlcnJ1cHQgaGFuZGxlcnMuICBBIHZhbHVlIG9mIDIgcmVzZXJ2ZXMgXGYoQ1dcKihDYHIxM1wqKEMnXGZSIGFuZAorXCZcZihDV1wqKENgcjEyXCooQydcZlIuICBBIHZhbHVlIG9mIDMgcmVzZXJ2ZXMgXGYoQ1dcKihDYHIxM1wqKEMnXGZSLCBcZihDV1wqKENgcjEyXCooQydcZlIgYW5kCitcJlxmKENXXCooQ2ByMTFcKihDJ1xmUiwgYW5kIGEgdmFsdWUgb2YgNCByZXNlcnZlcyBcZihDV1wqKENgcjEzXCooQydcZlIgdGhyb3VnaCBcZihDV1wqKENgcjEwXCooQydcZlIuCitBIHZhbHVlIG9mIDAsIHRoZSBkZWZhdWx0LCBkb2VzIG5vdCByZXNlcnZlIGFueSByZWdpc3RlcnMuCisuSVAgIlxmQlwtbXNhdmVcLWFjY1wtaW5cLWludGVycnVwdHNcZlIiIDQKKy5JWCBJdGVtICItbXNhdmUtYWNjLWluLWludGVycnVwdHMiCitTcGVjaWZpZXMgdGhhdCBpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbnMgc2hvdWxkIHByZXNlcnZlIHRoZQorYWNjdW11bGF0b3IgcmVnaXN0ZXIuICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIG5vcm1hbCBjb2RlIG1pZ2h0IHVzZQordGhlIGFjY3VtdWxhdG9yIHJlZ2lzdGVyLCBmb3IgZXhhbXBsZSBiZWNhdXNlIGl0IHBlcmZvcm1zIDY0XC1iaXQKK211bHRpcGxpY2F0aW9ucy4gIFRoZSBkZWZhdWx0IGlzIHRvIGlnbm9yZSB0aGUgYWNjdW11bGF0b3IgYXMgdGhpcworbWFrZXMgdGhlIGludGVycnVwdCBoYW5kbGVycyBmYXN0ZXIuCisuSVAgIlxmQlwtbXBpZFxmUiIgNAorLklYIEl0ZW0gIi1tcGlkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBpZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcGlkIgorLlBECitFbmFibGVzIHRoZSBnZW5lcmF0aW9uIG9mIHBvc2l0aW9uIGluZGVwZW5kZW50IGRhdGEuICBXaGVuIGVuYWJsZWQgYW55CithY2Nlc3MgdG8gY29uc3RhbnQgZGF0YSBpcyBkb25lIHZpYSBhbiBvZmZzZXQgZnJvbSBhIGJhc2UgYWRkcmVzcworaGVsZCBpbiBhIHJlZ2lzdGVyLiAgVGhpcyBhbGxvd3MgdGhlIGxvY2F0aW9uIG9mIGNvbnN0YW50IGRhdGEgdG8gYmUKK2RldGVybWluZWQgYXQgcnVuIHRpbWUgd2l0aG91dCByZXF1aXJpbmcgdGhlIGV4ZWN1dGFibGUgdG8gYmUKK3JlbG9jYXRlZCwgd2hpY2ggaXMgYSBiZW5lZml0IHRvIGVtYmVkZGVkIGFwcGxpY2F0aW9ucyB3aXRoIHRpZ2h0CittZW1vcnkgY29uc3RyYWludHMuICBEYXRhIHRoYXQgY2FuIGJlIG1vZGlmaWVkIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzCitvcHRpb24uCisuU3AKK05vdGUsIHVzaW5nIHRoaXMgZmVhdHVyZSByZXNlcnZlcyBhIHJlZ2lzdGVyLCB1c3VhbGx5IFxmKENXXCooQ2ByMTNcKihDJ1xmUiwgZm9yCit0aGUgY29uc3RhbnQgZGF0YSBiYXNlIGFkZHJlc3MuICBUaGlzIGNhbiByZXN1bHQgaW4gc2xvd2VyIGFuZC9vcgorbGFyZ2VyIGNvZGUsIGVzcGVjaWFsbHkgaW4gY29tcGxpY2F0ZWQgZnVuY3Rpb25zLgorLlNwCitUaGUgYWN0dWFsIHJlZ2lzdGVyIGNob3NlbiB0byBob2xkIHRoZSBjb25zdGFudCBkYXRhIGJhc2UgYWRkcmVzcworZGVwZW5kcyB1cG9uIHdoZXRoZXIgdGhlIFxmQlwtbXNtYWxsXC1kYXRhXC1saW1pdFxmUiBhbmQvb3IgdGhlCitcJlxmQlwtbWludFwtcmVnaXN0ZXJcZlIgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGVuYWJsZWQuICBTdGFydGluZword2l0aCByZWdpc3RlciBcZihDV1wqKENgcjEzXCooQydcZlIgYW5kIHByb2NlZWRpbmcgZG93bndhcmRzLCByZWdpc3RlcnMgYXJlCithbGxvY2F0ZWQgZmlyc3QgdG8gc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIFxmQlwtbWludFwtcmVnaXN0ZXJcZlIsCit0aGVuIFxmQlwtbXBpZFxmUiBhbmQgZmluYWxseSBcZkJcLW1zbWFsbFwtZGF0YVwtbGltaXRcZlIuICBUaHVzIGl0CitpcyBwb3NzaWJsZSBmb3IgdGhlIHNtYWxsIGRhdGEgYXJlYSByZWdpc3RlciB0byBiZSBcZihDV1wqKENgcjhcKihDJ1xmUiBpZiBib3RoCitcJlxmQlwtbWludFwtcmVnaXN0ZXI9NFxmUiBhbmQgXGZCXC1tcGlkXGZSIGFyZSBzcGVjaWZpZWQgb24gdGhlCitjb21tYW5kIGxpbmUuCisuU3AKK0J5IGRlZmF1bHQgdGhpcyBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLiAgVGhlIGRlZmF1bHQgY2FuIGJlIHJlc3RvcmVkCit2aWEgdGhlIFxmQlwtbW5vXC1waWRcZlIgY29tbWFuZC1saW5lIG9wdGlvbi4KKy5JUCAiXGZCXC1tbm9cLXdhcm5cLW11bHRpcGxlXC1mYXN0XC1pbnRlcnJ1cHRzXGZSIiA0CisuSVggSXRlbSAiLW1uby13YXJuLW11bHRpcGxlLWZhc3QtaW50ZXJydXB0cyIKKy5QRCAwCisuSVAgIlxmQlwtbXdhcm5cLW11bHRpcGxlXC1mYXN0XC1pbnRlcnJ1cHRzXGZSIiA0CisuSVggSXRlbSAiLW13YXJuLW11bHRpcGxlLWZhc3QtaW50ZXJydXB0cyIKKy5QRAorUHJldmVudHMgXHMtMUdDQ1xzMCBmcm9tIGlzc3VpbmcgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgaXQgZmluZHMgbW9yZSB0aGFuIG9uZQorZmFzdCBpbnRlcnJ1cHQgaGFuZGxlciB3aGVuIGl0IGlzIGNvbXBpbGluZyBhIGZpbGUuICBUaGUgZGVmYXVsdCBpcyB0bworaXNzdWUgYSB3YXJuaW5nIGZvciBlYWNoIGV4dHJhIGZhc3QgaW50ZXJydXB0IGhhbmRsZXIgZm91bmQsIGFzIHRoZSBccy0xUlhcczAKK29ubHkgc3VwcG9ydHMgb25lIHN1Y2ggaW50ZXJydXB0LgorLlBQCitcJlxmSU5vdGU6XGZSIFRoZSBnZW5lcmljIFxzLTFHQ0NcczAgY29tbWFuZC1saW5lIG9wdGlvbiBcZkJcLWZmaXhlZFwtXGZSXGZJcmVnXGZSCitoYXMgc3BlY2lhbCBzaWduaWZpY2FuY2UgdG8gdGhlIFxzLTFSWFxzMCBwb3J0IHdoZW4gdXNlZCB3aXRoIHRoZQorXCZcZihDV1wqKENgaW50ZXJydXB0XCooQydcZlIgZnVuY3Rpb24gYXR0cmlidXRlLiAgVGhpcyBhdHRyaWJ1dGUgaW5kaWNhdGVzIGEKK2Z1bmN0aW9uIGludGVuZGVkIHRvIHByb2Nlc3MgZmFzdCBpbnRlcnJ1cHRzLiAgXHMtMUdDQ1xzMCBlbnN1cmVzCit0aGF0IGl0IG9ubHkgdXNlcyB0aGUgcmVnaXN0ZXJzIFxmKENXXCooQ2ByMTBcKihDJ1xmUiwgXGYoQ1dcKihDYHIxMVwqKEMnXGZSLCBcZihDV1wqKENgcjEyXCooQydcZlIKK2FuZC9vciBcZihDV1wqKENgcjEzXCooQydcZlIgYW5kIG9ubHkgcHJvdmlkZWQgdGhhdCB0aGUgbm9ybWFsIHVzZSBvZiB0aGUKK2NvcnJlc3BvbmRpbmcgcmVnaXN0ZXJzIGhhdmUgYmVlbiByZXN0cmljdGVkIHZpYSB0aGUKK1wmXGZCXC1mZml4ZWRcLVxmUlxmSXJlZ1xmUiBvciBcZkJcLW1pbnRcLXJlZ2lzdGVyXGZSIGNvbW1hbmQtbGluZQorb3B0aW9ucy4KKy5QUAorXGZJUy8zOTAgYW5kIHpTZXJpZXMgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlMvMzkwIGFuZCB6U2VyaWVzIE9wdGlvbnMiCisuUFAKK1RoZXNlIGFyZSB0aGUgXGZCXC1tXGZSIG9wdGlvbnMgZGVmaW5lZCBmb3IgdGhlIFMvMzkwIGFuZCB6U2VyaWVzIGFyY2hpdGVjdHVyZS4KKy5JUCAiXGZCXC1taGFyZFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbWhhcmQtZmxvYXQiCisuUEQgMAorLklQICJcZkJcLW1zb2Z0XC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1mbG9hdCIKKy5QRAorVXNlIChkbyBub3QgdXNlKSB0aGUgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGFuZCByZWdpc3RlcnMKK2ZvciBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLiAgV2hlbiBcZkJcLW1zb2Z0XC1mbG9hdFxmUiBpcyBzcGVjaWZpZWQsCitmdW5jdGlvbnMgaW4gXGZJbGliZ2NjLmFcZlIgYXJlIHVzZWQgdG8gcGVyZm9ybSBmbG9hdGluZy1wb2ludAorb3BlcmF0aW9ucy4gIFdoZW4gXGZCXC1taGFyZFwtZmxvYXRcZlIgaXMgc3BlY2lmaWVkLCB0aGUgY29tcGlsZXIKK2dlbmVyYXRlcyBccy0xSUVFRVxzMCBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1oYXJkXC1kZnBcZlIiIDQKKy5JWCBJdGVtICItbWhhcmQtZGZwIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWhhcmRcLWRmcFxmUiIgNAorLklYIEl0ZW0gIi1tbm8taGFyZC1kZnAiCisuUEQKK1VzZSAoZG8gbm90IHVzZSkgdGhlIGhhcmR3YXJlIGRlY2ltYWwtZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIGZvcgorZGVjaW1hbC1mbG9hdGluZy1wb2ludCBvcGVyYXRpb25zLiAgV2hlbiBcZkJcLW1ub1wtaGFyZFwtZGZwXGZSIGlzCitzcGVjaWZpZWQsIGZ1bmN0aW9ucyBpbiBcZklsaWJnY2MuYVxmUiBhcmUgdXNlZCB0byBwZXJmb3JtCitkZWNpbWFsLWZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMuICBXaGVuIFxmQlwtbWhhcmRcLWRmcFxmUiBpcworc3BlY2lmaWVkLCB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIGRlY2ltYWwtZmxvYXRpbmctcG9pbnQgaGFyZHdhcmUKK2luc3RydWN0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIFxmQlwtbWFyY2g9ejlcLWVjXGZSIG9yIGhpZ2hlci4KKy5JUCAiXGZCXC1tbG9uZ1wtZG91YmxlXC02NFxmUiIgNAorLklYIEl0ZW0gIi1tbG9uZy1kb3VibGUtNjQiCisuUEQgMAorLklQICJcZkJcLW1sb25nXC1kb3VibGVcLTEyOFxmUiIgNAorLklYIEl0ZW0gIi1tbG9uZy1kb3VibGUtMTI4IgorLlBECitUaGVzZSBzd2l0Y2hlcyBjb250cm9sIHRoZSBzaXplIG9mIFxmKENXXCooQ2Bsb25nIGRvdWJsZVwqKEMnXGZSIHR5cGUuIEEgc2l6ZQorb2YgNjQgYml0cyBtYWtlcyB0aGUgXGYoQ1dcKihDYGxvbmcgZG91YmxlXCooQydcZlIgdHlwZSBlcXVpdmFsZW50IHRvIHRoZSBcZihDV1wqKENgZG91YmxlXCooQydcZlIKK3R5cGUuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWJhY2tjaGFpblxmUiIgNAorLklYIEl0ZW0gIi1tYmFja2NoYWluIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWJhY2tjaGFpblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYmFja2NoYWluIgorLlBECitTdG9yZSAoZG8gbm90IHN0b3JlKSB0aGUgYWRkcmVzcyBvZiB0aGUgY2FsbGVyJ3MgZnJhbWUgYXMgYmFja2NoYWluIHBvaW50ZXIKK2ludG8gdGhlIGNhbGxlZSdzIHN0YWNrIGZyYW1lLgorQSBiYWNrY2hhaW4gbWF5IGJlIG5lZWRlZCB0byBhbGxvdyBkZWJ1Z2dpbmcgdXNpbmcgdG9vbHMgdGhhdCBkbyBub3QgdW5kZXJzdGFuZAorXCZccy0xRFdBUkZcczAgMiBjYWxsIGZyYW1lIGluZm9ybWF0aW9uLgorV2hlbiBcZkJcLW1ub1wtcGFja2VkXC1zdGFja1xmUiBpcyBpbiBlZmZlY3QsIHRoZSBiYWNrY2hhaW4gcG9pbnRlciBpcyBzdG9yZWQKK2F0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIGZyYW1lOyB3aGVuIFxmQlwtbXBhY2tlZFwtc3RhY2tcZlIgaXMgaW4gZWZmZWN0LAordGhlIGJhY2tjaGFpbiBpcyBwbGFjZWQgaW50byB0aGUgdG9wbW9zdCB3b3JkIG9mIHRoZSA5Ni8xNjAgYnl0ZSByZWdpc3Rlcgorc2F2ZSBhcmVhLgorLlNwCitJbiBnZW5lcmFsLCBjb2RlIGNvbXBpbGVkIHdpdGggXGZCXC1tYmFja2NoYWluXGZSIGlzIGNhbGwtY29tcGF0aWJsZSB3aXRoCitjb2RlIGNvbXBpbGVkIHdpdGggXGZCXC1tbW9cLWJhY2tjaGFpblxmUjsgaG93ZXZlciwgdXNlIG9mIHRoZSBiYWNrY2hhaW4KK2ZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgdXN1YWxseSByZXF1aXJlcyB0aGF0IHRoZSB3aG9sZSBiaW5hcnkgaXMgYnVpbHQgd2l0aAorXCZcZkJcLW1iYWNrY2hhaW5cZlIuICBOb3RlIHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9mIFxmQlwtbWJhY2tjaGFpblxmUiwKK1wmXGZCXC1tcGFja2VkXC1zdGFja1xmUiBhbmQgXGZCXC1taGFyZFwtZmxvYXRcZlIgaXMgbm90IHN1cHBvcnRlZC4gIEluIG9yZGVyCit0byBidWlsZCBhIGxpbnV4IGtlcm5lbCB1c2UgXGZCXC1tc29mdFwtZmxvYXRcZlIuCisuU3AKK1RoZSBkZWZhdWx0IGlzIHRvIG5vdCBtYWludGFpbiB0aGUgYmFja2NoYWluLgorLklQICJcZkJcLW1wYWNrZWRcLXN0YWNrXGZSIiA0CisuSVggSXRlbSAiLW1wYWNrZWQtc3RhY2siCisuUEQgMAorLklQICJcZkJcLW1ub1wtcGFja2VkXC1zdGFja1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcGFja2VkLXN0YWNrIgorLlBECitVc2UgKGRvIG5vdCB1c2UpIHRoZSBwYWNrZWQgc3RhY2sgbGF5b3V0LiAgV2hlbiBcZkJcLW1ub1wtcGFja2VkXC1zdGFja1xmUiBpcworc3BlY2lmaWVkLCB0aGUgY29tcGlsZXIgdXNlcyB0aGUgYWxsIGZpZWxkcyBvZiB0aGUgOTYvMTYwIGJ5dGUgcmVnaXN0ZXIgc2F2ZQorYXJlYSBvbmx5IGZvciB0aGVpciBkZWZhdWx0IHB1cnBvc2U7IHVudXNlZCBmaWVsZHMgc3RpbGwgdGFrZSB1cCBzdGFjayBzcGFjZS4KK1doZW4gXGZCXC1tcGFja2VkXC1zdGFja1xmUiBpcyBzcGVjaWZpZWQsIHJlZ2lzdGVyIHNhdmUgc2xvdHMgYXJlIGRlbnNlbHkKK3BhY2tlZCBhdCB0aGUgdG9wIG9mIHRoZSByZWdpc3RlciBzYXZlIGFyZWE7IHVudXNlZCBzcGFjZSBpcyByZXVzZWQgZm9yIG90aGVyCitwdXJwb3NlcywgYWxsb3dpbmcgZm9yIG1vcmUgZWZmaWNpZW50IHVzZSBvZiB0aGUgYXZhaWxhYmxlIHN0YWNrIHNwYWNlLgorSG93ZXZlciwgd2hlbiBcZkJcLW1iYWNrY2hhaW5cZlIgaXMgYWxzbyBpbiBlZmZlY3QsIHRoZSB0b3Btb3N0IHdvcmQgb2YKK3RoZSBzYXZlIGFyZWEgaXMgYWx3YXlzIHVzZWQgdG8gc3RvcmUgdGhlIGJhY2tjaGFpbiwgYW5kIHRoZSByZXR1cm4gYWRkcmVzcworcmVnaXN0ZXIgaXMgYWx3YXlzIHNhdmVkIHR3byB3b3JkcyBiZWxvdyB0aGUgYmFja2NoYWluLgorLlNwCitBcyBsb25nIGFzIHRoZSBzdGFjayBmcmFtZSBiYWNrY2hhaW4gaXMgbm90IHVzZWQsIGNvZGUgZ2VuZXJhdGVkIHdpdGgKK1wmXGZCXC1tcGFja2VkXC1zdGFja1xmUiBpcyBjYWxsLWNvbXBhdGlibGUgd2l0aCBjb2RlIGdlbmVyYXRlZCB3aXRoCitcJlxmQlwtbW5vXC1wYWNrZWRcLXN0YWNrXGZSLiAgTm90ZSB0aGF0IHNvbWUgbm9uLUZTRiByZWxlYXNlcyBvZiBccy0xR0NDXHMwIDIuOTUgZm9yCitTLzM5MCBvciB6U2VyaWVzIGdlbmVyYXRlZCBjb2RlIHRoYXQgdXNlcyB0aGUgc3RhY2sgZnJhbWUgYmFja2NoYWluIGF0IHJ1bgordGltZSwgbm90IGp1c3QgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFN1Y2ggY29kZSBpcyBub3QgY2FsbC1jb21wYXRpYmxlCit3aXRoIGNvZGUgY29tcGlsZWQgd2l0aCBcZkJcLW1wYWNrZWRcLXN0YWNrXGZSLiAgQWxzbywgbm90ZSB0aGF0IHRoZQorY29tYmluYXRpb24gb2YgXGZCXC1tYmFja2NoYWluXGZSLAorXCZcZkJcLW1wYWNrZWRcLXN0YWNrXGZSIGFuZCBcZkJcLW1oYXJkXC1mbG9hdFxmUiBpcyBub3Qgc3VwcG9ydGVkLiAgSW4gb3JkZXIKK3RvIGJ1aWxkIGEgbGludXgga2VybmVsIHVzZSBcZkJcLW1zb2Z0XC1mbG9hdFxmUi4KKy5TcAorVGhlIGRlZmF1bHQgaXMgdG8gbm90IHVzZSB0aGUgcGFja2VkIHN0YWNrIGxheW91dC4KKy5JUCAiXGZCXC1tc21hbGxcLWV4ZWNcZlIiIDQKKy5JWCBJdGVtICItbXNtYWxsLWV4ZWMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtc21hbGxcLWV4ZWNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNtYWxsLWV4ZWMiCisuUEQKK0dlbmVyYXRlIChvciBkbyBub3QgZ2VuZXJhdGUpIGNvZGUgdXNpbmcgdGhlIFxmKENXXCooQ2BicmFzXCooQydcZlIgaW5zdHJ1Y3Rpb24KK3RvIGRvIHN1YnJvdXRpbmUgY2FsbHMuCitUaGlzIG9ubHkgd29ya3MgcmVsaWFibHkgaWYgdGhlIHRvdGFsIGV4ZWN1dGFibGUgc2l6ZSBkb2VzIG5vdAorZXhjZWVkIDY0ay4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgXGYoQ1dcKihDYGJhc3JcKihDJ1xmUiBpbnN0cnVjdGlvbiBpbnN0ZWFkLAord2hpY2ggZG9lcyBub3QgaGF2ZSB0aGlzIGxpbWl0YXRpb24uCisuSVAgIlxmQlwtbTY0XGZSIiA0CisuSVggSXRlbSAiLW02NCIKKy5QRCAwCisuSVAgIlxmQlwtbTMxXGZSIiA0CisuSVggSXRlbSAiLW0zMSIKKy5QRAorV2hlbiBcZkJcLW0zMVxmUiBpcyBzcGVjaWZpZWQsIGdlbmVyYXRlIGNvZGUgY29tcGxpYW50IHRvIHRoZQorR05VL0xpbnV4IGZvciBTLzM5MCBccy0xQUJJXHMwLiAgV2hlbiBcZkJcLW02NFxmUiBpcyBzcGVjaWZpZWQsIGdlbmVyYXRlCitjb2RlIGNvbXBsaWFudCB0byB0aGUgR05VL0xpbnV4IGZvciB6U2VyaWVzIFxzLTFBQklcczAuICBUaGlzIGFsbG93cyBccy0xR0NDXHMwIGluCitwYXJ0aWN1bGFyIHRvIGdlbmVyYXRlIDY0XC1iaXQgaW5zdHJ1Y3Rpb25zLiAgRm9yIHRoZSBcZkJzMzkwXGZSCit0YXJnZXRzLCB0aGUgZGVmYXVsdCBpcyBcZkJcLW0zMVxmUiwgd2hpbGUgdGhlIFxmQnMzOTB4XGZSCit0YXJnZXRzIGRlZmF1bHQgdG8gXGZCXC1tNjRcZlIuCisuSVAgIlxmQlwtbXphcmNoXGZSIiA0CisuSVggSXRlbSAiLW16YXJjaCIKKy5QRCAwCisuSVAgIlxmQlwtbWVzYVxmUiIgNAorLklYIEl0ZW0gIi1tZXNhIgorLlBECitXaGVuIFxmQlwtbXphcmNoXGZSIGlzIHNwZWNpZmllZCwgZ2VuZXJhdGUgY29kZSB1c2luZyB0aGUKK2luc3RydWN0aW9ucyBhdmFpbGFibGUgb24gei9BcmNoaXRlY3R1cmUuCitXaGVuIFxmQlwtbWVzYVxmUiBpcyBzcGVjaWZpZWQsIGdlbmVyYXRlIGNvZGUgdXNpbmcgdGhlCitpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIG9uIFxzLTFFU0EvMzkwXHMwLiAgTm90ZSB0aGF0IFxmQlwtbWVzYVxmUiBpcworbm90IHBvc3NpYmxlIHdpdGggXGZCXC1tNjRcZlIuCitXaGVuIGdlbmVyYXRpbmcgY29kZSBjb21wbGlhbnQgdG8gdGhlIEdOVS9MaW51eCBmb3IgUy8zOTAgXHMtMUFCSVxzMCwKK3RoZSBkZWZhdWx0IGlzIFxmQlwtbWVzYVxmUi4gIFdoZW4gZ2VuZXJhdGluZyBjb2RlIGNvbXBsaWFudAordG8gdGhlIEdOVS9MaW51eCBmb3IgelNlcmllcyBccy0xQUJJXHMwLCB0aGUgZGVmYXVsdCBpcyBcZkJcLW16YXJjaFxmUi4KKy5JUCAiXGZCXC1tbXZjbGVcZlIiIDQKKy5JWCBJdGVtICItbW12Y2xlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLW12Y2xlXGZSIiA0CisuSVggSXRlbSAiLW1uby1tdmNsZSIKKy5QRAorR2VuZXJhdGUgKG9yIGRvIG5vdCBnZW5lcmF0ZSkgY29kZSB1c2luZyB0aGUgXGYoQ1dcKihDYG12Y2xlXCooQydcZlIgaW5zdHJ1Y3Rpb24KK3RvIHBlcmZvcm0gYmxvY2sgbW92ZXMuICBXaGVuIFxmQlwtbW5vXC1tdmNsZVxmUiBpcyBzcGVjaWZpZWQsCit1c2UgYSBcZihDV1wqKENgbXZjXCooQydcZlIgbG9vcCBpbnN0ZWFkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCB1bmxlc3Mgb3B0aW1pemluZyBmb3IKK3NpemUuCisuSVAgIlxmQlwtbWRlYnVnXGZSIiA0CisuSVggSXRlbSAiLW1kZWJ1ZyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1kZWJ1Z1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tZGVidWciCisuUEQKK1ByaW50IChvciBkbyBub3QgcHJpbnQpIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gd2hlbiBjb21waWxpbmcuCitUaGUgZGVmYXVsdCBpcyB0byBub3QgcHJpbnQgZGVidWcgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtbWFyY2g9XGZSXGZJY3B1LXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbWFyY2g9Y3B1LXR5cGUiCitHZW5lcmF0ZSBjb2RlIHRoYXQgcnVucyBvbiBcZkljcHUtdHlwZVxmUiwgd2hpY2ggaXMgdGhlIG5hbWUgb2YgYSBzeXN0ZW0KK3JlcHJlc2VudGluZyBhIGNlcnRhaW4gcHJvY2Vzc29yIHR5cGUuICBQb3NzaWJsZSB2YWx1ZXMgZm9yCitcJlxmSWNwdS10eXBlXGZSIGFyZSBcZkJnNVxmUiwgXGZCZzZcZlIsIFxmQno5MDBcZlIsIFxmQno5OTBcZlIsCitcJlxmQno5XC0xMDlcZlIsIFxmQno5XC1lY1xmUiBhbmQgXGZCejEwXGZSLgorV2hlbiBnZW5lcmF0aW5nIGNvZGUgdXNpbmcgdGhlIGluc3RydWN0aW9ucyBhdmFpbGFibGUgb24gei9BcmNoaXRlY3R1cmUsCit0aGUgZGVmYXVsdCBpcyBcZkJcLW1hcmNoPXo5MDBcZlIuICBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzCitcJlxmQlwtbWFyY2g9ZzVcZlIuCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJY3B1LXR5cGVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9Y3B1LXR5cGUiCitUdW5lIHRvIFxmSWNwdS10eXBlXGZSIGV2ZXJ5dGhpbmcgYXBwbGljYWJsZSBhYm91dCB0aGUgZ2VuZXJhdGVkIGNvZGUsCitleGNlcHQgZm9yIHRoZSBccy0xQUJJXHMwIGFuZCB0aGUgc2V0IG9mIGF2YWlsYWJsZSBpbnN0cnVjdGlvbnMuCitUaGUgbGlzdCBvZiBcZkljcHUtdHlwZVxmUiB2YWx1ZXMgaXMgdGhlIHNhbWUgYXMgZm9yIFxmQlwtbWFyY2hcZlIuCitUaGUgZGVmYXVsdCBpcyB0aGUgdmFsdWUgdXNlZCBmb3IgXGZCXC1tYXJjaFxmUi4KKy5JUCAiXGZCXC1tdHBmXC10cmFjZVxmUiIgNAorLklYIEl0ZW0gIi1tdHBmLXRyYWNlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXRwZlwtdHJhY2VcZlIiIDQKKy5JWCBJdGVtICItbW5vLXRwZi10cmFjZSIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IGFkZHMgKGRvZXMgbm90IGFkZCkgaW4gXHMtMVRQRlxzMCBccy0xT1NcczAgc3BlY2lmaWMgYnJhbmNoZXMgdG8gdHJhY2UKK3JvdXRpbmVzIGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgVGhpcyBvcHRpb24gaXMgb2ZmIGJ5IGRlZmF1bHQsIGV2ZW4KK3doZW4gY29tcGlsaW5nIGZvciB0aGUgXHMtMVRQRlxzMCBccy0xT1NcczAuCisuSVAgIlxmQlwtbWZ1c2VkXC1tYWRkXGZSIiA0CisuSVggSXRlbSAiLW1mdXNlZC1tYWRkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZ1c2VkXC1tYWRkXGZSIiA0CisuSVggSXRlbSAiLW1uby1mdXNlZC1tYWRkIgorLlBECitHZW5lcmF0ZSBjb2RlIHRoYXQgdXNlcyAoZG9lcyBub3QgdXNlKSB0aGUgZmxvYXRpbmctcG9pbnQgbXVsdGlwbHkgYW5kCithY2N1bXVsYXRlIGluc3RydWN0aW9ucy4gIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgaWYKK2hhcmR3YXJlIGZsb2F0aW5nIHBvaW50IGlzIHVzZWQuCisuSVAgIlxmQlwtbXdhcm5cLWZyYW1lc2l6ZT1cZlJcZklmcmFtZXNpemVcZlIiIDQKKy5JWCBJdGVtICItbXdhcm4tZnJhbWVzaXplPWZyYW1lc2l6ZSIKK0VtaXQgYSB3YXJuaW5nIGlmIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGV4Y2VlZHMgdGhlIGdpdmVuIGZyYW1lIHNpemUuICBCZWNhdXNlCit0aGlzIGlzIGEgY29tcGlsZS10aW1lIGNoZWNrIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBhIHJlYWwgcHJvYmxlbSB3aGVuIHRoZSBwcm9ncmFtCitydW5zLiAgSXQgaXMgaW50ZW5kZWQgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgbW9zdCBwcm9iYWJseSBjYXVzZQorYSBzdGFjayBvdmVyZmxvdy4gIEl0IGlzIHVzZWZ1bCB0byBiZSB1c2VkIGluIGFuIGVudmlyb25tZW50IHdpdGggbGltaXRlZCBzdGFjaworc2l6ZSBlLmcuIHRoZSBsaW51eCBrZXJuZWwuCisuSVAgIlxmQlwtbXdhcm5cLWR5bmFtaWNzdGFja1xmUiIgNAorLklYIEl0ZW0gIi1td2Fybi1keW5hbWljc3RhY2siCitFbWl0IGEgd2FybmluZyBpZiB0aGUgZnVuY3Rpb24gY2FsbHMgXGYoQ1dcKihDYGFsbG9jYVwqKEMnXGZSIG9yIHVzZXMgZHluYW1pY2FsbHktc2l6ZWQKK2FycmF5cy4gIFRoaXMgaXMgZ2VuZXJhbGx5IGEgYmFkIGlkZWEgd2l0aCBhIGxpbWl0ZWQgc3RhY2sgc2l6ZS4KKy5JUCAiXGZCXC1tc3RhY2tcLWd1YXJkPVxmUlxmSXN0YWNrLWd1YXJkXGZSIiA0CisuSVggSXRlbSAiLW1zdGFjay1ndWFyZD1zdGFjay1ndWFyZCIKKy5QRCAwCisuSVAgIlxmQlwtbXN0YWNrXC1zaXplPVxmUlxmSXN0YWNrLXNpemVcZlIiIDQKKy5JWCBJdGVtICItbXN0YWNrLXNpemU9c3RhY2stc2l6ZSIKKy5QRAorSWYgdGhlc2Ugb3B0aW9ucyBhcmUgcHJvdmlkZWQgdGhlIFMvMzkwIGJhY2sgZW5kIGVtaXRzIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zIGluCit0aGUgZnVuY3Rpb24gcHJvbG9ndWUgdGhhdCB0cmlnZ2VyIGEgdHJhcCBpZiB0aGUgc3RhY2sgc2l6ZSBpcyBcZklzdGFjay1ndWFyZFxmUgorYnl0ZXMgYWJvdmUgdGhlIFxmSXN0YWNrLXNpemVcZlIgKHJlbWVtYmVyIHRoYXQgdGhlIHN0YWNrIG9uIFMvMzkwIGdyb3dzIGRvd253YXJkKS4KK0lmIHRoZSBcZklzdGFjay1ndWFyZFxmUiBvcHRpb24gaXMgb21pdHRlZCB0aGUgc21hbGxlc3QgcG93ZXIgb2YgMiBsYXJnZXIgdGhhbgordGhlIGZyYW1lIHNpemUgb2YgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIGlzIGNob3Nlbi4KK1RoZXNlIG9wdGlvbnMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gaGVscCBkZWJ1Z2dpbmcgc3RhY2sgb3ZlcmZsb3cgcHJvYmxlbXMuCitUaGUgYWRkaXRpb25hbGx5IGVtaXR0ZWQgY29kZSBjYXVzZXMgb25seSBsaXR0bGUgb3ZlcmhlYWQgYW5kIGhlbmNlIGNhbiBhbHNvIGJlCit1c2VkIGluIHByb2R1Y3Rpb24tbGlrZSBzeXN0ZW1zIHdpdGhvdXQgZ3JlYXRlciBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4gIFRoZSBnaXZlbgordmFsdWVzIGhhdmUgdG8gYmUgZXhhY3QgcG93ZXJzIG9mIDIgYW5kIFxmSXN0YWNrLXNpemVcZlIgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbgorXCZcZklzdGFjay1ndWFyZFxmUiB3aXRob3V0IGV4Y2VlZGluZyA2NGsuCitJbiBvcmRlciB0byBiZSBlZmZpY2llbnQgdGhlIGV4dHJhIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgc3RhY2sgc3RhcnRzCithdCBhbiBhZGRyZXNzIGFsaWduZWQgdG8gdGhlIHZhbHVlIGdpdmVuIGJ5IFxmSXN0YWNrLXNpemVcZlIuCitUaGUgXGZJc3RhY2stZ3VhcmRcZlIgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBcZklzdGFjay1zaXplXGZSLgorLlBQCitcZklTY29yZSBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiU2NvcmUgT3B0aW9ucyIKKy5QUAorVGhlc2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgU2NvcmUgaW1wbGVtZW50YXRpb25zOgorLklQICJcZkJcLW1lYlxmUiIgNAorLklYIEl0ZW0gIi1tZWIiCitDb21waWxlIGNvZGUgZm9yIGJpZy1lbmRpYW4gbW9kZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbWVsXGZSIiA0CisuSVggSXRlbSAiLW1lbCIKK0NvbXBpbGUgY29kZSBmb3IgbGl0dGxlLWVuZGlhbiBtb2RlLgorLklQICJcZkJcLW1uaHdsb29wXGZSIiA0CisuSVggSXRlbSAiLW1uaHdsb29wIgorRGlzYWJsZSBnZW5lcmF0aW9uIG9mIFxmKENXXCooQ2BiY256XCooQydcZlIgaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW11bHNcZlIiIDQKKy5JWCBJdGVtICItbXVscyIKK0VuYWJsZSBnZW5lcmF0aW9uIG9mIHVuYWxpZ25lZCBsb2FkIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbW1hY1xmUiIgNAorLklYIEl0ZW0gIi1tbWFjIgorRW5hYmxlIHRoZSB1c2Ugb2YgbXVsdGlwbHktYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMuIERpc2FibGVkIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbXNjb3JlNVxmUiIgNAorLklYIEl0ZW0gIi1tc2NvcmU1IgorU3BlY2lmeSB0aGUgXHMtMVNDT1JFNVxzMCBhcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKy5JUCAiXGZCXC1tc2NvcmU1dVxmUiIgNAorLklYIEl0ZW0gIi1tc2NvcmU1dSIKK1NwZWNpZnkgdGhlIFxzLTFTQ09SRTVVXHMwIG9mIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorLklQICJcZkJcLW1zY29yZTdcZlIiIDQKKy5JWCBJdGVtICItbXNjb3JlNyIKK1NwZWNpZnkgdGhlIFxzLTFTQ09SRTdcczAgYXMgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuSVAgIlxmQlwtbXNjb3JlN2RcZlIiIDQKKy5JWCBJdGVtICItbXNjb3JlN2QiCitTcGVjaWZ5IHRoZSBccy0xU0NPUkU3RFxzMCBhcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKy5QUAorXGZJXHMtMVNIXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJTSCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIFxzLTFTSFxzMCBpbXBsZW1lbnRhdGlvbnM6CisuSVAgIlxmQlwtbTFcZlIiIDQKKy5JWCBJdGVtICItbTEiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgXHMtMVNIMVxzMC4KKy5JUCAiXGZCXC1tMlxmUiIgNAorLklYIEl0ZW0gIi1tMiIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBccy0xU0gyXHMwLgorLklQICJcZkJcLW0yZVxmUiIgNAorLklYIEl0ZW0gIi1tMmUiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0gyZS4KKy5JUCAiXGZCXC1tMmFcLW5vZnB1XGZSIiA0CisuSVggSXRlbSAiLW0yYS1ub2ZwdSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDJhIHdpdGhvdXQgXHMtMUZQVVxzMCwgb3IgZm9yIGEgU0gyYVwtRlBVIGluIHN1Y2ggYSB3YXkKK3RoYXQgdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgaXMgbm90IHVzZWQuCisuSVAgIlxmQlwtbTJhXC1zaW5nbGVcLW9ubHlcZlIiIDQKKy5JWCBJdGVtICItbTJhLXNpbmdsZS1vbmx5IgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFNIMmFcLUZQVSwgaW4gc3VjaCBhIHdheSB0aGF0IG5vIGRvdWJsZS1wcmVjaXNpb24KK2Zsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXJlIHVzZWQuCisuSVAgIlxmQlwtbTJhXC1zaW5nbGVcZlIiIDQKKy5JWCBJdGVtICItbTJhLXNpbmdsZSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDJhXC1GUFUgYXNzdW1pbmcgdGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgaXMgaW4KK3NpbmdsZS1wcmVjaXNpb24gbW9kZSBieSBkZWZhdWx0LgorLklQICJcZkJcLW0yYVxmUiIgNAorLklYIEl0ZW0gIi1tMmEiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0gyYVwtRlBVIGFzc3VtaW5nIHRoZSBmbG9hdGluZy1wb2ludCB1bml0IGlzIGluCitkb3VibGUtcHJlY2lzaW9uIG1vZGUgYnkgZGVmYXVsdC4KKy5JUCAiXGZCXC1tM1xmUiIgNAorLklYIEl0ZW0gIi1tMyIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBccy0xU0gzXHMwLgorLklQICJcZkJcLW0zZVxmUiIgNAorLklYIEl0ZW0gIi1tM2UiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0gzZS4KKy5JUCAiXGZCXC1tNFwtbm9mcHVcZlIiIDQKKy5JWCBJdGVtICItbTQtbm9mcHUiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgXHMtMVNINFxzMCB3aXRob3V0IGEgZmxvYXRpbmctcG9pbnQgdW5pdC4KKy5JUCAiXGZCXC1tNFwtc2luZ2xlXC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLW00LXNpbmdsZS1vbmx5IgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFxzLTFTSDRcczAgd2l0aCBhIGZsb2F0aW5nLXBvaW50IHVuaXQgdGhhdCBvbmx5CitzdXBwb3J0cyBzaW5nbGUtcHJlY2lzaW9uIGFyaXRobWV0aWMuCisuSVAgIlxmQlwtbTRcLXNpbmdsZVxmUiIgNAorLklYIEl0ZW0gIi1tNC1zaW5nbGUiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgXHMtMVNINFxzMCBhc3N1bWluZyB0aGUgZmxvYXRpbmctcG9pbnQgdW5pdCBpcyBpbgorc2luZ2xlLXByZWNpc2lvbiBtb2RlIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbTRcZlIiIDQKKy5JWCBJdGVtICItbTQiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgXHMtMVNINFxzMC4KKy5JUCAiXGZCXC1tNGFcLW5vZnB1XGZSIiA0CisuSVggSXRlbSAiLW00YS1ub2ZwdSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDRhbFwtZHNwLCBvciBmb3IgYSBTSDRhIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUKK2Zsb2F0aW5nLXBvaW50IHVuaXQgaXMgbm90IHVzZWQuCisuSVAgIlxmQlwtbTRhXC1zaW5nbGVcLW9ubHlcZlIiIDQKKy5JWCBJdGVtICItbTRhLXNpbmdsZS1vbmx5IgorR2VuZXJhdGUgY29kZSBmb3IgdGhlIFNINGEsIGluIHN1Y2ggYSB3YXkgdGhhdCBubyBkb3VibGUtcHJlY2lzaW9uCitmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZSB1c2VkLgorLklQICJcZkJcLW00YVwtc2luZ2xlXGZSIiA0CisuSVggSXRlbSAiLW00YS1zaW5nbGUiCitHZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0g0YSBhc3N1bWluZyB0aGUgZmxvYXRpbmctcG9pbnQgdW5pdCBpcyBpbgorc2luZ2xlLXByZWNpc2lvbiBtb2RlIGJ5IGRlZmF1bHQuCisuSVAgIlxmQlwtbTRhXGZSIiA0CisuSVggSXRlbSAiLW00YSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBTSDRhLgorLklQICJcZkJcLW00YWxcZlIiIDQKKy5JWCBJdGVtICItbTRhbCIKK1NhbWUgYXMgXGZCXC1tNGFcLW5vZnB1XGZSLCBleGNlcHQgdGhhdCBpdCBpbXBsaWNpdGx5IHBhc3NlcworXCZcZkJcLWRzcFxmUiB0byB0aGUgYXNzZW1ibGVyLiAgXHMtMUdDQ1xzMCBkb2Vzbid0IGdlbmVyYXRlIGFueSBccy0xRFNQXHMwCitpbnN0cnVjdGlvbnMgYXQgdGhlIG1vbWVudC4KKy5JUCAiXGZCXC1tYlxmUiIgNAorLklYIEl0ZW0gIi1tYiIKK0NvbXBpbGUgY29kZSBmb3IgdGhlIHByb2Nlc3NvciBpbiBiaWctZW5kaWFuIG1vZGUuCisuSVAgIlxmQlwtbWxcZlIiIDQKKy5JWCBJdGVtICItbWwiCitDb21waWxlIGNvZGUgZm9yIHRoZSBwcm9jZXNzb3IgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgorLklQICJcZkJcLW1kYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbWRhbGlnbiIKK0FsaWduIGRvdWJsZXMgYXQgNjRcLWJpdCBib3VuZGFyaWVzLiAgTm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUgY2FsbGluZworY29udmVudGlvbnMsIGFuZCB0aHVzIHNvbWUgZnVuY3Rpb25zIGZyb20gdGhlIHN0YW5kYXJkIEMgbGlicmFyeSBkbworbm90IHdvcmsgdW5sZXNzIHlvdSByZWNvbXBpbGUgaXQgZmlyc3Qgd2l0aCBcZkJcLW1kYWxpZ25cZlIuCisuSVAgIlxmQlwtbXJlbGF4XGZSIiA0CisuSVggSXRlbSAiLW1yZWxheCIKK1Nob3J0ZW4gc29tZSBhZGRyZXNzIHJlZmVyZW5jZXMgYXQgbGluayB0aW1lLCB3aGVuIHBvc3NpYmxlOyB1c2VzIHRoZQorbGlua2VyIG9wdGlvbiBcZkJcLXJlbGF4XGZSLgorLklQICJcZkJcLW1iaWd0YWJsZVxmUiIgNAorLklYIEl0ZW0gIi1tYmlndGFibGUiCitVc2UgMzJcLWJpdCBvZmZzZXRzIGluIFxmKENXXCooQ2Bzd2l0Y2hcKihDJ1xmUiB0YWJsZXMuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UKKzE2XC1iaXQgb2Zmc2V0cy4KKy5JUCAiXGZCXC1tYml0b3BzXGZSIiA0CisuSVggSXRlbSAiLW1iaXRvcHMiCitFbmFibGUgdGhlIHVzZSBvZiBiaXQgbWFuaXB1bGF0aW9uIGluc3RydWN0aW9ucyBvbiBccy0xU0gyQVxzMC4KKy5JUCAiXGZCXC1tZm1vdmRcZlIiIDQKKy5JWCBJdGVtICItbWZtb3ZkIgorRW5hYmxlIHRoZSB1c2Ugb2YgdGhlIGluc3RydWN0aW9uIFxmKENXXCooQ2BmbW92ZFwqKEMnXGZSLiAgQ2hlY2sgXGZCXC1tZGFsaWduXGZSIGZvcgorYWxpZ25tZW50IGNvbnN0cmFpbnRzLgorLklQICJcZkJcLW1oaXRhY2hpXGZSIiA0CisuSVggSXRlbSAiLW1oaXRhY2hpIgorQ29tcGx5IHdpdGggdGhlIGNhbGxpbmcgY29udmVudGlvbnMgZGVmaW5lZCBieSBSZW5lc2FzLgorLklQICJcZkJcLW1yZW5lc2FzXGZSIiA0CisuSVggSXRlbSAiLW1yZW5lc2FzIgorQ29tcGx5IHdpdGggdGhlIGNhbGxpbmcgY29udmVudGlvbnMgZGVmaW5lZCBieSBSZW5lc2FzLgorLklQICJcZkJcLW1ub1wtcmVuZXNhc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVuZXNhcyIKK0NvbXBseSB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGRlZmluZWQgZm9yIFxzLTFHQ0NcczAgYmVmb3JlIHRoZSBSZW5lc2FzCitjb252ZW50aW9ucyB3ZXJlIGF2YWlsYWJsZS4gIFRoaXMgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IGZvciBhbGwKK3RhcmdldHMgb2YgdGhlIFxzLTFTSFxzMCB0b29sY2hhaW4uCisuSVAgIlxmQlwtbW5vbWFjc2F2ZVxmUiIgNAorLklYIEl0ZW0gIi1tbm9tYWNzYXZlIgorTWFyayB0aGUgXGYoQ1dcKihDYE1BQ1wqKEMnXGZSIHJlZ2lzdGVyIGFzIGNhbGwtY2xvYmJlcmVkLCBldmVuIGlmCitcJlxmQlwtbWhpdGFjaGlcZlIgaXMgZ2l2ZW4uCisuSVAgIlxmQlwtbWllZWVcZlIiIDQKKy5JWCBJdGVtICItbWllZWUiCisuUEQgMAorLklQICJcZkJcLW1ub1wtaWVlZVxmUiIgNAorLklYIEl0ZW0gIi1tbm8taWVlZSIKKy5QRAorQ29udHJvbCB0aGUgXHMtMUlFRUVcczAgY29tcGxpYW5jZSBvZiBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucywgd2hpY2ggYWZmZWN0cyB0aGUKK2hhbmRsaW5nIG9mIGNhc2VzIHdoZXJlIHRoZSByZXN1bHQgb2YgYSBjb21wYXJpc29uIGlzIHVub3JkZXJlZC4gIEJ5IGRlZmF1bHQKK1wmXGZCXC1taWVlZVxmUiBpcyBpbXBsaWNpdGx5IGVuYWJsZWQuICBJZiBcZkJcLWZmaW5pdGVcLW1hdGhcLW9ubHlcZlIgaXMKK2VuYWJsZWQgXGZCXC1tbm9cLWllZWVcZlIgaXMgaW1wbGljaXRseSBzZXQsIHdoaWNoIHJlc3VsdHMgaW4gZmFzdGVyCitmbG9hdGluZy1wb2ludCBncmVhdGVyLWVxdWFsIGFuZCBsZXNzLWVxdWFsIGNvbXBhcmlzb25zLiAgVGhlIGltcGxjaXQgc2V0dGluZ3MKK2NhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcgZWl0aGVyIFxmQlwtbWllZWVcZlIgb3IgXGZCXC1tbm9cLWllZWVcZlIuCisuSVAgIlxmQlwtbWlubGluZVwtaWNfaW52YWxpZGF0ZVxmUiIgNAorLklYIEl0ZW0gIi1taW5saW5lLWljX2ludmFsaWRhdGUiCitJbmxpbmUgY29kZSB0byBpbnZhbGlkYXRlIGluc3RydWN0aW9uIGNhY2hlIGVudHJpZXMgYWZ0ZXIgc2V0dGluZyB1cAorbmVzdGVkIGZ1bmN0aW9uIHRyYW1wb2xpbmVzLgorVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBcZkJcLW11c2VybW9kZVxmUiBpcyBpbiBlZmZlY3QgYW5kIHRoZSBzZWxlY3RlZAorY29kZSBnZW5lcmF0aW9uIG9wdGlvbiAoZS5nLiBcZkJcLW00XGZSKSBkb2VzIG5vdCBhbGxvdyB0aGUgdXNlIG9mIHRoZSBcZihDV1wqKENgaWNiaVwqKEMnXGZSCitpbnN0cnVjdGlvbi4KK0lmIHRoZSBzZWxlY3RlZCBjb2RlIGdlbmVyYXRpb24gb3B0aW9uIGRvZXMgbm90IGFsbG93IHRoZSB1c2Ugb2YgdGhlIFxmKENXXCooQ2BpY2JpXCooQydcZlIKK2luc3RydWN0aW9uLCBhbmQgXGZCXC1tdXNlcm1vZGVcZlIgaXMgbm90IGluIGVmZmVjdCwgdGhlIGlubGluZWQgY29kZQorbWFuaXB1bGF0ZXMgdGhlIGluc3RydWN0aW9uIGNhY2hlIGFkZHJlc3MgYXJyYXkgZGlyZWN0bHkgd2l0aCBhbiBhc3NvY2lhdGl2ZQord3JpdGUuICBUaGlzIG5vdCBvbmx5IHJlcXVpcmVzIHByaXZpbGVnZWQgbW9kZSBhdCBydW4gdGltZSwgYnV0IGl0IGFsc28KK2ZhaWxzIGlmIHRoZSBjYWNoZSBsaW5lIGhhZCBiZWVuIG1hcHBlZCB2aWEgdGhlIFxzLTFUTEJcczAgYW5kIGhhcyBiZWNvbWUgdW5tYXBwZWQuCisuSVAgIlxmQlwtbWlzaXplXGZSIiA0CisuSVggSXRlbSAiLW1pc2l6ZSIKK0R1bXAgaW5zdHJ1Y3Rpb24gc2l6ZSBhbmQgbG9jYXRpb24gaW4gdGhlIGFzc2VtYmx5IGNvZGUuCisuSVAgIlxmQlwtbXBhZHN0cnVjdFxmUiIgNAorLklYIEl0ZW0gIi1tcGFkc3RydWN0IgorVGhpcyBvcHRpb24gaXMgZGVwcmVjYXRlZC4gIEl0IHBhZHMgc3RydWN0dXJlcyB0byBtdWx0aXBsZSBvZiA0IGJ5dGVzLAord2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIFxzLTFTSFxzMCBccy0xQUJJXHMwLgorLklQICJcZkJcLW1hdG9taWNcLW1vZGVsPVxmUlxmSW1vZGVsXGZSIiA0CisuSVggSXRlbSAiLW1hdG9taWMtbW9kZWw9bW9kZWwiCitTZXRzIHRoZSBtb2RlbCBvZiBhdG9taWMgb3BlcmF0aW9ucyBhbmQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFzIGEgY29tbWEKK3NlcGFyYXRlZCBsaXN0LiAgRm9yIGRldGFpbHMgb24gdGhlIGF0b21pYyBidWlsdC1pbiBmdW5jdGlvbnMgc2VlCitcJlxmQl9cfF9hdG9taWMgQnVpbHRpbnNcZlIuICBUaGUgZm9sbG93aW5nIG1vZGVscyBhbmQgcGFyYW1ldGVycyBhcmUgc3VwcG9ydGVkOgorLlJTIDQKKy5JUCAiXGZCbm9uZVxmUiIgNAorLklYIEl0ZW0gIm5vbmUiCitEaXNhYmxlIGNvbXBpbGVyIGdlbmVyYXRlZCBhdG9taWMgc2VxdWVuY2VzIGFuZCBlbWl0IGxpYnJhcnkgY2FsbHMgZm9yIGF0b21pYworb3BlcmF0aW9ucy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIHRhcmdldCBpcyBub3QgXGYoQ1dcKihDYHNoXC0qXC1saW51eCpcKihDJ1xmUi4KKy5JUCAiXGZCc29mdC1ndXNhXGZSIiA0CisuSVggSXRlbSAic29mdC1ndXNhIgorR2VuZXJhdGUgR05VL0xpbnV4IGNvbXBhdGlibGUgZ1VTQSBzb2Z0d2FyZSBhdG9taWMgc2VxdWVuY2VzIGZvciB0aGUgYXRvbWljCitidWlsdC1pbiBmdW5jdGlvbnMuICBUaGUgZ2VuZXJhdGVkIGF0b21pYyBzZXF1ZW5jZXMgcmVxdWlyZSBhZGRpdGlvbmFsIHN1cHBvcnQKK2Zyb20gdGhlIGludGVycnVwdC9leGNlcHRpb24gaGFuZGxpbmcgY29kZSBvZiB0aGUgc3lzdGVtIGFuZCBhcmUgb25seSBzdWl0YWJsZQorZm9yIFNIMyogYW5kIFNINCogc2luZ2xlLWNvcmUgc3lzdGVtcy4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuCit0aGUgdGFyZ2V0IGlzIFxmKENXXCooQ2BzaFwtKlwtbGludXgqXCooQydcZlIgYW5kIFNIMyogb3IgU0g0Ki4gIFdoZW4gdGhlIHRhcmdldCBpcyBccy0xU0g0QVxzMCwKK3RoaXMgb3B0aW9uIHdpbGwgYWxzbyBwYXJ0aWFsbHkgdXRpbGl6ZSB0aGUgaGFyZHdhcmUgYXRvbWljIGluc3RydWN0aW9ucworXCZcZihDV1wqKENgbW92bGkubFwqKEMnXGZSIGFuZCBcZihDV1wqKENgbW92Y28ubFwqKEMnXGZSIHRvIGNyZWF0ZSBtb3JlIGVmZmljaWVudCBjb2RlLCB1bmxlc3MKK1wmXGZCc3RyaWN0XGZSIGlzIHNwZWNpZmllZC4KKy5JUCAiXGZCc29mdC10Y2JcZlIiIDQKKy5JWCBJdGVtICJzb2Z0LXRjYiIKK0dlbmVyYXRlIHNvZnR3YXJlIGF0b21pYyBzZXF1ZW5jZXMgdGhhdCB1c2UgYSB2YXJpYWJsZSBpbiB0aGUgdGhyZWFkIGNvbnRyb2wKK2Jsb2NrLiAgVGhpcyBpcyBhIHZhcmlhdGlvbiBvZiB0aGUgZ1VTQSBzZXF1ZW5jZXMgd2hpY2ggY2FuIGFsc28gYmUgdXNlZCBvbgorU0gxKiBhbmQgU0gyKiB0YXJnZXRzLiAgVGhlIGdlbmVyYXRlZCBhdG9taWMgc2VxdWVuY2VzIHJlcXVpcmUgYWRkaXRpb25hbAorc3VwcG9ydCBmcm9tIHRoZSBpbnRlcnJ1cHQvZXhjZXB0aW9uIGhhbmRsaW5nIGNvZGUgb2YgdGhlIHN5c3RlbSBhbmQgYXJlIG9ubHkKK3N1aXRhYmxlIGZvciBzaW5nbGUtY29yZSBzeXN0ZW1zLiAgV2hlbiB1c2luZyB0aGlzIG1vZGVsLCB0aGUgXGZCZ2JyXC1vZmZzZXQ9XGZSCitwYXJhbWV0ZXIgaGFzIHRvIGJlIHNwZWNpZmllZCBhcyB3ZWxsLgorLklQICJcZkJzb2Z0LWltYXNrXGZSIiA0CisuSVggSXRlbSAic29mdC1pbWFzayIKK0dlbmVyYXRlIHNvZnR3YXJlIGF0b21pYyBzZXF1ZW5jZXMgdGhhdCB0ZW1wb3JhcmlseSBkaXNhYmxlIGludGVycnVwdHMgYnkKK3NldHRpbmcgXGYoQ1dcKihDYFNSLklNQVNLID0gMTExMVwqKEMnXGZSLiAgVGhpcyBtb2RlbCB3b3JrcyBvbmx5IHdoZW4gdGhlIHByb2dyYW0gcnVucworaW4gcHJpdmlsZWdlZCBtb2RlIGFuZCBpcyBvbmx5IHN1aXRhYmxlIGZvciBzaW5nbGUtY29yZSBzeXN0ZW1zLiAgQWRkaXRpb25hbAorc3VwcG9ydCBmcm9tIHRoZSBpbnRlcnJ1cHQvZXhjZXB0aW9uIGhhbmRsaW5nIGNvZGUgb2YgdGhlIHN5c3RlbSBpcyBub3QKK3JlcXVpcmVkLiAgVGhpcyBtb2RlbCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUgdGFyZ2V0IGlzCitcJlxmKENXXCooQ2BzaFwtKlwtbGludXgqXCooQydcZlIgYW5kIFNIMSogb3IgU0gyKi4KKy5JUCAiXGZCaGFyZC1sbGNzXGZSIiA0CisuSVggSXRlbSAiaGFyZC1sbGNzIgorR2VuZXJhdGUgaGFyZHdhcmUgYXRvbWljIHNlcXVlbmNlcyB1c2luZyB0aGUgXGYoQ1dcKihDYG1vdmxpLmxcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYG1vdmNvLmxcKihDJ1xmUgoraW5zdHJ1Y3Rpb25zIG9ubHkuICBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIG9uIFxzLTFTSDRBXHMwIGFuZCBpcyBzdWl0YWJsZSBmb3IKK211bHRpLWNvcmUgc3lzdGVtcy4gIFNpbmNlIHRoZSBoYXJkd2FyZSBpbnN0cnVjdGlvbnMgc3VwcG9ydCBvbmx5IDMyIGJpdCBhdG9taWMKK3ZhcmlhYmxlcyBhY2Nlc3MgdG8gOCBvciAxNiBiaXQgdmFyaWFibGVzIGlzIGVtdWxhdGVkIHdpdGggMzIgYml0IGFjY2Vzc2VzLgorQ29kZSBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uIHdpbGwgYWxzbyBiZSBjb21wYXRpYmxlIHdpdGggb3RoZXIgc29mdHdhcmUKK2F0b21pYyBtb2RlbCBpbnRlcnJ1cHQvZXhjZXB0aW9uIGhhbmRsaW5nIHN5c3RlbXMgaWYgZXhlY3V0ZWQgb24gYW4gXHMtMVNINEFcczAKK3N5c3RlbS4gIEFkZGl0aW9uYWwgc3VwcG9ydCBmcm9tIHRoZSBpbnRlcnJ1cHQvZXhjZXB0aW9uIGhhbmRsaW5nIGNvZGUgb2YgdGhlCitzeXN0ZW0gaXMgbm90IHJlcXVpcmVkIGZvciB0aGlzIG1vZGVsLgorLklQICJcZkJnYnJcLW9mZnNldD1cZlIiIDQKKy5JWCBJdGVtICJnYnItb2Zmc2V0PSIKK1RoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgb2Zmc2V0IGluIGJ5dGVzIG9mIHRoZSB2YXJpYWJsZSBpbiB0aGUgdGhyZWFkCitjb250cm9sIGJsb2NrIHN0cnVjdHVyZSB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBnZW5lcmF0ZWQgYXRvbWljIHNlcXVlbmNlcword2hlbiB0aGUgXGZCc29mdC10Y2JcZlIgbW9kZWwgaGFzIGJlZW4gc2VsZWN0ZWQuICBGb3Igb3RoZXIgbW9kZWxzIHRoaXMKK3BhcmFtZXRlciBpcyBpZ25vcmVkLiAgVGhlIHNwZWNpZmllZCB2YWx1ZSBtdXN0IGJlIGFuIGludGVnZXIgbXVsdGlwbGUgb2YgZm91cgorYW5kIGluIHRoZSByYW5nZSAwXC0xMDIwLgorLklQICJcZkJzdHJpY3RcZlIiIDQKKy5JWCBJdGVtICJzdHJpY3QiCitUaGlzIHBhcmFtZXRlciBwcmV2ZW50cyBtaXhlZCB1c2FnZSBvZiBtdWx0aXBsZSBhdG9taWMgbW9kZWxzLCBldmVuIHRob3VnaCB0aGV5Cit3b3VsZCBiZSBjb21wYXRpYmxlLCBhbmQgd2lsbCBtYWtlIHRoZSBjb21waWxlciBnZW5lcmF0ZSBhdG9taWMgc2VxdWVuY2VzIG9mIHRoZQorc3BlY2lmaWVkIG1vZGVsIG9ubHkuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1tdGFzXGZSIiA0CisuSVggSXRlbSAiLW10YXMiCitHZW5lcmF0ZSB0aGUgXGYoQ1dcKihDYHRhcy5iXCooQydcZlIgb3Bjb2RlIGZvciBcZihDV1wqKENgX1x8X2F0b21pY190ZXN0X2FuZF9zZXRcKihDJ1xmUi4KK05vdGljZSB0aGF0IGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBoYXJkd2FyZSBhbmQgc29mdHdhcmUgY29uZmlndXJhdGlvbgordGhpcyBjYW4gZGVncmFkZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGR1ZSB0byB0aGUgb3BlcmFuZCBjYWNoZSBsaW5lIGZsdXNoZXMKK3RoYXQgYXJlIGltcGxpZWQgYnkgdGhlIFxmKENXXCooQ2B0YXMuYlwqKEMnXGZSIGluc3RydWN0aW9uLiAgT24gbXVsdGktY29yZSBccy0xU0g0QVxzMAorcHJvY2Vzc29ycyB0aGUgXGYoQ1dcKihDYHRhcy5iXCooQydcZlIgaW5zdHJ1Y3Rpb24gbXVzdCBiZSB1c2VkIHdpdGggY2F1dGlvbiBzaW5jZSBpdAorY2FuIHJlc3VsdCBpbiBkYXRhIGNvcnJ1cHRpb24gZm9yIGNlcnRhaW4gY2FjaGUgY29uZmlndXJhdGlvbnMuCisuSVAgIlxmQlwtbXNwYWNlXGZSIiA0CisuSVggSXRlbSAiLW1zcGFjZSIKK09wdGltaXplIGZvciBzcGFjZSBpbnN0ZWFkIG9mIHNwZWVkLiAgSW1wbGllZCBieSBcZkJcLU9zXGZSLgorLklQICJcZkJcLW1wcmVmZXJnb3RcZlIiIDQKKy5JWCBJdGVtICItbXByZWZlcmdvdCIKK1doZW4gZ2VuZXJhdGluZyBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlLCBlbWl0IGZ1bmN0aW9uIGNhbGxzIHVzaW5nCit0aGUgR2xvYmFsIE9mZnNldCBUYWJsZSBpbnN0ZWFkIG9mIHRoZSBQcm9jZWR1cmUgTGlua2FnZSBUYWJsZS4KKy5JUCAiXGZCXC1tdXNlcm1vZGVcZlIiIDQKKy5JWCBJdGVtICItbXVzZXJtb2RlIgorRG9uJ3QgZ2VuZXJhdGUgcHJpdmlsZWdlZCBtb2RlIG9ubHkgY29kZS4gIFRoaXMgb3B0aW9uCitpbXBsaWVzIFxmQlwtbW5vXC1pbmxpbmVcLWljX2ludmFsaWRhdGVcZlIKK2lmIHRoZSBpbmxpbmVkIGNvZGUgd291bGQgbm90IHdvcmsgaW4gdXNlciBtb2RlLgorVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoZSB0YXJnZXQgaXMgXGYoQ1dcKihDYHNoXC0qXC1saW51eCpcKihDJ1xmUi4KKy5JUCAiXGZCXC1tdWx0Y29zdD1cZlJcZkludW1iZXJcZlIiIDQKKy5JWCBJdGVtICItbXVsdGNvc3Q9bnVtYmVyIgorU2V0IHRoZSBjb3N0IHRvIGFzc3VtZSBmb3IgYSBtdWx0aXBseSBpbnNuLgorLklQICJcZkJcLW1kaXY9XGZSXGZJc3RyYXRlZ3lcZlIiIDQKKy5JWCBJdGVtICItbWRpdj1zdHJhdGVneSIKK1NldCB0aGUgZGl2aXNpb24gc3RyYXRlZ3kgdG8gYmUgdXNlZCBmb3IgaW50ZWdlciBkaXZpc2lvbiBvcGVyYXRpb25zLgorRm9yIFNIbWVkaWEgXGZJc3RyYXRlZ3lcZlIgY2FuIGJlIG9uZSBvZjoKKy5SUyA0CisuSVAgIlxmQmZwXGZSIiA0CisuSVggSXRlbSAiZnAiCitQZXJmb3JtcyB0aGUgb3BlcmF0aW9uIGluIGZsb2F0aW5nIHBvaW50LiAgVGhpcyBoYXMgYSB2ZXJ5IGhpZ2ggbGF0ZW5jeSwKK2J1dCBuZWVkcyBvbmx5IGEgZmV3IGluc3RydWN0aW9ucywgc28gaXQgbWlnaHQgYmUgYSBnb29kIGNob2ljZSBpZgoreW91ciBjb2RlIGhhcyBlbm91Z2ggZWFzaWx5LWV4cGxvaXRhYmxlIFxzLTFJTFBcczAgdG8gYWxsb3cgdGhlIGNvbXBpbGVyIHRvCitzY2hlZHVsZSB0aGUgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zIHRvZ2V0aGVyIHdpdGggb3RoZXIgaW5zdHJ1Y3Rpb25zLgorRGl2aXNpb24gYnkgemVybyBjYXVzZXMgYSBmbG9hdGluZy1wb2ludCBleGNlcHRpb24uCisuSVAgIlxmQmludlxmUiIgNAorLklYIEl0ZW0gImludiIKK1VzZXMgaW50ZWdlciBvcGVyYXRpb25zIHRvIGNhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiB0aGUgZGl2aXNvciwKK2FuZCB0aGVuIG11bHRpcGxpZXMgdGhlIGRpdmlkZW5kIHdpdGggdGhlIGludmVyc2UuICBUaGlzIHN0cmF0ZWd5IGFsbG93cworXCZccy0xQ1NFXHMwIGFuZCBob2lzdGluZyBvZiB0aGUgaW52ZXJzZSBjYWxjdWxhdGlvbi4gIERpdmlzaW9uIGJ5IHplcm8gY2FsY3VsYXRlcworYW4gdW5zcGVjaWZpZWQgcmVzdWx0LCBidXQgZG9lcyBub3QgdHJhcC4KKy5JUCAiXGZCaW52Om1pbmxhdFxmUiIgNAorLklYIEl0ZW0gImludjptaW5sYXQiCitBIHZhcmlhbnQgb2YgXGZCaW52XGZSIHdoZXJlLCBpZiBubyBccy0xQ1NFXHMwIG9yIGhvaXN0aW5nIG9wcG9ydHVuaXRpZXMKK2hhdmUgYmVlbiBmb3VuZCwgb3IgaWYgdGhlIGVudGlyZSBvcGVyYXRpb24gaGFzIGJlZW4gaG9pc3RlZCB0byB0aGUgc2FtZQorcGxhY2UsIHRoZSBsYXN0IHN0YWdlcyBvZiB0aGUgaW52ZXJzZSBjYWxjdWxhdGlvbiBhcmUgaW50ZXJ0d2luZWQgd2l0aCB0aGUKK2ZpbmFsIG11bHRpcGx5IHRvIHJlZHVjZSB0aGUgb3ZlcmFsbCBsYXRlbmN5LCBhdCB0aGUgZXhwZW5zZSBvZiB1c2luZyBhIGZldworbW9yZSBpbnN0cnVjdGlvbnMsIGFuZCB0aHVzIG9mZmVyaW5nIGZld2VyIHNjaGVkdWxpbmcgb3Bwb3J0dW5pdGllcyB3aXRoCitvdGhlciBjb2RlLgorLklQICJcZkJjYWxsXGZSIiA0CisuSVggSXRlbSAiY2FsbCIKK0NhbGxzIGEgbGlicmFyeSBmdW5jdGlvbiB0aGF0IHVzdWFsbHkgaW1wbGVtZW50cyB0aGUgXGZCaW52Om1pbmxhdFxmUgorc3RyYXRlZ3kuCitUaGlzIGdpdmVzIGhpZ2ggY29kZSBkZW5zaXR5IGZvciBcZihDV1wqKENgbTVcLSptZWRpYVwtbm9mcHVcKihDJ1xmUiBjb21waWxhdGlvbnMuCisuSVAgIlxmQmNhbGwyXGZSIiA0CisuSVggSXRlbSAiY2FsbDIiCitVc2VzIGEgZGlmZmVyZW50IGVudHJ5IHBvaW50IG9mIHRoZSBzYW1lIGxpYnJhcnkgZnVuY3Rpb24sIHdoZXJlIGl0Cithc3N1bWVzIHRoYXQgYSBwb2ludGVyIHRvIGEgbG9va3VwIHRhYmxlIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHVwLCB3aGljaAorZXhwb3NlcyB0aGUgcG9pbnRlciBsb2FkIHRvIFxzLTFDU0VcczAgYW5kIGNvZGUgaG9pc3Rpbmcgb3B0aW1pemF0aW9ucy4KKy5JUCAiXGZCaW52OmNhbGxcZlIiIDQKKy5JWCBJdGVtICJpbnY6Y2FsbCIKKy5QRCAwCisuSVAgIlxmQmludjpjYWxsMlxmUiIgNAorLklYIEl0ZW0gImludjpjYWxsMiIKKy5JUCAiXGZCaW52OmZwXGZSIiA0CisuSVggSXRlbSAiaW52OmZwIgorLlBECitVc2UgdGhlIFxmQmludlxmUiBhbGdvcml0aG0gZm9yIGluaXRpYWwKK2NvZGUgZ2VuZXJhdGlvbiwgYnV0IGlmIHRoZSBjb2RlIHN0YXlzIHVub3B0aW1pemVkLCByZXZlcnQgdG8gdGhlIFxmQmNhbGxcZlIsCitcJlxmQmNhbGwyXGZSLCBvciBcZkJmcFxmUiBzdHJhdGVnaWVzLCByZXNwZWN0aXZlbHkuICBOb3RlIHRoYXQgdGhlCitwb3RlbnRpYWxseS10cmFwcGluZyBzaWRlIGVmZmVjdCBvZiBkaXZpc2lvbiBieSB6ZXJvIGlzIGNhcnJpZWQgYnkgYQorc2VwYXJhdGUgaW5zdHJ1Y3Rpb24sIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgYWxsIHRoZSBpbnRlZ2VyIGluc3RydWN0aW9ucworYXJlIGhvaXN0ZWQgb3V0LCBidXQgdGhlIG1hcmtlciBmb3IgdGhlIHNpZGUgZWZmZWN0IHN0YXlzIHdoZXJlIGl0IGlzLgorQSByZWNvbWJpbmF0aW9uIHRvIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgb3IgYSBjYWxsIGlzIG5vdCBwb3NzaWJsZQoraW4gdGhhdCBjYXNlLgorLklQICJcZkJpbnYyMHVcZlIiIDQKKy5JWCBJdGVtICJpbnYyMHUiCisuUEQgMAorLklQICJcZkJpbnYyMGxcZlIiIDQKKy5JWCBJdGVtICJpbnYyMGwiCisuUEQKK1ZhcmlhbnRzIG9mIHRoZSBcZkJpbnY6bWlubGF0XGZSIHN0cmF0ZWd5LiAgSW4gdGhlIGNhc2UKK3RoYXQgdGhlIGludmVyc2UgY2FsY3VsYXRpb24gaXMgbm90IHNlcGFyYXRlZCBmcm9tIHRoZSBtdWx0aXBseSwgdGhleSBzcGVlZAordXAgZGl2aXNpb24gd2hlcmUgdGhlIGRpdmlkZW5kIGZpdHMgaW50byAyMCBiaXRzIChwbHVzIHNpZ24gd2hlcmUgYXBwbGljYWJsZSkKK2J5IGluc2VydGluZyBhIHRlc3QgdG8gc2tpcCBhIG51bWJlciBvZiBvcGVyYXRpb25zIGluIHRoaXMgY2FzZTsgdGhpcyB0ZXN0CitzbG93cyBkb3duIHRoZSBjYXNlIG9mIGxhcmdlciBkaXZpZGVuZHMuICBcZkJpbnYyMHVcZlIgYXNzdW1lcyB0aGUgY2FzZSBvZiBhIHN1Y2gKK2Egc21hbGwgZGl2aWRlbmQgdG8gYmUgdW5saWtlbHksIGFuZCBcZkJpbnYyMGxcZlIgYXNzdW1lcyBpdCB0byBiZSBsaWtlbHkuCisuUkUKKy5SUyA0CisuU3AKK0ZvciB0YXJnZXRzIG90aGVyIHRoYW4gU0htZWRpYSBcZklzdHJhdGVneVxmUiBjYW4gYmUgb25lIG9mOgorLklQICJcZkJjYWxsXC1kaXYxXGZSIiA0CisuSVggSXRlbSAiY2FsbC1kaXYxIgorQ2FsbHMgYSBsaWJyYXJ5IGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgc2luZ2xlLXN0ZXAgZGl2aXNpb24gaW5zdHJ1Y3Rpb24KK1wmXGYoQ1dcKihDYGRpdjFcKihDJ1xmUiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uICBEaXZpc2lvbiBieSB6ZXJvIGNhbGN1bGF0ZXMgYW4KK3Vuc3BlY2lmaWVkIHJlc3VsdCBhbmQgZG9lcyBub3QgdHJhcC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZXhjZXB0IGZvciBccy0xU0g0XHMwLAorXCZccy0xU0gyQVxzMCBhbmQgU0hjb21wYWN0LgorLklQICJcZkJjYWxsLWZwXGZSIiA0CisuSVggSXRlbSAiY2FsbC1mcCIKK0NhbGxzIGEgbGlicmFyeSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBvcGVyYXRpb24gaW4gZG91YmxlIHByZWNpc2lvbgorZmxvYXRpbmcgcG9pbnQuICBEaXZpc2lvbiBieSB6ZXJvIGNhdXNlcyBhIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4gIFRoaXMgaXMKK3RoZSBkZWZhdWx0IGZvciBTSGNvbXBhY3Qgd2l0aCBccy0xRlBVXHMwLiAgU3BlY2lmeWluZyB0aGlzIGZvciB0YXJnZXRzIHRoYXQgZG8gbm90CitoYXZlIGEgZG91YmxlIHByZWNpc2lvbiBccy0xRlBVXHMwIHdpbGwgZGVmYXVsdCB0byBcZihDV1wqKENgY2FsbFwtZGl2MVwqKEMnXGZSLgorLklQICJcZkJjYWxsLXRhYmxlXGZSIiA0CisuSVggSXRlbSAiY2FsbC10YWJsZSIKK0NhbGxzIGEgbGlicmFyeSBmdW5jdGlvbiB0aGF0IHVzZXMgYSBsb29rdXAgdGFibGUgZm9yIHNtYWxsIGRpdmlzb3JzIGFuZAordGhlIFxmKENXXCooQ2BkaXYxXCooQydcZlIgaW5zdHJ1Y3Rpb24gd2l0aCBjYXNlIGRpc3RpbmN0aW9uIGZvciBsYXJnZXIgZGl2aXNvcnMuICBEaXZpc2lvbgorYnkgemVybyBjYWxjdWxhdGVzIGFuIHVuc3BlY2lmaWVkIHJlc3VsdCBhbmQgZG9lcyBub3QgdHJhcC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKK2ZvciBccy0xU0g0XHMwLiAgU3BlY2lmeWluZyB0aGlzIGZvciB0YXJnZXRzIHRoYXQgZG8gbm90IGhhdmUgZHluYW1pYyBzaGlmdAoraW5zdHJ1Y3Rpb25zIHdpbGwgZGVmYXVsdCB0byBcZihDV1wqKENgY2FsbFwtZGl2MVwqKEMnXGZSLgorLlJFCisuUlMgNAorLlNwCitXaGVuIGEgZGl2aXNpb24gc3RyYXRlZ3kgaGFzIG5vdCBiZWVuIHNwZWNpZmllZCB0aGUgZGVmYXVsdCBzdHJhdGVneSB3aWxsIGJlCitzZWxlY3RlZCBiYXNlZCBvbiB0aGUgY3VycmVudCB0YXJnZXQuICBGb3IgXHMtMVNIMkFcczAgdGhlIGRlZmF1bHQgc3RyYXRlZ3kgaXMgdG8KK3VzZSB0aGUgXGYoQ1dcKihDYGRpdnNcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGRpdnVcKihDJ1xmUiBpbnN0cnVjdGlvbnMgaW5zdGVhZCBvZiBsaWJyYXJ5IGZ1bmN0aW9uCitjYWxscy4KKy5SRQorLklQICJcZkJcLW1hY2N1bXVsYXRlXC1vdXRnb2luZ1wtYXJnc1xmUiIgNAorLklYIEl0ZW0gIi1tYWNjdW11bGF0ZS1vdXRnb2luZy1hcmdzIgorUmVzZXJ2ZSBzcGFjZSBvbmNlIGZvciBvdXRnb2luZyBhcmd1bWVudHMgaW4gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIHJhdGhlcgordGhhbiBhcm91bmQgZWFjaCBjYWxsLiAgR2VuZXJhbGx5IGJlbmVmaWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzaXplLiAgQWxzbworbmVlZGVkIGZvciB1bndpbmRpbmcgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIHN0YWNrIGZyYW1lIGFyb3VuZCBjb25kaXRpb25hbCBjb2RlLgorLklQICJcZkJcLW1kaXZzaTNfbGliZnVuYz1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLW1kaXZzaTNfbGliZnVuYz1uYW1lIgorU2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IGZ1bmN0aW9uIHVzZWQgZm9yIDMyXC1iaXQgc2lnbmVkIGRpdmlzaW9uIHRvCitcJlxmSW5hbWVcZlIuCitUaGlzIG9ubHkgYWZmZWN0cyB0aGUgbmFtZSB1c2VkIGluIHRoZSBcZkJjYWxsXGZSIGFuZCBcZkJpbnY6Y2FsbFxmUgorZGl2aXNpb24gc3RyYXRlZ2llcywgYW5kIHRoZSBjb21waWxlciBzdGlsbCBleHBlY3RzIHRoZSBzYW1lCitzZXRzIG9mIGlucHV0L291dHB1dC9jbG9iYmVyZWQgcmVnaXN0ZXJzIGFzIGlmIHRoaXMgb3B0aW9uIHdlcmUgbm90IHByZXNlbnQuCisuSVAgIlxmQlwtbWZpeGVkXC1yYW5nZT1cZlJcZklyZWdpc3Rlci1yYW5nZVxmUiIgNAorLklYIEl0ZW0gIi1tZml4ZWQtcmFuZ2U9cmVnaXN0ZXItcmFuZ2UiCitHZW5lcmF0ZSBjb2RlIHRyZWF0aW5nIHRoZSBnaXZlbiByZWdpc3RlciByYW5nZSBhcyBmaXhlZCByZWdpc3RlcnMuCitBIGZpeGVkIHJlZ2lzdGVyIGlzIG9uZSB0aGF0IHRoZSByZWdpc3RlciBhbGxvY2F0b3IgY2FuIG5vdCB1c2UuICBUaGlzIGlzCit1c2VmdWwgd2hlbiBjb21waWxpbmcga2VybmVsIGNvZGUuICBBIHJlZ2lzdGVyIHJhbmdlIGlzIHNwZWNpZmllZCBhcwordHdvIHJlZ2lzdGVycyBzZXBhcmF0ZWQgYnkgYSBkYXNoLiAgTXVsdGlwbGUgcmVnaXN0ZXIgcmFuZ2VzIGNhbiBiZQorc3BlY2lmaWVkIHNlcGFyYXRlZCBieSBhIGNvbW1hLgorLklQICJcZkJcLW1pbmRleGVkXC1hZGRyZXNzaW5nXGZSIiA0CisuSVggSXRlbSAiLW1pbmRleGVkLWFkZHJlc3NpbmciCitFbmFibGUgdGhlIHVzZSBvZiB0aGUgaW5kZXhlZCBhZGRyZXNzaW5nIG1vZGUgZm9yIFNIbWVkaWEzMi9TSGNvbXBhY3QuCitUaGlzIGlzIG9ubHkgc2FmZSBpZiB0aGUgaGFyZHdhcmUgYW5kL29yIFxzLTFPU1xzMCBpbXBsZW1lbnQgMzJcLWJpdCB3cmFwLWFyb3VuZAorc2VtYW50aWNzIGZvciB0aGUgaW5kZXhlZCBhZGRyZXNzaW5nIG1vZGUuICBUaGUgYXJjaGl0ZWN0dXJlIGFsbG93cyB0aGUKK2ltcGxlbWVudGF0aW9uIG9mIHByb2Nlc3NvcnMgd2l0aCA2NFwtYml0IFxzLTFNTVVcczAsIHdoaWNoIHRoZSBccy0xT1NcczAgY291bGQgdXNlIHRvCitnZXQgMzJcLWJpdCBhZGRyZXNzaW5nLCBidXQgc2luY2Ugbm8gY3VycmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cwordGhpcyBvciBhbnkgb3RoZXIgd2F5IHRvIG1ha2UgdGhlIGluZGV4ZWQgYWRkcmVzc2luZyBtb2RlIHNhZmUgdG8gdXNlIGluCit0aGUgMzJcLWJpdCBccy0xQUJJXHMwLCB0aGUgZGVmYXVsdCBpcyBcZkJcLW1ub1wtaW5kZXhlZFwtYWRkcmVzc2luZ1xmUi4KKy5JUCAiXGZCXC1tZ2V0dHJjb3N0PVxmUlxmSW51bWJlclxmUiIgNAorLklYIEl0ZW0gIi1tZ2V0dHJjb3N0PW51bWJlciIKK1NldCB0aGUgY29zdCBhc3N1bWVkIGZvciB0aGUgXGYoQ1dcKihDYGdldHRyXCooQydcZlIgaW5zdHJ1Y3Rpb24gdG8gXGZJbnVtYmVyXGZSLgorVGhlIGRlZmF1bHQgaXMgMiBpZiBcZkJcLW1wdFwtZml4ZWRcZlIgaXMgaW4gZWZmZWN0LCAxMDAgb3RoZXJ3aXNlLgorLklQICJcZkJcLW1wdFwtZml4ZWRcZlIiIDQKKy5JWCBJdGVtICItbXB0LWZpeGVkIgorQXNzdW1lIFxmKENXXCooQ2BwdCpcKihDJ1xmUiBpbnN0cnVjdGlvbnMgd29uJ3QgdHJhcC4gIFRoaXMgZ2VuZXJhbGx5IGdlbmVyYXRlcworYmV0dGVyLXNjaGVkdWxlZCBjb2RlLCBidXQgaXMgdW5zYWZlIG9uIGN1cnJlbnQgaGFyZHdhcmUuCitUaGUgY3VycmVudCBhcmNoaXRlY3R1cmUKK2RlZmluaXRpb24gc2F5cyB0aGF0IFxmKENXXCooQ2BwdGFic1wqKEMnXGZSIGFuZCBcZihDV1wqKENgcHRyZWxcKihDJ1xmUiB0cmFwIHdoZW4gdGhlIHRhcmdldCAKK2FuZGVkIHdpdGggMyBpcyAzLgorVGhpcyBoYXMgdGhlIHVuaW50ZW50aW9uYWwgZWZmZWN0IG9mIG1ha2luZyBpdCB1bnNhZmUgdG8gc2NoZWR1bGUgdGhlc2UKK2luc3RydWN0aW9ucyBiZWZvcmUgYSBicmFuY2gsIG9yIGhvaXN0IHRoZW0gb3V0IG9mIGEgbG9vcC4gIEZvciBleGFtcGxlLAorXCZcZihDV1wqKENgX1x8X2RvX2dsb2JhbF9jdG9yc1wqKEMnXGZSLCBhIHBhcnQgb2YgXGZJbGliZ2NjXGZSCit0aGF0IHJ1bnMgY29uc3RydWN0b3JzIGF0IHByb2dyYW0KK3N0YXJ0dXAsIGNhbGxzIGZ1bmN0aW9ucyBpbiBhIGxpc3Qgd2hpY2ggaXMgZGVsaW1pdGVkIGJ5IFwtMS4gIFdpdGggdGhlCitcJlxmQlwtbXB0XC1maXhlZFxmUiBvcHRpb24sIHRoZSBcZihDV1wqKENgcHRhYnNcKihDJ1xmUiBpcyBkb25lIGJlZm9yZSB0ZXN0aW5nIGFnYWluc3QgXC0xLgorVGhhdCBtZWFucyB0aGF0IGFsbCB0aGUgY29uc3RydWN0b3JzIHJ1biBhIGJpdCBtb3JlIHF1aWNrbHksIGJ1dCB3aGVuCit0aGUgbG9vcCBjb21lcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LCB0aGUgcHJvZ3JhbSBjcmFzaGVzIGJlY2F1c2UgXGYoQ1dcKihDYHB0YWJzXCooQydcZlIKK2xvYWRzIFwtMSBpbnRvIGEgdGFyZ2V0IHJlZ2lzdGVyLgorLlNwCitTaW5jZSB0aGlzIG9wdGlvbiBpcyB1bnNhZmUgZm9yIGFueQoraGFyZHdhcmUgaW1wbGVtZW50aW5nIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9uLCB0aGUgZGVmYXVsdAoraXMgXGZCXC1tbm9cLXB0XC1maXhlZFxmUi4gIFVubGVzcyBzcGVjaWZpZWQgZXhwbGljaXRseSB3aXRoIAorXCZcZkJcLW1nZXR0cmNvc3RcZlIsIFxmQlwtbW5vXC1wdFwtZml4ZWRcZlIgYWxzbyBpbXBsaWVzIFxmQlwtbWdldHRyY29zdD0xMDBcZlI7Cit0aGlzIGRldGVycyByZWdpc3RlciBhbGxvY2F0aW9uIGZyb20gdXNpbmcgdGFyZ2V0IHJlZ2lzdGVycyBmb3Igc3RvcmluZworb3JkaW5hcnkgaW50ZWdlcnMuCisuSVAgIlxmQlwtbWludmFsaWRcLXN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItbWludmFsaWQtc3ltYm9scyIKK0Fzc3VtZSBzeW1ib2xzIG1pZ2h0IGJlIGludmFsaWQuICBPcmRpbmFyeSBmdW5jdGlvbiBzeW1ib2xzIGdlbmVyYXRlZCBieQordGhlIGNvbXBpbGVyIGFyZSBhbHdheXMgdmFsaWQgdG8gbG9hZCB3aXRoCitcJlxmKENXXCooQ2Btb3ZpXCooQydcZlIvXGYoQ1dcKihDYHNob3JpXCooQydcZlIvXGYoQ1dcKihDYHB0YWJzXCooQydcZlIgb3IKK1wmXGYoQ1dcKihDYG1vdmlcKihDJ1xmUi9cZihDV1wqKENgc2hvcmlcKihDJ1xmUi9cZihDV1wqKENgcHRyZWxcKihDJ1xmUiwKK2J1dCB3aXRoIGFzc2VtYmxlciBhbmQvb3IgbGlua2VyIHRyaWNrcyBpdCBpcyBwb3NzaWJsZQordG8gZ2VuZXJhdGUgc3ltYm9scyB0aGF0IGNhdXNlIFxmKENXXCooQ2BwdGFic1wqKEMnXGZSIG9yIFxmKENXXCooQ2BwdHJlbFwqKEMnXGZSIHRvIHRyYXAuCitUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbiBcZkJcLW1ub1wtcHRcLWZpeGVkXGZSIGlzIGluIGVmZmVjdC4KK0l0IHByZXZlbnRzIGNyb3NzLWJhc2ljLWJsb2NrIFxzLTFDU0VcczAsIGhvaXN0aW5nIGFuZCBtb3N0IHNjaGVkdWxpbmcKK29mIHN5bWJvbCBsb2Fkcy4gIFRoZSBkZWZhdWx0IGlzIFxmQlwtbW5vXC1pbnZhbGlkXC1zeW1ib2xzXGZSLgorLklQICJcZkJcLW1icmFuY2hcLWNvc3Q9XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLW1icmFuY2gtY29zdD1udW0iCitBc3N1bWUgXGZJbnVtXGZSIHRvIGJlIHRoZSBjb3N0IGZvciBhIGJyYW5jaCBpbnN0cnVjdGlvbi4gIEhpZ2hlciBudW1iZXJzCittYWtlIHRoZSBjb21waWxlciB0cnkgdG8gZ2VuZXJhdGUgbW9yZSBicmFuY2gtZnJlZSBjb2RlIGlmIHBvc3NpYmxlLiAgCitJZiBub3Qgc3BlY2lmaWVkIHRoZSB2YWx1ZSBpcyBzZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIHByb2Nlc3NvciB0eXBlIHRoYXQKK2lzIGJlaW5nIGNvbXBpbGVkIGZvci4KKy5JUCAiXGZCXC1temRjYnJhbmNoXGZSIiA0CisuSVggSXRlbSAiLW16ZGNicmFuY2giCisuUEQgMAorLklQICJcZkJcLW1ub1wtemRjYnJhbmNoXGZSIiA0CisuSVggSXRlbSAiLW1uby16ZGNicmFuY2giCisuUEQKK0Fzc3VtZSAoZG8gbm90IGFzc3VtZSkgdGhhdCB6ZXJvIGRpc3BsYWNlbWVudCBjb25kaXRpb25hbCBicmFuY2ggaW5zdHJ1Y3Rpb25zCitcJlxmKENXXCooQ2BidFwqKEMnXGZSIGFuZCBcZihDV1wqKENgYmZcKihDJ1xmUiBhcmUgZmFzdC4gIElmIFxmQlwtbXpkY2JyYW5jaFxmUiBpcyBzcGVjaWZpZWQsIHRoZQorY29tcGlsZXIgd2lsbCB0cnkgdG8gcHJlZmVyIHplcm8gZGlzcGxhY2VtZW50IGJyYW5jaCBjb2RlIHNlcXVlbmNlcy4gIFRoaXMgaXMKK2VuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGdlbmVyYXRpbmcgY29kZSBmb3IgXHMtMVNINFxzMCBhbmQgXHMtMVNINEFcczAuICBJdCBjYW4gYmUgZXhwbGljaXRseQorZGlzYWJsZWQgYnkgc3BlY2lmeWluZyBcZkJcLW1ub1wtemRjYnJhbmNoXGZSLgorLklQICJcZkJcLW1jYnJhbmNoZGlcZlIiIDQKKy5JWCBJdGVtICItbWNicmFuY2hkaSIKK0VuYWJsZSB0aGUgXGYoQ1dcKihDYGNicmFuY2hkaTRcKihDJ1xmUiBpbnN0cnVjdGlvbiBwYXR0ZXJuLgorLklQICJcZkJcLW1jbXBlcWRpXGZSIiA0CisuSVggSXRlbSAiLW1jbXBlcWRpIgorRW1pdCB0aGUgXGYoQ1dcKihDYGNtcGVxZGlfdFwqKEMnXGZSIGluc3RydWN0aW9uIHBhdHRlcm4gZXZlbiB3aGVuIFxmQlwtbWNicmFuY2hkaVxmUgoraXMgaW4gZWZmZWN0LgorLklQICJcZkJcLW1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tZnVzZWQtbWFkZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mdXNlZFwtbWFkZFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnVzZWQtbWFkZCIKKy5QRAorR2VuZXJhdGUgY29kZSB0aGF0IHVzZXMgKGRvZXMgbm90IHVzZSkgdGhlIGZsb2F0aW5nLXBvaW50IG11bHRpcGx5IGFuZAorYWNjdW11bGF0ZSBpbnN0cnVjdGlvbnMuICBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCBieSBkZWZhdWx0CitpZiBoYXJkd2FyZSBmbG9hdGluZyBwb2ludCBpcyB1c2VkLiAgVGhlIG1hY2hpbmUtZGVwZW5kZW50CitcJlxmQlwtbWZ1c2VkXC1tYWRkXGZSIG9wdGlvbiBpcyBub3cgbWFwcGVkIHRvIHRoZSBtYWNoaW5lLWluZGVwZW5kZW50CitcJlxmQlwtZmZwXC1jb250cmFjdD1mYXN0XGZSIG9wdGlvbiwgYW5kIFxmQlwtbW5vXC1mdXNlZFwtbWFkZFxmUiBpcworbWFwcGVkIHRvIFxmQlwtZmZwXC1jb250cmFjdD1vZmZcZlIuCisuSVAgIlxmQlwtbWZzY2FcZlIiIDQKKy5JWCBJdGVtICItbWZzY2EiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZnNjYVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnNjYSIKKy5QRAorQWxsb3cgb3IgZGlzYWxsb3cgdGhlIGNvbXBpbGVyIHRvIGVtaXQgdGhlIFxmKENXXCooQ2Bmc2NhXCooQydcZlIgaW5zdHJ1Y3Rpb24gZm9yIHNpbmUKK2FuZCBjb3NpbmUgYXBwcm94aW1hdGlvbnMuICBUaGUgb3B0aW9uIFxmKENXXCooQ2BcLW1mc2NhXCooQydcZlIgbXVzdCBiZSB1c2VkIGluCitjb21iaW5hdGlvbiB3aXRoIFxmKENXXCooQ2BcLWZ1bnNhZmVcLW1hdGhcLW9wdGltaXphdGlvbnNcKihDJ1xmUi4gIEl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdAord2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yIFxzLTFTSDRBXHMwLiAgVXNpbmcgXGYoQ1dcKihDYFwtbW5vXC1mc2NhXCooQydcZlIgZGlzYWJsZXMgc2luZSBhbmQgY29zaW5lCithcHByb3hpbWF0aW9ucyBldmVuIGlmIFxmKENXXCooQ2BcLWZ1bnNhZmVcLW1hdGhcLW9wdGltaXphdGlvbnNcKihDJ1xmUiBpcyBpbiBlZmZlY3QuCisuSVAgIlxmQlwtbWZzcnJhXGZSIiA0CisuSVggSXRlbSAiLW1mc3JyYSIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1mc3JyYVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnNycmEiCisuUEQKK0FsbG93IG9yIGRpc2FsbG93IHRoZSBjb21waWxlciB0byBlbWl0IHRoZSBcZihDV1wqKENgZnNycmFcKihDJ1xmUiBpbnN0cnVjdGlvbiBmb3IKK3JlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYXBwcm94aW1hdGlvbnMuICBUaGUgb3B0aW9uIFxmKENXXCooQ2BcLW1mc3JyYVwqKEMnXGZSIG11c3QgYmUgdXNlZAoraW4gY29tYmluYXRpb24gd2l0aCBcZihDV1wqKENgXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXCooQydcZlIgYW5kCitcJlxmKENXXCooQ2BcLWZmaW5pdGVcLW1hdGhcLW9ubHlcKihDJ1xmUi4gIEl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGdlbmVyYXRpbmcgY29kZSBmb3IKK1wmXHMtMVNINEFcczAuICBVc2luZyBcZihDV1wqKENgXC1tbm9cLWZzcnJhXCooQydcZlIgZGlzYWJsZXMgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhcHByb3hpbWF0aW9ucworZXZlbiBpZiBcZihDV1wqKENgXC1mdW5zYWZlXC1tYXRoXC1vcHRpbWl6YXRpb25zXCooQydcZlIgYW5kIFxmKENXXCooQ2BcLWZmaW5pdGVcLW1hdGhcLW9ubHlcKihDJ1xmUiBhcmUKK2luIGVmZmVjdC4KKy5JUCAiXGZCXC1tcHJldGVuZFwtY21vdmVcZlIiIDQKKy5JWCBJdGVtICItbXByZXRlbmQtY21vdmUiCitQcmVmZXIgemVyby1kaXNwbGFjZW1lbnQgY29uZGl0aW9uYWwgYnJhbmNoZXMgZm9yIGNvbmRpdGlvbmFsIG1vdmUgaW5zdHJ1Y3Rpb24KK3BhdHRlcm5zLiAgVGhpcyBjYW4gcmVzdWx0IGluIGZhc3RlciBjb2RlIG9uIHRoZSBccy0xU0g0XHMwIHByb2Nlc3Nvci4KKy5QUAorXGZJU29sYXJpcyAyIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJTb2xhcmlzIDIgT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBvbiBTb2xhcmlzIDI6CisuSVAgIlxmQlwtbWltcHVyZVwtdGV4dFxmUiIgNAorLklYIEl0ZW0gIi1taW1wdXJlLXRleHQiCitcJlxmQlwtbWltcHVyZVwtdGV4dFxmUiwgdXNlZCBpbiBhZGRpdGlvbiB0byBcZkJcLXNoYXJlZFxmUiwgdGVsbHMKK3RoZSBjb21waWxlciB0byBub3QgcGFzcyBcZkJcLXogdGV4dFxmUiB0byB0aGUgbGlua2VyIHdoZW4gbGlua2luZyBhCitzaGFyZWQgb2JqZWN0LiAgVXNpbmcgdGhpcyBvcHRpb24sIHlvdSBjYW4gbGluayBwb3NpdGlvbi1kZXBlbmRlbnQKK2NvZGUgaW50byBhIHNoYXJlZCBvYmplY3QuCisuU3AKK1wmXGZCXC1taW1wdXJlXC10ZXh0XGZSIHN1cHByZXNzZXMgdGhlIFwqKEwicmVsb2NhdGlvbnMgcmVtYWluIGFnYWluc3QKK2FsbG9jYXRhYmxlIGJ1dCBub24td3JpdGFibGUgc2VjdGlvbnNcKihSIiBsaW5rZXIgZXJyb3IgbWVzc2FnZS4KK0hvd2V2ZXIsIHRoZSBuZWNlc3NhcnkgcmVsb2NhdGlvbnMgdHJpZ2dlciBjb3B5LW9uLXdyaXRlLCBhbmQgdGhlCitzaGFyZWQgb2JqZWN0IGlzIG5vdCBhY3R1YWxseSBzaGFyZWQgYWNyb3NzIHByb2Nlc3Nlcy4gIEluc3RlYWQgb2YKK3VzaW5nIFxmQlwtbWltcHVyZVwtdGV4dFxmUiwgeW91IHNob3VsZCBjb21waWxlIGFsbCBzb3VyY2UgY29kZSB3aXRoCitcJlxmQlwtZnBpY1xmUiBvciBcZkJcLWZQSUNcZlIuCisuUFAKK1RoZXNlIHN3aXRjaGVzIGFyZSBzdXBwb3J0ZWQgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIG9uIFNvbGFyaXMgMjoKKy5JUCAiXGZCXC1wdGhyZWFkc1xmUiIgNAorLklYIEl0ZW0gIi1wdGhyZWFkcyIKK0FkZCBzdXBwb3J0IGZvciBtdWx0aXRocmVhZGluZyB1c2luZyB0aGUgXHMtMVBPU0lYXHMwIHRocmVhZHMgbGlicmFyeS4gIFRoaXMKK29wdGlvbiBzZXRzIGZsYWdzIGZvciBib3RoIHRoZSBwcmVwcm9jZXNzb3IgYW5kIGxpbmtlci4gIFRoaXMgb3B0aW9uIGRvZXMKK25vdCBhZmZlY3QgdGhlIHRocmVhZCBzYWZldHkgb2Ygb2JqZWN0IGNvZGUgcHJvZHVjZWQgIGJ5IHRoZSBjb21waWxlciBvcgordGhhdCBvZiBsaWJyYXJpZXMgc3VwcGxpZWQgd2l0aCBpdC4KKy5JUCAiXGZCXC1wdGhyZWFkXGZSIiA0CisuSVggSXRlbSAiLXB0aHJlYWQiCitUaGlzIGlzIGEgc3lub255bSBmb3IgXGZCXC1wdGhyZWFkc1xmUi4KKy5QUAorXGZJXHMtMVNQQVJDXHMwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJTUEFSQyBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIHRoZSBccy0xU1BBUkM6XHMwCisuSVAgIlxmQlwtbW5vXC1hcHBcLXJlZ3NcZlIiIDQKKy5JWCBJdGVtICItbW5vLWFwcC1yZWdzIgorLlBEIDAKKy5JUCAiXGZCXC1tYXBwXC1yZWdzXGZSIiA0CisuSVggSXRlbSAiLW1hcHAtcmVncyIKKy5QRAorU3BlY2lmeSBcZkJcLW1hcHBcLXJlZ3NcZlIgdG8gZ2VuZXJhdGUgb3V0cHV0IHVzaW5nIHRoZSBnbG9iYWwgcmVnaXN0ZXJzCisyIHRocm91Z2ggNCwgd2hpY2ggdGhlIFxzLTFTUEFSQ1xzMCBccy0xU1ZSNFxzMCBccy0xQUJJXHMwIHJlc2VydmVzIGZvciBhcHBsaWNhdGlvbnMuICBUaGlzCitpcyB0aGUgZGVmYXVsdC4KKy5TcAorVG8gYmUgZnVsbHkgXHMtMVNWUjRcczAgQUJJLWNvbXBsaWFudCBhdCB0aGUgY29zdCBvZiBzb21lIHBlcmZvcm1hbmNlIGxvc3MsCitzcGVjaWZ5IFxmQlwtbW5vXC1hcHBcLXJlZ3NcZlIuICBZb3Ugc2hvdWxkIGNvbXBpbGUgbGlicmFyaWVzIGFuZCBzeXN0ZW0KK3NvZnR3YXJlIHdpdGggdGhpcyBvcHRpb24uCisuSVAgIlxmQlwtbWZsYXRcZlIiIDQKKy5JWCBJdGVtICItbWZsYXQiCisuUEQgMAorLklQICJcZkJcLW1ub1wtZmxhdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZmxhdCIKKy5QRAorV2l0aCBcZkJcLW1mbGF0XGZSLCB0aGUgY29tcGlsZXIgZG9lcyBub3QgZ2VuZXJhdGUgc2F2ZS9yZXN0b3JlIGluc3RydWN0aW9ucworYW5kIHVzZXMgYSBcKihMImZsYXRcKihSIiBvciBzaW5nbGUgcmVnaXN0ZXIgd2luZG93IG1vZGVsLiAgVGhpcyBtb2RlbCBpcyBjb21wYXRpYmxlCit3aXRoIHRoZSByZWd1bGFyIHJlZ2lzdGVyIHdpbmRvdyBtb2RlbC4gIFRoZSBsb2NhbCByZWdpc3RlcnMgYW5kIHRoZSBpbnB1dAorcmVnaXN0ZXJzICgwXC1cLTUpIGFyZSBzdGlsbCB0cmVhdGVkIGFzIFwqKEwiY2FsbC1zYXZlZFwqKFIiIHJlZ2lzdGVycyBhbmQgYXJlCitzYXZlZCBvbiB0aGUgc3RhY2sgYXMgbmVlZGVkLgorLlNwCitXaXRoIFxmQlwtbW5vXC1mbGF0XGZSICh0aGUgZGVmYXVsdCksIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgc2F2ZS9yZXN0b3JlCitpbnN0cnVjdGlvbnMgKGV4Y2VwdCBmb3IgbGVhZiBmdW5jdGlvbnMpLiAgVGhpcyBpcyB0aGUgbm9ybWFsIG9wZXJhdGluZyBtb2RlLgorLklQICJcZkJcLW1mcHVcZlIiIDQKKy5JWCBJdGVtICItbWZwdSIKKy5QRCAwCisuSVAgIlxmQlwtbWhhcmRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLWZsb2F0IgorLlBECitHZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBmbG9hdGluZy1wb2ludCBpbnN0cnVjdGlvbnMuICBUaGlzIGlzIHRoZQorZGVmYXVsdC4KKy5JUCAiXGZCXC1tbm9cLWZwdVxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZnB1IgorLlBEIDAKKy5JUCAiXGZCXC1tc29mdFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbXNvZnQtZmxvYXQiCisuUEQKK0dlbmVyYXRlIG91dHB1dCBjb250YWluaW5nIGxpYnJhcnkgY2FsbHMgZm9yIGZsb2F0aW5nIHBvaW50LgorXCZcZkJXYXJuaW5nOlxmUiB0aGUgcmVxdWlzaXRlIGxpYnJhcmllcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgYWxsIFxzLTFTUEFSQ1xzMAordGFyZ2V0cy4gIE5vcm1hbGx5IHRoZSBmYWNpbGl0aWVzIG9mIHRoZSBtYWNoaW5lJ3MgdXN1YWwgQyBjb21waWxlciBhcmUKK3VzZWQsIGJ1dCB0aGlzIGNhbm5vdCBiZSBkb25lIGRpcmVjdGx5IGluIGNyb3NzLWNvbXBpbGF0aW9uLiAgWW91IG11c3QgbWFrZQoreW91ciBvd24gYXJyYW5nZW1lbnRzIHRvIHByb3ZpZGUgc3VpdGFibGUgbGlicmFyeSBmdW5jdGlvbnMgZm9yCitjcm9zcy1jb21waWxhdGlvbi4gIFRoZSBlbWJlZGRlZCB0YXJnZXRzIFxmQnNwYXJjXC0qXC1hb3V0XGZSIGFuZAorXCZcZkJzcGFyY2xpdGVcLSpcLSpcZlIgZG8gcHJvdmlkZSBzb2Z0d2FyZSBmbG9hdGluZy1wb2ludCBzdXBwb3J0LgorLlNwCitcJlxmQlwtbXNvZnRcLWZsb2F0XGZSIGNoYW5nZXMgdGhlIGNhbGxpbmcgY29udmVudGlvbiBpbiB0aGUgb3V0cHV0IGZpbGU7Cit0aGVyZWZvcmUsIGl0IGlzIG9ubHkgdXNlZnVsIGlmIHlvdSBjb21waWxlIFxmSWFsbFxmUiBvZiBhIHByb2dyYW0gd2l0aAordGhpcyBvcHRpb24uICBJbiBwYXJ0aWN1bGFyLCB5b3UgbmVlZCB0byBjb21waWxlIFxmSWxpYmdjYy5hXGZSLCB0aGUKK2xpYnJhcnkgdGhhdCBjb21lcyB3aXRoIFxzLTFHQ0NcczAsIHdpdGggXGZCXC1tc29mdFwtZmxvYXRcZlIgaW4gb3JkZXIgZm9yCit0aGlzIHRvIHdvcmsuCisuSVAgIlxmQlwtbWhhcmRcLXF1YWRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1oYXJkLXF1YWQtZmxvYXQiCitHZW5lcmF0ZSBvdXRwdXQgY29udGFpbmluZyBxdWFkLXdvcmQgKGxvbmcgZG91YmxlKSBmbG9hdGluZy1wb2ludAoraW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLW1zb2Z0XC1xdWFkXC1mbG9hdFxmUiIgNAorLklYIEl0ZW0gIi1tc29mdC1xdWFkLWZsb2F0IgorR2VuZXJhdGUgb3V0cHV0IGNvbnRhaW5pbmcgbGlicmFyeSBjYWxscyBmb3IgcXVhZC13b3JkIChsb25nIGRvdWJsZSkKK2Zsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4gIFRoZSBmdW5jdGlvbnMgY2FsbGVkIGFyZSB0aG9zZSBzcGVjaWZpZWQKK2luIHRoZSBccy0xU1BBUkNcczAgXHMtMUFCSVxzMC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisuU3AKK0FzIG9mIHRoaXMgd3JpdGluZywgdGhlcmUgYXJlIG5vIFxzLTFTUEFSQ1xzMCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIGhhcmR3YXJlCitzdXBwb3J0IGZvciB0aGUgcXVhZC13b3JkIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucy4gIFRoZXkgYWxsIGludm9rZQorYSB0cmFwIGhhbmRsZXIgZm9yIG9uZSBvZiB0aGVzZSBpbnN0cnVjdGlvbnMsIGFuZCB0aGVuIHRoZSB0cmFwIGhhbmRsZXIKK2VtdWxhdGVzIHRoZSBlZmZlY3Qgb2YgdGhlIGluc3RydWN0aW9uLiAgQmVjYXVzZSBvZiB0aGUgdHJhcCBoYW5kbGVyIG92ZXJoZWFkLAordGhpcyBpcyBtdWNoIHNsb3dlciB0aGFuIGNhbGxpbmcgdGhlIFxzLTFBQklcczAgbGlicmFyeSByb3V0aW5lcy4gIFRodXMgdGhlCitcJlxmQlwtbXNvZnRcLXF1YWRcLWZsb2F0XGZSIG9wdGlvbiBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1tbm9cLXVuYWxpZ25lZFwtZG91Ymxlc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tdW5hbGlnbmVkLWRvdWJsZXMiCisuUEQgMAorLklQICJcZkJcLW11bmFsaWduZWRcLWRvdWJsZXNcZlIiIDQKKy5JWCBJdGVtICItbXVuYWxpZ25lZC1kb3VibGVzIgorLlBECitBc3N1bWUgdGhhdCBkb3VibGVzIGhhdmUgOFwtYnl0ZSBhbGlnbm1lbnQuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLlNwCitXaXRoIFxmQlwtbXVuYWxpZ25lZFwtZG91Ymxlc1xmUiwgXHMtMUdDQ1xzMCBhc3N1bWVzIHRoYXQgZG91YmxlcyBoYXZlIDhcLWJ5dGUKK2FsaWdubWVudCBvbmx5IGlmIHRoZXkgYXJlIGNvbnRhaW5lZCBpbiBhbm90aGVyIHR5cGUsIG9yIGlmIHRoZXkgaGF2ZSBhbgorYWJzb2x1dGUgYWRkcmVzcy4gIE90aGVyd2lzZSwgaXQgYXNzdW1lcyB0aGV5IGhhdmUgNFwtYnl0ZSBhbGlnbm1lbnQuCitTcGVjaWZ5aW5nIHRoaXMgb3B0aW9uIGF2b2lkcyBzb21lIHJhcmUgY29tcGF0aWJpbGl0eSBwcm9ibGVtcyB3aXRoIGNvZGUKK2dlbmVyYXRlZCBieSBvdGhlciBjb21waWxlcnMuICBJdCBpcyBub3QgdGhlIGRlZmF1bHQgYmVjYXVzZSBpdCByZXN1bHRzCitpbiBhIHBlcmZvcm1hbmNlIGxvc3MsIGVzcGVjaWFsbHkgZm9yIGZsb2F0aW5nLXBvaW50IGNvZGUuCisuSVAgIlxmQlwtbW5vXC1mYXN0ZXJcLXN0cnVjdHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZhc3Rlci1zdHJ1Y3RzIgorLlBEIDAKKy5JUCAiXGZCXC1tZmFzdGVyXC1zdHJ1Y3RzXGZSIiA0CisuSVggSXRlbSAiLW1mYXN0ZXItc3RydWN0cyIKKy5QRAorV2l0aCBcZkJcLW1mYXN0ZXJcLXN0cnVjdHNcZlIsIHRoZSBjb21waWxlciBhc3N1bWVzIHRoYXQgc3RydWN0dXJlcworc2hvdWxkIGhhdmUgOFwtYnl0ZSBhbGlnbm1lbnQuICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiBwYWlycyBvZgorXCZcZihDV1wqKENgbGRkXCooQydcZlIgYW5kIFxmKENXXCooQ2BzdGRcKihDJ1xmUiBpbnN0cnVjdGlvbnMgZm9yIGNvcGllcyBpbiBzdHJ1Y3R1cmUKK2Fzc2lnbm1lbnQsIGluIHBsYWNlIG9mIHR3aWNlIGFzIG1hbnkgXGYoQ1dcKihDYGxkXCooQydcZlIgYW5kIFxmKENXXCooQ2BzdFwqKEMnXGZSIHBhaXJzLgorSG93ZXZlciwgdGhlIHVzZSBvZiB0aGlzIGNoYW5nZWQgYWxpZ25tZW50IGRpcmVjdGx5IHZpb2xhdGVzIHRoZSBccy0xU1BBUkNcczAKK1wmXHMtMUFCSVxzMC4gIFRodXMsIGl0J3MgaW50ZW5kZWQgb25seSBmb3IgdXNlIG9uIHRhcmdldHMgd2hlcmUgdGhlIGRldmVsb3BlcgorYWNrbm93bGVkZ2VzIHRoYXQgdGhlaXIgcmVzdWx0aW5nIGNvZGUgaXMgbm90IGRpcmVjdGx5IGluIGxpbmUgd2l0aAordGhlIHJ1bGVzIG9mIHRoZSBccy0xQUJJXHMwLgorLklQICJcZkJcLW1jcHU9XGZSXGZJY3B1X3R5cGVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1jcHVfdHlwZSIKK1NldCB0aGUgaW5zdHJ1Y3Rpb24gc2V0LCByZWdpc3RlciBzZXQsIGFuZCBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMKK2ZvciBtYWNoaW5lIHR5cGUgXGZJY3B1X3R5cGVcZlIuICBTdXBwb3J0ZWQgdmFsdWVzIGZvciBcZkljcHVfdHlwZVxmUiBhcmUKK1wmXGZCdjdcZlIsIFxmQmN5cHJlc3NcZlIsIFxmQnY4XGZSLCBcZkJzdXBlcnNwYXJjXGZSLCBcZkJoeXBlcnNwYXJjXGZSLAorXCZcZkJsZW9uXGZSLCBcZkJzcGFyY2xpdGVcZlIsIFxmQmY5MzBcZlIsIFxmQmY5MzRcZlIsIFxmQnNwYXJjbGl0ZTg2eFxmUiwKK1wmXGZCc3BhcmNsZXRcZlIsIFxmQnRzYzcwMVxmUiwgXGZCdjlcZlIsIFxmQnVsdHJhc3BhcmNcZlIsCitcJlxmQnVsdHJhc3BhcmMzXGZSLCBcZkJuaWFnYXJhXGZSLCBcZkJuaWFnYXJhMlxmUiwgXGZCbmlhZ2FyYTNcZlIsCithbmQgXGZCbmlhZ2FyYTRcZlIuCisuU3AKK05hdGl2ZSBTb2xhcmlzIGFuZCBHTlUvTGludXggdG9vbGNoYWlucyBhbHNvIHN1cHBvcnQgdGhlIHZhbHVlIFxmQm5hdGl2ZVxmUiwKK3doaWNoIHNlbGVjdHMgdGhlIGJlc3QgYXJjaGl0ZWN0dXJlIG9wdGlvbiBmb3IgdGhlIGhvc3QgcHJvY2Vzc29yLgorXCZcZkJcLW1jcHU9bmF0aXZlXGZSIGhhcyBubyBlZmZlY3QgaWYgXHMtMUdDQ1xzMCBkb2VzIG5vdCByZWNvZ25pemUKK3RoZSBwcm9jZXNzb3IuCisuU3AKK0RlZmF1bHQgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGFyZSB1c2VkIGZvciB2YWx1ZXMgdGhhdCBzZWxlY3QKK2FuIGFyY2hpdGVjdHVyZSBhbmQgbm90IGFuIGltcGxlbWVudGF0aW9uLiAgVGhlc2UgYXJlIFxmQnY3XGZSLCBcZkJ2OFxmUiwKK1wmXGZCc3BhcmNsaXRlXGZSLCBcZkJzcGFyY2xldFxmUiwgXGZCdjlcZlIuCisuU3AKK0hlcmUgaXMgYSBsaXN0IG9mIGVhY2ggc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSBhbmQgdGhlaXIgc3VwcG9ydGVkCitpbXBsZW1lbnRhdGlvbnMuCisuUlMgNAorLklQICJ2NyIgNAorLklYIEl0ZW0gInY3IgorY3lwcmVzcworLklQICJ2OCIgNAorLklYIEl0ZW0gInY4Igorc3VwZXJzcGFyYywgaHlwZXJzcGFyYywgbGVvbgorLklQICJzcGFyY2xpdGUiIDQKKy5JWCBJdGVtICJzcGFyY2xpdGUiCitmOTMwLCBmOTM0LCBzcGFyY2xpdGU4NngKKy5JUCAic3BhcmNsZXQiIDQKKy5JWCBJdGVtICJzcGFyY2xldCIKK3RzYzcwMQorLklQICJ2OSIgNAorLklYIEl0ZW0gInY5IgordWx0cmFzcGFyYywgdWx0cmFzcGFyYzMsIG5pYWdhcmEsIG5pYWdhcmEyLCBuaWFnYXJhMywgbmlhZ2FyYTQKKy5SRQorLlJTIDQKKy5TcAorQnkgZGVmYXVsdCAodW5sZXNzIGNvbmZpZ3VyZWQgb3RoZXJ3aXNlKSwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIFY3Cit2YXJpYW50IG9mIHRoZSBccy0xU1BBUkNcczAgYXJjaGl0ZWN0dXJlLiAgV2l0aCBcZkJcLW1jcHU9Y3lwcmVzc1xmUiwgdGhlIGNvbXBpbGVyCithZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciB0aGUgQ3lwcmVzcyBccy0xQ1k3QzYwMlxzMCBjaGlwLCBhcyB1c2VkIGluIHRoZQorU1BBUkNTdGF0aW9uL1NQQVJDU2VydmVyIDN4eCBzZXJpZXMuICBUaGlzIGlzIGFsc28gYXBwcm9wcmlhdGUgZm9yIHRoZSBvbGRlcgorU1BBUkNTdGF0aW9uIDEsIDIsIFxzLTFJUFhcczAgZXRjLgorLlNwCitXaXRoIFxmQlwtbWNwdT12OFxmUiwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIFY4IHZhcmlhbnQgb2YgdGhlIFxzLTFTUEFSQ1xzMAorYXJjaGl0ZWN0dXJlLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBmcm9tIFY3IGNvZGUgaXMgdGhhdCB0aGUgY29tcGlsZXIgZW1pdHMKK3RoZSBpbnRlZ2VyIG11bHRpcGx5IGFuZCBpbnRlZ2VyIGRpdmlkZSBpbnN0cnVjdGlvbnMgd2hpY2ggZXhpc3QgaW4gXHMtMVNQQVJDXC1WOFxzMAorYnV0IG5vdCBpbiBccy0xU1BBUkNcLVY3XHMwLiAgV2l0aCBcZkJcLW1jcHU9c3VwZXJzcGFyY1xmUiwgdGhlIGNvbXBpbGVyIGFkZGl0aW9uYWxseQorb3B0aW1pemVzIGl0IGZvciB0aGUgU3VwZXJTUEFSQyBjaGlwLCBhcyB1c2VkIGluIHRoZSBTUEFSQ1N0YXRpb24gMTAsIDEwMDAgYW5kCisyMDAwIHNlcmllcy4KKy5TcAorV2l0aCBcZkJcLW1jcHU9c3BhcmNsaXRlXGZSLCBccy0xR0NDXHMwIGdlbmVyYXRlcyBjb2RlIGZvciB0aGUgU1BBUkNsaXRlIHZhcmlhbnQgb2YKK3RoZSBccy0xU1BBUkNcczAgYXJjaGl0ZWN0dXJlLiAgVGhpcyBhZGRzIHRoZSBpbnRlZ2VyIG11bHRpcGx5LCBpbnRlZ2VyIGRpdmlkZSBzdGVwCithbmQgc2NhbiAoXGYoQ1dcKihDYGZmc1wqKEMnXGZSKSBpbnN0cnVjdGlvbnMgd2hpY2ggZXhpc3QgaW4gU1BBUkNsaXRlIGJ1dCBub3QgaW4gXHMtMVNQQVJDXC1WN1xzMC4KK1dpdGggXGZCXC1tY3B1PWY5MzBcZlIsIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciB0aGUKK0Z1aml0c3UgXHMtMU1CODY5MzBcczAgY2hpcCwgd2hpY2ggaXMgdGhlIG9yaWdpbmFsIFNQQVJDbGl0ZSwgd2l0aCBubyBccy0xRlBVXHMwLiAgV2l0aAorXCZcZkJcLW1jcHU9ZjkzNFxmUiwgdGhlIGNvbXBpbGVyIGFkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yIHRoZSBGdWppdHN1CitcJlxzLTFNQjg2OTM0XHMwIGNoaXAsIHdoaWNoIGlzIHRoZSBtb3JlIHJlY2VudCBTUEFSQ2xpdGUgd2l0aCBccy0xRlBVXHMwLgorLlNwCitXaXRoIFxmQlwtbWNwdT1zcGFyY2xldFxmUiwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSBmb3IgdGhlIFNQQVJDbGV0IHZhcmlhbnQgb2YKK3RoZSBccy0xU1BBUkNcczAgYXJjaGl0ZWN0dXJlLiAgVGhpcyBhZGRzIHRoZSBpbnRlZ2VyIG11bHRpcGx5LCBtdWx0aXBseS9hY2N1bXVsYXRlLAoraW50ZWdlciBkaXZpZGUgc3RlcCBhbmQgc2NhbiAoXGYoQ1dcKihDYGZmc1wqKEMnXGZSKSBpbnN0cnVjdGlvbnMgd2hpY2ggZXhpc3QgaW4gU1BBUkNsZXQKK2J1dCBub3QgaW4gXHMtMVNQQVJDXC1WN1xzMC4gIFdpdGggXGZCXC1tY3B1PXRzYzcwMVxmUiwgdGhlIGNvbXBpbGVyIGFkZGl0aW9uYWxseQorb3B0aW1pemVzIGl0IGZvciB0aGUgXHMtMVRFTUlDXHMwIFNQQVJDbGV0IGNoaXAuCisuU3AKK1dpdGggXGZCXC1tY3B1PXY5XGZSLCBccy0xR0NDXHMwIGdlbmVyYXRlcyBjb2RlIGZvciB0aGUgVjkgdmFyaWFudCBvZiB0aGUgXHMtMVNQQVJDXHMwCithcmNoaXRlY3R1cmUuICBUaGlzIGFkZHMgNjRcLWJpdCBpbnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCBtb3ZlIGluc3RydWN0aW9ucywKKzMgYWRkaXRpb25hbCBmbG9hdGluZy1wb2ludCBjb25kaXRpb24gY29kZSByZWdpc3RlcnMgYW5kIGNvbmRpdGlvbmFsIG1vdmUKK2luc3RydWN0aW9ucy4gIFdpdGggXGZCXC1tY3B1PXVsdHJhc3BhcmNcZlIsIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkKK29wdGltaXplcyBpdCBmb3IgdGhlIFN1biBVbHRyYVNQQVJDIEkvSUkvSUlpIGNoaXBzLiAgV2l0aAorXCZcZkJcLW1jcHU9dWx0cmFzcGFyYzNcZlIsIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkgb3B0aW1pemVzIGl0IGZvciB0aGUKK1N1biBVbHRyYVNQQVJDIElJSS9JSUkrL0lJSWkvSUlJaSsvSVYvSVYrIGNoaXBzLiAgV2l0aAorXCZcZkJcLW1jcHU9bmlhZ2FyYVxmUiwgdGhlIGNvbXBpbGVyIGFkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yCitTdW4gVWx0cmFTUEFSQyBUMSBjaGlwcy4gIFdpdGggXGZCXC1tY3B1PW5pYWdhcmEyXGZSLCB0aGUgY29tcGlsZXIKK2FkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yIFN1biBVbHRyYVNQQVJDIFQyIGNoaXBzLiBXaXRoCitcJlxmQlwtbWNwdT1uaWFnYXJhM1xmUiwgdGhlIGNvbXBpbGVyIGFkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yIFN1bgorVWx0cmFTUEFSQyBUMyBjaGlwcy4gIFdpdGggXGZCXC1tY3B1PW5pYWdhcmE0XGZSLCB0aGUgY29tcGlsZXIKK2FkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yIFN1biBVbHRyYVNQQVJDIFQ0IGNoaXBzLgorLlJFCisuSVAgIlxmQlwtbXR1bmU9XGZSXGZJY3B1X3R5cGVcZlIiIDQKKy5JWCBJdGVtICItbXR1bmU9Y3B1X3R5cGUiCitTZXQgdGhlIGluc3RydWN0aW9uIHNjaGVkdWxpbmcgcGFyYW1ldGVycyBmb3IgbWFjaGluZSB0eXBlCitcJlxmSWNwdV90eXBlXGZSLCBidXQgZG8gbm90IHNldCB0aGUgaW5zdHJ1Y3Rpb24gc2V0IG9yIHJlZ2lzdGVyIHNldCB0aGF0IHRoZQorb3B0aW9uIFxmQlwtbWNwdT1cZlJcZkljcHVfdHlwZVxmUiBkb2VzLgorLlNwCitUaGUgc2FtZSB2YWx1ZXMgZm9yIFxmQlwtbWNwdT1cZlJcZkljcHVfdHlwZVxmUiBjYW4gYmUgdXNlZCBmb3IKK1wmXGZCXC1tdHVuZT1cZlJcZkljcHVfdHlwZVxmUiwgYnV0IHRoZSBvbmx5IHVzZWZ1bCB2YWx1ZXMgYXJlIHRob3NlCit0aGF0IHNlbGVjdCBhIHBhcnRpY3VsYXIgXHMtMUNQVVxzMCBpbXBsZW1lbnRhdGlvbi4gIFRob3NlIGFyZSBcZkJjeXByZXNzXGZSLAorXCZcZkJzdXBlcnNwYXJjXGZSLCBcZkJoeXBlcnNwYXJjXGZSLCBcZkJsZW9uXGZSLCBcZkJmOTMwXGZSLCBcZkJmOTM0XGZSLAorXCZcZkJzcGFyY2xpdGU4NnhcZlIsIFxmQnRzYzcwMVxmUiwgXGZCdWx0cmFzcGFyY1xmUiwgXGZCdWx0cmFzcGFyYzNcZlIsCitcJlxmQm5pYWdhcmFcZlIsIFxmQm5pYWdhcmEyXGZSLCBcZkJuaWFnYXJhM1xmUiBhbmQgXGZCbmlhZ2FyYTRcZlIuICBXaXRoCituYXRpdmUgU29sYXJpcyBhbmQgR05VL0xpbnV4IHRvb2xjaGFpbnMsIFxmQm5hdGl2ZVxmUiBjYW4gYWxzbyBiZSB1c2VkLgorLklQICJcZkJcLW12OHBsdXNcZlIiIDQKKy5JWCBJdGVtICItbXY4cGx1cyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC12OHBsdXNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXY4cGx1cyIKKy5QRAorV2l0aCBcZkJcLW12OHBsdXNcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgZm9yIHRoZSBccy0xU1BBUkNcLVY4K1xzMCBccy0xQUJJXHMwLiAgVGhlCitkaWZmZXJlbmNlIGZyb20gdGhlIFY4IFxzLTFBQklcczAgaXMgdGhhdCB0aGUgZ2xvYmFsIGFuZCBvdXQgcmVnaXN0ZXJzIGFyZQorY29uc2lkZXJlZCA2NCBiaXRzIHdpZGUuICBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBTb2xhcmlzIGluIDMyXC1iaXQKK21vZGUgZm9yIGFsbCBccy0xU1BBUkNcLVY5XHMwIHByb2Nlc3NvcnMuCisuSVAgIlxmQlwtbXZpc1xmUiIgNAorLklYIEl0ZW0gIi1tdmlzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXZpc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tdmlzIgorLlBECitXaXRoIFxmQlwtbXZpc1xmUiwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgVWx0cmFTUEFSQworVmlzdWFsIEluc3RydWN0aW9uIFNldCBleHRlbnNpb25zLiAgVGhlIGRlZmF1bHQgaXMgXGZCXC1tbm9cLXZpc1xmUi4KKy5JUCAiXGZCXC1tdmlzMlxmUiIgNAorLklYIEl0ZW0gIi1tdmlzMiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC12aXMyXGZSIiA0CisuSVggSXRlbSAiLW1uby12aXMyIgorLlBECitXaXRoIFxmQlwtbXZpczJcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK3ZlcnNpb24gMi4wIG9mIHRoZSBVbHRyYVNQQVJDIFZpc3VhbCBJbnN0cnVjdGlvbiBTZXQgZXh0ZW5zaW9ucy4gIFRoZQorZGVmYXVsdCBpcyBcZkJcLW12aXMyXGZSIHdoZW4gdGFyZ2V0aW5nIGEgY3B1IHRoYXQgc3VwcG9ydHMgc3VjaAoraW5zdHJ1Y3Rpb25zLCBzdWNoIGFzIFVsdHJhU1BBUkMtSUlJIGFuZCBsYXRlci4gIFNldHRpbmcgXGZCXC1tdmlzMlxmUgorYWxzbyBzZXRzIFxmQlwtbXZpc1xmUi4KKy5JUCAiXGZCXC1tdmlzM1xmUiIgNAorLklYIEl0ZW0gIi1tdmlzMyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC12aXMzXGZSIiA0CisuSVggSXRlbSAiLW1uby12aXMzIgorLlBECitXaXRoIFxmQlwtbXZpczNcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK3ZlcnNpb24gMy4wIG9mIHRoZSBVbHRyYVNQQVJDIFZpc3VhbCBJbnN0cnVjdGlvbiBTZXQgZXh0ZW5zaW9ucy4gIFRoZQorZGVmYXVsdCBpcyBcZkJcLW12aXMzXGZSIHdoZW4gdGFyZ2V0aW5nIGEgY3B1IHRoYXQgc3VwcG9ydHMgc3VjaAoraW5zdHJ1Y3Rpb25zLCBzdWNoIGFzIG5pYWdhcmFcLTMgYW5kIGxhdGVyLiAgU2V0dGluZyBcZkJcLW12aXMzXGZSCithbHNvIHNldHMgXGZCXC1tdmlzMlxmUiBhbmQgXGZCXC1tdmlzXGZSLgorLklQICJcZkJcLW1jYmNvbmRcZlIiIDQKKy5JWCBJdGVtICItbWNiY29uZCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1jYmNvbmRcZlIiIDQKKy5JWCBJdGVtICItbW5vLWNiY29uZCIKKy5QRAorV2l0aCBcZkJcLW1jYmNvbmRcZlIsIFxzLTFHQ0NcczAgZ2VuZXJhdGVzIGNvZGUgdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK2NvbXBhcmUtYW5kLWJyYW5jaCBpbnN0cnVjdGlvbnMsIGFzIGRlZmluZWQgaW4gdGhlIFNwYXJjIEFyY2hpdGVjdHVyZSAyMDExLgorVGhlIGRlZmF1bHQgaXMgXGZCXC1tY2Jjb25kXGZSIHdoZW4gdGFyZ2V0aW5nIGEgY3B1IHRoYXQgc3VwcG9ydHMgc3VjaAoraW5zdHJ1Y3Rpb25zLCBzdWNoIGFzIG5pYWdhcmFcLTQgYW5kIGxhdGVyLgorLklQICJcZkJcLW1wb3BjXGZSIiA0CisuSVggSXRlbSAiLW1wb3BjIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXBvcGNcZlIiIDQKKy5JWCBJdGVtICItbW5vLXBvcGMiCisuUEQKK1dpdGggXGZCXC1tcG9wY1xmUiwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgVWx0cmFTUEFSQworcG9wdWxhdGlvbiBjb3VudCBpbnN0cnVjdGlvbi4gIFRoZSBkZWZhdWx0IGlzIFxmQlwtbXBvcGNcZlIKK3doZW4gdGFyZ2V0aW5nIGEgY3B1IHRoYXQgc3VwcG9ydHMgc3VjaCBpbnN0cnVjdGlvbnMsIHN1Y2ggYXMgTmlhZ2FyYVwtMiBhbmQKK2xhdGVyLgorLklQICJcZkJcLW1mbWFmXGZSIiA0CisuSVggSXRlbSAiLW1mbWFmIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZtYWZcZlIiIDQKKy5JWCBJdGVtICItbW5vLWZtYWYiCisuUEQKK1dpdGggXGZCXC1tZm1hZlxmUiwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgY29kZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgVWx0cmFTUEFSQworRnVzZWQgTXVsdGlwbHktQWRkIEZsb2F0aW5nLXBvaW50IGV4dGVuc2lvbnMuICBUaGUgZGVmYXVsdCBpcyBcZkJcLW1mbWFmXGZSCit3aGVuIHRhcmdldGluZyBhIGNwdSB0aGF0IHN1cHBvcnRzIHN1Y2ggaW5zdHJ1Y3Rpb25zLCBzdWNoIGFzIE5pYWdhcmFcLTMgYW5kCitsYXRlci4KKy5JUCAiXGZCXC1tZml4XC1hdDY5N2ZcZlIiIDQKKy5JWCBJdGVtICItbWZpeC1hdDY5N2YiCitFbmFibGUgdGhlIGRvY3VtZW50ZWQgd29ya2Fyb3VuZCBmb3IgdGhlIHNpbmdsZSBlcnJhdHVtIG9mIHRoZSBBdG1lbCBccy0xQVQ2OTdGXHMwCitwcm9jZXNzb3IgKHdoaWNoIGNvcnJlc3BvbmRzIHRvIGVycmF0dW0gIzEzIG9mIHRoZSBccy0xQVQ2OTdFXHMwIHByb2Nlc3NvcikuCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlCitvbiBccy0xU1BBUkNcLVY5XHMwIHByb2Nlc3NvcnMgaW4gNjRcLWJpdCBlbnZpcm9ubWVudHM6CisuSVAgIlxmQlwtbTMyXGZSIiA0CisuSVggSXRlbSAiLW0zMiIKKy5QRCAwCisuSVAgIlxmQlwtbTY0XGZSIiA0CisuSVggSXRlbSAiLW02NCIKKy5QRAorR2VuZXJhdGUgY29kZSBmb3IgYSAzMlwtYml0IG9yIDY0XC1iaXQgZW52aXJvbm1lbnQuCitUaGUgMzJcLWJpdCBlbnZpcm9ubWVudCBzZXRzIGludCwgbG9uZyBhbmQgcG9pbnRlciB0byAzMiBiaXRzLgorVGhlIDY0XC1iaXQgZW52aXJvbm1lbnQgc2V0cyBpbnQgdG8gMzIgYml0cyBhbmQgbG9uZyBhbmQgcG9pbnRlcgordG8gNjQgYml0cy4KKy5JUCAiXGZCXC1tY21vZGVsPVxmUlxmSXdoaWNoXGZSIiA0CisuSVggSXRlbSAiLW1jbW9kZWw9d2hpY2giCitTZXQgdGhlIGNvZGUgbW9kZWwgdG8gb25lIG9mCisuUlMgNAorLklQICJcZkJtZWRsb3dcZlIiIDQKKy5JWCBJdGVtICJtZWRsb3ciCitUaGUgTWVkaXVtL0xvdyBjb2RlIG1vZGVsOiA2NFwtYml0IGFkZHJlc3NlcywgcHJvZ3JhbXMKK211c3QgYmUgbGlua2VkIGluIHRoZSBsb3cgMzIgYml0cyBvZiBtZW1vcnkuICBQcm9ncmFtcyBjYW4gYmUgc3RhdGljYWxseQorb3IgZHluYW1pY2FsbHkgbGlua2VkLgorLklQICJcZkJtZWRtaWRcZlIiIDQKKy5JWCBJdGVtICJtZWRtaWQiCitUaGUgTWVkaXVtL01pZGRsZSBjb2RlIG1vZGVsOiA2NFwtYml0IGFkZHJlc3NlcywgcHJvZ3JhbXMKK211c3QgYmUgbGlua2VkIGluIHRoZSBsb3cgNDQgYml0cyBvZiBtZW1vcnksIHRoZSB0ZXh0IGFuZCBkYXRhIHNlZ21lbnRzIG11c3QKK2JlIGxlc3MgdGhhbiAyR0IgaW4gc2l6ZSBhbmQgdGhlIGRhdGEgc2VnbWVudCBtdXN0IGJlIGxvY2F0ZWQgd2l0aGluIDJHQiBvZgordGhlIHRleHQgc2VnbWVudC4KKy5JUCAiXGZCbWVkYW55XGZSIiA0CisuSVggSXRlbSAibWVkYW55IgorVGhlIE1lZGl1bS9Bbnl3aGVyZSBjb2RlIG1vZGVsOiA2NFwtYml0IGFkZHJlc3NlcywgcHJvZ3JhbXMKK21heSBiZSBsaW5rZWQgYW55d2hlcmUgaW4gbWVtb3J5LCB0aGUgdGV4dCBhbmQgZGF0YSBzZWdtZW50cyBtdXN0IGJlIGxlc3MKK3RoYW4gMkdCIGluIHNpemUgYW5kIHRoZSBkYXRhIHNlZ21lbnQgbXVzdCBiZSBsb2NhdGVkIHdpdGhpbiAyR0Igb2YgdGhlCit0ZXh0IHNlZ21lbnQuCisuSVAgIlxmQmVtYm1lZGFueVxmUiIgNAorLklYIEl0ZW0gImVtYm1lZGFueSIKK1RoZSBNZWRpdW0vQW55d2hlcmUgY29kZSBtb2RlbCBmb3IgZW1iZWRkZWQgc3lzdGVtczoKKzY0XC1iaXQgYWRkcmVzc2VzLCB0aGUgdGV4dCBhbmQgZGF0YSBzZWdtZW50cyBtdXN0IGJlIGxlc3MgdGhhbiAyR0IgaW4KK3NpemUsIGJvdGggc3RhcnRpbmcgYW55d2hlcmUgaW4gbWVtb3J5IChkZXRlcm1pbmVkIGF0IGxpbmsgdGltZSkuICBUaGUKK2dsb2JhbCByZWdpc3RlciBcZihDVyVnNFxmUiBwb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIGRhdGEgc2VnbWVudC4gIFByb2dyYW1zCithcmUgc3RhdGljYWxseSBsaW5rZWQgYW5kIFxzLTFQSUNcczAgaXMgbm90IHN1cHBvcnRlZC4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW1tZW1vcnlcLW1vZGVsPVxmUlxmSW1lbS1tb2RlbFxmUiIgNAorLklYIEl0ZW0gIi1tbWVtb3J5LW1vZGVsPW1lbS1tb2RlbCIKK1NldCB0aGUgbWVtb3J5IG1vZGVsIGluIGZvcmNlIG9uIHRoZSBwcm9jZXNzb3IgdG8gb25lIG9mCisuUlMgNAorLklQICJcZkJkZWZhdWx0XGZSIiA0CisuSVggSXRlbSAiZGVmYXVsdCIKK1RoZSBkZWZhdWx0IG1lbW9yeSBtb2RlbCBmb3IgdGhlIHByb2Nlc3NvciBhbmQgb3BlcmF0aW5nIHN5c3RlbS4KKy5JUCAiXGZCcm1vXGZSIiA0CisuSVggSXRlbSAicm1vIgorUmVsYXhlZCBNZW1vcnkgT3JkZXIKKy5JUCAiXGZCcHNvXGZSIiA0CisuSVggSXRlbSAicHNvIgorUGFydGlhbCBTdG9yZSBPcmRlcgorLklQICJcZkJ0c29cZlIiIDQKKy5JWCBJdGVtICJ0c28iCitUb3RhbCBTdG9yZSBPcmRlcgorLklQICJcZkJzY1xmUiIgNAorLklYIEl0ZW0gInNjIgorU2VxdWVudGlhbCBDb25zaXN0ZW5jeQorLlJFCisuUlMgNAorLlNwCitUaGVzZSBtZW1vcnkgbW9kZWxzIGFyZSBmb3JtYWxseSBkZWZpbmVkIGluIEFwcGVuZGl4IEQgb2YgdGhlIFNwYXJjIFY5CithcmNoaXRlY3R1cmUgbWFudWFsLCBhcyBzZXQgaW4gdGhlIHByb2Nlc3NvcidzIFxmKENXXCooQ2BQU1RBVEUuTU1cKihDJ1xmUiBmaWVsZC4KKy5SRQorLklQICJcZkJcLW1zdGFja1wtYmlhc1xmUiIgNAorLklYIEl0ZW0gIi1tc3RhY2stYmlhcyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1zdGFja1wtYmlhc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tc3RhY2stYmlhcyIKKy5QRAorV2l0aCBcZkJcLW1zdGFja1wtYmlhc1xmUiwgXHMtMUdDQ1xzMCBhc3N1bWVzIHRoYXQgdGhlIHN0YWNrIHBvaW50ZXIsIGFuZAorZnJhbWUgcG9pbnRlciBpZiBwcmVzZW50LCBhcmUgb2Zmc2V0IGJ5IFwtMjA0NyB3aGljaCBtdXN0IGJlIGFkZGVkIGJhY2sKK3doZW4gbWFraW5nIHN0YWNrIGZyYW1lIHJlZmVyZW5jZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGluIDY0XC1iaXQgbW9kZS4KK090aGVyd2lzZSwgYXNzdW1lIG5vIHN1Y2ggb2Zmc2V0IGlzIHByZXNlbnQuCisuUFAKK1xmSVxzLTFTUFVcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlNQVSBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIHRoZSBccy0xU1BVOlxzMAorLklQICJcZkJcLW13YXJuXC1yZWxvY1xmUiIgNAorLklYIEl0ZW0gIi1td2Fybi1yZWxvYyIKKy5QRCAwCisuSVAgIlxmQlwtbWVycm9yXC1yZWxvY1xmUiIgNAorLklYIEl0ZW0gIi1tZXJyb3ItcmVsb2MiCisuUEQKK1RoZSBsb2FkZXIgZm9yIFxzLTFTUFVcczAgZG9lcyBub3QgaGFuZGxlIGR5bmFtaWMgcmVsb2NhdGlvbnMuICBCeSBkZWZhdWx0LCBccy0xR0NDXHMwCitnaXZlcyBhbiBlcnJvciB3aGVuIGl0IGdlbmVyYXRlcyBjb2RlIHRoYXQgcmVxdWlyZXMgYSBkeW5hbWljCityZWxvY2F0aW9uLiAgXGZCXC1tbm9cLWVycm9yXC1yZWxvY1xmUiBkaXNhYmxlcyB0aGUgZXJyb3IsCitcJlxmQlwtbXdhcm5cLXJlbG9jXGZSIGdlbmVyYXRlcyBhIHdhcm5pbmcgaW5zdGVhZC4KKy5JUCAiXGZCXC1tc2FmZVwtZG1hXGZSIiA0CisuSVggSXRlbSAiLW1zYWZlLWRtYSIKKy5QRCAwCisuSVAgIlxmQlwtbXVuc2FmZVwtZG1hXGZSIiA0CisuSVggSXRlbSAiLW11bnNhZmUtZG1hIgorLlBECitJbnN0cnVjdGlvbnMgdGhhdCBpbml0aWF0ZSBvciB0ZXN0IGNvbXBsZXRpb24gb2YgXHMtMURNQVxzMCBtdXN0IG5vdCBiZQorcmVvcmRlcmVkIHdpdGggcmVzcGVjdCB0byBsb2FkcyBhbmQgc3RvcmVzIG9mIHRoZSBtZW1vcnkgdGhhdCBpcyBiZWluZworYWNjZXNzZWQuCitXaXRoIFxmQlwtbXVuc2FmZVwtZG1hXGZSIHlvdSBtdXN0IHVzZSB0aGUgXGYoQ1dcKihDYHZvbGF0aWxlXCooQydcZlIga2V5d29yZCB0byBwcm90ZWN0CittZW1vcnkgYWNjZXNzZXMsIGJ1dCB0aGF0IGNhbiBsZWFkIHRvIGluZWZmaWNpZW50IGNvZGUgaW4gcGxhY2VzIHdoZXJlIHRoZQorbWVtb3J5IGlzIGtub3duIHRvIG5vdCBjaGFuZ2UuICBSYXRoZXIgdGhhbiBtYXJrIHRoZSBtZW1vcnkgYXMgdm9sYXRpbGUsCit5b3UgY2FuIHVzZSBcZkJcLW1zYWZlXC1kbWFcZlIgdG8gdGVsbCB0aGUgY29tcGlsZXIgdG8gdHJlYXQKK3RoZSBccy0xRE1BXHMwIGluc3RydWN0aW9ucyBhcyBwb3RlbnRpYWxseSBhZmZlY3RpbmcgYWxsIG1lbW9yeS4KKy5JUCAiXGZCXC1tYnJhbmNoXC1oaW50c1xmUiIgNAorLklYIEl0ZW0gIi1tYnJhbmNoLWhpbnRzIgorQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBnZW5lcmF0ZXMgYSBicmFuY2ggaGludCBpbnN0cnVjdGlvbiB0byBhdm9pZAorcGlwZWxpbmUgc3RhbGxzIGZvciBhbHdheXMtdGFrZW4gb3IgcHJvYmFibHktdGFrZW4gYnJhbmNoZXMuICBBIGhpbnQKK2lzIG5vdCBnZW5lcmF0ZWQgY2xvc2VyIHRoYW4gOCBpbnN0cnVjdGlvbnMgYXdheSBmcm9tIGl0cyBicmFuY2guCitUaGVyZSBpcyBsaXR0bGUgcmVhc29uIHRvIGRpc2FibGUgdGhlbSwgZXhjZXB0IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsCitvciB0byBtYWtlIGFuIG9iamVjdCBhIGxpdHRsZSBiaXQgc21hbGxlci4KKy5JUCAiXGZCXC1tc21hbGxcLW1lbVxmUiIgNAorLklYIEl0ZW0gIi1tc21hbGwtbWVtIgorLlBEIDAKKy5JUCAiXGZCXC1tbGFyZ2VcLW1lbVxmUiIgNAorLklYIEl0ZW0gIi1tbGFyZ2UtbWVtIgorLlBECitCeSBkZWZhdWx0LCBccy0xR0NDXHMwIGdlbmVyYXRlcyBjb2RlIGFzc3VtaW5nIHRoYXQgYWRkcmVzc2VzIGFyZSBuZXZlciBsYXJnZXIKK3RoYW4gMTggYml0cy4gIFdpdGggXGZCXC1tbGFyZ2VcLW1lbVxmUiBjb2RlIGlzIGdlbmVyYXRlZCB0aGF0IGFzc3VtZXMKK2EgZnVsbCAzMlwtYml0IGFkZHJlc3MuCisuSVAgIlxmQlwtbXN0ZG1haW5cZlIiIDQKKy5JWCBJdGVtICItbXN0ZG1haW4iCitCeSBkZWZhdWx0LCBccy0xR0NDXHMwIGxpbmtzIGFnYWluc3Qgc3RhcnR1cCBjb2RlIHRoYXQgYXNzdW1lcyB0aGUgU1BVLXN0eWxlCittYWluIGZ1bmN0aW9uIGludGVyZmFjZSAod2hpY2ggaGFzIGFuIHVuY29udmVudGlvbmFsIHBhcmFtZXRlciBsaXN0KS4KK1dpdGggXGZCXC1tc3RkbWFpblxmUiwgXHMtMUdDQ1xzMCBsaW5rcyB5b3VyIHByb2dyYW0gYWdhaW5zdCBzdGFydHVwCitjb2RlIHRoYXQgYXNzdW1lcyBhIEM5OVwtc3R5bGUgaW50ZXJmYWNlIHRvIFxmKENXXCooQ2BtYWluXCooQydcZlIsIGluY2x1ZGluZyBhCitsb2NhbCBjb3B5IG9mIFxmKENXXCooQ2Bhcmd2XCooQydcZlIgc3RyaW5ncy4KKy5JUCAiXGZCXC1tZml4ZWRcLXJhbmdlPVxmUlxmSXJlZ2lzdGVyLXJhbmdlXGZSIiA0CisuSVggSXRlbSAiLW1maXhlZC1yYW5nZT1yZWdpc3Rlci1yYW5nZSIKK0dlbmVyYXRlIGNvZGUgdHJlYXRpbmcgdGhlIGdpdmVuIHJlZ2lzdGVyIHJhbmdlIGFzIGZpeGVkIHJlZ2lzdGVycy4KK0EgZml4ZWQgcmVnaXN0ZXIgaXMgb25lIHRoYXQgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBjYW5ub3QgdXNlLiAgVGhpcyBpcwordXNlZnVsIHdoZW4gY29tcGlsaW5nIGtlcm5lbCBjb2RlLiAgQSByZWdpc3RlciByYW5nZSBpcyBzcGVjaWZpZWQgYXMKK3R3byByZWdpc3RlcnMgc2VwYXJhdGVkIGJ5IGEgZGFzaC4gIE11bHRpcGxlIHJlZ2lzdGVyIHJhbmdlcyBjYW4gYmUKK3NwZWNpZmllZCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4KKy5JUCAiXGZCXC1tZWEzMlxmUiIgNAorLklYIEl0ZW0gIi1tZWEzMiIKKy5QRCAwCisuSVAgIlxmQlwtbWVhNjRcZlIiIDQKKy5JWCBJdGVtICItbWVhNjQiCisuUEQKK0NvbXBpbGUgY29kZSBhc3N1bWluZyB0aGF0IHBvaW50ZXJzIHRvIHRoZSBccy0xUFBVXHMwIGFkZHJlc3Mgc3BhY2UgYWNjZXNzZWQKK3ZpYSB0aGUgXGYoQ1dcKihDYF9cfF9lYVwqKEMnXGZSIG5hbWVkIGFkZHJlc3Mgc3BhY2UgcXVhbGlmaWVyIGFyZSBlaXRoZXIgMzIgb3IgNjQKK2JpdHMgd2lkZS4gIFRoZSBkZWZhdWx0IGlzIDMyIGJpdHMuICBBcyB0aGlzIGlzIGFuIEFCSS1jaGFuZ2luZyBvcHRpb24sCithbGwgb2JqZWN0IGNvZGUgaW4gYW4gZXhlY3V0YWJsZSBtdXN0IGJlIGNvbXBpbGVkIHdpdGggdGhlIHNhbWUgc2V0dGluZy4KKy5JUCAiXGZCXC1tYWRkcmVzc1wtc3BhY2VcLWNvbnZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItbWFkZHJlc3Mtc3BhY2UtY29udmVyc2lvbiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1hZGRyZXNzXC1zcGFjZVwtY29udmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tYWRkcmVzcy1zcGFjZS1jb252ZXJzaW9uIgorLlBECitBbGxvdy9kaXNhbGxvdyB0cmVhdGluZyB0aGUgXGYoQ1dcKihDYF9cfF9lYVwqKEMnXGZSIGFkZHJlc3Mgc3BhY2UgYXMgc3VwZXJzZXQKK29mIHRoZSBnZW5lcmljIGFkZHJlc3Mgc3BhY2UuICBUaGlzIGVuYWJsZXMgZXhwbGljaXQgdHlwZSBjYXN0cworYmV0d2VlbiBcZihDV1wqKENgX1x8X2VhXCooQydcZlIgYW5kIGdlbmVyaWMgcG9pbnRlciBhcyB3ZWxsIGFzIGltcGxpY2l0Citjb252ZXJzaW9ucyBvZiBnZW5lcmljIHBvaW50ZXJzIHRvIFxmKENXXCooQ2BfXHxfZWFcKihDJ1xmUiBwb2ludGVycy4gIFRoZQorZGVmYXVsdCBpcyB0byBhbGxvdyBhZGRyZXNzIHNwYWNlIHBvaW50ZXIgY29udmVyc2lvbnMuCisuSVAgIlxmQlwtbWNhY2hlXC1zaXplPVxmUlxmSWNhY2hlLXNpemVcZlIiIDQKKy5JWCBJdGVtICItbWNhY2hlLXNpemU9Y2FjaGUtc2l6ZSIKK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSB2ZXJzaW9uIG9mIGxpYmdjYyB0aGF0IHRoZSBjb21waWxlciBsaW5rcyB0byBhbgorZXhlY3V0YWJsZSBhbmQgc2VsZWN0cyBhIHNvZnR3YXJlLW1hbmFnZWQgY2FjaGUgZm9yIGFjY2Vzc2luZyB2YXJpYWJsZXMKK2luIHRoZSBcZihDV1wqKENgX1x8X2VhXCooQydcZlIgYWRkcmVzcyBzcGFjZSB3aXRoIGEgcGFydGljdWxhciBjYWNoZSBzaXplLiAgUG9zc2libGUKK29wdGlvbnMgZm9yIFxmSWNhY2hlLXNpemVcZlIgYXJlIFxmQjhcZlIsIFxmQjE2XGZSLCBcZkIzMlxmUiwgXGZCNjRcZlIKK2FuZCBcZkIxMjhcZlIuICBUaGUgZGVmYXVsdCBjYWNoZSBzaXplIGlzIDY0S0IuCisuSVAgIlxmQlwtbWF0b21pY1wtdXBkYXRlc1xmUiIgNAorLklYIEl0ZW0gIi1tYXRvbWljLXVwZGF0ZXMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtYXRvbWljXC11cGRhdGVzXGZSIiA0CisuSVggSXRlbSAiLW1uby1hdG9taWMtdXBkYXRlcyIKKy5QRAorVGhpcyBvcHRpb24gY29udHJvbHMgdGhlIHZlcnNpb24gb2YgbGliZ2NjIHRoYXQgdGhlIGNvbXBpbGVyIGxpbmtzIHRvIGFuCitleGVjdXRhYmxlIGFuZCBzZWxlY3RzIHdoZXRoZXIgYXRvbWljIHVwZGF0ZXMgdG8gdGhlIHNvZnR3YXJlLW1hbmFnZWQKK2NhY2hlIG9mIFBQVS1zaWRlIHZhcmlhYmxlcyBhcmUgdXNlZC4gIElmIHlvdSB1c2UgYXRvbWljIHVwZGF0ZXMsIGNoYW5nZXMKK3RvIGEgXHMtMVBQVVxzMCB2YXJpYWJsZSBmcm9tIFxzLTFTUFVcczAgY29kZSB1c2luZyB0aGUgXGYoQ1dcKihDYF9cfF9lYVwqKEMnXGZSIG5hbWVkIGFkZHJlc3Mgc3BhY2UKK3F1YWxpZmllciBkbyBub3QgaW50ZXJmZXJlIHdpdGggY2hhbmdlcyB0byBvdGhlciBccy0xUFBVXHMwIHZhcmlhYmxlcyByZXNpZGluZworaW4gdGhlIHNhbWUgY2FjaGUgbGluZSBmcm9tIFxzLTFQUFVcczAgY29kZS4gIElmIHlvdSBkbyBub3QgdXNlIGF0b21pYyB1cGRhdGVzLAorc3VjaCBpbnRlcmZlcmVuY2UgbWF5IG9jY3VyOyBob3dldmVyLCB3cml0aW5nIGJhY2sgY2FjaGUgbGluZXMgaXMKK21vcmUgZWZmaWNpZW50LiAgVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gdXNlIGF0b21pYyB1cGRhdGVzLgorLklQICJcZkJcLW1kdWFsXC1ub3BzXGZSIiA0CisuSVggSXRlbSAiLW1kdWFsLW5vcHMiCisuUEQgMAorLklQICJcZkJcLW1kdWFsXC1ub3BzPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItbWR1YWwtbm9wcz1uIgorLlBECitCeSBkZWZhdWx0LCBccy0xR0NDXHMwIGluc2VydHMgbm9wcyB0byBpbmNyZWFzZSBkdWFsIGlzc3VlIHdoZW4gaXQgZXhwZWN0cworaXQgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UuICBcZkluXGZSIGNhbiBiZSBhIHZhbHVlIGZyb20gMCB0byAxMC4gIEEKK3NtYWxsZXIgXGZJblxmUiBpbnNlcnRzIGZld2VyIG5vcHMuICAxMCBpcyB0aGUgZGVmYXVsdCwgMCBpcyB0aGUKK3NhbWUgYXMgXGZCXC1tbm9cLWR1YWxcLW5vcHNcZlIuICBEaXNhYmxlZCB3aXRoIFxmQlwtT3NcZlIuCisuSVAgIlxmQlwtbWhpbnRcLW1heFwtbm9wcz1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLW1oaW50LW1heC1ub3BzPW4iCitNYXhpbXVtIG51bWJlciBvZiBub3BzIHRvIGluc2VydCBmb3IgYSBicmFuY2ggaGludC4gIEEgYnJhbmNoIGhpbnQgbXVzdAorYmUgYXQgbGVhc3QgOCBpbnN0cnVjdGlvbnMgYXdheSBmcm9tIHRoZSBicmFuY2ggaXQgaXMgYWZmZWN0aW5nLiAgXHMtMUdDQ1xzMAoraW5zZXJ0cyB1cCB0byBcZkluXGZSIG5vcHMgdG8gZW5mb3JjZSB0aGlzLCBvdGhlcndpc2UgaXQgZG9lcyBub3QKK2dlbmVyYXRlIHRoZSBicmFuY2ggaGludC4KKy5JUCAiXGZCXC1taGludFwtbWF4XC1kaXN0YW5jZT1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLW1oaW50LW1heC1kaXN0YW5jZT1uIgorVGhlIGVuY29kaW5nIG9mIHRoZSBicmFuY2ggaGludCBpbnN0cnVjdGlvbiBsaW1pdHMgdGhlIGhpbnQgdG8gYmUgd2l0aGluCisyNTYgaW5zdHJ1Y3Rpb25zIG9mIHRoZSBicmFuY2ggaXQgaXMgYWZmZWN0aW5nLiAgQnkgZGVmYXVsdCwgXHMtMUdDQ1xzMCBtYWtlcworc3VyZSBpdCBpcyB3aXRoaW4gMTI1LgorLklQICJcZkJcLW1zYWZlXC1oaW50c1xmUiIgNAorLklYIEl0ZW0gIi1tc2FmZS1oaW50cyIKK1dvcmsgYXJvdW5kIGEgaGFyZHdhcmUgYnVnIHRoYXQgY2F1c2VzIHRoZSBccy0xU1BVXHMwIHRvIHN0YWxsIGluZGVmaW5pdGVseS4KK0J5IGRlZmF1bHQsIFxzLTFHQ0NcczAgaW5zZXJ0cyB0aGUgXGYoQ1dcKihDYGhicnBcKihDJ1xmUiBpbnN0cnVjdGlvbiB0byBtYWtlIHN1cmUKK3RoaXMgc3RhbGwgd29uJ3QgaGFwcGVuLgorLlBQCitcZklPcHRpb25zIGZvciBTeXN0ZW0gVlxmUgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgZm9yIFN5c3RlbSBWIgorLlBQCitUaGVzZSBhZGRpdGlvbmFsIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiBTeXN0ZW0gViBSZWxlYXNlIDQgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgY29tcGlsZXJzIG9uIHRob3NlIHN5c3RlbXM6CisuSVAgIlxmQlwtR1xmUiIgNAorLklYIEl0ZW0gIi1HIgorQ3JlYXRlIGEgc2hhcmVkIG9iamVjdC4KK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgXGZCXC1zeW1ib2xpY1xmUiBvciBcZkJcLXNoYXJlZFxmUiBiZSB1c2VkIGluc3RlYWQuCisuSVAgIlxmQlwtUXlcZlIiIDQKKy5JWCBJdGVtICItUXkiCitJZGVudGlmeSB0aGUgdmVyc2lvbnMgb2YgZWFjaCB0b29sIHVzZWQgYnkgdGhlIGNvbXBpbGVyLCBpbiBhCitcJlxmKENXXCooQ2AuaWRlbnRcKihDJ1xmUiBhc3NlbWJsZXIgZGlyZWN0aXZlIGluIHRoZSBvdXRwdXQuCisuSVAgIlxmQlwtUW5cZlIiIDQKKy5JWCBJdGVtICItUW4iCitSZWZyYWluIGZyb20gYWRkaW5nIFxmKENXXCooQ2AuaWRlbnRcKihDJ1xmUiBkaXJlY3RpdmVzIHRvIHRoZSBvdXRwdXQgZmlsZSAodGhpcyBpcwordGhlIGRlZmF1bHQpLgorLklQICJcZkJcLVlQLFxmUlxmSWRpcnNcZlIiIDQKKy5JWCBJdGVtICItWVAsZGlycyIKK1NlYXJjaCB0aGUgZGlyZWN0b3JpZXMgXGZJZGlyc1xmUiwgYW5kIG5vIG90aGVycywgZm9yIGxpYnJhcmllcworc3BlY2lmaWVkIHdpdGggXGZCXC1sXGZSLgorLklQICJcZkJcLVltLFxmUlxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1ZbSxkaXIiCitMb29rIGluIHRoZSBkaXJlY3RvcnkgXGZJZGlyXGZSIHRvIGZpbmQgdGhlIE00IHByZXByb2Nlc3Nvci4KK1RoZSBhc3NlbWJsZXIgdXNlcyB0aGlzIG9wdGlvbi4KKy5QUAorXGZJVElMRS1HeCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiVElMRS1HeCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIG9uIHRoZSBUSUxFLUd4OgorLklQICJcZkJcLW1jbW9kZWw9c21hbGxcZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1zbWFsbCIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBzbWFsbCBtb2RlbC4gIFRoZSBkaXN0YW5jZSBmb3IgZGlyZWN0IGNhbGxzIGlzCitsaW1pdGVkIHRvIDUwME0gaW4gZWl0aGVyIGRpcmVjdGlvbi4gIFBDLXJlbGF0aXZlIGFkZHJlc3NlcyBhcmUgMzIKK2JpdHMuICBBYnNvbHV0ZSBhZGRyZXNzZXMgc3VwcG9ydCB0aGUgZnVsbCBhZGRyZXNzIHJhbmdlLgorLklQICJcZkJcLW1jbW9kZWw9bGFyZ2VcZlIiIDQKKy5JWCBJdGVtICItbWNtb2RlbD1sYXJnZSIKK0dlbmVyYXRlIGNvZGUgZm9yIHRoZSBsYXJnZSBtb2RlbC4gIFRoZXJlIGlzIG5vIGxpbWl0YXRpb24gb24gY2FsbAorZGlzdGFuY2UsIHBjLXJlbGF0aXZlIGFkZHJlc3Nlcywgb3IgYWJzb2x1dGUgYWRkcmVzc2VzLgorLklQICJcZkJcLW1jcHU9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1tY3B1PW5hbWUiCitTZWxlY3RzIHRoZSB0eXBlIG9mIFxzLTFDUFVcczAgdG8gYmUgdGFyZ2V0ZWQuICBDdXJyZW50bHkgdGhlIG9ubHkgc3VwcG9ydGVkCit0eXBlIGlzIFxmQnRpbGVneFxmUi4KKy5JUCAiXGZCXC1tMzJcZlIiIDQKKy5JWCBJdGVtICItbTMyIgorLlBEIDAKKy5JUCAiXGZCXC1tNjRcZlIiIDQKKy5JWCBJdGVtICItbTY0IgorLlBECitHZW5lcmF0ZSBjb2RlIGZvciBhIDMyXC1iaXQgb3IgNjRcLWJpdCBlbnZpcm9ubWVudC4gIFRoZSAzMlwtYml0CitlbnZpcm9ubWVudCBzZXRzIGludCwgbG9uZywgYW5kIHBvaW50ZXIgdG8gMzIgYml0cy4gIFRoZSA2NFwtYml0CitlbnZpcm9ubWVudCBzZXRzIGludCB0byAzMiBiaXRzIGFuZCBsb25nIGFuZCBwb2ludGVyIHRvIDY0IGJpdHMuCisuUFAKK1xmSVRJTEVQcm8gT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlRJTEVQcm8gT3B0aW9ucyIKKy5QUAorVGhlc2UgXGZCXC1tXGZSIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBvbiB0aGUgVElMRVBybzoKKy5JUCAiXGZCXC1tY3B1PVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbWNwdT1uYW1lIgorU2VsZWN0cyB0aGUgdHlwZSBvZiBccy0xQ1BVXHMwIHRvIGJlIHRhcmdldGVkLiAgQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZAordHlwZSBpcyBcZkJ0aWxlcHJvXGZSLgorLklQICJcZkJcLW0zMlxmUiIgNAorLklYIEl0ZW0gIi1tMzIiCitHZW5lcmF0ZSBjb2RlIGZvciBhIDMyXC1iaXQgZW52aXJvbm1lbnQsIHdoaWNoIHNldHMgaW50LCBsb25nLCBhbmQKK3BvaW50ZXIgdG8gMzIgYml0cy4gIFRoaXMgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGJlaGF2aW9yIHNvIHRoZSBmbGFnCitpcyBlc3NlbnRpYWxseSBpZ25vcmVkLgorLlBQCitcZklWODUwIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJWODUwIE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciBWODUwIGltcGxlbWVudGF0aW9uczoKKy5JUCAiXGZCXC1tbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctY2FsbHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbG9uZ1wtY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxvbmctY2FsbHMiCisuUEQKK1RyZWF0IGFsbCBjYWxscyBhcyBiZWluZyBmYXIgYXdheSAobmVhcikuICBJZiBjYWxscyBhcmUgYXNzdW1lZCB0byBiZQorZmFyIGF3YXksIHRoZSBjb21waWxlciBhbHdheXMgbG9hZHMgdGhlIGZ1bmN0aW9uJ3MgYWRkcmVzcyBpbnRvIGEKK3JlZ2lzdGVyLCBhbmQgY2FsbHMgaW5kaXJlY3QgdGhyb3VnaCB0aGUgcG9pbnRlci4KKy5JUCAiXGZCXC1tbm9cLWVwXGZSIiA0CisuSVggSXRlbSAiLW1uby1lcCIKKy5QRCAwCisuSVAgIlxmQlwtbWVwXGZSIiA0CisuSVggSXRlbSAiLW1lcCIKKy5QRAorRG8gbm90IG9wdGltaXplIChkbyBvcHRpbWl6ZSkgYmFzaWMgYmxvY2tzIHRoYXQgdXNlIHRoZSBzYW1lIGluZGV4Citwb2ludGVyIDQgb3IgbW9yZSB0aW1lcyB0byBjb3B5IHBvaW50ZXIgaW50byB0aGUgXGYoQ1dcKihDYGVwXCooQydcZlIgcmVnaXN0ZXIsIGFuZAordXNlIHRoZSBzaG9ydGVyIFxmKENXXCooQ2BzbGRcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYHNzdFwqKEMnXGZSIGluc3RydWN0aW9ucy4gIFRoZSBcZkJcLW1lcFxmUgorb3B0aW9uIGlzIG9uIGJ5IGRlZmF1bHQgaWYgeW91IG9wdGltaXplLgorLklQICJcZkJcLW1ub1wtcHJvbG9nXC1mdW5jdGlvblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcHJvbG9nLWZ1bmN0aW9uIgorLlBEIDAKKy5JUCAiXGZCXC1tcHJvbG9nXC1mdW5jdGlvblxmUiIgNAorLklYIEl0ZW0gIi1tcHJvbG9nLWZ1bmN0aW9uIgorLlBECitEbyBub3QgdXNlIChkbyB1c2UpIGV4dGVybmFsIGZ1bmN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVycworYXQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBvZiBhIGZ1bmN0aW9uLiAgVGhlIGV4dGVybmFsIGZ1bmN0aW9ucworYXJlIHNsb3dlciwgYnV0IHVzZSBsZXNzIGNvZGUgc3BhY2UgaWYgbW9yZSB0aGFuIG9uZSBmdW5jdGlvbiBzYXZlcwordGhlIHNhbWUgbnVtYmVyIG9mIHJlZ2lzdGVycy4gIFRoZSBcZkJcLW1wcm9sb2dcLWZ1bmN0aW9uXGZSIG9wdGlvbgoraXMgb24gYnkgZGVmYXVsdCBpZiB5b3Ugb3B0aW1pemUuCisuSVAgIlxmQlwtbXNwYWNlXGZSIiA0CisuSVggSXRlbSAiLW1zcGFjZSIKK1RyeSB0byBtYWtlIHRoZSBjb2RlIGFzIHNtYWxsIGFzIHBvc3NpYmxlLiAgQXQgcHJlc2VudCwgdGhpcyBqdXN0IHR1cm5zCitvbiB0aGUgXGZCXC1tZXBcZlIgYW5kIFxmQlwtbXByb2xvZ1wtZnVuY3Rpb25cZlIgb3B0aW9ucy4KKy5JUCAiXGZCXC1tdGRhPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItbXRkYT1uIgorUHV0IHN0YXRpYyBvciBnbG9iYWwgdmFyaWFibGVzIHdob3NlIHNpemUgaXMgXGZJblxmUiBieXRlcyBvciBsZXNzIGludG8KK3RoZSB0aW55IGRhdGEgYXJlYSB0aGF0IHJlZ2lzdGVyIFxmKENXXCooQ2BlcFwqKEMnXGZSIHBvaW50cyB0by4gIFRoZSB0aW55IGRhdGEKK2FyZWEgY2FuIGhvbGQgdXAgdG8gMjU2IGJ5dGVzIGluIHRvdGFsICgxMjggYnl0ZXMgZm9yIGJ5dGUgcmVmZXJlbmNlcykuCisuSVAgIlxmQlwtbXNkYT1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLW1zZGE9biIKK1B1dCBzdGF0aWMgb3IgZ2xvYmFsIHZhcmlhYmxlcyB3aG9zZSBzaXplIGlzIFxmSW5cZlIgYnl0ZXMgb3IgbGVzcyBpbnRvCit0aGUgc21hbGwgZGF0YSBhcmVhIHRoYXQgcmVnaXN0ZXIgXGYoQ1dcKihDYGdwXCooQydcZlIgcG9pbnRzIHRvLiAgVGhlIHNtYWxsIGRhdGEKK2FyZWEgY2FuIGhvbGQgdXAgdG8gNjQga2lsb2J5dGVzLgorLklQICJcZkJcLW16ZGE9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1temRhPW4iCitQdXQgc3RhdGljIG9yIGdsb2JhbCB2YXJpYWJsZXMgd2hvc2Ugc2l6ZSBpcyBcZkluXGZSIGJ5dGVzIG9yIGxlc3MgaW50bwordGhlIGZpcnN0IDMyIGtpbG9ieXRlcyBvZiBtZW1vcnkuCisuSVAgIlxmQlwtbXY4NTBcZlIiIDQKKy5JWCBJdGVtICItbXY4NTAiCitTcGVjaWZ5IHRoYXQgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgdGhlIFY4NTAuCisuSVAgIlxmQlwtbXY4NTBlM3Y1XGZSIiA0CisuSVggSXRlbSAiLW12ODUwZTN2NSIKK1NwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyB0aGUgVjg1MEUzVjUuICBUaGUgcHJlcHJvY2Vzc29yCitjb25zdGFudCBcZkJfXHxfdjg1MGUzdjVfXHxfXGZSIGlzIGRlZmluZWQgaWYgdGhpcyBvcHRpb24gaXMgdXNlZC4KKy5JUCAiXGZCXC1tdjg1MGUydjRcZlIiIDQKKy5JWCBJdGVtICItbXY4NTBlMnY0IgorU3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRTNWNS4gIFRoaXMgaXMgYW4gYWxpYXMgZm9yCit0aGUgXGZCXC1tdjg1MGUzdjVcZlIgb3B0aW9uLgorLklQICJcZkJcLW12ODUwZTJ2M1xmUiIgNAorLklYIEl0ZW0gIi1tdjg1MGUydjMiCitTcGVjaWZ5IHRoYXQgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgdGhlIFY4NTBFMlYzLiAgVGhlIHByZXByb2Nlc3NvcgorY29uc3RhbnQgXGZCX1x8X3Y4NTBlMnYzX1x8X1xmUiBpcyBkZWZpbmVkIGlmIHRoaXMgb3B0aW9uIGlzIHVzZWQuCisuSVAgIlxmQlwtbXY4NTBlMlxmUiIgNAorLklYIEl0ZW0gIi1tdjg1MGUyIgorU3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRTIuICBUaGUgcHJlcHJvY2Vzc29yCitjb25zdGFudCBcZkJfXHxfdjg1MGUyX1x8X1xmUiBpcyBkZWZpbmVkIGlmIHRoaXMgb3B0aW9uIGlzIHVzZWQuCisuSVAgIlxmQlwtbXY4NTBlMVxmUiIgNAorLklYIEl0ZW0gIi1tdjg1MGUxIgorU3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRTEuICBUaGUgcHJlcHJvY2Vzc29yCitjb25zdGFudHMgXGZCX1x8X3Y4NTBlMV9cfF9cZlIgYW5kIFxmQl9cfF92ODUwZV9cfF9cZlIgYXJlIGRlZmluZWQgaWYKK3RoaXMgb3B0aW9uIGlzIHVzZWQuCisuSVAgIlxmQlwtbXY4NTBlc1xmUiIgNAorLklYIEl0ZW0gIi1tdjg1MGVzIgorU3BlY2lmeSB0aGF0IHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIHRoZSBWODUwRVMuICBUaGlzIGlzIGFuIGFsaWFzIGZvcgordGhlIFxmQlwtbXY4NTBlMVxmUiBvcHRpb24uCisuSVAgIlxmQlwtbXY4NTBlXGZSIiA0CisuSVggSXRlbSAiLW12ODUwZSIKK1NwZWNpZnkgdGhhdCB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyB0aGUgVjg1MEUuICBUaGUgcHJlcHJvY2Vzc29yCitjb25zdGFudCBcZkJfXHxfdjg1MGVfXHxfXGZSIGlzIGRlZmluZWQgaWYgdGhpcyBvcHRpb24gaXMgdXNlZC4KKy5TcAorSWYgbmVpdGhlciBcZkJcLW12ODUwXGZSIG5vciBcZkJcLW12ODUwZVxmUiBub3IgXGZCXC1tdjg1MGUxXGZSCitub3IgXGZCXC1tdjg1MGUyXGZSIG5vciBcZkJcLW12ODUwZTJ2M1xmUiBub3IgXGZCXC1tdjg1MGUzdjVcZlIKK2FyZSBkZWZpbmVkIHRoZW4gYSBkZWZhdWx0IHRhcmdldCBwcm9jZXNzb3IgaXMgY2hvc2VuIGFuZCB0aGUKK3JlbGV2YW50IFxmQl9cfF92ODUwKl9cfF9cZlIgcHJlcHJvY2Vzc29yIGNvbnN0YW50IGlzIGRlZmluZWQuCisuU3AKK1RoZSBwcmVwcm9jZXNzb3IgY29uc3RhbnRzIFxmQl9cfF92ODUwXGZSIGFuZCBcZkJfXHxfdjg1MV9cfF9cZlIgYXJlIGFsd2F5cworZGVmaW5lZCwgcmVnYXJkbGVzcyBvZiB3aGljaCBwcm9jZXNzb3IgdmFyaWFudCBpcyB0aGUgdGFyZ2V0LgorLklQICJcZkJcLW1kaXNhYmxlXC1jYWxsdFxmUiIgNAorLklYIEl0ZW0gIi1tZGlzYWJsZS1jYWxsdCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1kaXNhYmxlXC1jYWxsdFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tZGlzYWJsZS1jYWxsdCIKKy5QRAorVGhpcyBvcHRpb24gc3VwcHJlc3NlcyBnZW5lcmF0aW9uIG9mIHRoZSBcZihDV1wqKENgQ0FMTFRcKihDJ1xmUiBpbnN0cnVjdGlvbiBmb3IgdGhlCit2ODUwZSwgdjg1MGUxLCB2ODUwZTIsIHY4NTBlMnYzIGFuZCB2ODUwZTN2NSBmbGF2b3JzIG9mIHRoZSB2ODUwCithcmNoaXRlY3R1cmUuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRoZSBccy0xUkg4NTBcczAgXHMtMUFCSVxzMCBpcworaW4gdXNlIChzZWUgXGZCXC1tcmg4NTBcLWFiaVxmUiksIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0IHdoZW4gdGhlCitcJlxzLTFHQ0NcczAgXHMtMUFCSVxzMCBpcyBpbiB1c2UuICBJZiBcZihDV1wqKENgQ0FMTFRcKihDJ1xmUiBpbnN0cnVjdGlvbnMgYXJlIGJlaW5nIGdlbmVyYXRlZAordGhlbiB0aGUgQyBwcmVwcm9jZXNzb3Igc3ltYm9sIFxmKENXXCooQ2BfXHxfVjg1MF9DQUxMVF9cfF9cKihDJ1xmUiB3aWxsIGJlIGRlZmluZWQuCisuSVAgIlxmQlwtbXJlbGF4XGZSIiA0CisuSVggSXRlbSAiLW1yZWxheCIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1yZWxheFxmUiIgNAorLklYIEl0ZW0gIi1tbm8tcmVsYXgiCisuUEQKK1Bhc3Mgb24gKG9yIGRvIG5vdCBwYXNzIG9uKSB0aGUgXGZCXC1tcmVsYXhcZlIgY29tbWFuZCBsaW5lIG9wdGlvbgordG8gdGhlIGFzc2VtYmxlci4KKy5JUCAiXGZCXC1tbG9uZ1wtanVtcHNcZlIiIDQKKy5JWCBJdGVtICItbWxvbmctanVtcHMiCisuUEQgMAorLklQICJcZkJcLW1ub1wtbG9uZ1wtanVtcHNcZlIiIDQKKy5JWCBJdGVtICItbW5vLWxvbmctanVtcHMiCisuUEQKK0Rpc2FibGUgKG9yIHJlLWVuYWJsZSkgdGhlIGdlbmVyYXRpb24gb2YgUEMtcmVsYXRpdmUganVtcCBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbXNvZnRcLWZsb2F0XGZSIiA0CisuSVggSXRlbSAiLW1zb2Z0LWZsb2F0IgorLlBEIDAKKy5JUCAiXGZCXC1taGFyZFwtZmxvYXRcZlIiIDQKKy5JWCBJdGVtICItbWhhcmQtZmxvYXQiCisuUEQKK0Rpc2FibGUgKG9yIHJlLWVuYWJsZSkgdGhlIGdlbmVyYXRpb24gb2YgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQKK2luc3RydWN0aW9ucy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgc2lnbmlmaWNhbnQgd2hlbiB0aGUgdGFyZ2V0CithcmNoaXRlY3R1cmUgaXMgXGZCVjg1MEUyVjNcZlIgb3IgaGlnaGVyLiAgSWYgaGFyZHdhcmUgZmxvYXRpbmcgcG9pbnQKK2luc3RydWN0aW9ucyBhcmUgYmVpbmcgZ2VuZXJhdGVkIHRoZW4gdGhlIEMgcHJlcHJvY2Vzc29yIHN5bWJvbAorXCZcZihDV1wqKENgX1x8X0ZQVV9PS19cfF9cKihDJ1xmUiB3aWxsIGJlIGRlZmluZWQsIG90aGVyd2lzZSB0aGUgc3ltYm9sCitcJlxmKENXXCooQ2BfXHxfTk9fRlBVX1x8X1wqKEMnXGZSIHdpbGwgYmUgZGVmaW5lZC4KKy5JUCAiXGZCXC1tbG9vcFxmUiIgNAorLklYIEl0ZW0gIi1tbG9vcCIKK0VuYWJsZXMgdGhlIHVzZSBvZiB0aGUgZTN2NSBccy0xTE9PUFxzMCBpbnN0cnVjdGlvbi4gIFRoZSB1c2Ugb2YgdGhpcworaW5zdHJ1Y3Rpb24gaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIHRoZSBlM3Y1IGFyY2hpdGVjdHVyZSBpcworc2VsZWN0ZWQgYmVjYXVzZSBpdHMgdXNlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbC4KKy5JUCAiXGZCXC1tcmg4NTBcLWFiaVxmUiIgNAorLklYIEl0ZW0gIi1tcmg4NTAtYWJpIgorLlBEIDAKKy5JUCAiXGZCXC1tZ2hzXGZSIiA0CisuSVggSXRlbSAiLW1naHMiCisuUEQKK0VuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFxzLTFSSDg1MFxzMCB2ZXJzaW9uIG9mIHRoZSBWODUwIFxzLTFBQklcczAuICBUaGlzIGlzIHRoZQorZGVmYXVsdC4gIFdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZSBccy0xQUJJXHMwIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6CisuUlMgNAorLklQICJcKGJ1IiA0CitJbnRlZ2VyIHNpemVkIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyBhcmUgcmV0dXJuZWQgdmlhIGEgbWVtb3J5IHBvaW50ZXIKK3JhdGhlciB0aGFuIGEgcmVnaXN0ZXIuCisuSVAgIlwoYnUiIDQKK0xhcmdlIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyAobW9yZSB0aGFuIDggYnl0ZXMgaW4gc2l6ZSkgYXJlIHBhc3NlZCBieQordmFsdWUuCisuSVAgIlwoYnUiIDQKK0Z1bmN0aW9ucyBhcmUgYWxpZ25lZCB0byAxNlwtYml0IGJvdW5kYXJpZXMuCisuSVAgIlwoYnUiIDQKK1RoZSBcZkJcLW04Ynl0ZVwtYWxpZ25cZlIgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBzdXBwb3J0ZWQuCisuSVAgIlwoYnUiIDQKK1RoZSBcZkJcLW1kaXNhYmxlXC1jYWxsdFxmUiBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIGVuYWJsZWQgYnkKK2RlZmF1bHQuICBUaGUgXGZCXC1tbm9cLWRpc2FibGVcLWNhbGx0XGZSIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgbm90CitzdXBwb3J0ZWQuCisuUkUKKy5SUyA0CisuU3AKK1doZW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBccy0xQUJJXHMwIGlzIGVuYWJsZWQgdGhlIEMgcHJlcHJvY2Vzc29yIHN5bWJvbAorXCZcZihDV1wqKENgX1x8X1Y4NTBfUkg4NTBfQUJJX1x8X1wqKEMnXGZSIGlzIGRlZmluZWQuCisuUkUKKy5JUCAiXGZCXC1tZ2NjXC1hYmlcZlIiIDQKKy5JWCBJdGVtICItbWdjYy1hYmkiCitFbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBvbGQgXHMtMUdDQ1xzMCB2ZXJzaW9uIG9mIHRoZSBWODUwIFxzLTFBQklcczAuICBXaXRoIHRoaXMKK3ZlcnNpb24gb2YgdGhlIFxzLTFBQklcczAgdGhlIGZvbGxvd2luZyBydWxlcyBhcHBseToKKy5SUyA0CisuSVAgIlwoYnUiIDQKK0ludGVnZXIgc2l6ZWQgc3RydWN0dXJlcyBhbmQgdW5pb25zIGFyZSByZXR1cm5lZCBpbiByZWdpc3RlciBcZihDV1wqKENgcjEwXCooQydcZlIuCisuSVAgIlwoYnUiIDQKK0xhcmdlIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyAobW9yZSB0aGFuIDggYnl0ZXMgaW4gc2l6ZSkgYXJlIHBhc3NlZCBieQorcmVmZXJlbmNlLgorLklQICJcKGJ1IiA0CitGdW5jdGlvbnMgYXJlIGFsaWduZWQgdG8gMzJcLWJpdCBib3VuZGFyaWVzLCB1bmxlc3Mgb3B0aW1pemluZyBmb3IKK3NpemUuCisuSVAgIlwoYnUiIDQKK1RoZSBcZkJcLW04Ynl0ZVwtYWxpZ25cZlIgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLgorLklQICJcKGJ1IiA0CitUaGUgXGZCXC1tZGlzYWJsZVwtY2FsbHRcZlIgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBzdXBwb3J0ZWQgYnV0IG5vdAorZW5hYmxlZCBieSBkZWZhdWx0LgorLlJFCisuUlMgNAorLlNwCitXaGVuIHRoaXMgdmVyc2lvbiBvZiB0aGUgXHMtMUFCSVxzMCBpcyBlbmFibGVkIHRoZSBDIHByZXByb2Nlc3NvciBzeW1ib2wKK1wmXGYoQ1dcKihDYF9cfF9WODUwX0dDQ19BQklfXHxfXCooQydcZlIgaXMgZGVmaW5lZC4KKy5SRQorLklQICJcZkJcLW04Ynl0ZVwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbThieXRlLWFsaWduIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLThieXRlXC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tbm8tOGJ5dGUtYWxpZ24iCisuUEQKK0VuYWJsZXMgc3VwcG9ydCBmb3IgXGYoQ1dcKihDYGRvdWJsZXNcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGxvbmcgbG9uZ1wqKEMnXGZSIHR5cGVzIHRvIGJlCithbGlnbmVkIG9uIDhcLWJ5dGUgYm91bmRhcmllcy4gIFRoZSBkZWZhdWx0IGlzIHRvIHJlc3RyaWN0IHRoZQorYWxpZ25tZW50IG9mIGFsbCBvYmplY3RzIHRvIGF0IG1vc3QgNFwtYnl0ZXMuICBXaGVuCitcJlxmQlwtbThieXRlXC1hbGlnblxmUiBpcyBpbiBlZmZlY3QgdGhlIEMgcHJlcHJvY2Vzc29yIHN5bWJvbAorXCZcZihDV1wqKENgX1x8X1Y4NTBfOEJZVEVfQUxJR05fXHxfXCooQydcZlIgd2lsbCBiZSBkZWZpbmVkLgorLklQICJcZkJcLW1iaWdcLXN3aXRjaFxmUiIgNAorLklYIEl0ZW0gIi1tYmlnLXN3aXRjaCIKK0dlbmVyYXRlIGNvZGUgc3VpdGFibGUgZm9yIGJpZyBzd2l0Y2ggdGFibGVzLiAgVXNlIHRoaXMgb3B0aW9uIG9ubHkgaWYKK3RoZSBhc3NlbWJsZXIvbGlua2VyIGNvbXBsYWluIGFib3V0IG91dCBvZiByYW5nZSBicmFuY2hlcyB3aXRoaW4gYSBzd2l0Y2gKK3RhYmxlLgorLklQICJcZkJcLW1hcHBcLXJlZ3NcZlIiIDQKKy5JWCBJdGVtICItbWFwcC1yZWdzIgorVGhpcyBvcHRpb24gY2F1c2VzIHIyIGFuZCByNSB0byBiZSB1c2VkIGluIHRoZSBjb2RlIGdlbmVyYXRlZCBieQordGhlIGNvbXBpbGVyLiAgVGhpcyBzZXR0aW5nIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLW1ub1wtYXBwXC1yZWdzXGZSIiA0CisuSVggSXRlbSAiLW1uby1hcHAtcmVncyIKK1RoaXMgb3B0aW9uIGNhdXNlcyByMiBhbmQgcjUgdG8gYmUgdHJlYXRlZCBhcyBmaXhlZCByZWdpc3RlcnMuCisuUFAKK1xmSVxzLTFWQVhcczAgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIlZBWCBPcHRpb25zIgorLlBQCitUaGVzZSBcZkJcLW1cZlIgb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIFxzLTFWQVg6XHMwCisuSVAgIlxmQlwtbXVuaXhcZlIiIDQKKy5JWCBJdGVtICItbXVuaXgiCitEbyBub3Qgb3V0cHV0IGNlcnRhaW4ganVtcCBpbnN0cnVjdGlvbnMgKFxmKENXXCooQ2Bhb2JsZXFcKihDJ1xmUiBhbmQgc28gb24pCit0aGF0IHRoZSBVbml4IGFzc2VtYmxlciBmb3IgdGhlIFxzLTFWQVhcczAgY2Fubm90IGhhbmRsZSBhY3Jvc3MgbG9uZworcmFuZ2VzLgorLklQICJcZkJcLW1nbnVcZlIiIDQKKy5JWCBJdGVtICItbWdudSIKK0RvIG91dHB1dCB0aG9zZSBqdW1wIGluc3RydWN0aW9ucywgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUKK1wmXHMtMUdOVVxzMCBhc3NlbWJsZXIgaXMgYmVpbmcgdXNlZC4KKy5JUCAiXGZCXC1tZ1xmUiIgNAorLklYIEl0ZW0gIi1tZyIKK091dHB1dCBjb2RlIGZvciBHXC1mb3JtYXQgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBpbnN0ZWFkIG9mIERcLWZvcm1hdC4KKy5QUAorXGZJXHMtMVZNU1xzMCBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiVk1TIE9wdGlvbnMiCisuUFAKK1RoZXNlIFxmQlwtbVxmUiBvcHRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgXHMtMVZNU1xzMCBpbXBsZW1lbnRhdGlvbnM6CisuSVAgIlxmQlwtbXZtc1wtcmV0dXJuXC1jb2Rlc1xmUiIgNAorLklYIEl0ZW0gIi1tdm1zLXJldHVybi1jb2RlcyIKK1JldHVybiBccy0xVk1TXHMwIGNvbmRpdGlvbiBjb2RlcyBmcm9tIFxmKENXXCooQ2BtYWluXCooQydcZlIuIFRoZSBkZWZhdWx0IGlzIHRvIHJldHVybiBQT1NJWC1zdHlsZQorY29uZGl0aW9uIChlLmcuIGVycm9yKSBjb2Rlcy4KKy5JUCAiXGZCXC1tZGVidWdcLW1haW49XGZSXGZJcHJlZml4XGZSIiA0CisuSVggSXRlbSAiLW1kZWJ1Zy1tYWluPXByZWZpeCIKK0ZsYWcgdGhlIGZpcnN0IHJvdXRpbmUgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBcZklwcmVmaXhcZlIgYXMgdGhlIG1haW4KK3JvdXRpbmUgZm9yIHRoZSBkZWJ1Z2dlci4KKy5JUCAiXGZCXC1tbWFsbG9jNjRcZlIiIDQKKy5JWCBJdGVtICItbW1hbGxvYzY0IgorRGVmYXVsdCB0byA2NFwtYml0IG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgorLklQICJcZkJcLW1wb2ludGVyXC1zaXplPVxmUlxmSXNpemVcZlIiIDQKKy5JWCBJdGVtICItbXBvaW50ZXItc2l6ZT1zaXplIgorU2V0IHRoZSBkZWZhdWx0IHNpemUgb2YgcG9pbnRlcnMuIFBvc3NpYmxlIG9wdGlvbnMgZm9yIFxmSXNpemVcZlIgYXJlCitcJlxmQjMyXGZSIG9yIFxmQnNob3J0XGZSIGZvciAzMiBiaXQgcG9pbnRlcnMsIFxmQjY0XGZSIG9yIFxmQmxvbmdcZlIKK2ZvciA2NCBiaXQgcG9pbnRlcnMsIGFuZCBcZkJub1xmUiBmb3Igc3VwcG9ydGluZyBvbmx5IDMyIGJpdCBwb2ludGVycy4KK1RoZSBsYXRlciBvcHRpb24gZGlzYWJsZXMgXGYoQ1dcKihDYHByYWdtYSBwb2ludGVyX3NpemVcKihDJ1xmUi4KKy5QUAorXGZJVnhXb3JrcyBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiVnhXb3JrcyBPcHRpb25zIgorLlBQCitUaGUgb3B0aW9ucyBpbiB0aGlzIHNlY3Rpb24gYXJlIGRlZmluZWQgZm9yIGFsbCBWeFdvcmtzIHRhcmdldHMuCitPcHRpb25zIHNwZWNpZmljIHRvIHRoZSB0YXJnZXQgaGFyZHdhcmUgYXJlIGxpc3RlZCB3aXRoIHRoZSBvdGhlcgorb3B0aW9ucyBmb3IgdGhhdCB0YXJnZXQuCisuSVAgIlxmQlwtbXJ0cFxmUiIgNAorLklYIEl0ZW0gIi1tcnRwIgorXCZccy0xR0NDXHMwIGNhbiBnZW5lcmF0ZSBjb2RlIGZvciBib3RoIFZ4V29ya3Mga2VybmVscyBhbmQgcmVhbCB0aW1lIHByb2Nlc3NlcworKFJUUHMpLiAgVGhpcyBvcHRpb24gc3dpdGNoZXMgZnJvbSB0aGUgZm9ybWVyIHRvIHRoZSBsYXR0ZXIuICBJdCBhbHNvCitkZWZpbmVzIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8gXGYoQ1dcKihDYF9cfF9SVFBfXHxfXCooQydcZlIuCisuSVAgIlxmQlwtbm9uXC1zdGF0aWNcZlIiIDQKKy5JWCBJdGVtICItbm9uLXN0YXRpYyIKK0xpbmsgYW4gXHMtMVJUUFxzMCBleGVjdXRhYmxlIGFnYWluc3Qgc2hhcmVkIGxpYnJhcmllcyByYXRoZXIgdGhhbiBzdGF0aWMKK2xpYnJhcmllcy4gIFRoZSBvcHRpb25zIFxmQlwtc3RhdGljXGZSIGFuZCBcZkJcLXNoYXJlZFxmUiBjYW4KK2Fsc28gYmUgdXNlZCBmb3IgUlRQczsgXGZCXC1zdGF0aWNcZlIKK2lzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLUJzdGF0aWNcZlIiIDQKKy5JWCBJdGVtICItQnN0YXRpYyIKKy5QRCAwCisuSVAgIlxmQlwtQmR5bmFtaWNcZlIiIDQKKy5JWCBJdGVtICItQmR5bmFtaWMiCisuUEQKK1RoZXNlIG9wdGlvbnMgYXJlIHBhc3NlZCBkb3duIHRvIHRoZSBsaW5rZXIuICBUaGV5IGFyZSBkZWZpbmVkIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIERpYWIuCisuSVAgIlxmQlwtWGJpbmRcLWxhenlcZlIiIDQKKy5JWCBJdGVtICItWGJpbmQtbGF6eSIKK0VuYWJsZSBsYXp5IGJpbmRpbmcgb2YgZnVuY3Rpb24gY2FsbHMuICBUaGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvCitcJlxmQlwtV2wsXC16LG5vd1xmUiBhbmQgaXMgZGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIERpYWIuCisuSVAgIlxmQlwtWGJpbmRcLW5vd1xmUiIgNAorLklYIEl0ZW0gIi1YYmluZC1ub3ciCitEaXNhYmxlIGxhenkgYmluZGluZyBvZiBmdW5jdGlvbiBjYWxscy4gIFRoaXMgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IGFuZAoraXMgZGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIERpYWIuCisuUFAKK1xmSXg4NlwtNjQgT3B0aW9uc1xmUgorLklYIFN1YnNlY3Rpb24gIng4Ni02NCBPcHRpb25zIgorLlBQCitUaGVzZSBhcmUgbGlzdGVkIHVuZGVyCisuUFAKK1xmSVhzdG9ybXkxNiBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAiWHN0b3JteTE2IE9wdGlvbnMiCisuUFAKK1RoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIFhzdG9ybXkxNjoKKy5JUCAiXGZCXC1tc2ltXGZSIiA0CisuSVggSXRlbSAiLW1zaW0iCitDaG9vc2Ugc3RhcnR1cCBmaWxlcyBhbmQgbGlua2VyIHNjcmlwdCBzdWl0YWJsZSBmb3IgdGhlIHNpbXVsYXRvci4KKy5QUAorXGZJWHRlbnNhIE9wdGlvbnNcZlIKKy5JWCBTdWJzZWN0aW9uICJYdGVuc2EgT3B0aW9ucyIKKy5QUAorVGhlc2Ugb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGZvciBYdGVuc2EgdGFyZ2V0czoKKy5JUCAiXGZCXC1tY29uc3QxNlxmUiIgNAorLklYIEl0ZW0gIi1tY29uc3QxNiIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC1jb25zdDE2XGZSIiA0CisuSVggSXRlbSAiLW1uby1jb25zdDE2IgorLlBECitFbmFibGUgb3IgZGlzYWJsZSB1c2Ugb2YgXGYoQ1dcKihDYENPTlNUMTZcKihDJ1xmUiBpbnN0cnVjdGlvbnMgZm9yIGxvYWRpbmcKK2NvbnN0YW50IHZhbHVlcy4gIFRoZSBcZihDV1wqKENgQ09OU1QxNlwqKEMnXGZSIGluc3RydWN0aW9uIGlzIGN1cnJlbnRseSBub3QgYQorc3RhbmRhcmQgb3B0aW9uIGZyb20gVGVuc2lsaWNhLiAgV2hlbiBlbmFibGVkLCBcZihDV1wqKENgQ09OU1QxNlwqKEMnXGZSCitpbnN0cnVjdGlvbnMgYXJlIGFsd2F5cyB1c2VkIGluIHBsYWNlIG9mIHRoZSBzdGFuZGFyZCBcZihDV1wqKENgTDMyUlwqKEMnXGZSCitpbnN0cnVjdGlvbnMuICBUaGUgdXNlIG9mIFxmKENXXCooQ2BDT05TVDE2XCooQydcZlIgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9ubHkgaWYKK3RoZSBcZihDV1wqKENgTDMyUlwqKEMnXGZSIGluc3RydWN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisuSVAgIlxmQlwtbWZ1c2VkXC1tYWRkXGZSIiA0CisuSVggSXRlbSAiLW1mdXNlZC1tYWRkIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWZ1c2VkXC1tYWRkXGZSIiA0CisuSVggSXRlbSAiLW1uby1mdXNlZC1tYWRkIgorLlBECitFbmFibGUgb3IgZGlzYWJsZSB1c2Ugb2YgZnVzZWQgbXVsdGlwbHkvYWRkIGFuZCBtdWx0aXBseS9zdWJ0cmFjdAoraW5zdHJ1Y3Rpb25zIGluIHRoZSBmbG9hdGluZy1wb2ludCBvcHRpb24uICBUaGlzIGhhcyBubyBlZmZlY3QgaWYgdGhlCitmbG9hdGluZy1wb2ludCBvcHRpb24gaXMgbm90IGFsc28gZW5hYmxlZC4gIERpc2FibGluZyBmdXNlZCBtdWx0aXBseS9hZGQKK2FuZCBtdWx0aXBseS9zdWJ0cmFjdCBpbnN0cnVjdGlvbnMgZm9yY2VzIHRoZSBjb21waWxlciB0byB1c2Ugc2VwYXJhdGUKK2luc3RydWN0aW9ucyBmb3IgdGhlIG11bHRpcGx5IGFuZCBhZGQvc3VidHJhY3Qgb3BlcmF0aW9ucy4gIFRoaXMgbWF5IGJlCitkZXNpcmFibGUgaW4gc29tZSBjYXNlcyB3aGVyZSBzdHJpY3QgXHMtMUlFRUVcczAgNzU0XC1jb21wbGlhbnQgcmVzdWx0cyBhcmUKK3JlcXVpcmVkOiB0aGUgZnVzZWQgbXVsdGlwbHkgYWRkL3N1YnRyYWN0IGluc3RydWN0aW9ucyBkbyBub3Qgcm91bmQgdGhlCitpbnRlcm1lZGlhdGUgcmVzdWx0LCB0aGVyZWJ5IHByb2R1Y2luZyByZXN1bHRzIHdpdGggXGZJbW9yZVxmUiBiaXRzIG9mCitwcmVjaXNpb24gdGhhbiBzcGVjaWZpZWQgYnkgdGhlIFxzLTFJRUVFXHMwIHN0YW5kYXJkLiAgRGlzYWJsaW5nIGZ1c2VkIG11bHRpcGx5CithZGQvc3VidHJhY3QgaW5zdHJ1Y3Rpb25zIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBwcm9ncmFtIG91dHB1dCBpcyBub3QKK3NlbnNpdGl2ZSB0byB0aGUgY29tcGlsZXIncyBhYmlsaXR5IHRvIGNvbWJpbmUgbXVsdGlwbHkgYW5kIGFkZC9zdWJ0cmFjdAorb3BlcmF0aW9ucy4KKy5JUCAiXGZCXC1tc2VyaWFsaXplXC12b2xhdGlsZVxmUiIgNAorLklYIEl0ZW0gIi1tc2VyaWFsaXplLXZvbGF0aWxlIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXNlcmlhbGl6ZVwtdm9sYXRpbGVcZlIiIDQKKy5JWCBJdGVtICItbW5vLXNlcmlhbGl6ZS12b2xhdGlsZSIKKy5QRAorV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBccy0xR0NDXHMwIGluc2VydHMgXGYoQ1dcKihDYE1FTVdcKihDJ1xmUiBpbnN0cnVjdGlvbnMgYmVmb3JlCitcJlxmKENXXCooQ2B2b2xhdGlsZVwqKEMnXGZSIG1lbW9yeSByZWZlcmVuY2VzIHRvIGd1YXJhbnRlZSBzZXF1ZW50aWFsIGNvbnNpc3RlbmN5LgorVGhlIGRlZmF1bHQgaXMgXGZCXC1tc2VyaWFsaXplXC12b2xhdGlsZVxmUi4gIFVzZQorXCZcZkJcLW1ub1wtc2VyaWFsaXplXC12b2xhdGlsZVxmUiB0byBvbWl0IHRoZSBcZihDV1wqKENgTUVNV1wqKEMnXGZSIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1tZm9yY2VcLW5vXC1waWNcZlIiIDQKKy5JWCBJdGVtICItbWZvcmNlLW5vLXBpYyIKK0ZvciB0YXJnZXRzLCBsaWtlIEdOVS9MaW51eCwgd2hlcmUgYWxsIHVzZXItbW9kZSBYdGVuc2EgY29kZSBtdXN0IGJlCitwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIChccy0xUElDXHMwKSwgdGhpcyBvcHRpb24gZGlzYWJsZXMgXHMtMVBJQ1xzMCBmb3IgY29tcGlsaW5nCitrZXJuZWwgY29kZS4KKy5JUCAiXGZCXC1tdGV4dFwtc2VjdGlvblwtbGl0ZXJhbHNcZlIiIDQKKy5JWCBJdGVtICItbXRleHQtc2VjdGlvbi1saXRlcmFscyIKKy5QRCAwCisuSVAgIlxmQlwtbW5vXC10ZXh0XC1zZWN0aW9uXC1saXRlcmFsc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tdGV4dC1zZWN0aW9uLWxpdGVyYWxzIgorLlBECitDb250cm9sIHRoZSB0cmVhdG1lbnQgb2YgbGl0ZXJhbCBwb29scy4gIFRoZSBkZWZhdWx0IGlzCitcJlxmQlwtbW5vXC10ZXh0XC1zZWN0aW9uXC1saXRlcmFsc1xmUiwgd2hpY2ggcGxhY2VzIGxpdGVyYWxzIGluIGEgc2VwYXJhdGUKK3NlY3Rpb24gaW4gdGhlIG91dHB1dCBmaWxlLiAgVGhpcyBhbGxvd3MgdGhlIGxpdGVyYWwgcG9vbCB0byBiZSBwbGFjZWQKK2luIGEgZGF0YSBccy0xUkFNL1JPTVxzMCwgYW5kIGl0IGFsc28gYWxsb3dzIHRoZSBsaW5rZXIgdG8gY29tYmluZSBsaXRlcmFsCitwb29scyBmcm9tIHNlcGFyYXRlIG9iamVjdCBmaWxlcyB0byByZW1vdmUgcmVkdW5kYW50IGxpdGVyYWxzIGFuZAoraW1wcm92ZSBjb2RlIHNpemUuICBXaXRoIFxmQlwtbXRleHRcLXNlY3Rpb25cLWxpdGVyYWxzXGZSLCB0aGUgbGl0ZXJhbHMKK2FyZSBpbnRlcnNwZXJzZWQgaW4gdGhlIHRleHQgc2VjdGlvbiBpbiBvcmRlciB0byBrZWVwIHRoZW0gYXMgY2xvc2UgYXMKK3Bvc3NpYmxlIHRvIHRoZWlyIHJlZmVyZW5jZXMuICBUaGlzIG1heSBiZSBuZWNlc3NhcnkgZm9yIGxhcmdlIGFzc2VtYmx5CitmaWxlcy4KKy5JUCAiXGZCXC1tdGFyZ2V0XC1hbGlnblxmUiIgNAorLklYIEl0ZW0gIi1tdGFyZ2V0LWFsaWduIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLXRhcmdldFwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItbW5vLXRhcmdldC1hbGlnbiIKKy5QRAorV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBccy0xR0NDXHMwIGluc3RydWN0cyB0aGUgYXNzZW1ibGVyIHRvCithdXRvbWF0aWNhbGx5IGFsaWduIGluc3RydWN0aW9ucyB0byByZWR1Y2UgYnJhbmNoIHBlbmFsdGllcyBhdCB0aGUKK2V4cGVuc2Ugb2Ygc29tZSBjb2RlIGRlbnNpdHkuICBUaGUgYXNzZW1ibGVyIGF0dGVtcHRzIHRvIHdpZGVuIGRlbnNpdHkKK2luc3RydWN0aW9ucyB0byBhbGlnbiBicmFuY2ggdGFyZ2V0cyBhbmQgdGhlIGluc3RydWN0aW9ucyBmb2xsb3dpbmcgY2FsbAoraW5zdHJ1Y3Rpb25zLiAgSWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcHJlY2VkaW5nIHNhZmUgZGVuc2l0eQoraW5zdHJ1Y3Rpb25zIHRvIGFsaWduIGEgdGFyZ2V0LCBubyB3aWRlbmluZyBpcyBwZXJmb3JtZWQuICBUaGUKK2RlZmF1bHQgaXMgXGZCXC1tdGFyZ2V0XC1hbGlnblxmUi4gIFRoZXNlIG9wdGlvbnMgZG8gbm90IGFmZmVjdCB0aGUKK3RyZWF0bWVudCBvZiBhdXRvLWFsaWduZWQgaW5zdHJ1Y3Rpb25zIGxpa2UgXGYoQ1dcKihDYExPT1BcKihDJ1xmUiwgd2hpY2ggdGhlCithc3NlbWJsZXIgYWx3YXlzIGFsaWducywgZWl0aGVyIGJ5IHdpZGVuaW5nIGRlbnNpdHkgaW5zdHJ1Y3Rpb25zIG9yCitieSBpbnNlcnRpbmcgXHMtMU5PUFxzMCBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtbWxvbmdjYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tbG9uZ2NhbGxzIgorLlBEIDAKKy5JUCAiXGZCXC1tbm9cLWxvbmdjYWxsc1xmUiIgNAorLklYIEl0ZW0gIi1tbm8tbG9uZ2NhbGxzIgorLlBECitXaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIFxzLTFHQ0NcczAgaW5zdHJ1Y3RzIHRoZSBhc3NlbWJsZXIgdG8gdHJhbnNsYXRlCitkaXJlY3QgY2FsbHMgdG8gaW5kaXJlY3QgY2FsbHMgdW5sZXNzIGl0IGNhbiBkZXRlcm1pbmUgdGhhdCB0aGUgdGFyZ2V0CitvZiBhIGRpcmVjdCBjYWxsIGlzIGluIHRoZSByYW5nZSBhbGxvd2VkIGJ5IHRoZSBjYWxsIGluc3RydWN0aW9uLiAgVGhpcwordHJhbnNsYXRpb24gdHlwaWNhbGx5IG9jY3VycyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGluIG90aGVyIHNvdXJjZQorZmlsZXMuICBTcGVjaWZpY2FsbHksIHRoZSBhc3NlbWJsZXIgdHJhbnNsYXRlcyBhIGRpcmVjdCBcZihDV1wqKENgQ0FMTFwqKEMnXGZSCitpbnN0cnVjdGlvbiBpbnRvIGFuIFxmKENXXCooQ2BMMzJSXCooQydcZlIgZm9sbG93ZWQgYnkgYSBcZihDV1wqKENgQ0FMTFhcKihDJ1xmUiBpbnN0cnVjdGlvbi4KK1RoZSBkZWZhdWx0IGlzIFxmQlwtbW5vXC1sb25nY2FsbHNcZlIuICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCBpbgorcHJvZ3JhbXMgd2hlcmUgdGhlIGNhbGwgdGFyZ2V0IGNhbiBwb3RlbnRpYWxseSBiZSBvdXQgb2YgcmFuZ2UuICBUaGlzCitvcHRpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGFzc2VtYmxlciwgbm90IHRoZSBjb21waWxlciwgc28gdGhlCithc3NlbWJseSBjb2RlIGdlbmVyYXRlZCBieSBccy0xR0NDXHMwIHN0aWxsIHNob3dzIGRpcmVjdCBjYWxsCitpbnN0cnVjdGlvbnNcLVwtXC1sb29rIGF0IHRoZSBkaXNhc3NlbWJsZWQgb2JqZWN0IGNvZGUgdG8gc2VlIHRoZSBhY3R1YWwKK2luc3RydWN0aW9ucy4gIE5vdGUgdGhhdCB0aGUgYXNzZW1ibGVyIHVzZXMgYW4gaW5kaXJlY3QgY2FsbCBmb3IKK2V2ZXJ5IGNyb3NzLWZpbGUgY2FsbCwgbm90IGp1c3QgdGhvc2UgdGhhdCByZWFsbHkgYXJlIG91dCBvZiByYW5nZS4KKy5QUAorXGZJelNlcmllcyBPcHRpb25zXGZSCisuSVggU3Vic2VjdGlvbiAielNlcmllcyBPcHRpb25zIgorLlBQCitUaGVzZSBhcmUgbGlzdGVkIHVuZGVyCisuU1MgIk9wdGlvbnMgZm9yIENvZGUgR2VuZXJhdGlvbiBDb252ZW50aW9ucyIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIGZvciBDb2RlIEdlbmVyYXRpb24gQ29udmVudGlvbnMiCitUaGVzZSBtYWNoaW5lLWluZGVwZW5kZW50IG9wdGlvbnMgY29udHJvbCB0aGUgaW50ZXJmYWNlIGNvbnZlbnRpb25zCit1c2VkIGluIGNvZGUgZ2VuZXJhdGlvbi4KKy5QUAorTW9zdCBvZiB0aGVtIGhhdmUgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXM7IHRoZSBuZWdhdGl2ZSBmb3JtCitvZiBcZkJcLWZmb29cZlIgaXMgXGZCXC1mbm9cLWZvb1xmUi4gIEluIHRoZSB0YWJsZSBiZWxvdywgb25seQorb25lIG9mIHRoZSBmb3JtcyBpcyBsaXN0ZWRcLVwtXC10aGUgb25lIHRoYXQgaXMgbm90IHRoZSBkZWZhdWx0LiAgWW91CitjYW4gZmlndXJlIG91dCB0aGUgb3RoZXIgZm9ybSBieSBlaXRoZXIgcmVtb3ZpbmcgXGZCbm9cLVxmUiBvciBhZGRpbmcKK2l0LgorLklQICJcZkJcLWZib3VuZHNcLWNoZWNrXGZSIiA0CisuSVggSXRlbSAiLWZib3VuZHMtY2hlY2siCitGb3IgZnJvbnQgZW5kcyB0aGF0IHN1cHBvcnQgaXQsIGdlbmVyYXRlIGFkZGl0aW9uYWwgY29kZSB0byBjaGVjayB0aGF0CitpbmRpY2VzIHVzZWQgdG8gYWNjZXNzIGFycmF5cyBhcmUgd2l0aGluIHRoZSBkZWNsYXJlZCByYW5nZS4gIFRoaXMgaXMKK2N1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBieSB0aGUgSmF2YSBhbmQgRm9ydHJhbiBmcm9udCBlbmRzLCB3aGVyZQordGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgZmFsc2UgcmVzcGVjdGl2ZWx5LgorLklQICJcZkJcLWZzdGFja1wtcmV1c2U9XGZSXGZJcmV1c2UtbGV2ZWxcZlIiIDQKKy5JWCBJdGVtICItZnN0YWNrLXJldXNlPXJldXNlLWxldmVsIgorVGhpcyBvcHRpb24gY29udHJvbHMgc3RhY2sgc3BhY2UgcmV1c2UgZm9yIHVzZXIgZGVjbGFyZWQgbG9jYWwvYXV0byB2YXJpYWJsZXMKK2FuZCBjb21waWxlciBnZW5lcmF0ZWQgdGVtcG9yYXJpZXMuICBcZklyZXVzZV9sZXZlbFxmUiBjYW4gYmUgXGZCYWxsXGZSLAorXCZcZkJuYW1lZF92YXJzXGZSLCBvciBcZkJub25lXGZSLiBcZkJhbGxcZlIgZW5hYmxlcyBzdGFjayByZXVzZSBmb3IgYWxsCitsb2NhbCB2YXJpYWJsZXMgYW5kIHRlbXBvcmFyaWVzLCBcZkJuYW1lZF92YXJzXGZSIGVuYWJsZXMgdGhlIHJldXNlIG9ubHkgZm9yCit1c2VyIGRlZmluZWQgbG9jYWwgdmFyaWFibGVzIHdpdGggbmFtZXMsIGFuZCBcZkJub25lXGZSIGRpc2FibGVzIHN0YWNrIHJldXNlCitjb21wbGV0ZWx5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBcZkJhbGxcZlIuIFRoZSBvcHRpb24gaXMgbmVlZGVkIHdoZW4gdGhlCitwcm9ncmFtIGV4dGVuZHMgdGhlIGxpZmV0aW1lIG9mIGEgc2NvcGVkIGxvY2FsIHZhcmlhYmxlIG9yIGEgY29tcGlsZXIgZ2VuZXJhdGVkCit0ZW1wb3JhcnkgYmV5b25kIHRoZSBlbmQgcG9pbnQgZGVmaW5lZCBieSB0aGUgbGFuZ3VhZ2UuICBXaGVuIGEgbGlmZXRpbWUgb2YKK2EgdmFyaWFibGUgZW5kcywgYW5kIGlmIHRoZSB2YXJpYWJsZSBsaXZlcyBpbiBtZW1vcnksIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyCitoYXMgdGhlIGZyZWVkb20gdG8gcmV1c2UgaXRzIHN0YWNrIHNwYWNlIHdpdGggb3RoZXIgdGVtcG9yYXJpZXMgb3Igc2NvcGVkCitsb2NhbCB2YXJpYWJsZXMgd2hvc2UgbGl2ZSByYW5nZSBkb2VzIG5vdCBvdmVybGFwIHdpdGggaXQuIExlZ2FjeSBjb2RlIGV4dGVuZGluZworbG9jYWwgbGlmZXRpbWUgd2lsbCBsaWtlbHkgdG8gYnJlYWsgd2l0aCB0aGUgc3RhY2sgcmV1c2Ugb3B0aW1pemF0aW9uLgorLlNwCitGb3IgZXhhbXBsZSwKKy5TcAorLlZiIDMKK1wmICAgICAgICAgICBpbnQgKnA7CitcJiAgICAgICAgICAgeworXCYgICAgICAgICAgICAgaW50IGxvY2FsMTsKK1wmICAgICAgICAKK1wmICAgICAgICAgICAgIHAgPSAmbG9jYWwxOworXCYgICAgICAgICAgICAgbG9jYWwxID0gMTA7CitcJiAgICAgICAgICAgICAuLi4uCitcJiAgICAgICAgICAgfQorXCYgICAgICAgICAgIHsKK1wmICAgICAgICAgICAgICBpbnQgbG9jYWwyOworXCYgICAgICAgICAgICAgIGxvY2FsMiA9IDIwOworXCYgICAgICAgICAgICAgIC4uLgorXCYgICAgICAgICAgIH0KK1wmICAgICAgICAKK1wmICAgICAgICAgICBpZiAoKnAgPT0gMTApICAvLyBvdXQgb2Ygc2NvcGUgdXNlIG9mIGxvY2FsMQorXCYgICAgICAgICAgICAgeworXCYgICAgICAgIAorXCYgICAgICAgICAgICAgfQorLlZlCisuU3AKK0Fub3RoZXIgZXhhbXBsZToKKy5TcAorLlZiIDYKK1wmICAgICAgICAgICBzdHJ1Y3QgQQorXCYgICAgICAgICAgIHsKK1wmICAgICAgICAgICAgICAgQShpbnQgaykgOiBpKGspLCBqKGspIHsgfQorXCYgICAgICAgICAgICAgICBpbnQgaTsKK1wmICAgICAgICAgICAgICAgaW50IGo7CitcJiAgICAgICAgICAgfTsKK1wmICAgICAgICAKK1wmICAgICAgICAgICBBICphcDsKK1wmICAgICAgICAKK1wmICAgICAgICAgICB2b2lkIGZvbyhjb25zdCBBJiBhcikKK1wmICAgICAgICAgICB7CitcJiAgICAgICAgICAgICAgYXAgPSAmYXI7CitcJiAgICAgICAgICAgfQorXCYgICAgICAgIAorXCYgICAgICAgICAgIHZvaWQgYmFyKCkKK1wmICAgICAgICAgICB7CitcJiAgICAgICAgICAgICAgZm9vKEEoMTApKTsgLy8gdGVtcCBvYmplY3RcKihBcXMgbGlmZXRpbWUgZW5kcyB3aGVuIGZvbyByZXR1cm5zCitcJiAgICAgICAgCitcJiAgICAgICAgICAgICAgeworXCYgICAgICAgICAgICAgICAgQSBhKDIwKTsKK1wmICAgICAgICAgICAgICAgIC4uLi4KK1wmICAgICAgICAgICAgICB9CitcJiAgICAgICAgICAgICAgYXBcLT5pKz0gMTA7ICAvLyBhcCByZWZlcmVuY2VzIG91dCBvZiBzY29wZSB0ZW1wIHdob3NlIHNwYWNlCitcJiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHJldXNlZCB3aXRoIGEuIFdoYXQgaXMgdGhlIHZhbHVlIG9mIGFwXC0+aT8KK1wmICAgICAgICAgICB9CisuVmUKKy5TcAorVGhlIGxpZmV0aW1lIG9mIGEgY29tcGlsZXIgZ2VuZXJhdGVkIHRlbXBvcmFyeSBpcyB3ZWxsIGRlZmluZWQgYnkgdGhlIFwqKEMrCitzdGFuZGFyZC4gV2hlbiBhIGxpZmV0aW1lIG9mIGEgdGVtcG9yYXJ5IGVuZHMsIGFuZCBpZiB0aGUgdGVtcG9yYXJ5IGxpdmVzCitpbiBtZW1vcnksIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGhhcyB0aGUgZnJlZWRvbSB0byByZXVzZSBpdHMgc3RhY2sKK3NwYWNlIHdpdGggb3RoZXIgdGVtcG9yYXJpZXMgb3Igc2NvcGVkIGxvY2FsIHZhcmlhYmxlcyB3aG9zZSBsaXZlIHJhbmdlCitkb2VzIG5vdCBvdmVybGFwIHdpdGggaXQuIEhvd2V2ZXIgc29tZSBvZiB0aGUgbGVnYWN5IGNvZGUgcmVsaWVzIG9uCit0aGUgYmVoYXZpb3Igb2Ygb2xkZXIgY29tcGlsZXJzIGluIHdoaWNoIHRlbXBvcmFyaWVzJyBzdGFjayBzcGFjZSBpcworbm90IHJldXNlZCwgdGhlIGFnZ3Jlc3NpdmUgc3RhY2sgcmV1c2UgY2FuIGxlYWQgdG8gcnVudGltZSBlcnJvcnMuIFRoaXMKK29wdGlvbiBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHRlbXBvcmFyeSBzdGFjayByZXVzZSBvcHRpbWl6YXRpb24uCisuSVAgIlxmQlwtZnRyYXB2XGZSIiA0CisuSVggSXRlbSAiLWZ0cmFwdiIKK1RoaXMgb3B0aW9uIGdlbmVyYXRlcyB0cmFwcyBmb3Igc2lnbmVkIG92ZXJmbG93IG9uIGFkZGl0aW9uLCBzdWJ0cmFjdGlvbiwKK211bHRpcGxpY2F0aW9uIG9wZXJhdGlvbnMuCisuSVAgIlxmQlwtZndyYXB2XGZSIiA0CisuSVggSXRlbSAiLWZ3cmFwdiIKK1RoaXMgb3B0aW9uIGluc3RydWN0cyB0aGUgY29tcGlsZXIgdG8gYXNzdW1lIHRoYXQgc2lnbmVkIGFyaXRobWV0aWMKK292ZXJmbG93IG9mIGFkZGl0aW9uLCBzdWJ0cmFjdGlvbiBhbmQgbXVsdGlwbGljYXRpb24gd3JhcHMgYXJvdW5kCit1c2luZyB0d29zLWNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uICBUaGlzIGZsYWcgZW5hYmxlcyBzb21lIG9wdGltaXphdGlvbnMKK2FuZCBkaXNhYmxlcyBvdGhlcnMuICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIHRoZSBKYXZhCitmcm9udCBlbmQsIGFzIHJlcXVpcmVkIGJ5IHRoZSBKYXZhIGxhbmd1YWdlIHNwZWNpZmljYXRpb24uCisuSVAgIlxmQlwtZmV4Y2VwdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZmV4Y2VwdGlvbnMiCitFbmFibGUgZXhjZXB0aW9uIGhhbmRsaW5nLiAgR2VuZXJhdGVzIGV4dHJhIGNvZGUgbmVlZGVkIHRvIHByb3BhZ2F0ZQorZXhjZXB0aW9ucy4gIEZvciBzb21lIHRhcmdldHMsIHRoaXMgaW1wbGllcyBccy0xR0NDXHMwIGdlbmVyYXRlcyBmcmFtZQordW53aW5kIGluZm9ybWF0aW9uIGZvciBhbGwgZnVuY3Rpb25zLCB3aGljaCBjYW4gcHJvZHVjZSBzaWduaWZpY2FudCBkYXRhCitzaXplIG92ZXJoZWFkLCBhbHRob3VnaCBpdCBkb2VzIG5vdCBhZmZlY3QgZXhlY3V0aW9uLiAgSWYgeW91IGRvIG5vdAorc3BlY2lmeSB0aGlzIG9wdGlvbiwgXHMtMUdDQ1xzMCBlbmFibGVzIGl0IGJ5IGRlZmF1bHQgZm9yIGxhbmd1YWdlcyBsaWtlCitcJlwqKEMrIHRoYXQgbm9ybWFsbHkgcmVxdWlyZSBleGNlcHRpb24gaGFuZGxpbmcsIGFuZCBkaXNhYmxlcyBpdCBmb3IKK2xhbmd1YWdlcyBsaWtlIEMgdGhhdCBkbyBub3Qgbm9ybWFsbHkgcmVxdWlyZSBpdC4gIEhvd2V2ZXIsIHlvdSBtYXkgbmVlZAordG8gZW5hYmxlIHRoaXMgb3B0aW9uIHdoZW4gY29tcGlsaW5nIEMgY29kZSB0aGF0IG5lZWRzIHRvIGludGVyb3BlcmF0ZQorcHJvcGVybHkgd2l0aCBleGNlcHRpb24gaGFuZGxlcnMgd3JpdHRlbiBpbiBcKihDKy4gIFlvdSBtYXkgYWxzbyB3aXNoIHRvCitkaXNhYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgY29tcGlsaW5nIG9sZGVyIFwqKEMrIHByb2dyYW1zIHRoYXQgZG9uJ3QKK3VzZSBleGNlcHRpb24gaGFuZGxpbmcuCisuSVAgIlxmQlwtZm5vblwtY2FsbFwtZXhjZXB0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1mbm9uLWNhbGwtZXhjZXB0aW9ucyIKK0dlbmVyYXRlIGNvZGUgdGhhdCBhbGxvd3MgdHJhcHBpbmcgaW5zdHJ1Y3Rpb25zIHRvIHRocm93IGV4Y2VwdGlvbnMuCitOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBwbGF0Zm9ybS1zcGVjaWZpYyBydW50aW1lIHN1cHBvcnQgdGhhdCBkb2VzCitub3QgZXhpc3QgZXZlcnl3aGVyZS4gIE1vcmVvdmVyLCBpdCBvbmx5IGFsbG93cyBcZkl0cmFwcGluZ1xmUgoraW5zdHJ1Y3Rpb25zIHRvIHRocm93IGV4Y2VwdGlvbnMsIGkuZS4gbWVtb3J5IHJlZmVyZW5jZXMgb3IgZmxvYXRpbmctcG9pbnQKK2luc3RydWN0aW9ucy4gIEl0IGRvZXMgbm90IGFsbG93IGV4Y2VwdGlvbnMgdG8gYmUgdGhyb3duIGZyb20KK2FyYml0cmFyeSBzaWduYWwgaGFuZGxlcnMgc3VjaCBhcyBcZihDV1wqKENgU0lHQUxSTVwqKEMnXGZSLgorLklQICJcZkJcLWZkZWxldGVcLWRlYWRcLWV4Y2VwdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItZmRlbGV0ZS1kZWFkLWV4Y2VwdGlvbnMiCitDb25zaWRlciB0aGF0IGluc3RydWN0aW9ucyB0aGF0IG1heSB0aHJvdyBleGNlcHRpb25zIGJ1dCBkb24ndCBvdGhlcndpc2UKK2NvbnRyaWJ1dGUgdG8gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBjYW4gYmUgb3B0aW1pemVkIGF3YXkuCitUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIHRoZSBBZGEgZnJvbnQgZW5kLCBhcyBwZXJtaXR0ZWQgYnkKK3RoZSBBZGEgbGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbi4KK09wdGltaXphdGlvbiBwYXNzZXMgdGhhdCBjYXVzZSBkZWFkIGV4Y2VwdGlvbnMgdG8gYmUgcmVtb3ZlZCBhcmUgZW5hYmxlZCBpbmRlcGVuZGVudGx5IGF0IGRpZmZlcmVudCBvcHRpbWl6YXRpb24gbGV2ZWxzLgorLklQICJcZkJcLWZ1bndpbmRcLXRhYmxlc1xmUiIgNAorLklYIEl0ZW0gIi1mdW53aW5kLXRhYmxlcyIKK1NpbWlsYXIgdG8gXGZCXC1mZXhjZXB0aW9uc1xmUiwgZXhjZXB0IHRoYXQgaXQganVzdCBnZW5lcmF0ZXMgYW55IG5lZWRlZAorc3RhdGljIGRhdGEsIGJ1dCBkb2VzIG5vdCBhZmZlY3QgdGhlIGdlbmVyYXRlZCBjb2RlIGluIGFueSBvdGhlciB3YXkuCitZb3Ugbm9ybWFsbHkgZG8gbm90IG5lZWQgdG8gZW5hYmxlIHRoaXMgb3B0aW9uOyBpbnN0ZWFkLCBhIGxhbmd1YWdlIHByb2Nlc3NvcgordGhhdCBuZWVkcyB0aGlzIGhhbmRsaW5nIGVuYWJsZXMgaXQgb24geW91ciBiZWhhbGYuCisuSVAgIlxmQlwtZmFzeW5jaHJvbm91c1wtdW53aW5kXC10YWJsZXNcZlIiIDQKKy5JWCBJdGVtICItZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIgorR2VuZXJhdGUgdW53aW5kIHRhYmxlIGluIFxzLTFEV0FSRlxzMCAyIGZvcm1hdCwgaWYgc3VwcG9ydGVkIGJ5IHRhcmdldCBtYWNoaW5lLiAgVGhlCit0YWJsZSBpcyBleGFjdCBhdCBlYWNoIGluc3RydWN0aW9uIGJvdW5kYXJ5LCBzbyBpdCBjYW4gYmUgdXNlZCBmb3Igc3RhY2sKK3Vud2luZGluZyBmcm9tIGFzeW5jaHJvbm91cyBldmVudHMgKHN1Y2ggYXMgZGVidWdnZXIgb3IgZ2FyYmFnZSBjb2xsZWN0b3IpLgorLklQICJcZkJcLWZwY2NcLXN0cnVjdFwtcmV0dXJuXGZSIiA0CisuSVggSXRlbSAiLWZwY2Mtc3RydWN0LXJldHVybiIKK1JldHVybiBcKihMInNob3J0XCooUiIgXGYoQ1dcKihDYHN0cnVjdFwqKEMnXGZSIGFuZCBcZihDV1wqKENgdW5pb25cKihDJ1xmUiB2YWx1ZXMgaW4gbWVtb3J5IGxpa2UKK2xvbmdlciBvbmVzLCByYXRoZXIgdGhhbiBpbiByZWdpc3RlcnMuICBUaGlzIGNvbnZlbnRpb24gaXMgbGVzcworZWZmaWNpZW50LCBidXQgaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgYWxsb3dpbmcgaW50ZXJjYWxsYWJpbGl0eSBiZXR3ZWVuCitHQ0MtY29tcGlsZWQgZmlsZXMgYW5kIGZpbGVzIGNvbXBpbGVkIHdpdGggb3RoZXIgY29tcGlsZXJzLCBwYXJ0aWN1bGFybHkKK3RoZSBQb3J0YWJsZSBDIENvbXBpbGVyIChwY2MpLgorLlNwCitUaGUgcHJlY2lzZSBjb252ZW50aW9uIGZvciByZXR1cm5pbmcgc3RydWN0dXJlcyBpbiBtZW1vcnkgZGVwZW5kcworb24gdGhlIHRhcmdldCBjb25maWd1cmF0aW9uIG1hY3Jvcy4KKy5TcAorU2hvcnQgc3RydWN0dXJlcyBhbmQgdW5pb25zIGFyZSB0aG9zZSB3aG9zZSBzaXplIGFuZCBhbGlnbm1lbnQgbWF0Y2gKK3RoYXQgb2Ygc29tZSBpbnRlZ2VyIHR5cGUuCisuU3AKK1wmXGZCV2FybmluZzpcZlIgY29kZSBjb21waWxlZCB3aXRoIHRoZSBcZkJcLWZwY2NcLXN0cnVjdFwtcmV0dXJuXGZSCitzd2l0Y2ggaXMgbm90IGJpbmFyeSBjb21wYXRpYmxlIHdpdGggY29kZSBjb21waWxlZCB3aXRoIHRoZQorXCZcZkJcLWZyZWdcLXN0cnVjdFwtcmV0dXJuXGZSIHN3aXRjaC4KK1VzZSBpdCB0byBjb25mb3JtIHRvIGEgbm9uLWRlZmF1bHQgYXBwbGljYXRpb24gYmluYXJ5IGludGVyZmFjZS4KKy5JUCAiXGZCXC1mcmVnXC1zdHJ1Y3RcLXJldHVyblxmUiIgNAorLklYIEl0ZW0gIi1mcmVnLXN0cnVjdC1yZXR1cm4iCitSZXR1cm4gXGYoQ1dcKihDYHN0cnVjdFwqKEMnXGZSIGFuZCBcZihDV1wqKENgdW5pb25cKihDJ1xmUiB2YWx1ZXMgaW4gcmVnaXN0ZXJzIHdoZW4gcG9zc2libGUuCitUaGlzIGlzIG1vcmUgZWZmaWNpZW50IGZvciBzbWFsbCBzdHJ1Y3R1cmVzIHRoYW4KK1wmXGZCXC1mcGNjXC1zdHJ1Y3RcLXJldHVyblxmUi4KKy5TcAorSWYgeW91IHNwZWNpZnkgbmVpdGhlciBcZkJcLWZwY2NcLXN0cnVjdFwtcmV0dXJuXGZSIG5vcgorXCZcZkJcLWZyZWdcLXN0cnVjdFwtcmV0dXJuXGZSLCBccy0xR0NDXHMwIGRlZmF1bHRzIHRvIHdoaWNoZXZlciBjb252ZW50aW9uIGlzCitzdGFuZGFyZCBmb3IgdGhlIHRhcmdldC4gIElmIHRoZXJlIGlzIG5vIHN0YW5kYXJkIGNvbnZlbnRpb24sIFxzLTFHQ0NcczAKK2RlZmF1bHRzIHRvIFxmQlwtZnBjY1wtc3RydWN0XC1yZXR1cm5cZlIsIGV4Y2VwdCBvbiB0YXJnZXRzIHdoZXJlIFxzLTFHQ0NcczAgaXMKK3RoZSBwcmluY2lwYWwgY29tcGlsZXIuICBJbiB0aG9zZSBjYXNlcywgd2UgY2FuIGNob29zZSB0aGUgc3RhbmRhcmQsIGFuZAord2UgY2hvc2UgdGhlIG1vcmUgZWZmaWNpZW50IHJlZ2lzdGVyIHJldHVybiBhbHRlcm5hdGl2ZS4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiBjb2RlIGNvbXBpbGVkIHdpdGggdGhlIFxmQlwtZnJlZ1wtc3RydWN0XC1yZXR1cm5cZlIKK3N3aXRjaCBpcyBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBjb2RlIGNvbXBpbGVkIHdpdGggdGhlCitcJlxmQlwtZnBjY1wtc3RydWN0XC1yZXR1cm5cZlIgc3dpdGNoLgorVXNlIGl0IHRvIGNvbmZvcm0gdG8gYSBub24tZGVmYXVsdCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlLgorLklQICJcZkJcLWZzaG9ydFwtZW51bXNcZlIiIDQKKy5JWCBJdGVtICItZnNob3J0LWVudW1zIgorQWxsb2NhdGUgdG8gYW4gXGYoQ1dcKihDYGVudW1cKihDJ1xmUiB0eXBlIG9ubHkgYXMgbWFueSBieXRlcyBhcyBpdCBuZWVkcyBmb3IgdGhlCitkZWNsYXJlZCByYW5nZSBvZiBwb3NzaWJsZSB2YWx1ZXMuICBTcGVjaWZpY2FsbHksIHRoZSBcZihDV1wqKENgZW51bVwqKEMnXGZSIHR5cGUKK2lzIGVxdWl2YWxlbnQgdG8gdGhlIHNtYWxsZXN0IGludGVnZXIgdHlwZSB0aGF0IGhhcyBlbm91Z2ggcm9vbS4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiB0aGUgXGZCXC1mc2hvcnRcLWVudW1zXGZSIHN3aXRjaCBjYXVzZXMgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZQorY29kZSB0aGF0IGlzIG5vdCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGNvZGUgZ2VuZXJhdGVkIHdpdGhvdXQgdGhhdCBzd2l0Y2guCitVc2UgaXQgdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisuSVAgIlxmQlwtZnNob3J0XC1kb3VibGVcZlIiIDQKKy5JWCBJdGVtICItZnNob3J0LWRvdWJsZSIKK1VzZSB0aGUgc2FtZSBzaXplIGZvciBcZihDV1wqKENgZG91YmxlXCooQydcZlIgYXMgZm9yIFxmKENXXCooQ2BmbG9hdFwqKEMnXGZSLgorLlNwCitcJlxmQldhcm5pbmc6XGZSIHRoZSBcZkJcLWZzaG9ydFwtZG91YmxlXGZSIHN3aXRjaCBjYXVzZXMgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZQorY29kZSB0aGF0IGlzIG5vdCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGNvZGUgZ2VuZXJhdGVkIHdpdGhvdXQgdGhhdCBzd2l0Y2guCitVc2UgaXQgdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisuSVAgIlxmQlwtZnNob3J0XC13Y2hhclxmUiIgNAorLklYIEl0ZW0gIi1mc2hvcnQtd2NoYXIiCitPdmVycmlkZSB0aGUgdW5kZXJseWluZyB0eXBlIGZvciBcZkJ3Y2hhcl90XGZSIHRvIGJlIFxmQnNob3J0Cit1bnNpZ25lZCBpbnRcZlIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBmb3IgdGhlIHRhcmdldC4gIFRoaXMgb3B0aW9uIGlzCit1c2VmdWwgZm9yIGJ1aWxkaW5nIHByb2dyYW1zIHRvIHJ1biB1bmRlciBccy0xV0lORVxzMC4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiB0aGUgXGZCXC1mc2hvcnRcLXdjaGFyXGZSIHN3aXRjaCBjYXVzZXMgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZQorY29kZSB0aGF0IGlzIG5vdCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGNvZGUgZ2VuZXJhdGVkIHdpdGhvdXQgdGhhdCBzd2l0Y2guCitVc2UgaXQgdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisuSVAgIlxmQlwtZm5vXC1jb21tb25cZlIiIDQKKy5JWCBJdGVtICItZm5vLWNvbW1vbiIKK0luIEMgY29kZSwgY29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB1bmluaXRpYWxpemVkIGdsb2JhbCB2YXJpYWJsZXMuCitVbml4IEMgY29tcGlsZXJzIGhhdmUgdHJhZGl0aW9uYWxseSBwZXJtaXR0ZWQgbXVsdGlwbGUgZGVmaW5pdGlvbnMgb2YKK3N1Y2ggdmFyaWFibGVzIGluIGRpZmZlcmVudCBjb21waWxhdGlvbiB1bml0cyBieSBwbGFjaW5nIHRoZSB2YXJpYWJsZXMKK2luIGEgY29tbW9uIGJsb2NrLgorVGhpcyBpcyB0aGUgYmVoYXZpb3Igc3BlY2lmaWVkIGJ5IFxmQlwtZmNvbW1vblxmUiwgYW5kIGlzIHRoZSBkZWZhdWx0Citmb3IgXHMtMUdDQ1xzMCBvbiBtb3N0IHRhcmdldHMuCitPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBiZWhhdmlvciBpcyBub3QgcmVxdWlyZWQgYnkgXHMtMUlTT1xzMCBDLCBhbmQgb24gc29tZQordGFyZ2V0cyBtYXkgY2FycnkgYSBzcGVlZCBvciBjb2RlIHNpemUgcGVuYWx0eSBvbiB2YXJpYWJsZSByZWZlcmVuY2VzLgorVGhlIFxmQlwtZm5vXC1jb21tb25cZlIgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBjb21waWxlciBzaG91bGQgcGxhY2UKK3VuaW5pdGlhbGl6ZWQgZ2xvYmFsIHZhcmlhYmxlcyBpbiB0aGUgZGF0YSBzZWN0aW9uIG9mIHRoZSBvYmplY3QgZmlsZSwKK3JhdGhlciB0aGFuIGdlbmVyYXRpbmcgdGhlbSBhcyBjb21tb24gYmxvY2tzLgorVGhpcyBoYXMgdGhlIGVmZmVjdCB0aGF0IGlmIHRoZSBzYW1lIHZhcmlhYmxlIGlzIGRlY2xhcmVkCisod2l0aG91dCBcZihDV1wqKENgZXh0ZXJuXCooQydcZlIpIGluIHR3byBkaWZmZXJlbnQgY29tcGlsYXRpb25zLAoreW91IGdldCBhIG11bHRpcGxlLWRlZmluaXRpb24gZXJyb3Igd2hlbiB5b3UgbGluayB0aGVtLgorSW4gdGhpcyBjYXNlLCB5b3UgbXVzdCBjb21waWxlIHdpdGggXGZCXC1mY29tbW9uXGZSIGluc3RlYWQuCitDb21waWxpbmcgd2l0aCBcZkJcLWZub1wtY29tbW9uXGZSIGlzIHVzZWZ1bCBvbiB0YXJnZXRzIGZvciB3aGljaAoraXQgcHJvdmlkZXMgYmV0dGVyIHBlcmZvcm1hbmNlLCBvciBpZiB5b3Ugd2lzaCB0byB2ZXJpZnkgdGhhdCB0aGUKK3Byb2dyYW0gd2lsbCB3b3JrIG9uIG90aGVyIHN5c3RlbXMgdGhhdCBhbHdheXMgdHJlYXQgdW5pbml0aWFsaXplZAordmFyaWFibGUgZGVjbGFyYXRpb25zIHRoaXMgd2F5LgorLklQICJcZkJcLWZub1wtaWRlbnRcZlIiIDQKKy5JWCBJdGVtICItZm5vLWlkZW50IgorSWdub3JlIHRoZSBcZkIjaWRlbnRcZlIgZGlyZWN0aXZlLgorLklQICJcZkJcLWZpbmhpYml0XC1zaXplXC1kaXJlY3RpdmVcZlIiIDQKKy5JWCBJdGVtICItZmluaGliaXQtc2l6ZS1kaXJlY3RpdmUiCitEb24ndCBvdXRwdXQgYSBcZihDV1wqKENgLnNpemVcKihDJ1xmUiBhc3NlbWJsZXIgZGlyZWN0aXZlLCBvciBhbnl0aGluZyBlbHNlIHRoYXQKK3dvdWxkIGNhdXNlIHRyb3VibGUgaWYgdGhlIGZ1bmN0aW9uIGlzIHNwbGl0IGluIHRoZSBtaWRkbGUsIGFuZCB0aGUKK3R3byBoYWx2ZXMgYXJlIHBsYWNlZCBhdCBsb2NhdGlvbnMgZmFyIGFwYXJ0IGluIG1lbW9yeS4gIFRoaXMgb3B0aW9uIGlzCit1c2VkIHdoZW4gY29tcGlsaW5nIFxmSWNydHN0dWZmLmNcZlI7IHlvdSBzaG91bGQgbm90IG5lZWQgdG8gdXNlIGl0Citmb3IgYW55dGhpbmcgZWxzZS4KKy5JUCAiXGZCXC1mdmVyYm9zZVwtYXNtXGZSIiA0CisuSVggSXRlbSAiLWZ2ZXJib3NlLWFzbSIKK1B1dCBleHRyYSBjb21tZW50YXJ5IGluZm9ybWF0aW9uIGluIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibHkgY29kZSB0bworbWFrZSBpdCBtb3JlIHJlYWRhYmxlLiAgVGhpcyBvcHRpb24gaXMgZ2VuZXJhbGx5IG9ubHkgb2YgdXNlIHRvIHRob3NlCit3aG8gYWN0dWFsbHkgbmVlZCB0byByZWFkIHRoZSBnZW5lcmF0ZWQgYXNzZW1ibHkgY29kZSAocGVyaGFwcyB3aGlsZQorZGVidWdnaW5nIHRoZSBjb21waWxlciBpdHNlbGYpLgorLlNwCitcJlxmQlwtZm5vXC12ZXJib3NlXC1hc21cZlIsIHRoZSBkZWZhdWx0LCBjYXVzZXMgdGhlCitleHRyYSBpbmZvcm1hdGlvbiB0byBiZSBvbWl0dGVkIGFuZCBpcyB1c2VmdWwgd2hlbiBjb21wYXJpbmcgdHdvIGFzc2VtYmxlcgorZmlsZXMuCisuSVAgIlxmQlwtZnJlY29yZFwtZ2NjXC1zd2l0Y2hlc1xmUiIgNAorLklYIEl0ZW0gIi1mcmVjb3JkLWdjYy1zd2l0Y2hlcyIKK1RoaXMgc3dpdGNoIGNhdXNlcyB0aGUgY29tbWFuZCBsaW5lIHVzZWQgdG8gaW52b2tlIHRoZQorY29tcGlsZXIgdG8gYmUgcmVjb3JkZWQgaW50byB0aGUgb2JqZWN0IGZpbGUgdGhhdCBpcyBiZWluZyBjcmVhdGVkLgorVGhpcyBzd2l0Y2ggaXMgb25seSBpbXBsZW1lbnRlZCBvbiBzb21lIHRhcmdldHMgYW5kIHRoZSBleGFjdCBmb3JtYXQKK29mIHRoZSByZWNvcmRpbmcgaXMgdGFyZ2V0IGFuZCBiaW5hcnkgZmlsZSBmb3JtYXQgZGVwZW5kZW50LCBidXQgaXQKK3VzdWFsbHkgdGFrZXMgdGhlIGZvcm0gb2YgYSBzZWN0aW9uIGNvbnRhaW5pbmcgXHMtMUFTQ0lJXHMwIHRleHQuICBUaGlzCitzd2l0Y2ggaXMgcmVsYXRlZCB0byB0aGUgXGZCXC1mdmVyYm9zZVwtYXNtXGZSIHN3aXRjaCwgYnV0IHRoYXQKK3N3aXRjaCBvbmx5IHJlY29yZHMgaW5mb3JtYXRpb24gaW4gdGhlIGFzc2VtYmxlciBvdXRwdXQgZmlsZSBhcworY29tbWVudHMsIHNvIGl0IG5ldmVyIHJlYWNoZXMgdGhlIG9iamVjdCBmaWxlLgorU2VlIGFsc28gXGZCXC1ncmVjb3JkXC1nY2NcLXN3aXRjaGVzXGZSIGZvciBhbm90aGVyCit3YXkgb2Ygc3RvcmluZyBjb21waWxlciBvcHRpb25zIGludG8gdGhlIG9iamVjdCBmaWxlLgorLklQICJcZkJcLWZwaWNcZlIiIDQKKy5JWCBJdGVtICItZnBpYyIKK0dlbmVyYXRlIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgKFxzLTFQSUNcczApIHN1aXRhYmxlIGZvciB1c2UgaW4gYSBzaGFyZWQKK2xpYnJhcnksIGlmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLiAgU3VjaCBjb2RlIGFjY2Vzc2VzIGFsbAorY29uc3RhbnQgYWRkcmVzc2VzIHRocm91Z2ggYSBnbG9iYWwgb2Zmc2V0IHRhYmxlIChccy0xR09UXHMwKS4gIFRoZSBkeW5hbWljCitsb2FkZXIgcmVzb2x2ZXMgdGhlIFxzLTFHT1RcczAgZW50cmllcyB3aGVuIHRoZSBwcm9ncmFtIHN0YXJ0cyAodGhlIGR5bmFtaWMKK2xvYWRlciBpcyBub3QgcGFydCBvZiBccy0xR0NDXHMwOyBpdCBpcyBwYXJ0IG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtKS4gIElmCit0aGUgXHMtMUdPVFxzMCBzaXplIGZvciB0aGUgbGlua2VkIGV4ZWN1dGFibGUgZXhjZWVkcyBhIG1hY2hpbmUtc3BlY2lmaWMKK21heGltdW0gc2l6ZSwgeW91IGdldCBhbiBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGxpbmtlciBpbmRpY2F0aW5nIHRoYXQKK1wmXGZCXC1mcGljXGZSIGRvZXMgbm90IHdvcms7IGluIHRoYXQgY2FzZSwgcmVjb21waWxlIHdpdGggXGZCXC1mUElDXGZSCitpbnN0ZWFkLiAgKFRoZXNlIG1heGltdW1zIGFyZSA4ayBvbiB0aGUgXHMtMVNQQVJDXHMwIGFuZCAzMmsKK29uIHRoZSBtNjhrIGFuZCBccy0xUlMvNjAwMFxzMC4gIFRoZSAzODYgaGFzIG5vIHN1Y2ggbGltaXQuKQorLlNwCitQb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIHJlcXVpcmVzIHNwZWNpYWwgc3VwcG9ydCwgYW5kIHRoZXJlZm9yZSB3b3Jrcworb25seSBvbiBjZXJ0YWluIG1hY2hpbmVzLiAgRm9yIHRoZSAzODYsIFxzLTFHQ0NcczAgc3VwcG9ydHMgXHMtMVBJQ1xzMCBmb3IgU3lzdGVtIFYKK2J1dCBub3QgZm9yIHRoZSBTdW4gMzg2aS4gIENvZGUgZ2VuZXJhdGVkIGZvciB0aGUgXHMtMUlCTVxzMCBccy0xUlMvNjAwMFxzMCBpcyBhbHdheXMKK3Bvc2l0aW9uLWluZGVwZW5kZW50LgorLlNwCitXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSBtYWNyb3MgXGYoQ1dcKihDYF9cfF9waWNfXHxfXCooQydcZlIgYW5kIFxmKENXXCooQ2BfXHxfUElDX1x8X1wqKEMnXGZSCithcmUgZGVmaW5lZCB0byAxLgorLklQICJcZkJcLWZQSUNcZlIiIDQKKy5JWCBJdGVtICItZlBJQyIKK0lmIHN1cHBvcnRlZCBmb3IgdGhlIHRhcmdldCBtYWNoaW5lLCBlbWl0IHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUsCitzdWl0YWJsZSBmb3IgZHluYW1pYyBsaW5raW5nIGFuZCBhdm9pZGluZyBhbnkgbGltaXQgb24gdGhlIHNpemUgb2YgdGhlCitnbG9iYWwgb2Zmc2V0IHRhYmxlLiAgVGhpcyBvcHRpb24gbWFrZXMgYSBkaWZmZXJlbmNlIG9uIHRoZSBtNjhrLAorUG93ZXJQQyBhbmQgXHMtMVNQQVJDXHMwLgorLlNwCitQb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIHJlcXVpcmVzIHNwZWNpYWwgc3VwcG9ydCwgYW5kIHRoZXJlZm9yZSB3b3Jrcworb25seSBvbiBjZXJ0YWluIG1hY2hpbmVzLgorLlNwCitXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSBtYWNyb3MgXGYoQ1dcKihDYF9cfF9waWNfXHxfXCooQydcZlIgYW5kIFxmKENXXCooQ2BfXHxfUElDX1x8X1wqKEMnXGZSCithcmUgZGVmaW5lZCB0byAyLgorLklQICJcZkJcLWZwaWVcZlIiIDQKKy5JWCBJdGVtICItZnBpZSIKKy5QRCAwCisuSVAgIlxmQlwtZlBJRVxmUiIgNAorLklYIEl0ZW0gIi1mUElFIgorLlBECitUaGVzZSBvcHRpb25zIGFyZSBzaW1pbGFyIHRvIFxmQlwtZnBpY1xmUiBhbmQgXGZCXC1mUElDXGZSLCBidXQKK2dlbmVyYXRlZCBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIGNhbiBiZSBvbmx5IGxpbmtlZCBpbnRvIGV4ZWN1dGFibGVzLgorVXN1YWxseSB0aGVzZSBvcHRpb25zIGFyZSB1c2VkIHdoZW4gXGZCXC1waWVcZlIgXHMtMUdDQ1xzMCBvcHRpb24gaXMKK3VzZWQgZHVyaW5nIGxpbmtpbmcuCisuU3AKK1wmXGZCXC1mcGllXGZSIGFuZCBcZkJcLWZQSUVcZlIgYm90aCBkZWZpbmUgdGhlIG1hY3JvcworXCZcZihDV1wqKENgX1x8X3BpZV9cfF9cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYF9cfF9QSUVfXHxfXCooQydcZlIuICBUaGUgbWFjcm9zIGhhdmUgdGhlIHZhbHVlIDEKK2ZvciBcZkJcLWZwaWVcZlIgYW5kIDIgZm9yIFxmQlwtZlBJRVxmUi4KKy5JUCAiXGZCXC1mbm9cLWp1bXBcLXRhYmxlc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tanVtcC10YWJsZXMiCitEbyBub3QgdXNlIGp1bXAgdGFibGVzIGZvciBzd2l0Y2ggc3RhdGVtZW50cyBldmVuIHdoZXJlIGl0IHdvdWxkIGJlCittb3JlIGVmZmljaWVudCB0aGFuIG90aGVyIGNvZGUgZ2VuZXJhdGlvbiBzdHJhdGVnaWVzLiAgVGhpcyBvcHRpb24gaXMKK29mIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIFxmQlwtZnBpY1xmUiBvciBcZkJcLWZQSUNcZlIgZm9yCitidWlsZGluZyBjb2RlIHRoYXQgZm9ybXMgcGFydCBvZiBhIGR5bmFtaWMgbGlua2VyIGFuZCBjYW5ub3QKK3JlZmVyZW5jZSB0aGUgYWRkcmVzcyBvZiBhIGp1bXAgdGFibGUuICBPbiBzb21lIHRhcmdldHMsIGp1bXAgdGFibGVzCitkbyBub3QgcmVxdWlyZSBhIFxzLTFHT1RcczAgYW5kIHRoaXMgb3B0aW9uIGlzIG5vdCBuZWVkZWQuCisuSVAgIlxmQlwtZmZpeGVkXC1cZlJcZklyZWdcZlIiIDQKKy5JWCBJdGVtICItZmZpeGVkLXJlZyIKK1RyZWF0IHRoZSByZWdpc3RlciBuYW1lZCBcZklyZWdcZlIgYXMgYSBmaXhlZCByZWdpc3RlcjsgZ2VuZXJhdGVkIGNvZGUKK3Nob3VsZCBuZXZlciByZWZlciB0byBpdCAoZXhjZXB0IHBlcmhhcHMgYXMgYSBzdGFjayBwb2ludGVyLCBmcmFtZQorcG9pbnRlciBvciBpbiBzb21lIG90aGVyIGZpeGVkIHJvbGUpLgorLlNwCitcJlxmSXJlZ1xmUiBtdXN0IGJlIHRoZSBuYW1lIG9mIGEgcmVnaXN0ZXIuICBUaGUgcmVnaXN0ZXIgbmFtZXMgYWNjZXB0ZWQKK2FyZSBtYWNoaW5lLXNwZWNpZmljIGFuZCBhcmUgZGVmaW5lZCBpbiB0aGUgXGYoQ1dcKihDYFJFR0lTVEVSX05BTUVTXCooQydcZlIKK21hY3JvIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uIG1hY3JvIGZpbGUuCisuU3AKK1RoaXMgZmxhZyBkb2VzIG5vdCBoYXZlIGEgbmVnYXRpdmUgZm9ybSwgYmVjYXVzZSBpdCBzcGVjaWZpZXMgYQordGhyZWUtd2F5IGNob2ljZS4KKy5JUCAiXGZCXC1mY2FsbFwtdXNlZFwtXGZSXGZJcmVnXGZSIiA0CisuSVggSXRlbSAiLWZjYWxsLXVzZWQtcmVnIgorVHJlYXQgdGhlIHJlZ2lzdGVyIG5hbWVkIFxmSXJlZ1xmUiBhcyBhbiBhbGxvY2FibGUgcmVnaXN0ZXIgdGhhdCBpcworY2xvYmJlcmVkIGJ5IGZ1bmN0aW9uIGNhbGxzLiAgSXQgbWF5IGJlIGFsbG9jYXRlZCBmb3IgdGVtcG9yYXJpZXMgb3IKK3ZhcmlhYmxlcyB0aGF0IGRvIG5vdCBsaXZlIGFjcm9zcyBhIGNhbGwuICBGdW5jdGlvbnMgY29tcGlsZWQgdGhpcyB3YXkKK2RvIG5vdCBzYXZlIGFuZCByZXN0b3JlIHRoZSByZWdpc3RlciBcZklyZWdcZlIuCisuU3AKK0l0IGlzIGFuIGVycm9yIHRvIHVzZSB0aGlzIGZsYWcgd2l0aCB0aGUgZnJhbWUgcG9pbnRlciBvciBzdGFjayBwb2ludGVyLgorVXNlIG9mIHRoaXMgZmxhZyBmb3Igb3RoZXIgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBmaXhlZCBwZXJ2YXNpdmUgcm9sZXMgaW4KK3RoZSBtYWNoaW5lJ3MgZXhlY3V0aW9uIG1vZGVsIHByb2R1Y2VzIGRpc2FzdHJvdXMgcmVzdWx0cy4KKy5TcAorVGhpcyBmbGFnIGRvZXMgbm90IGhhdmUgYSBuZWdhdGl2ZSBmb3JtLCBiZWNhdXNlIGl0IHNwZWNpZmllcyBhCit0aHJlZS13YXkgY2hvaWNlLgorLklQICJcZkJcLWZjYWxsXC1zYXZlZFwtXGZSXGZJcmVnXGZSIiA0CisuSVggSXRlbSAiLWZjYWxsLXNhdmVkLXJlZyIKK1RyZWF0IHRoZSByZWdpc3RlciBuYW1lZCBcZklyZWdcZlIgYXMgYW4gYWxsb2NhYmxlIHJlZ2lzdGVyIHNhdmVkIGJ5CitmdW5jdGlvbnMuICBJdCBtYXkgYmUgYWxsb2NhdGVkIGV2ZW4gZm9yIHRlbXBvcmFyaWVzIG9yIHZhcmlhYmxlcyB0aGF0CitsaXZlIGFjcm9zcyBhIGNhbGwuICBGdW5jdGlvbnMgY29tcGlsZWQgdGhpcyB3YXkgc2F2ZSBhbmQgcmVzdG9yZQordGhlIHJlZ2lzdGVyIFxmSXJlZ1xmUiBpZiB0aGV5IHVzZSBpdC4KKy5TcAorSXQgaXMgYW4gZXJyb3IgdG8gdXNlIHRoaXMgZmxhZyB3aXRoIHRoZSBmcmFtZSBwb2ludGVyIG9yIHN0YWNrIHBvaW50ZXIuCitVc2Ugb2YgdGhpcyBmbGFnIGZvciBvdGhlciByZWdpc3RlcnMgdGhhdCBoYXZlIGZpeGVkIHBlcnZhc2l2ZSByb2xlcyBpbgordGhlIG1hY2hpbmUncyBleGVjdXRpb24gbW9kZWwgcHJvZHVjZXMgZGlzYXN0cm91cyByZXN1bHRzLgorLlNwCitBIGRpZmZlcmVudCBzb3J0IG9mIGRpc2FzdGVyIHJlc3VsdHMgZnJvbSB0aGUgdXNlIG9mIHRoaXMgZmxhZyBmb3IKK2EgcmVnaXN0ZXIgaW4gd2hpY2ggZnVuY3Rpb24gdmFsdWVzIG1heSBiZSByZXR1cm5lZC4KKy5TcAorVGhpcyBmbGFnIGRvZXMgbm90IGhhdmUgYSBuZWdhdGl2ZSBmb3JtLCBiZWNhdXNlIGl0IHNwZWNpZmllcyBhCit0aHJlZS13YXkgY2hvaWNlLgorLklQICJcZkJcLWZwYWNrXC1zdHJ1Y3RbPVxmUlxmSW5cZlJcZkJdXGZSIiA0CisuSVggSXRlbSAiLWZwYWNrLXN0cnVjdFs9bl0iCitXaXRob3V0IGEgdmFsdWUgc3BlY2lmaWVkLCBwYWNrIGFsbCBzdHJ1Y3R1cmUgbWVtYmVycyB0b2dldGhlciB3aXRob3V0Citob2xlcy4gIFdoZW4gYSB2YWx1ZSBpcyBzcGVjaWZpZWQgKHdoaWNoIG11c3QgYmUgYSBzbWFsbCBwb3dlciBvZiB0d28pLCBwYWNrCitzdHJ1Y3R1cmUgbWVtYmVycyBhY2NvcmRpbmcgdG8gdGhpcyB2YWx1ZSwgcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtCithbGlnbm1lbnQgKHRoYXQgaXMsIG9iamVjdHMgd2l0aCBkZWZhdWx0IGFsaWdubWVudCByZXF1aXJlbWVudHMgbGFyZ2VyIHRoYW4KK3RoaXMgYXJlIG91dHB1dCBwb3RlbnRpYWxseSB1bmFsaWduZWQgYXQgdGhlIG5leHQgZml0dGluZyBsb2NhdGlvbi4KKy5TcAorXCZcZkJXYXJuaW5nOlxmUiB0aGUgXGZCXC1mcGFja1wtc3RydWN0XGZSIHN3aXRjaCBjYXVzZXMgXHMtMUdDQ1xzMCB0byBnZW5lcmF0ZQorY29kZSB0aGF0IGlzIG5vdCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGNvZGUgZ2VuZXJhdGVkIHdpdGhvdXQgdGhhdCBzd2l0Y2guCitBZGRpdGlvbmFsbHksIGl0IG1ha2VzIHRoZSBjb2RlIHN1Ym9wdGltYWwuCitVc2UgaXQgdG8gY29uZm9ybSB0byBhIG5vbi1kZWZhdWx0IGFwcGxpY2F0aW9uIGJpbmFyeSBpbnRlcmZhY2UuCisuSVAgIlxmQlwtZmluc3RydW1lbnRcLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1maW5zdHJ1bWVudC1mdW5jdGlvbnMiCitHZW5lcmF0ZSBpbnN0cnVtZW50YXRpb24gY2FsbHMgZm9yIGVudHJ5IGFuZCBleGl0IHRvIGZ1bmN0aW9ucy4gIEp1c3QKK2FmdGVyIGZ1bmN0aW9uIGVudHJ5IGFuZCBqdXN0IGJlZm9yZSBmdW5jdGlvbiBleGl0LCB0aGUgZm9sbG93aW5nCitwcm9maWxpbmcgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudAorZnVuY3Rpb24gYW5kIGl0cyBjYWxsIHNpdGUuICAoT24gc29tZSBwbGF0Zm9ybXMsCitcJlxmKENXXCooQ2BfXHxfYnVpbHRpbl9yZXR1cm5fYWRkcmVzc1wqKEMnXGZSIGRvZXMgbm90IHdvcmsgYmV5b25kIHRoZSBjdXJyZW50CitmdW5jdGlvbiwgc28gdGhlIGNhbGwgc2l0ZSBpbmZvcm1hdGlvbiBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB0aGUKK3Byb2ZpbGluZyBmdW5jdGlvbnMgb3RoZXJ3aXNlLikKKy5TcAorLlZiIDQKK1wmICAgICAgICB2b2lkIF9cfF9jeWdfcHJvZmlsZV9mdW5jX2VudGVyICh2b2lkICp0aGlzX2ZuLAorXCYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsX3NpdGUpOworXCYgICAgICAgIHZvaWQgX1x8X2N5Z19wcm9maWxlX2Z1bmNfZXhpdCAgKHZvaWQgKnRoaXNfZm4sCitcJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNhbGxfc2l0ZSk7CisuVmUKKy5TcAorVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiwKK3doaWNoIG1heSBiZSBsb29rZWQgdXAgZXhhY3RseSBpbiB0aGUgc3ltYm9sIHRhYmxlLgorLlNwCitUaGlzIGluc3RydW1lbnRhdGlvbiBpcyBhbHNvIGRvbmUgZm9yIGZ1bmN0aW9ucyBleHBhbmRlZCBpbmxpbmUgaW4gb3RoZXIKK2Z1bmN0aW9ucy4gIFRoZSBwcm9maWxpbmcgY2FsbHMgaW5kaWNhdGUgd2hlcmUsIGNvbmNlcHR1YWxseSwgdGhlCitpbmxpbmUgZnVuY3Rpb24gaXMgZW50ZXJlZCBhbmQgZXhpdGVkLiAgVGhpcyBtZWFucyB0aGF0IGFkZHJlc3NhYmxlCit2ZXJzaW9ucyBvZiBzdWNoIGZ1bmN0aW9ucyBtdXN0IGJlIGF2YWlsYWJsZS4gIElmIGFsbCB5b3VyIHVzZXMgb2YgYQorZnVuY3Rpb24gYXJlIGV4cGFuZGVkIGlubGluZSwgdGhpcyBtYXkgbWVhbiBhbiBhZGRpdGlvbmFsIGV4cGFuc2lvbiBvZgorY29kZSBzaXplLiAgSWYgeW91IHVzZSBcZkJleHRlcm4gaW5saW5lXGZSIGluIHlvdXIgQyBjb2RlLCBhbgorYWRkcmVzc2FibGUgdmVyc2lvbiBvZiBzdWNoIGZ1bmN0aW9ucyBtdXN0IGJlIHByb3ZpZGVkLiAgKFRoaXMgaXMKK25vcm1hbGx5IHRoZSBjYXNlIGFueXdheSwgYnV0IGlmIHlvdSBnZXQgbHVja3kgYW5kIHRoZSBvcHRpbWl6ZXIgYWx3YXlzCitleHBhbmRzIHRoZSBmdW5jdGlvbnMgaW5saW5lLCB5b3UgbWlnaHQgaGF2ZSBnb3R0ZW4gYXdheSB3aXRob3V0Citwcm92aWRpbmcgc3RhdGljIGNvcGllcy4pCisuU3AKK0EgZnVuY3Rpb24gbWF5IGJlIGdpdmVuIHRoZSBhdHRyaWJ1dGUgXGYoQ1dcKihDYG5vX2luc3RydW1lbnRfZnVuY3Rpb25cKihDJ1xmUiwgaW4KK3doaWNoIGNhc2UgdGhpcyBpbnN0cnVtZW50YXRpb24gaXMgbm90IGRvbmUuICBUaGlzIGNhbiBiZSB1c2VkLCBmb3IKK2V4YW1wbGUsIGZvciB0aGUgcHJvZmlsaW5nIGZ1bmN0aW9ucyBsaXN0ZWQgYWJvdmUsIGhpZ2gtcHJpb3JpdHkKK2ludGVycnVwdCByb3V0aW5lcywgYW5kIGFueSBmdW5jdGlvbnMgZnJvbSB3aGljaCB0aGUgcHJvZmlsaW5nIGZ1bmN0aW9ucworY2Fubm90IHNhZmVseSBiZSBjYWxsZWQgKHBlcmhhcHMgc2lnbmFsIGhhbmRsZXJzLCBpZiB0aGUgcHJvZmlsaW5nCityb3V0aW5lcyBnZW5lcmF0ZSBvdXRwdXQgb3IgYWxsb2NhdGUgbWVtb3J5KS4KKy5JUCAiXGZCXC1maW5zdHJ1bWVudFwtZnVuY3Rpb25zXC1leGNsdWRlXC1maWxlXC1saXN0PVxmUlxmSWZpbGVcZlJcZkIsXGZSXGZJZmlsZVxmUlxmQiwuLi5cZlIiIDQKKy5JWCBJdGVtICItZmluc3RydW1lbnQtZnVuY3Rpb25zLWV4Y2x1ZGUtZmlsZS1saXN0PWZpbGUsZmlsZSwuLi4iCitTZXQgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gaW5zdHJ1bWVudGF0aW9uIChzZWUKK3RoZSBkZXNjcmlwdGlvbiBvZiBcZihDV1wqKENgXC1maW5zdHJ1bWVudFwtZnVuY3Rpb25zXCooQydcZlIpLiAgSWYgdGhlIGZpbGUgdGhhdAorY29udGFpbnMgYSBmdW5jdGlvbiBkZWZpbml0aW9uIG1hdGNoZXMgd2l0aCBvbmUgb2YgXGZJZmlsZVxmUiwgdGhlbgordGhhdCBmdW5jdGlvbiBpcyBub3QgaW5zdHJ1bWVudGVkLiAgVGhlIG1hdGNoIGlzIGRvbmUgb24gc3Vic3RyaW5nczoKK2lmIHRoZSBcZklmaWxlXGZSIHBhcmFtZXRlciBpcyBhIHN1YnN0cmluZyBvZiB0aGUgZmlsZSBuYW1lLCBpdCBpcworY29uc2lkZXJlZCB0byBiZSBhIG1hdGNoLgorLlNwCitGb3IgZXhhbXBsZToKKy5TcAorLlZiIDEKK1wmICAgICAgICBcLWZpbnN0cnVtZW50XC1mdW5jdGlvbnNcLWV4Y2x1ZGVcLWZpbGVcLWxpc3Q9L2JpdHMvc3RsLGluY2x1ZGUvc3lzCisuVmUKKy5TcAorZXhjbHVkZXMgYW55IGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGZpbGVzIHdob3NlIHBhdGhuYW1lcworY29udGFpbiBcZihDV1wqKENgL2JpdHMvc3RsXCooQydcZlIgb3IgXGYoQ1dcKihDYGluY2x1ZGUvc3lzXCooQydcZlIuCisuU3AKK0lmLCBmb3Igc29tZSByZWFzb24sIHlvdSB3YW50IHRvIGluY2x1ZGUgbGV0dGVyIFxmKENXXCooQXEsXCooQXFcZlIgaW4gb25lIG9mCitcJlxmSXN5bVxmUiwgd3JpdGUgXGYoQ1dcKihBcSxcKihBcVxmUi4gRm9yIGV4YW1wbGUsCitcJlxmKENXXCooQ2BcLWZpbnN0cnVtZW50XC1mdW5jdGlvbnNcLWV4Y2x1ZGVcLWZpbGVcLWxpc3Q9XCooQXEsLHRtcFwqKEFxXCooQydcZlIKKyhub3RlIHRoZSBzaW5nbGUgcXVvdGUgc3Vycm91bmRpbmcgdGhlIG9wdGlvbikuCisuSVAgIlxmQlwtZmluc3RydW1lbnRcLWZ1bmN0aW9uc1wtZXhjbHVkZVwtZnVuY3Rpb25cLWxpc3Q9XGZSXGZJc3ltXGZSXGZCLFxmUlxmSXN5bVxmUlxmQiwuLi5cZlIiIDQKKy5JWCBJdGVtICItZmluc3RydW1lbnQtZnVuY3Rpb25zLWV4Y2x1ZGUtZnVuY3Rpb24tbGlzdD1zeW0sc3ltLC4uLiIKK1RoaXMgaXMgc2ltaWxhciB0byBcZihDV1wqKENgXC1maW5zdHJ1bWVudFwtZnVuY3Rpb25zXC1leGNsdWRlXC1maWxlXC1saXN0XCooQydcZlIsCitidXQgdGhpcyBvcHRpb24gc2V0cyB0aGUgbGlzdCBvZiBmdW5jdGlvbiBuYW1lcyB0byBiZSBleGNsdWRlZCBmcm9tCitpbnN0cnVtZW50YXRpb24uICBUaGUgZnVuY3Rpb24gbmFtZSB0byBiZSBtYXRjaGVkIGlzIGl0cyB1c2VyLXZpc2libGUKK25hbWUsIHN1Y2ggYXMgXGYoQ1dcKihDYHZlY3RvcjxpbnQ+IGJsYWgoY29uc3QgdmVjdG9yPGludD4gJilcKihDJ1xmUiwgbm90IHRoZQoraW50ZXJuYWwgbWFuZ2xlZCBuYW1lIChlLmcuLCBcZihDV1wqKENgX1o0YmxhaFJTdDZ2ZWN0b3JJaVNhSWlFRVwqKEMnXGZSKS4gIFRoZQorbWF0Y2ggaXMgZG9uZSBvbiBzdWJzdHJpbmdzOiBpZiB0aGUgXGZJc3ltXGZSIHBhcmFtZXRlciBpcyBhIHN1YnN0cmluZworb2YgdGhlIGZ1bmN0aW9uIG5hbWUsIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgYSBtYXRjaC4gIEZvciBDOTkgYW5kIFwqKEMrCitleHRlbmRlZCBpZGVudGlmaWVycywgdGhlIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBnaXZlbiBpbiBccy0xVVRGXC04XHMwLCBub3QKK3VzaW5nIHVuaXZlcnNhbCBjaGFyYWN0ZXIgbmFtZXMuCisuSVAgIlxmQlwtZnN0YWNrXC1jaGVja1xmUiIgNAorLklYIEl0ZW0gIi1mc3RhY2stY2hlY2siCitHZW5lcmF0ZSBjb2RlIHRvIHZlcmlmeSB0aGF0IHlvdSBkbyBub3QgZ28gYmV5b25kIHRoZSBib3VuZGFyeSBvZiB0aGUKK3N0YWNrLiAgWW91IHNob3VsZCBzcGVjaWZ5IHRoaXMgZmxhZyBpZiB5b3UgYXJlIHJ1bm5pbmcgaW4gYW4KK2Vudmlyb25tZW50IHdpdGggbXVsdGlwbGUgdGhyZWFkcywgYnV0IHlvdSBvbmx5IHJhcmVseSBuZWVkIHRvIHNwZWNpZnkgaXQgaW4KK2Egc2luZ2xlLXRocmVhZGVkIGVudmlyb25tZW50IHNpbmNlIHN0YWNrIG92ZXJmbG93IGlzIGF1dG9tYXRpY2FsbHkKK2RldGVjdGVkIG9uIG5lYXJseSBhbGwgc3lzdGVtcyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzdGFjay4KKy5TcAorTm90ZSB0aGF0IHRoaXMgc3dpdGNoIGRvZXMgbm90IGFjdHVhbGx5IGNhdXNlIGNoZWNraW5nIHRvIGJlIGRvbmU7IHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvciB0aGUgbGFuZ3VhZ2UgcnVudGltZSBtdXN0IGRvIHRoYXQuICBUaGUgc3dpdGNoIGNhdXNlcworZ2VuZXJhdGlvbiBvZiBjb2RlIHRvIGVuc3VyZSB0aGF0IHRoZXkgc2VlIHRoZSBzdGFjayBiZWluZyBleHRlbmRlZC4KKy5TcAorWW91IGNhbiBhZGRpdGlvbmFsbHkgc3BlY2lmeSBhIHN0cmluZyBwYXJhbWV0ZXI6IFxmKENXXCooQ2Bub1wqKEMnXGZSIG1lYW5zIG5vCitjaGVja2luZywgXGYoQ1dcKihDYGdlbmVyaWNcKihDJ1xmUiBtZWFucyBmb3JjZSB0aGUgdXNlIG9mIG9sZC1zdHlsZSBjaGVja2luZywKK1wmXGYoQ1dcKihDYHNwZWNpZmljXCooQydcZlIgbWVhbnMgdXNlIHRoZSBiZXN0IGNoZWNraW5nIG1ldGhvZCBhbmQgaXMgZXF1aXZhbGVudAordG8gYmFyZSBcZkJcLWZzdGFja1wtY2hlY2tcZlIuCisuU3AKK09sZC1zdHlsZSBjaGVja2luZyBpcyBhIGdlbmVyaWMgbWVjaGFuaXNtIHRoYXQgcmVxdWlyZXMgbm8gc3BlY2lmaWMKK3RhcmdldCBzdXBwb3J0IGluIHRoZSBjb21waWxlciBidXQgY29tZXMgd2l0aCB0aGUgZm9sbG93aW5nIGRyYXdiYWNrczoKKy5SUyA0CisuSVAgIjEuIiA0CitNb2RpZmllZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBsYXJnZSBvYmplY3RzOiB0aGV5IGFyZSBhbHdheXMKK2FsbG9jYXRlZCBkeW5hbWljYWxseSBpZiB0aGVpciBzaXplIGV4Y2VlZHMgYSBmaXhlZCB0aHJlc2hvbGQuCisuSVAgIjIuIiA0CitGaXhlZCBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgc3RhdGljIGZyYW1lIG9mIGZ1bmN0aW9uczogd2hlbiBpdCBpcwordG9wcGVkIGJ5IGEgcGFydGljdWxhciBmdW5jdGlvbiwgc3RhY2sgY2hlY2tpbmcgaXMgbm90IHJlbGlhYmxlIGFuZAorYSB3YXJuaW5nIGlzIGlzc3VlZCBieSB0aGUgY29tcGlsZXIuCisuSVAgIjMuIiA0CitJbmVmZmljaWVuY3k6IGJlY2F1c2Ugb2YgYm90aCB0aGUgbW9kaWZpZWQgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgdGhlCitnZW5lcmljIGltcGxlbWVudGF0aW9uLCBjb2RlIHBlcmZvcm1hbmNlIGlzIGhhbXBlcmVkLgorLlJFCisuUlMgNAorLlNwCitOb3RlIHRoYXQgb2xkLXN0eWxlIHN0YWNrIGNoZWNraW5nIGlzIGFsc28gdGhlIGZhbGxiYWNrIG1ldGhvZCBmb3IKK1wmXGYoQ1dcKihDYHNwZWNpZmljXCooQydcZlIgaWYgbm8gdGFyZ2V0IHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgaW4gdGhlIGNvbXBpbGVyLgorLlJFCisuSVAgIlxmQlwtZnN0YWNrXC1saW1pdFwtcmVnaXN0ZXI9XGZSXGZJcmVnXGZSIiA0CisuSVggSXRlbSAiLWZzdGFjay1saW1pdC1yZWdpc3Rlcj1yZWciCisuUEQgMAorLklQICJcZkJcLWZzdGFja1wtbGltaXRcLXN5bWJvbD1cZlJcZklzeW1cZlIiIDQKKy5JWCBJdGVtICItZnN0YWNrLWxpbWl0LXN5bWJvbD1zeW0iCisuSVAgIlxmQlwtZm5vXC1zdGFja1wtbGltaXRcZlIiIDQKKy5JWCBJdGVtICItZm5vLXN0YWNrLWxpbWl0IgorLlBECitHZW5lcmF0ZSBjb2RlIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFjayBkb2VzIG5vdCBncm93IGJleW9uZCBhIGNlcnRhaW4gdmFsdWUsCitlaXRoZXIgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgb3IgdGhlIGFkZHJlc3Mgb2YgYSBzeW1ib2wuICBJZiBhIGxhcmdlcgorc3RhY2sgaXMgcmVxdWlyZWQsIGEgc2lnbmFsIGlzIHJhaXNlZCBhdCBydW4gdGltZS4gIEZvciBtb3N0IHRhcmdldHMsCit0aGUgc2lnbmFsIGlzIHJhaXNlZCBiZWZvcmUgdGhlIHN0YWNrIG92ZXJydW5zIHRoZSBib3VuZGFyeSwgc28KK2l0IGlzIHBvc3NpYmxlIHRvIGNhdGNoIHRoZSBzaWduYWwgd2l0aG91dCB0YWtpbmcgc3BlY2lhbCBwcmVjYXV0aW9ucy4KKy5TcAorRm9yIGluc3RhbmNlLCBpZiB0aGUgc3RhY2sgc3RhcnRzIGF0IGFic29sdXRlIGFkZHJlc3MgXGZCMHg4MDAwMDAwMFxmUgorYW5kIGdyb3dzIGRvd253YXJkcywgeW91IGNhbiB1c2UgdGhlIGZsYWdzCitcJlxmQlwtZnN0YWNrXC1saW1pdFwtc3ltYm9sPV9cfF9zdGFja19saW1pdFxmUiBhbmQKK1wmXGZCXC1XbCxcLVwtZGVmc3ltLF9cfF9zdGFja19saW1pdD0weDdmZmUwMDAwXGZSIHRvIGVuZm9yY2UgYSBzdGFjayBsaW1pdAorb2YgMTI4S0IuICBOb3RlIHRoYXQgdGhpcyBtYXkgb25seSB3b3JrIHdpdGggdGhlIFxzLTFHTlVcczAgbGlua2VyLgorLklQICJcZkJcLWZzcGxpdFwtc3RhY2tcZlIiIDQKKy5JWCBJdGVtICItZnNwbGl0LXN0YWNrIgorR2VuZXJhdGUgY29kZSB0byBhdXRvbWF0aWNhbGx5IHNwbGl0IHRoZSBzdGFjayBiZWZvcmUgaXQgb3ZlcmZsb3dzLgorVGhlIHJlc3VsdGluZyBwcm9ncmFtIGhhcyBhIGRpc2NvbnRpZ3VvdXMgc3RhY2sgd2hpY2ggY2FuIG9ubHkKK292ZXJmbG93IGlmIHRoZSBwcm9ncmFtIGlzIHVuYWJsZSB0byBhbGxvY2F0ZSBhbnkgbW9yZSBtZW1vcnkuICBUaGlzCitpcyBtb3N0IHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhyZWFkZWQgcHJvZ3JhbXMsIGFzIGl0IGlzIG5vIGxvbmdlcgorbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBhIGdvb2Qgc3RhY2sgc2l6ZSB0byB1c2UgZm9yIGVhY2ggdGhyZWFkLiAgVGhpcworaXMgY3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBpMzg2IGFuZCB4ODZfNjQgYmFjayBlbmRzIHJ1bm5pbmcKK0dOVS9MaW51eC4KKy5TcAorV2hlbiBjb2RlIGNvbXBpbGVkIHdpdGggXGZCXC1mc3BsaXRcLXN0YWNrXGZSIGNhbGxzIGNvZGUgY29tcGlsZWQKK3dpdGhvdXQgXGZCXC1mc3BsaXRcLXN0YWNrXGZSLCB0aGVyZSBtYXkgbm90IGJlIG11Y2ggc3RhY2sgc3BhY2UKK2F2YWlsYWJsZSBmb3IgdGhlIGxhdHRlciBjb2RlIHRvIHJ1bi4gIElmIGNvbXBpbGluZyBhbGwgY29kZSwKK2luY2x1ZGluZyBsaWJyYXJ5IGNvZGUsIHdpdGggXGZCXC1mc3BsaXRcLXN0YWNrXGZSIGlzIG5vdCBhbiBvcHRpb24sCit0aGVuIHRoZSBsaW5rZXIgY2FuIGZpeCB1cCB0aGVzZSBjYWxscyBzbyB0aGF0IHRoZSBjb2RlIGNvbXBpbGVkCit3aXRob3V0IFxmQlwtZnNwbGl0XC1zdGFja1xmUiBhbHdheXMgaGFzIGEgbGFyZ2Ugc3RhY2suICBTdXBwb3J0IGZvcgordGhpcyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZ29sZCBsaW5rZXIgaW4gXHMtMUdOVVxzMCBiaW51dGlscyByZWxlYXNlIDIuMjEKK2FuZCBsYXRlci4KKy5JUCAiXGZCXC1mbGVhZGluZ1wtdW5kZXJzY29yZVxmUiIgNAorLklYIEl0ZW0gIi1mbGVhZGluZy11bmRlcnNjb3JlIgorVGhpcyBvcHRpb24gYW5kIGl0cyBjb3VudGVycGFydCwgXGZCXC1mbm9cLWxlYWRpbmdcLXVuZGVyc2NvcmVcZlIsIGZvcmNpYmx5CitjaGFuZ2UgdGhlIHdheSBDIHN5bWJvbHMgYXJlIHJlcHJlc2VudGVkIGluIHRoZSBvYmplY3QgZmlsZS4gIE9uZSB1c2UKK2lzIHRvIGhlbHAgbGluayB3aXRoIGxlZ2FjeSBhc3NlbWJseSBjb2RlLgorLlNwCitcJlxmQldhcm5pbmc6XGZSIHRoZSBcZkJcLWZsZWFkaW5nXC11bmRlcnNjb3JlXGZSIHN3aXRjaCBjYXVzZXMgXHMtMUdDQ1xzMCB0bworZ2VuZXJhdGUgY29kZSB0aGF0IGlzIG5vdCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGNvZGUgZ2VuZXJhdGVkIHdpdGhvdXQgdGhhdAorc3dpdGNoLiAgVXNlIGl0IHRvIGNvbmZvcm0gdG8gYSBub24tZGVmYXVsdCBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlLgorTm90IGFsbCB0YXJnZXRzIHByb3ZpZGUgY29tcGxldGUgc3VwcG9ydCBmb3IgdGhpcyBzd2l0Y2guCisuSVAgIlxmQlwtZnRsc1wtbW9kZWw9XGZSXGZJbW9kZWxcZlIiIDQKKy5JWCBJdGVtICItZnRscy1tb2RlbD1tb2RlbCIKK0FsdGVyIHRoZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBtb2RlbCB0byBiZSB1c2VkLgorVGhlIFxmSW1vZGVsXGZSIGFyZ3VtZW50IHNob3VsZCBiZSBvbmUgb2YgXGYoQ1dcKihDYGdsb2JhbFwtZHluYW1pY1wqKEMnXGZSLAorXCZcZihDV1wqKENgbG9jYWxcLWR5bmFtaWNcKihDJ1xmUiwgXGYoQ1dcKihDYGluaXRpYWxcLWV4ZWNcKihDJ1xmUiBvciBcZihDV1wqKENgbG9jYWxcLWV4ZWNcKihDJ1xmUi4KKy5TcAorVGhlIGRlZmF1bHQgd2l0aG91dCBcZkJcLWZwaWNcZlIgaXMgXGYoQ1dcKihDYGluaXRpYWxcLWV4ZWNcKihDJ1xmUjsgd2l0aAorXCZcZkJcLWZwaWNcZlIgdGhlIGRlZmF1bHQgaXMgXGYoQ1dcKihDYGdsb2JhbFwtZHluYW1pY1wqKEMnXGZSLgorLklQICJcZkJcLWZ2aXNpYmlsaXR5PVxmUlxmSWRlZmF1bHR8aW50ZXJuYWx8aGlkZGVufHByb3RlY3RlZFxmUiIgNAorLklYIEl0ZW0gIi1mdmlzaWJpbGl0eT1kZWZhdWx0fGludGVybmFsfGhpZGRlbnxwcm90ZWN0ZWQiCitTZXQgdGhlIGRlZmF1bHQgXHMtMUVMRlxzMCBpbWFnZSBzeW1ib2wgdmlzaWJpbGl0eSB0byB0aGUgc3BlY2lmaWVkIG9wdGlvblwtXC1cLWFsbAorc3ltYm9scyBhcmUgbWFya2VkIHdpdGggdGhpcyB1bmxlc3Mgb3ZlcnJpZGRlbiB3aXRoaW4gdGhlIGNvZGUuCitVc2luZyB0aGlzIGZlYXR1cmUgY2FuIHZlcnkgc3Vic3RhbnRpYWxseSBpbXByb3ZlIGxpbmtpbmcgYW5kCitsb2FkIHRpbWVzIG9mIHNoYXJlZCBvYmplY3QgbGlicmFyaWVzLCBwcm9kdWNlIG1vcmUgb3B0aW1pemVkCitjb2RlLCBwcm92aWRlIG5lYXItcGVyZmVjdCBccy0xQVBJXHMwIGV4cG9ydCBhbmQgcHJldmVudCBzeW1ib2wgY2xhc2hlcy4KK0l0IGlzIFxmQnN0cm9uZ2x5XGZSIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGlzIGluIGFueSBzaGFyZWQgb2JqZWN0cworeW91IGRpc3RyaWJ1dGUuCisuU3AKK0Rlc3BpdGUgdGhlIG5vbWVuY2xhdHVyZSwgXGYoQ1dcKihDYGRlZmF1bHRcKihDJ1xmUiBhbHdheXMgbWVhbnMgcHVibGljOyBpLmUuLAorYXZhaWxhYmxlIHRvIGJlIGxpbmtlZCBhZ2FpbnN0IGZyb20gb3V0c2lkZSB0aGUgc2hhcmVkIG9iamVjdC4KK1wmXGYoQ1dcKihDYHByb3RlY3RlZFwqKEMnXGZSIGFuZCBcZihDV1wqKENgaW50ZXJuYWxcKihDJ1xmUiBhcmUgcHJldHR5IHVzZWxlc3MgaW4gcmVhbC13b3JsZAordXNhZ2Ugc28gdGhlIG9ubHkgb3RoZXIgY29tbW9ubHkgdXNlZCBvcHRpb24gaXMgXGYoQ1dcKihDYGhpZGRlblwqKEMnXGZSLgorVGhlIGRlZmF1bHQgaWYgXGZCXC1mdmlzaWJpbGl0eVxmUiBpc24ndCBzcGVjaWZpZWQgaXMKK1wmXGYoQ1dcKihDYGRlZmF1bHRcKihDJ1xmUiwgaS5lLiwgbWFrZSBldmVyeQorc3ltYm9sIHB1YmxpY1wtXC1cLXRoaXMgY2F1c2VzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIHByZXZpb3VzIHZlcnNpb25zIG9mCitcJlxzLTFHQ0NcczAuCisuU3AKK0EgZ29vZCBleHBsYW5hdGlvbiBvZiB0aGUgYmVuZWZpdHMgb2ZmZXJlZCBieSBlbnN1cmluZyBccy0xRUxGXHMwCitzeW1ib2xzIGhhdmUgdGhlIGNvcnJlY3QgdmlzaWJpbGl0eSBpcyBnaXZlbiBieSBcKihMIkhvdyBUbyBXcml0ZQorU2hhcmVkIExpYnJhcmllc1wqKFIiIGJ5IFVscmljaCBEcmVwcGVyICh3aGljaCBjYW4gYmUgZm91bmQgYXQKKzxcZkJodHRwOi8vcGVvcGxlLnJlZGhhdC5jb20vfmRyZXBwZXIvXGZSPilcLVwtXC1ob3dldmVyIGEgc3VwZXJpb3IKK3NvbHV0aW9uIG1hZGUgcG9zc2libGUgYnkgdGhpcyBvcHRpb24gdG8gbWFya2luZyB0aGluZ3MgaGlkZGVuIHdoZW4KK3RoZSBkZWZhdWx0IGlzIHB1YmxpYyBpcyB0byBtYWtlIHRoZSBkZWZhdWx0IGhpZGRlbiBhbmQgbWFyayB0aGluZ3MKK3B1YmxpYy4gIFRoaXMgaXMgdGhlIG5vcm0gd2l0aCBETExzIG9uIFdpbmRvd3MgYW5kIHdpdGggXGZCXC1mdmlzaWJpbGl0eT1oaWRkZW5cZlIKK2FuZCBcZihDV1wqKENgX1x8X2F0dHJpYnV0ZV9cfF8gKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKVwqKEMnXGZSIGluc3RlYWQgb2YKK1wmXGYoQ1dcKihDYF9cfF9kZWNsc3BlYyhkbGxleHBvcnQpXCooQydcZlIgeW91IGdldCBhbG1vc3QgaWRlbnRpY2FsIHNlbWFudGljcyB3aXRoCitpZGVudGljYWwgc3ludGF4LiAgVGhpcyBpcyBhIGdyZWF0IGJvb24gdG8gdGhvc2Ugd29ya2luZyB3aXRoCitjcm9zcy1wbGF0Zm9ybSBwcm9qZWN0cy4KKy5TcAorRm9yIHRob3NlIGFkZGluZyB2aXNpYmlsaXR5IHN1cHBvcnQgdG8gZXhpc3RpbmcgY29kZSwgeW91IG1heSBmaW5kCitcJlxmQiNwcmFnbWEgXHMtMUdDQ1xzMCB2aXNpYmlsaXR5XGZSIG9mIHVzZS4gIFRoaXMgd29ya3MgYnkgeW91IGVuY2xvc2luZwordGhlIGRlY2xhcmF0aW9ucyB5b3Ugd2lzaCB0byBzZXQgdmlzaWJpbGl0eSBmb3Igd2l0aCAoZm9yIGV4YW1wbGUpCitcJlxmQiNwcmFnbWEgXHMtMUdDQ1xzMCB2aXNpYmlsaXR5IHB1c2goaGlkZGVuKVxmUiBhbmQKK1wmXGZCI3ByYWdtYSBccy0xR0NDXHMwIHZpc2liaWxpdHkgcG9wXGZSLgorQmVhciBpbiBtaW5kIHRoYXQgc3ltYm9sIHZpc2liaWxpdHkgc2hvdWxkIGJlIHZpZXdlZCBcZkJhcworcGFydCBvZiB0aGUgXHMtMUFQSVxzMCBpbnRlcmZhY2UgY29udHJhY3RcZlIgYW5kIHRodXMgYWxsIG5ldyBjb2RlIHNob3VsZAorYWx3YXlzIHNwZWNpZnkgdmlzaWJpbGl0eSB3aGVuIGl0IGlzIG5vdCB0aGUgZGVmYXVsdDsgaS5lLiwgZGVjbGFyYXRpb25zCitvbmx5IGZvciB1c2Ugd2l0aGluIHRoZSBsb2NhbCBccy0xRFNPXHMwIHNob3VsZCBcZkJhbHdheXNcZlIgYmUgbWFya2VkIGV4cGxpY2l0bHkKK2FzIGhpZGRlbiBhcyBzbyB0byBhdm9pZCBccy0xUExUXHMwIGluZGlyZWN0aW9uIG92ZXJoZWFkc1wtXC1cLW1ha2luZyB0aGlzCithYnVuZGFudGx5IGNsZWFyIGFsc28gYWlkcyByZWFkYWJpbGl0eSBhbmQgc2VsZi1kb2N1bWVudGF0aW9uIG9mIHRoZSBjb2RlLgorTm90ZSB0aGF0IGR1ZSB0byBccy0xSVNPXHMwIFwqKEMrIHNwZWNpZmljYXRpb24gcmVxdWlyZW1lbnRzLCBcZihDV1wqKENgb3BlcmF0b3IgbmV3XCooQydcZlIgYW5kCitcJlxmKENXXCooQ2BvcGVyYXRvciBkZWxldGVcKihDJ1xmUiBtdXN0IGFsd2F5cyBiZSBvZiBkZWZhdWx0IHZpc2liaWxpdHkuCisuU3AKK0JlIGF3YXJlIHRoYXQgaGVhZGVycyBmcm9tIG91dHNpZGUgeW91ciBwcm9qZWN0LCBpbiBwYXJ0aWN1bGFyIHN5c3RlbQoraGVhZGVycyBhbmQgaGVhZGVycyBmcm9tIGFueSBvdGhlciBsaWJyYXJ5IHlvdSB1c2UsIG1heSBub3QgYmUKK2V4cGVjdGluZyB0byBiZSBjb21waWxlZCB3aXRoIHZpc2liaWxpdHkgb3RoZXIgdGhhbiB0aGUgZGVmYXVsdC4gIFlvdQorbWF5IG5lZWQgdG8gZXhwbGljaXRseSBzYXkgXGZCI3ByYWdtYSBccy0xR0NDXHMwIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KVxmUgorYmVmb3JlIGluY2x1ZGluZyBhbnkgc3VjaCBoZWFkZXJzLgorLlNwCitcJlxmQmV4dGVyblxmUiBkZWNsYXJhdGlvbnMgYXJlIG5vdCBhZmZlY3RlZCBieSBcZkJcLWZ2aXNpYmlsaXR5XGZSLCBzbworYSBsb3Qgb2YgY29kZSBjYW4gYmUgcmVjb21waWxlZCB3aXRoIFxmQlwtZnZpc2liaWxpdHk9aGlkZGVuXGZSIHdpdGgKK25vIG1vZGlmaWNhdGlvbnMuICBIb3dldmVyLCB0aGlzIG1lYW5zIHRoYXQgY2FsbHMgdG8gXGYoQ1dcKihDYGV4dGVyblwqKEMnXGZSCitmdW5jdGlvbnMgd2l0aCBubyBleHBsaWNpdCB2aXNpYmlsaXR5IHVzZSB0aGUgXHMtMVBMVFxzMCwgc28gaXQgaXMgbW9yZQorZWZmZWN0aXZlIHRvIHVzZSBcZihDV1wqKENgX1x8X2F0dHJpYnV0ZSAoKHZpc2liaWxpdHkpKVwqKEMnXGZSIGFuZC9vcgorXCZcZihDV1wqKENgI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eVwqKEMnXGZSIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHdoaWNoIFxmKENXXCooQ2BleHRlcm5cKihDJ1xmUgorZGVjbGFyYXRpb25zIHNob3VsZCBiZSB0cmVhdGVkIGFzIGhpZGRlbi4KKy5TcAorTm90ZSB0aGF0IFxmQlwtZnZpc2liaWxpdHlcZlIgZG9lcyBhZmZlY3QgXCooQysgdmFndWUgbGlua2FnZQorZW50aXRpZXMuIFRoaXMgbWVhbnMgdGhhdCwgZm9yIGluc3RhbmNlLCBhbiBleGNlcHRpb24gY2xhc3MgdGhhdCBpcworYmUgdGhyb3duIGJldHdlZW4gRFNPcyBtdXN0IGJlIGV4cGxpY2l0bHkgbWFya2VkIHdpdGggZGVmYXVsdAordmlzaWJpbGl0eSBzbyB0aGF0IHRoZSBcZkJ0eXBlX2luZm9cZlIgbm9kZXMgYXJlIHVuaWZpZWQgYmV0d2VlbgordGhlIERTT3MuCisuU3AKK0FuIG92ZXJ2aWV3IG9mIHRoZXNlIHRlY2huaXF1ZXMsIHRoZWlyIGJlbmVmaXRzIGFuZCBob3cgdG8gdXNlIHRoZW0KK2lzIGF0IDxcZkJodHRwOi8vZ2NjLmdudS5vcmcvd2lraS9WaXNpYmlsaXR5XGZSPi4KKy5JUCAiXGZCXC1mc3RyaWN0XC12b2xhdGlsZVwtYml0ZmllbGRzXGZSIiA0CisuSVggSXRlbSAiLWZzdHJpY3Qtdm9sYXRpbGUtYml0ZmllbGRzIgorVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgaWYgYWNjZXNzZXMgdG8gdm9sYXRpbGUgYml0LWZpZWxkcyAob3Igb3RoZXIKK3N0cnVjdHVyZSBmaWVsZHMsIGFsdGhvdWdoIHRoZSBjb21waWxlciB1c3VhbGx5IGhvbm9ycyB0aG9zZSB0eXBlcworYW55d2F5KSBzaG91bGQgdXNlIGEgc2luZ2xlIGFjY2VzcyBvZiB0aGUgd2lkdGggb2YgdGhlCitmaWVsZCdzIHR5cGUsIGFsaWduZWQgdG8gYSBuYXR1cmFsIGFsaWdubWVudCBpZiBwb3NzaWJsZS4gIEZvcgorZXhhbXBsZSwgdGFyZ2V0cyB3aXRoIG1lbW9yeS1tYXBwZWQgcGVyaXBoZXJhbCByZWdpc3RlcnMgbWlnaHQgcmVxdWlyZQorYWxsIHN1Y2ggYWNjZXNzZXMgdG8gYmUgMTYgYml0cyB3aWRlOyB3aXRoIHRoaXMgZmxhZyB5b3UgY2FuCitkZWNsYXJlIGFsbCBwZXJpcGhlcmFsIGJpdC1maWVsZHMgYXMgXGYoQ1dcKihDYHVuc2lnbmVkIHNob3J0XCooQydcZlIgKGFzc3VtaW5nIHNob3J0CitpcyAxNiBiaXRzIG9uIHRoZXNlIHRhcmdldHMpIHRvIGZvcmNlIFxzLTFHQ0NcczAgdG8gdXNlIDE2XC1iaXQgYWNjZXNzZXMKK2luc3RlYWQgb2YsIHBlcmhhcHMsIGEgbW9yZSBlZmZpY2llbnQgMzJcLWJpdCBhY2Nlc3MuCisuU3AKK0lmIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLCB0aGUgY29tcGlsZXIgdXNlcyB0aGUgbW9zdCBlZmZpY2llbnQKK2luc3RydWN0aW9uLiAgSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoYXQgbWlnaHQgYmUgYSAzMlwtYml0IGxvYWQKK2luc3RydWN0aW9uLCBldmVuIHRob3VnaCB0aGF0IGFjY2Vzc2VzIGJ5dGVzIHRoYXQgZG8gbm90IGNvbnRhaW4KK2FueSBwb3J0aW9uIG9mIHRoZSBiaXQtZmllbGQsIG9yIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIHVucmVsYXRlZCB0bwordGhlIG9uZSBiZWluZyB1cGRhdGVkLgorLlNwCitJZiB0aGUgdGFyZ2V0IHJlcXVpcmVzIHN0cmljdCBhbGlnbm1lbnQsIGFuZCBob25vcmluZyB0aGUgZmllbGQKK3R5cGUgd291bGQgcmVxdWlyZSB2aW9sYXRpbmcgdGhpcyBhbGlnbm1lbnQsIGEgd2FybmluZyBpcyBpc3N1ZWQuCitJZiB0aGUgZmllbGQgaGFzIFxmKENXXCooQ2BwYWNrZWRcKihDJ1xmUiBhdHRyaWJ1dGUsIHRoZSBhY2Nlc3MgaXMgZG9uZSB3aXRob3V0Citob25vcmluZyB0aGUgZmllbGQgdHlwZS4gIElmIHRoZSBmaWVsZCBkb2Vzbid0IGhhdmUgXGYoQ1dcKihDYHBhY2tlZFwqKEMnXGZSCithdHRyaWJ1dGUsIHRoZSBhY2Nlc3MgaXMgZG9uZSBob25vcmluZyB0aGUgZmllbGQgdHlwZS4gIEluIGJvdGggY2FzZXMsCitcJlxzLTFHQ0NcczAgYXNzdW1lcyB0aGF0IHRoZSB1c2VyIGtub3dzIHNvbWV0aGluZyBhYm91dCB0aGUgdGFyZ2V0IGhhcmR3YXJlCit0aGF0IGl0IGlzIHVuYXdhcmUgb2YuCisuU3AKK1RoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgb3B0aW9uIGlzIGRldGVybWluZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJpbmFyeQoraW50ZXJmYWNlIGZvciB0aGUgdGFyZ2V0IHByb2Nlc3Nvci4KKy5JUCAiXGZCXC1mc3luY1wtbGliY2FsbHNcZlIiIDQKKy5JWCBJdGVtICItZnN5bmMtbGliY2FsbHMiCitUaGlzIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIGFueSBvdXQtb2YtbGluZSBpbnN0YW5jZSBvZiB0aGUgXGYoQ1dcKihDYF9cfF9zeW5jXCooQydcZlIKK2ZhbWlseSBvZiBmdW5jdGlvbnMgbWF5IGJlIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBcKihDKzExIFxmKENXXCooQ2BfXHxfYXRvbWljXCooQydcZlIKK2ZhbWlseSBvZiBmdW5jdGlvbnMuCisuU3AKK1RoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRodXMgdGhlIG9ubHkgdXNlZnVsIGZvcm0KK29mIHRoZSBvcHRpb24gaXMgXGZCXC1mbm9cLXN5bmNcLWxpYmNhbGxzXGZSLiAgVGhpcyBvcHRpb24gaXMgdXNlZCBpbgordGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBcZklsaWJhdG9taWNcZlIgcnVudGltZSBsaWJyYXJ5LgorLlNIICJFTlZJUk9OTUVOVCIKKy5JWCBIZWFkZXIgIkVOVklST05NRU5UIgorVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzZXZlcmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFmZmVjdCBob3cgXHMtMUdDQ1xzMAorb3BlcmF0ZXMuICBTb21lIG9mIHRoZW0gd29yayBieSBzcGVjaWZ5aW5nIGRpcmVjdG9yaWVzIG9yIHByZWZpeGVzIHRvIHVzZQord2hlbiBzZWFyY2hpbmcgZm9yIHZhcmlvdXMga2luZHMgb2YgZmlsZXMuICBTb21lIGFyZSB1c2VkIHRvIHNwZWNpZnkgb3RoZXIKK2FzcGVjdHMgb2YgdGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50LgorLlBQCitOb3RlIHRoYXQgeW91IGNhbiBhbHNvIHNwZWNpZnkgcGxhY2VzIHRvIHNlYXJjaCB1c2luZyBvcHRpb25zIHN1Y2ggYXMKK1wmXGZCXC1CXGZSLCBcZkJcLUlcZlIgYW5kIFxmQlwtTFxmUi4gIFRoZXNlCit0YWtlIHByZWNlZGVuY2Ugb3ZlciBwbGFjZXMgc3BlY2lmaWVkIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcywgd2hpY2gKK2luIHR1cm4gdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhvc2Ugc3BlY2lmaWVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9mIFxzLTFHQ0NcczAuCisuSVAgIlxmQlxzLTFMQU5HXHMwXGZSIiA0CisuSVggSXRlbSAiTEFORyIKKy5QRCAwCisuSVAgIlxmQlxzLTFMQ19DVFlQRVxzMFxmUiIgNAorLklYIEl0ZW0gIkxDX0NUWVBFIgorLklQICJcZkJccy0xTENfTUVTU0FHRVNcczBcZlIiIDQKKy5JWCBJdGVtICJMQ19NRVNTQUdFUyIKKy5JUCAiXGZCXHMtMUxDX0FMTFxzMFxmUiIgNAorLklYIEl0ZW0gIkxDX0FMTCIKKy5QRAorVGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNvbnRyb2wgdGhlIHdheSB0aGF0IFxzLTFHQ0NcczAgdXNlcworbG9jYWxpemF0aW9uIGluZm9ybWF0aW9uIHdoaWNoIGFsbG93cyBccy0xR0NDXHMwIHRvIHdvcmsgd2l0aCBkaWZmZXJlbnQKK25hdGlvbmFsIGNvbnZlbnRpb25zLiAgXHMtMUdDQ1xzMCBpbnNwZWN0cyB0aGUgbG9jYWxlIGNhdGVnb3JpZXMKK1wmXGZCXHMtMUxDX0NUWVBFXHMwXGZSIGFuZCBcZkJccy0xTENfTUVTU0FHRVNcczBcZlIgaWYgaXQgaGFzIGJlZW4gY29uZmlndXJlZCB0byBkbworc28uICBUaGVzZSBsb2NhbGUgY2F0ZWdvcmllcyBjYW4gYmUgc2V0IHRvIGFueSB2YWx1ZSBzdXBwb3J0ZWQgYnkgeW91cgoraW5zdGFsbGF0aW9uLiAgQSB0eXBpY2FsIHZhbHVlIGlzIFxmQmVuX0dCLlVURlwtOFxmUiBmb3IgRW5nbGlzaCBpbiB0aGUgVW5pdGVkCitLaW5nZG9tIGVuY29kZWQgaW4gXHMtMVVURlwtOFxzMC4KKy5TcAorVGhlIFxmQlxzLTFMQ19DVFlQRVxzMFxmUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzcGVjaWZpZXMgY2hhcmFjdGVyCitjbGFzc2lmaWNhdGlvbi4gIFxzLTFHQ0NcczAgdXNlcyBpdCB0byBkZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBib3VuZGFyaWVzIGluCithIHN0cmluZzsgdGhpcyBpcyBuZWVkZWQgZm9yIHNvbWUgbXVsdGlieXRlIGVuY29kaW5ncyB0aGF0IGNvbnRhaW4gcXVvdGUKK2FuZCBlc2NhcGUgY2hhcmFjdGVycyB0aGF0IGFyZSBvdGhlcndpc2UgaW50ZXJwcmV0ZWQgYXMgYSBzdHJpbmcKK2VuZCBvciBlc2NhcGUuCisuU3AKK1RoZSBcZkJccy0xTENfTUVTU0FHRVNcczBcZlIgZW52aXJvbm1lbnQgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBsYW5ndWFnZSB0bwordXNlIGluIGRpYWdub3N0aWMgbWVzc2FnZXMuCisuU3AKK0lmIHRoZSBcZkJccy0xTENfQUxMXHMwXGZSIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgaXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZQorb2YgXGZCXHMtMUxDX0NUWVBFXHMwXGZSIGFuZCBcZkJccy0xTENfTUVTU0FHRVNcczBcZlI7IG90aGVyd2lzZSwgXGZCXHMtMUxDX0NUWVBFXHMwXGZSCithbmQgXGZCXHMtMUxDX01FU1NBR0VTXHMwXGZSIGRlZmF1bHQgdG8gdGhlIHZhbHVlIG9mIHRoZSBcZkJccy0xTEFOR1xzMFxmUgorZW52aXJvbm1lbnQgdmFyaWFibGUuICBJZiBub25lIG9mIHRoZXNlIHZhcmlhYmxlcyBhcmUgc2V0LCBccy0xR0NDXHMwCitkZWZhdWx0cyB0byB0cmFkaXRpb25hbCBDIEVuZ2xpc2ggYmVoYXZpb3IuCisuSVAgIlxmQlxzLTFUTVBESVJcczBcZlIiIDQKKy5JWCBJdGVtICJUTVBESVIiCitJZiBcZkJccy0xVE1QRElSXHMwXGZSIGlzIHNldCwgaXQgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgdG8gdXNlIGZvciB0ZW1wb3JhcnkKK2ZpbGVzLiAgXHMtMUdDQ1xzMCB1c2VzIHRlbXBvcmFyeSBmaWxlcyB0byBob2xkIHRoZSBvdXRwdXQgb2Ygb25lIHN0YWdlIG9mCitjb21waWxhdGlvbiB3aGljaCBpcyB0byBiZSB1c2VkIGFzIGlucHV0IHRvIHRoZSBuZXh0IHN0YWdlOiBmb3IgZXhhbXBsZSwKK3RoZSBvdXRwdXQgb2YgdGhlIHByZXByb2Nlc3Nvciwgd2hpY2ggaXMgdGhlIGlucHV0IHRvIHRoZSBjb21waWxlcgorcHJvcGVyLgorLklQICJcZkJccy0xR0NDX0NPTVBBUkVfREVCVUdcczBcZlIiIDQKKy5JWCBJdGVtICJHQ0NfQ09NUEFSRV9ERUJVRyIKK1NldHRpbmcgXGZCXHMtMUdDQ19DT01QQVJFX0RFQlVHXHMwXGZSIGlzIG5lYXJseSBlcXVpdmFsZW50IHRvIHBhc3NpbmcKK1wmXGZCXC1mY29tcGFyZVwtZGVidWdcZlIgdG8gdGhlIGNvbXBpbGVyIGRyaXZlci4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbgorb2YgdGhpcyBvcHRpb24gZm9yIG1vcmUgZGV0YWlscy4KKy5JUCAiXGZCXHMtMUdDQ19FWEVDX1BSRUZJWFxzMFxmUiIgNAorLklYIEl0ZW0gIkdDQ19FWEVDX1BSRUZJWCIKK0lmIFxmQlxzLTFHQ0NfRVhFQ19QUkVGSVhcczBcZlIgaXMgc2V0LCBpdCBzcGVjaWZpZXMgYSBwcmVmaXggdG8gdXNlIGluIHRoZQorbmFtZXMgb2YgdGhlIHN1YnByb2dyYW1zIGV4ZWN1dGVkIGJ5IHRoZSBjb21waWxlci4gIE5vIHNsYXNoIGlzIGFkZGVkCit3aGVuIHRoaXMgcHJlZml4IGlzIGNvbWJpbmVkIHdpdGggdGhlIG5hbWUgb2YgYSBzdWJwcm9ncmFtLCBidXQgeW91IGNhbgorc3BlY2lmeSBhIHByZWZpeCB0aGF0IGVuZHMgd2l0aCBhIHNsYXNoIGlmIHlvdSB3aXNoLgorLlNwCitJZiBcZkJccy0xR0NDX0VYRUNfUFJFRklYXHMwXGZSIGlzIG5vdCBzZXQsIFxzLTFHQ0NcczAgYXR0ZW1wdHMgdG8gZmlndXJlIG91dAorYW4gYXBwcm9wcmlhdGUgcHJlZml4IHRvIHVzZSBiYXNlZCBvbiB0aGUgcGF0aG5hbWUgaXQgaXMgaW52b2tlZCB3aXRoLgorLlNwCitJZiBccy0xR0NDXHMwIGNhbm5vdCBmaW5kIHRoZSBzdWJwcm9ncmFtIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJlZml4LCBpdAordHJpZXMgbG9va2luZyBpbiB0aGUgdXN1YWwgcGxhY2VzIGZvciB0aGUgc3VicHJvZ3JhbS4KKy5TcAorVGhlIGRlZmF1bHQgdmFsdWUgb2YgXGZCXHMtMUdDQ19FWEVDX1BSRUZJWFxzMFxmUiBpcworXCZcZklcZklwcmVmaXhcZkkvbGliL2djYy9cZlIgd2hlcmUgXGZJcHJlZml4XGZSIGlzIHRoZSBwcmVmaXggdG8KK3RoZSBpbnN0YWxsZWQgY29tcGlsZXIuIEluIG1hbnkgY2FzZXMgXGZJcHJlZml4XGZSIGlzIHRoZSB2YWx1ZQorb2YgXGYoQ1dcKihDYHByZWZpeFwqKEMnXGZSIHdoZW4geW91IHJhbiB0aGUgXGZJY29uZmlndXJlXGZSIHNjcmlwdC4KKy5TcAorT3RoZXIgcHJlZml4ZXMgc3BlY2lmaWVkIHdpdGggXGZCXC1CXGZSIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoaXMgcHJlZml4LgorLlNwCitUaGlzIHByZWZpeCBpcyBhbHNvIHVzZWQgZm9yIGZpbmRpbmcgZmlsZXMgc3VjaCBhcyBcZkljcnQwLm9cZlIgdGhhdCBhcmUKK3VzZWQgZm9yIGxpbmtpbmcuCisuU3AKK0luIGFkZGl0aW9uLCB0aGUgcHJlZml4IGlzIHVzZWQgaW4gYW4gdW51c3VhbCB3YXkgaW4gZmluZGluZyB0aGUKK2RpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgaGVhZGVyIGZpbGVzLiAgRm9yIGVhY2ggb2YgdGhlIHN0YW5kYXJkCitkaXJlY3RvcmllcyB3aG9zZSBuYW1lIG5vcm1hbGx5IGJlZ2lucyB3aXRoIFxmQi91c3IvbG9jYWwvbGliL2djY1xmUgorKG1vcmUgcHJlY2lzZWx5LCB3aXRoIHRoZSB2YWx1ZSBvZiBcZkJccy0xR0NDX0lOQ0xVREVfRElSXHMwXGZSKSwgXHMtMUdDQ1xzMCB0cmllcworcmVwbGFjaW5nIHRoYXQgYmVnaW5uaW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXggdG8gcHJvZHVjZSBhbgorYWx0ZXJuYXRlIGRpcmVjdG9yeSBuYW1lLiAgVGh1cywgd2l0aCBcZkJcLUJmb28vXGZSLCBccy0xR0NDXHMwIHNlYXJjaGVzCitcJlxmSWZvby9iYXJcZlIganVzdCBiZWZvcmUgaXQgc2VhcmNoZXMgdGhlIHN0YW5kYXJkIGRpcmVjdG9yeSAKK1wmXGZJL3Vzci9sb2NhbC9saWIvYmFyXGZSLgorSWYgYSBzdGFuZGFyZCBkaXJlY3RvcnkgYmVnaW5zIHdpdGggdGhlIGNvbmZpZ3VyZWQKK1wmXGZJcHJlZml4XGZSIHRoZW4gdGhlIHZhbHVlIG9mIFxmSXByZWZpeFxmUiBpcyByZXBsYWNlZCBieQorXCZcZkJccy0xR0NDX0VYRUNfUFJFRklYXHMwXGZSIHdoZW4gbG9va2luZyBmb3IgaGVhZGVyIGZpbGVzLgorLklQICJcZkJccy0xQ09NUElMRVJfUEFUSFxzMFxmUiIgNAorLklYIEl0ZW0gIkNPTVBJTEVSX1BBVEgiCitUaGUgdmFsdWUgb2YgXGZCXHMtMUNPTVBJTEVSX1BBVEhcczBcZlIgaXMgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZgorZGlyZWN0b3JpZXMsIG11Y2ggbGlrZSBcZkJccy0xUEFUSFxzMFxmUi4gIFxzLTFHQ0NcczAgdHJpZXMgdGhlIGRpcmVjdG9yaWVzIHRodXMKK3NwZWNpZmllZCB3aGVuIHNlYXJjaGluZyBmb3Igc3VicHJvZ3JhbXMsIGlmIGl0IGNhbid0IGZpbmQgdGhlCitzdWJwcm9ncmFtcyB1c2luZyBcZkJccy0xR0NDX0VYRUNfUFJFRklYXHMwXGZSLgorLklQICJcZkJccy0xTElCUkFSWV9QQVRIXHMwXGZSIiA0CisuSVggSXRlbSAiTElCUkFSWV9QQVRIIgorVGhlIHZhbHVlIG9mIFxmQlxzLTFMSUJSQVJZX1BBVEhcczBcZlIgaXMgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZgorZGlyZWN0b3JpZXMsIG11Y2ggbGlrZSBcZkJccy0xUEFUSFxzMFxmUi4gIFdoZW4gY29uZmlndXJlZCBhcyBhIG5hdGl2ZSBjb21waWxlciwKK1wmXHMtMUdDQ1xzMCB0cmllcyB0aGUgZGlyZWN0b3JpZXMgdGh1cyBzcGVjaWZpZWQgd2hlbiBzZWFyY2hpbmcgZm9yIHNwZWNpYWwKK2xpbmtlciBmaWxlcywgaWYgaXQgY2FuJ3QgZmluZCB0aGVtIHVzaW5nIFxmQlxzLTFHQ0NfRVhFQ19QUkVGSVhcczBcZlIuICBMaW5raW5nCit1c2luZyBccy0xR0NDXHMwIGFsc28gdXNlcyB0aGVzZSBkaXJlY3RvcmllcyB3aGVuIHNlYXJjaGluZyBmb3Igb3JkaW5hcnkKK2xpYnJhcmllcyBmb3IgdGhlIFxmQlwtbFxmUiBvcHRpb24gKGJ1dCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgd2l0aAorXCZcZkJcLUxcZlIgY29tZSBmaXJzdCkuCisuSVAgIlxmQlxzLTFMQU5HXHMwXGZSIiA0CisuSVggSXRlbSAiTEFORyIKK1RoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBwYXNzIGxvY2FsZSBpbmZvcm1hdGlvbiB0byB0aGUgY29tcGlsZXIuICBPbmUgd2F5IGluCit3aGljaCB0aGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIGJlIHVzZWQKK3doZW4gY2hhcmFjdGVyIGxpdGVyYWxzLCBzdHJpbmcgbGl0ZXJhbHMgYW5kIGNvbW1lbnRzIGFyZSBwYXJzZWQgaW4gQyBhbmQgXCooQysuCitXaGVuIHRoZSBjb21waWxlciBpcyBjb25maWd1cmVkIHRvIGFsbG93IG11bHRpYnl0ZSBjaGFyYWN0ZXJzLAordGhlIGZvbGxvd2luZyB2YWx1ZXMgZm9yIFxmQlxzLTFMQU5HXHMwXGZSIGFyZSByZWNvZ25pemVkOgorLlJTIDQKKy5JUCAiXGZCQ1wtSklTXGZSIiA0CisuSVggSXRlbSAiQy1KSVMiCitSZWNvZ25pemUgXHMtMUpJU1xzMCBjaGFyYWN0ZXJzLgorLklQICJcZkJDXC1TSklTXGZSIiA0CisuSVggSXRlbSAiQy1TSklTIgorUmVjb2duaXplIFxzLTFTSklTXHMwIGNoYXJhY3RlcnMuCisuSVAgIlxmQkNcLUVVQ0pQXGZSIiA0CisuSVggSXRlbSAiQy1FVUNKUCIKK1JlY29nbml6ZSBccy0xRVVDSlBcczAgY2hhcmFjdGVycy4KKy5SRQorLlJTIDQKKy5TcAorSWYgXGZCXHMtMUxBTkdcczBcZlIgaXMgbm90IGRlZmluZWQsIG9yIGlmIGl0IGhhcyBzb21lIG90aGVyIHZhbHVlLCB0aGVuIHRoZQorY29tcGlsZXIgdXNlcyBcZihDV1wqKENgbWJsZW5cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYG1idG93Y1wqKEMnXGZSIGFzIGRlZmluZWQgYnkgdGhlIGRlZmF1bHQgbG9jYWxlIHRvCityZWNvZ25pemUgYW5kIHRyYW5zbGF0ZSBtdWx0aWJ5dGUgY2hhcmFjdGVycy4KKy5SRQorLlBQCitTb21lIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgdGhlCitwcmVwcm9jZXNzb3IuCisuSVAgIlxmQlxzLTFDUEFUSFxzMFxmUiIgNAorLklYIEl0ZW0gIkNQQVRIIgorLlBEIDAKKy5JUCAiXGZCQ19JTkNMVURFX1BBVEhcZlIiIDQKKy5JWCBJdGVtICJDX0lOQ0xVREVfUEFUSCIKKy5JUCAiXGZCXHMtMUNQTFVTX0lOQ0xVREVfUEFUSFxzMFxmUiIgNAorLklYIEl0ZW0gIkNQTFVTX0lOQ0xVREVfUEFUSCIKKy5JUCAiXGZCXHMtMU9CSkNfSU5DTFVERV9QQVRIXHMwXGZSIiA0CisuSVggSXRlbSAiT0JKQ19JTkNMVURFX1BBVEgiCisuUEQKK0VhY2ggdmFyaWFibGUncyB2YWx1ZSBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IGEgc3BlY2lhbAorY2hhcmFjdGVyLCBtdWNoIGxpa2UgXGZCXHMtMVBBVEhcczBcZlIsIGluIHdoaWNoIHRvIGxvb2sgZm9yIGhlYWRlciBmaWxlcy4KK1RoZSBzcGVjaWFsIGNoYXJhY3RlciwgXGYoQ1dcKihDYFBBVEhfU0VQQVJBVE9SXCooQydcZlIsIGlzIHRhcmdldC1kZXBlbmRlbnQgYW5kCitkZXRlcm1pbmVkIGF0IFxzLTFHQ0NcczAgYnVpbGQgdGltZS4gIEZvciBNaWNyb3NvZnQgV2luZG93cy1iYXNlZCB0YXJnZXRzIGl0IGlzIGEKK3NlbWljb2xvbiwgYW5kIGZvciBhbG1vc3QgYWxsIG90aGVyIHRhcmdldHMgaXQgaXMgYSBjb2xvbi4KKy5TcAorXCZcZkJccy0xQ1BBVEhcczBcZlIgc3BlY2lmaWVzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCBhcyBpZgorc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSLCBidXQgYWZ0ZXIgYW55IHBhdGhzIGdpdmVuIHdpdGggXGZCXC1JXGZSCitvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQKK3JlZ2FyZGxlc3Mgb2Ygd2hpY2ggbGFuZ3VhZ2UgaXMgYmVpbmcgcHJlcHJvY2Vzc2VkLgorLlNwCitUaGUgcmVtYWluaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcHBseSBvbmx5IHdoZW4gcHJlcHJvY2Vzc2luZyB0aGUKK3BhcnRpY3VsYXIgbGFuZ3VhZ2UgaW5kaWNhdGVkLiAgRWFjaCBzcGVjaWZpZXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzCit0byBiZSBzZWFyY2hlZCBhcyBpZiBzcGVjaWZpZWQgd2l0aCBcZkJcLWlzeXN0ZW1cZlIsIGJ1dCBhZnRlciBhbnkKK3BhdGhzIGdpdmVuIHdpdGggXGZCXC1pc3lzdGVtXGZSIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5TcAorSW4gYWxsIHRoZXNlIHZhcmlhYmxlcywgYW4gZW1wdHkgZWxlbWVudCBpbnN0cnVjdHMgdGhlIGNvbXBpbGVyIHRvCitzZWFyY2ggaXRzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBFbXB0eSBlbGVtZW50cyBjYW4gYXBwZWFyIGF0IHRoZQorYmVnaW5uaW5nIG9yIGVuZCBvZiBhIHBhdGguICBGb3IgaW5zdGFuY2UsIGlmIHRoZSB2YWx1ZSBvZgorXCZcZkJccy0xQ1BBVEhcczBcZlIgaXMgXGYoQ1dcKihDYDovc3BlY2lhbC9pbmNsdWRlXCooQydcZlIsIHRoYXQgaGFzIHRoZSBzYW1lCitlZmZlY3QgYXMgXGZCXC1JLlwgXC1JL3NwZWNpYWwvaW5jbHVkZVxmUi4KKy5JUCAiXGZCXHMtMURFUEVOREVOQ0lFU19PVVRQVVRcczBcZlIiIDQKKy5JWCBJdGVtICJERVBFTkRFTkNJRVNfT1VUUFVUIgorSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQsIGl0cyB2YWx1ZSBzcGVjaWZpZXMgaG93IHRvIG91dHB1dAorZGVwZW5kZW5jaWVzIGZvciBNYWtlIGJhc2VkIG9uIHRoZSBub24tc3lzdGVtIGhlYWRlciBmaWxlcyBwcm9jZXNzZWQKK2J5IHRoZSBjb21waWxlci4gIFN5c3RlbSBoZWFkZXIgZmlsZXMgYXJlIGlnbm9yZWQgaW4gdGhlIGRlcGVuZGVuY3kKK291dHB1dC4KKy5TcAorVGhlIHZhbHVlIG9mIFxmQlxzLTFERVBFTkRFTkNJRVNfT1VUUFVUXHMwXGZSIGNhbiBiZSBqdXN0IGEgZmlsZSBuYW1lLCBpbgord2hpY2ggY2FzZSB0aGUgTWFrZSBydWxlcyBhcmUgd3JpdHRlbiB0byB0aGF0IGZpbGUsIGd1ZXNzaW5nIHRoZSB0YXJnZXQKK25hbWUgZnJvbSB0aGUgc291cmNlIGZpbGUgbmFtZS4gIE9yIHRoZSB2YWx1ZSBjYW4gaGF2ZSB0aGUgZm9ybQorXCZcZklmaWxlXGZSXGZCIFxmUlxmSXRhcmdldFxmUiwgaW4gd2hpY2ggY2FzZSB0aGUgcnVsZXMgYXJlIHdyaXR0ZW4gdG8KK2ZpbGUgXGZJZmlsZVxmUiB1c2luZyBcZkl0YXJnZXRcZlIgYXMgdGhlIHRhcmdldCBuYW1lLgorLlNwCitJbiBvdGhlciB3b3JkcywgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBlcXVpdmFsZW50IHRvIGNvbWJpbmluZwordGhlIG9wdGlvbnMgXGZCXC1NTVxmUiBhbmQgXGZCXC1NRlxmUiwKK3dpdGggYW4gb3B0aW9uYWwgXGZCXC1NVFxmUiBzd2l0Y2ggdG9vLgorLklQICJcZkJccy0xU1VOUFJPX0RFUEVOREVOQ0lFU1xzMFxmUiIgNAorLklYIEl0ZW0gIlNVTlBST19ERVBFTkRFTkNJRVMiCitUaGlzIHZhcmlhYmxlIGlzIHRoZSBzYW1lIGFzIFxmQlxzLTFERVBFTkRFTkNJRVNfT1VUUFVUXHMwXGZSIChzZWUgYWJvdmUpLAorZXhjZXB0IHRoYXQgc3lzdGVtIGhlYWRlciBmaWxlcyBhcmUgbm90IGlnbm9yZWQsIHNvIGl0IGltcGxpZXMKK1wmXGZCXC1NXGZSIHJhdGhlciB0aGFuIFxmQlwtTU1cZlIuICBIb3dldmVyLCB0aGUgZGVwZW5kZW5jZSBvbiB0aGUKK21haW4gaW5wdXQgZmlsZSBpcyBvbWl0dGVkLgorLlNIICJCVUdTIgorLklYIEhlYWRlciAiQlVHUyIKK0ZvciBpbnN0cnVjdGlvbnMgb24gcmVwb3J0aW5nIGJ1Z3MsIHNlZQorPFxmQmh0dHBzOi8vYnVncy5sYXVuY2hwYWQubmV0L2djY1wtbGluYXJvXGZSPi4KKy5TSCAiRk9PVE5PVEVTIgorLklYIEhlYWRlciAiRk9PVE5PVEVTIgorLklQICIxLiIgNAorT24gc29tZSBzeXN0ZW1zLCBcZkJnY2MgXC1zaGFyZWRcZlIKK25lZWRzIHRvIGJ1aWxkIHN1cHBsZW1lbnRhcnkgc3R1YiBjb2RlIGZvciBjb25zdHJ1Y3RvcnMgdG8gd29yay4gIE9uCittdWx0aS1saWJiZWQgc3lzdGVtcywgXGZCZ2NjIFwtc2hhcmVkXGZSIG11c3Qgc2VsZWN0IHRoZSBjb3JyZWN0IHN1cHBvcnQKK2xpYnJhcmllcyB0byBsaW5rIGFnYWluc3QuICBGYWlsaW5nIHRvIHN1cHBseSB0aGUgY29ycmVjdCBmbGFncyBtYXkgbGVhZAordG8gc3VidGxlIGRlZmVjdHMuICBTdXBwbHlpbmcgdGhlbSBpbiBjYXNlcyB3aGVyZSB0aGV5IGFyZSBub3QgbmVjZXNzYXJ5CitpcyBpbm5vY3VvdXMuCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitcJlxmSWdwbFxmUlx8KDcpLCBcZklnZmRsXGZSXHwoNyksIFxmSWZzZlwtZnVuZGluZ1xmUlx8KDcpLAorXCZcZkljcHBcZlJcfCgxKSwgXGZJZ2NvdlxmUlx8KDEpLCBcZklhc1xmUlx8KDEpLCBcZklsZFxmUlx8KDEpLCBcZklnZGJcZlJcfCgxKSwgXGZJYWRiXGZSXHwoMSksIFxmSWRieFxmUlx8KDEpLCBcZklzZGJcZlJcfCgxKQorYW5kIHRoZSBJbmZvIGVudHJpZXMgZm9yIFxmSWdjY1xmUiwgXGZJY3BwXGZSLCBcZklhc1xmUiwKK1wmXGZJbGRcZlIsIFxmSWJpbnV0aWxzXGZSIGFuZCBcZklnZGJcZlIuCisuU0ggIkFVVEhPUiIKKy5JWCBIZWFkZXIgIkFVVEhPUiIKK1NlZSB0aGUgSW5mbyBlbnRyeSBmb3IgXGZCZ2NjXGZSLCBvcgorPFxmQmh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9Db250cmlidXRvcnMuaHRtbFxmUj4sCitmb3IgY29udHJpYnV0b3JzIHRvIFxzLTFHQ0NcczAuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk4OFwtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zIG9yCithbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2l0aCB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBiZWluZyBcKihMIlxzLTFHTlVcczAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVwqKFIiIGFuZCBcKihMIkZ1bmRpbmcKK0ZyZWUgU29mdHdhcmVcKihSIiwgdGhlIEZyb250LUNvdmVyIHRleHRzIGJlaW5nIChhKSAoc2VlIGJlbG93KSwgYW5kIHdpdGgKK3RoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIChiKSAoc2VlIGJlbG93KS4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcworaW5jbHVkZWQgaW4gdGhlIFxmSWdmZGxcZlJcfCg3KSBtYW4gcGFnZS4KKy5QUAorKGEpIFRoZSBccy0xRlNGXHMwJ3MgRnJvbnQtQ292ZXIgVGV4dCBpczoKKy5QUAorLlZiIDEKK1wmICAgICBBIEdOVSBNYW51YWwKKy5WZQorLlBQCisoYikgVGhlIFxzLTFGU0ZcczAncyBCYWNrLUNvdmVyIFRleHQgaXM6CisuUFAKKy5WYiAzCitcJiAgICAgWW91IGhhdmUgZnJlZWRvbSB0byBjb3B5IGFuZCBtb2RpZnkgdGhpcyBHTlUgTWFudWFsLCBsaWtlIEdOVQorXCYgICAgIHNvZnR3YXJlLiAgQ29waWVzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHJhaXNlCitcJiAgICAgZnVuZHMgZm9yIEdOVSBkZXZlbG9wbWVudC4KKy5WZQpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWdjb3YuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1nY292LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhNDRiOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1nY292LjEKQEAgLTAsMCArMSw2NzIgQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjI1IChQb2Q6OlNpbXBsZSAzLjE2KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJHQ09WIDEiCisuVEggR0NPViAxICIyMDEzLTExLTExIiAiZ2NjLTQuOC4zIiAiR05VIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK2djb3YgXC0gY292ZXJhZ2UgdGVzdGluZyB0b29sCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCitnY292IFtcZkJcLXZcZlJ8XGZCXC1cLXZlcnNpb25cZlJdIFtcZkJcLWhcZlJ8XGZCXC1cLWhlbHBcZlJdCisgICAgIFtcZkJcLWFcZlJ8XGZCXC1cLWFsbFwtYmxvY2tzXGZSXQorICAgICBbXGZCXC1iXGZSfFxmQlwtXC1icmFuY2hcLXByb2JhYmlsaXRpZXNcZlJdCisgICAgIFtcZkJcLWNcZlJ8XGZCXC1cLWJyYW5jaFwtY291bnRzXGZSXQorICAgICBbXGZCXC11XGZSfFxmQlwtXC11bmNvbmRpdGlvbmFsXC1icmFuY2hlc1xmUl0KKyAgICAgW1xmQlwtblxmUnxcZkJcLVwtbm9cLW91dHB1dFxmUl0KKyAgICAgW1xmQlwtbFxmUnxcZkJcLVwtbG9uZ1wtZmlsZVwtbmFtZXNcZlJdCisgICAgIFtcZkJcLXBcZlJ8XGZCXC1cLXByZXNlcnZlXC1wYXRoc1xmUl0KKyAgICAgW1xmQlwtclxmUnxcZkJcLVwtcmVsYXRpdmVcLW9ubHlcZlJdCisgICAgIFtcZkJcLWZcZlJ8XGZCXC1cLWZ1bmN0aW9uXC1zdW1tYXJpZXNcZlJdCisgICAgIFtcZkJcLW9cZlJ8XGZCXC1cLW9iamVjdFwtZGlyZWN0b3J5XGZSIFxmSWRpcmVjdG9yeXxmaWxlXGZSXQorICAgICBbXGZCXC1zXGZSfFxmQlwtXC1zb3VyY2VcLXByZWZpeFxmUiBcZklkaXJlY3RvcnlcZlJdCisgICAgIFtcZkJcLWRcZlJ8XGZCXC1cLWRpc3BsYXlcLXByb2dyZXNzXGZSXQorICAgICBcZklmaWxlc1xmUgorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorXCZcZkJnY292XGZSIGlzIGEgdGVzdCBjb3ZlcmFnZSBwcm9ncmFtLiAgVXNlIGl0IGluIGNvbmNlcnQgd2l0aCBccy0xR0NDXHMwCit0byBhbmFseXplIHlvdXIgcHJvZ3JhbXMgdG8gaGVscCBjcmVhdGUgbW9yZSBlZmZpY2llbnQsIGZhc3RlciBydW5uaW5nCitjb2RlIGFuZCB0byBkaXNjb3ZlciB1bnRlc3RlZCBwYXJ0cyBvZiB5b3VyIHByb2dyYW0uICBZb3UgY2FuIHVzZQorXCZcZkJnY292XGZSIGFzIGEgcHJvZmlsaW5nIHRvb2wgdG8gaGVscCBkaXNjb3ZlciB3aGVyZSB5b3VyCitvcHRpbWl6YXRpb24gZWZmb3J0cyB3aWxsIGJlc3QgYWZmZWN0IHlvdXIgY29kZS4gIFlvdSBjYW4gYWxzbyB1c2UKK1wmXGZCZ2NvdlxmUiBhbG9uZyB3aXRoIHRoZSBvdGhlciBwcm9maWxpbmcgdG9vbCwgXGZCZ3Byb2ZcZlIsIHRvCithc3Nlc3Mgd2hpY2ggcGFydHMgb2YgeW91ciBjb2RlIHVzZSB0aGUgZ3JlYXRlc3QgYW1vdW50IG9mIGNvbXB1dGluZwordGltZS4KKy5QUAorUHJvZmlsaW5nIHRvb2xzIGhlbHAgeW91IGFuYWx5emUgeW91ciBjb2RlJ3MgcGVyZm9ybWFuY2UuICBVc2luZyBhCitwcm9maWxlciBzdWNoIGFzIFxmQmdjb3ZcZlIgb3IgXGZCZ3Byb2ZcZlIsIHlvdSBjYW4gZmluZCBvdXQgc29tZQorYmFzaWMgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcywgc3VjaCBhczoKKy5JUCAiXChidSIgNAoraG93IG9mdGVuIGVhY2ggbGluZSBvZiBjb2RlIGV4ZWN1dGVzCisuSVAgIlwoYnUiIDQKK3doYXQgbGluZXMgb2YgY29kZSBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQKKy5JUCAiXChidSIgNAoraG93IG11Y2ggY29tcHV0aW5nIHRpbWUgZWFjaCBzZWN0aW9uIG9mIGNvZGUgdXNlcworLlBQCitPbmNlIHlvdSBrbm93IHRoZXNlIHRoaW5ncyBhYm91dCBob3cgeW91ciBjb2RlIHdvcmtzIHdoZW4gY29tcGlsZWQsIHlvdQorY2FuIGxvb2sgYXQgZWFjaCBtb2R1bGUgdG8gc2VlIHdoaWNoIG1vZHVsZXMgc2hvdWxkIGJlIG9wdGltaXplZC4KK1wmXGZCZ2NvdlxmUiBoZWxwcyB5b3UgZGV0ZXJtaW5lIHdoZXJlIHRvIHdvcmsgb24gb3B0aW1pemF0aW9uLgorLlBQCitTb2Z0d2FyZSBkZXZlbG9wZXJzIGFsc28gdXNlIGNvdmVyYWdlIHRlc3RpbmcgaW4gY29uY2VydCB3aXRoCit0ZXN0c3VpdGVzLCB0byBtYWtlIHN1cmUgc29mdHdhcmUgaXMgYWN0dWFsbHkgZ29vZCBlbm91Z2ggZm9yIGEgcmVsZWFzZS4KK1Rlc3RzdWl0ZXMgY2FuIHZlcmlmeSB0aGF0IGEgcHJvZ3JhbSB3b3JrcyBhcyBleHBlY3RlZDsgYSBjb3ZlcmFnZQorcHJvZ3JhbSB0ZXN0cyB0byBzZWUgaG93IG11Y2ggb2YgdGhlIHByb2dyYW0gaXMgZXhlcmNpc2VkIGJ5IHRoZQordGVzdHN1aXRlLiAgRGV2ZWxvcGVycyBjYW4gdGhlbiBkZXRlcm1pbmUgd2hhdCBraW5kcyBvZiB0ZXN0IGNhc2VzIG5lZWQKK3RvIGJlIGFkZGVkIHRvIHRoZSB0ZXN0c3VpdGVzIHRvIGNyZWF0ZSBib3RoIGJldHRlciB0ZXN0aW5nIGFuZCBhIGJldHRlcgorZmluYWwgcHJvZHVjdC4KKy5QUAorWW91IHNob3VsZCBjb21waWxlIHlvdXIgY29kZSB3aXRob3V0IG9wdGltaXphdGlvbiBpZiB5b3UgcGxhbiB0byB1c2UKK1wmXGZCZ2NvdlxmUiBiZWNhdXNlIHRoZSBvcHRpbWl6YXRpb24sIGJ5IGNvbWJpbmluZyBzb21lIGxpbmVzIG9mIGNvZGUKK2ludG8gb25lIGZ1bmN0aW9uLCBtYXkgbm90IGdpdmUgeW91IGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgeW91IG5lZWQgdG8KK2xvb2sgZm9yIGBob3Qgc3BvdHMnIHdoZXJlIHRoZSBjb2RlIGlzIHVzaW5nIGEgZ3JlYXQgZGVhbCBvZiBjb21wdXRlcgordGltZS4gIExpa2V3aXNlLCBiZWNhdXNlIFxmQmdjb3ZcZlIgYWNjdW11bGF0ZXMgc3RhdGlzdGljcyBieSBsaW5lIChhdAordGhlIGxvd2VzdCByZXNvbHV0aW9uKSwgaXQgd29ya3MgYmVzdCB3aXRoIGEgcHJvZ3JhbW1pbmcgc3R5bGUgdGhhdAorcGxhY2VzIG9ubHkgb25lIHN0YXRlbWVudCBvbiBlYWNoIGxpbmUuICBJZiB5b3UgdXNlIGNvbXBsaWNhdGVkIG1hY3JvcwordGhhdCBleHBhbmQgdG8gbG9vcHMgb3IgdG8gb3RoZXIgY29udHJvbCBzdHJ1Y3R1cmVzLCB0aGUgc3RhdGlzdGljcyBhcmUKK2xlc3MgaGVscGZ1bFwtXC1cLXRoZXkgb25seSByZXBvcnQgb24gdGhlIGxpbmUgd2hlcmUgdGhlIG1hY3JvIGNhbGwKK2FwcGVhcnMuICBJZiB5b3VyIGNvbXBsZXggbWFjcm9zIGJlaGF2ZSBsaWtlIGZ1bmN0aW9ucywgeW91IGNhbiByZXBsYWNlCit0aGVtIHdpdGggaW5saW5lIGZ1bmN0aW9ucyB0byBzb2x2ZSB0aGlzIHByb2JsZW0uCisuUFAKK1wmXGZCZ2NvdlxmUiBjcmVhdGVzIGEgbG9nZmlsZSBjYWxsZWQgXGZJXGZJc291cmNlZmlsZVxmSS5nY292XGZSIHdoaWNoCitpbmRpY2F0ZXMgaG93IG1hbnkgdGltZXMgZWFjaCBsaW5lIG9mIGEgc291cmNlIGZpbGUgXGZJXGZJc291cmNlZmlsZVxmSS5jXGZSCitoYXMgZXhlY3V0ZWQuICBZb3UgY2FuIHVzZSB0aGVzZSBsb2dmaWxlcyBhbG9uZyB3aXRoIFxmQmdwcm9mXGZSIHRvIGFpZAoraW4gZmluZS10dW5pbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHlvdXIgcHJvZ3JhbXMuICBcZkJncHJvZlxmUiBnaXZlcwordGltaW5nIGluZm9ybWF0aW9uIHlvdSBjYW4gdXNlIGFsb25nIHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSBnZXQgZnJvbQorXCZcZkJnY292XGZSLgorLlBQCitcJlxmQmdjb3ZcZlIgd29ya3Mgb25seSBvbiBjb2RlIGNvbXBpbGVkIHdpdGggXHMtMUdDQ1xzMC4gIEl0IGlzIG5vdAorY29tcGF0aWJsZSB3aXRoIGFueSBvdGhlciBwcm9maWxpbmcgb3IgdGVzdCBjb3ZlcmFnZSBtZWNoYW5pc20uCisuU0ggIk9QVElPTlMiCisuSVggSGVhZGVyICJPUFRJT05TIgorLklQICJcZkJcLWhcZlIiIDQKKy5JWCBJdGVtICItaCIKKy5QRCAwCisuSVAgIlxmQlwtXC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS1oZWxwIgorLlBECitEaXNwbGF5IGhlbHAgYWJvdXQgdXNpbmcgXGZCZ2NvdlxmUiAob24gdGhlIHN0YW5kYXJkIG91dHB1dCksIGFuZAorZXhpdCB3aXRob3V0IGRvaW5nIGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcuCisuSVAgIlxmQlwtdlxmUiIgNAorLklYIEl0ZW0gIi12IgorLlBEIDAKKy5JUCAiXGZCXC1cLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24iCisuUEQKK0Rpc3BsYXkgdGhlIFxmQmdjb3ZcZlIgdmVyc2lvbiBudW1iZXIgKG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQpLAorYW5kIGV4aXQgd2l0aG91dCBkb2luZyBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgorLklQICJcZkJcLWFcZlIiIDQKKy5JWCBJdGVtICItYSIKKy5QRCAwCisuSVAgIlxmQlwtXC1hbGxcLWJsb2Nrc1xmUiIgNAorLklYIEl0ZW0gIi0tYWxsLWJsb2NrcyIKKy5QRAorV3JpdGUgaW5kaXZpZHVhbCBleGVjdXRpb24gY291bnRzIGZvciBldmVyeSBiYXNpYyBibG9jay4gIE5vcm1hbGx5IGdjb3YKK291dHB1dHMgZXhlY3V0aW9uIGNvdW50cyBvbmx5IGZvciB0aGUgbWFpbiBibG9ja3Mgb2YgYSBsaW5lLiAgV2l0aCB0aGlzCitvcHRpb24geW91IGNhbiBkZXRlcm1pbmUgaWYgYmxvY2tzIHdpdGhpbiBhIHNpbmdsZSBsaW5lIGFyZSBub3QgYmVpbmcKK2V4ZWN1dGVkLgorLklQICJcZkJcLWJcZlIiIDQKKy5JWCBJdGVtICItYiIKKy5QRCAwCisuSVAgIlxmQlwtXC1icmFuY2hcLXByb2JhYmlsaXRpZXNcZlIiIDQKKy5JWCBJdGVtICItLWJyYW5jaC1wcm9iYWJpbGl0aWVzIgorLlBECitXcml0ZSBicmFuY2ggZnJlcXVlbmNpZXMgdG8gdGhlIG91dHB1dCBmaWxlLCBhbmQgd3JpdGUgYnJhbmNoIHN1bW1hcnkKK2luZm8gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2VlIGhvdyBvZnRlbgorZWFjaCBicmFuY2ggaW4geW91ciBwcm9ncmFtIHdhcyB0YWtlbi4gIFVuY29uZGl0aW9uYWwgYnJhbmNoZXMgd2lsbCBub3QKK2JlIHNob3duLCB1bmxlc3MgdGhlIFxmQlwtdVxmUiBvcHRpb24gaXMgZ2l2ZW4uCisuSVAgIlxmQlwtY1xmUiIgNAorLklYIEl0ZW0gIi1jIgorLlBEIDAKKy5JUCAiXGZCXC1cLWJyYW5jaFwtY291bnRzXGZSIiA0CisuSVggSXRlbSAiLS1icmFuY2gtY291bnRzIgorLlBECitXcml0ZSBicmFuY2ggZnJlcXVlbmNpZXMgYXMgdGhlIG51bWJlciBvZiBicmFuY2hlcyB0YWtlbiwgcmF0aGVyIHRoYW4KK3RoZSBwZXJjZW50YWdlIG9mIGJyYW5jaGVzIHRha2VuLgorLklQICJcZkJcLW5cZlIiIDQKKy5JWCBJdGVtICItbiIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtb3V0cHV0XGZSIiA0CisuSVggSXRlbSAiLS1uby1vdXRwdXQiCisuUEQKK0RvIG5vdCBjcmVhdGUgdGhlIFxmQmdjb3ZcZlIgb3V0cHV0IGZpbGUuCisuSVAgIlxmQlwtbFxmUiIgNAorLklYIEl0ZW0gIi1sIgorLlBEIDAKKy5JUCAiXGZCXC1cLWxvbmdcLWZpbGVcLW5hbWVzXGZSIiA0CisuSVggSXRlbSAiLS1sb25nLWZpbGUtbmFtZXMiCisuUEQKK0NyZWF0ZSBsb25nIGZpbGUgbmFtZXMgZm9yIGluY2x1ZGVkIHNvdXJjZSBmaWxlcy4gIEZvciBleGFtcGxlLCBpZiB0aGUKK2hlYWRlciBmaWxlIFxmSXguaFxmUiBjb250YWlucyBjb2RlLCBhbmQgd2FzIGluY2x1ZGVkIGluIHRoZSBmaWxlCitcJlxmSWEuY1xmUiwgdGhlbiBydW5uaW5nIFxmQmdjb3ZcZlIgb24gdGhlIGZpbGUgXGZJYS5jXGZSIHdpbGwKK3Byb2R1Y2UgYW4gb3V0cHV0IGZpbGUgY2FsbGVkIFxmSWEuYyMjeC5oLmdjb3ZcZlIgaW5zdGVhZCBvZgorXCZcZkl4LmguZ2NvdlxmUi4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBcZkl4LmhcZlIgaXMgaW5jbHVkZWQgaW4KK211bHRpcGxlIHNvdXJjZSBmaWxlcyBhbmQgeW91IHdhbnQgdG8gc2VlIHRoZSBpbmRpdmlkdWFsCitjb250cmlidXRpb25zLiAgSWYgeW91IHVzZSB0aGUgXGZCXC1wXGZSIG9wdGlvbiwgYm90aCB0aGUgaW5jbHVkaW5nCithbmQgaW5jbHVkZWQgZmlsZSBuYW1lcyB3aWxsIGJlIGNvbXBsZXRlIHBhdGggbmFtZXMuCisuSVAgIlxmQlwtcFxmUiIgNAorLklYIEl0ZW0gIi1wIgorLlBEIDAKKy5JUCAiXGZCXC1cLXByZXNlcnZlXC1wYXRoc1xmUiIgNAorLklYIEl0ZW0gIi0tcHJlc2VydmUtcGF0aHMiCisuUEQKK1ByZXNlcnZlIGNvbXBsZXRlIHBhdGggaW5mb3JtYXRpb24gaW4gdGhlIG5hbWVzIG9mIGdlbmVyYXRlZAorXCZcZkkuZ2NvdlxmUiBmaWxlcy4gIFdpdGhvdXQgdGhpcyBvcHRpb24sIGp1c3QgdGhlIGZpbGVuYW1lIGNvbXBvbmVudCBpcwordXNlZC4gIFdpdGggdGhpcyBvcHRpb24sIGFsbCBkaXJlY3RvcmllcyBhcmUgdXNlZCwgd2l0aCBcZkIvXGZSIGNoYXJhY3RlcnMKK3RyYW5zbGF0ZWQgdG8gXGZCI1xmUiBjaGFyYWN0ZXJzLCBcZkkuXGZSIGRpcmVjdG9yeSBjb21wb25lbnRzCityZW1vdmVkIGFuZCB1bnJlbW92ZWFibGUgXGZJLi5cZlIKK2NvbXBvbmVudHMgcmVuYW1lZCB0byBcZkJeXGZSLiAgVGhpcyBpcyB1c2VmdWwgaWYgc291cmNlZmlsZXMgYXJlIGluIHNldmVyYWwKK2RpZmZlcmVudCBkaXJlY3Rvcmllcy4KKy5JUCAiXGZCXC1yXGZSIiA0CisuSVggSXRlbSAiLXIiCisuUEQgMAorLklQICJcZkJcLVwtcmVsYXRpdmVcLW9ubHlcZlIiIDQKKy5JWCBJdGVtICItLXJlbGF0aXZlLW9ubHkiCisuUEQKK09ubHkgb3V0cHV0IGluZm9ybWF0aW9uIGFib3V0IHNvdXJjZSBmaWxlcyB3aXRoIGEgcmVsYXRpdmUgcGF0aG5hbWUKKyhhZnRlciBzb3VyY2UgcHJlZml4IGVsaXNpb24pLiAgQWJzb2x1dGUgcGF0aHMgYXJlIHVzdWFsbHkgc3lzdGVtCitoZWFkZXIgZmlsZXMgYW5kIGNvdmVyYWdlIG9mIGFueSBpbmxpbmUgZnVuY3Rpb25zIHRoZXJlaW4gaXMgbm9ybWFsbHkKK3VuaW50ZXJlc3RpbmcuCisuSVAgIlxmQlwtZlxmUiIgNAorLklYIEl0ZW0gIi1mIgorLlBEIDAKKy5JUCAiXGZCXC1cLWZ1bmN0aW9uXC1zdW1tYXJpZXNcZlIiIDQKKy5JWCBJdGVtICItLWZ1bmN0aW9uLXN1bW1hcmllcyIKKy5QRAorT3V0cHV0IHN1bW1hcmllcyBmb3IgZWFjaCBmdW5jdGlvbiBpbiBhZGRpdGlvbiB0byB0aGUgZmlsZSBsZXZlbCBzdW1tYXJ5LgorLklQICJcZkJcLW9cZlIgXGZJZGlyZWN0b3J5fGZpbGVcZlIiIDQKKy5JWCBJdGVtICItbyBkaXJlY3Rvcnl8ZmlsZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1vYmplY3RcLWRpcmVjdG9yeVxmUiBcZklkaXJlY3RvcnlcZlIiIDQKKy5JWCBJdGVtICItLW9iamVjdC1kaXJlY3RvcnkgZGlyZWN0b3J5IgorLklQICJcZkJcLVwtb2JqZWN0XC1maWxlXGZSIFxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICItLW9iamVjdC1maWxlIGZpbGUiCisuUEQKK1NwZWNpZnkgZWl0aGVyIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZ2NvdiBkYXRhIGZpbGVzLCBvciB0aGUKK29iamVjdCBwYXRoIG5hbWUuICBUaGUgXGZJLmdjbm9cZlIsIGFuZAorXCZcZkkuZ2NkYVxmUiBkYXRhIGZpbGVzIGFyZSBzZWFyY2hlZCBmb3IgdXNpbmcgdGhpcyBvcHRpb24uICBJZiBhIGRpcmVjdG9yeQoraXMgc3BlY2lmaWVkLCB0aGUgZGF0YSBmaWxlcyBhcmUgaW4gdGhhdCBkaXJlY3RvcnkgYW5kIG5hbWVkIGFmdGVyIHRoZQoraW5wdXQgZmlsZSBuYW1lLCB3aXRob3V0IGl0cyBleHRlbnNpb24uICBJZiBhIGZpbGUgaXMgc3BlY2lmaWVkIGhlcmUsCit0aGUgZGF0YSBmaWxlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhhdCBmaWxlLCB3aXRob3V0IGl0cyBleHRlbnNpb24uCisuSVAgIlxmQlwtc1xmUiBcZklkaXJlY3RvcnlcZlIiIDQKKy5JWCBJdGVtICItcyBkaXJlY3RvcnkiCisuUEQgMAorLklQICJcZkJcLVwtc291cmNlXC1wcmVmaXhcZlIgXGZJZGlyZWN0b3J5XGZSIiA0CisuSVggSXRlbSAiLS1zb3VyY2UtcHJlZml4IGRpcmVjdG9yeSIKKy5QRAorQSBwcmVmaXggZm9yIHNvdXJjZSBmaWxlIG5hbWVzIHRvIHJlbW92ZSB3aGVuIGdlbmVyYXRpbmcgdGhlIG91dHB1dAorY292ZXJhZ2UgZmlsZXMuICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBidWlsZGluZyBpbiBhIHNlcGFyYXRlCitkaXJlY3RvcnksIGFuZCB0aGUgcGF0aG5hbWUgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IHdhbnRlZCB3aGVuCitkZXRlcm1pbmluZyB0aGUgb3V0cHV0IGZpbGUgbmFtZXMuICBOb3RlIHRoYXQgdGhpcyBwcmVmaXggZGV0ZWN0aW9uIGlzCithcHBsaWVkIGJlZm9yZSBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBzb3VyY2UgZmlsZSBpcyBhYnNvbHV0ZS4KKy5JUCAiXGZCXC11XGZSIiA0CisuSVggSXRlbSAiLXUiCisuUEQgMAorLklQICJcZkJcLVwtdW5jb25kaXRpb25hbFwtYnJhbmNoZXNcZlIiIDQKKy5JWCBJdGVtICItLXVuY29uZGl0aW9uYWwtYnJhbmNoZXMiCisuUEQKK1doZW4gYnJhbmNoIHByb2JhYmlsaXRpZXMgYXJlIGdpdmVuLCBpbmNsdWRlIHRob3NlIG9mIHVuY29uZGl0aW9uYWwgYnJhbmNoZXMuCitVbmNvbmRpdGlvbmFsIGJyYW5jaGVzIGFyZSBub3JtYWxseSBub3QgaW50ZXJlc3RpbmcuCisuSVAgIlxmQlwtZFxmUiIgNAorLklYIEl0ZW0gIi1kIgorLlBEIDAKKy5JUCAiXGZCXC1cLWRpc3BsYXlcLXByb2dyZXNzXGZSIiA0CisuSVggSXRlbSAiLS1kaXNwbGF5LXByb2dyZXNzIgorLlBECitEaXNwbGF5IHRoZSBwcm9ncmVzcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorLlBQCitcJlxmQmdjb3ZcZlIgc2hvdWxkIGJlIHJ1biB3aXRoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0aGUgc2FtZSBhcyB0aGF0Cit3aGVuIHlvdSBpbnZva2VkIHRoZSBjb21waWxlci4gIE90aGVyd2lzZSBpdCB3aWxsIG5vdCBiZSBhYmxlIHRvIGxvY2F0ZQordGhlIHNvdXJjZSBmaWxlcy4gIFxmQmdjb3ZcZlIgcHJvZHVjZXMgZmlsZXMgY2FsbGVkCitcJlxmSVxmSW1hbmdsZWRuYW1lXGZJLmdjb3ZcZlIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgVGhlc2UgY29udGFpbgordGhlIGNvdmVyYWdlIGluZm9ybWF0aW9uIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGV5IGNvcnJlc3BvbmQgdG8uCitPbmUgXGZJLmdjb3ZcZlIgZmlsZSBpcyBwcm9kdWNlZCBmb3IgZWFjaCBzb3VyY2UgKG9yIGhlYWRlcikgZmlsZQorY29udGFpbmluZyBjb2RlLAord2hpY2ggd2FzIGNvbXBpbGVkIHRvIHByb2R1Y2UgdGhlIGRhdGEgZmlsZXMuICBUaGUgXGZJbWFuZ2xlZG5hbWVcZlIgcGFydAorb2YgdGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgdXN1YWxseSBzaW1wbHkgdGhlIHNvdXJjZSBmaWxlIG5hbWUsIGJ1dCBjYW4KK2JlIHNvbWV0aGluZyBtb3JlIGNvbXBsaWNhdGVkIGlmIHRoZSBcZkJcLWxcZlIgb3IgXGZCXC1wXGZSIG9wdGlvbnMgYXJlCitnaXZlbi4gIFJlZmVyIHRvIHRob3NlIG9wdGlvbnMgZm9yIGRldGFpbHMuCisuUFAKK0lmIHlvdSBpbnZva2UgXGZCZ2NvdlxmUiB3aXRoIG11bHRpcGxlIGlucHV0IGZpbGVzLCB0aGUKK2NvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGlucHV0IGZpbGUgYXJlIHN1bW1lZC4gIFR5cGljYWxseSB5b3Ugd291bGQKK2ludm9rZSBpdCB3aXRoIHRoZSBzYW1lIGxpc3Qgb2YgZmlsZXMgYXMgdGhlIGZpbmFsIGxpbmsgb2YgeW91ciBleGVjdXRhYmxlLgorLlBQCitUaGUgXGZJLmdjb3ZcZlIgZmlsZXMgY29udGFpbiB0aGUgXGZCOlxmUiBzZXBhcmF0ZWQgZmllbGRzIGFsb25nIHdpdGgKK3Byb2dyYW0gc291cmNlIGNvZGUuICBUaGUgZm9ybWF0IGlzCisuUFAKKy5WYiAxCitcJiAgICAgICAgPGV4ZWN1dGlvbl9jb3VudD46PGxpbmVfbnVtYmVyPjo8c291cmNlIGxpbmUgdGV4dD4KKy5WZQorLlBQCitBZGRpdGlvbmFsIGJsb2NrIGluZm9ybWF0aW9uIG1heSBzdWNjZWVkIGVhY2ggbGluZSwgd2hlbiByZXF1ZXN0ZWQgYnkKK2NvbW1hbmQgbGluZSBvcHRpb24uICBUaGUgXGZJZXhlY3V0aW9uX2NvdW50XGZSIGlzIFxmQlwtXGZSIGZvciBsaW5lcworY29udGFpbmluZyBubyBjb2RlLiAgVW5leGVjdXRlZCBsaW5lcyBhcmUgbWFya2VkIFxmQiMjIyMjXGZSIG9yCitcJlxmQj09PT1cZlIsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXkgYXJlIHJlYWNoYWJsZSBieQorbm9uLWV4Y2VwdGlvbmFsIHBhdGhzIG9yIG9ubHkgZXhjZXB0aW9uYWwgcGF0aHMgc3VjaCBhcyBcKihDKyBleGNlcHRpb24KK2hhbmRsZXJzLCByZXNwZWN0aXZlbHkuCisuUFAKK1NvbWUgbGluZXMgb2YgaW5mb3JtYXRpb24gYXQgdGhlIHN0YXJ0IGhhdmUgXGZJbGluZV9udW1iZXJcZlIgb2YgemVyby4KK1RoZXNlIHByZWFtYmxlIGxpbmVzIGFyZSBvZiB0aGUgZm9ybQorLlBQCisuVmIgMQorXCYgICAgICAgIFwtOjA6PHRhZz46PHZhbHVlPgorLlZlCisuUFAKK1RoZSBvcmRlcmluZyBhbmQgbnVtYmVyIG9mIHRoZXNlIHByZWFtYmxlIGxpbmVzIHdpbGwgYmUgYXVnbWVudGVkIGFzCitcJlxmQmdjb3ZcZlIgZGV2ZWxvcG1lbnQgcHJvZ3Jlc3NlcyBcLVwtXC0gZG8gbm90IHJlbHkgb24gdGhlbSByZW1haW5pbmcKK3VuY2hhbmdlZC4gIFVzZSBcZkl0YWdcZlIgdG8gbG9jYXRlIGEgcGFydGljdWxhciBwcmVhbWJsZSBsaW5lLgorLlBQCitUaGUgYWRkaXRpb25hbCBibG9jayBpbmZvcm1hdGlvbiBpcyBvZiB0aGUgZm9ybQorLlBQCisuVmIgMQorXCYgICAgICAgIDx0YWc+IDxpbmZvcm1hdGlvbj4KKy5WZQorLlBQCitUaGUgXGZJaW5mb3JtYXRpb25cZlIgaXMgaHVtYW4gcmVhZGFibGUsIGJ1dCBkZXNpZ25lZCB0byBiZSBzaW1wbGUKK2Vub3VnaCBmb3IgbWFjaGluZSBwYXJzaW5nIHRvby4KKy5QUAorV2hlbiBwcmludGluZyBwZXJjZW50YWdlcywgMCUgYW5kIDEwMCUgYXJlIG9ubHkgcHJpbnRlZCB3aGVuIHRoZSB2YWx1ZXMKK2FyZSBcZklleGFjdGx5XGZSIDAlIGFuZCAxMDAlIHJlc3BlY3RpdmVseS4gIE90aGVyIHZhbHVlcyB3aGljaCB3b3VsZAorY29udmVudGlvbmFsbHkgYmUgcm91bmRlZCB0byAwJSBvciAxMDAlIGFyZSBpbnN0ZWFkIHByaW50ZWQgYXMgdGhlCituZWFyZXN0IG5vbi1ib3VuZGFyeSB2YWx1ZS4KKy5QUAorV2hlbiB1c2luZyBcZkJnY292XGZSLCB5b3UgbXVzdCBmaXJzdCBjb21waWxlIHlvdXIgcHJvZ3JhbSB3aXRoIHR3bworc3BlY2lhbCBccy0xR0NDXHMwIG9wdGlvbnM6IFxmQlwtZnByb2ZpbGVcLWFyY3MgXC1mdGVzdFwtY292ZXJhZ2VcZlIuCitUaGlzIHRlbGxzIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG5lZWRlZCBieQorZ2NvdiAoYmFzaWNhbGx5IGEgZmxvdyBncmFwaCBvZiB0aGUgcHJvZ3JhbSkgYW5kIGFsc28gaW5jbHVkZXMKK2FkZGl0aW9uYWwgY29kZSBpbiB0aGUgb2JqZWN0IGZpbGVzIGZvciBnZW5lcmF0aW5nIHRoZSBleHRyYSBwcm9maWxpbmcKK2luZm9ybWF0aW9uIG5lZWRlZCBieSBnY292LiAgVGhlc2UgYWRkaXRpb25hbCBmaWxlcyBhcmUgcGxhY2VkIGluIHRoZQorZGlyZWN0b3J5IHdoZXJlIHRoZSBvYmplY3QgZmlsZSBpcyBsb2NhdGVkLgorLlBQCitSdW5uaW5nIHRoZSBwcm9ncmFtIHdpbGwgY2F1c2UgcHJvZmlsZSBvdXRwdXQgdG8gYmUgZ2VuZXJhdGVkLiAgRm9yIGVhY2gKK3NvdXJjZSBmaWxlIGNvbXBpbGVkIHdpdGggXGZCXC1mcHJvZmlsZVwtYXJjc1xmUiwgYW4gYWNjb21wYW55aW5nCitcJlxmSS5nY2RhXGZSIGZpbGUgd2lsbCBiZSBwbGFjZWQgaW4gdGhlIG9iamVjdCBmaWxlIGRpcmVjdG9yeS4KKy5QUAorUnVubmluZyBcZkJnY292XGZSIHdpdGggeW91ciBwcm9ncmFtJ3Mgc291cmNlIGZpbGUgbmFtZXMgYXMgYXJndW1lbnRzCit3aWxsIG5vdyBwcm9kdWNlIGEgbGlzdGluZyBvZiB0aGUgY29kZSBhbG9uZyB3aXRoIGZyZXF1ZW5jeSBvZiBleGVjdXRpb24KK2ZvciBlYWNoIGxpbmUuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBwcm9ncmFtIGlzIGNhbGxlZCBcZkl0bXAuY1xmUiwgdGhpcworaXMgd2hhdCB5b3Ugc2VlIHdoZW4geW91IHVzZSB0aGUgYmFzaWMgXGZCZ2NvdlxmUiBmYWNpbGl0eToKKy5QUAorLlZiIDUKK1wmICAgICAgICAkIGdjYyBcLWZwcm9maWxlXC1hcmNzIFwtZnRlc3RcLWNvdmVyYWdlIHRtcC5jCitcJiAgICAgICAgJCBhLm91dAorXCYgICAgICAgICQgZ2NvdiB0bXAuYworXCYgICAgICAgIDkwLjAwJSBvZiAxMCBzb3VyY2UgbGluZXMgZXhlY3V0ZWQgaW4gZmlsZSB0bXAuYworXCYgICAgICAgIENyZWF0aW5nIHRtcC5jLmdjb3YuCisuVmUKKy5QUAorVGhlIGZpbGUgXGZJdG1wLmMuZ2NvdlxmUiBjb250YWlucyBvdXRwdXQgZnJvbSBcZkJnY292XGZSLgorSGVyZSBpcyBhIHNhbXBsZToKKy5QUAorLlZiIDEwCitcJiAgICAgICAgICAgICAgICBcLTogICAgMDpTb3VyY2U6dG1wLmMKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAwOkdyYXBoOnRtcC5nY25vCitcJiAgICAgICAgICAgICAgICBcLTogICAgMDpEYXRhOnRtcC5nY2RhCitcJiAgICAgICAgICAgICAgICBcLTogICAgMDpSdW5zOjEKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAwOlByb2dyYW1zOjEKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAxOiNpbmNsdWRlIDxzdGRpby5oPgorXCYgICAgICAgICAgICAgICAgXC06ICAgIDI6CitcJiAgICAgICAgICAgICAgICBcLTogICAgMzppbnQgbWFpbiAodm9pZCkKK1wmICAgICAgICAgICAgICAgIDE6ICAgIDQ6eworXCYgICAgICAgICAgICAgICAgMTogICAgNTogIGludCBpLCB0b3RhbDsKK1wmICAgICAgICAgICAgICAgIFwtOiAgICA2OgorXCYgICAgICAgICAgICAgICAgMTogICAgNzogIHRvdGFsID0gMDsKK1wmICAgICAgICAgICAgICAgIFwtOiAgICA4OgorXCYgICAgICAgICAgICAgICAxMTogICAgOTogIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorXCYgICAgICAgICAgICAgICAxMDogICAxMDogICAgdG90YWwgKz0gaTsKK1wmICAgICAgICAgICAgICAgIFwtOiAgIDExOgorXCYgICAgICAgICAgICAgICAgMTogICAxMjogIGlmICh0b3RhbCAhPSA0NSkKK1wmICAgICAgICAgICAgIyMjIyM6ICAgMTM6ICAgIHByaW50ZiAoIkZhaWx1cmVcZW4iKTsKK1wmICAgICAgICAgICAgICAgIFwtOiAgIDE0OiAgZWxzZQorXCYgICAgICAgICAgICAgICAgMTogICAxNTogICAgcHJpbnRmICgiU3VjY2Vzc1xlbiIpOworXCYgICAgICAgICAgICAgICAgMTogICAxNjogIHJldHVybiAwOworXCYgICAgICAgICAgICAgICAgXC06ICAgMTc6fQorLlZlCisuUFAKK1doZW4geW91IHVzZSB0aGUgXGZCXC1hXGZSIG9wdGlvbiwgeW91IHdpbGwgZ2V0IGluZGl2aWR1YWwgYmxvY2sKK2NvdW50cywgYW5kIHRoZSBvdXRwdXQgbG9va3MgbGlrZSB0aGlzOgorLlBQCisuVmIgMTAKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAwOlNvdXJjZTp0bXAuYworXCYgICAgICAgICAgICAgICAgXC06ICAgIDA6R3JhcGg6dG1wLmdjbm8KK1wmICAgICAgICAgICAgICAgIFwtOiAgICAwOkRhdGE6dG1wLmdjZGEKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAwOlJ1bnM6MQorXCYgICAgICAgICAgICAgICAgXC06ICAgIDA6UHJvZ3JhbXM6MQorXCYgICAgICAgICAgICAgICAgXC06ICAgIDE6I2luY2x1ZGUgPHN0ZGlvLmg+CitcJiAgICAgICAgICAgICAgICBcLTogICAgMjoKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAzOmludCBtYWluICh2b2lkKQorXCYgICAgICAgICAgICAgICAgMTogICAgNDp7CitcJiAgICAgICAgICAgICAgICAxOiAgICA0XC1ibG9jayAgMAorXCYgICAgICAgICAgICAgICAgMTogICAgNTogIGludCBpLCB0b3RhbDsKK1wmICAgICAgICAgICAgICAgIFwtOiAgICA2OgorXCYgICAgICAgICAgICAgICAgMTogICAgNzogIHRvdGFsID0gMDsKK1wmICAgICAgICAgICAgICAgIFwtOiAgICA4OgorXCYgICAgICAgICAgICAgICAxMTogICAgOTogIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorXCYgICAgICAgICAgICAgICAxMTogICAgOVwtYmxvY2sgIDAKK1wmICAgICAgICAgICAgICAgMTA6ICAgMTA6ICAgIHRvdGFsICs9IGk7CitcJiAgICAgICAgICAgICAgIDEwOiAgIDEwXC1ibG9jayAgMAorXCYgICAgICAgICAgICAgICAgXC06ICAgMTE6CitcJiAgICAgICAgICAgICAgICAxOiAgIDEyOiAgaWYgKHRvdGFsICE9IDQ1KQorXCYgICAgICAgICAgICAgICAgMTogICAxMlwtYmxvY2sgIDAKK1wmICAgICAgICAgICAgIyMjIyM6ICAgMTM6ICAgIHByaW50ZiAoIkZhaWx1cmVcZW4iKTsKK1wmICAgICAgICAgICAgJCQkJCQ6ICAgMTNcLWJsb2NrICAwCitcJiAgICAgICAgICAgICAgICBcLTogICAxNDogIGVsc2UKK1wmICAgICAgICAgICAgICAgIDE6ICAgMTU6ICAgIHByaW50ZiAoIlN1Y2Nlc3NcZW4iKTsKK1wmICAgICAgICAgICAgICAgIDE6ICAgMTVcLWJsb2NrICAwCitcJiAgICAgICAgICAgICAgICAxOiAgIDE2OiAgcmV0dXJuIDA7CitcJiAgICAgICAgICAgICAgICAxOiAgIDE2XC1ibG9jayAgMAorXCYgICAgICAgICAgICAgICAgXC06ICAgMTc6fQorLlZlCisuUFAKK0luIHRoaXMgbW9kZSwgZWFjaCBiYXNpYyBibG9jayBpcyBvbmx5IHNob3duIG9uIG9uZSBsaW5lIFwqKC0tIHRoZSBsYXN0CitsaW5lIG9mIHRoZSBibG9jay4gIEEgbXVsdGktbGluZSBibG9jayB3aWxsIG9ubHkgY29udHJpYnV0ZSB0byB0aGUKK2V4ZWN1dGlvbiBjb3VudCBvZiB0aGF0IGxhc3QgbGluZSwgYW5kIG90aGVyIGxpbmVzIHdpbGwgbm90IGJlIHNob3duCit0byBjb250YWluIGNvZGUsIHVubGVzcyBwcmV2aW91cyBibG9ja3MgZW5kIG9uIHRob3NlIGxpbmVzLgorVGhlIHRvdGFsIGV4ZWN1dGlvbiBjb3VudCBvZiBhIGxpbmUgaXMgc2hvd24gYW5kIHN1YnNlcXVlbnQgbGluZXMgc2hvdwordGhlIGV4ZWN1dGlvbiBjb3VudHMgZm9yIGluZGl2aWR1YWwgYmxvY2tzIHRoYXQgZW5kIG9uIHRoYXQgbGluZS4gIEFmdGVyIGVhY2gKK2Jsb2NrLCB0aGUgYnJhbmNoIGFuZCBjYWxsIGNvdW50cyBvZiB0aGUgYmxvY2sgd2lsbCBiZSBzaG93biwgaWYgdGhlCitcJlxmQlwtYlxmUiBvcHRpb24gaXMgZ2l2ZW4uCisuUFAKK0JlY2F1c2Ugb2YgdGhlIHdheSBccy0xR0NDXHMwIGluc3RydW1lbnRzIGNhbGxzLCBhIGNhbGwgY291bnQgY2FuIGJlIHNob3duCithZnRlciBhIGxpbmUgd2l0aCBubyBpbmRpdmlkdWFsIGJsb2Nrcy4KK0FzIHlvdSBjYW4gc2VlLCBsaW5lIDEzIGNvbnRhaW5zIGEgYmFzaWMgYmxvY2sgdGhhdCB3YXMgbm90IGV4ZWN1dGVkLgorLlBQCitXaGVuIHlvdSB1c2UgdGhlIFxmQlwtYlxmUiBvcHRpb24sIHlvdXIgb3V0cHV0IGxvb2tzIGxpa2UgdGhpczoKKy5QUAorLlZiIDYKK1wmICAgICAgICAkIGdjb3YgXC1iIHRtcC5jCitcJiAgICAgICAgOTAuMDAlIG9mIDEwIHNvdXJjZSBsaW5lcyBleGVjdXRlZCBpbiBmaWxlIHRtcC5jCitcJiAgICAgICAgODAuMDAlIG9mIDUgYnJhbmNoZXMgZXhlY3V0ZWQgaW4gZmlsZSB0bXAuYworXCYgICAgICAgIDgwLjAwJSBvZiA1IGJyYW5jaGVzIHRha2VuIGF0IGxlYXN0IG9uY2UgaW4gZmlsZSB0bXAuYworXCYgICAgICAgIDUwLjAwJSBvZiAyIGNhbGxzIGV4ZWN1dGVkIGluIGZpbGUgdG1wLmMKK1wmICAgICAgICBDcmVhdGluZyB0bXAuYy5nY292LgorLlZlCisuUFAKK0hlcmUgaXMgYSBzYW1wbGUgb2YgYSByZXN1bHRpbmcgXGZJdG1wLmMuZ2NvdlxmUiBmaWxlOgorLlBQCisuVmIgMTAKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAwOlNvdXJjZTp0bXAuYworXCYgICAgICAgICAgICAgICAgXC06ICAgIDA6R3JhcGg6dG1wLmdjbm8KK1wmICAgICAgICAgICAgICAgIFwtOiAgICAwOkRhdGE6dG1wLmdjZGEKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAwOlJ1bnM6MQorXCYgICAgICAgICAgICAgICAgXC06ICAgIDA6UHJvZ3JhbXM6MQorXCYgICAgICAgICAgICAgICAgXC06ICAgIDE6I2luY2x1ZGUgPHN0ZGlvLmg+CitcJiAgICAgICAgICAgICAgICBcLTogICAgMjoKK1wmICAgICAgICAgICAgICAgIFwtOiAgICAzOmludCBtYWluICh2b2lkKQorXCYgICAgICAgIGZ1bmN0aW9uIG1haW4gY2FsbGVkIDEgcmV0dXJuZWQgMSBibG9ja3MgZXhlY3V0ZWQgNzUlCitcJiAgICAgICAgICAgICAgICAxOiAgICA0OnsKK1wmICAgICAgICAgICAgICAgIDE6ICAgIDU6ICBpbnQgaSwgdG90YWw7CitcJiAgICAgICAgICAgICAgICBcLTogICAgNjoKK1wmICAgICAgICAgICAgICAgIDE6ICAgIDc6ICB0b3RhbCA9IDA7CitcJiAgICAgICAgICAgICAgICBcLTogICAgODoKK1wmICAgICAgICAgICAgICAgMTE6ICAgIDk6ICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKK1wmICAgICAgICBicmFuY2ggIDAgdGFrZW4gOTElIChmYWxsdGhyb3VnaCkKK1wmICAgICAgICBicmFuY2ggIDEgdGFrZW4gOSUKK1wmICAgICAgICAgICAgICAgMTA6ICAgMTA6ICAgIHRvdGFsICs9IGk7CitcJiAgICAgICAgICAgICAgICBcLTogICAxMToKK1wmICAgICAgICAgICAgICAgIDE6ICAgMTI6ICBpZiAodG90YWwgIT0gNDUpCitcJiAgICAgICAgYnJhbmNoICAwIHRha2VuIDAlIChmYWxsdGhyb3VnaCkKK1wmICAgICAgICBicmFuY2ggIDEgdGFrZW4gMTAwJQorXCYgICAgICAgICAgICAjIyMjIzogICAxMzogICAgcHJpbnRmICgiRmFpbHVyZVxlbiIpOworXCYgICAgICAgIGNhbGwgICAgMCBuZXZlciBleGVjdXRlZAorXCYgICAgICAgICAgICAgICAgXC06ICAgMTQ6ICBlbHNlCitcJiAgICAgICAgICAgICAgICAxOiAgIDE1OiAgICBwcmludGYgKCJTdWNjZXNzXGVuIik7CitcJiAgICAgICAgY2FsbCAgICAwIGNhbGxlZCAxIHJldHVybmVkIDEwMCUKK1wmICAgICAgICAgICAgICAgIDE6ICAgMTY6ICByZXR1cm4gMDsKK1wmICAgICAgICAgICAgICAgIFwtOiAgIDE3On0KKy5WZQorLlBQCitGb3IgZWFjaCBmdW5jdGlvbiwgYSBsaW5lIGlzIHByaW50ZWQgc2hvd2luZyBob3cgbWFueSB0aW1lcyB0aGUgZnVuY3Rpb24KK2lzIGNhbGxlZCwgaG93IG1hbnkgdGltZXMgaXQgcmV0dXJucyBhbmQgd2hhdCBwZXJjZW50YWdlIG9mIHRoZQorZnVuY3Rpb24ncyBibG9ja3Mgd2VyZSBleGVjdXRlZC4KKy5QUAorRm9yIGVhY2ggYmFzaWMgYmxvY2ssIGEgbGluZSBpcyBwcmludGVkIGFmdGVyIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGJhc2ljCitibG9jayBkZXNjcmliaW5nIHRoZSBicmFuY2ggb3IgY2FsbCB0aGF0IGVuZHMgdGhlIGJhc2ljIGJsb2NrLiAgVGhlcmUgY2FuCitiZSBtdWx0aXBsZSBicmFuY2hlcyBhbmQgY2FsbHMgbGlzdGVkIGZvciBhIHNpbmdsZSBzb3VyY2UgbGluZSBpZiB0aGVyZQorYXJlIG11bHRpcGxlIGJhc2ljIGJsb2NrcyB0aGF0IGVuZCBvbiB0aGF0IGxpbmUuICBJbiB0aGlzIGNhc2UsIHRoZQorYnJhbmNoZXMgYW5kIGNhbGxzIGFyZSBlYWNoIGdpdmVuIGEgbnVtYmVyLiAgVGhlcmUgaXMgbm8gc2ltcGxlIHdheSB0byBtYXAKK3RoZXNlIGJyYW5jaGVzIGFuZCBjYWxscyBiYWNrIHRvIHNvdXJjZSBjb25zdHJ1Y3RzLiAgSW4gZ2VuZXJhbCwgdGhvdWdoLAordGhlIGxvd2VzdCBudW1iZXJlZCBicmFuY2ggb3IgY2FsbCB3aWxsIGNvcnJlc3BvbmQgdG8gdGhlIGxlZnRtb3N0IGNvbnN0cnVjdAorb24gdGhlIHNvdXJjZSBsaW5lLgorLlBQCitGb3IgYSBicmFuY2gsIGlmIGl0IHdhcyBleGVjdXRlZCBhdCBsZWFzdCBvbmNlLCB0aGVuIGEgcGVyY2VudGFnZQoraW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBicmFuY2ggd2FzIHRha2VuIGRpdmlkZWQgYnkgdGhlCitudW1iZXIgb2YgdGltZXMgdGhlIGJyYW5jaCB3YXMgZXhlY3V0ZWQgd2lsbCBiZSBwcmludGVkLiAgT3RoZXJ3aXNlLCB0aGUKK21lc3NhZ2UgXCooTCJuZXZlciBleGVjdXRlZFwqKFIiIGlzIHByaW50ZWQuCisuUFAKK0ZvciBhIGNhbGwsIGlmIGl0IHdhcyBleGVjdXRlZCBhdCBsZWFzdCBvbmNlLCB0aGVuIGEgcGVyY2VudGFnZQoraW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjYWxsIHJldHVybmVkIGRpdmlkZWQgYnkgdGhlIG51bWJlcgorb2YgdGltZXMgdGhlIGNhbGwgd2FzIGV4ZWN1dGVkIHdpbGwgYmUgcHJpbnRlZC4gIFRoaXMgd2lsbCB1c3VhbGx5IGJlCisxMDAlLCBidXQgbWF5IGJlIGxlc3MgZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbGwgXGYoQ1dcKihDYGV4aXRcKihDJ1xmUiBvciBcZihDV1wqKENgbG9uZ2ptcFwqKEMnXGZSLAorYW5kIHRodXMgbWF5IG5vdCByZXR1cm4gZXZlcnkgdGltZSB0aGV5IGFyZSBjYWxsZWQuCisuUFAKK1RoZSBleGVjdXRpb24gY291bnRzIGFyZSBjdW11bGF0aXZlLiAgSWYgdGhlIGV4YW1wbGUgcHJvZ3JhbSB3ZXJlCitleGVjdXRlZCBhZ2FpbiB3aXRob3V0IHJlbW92aW5nIHRoZSBcZkkuZ2NkYVxmUiBmaWxlLCB0aGUgY291bnQgZm9yIHRoZQorbnVtYmVyIG9mIHRpbWVzIGVhY2ggbGluZSBpbiB0aGUgc291cmNlIHdhcyBleGVjdXRlZCB3b3VsZCBiZSBhZGRlZCB0bwordGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHJ1bihzKS4gIFRoaXMgaXMgcG90ZW50aWFsbHkgdXNlZnVsIGluCitzZXZlcmFsIHdheXMuICBGb3IgZXhhbXBsZSwgaXQgY291bGQgYmUgdXNlZCB0byBhY2N1bXVsYXRlIGRhdGEgb3ZlciBhCitudW1iZXIgb2YgcHJvZ3JhbSBydW5zIGFzIHBhcnQgb2YgYSB0ZXN0IHZlcmlmaWNhdGlvbiBzdWl0ZSwgb3IgdG8KK3Byb3ZpZGUgbW9yZSBhY2N1cmF0ZSBsb25nLXRlcm0gaW5mb3JtYXRpb24gb3ZlciBhIGxhcmdlIG51bWJlciBvZgorcHJvZ3JhbSBydW5zLgorLlBQCitUaGUgZGF0YSBpbiB0aGUgXGZJLmdjZGFcZlIgZmlsZXMgaXMgc2F2ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBwcm9ncmFtCitleGl0cy4gIEZvciBlYWNoIHNvdXJjZSBmaWxlIGNvbXBpbGVkIHdpdGggXGZCXC1mcHJvZmlsZVwtYXJjc1xmUiwgdGhlCitwcm9maWxpbmcgY29kZSBmaXJzdCBhdHRlbXB0cyB0byByZWFkIGluIGFuIGV4aXN0aW5nIFxmSS5nY2RhXGZSIGZpbGU7IGlmCit0aGUgZmlsZSBkb2Vzbid0IG1hdGNoIHRoZSBleGVjdXRhYmxlIChkaWZmZXJpbmcgbnVtYmVyIG9mIGJhc2ljIGJsb2NrCitjb3VudHMpIGl0IHdpbGwgaWdub3JlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIEl0IHRoZW4gYWRkcyBpbiB0aGUKK25ldyBleGVjdXRpb24gY291bnRzIGFuZCBmaW5hbGx5IHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgZmlsZS4KKy5TUyAiVXNpbmcgXGZCZ2NvdlxmUCB3aXRoIFxzLTFHQ0NcczAgT3B0aW1pemF0aW9uIgorLklYIFN1YnNlY3Rpb24gIlVzaW5nIGdjb3Ygd2l0aCBHQ0MgT3B0aW1pemF0aW9uIgorSWYgeW91IHBsYW4gdG8gdXNlIFxmQmdjb3ZcZlIgdG8gaGVscCBvcHRpbWl6ZSB5b3VyIGNvZGUsIHlvdSBtdXN0CitmaXJzdCBjb21waWxlIHlvdXIgcHJvZ3JhbSB3aXRoIHR3byBzcGVjaWFsIFxzLTFHQ0NcczAgb3B0aW9uczoKK1wmXGZCXC1mcHJvZmlsZVwtYXJjcyBcLWZ0ZXN0XC1jb3ZlcmFnZVxmUi4gIEFzaWRlIGZyb20gdGhhdCwgeW91IGNhbiB1c2UgYW55CitvdGhlciBccy0xR0NDXHMwIG9wdGlvbnM7IGJ1dCBpZiB5b3Ugd2FudCB0byBwcm92ZSB0aGF0IGV2ZXJ5IHNpbmdsZSBsaW5lCitpbiB5b3VyIHByb2dyYW0gd2FzIGV4ZWN1dGVkLCB5b3Ugc2hvdWxkIG5vdCBjb21waWxlIHdpdGggb3B0aW1pemF0aW9uCithdCB0aGUgc2FtZSB0aW1lLiAgT24gc29tZSBtYWNoaW5lcyB0aGUgb3B0aW1pemVyIGNhbiBlbGltaW5hdGUgc29tZQorc2ltcGxlIGNvZGUgbGluZXMgYnkgY29tYmluaW5nIHRoZW0gd2l0aCBvdGhlciBsaW5lcy4gIEZvciBleGFtcGxlLCBjb2RlCitsaWtlIHRoaXM6CisuUFAKKy5WYiA0CitcJiAgICAgICAgaWYgKGEgIT0gYikKK1wmICAgICAgICAgIGMgPSAxOworXCYgICAgICAgIGVsc2UKK1wmICAgICAgICAgIGMgPSAwOworLlZlCisuUFAKK2NhbiBiZSBjb21waWxlZCBpbnRvIG9uZSBpbnN0cnVjdGlvbiBvbiBzb21lIG1hY2hpbmVzLiAgSW4gdGhpcyBjYXNlLAordGhlcmUgaXMgbm8gd2F5IGZvciBcZkJnY292XGZSIHRvIGNhbGN1bGF0ZSBzZXBhcmF0ZSBleGVjdXRpb24gY291bnRzCitmb3IgZWFjaCBsaW5lIGJlY2F1c2UgdGhlcmUgaXNuJ3Qgc2VwYXJhdGUgY29kZSBmb3IgZWFjaCBsaW5lLiAgSGVuY2UKK3RoZSBcZkJnY292XGZSIG91dHB1dCBsb29rcyBsaWtlIHRoaXMgaWYgeW91IGNvbXBpbGVkIHRoZSBwcm9ncmFtIHdpdGgKK29wdGltaXphdGlvbjoKKy5QUAorLlZiIDQKK1wmICAgICAgICAgICAgICAxMDA6ICAgMTI6aWYgKGEgIT0gYikKK1wmICAgICAgICAgICAgICAxMDA6ICAgMTM6ICBjID0gMTsKK1wmICAgICAgICAgICAgICAxMDA6ICAgMTQ6ZWxzZQorXCYgICAgICAgICAgICAgIDEwMDogICAxNTogIGMgPSAwOworLlZlCisuUFAKK1RoZSBvdXRwdXQgc2hvd3MgdGhhdCB0aGlzIGJsb2NrIG9mIGNvZGUsIGNvbWJpbmVkIGJ5IG9wdGltaXphdGlvbiwKK2V4ZWN1dGVkIDEwMCB0aW1lcy4gIEluIG9uZSBzZW5zZSB0aGlzIHJlc3VsdCBpcyBjb3JyZWN0LCBiZWNhdXNlIHRoZXJlCit3YXMgb25seSBvbmUgaW5zdHJ1Y3Rpb24gcmVwcmVzZW50aW5nIGFsbCBmb3VyIG9mIHRoZXNlIGxpbmVzLiAgSG93ZXZlciwKK3RoZSBvdXRwdXQgZG9lcyBub3QgaW5kaWNhdGUgaG93IG1hbnkgdGltZXMgdGhlIHJlc3VsdCB3YXMgMCBhbmQgaG93CittYW55IHRpbWVzIHRoZSByZXN1bHQgd2FzIDEuCisuUFAKK0lubGluZWFibGUgZnVuY3Rpb25zIGNhbiBjcmVhdGUgdW5leHBlY3RlZCBsaW5lIGNvdW50cy4gIExpbmUgY291bnRzIGFyZQorc2hvd24gZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgaW5saW5lYWJsZSBmdW5jdGlvbiwgYnV0IHdoYXQgaXMgc2hvd24KK2RlcGVuZHMgb24gd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGlubGluZWQsIG9yIGlmIGl0IGlzIG5vdCBpbmxpbmVkIGF0IGFsbC4KKy5QUAorSWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVkLCB0aGUgY29tcGlsZXIgbXVzdCBlbWl0IGFuIG91dCBvZiBsaW5lCitjb3B5IG9mIHRoZSBmdW5jdGlvbiwgaW4gYW55IG9iamVjdCBmaWxlIHRoYXQgbmVlZHMgaXQuICBJZgorXCZcZklmaWxlQS5vXGZSIGFuZCBcZklmaWxlQi5vXGZSIGJvdGggY29udGFpbiBvdXQgb2YgbGluZSBib2RpZXMgb2YgYQorcGFydGljdWxhciBpbmxpbmVhYmxlIGZ1bmN0aW9uLCB0aGV5IHdpbGwgYWxzbyBib3RoIGNvbnRhaW4gY292ZXJhZ2UKK2NvdW50cyBmb3IgdGhhdCBmdW5jdGlvbi4gIFdoZW4gXGZJZmlsZUEub1xmUiBhbmQgXGZJZmlsZUIub1xmUiBhcmUKK2xpbmtlZCB0b2dldGhlciwgdGhlIGxpbmtlciB3aWxsLCBvbiBtYW55IHN5c3RlbXMsIHNlbGVjdCBvbmUgb2YgdGhvc2UKK291dCBvZiBsaW5lIGJvZGllcyBmb3IgYWxsIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24sIGFuZCByZW1vdmUgb3IgaWdub3JlCit0aGUgb3RoZXIuICBVbmZvcnR1bmF0ZWx5LCBpdCB3aWxsIG5vdCByZW1vdmUgdGhlIGNvdmVyYWdlIGNvdW50ZXJzIGZvcgordGhlIHVudXNlZCBmdW5jdGlvbiBib2R5LiAgSGVuY2Ugd2hlbiBpbnN0cnVtZW50ZWQsIGFsbCBidXQgb25lIHVzZSBvZgordGhhdCBmdW5jdGlvbiB3aWxsIHNob3cgemVybyBjb3VudHMuCisuUFAKK0lmIHRoZSBmdW5jdGlvbiBpcyBpbmxpbmVkIGluIHNldmVyYWwgcGxhY2VzLCB0aGUgYmxvY2sgc3RydWN0dXJlIGluCitlYWNoIGxvY2F0aW9uIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZS4gIEZvciBpbnN0YW5jZSwgYSBjb25kaXRpb24gbWlnaHQKK25vdyBiZSBjYWxjdWxhYmxlIGF0IGNvbXBpbGUgdGltZSBpbiBzb21lIGluc3RhbmNlcy4gIEJlY2F1c2UgdGhlCitjb3ZlcmFnZSBvZiBhbGwgdGhlIHVzZXMgb2YgdGhlIGlubGluZSBmdW5jdGlvbiB3aWxsIGJlIHNob3duIGZvciB0aGUKK3NhbWUgc291cmNlIGxpbmVzLCB0aGUgbGluZSBjb3VudHMgdGhlbXNlbHZlcyBtaWdodCBzZWVtIGluY29uc2lzdGVudC4KKy5QUAorTG9uZy1ydW5uaW5nIGFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoZSBcZihDV1wqKENgX2djb3ZfcmVzZXRcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYF9nY292X2R1bXBcKihDJ1xmUgorZmFjaWxpdGllcyB0byByZXN0cmljdCBwcm9maWxlIGNvbGxlY3Rpb24gdG8gdGhlIHByb2dyYW0gcmVnaW9uIG9mCitpbnRlcmVzdC4gQ2FsbGluZyBcZihDV1wqKENgX2djb3ZfcmVzZXQodm9pZClcKihDJ1xmUiB3aWxsIGNsZWFyIGFsbCBwcm9maWxlIGNvdW50ZXJzCit0byB6ZXJvLCBhbmQgY2FsbGluZyBcZihDV1wqKENgX2djb3ZfZHVtcCh2b2lkKVwqKEMnXGZSIHdpbGwgY2F1c2UgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24KK2NvbGxlY3RlZCBhdCB0aGF0IHBvaW50IHRvIGJlIGR1bXBlZCB0byBcZkkuZ2NkYVxmUiBvdXRwdXQgZmlsZXMuCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitcJlxmSWdwbFxmUlx8KDcpLCBcZklnZmRsXGZSXHwoNyksIFxmSWZzZlwtZnVuZGluZ1xmUlx8KDcpLCBcZklnY2NcZlJcfCgxKSBhbmQgdGhlIEluZm8gZW50cnkgZm9yIFxmSWdjY1xmUi4KKy5TSCAiQ09QWVJJR0hUIgorLklYIEhlYWRlciAiQ09QWVJJR0hUIgorQ29weXJpZ2h0IChjKSAxOTk2XC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIFwqKEwiXHMtMUdOVVxzMCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXCooUiIgYW5kIFwqKEwiRnVuZGluZworRnJlZSBTb2Z0d2FyZVwqKFIiLCB0aGUgRnJvbnQtQ292ZXIgdGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aAordGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgKGIpIChzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzCitpbmNsdWRlZCBpbiB0aGUgXGZJZ2ZkbFxmUlx8KDcpIG1hbiBwYWdlLgorLlBQCisoYSkgVGhlIFxzLTFGU0ZcczAncyBGcm9udC1Db3ZlciBUZXh0IGlzOgorLlBQCisuVmIgMQorXCYgICAgIEEgR05VIE1hbnVhbAorLlZlCisuUFAKKyhiKSBUaGUgXHMtMUZTRlxzMCdzIEJhY2stQ292ZXIgVGV4dCBpczoKKy5QUAorLlZiIDMKK1wmICAgICBZb3UgaGF2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIG1vZGlmeSB0aGlzIEdOVSBNYW51YWwsIGxpa2UgR05VCitcJiAgICAgc29mdHdhcmUuICBDb3BpZXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gcmFpc2UKK1wmICAgICBmdW5kcyBmb3IgR05VIGRldmVsb3BtZW50LgorLlZlCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtZ2RiLjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtZ2RiLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2YzAyYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1nZGIuMQpAQCAtMCwwICsxLDQwMyBAQAorLlwiIENvcHlyaWdodCAoQykgMTk5MS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlwiIFNlZSBzZWN0aW9uIENPUFlJTkcgZm9yIGNvbmRpdGlvbnMgZm9yIHJlZGlzdHJpYnV0aW9uCisuXCIgJElkJAorLlRIIGdkYiAxICIyMm1heTIwMDIiICJHTlUgVG9vbHMiICJHTlUgVG9vbHMiCisuU0ggTkFNRQorZ2RiIFwtIFRoZSBHTlUgRGVidWdnZXIKKy5TSCBTWU5PUFNJUworLm5hCisuVFAKKy5CIGdkYgorLlJCICJbXHwiIFwtaGVscCAiXHxdIgorLlJCICJbXHwiIFwtbmggIlx8XSIKKy5SQiAiW1x8IiBcLW54ICJcfF0iCisuUkIgIltcfCIgXC1xICJcfF0iCisuUkIgIltcfCIgXC1iYXRjaCAiXHxdIgorLlJCICJbXHwiIFwtY2Q9XGMKKy5JIGRpclxjCitcfF0KKy5SQiAiW1x8IiBcLWYgIlx8XSIKKy5SQiAiW1x8IiAiXC1iXCAiXGMKKy5JUiBicHMgIlx8XSIKKy5SQiAiW1x8IiAiXC10dHk9IlxjCisuSVIgZGV2ICJcfF0iCisuUkIgIltcfCIgIlwtcyAiXGMKKy5JIHN5bWZpbGVcYworXCZcfF0KKy5SQiAiW1x8IiAiXC1lICJcYworLkkgcHJvZ1xjCitcJlx8XSAgCisuUkIgIltcfCIgIlwtc2UgIlxjCisuSSBwcm9nXGMKK1wmXHxdCisuUkIgIltcfCIgIlwtYyAiXGMKKy5JIGNvcmVcYworXCZcfF0KKy5SQiAiW1x8IiAiXC14ICJcYworLkkgZmlsZVxjCitcJlx8XQorLlJCICJbXHwiICJcLWV4ICJcYworLkkgY21kXGMKK1wmXHxdCisuUkIgIltcfCIgIlwtZCAiXGMKKy5JIGRpclxjCitcJlx8XQorLlJCICJbXHwiIFxjCisuSSBwcm9nXGMKKy5SQiAiW1x8IiBcYworLklSIGNvcmUgXHx8XHwgcHJvY0lEXGMKK1wmXHxdXCZcfF0KKy5hZCBiCisuU0ggREVTQ1JJUFRJT04KK1RoZSBwdXJwb3NlIG9mIGEgZGVidWdnZXIgc3VjaCBhcyBHREIgaXMgdG8gYWxsb3cgeW91IHRvIHNlZSB3aGF0IGlzCitnb2luZyBvbiBgYGluc2lkZScnIGFub3RoZXIgcHJvZ3JhbSB3aGlsZSBpdCBleGVjdXRlc1woZW1cJm9yIHdoYXQgYW5vdGhlcgorcHJvZ3JhbSB3YXMgZG9pbmcgYXQgdGhlIG1vbWVudCBpdCBjcmFzaGVkLgorCitHREIgY2FuIGRvIGZvdXIgbWFpbiBraW5kcyBvZiB0aGluZ3MgKHBsdXMgb3RoZXIgdGhpbmdzIGluIHN1cHBvcnQgb2YKK3RoZXNlKSB0byBoZWxwIHlvdSBjYXRjaCBidWdzIGluIHRoZSBhY3Q6CisKKy5UUAorXCBcIFwgXChidQorU3RhcnQgeW91ciBwcm9ncmFtLCBzcGVjaWZ5aW5nIGFueXRoaW5nIHRoYXQgbWlnaHQgYWZmZWN0IGl0cyBiZWhhdmlvci4KKworLlRQCitcIFwgXCBcKGJ1CitNYWtlIHlvdXIgcHJvZ3JhbSBzdG9wIG9uIHNwZWNpZmllZCBjb25kaXRpb25zLgorCisuVFAKK1wgXCBcIFwoYnUKK0V4YW1pbmUgd2hhdCBoYXMgaGFwcGVuZWQsIHdoZW4geW91ciBwcm9ncmFtIGhhcyBzdG9wcGVkLgorCisuVFAKK1wgXCBcIFwoYnUKK0NoYW5nZSB0aGluZ3MgaW4geW91ciBwcm9ncmFtLCBzbyB5b3UgY2FuIGV4cGVyaW1lbnQgd2l0aCBjb3JyZWN0aW5nIHRoZQorZWZmZWN0cyBvZiBvbmUgYnVnIGFuZCBnbyBvbiB0byBsZWFybiBhYm91dCBhbm90aGVyLgorLlBQCisKK1lvdSBjYW4gdXNlIEdEQiB0byBkZWJ1ZyBwcm9ncmFtcyB3cml0dGVuIGluIEMsIEMrKywgYW5kIE1vZHVsYS0yLgorRm9ydHJhbiBzdXBwb3J0IHdpbGwgYmUgYWRkZWQgd2hlbiBhIEdOVSBGb3J0cmFuIGNvbXBpbGVyIGlzIHJlYWR5LgorCitHREIgaXMgaW52b2tlZCB3aXRoIHRoZSBzaGVsbCBjb21tYW5kIFxjCisuQiBnZGJcYworXCYuICBPbmNlIHN0YXJ0ZWQsIGl0IHJlYWRzCitjb21tYW5kcyBmcm9tIHRoZSB0ZXJtaW5hbCB1bnRpbCB5b3UgdGVsbCBpdCB0byBleGl0IHdpdGggdGhlIEdEQgorY29tbWFuZCBcYworLkIgcXVpdFxjCitcJi4gIFlvdSBjYW4gZ2V0IG9ubGluZSBoZWxwIGZyb20gXGMKKy5CIGdkYlxjCitcJiBpdHNlbGYKK2J5IHVzaW5nIHRoZSBjb21tYW5kIFxjCisuQiBoZWxwXGMKK1wmLgorCitZb3UgY2FuIHJ1biBcYworLkIgZ2RiXGMKK1wmIHdpdGggbm8gYXJndW1lbnRzIG9yIG9wdGlvbnM7IGJ1dCB0aGUgbW9zdAordXN1YWwgd2F5IHRvIHN0YXJ0IEdEQiBpcyB3aXRoIG9uZSBhcmd1bWVudCBvciB0d28sIHNwZWNpZnlpbmcgYW4KK2V4ZWN1dGFibGUgcHJvZ3JhbSBhcyB0aGUgYXJndW1lbnQ6Cisuc3AKKy5icgorZ2RiXCBwcm9ncmFtCisuYnIKKy5zcAorCitZb3UgY2FuIGFsc28gc3RhcnQgd2l0aCBib3RoIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBhbmQgYSBjb3JlIGZpbGUgc3BlY2lmaWVkOgorLnNwCisuYnIKK2dkYlwgcHJvZ3JhbVwgY29yZQorLmJyCisuc3AKKworWW91IGNhbiwgaW5zdGVhZCwgc3BlY2lmeSBhIHByb2Nlc3MgSUQgYXMgYSBzZWNvbmQgYXJndW1lbnQsIGlmIHlvdSB3YW50Cit0byBkZWJ1ZyBhIHJ1bm5pbmcgcHJvY2VzczoKKy5zcAorLmJyCitnZGJcIHByb2dyYW1cIDEyMzQKKy5icgorLnNwCisKK3dvdWxkIGF0dGFjaCBHREIgdG8gcHJvY2VzcyBcYworLkIgMTIzNFxjCitcJiAodW5sZXNzIHlvdSBhbHNvIGhhdmUgYSBmaWxlCituYW1lZCBgXHxcYworLkIgMTIzNFxjCitcJlx8JzsgR0RCIGRvZXMgY2hlY2sgZm9yIGEgY29yZSBmaWxlIGZpcnN0KS4KKworSGVyZSBhcmUgc29tZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IG5lZWRlZCBHREIgY29tbWFuZHM6CisuVFAKKy5CIGJyZWFrIFxmUltcfFxmSWZpbGVcZkI6XGZSXHxdXGZJZnVuY3Rpb24KK1wmCitTZXQgYSBicmVha3BvaW50IGF0IFxjCisuSSBmdW5jdGlvblxjCitcJiAoaW4gXGMKKy5JIGZpbGVcYworXCYpLgorLlRQCisuQiBydW4gXGZSW1x8XGZJYXJnbGlzdFxmUlx8XQorU3RhcnQgeW91ciBwcm9ncmFtICh3aXRoIFxjCisuSSBhcmdsaXN0XGMKK1wmLCBpZiBzcGVjaWZpZWQpLgorLlRQCisuQiBidAorQmFja3RyYWNlOiBkaXNwbGF5IHRoZSBwcm9ncmFtIHN0YWNrLgorLlRQCisuQkkgcHJpbnQgIiBleHByIlxjCitcJgorRGlzcGxheSB0aGUgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbi4KKy5UUAorLkIgYworQ29udGludWUgcnVubmluZyB5b3VyIHByb2dyYW0gKGFmdGVyIHN0b3BwaW5nLCBlLmcuIGF0IGEgYnJlYWtwb2ludCkuCisuVFAKKy5CIG5leHQKK0V4ZWN1dGUgbmV4dCBwcm9ncmFtIGxpbmUgKGFmdGVyIHN0b3BwaW5nKTsgc3RlcCBcYworLkkgb3ZlclxjCitcJiBhbnkKK2Z1bmN0aW9uIGNhbGxzIGluIHRoZSBsaW5lLgorLlRQCisuQiBlZGl0IFxmUltcfFxmSWZpbGVcZkI6XGZSXHxdXGZJZnVuY3Rpb24KK2xvb2sgYXQgdGhlIHByb2dyYW0gbGluZSB3aGVyZSBpdCBpcyBwcmVzZW50bHkgc3RvcHBlZC4KKy5UUAorLkIgbGlzdCBcZlJbXHxcZklmaWxlXGZCOlxmUlx8XVxmSWZ1bmN0aW9uCit0eXBlIHRoZSB0ZXh0IG9mIHRoZSBwcm9ncmFtIGluIHRoZSB2aWNpbml0eSBvZiB3aGVyZSBpdCBpcyBwcmVzZW50bHkgc3RvcHBlZC4KKy5UUAorLkIgc3RlcAorRXhlY3V0ZSBuZXh0IHByb2dyYW0gbGluZSAoYWZ0ZXIgc3RvcHBpbmcpOyBzdGVwIFxjCisuSSBpbnRvXGMKK1wmIGFueQorZnVuY3Rpb24gY2FsbHMgaW4gdGhlIGxpbmUuCisuVFAKKy5CIGhlbHAgXGZSW1x8XGZJbmFtZVxmUlx8XQorU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBHREIgY29tbWFuZCBcYworLkkgbmFtZVxjCitcJiwgb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbgorYWJvdXQgdXNpbmcgR0RCLgorLlRQCisuQiBxdWl0CitFeGl0IGZyb20gR0RCLgorLlBQCitGb3IgZnVsbCBkZXRhaWxzIG9uIEdEQiwgc2VlIFxjCisuSSAKK1VzaW5nIEdEQjogQSBHdWlkZSB0byB0aGUgR05VIFNvdXJjZS1MZXZlbCBEZWJ1Z2dlclxjCitcJiwgYnkgUmljaGFyZCBNLiBTdGFsbG1hbiBhbmQgUm9sYW5kIEguIFBlc2NoLiAgVGhlIHNhbWUgdGV4dCBpcyBhdmFpbGFibGUgb25saW5lCithcyB0aGUgXGMKKy5CIGdkYlxjCitcJiBlbnRyeSBpbiB0aGUgXGMKKy5CIGluZm9cYworXCYgcHJvZ3JhbS4KKy5TSCBPUFRJT05TCitBbnkgYXJndW1lbnRzIG90aGVyIHRoYW4gb3B0aW9ucyBzcGVjaWZ5IGFuIGV4ZWN1dGFibGUKK2ZpbGUgYW5kIGNvcmUgZmlsZSAob3IgcHJvY2VzcyBJRCk7IHRoYXQgaXMsIHRoZSBmaXJzdCBhcmd1bWVudAorZW5jb3VudGVyZWQgd2l0aCBubyAKK2Fzc29jaWF0ZWQgb3B0aW9uIGZsYWcgaXMgZXF1aXZhbGVudCB0byBhIGBcfFxjCisuQiBcLXNlXGMKK1wmXHwnIG9wdGlvbiwgYW5kIHRoZQorc2Vjb25kLCBpZiBhbnksIGlzIGVxdWl2YWxlbnQgdG8gYSBgXHxcYworLkIgXC1jXGMKK1wmXHwnIG9wdGlvbiBpZiBpdCdzIHRoZSBuYW1lIG9mIGEgZmlsZS4gIE1hbnkgb3B0aW9ucyBoYXZlCitib3RoIGxvbmcgYW5kIHNob3J0IGZvcm1zOyBib3RoIGFyZSBzaG93biBoZXJlLiAgVGhlIGxvbmcgZm9ybXMgYXJlIGFsc28KK3JlY29nbml6ZWQgaWYgeW91IHRydW5jYXRlIHRoZW0sIHNvIGxvbmcgYXMgZW5vdWdoIG9mIHRoZSBvcHRpb24gaXMKK3ByZXNlbnQgdG8gYmUgdW5hbWJpZ3VvdXMuICAoSWYgeW91IHByZWZlciwgeW91IGNhbiBmbGFnIG9wdGlvbgorYXJndW1lbnRzIHdpdGggYFx8XGMKKy5CICtcYworXCZcfCcgcmF0aGVyIHRoYW4gYFx8XGMKKy5CIFwtXGMKK1wmXHwnLCB0aG91Z2ggd2UgaWxsdXN0cmF0ZSB0aGUKK21vcmUgdXN1YWwgY29udmVudGlvbi4pCisKK0FsbCB0aGUgb3B0aW9ucyBhbmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB5b3UgZ2l2ZSBhcmUgcHJvY2Vzc2VkCitpbiBzZXF1ZW50aWFsIG9yZGVyLiAgVGhlIG9yZGVyIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHRoZQorYFx8XGMKKy5CIFwteFxjCitcJlx8JyBvcHRpb24gaXMgdXNlZC4KKworLlRQCisuQiBcLWhlbHAKKy5UUAorLkIgXC1oCitMaXN0IGFsbCBvcHRpb25zLCB3aXRoIGJyaWVmIGV4cGxhbmF0aW9ucy4KKworLlRQCisuQkkgIlwtc3ltYm9scz0iICJmaWxlIlxjCisuVFAKKy5CSSAiXC1zICIgImZpbGUiXGMKK1wmCitSZWFkIHN5bWJvbCB0YWJsZSBmcm9tIGZpbGUgXGMKKy5JIGZpbGVcYworXCYuCisKKy5UUAorLkIgXC13cml0ZQorRW5hYmxlIHdyaXRpbmcgaW50byBleGVjdXRhYmxlIGFuZCBjb3JlIGZpbGVzLgorCisuVFAKKy5CSSAiXC1leGVjPSIgImZpbGUiXGMKKy5UUAorLkJJICJcLWUgIiAiZmlsZSJcYworXCYKK1VzZSBmaWxlIFxjCisuSSBmaWxlXGMKK1wmIGFzIHRoZSBleGVjdXRhYmxlIGZpbGUgdG8gZXhlY3V0ZSB3aGVuCithcHByb3ByaWF0ZSwgYW5kIGZvciBleGFtaW5pbmcgcHVyZSBkYXRhIGluIGNvbmp1bmN0aW9uIHdpdGggYSBjb3JlCitkdW1wLgorCisuVFAKKy5CSSAiXC1zZT0iICJmaWxlIlxjCitcJgorUmVhZCBzeW1ib2wgdGFibGUgZnJvbSBmaWxlIFxjCisuSSBmaWxlXGMKK1wmIGFuZCB1c2UgaXQgYXMgdGhlIGV4ZWN1dGFibGUKK2ZpbGUuCisKKy5UUAorLkJJICJcLWNvcmU9IiAiZmlsZSJcYworLlRQCisuQkkgIlwtYyAiICJmaWxlIlxjCitcJgorVXNlIGZpbGUgXGMKKy5JIGZpbGVcYworXCYgYXMgYSBjb3JlIGR1bXAgdG8gZXhhbWluZS4KKworLlRQCisuQkkgIlwtY29tbWFuZD0iICJmaWxlIlxjCisuVFAKKy5CSSAiXC14ICIgImZpbGUiXGMKK1wmCitFeGVjdXRlIEdEQiBjb21tYW5kcyBmcm9tIGZpbGUgXGMKKy5JIGZpbGVcYworXCYuICAKKworLlRQCisuQkkgIlwtZXggIiAiY29tbWFuZCJcYworXCYKK0V4ZWN1dGUgZ2l2ZW4gR0RCIFxjCisuSSBjb21tYW5kXGMKK1wmLgorCisuVFAKKy5CSSAiXC1kaXJlY3Rvcnk9IiAiZGlyZWN0b3J5IlxjCisuVFAKKy5CSSAiXC1kICIgImRpcmVjdG9yeSJcYworXCYKK0FkZCBcYworLkkgZGlyZWN0b3J5XGMKK1wmIHRvIHRoZSBwYXRoIHRvIHNlYXJjaCBmb3Igc291cmNlIGZpbGVzLgorLlBQCisKKy5UUAorLkIgXC1uaAorRG8gbm90IGV4ZWN1dGUgY29tbWFuZHMgZnJvbSB+Ly5nZGJpbml0LgorCisuVFAKKy5CIFwtbngKKy5UUAorLkIgXC1uCitEbyBub3QgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGFueSBgXHxcYworLkIgLmdkYmluaXRcYworXCZcfCcgaW5pdGlhbGl6YXRpb24gZmlsZXMuCisKKworLlRQCisuQiBcLXF1aWV0CisuVFAKKy5CIFwtcQorYGBRdWlldCcnLiAgRG8gbm90IHByaW50IHRoZSBpbnRyb2R1Y3RvcnkgYW5kIGNvcHlyaWdodCBtZXNzYWdlcy4gIFRoZXNlCittZXNzYWdlcyBhcmUgYWxzbyBzdXBwcmVzc2VkIGluIGJhdGNoIG1vZGUuCisKKy5UUAorLkIgXC1iYXRjaAorUnVuIGluIGJhdGNoIG1vZGUuICBFeGl0IHdpdGggc3RhdHVzIFxjCisuQiAwXGMKK1wmIGFmdGVyIHByb2Nlc3NpbmcgYWxsIHRoZSBjb21tYW5kCitmaWxlcyBzcGVjaWZpZWQgd2l0aCBgXHxcYworLkIgXC14XGMKK1wmXHwnIChhbmQgYFx8XGMKKy5CIC5nZGJpbml0XGMKK1wmXHwnLCBpZiBub3QgaW5oaWJpdGVkKS4KK0V4aXQgd2l0aCBub256ZXJvIHN0YXR1cyBpZiBhbiBlcnJvciBvY2N1cnMgaW4gZXhlY3V0aW5nIHRoZSBHREIKK2NvbW1hbmRzIGluIHRoZSBjb21tYW5kIGZpbGVzLgorCitCYXRjaCBtb2RlIG1heSBiZSB1c2VmdWwgZm9yIHJ1bm5pbmcgR0RCIGFzIGEgZmlsdGVyLCBmb3IgZXhhbXBsZSB0bworZG93bmxvYWQgYW5kIHJ1biBhIHByb2dyYW0gb24gYW5vdGhlciBjb21wdXRlcjsgaW4gb3JkZXIgdG8gbWFrZSB0aGlzCittb3JlIHVzZWZ1bCwgdGhlIG1lc3NhZ2UKKy5zcAorLmJyCitQcm9ncmFtXCBleGl0ZWRcIG5vcm1hbGx5LgorLmJyCisuc3AKKworKHdoaWNoIGlzIG9yZGluYXJpbHkgaXNzdWVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBydW5uaW5nIHVuZGVyIEdEQiBjb250cm9sCit0ZXJtaW5hdGVzKSBpcyBub3QgaXNzdWVkIHdoZW4gcnVubmluZyBpbiBiYXRjaCBtb2RlLgorCisuVFAKKy5CSSAiXC1jZD0iICJkaXJlY3RvcnkiXGMKK1wmCitSdW4gR0RCIHVzaW5nIFxjCisuSSBkaXJlY3RvcnlcYworXCYgYXMgaXRzIHdvcmtpbmcgZGlyZWN0b3J5LAoraW5zdGVhZCBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKy5UUAorLkIgXC1mdWxsbmFtZQorLlRQCisuQiBcLWYKK0VtYWNzIHNldHMgdGhpcyBvcHRpb24gd2hlbiBpdCBydW5zIEdEQiBhcyBhIHN1YnByb2Nlc3MuICBJdCB0ZWxscyBHREIKK3RvIG91dHB1dCB0aGUgZnVsbCBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIGluIGEgc3RhbmRhcmQsCityZWNvZ25pemFibGUgZmFzaGlvbiBlYWNoIHRpbWUgYSBzdGFjayBmcmFtZSBpcyBkaXNwbGF5ZWQgKHdoaWNoCitpbmNsdWRlcyBlYWNoIHRpbWUgdGhlIHByb2dyYW0gc3RvcHMpLiAgVGhpcyByZWNvZ25pemFibGUgZm9ybWF0IGxvb2tzCitsaWtlIHR3byBgXHxcYworLkIgXDAzMlxjCitcJlx8JyBjaGFyYWN0ZXJzLCBmb2xsb3dlZCBieSB0aGUgZmlsZSBuYW1lLCBsaW5lIG51bWJlcgorYW5kIGNoYXJhY3RlciBwb3NpdGlvbiBzZXBhcmF0ZWQgYnkgY29sb25zLCBhbmQgYSBuZXdsaW5lLiAgVGhlCitFbWFjcy10by1HREIgaW50ZXJmYWNlIHByb2dyYW0gdXNlcyB0aGUgdHdvIGBcfFxjCisuQiBcMDMyXGMKK1wmXHwnIGNoYXJhY3RlcnMgYXMKK2Egc2lnbmFsIHRvIGRpc3BsYXkgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgZnJhbWUuCisKKy5UUAorLkJJICJcLWIgIiAiYnBzIlxjCitcJgorU2V0IHRoZSBsaW5lIHNwZWVkIChiYXVkIHJhdGUgb3IgYml0cyBwZXIgc2Vjb25kKSBvZiBhbnkgc2VyaWFsCitpbnRlcmZhY2UgdXNlZCBieSBHREIgZm9yIHJlbW90ZSBkZWJ1Z2dpbmcuCisKKy5UUAorLkJJICJcLXR0eT0iICJkZXZpY2UiXGMKK1wmCitSdW4gdXNpbmcgXGMKKy5JIGRldmljZVxjCitcJiBmb3IgeW91ciBwcm9ncmFtJ3Mgc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dC4KKy5QUAorCisuU0ggIlNFRSBBTFNPIgorVGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiBmb3IKKy5CIGdkYgoraXMgbWFpbnRhaW5lZCBhcyBhIFRleGluZm8gbWFudWFsLiAgSWYgdGhlCisuQiBpbmZvCithbmQKKy5CIGdkYgorcHJvZ3JhbXMgYW5kIEdEQidzIFRleGluZm8gZG9jdW1lbnRhdGlvbiBhcmUgcHJvcGVybHkgaW5zdGFsbGVkIGF0Cit5b3VyIHNpdGUsIHRoZSBjb21tYW5kCisuSVAKKy5CIGluZm8gZ2RiCisuUFAKK3Nob3VsZCBnaXZlIHlvdSBhY2Nlc3MgdG8gdGhlIGNvbXBsZXRlIG1hbnVhbC4KKworLkkgCitVc2luZyBHREI6IEEgR3VpZGUgdG8gdGhlIEdOVSBTb3VyY2UtTGV2ZWwgRGVidWdnZXJcYworLCBSaWNoYXJkIE0uIFN0YWxsbWFuIGFuZCBSb2xhbmQgSC4gUGVzY2gsIEp1bHkgMTk5MS4KKy5TSCBDT1BZSU5HCitDb3B5cmlnaHQgKGMpIDE5OTEsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBtYWtlIGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZgordGhpcyBtYW51YWwgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKK2FyZSBwcmVzZXJ2ZWQgb24gYWxsIGNvcGllcy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcworbWFudWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIGZvciB2ZXJiYXRpbSBjb3B5aW5nLCBwcm92aWRlZCB0aGF0IHRoZQorZW50aXJlIHJlc3VsdGluZyBkZXJpdmVkIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEKK3Blcm1pc3Npb24gbm90aWNlIGlkZW50aWNhbCB0byB0aGlzIG9uZS4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMKK21hbnVhbCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIHVuZGVyIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvciBtb2RpZmllZAordmVyc2lvbnMsIGV4Y2VwdCB0aGF0IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgbWF5IGJlIGluY2x1ZGVkIGluCit0cmFuc2xhdGlvbnMgYXBwcm92ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbnN0ZWFkIG9mIGluCit0aGUgb3JpZ2luYWwgRW5nbGlzaC4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1nZm9ydHJhbi4xIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWdmb3J0cmFuLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1OWFiMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1nZm9ydHJhbi4xCkBAIC0wLDAgKzEsMTM5OSBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjIgKFBvZDo6U2ltcGxlIDMuMDcpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIkdGT1JUUkFOIDEiCisuVEggR0ZPUlRSQU4gMSAiMjAxMy0xMS0xMSIgImdjYy00LjguMyIgIkdOVSIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitnZm9ydHJhbiBcLSBHTlUgRm9ydHJhbiBjb21waWxlcgorLlNIICJTWU5PUFNJUyIKKy5JWCBIZWFkZXIgIlNZTk9QU0lTIgorZ2ZvcnRyYW4gW1xmQlwtY1xmUnxcZkJcLVNcZlJ8XGZCXC1FXGZSXQorICAgICAgICAgW1xmQlwtZ1xmUl0gW1xmQlwtcGdcZlJdIFtcZkJcLU9cZlJcZklsZXZlbFxmUl0KKyAgICAgICAgIFtcZkJcLVdcZlJcZkl3YXJuXGZSLi4uXSBbXGZCXC1wZWRhbnRpY1xmUl0KKyAgICAgICAgIFtcZkJcLUlcZlJcZklkaXJcZlIuLi5dIFtcZkJcLUxcZlJcZklkaXJcZlIuLi5dCisgICAgICAgICBbXGZCXC1EXGZSXGZJbWFjcm9cZlJbPVxmSWRlZm5cZlJdLi4uXSBbXGZCXC1VXGZSXGZJbWFjcm9cZlJdCisgICAgICAgICBbXGZCXC1mXGZSXGZJb3B0aW9uXGZSLi4uXQorICAgICAgICAgW1xmQlwtbVxmUlxmSW1hY2hpbmUtb3B0aW9uXGZSLi4uXQorICAgICAgICAgW1xmQlwtb1xmUiBcZklvdXRmaWxlXGZSXSBcZklpbmZpbGVcZlIuLi4KKy5QUAorT25seSB0aGUgbW9zdCB1c2VmdWwgb3B0aW9ucyBhcmUgbGlzdGVkIGhlcmU7IHNlZSBiZWxvdyBmb3IgdGhlCityZW1haW5kZXIuCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitUaGUgXGZCZ2ZvcnRyYW5cZlIgY29tbWFuZCBzdXBwb3J0cyBhbGwgdGhlIG9wdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZQorXCZcZkJnY2NcZlIgY29tbWFuZC4gIE9ubHkgb3B0aW9ucyBzcGVjaWZpYyB0byBccy0xR05VXHMwIEZvcnRyYW4gYXJlIGRvY3VtZW50ZWQKK2hlcmUuCisuUFAKK0FsbCBccy0xR0NDXHMwIGFuZCBccy0xR05VXHMwIEZvcnRyYW4gb3B0aW9ucworYXJlIGFjY2VwdGVkIGJvdGggYnkgXGZCZ2ZvcnRyYW5cZlIgYW5kIGJ5IFxmQmdjY1xmUgorKGFzIHdlbGwgYXMgYW55IG90aGVyIGRyaXZlcnMgYnVpbHQgYXQgdGhlIHNhbWUgdGltZSwKK3N1Y2ggYXMgXGZCZysrXGZSKSwKK3NpbmNlIGFkZGluZyBccy0xR05VXHMwIEZvcnRyYW4gdG8gdGhlIFxzLTFHQ0NcczAgZGlzdHJpYnV0aW9uCitlbmFibGVzIGFjY2VwdGFuY2Ugb2YgXHMtMUdOVVxzMCBGb3J0cmFuIG9wdGlvbnMKK2J5IGFsbCBvZiB0aGUgcmVsZXZhbnQgZHJpdmVycy4KKy5QUAorSW4gc29tZSBjYXNlcywgb3B0aW9ucyBoYXZlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmb3JtczsKK3RoZSBuZWdhdGl2ZSBmb3JtIG9mIFxmQlwtZmZvb1xmUiB3b3VsZCBiZSBcZkJcLWZub1wtZm9vXGZSLgorVGhpcyBtYW51YWwgZG9jdW1lbnRzIG9ubHkgb25lIG9mIHRoZXNlIHR3byBmb3Jtcywgd2hpY2hldmVyCitvbmUgaXMgbm90IHRoZSBkZWZhdWx0LgorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKK0hlcmUgaXMgYSBzdW1tYXJ5IG9mIGFsbCB0aGUgb3B0aW9ucyBzcGVjaWZpYyB0byBccy0xR05VXHMwIEZvcnRyYW4sIGdyb3VwZWQKK2J5IHR5cGUuICBFeHBsYW5hdGlvbnMgYXJlIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisuSVAgIlxmSUZvcnRyYW4gTGFuZ3VhZ2UgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkZvcnRyYW4gTGFuZ3VhZ2UgT3B0aW9ucyIKK1wmXGZCXC1mYWxsXC1pbnRyaW5zaWNzIFwtZmJhY2tzbGFzaCBcLWZjcmF5XC1wb2ludGVyIFwtZmRcLWxpbmVzXC1hc1wtY29kZSAKK1wmXC1mZFwtbGluZXNcLWFzXC1jb21tZW50cyBcLWZkZWZhdWx0XC1kb3VibGVcLTggXC1mZGVmYXVsdFwtaW50ZWdlclwtOCAKK1wmXC1mZGVmYXVsdFwtcmVhbFwtOCBcLWZkb2xsYXJcLW9rIFwtZmZpeGVkXC1saW5lXC1sZW5ndGhcLVxmUlxmSW5cZlIgCitcJlxmQlwtZmZpeGVkXC1saW5lXC1sZW5ndGhcLW5vbmUgXC1mZnJlZVwtZm9ybSBcLWZmcmVlXC1saW5lXC1sZW5ndGhcLVxmUlxmSW5cZlIgCitcJlxmQlwtZmZyZWVcLWxpbmVcLWxlbmd0aFwtbm9uZSBcLWZpbXBsaWNpdFwtbm9uZSBcLWZpbnRlZ2VyXC00XC1pbnRlZ2VyXC04IAorXCZcLWZtYXhcLWlkZW50aWZpZXJcLWxlbmd0aCBcLWZtb2R1bGVcLXByaXZhdGUgXC1mbm9cLWZpeGVkXC1mb3JtIFwtZm5vXC1yYW5nZVwtY2hlY2sgCitcJlwtZm9wZW5tcCBcLWZyZWFsXC00XC1yZWFsXC0xMCBcLWZyZWFsXC00XC1yZWFsXC0xNiBcLWZyZWFsXC00XC1yZWFsXC04IAorXCZcLWZyZWFsXC04XC1yZWFsXC0xMCBcLWZyZWFsXC04XC1yZWFsXC0xNiBcLWZyZWFsXC04XC1yZWFsXC00IFwtc3RkPVxmUlxmSXN0ZFxmUlxmQiBcZlIKKy5JUCAiXGZJUHJlcHJvY2Vzc2luZyBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiUHJlcHJvY2Vzc2luZyBPcHRpb25zIgorXCZcZkJcLUFcLVxmUlxmSXF1ZXN0aW9uXGZSW1xmQj1cZlJcZklhbnN3ZXJcZlJdCitcJlxmQlwtQVxmUlxmSXF1ZXN0aW9uXGZSXGZCPVxmUlxmSWFuc3dlclxmUiBcZkJcLUMgXC1DQyBcLURcZlJcZkltYWNyb1xmUltcZkI9XGZSXGZJZGVmblxmUl0KK1wmXGZCXC1IIFwtUCAKK1wmXC1VXGZSXGZJbWFjcm9cZlIgXGZCXC1jcHAgXC1kRCBcLWRJIFwtZE0gXC1kTiBcLWRVIFwtZndvcmtpbmdcLWRpcmVjdG9yeQorXCZcLWltdWx0aWxpYlxmUiBcZklkaXJcZlIgCitcJlxmQlwtaXByZWZpeFxmUiBcZklmaWxlXGZSIFxmQlwtaXF1b3RlIFwtaXN5c3Jvb3RcZlIgXGZJZGlyXGZSIFxmQlwtaXN5c3RlbVxmUiBcZklkaXJcZlIgXGZCXC1ub2NwcCAKK1wmXC1ub3N0ZGluYyAKK1wmXC11bmRlZlxmUgorLklQICJcZklFcnJvciBhbmQgV2FybmluZyBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiRXJyb3IgYW5kIFdhcm5pbmcgT3B0aW9ucyIKK1wmXGZCXC1XYWxpYXNpbmcgXC1XYWxsIFwtV2FtcGVyc2FuZCBcLVdhcnJheVwtYm91bmRzCitcJlwtV2NcLWJpbmRpbmdcLXR5cGUgXC1XY2hhcmFjdGVyXC10cnVuY2F0aW9uIAorXCZcLVdjb252ZXJzaW9uIFwtV2Z1bmN0aW9uXC1lbGltaW5hdGlvbiBcLVdpbXBsaWNpdFwtaW50ZXJmYWNlIAorXCZcLVdpbXBsaWNpdFwtcHJvY2VkdXJlIFwtV2ludHJpbnNpY1wtc2hhZG93IFwtV2ludHJpbnNpY3NcLXN0ZCAKK1wmXC1XbGluZVwtdHJ1bmNhdGlvbiBcLVdub1wtYWxpZ25cLWNvbW1vbnMgXC1Xbm9cLXRhYnMgXC1XcmVhbFwtcVwtY29uc3RhbnQgCitcJlwtV3N1cnByaXNpbmcgXC1XdW5kZXJmbG93IFwtV3VudXNlZFwtcGFyYW1ldGVyIFwtV3JlYWxsb2NcLWxocyBXcmVhbGxvYy1saHMtYWxsIAorXCZcLVd0YXJnZXRcLWxpZmV0aW1lIFwtZm1heFwtZXJyb3JzPVxmUlxmSW5cZlIgXGZCXC1mc3ludGF4XC1vbmx5IFwtcGVkYW50aWMgXC1wZWRhbnRpY1wtZXJyb3JzXGZSCisuSVAgIlxmSURlYnVnZ2luZyBPcHRpb25zXGZSIiA0CisuSVggSXRlbSAiRGVidWdnaW5nIE9wdGlvbnMiCitcJlxmQlwtZmJhY2t0cmFjZSBcLWZkdW1wXC1mb3J0cmFuXC1vcHRpbWl6ZWQgXC1mZHVtcFwtZm9ydHJhblwtb3JpZ2luYWwgCitcJlwtZmR1bXBcLXBhcnNlXC10cmVlIFwtZmZwZVwtdHJhcD1cZlJcZklsaXN0XGZSXGZCIFxmUgorLklQICJcZklEaXJlY3RvcnkgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkRpcmVjdG9yeSBPcHRpb25zIgorXCZcZkJcLUlcZlJcZklkaXJcZlIgIFxmQlwtSlxmUlxmSWRpclxmUiBcZkJcLWZpbnRyaW5zaWNcLW1vZHVsZXNcLXBhdGhcZlIgXGZJZGlyXGZSCisuSVAgIlxmSUxpbmsgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkxpbmsgT3B0aW9ucyIKK1wmXGZCXC1zdGF0aWNcLWxpYmdmb3J0cmFuXGZSCisuSVAgIlxmSVJ1bnRpbWUgT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIlJ1bnRpbWUgT3B0aW9ucyIKK1wmXGZCXC1mY29udmVydD1cZlJcZkljb252ZXJzaW9uXGZSIFxmQlwtZm1heFwtc3VicmVjb3JkXC1sZW5ndGg9XGZSXGZJbGVuZ3RoXGZSIAorXCZcZkJcLWZyZWNvcmRcLW1hcmtlcj1cZlJcZklsZW5ndGhcZlIgXGZCXC1mc2lnblwtemVyb1xmUgorLklQICJcZklDb2RlIEdlbmVyYXRpb24gT3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIkNvZGUgR2VuZXJhdGlvbiBPcHRpb25zIgorXCZcZkJcLWZhZ2dyZXNzaXZlXC1mdW5jdGlvblwtZWxpbWluYXRpb24gXC1mYmxhc1wtbWF0bXVsXC1saW1pdD1cZlJcZkluXGZSIAorXCZcZkJcLWZib3VuZHNcLWNoZWNrIFwtZmNoZWNrXC1hcnJheVwtdGVtcG9yYXJpZXMgCitcJlwtZmNoZWNrPVxmUlxmSTxhbGx8YXJyYXlcLXRlbXBzfGJvdW5kc3xkb3xtZW18cG9pbnRlcnxyZWN1cnNpb24+XGZSIAorXCZcZkJcLWZjb2FycmF5PVxmUlxmSTxub25lfHNpbmdsZXxsaWI+XGZSIFxmQlwtZmV4dGVybmFsXC1ibGFzIFwtZmYyYworXCZcLWZmcm9udGVuZFwtb3B0aW1pemUgCitcJlwtZmluaXRcLWNoYXJhY3Rlcj1cZlJcZkluXGZSIFxmQlwtZmluaXRcLWludGVnZXI9XGZSXGZJblxmUiBcZkJcLWZpbml0XC1sb2NhbFwtemVybyAKK1wmXC1maW5pdFwtbG9naWNhbD1cZlJcZkk8dHJ1ZXxmYWxzZT5cZlIKK1wmXGZCXC1maW5pdFwtcmVhbD1cZlJcZkk8emVyb3xpbmZ8XC1pbmZ8bmFufHNuYW4+XGZSIAorXCZcZkJcLWZtYXhcLWFycmF5XC1jb25zdHJ1Y3Rvcj1cZlJcZkluXGZSIFxmQlwtZm1heFwtc3RhY2tcLXZhclwtc2l6ZT1cZlJcZkluXGZSCitcJlxmQlwtZm5vXC1hbGlnblwtY29tbW9ucyAKK1wmXC1mbm9cLWF1dG9tYXRpYyBcLWZub1wtcHJvdGVjdFwtcGFyZW5zIFwtZm5vXC11bmRlcnNjb3JpbmcgXC1mbm9cLXdob2xlXC1maWxlIAorXCZcLWZzZWNvbmRcLXVuZGVyc2NvcmUgXC1mcGFja1wtZGVyaXZlZCBcLWZyZWFsbG9jXC1saHMgXC1mcmVjdXJzaXZlIAorXCZcLWZyZXBhY2tcLWFycmF5cyBcLWZzaG9ydFwtZW51bXMgXC1mc3RhY2tcLWFycmF5c1xmUgorLlNTICJPcHRpb25zIGNvbnRyb2xsaW5nIEZvcnRyYW4gZGlhbGVjdCIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIGNvbnRyb2xsaW5nIEZvcnRyYW4gZGlhbGVjdCIKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBjb250cm9sIHRoZSBkZXRhaWxzIG9mIHRoZSBGb3J0cmFuIGRpYWxlY3QKK2FjY2VwdGVkIGJ5IHRoZSBjb21waWxlcjoKKy5JUCAiXGZCXC1mZnJlZVwtZm9ybVxmUiIgNAorLklYIEl0ZW0gIi1mZnJlZS1mb3JtIgorLlBEIDAKKy5JUCAiXGZCXC1mZml4ZWRcLWZvcm1cZlIiIDQKKy5JWCBJdGVtICItZmZpeGVkLWZvcm0iCisuUEQKK1NwZWNpZnkgdGhlIGxheW91dCB1c2VkIGJ5IHRoZSBzb3VyY2UgZmlsZS4gIFRoZSBmcmVlIGZvcm0gbGF5b3V0Cit3YXMgaW50cm9kdWNlZCBpbiBGb3J0cmFuIDkwLiAgRml4ZWQgZm9ybSB3YXMgdHJhZGl0aW9uYWxseSB1c2VkIGluCitvbGRlciBGb3J0cmFuIHByb2dyYW1zLiAgV2hlbiBuZWl0aGVyIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBzb3VyY2UKK2Zvcm0gaXMgZGV0ZXJtaW5lZCBieSB0aGUgZmlsZSBleHRlbnNpb24uCisuSVAgIlxmQlwtZmFsbFwtaW50cmluc2ljc1xmUiIgNAorLklYIEl0ZW0gIi1mYWxsLWludHJpbnNpY3MiCitUaGlzIG9wdGlvbiBjYXVzZXMgYWxsIGludHJpbnNpYyBwcm9jZWR1cmVzIChpbmNsdWRpbmcgdGhlIEdOVS1zcGVjaWZpYworZXh0ZW5zaW9ucykgdG8gYmUgYWNjZXB0ZWQuICBUaGlzIGNhbiBiZSB1c2VmdWwgd2l0aCBcZkJcLXN0ZD1mOTVcZlIgdG8KK2ZvcmNlIHN0YW5kYXJkLWNvbXBsaWFuY2UgYnV0IGdldCBhY2Nlc3MgdG8gdGhlIGZ1bGwgcmFuZ2Ugb2YgaW50cmluc2ljcworYXZhaWxhYmxlIHdpdGggXGZCZ2ZvcnRyYW5cZlIuICBBcyBhIGNvbnNlcXVlbmNlLCBcZkJcLVdpbnRyaW5zaWNzXC1zdGRcZlIKK3dpbGwgYmUgaWdub3JlZCBhbmQgbm8gdXNlci1kZWZpbmVkIHByb2NlZHVyZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW55CitpbnRyaW5zaWMgd2lsbCBiZSBjYWxsZWQgZXhjZXB0IHdoZW4gaXQgaXMgZXhwbGljaXRseSBkZWNsYXJlZCBcZihDV1wqKENgRVhURVJOQUxcKihDJ1xmUi4KKy5JUCAiXGZCXC1mZFwtbGluZXNcLWFzXC1jb2RlXGZSIiA0CisuSVggSXRlbSAiLWZkLWxpbmVzLWFzLWNvZGUiCisuUEQgMAorLklQICJcZkJcLWZkXC1saW5lc1wtYXNcLWNvbW1lbnRzXGZSIiA0CisuSVggSXRlbSAiLWZkLWxpbmVzLWFzLWNvbW1lbnRzIgorLlBECitFbmFibGUgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGxpbmVzIGJlZ2lubmluZyB3aXRoIFxmKENXXCooQ2BkXCooQydcZlIgb3IgXGYoQ1dcKihDYERcKihDJ1xmUgoraW4gZml4ZWQgZm9ybSBzb3VyY2VzLiAgSWYgdGhlIFxmQlwtZmRcLWxpbmVzXC1hc1wtY29kZVxmUiBvcHRpb24gaXMKK2dpdmVuIHRoZXkgYXJlIHRyZWF0ZWQgYXMgaWYgdGhlIGZpcnN0IGNvbHVtbiBjb250YWluZWQgYSBibGFuay4gIElmIHRoZQorXCZcZkJcLWZkXC1saW5lc1wtYXNcLWNvbW1lbnRzXGZSIG9wdGlvbiBpcyBnaXZlbiwgdGhleSBhcmUgdHJlYXRlZCBhcworY29tbWVudCBsaW5lcy4KKy5JUCAiXGZCXC1mZGVmYXVsdFwtZG91YmxlXC04XGZSIiA0CisuSVggSXRlbSAiLWZkZWZhdWx0LWRvdWJsZS04IgorU2V0IHRoZSBcZihDV1wqKENgRE9VQkxFIFBSRUNJU0lPTlwqKEMnXGZSIHR5cGUgdG8gYW4gOCBieXRlIHdpZGUgdHlwZS4gIElmCitcJlxmQlwtZmRlZmF1bHRcLXJlYWxcLThcZlIgaXMgZ2l2ZW4sIFxmKENXXCooQ2BET1VCTEUgUFJFQ0lTSU9OXCooQydcZlIgd291bGQKK2luc3RlYWQgYmUgcHJvbW90ZWQgdG8gMTYgYnl0ZXMgaWYgcG9zc2libGUsIGFuZCBcZkJcLWZkZWZhdWx0XC1kb3VibGVcLThcZlIKK2NhbiBiZSB1c2VkIHRvIHByZXZlbnQgdGhpcy4gIFRoZSBraW5kIG9mIHJlYWwgY29uc3RhbnRzIGxpa2UgXGYoQ1dcKihDYDEuZDBcKihDJ1xmUiB3aWxsCitub3QgYmUgY2hhbmdlZCBieSBcZkJcLWZkZWZhdWx0XC1yZWFsXC04XGZSIHRob3VnaCwgc28gYWxzbworXCZcZkJcLWZkZWZhdWx0XC1kb3VibGVcLThcZlIgZG9lcyBub3QgYWZmZWN0IGl0LgorLklQICJcZkJcLWZkZWZhdWx0XC1pbnRlZ2VyXC04XGZSIiA0CisuSVggSXRlbSAiLWZkZWZhdWx0LWludGVnZXItOCIKK1NldCB0aGUgZGVmYXVsdCBpbnRlZ2VyIGFuZCBsb2dpY2FsIHR5cGVzIHRvIGFuIDggYnl0ZSB3aWRlIHR5cGUuCitEbyBub3RoaW5nIGlmIHRoaXMgaXMgYWxyZWFkeSB0aGUgZGVmYXVsdC4gIFRoaXMgb3B0aW9uIGFsc28gYWZmZWN0cwordGhlIGtpbmQgb2YgaW50ZWdlciBjb25zdGFudHMgbGlrZSBcZihDVzQyXGZSLgorLklQICJcZkJcLWZkZWZhdWx0XC1yZWFsXC04XGZSIiA0CisuSVggSXRlbSAiLWZkZWZhdWx0LXJlYWwtOCIKK1NldCB0aGUgZGVmYXVsdCByZWFsIHR5cGUgdG8gYW4gOCBieXRlIHdpZGUgdHlwZS4KK0RvIG5vdGhpbmcgaWYgdGhpcyBpcyBhbHJlYWR5IHRoZSBkZWZhdWx0LiAgVGhpcyBvcHRpb24gYWxzbyBhZmZlY3RzCit0aGUga2luZCBvZiBub24tZG91YmxlIHJlYWwgY29uc3RhbnRzIGxpa2UgXGYoQ1cxLjBcZlIsIGFuZCBkb2VzIHByb21vdGUKK3RoZSBkZWZhdWx0IHdpZHRoIG9mIFxmKENXXCooQ2BET1VCTEUgUFJFQ0lTSU9OXCooQydcZlIgdG8gMTYgYnl0ZXMgaWYgcG9zc2libGUsIHVubGVzcworXCZcZihDV1wqKENgXC1mZGVmYXVsdFwtZG91YmxlXC04XCooQydcZlIgaXMgZ2l2ZW4sIHRvby4KKy5JUCAiXGZCXC1mZG9sbGFyXC1va1xmUiIgNAorLklYIEl0ZW0gIi1mZG9sbGFyLW9rIgorQWxsb3cgXGZCJFxmUiBhcyBhIHZhbGlkIG5vbi1maXJzdCBjaGFyYWN0ZXIgaW4gYSBzeW1ib2wgbmFtZS4gU3ltYm9scyAKK3RoYXQgc3RhcnQgd2l0aCBcZkIkXGZSIGFyZSByZWplY3RlZCBzaW5jZSBpdCBpcyB1bmNsZWFyIHdoaWNoIHJ1bGVzIHRvCithcHBseSB0byBpbXBsaWNpdCB0eXBpbmcgYXMgZGlmZmVyZW50IHZlbmRvcnMgaW1wbGVtZW50IGRpZmZlcmVudCBydWxlcy4KK1VzaW5nIFxmQiRcZlIgaW4gXGYoQ1dcKihDYElNUExJQ0lUXCooQydcZlIgc3RhdGVtZW50cyBpcyBhbHNvIHJlamVjdGVkLgorLklQICJcZkJcLWZiYWNrc2xhc2hcZlIiIDQKKy5JWCBJdGVtICItZmJhY2tzbGFzaCIKK0NoYW5nZSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYmFja3NsYXNoZXMgaW4gc3RyaW5nIGxpdGVyYWxzIGZyb20gYSBzaW5nbGUKK2JhY2tzbGFzaCBjaGFyYWN0ZXIgdG8gXCooTCJDXC1zdHlsZVwqKFIiIGVzY2FwZSBjaGFyYWN0ZXJzLiBUaGUgZm9sbG93aW5nCitjb21iaW5hdGlvbnMgYXJlIGV4cGFuZGVkIFxmKENXXCooQ2BcZWFcKihDJ1xmUiwgXGYoQ1dcKihDYFxlYlwqKEMnXGZSLCBcZihDV1wqKENgXGVmXCooQydcZlIsIFxmKENXXCooQ2BcZW5cKihDJ1xmUiwKK1wmXGYoQ1dcKihDYFxlclwqKEMnXGZSLCBcZihDV1wqKENgXGV0XCooQydcZlIsIFxmKENXXCooQ2BcZXZcKihDJ1xmUiwgXGYoQ1dcKihDYFxlXGVcKihDJ1xmUiwgYW5kIFxmKENXXCooQ2BcZTBcKihDJ1xmUiB0byB0aGUgXHMtMUFTQ0lJXHMwCitjaGFyYWN0ZXJzIGFsZXJ0LCBiYWNrc3BhY2UsIGZvcm0gZmVlZCwgbmV3bGluZSwgY2FycmlhZ2UgcmV0dXJuLAoraG9yaXpvbnRhbCB0YWIsIHZlcnRpY2FsIHRhYiwgYmFja3NsYXNoLCBhbmQgXHMtMU5VTFxzMCwgcmVzcGVjdGl2ZWx5LgorQWRkaXRpb25hbGx5LCBcZihDV1wqKENgXGV4XCooQydcZlJcZklublxmUiwgXGYoQ1dcKihDYFxldVwqKEMnXGZSXGZJbm5ublxmUiBhbmQKK1wmXGYoQ1dcKihDYFxlVVwqKEMnXGZSXGZJbm5ubm5ubm5cZlIgKHdoZXJlIGVhY2ggXGZJblxmUiBpcyBhIGhleGFkZWNpbWFsIGRpZ2l0KSBhcmUKK3RyYW5zbGF0ZWQgaW50byB0aGUgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBjb2RlCitwb2ludHMuIEFsbCBvdGhlciBjb21iaW5hdGlvbnMgb2YgYSBjaGFyYWN0ZXIgcHJlY2VkZWQgYnkgXGUgYXJlCit1bmV4cGFuZGVkLgorLklQICJcZkJcLWZtb2R1bGVcLXByaXZhdGVcZlIiIDQKKy5JWCBJdGVtICItZm1vZHVsZS1wcml2YXRlIgorU2V0IHRoZSBkZWZhdWx0IGFjY2Vzc2liaWxpdHkgb2YgbW9kdWxlIGVudGl0aWVzIHRvIFxmKENXXCooQ2BQUklWQVRFXCooQydcZlIuCitVc2UtYXNzb2NpYXRlZCBlbnRpdGllcyB3aWxsIG5vdCBiZSBhY2Nlc3NpYmxlIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5CitkZWNsYXJlZCBhcyBcZihDV1wqKENgUFVCTElDXCooQydcZlIuCisuSVAgIlxmQlwtZmZpeGVkXC1saW5lXC1sZW5ndGhcLVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItZmZpeGVkLWxpbmUtbGVuZ3RoLW4iCitTZXQgY29sdW1uIGFmdGVyIHdoaWNoIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQgaW4gdHlwaWNhbCBmaXhlZC1mb3JtCitsaW5lcyBpbiB0aGUgc291cmNlIGZpbGUsIGFuZCB0aHJvdWdoIHdoaWNoIHNwYWNlcyBhcmUgYXNzdW1lZCAoYXMKK2lmIHBhZGRlZCB0byB0aGF0IGxlbmd0aCkgYWZ0ZXIgdGhlIGVuZHMgb2Ygc2hvcnQgZml4ZWQtZm9ybSBsaW5lcy4KKy5TcAorUG9wdWxhciB2YWx1ZXMgZm9yIFxmSW5cZlIgaW5jbHVkZSA3MiAodGhlCitzdGFuZGFyZCBhbmQgdGhlIGRlZmF1bHQpLCA4MCAoY2FyZCBpbWFnZSksIGFuZCAxMzIgKGNvcnJlc3BvbmRpbmcKK3RvIFwqKEwiZXh0ZW5kZWQtc291cmNlXCooUiIgb3B0aW9ucyBpbiBzb21lIHBvcHVsYXIgY29tcGlsZXJzKS4KK1wmXGZJblxmUiBtYXkgYWxzbyBiZSBcZkJub25lXGZSLCBtZWFuaW5nIHRoYXQgdGhlIGVudGlyZSBsaW5lIGlzIG1lYW5pbmdmdWwKK2FuZCB0aGF0IGNvbnRpbnVlZCBjaGFyYWN0ZXIgY29uc3RhbnRzIG5ldmVyIGhhdmUgaW1wbGljaXQgc3BhY2VzIGFwcGVuZGVkCit0byB0aGVtIHRvIGZpbGwgb3V0IHRoZSBsaW5lLgorXCZcZkJcLWZmaXhlZFwtbGluZVwtbGVuZ3RoXC0wXGZSIG1lYW5zIHRoZSBzYW1lIHRoaW5nIGFzCitcJlxmQlwtZmZpeGVkXC1saW5lXC1sZW5ndGhcLW5vbmVcZlIuCisuSVAgIlxmQlwtZmZyZWVcLWxpbmVcLWxlbmd0aFwtXGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mZnJlZS1saW5lLWxlbmd0aC1uIgorU2V0IGNvbHVtbiBhZnRlciB3aGljaCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkIGluIHR5cGljYWwgZnJlZS1mb3JtCitsaW5lcyBpbiB0aGUgc291cmNlIGZpbGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEzMi4KK1wmXGZJblxmUiBtYXkgYmUgXGZCbm9uZVxmUiwgbWVhbmluZyB0aGF0IHRoZSBlbnRpcmUgbGluZSBpcyBtZWFuaW5nZnVsLgorXCZcZkJcLWZmcmVlXC1saW5lXC1sZW5ndGhcLTBcZlIgbWVhbnMgdGhlIHNhbWUgdGhpbmcgYXMKK1wmXGZCXC1mZnJlZVwtbGluZVwtbGVuZ3RoXC1ub25lXGZSLgorLklQICJcZkJcLWZtYXhcLWlkZW50aWZpZXJcLWxlbmd0aD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZtYXgtaWRlbnRpZmllci1sZW5ndGg9biIKK1NwZWNpZnkgdGhlIG1heGltdW0gYWxsb3dlZCBpZGVudGlmaWVyIGxlbmd0aC4gVHlwaWNhbCB2YWx1ZXMgYXJlCiszMSAoRm9ydHJhbiA5NSkgYW5kIDYzIChGb3J0cmFuIDIwMDMgYW5kIEZvcnRyYW4gMjAwOCkuCisuSVAgIlxmQlwtZmltcGxpY2l0XC1ub25lXGZSIiA0CisuSVggSXRlbSAiLWZpbXBsaWNpdC1ub25lIgorU3BlY2lmeSB0aGF0IG5vIGltcGxpY2l0IHR5cGluZyBpcyBhbGxvd2VkLCB1bmxlc3Mgb3ZlcnJpZGRlbiBieSBleHBsaWNpdAorXCZcZihDV1wqKENgSU1QTElDSVRcKihDJ1xmUiBzdGF0ZW1lbnRzLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBhZGRpbmcKK1wmXGYoQ1dcKihDYGltcGxpY2l0IG5vbmVcKihDJ1xmUiB0byB0aGUgc3RhcnQgb2YgZXZlcnkgcHJvY2VkdXJlLgorLklQICJcZkJcLWZpbnRlZ2VyXC00XC1pbnRlZ2VyXC04XGZSIiA0CisuSVggSXRlbSAiLWZpbnRlZ2VyLTQtaW50ZWdlci04IgorUHJvbW90ZSBhbGwgXGYoQ1dcKihDYElOVEVHRVIoS0lORD00KVwqKEMnXGZSIGVudGl0aWVzIHRvIGFuIFxmKENXXCooQ2BJTlRFR0VSKEtJTkQ9OClcKihDJ1xmUgorZW50aXRpZXMuICBJZiBcZihDV1wqKENgS0lORD04XCooQydcZlIgaXMgdW5hdmFpbGFibGUsIHRoZW4gYW4gZXJyb3Igd2lsbCBiZSBpc3N1ZWQuCitUaGlzIG9wdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUgYW5kIG1heSBub3QgYmUgc3VpdGFibGUgZm9yIHlvdXIgY29kZXMuCitBcmVhcyBvZiBwb3NzaWJsZSBjb25jZXJuIGluY2x1ZGUgY2FsbHMgdG8gZXh0ZXJuYWwgcHJvY2VkdXJlcywKK2FsaWdubWVudCBpbiBcZihDV1wqKENgRVFVSVZBTEVOQ0VcKihDJ1xmUiBhbmQvb3IgXGYoQ1dcKihDYENPTU1PTlwqKEMnXGZSLCBnZW5lcmljIGludGVyZmFjZXMsCitcJlxzLTFCT1pcczAgbGl0ZXJhbCBjb25zdGFudCBjb252ZXJzaW9uLCBhbmQgSS9PLiAgSW5zcGVjdGlvbiBvZiB0aGUgaW50ZXJtZWRpYXRlCityZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJhbnNsYXRlZCBGb3J0cmFuIGNvZGUsIHByb2R1Y2VkIGJ5CitcJlxmQlwtZmR1bXBcLXRyZWVcLW9yaWdpbmFsXGZSLCBpcyBzdWdnZXN0ZWQuCisuSVAgIlxmQlwtZmNyYXlcLXBvaW50ZXJcZlIiIDQKKy5JWCBJdGVtICItZmNyYXktcG9pbnRlciIKK0VuYWJsZSB0aGUgQ3JheSBwb2ludGVyIGV4dGVuc2lvbiwgd2hpY2ggcHJvdmlkZXMgQ1wtbGlrZSBwb2ludGVyCitmdW5jdGlvbmFsaXR5LgorLklQICJcZkJcLWZvcGVubXBcZlIiIDQKKy5JWCBJdGVtICItZm9wZW5tcCIKK0VuYWJsZSB0aGUgT3Blbk1QIGV4dGVuc2lvbnMuICBUaGlzIGluY2x1ZGVzIE9wZW5NUCBcZihDV1wqKENgISRvbXBcKihDJ1xmUiBkaXJlY3RpdmVzCitpbiBmcmVlIGZvcm0KK2FuZCBcZihDV1wqKENgYyRvbXBcKihDJ1xmUiwgXGYoQ1cqJG9tcFxmUiBhbmQgXGYoQ1dcKihDYCEkb21wXCooQydcZlIgZGlyZWN0aXZlcyBpbiBmaXhlZCBmb3JtLAorXCZcZihDV1wqKENgISRcKihDJ1xmUiBjb25kaXRpb25hbCBjb21waWxhdGlvbiBzZW50aW5lbHMgaW4gZnJlZSBmb3JtCithbmQgXGYoQ1dcKihDYGMkXCooQydcZlIsIFxmKENXXCooQ2AqJFwqKEMnXGZSIGFuZCBcZihDV1wqKENgISRcKihDJ1xmUiBzZW50aW5lbHMgaW4gZml4ZWQgZm9ybSwgCithbmQgd2hlbiBsaW5raW5nIGFycmFuZ2VzIGZvciB0aGUgT3Blbk1QIHJ1bnRpbWUgbGlicmFyeSB0byBiZSBsaW5rZWQKK2luLiAgVGhlIG9wdGlvbiBcZkJcLWZvcGVubXBcZlIgaW1wbGllcyBcZkJcLWZyZWN1cnNpdmVcZlIuCisuSVAgIlxmQlwtZm5vXC1yYW5nZVwtY2hlY2tcZlIiIDQKKy5JWCBJdGVtICItZm5vLXJhbmdlLWNoZWNrIgorRGlzYWJsZSByYW5nZSBjaGVja2luZyBvbiByZXN1bHRzIG9mIHNpbXBsaWZpY2F0aW9uIG9mIGNvbnN0YW50CitleHByZXNzaW9ucyBkdXJpbmcgY29tcGlsYXRpb24uICBGb3IgZXhhbXBsZSwgXHMtMUdOVVxzMCBGb3J0cmFuIHdpbGwgZ2l2ZQorYW4gZXJyb3IgYXQgY29tcGlsZSB0aW1lIHdoZW4gc2ltcGxpZnlpbmcgXGYoQ1dcKihDYGEgPSAxLiAvIDBcKihDJ1xmUi4KK1dpdGggdGhpcyBvcHRpb24sIG5vIGVycm9yIHdpbGwgYmUgZ2l2ZW4gYW5kIFxmKENXXCooQ2BhXCooQydcZlIgd2lsbCBiZSBhc3NpZ25lZAordGhlIHZhbHVlIFxmKENXXCooQ2ArSW5maW5pdHlcKihDJ1xmUi4gIElmIGFuIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgdmFsdWUKK291dHNpZGUgb2YgdGhlIHJlbGV2YW50IHJhbmdlIG9mIFtcZihDV1wqKENgXC1IVUdFKClcKihDJ1xmUjpcZihDV1wqKENgSFVHRSgpXCooQydcZlJdLAordGhlbiB0aGUgZXhwcmVzc2lvbiB3aWxsIGJlIHJlcGxhY2VkIGJ5IFxmKENXXCooQ2BcLUluZlwqKEMnXGZSIG9yIFxmKENXXCooQ2ArSW5mXCooQydcZlIKK2FzIGFwcHJvcHJpYXRlLgorU2ltaWxhcmx5LCBcZihDV1wqKENgREFUQSBpL1pcKihBcUZGRkZGRkZGXCooQXEvXCooQydcZlIgd2lsbCByZXN1bHQgaW4gYW4gaW50ZWdlciBvdmVyZmxvdworb24gbW9zdCBzeXN0ZW1zLCBidXQgd2l0aCBcZkJcLWZub1wtcmFuZ2VcLWNoZWNrXGZSIHRoZSB2YWx1ZSB3aWxsCitcJlwqKEwid3JhcCBhcm91bmRcKihSIiBhbmQgXGYoQ1dcKihDYGlcKihDJ1xmUiB3aWxsIGJlIGluaXRpYWxpemVkIHRvIFwtMSBpbnN0ZWFkLgorLklQICJcZkJcLWZyZWFsXC00XC1yZWFsXC04XGZSIiA0CisuSVggSXRlbSAiLWZyZWFsLTQtcmVhbC04IgorLlBEIDAKKy5JUCAiXGZCXC1mcmVhbFwtNFwtcmVhbFwtMTBcZlIiIDQKKy5JWCBJdGVtICItZnJlYWwtNC1yZWFsLTEwIgorLklQICJcZkJcLWZyZWFsXC04XC1yZWFsXC00XGZSIiA0CisuSVggSXRlbSAiLWZyZWFsLTgtcmVhbC00IgorLklQICJcZkJcLWZyZWFsXC04XC1yZWFsXC0xMFxmUiIgNAorLklYIEl0ZW0gIi1mcmVhbC04LXJlYWwtMTAiCisuSVAgIlxmQlwtZnJlYWxcLThcLXJlYWxcLTE2XGZSIiA0CisuSVggSXRlbSAiLWZyZWFsLTgtcmVhbC0xNiIKKy5QRAorUHJvbW90ZSBhbGwgXGYoQ1dcKihDYFJFQUwoS0lORD1NKVwqKEMnXGZSIGVudGl0aWVzIHRvIFxmKENXXCooQ2BSRUFMKEtJTkQ9TilcKihDJ1xmUiBlbnRpdGllcy4KK0lmIFxmKENXXCooQ2BSRUFMKEtJTkQ9TilcKihDJ1xmUiBpcyB1bmF2YWlsYWJsZSwgdGhlbiBhbiBlcnJvciB3aWxsIGJlIGlzc3VlZC4KK0FsbCBvdGhlciByZWFsIGtpbmQgdHlwZXMgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb24uCitUaGVzZSBvcHRpb25zIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZSBhbmQgbWF5IG5vdCBiZSBzdWl0YWJsZSBmb3IgeW91cgorY29kZXMuICBBcmVhcyBvZiBwb3NzaWJsZSBjb25jZXJuIGluY2x1ZGUgY2FsbHMgdG8gZXh0ZXJuYWwgcHJvY2VkdXJlcywKK2FsaWdubWVudCBpbiBcZihDV1wqKENgRVFVSVZBTEVOQ0VcKihDJ1xmUiBhbmQvb3IgXGYoQ1dcKihDYENPTU1PTlwqKEMnXGZSLCBnZW5lcmljIGludGVyZmFjZXMsCitcJlxzLTFCT1pcczAgbGl0ZXJhbCBjb25zdGFudCBjb252ZXJzaW9uLCBhbmQgSS9PLiAgSW5zcGVjdGlvbiBvZiB0aGUgaW50ZXJtZWRpYXRlCityZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJhbnNsYXRlZCBGb3J0cmFuIGNvZGUsIHByb2R1Y2VkIGJ5CitcJlxmQlwtZmR1bXBcLXRyZWVcLW9yaWdpbmFsXGZSLCBpcyBzdWdnZXN0ZWQuCisuSVAgIlxmQlwtc3RkPVxmUlxmSXN0ZFxmUiIgNAorLklYIEl0ZW0gIi1zdGQ9c3RkIgorU3BlY2lmeSB0aGUgc3RhbmRhcmQgdG8gd2hpY2ggdGhlIHByb2dyYW0gaXMgZXhwZWN0ZWQgdG8gY29uZm9ybSwgd2hpY2gKK21heSBiZSBvbmUgb2YgXGZCZjk1XGZSLCBcZkJmMjAwM1xmUiwgXGZCZjIwMDhcZlIsIFxmQmdudVxmUiwgb3IKK1wmXGZCbGVnYWN5XGZSLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFxmSXN0ZFxmUiBpcyBcZkJnbnVcZlIsIHdoaWNoCitzcGVjaWZpZXMgYSBzdXBlcnNldCBvZiB0aGUgRm9ydHJhbiA5NSBzdGFuZGFyZCB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUKK2V4dGVuc2lvbnMgc3VwcG9ydGVkIGJ5IFxzLTFHTlVcczAgRm9ydHJhbiwgYWx0aG91Z2ggd2FybmluZ3Mgd2lsbCBiZSBnaXZlbiBmb3IKK29ic29sZXRlIGV4dGVuc2lvbnMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UgaW4gbmV3IGNvZGUuICBUaGUKK1wmXGZCbGVnYWN5XGZSIHZhbHVlIGlzIGVxdWl2YWxlbnQgYnV0IHdpdGhvdXQgdGhlIHdhcm5pbmdzIGZvciBvYnNvbGV0ZQorZXh0ZW5zaW9ucywgYW5kIG1heSBiZSB1c2VmdWwgZm9yIG9sZCBub24tc3RhbmRhcmQgcHJvZ3JhbXMuICBUaGUKK1wmXGZCZjk1XGZSLCBcZkJmMjAwM1xmUiBhbmQgXGZCZjIwMDhcZlIgdmFsdWVzIHNwZWNpZnkgc3RyaWN0Citjb25mb3JtYW5jZSB0byB0aGUgRm9ydHJhbiA5NSwgRm9ydHJhbiAyMDAzIGFuZCBGb3J0cmFuIDIwMDggc3RhbmRhcmRzLAorcmVzcGVjdGl2ZWx5OyBlcnJvcnMgYXJlIGdpdmVuIGZvciBhbGwgZXh0ZW5zaW9ucyBiZXlvbmQgdGhlIHJlbGV2YW50CitsYW5ndWFnZSBzdGFuZGFyZCwgYW5kIHdhcm5pbmdzIGFyZSBnaXZlbiBmb3IgdGhlIEZvcnRyYW4gNzcgZmVhdHVyZXMKK3RoYXQgYXJlIHBlcm1pdHRlZCBidXQgb2Jzb2xlc2NlbnQgaW4gbGF0ZXIgc3RhbmRhcmRzLiBcZkJcLXN0ZD1mMjAwOHRzXGZSCithbGxvd3MgdGhlIEZvcnRyYW4gMjAwOCBzdGFuZGFyZCBpbmNsdWRpbmcgdGhlIGFkZGl0aW9ucyBvZiB0aGUgCitUZWNobmljYWwgU3BlY2lmaWNhdGlvbiAoXHMtMVRTXHMwKSAyOTExMyBvbiBGdXJ0aGVyIEludGVyb3BlcmFiaWxpdHkgb2YgRm9ydHJhbgord2l0aCBDLgorLlNTICJFbmFibGUgYW5kIGN1c3RvbWl6ZSBwcmVwcm9jZXNzaW5nIgorLklYIFN1YnNlY3Rpb24gIkVuYWJsZSBhbmQgY3VzdG9taXplIHByZXByb2Nlc3NpbmciCitQcmVwcm9jZXNzb3IgcmVsYXRlZCBvcHRpb25zLiBTZWUgc2VjdGlvbiAKK1wmXGZCUHJlcHJvY2Vzc2luZyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb25cZlIgZm9yIG1vcmUgZGV0YWlsZWQKK2luZm9ybWF0aW9uIG9uIHByZXByb2Nlc3NpbmcgaW4gXGZCZ2ZvcnRyYW5cZlIuCisuSVAgIlxmQlwtY3BwXGZSIiA0CisuSVggSXRlbSAiLWNwcCIKKy5QRCAwCisuSVAgIlxmQlwtbm9jcHBcZlIiIDQKKy5JWCBJdGVtICItbm9jcHAiCisuUEQKK0VuYWJsZSBwcmVwcm9jZXNzaW5nLiBUaGUgcHJlcHJvY2Vzc29yIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCBpZgordGhlIGZpbGUgZXh0ZW5zaW9uIGlzIFxmSS5mcHBcZlIsIFxmSS5GUFBcZlIsICBcZkkuRlxmUiwgXGZJLkZPUlxmUiwKK1wmXGZJLkZUTlxmUiwgXGZJLkY5MFxmUiwgXGZJLkY5NVxmUiwgXGZJLkYwM1xmUiBvciBcZkkuRjA4XGZSLiBVc2UKK3RoaXMgb3B0aW9uIHRvIG1hbnVhbGx5IGVuYWJsZSBwcmVwcm9jZXNzaW5nIG9mIGFueSBraW5kIG9mIEZvcnRyYW4gZmlsZS4KKy5TcAorVG8gZGlzYWJsZSBwcmVwcm9jZXNzaW5nIG9mIGZpbGVzIHdpdGggYW55IG9mIHRoZSBhYm92ZSBsaXN0ZWQgZXh0ZW5zaW9ucywKK3VzZSB0aGUgbmVnYXRpdmUgZm9ybTogXGZCXC1ub2NwcFxmUi4KKy5TcAorVGhlIHByZXByb2Nlc3NvciBpcyBydW4gaW4gdHJhZGl0aW9uYWwgbW9kZS4gQW55IHJlc3RyaWN0aW9ucyBvZiB0aGUKK2ZpbGUtZm9ybWF0LCBlc3BlY2lhbGx5IHRoZSBsaW1pdHMgb24gbGluZSBsZW5ndGgsIGFwcGx5IGZvcgorcHJlcHJvY2Vzc2VkIG91dHB1dCBhcyB3ZWxsLCBzbyBpdCBtaWdodCBiZSBhZHZpc2FibGUgdG8gdXNlIHRoZQorXCZcZkJcLWZmcmVlXC1saW5lXC1sZW5ndGhcLW5vbmVcZlIgb3IgXGZCXC1mZml4ZWRcLWxpbmVcLWxlbmd0aFwtbm9uZVxmUgorb3B0aW9ucy4KKy5JUCAiXGZCXC1kTVxmUiIgNAorLklYIEl0ZW0gIi1kTSIKK0luc3RlYWQgb2YgdGhlIG5vcm1hbCBvdXRwdXQsIGdlbmVyYXRlIGEgbGlzdCBvZiBcZihDV1wqKEFxI2RlZmluZVwqKEFxXGZSCitkaXJlY3RpdmVzIGZvciBhbGwgdGhlIG1hY3JvcyBkZWZpbmVkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZQorcHJlcHJvY2Vzc29yLCBpbmNsdWRpbmcgcHJlZGVmaW5lZCBtYWNyb3MuIFRoaXMgZ2l2ZXMgeW91IGEgd2F5CitvZiBmaW5kaW5nIG91dCB3aGF0IGlzIHByZWRlZmluZWQgaW4geW91ciB2ZXJzaW9uIG9mIHRoZSBwcmVwcm9jZXNzb3IuCitBc3N1bWluZyB5b3UgaGF2ZSBubyBmaWxlIFxmSWZvby5mOTBcZlIsIHRoZSBjb21tYW5kCisuU3AKKy5WYiAxCitcJiAgICAgICAgICB0b3VjaCBmb28uZjkwOyBnZm9ydHJhbiBcLWNwcCBcLUUgXC1kTSBmb28uZjkwCisuVmUKKy5TcAord2lsbCBzaG93IGFsbCB0aGUgcHJlZGVmaW5lZCBtYWNyb3MuCisuSVAgIlxmQlwtZERcZlIiIDQKKy5JWCBJdGVtICItZEQiCitMaWtlIFxmQlwtZE1cZlIgZXhjZXB0IGluIHR3byByZXNwZWN0czogaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUKK3ByZWRlZmluZWQgbWFjcm9zLCBhbmQgaXQgb3V0cHV0cyBib3RoIHRoZSBcZihDV1wqKENgI2RlZmluZVwqKEMnXGZSIGRpcmVjdGl2ZXMKK2FuZCB0aGUgcmVzdWx0IG9mIHByZXByb2Nlc3NpbmcuIEJvdGgga2luZHMgb2Ygb3V0cHV0IGdvIHRvIHRoZQorc3RhbmRhcmQgb3V0cHV0IGZpbGUuCisuSVAgIlxmQlwtZE5cZlIiIDQKKy5JWCBJdGVtICItZE4iCitMaWtlIFxmQlwtZERcZlIsIGJ1dCBlbWl0IG9ubHkgdGhlIG1hY3JvIG5hbWVzLCBub3QgdGhlaXIgZXhwYW5zaW9ucy4KKy5JUCAiXGZCXC1kVVxmUiIgNAorLklYIEl0ZW0gIi1kVSIKK0xpa2UgXGZCZERcZlIgZXhjZXB0IHRoYXQgb25seSBtYWNyb3MgdGhhdCBhcmUgZXhwYW5kZWQsIG9yIHdob3NlCitkZWZpbmVkbmVzcyBpcyB0ZXN0ZWQgaW4gcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFyZSBvdXRwdXQ7IHRoZSAKK291dHB1dCBpcyBkZWxheWVkIHVudGlsIHRoZSB1c2Ugb3IgdGVzdCBvZiB0aGUgbWFjcm87IGFuZCBcZihDV1wqKEFxI3VuZGVmXCooQXFcZlIKK2RpcmVjdGl2ZXMgYXJlIGFsc28gb3V0cHV0IGZvciBtYWNyb3MgdGVzdGVkIGJ1dCB1bmRlZmluZWQgYXQgdGhlIHRpbWUuCisuSVAgIlxmQlwtZElcZlIiIDQKKy5JWCBJdGVtICItZEkiCitPdXRwdXQgXGYoQ1dcKihBcSNpbmNsdWRlXCooQXFcZlIgZGlyZWN0aXZlcyBpbiBhZGRpdGlvbiB0byB0aGUgcmVzdWx0CitvZiBwcmVwcm9jZXNzaW5nLgorLklQICJcZkJcLWZ3b3JraW5nXC1kaXJlY3RvcnlcZlIiIDQKKy5JWCBJdGVtICItZndvcmtpbmctZGlyZWN0b3J5IgorRW5hYmxlIGdlbmVyYXRpb24gb2YgbGluZW1hcmtlcnMgaW4gdGhlIHByZXByb2Nlc3NvciBvdXRwdXQgdGhhdCB3aWxsCitsZXQgdGhlIGNvbXBpbGVyIGtub3cgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYXQgdGhlIHRpbWUgb2YKK3ByZXByb2Nlc3NpbmcuIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIHByZXByb2Nlc3NvciB3aWxsIGVtaXQsCithZnRlciB0aGUgaW5pdGlhbCBsaW5lbWFya2VyLCBhIHNlY29uZCBsaW5lbWFya2VyIHdpdGggdGhlIGN1cnJlbnQKK3dvcmtpbmcgZGlyZWN0b3J5IGZvbGxvd2VkIGJ5IHR3byBzbGFzaGVzLiBccy0xR0NDXHMwIHdpbGwgdXNlIHRoaXMgZGlyZWN0b3J5LAord2hlbiBpdCBpcyBwcmVzZW50IGluIHRoZSBwcmVwcm9jZXNzZWQgaW5wdXQsIGFzIHRoZSBkaXJlY3RvcnkgZW1pdHRlZAorYXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaW4gc29tZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9ybWF0cy4KK1RoaXMgb3B0aW9uIGlzIGltcGxpY2l0bHkgZW5hYmxlZCBpZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgZW5hYmxlZCwKK2J1dCB0aGlzIGNhbiBiZSBpbmhpYml0ZWQgd2l0aCB0aGUgbmVnYXRlZCBmb3JtCitcJlxmQlwtZm5vXC13b3JraW5nXC1kaXJlY3RvcnlcZlIuIElmIHRoZSBcZkJcLVBcZlIgZmxhZyBpcyBwcmVzZW50CitpbiB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LCBzaW5jZSBubyBcZihDV1wqKENgI2xpbmVcKihDJ1xmUgorZGlyZWN0aXZlcyBhcmUgZW1pdHRlZCB3aGF0c29ldmVyLgorLklQICJcZkJcLWlkaXJhZnRlclxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItaWRpcmFmdGVyIGRpciIKK1NlYXJjaCBcZklkaXJcZlIgZm9yIGluY2x1ZGUgZmlsZXMsIGJ1dCBkbyBpdCBhZnRlciBhbGwgZGlyZWN0b3JpZXMKK3NwZWNpZmllZCB3aXRoIFxmQlwtSVxmUiBhbmQgdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcyBoYXZlCitiZWVuIGV4aGF1c3RlZC4gXGZJZGlyXGZSIGlzIHRyZWF0ZWQgYXMgYSBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCitJZiBkaXIgYmVnaW5zIHdpdGggXGYoQ1dcKihDYD1cKihDJ1xmUiwgdGhlbiB0aGUgXGYoQ1dcKihDYD1cKihDJ1xmUiB3aWxsIGJlIHJlcGxhY2VkIGJ5Cit0aGUgc3lzcm9vdCBwcmVmaXg7IHNlZSBcZkJcLVwtc3lzcm9vdFxmUiBhbmQgXGZCXC1pc3lzcm9vdFxmUi4KKy5JUCAiXGZCXC1pbXVsdGlsaWJcZlIgXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLWltdWx0aWxpYiBkaXIiCitVc2UgXGZJZGlyXGZSIGFzIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0YXJnZXQtc3BlY2lmaWMKK1wmXCooQysgaGVhZGVycy4KKy5JUCAiXGZCXC1pcHJlZml4XGZSIFxmSXByZWZpeFxmUiIgNAorLklYIEl0ZW0gIi1pcHJlZml4IHByZWZpeCIKK1NwZWNpZnkgXGZJcHJlZml4XGZSIGFzIHRoZSBwcmVmaXggZm9yIHN1YnNlcXVlbnQgXGZCXC1pd2l0aHByZWZpeFxmUgorb3B0aW9ucy4gSWYgdGhlIFxmSXByZWZpeFxmUiByZXByZXNlbnRzIGEgZGlyZWN0b3J5LCB5b3Ugc2hvdWxkIGluY2x1ZGUKK3RoZSBmaW5hbCBcZihDV1wqKEFxL1wqKEFxXGZSLgorLklQICJcZkJcLWlzeXNyb290XGZSIFxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pc3lzcm9vdCBkaXIiCitUaGlzIG9wdGlvbiBpcyBsaWtlIHRoZSBcZkJcLVwtc3lzcm9vdFxmUiBvcHRpb24sIGJ1dCBhcHBsaWVzIG9ubHkgdG8KK2hlYWRlciBmaWxlcy4gU2VlIHRoZSBcZkJcLVwtc3lzcm9vdFxmUiBvcHRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtaXF1b3RlXGZSIFxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pcXVvdGUgZGlyIgorU2VhcmNoIFxmSWRpclxmUiBvbmx5IGZvciBoZWFkZXIgZmlsZXMgcmVxdWVzdGVkIHdpdGggXGYoQ1dcKihDYCNpbmNsdWRlICJmaWxlIlwqKEMnXGZSOwordGhleSBhcmUgbm90IHNlYXJjaGVkIGZvciBcZihDV1wqKENgI2luY2x1ZGUgPGZpbGU+XCooQydcZlIsIGJlZm9yZSBhbGwgZGlyZWN0b3JpZXMKK3NwZWNpZmllZCBieSBcZkJcLUlcZlIgYW5kIGJlZm9yZSB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzLiBJZgorXCZcZklkaXJcZlIgYmVnaW5zIHdpdGggXGYoQ1dcKihDYD1cKihDJ1xmUiwgdGhlbiB0aGUgXGYoQ1dcKihDYD1cKihDJ1xmUiB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZQorc3lzcm9vdCBwcmVmaXg7IHNlZSBcZkJcLVwtc3lzcm9vdFxmUiBhbmQgXGZCXC1pc3lzcm9vdFxmUi4KKy5JUCAiXGZCXC1pc3lzdGVtXGZSIFxmSWRpclxmUiIgNAorLklYIEl0ZW0gIi1pc3lzdGVtIGRpciIKK1NlYXJjaCBcZklkaXJcZlIgZm9yIGhlYWRlciBmaWxlcywgYWZ0ZXIgYWxsIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieQorXCZcZkJcLUlcZlIgYnV0IGJlZm9yZSB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzLiBNYXJrIGl0IGFzIGEKK3N5c3RlbSBkaXJlY3RvcnksIHNvIHRoYXQgaXQgZ2V0cyB0aGUgc2FtZSBzcGVjaWFsIHRyZWF0bWVudCBhcyBpcworYXBwbGllZCB0byB0aGUgc3RhbmRhcmQgc3lzdGVtIGRpcmVjdG9yaWVzLiBJZiBcZklkaXJcZlIgYmVnaW5zIHdpdGgKK1wmXGYoQ1dcKihDYD1cKihDJ1xmUiwgdGhlbiB0aGUgXGYoQ1dcKihDYD1cKihDJ1xmUiB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBzeXNyb290IHByZWZpeDsKK3NlZSBcZkJcLVwtc3lzcm9vdFxmUiBhbmQgXGZCXC1pc3lzcm9vdFxmUi4KKy5JUCAiXGZCXC1ub3N0ZGluY1xmUiIgNAorLklYIEl0ZW0gIi1ub3N0ZGluYyIKK0RvIG5vdCBzZWFyY2ggdGhlIHN0YW5kYXJkIHN5c3RlbSBkaXJlY3RvcmllcyBmb3IgaGVhZGVyIGZpbGVzLiBPbmx5Cit0aGUgZGlyZWN0b3JpZXMgeW91IGhhdmUgc3BlY2lmaWVkIHdpdGggXGZCXC1JXGZSIG9wdGlvbnMgKGFuZCB0aGUKK2RpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBmaWxlLCBpZiBhcHByb3ByaWF0ZSkgYXJlIHNlYXJjaGVkLgorLklQICJcZkJcLXVuZGVmXGZSIiA0CisuSVggSXRlbSAiLXVuZGVmIgorRG8gbm90IHByZWRlZmluZSBhbnkgc3lzdGVtLXNwZWNpZmljIG9yIEdDQy1zcGVjaWZpYyBtYWNyb3MuCitUaGUgc3RhbmRhcmQgcHJlZGVmaW5lZCBtYWNyb3MgcmVtYWluIGRlZmluZWQuCisuSVAgIlxmQlwtQVxmUlxmSXByZWRpY2F0ZVxmUlxmQj1cZlJcZklhbnN3ZXJcZlIiIDQKKy5JWCBJdGVtICItQXByZWRpY2F0ZT1hbnN3ZXIiCitNYWtlIGFuIGFzc2VydGlvbiB3aXRoIHRoZSBwcmVkaWNhdGUgXGZJcHJlZGljYXRlXGZSIGFuZCBhbnN3ZXIgXGZJYW5zd2VyXGZSLgorVGhpcyBmb3JtIGlzIHByZWZlcnJlZCB0byB0aGUgb2xkZXIgZm9ybSBcLUEgcHJlZGljYXRlKGFuc3dlciksIHdoaWNoIGlzIHN0aWxsCitzdXBwb3J0ZWQsIGJlY2F1c2UgaXQgZG9lcyBub3QgdXNlIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4KKy5JUCAiXGZCXC1BXC1cZlJcZklwcmVkaWNhdGVcZlJcZkI9XGZSXGZJYW5zd2VyXGZSIiA0CisuSVggSXRlbSAiLUEtcHJlZGljYXRlPWFuc3dlciIKK0NhbmNlbCBhbiBhc3NlcnRpb24gd2l0aCB0aGUgcHJlZGljYXRlIFxmSXByZWRpY2F0ZVxmUiBhbmQgYW5zd2VyIFxmSWFuc3dlclxmUi4KKy5JUCAiXGZCXC1DXGZSIiA0CisuSVggSXRlbSAiLUMiCitEbyBub3QgZGlzY2FyZCBjb21tZW50cy4gQWxsIGNvbW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgb3V0cHV0CitmaWxlLCBleGNlcHQgZm9yIGNvbW1lbnRzIGluIHByb2Nlc3NlZCBkaXJlY3RpdmVzLCB3aGljaCBhcmUgZGVsZXRlZAorYWxvbmcgd2l0aCB0aGUgZGlyZWN0aXZlLgorLlNwCitZb3Ugc2hvdWxkIGJlIHByZXBhcmVkIGZvciBzaWRlIGVmZmVjdHMgd2hlbiB1c2luZyBcZkJcLUNcZlI7IGl0IGNhdXNlcwordGhlIHByZXByb2Nlc3NvciB0byB0cmVhdCBjb21tZW50cyBhcyB0b2tlbnMgaW4gdGhlaXIgb3duIHJpZ2h0LiBGb3IgZXhhbXBsZSwKK2NvbW1lbnRzIGFwcGVhcmluZyBhdCB0aGUgc3RhcnQgb2Ygd2hhdCB3b3VsZCBiZSBhIGRpcmVjdGl2ZSBsaW5lIGhhdmUgdGhlCitlZmZlY3Qgb2YgdHVybmluZyB0aGF0IGxpbmUgaW50byBhbiBvcmRpbmFyeSBzb3VyY2UgbGluZSwgc2luY2UgdGhlIGZpcnN0Cit0b2tlbiBvbiB0aGUgbGluZSBpcyBubyBsb25nZXIgYSBcZihDV1wqKEFxI1wqKEFxXGZSLgorLlNwCitXYXJuaW5nOiB0aGlzIGN1cnJlbnRseSBoYW5kbGVzIENcLVN0eWxlIGNvbW1lbnRzIG9ubHkuIFRoZSBwcmVwcm9jZXNzb3IKK2RvZXMgbm90IHlldCByZWNvZ25pemUgRm9ydHJhbi1zdHlsZSBjb21tZW50cy4KKy5JUCAiXGZCXC1DQ1xmUiIgNAorLklYIEl0ZW0gIi1DQyIKK0RvIG5vdCBkaXNjYXJkIGNvbW1lbnRzLCBpbmNsdWRpbmcgZHVyaW5nIG1hY3JvIGV4cGFuc2lvbi4gVGhpcyBpcyBsaWtlCitcJlxmQlwtQ1xmUiwgZXhjZXB0IHRoYXQgY29tbWVudHMgY29udGFpbmVkIHdpdGhpbiBtYWNyb3MgYXJlIGFsc28gcGFzc2VkCit0aHJvdWdoIHRvIHRoZSBvdXRwdXQgZmlsZSB3aGVyZSB0aGUgbWFjcm8gaXMgZXhwYW5kZWQuCisuU3AKK0luIGFkZGl0aW9uIHRvIHRoZSBzaWRlLWVmZmVjdHMgb2YgdGhlIFxmQlwtQ1xmUiBvcHRpb24sIHRoZSBcZkJcLUNDXGZSCitvcHRpb24gY2F1c2VzIGFsbCBcKihDK1wtc3R5bGUgY29tbWVudHMgaW5zaWRlIGEgbWFjcm8gdG8gYmUgY29udmVydGVkIHRvIENcLXN0eWxlCitjb21tZW50cy4gVGhpcyBpcyB0byBwcmV2ZW50IGxhdGVyIHVzZSBvZiB0aGF0IG1hY3JvIGZyb20gaW5hZHZlcnRlbnRseQorY29tbWVudGluZyBvdXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgc291cmNlIGxpbmUuIFRoZSBcZkJcLUNDXGZSIG9wdGlvbgoraXMgZ2VuZXJhbGx5IHVzZWQgdG8gc3VwcG9ydCBsaW50IGNvbW1lbnRzLgorLlNwCitXYXJuaW5nOiB0aGlzIGN1cnJlbnRseSBoYW5kbGVzIENcLSBhbmQgXCooQytcLVN0eWxlIGNvbW1lbnRzIG9ubHkuIFRoZQorcHJlcHJvY2Vzc29yIGRvZXMgbm90IHlldCByZWNvZ25pemUgRm9ydHJhbi1zdHlsZSBjb21tZW50cy4KKy5JUCAiXGZCXC1EXGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1EbmFtZSIKK1ByZWRlZmluZSBuYW1lIGFzIGEgbWFjcm8sIHdpdGggZGVmaW5pdGlvbiBcZihDVzFcZlIuCisuSVAgIlxmQlwtRFxmUlxmSW5hbWVcZlJcZkI9XGZSXGZJZGVmaW5pdGlvblxmUiIgNAorLklYIEl0ZW0gIi1EbmFtZT1kZWZpbml0aW9uIgorVGhlIGNvbnRlbnRzIG9mIFxmSWRlZmluaXRpb25cZlIgYXJlIHRva2VuaXplZCBhbmQgcHJvY2Vzc2VkIGFzIGlmIHRoZXkKK2FwcGVhcmVkIGR1cmluZyB0cmFuc2xhdGlvbiBwaGFzZSB0aHJlZSBpbiBhIFxmKENXXCooQXEjZGVmaW5lXCooQXFcZlIgZGlyZWN0aXZlLgorSW4gcGFydGljdWxhciwgdGhlIGRlZmluaXRpb24gd2lsbCBiZSB0cnVuY2F0ZWQgYnkgZW1iZWRkZWQgbmV3bGluZQorY2hhcmFjdGVycy4KKy5TcAorSWYgeW91IGFyZSBpbnZva2luZyB0aGUgcHJlcHJvY2Vzc29yIGZyb20gYSBzaGVsbCBvciBzaGVsbC1saWtlIHByb2dyYW0KK3lvdSBtYXkgbmVlZCB0byB1c2UgdGhlIHNoZWxsJ3MgcXVvdGluZyBzeW50YXggdG8gcHJvdGVjdCBjaGFyYWN0ZXJzIHN1Y2gKK2FzIHNwYWNlcyB0aGF0IGhhdmUgYSBtZWFuaW5nIGluIHRoZSBzaGVsbCBzeW50YXguCisuU3AKK0lmIHlvdSB3aXNoIHRvIGRlZmluZSBhIGZ1bmN0aW9uLWxpa2UgbWFjcm8gb24gdGhlIGNvbW1hbmQgbGluZSwgd3JpdGUKK2l0cyBhcmd1bWVudCBsaXN0IHdpdGggc3Vycm91bmRpbmcgcGFyZW50aGVzZXMgYmVmb3JlIHRoZSBlcXVhbHMgc2lnbgorKGlmIGFueSkuIFBhcmVudGhlc2VzIGFyZSBtZWFuaW5nZnVsIHRvIG1vc3Qgc2hlbGxzLCBzbyB5b3Ugd2lsbCBuZWVkCit0byBxdW90ZSB0aGUgb3B0aW9uLiBXaXRoIHNoIGFuZCBjc2gsIFxmKENXXCooQ2BcLURcKihBcW5hbWUoYXJncy4uLik9ZGVmaW5pdGlvblwqKEFxXCooQydcZlIKK3dvcmtzLgorLlNwCitcJlxmQlwtRFxmUiBhbmQgXGZCXC1VXGZSIG9wdGlvbnMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUKK2dpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuIEFsbCBcLWltYWNyb3MgZmlsZSBhbmQgXC1pbmNsdWRlIGZpbGUgb3B0aW9ucworYXJlIHByb2Nlc3NlZCBhZnRlciBhbGwgXC1EIGFuZCBcLVUgb3B0aW9ucy4KKy5JUCAiXGZCXC1IXGZSIiA0CisuSVggSXRlbSAiLUgiCitQcmludCB0aGUgbmFtZSBvZiBlYWNoIGhlYWRlciBmaWxlIHVzZWQsIGluIGFkZGl0aW9uIHRvIG90aGVyIG5vcm1hbAorYWN0aXZpdGllcy4gRWFjaCBuYW1lIGlzIGluZGVudGVkIHRvIHNob3cgaG93IGRlZXAgaW4gdGhlIFxmKENXXCooQXEjaW5jbHVkZVwqKEFxXGZSCitzdGFjayBpdCBpcy4KKy5JUCAiXGZCXC1QXGZSIiA0CisuSVggSXRlbSAiLVAiCitJbmhpYml0IGdlbmVyYXRpb24gb2YgbGluZW1hcmtlcnMgaW4gdGhlIG91dHB1dCBmcm9tIHRoZSBwcmVwcm9jZXNzb3IuCitUaGlzIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIHJ1bm5pbmcgdGhlIHByZXByb2Nlc3NvciBvbiBzb21ldGhpbmcgdGhhdAoraXMgbm90IEMgY29kZSwgYW5kIHdpbGwgYmUgc2VudCB0byBhIHByb2dyYW0gd2hpY2ggbWlnaHQgYmUgY29uZnVzZWQKK2J5IHRoZSBsaW5lbWFya2Vycy4KKy5JUCAiXGZCXC1VXGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1VbmFtZSIKK0NhbmNlbCBhbnkgcHJldmlvdXMgZGVmaW5pdGlvbiBvZiBcZkluYW1lXGZSLCBlaXRoZXIgYnVpbHQgaW4gb3IgcHJvdmlkZWQKK3dpdGggYSBcZkJcLURcZlIgb3B0aW9uLgorLlNTICJPcHRpb25zIHRvIHJlcXVlc3Qgb3Igc3VwcHJlc3MgZXJyb3JzIGFuZCB3YXJuaW5ncyIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIHRvIHJlcXVlc3Qgb3Igc3VwcHJlc3MgZXJyb3JzIGFuZCB3YXJuaW5ncyIKK0Vycm9ycyBhcmUgZGlhZ25vc3RpYyBtZXNzYWdlcyB0aGF0IHJlcG9ydCB0aGF0IHRoZSBccy0xR05VXHMwIEZvcnRyYW4gY29tcGlsZXIKK2Nhbm5vdCBjb21waWxlIHRoZSByZWxldmFudCBwaWVjZSBvZiBzb3VyY2UgY29kZS4gIFRoZSBjb21waWxlciB3aWxsCitjb250aW51ZSB0byBwcm9jZXNzIHRoZSBwcm9ncmFtIGluIGFuIGF0dGVtcHQgdG8gcmVwb3J0IGZ1cnRoZXIgZXJyb3JzCit0byBhaWQgaW4gZGVidWdnaW5nLCBidXQgd2lsbCBub3QgcHJvZHVjZSBhbnkgY29tcGlsZWQgb3V0cHV0LgorLlBQCitXYXJuaW5ncyBhcmUgZGlhZ25vc3RpYyBtZXNzYWdlcyB0aGF0IHJlcG9ydCBjb25zdHJ1Y3Rpb25zIHdoaWNoCithcmUgbm90IGluaGVyZW50bHkgZXJyb25lb3VzIGJ1dCB3aGljaCBhcmUgcmlza3kgb3Igc3VnZ2VzdCB0aGVyZSBpcworbGlrZWx5IHRvIGJlIGEgYnVnIGluIHRoZSBwcm9ncmFtLiAgVW5sZXNzIFxmQlwtV2Vycm9yXGZSIGlzIHNwZWNpZmllZCwKK3RoZXkgZG8gbm90IHByZXZlbnQgY29tcGlsYXRpb24gb2YgdGhlIHByb2dyYW0uCisuUFAKK1lvdSBjYW4gcmVxdWVzdCBtYW55IHNwZWNpZmljIHdhcm5pbmdzIHdpdGggb3B0aW9ucyBiZWdpbm5pbmcgXGZCXC1XXGZSLAorZm9yIGV4YW1wbGUgXGZCXC1XaW1wbGljaXRcZlIgdG8gcmVxdWVzdCB3YXJuaW5ncyBvbiBpbXBsaWNpdAorZGVjbGFyYXRpb25zLiAgRWFjaCBvZiB0aGVzZSBzcGVjaWZpYyB3YXJuaW5nIG9wdGlvbnMgYWxzbyBoYXMgYQorbmVnYXRpdmUgZm9ybSBiZWdpbm5pbmcgXGZCXC1Xbm9cLVxmUiB0byB0dXJuIG9mZiB3YXJuaW5nczsKK2ZvciBleGFtcGxlLCBcZkJcLVdub1wtaW1wbGljaXRcZlIuICBUaGlzIG1hbnVhbCBsaXN0cyBvbmx5IG9uZSBvZiB0aGUKK3R3byBmb3Jtcywgd2hpY2hldmVyIGlzIG5vdCB0aGUgZGVmYXVsdC4KKy5QUAorVGhlc2Ugb3B0aW9ucyBjb250cm9sIHRoZSBhbW91bnQgYW5kIGtpbmRzIG9mIGVycm9ycyBhbmQgd2FybmluZ3MgcHJvZHVjZWQKK2J5IFxzLTFHTlVcczAgRm9ydHJhbjoKKy5JUCAiXGZCXC1mbWF4XC1lcnJvcnM9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mbWF4LWVycm9ycz1uIgorTGltaXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvciBtZXNzYWdlcyB0byBcZkluXGZSLCBhdCB3aGljaCBwb2ludAorXCZccy0xR05VXHMwIEZvcnRyYW4gYmFpbHMgb3V0IHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGUKK3NvdXJjZSBjb2RlLiAgSWYgXGZJblxmUiBpcyAwLCB0aGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGVycm9yCittZXNzYWdlcyBwcm9kdWNlZC4KKy5JUCAiXGZCXC1mc3ludGF4XC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLWZzeW50YXgtb25seSIKK0NoZWNrIHRoZSBjb2RlIGZvciBzeW50YXggZXJyb3JzLCBidXQgZG8gbm90IGFjdHVhbGx5IGNvbXBpbGUgaXQuICBUaGlzCit3aWxsIGdlbmVyYXRlIG1vZHVsZSBmaWxlcyBmb3IgZWFjaCBtb2R1bGUgcHJlc2VudCBpbiB0aGUgY29kZSwgYnV0IG5vCitvdGhlciBvdXRwdXQgZmlsZS4KKy5JUCAiXGZCXC1wZWRhbnRpY1xmUiIgNAorLklYIEl0ZW0gIi1wZWRhbnRpYyIKK0lzc3VlIHdhcm5pbmdzIGZvciB1c2VzIG9mIGV4dGVuc2lvbnMgdG8gRm9ydHJhbiA5NS4KK1wmXGZCXC1wZWRhbnRpY1xmUiBhbHNvIGFwcGxpZXMgdG8gQ1wtbGFuZ3VhZ2UgY29uc3RydWN0cyB3aGVyZSB0aGV5CitvY2N1ciBpbiBccy0xR05VXHMwIEZvcnRyYW4gc291cmNlIGZpbGVzLCBzdWNoIGFzIHVzZSBvZiBcZkJcZWVcZlIgaW4gYQorY2hhcmFjdGVyIGNvbnN0YW50IHdpdGhpbiBhIGRpcmVjdGl2ZSBsaWtlIFxmKENXXCooQ2AjaW5jbHVkZVwqKEMnXGZSLgorLlNwCitWYWxpZCBGb3J0cmFuIDk1IHByb2dyYW1zIHNob3VsZCBjb21waWxlIHByb3Blcmx5IHdpdGggb3Igd2l0aG91dAordGhpcyBvcHRpb24uCitIb3dldmVyLCB3aXRob3V0IHRoaXMgb3B0aW9uLCBjZXJ0YWluIFxzLTFHTlVcczAgZXh0ZW5zaW9ucyBhbmQgdHJhZGl0aW9uYWwKK0ZvcnRyYW4gZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBhcyB3ZWxsLgorV2l0aCB0aGlzIG9wdGlvbiwgbWFueSBvZiB0aGVtIGFyZSByZWplY3RlZC4KKy5TcAorU29tZSB1c2VycyB0cnkgdG8gdXNlIFxmQlwtcGVkYW50aWNcZlIgdG8gY2hlY2sgcHJvZ3JhbXMgZm9yIGNvbmZvcm1hbmNlLgorVGhleSBzb29uIGZpbmQgdGhhdCBpdCBkb2VzIG5vdCBkbyBxdWl0ZSB3aGF0IHRoZXkgd2FudFwtXC1cLWl0IGZpbmRzIHNvbWUKK25vbnN0YW5kYXJkIHByYWN0aWNlcywgYnV0IG5vdCBhbGwuCitIb3dldmVyLCBpbXByb3ZlbWVudHMgdG8gXHMtMUdOVVxzMCBGb3J0cmFuIGluIHRoaXMgYXJlYSBhcmUgd2VsY29tZS4KKy5TcAorVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIFxmQlwtc3RkPWY5NVxmUiwKK1wmXGZCXC1zdGQ9ZjIwMDNcZlIgb3IgXGZCXC1zdGQ9ZjIwMDhcZlIuCisuSVAgIlxmQlwtcGVkYW50aWNcLWVycm9yc1xmUiIgNAorLklYIEl0ZW0gIi1wZWRhbnRpYy1lcnJvcnMiCitMaWtlIFxmQlwtcGVkYW50aWNcZlIsIGV4Y2VwdCB0aGF0IGVycm9ycyBhcmUgcHJvZHVjZWQgcmF0aGVyIHRoYW4KK3dhcm5pbmdzLgorLklQICJcZkJcLVdhbGxcZlIiIDQKKy5JWCBJdGVtICItV2FsbCIKK0VuYWJsZXMgY29tbW9ubHkgdXNlZCB3YXJuaW5nIG9wdGlvbnMgcGVydGFpbmluZyB0byB1c2FnZSB0aGF0Cit3ZSByZWNvbW1lbmQgYXZvaWRpbmcgYW5kIHRoYXQgd2UgYmVsaWV2ZSBhcmUgZWFzeSB0byBhdm9pZC4KK1RoaXMgY3VycmVudGx5IGluY2x1ZGVzIFxmQlwtV2FsaWFzaW5nXGZSLCBcZkJcLVdhbXBlcnNhbmRcZlIsCitcJlxmQlwtV2NvbnZlcnNpb25cZlIsIFxmQlwtV3N1cnByaXNpbmdcZlIsIFxmQlwtV2NcLWJpbmRpbmdcLXR5cGVcZlIsCitcJlxmQlwtV2ludHJpbnNpY3NcLXN0ZFxmUiwgXGZCXC1Xbm9cLXRhYnNcZlIsIFxmQlwtV2ludHJpbnNpY1wtc2hhZG93XGZSLAorXCZcZkJcLVdsaW5lXC10cnVuY2F0aW9uXGZSLCBcZkJcLVd0YXJnZXRcLWxpZmV0aW1lXGZSLAorXCZcZkJcLVdyZWFsXC1xXC1jb25zdGFudFxmUiBhbmQgXGZCXC1XdW51c2VkXGZSLgorLklQICJcZkJcLVdhbGlhc2luZ1xmUiIgNAorLklYIEl0ZW0gIi1XYWxpYXNpbmciCitXYXJuIGFib3V0IHBvc3NpYmxlIGFsaWFzaW5nIG9mIGR1bW15IGFyZ3VtZW50cy4gU3BlY2lmaWNhbGx5LCBpdCB3YXJucworaWYgdGhlIHNhbWUgYWN0dWFsIGFyZ3VtZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBhIGR1bW15IGFyZ3VtZW50IHdpdGgKK1wmXGYoQ1dcKihDYElOVEVOVChJTilcKihDJ1xmUiBhbmQgYSBkdW1teSBhcmd1bWVudCB3aXRoIFxmKENXXCooQ2BJTlRFTlQoT1VUKVwqKEMnXGZSIGluIGEgY2FsbAord2l0aCBhbiBleHBsaWNpdCBpbnRlcmZhY2UuCisuU3AKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSB3aWxsIHRyaWdnZXIgdGhlIHdhcm5pbmcuCisuU3AKKy5WYiA3CitcJiAgICAgICAgICBpbnRlcmZhY2UKK1wmICAgICAgICAgICAgc3Vicm91dGluZSBiYXIoYSxiKQorXCYgICAgICAgICAgICAgIGludGVnZXIsIGludGVudChpbikgOjogYQorXCYgICAgICAgICAgICAgIGludGVnZXIsIGludGVudChvdXQpIDo6IGIKK1wmICAgICAgICAgICAgZW5kIHN1YnJvdXRpbmUKK1wmICAgICAgICAgIGVuZCBpbnRlcmZhY2UKK1wmICAgICAgICAgIGludGVnZXIgOjogYQorXCYgICAgICAgIAorXCYgICAgICAgICAgY2FsbCBiYXIoYSxhKQorLlZlCisuSVAgIlxmQlwtV2FtcGVyc2FuZFxmUiIgNAorLklYIEl0ZW0gIi1XYW1wZXJzYW5kIgorV2FybiBhYm91dCBtaXNzaW5nIGFtcGVyc2FuZCBpbiBjb250aW51ZWQgY2hhcmFjdGVyIGNvbnN0YW50cy4gVGhlIHdhcm5pbmcgaXMKK2dpdmVuIHdpdGggXGZCXC1XYW1wZXJzYW5kXGZSLCBcZkJcLXBlZGFudGljXGZSLCBcZkJcLXN0ZD1mOTVcZlIsCitcJlxmQlwtc3RkPWYyMDAzXGZSIGFuZCBcZkJcLXN0ZD1mMjAwOFxmUi4gTm90ZTogV2l0aCBubyBhbXBlcnNhbmQKK2dpdmVuIGluIGEgY29udGludWVkIGNoYXJhY3RlciBjb25zdGFudCwgXHMtMUdOVVxzMCBGb3J0cmFuIGFzc3VtZXMgY29udGludWF0aW9uCithdCB0aGUgZmlyc3Qgbm9uLWNvbW1lbnQsIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBhZnRlciB0aGUgYW1wZXJzYW5kCit0aGF0IGluaXRpYXRlZCB0aGUgY29udGludWF0aW9uLgorLklQICJcZkJcLVdhcnJheVwtdGVtcG9yYXJpZXNcZlIiIDQKKy5JWCBJdGVtICItV2FycmF5LXRlbXBvcmFyaWVzIgorV2FybiBhYm91dCBhcnJheSB0ZW1wb3JhcmllcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgVGhlIGluZm9ybWF0aW9uCitnZW5lcmF0ZWQgYnkgdGhpcyB3YXJuaW5nIGlzIHNvbWV0aW1lcyB1c2VmdWwgaW4gb3B0aW1pemF0aW9uLCBpbiBvcmRlciB0bworYXZvaWQgc3VjaCB0ZW1wb3Jhcmllcy4KKy5JUCAiXGZCXC1XY1wtYmluZGluZ1wtdHlwZVxmUiIgNAorLklYIEl0ZW0gIi1XYy1iaW5kaW5nLXR5cGUiCitXYXJuIGlmIHRoZSBhIHZhcmlhYmxlIG1pZ2h0IG5vdCBiZSBDIGludGVyb3BlcmFibGUuICBJbiBwYXJ0aWN1bGFyLCB3YXJuIGlmIAordGhlIHZhcmlhYmxlIGhhcyBiZWVuIGRlY2xhcmVkIHVzaW5nIGFuIGludHJpbnNpYyB0eXBlIHdpdGggZGVmYXVsdCBraW5kCitpbnN0ZWFkIG9mIHVzaW5nIGEga2luZCBwYXJhbWV0ZXIgZGVmaW5lZCBmb3IgQyBpbnRlcm9wZXJhYmlsaXR5IGluIHRoZQoraW50cmluc2ljIFxmKENXXCooQ2BJU09fQ19CaW5kaW5nXCooQydcZlIgbW9kdWxlLiAgVGhpcyBvcHRpb24gaXMgaW1wbGllZCBieQorXCZcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2NoYXJhY3RlclwtdHJ1bmNhdGlvblxmUiIgNAorLklYIEl0ZW0gIi1XY2hhcmFjdGVyLXRydW5jYXRpb24iCitXYXJuIHdoZW4gYSBjaGFyYWN0ZXIgYXNzaWdubWVudCB3aWxsIHRydW5jYXRlIHRoZSBhc3NpZ25lZCBzdHJpbmcuCisuSVAgIlxmQlwtV2xpbmVcLXRydW5jYXRpb25cZlIiIDQKKy5JWCBJdGVtICItV2xpbmUtdHJ1bmNhdGlvbiIKK1dhcm4gd2hlbiBhIHNvdXJjZSBjb2RlIGxpbmUgd2lsbCBiZSB0cnVuY2F0ZWQuICBUaGlzIG9wdGlvbiBpcworaW1wbGllZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2NvbnZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItV2NvbnZlcnNpb24iCitXYXJuIGFib3V0IGltcGxpY2l0IGNvbnZlcnNpb25zIHRoYXQgYXJlIGxpa2VseSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIAordGhlIGV4cHJlc3Npb24gYWZ0ZXIgY29udmVyc2lvbi4gSW1wbGllZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2NvbnZlcnNpb25cLWV4dHJhXGZSIiA0CisuSVggSXRlbSAiLVdjb252ZXJzaW9uLWV4dHJhIgorV2FybiBhYm91dCBpbXBsaWNpdCBjb252ZXJzaW9ucyBiZXR3ZWVuIGRpZmZlcmVudCB0eXBlcyBhbmQga2luZHMuCisuSVAgIlxmQlwtV2V4dHJhXGZSIiA0CisuSVggSXRlbSAiLVdleHRyYSIKK0VuYWJsZXMgc29tZSB3YXJuaW5nIG9wdGlvbnMgZm9yIHVzYWdlcyBvZiBsYW5ndWFnZSBmZWF0dXJlcyB3aGljaAorbWF5IGJlIHByb2JsZW1hdGljLiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcyBcZkJcLVdjb21wYXJlXC1yZWFsc1xmUgorYW5kIFxmQlwtV3VudXNlZFwtcGFyYW1ldGVyXGZSLgorLklQICJcZkJcLVdpbXBsaWNpdFwtaW50ZXJmYWNlXGZSIiA0CisuSVggSXRlbSAiLVdpbXBsaWNpdC1pbnRlcmZhY2UiCitXYXJuIGlmIGEgcHJvY2VkdXJlIGlzIGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IGludGVyZmFjZS4KK05vdGUgdGhpcyBvbmx5IGNoZWNrcyB0aGF0IGFuIGV4cGxpY2l0IGludGVyZmFjZSBpcyBwcmVzZW50LiAgSXQgZG9lcyBub3QKK2NoZWNrIHRoYXQgdGhlIGRlY2xhcmVkIGludGVyZmFjZXMgYXJlIGNvbnNpc3RlbnQgYWNyb3NzIHByb2dyYW0gdW5pdHMuCisuSVAgIlxmQlwtV2ltcGxpY2l0XC1wcm9jZWR1cmVcZlIiIDQKKy5JWCBJdGVtICItV2ltcGxpY2l0LXByb2NlZHVyZSIKK1dhcm4gaWYgYSBwcm9jZWR1cmUgaXMgY2FsbGVkIHRoYXQgaGFzIG5laXRoZXIgYW4gZXhwbGljaXQgaW50ZXJmYWNlCitub3IgaGFzIGJlZW4gZGVjbGFyZWQgYXMgXGYoQ1dcKihDYEVYVEVSTkFMXCooQydcZlIuCisuSVAgIlxmQlwtV2ludHJpbnNpY3NcLXN0ZFxmUiIgNAorLklYIEl0ZW0gIi1XaW50cmluc2ljcy1zdGQiCitXYXJuIGlmIFxmQmdmb3J0cmFuXGZSIGZpbmRzIGEgcHJvY2VkdXJlIG5hbWVkIGxpa2UgYW4gaW50cmluc2ljIG5vdAorYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RhbmRhcmQgKHdpdGggXGZCXC1zdGRcZlIpIGFuZCB0cmVhdHMKK2l0IGFzIFxmKENXXCooQ2BFWFRFUk5BTFwqKEMnXGZSIHByb2NlZHVyZSBiZWNhdXNlIG9mIHRoaXMuICBcZkJcLWZhbGxcLWludHJpbnNpY3NcZlIgY2FuCitiZSB1c2VkIHRvIG5ldmVyIHRyaWdnZXIgdGhpcyBiZWhhdmlvciBhbmQgYWx3YXlzIGxpbmsgdG8gdGhlIGludHJpbnNpYworcmVnYXJkbGVzcyBvZiB0aGUgc2VsZWN0ZWQgc3RhbmRhcmQuCisuSVAgIlxmQlwtV3JlYWxcLXFcLWNvbnN0YW50XGZSIiA0CisuSVggSXRlbSAiLVdyZWFsLXEtY29uc3RhbnQiCitQcm9kdWNlIGEgd2FybmluZyBpZiBhIHJlYWwtbGl0ZXJhbC1jb25zdGFudCBjb250YWlucyBhIFxmKENXXCooQ2BxXCooQydcZlIKK2V4cG9uZW50LWxldHRlci4KKy5JUCAiXGZCXC1Xc3VycHJpc2luZ1xmUiIgNAorLklYIEl0ZW0gIi1Xc3VycHJpc2luZyIKK1Byb2R1Y2UgYSB3YXJuaW5nIHdoZW4gXCooTCJzdXNwaWNpb3VzXCooUiIgY29kZSBjb25zdHJ1Y3RzIGFyZSBlbmNvdW50ZXJlZC4KK1doaWxlIHRlY2huaWNhbGx5IGxlZ2FsIHRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBoYXMgYmVlbiBtYWRlLgorLlNwCitUaGlzIGN1cnJlbnRseSBwcm9kdWNlcyBhIHdhcm5pbmcgdW5kZXIgdGhlIGZvbGxvd2luZyBjaXJjdW1zdGFuY2VzOgorLlJTIDQKKy5JUCAiXChidSIgNAorQW4gXHMtMUlOVEVHRVJcczAgXHMtMVNFTEVDVFxzMCBjb25zdHJ1Y3QgaGFzIGEgXHMtMUNBU0VcczAgdGhhdCBjYW4gbmV2ZXIgYmUgbWF0Y2hlZCBhcyBpdHMKK2xvd2VyIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBpdHMgdXBwZXIgdmFsdWUuCisuSVAgIlwoYnUiIDQKK0EgXHMtMUxPR0lDQUxcczAgXHMtMVNFTEVDVFxzMCBjb25zdHJ1Y3QgaGFzIHRocmVlIFxzLTFDQVNFXHMwIHN0YXRlbWVudHMuCisuSVAgIlwoYnUiIDQKK0EgXHMtMVRSQU5TRkVSXHMwIHNwZWNpZmllcyBhIHNvdXJjZSB0aGF0IGlzIHNob3J0ZXIgdGhhbiB0aGUgZGVzdGluYXRpb24uCisuSVAgIlwoYnUiIDQKK1RoZSB0eXBlIG9mIGEgZnVuY3Rpb24gcmVzdWx0IGlzIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlIHdpdGggdGhlIHNhbWUgdHlwZS4gIElmCitcJlxmQlwtcGVkYW50aWNcZlIgb3Igc3RhbmRhcmQtY29uZm9ybWluZyBtb2RlIGlzIGVuYWJsZWQsIHRoaXMgaXMgYW4gZXJyb3IuCisuSVAgIlwoYnUiIDQKK0EgXGYoQ1dcKihDYENIQVJBQ1RFUlwqKEMnXGZSIHZhcmlhYmxlIGlzIGRlY2xhcmVkIHdpdGggbmVnYXRpdmUgbGVuZ3RoLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtV3RhYnNcZlIiIDQKKy5JWCBJdGVtICItV3RhYnMiCitCeSBkZWZhdWx0LCB0YWJzIGFyZSBhY2NlcHRlZCBhcyB3aGl0ZXNwYWNlLCBidXQgdGFicyBhcmUgbm90IG1lbWJlcnMKK29mIHRoZSBGb3J0cmFuIENoYXJhY3RlciBTZXQuICBGb3IgY29udGludWF0aW9uIGxpbmVzLCBhIHRhYiBmb2xsb3dlZAorYnkgYSBkaWdpdCBiZXR3ZWVuIDEgYW5kIDkgaXMgc3VwcG9ydGVkLiAgXGZCXC1Xbm9cLXRhYnNcZlIgd2lsbCBjYXVzZQorYSB3YXJuaW5nIHRvIGJlIGlzc3VlZCBpZiBhIHRhYiBpcyBlbmNvdW50ZXJlZC4gTm90ZSwgXGZCXC1Xbm9cLXRhYnNcZlIKK2lzIGFjdGl2ZSBmb3IgXGZCXC1wZWRhbnRpY1xmUiwgXGZCXC1zdGQ9Zjk1XGZSLCBcZkJcLXN0ZD1mMjAwM1xmUiwKK1wmXGZCXC1zdGQ9ZjIwMDhcZlIgYW5kIFxmQlwtV2FsbFxmUi4KKy5JUCAiXGZCXC1XdW5kZXJmbG93XGZSIiA0CisuSVggSXRlbSAiLVd1bmRlcmZsb3ciCitQcm9kdWNlIGEgd2FybmluZyB3aGVuIG51bWVyaWNhbCBjb25zdGFudCBleHByZXNzaW9ucyBhcmUKK2VuY291bnRlcmVkLCB3aGljaCB5aWVsZCBhbiBccy0xVU5ERVJGTE9XXHMwIGR1cmluZyBjb21waWxhdGlvbi4KKy5JUCAiXGZCXC1XaW50cmluc2ljXC1zaGFkb3dcZlIiIDQKKy5JWCBJdGVtICItV2ludHJpbnNpYy1zaGFkb3ciCitXYXJuIGlmIGEgdXNlci1kZWZpbmVkIHByb2NlZHVyZSBvciBtb2R1bGUgcHJvY2VkdXJlIGhhcyB0aGUgc2FtZSBuYW1lIGFzIGFuCitpbnRyaW5zaWM7IGluIHRoaXMgY2FzZSwgYW4gZXhwbGljaXQgaW50ZXJmYWNlIG9yIFxmKENXXCooQ2BFWFRFUk5BTFwqKEMnXGZSIG9yCitcJlxmKENXXCooQ2BJTlRSSU5TSUNcKihDJ1xmUiBkZWNsYXJhdGlvbiBtaWdodCBiZSBuZWVkZWQgdG8gZ2V0IGNhbGxzIGxhdGVyIHJlc29sdmVkIHRvCit0aGUgZGVzaXJlZCBpbnRyaW5zaWMvcHJvY2VkdXJlLiAgVGhpcyBvcHRpb24gaXMgaW1wbGllZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV3VudXNlZFwtZHVtbXlcLWFyZ3VtZW50XGZSIiA0CisuSVggSXRlbSAiLVd1bnVzZWQtZHVtbXktYXJndW1lbnQiCitXYXJuIGFib3V0IHVudXNlZCBkdW1teSBhcmd1bWVudHMuIFRoaXMgb3B0aW9uIGlzIGltcGxpZWQgYnkgXGZCXC1XYWxsXGZSLgorLklQICJcZkJcLVd1bnVzZWRcLXBhcmFtZXRlclxmUiIgNAorLklYIEl0ZW0gIi1XdW51c2VkLXBhcmFtZXRlciIKK0NvbnRyYXJ5IHRvIFxmQmdjY1xmUidzIG1lYW5pbmcgb2YgXGZCXC1XdW51c2VkXC1wYXJhbWV0ZXJcZlIsCitcJlxmQmdmb3J0cmFuXGZSJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBvcHRpb24gZG9lcyBub3Qgd2FybgorYWJvdXQgdW51c2VkIGR1bW15IGFyZ3VtZW50cyAoc2VlIFxmQlwtV3VudXNlZFwtZHVtbXlcLWFyZ3VtZW50XGZSKSwKK2J1dCBhYm91dCB1bnVzZWQgXGYoQ1dcKihDYFBBUkFNRVRFUlwqKEMnXGZSIHZhbHVlcy4gXGZCXC1XdW51c2VkXC1wYXJhbWV0ZXJcZlIKK2lzIG5vdCBpbmNsdWRlZCBpbiBcZkJcLVdhbGxcZlIgYnV0IGlzIGltcGxpZWQgYnkgXGZCXC1XYWxsIFwtV2V4dHJhXGZSLgorLklQICJcZkJcLVdhbGlnblwtY29tbW9uc1xmUiIgNAorLklYIEl0ZW0gIi1XYWxpZ24tY29tbW9ucyIKK0J5IGRlZmF1bHQsIFxmQmdmb3J0cmFuXGZSIHdhcm5zIGFib3V0IGFueSBvY2Nhc2lvbiBvZiB2YXJpYWJsZXMgYmVpbmcKK3BhZGRlZCBmb3IgcHJvcGVyIGFsaWdubWVudCBpbnNpZGUgYSBcZihDV1wqKENgQ09NTU9OXCooQydcZlIgYmxvY2suIFRoaXMgd2FybmluZyBjYW4gYmUgdHVybmVkCitvZmYgdmlhIFxmQlwtV25vXC1hbGlnblwtY29tbW9uc1xmUi4gU2VlIGFsc28gXGZCXC1mYWxpZ25cLWNvbW1vbnNcZlIuCisuSVAgIlxmQlwtV2Z1bmN0aW9uXC1lbGltaW5hdGlvblxmUiIgNAorLklYIEl0ZW0gIi1XZnVuY3Rpb24tZWxpbWluYXRpb24iCitXYXJuIGlmIGFueSBjYWxscyB0byBmdW5jdGlvbnMgYXJlIGVsaW1pbmF0ZWQgYnkgdGhlIG9wdGltaXphdGlvbnMKK2VuYWJsZWQgYnkgdGhlIFxmQlwtZmZyb250ZW5kXC1vcHRpbWl6ZVxmUiBvcHRpb24uCisuSVAgIlxmQlwtV3JlYWxsb2NcLWxoc1xmUiIgNAorLklYIEl0ZW0gIi1XcmVhbGxvYy1saHMiCitXYXJuIHdoZW4gdGhlIGNvbXBpbGVyIG1pZ2h0IGluc2VydCBjb2RlIHRvIGZvciBhbGxvY2F0aW9uIG9yIHJlYWxsb2NhdGlvbiBvZgorYW4gYWxsb2NhdGFibGUgYXJyYXkgdmFyaWFibGUgb2YgaW50cmluc2ljIHR5cGUgaW4gaW50cmluc2ljIGFzc2lnbm1lbnRzLiAgSW4KK2hvdCBsb29wcywgdGhlIEZvcnRyYW4gMjAwMyByZWFsbG9jYXRpb24gZmVhdHVyZSBtYXkgcmVkdWNlIHRoZSBwZXJmb3JtYW5jZS4KK0lmIHRoZSBhcnJheSBpcyBhbHJlYWR5IGFsbG9jYXRlZCB3aXRoIHRoZSBjb3JyZWN0IHNoYXBlLCBjb25zaWRlciB1c2luZyBhCit3aG9sZS1hcnJheSBhcnJheS1zcGVjIChlLmcuIFxmKENXXCooQ2AoOiw6LDopXCooQydcZlIpIGZvciB0aGUgdmFyaWFibGUgb24gdGhlIGxlZnQtaGFuZAorc2lkZSB0byBwcmV2ZW50IHRoZSByZWFsbG9jYXRpb24gY2hlY2suIE5vdGUgdGhhdCBpbiBzb21lIGNhc2VzIHRoZSB3YXJuaW5nCitpcyBzaG93biwgZXZlbiBpZiB0aGUgY29tcGlsZXIgd2lsbCBvcHRpbWl6ZSByZWFsbG9jYXRpb24gY2hlY2tzIGF3YXkuICBGb3IKK2luc3RhbmNlLCB3aGVuIHRoZSByaWdodC1oYW5kIHNpZGUgY29udGFpbnMgdGhlIHNhbWUgdmFyaWFibGUgbXVsdGlwbGllZCBieQorYSBzY2FsYXIuICBTZWUgYWxzbyBcZkJcLWZyZWFsbG9jXC1saHNcZlIuCisuSVAgIlxmQlwtV3JlYWxsb2NcLWxoc1wtYWxsXGZSIiA0CisuSVggSXRlbSAiLVdyZWFsbG9jLWxocy1hbGwiCitXYXJuIHdoZW4gdGhlIGNvbXBpbGVyIGluc2VydHMgY29kZSB0byBmb3IgYWxsb2NhdGlvbiBvciByZWFsbG9jYXRpb24gb2YgYW4KK2FsbG9jYXRhYmxlIHZhcmlhYmxlOyB0aGlzIGluY2x1ZGVzIHNjYWxhcnMgYW5kIGRlcml2ZWQgdHlwZXMuCisuSVAgIlxmQlwtV2NvbXBhcmVcLXJlYWxzXGZSIiA0CisuSVggSXRlbSAiLVdjb21wYXJlLXJlYWxzIgorV2FybiB3aGVuIGNvbXBhcmluZyByZWFsIG9yIGNvbXBsZXggdHlwZXMgZm9yIGVxdWFsaXR5IG9yIGluZXF1YWxpdHkuCitUaGlzIG9wdGlvbiBpcyBpbXBsaWVkIGJ5IFxmQlwtV2V4dHJhXGZSLgorLklQICJcZkJcLVd0YXJnZXRcLWxpZmV0aW1lXGZSIiA0CisuSVggSXRlbSAiLVd0YXJnZXQtbGlmZXRpbWUiCitXYXJuIGlmIHRoZSBwb2ludGVyIGluIGEgcG9pbnRlciBhc3NpZ25tZW50IG1pZ2h0IGJlIGxvbmdlciB0aGFuIHRoZSBpdHMKK3RhcmdldC4gVGhpcyBvcHRpb24gaXMgaW1wbGllZCBieSBcZkJcLVdhbGxcZlIuCisuSVAgIlxmQlwtV2Vycm9yXGZSIiA0CisuSVggSXRlbSAiLVdlcnJvciIKK1R1cm5zIGFsbCB3YXJuaW5ncyBpbnRvIGVycm9ycy4KKy5QUAorU29tZSBvZiB0aGVzZSBoYXZlIG5vIGVmZmVjdCB3aGVuIGNvbXBpbGluZyBwcm9ncmFtcyB3cml0dGVuIGluIEZvcnRyYW4uCisuU1MgIk9wdGlvbnMgZm9yIGRlYnVnZ2luZyB5b3VyIHByb2dyYW0gb3IgXHMtMUdOVVxzMCBGb3J0cmFuIgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgZm9yIGRlYnVnZ2luZyB5b3VyIHByb2dyYW0gb3IgR05VIEZvcnRyYW4iCitcJlxzLTFHTlVcczAgRm9ydHJhbiBoYXMgdmFyaW91cyBzcGVjaWFsIG9wdGlvbnMgdGhhdCBhcmUgdXNlZCBmb3IgZGVidWdnaW5nCitlaXRoZXIgeW91ciBwcm9ncmFtIG9yIHRoZSBccy0xR05VXHMwIEZvcnRyYW4gY29tcGlsZXIuCisuSVAgIlxmQlwtZmR1bXBcLWZvcnRyYW5cLW9yaWdpbmFsXGZSIiA0CisuSVggSXRlbSAiLWZkdW1wLWZvcnRyYW4tb3JpZ2luYWwiCitPdXRwdXQgdGhlIGludGVybmFsIHBhcnNlIHRyZWUgYWZ0ZXIgdHJhbnNsYXRpbmcgdGhlIHNvdXJjZSBwcm9ncmFtCitpbnRvIGludGVybmFsIHJlcHJlc2VudGF0aW9uLiAgT25seSByZWFsbHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlCitcJlxzLTFHTlVcczAgRm9ydHJhbiBjb21waWxlciBpdHNlbGYuCisuSVAgIlxmQlwtZmR1bXBcLW9wdGltaXplZFwtdHJlZVxmUiIgNAorLklYIEl0ZW0gIi1mZHVtcC1vcHRpbWl6ZWQtdHJlZSIKK091dHB1dCB0aGUgcGFyc2UgdHJlZSBhZnRlciBmcm9udC1lbmQgb3B0aW1pemF0aW9uLiAgT25seSByZWFsbHkKK3VzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSBccy0xR05VXHMwIEZvcnRyYW4gY29tcGlsZXIgaXRzZWxmLgorLlNwCitPdXRwdXQgdGhlIGludGVybmFsIHBhcnNlIHRyZWUgYWZ0ZXIgdHJhbnNsYXRpbmcgdGhlIHNvdXJjZSBwcm9ncmFtCitpbnRvIGludGVybmFsIHJlcHJlc2VudGF0aW9uLiAgT25seSByZWFsbHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlCitcJlxzLTFHTlVcczAgRm9ydHJhbiBjb21waWxlciBpdHNlbGYuICBUaGlzIG9wdGlvbiBpcyBkZXByZWNhdGVkOyB1c2UKK1wmXGYoQ1dcKihDYFwtZmR1bXBcLWZvcnRyYW5cLW9yaWdpbmFsXCooQydcZlIgaW5zdGVhZC4KKy5JUCAiXGZCXC1mZnBlXC10cmFwPVxmUlxmSWxpc3RcZlIiIDQKKy5JWCBJdGVtICItZmZwZS10cmFwPWxpc3QiCitTcGVjaWZ5IGEgbGlzdCBvZiBmbG9hdGluZyBwb2ludCBleGNlcHRpb24gdHJhcHMgdG8gZW5hYmxlLiAgT24gbW9zdAorc3lzdGVtcywgaWYgYSBmbG9hdGluZyBwb2ludCBleGNlcHRpb24gb2NjdXJzIGFuZCB0aGUgdHJhcCBmb3IgdGhhdAorZXhjZXB0aW9uIGlzIGVuYWJsZWQsIGEgXHMtMVNJR0ZQRVxzMCBzaWduYWwgd2lsbCBiZSBzZW50IGFuZCB0aGUgcHJvZ3JhbQorYmVpbmcgYWJvcnRlZCwgcHJvZHVjaW5nIGEgY29yZSBmaWxlIHVzZWZ1bCBmb3IgZGVidWdnaW5nLiAgXGZJbGlzdFxmUgoraXMgYSAocG9zc2libHkgZW1wdHkpIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBmb2xsb3dpbmcKK2V4Y2VwdGlvbnM6IFxmQmludmFsaWRcZlIgKGludmFsaWQgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uLCBzdWNoIGFzCitcJlxmKENXXCooQ2BTUVJUKFwtMS4wKVwqKEMnXGZSKSwgXGZCemVyb1xmUiAoZGl2aXNpb24gYnkgemVybyksIFxmQm92ZXJmbG93XGZSCisob3ZlcmZsb3cgaW4gYSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24pLCBcZkJ1bmRlcmZsb3dcZlIgKHVuZGVyZmxvdworaW4gYSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24pLCBcZkJpbmV4YWN0XGZSIChsb3NzIG9mIHByZWNpc2lvbgorZHVyaW5nIG9wZXJhdGlvbiksIGFuZCBcZkJkZW5vcm1hbFxmUiAob3BlcmF0aW9uIHBlcmZvcm1lZCBvbiBhCitkZW5vcm1hbCB2YWx1ZSkuICBUaGUgZmlyc3QgZml2ZSBleGNlcHRpb25zIGNvcnJlc3BvbmQgdG8gdGhlIGZpdmUKK1wmXHMtMUlFRUVcczAgNzU0IGV4Y2VwdGlvbnMsIHdoZXJlYXMgdGhlIGxhc3Qgb25lIChcZkJkZW5vcm1hbFxmUikgaXMgbm90CitwYXJ0IG9mIHRoZSBccy0xSUVFRVxzMCA3NTQgc3RhbmRhcmQgYnV0IGlzIGF2YWlsYWJsZSBvbiBzb21lIGNvbW1vbgorYXJjaGl0ZWN0dXJlcyBzdWNoIGFzIHg4Ni4KKy5TcAorVGhlIGZpcnN0IHRocmVlIGV4Y2VwdGlvbnMgKFxmQmludmFsaWRcZlIsIFxmQnplcm9cZlIsIGFuZAorXCZcZkJvdmVyZmxvd1xmUikgb2Z0ZW4gaW5kaWNhdGUgc2VyaW91cyBlcnJvcnMsIGFuZCB1bmxlc3MgdGhlIHByb2dyYW0KK2hhcyBwcm92aXNpb25zIGZvciBkZWFsaW5nIHdpdGggdGhlc2UgZXhjZXB0aW9ucywgZW5hYmxpbmcgdHJhcHMgZm9yCit0aGVzZSB0aHJlZSBleGNlcHRpb25zIGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhLgorLlNwCitNYW55LCBpZiBub3QgbW9zdCwgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBpbmN1ciBsb3NzIG9mIHByZWNpc2lvbgorZHVlIHRvIHJvdW5kaW5nLCBhbmQgaGVuY2UgdGhlIFxmKENXXCooQ2BmZnBlXC10cmFwPWluZXhhY3RcKihDJ1xmUiBpcyBsaWtlbHkgdG8KK2JlIHVuaW50ZXJlc3RpbmcgaW4gcHJhY3RpY2UuCisuU3AKK0J5IGRlZmF1bHQgbm8gZXhjZXB0aW9uIHRyYXBzIGFyZSBlbmFibGVkLgorLklQICJcZkJcLWZub1wtYmFja3RyYWNlXGZSIiA0CisuSVggSXRlbSAiLWZuby1iYWNrdHJhY2UiCitXaGVuIGEgc2VyaW91cyBydW50aW1lIGVycm9yIGlzIGVuY291bnRlcmVkIG9yIGEgZGVhZGx5IHNpZ25hbCBpcworZW1pdHRlZCAoc2VnbWVudGF0aW9uIGZhdWx0LCBpbGxlZ2FsIGluc3RydWN0aW9uLCBidXMgZXJyb3IsCitmbG9hdGluZy1wb2ludCBleGNlcHRpb24sIGFuZCB0aGUgb3RoZXIgXHMtMVBPU0lYXHMwIHNpZ25hbHMgdGhhdCBoYXZlIHRoZQorYWN0aW9uIFxmQmNvcmVcZlIpLCB0aGUgRm9ydHJhbiBydW50aW1lIGxpYnJhcnkgdHJpZXMgdG8gb3V0cHV0IGEKK2JhY2t0cmFjZSBvZiB0aGUgZXJyb3IuIFxmKENXXCooQ2BcLWZub1wtYmFja3RyYWNlXCooQydcZlIgZGlzYWJsZXMgdGhlIGJhY2t0cmFjZQorZ2VuZXJhdGlvbi4gVGhpcyBvcHRpb24gb25seSBoYXMgaW5mbHVlbmNlIGZvciBjb21waWxhdGlvbiBvZiB0aGUKK0ZvcnRyYW4gbWFpbiBwcm9ncmFtLgorLlNTICJPcHRpb25zIGZvciBkaXJlY3Rvcnkgc2VhcmNoIgorLklYIFN1YnNlY3Rpb24gIk9wdGlvbnMgZm9yIGRpcmVjdG9yeSBzZWFyY2giCitUaGVzZSBvcHRpb25zIGFmZmVjdCBob3cgXHMtMUdOVVxzMCBGb3J0cmFuIHNlYXJjaGVzCitmb3IgZmlsZXMgc3BlY2lmaWVkIGJ5IHRoZSBcZihDV1wqKENgSU5DTFVERVwqKEMnXGZSIGRpcmVjdGl2ZSBhbmQgd2hlcmUgaXQgc2VhcmNoZXMKK2ZvciBwcmV2aW91c2x5IGNvbXBpbGVkIG1vZHVsZXMuCisuUFAKK0l0IGFsc28gYWZmZWN0cyB0aGUgc2VhcmNoIHBhdGhzIHVzZWQgYnkgXGZCY3BwXGZSIHdoZW4gdXNlZCB0byBwcmVwcm9jZXNzCitGb3J0cmFuIHNvdXJjZS4KKy5JUCAiXGZCXC1JXGZSXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLUlkaXIiCitUaGVzZSBhZmZlY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhlIFxmKENXXCooQ2BJTkNMVURFXCooQydcZlIgZGlyZWN0aXZlCisoYXMgd2VsbCBhcyBvZiB0aGUgXGYoQ1dcKihDYCNpbmNsdWRlXCooQydcZlIgZGlyZWN0aXZlIG9mIHRoZSBcZkJjcHBcZlIKK3ByZXByb2Nlc3NvcikuCisuU3AKK0Fsc28gbm90ZSB0aGF0IHRoZSBnZW5lcmFsIGJlaGF2aW9yIG9mIFxmQlwtSVxmUiBhbmQKK1wmXGYoQ1dcKihDYElOQ0xVREVcKihDJ1xmUiBpcyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyBvZiBcZkJcLUlcZlIgd2l0aAorXCZcZihDV1wqKENgI2luY2x1ZGVcKihDJ1xmUiBpbiB0aGUgXGZCY3BwXGZSIHByZXByb2Nlc3Nvciwgd2l0aCByZWdhcmQgdG8KK2xvb2tpbmcgZm9yIFxmSWhlYWRlci5nY2NcZlIgZmlsZXMgYW5kIG90aGVyIHN1Y2ggdGhpbmdzLgorLlNwCitUaGlzIHBhdGggaXMgYWxzbyB1c2VkIHRvIHNlYXJjaCBmb3IgXGZJLm1vZFxmUiBmaWxlcyB3aGVuIHByZXZpb3VzbHkKK2NvbXBpbGVkIG1vZHVsZXMgYXJlIHJlcXVpcmVkIGJ5IGEgXGYoQ1dcKihDYFVTRVwqKEMnXGZSIHN0YXRlbWVudC4KKy5JUCAiXGZCXC1KXGZSXGZJZGlyXGZSIiA0CisuSVggSXRlbSAiLUpkaXIiCitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgd2hlcmUgdG8gcHV0IFxmSS5tb2RcZlIgZmlsZXMgZm9yIGNvbXBpbGVkIG1vZHVsZXMuCitJdCBpcyBhbHNvIGFkZGVkIHRvIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaGVkIGJ5IGFuIFxmKENXXCooQ2BVU0VcKihDJ1xmUgorc3RhdGVtZW50LgorLlNwCitUaGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisuSVAgIlxmQlwtZmludHJpbnNpY1wtbW9kdWxlc1wtcGF0aFxmUiBcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItZmludHJpbnNpYy1tb2R1bGVzLXBhdGggZGlyIgorVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBwcmUtY29tcGlsZWQgaW50cmluc2ljIG1vZHVsZXMsIGlmCit0aGV5IGFyZSBub3QgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24gZXhwZWN0ZWQgYnkgdGhlIGNvbXBpbGVyLgorLlNTICJJbmZsdWVuY2luZyB0aGUgbGlua2luZyBzdGVwIgorLklYIFN1YnNlY3Rpb24gIkluZmx1ZW5jaW5nIHRoZSBsaW5raW5nIHN0ZXAiCitUaGVzZSBvcHRpb25zIGNvbWUgaW50byBwbGF5IHdoZW4gdGhlIGNvbXBpbGVyIGxpbmtzIG9iamVjdCBmaWxlcyBpbnRvIGFuIAorZXhlY3V0YWJsZSBvdXRwdXQgZmlsZS4gVGhleSBhcmUgbWVhbmluZ2xlc3MgaWYgdGhlIGNvbXBpbGVyIGlzIG5vdCBkb2luZyAKK2EgbGluayBzdGVwLgorLklQICJcZkJcLXN0YXRpY1wtbGliZ2ZvcnRyYW5cZlIiIDQKKy5JWCBJdGVtICItc3RhdGljLWxpYmdmb3J0cmFuIgorT24gc3lzdGVtcyB0aGF0IHByb3ZpZGUgXGZJbGliZ2ZvcnRyYW5cZlIgYXMgYSBzaGFyZWQgYW5kIGEgc3RhdGljCitsaWJyYXJ5LCB0aGlzIG9wdGlvbiBmb3JjZXMgdGhlIHVzZSBvZiB0aGUgc3RhdGljIHZlcnNpb24uIElmIG5vCitzaGFyZWQgdmVyc2lvbiBvZiBcZklsaWJnZm9ydHJhblxmUiB3YXMgYnVpbHQgd2hlbiB0aGUgY29tcGlsZXIgd2FzCitjb25maWd1cmVkLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LgorLlNTICJJbmZsdWVuY2luZyBydW50aW1lIGJlaGF2aW9yIgorLklYIFN1YnNlY3Rpb24gIkluZmx1ZW5jaW5nIHJ1bnRpbWUgYmVoYXZpb3IiCitUaGVzZSBvcHRpb25zIGFmZmVjdCB0aGUgcnVudGltZSBiZWhhdmlvciBvZiBwcm9ncmFtcyBjb21waWxlZCB3aXRoIFxzLTFHTlVcczAgRm9ydHJhbi4KKy5JUCAiXGZCXC1mY29udmVydD1cZlJcZkljb252ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLWZjb252ZXJ0PWNvbnZlcnNpb24iCitTcGVjaWZ5IHRoZSByZXByZXNlbnRhdGlvbiBvZiBkYXRhIGZvciB1bmZvcm1hdHRlZCBmaWxlcy4gIFZhbGlkCit2YWx1ZXMgZm9yIGNvbnZlcnNpb24gYXJlOiBcZkJuYXRpdmVcZlIsIHRoZSBkZWZhdWx0OyBcZkJzd2FwXGZSLAorc3dhcCBiZXR3ZWVuIGJpZ1wtIGFuZCBsaXR0bGUtZW5kaWFuOyBcZkJiaWctZW5kaWFuXGZSLCB1c2UgYmlnLWVuZGlhbgorcmVwcmVzZW50YXRpb24gZm9yIHVuZm9ybWF0dGVkIGZpbGVzOyBcZkJsaXR0bGUtZW5kaWFuXGZSLCB1c2UgbGl0dGxlLWVuZGlhbgorcmVwcmVzZW50YXRpb24gZm9yIHVuZm9ybWF0dGVkIGZpbGVzLgorLlNwCitcJlxmSVRoaXMgb3B0aW9uIGhhcyBhbiBlZmZlY3Qgb25seSB3aGVuIHVzZWQgaW4gdGhlIG1haW4gcHJvZ3JhbS4KK1RoZSBcZihDSVwqKENgQ09OVkVSVFwqKEMnXGZJIHNwZWNpZmllciBhbmQgdGhlIFxzLTFHRk9SVFJBTl9DT05WRVJUX1VOSVRcczAgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNwZWNpZmllZCBieSBcZihCSVwtZmNvbnZlcnRcZkkuXGZSCisuSVAgIlxmQlwtZnJlY29yZFwtbWFya2VyPVxmUlxmSWxlbmd0aFxmUiIgNAorLklYIEl0ZW0gIi1mcmVjb3JkLW1hcmtlcj1sZW5ndGgiCitTcGVjaWZ5IHRoZSBsZW5ndGggb2YgcmVjb3JkIG1hcmtlcnMgZm9yIHVuZm9ybWF0dGVkIGZpbGVzLgorVmFsaWQgdmFsdWVzIGZvciBcZklsZW5ndGhcZlIgYXJlIDQgYW5kIDguICBEZWZhdWx0IGlzIDQuCitcJlxmSVRoaXMgaXMgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgdmVyc2lvbnMgb2ZcZlIgXGZCZ2ZvcnRyYW5cZlIsCit3aGljaCBzcGVjaWZpZWQgYSBkZWZhdWx0IHJlY29yZCBtYXJrZXIgbGVuZ3RoIG9mIDggb24gbW9zdAorc3lzdGVtcy4gIElmIHlvdSB3YW50IHRvIHJlYWQgb3Igd3JpdGUgZmlsZXMgY29tcGF0aWJsZQord2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIFxmQmdmb3J0cmFuXGZSLCB1c2UgXGZCXC1mcmVjb3JkXC1tYXJrZXI9OFxmUi4KKy5JUCAiXGZCXC1mbWF4XC1zdWJyZWNvcmRcLWxlbmd0aD1cZlJcZklsZW5ndGhcZlIiIDQKKy5JWCBJdGVtICItZm1heC1zdWJyZWNvcmQtbGVuZ3RoPWxlbmd0aCIKK1NwZWNpZnkgdGhlIG1heGltdW0gbGVuZ3RoIGZvciBhIHN1YnJlY29yZC4gIFRoZSBtYXhpbXVtIHBlcm1pdHRlZAordmFsdWUgZm9yIGxlbmd0aCBpcyAyMTQ3NDgzNjM5LCB3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0LiAgT25seQorcmVhbGx5IHVzZWZ1bCBmb3IgdXNlIGJ5IHRoZSBnZm9ydHJhbiB0ZXN0c3VpdGUuCisuSVAgIlxmQlwtZnNpZ25cLXplcm9cZlIiIDQKKy5JWCBJdGVtICItZnNpZ24temVybyIKK1doZW4gZW5hYmxlZCwgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBvZiB2YWx1ZSB6ZXJvIHdpdGggdGhlIHNpZ24gYml0IHNldAorYXJlIHdyaXR0ZW4gYXMgbmVnYXRpdmUgbnVtYmVyIGluIGZvcm1hdHRlZCBvdXRwdXQgYW5kIHRyZWF0ZWQgYXMKK25lZ2F0aXZlIGluIHRoZSBcZihDV1wqKENgU0lHTlwqKEMnXGZSIGludHJpbnNpYy4gIFxmQlwtZm5vXC1zaWduXC16ZXJvXGZSIGRvZXMgbm90CitwcmludCB0aGUgbmVnYXRpdmUgc2lnbiBvZiB6ZXJvIHZhbHVlcyAob3IgdmFsdWVzIHJvdW5kZWQgdG8gemVybyBmb3IgSS9PKQorYW5kIHJlZ2FyZHMgemVybyBhcyBwb3NpdGl2ZSBudW1iZXIgaW4gdGhlIFxmKENXXCooQ2BTSUdOXCooQydcZlIgaW50cmluc2ljIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIEZvcnRyYW4gNzcuIFRoZSBkZWZhdWx0IGlzIFxmQlwtZnNpZ25cLXplcm9cZlIuCisuU1MgIk9wdGlvbnMgZm9yIGNvZGUgZ2VuZXJhdGlvbiBjb252ZW50aW9ucyIKKy5JWCBTdWJzZWN0aW9uICJPcHRpb25zIGZvciBjb2RlIGdlbmVyYXRpb24gY29udmVudGlvbnMiCitUaGVzZSBtYWNoaW5lLWluZGVwZW5kZW50IG9wdGlvbnMgY29udHJvbCB0aGUgaW50ZXJmYWNlIGNvbnZlbnRpb25zCit1c2VkIGluIGNvZGUgZ2VuZXJhdGlvbi4KKy5QUAorTW9zdCBvZiB0aGVtIGhhdmUgYm90aCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgZm9ybXM7IHRoZSBuZWdhdGl2ZSBmb3JtCitvZiBcZkJcLWZmb29cZlIgd291bGQgYmUgXGZCXC1mbm9cLWZvb1xmUi4gIEluIHRoZSB0YWJsZSBiZWxvdywgb25seQorb25lIG9mIHRoZSBmb3JtcyBpcyBsaXN0ZWRcLVwtXC10aGUgb25lIHdoaWNoIGlzIG5vdCB0aGUgZGVmYXVsdC4gIFlvdQorY2FuIGZpZ3VyZSBvdXQgdGhlIG90aGVyIGZvcm0gYnkgZWl0aGVyIHJlbW92aW5nIFxmQm5vXC1cZlIgb3IgYWRkaW5nCitpdC4KKy5JUCAiXGZCXC1mbm9cLWF1dG9tYXRpY1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tYXV0b21hdGljIgorVHJlYXQgZWFjaCBwcm9ncmFtIHVuaXQgKGV4Y2VwdCB0aG9zZSBtYXJrZWQgYXMgXHMtMVJFQ1VSU0lWRVxzMCkgYXMgaWYgdGhlCitcJlxmKENXXCooQ2BTQVZFXCooQydcZlIgc3RhdGVtZW50IHdlcmUgc3BlY2lmaWVkIGZvciBldmVyeSBsb2NhbCB2YXJpYWJsZSBhbmQgYXJyYXkKK3JlZmVyZW5jZWQgaW4gaXQuIERvZXMgbm90IGFmZmVjdCBjb21tb24gYmxvY2tzLiAoU29tZSBGb3J0cmFuIGNvbXBpbGVycworcHJvdmlkZSB0aGlzIG9wdGlvbiB1bmRlciB0aGUgbmFtZSBcZkJcLXN0YXRpY1xmUiBvciBcZkJcLXNhdmVcZlIuKQorVGhlIGRlZmF1bHQsIHdoaWNoIGlzIFxmQlwtZmF1dG9tYXRpY1xmUiwgdXNlcyB0aGUgc3RhY2sgZm9yIGxvY2FsCit2YXJpYWJsZXMgc21hbGxlciB0aGFuIHRoZSB2YWx1ZSBnaXZlbiBieSBcZkJcLWZtYXhcLXN0YWNrXC12YXJcLXNpemVcZlIuCitVc2UgdGhlIG9wdGlvbiBcZkJcLWZyZWN1cnNpdmVcZlIgdG8gdXNlIG5vIHN0YXRpYyBtZW1vcnkuCisuSVAgIlxmQlwtZmYyY1xmUiIgNAorLklYIEl0ZW0gIi1mZjJjIgorR2VuZXJhdGUgY29kZSBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGggY29kZSBnZW5lcmF0ZWQKK2J5IFxmQmc3N1xmUiBhbmQgXGZCZjJjXGZSLgorLlNwCitUaGUgY2FsbGluZyBjb252ZW50aW9ucyB1c2VkIGJ5IFxmQmc3N1xmUiAob3JpZ2luYWxseSBpbXBsZW1lbnRlZAoraW4gXGZCZjJjXGZSKSByZXF1aXJlIGZ1bmN0aW9ucyB0aGF0IHJldHVybiB0eXBlCitkZWZhdWx0IFxmKENXXCooQ2BSRUFMXCooQydcZlIgdG8gYWN0dWFsbHkgcmV0dXJuIHRoZSBDIHR5cGUgXGYoQ1dcKihDYGRvdWJsZVwqKEMnXGZSLCBhbmQKK2Z1bmN0aW9ucyB0aGF0IHJldHVybiB0eXBlIFxmKENXXCooQ2BDT01QTEVYXCooQydcZlIgdG8gcmV0dXJuIHRoZSB2YWx1ZXMgdmlhIGFuCitleHRyYSBhcmd1bWVudCBpbiB0aGUgY2FsbGluZyBzZXF1ZW5jZSB0aGF0IHBvaW50cyB0byB3aGVyZSB0bworc3RvcmUgdGhlIHJldHVybiB2YWx1ZS4gIFVuZGVyIHRoZSBkZWZhdWx0IFxzLTFHTlVcczAgY2FsbGluZyBjb252ZW50aW9ucywgc3VjaAorZnVuY3Rpb25zIHNpbXBseSByZXR1cm4gdGhlaXIgcmVzdWx0cyBhcyB0aGV5IHdvdWxkIGluIFxzLTFHTlVcczAKK0NcLVwtXC1kZWZhdWx0IFxmKENXXCooQ2BSRUFMXCooQydcZlIgZnVuY3Rpb25zIHJldHVybiB0aGUgQyB0eXBlIFxmKENXXCooQ2BmbG9hdFwqKEMnXGZSLCBhbmQKK1wmXGYoQ1dcKihDYENPTVBMRVhcKihDJ1xmUiBmdW5jdGlvbnMgcmV0dXJuIHRoZSBccy0xR05VXHMwIEMgdHlwZSBcZihDV1wqKENgY29tcGxleFwqKEMnXGZSLgorQWRkaXRpb25hbGx5LCB0aGlzIG9wdGlvbiBpbXBsaWVzIHRoZSBcZkJcLWZzZWNvbmRcLXVuZGVyc2NvcmVcZlIKK29wdGlvbiwgdW5sZXNzIFxmQlwtZm5vXC1zZWNvbmRcLXVuZGVyc2NvcmVcZlIgaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuCisuU3AKK1RoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBnZW5lcmF0aW9uIG9mIGNvZGUgdGhhdCBpbnRlcmZhY2VzIHdpdGgKK3RoZSBcZkJsaWJnZm9ydHJhblxmUiBsaWJyYXJ5LgorLlNwCitcJlxmSUNhdXRpb246XGZSIEl0IGlzIG5vdCBhIGdvb2QgaWRlYSB0byBtaXggRm9ydHJhbiBjb2RlIGNvbXBpbGVkIHdpdGgKK1wmXGZCXC1mZjJjXGZSIHdpdGggY29kZSBjb21waWxlZCB3aXRoIHRoZSBkZWZhdWx0IFxmQlwtZm5vXC1mMmNcZlIKK2NhbGxpbmcgY29udmVudGlvbnMgYXMsIGNhbGxpbmcgXGYoQ1dcKihDYENPTVBMRVhcKihDJ1xmUiBvciBkZWZhdWx0IFxmKENXXCooQ2BSRUFMXCooQydcZlIKK2Z1bmN0aW9ucyBiZXR3ZWVuIHByb2dyYW0gcGFydHMgd2hpY2ggd2VyZSBjb21waWxlZCB3aXRoIGRpZmZlcmVudAorY2FsbGluZyBjb252ZW50aW9ucyB3aWxsIGJyZWFrIGF0IGV4ZWN1dGlvbiB0aW1lLgorLlNwCitcJlxmSUNhdXRpb246XGZSIFRoaXMgd2lsbCBicmVhayBjb2RlIHdoaWNoIHBhc3NlcyBpbnRyaW5zaWMgZnVuY3Rpb25zCitvZiB0eXBlIGRlZmF1bHQgXGYoQ1dcKihDYFJFQUxcKihDJ1xmUiBvciBcZihDV1wqKENgQ09NUExFWFwqKEMnXGZSIGFzIGFjdHVhbCBhcmd1bWVudHMsIGFzCit0aGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbnMgdXNlIHRoZSBcZkJcLWZub1wtZjJjXGZSIGNhbGxpbmcgY29udmVudGlvbnMuCisuSVAgIlxmQlwtZm5vXC11bmRlcnNjb3JpbmdcZlIiIDQKKy5JWCBJdGVtICItZm5vLXVuZGVyc2NvcmluZyIKK0RvIG5vdCB0cmFuc2Zvcm0gbmFtZXMgb2YgZW50aXRpZXMgc3BlY2lmaWVkIGluIHRoZSBGb3J0cmFuCitzb3VyY2UgZmlsZSBieSBhcHBlbmRpbmcgdW5kZXJzY29yZXMgdG8gdGhlbS4KKy5TcAorV2l0aCBcZkJcLWZ1bmRlcnNjb3JpbmdcZlIgaW4gZWZmZWN0LCBccy0xR05VXHMwIEZvcnRyYW4gYXBwZW5kcyBvbmUKK3VuZGVyc2NvcmUgdG8gZXh0ZXJuYWwgbmFtZXMgd2l0aCBubyB1bmRlcnNjb3Jlcy4gIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUKK2NvbXBhdGliaWxpdHkgd2l0aCBjb2RlIHByb2R1Y2VkIGJ5IG1hbnkgXHMtMVVOSVhcczAgRm9ydHJhbiBjb21waWxlcnMuCisuU3AKK1wmXGZJQ2F1dGlvblxmUjogVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgXHMtMUdOVVxzMCBGb3J0cmFuIGlzCitpbmNvbXBhdGlibGUgd2l0aCBcZkJmMmNcZlIgYW5kIFxmQmc3N1xmUiwgcGxlYXNlIHVzZSB0aGUKK1wmXGZCXC1mZjJjXGZSIG9wdGlvbiBpZiB5b3Ugd2FudCBvYmplY3QgZmlsZXMgY29tcGlsZWQgd2l0aAorXCZccy0xR05VXHMwIEZvcnRyYW4gdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9iamVjdCBjb2RlIGNyZWF0ZWQgd2l0aCB0aGVzZQordG9vbHMuCisuU3AKK1VzZSBvZiBcZkJcLWZub1wtdW5kZXJzY29yaW5nXGZSIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91IGFyZQorZXhwZXJpbWVudGluZyB3aXRoIGlzc3VlcyBzdWNoIGFzIGludGVncmF0aW9uIG9mIFxzLTFHTlVcczAgRm9ydHJhbiBpbnRvCitleGlzdGluZyBzeXN0ZW0gZW52aXJvbm1lbnRzICh2aXNcLWFcKmBcLXZpcyBleGlzdGluZyBsaWJyYXJpZXMsIHRvb2xzLAorYW5kIHNvIG9uKS4KKy5TcAorRm9yIGV4YW1wbGUsIHdpdGggXGZCXC1mdW5kZXJzY29yaW5nXGZSLCBhbmQgYXNzdW1pbmcgb3RoZXIgZGVmYXVsdHMgbGlrZQorXCZcZkJcLWZjYXNlXC1sb3dlclxmUiBhbmQgdGhhdCBcZihDV1wqKENgaigpXCooQydcZlIgYW5kIFxmKENXXCooQ2BtYXhfY291bnQoKVwqKEMnXGZSIGFyZQorZXh0ZXJuYWwgZnVuY3Rpb25zIHdoaWxlIFxmKENXXCooQ2BteV92YXJcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYGx2YXJcKihDJ1xmUiBhcmUgbG9jYWwgdmFyaWFibGVzLAorYSBzdGF0ZW1lbnQgbGlrZQorLlNwCisuVmIgMQorXCYgICAgICAgIEkgPSBKKCkgKyBNQVhfQ09VTlQgKE1ZX1ZBUiwgTFZBUikKKy5WZQorLlNwCitpcyBpbXBsZW1lbnRlZCBhcyBzb21ldGhpbmcgYWtpbiB0bzoKKy5TcAorLlZiIDEKK1wmICAgICAgICBpID0gal8oKSArIG1heF9jb3VudF9cfF8oJm15X3Zhcl9cfF8sICZsdmFyKTsKKy5WZQorLlNwCitXaXRoIFxmQlwtZm5vXC11bmRlcnNjb3JpbmdcZlIsIHRoZSBzYW1lIHN0YXRlbWVudCBpcyBpbXBsZW1lbnRlZCBhczoKKy5TcAorLlZiIDEKK1wmICAgICAgICBpID0gaigpICsgbWF4X2NvdW50KCZteV92YXIsICZsdmFyKTsKKy5WZQorLlNwCitVc2Ugb2YgXGZCXC1mbm9cLXVuZGVyc2NvcmluZ1xmUiBhbGxvd3MgZGlyZWN0IHNwZWNpZmljYXRpb24gb2YKK3VzZXItZGVmaW5lZCBuYW1lcyB3aGlsZSBkZWJ1Z2dpbmcgYW5kIHdoZW4gaW50ZXJmYWNpbmcgXHMtMUdOVVxzMCBGb3J0cmFuCitjb2RlIHdpdGggb3RoZXIgbGFuZ3VhZ2VzLgorLlNwCitOb3RlIHRoYXQganVzdCBiZWNhdXNlIHRoZSBuYW1lcyBtYXRjaCBkb2VzIFxmSW5vdFxmUiBtZWFuIHRoYXQgdGhlCitpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgXHMtMUdOVVxzMCBGb3J0cmFuIGZvciBhbiBleHRlcm5hbCBuYW1lIG1hdGNoZXMgdGhlCitpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgc29tZSBvdGhlciBsYW5ndWFnZSBmb3IgdGhhdCBzYW1lIG5hbWUuCitUaGF0IGlzLCBnZXR0aW5nIGNvZGUgcHJvZHVjZWQgYnkgXHMtMUdOVVxzMCBGb3J0cmFuIHRvIGxpbmsgdG8gY29kZSBwcm9kdWNlZAorYnkgc29tZSBvdGhlciBjb21waWxlciB1c2luZyB0aGlzIG9yIGFueSBvdGhlciBtZXRob2QgY2FuIGJlIG9ubHkgYQorc21hbGwgcGFydCBvZiB0aGUgb3ZlcmFsbCBzb2x1dGlvblwtXC1cLWdldHRpbmcgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5Citib3RoIGNvbXBpbGVycyB0byBhZ3JlZSBvbiBpc3N1ZXMgb3RoZXIgdGhhbiBuYW1pbmcgY2FuIHJlcXVpcmUKK3NpZ25pZmljYW50IGVmZm9ydCwgYW5kLCB1bmxpa2UgbmFtaW5nIGRpc2FncmVlbWVudHMsIGxpbmtlcnMgbm9ybWFsbHkKK2Nhbm5vdCBkZXRlY3QgZGlzYWdyZWVtZW50cyBpbiB0aGVzZSBvdGhlciBhcmVhcy4KKy5TcAorQWxzbywgbm90ZSB0aGF0IHdpdGggXGZCXC1mbm9cLXVuZGVyc2NvcmluZ1xmUiwgdGhlIGxhY2sgb2YgYXBwZW5kZWQKK3VuZGVyc2NvcmVzIGludHJvZHVjZXMgdGhlIHZlcnkgcmVhbCBwb3NzaWJpbGl0eSB0aGF0IGEgdXNlci1kZWZpbmVkCitleHRlcm5hbCBuYW1lIHdpbGwgY29uZmxpY3Qgd2l0aCBhIG5hbWUgaW4gYSBzeXN0ZW0gbGlicmFyeSwgd2hpY2gKK2NvdWxkIG1ha2UgZmluZGluZyB1bnJlc29sdmVkLXJlZmVyZW5jZSBidWdzIHF1aXRlIGRpZmZpY3VsdCBpbiBzb21lCitjYXNlc1wtXC1cLXRoZXkgbWlnaHQgb2NjdXIgYXQgcHJvZ3JhbSBydW4gdGltZSwgYW5kIHNob3cgdXAgb25seSBhcworYnVnZ3kgYmVoYXZpb3IgYXQgcnVuIHRpbWUuCisuU3AKK0luIGZ1dHVyZSB2ZXJzaW9ucyBvZiBccy0xR05VXHMwIEZvcnRyYW4gd2UgaG9wZSB0byBpbXByb3ZlIG5hbWluZyBhbmQgbGlua2luZworaXNzdWVzIHNvIHRoYXQgZGVidWdnaW5nIGFsd2F5cyBpbnZvbHZlcyB1c2luZyB0aGUgbmFtZXMgYXMgdGhleSBhcHBlYXIKK2luIHRoZSBzb3VyY2UsIGV2ZW4gaWYgdGhlIG5hbWVzIGFzIHNlZW4gYnkgdGhlIGxpbmtlciBhcmUgbWFuZ2xlZCB0bworcHJldmVudCBhY2NpZGVudGFsIGxpbmtpbmcgYmV0d2VlbiBwcm9jZWR1cmVzIHdpdGggaW5jb21wYXRpYmxlCitpbnRlcmZhY2VzLgorLklQICJcZkJcLWZub1wtd2hvbGVcLWZpbGVcZlIiIDQKKy5JWCBJdGVtICItZm5vLXdob2xlLWZpbGUiCitUaGlzIGZsYWcgY2F1c2VzIHRoZSBjb21waWxlciB0byByZXNvbHZlIGFuZCB0cmFuc2xhdGUgZWFjaCBwcm9jZWR1cmUgaW4KK2EgZmlsZSBzZXBhcmF0ZWx5LgorLlNwCitCeSBkZWZhdWx0LCB0aGUgd2hvbGUgZmlsZSBpcyBwYXJzZWQgYW5kIHBsYWNlZCBpbiBhIHNpbmdsZSBmcm9udC1lbmQgdHJlZS4KK0R1cmluZyByZXNvbHV0aW9uLCBpbiBhZGRpdGlvbiB0byBhbGwgdGhlIHVzdWFsIGNoZWNrcyBhbmQgZml4dXBzLCByZWZlcmVuY2VzCit0byBleHRlcm5hbCBwcm9jZWR1cmVzIHRoYXQgYXJlIGluIHRoZSBzYW1lIGZpbGUgZWZmZWN0IHJlc29sdXRpb24gb2YKK3RoYXQgcHJvY2VkdXJlLCBpZiBub3QgYWxyZWFkeSBkb25lLCBhbmQgYSBjaGVjayBvZiB0aGUgaW50ZXJmYWNlcy4gIFRoZQorZGVwZW5kZW5jZXMgYXJlIHJlc29sdmVkIGJ5IGNoYW5naW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgZmlsZSBpcwordHJhbnNsYXRlZCBpbnRvIHRoZSBiYWNrZW5kIHRyZWUuICBUaHVzLCBhIHByb2NlZHVyZSB0aGF0IGlzIHJlZmVyZW5jZWQKK2lzIHRyYW5zbGF0ZWQgYmVmb3JlIHRoZSByZWZlcmVuY2UgYW5kIHRoZSBkdXBsaWNhdGlvbiBvZiBiYWNrZW5kIHRyZWUKK2RlY2xhcmF0aW9ucyBlbGltaW5hdGVkLgorLlNwCitUaGUgXGZCXC1mbm9cLXdob2xlXC1maWxlXGZSIG9wdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBtYXkgbGVhZCB0byB3cm9uZyBjb2RlLgorLklQICJcZkJcLWZzZWNvbmRcLXVuZGVyc2NvcmVcZlIiIDQKKy5JWCBJdGVtICItZnNlY29uZC11bmRlcnNjb3JlIgorQnkgZGVmYXVsdCwgXHMtMUdOVVxzMCBGb3J0cmFuIGFwcGVuZHMgYW4gdW5kZXJzY29yZSB0byBleHRlcm5hbAorbmFtZXMuICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIFxzLTFHTlVcczAgRm9ydHJhbiBhcHBlbmRzIHR3bwordW5kZXJzY29yZXMgdG8gbmFtZXMgd2l0aCB1bmRlcnNjb3JlcyBhbmQgb25lIHVuZGVyc2NvcmUgdG8gZXh0ZXJuYWwgbmFtZXMKK3dpdGggbm8gdW5kZXJzY29yZXMuICBccy0xR05VXHMwIEZvcnRyYW4gYWxzbyBhcHBlbmRzIHR3byB1bmRlcnNjb3JlcyB0bworaW50ZXJuYWwgbmFtZXMgd2l0aCB1bmRlcnNjb3JlcyB0byBhdm9pZCBuYW1pbmcgY29sbGlzaW9ucyB3aXRoIGV4dGVybmFsCituYW1lcy4KKy5TcAorVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBcZkJcLWZub1wtdW5kZXJzY29yaW5nXGZSIGlzCitpbiBlZmZlY3QuICBJdCBpcyBpbXBsaWVkIGJ5IHRoZSBcZkJcLWZmMmNcZlIgb3B0aW9uLgorLlNwCitPdGhlcndpc2UsIHdpdGggdGhpcyBvcHRpb24sIGFuIGV4dGVybmFsIG5hbWUgc3VjaCBhcyBcZihDV1wqKENgTUFYX0NPVU5UXCooQydcZlIKK2lzIGltcGxlbWVudGVkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBsaW5rLXRpbWUgZXh0ZXJuYWwgc3ltYm9sCitcJlxmKENXXCooQ2BtYXhfY291bnRfXHxfXCooQydcZlIsIGluc3RlYWQgb2YgXGYoQ1dcKihDYG1heF9jb3VudF9cKihDJ1xmUi4gIFRoaXMgaXMgcmVxdWlyZWQKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggXGZCZzc3XGZSIGFuZCBcZkJmMmNcZlIsIGFuZCBpcyBpbXBsaWVkCitieSB1c2Ugb2YgdGhlIFxmQlwtZmYyY1xmUiBvcHRpb24uCisuSVAgIlxmQlwtZmNvYXJyYXk9XGZSXGZJPGtleXdvcmQ+XGZSIiA0CisuSVggSXRlbSAiLWZjb2FycmF5PTxrZXl3b3JkPiIKKy5SUyA0CisuUEQgMAorLklQICJcZkJub25lXGZSIiA0CisuSVggSXRlbSAibm9uZSIKKy5QRAorRGlzYWJsZSBjb2FycmF5IHN1cHBvcnQ7IHVzaW5nIGNvYXJyYXkgZGVjbGFyYXRpb25zIGFuZCBpbWFnZS1jb250cm9sCitzdGF0ZW1lbnRzIHdpbGwgcHJvZHVjZSBhIGNvbXBpbGUtdGltZSBlcnJvci4gKERlZmF1bHQpCisuSVAgIlxmQnNpbmdsZVxmUiIgNAorLklYIEl0ZW0gInNpbmdsZSIKK1NpbmdsZS1pbWFnZSBtb2RlLCBpLmUuIFxmKENXXCooQ2BudW1faW1hZ2VzKClcKihDJ1xmUiBpcyBhbHdheXMgb25lLgorLklQICJcZkJsaWJcZlIiIDQKKy5JWCBJdGVtICJsaWIiCitMaWJyYXJ5LWJhc2VkIGNvYXJyYXkgcGFyYWxsZWxpemF0aW9uOyBhIHN1aXRhYmxlIFxzLTFHTlVcczAgRm9ydHJhbiBjb2FycmF5CitsaWJyYXJ5IG5lZWRzIHRvIGJlIGxpbmtlZC4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLWZjaGVjaz1cZlJcZkk8a2V5d29yZD5cZlIiIDQKKy5JWCBJdGVtICItZmNoZWNrPTxrZXl3b3JkPiIKK0VuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBydW4tdGltZSBjaGVja3M7IHRoZSBhcmd1bWVudCBzaGFsbCBiZQorYSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiB0aGUgZm9sbG93aW5nIGtleXdvcmRzLgorLlJTIDQKKy5JUCAiXGZCYWxsXGZSIiA0CisuSVggSXRlbSAiYWxsIgorRW5hYmxlIGFsbCBydW4tdGltZSB0ZXN0IG9mIFxmQlwtZmNoZWNrXGZSLgorLklQICJcZkJhcnJheS10ZW1wc1xmUiIgNAorLklYIEl0ZW0gImFycmF5LXRlbXBzIgorV2FybnMgYXQgcnVuIHRpbWUgd2hlbiBmb3IgcGFzc2luZyBhbiBhY3R1YWwgYXJndW1lbnQgYSB0ZW1wb3JhcnkgYXJyYXkKK2hhZCB0byBiZSBnZW5lcmF0ZWQuIFRoZSBpbmZvcm1hdGlvbiBnZW5lcmF0ZWQgYnkgdGhpcyB3YXJuaW5nIGlzCitzb21ldGltZXMgdXNlZnVsIGluIG9wdGltaXphdGlvbiwgaW4gb3JkZXIgdG8gYXZvaWQgc3VjaCB0ZW1wb3Jhcmllcy4KKy5TcAorTm90ZTogVGhlIHdhcm5pbmcgaXMgb25seSBwcmludGVkIG9uY2UgcGVyIGxvY2F0aW9uLgorLklQICJcZkJib3VuZHNcZlIiIDQKKy5JWCBJdGVtICJib3VuZHMiCitFbmFibGUgZ2VuZXJhdGlvbiBvZiBydW4tdGltZSBjaGVja3MgZm9yIGFycmF5IHN1YnNjcmlwdHMKK2FuZCBhZ2FpbnN0IHRoZSBkZWNsYXJlZCBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcy4gIEl0IGFsc28KK2NoZWNrcyBhcnJheSBpbmRpY2VzIGZvciBhc3N1bWVkIGFuZCBkZWZlcnJlZAorc2hhcGUgYXJyYXlzIGFnYWluc3QgdGhlIGFjdHVhbCBhbGxvY2F0ZWQgYm91bmRzIGFuZCBlbnN1cmVzIHRoYXQgYWxsIHN0cmluZworbGVuZ3RocyBhcmUgZXF1YWwgZm9yIGNoYXJhY3RlciBhcnJheSBjb25zdHJ1Y3RvcnMgd2l0aG91dCBhbiBleHBsaWNpdAordHlwZXNwZWMuCisuU3AKK1NvbWUgY2hlY2tzIHJlcXVpcmUgdGhhdCBcZkJcLWZjaGVjaz1ib3VuZHNcZlIgaXMgc2V0IGZvcgordGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBtYWluIHByb2dyYW0uCisuU3AKK05vdGU6IEluIHRoZSBmdXR1cmUgdGhpcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIGZvcm1zIG9mIGNoZWNraW5nLCBlLmcuLAorY2hlY2tpbmcgc3Vic3RyaW5nIHJlZmVyZW5jZXMuCisuSVAgIlxmQmRvXGZSIiA0CisuSVggSXRlbSAiZG8iCitFbmFibGUgZ2VuZXJhdGlvbiBvZiBydW4tdGltZSBjaGVja3MgZm9yIGludmFsaWQgbW9kaWZpY2F0aW9uIG9mIGxvb3AKK2l0ZXJhdGlvbiB2YXJpYWJsZXMuCisuSVAgIlxmQm1lbVxmUiIgNAorLklYIEl0ZW0gIm1lbSIKK0VuYWJsZSBnZW5lcmF0aW9uIG9mIHJ1bi10aW1lIGNoZWNrcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24uCitOb3RlOiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgZXhwbGljaXQgYWxsb2NhdGlvbnMgdXNpbmcgdGhlCitcJlxmKENXXCooQ2BBTExPQ0FURVwqKEMnXGZSIHN0YXRlbWVudCwgd2hpY2ggd2lsbCBiZSBhbHdheXMgY2hlY2tlZC4KKy5JUCAiXGZCcG9pbnRlclxmUiIgNAorLklYIEl0ZW0gInBvaW50ZXIiCitFbmFibGUgZ2VuZXJhdGlvbiBvZiBydW4tdGltZSBjaGVja3MgZm9yIHBvaW50ZXJzIGFuZCBhbGxvY2F0YWJsZXMuCisuSVAgIlxmQnJlY3Vyc2lvblxmUiIgNAorLklYIEl0ZW0gInJlY3Vyc2lvbiIKK0VuYWJsZSBnZW5lcmF0aW9uIG9mIHJ1bi10aW1lIGNoZWNrcyBmb3IgcmVjdXJzaXZlbHkgY2FsbGVkIHN1YnJvdXRpbmVzIGFuZAorZnVuY3Rpb25zIHdoaWNoIGFyZSBub3QgbWFya2VkIGFzIHJlY3Vyc2l2ZS4gU2VlIGFsc28gXGZCXC1mcmVjdXJzaXZlXGZSLgorTm90ZTogVGhpcyBjaGVjayBkb2VzIG5vdCB3b3JrIGZvciBPcGVuTVAgcHJvZ3JhbXMgYW5kIGlzIGRpc2FibGVkIGlmIHVzZWQKK3RvZ2V0aGVyIHdpdGggXGZCXC1mcmVjdXJzaXZlXGZSIGFuZCBcZkJcLWZvcGVubXBcZlIuCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1mYm91bmRzXC1jaGVja1xmUiIgNAorLklYIEl0ZW0gIi1mYm91bmRzLWNoZWNrIgorRGVwcmVjYXRlZCBhbGlhcyBmb3IgXGZCXC1mY2hlY2s9Ym91bmRzXGZSLgorLklQICJcZkJcLWZjaGVja1wtYXJyYXlcLXRlbXBvcmFyaWVzXGZSIiA0CisuSVggSXRlbSAiLWZjaGVjay1hcnJheS10ZW1wb3JhcmllcyIKK0RlcHJlY2F0ZWQgYWxpYXMgZm9yIFxmQlwtZmNoZWNrPWFycmF5XC10ZW1wc1xmUi4KKy5JUCAiXGZCXC1mbWF4XC1hcnJheVwtY29uc3RydWN0b3I9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1mbWF4LWFycmF5LWNvbnN0cnVjdG9yPW4iCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBpbmNyZWFzZSB0aGUgdXBwZXIgbGltaXQgcGVybWl0dGVkIGluIAorYXJyYXkgY29uc3RydWN0b3JzLiAgVGhlIGNvZGUgYmVsb3cgcmVxdWlyZXMgdGhpcyBvcHRpb24gdG8gZXhwYW5kCit0aGUgYXJyYXkgYXQgY29tcGlsZSB0aW1lLgorLlNwCisuVmIgNworXCYgICAgICAgIHByb2dyYW0gdGVzdAorXCYgICAgICAgIGltcGxpY2l0IG5vbmUKK1wmICAgICAgICBpbnRlZ2VyIGoKK1wmICAgICAgICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogbiA9IDEwMDAwMAorXCYgICAgICAgIGludGVnZXIsIHBhcmFtZXRlciA6OiBpKG4pID0gKC8gKDIqaiwgaiA9IDEsIG4pIC8pCitcJiAgICAgICAgcHJpbnQgXCooQXEoMTAoSTAsMVgpKVwqKEFxLCBpCitcJiAgICAgICAgZW5kIHByb2dyYW0gdGVzdAorLlZlCisuU3AKK1wmXGZJQ2F1dGlvbjogIFRoaXMgb3B0aW9uIGNhbiBsZWFkIHRvIGxvbmcgY29tcGlsZSB0aW1lcyBhbmQgZXhjZXNzaXZlbHkKK2xhcmdlIG9iamVjdCBmaWxlcy5cZlIKKy5TcAorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFxmSW5cZlIgaXMgNjU1MzUuCisuSVAgIlxmQlwtZm1heFwtc3RhY2tcLXZhclwtc2l6ZT1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZtYXgtc3RhY2stdmFyLXNpemU9biIKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbGFyZ2VzdCBhcnJheSB0aGF0IHdpbGwgYmUgcHV0CitvbiB0aGUgc3RhY2s7IGlmIHRoZSBzaXplIGlzIGV4Y2VlZGVkIHN0YXRpYyBtZW1vcnkgaXMgdXNlZCAoZXhjZXB0IGluCitwcm9jZWR1cmVzIG1hcmtlZCBhcyBccy0xUkVDVVJTSVZFXHMwKS4gVXNlIHRoZSBvcHRpb24gXGZCXC1mcmVjdXJzaXZlXGZSIHRvCithbGxvdyBmb3IgcmVjdXJzaXZlIHByb2NlZHVyZXMgd2hpY2ggZG8gbm90IGhhdmUgYSBccy0xUkVDVVJTSVZFXHMwIGF0dHJpYnV0ZSBvcgorZm9yIHBhcmFsbGVsIHByb2dyYW1zLiBVc2UgXGZCXC1mbm9cLWF1dG9tYXRpY1xmUiB0byBuZXZlciB1c2UgdGhlIHN0YWNrLgorLlNwCitUaGlzIG9wdGlvbiBjdXJyZW50bHkgb25seSBhZmZlY3RzIGxvY2FsIGFycmF5cyBkZWNsYXJlZCB3aXRoIGNvbnN0YW50Citib3VuZHMsIGFuZCBtYXkgbm90IGFwcGx5IHRvIGFsbCBjaGFyYWN0ZXIgdmFyaWFibGVzLgorRnV0dXJlIHZlcnNpb25zIG9mIFxzLTFHTlVcczAgRm9ydHJhbiBtYXkgaW1wcm92ZSB0aGlzIGJlaGF2aW9yLgorLlNwCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgXGZJblxmUiBpcyAzMjc2OC4KKy5JUCAiXGZCXC1mc3RhY2tcLWFycmF5c1xmUiIgNAorLklYIEl0ZW0gIi1mc3RhY2stYXJyYXlzIgorQWRkaW5nIHRoaXMgb3B0aW9uIHdpbGwgbWFrZSB0aGUgRm9ydHJhbiBjb21waWxlciBwdXQgYWxsIGxvY2FsIGFycmF5cywKK2V2ZW4gdGhvc2Ugb2YgdW5rbm93biBzaXplIG9udG8gc3RhY2sgbWVtb3J5LiAgSWYgeW91ciBwcm9ncmFtIHVzZXMgdmVyeQorbGFyZ2UgbG9jYWwgYXJyYXlzIGl0IGlzIHBvc3NpYmxlIHRoYXQgeW91IHdpbGwgaGF2ZSB0byBleHRlbmQgeW91ciBydW50aW1lCitsaW1pdHMgZm9yIHN0YWNrIG1lbW9yeSBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zLiBUaGlzIGZsYWcgaXMgZW5hYmxlZAorYnkgZGVmYXVsdCBhdCBvcHRpbWl6YXRpb24gbGV2ZWwgXGZCXC1PZmFzdFxmUi4KKy5JUCAiXGZCXC1mcGFja1wtZGVyaXZlZFxmUiIgNAorLklYIEl0ZW0gIi1mcGFjay1kZXJpdmVkIgorVGhpcyBvcHRpb24gdGVsbHMgXHMtMUdOVVxzMCBGb3J0cmFuIHRvIHBhY2sgZGVyaXZlZCB0eXBlIG1lbWJlcnMgYXMgY2xvc2VseSBhcworcG9zc2libGUuICBDb2RlIGNvbXBpbGVkIHdpdGggdGhpcyBvcHRpb24gaXMgbGlrZWx5IHRvIGJlIGluY29tcGF0aWJsZQord2l0aCBjb2RlIGNvbXBpbGVkIHdpdGhvdXQgdGhpcyBvcHRpb24sIGFuZCBtYXkgZXhlY3V0ZSBzbG93ZXIuCisuSVAgIlxmQlwtZnJlcGFja1wtYXJyYXlzXGZSIiA0CisuSVggSXRlbSAiLWZyZXBhY2stYXJyYXlzIgorSW4gc29tZSBjaXJjdW1zdGFuY2VzIFxzLTFHTlVcczAgRm9ydHJhbiBtYXkgcGFzcyBhc3N1bWVkIHNoYXBlIGFycmF5CitzZWN0aW9ucyB2aWEgYSBkZXNjcmlwdG9yIGRlc2NyaWJpbmcgYSBub25jb250aWd1b3VzIGFyZWEgb2YgbWVtb3J5LgorVGhpcyBvcHRpb24gYWRkcyBjb2RlIHRvIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSB0byByZXBhY2sgdGhlIGRhdGEgaW50bworYSBjb250aWd1b3VzIGJsb2NrIGF0IHJ1bnRpbWUuCisuU3AKK1RoaXMgc2hvdWxkIHJlc3VsdCBpbiBmYXN0ZXIgYWNjZXNzZXMgdG8gdGhlIGFycmF5LiAgSG93ZXZlciBpdCBjYW4gaW50cm9kdWNlCitzaWduaWZpY2FudCBvdmVyaGVhZCB0byB0aGUgZnVuY3Rpb24gY2FsbCwgZXNwZWNpYWxseSAgd2hlbiB0aGUgcGFzc2VkIGRhdGEKK2lzIG5vbmNvbnRpZ3VvdXMuCisuSVAgIlxmQlwtZnNob3J0XC1lbnVtc1xmUiIgNAorLklYIEl0ZW0gIi1mc2hvcnQtZW51bXMiCitUaGlzIG9wdGlvbiBpcyBwcm92aWRlZCBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIEMgY29kZSB0aGF0IHdhcworY29tcGlsZWQgd2l0aCB0aGUgXGZCXC1mc2hvcnRcLWVudW1zXGZSIG9wdGlvbi4gIEl0IHdpbGwgbWFrZQorXCZccy0xR05VXHMwIEZvcnRyYW4gY2hvb3NlIHRoZSBzbWFsbGVzdCBcZihDV1wqKENgSU5URUdFUlwqKEMnXGZSIGtpbmQgYSBnaXZlbgorZW51bWVyYXRvciBzZXQgd2lsbCBmaXQgaW4sIGFuZCBnaXZlIGFsbCBpdHMgZW51bWVyYXRvcnMgdGhpcyBraW5kLgorLklQICJcZkJcLWZleHRlcm5hbFwtYmxhc1xmUiIgNAorLklYIEl0ZW0gIi1mZXh0ZXJuYWwtYmxhcyIKK1RoaXMgb3B0aW9uIHdpbGwgbWFrZSBcZkJnZm9ydHJhblxmUiBnZW5lcmF0ZSBjYWxscyB0byBccy0xQkxBU1xzMCBmdW5jdGlvbnMKK2ZvciBzb21lIG1hdHJpeCBvcGVyYXRpb25zIGxpa2UgXGYoQ1dcKihDYE1BVE1VTFwqKEMnXGZSLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBvd24KK2FsZ29yaXRobXMsIGlmIHRoZSBzaXplIG9mIHRoZSBtYXRyaWNlcyBpbnZvbHZlZCBpcyBsYXJnZXIgdGhhbiBhIGdpdmVuCitsaW1pdCAoc2VlIFxmQlwtZmJsYXNcLW1hdG11bFwtbGltaXRcZlIpLiAgVGhpcyBtYXkgYmUgcHJvZml0YWJsZSBpZiBhbgorb3B0aW1pemVkIHZlbmRvciBccy0xQkxBU1xzMCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS4gIFRoZSBccy0xQkxBU1xzMCBsaWJyYXJ5IHdpbGwgaGF2ZQordG8gYmUgc3BlY2lmaWVkIGF0IGxpbmsgdGltZS4KKy5JUCAiXGZCXC1mYmxhc1wtbWF0bXVsXC1saW1pdD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZibGFzLW1hdG11bC1saW1pdD1uIgorT25seSBzaWduaWZpY2FudCB3aGVuIFxmQlwtZmV4dGVybmFsXC1ibGFzXGZSIGlzIGluIGVmZmVjdC4KK01hdHJpeCBtdWx0aXBsaWNhdGlvbiBvZiBtYXRyaWNlcyB3aXRoIHNpemUgbGFyZ2VyIHRoYW4gKG9yIGVxdWFsIHRvKSBcZkluXGZSCit3aWxsIGJlIHBlcmZvcm1lZCBieSBjYWxscyB0byBccy0xQkxBU1xzMCBmdW5jdGlvbnMsIHdoaWxlIG90aGVycyB3aWxsIGJlCitoYW5kbGVkIGJ5IFxmQmdmb3J0cmFuXGZSIGludGVybmFsIGFsZ29yaXRobXMuIElmIHRoZSBtYXRyaWNlcworaW52b2x2ZWQgYXJlIG5vdCBzcXVhcmUsIHRoZSBzaXplIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIHVzaW5nIHRoZQorZ2VvbWV0cmljIG1lYW4gb2YgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGFyZ3VtZW50IGFuZCByZXN1bHQgbWF0cmljZXMuCisuU3AKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBcZkluXGZSIGlzIDMwLgorLklQICJcZkJcLWZyZWN1cnNpdmVcZlIiIDQKKy5JWCBJdGVtICItZnJlY3Vyc2l2ZSIKK0FsbG93IGluZGlyZWN0IHJlY3Vyc2lvbiBieSBmb3JjaW5nIGFsbCBsb2NhbCBhcnJheXMgdG8gYmUgYWxsb2NhdGVkCitvbiB0aGUgc3RhY2suIFRoaXMgZmxhZyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoCitcJlxmQlwtZm1heFwtc3RhY2tcLXZhclwtc2l6ZT1cZlIgb3IgXGZCXC1mbm9cLWF1dG9tYXRpY1xmUi4KKy5JUCAiXGZCXC1maW5pdFwtbG9jYWxcLXplcm9cZlIiIDQKKy5JWCBJdGVtICItZmluaXQtbG9jYWwtemVybyIKKy5QRCAwCisuSVAgIlxmQlwtZmluaXRcLWludGVnZXI9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi1maW5pdC1pbnRlZ2VyPW4iCisuSVAgIlxmQlwtZmluaXRcLXJlYWw9XGZSXGZJPHplcm98aW5mfFwtaW5mfG5hbnxzbmFuPlxmUiIgNAorLklYIEl0ZW0gIi1maW5pdC1yZWFsPTx6ZXJvfGluZnwtaW5mfG5hbnxzbmFuPiIKKy5JUCAiXGZCXC1maW5pdFwtbG9naWNhbD1cZlJcZkk8dHJ1ZXxmYWxzZT5cZlIiIDQKKy5JWCBJdGVtICItZmluaXQtbG9naWNhbD08dHJ1ZXxmYWxzZT4iCisuSVAgIlxmQlwtZmluaXRcLWNoYXJhY3Rlcj1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLWZpbml0LWNoYXJhY3Rlcj1uIgorLlBECitUaGUgXGZCXC1maW5pdFwtbG9jYWxcLXplcm9cZlIgb3B0aW9uIGluc3RydWN0cyB0aGUgY29tcGlsZXIgdG8KK2luaXRpYWxpemUgbG9jYWwgXGYoQ1dcKihDYElOVEVHRVJcKihDJ1xmUiwgXGYoQ1dcKihDYFJFQUxcKihDJ1xmUiwgYW5kIFxmKENXXCooQ2BDT01QTEVYXCooQydcZlIKK3ZhcmlhYmxlcyB0byB6ZXJvLCBcZihDV1wqKENgTE9HSUNBTFwqKEMnXGZSIHZhcmlhYmxlcyB0byBmYWxzZSwgYW5kCitcJlxmKENXXCooQ2BDSEFSQUNURVJcKihDJ1xmUiB2YXJpYWJsZXMgdG8gYSBzdHJpbmcgb2YgbnVsbCBieXRlcy4gIEZpbmVyLWdyYWluZWQKK2luaXRpYWxpemF0aW9uIG9wdGlvbnMgYXJlIHByb3ZpZGVkIGJ5IHRoZQorXCZcZkJcLWZpbml0XC1pbnRlZ2VyPVxmUlxmSW5cZlIsCitcJlxmQlwtZmluaXRcLXJlYWw9XGZSXGZJPHplcm98aW5mfFwtaW5mfG5hbnxzbmFuPlxmUiAod2hpY2ggYWxzbyBpbml0aWFsaXplcwordGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBsb2NhbCBcZihDV1wqKENgQ09NUExFWFwqKEMnXGZSIHZhcmlhYmxlcyksCitcJlxmQlwtZmluaXRcLWxvZ2ljYWw9XGZSXGZJPHRydWV8ZmFsc2U+XGZSLCBhbmQKK1wmXGZCXC1maW5pdFwtY2hhcmFjdGVyPVxmUlxmSW5cZlIgKHdoZXJlIFxmSW5cZlIgaXMgYW4gXHMtMUFTQ0lJXHMwIGNoYXJhY3RlcgordmFsdWUpIG9wdGlvbnMuICBUaGVzZSBvcHRpb25zIGRvIG5vdCBpbml0aWFsaXplCisuUlMgNAorLklQICJcKGJ1IiA0CithbGxvY2F0YWJsZSBhcnJheXMKKy5JUCAiXChidSIgNAorY29tcG9uZW50cyBvZiBkZXJpdmVkIHR5cGUgdmFyaWFibGVzCisuSVAgIlwoYnUiIDQKK3ZhcmlhYmxlcyB0aGF0IGFwcGVhciBpbiBhbiBcZihDV1wqKENgRVFVSVZBTEVOQ0VcKihDJ1xmUiBzdGF0ZW1lbnQuCisuUkUKKy5SUyA0CisuU3AKKyhUaGVzZSBsaW1pdGF0aW9ucyBtYXkgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMpLgorLlNwCitOb3RlIHRoYXQgdGhlIFxmQlwtZmluaXRcLXJlYWw9bmFuXGZSIG9wdGlvbiBpbml0aWFsaXplcyBcZihDV1wqKENgUkVBTFwqKEMnXGZSCithbmQgXGYoQ1dcKihDYENPTVBMRVhcKihDJ1xmUiB2YXJpYWJsZXMgd2l0aCBhIHF1aWV0IE5hTi4gRm9yIGEgc2lnbmFsbGluZyBOYU4KK3VzZSBcZkJcLWZpbml0XC1yZWFsPXNuYW5cZlI7IG5vdGUsIGhvd2V2ZXIsIHRoYXQgY29tcGlsZS10aW1lCitvcHRpbWl6YXRpb25zIG1heSBjb252ZXJ0IHRoZW0gaW50byBxdWlldCBOYU4gYW5kIHRoYXQgdHJhcHBpbmcKK25lZWRzIHRvIGJlIGVuYWJsZWQgKGUuZy4gdmlhIFxmQlwtZmZwZVwtdHJhcFxmUikuCisuU3AKK0ZpbmFsbHksIG5vdGUgdGhhdCBlbmFibGluZyBhbnkgb2YgdGhlIFxmQlwtZmluaXRcLSpcZlIgb3B0aW9ucyB3aWxsCitzaWxlbmNlIHdhcm5pbmdzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGVtaXR0ZWQgYnkgXGZCXC1XdW5pbml0aWFsaXplZFxmUgorZm9yIHRoZSBhZmZlY3RlZCBsb2NhbCB2YXJpYWJsZXMuCisuUkUKKy5JUCAiXGZCXC1mYWxpZ25cLWNvbW1vbnNcZlIiIDQKKy5JWCBJdGVtICItZmFsaWduLWNvbW1vbnMiCitCeSBkZWZhdWx0LCBcZkJnZm9ydHJhblxmUiBlbmZvcmNlcyBwcm9wZXIgYWxpZ25tZW50IG9mIGFsbCB2YXJpYWJsZXMgaW4gYQorXCZcZihDV1wqKENgQ09NTU9OXCooQydcZlIgYmxvY2sgYnkgcGFkZGluZyB0aGVtIGFzIG5lZWRlZC4gT24gY2VydGFpbiBwbGF0Zm9ybXMgdGhpcyBpcyBtYW5kYXRvcnksCitvbiBvdGhlcnMgaXQgaW5jcmVhc2VzIHBlcmZvcm1hbmNlLiBJZiBhIFxmKENXXCooQ2BDT01NT05cKihDJ1xmUiBibG9jayBpcyBub3QgZGVjbGFyZWQgd2l0aAorY29uc2lzdGVudCBkYXRhIHR5cGVzIGV2ZXJ5d2hlcmUsIHRoaXMgcGFkZGluZyBjYW4gY2F1c2UgdHJvdWJsZSwgYW5kCitcJlxmQlwtZm5vXC1hbGlnblwtY29tbW9uc1xmUiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIGF1dG9tYXRpYyBhbGlnbm1lbnQuIFRoZQorc2FtZSBmb3JtIG9mIHRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBhbGwgZmlsZXMgdGhhdCBzaGFyZSBhIFxmKENXXCooQ2BDT01NT05cKihDJ1xmUiBibG9jay4KK1RvIGF2b2lkIHBvdGVudGlhbCBhbGlnbm1lbnQgaXNzdWVzIGluIFxmKENXXCooQ2BDT01NT05cKihDJ1xmUiBibG9ja3MsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9yZGVyCitvYmplY3RzIGZyb20gbGFyZ2VzdCB0byBzbWFsbGVzdC4KKy5JUCAiXGZCXC1mbm9cLXByb3RlY3RcLXBhcmVuc1xmUiIgNAorLklYIEl0ZW0gIi1mbm8tcHJvdGVjdC1wYXJlbnMiCitCeSBkZWZhdWx0IHRoZSBwYXJlbnRoZXNlcyBpbiBleHByZXNzaW9uIGFyZSBob25vcmVkIGZvciBhbGwgb3B0aW1pemF0aW9uCitsZXZlbHMgc3VjaCB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdCBkbyBhbnkgcmUtYXNzb2NpYXRpb24uIFVzaW5nCitcJlxmQlwtZm5vXC1wcm90ZWN0XC1wYXJlbnNcZlIgYWxsb3dzIHRoZSBjb21waWxlciB0byByZW9yZGVyIFxmKENXXCooQ2BSRUFMXCooQydcZlIgYW5kCitcJlxmKENXXCooQ2BDT01QTEVYXCooQydcZlIgZXhwcmVzc2lvbnMgdG8gcHJvZHVjZSBmYXN0ZXIgY29kZS4gTm90ZSB0aGF0IGZvciB0aGUgcmUtYXNzb2NpYXRpb24KK29wdGltaXphdGlvbiBcZkJcLWZub1wtc2lnbmVkXC16ZXJvc1xmUiBhbmQgXGZCXC1mbm9cLXRyYXBwaW5nXC1tYXRoXGZSCituZWVkIHRvIGJlIGluIGVmZmVjdC4gVGhlIHBhcmVudGhlc2VzIHByb3RlY3Rpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB1bmxlc3MKK1wmXGZCXC1PZmFzdFxmUiBpcyBnaXZlbi4KKy5JUCAiXGZCXC1mcmVhbGxvY1wtbGhzXGZSIiA0CisuSVggSXRlbSAiLWZyZWFsbG9jLWxocyIKK0FuIGFsbG9jYXRhYmxlIGxlZnQtaGFuZCBzaWRlIG9mIGFuIGludHJpbnNpYyBhc3NpZ25tZW50IGlzIGF1dG9tYXRpY2FsbHkKKyhyZSlhbGxvY2F0ZWQgaWYgaXQgaXMgZWl0aGVyIHVuYWxsb2NhdGVkIG9yIGhhcyBhIGRpZmZlcmVudCBzaGFwZS4gVGhlCitvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGV4Y2VwdCB3aGVuIFxmQlwtc3RkPWY5NVxmUiBpcyBnaXZlbi4gU2VlCithbHNvIFxmQlwtV3JlYWxsb2NcLWxoc1xmUi4KKy5JUCAiXGZCXC1mYWdncmVzc2l2ZVwtZnVuY3Rpb25cLWVsaW1pbmF0aW9uXGZSIiA0CisuSVggSXRlbSAiLWZhZ2dyZXNzaXZlLWZ1bmN0aW9uLWVsaW1pbmF0aW9uIgorRnVuY3Rpb25zIHdpdGggaWRlbnRpY2FsIGFyZ3VtZW50IGxpc3RzIGFyZSBlbGltaW5hdGVkIHdpdGhpbgorc3RhdGVtZW50cywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbWFya2VkCitcJlxmKENXXCooQ2BQVVJFXCooQydcZlIgb3Igbm90LiBGb3IgZXhhbXBsZSwgaW4KKy5TcAorLlZiIDEKK1wmICAgICAgICAgIGEgPSBmKGIsYykgKyBmKGIsYykKKy5WZQorLlNwCit0aGVyZSB3aWxsIG9ubHkgYmUgYSBzaW5nbGUgY2FsbCB0byBcZihDV1wqKENgZlwqKEMnXGZSLiAgVGhpcyBvcHRpb24gb25seSB3b3JrcworaWYgXGZCXC1mZnJvbnRlbmRcLW9wdGltaXplXGZSIGlzIGluIGVmZmVjdC4KKy5JUCAiXGZCXC1mZnJvbnRlbmRcLW9wdGltaXplXGZSIiA0CisuSVggSXRlbSAiLWZmcm9udGVuZC1vcHRpbWl6ZSIKK1RoaXMgb3B0aW9uIHBlcmZvcm1zIGZyb250LWVuZCBvcHRpbWl6YXRpb24sIGJhc2VkIG9uIG1hbmlwdWxhdGluZworcGFydHMgdGhlIEZvcnRyYW4gcGFyc2UgdHJlZS4gIEVuYWJsZWQgYnkgZGVmYXVsdCBieSBhbnkgXGZCXC1PXGZSCitvcHRpb24uICBPcHRpbWl6YXRpb25zIGVuYWJsZWQgYnkgdGhpcyBvcHRpb24gaW5jbHVkZSBlbGltaW5hdGlvbiBvZgoraWRlbnRpY2FsIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiBleHByZXNzaW9ucywgcmVtb3ZpbmcgdW5uZWNlc3NhcnkKK2NhbGxzIHRvIFxmKENXXCooQ2BUUklNXCooQydcZlIgaW4gY29tcGFyaXNvbnMgYW5kIGFzc2lnbm1lbnRzIGFuZCByZXBsYWNpbmcKK1wmXGYoQ1dUUklNKGEpXGZSIHdpdGggXGYoQ1dcKihDYGEoMTpMRU5fVFJJTShhKSlcKihDJ1xmUi4gCitJdCBjYW4gYmUgZGVzZWxlY3RlZCBieSBzcGVjaWZ5aW5nIFxmQlwtZm5vXC1mcm9udGVuZFwtb3B0aW1pemVcZlIuCisuU0ggIkVOVklST05NRU5UIgorLklYIEhlYWRlciAiRU5WSVJPTk1FTlQiCitUaGUgXGZCZ2ZvcnRyYW5cZlIgY29tcGlsZXIgY3VycmVudGx5IGRvZXMgbm90IG1ha2UgdXNlIG9mIGFueSBlbnZpcm9ubWVudAordmFyaWFibGVzIHRvIGNvbnRyb2wgaXRzIG9wZXJhdGlvbiBhYm92ZSBhbmQgYmV5b25kIHRob3NlCit0aGF0IGFmZmVjdCB0aGUgb3BlcmF0aW9uIG9mIFxmQmdjY1xmUi4KKy5TSCAiQlVHUyIKKy5JWCBIZWFkZXIgIkJVR1MiCitGb3IgaW5zdHJ1Y3Rpb25zIG9uIHJlcG9ydGluZyBidWdzLCBzZWUKKzxcZkJodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9nY2NcLWxpbmFyb1xmUj4uCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitcJlxmSWdwbFxmUlx8KDcpLCBcZklnZmRsXGZSXHwoNyksIFxmSWZzZlwtZnVuZGluZ1xmUlx8KDcpLAorXCZcZkljcHBcZlJcfCgxKSwgXGZJZ2NvdlxmUlx8KDEpLCBcZklnY2NcZlJcfCgxKSwgXGZJYXNcZlJcfCgxKSwgXGZJbGRcZlJcfCgxKSwgXGZJZ2RiXGZSXHwoMSksIFxmSWFkYlxmUlx8KDEpLCBcZklkYnhcZlJcfCgxKSwgXGZJc2RiXGZSXHwoMSkKK2FuZCB0aGUgSW5mbyBlbnRyaWVzIGZvciBcZklnY2NcZlIsIFxmSWNwcFxmUiwgXGZJZ2ZvcnRyYW5cZlIsIFxmSWFzXGZSLAorXCZcZklsZFxmUiwgXGZJYmludXRpbHNcZlIgYW5kIFxmSWdkYlxmUi4KKy5TSCAiQVVUSE9SIgorLklYIEhlYWRlciAiQVVUSE9SIgorU2VlIHRoZSBJbmZvIGVudHJ5IGZvciBcZkJnZm9ydHJhblxmUiBmb3IgY29udHJpYnV0b3JzIHRvIFxzLTFHQ0NcczAgYW5kCitcJlxzLTFHTlVcczAgRm9ydHJhbi4KKy5TSCAiQ09QWVJJR0hUIgorLklYIEhlYWRlciAiQ09QWVJJR0hUIgorQ29weXJpZ2h0IChjKSAyMDA0XC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMgb3IKK2FueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3aXRoIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIFwqKEwiRnVuZGluZyBGcmVlIFNvZnR3YXJlXCooUiIsIHRoZSBGcm9udC1Db3ZlcgorVGV4dHMgYmVpbmcgKGEpIChzZWUgYmVsb3cpLCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyAoYikKKyhzZWUgYmVsb3cpLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBcZklnZmRsXGZSXHwoNykgbWFuIHBhZ2UuCisuUFAKKyhhKSBUaGUgXHMtMUZTRlxzMCdzIEZyb250LUNvdmVyIFRleHQgaXM6CisuUFAKKy5WYiAxCitcJiAgICAgQSBHTlUgTWFudWFsCisuVmUKKy5QUAorKGIpIFRoZSBccy0xRlNGXHMwJ3MgQmFjay1Db3ZlciBUZXh0IGlzOgorLlBQCisuVmIgMworXCYgICAgIFlvdSBoYXZlIGZyZWVkb20gdG8gY29weSBhbmQgbW9kaWZ5IHRoaXMgR05VIE1hbnVhbCwgbGlrZSBHTlUKK1wmICAgICBzb2Z0d2FyZS4gIENvcGllcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiByYWlzZQorXCYgICAgIGZ1bmRzIGZvciBHTlUgZGV2ZWxvcG1lbnQuCisuVmUKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1ncHJvZi4xIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWdwcm9mLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzZDM2YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1ncHJvZi4xCkBAIC0wLDAgKzEsNzU3IEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yMyAoUG9kOjpTaW1wbGUgMy4xNCkKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiR1BST0YgMSIKKy5USCBHUFJPRiAxICIyMDEyLTExLTEzIiAiYmludXRpbHMtMi4yMy4xIiAiR05VIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK2dwcm9mIFwtIGRpc3BsYXkgY2FsbCBncmFwaCBwcm9maWxlIGRhdGEKKy5TSCAiU1lOT1BTSVMiCisuSVggSGVhZGVyICJTWU5PUFNJUyIKK2dwcm9mIFsgXC1bYWJjRGhpbExyc1R2d3h5el0gXSBbIFwtW0FDZUVmRkpuTk9wUHFRWl1bXGZJbmFtZVxmUl0gXSAKKyBbIFwtSSBcZklkaXJzXGZSIF0gWyBcLWRbXGZJbnVtXGZSXSBdIFsgXC1rIFxmSWZyb20vdG9cZlIgXQorIFsgXC1tIFxmSW1pbi1jb3VudFxmUiBdIFsgXC1SIFxmSW1hcF9maWxlXGZSIF0gWyBcLXQgXGZJdGFibGUtbGVuZ3RoXGZSIF0KKyBbIFwtXC1bbm9cLV1hbm5vdGF0ZWRcLXNvdXJjZVs9XGZJbmFtZVxmUl0gXSAKKyBbIFwtXC1bbm9cLV1leGVjXC1jb3VudHNbPVxmSW5hbWVcZlJdIF0KKyBbIFwtXC1bbm9cLV1mbGF0XC1wcm9maWxlWz1cZkluYW1lXGZSXSBdIFsgXC1cLVtub1wtXWdyYXBoWz1cZkluYW1lXGZSXSBdCisgWyBcLVwtW25vXC1ddGltZT1cZkluYW1lXGZSXSBbIFwtXC1hbGxcLWxpbmVzIF0gWyBcLVwtYnJpZWYgXSAKKyBbIFwtXC1kZWJ1Z1s9XGZJbGV2ZWxcZlJdIF0gWyBcLVwtZnVuY3Rpb25cLW9yZGVyaW5nIF0gCisgWyBcLVwtZmlsZVwtb3JkZXJpbmcgXGZJbWFwX2ZpbGVcZlIgXSBbIFwtXC1kaXJlY3RvcnlcLXBhdGg9XGZJZGlyc1xmUiBdCisgWyBcLVwtZGlzcGxheVwtdW51c2VkXC1mdW5jdGlvbnMgXSBbIFwtXC1maWxlXC1mb3JtYXQ9XGZJbmFtZVxmUiBdCisgWyBcLVwtZmlsZVwtaW5mbyBdIFsgXC1cLWhlbHAgXSBbIFwtXC1saW5lIF0gWyBcLVwtbWluXC1jb3VudD1cZkluXGZSIF0KKyBbIFwtXC1ub1wtc3RhdGljIF0gWyBcLVwtcHJpbnRcLXBhdGggXSBbIFwtXC1zZXBhcmF0ZVwtZmlsZXMgXQorIFsgXC1cLXN0YXRpY1wtY2FsbFwtZ3JhcGggXSBbIFwtXC1zdW0gXSBbIFwtXC10YWJsZVwtbGVuZ3RoPVxmSWxlblxmUiBdCisgWyBcLVwtdHJhZGl0aW9uYWwgXSBbIFwtXC12ZXJzaW9uIF0gWyBcLVwtd2lkdGg9XGZJblxmUiBdCisgWyBcLVwtaWdub3JlXC1ub25cLWZ1bmN0aW9ucyBdIFsgXC1cLWRlbWFuZ2xlWz1cZklccy0xU1RZTEVcczBcZlJdIF0KKyBbIFwtXC1ub1wtZGVtYW5nbGUgXSBbXC1cLWV4dGVybmFsXC1zeW1ib2xcLXRhYmxlPW5hbWVdIAorIFsgXGZJaW1hZ2UtZmlsZVxmUiBdIFsgXGZJcHJvZmlsZS1maWxlXGZSIC4uLiBdCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitcJlxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHByb2R1Y2VzIGFuIGV4ZWN1dGlvbiBwcm9maWxlIG9mIEMsIFBhc2NhbCwgb3IgRm9ydHJhbjc3IAorcHJvZ3JhbXMuICBUaGUgZWZmZWN0IG9mIGNhbGxlZCByb3V0aW5lcyBpcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIHByb2ZpbGUgCitvZiBlYWNoIGNhbGxlci4gIFRoZSBwcm9maWxlIGRhdGEgaXMgdGFrZW4gZnJvbSB0aGUgY2FsbCBncmFwaCBwcm9maWxlIGZpbGUKKyhcZklnbW9uLm91dFxmUiBkZWZhdWx0KSB3aGljaCBpcyBjcmVhdGVkIGJ5IHByb2dyYW1zCit0aGF0IGFyZSBjb21waWxlZCB3aXRoIHRoZSBcZkJcLXBnXGZSIG9wdGlvbiBvZgorXCZcZihDV1wqKENgY2NcKihDJ1xmUiwgXGYoQ1dcKihDYHBjXCooQydcZlIsIGFuZCBcZihDV1wqKENgZjc3XCooQydcZlIuCitUaGUgXGZCXC1wZ1xmUiBvcHRpb24gYWxzbyBsaW5rcyBpbiB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSByb3V0aW5lcwordGhhdCBhcmUgY29tcGlsZWQgZm9yIHByb2ZpbGluZy4gIFxmKENXXCooQ2BHcHJvZlwqKEMnXGZSIHJlYWRzIHRoZSBnaXZlbiBvYmplY3QgCitmaWxlICh0aGUgZGVmYXVsdCBpcyBcZihDV1wqKENgYS5vdXRcKihDJ1xmUikgYW5kIGVzdGFibGlzaGVzIHRoZSByZWxhdGlvbiBiZXR3ZWVuCitpdHMgc3ltYm9sIHRhYmxlIGFuZCB0aGUgY2FsbCBncmFwaCBwcm9maWxlIGZyb20gXGZJZ21vbi5vdXRcZlIuCitJZiBtb3JlIHRoYW4gb25lIHByb2ZpbGUgZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBcZihDV1wqKENgZ3Byb2ZcKihDJ1xmUgorb3V0cHV0IHNob3dzIHRoZSBzdW0gb2YgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24gaW4gdGhlIGdpdmVuIHByb2ZpbGUgZmlsZXMuCisuUFAKK1wmXGYoQ1dcKihDYEdwcm9mXCooQydcZlIgY2FsY3VsYXRlcyB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgaW4gZWFjaCByb3V0aW5lLgorTmV4dCwgdGhlc2UgdGltZXMgYXJlIHByb3BhZ2F0ZWQgYWxvbmcgdGhlIGVkZ2VzIG9mIHRoZSBjYWxsIGdyYXBoLgorQ3ljbGVzIGFyZSBkaXNjb3ZlcmVkLCBhbmQgY2FsbHMgaW50byBhIGN5Y2xlIGFyZSBtYWRlIHRvIHNoYXJlIHRoZSB0aW1lCitvZiB0aGUgY3ljbGUuCisuUFAKK1NldmVyYWwgZm9ybXMgb2Ygb3V0cHV0IGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgYW5hbHlzaXMuCisuUFAKK1RoZSBcZklmbGF0IHByb2ZpbGVcZlIgc2hvd3MgaG93IG11Y2ggdGltZSB5b3VyIHByb2dyYW0gc3BlbnQgaW4gZWFjaCBmdW5jdGlvbiwKK2FuZCBob3cgbWFueSB0aW1lcyB0aGF0IGZ1bmN0aW9uIHdhcyBjYWxsZWQuICBJZiB5b3Ugc2ltcGx5IHdhbnQgdG8ga25vdword2hpY2ggZnVuY3Rpb25zIGJ1cm4gbW9zdCBvZiB0aGUgY3ljbGVzLCBpdCBpcyBzdGF0ZWQgY29uY2lzZWx5IGhlcmUuCisuUFAKK1RoZSBcZkljYWxsIGdyYXBoXGZSIHNob3dzLCBmb3IgZWFjaCBmdW5jdGlvbiwgd2hpY2ggZnVuY3Rpb25zIGNhbGxlZCBpdCwgd2hpY2gKK290aGVyIGZ1bmN0aW9ucyBpdCBjYWxsZWQsIGFuZCBob3cgbWFueSB0aW1lcy4gIFRoZXJlIGlzIGFsc28gYW4gZXN0aW1hdGUKK29mIGhvdyBtdWNoIHRpbWUgd2FzIHNwZW50IGluIHRoZSBzdWJyb3V0aW5lcyBvZiBlYWNoIGZ1bmN0aW9uLiAgVGhpcyBjYW4KK3N1Z2dlc3QgcGxhY2VzIHdoZXJlIHlvdSBtaWdodCB0cnkgdG8gZWxpbWluYXRlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgdXNlIGEKK2xvdCBvZiB0aW1lLgorLlBQCitUaGUgXGZJYW5ub3RhdGVkIHNvdXJjZVxmUiBsaXN0aW5nIGlzIGEgY29weSBvZiB0aGUgcHJvZ3JhbSdzCitzb3VyY2UgY29kZSwgbGFiZWxlZCB3aXRoIHRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCBsaW5lIG9mIHRoZQorcHJvZ3JhbSB3YXMgZXhlY3V0ZWQuCisuU0ggIk9QVElPTlMiCisuSVggSGVhZGVyICJPUFRJT05TIgorVGhlc2Ugb3B0aW9ucyBzcGVjaWZ5IHdoaWNoIG9mIHNldmVyYWwgb3V0cHV0IGZvcm1hdHMKK1wmXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgc2hvdWxkIHByb2R1Y2UuCisuUFAKK01hbnkgb2YgdGhlc2Ugb3B0aW9ucyB0YWtlIGFuIG9wdGlvbmFsIFxmSXN5bXNwZWNcZlIgdG8gc3BlY2lmeQorZnVuY3Rpb25zIHRvIGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkLiAgVGhlc2Ugb3B0aW9ucyBjYW4gYmUKK3NwZWNpZmllZCBtdWx0aXBsZSB0aW1lcywgd2l0aCBkaWZmZXJlbnQgc3ltc3BlY3MsIHRvIGluY2x1ZGUKK29yIGV4Y2x1ZGUgc2V0cyBvZiBzeW1ib2xzLgorLlBQCitTcGVjaWZ5aW5nIGFueSBvZiB0aGVzZSBvcHRpb25zIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCAoXGZCXC1wIFwtcVxmUiksCit3aGljaCBwcmludHMgYSBmbGF0IHByb2ZpbGUgYW5kIGNhbGwgZ3JhcGggYW5hbHlzaXMKK2ZvciBhbGwgZnVuY3Rpb25zLgorLmllIG4gLklQICIiIlwtQVtcZihDSXN5bXNwZWNcZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLUFbXGYoQ0lzeW1zcGVjXGYoQ1ddXGZSIiA0CisuSVggSXRlbSAiLUFbc3ltc3BlY10iCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1hbm5vdGF0ZWRcLXNvdXJjZVs9XGYoQ0lzeW1zcGVjXGYoQ1ddIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLWFubm90YXRlZFwtc291cmNlWz1cZihDSXN5bXNwZWNcZihDV11cZlIiIDQKKy5JWCBJdGVtICItLWFubm90YXRlZC1zb3VyY2VbPXN5bXNwZWNdIgorLlBECitUaGUgXGZCXC1BXGZSIG9wdGlvbiBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8gcHJpbnQgYW5ub3RhdGVkIHNvdXJjZSBjb2RlLgorSWYgXGZJc3ltc3BlY1xmUiBpcyBzcGVjaWZpZWQsIHByaW50IG91dHB1dCBvbmx5IGZvciBtYXRjaGluZyBzeW1ib2xzLgorLmllIG4gLklQICIiIlwtYiIiIiA0CisuZWwgLklQICJcZihDV1wtYlxmUiIgNAorLklYIEl0ZW0gIi1iIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtYnJpZWYiIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVwtYnJpZWZcZlIiIDQKKy5JWCBJdGVtICItLWJyaWVmIgorLlBECitJZiB0aGUgXGZCXC1iXGZSIG9wdGlvbiBpcyBnaXZlbiwgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgZG9lc24ndCBwcmludCB0aGUKK3ZlcmJvc2UgYmx1cmJzIHRoYXQgdHJ5IHRvIGV4cGxhaW4gdGhlIG1lYW5pbmcgb2YgYWxsIG9mIHRoZSBmaWVsZHMgaW4KK3RoZSB0YWJsZXMuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaW50ZW5kIHRvIHByaW50IG91dCB0aGUgb3V0cHV0LCBvcgorYXJlIHRpcmVkIG9mIHNlZWluZyB0aGUgYmx1cmJzLgorLmllIG4gLklQICIiIlwtQ1tcZihDSXN5bXNwZWNcZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLUNbXGYoQ0lzeW1zcGVjXGYoQ1ddXGZSIiA0CisuSVggSXRlbSAiLUNbc3ltc3BlY10iCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1leGVjXC1jb3VudHNbPVxmKENJc3ltc3BlY1xmKENXXSIiIiA0CisuZWwgLklQICJcZihDV1wtXC1leGVjXC1jb3VudHNbPVxmKENJc3ltc3BlY1xmKENXXVxmUiIgNAorLklYIEl0ZW0gIi0tZXhlYy1jb3VudHNbPXN5bXNwZWNdIgorLlBECitUaGUgXGZCXC1DXGZSIG9wdGlvbiBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8KK3ByaW50IGEgdGFsbHkgb2YgZnVuY3Rpb25zIGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggd2FzIGNhbGxlZC4KK0lmIFxmSXN5bXNwZWNcZlIgaXMgc3BlY2lmaWVkLCBwcmludCB0YWxseSBvbmx5IGZvciBtYXRjaGluZyBzeW1ib2xzLgorLlNwCitJZiB0aGUgcHJvZmlsZSBkYXRhIGZpbGUgY29udGFpbnMgYmFzaWMtYmxvY2sgY291bnQgcmVjb3Jkcywgc3BlY2lmeWluZwordGhlIFxmQlwtbFxmUiBvcHRpb24sIGFsb25nIHdpdGggXGZCXC1DXGZSLCB3aWxsIGNhdXNlIGJhc2ljLWJsb2NrCitleGVjdXRpb24gY291bnRzIHRvIGJlIHRhbGxpZWQgYW5kIGRpc3BsYXllZC4KKy5pZSBuIC5JUCAiIiJcLWkiIiIgNAorLmVsIC5JUCAiXGYoQ1dcLWlcZlIiIDQKKy5JWCBJdGVtICItaSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLWZpbGVcLWluZm8iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVwtZmlsZVwtaW5mb1xmUiIgNAorLklYIEl0ZW0gIi0tZmlsZS1pbmZvIgorLlBECitUaGUgXGZCXC1pXGZSIG9wdGlvbiBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8gZGlzcGxheSBzdW1tYXJ5IGluZm9ybWF0aW9uCithYm91dCB0aGUgcHJvZmlsZSBkYXRhIGZpbGUocykgYW5kIHRoZW4gZXhpdC4gIFRoZSBudW1iZXIgb2YgaGlzdG9ncmFtLAorY2FsbCBncmFwaCwgYW5kIGJhc2ljLWJsb2NrIGNvdW50IHJlY29yZHMgaXMgZGlzcGxheWVkLgorLmllIG4gLklQICIiIlwtSSBcZihDSWRpcnNcZihDVyIiIiA0CisuZWwgLklQICJcZihDV1wtSSBcZihDSWRpcnNcZihDV1xmUiIgNAorLklYIEl0ZW0gIi1JIGRpcnMiCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1kaXJlY3RvcnlcLXBhdGg9XGYoQ0lkaXJzXGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVwtZGlyZWN0b3J5XC1wYXRoPVxmKENJZGlyc1xmKENXXGZSIiA0CisuSVggSXRlbSAiLS1kaXJlY3RvcnktcGF0aD1kaXJzIgorLlBECitUaGUgXGZCXC1JXGZSIG9wdGlvbiBzcGVjaWZpZXMgYSBsaXN0IG9mIHNlYXJjaCBkaXJlY3RvcmllcyBpbgord2hpY2ggdG8gZmluZCBzb3VyY2UgZmlsZXMuICBFbnZpcm9ubWVudCB2YXJpYWJsZSBcZklccy0xR1BST0ZfUEFUSFxzMFxmUgorY2FuIGFsc28gYmUgdXNlZCB0byBjb252ZXkgdGhpcyBpbmZvcm1hdGlvbi4KK1VzZWQgbW9zdGx5IGZvciBhbm5vdGF0ZWQgc291cmNlIG91dHB1dC4KKy5pZSBuIC5JUCAiIiJcLUpbXGYoQ0lzeW1zcGVjXGYoQ1ddIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1KW1xmKENJc3ltc3BlY1xmKENXXVxmUiIgNAorLklYIEl0ZW0gIi1KW3N5bXNwZWNdIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtbm9cLWFubm90YXRlZFwtc291cmNlWz1cZihDSXN5bXNwZWNcZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVwtbm9cLWFubm90YXRlZFwtc291cmNlWz1cZihDSXN5bXNwZWNcZihDV11cZlIiIDQKKy5JWCBJdGVtICItLW5vLWFubm90YXRlZC1zb3VyY2VbPXN5bXNwZWNdIgorLlBECitUaGUgXGZCXC1KXGZSIG9wdGlvbiBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgbm90IHRvCitwcmludCBhbm5vdGF0ZWQgc291cmNlIGNvZGUuCitJZiBcZklzeW1zcGVjXGZSIGlzIHNwZWNpZmllZCwgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgcHJpbnRzIGFubm90YXRlZCBzb3VyY2UsCitidXQgZXhjbHVkZXMgbWF0Y2hpbmcgc3ltYm9scy4KKy5pZSBuIC5JUCAiIiJcLUwiIiIgNAorLmVsIC5JUCAiXGYoQ1dcLUxcZlIiIDQKKy5JWCBJdGVtICItTCIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLXByaW50XC1wYXRoIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLXByaW50XC1wYXRoXGZSIiA0CisuSVggSXRlbSAiLS1wcmludC1wYXRoIgorLlBECitOb3JtYWxseSwgc291cmNlIGZpbGVuYW1lcyBhcmUgcHJpbnRlZCB3aXRoIHRoZSBwYXRoCitjb21wb25lbnQgc3VwcHJlc3NlZC4gIFRoZSBcZkJcLUxcZlIgb3B0aW9uIGNhdXNlcyBcZihDV1wqKENgZ3Byb2ZcKihDJ1xmUgordG8gcHJpbnQgdGhlIGZ1bGwgcGF0aG5hbWUgb2YKK3NvdXJjZSBmaWxlbmFtZXMsIHdoaWNoIGlzIGRldGVybWluZWQKK2Zyb20gc3ltYm9saWMgZGVidWdnaW5nIGluZm9ybWF0aW9uIGluIHRoZSBpbWFnZSBmaWxlCithbmQgaXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIKK3dhcyBpbnZva2VkLgorLmllIG4gLklQICIiIlwtcFtcZihDSXN5bXNwZWNcZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLXBbXGYoQ0lzeW1zcGVjXGYoQ1ddXGZSIiA0CisuSVggSXRlbSAiLXBbc3ltc3BlY10iCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1mbGF0XC1wcm9maWxlWz1cZihDSXN5bXNwZWNcZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVwtZmxhdFwtcHJvZmlsZVs9XGYoQ0lzeW1zcGVjXGYoQ1ddXGZSIiA0CisuSVggSXRlbSAiLS1mbGF0LXByb2ZpbGVbPXN5bXNwZWNdIgorLlBECitUaGUgXGZCXC1wXGZSIG9wdGlvbiBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8gcHJpbnQgYSBmbGF0IHByb2ZpbGUuCitJZiBcZklzeW1zcGVjXGZSIGlzIHNwZWNpZmllZCwgcHJpbnQgZmxhdCBwcm9maWxlIG9ubHkgZm9yIG1hdGNoaW5nIHN5bWJvbHMuCisuaWUgbiAuSVAgIiIiXC1QW1xmKENJc3ltc3BlY1xmKENXXSIiIiA0CisuZWwgLklQICJcZihDV1wtUFtcZihDSXN5bXNwZWNcZihDV11cZlIiIDQKKy5JWCBJdGVtICItUFtzeW1zcGVjXSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLW5vXC1mbGF0XC1wcm9maWxlWz1cZihDSXN5bXNwZWNcZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVwtbm9cLWZsYXRcLXByb2ZpbGVbPVxmKENJc3ltc3BlY1xmKENXXVxmUiIgNAorLklYIEl0ZW0gIi0tbm8tZmxhdC1wcm9maWxlWz1zeW1zcGVjXSIKKy5QRAorVGhlIFxmQlwtUFxmUiBvcHRpb24gY2F1c2VzIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHRvIHN1cHByZXNzIHByaW50aW5nIGEgZmxhdCBwcm9maWxlLgorSWYgXGZJc3ltc3BlY1xmUiBpcyBzcGVjaWZpZWQsIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHByaW50cyBhIGZsYXQgcHJvZmlsZSwKK2J1dCBleGNsdWRlcyBtYXRjaGluZyBzeW1ib2xzLgorLmllIG4gLklQICIiIlwtcVtcZihDSXN5bXNwZWNcZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLXFbXGYoQ0lzeW1zcGVjXGYoQ1ddXGZSIiA0CisuSVggSXRlbSAiLXFbc3ltc3BlY10iCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1ncmFwaFs9XGYoQ0lzeW1zcGVjXGYoQ1ddIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLWdyYXBoWz1cZihDSXN5bXNwZWNcZihDV11cZlIiIDQKKy5JWCBJdGVtICItLWdyYXBoWz1zeW1zcGVjXSIKKy5QRAorVGhlIFxmQlwtcVxmUiBvcHRpb24gY2F1c2VzIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHRvIHByaW50IHRoZSBjYWxsIGdyYXBoIGFuYWx5c2lzLgorSWYgXGZJc3ltc3BlY1xmUiBpcyBzcGVjaWZpZWQsIHByaW50IGNhbGwgZ3JhcGggb25seSBmb3IgbWF0Y2hpbmcgc3ltYm9scworYW5kIHRoZWlyIGNoaWxkcmVuLgorLmllIG4gLklQICIiIlwtUVtcZihDSXN5bXNwZWNcZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVFbXGYoQ0lzeW1zcGVjXGYoQ1ddXGZSIiA0CisuSVggSXRlbSAiLVFbc3ltc3BlY10iCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1ub1wtZ3JhcGhbPVxmKENJc3ltc3BlY1xmKENXXSIiIiA0CisuZWwgLklQICJcZihDV1wtXC1ub1wtZ3JhcGhbPVxmKENJc3ltc3BlY1xmKENXXVxmUiIgNAorLklYIEl0ZW0gIi0tbm8tZ3JhcGhbPXN5bXNwZWNdIgorLlBECitUaGUgXGZCXC1RXGZSIG9wdGlvbiBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8gc3VwcHJlc3MgcHJpbnRpbmcgdGhlCitjYWxsIGdyYXBoLgorSWYgXGZJc3ltc3BlY1xmUiBpcyBzcGVjaWZpZWQsIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHByaW50cyBhIGNhbGwgZ3JhcGgsCitidXQgZXhjbHVkZXMgbWF0Y2hpbmcgc3ltYm9scy4KKy5pZSBuIC5JUCAiIiJcLXQiIiIgNAorLmVsIC5JUCAiXGYoQ1dcLXRcZlIiIDQKKy5JWCBJdGVtICItdCIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLXRhYmxlXC1sZW5ndGg9XGYoQ0ludW1cZihDVyIiIiA0CisuZWwgLklQICJcZihDV1wtXC10YWJsZVwtbGVuZ3RoPVxmKENJbnVtXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItLXRhYmxlLWxlbmd0aD1udW0iCisuUEQKK1RoZSBcZkJcLXRcZlIgb3B0aW9uIGNhdXNlcyB0aGUgXGZJbnVtXGZSIG1vc3QgYWN0aXZlIHNvdXJjZSBsaW5lcyBpbgorZWFjaCBzb3VyY2UgZmlsZSB0byBiZSBsaXN0ZWQgd2hlbiBzb3VyY2UgYW5ub3RhdGlvbiBpcyBlbmFibGVkLiAgVGhlCitkZWZhdWx0IGlzIDEwLgorLmllIG4gLklQICIiIlwteSIiIiA0CisuZWwgLklQICJcZihDV1wteVxmUiIgNAorLklYIEl0ZW0gIi15IgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtc2VwYXJhdGVcLWZpbGVzIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLXNlcGFyYXRlXC1maWxlc1xmUiIgNAorLklYIEl0ZW0gIi0tc2VwYXJhdGUtZmlsZXMiCisuUEQKK1RoaXMgb3B0aW9uIGFmZmVjdHMgYW5ub3RhdGVkIHNvdXJjZSBvdXRwdXQgb25seS4KK05vcm1hbGx5LCBcZihDV1wqKENgZ3Byb2ZcKihDJ1xmUiBwcmludHMgYW5ub3RhdGVkIHNvdXJjZSBmaWxlcwordG8gc3RhbmRhcmQtb3V0cHV0LiAgSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLAorYW5ub3RhdGVkIHNvdXJjZSBmb3IgYSBmaWxlIG5hbWVkIFxmSXBhdGgvXGZJZmlsZW5hbWVcZklcZlIKK2lzIGdlbmVyYXRlZCBpbiB0aGUgZmlsZSBcZklcZklmaWxlbmFtZVxmSVwtYW5uXGZSLiAgSWYgdGhlIHVuZGVybHlpbmcKK2ZpbGUgc3lzdGVtIHdvdWxkIHRydW5jYXRlIFxmSVxmSWZpbGVuYW1lXGZJXC1hbm5cZlIgc28gdGhhdCBpdAorb3ZlcndyaXRlcyB0aGUgb3JpZ2luYWwgXGZJXGZJZmlsZW5hbWVcZklcZlIsIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIGdlbmVyYXRlcworYW5ub3RhdGVkIHNvdXJjZSBpbiB0aGUgZmlsZSBcZklcZklmaWxlbmFtZVxmSS5hbm5cZlIgaW5zdGVhZCAoaWYgdGhlCitvcmlnaW5hbCBmaWxlIG5hbWUgaGFzIGFuIGV4dGVuc2lvbiwgdGhhdCBleHRlbnNpb24gaXMgXGZJcmVwbGFjZWRcZlIKK3dpdGggXGZJLmFublxmUikuCisuaWUgbiAuSVAgIiIiXC1aW1xmKENJc3ltc3BlY1xmKENXXSIiIiA0CisuZWwgLklQICJcZihDV1wtWltcZihDSXN5bXNwZWNcZihDV11cZlIiIDQKKy5JWCBJdGVtICItWltzeW1zcGVjXSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLW5vXC1leGVjXC1jb3VudHNbPVxmKENJc3ltc3BlY1xmKENXXSIiIiA0CisuZWwgLklQICJcZihDV1wtXC1ub1wtZXhlY1wtY291bnRzWz1cZihDSXN5bXNwZWNcZihDV11cZlIiIDQKKy5JWCBJdGVtICItLW5vLWV4ZWMtY291bnRzWz1zeW1zcGVjXSIKKy5QRAorVGhlIFxmQlwtWlxmUiBvcHRpb24gY2F1c2VzIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIG5vdCB0bworcHJpbnQgYSB0YWxseSBvZiBmdW5jdGlvbnMgYW5kIHRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCB3YXMgY2FsbGVkLgorSWYgXGZJc3ltc3BlY1xmUiBpcyBzcGVjaWZpZWQsIHByaW50IHRhbGx5LCBidXQgZXhjbHVkZSBtYXRjaGluZyBzeW1ib2xzLgorLmllIG4gLklQICIiIlwtciIiIiA0CisuZWwgLklQICJcZihDV1wtclxmUiIgNAorLklYIEl0ZW0gIi1yIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtZnVuY3Rpb25cLW9yZGVyaW5nIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLWZ1bmN0aW9uXC1vcmRlcmluZ1xmUiIgNAorLklYIEl0ZW0gIi0tZnVuY3Rpb24tb3JkZXJpbmciCisuUEQKK1RoZSBcZkJcLVwtZnVuY3Rpb25cLW9yZGVyaW5nXGZSIG9wdGlvbiBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8gcHJpbnQgYQorc3VnZ2VzdGVkIGZ1bmN0aW9uIG9yZGVyaW5nIGZvciB0aGUgcHJvZ3JhbSBiYXNlZCBvbiBwcm9maWxpbmcgZGF0YS4KK1RoaXMgb3B0aW9uIHN1Z2dlc3RzIGFuIG9yZGVyaW5nIHdoaWNoIG1heSBpbXByb3ZlIHBhZ2luZywgdGxiIGFuZAorY2FjaGUgYmVoYXZpb3IgZm9yIHRoZSBwcm9ncmFtIG9uIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCBhcmJpdHJhcnkKK29yZGVyaW5nIG9mIGZ1bmN0aW9ucyBpbiBhbiBleGVjdXRhYmxlLgorLlNwCitUaGUgZXhhY3QgZGV0YWlscyBvZiBob3cgdG8gZm9yY2UgdGhlIGxpbmtlciB0byBwbGFjZSBmdW5jdGlvbnMKK2luIGEgcGFydGljdWxhciBvcmRlciBpcyBzeXN0ZW0gZGVwZW5kZW50IGFuZCBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMKK21hbnVhbC4KKy5pZSBuIC5JUCAiIiJcLVIgXGYoQ0ltYXBfZmlsZVxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1SIFxmKENJbWFwX2ZpbGVcZihDV1xmUiIgNAorLklYIEl0ZW0gIi1SIG1hcF9maWxlIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtZmlsZVwtb3JkZXJpbmcgXGYoQ0ltYXBfZmlsZVxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLWZpbGVcLW9yZGVyaW5nIFxmKENJbWFwX2ZpbGVcZihDV1xmUiIgNAorLklYIEl0ZW0gIi0tZmlsZS1vcmRlcmluZyBtYXBfZmlsZSIKKy5QRAorVGhlIFxmQlwtXC1maWxlXC1vcmRlcmluZ1xmUiBvcHRpb24gY2F1c2VzIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHRvIHByaW50IGEKK3N1Z2dlc3RlZCAubyBsaW5rIGxpbmUgb3JkZXJpbmcgZm9yIHRoZSBwcm9ncmFtIGJhc2VkIG9uIHByb2ZpbGluZyBkYXRhLgorVGhpcyBvcHRpb24gc3VnZ2VzdHMgYW4gb3JkZXJpbmcgd2hpY2ggbWF5IGltcHJvdmUgcGFnaW5nLCB0bGIgYW5kCitjYWNoZSBiZWhhdmlvciBmb3IgdGhlIHByb2dyYW0gb24gc3lzdGVtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBhcmJpdHJhcnkKK29yZGVyaW5nIG9mIGZ1bmN0aW9ucyBpbiBhbiBleGVjdXRhYmxlLgorLlNwCitVc2Ugb2YgdGhlIFxmQlwtYVxmUiBhcmd1bWVudCBpcyBoaWdobHkgcmVjb21tZW5kZWQgd2l0aCB0aGlzIG9wdGlvbi4KKy5TcAorVGhlIFxmSW1hcF9maWxlXGZSIGFyZ3VtZW50IGlzIGEgcGF0aG5hbWUgdG8gYSBmaWxlIHdoaWNoIHByb3ZpZGVzCitmdW5jdGlvbiBuYW1lIHRvIG9iamVjdCBmaWxlIG1hcHBpbmdzLiAgVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyBzaW1pbGFyIHRvCit0aGUgb3V0cHV0IG9mIHRoZSBwcm9ncmFtIFxmKENXXCooQ2BubVwqKEMnXGZSLgorLlNwCisuVmIgOAorXCYgICAgICAgIGNcLXBhcnNlLm86MDAwMDAwMDAgVCB5eXBhcnNlCitcJiAgICAgICAgY1wtcGFyc2UubzowMDAwMDAwNCBDIHl5ZXJyZmxhZworXCYgICAgICAgIGNcLWxhbmcubzowMDAwMDAwMCBUIG1heWJlX29iamNfbWV0aG9kX25hbWUKK1wmICAgICAgICBjXC1sYW5nLm86MDAwMDAwMDAgVCBwcmludF9sYW5nX3N0YXRpc3RpY3MKK1wmICAgICAgICBjXC1sYW5nLm86MDAwMDAwMDAgVCByZWNvZ25pemVfb2JqY19rZXl3b3JkCitcJiAgICAgICAgY1wtZGVjbC5vOjAwMDAwMDAwIFQgcHJpbnRfbGFuZ19pZGVudGlmaWVyCitcJiAgICAgICAgY1wtZGVjbC5vOjAwMDAwMDAwIFQgcHJpbnRfbGFuZ190eXBlCitcJiAgICAgICAgLi4uCisuVmUKKy5TcAorVG8gY3JlYXRlIGEgXGZJbWFwX2ZpbGVcZlIgd2l0aCBccy0xR05VXHMwIFxmKENXXCooQ2BubVwqKEMnXGZSLCB0eXBlIGEgY29tbWFuZCBsaWtlCitcJlxmKENXXCooQ2BubSBcLVwtZXh0ZXJuXC1vbmx5IFwtXC1kZWZpbmVkXC1vbmx5IFwtdiBcLVwtcHJpbnRcLWZpbGVcLW5hbWUgcHJvZ3JhbVwtbmFtZVwqKEMnXGZSLgorLmllIG4gLklQICIiIlwtVCIiIiA0CisuZWwgLklQICJcZihDV1wtVFxmUiIgNAorLklYIEl0ZW0gIi1UIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtdHJhZGl0aW9uYWwiIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVwtdHJhZGl0aW9uYWxcZlIiIDQKKy5JWCBJdGVtICItLXRyYWRpdGlvbmFsIgorLlBECitUaGUgXGZCXC1UXGZSIG9wdGlvbiBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8gcHJpbnQgaXRzIG91dHB1dCBpbgorXCZcKihMInRyYWRpdGlvbmFsXCooUiIgXHMtMUJTRFxzMCBzdHlsZS4KKy5pZSBuIC5JUCAiIiJcLXcgXGYoQ0l3aWR0aFxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC13IFxmKENJd2lkdGhcZihDV1xmUiIgNAorLklYIEl0ZW0gIi13IHdpZHRoIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtd2lkdGg9XGYoQ0l3aWR0aFxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLXdpZHRoPVxmKENJd2lkdGhcZihDV1xmUiIgNAorLklYIEl0ZW0gIi0td2lkdGg9d2lkdGgiCisuUEQKK1NldHMgd2lkdGggb2Ygb3V0cHV0IGxpbmVzIHRvIFxmSXdpZHRoXGZSLgorQ3VycmVudGx5IG9ubHkgdXNlZCB3aGVuIHByaW50aW5nIHRoZSBmdW5jdGlvbiBpbmRleCBhdCB0aGUgYm90dG9tCitvZiB0aGUgY2FsbCBncmFwaC4KKy5pZSBuIC5JUCAiIiJcLXgiIiIgNAorLmVsIC5JUCAiXGYoQ1dcLXhcZlIiIDQKKy5JWCBJdGVtICIteCIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLWFsbFwtbGluZXMiIiIgNAorLmVsIC5JUCAiXGYoQ1dcLVwtYWxsXC1saW5lc1xmUiIgNAorLklYIEl0ZW0gIi0tYWxsLWxpbmVzIgorLlBECitUaGlzIG9wdGlvbiBhZmZlY3RzIGFubm90YXRlZCBzb3VyY2Ugb3V0cHV0IG9ubHkuCitCeSBkZWZhdWx0LCBvbmx5IHRoZSBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgYmFzaWMtYmxvY2sKK2FyZSBhbm5vdGF0ZWQuICBJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGV2ZXJ5IGxpbmUgaW4KK2EgYmFzaWMtYmxvY2sgaXMgYW5ub3RhdGVkIGJ5IHJlcGVhdGluZyB0aGUgYW5ub3RhdGlvbiBmb3IgdGhlCitmaXJzdCBsaW5lLiAgVGhpcyBiZWhhdmlvciBpcyBzaW1pbGFyIHRvIFxmKENXXCooQ2B0Y292XCooQydcZlIncyBcZkJcLWFcZlIuCisuaWUgbiAuSVAgIiIiXC1cLWRlbWFuZ2xlWz1cZihDSXN0eWxlXGYoQ1ddIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLWRlbWFuZ2xlWz1cZihDSXN0eWxlXGYoQ1ddXGZSIiA0CisuSVggSXRlbSAiLS1kZW1hbmdsZVs9c3R5bGVdIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtbm9cLWRlbWFuZ2xlIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLW5vXC1kZW1hbmdsZVxmUiIgNAorLklYIEl0ZW0gIi0tbm8tZGVtYW5nbGUiCisuUEQKK1RoZXNlIG9wdGlvbnMgY29udHJvbCB3aGV0aGVyIFwqKEMrIHN5bWJvbCBuYW1lcyBzaG91bGQgYmUgZGVtYW5nbGVkIHdoZW4KK3ByaW50aW5nIG91dHB1dC4gIFRoZSBkZWZhdWx0IGlzIHRvIGRlbWFuZ2xlIHN5bWJvbHMuICBUaGUKK1wmXGYoQ1dcKihDYFwtXC1ub1wtZGVtYW5nbGVcKihDJ1xmUiBvcHRpb24gbWF5IGJlIHVzZWQgdG8gdHVybiBvZmYgZGVtYW5nbGluZy4gRGlmZmVyZW50IAorY29tcGlsZXJzIGhhdmUgZGlmZmVyZW50IG1hbmdsaW5nIHN0eWxlcy4gIFRoZSBvcHRpb25hbCBkZW1hbmdsaW5nIHN0eWxlIAorYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlIGRlbWFuZ2xpbmcgc3R5bGUgZm9yIHlvdXIgCitjb21waWxlci4KKy5TUyAiQW5hbHlzaXMgT3B0aW9ucyIKKy5JWCBTdWJzZWN0aW9uICJBbmFseXNpcyBPcHRpb25zIgorLmllIG4gLklQICIiIlwtYSIiIiA0CisuZWwgLklQICJcZihDV1wtYVxmUiIgNAorLklYIEl0ZW0gIi1hIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtbm9cLXN0YXRpYyIiIiA0CisuZWwgLklQICJcZihDV1wtXC1ub1wtc3RhdGljXGZSIiA0CisuSVggSXRlbSAiLS1uby1zdGF0aWMiCisuUEQKK1RoZSBcZkJcLWFcZlIgb3B0aW9uIGNhdXNlcyBcZihDV1wqKENgZ3Byb2ZcKihDJ1xmUiB0byBzdXBwcmVzcyB0aGUgcHJpbnRpbmcgb2YKK3N0YXRpY2FsbHkgZGVjbGFyZWQgKHByaXZhdGUpIGZ1bmN0aW9ucy4gIChUaGVzZSBhcmUgZnVuY3Rpb25zIHdob3NlCituYW1lcyBhcmUgbm90IGxpc3RlZCBhcyBnbG9iYWwsIGFuZCB3aGljaCBhcmUgbm90IHZpc2libGUgb3V0c2lkZSB0aGUKK2ZpbGUvZnVuY3Rpb24vYmxvY2sgd2hlcmUgdGhleSB3ZXJlIGRlZmluZWQuKSAgVGltZSBzcGVudCBpbiB0aGVzZQorZnVuY3Rpb25zLCBjYWxscyB0by9mcm9tIHRoZW0sIGV0Yy4sIHdpbGwgYWxsIGJlIGF0dHJpYnV0ZWQgdG8gdGhlCitmdW5jdGlvbiB0aGF0IHdhcyBsb2FkZWQgZGlyZWN0bHkgYmVmb3JlIGl0IGluIHRoZSBleGVjdXRhYmxlIGZpbGUuCitUaGlzIG9wdGlvbiBhZmZlY3RzIGJvdGggdGhlIGZsYXQgcHJvZmlsZSBhbmQgdGhlIGNhbGwgZ3JhcGguCisuaWUgbiAuSVAgIiIiXC1jIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1jXGZSIiA0CisuSVggSXRlbSAiLWMiCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1zdGF0aWNcLWNhbGxcLWdyYXBoIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLXN0YXRpY1wtY2FsbFwtZ3JhcGhcZlIiIDQKKy5JWCBJdGVtICItLXN0YXRpYy1jYWxsLWdyYXBoIgorLlBECitUaGUgXGZCXC1jXGZSIG9wdGlvbiBjYXVzZXMgdGhlIGNhbGwgZ3JhcGggb2YgdGhlIHByb2dyYW0gdG8gYmUKK2F1Z21lbnRlZCBieSBhIGhldXJpc3RpYyB3aGljaCBleGFtaW5lcyB0aGUgdGV4dCBzcGFjZSBvZiB0aGUgb2JqZWN0CitmaWxlIGFuZCBpZGVudGlmaWVzIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSBiaW5hcnkgbWFjaGluZSBjb2RlLgorU2luY2Ugbm9ybWFsIGNhbGwgZ3JhcGggcmVjb3JkcyBhcmUgb25seSBnZW5lcmF0ZWQgd2hlbiBmdW5jdGlvbnMgYXJlCitlbnRlcmVkLCB0aGlzIG9wdGlvbiBpZGVudGlmaWVzIGNoaWxkcmVuIHRoYXQgY291bGQgaGF2ZSBiZWVuIGNhbGxlZCwKK2J1dCBuZXZlciB3ZXJlLiAgQ2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQgd2VyZSBub3QgY29tcGlsZWQgd2l0aAorcHJvZmlsaW5nIGVuYWJsZWQgYXJlIGFsc28gaWRlbnRpZmllZCwgYnV0IG9ubHkgaWYgc3ltYm9sIHRhYmxlCitlbnRyaWVzIGFyZSBwcmVzZW50IGZvciB0aGVtLgorQ2FsbHMgdG8gZHluYW1pYyBsaWJyYXJ5IHJvdXRpbmVzIGFyZSB0eXBpY2FsbHkgXGZJbm90XGZSIGZvdW5kCitieSB0aGlzIG9wdGlvbi4KK1BhcmVudHMgb3IgY2hpbGRyZW4gaWRlbnRpZmllZCB2aWEgdGhpcyBoZXVyaXN0aWMKK2FyZSBpbmRpY2F0ZWQgaW4gdGhlIGNhbGwgZ3JhcGggd2l0aCBjYWxsIGNvdW50cyBvZiBcZkIwXGZSLgorLmllIG4gLklQICIiIlwtRCIiIiA0CisuZWwgLklQICJcZihDV1wtRFxmUiIgNAorLklYIEl0ZW0gIi1EIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtaWdub3JlXC1ub25cLWZ1bmN0aW9ucyIiIiA0CisuZWwgLklQICJcZihDV1wtXC1pZ25vcmVcLW5vblwtZnVuY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLS1pZ25vcmUtbm9uLWZ1bmN0aW9ucyIKKy5QRAorVGhlIFxmQlwtRFxmUiBvcHRpb24gY2F1c2VzIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHRvIGlnbm9yZSBzeW1ib2xzIHdoaWNoCithcmUgbm90IGtub3duIHRvIGJlIGZ1bmN0aW9ucy4gIFRoaXMgb3B0aW9uIHdpbGwgZ2l2ZSBtb3JlIGFjY3VyYXRlCitwcm9maWxlIGRhdGEgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBzdXBwb3J0ZWQgKFNvbGFyaXMgYW5kIFxzLTFIUFVYXHMwIGZvcgorZXhhbXBsZSkuCisuaWUgbiAuSVAgIiIiXC1rIFxmKENJZnJvbVxmKENXL1xmKENJdG9cZihDVyIiIiA0CisuZWwgLklQICJcZihDV1wtayBcZihDSWZyb21cZihDVy9cZihDSXRvXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItayBmcm9tL3RvIgorVGhlIFxmQlwta1xmUiBvcHRpb24gYWxsb3dzIHlvdSB0byBkZWxldGUgZnJvbSB0aGUgY2FsbCBncmFwaCBhbnkgYXJjcyBmcm9tCitzeW1ib2xzIG1hdGNoaW5nIHN5bXNwZWMgXGZJZnJvbVxmUiB0byB0aG9zZSBtYXRjaGluZyBzeW1zcGVjIFxmSXRvXGZSLgorLmllIG4gLklQICIiIlwtbCIiIiA0CisuZWwgLklQICJcZihDV1wtbFxmUiIgNAorLklYIEl0ZW0gIi1sIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtbGluZSIiIiA0CisuZWwgLklQICJcZihDV1wtXC1saW5lXGZSIiA0CisuSVggSXRlbSAiLS1saW5lIgorLlBECitUaGUgXGZCXC1sXGZSIG9wdGlvbiBlbmFibGVzIGxpbmUtYnktbGluZSBwcm9maWxpbmcsIHdoaWNoIGNhdXNlcworaGlzdG9ncmFtIGhpdHMgdG8gYmUgY2hhcmdlZCB0byBpbmRpdmlkdWFsIHNvdXJjZSBjb2RlIGxpbmVzLAoraW5zdGVhZCBvZiBmdW5jdGlvbnMuICBUaGlzIGZlYXR1cmUgb25seSB3b3JrcyB3aXRoIHByb2dyYW1zIGNvbXBpbGVkCitieSBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgXGYoQ1dcKihDYGdjY1wqKEMnXGZSIGNvbXBpbGVyLiAgTmV3ZXIgdmVyc2lvbnMgb2YKK1wmXGYoQ1dcKihDYGdjY1wqKEMnXGZSIGFyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIFxmKENXXCooQ2BnY292XCooQydcZlIgdG9vbCBpbnN0ZWFkLgorLlNwCitJZiB0aGUgcHJvZ3JhbSB3YXMgY29tcGlsZWQgd2l0aCBiYXNpYy1ibG9jayBjb3VudGluZyBlbmFibGVkLAordGhpcyBvcHRpb24gd2lsbCBhbHNvIGlkZW50aWZ5IGhvdyBtYW55IHRpbWVzIGVhY2ggbGluZSBvZgorY29kZSB3YXMgZXhlY3V0ZWQuCitXaGlsZSBsaW5lLWJ5LWxpbmUgcHJvZmlsaW5nIGNhbiBoZWxwIGlzb2xhdGUgd2hlcmUgaW4gYSBsYXJnZSBmdW5jdGlvbgorYSBwcm9ncmFtIGlzIHNwZW5kaW5nIGl0cyB0aW1lLCBpdCBhbHNvIHNpZ25pZmljYW50bHkgaW5jcmVhc2VzCit0aGUgcnVubmluZyB0aW1lIG9mIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSLCBhbmQgbWFnbmlmaWVzIHN0YXRpc3RpY2FsCitpbmFjY3VyYWNpZXMuCisuaWUgbiAuSVAgIiIiXC1tIFxmKENJbnVtXGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcLW0gXGYoQ0ludW1cZihDV1xmUiIgNAorLklYIEl0ZW0gIi1tIG51bSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLW1pblwtY291bnQ9XGYoQ0ludW1cZihDVyIiIiA0CisuZWwgLklQICJcZihDV1wtXC1taW5cLWNvdW50PVxmKENJbnVtXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItLW1pbi1jb3VudD1udW0iCisuUEQKK1RoaXMgb3B0aW9uIGFmZmVjdHMgZXhlY3V0aW9uIGNvdW50IG91dHB1dCBvbmx5LgorU3ltYm9scyB0aGF0IGFyZSBleGVjdXRlZCBsZXNzIHRoYW4gXGZJbnVtXGZSIHRpbWVzIGFyZSBzdXBwcmVzc2VkLgorLmllIG4gLklQICIiIlwtblxmKENJc3ltc3BlY1xmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1uXGYoQ0lzeW1zcGVjXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItbnN5bXNwZWMiCisuUEQgMAorLmllIG4gLklQICIiIlwtXC10aW1lPVxmKENJc3ltc3BlY1xmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLXRpbWU9XGYoQ0lzeW1zcGVjXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItLXRpbWU9c3ltc3BlYyIKKy5QRAorVGhlIFxmQlwtblxmUiBvcHRpb24gY2F1c2VzIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSLCBpbiBpdHMgY2FsbCBncmFwaCBhbmFseXNpcywKK3RvIG9ubHkgcHJvcGFnYXRlIHRpbWVzIGZvciBzeW1ib2xzIG1hdGNoaW5nIFxmSXN5bXNwZWNcZlIuCisuaWUgbiAuSVAgIiIiXC1OXGYoQ0lzeW1zcGVjXGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcLU5cZihDSXN5bXNwZWNcZihDV1xmUiIgNAorLklYIEl0ZW0gIi1Oc3ltc3BlYyIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLW5vXC10aW1lPVxmKENJc3ltc3BlY1xmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLW5vXC10aW1lPVxmKENJc3ltc3BlY1xmKENXXGZSIiA0CisuSVggSXRlbSAiLS1uby10aW1lPXN5bXNwZWMiCisuUEQKK1RoZSBcZkJcLW5cZlIgb3B0aW9uIGNhdXNlcyBcZihDV1wqKENgZ3Byb2ZcKihDJ1xmUiwgaW4gaXRzIGNhbGwgZ3JhcGggYW5hbHlzaXMsCitub3QgdG8gcHJvcGFnYXRlIHRpbWVzIGZvciBzeW1ib2xzIG1hdGNoaW5nIFxmSXN5bXNwZWNcZlIuCisuaWUgbiAuSVAgIiIiXC1TXGYoQ0lmaWxlbmFtZVxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1TXGYoQ0lmaWxlbmFtZVxmKENXXGZSIiA0CisuSVggSXRlbSAiLVNmaWxlbmFtZSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLWV4dGVybmFsXC1zeW1ib2xcLXRhYmxlPVxmKENJZmlsZW5hbWVcZihDVyIiIiA0CisuZWwgLklQICJcZihDV1wtXC1leHRlcm5hbFwtc3ltYm9sXC10YWJsZT1cZihDSWZpbGVuYW1lXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItLWV4dGVybmFsLXN5bWJvbC10YWJsZT1maWxlbmFtZSIKKy5QRAorVGhlIFxmQlwtU1xmUiBvcHRpb24gY2F1c2VzIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHRvIHJlYWQgYW4gZXh0ZXJuYWwgc3ltYm9sIHRhYmxlCitmaWxlLCBzdWNoIGFzIFxmSS9wcm9jL2thbGxzeW1zXGZSLCByYXRoZXIgdGhhbiByZWFkIHRoZSBzeW1ib2wgdGFibGUgCitmcm9tIHRoZSBnaXZlbiBvYmplY3QgZmlsZSAodGhlIGRlZmF1bHQgaXMgXGYoQ1dcKihDYGEub3V0XCooQydcZlIpLiBUaGlzIGlzIHVzZWZ1bCAKK2ZvciBwcm9maWxpbmcga2VybmVsIG1vZHVsZXMuCisuaWUgbiAuSVAgIiIiXC16IiIiIDQKKy5lbCAuSVAgIlxmKENXXC16XGZSIiA0CisuSVggSXRlbSAiLXoiCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1kaXNwbGF5XC11bnVzZWRcLWZ1bmN0aW9ucyIiIiA0CisuZWwgLklQICJcZihDV1wtXC1kaXNwbGF5XC11bnVzZWRcLWZ1bmN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi0tZGlzcGxheS11bnVzZWQtZnVuY3Rpb25zIgorLlBECitJZiB5b3UgZ2l2ZSB0aGUgXGZCXC16XGZSIG9wdGlvbiwgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgd2lsbCBtZW50aW9uIGFsbAorZnVuY3Rpb25zIGluIHRoZSBmbGF0IHByb2ZpbGUsIGV2ZW4gdGhvc2UgdGhhdCB3ZXJlIG5ldmVyIGNhbGxlZCwgYW5kCit0aGF0IGhhZCBubyB0aW1lIHNwZW50IGluIHRoZW0uICBUaGlzIGlzIHVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorXCZcZkJcLWNcZlIgb3B0aW9uIGZvciBkaXNjb3ZlcmluZyB3aGljaCByb3V0aW5lcyB3ZXJlIG5ldmVyIGNhbGxlZC4KKy5TUyAiTWlzY2VsbGFuZW91cyBPcHRpb25zIgorLklYIFN1YnNlY3Rpb24gIk1pc2NlbGxhbmVvdXMgT3B0aW9ucyIKKy5pZSBuIC5JUCAiIiJcLWRbXGYoQ0ludW1cZihDV10iIiIgNAorLmVsIC5JUCAiXGYoQ1dcLWRbXGYoQ0ludW1cZihDV11cZlIiIDQKKy5JWCBJdGVtICItZFtudW1dIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJcLVwtZGVidWdbPVxmKENJbnVtXGYoQ1ddIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLWRlYnVnWz1cZihDSW51bVxmKENXXVxmUiIgNAorLklYIEl0ZW0gIi0tZGVidWdbPW51bV0iCisuUEQKK1RoZSBcZkJcLWRcZlIgXGZJbnVtXGZSIG9wdGlvbiBzcGVjaWZpZXMgZGVidWdnaW5nIG9wdGlvbnMuCitJZiBcZkludW1cZlIgaXMgbm90IHNwZWNpZmllZCwgZW5hYmxlIGFsbCBkZWJ1Z2dpbmcuCisuaWUgbiAuSVAgIiIiXC1oIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1oXGZSIiA0CisuSVggSXRlbSAiLWgiCisuUEQgMAorLmllIG4gLklQICIiIlwtXC1oZWxwIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCisuUEQKK1RoZSBcZkJcLWhcZlIgb3B0aW9uIHByaW50cyBjb21tYW5kIGxpbmUgdXNhZ2UuCisuaWUgbiAuSVAgIiIiXC1PXGYoQ0luYW1lXGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcLU9cZihDSW5hbWVcZihDV1xmUiIgNAorLklYIEl0ZW0gIi1PbmFtZSIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLWZpbGVcLWZvcm1hdD1cZihDSW5hbWVcZihDVyIiIiA0CisuZWwgLklQICJcZihDV1wtXC1maWxlXC1mb3JtYXQ9XGYoQ0luYW1lXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItLWZpbGUtZm9ybWF0PW5hbWUiCisuUEQKK1NlbGVjdHMgdGhlIGZvcm1hdCBvZiB0aGUgcHJvZmlsZSBkYXRhIGZpbGVzLiAgUmVjb2duaXplZCBmb3JtYXRzIGFyZQorXCZcZkJhdXRvXGZSICh0aGUgZGVmYXVsdCksIFxmQmJzZFxmUiwgXGZCNC40YnNkXGZSLCBcZkJtYWdpY1xmUiwgYW5kCitcJlxmQnByb2ZcZlIgKG5vdCB5ZXQgc3VwcG9ydGVkKS4KKy5pZSBuIC5JUCAiIiJcLXMiIiIgNAorLmVsIC5JUCAiXGYoQ1dcLXNcZlIiIDQKKy5JWCBJdGVtICItcyIKKy5QRCAwCisuaWUgbiAuSVAgIiIiXC1cLXN1bSIiIiA0CisuZWwgLklQICJcZihDV1wtXC1zdW1cZlIiIDQKKy5JWCBJdGVtICItLXN1bSIKKy5QRAorVGhlIFxmQlwtc1xmUiBvcHRpb24gY2F1c2VzIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHRvIHN1bW1hcml6ZSB0aGUgaW5mb3JtYXRpb24KK2luIHRoZSBwcm9maWxlIGRhdGEgZmlsZXMgaXQgcmVhZCBpbiwgYW5kIHdyaXRlIG91dCBhIHByb2ZpbGUgZGF0YQorZmlsZSBjYWxsZWQgXGZJZ21vbi5zdW1cZlIsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gZnJvbQordGhlIHByb2ZpbGUgZGF0YSBmaWxlcyB0aGF0IFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIHJlYWQgaW4uICBUaGUgZmlsZSBcZklnbW9uLnN1bVxmUgorbWF5IGJlIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGlucHV0IGZpbGVzOyB0aGUgZWZmZWN0IG9mIHRoaXMgaXMgdG8KK21lcmdlIHRoZSBkYXRhIGluIHRoZSBvdGhlciBpbnB1dCBmaWxlcyBpbnRvIFxmSWdtb24uc3VtXGZSLgorLlNwCitFdmVudHVhbGx5IHlvdSBjYW4gcnVuIFxmKENXXCooQ2BncHJvZlwqKEMnXGZSIGFnYWluIHdpdGhvdXQgXGZCXC1zXGZSIHRvIGFuYWx5emUgdGhlCitjdW11bGF0aXZlIGRhdGEgaW4gdGhlIGZpbGUgXGZJZ21vbi5zdW1cZlIuCisuaWUgbiAuSVAgIiIiXC12IiIiIDQKKy5lbCAuSVAgIlxmKENXXC12XGZSIiA0CisuSVggSXRlbSAiLXYiCisuUEQgMAorLmllIG4gLklQICIiIlwtXC12ZXJzaW9uIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1cLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24iCisuUEQKK1RoZSBcZkJcLXZcZlIgZmxhZyBjYXVzZXMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8gcHJpbnQgdGhlIGN1cnJlbnQgdmVyc2lvbgorbnVtYmVyLCBhbmQgdGhlbiBleGl0LgorLlNTICJEZXByZWNhdGVkIE9wdGlvbnMiCisuSVggU3Vic2VjdGlvbiAiRGVwcmVjYXRlZCBPcHRpb25zIgorVGhlc2Ugb3B0aW9ucyBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCBuZXdlciB2ZXJzaW9ucyB0aGF0IHVzZSBzeW1zcGVjcy4KKy5pZSBuIC5JUCAiIiJcLWUgXGYoQ0lmdW5jdGlvbl9uYW1lXGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcLWUgXGYoQ0lmdW5jdGlvbl9uYW1lXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItZSBmdW5jdGlvbl9uYW1lIgorVGhlIFxmQlwtZVxmUiBcZklmdW5jdGlvblxmUiBvcHRpb24gdGVsbHMgXGYoQ1dcKihDYGdwcm9mXCooQydcZlIgdG8gbm90IHByaW50CitpbmZvcm1hdGlvbiBhYm91dCB0aGUgZnVuY3Rpb24gXGZJZnVuY3Rpb25fbmFtZVxmUiAoYW5kIGl0cworY2hpbGRyZW4uLi4pIGluIHRoZSBjYWxsIGdyYXBoLiAgVGhlIGZ1bmN0aW9uIHdpbGwgc3RpbGwgYmUgbGlzdGVkCithcyBhIGNoaWxkIG9mIGFueSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBidXQgaXRzIGluZGV4IG51bWJlciB3aWxsIGJlCitzaG93biBhcyBcZkJbbm90IHByaW50ZWRdXGZSLiAgTW9yZSB0aGFuIG9uZSBcZkJcLWVcZlIgb3B0aW9uIG1heSBiZQorZ2l2ZW47IG9ubHkgb25lIFxmSWZ1bmN0aW9uX25hbWVcZlIgbWF5IGJlIGluZGljYXRlZCB3aXRoIGVhY2ggXGZCXC1lXGZSCitvcHRpb24uCisuaWUgbiAuSVAgIiIiXC1FIFxmKENJZnVuY3Rpb25fbmFtZVxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1FIFxmKENJZnVuY3Rpb25fbmFtZVxmKENXXGZSIiA0CisuSVggSXRlbSAiLUUgZnVuY3Rpb25fbmFtZSIKK1RoZSBcZihDV1wqKENgXC1FIFxmKENJZnVuY3Rpb25cZihDV1wqKEMnXGZSIG9wdGlvbiB3b3JrcyBsaWtlIHRoZSBcZihDV1wqKENgXC1lXCooQydcZlIgb3B0aW9uLCBidXQKK3RpbWUgc3BlbnQgaW4gdGhlIGZ1bmN0aW9uIChhbmQgY2hpbGRyZW4gd2hvIHdlcmUgbm90IGNhbGxlZCBmcm9tCithbnl3aGVyZSBlbHNlKSwgd2lsbCBub3QgYmUgdXNlZCB0byBjb21wdXRlIHRoZSBwZXJjZW50YWdlcy1vZi10aW1lIGZvcgordGhlIGNhbGwgZ3JhcGguICBNb3JlIHRoYW4gb25lIFxmQlwtRVxmUiBvcHRpb24gbWF5IGJlIGdpdmVuOyBvbmx5IG9uZQorXCZcZklmdW5jdGlvbl9uYW1lXGZSIG1heSBiZSBpbmRpY2F0ZWQgd2l0aCBlYWNoIFxmQlwtRVxmUiBvcHRpb24uCisuaWUgbiAuSVAgIiIiXC1mIFxmKENJZnVuY3Rpb25fbmFtZVxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXXC1mIFxmKENJZnVuY3Rpb25fbmFtZVxmKENXXGZSIiA0CisuSVggSXRlbSAiLWYgZnVuY3Rpb25fbmFtZSIKK1RoZSBcZkJcLWZcZlIgXGZJZnVuY3Rpb25cZlIgb3B0aW9uIGNhdXNlcyBcZihDV1wqKENgZ3Byb2ZcKihDJ1xmUiB0byBsaW1pdCB0aGUKK2NhbGwgZ3JhcGggdG8gdGhlIGZ1bmN0aW9uIFxmSWZ1bmN0aW9uX25hbWVcZlIgYW5kIGl0cyBjaGlsZHJlbiAoYW5kCit0aGVpciBjaGlsZHJlbi4uLikuICBNb3JlIHRoYW4gb25lIFxmQlwtZlxmUiBvcHRpb24gbWF5IGJlIGdpdmVuOworb25seSBvbmUgXGZJZnVuY3Rpb25fbmFtZVxmUiBtYXkgYmUgaW5kaWNhdGVkIHdpdGggZWFjaCBcZkJcLWZcZlIKK29wdGlvbi4KKy5pZSBuIC5JUCAiIiJcLUYgXGYoQ0lmdW5jdGlvbl9uYW1lXGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcLUYgXGYoQ0lmdW5jdGlvbl9uYW1lXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICItRiBmdW5jdGlvbl9uYW1lIgorVGhlIFxmQlwtRlxmUiBcZklmdW5jdGlvblxmUiBvcHRpb24gd29ya3MgbGlrZSB0aGUgXGYoQ1dcKihDYFwtZlwqKEMnXGZSIG9wdGlvbiwgYnV0Citvbmx5IHRpbWUgc3BlbnQgaW4gdGhlIGZ1bmN0aW9uIGFuZCBpdHMgY2hpbGRyZW4gKGFuZCB0aGVpcgorY2hpbGRyZW4uLi4pIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgdG90YWwtdGltZSBhbmQKK3BlcmNlbnRhZ2VzLW9mLXRpbWUgZm9yIHRoZSBjYWxsIGdyYXBoLiAgTW9yZSB0aGFuIG9uZSBcZkJcLUZcZlIgb3B0aW9uCittYXkgYmUgZ2l2ZW47IG9ubHkgb25lIFxmSWZ1bmN0aW9uX25hbWVcZlIgbWF5IGJlIGluZGljYXRlZCB3aXRoIGVhY2gKK1wmXGZCXC1GXGZSIG9wdGlvbi4gIFRoZSBcZkJcLUZcZlIgb3B0aW9uIG92ZXJyaWRlcyB0aGUgXGZCXC1FXGZSIG9wdGlvbi4KKy5TSCAiRklMRVMiCisuSVggSGVhZGVyICJGSUxFUyIKKy5pZSBuIC5JUCAiIiJcZihDSWEub3V0XGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcZihDSWEub3V0XGYoQ1dcZlIiIDQKKy5JWCBJdGVtICJhLm91dCIKK3RoZSBuYW1lbGlzdCBhbmQgdGV4dCBzcGFjZS4KKy5pZSBuIC5JUCAiIiJcZihDSWdtb24ub3V0XGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcZihDSWdtb24ub3V0XGYoQ1dcZlIiIDQKKy5JWCBJdGVtICJnbW9uLm91dCIKK2R5bmFtaWMgY2FsbCBncmFwaCBhbmQgcHJvZmlsZS4KKy5pZSBuIC5JUCAiIiJcZihDSWdtb24uc3VtXGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dcZihDSWdtb24uc3VtXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICJnbW9uLnN1bSIKK3N1bW1hcml6ZWQgZHluYW1pYyBjYWxsIGdyYXBoIGFuZCBwcm9maWxlLgorLlNIICJCVUdTIgorLklYIEhlYWRlciAiQlVHUyIKK1RoZSBncmFudWxhcml0eSBvZiB0aGUgc2FtcGxpbmcgaXMgc2hvd24sIGJ1dCByZW1haW5zCitzdGF0aXN0aWNhbCBhdCBiZXN0LgorV2UgYXNzdW1lIHRoYXQgdGhlIHRpbWUgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIGEgZnVuY3Rpb24KK2NhbiBiZSBleHByZXNzZWQgYnkgdGhlIHRvdGFsIHRpbWUgZm9yIHRoZSBmdW5jdGlvbiBkaXZpZGVkCitieSB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuCitUaHVzIHRoZSB0aW1lIHByb3BhZ2F0ZWQgYWxvbmcgdGhlIGNhbGwgZ3JhcGggYXJjcyB0byB0aGUgZnVuY3Rpb24ncworcGFyZW50cyBpcyBkaXJlY3RseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0CithcmMgaXMgdHJhdmVyc2VkLgorLlBQCitQYXJlbnRzIHRoYXQgYXJlIG5vdCB0aGVtc2VsdmVzIHByb2ZpbGVkIHdpbGwgaGF2ZSB0aGUgdGltZSBvZgordGhlaXIgcHJvZmlsZWQgY2hpbGRyZW4gcHJvcGFnYXRlZCB0byB0aGVtLCBidXQgdGhleSB3aWxsIGFwcGVhcgordG8gYmUgc3BvbnRhbmVvdXNseSBpbnZva2VkIGluIHRoZSBjYWxsIGdyYXBoIGxpc3RpbmcsIGFuZCB3aWxsCitub3QgaGF2ZSB0aGVpciB0aW1lIHByb3BhZ2F0ZWQgZnVydGhlci4KK1NpbWlsYXJseSwgc2lnbmFsIGNhdGNoZXJzLCBldmVuIHRob3VnaCBwcm9maWxlZCwgd2lsbCBhcHBlYXIKK3RvIGJlIHNwb250YW5lb3VzIChhbHRob3VnaCBmb3IgbW9yZSBvYnNjdXJlIHJlYXNvbnMpLgorQW55IHByb2ZpbGVkIGNoaWxkcmVuIG9mIHNpZ25hbCBjYXRjaGVycyBzaG91bGQgaGF2ZSB0aGVpciB0aW1lcworcHJvcGFnYXRlZCBwcm9wZXJseSwgdW5sZXNzIHRoZSBzaWduYWwgY2F0Y2hlciB3YXMgaW52b2tlZCBkdXJpbmcKK3RoZSBleGVjdXRpb24gb2YgdGhlIHByb2ZpbGluZyByb3V0aW5lLCBpbiB3aGljaCBjYXNlIGFsbCBpcyBsb3N0LgorLlBQCitUaGUgcHJvZmlsZWQgcHJvZ3JhbSBtdXN0IGNhbGwgXGYoQ1dcKihDYGV4aXRcKihDJ1xmUigyKQorb3IgcmV0dXJuIG5vcm1hbGx5IGZvciB0aGUgcHJvZmlsaW5nIGluZm9ybWF0aW9uIHRvIGJlIHNhdmVkCitpbiB0aGUgXGZJZ21vbi5vdXRcZlIgZmlsZS4KKy5TSCAiU0VFIEFMU08iCisuSVggSGVhZGVyICJTRUUgQUxTTyIKK1wmXGZJbW9uaXRvclxmUlx8KDMpLCBcZklwcm9maWxcZlJcfCgyKSwgXGZJY2NcZlJcfCgxKSwgXGZJcHJvZlxmUlx8KDEpLCBhbmQgdGhlIEluZm8gZW50cnkgZm9yIFxmSWdwcm9mXGZSLgorLlBQCitcJlwqKEwiQW4gRXhlY3V0aW9uIFByb2ZpbGVyIGZvciBNb2R1bGFyIFByb2dyYW1zXCooUiIsCitieSBTLiBHcmFoYW0sIFAuIEtlc3NsZXIsIE0uIE1jS3VzaWNrOworU29mdHdhcmUgXC0gUHJhY3RpY2UgYW5kIEV4cGVyaWVuY2UsCitWb2wuIDEzLCBwcC4gNjcxXC02ODUsIDE5ODMuCisuUFAKK1wmXCooTCJncHJvZjogQSBDYWxsIEdyYXBoIEV4ZWN1dGlvbiBQcm9maWxlclwqKFIiLAorYnkgUy4gR3JhaGFtLCBQLiBLZXNzbGVyLCBNLiBNY0t1c2ljazsKK1Byb2NlZWRpbmdzIG9mIHRoZSBccy0xU0lHUExBTlxzMCAnODIgU3ltcG9zaXVtIG9uIENvbXBpbGVyIENvbnN0cnVjdGlvbiwKK1wmXHMtMVNJR1BMQU5cczAgTm90aWNlcywgVm9sLiAxNywgTm8gIDYsIHBwLiAxMjBcLTEyNiwgSnVuZSAxOTgyLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTIsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsCisyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBcKihMIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcKihSIi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1sZC4xIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLWxkLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5NWIwNgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1sZC4xCkBAIC0wLDAgKzEsMjQ0NiBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjMgKFBvZDo6U2ltcGxlIDMuMTQpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIkxEIDEiCisuVEggTEQgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitsZCBcLSBUaGUgR05VIGxpbmtlcgorLlNIICJTWU5PUFNJUyIKKy5JWCBIZWFkZXIgIlNZTk9QU0lTIgorbGQgW1xmQm9wdGlvbnNcZlJdIFxmSW9iamZpbGVcZlIgLi4uCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitcJlxmQmxkXGZSIGNvbWJpbmVzIGEgbnVtYmVyIG9mIG9iamVjdCBhbmQgYXJjaGl2ZSBmaWxlcywgcmVsb2NhdGVzCit0aGVpciBkYXRhIGFuZCB0aWVzIHVwIHN5bWJvbCByZWZlcmVuY2VzLiBVc3VhbGx5IHRoZSBsYXN0IHN0ZXAgaW4KK2NvbXBpbGluZyBhIHByb2dyYW0gaXMgdG8gcnVuIFxmQmxkXGZSLgorLlBQCitcJlxmQmxkXGZSIGFjY2VwdHMgTGlua2VyIENvbW1hbmQgTGFuZ3VhZ2UgZmlsZXMgd3JpdHRlbiBpbgorYSBzdXBlcnNldCBvZiBccy0xQVQmVFxzMCdzIExpbmsgRWRpdG9yIENvbW1hbmQgTGFuZ3VhZ2Ugc3ludGF4LAordG8gcHJvdmlkZSBleHBsaWNpdCBhbmQgdG90YWwgY29udHJvbCBvdmVyIHRoZSBsaW5raW5nIHByb2Nlc3MuCisuUFAKK1RoaXMgbWFuIHBhZ2UgZG9lcyBub3QgZGVzY3JpYmUgdGhlIGNvbW1hbmQgbGFuZ3VhZ2U7IHNlZSB0aGUKK1wmXGZCbGRcZlIgZW50cnkgaW4gXGYoQ1dcKihDYGluZm9cKihDJ1xmUiBmb3IgZnVsbCBkZXRhaWxzIG9uIHRoZSBjb21tYW5kCitsYW5ndWFnZSBhbmQgb24gb3RoZXIgYXNwZWN0cyBvZiB0aGUgXHMtMUdOVVxzMCBsaW5rZXIuCisuUFAKK1RoaXMgdmVyc2lvbiBvZiBcZkJsZFxmUiB1c2VzIHRoZSBnZW5lcmFsIHB1cnBvc2UgXHMtMUJGRFxzMCBsaWJyYXJpZXMKK3RvIG9wZXJhdGUgb24gb2JqZWN0IGZpbGVzLiBUaGlzIGFsbG93cyBcZkJsZFxmUiB0byByZWFkLCBjb21iaW5lLCBhbmQKK3dyaXRlIG9iamVjdCBmaWxlcyBpbiBtYW55IGRpZmZlcmVudCBmb3JtYXRzXC1cLVwtZm9yIGV4YW1wbGUsIFxzLTFDT0ZGXHMwIG9yCitcJlxmKENXXCooQ2BhLm91dFwqKEMnXGZSLiAgRGlmZmVyZW50IGZvcm1hdHMgbWF5IGJlIGxpbmtlZCB0b2dldGhlciB0byBwcm9kdWNlIGFueQorYXZhaWxhYmxlIGtpbmQgb2Ygb2JqZWN0IGZpbGUuCisuUFAKK0FzaWRlIGZyb20gaXRzIGZsZXhpYmlsaXR5LCB0aGUgXHMtMUdOVVxzMCBsaW5rZXIgaXMgbW9yZSBoZWxwZnVsIHRoYW4gb3RoZXIKK2xpbmtlcnMgaW4gcHJvdmlkaW5nIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uICBNYW55IGxpbmtlcnMgYWJhbmRvbgorZXhlY3V0aW9uIGltbWVkaWF0ZWx5IHVwb24gZW5jb3VudGVyaW5nIGFuIGVycm9yOyB3aGVuZXZlciBwb3NzaWJsZSwKK1wmXGZCbGRcZlIgY29udGludWVzIGV4ZWN1dGluZywgYWxsb3dpbmcgeW91IHRvIGlkZW50aWZ5IG90aGVyIGVycm9ycworKG9yLCBpbiBzb21lIGNhc2VzLCB0byBnZXQgYW4gb3V0cHV0IGZpbGUgaW4gc3BpdGUgb2YgdGhlIGVycm9yKS4KKy5QUAorVGhlIFxzLTFHTlVcczAgbGlua2VyIFxmQmxkXGZSIGlzIG1lYW50IHRvIGNvdmVyIGEgYnJvYWQgcmFuZ2Ugb2Ygc2l0dWF0aW9ucywKK2FuZCB0byBiZSBhcyBjb21wYXRpYmxlIGFzIHBvc3NpYmxlIHdpdGggb3RoZXIgbGlua2Vycy4gIEFzIGEgcmVzdWx0LAoreW91IGhhdmUgbWFueSBjaG9pY2VzIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW9yLgorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKK1RoZSBsaW5rZXIgc3VwcG9ydHMgYSBwbGV0aG9yYSBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucywgYnV0IGluIGFjdHVhbAorcHJhY3RpY2UgZmV3IG9mIHRoZW0gYXJlIHVzZWQgaW4gYW55IHBhcnRpY3VsYXIgY29udGV4dC4KK0ZvciBpbnN0YW5jZSwgYSBmcmVxdWVudCB1c2Ugb2YgXGZCbGRcZlIgaXMgdG8gbGluayBzdGFuZGFyZCBVbml4CitvYmplY3QgZmlsZXMgb24gYSBzdGFuZGFyZCwgc3VwcG9ydGVkIFVuaXggc3lzdGVtLiAgT24gc3VjaCBhIHN5c3RlbSwgdG8KK2xpbmsgYSBmaWxlIFxmKENXXCooQ2BoZWxsby5vXCooQydcZlI6CisuUFAKKy5WYiAxCitcJiAgICAgICAgbGQgXC1vIDxvdXRwdXQ+IC9saWIvY3J0MC5vIGhlbGxvLm8gXC1sYworLlZlCisuUFAKK1RoaXMgdGVsbHMgXGZCbGRcZlIgdG8gcHJvZHVjZSBhIGZpbGUgY2FsbGVkIFxmSW91dHB1dFxmUiBhcyB0aGUKK3Jlc3VsdCBvZiBsaW5raW5nIHRoZSBmaWxlIFxmKENXXCooQ2AvbGliL2NydDAub1wqKEMnXGZSIHdpdGggXGYoQ1dcKihDYGhlbGxvLm9cKihDJ1xmUiBhbmQKK3RoZSBsaWJyYXJ5IFxmKENXXCooQ2BsaWJjLmFcKihDJ1xmUiwgd2hpY2ggd2lsbCBjb21lIGZyb20gdGhlIHN0YW5kYXJkIHNlYXJjaAorZGlyZWN0b3JpZXMuICAoU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSBcZkJcLWxcZlIgb3B0aW9uIGJlbG93LikKKy5QUAorU29tZSBvZiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgdG8gXGZCbGRcZlIgbWF5IGJlIHNwZWNpZmllZCBhdCBhbnkKK3BvaW50IGluIHRoZSBjb21tYW5kIGxpbmUuICBIb3dldmVyLCBvcHRpb25zIHdoaWNoIHJlZmVyIHRvIGZpbGVzLCBzdWNoCithcyBcZkJcLWxcZlIgb3IgXGZCXC1UXGZSLCBjYXVzZSB0aGUgZmlsZSB0byBiZSByZWFkIGF0IHRoZSBwb2ludCBhdAord2hpY2ggdGhlIG9wdGlvbiBhcHBlYXJzIGluIHRoZSBjb21tYW5kIGxpbmUsIHJlbGF0aXZlIHRvIHRoZSBvYmplY3QKK2ZpbGVzIGFuZCBvdGhlciBmaWxlIG9wdGlvbnMuICBSZXBlYXRpbmcgbm9uLWZpbGUgb3B0aW9ucyB3aXRoIGEKK2RpZmZlcmVudCBhcmd1bWVudCB3aWxsIGVpdGhlciBoYXZlIG5vIGZ1cnRoZXIgZWZmZWN0LCBvciBvdmVycmlkZSBwcmlvcgorb2NjdXJyZW5jZXMgKHRob3NlIGZ1cnRoZXIgdG8gdGhlIGxlZnQgb24gdGhlIGNvbW1hbmQgbGluZSkgb2YgdGhhdAorb3B0aW9uLiAgT3B0aW9ucyB3aGljaCBtYXkgYmUgbWVhbmluZ2Z1bGx5IHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSBhcmUKK25vdGVkIGluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3cuCisuUFAKK05vbi1vcHRpb24gYXJndW1lbnRzIGFyZSBvYmplY3QgZmlsZXMgb3IgYXJjaGl2ZXMgd2hpY2ggYXJlIHRvIGJlIGxpbmtlZAordG9nZXRoZXIuICBUaGV5IG1heSBmb2xsb3csIHByZWNlZGUsIG9yIGJlIG1peGVkIGluIHdpdGggY29tbWFuZC1saW5lCitvcHRpb25zLCBleGNlcHQgdGhhdCBhbiBvYmplY3QgZmlsZSBhcmd1bWVudCBtYXkgbm90IGJlIHBsYWNlZCBiZXR3ZWVuCithbiBvcHRpb24gYW5kIGl0cyBhcmd1bWVudC4KKy5QUAorVXN1YWxseSB0aGUgbGlua2VyIGlzIGludm9rZWQgd2l0aCBhdCBsZWFzdCBvbmUgb2JqZWN0IGZpbGUsIGJ1dCB5b3UgY2FuCitzcGVjaWZ5IG90aGVyIGZvcm1zIG9mIGJpbmFyeSBpbnB1dCBmaWxlcyB1c2luZyBcZkJcLWxcZlIsIFxmQlwtUlxmUiwKK2FuZCB0aGUgc2NyaXB0IGNvbW1hbmQgbGFuZ3VhZ2UuICBJZiBcZklub1xmUiBiaW5hcnkgaW5wdXQgZmlsZXMgYXQgYWxsCithcmUgc3BlY2lmaWVkLCB0aGUgbGlua2VyIGRvZXMgbm90IHByb2R1Y2UgYW55IG91dHB1dCwgYW5kIGlzc3VlcyB0aGUKK21lc3NhZ2UgXGZCTm8gaW5wdXQgZmlsZXNcZlIuCisuUFAKK0lmIHRoZSBsaW5rZXIgY2Fubm90IHJlY29nbml6ZSB0aGUgZm9ybWF0IG9mIGFuIG9iamVjdCBmaWxlLCBpdCB3aWxsCithc3N1bWUgdGhhdCBpdCBpcyBhIGxpbmtlciBzY3JpcHQuICBBIHNjcmlwdCBzcGVjaWZpZWQgaW4gdGhpcyB3YXkKK2F1Z21lbnRzIHRoZSBtYWluIGxpbmtlciBzY3JpcHQgdXNlZCBmb3IgdGhlIGxpbmsgKGVpdGhlciB0aGUgZGVmYXVsdAorbGlua2VyIHNjcmlwdCBvciB0aGUgb25lIHNwZWNpZmllZCBieSB1c2luZyBcZkJcLVRcZlIpLiAgVGhpcyBmZWF0dXJlCitwZXJtaXRzIHRoZSBsaW5rZXIgdG8gbGluayBhZ2FpbnN0IGEgZmlsZSB3aGljaCBhcHBlYXJzIHRvIGJlIGFuIG9iamVjdAorb3IgYW4gYXJjaGl2ZSwgYnV0IGFjdHVhbGx5IG1lcmVseSBkZWZpbmVzIHNvbWUgc3ltYm9sIHZhbHVlcywgb3IgdXNlcworXCZcZihDV1wqKENgSU5QVVRcKihDJ1xmUiBvciBcZihDV1wqKENgR1JPVVBcKihDJ1xmUiB0byBsb2FkIG90aGVyIG9iamVjdHMuICBTcGVjaWZ5aW5nIGEKK3NjcmlwdCBpbiB0aGlzIHdheSBtZXJlbHkgYXVnbWVudHMgdGhlIG1haW4gbGlua2VyIHNjcmlwdCwgd2l0aCB0aGUKK2V4dHJhIGNvbW1hbmRzIHBsYWNlZCBhZnRlciB0aGUgbWFpbiBzY3JpcHQ7IHVzZSB0aGUgXGZCXC1UXGZSIG9wdGlvbgordG8gcmVwbGFjZSB0aGUgZGVmYXVsdCBsaW5rZXIgc2NyaXB0IGVudGlyZWx5LCBidXQgbm90ZSB0aGUgZWZmZWN0IG9mCit0aGUgXGYoQ1dcKihDYElOU0VSVFwqKEMnXGZSIGNvbW1hbmQuCisuUFAKK0ZvciBvcHRpb25zIHdob3NlIG5hbWVzIGFyZSBhIHNpbmdsZSBsZXR0ZXIsCitvcHRpb24gYXJndW1lbnRzIG11c3QgZWl0aGVyIGZvbGxvdyB0aGUgb3B0aW9uIGxldHRlciB3aXRob3V0IGludGVydmVuaW5nCit3aGl0ZXNwYWNlLCBvciBiZSBnaXZlbiBhcyBzZXBhcmF0ZSBhcmd1bWVudHMgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQorb3B0aW9uIHRoYXQgcmVxdWlyZXMgdGhlbS4KKy5QUAorRm9yIG9wdGlvbnMgd2hvc2UgbmFtZXMgYXJlIG11bHRpcGxlIGxldHRlcnMsIGVpdGhlciBvbmUgZGFzaCBvciB0d28gY2FuCitwcmVjZWRlIHRoZSBvcHRpb24gbmFtZTsgZm9yIGV4YW1wbGUsIFxmQlwtdHJhY2VcLXN5bWJvbFxmUiBhbmQKK1wmXGZCXC1cLXRyYWNlXC1zeW1ib2xcZlIgYXJlIGVxdWl2YWxlbnQuICBOb3RlXC1cLVwtdGhlcmUgaXMgb25lIGV4Y2VwdGlvbiB0bwordGhpcyBydWxlLiAgTXVsdGlwbGUgbGV0dGVyIG9wdGlvbnMgdGhhdCBzdGFydCB3aXRoIGEgbG93ZXIgY2FzZSAnbycgY2FuCitvbmx5IGJlIHByZWNlZGVkIGJ5IHR3byBkYXNoZXMuICBUaGlzIGlzIHRvIHJlZHVjZSBjb25mdXNpb24gd2l0aCB0aGUKK1wmXGZCXC1vXGZSIG9wdGlvbi4gIFNvIGZvciBleGFtcGxlIFxmQlwtb21hZ2ljXGZSIHNldHMgdGhlIG91dHB1dCBmaWxlCituYW1lIHRvIFxmQm1hZ2ljXGZSIHdoZXJlYXMgXGZCXC1cLW9tYWdpY1xmUiBzZXRzIHRoZSBccy0xTk1BR0lDXHMwIGZsYWcgb24gdGhlCitvdXRwdXQuCisuUFAKK0FyZ3VtZW50cyB0byBtdWx0aXBsZS1sZXR0ZXIgb3B0aW9ucyBtdXN0IGVpdGhlciBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUKK29wdGlvbiBuYW1lIGJ5IGFuIGVxdWFscyBzaWduLCBvciBiZSBnaXZlbiBhcyBzZXBhcmF0ZSBhcmd1bWVudHMKK2ltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgb3B0aW9uIHRoYXQgcmVxdWlyZXMgdGhlbS4gIEZvciBleGFtcGxlLAorXCZcZkJcLVwtdHJhY2VcLXN5bWJvbCBmb29cZlIgYW5kIFxmQlwtXC10cmFjZVwtc3ltYm9sPWZvb1xmUiBhcmUgZXF1aXZhbGVudC4KK1VuaXF1ZSBhYmJyZXZpYXRpb25zIG9mIHRoZSBuYW1lcyBvZiBtdWx0aXBsZS1sZXR0ZXIgb3B0aW9ucyBhcmUKK2FjY2VwdGVkLgorLlBQCitOb3RlXC1cLVwtaWYgdGhlIGxpbmtlciBpcyBiZWluZyBpbnZva2VkIGluZGlyZWN0bHksIHZpYSBhIGNvbXBpbGVyIGRyaXZlcgorKGUuZy4gXGZCZ2NjXGZSKSB0aGVuIGFsbCB0aGUgbGlua2VyIGNvbW1hbmQgbGluZSBvcHRpb25zIHNob3VsZCBiZQorcHJlZml4ZWQgYnkgXGZCXC1XbCxcZlIgKG9yIHdoYXRldmVyIGlzIGFwcHJvcHJpYXRlIGZvciB0aGUgcGFydGljdWxhcgorY29tcGlsZXIgZHJpdmVyKSBsaWtlIHRoaXM6CisuUFAKKy5WYiAxCitcJiAgICAgICAgICBnY2MgXC1XbCxcLVwtc3RhcnRcLWdyb3VwIGZvby5vIGJhci5vIFwtV2wsXC1cLWVuZFwtZ3JvdXAKKy5WZQorLlBQCitUaGlzIGlzIGltcG9ydGFudCwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGNvbXBpbGVyIGRyaXZlciBwcm9ncmFtIG1heQorc2lsZW50bHkgZHJvcCB0aGUgbGlua2VyIG9wdGlvbnMsIHJlc3VsdGluZyBpbiBhIGJhZCBsaW5rLiAgQ29uZnVzaW9uCittYXkgYWxzbyBhcmlzZSB3aGVuIHBhc3Npbmcgb3B0aW9ucyB0aGF0IHJlcXVpcmUgdmFsdWVzIHRocm91Z2ggYQorZHJpdmVyLCBhcyB0aGUgdXNlIG9mIGEgc3BhY2UgYmV0d2VlbiBvcHRpb24gYW5kIGFyZ3VtZW50IGFjdHMgYXMKK2Egc2VwYXJhdG9yLCBhbmQgY2F1c2VzIHRoZSBkcml2ZXIgdG8gcGFzcyBvbmx5IHRoZSBvcHRpb24gdG8gdGhlIGxpbmtlcgorYW5kIHRoZSBhcmd1bWVudCB0byB0aGUgY29tcGlsZXIuICBJbiB0aGlzIGNhc2UsIGl0IGlzIHNpbXBsZXN0IHRvIHVzZQordGhlIGpvaW5lZCBmb3JtcyBvZiBib3RoIHNpbmdsZVwtIGFuZCBtdWx0aXBsZS1sZXR0ZXIgb3B0aW9ucywgc3VjaCBhczoKKy5QUAorLlZiIDEKK1wmICAgICAgICAgIGdjYyBmb28ubyBiYXIubyBcLVdsLFwtZUVOVFJZIFwtV2wsXC1NYXA9YS5tYXAKKy5WZQorLlBQCitIZXJlIGlzIGEgdGFibGUgb2YgdGhlIGdlbmVyaWMgY29tbWFuZCBsaW5lIHN3aXRjaGVzIGFjY2VwdGVkIGJ5IHRoZSBccy0xR05VXHMwCitsaW5rZXI6CisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLklQICJcZkJcLWFcZlIgXGZJa2V5d29yZFxmUiIgNAorLklYIEl0ZW0gIi1hIGtleXdvcmQiCitUaGlzIG9wdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIFxzLTFIUC9VWFxzMCBjb21wYXRpYmlsaXR5LiAgVGhlIFxmSWtleXdvcmRcZlIKK2FyZ3VtZW50IG11c3QgYmUgb25lIG9mIHRoZSBzdHJpbmdzIFxmQmFyY2hpdmVcZlIsIFxmQnNoYXJlZFxmUiwgb3IKK1wmXGZCZGVmYXVsdFxmUi4gIFxmQlwtYWFyY2hpdmVcZlIgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8KK1wmXGZCXC1Cc3RhdGljXGZSLCBhbmQgdGhlIG90aGVyIHR3byBrZXl3b3JkcyBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQKK3RvIFxmQlwtQmR5bmFtaWNcZlIuICBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBhbnkgbnVtYmVyIG9mIHRpbWVzLgorLklQICJcZkJcLVwtYXVkaXRcZlIgXGZJXHMtMUFVRElUTElCXHMwXGZSIiA0CisuSVggSXRlbSAiLS1hdWRpdCBBVURJVExJQiIKK0FkZHMgXGZJXHMtMUFVRElUTElCXHMwXGZSIHRvIHRoZSBcZihDV1wqKENgRFRfQVVESVRcKihDJ1xmUiBlbnRyeSBvZiB0aGUgZHluYW1pYyBzZWN0aW9uLgorXCZcZklccy0xQVVESVRMSUJcczBcZlIgaXMgbm90IGNoZWNrZWQgZm9yIGV4aXN0ZW5jZSwgbm9yIHdpbGwgaXQgdXNlIHRoZSBccy0xRFRfU09OQU1FXHMwCitzcGVjaWZpZWQgaW4gdGhlIGxpYnJhcnkuICBJZiBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgXGYoQ1dcKihDYERUX0FVRElUXCooQydcZlIKK3dpbGwgY29udGFpbiBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGF1ZGl0IGludGVyZmFjZXMgdG8gdXNlLiBJZiB0aGUgbGlua2VyCitmaW5kcyBhbiBvYmplY3Qgd2l0aCBhbiBhdWRpdCBlbnRyeSB3aGlsZSBzZWFyY2hpbmcgZm9yIHNoYXJlZCBsaWJyYXJpZXMsCitpdCB3aWxsIGFkZCBhIGNvcnJlc3BvbmRpbmcgXGYoQ1dcKihDYERUX0RFUEFVRElUXCooQydcZlIgZW50cnkgaW4gdGhlIG91dHB1dCBmaWxlLgorVGhpcyBvcHRpb24gaXMgb25seSBtZWFuaW5nZnVsIG9uIFxzLTFFTEZcczAgcGxhdGZvcm1zIHN1cHBvcnRpbmcgdGhlIHJ0bGQtYXVkaXQKK2ludGVyZmFjZS4KKy5JUCAiXGZCXC1BXGZSIFxmSWFyY2hpdGVjdHVyZVxmUiIgNAorLklYIEl0ZW0gIi1BIGFyY2hpdGVjdHVyZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1hcmNoaXRlY3R1cmU9XGZSXGZJYXJjaGl0ZWN0dXJlXGZSIiA0CisuSVggSXRlbSAiLS1hcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlIgorLlBECitJbiB0aGUgY3VycmVudCByZWxlYXNlIG9mIFxmQmxkXGZSLCB0aGlzIG9wdGlvbiBpcyB1c2VmdWwgb25seSBmb3IgdGhlCitJbnRlbCA5NjAgZmFtaWx5IG9mIGFyY2hpdGVjdHVyZXMuICBJbiB0aGF0IFxmQmxkXGZSIGNvbmZpZ3VyYXRpb24sIHRoZQorXCZcZklhcmNoaXRlY3R1cmVcZlIgYXJndW1lbnQgaWRlbnRpZmllcyB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgaW4KK3RoZSA5NjAgZmFtaWx5LCBlbmFibGluZyBzb21lIHNhZmVndWFyZHMgYW5kIG1vZGlmeWluZyB0aGUKK2FyY2hpdmUtbGlicmFyeSBzZWFyY2ggcGF0aC4KKy5TcAorRnV0dXJlIHJlbGVhc2VzIG9mIFxmQmxkXGZSIG1heSBzdXBwb3J0IHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBmb3IKK290aGVyIGFyY2hpdGVjdHVyZSBmYW1pbGllcy4KKy5JUCAiXGZCXC1iXGZSIFxmSWlucHV0LWZvcm1hdFxmUiIgNAorLklYIEl0ZW0gIi1iIGlucHV0LWZvcm1hdCIKKy5QRCAwCisuSVAgIlxmQlwtXC1mb3JtYXQ9XGZSXGZJaW5wdXQtZm9ybWF0XGZSIiA0CisuSVggSXRlbSAiLS1mb3JtYXQ9aW5wdXQtZm9ybWF0IgorLlBECitcJlxmQmxkXGZSIG1heSBiZSBjb25maWd1cmVkIHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBraW5kIG9mIG9iamVjdAorZmlsZS4gIElmIHlvdXIgXGZCbGRcZlIgaXMgY29uZmlndXJlZCB0aGlzIHdheSwgeW91IGNhbiB1c2UgdGhlCitcJlxmQlwtYlxmUiBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYmluYXJ5IGZvcm1hdCBmb3IgaW5wdXQgb2JqZWN0IGZpbGVzCit0aGF0IGZvbGxvdyB0aGlzIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRXZlbiB3aGVuIFxmQmxkXGZSIGlzCitjb25maWd1cmVkIHRvIHN1cHBvcnQgYWx0ZXJuYXRpdmUgb2JqZWN0IGZvcm1hdHMsIHlvdSBkb24ndCB1c3VhbGx5IG5lZWQKK3RvIHNwZWNpZnkgdGhpcywgYXMgXGZCbGRcZlIgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gZXhwZWN0IGFzIGEKK2RlZmF1bHQgaW5wdXQgZm9ybWF0IHRoZSBtb3N0IHVzdWFsIGZvcm1hdCBvbiBlYWNoIG1hY2hpbmUuCitcJlxmSWlucHV0LWZvcm1hdFxmUiBpcyBhIHRleHQgc3RyaW5nLCB0aGUgbmFtZSBvZiBhIHBhcnRpY3VsYXIgZm9ybWF0CitzdXBwb3J0ZWQgYnkgdGhlIFxzLTFCRkRcczAgbGlicmFyaWVzLiAgKFlvdSBjYW4gbGlzdCB0aGUgYXZhaWxhYmxlIGJpbmFyeQorZm9ybWF0cyB3aXRoIFxmQm9iamR1bXAgXC1pXGZSLikKKy5TcAorWW91IG1heSB3YW50IHRvIHVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIGxpbmtpbmcgZmlsZXMgd2l0aCBhbiB1bnVzdWFsCitiaW5hcnkgZm9ybWF0LiAgWW91IGNhbiBhbHNvIHVzZSBcZkJcLWJcZlIgdG8gc3dpdGNoIGZvcm1hdHMgZXhwbGljaXRseSAod2hlbgorbGlua2luZyBvYmplY3QgZmlsZXMgb2YgZGlmZmVyZW50IGZvcm1hdHMpLCBieSBpbmNsdWRpbmcKK1wmXGZCXC1iXGZSIFxmSWlucHV0LWZvcm1hdFxmUiBiZWZvcmUgZWFjaCBncm91cCBvZiBvYmplY3QgZmlsZXMgaW4gYQorcGFydGljdWxhciBmb3JtYXQuCisuU3AKK1RoZSBkZWZhdWx0IGZvcm1hdCBpcyB0YWtlbiBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorXCZcZihDV1wqKENgR05VVEFSR0VUXCooQydcZlIuCisuU3AKK1lvdSBjYW4gYWxzbyBkZWZpbmUgdGhlIGlucHV0IGZvcm1hdCBmcm9tIGEgc2NyaXB0LCB1c2luZyB0aGUgY29tbWFuZAorXCZcZihDV1wqKENgVEFSR0VUXCooQydcZlI7CisuSVAgIlxmQlwtY1xmUiBcZklNUkktY29tbWFuZGZpbGVcZlIiIDQKKy5JWCBJdGVtICItYyBNUkktY29tbWFuZGZpbGUiCisuUEQgMAorLklQICJcZkJcLVwtbXJpXC1zY3JpcHQ9XGZSXGZJTVJJLWNvbW1hbmRmaWxlXGZSIiA0CisuSVggSXRlbSAiLS1tcmktc2NyaXB0PU1SSS1jb21tYW5kZmlsZSIKKy5QRAorRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsaW5rZXJzIHByb2R1Y2VkIGJ5IFxzLTFNUklcczAsIFxmQmxkXGZSIGFjY2VwdHMgc2NyaXB0CitmaWxlcyB3cml0dGVuIGluIGFuIGFsdGVybmF0ZSwgcmVzdHJpY3RlZCBjb21tYW5kIGxhbmd1YWdlLCBkZXNjcmliZWQgaW4KK3RoZSBccy0xTVJJXHMwIENvbXBhdGlibGUgU2NyaXB0IEZpbGVzIHNlY3Rpb24gb2YgXHMtMUdOVVxzMCBsZCBkb2N1bWVudGF0aW9uLgorSW50cm9kdWNlIFxzLTFNUklcczAgc2NyaXB0IGZpbGVzIHdpdGgKK3RoZSBvcHRpb24gXGZCXC1jXGZSOyB1c2UgdGhlIFxmQlwtVFxmUiBvcHRpb24gdG8gcnVuIGxpbmtlcgorc2NyaXB0cyB3cml0dGVuIGluIHRoZSBnZW5lcmFsLXB1cnBvc2UgXGZCbGRcZlIgc2NyaXB0aW5nIGxhbmd1YWdlLgorSWYgXGZJTVJJLWNtZGZpbGVcZlIgZG9lcyBub3QgZXhpc3QsIFxmQmxkXGZSIGxvb2tzIGZvciBpdCBpbiB0aGUgZGlyZWN0b3JpZXMKK3NwZWNpZmllZCBieSBhbnkgXGZCXC1MXGZSIG9wdGlvbnMuCisuSVAgIlxmQlwtZFxmUiIgNAorLklYIEl0ZW0gIi1kIgorLlBEIDAKKy5JUCAiXGZCXC1kY1xmUiIgNAorLklYIEl0ZW0gIi1kYyIKKy5JUCAiXGZCXC1kcFxmUiIgNAorLklYIEl0ZW0gIi1kcCIKKy5QRAorVGhlc2UgdGhyZWUgb3B0aW9ucyBhcmUgZXF1aXZhbGVudDsgbXVsdGlwbGUgZm9ybXMgYXJlIHN1cHBvcnRlZCBmb3IKK2NvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBsaW5rZXJzLiAgVGhleSBhc3NpZ24gc3BhY2UgdG8gY29tbW9uIHN5bWJvbHMKK2V2ZW4gaWYgYSByZWxvY2F0YWJsZSBvdXRwdXQgZmlsZSBpcyBzcGVjaWZpZWQgKHdpdGggXGZCXC1yXGZSKS4gIFRoZQorc2NyaXB0IGNvbW1hbmQgXGYoQ1dcKihDYEZPUkNFX0NPTU1PTl9BTExPQ0FUSU9OXCooQydcZlIgaGFzIHRoZSBzYW1lIGVmZmVjdC4KKy5JUCAiXGZCXC1cLWRlcGF1ZGl0XGZSIFxmSVxzLTFBVURJVExJQlxzMFxmUiIgNAorLklYIEl0ZW0gIi0tZGVwYXVkaXQgQVVESVRMSUIiCisuUEQgMAorLklQICJcZkJcLVBcZlIgXGZJXHMtMUFVRElUTElCXHMwXGZSIiA0CisuSVggSXRlbSAiLVAgQVVESVRMSUIiCisuUEQKK0FkZHMgXGZJXHMtMUFVRElUTElCXHMwXGZSIHRvIHRoZSBcZihDV1wqKENgRFRfREVQQVVESVRcKihDJ1xmUiBlbnRyeSBvZiB0aGUgZHluYW1pYyBzZWN0aW9uLgorXCZcZklccy0xQVVESVRMSUJcczBcZlIgaXMgbm90IGNoZWNrZWQgZm9yIGV4aXN0ZW5jZSwgbm9yIHdpbGwgaXQgdXNlIHRoZSBccy0xRFRfU09OQU1FXHMwCitzcGVjaWZpZWQgaW4gdGhlIGxpYnJhcnkuICBJZiBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgXGYoQ1dcKihDYERUX0RFUEFVRElUXCooQydcZlIKK3dpbGwgY29udGFpbiBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGF1ZGl0IGludGVyZmFjZXMgdG8gdXNlLiAgVGhpcworb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiBccy0xRUxGXHMwIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRoZSBydGxkLWF1ZGl0IGludGVyZmFjZS4KK1RoZSBcLVAgb3B0aW9uIGlzIHByb3ZpZGVkIGZvciBTb2xhcmlzIGNvbXBhdGliaWxpdHkuCisuSVAgIlxmQlwtZVxmUiBcZkllbnRyeVxmUiIgNAorLklYIEl0ZW0gIi1lIGVudHJ5IgorLlBEIDAKKy5JUCAiXGZCXC1cLWVudHJ5PVxmUlxmSWVudHJ5XGZSIiA0CisuSVggSXRlbSAiLS1lbnRyeT1lbnRyeSIKKy5QRAorVXNlIFxmSWVudHJ5XGZSIGFzIHRoZSBleHBsaWNpdCBzeW1ib2wgZm9yIGJlZ2lubmluZyBleGVjdXRpb24gb2YgeW91cgorcHJvZ3JhbSwgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgZW50cnkgcG9pbnQuICBJZiB0aGVyZSBpcyBubyBzeW1ib2wKK25hbWVkIFxmSWVudHJ5XGZSLCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIHBhcnNlIFxmSWVudHJ5XGZSIGFzIGEgbnVtYmVyLAorYW5kIHVzZSB0aGF0IGFzIHRoZSBlbnRyeSBhZGRyZXNzICh0aGUgbnVtYmVyIHdpbGwgYmUgaW50ZXJwcmV0ZWQgaW4KK2Jhc2UgMTA7IHlvdSBtYXkgdXNlIGEgbGVhZGluZyBcZkIweFxmUiBmb3IgYmFzZSAxNiwgb3IgYSBsZWFkaW5nCitcJlxmQjBcZlIgZm9yIGJhc2UgOCkuCisuSVAgIlxmQlwtXC1leGNsdWRlXC1saWJzXGZSIFxmSWxpYlxmUlxmQixcZlJcZklsaWJcZlJcZkIsLi4uXGZSIiA0CisuSVggSXRlbSAiLS1leGNsdWRlLWxpYnMgbGliLGxpYiwuLi4iCitTcGVjaWZpZXMgYSBsaXN0IG9mIGFyY2hpdmUgbGlicmFyaWVzIGZyb20gd2hpY2ggc3ltYm9scyBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkKK2V4cG9ydGVkLiAgVGhlIGxpYnJhcnkgbmFtZXMgbWF5IGJlIGRlbGltaXRlZCBieSBjb21tYXMgb3IgY29sb25zLiAgU3BlY2lmeWluZworXCZcZihDV1wqKENgXC1cLWV4Y2x1ZGVcLWxpYnMgQUxMXCooQydcZlIgZXhjbHVkZXMgc3ltYm9scyBpbiBhbGwgYXJjaGl2ZSBsaWJyYXJpZXMgZnJvbQorYXV0b21hdGljIGV4cG9ydC4gIFRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGZvciB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQKK3BvcnQgb2YgdGhlIGxpbmtlciBhbmQgZm9yIFxzLTFFTEZcczAgdGFyZ2V0ZWQgcG9ydHMuICBGb3IgaTM4NiBccy0xUEVcczAsIHN5bWJvbHMKK2V4cGxpY2l0bHkgbGlzdGVkIGluIGEgLmRlZiBmaWxlIGFyZSBzdGlsbCBleHBvcnRlZCwgcmVnYXJkbGVzcyBvZiB0aGlzCitvcHRpb24uICBGb3IgXHMtMUVMRlxzMCB0YXJnZXRlZCBwb3J0cywgc3ltYm9scyBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbiB3aWxsCitiZSB0cmVhdGVkIGFzIGhpZGRlbi4KKy5JUCAiXGZCXC1cLWV4Y2x1ZGVcLW1vZHVsZXNcLWZvclwtaW1wbGliXGZSIFxmSW1vZHVsZVxmUlxmQixcZlJcZkltb2R1bGVcZlJcZkIsLi4uXGZSIiA0CisuSVggSXRlbSAiLS1leGNsdWRlLW1vZHVsZXMtZm9yLWltcGxpYiBtb2R1bGUsbW9kdWxlLC4uLiIKK1NwZWNpZmllcyBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIG9yIGFyY2hpdmUgbWVtYmVycywgZnJvbSB3aGljaCBzeW1ib2xzCitzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgZXhwb3J0ZWQsIGJ1dCB3aGljaCBzaG91bGQgYmUgY29waWVkIHdob2xlc2FsZQoraW50byB0aGUgaW1wb3J0IGxpYnJhcnkgYmVpbmcgZ2VuZXJhdGVkIGR1cmluZyB0aGUgbGluay4gIFRoZSBtb2R1bGUgbmFtZXMKK21heSBiZSBkZWxpbWl0ZWQgYnkgY29tbWFzIG9yIGNvbG9ucywgYW5kIG11c3QgbWF0Y2ggZXhhY3RseSB0aGUgZmlsZW5hbWVzCit1c2VkIGJ5IFxmQmxkXGZSIHRvIG9wZW4gdGhlIGZpbGVzOyBmb3IgYXJjaGl2ZSBtZW1iZXJzLCB0aGlzIGlzIHNpbXBseQordGhlIG1lbWJlciBuYW1lLCBidXQgZm9yIG9iamVjdCBmaWxlcyB0aGUgbmFtZSBsaXN0ZWQgbXVzdCBpbmNsdWRlIGFuZAorbWF0Y2ggcHJlY2lzZWx5IGFueSBwYXRoIHVzZWQgdG8gc3BlY2lmeSB0aGUgaW5wdXQgZmlsZSBvbiB0aGUgbGlua2VyJ3MKK2NvbW1hbmQtbGluZS4gIFRoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGZvciB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydAorb2YgdGhlIGxpbmtlci4gIFN5bWJvbHMgZXhwbGljaXRseSBsaXN0ZWQgaW4gYSAuZGVmIGZpbGUgYXJlIHN0aWxsIGV4cG9ydGVkLAorcmVnYXJkbGVzcyBvZiB0aGlzIG9wdGlvbi4KKy5JUCAiXGZCXC1FXGZSIiA0CisuSVggSXRlbSAiLUUiCisuUEQgMAorLklQICJcZkJcLVwtZXhwb3J0XC1keW5hbWljXGZSIiA0CisuSVggSXRlbSAiLS1leHBvcnQtZHluYW1pYyIKKy5JUCAiXGZCXC1cLW5vXC1leHBvcnRcLWR5bmFtaWNcZlIiIDQKKy5JWCBJdGVtICItLW5vLWV4cG9ydC1keW5hbWljIgorLlBECitXaGVuIGNyZWF0aW5nIGEgZHluYW1pY2FsbHkgbGlua2VkIGV4ZWN1dGFibGUsIHVzaW5nIHRoZSBcZkJcLUVcZlIKK29wdGlvbiBvciB0aGUgXGZCXC1cLWV4cG9ydFwtZHluYW1pY1xmUiBvcHRpb24gY2F1c2VzIHRoZSBsaW5rZXIgdG8gYWRkCithbGwgc3ltYm9scyB0byB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUuICBUaGUgZHluYW1pYyBzeW1ib2wgdGFibGUgaXMgdGhlCitzZXQgb2Ygc3ltYm9scyB3aGljaCBhcmUgdmlzaWJsZSBmcm9tIGR5bmFtaWMgb2JqZWN0cyBhdCBydW4gdGltZS4KKy5TcAorSWYgeW91IGRvIG5vdCB1c2UgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMgKG9yIHVzZSB0aGUKK1wmXGZCXC1cLW5vXC1leHBvcnRcLWR5bmFtaWNcZlIgb3B0aW9uIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLCB0aGUKK2R5bmFtaWMgc3ltYm9sIHRhYmxlIHdpbGwgbm9ybWFsbHkgY29udGFpbiBvbmx5IHRob3NlIHN5bWJvbHMgd2hpY2ggYXJlCityZWZlcmVuY2VkIGJ5IHNvbWUgZHluYW1pYyBvYmplY3QgbWVudGlvbmVkIGluIHRoZSBsaW5rLgorLlNwCitJZiB5b3UgdXNlIFxmKENXXCooQ2BkbG9wZW5cKihDJ1xmUiB0byBsb2FkIGEgZHluYW1pYyBvYmplY3Qgd2hpY2ggbmVlZHMgdG8gcmVmZXIKK2JhY2sgdG8gdGhlIHN5bWJvbHMgZGVmaW5lZCBieSB0aGUgcHJvZ3JhbSwgcmF0aGVyIHRoYW4gc29tZSBvdGhlcgorZHluYW1pYyBvYmplY3QsIHRoZW4geW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byB1c2UgdGhpcyBvcHRpb24gd2hlbgorbGlua2luZyB0aGUgcHJvZ3JhbSBpdHNlbGYuCisuU3AKK1lvdSBjYW4gYWxzbyB1c2UgdGhlIGR5bmFtaWMgbGlzdCB0byBjb250cm9sIHdoYXQgc3ltYm9scyBzaG91bGQKK2JlIGFkZGVkIHRvIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZSBpZiB0aGUgb3V0cHV0IGZvcm1hdCBzdXBwb3J0cyBpdC4KK1NlZSB0aGUgZGVzY3JpcHRpb24gb2YgXGZCXC1cLWR5bmFtaWNcLWxpc3RcZlIuCisuU3AKK05vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBccy0xRUxGXHMwIHRhcmdldGVkIHBvcnRzLiAgXHMtMVBFXHMwIHRhcmdldHMKK3N1cHBvcnQgYSBzaW1pbGFyIGZ1bmN0aW9uIHRvIGV4cG9ydCBhbGwgc3ltYm9scyBmcm9tIGEgXHMtMURMTFxzMCBvciBccy0xRVhFXHMwOyBzZWUKK3RoZSBkZXNjcmlwdGlvbiBvZiBcZkJcLVwtZXhwb3J0XC1hbGxcLXN5bWJvbHNcZlIgYmVsb3cuCisuSVAgIlxmQlwtRUJcZlIiIDQKKy5JWCBJdGVtICItRUIiCitMaW5rIGJpZy1lbmRpYW4gb2JqZWN0cy4gIFRoaXMgYWZmZWN0cyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0LgorLklQICJcZkJcLUVMXGZSIiA0CisuSVggSXRlbSAiLUVMIgorTGluayBsaXR0bGUtZW5kaWFuIG9iamVjdHMuICBUaGlzIGFmZmVjdHMgdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdC4KKy5JUCAiXGZCXC1mXGZSIFxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItZiBuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLWF1eGlsaWFyeT1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLS1hdXhpbGlhcnk9bmFtZSIKKy5QRAorV2hlbiBjcmVhdGluZyBhbiBccy0xRUxGXHMwIHNoYXJlZCBvYmplY3QsIHNldCB0aGUgaW50ZXJuYWwgXHMtMURUX0FVWElMSUFSWVxzMCBmaWVsZAordG8gdGhlIHNwZWNpZmllZCBuYW1lLiAgVGhpcyB0ZWxscyB0aGUgZHluYW1pYyBsaW5rZXIgdGhhdCB0aGUgc3ltYm9sCit0YWJsZSBvZiB0aGUgc2hhcmVkIG9iamVjdCBzaG91bGQgYmUgdXNlZCBhcyBhbiBhdXhpbGlhcnkgZmlsdGVyIG9uIHRoZQorc3ltYm9sIHRhYmxlIG9mIHRoZSBzaGFyZWQgb2JqZWN0IFxmSW5hbWVcZlIuCisuU3AKK0lmIHlvdSBsYXRlciBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IHRoaXMgZmlsdGVyIG9iamVjdCwgdGhlbiwgd2hlbiB5b3UKK3J1biB0aGUgcHJvZ3JhbSwgdGhlIGR5bmFtaWMgbGlua2VyIHdpbGwgc2VlIHRoZSBccy0xRFRfQVVYSUxJQVJZXHMwIGZpZWxkLiAgSWYKK3RoZSBkeW5hbWljIGxpbmtlciByZXNvbHZlcyBhbnkgc3ltYm9scyBmcm9tIHRoZSBmaWx0ZXIgb2JqZWN0LCBpdCB3aWxsCitmaXJzdCBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgZGVmaW5pdGlvbiBpbiB0aGUgc2hhcmVkIG9iamVjdAorXCZcZkluYW1lXGZSLiAgSWYgdGhlcmUgaXMgb25lLCBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmaW5pdGlvbgoraW4gdGhlIGZpbHRlciBvYmplY3QuICBUaGUgc2hhcmVkIG9iamVjdCBcZkluYW1lXGZSIG5lZWQgbm90IGV4aXN0LgorVGh1cyB0aGUgc2hhcmVkIG9iamVjdCBcZkluYW1lXGZSIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRpdmUKK2ltcGxlbWVudGF0aW9uIG9mIGNlcnRhaW4gZnVuY3Rpb25zLCBwZXJoYXBzIGZvciBkZWJ1Z2dpbmcgb3IgZm9yCittYWNoaW5lIHNwZWNpZmljIHBlcmZvcm1hbmNlLgorLlNwCitUaGlzIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLiAgVGhlIFxzLTFEVF9BVVhJTElBUllcczAgZW50cmllcword2lsbCBiZSBjcmVhdGVkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciBvbiB0aGUgY29tbWFuZCBsaW5lLgorLklQICJcZkJcLUZcZlIgXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1GIG5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtZmlsdGVyPVxmUlxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWZpbHRlcj1uYW1lIgorLlBECitXaGVuIGNyZWF0aW5nIGFuIFxzLTFFTEZcczAgc2hhcmVkIG9iamVjdCwgc2V0IHRoZSBpbnRlcm5hbCBccy0xRFRfRklMVEVSXHMwIGZpZWxkIHRvCit0aGUgc3BlY2lmaWVkIG5hbWUuICBUaGlzIHRlbGxzIHRoZSBkeW5hbWljIGxpbmtlciB0aGF0IHRoZSBzeW1ib2wgdGFibGUKK29mIHRoZSBzaGFyZWQgb2JqZWN0IHdoaWNoIGlzIGJlaW5nIGNyZWF0ZWQgc2hvdWxkIGJlIHVzZWQgYXMgYSBmaWx0ZXIKK29uIHRoZSBzeW1ib2wgdGFibGUgb2YgdGhlIHNoYXJlZCBvYmplY3QgXGZJbmFtZVxmUi4KKy5TcAorSWYgeW91IGxhdGVyIGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgdGhpcyBmaWx0ZXIgb2JqZWN0LCB0aGVuLCB3aGVuIHlvdQorcnVuIHRoZSBwcm9ncmFtLCB0aGUgZHluYW1pYyBsaW5rZXIgd2lsbCBzZWUgdGhlIFxzLTFEVF9GSUxURVJcczAgZmllbGQuICBUaGUKK2R5bmFtaWMgbGlua2VyIHdpbGwgcmVzb2x2ZSBzeW1ib2xzIGFjY29yZGluZyB0byB0aGUgc3ltYm9sIHRhYmxlIG9mIHRoZQorZmlsdGVyIG9iamVjdCBhcyB1c3VhbCwgYnV0IGl0IHdpbGwgYWN0dWFsbHkgbGluayB0byB0aGUgZGVmaW5pdGlvbnMKK2ZvdW5kIGluIHRoZSBzaGFyZWQgb2JqZWN0IFxmSW5hbWVcZlIuICBUaHVzIHRoZSBmaWx0ZXIgb2JqZWN0IGNhbiBiZQordXNlZCB0byBzZWxlY3QgYSBzdWJzZXQgb2YgdGhlIHN5bWJvbHMgcHJvdmlkZWQgYnkgdGhlIG9iamVjdAorXCZcZkluYW1lXGZSLgorLlNwCitTb21lIG9sZGVyIGxpbmtlcnMgdXNlZCB0aGUgXGZCXC1GXGZSIG9wdGlvbiB0aHJvdWdob3V0IGEgY29tcGlsYXRpb24KK3Rvb2xjaGFpbiBmb3Igc3BlY2lmeWluZyBvYmplY3QtZmlsZSBmb3JtYXQgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dAorb2JqZWN0IGZpbGVzLgorVGhlIFxzLTFHTlVcczAgbGlua2VyIHVzZXMgb3RoZXIgbWVjaGFuaXNtcyBmb3IgdGhpcyBwdXJwb3NlOiB0aGUKK1wmXGZCXC1iXGZSLCBcZkJcLVwtZm9ybWF0XGZSLCBcZkJcLVwtb2Zvcm1hdFxmUiBvcHRpb25zLCB0aGUKK1wmXGYoQ1dcKihDYFRBUkdFVFwqKEMnXGZSIGNvbW1hbmQgaW4gbGlua2VyIHNjcmlwdHMsIGFuZCB0aGUgXGYoQ1dcKihDYEdOVVRBUkdFVFwqKEMnXGZSCitlbnZpcm9ubWVudCB2YXJpYWJsZS4KK1RoZSBccy0xR05VXHMwIGxpbmtlciB3aWxsIGlnbm9yZSB0aGUgXGZCXC1GXGZSIG9wdGlvbiB3aGVuIG5vdAorY3JlYXRpbmcgYW4gXHMtMUVMRlxzMCBzaGFyZWQgb2JqZWN0LgorLklQICJcZkJcLWZpbmk9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1maW5pPW5hbWUiCitXaGVuIGNyZWF0aW5nIGFuIFxzLTFFTEZcczAgZXhlY3V0YWJsZSBvciBzaGFyZWQgb2JqZWN0LCBjYWxsIFxzLTFOQU1FXHMwIHdoZW4gdGhlCitleGVjdXRhYmxlIG9yIHNoYXJlZCBvYmplY3QgaXMgdW5sb2FkZWQsIGJ5IHNldHRpbmcgXHMtMURUX0ZJTklcczAgdG8gdGhlCithZGRyZXNzIG9mIHRoZSBmdW5jdGlvbi4gIEJ5IGRlZmF1bHQsIHRoZSBsaW5rZXIgdXNlcyBcZihDV1wqKENgX2ZpbmlcKihDJ1xmUiBhcwordGhlIGZ1bmN0aW9uIHRvIGNhbGwuCisuSVAgIlxmQlwtZ1xmUiIgNAorLklYIEl0ZW0gIi1nIgorSWdub3JlZC4gIFByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgdG9vbHMuCisuSVAgIlxmQlwtR1xmUiBcZkl2YWx1ZVxmUiIgNAorLklYIEl0ZW0gIi1HIHZhbHVlIgorLlBEIDAKKy5JUCAiXGZCXC1cLWdwc2l6ZT1cZlJcZkl2YWx1ZVxmUiIgNAorLklYIEl0ZW0gIi0tZ3BzaXplPXZhbHVlIgorLlBECitTZXQgdGhlIG1heGltdW0gc2l6ZSBvZiBvYmplY3RzIHRvIGJlIG9wdGltaXplZCB1c2luZyB0aGUgXHMtMUdQXHMwIHJlZ2lzdGVyIHRvCitcJlxmSXNpemVcZlIuICBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3Igb2JqZWN0IGZpbGUgZm9ybWF0cyBzdWNoIGFzCitcJlxzLTFNSVBTXHMwIFxzLTFFQ09GRlxzMCB3aGljaCBzdXBwb3J0cyBwdXR0aW5nIGxhcmdlIGFuZCBzbWFsbCBvYmplY3RzIGludG8gZGlmZmVyZW50CitzZWN0aW9ucy4gIFRoaXMgaXMgaWdub3JlZCBmb3Igb3RoZXIgb2JqZWN0IGZpbGUgZm9ybWF0cy4KKy5JUCAiXGZCXC1oXGZSIFxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItaCBuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1zb25hbWU9XGZSXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1zb25hbWU9bmFtZSIKKy5QRAorV2hlbiBjcmVhdGluZyBhbiBccy0xRUxGXHMwIHNoYXJlZCBvYmplY3QsIHNldCB0aGUgaW50ZXJuYWwgXHMtMURUX1NPTkFNRVxzMCBmaWVsZCB0bwordGhlIHNwZWNpZmllZCBuYW1lLiAgV2hlbiBhbiBleGVjdXRhYmxlIGlzIGxpbmtlZCB3aXRoIGEgc2hhcmVkIG9iamVjdAord2hpY2ggaGFzIGEgXHMtMURUX1NPTkFNRVxzMCBmaWVsZCwgdGhlbiB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIHJ1biB0aGUgZHluYW1pYworbGlua2VyIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHRoZSBzaGFyZWQgb2JqZWN0IHNwZWNpZmllZCBieSB0aGUgXHMtMURUX1NPTkFNRVxzMAorZmllbGQgcmF0aGVyIHRoYW4gdGhlIHVzaW5nIHRoZSBmaWxlIG5hbWUgZ2l2ZW4gdG8gdGhlIGxpbmtlci4KKy5JUCAiXGZCXC1pXGZSIiA0CisuSVggSXRlbSAiLWkiCitQZXJmb3JtIGFuIGluY3JlbWVudGFsIGxpbmsgKHNhbWUgYXMgb3B0aW9uIFxmQlwtclxmUikuCisuSVAgIlxmQlwtaW5pdD1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLWluaXQ9bmFtZSIKK1doZW4gY3JlYXRpbmcgYW4gXHMtMUVMRlxzMCBleGVjdXRhYmxlIG9yIHNoYXJlZCBvYmplY3QsIGNhbGwgXHMtMU5BTUVcczAgd2hlbiB0aGUKK2V4ZWN1dGFibGUgb3Igc2hhcmVkIG9iamVjdCBpcyBsb2FkZWQsIGJ5IHNldHRpbmcgXHMtMURUX0lOSVRcczAgdG8gdGhlIGFkZHJlc3MKK29mIHRoZSBmdW5jdGlvbi4gIEJ5IGRlZmF1bHQsIHRoZSBsaW5rZXIgdXNlcyBcZihDV1wqKENgX2luaXRcKihDJ1xmUiBhcyB0aGUKK2Z1bmN0aW9uIHRvIGNhbGwuCisuSVAgIlxmQlwtbFxmUiBcZkluYW1lc3BlY1xmUiIgNAorLklYIEl0ZW0gIi1sIG5hbWVzcGVjIgorLlBEIDAKKy5JUCAiXGZCXC1cLWxpYnJhcnk9XGZSXGZJbmFtZXNwZWNcZlIiIDQKKy5JWCBJdGVtICItLWxpYnJhcnk9bmFtZXNwZWMiCisuUEQKK0FkZCB0aGUgYXJjaGl2ZSBvciBvYmplY3QgZmlsZSBzcGVjaWZpZWQgYnkgXGZJbmFtZXNwZWNcZlIgdG8gdGhlCitsaXN0IG9mIGZpbGVzIHRvIGxpbmsuICBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBhbnkgbnVtYmVyIG9mIHRpbWVzLgorSWYgXGZJbmFtZXNwZWNcZlIgaXMgb2YgdGhlIGZvcm0gXGZJOlxmSWZpbGVuYW1lXGZJXGZSLCBcZkJsZFxmUgord2lsbCBzZWFyY2ggdGhlIGxpYnJhcnkgcGF0aCBmb3IgYSBmaWxlIGNhbGxlZCBcZklmaWxlbmFtZVxmUiwgb3RoZXJ3aXNlIGl0Cit3aWxsIHNlYXJjaCB0aGUgbGlicmFyeSBwYXRoIGZvciBhIGZpbGUgY2FsbGVkIFxmSWxpYlxmSW5hbWVzcGVjXGZJLmFcZlIuCisuU3AKK09uIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzLCBcZkJsZFxmUiBtYXkgYWxzbyBzZWFyY2ggZm9yCitmaWxlcyBvdGhlciB0aGFuIFxmSWxpYlxmSW5hbWVzcGVjXGZJLmFcZlIuICBTcGVjaWZpY2FsbHksIG9uIFxzLTFFTEZcczAKK2FuZCBTdW5PUyBzeXN0ZW1zLCBcZkJsZFxmUiB3aWxsIHNlYXJjaCBhIGRpcmVjdG9yeSBmb3IgYSBsaWJyYXJ5CitjYWxsZWQgXGZJbGliXGZJbmFtZXNwZWNcZkkuc29cZlIgYmVmb3JlIHNlYXJjaGluZyBmb3Igb25lIGNhbGxlZAorXCZcZklsaWJcZkluYW1lc3BlY1xmSS5hXGZSLiAgKEJ5IGNvbnZlbnRpb24sIGEgXGYoQ1dcKihDYC5zb1wqKEMnXGZSIGV4dGVuc2lvbgoraW5kaWNhdGVzIGEgc2hhcmVkIGxpYnJhcnkuKSAgTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgZG9lcyBub3QgYXBwbHkKK3RvIFxmSTpcZklmaWxlbmFtZVxmSVxmUiwgd2hpY2ggYWx3YXlzIHNwZWNpZmllcyBhIGZpbGUgY2FsbGVkCitcJlxmSWZpbGVuYW1lXGZSLgorLlNwCitUaGUgbGlua2VyIHdpbGwgc2VhcmNoIGFuIGFyY2hpdmUgb25seSBvbmNlLCBhdCB0aGUgbG9jYXRpb24gd2hlcmUgaXQgaXMKK3NwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSWYgdGhlIGFyY2hpdmUgZGVmaW5lcyBhIHN5bWJvbCB3aGljaAord2FzIHVuZGVmaW5lZCBpbiBzb21lIG9iamVjdCB3aGljaCBhcHBlYXJlZCBiZWZvcmUgdGhlIGFyY2hpdmUgb24gdGhlCitjb21tYW5kIGxpbmUsIHRoZSBsaW5rZXIgd2lsbCBpbmNsdWRlIHRoZSBhcHByb3ByaWF0ZSBmaWxlKHMpIGZyb20gdGhlCithcmNoaXZlLiAgSG93ZXZlciwgYW4gdW5kZWZpbmVkIHN5bWJvbCBpbiBhbiBvYmplY3QgYXBwZWFyaW5nIGxhdGVyIG9uCit0aGUgY29tbWFuZCBsaW5lIHdpbGwgbm90IGNhdXNlIHRoZSBsaW5rZXIgdG8gc2VhcmNoIHRoZSBhcmNoaXZlIGFnYWluLgorLlNwCitTZWUgdGhlIFxmQlwtKFxmUiBvcHRpb24gZm9yIGEgd2F5IHRvIGZvcmNlIHRoZSBsaW5rZXIgdG8gc2VhcmNoCithcmNoaXZlcyBtdWx0aXBsZSB0aW1lcy4KKy5TcAorWW91IG1heSBsaXN0IHRoZSBzYW1lIGFyY2hpdmUgbXVsdGlwbGUgdGltZXMgb24gdGhlIGNvbW1hbmQgbGluZS4KKy5TcAorVGhpcyB0eXBlIG9mIGFyY2hpdmUgc2VhcmNoaW5nIGlzIHN0YW5kYXJkIGZvciBVbml4IGxpbmtlcnMuICBIb3dldmVyLAoraWYgeW91IGFyZSB1c2luZyBcZkJsZFxmUiBvbiBccy0xQUlYXHMwLCBub3RlIHRoYXQgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlCitiZWhhdmlvdXIgb2YgdGhlIFxzLTFBSVhcczAgbGlua2VyLgorLklQICJcZkJcLUxcZlIgXGZJc2VhcmNoZGlyXGZSIiA0CisuSVggSXRlbSAiLUwgc2VhcmNoZGlyIgorLlBEIDAKKy5JUCAiXGZCXC1cLWxpYnJhcnlcLXBhdGg9XGZSXGZJc2VhcmNoZGlyXGZSIiA0CisuSVggSXRlbSAiLS1saWJyYXJ5LXBhdGg9c2VhcmNoZGlyIgorLlBECitBZGQgcGF0aCBcZklzZWFyY2hkaXJcZlIgdG8gdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCBcZkJsZFxmUiB3aWxsIHNlYXJjaAorZm9yIGFyY2hpdmUgbGlicmFyaWVzIGFuZCBcZkJsZFxmUiBjb250cm9sIHNjcmlwdHMuICBZb3UgbWF5IHVzZSB0aGlzCitvcHRpb24gYW55IG51bWJlciBvZiB0aW1lcy4gIFRoZSBkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQgaW4gdGhlIG9yZGVyCitpbiB3aGljaCB0aGV5IGFyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIERpcmVjdG9yaWVzIHNwZWNpZmllZAorb24gdGhlIGNvbW1hbmQgbGluZSBhcmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBkZWZhdWx0IGRpcmVjdG9yaWVzLiAgQWxsCitcJlxmQlwtTFxmUiBvcHRpb25zIGFwcGx5IHRvIGFsbCBcZkJcLWxcZlIgb3B0aW9ucywgcmVnYXJkbGVzcyBvZiB0aGUKK29yZGVyIGluIHdoaWNoIHRoZSBvcHRpb25zIGFwcGVhci4gIFxmQlwtTFxmUiBvcHRpb25zIGRvIG5vdCBhZmZlY3QKK2hvdyBcZkJsZFxmUiBzZWFyY2hlcyBmb3IgYSBsaW5rZXIgc2NyaXB0IHVubGVzcyBcZkJcLVRcZlIKK29wdGlvbiBpcyBzcGVjaWZpZWQuCisuU3AKK0lmIFxmSXNlYXJjaGRpclxmUiBiZWdpbnMgd2l0aCBcZihDV1wqKENgPVwqKEMnXGZSLCB0aGVuIHRoZSBcZihDV1wqKENgPVwqKEMnXGZSIHdpbGwgYmUgcmVwbGFjZWQKK2J5IHRoZSBcZklzeXNyb290IHByZWZpeFxmUiwgYSBwYXRoIHNwZWNpZmllZCB3aGVuIHRoZSBsaW5rZXIgaXMgY29uZmlndXJlZC4KKy5TcAorVGhlIGRlZmF1bHQgc2V0IG9mIHBhdGhzIHNlYXJjaGVkICh3aXRob3V0IGJlaW5nIHNwZWNpZmllZCB3aXRoCitcJlxmQlwtTFxmUikgZGVwZW5kcyBvbiB3aGljaCBlbXVsYXRpb24gbW9kZSBcZkJsZFxmUiBpcyB1c2luZywgYW5kIGluCitzb21lIGNhc2VzIGFsc28gb24gaG93IGl0IHdhcyBjb25maWd1cmVkLgorLlNwCitUaGUgcGF0aHMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluIGEgbGluayBzY3JpcHQgd2l0aCB0aGUKK1wmXGYoQ1dcKihDYFNFQVJDSF9ESVJcKihDJ1xmUiBjb21tYW5kLiAgRGlyZWN0b3JpZXMgc3BlY2lmaWVkIHRoaXMgd2F5IGFyZSBzZWFyY2hlZAorYXQgdGhlIHBvaW50IGluIHdoaWNoIHRoZSBsaW5rZXIgc2NyaXB0IGFwcGVhcnMgaW4gdGhlIGNvbW1hbmQgbGluZS4KKy5JUCAiXGZCXC1tXGZSIFxmSWVtdWxhdGlvblxmUiIgNAorLklYIEl0ZW0gIi1tIGVtdWxhdGlvbiIKK0VtdWxhdGUgdGhlIFxmSWVtdWxhdGlvblxmUiBsaW5rZXIuICBZb3UgY2FuIGxpc3QgdGhlIGF2YWlsYWJsZQorZW11bGF0aW9ucyB3aXRoIHRoZSBcZkJcLVwtdmVyYm9zZVxmUiBvciBcZkJcLVZcZlIgb3B0aW9ucy4KKy5TcAorSWYgdGhlIFxmQlwtbVxmUiBvcHRpb24gaXMgbm90IHVzZWQsIHRoZSBlbXVsYXRpb24gaXMgdGFrZW4gZnJvbSB0aGUKK1wmXGYoQ1dcKihDYExERU1VTEFUSU9OXCooQydcZlIgZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHRoYXQgaXMgZGVmaW5lZC4KKy5TcAorT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBlbXVsYXRpb24gZGVwZW5kcyB1cG9uIGhvdyB0aGUgbGlua2VyIHdhcworY29uZmlndXJlZC4KKy5JUCAiXGZCXC1NXGZSIiA0CisuSVggSXRlbSAiLU0iCisuUEQgMAorLklQICJcZkJcLVwtcHJpbnRcLW1hcFxmUiIgNAorLklYIEl0ZW0gIi0tcHJpbnQtbWFwIgorLlBECitQcmludCBhIGxpbmsgbWFwIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBBIGxpbmsgbWFwIHByb3ZpZGVzCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGluaywgaW5jbHVkaW5nIHRoZSBmb2xsb3dpbmc6CisuUlMgNAorLklQICJcKGJ1IiA0CitXaGVyZSBvYmplY3QgZmlsZXMgYXJlIG1hcHBlZCBpbnRvIG1lbW9yeS4KKy5JUCAiXChidSIgNAorSG93IGNvbW1vbiBzeW1ib2xzIGFyZSBhbGxvY2F0ZWQuCisuSVAgIlwoYnUiIDQKK0FsbCBhcmNoaXZlIG1lbWJlcnMgaW5jbHVkZWQgaW4gdGhlIGxpbmssIHdpdGggYSBtZW50aW9uIG9mIHRoZSBzeW1ib2wKK3doaWNoIGNhdXNlZCB0aGUgYXJjaGl2ZSBtZW1iZXIgdG8gYmUgYnJvdWdodCBpbi4KKy5JUCAiXChidSIgNAorVGhlIHZhbHVlcyBhc3NpZ25lZCB0byBzeW1ib2xzLgorLlNwCitOb3RlIFwtIHN5bWJvbHMgd2hvc2UgdmFsdWVzIGFyZSBjb21wdXRlZCBieSBhbiBleHByZXNzaW9uIHdoaWNoCitpbnZvbHZlcyBhIHJlZmVyZW5jZSB0byBhIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBzYW1lIHN5bWJvbCBtYXkgbm90CitoYXZlIGNvcnJlY3QgcmVzdWx0IGRpc3BsYXllZCBpbiB0aGUgbGluayBtYXAuICBUaGlzIGlzIGJlY2F1c2UgdGhlCitsaW5rZXIgZGlzY2FyZHMgaW50ZXJtZWRpYXRlIHJlc3VsdHMgYW5kIG9ubHkgcmV0YWlucyB0aGUgZmluYWwgdmFsdWUKK29mIGFuIGV4cHJlc3Npb24uICBVbmRlciBzdWNoIGNpcmN1bXN0YW5jZXMgdGhlIGxpbmtlciB3aWxsIGRpc3BsYXkKK3RoZSBmaW5hbCB2YWx1ZSBlbmNsb3NlZCBieSBzcXVhcmUgYnJhY2tldHMuICBUaHVzIGZvciBleGFtcGxlIGEKK2xpbmtlciBzY3JpcHQgY29udGFpbmluZzoKKy5TcAorLlZiIDMKK1wmICAgICAgICAgICBmb28gPSAxCitcJiAgICAgICAgICAgZm9vID0gZm9vICogNAorXCYgICAgICAgICAgIGZvbyA9IGZvbyArIDgKKy5WZQorLlNwCit3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBvdXRwdXQgaW4gdGhlIGxpbmsgbWFwIGlmIHRoZSBcZkJcLU1cZlIKK29wdGlvbiBpcyB1c2VkOgorLlNwCisuVmIgMworXCYgICAgICAgICAgIDB4MDAwMDAwMDEgICAgICAgICAgICAgICAgZm9vID0gMHgxCitcJiAgICAgICAgICAgWzB4MDAwMDAwMGNdICAgICAgICAgICAgICAgIGZvbyA9IChmb28gKiAweDQpCitcJiAgICAgICAgICAgWzB4MDAwMDAwMGNdICAgICAgICAgICAgICAgIGZvbyA9IChmb28gKyAweDgpCisuVmUKKy5TcAorU2VlIFxmQkV4cHJlc3Npb25zXGZSIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGV4cHJlc3Npb25zIGluIGxpbmtlcgorc2NyaXB0cy4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLW5cZlIiIDQKKy5JWCBJdGVtICItbiIKKy5QRCAwCisuSVAgIlxmQlwtXC1ubWFnaWNcZlIiIDQKKy5JWCBJdGVtICItLW5tYWdpYyIKKy5QRAorVHVybiBvZmYgcGFnZSBhbGlnbm1lbnQgb2Ygc2VjdGlvbnMsIGFuZCBkaXNhYmxlIGxpbmtpbmcgYWdhaW5zdCBzaGFyZWQKK2xpYnJhcmllcy4gIElmIHRoZSBvdXRwdXQgZm9ybWF0IHN1cHBvcnRzIFVuaXggc3R5bGUgbWFnaWMgbnVtYmVycywKK21hcmsgdGhlIG91dHB1dCBhcyBcZihDV1wqKENgTk1BR0lDXCooQydcZlIuCisuSVAgIlxmQlwtTlxmUiIgNAorLklYIEl0ZW0gIi1OIgorLlBEIDAKKy5JUCAiXGZCXC1cLW9tYWdpY1xmUiIgNAorLklYIEl0ZW0gIi0tb21hZ2ljIgorLlBECitTZXQgdGhlIHRleHQgYW5kIGRhdGEgc2VjdGlvbnMgdG8gYmUgcmVhZGFibGUgYW5kIHdyaXRhYmxlLiAgQWxzbywgZG8KK25vdCBwYWdlLWFsaWduIHRoZSBkYXRhIHNlZ21lbnQsIGFuZCBkaXNhYmxlIGxpbmtpbmcgYWdhaW5zdCBzaGFyZWQKK2xpYnJhcmllcy4gIElmIHRoZSBvdXRwdXQgZm9ybWF0IHN1cHBvcnRzIFVuaXggc3R5bGUgbWFnaWMgbnVtYmVycywKK21hcmsgdGhlIG91dHB1dCBhcyBcZihDV1wqKENgT01BR0lDXCooQydcZlIuIE5vdGU6IEFsdGhvdWdoIGEgd3JpdGFibGUgdGV4dCBzZWN0aW9uCitpcyBhbGxvd2VkIGZvciBQRS1DT0ZGIHRhcmdldHMsIGl0IGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIGZvcm1hdAorc3BlY2lmaWNhdGlvbiBwdWJsaXNoZWQgYnkgTWljcm9zb2Z0LgorLklQICJcZkJcLVwtbm9cLW9tYWdpY1xmUiIgNAorLklYIEl0ZW0gIi0tbm8tb21hZ2ljIgorVGhpcyBvcHRpb24gbmVnYXRlcyBtb3N0IG9mIHRoZSBlZmZlY3RzIG9mIHRoZSBcZkJcLU5cZlIgb3B0aW9uLiAgSXQKK3NldHMgdGhlIHRleHQgc2VjdGlvbiB0byBiZSByZWFkLW9ubHksIGFuZCBmb3JjZXMgdGhlIGRhdGEgc2VnbWVudCB0bworYmUgcGFnZS1hbGlnbmVkLiAgTm90ZSBcLSB0aGlzIG9wdGlvbiBkb2VzIG5vdCBlbmFibGUgbGlua2luZyBhZ2FpbnN0CitzaGFyZWQgbGlicmFyaWVzLiAgVXNlIFxmQlwtQmR5bmFtaWNcZlIgZm9yIHRoaXMuCisuSVAgIlxmQlwtb1xmUiBcZklvdXRwdXRcZlIiIDQKKy5JWCBJdGVtICItbyBvdXRwdXQiCisuUEQgMAorLklQICJcZkJcLVwtb3V0cHV0PVxmUlxmSW91dHB1dFxmUiIgNAorLklYIEl0ZW0gIi0tb3V0cHV0PW91dHB1dCIKKy5QRAorVXNlIFxmSW91dHB1dFxmUiBhcyB0aGUgbmFtZSBmb3IgdGhlIHByb2dyYW0gcHJvZHVjZWQgYnkgXGZCbGRcZlI7IGlmIHRoaXMKK29wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgbmFtZSBcZklhLm91dFxmUiBpcyB1c2VkIGJ5IGRlZmF1bHQuICBUaGUKK3NjcmlwdCBjb21tYW5kIFxmKENXXCooQ2BPVVRQVVRcKihDJ1xmUiBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZSBuYW1lLgorLklQICJcZkJcLU9cZlIgXGZJbGV2ZWxcZlIiIDQKKy5JWCBJdGVtICItTyBsZXZlbCIKK0lmIFxmSWxldmVsXGZSIGlzIGEgbnVtZXJpYyB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8gXGZCbGRcZlIgb3B0aW1pemVzCit0aGUgb3V0cHV0LiAgVGhpcyBtaWdodCB0YWtlIHNpZ25pZmljYW50bHkgbG9uZ2VyIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkKK3Nob3VsZCBvbmx5IGJlIGVuYWJsZWQgZm9yIHRoZSBmaW5hbCBiaW5hcnkuICBBdCB0aGUgbW9tZW50IHRoaXMKK29wdGlvbiBvbmx5IGFmZmVjdHMgXHMtMUVMRlxzMCBzaGFyZWQgbGlicmFyeSBnZW5lcmF0aW9uLiAgRnV0dXJlIHJlbGVhc2VzIG9mCit0aGUgbGlua2VyIG1heSBtYWtlIG1vcmUgdXNlIG9mIHRoaXMgb3B0aW9uLiAgQWxzbyBjdXJyZW50bHkgdGhlcmUgaXMKK25vIGRpZmZlcmVuY2UgaW4gdGhlIGxpbmtlcidzIGJlaGF2aW91ciBmb3IgZGlmZmVyZW50IG5vbi16ZXJvIHZhbHVlcworb2YgdGhpcyBvcHRpb24uICBBZ2FpbiB0aGlzIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgcmVsZWFzZXMuCisuSVAgIlxmQlwtcVxmUiIgNAorLklYIEl0ZW0gIi1xIgorLlBEIDAKKy5JUCAiXGZCXC1cLWVtaXRcLXJlbG9jc1xmUiIgNAorLklYIEl0ZW0gIi0tZW1pdC1yZWxvY3MiCisuUEQKK0xlYXZlIHJlbG9jYXRpb24gc2VjdGlvbnMgYW5kIGNvbnRlbnRzIGluIGZ1bGx5IGxpbmtlZCBleGVjdXRhYmxlcy4KK1Bvc3QgbGluayBhbmFseXNpcyBhbmQgb3B0aW1pemF0aW9uIHRvb2xzIG1heSBuZWVkIHRoaXMgaW5mb3JtYXRpb24gaW4KK29yZGVyIHRvIHBlcmZvcm0gY29ycmVjdCBtb2RpZmljYXRpb25zIG9mIGV4ZWN1dGFibGVzLiAgVGhpcyByZXN1bHRzCitpbiBsYXJnZXIgZXhlY3V0YWJsZXMuCisuU3AKK1RoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBvbiBccy0xRUxGXHMwIHBsYXRmb3Jtcy4KKy5JUCAiXGZCXC1cLWZvcmNlXC1keW5hbWljXGZSIiA0CisuSVggSXRlbSAiLS1mb3JjZS1keW5hbWljIgorRm9yY2UgdGhlIG91dHB1dCBmaWxlIHRvIGhhdmUgZHluYW1pYyBzZWN0aW9ucy4gIFRoaXMgb3B0aW9uIGlzIHNwZWNpZmljCit0byBWeFdvcmtzIHRhcmdldHMuCisuSVAgIlxmQlwtclxmUiIgNAorLklYIEl0ZW0gIi1yIgorLlBEIDAKKy5JUCAiXGZCXC1cLXJlbG9jYXRhYmxlXGZSIiA0CisuSVggSXRlbSAiLS1yZWxvY2F0YWJsZSIKKy5QRAorR2VuZXJhdGUgcmVsb2NhdGFibGUgb3V0cHV0XC1cLVwtaS5lLiwgZ2VuZXJhdGUgYW4gb3V0cHV0IGZpbGUgdGhhdCBjYW4gaW4KK3R1cm4gc2VydmUgYXMgaW5wdXQgdG8gXGZCbGRcZlIuICBUaGlzIGlzIG9mdGVuIGNhbGxlZCBcZklwYXJ0aWFsCitsaW5raW5nXGZSLiAgQXMgYSBzaWRlIGVmZmVjdCwgaW4gZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBzdGFuZGFyZCBVbml4CittYWdpYyBudW1iZXJzLCB0aGlzIG9wdGlvbiBhbHNvIHNldHMgdGhlIG91dHB1dCBmaWxlJ3MgbWFnaWMgbnVtYmVyIHRvCitcJlxmKENXXCooQ2BPTUFHSUNcKihDJ1xmUi4KK0lmIHRoaXMgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIGFuIGFic29sdXRlIGZpbGUgaXMgcHJvZHVjZWQuICBXaGVuCitsaW5raW5nIFwqKEMrIHByb2dyYW1zLCB0aGlzIG9wdGlvbiBcZkl3aWxsIG5vdFxmUiByZXNvbHZlIHJlZmVyZW5jZXMgdG8KK2NvbnN0cnVjdG9yczsgdG8gZG8gdGhhdCwgdXNlIFxmQlwtVXJcZlIuCisuU3AKK1doZW4gYW4gaW5wdXQgZmlsZSBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgb3V0cHV0IGZpbGUsCitwYXJ0aWFsIGxpbmtpbmcgaXMgb25seSBzdXBwb3J0ZWQgaWYgdGhhdCBpbnB1dCBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55CityZWxvY2F0aW9ucy4gIERpZmZlcmVudCBvdXRwdXQgZm9ybWF0cyBjYW4gaGF2ZSBmdXJ0aGVyIHJlc3RyaWN0aW9uczsgZm9yCitleGFtcGxlIHNvbWUgXGYoQ1dcKihDYGEub3V0XCooQydcZlJcLWJhc2VkIGZvcm1hdHMgZG8gbm90IHN1cHBvcnQgcGFydGlhbCBsaW5raW5nCit3aXRoIGlucHV0IGZpbGVzIGluIG90aGVyIGZvcm1hdHMgYXQgYWxsLgorLlNwCitUaGlzIG9wdGlvbiBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIFxmQlwtaVxmUi4KKy5JUCAiXGZCXC1SXGZSIFxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLVIgZmlsZW5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtanVzdFwtc3ltYm9scz1cZlJcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tanVzdC1zeW1ib2xzPWZpbGVuYW1lIgorLlBECitSZWFkIHN5bWJvbCBuYW1lcyBhbmQgdGhlaXIgYWRkcmVzc2VzIGZyb20gXGZJZmlsZW5hbWVcZlIsIGJ1dCBkbyBub3QKK3JlbG9jYXRlIGl0IG9yIGluY2x1ZGUgaXQgaW4gdGhlIG91dHB1dC4gIFRoaXMgYWxsb3dzIHlvdXIgb3V0cHV0IGZpbGUKK3RvIHJlZmVyIHN5bWJvbGljYWxseSB0byBhYnNvbHV0ZSBsb2NhdGlvbnMgb2YgbWVtb3J5IGRlZmluZWQgaW4gb3RoZXIKK3Byb2dyYW1zLiAgWW91IG1heSB1c2UgdGhpcyBvcHRpb24gbW9yZSB0aGFuIG9uY2UuCisuU3AKK0ZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgXHMtMUVMRlxzMCBsaW5rZXJzLCBpZiB0aGUgXGZCXC1SXGZSIG9wdGlvbiBpcworZm9sbG93ZWQgYnkgYSBkaXJlY3RvcnkgbmFtZSwgcmF0aGVyIHRoYW4gYSBmaWxlIG5hbWUsIGl0IGlzIHRyZWF0ZWQgYXMKK3RoZSBcZkJcLXJwYXRoXGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1zXGZSIiA0CisuSVggSXRlbSAiLXMiCisuUEQgMAorLklQICJcZkJcLVwtc3RyaXBcLWFsbFxmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtYWxsIgorLlBECitPbWl0IGFsbCBzeW1ib2wgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3V0cHV0IGZpbGUuCisuSVAgIlxmQlwtU1xmUiIgNAorLklYIEl0ZW0gIi1TIgorLlBEIDAKKy5JUCAiXGZCXC1cLXN0cmlwXC1kZWJ1Z1xmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtZGVidWciCisuUEQKK09taXQgZGVidWdnZXIgc3ltYm9sIGluZm9ybWF0aW9uIChidXQgbm90IGFsbCBzeW1ib2xzKSBmcm9tIHRoZSBvdXRwdXQgZmlsZS4KKy5JUCAiXGZCXC10XGZSIiA0CisuSVggSXRlbSAiLXQiCisuUEQgMAorLklQICJcZkJcLVwtdHJhY2VcZlIiIDQKKy5JWCBJdGVtICItLXRyYWNlIgorLlBECitQcmludCB0aGUgbmFtZXMgb2YgdGhlIGlucHV0IGZpbGVzIGFzIFxmQmxkXGZSIHByb2Nlc3NlcyB0aGVtLgorLklQICJcZkJcLVRcZlIgXGZJc2NyaXB0ZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1UIHNjcmlwdGZpbGUiCisuUEQgMAorLklQICJcZkJcLVwtc2NyaXB0PVxmUlxmSXNjcmlwdGZpbGVcZlIiIDQKKy5JWCBJdGVtICItLXNjcmlwdD1zY3JpcHRmaWxlIgorLlBECitVc2UgXGZJc2NyaXB0ZmlsZVxmUiBhcyB0aGUgbGlua2VyIHNjcmlwdC4gIFRoaXMgc2NyaXB0IHJlcGxhY2VzCitcJlxmQmxkXGZSJ3MgZGVmYXVsdCBsaW5rZXIgc2NyaXB0IChyYXRoZXIgdGhhbiBhZGRpbmcgdG8gaXQpLCBzbworXCZcZkljb21tYW5kZmlsZVxmUiBtdXN0IHNwZWNpZnkgZXZlcnl0aGluZyBuZWNlc3NhcnkgdG8gZGVzY3JpYmUgdGhlCitvdXRwdXQgZmlsZS4gICAgSWYgXGZJc2NyaXB0ZmlsZVxmUiBkb2VzIG5vdCBleGlzdCBpbgordGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBcZihDV1wqKENgbGRcKihDJ1xmUiBsb29rcyBmb3IgaXQgaW4gdGhlIGRpcmVjdG9yaWVzCitzcGVjaWZpZWQgYnkgYW55IHByZWNlZGluZyBcZkJcLUxcZlIgb3B0aW9ucy4gIE11bHRpcGxlIFxmQlwtVFxmUgorb3B0aW9ucyBhY2N1bXVsYXRlLgorLklQICJcZkJcLWRUXGZSIFxmSXNjcmlwdGZpbGVcZlIiIDQKKy5JWCBJdGVtICItZFQgc2NyaXB0ZmlsZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1kZWZhdWx0XC1zY3JpcHQ9XGZSXGZJc2NyaXB0ZmlsZVxmUiIgNAorLklYIEl0ZW0gIi0tZGVmYXVsdC1zY3JpcHQ9c2NyaXB0ZmlsZSIKKy5QRAorVXNlIFxmSXNjcmlwdGZpbGVcZlIgYXMgdGhlIGRlZmF1bHQgbGlua2VyIHNjcmlwdC4KKy5TcAorVGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byB0aGUgXGZCXC1cLXNjcmlwdFxmUiBvcHRpb24gZXhjZXB0IHRoYXQKK3Byb2Nlc3Npbmcgb2YgdGhlIHNjcmlwdCBpcyBkZWxheWVkIHVudGlsIGFmdGVyIHRoZSByZXN0IG9mIHRoZQorY29tbWFuZCBsaW5lIGhhcyBiZWVuIHByb2Nlc3NlZC4gIFRoaXMgYWxsb3dzIG9wdGlvbnMgcGxhY2VkIGFmdGVyIHRoZQorXCZcZkJcLVwtZGVmYXVsdFwtc2NyaXB0XGZSIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lIHRvIGFmZmVjdCB0aGUKK2JlaGF2aW91ciBvZiB0aGUgbGlua2VyIHNjcmlwdCwgd2hpY2ggY2FuIGJlIGltcG9ydGFudCB3aGVuIHRoZSBsaW5rZXIKK2NvbW1hbmQgbGluZSBjYW5ub3QgYmUgZGlyZWN0bHkgY29udHJvbGxlZCBieSB0aGUgdXNlci4gIChlZyBiZWNhdXNlCit0aGUgY29tbWFuZCBsaW5lIGlzIGJlaW5nIGNvbnN0cnVjdGVkIGJ5IGFub3RoZXIgdG9vbCwgc3VjaCBhcworXCZcZkJnY2NcZlIpLgorLklQICJcZkJcLXVcZlIgXGZJc3ltYm9sXGZSIiA0CisuSVggSXRlbSAiLXUgc3ltYm9sIgorLlBEIDAKKy5JUCAiXGZCXC1cLXVuZGVmaW5lZD1cZlJcZklzeW1ib2xcZlIiIDQKKy5JWCBJdGVtICItLXVuZGVmaW5lZD1zeW1ib2wiCisuUEQKK0ZvcmNlIFxmSXN5bWJvbFxmUiB0byBiZSBlbnRlcmVkIGluIHRoZSBvdXRwdXQgZmlsZSBhcyBhbiB1bmRlZmluZWQKK3N5bWJvbC4gIERvaW5nIHRoaXMgbWF5LCBmb3IgZXhhbXBsZSwgdHJpZ2dlciBsaW5raW5nIG9mIGFkZGl0aW9uYWwKK21vZHVsZXMgZnJvbSBzdGFuZGFyZCBsaWJyYXJpZXMuICBcZkJcLXVcZlIgbWF5IGJlIHJlcGVhdGVkIHdpdGgKK2RpZmZlcmVudCBvcHRpb24gYXJndW1lbnRzIHRvIGVudGVyIGFkZGl0aW9uYWwgdW5kZWZpbmVkIHN5bWJvbHMuICBUaGlzCitvcHRpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgXGYoQ1dcKihDYEVYVEVSTlwqKEMnXGZSIGxpbmtlciBzY3JpcHQgY29tbWFuZC4KKy5JUCAiXGZCXC1VclxmUiIgNAorLklYIEl0ZW0gIi1VciIKK0ZvciBhbnl0aGluZyBvdGhlciB0aGFuIFwqKEMrIHByb2dyYW1zLCB0aGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvCitcJlxmQlwtclxmUjogaXQgZ2VuZXJhdGVzIHJlbG9jYXRhYmxlIG91dHB1dFwtXC1cLWkuZS4sIGFuIG91dHB1dCBmaWxlIHRoYXQgY2FuIGluCit0dXJuIHNlcnZlIGFzIGlucHV0IHRvIFxmQmxkXGZSLiAgV2hlbiBsaW5raW5nIFwqKEMrIHByb2dyYW1zLCBcZkJcLVVyXGZSCitcJlxmSWRvZXNcZlIgcmVzb2x2ZSByZWZlcmVuY2VzIHRvIGNvbnN0cnVjdG9ycywgdW5saWtlIFxmQlwtclxmUi4KK0l0IGRvZXMgbm90IHdvcmsgdG8gdXNlIFxmQlwtVXJcZlIgb24gZmlsZXMgdGhhdCB3ZXJlIHRoZW1zZWx2ZXMgbGlua2VkCit3aXRoIFxmQlwtVXJcZlI7IG9uY2UgdGhlIGNvbnN0cnVjdG9yIHRhYmxlIGhhcyBiZWVuIGJ1aWx0LCBpdCBjYW5ub3QKK2JlIGFkZGVkIHRvLiAgVXNlIFxmQlwtVXJcZlIgb25seSBmb3IgdGhlIGxhc3QgcGFydGlhbCBsaW5rLCBhbmQKK1wmXGZCXC1yXGZSIGZvciB0aGUgb3RoZXJzLgorLklQICJcZkJcLVwtdW5pcXVlWz1cZlJcZklccy0xU0VDVElPTlxzMFxmUlxmQl1cZlIiIDQKKy5JWCBJdGVtICItLXVuaXF1ZVs9U0VDVElPTl0iCitDcmVhdGVzIGEgc2VwYXJhdGUgb3V0cHV0IHNlY3Rpb24gZm9yIGV2ZXJ5IGlucHV0IHNlY3Rpb24gbWF0Y2hpbmcKK1wmXGZJXHMtMVNFQ1RJT05cczBcZlIsIG9yIGlmIHRoZSBvcHRpb25hbCB3aWxkY2FyZCBcZklccy0xU0VDVElPTlxzMFxmUiBhcmd1bWVudCBpcworbWlzc2luZywgZm9yIGV2ZXJ5IG9ycGhhbiBpbnB1dCBzZWN0aW9uLiAgQW4gb3JwaGFuIHNlY3Rpb24gaXMgb25lIG5vdAorc3BlY2lmaWNhbGx5IG1lbnRpb25lZCBpbiBhIGxpbmtlciBzY3JpcHQuICBZb3UgbWF5IHVzZSB0aGlzIG9wdGlvbgorbXVsdGlwbGUgdGltZXMgb24gdGhlIGNvbW1hbmQgbGluZTsgIEl0IHByZXZlbnRzIHRoZSBub3JtYWwgbWVyZ2luZyBvZgoraW5wdXQgc2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lLCBvdmVycmlkaW5nIG91dHB1dCBzZWN0aW9uIGFzc2lnbm1lbnRzCitpbiBhIGxpbmtlciBzY3JpcHQuCisuSVAgIlxmQlwtdlxmUiIgNAorLklYIEl0ZW0gIi12IgorLlBEIDAKKy5JUCAiXGZCXC1cLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24iCisuSVAgIlxmQlwtVlxmUiIgNAorLklYIEl0ZW0gIi1WIgorLlBECitEaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBmb3IgXGZCbGRcZlIuICBUaGUgXGZCXC1WXGZSIG9wdGlvbiBhbHNvCitsaXN0cyB0aGUgc3VwcG9ydGVkIGVtdWxhdGlvbnMuCisuSVAgIlxmQlwteFxmUiIgNAorLklYIEl0ZW0gIi14IgorLlBEIDAKKy5JUCAiXGZCXC1cLWRpc2NhcmRcLWFsbFxmUiIgNAorLklYIEl0ZW0gIi0tZGlzY2FyZC1hbGwiCisuUEQKK0RlbGV0ZSBhbGwgbG9jYWwgc3ltYm9scy4KKy5JUCAiXGZCXC1YXGZSIiA0CisuSVggSXRlbSAiLVgiCisuUEQgMAorLklQICJcZkJcLVwtZGlzY2FyZFwtbG9jYWxzXGZSIiA0CisuSVggSXRlbSAiLS1kaXNjYXJkLWxvY2FscyIKKy5QRAorRGVsZXRlIGFsbCB0ZW1wb3JhcnkgbG9jYWwgc3ltYm9scy4gIChUaGVzZSBzeW1ib2xzIHN0YXJ0IHdpdGgKK3N5c3RlbS1zcGVjaWZpYyBsb2NhbCBsYWJlbCBwcmVmaXhlcywgdHlwaWNhbGx5IFxmQi5MXGZSIGZvciBccy0xRUxGXHMwIHN5c3RlbXMKK29yIFxmQkxcZlIgZm9yIHRyYWRpdGlvbmFsIGEub3V0IHN5c3RlbXMuKQorLklQICJcZkJcLXlcZlIgXGZJc3ltYm9sXGZSIiA0CisuSVggSXRlbSAiLXkgc3ltYm9sIgorLlBEIDAKKy5JUCAiXGZCXC1cLXRyYWNlXC1zeW1ib2w9XGZSXGZJc3ltYm9sXGZSIiA0CisuSVggSXRlbSAiLS10cmFjZS1zeW1ib2w9c3ltYm9sIgorLlBECitQcmludCB0aGUgbmFtZSBvZiBlYWNoIGxpbmtlZCBmaWxlIGluIHdoaWNoIFxmSXN5bWJvbFxmUiBhcHBlYXJzLiAgVGhpcworb3B0aW9uIG1heSBiZSBnaXZlbiBhbnkgbnVtYmVyIG9mIHRpbWVzLiAgT24gbWFueSBzeXN0ZW1zIGl0IGlzIG5lY2Vzc2FyeQordG8gcHJlcGVuZCBhbiB1bmRlcnNjb3JlLgorLlNwCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3UgaGF2ZSBhbiB1bmRlZmluZWQgc3ltYm9sIGluIHlvdXIgbGluayBidXQKK2Rvbid0IGtub3cgd2hlcmUgdGhlIHJlZmVyZW5jZSBpcyBjb21pbmcgZnJvbS4KKy5JUCAiXGZCXC1ZXGZSIFxmSXBhdGhcZlIiIDQKKy5JWCBJdGVtICItWSBwYXRoIgorQWRkIFxmSXBhdGhcZlIgdG8gdGhlIGRlZmF1bHQgbGlicmFyeSBzZWFyY2ggcGF0aC4gIFRoaXMgb3B0aW9uIGV4aXN0cworZm9yIFNvbGFyaXMgY29tcGF0aWJpbGl0eS4KKy5JUCAiXGZCXC16XGZSIFxmSWtleXdvcmRcZlIiIDQKKy5JWCBJdGVtICIteiBrZXl3b3JkIgorVGhlIHJlY29nbml6ZWQga2V5d29yZHMgYXJlOgorLlJTIDQKKy5JUCAiXGZCY29tYnJlbG9jXGZSIiA0CisuSVggSXRlbSAiY29tYnJlbG9jIgorQ29tYmluZXMgbXVsdGlwbGUgcmVsb2Mgc2VjdGlvbnMgYW5kIHNvcnRzIHRoZW0gdG8gbWFrZSBkeW5hbWljIHN5bWJvbAorbG9va3VwIGNhY2hpbmcgcG9zc2libGUuCisuSVAgIlxmQmRlZnNcZlIiIDQKKy5JWCBJdGVtICJkZWZzIgorRGlzYWxsb3dzIHVuZGVmaW5lZCBzeW1ib2xzIGluIG9iamVjdCBmaWxlcy4gIFVuZGVmaW5lZCBzeW1ib2xzIGluCitzaGFyZWQgbGlicmFyaWVzIGFyZSBzdGlsbCBhbGxvd2VkLgorLklQICJcZkJleGVjc3RhY2tcZlIiIDQKKy5JWCBJdGVtICJleGVjc3RhY2siCitNYXJrcyB0aGUgb2JqZWN0IGFzIHJlcXVpcmluZyBleGVjdXRhYmxlIHN0YWNrLgorLklQICJcZkJpbml0Zmlyc3RcZlIiIDQKKy5JWCBJdGVtICJpbml0Zmlyc3QiCitUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgd2hlbiBidWlsZGluZyBhIHNoYXJlZCBvYmplY3QuCitJdCBtYXJrcyB0aGUgb2JqZWN0IHNvIHRoYXQgaXRzIHJ1bnRpbWUgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1cgorYmVmb3JlIHRoZSBydW50aW1lIGluaXRpYWxpemF0aW9uIG9mIGFueSBvdGhlciBvYmplY3RzIGJyb3VnaHQgaW50bwordGhlIHByb2Nlc3MgYXQgdGhlIHNhbWUgdGltZS4gIFNpbWlsYXJseSB0aGUgcnVudGltZSBmaW5hbGl6YXRpb24gb2YKK3RoZSBvYmplY3Qgd2lsbCBvY2N1ciBhZnRlciB0aGUgcnVudGltZSBmaW5hbGl6YXRpb24gb2YgYW55IG90aGVyCitvYmplY3RzLgorLklQICJcZkJpbnRlcnBvc2VcZlIiIDQKKy5JWCBJdGVtICJpbnRlcnBvc2UiCitNYXJrcyB0aGUgb2JqZWN0IHRoYXQgaXRzIHN5bWJvbCB0YWJsZSBpbnRlcnBvc2VzIGJlZm9yZSBhbGwgc3ltYm9scworYnV0IHRoZSBwcmltYXJ5IGV4ZWN1dGFibGUuCisuSVAgIlxmQmxhenlcZlIiIDQKKy5JWCBJdGVtICJsYXp5IgorV2hlbiBnZW5lcmF0aW5nIGFuIGV4ZWN1dGFibGUgb3Igc2hhcmVkIGxpYnJhcnksIG1hcmsgaXQgdG8gdGVsbCB0aGUKK2R5bmFtaWMgbGlua2VyIHRvIGRlZmVyIGZ1bmN0aW9uIGNhbGwgcmVzb2x1dGlvbiB0byB0aGUgcG9pbnQgd2hlbgordGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCAobGF6eSBiaW5kaW5nKSwgcmF0aGVyIHRoYW4gYXQgbG9hZCB0aW1lLgorTGF6eSBiaW5kaW5nIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJsb2FkZmx0clxmUiIgNAorLklYIEl0ZW0gImxvYWRmbHRyIgorTWFya3MgIHRoZSBvYmplY3QgdGhhdCBpdHMgZmlsdGVycyBiZSBwcm9jZXNzZWQgaW1tZWRpYXRlbHkgYXQKK3J1bnRpbWUuCisuSVAgIlxmQm11bGRlZnNcZlIiIDQKKy5JWCBJdGVtICJtdWxkZWZzIgorQWxsb3dzIG11bHRpcGxlIGRlZmluaXRpb25zLgorLklQICJcZkJub2NvbWJyZWxvY1xmUiIgNAorLklYIEl0ZW0gIm5vY29tYnJlbG9jIgorRGlzYWJsZXMgbXVsdGlwbGUgcmVsb2Mgc2VjdGlvbnMgY29tYmluaW5nLgorLklQICJcZkJub2NvcHlyZWxvY1xmUiIgNAorLklYIEl0ZW0gIm5vY29weXJlbG9jIgorRGlzYWJsZXMgcHJvZHVjdGlvbiBvZiBjb3B5IHJlbG9jcy4KKy5JUCAiXGZCbm9kZWZhdWx0bGliXGZSIiA0CisuSVggSXRlbSAibm9kZWZhdWx0bGliIgorTWFya3MgdGhlIG9iamVjdCB0aGF0IHRoZSBzZWFyY2ggZm9yIGRlcGVuZGVuY2llcyBvZiB0aGlzIG9iamVjdCB3aWxsCitpZ25vcmUgYW55IGRlZmF1bHQgbGlicmFyeSBzZWFyY2ggcGF0aHMuCisuSVAgIlxmQm5vZGVsZXRlXGZSIiA0CisuSVggSXRlbSAibm9kZWxldGUiCitNYXJrcyB0aGUgb2JqZWN0IHNob3VsZG4ndCBiZSB1bmxvYWRlZCBhdCBydW50aW1lLgorLklQICJcZkJub2Rsb3BlblxmUiIgNAorLklYIEl0ZW0gIm5vZGxvcGVuIgorTWFya3MgdGhlIG9iamVjdCBub3QgYXZhaWxhYmxlIHRvIFxmKENXXCooQ2BkbG9wZW5cKihDJ1xmUi4KKy5JUCAiXGZCbm9kdW1wXGZSIiA0CisuSVggSXRlbSAibm9kdW1wIgorTWFya3MgdGhlIG9iamVjdCBjYW4gbm90IGJlIGR1bXBlZCBieSBcZihDV1wqKENgZGxkdW1wXCooQydcZlIuCisuSVAgIlxmQm5vZXhlY3N0YWNrXGZSIiA0CisuSVggSXRlbSAibm9leGVjc3RhY2siCitNYXJrcyB0aGUgb2JqZWN0IGFzIG5vdCByZXF1aXJpbmcgZXhlY3V0YWJsZSBzdGFjay4KKy5JUCAiXGZCbm9yZWxyb1xmUiIgNAorLklYIEl0ZW0gIm5vcmVscm8iCitEb24ndCBjcmVhdGUgYW4gXHMtMUVMRlxzMCBcZihDV1wqKENgUFRfR05VX1JFTFJPXCooQydcZlIgc2VnbWVudCBoZWFkZXIgaW4gdGhlIG9iamVjdC4KKy5JUCAiXGZCbm93XGZSIiA0CisuSVggSXRlbSAibm93IgorV2hlbiBnZW5lcmF0aW5nIGFuIGV4ZWN1dGFibGUgb3Igc2hhcmVkIGxpYnJhcnksIG1hcmsgaXQgdG8gdGVsbCB0aGUKK2R5bmFtaWMgbGlua2VyIHRvIHJlc29sdmUgYWxsIHN5bWJvbHMgd2hlbiB0aGUgcHJvZ3JhbSBpcyBzdGFydGVkLCBvcgord2hlbiB0aGUgc2hhcmVkIGxpYnJhcnkgaXMgbGlua2VkIHRvIHVzaW5nIGRsb3BlbiwgaW5zdGVhZCBvZgorZGVmZXJyaW5nIGZ1bmN0aW9uIGNhbGwgcmVzb2x1dGlvbiB0byB0aGUgcG9pbnQgd2hlbiB0aGUgZnVuY3Rpb24gaXMKK2ZpcnN0IGNhbGxlZC4KKy5JUCAiXGZCb3JpZ2luXGZSIiA0CisuSVggSXRlbSAib3JpZ2luIgorTWFya3MgdGhlIG9iamVjdCBtYXkgY29udGFpbiBcZihDVyRPUklHSU5cZlIuCisuSVAgIlxmQnJlbHJvXGZSIiA0CisuSVggSXRlbSAicmVscm8iCitDcmVhdGUgYW4gXHMtMUVMRlxzMCBcZihDV1wqKENgUFRfR05VX1JFTFJPXCooQydcZlIgc2VnbWVudCBoZWFkZXIgaW4gdGhlIG9iamVjdC4KKy5JUCAiXGZCbWF4XC1wYWdlXC1zaXplPVxmUlxmSXZhbHVlXGZSIiA0CisuSVggSXRlbSAibWF4LXBhZ2Utc2l6ZT12YWx1ZSIKK1NldCB0aGUgZW11bGF0aW9uIG1heGltdW0gcGFnZSBzaXplIHRvIFxmSXZhbHVlXGZSLgorLklQICJcZkJjb21tb25cLXBhZ2VcLXNpemU9XGZSXGZJdmFsdWVcZlIiIDQKKy5JWCBJdGVtICJjb21tb24tcGFnZS1zaXplPXZhbHVlIgorU2V0IHRoZSBlbXVsYXRpb24gY29tbW9uIHBhZ2Ugc2l6ZSB0byBcZkl2YWx1ZVxmUi4KKy5SRQorLlJTIDQKKy5TcAorT3RoZXIga2V5d29yZHMgYXJlIGlnbm9yZWQgZm9yIFNvbGFyaXMgY29tcGF0aWJpbGl0eS4KKy5SRQorLklQICJcZkJcLShcZlIgXGZJYXJjaGl2ZXNcZlIgXGZCXC0pXGZSIiA0CisuSVggSXRlbSAiLSggYXJjaGl2ZXMgLSkiCisuUEQgMAorLklQICJcZkJcLVwtc3RhcnRcLWdyb3VwXGZSIFxmSWFyY2hpdmVzXGZSIFxmQlwtXC1lbmRcLWdyb3VwXGZSIiA0CisuSVggSXRlbSAiLS1zdGFydC1ncm91cCBhcmNoaXZlcyAtLWVuZC1ncm91cCIKKy5QRAorVGhlIFxmSWFyY2hpdmVzXGZSIHNob3VsZCBiZSBhIGxpc3Qgb2YgYXJjaGl2ZSBmaWxlcy4gIFRoZXkgbWF5IGJlCitlaXRoZXIgZXhwbGljaXQgZmlsZSBuYW1lcywgb3IgXGZCXC1sXGZSIG9wdGlvbnMuCisuU3AKK1RoZSBzcGVjaWZpZWQgYXJjaGl2ZXMgYXJlIHNlYXJjaGVkIHJlcGVhdGVkbHkgdW50aWwgbm8gbmV3IHVuZGVmaW5lZAorcmVmZXJlbmNlcyBhcmUgY3JlYXRlZC4gIE5vcm1hbGx5LCBhbiBhcmNoaXZlIGlzIHNlYXJjaGVkIG9ubHkgb25jZSBpbgordGhlIG9yZGVyIHRoYXQgaXQgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBJZiBhIHN5bWJvbCBpbiB0aGF0CithcmNoaXZlIGlzIG5lZWRlZCB0byByZXNvbHZlIGFuIHVuZGVmaW5lZCBzeW1ib2wgcmVmZXJyZWQgdG8gYnkgYW4KK29iamVjdCBpbiBhbiBhcmNoaXZlIHRoYXQgYXBwZWFycyBsYXRlciBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgbGlua2VyCit3b3VsZCBub3QgYmUgYWJsZSB0byByZXNvbHZlIHRoYXQgcmVmZXJlbmNlLiAgQnkgZ3JvdXBpbmcgdGhlIGFyY2hpdmVzLAordGhleSBhbGwgYmUgc2VhcmNoZWQgcmVwZWF0ZWRseSB1bnRpbCBhbGwgcG9zc2libGUgcmVmZXJlbmNlcyBhcmUKK3Jlc29sdmVkLgorLlNwCitVc2luZyB0aGlzIG9wdGlvbiBoYXMgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBjb3N0LiAgSXQgaXMgYmVzdCB0byB1c2UKK2l0IG9ubHkgd2hlbiB0aGVyZSBhcmUgdW5hdm9pZGFibGUgY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuIHR3byBvcgorbW9yZSBhcmNoaXZlcy4KKy5JUCAiXGZCXC1cLWFjY2VwdFwtdW5rbm93blwtaW5wdXRcLWFyY2hcZlIiIDQKKy5JWCBJdGVtICItLWFjY2VwdC11bmtub3duLWlucHV0LWFyY2giCisuUEQgMAorLklQICJcZkJcLVwtbm9cLWFjY2VwdFwtdW5rbm93blwtaW5wdXRcLWFyY2hcZlIiIDQKKy5JWCBJdGVtICItLW5vLWFjY2VwdC11bmtub3duLWlucHV0LWFyY2giCisuUEQKK1RlbGxzIHRoZSBsaW5rZXIgdG8gYWNjZXB0IGlucHV0IGZpbGVzIHdob3NlIGFyY2hpdGVjdHVyZSBjYW5ub3QgYmUKK3JlY29nbmlzZWQuICBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSB1c2VyIGtub3dzIHdoYXQgdGhleSBhcmUgZG9pbmcKK2FuZCBkZWxpYmVyYXRlbHkgd2FudHMgdG8gbGluayBpbiB0aGVzZSB1bmtub3duIGlucHV0IGZpbGVzLiAgVGhpcyB3YXMKK3RoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiB0aGUgbGlua2VyLCBiZWZvcmUgcmVsZWFzZSAyLjE0LiAgVGhlIGRlZmF1bHQKK2JlaGF2aW91ciBmcm9tIHJlbGVhc2UgMi4xNCBvbndhcmRzIGlzIHRvIHJlamVjdCBzdWNoIGlucHV0IGZpbGVzLCBhbmQKK3NvIHRoZSBcZkJcLVwtYWNjZXB0XC11bmtub3duXC1pbnB1dFwtYXJjaFxmUiBvcHRpb24gaGFzIGJlZW4gYWRkZWQgdG8KK3Jlc3RvcmUgdGhlIG9sZCBiZWhhdmlvdXIuCisuSVAgIlxmQlwtXC1hc1wtbmVlZGVkXGZSIiA0CisuSVggSXRlbSAiLS1hcy1uZWVkZWQiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLWFzXC1uZWVkZWRcZlIiIDQKKy5JWCBJdGVtICItLW5vLWFzLW5lZWRlZCIKKy5QRAorVGhpcyBvcHRpb24gYWZmZWN0cyBccy0xRUxGXHMwIFxzLTFEVF9ORUVERURcczAgdGFncyBmb3IgZHluYW1pYyBsaWJyYXJpZXMgbWVudGlvbmVkCitvbiB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIHRoZSBcZkJcLVwtYXNcLW5lZWRlZFxmUiBvcHRpb24uICBOb3JtYWxseQordGhlIGxpbmtlciB3aWxsIGFkZCBhIFxzLTFEVF9ORUVERURcczAgdGFnIGZvciBlYWNoIGR5bmFtaWMgbGlicmFyeSBtZW50aW9uZWQKK29uIHRoZSBjb21tYW5kIGxpbmUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbGlicmFyeSBpcyBhY3R1YWxseQorbmVlZGVkIG9yIG5vdC4gIFxmQlwtXC1hc1wtbmVlZGVkXGZSIGNhdXNlcyBhIFxzLTFEVF9ORUVERURcczAgdGFnIHRvIG9ubHkgYmUKK2VtaXR0ZWQgZm9yIGEgbGlicmFyeSB0aGF0IHNhdGlzZmllcyBhbiB1bmRlZmluZWQgc3ltYm9sIHJlZmVyZW5jZQorZnJvbSBhIHJlZ3VsYXIgb2JqZWN0IGZpbGUgb3IsIGlmIHRoZSBsaWJyYXJ5IGlzIG5vdCBmb3VuZCBpbiB0aGUKK1wmXHMtMURUX05FRURFRFxzMCBsaXN0cyBvZiBvdGhlciBsaWJyYXJpZXMgbGlua2VkIHVwIHRvIHRoYXQgcG9pbnQsIGFuCit1bmRlZmluZWQgc3ltYm9sIHJlZmVyZW5jZSBmcm9tIGFub3RoZXIgZHluYW1pYyBsaWJyYXJ5LgorXCZcZkJcLVwtbm9cLWFzXC1uZWVkZWRcZlIgcmVzdG9yZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorLklQICJcZkJcLVwtYWRkXC1uZWVkZWRcZlIiIDQKKy5JWCBJdGVtICItLWFkZC1uZWVkZWQiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLWFkZFwtbmVlZGVkXGZSIiA0CisuSVggSXRlbSAiLS1uby1hZGQtbmVlZGVkIgorLlBECitUaGVzZSB0d28gb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBiZWNhdXNlIG9mIHRoZSBzaW1pbGFyaXR5IG9mCit0aGVpciBuYW1lcyB0byB0aGUgXGZCXC1cLWFzXC1uZWVkZWRcZlIgYW5kIFxmQlwtXC1ub1wtYXNcLW5lZWRlZFxmUgorb3B0aW9ucy4gIFRoZXkgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IFxmQlwtXC1jb3B5XC1kdFwtbmVlZGVkXC1lbnRyaWVzXGZSCithbmQgXGZCXC1cLW5vXC1jb3B5XC1kdFwtbmVlZGVkXC1lbnRyaWVzXGZSLgorLklQICJcZkJcLWFzc2VydFxmUiBcZklrZXl3b3JkXGZSIiA0CisuSVggSXRlbSAiLWFzc2VydCBrZXl3b3JkIgorVGhpcyBvcHRpb24gaXMgaWdub3JlZCBmb3IgU3VuT1MgY29tcGF0aWJpbGl0eS4KKy5JUCAiXGZCXC1CZHluYW1pY1xmUiIgNAorLklYIEl0ZW0gIi1CZHluYW1pYyIKKy5QRCAwCisuSVAgIlxmQlwtZHlcZlIiIDQKKy5JWCBJdGVtICItZHkiCisuSVAgIlxmQlwtY2FsbF9zaGFyZWRcZlIiIDQKKy5JWCBJdGVtICItY2FsbF9zaGFyZWQiCisuUEQKK0xpbmsgYWdhaW5zdCBkeW5hbWljIGxpYnJhcmllcy4gIFRoaXMgaXMgb25seSBtZWFuaW5nZnVsIG9uIHBsYXRmb3JtcworZm9yIHdoaWNoIHNoYXJlZCBsaWJyYXJpZXMgYXJlIHN1cHBvcnRlZC4gIFRoaXMgb3B0aW9uIGlzIG5vcm1hbGx5IHRoZQorZGVmYXVsdCBvbiBzdWNoIHBsYXRmb3Jtcy4gIFRoZSBkaWZmZXJlbnQgdmFyaWFudHMgb2YgdGhpcyBvcHRpb24gYXJlCitmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZhcmlvdXMgc3lzdGVtcy4gIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uCittdWx0aXBsZSB0aW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lOiBpdCBhZmZlY3RzIGxpYnJhcnkgc2VhcmNoaW5nIGZvcgorXCZcZkJcLWxcZlIgb3B0aW9ucyB3aGljaCBmb2xsb3cgaXQuCisuSVAgIlxmQlwtQmdyb3VwXGZSIiA0CisuSVggSXRlbSAiLUJncm91cCIKK1NldCB0aGUgXGYoQ1dcKihDYERGXzFfR1JPVVBcKihDJ1xmUiBmbGFnIGluIHRoZSBcZihDV1wqKENgRFRfRkxBR1NfMVwqKEMnXGZSIGVudHJ5IGluIHRoZSBkeW5hbWljCitzZWN0aW9uLiAgVGhpcyBjYXVzZXMgdGhlIHJ1bnRpbWUgbGlua2VyIHRvIGhhbmRsZSBsb29rdXBzIGluIHRoaXMKK29iamVjdCBhbmQgaXRzIGRlcGVuZGVuY2llcyB0byBiZSBwZXJmb3JtZWQgb25seSBpbnNpZGUgdGhlIGdyb3VwLgorXCZcZkJcLVwtdW5yZXNvbHZlZFwtc3ltYm9scz1yZXBvcnRcLWFsbFxmUiBpcyBpbXBsaWVkLiAgVGhpcyBvcHRpb24gaXMKK29ubHkgbWVhbmluZ2Z1bCBvbiBccy0xRUxGXHMwIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMuCisuSVAgIlxmQlwtQnN0YXRpY1xmUiIgNAorLklYIEl0ZW0gIi1Cc3RhdGljIgorLlBEIDAKKy5JUCAiXGZCXC1kblxmUiIgNAorLklYIEl0ZW0gIi1kbiIKKy5JUCAiXGZCXC1ub25fc2hhcmVkXGZSIiA0CisuSVggSXRlbSAiLW5vbl9zaGFyZWQiCisuSVAgIlxmQlwtc3RhdGljXGZSIiA0CisuSVggSXRlbSAiLXN0YXRpYyIKKy5QRAorRG8gbm90IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyaWVzLiAgVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgb24KK3BsYXRmb3JtcyBmb3Igd2hpY2ggc2hhcmVkIGxpYnJhcmllcyBhcmUgc3VwcG9ydGVkLiAgVGhlIGRpZmZlcmVudAordmFyaWFudHMgb2YgdGhpcyBvcHRpb24gYXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdmFyaW91cyBzeXN0ZW1zLiAgWW91CittYXkgdXNlIHRoaXMgb3B0aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBjb21tYW5kIGxpbmU6IGl0IGFmZmVjdHMKK2xpYnJhcnkgc2VhcmNoaW5nIGZvciBcZkJcLWxcZlIgb3B0aW9ucyB3aGljaCBmb2xsb3cgaXQuICBUaGlzCitvcHRpb24gYWxzbyBpbXBsaWVzIFxmQlwtXC11bnJlc29sdmVkXC1zeW1ib2xzPXJlcG9ydFwtYWxsXGZSLiAgVGhpcworb3B0aW9uIGNhbiBiZSB1c2VkIHdpdGggXGZCXC1zaGFyZWRcZlIuICBEb2luZyBzbyBtZWFucyB0aGF0IGEKK3NoYXJlZCBsaWJyYXJ5IGlzIGJlaW5nIGNyZWF0ZWQgYnV0IHRoYXQgYWxsIG9mIHRoZSBsaWJyYXJ5J3MgZXh0ZXJuYWwKK3JlZmVyZW5jZXMgbXVzdCBiZSByZXNvbHZlZCBieSBwdWxsaW5nIGluIGVudHJpZXMgZnJvbSBzdGF0aWMKK2xpYnJhcmllcy4KKy5JUCAiXGZCXC1Cc3ltYm9saWNcZlIiIDQKKy5JWCBJdGVtICItQnN5bWJvbGljIgorV2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LCBiaW5kIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIHN5bWJvbHMgdG8gdGhlCitkZWZpbml0aW9uIHdpdGhpbiB0aGUgc2hhcmVkIGxpYnJhcnksIGlmIGFueS4gIE5vcm1hbGx5LCBpdCBpcyBwb3NzaWJsZQorZm9yIGEgcHJvZ3JhbSBsaW5rZWQgYWdhaW5zdCBhIHNoYXJlZCBsaWJyYXJ5IHRvIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uCit3aXRoaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LiAgVGhpcyBvcHRpb24gaXMgb25seSBtZWFuaW5nZnVsIG9uIFxzLTFFTEZcczAKK3BsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMuCisuSVAgIlxmQlwtQnN5bWJvbGljXC1mdW5jdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItQnN5bWJvbGljLWZ1bmN0aW9ucyIKK1doZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeSwgYmluZCByZWZlcmVuY2VzIHRvIGdsb2JhbCBmdW5jdGlvbgorc3ltYm9scyB0byB0aGUgZGVmaW5pdGlvbiB3aXRoaW4gdGhlIHNoYXJlZCBsaWJyYXJ5LCBpZiBhbnkuCitUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgb24gXHMtMUVMRlxzMCBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCBzaGFyZWQKK2xpYnJhcmllcy4KKy5JUCAiXGZCXC1cLWR5bmFtaWNcLWxpc3Q9XGZSXGZJZHluYW1pYy1saXN0LWZpbGVcZlIiIDQKKy5JWCBJdGVtICItLWR5bmFtaWMtbGlzdD1keW5hbWljLWxpc3QtZmlsZSIKK1NwZWNpZnkgdGhlIG5hbWUgb2YgYSBkeW5hbWljIGxpc3QgZmlsZSB0byB0aGUgbGlua2VyLiAgVGhpcyBpcwordHlwaWNhbGx5IHVzZWQgd2hlbiBjcmVhdGluZyBzaGFyZWQgbGlicmFyaWVzIHRvIHNwZWNpZnkgYSBsaXN0IG9mCitnbG9iYWwgc3ltYm9scyB3aG9zZSByZWZlcmVuY2VzIHNob3VsZG4ndCBiZSBib3VuZCB0byB0aGUgZGVmaW5pdGlvbgord2l0aGluIHRoZSBzaGFyZWQgbGlicmFyeSwgb3IgY3JlYXRpbmcgZHluYW1pY2FsbHkgbGlua2VkIGV4ZWN1dGFibGVzCit0byBzcGVjaWZ5IGEgbGlzdCBvZiBzeW1ib2xzIHdoaWNoIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgc3ltYm9sIHRhYmxlCitpbiB0aGUgZXhlY3V0YWJsZS4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiBccy0xRUxGXHMwIHBsYXRmb3Jtcword2hpY2ggc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzLgorLlNwCitUaGUgZm9ybWF0IG9mIHRoZSBkeW5hbWljIGxpc3QgaXMgdGhlIHNhbWUgYXMgdGhlIHZlcnNpb24gbm9kZSB3aXRob3V0CitzY29wZSBhbmQgbm9kZSBuYW1lLiAgU2VlIFxmQlxzLTFWRVJTSU9OXHMwXGZSIGZvciBtb3JlIGluZm9ybWF0aW9uLgorLklQICJcZkJcLVwtZHluYW1pY1wtbGlzdFwtZGF0YVxmUiIgNAorLklYIEl0ZW0gIi0tZHluYW1pYy1saXN0LWRhdGEiCitJbmNsdWRlIGFsbCBnbG9iYWwgZGF0YSBzeW1ib2xzIHRvIHRoZSBkeW5hbWljIGxpc3QuCisuSVAgIlxmQlwtXC1keW5hbWljXC1saXN0XC1jcHBcLW5ld1xmUiIgNAorLklYIEl0ZW0gIi0tZHluYW1pYy1saXN0LWNwcC1uZXciCitQcm92aWRlIHRoZSBidWlsdGluIGR5bmFtaWMgbGlzdCBmb3IgXCooQysgb3BlcmF0b3IgbmV3IGFuZCBkZWxldGUuICBJdAoraXMgbWFpbmx5IHVzZWZ1bCBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnN0ZGMrKy4KKy5JUCAiXGZCXC1cLWR5bmFtaWNcLWxpc3RcLWNwcFwtdHlwZWluZm9cZlIiIDQKKy5JWCBJdGVtICItLWR5bmFtaWMtbGlzdC1jcHAtdHlwZWluZm8iCitQcm92aWRlIHRoZSBidWlsdGluIGR5bmFtaWMgbGlzdCBmb3IgXCooQysgcnVudGltZSB0eXBlIGlkZW50aWZpY2F0aW9uLgorLklQICJcZkJcLVwtY2hlY2tcLXNlY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLS1jaGVjay1zZWN0aW9ucyIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtY2hlY2tcLXNlY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLS1uby1jaGVjay1zZWN0aW9ucyIKKy5QRAorQXNrcyB0aGUgbGlua2VyIFxmSW5vdFxmUiB0byBjaGVjayBzZWN0aW9uIGFkZHJlc3NlcyBhZnRlciB0aGV5IGhhdmUKK2JlZW4gYXNzaWduZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3ZlcmxhcHMuICBOb3JtYWxseSB0aGUgbGlua2VyIHdpbGwKK3BlcmZvcm0gdGhpcyBjaGVjaywgYW5kIGlmIGl0IGZpbmRzIGFueSBvdmVybGFwcyBpdCB3aWxsIHByb2R1Y2UKK3N1aXRhYmxlIGVycm9yIG1lc3NhZ2VzLiAgVGhlIGxpbmtlciBkb2VzIGtub3cgYWJvdXQsIGFuZCBkb2VzIG1ha2UKK2FsbG93YW5jZXMgZm9yIHNlY3Rpb25zIGluIG92ZXJsYXlzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBiZQorcmVzdG9yZWQgYnkgdXNpbmcgdGhlIGNvbW1hbmQgbGluZSBzd2l0Y2ggXGZCXC1cLWNoZWNrXC1zZWN0aW9uc1xmUi4KK1NlY3Rpb24gb3ZlcmxhcCBpcyBub3QgdXN1YWxseSBjaGVja2VkIGZvciByZWxvY2F0YWJsZSBsaW5rcy4gIFlvdSBjYW4KK2ZvcmNlIGNoZWNraW5nIGluIHRoYXQgY2FzZSBieSB1c2luZyB0aGUgXGZCXC1cLWNoZWNrXC1zZWN0aW9uc1xmUgorb3B0aW9uLgorLklQICJcZkJcLVwtY29weVwtZHRcLW5lZWRlZFwtZW50cmllc1xmUiIgNAorLklYIEl0ZW0gIi0tY29weS1kdC1uZWVkZWQtZW50cmllcyIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtY29weVwtZHRcLW5lZWRlZFwtZW50cmllc1xmUiIgNAorLklYIEl0ZW0gIi0tbm8tY29weS1kdC1uZWVkZWQtZW50cmllcyIKKy5QRAorVGhpcyBvcHRpb24gYWZmZWN0cyB0aGUgdHJlYXRtZW50IG9mIGR5bmFtaWMgbGlicmFyaWVzIHJlZmVycmVkIHRvCitieSBccy0xRFRfTkVFREVEXHMwIHRhZ3MgXGZJaW5zaWRlXGZSIFxzLTFFTEZcczAgZHluYW1pYyBsaWJyYXJpZXMgbWVudGlvbmVkIG9uIHRoZQorY29tbWFuZCBsaW5lLiAgTm9ybWFsbHkgdGhlIGxpbmtlciB3b24ndCBhZGQgYSBccy0xRFRfTkVFREVEXHMwIHRhZyB0byB0aGUKK291dHB1dCBiaW5hcnkgZm9yIGVhY2ggbGlicmFyeSBtZW50aW9uZWQgaW4gYSBccy0xRFRfTkVFREVEXHMwIHRhZyBpbiBhbgoraW5wdXQgZHluYW1pYyBsaWJyYXJ5LiAgV2l0aCBcZkJcLVwtY29weVwtZHRcLW5lZWRlZFwtZW50cmllc1xmUgorc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaG93ZXZlciBhbnkgZHluYW1pYyBsaWJyYXJpZXMgdGhhdAorZm9sbG93IGl0IHdpbGwgaGF2ZSB0aGVpciBccy0xRFRfTkVFREVEXHMwIGVudHJpZXMgYWRkZWQuICBUaGUgZGVmYXVsdAorYmVoYXZpb3VyIGNhbiBiZSByZXN0b3JlZCB3aXRoIFxmQlwtXC1ub1wtY29weVwtZHRcLW5lZWRlZFwtZW50cmllc1xmUi4KKy5TcAorVGhpcyBvcHRpb24gYWxzbyBoYXMgYW4gZWZmZWN0IG9uIHRoZSByZXNvbHV0aW9uIG9mIHN5bWJvbHMgaW4gZHluYW1pYworbGlicmFyaWVzLiAgV2l0aCBcZkJcLVwtY29weVwtZHRcLW5lZWRlZFwtZW50cmllc1xmUiBkeW5hbWljIGxpYnJhcmllcworbWVudGlvbmVkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2lsbCBiZSByZWN1cnNpdmVseSBzZWFyY2hlZCwgZm9sbG93aW5nCit0aGVpciBccy0xRFRfTkVFREVEXHMwIHRhZ3MgdG8gb3RoZXIgbGlicmFyaWVzLCBpbiBvcmRlciB0byByZXNvbHZlIHN5bWJvbHMKK3JlcXVpcmVkIGJ5IHRoZSBvdXRwdXQgYmluYXJ5LiAgV2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nIGhvd2V2ZXIKK3RoZSBzZWFyY2hpbmcgb2YgZHluYW1pYyBsaWJyYXJpZXMgdGhhdCBmb2xsb3cgaXQgd2lsbCBzdG9wIHdpdGggdGhlCitkeW5hbWljIGxpYnJhcnkgaXRzZWxmLiAgTm8gXHMtMURUX05FRURFRFxzMCBsaW5rcyB3aWxsIGJlIHRyYXZlcnNlZCB0byByZXNvbHZlCitzeW1ib2xzLgorLklQICJcZkJcLVwtY3JlZlxmUiIgNAorLklYIEl0ZW0gIi0tY3JlZiIKK091dHB1dCBhIGNyb3NzIHJlZmVyZW5jZSB0YWJsZS4gIElmIGEgbGlua2VyIG1hcCBmaWxlIGlzIGJlaW5nCitnZW5lcmF0ZWQsIHRoZSBjcm9zcyByZWZlcmVuY2UgdGFibGUgaXMgcHJpbnRlZCB0byB0aGUgbWFwIGZpbGUuCitPdGhlcndpc2UsIGl0IGlzIHByaW50ZWQgb24gdGhlIHN0YW5kYXJkIG91dHB1dC4KKy5TcAorVGhlIGZvcm1hdCBvZiB0aGUgdGFibGUgaXMgaW50ZW50aW9uYWxseSBzaW1wbGUsIHNvIHRoYXQgaXQgbWF5IGJlCitlYXNpbHkgcHJvY2Vzc2VkIGJ5IGEgc2NyaXB0IGlmIG5lY2Vzc2FyeS4gIFRoZSBzeW1ib2xzIGFyZSBwcmludGVkIG91dCwKK3NvcnRlZCBieSBuYW1lLiAgRm9yIGVhY2ggc3ltYm9sLCBhIGxpc3Qgb2YgZmlsZSBuYW1lcyBpcyBnaXZlbi4gIElmIHRoZQorc3ltYm9sIGlzIGRlZmluZWQsIHRoZSBmaXJzdCBmaWxlIGxpc3RlZCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlCitkZWZpbml0aW9uLiAgVGhlIHJlbWFpbmluZyBmaWxlcyBjb250YWluIHJlZmVyZW5jZXMgdG8gdGhlIHN5bWJvbC4KKy5JUCAiXGZCXC1cLW5vXC1kZWZpbmVcLWNvbW1vblxmUiIgNAorLklYIEl0ZW0gIi0tbm8tZGVmaW5lLWNvbW1vbiIKK1RoaXMgb3B0aW9uIGluaGliaXRzIHRoZSBhc3NpZ25tZW50IG9mIGFkZHJlc3NlcyB0byBjb21tb24gc3ltYm9scy4KK1RoZSBzY3JpcHQgY29tbWFuZCBcZihDV1wqKENgSU5ISUJJVF9DT01NT05fQUxMT0NBVElPTlwqKEMnXGZSIGhhcyB0aGUgc2FtZSBlZmZlY3QuCisuU3AKK1RoZSBcZkJcLVwtbm9cLWRlZmluZVwtY29tbW9uXGZSIG9wdGlvbiBhbGxvd3MgZGVjb3VwbGluZwordGhlIGRlY2lzaW9uIHRvIGFzc2lnbiBhZGRyZXNzZXMgdG8gQ29tbW9uIHN5bWJvbHMgZnJvbSB0aGUgY2hvaWNlCitvZiB0aGUgb3V0cHV0IGZpbGUgdHlwZTsgb3RoZXJ3aXNlIGEgbm9uLVJlbG9jYXRhYmxlIG91dHB1dCB0eXBlCitmb3JjZXMgYXNzaWduaW5nIGFkZHJlc3NlcyB0byBDb21tb24gc3ltYm9scy4KK1VzaW5nIFxmQlwtXC1ub1wtZGVmaW5lXC1jb21tb25cZlIgYWxsb3dzIENvbW1vbiBzeW1ib2xzIHRoYXQgYXJlIHJlZmVyZW5jZWQKK2Zyb20gYSBzaGFyZWQgbGlicmFyeSB0byBiZSBhc3NpZ25lZCBhZGRyZXNzZXMgb25seSBpbiB0aGUgbWFpbiBwcm9ncmFtLgorVGhpcyBlbGltaW5hdGVzIHRoZSB1bnVzZWQgZHVwbGljYXRlIHNwYWNlIGluIHRoZSBzaGFyZWQgbGlicmFyeSwKK2FuZCBhbHNvIHByZXZlbnRzIGFueSBwb3NzaWJsZSBjb25mdXNpb24gb3ZlciByZXNvbHZpbmcgdG8gdGhlIHdyb25nCitkdXBsaWNhdGUgd2hlbiB0aGVyZSBhcmUgbWFueSBkeW5hbWljIG1vZHVsZXMgd2l0aCBzcGVjaWFsaXplZCBzZWFyY2gKK3BhdGhzIGZvciBydW50aW1lIHN5bWJvbCByZXNvbHV0aW9uLgorLklQICJcZkJcLVwtZGVmc3ltPVxmUlxmSXN5bWJvbFxmUlxmQj1cZlJcZklleHByZXNzaW9uXGZSIiA0CisuSVggSXRlbSAiLS1kZWZzeW09c3ltYm9sPWV4cHJlc3Npb24iCitDcmVhdGUgYSBnbG9iYWwgc3ltYm9sIGluIHRoZSBvdXRwdXQgZmlsZSwgY29udGFpbmluZyB0aGUgYWJzb2x1dGUKK2FkZHJlc3MgZ2l2ZW4gYnkgXGZJZXhwcmVzc2lvblxmUi4gIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uIGFzIG1hbnkKK3RpbWVzIGFzIG5lY2Vzc2FyeSB0byBkZWZpbmUgbXVsdGlwbGUgc3ltYm9scyBpbiB0aGUgY29tbWFuZCBsaW5lLiAgQQorbGltaXRlZCBmb3JtIG9mIGFyaXRobWV0aWMgaXMgc3VwcG9ydGVkIGZvciB0aGUgXGZJZXhwcmVzc2lvblxmUiBpbiB0aGlzCitjb250ZXh0OiB5b3UgbWF5IGdpdmUgYSBoZXhhZGVjaW1hbCBjb25zdGFudCBvciB0aGUgbmFtZSBvZiBhbiBleGlzdGluZworc3ltYm9sLCBvciB1c2UgXGYoQ1dcKihDYCtcKihDJ1xmUiBhbmQgXGYoQ1dcKihDYFwtXCooQydcZlIgdG8gYWRkIG9yIHN1YnRyYWN0IGhleGFkZWNpbWFsCitjb25zdGFudHMgb3Igc3ltYm9scy4gIElmIHlvdSBuZWVkIG1vcmUgZWxhYm9yYXRlIGV4cHJlc3Npb25zLCBjb25zaWRlcgordXNpbmcgdGhlIGxpbmtlciBjb21tYW5kIGxhbmd1YWdlIGZyb20gYSBzY3JpcHQuICBcZklOb3RlOlxmUiB0aGVyZSBzaG91bGQgYmUgbm8gd2hpdGUKK3NwYWNlIGJldHdlZW4gXGZJc3ltYm9sXGZSLCB0aGUgZXF1YWxzIHNpZ24gKCJcZkI9XGZSIiksIGFuZAorXCZcZklleHByZXNzaW9uXGZSLgorLklQICJcZkJcLVwtZGVtYW5nbGVbPVxmUlxmSXN0eWxlXGZSXGZCXVxmUiIgNAorLklYIEl0ZW0gIi0tZGVtYW5nbGVbPXN0eWxlXSIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtZGVtYW5nbGVcZlIiIDQKKy5JWCBJdGVtICItLW5vLWRlbWFuZ2xlIgorLlBECitUaGVzZSBvcHRpb25zIGNvbnRyb2wgd2hldGhlciB0byBkZW1hbmdsZSBzeW1ib2wgbmFtZXMgaW4gZXJyb3IgbWVzc2FnZXMKK2FuZCBvdGhlciBvdXRwdXQuICBXaGVuIHRoZSBsaW5rZXIgaXMgdG9sZCB0byBkZW1hbmdsZSwgaXQgdHJpZXMgdG8KK3ByZXNlbnQgc3ltYm9sIG5hbWVzIGluIGEgcmVhZGFibGUgZmFzaGlvbjogaXQgc3RyaXBzIGxlYWRpbmcKK3VuZGVyc2NvcmVzIGlmIHRoZXkgYXJlIHVzZWQgYnkgdGhlIG9iamVjdCBmaWxlIGZvcm1hdCwgYW5kIGNvbnZlcnRzIFwqKEMrCittYW5nbGVkIHN5bWJvbCBuYW1lcyBpbnRvIHVzZXIgcmVhZGFibGUgbmFtZXMuICBEaWZmZXJlbnQgY29tcGlsZXJzIGhhdmUKK2RpZmZlcmVudCBtYW5nbGluZyBzdHlsZXMuICBUaGUgb3B0aW9uYWwgZGVtYW5nbGluZyBzdHlsZSBhcmd1bWVudCBjYW4gYmUgdXNlZAordG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlIGRlbWFuZ2xpbmcgc3R5bGUgZm9yIHlvdXIgY29tcGlsZXIuICBUaGUgbGlua2VyIHdpbGwKK2RlbWFuZ2xlIGJ5IGRlZmF1bHQgdW5sZXNzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcZkJccy0xQ09MTEVDVF9OT19ERU1BTkdMRVxzMFxmUgoraXMgc2V0LiAgVGhlc2Ugb3B0aW9ucyBtYXkgYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1JXGZSXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1JZmlsZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1keW5hbWljXC1saW5rZXI9XGZSXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIi0tZHluYW1pYy1saW5rZXI9ZmlsZSIKKy5QRAorU2V0IHRoZSBuYW1lIG9mIHRoZSBkeW5hbWljIGxpbmtlci4gIFRoaXMgaXMgb25seSBtZWFuaW5nZnVsIHdoZW4KK2dlbmVyYXRpbmcgZHluYW1pY2FsbHkgbGlua2VkIFxzLTFFTEZcczAgZXhlY3V0YWJsZXMuICBUaGUgZGVmYXVsdCBkeW5hbWljCitsaW5rZXIgaXMgbm9ybWFsbHkgY29ycmVjdDsgZG9uJ3QgdXNlIHRoaXMgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZQorZG9pbmcuCisuSVAgIlxmQlwtXC1mYXRhbFwtd2FybmluZ3NcZlIiIDQKKy5JWCBJdGVtICItLWZhdGFsLXdhcm5pbmdzIgorLlBEIDAKKy5JUCAiXGZCXC1cLW5vXC1mYXRhbFwtd2FybmluZ3NcZlIiIDQKKy5JWCBJdGVtICItLW5vLWZhdGFsLXdhcm5pbmdzIgorLlBECitUcmVhdCBhbGwgd2FybmluZ3MgYXMgZXJyb3JzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBiZSByZXN0b3JlZAord2l0aCB0aGUgb3B0aW9uIFxmQlwtXC1ub1wtZmF0YWxcLXdhcm5pbmdzXGZSLgorLklQICJcZkJcLVwtZm9yY2VcLWV4ZVwtc3VmZml4XGZSIiA0CisuSVggSXRlbSAiLS1mb3JjZS1leGUtc3VmZml4IgorTWFrZSBzdXJlIHRoYXQgYW4gb3V0cHV0IGZpbGUgaGFzIGEgLmV4ZSBzdWZmaXguCisuU3AKK0lmIGEgc3VjY2Vzc2Z1bGx5IGJ1aWx0IGZ1bGx5IGxpbmtlZCBvdXRwdXQgZmlsZSBkb2VzIG5vdCBoYXZlIGEKK1wmXGYoQ1dcKihDYC5leGVcKihDJ1xmUiBvciBcZihDV1wqKENgLmRsbFwqKEMnXGZSIHN1ZmZpeCwgdGhpcyBvcHRpb24gZm9yY2VzIHRoZSBsaW5rZXIgdG8gY29weQordGhlIG91dHB1dCBmaWxlIHRvIG9uZSBvZiB0aGUgc2FtZSBuYW1lIHdpdGggYSBcZihDV1wqKENgLmV4ZVwqKEMnXGZSIHN1ZmZpeC4gVGhpcworb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIHVubW9kaWZpZWQgVW5peCBtYWtlZmlsZXMgb24gYSBNaWNyb3NvZnQKK1dpbmRvd3MgaG9zdCwgc2luY2Ugc29tZSB2ZXJzaW9ucyBvZiBXaW5kb3dzIHdvbid0IHJ1biBhbiBpbWFnZSB1bmxlc3MKK2l0IGVuZHMgaW4gYSBcZihDV1wqKENgLmV4ZVwqKEMnXGZSIHN1ZmZpeC4KKy5JUCAiXGZCXC1cLWdjXC1zZWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi0tZ2Mtc2VjdGlvbnMiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLWdjXC1zZWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi0tbm8tZ2Mtc2VjdGlvbnMiCisuUEQKK0VuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgdW51c2VkIGlucHV0IHNlY3Rpb25zLiAgSXQgaXMgaWdub3JlZCBvbgordGFyZ2V0cyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoaXMgb3B0aW9uLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIChvZiBub3QKK3BlcmZvcm1pbmcgdGhpcyBnYXJiYWdlIGNvbGxlY3Rpb24pIGNhbiBiZSByZXN0b3JlZCBieSBzcGVjaWZ5aW5nCitcJlxmQlwtXC1ub1wtZ2NcLXNlY3Rpb25zXGZSIG9uIHRoZSBjb21tYW5kIGxpbmUuCisuU3AKK1wmXGZCXC1cLWdjXC1zZWN0aW9uc1xmUiBkZWNpZGVzIHdoaWNoIGlucHV0IHNlY3Rpb25zIGFyZSB1c2VkIGJ5CitleGFtaW5pbmcgc3ltYm9scyBhbmQgcmVsb2NhdGlvbnMuICBUaGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBlbnRyeQorc3ltYm9sIGFuZCBhbGwgc2VjdGlvbnMgY29udGFpbmluZyBzeW1ib2xzIHVuZGVmaW5lZCBvbiB0aGUKK2NvbW1hbmQtbGluZSB3aWxsIGJlIGtlcHQsIGFzIHdpbGwgc2VjdGlvbnMgY29udGFpbmluZyBzeW1ib2xzCityZWZlcmVuY2VkIGJ5IGR5bmFtaWMgb2JqZWN0cy4gIE5vdGUgdGhhdCB3aGVuIGJ1aWxkaW5nIHNoYXJlZAorbGlicmFyaWVzLCB0aGUgbGlua2VyIG11c3QgYXNzdW1lIHRoYXQgYW55IHZpc2libGUgc3ltYm9sIGlzCityZWZlcmVuY2VkLiAgT25jZSB0aGlzIGluaXRpYWwgc2V0IG9mIHNlY3Rpb25zIGhhcyBiZWVuIGRldGVybWluZWQsCit0aGUgbGlua2VyIHJlY3Vyc2l2ZWx5IG1hcmtzIGFzIHVzZWQgYW55IHNlY3Rpb24gcmVmZXJlbmNlZCBieSB0aGVpcgorcmVsb2NhdGlvbnMuICBTZWUgXGZCXC1cLWVudHJ5XGZSIGFuZCBcZkJcLVwtdW5kZWZpbmVkXGZSLgorLlNwCitUaGlzIG9wdGlvbiBjYW4gYmUgc2V0IHdoZW4gZG9pbmcgYSBwYXJ0aWFsIGxpbmsgKGVuYWJsZWQgd2l0aCBvcHRpb24KK1wmXGZCXC1yXGZSKS4gIEluIHRoaXMgY2FzZSB0aGUgcm9vdCBvZiBzeW1ib2xzIGtlcHQgbXVzdCBiZSBleHBsaWNpdGx5CitzcGVjaWZpZWQgZWl0aGVyIGJ5IGFuIFxmQlwtXC1lbnRyeVxmUiBvciBcZkJcLVwtdW5kZWZpbmVkXGZSIG9wdGlvbiBvciBieQorYSBcZihDV1wqKENgRU5UUllcKihDJ1xmUiBjb21tYW5kIGluIHRoZSBsaW5rZXIgc2NyaXB0LgorLklQICJcZkJcLVwtcHJpbnRcLWdjXC1zZWN0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi0tcHJpbnQtZ2Mtc2VjdGlvbnMiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLXByaW50XC1nY1wtc2VjdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItLW5vLXByaW50LWdjLXNlY3Rpb25zIgorLlBECitMaXN0IGFsbCBzZWN0aW9ucyByZW1vdmVkIGJ5IGdhcmJhZ2UgY29sbGVjdGlvbi4gIFRoZSBsaXN0aW5nIGlzCitwcmludGVkIG9uIHN0ZGVyci4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgZWZmZWN0aXZlIGlmIGdhcmJhZ2UKK2NvbGxlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCB2aWEgdGhlIFxmQlwtXC1nY1wtc2VjdGlvbnNcZlIpIG9wdGlvbi4gIFRoZQorZGVmYXVsdCBiZWhhdmlvdXIgKG9mIG5vdCBsaXN0aW5nIHRoZSBzZWN0aW9ucyB0aGF0IGFyZSByZW1vdmVkKSBjYW4KK2JlIHJlc3RvcmVkIGJ5IHNwZWNpZnlpbmcgXGZCXC1cLW5vXC1wcmludFwtZ2NcLXNlY3Rpb25zXGZSIG9uIHRoZSBjb21tYW5kCitsaW5lLgorLklQICJcZkJcLVwtcHJpbnRcLW91dHB1dFwtZm9ybWF0XGZSIiA0CisuSVggSXRlbSAiLS1wcmludC1vdXRwdXQtZm9ybWF0IgorUHJpbnQgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgb3V0cHV0IGZvcm1hdCAocGVyaGFwcyBpbmZsdWVuY2VkIGJ5CitvdGhlciBjb21tYW5kLWxpbmUgb3B0aW9ucykuICBUaGlzIGlzIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBhcHBlYXIKK2luIGFuIFxmKENXXCooQ2BPVVRQVVRfRk9STUFUXCooQydcZlIgbGlua2VyIHNjcmlwdCBjb21tYW5kLgorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKK1ByaW50IGEgc3VtbWFyeSBvZiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKy5JUCAiXGZCXC1cLXRhcmdldFwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0LWhlbHAiCitQcmludCBhIHN1bW1hcnkgb2YgYWxsIHRhcmdldCBzcGVjaWZpYyBvcHRpb25zIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCisuSVAgIlxmQlwtTWFwPVxmUlxmSW1hcGZpbGVcZlIiIDQKKy5JWCBJdGVtICItTWFwPW1hcGZpbGUiCitQcmludCBhIGxpbmsgbWFwIHRvIHRoZSBmaWxlIFxmSW1hcGZpbGVcZlIuICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZQorXCZcZkJcLU1cZlIgb3B0aW9uLCBhYm92ZS4KKy5JUCAiXGZCXC1cLW5vXC1rZWVwXC1tZW1vcnlcZlIiIDQKKy5JWCBJdGVtICItLW5vLWtlZXAtbWVtb3J5IgorXCZcZkJsZFxmUiBub3JtYWxseSBvcHRpbWl6ZXMgZm9yIHNwZWVkIG92ZXIgbWVtb3J5IHVzYWdlIGJ5IGNhY2hpbmcgdGhlCitzeW1ib2wgdGFibGVzIG9mIGlucHV0IGZpbGVzIGluIG1lbW9yeS4gIFRoaXMgb3B0aW9uIHRlbGxzIFxmQmxkXGZSIHRvCitpbnN0ZWFkIG9wdGltaXplIGZvciBtZW1vcnkgdXNhZ2UsIGJ5IHJlcmVhZGluZyB0aGUgc3ltYm9sIHRhYmxlcyBhcworbmVjZXNzYXJ5LiAgVGhpcyBtYXkgYmUgcmVxdWlyZWQgaWYgXGZCbGRcZlIgcnVucyBvdXQgb2YgbWVtb3J5IHNwYWNlCit3aGlsZSBsaW5raW5nIGEgbGFyZ2UgZXhlY3V0YWJsZS4KKy5JUCAiXGZCXC1cLW5vXC11bmRlZmluZWRcZlIiIDQKKy5JWCBJdGVtICItLW5vLXVuZGVmaW5lZCIKKy5QRCAwCisuSVAgIlxmQlwteiBkZWZzXGZSIiA0CisuSVggSXRlbSAiLXogZGVmcyIKKy5QRAorUmVwb3J0IHVucmVzb2x2ZWQgc3ltYm9sIHJlZmVyZW5jZXMgZnJvbSByZWd1bGFyIG9iamVjdCBmaWxlcy4gIFRoaXMKK2lzIGRvbmUgZXZlbiBpZiB0aGUgbGlua2VyIGlzIGNyZWF0aW5nIGEgbm9uLXN5bWJvbGljIHNoYXJlZCBsaWJyYXJ5LgorVGhlIHN3aXRjaCBcZkJcLVwtW25vXC1dYWxsb3dcLXNobGliXC11bmRlZmluZWRcZlIgY29udHJvbHMgdGhlCitiZWhhdmlvdXIgZm9yIHJlcG9ydGluZyB1bnJlc29sdmVkIHJlZmVyZW5jZXMgZm91bmQgaW4gc2hhcmVkCitsaWJyYXJpZXMgYmVpbmcgbGlua2VkIGluLgorLklQICJcZkJcLVwtYWxsb3dcLW11bHRpcGxlXC1kZWZpbml0aW9uXGZSIiA0CisuSVggSXRlbSAiLS1hbGxvdy1tdWx0aXBsZS1kZWZpbml0aW9uIgorLlBEIDAKKy5JUCAiXGZCXC16IG11bGRlZnNcZlIiIDQKKy5JWCBJdGVtICIteiBtdWxkZWZzIgorLlBECitOb3JtYWxseSB3aGVuIGEgc3ltYm9sIGlzIGRlZmluZWQgbXVsdGlwbGUgdGltZXMsIHRoZSBsaW5rZXIgd2lsbAorcmVwb3J0IGEgZmF0YWwgZXJyb3IuIFRoZXNlIG9wdGlvbnMgYWxsb3cgbXVsdGlwbGUgZGVmaW5pdGlvbnMgYW5kIHRoZQorZmlyc3QgZGVmaW5pdGlvbiB3aWxsIGJlIHVzZWQuCisuSVAgIlxmQlwtXC1hbGxvd1wtc2hsaWJcLXVuZGVmaW5lZFxmUiIgNAorLklYIEl0ZW0gIi0tYWxsb3ctc2hsaWItdW5kZWZpbmVkIgorLlBEIDAKKy5JUCAiXGZCXC1cLW5vXC1hbGxvd1wtc2hsaWJcLXVuZGVmaW5lZFxmUiIgNAorLklYIEl0ZW0gIi0tbm8tYWxsb3ctc2hsaWItdW5kZWZpbmVkIgorLlBECitBbGxvd3Mgb3IgZGlzYWxsb3dzIHVuZGVmaW5lZCBzeW1ib2xzIGluIHNoYXJlZCBsaWJyYXJpZXMuCitUaGlzIHN3aXRjaCBpcyBzaW1pbGFyIHRvIFxmQlwtXC1ub1wtdW5kZWZpbmVkXGZSIGV4Y2VwdCB0aGF0IGl0CitkZXRlcm1pbmVzIHRoZSBiZWhhdmlvdXIgd2hlbiB0aGUgdW5kZWZpbmVkIHN5bWJvbHMgYXJlIGluIGEKK3NoYXJlZCBsaWJyYXJ5IHJhdGhlciB0aGFuIGEgcmVndWxhciBvYmplY3QgZmlsZS4gIEl0IGRvZXMgbm90IGFmZmVjdAoraG93IHVuZGVmaW5lZCBzeW1ib2xzIGluIHJlZ3VsYXIgb2JqZWN0IGZpbGVzIGFyZSBoYW5kbGVkLgorLlNwCitUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gcmVwb3J0IGVycm9ycyBmb3IgYW55IHVuZGVmaW5lZCBzeW1ib2xzCityZWZlcmVuY2VkIGluIHNoYXJlZCBsaWJyYXJpZXMgaWYgdGhlIGxpbmtlciBpcyBiZWluZyB1c2VkIHRvIGNyZWF0ZQorYW4gZXhlY3V0YWJsZSwgYnV0IHRvIGFsbG93IHRoZW0gaWYgdGhlIGxpbmtlciBpcyBiZWluZyB1c2VkIHRvIGNyZWF0ZQorYSBzaGFyZWQgbGlicmFyeS4KKy5TcAorVGhlIHJlYXNvbnMgZm9yIGFsbG93aW5nIHVuZGVmaW5lZCBzeW1ib2wgcmVmZXJlbmNlcyBpbiBzaGFyZWQKK2xpYnJhcmllcyBzcGVjaWZpZWQgYXQgbGluayB0aW1lIGFyZSB0aGF0OgorLlJTIDQKKy5JUCAiXChidSIgNAorQSBzaGFyZWQgbGlicmFyeSBzcGVjaWZpZWQgYXQgbGluayB0aW1lIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZQordGhhdCBpcyBhdmFpbGFibGUgYXQgbG9hZCB0aW1lLCBzbyB0aGUgc3ltYm9sIG1pZ2h0IGFjdHVhbGx5IGJlCityZXNvbHZhYmxlIGF0IGxvYWQgdGltZS4KKy5JUCAiXChidSIgNAorVGhlcmUgYXJlIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMsIGVnIEJlT1MgYW5kIFxzLTFIUFBBXHMwLCB3aGVyZSB1bmRlZmluZWQKK3N5bWJvbHMgaW4gc2hhcmVkIGxpYnJhcmllcyBhcmUgbm9ybWFsLgorLlNwCitUaGUgQmVPUyBrZXJuZWwgZm9yIGV4YW1wbGUgcGF0Y2hlcyBzaGFyZWQgbGlicmFyaWVzIGF0IGxvYWQgdGltZSB0bworc2VsZWN0IHdoaWNoZXZlciBmdW5jdGlvbiBpcyBtb3N0IGFwcHJvcHJpYXRlIGZvciB0aGUgY3VycmVudAorYXJjaGl0ZWN0dXJlLiAgVGhpcyBpcyB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gZHluYW1pY2FsbHkgc2VsZWN0IGFuCithcHByb3ByaWF0ZSBtZW1zZXQgZnVuY3Rpb24uCisuUkUKKy5SUyA0CisuUkUKKy5JUCAiXGZCXC1cLW5vXC11bmRlZmluZWRcLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLW5vLXVuZGVmaW5lZC12ZXJzaW9uIgorTm9ybWFsbHkgd2hlbiBhIHN5bWJvbCBoYXMgYW4gdW5kZWZpbmVkIHZlcnNpb24sIHRoZSBsaW5rZXIgd2lsbCBpZ25vcmUKK2l0LiBUaGlzIG9wdGlvbiBkaXNhbGxvd3Mgc3ltYm9scyB3aXRoIHVuZGVmaW5lZCB2ZXJzaW9uIGFuZCBhIGZhdGFsIGVycm9yCit3aWxsIGJlIGlzc3VlZCBpbnN0ZWFkLgorLklQICJcZkJcLVwtZGVmYXVsdFwtc3ltdmVyXGZSIiA0CisuSVggSXRlbSAiLS1kZWZhdWx0LXN5bXZlciIKK0NyZWF0ZSBhbmQgdXNlIGEgZGVmYXVsdCBzeW1ib2wgdmVyc2lvbiAodGhlIHNvbmFtZSkgZm9yIHVudmVyc2lvbmVkCitleHBvcnRlZCBzeW1ib2xzLgorLklQICJcZkJcLVwtZGVmYXVsdFwtaW1wb3J0ZWRcLXN5bXZlclxmUiIgNAorLklYIEl0ZW0gIi0tZGVmYXVsdC1pbXBvcnRlZC1zeW12ZXIiCitDcmVhdGUgYW5kIHVzZSBhIGRlZmF1bHQgc3ltYm9sIHZlcnNpb24gKHRoZSBzb25hbWUpIGZvciB1bnZlcnNpb25lZAoraW1wb3J0ZWQgc3ltYm9scy4KKy5JUCAiXGZCXC1cLW5vXC13YXJuXC1taXNtYXRjaFxmUiIgNAorLklYIEl0ZW0gIi0tbm8td2Fybi1taXNtYXRjaCIKK05vcm1hbGx5IFxmQmxkXGZSIHdpbGwgZ2l2ZSBhbiBlcnJvciBpZiB5b3UgdHJ5IHRvIGxpbmsgdG9nZXRoZXIgaW5wdXQKK2ZpbGVzIHRoYXQgYXJlIG1pc21hdGNoZWQgZm9yIHNvbWUgcmVhc29uLCBwZXJoYXBzIGJlY2F1c2UgdGhleSBoYXZlCitiZWVuIGNvbXBpbGVkIGZvciBkaWZmZXJlbnQgcHJvY2Vzc29ycyBvciBmb3IgZGlmZmVyZW50IGVuZGlhbm5lc3Nlcy4KK1RoaXMgb3B0aW9uIHRlbGxzIFxmQmxkXGZSIHRoYXQgaXQgc2hvdWxkIHNpbGVudGx5IHBlcm1pdCBzdWNoIHBvc3NpYmxlCitlcnJvcnMuICBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggY2FyZSwgaW4gY2FzZXMgd2hlbiB5b3UKK2hhdmUgdGFrZW4gc29tZSBzcGVjaWFsIGFjdGlvbiB0aGF0IGVuc3VyZXMgdGhhdCB0aGUgbGlua2VyIGVycm9ycyBhcmUKK2luYXBwcm9wcmlhdGUuCisuSVAgIlxmQlwtXC1ub1wtd2Fyblwtc2VhcmNoXC1taXNtYXRjaFxmUiIgNAorLklYIEl0ZW0gIi0tbm8td2Fybi1zZWFyY2gtbWlzbWF0Y2giCitOb3JtYWxseSBcZkJsZFxmUiB3aWxsIGdpdmUgYSB3YXJuaW5nIGlmIGl0IGZpbmRzIGFuIGluY29tcGF0aWJsZQorbGlicmFyeSBkdXJpbmcgYSBsaWJyYXJ5IHNlYXJjaC4gIFRoaXMgb3B0aW9uIHNpbGVuY2VzIHRoZSB3YXJuaW5nLgorLklQICJcZkJcLVwtbm9cLXdob2xlXC1hcmNoaXZlXGZSIiA0CisuSVggSXRlbSAiLS1uby13aG9sZS1hcmNoaXZlIgorVHVybiBvZmYgdGhlIGVmZmVjdCBvZiB0aGUgXGZCXC1cLXdob2xlXC1hcmNoaXZlXGZSIG9wdGlvbiBmb3Igc3Vic2VxdWVudAorYXJjaGl2ZSBmaWxlcy4KKy5JUCAiXGZCXC1cLW5vaW5oaWJpdFwtZXhlY1xmUiIgNAorLklYIEl0ZW0gIi0tbm9pbmhpYml0LWV4ZWMiCitSZXRhaW4gdGhlIGV4ZWN1dGFibGUgb3V0cHV0IGZpbGUgd2hlbmV2ZXIgaXQgaXMgc3RpbGwgdXNhYmxlLgorTm9ybWFsbHksIHRoZSBsaW5rZXIgd2lsbCBub3QgcHJvZHVjZSBhbiBvdXRwdXQgZmlsZSBpZiBpdCBlbmNvdW50ZXJzCitlcnJvcnMgZHVyaW5nIHRoZSBsaW5rIHByb2Nlc3M7IGl0IGV4aXRzIHdpdGhvdXQgd3JpdGluZyBhbiBvdXRwdXQgZmlsZQord2hlbiBpdCBpc3N1ZXMgYW55IGVycm9yIHdoYXRzb2V2ZXIuCisuSVAgIlxmQlwtbm9zdGRsaWJcZlIiIDQKKy5JWCBJdGVtICItbm9zdGRsaWIiCitPbmx5IHNlYXJjaCBsaWJyYXJ5IGRpcmVjdG9yaWVzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIG9uIHRoZQorY29tbWFuZCBsaW5lLiAgTGlicmFyeSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gbGlua2VyIHNjcmlwdHMKKyhpbmNsdWRpbmcgbGlua2VyIHNjcmlwdHMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUpIGFyZSBpZ25vcmVkLgorLklQICJcZkJcLVwtb2Zvcm1hdD1cZlJcZklvdXRwdXQtZm9ybWF0XGZSIiA0CisuSVggSXRlbSAiLS1vZm9ybWF0PW91dHB1dC1mb3JtYXQiCitcJlxmQmxkXGZSIG1heSBiZSBjb25maWd1cmVkIHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBraW5kIG9mIG9iamVjdAorZmlsZS4gIElmIHlvdXIgXGZCbGRcZlIgaXMgY29uZmlndXJlZCB0aGlzIHdheSwgeW91IGNhbiB1c2UgdGhlCitcJlxmQlwtXC1vZm9ybWF0XGZSIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBiaW5hcnkgZm9ybWF0IGZvciB0aGUgb3V0cHV0CitvYmplY3QgZmlsZS4gIEV2ZW4gd2hlbiBcZkJsZFxmUiBpcyBjb25maWd1cmVkIHRvIHN1cHBvcnQgYWx0ZXJuYXRpdmUKK29iamVjdCBmb3JtYXRzLCB5b3UgZG9uJ3QgdXN1YWxseSBuZWVkIHRvIHNwZWNpZnkgdGhpcywgYXMgXGZCbGRcZlIKK3Nob3VsZCBiZSBjb25maWd1cmVkIHRvIHByb2R1Y2UgYXMgYSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgdGhlIG1vc3QKK3VzdWFsIGZvcm1hdCBvbiBlYWNoIG1hY2hpbmUuICBcZklvdXRwdXQtZm9ybWF0XGZSIGlzIGEgdGV4dCBzdHJpbmcsIHRoZQorbmFtZSBvZiBhIHBhcnRpY3VsYXIgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgXHMtMUJGRFxzMCBsaWJyYXJpZXMuICAoWW91IGNhbgorbGlzdCB0aGUgYXZhaWxhYmxlIGJpbmFyeSBmb3JtYXRzIHdpdGggXGZCb2JqZHVtcCBcLWlcZlIuKSAgVGhlIHNjcmlwdAorY29tbWFuZCBcZihDV1wqKENgT1VUUFVUX0ZPUk1BVFwqKEMnXGZSIGNhbiBhbHNvIHNwZWNpZnkgdGhlIG91dHB1dCBmb3JtYXQsIGJ1dAordGhpcyBvcHRpb24gb3ZlcnJpZGVzIGl0LgorLklQICJcZkJcLXBpZVxmUiIgNAorLklYIEl0ZW0gIi1waWUiCisuUEQgMAorLklQICJcZkJcLVwtcGljXC1leGVjdXRhYmxlXGZSIiA0CisuSVggSXRlbSAiLS1waWMtZXhlY3V0YWJsZSIKKy5QRAorQ3JlYXRlIGEgcG9zaXRpb24gaW5kZXBlbmRlbnQgZXhlY3V0YWJsZS4gIFRoaXMgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIG9uCitcJlxzLTFFTEZcczAgcGxhdGZvcm1zLiAgUG9zaXRpb24gaW5kZXBlbmRlbnQgZXhlY3V0YWJsZXMgYXJlIHNpbWlsYXIgdG8gc2hhcmVkCitsaWJyYXJpZXMgaW4gdGhhdCB0aGV5IGFyZSByZWxvY2F0ZWQgYnkgdGhlIGR5bmFtaWMgbGlua2VyIHRvIHRoZSB2aXJ0dWFsCithZGRyZXNzIHRoZSBccy0xT1NcczAgY2hvb3NlcyBmb3IgdGhlbSAod2hpY2ggY2FuIHZhcnkgYmV0d2VlbiBpbnZvY2F0aW9ucykuICBMaWtlCitub3JtYWwgZHluYW1pY2FsbHkgbGlua2VkIGV4ZWN1dGFibGVzIHRoZXkgY2FuIGJlIGV4ZWN1dGVkIGFuZCBzeW1ib2xzCitkZWZpbmVkIGluIHRoZSBleGVjdXRhYmxlIGNhbm5vdCBiZSBvdmVycmlkZGVuIGJ5IHNoYXJlZCBsaWJyYXJpZXMuCisuSVAgIlxmQlwtcW1hZ2ljXGZSIiA0CisuSVggSXRlbSAiLXFtYWdpYyIKK1RoaXMgb3B0aW9uIGlzIGlnbm9yZWQgZm9yIExpbnV4IGNvbXBhdGliaWxpdHkuCisuSVAgIlxmQlwtUXlcZlIiIDQKKy5JWCBJdGVtICItUXkiCitUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGZvciBccy0xU1ZSNFxzMCBjb21wYXRpYmlsaXR5LgorLklQICJcZkJcLVwtcmVsYXhcZlIiIDQKKy5JWCBJdGVtICItLXJlbGF4IgorLlBEIDAKKy5JUCAiXGZCXC1cLW5vXC1yZWxheFxmUiIgNAorLklYIEl0ZW0gIi0tbm8tcmVsYXgiCisuUEQKK0FuIG9wdGlvbiB3aXRoIG1hY2hpbmUgZGVwZW5kZW50IGVmZmVjdHMuCitUaGlzIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBhIGZldyB0YXJnZXRzLgorLlNwCitPbiBzb21lIHBsYXRmb3JtcyB0aGUgXGZCXC1cLXJlbGF4XGZSIG9wdGlvbiBwZXJmb3JtcyB0YXJnZXQgc3BlY2lmaWMsCitnbG9iYWwgb3B0aW1pemF0aW9ucyB0aGF0IGJlY29tZSBwb3NzaWJsZSB3aGVuIHRoZSBsaW5rZXIgcmVzb2x2ZXMKK2FkZHJlc3NpbmcgaW4gdGhlIHByb2dyYW0sIHN1Y2ggYXMgcmVsYXhpbmcgYWRkcmVzcyBtb2RlcywKK3N5bnRoZXNpemluZyBuZXcgaW5zdHJ1Y3Rpb25zLCBzZWxlY3Rpbmcgc2hvcnRlciB2ZXJzaW9uIG9mIGN1cnJlbnQKK2luc3RydWN0aW9ucywgYW5kIGNvbWJpbmlnIGNvbnN0YW50IHZhbHVlcy4KKy5TcAorT24gc29tZSBwbGF0Zm9ybXMgdGhlc2UgbGluayB0aW1lIGdsb2JhbCBvcHRpbWl6YXRpb25zIG1heSBtYWtlIHN5bWJvbGljCitkZWJ1Z2dpbmcgb2YgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGltcG9zc2libGUuCitUaGlzIGlzIGtub3duIHRvIGJlIHRoZSBjYXNlIGZvciB0aGUgTWF0c3VzaGl0YSBccy0xTU4xMDIwMFxzMCBhbmQgXHMtMU1OMTAzMDBcczAKK2ZhbWlseSBvZiBwcm9jZXNzb3JzLgorLlNwCitPbiBwbGF0Zm9ybXMgd2hlcmUgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLCBcZkJcLVwtcmVsYXhcZlIgaXMgYWNjZXB0ZWQsCitidXQgaWdub3JlZC4KKy5TcAorT24gcGxhdGZvcm1zIHdoZXJlIFxmQlwtXC1yZWxheFxmUiBpcyBhY2NlcHRlZCB0aGUgb3B0aW9uCitcJlxmQlwtXC1ub1wtcmVsYXhcZlIgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgZmVhdHVyZS4KKy5JUCAiXGZCXC1cLXJldGFpblwtc3ltYm9sc1wtZmlsZT1cZlJcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tcmV0YWluLXN5bWJvbHMtZmlsZT1maWxlbmFtZSIKK1JldGFpbiBcZklvbmx5XGZSIHRoZSBzeW1ib2xzIGxpc3RlZCBpbiB0aGUgZmlsZSBcZklmaWxlbmFtZVxmUiwKK2Rpc2NhcmRpbmcgYWxsIG90aGVycy4gIFxmSWZpbGVuYW1lXGZSIGlzIHNpbXBseSBhIGZsYXQgZmlsZSwgd2l0aCBvbmUKK3N5bWJvbCBuYW1lIHBlciBsaW5lLiAgVGhpcyBvcHRpb24gaXMgZXNwZWNpYWxseSB1c2VmdWwgaW4gZW52aXJvbm1lbnRzCisoc3VjaCBhcyBWeFdvcmtzKQord2hlcmUgYSBsYXJnZSBnbG9iYWwgc3ltYm9sIHRhYmxlIGlzIGFjY3VtdWxhdGVkIGdyYWR1YWxseSwgdG8gY29uc2VydmUKK3J1bi10aW1lIG1lbW9yeS4KKy5TcAorXCZcZkJcLVwtcmV0YWluXC1zeW1ib2xzXC1maWxlXGZSIGRvZXMgXGZJbm90XGZSIGRpc2NhcmQgdW5kZWZpbmVkIHN5bWJvbHMsCitvciBzeW1ib2xzIG5lZWRlZCBmb3IgcmVsb2NhdGlvbnMuCisuU3AKK1lvdSBtYXkgb25seSBzcGVjaWZ5IFxmQlwtXC1yZXRhaW5cLXN5bWJvbHNcLWZpbGVcZlIgb25jZSBpbiB0aGUgY29tbWFuZAorbGluZS4gIEl0IG92ZXJyaWRlcyBcZkJcLXNcZlIgYW5kIFxmQlwtU1xmUi4KKy5JUCAiXGZCXC1ycGF0aD1cZlJcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItcnBhdGg9ZGlyIgorQWRkIGEgZGlyZWN0b3J5IHRvIHRoZSBydW50aW1lIGxpYnJhcnkgc2VhcmNoIHBhdGguICBUaGlzIGlzIHVzZWQgd2hlbgorbGlua2luZyBhbiBccy0xRUxGXHMwIGV4ZWN1dGFibGUgd2l0aCBzaGFyZWQgb2JqZWN0cy4gIEFsbCBcZkJcLXJwYXRoXGZSCithcmd1bWVudHMgYXJlIGNvbmNhdGVuYXRlZCBhbmQgcGFzc2VkIHRvIHRoZSBydW50aW1lIGxpbmtlciwgd2hpY2ggdXNlcwordGhlbSB0byBsb2NhdGUgc2hhcmVkIG9iamVjdHMgYXQgcnVudGltZS4gIFRoZSBcZkJcLXJwYXRoXGZSIG9wdGlvbiBpcworYWxzbyB1c2VkIHdoZW4gbG9jYXRpbmcgc2hhcmVkIG9iamVjdHMgd2hpY2ggYXJlIG5lZWRlZCBieSBzaGFyZWQKK29iamVjdHMgZXhwbGljaXRseSBpbmNsdWRlZCBpbiB0aGUgbGluazsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUKK1wmXGZCXC1ycGF0aFwtbGlua1xmUiBvcHRpb24uICBJZiBcZkJcLXJwYXRoXGZSIGlzIG5vdCB1c2VkIHdoZW4gbGlua2luZyBhbgorXCZccy0xRUxGXHMwIGV4ZWN1dGFibGUsIHRoZSBjb250ZW50cyBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK1wmXGYoQ1dcKihDYExEX1JVTl9QQVRIXCooQydcZlIgd2lsbCBiZSB1c2VkIGlmIGl0IGlzIGRlZmluZWQuCisuU3AKK1RoZSBcZkJcLXJwYXRoXGZSIG9wdGlvbiBtYXkgYWxzbyBiZSB1c2VkIG9uIFN1bk9TLiAgQnkgZGVmYXVsdCwgb24KK1N1bk9TLCB0aGUgbGlua2VyIHdpbGwgZm9ybSBhIHJ1bnRpbWUgc2VhcmNoIHBhdGNoIG91dCBvZiBhbGwgdGhlCitcJlxmQlwtTFxmUiBvcHRpb25zIGl0IGlzIGdpdmVuLiAgSWYgYSBcZkJcLXJwYXRoXGZSIG9wdGlvbiBpcyB1c2VkLCB0aGUKK3J1bnRpbWUgc2VhcmNoIHBhdGggd2lsbCBiZSBmb3JtZWQgZXhjbHVzaXZlbHkgdXNpbmcgdGhlIFxmQlwtcnBhdGhcZlIKK29wdGlvbnMsIGlnbm9yaW5nIHRoZSBcZkJcLUxcZlIgb3B0aW9ucy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHVzaW5nCitnY2MsIHdoaWNoIGFkZHMgbWFueSBcZkJcLUxcZlIgb3B0aW9ucyB3aGljaCBtYXkgYmUgb24gXHMtMU5GU1xzMCBtb3VudGVkCitmaWxlIHN5c3RlbXMuCisuU3AKK0ZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgXHMtMUVMRlxzMCBsaW5rZXJzLCBpZiB0aGUgXGZCXC1SXGZSIG9wdGlvbiBpcworZm9sbG93ZWQgYnkgYSBkaXJlY3RvcnkgbmFtZSwgcmF0aGVyIHRoYW4gYSBmaWxlIG5hbWUsIGl0IGlzIHRyZWF0ZWQgYXMKK3RoZSBcZkJcLXJwYXRoXGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1ycGF0aFwtbGluaz1cZlJcZklkaXJcZlIiIDQKKy5JWCBJdGVtICItcnBhdGgtbGluaz1kaXIiCitXaGVuIHVzaW5nIFxzLTFFTEZcczAgb3IgU3VuT1MsIG9uZSBzaGFyZWQgbGlicmFyeSBtYXkgcmVxdWlyZSBhbm90aGVyLiAgVGhpcworaGFwcGVucyB3aGVuIGFuIFxmKENXXCooQ2BsZCBcLXNoYXJlZFwqKEMnXGZSIGxpbmsgaW5jbHVkZXMgYSBzaGFyZWQgbGlicmFyeSBhcyBvbmUKK29mIHRoZSBpbnB1dCBmaWxlcy4KKy5TcAorV2hlbiB0aGUgbGlua2VyIGVuY291bnRlcnMgc3VjaCBhIGRlcGVuZGVuY3kgd2hlbiBkb2luZyBhIG5vbi1zaGFyZWQsCitub24tcmVsb2NhdGFibGUgbGluaywgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHRyeSB0byBsb2NhdGUgdGhlIHJlcXVpcmVkCitzaGFyZWQgbGlicmFyeSBhbmQgaW5jbHVkZSBpdCBpbiB0aGUgbGluaywgaWYgaXQgaXMgbm90IGluY2x1ZGVkCitleHBsaWNpdGx5LiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBcZkJcLXJwYXRoXC1saW5rXGZSIG9wdGlvbgorc3BlY2lmaWVzIHRoZSBmaXJzdCBzZXQgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoLiAgVGhlCitcJlxmQlwtcnBhdGhcLWxpbmtcZlIgb3B0aW9uIG1heSBzcGVjaWZ5IGEgc2VxdWVuY2Ugb2YgZGlyZWN0b3J5IG5hbWVzCitlaXRoZXIgYnkgc3BlY2lmeWluZyBhIGxpc3Qgb2YgbmFtZXMgc2VwYXJhdGVkIGJ5IGNvbG9ucywgb3IgYnkKK2FwcGVhcmluZyBtdWx0aXBsZSB0aW1lcy4KKy5TcAorVGhpcyBvcHRpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uIGFzIGl0IG92ZXJyaWRlcyB0aGUgc2VhcmNoIHBhdGgKK3RoYXQgbWF5IGhhdmUgYmVlbiBoYXJkIGNvbXBpbGVkIGludG8gYSBzaGFyZWQgbGlicmFyeS4gSW4gc3VjaCBhIGNhc2UgaXQKK2lzIHBvc3NpYmxlIHRvIHVzZSB1bmludGVudGlvbmFsbHkgYSBkaWZmZXJlbnQgc2VhcmNoIHBhdGggdGhhbiB0aGUKK3J1bnRpbWUgbGlua2VyIHdvdWxkIGRvLgorLlNwCitUaGUgbGlua2VyIHVzZXMgdGhlIGZvbGxvd2luZyBzZWFyY2ggcGF0aHMgdG8gbG9jYXRlIHJlcXVpcmVkIHNoYXJlZAorbGlicmFyaWVzOgorLlJTIDQKKy5JUCAiMS4iIDQKK0FueSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgXGZCXC1ycGF0aFwtbGlua1xmUiBvcHRpb25zLgorLklQICIyLiIgNAorQW55IGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSBcZkJcLXJwYXRoXGZSIG9wdGlvbnMuICBUaGUgZGlmZmVyZW5jZQorYmV0d2VlbiBcZkJcLXJwYXRoXGZSIGFuZCBcZkJcLXJwYXRoXC1saW5rXGZSIGlzIHRoYXQgZGlyZWN0b3JpZXMKK3NwZWNpZmllZCBieSBcZkJcLXJwYXRoXGZSIG9wdGlvbnMgYXJlIGluY2x1ZGVkIGluIHRoZSBleGVjdXRhYmxlIGFuZAordXNlZCBhdCBydW50aW1lLCB3aGVyZWFzIHRoZSBcZkJcLXJwYXRoXC1saW5rXGZSIG9wdGlvbiBpcyBvbmx5IGVmZmVjdGl2ZQorYXQgbGluayB0aW1lLiBTZWFyY2hpbmcgXGZCXC1ycGF0aFxmUiBpbiB0aGlzIHdheSBpcyBvbmx5IHN1cHBvcnRlZAorYnkgbmF0aXZlIGxpbmtlcnMgYW5kIGNyb3NzIGxpbmtlcnMgd2hpY2ggaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgd2l0aAordGhlIFxmQlwtXC13aXRoXC1zeXNyb290XGZSIG9wdGlvbi4KKy5JUCAiMy4iIDQKK09uIGFuIFxzLTFFTEZcczAgc3lzdGVtLCBmb3IgbmF0aXZlIGxpbmtlcnMsIGlmIHRoZSBcZkJcLXJwYXRoXGZSIGFuZAorXCZcZkJcLXJwYXRoXC1saW5rXGZSIG9wdGlvbnMgd2VyZSBub3QgdXNlZCwgc2VhcmNoIHRoZSBjb250ZW50cyBvZiB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlIFxmKENXXCooQ2BMRF9SVU5fUEFUSFwqKEMnXGZSLgorLklQICI0LiIgNAorT24gU3VuT1MsIGlmIHRoZSBcZkJcLXJwYXRoXGZSIG9wdGlvbiB3YXMgbm90IHVzZWQsIHNlYXJjaCBhbnkKK2RpcmVjdG9yaWVzIHNwZWNpZmllZCB1c2luZyBcZkJcLUxcZlIgb3B0aW9ucy4KKy5JUCAiNS4iIDQKK0ZvciBhIG5hdGl2ZSBsaW5rZXIsIHRoZSBzZWFyY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGUgXGYoQ1dcKihDYExEX0xJQlJBUllfUEFUSFwqKEMnXGZSLgorLklQICI2LiIgNAorRm9yIGEgbmF0aXZlIFxzLTFFTEZcczAgbGlua2VyLCB0aGUgZGlyZWN0b3JpZXMgaW4gXGYoQ1dcKihDYERUX1JVTlBBVEhcKihDJ1xmUiBvcgorXCZcZihDV1wqKENgRFRfUlBBVEhcKihDJ1xmUiBvZiBhIHNoYXJlZCBsaWJyYXJ5IGFyZSBzZWFyY2hlZCBmb3Igc2hhcmVkCitsaWJyYXJpZXMgbmVlZGVkIGJ5IGl0LiBUaGUgXGYoQ1dcKihDYERUX1JQQVRIXCooQydcZlIgZW50cmllcyBhcmUgaWdub3JlZCBpZgorXCZcZihDV1wqKENgRFRfUlVOUEFUSFwqKEMnXGZSIGVudHJpZXMgZXhpc3QuCisuSVAgIjcuIiA0CitUaGUgZGVmYXVsdCBkaXJlY3Rvcmllcywgbm9ybWFsbHkgXGZJL2xpYlxmUiBhbmQgXGZJL3Vzci9saWJcZlIuCisuSVAgIjguIiA0CitGb3IgYSBuYXRpdmUgbGlua2VyIG9uIGFuIFxzLTFFTEZcczAgc3lzdGVtLCBpZiB0aGUgZmlsZSBcZkkvZXRjL2xkLnNvLmNvbmZcZlIKK2V4aXN0cywgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgZm91bmQgaW4gdGhhdCBmaWxlLgorLlJFCisuUlMgNAorLlNwCitJZiB0aGUgcmVxdWlyZWQgc2hhcmVkIGxpYnJhcnkgaXMgbm90IGZvdW5kLCB0aGUgbGlua2VyIHdpbGwgaXNzdWUgYQord2FybmluZyBhbmQgY29udGludWUgd2l0aCB0aGUgbGluay4KKy5SRQorLklQICJcZkJcLXNoYXJlZFxmUiIgNAorLklYIEl0ZW0gIi1zaGFyZWQiCisuUEQgMAorLklQICJcZkJcLUJzaGFyZWFibGVcZlIiIDQKKy5JWCBJdGVtICItQnNoYXJlYWJsZSIKKy5QRAorQ3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkuICBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBvbiBccy0xRUxGXHMwLCBccy0xWENPRkZcczAKK2FuZCBTdW5PUyBwbGF0Zm9ybXMuICBPbiBTdW5PUywgdGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEKK3NoYXJlZCBsaWJyYXJ5IGlmIHRoZSBcZkJcLWVcZlIgb3B0aW9uIGlzIG5vdCB1c2VkIGFuZCB0aGVyZSBhcmUKK3VuZGVmaW5lZCBzeW1ib2xzIGluIHRoZSBsaW5rLgorLklQICJcZkJcLVwtc29ydFwtY29tbW9uXGZSIiA0CisuSVggSXRlbSAiLS1zb3J0LWNvbW1vbiIKKy5QRCAwCisuSVAgIlxmQlwtXC1zb3J0XC1jb21tb249YXNjZW5kaW5nXGZSIiA0CisuSVggSXRlbSAiLS1zb3J0LWNvbW1vbj1hc2NlbmRpbmciCisuSVAgIlxmQlwtXC1zb3J0XC1jb21tb249ZGVzY2VuZGluZ1xmUiIgNAorLklYIEl0ZW0gIi0tc29ydC1jb21tb249ZGVzY2VuZGluZyIKKy5QRAorVGhpcyBvcHRpb24gdGVsbHMgXGZCbGRcZlIgdG8gc29ydCB0aGUgY29tbW9uIHN5bWJvbHMgYnkgYWxpZ25tZW50IGluCithc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlciB3aGVuIGl0IHBsYWNlcyB0aGVtIGluIHRoZSBhcHByb3ByaWF0ZSBvdXRwdXQKK3NlY3Rpb25zLiAgVGhlIHN5bWJvbCBhbGlnbm1lbnRzIGNvbnNpZGVyZWQgYXJlIHNpeHRlZW4tYnl0ZSBvciBsYXJnZXIsCitlaWdodC1ieXRlLCBmb3VyLWJ5dGUsIHR3by1ieXRlLCBhbmQgb25lLWJ5dGUuIFRoaXMgaXMgdG8gcHJldmVudCBnYXBzCitiZXR3ZWVuIHN5bWJvbHMgZHVlIHRvIGFsaWdubWVudCBjb25zdHJhaW50cy4gIElmIG5vIHNvcnRpbmcgb3JkZXIgaXMKK3NwZWNpZmllZCwgdGhlbiBkZXNjZW5kaW5nIG9yZGVyIGlzIGFzc3VtZWQuCisuSVAgIlxmQlwtXC1zb3J0XC1zZWN0aW9uPW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLXNvcnQtc2VjdGlvbj1uYW1lIgorVGhpcyBvcHRpb24gd2lsbCBhcHBseSBcZihDV1wqKENgU09SVF9CWV9OQU1FXCooQydcZlIgdG8gYWxsIHdpbGRjYXJkIHNlY3Rpb24KK3BhdHRlcm5zIGluIHRoZSBsaW5rZXIgc2NyaXB0LgorLklQICJcZkJcLVwtc29ydFwtc2VjdGlvbj1hbGlnbm1lbnRcZlIiIDQKKy5JWCBJdGVtICItLXNvcnQtc2VjdGlvbj1hbGlnbm1lbnQiCitUaGlzIG9wdGlvbiB3aWxsIGFwcGx5IFxmKENXXCooQ2BTT1JUX0JZX0FMSUdOTUVOVFwqKEMnXGZSIHRvIGFsbCB3aWxkY2FyZCBzZWN0aW9uCitwYXR0ZXJucyBpbiB0aGUgbGlua2VyIHNjcmlwdC4KKy5JUCAiXGZCXC1cLXNwbGl0XC1ieVwtZmlsZVs9XGZSXGZJc2l6ZVxmUlxmQl1cZlIiIDQKKy5JWCBJdGVtICItLXNwbGl0LWJ5LWZpbGVbPXNpemVdIgorU2ltaWxhciB0byBcZkJcLVwtc3BsaXRcLWJ5XC1yZWxvY1xmUiBidXQgY3JlYXRlcyBhIG5ldyBvdXRwdXQgc2VjdGlvbiBmb3IKK2VhY2ggaW5wdXQgZmlsZSB3aGVuIFxmSXNpemVcZlIgaXMgcmVhY2hlZC4gIFxmSXNpemVcZlIgZGVmYXVsdHMgdG8gYQorc2l6ZSBvZiAxIGlmIG5vdCBnaXZlbi4KKy5JUCAiXGZCXC1cLXNwbGl0XC1ieVwtcmVsb2NbPVxmUlxmSWNvdW50XGZSXGZCXVxmUiIgNAorLklYIEl0ZW0gIi0tc3BsaXQtYnktcmVsb2NbPWNvdW50XSIKK1RyaWVzIHRvIGNyZWF0ZXMgZXh0cmEgc2VjdGlvbnMgaW4gdGhlIG91dHB1dCBmaWxlIHNvIHRoYXQgbm8gc2luZ2xlCitvdXRwdXQgc2VjdGlvbiBpbiB0aGUgZmlsZSBjb250YWlucyBtb3JlIHRoYW4gXGZJY291bnRcZlIgcmVsb2NhdGlvbnMuCitUaGlzIGlzIHVzZWZ1bCB3aGVuIGdlbmVyYXRpbmcgaHVnZSByZWxvY2F0YWJsZSBmaWxlcyBmb3IgZG93bmxvYWRpbmcgaW50bworY2VydGFpbiByZWFsIHRpbWUga2VybmVscyB3aXRoIHRoZSBccy0xQ09GRlxzMCBvYmplY3QgZmlsZSBmb3JtYXQ7IHNpbmNlIFxzLTFDT0ZGXHMwCitjYW5ub3QgcmVwcmVzZW50IG1vcmUgdGhhbiA2NTUzNSByZWxvY2F0aW9ucyBpbiBhIHNpbmdsZSBzZWN0aW9uLiAgTm90ZQordGhhdCB0aGlzIHdpbGwgZmFpbCB0byB3b3JrIHdpdGggb2JqZWN0IGZpbGUgZm9ybWF0cyB3aGljaCBkbyBub3QKK3N1cHBvcnQgYXJiaXRyYXJ5IHNlY3Rpb25zLiAgVGhlIGxpbmtlciB3aWxsIG5vdCBzcGxpdCB1cCBpbmRpdmlkdWFsCitpbnB1dCBzZWN0aW9ucyBmb3IgcmVkaXN0cmlidXRpb24sIHNvIGlmIGEgc2luZ2xlIGlucHV0IHNlY3Rpb24gY29udGFpbnMKK21vcmUgdGhhbiBcZkljb3VudFxmUiByZWxvY2F0aW9ucyBvbmUgb3V0cHV0IHNlY3Rpb24gd2lsbCBjb250YWluIHRoYXQKK21hbnkgcmVsb2NhdGlvbnMuICBcZkljb3VudFxmUiBkZWZhdWx0cyB0byBhIHZhbHVlIG9mIDMyNzY4LgorLklQICJcZkJcLVwtc3RhdHNcZlIiIDQKKy5JWCBJdGVtICItLXN0YXRzIgorQ29tcHV0ZSBhbmQgZGlzcGxheSBzdGF0aXN0aWNzIGFib3V0IHRoZSBvcGVyYXRpb24gb2YgdGhlIGxpbmtlciwgc3VjaAorYXMgZXhlY3V0aW9uIHRpbWUgYW5kIG1lbW9yeSB1c2FnZS4KKy5JUCAiXGZCXC1cLXN5c3Jvb3Q9XGZSXGZJZGlyZWN0b3J5XGZSIiA0CisuSVggSXRlbSAiLS1zeXNyb290PWRpcmVjdG9yeSIKK1VzZSBcZklkaXJlY3RvcnlcZlIgYXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeXNyb290LCBvdmVycmlkaW5nIHRoZQorY29uZmlndXJlLXRpbWUgZGVmYXVsdC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IGxpbmtlcnMKK3RoYXQgd2VyZSBjb25maWd1cmVkIHVzaW5nIFxmQlwtXC13aXRoXC1zeXNyb290XGZSLgorLklQICJcZkJcLVwtdHJhZGl0aW9uYWxcLWZvcm1hdFxmUiIgNAorLklYIEl0ZW0gIi0tdHJhZGl0aW9uYWwtZm9ybWF0IgorRm9yIHNvbWUgdGFyZ2V0cywgdGhlIG91dHB1dCBvZiBcZkJsZFxmUiBpcyBkaWZmZXJlbnQgaW4gc29tZSB3YXlzIGZyb20KK3RoZSBvdXRwdXQgb2Ygc29tZSBleGlzdGluZyBsaW5rZXIuICBUaGlzIHN3aXRjaCByZXF1ZXN0cyBcZkJsZFxmUiB0bwordXNlIHRoZSB0cmFkaXRpb25hbCBmb3JtYXQgaW5zdGVhZC4KKy5TcAorRm9yIGV4YW1wbGUsIG9uIFN1bk9TLCBcZkJsZFxmUiBjb21iaW5lcyBkdXBsaWNhdGUgZW50cmllcyBpbiB0aGUKK3N5bWJvbCBzdHJpbmcgdGFibGUuICBUaGlzIGNhbiByZWR1Y2UgdGhlIHNpemUgb2YgYW4gb3V0cHV0IGZpbGUgd2l0aAorZnVsbCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYnkgb3ZlciAzMCBwZXJjZW50LiAgVW5mb3J0dW5hdGVseSwgdGhlIFN1bk9TCitcJlxmKENXXCooQ2BkYnhcKihDJ1xmUiBwcm9ncmFtIGNhbiBub3QgcmVhZCB0aGUgcmVzdWx0aW5nIHByb2dyYW0gKFxmKENXXCooQ2BnZGJcKihDJ1xmUiBoYXMgbm8KK3Ryb3VibGUpLiAgVGhlIFxmQlwtXC10cmFkaXRpb25hbFwtZm9ybWF0XGZSIHN3aXRjaCB0ZWxscyBcZkJsZFxmUiB0byBub3QKK2NvbWJpbmUgZHVwbGljYXRlIGVudHJpZXMuCisuSVAgIlxmQlwtXC1zZWN0aW9uXC1zdGFydD1cZlJcZklzZWN0aW9ubmFtZVxmUlxmQj1cZlJcZklvcmdcZlIiIDQKKy5JWCBJdGVtICItLXNlY3Rpb24tc3RhcnQ9c2VjdGlvbm5hbWU9b3JnIgorTG9jYXRlIGEgc2VjdGlvbiBpbiB0aGUgb3V0cHV0IGZpbGUgYXQgdGhlIGFic29sdXRlCithZGRyZXNzIGdpdmVuIGJ5IFxmSW9yZ1xmUi4gIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uIGFzIG1hbnkKK3RpbWVzIGFzIG5lY2Vzc2FyeSB0byBsb2NhdGUgbXVsdGlwbGUgc2VjdGlvbnMgaW4gdGhlIGNvbW1hbmQKK2xpbmUuCitcJlxmSW9yZ1xmUiBtdXN0IGJlIGEgc2luZ2xlIGhleGFkZWNpbWFsIGludGVnZXI7Citmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGxpbmtlcnMsIHlvdSBtYXkgb21pdCB0aGUgbGVhZGluZworXCZcZkIweFxmUiB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBoZXhhZGVjaW1hbCB2YWx1ZXMuICBcZklOb3RlOlxmUiB0aGVyZQorc2hvdWxkIGJlIG5vIHdoaXRlIHNwYWNlIGJldHdlZW4gXGZJc2VjdGlvbm5hbWVcZlIsIHRoZSBlcXVhbHMKK3NpZ24gKCJcZkI9XGZSIiksIGFuZCBcZklvcmdcZlIuCisuSVAgIlxmQlwtVGJzcz1cZlJcZklvcmdcZlIiIDQKKy5JWCBJdGVtICItVGJzcz1vcmciCisuUEQgMAorLklQICJcZkJcLVRkYXRhPVxmUlxmSW9yZ1xmUiIgNAorLklYIEl0ZW0gIi1UZGF0YT1vcmciCisuSVAgIlxmQlwtVHRleHQ9XGZSXGZJb3JnXGZSIiA0CisuSVggSXRlbSAiLVR0ZXh0PW9yZyIKKy5QRAorU2FtZSBhcyBcZkJcLVwtc2VjdGlvblwtc3RhcnRcZlIsIHdpdGggXGYoQ1dcKihDYC5ic3NcKihDJ1xmUiwgXGYoQ1dcKihDYC5kYXRhXCooQydcZlIgb3IKK1wmXGYoQ1dcKihDYC50ZXh0XCooQydcZlIgYXMgdGhlIFxmSXNlY3Rpb25uYW1lXGZSLgorLklQICJcZkJcLVR0ZXh0XC1zZWdtZW50PVxmUlxmSW9yZ1xmUiIgNAorLklYIEl0ZW0gIi1UdGV4dC1zZWdtZW50PW9yZyIKK1doZW4gY3JlYXRpbmcgYW4gXHMtMUVMRlxzMCBleGVjdXRhYmxlIG9yIHNoYXJlZCBvYmplY3QsIGl0IHdpbGwgc2V0IHRoZSBhZGRyZXNzCitvZiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgdGV4dCBzZWdtZW50LgorLklQICJcZkJcLVRyb2RhdGFcLXNlZ21lbnQ9XGZSXGZJb3JnXGZSIiA0CisuSVggSXRlbSAiLVRyb2RhdGEtc2VnbWVudD1vcmciCitXaGVuIGNyZWF0aW5nIGFuIFxzLTFFTEZcczAgZXhlY3V0YWJsZSBvciBzaGFyZWQgb2JqZWN0IGZvciBhIHRhcmdldCB3aGVyZQordGhlIHJlYWQtb25seSBkYXRhIGlzIGluIGl0cyBvd24gc2VnbWVudCBzZXBhcmF0ZSBmcm9tIHRoZSBleGVjdXRhYmxlCit0ZXh0LCBpdCB3aWxsIHNldCB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVhZC1vbmx5IGRhdGEgc2VnbWVudC4KKy5JUCAiXGZCXC1cLXVucmVzb2x2ZWRcLXN5bWJvbHM9XGZSXGZJbWV0aG9kXGZSIiA0CisuSVggSXRlbSAiLS11bnJlc29sdmVkLXN5bWJvbHM9bWV0aG9kIgorRGV0ZXJtaW5lIGhvdyB0byBoYW5kbGUgdW5yZXNvbHZlZCBzeW1ib2xzLiAgVGhlcmUgYXJlIGZvdXIgcG9zc2libGUKK3ZhbHVlcyBmb3IgXGZCbWV0aG9kXGZSOgorLlJTIDQKKy5JUCAiXGZCaWdub3JlLWFsbFxmUiIgNAorLklYIEl0ZW0gImlnbm9yZS1hbGwiCitEbyBub3QgcmVwb3J0IGFueSB1bnJlc29sdmVkIHN5bWJvbHMuCisuSVAgIlxmQnJlcG9ydC1hbGxcZlIiIDQKKy5JWCBJdGVtICJyZXBvcnQtYWxsIgorUmVwb3J0IGFsbCB1bnJlc29sdmVkIHN5bWJvbHMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJpZ25vcmUtaW4tb2JqZWN0LWZpbGVzXGZSIiA0CisuSVggSXRlbSAiaWdub3JlLWluLW9iamVjdC1maWxlcyIKK1JlcG9ydCB1bnJlc29sdmVkIHN5bWJvbHMgdGhhdCBhcmUgY29udGFpbmVkIGluIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAoraWdub3JlIHRoZW0gaWYgdGhleSBjb21lIGZyb20gcmVndWxhciBvYmplY3QgZmlsZXMuCisuSVAgIlxmQmlnbm9yZS1pbi1zaGFyZWQtbGlic1xmUiIgNAorLklYIEl0ZW0gImlnbm9yZS1pbi1zaGFyZWQtbGlicyIKK1JlcG9ydCB1bnJlc29sdmVkIHN5bWJvbHMgdGhhdCBjb21lIGZyb20gcmVndWxhciBvYmplY3QgZmlsZXMsIGJ1dAoraWdub3JlIHRoZW0gaWYgdGhleSBjb21lIGZyb20gc2hhcmVkIGxpYnJhcmllcy4gIFRoaXMgY2FuIGJlIHVzZWZ1bAord2hlbiBjcmVhdGluZyBhIGR5bmFtaWMgYmluYXJ5IGFuZCBpdCBpcyBrbm93biB0aGF0IGFsbCB0aGUgc2hhcmVkCitsaWJyYXJpZXMgdGhhdCBpdCBzaG91bGQgYmUgcmVmZXJlbmNpbmcgYXJlIGluY2x1ZGVkIG9uIHRoZSBsaW5rZXIncworY29tbWFuZCBsaW5lLgorLlJFCisuUlMgNAorLlNwCitUaGUgYmVoYXZpb3VyIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZWlyIG93biBjYW4gYWxzbyBiZSBjb250cm9sbGVkCitieSB0aGUgXGZCXC1cLVtub1wtXWFsbG93XC1zaGxpYlwtdW5kZWZpbmVkXGZSIG9wdGlvbi4KKy5TcAorTm9ybWFsbHkgdGhlIGxpbmtlciB3aWxsIGdlbmVyYXRlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGVhY2ggcmVwb3J0ZWQKK3VucmVzb2x2ZWQgc3ltYm9sIGJ1dCB0aGUgb3B0aW9uIFxmQlwtXC13YXJuXC11bnJlc29sdmVkXC1zeW1ib2xzXGZSCitjYW4gY2hhbmdlIHRoaXMgdG8gYSB3YXJuaW5nLgorLlJFCisuSVAgIlxmQlwtXC1kbGxcLXZlcmJvc2VcZlIiIDQKKy5JWCBJdGVtICItLWRsbC12ZXJib3NlIgorLlBEIDAKKy5JUCAiXGZCXC1cLXZlcmJvc2VbPVxmUlxmSVxzLTFOVU1CRVJcczBcZlJcZkJdXGZSIiA0CisuSVggSXRlbSAiLS12ZXJib3NlWz1OVU1CRVJdIgorLlBECitEaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBmb3IgXGZCbGRcZlIgYW5kIGxpc3QgdGhlIGxpbmtlciBlbXVsYXRpb25zCitzdXBwb3J0ZWQuICBEaXNwbGF5IHdoaWNoIGlucHV0IGZpbGVzIGNhbiBhbmQgY2Fubm90IGJlIG9wZW5lZC4gIERpc3BsYXkKK3RoZSBsaW5rZXIgc2NyaXB0IGJlaW5nIHVzZWQgYnkgdGhlIGxpbmtlci4gSWYgdGhlIG9wdGlvbmFsIFxmSVxzLTFOVU1CRVJcczBcZlIKK2FyZ3VtZW50ID4gMSwgcGx1Z2luIHN5bWJvbCBzdGF0dXMgd2lsbCBhbHNvIGJlIGRpc3BsYXllZC4KKy5JUCAiXGZCXC1cLXZlcnNpb25cLXNjcmlwdD1cZlJcZkl2ZXJzaW9uLXNjcmlwdGZpbGVcZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24tc2NyaXB0PXZlcnNpb24tc2NyaXB0ZmlsZSIKK1NwZWNpZnkgdGhlIG5hbWUgb2YgYSB2ZXJzaW9uIHNjcmlwdCB0byB0aGUgbGlua2VyLiAgVGhpcyBpcyB0eXBpY2FsbHkKK3VzZWQgd2hlbiBjcmVhdGluZyBzaGFyZWQgbGlicmFyaWVzIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIHZlcnNpb24gaGllcmFyY2h5IGZvciB0aGUgbGlicmFyeSBiZWluZyBjcmVhdGVkLiAgVGhpcyBvcHRpb24KK2lzIG9ubHkgZnVsbHkgc3VwcG9ydGVkIG9uIFxzLTFFTEZcczAgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllczsKK3NlZSBcZkJccy0xVkVSU0lPTlxzMFxmUi4gIEl0IGlzIHBhcnRpYWxseSBzdXBwb3J0ZWQgb24gXHMtMVBFXHMwIHBsYXRmb3Jtcywgd2hpY2ggY2FuCit1c2UgdmVyc2lvbiBzY3JpcHRzIHRvIGZpbHRlciBzeW1ib2wgdmlzaWJpbGl0eSBpbiBhdXRvLWV4cG9ydCBtb2RlOiBhbnkKK3N5bWJvbHMgbWFya2VkIFxmQmxvY2FsXGZSIGluIHRoZSB2ZXJzaW9uIHNjcmlwdCB3aWxsIG5vdCBiZSBleHBvcnRlZC4KKy5JUCAiXGZCXC1cLXdhcm5cLWNvbW1vblxmUiIgNAorLklYIEl0ZW0gIi0td2Fybi1jb21tb24iCitXYXJuIHdoZW4gYSBjb21tb24gc3ltYm9sIGlzIGNvbWJpbmVkIHdpdGggYW5vdGhlciBjb21tb24gc3ltYm9sIG9yIHdpdGgKK2Egc3ltYm9sIGRlZmluaXRpb24uICBVbml4IGxpbmtlcnMgYWxsb3cgdGhpcyBzb21ld2hhdCBzbG9wcHkgcHJhY3Rpc2UsCitidXQgbGlua2VycyBvbiBzb21lIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGRvIG5vdC4gIFRoaXMgb3B0aW9uIGFsbG93cworeW91IHRvIGZpbmQgcG90ZW50aWFsIHByb2JsZW1zIGZyb20gY29tYmluaW5nIGdsb2JhbCBzeW1ib2xzLgorVW5mb3J0dW5hdGVseSwgc29tZSBDIGxpYnJhcmllcyB1c2UgdGhpcyBwcmFjdGlzZSwgc28geW91IG1heSBnZXQgc29tZQord2FybmluZ3MgYWJvdXQgc3ltYm9scyBpbiB0aGUgbGlicmFyaWVzIGFzIHdlbGwgYXMgaW4geW91ciBwcm9ncmFtcy4KKy5TcAorVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGdsb2JhbCBzeW1ib2xzLCBpbGx1c3RyYXRlZCBoZXJlIGJ5IEMgZXhhbXBsZXM6CisuUlMgNAorLklQICJcZkJpbnQgaSA9IDE7XGZSIiA0CisuSVggSXRlbSAiaW50IGkgPSAxOyIKK0EgZGVmaW5pdGlvbiwgd2hpY2ggZ29lcyBpbiB0aGUgaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uIG9mIHRoZSBvdXRwdXQKK2ZpbGUuCisuSVAgIlxmQmV4dGVybiBpbnQgaTtcZlIiIDQKKy5JWCBJdGVtICJleHRlcm4gaW50IGk7IgorQW4gdW5kZWZpbmVkIHJlZmVyZW5jZSwgd2hpY2ggZG9lcyBub3QgYWxsb2NhdGUgc3BhY2UuCitUaGVyZSBtdXN0IGJlIGVpdGhlciBhIGRlZmluaXRpb24gb3IgYSBjb21tb24gc3ltYm9sIGZvciB0aGUKK3ZhcmlhYmxlIHNvbWV3aGVyZS4KKy5JUCAiXGZCaW50IGk7XGZSIiA0CisuSVggSXRlbSAiaW50IGk7IgorQSBjb21tb24gc3ltYm9sLiAgSWYgdGhlcmUgYXJlIG9ubHkgKG9uZSBvciBtb3JlKSBjb21tb24gc3ltYm9scyBmb3IgYQordmFyaWFibGUsIGl0IGdvZXMgaW4gdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmVhIG9mIHRoZSBvdXRwdXQgZmlsZS4KK1RoZSBsaW5rZXIgbWVyZ2VzIG11bHRpcGxlIGNvbW1vbiBzeW1ib2xzIGZvciB0aGUgc2FtZSB2YXJpYWJsZSBpbnRvIGEKK3NpbmdsZSBzeW1ib2wuICBJZiB0aGV5IGFyZSBvZiBkaWZmZXJlbnQgc2l6ZXMsIGl0IHBpY2tzIHRoZSBsYXJnZXN0CitzaXplLiAgVGhlIGxpbmtlciB0dXJucyBhIGNvbW1vbiBzeW1ib2wgaW50byBhIGRlY2xhcmF0aW9uLCBpZiB0aGVyZSBpcworYSBkZWZpbml0aW9uIG9mIHRoZSBzYW1lIHZhcmlhYmxlLgorLlJFCisuUlMgNAorLlNwCitUaGUgXGZCXC1cLXdhcm5cLWNvbW1vblxmUiBvcHRpb24gY2FuIHByb2R1Y2UgZml2ZSBraW5kcyBvZiB3YXJuaW5ncy4KK0VhY2ggd2FybmluZyBjb25zaXN0cyBvZiBhIHBhaXIgb2YgbGluZXM6IHRoZSBmaXJzdCBkZXNjcmliZXMgdGhlIHN5bWJvbAoranVzdCBlbmNvdW50ZXJlZCwgYW5kIHRoZSBzZWNvbmQgZGVzY3JpYmVzIHRoZSBwcmV2aW91cyBzeW1ib2wKK2VuY291bnRlcmVkIHdpdGggdGhlIHNhbWUgbmFtZS4gIE9uZSBvciBib3RoIG9mIHRoZSB0d28gc3ltYm9scyB3aWxsIGJlCithIGNvbW1vbiBzeW1ib2wuCisuSVAgIjEuIiA0CitUdXJuaW5nIGEgY29tbW9uIHN5bWJvbCBpbnRvIGEgcmVmZXJlbmNlLCBiZWNhdXNlIHRoZXJlIGlzIGFscmVhZHkgYQorZGVmaW5pdGlvbiBmb3IgdGhlIHN5bWJvbC4KKy5TcAorLlZiIDMKK1wmICAgICAgICA8ZmlsZT4oPHNlY3Rpb24+KTogd2FybmluZzogY29tbW9uIG9mIFxgPHN5bWJvbD5cKihBcQorXCYgICAgICAgICAgIG92ZXJyaWRkZW4gYnkgZGVmaW5pdGlvbgorXCYgICAgICAgIDxmaWxlPig8c2VjdGlvbj4pOiB3YXJuaW5nOiBkZWZpbmVkIGhlcmUKKy5WZQorLklQICIyLiIgNAorVHVybmluZyBhIGNvbW1vbiBzeW1ib2wgaW50byBhIHJlZmVyZW5jZSwgYmVjYXVzZSBhIGxhdGVyIGRlZmluaXRpb24gZm9yCit0aGUgc3ltYm9sIGlzIGVuY291bnRlcmVkLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgY2FzZSwKK2V4Y2VwdCB0aGF0IHRoZSBzeW1ib2xzIGFyZSBlbmNvdW50ZXJlZCBpbiBhIGRpZmZlcmVudCBvcmRlci4KKy5TcAorLlZiIDMKK1wmICAgICAgICA8ZmlsZT4oPHNlY3Rpb24+KTogd2FybmluZzogZGVmaW5pdGlvbiBvZiBcYDxzeW1ib2w+XCooQXEKK1wmICAgICAgICAgICBvdmVycmlkaW5nIGNvbW1vbgorXCYgICAgICAgIDxmaWxlPig8c2VjdGlvbj4pOiB3YXJuaW5nOiBjb21tb24gaXMgaGVyZQorLlZlCisuSVAgIjMuIiA0CitNZXJnaW5nIGEgY29tbW9uIHN5bWJvbCB3aXRoIGEgcHJldmlvdXMgc2FtZS1zaXplZCBjb21tb24gc3ltYm9sLgorLlNwCisuVmIgMworXCYgICAgICAgIDxmaWxlPig8c2VjdGlvbj4pOiB3YXJuaW5nOiBtdWx0aXBsZSBjb21tb24KK1wmICAgICAgICAgICBvZiBcYDxzeW1ib2w+XCooQXEKK1wmICAgICAgICA8ZmlsZT4oPHNlY3Rpb24+KTogd2FybmluZzogcHJldmlvdXMgY29tbW9uIGlzIGhlcmUKKy5WZQorLklQICI0LiIgNAorTWVyZ2luZyBhIGNvbW1vbiBzeW1ib2wgd2l0aCBhIHByZXZpb3VzIGxhcmdlciBjb21tb24gc3ltYm9sLgorLlNwCisuVmIgMworXCYgICAgICAgIDxmaWxlPig8c2VjdGlvbj4pOiB3YXJuaW5nOiBjb21tb24gb2YgXGA8c3ltYm9sPlwqKEFxCitcJiAgICAgICAgICAgb3ZlcnJpZGRlbiBieSBsYXJnZXIgY29tbW9uCitcJiAgICAgICAgPGZpbGU+KDxzZWN0aW9uPik6IHdhcm5pbmc6IGxhcmdlciBjb21tb24gaXMgaGVyZQorLlZlCisuSVAgIjUuIiA0CitNZXJnaW5nIGEgY29tbW9uIHN5bWJvbCB3aXRoIGEgcHJldmlvdXMgc21hbGxlciBjb21tb24gc3ltYm9sLiAgVGhpcyBpcwordGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGNhc2UsIGV4Y2VwdCB0aGF0IHRoZSBzeW1ib2xzIGFyZQorZW5jb3VudGVyZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIuCisuU3AKKy5WYiAzCitcJiAgICAgICAgPGZpbGU+KDxzZWN0aW9uPik6IHdhcm5pbmc6IGNvbW1vbiBvZiBcYDxzeW1ib2w+XCooQXEKK1wmICAgICAgICAgICBvdmVycmlkaW5nIHNtYWxsZXIgY29tbW9uCitcJiAgICAgICAgPGZpbGU+KDxzZWN0aW9uPik6IHdhcm5pbmc6IHNtYWxsZXIgY29tbW9uIGlzIGhlcmUKKy5WZQorLlJFCisuUlMgNAorLlJFCisuSVAgIlxmQlwtXC13YXJuXC1jb25zdHJ1Y3RvcnNcZlIiIDQKKy5JWCBJdGVtICItLXdhcm4tY29uc3RydWN0b3JzIgorV2FybiBpZiBhbnkgZ2xvYmFsIGNvbnN0cnVjdG9ycyBhcmUgdXNlZC4gIFRoaXMgaXMgb25seSB1c2VmdWwgZm9yIGEgZmV3CitvYmplY3QgZmlsZSBmb3JtYXRzLiAgRm9yIGZvcm1hdHMgbGlrZSBccy0xQ09GRlxzMCBvciBccy0xRUxGXHMwLCB0aGUgbGlua2VyIGNhbiBub3QKK2RldGVjdCB0aGUgdXNlIG9mIGdsb2JhbCBjb25zdHJ1Y3RvcnMuCisuSVAgIlxmQlwtXC13YXJuXC1tdWx0aXBsZVwtZ3BcZlIiIDQKKy5JWCBJdGVtICItLXdhcm4tbXVsdGlwbGUtZ3AiCitXYXJuIGlmIG11bHRpcGxlIGdsb2JhbCBwb2ludGVyIHZhbHVlcyBhcmUgcmVxdWlyZWQgaW4gdGhlIG91dHB1dCBmaWxlLgorVGhpcyBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIGNlcnRhaW4gcHJvY2Vzc29ycywgc3VjaCBhcyB0aGUgQWxwaGEuCitTcGVjaWZpY2FsbHksIHNvbWUgcHJvY2Vzc29ycyBwdXQgbGFyZ2UtdmFsdWVkIGNvbnN0YW50cyBpbiBhIHNwZWNpYWwKK3NlY3Rpb24uICBBIHNwZWNpYWwgcmVnaXN0ZXIgKHRoZSBnbG9iYWwgcG9pbnRlcikgcG9pbnRzIGludG8gdGhlIG1pZGRsZQorb2YgdGhpcyBzZWN0aW9uLCBzbyB0aGF0IGNvbnN0YW50cyBjYW4gYmUgbG9hZGVkIGVmZmljaWVudGx5IHZpYSBhCitiYXNlLXJlZ2lzdGVyIHJlbGF0aXZlIGFkZHJlc3NpbmcgbW9kZS4gIFNpbmNlIHRoZSBvZmZzZXQgaW4KK2Jhc2UtcmVnaXN0ZXIgcmVsYXRpdmUgbW9kZSBpcyBmaXhlZCBhbmQgcmVsYXRpdmVseSBzbWFsbCAoZS5nLiwgMTYKK2JpdHMpLCB0aGlzIGxpbWl0cyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBjb25zdGFudCBwb29sLiAgVGh1cywgaW4KK2xhcmdlIHByb2dyYW1zLCBpdCBpcyBvZnRlbiBuZWNlc3NhcnkgdG8gdXNlIG11bHRpcGxlIGdsb2JhbCBwb2ludGVyCit2YWx1ZXMgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBhZGRyZXNzIGFsbCBwb3NzaWJsZSBjb25zdGFudHMuICBUaGlzCitvcHRpb24gY2F1c2VzIGEgd2FybmluZyB0byBiZSBpc3N1ZWQgd2hlbmV2ZXIgdGhpcyBjYXNlIG9jY3Vycy4KKy5JUCAiXGZCXC1cLXdhcm5cLW9uY2VcZlIiIDQKKy5JWCBJdGVtICItLXdhcm4tb25jZSIKK09ubHkgd2FybiBvbmNlIGZvciBlYWNoIHVuZGVmaW5lZCBzeW1ib2wsIHJhdGhlciB0aGFuIG9uY2UgcGVyIG1vZHVsZQord2hpY2ggcmVmZXJzIHRvIGl0LgorLklQICJcZkJcLVwtd2Fyblwtc2VjdGlvblwtYWxpZ25cZlIiIDQKKy5JWCBJdGVtICItLXdhcm4tc2VjdGlvbi1hbGlnbiIKK1dhcm4gaWYgdGhlIGFkZHJlc3Mgb2YgYW4gb3V0cHV0IHNlY3Rpb24gaXMgY2hhbmdlZCBiZWNhdXNlIG9mCithbGlnbm1lbnQuICBUeXBpY2FsbHksIHRoZSBhbGlnbm1lbnQgd2lsbCBiZSBzZXQgYnkgYW4gaW5wdXQgc2VjdGlvbi4KK1RoZSBhZGRyZXNzIHdpbGwgb25seSBiZSBjaGFuZ2VkIGlmIGl0IG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZDsgdGhhdAoraXMsIGlmIHRoZSBcZihDV1wqKENgU0VDVElPTlNcKihDJ1xmUiBjb21tYW5kIGRvZXMgbm90IHNwZWNpZnkgYSBzdGFydCBhZGRyZXNzIGZvcgordGhlIHNlY3Rpb24uCisuSVAgIlxmQlwtXC13YXJuXC1zaGFyZWRcLXRleHRyZWxcZlIiIDQKKy5JWCBJdGVtICItLXdhcm4tc2hhcmVkLXRleHRyZWwiCitXYXJuIGlmIHRoZSBsaW5rZXIgYWRkcyBhIFxzLTFEVF9URVhUUkVMXHMwIHRvIGEgc2hhcmVkIG9iamVjdC4KKy5JUCAiXGZCXC1cLXdhcm5cLWFsdGVybmF0ZVwtZW1cZlIiIDQKKy5JWCBJdGVtICItLXdhcm4tYWx0ZXJuYXRlLWVtIgorV2FybiBpZiBhbiBvYmplY3QgaGFzIGFsdGVybmF0ZSBccy0xRUxGXHMwIG1hY2hpbmUgY29kZS4KKy5JUCAiXGZCXC1cLXdhcm5cLXVucmVzb2x2ZWRcLXN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItLXdhcm4tdW5yZXNvbHZlZC1zeW1ib2xzIgorSWYgdGhlIGxpbmtlciBpcyBnb2luZyB0byByZXBvcnQgYW4gdW5yZXNvbHZlZCBzeW1ib2wgKHNlZSB0aGUgb3B0aW9uCitcJlxmQlwtXC11bnJlc29sdmVkXC1zeW1ib2xzXGZSKSBpdCB3aWxsIG5vcm1hbGx5IGdlbmVyYXRlIGFuIGVycm9yLgorVGhpcyBvcHRpb24gbWFrZXMgaXQgZ2VuZXJhdGUgYSB3YXJuaW5nIGluc3RlYWQuCisuSVAgIlxmQlwtXC1lcnJvclwtdW5yZXNvbHZlZFwtc3ltYm9sc1xmUiIgNAorLklYIEl0ZW0gIi0tZXJyb3ItdW5yZXNvbHZlZC1zeW1ib2xzIgorVGhpcyByZXN0b3JlcyB0aGUgbGlua2VyJ3MgZGVmYXVsdCBiZWhhdmlvdXIgb2YgZ2VuZXJhdGluZyBlcnJvcnMgd2hlbgoraXQgaXMgcmVwb3J0aW5nIHVucmVzb2x2ZWQgc3ltYm9scy4KKy5JUCAiXGZCXC1cLXdob2xlXC1hcmNoaXZlXGZSIiA0CisuSVggSXRlbSAiLS13aG9sZS1hcmNoaXZlIgorRm9yIGVhY2ggYXJjaGl2ZSBtZW50aW9uZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhZnRlciB0aGUKK1wmXGZCXC1cLXdob2xlXC1hcmNoaXZlXGZSIG9wdGlvbiwgaW5jbHVkZSBldmVyeSBvYmplY3QgZmlsZSBpbiB0aGUgYXJjaGl2ZQoraW4gdGhlIGxpbmssIHJhdGhlciB0aGFuIHNlYXJjaGluZyB0aGUgYXJjaGl2ZSBmb3IgdGhlIHJlcXVpcmVkIG9iamVjdAorZmlsZXMuICBUaGlzIGlzIG5vcm1hbGx5IHVzZWQgdG8gdHVybiBhbiBhcmNoaXZlIGZpbGUgaW50byBhIHNoYXJlZAorbGlicmFyeSwgZm9yY2luZyBldmVyeSBvYmplY3QgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBzaGFyZWQKK2xpYnJhcnkuICBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBtb3JlIHRoYW4gb25jZS4KKy5TcAorVHdvIG5vdGVzIHdoZW4gdXNpbmcgdGhpcyBvcHRpb24gZnJvbSBnY2M6IEZpcnN0LCBnY2MgZG9lc24ndCBrbm93CithYm91dCB0aGlzIG9wdGlvbiwgc28geW91IGhhdmUgdG8gdXNlIFxmQlwtV2wsXC13aG9sZVwtYXJjaGl2ZVxmUi4KK1NlY29uZCwgZG9uJ3QgZm9yZ2V0IHRvIHVzZSBcZkJcLVdsLFwtbm9cLXdob2xlXC1hcmNoaXZlXGZSIGFmdGVyIHlvdXIKK2xpc3Qgb2YgYXJjaGl2ZXMsIGJlY2F1c2UgZ2NjIHdpbGwgYWRkIGl0cyBvd24gbGlzdCBvZiBhcmNoaXZlcyB0bworeW91ciBsaW5rIGFuZCB5b3UgbWF5IG5vdCB3YW50IHRoaXMgZmxhZyB0byBhZmZlY3QgdGhvc2UgYXMgd2VsbC4KKy5JUCAiXGZCXC1cLXdyYXA9XGZSXGZJc3ltYm9sXGZSIiA0CisuSVggSXRlbSAiLS13cmFwPXN5bWJvbCIKK1VzZSBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIFxmSXN5bWJvbFxmUi4gIEFueSB1bmRlZmluZWQgcmVmZXJlbmNlIHRvCitcJlxmSXN5bWJvbFxmUiB3aWxsIGJlIHJlc29sdmVkIHRvIFxmKENXXCooQ2BfXHxfd3JhcF9cZihDSXN5bWJvbFxmKENXXCooQydcZlIuICBBbnkKK3VuZGVmaW5lZCByZWZlcmVuY2UgdG8gXGYoQ1dcKihDYF9cfF9yZWFsX1xmKENJc3ltYm9sXGYoQ1dcKihDJ1xmUiB3aWxsIGJlIHJlc29sdmVkIHRvCitcJlxmSXN5bWJvbFxmUi4KKy5TcAorVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgd3JhcHBlciBmb3IgYSBzeXN0ZW0gZnVuY3Rpb24uICBUaGUKK3dyYXBwZXIgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBcZihDV1wqKENgX1x8X3dyYXBfXGYoQ0lzeW1ib2xcZihDV1wqKEMnXGZSLiAgSWYgaXQKK3dpc2hlcyB0byBjYWxsIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIGl0IHNob3VsZCBjYWxsCitcJlxmKENXXCooQ2BfXHxfcmVhbF9cZihDSXN5bWJvbFxmKENXXCooQydcZlIuCisuU3AKK0hlcmUgaXMgYSB0cml2aWFsIGV4YW1wbGU6CisuU3AKKy5WYiA2CitcJiAgICAgICAgdm9pZCAqCitcJiAgICAgICAgX1x8X3dyYXBfbWFsbG9jIChzaXplX3QgYykKK1wmICAgICAgICB7CitcJiAgICAgICAgICBwcmludGYgKCJtYWxsb2MgY2FsbGVkIHdpdGggJXp1XGVuIiwgYyk7CitcJiAgICAgICAgICByZXR1cm4gX1x8X3JlYWxfbWFsbG9jIChjKTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoaXMgZmlsZSB1c2luZyBcZkJcLVwtd3JhcCBtYWxsb2NcZlIsIHRoZW4KK2FsbCBjYWxscyB0byBcZihDV1wqKENgbWFsbG9jXCooQydcZlIgd2lsbCBjYWxsIHRoZSBmdW5jdGlvbiBcZihDV1wqKENgX1x8X3dyYXBfbWFsbG9jXCooQydcZlIKK2luc3RlYWQuICBUaGUgY2FsbCB0byBcZihDV1wqKENgX1x8X3JlYWxfbWFsbG9jXCooQydcZlIgaW4gXGYoQ1dcKihDYF9cfF93cmFwX21hbGxvY1wqKEMnXGZSIHdpbGwKK2NhbGwgdGhlIHJlYWwgXGYoQ1dcKihDYG1hbGxvY1wqKEMnXGZSIGZ1bmN0aW9uLgorLlNwCitZb3UgbWF5IHdpc2ggdG8gcHJvdmlkZSBhIFxmKENXXCooQ2BfXHxfcmVhbF9tYWxsb2NcKihDJ1xmUiBmdW5jdGlvbiBhcyB3ZWxsLCBzbyB0aGF0CitsaW5rcyB3aXRob3V0IHRoZSBcZkJcLVwtd3JhcFxmUiBvcHRpb24gd2lsbCBzdWNjZWVkLiAgSWYgeW91IGRvIHRoaXMsCit5b3Ugc2hvdWxkIG5vdCBwdXQgdGhlIGRlZmluaXRpb24gb2YgXGYoQ1dcKihDYF9cfF9yZWFsX21hbGxvY1wqKEMnXGZSIGluIHRoZSBzYW1lCitmaWxlIGFzIFxmKENXXCooQ2BfXHxfd3JhcF9tYWxsb2NcKihDJ1xmUjsgaWYgeW91IGRvLCB0aGUgYXNzZW1ibGVyIG1heSByZXNvbHZlIHRoZQorY2FsbCBiZWZvcmUgdGhlIGxpbmtlciBoYXMgYSBjaGFuY2UgdG8gd3JhcCBpdCB0byBcZihDV1wqKENgbWFsbG9jXCooQydcZlIuCisuSVAgIlxmQlwtXC1laFwtZnJhbWVcLWhkclxmUiIgNAorLklYIEl0ZW0gIi0tZWgtZnJhbWUtaGRyIgorUmVxdWVzdCBjcmVhdGlvbiBvZiBcZihDV1wqKENgLmVoX2ZyYW1lX2hkclwqKEMnXGZSIHNlY3Rpb24gYW5kIFxzLTFFTEZcczAKK1wmXGYoQ1dcKihDYFBUX0dOVV9FSF9GUkFNRVwqKEMnXGZSIHNlZ21lbnQgaGVhZGVyLgorLklQICJcZkJcLVwtbm9cLWxkXC1nZW5lcmF0ZWRcLXVud2luZFwtaW5mb1xmUiIgNAorLklYIEl0ZW0gIi0tbm8tbGQtZ2VuZXJhdGVkLXVud2luZC1pbmZvIgorUmVxdWVzdCBjcmVhdGlvbiBvZiBcZihDV1wqKENgLmVoX2ZyYW1lXCooQydcZlIgdW53aW5kIGluZm8gZm9yIGxpbmtlcgorZ2VuZXJhdGVkIGNvZGUgc2VjdGlvbnMgbGlrZSBccy0xUExUXHMwLiAgVGhpcyBvcHRpb24gaXMgb24gYnkgZGVmYXVsdAoraWYgbGlua2VyIGdlbmVyYXRlZCB1bndpbmQgaW5mbyBpcyBzdXBwb3J0ZWQuCisuSVAgIlxmQlwtXC1lbmFibGVcLW5ld1wtZHRhZ3NcZlIiIDQKKy5JWCBJdGVtICItLWVuYWJsZS1uZXctZHRhZ3MiCisuUEQgMAorLklQICJcZkJcLVwtZGlzYWJsZVwtbmV3XC1kdGFnc1xmUiIgNAorLklYIEl0ZW0gIi0tZGlzYWJsZS1uZXctZHRhZ3MiCisuUEQKK1RoaXMgbGlua2VyIGNhbiBjcmVhdGUgdGhlIG5ldyBkeW5hbWljIHRhZ3MgaW4gXHMtMUVMRlxzMC4gQnV0IHRoZSBvbGRlciBccy0xRUxGXHMwCitzeXN0ZW1zIG1heSBub3QgdW5kZXJzdGFuZCB0aGVtLiBJZiB5b3Ugc3BlY2lmeQorXCZcZkJcLVwtZW5hYmxlXC1uZXdcLWR0YWdzXGZSLCB0aGUgZHluYW1pYyB0YWdzIHdpbGwgYmUgY3JlYXRlZCBhcyBuZWVkZWQuCitJZiB5b3Ugc3BlY2lmeSBcZkJcLVwtZGlzYWJsZVwtbmV3XC1kdGFnc1xmUiwgbm8gbmV3IGR5bmFtaWMgdGFncyB3aWxsIGJlCitjcmVhdGVkLiBCeSBkZWZhdWx0LCB0aGUgbmV3IGR5bmFtaWMgdGFncyBhcmUgbm90IGNyZWF0ZWQuIE5vdGUgdGhhdAordGhvc2Ugb3B0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgZm9yIFxzLTFFTEZcczAgc3lzdGVtcy4KKy5JUCAiXGZCXC1cLWhhc2hcLXNpemU9XGZSXGZJbnVtYmVyXGZSIiA0CisuSVggSXRlbSAiLS1oYXNoLXNpemU9bnVtYmVyIgorU2V0IHRoZSBkZWZhdWx0IHNpemUgb2YgdGhlIGxpbmtlcidzIGhhc2ggdGFibGVzIHRvIGEgcHJpbWUgbnVtYmVyCitjbG9zZSB0byBcZkludW1iZXJcZlIuICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgY2FuIHJlZHVjZSB0aGUgbGVuZ3RoIG9mCit0aW1lIGl0IHRha2VzIHRoZSBsaW5rZXIgdG8gcGVyZm9ybSBpdHMgdGFza3MsIGF0IHRoZSBleHBlbnNlIG9mCitpbmNyZWFzaW5nIHRoZSBsaW5rZXIncyBtZW1vcnkgcmVxdWlyZW1lbnRzLiAgU2ltaWxhcmx5IHJlZHVjaW5nIHRoaXMKK3ZhbHVlIGNhbiByZWR1Y2UgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgYXQgdGhlIGV4cGVuc2Ugb2Ygc3BlZWQuCisuSVAgIlxmQlwtXC1oYXNoXC1zdHlsZT1cZlJcZklzdHlsZVxmUiIgNAorLklYIEl0ZW0gIi0taGFzaC1zdHlsZT1zdHlsZSIKK1NldCB0aGUgdHlwZSBvZiBsaW5rZXIncyBoYXNoIHRhYmxlKHMpLiAgXGZJc3R5bGVcZlIgY2FuIGJlIGVpdGhlcgorXCZcZihDV1wqKENgc3lzdlwqKEMnXGZSIGZvciBjbGFzc2ljIFxzLTFFTEZcczAgXGYoQ1dcKihDYC5oYXNoXCooQydcZlIgc2VjdGlvbiwgXGYoQ1dcKihDYGdudVwqKEMnXGZSIGZvcgorbmV3IHN0eWxlIFxzLTFHTlVcczAgXGYoQ1dcKihDYC5nbnUuaGFzaFwqKEMnXGZSIHNlY3Rpb24gb3IgXGYoQ1dcKihDYGJvdGhcKihDJ1xmUiBmb3IgYm90aAordGhlIGNsYXNzaWMgXHMtMUVMRlxzMCBcZihDV1wqKENgLmhhc2hcKihDJ1xmUiBhbmQgbmV3IHN0eWxlIFxzLTFHTlVcczAgXGYoQ1dcKihDYC5nbnUuaGFzaFwqKEMnXGZSCitoYXNoIHRhYmxlcy4gIFRoZSBkZWZhdWx0IGlzIFxmKENXXCooQ2BzeXN2XCooQydcZlIuCisuSVAgIlxmQlwtXC1yZWR1Y2VcLW1lbW9yeVwtb3ZlcmhlYWRzXGZSIiA0CisuSVggSXRlbSAiLS1yZWR1Y2UtbWVtb3J5LW92ZXJoZWFkcyIKK1RoaXMgb3B0aW9uIHJlZHVjZXMgbWVtb3J5IHJlcXVpcmVtZW50cyBhdCBsZCBydW50aW1lLCBhdCB0aGUgZXhwZW5zZSBvZgorbGlua2luZyBzcGVlZC4gIFRoaXMgd2FzIGludHJvZHVjZWQgdG8gc2VsZWN0IHRoZSBvbGQgTyhuXjIpIGFsZ29yaXRobQorZm9yIGxpbmsgbWFwIGZpbGUgZ2VuZXJhdGlvbiwgcmF0aGVyIHRoYW4gdGhlIG5ldyBPKG4pIGFsZ29yaXRobSB3aGljaCB1c2VzCithYm91dCA0MCUgbW9yZSBtZW1vcnkgZm9yIHN5bWJvbCBzdG9yYWdlLgorLlNwCitBbm90aGVyIGVmZmVjdCBvZiB0aGUgc3dpdGNoIGlzIHRvIHNldCB0aGUgZGVmYXVsdCBoYXNoIHRhYmxlIHNpemUgdG8KKzEwMjEsIHdoaWNoIGFnYWluIHNhdmVzIG1lbW9yeSBhdCB0aGUgY29zdCBvZiBsZW5ndGhlbmluZyB0aGUgbGlua2VyJ3MKK3J1biB0aW1lLiAgVGhpcyBpcyBub3QgZG9uZSBob3dldmVyIGlmIHRoZSBcZkJcLVwtaGFzaFwtc2l6ZVxmUiBzd2l0Y2gKK2hhcyBiZWVuIHVzZWQuCisuU3AKK1RoZSBcZkJcLVwtcmVkdWNlXC1tZW1vcnlcLW92ZXJoZWFkc1xmUiBzd2l0Y2ggbWF5IGJlIGFsc28gYmUgdXNlZCB0bworZW5hYmxlIG90aGVyIHRyYWRlb2ZmcyBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGxpbmtlci4KKy5JUCAiXGZCXC1cLWJ1aWxkXC1pZFxmUiIgNAorLklYIEl0ZW0gIi0tYnVpbGQtaWQiCisuUEQgMAorLklQICJcZkJcLVwtYnVpbGRcLWlkPVxmUlxmSXN0eWxlXGZSIiA0CisuSVggSXRlbSAiLS1idWlsZC1pZD1zdHlsZSIKKy5QRAorUmVxdWVzdCBjcmVhdGlvbiBvZiBcZihDV1wqKENgLm5vdGUuZ251LmJ1aWxkXC1pZFwqKEMnXGZSIFxzLTFFTEZcczAgbm90ZSBzZWN0aW9uLgorVGhlIGNvbnRlbnRzIG9mIHRoZSBub3RlIGFyZSB1bmlxdWUgYml0cyBpZGVudGlmeWluZyB0aGlzIGxpbmtlZAorZmlsZS4gIFxmSXN0eWxlXGZSIGNhbiBiZSBcZihDV1wqKENgdXVpZFwqKEMnXGZSIHRvIHVzZSAxMjggcmFuZG9tIGJpdHMsCitcJlxmKENXXCooQ2BzaGExXCooQydcZlIgdG8gdXNlIGEgMTYwXC1iaXQgXHMtMVNIQTFcczAgaGFzaCBvbiB0aGUgbm9ybWF0aXZlCitwYXJ0cyBvZiB0aGUgb3V0cHV0IGNvbnRlbnRzLCBcZihDV1wqKENgbWQ1XCooQydcZlIgdG8gdXNlIGEgMTI4XC1iaXQKK1wmXHMtMU1ENVxzMCBoYXNoIG9uIHRoZSBub3JtYXRpdmUgcGFydHMgb2YgdGhlIG91dHB1dCBjb250ZW50cywgb3IKK1wmXGYoQ1dcKihDYDB4XGYoQ0loZXhzdHJpbmdcZihDV1wqKEMnXGZSIHRvIHVzZSBhIGNob3NlbiBiaXQgc3RyaW5nIHNwZWNpZmllZCBhcworYW4gZXZlbiBudW1iZXIgb2YgaGV4YWRlY2ltYWwgZGlnaXRzIChcZihDV1wqKENgXC1cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYDpcKihDJ1xmUgorY2hhcmFjdGVycyBiZXR3ZWVuIGRpZ2l0IHBhaXJzIGFyZSBpZ25vcmVkKS4gIElmIFxmSXN0eWxlXGZSIGlzCitvbWl0dGVkLCBcZihDV1wqKENgc2hhMVwqKEMnXGZSIGlzIHVzZWQuCisuU3AKK1RoZSBcZihDV1wqKENgbWQ1XCooQydcZlIgYW5kIFxmKENXXCooQ2BzaGExXCooQydcZlIgc3R5bGVzIHByb2R1Y2VzIGFuIGlkZW50aWZpZXIKK3RoYXQgaXMgYWx3YXlzIHRoZSBzYW1lIGluIGFuIGlkZW50aWNhbCBvdXRwdXQgZmlsZSwgYnV0IHdpbGwgYmUKK3VuaXF1ZSBhbW9uZyBhbGwgbm9uaWRlbnRpY2FsIG91dHB1dCBmaWxlcy4gIEl0IGlzIG5vdCBpbnRlbmRlZAordG8gYmUgY29tcGFyZWQgYXMgYSBjaGVja3N1bSBmb3IgdGhlIGZpbGUncyBjb250ZW50cy4gIEEgbGlua2VkCitmaWxlIG1heSBiZSBjaGFuZ2VkIGxhdGVyIGJ5IG90aGVyIHRvb2xzLCBidXQgdGhlIGJ1aWxkIFxzLTFJRFxzMCBiaXQKK3N0cmluZyBpZGVudGlmeWluZyB0aGUgb3JpZ2luYWwgbGlua2VkIGZpbGUgZG9lcyBub3QgY2hhbmdlLgorLlNwCitQYXNzaW5nIFxmKENXXCooQ2Bub25lXCooQydcZlIgZm9yIFxmSXN0eWxlXGZSIGRpc2FibGVzIHRoZSBzZXR0aW5nIGZyb20gYW55CitcJlxmKENXXCooQ2BcLVwtYnVpbGRcLWlkXCooQydcZlIgb3B0aW9ucyBlYXJsaWVyIG9uIHRoZSBjb21tYW5kIGxpbmUuCisuUFAKK1RoZSBpMzg2IFxzLTFQRVxzMCBsaW5rZXIgc3VwcG9ydHMgdGhlIFxmQlwtc2hhcmVkXGZSIG9wdGlvbiwgd2hpY2ggY2F1c2VzCit0aGUgb3V0cHV0IHRvIGJlIGEgZHluYW1pY2FsbHkgbGlua2VkIGxpYnJhcnkgKFxzLTFETExcczApIGluc3RlYWQgb2YgYQorbm9ybWFsIGV4ZWN1dGFibGUuICBZb3Ugc2hvdWxkIG5hbWUgdGhlIG91dHB1dCBcZihDV1wqKENgKi5kbGxcKihDJ1xmUiB3aGVuIHlvdQordXNlIHRoaXMgb3B0aW9uLiAgSW4gYWRkaXRpb24sIHRoZSBsaW5rZXIgZnVsbHkgc3VwcG9ydHMgdGhlIHN0YW5kYXJkCitcJlxmKENXXCooQ2AqLmRlZlwqKEMnXGZSIGZpbGVzLCB3aGljaCBtYXkgYmUgc3BlY2lmaWVkIG9uIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lCitsaWtlIGFuIG9iamVjdCBmaWxlIChpbiBmYWN0LCBpdCBzaG91bGQgcHJlY2VkZSBhcmNoaXZlcyBpdCBleHBvcnRzCitzeW1ib2xzIGZyb20sIHRvIGVuc3VyZSB0aGF0IHRoZXkgZ2V0IGxpbmtlZCBpbiwganVzdCBsaWtlIGEgbm9ybWFsCitvYmplY3QgZmlsZSkuCisuUFAKK0luIGFkZGl0aW9uIHRvIHRoZSBvcHRpb25zIGNvbW1vbiB0byBhbGwgdGFyZ2V0cywgdGhlIGkzODYgXHMtMVBFXHMwIGxpbmtlcgorc3VwcG9ydCBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBpMzg2CitcJlxzLTFQRVxzMCB0YXJnZXQuICBPcHRpb25zIHRoYXQgdGFrZSB2YWx1ZXMgbWF5IGJlIHNlcGFyYXRlZCBmcm9tIHRoZWlyCit2YWx1ZXMgYnkgZWl0aGVyIGEgc3BhY2Ugb3IgYW4gZXF1YWxzIHNpZ24uCisuSVAgIlxmQlwtXC1hZGRcLXN0ZGNhbGxcLWFsaWFzXGZSIiA0CisuSVggSXRlbSAiLS1hZGQtc3RkY2FsbC1hbGlhcyIKK0lmIGdpdmVuLCBzeW1ib2xzIHdpdGggYSBzdGRjYWxsIHN1ZmZpeCAoQFxmSW5uXGZSKSB3aWxsIGJlIGV4cG9ydGVkCithcy1pcyBhbmQgYWxzbyB3aXRoIHRoZSBzdWZmaXggc3RyaXBwZWQuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLWJhc2VcLWZpbGVcZlIgXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIi0tYmFzZS1maWxlIGZpbGUiCitVc2UgXGZJZmlsZVxmUiBhcyB0aGUgbmFtZSBvZiBhIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgYmFzZQorYWRkcmVzc2VzIG9mIGFsbCB0aGUgcmVsb2NhdGlvbnMgbmVlZGVkIGZvciBnZW5lcmF0aW5nIERMTHMgd2l0aAorXCZcZklkbGx0b29sXGZSLgorW1RoaXMgaXMgYW4gaTM4NiBccy0xUEVcczAgc3BlY2lmaWMgb3B0aW9uXQorLklQICJcZkJcLVwtZGxsXGZSIiA0CisuSVggSXRlbSAiLS1kbGwiCitDcmVhdGUgYSBccy0xRExMXHMwIGluc3RlYWQgb2YgYSByZWd1bGFyIGV4ZWN1dGFibGUuICBZb3UgbWF5IGFsc28gdXNlCitcJlxmQlwtc2hhcmVkXGZSIG9yIHNwZWNpZnkgYSBcZihDV1wqKENgTElCUkFSWVwqKEMnXGZSIGluIGEgZ2l2ZW4gXGYoQ1dcKihDYC5kZWZcKihDJ1xmUgorZmlsZS4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtZW5hYmxlXC1sb25nXC1zZWN0aW9uXC1uYW1lc1xmUiIgNAorLklYIEl0ZW0gIi0tZW5hYmxlLWxvbmctc2VjdGlvbi1uYW1lcyIKKy5QRCAwCisuSVAgIlxmQlwtXC1kaXNhYmxlXC1sb25nXC1zZWN0aW9uXC1uYW1lc1xmUiIgNAorLklYIEl0ZW0gIi0tZGlzYWJsZS1sb25nLXNlY3Rpb24tbmFtZXMiCisuUEQKK1RoZSBccy0xUEVcczAgdmFyaWFudHMgb2YgdGhlIENvZmYgb2JqZWN0IGZvcm1hdCBhZGQgYW4gZXh0ZW5zaW9uIHRoYXQgcGVybWl0cwordGhlIHVzZSBvZiBzZWN0aW9uIG5hbWVzIGxvbmdlciB0aGFuIGVpZ2h0IGNoYXJhY3RlcnMsIHRoZSBub3JtYWwgbGltaXQKK2ZvciBDb2ZmLiAgQnkgZGVmYXVsdCwgdGhlc2UgbmFtZXMgYXJlIG9ubHkgYWxsb3dlZCBpbiBvYmplY3QgZmlsZXMsIGFzCitmdWxseS1saW5rZWQgZXhlY3V0YWJsZSBpbWFnZXMgZG8gbm90IGNhcnJ5IHRoZSBDb2ZmIHN0cmluZyB0YWJsZSByZXF1aXJlZAordG8gc3VwcG9ydCB0aGUgbG9uZ2VyIG5hbWVzLiAgQXMgYSBccy0xR05VXHMwIGV4dGVuc2lvbiwgaXQgaXMgcG9zc2libGUgdG8KK2FsbG93IHRoZWlyIHVzZSBpbiBleGVjdXRhYmxlIGltYWdlcyBhcyB3ZWxsLCBvciB0byAocHJvYmFibHkgcG9pbnRsZXNzbHkhKQorZGlzYWxsb3cgaXQgaW4gb2JqZWN0IGZpbGVzLCBieSB1c2luZyB0aGVzZSB0d28gb3B0aW9ucy4gIEV4ZWN1dGFibGUgaW1hZ2VzCitnZW5lcmF0ZWQgd2l0aCB0aGVzZSBsb25nIHNlY3Rpb24gbmFtZXMgYXJlIHNsaWdodGx5IG5vbi1zdGFuZGFyZCwgY2FycnlpbmcKK2FzIHRoZXkgZG8gYSBzdHJpbmcgdGFibGUsIGFuZCBtYXkgZ2VuZXJhdGUgY29uZnVzaW5nIG91dHB1dCB3aGVuIGV4YW1pbmVkCit3aXRoIG5vbi1HTlUgUEUtYXdhcmUgdG9vbHMsIHN1Y2ggYXMgZmlsZSB2aWV3ZXJzIGFuZCBkdW1wZXJzLiAgSG93ZXZlciwKK1wmXHMtMUdEQlxzMCByZWxpZXMgb24gdGhlIHVzZSBvZiBccy0xUEVcczAgbG9uZyBzZWN0aW9uIG5hbWVzIHRvIGZpbmQgRHdhcmZcLTIgZGVidWcKK2luZm9ybWF0aW9uIHNlY3Rpb25zIGluIGFuIGV4ZWN1dGFibGUgaW1hZ2UgYXQgcnVudGltZSwgYW5kIHNvIGlmIG5laXRoZXIKK29wdGlvbiBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZSwgXGZCbGRcZlIgd2lsbCBlbmFibGUgbG9uZworc2VjdGlvbiBuYW1lcywgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBhbmQgdGVjaG5pY2FsbHkgY29ycmVjdCBiZWhhdmlvdXIsCit3aGVuIGl0IGZpbmRzIHRoZSBwcmVzZW5jZSBvZiBkZWJ1ZyBpbmZvcm1hdGlvbiB3aGlsZSBsaW5raW5nIGFuIGV4ZWN1dGFibGUKK2ltYWdlIGFuZCBub3Qgc3RyaXBwaW5nIHN5bWJvbHMuCitbVGhpcyBvcHRpb24gaXMgdmFsaWQgZm9yIGFsbCBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydHMgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLWVuYWJsZVwtc3RkY2FsbFwtZml4dXBcZlIiIDQKKy5JWCBJdGVtICItLWVuYWJsZS1zdGRjYWxsLWZpeHVwIgorLlBEIDAKKy5JUCAiXGZCXC1cLWRpc2FibGVcLXN0ZGNhbGxcLWZpeHVwXGZSIiA0CisuSVggSXRlbSAiLS1kaXNhYmxlLXN0ZGNhbGwtZml4dXAiCisuUEQKK0lmIHRoZSBsaW5rIGZpbmRzIGEgc3ltYm9sIHRoYXQgaXQgY2Fubm90IHJlc29sdmUsIGl0IHdpbGwgYXR0ZW1wdCB0bworZG8gXCooTCJmdXp6eSBsaW5raW5nXCooUiIgYnkgbG9va2luZyBmb3IgYW5vdGhlciBkZWZpbmVkIHN5bWJvbCB0aGF0IGRpZmZlcnMKK29ubHkgaW4gdGhlIGZvcm1hdCBvZiB0aGUgc3ltYm9sIG5hbWUgKGNkZWNsIHZzIHN0ZGNhbGwpIGFuZCB3aWxsCityZXNvbHZlIHRoYXQgc3ltYm9sIGJ5IGxpbmtpbmcgdG8gdGhlIG1hdGNoLiAgRm9yIGV4YW1wbGUsIHRoZQordW5kZWZpbmVkIHN5bWJvbCBcZihDV1wqKENgX2Zvb1wqKEMnXGZSIG1pZ2h0IGJlIGxpbmtlZCB0byB0aGUgZnVuY3Rpb24KK1wmXGYoQ1dcKihDYF9mb29AMTJcKihDJ1xmUiwgb3IgdGhlIHVuZGVmaW5lZCBzeW1ib2wgXGYoQ1dcKihDYF9iYXJAMTZcKihDJ1xmUiBtaWdodCBiZSBsaW5rZWQKK3RvIHRoZSBmdW5jdGlvbiBcZihDV1wqKENgX2JhclwqKEMnXGZSLiAgV2hlbiB0aGUgbGlua2VyIGRvZXMgdGhpcywgaXQgcHJpbnRzIGEKK3dhcm5pbmcsIHNpbmNlIGl0IG5vcm1hbGx5IHNob3VsZCBoYXZlIGZhaWxlZCB0byBsaW5rLCBidXQgc29tZXRpbWVzCitpbXBvcnQgbGlicmFyaWVzIGdlbmVyYXRlZCBmcm9tIHRoaXJkLXBhcnR5IGRsbHMgbWF5IG5lZWQgdGhpcyBmZWF0dXJlCit0byBiZSB1c2FibGUuICBJZiB5b3Ugc3BlY2lmeSBcZkJcLVwtZW5hYmxlXC1zdGRjYWxsXC1maXh1cFxmUiwgdGhpcworZmVhdHVyZSBpcyBmdWxseSBlbmFibGVkIGFuZCB3YXJuaW5ncyBhcmUgbm90IHByaW50ZWQuICBJZiB5b3Ugc3BlY2lmeQorXCZcZkJcLVwtZGlzYWJsZVwtc3RkY2FsbFwtZml4dXBcZlIsIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBhbmQgc3VjaAorbWlzbWF0Y2hlcyBhcmUgY29uc2lkZXJlZCB0byBiZSBlcnJvcnMuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLWxlYWRpbmdcLXVuZGVyc2NvcmVcZlIiIDQKKy5JWCBJdGVtICItLWxlYWRpbmctdW5kZXJzY29yZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtbGVhZGluZ1wtdW5kZXJzY29yZVxmUiIgNAorLklYIEl0ZW0gIi0tbm8tbGVhZGluZy11bmRlcnNjb3JlIgorLlBECitGb3IgbW9zdCB0YXJnZXRzIGRlZmF1bHQgc3ltYm9sLXByZWZpeCBpcyBhbiB1bmRlcnNjb3JlIGFuZCBpcyBkZWZpbmVkCitpbiB0YXJnZXQncyBkZXNjcmlwdGlvbi4gQnkgdGhpcyBvcHRpb24gaXQgaXMgcG9zc2libGUgdG8KK2Rpc2FibGUvZW5hYmxlIHRoZSBkZWZhdWx0IHVuZGVyc2NvcmUgc3ltYm9sLXByZWZpeC4KKy5JUCAiXGZCXC1cLWV4cG9ydFwtYWxsXC1zeW1ib2xzXGZSIiA0CisuSVggSXRlbSAiLS1leHBvcnQtYWxsLXN5bWJvbHMiCitJZiBnaXZlbiwgYWxsIGdsb2JhbCBzeW1ib2xzIGluIHRoZSBvYmplY3RzIHVzZWQgdG8gYnVpbGQgYSBccy0xRExMXHMwIHdpbGwKK2JlIGV4cG9ydGVkIGJ5IHRoZSBccy0xRExMXHMwLiAgTm90ZSB0aGF0IHRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlcmUKK290aGVyd2lzZSB3b3VsZG4ndCBiZSBhbnkgZXhwb3J0ZWQgc3ltYm9scy4gIFdoZW4gc3ltYm9scyBhcmUKK2V4cGxpY2l0bHkgZXhwb3J0ZWQgdmlhIFxzLTFERUZcczAgZmlsZXMgb3IgaW1wbGljaXRseSBleHBvcnRlZCB2aWEgZnVuY3Rpb24KK2F0dHJpYnV0ZXMsIHRoZSBkZWZhdWx0IGlzIHRvIG5vdCBleHBvcnQgYW55dGhpbmcgZWxzZSB1bmxlc3MgdGhpcworb3B0aW9uIGlzIGdpdmVuLiAgTm90ZSB0aGF0IHRoZSBzeW1ib2xzIFxmKENXXCooQ2BEbGxNYWluQDEyXCooQydcZlIsCitcJlxmKENXXCooQ2BEbGxFbnRyeVBvaW50QDBcKihDJ1xmUiwgXGYoQ1dcKihDYERsbE1haW5DUlRTdGFydHVwQDEyXCooQydcZlIsIGFuZAorXCZcZihDV1wqKENgaW1wdXJlX3B0clwqKEMnXGZSIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkKK2V4cG9ydGVkLiAgQWxzbywgc3ltYm9scyBpbXBvcnRlZCBmcm9tIG90aGVyIERMTHMgd2lsbCBub3QgYmUKK3JlLWV4cG9ydGVkLCBub3Igd2lsbCBzeW1ib2xzIHNwZWNpZnlpbmcgdGhlIFxzLTFETExcczAncyBpbnRlcm5hbCBsYXlvdXQKK3N1Y2ggYXMgdGhvc2UgYmVnaW5uaW5nIHdpdGggXGYoQ1dcKihDYF9oZWFkX1wqKEMnXGZSIG9yIGVuZGluZyB3aXRoCitcJlxmKENXXCooQ2BfaW5hbWVcKihDJ1xmUi4gIEluIGFkZGl0aW9uLCBubyBzeW1ib2xzIGZyb20gXGYoQ1dcKihDYGxpYmdjY1wqKEMnXGZSLAorXCZcZihDV1wqKENgbGlic3RkKytcKihDJ1xmUiwgXGYoQ1dcKihDYGxpYm1pbmd3MzJcKihDJ1xmUiwgb3IgXGYoQ1dcKihDYGNydFgub1wqKEMnXGZSIHdpbGwgYmUgZXhwb3J0ZWQuCitTeW1ib2xzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggXGYoQ1dcKihDYF9cfF9ydHRpX1wqKEMnXGZSIG9yIFxmKENXXCooQ2BfXHxfYnVpbHRpbl9cKihDJ1xmUiB3aWxsCitub3QgYmUgZXhwb3J0ZWQsIHRvIGhlbHAgd2l0aCBcKihDKyBETExzLiAgRmluYWxseSwgdGhlcmUgaXMgYW4KK2V4dGVuc2l2ZSBsaXN0IG9mIGN5Z3dpbi1wcml2YXRlIHN5bWJvbHMgdGhhdCBhcmUgbm90IGV4cG9ydGVkCisob2J2aW91c2x5LCB0aGlzIGFwcGxpZXMgb24gd2hlbiBidWlsZGluZyBETExzIGZvciBjeWd3aW4gdGFyZ2V0cykuCitUaGVzZSBjeWd3aW4tZXhjbHVkZXMgYXJlOiBcZihDV1wqKENgX2N5Z3dpbl9kbGxfZW50cnlAMTJcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYF9jeWd3aW5fY3J0MF9jb21tb25AOFwqKEMnXGZSLCBcZihDV1wqKENgX2N5Z3dpbl9ub25jeWd3aW5fZGxsX2VudHJ5QDEyXCooQydcZlIsCitcJlxmKENXXCooQ2BfZm1vZGVcKihDJ1xmUiwgXGYoQ1dcKihDYF9pbXB1cmVfcHRyXCooQydcZlIsIFxmKENXXCooQ2BjeWd3aW5fYXR0YWNoX2RsbFwqKEMnXGZSLAorXCZcZihDV1wqKENgY3lnd2luX3ByZW1haW4wXCooQydcZlIsIFxmKENXXCooQ2BjeWd3aW5fcHJlbWFpbjFcKihDJ1xmUiwgXGYoQ1dcKihDYGN5Z3dpbl9wcmVtYWluMlwqKEMnXGZSLAorXCZcZihDV1wqKENgY3lnd2luX3ByZW1haW4zXCooQydcZlIsIGFuZCBcZihDV1wqKENgZW52aXJvblwqKEMnXGZSLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1leGNsdWRlXC1zeW1ib2xzXGZSIFxmSXN5bWJvbFxmUlxmQixcZlJcZklzeW1ib2xcZlJcZkIsLi4uXGZSIiA0CisuSVggSXRlbSAiLS1leGNsdWRlLXN5bWJvbHMgc3ltYm9sLHN5bWJvbCwuLi4iCitTcGVjaWZpZXMgYSBsaXN0IG9mIHN5bWJvbHMgd2hpY2ggc2hvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5CitleHBvcnRlZC4gIFRoZSBzeW1ib2wgbmFtZXMgbWF5IGJlIGRlbGltaXRlZCBieSBjb21tYXMgb3IgY29sb25zLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1leGNsdWRlXC1hbGxcLXN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItLWV4Y2x1ZGUtYWxsLXN5bWJvbHMiCitTcGVjaWZpZXMgbm8gc3ltYm9scyBzaG91bGQgYmUgYXV0b21hdGljYWxseSBleHBvcnRlZC4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtZmlsZVwtYWxpZ25tZW50XGZSIiA0CisuSVggSXRlbSAiLS1maWxlLWFsaWdubWVudCIKK1NwZWNpZnkgdGhlIGZpbGUgYWxpZ25tZW50LiAgU2VjdGlvbnMgaW4gdGhlIGZpbGUgd2lsbCBhbHdheXMgYmVnaW4gYXQKK2ZpbGUgb2Zmc2V0cyB3aGljaCBhcmUgbXVsdGlwbGVzIG9mIHRoaXMgbnVtYmVyLiAgVGhpcyBkZWZhdWx0cyB0bworNTEyLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1oZWFwXGZSIFxmSXJlc2VydmVcZlIiIDQKKy5JWCBJdGVtICItLWhlYXAgcmVzZXJ2ZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1oZWFwXGZSIFxmSXJlc2VydmVcZlJcZkIsXGZSXGZJY29tbWl0XGZSIiA0CisuSVggSXRlbSAiLS1oZWFwIHJlc2VydmUsY29tbWl0IgorLlBECitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgbWVtb3J5IHRvIHJlc2VydmUgKGFuZCBvcHRpb25hbGx5IGNvbW1pdCkKK3RvIGJlIHVzZWQgYXMgaGVhcCBmb3IgdGhpcyBwcm9ncmFtLiAgVGhlIGRlZmF1bHQgaXMgMU1iIHJlc2VydmVkLCA0SworY29tbWl0dGVkLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1pbWFnZVwtYmFzZVxmUiBcZkl2YWx1ZVxmUiIgNAorLklYIEl0ZW0gIi0taW1hZ2UtYmFzZSB2YWx1ZSIKK1VzZSBcZkl2YWx1ZVxmUiBhcyB0aGUgYmFzZSBhZGRyZXNzIG9mIHlvdXIgcHJvZ3JhbSBvciBkbGwuICBUaGlzIGlzCit0aGUgbG93ZXN0IG1lbW9yeSBsb2NhdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB3aGVuIHlvdXIgcHJvZ3JhbSBvciBkbGwKK2lzIGxvYWRlZC4gIFRvIHJlZHVjZSB0aGUgbmVlZCB0byByZWxvY2F0ZSBhbmQgaW1wcm92ZSBwZXJmb3JtYW5jZSBvZgoreW91ciBkbGxzLCBlYWNoIHNob3VsZCBoYXZlIGEgdW5pcXVlIGJhc2UgYWRkcmVzcyBhbmQgbm90IG92ZXJsYXAgYW55CitvdGhlciBkbGxzLiAgVGhlIGRlZmF1bHQgaXMgMHg0MDAwMDAgZm9yIGV4ZWN1dGFibGVzLCBhbmQgMHgxMDAwMDAwMAorZm9yIGRsbHMuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLWtpbGxcLWF0XGZSIiA0CisuSVggSXRlbSAiLS1raWxsLWF0IgorSWYgZ2l2ZW4sIHRoZSBzdGRjYWxsIHN1ZmZpeGVzIChAXGZJbm5cZlIpIHdpbGwgYmUgc3RyaXBwZWQgZnJvbQorc3ltYm9scyBiZWZvcmUgdGhleSBhcmUgZXhwb3J0ZWQuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLWxhcmdlXC1hZGRyZXNzXC1hd2FyZVxmUiIgNAorLklYIEl0ZW0gIi0tbGFyZ2UtYWRkcmVzcy1hd2FyZSIKK0lmIGdpdmVuLCB0aGUgYXBwcm9wcmlhdGUgYml0IGluIHRoZSBcKihMIkNoYXJhY3RlcmlzdGljc1wqKFIiIGZpZWxkIG9mIHRoZSBccy0xQ09GRlxzMAoraGVhZGVyIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgZXhlY3V0YWJsZSBzdXBwb3J0cyB2aXJ0dWFsIGFkZHJlc3NlcworZ3JlYXRlciB0aGFuIDIgZ2lnYWJ5dGVzLiAgVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSAvM0dCCitvciAvVVNFUlZBPVxmSXZhbHVlXGZSIG1lZ2FieXRlcyBzd2l0Y2ggaW4gdGhlIFwqKEwiW29wZXJhdGluZyBzeXN0ZW1zXVwqKFIiCitzZWN0aW9uIG9mIHRoZSBccy0xQk9PVFxzMC5JTkkuICBPdGhlcndpc2UsIHRoaXMgYml0IGhhcyBubyBlZmZlY3QuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gXHMtMVBFXHMwIHRhcmdldGVkIHBvcnRzIG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1tYWpvclwtaW1hZ2VcLXZlcnNpb25cZlIgXGZJdmFsdWVcZlIiIDQKKy5JWCBJdGVtICItLW1ham9yLWltYWdlLXZlcnNpb24gdmFsdWUiCitTZXRzIHRoZSBtYWpvciBudW1iZXIgb2YgdGhlIFwqKEwiaW1hZ2UgdmVyc2lvblwqKFIiLiAgRGVmYXVsdHMgdG8gMS4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtbWFqb3JcLW9zXC12ZXJzaW9uXGZSIFxmSXZhbHVlXGZSIiA0CisuSVggSXRlbSAiLS1tYWpvci1vcy12ZXJzaW9uIHZhbHVlIgorU2V0cyB0aGUgbWFqb3IgbnVtYmVyIG9mIHRoZSBcKihMIm9zIHZlcnNpb25cKihSIi4gIERlZmF1bHRzIHRvIDQuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLW1ham9yXC1zdWJzeXN0ZW1cLXZlcnNpb25cZlIgXGZJdmFsdWVcZlIiIDQKKy5JWCBJdGVtICItLW1ham9yLXN1YnN5c3RlbS12ZXJzaW9uIHZhbHVlIgorU2V0cyB0aGUgbWFqb3IgbnVtYmVyIG9mIHRoZSBcKihMInN1YnN5c3RlbSB2ZXJzaW9uXCooUiIuICBEZWZhdWx0cyB0byA0LgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1taW5vclwtaW1hZ2VcLXZlcnNpb25cZlIgXGZJdmFsdWVcZlIiIDQKKy5JWCBJdGVtICItLW1pbm9yLWltYWdlLXZlcnNpb24gdmFsdWUiCitTZXRzIHRoZSBtaW5vciBudW1iZXIgb2YgdGhlIFwqKEwiaW1hZ2UgdmVyc2lvblwqKFIiLiAgRGVmYXVsdHMgdG8gMC4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtbWlub3JcLW9zXC12ZXJzaW9uXGZSIFxmSXZhbHVlXGZSIiA0CisuSVggSXRlbSAiLS1taW5vci1vcy12ZXJzaW9uIHZhbHVlIgorU2V0cyB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBcKihMIm9zIHZlcnNpb25cKihSIi4gIERlZmF1bHRzIHRvIDAuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLW1pbm9yXC1zdWJzeXN0ZW1cLXZlcnNpb25cZlIgXGZJdmFsdWVcZlIiIDQKKy5JWCBJdGVtICItLW1pbm9yLXN1YnN5c3RlbS12ZXJzaW9uIHZhbHVlIgorU2V0cyB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBcKihMInN1YnN5c3RlbSB2ZXJzaW9uXCooUiIuICBEZWZhdWx0cyB0byAwLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1vdXRwdXRcLWRlZlxmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLS1vdXRwdXQtZGVmIGZpbGUiCitUaGUgbGlua2VyIHdpbGwgY3JlYXRlIHRoZSBmaWxlIFxmSWZpbGVcZlIgd2hpY2ggd2lsbCBjb250YWluIGEgXHMtMURFRlxzMAorZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBccy0xRExMXHMwIHRoZSBsaW5rZXIgaXMgZ2VuZXJhdGluZy4gIFRoaXMgXHMtMURFRlxzMCBmaWxlCisod2hpY2ggc2hvdWxkIGJlIGNhbGxlZCBcZihDV1wqKENgKi5kZWZcKihDJ1xmUikgbWF5IGJlIHVzZWQgdG8gY3JlYXRlIGFuIGltcG9ydAorbGlicmFyeSB3aXRoIFxmKENXXCooQ2BkbGx0b29sXCooQydcZlIgb3IgbWF5IGJlIHVzZWQgYXMgYSByZWZlcmVuY2UgdG8KK2F1dG9tYXRpY2FsbHkgb3IgaW1wbGljaXRseSBleHBvcnRlZCBzeW1ib2xzLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1vdXRcLWltcGxpYlxmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLS1vdXQtaW1wbGliIGZpbGUiCitUaGUgbGlua2VyIHdpbGwgY3JlYXRlIHRoZSBmaWxlIFxmSWZpbGVcZlIgd2hpY2ggd2lsbCBjb250YWluIGFuCitpbXBvcnQgbGliIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFxzLTFETExcczAgdGhlIGxpbmtlciBpcyBnZW5lcmF0aW5nLiBUaGlzCitpbXBvcnQgbGliICh3aGljaCBzaG91bGQgYmUgY2FsbGVkIFxmKENXXCooQ2AqLmRsbC5hXCooQydcZlIgb3IgXGYoQ1dcKihDYCouYVwqKEMnXGZSCittYXkgYmUgdXNlZCB0byBsaW5rIGNsaWVudHMgYWdhaW5zdCB0aGUgZ2VuZXJhdGVkIFxzLTFETExcczA7IHRoaXMgYmVoYXZpb3VyCittYWtlcyBpdCBwb3NzaWJsZSB0byBza2lwIGEgc2VwYXJhdGUgXGYoQ1dcKihDYGRsbHRvb2xcKihDJ1xmUiBpbXBvcnQgbGlicmFyeQorY3JlYXRpb24gc3RlcC4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtZW5hYmxlXC1hdXRvXC1pbWFnZVwtYmFzZVxmUiIgNAorLklYIEl0ZW0gIi0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSIKK0F1dG9tYXRpY2FsbHkgY2hvb3NlIHRoZSBpbWFnZSBiYXNlIGZvciBETExzLCB1bmxlc3Mgb25lIGlzIHNwZWNpZmllZAordXNpbmcgdGhlIFxmKENXXCooQ2BcLVwtaW1hZ2VcLWJhc2VcKihDJ1xmUiBhcmd1bWVudC4gIEJ5IHVzaW5nIGEgaGFzaCBnZW5lcmF0ZWQKK2Zyb20gdGhlIGRsbG5hbWUgdG8gY3JlYXRlIHVuaXF1ZSBpbWFnZSBiYXNlcyBmb3IgZWFjaCBccy0xRExMXHMwLCBpbi1tZW1vcnkKK2NvbGxpc2lvbnMgYW5kIHJlbG9jYXRpb25zIHdoaWNoIGNhbiBkZWxheSBwcm9ncmFtIGV4ZWN1dGlvbiBhcmUKK2F2b2lkZWQuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLWRpc2FibGVcLWF1dG9cLWltYWdlXC1iYXNlXGZSIiA0CisuSVggSXRlbSAiLS1kaXNhYmxlLWF1dG8taW1hZ2UtYmFzZSIKK0RvIG5vdCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGEgdW5pcXVlIGltYWdlIGJhc2UuICBJZiB0aGVyZSBpcyBubwordXNlci1zcGVjaWZpZWQgaW1hZ2UgYmFzZSAoXGYoQ1dcKihDYFwtXC1pbWFnZVwtYmFzZVwqKEMnXGZSKSB0aGVuIHVzZSB0aGUgcGxhdGZvcm0KK2RlZmF1bHQuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLWRsbFwtc2VhcmNoXC1wcmVmaXhcZlIgXGZJc3RyaW5nXGZSIiA0CisuSVggSXRlbSAiLS1kbGwtc2VhcmNoLXByZWZpeCBzdHJpbmciCitXaGVuIGxpbmtpbmcgZHluYW1pY2FsbHkgdG8gYSBkbGwgd2l0aG91dCBhbiBpbXBvcnQgbGlicmFyeSwKK3NlYXJjaCBmb3IgXGYoQ1dcKihDYDxzdHJpbmc+PGJhc2VuYW1lPi5kbGxcKihDJ1xmUiBpbiBwcmVmZXJlbmNlIHRvCitcJlxmKENXXCooQ2BsaWI8YmFzZW5hbWU+LmRsbFwqKEMnXGZSLiBUaGlzIGJlaGF2aW91ciBhbGxvd3MgZWFzeSBkaXN0aW5jdGlvbgorYmV0d2VlbiBETExzIGJ1aWx0IGZvciB0aGUgdmFyaW91cyBcKihMInN1YnBsYXRmb3Jtc1wqKFIiOiBuYXRpdmUsIGN5Z3dpbiwKK3V3aW4sIHB3LCBldGMuICBGb3IgaW5zdGFuY2UsIGN5Z3dpbiBETExzIHR5cGljYWxseSB1c2UKK1wmXGYoQ1dcKihDYFwtXC1kbGxcLXNlYXJjaFwtcHJlZml4PWN5Z1wqKEMnXGZSLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1lbmFibGVcLWF1dG9cLWltcG9ydFxmUiIgNAorLklYIEl0ZW0gIi0tZW5hYmxlLWF1dG8taW1wb3J0IgorRG8gc29waGlzdGljYXRlZCBsaW5raW5nIG9mIFxmKENXXCooQ2Bfc3ltYm9sXCooQydcZlIgdG8gXGYoQ1dcKihDYF9cfF9pbXBfXHxfc3ltYm9sXCooQydcZlIgZm9yCitcJlxzLTFEQVRBXHMwIGltcG9ydHMgZnJvbSBETExzLCBhbmQgY3JlYXRlIHRoZSBuZWNlc3NhcnkgdGh1bmtpbmcgc3ltYm9scyB3aGVuCitidWlsZGluZyB0aGUgaW1wb3J0IGxpYnJhcmllcyB3aXRoIHRob3NlIFxzLTFEQVRBXHMwIGV4cG9ydHMuIE5vdGU6IFVzZSBvZiB0aGUKK1wmJ2F1dG9cLWltcG9ydCcgZXh0ZW5zaW9uIHdpbGwgY2F1c2UgdGhlIHRleHQgc2VjdGlvbiBvZiB0aGUgaW1hZ2UgZmlsZQordG8gYmUgbWFkZSB3cml0YWJsZS4gVGhpcyBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBQRS1DT0ZGIGZvcm1hdAorc3BlY2lmaWNhdGlvbiBwdWJsaXNoZWQgYnkgTWljcm9zb2Z0LgorLlNwCitOb3RlIFwtIHVzZSBvZiB0aGUgJ2F1dG9cLWltcG9ydCcgZXh0ZW5zaW9uIHdpbGwgYWxzbyBjYXVzZSByZWFkIG9ubHkKK2RhdGEgd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgcGxhY2VkIGludG8gdGhlIC5yZGF0YSBzZWN0aW9uIHRvIGJlCitwbGFjZWQgaW50byB0aGUgLmRhdGEgc2VjdGlvbiBpbnN0ZWFkLiAgVGhpcyBpcyBpbiBvcmRlciB0byB3b3JrCithcm91bmQgYSBwcm9ibGVtIHdpdGggY29uc3RzIHRoYXQgaXMgZGVzY3JpYmVkIGhlcmU6CitodHRwOi8vd3d3LmN5Z3dpbi5jb20vbWwvY3lnd2luLzIwMDRcLTA5L21zZzAxMTAxLmh0bWwKKy5TcAorVXNpbmcgJ2F1dG9cLWltcG9ydCcgZ2VuZXJhbGx5IHdpbGwgJ2p1c3Qgd29yaycgXCooLS0gYnV0IHNvbWV0aW1lcyB5b3UgbWF5CitzZWUgdGhpcyBtZXNzYWdlOgorLlNwCisidmFyaWFibGUgJzx2YXI+JyBjYW4ndCBiZSBhdXRvLWltcG9ydGVkLiBQbGVhc2UgcmVhZCB0aGUKK2RvY3VtZW50YXRpb24gZm9yIGxkJ3MgXGYoQ1dcKihDYFwtXC1lbmFibGVcLWF1dG9cLWltcG9ydFwqKEMnXGZSIGZvciBkZXRhaWxzLiIKKy5TcAorVGhpcyBtZXNzYWdlIG9jY3VycyB3aGVuIHNvbWUgKHN1YilleHByZXNzaW9uIGFjY2Vzc2VzIGFuIGFkZHJlc3MKK3VsdGltYXRlbHkgZ2l2ZW4gYnkgdGhlIHN1bSBvZiB0d28gY29uc3RhbnRzIChXaW4zMiBpbXBvcnQgdGFibGVzIG9ubHkKK2FsbG93IG9uZSkuICBJbnN0YW5jZXMgd2hlcmUgdGhpcyBtYXkgb2NjdXIgaW5jbHVkZSBhY2Nlc3NlcyB0byBtZW1iZXIKK2ZpZWxkcyBvZiBzdHJ1Y3QgdmFyaWFibGVzIGltcG9ydGVkIGZyb20gYSBccy0xRExMXHMwLCBhcyB3ZWxsIGFzIHVzaW5nIGEKK2NvbnN0YW50IGluZGV4IGludG8gYW4gYXJyYXkgdmFyaWFibGUgaW1wb3J0ZWQgZnJvbSBhIFxzLTFETExcczAuICBBbnkKK211bHRpd29yZCB2YXJpYWJsZSAoYXJyYXlzLCBzdHJ1Y3RzLCBsb25nIGxvbmcsIGV0YykgbWF5IHRyaWdnZXIKK3RoaXMgZXJyb3IgY29uZGl0aW9uLiAgSG93ZXZlciwgcmVnYXJkbGVzcyBvZiB0aGUgZXhhY3QgZGF0YSB0eXBlCitvZiB0aGUgb2ZmZW5kaW5nIGV4cG9ydGVkIHZhcmlhYmxlLCBsZCB3aWxsIGFsd2F5cyBkZXRlY3QgaXQsIGlzc3VlCit0aGUgd2FybmluZywgYW5kIGV4aXQuCisuU3AKK1RoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gYWRkcmVzcyB0aGlzIGRpZmZpY3VsdHksIHJlZ2FyZGxlc3Mgb2YgdGhlCitkYXRhIHR5cGUgb2YgdGhlIGV4cG9ydGVkIHZhcmlhYmxlOgorLlNwCitPbmUgd2F5IGlzIHRvIHVzZSBcLVwtZW5hYmxlXC1ydW50aW1lXC1wc2V1ZG9cLXJlbG9jIHN3aXRjaC4gVGhpcyBsZWF2ZXMgdGhlIHRhc2sKK29mIGFkanVzdGluZyByZWZlcmVuY2VzIGluIHlvdXIgY2xpZW50IGNvZGUgZm9yIHJ1bnRpbWUgZW52aXJvbm1lbnQsIHNvCit0aGlzIG1ldGhvZCB3b3JrcyBvbmx5IHdoZW4gcnVudGltZSBlbnZpcm9ubWVudCBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuCisuU3AKK0Egc2Vjb25kIHNvbHV0aW9uIGlzIHRvIGZvcmNlIG9uZSBvZiB0aGUgJ2NvbnN0YW50cycgdG8gYmUgYSB2YXJpYWJsZSBcKigtLQordGhhdCBpcywgdW5rbm93biBhbmQgdW4tb3B0aW1pemFibGUgYXQgY29tcGlsZSB0aW1lLiAgRm9yIGFycmF5cywKK3RoZXJlIGFyZSB0d28gcG9zc2liaWxpdGllczogYSkgbWFrZSB0aGUgaW5kZXhlZSAodGhlIGFycmF5J3MgYWRkcmVzcykKK2EgdmFyaWFibGUsIG9yIGIpIG1ha2UgdGhlICdjb25zdGFudCcgaW5kZXggYSB2YXJpYWJsZS4gIFRodXM6CisuU3AKKy5WYiAzCitcJiAgICAgICAgZXh0ZXJuIHR5cGUgZXh0ZXJuX2FycmF5W107CitcJiAgICAgICAgZXh0ZXJuX2FycmF5WzFdIFwtXC0+CitcJiAgICAgICAgICAgeyB2b2xhdGlsZSB0eXBlICp0PWV4dGVybl9hcnJheTsgdFsxXSB9CisuVmUKKy5TcAorb3IKKy5TcAorLlZiIDMKK1wmICAgICAgICBleHRlcm4gdHlwZSBleHRlcm5fYXJyYXlbXTsKK1wmICAgICAgICBleHRlcm5fYXJyYXlbMV0gXC1cLT4KK1wmICAgICAgICAgICB7IHZvbGF0aWxlIGludCB0PTE7IGV4dGVybl9hcnJheVt0XSB9CisuVmUKKy5TcAorRm9yIHN0cnVjdHMgKGFuZCBtb3N0IG90aGVyIG11bHRpd29yZCBkYXRhIHR5cGVzKSB0aGUgb25seSBvcHRpb24KK2lzIHRvIG1ha2UgdGhlIHN0cnVjdCBpdHNlbGYgKG9yIHRoZSBsb25nIGxvbmcsIG9yIHRoZSAuLi4pIHZhcmlhYmxlOgorLlNwCisuVmIgMworXCYgICAgICAgIGV4dGVybiBzdHJ1Y3QgcyBleHRlcm5fc3RydWN0OworXCYgICAgICAgIGV4dGVybl9zdHJ1Y3QuZmllbGQgXC1cLT4KK1wmICAgICAgICAgICB7IHZvbGF0aWxlIHN0cnVjdCBzICp0PSZleHRlcm5fc3RydWN0OyB0XC0+ZmllbGQgfQorLlZlCisuU3AKK29yCisuU3AKKy5WYiAzCitcJiAgICAgICAgZXh0ZXJuIGxvbmcgbG9uZyBleHRlcm5fbGw7CitcJiAgICAgICAgZXh0ZXJuX2xsIFwtXC0+CitcJiAgICAgICAgICB7IHZvbGF0aWxlIGxvbmcgbG9uZyAqIGxvY2FsX2xsPSZleHRlcm5fbGw7ICpsb2NhbF9sbCB9CisuVmUKKy5TcAorQSB0aGlyZCBtZXRob2Qgb2YgZGVhbGluZyB3aXRoIHRoaXMgZGlmZmljdWx0eSBpcyB0byBhYmFuZG9uCitcJidhdXRvXC1pbXBvcnQnIGZvciB0aGUgb2ZmZW5kaW5nIHN5bWJvbCBhbmQgbWFyayBpdCB3aXRoCitcJlxmKENXXCooQ2BfXHxfZGVjbHNwZWMoZGxsaW1wb3J0KVwqKEMnXGZSLiAgSG93ZXZlciwgaW4gcHJhY3Rpc2UgdGhhdAorcmVxdWlyZXMgdXNpbmcgY29tcGlsZS10aW1lICNkZWZpbmVzIHRvIGluZGljYXRlIHdoZXRoZXIgeW91IGFyZQorYnVpbGRpbmcgYSBccy0xRExMXHMwLCBidWlsZGluZyBjbGllbnQgY29kZSB0aGF0IHdpbGwgbGluayB0byB0aGUgXHMtMURMTFxzMCwgb3IKK21lcmVseSBidWlsZGluZy9saW5raW5nIHRvIGEgc3RhdGljIGxpYnJhcnkuICAgSW4gbWFraW5nIHRoZSBjaG9pY2UKK2JldHdlZW4gdGhlIHZhcmlvdXMgbWV0aG9kcyBvZiByZXNvbHZpbmcgdGhlICdkaXJlY3QgYWRkcmVzcyB3aXRoCitjb25zdGFudCBvZmZzZXQnIHByb2JsZW0sIHlvdSBzaG91bGQgY29uc2lkZXIgdHlwaWNhbCByZWFsLXdvcmxkIHVzYWdlOgorLlNwCitPcmlnaW5hbDoKKy5TcAorLlZiIDcKK1wmICAgICAgICBcLVwtZm9vLmgKK1wmICAgICAgICBleHRlcm4gaW50IGFycltdOworXCYgICAgICAgIFwtXC1mb28uYworXCYgICAgICAgICNpbmNsdWRlICJmb28uaCIKK1wmICAgICAgICB2b2lkIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KXsKK1wmICAgICAgICAgIHByaW50ZigiJWRcZW4iLGFyclsxXSk7CitcJiAgICAgICAgfQorLlZlCisuU3AKK1NvbHV0aW9uIDE6CisuU3AKKy5WYiA5CitcJiAgICAgICAgXC1cLWZvby5oCitcJiAgICAgICAgZXh0ZXJuIGludCBhcnJbXTsKK1wmICAgICAgICBcLVwtZm9vLmMKK1wmICAgICAgICAjaW5jbHVkZSAiZm9vLmgiCitcJiAgICAgICAgdm9pZCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndil7CitcJiAgICAgICAgICAvKiBUaGlzIHdvcmthcm91bmQgaXMgZm9yIHdpbjMyIGFuZCBjeWd3aW47IGRvIG5vdCAib3B0aW1pemUiICovCitcJiAgICAgICAgICB2b2xhdGlsZSBpbnQgKnBhcnIgPSBhcnI7CitcJiAgICAgICAgICBwcmludGYoIiVkXGVuIixwYXJyWzFdKTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorU29sdXRpb24gMjoKKy5TcAorLlZiIDEwCitcJiAgICAgICAgXC1cLWZvby5oCitcJiAgICAgICAgLyogTm90ZTogYXV0b1wtZXhwb3J0IGlzIGFzc3VtZWQgKG5vIF9cfF9kZWNsc3BlYyhkbGxleHBvcnQpKSAqLworXCYgICAgICAgICNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1x8X0NZR1dJTl9cfF8pKSAmJiBcZQorXCYgICAgICAgICAgIShkZWZpbmVkKEZPT19CVUlMRF9ETEwpIHx8IGRlZmluZWQoRk9PX1NUQVRJQykpCitcJiAgICAgICAgI2RlZmluZSBGT09fSU1QT1JUIF9cfF9kZWNsc3BlYyhkbGxpbXBvcnQpCitcJiAgICAgICAgI2Vsc2UKK1wmICAgICAgICAjZGVmaW5lIEZPT19JTVBPUlQKK1wmICAgICAgICAjZW5kaWYKK1wmICAgICAgICBleHRlcm4gRk9PX0lNUE9SVCBpbnQgYXJyW107CitcJiAgICAgICAgXC1cLWZvby5jCitcJiAgICAgICAgI2luY2x1ZGUgImZvby5oIgorXCYgICAgICAgIHZvaWQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpeworXCYgICAgICAgICAgcHJpbnRmKCIlZFxlbiIsYXJyWzFdKTsKK1wmICAgICAgICB9CisuVmUKKy5TcAorQSBmb3VydGggd2F5IHRvIGF2b2lkIHRoaXMgcHJvYmxlbSBpcyB0byByZS1jb2RlIHlvdXIKK2xpYnJhcnkgdG8gdXNlIGEgZnVuY3Rpb25hbCBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gYSBkYXRhIGludGVyZmFjZQorZm9yIHRoZSBvZmZlbmRpbmcgdmFyaWFibGVzIChlLmcuIFxmSXNldF9mb28oKVxmUiBhbmQgXGZJZ2V0X2ZvbygpXGZSIGFjY2Vzc29yCitmdW5jdGlvbnMpLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIHRoZSBpMzg2IFxzLTFQRVxzMCB0YXJnZXRlZCBwb3J0IG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1kaXNhYmxlXC1hdXRvXC1pbXBvcnRcZlIiIDQKKy5JWCBJdGVtICItLWRpc2FibGUtYXV0by1pbXBvcnQiCitEbyBub3QgYXR0ZW1wdCB0byBkbyBzb3BoaXN0aWNhdGVkIGxpbmtpbmcgb2YgXGYoQ1dcKihDYF9zeW1ib2xcKihDJ1xmUiB0bworXCZcZihDV1wqKENgX1x8X2ltcF9cfF9zeW1ib2xcKihDJ1xmUiBmb3IgXHMtMURBVEFcczAgaW1wb3J0cyBmcm9tIERMTHMuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLWVuYWJsZVwtcnVudGltZVwtcHNldWRvXC1yZWxvY1xmUiIgNAorLklYIEl0ZW0gIi0tZW5hYmxlLXJ1bnRpbWUtcHNldWRvLXJlbG9jIgorSWYgeW91ciBjb2RlIGNvbnRhaW5zIGV4cHJlc3Npb25zIGRlc2NyaWJlZCBpbiBcLVwtZW5hYmxlXC1hdXRvXC1pbXBvcnQgc2VjdGlvbiwKK3RoYXQgaXMsIFxzLTFEQVRBXHMwIGltcG9ydHMgZnJvbSBccy0xRExMXHMwIHdpdGggbm9uLXplcm8gb2Zmc2V0LCB0aGlzIHN3aXRjaCB3aWxsIGNyZWF0ZQorYSB2ZWN0b3Igb2YgJ3J1bnRpbWUgcHNldWRvIHJlbG9jYXRpb25zJyB3aGljaCBjYW4gYmUgdXNlZCBieSBydW50aW1lCitlbnZpcm9ubWVudCB0byBhZGp1c3QgcmVmZXJlbmNlcyB0byBzdWNoIGRhdGEgaW4geW91ciBjbGllbnQgY29kZS4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtZGlzYWJsZVwtcnVudGltZVwtcHNldWRvXC1yZWxvY1xmUiIgNAorLklYIEl0ZW0gIi0tZGlzYWJsZS1ydW50aW1lLXBzZXVkby1yZWxvYyIKK0RvIG5vdCBjcmVhdGUgcHNldWRvIHJlbG9jYXRpb25zIGZvciBub24temVybyBvZmZzZXQgXHMtMURBVEFcczAgaW1wb3J0cyBmcm9tCitETExzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtZW5hYmxlXC1leHRyYVwtcGVcLWRlYnVnXGZSIiA0CisuSVggSXRlbSAiLS1lbmFibGUtZXh0cmEtcGUtZGVidWciCitTaG93IGFkZGl0aW9uYWwgZGVidWcgaW5mbyByZWxhdGVkIHRvIGF1dG8taW1wb3J0IHN5bWJvbCB0aHVua2luZy4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtc2VjdGlvblwtYWxpZ25tZW50XGZSIiA0CisuSVggSXRlbSAiLS1zZWN0aW9uLWFsaWdubWVudCIKK1NldHMgdGhlIHNlY3Rpb24gYWxpZ25tZW50LiAgU2VjdGlvbnMgaW4gbWVtb3J5IHdpbGwgYWx3YXlzIGJlZ2luIGF0CithZGRyZXNzZXMgd2hpY2ggYXJlIGEgbXVsdGlwbGUgb2YgdGhpcyBudW1iZXIuICBEZWZhdWx0cyB0byAweDEwMDAuCitbVGhpcyBvcHRpb24gaXMgc3BlY2lmaWMgdG8gdGhlIGkzODYgXHMtMVBFXHMwIHRhcmdldGVkIHBvcnQgb2YgdGhlIGxpbmtlcl0KKy5JUCAiXGZCXC1cLXN0YWNrXGZSIFxmSXJlc2VydmVcZlIiIDQKKy5JWCBJdGVtICItLXN0YWNrIHJlc2VydmUiCisuUEQgMAorLklQICJcZkJcLVwtc3RhY2tcZlIgXGZJcmVzZXJ2ZVxmUlxmQixcZlJcZkljb21taXRcZlIiIDQKKy5JWCBJdGVtICItLXN0YWNrIHJlc2VydmUsY29tbWl0IgorLlBECitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgbWVtb3J5IHRvIHJlc2VydmUgKGFuZCBvcHRpb25hbGx5IGNvbW1pdCkKK3RvIGJlIHVzZWQgYXMgc3RhY2sgZm9yIHRoaXMgcHJvZ3JhbS4gIFRoZSBkZWZhdWx0IGlzIDJNYiByZXNlcnZlZCwgNEsKK2NvbW1pdHRlZC4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLklQICJcZkJcLVwtc3Vic3lzdGVtXGZSIFxmSXdoaWNoXGZSIiA0CisuSVggSXRlbSAiLS1zdWJzeXN0ZW0gd2hpY2giCisuUEQgMAorLklQICJcZkJcLVwtc3Vic3lzdGVtXGZSIFxmSXdoaWNoXGZSXGZCOlxmUlxmSW1ham9yXGZSIiA0CisuSVggSXRlbSAiLS1zdWJzeXN0ZW0gd2hpY2g6bWFqb3IiCisuSVAgIlxmQlwtXC1zdWJzeXN0ZW1cZlIgXGZJd2hpY2hcZlJcZkI6XGZSXGZJbWFqb3JcZlJcZkIuXGZSXGZJbWlub3JcZlIiIDQKKy5JWCBJdGVtICItLXN1YnN5c3RlbSB3aGljaDptYWpvci5taW5vciIKKy5QRAorU3BlY2lmaWVzIHRoZSBzdWJzeXN0ZW0gdW5kZXIgd2hpY2ggeW91ciBwcm9ncmFtIHdpbGwgZXhlY3V0ZS4gIFRoZQorbGVnYWwgdmFsdWVzIGZvciBcZkl3aGljaFxmUiBhcmUgXGYoQ1dcKihDYG5hdGl2ZVwqKEMnXGZSLCBcZihDV1wqKENgd2luZG93c1wqKEMnXGZSLAorXCZcZihDV1wqKENgY29uc29sZVwqKEMnXGZSLCBcZihDV1wqKENgcG9zaXhcKihDJ1xmUiwgYW5kIFxmKENXXCooQ2B4Ym94XCooQydcZlIuICBZb3UgbWF5IG9wdGlvbmFsbHkgc2V0Cit0aGUgc3Vic3lzdGVtIHZlcnNpb24gYWxzby4gIE51bWVyaWMgdmFsdWVzIGFyZSBhbHNvIGFjY2VwdGVkIGZvcgorXCZcZkl3aGljaFxmUi4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgaTM4NiBccy0xUEVcczAgdGFyZ2V0ZWQgcG9ydCBvZiB0aGUgbGlua2VyXQorLlNwCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgc2V0IGZsYWdzIGluIHRoZSBcZihDV1wqKENgRGxsQ2hhcmFjdGVyaXN0aWNzXCooQydcZlIgZmllbGQKK29mIHRoZSBccy0xUEVcczAgZmlsZSBoZWFkZXI6CitbVGhlc2Ugb3B0aW9ucyBhcmUgc3BlY2lmaWMgdG8gXHMtMVBFXHMwIHRhcmdldGVkIHBvcnRzIG9mIHRoZSBsaW5rZXJdCisuSVAgIlxmQlwtXC1keW5hbWljYmFzZVxmUiIgNAorLklYIEl0ZW0gIi0tZHluYW1pY2Jhc2UiCitUaGUgaW1hZ2UgYmFzZSBhZGRyZXNzIG1heSBiZSByZWxvY2F0ZWQgdXNpbmcgYWRkcmVzcyBzcGFjZSBsYXlvdXQKK3JhbmRvbWl6YXRpb24gKFxzLTFBU0xSXHMwKS4gIFRoaXMgZmVhdHVyZSB3YXMgaW50cm9kdWNlZCB3aXRoIFxzLTFNU1xzMCBXaW5kb3dzCitWaXN0YSBmb3IgaTM4NiBccy0xUEVcczAgdGFyZ2V0cy4KKy5JUCAiXGZCXC1cLWZvcmNlaW50ZWdcZlIiIDQKKy5JWCBJdGVtICItLWZvcmNlaW50ZWciCitDb2RlIGludGVncml0eSBjaGVja3MgYXJlIGVuZm9yY2VkLgorLklQICJcZkJcLVwtbnhjb21wYXRcZlIiIDQKKy5JWCBJdGVtICItLW54Y29tcGF0IgorVGhlIGltYWdlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgRGF0YSBFeGVjdXRpb24gUHJldmVudGlvbi4KK1RoaXMgZmVhdHVyZSB3YXMgaW50cm9kdWNlZCB3aXRoIFxzLTFNU1xzMCBXaW5kb3dzIFxzLTFYUFxzMCBccy0xU1AyXHMwIGZvciBpMzg2IFxzLTFQRVxzMCB0YXJnZXRzLgorLklQICJcZkJcLVwtbm9cLWlzb2xhdGlvblxmUiIgNAorLklYIEl0ZW0gIi0tbm8taXNvbGF0aW9uIgorQWx0aG91Z2ggdGhlIGltYWdlIHVuZGVyc3RhbmRzIGlzb2xhdGlvbiwgZG8gbm90IGlzb2xhdGUgdGhlIGltYWdlLgorLklQICJcZkJcLVwtbm9cLXNlaFxmUiIgNAorLklYIEl0ZW0gIi0tbm8tc2VoIgorVGhlIGltYWdlIGRvZXMgbm90IHVzZSBccy0xU0VIXHMwLiBObyBccy0xU0VcczAgaGFuZGxlciBtYXkgYmUgY2FsbGVkIGZyb20KK3RoaXMgaW1hZ2UuCisuSVAgIlxmQlwtXC1ub1wtYmluZFxmUiIgNAorLklYIEl0ZW0gIi0tbm8tYmluZCIKK0RvIG5vdCBiaW5kIHRoaXMgaW1hZ2UuCisuSVAgIlxmQlwtXC13ZG1kcml2ZXJcZlIiIDQKKy5JWCBJdGVtICItLXdkbWRyaXZlciIKK1RoZSBkcml2ZXIgdXNlcyB0aGUgXHMtMU1TXHMwIFdpbmRvd3MgRHJpdmVyIE1vZGVsLgorLklQICJcZkJcLVwtdHNhd2FyZVxmUiIgNAorLklYIEl0ZW0gIi0tdHNhd2FyZSIKK1RoZSBpbWFnZSBpcyBUZXJtaW5hbCBTZXJ2ZXIgYXdhcmUuCisuUFAKK1RoZSBDNlggdUNsaW51eCB0YXJnZXQgdXNlcyBhIGJpbmFyeSBmb3JtYXQgY2FsbGVkIFxzLTFEU0JUXHMwIHRvIHN1cHBvcnQgc2hhcmVkCitsaWJyYXJpZXMuICBFYWNoIHNoYXJlZCBsaWJyYXJ5IGluIHRoZSBzeXN0ZW0gbmVlZHMgdG8gaGF2ZSBhIHVuaXF1ZSBpbmRleDsKK2FsbCBleGVjdXRhYmxlcyB1c2UgYW4gaW5kZXggb2YgMC4KKy5JUCAiXGZCXC1cLWRzYnRcLXNpemVcZlIgXGZJc2l6ZVxmUiIgNAorLklYIEl0ZW0gIi0tZHNidC1zaXplIHNpemUiCitUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgZW50aXJlcyBpbiB0aGUgXHMtMURTQlRcczAgb2YgdGhlIGN1cnJlbnQgZXhlY3V0YWJsZQorb3Igc2hhcmVkIGxpYnJhcnkgdG8gXGZJc2l6ZVxmUi4gIFRoZSBkZWZhdWx0IGlzIHRvIGNyZWF0ZSBhIHRhYmxlIHdpdGggNjQKK2VudHJpZXMuCisuSVAgIlxmQlwtXC1kc2J0XC1pbmRleFxmUiBcZklpbmRleFxmUiIgNAorLklYIEl0ZW0gIi0tZHNidC1pbmRleCBpbmRleCIKK1RoaXMgb3B0aW9uIHNldHMgdGhlIFxzLTFEU0JUXHMwIGluZGV4IG9mIHRoZSBjdXJyZW50IGV4ZWN1dGFibGUgb3Igc2hhcmVkIGxpYnJhcnkKK3RvIFxmSWluZGV4XGZSLiAgVGhlIGRlZmF1bHQgaXMgMCwgd2hpY2ggaXMgYXBwcm9wcmlhdGUgZm9yIGdlbmVyYXRpbmcKK2V4ZWN1dGFibGVzLiAgSWYgYSBzaGFyZWQgbGlicmFyeSBpcyBnZW5lcmF0ZWQgd2l0aCBhIFxzLTFEU0JUXHMwIGluZGV4IG9mIDAsIHRoZQorXCZcZihDV1wqKENgUl9DNjAwMF9EU0JUX0lOREVYXCooQydcZlIgcmVsb2NzIGFyZSBjb3BpZWQgaW50byB0aGUgb3V0cHV0IGZpbGUuCisuU3AKK1RoZSBcZkJcLVwtbm9cLW1lcmdlXC1leGlkeFwtZW50cmllc1xmUiBzd2l0Y2ggZGlzYWJsZXMgdGhlIG1lcmdpbmcgb2YgYWRqYWNlbnQKK2V4aWR4IGVudHJpZXMgaW4gZnJhbWUgdW53aW5kIGluZm8uCisuUFAKK1RoZSA2OEhDMTEgYW5kIDY4SEMxMiBsaW5rZXJzIHN1cHBvcnQgc3BlY2lmaWMgb3B0aW9ucyB0byBjb250cm9sIHRoZQorbWVtb3J5IGJhbmsgc3dpdGNoaW5nIG1hcHBpbmcgYW5kIHRyYW1wb2xpbmUgY29kZSBnZW5lcmF0aW9uLgorLklQICJcZkJcLVwtbm9cLXRyYW1wb2xpbmVcZlIiIDQKKy5JWCBJdGVtICItLW5vLXRyYW1wb2xpbmUiCitUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGUgZ2VuZXJhdGlvbiBvZiB0cmFtcG9saW5lLiBCeSBkZWZhdWx0IGEgdHJhbXBvbGluZQoraXMgZ2VuZXJhdGVkIGZvciBlYWNoIGZhciBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgdXNpbmcgYSBcZihDV1wqKENganNyXCooQydcZlIKK2luc3RydWN0aW9uICh0aGlzIGhhcHBlbnMgd2hlbiBhIHBvaW50ZXIgdG8gYSBmYXIgZnVuY3Rpb24gaXMgdGFrZW4pLgorLklQICJcZkJcLVwtYmFua1wtd2luZG93XGZSIFxmSW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWJhbmstd2luZG93IG5hbWUiCitUaGlzIG9wdGlvbiBpbmRpY2F0ZXMgdG8gdGhlIGxpbmtlciB0aGUgbmFtZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiBpbgordGhlIFxmQlxzLTFNRU1PUllcczBcZlIgc3BlY2lmaWNhdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgbWVtb3J5IGJhbmsgd2luZG93LgorVGhlIGRlZmluaXRpb24gb2Ygc3VjaCByZWdpb24gaXMgdGhlbiB1c2VkIGJ5IHRoZSBsaW5rZXIgdG8gY29tcHV0ZQorcGFnaW5nIGFuZCBhZGRyZXNzZXMgd2l0aGluIHRoZSBtZW1vcnkgd2luZG93LgorLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCB0byBjb250cm9sIGhhbmRsaW5nIG9mIFxzLTFHT1RcczAgZ2VuZXJhdGlvbgord2hlbiBsaW5raW5nIGZvciA2OEsgdGFyZ2V0cy4KKy5JUCAiXGZCXC1cLWdvdD1cZlJcZkl0eXBlXGZSIiA0CisuSVggSXRlbSAiLS1nb3Q9dHlwZSIKK1RoaXMgb3B0aW9uIHRlbGxzIHRoZSBsaW5rZXIgd2hpY2ggXHMtMUdPVFxzMCBnZW5lcmF0aW9uIHNjaGVtZSB0byB1c2UuCitcJlxmSXR5cGVcZlIgc2hvdWxkIGJlIG9uZSBvZiBcZkJzaW5nbGVcZlIsIFxmQm5lZ2F0aXZlXGZSLAorXCZcZkJtdWx0aWdvdFxmUiBvciBcZkJ0YXJnZXRcZlIuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byB0aGUKK0luZm8gZW50cnkgZm9yIFxmSWxkXGZSLgorLlNIICJFTlZJUk9OTUVOVCIKKy5JWCBIZWFkZXIgIkVOVklST05NRU5UIgorWW91IGNhbiBjaGFuZ2UgdGhlIGJlaGF2aW91ciBvZiBcZkJsZFxmUiB3aXRoIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK1wmXGYoQ1dcKihDYEdOVVRBUkdFVFwqKEMnXGZSLAorXCZcZihDV1wqKENgTERFTVVMQVRJT05cKihDJ1xmUiBhbmQgXGYoQ1dcKihDYENPTExFQ1RfTk9fREVNQU5HTEVcKihDJ1xmUi4KKy5QUAorXCZcZihDV1wqKENgR05VVEFSR0VUXCooQydcZlIgZGV0ZXJtaW5lcyB0aGUgaW5wdXQtZmlsZSBvYmplY3QgZm9ybWF0IGlmIHlvdSBkb24ndAordXNlIFxmQlwtYlxmUiAob3IgaXRzIHN5bm9ueW0gXGZCXC1cLWZvcm1hdFxmUikuICBJdHMgdmFsdWUgc2hvdWxkIGJlIG9uZQorb2YgdGhlIFxzLTFCRkRcczAgbmFtZXMgZm9yIGFuIGlucHV0IGZvcm1hdC4gIElmIHRoZXJlIGlzIG5vCitcJlxmKENXXCooQ2BHTlVUQVJHRVRcKihDJ1xmUiBpbiB0aGUgZW52aXJvbm1lbnQsIFxmQmxkXGZSIHVzZXMgdGhlIG5hdHVyYWwgZm9ybWF0CitvZiB0aGUgdGFyZ2V0LiBJZiBcZihDV1wqKENgR05VVEFSR0VUXCooQydcZlIgaXMgc2V0IHRvIFxmKENXXCooQ2BkZWZhdWx0XCooQydcZlIgdGhlbiBccy0xQkZEXHMwCithdHRlbXB0cyB0byBkaXNjb3ZlciB0aGUgaW5wdXQgZm9ybWF0IGJ5IGV4YW1pbmluZyBiaW5hcnkgaW5wdXQgZmlsZXM7Cit0aGlzIG1ldGhvZCBvZnRlbiBzdWNjZWVkcywgYnV0IHRoZXJlIGFyZSBwb3RlbnRpYWwgYW1iaWd1aXRpZXMsIHNpbmNlCit0aGVyZSBpcyBubyBtZXRob2Qgb2YgZW5zdXJpbmcgdGhhdCB0aGUgbWFnaWMgbnVtYmVyIHVzZWQgdG8gc3BlY2lmeQorb2JqZWN0LWZpbGUgZm9ybWF0cyBpcyB1bmlxdWUuICBIb3dldmVyLCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZWR1cmUgZm9yCitcJlxzLTFCRkRcczAgb24gZWFjaCBzeXN0ZW0gcGxhY2VzIHRoZSBjb252ZW50aW9uYWwgZm9ybWF0IGZvciB0aGF0IHN5c3RlbSBmaXJzdAoraW4gdGhlIHNlYXJjaC1saXN0LCBzbyBhbWJpZ3VpdGllcyBhcmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY29udmVudGlvbi4KKy5QUAorXCZcZihDV1wqKENgTERFTVVMQVRJT05cKihDJ1xmUiBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IGVtdWxhdGlvbiBpZiB5b3UgZG9uJ3QgdXNlIHRoZQorXCZcZkJcLW1cZlIgb3B0aW9uLiAgVGhlIGVtdWxhdGlvbiBjYW4gYWZmZWN0IHZhcmlvdXMgYXNwZWN0cyBvZiBsaW5rZXIKK2JlaGF2aW91ciwgcGFydGljdWxhcmx5IHRoZSBkZWZhdWx0IGxpbmtlciBzY3JpcHQuICBZb3UgY2FuIGxpc3QgdGhlCithdmFpbGFibGUgZW11bGF0aW9ucyB3aXRoIHRoZSBcZkJcLVwtdmVyYm9zZVxmUiBvciBcZkJcLVZcZlIgb3B0aW9ucy4gIElmCit0aGUgXGZCXC1tXGZSIG9wdGlvbiBpcyBub3QgdXNlZCwgYW5kIHRoZSBcZihDV1wqKENgTERFTVVMQVRJT05cKihDJ1xmUiBlbnZpcm9ubWVudAordmFyaWFibGUgaXMgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGVtdWxhdGlvbiBkZXBlbmRzIHVwb24gaG93IHRoZQorbGlua2VyIHdhcyBjb25maWd1cmVkLgorLlBQCitOb3JtYWxseSwgdGhlIGxpbmtlciB3aWxsIGRlZmF1bHQgdG8gZGVtYW5nbGluZyBzeW1ib2xzLiAgSG93ZXZlciwgaWYKK1wmXGYoQ1dcKihDYENPTExFQ1RfTk9fREVNQU5HTEVcKihDJ1xmUiBpcyBzZXQgaW4gdGhlIGVudmlyb25tZW50LCB0aGVuIGl0IHdpbGwKK2RlZmF1bHQgdG8gbm90IGRlbWFuZ2xpbmcgc3ltYm9scy4gIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdXNlZCBpbgorYSBzaW1pbGFyIGZhc2hpb24gYnkgdGhlIFxmKENXXCooQ2BnY2NcKihDJ1xmUiBsaW5rZXIgd3JhcHBlciBwcm9ncmFtLiAgVGhlIGRlZmF1bHQKK21heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSBcZkJcLVwtZGVtYW5nbGVcZlIgYW5kIFxmQlwtXC1ub1wtZGVtYW5nbGVcZlIKK29wdGlvbnMuCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitcJlxmSWFyXGZSXHwoMSksIFxmSW5tXGZSXHwoMSksIFxmSW9iamNvcHlcZlJcfCgxKSwgXGZJb2JqZHVtcFxmUlx8KDEpLCBcZklyZWFkZWxmXGZSXHwoMSkgYW5kCit0aGUgSW5mbyBlbnRyaWVzIGZvciBcZkliaW51dGlsc1xmUiBhbmQKK1wmXGZJbGRcZlIuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBcKihMIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcKihSIi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1ubG1jb252LjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtbmxtY29udi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjYzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtbmxtY29udi4xCkBAIC0wLDAgKzEsMjQ1IEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yMyAoUG9kOjpTaW1wbGUgMy4xNCkKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiTkxNQ09OViAxIgorLlRIIE5MTUNPTlYgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitubG1jb252IFwtIGNvbnZlcnRzIG9iamVjdCBjb2RlIGludG8gYW4gTkxNLgorLlNIICJTWU5PUFNJUyIKKy5JWCBIZWFkZXIgIlNZTk9QU0lTIgorbmxtY29udiBbXGZCXC1JXGZSIFxmSWJmZG5hbWVcZlJ8XGZCXC1cLWlucHV0XC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtT1xmUiBcZkliZmRuYW1lXGZSfFxmQlwtXC1vdXRwdXRcLXRhcmdldD1cZlJcZkliZmRuYW1lXGZSXQorICAgICAgICBbXGZCXC1UXGZSIFxmSWhlYWRlcmZpbGVcZlJ8XGZCXC1cLWhlYWRlclwtZmlsZT1cZlJcZkloZWFkZXJmaWxlXGZSXQorICAgICAgICBbXGZCXC1kXGZSfFxmQlwtXC1kZWJ1Z1xmUl0gW1xmQlwtbFxmUiBcZklsaW5rZXJcZlJ8XGZCXC1cLWxpbmtlcj1cZlJcZklsaW5rZXJcZlJdCisgICAgICAgIFtcZkJcLWhcZlJ8XGZCXC1cLWhlbHBcZlJdIFtcZkJcLVZcZlJ8XGZCXC1cLXZlcnNpb25cZlJdCisgICAgICAgIFxmSWluZmlsZVxmUiBcZklvdXRmaWxlXGZSCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitcJlxmQm5sbWNvbnZcZlIgY29udmVydHMgdGhlIHJlbG9jYXRhYmxlIFxmQmkzODZcZlIgb2JqZWN0IGZpbGUKK1wmXGZJaW5maWxlXGZSIGludG8gdGhlIE5ldFdhcmUgTG9hZGFibGUgTW9kdWxlIFxmSW91dGZpbGVcZlIsIG9wdGlvbmFsbHkKK3JlYWRpbmcgXGZJaGVhZGVyZmlsZVxmUiBmb3IgXHMtMU5MTVxzMCBoZWFkZXIgaW5mb3JtYXRpb24uICBGb3IgaW5zdHJ1Y3Rpb25zCitvbiB3cml0aW5nIHRoZSBccy0xTkxNXHMwIGNvbW1hbmQgZmlsZSBsYW5ndWFnZSB1c2VkIGluIGhlYWRlciBmaWxlcywgc2VlIHRoZQorXCZcZkJsaW5rZXJzXGZSIHNlY3Rpb24sIFxmQlxzLTFOTE1MSU5LXHMwXGZSIGluIHBhcnRpY3VsYXIsIG9mIHRoZSBcZklccy0xTkxNXHMwCitEZXZlbG9wbWVudCBhbmQgVG9vbHMgT3ZlcnZpZXdcZlIsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFxzLTFOTE1cczAgU29mdHdhcmUKK0RldmVsb3BlcidzIEtpdCAoXCooTCJccy0xTkxNXHMwIFxzLTFTREtcczBcKihSIiksIGF2YWlsYWJsZSBmcm9tIE5vdmVsbCwgSW5jLgorXCZcZkJubG1jb252XGZSIHVzZXMgdGhlIFxzLTFHTlVcczAgQmluYXJ5IEZpbGUgRGVzY3JpcHRvciBsaWJyYXJ5IHRvIHJlYWQKK1wmXGZJaW5maWxlXGZSOworLlBQCitcJlxmQm5sbWNvbnZcZlIgY2FuIHBlcmZvcm0gYSBsaW5rIHN0ZXAuICBJbiBvdGhlciB3b3JkcywgeW91IGNhbiBsaXN0Cittb3JlIHRoYW4gb25lIG9iamVjdCBmaWxlIGZvciBpbnB1dCBpZiB5b3UgbGlzdCB0aGVtIGluIHRoZSBkZWZpbml0aW9ucworZmlsZSAocmF0aGVyIHRoYW4gc2ltcGx5IHNwZWNpZnlpbmcgb25lIGlucHV0IGZpbGUgb24gdGhlIGNvbW1hbmQgbGluZSkuCitJbiB0aGlzIGNhc2UsIFxmQm5sbWNvbnZcZlIgY2FsbHMgdGhlIGxpbmtlciBmb3IgeW91LgorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKKy5JUCAiXGZCXC1JXGZSIFxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItSSBiZmRuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLWlucHV0XC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0taW5wdXQtdGFyZ2V0PWJmZG5hbWUiCisuUEQKK09iamVjdCBmb3JtYXQgb2YgdGhlIGlucHV0IGZpbGUuICBcZkJubG1jb252XGZSIGNhbiB1c3VhbGx5IGRldGVybWluZQordGhlIGZvcm1hdCBvZiBhIGdpdmVuIGZpbGUgKHNvIG5vIGRlZmF1bHQgaXMgbmVjZXNzYXJ5KS4KKy5JUCAiXGZCXC1PXGZSIFxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItTyBiZmRuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLW91dHB1dFwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItLW91dHB1dC10YXJnZXQ9YmZkbmFtZSIKKy5QRAorT2JqZWN0IGZvcm1hdCBvZiB0aGUgb3V0cHV0IGZpbGUuICBcZkJubG1jb252XGZSIGluZmVycyB0aGUgb3V0cHV0Citmb3JtYXQgYmFzZWQgb24gdGhlIGlucHV0IGZvcm1hdCwgZS5nLiBmb3IgYSBcZkJpMzg2XGZSIGlucHV0IGZpbGUgdGhlCitvdXRwdXQgZm9ybWF0IGlzIFxmQm5sbTMyXC1pMzg2XGZSLgorLklQICJcZkJcLVRcZlIgXGZJaGVhZGVyZmlsZVxmUiIgNAorLklYIEl0ZW0gIi1UIGhlYWRlcmZpbGUiCisuUEQgMAorLklQICJcZkJcLVwtaGVhZGVyXC1maWxlPVxmUlxmSWhlYWRlcmZpbGVcZlIiIDQKKy5JWCBJdGVtICItLWhlYWRlci1maWxlPWhlYWRlcmZpbGUiCisuUEQKK1JlYWRzIFxmSWhlYWRlcmZpbGVcZlIgZm9yIFxzLTFOTE1cczAgaGVhZGVyIGluZm9ybWF0aW9uLiAgRm9yIGluc3RydWN0aW9ucyBvbgord3JpdGluZyB0aGUgXHMtMU5MTVxzMCBjb21tYW5kIGZpbGUgbGFuZ3VhZ2UgdXNlZCBpbiBoZWFkZXIgZmlsZXMsIHNlZSBzZWUgdGhlCitcJlxmQmxpbmtlcnNcZlIgc2VjdGlvbiwgb2YgdGhlIFxmSVxzLTFOTE1cczAgRGV2ZWxvcG1lbnQgYW5kIFRvb2xzCitPdmVydmlld1xmUiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgXHMtMU5MTVxzMCBTb2Z0d2FyZSBEZXZlbG9wZXIncyBLaXQsIGF2YWlsYWJsZQorZnJvbSBOb3ZlbGwsIEluYy4KKy5JUCAiXGZCXC1kXGZSIiA0CisuSVggSXRlbSAiLWQiCisuUEQgMAorLklQICJcZkJcLVwtZGVidWdcZlIiIDQKKy5JWCBJdGVtICItLWRlYnVnIgorLlBECitEaXNwbGF5cyAob24gc3RhbmRhcmQgZXJyb3IpIHRoZSBsaW5rZXIgY29tbWFuZCBsaW5lIHVzZWQgYnkgXGZCbmxtY29udlxmUi4KKy5JUCAiXGZCXC1sXGZSIFxmSWxpbmtlclxmUiIgNAorLklYIEl0ZW0gIi1sIGxpbmtlciIKKy5QRCAwCisuSVAgIlxmQlwtXC1saW5rZXI9XGZSXGZJbGlua2VyXGZSIiA0CisuSVggSXRlbSAiLS1saW5rZXI9bGlua2VyIgorLlBECitVc2UgXGZJbGlua2VyXGZSIGZvciBhbnkgbGlua2luZy4gIFxmSWxpbmtlclxmUiBjYW4gYmUgYW4gYWJzb2x1dGUgb3IgYQorcmVsYXRpdmUgcGF0aG5hbWUuCisuSVAgIlxmQlwtaFxmUiIgNAorLklYIEl0ZW0gIi1oIgorLlBEIDAKKy5JUCAiXGZCXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCisuUEQKK1ByaW50cyBhIHVzYWdlIHN1bW1hcnkuCisuSVAgIlxmQlwtVlxmUiIgNAorLklYIEl0ZW0gIi1WIgorLlBEIDAKKy5JUCAiXGZCXC1cLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24iCisuUEQKK1ByaW50cyB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIFxmQm5sbWNvbnZcZlIuCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgordGhlIEluZm8gZW50cmllcyBmb3IgXGZJYmludXRpbHNcZlIuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgXCooTCJccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlXCooUiIuCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtbm0uMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1ubS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDQ5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtbm0uMQpAQCAtMCwwICsxLDUxOSBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjMgKFBvZDo6U2ltcGxlIDMuMTQpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIk5NIDEiCisuVEggTk0gMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitubSBcLSBsaXN0IHN5bWJvbHMgZnJvbSBvYmplY3QgZmlsZXMKKy5TSCAiU1lOT1BTSVMiCisuSVggSGVhZGVyICJTWU5PUFNJUyIKK25tIFtcZkJcLWFcZlJ8XGZCXC1cLWRlYnVnXC1zeW1zXGZSXQorICAgW1xmQlwtZ1xmUnxcZkJcLVwtZXh0ZXJuXC1vbmx5XGZSXVtcZkJcLVwtcGx1Z2luXGZSIFxmSW5hbWVcZlJdCisgICBbXGZCXC1CXGZSXSBbXGZCXC1DXGZSfFxmQlwtXC1kZW1hbmdsZVxmUls9XGZJc3R5bGVcZlJdXSBbXGZCXC1EXGZSfFxmQlwtXC1keW5hbWljXGZSXQorICAgW1xmQlwtU1xmUnxcZkJcLVwtcHJpbnRcLXNpemVcZlJdIFtcZkJcLXNcZlJ8XGZCXC1cLXByaW50XC1hcm1hcFxmUl0KKyAgIFtcZkJcLUFcZlJ8XGZCXC1vXGZSfFxmQlwtXC1wcmludFwtZmlsZVwtbmFtZVxmUl1bXGZCXC1cLXNwZWNpYWxcLXN5bXNcZlJdCisgICBbXGZCXC1uXGZSfFxmQlwtdlxmUnxcZkJcLVwtbnVtZXJpY1wtc29ydFxmUl0gW1xmQlwtcFxmUnxcZkJcLVwtbm9cLXNvcnRcZlJdCisgICBbXGZCXC1yXGZSfFxmQlwtXC1yZXZlcnNlXC1zb3J0XGZSXSBbXGZCXC1cLXNpemVcLXNvcnRcZlJdIFtcZkJcLXVcZlJ8XGZCXC1cLXVuZGVmaW5lZFwtb25seVxmUl0KKyAgIFtcZkJcLXRcZlIgXGZJcmFkaXhcZlJ8XGZCXC1cLXJhZGl4PVxmUlxmSXJhZGl4XGZSXSBbXGZCXC1QXGZSfFxmQlwtXC1wb3J0YWJpbGl0eVxmUl0KKyAgIFtcZkJcLVwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlJdIFtcZkJcLWZcZlJcZklmb3JtYXRcZlJ8XGZCXC1cLWZvcm1hdD1cZlJcZklmb3JtYXRcZlJdCisgICBbXGZCXC1cLWRlZmluZWRcLW9ubHlcZlJdIFtcZkJcLWxcZlJ8XGZCXC1cLWxpbmVcLW51bWJlcnNcZlJdIFtcZkJcLVwtbm9cLWRlbWFuZ2xlXGZSXQorICAgW1xmQlwtVlxmUnxcZkJcLVwtdmVyc2lvblxmUl0gW1xmQlwtWCAzMl82NFxmUl0gW1xmQlwtXC1oZWxwXGZSXSAgW1xmSW9iamZpbGVcZlIuLi5dCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitcJlxzLTFHTlVcczAgXGZCbm1cZlIgbGlzdHMgdGhlIHN5bWJvbHMgZnJvbSBvYmplY3QgZmlsZXMgXGZJb2JqZmlsZVxmUi4uLi4KK0lmIG5vIG9iamVjdCBmaWxlcyBhcmUgbGlzdGVkIGFzIGFyZ3VtZW50cywgXGZCbm1cZlIgYXNzdW1lcyB0aGUgZmlsZQorXCZcZklhLm91dFxmUi4KKy5QUAorRm9yIGVhY2ggc3ltYm9sLCBcZkJubVxmUiBzaG93czoKKy5JUCAiXChidSIgNAorVGhlIHN5bWJvbCB2YWx1ZSwgaW4gdGhlIHJhZGl4IHNlbGVjdGVkIGJ5IG9wdGlvbnMgKHNlZSBiZWxvdyksIG9yCitoZXhhZGVjaW1hbCBieSBkZWZhdWx0LgorLklQICJcKGJ1IiA0CitUaGUgc3ltYm9sIHR5cGUuICBBdCBsZWFzdCB0aGUgZm9sbG93aW5nIHR5cGVzIGFyZSB1c2VkOyBvdGhlcnMgYXJlLCBhcword2VsbCwgZGVwZW5kaW5nIG9uIHRoZSBvYmplY3QgZmlsZSBmb3JtYXQuICBJZiBsb3dlcmNhc2UsIHRoZSBzeW1ib2wgaXMKK3VzdWFsbHkgbG9jYWw7IGlmIHVwcGVyY2FzZSwgdGhlIHN5bWJvbCBpcyBnbG9iYWwgKGV4dGVybmFsKS4gIFRoZXJlCithcmUgaG93ZXZlciBhIGZldyBsb3dlcmNhc2Ugc3ltYm9scyB0aGF0IGFyZSBzaG93biBmb3Igc3BlY2lhbCBnbG9iYWwKK3N5bWJvbHMgKFxmKENXXCooQ2B1XCooQydcZlIsIFxmKENXXCooQ2B2XCooQydcZlIgYW5kIFxmKENXXCooQ2B3XCooQydcZlIpLgorLlJTIDQKKy5pZSBuIC5JUCAiIiJBIiIiIDQKKy5lbCAuSVAgIlxmKENXQVxmUiIgNAorLklYIEl0ZW0gIkEiCitUaGUgc3ltYm9sJ3MgdmFsdWUgaXMgYWJzb2x1dGUsIGFuZCB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IGZ1cnRoZXIKK2xpbmtpbmcuCisuaWUgbiAuSVAgIiIiQiIiIiA0CisuZWwgLklQICJcZihDV0JcZlIiIDQKKy5JWCBJdGVtICJCIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJiIiIiIDQKKy5lbCAuSVAgIlxmKENXYlxmUiIgNAorLklYIEl0ZW0gImIiCisuUEQKK1RoZSBzeW1ib2wgaXMgaW4gdGhlIHVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uIChrbm93biBhcyBccy0xQlNTXHMwKS4KKy5pZSBuIC5JUCAiIiJDIiIiIDQKKy5lbCAuSVAgIlxmKENXQ1xmUiIgNAorLklYIEl0ZW0gIkMiCitUaGUgc3ltYm9sIGlzIGNvbW1vbi4gIENvbW1vbiBzeW1ib2xzIGFyZSB1bmluaXRpYWxpemVkIGRhdGEuICBXaGVuCitsaW5raW5nLCBtdWx0aXBsZSBjb21tb24gc3ltYm9scyBtYXkgYXBwZWFyIHdpdGggdGhlIHNhbWUgbmFtZS4gIElmIHRoZQorc3ltYm9sIGlzIGRlZmluZWQgYW55d2hlcmUsIHRoZSBjb21tb24gc3ltYm9scyBhcmUgdHJlYXRlZCBhcyB1bmRlZmluZWQKK3JlZmVyZW5jZXMuCisuaWUgbiAuSVAgIiIiRCIiIiA0CisuZWwgLklQICJcZihDV0RcZlIiIDQKKy5JWCBJdGVtICJEIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJkIiIiIDQKKy5lbCAuSVAgIlxmKENXZFxmUiIgNAorLklYIEl0ZW0gImQiCisuUEQKK1RoZSBzeW1ib2wgaXMgaW4gdGhlIGluaXRpYWxpemVkIGRhdGEgc2VjdGlvbi4KKy5pZSBuIC5JUCAiIiJHIiIiIDQKKy5lbCAuSVAgIlxmKENXR1xmUiIgNAorLklYIEl0ZW0gIkciCisuUEQgMAorLmllIG4gLklQICIiImciIiIgNAorLmVsIC5JUCAiXGYoQ1dnXGZSIiA0CisuSVggSXRlbSAiZyIKKy5QRAorVGhlIHN5bWJvbCBpcyBpbiBhbiBpbml0aWFsaXplZCBkYXRhIHNlY3Rpb24gZm9yIHNtYWxsIG9iamVjdHMuICBTb21lCitvYmplY3QgZmlsZSBmb3JtYXRzIHBlcm1pdCBtb3JlIGVmZmljaWVudCBhY2Nlc3MgdG8gc21hbGwgZGF0YSBvYmplY3RzLAorc3VjaCBhcyBhIGdsb2JhbCBpbnQgdmFyaWFibGUgYXMgb3Bwb3NlZCB0byBhIGxhcmdlIGdsb2JhbCBhcnJheS4KKy5pZSBuIC5JUCAiIiJpIiIiIDQKKy5lbCAuSVAgIlxmKENXaVxmUiIgNAorLklYIEl0ZW0gImkiCitGb3IgXHMtMVBFXHMwIGZvcm1hdCBmaWxlcyB0aGlzIGluZGljYXRlcyB0aGF0IHRoZSBzeW1ib2wgaXMgaW4gYSBzZWN0aW9uCitzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgRExMcy4gIEZvciBccy0xRUxGXHMwIGZvcm1hdCBmaWxlcyB0aGlzCitpbmRpY2F0ZXMgdGhhdCB0aGUgc3ltYm9sIGlzIGFuIGluZGlyZWN0IGZ1bmN0aW9uLiAgVGhpcyBpcyBhIFxzLTFHTlVcczAKK2V4dGVuc2lvbiB0byB0aGUgc3RhbmRhcmQgc2V0IG9mIFxzLTFFTEZcczAgc3ltYm9sIHR5cGVzLiAgSXQgaW5kaWNhdGVzIGEKK3N5bWJvbCB3aGljaCBpZiByZWZlcmVuY2VkIGJ5IGEgcmVsb2NhdGlvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byBpdHMKK2FkZHJlc3MsIGJ1dCBpbnN0ZWFkIG11c3QgYmUgaW52b2tlZCBhdCBydW50aW1lLiAgVGhlIHJ1bnRpbWUKK2V4ZWN1dGlvbiB3aWxsIHRoZW4gcmV0dXJuIHRoZSB2YWx1ZSB0byBiZSB1c2VkIGluIHRoZSByZWxvY2F0aW9uLgorLmllIG4gLklQICIiIk4iIiIgNAorLmVsIC5JUCAiXGYoQ1dOXGZSIiA0CisuSVggSXRlbSAiTiIKK1RoZSBzeW1ib2wgaXMgYSBkZWJ1Z2dpbmcgc3ltYm9sLgorLmllIG4gLklQICIiInAiIiIgNAorLmVsIC5JUCAiXGYoQ1dwXGZSIiA0CisuSVggSXRlbSAicCIKK1RoZSBzeW1ib2xzIGlzIGluIGEgc3RhY2sgdW53aW5kIHNlY3Rpb24uCisuaWUgbiAuSVAgIiIiUiIiIiA0CisuZWwgLklQICJcZihDV1JcZlIiIDQKKy5JWCBJdGVtICJSIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJyIiIiIDQKKy5lbCAuSVAgIlxmKENXclxmUiIgNAorLklYIEl0ZW0gInIiCisuUEQKK1RoZSBzeW1ib2wgaXMgaW4gYSByZWFkIG9ubHkgZGF0YSBzZWN0aW9uLgorLmllIG4gLklQICIiIlMiIiIgNAorLmVsIC5JUCAiXGYoQ1dTXGZSIiA0CisuSVggSXRlbSAiUyIKKy5QRCAwCisuaWUgbiAuSVAgIiIicyIiIiA0CisuZWwgLklQICJcZihDV3NcZlIiIDQKKy5JWCBJdGVtICJzIgorLlBECitUaGUgc3ltYm9sIGlzIGluIGFuIHVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uIGZvciBzbWFsbCBvYmplY3RzLgorLmllIG4gLklQICIiIlQiIiIgNAorLmVsIC5JUCAiXGYoQ1dUXGZSIiA0CisuSVggSXRlbSAiVCIKKy5QRCAwCisuaWUgbiAuSVAgIiIidCIiIiA0CisuZWwgLklQICJcZihDV3RcZlIiIDQKKy5JWCBJdGVtICJ0IgorLlBECitUaGUgc3ltYm9sIGlzIGluIHRoZSB0ZXh0IChjb2RlKSBzZWN0aW9uLgorLmllIG4gLklQICIiIlUiIiIgNAorLmVsIC5JUCAiXGYoQ1dVXGZSIiA0CisuSVggSXRlbSAiVSIKK1RoZSBzeW1ib2wgaXMgdW5kZWZpbmVkLgorLmllIG4gLklQICIiInUiIiIgNAorLmVsIC5JUCAiXGYoQ1d1XGZSIiA0CisuSVggSXRlbSAidSIKK1RoZSBzeW1ib2wgaXMgYSB1bmlxdWUgZ2xvYmFsIHN5bWJvbC4gIFRoaXMgaXMgYSBccy0xR05VXHMwIGV4dGVuc2lvbiB0byB0aGUKK3N0YW5kYXJkIHNldCBvZiBccy0xRUxGXHMwIHN5bWJvbCBiaW5kaW5ncy4gIEZvciBzdWNoIGEgc3ltYm9sIHRoZSBkeW5hbWljIGxpbmtlcgord2lsbCBtYWtlIHN1cmUgdGhhdCBpbiB0aGUgZW50aXJlIHByb2Nlc3MgdGhlcmUgaXMganVzdCBvbmUgc3ltYm9sIHdpdGgKK3RoaXMgbmFtZSBhbmQgdHlwZSBpbiB1c2UuCisuaWUgbiAuSVAgIiIiViIiIiA0CisuZWwgLklQICJcZihDV1ZcZlIiIDQKKy5JWCBJdGVtICJWIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJ2IiIiIDQKKy5lbCAuSVAgIlxmKENXdlxmUiIgNAorLklYIEl0ZW0gInYiCisuUEQKK1RoZSBzeW1ib2wgaXMgYSB3ZWFrIG9iamVjdC4gIFdoZW4gYSB3ZWFrIGRlZmluZWQgc3ltYm9sIGlzIGxpbmtlZCB3aXRoCithIG5vcm1hbCBkZWZpbmVkIHN5bWJvbCwgdGhlIG5vcm1hbCBkZWZpbmVkIHN5bWJvbCBpcyB1c2VkIHdpdGggbm8gZXJyb3IuCitXaGVuIGEgd2VhayB1bmRlZmluZWQgc3ltYm9sIGlzIGxpbmtlZCBhbmQgdGhlIHN5bWJvbCBpcyBub3QgZGVmaW5lZCwKK3RoZSB2YWx1ZSBvZiB0aGUgd2VhayBzeW1ib2wgYmVjb21lcyB6ZXJvIHdpdGggbm8gZXJyb3IuICBPbiBzb21lCitzeXN0ZW1zLCB1cHBlcmNhc2UgaW5kaWNhdGVzIHRoYXQgYSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIHNwZWNpZmllZC4KKy5pZSBuIC5JUCAiIiJXIiIiIDQKKy5lbCAuSVAgIlxmKENXV1xmUiIgNAorLklYIEl0ZW0gIlciCisuUEQgMAorLmllIG4gLklQICIiInciIiIgNAorLmVsIC5JUCAiXGYoQ1d3XGZSIiA0CisuSVggSXRlbSAidyIKKy5QRAorVGhlIHN5bWJvbCBpcyBhIHdlYWsgc3ltYm9sIHRoYXQgaGFzIG5vdCBiZWVuIHNwZWNpZmljYWxseSB0YWdnZWQgYXMgYQord2VhayBvYmplY3Qgc3ltYm9sLiAgV2hlbiBhIHdlYWsgZGVmaW5lZCBzeW1ib2wgaXMgbGlua2VkIHdpdGggYSBub3JtYWwKK2RlZmluZWQgc3ltYm9sLCB0aGUgbm9ybWFsIGRlZmluZWQgc3ltYm9sIGlzIHVzZWQgd2l0aCBubyBlcnJvci4KK1doZW4gYSB3ZWFrIHVuZGVmaW5lZCBzeW1ib2wgaXMgbGlua2VkIGFuZCB0aGUgc3ltYm9sIGlzIG5vdCBkZWZpbmVkLAordGhlIHZhbHVlIG9mIHRoZSBzeW1ib2wgaXMgZGV0ZXJtaW5lZCBpbiBhIHN5c3RlbS1zcGVjaWZpYyBtYW5uZXIgd2l0aG91dAorZXJyb3IuICBPbiBzb21lIHN5c3RlbXMsIHVwcGVyY2FzZSBpbmRpY2F0ZXMgdGhhdCBhIGRlZmF1bHQgdmFsdWUgaGFzIGJlZW4KK3NwZWNpZmllZC4KKy5pZSBuIC5JUCAiIiJcLSIiIiA0CisuZWwgLklQICJcZihDV1wtXGZSIiA0CisuSVggSXRlbSAiLSIKK1RoZSBzeW1ib2wgaXMgYSBzdGFicyBzeW1ib2wgaW4gYW4gYS5vdXQgb2JqZWN0IGZpbGUuICBJbiB0aGlzIGNhc2UsIHRoZQorbmV4dCB2YWx1ZXMgcHJpbnRlZCBhcmUgdGhlIHN0YWJzIG90aGVyIGZpZWxkLCB0aGUgc3RhYnMgZGVzYyBmaWVsZCwgYW5kCit0aGUgc3RhYiB0eXBlLiAgU3RhYnMgc3ltYm9scyBhcmUgdXNlZCB0byBob2xkIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KKy5pZSBuIC5JUCAiIiI/IiIiIDQKKy5lbCAuSVAgIlxmKENXP1xmUiIgNAorLklYIEl0ZW0gIj8iCitUaGUgc3ltYm9sIHR5cGUgaXMgdW5rbm93biwgb3Igb2JqZWN0IGZpbGUgZm9ybWF0IHNwZWNpZmljLgorLlJFCisuUlMgNAorLlJFCisuSVAgIlwoYnUiIDQKK1RoZSBzeW1ib2wgbmFtZS4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCitUaGUgbG9uZyBhbmQgc2hvcnQgZm9ybXMgb2Ygb3B0aW9ucywgc2hvd24gaGVyZSBhcyBhbHRlcm5hdGl2ZXMsIGFyZQorZXF1aXZhbGVudC4KKy5JUCAiXGZCXC1BXGZSIiA0CisuSVggSXRlbSAiLUEiCisuUEQgMAorLklQICJcZkJcLW9cZlIiIDQKKy5JWCBJdGVtICItbyIKKy5JUCAiXGZCXC1cLXByaW50XC1maWxlXC1uYW1lXGZSIiA0CisuSVggSXRlbSAiLS1wcmludC1maWxlLW5hbWUiCisuUEQKK1ByZWNlZGUgZWFjaCBzeW1ib2wgYnkgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGZpbGUgKG9yIGFyY2hpdmUgbWVtYmVyKQoraW4gd2hpY2ggaXQgd2FzIGZvdW5kLCByYXRoZXIgdGhhbiBpZGVudGlmeWluZyB0aGUgaW5wdXQgZmlsZSBvbmNlIG9ubHksCitiZWZvcmUgYWxsIG9mIGl0cyBzeW1ib2xzLgorLklQICJcZkJcLWFcZlIiIDQKKy5JWCBJdGVtICItYSIKKy5QRCAwCisuSVAgIlxmQlwtXC1kZWJ1Z1wtc3ltc1xmUiIgNAorLklYIEl0ZW0gIi0tZGVidWctc3ltcyIKKy5QRAorRGlzcGxheSBhbGwgc3ltYm9scywgZXZlbiBkZWJ1Z2dlci1vbmx5IHN5bWJvbHM7IG5vcm1hbGx5IHRoZXNlIGFyZSBub3QKK2xpc3RlZC4KKy5JUCAiXGZCXC1CXGZSIiA0CisuSVggSXRlbSAiLUIiCitUaGUgc2FtZSBhcyBcZkJcLVwtZm9ybWF0PWJzZFxmUiAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgXHMtMU1JUFNcczAgXGZCbm1cZlIpLgorLklQICJcZkJcLUNcZlIiIDQKKy5JWCBJdGVtICItQyIKKy5QRCAwCisuSVAgIlxmQlwtXC1kZW1hbmdsZVs9XGZSXGZJc3R5bGVcZlJcZkJdXGZSIiA0CisuSVggSXRlbSAiLS1kZW1hbmdsZVs9c3R5bGVdIgorLlBECitEZWNvZGUgKFxmSWRlbWFuZ2xlXGZSKSBsb3ctbGV2ZWwgc3ltYm9sIG5hbWVzIGludG8gdXNlci1sZXZlbCBuYW1lcy4KK0Jlc2lkZXMgcmVtb3ZpbmcgYW55IGluaXRpYWwgdW5kZXJzY29yZSBwcmVwZW5kZWQgYnkgdGhlIHN5c3RlbSwgdGhpcworbWFrZXMgXCooQysgZnVuY3Rpb24gbmFtZXMgcmVhZGFibGUuIERpZmZlcmVudCBjb21waWxlcnMgaGF2ZSBkaWZmZXJlbnQKK21hbmdsaW5nIHN0eWxlcy4gVGhlIG9wdGlvbmFsIGRlbWFuZ2xpbmcgc3R5bGUgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8KK2Nob29zZSBhbiBhcHByb3ByaWF0ZSBkZW1hbmdsaW5nIHN0eWxlIGZvciB5b3VyIGNvbXBpbGVyLgorLklQICJcZkJcLVwtbm9cLWRlbWFuZ2xlXGZSIiA0CisuSVggSXRlbSAiLS1uby1kZW1hbmdsZSIKK0RvIG5vdCBkZW1hbmdsZSBsb3ctbGV2ZWwgc3ltYm9sIG5hbWVzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKy5JUCAiXGZCXC1EXGZSIiA0CisuSVggSXRlbSAiLUQiCisuUEQgMAorLklQICJcZkJcLVwtZHluYW1pY1xmUiIgNAorLklYIEl0ZW0gIi0tZHluYW1pYyIKKy5QRAorRGlzcGxheSB0aGUgZHluYW1pYyBzeW1ib2xzIHJhdGhlciB0aGFuIHRoZSBub3JtYWwgc3ltYm9scy4gIFRoaXMgaXMKK29ubHkgbWVhbmluZ2Z1bCBmb3IgZHluYW1pYyBvYmplY3RzLCBzdWNoIGFzIGNlcnRhaW4gdHlwZXMgb2Ygc2hhcmVkCitsaWJyYXJpZXMuCisuSVAgIlxmQlwtZlxmUiBcZklmb3JtYXRcZlIiIDQKKy5JWCBJdGVtICItZiBmb3JtYXQiCisuUEQgMAorLklQICJcZkJcLVwtZm9ybWF0PVxmUlxmSWZvcm1hdFxmUiIgNAorLklYIEl0ZW0gIi0tZm9ybWF0PWZvcm1hdCIKKy5QRAorVXNlIHRoZSBvdXRwdXQgZm9ybWF0IFxmSWZvcm1hdFxmUiwgd2hpY2ggY2FuIGJlIFxmKENXXCooQ2Bic2RcKihDJ1xmUiwKK1wmXGYoQ1dcKihDYHN5c3ZcKihDJ1xmUiwgb3IgXGYoQ1dcKihDYHBvc2l4XCooQydcZlIuICBUaGUgZGVmYXVsdCBpcyBcZihDV1wqKENgYnNkXCooQydcZlIuCitPbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgXGZJZm9ybWF0XGZSIGlzIHNpZ25pZmljYW50OyBpdCBjYW4gYmUKK2VpdGhlciB1cHBlciBvciBsb3dlciBjYXNlLgorLklQICJcZkJcLWdcZlIiIDQKKy5JWCBJdGVtICItZyIKKy5QRCAwCisuSVAgIlxmQlwtXC1leHRlcm5cLW9ubHlcZlIiIDQKKy5JWCBJdGVtICItLWV4dGVybi1vbmx5IgorLlBECitEaXNwbGF5IG9ubHkgZXh0ZXJuYWwgc3ltYm9scy4KKy5JUCAiXGZCXC1cLXBsdWdpblxmUiBcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLS1wbHVnaW4gbmFtZSIKK0xvYWQgdGhlIHBsdWdpbiBjYWxsZWQgXGZJbmFtZVxmUiB0byBhZGQgc3VwcG9ydCBmb3IgZXh0cmEgdGFyZ2V0Cit0eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSB0b29sY2hhaW4gaGFzIGJlZW4gYnVpbHQKK3dpdGggcGx1Z2luIHN1cHBvcnQgZW5hYmxlZC4KKy5JUCAiXGZCXC1sXGZSIiA0CisuSVggSXRlbSAiLWwiCisuUEQgMAorLklQICJcZkJcLVwtbGluZVwtbnVtYmVyc1xmUiIgNAorLklYIEl0ZW0gIi0tbGluZS1udW1iZXJzIgorLlBECitGb3IgZWFjaCBzeW1ib2wsIHVzZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdG8gdHJ5IHRvIGZpbmQgYSBmaWxlbmFtZSBhbmQKK2xpbmUgbnVtYmVyLiAgRm9yIGEgZGVmaW5lZCBzeW1ib2wsIGxvb2sgZm9yIHRoZSBsaW5lIG51bWJlciBvZiB0aGUKK2FkZHJlc3Mgb2YgdGhlIHN5bWJvbC4gIEZvciBhbiB1bmRlZmluZWQgc3ltYm9sLCBsb29rIGZvciB0aGUgbGluZQorbnVtYmVyIG9mIGEgcmVsb2NhdGlvbiBlbnRyeSB3aGljaCByZWZlcnMgdG8gdGhlIHN5bWJvbC4gIElmIGxpbmUgbnVtYmVyCitpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQsIHByaW50IGl0IGFmdGVyIHRoZSBvdGhlciBzeW1ib2wgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtblxmUiIgNAorLklYIEl0ZW0gIi1uIgorLlBEIDAKKy5JUCAiXGZCXC12XGZSIiA0CisuSVggSXRlbSAiLXYiCisuSVAgIlxmQlwtXC1udW1lcmljXC1zb3J0XGZSIiA0CisuSVggSXRlbSAiLS1udW1lcmljLXNvcnQiCisuUEQKK1NvcnQgc3ltYm9scyBudW1lcmljYWxseSBieSB0aGVpciBhZGRyZXNzZXMsIHJhdGhlciB0aGFuIGFscGhhYmV0aWNhbGx5CitieSB0aGVpciBuYW1lcy4KKy5JUCAiXGZCXC1wXGZSIiA0CisuSVggSXRlbSAiLXAiCisuUEQgMAorLklQICJcZkJcLVwtbm9cLXNvcnRcZlIiIDQKKy5JWCBJdGVtICItLW5vLXNvcnQiCisuUEQKK0RvIG5vdCBib3RoZXIgdG8gc29ydCB0aGUgc3ltYm9scyBpbiBhbnkgb3JkZXI7IHByaW50IHRoZW0gaW4gdGhlIG9yZGVyCitlbmNvdW50ZXJlZC4KKy5JUCAiXGZCXC1QXGZSIiA0CisuSVggSXRlbSAiLVAiCisuUEQgMAorLklQICJcZkJcLVwtcG9ydGFiaWxpdHlcZlIiIDQKKy5JWCBJdGVtICItLXBvcnRhYmlsaXR5IgorLlBECitVc2UgdGhlIFxzLTFQT1NJWFxzMC4yIHN0YW5kYXJkIG91dHB1dCBmb3JtYXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBmb3JtYXQuCitFcXVpdmFsZW50IHRvIFxmQlwtZiBwb3NpeFxmUi4KKy5JUCAiXGZCXC1TXGZSIiA0CisuSVggSXRlbSAiLVMiCisuUEQgMAorLklQICJcZkJcLVwtcHJpbnRcLXNpemVcZlIiIDQKKy5JWCBJdGVtICItLXByaW50LXNpemUiCisuUEQKK1ByaW50IGJvdGggdmFsdWUgYW5kIHNpemUgb2YgZGVmaW5lZCBzeW1ib2xzIGZvciB0aGUgXGYoQ1dcKihDYGJzZFwqKEMnXGZSIG91dHB1dCBzdHlsZS4KK1RoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QgZm9yIG9iamVjdCBmb3JtYXRzIHRoYXQgZG8gbm90IHJlY29yZCBzeW1ib2wKK3NpemVzLCB1bmxlc3MgXGZCXC1cLXNpemVcLXNvcnRcZlIgaXMgYWxzbyB1c2VkIGluIHdoaWNoIGNhc2UgYQorY2FsY3VsYXRlZCBzaXplIGlzIGRpc3BsYXllZC4KKy5JUCAiXGZCXC1zXGZSIiA0CisuSVggSXRlbSAiLXMiCisuUEQgMAorLklQICJcZkJcLVwtcHJpbnRcLWFybWFwXGZSIiA0CisuSVggSXRlbSAiLS1wcmludC1hcm1hcCIKKy5QRAorV2hlbiBsaXN0aW5nIHN5bWJvbHMgZnJvbSBhcmNoaXZlIG1lbWJlcnMsIGluY2x1ZGUgdGhlIGluZGV4OiBhIG1hcHBpbmcKKyhzdG9yZWQgaW4gdGhlIGFyY2hpdmUgYnkgXGZCYXJcZlIgb3IgXGZCcmFubGliXGZSKSBvZiB3aGljaCBtb2R1bGVzCitjb250YWluIGRlZmluaXRpb25zIGZvciB3aGljaCBuYW1lcy4KKy5JUCAiXGZCXC1yXGZSIiA0CisuSVggSXRlbSAiLXIiCisuUEQgMAorLklQICJcZkJcLVwtcmV2ZXJzZVwtc29ydFxmUiIgNAorLklYIEl0ZW0gIi0tcmV2ZXJzZS1zb3J0IgorLlBECitSZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgc29ydCAod2hldGhlciBudW1lcmljIG9yIGFscGhhYmV0aWMpOyBsZXQgdGhlCitsYXN0IGNvbWUgZmlyc3QuCisuSVAgIlxmQlwtXC1zaXplXC1zb3J0XGZSIiA0CisuSVggSXRlbSAiLS1zaXplLXNvcnQiCitTb3J0IHN5bWJvbHMgYnkgc2l6ZS4gIFRoZSBzaXplIGlzIGNvbXB1dGVkIGFzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KK3RoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIGFuZCB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbCB3aXRoIHRoZSBuZXh0IGhpZ2hlcgordmFsdWUuICBJZiB0aGUgXGYoQ1dcKihDYGJzZFwqKEMnXGZSIG91dHB1dCBmb3JtYXQgaXMgdXNlZCB0aGUgc2l6ZSBvZiB0aGUgc3ltYm9sCitpcyBwcmludGVkLCByYXRoZXIgdGhhbiB0aGUgdmFsdWUsIGFuZCBcZkJcLVNcZlIgbXVzdCBiZSB1c2VkIGluIG9yZGVyCitib3RoIHNpemUgYW5kIHZhbHVlIHRvIGJlIHByaW50ZWQuCisuSVAgIlxmQlwtXC1zcGVjaWFsXC1zeW1zXGZSIiA0CisuSVggSXRlbSAiLS1zcGVjaWFsLXN5bXMiCitEaXNwbGF5IHN5bWJvbHMgd2hpY2ggaGF2ZSBhIHRhcmdldC1zcGVjaWZpYyBzcGVjaWFsIG1lYW5pbmcuICBUaGVzZQorc3ltYm9scyBhcmUgdXN1YWxseSB1c2VkIGJ5IHRoZSB0YXJnZXQgZm9yIHNvbWUgc3BlY2lhbCBwcm9jZXNzaW5nIGFuZAorYXJlIG5vdCBub3JtYWxseSBoZWxwZnVsIHdoZW4gaW5jbHVkZWQgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBzeW1ib2wKK2xpc3RzLiAgRm9yIGV4YW1wbGUgZm9yIFxzLTFBUk1cczAgdGFyZ2V0cyB0aGlzIG9wdGlvbiB3b3VsZCBza2lwIHRoZSBtYXBwaW5nCitzeW1ib2xzIHVzZWQgdG8gbWFyayB0cmFuc2l0aW9ucyBiZXR3ZWVuIFxzLTFBUk1cczAgY29kZSwgXHMtMVRIVU1CXHMwIGNvZGUgYW5kCitkYXRhLgorLklQICJcZkJcLXRcZlIgXGZJcmFkaXhcZlIiIDQKKy5JWCBJdGVtICItdCByYWRpeCIKKy5QRCAwCisuSVAgIlxmQlwtXC1yYWRpeD1cZlJcZklyYWRpeFxmUiIgNAorLklYIEl0ZW0gIi0tcmFkaXg9cmFkaXgiCisuUEQKK1VzZSBcZklyYWRpeFxmUiBhcyB0aGUgcmFkaXggZm9yIHByaW50aW5nIHRoZSBzeW1ib2wgdmFsdWVzLiAgSXQgbXVzdCBiZQorXCZcZkJkXGZSIGZvciBkZWNpbWFsLCBcZkJvXGZSIGZvciBvY3RhbCwgb3IgXGZCeFxmUiBmb3IgaGV4YWRlY2ltYWwuCisuSVAgIlxmQlwtXC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0PWJmZG5hbWUiCitTcGVjaWZ5IGFuIG9iamVjdCBjb2RlIGZvcm1hdCBvdGhlciB0aGFuIHlvdXIgc3lzdGVtJ3MgZGVmYXVsdCBmb3JtYXQuCisuSVAgIlxmQlwtdVxmUiIgNAorLklYIEl0ZW0gIi11IgorLlBEIDAKKy5JUCAiXGZCXC1cLXVuZGVmaW5lZFwtb25seVxmUiIgNAorLklYIEl0ZW0gIi0tdW5kZWZpbmVkLW9ubHkiCisuUEQKK0Rpc3BsYXkgb25seSB1bmRlZmluZWQgc3ltYm9scyAodGhvc2UgZXh0ZXJuYWwgdG8gZWFjaCBvYmplY3QgZmlsZSkuCisuSVAgIlxmQlwtXC1kZWZpbmVkXC1vbmx5XGZSIiA0CisuSVggSXRlbSAiLS1kZWZpbmVkLW9ubHkiCitEaXNwbGF5IG9ubHkgZGVmaW5lZCBzeW1ib2xzIGZvciBlYWNoIG9iamVjdCBmaWxlLgorLklQICJcZkJcLVZcZlIiIDQKKy5JWCBJdGVtICItViIKKy5QRCAwCisuSVAgIlxmQlwtXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLS12ZXJzaW9uIgorLlBECitTaG93IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBcZkJubVxmUiBhbmQgZXhpdC4KKy5JUCAiXGZCXC1YXGZSIiA0CisuSVggSXRlbSAiLVgiCitUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFxzLTFBSVhcczAgdmVyc2lvbiBvZgorXCZcZkJubVxmUi4gIEl0IHRha2VzIG9uZSBwYXJhbWV0ZXIgd2hpY2ggbXVzdCBiZSB0aGUgc3RyaW5nCitcJlxmQjMyXzY0XGZSLiAgVGhlIGRlZmF1bHQgbW9kZSBvZiBccy0xQUlYXHMwIFxmQm5tXGZSIGNvcnJlc3BvbmRzCit0byBcZkJcLVggMzJcZlIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgXHMtMUdOVVxzMCBcZkJubVxmUi4KKy5JUCAiXGZCXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCitTaG93IGEgc3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byBcZkJubVxmUiBhbmQgZXhpdC4KKy5JUCAiXGZCQFxmUlxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICJAZmlsZSIKK1JlYWQgY29tbWFuZC1saW5lIG9wdGlvbnMgZnJvbSBcZklmaWxlXGZSLiAgVGhlIG9wdGlvbnMgcmVhZCBhcmUKK2luc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBAXGZJZmlsZVxmUiBvcHRpb24uICBJZiBcZklmaWxlXGZSCitkb2VzIG5vdCBleGlzdCwgb3IgY2Fubm90IGJlIHJlYWQsIHRoZW4gdGhlIG9wdGlvbiB3aWxsIGJlIHRyZWF0ZWQKK2xpdGVyYWxseSwgYW5kIG5vdCByZW1vdmVkLgorLlNwCitPcHRpb25zIGluIFxmSWZpbGVcZlIgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSB3aGl0ZXNwYWNlCitjaGFyYWN0ZXIgbWF5IGJlIGluY2x1ZGVkIGluIGFuIG9wdGlvbiBieSBzdXJyb3VuZGluZyB0aGUgZW50aXJlCitvcHRpb24gaW4gZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLiAgQW55IGNoYXJhY3RlciAoaW5jbHVkaW5nIGEKK2JhY2tzbGFzaCkgbWF5IGJlIGluY2x1ZGVkIGJ5IHByZWZpeGluZyB0aGUgY2hhcmFjdGVyIHRvIGJlIGluY2x1ZGVkCit3aXRoIGEgYmFja3NsYXNoLiAgVGhlIFxmSWZpbGVcZlIgbWF5IGl0c2VsZiBjb250YWluIGFkZGl0aW9uYWwKK0BcZklmaWxlXGZSIG9wdGlvbnM7IGFueSBzdWNoIG9wdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgcmVjdXJzaXZlbHkuCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitcJlxmSWFyXGZSXHwoMSksIFxmSW9iamR1bXBcZlJcfCgxKSwgXGZJcmFubGliXGZSXHwoMSksIGFuZCB0aGUgSW5mbyBlbnRyaWVzIGZvciBcZkliaW51dGlsc1xmUi4KKy5TSCAiQ09QWVJJR0hUIgorLklYIEhlYWRlciAiQ09QWVJJR0hUIgorQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBcKihMIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcKihSIi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1vYmpjb3B5LjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtb2JqY29weS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTBhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtb2JqY29weS4xCkBAIC0wLDAgKzEsMTAwOCBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjMgKFBvZDo6U2ltcGxlIDMuMTQpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIk9CSkNPUFkgMSIKKy5USCBPQkpDT1BZIDEgIjIwMTMtMDMtMjUiICJiaW51dGlscy0yLjIzLjIiICJHTlUgRGV2ZWxvcG1lbnQgVG9vbHMiCisuXCIgRm9yIG5yb2ZmLCB0dXJuIG9mZiBqdXN0aWZpY2F0aW9uLiAgQWx3YXlzIHR1cm4gb2ZmIGh5cGhlbmF0aW9uOyBpdCBtYWtlcworLlwiIHdheSB0b28gbWFueSBtaXN0YWtlcyBpbiB0ZWNobmljYWwgZG9jdW1lbnRzLgorLmlmIG4gLmFkIGwKKy5uaAorLlNIICJOQU1FIgorb2JqY29weSBcLSBjb3B5IGFuZCB0cmFuc2xhdGUgb2JqZWN0IGZpbGVzCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCitvYmpjb3B5IFtcZkJcLUZcZlIgXGZJYmZkbmFtZVxmUnxcZkJcLVwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlJdCisgICAgICAgIFtcZkJcLUlcZlIgXGZJYmZkbmFtZVxmUnxcZkJcLVwtaW5wdXRcLXRhcmdldD1cZlJcZkliZmRuYW1lXGZSXQorICAgICAgICBbXGZCXC1PXGZSIFxmSWJmZG5hbWVcZlJ8XGZCXC1cLW91dHB1dFwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlJdCisgICAgICAgIFtcZkJcLUJcZlIgXGZJYmZkYXJjaFxmUnxcZkJcLVwtYmluYXJ5XC1hcmNoaXRlY3R1cmU9XGZSXGZJYmZkYXJjaFxmUl0KKyAgICAgICAgW1xmQlwtU1xmUnxcZkJcLVwtc3RyaXBcLWFsbFxmUl0KKyAgICAgICAgW1xmQlwtZ1xmUnxcZkJcLVwtc3RyaXBcLWRlYnVnXGZSXQorICAgICAgICBbXGZCXC1LXGZSIFxmSXN5bWJvbG5hbWVcZlJ8XGZCXC1cLWtlZXBcLXN5bWJvbD1cZlJcZklzeW1ib2xuYW1lXGZSXQorICAgICAgICBbXGZCXC1OXGZSIFxmSXN5bWJvbG5hbWVcZlJ8XGZCXC1cLXN0cmlwXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtXC1zdHJpcFwtdW5uZWVkZWRcLXN5bWJvbD1cZlJcZklzeW1ib2xuYW1lXGZSXQorICAgICAgICBbXGZCXC1HXGZSIFxmSXN5bWJvbG5hbWVcZlJ8XGZCXC1cLWtlZXBcLWdsb2JhbFwtc3ltYm9sPVxmUlxmSXN5bWJvbG5hbWVcZlJdCisgICAgICAgIFtcZkJcLVwtbG9jYWxpemVcLWhpZGRlblxmUl0KKyAgICAgICAgW1xmQlwtTFxmUiBcZklzeW1ib2xuYW1lXGZSfFxmQlwtXC1sb2NhbGl6ZVwtc3ltYm9sPVxmUlxmSXN5bWJvbG5hbWVcZlJdCisgICAgICAgIFtcZkJcLVwtZ2xvYmFsaXplXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtV1xmUiBcZklzeW1ib2xuYW1lXGZSfFxmQlwtXC13ZWFrZW5cLXN5bWJvbD1cZlJcZklzeW1ib2xuYW1lXGZSXQorICAgICAgICBbXGZCXC13XGZSfFxmQlwtXC13aWxkY2FyZFxmUl0KKyAgICAgICAgW1xmQlwteFxmUnxcZkJcLVwtZGlzY2FyZFwtYWxsXGZSXQorICAgICAgICBbXGZCXC1YXGZSfFxmQlwtXC1kaXNjYXJkXC1sb2NhbHNcZlJdCisgICAgICAgIFtcZkJcLWJcZlIgXGZJYnl0ZVxmUnxcZkJcLVwtYnl0ZT1cZlJcZklieXRlXGZSXQorICAgICAgICBbXGZCXC1pXGZSIFtcZklicmVhZHRoXGZSXXxcZkJcLVwtaW50ZXJsZWF2ZVxmUls9XGZJYnJlYWR0aFxmUl1dCisgICAgICAgIFtcZkJcLVwtaW50ZXJsZWF2ZVwtd2lkdGg9XGZSXGZJd2lkdGhcZlJdCisgICAgICAgIFtcZkJcLWpcZlIgXGZJc2VjdGlvbm5hbWVcZlJ8XGZCXC1cLW9ubHlcLXNlY3Rpb249XGZSXGZJc2VjdGlvbm5hbWVcZlJdCisgICAgICAgIFtcZkJcLVJcZlIgXGZJc2VjdGlvbm5hbWVcZlJ8XGZCXC1cLXJlbW92ZVwtc2VjdGlvbj1cZlJcZklzZWN0aW9ubmFtZVxmUl0KKyAgICAgICAgW1xmQlwtcFxmUnxcZkJcLVwtcHJlc2VydmVcLWRhdGVzXGZSXQorICAgICAgICBbXGZCXC1EXGZSfFxmQlwtXC1lbmFibGVcLWRldGVybWluaXN0aWNcLWFyY2hpdmVzXGZSXQorICAgICAgICBbXGZCXC1VXGZSfFxmQlwtXC1kaXNhYmxlXC1kZXRlcm1pbmlzdGljXC1hcmNoaXZlc1xmUl0KKyAgICAgICAgW1xmQlwtXC1kZWJ1Z2dpbmdcZlJdCisgICAgICAgIFtcZkJcLVwtZ2FwXC1maWxsPVxmUlxmSXZhbFxmUl0KKyAgICAgICAgW1xmQlwtXC1wYWRcLXRvPVxmUlxmSWFkZHJlc3NcZlJdCisgICAgICAgIFtcZkJcLVwtc2V0XC1zdGFydD1cZlJcZkl2YWxcZlJdCisgICAgICAgIFtcZkJcLVwtYWRqdXN0XC1zdGFydD1cZlJcZklpbmNyXGZSXQorICAgICAgICBbXGZCXC1cLWNoYW5nZVwtYWRkcmVzc2VzPVxmUlxmSWluY3JcZlJdCisgICAgICAgIFtcZkJcLVwtY2hhbmdlXC1zZWN0aW9uXC1hZGRyZXNzXGZSIFxmSXNlY3Rpb25cZlJ7PSwrLFwtfVxmSXZhbFxmUl0KKyAgICAgICAgW1xmQlwtXC1jaGFuZ2VcLXNlY3Rpb25cLWxtYVxmUiBcZklzZWN0aW9uXGZSez0sKyxcLX1cZkl2YWxcZlJdCisgICAgICAgIFtcZkJcLVwtY2hhbmdlXC1zZWN0aW9uXC12bWFcZlIgXGZJc2VjdGlvblxmUns9LCssXC19XGZJdmFsXGZSXQorICAgICAgICBbXGZCXC1cLWNoYW5nZVwtd2FybmluZ3NcZlJdIFtcZkJcLVwtbm9cLWNoYW5nZVwtd2FybmluZ3NcZlJdCisgICAgICAgIFtcZkJcLVwtc2V0XC1zZWN0aW9uXC1mbGFnc1xmUiBcZklzZWN0aW9uXGZSPVxmSWZsYWdzXGZSXQorICAgICAgICBbXGZCXC1cLWFkZFwtc2VjdGlvblxmUiBcZklzZWN0aW9ubmFtZVxmUj1cZklmaWxlbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtXC1yZW5hbWVcLXNlY3Rpb25cZlIgXGZJb2xkbmFtZVxmUj1cZkluZXduYW1lXGZSWyxcZklmbGFnc1xmUl1dCisgICAgICAgIFtcZkJcLVwtbG9uZ1wtc2VjdGlvblwtbmFtZXNcZlIge2VuYWJsZSxkaXNhYmxlLGtlZXB9XQorICAgICAgICBbXGZCXC1cLWNoYW5nZVwtbGVhZGluZ1wtY2hhclxmUl0gW1xmQlwtXC1yZW1vdmVcLWxlYWRpbmdcLWNoYXJcZlJdCisgICAgICAgIFtcZkJcLVwtcmV2ZXJzZVwtYnl0ZXM9XGZSXGZJbnVtXGZSXQorICAgICAgICBbXGZCXC1cLXNyZWNcLWxlbj1cZlJcZklpdmFsXGZSXSBbXGZCXC1cLXNyZWNcLWZvcmNlUzNcZlJdCisgICAgICAgIFtcZkJcLVwtcmVkZWZpbmVcLXN5bVxmUiBcZklvbGRcZlI9XGZJbmV3XGZSXQorICAgICAgICBbXGZCXC1cLXJlZGVmaW5lXC1zeW1zPVxmUlxmSWZpbGVuYW1lXGZSXQorICAgICAgICBbXGZCXC1cLXdlYWtlblxmUl0KKyAgICAgICAgW1xmQlwtXC1rZWVwXC1zeW1ib2xzPVxmUlxmSWZpbGVuYW1lXGZSXQorICAgICAgICBbXGZCXC1cLXN0cmlwXC1zeW1ib2xzPVxmUlxmSWZpbGVuYW1lXGZSXQorICAgICAgICBbXGZCXC1cLXN0cmlwXC11bm5lZWRlZFwtc3ltYm9scz1cZlJcZklmaWxlbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtXC1rZWVwXC1nbG9iYWxcLXN5bWJvbHM9XGZSXGZJZmlsZW5hbWVcZlJdCisgICAgICAgIFtcZkJcLVwtbG9jYWxpemVcLXN5bWJvbHM9XGZSXGZJZmlsZW5hbWVcZlJdCisgICAgICAgIFtcZkJcLVwtZ2xvYmFsaXplXC1zeW1ib2xzPVxmUlxmSWZpbGVuYW1lXGZSXQorICAgICAgICBbXGZCXC1cLXdlYWtlblwtc3ltYm9scz1cZlJcZklmaWxlbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtXC1hbHRcLW1hY2hpbmVcLWNvZGU9XGZSXGZJaW5kZXhcZlJdCisgICAgICAgIFtcZkJcLVwtcHJlZml4XC1zeW1ib2xzPVxmUlxmSXN0cmluZ1xmUl0KKyAgICAgICAgW1xmQlwtXC1wcmVmaXhcLXNlY3Rpb25zPVxmUlxmSXN0cmluZ1xmUl0KKyAgICAgICAgW1xmQlwtXC1wcmVmaXhcLWFsbG9jXC1zZWN0aW9ucz1cZlJcZklzdHJpbmdcZlJdCisgICAgICAgIFtcZkJcLVwtYWRkXC1nbnVcLWRlYnVnbGluaz1cZlJcZklwYXRoLXRvLWZpbGVcZlJdCisgICAgICAgIFtcZkJcLVwta2VlcFwtZmlsZVwtc3ltYm9sc1xmUl0KKyAgICAgICAgW1xmQlwtXC1vbmx5XC1rZWVwXC1kZWJ1Z1xmUl0KKyAgICAgICAgW1xmQlwtXC1zdHJpcFwtZHdvXGZSXQorICAgICAgICBbXGZCXC1cLWV4dHJhY3RcLWR3b1xmUl0KKyAgICAgICAgW1xmQlwtXC1leHRyYWN0XC1zeW1ib2xcZlJdCisgICAgICAgIFtcZkJcLVwtd3JpdGFibGVcLXRleHRcZlJdCisgICAgICAgIFtcZkJcLVwtcmVhZG9ubHlcLXRleHRcZlJdCisgICAgICAgIFtcZkJcLVwtcHVyZVxmUl0KKyAgICAgICAgW1xmQlwtXC1pbXB1cmVcZlJdCisgICAgICAgIFtcZkJcLVwtZmlsZVwtYWxpZ25tZW50PVxmUlxmSW51bVxmUl0KKyAgICAgICAgW1xmQlwtXC1oZWFwPVxmUlxmSXNpemVcZlJdCisgICAgICAgIFtcZkJcLVwtaW1hZ2VcLWJhc2U9XGZSXGZJYWRkcmVzc1xmUl0KKyAgICAgICAgW1xmQlwtXC1zZWN0aW9uXC1hbGlnbm1lbnQ9XGZSXGZJbnVtXGZSXQorICAgICAgICBbXGZCXC1cLXN0YWNrPVxmUlxmSXNpemVcZlJdCisgICAgICAgIFtcZkJcLVwtc3Vic3lzdGVtPVxmUlxmSXdoaWNoXGZSOlxmSW1ham9yXGZSLlxmSW1pbm9yXGZSXQorICAgICAgICBbXGZCXC1cLWNvbXByZXNzXC1kZWJ1Z1wtc2VjdGlvbnNcZlJdCisgICAgICAgIFtcZkJcLVwtZGVjb21wcmVzc1wtZGVidWdcLXNlY3Rpb25zXGZSXQorICAgICAgICBbXGZCXC1cLWR3YXJmXC1kZXB0aD1cZlJcZkluXGZSXQorICAgICAgICBbXGZCXC1cLWR3YXJmXC1zdGFydD1cZlJcZkluXGZSXQorICAgICAgICBbXGZCXC12XGZSfFxmQlwtXC12ZXJib3NlXGZSXQorICAgICAgICBbXGZCXC1WXGZSfFxmQlwtXC12ZXJzaW9uXGZSXQorICAgICAgICBbXGZCXC1cLWhlbHBcZlJdIFtcZkJcLVwtaW5mb1xmUl0KKyAgICAgICAgXGZJaW5maWxlXGZSIFtcZklvdXRmaWxlXGZSXQorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorVGhlIFxzLTFHTlVcczAgXGZCb2JqY29weVxmUiB1dGlsaXR5IGNvcGllcyB0aGUgY29udGVudHMgb2YgYW4gb2JqZWN0CitmaWxlIHRvIGFub3RoZXIuICBcZkJvYmpjb3B5XGZSIHVzZXMgdGhlIFxzLTFHTlVcczAgXHMtMUJGRFxzMCBMaWJyYXJ5IHRvCityZWFkIGFuZCB3cml0ZSB0aGUgb2JqZWN0IGZpbGVzLiAgSXQgY2FuIHdyaXRlIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QKK2ZpbGUgaW4gYSBmb3JtYXQgZGlmZmVyZW50IGZyb20gdGhhdCBvZiB0aGUgc291cmNlIG9iamVjdCBmaWxlLiAgVGhlCitleGFjdCBiZWhhdmlvciBvZiBcZkJvYmpjb3B5XGZSIGlzIGNvbnRyb2xsZWQgYnkgY29tbWFuZC1saW5lIG9wdGlvbnMuCitOb3RlIHRoYXQgXGZCb2JqY29weVxmUiBzaG91bGQgYmUgYWJsZSB0byBjb3B5IGEgZnVsbHkgbGlua2VkIGZpbGUKK2JldHdlZW4gYW55IHR3byBmb3JtYXRzLiBIb3dldmVyLCBjb3B5aW5nIGEgcmVsb2NhdGFibGUgb2JqZWN0IGZpbGUKK2JldHdlZW4gYW55IHR3byBmb3JtYXRzIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC4KKy5QUAorXCZcZkJvYmpjb3B5XGZSIGNyZWF0ZXMgdGVtcG9yYXJ5IGZpbGVzIHRvIGRvIGl0cyB0cmFuc2xhdGlvbnMgYW5kCitkZWxldGVzIHRoZW0gYWZ0ZXJ3YXJkLiAgXGZCb2JqY29weVxmUiB1c2VzIFxzLTFCRkRcczAgdG8gZG8gYWxsIGl0cwordHJhbnNsYXRpb24gd29yazsgaXQgaGFzIGFjY2VzcyB0byBhbGwgdGhlIGZvcm1hdHMgZGVzY3JpYmVkIGluIFxzLTFCRkRcczAKK2FuZCB0aHVzIGlzIGFibGUgdG8gcmVjb2duaXplIG1vc3QgZm9ybWF0cyB3aXRob3V0IGJlaW5nIHRvbGQKK2V4cGxpY2l0bHkuCisuUFAKK1wmXGZCb2JqY29weVxmUiBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBTXC1yZWNvcmRzIGJ5IHVzaW5nIGFuIG91dHB1dAordGFyZ2V0IG9mIFxmQnNyZWNcZlIgKGUuZy4sIHVzZSBcZkJcLU8gc3JlY1xmUikuCisuUFAKK1wmXGZCb2JqY29weVxmUiBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBhIHJhdyBiaW5hcnkgZmlsZSBieSB1c2luZyBhbgorb3V0cHV0IHRhcmdldCBvZiBcZkJiaW5hcnlcZlIgKGUuZy4sIHVzZSBcZkJcLU8gYmluYXJ5XGZSKS4gIFdoZW4KK1wmXGZCb2JqY29weVxmUiBnZW5lcmF0ZXMgYSByYXcgYmluYXJ5IGZpbGUsIGl0IHdpbGwgZXNzZW50aWFsbHkgcHJvZHVjZQorYSBtZW1vcnkgZHVtcCBvZiB0aGUgY29udGVudHMgb2YgdGhlIGlucHV0IG9iamVjdCBmaWxlLiAgQWxsIHN5bWJvbHMgYW5kCityZWxvY2F0aW9uIGluZm9ybWF0aW9uIHdpbGwgYmUgZGlzY2FyZGVkLiAgVGhlIG1lbW9yeSBkdW1wIHdpbGwgc3RhcnQgYXQKK3RoZSBsb2FkIGFkZHJlc3Mgb2YgdGhlIGxvd2VzdCBzZWN0aW9uIGNvcGllZCBpbnRvIHRoZSBvdXRwdXQgZmlsZS4KKy5QUAorV2hlbiBnZW5lcmF0aW5nIGFuIFNcLXJlY29yZCBvciBhIHJhdyBiaW5hcnkgZmlsZSwgaXQgbWF5IGJlIGhlbHBmdWwgdG8KK3VzZSBcZkJcLVNcZlIgdG8gcmVtb3ZlIHNlY3Rpb25zIGNvbnRhaW5pbmcgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgSW4KK3NvbWUgY2FzZXMgXGZCXC1SXGZSIHdpbGwgYmUgdXNlZnVsIHRvIHJlbW92ZSBzZWN0aW9ucyB3aGljaCBjb250YWluCitpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBuZWVkZWQgYnkgdGhlIGJpbmFyeSBmaWxlLgorLlBQCitOb3RlXC1cLVwtXGZCb2JqY29weVxmUiBpcyBub3QgYWJsZSB0byBjaGFuZ2UgdGhlIGVuZGlhbm5lc3Mgb2YgaXRzIGlucHV0CitmaWxlcy4gIElmIHRoZSBpbnB1dCBmb3JtYXQgaGFzIGFuIGVuZGlhbm5lc3MgKHNvbWUgZm9ybWF0cyBkbyBub3QpLAorXCZcZkJvYmpjb3B5XGZSIGNhbiBvbmx5IGNvcHkgdGhlIGlucHV0cyBpbnRvIGZpbGUgZm9ybWF0cyB0aGF0IGhhdmUgdGhlCitzYW1lIGVuZGlhbm5lc3Mgb3Igd2hpY2ggaGF2ZSBubyBlbmRpYW5uZXNzIChlLmcuLCBcZkJzcmVjXGZSKS4KKyhIb3dldmVyLCBzZWUgdGhlIFxmQlwtXC1yZXZlcnNlXC1ieXRlc1xmUiBvcHRpb24uKQorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKKy5JUCAiXGZJaW5maWxlXGZSIiA0CisuSVggSXRlbSAiaW5maWxlIgorLlBEIDAKKy5JUCAiXGZJb3V0ZmlsZVxmUiIgNAorLklYIEl0ZW0gIm91dGZpbGUiCisuUEQKK1RoZSBpbnB1dCBhbmQgb3V0cHV0IGZpbGVzLCByZXNwZWN0aXZlbHkuCitJZiB5b3UgZG8gbm90IHNwZWNpZnkgXGZJb3V0ZmlsZVxmUiwgXGZCb2JqY29weVxmUiBjcmVhdGVzIGEKK3RlbXBvcmFyeSBmaWxlIGFuZCBkZXN0cnVjdGl2ZWx5IHJlbmFtZXMgdGhlIHJlc3VsdCB3aXRoCit0aGUgbmFtZSBvZiBcZklpbmZpbGVcZlIuCisuSVAgIlxmQlwtSVxmUiBcZkliZmRuYW1lXGZSIiA0CisuSVggSXRlbSAiLUkgYmZkbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1pbnB1dFwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWlucHV0LXRhcmdldD1iZmRuYW1lIgorLlBECitDb25zaWRlciB0aGUgc291cmNlIGZpbGUncyBvYmplY3QgZm9ybWF0IHRvIGJlIFxmSWJmZG5hbWVcZlIsIHJhdGhlciB0aGFuCithdHRlbXB0aW5nIHRvIGRlZHVjZSBpdC4KKy5JUCAiXGZCXC1PXGZSIFxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItTyBiZmRuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLW91dHB1dFwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItLW91dHB1dC10YXJnZXQ9YmZkbmFtZSIKKy5QRAorV3JpdGUgdGhlIG91dHB1dCBmaWxlIHVzaW5nIHRoZSBvYmplY3QgZm9ybWF0IFxmSWJmZG5hbWVcZlIuCisuSVAgIlxmQlwtRlxmUiBcZkliZmRuYW1lXGZSIiA0CisuSVggSXRlbSAiLUYgYmZkbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0PWJmZG5hbWUiCisuUEQKK1VzZSBcZkliZmRuYW1lXGZSIGFzIHRoZSBvYmplY3QgZm9ybWF0IGZvciBib3RoIHRoZSBpbnB1dCBhbmQgdGhlIG91dHB1dAorZmlsZTsgaS5lLiwgc2ltcGx5IHRyYW5zZmVyIGRhdGEgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gd2l0aCBubwordHJhbnNsYXRpb24uCisuSVAgIlxmQlwtQlxmUiBcZkliZmRhcmNoXGZSIiA0CisuSVggSXRlbSAiLUIgYmZkYXJjaCIKKy5QRCAwCisuSVAgIlxmQlwtXC1iaW5hcnlcLWFyY2hpdGVjdHVyZT1cZlJcZkliZmRhcmNoXGZSIiA0CisuSVggSXRlbSAiLS1iaW5hcnktYXJjaGl0ZWN0dXJlPWJmZGFyY2giCisuUEQKK1VzZWZ1bCB3aGVuIHRyYW5zZm9ybWluZyBhIGFyY2hpdGVjdHVyZS1sZXNzIGlucHV0IGZpbGUgaW50byBhbiBvYmplY3QgZmlsZS4KK0luIHRoaXMgY2FzZSB0aGUgb3V0cHV0IGFyY2hpdGVjdHVyZSBjYW4gYmUgc2V0IHRvIFxmSWJmZGFyY2hcZlIuICBUaGlzCitvcHRpb24gd2lsbCBiZSBpZ25vcmVkIGlmIHRoZSBpbnB1dCBmaWxlIGhhcyBhIGtub3duIFxmSWJmZGFyY2hcZlIuICBZb3UKK2NhbiBhY2Nlc3MgdGhpcyBiaW5hcnkgZGF0YSBpbnNpZGUgYSBwcm9ncmFtIGJ5IHJlZmVyZW5jaW5nIHRoZSBzcGVjaWFsCitzeW1ib2xzIHRoYXQgYXJlIGNyZWF0ZWQgYnkgdGhlIGNvbnZlcnNpb24gcHJvY2Vzcy4gIFRoZXNlIHN5bWJvbHMgYXJlCitjYWxsZWQgX2JpbmFyeV9cZklvYmpmaWxlXGZSX3N0YXJ0LCBfYmluYXJ5X1xmSW9iamZpbGVcZlJfZW5kIGFuZAorX2JpbmFyeV9cZklvYmpmaWxlXGZSX3NpemUuICBlLmcuIHlvdSBjYW4gdHJhbnNmb3JtIGEgcGljdHVyZSBmaWxlIGludG8KK2FuIG9iamVjdCBmaWxlIGFuZCB0aGVuIGFjY2VzcyBpdCBpbiB5b3VyIGNvZGUgdXNpbmcgdGhlc2Ugc3ltYm9scy4KKy5JUCAiXGZCXC1qXGZSIFxmSXNlY3Rpb25uYW1lXGZSIiA0CisuSVggSXRlbSAiLWogc2VjdGlvbm5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtb25seVwtc2VjdGlvbj1cZlJcZklzZWN0aW9ubmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tb25seS1zZWN0aW9uPXNlY3Rpb25uYW1lIgorLlBECitDb3B5IG9ubHkgdGhlIG5hbWVkIHNlY3Rpb24gZnJvbSB0aGUgaW5wdXQgZmlsZSB0byB0aGUgb3V0cHV0IGZpbGUuCitUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuICBOb3RlIHRoYXQgdXNpbmcgdGhpcyBvcHRpb24KK2luYXBwcm9wcmlhdGVseSBtYXkgbWFrZSB0aGUgb3V0cHV0IGZpbGUgdW51c2FibGUuCisuSVAgIlxmQlwtUlxmUiBcZklzZWN0aW9ubmFtZVxmUiIgNAorLklYIEl0ZW0gIi1SIHNlY3Rpb25uYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLXJlbW92ZVwtc2VjdGlvbj1cZlJcZklzZWN0aW9ubmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tcmVtb3ZlLXNlY3Rpb249c2VjdGlvbm5hbWUiCisuUEQKK1JlbW92ZSBhbnkgc2VjdGlvbiBuYW1lZCBcZklzZWN0aW9ubmFtZVxmUiBmcm9tIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMKK29wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuICBOb3RlIHRoYXQgdXNpbmcgdGhpcyBvcHRpb24KK2luYXBwcm9wcmlhdGVseSBtYXkgbWFrZSB0aGUgb3V0cHV0IGZpbGUgdW51c2FibGUuCisuSVAgIlxmQlwtU1xmUiIgNAorLklYIEl0ZW0gIi1TIgorLlBEIDAKKy5JUCAiXGZCXC1cLXN0cmlwXC1hbGxcZlIiIDQKKy5JWCBJdGVtICItLXN0cmlwLWFsbCIKKy5QRAorRG8gbm90IGNvcHkgcmVsb2NhdGlvbiBhbmQgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gdGhlIHNvdXJjZSBmaWxlLgorLklQICJcZkJcLWdcZlIiIDQKKy5JWCBJdGVtICItZyIKKy5QRCAwCisuSVAgIlxmQlwtXC1zdHJpcFwtZGVidWdcZlIiIDQKKy5JWCBJdGVtICItLXN0cmlwLWRlYnVnIgorLlBECitEbyBub3QgY29weSBkZWJ1Z2dpbmcgc3ltYm9scyBvciBzZWN0aW9ucyBmcm9tIHRoZSBzb3VyY2UgZmlsZS4KKy5JUCAiXGZCXC1cLXN0cmlwXC11bm5lZWRlZFxmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtdW5uZWVkZWQiCitTdHJpcCBhbGwgc3ltYm9scyB0aGF0IGFyZSBub3QgbmVlZGVkIGZvciByZWxvY2F0aW9uIHByb2Nlc3NpbmcuCisuSVAgIlxmQlwtS1xmUiBcZklzeW1ib2xuYW1lXGZSIiA0CisuSVggSXRlbSAiLUsgc3ltYm9sbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1rZWVwXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0ta2VlcC1zeW1ib2w9c3ltYm9sbmFtZSIKKy5QRAorV2hlbiBzdHJpcHBpbmcgc3ltYm9scywga2VlcCBzeW1ib2wgXGZJc3ltYm9sbmFtZVxmUiBldmVuIGlmIGl0IHdvdWxkCitub3JtYWxseSBiZSBzdHJpcHBlZC4gIFRoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKy5JUCAiXGZCXC1OXGZSIFxmSXN5bWJvbG5hbWVcZlIiIDQKKy5JWCBJdGVtICItTiBzeW1ib2xuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLXN0cmlwXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtc3ltYm9sPXN5bWJvbG5hbWUiCisuUEQKK0RvIG5vdCBjb3B5IHN5bWJvbCBcZklzeW1ib2xuYW1lXGZSIGZyb20gdGhlIHNvdXJjZSBmaWxlLiAgVGhpcyBvcHRpb24KK21heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKy5JUCAiXGZCXC1cLXN0cmlwXC11bm5lZWRlZFwtc3ltYm9sPVxmUlxmSXN5bWJvbG5hbWVcZlIiIDQKKy5JWCBJdGVtICItLXN0cmlwLXVubmVlZGVkLXN5bWJvbD1zeW1ib2xuYW1lIgorRG8gbm90IGNvcHkgc3ltYm9sIFxmSXN5bWJvbG5hbWVcZlIgZnJvbSB0aGUgc291cmNlIGZpbGUgdW5sZXNzIGl0IGlzIG5lZWRlZAorYnkgYSByZWxvY2F0aW9uLiAgVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgorLklQICJcZkJcLUdcZlIgXGZJc3ltYm9sbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1HIHN5bWJvbG5hbWUiCisuUEQgMAorLklQICJcZkJcLVwta2VlcFwtZ2xvYmFsXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0ta2VlcC1nbG9iYWwtc3ltYm9sPXN5bWJvbG5hbWUiCisuUEQKK0tlZXAgb25seSBzeW1ib2wgXGZJc3ltYm9sbmFtZVxmUiBnbG9iYWwuICBNYWtlIGFsbCBvdGhlciBzeW1ib2xzIGxvY2FsCit0byB0aGUgZmlsZSwgc28gdGhhdCB0aGV5IGFyZSBub3QgdmlzaWJsZSBleHRlcm5hbGx5LiAgVGhpcyBvcHRpb24gbWF5CitiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKy5JUCAiXGZCXC1cLWxvY2FsaXplXC1oaWRkZW5cZlIiIDQKKy5JWCBJdGVtICItLWxvY2FsaXplLWhpZGRlbiIKK0luIGFuIFxzLTFFTEZcczAgb2JqZWN0LCBtYXJrIGFsbCBzeW1ib2xzIHRoYXQgaGF2ZSBoaWRkZW4gb3IgaW50ZXJuYWwgdmlzaWJpbGl0eQorYXMgbG9jYWwuICBUaGlzIG9wdGlvbiBhcHBsaWVzIG9uIHRvcCBvZiBzeW1ib2wtc3BlY2lmaWMgbG9jYWxpemF0aW9uIG9wdGlvbnMKK3N1Y2ggYXMgXGZCXC1MXGZSLgorLklQICJcZkJcLUxcZlIgXGZJc3ltYm9sbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1MIHN5bWJvbG5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtbG9jYWxpemVcLXN5bWJvbD1cZlJcZklzeW1ib2xuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1sb2NhbGl6ZS1zeW1ib2w9c3ltYm9sbmFtZSIKKy5QRAorTWFrZSBzeW1ib2wgXGZJc3ltYm9sbmFtZVxmUiBsb2NhbCB0byB0aGUgZmlsZSwgc28gdGhhdCBpdCBpcyBub3QKK3Zpc2libGUgZXh0ZXJuYWxseS4gIFRoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKy5JUCAiXGZCXC1XXGZSIFxmSXN5bWJvbG5hbWVcZlIiIDQKKy5JWCBJdGVtICItVyBzeW1ib2xuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLXdlYWtlblwtc3ltYm9sPVxmUlxmSXN5bWJvbG5hbWVcZlIiIDQKKy5JWCBJdGVtICItLXdlYWtlbi1zeW1ib2w9c3ltYm9sbmFtZSIKKy5QRAorTWFrZSBzeW1ib2wgXGZJc3ltYm9sbmFtZVxmUiB3ZWFrLiBUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisuSVAgIlxmQlwtXC1nbG9iYWxpemVcLXN5bWJvbD1cZlJcZklzeW1ib2xuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1nbG9iYWxpemUtc3ltYm9sPXN5bWJvbG5hbWUiCitHaXZlIHN5bWJvbCBcZklzeW1ib2xuYW1lXGZSIGdsb2JhbCBzY29waW5nIHNvIHRoYXQgaXQgaXMgdmlzaWJsZQorb3V0c2lkZSBvZiB0aGUgZmlsZSBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLiAgVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuCittb3JlIHRoYW4gb25jZS4KKy5JUCAiXGZCXC13XGZSIiA0CisuSVggSXRlbSAiLXciCisuUEQgMAorLklQICJcZkJcLVwtd2lsZGNhcmRcZlIiIDQKKy5JWCBJdGVtICItLXdpbGRjYXJkIgorLlBECitQZXJtaXQgcmVndWxhciBleHByZXNzaW9ucyBpbiBcZklzeW1ib2xuYW1lXGZScyB1c2VkIGluIG90aGVyIGNvbW1hbmQKK2xpbmUgb3B0aW9ucy4gIFRoZSBxdWVzdGlvbiBtYXJrICg/KSwgYXN0ZXJpc2sgKCopLCBiYWNrc2xhc2ggKFxlKSBhbmQKK3NxdWFyZSBicmFja2V0cyAoW10pIG9wZXJhdG9ycyBjYW4gYmUgdXNlZCBhbnl3aGVyZSBpbiB0aGUgc3ltYm9sCituYW1lLiAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3ltYm9sIG5hbWUgaXMgdGhlIGV4Y2xhbWF0aW9uCitwb2ludCAoISkgdGhlbiB0aGUgc2Vuc2Ugb2YgdGhlIHN3aXRjaCBpcyByZXZlcnNlZCBmb3IgdGhhdCBzeW1ib2wuCitGb3IgZXhhbXBsZToKKy5TcAorLlZiIDEKK1wmICAgICAgICAgIFwtdyBcLVcgIWZvbyBcLVcgZm8qCisuVmUKKy5TcAord291bGQgY2F1c2Ugb2JqY29weSB0byB3ZWFrZW4gYWxsIHN5bWJvbHMgdGhhdCBzdGFydCB3aXRoIFwqKEwiZm9cKihSIgorZXhjZXB0IGZvciB0aGUgc3ltYm9sIFwqKEwiZm9vXCooUiIuCisuSVAgIlxmQlwteFxmUiIgNAorLklYIEl0ZW0gIi14IgorLlBEIDAKKy5JUCAiXGZCXC1cLWRpc2NhcmRcLWFsbFxmUiIgNAorLklYIEl0ZW0gIi0tZGlzY2FyZC1hbGwiCisuUEQKK0RvIG5vdCBjb3B5IG5vbi1nbG9iYWwgc3ltYm9scyBmcm9tIHRoZSBzb3VyY2UgZmlsZS4KKy5JUCAiXGZCXC1YXGZSIiA0CisuSVggSXRlbSAiLVgiCisuUEQgMAorLklQICJcZkJcLVwtZGlzY2FyZFwtbG9jYWxzXGZSIiA0CisuSVggSXRlbSAiLS1kaXNjYXJkLWxvY2FscyIKKy5QRAorRG8gbm90IGNvcHkgY29tcGlsZXItZ2VuZXJhdGVkIGxvY2FsIHN5bWJvbHMuCisoVGhlc2UgdXN1YWxseSBzdGFydCB3aXRoIFxmQkxcZlIgb3IgXGZCLlxmUi4pCisuSVAgIlxmQlwtYlxmUiBcZklieXRlXGZSIiA0CisuSVggSXRlbSAiLWIgYnl0ZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1ieXRlPVxmUlxmSWJ5dGVcZlIiIDQKKy5JWCBJdGVtICItLWJ5dGU9Ynl0ZSIKKy5QRAorSWYgaW50ZXJsZWF2aW5nIGhhcyBiZWVuIGVuYWJsZWQgdmlhIHRoZSBcZkJcLVwtaW50ZXJsZWF2ZVxmUiBvcHRpb24KK3RoZW4gc3RhcnQgdGhlIHJhbmdlIG9mIGJ5dGVzIHRvIGtlZXAgYXQgdGhlIFxmSWJ5dGVcZlJ0aCBieXRlLgorXCZcZklieXRlXGZSIGNhbiBiZSBpbiB0aGUgcmFuZ2UgZnJvbSAwIHRvIFxmSWJyZWFkdGhcZlJcLTEsIHdoZXJlCitcJlxmSWJyZWFkdGhcZlIgaXMgdGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSBcZkJcLVwtaW50ZXJsZWF2ZVxmUiBvcHRpb24uCisuSVAgIlxmQlwtaSBbXGZSXGZJYnJlYWR0aFxmUlxmQl1cZlIiIDQKKy5JWCBJdGVtICItaSBbYnJlYWR0aF0iCisuUEQgMAorLklQICJcZkJcLVwtaW50ZXJsZWF2ZVs9XGZSXGZJYnJlYWR0aFxmUlxmQl1cZlIiIDQKKy5JWCBJdGVtICItLWludGVybGVhdmVbPWJyZWFkdGhdIgorLlBECitPbmx5IGNvcHkgYSByYW5nZSBvdXQgb2YgZXZlcnkgXGZJYnJlYWR0aFxmUiBieXRlcy4gIChIZWFkZXIgZGF0YSBpcworbm90IGFmZmVjdGVkKS4gIFNlbGVjdCB3aGljaCBieXRlIGluIHRoZSByYW5nZSBiZWdpbnMgdGhlIGNvcHkgd2l0aAordGhlIFxmQlwtXC1ieXRlXGZSIG9wdGlvbi4gIFNlbGVjdCB0aGUgd2lkdGggb2YgdGhlIHJhbmdlIHdpdGggdGhlCitcJlxmQlwtXC1pbnRlcmxlYXZlXC13aWR0aFxmUiBvcHRpb24uCisuU3AKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgZmlsZXMgdG8gcHJvZ3JhbSBccy0xUk9NXHMwLiAgSXQgaXMKK3R5cGljYWxseSB1c2VkIHdpdGggYW4gXGYoQ1dcKihDYHNyZWNcKihDJ1xmUiBvdXRwdXQgdGFyZ2V0LiAgTm90ZSB0aGF0CitcJlxmQm9iamNvcHlcZlIgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG8gbm90IHNwZWNpZnkgdGhlCitcJlxmQlwtXC1ieXRlXGZSIG9wdGlvbiBhcyB3ZWxsLgorLlNwCitUaGUgZGVmYXVsdCBpbnRlcmxlYXZlIGJyZWFkdGggaXMgNCwgc28gd2l0aCBcZkJcLVwtYnl0ZVxmUiBzZXQgdG8gMCwKK1wmXGZCb2JqY29weVxmUiB3b3VsZCBjb3B5IHRoZSBmaXJzdCBieXRlIG91dCBvZiBldmVyeSBmb3VyIGJ5dGVzCitmcm9tIHRoZSBpbnB1dCB0byB0aGUgb3V0cHV0LgorLklQICJcZkJcLVwtaW50ZXJsZWF2ZVwtd2lkdGg9XGZSXGZJd2lkdGhcZlIiIDQKKy5JWCBJdGVtICItLWludGVybGVhdmUtd2lkdGg9d2lkdGgiCitXaGVuIHVzZWQgd2l0aCB0aGUgXGZCXC1cLWludGVybGVhdmVcZlIgb3B0aW9uLCBjb3B5IFxmSXdpZHRoXGZSCitieXRlcyBhdCBhIHRpbWUuICBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlIG9mIGJ5dGVzIHRvIGJlIGNvcGllZCBpcyBzZXQKK2J5IHRoZSBcZkJcLVwtYnl0ZVxmUiBvcHRpb24sIGFuZCB0aGUgZXh0ZW50IG9mIHRoZSByYW5nZSBpcyBzZXQgd2l0aAordGhlIFxmQlwtXC1pbnRlcmxlYXZlXGZSIG9wdGlvbi4KKy5TcAorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgb3B0aW9uIGlzIDEuICBUaGUgdmFsdWUgb2YgXGZJd2lkdGhcZlIgcGx1cwordGhlIFxmSWJ5dGVcZlIgdmFsdWUgc2V0IGJ5IHRoZSBcZkJcLVwtYnl0ZVxmUiBvcHRpb24gbXVzdCBub3QgZXhjZWVkCit0aGUgaW50ZXJsZWF2ZSBicmVhZHRoIHNldCBieSB0aGUgXGZCXC1cLWludGVybGVhdmVcZlIgb3B0aW9uLgorLlNwCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW1hZ2VzIGZvciB0d28gMTZcLWJpdCBmbGFzaGVzIGludGVybGVhdmVkCitpbiBhIDMyXC1iaXQgYnVzIGJ5IHBhc3NpbmcgXGZCXC1iIDAgXC1pIDQgXC1cLWludGVybGVhdmVcLXdpZHRoPTJcZlIKK2FuZCBcZkJcLWIgMiBcLWkgNCBcLVwtaW50ZXJsZWF2ZVwtd2lkdGg9MlxmUiB0byB0d28gXGZCb2JqY29weVxmUgorY29tbWFuZHMuICBJZiB0aGUgaW5wdXQgd2FzICcxMjM0NTY3OCcgdGhlbiB0aGUgb3V0cHV0cyB3b3VsZCBiZQorXCYnMTI1NicgYW5kICczNDc4JyByZXNwZWN0aXZlbHkuCisuSVAgIlxmQlwtcFxmUiIgNAorLklYIEl0ZW0gIi1wIgorLlBEIDAKKy5JUCAiXGZCXC1cLXByZXNlcnZlXC1kYXRlc1xmUiIgNAorLklYIEl0ZW0gIi0tcHJlc2VydmUtZGF0ZXMiCisuUEQKK1NldCB0aGUgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gZGF0ZXMgb2YgdGhlIG91dHB1dCBmaWxlIHRvIGJlIHRoZSBzYW1lCithcyB0aG9zZSBvZiB0aGUgaW5wdXQgZmlsZS4KKy5JUCAiXGZCXC1EXGZSIiA0CisuSVggSXRlbSAiLUQiCisuUEQgMAorLklQICJcZkJcLVwtZW5hYmxlXC1kZXRlcm1pbmlzdGljXC1hcmNoaXZlc1xmUiIgNAorLklYIEl0ZW0gIi0tZW5hYmxlLWRldGVybWluaXN0aWMtYXJjaGl2ZXMiCisuUEQKK09wZXJhdGUgaW4gXGZJZGV0ZXJtaW5pc3RpY1xmUiBtb2RlLiAgV2hlbiBjb3B5aW5nIGFyY2hpdmUgbWVtYmVycworYW5kIHdyaXRpbmcgdGhlIGFyY2hpdmUgaW5kZXgsIHVzZSB6ZXJvIGZvciBVSURzLCBHSURzLCB0aW1lc3RhbXBzLAorYW5kIHVzZSBjb25zaXN0ZW50IGZpbGUgbW9kZXMgZm9yIGFsbCBmaWxlcy4KKy5TcAorSWYgXGZJYmludXRpbHNcZlIgd2FzIGNvbmZpZ3VyZWQgd2l0aAorXCZcZkJcLVwtZW5hYmxlXC1kZXRlcm1pbmlzdGljXC1hcmNoaXZlc1xmUiwgdGhlbiB0aGlzIG1vZGUgaXMgb24gYnkgZGVmYXVsdC4KK0l0IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZSBcZkJcLVVcZlIgb3B0aW9uLCBiZWxvdy4KKy5JUCAiXGZCXC1VXGZSIiA0CisuSVggSXRlbSAiLVUiCisuUEQgMAorLklQICJcZkJcLVwtZGlzYWJsZVwtZGV0ZXJtaW5pc3RpY1wtYXJjaGl2ZXNcZlIiIDQKKy5JWCBJdGVtICItLWRpc2FibGUtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlcyIKKy5QRAorRG8gXGZJbm90XGZSIG9wZXJhdGUgaW4gXGZJZGV0ZXJtaW5pc3RpY1xmUiBtb2RlLiAgVGhpcyBpcyB0aGUKK2ludmVyc2Ugb2YgdGhlIFxmQlwtRFxmUiBvcHRpb24sIGFib3ZlOiB3aGVuIGNvcHlpbmcgYXJjaGl2ZSBtZW1iZXJzCithbmQgd3JpdGluZyB0aGUgYXJjaGl2ZSBpbmRleCwgdXNlIHRoZWlyIGFjdHVhbCBccy0xVUlEXHMwLCBccy0xR0lEXHMwLCB0aW1lc3RhbXAsCithbmQgZmlsZSBtb2RlIHZhbHVlcy4KKy5TcAorVGhpcyBpcyB0aGUgZGVmYXVsdCB1bmxlc3MgXGZJYmludXRpbHNcZlIgd2FzIGNvbmZpZ3VyZWQgd2l0aAorXCZcZkJcLVwtZW5hYmxlXC1kZXRlcm1pbmlzdGljXC1hcmNoaXZlc1xmUi4KKy5JUCAiXGZCXC1cLWRlYnVnZ2luZ1xmUiIgNAorLklYIEl0ZW0gIi0tZGVidWdnaW5nIgorQ29udmVydCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24sIGlmIHBvc3NpYmxlLiAgVGhpcyBpcyBub3QgdGhlIGRlZmF1bHQKK2JlY2F1c2Ugb25seSBjZXJ0YWluIGRlYnVnZ2luZyBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQsIGFuZCB0aGUKK2NvbnZlcnNpb24gcHJvY2VzcyBjYW4gYmUgdGltZSBjb25zdW1pbmcuCisuSVAgIlxmQlwtXC1nYXBcLWZpbGxcZlIgXGZJdmFsXGZSIiA0CisuSVggSXRlbSAiLS1nYXAtZmlsbCB2YWwiCitGaWxsIGdhcHMgYmV0d2VlbiBzZWN0aW9ucyB3aXRoIFxmSXZhbFxmUi4gIFRoaXMgb3BlcmF0aW9uIGFwcGxpZXMgdG8KK3RoZSBcZklsb2FkIGFkZHJlc3NcZlIgKFxzLTFMTUFcczApIG9mIHRoZSBzZWN0aW9ucy4gIEl0IGlzIGRvbmUgYnkgaW5jcmVhc2luZwordGhlIHNpemUgb2YgdGhlIHNlY3Rpb24gd2l0aCB0aGUgbG93ZXIgYWRkcmVzcywgYW5kIGZpbGxpbmcgaW4gdGhlIGV4dHJhCitzcGFjZSBjcmVhdGVkIHdpdGggXGZJdmFsXGZSLgorLklQICJcZkJcLVwtcGFkXC10b1xmUiBcZklhZGRyZXNzXGZSIiA0CisuSVggSXRlbSAiLS1wYWQtdG8gYWRkcmVzcyIKK1BhZCB0aGUgb3V0cHV0IGZpbGUgdXAgdG8gdGhlIGxvYWQgYWRkcmVzcyBcZklhZGRyZXNzXGZSLiAgVGhpcyBpcworZG9uZSBieSBpbmNyZWFzaW5nIHRoZSBzaXplIG9mIHRoZSBsYXN0IHNlY3Rpb24uICBUaGUgZXh0cmEgc3BhY2UgaXMKK2ZpbGxlZCBpbiB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgXGZCXC1cLWdhcFwtZmlsbFxmUiAoZGVmYXVsdCB6ZXJvKS4KKy5JUCAiXGZCXC1cLXNldFwtc3RhcnRcZlIgXGZJdmFsXGZSIiA0CisuSVggSXRlbSAiLS1zZXQtc3RhcnQgdmFsIgorU2V0IHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBuZXcgZmlsZSB0byBcZkl2YWxcZlIuICBOb3QgYWxsIG9iamVjdCBmaWxlCitmb3JtYXRzIHN1cHBvcnQgc2V0dGluZyB0aGUgc3RhcnQgYWRkcmVzcy4KKy5JUCAiXGZCXC1cLWNoYW5nZVwtc3RhcnRcZlIgXGZJaW5jclxmUiIgNAorLklYIEl0ZW0gIi0tY2hhbmdlLXN0YXJ0IGluY3IiCisuUEQgMAorLklQICJcZkJcLVwtYWRqdXN0XC1zdGFydFxmUiBcZklpbmNyXGZSIiA0CisuSVggSXRlbSAiLS1hZGp1c3Qtc3RhcnQgaW5jciIKKy5QRAorQ2hhbmdlIHRoZSBzdGFydCBhZGRyZXNzIGJ5IGFkZGluZyBcZklpbmNyXGZSLiAgTm90IGFsbCBvYmplY3QgZmlsZQorZm9ybWF0cyBzdXBwb3J0IHNldHRpbmcgdGhlIHN0YXJ0IGFkZHJlc3MuCisuSVAgIlxmQlwtXC1jaGFuZ2VcLWFkZHJlc3Nlc1xmUiBcZklpbmNyXGZSIiA0CisuSVggSXRlbSAiLS1jaGFuZ2UtYWRkcmVzc2VzIGluY3IiCisuUEQgMAorLklQICJcZkJcLVwtYWRqdXN0XC12bWFcZlIgXGZJaW5jclxmUiIgNAorLklYIEl0ZW0gIi0tYWRqdXN0LXZtYSBpbmNyIgorLlBECitDaGFuZ2UgdGhlIFxzLTFWTUFcczAgYW5kIFxzLTFMTUFcczAgYWRkcmVzc2VzIG9mIGFsbCBzZWN0aW9ucywgYXMgd2VsbCBhcyB0aGUgc3RhcnQKK2FkZHJlc3MsIGJ5IGFkZGluZyBcZklpbmNyXGZSLiAgU29tZSBvYmplY3QgZmlsZSBmb3JtYXRzIGRvIG5vdCBwZXJtaXQKK3NlY3Rpb24gYWRkcmVzc2VzIHRvIGJlIGNoYW5nZWQgYXJiaXRyYXJpbHkuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAorcmVsb2NhdGUgdGhlIHNlY3Rpb25zOyBpZiB0aGUgcHJvZ3JhbSBleHBlY3RzIHNlY3Rpb25zIHRvIGJlIGxvYWRlZCBhdCBhCitjZXJ0YWluIGFkZHJlc3MsIGFuZCB0aGlzIG9wdGlvbiBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgc2VjdGlvbnMgc3VjaAordGhhdCB0aGV5IGFyZSBsb2FkZWQgYXQgYSBkaWZmZXJlbnQgYWRkcmVzcywgdGhlIHByb2dyYW0gbWF5IGZhaWwuCisuSVAgIlxmQlwtXC1jaGFuZ2VcLXNlY3Rpb25cLWFkZHJlc3NcZlIgXGZJc2VjdGlvblxmUlxmQns9LCssXC19XGZSXGZJdmFsXGZSIiA0CisuSVggSXRlbSAiLS1jaGFuZ2Utc2VjdGlvbi1hZGRyZXNzIHNlY3Rpb257PSwrLC19dmFsIgorLlBEIDAKKy5JUCAiXGZCXC1cLWFkanVzdFwtc2VjdGlvblwtdm1hXGZSIFxmSXNlY3Rpb25cZlJcZkJ7PSwrLFwtfVxmUlxmSXZhbFxmUiIgNAorLklYIEl0ZW0gIi0tYWRqdXN0LXNlY3Rpb24tdm1hIHNlY3Rpb257PSwrLC19dmFsIgorLlBECitTZXQgb3IgY2hhbmdlIGJvdGggdGhlIFxzLTFWTUFcczAgYWRkcmVzcyBhbmQgdGhlIFxzLTFMTUFcczAgYWRkcmVzcyBvZiB0aGUgbmFtZWQKK1wmXGZJc2VjdGlvblxmUi4gIElmIFxmQj1cZlIgaXMgdXNlZCwgdGhlIHNlY3Rpb24gYWRkcmVzcyBpcyBzZXQgdG8KK1wmXGZJdmFsXGZSLiAgT3RoZXJ3aXNlLCBcZkl2YWxcZlIgaXMgYWRkZWQgdG8gb3Igc3VidHJhY3RlZCBmcm9tIHRoZQorc2VjdGlvbiBhZGRyZXNzLiAgU2VlIHRoZSBjb21tZW50cyB1bmRlciBcZkJcLVwtY2hhbmdlXC1hZGRyZXNzZXNcZlIsCithYm92ZS4gSWYgXGZJc2VjdGlvblxmUiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5wdXQgZmlsZSwgYSB3YXJuaW5nIHdpbGwKK2JlIGlzc3VlZCwgdW5sZXNzIFxmQlwtXC1ub1wtY2hhbmdlXC13YXJuaW5nc1xmUiBpcyB1c2VkLgorLklQICJcZkJcLVwtY2hhbmdlXC1zZWN0aW9uXC1sbWFcZlIgXGZJc2VjdGlvblxmUlxmQns9LCssXC19XGZSXGZJdmFsXGZSIiA0CisuSVggSXRlbSAiLS1jaGFuZ2Utc2VjdGlvbi1sbWEgc2VjdGlvbns9LCssLX12YWwiCitTZXQgb3IgY2hhbmdlIHRoZSBccy0xTE1BXHMwIGFkZHJlc3Mgb2YgdGhlIG5hbWVkIFxmSXNlY3Rpb25cZlIuICBUaGUgXHMtMUxNQVxzMAorYWRkcmVzcyBpcyB0aGUgYWRkcmVzcyB3aGVyZSB0aGUgc2VjdGlvbiB3aWxsIGJlIGxvYWRlZCBpbnRvIG1lbW9yeSBhdAorcHJvZ3JhbSBsb2FkIHRpbWUuICBOb3JtYWxseSB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBccy0xVk1BXHMwIGFkZHJlc3MsIHdoaWNoCitpcyB0aGUgYWRkcmVzcyBvZiB0aGUgc2VjdGlvbiBhdCBwcm9ncmFtIHJ1biB0aW1lLCBidXQgb24gc29tZSBzeXN0ZW1zLAorZXNwZWNpYWxseSB0aG9zZSB3aGVyZSBhIHByb2dyYW0gaXMgaGVsZCBpbiBccy0xUk9NXHMwLCB0aGUgdHdvIGNhbiBiZQorZGlmZmVyZW50LiAgSWYgXGZCPVxmUiBpcyB1c2VkLCB0aGUgc2VjdGlvbiBhZGRyZXNzIGlzIHNldCB0bworXCZcZkl2YWxcZlIuICBPdGhlcndpc2UsIFxmSXZhbFxmUiBpcyBhZGRlZCB0byBvciBzdWJ0cmFjdGVkIGZyb20gdGhlCitzZWN0aW9uIGFkZHJlc3MuICBTZWUgdGhlIGNvbW1lbnRzIHVuZGVyIFxmQlwtXC1jaGFuZ2VcLWFkZHJlc3Nlc1xmUiwKK2Fib3ZlLiAgSWYgXGZJc2VjdGlvblxmUiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5wdXQgZmlsZSwgYSB3YXJuaW5nCit3aWxsIGJlIGlzc3VlZCwgdW5sZXNzIFxmQlwtXC1ub1wtY2hhbmdlXC13YXJuaW5nc1xmUiBpcyB1c2VkLgorLklQICJcZkJcLVwtY2hhbmdlXC1zZWN0aW9uXC12bWFcZlIgXGZJc2VjdGlvblxmUlxmQns9LCssXC19XGZSXGZJdmFsXGZSIiA0CisuSVggSXRlbSAiLS1jaGFuZ2Utc2VjdGlvbi12bWEgc2VjdGlvbns9LCssLX12YWwiCitTZXQgb3IgY2hhbmdlIHRoZSBccy0xVk1BXHMwIGFkZHJlc3Mgb2YgdGhlIG5hbWVkIFxmSXNlY3Rpb25cZlIuICBUaGUgXHMtMVZNQVxzMAorYWRkcmVzcyBpcyB0aGUgYWRkcmVzcyB3aGVyZSB0aGUgc2VjdGlvbiB3aWxsIGJlIGxvY2F0ZWQgb25jZSB0aGUKK3Byb2dyYW0gaGFzIHN0YXJ0ZWQgZXhlY3V0aW5nLiAgTm9ybWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgXHMtMUxNQVxzMAorYWRkcmVzcywgd2hpY2ggaXMgdGhlIGFkZHJlc3Mgd2hlcmUgdGhlIHNlY3Rpb24gd2lsbCBiZSBsb2FkZWQgaW50bworbWVtb3J5LCBidXQgb24gc29tZSBzeXN0ZW1zLCBlc3BlY2lhbGx5IHRob3NlIHdoZXJlIGEgcHJvZ3JhbSBpcyBoZWxkIGluCitcJlxzLTFST01cczAsIHRoZSB0d28gY2FuIGJlIGRpZmZlcmVudC4gIElmIFxmQj1cZlIgaXMgdXNlZCwgdGhlIHNlY3Rpb24gYWRkcmVzcworaXMgc2V0IHRvIFxmSXZhbFxmUi4gIE90aGVyd2lzZSwgXGZJdmFsXGZSIGlzIGFkZGVkIHRvIG9yIHN1YnRyYWN0ZWQKK2Zyb20gdGhlIHNlY3Rpb24gYWRkcmVzcy4gIFNlZSB0aGUgY29tbWVudHMgdW5kZXIKK1wmXGZCXC1cLWNoYW5nZVwtYWRkcmVzc2VzXGZSLCBhYm92ZS4gIElmIFxmSXNlY3Rpb25cZlIgZG9lcyBub3QgZXhpc3QgaW4KK3RoZSBpbnB1dCBmaWxlLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQsIHVubGVzcworXCZcZkJcLVwtbm9cLWNoYW5nZVwtd2FybmluZ3NcZlIgaXMgdXNlZC4KKy5JUCAiXGZCXC1cLWNoYW5nZVwtd2FybmluZ3NcZlIiIDQKKy5JWCBJdGVtICItLWNoYW5nZS13YXJuaW5ncyIKKy5QRCAwCisuSVAgIlxmQlwtXC1hZGp1c3RcLXdhcm5pbmdzXGZSIiA0CisuSVggSXRlbSAiLS1hZGp1c3Qtd2FybmluZ3MiCisuUEQKK0lmIFxmQlwtXC1jaGFuZ2VcLXNlY3Rpb25cLWFkZHJlc3NcZlIgb3IgXGZCXC1cLWNoYW5nZVwtc2VjdGlvblwtbG1hXGZSIG9yCitcJlxmQlwtXC1jaGFuZ2VcLXNlY3Rpb25cLXZtYVxmUiBpcyB1c2VkLCBhbmQgdGhlIG5hbWVkIHNlY3Rpb24gZG9lcyBub3QKK2V4aXN0LCBpc3N1ZSBhIHdhcm5pbmcuICBUaGlzIGlzIHRoZSBkZWZhdWx0LgorLklQICJcZkJcLVwtbm9cLWNoYW5nZVwtd2FybmluZ3NcZlIiIDQKKy5JWCBJdGVtICItLW5vLWNoYW5nZS13YXJuaW5ncyIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub1wtYWRqdXN0XC13YXJuaW5nc1xmUiIgNAorLklYIEl0ZW0gIi0tbm8tYWRqdXN0LXdhcm5pbmdzIgorLlBECitEbyBub3QgaXNzdWUgYSB3YXJuaW5nIGlmIFxmQlwtXC1jaGFuZ2VcLXNlY3Rpb25cLWFkZHJlc3NcZlIgb3IKK1wmXGZCXC1cLWFkanVzdFwtc2VjdGlvblwtbG1hXGZSIG9yIFxmQlwtXC1hZGp1c3RcLXNlY3Rpb25cLXZtYVxmUiBpcyB1c2VkLCBldmVuCitpZiB0aGUgbmFtZWQgc2VjdGlvbiBkb2VzIG5vdCBleGlzdC4KKy5JUCAiXGZCXC1cLXNldFwtc2VjdGlvblwtZmxhZ3NcZlIgXGZJc2VjdGlvblxmUlxmQj1cZlJcZklmbGFnc1xmUiIgNAorLklYIEl0ZW0gIi0tc2V0LXNlY3Rpb24tZmxhZ3Mgc2VjdGlvbj1mbGFncyIKK1NldCB0aGUgZmxhZ3MgZm9yIHRoZSBuYW1lZCBzZWN0aW9uLiAgVGhlIFxmSWZsYWdzXGZSIGFyZ3VtZW50IGlzIGEKK2NvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZmxhZyBuYW1lcy4gIFRoZSByZWNvZ25pemVkIG5hbWVzIGFyZQorXCZcZkJhbGxvY1xmUiwgXGZCY29udGVudHNcZlIsIFxmQmxvYWRcZlIsIFxmQm5vbG9hZFxmUiwKK1wmXGZCcmVhZG9ubHlcZlIsIFxmQmNvZGVcZlIsIFxmQmRhdGFcZlIsIFxmQnJvbVxmUiwgXGZCc2hhcmVcZlIsIGFuZAorXCZcZkJkZWJ1Z1xmUi4gIFlvdSBjYW4gc2V0IHRoZSBcZkJjb250ZW50c1xmUiBmbGFnIGZvciBhIHNlY3Rpb24gd2hpY2gKK2RvZXMgbm90IGhhdmUgY29udGVudHMsIGJ1dCBpdCBpcyBub3QgbWVhbmluZ2Z1bCB0byBjbGVhciB0aGUKK1wmXGZCY29udGVudHNcZlIgZmxhZyBvZiBhIHNlY3Rpb24gd2hpY2ggZG9lcyBoYXZlIGNvbnRlbnRzXCooLS1qdXN0IHJlbW92ZQordGhlIHNlY3Rpb24gaW5zdGVhZC4gIE5vdCBhbGwgZmxhZ3MgYXJlIG1lYW5pbmdmdWwgZm9yIGFsbCBvYmplY3QgZmlsZQorZm9ybWF0cy4KKy5JUCAiXGZCXC1cLWFkZFwtc2VjdGlvblxmUiBcZklzZWN0aW9ubmFtZVxmUlxmQj1cZlJcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tYWRkLXNlY3Rpb24gc2VjdGlvbm5hbWU9ZmlsZW5hbWUiCitBZGQgYSBuZXcgc2VjdGlvbiBuYW1lZCBcZklzZWN0aW9ubmFtZVxmUiB3aGlsZSBjb3B5aW5nIHRoZSBmaWxlLiAgVGhlCitjb250ZW50cyBvZiB0aGUgbmV3IHNlY3Rpb24gYXJlIHRha2VuIGZyb20gdGhlIGZpbGUgXGZJZmlsZW5hbWVcZlIuICBUaGUKK3NpemUgb2YgdGhlIHNlY3Rpb24gd2lsbCBiZSB0aGUgc2l6ZSBvZiB0aGUgZmlsZS4gIFRoaXMgb3B0aW9uIG9ubHkKK3dvcmtzIG9uIGZpbGUgZm9ybWF0cyB3aGljaCBjYW4gc3VwcG9ydCBzZWN0aW9ucyB3aXRoIGFyYml0cmFyeSBuYW1lcy4KKy5JUCAiXGZCXC1cLXJlbmFtZVwtc2VjdGlvblxmUiBcZklvbGRuYW1lXGZSXGZCPVxmUlxmSW5ld25hbWVcZlJcZkJbLFxmUlxmSWZsYWdzXGZSXGZCXVxmUiIgNAorLklYIEl0ZW0gIi0tcmVuYW1lLXNlY3Rpb24gb2xkbmFtZT1uZXduYW1lWyxmbGFnc10iCitSZW5hbWUgYSBzZWN0aW9uIGZyb20gXGZJb2xkbmFtZVxmUiB0byBcZkluZXduYW1lXGZSLCBvcHRpb25hbGx5CitjaGFuZ2luZyB0aGUgc2VjdGlvbidzIGZsYWdzIHRvIFxmSWZsYWdzXGZSIGluIHRoZSBwcm9jZXNzLiAgVGhpcyBoYXMKK3RoZSBhZHZhbnRhZ2Ugb3ZlciB1c25nIGEgbGlua2VyIHNjcmlwdCB0byBwZXJmb3JtIHRoZSByZW5hbWUgaW4gdGhhdAordGhlIG91dHB1dCBzdGF5cyBhcyBhbiBvYmplY3QgZmlsZSBhbmQgZG9lcyBub3QgYmVjb21lIGEgbGlua2VkCitleGVjdXRhYmxlLgorLlNwCitUaGlzIG9wdGlvbiBpcyBwYXJ0aWN1bGFybHkgaGVscGZ1bCB3aGVuIHRoZSBpbnB1dCBmb3JtYXQgaXMgYmluYXJ5LAorc2luY2UgdGhpcyB3aWxsIGFsd2F5cyBjcmVhdGUgYSBzZWN0aW9uIGNhbGxlZCAuZGF0YS4gIElmIGZvciBleGFtcGxlLAoreW91IHdhbnRlZCBpbnN0ZWFkIHRvIGNyZWF0ZSBhIHNlY3Rpb24gY2FsbGVkIC5yb2RhdGEgY29udGFpbmluZyBiaW5hcnkKK2RhdGEgeW91IGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZSB0byBhY2hpZXZlIGl0OgorLlNwCisuVmIgMworXCYgICAgICAgICAgb2JqY29weSBcLUkgYmluYXJ5IFwtTyA8b3V0cHV0X2Zvcm1hdD4gXC1CIDxhcmNoaXRlY3R1cmU+IFxlCitcJiAgICAgICAgICAgXC1cLXJlbmFtZVwtc2VjdGlvbiAuZGF0YT0ucm9kYXRhLGFsbG9jLGxvYWQscmVhZG9ubHksZGF0YSxjb250ZW50cyBcZQorXCYgICAgICAgICAgIDxpbnB1dF9iaW5hcnlfZmlsZT4gPG91dHB1dF9vYmplY3RfZmlsZT4KKy5WZQorLklQICJcZkJcLVwtbG9uZ1wtc2VjdGlvblwtbmFtZXMge2VuYWJsZSxkaXNhYmxlLGtlZXB9XGZSIiA0CisuSVggSXRlbSAiLS1sb25nLXNlY3Rpb24tbmFtZXMge2VuYWJsZSxkaXNhYmxlLGtlZXB9IgorQ29udHJvbHMgdGhlIGhhbmRsaW5nIG9mIGxvbmcgc2VjdGlvbiBuYW1lcyB3aGVuIHByb2Nlc3NpbmcgXGYoQ1dcKihDYENPRkZcKihDJ1xmUgorYW5kIFxmKENXXCooQ2BQRVwtQ09GRlwqKEMnXGZSIG9iamVjdCBmb3JtYXRzLiAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBcZkJrZWVwXGZSLAoraXMgdG8gcHJlc2VydmUgbG9uZyBzZWN0aW9uIG5hbWVzIGlmIGFueSBhcmUgcHJlc2VudCBpbiB0aGUgaW5wdXQgZmlsZS4KK1RoZSBcZkJlbmFibGVcZlIgYW5kIFxmQmRpc2FibGVcZlIgb3B0aW9ucyBmb3JjaWJseSBlbmFibGUgb3IgZGlzYWJsZQordGhlIHVzZSBvZiBsb25nIHNlY3Rpb24gbmFtZXMgaW4gdGhlIG91dHB1dCBvYmplY3Q7IHdoZW4gXGZCZGlzYWJsZVxmUgoraXMgaW4gZWZmZWN0LCBhbnkgbG9uZyBzZWN0aW9uIG5hbWVzIGluIHRoZSBpbnB1dCBvYmplY3Qgd2lsbCBiZSB0cnVuY2F0ZWQuCitUaGUgXGZCZW5hYmxlXGZSIG9wdGlvbiB3aWxsIG9ubHkgZW1pdCBsb25nIHNlY3Rpb24gbmFtZXMgaWYgYW55IGFyZQorcHJlc2VudCBpbiB0aGUgaW5wdXRzOyB0aGlzIGlzIG1vc3RseSB0aGUgc2FtZSBhcyBcZkJrZWVwXGZSLCBidXQgaXQKK2lzIGxlZnQgdW5kZWZpbmVkIHdoZXRoZXIgdGhlIFxmQmVuYWJsZVxmUiBvcHRpb24gbWlnaHQgZm9yY2UgdGhlCitjcmVhdGlvbiBvZiBhbiBlbXB0eSBzdHJpbmcgdGFibGUgaW4gdGhlIG91dHB1dCBmaWxlLgorLklQICJcZkJcLVwtY2hhbmdlXC1sZWFkaW5nXC1jaGFyXGZSIiA0CisuSVggSXRlbSAiLS1jaGFuZ2UtbGVhZGluZy1jaGFyIgorU29tZSBvYmplY3QgZmlsZSBmb3JtYXRzIHVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXQgdGhlIHN0YXJ0IG9mCitzeW1ib2xzLiAgVGhlIG1vc3QgY29tbW9uIHN1Y2ggY2hhcmFjdGVyIGlzIHVuZGVyc2NvcmUsIHdoaWNoIGNvbXBpbGVycworb2Z0ZW4gYWRkIGJlZm9yZSBldmVyeSBzeW1ib2wuICBUaGlzIG9wdGlvbiB0ZWxscyBcZkJvYmpjb3B5XGZSIHRvCitjaGFuZ2UgdGhlIGxlYWRpbmcgY2hhcmFjdGVyIG9mIGV2ZXJ5IHN5bWJvbCB3aGVuIGl0IGNvbnZlcnRzIGJldHdlZW4KK29iamVjdCBmaWxlIGZvcm1hdHMuICBJZiB0aGUgb2JqZWN0IGZpbGUgZm9ybWF0cyB1c2UgdGhlIHNhbWUgbGVhZGluZworY2hhcmFjdGVyLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LiAgT3RoZXJ3aXNlLCBpdCB3aWxsIGFkZCBhCitjaGFyYWN0ZXIsIG9yIHJlbW92ZSBhIGNoYXJhY3Rlciwgb3IgY2hhbmdlIGEgY2hhcmFjdGVyLCBhcworYXBwcm9wcmlhdGUuCisuSVAgIlxmQlwtXC1yZW1vdmVcLWxlYWRpbmdcLWNoYXJcZlIiIDQKKy5JWCBJdGVtICItLXJlbW92ZS1sZWFkaW5nLWNoYXIiCitJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgZ2xvYmFsIHN5bWJvbCBpcyBhIHNwZWNpYWwgc3ltYm9sIGxlYWRpbmcKK2NoYXJhY3RlciB1c2VkIGJ5IHRoZSBvYmplY3QgZmlsZSBmb3JtYXQsIHJlbW92ZSB0aGUgY2hhcmFjdGVyLiAgVGhlCittb3N0IGNvbW1vbiBzeW1ib2wgbGVhZGluZyBjaGFyYWN0ZXIgaXMgdW5kZXJzY29yZS4gIFRoaXMgb3B0aW9uIHdpbGwKK3JlbW92ZSBhIGxlYWRpbmcgdW5kZXJzY29yZSBmcm9tIGFsbCBnbG9iYWwgc3ltYm9scy4gIFRoaXMgY2FuIGJlIHVzZWZ1bAoraWYgeW91IHdhbnQgdG8gbGluayB0b2dldGhlciBvYmplY3RzIG9mIGRpZmZlcmVudCBmaWxlIGZvcm1hdHMgd2l0aAorZGlmZmVyZW50IGNvbnZlbnRpb25zIGZvciBzeW1ib2wgbmFtZXMuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tCitcJlxmQlwtXC1jaGFuZ2VcLWxlYWRpbmdcLWNoYXJcZlIgYmVjYXVzZSBpdCBhbHdheXMgY2hhbmdlcyB0aGUgc3ltYm9sIG5hbWUKK3doZW4gYXBwcm9wcmlhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIG9iamVjdCBmaWxlIGZvcm1hdCBvZiB0aGUgb3V0cHV0CitmaWxlLgorLklQICJcZkJcLVwtcmV2ZXJzZVwtYnl0ZXM9XGZSXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLS1yZXZlcnNlLWJ5dGVzPW51bSIKK1JldmVyc2UgdGhlIGJ5dGVzIGluIGEgc2VjdGlvbiB3aXRoIG91dHB1dCBjb250ZW50cy4gIEEgc2VjdGlvbiBsZW5ndGggbXVzdAorYmUgZXZlbmx5IGRpdmlzaWJsZSBieSB0aGUgdmFsdWUgZ2l2ZW4gaW4gb3JkZXIgZm9yIHRoZSBzd2FwIHRvIGJlIGFibGUgdG8KK3Rha2UgcGxhY2UuIFJldmVyc2luZyB0YWtlcyBwbGFjZSBiZWZvcmUgdGhlIGludGVybGVhdmluZyBpcyBwZXJmb3JtZWQuCisuU3AKK1RoaXMgb3B0aW9uIGlzIHVzZWQgdHlwaWNhbGx5IGluIGdlbmVyYXRpbmcgXHMtMVJPTVxzMCBpbWFnZXMgZm9yIHByb2JsZW1hdGljCit0YXJnZXQgc3lzdGVtcy4gIEZvciBleGFtcGxlLCBvbiBzb21lIHRhcmdldCBib2FyZHMsIHRoZSAzMlwtYml0IHdvcmRzCitmZXRjaGVkIGZyb20gOFwtYml0IFJPTXMgYXJlIHJlLWFzc2VtYmxlZCBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIKK3JlZ2FyZGxlc3Mgb2YgdGhlIFxzLTFDUFVcczAgYnl0ZSBvcmRlci4gIERlcGVuZGluZyBvbiB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwsIHRoZQorZW5kaWFubmVzcyBvZiB0aGUgXHMtMVJPTVxzMCBtYXkgbmVlZCB0byBiZSBtb2RpZmllZC4KKy5TcAorQ29uc2lkZXIgYSBzaW1wbGUgZmlsZSB3aXRoIGEgc2VjdGlvbiBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgZWlnaHQKK2J5dGVzOiAgXGYoQ1cxMjM0NTY3OFxmUi4KKy5TcAorVXNpbmcgXGZCXC1cLXJldmVyc2VcLWJ5dGVzPTJcZlIgZm9yIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgYnl0ZXMgaW4gdGhlCitvdXRwdXQgZmlsZSB3b3VsZCBiZSBvcmRlcmVkIFxmKENXMjE0MzY1ODdcZlIuCisuU3AKK1VzaW5nIFxmQlwtXC1yZXZlcnNlXC1ieXRlcz00XGZSIGZvciB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGJ5dGVzIGluIHRoZQorb3V0cHV0IGZpbGUgd291bGQgYmUgb3JkZXJlZCBcZihDVzQzMjE4NzY1XGZSLgorLlNwCitCeSB1c2luZyBcZkJcLVwtcmV2ZXJzZVwtYnl0ZXM9MlxmUiBmb3IgdGhlIGFib3ZlIGV4YW1wbGUsIGZvbGxvd2VkIGJ5CitcJlxmQlwtXC1yZXZlcnNlXC1ieXRlcz00XGZSIG9uIHRoZSBvdXRwdXQgZmlsZSwgdGhlIGJ5dGVzIGluIHRoZSBzZWNvbmQKK291dHB1dCBmaWxlIHdvdWxkIGJlIG9yZGVyZWQgXGYoQ1czNDEyNzg1NlxmUi4KKy5JUCAiXGZCXC1cLXNyZWNcLWxlbj1cZlJcZklpdmFsXGZSIiA0CisuSVggSXRlbSAiLS1zcmVjLWxlbj1pdmFsIgorTWVhbmluZ2Z1bCBvbmx5IGZvciBzcmVjIG91dHB1dC4gIFNldCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIFNyZWNvcmRzCitiZWluZyBwcm9kdWNlZCB0byBcZklpdmFsXGZSLiAgVGhpcyBsZW5ndGggY292ZXJzIGJvdGggYWRkcmVzcywgZGF0YSBhbmQKK2NyYyBmaWVsZHMuCisuSVAgIlxmQlwtXC1zcmVjXC1mb3JjZVMzXGZSIiA0CisuSVggSXRlbSAiLS1zcmVjLWZvcmNlUzMiCitNZWFuaW5nZnVsIG9ubHkgZm9yIHNyZWMgb3V0cHV0LiAgQXZvaWQgZ2VuZXJhdGlvbiBvZiBTMS9TMiByZWNvcmRzLAorY3JlYXRpbmcgUzNcLW9ubHkgcmVjb3JkIGZvcm1hdC4KKy5JUCAiXGZCXC1cLXJlZGVmaW5lXC1zeW1cZlIgXGZJb2xkXGZSXGZCPVxmUlxmSW5ld1xmUiIgNAorLklYIEl0ZW0gIi0tcmVkZWZpbmUtc3ltIG9sZD1uZXciCitDaGFuZ2UgdGhlIG5hbWUgb2YgYSBzeW1ib2wgXGZJb2xkXGZSLCB0byBcZkluZXdcZlIuICBUaGlzIGNhbiBiZSB1c2VmdWwKK3doZW4gb25lIGlzIHRyeWluZyBsaW5rIHR3byB0aGluZ3MgdG9nZXRoZXIgZm9yIHdoaWNoIHlvdSBoYXZlIG5vCitzb3VyY2UsIGFuZCB0aGVyZSBhcmUgbmFtZSBjb2xsaXNpb25zLgorLklQICJcZkJcLVwtcmVkZWZpbmVcLXN5bXM9XGZSXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLXJlZGVmaW5lLXN5bXM9ZmlsZW5hbWUiCitBcHBseSBcZkJcLVwtcmVkZWZpbmVcLXN5bVxmUiB0byBlYWNoIHN5bWJvbCBwYWlyICJcZklvbGRcZlIgXGZJbmV3XGZSIgorbGlzdGVkIGluIHRoZSBmaWxlIFxmSWZpbGVuYW1lXGZSLiAgXGZJZmlsZW5hbWVcZlIgaXMgc2ltcGx5IGEgZmxhdCBmaWxlLAord2l0aCBvbmUgc3ltYm9sIHBhaXIgcGVyIGxpbmUuICBMaW5lIGNvbW1lbnRzIG1heSBiZSBpbnRyb2R1Y2VkIGJ5IHRoZSBoYXNoCitjaGFyYWN0ZXIuICBUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisuSVAgIlxmQlwtXC13ZWFrZW5cZlIiIDQKKy5JWCBJdGVtICItLXdlYWtlbiIKK0NoYW5nZSBhbGwgZ2xvYmFsIHN5bWJvbHMgaW4gdGhlIGZpbGUgdG8gYmUgd2Vhay4gIFRoaXMgY2FuIGJlIHVzZWZ1bAord2hlbiBidWlsZGluZyBhbiBvYmplY3Qgd2hpY2ggd2lsbCBiZSBsaW5rZWQgYWdhaW5zdCBvdGhlciBvYmplY3RzIHVzaW5nCit0aGUgXGZCXC1SXGZSIG9wdGlvbiB0byB0aGUgbGlua2VyLiAgVGhpcyBvcHRpb24gaXMgb25seSBlZmZlY3RpdmUgd2hlbgordXNpbmcgYW4gb2JqZWN0IGZpbGUgZm9ybWF0IHdoaWNoIHN1cHBvcnRzIHdlYWsgc3ltYm9scy4KKy5JUCAiXGZCXC1cLWtlZXBcLXN5bWJvbHM9XGZSXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWtlZXAtc3ltYm9scz1maWxlbmFtZSIKK0FwcGx5IFxmQlwtXC1rZWVwXC1zeW1ib2xcZlIgb3B0aW9uIHRvIGVhY2ggc3ltYm9sIGxpc3RlZCBpbiB0aGUgZmlsZQorXCZcZklmaWxlbmFtZVxmUi4gIFxmSWZpbGVuYW1lXGZSIGlzIHNpbXBseSBhIGZsYXQgZmlsZSwgd2l0aCBvbmUgc3ltYm9sCituYW1lIHBlciBsaW5lLiAgTGluZSBjb21tZW50cyBtYXkgYmUgaW50cm9kdWNlZCBieSB0aGUgaGFzaCBjaGFyYWN0ZXIuCitUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisuSVAgIlxmQlwtXC1zdHJpcFwtc3ltYm9scz1cZlJcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtc3ltYm9scz1maWxlbmFtZSIKK0FwcGx5IFxmQlwtXC1zdHJpcFwtc3ltYm9sXGZSIG9wdGlvbiB0byBlYWNoIHN5bWJvbCBsaXN0ZWQgaW4gdGhlIGZpbGUKK1wmXGZJZmlsZW5hbWVcZlIuICBcZklmaWxlbmFtZVxmUiBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGggb25lIHN5bWJvbAorbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2ggY2hhcmFjdGVyLgorVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgorLklQICJcZkJcLVwtc3RyaXBcLXVubmVlZGVkXC1zeW1ib2xzPVxmUlxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1zdHJpcC11bm5lZWRlZC1zeW1ib2xzPWZpbGVuYW1lIgorQXBwbHkgXGZCXC1cLXN0cmlwXC11bm5lZWRlZFwtc3ltYm9sXGZSIG9wdGlvbiB0byBlYWNoIHN5bWJvbCBsaXN0ZWQgaW4KK3RoZSBmaWxlIFxmSWZpbGVuYW1lXGZSLiAgXGZJZmlsZW5hbWVcZlIgaXMgc2ltcGx5IGEgZmxhdCBmaWxlLCB3aXRoIG9uZQorc3ltYm9sIG5hbWUgcGVyIGxpbmUuICBMaW5lIGNvbW1lbnRzIG1heSBiZSBpbnRyb2R1Y2VkIGJ5IHRoZSBoYXNoCitjaGFyYWN0ZXIuICBUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisuSVAgIlxmQlwtXC1rZWVwXC1nbG9iYWxcLXN5bWJvbHM9XGZSXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWtlZXAtZ2xvYmFsLXN5bWJvbHM9ZmlsZW5hbWUiCitBcHBseSBcZkJcLVwta2VlcFwtZ2xvYmFsXC1zeW1ib2xcZlIgb3B0aW9uIHRvIGVhY2ggc3ltYm9sIGxpc3RlZCBpbiB0aGUKK2ZpbGUgXGZJZmlsZW5hbWVcZlIuICBcZklmaWxlbmFtZVxmUiBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGggb25lCitzeW1ib2wgbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2gKK2NoYXJhY3Rlci4gIFRoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKy5JUCAiXGZCXC1cLWxvY2FsaXplXC1zeW1ib2xzPVxmUlxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1sb2NhbGl6ZS1zeW1ib2xzPWZpbGVuYW1lIgorQXBwbHkgXGZCXC1cLWxvY2FsaXplXC1zeW1ib2xcZlIgb3B0aW9uIHRvIGVhY2ggc3ltYm9sIGxpc3RlZCBpbiB0aGUgZmlsZQorXCZcZklmaWxlbmFtZVxmUi4gIFxmSWZpbGVuYW1lXGZSIGlzIHNpbXBseSBhIGZsYXQgZmlsZSwgd2l0aCBvbmUgc3ltYm9sCituYW1lIHBlciBsaW5lLiAgTGluZSBjb21tZW50cyBtYXkgYmUgaW50cm9kdWNlZCBieSB0aGUgaGFzaCBjaGFyYWN0ZXIuCitUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuCisuSVAgIlxmQlwtXC1nbG9iYWxpemVcLXN5bWJvbHM9XGZSXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLWdsb2JhbGl6ZS1zeW1ib2xzPWZpbGVuYW1lIgorQXBwbHkgXGZCXC1cLWdsb2JhbGl6ZVwtc3ltYm9sXGZSIG9wdGlvbiB0byBlYWNoIHN5bWJvbCBsaXN0ZWQgaW4gdGhlIGZpbGUKK1wmXGZJZmlsZW5hbWVcZlIuICBcZklmaWxlbmFtZVxmUiBpcyBzaW1wbHkgYSBmbGF0IGZpbGUsIHdpdGggb25lIHN5bWJvbAorbmFtZSBwZXIgbGluZS4gIExpbmUgY29tbWVudHMgbWF5IGJlIGludHJvZHVjZWQgYnkgdGhlIGhhc2ggY2hhcmFjdGVyLgorVGhpcyBvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLgorLklQICJcZkJcLVwtd2Vha2VuXC1zeW1ib2xzPVxmUlxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLS13ZWFrZW4tc3ltYm9scz1maWxlbmFtZSIKK0FwcGx5IFxmQlwtXC13ZWFrZW5cLXN5bWJvbFxmUiBvcHRpb24gdG8gZWFjaCBzeW1ib2wgbGlzdGVkIGluIHRoZSBmaWxlCitcJlxmSWZpbGVuYW1lXGZSLiAgXGZJZmlsZW5hbWVcZlIgaXMgc2ltcGx5IGEgZmxhdCBmaWxlLCB3aXRoIG9uZSBzeW1ib2wKK25hbWUgcGVyIGxpbmUuICBMaW5lIGNvbW1lbnRzIG1heSBiZSBpbnRyb2R1Y2VkIGJ5IHRoZSBoYXNoIGNoYXJhY3Rlci4KK1RoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKy5JUCAiXGZCXC1cLWFsdFwtbWFjaGluZVwtY29kZT1cZlJcZklpbmRleFxmUiIgNAorLklYIEl0ZW0gIi0tYWx0LW1hY2hpbmUtY29kZT1pbmRleCIKK0lmIHRoZSBvdXRwdXQgYXJjaGl0ZWN0dXJlIGhhcyBhbHRlcm5hdGUgbWFjaGluZSBjb2RlcywgdXNlIHRoZQorXCZcZklpbmRleFxmUnRoIGNvZGUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmUuICBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlCithIG1hY2hpbmUgaXMgYXNzaWduZWQgYW4gb2ZmaWNpYWwgY29kZSBhbmQgdGhlIHRvb2wtY2hhaW4gYWRvcHRzIHRoZQorbmV3IGNvZGUsIGJ1dCBvdGhlciBhcHBsaWNhdGlvbnMgc3RpbGwgZGVwZW5kIG9uIHRoZSBvcmlnaW5hbCBjb2RlCitiZWluZyB1c2VkLiAgRm9yIFxzLTFFTEZcczAgYmFzZWQgYXJjaGl0ZWN0dXJlcyBpZiB0aGUgXGZJaW5kZXhcZlIKK2FsdGVybmF0aXZlIGRvZXMgbm90IGV4aXN0IHRoZW4gdGhlIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYW4gYWJzb2x1dGUKK251bWJlciB0byBiZSBzdG9yZWQgaW4gdGhlIGVfbWFjaGluZSBmaWVsZCBvZiB0aGUgXHMtMUVMRlxzMCBoZWFkZXIuCisuSVAgIlxmQlwtXC13cml0YWJsZVwtdGV4dFxmUiIgNAorLklYIEl0ZW0gIi0td3JpdGFibGUtdGV4dCIKK01hcmsgdGhlIG91dHB1dCB0ZXh0IGFzIHdyaXRhYmxlLiAgVGhpcyBvcHRpb24gaXNuJ3QgbWVhbmluZ2Z1bCBmb3IgYWxsCitvYmplY3QgZmlsZSBmb3JtYXRzLgorLklQICJcZkJcLVwtcmVhZG9ubHlcLXRleHRcZlIiIDQKKy5JWCBJdGVtICItLXJlYWRvbmx5LXRleHQiCitNYWtlIHRoZSBvdXRwdXQgdGV4dCB3cml0ZSBwcm90ZWN0ZWQuICBUaGlzIG9wdGlvbiBpc24ndCBtZWFuaW5nZnVsIGZvciBhbGwKK29iamVjdCBmaWxlIGZvcm1hdHMuCisuSVAgIlxmQlwtXC1wdXJlXGZSIiA0CisuSVggSXRlbSAiLS1wdXJlIgorTWFyayB0aGUgb3V0cHV0IGZpbGUgYXMgZGVtYW5kIHBhZ2VkLiAgVGhpcyBvcHRpb24gaXNuJ3QgbWVhbmluZ2Z1bCBmb3IgYWxsCitvYmplY3QgZmlsZSBmb3JtYXRzLgorLklQICJcZkJcLVwtaW1wdXJlXGZSIiA0CisuSVggSXRlbSAiLS1pbXB1cmUiCitNYXJrIHRoZSBvdXRwdXQgZmlsZSBhcyBpbXB1cmUuICBUaGlzIG9wdGlvbiBpc24ndCBtZWFuaW5nZnVsIGZvciBhbGwKK29iamVjdCBmaWxlIGZvcm1hdHMuCisuSVAgIlxmQlwtXC1wcmVmaXhcLXN5bWJvbHM9XGZSXGZJc3RyaW5nXGZSIiA0CisuSVggSXRlbSAiLS1wcmVmaXgtc3ltYm9scz1zdHJpbmciCitQcmVmaXggYWxsIHN5bWJvbHMgaW4gdGhlIG91dHB1dCBmaWxlIHdpdGggXGZJc3RyaW5nXGZSLgorLklQICJcZkJcLVwtcHJlZml4XC1zZWN0aW9ucz1cZlJcZklzdHJpbmdcZlIiIDQKKy5JWCBJdGVtICItLXByZWZpeC1zZWN0aW9ucz1zdHJpbmciCitQcmVmaXggYWxsIHNlY3Rpb24gbmFtZXMgaW4gdGhlIG91dHB1dCBmaWxlIHdpdGggXGZJc3RyaW5nXGZSLgorLklQICJcZkJcLVwtcHJlZml4XC1hbGxvY1wtc2VjdGlvbnM9XGZSXGZJc3RyaW5nXGZSIiA0CisuSVggSXRlbSAiLS1wcmVmaXgtYWxsb2Mtc2VjdGlvbnM9c3RyaW5nIgorUHJlZml4IGFsbCB0aGUgbmFtZXMgb2YgYWxsIGFsbG9jYXRlZCBzZWN0aW9ucyBpbiB0aGUgb3V0cHV0IGZpbGUgd2l0aAorXCZcZklzdHJpbmdcZlIuCisuSVAgIlxmQlwtXC1hZGRcLWdudVwtZGVidWdsaW5rPVxmUlxmSXBhdGgtdG8tZmlsZVxmUiIgNAorLklYIEl0ZW0gIi0tYWRkLWdudS1kZWJ1Z2xpbms9cGF0aC10by1maWxlIgorQ3JlYXRlcyBhIC5nbnVfZGVidWdsaW5rIHNlY3Rpb24gd2hpY2ggY29udGFpbnMgYSByZWZlcmVuY2UgdG8gXGZJcGF0aC10by1maWxlXGZSCithbmQgYWRkcyBpdCB0byB0aGUgb3V0cHV0IGZpbGUuCisuSVAgIlxmQlwtXC1rZWVwXC1maWxlXC1zeW1ib2xzXGZSIiA0CisuSVggSXRlbSAiLS1rZWVwLWZpbGUtc3ltYm9scyIKK1doZW4gc3RyaXBwaW5nIGEgZmlsZSwgcGVyaGFwcyB3aXRoIFxmQlwtXC1zdHJpcFwtZGVidWdcZlIgb3IKK1wmXGZCXC1cLXN0cmlwXC11bm5lZWRlZFxmUiwgcmV0YWluIGFueSBzeW1ib2xzIHNwZWNpZnlpbmcgc291cmNlIGZpbGUgbmFtZXMsCit3aGljaCB3b3VsZCBvdGhlcndpc2UgZ2V0IHN0cmlwcGVkLgorLklQICJcZkJcLVwtb25seVwta2VlcFwtZGVidWdcZlIiIDQKKy5JWCBJdGVtICItLW9ubHkta2VlcC1kZWJ1ZyIKK1N0cmlwIGEgZmlsZSwgcmVtb3ZpbmcgY29udGVudHMgb2YgYW55IHNlY3Rpb25zIHRoYXQgd291bGQgbm90IGJlCitzdHJpcHBlZCBieSBcZkJcLVwtc3RyaXBcLWRlYnVnXGZSIGFuZCBsZWF2aW5nIHRoZSBkZWJ1Z2dpbmcgc2VjdGlvbnMKK2ludGFjdC4gIEluIFxzLTFFTEZcczAgZmlsZXMsIHRoaXMgcHJlc2VydmVzIGFsbCBub3RlIHNlY3Rpb25zIGluIHRoZSBvdXRwdXQuCisuU3AKK1RoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGlzIG9wdGlvbiB3aWxsIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorXCZcZkJcLVwtYWRkXC1nbnVcLWRlYnVnbGlua1xmUiB0byBjcmVhdGUgYSB0d28gcGFydCBleGVjdXRhYmxlLiAgT25lIGEKK3N0cmlwcGVkIGJpbmFyeSB3aGljaCB3aWxsIG9jY3VweSBsZXNzIHNwYWNlIGluIFxzLTFSQU1cczAgYW5kIGluIGEKK2Rpc3RyaWJ1dGlvbiBhbmQgdGhlIHNlY29uZCBhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmaWxlIHdoaWNoIGlzIG9ubHkKK25lZWRlZCBpZiBkZWJ1Z2dpbmcgYWJpbGl0aWVzIGFyZSByZXF1aXJlZC4gIFRoZSBzdWdnZXN0ZWQgcHJvY2VkdXJlCit0byBjcmVhdGUgdGhlc2UgZmlsZXMgaXMgYXMgZm9sbG93czoKKy5SUyA0CisuSVAgIjEuPExpbmsgdGhlIGV4ZWN1dGFibGUgYXMgbm9ybWFsLiAgQXNzdW1pbmcgdGhhdCBpcyBpcyBjYWxsZWQ+IiA0CisuSVggSXRlbSAiMS48TGluayB0aGUgZXhlY3V0YWJsZSBhcyBub3JtYWwuICBBc3N1bWluZyB0aGF0IGlzIGlzIGNhbGxlZD4iCitcJlxmKENXXCooQ2Bmb29cKihDJ1xmUiB0aGVuLi4uCisuaWUgbiAuSVAgIjEuPFJ1biAiIm9iamNvcHkgXC1cLW9ubHlcLWtlZXBcLWRlYnVnIGZvbyBmb28uZGJnIiIgdG8+IiA0CisuZWwgLklQICIxLjxSdW4gXGYoQ1dvYmpjb3B5IFwtXC1vbmx5XC1rZWVwXC1kZWJ1ZyBmb28gZm9vLmRiZ1xmUiB0bz4iIDQKKy5JWCBJdGVtICIxLjxSdW4gb2JqY29weSAtLW9ubHkta2VlcC1kZWJ1ZyBmb28gZm9vLmRiZyB0bz4iCitjcmVhdGUgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlYnVnZ2luZyBpbmZvLgorLmllIG4gLklQICIxLjxSdW4gIiJvYmpjb3B5IFwtXC1zdHJpcFwtZGVidWcgZm9vIiIgdG8gY3JlYXRlIGE+IiA0CisuZWwgLklQICIxLjxSdW4gXGYoQ1dvYmpjb3B5IFwtXC1zdHJpcFwtZGVidWcgZm9vXGZSIHRvIGNyZWF0ZSBhPiIgNAorLklYIEl0ZW0gIjEuPFJ1biBvYmpjb3B5IC0tc3RyaXAtZGVidWcgZm9vIHRvIGNyZWF0ZSBhPiIKK3N0cmlwcGVkIGV4ZWN1dGFibGUuCisuaWUgbiAuSVAgIjEuPFJ1biAiIm9iamNvcHkgXC1cLWFkZFwtZ251XC1kZWJ1Z2xpbms9Zm9vLmRiZyBmb28iIj4iIDQKKy5lbCAuSVAgIjEuPFJ1biBcZihDV29iamNvcHkgXC1cLWFkZFwtZ251XC1kZWJ1Z2xpbms9Zm9vLmRiZyBmb29cZlI+IiA0CisuSVggSXRlbSAiMS48UnVuIG9iamNvcHkgLS1hZGQtZ251LWRlYnVnbGluaz1mb28uZGJnIGZvbz4iCit0byBhZGQgYSBsaW5rIHRvIHRoZSBkZWJ1Z2dpbmcgaW5mbyBpbnRvIHRoZSBzdHJpcHBlZCBleGVjdXRhYmxlLgorLlJFCisuUlMgNAorLlNwCitOb3RlXC1cLVwtdGhlIGNob2ljZSBvZiBcZihDV1wqKENgLmRiZ1wqKEMnXGZSIGFzIGFuIGV4dGVuc2lvbiBmb3IgdGhlIGRlYnVnIGluZm8KK2ZpbGUgaXMgYXJiaXRyYXJ5LiAgQWxzbyB0aGUgXGYoQ1dcKihDYFwtXC1vbmx5XC1rZWVwXC1kZWJ1Z1wqKEMnXGZSIHN0ZXAgaXMKK29wdGlvbmFsLiAgWW91IGNvdWxkIGluc3RlYWQgZG8gdGhpczoKKy5JUCAiMS48TGluayB0aGUgZXhlY3V0YWJsZSBhcyBub3JtYWwuPiIgNAorLklYIEl0ZW0gIjEuPExpbmsgdGhlIGV4ZWN1dGFibGUgYXMgbm9ybWFsLj4iCisuUEQgMAorLmllIG4gLklQICIxLjxDb3B5ICIiZm9vIiIgdG8gICIiZm9vLmZ1bGwiIj4iIDQKKy5lbCAuSVAgIjEuPENvcHkgXGYoQ1dmb29cZlIgdG8gIFxmKENXZm9vLmZ1bGxcZlI+IiA0CisuSVggSXRlbSAiMS48Q29weSBmb28gdG8gIGZvby5mdWxsPiIKKy5pZSBuIC5JUCAiMS48UnVuICIib2JqY29weSBcLVwtc3RyaXBcLWRlYnVnIGZvbyIiPiIgNAorLmVsIC5JUCAiMS48UnVuIFxmKENXb2JqY29weSBcLVwtc3RyaXBcLWRlYnVnIGZvb1xmUj4iIDQKKy5JWCBJdGVtICIxLjxSdW4gb2JqY29weSAtLXN0cmlwLWRlYnVnIGZvbz4iCisuaWUgbiAuSVAgIjEuPFJ1biAiIm9iamNvcHkgXC1cLWFkZFwtZ251XC1kZWJ1Z2xpbms9Zm9vLmZ1bGwgZm9vIiI+IiA0CisuZWwgLklQICIxLjxSdW4gXGYoQ1dvYmpjb3B5IFwtXC1hZGRcLWdudVwtZGVidWdsaW5rPWZvby5mdWxsIGZvb1xmUj4iIDQKKy5JWCBJdGVtICIxLjxSdW4gb2JqY29weSAtLWFkZC1nbnUtZGVidWdsaW5rPWZvby5mdWxsIGZvbz4iCisuUkUKKy5SUyA0CisuUEQKKy5TcAoraS5lLiwgdGhlIGZpbGUgcG9pbnRlZCB0byBieSB0aGUgXGZCXC1cLWFkZFwtZ251XC1kZWJ1Z2xpbmtcZlIgY2FuIGJlIHRoZQorZnVsbCBleGVjdXRhYmxlLiAgSXQgZG9lcyBub3QgaGF2ZSB0byBiZSBhIGZpbGUgY3JlYXRlZCBieSB0aGUKK1wmXGZCXC1cLW9ubHlcLWtlZXBcLWRlYnVnXGZSIHN3aXRjaC4KKy5TcAorTm90ZVwtXC1cLXRoaXMgc3dpdGNoIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHVzZSBvbiBmdWxseSBsaW5rZWQgZmlsZXMuICBJdAorZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UgaXQgb24gb2JqZWN0IGZpbGVzIHdoZXJlIHRoZSBkZWJ1Z2dpbmcKK2luZm9ybWF0aW9uIG1heSBiZSBpbmNvbXBsZXRlLiAgQmVzaWRlcyB0aGUgZ251X2RlYnVnbGluayBmZWF0dXJlCitjdXJyZW50bHkgb25seSBzdXBwb3J0cyB0aGUgcHJlc2VuY2Ugb2Ygb25lIGZpbGVuYW1lIGNvbnRhaW5pbmcKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiwgbm90IG11bHRpcGxlIGZpbGVuYW1lcyBvbiBhIG9uZS1wZXItb2JqZWN0LWZpbGUKK2Jhc2lzLgorLlJFCisuSVAgIlxmQlwtXC1zdHJpcFwtZHdvXGZSIiA0CisuSVggSXRlbSAiLS1zdHJpcC1kd28iCitSZW1vdmUgdGhlIGNvbnRlbnRzIG9mIGFsbCBccy0xRFdBUkZcczAgLmR3byBzZWN0aW9ucywgbGVhdmluZyB0aGUKK3JlbWFpbmluZyBkZWJ1Z2dpbmcgc2VjdGlvbnMgYW5kIGFsbCBzeW1ib2xzIGludGFjdC4KK1RoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgYnkgdGhlIGNvbXBpbGVyIGFzIHBhcnQgb2YKK3RoZSBcZkJcLWdzcGxpdFwtZHdhcmZcZlIgb3B0aW9uLCB3aGljaCBzcGxpdHMgZGVidWcgaW5mb3JtYXRpb24KK2JldHdlZW4gdGhlIC5vIGZpbGUgYW5kIGEgc2VwYXJhdGUgLmR3byBmaWxlLiAgVGhlIGNvbXBpbGVyCitnZW5lcmF0ZXMgYWxsIGRlYnVnIGluZm9ybWF0aW9uIGluIHRoZSBzYW1lIGZpbGUsIHRoZW4gdXNlcwordGhlIFxmQlwtXC1leHRyYWN0XC1kd29cZlIgb3B0aW9uIHRvIGNvcHkgdGhlIC5kd28gc2VjdGlvbnMgdG8KK3RoZSAuZHdvIGZpbGUsIHRoZW4gdGhlIFxmQlwtXC1zdHJpcFwtZHdvXGZSIG9wdGlvbiB0byByZW1vdmUKK3Rob3NlIHNlY3Rpb25zIGZyb20gdGhlIG9yaWdpbmFsIC5vIGZpbGUuCisuSVAgIlxmQlwtXC1leHRyYWN0XC1kd29cZlIiIDQKKy5JWCBJdGVtICItLWV4dHJhY3QtZHdvIgorRXh0cmFjdCB0aGUgY29udGVudHMgb2YgYWxsIFxzLTFEV0FSRlxzMCAuZHdvIHNlY3Rpb25zLiAgU2VlIHRoZQorXCZcZkJcLVwtc3RyaXBcLWR3b1xmUiBvcHRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuSVAgIlxmQlwtXC1maWxlXC1hbGlnbm1lbnRcZlIgXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLS1maWxlLWFsaWdubWVudCBudW0iCitTcGVjaWZ5IHRoZSBmaWxlIGFsaWdubWVudC4gIFNlY3Rpb25zIGluIHRoZSBmaWxlIHdpbGwgYWx3YXlzIGJlZ2luIGF0CitmaWxlIG9mZnNldHMgd2hpY2ggYXJlIG11bHRpcGxlcyBvZiB0aGlzIG51bWJlci4gIFRoaXMgZGVmYXVsdHMgdG8KKzUxMi4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBccy0xUEVcczAgdGFyZ2V0cy5dCisuSVAgIlxmQlwtXC1oZWFwXGZSIFxmSXJlc2VydmVcZlIiIDQKKy5JWCBJdGVtICItLWhlYXAgcmVzZXJ2ZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1oZWFwXGZSIFxmSXJlc2VydmVcZlJcZkIsXGZSXGZJY29tbWl0XGZSIiA0CisuSVggSXRlbSAiLS1oZWFwIHJlc2VydmUsY29tbWl0IgorLlBECitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgbWVtb3J5IHRvIHJlc2VydmUgKGFuZCBvcHRpb25hbGx5IGNvbW1pdCkKK3RvIGJlIHVzZWQgYXMgaGVhcCBmb3IgdGhpcyBwcm9ncmFtLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIFxzLTFQRVxzMCB0YXJnZXRzLl0KKy5JUCAiXGZCXC1cLWltYWdlXC1iYXNlXGZSIFxmSXZhbHVlXGZSIiA0CisuSVggSXRlbSAiLS1pbWFnZS1iYXNlIHZhbHVlIgorVXNlIFxmSXZhbHVlXGZSIGFzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgeW91ciBwcm9ncmFtIG9yIGRsbC4gIFRoaXMgaXMKK3RoZSBsb3dlc3QgbWVtb3J5IGxvY2F0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4geW91ciBwcm9ncmFtIG9yIGRsbAoraXMgbG9hZGVkLiAgVG8gcmVkdWNlIHRoZSBuZWVkIHRvIHJlbG9jYXRlIGFuZCBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mCit5b3VyIGRsbHMsIGVhY2ggc2hvdWxkIGhhdmUgYSB1bmlxdWUgYmFzZSBhZGRyZXNzIGFuZCBub3Qgb3ZlcmxhcCBhbnkKK290aGVyIGRsbHMuICBUaGUgZGVmYXVsdCBpcyAweDQwMDAwMCBmb3IgZXhlY3V0YWJsZXMsIGFuZCAweDEwMDAwMDAwCitmb3IgZGxscy4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBccy0xUEVcczAgdGFyZ2V0cy5dCisuSVAgIlxmQlwtXC1zZWN0aW9uXC1hbGlnbm1lbnRcZlIgXGZJbnVtXGZSIiA0CisuSVggSXRlbSAiLS1zZWN0aW9uLWFsaWdubWVudCBudW0iCitTZXRzIHRoZSBzZWN0aW9uIGFsaWdubWVudC4gIFNlY3Rpb25zIGluIG1lbW9yeSB3aWxsIGFsd2F5cyBiZWdpbiBhdAorYWRkcmVzc2VzIHdoaWNoIGFyZSBhIG11bHRpcGxlIG9mIHRoaXMgbnVtYmVyLiAgRGVmYXVsdHMgdG8gMHgxMDAwLgorW1RoaXMgb3B0aW9uIGlzIHNwZWNpZmljIHRvIFxzLTFQRVxzMCB0YXJnZXRzLl0KKy5JUCAiXGZCXC1cLXN0YWNrXGZSIFxmSXJlc2VydmVcZlIiIDQKKy5JWCBJdGVtICItLXN0YWNrIHJlc2VydmUiCisuUEQgMAorLklQICJcZkJcLVwtc3RhY2tcZlIgXGZJcmVzZXJ2ZVxmUlxmQixcZlJcZkljb21taXRcZlIiIDQKKy5JWCBJdGVtICItLXN0YWNrIHJlc2VydmUsY29tbWl0IgorLlBECitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgbWVtb3J5IHRvIHJlc2VydmUgKGFuZCBvcHRpb25hbGx5IGNvbW1pdCkKK3RvIGJlIHVzZWQgYXMgc3RhY2sgZm9yIHRoaXMgcHJvZ3JhbS4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBccy0xUEVcczAgdGFyZ2V0cy5dCisuSVAgIlxmQlwtXC1zdWJzeXN0ZW1cZlIgXGZJd2hpY2hcZlIiIDQKKy5JWCBJdGVtICItLXN1YnN5c3RlbSB3aGljaCIKKy5QRCAwCisuSVAgIlxmQlwtXC1zdWJzeXN0ZW1cZlIgXGZJd2hpY2hcZlJcZkI6XGZSXGZJbWFqb3JcZlIiIDQKKy5JWCBJdGVtICItLXN1YnN5c3RlbSB3aGljaDptYWpvciIKKy5JUCAiXGZCXC1cLXN1YnN5c3RlbVxmUiBcZkl3aGljaFxmUlxmQjpcZlJcZkltYWpvclxmUlxmQi5cZlJcZkltaW5vclxmUiIgNAorLklYIEl0ZW0gIi0tc3Vic3lzdGVtIHdoaWNoOm1ham9yLm1pbm9yIgorLlBECitTcGVjaWZpZXMgdGhlIHN1YnN5c3RlbSB1bmRlciB3aGljaCB5b3VyIHByb2dyYW0gd2lsbCBleGVjdXRlLiAgVGhlCitsZWdhbCB2YWx1ZXMgZm9yIFxmSXdoaWNoXGZSIGFyZSBcZihDV1wqKENgbmF0aXZlXCooQydcZlIsIFxmKENXXCooQ2B3aW5kb3dzXCooQydcZlIsCitcJlxmKENXXCooQ2Bjb25zb2xlXCooQydcZlIsIFxmKENXXCooQ2Bwb3NpeFwqKEMnXGZSLCBcZihDV1wqKENgZWZpXC1hcHBcKihDJ1xmUiwgXGYoQ1dcKihDYGVmaVwtYnNkXCooQydcZlIsCitcJlxmKENXXCooQ2BlZmlcLXJ0ZFwqKEMnXGZSLCBcZihDV1wqKENgc2FsXC1ydGRcKihDJ1xmUiwgYW5kIFxmKENXXCooQ2B4Ym94XCooQydcZlIuICBZb3UgbWF5IG9wdGlvbmFsbHkgc2V0Cit0aGUgc3Vic3lzdGVtIHZlcnNpb24gYWxzby4gIE51bWVyaWMgdmFsdWVzIGFyZSBhbHNvIGFjY2VwdGVkIGZvcgorXCZcZkl3aGljaFxmUi4KK1tUaGlzIG9wdGlvbiBpcyBzcGVjaWZpYyB0byBccy0xUEVcczAgdGFyZ2V0cy5dCisuSVAgIlxmQlwtXC1leHRyYWN0XC1zeW1ib2xcZlIiIDQKKy5JWCBJdGVtICItLWV4dHJhY3Qtc3ltYm9sIgorS2VlcCB0aGUgZmlsZSdzIHNlY3Rpb24gZmxhZ3MgYW5kIHN5bWJvbHMgYnV0IHJlbW92ZSBhbGwgc2VjdGlvbiBkYXRhLgorU3BlY2lmaWNhbGx5LCB0aGUgb3B0aW9uOgorLlJTIDQKKy5JUCAiKjxyZW1vdmVzIHRoZSBjb250ZW50cyBvZiBhbGwgc2VjdGlvbnM7PiIgNAorLklYIEl0ZW0gIio8cmVtb3ZlcyB0aGUgY29udGVudHMgb2YgYWxsIHNlY3Rpb25zOz4iCisuUEQgMAorLklQICIqPHNldHMgdGhlIHNpemUgb2YgZXZlcnkgc2VjdGlvbiB0byB6ZXJvOyBhbmQ+IiA0CisuSVggSXRlbSAiKjxzZXRzIHRoZSBzaXplIG9mIGV2ZXJ5IHNlY3Rpb24gdG8gemVybzsgYW5kPiIKKy5JUCAiKjxzZXRzIHRoZSBmaWxlJ3Mgc3RhcnQgYWRkcmVzcyB0byB6ZXJvLj4iIDQKKy5JWCBJdGVtICIqPHNldHMgdGhlIGZpbGUncyBzdGFydCBhZGRyZXNzIHRvIHplcm8uPiIKKy5SRQorLlJTIDQKKy5QRAorLlNwCitUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGJ1aWxkIGEgXGZJLnN5bVxmUiBmaWxlIGZvciBhIFZ4V29ya3Mga2VybmVsLgorSXQgY2FuIGFsc28gYmUgYSB1c2VmdWwgd2F5IG9mIHJlZHVjaW5nIHRoZSBzaXplIG9mIGEgXGZCXC1cLWp1c3RcLXN5bWJvbHNcZlIKK2xpbmtlciBpbnB1dCBmaWxlLgorLlJFCisuSVAgIlxmQlwtXC1jb21wcmVzc1wtZGVidWdcLXNlY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLS1jb21wcmVzcy1kZWJ1Zy1zZWN0aW9ucyIKK0NvbXByZXNzIFxzLTFEV0FSRlxzMCBkZWJ1ZyBzZWN0aW9ucyB1c2luZyB6bGliLgorLklQICJcZkJcLVwtZGVjb21wcmVzc1wtZGVidWdcLXNlY3Rpb25zXGZSIiA0CisuSVggSXRlbSAiLS1kZWNvbXByZXNzLWRlYnVnLXNlY3Rpb25zIgorRGVjb21wcmVzcyBccy0xRFdBUkZcczAgZGVidWcgc2VjdGlvbnMgdXNpbmcgemxpYi4KKy5JUCAiXGZCXC1WXGZSIiA0CisuSVggSXRlbSAiLVYiCisuUEQgMAorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKKy5QRAorU2hvdyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgXGZCb2JqY29weVxmUi4KKy5JUCAiXGZCXC12XGZSIiA0CisuSVggSXRlbSAiLXYiCisuUEQgMAorLklQICJcZkJcLVwtdmVyYm9zZVxmUiIgNAorLklYIEl0ZW0gIi0tdmVyYm9zZSIKKy5QRAorVmVyYm9zZSBvdXRwdXQ6IGxpc3QgYWxsIG9iamVjdCBmaWxlcyBtb2RpZmllZC4gIEluIHRoZSBjYXNlIG9mCithcmNoaXZlcywgXGZCb2JqY29weSBcLVZcZlIgbGlzdHMgYWxsIG1lbWJlcnMgb2YgdGhlIGFyY2hpdmUuCisuSVAgIlxmQlwtXC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS1oZWxwIgorU2hvdyBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gXGZCb2JqY29weVxmUi4KKy5JUCAiXGZCXC1cLWluZm9cZlIiIDQKKy5JWCBJdGVtICItLWluZm8iCitEaXNwbGF5IGEgbGlzdCBzaG93aW5nIGFsbCBhcmNoaXRlY3R1cmVzIGFuZCBvYmplY3QgZm9ybWF0cyBhdmFpbGFibGUuCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgorXCZcZklsZFxmUlx8KDEpLCBcZklvYmpkdW1wXGZSXHwoMSksIGFuZCB0aGUgSW5mbyBlbnRyaWVzIGZvciBcZkliaW51dGlsc1xmUi4KKy5TSCAiQ09QWVJJR0hUIgorLklYIEhlYWRlciAiQ09QWVJJR0hUIgorQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBcKihMIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcKihSIi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1vYmpkdW1wLjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtb2JqZHVtcC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMDZjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtb2JqZHVtcC4xCkBAIC0wLDAgKzEsODQxIEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yMyAoUG9kOjpTaW1wbGUgMy4xNCkKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiT0JKRFVNUCAxIgorLlRIIE9CSkRVTVAgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitvYmpkdW1wIFwtIGRpc3BsYXkgaW5mb3JtYXRpb24gZnJvbSBvYmplY3QgZmlsZXMuCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCitvYmpkdW1wIFtcZkJcLWFcZlJ8XGZCXC1cLWFyY2hpdmVcLWhlYWRlcnNcZlJdCisgICAgICAgIFtcZkJcLWJcZlIgXGZJYmZkbmFtZVxmUnxcZkJcLVwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlJdCisgICAgICAgIFtcZkJcLUNcZlJ8XGZCXC1cLWRlbWFuZ2xlXGZSWz1cZklzdHlsZVxmUl0gXQorICAgICAgICBbXGZCXC1kXGZSfFxmQlwtXC1kaXNhc3NlbWJsZVxmUl0KKyAgICAgICAgW1xmQlwtRFxmUnxcZkJcLVwtZGlzYXNzZW1ibGVcLWFsbFxmUl0KKyAgICAgICAgW1xmQlwtelxmUnxcZkJcLVwtZGlzYXNzZW1ibGVcLXplcm9lc1xmUl0KKyAgICAgICAgW1xmQlwtRUJcZlJ8XGZCXC1FTFxmUnxcZkJcLVwtZW5kaWFuPVxmUntiaWcgfCBsaXR0bGUgfV0KKyAgICAgICAgW1xmQlwtZlxmUnxcZkJcLVwtZmlsZVwtaGVhZGVyc1xmUl0KKyAgICAgICAgW1xmQlwtRlxmUnxcZkJcLVwtZmlsZVwtb2Zmc2V0c1xmUl0KKyAgICAgICAgW1xmQlwtXC1maWxlXC1zdGFydFwtY29udGV4dFxmUl0KKyAgICAgICAgW1xmQlwtZ1xmUnxcZkJcLVwtZGVidWdnaW5nXGZSXQorICAgICAgICBbXGZCXC1lXGZSfFxmQlwtXC1kZWJ1Z2dpbmdcLXRhZ3NcZlJdCisgICAgICAgIFtcZkJcLWhcZlJ8XGZCXC1cLXNlY3Rpb25cLWhlYWRlcnNcZlJ8XGZCXC1cLWhlYWRlcnNcZlJdCisgICAgICAgIFtcZkJcLWlcZlJ8XGZCXC1cLWluZm9cZlJdCisgICAgICAgIFtcZkJcLWpcZlIgXGZJc2VjdGlvblxmUnxcZkJcLVwtc2VjdGlvbj1cZlJcZklzZWN0aW9uXGZSXQorICAgICAgICBbXGZCXC1sXGZSfFxmQlwtXC1saW5lXC1udW1iZXJzXGZSXQorICAgICAgICBbXGZCXC1TXGZSfFxmQlwtXC1zb3VyY2VcZlJdCisgICAgICAgIFtcZkJcLW1cZlIgXGZJbWFjaGluZVxmUnxcZkJcLVwtYXJjaGl0ZWN0dXJlPVxmUlxmSW1hY2hpbmVcZlJdCisgICAgICAgIFtcZkJcLU1cZlIgXGZJb3B0aW9uc1xmUnxcZkJcLVwtZGlzYXNzZW1ibGVyXC1vcHRpb25zPVxmUlxmSW9wdGlvbnNcZlJdCisgICAgICAgIFtcZkJcLXBcZlJ8XGZCXC1cLXByaXZhdGVcLWhlYWRlcnNcZlJdCisgICAgICAgIFtcZkJcLVBcZlIgXGZJb3B0aW9uc1xmUnxcZkJcLVwtcHJpdmF0ZT1cZlJcZklvcHRpb25zXGZSXQorICAgICAgICBbXGZCXC1yXGZSfFxmQlwtXC1yZWxvY1xmUl0KKyAgICAgICAgW1xmQlwtUlxmUnxcZkJcLVwtZHluYW1pY1wtcmVsb2NcZlJdCisgICAgICAgIFtcZkJcLXNcZlJ8XGZCXC1cLWZ1bGxcLWNvbnRlbnRzXGZSXQorICAgICAgICBbXGZCXC1XW2xMaWFwcm1mRnNvUnRdXGZSfAorICAgICAgICAgXGZCXC1cLWR3YXJmXGZSWz1yYXdsaW5lLD1kZWNvZGVkbGluZSw9aW5mbyw9YWJicmV2LD1wdWJuYW1lcyw9YXJhbmdlcyw9bWFjcm8sPWZyYW1lcyw9ZnJhbWVzXC1pbnRlcnAsPXN0ciw9bG9jLD1SYW5nZXMsPXB1YnR5cGVzLD10cmFjZV9pbmZvLD10cmFjZV9hYmJyZXYsPXRyYWNlX2FyYW5nZXMsPWdkYl9pbmRleF1dCisgICAgICAgIFtcZkJcLUdcZlJ8XGZCXC1cLXN0YWJzXGZSXQorICAgICAgICBbXGZCXC10XGZSfFxmQlwtXC1zeW1zXGZSXQorICAgICAgICBbXGZCXC1UXGZSfFxmQlwtXC1keW5hbWljXC1zeW1zXGZSXQorICAgICAgICBbXGZCXC14XGZSfFxmQlwtXC1hbGxcLWhlYWRlcnNcZlJdCisgICAgICAgIFtcZkJcLXdcZlJ8XGZCXC1cLXdpZGVcZlJdCisgICAgICAgIFtcZkJcLVwtc3RhcnRcLWFkZHJlc3M9XGZSXGZJYWRkcmVzc1xmUl0KKyAgICAgICAgW1xmQlwtXC1zdG9wXC1hZGRyZXNzPVxmUlxmSWFkZHJlc3NcZlJdCisgICAgICAgIFtcZkJcLVwtcHJlZml4XC1hZGRyZXNzZXNcZlJdCisgICAgICAgIFtcZkJcLVwtW25vXC1dc2hvd1wtcmF3XC1pbnNuXGZSXQorICAgICAgICBbXGZCXC1cLWFkanVzdFwtdm1hPVxmUlxmSW9mZnNldFxmUl0KKyAgICAgICAgW1xmQlwtXC1zcGVjaWFsXC1zeW1zXGZSXQorICAgICAgICBbXGZCXC1cLXByZWZpeD1cZlJcZklwcmVmaXhcZlJdCisgICAgICAgIFtcZkJcLVwtcHJlZml4XC1zdHJpcD1cZlJcZklsZXZlbFxmUl0KKyAgICAgICAgW1xmQlwtXC1pbnNuXC13aWR0aD1cZlJcZkl3aWR0aFxmUl0KKyAgICAgICAgW1xmQlwtVlxmUnxcZkJcLVwtdmVyc2lvblxmUl0KKyAgICAgICAgW1xmQlwtSFxmUnxcZkJcLVwtaGVscFxmUl0KKyAgICAgICAgXGZJb2JqZmlsZVxmUi4uLgorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorXCZcZkJvYmpkdW1wXGZSIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IG9uZSBvciBtb3JlIG9iamVjdCBmaWxlcy4KK1RoZSBvcHRpb25zIGNvbnRyb2wgd2hhdCBwYXJ0aWN1bGFyIGluZm9ybWF0aW9uIHRvIGRpc3BsYXkuICBUaGlzCitpbmZvcm1hdGlvbiBpcyBtb3N0bHkgdXNlZnVsIHRvIHByb2dyYW1tZXJzIHdobyBhcmUgd29ya2luZyBvbiB0aGUKK2NvbXBpbGF0aW9uIHRvb2xzLCBhcyBvcHBvc2VkIHRvIHByb2dyYW1tZXJzIHdobyBqdXN0IHdhbnQgdGhlaXIKK3Byb2dyYW0gdG8gY29tcGlsZSBhbmQgd29yay4KKy5QUAorXCZcZklvYmpmaWxlXGZSLi4uIGFyZSB0aGUgb2JqZWN0IGZpbGVzIHRvIGJlIGV4YW1pbmVkLiAgV2hlbiB5b3UKK3NwZWNpZnkgYXJjaGl2ZXMsIFxmQm9iamR1bXBcZlIgc2hvd3MgaW5mb3JtYXRpb24gb24gZWFjaCBvZiB0aGUgbWVtYmVyCitvYmplY3QgZmlsZXMuCisuU0ggIk9QVElPTlMiCisuSVggSGVhZGVyICJPUFRJT05TIgorVGhlIGxvbmcgYW5kIHNob3J0IGZvcm1zIG9mIG9wdGlvbnMsIHNob3duIGhlcmUgYXMgYWx0ZXJuYXRpdmVzLCBhcmUKK2VxdWl2YWxlbnQuICBBdCBsZWFzdCBvbmUgb3B0aW9uIGZyb20gdGhlIGxpc3QKK1wmXGZCXC1hLFwtZCxcLUQsXC1lLFwtZixcLWcsXC1HLFwtaCxcLUgsXC1wLFwtUCxcLXIsXC1SLFwtcyxcLVMsXC10LFwtVCxcLVYsXC14XGZSIG11c3QgYmUgZ2l2ZW4uCisuSVAgIlxmQlwtYVxmUiIgNAorLklYIEl0ZW0gIi1hIgorLlBEIDAKKy5JUCAiXGZCXC1cLWFyY2hpdmVcLWhlYWRlclxmUiIgNAorLklYIEl0ZW0gIi0tYXJjaGl2ZS1oZWFkZXIiCisuUEQKK0lmIGFueSBvZiB0aGUgXGZJb2JqZmlsZVxmUiBmaWxlcyBhcmUgYXJjaGl2ZXMsIGRpc3BsYXkgdGhlIGFyY2hpdmUKK2hlYWRlciBpbmZvcm1hdGlvbiAoaW4gYSBmb3JtYXQgc2ltaWxhciB0byBcZkJscyBcLWxcZlIpLiAgQmVzaWRlcyB0aGUKK2luZm9ybWF0aW9uIHlvdSBjb3VsZCBsaXN0IHdpdGggXGZCYXIgdHZcZlIsIFxmQm9iamR1bXAgXC1hXGZSIHNob3dzCit0aGUgb2JqZWN0IGZpbGUgZm9ybWF0IG9mIGVhY2ggYXJjaGl2ZSBtZW1iZXIuCisuSVAgIlxmQlwtXC1hZGp1c3RcLXZtYT1cZlJcZklvZmZzZXRcZlIiIDQKKy5JWCBJdGVtICItLWFkanVzdC12bWE9b2Zmc2V0IgorV2hlbiBkdW1waW5nIGluZm9ybWF0aW9uLCBmaXJzdCBhZGQgXGZJb2Zmc2V0XGZSIHRvIGFsbCB0aGUgc2VjdGlvbgorYWRkcmVzc2VzLiAgVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHNlY3Rpb24gYWRkcmVzc2VzIGRvIG5vdCBjb3JyZXNwb25kIHRvCit0aGUgc3ltYm9sIHRhYmxlLCB3aGljaCBjYW4gaGFwcGVuIHdoZW4gcHV0dGluZyBzZWN0aW9ucyBhdCBwYXJ0aWN1bGFyCithZGRyZXNzZXMgd2hlbiB1c2luZyBhIGZvcm1hdCB3aGljaCBjYW4gbm90IHJlcHJlc2VudCBzZWN0aW9uIGFkZHJlc3NlcywKK3N1Y2ggYXMgYS5vdXQuCisuSVAgIlxmQlwtYlxmUiBcZkliZmRuYW1lXGZSIiA0CisuSVggSXRlbSAiLWIgYmZkbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0PWJmZG5hbWUiCisuUEQKK1NwZWNpZnkgdGhhdCB0aGUgb2JqZWN0LWNvZGUgZm9ybWF0IGZvciB0aGUgb2JqZWN0IGZpbGVzIGlzCitcJlxmSWJmZG5hbWVcZlIuICBUaGlzIG9wdGlvbiBtYXkgbm90IGJlIG5lY2Vzc2FyeTsgXGZJb2JqZHVtcFxmUiBjYW4KK2F1dG9tYXRpY2FsbHkgcmVjb2duaXplIG1hbnkgZm9ybWF0cy4KKy5TcAorRm9yIGV4YW1wbGUsCisuU3AKKy5WYiAxCitcJiAgICAgICAgb2JqZHVtcCBcLWIgb2FzeXMgXC1tIHZheCBcLWggZnUubworLlZlCisuU3AKK2Rpc3BsYXlzIHN1bW1hcnkgaW5mb3JtYXRpb24gZnJvbSB0aGUgc2VjdGlvbiBoZWFkZXJzIChcZkJcLWhcZlIpIG9mCitcJlxmSWZ1Lm9cZlIsIHdoaWNoIGlzIGV4cGxpY2l0bHkgaWRlbnRpZmllZCAoXGZCXC1tXGZSKSBhcyBhIFxzLTFWQVhcczAgb2JqZWN0CitmaWxlIGluIHRoZSBmb3JtYXQgcHJvZHVjZWQgYnkgT2FzeXMgY29tcGlsZXJzLiAgWW91IGNhbiBsaXN0IHRoZQorZm9ybWF0cyBhdmFpbGFibGUgd2l0aCB0aGUgXGZCXC1pXGZSIG9wdGlvbi4KKy5JUCAiXGZCXC1DXGZSIiA0CisuSVggSXRlbSAiLUMiCisuUEQgMAorLklQICJcZkJcLVwtZGVtYW5nbGVbPVxmUlxmSXN0eWxlXGZSXGZCXVxmUiIgNAorLklYIEl0ZW0gIi0tZGVtYW5nbGVbPXN0eWxlXSIKKy5QRAorRGVjb2RlIChcZklkZW1hbmdsZVxmUikgbG93LWxldmVsIHN5bWJvbCBuYW1lcyBpbnRvIHVzZXItbGV2ZWwgbmFtZXMuCitCZXNpZGVzIHJlbW92aW5nIGFueSBpbml0aWFsIHVuZGVyc2NvcmUgcHJlcGVuZGVkIGJ5IHRoZSBzeXN0ZW0sIHRoaXMKK21ha2VzIFwqKEMrIGZ1bmN0aW9uIG5hbWVzIHJlYWRhYmxlLiAgRGlmZmVyZW50IGNvbXBpbGVycyBoYXZlIGRpZmZlcmVudAorbWFuZ2xpbmcgc3R5bGVzLiBUaGUgb3B0aW9uYWwgZGVtYW5nbGluZyBzdHlsZSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0bworY2hvb3NlIGFuIGFwcHJvcHJpYXRlIGRlbWFuZ2xpbmcgc3R5bGUgZm9yIHlvdXIgY29tcGlsZXIuCisuSVAgIlxmQlwtZ1xmUiIgNAorLklYIEl0ZW0gIi1nIgorLlBEIDAKKy5JUCAiXGZCXC1cLWRlYnVnZ2luZ1xmUiIgNAorLklYIEl0ZW0gIi0tZGVidWdnaW5nIgorLlBECitEaXNwbGF5IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIFRoaXMgYXR0ZW1wdHMgdG8gcGFyc2UgXHMtMVNUQUJTXHMwIGFuZCBccy0xSUVFRVxzMAorZGVidWdnaW5nIGZvcm1hdCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdGhlIGZpbGUgYW5kIHByaW50IGl0IG91dCB1c2luZworYSBDIGxpa2Ugc3ludGF4LiAgSWYgbmVpdGhlciBvZiB0aGVzZSBmb3JtYXRzIGFyZSBmb3VuZCB0aGlzIG9wdGlvbgorZmFsbHMgYmFjayBvbiB0aGUgXGZCXC1XXGZSIG9wdGlvbiB0byBwcmludCBhbnkgXHMtMURXQVJGXHMwIGluZm9ybWF0aW9uIGluCit0aGUgZmlsZS4KKy5JUCAiXGZCXC1lXGZSIiA0CisuSVggSXRlbSAiLWUiCisuUEQgMAorLklQICJcZkJcLVwtZGVidWdnaW5nXC10YWdzXGZSIiA0CisuSVggSXRlbSAiLS1kZWJ1Z2dpbmctdGFncyIKKy5QRAorTGlrZSBcZkJcLWdcZlIsIGJ1dCB0aGUgaW5mb3JtYXRpb24gaXMgZ2VuZXJhdGVkIGluIGEgZm9ybWF0IGNvbXBhdGlibGUKK3dpdGggY3RhZ3MgdG9vbC4KKy5JUCAiXGZCXC1kXGZSIiA0CisuSVggSXRlbSAiLWQiCisuUEQgMAorLklQICJcZkJcLVwtZGlzYXNzZW1ibGVcZlIiIDQKKy5JWCBJdGVtICItLWRpc2Fzc2VtYmxlIgorLlBECitEaXNwbGF5IHRoZSBhc3NlbWJsZXIgbW5lbW9uaWNzIGZvciB0aGUgbWFjaGluZSBpbnN0cnVjdGlvbnMgZnJvbQorXCZcZklvYmpmaWxlXGZSLiAgVGhpcyBvcHRpb24gb25seSBkaXNhc3NlbWJsZXMgdGhvc2Ugc2VjdGlvbnMgd2hpY2ggYXJlCitleHBlY3RlZCB0byBjb250YWluIGluc3RydWN0aW9ucy4KKy5JUCAiXGZCXC1EXGZSIiA0CisuSVggSXRlbSAiLUQiCisuUEQgMAorLklQICJcZkJcLVwtZGlzYXNzZW1ibGVcLWFsbFxmUiIgNAorLklYIEl0ZW0gIi0tZGlzYXNzZW1ibGUtYWxsIgorLlBECitMaWtlIFxmQlwtZFxmUiwgYnV0IGRpc2Fzc2VtYmxlIHRoZSBjb250ZW50cyBvZiBhbGwgc2VjdGlvbnMsIG5vdCBqdXN0Cit0aG9zZSBleHBlY3RlZCB0byBjb250YWluIGluc3RydWN0aW9ucy4KKy5TcAorSWYgdGhlIHRhcmdldCBpcyBhbiBccy0xQVJNXHMwIGFyY2hpdGVjdHVyZSB0aGlzIHN3aXRjaCBhbHNvIGhhcyB0aGUgZWZmZWN0CitvZiBmb3JjaW5nIHRoZSBkaXNhc3NlbWJsZXIgdG8gZGVjb2RlIHBpZWNlcyBvZiBkYXRhIGZvdW5kIGluIGNvZGUKK3NlY3Rpb25zIGFzIGlmIHRoZXkgd2VyZSBpbnN0cnVjdGlvbnMuCisuSVAgIlxmQlwtXC1wcmVmaXhcLWFkZHJlc3Nlc1xmUiIgNAorLklYIEl0ZW0gIi0tcHJlZml4LWFkZHJlc3NlcyIKK1doZW4gZGlzYXNzZW1ibGluZywgcHJpbnQgdGhlIGNvbXBsZXRlIGFkZHJlc3Mgb24gZWFjaCBsaW5lLiAgVGhpcyBpcwordGhlIG9sZGVyIGRpc2Fzc2VtYmx5IGZvcm1hdC4KKy5JUCAiXGZCXC1FQlxmUiIgNAorLklYIEl0ZW0gIi1FQiIKKy5QRCAwCisuSVAgIlxmQlwtRUxcZlIiIDQKKy5JWCBJdGVtICItRUwiCisuSVAgIlxmQlwtXC1lbmRpYW49e2JpZ3xsaXR0bGV9XGZSIiA0CisuSVggSXRlbSAiLS1lbmRpYW49e2JpZ3xsaXR0bGV9IgorLlBECitTcGVjaWZ5IHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBvYmplY3QgZmlsZXMuICBUaGlzIG9ubHkgYWZmZWN0cworZGlzYXNzZW1ibHkuICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBkaXNhc3NlbWJsaW5nIGEgZmlsZSBmb3JtYXQgd2hpY2gKK2RvZXMgbm90IGRlc2NyaWJlIGVuZGlhbm5lc3MgaW5mb3JtYXRpb24sIHN1Y2ggYXMgU1wtcmVjb3Jkcy4KKy5JUCAiXGZCXC1mXGZSIiA0CisuSVggSXRlbSAiLWYiCisuUEQgMAorLklQICJcZkJcLVwtZmlsZVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi0tZmlsZS1oZWFkZXJzIgorLlBECitEaXNwbGF5IHN1bW1hcnkgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3ZlcmFsbCBoZWFkZXIgb2YKK2VhY2ggb2YgdGhlIFxmSW9iamZpbGVcZlIgZmlsZXMuCisuSVAgIlxmQlwtRlxmUiIgNAorLklYIEl0ZW0gIi1GIgorLlBEIDAKKy5JUCAiXGZCXC1cLWZpbGVcLW9mZnNldHNcZlIiIDQKKy5JWCBJdGVtICItLWZpbGUtb2Zmc2V0cyIKKy5QRAorV2hlbiBkaXNhc3NlbWJsaW5nIHNlY3Rpb25zLCB3aGVuZXZlciBhIHN5bWJvbCBpcyBkaXNwbGF5ZWQsIGFsc28KK2Rpc3BsYXkgdGhlIGZpbGUgb2Zmc2V0IG9mIHRoZSByZWdpb24gb2YgZGF0YSB0aGF0IGlzIGFib3V0IHRvIGJlCitkdW1wZWQuICBJZiB6ZXJvZXMgYXJlIGJlaW5nIHNraXBwZWQsIHRoZW4gd2hlbiBkaXNhc3NlbWJseSByZXN1bWVzLAordGVsbCB0aGUgdXNlciBob3cgbWFueSB6ZXJvZXMgd2VyZSBza2lwcGVkIGFuZCB0aGUgZmlsZSBvZmZzZXQgb2YgdGhlCitsb2NhdGlvbiBmcm9tIHdoZXJlIHRoZSBkaXNhc3NlbWJseSByZXN1bWVzLiAgV2hlbiBkdW1waW5nIHNlY3Rpb25zLAorZGlzcGxheSB0aGUgZmlsZSBvZmZzZXQgb2YgdGhlIGxvY2F0aW9uIGZyb20gd2hlcmUgdGhlIGR1bXAgc3RhcnRzLgorLklQICJcZkJcLVwtZmlsZVwtc3RhcnRcLWNvbnRleHRcZlIiIDQKKy5JWCBJdGVtICItLWZpbGUtc3RhcnQtY29udGV4dCIKK1NwZWNpZnkgdGhhdCB3aGVuIGRpc3BsYXlpbmcgaW50ZXJsaXN0ZWQgc291cmNlIGNvZGUvZGlzYXNzZW1ibHkKKyhhc3N1bWVzIFxmQlwtU1xmUikgZnJvbSBhIGZpbGUgdGhhdCBoYXMgbm90IHlldCBiZWVuIGRpc3BsYXllZCwgZXh0ZW5kIHRoZQorY29udGV4dCB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUuCisuSVAgIlxmQlwtaFxmUiIgNAorLklYIEl0ZW0gIi1oIgorLlBEIDAKKy5JUCAiXGZCXC1cLXNlY3Rpb25cLWhlYWRlcnNcZlIiIDQKKy5JWCBJdGVtICItLXNlY3Rpb24taGVhZGVycyIKKy5JUCAiXGZCXC1cLWhlYWRlcnNcZlIiIDQKKy5JWCBJdGVtICItLWhlYWRlcnMiCisuUEQKK0Rpc3BsYXkgc3VtbWFyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZWN0aW9uIGhlYWRlcnMgb2YgdGhlCitvYmplY3QgZmlsZS4KKy5TcAorRmlsZSBzZWdtZW50cyBtYXkgYmUgcmVsb2NhdGVkIHRvIG5vbnN0YW5kYXJkIGFkZHJlc3NlcywgZm9yIGV4YW1wbGUgYnkKK3VzaW5nIHRoZSBcZkJcLVR0ZXh0XGZSLCBcZkJcLVRkYXRhXGZSLCBvciBcZkJcLVRic3NcZlIgb3B0aW9ucyB0bworXCZcZkJsZFxmUi4gIEhvd2V2ZXIsIHNvbWUgb2JqZWN0IGZpbGUgZm9ybWF0cywgc3VjaCBhcyBhLm91dCwgZG8gbm90CitzdG9yZSB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgZmlsZSBzZWdtZW50cy4gIEluIHRob3NlIHNpdHVhdGlvbnMsCithbHRob3VnaCBcZkJsZFxmUiByZWxvY2F0ZXMgdGhlIHNlY3Rpb25zIGNvcnJlY3RseSwgdXNpbmcgXGZCb2JqZHVtcAorXCZcLWhcZlIgdG8gbGlzdCB0aGUgZmlsZSBzZWN0aW9uIGhlYWRlcnMgY2Fubm90IHNob3cgdGhlIGNvcnJlY3QgYWRkcmVzc2VzLgorSW5zdGVhZCwgaXQgc2hvd3MgdGhlIHVzdWFsIGFkZHJlc3Nlcywgd2hpY2ggYXJlIGltcGxpY2l0IGZvciB0aGUKK3RhcmdldC4KKy5JUCAiXGZCXC1IXGZSIiA0CisuSVggSXRlbSAiLUgiCisuUEQgMAorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKKy5QRAorUHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIFxmQm9iamR1bXBcZlIgYW5kIGV4aXQuCisuSVAgIlxmQlwtaVxmUiIgNAorLklYIEl0ZW0gIi1pIgorLlBEIDAKKy5JUCAiXGZCXC1cLWluZm9cZlIiIDQKKy5JWCBJdGVtICItLWluZm8iCisuUEQKK0Rpc3BsYXkgYSBsaXN0IHNob3dpbmcgYWxsIGFyY2hpdGVjdHVyZXMgYW5kIG9iamVjdCBmb3JtYXRzIGF2YWlsYWJsZQorZm9yIHNwZWNpZmljYXRpb24gd2l0aCBcZkJcLWJcZlIgb3IgXGZCXC1tXGZSLgorLklQICJcZkJcLWpcZlIgXGZJbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1qIG5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtc2VjdGlvbj1cZlJcZkluYW1lXGZSIiA0CisuSVggSXRlbSAiLS1zZWN0aW9uPW5hbWUiCisuUEQKK0Rpc3BsYXkgaW5mb3JtYXRpb24gb25seSBmb3Igc2VjdGlvbiBcZkluYW1lXGZSLgorLklQICJcZkJcLWxcZlIiIDQKKy5JWCBJdGVtICItbCIKKy5QRCAwCisuSVAgIlxmQlwtXC1saW5lXC1udW1iZXJzXGZSIiA0CisuSVggSXRlbSAiLS1saW5lLW51bWJlcnMiCisuUEQKK0xhYmVsIHRoZSBkaXNwbGF5ICh1c2luZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24pIHdpdGggdGhlIGZpbGVuYW1lIGFuZAorc291cmNlIGxpbmUgbnVtYmVycyBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgY29kZSBvciByZWxvY3Mgc2hvd24uCitPbmx5IHVzZWZ1bCB3aXRoIFxmQlwtZFxmUiwgXGZCXC1EXGZSLCBvciBcZkJcLXJcZlIuCisuSVAgIlxmQlwtbVxmUiBcZkltYWNoaW5lXGZSIiA0CisuSVggSXRlbSAiLW0gbWFjaGluZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1hcmNoaXRlY3R1cmU9XGZSXGZJbWFjaGluZVxmUiIgNAorLklYIEl0ZW0gIi0tYXJjaGl0ZWN0dXJlPW1hY2hpbmUiCisuUEQKK1NwZWNpZnkgdGhlIGFyY2hpdGVjdHVyZSB0byB1c2Ugd2hlbiBkaXNhc3NlbWJsaW5nIG9iamVjdCBmaWxlcy4gIFRoaXMKK2NhbiBiZSB1c2VmdWwgd2hlbiBkaXNhc3NlbWJsaW5nIG9iamVjdCBmaWxlcyB3aGljaCBkbyBub3QgZGVzY3JpYmUKK2FyY2hpdGVjdHVyZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyBTXC1yZWNvcmRzLiAgWW91IGNhbiBsaXN0IHRoZSBhdmFpbGFibGUKK2FyY2hpdGVjdHVyZXMgd2l0aCB0aGUgXGZCXC1pXGZSIG9wdGlvbi4KKy5TcAorSWYgdGhlIHRhcmdldCBpcyBhbiBccy0xQVJNXHMwIGFyY2hpdGVjdHVyZSB0aGVuIHRoaXMgc3dpdGNoIGhhcyBhbgorYWRkaXRpb25hbCBlZmZlY3QuICBJdCByZXN0cmljdHMgdGhlIGRpc2Fzc2VtYmx5IHRvIG9ubHkgdGhvc2UKK2luc3RydWN0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpZWQgYnkgXGZJbWFjaGluZVxmUi4KK0lmIGl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgdGhpcyBzd2l0Y2ggYmVjYXVzZSB0aGUgaW5wdXQgZmlsZSBkb2VzIG5vdAorY29udGFpbiBhbnkgYXJjaGl0ZWN0dXJlIGluZm9ybWF0aW9uLCBidXQgaXQgaXMgYWxzbyBkZXNpcmVkIHRvCitkaXNhc3NlbWJsZSBhbGwgdGhlIGluc3RydWN0aW9ucyB1c2UgXGZCXC1tYXJtXGZSLgorLklQICJcZkJcLU1cZlIgXGZJb3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1NIG9wdGlvbnMiCisuUEQgMAorLklQICJcZkJcLVwtZGlzYXNzZW1ibGVyXC1vcHRpb25zPVxmUlxmSW9wdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItLWRpc2Fzc2VtYmxlci1vcHRpb25zPW9wdGlvbnMiCisuUEQKK1Bhc3MgdGFyZ2V0IHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHRoZSBkaXNhc3NlbWJsZXIuICBPbmx5IHN1cHBvcnRlZCBvbgorc29tZSB0YXJnZXRzLiAgSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgbW9yZSB0aGFuIG9uZQorZGlzYXNzZW1ibGVyIG9wdGlvbiB0aGVuIG11bHRpcGxlIFxmQlwtTVxmUiBvcHRpb25zIGNhbiBiZSB1c2VkIG9yCitjYW4gYmUgcGxhY2VkIHRvZ2V0aGVyIGludG8gYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4KKy5TcAorSWYgdGhlIHRhcmdldCBpcyBhbiBccy0xQVJNXHMwIGFyY2hpdGVjdHVyZSB0aGVuIHRoaXMgc3dpdGNoIGNhbiBiZSB1c2VkIHRvCitzZWxlY3Qgd2hpY2ggcmVnaXN0ZXIgbmFtZSBzZXQgaXMgdXNlZCBkdXJpbmcgZGlzYXNzZW1ibGVyLiAgU3BlY2lmeWluZworXCZcZkJcLU0gcmVnLW5hbWVzLXN0ZFxmUiAodGhlIGRlZmF1bHQpIHdpbGwgc2VsZWN0IHRoZSByZWdpc3RlciBuYW1lcyBhcwordXNlZCBpbiBccy0xQVJNXHMwJ3MgaW5zdHJ1Y3Rpb24gc2V0IGRvY3VtZW50YXRpb24sIGJ1dCB3aXRoIHJlZ2lzdGVyIDEzIGNhbGxlZAorXCYnc3AnLCByZWdpc3RlciAxNCBjYWxsZWQgJ2xyJyBhbmQgcmVnaXN0ZXIgMTUgY2FsbGVkICdwYycuICBTcGVjaWZ5aW5nCitcJlxmQlwtTSByZWctbmFtZXMtYXBjc1xmUiB3aWxsIHNlbGVjdCB0aGUgbmFtZSBzZXQgdXNlZCBieSB0aGUgXHMtMUFSTVxzMAorUHJvY2VkdXJlIENhbGwgU3RhbmRhcmQsIHdoaWxzdCBzcGVjaWZ5aW5nIFxmQlwtTSByZWctbmFtZXMtcmF3XGZSIHdpbGwKK2p1c3QgdXNlIFxmQnJcZlIgZm9sbG93ZWQgYnkgdGhlIHJlZ2lzdGVyIG51bWJlci4KKy5TcAorVGhlcmUgYXJlIGFsc28gdHdvIHZhcmlhbnRzIG9uIHRoZSBccy0xQVBDU1xzMCByZWdpc3RlciBuYW1pbmcgc2NoZW1lIGVuYWJsZWQKK2J5IFxmQlwtTSByZWctbmFtZXMtYXRwY3NcZlIgYW5kIFxmQlwtTSByZWctbmFtZXMtc3BlY2lhbC1hdHBjc1xmUiB3aGljaAordXNlIHRoZSBBUk0vVGh1bWIgUHJvY2VkdXJlIENhbGwgU3RhbmRhcmQgbmFtaW5nIGNvbnZlbnRpb25zLiAgKEVpdGhlcgord2l0aCB0aGUgbm9ybWFsIHJlZ2lzdGVyIG5hbWVzIG9yIHRoZSBzcGVjaWFsIHJlZ2lzdGVyIG5hbWVzKS4KKy5TcAorVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgdXNlZCBmb3IgXHMtMUFSTVxzMCBhcmNoaXRlY3R1cmVzIHRvIGZvcmNlIHRoZQorZGlzYXNzZW1ibGVyIHRvIGludGVycHJldCBhbGwgaW5zdHJ1Y3Rpb25zIGFzIFRodW1iIGluc3RydWN0aW9ucyBieQordXNpbmcgdGhlIHN3aXRjaCBcZkJcLVwtZGlzYXNzZW1ibGVyXC1vcHRpb25zPWZvcmNlXC10aHVtYlxmUi4gIFRoaXMgY2FuIGJlCit1c2VmdWwgd2hlbiBhdHRlbXB0aW5nIHRvIGRpc2Fzc2VtYmxlIHRodW1iIGNvZGUgcHJvZHVjZWQgYnkgb3RoZXIKK2NvbXBpbGVycy4KKy5TcAorRm9yIHRoZSB4ODYsIHNvbWUgb2YgdGhlIG9wdGlvbnMgZHVwbGljYXRlIGZ1bmN0aW9ucyBvZiB0aGUgXGZCXC1tXGZSCitzd2l0Y2gsIGJ1dCBhbGxvdyBmaW5lciBncmFpbmVkIGNvbnRyb2wuICBNdWx0aXBsZSBzZWxlY3Rpb25zIGZyb20gdGhlCitmb2xsb3dpbmcgbWF5IGJlIHNwZWNpZmllZCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcuCitcJlxmQng4NlwtNjRcZlIsIFxmQmkzODZcZlIgYW5kIFxmQmk4MDg2XGZSIHNlbGVjdCBkaXNhc3NlbWJseSBmb3IKK3RoZSBnaXZlbiBhcmNoaXRlY3R1cmUuICBcZkJpbnRlbFxmUiBhbmQgXGZCYXR0XGZSIHNlbGVjdCBiZXR3ZWVuCitpbnRlbCBzeW50YXggbW9kZSBhbmQgXHMtMUFUJlRcczAgc3ludGF4IG1vZGUuCitcJlxmQmludGVsLW1uZW1vbmljXGZSIGFuZCBcZkJhdHQtbW5lbW9uaWNcZlIgc2VsZWN0IGJldHdlZW4KK2ludGVsIG1uZW1vbmljIG1vZGUgYW5kIFxzLTFBVCZUXHMwIG1uZW1vbmljIG1vZGUuIFxmQmludGVsLW1uZW1vbmljXGZSCitpbXBsaWVzIFxmQmludGVsXGZSIGFuZCBcZkJhdHQtbW5lbW9uaWNcZlIgaW1wbGllcyBcZkJhdHRcZlIuCitcJlxmQmFkZHI2NFxmUiwgXGZCYWRkcjMyXGZSLAorXCZcZkJhZGRyMTZcZlIsIFxmQmRhdGEzMlxmUiBhbmQgXGZCZGF0YTE2XGZSIHNwZWNpZnkgdGhlIGRlZmF1bHQKK2FkZHJlc3Mgc2l6ZSBhbmQgb3BlcmFuZCBzaXplLiAgVGhlc2UgZm91ciBvcHRpb25zIHdpbGwgYmUgb3ZlcnJpZGRlbiBpZgorXCZcZkJ4ODZcLTY0XGZSLCBcZkJpMzg2XGZSIG9yIFxmQmk4MDg2XGZSIGFwcGVhciBsYXRlciBpbiB0aGUKK29wdGlvbiBzdHJpbmcuICBMYXN0bHksIFxmQnN1ZmZpeFxmUiwgd2hlbiBpbiBccy0xQVQmVFxzMCBtb2RlLAoraW5zdHJ1Y3RzIHRoZSBkaXNhc3NlbWJsZXIgdG8gcHJpbnQgYSBtbmVtb25pYyBzdWZmaXggZXZlbiB3aGVuIHRoZQorc3VmZml4IGNvdWxkIGJlIGluZmVycmVkIGJ5IHRoZSBvcGVyYW5kcy4KKy5TcAorRm9yIFBvd2VyUEMsIFxmQmJvb2tlXGZSIGNvbnRyb2xzIHRoZSBkaXNhc3NlbWJseSBvZiBCb29rRQoraW5zdHJ1Y3Rpb25zLiAgXGZCMzJcZlIgYW5kIFxmQjY0XGZSIHNlbGVjdCBQb3dlclBDIGFuZAorUG93ZXJQQzY0IGRpc2Fzc2VtYmx5LCByZXNwZWN0aXZlbHkuICBcZkJlMzAwXGZSIHNlbGVjdHMKK2Rpc2Fzc2VtYmx5IGZvciB0aGUgZTMwMCBmYW1pbHkuICBcZkI0NDBcZlIgc2VsZWN0cyBkaXNhc3NlbWJseSBmb3IKK3RoZSBQb3dlclBDIDQ0MC4gIFxmQnBwY3BzXGZSIHNlbGVjdHMgZGlzYXNzZW1ibHkgZm9yIHRoZSBwYWlyZWQKK3NpbmdsZSBpbnN0cnVjdGlvbnMgb2YgdGhlIFxzLTFQUEM3NTBDTFxzMC4KKy5TcAorRm9yIFxzLTFNSVBTXHMwLCB0aGlzIG9wdGlvbiBjb250cm9scyB0aGUgcHJpbnRpbmcgb2YgaW5zdHJ1Y3Rpb24gbW5lbW9uaWMKK25hbWVzIGFuZCByZWdpc3RlciBuYW1lcyBpbiBkaXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLiAgTXVsdGlwbGUKK3NlbGVjdGlvbnMgZnJvbSB0aGUgZm9sbG93aW5nIG1heSBiZSBzcGVjaWZpZWQgYXMgYSBjb21tYSBzZXBhcmF0ZWQKK3N0cmluZywgYW5kIGludmFsaWQgb3B0aW9ucyBhcmUgaWdub3JlZDoKKy5SUyA0CisuaWUgbiAuSVAgIiIibm9cLWFsaWFzZXMiIiIgNAorLmVsIC5JUCAiXGYoQ1dub1wtYWxpYXNlc1xmUiIgNAorLklYIEl0ZW0gIm5vLWFsaWFzZXMiCitQcmludCB0aGUgJ3JhdycgaW5zdHJ1Y3Rpb24gbW5lbW9uaWMgaW5zdGVhZCBvZiBzb21lIHBzZXVkbworaW5zdHJ1Y3Rpb24gbW5lbW9uaWMuICBJLmUuLCBwcmludCAnZGFkZHUnIG9yICdvcicgaW5zdGVhZCBvZiAnbW92ZScsCitcJidzbGwnIGluc3RlYWQgb2YgJ25vcCcsIGV0Yy4KKy5pZSBuIC5JUCAiIiJncHJcLW5hbWVzPVxmKENJQUJJXGYoQ1ciIiIgNAorLmVsIC5JUCAiXGYoQ1dncHJcLW5hbWVzPVxmKENJQUJJXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICJncHItbmFtZXM9QUJJIgorUHJpbnQgXHMtMUdQUlxzMCAoZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyKSBuYW1lcyBhcyBhcHByb3ByaWF0ZQorZm9yIHRoZSBzcGVjaWZpZWQgXHMtMUFCSVxzMC4gIEJ5IGRlZmF1bHQsIFxzLTFHUFJcczAgbmFtZXMgYXJlIHNlbGVjdGVkIGFjY29yZGluZyB0bwordGhlIFxzLTFBQklcczAgb2YgdGhlIGJpbmFyeSBiZWluZyBkaXNhc3NlbWJsZWQuCisuaWUgbiAuSVAgIiIiZnByXC1uYW1lcz1cZihDSUFCSVxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXZnByXC1uYW1lcz1cZihDSUFCSVxmKENXXGZSIiA0CisuSVggSXRlbSAiZnByLW5hbWVzPUFCSSIKK1ByaW50IFxzLTFGUFJcczAgKGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyKSBuYW1lcyBhcworYXBwcm9wcmlhdGUgZm9yIHRoZSBzcGVjaWZpZWQgXHMtMUFCSVxzMC4gIEJ5IGRlZmF1bHQsIFxzLTFGUFJcczAgbnVtYmVycyBhcmUgcHJpbnRlZAorcmF0aGVyIHRoYW4gbmFtZXMuCisuaWUgbiAuSVAgIiIiY3AwXC1uYW1lcz1cZihDSUFSQ0hcZihDVyIiIiA0CisuZWwgLklQICJcZihDV2NwMFwtbmFtZXM9XGYoQ0lBUkNIXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICJjcDAtbmFtZXM9QVJDSCIKK1ByaW50IFxzLTFDUDBcczAgKHN5c3RlbSBjb250cm9sIGNvcHJvY2Vzc29yOyBjb3Byb2Nlc3NvciAwKSByZWdpc3RlciBuYW1lcworYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBccy0xQ1BVXHMwIG9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpZWQgYnkKK1wmXGZJXHMtMUFSQ0hcczBcZlIuICBCeSBkZWZhdWx0LCBccy0xQ1AwXHMwIHJlZ2lzdGVyIG5hbWVzIGFyZSBzZWxlY3RlZCBhY2NvcmRpbmcgdG8KK3RoZSBhcmNoaXRlY3R1cmUgYW5kIFxzLTFDUFVcczAgb2YgdGhlIGJpbmFyeSBiZWluZyBkaXNhc3NlbWJsZWQuCisuaWUgbiAuSVAgIiIiaHdyXC1uYW1lcz1cZihDSUFSQ0hcZihDVyIiIiA0CisuZWwgLklQICJcZihDV2h3clwtbmFtZXM9XGYoQ0lBUkNIXGYoQ1dcZlIiIDQKKy5JWCBJdGVtICJod3ItbmFtZXM9QVJDSCIKK1ByaW50IFxzLTFIV1JcczAgKGhhcmR3YXJlIHJlZ2lzdGVyLCB1c2VkIGJ5IHRoZSBcZihDV1wqKENgcmRod3JcKihDJ1xmUiBpbnN0cnVjdGlvbikgbmFtZXMKK2FzIGFwcHJvcHJpYXRlIGZvciB0aGUgXHMtMUNQVVxzMCBvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWVkIGJ5CitcJlxmSVxzLTFBUkNIXHMwXGZSLiAgQnkgZGVmYXVsdCwgXHMtMUhXUlxzMCBuYW1lcyBhcmUgc2VsZWN0ZWQgYWNjb3JkaW5nIHRvCit0aGUgYXJjaGl0ZWN0dXJlIGFuZCBccy0xQ1BVXHMwIG9mIHRoZSBiaW5hcnkgYmVpbmcgZGlzYXNzZW1ibGVkLgorLmllIG4gLklQICIiInJlZ1wtbmFtZXM9XGYoQ0lBQklcZihDVyIiIiA0CisuZWwgLklQICJcZihDV3JlZ1wtbmFtZXM9XGYoQ0lBQklcZihDV1xmUiIgNAorLklYIEl0ZW0gInJlZy1uYW1lcz1BQkkiCitQcmludCBccy0xR1BSXHMwIGFuZCBccy0xRlBSXHMwIG5hbWVzIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgc2VsZWN0ZWQgXHMtMUFCSVxzMC4KKy5pZSBuIC5JUCAiIiJyZWdcLW5hbWVzPVxmKENJQVJDSFxmKENXIiIiIDQKKy5lbCAuSVAgIlxmKENXcmVnXC1uYW1lcz1cZihDSUFSQ0hcZihDV1xmUiIgNAorLklYIEl0ZW0gInJlZy1uYW1lcz1BUkNIIgorUHJpbnQgQ1BVLXNwZWNpZmljIHJlZ2lzdGVyIG5hbWVzIChccy0xQ1AwXHMwIHJlZ2lzdGVyIGFuZCBccy0xSFdSXHMwIG5hbWVzKQorYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBzZWxlY3RlZCBccy0xQ1BVXHMwIG9yIGFyY2hpdGVjdHVyZS4KKy5SRQorLlJTIDQKKy5TcAorRm9yIGFueSBvZiB0aGUgb3B0aW9ucyBsaXN0ZWQgYWJvdmUsIFxmSVxzLTFBQklcczBcZlIgb3IKK1wmXGZJXHMtMUFSQ0hcczBcZlIgbWF5IGJlIHNwZWNpZmllZCBhcyBcZkJudW1lcmljXGZSIHRvIGhhdmUgbnVtYmVycyBwcmludGVkCityYXRoZXIgdGhhbiBuYW1lcywgZm9yIHRoZSBzZWxlY3RlZCB0eXBlcyBvZiByZWdpc3RlcnMuCitZb3UgY2FuIGxpc3QgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgb2YgXGZJXHMtMUFCSVxzMFxmUiBhbmQgXGZJXHMtMUFSQ0hcczBcZlIgdXNpbmcKK3RoZSBcZkJcLVwtaGVscFxmUiBvcHRpb24uCisuU3AKK0ZvciBccy0xVkFYXHMwLCB5b3UgY2FuIHNwZWNpZnkgZnVuY3Rpb24gZW50cnkgYWRkcmVzc2VzIHdpdGggXGZCXC1NCitlbnRyeToweGYwMGJhXGZSLiAgWW91IGNhbiB1c2UgdGhpcyBtdWx0aXBsZSB0aW1lcyB0byBwcm9wZXJseQorZGlzYXNzZW1ibGUgXHMtMVZBWFxzMCBiaW5hcnkgZmlsZXMgdGhhdCBkb24ndCBjb250YWluIHN5bWJvbCB0YWJsZXMgKGxpa2UKK1wmXHMtMVJPTVxzMCBkdW1wcykuICBJbiB0aGVzZSBjYXNlcywgdGhlIGZ1bmN0aW9uIGVudHJ5IG1hc2sgd291bGQgb3RoZXJ3aXNlCitiZSBkZWNvZGVkIGFzIFxzLTFWQVhcczAgaW5zdHJ1Y3Rpb25zLCB3aGljaCB3b3VsZCBwcm9iYWJseSBsZWFkIHRoZSByZXN0CitvZiB0aGUgZnVuY3Rpb24gYmVpbmcgd3JvbmdseSBkaXNhc3NlbWJsZWQuCisuUkUKKy5JUCAiXGZCXC1wXGZSIiA0CisuSVggSXRlbSAiLXAiCisuUEQgMAorLklQICJcZkJcLVwtcHJpdmF0ZVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi0tcHJpdmF0ZS1oZWFkZXJzIgorLlBECitQcmludCBpbmZvcm1hdGlvbiB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGUgZXhhY3QKK2luZm9ybWF0aW9uIHByaW50ZWQgZGVwZW5kcyB1cG9uIHRoZSBvYmplY3QgZmlsZSBmb3JtYXQuICBGb3Igc29tZQorb2JqZWN0IGZpbGUgZm9ybWF0cywgbm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBwcmludGVkLgorLklQICJcZkJcLVBcZlIgXGZJb3B0aW9uc1xmUiIgNAorLklYIEl0ZW0gIi1QIG9wdGlvbnMiCisuUEQgMAorLklQICJcZkJcLVwtcHJpdmF0ZT1cZlJcZklvcHRpb25zXGZSIiA0CisuSVggSXRlbSAiLS1wcml2YXRlPW9wdGlvbnMiCisuUEQKK1ByaW50IGluZm9ybWF0aW9uIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoZQorYXJndW1lbnQgXGZJb3B0aW9uc1xmUiBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IHRoYXQgZGVwZW5kcyBvbiB0aGUKK2Zvcm1hdCAodGhlIGxpc3RzIG9mIG9wdGlvbnMgaXMgZGlzcGxheWVkIHdpdGggdGhlIGhlbHApLgorLlNwCitGb3IgXHMtMVhDT0ZGXHMwLCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcZkJoZWFkZXJcZlIsIFxmQmFvdXRcZlIsCitcJlxmQnNlY3Rpb25zXGZSLCBcZkJzeW1zXGZSLCBcZkJyZWxvY3NcZlIsIFxmQmxpbmVub1xmUiwKK1wmXGZCbG9hZGVyXGZSLCBcZkJleGNlcHRcZlIsIFxmQnR5cGNoa1xmUiwgXGZCdHJhY2ViYWNrXGZSCithbmQgXGZCdG9jXGZSLgorLklQICJcZkJcLXJcZlIiIDQKKy5JWCBJdGVtICItciIKKy5QRCAwCisuSVAgIlxmQlwtXC1yZWxvY1xmUiIgNAorLklYIEl0ZW0gIi0tcmVsb2MiCisuUEQKK1ByaW50IHRoZSByZWxvY2F0aW9uIGVudHJpZXMgb2YgdGhlIGZpbGUuICBJZiB1c2VkIHdpdGggXGZCXC1kXGZSIG9yCitcJlxmQlwtRFxmUiwgdGhlIHJlbG9jYXRpb25zIGFyZSBwcmludGVkIGludGVyc3BlcnNlZCB3aXRoIHRoZQorZGlzYXNzZW1ibHkuCisuSVAgIlxmQlwtUlxmUiIgNAorLklYIEl0ZW0gIi1SIgorLlBEIDAKKy5JUCAiXGZCXC1cLWR5bmFtaWNcLXJlbG9jXGZSIiA0CisuSVggSXRlbSAiLS1keW5hbWljLXJlbG9jIgorLlBECitQcmludCB0aGUgZHluYW1pYyByZWxvY2F0aW9uIGVudHJpZXMgb2YgdGhlIGZpbGUuICBUaGlzIGlzIG9ubHkKK21lYW5pbmdmdWwgZm9yIGR5bmFtaWMgb2JqZWN0cywgc3VjaCBhcyBjZXJ0YWluIHR5cGVzIG9mIHNoYXJlZAorbGlicmFyaWVzLiAgQXMgZm9yIFxmQlwtclxmUiwgaWYgdXNlZCB3aXRoIFxmQlwtZFxmUiBvcgorXCZcZkJcLURcZlIsIHRoZSByZWxvY2F0aW9ucyBhcmUgcHJpbnRlZCBpbnRlcnNwZXJzZWQgd2l0aCB0aGUKK2Rpc2Fzc2VtYmx5LgorLklQICJcZkJcLXNcZlIiIDQKKy5JWCBJdGVtICItcyIKKy5QRCAwCisuSVAgIlxmQlwtXC1mdWxsXC1jb250ZW50c1xmUiIgNAorLklYIEl0ZW0gIi0tZnVsbC1jb250ZW50cyIKKy5QRAorRGlzcGxheSB0aGUgZnVsbCBjb250ZW50cyBvZiBhbnkgc2VjdGlvbnMgcmVxdWVzdGVkLiAgQnkgZGVmYXVsdCBhbGwKK25vbi1lbXB0eSBzZWN0aW9ucyBhcmUgZGlzcGxheWVkLgorLklQICJcZkJcLVNcZlIiIDQKKy5JWCBJdGVtICItUyIKKy5QRCAwCisuSVAgIlxmQlwtXC1zb3VyY2VcZlIiIDQKKy5JWCBJdGVtICItLXNvdXJjZSIKKy5QRAorRGlzcGxheSBzb3VyY2UgY29kZSBpbnRlcm1peGVkIHdpdGggZGlzYXNzZW1ibHksIGlmIHBvc3NpYmxlLiAgSW1wbGllcworXCZcZkJcLWRcZlIuCisuSVAgIlxmQlwtXC1wcmVmaXg9XGZSXGZJcHJlZml4XGZSIiA0CisuSVggSXRlbSAiLS1wcmVmaXg9cHJlZml4IgorU3BlY2lmeSBcZklwcmVmaXhcZlIgdG8gYWRkIHRvIHRoZSBhYnNvbHV0ZSBwYXRocyB3aGVuIHVzZWQgd2l0aAorXCZcZkJcLVNcZlIuCisuSVAgIlxmQlwtXC1wcmVmaXhcLXN0cmlwPVxmUlxmSWxldmVsXGZSIiA0CisuSVggSXRlbSAiLS1wcmVmaXgtc3RyaXA9bGV2ZWwiCitJbmRpY2F0ZSBob3cgbWFueSBpbml0aWFsIGRpcmVjdG9yeSBuYW1lcyB0byBzdHJpcCBvZmYgdGhlIGhhcmR3aXJlZAorYWJzb2x1dGUgcGF0aHMuIEl0IGhhcyBubyBlZmZlY3Qgd2l0aG91dCBcZkJcLVwtcHJlZml4PVxmUlxmSXByZWZpeFxmUi4KKy5JUCAiXGZCXC1cLXNob3dcLXJhd1wtaW5zblxmUiIgNAorLklYIEl0ZW0gIi0tc2hvdy1yYXctaW5zbiIKK1doZW4gZGlzYXNzZW1ibGluZyBpbnN0cnVjdGlvbnMsIHByaW50IHRoZSBpbnN0cnVjdGlvbiBpbiBoZXggYXMgd2VsbCBhcworaW4gc3ltYm9saWMgZm9ybS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgZXhjZXB0IHdoZW4KK1wmXGZCXC1cLXByZWZpeFwtYWRkcmVzc2VzXGZSIGlzIHVzZWQuCisuSVAgIlxmQlwtXC1ub1wtc2hvd1wtcmF3XC1pbnNuXGZSIiA0CisuSVggSXRlbSAiLS1uby1zaG93LXJhdy1pbnNuIgorV2hlbiBkaXNhc3NlbWJsaW5nIGluc3RydWN0aW9ucywgZG8gbm90IHByaW50IHRoZSBpbnN0cnVjdGlvbiBieXRlcy4KK1RoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiBcZkJcLVwtcHJlZml4XC1hZGRyZXNzZXNcZlIgaXMgdXNlZC4KKy5JUCAiXGZCXC1cLWluc25cLXdpZHRoPVxmUlxmSXdpZHRoXGZSIiA0CisuSVggSXRlbSAiLS1pbnNuLXdpZHRoPXdpZHRoIgorRGlzcGxheSBcZkl3aWR0aFxmUiBieXRlcyBvbiBhIHNpbmdsZSBsaW5lIHdoZW4gZGlzYXNzZW1ibGluZworaW5zdHJ1Y3Rpb25zLgorLklQICJcZkJcLVdbbExpYXBybWZGc29SdF1cZlIiIDQKKy5JWCBJdGVtICItV1tsTGlhcHJtZkZzb1J0XSIKKy5QRCAwCisuSVAgIlxmQlwtXC1kd2FyZls9cmF3bGluZSw9ZGVjb2RlZGxpbmUsPWluZm8sPWFiYnJldiw9cHVibmFtZXMsPWFyYW5nZXMsPW1hY3JvLD1mcmFtZXMsPWZyYW1lc1wtaW50ZXJwLD1zdHIsPWxvYyw9UmFuZ2VzLD1wdWJ0eXBlcyw9dHJhY2VfaW5mbyw9dHJhY2VfYWJicmV2LD10cmFjZV9hcmFuZ2VzLD1nZGJfaW5kZXhdXGZSIiA0CisuSVggSXRlbSAiLS1kd2FyZls9cmF3bGluZSw9ZGVjb2RlZGxpbmUsPWluZm8sPWFiYnJldiw9cHVibmFtZXMsPWFyYW5nZXMsPW1hY3JvLD1mcmFtZXMsPWZyYW1lcy1pbnRlcnAsPXN0ciw9bG9jLD1SYW5nZXMsPXB1YnR5cGVzLD10cmFjZV9pbmZvLD10cmFjZV9hYmJyZXYsPXRyYWNlX2FyYW5nZXMsPWdkYl9pbmRleF0iCisuUEQKK0Rpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUgZGVidWcgc2VjdGlvbnMgaW4gdGhlIGZpbGUsIGlmIGFueSBhcmUKK3ByZXNlbnQuICBJZiBvbmUgb2YgdGhlIG9wdGlvbmFsIGxldHRlcnMgb3Igd29yZHMgZm9sbG93cyB0aGUgc3dpdGNoCit0aGVuIG9ubHkgZGF0YSBmb3VuZCBpbiB0aG9zZSBzcGVjaWZpYyBzZWN0aW9ucyB3aWxsIGJlIGR1bXBlZC4KKy5TcAorTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNpbmdsZSBsZXR0ZXIgb3B0aW9uIHRvIGRpc3BsYXkgdGhlIGNvbnRlbnQgb2YKK3RyYWNlIHNlY3Rpb25zIG9yIC5nZGJfaW5kZXguCisuU3AKK05vdGU6IHRoZSBvdXRwdXQgZnJvbSB0aGUgXGZCPWluZm9cZlIgb3B0aW9uIGNhbiBhbHNvIGJlIGFmZmVjdGVkCitieSB0aGUgb3B0aW9ucyBcZkJcLVwtZHdhcmZcLWRlcHRoXGZSLCB0aGUgXGZCXC1cLWR3YXJmXC1zdGFydFxmUiBhbmQKK3RoZSBcZkJcLVwtZHdhcmZcLWNoZWNrXGZSLgorLklQICJcZkJcLVwtZHdhcmZcLWRlcHRoPVxmUlxmSW5cZlIiIDQKKy5JWCBJdGVtICItLWR3YXJmLWRlcHRoPW4iCitMaW1pdCB0aGUgZHVtcCBvZiB0aGUgXGYoQ1dcKihDYC5kZWJ1Z19pbmZvXCooQydcZlIgc2VjdGlvbiB0byBcZkluXGZSIGNoaWxkcmVuLgorVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aXRoIFxmQlwtXC1kd2FyZj1pbmZvXGZSLiAgVGhlIGRlZmF1bHQgaXMKK3RvIHByaW50IGFsbCBESUVzOyB0aGUgc3BlY2lhbCB2YWx1ZSAwIGZvciBcZkluXGZSIHdpbGwgYWxzbyBoYXZlIHRoaXMKK2VmZmVjdC4KKy5TcAorV2l0aCBhIG5vbi16ZXJvIHZhbHVlIGZvciBcZkluXGZSLCBESUVzIGF0IG9yIGRlZXBlciB0aGFuIFxmSW5cZlIKK2xldmVscyB3aWxsIG5vdCBiZSBwcmludGVkLiAgVGhlIHJhbmdlIGZvciBcZkluXGZSIGlzIHplcm8tYmFzZWQuCisuSVAgIlxmQlwtXC1kd2FyZlwtc3RhcnQ9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi0tZHdhcmYtc3RhcnQ9biIKK1ByaW50IG9ubHkgRElFcyBiZWdpbm5pbmcgd2l0aCB0aGUgXHMtMURJRVxzMCBudW1iZXJlZCBcZkluXGZSLiAgVGhpcyBpcyBvbmx5Cit1c2VmdWwgd2l0aCBcZkJcLVwtZHdhcmY9aW5mb1xmUi4KKy5TcAorSWYgc3BlY2lmaWVkLCB0aGlzIG9wdGlvbiB3aWxsIHN1cHByZXNzIHByaW50aW5nIG9mIGFueSBoZWFkZXIKK2luZm9ybWF0aW9uIGFuZCBhbGwgRElFcyBiZWZvcmUgdGhlIFxzLTFESUVcczAgbnVtYmVyZWQgXGZJblxmUi4gIE9ubHkKK3NpYmxpbmdzIGFuZCBjaGlsZHJlbiBvZiB0aGUgc3BlY2lmaWVkIFxzLTFESUVcczAgd2lsbCBiZSBwcmludGVkLgorLlNwCitUaGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggXGZCXC1cLWR3YXJmXC1kZXB0aFxmUi4KKy5JUCAiXGZCXC1cLWR3YXJmXC1jaGVja1xmUiIgNAorLklYIEl0ZW0gIi0tZHdhcmYtY2hlY2siCitFbmFibGUgYWRkaXRpb25hbCBjaGVja3MgZm9yIGNvbnNpc3RlbmN5IG9mIER3YXJmIGluZm9ybWF0aW9uLgorLklQICJcZkJcLUdcZlIiIDQKKy5JWCBJdGVtICItRyIKKy5QRCAwCisuSVAgIlxmQlwtXC1zdGFic1xmUiIgNAorLklYIEl0ZW0gIi0tc3RhYnMiCisuUEQKK0Rpc3BsYXkgdGhlIGZ1bGwgY29udGVudHMgb2YgYW55IHNlY3Rpb25zIHJlcXVlc3RlZC4gIERpc3BsYXkgdGhlCitjb250ZW50cyBvZiB0aGUgLnN0YWIgYW5kIC5zdGFiLmluZGV4IGFuZCAuc3RhYi5leGNsIHNlY3Rpb25zIGZyb20gYW4KK1wmXHMtMUVMRlxzMCBmaWxlLiAgVGhpcyBpcyBvbmx5IHVzZWZ1bCBvbiBzeXN0ZW1zIChzdWNoIGFzIFNvbGFyaXMgMi4wKSBpbiB3aGljaAorXCZcZihDV1wqKENgLnN0YWJcKihDJ1xmUiBkZWJ1Z2dpbmcgc3ltYm9sLXRhYmxlIGVudHJpZXMgYXJlIGNhcnJpZWQgaW4gYW4gXHMtMUVMRlxzMAorc2VjdGlvbi4gIEluIG1vc3Qgb3RoZXIgZmlsZSBmb3JtYXRzLCBkZWJ1Z2dpbmcgc3ltYm9sLXRhYmxlIGVudHJpZXMgYXJlCitpbnRlcmxlYXZlZCB3aXRoIGxpbmthZ2Ugc3ltYm9scywgYW5kIGFyZSB2aXNpYmxlIGluIHRoZSBcZkJcLVwtc3ltc1xmUgorb3V0cHV0LgorLklQICJcZkJcLVwtc3RhcnRcLWFkZHJlc3M9XGZSXGZJYWRkcmVzc1xmUiIgNAorLklYIEl0ZW0gIi0tc3RhcnQtYWRkcmVzcz1hZGRyZXNzIgorU3RhcnQgZGlzcGxheWluZyBkYXRhIGF0IHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4gIFRoaXMgYWZmZWN0cyB0aGUgb3V0cHV0CitvZiB0aGUgXGZCXC1kXGZSLCBcZkJcLXJcZlIgYW5kIFxmQlwtc1xmUiBvcHRpb25zLgorLklQICJcZkJcLVwtc3RvcFwtYWRkcmVzcz1cZlJcZklhZGRyZXNzXGZSIiA0CisuSVggSXRlbSAiLS1zdG9wLWFkZHJlc3M9YWRkcmVzcyIKK1N0b3AgZGlzcGxheWluZyBkYXRhIGF0IHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4gIFRoaXMgYWZmZWN0cyB0aGUgb3V0cHV0CitvZiB0aGUgXGZCXC1kXGZSLCBcZkJcLXJcZlIgYW5kIFxmQlwtc1xmUiBvcHRpb25zLgorLklQICJcZkJcLXRcZlIiIDQKKy5JWCBJdGVtICItdCIKKy5QRCAwCisuSVAgIlxmQlwtXC1zeW1zXGZSIiA0CisuSVggSXRlbSAiLS1zeW1zIgorLlBECitQcmludCB0aGUgc3ltYm9sIHRhYmxlIGVudHJpZXMgb2YgdGhlIGZpbGUuCitUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBcZkJubVxmUiBwcm9ncmFtLAorYWx0aG91Z2ggdGhlIGRpc3BsYXkgZm9ybWF0IGlzIGRpZmZlcmVudC4gIFRoZSBmb3JtYXQgb2YgdGhlIG91dHB1dAorZGVwZW5kcyB1cG9uIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgYmVpbmcgZHVtcGVkLCBidXQgdGhlcmUgYXJlIHR3byBtYWluCit0eXBlcy4gIE9uZSBsb29rcyBsaWtlIHRoaXM6CisuU3AKKy5WYiAyCitcJiAgICAgICAgWyAgNF0oc2VjICAzKShmbCAweDAwKSh0eSAgIDApKHNjbCAgIDMpIChueCAxKSAweDAwMDAwMDAwIC5ic3MKK1wmICAgICAgICBbICA2XShzZWMgIDEpKGZsIDB4MDApKHR5ICAgMCkoc2NsICAgMikgKG54IDApIDB4MDAwMDAwMDAgZnJlZAorLlZlCisuU3AKK3doZXJlIHRoZSBudW1iZXIgaW5zaWRlIHRoZSBzcXVhcmUgYnJhY2tldHMgaXMgdGhlIG51bWJlciBvZiB0aGUgZW50cnkKK2luIHRoZSBzeW1ib2wgdGFibGUsIHRoZSBcZklzZWNcZlIgbnVtYmVyIGlzIHRoZSBzZWN0aW9uIG51bWJlciwgdGhlCitcJlxmSWZsXGZSIHZhbHVlIGFyZSB0aGUgc3ltYm9sJ3MgZmxhZyBiaXRzLCB0aGUgXGZJdHlcZlIgbnVtYmVyIGlzIHRoZQorc3ltYm9sJ3MgdHlwZSwgdGhlIFxmSXNjbFxmUiBudW1iZXIgaXMgdGhlIHN5bWJvbCdzIHN0b3JhZ2UgY2xhc3MgYW5kCit0aGUgXGZJbnhcZlIgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBhdXhpbGFyeSBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aAordGhlIHN5bWJvbC4gIFRoZSBsYXN0IHR3byBmaWVsZHMgYXJlIHRoZSBzeW1ib2wncyB2YWx1ZSBhbmQgaXRzIG5hbWUuCisuU3AKK1RoZSBvdGhlciBjb21tb24gb3V0cHV0IGZvcm1hdCwgdXN1YWxseSBzZWVuIHdpdGggXHMtMUVMRlxzMCBiYXNlZCBmaWxlcywKK2xvb2tzIGxpa2UgdGhpczoKKy5TcAorLlZiIDIKK1wmICAgICAgICAwMDAwMDAwMCBsICAgIGQgIC5ic3MgICAwMDAwMDAwMCAuYnNzCitcJiAgICAgICAgMDAwMDAwMDAgZyAgICAgICAudGV4dCAgMDAwMDAwMDAgZnJlZAorLlZlCisuU3AKK0hlcmUgdGhlIGZpcnN0IG51bWJlciBpcyB0aGUgc3ltYm9sJ3MgdmFsdWUgKHNvbWV0aW1lcyByZWZlcmVkIHRvIGFzCitpdHMgYWRkcmVzcykuICBUaGUgbmV4dCBmaWVsZCBpcyBhY3R1YWxseSBhIHNldCBvZiBjaGFyYWN0ZXJzIGFuZAorc3BhY2VzIGluZGljYXRpbmcgdGhlIGZsYWcgYml0cyB0aGF0IGFyZSBzZXQgb24gdGhlIHN5bWJvbC4gIFRoZXNlCitjaGFyYWN0ZXJzIGFyZSBkZXNjcmliZWQgYmVsb3cuICBOZXh0IGlzIHRoZSBzZWN0aW9uIHdpdGggd2hpY2ggdGhlCitzeW1ib2wgaXMgYXNzb2NpYXRlZCBvciBcZkkqQUJTKlxmUiBpZiB0aGUgc2VjdGlvbiBpcyBhYnNvbHV0ZSAoaWUKK25vdCBjb25uZWN0ZWQgd2l0aCBhbnkgc2VjdGlvbiksIG9yIFxmSSpVTkQqXGZSIGlmIHRoZSBzZWN0aW9uIGlzCityZWZlcmVuY2VkIGluIHRoZSBmaWxlIGJlaW5nIGR1bXBlZCwgYnV0IG5vdCBkZWZpbmVkIHRoZXJlLgorLlNwCitBZnRlciB0aGUgc2VjdGlvbiBuYW1lIGNvbWVzIGFub3RoZXIgZmllbGQsIGEgbnVtYmVyLCB3aGljaCBmb3IgY29tbW9uCitzeW1ib2xzIGlzIHRoZSBhbGlnbm1lbnQgYW5kIGZvciBvdGhlciBzeW1ib2wgaXMgdGhlIHNpemUuICBGaW5hbGx5Cit0aGUgc3ltYm9sJ3MgbmFtZSBpcyBkaXNwbGF5ZWQuCisuU3AKK1RoZSBmbGFnIGNoYXJhY3RlcnMgYXJlIGRpdmlkZWQgaW50byA3IGdyb3VwcyBhcyBmb2xsb3dzOgorLlJTIDQKKy5pZSBuIC5JUCAiIiJsIiIiIDQKKy5lbCAuSVAgIlxmKENXbFxmUiIgNAorLklYIEl0ZW0gImwiCisuUEQgMAorLmllIG4gLklQICIiImciIiIgNAorLmVsIC5JUCAiXGYoQ1dnXGZSIiA0CisuSVggSXRlbSAiZyIKKy5pZSBuIC5JUCAiIiJ1IiIiIDQKKy5lbCAuSVAgIlxmKENXdVxmUiIgNAorLklYIEl0ZW0gInUiCisuaWUgbiAuSVAgIiIiISIiIiA0CisuZWwgLklQICJcZihDVyFcZlIiIDQKKy5JWCBJdGVtICIhIgorLlBECitUaGUgc3ltYm9sIGlzIGEgbG9jYWwgKGwpLCBnbG9iYWwgKGcpLCB1bmlxdWUgZ2xvYmFsICh1KSwgbmVpdGhlcgorZ2xvYmFsIG5vciBsb2NhbCAoYSBzcGFjZSkgb3IgYm90aCBnbG9iYWwgYW5kIGxvY2FsICghKS4gIEEKK3N5bWJvbCBjYW4gYmUgbmVpdGhlciBsb2NhbCBvciBnbG9iYWwgZm9yIGEgdmFyaWV0eSBvZiByZWFzb25zLCBlLmcuLAorYmVjYXVzZSBpdCBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcsIGJ1dCBpdCBpcyBwcm9iYWJseSBhbiBpbmRpY2F0aW9uIG9mCithIGJ1ZyBpZiBpdCBpcyBldmVyIGJvdGggbG9jYWwgYW5kIGdsb2JhbC4gIFVuaXF1ZSBnbG9iYWwgc3ltYm9scyBhcmUKK2EgXHMtMUdOVVxzMCBleHRlbnNpb24gdG8gdGhlIHN0YW5kYXJkIHNldCBvZiBccy0xRUxGXHMwIHN5bWJvbCBiaW5kaW5ncy4gIEZvciBzdWNoCithIHN5bWJvbCB0aGUgZHluYW1pYyBsaW5rZXIgd2lsbCBtYWtlIHN1cmUgdGhhdCBpbiB0aGUgZW50aXJlIHByb2Nlc3MKK3RoZXJlIGlzIGp1c3Qgb25lIHN5bWJvbCB3aXRoIHRoaXMgbmFtZSBhbmQgdHlwZSBpbiB1c2UuCisuaWUgbiAuSVAgIiIidyIiIiA0CisuZWwgLklQICJcZihDV3dcZlIiIDQKKy5JWCBJdGVtICJ3IgorVGhlIHN5bWJvbCBpcyB3ZWFrICh3KSBvciBzdHJvbmcgKGEgc3BhY2UpLgorLmllIG4gLklQICIiIkMiIiIgNAorLmVsIC5JUCAiXGYoQ1dDXGZSIiA0CisuSVggSXRlbSAiQyIKK1RoZSBzeW1ib2wgZGVub3RlcyBhIGNvbnN0cnVjdG9yIChDKSBvciBhbiBvcmRpbmFyeSBzeW1ib2wgKGEgc3BhY2UpLgorLmllIG4gLklQICIiIlciIiIgNAorLmVsIC5JUCAiXGYoQ1dXXGZSIiA0CisuSVggSXRlbSAiVyIKK1RoZSBzeW1ib2wgaXMgYSB3YXJuaW5nIChXKSBvciBhIG5vcm1hbCBzeW1ib2wgKGEgc3BhY2UpLiAgQSB3YXJuaW5nCitzeW1ib2wncyBuYW1lIGlzIGEgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaWYgdGhlIHN5bWJvbCBmb2xsb3dpbmcgdGhlCit3YXJuaW5nIHN5bWJvbCBpcyBldmVyIHJlZmVyZW5jZWQuCisuaWUgbiAuSVAgIiIiSSIiIiA0CisuZWwgLklQICJcZihDV0lcZlIiIDQKKy5JWCBJdGVtICJJIgorLlBEIDAKKy5pZSBuIC5JUCAiIiJpIiIiIDQKKy5lbCAuSVAgIlxmKENXaVxmUiIgNAorLklYIEl0ZW0gImkiCisuUEQKK1RoZSBzeW1ib2wgaXMgYW4gaW5kaXJlY3QgcmVmZXJlbmNlIHRvIGFub3RoZXIgc3ltYm9sIChJKSwgYSBmdW5jdGlvbgordG8gYmUgZXZhbHVhdGVkIGR1cmluZyByZWxvYyBwcm9jZXNzaW5nIChpKSBvciBhIG5vcm1hbCBzeW1ib2wgKGEKK3NwYWNlKS4KKy5pZSBuIC5JUCAiIiJkIiIiIDQKKy5lbCAuSVAgIlxmKENXZFxmUiIgNAorLklYIEl0ZW0gImQiCisuUEQgMAorLmllIG4gLklQICIiIkQiIiIgNAorLmVsIC5JUCAiXGYoQ1dEXGZSIiA0CisuSVggSXRlbSAiRCIKKy5QRAorVGhlIHN5bWJvbCBpcyBhIGRlYnVnZ2luZyBzeW1ib2wgKGQpIG9yIGEgZHluYW1pYyBzeW1ib2wgKEQpIG9yIGEKK25vcm1hbCBzeW1ib2wgKGEgc3BhY2UpLgorLmllIG4gLklQICIiIkYiIiIgNAorLmVsIC5JUCAiXGYoQ1dGXGZSIiA0CisuSVggSXRlbSAiRiIKKy5QRCAwCisuaWUgbiAuSVAgIiIiZiIiIiA0CisuZWwgLklQICJcZihDV2ZcZlIiIDQKKy5JWCBJdGVtICJmIgorLmllIG4gLklQICIiIk8iIiIgNAorLmVsIC5JUCAiXGYoQ1dPXGZSIiA0CisuSVggSXRlbSAiTyIKKy5QRAorVGhlIHN5bWJvbCBpcyB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIChGKSBvciBhIGZpbGUgKGYpIG9yIGFuIG9iamVjdAorKE8pIG9yIGp1c3QgYSBub3JtYWwgc3ltYm9sIChhIHNwYWNlKS4KKy5SRQorLlJTIDQKKy5SRQorLklQICJcZkJcLVRcZlIiIDQKKy5JWCBJdGVtICItVCIKKy5QRCAwCisuSVAgIlxmQlwtXC1keW5hbWljXC1zeW1zXGZSIiA0CisuSVggSXRlbSAiLS1keW5hbWljLXN5bXMiCisuUEQKK1ByaW50IHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZSBlbnRyaWVzIG9mIHRoZSBmaWxlLiAgVGhpcyBpcyBvbmx5CittZWFuaW5nZnVsIGZvciBkeW5hbWljIG9iamVjdHMsIHN1Y2ggYXMgY2VydGFpbiB0eXBlcyBvZiBzaGFyZWQKK2xpYnJhcmllcy4gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIFxmQm5tXGZSCitwcm9ncmFtIHdoZW4gZ2l2ZW4gdGhlIFxmQlwtRFxmUiAoXGZCXC1cLWR5bmFtaWNcZlIpIG9wdGlvbi4KKy5JUCAiXGZCXC1cLXNwZWNpYWxcLXN5bXNcZlIiIDQKKy5JWCBJdGVtICItLXNwZWNpYWwtc3ltcyIKK1doZW4gZGlzcGxheWluZyBzeW1ib2xzIGluY2x1ZGUgdGhvc2Ugd2hpY2ggdGhlIHRhcmdldCBjb25zaWRlcnMgdG8gYmUKK3NwZWNpYWwgaW4gc29tZSB3YXkgYW5kIHdoaWNoIHdvdWxkIG5vdCBub3JtYWxseSBiZSBvZiBpbnRlcmVzdCB0byB0aGUKK3VzZXIuCisuSVAgIlxmQlwtVlxmUiIgNAorLklYIEl0ZW0gIi1WIgorLlBEIDAKKy5JUCAiXGZCXC1cLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24iCisuUEQKK1ByaW50IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBcZkJvYmpkdW1wXGZSIGFuZCBleGl0LgorLklQICJcZkJcLXhcZlIiIDQKKy5JWCBJdGVtICIteCIKKy5QRCAwCisuSVAgIlxmQlwtXC1hbGxcLWhlYWRlcnNcZlIiIDQKKy5JWCBJdGVtICItLWFsbC1oZWFkZXJzIgorLlBECitEaXNwbGF5IGFsbCBhdmFpbGFibGUgaGVhZGVyIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgdGhlIHN5bWJvbCB0YWJsZSBhbmQKK3JlbG9jYXRpb24gZW50cmllcy4gIFVzaW5nIFxmQlwteFxmUiBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgYWxsIG9mCitcJlxmQlwtYSBcLWYgXC1oIFwtcCBcLXIgXC10XGZSLgorLklQICJcZkJcLXdcZlIiIDQKKy5JWCBJdGVtICItdyIKKy5QRCAwCisuSVAgIlxmQlwtXC13aWRlXGZSIiA0CisuSVggSXRlbSAiLS13aWRlIgorLlBECitGb3JtYXQgc29tZSBsaW5lcyBmb3Igb3V0cHV0IGRldmljZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiA4MCBjb2x1bW5zLgorQWxzbyBkbyBub3QgdHJ1bmNhdGUgc3ltYm9sIG5hbWVzIHdoZW4gdGhleSBhcmUgZGlzcGxheWVkLgorLklQICJcZkJcLXpcZlIiIDQKKy5JWCBJdGVtICIteiIKKy5QRCAwCisuSVAgIlxmQlwtXC1kaXNhc3NlbWJsZVwtemVyb2VzXGZSIiA0CisuSVggSXRlbSAiLS1kaXNhc3NlbWJsZS16ZXJvZXMiCisuUEQKK05vcm1hbGx5IHRoZSBkaXNhc3NlbWJseSBvdXRwdXQgd2lsbCBza2lwIGJsb2NrcyBvZiB6ZXJvZXMuICBUaGlzCitvcHRpb24gZGlyZWN0cyB0aGUgZGlzYXNzZW1ibGVyIHRvIGRpc2Fzc2VtYmxlIHRob3NlIGJsb2NrcywganVzdCBsaWtlCithbnkgb3RoZXIgZGF0YS4KKy5JUCAiXGZCQFxmUlxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICJAZmlsZSIKK1JlYWQgY29tbWFuZC1saW5lIG9wdGlvbnMgZnJvbSBcZklmaWxlXGZSLiAgVGhlIG9wdGlvbnMgcmVhZCBhcmUKK2luc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBAXGZJZmlsZVxmUiBvcHRpb24uICBJZiBcZklmaWxlXGZSCitkb2VzIG5vdCBleGlzdCwgb3IgY2Fubm90IGJlIHJlYWQsIHRoZW4gdGhlIG9wdGlvbiB3aWxsIGJlIHRyZWF0ZWQKK2xpdGVyYWxseSwgYW5kIG5vdCByZW1vdmVkLgorLlNwCitPcHRpb25zIGluIFxmSWZpbGVcZlIgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSB3aGl0ZXNwYWNlCitjaGFyYWN0ZXIgbWF5IGJlIGluY2x1ZGVkIGluIGFuIG9wdGlvbiBieSBzdXJyb3VuZGluZyB0aGUgZW50aXJlCitvcHRpb24gaW4gZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLiAgQW55IGNoYXJhY3RlciAoaW5jbHVkaW5nIGEKK2JhY2tzbGFzaCkgbWF5IGJlIGluY2x1ZGVkIGJ5IHByZWZpeGluZyB0aGUgY2hhcmFjdGVyIHRvIGJlIGluY2x1ZGVkCit3aXRoIGEgYmFja3NsYXNoLiAgVGhlIFxmSWZpbGVcZlIgbWF5IGl0c2VsZiBjb250YWluIGFkZGl0aW9uYWwKK0BcZklmaWxlXGZSIG9wdGlvbnM7IGFueSBzdWNoIG9wdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgcmVjdXJzaXZlbHkuCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitcJlxmSW5tXGZSXHwoMSksIFxmSXJlYWRlbGZcZlJcfCgxKSwgYW5kIHRoZSBJbmZvIGVudHJpZXMgZm9yIFxmSWJpbnV0aWxzXGZSLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIFwqKEwiXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZVwqKFIiLgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLXBrZy1jb25maWcuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1wa2ctY29uZmlnLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5Y2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1wa2ctY29uZmlnLjEKQEAgLTAsMCArMSw0NjggQEAKKy5cIiAKKy5cIiBwa2ctY29uZmlnIG1hbnVhbCBwYWdlLgorLlwiIChDKSBSZWQgSGF0LCBJbmMuIGJhc2VkIG9uIGdub21lLWNvbmZpZyBtYW4gcGFnZSAoQykgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAZ251Lm9yZykKKy5cIgorLgorLlwiIE1hY3JvcyB0byBkaXNhYmxlIGdyb2ZmIGxpbmUgYWRqdXN0bWVudCB3YXJuaW5ncyB0aGF0IHdlIGNhbid0IGVhc2lseQorLlwiIGZpeCBpbiB0aGUgdGV4dC4KKy5pZSBcbiguZyBce1wKKy4gIGRlIERXCisuICAgIG5yIC5vbGR3YXJuIFxuWy53YXJuXQorLiAgICB3YXJuIDAKKy4gIC4KKy4gIGRlIEVXCisuICAgIHdhcm4gXG5bLm9sZHdhcm5dCisuICAuCisuXH0KKy5lbCBcCisuXHsgXAorLiAgZGUgRFcKKy4gIC4KKy4gIGRlIEVXCisuICAuCisuXH0KKy4KKy5USCBwa2ctY29uZmlnIDEKKy5TSCBOQU1FCitwa2ctY29uZmlnIFwtIFJldHVybiBtZXRhaW5mb3JtYXRpb24gYWJvdXQgaW5zdGFsbGVkIGxpYnJhcmllcworLlNIIFNZTk9QU0lTCisuUFAKKy5CIHBrZy1jb25maWcKK1tcLVwtbW9kdmVyc2lvbl0gW1wtXC1oZWxwXSBbXC1cLXByaW50LWVycm9yc10gW1wtXC1zaWxlbmNlLWVycm9yc10gCitbXC1cLWNmbGFnc10gW1wtXC1saWJzXSBbXC1cLWxpYnMtb25seS1MXQorW1wtXC1saWJzLW9ubHktbF0gW1wtXC1jZmxhZ3Mtb25seS1JXQorW1wtXC12YXJpYWJsZT1WQVJJQUJMRU5BTUVdCitbXC1cLWRlZmluZS12YXJpYWJsZT1WQVJJQUJMRU5BTUU9VkFSSUFCTEVWQUxVRV0KK1tcLVwtcHJpbnQtdmFyaWFibGVzXQorW1wtXC11bmluc3RhbGxlZF0KK1tcLVwtZXhpc3RzXSBbXC1cLWF0bGVhc3QtdmVyc2lvbj1WRVJTSU9OXSBbXC1cLWV4YWN0LXZlcnNpb249VkVSU0lPTl0KK1tcLVwtbWF4LXZlcnNpb249VkVSU0lPTl0gW1wtXC1saXN0XC1hbGxdIFtMSUJSQVJJRVMuLi5dCitbXC1cLXByaW50LXByb3ZpZGVzXSBbXC1cLXByaW50LXJlcXVpcmVzXSBbXC1cLXByaW50LXJlcXVpcmVzLXByaXZhdGVdIFtMSUJSQVJJRVMuLi5dCisuU0ggREVTQ1JJUFRJT04KKworVGhlIFxmSXBrZy1jb25maWdcZlAgcHJvZ3JhbSBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0CitpbnN0YWxsZWQgbGlicmFyaWVzIGluIHRoZSBzeXN0ZW0uICBJdCBpcyB0eXBpY2FsbHkgdXNlZCB0byBjb21waWxlCithbmQgbGluayBhZ2FpbnN0IG9uZSBvciBtb3JlIGxpYnJhcmllcy4gIEhlcmUgaXMgYSB0eXBpY2FsIHVzYWdlCitzY2VuYXJpbyBpbiBhIE1ha2VmaWxlOgorLlBQCisubmYKK3Byb2dyYW06IHByb2dyYW0uYworCWNjIHByb2dyYW0uYyAkKHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGdub21ldWkpCisuZmkKKy5QUAorLkkgcGtnLWNvbmZpZworcmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2VzIGZyb20gc3BlY2lhbCBtZXRhZGF0YQorZmlsZXMuIFRoZXNlIGZpbGVzIGFyZSBuYW1lZCBhZnRlciB0aGUgcGFja2FnZSwgYW5kIGhhcyBhCisuSSAucGMKK2V4dGVuc2lvbi4gIE9uIG1vc3Qgc3lzdGVtcywgXGZJcGtnLWNvbmZpZ1xmUCBsb29rcyBpbgorLkkvdXNyL2xpYi9wa2djb25maWcsIC91c3Ivc2hhcmUvcGtnY29uZmlnLCAvdXNyL2xvY2FsL2xpYi9wa2djb25maWcKK2FuZAorLkkvdXNyL2xvY2FsL3NoYXJlL3BrZ2NvbmZpZworIGZvciB0aGVzZSBmaWxlcy4gIEl0IHdpbGwgYWRkaXRpb25hbGx5IGxvb2sgaW4gdGhlIGNvbG9uLXNlcGFyYXRlZAorKG9uIFdpbmRvd3MsIHNlbWljb2xvbi1zZXBhcmF0ZWQpIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IHRoZQorUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLgorLlBQCitUaGUgcGFja2FnZSBuYW1lIHNwZWNpZmllZCBvbiB0aGUgXGZJcGtnLWNvbmZpZ1xmUCBjb21tYW5kIGxpbmUgaXMKK2RlZmluZWQgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIG1ldGFkYXRhIGZpbGUsIG1pbnVzIHRoZSBcZkkucGNcZlAKK2V4dGVuc2lvbi4gSWYgYSBsaWJyYXJ5IGNhbiBpbnN0YWxsIG11bHRpcGxlIHZlcnNpb25zIHNpbXVsdGFuZW91c2x5LAoraXQgbXVzdCBnaXZlIGVhY2ggdmVyc2lvbiBpdHMgb3duIG5hbWUgKGZvciBleGFtcGxlLCBHVEsgMS4yIG1pZ2h0CitoYXZlIHRoZSBwYWNrYWdlIG5hbWUgImd0aysiIHdoaWxlIEdUSyAyLjAgaGFzICJndGsrLTIuMCIpLgorLlwiCisuU0ggT1BUSU9OUworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQ6CisuVFAKKy5JICItLW1vZHZlcnNpb24iCitSZXF1ZXN0cyB0aGF0IHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIG9mIHRoZSBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uCit0aGUgY29tbWFuZCBsaW5lIGJlIGRpc3BsYXllZC4gIElmIFxmSXBrZy1jb25maWdcZlAgY2FuIGZpbmQgYWxsIHRoZQorbGlicmFyaWVzIG9uIHRoZSBjb21tYW5kIGxpbmUsIGVhY2ggbGlicmFyeSdzIHZlcnNpb24gc3RyaW5nIGlzCitwcmludGVkIHRvIHN0ZG91dCwgb25lIHZlcnNpb24gcGVyIGxpbmUuIEluIHRoaXMgY2FzZSBcZklwa2ctY29uZmlnXGZQCitleGl0cyBzdWNjZXNzZnVsbHkuIElmIG9uZSBvciBtb3JlIGxpYnJhcmllcyBpcyB1bmtub3duLAorLkkgcGtnLWNvbmZpZworZXhpdHMgd2l0aCBhIG5vbnplcm8gY29kZSwgYW5kIHRoZSBjb250ZW50cyBvZiBzdGRvdXQgYXJlIHVuZGVmaW5lZC4KKy5UUAorLkkgIi0taGVscCIKK0Rpc3BsYXlzIGEgaGVscCBtZXNzYWdlIGFuZCB0ZXJtaW5hdGVzLgorLlRQCisuSSAiLS1wcmludC1lcnJvcnMiCitJZiBvbmUgb3IgbW9yZSBvZiB0aGUgbW9kdWxlcyBvbiB0aGUgY29tbWFuZCBsaW5lLCBvciB0aGVpcgorZGVwZW5kZW5jaWVzLCBhcmUgbm90IGZvdW5kLCBvciBpZiBhbiBlcnJvciBvY2N1cnMgaW4gcGFyc2luZworYSBcZkkucGNcZlAgZmlsZSwgdGhlbiB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIGVycm9ycyBleHBsYWluaW5nIHRoZQorcHJvYmxlbSB0byBiZSBwcmludGVkLiBXaXRoICJwcmVkaWNhdGUiIG9wdGlvbnMgc3VjaCBhcyAiLS1leGlzdHMiCisuSSAicGtnLWNvbmZpZyIKK3J1bnMgc2lsZW50bHkgYnkgZGVmYXVsdCwgYmVjYXVzZSBpdCdzIHVzdWFsbHkgdXNlZAoraW4gc2NyaXB0cyB0aGF0IHdhbnQgdG8gY29udHJvbCB3aGF0J3Mgb3V0cHV0LiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZAorYWxvbmUgKHRvIGp1c3QgcHJpbnQgZXJyb3JzIGVuY291bnRlcmVkIGxvY2F0aW5nIG1vZHVsZXMgb24gdGhlIAorY29tbWFuZCBsaW5lKSBvciB3aXRoIG90aGVyIG9wdGlvbnMuIFRoZSBQS0dfQ09ORklHX0RFQlVHX1NQRVcKK2Vudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyB0aGlzIG9wdGlvbi4KKy5UUAorLkkgIi0tc2lsZW5jZS1lcnJvcnMiCitJZiBvbmUgb3IgbW9yZSBvZiB0aGUgbW9kdWxlcyBvbiB0aGUgY29tbWFuZCBsaW5lLCBvciB0aGVpcgorZGVwZW5kZW5jaWVzLCBhcmUgbm90IGZvdW5kLCBvciBpZiBhbiBlcnJvciBvY2N1cnMgaW4gcGFyc2luZyBhCithIFxmSS5wY1xmUCBmaWxlLCB0aGVuIHRoaXMgb3B0aW9uIHdpbGwga2VlcCBlcnJvcnMgZXhwbGFpbmluZyB0aGUKK3Byb2JsZW0gZnJvbSBiZWluZyBwcmludGVkLiBXaXRoICJwcmVkaWNhdGUiIG9wdGlvbnMgc3VjaCBhcworIi0tZXhpc3RzIiBcZklwa2ctY29uZmlnXGZQIHJ1bnMgc2lsZW50bHkgYnkgZGVmYXVsdCwgYmVjYXVzZSBpdCdzCit1c3VhbGx5IHVzZWQgaW4gc2NyaXB0cyB0aGF0IHdhbnQgdG8gY29udHJvbCB3aGF0J3Mgb3V0cHV0LiBTbyB0aGlzCitvcHRpb24gaXMgb25seSB1c2VmdWwgd2l0aCBvcHRpb25zIHN1Y2ggYXMgIi0tY2ZsYWdzIiBvcgorIi0tbW9kdmVyc2lvbiIgdGhhdCBwcmludCBlcnJvcnMgYnkgZGVmYXVsdC4gVGhlIFBLR19DT05GSUdfREVCVUdfU1BFVworZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzIHRoaXMgb3B0aW9uLgorLlRQCisuSSAiLS1lcnJvcnMtdG8tc3Rkb3V0IgorSWYgcHJpbnRpbmcgZXJyb3JzLCBwcmludCB0aGVtIHRvIHN0ZG91dCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBzdGRlcnIKKworLlBQCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVzZWQgdG8gY29tcGlsZSBhbmQgbGluayBwcm9ncmFtczoKKy5UUAorLkkgIi0tY2ZsYWdzIgorVGhpcyBwcmludHMgcHJlLXByb2Nlc3NvciBhbmQgY29tcGlsZSBmbGFncyByZXF1aXJlZCB0byBjb21waWxlIHRoZQorcGFja2FnZXMgb24gdGhlIGNvbW1hbmQgbGluZSwgaW5jbHVkaW5nIGZsYWdzIGZvciBhbGwgdGhlaXIKK2RlcGVuZGVuY2llcy4gRmxhZ3MgYXJlICJjb21wcmVzc2VkIiBzbyB0aGF0IGVhY2ggaWRlbnRpY2FsIGZsYWcKK2FwcGVhcnMgb25seSBvbmNlLiBcZklwa2ctY29uZmlnXGZQIGV4aXRzIHdpdGggYSBub256ZXJvIGNvZGUgaWYgaXQKK2Nhbid0IGZpbmQgbWV0YWRhdGEgZm9yIG9uZSBvciBtb3JlIG9mIHRoZSBwYWNrYWdlcyBvbiB0aGUgY29tbWFuZAorbGluZS4KKy5UUAorLkkgIi0tY2ZsYWdzLW9ubHktSSIKK1RoaXMgcHJpbnRzIHRoZSAtSSBwYXJ0IG9mICItLWNmbGFncyIuIFRoYXQgaXMsIGl0IGRlZmluZXMgdGhlIGhlYWRlcgorc2VhcmNoIHBhdGggYnV0IGRvZXNuJ3Qgc3BlY2lmeSBhbnl0aGluZyBlbHNlLgorLlRQIAorLkkgIi0tbGlicyIKK1RoaXMgb3B0aW9uIGlzIGlkZW50aWNhbCB0byAiLS1jZmxhZ3MiLCBvbmx5IGl0IHByaW50cyB0aGUgbGluaworZmxhZ3MuIEFzIHdpdGggIi0tY2ZsYWdzIiwgZHVwbGljYXRlIGZsYWdzIGFyZSBtZXJnZWQgKG1haW50YWluaW5nCitwcm9wZXIgb3JkZXJpbmcpLCBhbmQgZmxhZ3MgZm9yIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQgaW4gdGhlCitvdXRwdXQuCisuVFAKKy5JICItLWxpYnMtb25seS1MIgorVGhpcyBwcmludHMgdGhlIC1MLy1SIHBhcnQgb2YgIi0tbGlicyIuIFRoYXQgaXMsIGl0IGRlZmluZXMgdGhlIAorbGlicmFyeSBzZWFyY2ggcGF0aCBidXQgZG9lc24ndCBzcGVjaWZ5IHdoaWNoIGxpYnJhcmllcyB0byBsaW5rIHdpdGguCisuVFAKKy5JICItLWxpYnMtb25seS1sIgorVGhpcyBwcmludHMgdGhlIC1sIHBhcnQgb2YgIi0tbGlicyIgZm9yIHRoZSBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uCit0aGUgY29tbWFuZCBsaW5lLiBOb3RlIHRoYXQgdGhlIHVuaW9uIG9mICItLWxpYnMtb25seS1sIiBhbmQKKyItLWxpYnMtb25seS1MIiBtYXkgYmUgc21hbGxlciB0aGFuICItLWxpYnMiLCBkdWUgdG8gZmxhZ3Mgc3VjaCBhcworLXJkeW5hbWljLgorLlRQCisuSSAiLS12YXJpYWJsZT1WQVJJQUJMRU5BTUUiCitUaGlzIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgZGVmaW5lZCBpbiBhIHBhY2thZ2UncyBcZkkucGNcZlAKK2ZpbGUuIE1vc3QgcGFja2FnZXMgZGVmaW5lIHRoZSB2YXJpYWJsZSAicHJlZml4IiwgZm9yIGV4YW1wbGUsIHNvIHlvdSAKK2NhbiBzYXk6CisubmYKKyAgJCBwa2ctY29uZmlnIC0tdmFyaWFibGU9cHJlZml4IGdsaWItMi4wCisgIC91c3IvCisuZmkKKy5UUAorLkkgIi0tZGVmaW5lLXZhcmlhYmxlPVZBUklBQkxFTkFNRT1WQVJJQUJMRVZBTFVFIgorVGhpcyBzZXRzIGEgZ2xvYmFsIHZhbHVlIGZvciBhIHZhcmlhYmxlLCBvdmVycmlkaW5nIHRoZSB2YWx1ZSBpbiBhbnkKKy5JLnBjCitmaWxlcy4gTW9zdCBwYWNrYWdlcyBkZWZpbmUgdGhlIHZhcmlhYmxlICJwcmVmaXgiLCBmb3IgZXhhbXBsZSwgc28geW91CitjYW4gc2F5OgorLm5mCisgICQgcGtnLWNvbmZpZyAtLXByaW50LWVycm9ycyAtLWRlZmluZS12YXJpYWJsZT1wcmVmaXg9L2ZvbyBcZQorICAgICAgICAgICAgICAgLS12YXJpYWJsZT1wcmVmaXggZ2xpYi0yLjAKKyAgL2ZvbworLmZpCisuVFAKKy5JICItLXByaW50LXZhcmlhYmxlcyIKK1JldHVybnMgYSBsaXN0IG9mIGFsbCB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgcGFja2FnZS4KKworLlRQCisuSSAiLS11bmluc3RhbGxlZCIKK05vcm1hbGx5IGlmIHlvdSByZXF1ZXN0IHRoZSBwYWNrYWdlICJmb28iIGFuZCB0aGUgcGFja2FnZQorImZvby11bmluc3RhbGxlZCIgZXhpc3RzLCBcZklwa2ctY29uZmlnXGZQIHdpbGwgcHJlZmVyIHRoZSAKKyItdW5pbnN0YWxsZWQiIHZhcmlhbnQuIFRoaXMgYWxsb3dzIGNvbXBpbGF0aW9uL2xpbmtpbmcgYWdhaW5zdAordW5pbnN0YWxsZWQgcGFja2FnZXMuIElmIHlvdSBzcGVjaWZ5IHRoZSAiLS11bmluc3RhbGxlZCIgb3B0aW9uLAorLkkgcGtnLWNvbmZpZword2lsbCByZXR1cm4gc3VjY2Vzc2Z1bGx5IGlmIGFueSAiLXVuaW5zdGFsbGVkIiBwYWNrYWdlcyBhcmUgYmVpbmcKK3VzZWQsIGFuZCByZXR1cm4gZmFpbHVyZSAoZmFsc2UpIG90aGVyd2lzZS4gIChUaGUKK1BLR19DT05GSUdfRElTQUJMRV9VTklOU1RBTExFRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBrZWVwcworLkkgcGtnLWNvbmZpZworZnJvbSBpbXBsaWNpdGx5IGNob29zaW5nICItdW5pbnN0YWxsZWQiIHBhY2thZ2VzLCBzbyBpZiB0aGF0IHZhcmlhYmxlCitpcyBzZXQsIHRoZXkgd2lsbCBvbmx5IGhhdmUgYmVlbiB1c2VkIGlmIHlvdSBwYXNzIGEgbmFtZSBsaWtlCisiZm9vLXVuaW5zdGFsbGVkIiBvbiB0aGUgY29tbWFuZCBsaW5lIGV4cGxpY2l0bHkuKQorLlRQCisuSSAiLS1leGlzdHMiCisuVFAKKy5JICItLWF0bGVhc3QtdmVyc2lvbj1WRVJTSU9OIgorLlRQCisuSSAiLS1leGFjdC12ZXJzaW9uPVZFUlNJT04iCisuVFAKKy5JICItLW1heC12ZXJzaW9uPVZFUlNJT04iCitUaGVzZSBvcHRpb25zIHRlc3Qgd2hldGhlciB0aGUgcGFja2FnZSBvciBsaXN0IG9mIHBhY2thZ2VzIG9uIHRoZQorY29tbWFuZCBsaW5lIGFyZSBrbm93biB0byBcZklwa2ctY29uZmlnXGZQLCBhbmQgb3B0aW9uYWxseSB3aGV0aGVyIHRoZQordmVyc2lvbiBudW1iZXIgb2YgYSBwYWNrYWdlIG1lZXRzIGNlcnRhaW4gY29udHJhaW50cy4gIElmIGFsbCBwYWNrYWdlcworZXhpc3QgYW5kIG1lZXQgdGhlIHNwZWNpZmllZCB2ZXJzaW9uIGNvbnN0cmFpbnRzLAorLkkgcGtnLWNvbmZpZworZXhpdHMgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UgaXQgZXhpdHMgdW5zdWNjZXNzZnVsbHkuCisKK1JhdGhlciB0aGFuIHVzaW5nIHRoZSB2ZXJzaW9uLXRlc3Qgb3B0aW9ucywgeW91IGNhbiBzaW1wbHkgZ2l2ZSBhIHZlcnNpb24KK2NvbnN0cmFpbnQgYWZ0ZXIgZWFjaCBwYWNrYWdlIG5hbWUsIGZvciBleGFtcGxlOgorLm5mCisgICQgcGtnLWNvbmZpZyAtLWV4aXN0cyAnZ2xpYi0yLjAgPj0gMS4zLjQgbGlieG1sID0gMS44LjMnCisuZmkKK1JlbWVtYmVyIHRvIHVzZSBcLVwtcHJpbnQtZXJyb3JzIGlmIHlvdSB3YW50IGVycm9yIG1lc3NhZ2VzLgorLlRQCisuSSAiLS1tc3ZjLXN5bnRheCIKK1RoaXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IG9uIFdpbmRvd3MuIEl0IGNhdXNlcyBcZklwa2ctY29uZmlnXGZQCit0byBvdXRwdXQgLWwgYW5kIC1MIGZsYWdzIGluIHRoZSBmb3JtIHJlY29nbml6ZWQgYnkgdGhlIE1pY3Jvc29mdAorVmlzdWFsIEMrKyBjb21tYW5kLWxpbmUgY29tcGlsZXIsIFxmSWNsXGZQLiBTcGVjaWZpY2FsbHksIGluc3RlYWQgb2YKKy5JLUx4Oi9zb21lL3BhdGgKK2l0IHByaW50cyBcZkkvbGlicGF0aDp4L3NvbWUvcGF0aFxmUCwgYW5kIGluc3RlYWQgb2YgXGZJLWxmb29cZlAgaXQKK3ByaW50cyBcZklmb28ubGliXGZQLiBOb3RlIHRoYXQgdGhlIC0tbGlicyBvdXRwdXQgY29uc2lzdHMgb2YgZmxhZ3MKK2ZvciB0aGUgbGlua2VyLCBhbmQgc2hvdWxkIGJlIHBsYWNlZCBvbiB0aGUgY2wgY29tbWFuZCBsaW5lIGFmdGVyIGEKKy9saW5rIHN3aXRjaC4KKy5UUAorLkkgIi0tZG9udC1kZWZpbmUtcHJlZml4IgorVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIG9ubHkgb24gV2luZG93cy4gSXQgcHJldmVudHMgXGZJcGtnLWNvbmZpZ1xmUAorZnJvbSBhdXRvbWF0aWNhbGx5IHRyeWluZyB0byBvdmVycmlkZSB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlCisicHJlZml4IiBpbiBlYWNoIC5wYyBmaWxlLgorLlRQCisuSSAiLS1wcmVmaXgtdmFyaWFibGU9UFJFRklYIgorQWxzbyB0aGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb25seSBvbiBXaW5kb3dzLiBJdCBzZXRzIHRoZSBuYW1lIG9mIHRoZQordmFyaWFibGUgdGhhdCBcZklwa2ctY29uZmlnXGZQIGF1dG9tYXRpY2FsbHkgc2V0cyBhcyBkZXNjcmliZWQgYWJvdmUuCisuVFAKKy5JICItLXN0YXRpYyIKK091dHB1dCBsaWJyYXJpZXMgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nLiAgVGhhdCBtZWFucyBpbmNsdWRpbmcKK2FueSBwcml2YXRlIGxpYnJhcmllcyBpbiB0aGUgb3V0cHV0LiAgVGhpcyByZWxpZXMgb24gcHJvcGVyIHRhZ2dpbmcgaW4KK3RoZSAucGMgZmlsZXMsIGVsc2UgYSB0b28gbGFyZ2UgbnVtYmVyIG9mIGxpYnJhcmllcyB3aWxsIG9yZGluYXJpbHkgYmUKK291dHB1dC4KKy5UUAorLkkgIi0tbGlzdC1hbGwiCitMaXN0IGFsbCBtb2R1bGVzIGZvdW5kIGluIHRoZSBcZklwa2ctY29uZmlnXGZQIHBhdGguCisuVFAKKy1JICItLXByaW50LXByb3ZpZGVzIgorTGlzdCBhbGwgbW9kdWxlcyB0aGUgZ2l2ZW4gcGFja2FnZXMgcHJvdmlkZXMuCisuVFAKKy5JICItLXByaW50LXJlcXVpcmVzIgorTGlzdCBhbGwgbW9kdWxlcyB0aGUgZ2l2ZW4gcGFja2FnZXMgcmVxdWlyZXMuCisuVFAKKy5JICItLXByaW50LXJlcXVpcmVzLXByaXZhdGUiCitMaXN0IGFsbCBtb2R1bGVzIHRoZSBnaXZlbiBwYWNrYWdlcyByZXF1aXJlcyBmb3Igc3RhdGljIGxpbmtpbmcgKHNlZSAtLXN0YXRpYykuCisuXCIKKy5TSCBFTlZJUk9OTUVOVCBWQVJJQUJMRVMKKy5UUAorLkkgIlBLR19DT05GSUdfUEFUSCIKK0EgY29sb24tc2VwYXJhdGVkIChvbiBXaW5kb3dzLCBzZW1pY29sb24tc2VwYXJhdGVkKSBsaXN0IG9mCitkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIC5wYyBmaWxlcy4gIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSB3aWxsCithbHdheXMgYmUgc2VhcmNoZWQgYWZ0ZXIgc2VhcmNoaW5nIHRoZSBwYXRoOyB0aGUgZGVmYXVsdCBpcworLkkgXCVsaWJkaXIvXGZQcGtnY29uZmlnOlxmSWRhdGFkaXJcZlAvcGtnY29uZmlnIHdoZXJlIFxmSWxpYmRpclxmUCBpcwordGhlIGxpYmRpciBmb3IgXGZJcGtnLWNvbmZpZ1xmUCBhbmQgXGZJZGF0YWRpclxmUCBpcyB0aGUgZGF0YWRpcgorZm9yIFxmSXBrZy1jb25maWdcZlAgd2hlbiBpdCB3YXMgaW5zdGFsbGVkLgorLlRQCisuSSAiUEtHX0NPTkZJR19ERUJVR19TUEVXIgorSWYgc2V0LCBjYXVzZXMgXGZJcGtnLWNvbmZpZ1xmUCB0byBwcmludCBhbGwga2luZHMgb2YKK2RlYnVnZ2luZyBpbmZvcm1hdGlvbiBhbmQgcmVwb3J0IGFsbCBlcnJvcnMuCisuVFAKKy5JICJQS0dfQ09ORklHX1RPUF9CVUlMRF9ESVIiCitBIHZhbHVlIHRvIHNldCBmb3IgdGhlIG1hZ2ljIHZhcmlhYmxlIFxmSXBjX3RvcF9idWlsZGRpclxmUAord2hpY2ggbWF5IGFwcGVhciBpbiBcZkkucGNcZlAgZmlsZXMuIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcworbm90IHNldCwgdGhlIGRlZmF1bHQgdmFsdWUgJyQodG9wX2J1aWxkZGlyKScgd2lsbCBiZSB1c2VkLiBUaGlzCit2YXJpYWJsZSBzaG91bGQgcmVmZXIgdG8gdGhlIHRvcCBidWlsZGRpciBvZiB0aGUgTWFrZWZpbGUgd2hlcmUgdGhlIAorY29tcGlsZS9saW5rIGZsYWdzIHJlcG9ydGVkIGJ5IFxmSXBrZy1jb25maWdcZlAgd2lsbCBiZSB1c2VkLgorVGhpcyBvbmx5IG1hdHRlcnMgd2hlbiBjb21waWxpbmcvbGlua2luZyBhZ2FpbnN0IGEgcGFja2FnZSB0aGF0IGhhc24ndAoreWV0IGJlZW4gaW5zdGFsbGVkLgorLlRQCisuSSAiUEtHX0NPTkZJR19ESVNBQkxFX1VOSU5TVEFMTEVEIgorTm9ybWFsbHkgaWYgeW91IHJlcXVlc3QgdGhlIHBhY2thZ2UgImZvbyIgYW5kIHRoZSBwYWNrYWdlCisiZm9vLXVuaW5zdGFsbGVkIiBleGlzdHMsIFxmSXBrZy1jb25maWdcZlAgd2lsbCBwcmVmZXIgdGhlIAorIi11bmluc3RhbGxlZCIgdmFyaWFudC4gVGhpcyBhbGxvd3MgY29tcGlsYXRpb24vbGlua2luZyBhZ2FpbnN0Cit1bmluc3RhbGxlZCBwYWNrYWdlcy4gIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBpdAorZGlzYWJsZXMgc2FpZCBiZWhhdmlvci4KKy5UUAorLkkgIlBLR19DT05GSUdfQUxMT1dfU1lTVEVNX0NGTEFHUyIKK0Rvbid0IHN0cmlwIC1JL3Vzci9pbmNsdWRlIG91dCBvZiBjZmxhZ3MuCisuVFAKKy5JICJQS0dfQ09ORklHX0FMTE9XX1NZU1RFTV9MSUJTIgorRG9uJ3Qgc3RyaXAgLUwvdXNyL2xpYiBvdXQgb2YgbGlicworLlRQCisuSSAiUEtHX0NPTkZJR19TWVNST09UX0RJUiIKK01vZGlmeSAtSSBhbmQgLUwgdG8gdXNlIHRoZSBkaXJlY3RvcmllcyBsb2NhdGVkIGluIHRhcmdldCBzeXNyb290LgordGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4gY3Jvc3Njb21waWxpbmcgcGFja2FnZSB0aGF0IHVzZSBwa2ctY29uZmlnCit0byBkZXRlcm1pbmUgQ0ZMQUdTIGFuZiBMREZMQUdTLiAtSSBhbmQgLUwgYXJlIG1vZGlmaWVkIHRvIHBvaW50IHRvIAordGhlIG5ldyBzeXN0ZW0gcm9vdC4gdGhpcyBtZWFucyB0aGF0IGEgLUkvdXNyL2luY2x1ZGUvbGliZm9vIHdpbGwKK2JlY29tZSAtSS92YXIvdGFyZ2V0L3Vzci9pbmNsdWRlL2xpYmZvbyB3aXRoIGEgUEtHX0NPTkZJR19TWVNST09UX0RJUgorZXF1YWwgdG8gL3Zhci90YXJnZXQgKHNhbWUgcnVsZSBhcHBseSB0byAtTCkKKy5UUAorLkkgIlBLR19DT05GSUdfTElCRElSIgorUmVwbGFjZXMgdGhlIGRlZmF1bHQgXGZJcGtnLWNvbmZpZ1xmUCBzZWFyY2ggZGlyZWN0b3J5LCB1c3VhbGx5IFxmSS91c3IvbGliL3BrZ2NvbmZpZ1xmUAorLlwiCisuU0ggUVVFUllJTkcgUEtHLUNPTkZJRydTIERFRkFVTFRTCisuSSBwa2ctY29uZmlnXGZQIGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IGl0c2VsZiBmb3IgdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGgsIHZlcnNpb24gbnVtYmVyIGFuZCBvdGhlciBpbmZvcm1hdGlvbiwgZm9yIGluc3RhbmNlIHVzaW5nOgorLm5mCisgICQgcGtnLWNvbmZpZyAtLXZhcmlhYmxlIHBjX3BhdGggcGtnLWNvbmZpZworLmZpCitvcgorLm5mCisgICQgcGtnLWNvbmZpZyAtLW1vZHZlcnNpb24gcGtnLWNvbmZpZworLmZpCisuU0ggV0lORE9XUyBTUEVDSUFMSVRJRVMKK0lmIGEgLnBjIGZpbGUgaXMgZm91bmQgaW4gYSBkaXJlY3RvcnkgdGhhdCBtYXRjaGVzIHRoZSB1c3VhbAorY29udmVudGlvbnMgKGkuZS4sIGVuZHMgd2l0aCBcXGxpYlxccGtnY29uZmlnIG9yIFxcc2hhcmVcXHBrZ2NvbmZpZyksCit0aGUgcHJlZml4IGZvciB0aGF0IHBhY2thZ2UgaXMgYXNzdW1lZCB0byBiZSB0aGUgZ3JhbmRwYXJlbnQgb2YgdGhlCitkaXJlY3Rvcnkgd2hlcmUgdGhlIGZpbGUgd2FzIGZvdW5kLCBhbmQgdGhlIFxmSXByZWZpeFxmUCB2YXJpYWJsZSBpcworb3ZlcnJpZGRlbiBmb3IgdGhhdCBmaWxlIGFjY29yZGluZ2x5LgorCitJZiB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBpbiBhIC5wYyBmaWxlIGJlZ2lucyB3aXRoIHRoZSBvcmlnaW5hbCwKK25vbi1vdmVycmlkZGVuLCB2YWx1ZSBvZiB0aGUgXGZJcHJlZml4XGZQIHZhcmlhYmxlLCB0aGVuIHRoZSBvdmVycmlkZGVuCit2YWx1ZSBvZiBcZklwcmVmaXhcZlAgaXMgdXNlZCBpbnN0ZWFkLgorLlwiCisuU0ggQVVUT0NPTkYgTUFDUk9TCisuVFAKKy5JICJQS0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMgWyxBQ1RJT04tSUYtRk9VTkQgWyxBQ1RJT04tSUYtTk9ULUZPVU5EXV0pIgorCitUaGUgbWFjcm8gUEtHX0NIRUNLX01PRFVMRVMgY2FuIGJlIHVzZWQgaW4gXGZJY29uZmlndXJlLmFjXGZQIHRvIAorY2hlY2sgd2hldGhlciBtb2R1bGVzIGV4aXN0LiBBIHR5cGljYWwgdXNhZ2Ugd291bGQgYmU6CisubmYKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhbTVlTVFVGRl0sIFtndGsrLTIuMCA+PSAxLjMuNSBsaWJ4bWwgPSAxLjguNF0pCisuZmkKKworVGhpcyB3b3VsZCByZXN1bHQgaW4gTVlTVFVGRl9MSUJTIGFuZCBNWVNUVUZGX0NGTEFHUyBzdWJzdGl0dXRpb24KK3ZhcmlhYmxlcywgc2V0IHRvIHRoZSBsaWJzIGFuZCBjZmxhZ3MgZm9yIHRoZSBnaXZlbiBtb2R1bGUgbGlzdC4gCitJZiBhIG1vZHVsZSBpcyBtaXNzaW5nIG9yIGhhcyB0aGUgd3JvbmcgdmVyc2lvbiwgYnkgZGVmYXVsdCBjb25maWd1cmUKK3dpbGwgYWJvcnQgd2l0aCBhIG1lc3NhZ2UuIFRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgYWN0aW9uLCAKK3NwZWNpZnkgYW4gXCVBQ1RJT04tSUYtTk9ULUZPVU5ELiBcJVBLR19DSEVDS19NT0RVTEVTIHdpbGwgbm90IHByaW50IGFueQorZXJyb3IgbWVzc2FnZXMgaWYgeW91IHNwZWNpZnkgeW91ciBvd24gQUNUSU9OLUlGLU5PVC1GT1VORC4KK0hvd2V2ZXIsIGl0IHdpbGwgc2V0IHRoZSB2YXJpYWJsZSBNWVNUVUZGX1BLR19FUlJPUlMsIHdoaWNoIHlvdSBjYW4gCit1c2UgdG8gZGlzcGxheSB3aGF0IHdlbnQgd3JvbmcuCisKK05vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCitQS0dfQ0hFQ0tfTU9EVUxFUyBtaWdodCBub3QgaGFwcGVuLCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG8gaW5jbHVkZSBhbgorZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmlndXJlLmFjLgorLlwiCisuVFAKKy5JICJQS0dfUFJPR19QS0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pIgorCitEZWZpbmVzIHRoZSBQS0dfQ09ORklHIHZhcmlhYmxlIHRvIHRoZSBiZXN0IHBrZy1jb25maWcgYXZhaWxhYmxlLAordXNlZnVsIGlmIHlvdSBuZWVkIHBrZy1jb25maWcgYnV0IGRvbid0IHdhbnQgdG8gdXNlIFBLR19DSEVDS19NT0RVTEVTLgorLlwiCisuVFAKKy5JICJQS0dfQ0hFQ0tfRVhJU1RTKE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pIgorCitDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLiAgU2ltaWxhcgordG8gUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMgb3IgcHJpbnQgZXJyb3JzLgorCitTaW1pbGFyIHRvIFBLR19DSEVDS19NT0RVTEVTLCBtYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YKK3RoaXMgb3IgUEtHX0NIRUNLX01PRFVMRVMgaXMgY2FsbGVkLCBvciBtYWtlIHN1cmUgdG8gY2FsbAorUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseS4KKworLlNIIE1FVEFEQVRBIEZJTEUgU1lOVEFYCitUbyBhZGQgYSBsaWJyYXJ5IHRvIHRoZSBzZXQgb2YgcGFja2FnZXMgXGZJcGtnLWNvbmZpZ1xmUCBrbm93cyBhYm91dCwKK3NpbXBseSBpbnN0YWxsIGEgXGZJLnBjXGZQIGZpbGUuIFlvdSBzaG91bGQgaW5zdGFsbCB0aGlzIGZpbGUgdG8gCisuSSBsaWJkaXJcZlAvcGtnY29uZmlnLgorLlBQCitIZXJlIGlzIGFuIGV4YW1wbGUgZmlsZToKKy5uZgorIyBUaGlzIGlzIGEgY29tbWVudAorcHJlZml4PS9ob21lL2hwL3Vuc3QgICAjIHRoaXMgZGVmaW5lcyBhIHZhcmlhYmxlCitleGVjX3ByZWZpeD0ke3ByZWZpeH0gICMgZGVmaW5pbmcgYW5vdGhlciB2YXJpYWJsZSBpbiB0ZXJtcyBvZiB0aGUgZmlyc3QKK2xpYmRpcj0ke2V4ZWNfcHJlZml4fS9saWIKK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKKworTmFtZTogR09iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGh1bWFuLXJlYWRhYmxlIG5hbWUKK0Rlc2NyaXB0aW9uOiBPYmplY3QvdHlwZSBzeXN0ZW0gZm9yIEdMaWIgIyBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbgorVmVyc2lvbjogMS4zLjEKK1VSTDogaHR0cDovL3d3dy5ndGsub3JnCitSZXF1aXJlczogZ2xpYi0yLjAgPSAxLjMuMQorQ29uZmxpY3RzOiBmb29iYXIgPD0gNC41CitMaWJzOiAtTCR7bGliZGlyfSAtbGdvYmplY3QtMS4zCitMaWJzLnByaXZhdGU6IC1sbQorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vZ2xpYi0yLjAgLUkke2xpYmRpcn0vZ2xpYi9pbmNsdWRlIAorLmZpCisuUFAKK1lvdSB3b3VsZCBub3JtYWxseSBnZW5lcmF0ZSB0aGUgZmlsZSB1c2luZyBjb25maWd1cmUsIG9mIGNvdXJzZSwgc28KK3RoYXQgdGhlIHByZWZpeCwgZXRjLiBhcmUgc2V0IHRvIHRoZSBwcm9wZXIgdmFsdWVzLgorLlBQCitGaWxlcyBoYXZlIHR3byBraW5kcyBvZiBsaW5lOiBrZXl3b3JkIGxpbmVzIHN0YXJ0IHdpdGggYSBrZXl3b3JkIHBsdXMKK2EgY29sb24sIGFuZCB2YXJpYWJsZSBkZWZpbml0aW9ucyBzdGFydCB3aXRoIGFuIGFscGhhbnVtZXJpYyBzdHJpbmcKK3BsdXMgYW4gZXF1YWxzIHNpZ24uIEtleXdvcmRzIGFyZSBkZWZpbmVkIGluIGFkdmFuY2UgYW5kIGhhdmUgc3BlY2lhbAorbWVhbmluZyB0byBcZklwa2ctY29uZmlnXGZQOyB2YXJpYWJsZXMgZG8gbm90LCB5b3UgY2FuIGhhdmUgYW55Cit2YXJpYWJsZXMgdGhhdCB5b3Ugd2lzaCAoaG93ZXZlciwgdXNlcnMgbWF5IGV4cGVjdCB0byByZXRyaWV2ZSB0aGUKK3VzdWFsIGRpcmVjdG9yeSBuYW1lIHZhcmlhYmxlcykuCisuUFAKK05vdGUgdGhhdCB2YXJpYWJsZSByZWZlcmVuY2VzIGFyZSB3cml0dGVuICIke2Zvb30iOyB5b3UgY2FuIGVzY2FwZQorbGl0ZXJhbCAiJHsiIGFzICIkJHsiLgorLlRQCisuSSAiTmFtZToiCitUaGlzIGZpZWxkIHNob3VsZCBiZSBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSBwYWNrYWdlLiBOb3RlIHRoYXQKK2l0IGlzIG5vdCB0aGUgbmFtZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gXGZJcGtnLWNvbmZpZ1xmUC4KKy5UUAorLkkgIkRlc2NyaXB0aW9uOiIKK1RoaXMgc2hvdWxkIGJlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2UKKy5UUAorLkkgIlVSTDoiCitBbiBVUkwgd2hlcmUgcGVvcGxlIGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhbmQgZG93bmxvYWQgdGhlIHBhY2thZ2UKKy5UUAorLkkgIlZlcnNpb246IgorVGhpcyBzaG91bGQgYmUgdGhlIG1vc3Qtc3BlY2lmaWMtcG9zc2libGUgcGFja2FnZSB2ZXJzaW9uIHN0cmluZy4KKy5UUAorLkkgIlJlcXVpcmVzOiIKK1RoaXMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGFyZSByZXF1aXJlZCBieSB5b3VyCitwYWNrYWdlLiBGbGFncyBmcm9tIGRlcGVuZGVudCBwYWNrYWdlcyB3aWxsIGJlIG1lcmdlZCBpbiB0byB0aGUgZmxhZ3MKK3JlcG9ydGVkIGZvciB5b3VyIHBhY2thZ2UuIE9wdGlvbmFsbHksIHlvdSBjYW4gc3BlY2lmeSB0aGUgdmVyc2lvbiAKK29mIHRoZSByZXF1aXJlZCBwYWNrYWdlICh1c2luZyB0aGUgb3BlcmF0b3JzID0sIDwsID4sID49LCA8PSk7CitzcGVjaWZ5aW5nIGEgdmVyc2lvbiBhbGxvd3MgXGZJcGtnLWNvbmZpZ1xmUCB0byBwZXJmb3JtIGV4dHJhIHNhbml0eQorY2hlY2tzLiBZb3UgbWF5IG9ubHkgbWVudGlvbiB0aGUgc2FtZSBwYWNrYWdlIG9uZSB0aW1lIG9uIHRoZSAKKy5JICJSZXF1aXJlczoiCitsaW5lLiBJZiB0aGUgdmVyc2lvbiBvZiBhIHBhY2thZ2UgaXMgdW5zcGVjaWZpZWQsIGFueSB2ZXJzaW9uIHdpbGwKK2JlIHVzZWQgd2l0aCBubyBjaGVja2luZy4KKy5UUAorLkkgUmVxdWlyZXMucHJpdmF0ZToKK0EgbGlzdCBvZiBwYWNrYWdlcyByZXF1aXJlZCBieSB0aGlzIHBhY2thZ2UuIFRoZSBkaWZmZXJlbmNlIGZyb20KKy5JIFJlcXVpcmVzCitpcyB0aGF0IHRoZSBwYWNrYWdlcyBsaXN0ZWQgdW5kZXIKKy5JIFJlcXVpcmVzLnByaXZhdGUKK2FyZSBub3QgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gYSBmbGFnIGxpc3QgaXMgY29tcHV0ZWQgZm9yCitkeW5hbWljYWxseSBsaW5rZWQgZXhlY3V0YWJsZSAoaS5lLiwgd2hlbiBcLVwtc3RhdGljIHdhcyBub3QKK3NwZWNpZmllZCkuICBJbiB0aGUgc2l0dWF0aW9uIHdoZXJlIGVhY2ggLnBjIGZpbGUgY29ycmVzcG9uZHMgdG8gYQorbGlicmFyeSwKKy5JIFJlcXVpcmVzLnByaXZhdGUKK3NoYWxsIGJlIHVzZWQgZXhjbHVzaXZlbHkgdG8gc3BlY2lmeSB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlCitsaWJyYXJpZXMuCisuVFAKKy5JICJDb25mbGljdHM6IgorVGhpcyBvcHRpb25hbCBsaW5lIGFsbG93cyBcZklwa2ctY29uZmlnXGZQIHRvIHBlcmZvcm0gYWRkaXRpb25hbAorc2FuaXR5IGNoZWNrcywgcHJpbWFyaWx5IHRvIGRldGVjdCBicm9rZW4gdXNlciBpbnN0YWxsYXRpb25zLiAgVGhlCitzeW50YXggaXMgdGhlIHNhbWUgYXMKKy5JICJSZXF1aXJlczoiCitleGNlcHQgdGhhdAoreW91IGNhbiBsaXN0IHRoZSBzYW1lIHBhY2thZ2UgbW9yZSB0aGFuIG9uY2UgaGVyZSwgZm9yIGV4YW1wbGUgCisiZm9vYmFyID0gMS4yLjMsIGZvb2JhciA9IDEuMi41LCBmb29iYXIgPj0gMS4zIiwgaWYgeW91IGhhdmUgcmVhc29uIHRvCitkbyBzby4gSWYgYSB2ZXJzaW9uIGlzbid0IHNwZWNpZmllZCwgdGhlbiB5b3VyIHBhY2thZ2UgY29uZmxpY3RzIHdpdGgKK2FsbCB2ZXJzaW9ucyBvZiB0aGUgbWVudGlvbmVkIHBhY2thZ2UuIAorSWYgYSB1c2VyIHRyaWVzIHRvIHVzZSB5b3VyIHBhY2thZ2UgYW5kIGEgY29uZmxpY3RpbmcgcGFja2FnZSBhdCB0aGUKK3NhbWUgdGltZSwgdGhlbiBcZklwa2ctY29uZmlnXGZQIHdpbGwgY29tcGxhaW4uCisuVFAKKy5JICJMaWJzOiIKK1RoaXMgbGluZSBzaG91bGQgZ2l2ZSB0aGUgbGluayBmbGFncyBzcGVjaWZpYyB0byB5b3VyIHBhY2thZ2UuIAorRG9uJ3QgYWRkIGFueSBmbGFncyBmb3IgcmVxdWlyZWQgcGFja2FnZXM7IFxmSXBrZy1jb25maWdcZlAgd2lsbCAKK2FkZCB0aG9zZSBhdXRvbWF0aWNhbGx5LgorLlRQCisuSSAiTGlicy5wcml2YXRlOiIKK1RoaXMgbGluZSBzaG91bGQgbGlzdCBhbnkgcHJpdmF0ZSBsaWJyYXJpZXMgaW4gdXNlLiAgUHJpdmF0ZSBsaWJyYXJpZXMKK2FyZSBsaWJyYXJpZXMgd2hpY2ggYXJlIG5vdCBleHBvc2VkIHRocm91Z2ggeW91ciBsaWJyYXJ5LCBidXQgYXJlCituZWVkZWQgaW4gdGhlIGNhc2Ugb2Ygc3RhdGljIGxpbmtpbmcuIFRoaXMgZGlmZmVycyBmcm9tCisuSSBSZXF1aXJlcy5wcml2YXRlCitpbiB0aGF0IGl0IHJlZmVyZW5jZXMgbGlicmFyaWVzIHRoYXQgZG8gbm90IGhhdmUgcGFja2FnZSBmaWxlcworaW5zdGFsbGVkLgorLlRQCisuSSAiQ2ZsYWdzOiIKK1RoaXMgbGluZSBzaG91bGQgbGlzdCB0aGUgY29tcGlsZSBmbGFncyBzcGVjaWZpYyB0byB5b3VyIHBhY2thZ2UuIAorRG9uJ3QgYWRkIGFueSBmbGFncyBmb3IgcmVxdWlyZWQgcGFja2FnZXM7IFxmSXBrZy1jb25maWdcZlAgd2lsbCAKK2FkZCB0aG9zZSBhdXRvbWF0aWNhbGx5LgorLlwiCisuU0ggQVVUSE9SCisKKy5JIHBrZy1jb25maWcKK3dhcyB3cml0dGVuIGJ5IEphbWVzIEhlbnN0cmlkZ2UsIHJld3JpdHRlbiBieSBNYXJ0aWpuIHZhbiBCZWVycywgYW5kCityZXdyaXR0ZW4gYWdhaW4gYnkgSGF2b2MgUGVubmluZ3Rvbi4gVGltIEphbmlrLCBPd2VuIFRheWxvciwgYW5kIFJhamEKK0hhcmluYXRoIHN1Ym1pdHRlZCBzdWdnZXN0aW9ucyBhbmQgc29tZSBjb2RlLgorLkkgZ25vbWUtY29uZmlnCit3YXMgd3JpdHRlbiBieSBNaWd1ZWwgZGUgSWNhemEsIFJhamEgSGFyaW5hdGggYW5kIHZhcmlvdXMgaGFja2VycyBpbgordGhlIEdOT01FIHRlYW0uICBJdCB3YXMgaW5zcGlyZWQgYnkgT3dlbiBUYXlsb3IncyBcZklndGstY29uZmlnXGZQCitwcm9ncmFtLgorLlwiCisuU0ggQlVHUworCitcZklwa2ctY29uZmlnXGZQIGRvZXMgbm90IGhhbmRsZSBtaXhpbmcgb2YgcGFyYW1ldGVycyB3aXRoIGFuZCB3aXRob3V0Cis9IHdlbGwuICBTdGljayB3aXRoIG9uZS4KKworQnVncyBjYW4gYmUgcmVwb3J0ZWQgYXQgaHR0cDovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnLyB1bmRlciB0aGUKKy5JIHBrZy1jb25maWcKK2NvbXBvbmVudC4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1yYW5saWIuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1yYW5saWIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWYwYmU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLXJhbmxpYi4xCkBAIC0wLDAgKzEsMjE4IEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yMyAoUG9kOjpTaW1wbGUgMy4xNCkKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiUkFOTElCIDEiCisuVEggUkFOTElCIDEgIjIwMTMtMDMtMjUiICJiaW51dGlscy0yLjIzLjIiICJHTlUgRGV2ZWxvcG1lbnQgVG9vbHMiCisuXCIgRm9yIG5yb2ZmLCB0dXJuIG9mZiBqdXN0aWZpY2F0aW9uLiAgQWx3YXlzIHR1cm4gb2ZmIGh5cGhlbmF0aW9uOyBpdCBtYWtlcworLlwiIHdheSB0b28gbWFueSBtaXN0YWtlcyBpbiB0ZWNobmljYWwgZG9jdW1lbnRzLgorLmlmIG4gLmFkIGwKKy5uaAorLlNIICJOQU1FIgorcmFubGliIFwtIGdlbmVyYXRlIGluZGV4IHRvIGFyY2hpdmUuCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCityYW5saWIgW1xmQlwtXC1wbHVnaW5cZlIgXGZJbmFtZVxmUl0gW1xmQlwtRGhIdlZ0XGZSXSBcZklhcmNoaXZlXGZSCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitcJlxmQnJhbmxpYlxmUiBnZW5lcmF0ZXMgYW4gaW5kZXggdG8gdGhlIGNvbnRlbnRzIG9mIGFuIGFyY2hpdmUgYW5kCitzdG9yZXMgaXQgaW4gdGhlIGFyY2hpdmUuICBUaGUgaW5kZXggbGlzdHMgZWFjaCBzeW1ib2wgZGVmaW5lZCBieSBhCittZW1iZXIgb2YgYW4gYXJjaGl2ZSB0aGF0IGlzIGEgcmVsb2NhdGFibGUgb2JqZWN0IGZpbGUuCisuUFAKK1lvdSBtYXkgdXNlIFxmQm5tIFwtc1xmUiBvciBcZkJubSBcLVwtcHJpbnRcLWFybWFwXGZSIHRvIGxpc3QgdGhpcyBpbmRleC4KKy5QUAorQW4gYXJjaGl2ZSB3aXRoIHN1Y2ggYW4gaW5kZXggc3BlZWRzIHVwIGxpbmtpbmcgdG8gdGhlIGxpYnJhcnkgYW5kCithbGxvd3Mgcm91dGluZXMgaW4gdGhlIGxpYnJhcnkgdG8gY2FsbCBlYWNoIG90aGVyIHdpdGhvdXQgcmVnYXJkIHRvCit0aGVpciBwbGFjZW1lbnQgaW4gdGhlIGFyY2hpdmUuCisuUFAKK1RoZSBccy0xR05VXHMwIFxmQnJhbmxpYlxmUiBwcm9ncmFtIGlzIGFub3RoZXIgZm9ybSBvZiBccy0xR05VXHMwIFxmQmFyXGZSOyBydW5uaW5nCitcJlxmQnJhbmxpYlxmUiBpcyBjb21wbGV0ZWx5IGVxdWl2YWxlbnQgdG8gZXhlY3V0aW5nIFxmQmFyIFwtc1xmUi4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCisuSVAgIlxmQlwtaFxmUiIgNAorLklYIEl0ZW0gIi1oIgorLlBEIDAKKy5JUCAiXGZCXC1IXGZSIiA0CisuSVggSXRlbSAiLUgiCisuSVAgIlxmQlwtXC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS1oZWxwIgorLlBECitTaG93IHVzYWdlIGluZm9ybWF0aW9uIGZvciBcZkJyYW5saWJcZlIuCisuSVAgIlxmQlwtdlxmUiIgNAorLklYIEl0ZW0gIi12IgorLlBEIDAKKy5JUCAiXGZCXC1WXGZSIiA0CisuSVggSXRlbSAiLVYiCisuSVAgIlxmQlwtXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLS12ZXJzaW9uIgorLlBECitTaG93IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBcZkJyYW5saWJcZlIuCisuSVAgIlxmQlwtRFxmUiIgNAorLklYIEl0ZW0gIi1EIgorT3BlcmF0ZSBpbiBcZklkZXRlcm1pbmlzdGljXGZSIG1vZGUuICBUaGUgc3ltYm9sIG1hcCBhcmNoaXZlIG1lbWJlcidzCitoZWFkZXIgd2lsbCBzaG93IHplcm8gZm9yIHRoZSBccy0xVUlEXHMwLCBccy0xR0lEXHMwLCBhbmQgdGltZXN0YW1wLiAgV2hlbiB0aGlzCitvcHRpb24gaXMgdXNlZCwgbXVsdGlwbGUgcnVucyB3aWxsIHByb2R1Y2UgaWRlbnRpY2FsIG91dHB1dCBmaWxlcy4KKy5TcAorVGhpcyBpcyB0aGUgZGVmYXVsdCB1bmxlc3MgXGZJYmludXRpbHNcZlIgd2FzIGNvbmZpZ3VyZWQgd2l0aAorXCZcZkJcLVwtZW5hYmxlXC1kZXRlcm1pbmlzdGljXC1hcmNoaXZlc1xmUi4KKy5JUCAiXGZCXC10XGZSIiA0CisuSVggSXRlbSAiLXQiCitVcGRhdGUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgc3ltYm9sIG1hcCBvZiBhbiBhcmNoaXZlLgorLklQICJcZkJcLVVcZlIiIDQKKy5JWCBJdGVtICItVSIKK0RvIFxmSW5vdFxmUiBvcGVyYXRlIGluIFxmSWRldGVybWluaXN0aWNcZlIgbW9kZS4gIFRoaXMgaXMgdGhlCitpbnZlcnNlIG9mIHRoZSBcZkJcLURcZlIgb3B0aW9uLCBhYm92ZTogdGhlIGFyY2hpdmUgaW5kZXggd2lsbCBnZXQKK2FjdHVhbCBccy0xVUlEXHMwLCBccy0xR0lEXHMwLCB0aW1lc3RhbXAsIGFuZCBmaWxlIG1vZGUgdmFsdWVzLgorLlNwCitUaGlzIGlzIHRoZSBkZWZhdWx0IHVubGVzcyBcZkliaW51dGlsc1xmUiB3YXMgY29uZmlndXJlZCB3aXRoCitcJlxmQlwtXC1lbmFibGVcLWRldGVybWluaXN0aWNcLWFyY2hpdmVzXGZSLgorLklQICJcZkJAXGZSXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIkBmaWxlIgorUmVhZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tIFxmSWZpbGVcZlIuICBUaGUgb3B0aW9ucyByZWFkIGFyZQoraW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIEBcZklmaWxlXGZSIG9wdGlvbi4gIElmIFxmSWZpbGVcZlIKK2RvZXMgbm90IGV4aXN0LCBvciBjYW5ub3QgYmUgcmVhZCwgdGhlbiB0aGUgb3B0aW9uIHdpbGwgYmUgdHJlYXRlZAorbGl0ZXJhbGx5LCBhbmQgbm90IHJlbW92ZWQuCisuU3AKK09wdGlvbnMgaW4gXGZJZmlsZVxmUiBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBBIHdoaXRlc3BhY2UKK2NoYXJhY3RlciBtYXkgYmUgaW5jbHVkZWQgaW4gYW4gb3B0aW9uIGJ5IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUKK29wdGlvbiBpbiBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMuICBBbnkgY2hhcmFjdGVyIChpbmNsdWRpbmcgYQorYmFja3NsYXNoKSBtYXkgYmUgaW5jbHVkZWQgYnkgcHJlZml4aW5nIHRoZSBjaGFyYWN0ZXIgdG8gYmUgaW5jbHVkZWQKK3dpdGggYSBiYWNrc2xhc2guICBUaGUgXGZJZmlsZVxmUiBtYXkgaXRzZWxmIGNvbnRhaW4gYWRkaXRpb25hbAorQFxmSWZpbGVcZlIgb3B0aW9uczsgYW55IHN1Y2ggb3B0aW9ucyB3aWxsIGJlIHByb2Nlc3NlZCByZWN1cnNpdmVseS4KKy5TSCAiU0VFIEFMU08iCisuSVggSGVhZGVyICJTRUUgQUxTTyIKK1wmXGZJYXJcZlJcfCgxKSwgXGZJbm1cZlJcfCgxKSwgYW5kIHRoZSBJbmZvIGVudHJpZXMgZm9yIFxmSWJpbnV0aWxzXGZSLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIFwqKEwiXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZVwqKFIiLgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLXJlYWRlbGYuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1yZWFkZWxmLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2ZDk2NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1yZWFkZWxmLjEKQEAgLTAsMCArMSw0NTEgQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjIzIChQb2Q6OlNpbXBsZSAzLjE0KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJSRUFERUxGIDEiCisuVEggUkVBREVMRiAxICIyMDEzLTAzLTI1IiAiYmludXRpbHMtMi4yMy4yIiAiR05VIERldmVsb3BtZW50IFRvb2xzIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK3JlYWRlbGYgXC0gRGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQgRUxGIGZpbGVzLgorLlNIICJTWU5PUFNJUyIKKy5JWCBIZWFkZXIgIlNZTk9QU0lTIgorcmVhZGVsZiBbXGZCXC1hXGZSfFxmQlwtXC1hbGxcZlJdCisgICAgICAgIFtcZkJcLWhcZlJ8XGZCXC1cLWZpbGVcLWhlYWRlclxmUl0KKyAgICAgICAgW1xmQlwtbFxmUnxcZkJcLVwtcHJvZ3JhbVwtaGVhZGVyc1xmUnxcZkJcLVwtc2VnbWVudHNcZlJdCisgICAgICAgIFtcZkJcLVNcZlJ8XGZCXC1cLXNlY3Rpb25cLWhlYWRlcnNcZlJ8XGZCXC1cLXNlY3Rpb25zXGZSXQorICAgICAgICBbXGZCXC1nXGZSfFxmQlwtXC1zZWN0aW9uXC1ncm91cHNcZlJdCisgICAgICAgIFtcZkJcLXRcZlJ8XGZCXC1cLXNlY3Rpb25cLWRldGFpbHNcZlJdCisgICAgICAgIFtcZkJcLWVcZlJ8XGZCXC1cLWhlYWRlcnNcZlJdCisgICAgICAgIFtcZkJcLXNcZlJ8XGZCXC1cLXN5bXNcZlJ8XGZCXC1cLXN5bWJvbHNcZlJdCisgICAgICAgIFtcZkJcLVwtZHluXC1zeW1zXGZSXQorICAgICAgICBbXGZCXC1uXGZSfFxmQlwtXC1ub3Rlc1xmUl0KKyAgICAgICAgW1xmQlwtclxmUnxcZkJcLVwtcmVsb2NzXGZSXQorICAgICAgICBbXGZCXC11XGZSfFxmQlwtXC11bndpbmRcZlJdCisgICAgICAgIFtcZkJcLWRcZlJ8XGZCXC1cLWR5bmFtaWNcZlJdCisgICAgICAgIFtcZkJcLVZcZlJ8XGZCXC1cLXZlcnNpb25cLWluZm9cZlJdCisgICAgICAgIFtcZkJcLUFcZlJ8XGZCXC1cLWFyY2hcLXNwZWNpZmljXGZSXQorICAgICAgICBbXGZCXC1EXGZSfFxmQlwtXC11c2VcLWR5bmFtaWNcZlJdCisgICAgICAgIFtcZkJcLXhcZlIgPG51bWJlciBvciBuYW1lPnxcZkJcLVwtaGV4XC1kdW1wPVxmUjxudW1iZXIgb3IgbmFtZT5dCisgICAgICAgIFtcZkJcLXBcZlIgPG51bWJlciBvciBuYW1lPnxcZkJcLVwtc3RyaW5nXC1kdW1wPVxmUjxudW1iZXIgb3IgbmFtZT5dCisgICAgICAgIFtcZkJcLVJcZlIgPG51bWJlciBvciBuYW1lPnxcZkJcLVwtcmVsb2NhdGVkXC1kdW1wPVxmUjxudW1iZXIgb3IgbmFtZT5dCisgICAgICAgIFtcZkJcLWNcZlJ8XGZCXC1cLWFyY2hpdmVcLWluZGV4XGZSXQorICAgICAgICBbXGZCXC13W2xMaWFwcm1mRnNvUnRdXGZSfAorICAgICAgICAgXGZCXC1cLWRlYnVnXC1kdW1wXGZSWz1yYXdsaW5lLD1kZWNvZGVkbGluZSw9aW5mbyw9YWJicmV2LD1wdWJuYW1lcyw9YXJhbmdlcyw9bWFjcm8sPWZyYW1lcyw9ZnJhbWVzXC1pbnRlcnAsPXN0ciw9bG9jLD1SYW5nZXMsPXB1YnR5cGVzLD10cmFjZV9pbmZvLD10cmFjZV9hYmJyZXYsPXRyYWNlX2FyYW5nZXMsPWdkYl9pbmRleF1dCisgICAgICAgIFtcZkJcLVwtZHdhcmZcLWRlcHRoPVxmUlxmSW5cZlJdCisgICAgICAgIFtcZkJcLVwtZHdhcmZcLXN0YXJ0PVxmUlxmSW5cZlJdCisgICAgICAgIFtcZkJcLUlcZlJ8XGZCXC1cLWhpc3RvZ3JhbVxmUl0KKyAgICAgICAgW1xmQlwtdlxmUnxcZkJcLVwtdmVyc2lvblxmUl0KKyAgICAgICAgW1xmQlwtV1xmUnxcZkJcLVwtd2lkZVxmUl0KKyAgICAgICAgW1xmQlwtSFxmUnxcZkJcLVwtaGVscFxmUl0KKyAgICAgICAgXGZJZWxmZmlsZVxmUi4uLgorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorXCZcZkJyZWFkZWxmXGZSIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IG9uZSBvciBtb3JlIFxzLTFFTEZcczAgZm9ybWF0IG9iamVjdAorZmlsZXMuICBUaGUgb3B0aW9ucyBjb250cm9sIHdoYXQgcGFydGljdWxhciBpbmZvcm1hdGlvbiB0byBkaXNwbGF5LgorLlBQCitcJlxmSWVsZmZpbGVcZlIuLi4gYXJlIHRoZSBvYmplY3QgZmlsZXMgdG8gYmUgZXhhbWluZWQuICAzMlwtYml0IGFuZAorNjRcLWJpdCBccy0xRUxGXHMwIGZpbGVzIGFyZSBzdXBwb3J0ZWQsIGFzIGFyZSBhcmNoaXZlcyBjb250YWluaW5nIFxzLTFFTEZcczAgZmlsZXMuCisuUFAKK1RoaXMgcHJvZ3JhbSBwZXJmb3JtcyBhIHNpbWlsYXIgZnVuY3Rpb24gdG8gXGZCb2JqZHVtcFxmUiBidXQgaXQKK2dvZXMgaW50byBtb3JlIGRldGFpbCBhbmQgaXQgZXhpc3RzIGluZGVwZW5kZW50bHkgb2YgdGhlIFxzLTFCRkRcczAKK2xpYnJhcnksIHNvIGlmIHRoZXJlIGlzIGEgYnVnIGluIFxzLTFCRkRcczAgdGhlbiByZWFkZWxmIHdpbGwgbm90IGJlCithZmZlY3RlZC4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCitUaGUgbG9uZyBhbmQgc2hvcnQgZm9ybXMgb2Ygb3B0aW9ucywgc2hvd24gaGVyZSBhcyBhbHRlcm5hdGl2ZXMsIGFyZQorZXF1aXZhbGVudC4gIEF0IGxlYXN0IG9uZSBvcHRpb24gYmVzaWRlcyBcZkJcLXZcZlIgb3IgXGZCXC1IXGZSIG11c3QgYmUKK2dpdmVuLgorLklQICJcZkJcLWFcZlIiIDQKKy5JWCBJdGVtICItYSIKKy5QRCAwCisuSVAgIlxmQlwtXC1hbGxcZlIiIDQKKy5JWCBJdGVtICItLWFsbCIKKy5QRAorRXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIFxmQlwtXC1maWxlXC1oZWFkZXJcZlIsCitcJlxmQlwtXC1wcm9ncmFtXC1oZWFkZXJzXGZSLCBcZkJcLVwtc2VjdGlvbnNcZlIsIFxmQlwtXC1zeW1ib2xzXGZSLAorXCZcZkJcLVwtcmVsb2NzXGZSLCBcZkJcLVwtZHluYW1pY1xmUiwgXGZCXC1cLW5vdGVzXGZSIGFuZAorXCZcZkJcLVwtdmVyc2lvblwtaW5mb1xmUi4KKy5JUCAiXGZCXC1oXGZSIiA0CisuSVggSXRlbSAiLWgiCisuUEQgMAorLklQICJcZkJcLVwtZmlsZVwtaGVhZGVyXGZSIiA0CisuSVggSXRlbSAiLS1maWxlLWhlYWRlciIKKy5QRAorRGlzcGxheXMgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgXHMtMUVMRlxzMCBoZWFkZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZQorZmlsZS4KKy5JUCAiXGZCXC1sXGZSIiA0CisuSVggSXRlbSAiLWwiCisuUEQgMAorLklQICJcZkJcLVwtcHJvZ3JhbVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi0tcHJvZ3JhbS1oZWFkZXJzIgorLklQICJcZkJcLVwtc2VnbWVudHNcZlIiIDQKKy5JWCBJdGVtICItLXNlZ21lbnRzIgorLlBECitEaXNwbGF5cyB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBmaWxlJ3Mgc2VnbWVudCBoZWFkZXJzLCBpZiBpdAoraGFzIGFueS4KKy5JUCAiXGZCXC1TXGZSIiA0CisuSVggSXRlbSAiLVMiCisuUEQgMAorLklQICJcZkJcLVwtc2VjdGlvbnNcZlIiIDQKKy5JWCBJdGVtICItLXNlY3Rpb25zIgorLklQICJcZkJcLVwtc2VjdGlvblwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi0tc2VjdGlvbi1oZWFkZXJzIgorLlBECitEaXNwbGF5cyB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBmaWxlJ3Mgc2VjdGlvbiBoZWFkZXJzLCBpZiBpdAoraGFzIGFueS4KKy5JUCAiXGZCXC1nXGZSIiA0CisuSVggSXRlbSAiLWciCisuUEQgMAorLklQICJcZkJcLVwtc2VjdGlvblwtZ3JvdXBzXGZSIiA0CisuSVggSXRlbSAiLS1zZWN0aW9uLWdyb3VwcyIKKy5QRAorRGlzcGxheXMgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgZmlsZSdzIHNlY3Rpb24gZ3JvdXBzLCBpZiBpdAoraGFzIGFueS4KKy5JUCAiXGZCXC10XGZSIiA0CisuSVggSXRlbSAiLXQiCisuUEQgMAorLklQICJcZkJcLVwtc2VjdGlvblwtZGV0YWlsc1xmUiIgNAorLklYIEl0ZW0gIi0tc2VjdGlvbi1kZXRhaWxzIgorLlBECitEaXNwbGF5cyB0aGUgZGV0YWlsZWQgc2VjdGlvbiBpbmZvcm1hdGlvbi4gSW1wbGllcyBcZkJcLVNcZlIuCisuSVAgIlxmQlwtc1xmUiIgNAorLklYIEl0ZW0gIi1zIgorLlBEIDAKKy5JUCAiXGZCXC1cLXN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItLXN5bWJvbHMiCisuSVAgIlxmQlwtXC1zeW1zXGZSIiA0CisuSVggSXRlbSAiLS1zeW1zIgorLlBECitEaXNwbGF5cyB0aGUgZW50cmllcyBpbiBzeW1ib2wgdGFibGUgc2VjdGlvbiBvZiB0aGUgZmlsZSwgaWYgaXQgaGFzIG9uZS4KKy5JUCAiXGZCXC1cLWR5blwtc3ltc1xmUiIgNAorLklYIEl0ZW0gIi0tZHluLXN5bXMiCitEaXNwbGF5cyB0aGUgZW50cmllcyBpbiBkeW5hbWljIHN5bWJvbCB0YWJsZSBzZWN0aW9uIG9mIHRoZSBmaWxlLCBpZiBpdAoraGFzIG9uZS4KKy5JUCAiXGZCXC1lXGZSIiA0CisuSVggSXRlbSAiLWUiCisuUEQgMAorLklQICJcZkJcLVwtaGVhZGVyc1xmUiIgNAorLklYIEl0ZW0gIi0taGVhZGVycyIKKy5QRAorRGlzcGxheSBhbGwgdGhlIGhlYWRlcnMgaW4gdGhlIGZpbGUuICBFcXVpdmFsZW50IHRvIFxmQlwtaCBcLWwgXC1TXGZSLgorLklQICJcZkJcLW5cZlIiIDQKKy5JWCBJdGVtICItbiIKKy5QRCAwCisuSVAgIlxmQlwtXC1ub3Rlc1xmUiIgNAorLklYIEl0ZW0gIi0tbm90ZXMiCisuUEQKK0Rpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUgXHMtMU5PVEVcczAgc2VnbWVudHMgYW5kL29yIHNlY3Rpb25zLCBpZiBhbnkuCisuSVAgIlxmQlwtclxmUiIgNAorLklYIEl0ZW0gIi1yIgorLlBEIDAKKy5JUCAiXGZCXC1cLXJlbG9jc1xmUiIgNAorLklYIEl0ZW0gIi0tcmVsb2NzIgorLlBECitEaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUncyByZWxvY2F0aW9uIHNlY3Rpb24sIGlmIGl0IGhhcyBvbmUuCisuSVAgIlxmQlwtdVxmUiIgNAorLklYIEl0ZW0gIi11IgorLlBEIDAKKy5JUCAiXGZCXC1cLXVud2luZFxmUiIgNAorLklYIEl0ZW0gIi0tdW53aW5kIgorLlBECitEaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUncyB1bndpbmQgc2VjdGlvbiwgaWYgaXQgaGFzIG9uZS4gIE9ubHkKK3RoZSB1bndpbmQgc2VjdGlvbnMgZm9yIFxzLTFJQTY0XHMwIFxzLTFFTEZcczAgZmlsZXMsIGFzIHdlbGwgYXMgXHMtMUFSTVxzMCB1bndpbmQgdGFibGVzCisoXGYoQ1dcKihDYC5BUk0uZXhpZHhcKihDJ1xmUiAvIFxmKENXXCooQ2AuQVJNLmV4dGFiXCooQydcZlIpIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLgorLklQICJcZkJcLWRcZlIiIDQKKy5JWCBJdGVtICItZCIKKy5QRCAwCisuSVAgIlxmQlwtXC1keW5hbWljXGZSIiA0CisuSVggSXRlbSAiLS1keW5hbWljIgorLlBECitEaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUncyBkeW5hbWljIHNlY3Rpb24sIGlmIGl0IGhhcyBvbmUuCisuSVAgIlxmQlwtVlxmUiIgNAorLklYIEl0ZW0gIi1WIgorLlBEIDAKKy5JUCAiXGZCXC1cLXZlcnNpb25cLWluZm9cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24taW5mbyIKKy5QRAorRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSB2ZXJzaW9uIHNlY3Rpb25zIGluIHRoZSBmaWxlLCBpdCB0aGV5CitleGlzdC4KKy5JUCAiXGZCXC1BXGZSIiA0CisuSVggSXRlbSAiLUEiCisuUEQgMAorLklQICJcZkJcLVwtYXJjaFwtc3BlY2lmaWNcZlIiIDQKKy5JWCBJdGVtICItLWFyY2gtc3BlY2lmaWMiCisuUEQKK0Rpc3BsYXlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBpbiB0aGUgZmlsZSwgaWYgdGhlcmUKK2lzIGFueS4KKy5JUCAiXGZCXC1EXGZSIiA0CisuSVggSXRlbSAiLUQiCisuUEQgMAorLklQICJcZkJcLVwtdXNlXC1keW5hbWljXGZSIiA0CisuSVggSXRlbSAiLS11c2UtZHluYW1pYyIKKy5QRAorV2hlbiBkaXNwbGF5aW5nIHN5bWJvbHMsIHRoaXMgb3B0aW9uIG1ha2VzIFxmQnJlYWRlbGZcZlIgdXNlIHRoZQorc3ltYm9sIGhhc2ggdGFibGVzIGluIHRoZSBmaWxlJ3MgZHluYW1pYyBzZWN0aW9uLCByYXRoZXIgdGhhbiB0aGUKK3N5bWJvbCB0YWJsZSBzZWN0aW9ucy4KKy5JUCAiXGZCXC14IDxudW1iZXIgb3IgbmFtZT5cZlIiIDQKKy5JWCBJdGVtICIteCA8bnVtYmVyIG9yIG5hbWU+IgorLlBEIDAKKy5JUCAiXGZCXC1cLWhleFwtZHVtcD08bnVtYmVyIG9yIG5hbWU+XGZSIiA0CisuSVggSXRlbSAiLS1oZXgtZHVtcD08bnVtYmVyIG9yIG5hbWU+IgorLlBECitEaXNwbGF5cyB0aGUgY29udGVudHMgb2YgdGhlIGluZGljYXRlZCBzZWN0aW9uIGFzIGEgaGV4YWRlY2ltYWwgYnl0ZXMuCitBIG51bWJlciBpZGVudGlmaWVzIGEgcGFydGljdWxhciBzZWN0aW9uIGJ5IGluZGV4IGluIHRoZSBzZWN0aW9uIHRhYmxlOworYW55IG90aGVyIHN0cmluZyBpZGVudGlmaWVzIGFsbCBzZWN0aW9ucyB3aXRoIHRoYXQgbmFtZSBpbiB0aGUgb2JqZWN0IGZpbGUuCisuSVAgIlxmQlwtUiA8bnVtYmVyIG9yIG5hbWU+XGZSIiA0CisuSVggSXRlbSAiLVIgPG51bWJlciBvciBuYW1lPiIKKy5QRCAwCisuSVAgIlxmQlwtXC1yZWxvY2F0ZWRcLWR1bXA9PG51bWJlciBvciBuYW1lPlxmUiIgNAorLklYIEl0ZW0gIi0tcmVsb2NhdGVkLWR1bXA9PG51bWJlciBvciBuYW1lPiIKKy5QRAorRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmRpY2F0ZWQgc2VjdGlvbiBhcyBhIGhleGFkZWNpbWFsCitieXRlcy4gIEEgbnVtYmVyIGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyIHNlY3Rpb24gYnkgaW5kZXggaW4gdGhlCitzZWN0aW9uIHRhYmxlOyBhbnkgb3RoZXIgc3RyaW5nIGlkZW50aWZpZXMgYWxsIHNlY3Rpb25zIHdpdGggdGhhdCBuYW1lCitpbiB0aGUgb2JqZWN0IGZpbGUuICBUaGUgY29udGVudHMgb2YgdGhlIHNlY3Rpb24gd2lsbCBiZSByZWxvY2F0ZWQKK2JlZm9yZSB0aGV5IGFyZSBkaXNwbGF5ZWQuCisuSVAgIlxmQlwtcCA8bnVtYmVyIG9yIG5hbWU+XGZSIiA0CisuSVggSXRlbSAiLXAgPG51bWJlciBvciBuYW1lPiIKKy5QRCAwCisuSVAgIlxmQlwtXC1zdHJpbmdcLWR1bXA9PG51bWJlciBvciBuYW1lPlxmUiIgNAorLklYIEl0ZW0gIi0tc3RyaW5nLWR1bXA9PG51bWJlciBvciBuYW1lPiIKKy5QRAorRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmRpY2F0ZWQgc2VjdGlvbiBhcyBwcmludGFibGUgc3RyaW5ncy4KK0EgbnVtYmVyIGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyIHNlY3Rpb24gYnkgaW5kZXggaW4gdGhlIHNlY3Rpb24gdGFibGU7Cithbnkgb3RoZXIgc3RyaW5nIGlkZW50aWZpZXMgYWxsIHNlY3Rpb25zIHdpdGggdGhhdCBuYW1lIGluIHRoZSBvYmplY3QgZmlsZS4KKy5JUCAiXGZCXC1jXGZSIiA0CisuSVggSXRlbSAiLWMiCisuUEQgMAorLklQICJcZkJcLVwtYXJjaGl2ZVwtaW5kZXhcZlIiIDQKKy5JWCBJdGVtICItLWFyY2hpdmUtaW5kZXgiCisuUEQKK0Rpc3BsYXlzIHRoZSBmaWxlIHN5bWJvbCBpbmRleCBpbmZvbWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgaGVhZGVyIHBhcnQKK29mIGJpbmFyeSBhcmNoaXZlcy4gIFBlcmZvcm1zIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIHRoZSBcZkJ0XGZSCitjb21tYW5kIHRvIFxmQmFyXGZSLCBidXQgd2l0aG91dCB1c2luZyB0aGUgXHMtMUJGRFxzMCBsaWJyYXJ5LgorLklQICJcZkJcLXdbbExpYXBybWZGc29SdF1cZlIiIDQKKy5JWCBJdGVtICItd1tsTGlhcHJtZkZzb1J0XSIKKy5QRCAwCisuSVAgIlxmQlwtXC1kZWJ1Z1wtZHVtcFs9cmF3bGluZSw9ZGVjb2RlZGxpbmUsPWluZm8sPWFiYnJldiw9cHVibmFtZXMsPWFyYW5nZXMsPW1hY3JvLD1mcmFtZXMsPWZyYW1lc1wtaW50ZXJwLD1zdHIsPWxvYyw9UmFuZ2VzLD1wdWJ0eXBlcyw9dHJhY2VfaW5mbyw9dHJhY2VfYWJicmV2LD10cmFjZV9hcmFuZ2VzLD1nZGJfaW5kZXhdXGZSIiA0CisuSVggSXRlbSAiLS1kZWJ1Zy1kdW1wWz1yYXdsaW5lLD1kZWNvZGVkbGluZSw9aW5mbyw9YWJicmV2LD1wdWJuYW1lcyw9YXJhbmdlcyw9bWFjcm8sPWZyYW1lcyw9ZnJhbWVzLWludGVycCw9c3RyLD1sb2MsPVJhbmdlcyw9cHVidHlwZXMsPXRyYWNlX2luZm8sPXRyYWNlX2FiYnJldiw9dHJhY2VfYXJhbmdlcyw9Z2RiX2luZGV4XSIKKy5QRAorRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBkZWJ1ZyBzZWN0aW9ucyBpbiB0aGUgZmlsZSwgaWYgYW55IGFyZQorcHJlc2VudC4gIElmIG9uZSBvZiB0aGUgb3B0aW9uYWwgbGV0dGVycyBvciB3b3JkcyBmb2xsb3dzIHRoZSBzd2l0Y2gKK3RoZW4gb25seSBkYXRhIGZvdW5kIGluIHRob3NlIHNwZWNpZmljIHNlY3Rpb25zIHdpbGwgYmUgZHVtcGVkLgorLlNwCitOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc2luZ2xlIGxldHRlciBvcHRpb24gdG8gZGlzcGxheSB0aGUgY29udGVudCBvZgordHJhY2Ugc2VjdGlvbnMgb3IgLmdkYl9pbmRleC4KKy5TcAorTm90ZTogdGhlIFxmQj1kZWNvZGVkbGluZVxmUiBvcHRpb24gd2lsbCBkaXNwbGF5IHRoZSBpbnRlcnByZXRlZAorY29udGVudHMgb2YgYSAuZGVidWdfbGluZSBzZWN0aW9uIHdoZXJlYXMgdGhlIFxmQj1yYXdsaW5lXGZSIG9wdGlvbgorZHVtcHMgdGhlIGNvbnRlbnRzIGluIGEgcmF3IGZvcm1hdC4KKy5TcAorTm90ZTogdGhlIFxmQj1mcmFtZXNcLWludGVycFxmUiBvcHRpb24gd2lsbCBkaXNwbGF5IHRoZSBpbnRlcnByZXRlZAorY29udGVudHMgb2YgYSAuZGVidWdfZnJhbWUgc2VjdGlvbiB3aGVyZWFzIHRoZSBcZkI9ZnJhbWVzXGZSIG9wdGlvbgorZHVtcHMgdGhlIGNvbnRlbnRzIGluIGEgcmF3IGZvcm1hdC4KKy5TcAorTm90ZTogdGhlIG91dHB1dCBmcm9tIHRoZSBcZkI9aW5mb1xmUiBvcHRpb24gY2FuIGFsc28gYmUgYWZmZWN0ZWQKK2J5IHRoZSBvcHRpb25zIFxmQlwtXC1kd2FyZlwtZGVwdGhcZlIgYW5kIFxmQlwtXC1kd2FyZlwtc3RhcnRcZlIuCisuSVAgIlxmQlwtXC1kd2FyZlwtZGVwdGg9XGZSXGZJblxmUiIgNAorLklYIEl0ZW0gIi0tZHdhcmYtZGVwdGg9biIKK0xpbWl0IHRoZSBkdW1wIG9mIHRoZSBcZihDV1wqKENgLmRlYnVnX2luZm9cKihDJ1xmUiBzZWN0aW9uIHRvIFxmSW5cZlIgY2hpbGRyZW4uCitUaGlzIGlzIG9ubHkgdXNlZnVsIHdpdGggXGZCXC1cLWRlYnVnXC1kdW1wPWluZm9cZlIuICBUaGUgZGVmYXVsdCBpcwordG8gcHJpbnQgYWxsIERJRXM7IHRoZSBzcGVjaWFsIHZhbHVlIDAgZm9yIFxmSW5cZlIgd2lsbCBhbHNvIGhhdmUgdGhpcworZWZmZWN0LgorLlNwCitXaXRoIGEgbm9uLXplcm8gdmFsdWUgZm9yIFxmSW5cZlIsIERJRXMgYXQgb3IgZGVlcGVyIHRoYW4gXGZJblxmUgorbGV2ZWxzIHdpbGwgbm90IGJlIHByaW50ZWQuICBUaGUgcmFuZ2UgZm9yIFxmSW5cZlIgaXMgemVyby1iYXNlZC4KKy5JUCAiXGZCXC1cLWR3YXJmXC1zdGFydD1cZlJcZkluXGZSIiA0CisuSVggSXRlbSAiLS1kd2FyZi1zdGFydD1uIgorUHJpbnQgb25seSBESUVzIGJlZ2lubmluZyB3aXRoIHRoZSBccy0xRElFXHMwIG51bWJlcmVkIFxmSW5cZlIuICBUaGlzIGlzIG9ubHkKK3VzZWZ1bCB3aXRoIFxmQlwtXC1kZWJ1Z1wtZHVtcD1pbmZvXGZSLgorLlNwCitJZiBzcGVjaWZpZWQsIHRoaXMgb3B0aW9uIHdpbGwgc3VwcHJlc3MgcHJpbnRpbmcgb2YgYW55IGhlYWRlcgoraW5mb3JtYXRpb24gYW5kIGFsbCBESUVzIGJlZm9yZSB0aGUgXHMtMURJRVxzMCBudW1iZXJlZCBcZkluXGZSLiAgT25seQorc2libGluZ3MgYW5kIGNoaWxkcmVuIG9mIHRoZSBzcGVjaWZpZWQgXHMtMURJRVxzMCB3aWxsIGJlIHByaW50ZWQuCisuU3AKK1RoaXMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBcZkJcLVwtZHdhcmZcLWRlcHRoXGZSLgorLklQICJcZkJcLUlcZlIiIDQKKy5JWCBJdGVtICItSSIKKy5QRCAwCisuSVAgIlxmQlwtXC1oaXN0b2dyYW1cZlIiIDQKKy5JWCBJdGVtICItLWhpc3RvZ3JhbSIKKy5QRAorRGlzcGxheSBhIGhpc3RvZ3JhbSBvZiBidWNrZXQgbGlzdCBsZW5ndGhzIHdoZW4gZGlzcGxheWluZyB0aGUgY29udGVudHMKK29mIHRoZSBzeW1ib2wgdGFibGVzLgorLklQICJcZkJcLXZcZlIiIDQKKy5JWCBJdGVtICItdiIKKy5QRCAwCisuSVAgIlxmQlwtXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLS12ZXJzaW9uIgorLlBECitEaXNwbGF5IHRoZSB2ZXJzaW9uIG51bWJlciBvZiByZWFkZWxmLgorLklQICJcZkJcLVdcZlIiIDQKKy5JWCBJdGVtICItVyIKKy5QRCAwCisuSVAgIlxmQlwtXC13aWRlXGZSIiA0CisuSVggSXRlbSAiLS13aWRlIgorLlBECitEb24ndCBicmVhayBvdXRwdXQgbGluZXMgdG8gZml0IGludG8gODAgY29sdW1ucy4gQnkgZGVmYXVsdAorXCZcZkJyZWFkZWxmXGZSIGJyZWFrcyBzZWN0aW9uIGhlYWRlciBhbmQgc2VnbWVudCBsaXN0aW5nIGxpbmVzIGZvcgorNjRcLWJpdCBccy0xRUxGXHMwIGZpbGVzLCBzbyB0aGF0IHRoZXkgZml0IGludG8gODAgY29sdW1ucy4gVGhpcyBvcHRpb24gY2F1c2VzCitcJlxmQnJlYWRlbGZcZlIgdG8gcHJpbnQgZWFjaCBzZWN0aW9uIGhlYWRlciByZXNwLiBlYWNoIHNlZ21lbnQgb25lIGEKK3NpbmdsZSBsaW5lLCB3aGljaCBpcyBmYXIgbW9yZSByZWFkYWJsZSBvbiB0ZXJtaW5hbHMgd2lkZXIgdGhhbiA4MCBjb2x1bW5zLgorLklQICJcZkJcLUhcZlIiIDQKKy5JWCBJdGVtICItSCIKKy5QRCAwCisuSVAgIlxmQlwtXC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS1oZWxwIgorLlBECitEaXNwbGF5IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyB1bmRlcnN0b29kIGJ5IFxmQnJlYWRlbGZcZlIuCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgorXCZcZklvYmpkdW1wXGZSXHwoMSksIGFuZCB0aGUgSW5mbyBlbnRyaWVzIGZvciBcZkliaW51dGlsc1xmUi4KKy5TSCAiQ09QWVJJR0hUIgorLklYIEhlYWRlciAiQ09QWVJJR0hUIgorQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBcKihMIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcKihSIi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1zaXplLjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtc2l6ZS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOTY5ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtc2l6ZS4xCkBAIC0wLDAgKzEsMjY5IEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yMyAoUG9kOjpTaW1wbGUgMy4xNCkKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiU0laRSAxIgorLlRIIFNJWkUgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitzaXplIFwtIGxpc3Qgc2VjdGlvbiBzaXplcyBhbmQgdG90YWwgc2l6ZS4KKy5TSCAiU1lOT1BTSVMiCisuSVggSGVhZGVyICJTWU5PUFNJUyIKK3NpemUgW1xmQlwtQVxmUnxcZkJcLUJcZlJ8XGZCXC1cLWZvcm1hdD1cZlJcZkljb21wYXRpYmlsaXR5XGZSXQorICAgICBbXGZCXC1cLWhlbHBcZlJdCisgICAgIFtcZkJcLWRcZlJ8XGZCXC1vXGZSfFxmQlwteFxmUnxcZkJcLVwtcmFkaXg9XGZSXGZJbnVtYmVyXGZSXQorICAgICBbXGZCXC1cLWNvbW1vblxmUl0KKyAgICAgW1xmQlwtdFxmUnxcZkJcLVwtdG90YWxzXGZSXQorICAgICBbXGZCXC1cLXRhcmdldD1cZlJcZkliZmRuYW1lXGZSXSBbXGZCXC1WXGZSfFxmQlwtXC12ZXJzaW9uXGZSXQorICAgICBbXGZJb2JqZmlsZVxmUi4uLl0KKy5TSCAiREVTQ1JJUFRJT04iCisuSVggSGVhZGVyICJERVNDUklQVElPTiIKK1RoZSBccy0xR05VXHMwIFxmQnNpemVcZlIgdXRpbGl0eSBsaXN0cyB0aGUgc2VjdGlvbiBzaXplc1wtXC1cLWFuZCB0aGUgdG90YWwKK3NpemVcLVwtXC1mb3IgZWFjaCBvZiB0aGUgb2JqZWN0IG9yIGFyY2hpdmUgZmlsZXMgXGZJb2JqZmlsZVxmUiBpbiBpdHMKK2FyZ3VtZW50IGxpc3QuICBCeSBkZWZhdWx0LCBvbmUgbGluZSBvZiBvdXRwdXQgaXMgZ2VuZXJhdGVkIGZvciBlYWNoCitvYmplY3QgZmlsZSBvciBlYWNoIG1vZHVsZSBpbiBhbiBhcmNoaXZlLgorLlBQCitcJlxmSW9iamZpbGVcZlIuLi4gYXJlIHRoZSBvYmplY3QgZmlsZXMgdG8gYmUgZXhhbWluZWQuCitJZiBub25lIGFyZSBzcGVjaWZpZWQsIHRoZSBmaWxlIFxmKENXXCooQ2BhLm91dFwqKEMnXGZSIHdpbGwgYmUgdXNlZC4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCitUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorLklQICJcZkJcLUFcZlIiIDQKKy5JWCBJdGVtICItQSIKKy5QRCAwCisuSVAgIlxmQlwtQlxmUiIgNAorLklYIEl0ZW0gIi1CIgorLklQICJcZkJcLVwtZm9ybWF0PVxmUlxmSWNvbXBhdGliaWxpdHlcZlIiIDQKKy5JWCBJdGVtICItLWZvcm1hdD1jb21wYXRpYmlsaXR5IgorLlBECitVc2luZyBvbmUgb2YgdGhlc2Ugb3B0aW9ucywgeW91IGNhbiBjaG9vc2Ugd2hldGhlciB0aGUgb3V0cHV0IGZyb20gXHMtMUdOVVxzMAorXCZcZkJzaXplXGZSIHJlc2VtYmxlcyBvdXRwdXQgZnJvbSBTeXN0ZW0gViBcZkJzaXplXGZSICh1c2luZyBcZkJcLUFcZlIsCitvciBcZkJcLVwtZm9ybWF0PXN5c3ZcZlIpLCBvciBCZXJrZWxleSBcZkJzaXplXGZSICh1c2luZyBcZkJcLUJcZlIsIG9yCitcJlxmQlwtXC1mb3JtYXQ9YmVya2VsZXlcZlIpLiAgVGhlIGRlZmF1bHQgaXMgdGhlIG9uZS1saW5lIGZvcm1hdCBzaW1pbGFyIHRvCitCZXJrZWxleSdzLgorLlNwCitIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhlIEJlcmtlbGV5IChkZWZhdWx0KSBmb3JtYXQgb2Ygb3V0cHV0IGZyb20KK1wmXGZCc2l6ZVxmUjoKKy5TcAorLlZiIDQKK1wmICAgICAgICAkIHNpemUgXC1cLWZvcm1hdD1CZXJrZWxleSByYW5saWIgc2l6ZQorXCYgICAgICAgIHRleHQgICAgZGF0YSAgICBic3MgICAgIGRlYyAgICAgaGV4ICAgICBmaWxlbmFtZQorXCYgICAgICAgIDI5NDg4MCAgODE5MjAgICAxMTU5MiAgIDM4ODM5MiAgNWVkMjggICByYW5saWIKK1wmICAgICAgICAyOTQ4ODAgIDgxOTIwICAgMTE4ODggICAzODg2ODggIDVlZTUwICAgc2l6ZQorLlZlCisuU3AKK1RoaXMgaXMgdGhlIHNhbWUgZGF0YSwgYnV0IGRpc3BsYXllZCBjbG9zZXIgdG8gU3lzdGVtIFYgY29udmVudGlvbnM6CisuU3AKKy5WYiA3CitcJiAgICAgICAgJCBzaXplIFwtXC1mb3JtYXQ9U3lzViByYW5saWIgc2l6ZQorXCYgICAgICAgIHJhbmxpYiAgOgorXCYgICAgICAgIHNlY3Rpb24gICAgICAgICBzaXplICAgICAgICAgYWRkcgorXCYgICAgICAgIC50ZXh0ICAgICAgICAgMjk0ODgwICAgICAgICAgODE5MgorXCYgICAgICAgIC5kYXRhICAgICAgICAgIDgxOTIwICAgICAgIDMwMzEwNAorXCYgICAgICAgIC5ic3MgICAgICAgICAgIDExNTkyICAgICAgIDM4NTAyNAorXCYgICAgICAgIFRvdGFsICAgICAgICAgMzg4MzkyCitcJiAgICAgICAgCitcJiAgICAgICAgCitcJiAgICAgICAgc2l6ZSAgOgorXCYgICAgICAgIHNlY3Rpb24gICAgICAgICBzaXplICAgICAgICAgYWRkcgorXCYgICAgICAgIC50ZXh0ICAgICAgICAgMjk0ODgwICAgICAgICAgODE5MgorXCYgICAgICAgIC5kYXRhICAgICAgICAgIDgxOTIwICAgICAgIDMwMzEwNAorXCYgICAgICAgIC5ic3MgICAgICAgICAgIDExODg4ICAgICAgIDM4NTAyNAorXCYgICAgICAgIFRvdGFsICAgICAgICAgMzg4Njg4CisuVmUKKy5JUCAiXGZCXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCitTaG93IGEgc3VtbWFyeSBvZiBhY2NlcHRhYmxlIGFyZ3VtZW50cyBhbmQgb3B0aW9ucy4KKy5JUCAiXGZCXC1kXGZSIiA0CisuSVggSXRlbSAiLWQiCisuUEQgMAorLklQICJcZkJcLW9cZlIiIDQKKy5JWCBJdGVtICItbyIKKy5JUCAiXGZCXC14XGZSIiA0CisuSVggSXRlbSAiLXgiCisuSVAgIlxmQlwtXC1yYWRpeD1cZlJcZkludW1iZXJcZlIiIDQKKy5JWCBJdGVtICItLXJhZGl4PW51bWJlciIKKy5QRAorVXNpbmcgb25lIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gY29udHJvbCB3aGV0aGVyIHRoZSBzaXplIG9mIGVhY2gKK3NlY3Rpb24gaXMgZ2l2ZW4gaW4gZGVjaW1hbCAoXGZCXC1kXGZSLCBvciBcZkJcLVwtcmFkaXg9MTBcZlIpOyBvY3RhbAorKFxmQlwtb1xmUiwgb3IgXGZCXC1cLXJhZGl4PThcZlIpOyBvciBoZXhhZGVjaW1hbCAoXGZCXC14XGZSLCBvcgorXCZcZkJcLVwtcmFkaXg9MTZcZlIpLiAgSW4gXGZCXC1cLXJhZGl4PVxmUlxmSW51bWJlclxmUiwgb25seSB0aGUgdGhyZWUKK3ZhbHVlcyAoOCwgMTAsIDE2KSBhcmUgc3VwcG9ydGVkLiAgVGhlIHRvdGFsIHNpemUgaXMgYWx3YXlzIGdpdmVuIGluIHR3bworcmFkaWNlczsgZGVjaW1hbCBhbmQgaGV4YWRlY2ltYWwgZm9yIFxmQlwtZFxmUiBvciBcZkJcLXhcZlIgb3V0cHV0LCBvcgorb2N0YWwgYW5kIGhleGFkZWNpbWFsIGlmIHlvdSdyZSB1c2luZyBcZkJcLW9cZlIuCisuSVAgIlxmQlwtXC1jb21tb25cZlIiIDQKKy5JWCBJdGVtICItLWNvbW1vbiIKK1ByaW50IHRvdGFsIHNpemUgb2YgY29tbW9uIHN5bWJvbHMgaW4gZWFjaCBmaWxlLiAgV2hlbiB1c2luZyBCZXJrZWxleQorZm9ybWF0IHRoZXNlIGFyZSBpbmNsdWRlZCBpbiB0aGUgYnNzIHNpemUuCisuSVAgIlxmQlwtdFxmUiIgNAorLklYIEl0ZW0gIi10IgorLlBEIDAKKy5JUCAiXGZCXC1cLXRvdGFsc1xmUiIgNAorLklYIEl0ZW0gIi0tdG90YWxzIgorLlBECitTaG93IHRvdGFscyBvZiBhbGwgb2JqZWN0cyBsaXN0ZWQgKEJlcmtlbGV5IGZvcm1hdCBsaXN0aW5nIG1vZGUgb25seSkuCisuSVAgIlxmQlwtXC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0PWJmZG5hbWUiCitTcGVjaWZ5IHRoYXQgdGhlIG9iamVjdC1jb2RlIGZvcm1hdCBmb3IgXGZJb2JqZmlsZVxmUiBpcworXCZcZkliZmRuYW1lXGZSLiAgVGhpcyBvcHRpb24gbWF5IG5vdCBiZSBuZWNlc3Nhcnk7IFxmQnNpemVcZlIgY2FuCithdXRvbWF0aWNhbGx5IHJlY29nbml6ZSBtYW55IGZvcm1hdHMuCisuSVAgIlxmQlwtVlxmUiIgNAorLklYIEl0ZW0gIi1WIgorLlBEIDAKKy5JUCAiXGZCXC1cLXZlcnNpb25cZlIiIDQKKy5JWCBJdGVtICItLXZlcnNpb24iCisuUEQKK0Rpc3BsYXkgdGhlIHZlcnNpb24gbnVtYmVyIG9mIFxmQnNpemVcZlIuCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgorXCZcZklhclxmUlx8KDEpLCBcZklvYmpkdW1wXGZSXHwoMSksIFxmSXJlYWRlbGZcZlJcfCgxKSwgYW5kIHRoZSBJbmZvIGVudHJpZXMgZm9yIFxmSWJpbnV0aWxzXGZSLgorLlNIICJDT1BZUklHSFQiCisuSVggSGVhZGVyICJDT1BZUklHSFQiCitDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsCisxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LAorMjAxMCwgMjAxMSwgMjAxMgorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisuUFAKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cit3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgd2l0aCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIHdpdGggbm8KK0JhY2stQ292ZXIgVGV4dHMuICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkIFwqKEwiXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZVwqKFIiLgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuMS9hYXJjaDY0LW5vbmUtZWxmLXN0cmluZ3MuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1zdHJpbmdzLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlMTI2NQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1zdHJpbmdzLjEKQEAgLTAsMCArMSwyNTggQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjIzIChQb2Q6OlNpbXBsZSAzLjE0KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJTVFJJTkdTIDEiCisuVEggU1RSSU5HUyAxICIyMDEzLTAzLTI1IiAiYmludXRpbHMtMi4yMy4yIiAiR05VIERldmVsb3BtZW50IFRvb2xzIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK3N0cmluZ3MgXC0gcHJpbnQgdGhlIHN0cmluZ3Mgb2YgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gZmlsZXMuCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCitzdHJpbmdzIFtcZkJcLWFmb3ZWXGZSXSBbXGZCXC1cZlJcZkltaW4tbGVuXGZSXQorICAgICAgICBbXGZCXC1uXGZSIFxmSW1pbi1sZW5cZlJdIFtcZkJcLVwtYnl0ZXM9XGZSXGZJbWluLWxlblxmUl0KKyAgICAgICAgW1xmQlwtdFxmUiBcZklyYWRpeFxmUl0gW1xmQlwtXC1yYWRpeD1cZlJcZklyYWRpeFxmUl0KKyAgICAgICAgW1xmQlwtZVxmUiBcZkllbmNvZGluZ1xmUl0gW1xmQlwtXC1lbmNvZGluZz1cZlJcZkllbmNvZGluZ1xmUl0KKyAgICAgICAgW1xmQlwtXGZSXSBbXGZCXC1cLWFsbFxmUl0gW1xmQlwtXC1wcmludFwtZmlsZVwtbmFtZVxmUl0KKyAgICAgICAgW1xmQlwtVFxmUiBcZkliZmRuYW1lXGZSXSBbXGZCXC1cLXRhcmdldD1cZlJcZkliZmRuYW1lXGZSXQorICAgICAgICBbXGZCXC1cLWhlbHBcZlJdIFtcZkJcLVwtdmVyc2lvblxmUl0gXGZJZmlsZVxmUi4uLgorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorRm9yIGVhY2ggXGZJZmlsZVxmUiBnaXZlbiwgXHMtMUdOVVxzMCBcZkJzdHJpbmdzXGZSIHByaW50cyB0aGUgcHJpbnRhYmxlCitjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgYXJlIGF0IGxlYXN0IDQgY2hhcmFjdGVycyBsb25nIChvciB0aGUgbnVtYmVyCitnaXZlbiB3aXRoIHRoZSBvcHRpb25zIGJlbG93KSBhbmQgYXJlIGZvbGxvd2VkIGJ5IGFuIHVucHJpbnRhYmxlCitjaGFyYWN0ZXIuICBCeSBkZWZhdWx0LCBpdCBvbmx5IHByaW50cyB0aGUgc3RyaW5ncyBmcm9tIHRoZSBpbml0aWFsaXplZAorYW5kIGxvYWRlZCBzZWN0aW9ucyBvZiBvYmplY3QgZmlsZXM7IGZvciBvdGhlciB0eXBlcyBvZiBmaWxlcywgaXQgcHJpbnRzCit0aGUgc3RyaW5ncyBmcm9tIHRoZSB3aG9sZSBmaWxlLgorLlBQCitcJlxmQnN0cmluZ3NcZlIgaXMgbWFpbmx5IHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvbnRlbnRzIG9mIG5vbi10ZXh0CitmaWxlcy4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCisuSVAgIlxmQlwtYVxmUiIgNAorLklYIEl0ZW0gIi1hIgorLlBEIDAKKy5JUCAiXGZCXC1cLWFsbFxmUiIgNAorLklYIEl0ZW0gIi0tYWxsIgorLklQICJcZkJcLVxmUiIgNAorLklYIEl0ZW0gIi0iCisuUEQKK0RvIG5vdCBzY2FuIG9ubHkgdGhlIGluaXRpYWxpemVkIGFuZCBsb2FkZWQgc2VjdGlvbnMgb2Ygb2JqZWN0IGZpbGVzOworc2NhbiB0aGUgd2hvbGUgZmlsZXMuCisuSVAgIlxmQlwtZlxmUiIgNAorLklYIEl0ZW0gIi1mIgorLlBEIDAKKy5JUCAiXGZCXC1cLXByaW50XC1maWxlXC1uYW1lXGZSIiA0CisuSVggSXRlbSAiLS1wcmludC1maWxlLW5hbWUiCisuUEQKK1ByaW50IHRoZSBuYW1lIG9mIHRoZSBmaWxlIGJlZm9yZSBlYWNoIHN0cmluZy4KKy5JUCAiXGZCXC1cLWhlbHBcZlIiIDQKKy5JWCBJdGVtICItLWhlbHAiCitQcmludCBhIHN1bW1hcnkgb2YgdGhlIHByb2dyYW0gdXNhZ2Ugb24gdGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KKy5JUCAiXGZCXC1cZlJcZkltaW4tbGVuXGZSIiA0CisuSVggSXRlbSAiLW1pbi1sZW4iCisuUEQgMAorLklQICJcZkJcLW5cZlIgXGZJbWluLWxlblxmUiIgNAorLklYIEl0ZW0gIi1uIG1pbi1sZW4iCisuSVAgIlxmQlwtXC1ieXRlcz1cZlJcZkltaW4tbGVuXGZSIiA0CisuSVggSXRlbSAiLS1ieXRlcz1taW4tbGVuIgorLlBECitQcmludCBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCBsZWFzdCBcZkltaW4tbGVuXGZSIGNoYXJhY3RlcnMKK2xvbmcsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgNC4KKy5JUCAiXGZCXC1vXGZSIiA0CisuSVggSXRlbSAiLW8iCitMaWtlIFxmQlwtdCBvXGZSLiAgU29tZSBvdGhlciB2ZXJzaW9ucyBvZiBcZkJzdHJpbmdzXGZSIGhhdmUgXGZCXC1vXGZSCithY3QgbGlrZSBcZkJcLXQgZFxmUiBpbnN0ZWFkLiAgU2luY2Ugd2UgY2FuIG5vdCBiZSBjb21wYXRpYmxlIHdpdGggYm90aAord2F5cywgd2Ugc2ltcGx5IGNob3NlIG9uZS4KKy5JUCAiXGZCXC10XGZSIFxmSXJhZGl4XGZSIiA0CisuSVggSXRlbSAiLXQgcmFkaXgiCisuUEQgMAorLklQICJcZkJcLVwtcmFkaXg9XGZSXGZJcmFkaXhcZlIiIDQKKy5JWCBJdGVtICItLXJhZGl4PXJhZGl4IgorLlBECitQcmludCB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZSBiZWZvcmUgZWFjaCBzdHJpbmcuICBUaGUgc2luZ2xlCitjaGFyYWN0ZXIgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSByYWRpeCBvZiB0aGUgb2Zmc2V0XC1cLVwtXGZCb1xmUiBmb3IKK29jdGFsLCBcZkJ4XGZSIGZvciBoZXhhZGVjaW1hbCwgb3IgXGZCZFxmUiBmb3IgZGVjaW1hbC4KKy5JUCAiXGZCXC1lXGZSIFxmSWVuY29kaW5nXGZSIiA0CisuSVggSXRlbSAiLWUgZW5jb2RpbmciCisuUEQgMAorLklQICJcZkJcLVwtZW5jb2Rpbmc9XGZSXGZJZW5jb2RpbmdcZlIiIDQKKy5JWCBJdGVtICItLWVuY29kaW5nPWVuY29kaW5nIgorLlBECitTZWxlY3QgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBvZiB0aGUgc3RyaW5ncyB0aGF0IGFyZSB0byBiZSBmb3VuZC4KK1Bvc3NpYmxlIHZhbHVlcyBmb3IgXGZJZW5jb2RpbmdcZlIgYXJlOiBcZkJzXGZSID0gc2luZ2xlXC03XC1iaXRcLWJ5dGUKK2NoYXJhY3RlcnMgKFxzLTFBU0NJSVxzMCwgXHMtMUlTT1xzMCA4ODU5LCBldGMuLCBkZWZhdWx0KSwgXGZCU1xmUiA9CitzaW5nbGVcLThcLWJpdFwtYnl0ZSBjaGFyYWN0ZXJzLCBcZkJiXGZSID0gMTZcLWJpdCBiaWdlbmRpYW4sIFxmQmxcZlIgPQorMTZcLWJpdCBsaXR0bGVlbmRpYW4sIFxmQkJcZlIgPSAzMlwtYml0IGJpZ2VuZGlhbiwgXGZCTFxmUiA9IDMyXC1iaXQKK2xpdHRsZWVuZGlhbi4gIFVzZWZ1bCBmb3IgZmluZGluZyB3aWRlIGNoYXJhY3RlciBzdHJpbmdzLiAoXGZCbFxmUgorYW5kIFxmQmJcZlIgYXBwbHkgdG8sIGZvciBleGFtcGxlLCBVbmljb2RlIFxzLTFVVEZcLTE2L1VDU1wtMlxzMCBlbmNvZGluZ3MpLgorLklQICJcZkJcLVRcZlIgXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1UIGJmZG5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItLXRhcmdldD1iZmRuYW1lIgorLlBECitTcGVjaWZ5IGFuIG9iamVjdCBjb2RlIGZvcm1hdCBvdGhlciB0aGFuIHlvdXIgc3lzdGVtJ3MgZGVmYXVsdCBmb3JtYXQuCisuSVAgIlxmQlwtdlxmUiIgNAorLklYIEl0ZW0gIi12IgorLlBEIDAKKy5JUCAiXGZCXC1WXGZSIiA0CisuSVggSXRlbSAiLVYiCisuSVAgIlxmQlwtXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLS12ZXJzaW9uIgorLlBECitQcmludCB0aGUgcHJvZ3JhbSB2ZXJzaW9uIG51bWJlciBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorLklQICJcZkJAXGZSXGZJZmlsZVxmUiIgNAorLklYIEl0ZW0gIkBmaWxlIgorUmVhZCBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tIFxmSWZpbGVcZlIuICBUaGUgb3B0aW9ucyByZWFkIGFyZQoraW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIEBcZklmaWxlXGZSIG9wdGlvbi4gIElmIFxmSWZpbGVcZlIKK2RvZXMgbm90IGV4aXN0LCBvciBjYW5ub3QgYmUgcmVhZCwgdGhlbiB0aGUgb3B0aW9uIHdpbGwgYmUgdHJlYXRlZAorbGl0ZXJhbGx5LCBhbmQgbm90IHJlbW92ZWQuCisuU3AKK09wdGlvbnMgaW4gXGZJZmlsZVxmUiBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuICBBIHdoaXRlc3BhY2UKK2NoYXJhY3RlciBtYXkgYmUgaW5jbHVkZWQgaW4gYW4gb3B0aW9uIGJ5IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUKK29wdGlvbiBpbiBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMuICBBbnkgY2hhcmFjdGVyIChpbmNsdWRpbmcgYQorYmFja3NsYXNoKSBtYXkgYmUgaW5jbHVkZWQgYnkgcHJlZml4aW5nIHRoZSBjaGFyYWN0ZXIgdG8gYmUgaW5jbHVkZWQKK3dpdGggYSBiYWNrc2xhc2guICBUaGUgXGZJZmlsZVxmUiBtYXkgaXRzZWxmIGNvbnRhaW4gYWRkaXRpb25hbAorQFxmSWZpbGVcZlIgb3B0aW9uczsgYW55IHN1Y2ggb3B0aW9ucyB3aWxsIGJlIHByb2Nlc3NlZCByZWN1cnNpdmVseS4KKy5TSCAiU0VFIEFMU08iCisuSVggSGVhZGVyICJTRUUgQUxTTyIKK1wmXGZJYXJcZlJcfCgxKSwgXGZJbm1cZlJcfCgxKSwgXGZJb2JqZHVtcFxmUlx8KDEpLCBcZklyYW5saWJcZlJcfCgxKSwgXGZJcmVhZGVsZlxmUlx8KDEpCithbmQgdGhlIEluZm8gZW50cmllcyBmb3IgXGZJYmludXRpbHNcZlIuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgXCooTCJccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlXCooUiIuCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtc3RyaXAuMSBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi1zdHJpcC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YzAyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtc3RyaXAuMQpAQCAtMCwwICsxLDQyOCBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjMgKFBvZDo6U2ltcGxlIDMuMTQpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIlNUUklQIDEiCisuVEggU1RSSVAgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitzdHJpcCBcLSBEaXNjYXJkIHN5bWJvbHMgZnJvbSBvYmplY3QgZmlsZXMuCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCitzdHJpcCBbXGZCXC1GXGZSIFxmSWJmZG5hbWVcZlIgfFxmQlwtXC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUl0KKyAgICAgIFtcZkJcLUlcZlIgXGZJYmZkbmFtZVxmUiB8XGZCXC1cLWlucHV0XC10YXJnZXQ9XGZSXGZJYmZkbmFtZVxmUl0KKyAgICAgIFtcZkJcLU9cZlIgXGZJYmZkbmFtZVxmUiB8XGZCXC1cLW91dHB1dFwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlJdCisgICAgICBbXGZCXC1zXGZSfFxmQlwtXC1zdHJpcFwtYWxsXGZSXQorICAgICAgW1xmQlwtU1xmUnxcZkJcLWdcZlJ8XGZCXC1kXGZSfFxmQlwtXC1zdHJpcFwtZGVidWdcZlJdCisgICAgICBbXGZCXC1cLXN0cmlwXC1kd29cZlJdCisgICAgICBbXGZCXC1LXGZSIFxmSXN5bWJvbG5hbWVcZlIgfFxmQlwtXC1rZWVwXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUl0KKyAgICAgIFtcZkJcLU5cZlIgXGZJc3ltYm9sbmFtZVxmUiB8XGZCXC1cLXN0cmlwXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUl0KKyAgICAgIFtcZkJcLXdcZlJ8XGZCXC1cLXdpbGRjYXJkXGZSXQorICAgICAgW1xmQlwteFxmUnxcZkJcLVwtZGlzY2FyZFwtYWxsXGZSXSBbXGZCXC1YXGZSIHxcZkJcLVwtZGlzY2FyZFwtbG9jYWxzXGZSXQorICAgICAgW1xmQlwtUlxmUiBcZklzZWN0aW9ubmFtZVxmUiB8XGZCXC1cLXJlbW92ZVwtc2VjdGlvbj1cZlJcZklzZWN0aW9ubmFtZVxmUl0KKyAgICAgIFtcZkJcLW9cZlIgXGZJZmlsZVxmUl0gW1xmQlwtcFxmUnxcZkJcLVwtcHJlc2VydmVcLWRhdGVzXGZSXQorICAgICAgW1xmQlwtRFxmUnxcZkJcLVwtZW5hYmxlXC1kZXRlcm1pbmlzdGljXC1hcmNoaXZlc1xmUl0KKyAgICAgIFtcZkJcLVVcZlJ8XGZCXC1cLWRpc2FibGVcLWRldGVybWluaXN0aWNcLWFyY2hpdmVzXGZSXQorICAgICAgW1xmQlwtXC1rZWVwXC1maWxlXC1zeW1ib2xzXGZSXQorICAgICAgW1xmQlwtXC1vbmx5XC1rZWVwXC1kZWJ1Z1xmUl0KKyAgICAgIFtcZkJcLXZcZlIgfFxmQlwtXC12ZXJib3NlXGZSXSBbXGZCXC1WXGZSfFxmQlwtXC12ZXJzaW9uXGZSXQorICAgICAgW1xmQlwtXC1oZWxwXGZSXSBbXGZCXC1cLWluZm9cZlJdCisgICAgICBcZklvYmpmaWxlXGZSLi4uCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitcJlxzLTFHTlVcczAgXGZCc3RyaXBcZlIgZGlzY2FyZHMgYWxsIHN5bWJvbHMgZnJvbSBvYmplY3QgZmlsZXMKK1wmXGZJb2JqZmlsZVxmUi4gIFRoZSBsaXN0IG9mIG9iamVjdCBmaWxlcyBtYXkgaW5jbHVkZSBhcmNoaXZlcy4KK0F0IGxlYXN0IG9uZSBvYmplY3QgZmlsZSBtdXN0IGJlIGdpdmVuLgorLlBQCitcJlxmQnN0cmlwXGZSIG1vZGlmaWVzIHRoZSBmaWxlcyBuYW1lZCBpbiBpdHMgYXJndW1lbnQsCityYXRoZXIgdGhhbiB3cml0aW5nIG1vZGlmaWVkIGNvcGllcyB1bmRlciBkaWZmZXJlbnQgbmFtZXMuCisuU0ggIk9QVElPTlMiCisuSVggSGVhZGVyICJPUFRJT05TIgorLklQICJcZkJcLUZcZlIgXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1GIGJmZG5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItLXRhcmdldD1iZmRuYW1lIgorLlBECitUcmVhdCB0aGUgb3JpZ2luYWwgXGZJb2JqZmlsZVxmUiBhcyBhIGZpbGUgd2l0aCB0aGUgb2JqZWN0Citjb2RlIGZvcm1hdCBcZkliZmRuYW1lXGZSLCBhbmQgcmV3cml0ZSBpdCBpbiB0aGUgc2FtZSBmb3JtYXQuCisuSVAgIlxmQlwtXC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS1oZWxwIgorU2hvdyBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gXGZCc3RyaXBcZlIgYW5kIGV4aXQuCisuSVAgIlxmQlwtXC1pbmZvXGZSIiA0CisuSVggSXRlbSAiLS1pbmZvIgorRGlzcGxheSBhIGxpc3Qgc2hvd2luZyBhbGwgYXJjaGl0ZWN0dXJlcyBhbmQgb2JqZWN0IGZvcm1hdHMgYXZhaWxhYmxlLgorLklQICJcZkJcLUlcZlIgXGZJYmZkbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1JIGJmZG5hbWUiCisuUEQgMAorLklQICJcZkJcLVwtaW5wdXRcLXRhcmdldD1cZlJcZkliZmRuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1pbnB1dC10YXJnZXQ9YmZkbmFtZSIKKy5QRAorVHJlYXQgdGhlIG9yaWdpbmFsIFxmSW9iamZpbGVcZlIgYXMgYSBmaWxlIHdpdGggdGhlIG9iamVjdAorY29kZSBmb3JtYXQgXGZJYmZkbmFtZVxmUi4KKy5JUCAiXGZCXC1PXGZSIFxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItTyBiZmRuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLW91dHB1dFwtdGFyZ2V0PVxmUlxmSWJmZG5hbWVcZlIiIDQKKy5JWCBJdGVtICItLW91dHB1dC10YXJnZXQ9YmZkbmFtZSIKKy5QRAorUmVwbGFjZSBcZklvYmpmaWxlXGZSIHdpdGggYSBmaWxlIGluIHRoZSBvdXRwdXQgZm9ybWF0IFxmSWJmZG5hbWVcZlIuCisuSVAgIlxmQlwtUlxmUiBcZklzZWN0aW9ubmFtZVxmUiIgNAorLklYIEl0ZW0gIi1SIHNlY3Rpb25uYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLXJlbW92ZVwtc2VjdGlvbj1cZlJcZklzZWN0aW9ubmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tcmVtb3ZlLXNlY3Rpb249c2VjdGlvbm5hbWUiCisuUEQKK1JlbW92ZSBhbnkgc2VjdGlvbiBuYW1lZCBcZklzZWN0aW9ubmFtZVxmUiBmcm9tIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMKK29wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UuICBOb3RlIHRoYXQgdXNpbmcgdGhpcyBvcHRpb24KK2luYXBwcm9wcmlhdGVseSBtYXkgbWFrZSB0aGUgb3V0cHV0IGZpbGUgdW51c2FibGUuCisuSVAgIlxmQlwtc1xmUiIgNAorLklYIEl0ZW0gIi1zIgorLlBEIDAKKy5JUCAiXGZCXC1cLXN0cmlwXC1hbGxcZlIiIDQKKy5JWCBJdGVtICItLXN0cmlwLWFsbCIKKy5QRAorUmVtb3ZlIGFsbCBzeW1ib2xzLgorLklQICJcZkJcLWdcZlIiIDQKKy5JWCBJdGVtICItZyIKKy5QRCAwCisuSVAgIlxmQlwtU1xmUiIgNAorLklYIEl0ZW0gIi1TIgorLklQICJcZkJcLWRcZlIiIDQKKy5JWCBJdGVtICItZCIKKy5JUCAiXGZCXC1cLXN0cmlwXC1kZWJ1Z1xmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtZGVidWciCisuUEQKK1JlbW92ZSBkZWJ1Z2dpbmcgc3ltYm9scyBvbmx5LgorLklQICJcZkJcLVwtc3RyaXBcLWR3b1xmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtZHdvIgorUmVtb3ZlIHRoZSBjb250ZW50cyBvZiBhbGwgXHMtMURXQVJGXHMwIC5kd28gc2VjdGlvbnMsIGxlYXZpbmcgdGhlCityZW1haW5pbmcgZGVidWdnaW5nIHNlY3Rpb25zIGFuZCBhbGwgc3ltYm9scyBpbnRhY3QuCitTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgb3B0aW9uIGluIHRoZSBcZkJvYmpjb3B5XGZSIHNlY3Rpb24KK2ZvciBtb3JlIGluZm9ybWF0aW9uLgorLklQICJcZkJcLVwtc3RyaXBcLXVubmVlZGVkXGZSIiA0CisuSVggSXRlbSAiLS1zdHJpcC11bm5lZWRlZCIKK1JlbW92ZSBhbGwgc3ltYm9scyB0aGF0IGFyZSBub3QgbmVlZGVkIGZvciByZWxvY2F0aW9uIHByb2Nlc3NpbmcuCisuSVAgIlxmQlwtS1xmUiBcZklzeW1ib2xuYW1lXGZSIiA0CisuSVggSXRlbSAiLUsgc3ltYm9sbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1rZWVwXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0ta2VlcC1zeW1ib2w9c3ltYm9sbmFtZSIKKy5QRAorV2hlbiBzdHJpcHBpbmcgc3ltYm9scywga2VlcCBzeW1ib2wgXGZJc3ltYm9sbmFtZVxmUiBldmVuIGlmIGl0IHdvdWxkCitub3JtYWxseSBiZSBzdHJpcHBlZC4gIFRoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKy5JUCAiXGZCXC1OXGZSIFxmSXN5bWJvbG5hbWVcZlIiIDQKKy5JWCBJdGVtICItTiBzeW1ib2xuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLXN0cmlwXC1zeW1ib2w9XGZSXGZJc3ltYm9sbmFtZVxmUiIgNAorLklYIEl0ZW0gIi0tc3RyaXAtc3ltYm9sPXN5bWJvbG5hbWUiCisuUEQKK1JlbW92ZSBzeW1ib2wgXGZJc3ltYm9sbmFtZVxmUiBmcm9tIHRoZSBzb3VyY2UgZmlsZS4gVGhpcyBvcHRpb24gbWF5IGJlCitnaXZlbiBtb3JlIHRoYW4gb25jZSwgYW5kIG1heSBiZSBjb21iaW5lZCB3aXRoIHN0cmlwIG9wdGlvbnMgb3RoZXIgdGhhbgorXCZcZkJcLUtcZlIuCisuSVAgIlxmQlwtb1xmUiBcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiLW8gZmlsZSIKK1B1dCB0aGUgc3RyaXBwZWQgb3V0cHV0IGluIFxmSWZpbGVcZlIsIHJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGUKK2V4aXN0aW5nIGZpbGUuICBXaGVuIHRoaXMgYXJndW1lbnQgaXMgdXNlZCwgb25seSBvbmUgXGZJb2JqZmlsZVxmUgorYXJndW1lbnQgbWF5IGJlIHNwZWNpZmllZC4KKy5JUCAiXGZCXC1wXGZSIiA0CisuSVggSXRlbSAiLXAiCisuUEQgMAorLklQICJcZkJcLVwtcHJlc2VydmVcLWRhdGVzXGZSIiA0CisuSVggSXRlbSAiLS1wcmVzZXJ2ZS1kYXRlcyIKKy5QRAorUHJlc2VydmUgdGhlIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIGRhdGVzIG9mIHRoZSBmaWxlLgorLklQICJcZkJcLURcZlIiIDQKKy5JWCBJdGVtICItRCIKKy5QRCAwCisuSVAgIlxmQlwtXC1lbmFibGVcLWRldGVybWluaXN0aWNcLWFyY2hpdmVzXGZSIiA0CisuSVggSXRlbSAiLS1lbmFibGUtZGV0ZXJtaW5pc3RpYy1hcmNoaXZlcyIKKy5QRAorT3BlcmF0ZSBpbiBcZklkZXRlcm1pbmlzdGljXGZSIG1vZGUuICBXaGVuIGNvcHlpbmcgYXJjaGl2ZSBtZW1iZXJzCithbmQgd3JpdGluZyB0aGUgYXJjaGl2ZSBpbmRleCwgdXNlIHplcm8gZm9yIFVJRHMsIEdJRHMsIHRpbWVzdGFtcHMsCithbmQgdXNlIGNvbnNpc3RlbnQgZmlsZSBtb2RlcyBmb3IgYWxsIGZpbGVzLgorLlNwCitJZiBcZkliaW51dGlsc1xmUiB3YXMgY29uZmlndXJlZCB3aXRoCitcJlxmQlwtXC1lbmFibGVcLWRldGVybWluaXN0aWNcLWFyY2hpdmVzXGZSLCB0aGVuIHRoaXMgbW9kZSBpcyBvbiBieSBkZWZhdWx0LgorSXQgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlIFxmQlwtVVxmUiBvcHRpb24sIGJlbG93LgorLklQICJcZkJcLVVcZlIiIDQKKy5JWCBJdGVtICItVSIKKy5QRCAwCisuSVAgIlxmQlwtXC1kaXNhYmxlXC1kZXRlcm1pbmlzdGljXC1hcmNoaXZlc1xmUiIgNAorLklYIEl0ZW0gIi0tZGlzYWJsZS1kZXRlcm1pbmlzdGljLWFyY2hpdmVzIgorLlBECitEbyBcZklub3RcZlIgb3BlcmF0ZSBpbiBcZklkZXRlcm1pbmlzdGljXGZSIG1vZGUuICBUaGlzIGlzIHRoZQoraW52ZXJzZSBvZiB0aGUgXGZCXC1EXGZSIG9wdGlvbiwgYWJvdmU6IHdoZW4gY29weWluZyBhcmNoaXZlIG1lbWJlcnMKK2FuZCB3cml0aW5nIHRoZSBhcmNoaXZlIGluZGV4LCB1c2UgdGhlaXIgYWN0dWFsIFxzLTFVSURcczAsIFxzLTFHSURcczAsIHRpbWVzdGFtcCwKK2FuZCBmaWxlIG1vZGUgdmFsdWVzLgorLlNwCitUaGlzIGlzIHRoZSBkZWZhdWx0IHVubGVzcyBcZkliaW51dGlsc1xmUiB3YXMgY29uZmlndXJlZCB3aXRoCitcJlxmQlwtXC1lbmFibGVcLWRldGVybWluaXN0aWNcLWFyY2hpdmVzXGZSLgorLklQICJcZkJcLXdcZlIiIDQKKy5JWCBJdGVtICItdyIKKy5QRCAwCisuSVAgIlxmQlwtXC13aWxkY2FyZFxmUiIgNAorLklYIEl0ZW0gIi0td2lsZGNhcmQiCisuUEQKK1Blcm1pdCByZWd1bGFyIGV4cHJlc3Npb25zIGluIFxmSXN5bWJvbG5hbWVcZlJzIHVzZWQgaW4gb3RoZXIgY29tbWFuZAorbGluZSBvcHRpb25zLiAgVGhlIHF1ZXN0aW9uIG1hcmsgKD8pLCBhc3RlcmlzayAoKiksIGJhY2tzbGFzaCAoXGUpIGFuZAorc3F1YXJlIGJyYWNrZXRzIChbXSkgb3BlcmF0b3JzIGNhbiBiZSB1c2VkIGFueXdoZXJlIGluIHRoZSBzeW1ib2wKK25hbWUuICBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzeW1ib2wgbmFtZSBpcyB0aGUgZXhjbGFtYXRpb24KK3BvaW50ICghKSB0aGVuIHRoZSBzZW5zZSBvZiB0aGUgc3dpdGNoIGlzIHJldmVyc2VkIGZvciB0aGF0IHN5bWJvbC4KK0ZvciBleGFtcGxlOgorLlNwCisuVmIgMQorXCYgICAgICAgICAgXC13IFwtSyAhZm9vIFwtSyBmbyoKKy5WZQorLlNwCit3b3VsZCBjYXVzZSBzdHJpcCB0byBvbmx5IGtlZXAgc3ltYm9scyB0aGF0IHN0YXJ0IHdpdGggdGhlIGxldHRlcnMKK1wmXCooTCJmb1wqKFIiLCBidXQgdG8gZGlzY2FyZCB0aGUgc3ltYm9sIFwqKEwiZm9vXCooUiIuCisuSVAgIlxmQlwteFxmUiIgNAorLklYIEl0ZW0gIi14IgorLlBEIDAKKy5JUCAiXGZCXC1cLWRpc2NhcmRcLWFsbFxmUiIgNAorLklYIEl0ZW0gIi0tZGlzY2FyZC1hbGwiCisuUEQKK1JlbW92ZSBub24tZ2xvYmFsIHN5bWJvbHMuCisuSVAgIlxmQlwtWFxmUiIgNAorLklYIEl0ZW0gIi1YIgorLlBEIDAKKy5JUCAiXGZCXC1cLWRpc2NhcmRcLWxvY2Fsc1xmUiIgNAorLklYIEl0ZW0gIi0tZGlzY2FyZC1sb2NhbHMiCisuUEQKK1JlbW92ZSBjb21waWxlci1nZW5lcmF0ZWQgbG9jYWwgc3ltYm9scy4KKyhUaGVzZSB1c3VhbGx5IHN0YXJ0IHdpdGggXGZCTFxmUiBvciBcZkIuXGZSLikKKy5JUCAiXGZCXC1cLWtlZXBcLWZpbGVcLXN5bWJvbHNcZlIiIDQKKy5JWCBJdGVtICItLWtlZXAtZmlsZS1zeW1ib2xzIgorV2hlbiBzdHJpcHBpbmcgYSBmaWxlLCBwZXJoYXBzIHdpdGggXGZCXC1cLXN0cmlwXC1kZWJ1Z1xmUiBvcgorXCZcZkJcLVwtc3RyaXBcLXVubmVlZGVkXGZSLCByZXRhaW4gYW55IHN5bWJvbHMgc3BlY2lmeWluZyBzb3VyY2UgZmlsZSBuYW1lcywKK3doaWNoIHdvdWxkIG90aGVyd2lzZSBnZXQgc3RyaXBwZWQuCisuSVAgIlxmQlwtXC1vbmx5XC1rZWVwXC1kZWJ1Z1xmUiIgNAorLklYIEl0ZW0gIi0tb25seS1rZWVwLWRlYnVnIgorU3RyaXAgYSBmaWxlLCByZW1vdmluZyBjb250ZW50cyBvZiBhbnkgc2VjdGlvbnMgdGhhdCB3b3VsZCBub3QgYmUKK3N0cmlwcGVkIGJ5IFxmQlwtXC1zdHJpcFwtZGVidWdcZlIgYW5kIGxlYXZpbmcgdGhlIGRlYnVnZ2luZyBzZWN0aW9ucworaW50YWN0LiAgSW4gXHMtMUVMRlxzMCBmaWxlcywgdGhpcyBwcmVzZXJ2ZXMgYWxsIG5vdGUgc2VjdGlvbnMgaW4gdGhlIG91dHB1dC4KKy5TcAorVGhlIGludGVudGlvbiBpcyB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCitcJlxmQlwtXC1hZGRcLWdudVwtZGVidWdsaW5rXGZSIHRvIGNyZWF0ZSBhIHR3byBwYXJ0IGV4ZWN1dGFibGUuICBPbmUgYQorc3RyaXBwZWQgYmluYXJ5IHdoaWNoIHdpbGwgb2NjdXB5IGxlc3Mgc3BhY2UgaW4gXHMtMVJBTVxzMCBhbmQgaW4gYQorZGlzdHJpYnV0aW9uIGFuZCB0aGUgc2Vjb25kIGEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGUgd2hpY2ggaXMgb25seQorbmVlZGVkIGlmIGRlYnVnZ2luZyBhYmlsaXRpZXMgYXJlIHJlcXVpcmVkLiAgVGhlIHN1Z2dlc3RlZCBwcm9jZWR1cmUKK3RvIGNyZWF0ZSB0aGVzZSBmaWxlcyBpcyBhcyBmb2xsb3dzOgorLlJTIDQKKy5JUCAiMS48TGluayB0aGUgZXhlY3V0YWJsZSBhcyBub3JtYWwuICBBc3N1bWluZyB0aGF0IGlzIGlzIGNhbGxlZD4iIDQKKy5JWCBJdGVtICIxLjxMaW5rIHRoZSBleGVjdXRhYmxlIGFzIG5vcm1hbC4gIEFzc3VtaW5nIHRoYXQgaXMgaXMgY2FsbGVkPiIKK1wmXGYoQ1dcKihDYGZvb1wqKEMnXGZSIHRoZW4uLi4KKy5pZSBuIC5JUCAiMS48UnVuICIib2JqY29weSBcLVwtb25seVwta2VlcFwtZGVidWcgZm9vIGZvby5kYmciIiB0bz4iIDQKKy5lbCAuSVAgIjEuPFJ1biBcZihDV29iamNvcHkgXC1cLW9ubHlcLWtlZXBcLWRlYnVnIGZvbyBmb28uZGJnXGZSIHRvPiIgNAorLklYIEl0ZW0gIjEuPFJ1biBvYmpjb3B5IC0tb25seS1rZWVwLWRlYnVnIGZvbyBmb28uZGJnIHRvPiIKK2NyZWF0ZSBhIGZpbGUgY29udGFpbmluZyB0aGUgZGVidWdnaW5nIGluZm8uCisuaWUgbiAuSVAgIjEuPFJ1biAiIm9iamNvcHkgXC1cLXN0cmlwXC1kZWJ1ZyBmb28iIiB0byBjcmVhdGUgYT4iIDQKKy5lbCAuSVAgIjEuPFJ1biBcZihDV29iamNvcHkgXC1cLXN0cmlwXC1kZWJ1ZyBmb29cZlIgdG8gY3JlYXRlIGE+IiA0CisuSVggSXRlbSAiMS48UnVuIG9iamNvcHkgLS1zdHJpcC1kZWJ1ZyBmb28gdG8gY3JlYXRlIGE+Igorc3RyaXBwZWQgZXhlY3V0YWJsZS4KKy5pZSBuIC5JUCAiMS48UnVuICIib2JqY29weSBcLVwtYWRkXC1nbnVcLWRlYnVnbGluaz1mb28uZGJnIGZvbyIiPiIgNAorLmVsIC5JUCAiMS48UnVuIFxmKENXb2JqY29weSBcLVwtYWRkXC1nbnVcLWRlYnVnbGluaz1mb28uZGJnIGZvb1xmUj4iIDQKKy5JWCBJdGVtICIxLjxSdW4gb2JqY29weSAtLWFkZC1nbnUtZGVidWdsaW5rPWZvby5kYmcgZm9vPiIKK3RvIGFkZCBhIGxpbmsgdG8gdGhlIGRlYnVnZ2luZyBpbmZvIGludG8gdGhlIHN0cmlwcGVkIGV4ZWN1dGFibGUuCisuUkUKKy5SUyA0CisuU3AKK05vdGVcLVwtXC10aGUgY2hvaWNlIG9mIFxmKENXXCooQ2AuZGJnXCooQydcZlIgYXMgYW4gZXh0ZW5zaW9uIGZvciB0aGUgZGVidWcgaW5mbworZmlsZSBpcyBhcmJpdHJhcnkuICBBbHNvIHRoZSBcZihDV1wqKENgXC1cLW9ubHlcLWtlZXBcLWRlYnVnXCooQydcZlIgc3RlcCBpcworb3B0aW9uYWwuICBZb3UgY291bGQgaW5zdGVhZCBkbyB0aGlzOgorLklQICIxLjxMaW5rIHRoZSBleGVjdXRhYmxlIGFzIG5vcm1hbC4+IiA0CisuSVggSXRlbSAiMS48TGluayB0aGUgZXhlY3V0YWJsZSBhcyBub3JtYWwuPiIKKy5QRCAwCisuaWUgbiAuSVAgIjEuPENvcHkgIiJmb28iIiB0byAiImZvby5mdWxsIiI+IiA0CisuZWwgLklQICIxLjxDb3B5IFxmKENXZm9vXGZSIHRvIFxmKENXZm9vLmZ1bGxcZlI+IiA0CisuSVggSXRlbSAiMS48Q29weSBmb28gdG8gZm9vLmZ1bGw+IgorLmllIG4gLklQICIxLjxSdW4gIiJzdHJpcCBcLVwtc3RyaXBcLWRlYnVnIGZvbyIiPiIgNAorLmVsIC5JUCAiMS48UnVuIFxmKENXc3RyaXAgXC1cLXN0cmlwXC1kZWJ1ZyBmb29cZlI+IiA0CisuSVggSXRlbSAiMS48UnVuIHN0cmlwIC0tc3RyaXAtZGVidWcgZm9vPiIKKy5pZSBuIC5JUCAiMS48UnVuICIib2JqY29weSBcLVwtYWRkXC1nbnVcLWRlYnVnbGluaz1mb28uZnVsbCBmb28iIj4iIDQKKy5lbCAuSVAgIjEuPFJ1biBcZihDV29iamNvcHkgXC1cLWFkZFwtZ251XC1kZWJ1Z2xpbms9Zm9vLmZ1bGwgZm9vXGZSPiIgNAorLklYIEl0ZW0gIjEuPFJ1biBvYmpjb3B5IC0tYWRkLWdudS1kZWJ1Z2xpbms9Zm9vLmZ1bGwgZm9vPiIKKy5SRQorLlJTIDQKKy5QRAorLlNwCitpLmUuLCB0aGUgZmlsZSBwb2ludGVkIHRvIGJ5IHRoZSBcZkJcLVwtYWRkXC1nbnVcLWRlYnVnbGlua1xmUiBjYW4gYmUgdGhlCitmdWxsIGV4ZWN1dGFibGUuICBJdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgZmlsZSBjcmVhdGVkIGJ5IHRoZQorXCZcZkJcLVwtb25seVwta2VlcFwtZGVidWdcZlIgc3dpdGNoLgorLlNwCitOb3RlXC1cLVwtdGhpcyBzd2l0Y2ggaXMgb25seSBpbnRlbmRlZCBmb3IgdXNlIG9uIGZ1bGx5IGxpbmtlZCBmaWxlcy4gIEl0Citkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHVzZSBpdCBvbiBvYmplY3QgZmlsZXMgd2hlcmUgdGhlIGRlYnVnZ2luZworaW5mb3JtYXRpb24gbWF5IGJlIGluY29tcGxldGUuICBCZXNpZGVzIHRoZSBnbnVfZGVidWdsaW5rIGZlYXR1cmUKK2N1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHRoZSBwcmVzZW5jZSBvZiBvbmUgZmlsZW5hbWUgY29udGFpbmluZworZGVidWdnaW5nIGluZm9ybWF0aW9uLCBub3QgbXVsdGlwbGUgZmlsZW5hbWVzIG9uIGEgb25lLXBlci1vYmplY3QtZmlsZQorYmFzaXMuCisuUkUKKy5JUCAiXGZCXC1WXGZSIiA0CisuSVggSXRlbSAiLVYiCisuUEQgMAorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKKy5QRAorU2hvdyB0aGUgdmVyc2lvbiBudW1iZXIgZm9yIFxmQnN0cmlwXGZSLgorLklQICJcZkJcLXZcZlIiIDQKKy5JWCBJdGVtICItdiIKKy5QRCAwCisuSVAgIlxmQlwtXC12ZXJib3NlXGZSIiA0CisuSVggSXRlbSAiLS12ZXJib3NlIgorLlBECitWZXJib3NlIG91dHB1dDogbGlzdCBhbGwgb2JqZWN0IGZpbGVzIG1vZGlmaWVkLiAgSW4gdGhlIGNhc2Ugb2YKK2FyY2hpdmVzLCBcZkJzdHJpcCBcLXZcZlIgbGlzdHMgYWxsIG1lbWJlcnMgb2YgdGhlIGFyY2hpdmUuCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgordGhlIEluZm8gZW50cmllcyBmb3IgXGZJYmludXRpbHNcZlIuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgXCooTCJccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlXCooUiIuCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtd2luZG1jLjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtd2luZG1jLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkYTk5NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi13aW5kbWMuMQpAQCAtMCwwICsxLDM1NCBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjMgKFBvZDo6U2ltcGxlIDMuMTQpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIldJTkRNQyAxIgorLlRIIFdJTkRNQyAxICIyMDEzLTAzLTI1IiAiYmludXRpbHMtMi4yMy4yIiAiR05VIERldmVsb3BtZW50IFRvb2xzIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK3dpbmRtYyBcLSBnZW5lcmF0ZXMgV2luZG93cyBtZXNzYWdlIHJlc291cmNlcy4KKy5TSCAiU1lOT1BTSVMiCisuSVggSGVhZGVyICJTWU5PUFNJUyIKK3dpbmRtYyBbb3B0aW9uc10gaW5wdXQtZmlsZQorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorXCZcZkJ3aW5kbWNcZlIgcmVhZHMgbWVzc2FnZSBkZWZpbml0aW9ucyBmcm9tIGFuIGlucHV0IGZpbGUgKC5tYykgYW5kCit0cmFuc2xhdGUgdGhlbSBpbnRvIGEgc2V0IG9mIG91dHB1dCBmaWxlcy4gIFRoZSBvdXRwdXQgZmlsZXMgbWF5IGJlIG9mCitmb3VyIGtpbmRzOgorLmllIG4gLklQICIiImgiIiIgNAorLmVsIC5JUCAiXGYoQ1doXGZSIiA0CisuSVggSXRlbSAiaCIKK0EgQyBoZWFkZXIgZmlsZSBjb250YWluaW5nIHRoZSBtZXNzYWdlIGRlZmluaXRpb25zLgorLmllIG4gLklQICIiInJjIiIiIDQKKy5lbCAuSVAgIlxmKENXcmNcZlIiIDQKKy5JWCBJdGVtICJyYyIKK0EgcmVzb3VyY2UgZmlsZSBjb21waWxhYmxlIGJ5IHRoZSBcZkJ3aW5kcmVzXGZSIHRvb2wuCisuaWUgbiAuSVAgIiIiYmluIiIiIDQKKy5lbCAuSVAgIlxmKENXYmluXGZSIiA0CisuSVggSXRlbSAiYmluIgorT25lIG9yIG1vcmUgYmluYXJ5IGZpbGVzIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlIGRhdGEgZm9yIGEgc3BlY2lmaWMKK21lc3NhZ2UgbGFuZ3VhZ2UuCisuaWUgbiAuSVAgIiIiZGJnIiIiIDQKKy5lbCAuSVAgIlxmKENXZGJnXGZSIiA0CisuSVggSXRlbSAiZGJnIgorQSBDIGluY2x1ZGUgZmlsZSB0aGF0IG1hcHMgbWVzc2FnZSBpZCdzIHRvIHRoZWlyIHN5bWJvbGljIG5hbWUuCisuUFAKK1RoZSBleGFjdCBkZXNjcmlwdGlvbiBvZiB0aGVzZSBkaWZmZXJlbnQgZm9ybWF0cyBpcyBhdmFpbGFibGUgaW4KK2RvY3VtZW50YXRpb24gZnJvbSBNaWNyb3NvZnQuCisuUFAKK1doZW4gXGZCd2luZG1jXGZSIGNvbnZlcnRzIGZyb20gdGhlIFxmKENXXCooQ2BtY1wqKEMnXGZSIGZvcm1hdCB0byB0aGUgXGYoQ1dcKihDYGJpblwqKEMnXGZSCitmb3JtYXQsIFxmKENXXCooQ2ByY1wqKEMnXGZSLCBcZihDV1wqKENgaFwqKEMnXGZSLCBhbmQgb3B0aW9uYWwgXGYoQ1dcKihDYGRiZ1wqKEMnXGZSIGl0IGlzIGFjdGluZyBsaWtlIHRoZQorV2luZG93cyBNZXNzYWdlIENvbXBpbGVyLgorLlNIICJPUFRJT05TIgorLklYIEhlYWRlciAiT1BUSU9OUyIKKy5JUCAiXGZCXC1hXGZSIiA0CisuSVggSXRlbSAiLWEiCisuUEQgMAorLklQICJcZkJcLVwtYXNjaWlfaW5cZlIiIDQKKy5JWCBJdGVtICItLWFzY2lpX2luIgorLlBECitTcGVjaWZpZXMgdGhhdCB0aGUgaW5wdXQgZmlsZSBzcGVjaWZpZWQgaXMgXHMtMUFTQ0lJXHMwLiBUaGlzIGlzIHRoZSBkZWZhdWx0CitiZWhhdmlvdXIuCisuSVAgIlxmQlwtQVxmUiIgNAorLklYIEl0ZW0gIi1BIgorLlBEIDAKKy5JUCAiXGZCXC1cLWFzY2lpX291dFxmUiIgNAorLklYIEl0ZW0gIi0tYXNjaWlfb3V0IgorLlBECitTcGVjaWZpZXMgdGhhdCBtZXNzYWdlcyBpbiB0aGUgb3V0cHV0IFxmKENXXCooQ2BiaW5cKihDJ1xmUiBmaWxlcyBzaG91bGQgYmUgaW4gXHMtMUFTQ0lJXHMwCitmb3JtYXQuCisuSVAgIlxmQlwtYlxmUiIgNAorLklYIEl0ZW0gIi1iIgorLlBEIDAKKy5JUCAiXGZCXC1cLWJpbnByZWZpeFxmUiIgNAorLklYIEl0ZW0gIi0tYmlucHJlZml4IgorLlBECitTcGVjaWZpZXMgdGhhdCBcZihDV1wqKENgYmluXCooQydcZlIgZmlsZW5hbWVzIHNob3VsZCBoYXZlIHRvIGJlIHByZWZpeGVkIGJ5IHRoZQorYmFzZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLgorLklQICJcZkJcLWNcZlIiIDQKKy5JWCBJdGVtICItYyIKKy5QRCAwCisuSVAgIlxmQlwtXC1jdXN0b21mbGFnXGZSIiA0CisuSVggSXRlbSAiLS1jdXN0b21mbGFnIgorLlBECitTZXRzIHRoZSBjdXN0b21lciBiaXQgaW4gYWxsIG1lc3NhZ2UgaWQncy4KKy5JUCAiXGZCXC1DXGZSIFxmSWNvZGVwYWdlXGZSIiA0CisuSVggSXRlbSAiLUMgY29kZXBhZ2UiCisuUEQgMAorLklQICJcZkJcLVwtY29kZXBhZ2VfaW5cZlIgXGZJY29kZXBhZ2VcZlIiIDQKKy5JWCBJdGVtICItLWNvZGVwYWdlX2luIGNvZGVwYWdlIgorLlBECitTZXRzIHRoZSBkZWZhdWx0IGNvZGVwYWdlIHRvIGJlIHVzZWQgdG8gY29udmVydCBpbnB1dCBmaWxlIHRvIFxzLTFVVEYxNlxzMC4gVGhlCitkZWZhdWx0IGlzIG9jZGVwYWdlIDEyNTIuCisuSVAgIlxmQlwtZFxmUiIgNAorLklYIEl0ZW0gIi1kIgorLlBEIDAKKy5JUCAiXGZCXC1cLWRlY2ltYWxfdmFsdWVzXGZSIiA0CisuSVggSXRlbSAiLS1kZWNpbWFsX3ZhbHVlcyIKKy5QRAorT3V0cHV0cyB0aGUgY29uc3RhbnRzIGluIHRoZSBoZWFkZXIgZmlsZSBpbiBkZWNpbWFsLiBEZWZhdWx0IGlzIHVzaW5nCitoZXhhZGVjaW1hbCBvdXRwdXQuCisuSVAgIlxmQlwtZVxmUiBcZklleHRcZlIiIDQKKy5JWCBJdGVtICItZSBleHQiCisuUEQgMAorLklQICJcZkJcLVwtZXh0ZW5zaW9uXGZSIFxmSWV4dFxmUiIgNAorLklYIEl0ZW0gIi0tZXh0ZW5zaW9uIGV4dCIKKy5QRAorVGhlIGV4dGVuc2lvbiBmb3IgdGhlIGhlYWRlciBmaWxlLiBUaGUgZGVmYXVsdCBpcyAuaCBleHRlbnNpb24uCisuSVAgIlxmQlwtRlxmUiBcZkl0YXJnZXRcZlIiIDQKKy5JWCBJdGVtICItRiB0YXJnZXQiCisuUEQgMAorLklQICJcZkJcLVwtdGFyZ2V0XGZSIFxmSXRhcmdldFxmUiIgNAorLklYIEl0ZW0gIi0tdGFyZ2V0IHRhcmdldCIKKy5QRAorU3BlY2lmeSB0aGUgXHMtMUJGRFxzMCBmb3JtYXQgdG8gdXNlIGZvciBhIGJpbiBmaWxlIGFzIG91dHB1dC4gIFRoaXMKK2lzIGEgXHMtMUJGRFxzMCB0YXJnZXQgbmFtZTsgeW91IGNhbiB1c2UgdGhlIFxmQlwtXC1oZWxwXGZSIG9wdGlvbiB0byBzZWUgYSBsaXN0CitvZiBzdXBwb3J0ZWQgdGFyZ2V0cy4gIE5vcm1hbGx5IFxmQndpbmRtY1xmUiB3aWxsIHVzZSB0aGUgZGVmYXVsdAorZm9ybWF0LCB3aGljaCBpcyB0aGUgZmlyc3Qgb25lIGxpc3RlZCBieSB0aGUgXGZCXC1cLWhlbHBcZlIgb3B0aW9uLgorLklQICJcZkJcLWhcZlIgXGZJcGF0aFxmUiIgNAorLklYIEl0ZW0gIi1oIHBhdGgiCisuUEQgMAorLklQICJcZkJcLVwtaGVhZGVyZGlyXGZSIFxmSXBhdGhcZlIiIDQKKy5JWCBJdGVtICItLWhlYWRlcmRpciBwYXRoIgorLlBECitUaGUgdGFyZ2V0IGRpcmVjdG9yeSBvZiB0aGUgZ2VuZXJhdGVkIGhlYWRlciBmaWxlLiBUaGUgZGVmYXVsdCBpcyB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5LgorLklQICJcZkJcLUhcZlIiIDQKKy5JWCBJdGVtICItSCIKKy5QRCAwCisuSVAgIlxmQlwtXC1oZWxwXGZSIiA0CisuSVggSXRlbSAiLS1oZWxwIgorLlBECitEaXNwbGF5cyBhIGxpc3Qgb2YgY29tbWFuZCBsaW5lIG9wdGlvbnMgYW5kIHRoZW4gZXhpdHMuCisuSVAgIlxmQlwtbVxmUiBcZkljaGFyYWN0ZXJzXGZSIiA0CisuSVggSXRlbSAiLW0gY2hhcmFjdGVycyIKKy5QRCAwCisuSVAgIlxmQlwtXC1tYXhsZW5ndGhcZlIgXGZJY2hhcmFjdGVyc1xmUiIgNAorLklYIEl0ZW0gIi0tbWF4bGVuZ3RoIGNoYXJhY3RlcnMiCisuUEQKK0luc3RydWN0cyBcZkJ3aW5kbWNcZlIgdG8gZ2VuZXJhdGUgYSB3YXJuaW5nIGlmIHRoZSBsZW5ndGgKK29mIGFueSBtZXNzYWdlIGV4Y2VlZHMgdGhlIG51bWJlciBzcGVjaWZpZWQuCisuSVAgIlxmQlwtblxmUiIgNAorLklYIEl0ZW0gIi1uIgorLlBEIDAKKy5JUCAiXGZCXC1cLW51bGx0ZXJtaW5hdGVcZlIiIDQKKy5JWCBJdGVtICItLW51bGx0ZXJtaW5hdGUiCisuUEQKK1Rlcm1pbmF0ZSBtZXNzYWdlIHRleHQgaW4gXGYoQ1dcKihDYGJpblwqKEMnXGZSIGZpbGVzIGJ5IHplcm8uIEJ5IGRlZmF1bHQgdGhleSBhcmUKK3Rlcm1pbmF0ZWQgYnkgXHMtMUNSL0xGXHMwLgorLklQICJcZkJcLW9cZlIiIDQKKy5JWCBJdGVtICItbyIKKy5QRCAwCisuSVAgIlxmQlwtXC1ocmVzdWx0X3VzZVxmUiIgNAorLklYIEl0ZW0gIi0taHJlc3VsdF91c2UiCisuUEQKK05vdCB5ZXQgaW1wbGVtZW50ZWQuIEluc3RydWN0cyBcZihDV1wqKENgd2luZG1jXCooQydcZlIgdG8gZ2VuZXJhdGUgYW4gXHMtMU9MRTJcczAgaGVhZGVyCitmaWxlLCB1c2luZyBccy0xSFJFU1VMVFxzMCBkZWZpbml0aW9ucy4gU3RhdHVzIGNvZGVzIGFyZSB1c2VkIGlmIHRoZSBmbGFnIGlzIG5vdAorc3BlY2lmaWVkLgorLklQICJcZkJcLU9cZlIgXGZJY29kZXBhZ2VcZlIiIDQKKy5JWCBJdGVtICItTyBjb2RlcGFnZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1jb2RlcGFnZV9vdXRcZlIgXGZJY29kZXBhZ2VcZlIiIDQKKy5JWCBJdGVtICItLWNvZGVwYWdlX291dCBjb2RlcGFnZSIKKy5QRAorU2V0cyB0aGUgZGVmYXVsdCBjb2RlcGFnZSB0byBiZSB1c2VkIHRvIG91dHB1dCB0ZXh0IGZpbGVzLiBUaGUgZGVmYXVsdAoraXMgb2NkZXBhZ2UgMTI1Mi4KKy5JUCAiXGZCXC1yXGZSIFxmSXBhdGhcZlIiIDQKKy5JWCBJdGVtICItciBwYXRoIgorLlBEIDAKKy5JUCAiXGZCXC1cLXJjZGlyXGZSIFxmSXBhdGhcZlIiIDQKKy5JWCBJdGVtICItLXJjZGlyIHBhdGgiCisuUEQKK1RoZSB0YXJnZXQgZGlyZWN0b3J5IGZvciB0aGUgZ2VuZXJhdGVkIFxmKENXXCooQ2ByY1wqKEMnXGZSIHNjcmlwdCBhbmQgdGhlIGdlbmVyYXRlZAorXCZcZihDV1wqKENgYmluXCooQydcZlIgZmlsZXMgdGhhdCB0aGUgcmVzb3VyY2UgY29tcGlsZXIgc2NyaXB0IGluY2x1ZGVzLiBUaGUgZGVmYXVsdAoraXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorLklQICJcZkJcLXVcZlIiIDQKKy5JWCBJdGVtICItdSIKKy5QRCAwCisuSVAgIlxmQlwtXC11bmljb2RlX2luXGZSIiA0CisuSVggSXRlbSAiLS11bmljb2RlX2luIgorLlBECitTcGVjaWZpZXMgdGhhdCB0aGUgaW5wdXQgZmlsZSBpcyBccy0xVVRGMTZcczAuCisuSVAgIlxmQlwtVVxmUiIgNAorLklYIEl0ZW0gIi1VIgorLlBEIDAKKy5JUCAiXGZCXC1cLXVuaWNvZGVfb3V0XGZSIiA0CisuSVggSXRlbSAiLS11bmljb2RlX291dCIKKy5QRAorU3BlY2lmaWVzIHRoYXQgbWVzc2FnZXMgaW4gdGhlIG91dHB1dCBcZihDV1wqKENgYmluXCooQydcZlIgZmlsZSBzaG91bGQgYmUgaW4gXHMtMVVURjE2XHMwCitmb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorLklQICJcZkJcLXZcZlIiIDQKKy5JWCBJdGVtICItdiIKKy5QRCAwCisuSVAgIlxmQlwtXC12ZXJib3NlXGZSIiA0CisuSVggSXRlbSAiLS12ZXJib3NlIgorLlBECitFbmFibGUgdmVyYm9zZSBtb2RlLgorLklQICJcZkJcLVZcZlIiIDQKKy5JWCBJdGVtICItViIKKy5QRCAwCisuSVAgIlxmQlwtXC12ZXJzaW9uXGZSIiA0CisuSVggSXRlbSAiLS12ZXJzaW9uIgorLlBECitQcmludHMgdGhlIHZlcnNpb24gbnVtYmVyIGZvciBcZkJ3aW5kbWNcZlIuCisuSVAgIlxmQlwteFxmUiBcZklwYXRoXGZSIiA0CisuSVggSXRlbSAiLXggcGF0aCIKKy5QRCAwCisuSVAgIlxmQlwtXC14ZGdiXGZSIFxmSXBhdGhcZlIiIDQKKy5JWCBJdGVtICItLXhkZ2IgcGF0aCIKKy5QRAorVGhlIHBhdGggb2YgdGhlIFxmKENXXCooQ2BkYmdcKihDJ1xmUiBDIGluY2x1ZGUgZmlsZSB0aGF0IG1hcHMgbWVzc2FnZSBpZCdzIHRvIHRoZQorc3ltYm9saWMgbmFtZS4gTm8gc3VjaCBmaWxlIGlzIGdlbmVyYXRlZCB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIHN3aXRjaC4KKy5JUCAiXGZCQFxmUlxmSWZpbGVcZlIiIDQKKy5JWCBJdGVtICJAZmlsZSIKK1JlYWQgY29tbWFuZC1saW5lIG9wdGlvbnMgZnJvbSBcZklmaWxlXGZSLiAgVGhlIG9wdGlvbnMgcmVhZCBhcmUKK2luc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBAXGZJZmlsZVxmUiBvcHRpb24uICBJZiBcZklmaWxlXGZSCitkb2VzIG5vdCBleGlzdCwgb3IgY2Fubm90IGJlIHJlYWQsIHRoZW4gdGhlIG9wdGlvbiB3aWxsIGJlIHRyZWF0ZWQKK2xpdGVyYWxseSwgYW5kIG5vdCByZW1vdmVkLgorLlNwCitPcHRpb25zIGluIFxmSWZpbGVcZlIgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSB3aGl0ZXNwYWNlCitjaGFyYWN0ZXIgbWF5IGJlIGluY2x1ZGVkIGluIGFuIG9wdGlvbiBieSBzdXJyb3VuZGluZyB0aGUgZW50aXJlCitvcHRpb24gaW4gZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLiAgQW55IGNoYXJhY3RlciAoaW5jbHVkaW5nIGEKK2JhY2tzbGFzaCkgbWF5IGJlIGluY2x1ZGVkIGJ5IHByZWZpeGluZyB0aGUgY2hhcmFjdGVyIHRvIGJlIGluY2x1ZGVkCit3aXRoIGEgYmFja3NsYXNoLiAgVGhlIFxmSWZpbGVcZlIgbWF5IGl0c2VsZiBjb250YWluIGFkZGl0aW9uYWwKK0BcZklmaWxlXGZSIG9wdGlvbnM7IGFueSBzdWNoIG9wdGlvbnMgd2lsbCBiZSBwcm9jZXNzZWQgcmVjdXJzaXZlbHkuCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCit0aGUgSW5mbyBlbnRyaWVzIGZvciBcZkliaW51dGlsc1xmUi4KKy5TSCAiQ09QWVJJR0hUIgorLklYIEhlYWRlciAiQ09QWVJJR0hUIgorQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LAorMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwKKzIwMTAsIDIwMTEsIDIwMTIKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLlBQCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKK29yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOword2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIHdpdGggbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCB3aXRoIG5vCitCYWNrLUNvdmVyIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBcKihMIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2VcKihSIi4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjEvYWFyY2g2NC1ub25lLWVsZi13aW5kcmVzLjEgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtd2luZHJlcy4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NjA2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW4xL2FhcmNoNjQtbm9uZS1lbGYtd2luZHJlcy4xCkBAIC0wLDAgKzEsMzYyIEBACisuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yMyAoUG9kOjpTaW1wbGUgMy4xNCkKKy5cIgorLlwiIFN0YW5kYXJkIHByZWFtYmxlOgorLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLmRlIFNwIFwiIFZlcnRpY2FsIHNwYWNlICh3aGVuIHdlIGNhbid0IHVzZSAuUFApCisuaWYgdCAuc3AgLjV2CisuaWYgbiAuc3AKKy4uCisuZGUgVmIgXCIgQmVnaW4gdmVyYmF0aW0gdGV4dAorLmZ0IENXCisubmYKKy5uZSBcXCQxCisuLgorLmRlIFZlIFwiIEVuZCB2ZXJiYXRpbSB0ZXh0CisuZnQgUgorLmZpCisuLgorLlwiIFNldCB1cCBzb21lIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgYW5kIHByZWRlZmluZWQgc3RyaW5ncy4gIFwqKC0tIHdpbGwKKy5cIiBnaXZlIGFuIHVuYnJlYWthYmxlIGRhc2gsIFwqKFBJIHdpbGwgZ2l2ZSBwaSwgXCooTCIgd2lsbCBnaXZlIGEgbGVmdAorLlwiIGRvdWJsZSBxdW90ZSwgYW5kIFwqKFIiIHdpbGwgZ2l2ZSBhIHJpZ2h0IGRvdWJsZSBxdW90ZS4gIFwqKEMrIHdpbGwKKy5cIiBnaXZlIGEgbmljZXIgQysrLiAgQ2FwaXRhbCBvbWVnYSBpcyB1c2VkIHRvIGRvIHVuYnJlYWthYmxlIGRhc2hlcyBhbmQKKy5cIiB0aGVyZWZvcmUgd29uJ3QgYmUgYXZhaWxhYmxlLiAgXCooQ2AgYW5kIFwqKEMnIGV4cGFuZCB0byBgJyBpbiBucm9mZiwKKy5cIiBub3RoaW5nIGluIHRyb2ZmLCBmb3IgdXNlIHdpdGggQzw+LgorLnRyIFwoKlctCisuZHMgQysgQ1x2Jy0uMXYnXGgnLTFwJ1xzLTIrXGgnLTFwJytcczBcdicuMXYnXGgnLTFwJworLmllIG4gXHtcCisuICAgIGRzIC0tIFwoKlctCisuICAgIGRzIFBJIHBpCisuICAgIGlmIChcbiguSD00dSkmKDFtPTI0dSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctMTJ1Jy1cIiBkaWFibG8gMTAgcGl0Y2gKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjB1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy04dSctXCIgIGRpYWJsbyAxMiBwaXRjaAorLiAgICBkcyBMIiAiIgorLiAgICBkcyBSIiAiIgorLiAgICBkcyBDYCAiIgorLiAgICBkcyBDJyAiIgorJ2JyXH0KKy5lbFx7XAorLiAgICBkcyAtLSBcfFwoZW1cfAorLiAgICBkcyBQSSBcKCpwCisuICAgIGRzIEwiIGBgCisuICAgIGRzIFIiICcnCisnYnJcfQorLlwiCisuXCIgRXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gbGl0ZXJhbCBzdHJpbmdzIGZyb20gZ3JvZmYncyBVbmljb2RlIHRyYW5zZm9ybS4KKy5pZSBcbiguZyAuZHMgQXEgXChhcQorLmVsICAgICAgIC5kcyBBcSAnCisuXCIKKy5cIiBJZiB0aGUgRiByZWdpc3RlciBpcyB0dXJuZWQgb24sIHdlJ2xsIGdlbmVyYXRlIGluZGV4IGVudHJpZXMgb24gc3RkZXJyIGZvcgorLlwiIHRpdGxlcyAoLlRIKSwgaGVhZGVycyAoLlNIKSwgc3Vic2VjdGlvbnMgKC5TUyksIGl0ZW1zICguSXApLCBhbmQgaW5kZXgKKy5cIiBlbnRyaWVzIG1hcmtlZCB3aXRoIFg8PiBpbiBQT0QuICBPZiBjb3Vyc2UsIHlvdSdsbCBoYXZlIHRvIHByb2Nlc3MgdGhlCisuXCIgb3V0cHV0IHlvdXJzZWxmIGluIHNvbWUgbWVhbmluZ2Z1bCBmYXNoaW9uLgorLmllIFxuRiBce1wKKy4gICAgZGUgSVgKKy4gICAgdG0gSW5kZXg6XFwkMVx0XFxuJVx0IlxcJDIiCisuLgorLiAgICBuciAlIDAKKy4gICAgcnIgRgorLlx9CisuZWwgXHtcCisuICAgIGRlIElYCisuLgorLlx9CisuXCIKKy5cIiBBY2NlbnQgbWFyayBkZWZpbml0aW9ucyAoQCgjKW1zLmFjYyAxLjUgODgvMDIvMDggU01JOyBmcm9tIFVDQiA0LjIpLgorLlwiIEZlYXIuICBSdW4uICBTYXZlIHlvdXJzZWxmLiAgTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cy4KKy4gICAgXCIgZnVkZ2UgZmFjdG9ycyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgI0ggMAorLiAgICBkcyAjViAuOG0KKy4gICAgZHMgI0YgLjNtCisuICAgIGRzICNbIFxmMQorLiAgICBkcyAjXSBcZlAKKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICNIICgoMXUtKFxcXFxuKC5mdSUydSkpKi4xM20pCisuICAgIGRzICNWIC42bQorLiAgICBkcyAjRiAwCisuICAgIGRzICNbIFwmCisuICAgIGRzICNdIFwmCisuXH0KKy4gICAgXCIgc2ltcGxlIGFjY2VudHMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICcgXCYKKy4gICAgZHMgYCBcJgorLiAgICBkcyBeIFwmCisuICAgIGRzICwgXCYKKy4gICAgZHMgfiB+CisuICAgIGRzIC8KKy5cfQorLmlmIHQgXHtcCisuICAgIGRzICcgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcJ1xoInxcXG46dSIKKy4gICAgZHMgYCBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1xgXGgnfFxcbjp1JworLiAgICBkcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ15caCd8XFxuOnUnCisuICAgIGRzICwgXFxrOlxoJy0oXFxuKC53dSo4LzEwKScsXGgnfFxcbjp1JworLiAgICBkcyB+IFxcazpcaCctKFxcbigud3UtXCooI0gtLjFtKSd+XGgnfFxcbjp1JworLiAgICBkcyAvIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXHpcKHNsXGgnfFxcbjp1JworLlx9CisuICAgIFwiIHRyb2ZmIGFuZCAoZGFpc3ktd2hlZWwpIG5yb2ZmIGFjY2VudHMKKy5kcyA6IFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCsuMW0rXCooI0YpJ1x2Jy1cKigjVidcei5caCcuMm0rXCooI0YnLlxoJ3xcXG46dSdcdidcKigjVicKKy5kcyA4IFxoJ1wqKCNIJ1woKmJcaCctXCooI0gnCisuZHMgbyBcXGs6XGgnLShcXG4oLnd1K1x3J1woZGUndS1cKigjSCkvMnUnXHYnLS4zbidcKigjW1x6XChkZVx2Jy4zbidcaCd8XFxuOnUnXCooI10KKy5kcyBkLSBcaCdcKigjSCdcKHBkXGgnLVx3J34ndSdcdictLjI1bSdcZjJcKGh5XGZQXHYnLjI1bSdcaCctXCooI0gnCisuZHMgRC0gRFxcazpcaCctXHcnRCd1J1x2Jy0uMTFtJ1x6XChoeVx2Jy4xMW0nXGgnfFxcbjp1JworLmRzIHRoIFwqKCNbXHYnLjNtJ1xzKzFJXHMtMVx2Jy0uM20nXGgnLShcdydJJ3UqMi8zKSdccy0xb1xzKzFcKigjXQorLmRzIFRoIFwqKCNbXHMrMklccy0yXGgnLVx3J0kndSozLzUnXHYnLS4zbSdvXHYnLjNtJ1wqKCNdCisuZHMgYWUgYVxoJy0oXHcnYSd1KjQvMTApJ2UKKy5kcyBBZSBBXGgnLShcdydBJ3UqNC8xMCknRQorLiAgICBcIiBjb3JyZWN0aW9ucyBmb3IgdnJvZmYKKy5pZiB2IC5kcyB+IFxcazpcaCctKFxcbigud3UqOS8xMC1cKigjSCknXHMtMlx1flxkXHMrMlxoJ3xcXG46dScKKy5pZiB2IC5kcyBeIFxcazpcaCctKFxcbigud3UqMTAvMTEtXCooI0gpJ1x2Jy0uNG0nXlx2Jy40bSdcaCd8XFxuOnUnCisuICAgIFwiIGZvciBsb3cgcmVzb2x1dGlvbiBkZXZpY2VzIChjcnQgYW5kIGxwcikKKy5pZiBcbiguSD4yMyAuaWYgXG4oLlY+MTkgXAorXHtcCisuICAgIGRzIDogZQorLiAgICBkcyA4IHNzCisuICAgIGRzIG8gYQorLiAgICBkcyBkLSBkXGgnLTEnXChnYQorLiAgICBkcyBELSBEXGgnLTEnXChoeQorLiAgICBkcyB0aCBcbydicCcKKy4gICAgZHMgVGggXG8nTFAnCisuICAgIGRzIGFlIGFlCisuICAgIGRzIEFlIEFFCisuXH0KKy5ybSAjWyAjXSAjSCAjViAjRiBDCisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuXCIKKy5JWCBUaXRsZSAiV0lORFJFUyAxIgorLlRIIFdJTkRSRVMgMSAiMjAxMy0wMy0yNSIgImJpbnV0aWxzLTIuMjMuMiIgIkdOVSBEZXZlbG9wbWVudCBUb29scyIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCit3aW5kcmVzIFwtIG1hbmlwdWxhdGUgV2luZG93cyByZXNvdXJjZXMuCisuU0ggIlNZTk9QU0lTIgorLklYIEhlYWRlciAiU1lOT1BTSVMiCit3aW5kcmVzIFtvcHRpb25zXSBbaW5wdXRcLWZpbGVdIFtvdXRwdXRcLWZpbGVdCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCitcJlxmQndpbmRyZXNcZlIgcmVhZHMgcmVzb3VyY2VzIGZyb20gYW4gaW5wdXQgZmlsZSBhbmQgY29waWVzIHRoZW0gaW50bworYW4gb3V0cHV0IGZpbGUuICBFaXRoZXIgZmlsZSBtYXkgYmUgaW4gb25lIG9mIHRocmVlIGZvcm1hdHM6CisuaWUgbiAuSVAgIiIicmMiIiIgNAorLmVsIC5JUCAiXGYoQ1dyY1xmUiIgNAorLklYIEl0ZW0gInJjIgorQSB0ZXh0IGZvcm1hdCByZWFkIGJ5IHRoZSBSZXNvdXJjZSBDb21waWxlci4KKy5pZSBuIC5JUCAiIiJyZXMiIiIgNAorLmVsIC5JUCAiXGYoQ1dyZXNcZlIiIDQKKy5JWCBJdGVtICJyZXMiCitBIGJpbmFyeSBmb3JtYXQgZ2VuZXJhdGVkIGJ5IHRoZSBSZXNvdXJjZSBDb21waWxlci4KKy5pZSBuIC5JUCAiIiJjb2ZmIiIiIDQKKy5lbCAuSVAgIlxmKENXY29mZlxmUiIgNAorLklYIEl0ZW0gImNvZmYiCitBIFxzLTFDT0ZGXHMwIG9iamVjdCBvciBleGVjdXRhYmxlLgorLlBQCitUaGUgZXhhY3QgZGVzY3JpcHRpb24gb2YgdGhlc2UgZGlmZmVyZW50IGZvcm1hdHMgaXMgYXZhaWxhYmxlIGluCitkb2N1bWVudGF0aW9uIGZyb20gTWljcm9zb2Z0LgorLlBQCitXaGVuIFxmQndpbmRyZXNcZlIgY29udmVydHMgZnJvbSB0aGUgXGYoQ1dcKihDYHJjXCooQydcZlIgZm9ybWF0IHRvIHRoZSBcZihDV1wqKENgcmVzXCooQydcZlIKK2Zvcm1hdCwgaXQgaXMgYWN0aW5nIGxpa2UgdGhlIFdpbmRvd3MgUmVzb3VyY2UgQ29tcGlsZXIuICBXaGVuCitcJlxmQndpbmRyZXNcZlIgY29udmVydHMgZnJvbSB0aGUgXGYoQ1dcKihDYHJlc1wqKEMnXGZSIGZvcm1hdCB0byB0aGUgXGYoQ1dcKihDYGNvZmZcKihDJ1xmUgorZm9ybWF0LCBpdCBpcyBhY3RpbmcgbGlrZSB0aGUgV2luZG93cyBcZihDV1wqKENgQ1ZUUkVTXCooQydcZlIgcHJvZ3JhbS4KKy5QUAorV2hlbiBcZkJ3aW5kcmVzXGZSIGdlbmVyYXRlcyBhbiBcZihDV1wqKENgcmNcKihDJ1xmUiBmaWxlLCB0aGUgb3V0cHV0IGlzIHNpbWlsYXIKK2J1dCBub3QgaWRlbnRpY2FsIHRvIHRoZSBmb3JtYXQgZXhwZWN0ZWQgZm9yIHRoZSBpbnB1dC4gIFdoZW4gYW4gaW5wdXQKK1wmXGYoQ1dcKihDYHJjXCooQydcZlIgZmlsZSByZWZlcnMgdG8gYW4gZXh0ZXJuYWwgZmlsZW5hbWUsIGFuIG91dHB1dCBcZihDV1wqKENgcmNcKihDJ1xmUiBmaWxlCit3aWxsIGluc3RlYWQgaW5jbHVkZSB0aGUgZmlsZSBjb250ZW50cy4KKy5QUAorSWYgdGhlIGlucHV0IG9yIG91dHB1dCBmb3JtYXQgaXMgbm90IHNwZWNpZmllZCwgXGZCd2luZHJlc1xmUiB3aWxsCitndWVzcyBiYXNlZCBvbiB0aGUgZmlsZSBuYW1lLCBvciwgZm9yIHRoZSBpbnB1dCBmaWxlLCB0aGUgZmlsZSBjb250ZW50cy4KK0EgZmlsZSB3aXRoIGFuIGV4dGVuc2lvbiBvZiBcZkkucmNcZlIgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIFxmKENXXCooQ2ByY1wqKEMnXGZSCitmaWxlLCBhIGZpbGUgd2l0aCBhbiBleHRlbnNpb24gb2YgXGZJLnJlc1xmUiB3aWxsIGJlIHRyZWF0ZWQgYXMgYQorXCZcZihDV1wqKENgcmVzXCooQydcZlIgZmlsZSwgYW5kIGEgZmlsZSB3aXRoIGFuIGV4dGVuc2lvbiBvZiBcZkkub1xmUiBvcgorXCZcZkkuZXhlXGZSIHdpbGwgYmUgdHJlYXRlZCBhcyBhIFxmKENXXCooQ2Bjb2ZmXCooQydcZlIgZmlsZS4KKy5QUAorSWYgbm8gb3V0cHV0IGZpbGUgaXMgc3BlY2lmaWVkLCBcZkJ3aW5kcmVzXGZSIHdpbGwgcHJpbnQgdGhlIHJlc291cmNlcworaW4gXGYoQ1dcKihDYHJjXCooQydcZlIgZm9ybWF0IHRvIHN0YW5kYXJkIG91dHB1dC4KKy5QUAorVGhlIG5vcm1hbCB1c2UgaXMgZm9yIHlvdSB0byB3cml0ZSBhbiBcZihDV1wqKENgcmNcKihDJ1xmUiBmaWxlLCB1c2UgXGZCd2luZHJlc1xmUgordG8gY29udmVydCBpdCB0byBhIFxzLTFDT0ZGXHMwIG9iamVjdCBmaWxlLCBhbmQgdGhlbiBsaW5rIHRoZSBccy0xQ09GRlxzMCBmaWxlIGludG8KK3lvdXIgYXBwbGljYXRpb24uICBUaGlzIHdpbGwgbWFrZSB0aGUgcmVzb3VyY2VzIGRlc2NyaWJlZCBpbiB0aGUKK1wmXGYoQ1dcKihDYHJjXCooQydcZlIgZmlsZSBhdmFpbGFibGUgdG8gV2luZG93cy4KKy5TSCAiT1BUSU9OUyIKKy5JWCBIZWFkZXIgIk9QVElPTlMiCisuSVAgIlxmQlwtaVxmUiBcZklmaWxlbmFtZVxmUiIgNAorLklYIEl0ZW0gIi1pIGZpbGVuYW1lIgorLlBEIDAKKy5JUCAiXGZCXC1cLWlucHV0XGZSIFxmSWZpbGVuYW1lXGZSIiA0CisuSVggSXRlbSAiLS1pbnB1dCBmaWxlbmFtZSIKKy5QRAorVGhlIG5hbWUgb2YgdGhlIGlucHV0IGZpbGUuICBJZiB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZCwgdGhlbgorXCZcZkJ3aW5kcmVzXGZSIHdpbGwgdXNlIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IGFzIHRoZSBpbnB1dCBmaWxlCituYW1lLiAgSWYgdGhlcmUgYXJlIG5vIG5vbi1vcHRpb24gYXJndW1lbnRzLCB0aGVuIFxmQndpbmRyZXNcZlIgd2lsbAorcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0LiAgXGZCd2luZHJlc1xmUiBjYW4gbm90IHJlYWQgYSBccy0xQ09GRlxzMCBmaWxlIGZyb20KK3N0YW5kYXJkIGlucHV0LgorLklQICJcZkJcLW9cZlIgXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItbyBmaWxlbmFtZSIKKy5QRCAwCisuSVAgIlxmQlwtXC1vdXRwdXRcZlIgXGZJZmlsZW5hbWVcZlIiIDQKKy5JWCBJdGVtICItLW91dHB1dCBmaWxlbmFtZSIKKy5QRAorVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHVzZWQsIHRoZW4KK1wmXGZCd2luZHJlc1xmUiB3aWxsIHVzZSB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCwgYWZ0ZXIgYW55IHVzZWQKK2ZvciB0aGUgaW5wdXQgZmlsZSBuYW1lLCBhcyB0aGUgb3V0cHV0IGZpbGUgbmFtZS4gIElmIHRoZXJlIGlzIG5vCitub24tb3B0aW9uIGFyZ3VtZW50LCB0aGVuIFxmQndpbmRyZXNcZlIgd2lsbCB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQuCitcJlxmQndpbmRyZXNcZlIgY2FuIG5vdCB3cml0ZSBhIFxzLTFDT0ZGXHMwIGZpbGUgdG8gc3RhbmRhcmQgb3V0cHV0LiAgTm90ZSwKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggXGZCcmNcZlIgdGhlIG9wdGlvbiBcZkJcLWZvXGZSIGlzIGFsc28KK2FjY2VwdGVkLCBidXQgaXRzIHVzZSBpcyBub3QgcmVjb21tZW5kZWQuCisuSVAgIlxmQlwtSlxmUiBcZklmb3JtYXRcZlIiIDQKKy5JWCBJdGVtICItSiBmb3JtYXQiCisuUEQgMAorLklQICJcZkJcLVwtaW5wdXRcLWZvcm1hdFxmUiBcZklmb3JtYXRcZlIiIDQKKy5JWCBJdGVtICItLWlucHV0LWZvcm1hdCBmb3JtYXQiCisuUEQKK1RoZSBpbnB1dCBmb3JtYXQgdG8gcmVhZC4gIFxmSWZvcm1hdFxmUiBtYXkgYmUgXGZCcmVzXGZSLCBcZkJyY1xmUiwgb3IKK1wmXGZCY29mZlxmUi4gIElmIG5vIGlucHV0IGZvcm1hdCBpcyBzcGVjaWZpZWQsIFxmQndpbmRyZXNcZlIgd2lsbAorZ3Vlc3MsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKy5JUCAiXGZCXC1PXGZSIFxmSWZvcm1hdFxmUiIgNAorLklYIEl0ZW0gIi1PIGZvcm1hdCIKKy5QRCAwCisuSVAgIlxmQlwtXC1vdXRwdXRcLWZvcm1hdFxmUiBcZklmb3JtYXRcZlIiIDQKKy5JWCBJdGVtICItLW91dHB1dC1mb3JtYXQgZm9ybWF0IgorLlBECitUaGUgb3V0cHV0IGZvcm1hdCB0byBnZW5lcmF0ZS4gIFxmSWZvcm1hdFxmUiBtYXkgYmUgXGZCcmVzXGZSLAorXCZcZkJyY1xmUiwgb3IgXGZCY29mZlxmUi4gIElmIG5vIG91dHB1dCBmb3JtYXQgaXMgc3BlY2lmaWVkLAorXCZcZkJ3aW5kcmVzXGZSIHdpbGwgZ3Vlc3MsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKy5JUCAiXGZCXC1GXGZSIFxmSXRhcmdldFxmUiIgNAorLklYIEl0ZW0gIi1GIHRhcmdldCIKKy5QRCAwCisuSVAgIlxmQlwtXC10YXJnZXRcZlIgXGZJdGFyZ2V0XGZSIiA0CisuSVggSXRlbSAiLS10YXJnZXQgdGFyZ2V0IgorLlBECitTcGVjaWZ5IHRoZSBccy0xQkZEXHMwIGZvcm1hdCB0byB1c2UgZm9yIGEgXHMtMUNPRkZcczAgZmlsZSBhcyBpbnB1dCBvciBvdXRwdXQuICBUaGlzCitpcyBhIFxzLTFCRkRcczAgdGFyZ2V0IG5hbWU7IHlvdSBjYW4gdXNlIHRoZSBcZkJcLVwtaGVscFxmUiBvcHRpb24gdG8gc2VlIGEgbGlzdAorb2Ygc3VwcG9ydGVkIHRhcmdldHMuICBOb3JtYWxseSBcZkJ3aW5kcmVzXGZSIHdpbGwgdXNlIHRoZSBkZWZhdWx0Citmb3JtYXQsIHdoaWNoIGlzIHRoZSBmaXJzdCBvbmUgbGlzdGVkIGJ5IHRoZSBcZkJcLVwtaGVscFxmUiBvcHRpb24uCisuSVAgIlxmQlwtXC1wcmVwcm9jZXNzb3JcZlIgXGZJcHJvZ3JhbVxmUiIgNAorLklYIEl0ZW0gIi0tcHJlcHJvY2Vzc29yIHByb2dyYW0iCitXaGVuIFxmQndpbmRyZXNcZlIgcmVhZHMgYW4gXGYoQ1dcKihDYHJjXCooQydcZlIgZmlsZSwgaXQgcnVucyBpdCB0aHJvdWdoIHRoZSBDCitwcmVwcm9jZXNzb3IgZmlyc3QuICBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBwcmVwcm9jZXNzb3IKK3RvIHVzZSwgaW5jbHVkaW5nIGFueSBsZWFkaW5nIGFyZ3VtZW50cy4gIFRoZSBkZWZhdWx0IHByZXByb2Nlc3NvcgorYXJndW1lbnQgaXMgXGYoQ1dcKihDYGdjYyBcLUUgXC14Y1wtaGVhZGVyIFwtRFJDX0lOVk9LRURcKihDJ1xmUi4KKy5JUCAiXGZCXC1cLXByZXByb2Nlc3NvclwtYXJnXGZSIFxmSW9wdGlvblxmUiIgNAorLklYIEl0ZW0gIi0tcHJlcHJvY2Vzc29yLWFyZyBvcHRpb24iCitXaGVuIFxmQndpbmRyZXNcZlIgcmVhZHMgYW4gXGYoQ1dcKihDYHJjXCooQydcZlIgZmlsZSwgaXQgcnVucyBpdCB0aHJvdWdoCit0aGUgQyBwcmVwcm9jZXNzb3IgZmlyc3QuICBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwKK3RleHQgdG8gYmUgcGFzc2VkIHRvIHByZXByb2Nlc3NvciBvbiBpdHMgY29tbWFuZCBsaW5lLgorVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgdG8gYWRkIG11bHRpcGxlIG9wdGlvbnMgdG8gdGhlCitwcmVwcm9jZXNzb3IgY29tbWFuZCBsaW5lLgorLklQICJcZkJcLUlcZlIgXGZJZGlyZWN0b3J5XGZSIiA0CisuSVggSXRlbSAiLUkgZGlyZWN0b3J5IgorLlBEIDAKKy5JUCAiXGZCXC1cLWluY2x1ZGVcLWRpclxmUiBcZklkaXJlY3RvcnlcZlIiIDQKKy5JWCBJdGVtICItLWluY2x1ZGUtZGlyIGRpcmVjdG9yeSIKKy5QRAorU3BlY2lmeSBhbiBpbmNsdWRlIGRpcmVjdG9yeSB0byB1c2Ugd2hlbiByZWFkaW5nIGFuIFxmKENXXCooQ2ByY1wqKEMnXGZSIGZpbGUuCitcJlxmQndpbmRyZXNcZlIgd2lsbCBwYXNzIHRoaXMgdG8gdGhlIHByZXByb2Nlc3NvciBhcyBhbiBcZkJcLUlcZlIKK29wdGlvbi4gIFxmQndpbmRyZXNcZlIgd2lsbCBhbHNvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSB3aGVuIGxvb2tpbmcgZm9yCitmaWxlcyBuYW1lZCBpbiB0aGUgXGYoQ1dcKihDYHJjXCooQydcZlIgZmlsZS4gIElmIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBjb21tYW5kCittYXRjaGVzIGFueSBvZiB0aGUgc3VwcG9ydGVkIFxmSWZvcm1hdHNcZlIgKGFzIGRlc2NyaWJlZCBpbiB0aGUgXGZCXC1KXGZSCitvcHRpb24pLCBpdCB3aWxsIGlzc3VlIGEgZGVwcmVjYXRpb24gd2FybmluZywgYW5kIGJlaGF2ZSBqdXN0IGxpa2UgdGhlCitcJlxmQlwtSlxmUiBvcHRpb24uICBOZXcgcHJvZ3JhbXMgc2hvdWxkIG5vdCB1c2UgdGhpcyBiZWhhdmlvdXIuICBJZiBhCitkaXJlY3RvcnkgaGFwcGVucyB0byBtYXRjaCBhIFxmSWZvcm1hdFxmUiwgc2ltcGxlIHByZWZpeCBpdCB3aXRoIFxmQi4vXGZSCit0byBkaXNhYmxlIHRoZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorLklQICJcZkJcLURcZlIgXGZJdGFyZ2V0XGZSIiA0CisuSVggSXRlbSAiLUQgdGFyZ2V0IgorLlBEIDAKKy5JUCAiXGZCXC1cLWRlZmluZVxmUiBcZklzeW1cZlJcZkJbPVxmUlxmSXZhbFxmUlxmQl1cZlIiIDQKKy5JWCBJdGVtICItLWRlZmluZSBzeW1bPXZhbF0iCisuUEQKK1NwZWNpZnkgYSBcZkJcLURcZlIgb3B0aW9uIHRvIHBhc3MgdG8gdGhlIHByZXByb2Nlc3NvciB3aGVuIHJlYWRpbmcgYW4KK1wmXGYoQ1dcKihDYHJjXCooQydcZlIgZmlsZS4KKy5JUCAiXGZCXC1VXGZSIFxmSXRhcmdldFxmUiIgNAorLklYIEl0ZW0gIi1VIHRhcmdldCIKKy5QRCAwCisuSVAgIlxmQlwtXC11bmRlZmluZVxmUiBcZklzeW1cZlIiIDQKKy5JWCBJdGVtICItLXVuZGVmaW5lIHN5bSIKKy5QRAorU3BlY2lmeSBhIFxmQlwtVVxmUiBvcHRpb24gdG8gcGFzcyB0byB0aGUgcHJlcHJvY2Vzc29yIHdoZW4gcmVhZGluZyBhbgorXCZcZihDV1wqKENgcmNcKihDJ1xmUiBmaWxlLgorLklQICJcZkJcLXJcZlIiIDQKKy5JWCBJdGVtICItciIKK0lnbm9yZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCByYy4KKy5JUCAiXGZCXC12XGZSIiA0CisuSVggSXRlbSAiLXYiCitFbmFibGUgdmVyYm9zZSBtb2RlLiAgVGhpcyB0ZWxscyB5b3Ugd2hhdCB0aGUgcHJlcHJvY2Vzc29yIGlzIGlmIHlvdQorZGlkbid0IHNwZWNpZnkgb25lLgorLklQICJcZkJcLWNcZlIgXGZJdmFsXGZSIiA0CisuSVggSXRlbSAiLWMgdmFsIgorLlBEIDAKKy5JUCAiXGZCXC1cLWNvZGVwYWdlXGZSIFxmSXZhbFxmUiIgNAorLklYIEl0ZW0gIi0tY29kZXBhZ2UgdmFsIgorLlBECitTcGVjaWZ5IHRoZSBkZWZhdWx0IGNvZGVwYWdlIHRvIHVzZSB3aGVuIHJlYWRpbmcgYW4gXGYoQ1dcKihDYHJjXCooQydcZlIgZmlsZS4KK1wmXGZJdmFsXGZSIHNob3VsZCBiZSBhIGhleGFkZWNpbWFsIHByZWZpeGVkIGJ5IFxmQjB4XGZSIG9yIGRlY2ltYWwKK2NvZGVwYWdlIGNvZGUuIFRoZSB2YWxpZCByYW5nZSBpcyBmcm9tIHplcm8gdXAgdG8gMHhmZmZmLCBidXQgdGhlCit2YWxpZGl0eSBvZiB0aGUgY29kZXBhZ2UgaXMgaG9zdCBhbmQgY29uZmlndXJhdGlvbiBkZXBlbmRlbnQuCisuSVAgIlxmQlwtbFxmUiBcZkl2YWxcZlIiIDQKKy5JWCBJdGVtICItbCB2YWwiCisuUEQgMAorLklQICJcZkJcLVwtbGFuZ3VhZ2VcZlIgXGZJdmFsXGZSIiA0CisuSVggSXRlbSAiLS1sYW5ndWFnZSB2YWwiCisuUEQKK1NwZWNpZnkgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgdG8gdXNlIHdoZW4gcmVhZGluZyBhbiBcZihDV1wqKENgcmNcKihDJ1xmUiBmaWxlLgorXCZcZkl2YWxcZlIgc2hvdWxkIGJlIGEgaGV4YWRlY2ltYWwgbGFuZ3VhZ2UgY29kZS4gIFRoZSBsb3cgZWlnaHQgYml0cyBhcmUKK3RoZSBsYW5ndWFnZSwgYW5kIHRoZSBoaWdoIGVpZ2h0IGJpdHMgYXJlIHRoZSBzdWJsYW5ndWFnZS4KKy5JUCAiXGZCXC1cLXVzZVwtdGVtcFwtZmlsZVxmUiIgNAorLklYIEl0ZW0gIi0tdXNlLXRlbXAtZmlsZSIKK1VzZSBhIHRlbXBvcmFyeSBmaWxlIHRvIGluc3RlYWQgb2YgdXNpbmcgcG9wZW4gdG8gcmVhZCB0aGUgb3V0cHV0IG9mCit0aGUgcHJlcHJvY2Vzc29yLiBVc2UgdGhpcyBvcHRpb24gaWYgdGhlIHBvcGVuIGltcGxlbWVudGF0aW9uIGlzIGJ1Z2d5CitvbiB0aGUgaG9zdCAoZWcuLCBjZXJ0YWluIG5vbi1FbmdsaXNoIGxhbmd1YWdlIHZlcnNpb25zIG9mIFdpbmRvd3MgOTUgYW5kCitXaW5kb3dzIDk4IGFyZSBrbm93biB0byBoYXZlIGJ1Z2d5IHBvcGVuIHdoZXJlIHRoZSBvdXRwdXQgd2lsbCBpbnN0ZWFkCitnbyB0aGUgY29uc29sZSkuCisuSVAgIlxmQlwtXC1ub1wtdXNlXC10ZW1wXC1maWxlXGZSIiA0CisuSVggSXRlbSAiLS1uby11c2UtdGVtcC1maWxlIgorVXNlIHBvcGVuLCBub3QgYSB0ZW1wb3JhcnkgZmlsZSwgdG8gcmVhZCB0aGUgb3V0cHV0IG9mIHRoZSBwcmVwcm9jZXNzb3IuCitUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KKy5JUCAiXGZCXC1oXGZSIiA0CisuSVggSXRlbSAiLWgiCisuUEQgMAorLklQICJcZkJcLVwtaGVscFxmUiIgNAorLklYIEl0ZW0gIi0taGVscCIKKy5QRAorUHJpbnRzIGEgdXNhZ2Ugc3VtbWFyeS4KKy5JUCAiXGZCXC1WXGZSIiA0CisuSVggSXRlbSAiLVYiCisuUEQgMAorLklQICJcZkJcLVwtdmVyc2lvblxmUiIgNAorLklYIEl0ZW0gIi0tdmVyc2lvbiIKKy5QRAorUHJpbnRzIHRoZSB2ZXJzaW9uIG51bWJlciBmb3IgXGZCd2luZHJlc1xmUi4KKy5JUCAiXGZCXC1cLXl5ZGVidWdcZlIiIDQKKy5JWCBJdGVtICItLXl5ZGVidWciCitJZiBcZkJ3aW5kcmVzXGZSIGlzIGNvbXBpbGVkIHdpdGggXGYoQ1dcKihDYFlZREVCVUdcKihDJ1xmUiBkZWZpbmVkIGFzIFxmKENXMVxmUiwKK3RoaXMgd2lsbCB0dXJuIG9uIHBhcnNlciBkZWJ1Z2dpbmcuCisuSVAgIlxmQkBcZlJcZklmaWxlXGZSIiA0CisuSVggSXRlbSAiQGZpbGUiCitSZWFkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20gXGZJZmlsZVxmUi4gIFRoZSBvcHRpb25zIHJlYWQgYXJlCitpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgQFxmSWZpbGVcZlIgb3B0aW9uLiAgSWYgXGZJZmlsZVxmUgorZG9lcyBub3QgZXhpc3QsIG9yIGNhbm5vdCBiZSByZWFkLCB0aGVuIHRoZSBvcHRpb24gd2lsbCBiZSB0cmVhdGVkCitsaXRlcmFsbHksIGFuZCBub3QgcmVtb3ZlZC4KKy5TcAorT3B0aW9ucyBpbiBcZklmaWxlXGZSIGFyZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gIEEgd2hpdGVzcGFjZQorY2hhcmFjdGVyIG1heSBiZSBpbmNsdWRlZCBpbiBhbiBvcHRpb24gYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZQorb3B0aW9uIGluIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlIHF1b3Rlcy4gIEFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBhCitiYWNrc2xhc2gpIG1heSBiZSBpbmNsdWRlZCBieSBwcmVmaXhpbmcgdGhlIGNoYXJhY3RlciB0byBiZSBpbmNsdWRlZAord2l0aCBhIGJhY2tzbGFzaC4gIFRoZSBcZklmaWxlXGZSIG1heSBpdHNlbGYgY29udGFpbiBhZGRpdGlvbmFsCitAXGZJZmlsZVxmUiBvcHRpb25zOyBhbnkgc3VjaCBvcHRpb25zIHdpbGwgYmUgcHJvY2Vzc2VkIHJlY3Vyc2l2ZWx5LgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgordGhlIEluZm8gZW50cmllcyBmb3IgXGZJYmludXRpbHNcZlIuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwKKzE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksCisyMDEwLCAyMDExLCAyMDEyCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy5QUAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4zCitvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKK3dpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCB3aXRoIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgd2l0aCBubworQmFjay1Db3ZlciBUZXh0cy4gIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUKK3NlY3Rpb24gZW50aXRsZWQgXCooTCJccy0xR05VXHMwIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlXCooUiIuCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW43L2ZzZi1mdW5kaW5nLjcgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW43L2ZzZi1mdW5kaW5nLjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzYjQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvbWFuL21hbjcvZnNmLWZ1bmRpbmcuNwpAQCAtMCwwICsxLDE4NCBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjUgKFBvZDo6U2ltcGxlIDMuMTYpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIkZTRi1GVU5ESU5HIDciCisuVEggRlNGLUZVTkRJTkcgNyAiMjAxMy0xMS0xMSIgImdjYy00LjguMyIgIkdOVSIKKy5cIiBGb3IgbnJvZmYsIHR1cm4gb2ZmIGp1c3RpZmljYXRpb24uICBBbHdheXMgdHVybiBvZmYgaHlwaGVuYXRpb247IGl0IG1ha2VzCisuXCIgd2F5IHRvbyBtYW55IG1pc3Rha2VzIGluIHRlY2huaWNhbCBkb2N1bWVudHMuCisuaWYgbiAuYWQgbAorLm5oCisuU0ggIk5BTUUiCitmc2ZcLWZ1bmRpbmcgXC0gRnVuZGluZyBGcmVlIFNvZnR3YXJlCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCisuU1MgIkZ1bmRpbmcgRnJlZSBTb2Z0d2FyZSIKKy5JWCBTdWJzZWN0aW9uICJGdW5kaW5nIEZyZWUgU29mdHdhcmUiCitJZiB5b3Ugd2FudCB0byBoYXZlIG1vcmUgZnJlZSBzb2Z0d2FyZSBhIGZldyB5ZWFycyBmcm9tIG5vdywgaXQgbWFrZXMKK3NlbnNlIGZvciB5b3UgdG8gaGVscCBlbmNvdXJhZ2UgcGVvcGxlIHRvIGNvbnRyaWJ1dGUgZnVuZHMgZm9yIGl0cworZGV2ZWxvcG1lbnQuICBUaGUgbW9zdCBlZmZlY3RpdmUgYXBwcm9hY2gga25vd24gaXMgdG8gZW5jb3VyYWdlCitjb21tZXJjaWFsIHJlZGlzdHJpYnV0b3JzIHRvIGRvbmF0ZS4KKy5QUAorVXNlcnMgb2YgZnJlZSBzb2Z0d2FyZSBzeXN0ZW1zIGNhbiBib29zdCB0aGUgcGFjZSBvZiBkZXZlbG9wbWVudCBieQorZW5jb3VyYWdpbmcgZm9yLWEtZmVlIGRpc3RyaWJ1dG9ycyB0byBkb25hdGUgcGFydCBvZiB0aGVpciBzZWxsaW5nIHByaWNlCit0byBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnNcLVwtXC10aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQgb3RoZXJzLgorLlBQCitUaGUgd2F5IHRvIGNvbnZpbmNlIGRpc3RyaWJ1dG9ycyB0byBkbyB0aGlzIGlzIHRvIGRlbWFuZCBpdCBhbmQgZXhwZWN0CitpdCBmcm9tIHRoZW0uICBTbyB3aGVuIHlvdSBjb21wYXJlIGRpc3RyaWJ1dG9ycywganVkZ2UgdGhlbSBwYXJ0bHkgYnkKK2hvdyBtdWNoIHRoZXkgZ2l2ZSB0byBmcmVlIHNvZnR3YXJlIGRldmVsb3BtZW50LiAgU2hvdyBkaXN0cmlidXRvcnMKK3RoZXkgbXVzdCBjb21wZXRlIHRvIGJlIHRoZSBvbmUgd2hvIGdpdmVzIHRoZSBtb3N0LgorLlBQCitUbyBtYWtlIHRoaXMgYXBwcm9hY2ggd29yaywgeW91IG11c3QgaW5zaXN0IG9uIG51bWJlcnMgdGhhdCB5b3UgY2FuCitjb21wYXJlLCBzdWNoIGFzLCBcKihMIldlIHdpbGwgZG9uYXRlIHRlbiBkb2xsYXJzIHRvIHRoZSBGcm9ibml0eiBwcm9qZWN0Citmb3IgZWFjaCBkaXNrIHNvbGQuXCooUiIgIERvbid0IGJlIHNhdGlzZmllZCB3aXRoIGEgdmFndWUgcHJvbWlzZSwgc3VjaCBhcworXCZcKihMIkEgcG9ydGlvbiBvZiB0aGUgcHJvZml0cyBhcmUgZG9uYXRlZCxcKihSIiBzaW5jZSBpdCBkb2Vzbid0IGdpdmUgYSBiYXNpcworZm9yIGNvbXBhcmlzb24uCisuUFAKK0V2ZW4gYSBwcmVjaXNlIGZyYWN0aW9uIFwqKEwib2YgdGhlIHByb2ZpdHMgZnJvbSB0aGlzIGRpc2tcKihSIiBpcyBub3QgdmVyeQorbWVhbmluZ2Z1bCwgc2luY2UgY3JlYXRpdmUgYWNjb3VudGluZyBhbmQgdW5yZWxhdGVkIGJ1c2luZXNzIGRlY2lzaW9ucworY2FuIGdyZWF0bHkgYWx0ZXIgd2hhdCBmcmFjdGlvbiBvZiB0aGUgc2FsZXMgcHJpY2UgY291bnRzIGFzIHByb2ZpdC4KK0lmIHRoZSBwcmljZSB5b3UgcGF5IGlzIFxmKENXJDUwXGZSLCB0ZW4gcGVyY2VudCBvZiB0aGUgcHJvZml0IGlzIHByb2JhYmx5CitsZXNzIHRoYW4gYSBkb2xsYXI7IGl0IG1pZ2h0IGJlIGEgZmV3IGNlbnRzLCBvciBub3RoaW5nIGF0IGFsbC4KKy5QUAorU29tZSByZWRpc3RyaWJ1dG9ycyBkbyBkZXZlbG9wbWVudCB3b3JrIHRoZW1zZWx2ZXMuICBUaGlzIGlzIHVzZWZ1bCB0b287CitidXQgdG8ga2VlcCBldmVyeW9uZSBob25lc3QsIHlvdSBuZWVkIHRvIGlucXVpcmUgaG93IG11Y2ggdGhleSBkbywgYW5kCit3aGF0IGtpbmQuICBTb21lIGtpbmRzIG9mIGRldmVsb3BtZW50IG1ha2UgbXVjaCBtb3JlIGxvbmctdGVybQorZGlmZmVyZW5jZSB0aGFuIG90aGVycy4gIEZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIHNlcGFyYXRlIHZlcnNpb24gb2YKK2EgcHJvZ3JhbSBjb250cmlidXRlcyB2ZXJ5IGxpdHRsZTsgbWFpbnRhaW5pbmcgdGhlIHN0YW5kYXJkIHZlcnNpb24gb2YgYQorcHJvZ3JhbSBmb3IgdGhlIHdob2xlIGNvbW11bml0eSBjb250cmlidXRlcyBtdWNoLiAgRWFzeSBuZXcgcG9ydHMKK2NvbnRyaWJ1dGUgbGl0dGxlLCBzaW5jZSBzb21lb25lIGVsc2Ugd291bGQgc3VyZWx5IGRvIHRoZW07IGRpZmZpY3VsdAorcG9ydHMgc3VjaCBhcyBhZGRpbmcgYSBuZXcgXHMtMUNQVVxzMCB0byB0aGUgXHMtMUdOVVxzMCBDb21waWxlciBDb2xsZWN0aW9uIGNvbnRyaWJ1dGUgbW9yZTsKK21ham9yIG5ldyBmZWF0dXJlcyBvciBwYWNrYWdlcyBjb250cmlidXRlIHRoZSBtb3N0LgorLlBQCitCeSBlc3RhYmxpc2hpbmcgdGhlIGlkZWEgdGhhdCBzdXBwb3J0aW5nIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgaXMgXCooTCJ0aGUKK3Byb3BlciB0aGluZyB0byBkb1wqKFIiIHdoZW4gZGlzdHJpYnV0aW5nIGZyZWUgc29mdHdhcmUgZm9yIGEgZmVlLCB3ZSBjYW4KK2Fzc3VyZSBhIHN0ZWFkeSBmbG93IG9mIHJlc291cmNlcyBpbnRvIG1ha2luZyBtb3JlIGZyZWUgc29mdHdhcmUuCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitcJlxmSWdwbFxmUlx8KDcpLCBcZklnZmRsXGZSXHwoNykuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMTk5NCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1ZlcmJhdGltIGNvcHlpbmcgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBwZXJtaXR0ZWQKK3dpdGhvdXQgcm95YWx0eTsgYWx0ZXJhdGlvbiBpcyBub3QgcGVybWl0dGVkLgpkaWZmIC0tZ2l0IGEvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuNy9nZmRsLjcgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW43L2dmZGwuNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWIzMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuNy9nZmRsLjcKQEAgLTAsMCArMSw2MzcgQEAKKy5cIiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBQb2Q6Ok1hbiAyLjI1IChQb2Q6OlNpbXBsZSAzLjE2KQorLlwiCisuXCIgU3RhbmRhcmQgcHJlYW1ibGU6CisuXCIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuZGUgU3AgXCIgVmVydGljYWwgc3BhY2UgKHdoZW4gd2UgY2FuJ3QgdXNlIC5QUCkKKy5pZiB0IC5zcCAuNXYKKy5pZiBuIC5zcAorLi4KKy5kZSBWYiBcIiBCZWdpbiB2ZXJiYXRpbSB0ZXh0CisuZnQgQ1cKKy5uZgorLm5lIFxcJDEKKy4uCisuZGUgVmUgXCIgRW5kIHZlcmJhdGltIHRleHQKKy5mdCBSCisuZmkKKy4uCisuXCIgU2V0IHVwIHNvbWUgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyBhbmQgcHJlZGVmaW5lZCBzdHJpbmdzLiAgXCooLS0gd2lsbAorLlwiIGdpdmUgYW4gdW5icmVha2FibGUgZGFzaCwgXCooUEkgd2lsbCBnaXZlIHBpLCBcKihMIiB3aWxsIGdpdmUgYSBsZWZ0CisuXCIgZG91YmxlIHF1b3RlLCBhbmQgXCooUiIgd2lsbCBnaXZlIGEgcmlnaHQgZG91YmxlIHF1b3RlLiAgXCooQysgd2lsbAorLlwiIGdpdmUgYSBuaWNlciBDKysuICBDYXBpdGFsIG9tZWdhIGlzIHVzZWQgdG8gZG8gdW5icmVha2FibGUgZGFzaGVzIGFuZAorLlwiIHRoZXJlZm9yZSB3b24ndCBiZSBhdmFpbGFibGUuICBcKihDYCBhbmQgXCooQycgZXhwYW5kIHRvIGAnIGluIG5yb2ZmLAorLlwiIG5vdGhpbmcgaW4gdHJvZmYsIGZvciB1c2Ugd2l0aCBDPD4uCisudHIgXCgqVy0KKy5kcyBDKyBDXHYnLS4xdidcaCctMXAnXHMtMitcaCctMXAnK1xzMFx2Jy4xdidcaCctMXAnCisuaWUgbiBce1wKKy4gICAgZHMgLS0gXCgqVy0KKy4gICAgZHMgUEkgcGkKKy4gICAgaWYgKFxuKC5IPTR1KSYoMW09MjR1KSAuZHMgLS0gXCgqV1xoJy0xMnUnXCgqV1xoJy0xMnUnLVwiIGRpYWJsbyAxMCBwaXRjaAorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yMHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTh1Jy1cIiAgZGlhYmxvIDEyIHBpdGNoCisuICAgIGRzIEwiICIiCisuICAgIGRzIFIiICIiCisuICAgIGRzIENgICIiCisuICAgIGRzIEMnICIiCisnYnJcfQorLmVsXHtcCisuICAgIGRzIC0tIFx8XChlbVx8CisuICAgIGRzIFBJIFwoKnAKKy4gICAgZHMgTCIgYGAKKy4gICAgZHMgUiIgJycKKydiclx9CisuXCIKKy5cIiBFc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBsaXRlcmFsIHN0cmluZ3MgZnJvbSBncm9mZidzIFVuaWNvZGUgdHJhbnNmb3JtLgorLmllIFxuKC5nIC5kcyBBcSBcKGFxCisuZWwgICAgICAgLmRzIEFxICcKKy5cIgorLlwiIElmIHRoZSBGIHJlZ2lzdGVyIGlzIHR1cm5lZCBvbiwgd2UnbGwgZ2VuZXJhdGUgaW5kZXggZW50cmllcyBvbiBzdGRlcnIgZm9yCisuXCIgdGl0bGVzICguVEgpLCBoZWFkZXJzICguU0gpLCBzdWJzZWN0aW9ucyAoLlNTKSwgaXRlbXMgKC5JcCksIGFuZCBpbmRleAorLlwiIGVudHJpZXMgbWFya2VkIHdpdGggWDw+IGluIFBPRC4gIE9mIGNvdXJzZSwgeW91J2xsIGhhdmUgdG8gcHJvY2VzcyB0aGUKKy5cIiBvdXRwdXQgeW91cnNlbGYgaW4gc29tZSBtZWFuaW5nZnVsIGZhc2hpb24uCisuaWUgXG5GIFx7XAorLiAgICBkZSBJWAorLiAgICB0bSBJbmRleDpcXCQxXHRcXG4lXHQiXFwkMiIKKy4uCisuICAgIG5yICUgMAorLiAgICByciBGCisuXH0KKy5lbCBce1wKKy4gICAgZGUgSVgKKy4uCisuXH0KKy5cIgorLlwiIEFjY2VudCBtYXJrIGRlZmluaXRpb25zIChAKCMpbXMuYWNjIDEuNSA4OC8wMi8wOCBTTUk7IGZyb20gVUNCIDQuMikuCisuXCIgRmVhci4gIFJ1bi4gIFNhdmUgeW91cnNlbGYuICBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzLgorLiAgICBcIiBmdWRnZSBmYWN0b3JzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAjSCAwCisuICAgIGRzICNWIC44bQorLiAgICBkcyAjRiAuM20KKy4gICAgZHMgI1sgXGYxCisuICAgIGRzICNdIFxmUAorLlx9CisuaWYgdCBce1wKKy4gICAgZHMgI0ggKCgxdS0oXFxcXG4oLmZ1JTJ1KSkqLjEzbSkKKy4gICAgZHMgI1YgLjZtCisuICAgIGRzICNGIDAKKy4gICAgZHMgI1sgXCYKKy4gICAgZHMgI10gXCYKKy5cfQorLiAgICBcIiBzaW1wbGUgYWNjZW50cyBmb3IgbnJvZmYgYW5kIHRyb2ZmCisuaWYgbiBce1wKKy4gICAgZHMgJyBcJgorLiAgICBkcyBgIFwmCisuICAgIGRzIF4gXCYKKy4gICAgZHMgLCBcJgorLiAgICBkcyB+IH4KKy4gICAgZHMgLworLlx9CisuaWYgdCBce1wKKy4gICAgZHMgJyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1wnXGgifFxcbjp1IgorLiAgICBkcyBgIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXGBcaCd8XFxuOnUnCisuICAgIGRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXlxoJ3xcXG46dScKKy4gICAgZHMgLCBcXGs6XGgnLShcXG4oLnd1KjgvMTApJyxcaCd8XFxuOnUnCisuICAgIGRzIH4gXFxrOlxoJy0oXFxuKC53dS1cKigjSC0uMW0pJ35caCd8XFxuOnUnCisuICAgIGRzIC8gXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcelwoc2xcaCd8XFxuOnUnCisuXH0KKy4gICAgXCIgdHJvZmYgYW5kIChkYWlzeS13aGVlbCkgbnJvZmYgYWNjZW50cworLmRzIDogXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKy4xbStcKigjRiknXHYnLVwqKCNWJ1x6LlxoJy4ybStcKigjRicuXGgnfFxcbjp1J1x2J1wqKCNWJworLmRzIDggXGgnXCooI0gnXCgqYlxoJy1cKigjSCcKKy5kcyBvIFxcazpcaCctKFxcbigud3UrXHcnXChkZSd1LVwqKCNIKS8ydSdcdictLjNuJ1wqKCNbXHpcKGRlXHYnLjNuJ1xoJ3xcXG46dSdcKigjXQorLmRzIGQtIFxoJ1wqKCNIJ1wocGRcaCctXHcnfid1J1x2Jy0uMjVtJ1xmMlwoaHlcZlBcdicuMjVtJ1xoJy1cKigjSCcKKy5kcyBELSBEXFxrOlxoJy1cdydEJ3UnXHYnLS4xMW0nXHpcKGh5XHYnLjExbSdcaCd8XFxuOnUnCisuZHMgdGggXCooI1tcdicuM20nXHMrMUlccy0xXHYnLS4zbSdcaCctKFx3J0kndSoyLzMpJ1xzLTFvXHMrMVwqKCNdCisuZHMgVGggXCooI1tccysySVxzLTJcaCctXHcnSSd1KjMvNSdcdictLjNtJ29cdicuM20nXCooI10KKy5kcyBhZSBhXGgnLShcdydhJ3UqNC8xMCknZQorLmRzIEFlIEFcaCctKFx3J0EndSo0LzEwKSdFCisuICAgIFwiIGNvcnJlY3Rpb25zIGZvciB2cm9mZgorLmlmIHYgLmRzIH4gXFxrOlxoJy0oXFxuKC53dSo5LzEwLVwqKCNIKSdccy0yXHV+XGRccysyXGgnfFxcbjp1JworLmlmIHYgLmRzIF4gXFxrOlxoJy0oXFxuKC53dSoxMC8xMS1cKigjSCknXHYnLS40bSdeXHYnLjRtJ1xoJ3xcXG46dScKKy4gICAgXCIgZm9yIGxvdyByZXNvbHV0aW9uIGRldmljZXMgKGNydCBhbmQgbHByKQorLmlmIFxuKC5IPjIzIC5pZiBcbiguVj4xOSBcCitce1wKKy4gICAgZHMgOiBlCisuICAgIGRzIDggc3MKKy4gICAgZHMgbyBhCisuICAgIGRzIGQtIGRcaCctMSdcKGdhCisuICAgIGRzIEQtIERcaCctMSdcKGh5CisuICAgIGRzIHRoIFxvJ2JwJworLiAgICBkcyBUaCBcbydMUCcKKy4gICAgZHMgYWUgYWUKKy4gICAgZHMgQWUgQUUKKy5cfQorLnJtICNbICNdICNIICNWICNGIEMKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5cIgorLklYIFRpdGxlICJHRkRMIDciCisuVEggR0ZETCA3ICIyMDEzLTExLTExIiAiZ2NjLTQuOC4zIiAiR05VIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK2dmZGwgXC0gR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCisuU0ggIkRFU0NSSVBUSU9OIgorLklYIEhlYWRlciAiREVTQ1JJUFRJT04iCisuU1MgIlxzLTFHTlVcczAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiCisuSVggU3Vic2VjdGlvbiAiR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIgorLlNTICJWZXJzaW9uIDEuMywgMyBOb3ZlbWJlciAyMDA4IgorLklYIFN1YnNlY3Rpb24gIlZlcnNpb24gMS4zLCAzIE5vdmVtYmVyIDIwMDgiCisuVmIgMgorXCYgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1wmICAgICAgICBFPGx0PkI8aHR0cDovL2ZzZi5vcmcvPkU8Z3Q+CitcJiAgICAgICAgCitcJiAgICAgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCitcJiAgICAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisuVmUKKy5JUCAiMC4iIDQKKy5JWCBJdGVtICIwLiIKK1wmXHMtMVBSRUFNQkxFXHMwCisuU3AKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCBcZklmcmVlXGZSIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4KK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKy5TcAorVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiBcKihMImNvcHlsZWZ0XCooUiIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBccy0xR05VXHMwIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisuU3AKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorLklQICIxLiIgNAorLklYIEl0ZW0gIjEuIgorXCZccy0xQVBQTElDQUJJTElUWVxzMCBccy0xQU5EXHMwIFxzLTFERUZJTklUSU9OU1xzMAorLlNwCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWFudWFsIG9yIG90aGVyIHdvcmssIGluIGFueSBtZWRpdW0sIHRoYXQKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZSBncmFudHMgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVubGltaXRlZCBpbiBkdXJhdGlvbiwgdG8gdXNlIHRoYXQKK3dvcmsgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGhlcmVpbi4gIFRoZSBcKihMIkRvY3VtZW50XCooUiIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzIFwqKEwieW91XCooUiIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisuU3AKK0EgXCooTCJNb2RpZmllZCBWZXJzaW9uXCooUiIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorLlNwCitBIFwqKEwiU2Vjb25kYXJ5IFNlY3Rpb25cKihSIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24KK29mIHRoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbAorc3ViamVjdCAob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwKK2RpcmVjdGx5IHdpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4KK3BhcnQgYSB0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4KK2FueSBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisuU3AKK1RoZSBcKihMIkludmFyaWFudCBTZWN0aW9uc1wqKFIiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisuU3AKK1RoZSBcKihMIkNvdmVyIFRleHRzXCooUiIgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQSBGcm9udC1Db3ZlciBUZXh0IG1heQorYmUgYXQgbW9zdCA1IHdvcmRzLCBhbmQgYSBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgMjUgd29yZHMuCisuU3AKK0EgXCooTCJUcmFuc3BhcmVudFwqKFIiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LgorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90IFwqKEwiVHJhbnNwYXJlbnRcKihSIiBpcyBjYWxsZWQgXCooTCJPcGFxdWVcKihSIi4KKy5TcAorRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KK1wmXHMtMUFTQ0lJXHMwIHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQKK2Zvcm1hdCwgXHMtMVNHTUxcczAgb3IgXHMtMVhNTFxzMCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZQorXCZccy0xRFREXHMwLCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUgXHMtMUhUTUxcczAsCitQb3N0U2NyaXB0IG9yIFxzLTFQREZcczAgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzCitvZiB0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgXHMtMVBOR1xzMCwgXHMtMVhDRlxzMCBhbmQKK1wmXHMtMUpQR1xzMC4gIE9wYXF1ZSBmb3JtYXRzIGluY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZQorcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkgcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBccy0xU0dNTFxzMCBvcgorXCZccy0xWE1MXHMwIGZvciB3aGljaCB0aGUgXHMtMURURFxzMCBhbmQvb3IgcHJvY2Vzc2luZyB0b29scyBhcmUKK25vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlIG1hY2hpbmUtZ2VuZXJhdGVkIFxzLTFIVE1MXHMwLAorUG9zdFNjcmlwdCBvciBccy0xUERGXHMwIHByb2R1Y2VkIGJ5IHNvbWUgd29yZCBwcm9jZXNzb3JzIGZvcgorb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisuU3AKK1RoZSBcKihMIlRpdGxlIFBhZ2VcKihSIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsIFwqKEwiVGl0bGUgUGFnZVwqKFIiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKy5TcAorVGhlIFwqKEwicHVibGlzaGVyXCooUiIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyBjb3BpZXMKK29mIHRoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLgorLlNwCitBIHNlY3Rpb24gXCooTCJFbnRpdGxlZCBccy0xWFlaXHMwXCooUiIgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBccy0xWFlaXHMwIG9yIGNvbnRhaW5zIFxzLTFYWVpcczAgaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBccy0xWFlaXHMwIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBccy0xWFlaXHMwIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyBcKihMIkFja25vd2xlZGdlbWVudHNcKihSIiwKK1wmXCooTCJEZWRpY2F0aW9uc1wqKFIiLCBcKihMIkVuZG9yc2VtZW50c1wqKFIiLCBvciBcKihMIkhpc3RvcnlcKihSIi4pICBUbyBcKihMIlByZXNlcnZlIHRoZSBUaXRsZVwqKFIiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uIFwqKEwiRW50aXRsZWQgXHMtMVhZWlxzMFwqKFIiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisuU3AKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorLklQICIyLiIgNAorLklYIEl0ZW0gIjIuIgorXCZccy0xVkVSQkFUSU1cczAgXHMtMUNPUFlJTkdcczAKKy5TcAorWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorLlNwCitZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisuSVAgIjMuIiA0CisuSVggSXRlbSAiMy4iCitcJlxzLTFDT1BZSU5HXHMwIFxzLTFJTlxzMCBccy0xUVVBTlRJVFlcczAKKy5TcAorSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorLlNwCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisuU3AKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorLlNwCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8gZ2l2ZQordGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisuSVAgIjQuIiA0CisuSVggSXRlbSAiNC4iCitcJlxzLTFNT0RJRklDQVRJT05TXHMwCisuU3AKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorLlJTIDQKKy5JUCAiQS4iIDQKKy5JWCBJdGVtICJBLiIKK1VzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgoraWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KKy5JUCAiQi4iIDQKKy5JWCBJdGVtICJCLiIKK0xpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKK3Jlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKK3VubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KKy5JUCAiQy4iIDQKKy5JWCBJdGVtICJDLiIKK1N0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCitNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorLklQICJELiIgNAorLklYIEl0ZW0gIkQuIgorUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCisuSVAgIkUuIiA0CisuSVggSXRlbSAiRS4iCitBZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCithZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCisuSVAgIkYuIiA0CisuSVggSXRlbSAiRi4iCitJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKK2dpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCisuSVAgIkcuIiA0CisuSVggSXRlbSAiRy4iCitQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucworYW5kIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlLgorLklQICJILiIgNAorLklYIEl0ZW0gIkguIgorSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCisuSVAgIkkuIiA0CisuSVggSXRlbSAiSS4iCitQcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCBcKihMIkhpc3RvcnlcKihSIiwgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCit0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCitwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgordGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCBcKihMIkhpc3RvcnlcKihSIiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKK3N0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KKy5JUCAiSi4iIDQKKy5JWCBJdGVtICJKLiIKK1ByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKK3B1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCit0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgXCooTCJIaXN0b3J5XCooUiIgc2VjdGlvbi4KK1lvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKK2xlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorLklQICJLLiIgNAorLklYIEl0ZW0gIksuIgorRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkIFwqKEwiQWNrbm93bGVkZ2VtZW50c1wqKFIiIG9yIFwqKEwiRGVkaWNhdGlvbnNcKihSIiwgUHJlc2VydmUKK3RoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbCB0aGUKK3N1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzIGFuZC9vcgorZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KKy5JUCAiTC4iIDQKKy5JWCBJdGVtICJMLiIKK1ByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKK3VuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKK29yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KKy5JUCAiTS4iIDQKKy5JWCBJdGVtICJNLiIKK0RlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCBcKihMIkVuZG9yc2VtZW50c1wqKFIiLiAgU3VjaCBhIHNlY3Rpb24KK21heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCisuSVAgIk4uIiA0CisuSVggSXRlbSAiTi4iCitEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCBcKihMIkVuZG9yc2VtZW50c1wqKFIiIG9yCit0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KKy5JUCAiTy4iIDQKKy5JWCBJdGVtICJPLiIKK1ByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKy5SRQorLlJTIDQKKy5TcAorSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24ncyBsaWNlbnNlIG5vdGljZS4KK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorLlNwCitZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgXCooTCJFbmRvcnNlbWVudHNcKihSIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllc1wtXC1cLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorLlNwCitZb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKy5TcAorVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisuUkUKKy5JUCAiNS4iIDQKKy5JWCBJdGVtICI1LiIKK1wmXHMtMUNPTUJJTklOR1xzMCBccy0xRE9DVU1FTlRTXHMwCisuU3AKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKy5TcAorVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKy5TcAorSW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCBcKihMIkhpc3RvcnlcKihSIgoraW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIEVudGl0bGVkCitcJlwqKEwiSGlzdG9yeVwqKFIiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCBcKihMIkFja25vd2xlZGdlbWVudHNcKihSIiwKK2FuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgXCooTCJEZWRpY2F0aW9uc1wqKFIiLiAgWW91IG11c3QgZGVsZXRlIGFsbAorc2VjdGlvbnMgRW50aXRsZWQgXCooTCJFbmRvcnNlbWVudHMuXCooUiIKKy5JUCAiNi4iIDQKKy5JWCBJdGVtICI2LiIKK1wmXHMtMUNPTExFQ1RJT05TXHMwIFxzLTFPRlxzMCBccy0xRE9DVU1FTlRTXHMwCisuU3AKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKy5TcAorWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlCitpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEgY29weSBvZiB0aGlzCitMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsCitvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorLklQICI3LiIgNAorLklYIEl0ZW0gIjcuIgorXCZccy0xQUdHUkVHQVRJT05cczAgXHMtMVdJVEhcczAgXHMtMUlOREVQRU5ERU5UXHMwIFxzLTFXT1JLU1xzMAorLlNwCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gXCooTCJhZ2dyZWdhdGVcKihSIiBpZiB0aGUgY29weXJpZ2h0CityZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlIGxlZ2FsIHJpZ2h0cworb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LgorV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoIGFyZSBub3QgdGhlbXNlbHZlcworZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRG9jdW1lbnQuCisuU3AKK0lmIHRoZSBDb3ZlciBUZXh0IHJlcXVpcmVtZW50IG9mIHNlY3Rpb24gMyBpcyBhcHBsaWNhYmxlIHRvIHRoZXNlCitjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YKK3RoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uCitjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSBEb2N1bWVudCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZSwgb3IgdGhlCitlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uCitPdGhlcndpc2UgdGhleSBtdXN0IGFwcGVhciBvbiBwcmludGVkIGNvdmVycyB0aGF0IGJyYWNrZXQgdGhlIHdob2xlCithZ2dyZWdhdGUuCisuSVAgIjguIiA0CisuSVggSXRlbSAiOC4iCitcJlxzLTFUUkFOU0xBVElPTlxzMAorLlNwCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKy5TcAorSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCBcKihMIkFja25vd2xlZGdlbWVudHNcKihSIiwKK1wmXCooTCJEZWRpY2F0aW9uc1wqKFIiLCBvciBcKihMIkhpc3RvcnlcKihSIiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKy5JUCAiOS4iIDQKKy5JWCBJdGVtICI5LiIKK1wmXHMtMVRFUk1JTkFUSU9OXHMwCisuU3AKK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQKK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgaXQgaXMgdm9pZCwgYW5kCit3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKy5TcAorSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgbGljZW5zZQorZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LAordW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5Cit0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIKK2ZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8KKzYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKy5TcAorTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisuU3AKK1Rlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHJlY2VpcHQgb2YgYSBjb3B5IG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBzYW1lIG1hdGVyaWFsIGRvZXMKK25vdCBnaXZlIHlvdSBhbnkgcmlnaHRzIHRvIHVzZSBpdC4KKy5JUCAiMTAuIiA0CisuSVggSXRlbSAiMTAuIgorXCZccy0xRlVUVVJFXHMwIFxzLTFSRVZJU0lPTlNcczAgXHMtMU9GXHMwIFxzLTFUSElTXHMwIFxzLTFMSUNFTlNFXHMwCisuU3AKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgXHMtMUdOVVxzMCBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKKzxcZkJodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvXGZSPi4KKy5TcAorRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBcKihMIm9yIGFueSBsYXRlciB2ZXJzaW9uXCooUiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbgorbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdAorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudAorc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzCitMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEKK3ZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlCitEb2N1bWVudC4KKy5JUCAiMTEuIiA0CisuSVggSXRlbSAiMTEuIgorXCZccy0xUkVMSUNFTlNJTkdcczAKKy5TcAorXCZcKihMIk1hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiBTaXRlXCooUiIgKG9yIFwqKEwiXHMtMU1NQ1xzMCBTaXRlXCooUiIpIG1lYW5zIGFueQorV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28KK3Byb3ZpZGVzIHByb21pbmVudCBmYWNpbGl0aWVzIGZvciBhbnlib2R5IHRvIGVkaXQgdGhvc2Ugd29ya3MuICBBCitwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLiAgQQorXCZcKihMIk1hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvblwqKFIiIChvciBcKihMIlxzLTFNTUNcczBcKihSIikgY29udGFpbmVkIGluIHRoZQorc2l0ZSBtZWFucyBhbnkgc2V0IG9mIGNvcHlyaWdodGFibGUgd29ya3MgdGh1cyBwdWJsaXNoZWQgb24gdGhlIFxzLTFNTUNcczAKK3NpdGUuCisuU3AKK1wmXCooTCJDQy1CWS1TQVwqKFIiIG1lYW5zIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDMuMAorbGljZW5zZSBwdWJsaXNoZWQgYnkgQ3JlYXRpdmUgQ29tbW9ucyBDb3Jwb3JhdGlvbiwgYSBub3QtZm9yLXByb2ZpdAorY29ycG9yYXRpb24gd2l0aCBhIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBpbiBTYW4gRnJhbmNpc2NvLAorQ2FsaWZvcm5pYSwgYXMgd2VsbCBhcyBmdXR1cmUgY29weWxlZnQgdmVyc2lvbnMgb2YgdGhhdCBsaWNlbnNlCitwdWJsaXNoZWQgYnkgdGhhdCBzYW1lIG9yZ2FuaXphdGlvbi4KKy5TcAorXCZcKihMIkluY29ycG9yYXRlXCooUiIgbWVhbnMgdG8gcHVibGlzaCBvciByZXB1Ymxpc2ggYSBEb2N1bWVudCwgaW4gd2hvbGUgb3IKK2luIHBhcnQsIGFzIHBhcnQgb2YgYW5vdGhlciBEb2N1bWVudC4KKy5TcAorQW4gXHMtMU1NQ1xzMCBpcyBcKihMImVsaWdpYmxlIGZvciByZWxpY2Vuc2luZ1wqKFIiIGlmIGl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIGFuZCBpZiBhbGwgd29ya3MgdGhhdCB3ZXJlIGZpcnN0IHB1Ymxpc2hlZCB1bmRlciB0aGlzIExpY2Vuc2UKK3NvbWV3aGVyZSBvdGhlciB0aGFuIHRoaXMgXHMtMU1NQ1xzMCwgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUKK29yIGluIHBhcnQgaW50byB0aGUgXHMtMU1NQ1xzMCwgKDEpIGhhZCBubyBjb3ZlciB0ZXh0cyBvciBpbnZhcmlhbnQgc2VjdGlvbnMsCithbmQgKDIpIHdlcmUgdGh1cyBpbmNvcnBvcmF0ZWQgcHJpb3IgdG8gTm92ZW1iZXIgMSwgMjAwOC4KKy5TcAorVGhlIG9wZXJhdG9yIG9mIGFuIFxzLTFNTUNcczAgU2l0ZSBtYXkgcmVwdWJsaXNoIGFuIFxzLTFNTUNcczAgY29udGFpbmVkIGluIHRoZSBzaXRlCit1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwKK3Byb3ZpZGVkIHRoZSBccy0xTU1DXHMwIGlzIGVsaWdpYmxlIGZvciByZWxpY2Vuc2luZy4KKy5TUyAiXHMtMUFEREVORFVNOlxzMCBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMiCisuSVggU3Vic2VjdGlvbiAiQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cyIKK1RvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKy5QUAorLlZiIDcKK1wmICAgICAgICAgIENvcHlyaWdodCAoQykgIDx5ZWFyPiAgPHlvdXIgbmFtZT4uCitcJiAgICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK1wmICAgICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworXCYgICAgICAgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CitcJiAgICAgICAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnRcLUNvdmVyIFRleHRzLCBhbmQgbm8gQmFja1wtQ292ZXIKK1wmICAgICAgICAgIFRleHRzLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKK1wmICAgICAgICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKy5WZQorLlBQCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgXCooTCJ3aXRoLi4uVGV4dHMuXCooUiIgbGluZSB3aXRoIHRoaXM6CisuUFAKKy5WYiAzCitcJiAgICAgICAgICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyA8bGlzdCB0aGVpciB0aXRsZXM+LCB3aXRoCitcJiAgICAgICAgICAgIHRoZSBGcm9udFwtQ292ZXIgVGV4dHMgYmVpbmcgPGxpc3Q+LCBhbmQgd2l0aCB0aGUgQmFja1wtQ292ZXIgVGV4dHMKK1wmICAgICAgICAgICAgYmVpbmcgPGxpc3Q+LgorLlZlCisuUFAKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCitjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUsIG1lcmdlIHRob3NlIHR3byBhbHRlcm5hdGl2ZXMgdG8gc3VpdCB0aGUKK3NpdHVhdGlvbi4KKy5QUAorSWYgeW91ciBkb2N1bWVudCBjb250YWlucyBub250cml2aWFsIGV4YW1wbGVzIG9mIHByb2dyYW0gY29kZSwgd2UKK3JlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YKK2ZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgXHMtMUdOVVxzMCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgorLlNIICJTRUUgQUxTTyIKKy5JWCBIZWFkZXIgIlNFRSBBTFNPIgorXCZcZklncGxcZlJcfCg3KSwgXGZJZnNmXC1mdW5kaW5nXGZSXHwoNykuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzxcZkJodHRwOi8vZnNmLm9yZy9cZlI+CisuUFAKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCmRpZmYgLS1naXQgYS9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL21hbi9tYW43L2dwbC43IGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuNy9ncGwuNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ2M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9tYW4vbWFuNy9ncGwuNwpAQCAtMCwwICsxLDg0MSBAQAorLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjIgKFBvZDo6U2ltcGxlIDMuMDcpCisuXCIKKy5cIiBTdGFuZGFyZCBwcmVhbWJsZToKKy5cIiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy5kZSBTcCBcIiBWZXJ0aWNhbCBzcGFjZSAod2hlbiB3ZSBjYW4ndCB1c2UgLlBQKQorLmlmIHQgLnNwIC41dgorLmlmIG4gLnNwCisuLgorLmRlIFZiIFwiIEJlZ2luIHZlcmJhdGltIHRleHQKKy5mdCBDVworLm5mCisubmUgXFwkMQorLi4KKy5kZSBWZSBcIiBFbmQgdmVyYmF0aW0gdGV4dAorLmZ0IFIKKy5maQorLi4KKy5cIiBTZXQgdXAgc29tZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb25zIGFuZCBwcmVkZWZpbmVkIHN0cmluZ3MuICBcKigtLSB3aWxsCisuXCIgZ2l2ZSBhbiB1bmJyZWFrYWJsZSBkYXNoLCBcKihQSSB3aWxsIGdpdmUgcGksIFwqKEwiIHdpbGwgZ2l2ZSBhIGxlZnQKKy5cIiBkb3VibGUgcXVvdGUsIGFuZCBcKihSIiB3aWxsIGdpdmUgYSByaWdodCBkb3VibGUgcXVvdGUuICBcKihDKyB3aWxsCisuXCIgZ2l2ZSBhIG5pY2VyIEMrKy4gIENhcGl0YWwgb21lZ2EgaXMgdXNlZCB0byBkbyB1bmJyZWFrYWJsZSBkYXNoZXMgYW5kCisuXCIgdGhlcmVmb3JlIHdvbid0IGJlIGF2YWlsYWJsZS4gIFwqKENgIGFuZCBcKihDJyBleHBhbmQgdG8gYCcgaW4gbnJvZmYsCisuXCIgbm90aGluZyBpbiB0cm9mZiwgZm9yIHVzZSB3aXRoIEM8Pi4KKy50ciBcKCpXLQorLmRzIEMrIENcdictLjF2J1xoJy0xcCdccy0yK1xoJy0xcCcrXHMwXHYnLjF2J1xoJy0xcCcKKy5pZSBuIFx7XAorLiAgICBkcyAtLSBcKCpXLQorLiAgICBkcyBQSSBwaQorLiAgICBpZiAoXG4oLkg9NHUpJigxbT0yNHUpIC5kcyAtLSBcKCpXXGgnLTEydSdcKCpXXGgnLTEydSctXCIgZGlhYmxvIDEwIHBpdGNoCisuICAgIGlmIChcbiguSD00dSkmKDFtPTIwdSkgLmRzIC0tIFwoKldcaCctMTJ1J1woKldcaCctOHUnLVwiICBkaWFibG8gMTIgcGl0Y2gKKy4gICAgZHMgTCIgIiIKKy4gICAgZHMgUiIgIiIKKy4gICAgZHMgQ2AgIiIKKy4gICAgZHMgQycgIiIKKydiclx9CisuZWxce1wKKy4gICAgZHMgLS0gXHxcKGVtXHwKKy4gICAgZHMgUEkgXCgqcAorLiAgICBkcyBMIiBgYAorLiAgICBkcyBSIiAnJworJ2JyXH0KKy5cIgorLlwiIEVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGxpdGVyYWwgc3RyaW5ncyBmcm9tIGdyb2ZmJ3MgVW5pY29kZSB0cmFuc2Zvcm0uCisuaWUgXG4oLmcgLmRzIEFxIFwoYXEKKy5lbCAgICAgICAuZHMgQXEgJworLlwiCisuXCIgSWYgdGhlIEYgcmVnaXN0ZXIgaXMgdHVybmVkIG9uLCB3ZSdsbCBnZW5lcmF0ZSBpbmRleCBlbnRyaWVzIG9uIHN0ZGVyciBmb3IKKy5cIiB0aXRsZXMgKC5USCksIGhlYWRlcnMgKC5TSCksIHN1YnNlY3Rpb25zICguU1MpLCBpdGVtcyAoLklwKSwgYW5kIGluZGV4CisuXCIgZW50cmllcyBtYXJrZWQgd2l0aCBYPD4gaW4gUE9ELiAgT2YgY291cnNlLCB5b3UnbGwgaGF2ZSB0byBwcm9jZXNzIHRoZQorLlwiIG91dHB1dCB5b3Vyc2VsZiBpbiBzb21lIG1lYW5pbmdmdWwgZmFzaGlvbi4KKy5pZSBcbkYgXHtcCisuICAgIGRlIElYCisuICAgIHRtIEluZGV4OlxcJDFcdFxcbiVcdCJcXCQyIgorLi4KKy4gICAgbnIgJSAwCisuICAgIHJyIEYKKy5cfQorLmVsIFx7XAorLiAgICBkZSBJWAorLi4KKy5cfQorLlwiCisuXCIgQWNjZW50IG1hcmsgZGVmaW5pdGlvbnMgKEAoIyltcy5hY2MgMS41IDg4LzAyLzA4IFNNSTsgZnJvbSBVQ0IgNC4yKS4KKy5cIiBGZWFyLiAgUnVuLiAgU2F2ZSB5b3Vyc2VsZi4gIE5vIHVzZXItc2VydmljZWFibGUgcGFydHMuCisuICAgIFwiIGZ1ZGdlIGZhY3RvcnMgZm9yIG5yb2ZmIGFuZCB0cm9mZgorLmlmIG4gXHtcCisuICAgIGRzICNIIDAKKy4gICAgZHMgI1YgLjhtCisuICAgIGRzICNGIC4zbQorLiAgICBkcyAjWyBcZjEKKy4gICAgZHMgI10gXGZQCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAjSCAoKDF1LShcXFxcbiguZnUlMnUpKSouMTNtKQorLiAgICBkcyAjViAuNm0KKy4gICAgZHMgI0YgMAorLiAgICBkcyAjWyBcJgorLiAgICBkcyAjXSBcJgorLlx9CisuICAgIFwiIHNpbXBsZSBhY2NlbnRzIGZvciBucm9mZiBhbmQgdHJvZmYKKy5pZiBuIFx7XAorLiAgICBkcyAnIFwmCisuICAgIGRzIGAgXCYKKy4gICAgZHMgXiBcJgorLiAgICBkcyAsIFwmCisuICAgIGRzIH4gfgorLiAgICBkcyAvCisuXH0KKy5pZiB0IFx7XAorLiAgICBkcyAnIFxcazpcaCctKFxcbigud3UqOC8xMC1cKigjSCknXCdcaCJ8XFxuOnUiCisuICAgIGRzIGAgXFxrOlxoJy0oXFxuKC53dSo4LzEwLVwqKCNIKSdcYFxoJ3xcXG46dScKKy4gICAgZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdeXGgnfFxcbjp1JworLiAgICBkcyAsIFxcazpcaCctKFxcbigud3UqOC8xMCknLFxoJ3xcXG46dScKKy4gICAgZHMgfiBcXGs6XGgnLShcXG4oLnd1LVwqKCNILS4xbSknflxoJ3xcXG46dScKKy4gICAgZHMgLyBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0gpJ1x6XChzbFxoJ3xcXG46dScKKy5cfQorLiAgICBcIiB0cm9mZiBhbmQgKGRhaXN5LXdoZWVsKSBucm9mZiBhY2NlbnRzCisuZHMgOiBcXGs6XGgnLShcXG4oLnd1KjgvMTAtXCooI0grLjFtK1wqKCNGKSdcdictXCooI1YnXHouXGgnLjJtK1wqKCNGJy5caCd8XFxuOnUnXHYnXCooI1YnCisuZHMgOCBcaCdcKigjSCdcKCpiXGgnLVwqKCNIJworLmRzIG8gXFxrOlxoJy0oXFxuKC53dStcdydcKGRlJ3UtXCooI0gpLzJ1J1x2Jy0uM24nXCooI1tcelwoZGVcdicuM24nXGgnfFxcbjp1J1wqKCNdCisuZHMgZC0gXGgnXCooI0gnXChwZFxoJy1cdyd+J3UnXHYnLS4yNW0nXGYyXChoeVxmUFx2Jy4yNW0nXGgnLVwqKCNIJworLmRzIEQtIERcXGs6XGgnLVx3J0QndSdcdictLjExbSdcelwoaHlcdicuMTFtJ1xoJ3xcXG46dScKKy5kcyB0aCBcKigjW1x2Jy4zbSdccysxSVxzLTFcdictLjNtJ1xoJy0oXHcnSSd1KjIvMyknXHMtMW9ccysxXCooI10KKy5kcyBUaCBcKigjW1xzKzJJXHMtMlxoJy1cdydJJ3UqMy81J1x2Jy0uM20nb1x2Jy4zbSdcKigjXQorLmRzIGFlIGFcaCctKFx3J2EndSo0LzEwKSdlCisuZHMgQWUgQVxoJy0oXHcnQSd1KjQvMTApJ0UKKy4gICAgXCIgY29ycmVjdGlvbnMgZm9yIHZyb2ZmCisuaWYgdiAuZHMgfiBcXGs6XGgnLShcXG4oLnd1KjkvMTAtXCooI0gpJ1xzLTJcdX5cZFxzKzJcaCd8XFxuOnUnCisuaWYgdiAuZHMgXiBcXGs6XGgnLShcXG4oLnd1KjEwLzExLVwqKCNIKSdcdictLjRtJ15cdicuNG0nXGgnfFxcbjp1JworLiAgICBcIiBmb3IgbG93IHJlc29sdXRpb24gZGV2aWNlcyAoY3J0IGFuZCBscHIpCisuaWYgXG4oLkg+MjMgLmlmIFxuKC5WPjE5IFwKK1x7XAorLiAgICBkcyA6IGUKKy4gICAgZHMgOCBzcworLiAgICBkcyBvIGEKKy4gICAgZHMgZC0gZFxoJy0xJ1woZ2EKKy4gICAgZHMgRC0gRFxoJy0xJ1woaHkKKy4gICAgZHMgdGggXG8nYnAnCisuICAgIGRzIFRoIFxvJ0xQJworLiAgICBkcyBhZSBhZQorLiAgICBkcyBBZSBBRQorLlx9Cisucm0gI1sgI10gI0ggI1YgI0YgQworLlwiID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLlwiCisuSVggVGl0bGUgIkdQTCA3IgorLlRIIEdQTCA3ICIyMDEzLTExLTExIiAiZ2NjLTQuOC4zIiAiR05VIgorLlwiIEZvciBucm9mZiwgdHVybiBvZmYganVzdGlmaWNhdGlvbi4gIEFsd2F5cyB0dXJuIG9mZiBoeXBoZW5hdGlvbjsgaXQgbWFrZXMKKy5cIiB3YXkgdG9vIG1hbnkgbWlzdGFrZXMgaW4gdGVjaG5pY2FsIGRvY3VtZW50cy4KKy5pZiBuIC5hZCBsCisubmgKKy5TSCAiTkFNRSIKK2dwbCBcLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLlNIICJERVNDUklQVElPTiIKKy5JWCBIZWFkZXIgIkRFU0NSSVBUSU9OIgorLlNTICJccy0xR05VXHMwIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisuSVggU3Vic2VjdGlvbiAiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisuU1MgIlZlcnNpb24gMywgMjkgSnVuZSAyMDA3IgorLklYIFN1YnNlY3Rpb24gIlZlcnNpb24gMywgMjkgSnVuZSAyMDA3IgorLlZiIDEKK1wmICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CitcJiAgICAgICAgCitcJiAgICAgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKK1wmICAgICAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisuVmUKKy5TUyAiUHJlYW1ibGUiCisuSVggU3Vic2VjdGlvbiAiUHJlYW1ibGUiCitUaGUgXHMtMUdOVVxzMCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKK3NvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KKy5QUAorVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCit0aGUgXHMtMUdOVVxzMCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20KK3RvIHNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbVwqKC0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMKK2ZyZWUgc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuICBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK3VzZSB0aGUgXHMtMUdOVVxzMCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQKK2FwcGxpZXMgYWxzbyB0byBhbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gIFlvdQorY2FuIGFwcGx5IGl0IHRvIHlvdXIgcHJvZ3JhbXMsIHRvby4KKy5QUAorV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKy5QUAorVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBwcmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91Cit0aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gIFRoZXJlZm9yZSwgeW91CitoYXZlIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCitzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdDogcmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tCitvZiBvdGhlcnMuCisuUFAKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKK2ZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLAorcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UKK3Rlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisuUFAKK0RldmVsb3BlcnMgdGhhdCB1c2UgdGhlIFxzLTFHTlVcczAgXHMtMUdQTFxzMCBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOgorKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKK2dpdmluZyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCisuUFAKK0ZvciB0aGUgZGV2ZWxvcGVycycgYW5kIGF1dGhvcnMnIHByb3RlY3Rpb24sIHRoZSBccy0xR1BMXHMwIGNsZWFybHkgZXhwbGFpbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKK2F1dGhvcnMnIHNha2UsIHRoZSBccy0xR1BMXHMwIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzCitjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KK2F1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCisuUFAKK1NvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4KK21vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlCittYW51ZmFjdHVyZXIgY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZQorYWltIG9mIHByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZQorc3lzdGVtYXRpYyBwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvcgoraW5kaXZpZHVhbHMgdG8gdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuCitUaGVyZWZvcmUsIHdlIGhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBccy0xR1BMXHMwIHRvIHByb2hpYml0IHRoZQorcHJhY3RpY2UgZm9yIHRob3NlIHByb2R1Y3RzLiAgSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluCitvdGhlciBkb21haW5zLCB3ZSBzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UKK2RvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBccy0xR1BMXHMwLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUKK2ZyZWVkb20gb2YgdXNlcnMuCisuUFAKK0ZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuCitTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2YKK3NvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoCit0byBhdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0KK2NvdWxkIG1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHRoZSBccy0xR1BMXHMwCithc3N1cmVzIHRoYXQgcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisuUFAKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorLlNTICJccy0xVEVSTVNcczAgXHMtMUFORFxzMCBccy0xQ09ORElUSU9OU1xzMCIKKy5JWCBTdWJzZWN0aW9uICJURVJNUyBBTkQgQ09ORElUSU9OUyIKKy5JUCAiMC4gRGVmaW5pdGlvbnMuIiA0CisuSVggSXRlbSAiMC4gRGVmaW5pdGlvbnMuIgorXCZcKihMIlRoaXMgTGljZW5zZVwqKFIiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIFxzLTFHTlVcczAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKy5TcAorXCZcKihMIkNvcHlyaWdodFwqKFIiIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzCitvZiB3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLgorLlNwCitcJlwqKEwiVGhlIFByb2dyYW1cKihSIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgXCooTCJ5b3VcKihSIi4gIFwqKEwiTGljZW5zZWVzXCooUiIgYW5kCitcJlwqKEwicmVjaXBpZW50c1wqKFIiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgorLlNwCitUbyBcKihMIm1vZGlmeVwqKFIiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKK2luIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZgorYW4gZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSBcKihMIm1vZGlmaWVkIHZlcnNpb25cKihSIiBvZgordGhlIGVhcmxpZXIgd29yayBvciBhIHdvcmsgXCooTCJiYXNlZCBvblwqKFIiIHRoZSBlYXJsaWVyIHdvcmsuCisuU3AKK0EgXCooTCJjb3ZlcmVkIHdvcmtcKihSIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorLlNwCitUbyBcKihMInByb3BhZ2F0ZVwqKFIiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKK3Blcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKK2luZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQorY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCitwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisuU3AKK1RvIFwqKEwiY29udmV5XCooUiIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlcgordGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QKK2NvbnZleWluZy4KKy5TcAorQW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMgXCooTCJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzXCooUiIgdG8KK3RoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUKK2ZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQordGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKK2V4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKK3dvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmCit0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQorbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KKy5JUCAiMS4gU291cmNlIENvZGUuIiA0CisuSVggSXRlbSAiMS4gU291cmNlIENvZGUuIgorVGhlIFwqKEwic291cmNlIGNvZGVcKihSIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgXCooTCJPYmplY3QgY29kZVwqKFIiIG1lYW5zIGFueSBub24tc291cmNlIGZvcm0KK29mIGEgd29yay4KKy5TcAorQSBcKihMIlN0YW5kYXJkIEludGVyZmFjZVwqKFIiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorLlNwCitUaGUgXCooTCJTeXN0ZW0gTGlicmFyaWVzXCooUiIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCitcJlwqKEwiTWFqb3IgQ29tcG9uZW50XCooUiIsIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50Cisoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCisoaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0bworcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuCisuU3AKK1RoZSBcKihMIkNvcnJlc3BvbmRpbmcgU291cmNlXCooUiIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbAordGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZQord29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bworY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzCitTeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5IGF2YWlsYWJsZSBmcmVlCitwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKK3doaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZQoraW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IKK3RoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQorbGlua2VkIHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsCitzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQorc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgorLlNwCitUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzIGNhbgorcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLgorLlNwCitUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQgc2FtZQord29yay4KKy5JUCAiMi4gQmFzaWMgUGVybWlzc2lvbnMuIiA0CisuSVggSXRlbSAiMi4gQmFzaWMgUGVybWlzc2lvbnMuIgorQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisuU3AKK1lvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QgY29udmV5LAord2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zIGluIGZvcmNlLgorWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgaGF2aW5nCit0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdSB3aXRoCitmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8gbm90Citjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MgZm9yCit5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24gYW5kCitjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZiB5b3VyCitjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKy5TcAorQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIgdGhlCitjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMAorbWFrZXMgaXQgdW5uZWNlc3NhcnkuCisuSVAgIjMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuIiA0CisuSVggSXRlbSAiMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4iCitObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKK21lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQorMTEgb2YgdGhlIFxzLTFXSVBPXHMwIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgorc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAorbWVhc3VyZXMuCisuU3AKK1doZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2gKK2NpcmN1bXZlbnRpb24gaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGgKK3Jlc3BlY3QgdG8gdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0CitvcGVyYXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0Cit0aGUgd29yaydzIHVzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKy5JUCAiNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4iIDQKKy5JWCBJdGVtICI0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLiIKK1lvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorLlNwCitZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCithbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLgorLklQICI1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLiIgNAorLklYIEl0ZW0gIjUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuIgorWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bworcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKK3Rlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZQorY29uZGl0aW9uczoKKy5SUyA0CisuSVAgImEuIiA0CisuSVggSXRlbSAiYS4iCitUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQgaXQsCithbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KKy5JUCAiYi4iIDQKKy5JWCBJdGVtICJiLiIKK1RoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzIHJlbGVhc2VkCit1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24gNy4gIFRoaXMKK3JlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8gXCooTCJrZWVwIGludGFjdCBhbGwKK25vdGljZXNcKihSIi4KKy5JUCAiYy4iIDQKKy5JWCBJdGVtICJjLiIKK1lvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzIExpY2Vuc2UgdG8KK2FueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMgTGljZW5zZSB3aWxsCit0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3IGFkZGl0aW9uYWwgdGVybXMsCit0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5CithcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8gcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluCithbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUKK3NlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCisuSVAgImQuIiA0CisuSVggSXRlbSAiZC4iCitJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheQorQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCitpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91ciB3b3JrCituZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCisuUkUKKy5SUyA0CisuU3AKK0EgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQKK3dvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssCithbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAoraW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgorXCZcKihMImFnZ3JlZ2F0ZVwqKFIiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKy5SRQorLklQICI2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4iIDQKKy5JWCBJdGVtICI2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4iCitZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlIG1hY2hpbmUtcmVhZGFibGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIG9uZSBvZiB0aGVzZQord2F5czoKKy5SUyA0CisuSVAgImEuIiA0CisuSVggSXRlbSAiYS4iCitDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bSBjdXN0b21hcmlseQordXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisuSVAgImIuIiA0CisuSVggSXRlbSAiYi4iCitDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CisoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEgd3JpdHRlbgorb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzIGxvbmcgYXMgeW91CitvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QgbW9kZWwsIHRvIGdpdmUKK2FueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEgY29weSBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZSBwcm9kdWN0IHRoYXQgaXMKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQKK2ZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8gbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZQorY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcyBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzCit0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgorLklQICJjLiIgNAorLklYIEl0ZW0gImMuIgorQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUgd3JpdHRlbgorb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlzIGFsdGVybmF0aXZlIGlzCithbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZCBvbmx5IGlmIHlvdQorcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggc3Vic2VjdGlvbgorNmIuCisuSVAgImQuIiA0CisuSVggSXRlbSAiZC4iCitDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZQorKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubworZnVydGhlciBjaGFyZ2UuICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0byBjb3B5Cit0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG1heSBiZQorb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkgdGhhdCBzdXBwb3J0cworZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbiBjbGVhciBkaXJlY3Rpb25zCituZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuCitSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbgorb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8KK3NhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgorLklQICJlLiIgNAorLklYIEl0ZW0gImUuIgorQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZCB5b3UKK2luZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcgU291cmNlIG9mCit0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8gY2hhcmdlIHVuZGVyCitzdWJzZWN0aW9uIDZkLgorLlJFCisuUlMgNAorLlNwCitBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKK2Zyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCitpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisuU3AKK0EgXCooTCJVc2VyIFByb2R1Y3RcKihSIiBpcyBlaXRoZXIgKDEpIGEgXCooTCJjb25zdW1lciBwcm9kdWN0XCooUiIsIHdoaWNoIG1lYW5zIGFueQordGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsCitmYW1pbHksIG9yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yCitpbmNvcnBvcmF0aW9uIGludG8gYSBkd2VsbGluZy4gIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEKK2NvbnN1bWVyIHByb2R1Y3QsIGRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mCitjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXIgcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwKK1wmXCooTCJub3JtYWxseSB1c2VkXCooUiIgcmVmZXJzIHRvIGEgdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YKK3Byb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cyBvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkKK2luIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIgYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZAordG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZgord2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwgY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvcgorbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50IHRoZSBvbmx5IHNpZ25pZmljYW50Cittb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKy5TcAorXCZcKihMIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvblwqKFIiIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywKK3Byb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8KK2luc3RhbGwgYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyCitQcm9kdWN0IGZyb20gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoZQoraW5mb3JtYXRpb24gbXVzdCBzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YKK3RoZSBtb2RpZmllZCBvYmplY3QgY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGgKK3NvbGVseSBiZWNhdXNlIG1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorLlNwCitJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBccy0xUk9NXHMwKS4KKy5TcAorVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQorcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvcgordXBkYXRlcyBmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZQorcmVjaXBpZW50LCBvciBmb3IgdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvcgoraW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEgbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbgoraXRzZWxmIG1hdGVyaWFsbHkgYW5kIGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsKK29yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQgcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUKK25ldHdvcmsuCisuU3AKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAoraW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQorZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4KK3NvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgordW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCisuUkUKKy5JUCAiNy4gQWRkaXRpb25hbCBUZXJtcy4iIDQKKy5JWCBJdGVtICI3LiBBZGRpdGlvbmFsIFRlcm1zLiIKK1wmXCooTCJBZGRpdGlvbmFsIHBlcm1pc3Npb25zXCooUiIgYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgorQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbAorYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudAordGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKK2FwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkKK3VuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkKK3RoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KKy5TcAorV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgorcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mCitpdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duCityZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKK2FkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywKK2ZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4KKy5TcAorTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzCitvZiB0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKy5SUyA0CisuSVAgImEuIiA0CisuSVggSXRlbSAiYS4iCitEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgdGVybXMKK29mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisuSVAgImIuIiA0CisuSVggSXRlbSAiYi4iCitSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IgYXV0aG9yCithdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcworZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCisuSVAgImMuIiA0CisuSVggSXRlbSAiYy4iCitQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yCityZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgorLklQICJkLiIgNAorLklYIEl0ZW0gImQuIgorTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgorYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCisuSVAgImUuIiA0CisuSVggSXRlbSAiZS4iCitEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lIHRyYWRlCituYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKy5JUCAiZi4iIDQKKy5JWCBJdGVtICJmLiIKK1JlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQgbWF0ZXJpYWwgYnkKK2FueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIGl0KSB3aXRoCitjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yIGFueQorbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uIHRob3NlCitsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCisuUkUKKy5SUyA0CisuU3AKK0FsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkIFwqKEwiZnVydGhlcgorcmVzdHJpY3Rpb25zXCooUiIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UKK3JlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCitnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKK3Jlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKK2EgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcworTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zCitvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcworbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisuU3AKK0lmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorLlNwCitBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQorZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsgdGhlCithYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKy5SRQorLklQICI4LiBUZXJtaW5hdGlvbi4iIDQKKy5JWCBJdGVtICI4LiBUZXJtaW5hdGlvbi4iCitZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKK3Byb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcgordGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZAorcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLgorLlNwCitIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91ciBsaWNlbnNlCitmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksCit1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kIGZpbmFsbHkKK3Rlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0IGhvbGRlcgorZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0bworNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorLlNwCitNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKy5TcAorVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUKK2xpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQorcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZQorbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KKy5JUCAiOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuIiA0CisuSVggSXRlbSAiOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuIgorWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yIHJ1bgorYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCitvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbgordG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKK25vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8KK25vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQorY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KKy5JUCAiMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLiIgNAorLklYIEl0ZW0gIjEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4iCitFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CityZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUKK2ZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgorLlNwCitBbiBcKihMImVudGl0eSB0cmFuc2FjdGlvblwqKFIiIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4KK29yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4KK29yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkCit3b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdAordHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCitsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQKK2dpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlCitDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKK3RoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4KKy5TcAorWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCityaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQorbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCityaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCitzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisuSVAgIjExLiBQYXRlbnRzLiIgNAorLklYIEl0ZW0gIjExLiBQYXRlbnRzLiIKK0EgXCooTCJjb250cmlidXRvclwqKFIiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcworTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKK3dvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgXCooTCJjb250cmlidXRvciB2ZXJzaW9uXCooUiIuCisuU3AKK0EgY29udHJpYnV0b3IncyBcKihMImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zXCooUiIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zIG93bmVkCitvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQKK2J5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwKK2J1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCitjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gIEZvcgorcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCBcKihMImNvbnRyb2xcKihSIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorLlNwCitFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvCittYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQKK3Byb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCisuU3AKK0luIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSBcKihMInBhdGVudCBsaWNlbnNlXCooUiIgaXMgYW55IGV4cHJlc3MKK2FncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAorKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0bworc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gIFRvIFwqKEwiZ3JhbnRcKihSIiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKy5TcAorSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKK2FuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lCit0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhCitwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAordGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbworYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZQorcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKK2NvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnQKK2xpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiAgXCooTCJLbm93aW5nbHkgcmVseWluZ1wqKFIiIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKy5TcAorSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvcgorYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQorY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzCityZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkKK29yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKK3lvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkCit3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4KKy5TcAorQSBwYXRlbnQgbGljZW5zZSBpcyBcKihMImRpc2NyaW1pbmF0b3J5XCooUiIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4gdGhlCitzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzIGNvbmRpdGlvbmVkIG9uCit0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5CitncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQgd29yayBpZiB5b3UKK2FyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzIGluIHRoZQorYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50IHRvIHRoZQordGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZyB0aGUKK3dvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlIHBhcnRpZXMKK3dobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkgcGF0ZW50CitsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgY29udmV5ZWQgYnkKK3lvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5IGZvciBhbmQgaW4KK2Nvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdCBjb250YWluIHRoZQorY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LCBvciB0aGF0IHBhdGVudAorbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4KKy5TcAorTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZworYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKK290aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKy5JUCAiMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uIiA0CisuSVggSXRlbSAiMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uIgorSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5CithIGNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIKK3RoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhCitjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZQordG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UgdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nCitmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleSB0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZAorc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseQorZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCisuSVAgIjEzLiBVc2Ugd2l0aCB0aGUgXHMtMUdOVVxzMCBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4iIDQKKy5JWCBJdGVtICIxMy4gVXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4iCitOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCitwZXJtaXNzaW9uIHRvIGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxpY2Vuc2VkCit1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIFxzLTFHTlVcczAgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQorY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssCitidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBccy0xR05VXHMwIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQorY29tYmluYXRpb24gYXMgc3VjaC4KKy5JUCAiMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLiIgNAorLklYIEl0ZW0gIjE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4iCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIFxzLTFHTlVcczAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisuU3AKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBccy0xR05VXHMwIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIFwqKEwib3IgYW55IGxhdGVyIHZlcnNpb25cKihSIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYKK3RoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgXHMtMUdOVVxzMCBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uCisuU3AKK0lmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUgdmVyc2lvbnMKK29mIHRoZSBccy0xR05VXHMwIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMKK3N0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdSB0bworY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisuU3AKK0xhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50CitwZXJtaXNzaW9ucy4gIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55CithdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCitsYXRlciB2ZXJzaW9uLgorLklQICIxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4iIDQKKy5JWCBJdGVtICIxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4iCitcJlxzLTFUSEVSRVxzMCBccy0xSVNcczAgXHMtMU5PXHMwIFxzLTFXQVJSQU5UWVxzMCBccy0xRk9SXHMwIFxzLTFUSEVcczAgXHMtMVBST0dSQU1cczAsIFxzLTFUT1xzMCBccy0xVEhFXHMwIFxzLTFFWFRFTlRcczAgXHMtMVBFUk1JVFRFRFxzMCBccy0xQllcczAKK1wmXHMtMUFQUExJQ0FCTEVcczAgXHMtMUxBV1xzMC4gIFxzLTFFWENFUFRcczAgXHMtMVdIRU5cczAgXHMtMU9USEVSV0lTRVxzMCBccy0xU1RBVEVEXHMwIFxzLTFJTlxzMCBccy0xV1JJVElOR1xzMCBccy0xVEhFXHMwIFxzLTFDT1BZUklHSFRcczAKK1wmXHMtMUhPTERFUlNcczAgXHMtMUFORC9PUlxzMCBccy0xT1RIRVJcczAgXHMtMVBBUlRJRVNcczAgXHMtMVBST1ZJREVcczAgXHMtMVRIRVxzMCBccy0xUFJPR1JBTVxzMCBcKihMIlxzLTFBU1xzMCBccy0xSVNcczBcKihSIiBccy0xV0lUSE9VVFxzMAorXCZccy0xV0FSUkFOVFlcczAgXHMtMU9GXHMwIFxzLTFBTllcczAgXHMtMUtJTkRcczAsIFxzLTFFSVRIRVJcczAgXHMtMUVYUFJFU1NFRFxzMCBccy0xT1JcczAgXHMtMUlNUExJRURcczAsIFxzLTFJTkNMVURJTkdcczAsIFxzLTFCVVRcczAgXHMtMU5PVFxzMAorXCZccy0xTElNSVRFRFxzMCBccy0xVE9cczAsIFxzLTFUSEVcczAgXHMtMUlNUExJRURcczAgXHMtMVdBUlJBTlRJRVNcczAgXHMtMU9GXHMwIFxzLTFNRVJDSEFOVEFCSUxJVFlcczAgXHMtMUFORFxzMCBccy0xRklUTkVTU1xzMCBccy0xRk9SXHMwCitBIFxzLTFQQVJUSUNVTEFSXHMwIFxzLTFQVVJQT1NFXHMwLiAgXHMtMVRIRVxzMCBccy0xRU5USVJFXHMwIFxzLTFSSVNLXHMwIFxzLTFBU1xzMCBccy0xVE9cczAgXHMtMVRIRVxzMCBccy0xUVVBTElUWVxzMCBccy0xQU5EXHMwCitcJlxzLTFQRVJGT1JNQU5DRVxzMCBccy0xT0ZcczAgXHMtMVRIRVxzMCBccy0xUFJPR1JBTVxzMCBccy0xSVNcczAgXHMtMVdJVEhcczAgXHMtMVlPVVxzMC4gIFxzLTFTSE9VTERcczAgXHMtMVRIRVxzMCBccy0xUFJPR1JBTVxzMCBccy0xUFJPVkVcczAKK1wmXHMtMURFRkVDVElWRVxzMCwgXHMtMVlPVVxzMCBccy0xQVNTVU1FXHMwIFxzLTFUSEVcczAgXHMtMUNPU1RcczAgXHMtMU9GXHMwIFxzLTFBTExcczAgXHMtMU5FQ0VTU0FSWVxzMCBccy0xU0VSVklDSU5HXHMwLCBccy0xUkVQQUlSXHMwIFxzLTFPUlxzMAorXCZccy0xQ09SUkVDVElPTlxzMC4KKy5JUCAiMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiIgNAorLklYIEl0ZW0gIjE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4iCitcJlxzLTFJTlxzMCBccy0xTk9cczAgXHMtMUVWRU5UXHMwIFxzLTFVTkxFU1NcczAgXHMtMVJFUVVJUkVEXHMwIFxzLTFCWVxzMCBccy0xQVBQTElDQUJMRVxzMCBccy0xTEFXXHMwIFxzLTFPUlxzMCBccy0xQUdSRUVEXHMwIFxzLTFUT1xzMCBccy0xSU5cczAgXHMtMVdSSVRJTkdcczAKK1wmXHMtMVdJTExcczAgXHMtMUFOWVxzMCBccy0xQ09QWVJJR0hUXHMwIFxzLTFIT0xERVJcczAsIFxzLTFPUlxzMCBccy0xQU5ZXHMwIFxzLTFPVEhFUlxzMCBccy0xUEFSVFlcczAgXHMtMVdIT1xzMCBccy0xTU9ESUZJRVNcczAgXHMtMUFORC9PUlxzMAorXCZccy0xQ09OVkVZU1xzMCBccy0xVEhFXHMwIFxzLTFQUk9HUkFNXHMwIFxzLTFBU1xzMCBccy0xUEVSTUlUVEVEXHMwIFxzLTFBQk9WRVxzMCwgXHMtMUJFXHMwIFxzLTFMSUFCTEVcczAgXHMtMVRPXHMwIFxzLTFZT1VcczAgXHMtMUZPUlxzMCBccy0xREFNQUdFU1xzMCwKK1wmXHMtMUlOQ0xVRElOR1xzMCBccy0xQU5ZXHMwIFxzLTFHRU5FUkFMXHMwLCBccy0xU1BFQ0lBTFxzMCwgXHMtMUlOQ0lERU5UQUxcczAgXHMtMU9SXHMwIFxzLTFDT05TRVFVRU5USUFMXHMwIFxzLTFEQU1BR0VTXHMwCitcJlxzLTFBUklTSU5HXHMwIFxzLTFPVVRcczAgXHMtMU9GXHMwIFxzLTFUSEVcczAgXHMtMVVTRVxzMCBccy0xT1JcczAgXHMtMUlOQUJJTElUWVxzMCBccy0xVE9cczAgXHMtMVVTRVxzMCBccy0xVEhFXHMwIFxzLTFQUk9HUkFNXHMwIChccy0xSU5DTFVESU5HXHMwIFxzLTFCVVRcczAKK1wmXHMtMU5PVFxzMCBccy0xTElNSVRFRFxzMCBccy0xVE9cczAgXHMtMUxPU1NcczAgXHMtMU9GXHMwIFxzLTFEQVRBXHMwIFxzLTFPUlxzMCBccy0xREFUQVxzMCBccy0xQkVJTkdcczAgXHMtMVJFTkRFUkVEXHMwIFxzLTFJTkFDQ1VSQVRFXHMwIFxzLTFPUlxzMAorXCZccy0xTE9TU0VTXHMwIFxzLTFTVVNUQUlORURcczAgXHMtMUJZXHMwIFxzLTFZT1VcczAgXHMtMU9SXHMwIFxzLTFUSElSRFxzMCBccy0xUEFSVElFU1xzMCBccy0xT1JcczAgQSBccy0xRkFJTFVSRVxzMCBccy0xT0ZcczAgXHMtMVRIRVxzMCBccy0xUFJPR1JBTVxzMAorXCZccy0xVE9cczAgXHMtMU9QRVJBVEVcczAgXHMtMVdJVEhcczAgXHMtMUFOWVxzMCBccy0xT1RIRVJcczAgXHMtMVBST0dSQU1TXHMwKSwgXHMtMUVWRU5cczAgXHMtMUlGXHMwIFxzLTFTVUNIXHMwIFxzLTFIT0xERVJcczAgXHMtMU9SXHMwIFxzLTFPVEhFUlxzMAorXCZccy0xUEFSVFlcczAgXHMtMUhBU1xzMCBccy0xQkVFTlxzMCBccy0xQURWSVNFRFxzMCBccy0xT0ZcczAgXHMtMVRIRVxzMCBccy0xUE9TU0lCSUxJVFlcczAgXHMtMU9GXHMwIFxzLTFTVUNIXHMwIFxzLTFEQU1BR0VTXHMwLgorLklQICIxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LiIgNAorLklYIEl0ZW0gIjE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuIgorSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorLlNTICJccy0xRU5EXHMwIFxzLTFPRlxzMCBccy0xVEVSTVNcczAgXHMtMUFORFxzMCBccy0xQ09ORElUSU9OU1xzMCIKKy5JWCBTdWJzZWN0aW9uICJFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMiCisuU1MgIkhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcyIKKy5JWCBTdWJzZWN0aW9uICJIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMiCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZQordGVybXMuCisuUFAKK1RvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgXCooTCJjb3B5cmlnaHRcKihSIiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorLlBQCisuVmIgMgorXCYgICAgICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtXCooQXFzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPiAgCitcJiAgICAgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gPG5hbWUgb2YgYXV0aG9yPgorXCYgICAgICAgIAorXCYgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitcJiAgICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK1wmICAgICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKK1wmICAgICAgICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCitcJiAgICAgICAgCitcJiAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorXCYgICAgICAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK1wmICAgICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorXCYgICAgICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KK1wmICAgICAgICAKK1wmICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorXCYgICAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorLlZlCisuUFAKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorLlBQCitJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0Citub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisuUFAKKy5WYiA0CitcJiAgICAgICAgPHByb2dyYW0+IENvcHlyaWdodCAoQykgPHllYXI+IDxuYW1lIG9mIGF1dGhvcj4gCitcJiAgICAgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSAic2hvdyB3Ii4KK1wmICAgICAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CitcJiAgICAgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlICJzaG93IGMiIGZvciBkZXRhaWxzLgorLlZlCisuUFAKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgXGZCc2hvdyB3XGZSIGFuZCBcZkJzaG93IGNcZlIgc2hvdWxkIHNob3cKK3RoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgeW91cgorcHJvZ3JhbSdzIGNvbW1hbmRzIG1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgXHMtMUdVSVxzMCBpbnRlcmZhY2UsIHlvdSB3b3VsZAordXNlIGFuIFwqKEwiYWJvdXQgYm94XCooUiIuCisuUFAKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSBcKihMImNvcHlyaWdodCBkaXNjbGFpbWVyXCooUiIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIFxzLTFHTlVcczAgXHMtMUdQTFxzMCwgc2VlCis8XGZCaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL1xmUj4uCisuUFAKK1RoZSBccy0xR05VXHMwIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91cgorcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZQorbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeQorYXBwbGljYXRpb25zIHdpdGggdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZQordGhlIFxzLTFHTlVcczAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuICBCdXQKK2ZpcnN0LCBwbGVhc2UgcmVhZCA8XGZCaHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5XC1ub3RcLWxncGwuaHRtbFxmUj4uCisuU0ggIlNFRSBBTFNPIgorLklYIEhlYWRlciAiU0VFIEFMU08iCitcJlxmSWdmZGxcZlJcfCg3KSwgXGZJZnNmXC1mdW5kaW5nXGZSXHwoNykuCisuU0ggIkNPUFlSSUdIVCIKKy5JWCBIZWFkZXIgIkNPUFlSSUdIVCIKK0NvcHlyaWdodCAoYykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy5QUAorRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKK2xpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2FzLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2FzLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWZkNjJjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9wZGYvYXMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2JpbnV0aWxzLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2JpbnV0aWxzLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWE5NmQxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9wZGYvYmludXRpbHMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2NwcC5wZGYgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL3BkZi9jcHAucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YmFmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL3BkZi9jcHAucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2djYy5wZGYgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL3BkZi9nY2MucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzI1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9kb2MvZ2NjLWxpbmFyby1hYXJjaDY0LW5vbmUtZWxmL3BkZi9nY2MucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2dmb3J0cmFuLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2dmb3J0cmFuLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2Y2MjRjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9wZGYvZ2ZvcnRyYW4ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2dwcm9mLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2dwcm9mLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWFlZGMwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9wZGYvZ3Byb2YucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2xkLnBkZiBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2xkLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWM1ZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9wZGYvbGQucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2xpYmMucGRmIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9wZGYvbGliYy5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ1ZmI1YwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2xpYmMucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2xpYm0ucGRmIGIvc2hhcmUvZG9jL2djYy1saW5hcm8tYWFyY2g2NC1ub25lLWVsZi9wZGYvbGlibS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNmMDIwMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2RvYy9nY2MtbGluYXJvLWFhcmNoNjQtbm9uZS1lbGYvcGRmL2xpYm0ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2djYy00LjguMy9weXRob24vbGlic3RkY3h4L19faW5pdF9fLnB5IGIvc2hhcmUvZ2NjLTQuOC4zL3B5dGhvbi9saWJzdGRjeHgvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxMzc4OQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2djYy00LjguMy9weXRob24vbGlic3RkY3h4L19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKwpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2NjLTQuOC4zL3B5dGhvbi9saWJzdGRjeHgvdjYvX19pbml0X18ucHkgYi9zaGFyZS9nY2MtNC44LjMvcHl0aG9uL2xpYnN0ZGN4eC92Ni9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEzNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2NjLTQuOC4zL3B5dGhvbi9saWJzdGRjeHgvdjYvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorCmRpZmYgLS1naXQgYS9zaGFyZS9nY2MtNC44LjMvcHl0aG9uL2xpYnN0ZGN4eC92Ni9wcmludGVycy5weSBiL3NoYXJlL2djYy00LjguMy9weXRob24vbGlic3RkY3h4L3Y2L3ByaW50ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjIwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9nY2MtNC44LjMvcHl0aG9uL2xpYnN0ZGN4eC92Ni9wcmludGVycy5weQpAQCAtMCwwICsxLDEwNDQgQEAKKyMgUHJldHR5LXByaW50ZXJzIGZvciBsaWJzdGMrKy4KKworIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworaW1wb3J0IGdkYgoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHJlCisKKyMgVHJ5IHRvIHVzZSB0aGUgbmV3LXN0eWxlIHByZXR0eS1wcmludGluZyBpZiBhdmFpbGFibGUuCitfdXNlX2dkYl9wcCA9IFRydWUKK3RyeToKKyAgICBpbXBvcnQgZ2RiLnByaW50aW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3VzZV9nZGJfcHAgPSBGYWxzZQorCisjIFRyeSB0byBpbnN0YWxsIHR5cGUtcHJpbnRlcnMuCitfdXNlX3R5cGVfcHJpbnRpbmcgPSBGYWxzZQordHJ5OgorICAgIGltcG9ydCBnZGIudHlwZXMKKyAgICBpZiBoYXNhdHRyKGdkYi50eXBlcywgJ1R5cGVQcmludGVyJyk6CisgICAgICAgIF91c2VfdHlwZV9wcmludGluZyA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKKyMgU3RhcnRpbmcgd2l0aCB0aGUgdHlwZSBPUklHLCBzZWFyY2ggZm9yIHRoZSBtZW1iZXIgdHlwZSBOQU1FLiAgVGhpcworIyBoYW5kbGVzIHNlYXJjaGluZyB1cHdhcmQgdGhyb3VnaCBzdXBlcmNsYXNzZXMuICBUaGlzIGlzIG5lZWRlZCB0bworIyB3b3JrIGFyb3VuZCBodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTEzNjE1LgorZGVmIGZpbmRfdHlwZShvcmlnLCBuYW1lKToKKyAgICB0eXAgPSBvcmlnLnN0cmlwX3R5cGVkZWZzKCkKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBzZWFyY2ggPSBzdHIodHlwKSArICc6OicgKyBuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUoc2VhcmNoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIFRoZSB0eXBlIHdhcyBub3QgZm91bmQsIHNvIHRyeSB0aGUgc3VwZXJjbGFzcy4gIFdlIG9ubHkgbmVlZAorICAgICAgICAjIHRvIGNoZWNrIHRoZSBmaXJzdCBzdXBlcmNsYXNzLCBzbyB3ZSBkb24ndCBib3RoZXIgd2l0aAorICAgICAgICAjIGFueXRoaW5nIGZhbmNpZXIgaGVyZS4KKyAgICAgICAgZmllbGQgPSB0eXAuZmllbGRzKClbMF0KKyAgICAgICAgaWYgbm90IGZpZWxkLmlzX2Jhc2VfY2xhc3M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiQ2Fubm90IGZpbmQgdHlwZSAlczo6JXMiICUgKHN0cihvcmlnKSwgbmFtZSkKKyAgICAgICAgdHlwID0gZmllbGQudHlwZQorCitjbGFzcyBTaGFyZWRQb2ludGVyUHJpbnRlcjoKKyAgICAiUHJpbnQgYSBzaGFyZWRfcHRyIG9yIHdlYWtfcHRyIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgc3RhdGUgPSAnZW1wdHknCisgICAgICAgIHJlZmNvdW50cyA9IHNlbGYudmFsWydfTV9yZWZjb3VudCddWydfTV9waSddCisgICAgICAgIGlmIHJlZmNvdW50cyAhPSAwOgorICAgICAgICAgICAgdXNlY291bnQgPSByZWZjb3VudHNbJ19NX3VzZV9jb3VudCddCisgICAgICAgICAgICB3ZWFrY291bnQgPSByZWZjb3VudHNbJ19NX3dlYWtfY291bnQnXQorICAgICAgICAgICAgaWYgdXNlY291bnQgPT0gMDoKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICdleHBpcmVkLCB3ZWFrICVkJyAlIHdlYWtjb3VudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICdjb3VudCAlZCwgd2VhayAlZCcgJSAodXNlY291bnQsIHdlYWtjb3VudCAtIDEpCisgICAgICAgIHJldHVybiAnJXMgKCVzKSAlcycgJSAoc2VsZi50eXBlbmFtZSwgc3RhdGUsIHNlbGYudmFsWydfTV9wdHInXSkKKworY2xhc3MgVW5pcXVlUG9pbnRlclByaW50ZXI6CisgICAgIlByaW50IGEgdW5pcXVlX3B0ciIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgdiA9IHNlbGYudmFsWydfTV90J11bJ19NX2hlYWRfaW1wbCddCisgICAgICAgIHJldHVybiAoJ3N0ZDo6dW5pcXVlX3B0cjwlcz4gY29udGFpbmluZyAlcycgJSAoc3RyKHYudHlwZS50YXJnZXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHYpKSkKKworY2xhc3MgU3RkTGlzdFByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjpsaXN0IgorCisgICAgY2xhc3MgX2l0ZXJhdG9yOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZXR5cGUsIGhlYWQpOgorICAgICAgICAgICAgc2VsZi5ub2RldHlwZSA9IG5vZGV0eXBlCisgICAgICAgICAgICBzZWxmLmJhc2UgPSBoZWFkWydfTV9uZXh0J10KKyAgICAgICAgICAgIHNlbGYuaGVhZCA9IGhlYWQuYWRkcmVzcworICAgICAgICAgICAgc2VsZi5jb3VudCA9IDAKKworICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5iYXNlID09IHNlbGYuaGVhZDoKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICBlbHQgPSBzZWxmLmJhc2UuY2FzdChzZWxmLm5vZGV0eXBlKS5kZXJlZmVyZW5jZSgpCisgICAgICAgICAgICBzZWxmLmJhc2UgPSBlbHRbJ19NX25leHQnXQorICAgICAgICAgICAgY291bnQgPSBzZWxmLmNvdW50CisgICAgICAgICAgICBzZWxmLmNvdW50ID0gc2VsZi5jb3VudCArIDEKKyAgICAgICAgICAgIHJldHVybiAoJ1slZF0nICUgY291bnQsIGVsdFsnX01fZGF0YSddKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiBjaGlsZHJlbihzZWxmKToKKyAgICAgICAgbm9kZXR5cGUgPSBmaW5kX3R5cGUoc2VsZi52YWwudHlwZSwgJ19Ob2RlJykKKyAgICAgICAgbm9kZXR5cGUgPSBub2RldHlwZS5zdHJpcF90eXBlZGVmcygpLnBvaW50ZXIoKQorICAgICAgICByZXR1cm4gc2VsZi5faXRlcmF0b3Iobm9kZXR5cGUsIHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX25vZGUnXSkKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX25vZGUnXS5hZGRyZXNzID09IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX25vZGUnXVsnX01fbmV4dCddOgorICAgICAgICAgICAgcmV0dXJuICdlbXB0eSAlcycgJSAoc2VsZi50eXBlbmFtZSkKKyAgICAgICAgcmV0dXJuICclcycgJSAoc2VsZi50eXBlbmFtZSkKKworY2xhc3MgU3RkTGlzdEl0ZXJhdG9yUHJpbnRlcjoKKyAgICAiUHJpbnQgc3RkOjpsaXN0OjppdGVyYXRvciIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICBub2RldHlwZSA9IGZpbmRfdHlwZShzZWxmLnZhbC50eXBlLCAnX05vZGUnKQorICAgICAgICBub2RldHlwZSA9IG5vZGV0eXBlLnN0cmlwX3R5cGVkZWZzKCkucG9pbnRlcigpCisgICAgICAgIHJldHVybiBzZWxmLnZhbFsnX01fbm9kZSddLmNhc3Qobm9kZXR5cGUpLmRlcmVmZXJlbmNlKClbJ19NX2RhdGEnXQorCitjbGFzcyBTdGRTbGlzdFByaW50ZXI6CisgICAgIlByaW50IGEgX19nbnVfY3h4OjpzbGlzdCIKKworICAgIGNsYXNzIF9pdGVyYXRvcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGV0eXBlLCBoZWFkKToKKyAgICAgICAgICAgIHNlbGYubm9kZXR5cGUgPSBub2RldHlwZQorICAgICAgICAgICAgc2VsZi5iYXNlID0gaGVhZFsnX01faGVhZCddWydfTV9uZXh0J10KKyAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisKKyAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuYmFzZSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIGVsdCA9IHNlbGYuYmFzZS5jYXN0KHNlbGYubm9kZXR5cGUpLmRlcmVmZXJlbmNlKCkKKyAgICAgICAgICAgIHNlbGYuYmFzZSA9IGVsdFsnX01fbmV4dCddCisgICAgICAgICAgICBjb3VudCA9IHNlbGYuY291bnQKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorICAgICAgICAgICAgcmV0dXJuICgnWyVkXScgJSBjb3VudCwgZWx0WydfTV9kYXRhJ10pCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgY2hpbGRyZW4oc2VsZik6CisgICAgICAgIG5vZGV0eXBlID0gZmluZF90eXBlKHNlbGYudmFsLnR5cGUsICdfTm9kZScpCisgICAgICAgIG5vZGV0eXBlID0gbm9kZXR5cGUuc3RyaXBfdHlwZWRlZnMoKS5wb2ludGVyKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2l0ZXJhdG9yKG5vZGV0eXBlLCBzZWxmLnZhbCkKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYudmFsWydfTV9oZWFkJ11bJ19NX25leHQnXSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICdlbXB0eSBfX2dudV9jeHg6OnNsaXN0JworICAgICAgICByZXR1cm4gJ19fZ251X2N4eDo6c2xpc3QnCisKK2NsYXNzIFN0ZFNsaXN0SXRlcmF0b3JQcmludGVyOgorICAgICJQcmludCBfX2dudV9jeHg6OnNsaXN0OjppdGVyYXRvciIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIG5vZGV0eXBlID0gZmluZF90eXBlKHNlbGYudmFsLnR5cGUsICdfTm9kZScpCisgICAgICAgIG5vZGV0eXBlID0gbm9kZXR5cGUuc3RyaXBfdHlwZWRlZnMoKS5wb2ludGVyKCkKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsWydfTV9ub2RlJ10uY2FzdChub2RldHlwZSkuZGVyZWZlcmVuY2UoKVsnX01fZGF0YSddCisKK2NsYXNzIFN0ZFZlY3RvclByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjp2ZWN0b3IiCisKKyAgICBjbGFzcyBfaXRlcmF0b3I6CisgICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgc3RhcnQsIGZpbmlzaCwgYml0dmVjKToKKyAgICAgICAgICAgIHNlbGYuYml0dmVjID0gYml0dmVjCisgICAgICAgICAgICBpZiBiaXR2ZWM6CisgICAgICAgICAgICAgICAgc2VsZi5pdGVtICAgPSBzdGFydFsnX01fcCddCisgICAgICAgICAgICAgICAgc2VsZi5zbyAgICAgPSBzdGFydFsnX01fb2Zmc2V0J10KKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaCA9IGZpbmlzaFsnX01fcCddCisgICAgICAgICAgICAgICAgc2VsZi5mbyAgICAgPSBmaW5pc2hbJ19NX29mZnNldCddCisgICAgICAgICAgICAgICAgaXR5cGUgPSBzZWxmLml0ZW0uZGVyZWZlcmVuY2UoKS50eXBlCisgICAgICAgICAgICAgICAgc2VsZi5pc2l6ZSA9IDggKiBpdHlwZS5zaXplb2YKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5pdGVtID0gc3RhcnQKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaCA9IGZpbmlzaAorICAgICAgICAgICAgc2VsZi5jb3VudCA9IDAKKworICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgY291bnQgPSBzZWxmLmNvdW50CisgICAgICAgICAgICBzZWxmLmNvdW50ID0gc2VsZi5jb3VudCArIDEKKyAgICAgICAgICAgIGlmIHNlbGYuYml0dmVjOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuaXRlbSA9PSBzZWxmLmZpbmlzaCBhbmQgc2VsZi5zbyA+PSBzZWxmLmZvOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgZWx0ID0gc2VsZi5pdGVtLmRlcmVmZXJlbmNlKCkKKyAgICAgICAgICAgICAgICBpZiBlbHQgJiAoMSA8PCBzZWxmLnNvKToKKyAgICAgICAgICAgICAgICAgICAgb2JpdCA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvYml0ID0gMAorICAgICAgICAgICAgICAgIHNlbGYuc28gPSBzZWxmLnNvICsgMQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc28gPj0gc2VsZi5pc2l6ZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtID0gc2VsZi5pdGVtICsgMQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNvID0gMAorICAgICAgICAgICAgICAgIHJldHVybiAoJ1slZF0nICUgY291bnQsIG9iaXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuaXRlbSA9PSBzZWxmLmZpbmlzaDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgICAgIGVsdCA9IHNlbGYuaXRlbS5kZXJlZmVyZW5jZSgpCisgICAgICAgICAgICAgICAgc2VsZi5pdGVtID0gc2VsZi5pdGVtICsgMQorICAgICAgICAgICAgICAgIHJldHVybiAoJ1slZF0nICUgY291bnQsIGVsdCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisgICAgICAgIHNlbGYuaXNfYm9vbCA9IHZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApLmNvZGUgID09IGdkYi5UWVBFX0NPREVfQk9PTAorCisgICAgZGVmIGNoaWxkcmVuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faXRlcmF0b3Ioc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fc3RhcnQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX2ZpbmlzaCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pc19ib29sKQorCisgICAgZGVmIHRvX3N0cmluZyhzZWxmKToKKyAgICAgICAgc3RhcnQgPSBzZWxmLnZhbFsnX01faW1wbCddWydfTV9zdGFydCddCisgICAgICAgIGZpbmlzaCA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX2ZpbmlzaCddCisgICAgICAgIGVuZCA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX2VuZF9vZl9zdG9yYWdlJ10KKyAgICAgICAgaWYgc2VsZi5pc19ib29sOgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLnZhbFsnX01faW1wbCddWydfTV9zdGFydCddWydfTV9wJ10KKyAgICAgICAgICAgIHNvICAgID0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fc3RhcnQnXVsnX01fb2Zmc2V0J10KKyAgICAgICAgICAgIGZpbmlzaCA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX2ZpbmlzaCddWydfTV9wJ10KKyAgICAgICAgICAgIGZvICAgICA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX2ZpbmlzaCddWydfTV9vZmZzZXQnXQorICAgICAgICAgICAgaXR5cGUgPSBzdGFydC5kZXJlZmVyZW5jZSgpLnR5cGUKKyAgICAgICAgICAgIGJsID0gOCAqIGl0eXBlLnNpemVvZgorICAgICAgICAgICAgbGVuZ3RoICAgPSAoYmwgLSBzbykgKyBibCAqICgoZmluaXNoIC0gc3RhcnQpIC0gMSkgKyBmbworICAgICAgICAgICAgY2FwYWNpdHkgPSBibCAqIChlbmQgLSBzdGFydCkKKyAgICAgICAgICAgIHJldHVybiAoJyVzPGJvb2w+IG9mIGxlbmd0aCAlZCwgY2FwYWNpdHkgJWQnCisgICAgICAgICAgICAgICAgICAgICUgKHNlbGYudHlwZW5hbWUsIGludCAobGVuZ3RoKSwgaW50IChjYXBhY2l0eSkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICgnJXMgb2YgbGVuZ3RoICVkLCBjYXBhY2l0eSAlZCcKKyAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi50eXBlbmFtZSwgaW50IChmaW5pc2ggLSBzdGFydCksIGludCAoZW5kIC0gc3RhcnQpKSkKKworICAgIGRlZiBkaXNwbGF5X2hpbnQoc2VsZik6CisgICAgICAgIHJldHVybiAnYXJyYXknCisKK2NsYXNzIFN0ZFZlY3Rvckl0ZXJhdG9yUHJpbnRlcjoKKyAgICAiUHJpbnQgc3RkOjp2ZWN0b3I6Oml0ZXJhdG9yIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgZGVmIHRvX3N0cmluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsWydfTV9jdXJyZW50J10uZGVyZWZlcmVuY2UoKQorCitjbGFzcyBTdGRUdXBsZVByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjp0dXBsZSIKKworICAgIGNsYXNzIF9pdGVyYXRvcjoKKyAgICAgICAgZGVmIF9faW5pdF9fIChzZWxmLCBoZWFkKToKKyAgICAgICAgICAgIHNlbGYuaGVhZCA9IGhlYWQKKworICAgICAgICAgICAgIyBTZXQgdGhlIGJhc2UgY2xhc3MgYXMgdGhlIGluaXRpYWwgaGVhZCBvZiB0aGUKKyAgICAgICAgICAgICMgdHVwbGUuCisgICAgICAgICAgICBub2RlcyA9IHNlbGYuaGVhZC50eXBlLmZpZWxkcyAoKQorICAgICAgICAgICAgaWYgbGVuIChub2RlcykgPT0gMToKKyAgICAgICAgICAgICAgICAjIFNldCB0aGUgYWN0dWFsIGhlYWQgdG8gdGhlIGZpcnN0IHBhaXIuCisgICAgICAgICAgICAgICAgc2VsZi5oZWFkICA9IHNlbGYuaGVhZC5jYXN0IChub2Rlc1swXS50eXBlKQorICAgICAgICAgICAgZWxpZiBsZW4gKG5vZGVzKSAhPSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJUb3Agb2YgdHVwbGUgdHJlZSBkb2VzIG5vdCBjb25zaXN0IG9mIGEgc2luZ2xlIG5vZGUuIgorICAgICAgICAgICAgc2VsZi5jb3VudCA9IDAKKworICAgICAgICBkZWYgX19pdGVyX18gKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgbmV4dCAoc2VsZik6CisgICAgICAgICAgICBub2RlcyA9IHNlbGYuaGVhZC50eXBlLmZpZWxkcyAoKQorICAgICAgICAgICAgIyBDaGVjayBmb3IgZnVydGhlciByZWN1cnNpb25zIGluIHRoZSBpbmhlcml0YW5jZSB0cmVlLgorICAgICAgICAgICAgaWYgbGVuIChub2RlcykgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhpcyBpdGVyYXRpb24gaGFzIGFuIGV4cGVjdGVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgIGlmIGxlbiAobm9kZXMpICE9IDI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIkNhbm5vdCBwYXJzZSBtb3JlIHRoYW4gMiBub2RlcyBpbiBhIHR1cGxlIHRyZWUuIgorCisgICAgICAgICAgICAjIC0gTGVmdCBub2RlIGlzIHRoZSBuZXh0IHJlY3Vyc2lvbiBwYXJlbnQuCisgICAgICAgICAgICAjIC0gUmlnaHQgbm9kZSBpcyB0aGUgYWN0dWFsIGNsYXNzIGNvbnRhaW5lZCBpbiB0aGUgdHVwbGUuCisKKyAgICAgICAgICAgICMgUHJvY2VzcyByaWdodCBub2RlLgorICAgICAgICAgICAgaW1wbCA9IHNlbGYuaGVhZC5jYXN0IChub2Rlc1sxXS50eXBlKQorCisgICAgICAgICAgICAjIFByb2Nlc3MgbGVmdCBub2RlIGFuZCBzZXQgaXQgYXMgaGVhZC4KKyAgICAgICAgICAgIHNlbGYuaGVhZCAgPSBzZWxmLmhlYWQuY2FzdCAobm9kZXNbMF0udHlwZSkKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorCisgICAgICAgICAgICAjIEZpbmFsbHksIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbi4gIElmIGl0IGlzCisgICAgICAgICAgICAjIHdyYXBwZWQgaW4gX01faGVhZF9pbXBsIHJldHVybiB0aGF0LCBvdGhlcndpc2UgcmV0dXJuCisgICAgICAgICAgICAjIHRoZSB2YWx1ZSAiYXMgaXMiLgorICAgICAgICAgICAgZmllbGRzID0gaW1wbC50eXBlLmZpZWxkcyAoKQorICAgICAgICAgICAgaWYgbGVuIChmaWVsZHMpIDwgMSBvciBmaWVsZHNbMF0ubmFtZSAhPSAiX01faGVhZF9pbXBsIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIHNlbGYuY291bnQsIGltcGwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAoJ1slZF0nICUgc2VsZi5jb3VudCwgaW1wbFsnX01faGVhZF9pbXBsJ10pCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgc2VsZi52YWwgPSB2YWw7CisKKyAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faXRlcmF0b3IgKHNlbGYudmFsKQorCisgICAgZGVmIHRvX3N0cmluZyAoc2VsZik6CisgICAgICAgIGlmIGxlbiAoc2VsZi52YWwudHlwZS5maWVsZHMgKCkpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJ2VtcHR5ICVzJyAlIChzZWxmLnR5cGVuYW1lKQorICAgICAgICByZXR1cm4gJyVzIGNvbnRhaW5pbmcnICUgKHNlbGYudHlwZW5hbWUpCisKK2NsYXNzIFN0ZFN0YWNrT3JRdWV1ZVByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjpzdGFjayBvciBzdGQ6OnF1ZXVlIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmlzdWFsaXplciA9IGdkYi5kZWZhdWx0X3Zpc3VhbGl6ZXIodmFsWydjJ10pCisKKyAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52aXN1YWxpemVyLmNoaWxkcmVuKCkKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzIHdyYXBwaW5nOiAlcycgJSAoc2VsZi50eXBlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmlzdWFsaXplci50b19zdHJpbmcoKSkKKworICAgIGRlZiBkaXNwbGF5X2hpbnQgKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyIChzZWxmLnZpc3VhbGl6ZXIsICdkaXNwbGF5X2hpbnQnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZpc3VhbGl6ZXIuZGlzcGxheV9oaW50ICgpCisgICAgICAgIHJldHVybiBOb25lCisKK2NsYXNzIFJidHJlZUl0ZXJhdG9yOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYnRyZWUpOgorICAgICAgICBzZWxmLnNpemUgPSByYnRyZWVbJ19NX3QnXVsnX01faW1wbCddWydfTV9ub2RlX2NvdW50J10KKyAgICAgICAgc2VsZi5ub2RlID0gcmJ0cmVlWydfTV90J11bJ19NX2ltcGwnXVsnX01faGVhZGVyJ11bJ19NX2xlZnQnXQorICAgICAgICBzZWxmLmNvdW50ID0gMAorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBpbnQgKHNlbGYuc2l6ZSkKKworICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvdW50ID09IHNlbGYuc2l6ZToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ub2RlCisgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorICAgICAgICBpZiBzZWxmLmNvdW50IDwgc2VsZi5zaXplOgorICAgICAgICAgICAgIyBDb21wdXRlIHRoZSBuZXh0IG5vZGUuCisgICAgICAgICAgICBub2RlID0gc2VsZi5ub2RlCisgICAgICAgICAgICBpZiBub2RlLmRlcmVmZXJlbmNlKClbJ19NX3JpZ2h0J106CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUuZGVyZWZlcmVuY2UoKVsnX01fcmlnaHQnXQorICAgICAgICAgICAgICAgIHdoaWxlIG5vZGUuZGVyZWZlcmVuY2UoKVsnX01fbGVmdCddOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5kZXJlZmVyZW5jZSgpWydfTV9sZWZ0J10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZS5kZXJlZmVyZW5jZSgpWydfTV9wYXJlbnQnXQorICAgICAgICAgICAgICAgIHdoaWxlIG5vZGUgPT0gcGFyZW50LmRlcmVmZXJlbmNlKClbJ19NX3JpZ2h0J106CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LmRlcmVmZXJlbmNlKClbJ19NX3BhcmVudCddCisgICAgICAgICAgICAgICAgaWYgbm9kZS5kZXJlZmVyZW5jZSgpWydfTV9yaWdodCddICE9IHBhcmVudDoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcmVudAorICAgICAgICAgICAgc2VsZi5ub2RlID0gbm9kZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyMgVGhpcyBpcyBhIHByZXR0eSBwcmludGVyIGZvciBzdGQ6Ol9SYl90cmVlX2l0ZXJhdG9yICh3aGljaCBpcworIyBzdGQ6Om1hcDo6aXRlcmF0b3IpLCBhbmQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgUmJ0cmVlSXRlcmF0b3IKKyMgY2xhc3MgYWJvdmUuCitjbGFzcyBTdGRSYnRyZWVJdGVyYXRvclByaW50ZXI6CisgICAgIlByaW50IHN0ZDo6bWFwOjppdGVyYXRvciIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgdHlwZW5hbWUgPSBzdHIoc2VsZi52YWwudHlwZS5zdHJpcF90eXBlZGVmcygpKSArICc6Ol9MaW5rX3R5cGUnCisgICAgICAgIG5vZGV0eXBlID0gZ2RiLmxvb2t1cF90eXBlKHR5cGVuYW1lKS5zdHJpcF90eXBlZGVmcygpCisgICAgICAgIHJldHVybiBzZWxmLnZhbC5jYXN0KG5vZGV0eXBlKS5kZXJlZmVyZW5jZSgpWydfTV92YWx1ZV9maWVsZCddCisKK2NsYXNzIFN0ZERlYnVnSXRlcmF0b3JQcmludGVyOgorICAgICJQcmludCBhIGRlYnVnIGVuYWJsZWQgdmVyc2lvbiBvZiBhbiBpdGVyYXRvciIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICAjIEp1c3Qgc3RyaXAgYXdheSB0aGUgZW5jYXBzdWxhdGluZyBfX2dudV9kZWJ1Zzo6X1NhZmVfaXRlcmF0b3IKKyAgICAjIGFuZCByZXR1cm4gdGhlIHdyYXBwZWQgaXRlcmF0b3IgdmFsdWUuCisgICAgZGVmIHRvX3N0cmluZyAoc2VsZik6CisgICAgICAgIGl0eXBlID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQorICAgICAgICByZXR1cm4gc2VsZi52YWxbJ19NX2N1cnJlbnQnXS5jYXN0KGl0eXBlKQorCitjbGFzcyBTdGRNYXBQcmludGVyOgorICAgICJQcmludCBhIHN0ZDo6bWFwIG9yIHN0ZDo6bXVsdGltYXAiCisKKyAgICAjIFR1cm4gYW4gUmJ0cmVlSXRlcmF0b3IgaW50byBhIHByZXR0eS1wcmludCBpdGVyYXRvci4KKyAgICBjbGFzcyBfaXRlcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJiaXRlciwgdHlwZSk6CisgICAgICAgICAgICBzZWxmLnJiaXRlciA9IHJiaXRlcgorICAgICAgICAgICAgc2VsZi5jb3VudCA9IDAKKyAgICAgICAgICAgIHNlbGYudHlwZSA9IHR5cGUKKworICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5jb3VudCAlIDIgPT0gMDoKKyAgICAgICAgICAgICAgICBuID0gc2VsZi5yYml0ZXIubmV4dCgpCisgICAgICAgICAgICAgICAgbiA9IG4uY2FzdChzZWxmLnR5cGUpLmRlcmVmZXJlbmNlKClbJ19NX3ZhbHVlX2ZpZWxkJ10KKyAgICAgICAgICAgICAgICBzZWxmLnBhaXIgPSBuCisgICAgICAgICAgICAgICAgaXRlbSA9IG5bJ2ZpcnN0J10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaXRlbSA9IHNlbGYucGFpclsnc2Vjb25kJ10KKyAgICAgICAgICAgIHJlc3VsdCA9ICgnWyVkXScgJSBzZWxmLmNvdW50LCBpdGVtKQorICAgICAgICAgICAgc2VsZi5jb3VudCA9IHNlbGYuY291bnQgKyAxCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzIHdpdGggJWQgZWxlbWVudHMnICUgKHNlbGYudHlwZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIChSYnRyZWVJdGVyYXRvciAoc2VsZi52YWwpKSkKKworICAgIGRlZiBjaGlsZHJlbiAoc2VsZik6CisgICAgICAgIHJlcF90eXBlID0gZmluZF90eXBlKHNlbGYudmFsLnR5cGUsICdfUmVwX3R5cGUnKQorICAgICAgICBub2RlID0gZmluZF90eXBlKHJlcF90eXBlLCAnX0xpbmtfdHlwZScpCisgICAgICAgIG5vZGUgPSBub2RlLnN0cmlwX3R5cGVkZWZzKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2l0ZXIgKFJidHJlZUl0ZXJhdG9yIChzZWxmLnZhbCksIG5vZGUpCisKKyAgICBkZWYgZGlzcGxheV9oaW50IChzZWxmKToKKyAgICAgICAgcmV0dXJuICdtYXAnCisKK2NsYXNzIFN0ZFNldFByaW50ZXI6CisgICAgIlByaW50IGEgc3RkOjpzZXQgb3Igc3RkOjptdWx0aXNldCIKKworICAgICMgVHVybiBhbiBSYnRyZWVJdGVyYXRvciBpbnRvIGEgcHJldHR5LXByaW50IGl0ZXJhdG9yLgorICAgIGNsYXNzIF9pdGVyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmJpdGVyLCB0eXBlKToKKyAgICAgICAgICAgIHNlbGYucmJpdGVyID0gcmJpdGVyCisgICAgICAgICAgICBzZWxmLmNvdW50ID0gMAorICAgICAgICAgICAgc2VsZi50eXBlID0gdHlwZQorCisgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICBpdGVtID0gc2VsZi5yYml0ZXIubmV4dCgpCisgICAgICAgICAgICBpdGVtID0gaXRlbS5jYXN0KHNlbGYudHlwZSkuZGVyZWZlcmVuY2UoKVsnX01fdmFsdWVfZmllbGQnXQorICAgICAgICAgICAgIyBGSVhNRTogdGhpcyBpcyB3ZWlyZCAuLi4gd2hhdCB0byBkbz8KKyAgICAgICAgICAgICMgTWF5YmUgYSAnc2V0JyBkaXNwbGF5IGhpbnQ/CisgICAgICAgICAgICByZXN1bHQgPSAoJ1slZF0nICUgc2VsZi5jb3VudCwgaXRlbSkKKyAgICAgICAgICAgIHNlbGYuY291bnQgPSBzZWxmLmNvdW50ICsgMQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgcmV0dXJuICclcyB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAoUmJ0cmVlSXRlcmF0b3IgKHNlbGYudmFsKSkpCisKKyAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgorICAgICAgICByZXBfdHlwZSA9IGZpbmRfdHlwZShzZWxmLnZhbC50eXBlLCAnX1JlcF90eXBlJykKKyAgICAgICAgbm9kZSA9IGZpbmRfdHlwZShyZXBfdHlwZSwgJ19MaW5rX3R5cGUnKQorICAgICAgICBub2RlID0gbm9kZS5zdHJpcF90eXBlZGVmcygpCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVyIChSYnRyZWVJdGVyYXRvciAoc2VsZi52YWwpLCBub2RlKQorCitjbGFzcyBTdGRCaXRzZXRQcmludGVyOgorICAgICJQcmludCBhIHN0ZDo6Yml0c2V0IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKyAgICAgICAgc2VsZi52YWwgPSB2YWwKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICAjIElmIHRlbXBsYXRlX2FyZ3VtZW50IGhhbmRsZWQgdmFsdWVzLCB3ZSBjb3VsZCBwcmludCB0aGUKKyAgICAgICAgIyBzaXplLiAgT3Igd2UgY291bGQgdXNlIGEgcmVnZXhwIG9uIHRoZSB0eXBlLgorICAgICAgICByZXR1cm4gJyVzJyAlIChzZWxmLnR5cGVuYW1lKQorCisgICAgZGVmIGNoaWxkcmVuIChzZWxmKToKKyAgICAgICAgd29yZHMgPSBzZWxmLnZhbFsnX01fdyddCisgICAgICAgIHd0eXBlID0gd29yZHMudHlwZQorCisgICAgICAgICMgVGhlIF9NX3cgbWVtYmVyIGNhbiBiZSBlaXRoZXIgYW4gdW5zaWduZWQgbG9uZywgb3IgYW4KKyAgICAgICAgIyBhcnJheS4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gdXNlZC4KKyAgICAgICAgIyBJZiBpdCBpcyBhIHNpbmdsZSBsb25nLCBjb252ZXJ0IHRvIGEgc2luZ2xlIGVsZW1lbnQgbGlzdC4KKyAgICAgICAgaWYgd3R5cGUuY29kZSA9PSBnZGIuVFlQRV9DT0RFX0FSUkFZOgorICAgICAgICAgICAgdHNpemUgPSB3dHlwZS50YXJnZXQgKCkuc2l6ZW9mCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3b3JkcyA9IFt3b3Jkc10KKyAgICAgICAgICAgIHRzaXplID0gd3R5cGUuc2l6ZW9mIAorCisgICAgICAgIG53b3JkcyA9IHd0eXBlLnNpemVvZiAvIHRzaXplCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGJ5dGUgPSAwCisgICAgICAgIHdoaWxlIGJ5dGUgPCBud29yZHM6CisgICAgICAgICAgICB3ID0gd29yZHNbYnl0ZV0KKyAgICAgICAgICAgIGJpdCA9IDAKKyAgICAgICAgICAgIHdoaWxlIHcgIT0gMDoKKyAgICAgICAgICAgICAgICBpZiAodyAmIDEpICE9IDA6CisgICAgICAgICAgICAgICAgICAgICMgQW5vdGhlciBzcG90IHdoZXJlIHdlIGNvdWxkIHVzZSAnc2V0Jz8KKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoJ1slZF0nICUgKGJ5dGUgKiB0c2l6ZSAqIDggKyBiaXQpLCAxKSkKKyAgICAgICAgICAgICAgICBiaXQgPSBiaXQgKyAxCisgICAgICAgICAgICAgICAgdyA9IHcgPj4gMQorICAgICAgICAgICAgYnl0ZSA9IGJ5dGUgKyAxCisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgU3RkRGVxdWVQcmludGVyOgorICAgICJQcmludCBhIHN0ZDo6ZGVxdWUiCisKKyAgICBjbGFzcyBfaXRlcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGUsIHN0YXJ0LCBlbmQsIGxhc3QsIGJ1ZmZlcl9zaXplKToKKyAgICAgICAgICAgIHNlbGYubm9kZSA9IG5vZGUKKyAgICAgICAgICAgIHNlbGYucCA9IHN0YXJ0CisgICAgICAgICAgICBzZWxmLmVuZCA9IGVuZAorICAgICAgICAgICAgc2VsZi5sYXN0ID0gbGFzdAorICAgICAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCisgICAgICAgICAgICBzZWxmLmNvdW50ID0gMAorCisgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnAgPT0gc2VsZi5sYXN0OgorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgICAgICAgICAgcmVzdWx0ID0gKCdbJWRdJyAlIHNlbGYuY291bnQsIHNlbGYucC5kZXJlZmVyZW5jZSgpKQorICAgICAgICAgICAgc2VsZi5jb3VudCA9IHNlbGYuY291bnQgKyAxCisKKyAgICAgICAgICAgICMgQWR2YW5jZSB0aGUgJ2N1cicgcG9pbnRlci4KKyAgICAgICAgICAgIHNlbGYucCA9IHNlbGYucCArIDEKKyAgICAgICAgICAgIGlmIHNlbGYucCA9PSBzZWxmLmVuZDoKKyAgICAgICAgICAgICAgICAjIElmIHdlIGdvdCB0byB0aGUgZW5kIG9mIHRoaXMgYnVja2V0LCBtb3ZlIHRvIHRoZQorICAgICAgICAgICAgICAgICMgbmV4dCBidWNrZXQuCisgICAgICAgICAgICAgICAgc2VsZi5ub2RlID0gc2VsZi5ub2RlICsgMQorICAgICAgICAgICAgICAgIHNlbGYucCA9IHNlbGYubm9kZVswXQorICAgICAgICAgICAgICAgIHNlbGYuZW5kID0gc2VsZi5wICsgc2VsZi5idWZmZXJfc2l6ZQorCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudHlwZW5hbWUgPSB0eXBlbmFtZQorICAgICAgICBzZWxmLnZhbCA9IHZhbAorICAgICAgICBzZWxmLmVsdHR5cGUgPSB2YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQorICAgICAgICBzaXplID0gc2VsZi5lbHR0eXBlLnNpemVvZgorICAgICAgICBpZiBzaXplIDwgNTEyOgorICAgICAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IGludCAoNTEyIC8gc2l6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyX3NpemUgPSAxCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICBzdGFydCA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX3N0YXJ0J10KKyAgICAgICAgZW5kID0gc2VsZi52YWxbJ19NX2ltcGwnXVsnX01fZmluaXNoJ10KKworICAgICAgICBkZWx0YV9uID0gZW5kWydfTV9ub2RlJ10gLSBzdGFydFsnX01fbm9kZSddIC0gMQorICAgICAgICBkZWx0YV9zID0gc3RhcnRbJ19NX2xhc3QnXSAtIHN0YXJ0WydfTV9jdXInXQorICAgICAgICBkZWx0YV9lID0gZW5kWydfTV9jdXInXSAtIGVuZFsnX01fZmlyc3QnXQorCisgICAgICAgIHNpemUgPSBzZWxmLmJ1ZmZlcl9zaXplICogZGVsdGFfbiArIGRlbHRhX3MgKyBkZWx0YV9lCisKKyAgICAgICAgcmV0dXJuICclcyB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLCBsb25nIChzaXplKSkKKworICAgIGRlZiBjaGlsZHJlbihzZWxmKToKKyAgICAgICAgc3RhcnQgPSBzZWxmLnZhbFsnX01faW1wbCddWydfTV9zdGFydCddCisgICAgICAgIGVuZCA9IHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX2ZpbmlzaCddCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVyKHN0YXJ0WydfTV9ub2RlJ10sIHN0YXJ0WydfTV9jdXInXSwgc3RhcnRbJ19NX2xhc3QnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kWydfTV9jdXInXSwgc2VsZi5idWZmZXJfc2l6ZSkKKworICAgIGRlZiBkaXNwbGF5X2hpbnQgKHNlbGYpOgorICAgICAgICByZXR1cm4gJ2FycmF5JworCitjbGFzcyBTdGREZXF1ZUl0ZXJhdG9yUHJpbnRlcjoKKyAgICAiUHJpbnQgc3RkOjpkZXF1ZTo6aXRlcmF0b3IiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWxbJ19NX2N1ciddLmRlcmVmZXJlbmNlKCkKKworY2xhc3MgU3RkU3RyaW5nUHJpbnRlcjoKKyAgICAiUHJpbnQgYSBzdGQ6OmJhc2ljX3N0cmluZyBvZiBzb21lIGtpbmQiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6CisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSAmc3RyaW5nIHdvcmtzLCB0b28uCisgICAgICAgIHR5cGUgPSBzZWxmLnZhbC50eXBlCisgICAgICAgIGlmIHR5cGUuY29kZSA9PSBnZGIuVFlQRV9DT0RFX1JFRjoKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlLnRhcmdldCAoKQorCisgICAgICAgICMgQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBzbyB0aGF0IHRvX3N0cmluZyByZXR1cm5zCisgICAgICAgICMgdGhlIHN0cmluZyBhY2NvcmRpbmcgdG8gbGVuZ3RoLCBub3QgYWNjb3JkaW5nIHRvIGZpcnN0IG51bGwKKyAgICAgICAgIyBlbmNvdW50ZXJlZC4KKyAgICAgICAgcHRyID0gc2VsZi52YWwgWydfTV9kYXRhcGx1cyddWydfTV9wJ10KKyAgICAgICAgcmVhbHR5cGUgPSB0eXBlLnVucXVhbGlmaWVkICgpLnN0cmlwX3R5cGVkZWZzICgpCisgICAgICAgIHJlcHR5cGUgPSBnZGIubG9va3VwX3R5cGUgKHN0ciAocmVhbHR5cGUpICsgJzo6X1JlcCcpLnBvaW50ZXIgKCkKKyAgICAgICAgaGVhZGVyID0gcHRyLmNhc3QocmVwdHlwZSkgLSAxCisgICAgICAgIGxlbiA9IGhlYWRlci5kZXJlZmVyZW5jZSAoKVsnX01fbGVuZ3RoJ10KKyAgICAgICAgaWYgaGFzYXR0cihwdHIsICJsYXp5X3N0cmluZyIpOgorICAgICAgICAgICAgcmV0dXJuIHB0ci5sYXp5X3N0cmluZyAobGVuZ3RoID0gbGVuKQorICAgICAgICByZXR1cm4gcHRyLnN0cmluZyAobGVuZ3RoID0gbGVuKQorCisgICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6CisgICAgICAgIHJldHVybiAnc3RyaW5nJworCitjbGFzcyBUcjFIYXNodGFibGVJdGVyYXRvcjoKKyAgICBkZWYgX19pbml0X18gKHNlbGYsIGhhc2gpOgorICAgICAgICBzZWxmLm5vZGUgPSBoYXNoWydfTV9iYmVnaW4nXVsnX01fbm9kZSddWydfTV9ueHQnXQorICAgICAgICBzZWxmLm5vZGVfdHlwZSA9IGZpbmRfdHlwZShoYXNoLnR5cGUsICdfX25vZGVfdHlwZScpLnBvaW50ZXIoKQorCisgICAgZGVmIF9faXRlcl9fIChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBuZXh0IChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5ub2RlID09IDA6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIG5vZGUgPSBzZWxmLm5vZGUuY2FzdChzZWxmLm5vZGVfdHlwZSkKKyAgICAgICAgcmVzdWx0ID0gbm9kZS5kZXJlZmVyZW5jZSgpWydfTV92J10KKyAgICAgICAgc2VsZi5ub2RlID0gbm9kZS5kZXJlZmVyZW5jZSgpWydfTV9ueHQnXQorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIFRyMVVub3JkZXJlZFNldFByaW50ZXI6CisgICAgIlByaW50IGEgdHIxOjp1bm9yZGVyZWRfc2V0IgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgaGFzaHRhYmxlIChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50eXBlbmFtZS5zdGFydHN3aXRoKCdzdGQ6OnRyMScpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsCisgICAgICAgIHJldHVybiBzZWxmLnZhbFsnX01faCddCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgcmV0dXJuICclcyB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLCBzZWxmLmhhc2h0YWJsZSgpWydfTV9lbGVtZW50X2NvdW50J10pCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZvcm1hdF9jb3VudCAoaSk6CisgICAgICAgIHJldHVybiAnWyVkXScgJSBpCisKKyAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgorICAgICAgICBjb3VudGVyID0gaXRlcnRvb2xzLmltYXAgKHNlbGYuZm9ybWF0X2NvdW50LCBpdGVydG9vbHMuY291bnQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXJ0b29scy5pemlwIChjb3VudGVyLCBUcjFIYXNodGFibGVJdGVyYXRvciAoc2VsZi5oYXNodGFibGUoKSkpCisKK2NsYXNzIFRyMVVub3JkZXJlZE1hcFByaW50ZXI6CisgICAgIlByaW50IGEgdHIxOjp1bm9yZGVyZWRfbWFwIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKKyAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgaGFzaHRhYmxlIChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50eXBlbmFtZS5zdGFydHN3aXRoKCdzdGQ6OnRyMScpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsCisgICAgICAgIHJldHVybiBzZWxmLnZhbFsnX01faCddCisKKyAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKKyAgICAgICAgcmV0dXJuICclcyB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLCBzZWxmLmhhc2h0YWJsZSgpWydfTV9lbGVtZW50X2NvdW50J10pCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZsYXR0ZW4gKGxpc3QpOgorICAgICAgICBmb3IgZWx0IGluIGxpc3Q6CisgICAgICAgICAgICBmb3IgaSBpbiBlbHQ6CisgICAgICAgICAgICAgICAgeWllbGQgaQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmb3JtYXRfb25lIChlbHQpOgorICAgICAgICByZXR1cm4gKGVsdFsnZmlyc3QnXSwgZWx0WydzZWNvbmQnXSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZm9ybWF0X2NvdW50IChpKToKKyAgICAgICAgcmV0dXJuICdbJWRdJyAlIGkKKworICAgIGRlZiBjaGlsZHJlbiAoc2VsZik6CisgICAgICAgIGNvdW50ZXIgPSBpdGVydG9vbHMuaW1hcCAoc2VsZi5mb3JtYXRfY291bnQsIGl0ZXJ0b29scy5jb3VudCgpKQorICAgICAgICAjIE1hcCBvdmVyIHRoZSBoYXNoIHRhYmxlIGFuZCBmbGF0dGVuIHRoZSByZXN1bHQuCisgICAgICAgIGRhdGEgPSBzZWxmLmZsYXR0ZW4gKGl0ZXJ0b29scy5pbWFwIChzZWxmLmZvcm1hdF9vbmUsIFRyMUhhc2h0YWJsZUl0ZXJhdG9yIChzZWxmLmhhc2h0YWJsZSgpKSkpCisgICAgICAgICMgWmlwIHRoZSB0d28gaXRlcmF0b3JzIHRvZ2V0aGVyLgorICAgICAgICByZXR1cm4gaXRlcnRvb2xzLml6aXAgKGNvdW50ZXIsIGRhdGEpCisKKyAgICBkZWYgZGlzcGxheV9oaW50IChzZWxmKToKKyAgICAgICAgcmV0dXJuICdtYXAnCisKK2NsYXNzIFN0ZEZvcndhcmRMaXN0UHJpbnRlcjoKKyAgICAiUHJpbnQgYSBzdGQ6OmZvcndhcmRfbGlzdCIKKworICAgIGNsYXNzIF9pdGVyYXRvcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vZGV0eXBlLCBoZWFkKToKKyAgICAgICAgICAgIHNlbGYubm9kZXR5cGUgPSBub2RldHlwZQorICAgICAgICAgICAgc2VsZi5iYXNlID0gaGVhZFsnX01fbmV4dCddCisgICAgICAgICAgICBzZWxmLmNvdW50ID0gMAorCisgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLmJhc2UgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICBlbHQgPSBzZWxmLmJhc2UuY2FzdChzZWxmLm5vZGV0eXBlKS5kZXJlZmVyZW5jZSgpCisgICAgICAgICAgICBzZWxmLmJhc2UgPSBlbHRbJ19NX25leHQnXQorICAgICAgICAgICAgY291bnQgPSBzZWxmLmNvdW50CisgICAgICAgICAgICBzZWxmLmNvdW50ID0gc2VsZi5jb3VudCArIDEKKyAgICAgICAgICAgIHZhbHB0ciA9IGVsdFsnX01fc3RvcmFnZSddLmFkZHJlc3MKKyAgICAgICAgICAgIHZhbHB0ciA9IHZhbHB0ci5jYXN0KGVsdC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApLnBvaW50ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiAoJ1slZF0nICUgY291bnQsIHZhbHB0ci5kZXJlZmVyZW5jZSgpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKKworICAgIGRlZiBjaGlsZHJlbihzZWxmKToKKyAgICAgICAgbm9kZXR5cGUgPSBmaW5kX3R5cGUoc2VsZi52YWwudHlwZSwgJ19Ob2RlJykKKyAgICAgICAgbm9kZXR5cGUgPSBub2RldHlwZS5zdHJpcF90eXBlZGVmcygpLnBvaW50ZXIoKQorICAgICAgICByZXR1cm4gc2VsZi5faXRlcmF0b3Iobm9kZXR5cGUsIHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX2hlYWQnXSkKKworICAgIGRlZiB0b19zdHJpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYudmFsWydfTV9pbXBsJ11bJ19NX2hlYWQnXVsnX01fbmV4dCddID09IDA6CisgICAgICAgICAgICByZXR1cm4gJ2VtcHR5ICVzJyAlIChzZWxmLnR5cGVuYW1lKQorICAgICAgICByZXR1cm4gJyVzJyAlIChzZWxmLnR5cGVuYW1lKQorCisKKyMgQSAicmVndWxhciBleHByZXNzaW9uIiBwcmludGVyIHdoaWNoIGNvbmZvcm1zIHRvIHRoZQorIyAiU3ViUHJldHR5UHJpbnRlciIgcHJvdG9jb2wgZnJvbSBnZGIucHJpbnRpbmcuCitjbGFzcyBSeFByaW50ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZnVuY3Rpb24pOgorICAgICAgICBzdXBlcihSeFByaW50ZXIsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKyAgICAgICAgc2VsZi5lbmFibGVkID0gVHJ1ZQorCisgICAgZGVmIGludm9rZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmVuYWJsZWQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5mdW5jdGlvbihzZWxmLm5hbWUsIHZhbHVlKQorCisjIEEgcHJldHR5LXByaW50ZXIgdGhhdCBjb25mb3JtcyB0byB0aGUgIlByZXR0eVByaW50ZXIiIHByb3RvY29sIGZyb20KKyMgZ2RiLnByaW50aW5nLiAgSXQgY2FuIGFsc28gYmUgdXNlZCBkaXJlY3RseSBhcyBhbiBvbGQtc3R5bGUgcHJpbnRlci4KK2NsYXNzIFByaW50ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHN1cGVyKFByaW50ZXIsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnN1YnByaW50ZXJzID0gW10KKyAgICAgICAgc2VsZi5sb29rdXAgPSB7fQorICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisgICAgICAgIHNlbGYuY29tcGlsZWRfcnggPSByZS5jb21waWxlKCdeKFthLXpBLVowLTlfOl0rKTwuKj4kJykKKworICAgIGRlZiBhZGQoc2VsZiwgbmFtZSwgZnVuY3Rpb24pOgorICAgICAgICAjIEEgc21hbGwgc2FuaXR5IGNoZWNrLgorICAgICAgICAjIEZJWE1FCisgICAgICAgIGlmIG5vdCBzZWxmLmNvbXBpbGVkX3J4Lm1hdGNoKG5hbWUgKyAnPD4nKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdsaWJzdGRjKysgcHJvZ3JhbW1pbmcgZXJyb3I6ICIlcyIgZG9lcyBub3QgbWF0Y2gnICUgbmFtZQorICAgICAgICBwcmludGVyID0gUnhQcmludGVyKG5hbWUsIGZ1bmN0aW9uKQorICAgICAgICBzZWxmLnN1YnByaW50ZXJzLmFwcGVuZChwcmludGVyKQorICAgICAgICBzZWxmLmxvb2t1cFtuYW1lXSA9IHByaW50ZXIKKworICAgICMgQWRkIGEgbmFtZSB1c2luZyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTi4KKyAgICBkZWYgYWRkX3ZlcnNpb24oc2VsZiwgYmFzZSwgbmFtZSwgZnVuY3Rpb24pOgorICAgICAgICBzZWxmLmFkZChiYXNlICsgbmFtZSwgZnVuY3Rpb24pCisgICAgICAgIHNlbGYuYWRkKGJhc2UgKyAnX183OjonICsgbmFtZSwgZnVuY3Rpb24pCisKKyAgICAjIEFkZCBhIG5hbWUgdXNpbmcgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUi4KKyAgICBkZWYgYWRkX2NvbnRhaW5lcihzZWxmLCBiYXNlLCBuYW1lLCBmdW5jdGlvbik6CisgICAgICAgIHNlbGYuYWRkX3ZlcnNpb24oYmFzZSwgbmFtZSwgZnVuY3Rpb24pCisgICAgICAgIHNlbGYuYWRkX3ZlcnNpb24oYmFzZSArICdfX2N4eDE5OTg6OicsIG5hbWUsIGZ1bmN0aW9uKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRfYmFzaWNfdHlwZSh0eXBlKToKKyAgICAgICAgIyBJZiBpdCBwb2ludHMgdG8gYSByZWZlcmVuY2UsIGdldCB0aGUgcmVmZXJlbmNlLgorICAgICAgICBpZiB0eXBlLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9SRUY6CisgICAgICAgICAgICB0eXBlID0gdHlwZS50YXJnZXQgKCkKKworICAgICAgICAjIEdldCB0aGUgdW5xdWFsaWZpZWQgdHlwZSwgc3RyaXBwZWQgb2YgdHlwZWRlZnMuCisgICAgICAgIHR5cGUgPSB0eXBlLnVucXVhbGlmaWVkICgpLnN0cmlwX3R5cGVkZWZzICgpCisKKyAgICAgICAgcmV0dXJuIHR5cGUudGFnCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgdmFsKToKKyAgICAgICAgdHlwZW5hbWUgPSBzZWxmLmdldF9iYXNpY190eXBlKHZhbC50eXBlKQorICAgICAgICBpZiBub3QgdHlwZW5hbWU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgQWxsIHRoZSB0eXBlcyB3ZSBtYXRjaCBhcmUgdGVtcGxhdGUgdHlwZXMsIHNvIHdlIGNhbiB1c2UgYQorICAgICAgICAjIGRpY3Rpb25hcnkuCisgICAgICAgIG1hdGNoID0gc2VsZi5jb21waWxlZF9yeC5tYXRjaCh0eXBlbmFtZSkKKyAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBiYXNlbmFtZSA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIGJhc2VuYW1lIGluIHNlbGYubG9va3VwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9va3VwW2Jhc2VuYW1lXS5pbnZva2UodmFsKQorCisgICAgICAgICMgQ2Fubm90IGZpbmQgYSBwcmV0dHkgcHJpbnRlci4gIFJldHVybiBOb25lLgorICAgICAgICByZXR1cm4gTm9uZQorCitsaWJzdGRjeHhfcHJpbnRlciA9IE5vbmUKKworY2xhc3MgRmlsdGVyaW5nVHlwZVByaW50ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF0Y2gsIG5hbWUpOgorICAgICAgICBzZWxmLm1hdGNoID0gbWF0Y2gKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisKKyAgICBjbGFzcyBfcmVjb2duaXplcihvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWF0Y2gsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5tYXRjaCA9IG1hdGNoCisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBzZWxmLnR5cGVfb2JqID0gTm9uZQorCisgICAgICAgIGRlZiByZWNvZ25pemUoc2VsZiwgdHlwZV9vYmopOgorICAgICAgICAgICAgaWYgdHlwZV9vYmoudGFnIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgaWYgc2VsZi50eXBlX29iaiBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLm1hdGNoIGluIHR5cGVfb2JqLnRhZzoKKyAgICAgICAgICAgICAgICAgICAgIyBGaWx0ZXIgZGlkbid0IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50eXBlX29iaiA9IGdkYi5sb29rdXBfdHlwZShzZWxmLm5hbWUpLnN0cmlwX3R5cGVkZWZzKCkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIHNlbGYudHlwZV9vYmogPT0gdHlwZV9vYmo6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpbnN0YW50aWF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlY29nbml6ZXIoc2VsZi5tYXRjaCwgc2VsZi5uYW1lKQorCitkZWYgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCBtYXRjaCwgbmFtZSk6CisgICAgcHJpbnRlciA9IEZpbHRlcmluZ1R5cGVQcmludGVyKG1hdGNoLCAnc3RkOjonICsgbmFtZSkKKyAgICBnZGIudHlwZXMucmVnaXN0ZXJfdHlwZV9wcmludGVyKG9iaiwgcHJpbnRlcikKKworZGVmIHJlZ2lzdGVyX3R5cGVfcHJpbnRlcnMob2JqKToKKyAgICBnbG9iYWwgX3VzZV90eXBlX3ByaW50aW5nCisKKyAgICBpZiBub3QgX3VzZV90eXBlX3ByaW50aW5nOgorICAgICAgICByZXR1cm4KKworICAgIGZvciBwZnggaW4gKCcnLCAndycpOgorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdiYXNpY19zdHJpbmcnLCBwZnggKyAnc3RyaW5nJykKKyAgICAgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnYmFzaWNfaW9zJywgcGZ4ICsgJ2lvcycpCisgICAgICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ2Jhc2ljX3N0cmVhbWJ1ZicsIHBmeCArICdzdHJlYW1idWYnKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdiYXNpY19pc3RyZWFtJywgcGZ4ICsgJ2lzdHJlYW0nKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdiYXNpY19vc3RyZWFtJywgcGZ4ICsgJ29zdHJlYW0nKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdiYXNpY19pb3N0cmVhbScsIHBmeCArICdpb3N0cmVhbScpCisgICAgICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ2Jhc2ljX3N0cmluZ2J1ZicsIHBmeCArICdzdHJpbmdidWYnKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdiYXNpY19pc3RyaW5nc3RyZWFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBmeCArICdpc3RyaW5nc3RyZWFtJykKKyAgICAgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnYmFzaWNfb3N0cmluZ3N0cmVhbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZnggKyAnb3N0cmluZ3N0cmVhbScpCisgICAgICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ2Jhc2ljX3N0cmluZ3N0cmVhbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZnggKyAnc3RyaW5nc3RyZWFtJykKKyAgICAgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnYmFzaWNfZmlsZWJ1ZicsIHBmeCArICdmaWxlYnVmJykKKyAgICAgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnYmFzaWNfaWZzdHJlYW0nLCBwZnggKyAnaWZzdHJlYW0nKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdiYXNpY19vZnN0cmVhbScsIHBmeCArICdvZnN0cmVhbScpCisgICAgICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ2Jhc2ljX2ZzdHJlYW0nLCBwZnggKyAnZnN0cmVhbScpCisgICAgICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ2Jhc2ljX3JlZ2V4JywgcGZ4ICsgJ3JlZ2V4JykKKyAgICAgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnc3ViX21hdGNoJywgcGZ4ICsgJ2NzdWJfbWF0Y2gnKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdzdWJfbWF0Y2gnLCBwZnggKyAnc3N1Yl9tYXRjaCcpCisgICAgICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ21hdGNoX3Jlc3VsdHMnLCBwZnggKyAnY21hdGNoJykKKyAgICAgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnbWF0Y2hfcmVzdWx0cycsIHBmeCArICdzbWF0Y2gnKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdyZWdleF9pdGVyYXRvcicsIHBmeCArICdjcmVnZXhfaXRlcmF0b3InKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdyZWdleF9pdGVyYXRvcicsIHBmeCArICdzcmVnZXhfaXRlcmF0b3InKQorICAgICAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdyZWdleF90b2tlbl9pdGVyYXRvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZnggKyAnY3JlZ2V4X3Rva2VuX2l0ZXJhdG9yJykKKyAgICAgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAncmVnZXhfdG9rZW5faXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZ4ICsgJ3NyZWdleF90b2tlbl9pdGVyYXRvcicpCisKKyAgICAjIE5vdGUgdGhhdCB3ZSBjYW4ndCBoYXZlIGEgcHJpbnRlciBmb3Igc3RkOjp3c3RyZWFtcG9zLCBiZWNhdXNlCisgICAgIyBpdCBzaGFyZXMgdGhlIHNhbWUgdW5kZXJseWluZyB0eXBlIGFzIHN0ZDo6c3RyZWFtcG9zLgorICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ2Zwb3MnLCAnc3RyZWFtcG9zJykKKyAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdiYXNpY19zdHJpbmcnLCAndTE2c3RyaW5nJykKKyAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdiYXNpY19zdHJpbmcnLCAndTMyc3RyaW5nJykKKworICAgIGZvciBkdXIgaW4gKCduYW5vc2Vjb25kcycsICdtaWNyb3NlY29uZHMnLCAnbWlsbGlzZWNvbmRzJywKKyAgICAgICAgICAgICAgICAnc2Vjb25kcycsICdtaW51dGVzJywgJ2hvdXJzJyk6CisgICAgICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ2R1cmF0aW9uJywgZHVyKQorCisgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnbGluZWFyX2NvbmdydWVudGlhbF9lbmdpbmUnLCAnbWluc3RkX3JhbmQwJykKKyAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdsaW5lYXJfY29uZ3J1ZW50aWFsX2VuZ2luZScsICdtaW5zdGRfcmFuZCcpCisgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUnLCAnbXQxOTkzNycpCisgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnbWVyc2VubmVfdHdpc3Rlcl9lbmdpbmUnLCAnbXQxOTkzN182NCcpCisgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUnLCAncmFubHV4MjRfYmFzZScpCisgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnc3VidHJhY3Rfd2l0aF9jYXJyeV9lbmdpbmUnLCAncmFubHV4NDhfYmFzZScpCisgICAgYWRkX29uZV90eXBlX3ByaW50ZXIob2JqLCAnZGlzY2FyZF9ibG9ja19lbmdpbmUnLCAncmFubHV4MjQnKQorICAgIGFkZF9vbmVfdHlwZV9wcmludGVyKG9iaiwgJ2Rpc2NhcmRfYmxvY2tfZW5naW5lJywgJ3Jhbmx1eDQ4JykKKyAgICBhZGRfb25lX3R5cGVfcHJpbnRlcihvYmosICdzaHVmZmxlX29yZGVyX2VuZ2luZScsICdrbnV0aF9iJykKKworZGVmIHJlZ2lzdGVyX2xpYnN0ZGN4eF9wcmludGVycyAob2JqKToKKyAgICAiUmVnaXN0ZXIgbGlic3RkYysrIHByZXR0eS1wcmludGVycyB3aXRoIG9iamZpbGUgT2JqLiIKKworICAgIGdsb2JhbCBfdXNlX2dkYl9wcAorICAgIGdsb2JhbCBsaWJzdGRjeHhfcHJpbnRlcgorCisgICAgaWYgX3VzZV9nZGJfcHA6CisgICAgICAgIGdkYi5wcmludGluZy5yZWdpc3Rlcl9wcmV0dHlfcHJpbnRlcihvYmosIGxpYnN0ZGN4eF9wcmludGVyKQorICAgIGVsc2U6CisgICAgICAgIGlmIG9iaiBpcyBOb25lOgorICAgICAgICAgICAgb2JqID0gZ2RiCisgICAgICAgIG9iai5wcmV0dHlfcHJpbnRlcnMuYXBwZW5kKGxpYnN0ZGN4eF9wcmludGVyKQorCisgICAgcmVnaXN0ZXJfdHlwZV9wcmludGVycyhvYmopCisKK2RlZiBidWlsZF9saWJzdGRjeHhfZGljdGlvbmFyeSAoKToKKyAgICBnbG9iYWwgbGlic3RkY3h4X3ByaW50ZXIKKworICAgIGxpYnN0ZGN4eF9wcmludGVyID0gUHJpbnRlcigibGlic3RkYysrLXY2IikKKworICAgICMgRm9yIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OLgorICAgIHZlcnMgPSAnKF9fNzo6KT8nCisgICAgIyBGb3IgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0NPTlRBSU5FUi4KKyAgICBjb250YWluZXIgPSAnKF9fY3h4MTk5ODo6JyArIHZlcnMgKyAnKT8nCisKKyAgICAjIGxpYnN0ZGMrKyBvYmplY3RzIHJlcXVpcmluZyBwcmV0dHktcHJpbnRpbmcuCisgICAgIyBJbiBvcmRlciBmcm9tOgorICAgICMgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYysrL2xhdGVzdC1kb3h5Z2VuL2EwMTg0Ny5odG1sCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX3ZlcnNpb24oJ3N0ZDo6JywgJ2Jhc2ljX3N0cmluZycsIFN0ZFN0cmluZ1ByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX2NvbnRhaW5lcignc3RkOjonLCAnYml0c2V0JywgU3RkQml0c2V0UHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICdkZXF1ZScsIFN0ZERlcXVlUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICdsaXN0JywgU3RkTGlzdFByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX2NvbnRhaW5lcignc3RkOjonLCAnbWFwJywgU3RkTWFwUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICdtdWx0aW1hcCcsIFN0ZE1hcFByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX2NvbnRhaW5lcignc3RkOjonLCAnbXVsdGlzZXQnLCBTdGRTZXRQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdzdGQ6OicsICdwcmlvcml0eV9xdWV1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RkU3RhY2tPclF1ZXVlUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfdmVyc2lvbignc3RkOjonLCAncXVldWUnLCBTdGRTdGFja09yUXVldWVQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdzdGQ6OicsICd0dXBsZScsIFN0ZFR1cGxlUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICdzZXQnLCBTdGRTZXRQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdzdGQ6OicsICdzdGFjaycsIFN0ZFN0YWNrT3JRdWV1ZVByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX3ZlcnNpb24oJ3N0ZDo6JywgJ3VuaXF1ZV9wdHInLCBVbmlxdWVQb2ludGVyUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICd2ZWN0b3InLCBTdGRWZWN0b3JQcmludGVyKQorICAgICMgdmVjdG9yPGJvb2w+CisKKyAgICAjIFByaW50ZXIgcmVnaXN0cmF0aW9ucyBmb3IgY2xhc3NlcyBjb21waWxlZCB3aXRoIC1EX0dMSUJDWFhfREVCVUcuCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6OmJpdHNldCcsIFN0ZEJpdHNldFByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6OmRlcXVlJywgU3RkRGVxdWVQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZCgnc3RkOjpfX2RlYnVnOjpsaXN0JywgU3RkTGlzdFByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6Om1hcCcsIFN0ZE1hcFByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6Om11bHRpbWFwJywgU3RkTWFwUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGQoJ3N0ZDo6X19kZWJ1Zzo6bXVsdGlzZXQnLCBTdGRTZXRQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZCgnc3RkOjpfX2RlYnVnOjpwcmlvcml0eV9xdWV1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZFN0YWNrT3JRdWV1ZVByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6OnF1ZXVlJywgU3RkU3RhY2tPclF1ZXVlUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGQoJ3N0ZDo6X19kZWJ1Zzo6c2V0JywgU3RkU2V0UHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGQoJ3N0ZDo6X19kZWJ1Zzo6c3RhY2snLCBTdGRTdGFja09yUXVldWVQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZCgnc3RkOjpfX2RlYnVnOjp1bmlxdWVfcHRyJywgVW5pcXVlUG9pbnRlclByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6OnZlY3RvcicsIFN0ZFZlY3RvclByaW50ZXIpCisKKyAgICAjIFRoZXNlIGFyZSB0aGUgVFIxIGFuZCBDKysweCBwcmludGVycy4KKyAgICAjIEZvciBhcnJheSAtIHRoZSBkZWZhdWx0IEdEQiBwcmV0dHktcHJpbnRlciBzZWVtcyByZWFzb25hYmxlLgorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdzdGQ6OicsICdzaGFyZWRfcHRyJywgU2hhcmVkUG9pbnRlclByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX3ZlcnNpb24oJ3N0ZDo6JywgJ3dlYWtfcHRyJywgU2hhcmVkUG9pbnRlclByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX2NvbnRhaW5lcignc3RkOjonLCAndW5vcmRlcmVkX21hcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcjFVbm9yZGVyZWRNYXBQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF9jb250YWluZXIoJ3N0ZDo6JywgJ3Vub3JkZXJlZF9zZXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHIxVW5vcmRlcmVkU2V0UHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICd1bm9yZGVyZWRfbXVsdGltYXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHIxVW5vcmRlcmVkTWFwUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICd1bm9yZGVyZWRfbXVsdGlzZXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHIxVW5vcmRlcmVkU2V0UHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICdmb3J3YXJkX2xpc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RkRm9yd2FyZExpc3RQcmludGVyKQorCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX3ZlcnNpb24oJ3N0ZDo6dHIxOjonLCAnc2hhcmVkX3B0cicsIFNoYXJlZFBvaW50ZXJQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdzdGQ6OnRyMTo6JywgJ3dlYWtfcHRyJywgU2hhcmVkUG9pbnRlclByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX3ZlcnNpb24oJ3N0ZDo6dHIxOjonLCAndW5vcmRlcmVkX21hcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHIxVW5vcmRlcmVkTWFwUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfdmVyc2lvbignc3RkOjp0cjE6OicsICd1bm9yZGVyZWRfc2V0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcjFVbm9yZGVyZWRTZXRQcmludGVyKQorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdzdGQ6OnRyMTo6JywgJ3Vub3JkZXJlZF9tdWx0aW1hcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHIxVW5vcmRlcmVkTWFwUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfdmVyc2lvbignc3RkOjp0cjE6OicsICd1bm9yZGVyZWRfbXVsdGlzZXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyMVVub3JkZXJlZFNldFByaW50ZXIpCisKKyAgICAjIFRoZXNlIGFyZSB0aGUgQysrMHggcHJpbnRlciByZWdpc3RyYXRpb25zIGZvciAtRF9HTElCQ1hYX0RFQlVHIGNhc2VzLgorICAgICMgVGhlIHRyMSBuYW1lc3BhY2UgcHJpbnRlcnMgZG8gbm90IHNlZW0gdG8gaGF2ZSBhbnkgZGVidWcKKyAgICAjIGVxdWl2YWxlbnRzLCBzbyBkbyBubyByZWdpc3RlciB0aGVtLgorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZCgnc3RkOjpfX2RlYnVnOjp1bm9yZGVyZWRfbWFwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVHIxVW5vcmRlcmVkTWFwUHJpbnRlcikKKyAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGQoJ3N0ZDo6X19kZWJ1Zzo6dW5vcmRlcmVkX3NldCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyMVVub3JkZXJlZFNldFByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6OnVub3JkZXJlZF9tdWx0aW1hcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyMVVub3JkZXJlZE1hcFByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6OnVub3JkZXJlZF9tdWx0aXNldCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRyMVVub3JkZXJlZFNldFByaW50ZXIpCisgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fZGVidWc6OmZvcndhcmRfbGlzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZEZvcndhcmRMaXN0UHJpbnRlcikKKworCisgICAgIyBFeHRlbnNpb25zLgorICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdfX2dudV9jeHg6OicsICdzbGlzdCcsIFN0ZFNsaXN0UHJpbnRlcikKKworICAgIGlmIFRydWU6CisgICAgICAgICMgVGhlc2Ugc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgaWYgR0RCICJwcmludCAqaSIgd29ya2VkLgorICAgICAgICAjIEJ1dCBpdCBvZnRlbiBkb2Vzbid0LCBzbyBoZXJlIHRoZXkgYXJlLgorICAgICAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICdfTGlzdF9pdGVyYXRvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RkTGlzdEl0ZXJhdG9yUHJpbnRlcikKKyAgICAgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX2NvbnRhaW5lcignc3RkOjonLCAnX0xpc3RfY29uc3RfaXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZExpc3RJdGVyYXRvclByaW50ZXIpCisgICAgICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdzdGQ6OicsICdfUmJfdHJlZV9pdGVyYXRvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZFJidHJlZUl0ZXJhdG9yUHJpbnRlcikKKyAgICAgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkX3ZlcnNpb24oJ3N0ZDo6JywgJ19SYl90cmVlX2NvbnN0X2l0ZXJhdG9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RkUmJ0cmVlSXRlcmF0b3JQcmludGVyKQorICAgICAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICdfRGVxdWVfaXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZERlcXVlSXRlcmF0b3JQcmludGVyKQorICAgICAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfY29udGFpbmVyKCdzdGQ6OicsICdfRGVxdWVfY29uc3RfaXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZERlcXVlSXRlcmF0b3JQcmludGVyKQorICAgICAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGRfdmVyc2lvbignX19nbnVfY3h4OjonLCAnX19ub3JtYWxfaXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGRWZWN0b3JJdGVyYXRvclByaW50ZXIpCisgICAgICAgIGxpYnN0ZGN4eF9wcmludGVyLmFkZF92ZXJzaW9uKCdfX2dudV9jeHg6OicsICdfU2xpc3RfaXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGRTbGlzdEl0ZXJhdG9yUHJpbnRlcikKKworICAgICAgICAjIERlYnVnIChjb21waWxlZCB3aXRoIC1EX0dMSUJDWFhfREVCVUcpIHByaW50ZXIKKyAgICAgICAgIyByZWdpc3RyYXRpb25zLiAgVGhlIFJiX3RyZWUgZGVidWcgaXRlcmF0b3Igd2hlbiB1bndyYXBwZWQKKyAgICAgICAgIyBmcm9tIHRoZSBlbmNhcHN1bGF0aW5nIF9fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvciBkb2VzIG5vdAorICAgICAgICAjIGhhdmUgdGhlIF9fbm9ybSBuYW1lc3BhY2UuIEp1c3QgdXNlIHRoZSBleGlzdGluZyBwcmludGVyCisgICAgICAgICMgcmVnaXN0cmF0aW9uIGZvciB0aGF0LgorICAgICAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGQoJ19fZ251X2RlYnVnOjpfU2FmZV9pdGVyYXRvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGREZWJ1Z0l0ZXJhdG9yUHJpbnRlcikKKyAgICAgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fbm9ybTo6X0xpc3RfaXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RkTGlzdEl0ZXJhdG9yUHJpbnRlcikKKyAgICAgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fbm9ybTo6X0xpc3RfY29uc3RfaXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RkTGlzdEl0ZXJhdG9yUHJpbnRlcikKKyAgICAgICAgbGlic3RkY3h4X3ByaW50ZXIuYWRkKCdzdGQ6Ol9fbm9ybTo6X0RlcXVlX2NvbnN0X2l0ZXJhdG9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZERlcXVlSXRlcmF0b3JQcmludGVyKQorICAgICAgICBsaWJzdGRjeHhfcHJpbnRlci5hZGQoJ3N0ZDo6X19ub3JtOjpfRGVxdWVfaXRlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RkRGVxdWVJdGVyYXRvclByaW50ZXIpCisKK2J1aWxkX2xpYnN0ZGN4eF9kaWN0aW9uYXJ5ICgpCmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvZ2RiaW5pdCBiL3NoYXJlL2dkYi9nZGJpbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDc1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9nZGIvZ2RiaW5pdApAQCAtMCwwICsxLDYgQEAKK3B5dGhvbgoraW1wb3J0IHN5cworc3lzLnBhdGguaW5zZXJ0KDAsICcvY2J1aWxkL3NsYXZlcy9vb3J0cy9jcm9zc3Rvb2wtbmcvYnVpbGRzL2FhcmNoNjQtbm9uZS1lbGYtbGludXgvaW5zdGFsbC9zaGFyZS9nY2MtNC44LjMvcHl0aG9uJykKK2Zyb20gbGlic3RkY3h4LnY2LnByaW50ZXJzIGltcG9ydCByZWdpc3Rlcl9saWJzdGRjeHhfcHJpbnRlcnMKK3JlZ2lzdGVyX2xpYnN0ZGN4eF9wcmludGVycyAoTm9uZSkKK2VuZApkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvX19pbml0X18ucHkgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzExNTgzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMjQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IF9nZGIKKworaWYgc3lzLnZlcnNpb25faW5mb1swXSA+IDI6CisgICAgIyBQeXRob24gMyBtb3ZlZCAicmVsb2FkIgorICAgIGZyb20gaW1wIGltcG9ydCByZWxvYWQKKworZnJvbSBfZ2RiIGltcG9ydCAqCisKK2NsYXNzIF9HZGJGaWxlIChvYmplY3QpOgorICAgICMgVGhlc2UgdHdvIGFyZSBuZWVkZWQgaW4gUHl0aG9uIDMKKyAgICBlbmNvZGluZyA9ICJVVEYtOCIKKyAgICBlcnJvcnMgPSAic3RyaWN0IgorICAgIAorICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBEbyBub3RoaW5nLgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGlzYXR0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBpdGVyYWJsZSk6CisgICAgICAgIGZvciBsaW5lIGluIGl0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICBmbHVzaCgpCisKK2NsYXNzIEdkYk91dHB1dEZpbGUgKF9HZGJGaWxlKToKKyAgICBkZWYgd3JpdGUoc2VsZiwgcyk6CisgICAgICAgIHdyaXRlKHMsIHN0cmVhbT1TVERPVVQpCisKK3N5cy5zdGRvdXQgPSBHZGJPdXRwdXRGaWxlKCkKKworY2xhc3MgR2RiT3V0cHV0RXJyb3JGaWxlIChfR2RiRmlsZSk6CisgICAgZGVmIHdyaXRlKHNlbGYsIHMpOgorICAgICAgICB3cml0ZShzLCBzdHJlYW09U1RERVJSKQorCitzeXMuc3RkZXJyID0gR2RiT3V0cHV0RXJyb3JGaWxlKCkKKworIyBEZWZhdWx0IHByb21wdCBob29rIGRvZXMgbm90aGluZy4KK3Byb21wdF9ob29rID0gTm9uZQorCisjIEVuc3VyZSB0aGF0IHN5cy5hcmd2IGlzIHNldCB0byBzb21ldGhpbmcuCisjIFdlIGRvIG5vdCB1c2UgUHlTeXNfU2V0QXJndkV4IGJlY2F1c2UgaXQgZGlkIG5vdCBhcHBlYXIgdW50aWwgMi42LjYuCitzeXMuYXJndiA9IFsnJ10KKworIyBJbml0aWFsIHByZXR0eSBwcmludGVycy4KK3ByZXR0eV9wcmludGVycyA9IFtdCisKKyMgSW5pdGlhbCB0eXBlIHByaW50ZXJzLgordHlwZV9wcmludGVycyA9IFtdCisKKyMgQ29udmVuaWVuY2UgdmFyaWFibGUgdG8gR0RCJ3MgcHl0aG9uIGRpcmVjdG9yeQorUFlUSE9ORElSID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCisKKyMgQXV0by1sb2FkIGFsbCBmdW5jdGlvbnMvY29tbWFuZHMuCisKKyMgUGFja2FnZXMgdG8gYXV0by1sb2FkLgorCitwYWNrYWdlcyA9IFsKKyAgICAnZnVuY3Rpb24nLAorICAgICdjb21tYW5kJworXQorCisjIHBrZ3V0aWwuaXRlcl9tb2R1bGVzIGlzIG5vdCBhdmFpbGFibGUgcHJpb3IgdG8gUHl0aG9uIDIuNi4gIEluc3RlYWQsCisjIG1hbnVhbGx5IGl0ZXJhdGUgdGhlIGxpc3QsIGNvbGxhdGluZyB0aGUgUHl0aG9uIGZpbGVzIGluIGVhY2ggbW9kdWxlCisjIHBhdGguICBDb25zdHJ1Y3QgdGhlIG1vZHVsZSBuYW1lLCBhbmQgaW1wb3J0LgorCitkZWYgYXV0b19sb2FkX3BhY2thZ2VzKCk6CisgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgIGxvY2F0aW9uID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhY2thZ2UpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGxvY2F0aW9uKToKKyAgICAgICAgICAgIHB5X2ZpbGVzID0gZmlsdGVyKGxhbWJkYSB4OiB4LmVuZHN3aXRoKCcucHknKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB4ICE9ICdfX2luaXRfXy5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saXN0ZGlyKGxvY2F0aW9uKSkKKworICAgICAgICAgICAgZm9yIHB5X2ZpbGUgaW4gcHlfZmlsZXM6CisgICAgICAgICAgICAgICAgIyBDb25zdHJ1Y3QgZnJvbSBmb28ucHksIGdkYi5tb2R1bGUuZm9vCisgICAgICAgICAgICAgICAgbW9kbmFtZSA9ICIlcy4lcy4lcyIgJSAoIF9fbmFtZV9fLCBwYWNrYWdlLCBweV9maWxlWzotM10gKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgbW9kbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVsb2FkIG1vZHVsZXMgd2l0aCBkdXBsaWNhdGUgbmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbG9hZChfX2ltcG9ydF9fKG1vZG5hbWUpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSAodHJhY2ViYWNrLmZvcm1hdF9leGMoKSArICJcbiIpCisKK2F1dG9fbG9hZF9wYWNrYWdlcygpCisKK2RlZiBHZGJTZXRQeXRob25EaXJlY3RvcnkoZGlyKToKKyAgICAiIiJVcGRhdGUgc3lzLnBhdGgsIHJlbG9hZCBnZGIgYW5kIGF1dG8tbG9hZCBwYWNrYWdlcy4iIiIKKyAgICBnbG9iYWwgUFlUSE9ORElSCisKKyAgICB0cnk6CisgICAgICAgIHN5cy5wYXRoLnJlbW92ZShQWVRIT05ESVIpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgZGlyKQorCisgICAgUFlUSE9ORElSID0gZGlyCisKKyAgICAjIG5vdGUgdGhhdCByZWxvYWQgb3ZlcndyaXRlcyB0aGUgZ2RiIG1vZHVsZSB3aXRob3V0IGRlbGV0aW5nIGV4aXN0aW5nCisgICAgIyBhdHRyaWJ1dGVzCisgICAgcmVsb2FkKF9faW1wb3J0X18oX19uYW1lX18pKQorICAgIGF1dG9fbG9hZF9wYWNrYWdlcygpCmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL19faW5pdF9fLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWVhZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE2IEBACisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvZXhwbG9yZS5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvZXhwbG9yZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDc3ODc1Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9leHBsb3JlLnB5CkBAIC0wLDAgKzEsNzYwIEBACisjIEdEQiAnZXhwbG9yZScgY29tbWFuZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyIiIkltcGxlbWVudGF0aW9uIG9mIHRoZSBHREIgJ2V4cGxvcmUnIGNvbW1hbmQgdXNpbmcgdGhlIEdEQiBQeXRob24gQVBJLiIiIgorCitpbXBvcnQgZ2RiCitpbXBvcnQgc3lzCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPiAyOgorICAgICMgUHl0aG9uIDMgcmVuYW1lZCByYXdfaW5wdXQgdG8gaW5wdXQKKyAgICByYXdfaW5wdXQgPSBpbnB1dAorICAgIAorY2xhc3MgRXhwbG9yZXIob2JqZWN0KToKKyAgICAiIiJJbnRlcm5hbCBjbGFzcyB3aGljaCBpbnZva2VzIG90aGVyIGV4cGxvcmVycy4iIiIKKworICAgICMgVGhpcyBtYXAgaXMgZmlsbGVkIGJ5IHRoZSBFeHBsb3Jlci5pbml0X2VudigpIGZ1bmN0aW9uCisgICAgdHlwZV9jb2RlX3RvX2V4cGxvcmVyX21hcCA9IHsgfQorCisgICAgX1NDQUxBUl9UWVBFX0xJU1QgPSAoCisgICAgICAgIGdkYi5UWVBFX0NPREVfQ0hBUiwKKyAgICAgICAgZ2RiLlRZUEVfQ09ERV9JTlQsCisgICAgICAgIGdkYi5UWVBFX0NPREVfQk9PTCwKKyAgICAgICAgZ2RiLlRZUEVfQ09ERV9GTFQsCisgICAgICAgIGdkYi5UWVBFX0NPREVfVk9JRCwKKyAgICAgICAgZ2RiLlRZUEVfQ09ERV9FTlVNLAorICAgICkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ3VhcmRfZXhwcihleHByKToKKyAgICAgICAgbGVuZ3RoID0gbGVuKGV4cHIpCisgICAgICAgIGd1YXJkID0gRmFsc2UKKworICAgICAgICBpZiBleHByWzBdID09ICcoJyBhbmQgZXhwcltsZW5ndGgtMV0gPT0gJyknOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIHdoaWxlIGkgPCBsZW5ndGg6CisgICAgICAgICAgICAgICAgYyA9IGV4cHJbaV0KKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXycgb3IgKCdhJyA8PSBjIGFuZCBjIDw9ICd6Jykgb3IKKyAgICAgICAgICAgICAgICAgICAgKCdBJyA8PSBjIGFuZCBjIDw9ICdaJykgb3IgKCcwJyA8PSBjIGFuZCBjIDw9ICc5JykpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZ3VhcmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgaWYgZ3VhcmQ6CisgICAgICAgICAgICByZXR1cm4gIigiICsgZXhwciArICIpIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGV4cHIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV9leHByKGV4cHIsIHZhbHVlLCBpc19jaGlsZCk6CisgICAgICAgICIiIk1haW4gZnVuY3Rpb24gdG8gZXhwbG9yZSBhbiBleHByZXNzaW9uIHZhbHVlLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAgIGV4cHI6IFRoZSBleHByZXNzaW9uIHN0cmluZyB0aGF0IGlzIGJlaW5nIGV4cGxvcmVkLgorICAgICAgICAgICAgdmFsdWU6IFRoZSBnZGIuVmFsdWUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uCisgICAgICAgICAgICBpc19jaGlsZDogQm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZSBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIGNoaWxkLgorICAgICAgICAgICAgICAgICAgICAgIEFuIGV4cHJlc3Npb24gaXMgYSBjaGlsZCBpZiBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIG1haW4KKyAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uIGVudGVyZWQgYnkgdGhlIHVzZXIuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIKKyAgICAgICAgICAgICAgICAgICAgICBlbnRlcmVkIGFuIGV4cHJlc3Npb24gd2hpY2ggZXZhbHVhdGVzIHRvIGEgc3RydWN0LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgd2hlbiBleHBsb3JpbmcgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0LCBpc19jaGlsZCBpcyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICB0byBUcnVlIGludGVybmFsbHkuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIE5vIHJldHVybiB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHR5cGVfY29kZSA9IHZhbHVlLnR5cGUuY29kZQorICAgICAgICBpZiB0eXBlX2NvZGUgaW4gRXhwbG9yZXIudHlwZV9jb2RlX3RvX2V4cGxvcmVyX21hcDoKKyAgICAgICAgICAgIGV4cGxvcmVyX2NsYXNzID0gRXhwbG9yZXIudHlwZV9jb2RlX3RvX2V4cGxvcmVyX21hcFt0eXBlX2NvZGVdCisgICAgICAgICAgICB3aGlsZSBleHBsb3Jlcl9jbGFzcy5leHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlzX2NoaWxkKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAoIkV4cGxvcmVyIGZvciB0eXBlICclcycgbm90IHlldCBhdmFpbGFibGUuXG4iICUKKyAgICAgICAgICAgICAgICAgICBzdHIodmFsdWUudHlwZSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwgaXNfY2hpbGQpOgorICAgICAgICAiIiJNYWluIGZ1bmN0aW9uIHRvIGV4cGxvcmUgYSBkYXRhIHR5cGUuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAgbmFtZTogVGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIGRhdGEgdHlwZSBiZWluZworICAgICAgICAgICAgICAgICAgZXhwbG9yZWQuCisgICAgICAgICAgICBkYXRhdHlwZTogVGhlIGdkYi5UeXBlIHZhbHVlIG9mIHRoZSBkYXRhIHR5cGUgYmVpbmcgZXhwbG9yZWQuCisgICAgICAgICAgICBpc19jaGlsZDogQm9vbGVhbiB2YWx1ZSB0byBpbmRpY2F0ZSBpZiB0aGUgbmFtZSBpcyBhIGNoaWxkLgorICAgICAgICAgICAgICAgICAgICAgIEEgbmFtZSBpcyBhIGNoaWxkIGlmIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgbWFpbiBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgZW50ZXJlZCBieSB0aGUgdXNlci4gIEZvciBleGFtcGxlLCBpZiB0aGUgdXNlciBlbnRlcmVkCisgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2Ygc3RydWN0IHR5cGUsIHRoZW4gd2hlbiBleHBsb3JpbmcgdGhlIGZpZWxkcworICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzdHJ1Y3QsIGlzX2NoaWxkIGlzIHNldCB0byBUcnVlIGludGVybmFsbHkuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIE5vIHJldHVybiB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHR5cGVfY29kZSA9IGRhdGF0eXBlLmNvZGUKKyAgICAgICAgaWYgdHlwZV9jb2RlIGluIEV4cGxvcmVyLnR5cGVfY29kZV90b19leHBsb3Jlcl9tYXA6CisgICAgICAgICAgICBleHBsb3Jlcl9jbGFzcyA9IEV4cGxvcmVyLnR5cGVfY29kZV90b19leHBsb3Jlcl9tYXBbdHlwZV9jb2RlXQorICAgICAgICAgICAgd2hpbGUgZXhwbG9yZXJfY2xhc3MuZXhwbG9yZV90eXBlKG5hbWUsIGRhdGF0eXBlLCBpc19jaGlsZCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCJFeHBsb3JlciBmb3IgdHlwZSAnJXMnIG5vdCB5ZXQgYXZhaWxhYmxlLlxuIiAlCisgICAgICAgICAgICAgICAgICAgc3RyKGRhdGF0eXBlKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaW5pdF9lbnYoKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgdGhlIEV4cGxvcmVyIGVudmlyb25tZW50LgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkIGJlZm9yZSBzdGFydGluZyBhbnkgZXhwbG9yYXRpb24uICBJZgorICAgICAgICBpbnZva2VkIGJlZm9yZSBhbiBleHBsb3JhdGlvbiwgaXQgbmVlZCBub3QgYmUgaW52b2tlZCBmb3Igc3Vic2VxdWVudAorICAgICAgICBleHBsb3JhdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICBFeHBsb3Jlci50eXBlX2NvZGVfdG9fZXhwbG9yZXJfbWFwID0geworICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9DSEFSIDogU2NhbGFyRXhwbG9yZXIsCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0lOVCA6IFNjYWxhckV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9CT09MIDogU2NhbGFyRXhwbG9yZXIsCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0ZMVCA6IFNjYWxhckV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9WT0lEIDogU2NhbGFyRXhwbG9yZXIsCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0VOVU0gOiBTY2FsYXJFeHBsb3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfU1RSVUNUIDogQ29tcG91bmRFeHBsb3JlciwKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfVU5JT04gOiBDb21wb3VuZEV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9QVFIgOiBQb2ludGVyRXhwbG9yZXIsCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX1JFRiA6IFJlZmVyZW5jZUV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9UWVBFREVGIDogVHlwZWRlZkV4cGxvcmVyLAorICAgICAgICAgICAgZ2RiLlRZUEVfQ09ERV9BUlJBWSA6IEFycmF5RXhwbG9yZXIKKyAgICAgICAgfQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpc19zY2FsYXJfdHlwZSh0eXBlKToKKyAgICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgYSB0eXBlIGlzIGEgc2NhbGFyIHR5cGUuCisgICAgICAgIEEgdHlwZSBpcyBhIHNjYWxhciB0eXBlIG9mIGl0cyB0eXBlIGlzCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0NIQVIgb3IKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfSU5UIG9yCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX0JPT0wgb3IKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfRkxUIG9yCisgICAgICAgICAgICBnZGIuVFlQRV9DT0RFX1ZPSUQgb3IKKyAgICAgICAgICAgIGdkYi5UWVBFX0NPREVfRU5VTS4KKworICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICB0eXBlOiBUaGUgdHlwZSB0byBiZSBjaGVja2VkLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAnVHJ1ZScgaWYgJ3R5cGUnIGlzIGEgc2NhbGFyIHR5cGUuICdGYWxzZScgb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHR5cGUuY29kZSBpbiBFeHBsb3Jlci5fU0NBTEFSX1RZUEVfTElTVAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByZXR1cm5fdG9fcGFyZW50X3ZhbHVlKCk6CisgICAgICAgICIiIkEgdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBwcmludHMgdGhhdCB0aGUgY3VycmVudCBleHBsb3JhdGlvbiBzZXNzaW9uCisgICAgICAgIGlzIHJldHVybmluZyB0byB0aGUgcGFyZW50IHZhbHVlLiBVc2VmdWwgd2hlbiBleHBsb3JpbmcgdmFsdWVzLgorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgKCJcblJldHVybmluZyB0byBwYXJlbnQgdmFsdWUuLi5cbiIpCisgICAgICAgIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmV0dXJuX3RvX3BhcmVudF92YWx1ZV9wcm9tcHQoKToKKyAgICAgICAgIiIiQSB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIHByb21wdHMgdGhlIHVzZXIgdG8gcHJlc3MgdGhlICdlbnRlcicga2V5CisgICAgICAgIHNvIHRoYXQgdGhlIGV4cGxvcmF0aW9uIHNlc3Npb24gY2FuIHNoaWZ0IGJhY2sgdG8gdGhlIHBhcmVudCB2YWx1ZS4KKyAgICAgICAgVXNlZnVsIHdoZW4gZXhwbG9yaW5nIHZhbHVlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHJhd19pbnB1dCgiXG5QcmVzcyBlbnRlciB0byByZXR1cm4gdG8gcGFyZW50IHZhbHVlOiAiKQorICAgICAgICAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHJldHVybl90b19lbmNsb3NpbmdfdHlwZSgpOgorICAgICAgICAiIiJBIHV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggcHJpbnRzIHRoYXQgdGhlIGN1cnJlbnQgZXhwbG9yYXRpb24gc2Vzc2lvbgorICAgICAgICBpcyByZXR1cm5pbmcgdG8gdGhlIGVuY2xvc2luZyB0eXBlLiAgVXNlZnVsIHdoZW4gZXhwbG9yaW5nIHR5cGVzLgorICAgICAgICAiIiIKKyAgICAgICAgcHJpbnQgKCJcblJldHVybmluZyB0byBlbmNsb3NpbmcgdHlwZS4uLlxuIikKKyAgICAgICAgCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByZXR1cm5fdG9fZW5jbG9zaW5nX3R5cGVfcHJvbXB0KCk6CisgICAgICAgICIiIkEgdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBwcm9tcHRzIHRoZSB1c2VyIHRvIHByZXNzIHRoZSAnZW50ZXInIGtleQorICAgICAgICBzbyB0aGF0IHRoZSBleHBsb3JhdGlvbiBzZXNzaW9uIGNhbiBzaGlmdCBiYWNrIHRvIHRoZSBlbmNsb3NpbmcgdHlwZS4KKyAgICAgICAgVXNlZnVsIHdoZW4gZXhwbG9yaW5nIHR5cGVzLgorICAgICAgICAiIiIKKyAgICAgICAgcmF3X2lucHV0KCJcblByZXNzIGVudGVyIHRvIHJldHVybiB0byBlbmNsb3NpbmcgdHlwZTogIikKKworCitjbGFzcyBTY2FsYXJFeHBsb3JlcihvYmplY3QpOgorICAgICIiIkludGVybmFsIGNsYXNzIHVzZWQgdG8gZXhwbG9yZSBzY2FsYXIgdmFsdWVzLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlzX2NoaWxkKToKKyAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBzY2FsYXIgdmFsdWVzLgorICAgICAgICBTZWUgRXhwbG9yZXIuZXhwbG9yZV9leHByIGFuZCBFeHBsb3Jlci5pc19zY2FsYXJfdHlwZSBmb3IgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICgiJyVzJyBpcyBhIHNjYWxhciB2YWx1ZSBvZiB0eXBlICclcycuIiAlCisgICAgICAgICAgICAgICAoZXhwciwgdmFsdWUudHlwZSkpCisgICAgICAgIHByaW50ICgiJXMgPSAlcyIgJSAoZXhwciwgc3RyKHZhbHVlKSkpCisKKyAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5fdG9fcGFyZW50X3ZhbHVlX3Byb21wdCgpCisgICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5fdG9fcGFyZW50X3ZhbHVlKCkKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV90eXBlKG5hbWUsIGRhdGF0eXBlLCBpc19jaGlsZCk6CisgICAgICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgc2NhbGFyIHR5cGVzLgorICAgICAgICBTZWUgRXhwbG9yZXIuZXhwbG9yZV90eXBlIGFuZCBFeHBsb3Jlci5pc19zY2FsYXJfdHlwZSBmb3IgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGRhdGF0eXBlLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9FTlVNOgorICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBvZiBhbiBlbnVtZXJhdGVkIHR5cGUgJyVzJy4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHN0cihkYXRhdHlwZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIiclcycgaXMgYW4gZW51bWVyYXRlZCB0eXBlLiIgJSBuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBvZiBhIHNjYWxhciB0eXBlICclcycuIiAlCisgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBzdHIoZGF0YXR5cGUpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgKCInJXMnIGlzIGEgc2NhbGFyIHR5cGUuIiAlIG5hbWUpCisKKyAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5fdG9fZW5jbG9zaW5nX3R5cGVfcHJvbXB0KCkKKyAgICAgICAgICAgIEV4cGxvcmVyLnJldHVybl90b19lbmNsb3NpbmdfdHlwZSgpCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgUG9pbnRlckV4cGxvcmVyKG9iamVjdCk6CisgICAgIiIiSW50ZXJuYWwgY2xhc3MgdXNlZCB0byBleHBsb3JlIHBvaW50ZXIgdmFsdWVzLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlzX2NoaWxkKToKKyAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBwb2ludGVyIHZhbHVlcy4KKyAgICAgICAgU2VlIEV4cGxvcmVyLmV4cGxvcmVfZXhwciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ICgiJyVzJyBpcyBhIHBvaW50ZXIgdG8gYSB2YWx1ZSBvZiB0eXBlICclcyciICUKKyAgICAgICAgICAgICAgIChleHByLCBzdHIodmFsdWUudHlwZS50YXJnZXQoKSkpKQorICAgICAgICBvcHRpb24gID0gcmF3X2lucHV0KCJDb250aW51ZSBleHBsb3JpbmcgaXQgYXMgYSBwb2ludGVyIHRvIGEgc2luZ2xlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgW3kvbl06ICIpCisgICAgICAgIGlmIG9wdGlvbiA9PSAieSI6CisgICAgICAgICAgICBkZXJlZl92YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZXJlZl92YWx1ZSA9IHZhbHVlLmRlcmVmZXJlbmNlKCkKKyAgICAgICAgICAgICAgICBzdHIoZGVyZWZfdmFsdWUpCisgICAgICAgICAgICBleGNlcHQgZ2RiLk1lbW9yeUVycm9yOgorICAgICAgICAgICAgICAgIHByaW50ICgiJyVzJyBhIHBvaW50ZXIgcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24uIiAlIGV4cHIpCisgICAgICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIEV4cGxvcmVyLnJldHVybl90b19wYXJlbnRfdmFsdWVfcHJvbXB0KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcigiKiVzIiAlIEV4cGxvcmVyLmd1YXJkX2V4cHIoZXhwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyZWZfdmFsdWUsIGlzX2NoaWxkKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIAorICAgICAgICBvcHRpb24gID0gcmF3X2lucHV0KCJDb250aW51ZSBleHBsb3JpbmcgaXQgYXMgYSBwb2ludGVyIHRvIGFuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJyYXkgW3kvbl06ICIpCisgICAgICAgIGlmIG9wdGlvbiA9PSAieSI6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGluZGV4ID0gMAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbnQocmF3X2lucHV0KCJFbnRlciB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgeW91ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YW50IHRvIGV4cGxvcmUgaW4gJyVzJzogIiAlIGV4cHIpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsZW1lbnRfZXhwciA9ICIlc1slZF0iICUgKEV4cGxvcmVyLmd1YXJkX2V4cHIoZXhwciksIGluZGV4KQorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB2YWx1ZVtpbmRleF0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN0cihlbGVtZW50KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBnZGIuTWVtb3J5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICgiQ2Fubm90IHJlYWQgdmFsdWUgYXQgaW5kZXggJWQuIiAlIGluZGV4KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcihlbGVtZW50X2V4cHIsIGVsZW1lbnQsIFRydWUpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgIEV4cGxvcmVyLnJldHVybl90b19wYXJlbnRfdmFsdWUoKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV90eXBlKG5hbWUsIGRhdGF0eXBlLCBpc19jaGlsZCk6CisgICAgICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgcG9pbnRlciB0eXBlcy4KKyAgICAgICAgU2VlIEV4cGxvcmVyLmV4cGxvcmVfdHlwZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHRhcmdldF90eXBlID0gZGF0YXR5cGUudGFyZ2V0KCkKKyAgICAgICAgcHJpbnQgKCJcbiVzIGlzIGEgcG9pbnRlciB0byBhIHZhbHVlIG9mIHR5cGUgJyVzJy4iICUKKyAgICAgICAgICAgICAgIChuYW1lLCBzdHIodGFyZ2V0X3R5cGUpKSkKKworICAgICAgICBFeHBsb3Jlci5leHBsb3JlX3R5cGUoInRoZSBwb2ludGVlIHR5cGUgb2YgJXMiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfY2hpbGQpCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIFJlZmVyZW5jZUV4cGxvcmVyKG9iamVjdCk6CisgICAgIiIiSW50ZXJuYWwgY2xhc3MgdXNlZCB0byBleHBsb3JlIHJlZmVyZW5jZSAoVFlQRV9DT0RFX1JFRikgdmFsdWVzLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlzX2NoaWxkKToKKyAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBhcnJheSB2YWx1ZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX2V4cHIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICByZWZlcmVuY2VkX3ZhbHVlID0gdmFsdWUucmVmZXJlbmNlZF92YWx1ZSgpCisgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcihleHByLCByZWZlcmVuY2VkX3ZhbHVlLCBpc19jaGlsZCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwgaXNfY2hpbGQpOgorICAgICAgICAiIiJGdW5jdGlvbiB0byBleHBsb3JlIHBvaW50ZXIgdHlwZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX3R5cGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRfdHlwZSA9IGRhdGF0eXBlLnRhcmdldCgpCisgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfdHlwZShuYW1lLCB0YXJnZXRfdHlwZSwgaXNfY2hpbGQpCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEFycmF5RXhwbG9yZXIob2JqZWN0KToKKyAgICAiIiJJbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGV4cGxvcmUgYXJyYXlzLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHBsb3JlX2V4cHIoZXhwciwgdmFsdWUsIGlzX2NoaWxkKToKKyAgICAgICAgIiIiRnVuY3Rpb24gdG8gZXhwbG9yZSBhcnJheSB2YWx1ZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX2V4cHIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRfdHlwZSA9IHZhbHVlLnR5cGUudGFyZ2V0KCkKKyAgICAgICAgcHJpbnQgKCInJXMnIGlzIGFuIGFycmF5IG9mICclcycuIiAlIChleHByLCBzdHIodGFyZ2V0X3R5cGUpKSkKKyAgICAgICAgaW5kZXggPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZGV4ID0gaW50KHJhd19pbnB1dCgiRW50ZXIgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwbG9yZSBpbiAnJXMnOiAiICUgZXhwcikpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX3BhcmVudF92YWx1ZSgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBlbGVtZW50ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbGVtZW50ID0gdmFsdWVbaW5kZXhdCisgICAgICAgICAgICBzdHIoZWxlbWVudCkKKyAgICAgICAgZXhjZXB0IGdkYi5NZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICgiQ2Fubm90IHJlYWQgdmFsdWUgYXQgaW5kZXggJWQuIiAlIGluZGV4KQorICAgICAgICAgICAgcmF3X2lucHV0KCJQcmVzcyBlbnRlciB0byBjb250aW51ZS4uLiAiKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIAorICAgICAgICBFeHBsb3Jlci5leHBsb3JlX2V4cHIoIiVzWyVkXSIgJSAoRXhwbG9yZXIuZ3VhcmRfZXhwcihleHByKSwgaW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCwgVHJ1ZSkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV90eXBlKG5hbWUsIGRhdGF0eXBlLCBpc19jaGlsZCk6CisgICAgICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgYXJyYXkgdHlwZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX3R5cGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICB0YXJnZXRfdHlwZSA9IGRhdGF0eXBlLnRhcmdldCgpCisgICAgICAgIHByaW50ICgiJXMgaXMgYW4gYXJyYXkgb2YgJyVzJy4iICUgKG5hbWUsIHN0cih0YXJnZXRfdHlwZSkpKQorCisgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfdHlwZSgidGhlIGFycmF5IGVsZW1lbnQgb2YgJXMiICUgbmFtZSwgdGFyZ2V0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19jaGlsZCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgQ29tcG91bmRFeHBsb3JlcihvYmplY3QpOgorICAgICIiIkludGVybmFsIGNsYXNzIHVzZWQgdG8gZXhwbG9yZSBzdHJ1Y3QsIGNsYXNzZXMgYW5kIHVuaW9ucy4iIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3ByaW50X2ZpZWxkcyhwcmludF9saXN0KToKKyAgICAgICAgIiIiSW50ZXJuYWwgZnVuY3Rpb24gd2hpY2ggcHJpbnRzIHRoZSBmaWVsZHMgb2YgYSBzdHJ1Y3QvY2xhc3MvdW5pb24uCisgICAgICAgICIiIgorICAgICAgICBtYXhfZmllbGRfbmFtZV9sZW5ndGggPSAwCisgICAgICAgIGZvciBwYWlyIGluIHByaW50X2xpc3Q6CisgICAgICAgICAgICBpZiBtYXhfZmllbGRfbmFtZV9sZW5ndGggPCBsZW4ocGFpclswXSk6CisgICAgICAgICAgICAgICAgbWF4X2ZpZWxkX25hbWVfbGVuZ3RoID0gbGVuKHBhaXJbMF0pCisKKyAgICAgICAgZm9yIHBhaXIgaW4gcHJpbnRfbGlzdDoKKyAgICAgICAgICAgIHByaW50ICgiICAlKnMgPSAlcyIgJSAobWF4X2ZpZWxkX25hbWVfbGVuZ3RoLCBwYWlyWzBdLCBwYWlyWzFdKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9yZWFsX2ZpZWxkX2NvdW50KGZpZWxkcyk6CisgICAgICAgIHJlYWxfZmllbGRfY291bnQgPSAwOworICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRzOgorICAgICAgICAgICAgaWYgbm90IGZpZWxkLmFydGlmaWNpYWw6CisgICAgICAgICAgICAgICAgcmVhbF9maWVsZF9jb3VudCA9IHJlYWxfZmllbGRfY291bnQgKyAxCisKKyAgICAgICAgcmV0dXJuIHJlYWxfZmllbGRfY291bnQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV9leHByKGV4cHIsIHZhbHVlLCBpc19jaGlsZCk6CisgICAgICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgc3RydWN0cy9jbGFzc2VzIGFuZCB1bmlvbiB2YWx1ZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX2V4cHIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBkYXRhdHlwZSA9IHZhbHVlLnR5cGUKKyAgICAgICAgdHlwZV9jb2RlID0gZGF0YXR5cGUuY29kZQorICAgICAgICBmaWVsZHMgPSBkYXRhdHlwZS5maWVsZHMoKQorCisgICAgICAgIGlmIHR5cGVfY29kZSA9PSBnZGIuVFlQRV9DT0RFX1NUUlVDVDoKKyAgICAgICAgICAgIHR5cGVfZGVzYyA9ICJzdHJ1Y3QvY2xhc3MiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0eXBlX2Rlc2MgPSAidW5pb24iCisKKyAgICAgICAgaWYgQ29tcG91bmRFeHBsb3Jlci5fZ2V0X3JlYWxfZmllbGRfY291bnQoZmllbGRzKSA9PSAwOgorICAgICAgICAgICAgcHJpbnQgKCJUaGUgdmFsdWUgb2YgJyVzJyBpcyBhICVzIG9mIHR5cGUgJyVzJyB3aXRoIG5vIGZpZWxkcy4iICUKKyAgICAgICAgICAgICAgICAgICAoZXhwciwgdHlwZV9kZXNjLCBzdHIodmFsdWUudHlwZSkpKQorICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX3BhcmVudF92YWx1ZV9wcm9tcHQoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcHJpbnQgKCJUaGUgdmFsdWUgb2YgJyVzJyBpcyBhICVzIG9mIHR5cGUgJyVzJyB3aXRoIHRoZSBmb2xsb3dpbmcgIgorICAgICAgICAgICAgICAiZmllbGRzOlxuIiAlIChleHByLCB0eXBlX2Rlc2MsIHN0cih2YWx1ZS50eXBlKSkpCisKKyAgICAgICAgaGFzX2V4cGxvcmFibGVfZmllbGRzID0gRmFsc2UKKyAgICAgICAgY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcCA9IHsgfQorICAgICAgICBjdXJyZW50X2Nob2ljZSA9IDAKKyAgICAgICAgcHJpbnRfbGlzdCA9IFsgXQorICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRzOgorICAgICAgICAgICAgaWYgZmllbGQuYXJ0aWZpY2lhbDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmllbGRfZnVsbF9uYW1lID0gRXhwbG9yZXIuZ3VhcmRfZXhwcihleHByKSArICIuIiArIGZpZWxkLm5hbWUKKyAgICAgICAgICAgIGlmIGZpZWxkLmlzX2Jhc2VfY2xhc3M6CisgICAgICAgICAgICAgICAgZmllbGRfdmFsdWUgPSB2YWx1ZS5jYXN0KGZpZWxkLnR5cGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpZWxkX3ZhbHVlID0gdmFsdWVbZmllbGQubmFtZV0KKyAgICAgICAgICAgIGxpdGVyYWxfdmFsdWUgPSAiIgorICAgICAgICAgICAgaWYgdHlwZV9jb2RlID09IGdkYi5UWVBFX0NPREVfVU5JT046CisgICAgICAgICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9ICgiPEVudGVyICVkIHRvIGV4cGxvcmUgdGhpcyBmaWVsZCBvZiB0eXBlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnPiIgJSAoY3VycmVudF9jaG9pY2UsIHN0cihmaWVsZC50eXBlKSkpCisgICAgICAgICAgICAgICAgaGFzX2V4cGxvcmFibGVfZmllbGRzID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBFeHBsb3Jlci5pc19zY2FsYXJfdHlwZShmaWVsZC50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9ICgiJXMgLi4gKFZhbHVlIG9mIHR5cGUgJyVzJykiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKGZpZWxkX3ZhbHVlKSwgc3RyKGZpZWxkLnR5cGUpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZC5pc19iYXNlX2NsYXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZGVzYyA9ICJiYXNlIGNsYXNzIgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfZGVzYyA9ICJmaWVsZCIKKyAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbF92YWx1ZSA9ICgiPEVudGVyICVkIHRvIGV4cGxvcmUgdGhpcyAlcyBvZiB0eXBlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudF9jaG9pY2UsIGZpZWxkX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihmaWVsZC50eXBlKSkpCisgICAgICAgICAgICAgICAgICAgIGhhc19leHBsb3JhYmxlX2ZpZWxkcyA9IFRydWUKKworICAgICAgICAgICAgY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcFtzdHIoY3VycmVudF9jaG9pY2UpXSA9ICgKKyAgICAgICAgICAgICAgICBmaWVsZF9mdWxsX25hbWUsIGZpZWxkX3ZhbHVlKQorICAgICAgICAgICAgY3VycmVudF9jaG9pY2UgPSBjdXJyZW50X2Nob2ljZSArIDEKKworICAgICAgICAgICAgcHJpbnRfbGlzdC5hcHBlbmQoKGZpZWxkLm5hbWUsIGxpdGVyYWxfdmFsdWUpKQorCisgICAgICAgIENvbXBvdW5kRXhwbG9yZXIuX3ByaW50X2ZpZWxkcyhwcmludF9saXN0KQorICAgICAgICBwcmludCAoIiIpCisKKyAgICAgICAgaWYgaGFzX2V4cGxvcmFibGVfZmllbGRzOgorICAgICAgICAgICAgY2hvaWNlID0gcmF3X2lucHV0KCJFbnRlciB0aGUgZmllbGQgbnVtYmVyIG9mIGNob2ljZTogIikKKyAgICAgICAgICAgIGlmIGNob2ljZSBpbiBjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwOgorICAgICAgICAgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcihjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwW2Nob2ljZV1bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXBbY2hvaWNlXVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX3BhcmVudF92YWx1ZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICBFeHBsb3Jlci5yZXR1cm5fdG9fcGFyZW50X3ZhbHVlX3Byb21wdCgpCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwgaXNfY2hpbGQpOgorICAgICAgICAiIiJGdW5jdGlvbiB0byBleHBsb3JlIHN0cnVjdC9jbGFzcyBhbmQgdW5pb24gdHlwZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX3R5cGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICB0eXBlX2NvZGUgPSBkYXRhdHlwZS5jb2RlCisgICAgICAgIHR5cGVfZGVzYyA9ICIiCisgICAgICAgIGlmIHR5cGVfY29kZSA9PSBnZGIuVFlQRV9DT0RFX1NUUlVDVDoKKyAgICAgICAgICAgIHR5cGVfZGVzYyA9ICJzdHJ1Y3QvY2xhc3MiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0eXBlX2Rlc2MgPSAidW5pb24iCisKKyAgICAgICAgZmllbGRzID0gZGF0YXR5cGUuZmllbGRzKCkKKyAgICAgICAgaWYgQ29tcG91bmRFeHBsb3Jlci5fZ2V0X3JlYWxfZmllbGRfY291bnQoZmllbGRzKSA9PSAwOgorICAgICAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBhICVzIG9mIHR5cGUgJyVzJyB3aXRoIG5vIGZpZWxkcy4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHR5cGVfZGVzYywgc3RyKGRhdGF0eXBlKSkpCisgICAgICAgICAgICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX2VuY2xvc2luZ190eXBlX3Byb21wdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICgiJyVzJyBpcyBhICVzIHdpdGggbm8gZmllbGRzLiIgJSAobmFtZSwgdHlwZV9kZXNjKSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgcHJpbnQgKCIlcyBpcyBhICVzIG9mIHR5cGUgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgIndpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6XG4iICUKKyAgICAgICAgICAgICAgICAgICAobmFtZSwgdHlwZV9kZXNjLCBzdHIoZGF0YXR5cGUpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICgiJyVzJyBpcyBhICVzIHdpdGggdGhlIGZvbGxvd2luZyAiCisgICAgICAgICAgICAgICAgICAgImZpZWxkczpcbiIgJQorICAgICAgICAgICAgICAgICAgIChuYW1lLCB0eXBlX2Rlc2MpKQorCisgICAgICAgIGhhc19leHBsb3JhYmxlX2ZpZWxkcyA9IEZhbHNlCisgICAgICAgIGN1cnJlbnRfY2hvaWNlID0gMAorICAgICAgICBjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwID0geyB9CisgICAgICAgIHByaW50X2xpc3QgPSBbIF0KKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIGlmIGZpZWxkLmFydGlmaWNpYWw6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGZpZWxkLmlzX2Jhc2VfY2xhc3M6CisgICAgICAgICAgICAgICAgZmllbGRfZGVzYyA9ICJiYXNlIGNsYXNzIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWVsZF9kZXNjID0gImZpZWxkIgorICAgICAgICAgICAgcmhzID0gKCI8RW50ZXIgJWQgdG8gZXhwbG9yZSB0aGlzICVzIG9mIHR5cGUgJyVzJz4iICUKKyAgICAgICAgICAgICAgICAgICAoY3VycmVudF9jaG9pY2UsIGZpZWxkX2Rlc2MsIHN0cihmaWVsZC50eXBlKSkpCisgICAgICAgICAgICBwcmludF9saXN0LmFwcGVuZCgoZmllbGQubmFtZSwgcmhzKSkKKyAgICAgICAgICAgIGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXBbc3RyKGN1cnJlbnRfY2hvaWNlKV0gPSAoCisgICAgICAgICAgICAgICAgZmllbGQubmFtZSwgZmllbGQudHlwZSwgZmllbGRfZGVzYykKKyAgICAgICAgICAgIGN1cnJlbnRfY2hvaWNlID0gY3VycmVudF9jaG9pY2UgKyAxCisKKyAgICAgICAgQ29tcG91bmRFeHBsb3Jlci5fcHJpbnRfZmllbGRzKHByaW50X2xpc3QpCisgICAgICAgIHByaW50ICgiIikKKworICAgICAgICBpZiBsZW4oY2hvaWNlX3RvX2NvbXBvdW5kX2ZpZWxkX21hcCkgPiAwOgorICAgICAgICAgICAgY2hvaWNlID0gcmF3X2lucHV0KCJFbnRlciB0aGUgZmllbGQgbnVtYmVyIG9mIGNob2ljZTogIikKKyAgICAgICAgICAgIGlmIGNob2ljZSBpbiBjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwOgorICAgICAgICAgICAgICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgICAgICAgICBuZXdfbmFtZSA9ICgiJXMgJyVzJyBvZiAlcyIgJSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXBbY2hvaWNlXVsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXBbY2hvaWNlXVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld19uYW1lID0gKCIlcyAnJXMnIG9mICclcyciICUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwW2Nob2ljZV1bMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VfdG9fY29tcG91bmRfZmllbGRfbWFwW2Nob2ljZV1bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKSkKKyAgICAgICAgICAgICAgICBFeHBsb3Jlci5leHBsb3JlX3R5cGUobmV3X25hbWUsCisgICAgICAgICAgICAgICAgICAgIGNob2ljZV90b19jb21wb3VuZF9maWVsZF9tYXBbY2hvaWNlXVsxXSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19jaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgRXhwbG9yZXIucmV0dXJuX3RvX2VuY2xvc2luZ190eXBlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlzX2NoaWxkOgorICAgICAgICAgICAgICAgIEV4cGxvcmVyLnJldHVybl90b19lbmNsb3NpbmdfdHlwZV9wcm9tcHQoKQorCisgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAKKworY2xhc3MgVHlwZWRlZkV4cGxvcmVyKG9iamVjdCk6CisgICAgIiIiSW50ZXJuYWwgY2xhc3MgdXNlZCB0byBleHBsb3JlIHZhbHVlcyB3aG9zZSB0eXBlIGlzIGEgdHlwZWRlZi4iIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhwbG9yZV9leHByKGV4cHIsIHZhbHVlLCBpc19jaGlsZCk6CisgICAgICAgICIiIkZ1bmN0aW9uIHRvIGV4cGxvcmUgdHlwZWRlZiB2YWx1ZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX2V4cHIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBhY3R1YWxfdHlwZSA9IHZhbHVlLnR5cGUuc3RyaXBfdHlwZWRlZnMoKQorICAgICAgICBwcmludCAoIlRoZSB2YWx1ZSBvZiAnJXMnIGlzIG9mIHR5cGUgJyVzJyAiCisgICAgICAgICAgICAgICAid2hpY2ggaXMgYSB0eXBlZGVmIG9mIHR5cGUgJyVzJyIgJQorICAgICAgICAgICAgICAgKGV4cHIsIHN0cih2YWx1ZS50eXBlKSwgc3RyKGFjdHVhbF90eXBlKSkpCisKKyAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV9leHByKGV4cHIsIHZhbHVlLmNhc3QoYWN0dWFsX3R5cGUpLCBpc19jaGlsZCkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4cGxvcmVfdHlwZShuYW1lLCBkYXRhdHlwZSwgaXNfY2hpbGQpOgorICAgICAgICAiIiJGdW5jdGlvbiB0byBleHBsb3JlIHR5cGVkZWYgdHlwZXMuCisgICAgICAgIFNlZSBFeHBsb3Jlci5leHBsb3JlX3R5cGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBhY3R1YWxfdHlwZSA9IGRhdGF0eXBlLnN0cmlwX3R5cGVkZWZzKCkKKyAgICAgICAgaWYgaXNfY2hpbGQ6CisgICAgICAgICAgICBwcmludCAoIlRoZSB0eXBlIG9mICVzIGlzIGEgdHlwZWRlZiBvZiB0eXBlICclcycuIiAlCisgICAgICAgICAgICAgICAgICAgKG5hbWUsIHN0cihhY3R1YWxfdHlwZSkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgKCJUaGUgdHlwZSAnJXMnIGlzIGEgdHlwZWRlZiBvZiB0eXBlICclcycuIiAlCisgICAgICAgICAgICAgICAgICAgKG5hbWUsIHN0cihhY3R1YWxfdHlwZSkpKQorCisgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfdHlwZShuYW1lLCBhY3R1YWxfdHlwZSwgaXNfY2hpbGQpCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEV4cGxvcmVVdGlscyhvYmplY3QpOgorICAgICIiIkludGVybmFsIGNsYXNzIHdoaWNoIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgdGhlIG1haW4gY29tbWFuZCBjbGFzc2VzLiIiIgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjaGVja19hcmdzKG5hbWUsIGFyZ19zdHIpOgorICAgICAgICAiIiJVdGlsaXR5IHRvIGNoZWNrIGlmIGFkZXF1YXRlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBhbgorICAgICAgICBleHBsb3JlIGNvbW1hbmQuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIGV4cGxvcmUgY29tbWFuZC4KKyAgICAgICAgICAgIGFyZ19zdHI6IFRoZSBhcmd1bWVudCBzdHJpbmcgcGFzc2VkIHRvIHRoZSBleHBsb3JlIGNvbW1hbmQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRydWUgaWYgYWRlcXVhdGUgYXJndW1lbnRzIGFyZSBwYXNzZWQsIGZhbHNlIG90aGVyd2lzZS4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBnZGIuR2RiRXJyb3IgaWYgYWRlcXVhdGUgYXJndW1lbnRzIGFyZSBub3QgcGFzc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKGFyZ19zdHIpIDwgMToKKyAgICAgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJvcigiRVJST1I6ICclcycgcmVxdWlyZXMgYW4gYXJndW1lbnQuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X3R5cGVfZnJvbV9zdHIodHlwZV9zdHIpOgorICAgICAgICAiIiJBIHV0aWxpdHkgZnVuY3Rpb24gdG8gZGVkdWNlIHRoZSBnZGIuVHlwZSB2YWx1ZSBmcm9tIGEgc3RyaW5nCisgICAgICAgIHJlcHJlc2VudGluZyB0aGUgdHlwZS4KKworICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICB0eXBlX3N0cjogVGhlIHR5cGUgc3RyaW5nIGZyb20gd2hpY2ggdGhlIGdkYi5UeXBlIHZhbHVlIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgIGRlZHVjZWQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRoZSBkZWR1Y2VkIGdkYi5UeXBlIHZhbHVlIGlmIHBvc3NpYmxlLCBOb25lIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgQXNzdW1lIHRoZSBjdXJyZW50IGxhbmd1YWdlIHRvIGJlIEMvQysrIGFuZCBtYWtlIGEgdHJ5LgorICAgICAgICAgICAgcmV0dXJuIGdkYi5wYXJzZV9hbmRfZXZhbCgiKCVzICopMCIgJSB0eXBlX3N0cikudHlwZS50YXJnZXQoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBJZiBhc3N1bXB0aW9uIG9mIGN1cnJlbnQgbGFuZ3VhZ2UgdG8gYmUgQy9DKysgd2FzIHdyb25nLCB0aGVuCisgICAgICAgICAgICAjIGxvb2t1cCB0aGUgdHlwZSB1c2luZyB0aGUgQVBJLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUodHlwZV9zdHIpCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF92YWx1ZV9mcm9tX3N0cih2YWx1ZV9zdHIpOgorICAgICAgICAiIiJBIHV0aWxpdHkgZnVuY3Rpb24gdG8gZGVkdWNlIHRoZSBnZGIuVmFsdWUgdmFsdWUgZnJvbSBhIHN0cmluZworICAgICAgICByZXByZXNlbnRpbmcgdGhlIHZhbHVlLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAgIHZhbHVlX3N0cjogVGhlIHZhbHVlIHN0cmluZyBmcm9tIHdoaWNoIHRoZSBnZGIuVmFsdWUgdmFsdWUgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgIGJlIGRlZHVjZWQuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIFRoZSBkZWR1Y2VkIGdkYi5WYWx1ZSB2YWx1ZSBpZiBwb3NzaWJsZSwgTm9uZSBvdGhlcndpc2UuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZ2RiLnBhcnNlX2FuZF9ldmFsKHZhbHVlX3N0cikKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgRXhwbG9yZUNvbW1hbmQoZ2RiLkNvbW1hbmQpOgorICAgICIiIkV4cGxvcmUgYSB2YWx1ZSBvciBhIHR5cGUgdmFsaWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KKworICAgICAgIFVzYWdlOgorCisgICAgICAgICBleHBsb3JlIEFSRworCisgICAgICAgICAtIEFSRyBpcyBlaXRoZXIgYSB2YWxpZCBleHByZXNzaW9uIG9yIGEgdHlwZSBuYW1lLgorICAgICAgICAgLSBBdCBhbnkgc3RhZ2Ugb2YgZXhwbG9yYXRpb24sIGhpdCB0aGUgcmV0dXJuIGtleSAoaW5zdGVhZCBvZiBhCisgICAgICAgICAgIGNob2ljZSwgaWYgYW55KSB0byByZXR1cm4gdG8gdGhlIGVuY2xvc2luZyB0eXBlIG9yIHZhbHVlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihFeHBsb3JlQ29tbWFuZCwgc2VsZikuX19pbml0X18obmFtZSA9ICJleHBsb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfY2xhc3MgPSBnZGIuQ09NTUFORF9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gVHJ1ZSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnX3N0ciwgZnJvbV90dHkpOgorICAgICAgICBpZiBFeHBsb3JlVXRpbHMuY2hlY2tfYXJncygiZXhwbG9yZSIsIGFyZ19zdHIpID09IEZhbHNlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDaGVjayBpZiBpdCBpcyBhIHZhbHVlCisgICAgICAgIHZhbHVlID0gRXhwbG9yZVV0aWxzLmdldF92YWx1ZV9mcm9tX3N0cihhcmdfc3RyKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIEV4cGxvcmVyLmV4cGxvcmVfZXhwcihhcmdfc3RyLCB2YWx1ZSwgRmFsc2UpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIElmIGl0IGlzIG5vdCBhIHZhbHVlLCBjaGVjayBpZiBpdCBpcyBhIHR5cGUKKyAgICAgICAgZGF0YXR5cGUgPSBFeHBsb3JlVXRpbHMuZ2V0X3R5cGVfZnJvbV9zdHIoYXJnX3N0cikKKyAgICAgICAgaWYgZGF0YXR5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBFeHBsb3Jlci5leHBsb3JlX3R5cGUoYXJnX3N0ciwgZGF0YXR5cGUsIEZhbHNlKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBJZiBpdCBpcyBuZWl0aGVyIGEgdmFsdWUgbm9yIGEgdHlwZSwgcmFpc2UgYW4gZXJyb3IuCisgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJvcigKKyAgICAgICAgICAgICgiJyVzJyBuZWl0aGVyIGV2YWx1YXRlcyB0byBhIHZhbHVlIG5vciBpcyBhIHR5cGUgIgorICAgICAgICAgICAgICJpbiB0aGUgY3VycmVudCBjb250ZXh0LiIgJQorICAgICAgICAgICAgIGFyZ19zdHIpKQorCisKK2NsYXNzIEV4cGxvcmVWYWx1ZUNvbW1hbmQoZ2RiLkNvbW1hbmQpOgorICAgICIiIkV4cGxvcmUgdmFsdWUgb2YgYW4gZXhwcmVzc2lvbiB2YWxpZCBpbiB0aGUgY3VycmVudCBjb250ZXh0LgorCisgICAgICAgVXNhZ2U6CisKKyAgICAgICAgIGV4cGxvcmUgdmFsdWUgQVJHCisKKyAgICAgICAgIC0gQVJHIGlzIGEgdmFsaWQgZXhwcmVzc2lvbi4KKyAgICAgICAgIC0gQXQgYW55IHN0YWdlIG9mIGV4cGxvcmF0aW9uLCBoaXQgdGhlIHJldHVybiBrZXkgKGluc3RlYWQgb2YgYQorICAgICAgICAgICBjaG9pY2UsIGlmIGFueSkgdG8gcmV0dXJuIHRvIHRoZSBlbmNsb3NpbmcgdmFsdWUuCisgICAgIiIiCisgCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihFeHBsb3JlVmFsdWVDb21tYW5kLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG5hbWUgPSAiZXhwbG9yZSB2YWx1ZSIsIGNvbW1hbmRfY2xhc3MgPSBnZGIuQ09NTUFORF9EQVRBKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdfc3RyLCBmcm9tX3R0eSk6CisgICAgICAgIGlmIEV4cGxvcmVVdGlscy5jaGVja19hcmdzKCJleHBsb3JlIHZhbHVlIiwgYXJnX3N0cikgPT0gRmFsc2U6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB2YWx1ZSA9IEV4cGxvcmVVdGlscy5nZXRfdmFsdWVfZnJvbV9zdHIoYXJnX3N0cikKKyAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJvcigKKyAgICAgICAgICAgICAgICAoIiAnJXMnIGRvZXMgbm90IGV2YWx1YXRlIHRvIGEgdmFsdWUgaW4gdGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICAiY29udGV4dC4iICUKKyAgICAgICAgICAgICAgICAgYXJnX3N0cikpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBFeHBsb3Jlci5leHBsb3JlX2V4cHIoYXJnX3N0ciwgdmFsdWUsIEZhbHNlKQorCisKK2NsYXNzIEV4cGxvcmVUeXBlQ29tbWFuZChnZGIuQ29tbWFuZCk6ICAgICAgICAgICAgCisgICAgIiIiRXhwbG9yZSBhIHR5cGUgb3IgdGhlIHR5cGUgb2YgYW4gZXhwcmVzc2lvbiB2YWxpZCBpbiB0aGUgY3VycmVudAorICAgICAgIGNvbnRleHQuCisKKyAgICAgICBVc2FnZToKKworICAgICAgICAgZXhwbG9yZSB0eXBlIEFSRworCisgICAgICAgICAtIEFSRyBpcyBhIHZhbGlkIGV4cHJlc3Npb24gb3IgYSB0eXBlIG5hbWUuCisgICAgICAgICAtIEF0IGFueSBzdGFnZSBvZiBleHBsb3JhdGlvbiwgaGl0IHRoZSByZXR1cm4ga2V5IChpbnN0ZWFkIG9mIGEKKyAgICAgICAgICAgY2hvaWNlLCBpZiBhbnkpIHRvIHJldHVybiB0byB0aGUgZW5jbG9zaW5nIHR5cGUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKEV4cGxvcmVUeXBlQ29tbWFuZCwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBuYW1lID0gImV4cGxvcmUgdHlwZSIsIGNvbW1hbmRfY2xhc3MgPSBnZGIuQ09NTUFORF9EQVRBKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdfc3RyLCBmcm9tX3R0eSk6CisgICAgICAgIGlmIEV4cGxvcmVVdGlscy5jaGVja19hcmdzKCJleHBsb3JlIHR5cGUiLCBhcmdfc3RyKSA9PSBGYWxzZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRhdGF0eXBlID0gRXhwbG9yZVV0aWxzLmdldF90eXBlX2Zyb21fc3RyKGFyZ19zdHIpCisgICAgICAgIGlmIGRhdGF0eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV90eXBlKGFyZ19zdHIsIGRhdGF0eXBlLCBGYWxzZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHZhbHVlID0gRXhwbG9yZVV0aWxzLmdldF92YWx1ZV9mcm9tX3N0cihhcmdfc3RyKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaW50ICgiJyVzJyBpcyBvZiB0eXBlICclcycuIiAlIChhcmdfc3RyLCBzdHIodmFsdWUudHlwZSkpKQorICAgICAgICAgICAgRXhwbG9yZXIuZXhwbG9yZV90eXBlKHN0cih2YWx1ZS50eXBlKSwgdmFsdWUudHlwZSwgRmFsc2UpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByYWlzZSBnZGIuR2RiRXJyb3IoKCInJXMnIGlzIG5vdCBhIHR5cGUgb3IgdmFsdWUgaW4gdGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb250ZXh0LiIgJSBhcmdfc3RyKSkKKworCitFeHBsb3Jlci5pbml0X2VudigpCisKK0V4cGxvcmVDb21tYW5kKCkKK0V4cGxvcmVWYWx1ZUNvbW1hbmQoKQorRXhwbG9yZVR5cGVDb21tYW5kKCkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9wcmV0dHlfcHJpbnRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwM2UzYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5CkBAIC0wLDAgKzEsMzY4IEBACisjIFByZXR0eS1wcmludGVyIGNvbW1hbmRzLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIiIiR0RCIGNvbW1hbmRzIGZvciB3b3JraW5nIHdpdGggcHJldHR5LXByaW50ZXJzLiIiIgorCitpbXBvcnQgY29weQoraW1wb3J0IGdkYgoraW1wb3J0IHJlCisKKworZGVmIHBhcnNlX3ByaW50ZXJfcmVnZXhwcyhhcmcpOgorICAgICIiIkludGVybmFsIHV0aWxpdHkgdG8gcGFyc2UgYSBwcmV0dHktcHJpbnRlciBjb21tYW5kIGFyZ3YuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIGFyZzogVGhlIGFyZ3VtZW50cyB0byB0aGUgY29tbWFuZC4gIFRoZSBmb3JtYXQgaXM6CisgICAgICAgICAgICAgW29iamVjdC1yZWdleHAgW25hbWUtcmVnZXhwXV0uCisgICAgICAgICAgICAgSW5kaXZpZHVhbCBwcmludGVycyBpbiBhIGNvbGxlY3Rpb24gYXJlIG5hbWVkIGFzCisgICAgICAgICAgICAgcHJpbnRlci1uYW1lO3N1YnByaW50ZXItbmFtZS4KKworICAgIFJldHVybnM6CisgICAgICAgIFRoZSByZXN1bHQgaXMgYSAzLXR1cGxlIG9mIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGV4Y2VwdCB0aGF0CisgICAgICAgIHRoZSByZXN1bHRpbmcgY29tcGlsZWQgc3VicHJpbnRlciByZWdleHAgaXMgTm9uZSBpZiBub3QgcHJvdmlkZWQuCisKKyAgICBSYWlzZXM6CisgICAgICAgIFN5bnRheEVycm9yOiBhbiBlcnJvciBwcm9jZXNzaW5nIEFSRworICAgICIiIgorCisgICAgYXJndiA9IGdkYi5zdHJpbmdfdG9fYXJndihhcmcpOworICAgIGFyZ2MgPSBsZW4oYXJndikKKyAgICBvYmplY3RfcmVnZXhwID0gIiIgICMgbWF0Y2ggZXZlcnl0aGluZworICAgIG5hbWVfcmVnZXhwID0gIiIgICMgbWF0Y2ggZXZlcnl0aGluZworICAgIHN1Ym5hbWVfcmVnZXhwID0gTm9uZQorICAgIGlmIGFyZ2MgPiAzOgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidG9vIG1hbnkgYXJndW1lbnRzIikKKyAgICBpZiBhcmdjID49IDE6CisgICAgICAgIG9iamVjdF9yZWdleHAgPSBhcmd2WzBdCisgICAgaWYgYXJnYyA+PSAyOgorICAgICAgICBuYW1lX3N1Ym5hbWUgPSBhcmd2WzFdLnNwbGl0KCI7IiwgMSkKKyAgICAgICAgbmFtZV9yZWdleHAgPSBuYW1lX3N1Ym5hbWVbMF0KKyAgICAgICAgaWYgbGVuKG5hbWVfc3VibmFtZSkgPT0gMjoKKyAgICAgICAgICAgIHN1Ym5hbWVfcmVnZXhwID0gbmFtZV9zdWJuYW1lWzFdCisgICAgIyBUaGF0IHJlLmNvbXBpbGUgcmFpc2VzIFN5bnRheEVycm9yIHdhcyBkZXRlcm1pbmVkIGVtcGlyaWNhbGx5LgorICAgICMgV2UgY2F0Y2ggaXQgYW5kIHJlcmFpc2UgaXQgdG8gcHJvdmlkZSBhIHNsaWdodGx5IG1vcmUgdXNlZnVsCisgICAgIyBlcnJvciBtZXNzYWdlIGZvciB0aGUgdXNlci4KKyAgICB0cnk6CisgICAgICAgIG9iamVjdF9yZSA9IHJlLmNvbXBpbGUob2JqZWN0X3JlZ2V4cCkKKyAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJpbnZhbGlkIG9iamVjdCByZWdleHA6ICVzIiAlIG9iamVjdF9yZWdleHApCisgICAgdHJ5OgorICAgICAgICBuYW1lX3JlID0gcmUuY29tcGlsZSAobmFtZV9yZWdleHApCisgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiaW52YWxpZCBuYW1lIHJlZ2V4cDogJXMiICUgbmFtZV9yZWdleHApCisgICAgaWYgc3VibmFtZV9yZWdleHAgaXMgbm90IE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1Ym5hbWVfcmUgPSByZS5jb21waWxlKHN1Ym5hbWVfcmVnZXhwKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiaW52YWxpZCBzdWJuYW1lIHJlZ2V4cDogJXMiICUgc3VibmFtZV9yZWdleHApCisgICAgZWxzZToKKyAgICAgICAgc3VibmFtZV9yZSA9IE5vbmUKKyAgICByZXR1cm4ob2JqZWN0X3JlLCBuYW1lX3JlLCBzdWJuYW1lX3JlKQorCisKK2RlZiBwcmludGVyX2VuYWJsZWRfcChwcmludGVyKToKKyAgICAiIiJJbnRlcm5hbCB1dGlsaXR5IHRvIHNlZSBpZiBwcmludGVyIChvciBzdWJwcmludGVyKSBpcyBlbmFibGVkLiIiIgorICAgIGlmIGhhc2F0dHIocHJpbnRlciwgImVuYWJsZWQiKToKKyAgICAgICAgcmV0dXJuIHByaW50ZXIuZW5hYmxlZAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgSW5mb1ByZXR0eVByaW50ZXIoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGxpc3QgYWxsIHJlZ2lzdGVyZWQgcHJldHR5LXByaW50ZXJzLgorCisgICAgVXNhZ2U6IGluZm8gcHJldHR5LXByaW50ZXIgW29iamVjdC1yZWdleHAgW25hbWUtcmVnZXhwXV0KKworICAgIE9CSkVDVC1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgdGhlIG9iamVjdHMgdG8gbGlzdC4KKyAgICBPYmplY3RzIGFyZSAiZ2xvYmFsIiwgdGhlIHByb2dyYW0gc3BhY2UncyBmaWxlLCBhbmQgdGhlIG9iamZpbGVzIHdpdGhpbgorICAgIHRoYXQgcHJvZ3JhbSBzcGFjZS4KKworICAgIE5BTUUtUkVHRVhQIG1hdGNoZXMgdGhlIG5hbWUgb2YgdGhlIHByZXR0eS1wcmludGVyLgorICAgIEluZGl2aWR1YWwgcHJpbnRlcnMgaW4gYSBjb2xsZWN0aW9uIGFyZSBuYW1lZCBhcworICAgIHByaW50ZXItbmFtZTtzdWJwcmludGVyLW5hbWUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgorICAgICAgICBzdXBlcihJbmZvUHJldHR5UHJpbnRlciwgc2VsZikuX19pbml0X18oImluZm8gcHJldHR5LXByaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGVuYWJsZWRfc3RyaW5nKHByaW50ZXIpOgorICAgICAgICAiIiJSZXR1cm4gIiIgaWYgUFJJTlRFUiBpcyBlbmFibGVkLCBvdGhlcndpc2UgIiBbZGlzYWJsZWRdIi4iIiIKKyAgICAgICAgaWYgcHJpbnRlcl9lbmFibGVkX3AocHJpbnRlcik6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIFtkaXNhYmxlZF0iCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByaW50ZXJfbmFtZShwcmludGVyKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwcmludGVyJ3MgbmFtZS4iIiIKKyAgICAgICAgaWYgaGFzYXR0cihwcmludGVyLCAibmFtZSIpOgorICAgICAgICAgICAgcmV0dXJuIHByaW50ZXIubmFtZQorICAgICAgICBpZiBoYXNhdHRyKHByaW50ZXIsICJfX25hbWVfXyIpOgorICAgICAgICAgICAgcmV0dXJuIHByaW50ZXIuX19uYW1lX18KKyAgICAgICAgIyBUaGlzICJzaG91bGRuJ3QgaGFwcGVuIiwgYnV0IHRoZSBwdWJsaWMgQVBJIGFsbG93cyBmb3IKKyAgICAgICAgIyBkaXJlY3QgYWRkaXRpb25zIHRvIHRoZSBwcmV0dHktcHJpbnRlciBsaXN0LCBhbmQgd2Ugc2hvdWxkbid0CisgICAgICAgICMgY3Jhc2ggYmVjYXVzZSBzb21lb25lIGFkZGVkIGEgYm9ndXMgcHJpbnRlci4KKyAgICAgICAgIyBQbHVzIHdlIHdhbnQgdG8gZ2l2ZSB0aGUgdXNlciBhIHdheSB0byBsaXN0IHVua25vd24gcHJpbnRlcnMuCisgICAgICAgIHJldHVybiAidW5rbm93biIKKworICAgIGRlZiBsaXN0X3ByZXR0eV9wcmludGVycyhzZWxmLCBwcmV0dHlfcHJpbnRlcnMsIG5hbWVfcmUsIHN1Ym5hbWVfcmUpOgorICAgICAgICAiIiJQcmludCBhIGxpc3Qgb2YgcHJldHR5LXByaW50ZXJzLiIiIgorICAgICAgICAjIEEgcG90ZW50aWFsIGVuaGFuY2VtZW50IGlzIHRvIHByb3ZpZGUgYW4gb3B0aW9uIHRvIGxpc3QgcHJpbnRlcnMgaW4KKyAgICAgICAgIyAibG9va3VwIG9yZGVyIiAoaS5lLiB1bnNvcnRlZCkuCisgICAgICAgIHNvcnRlZF9wcmV0dHlfcHJpbnRlcnMgPSBzb3J0ZWQgKGNvcHkuY29weShwcmV0dHlfcHJpbnRlcnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLnByaW50ZXJfbmFtZSkKKyAgICAgICAgZm9yIHByaW50ZXIgaW4gc29ydGVkX3ByZXR0eV9wcmludGVyczoKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLnByaW50ZXJfbmFtZShwcmludGVyKQorICAgICAgICAgICAgZW5hYmxlZCA9IHNlbGYuZW5hYmxlZF9zdHJpbmcocHJpbnRlcikKKyAgICAgICAgICAgIGlmIG5hbWVfcmUubWF0Y2gobmFtZSk6CisgICAgICAgICAgICAgICAgcHJpbnQgKCIgICVzJXMiICUgKG5hbWUsIGVuYWJsZWQpKQorICAgICAgICAgICAgICAgIGlmIChoYXNhdHRyKHByaW50ZXIsICJzdWJwcmludGVycyIpIGFuZAorICAgICAgICAgICAgICAgICAgICBwcmludGVyLnN1YnByaW50ZXJzIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICAgICAgc29ydGVkX3N1YnByaW50ZXJzID0gc29ydGVkIChjb3B5LmNvcHkocHJpbnRlci5zdWJwcmludGVycyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5wcmludGVyX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJwcmludGVyIGluIHNvcnRlZF9zdWJwcmludGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3Qgc3VibmFtZV9yZSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym5hbWVfcmUubWF0Y2goc3VicHJpbnRlci5uYW1lKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCIgICAgJXMlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VicHJpbnRlci5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbmFibGVkX3N0cmluZyhzdWJwcmludGVyKSkpCisKKyAgICBkZWYgaW52b2tlMShzZWxmLCB0aXRsZSwgcHJpbnRlcl9saXN0LAorICAgICAgICAgICAgICAgIG9ial9uYW1lX3RvX21hdGNoLCBvYmplY3RfcmUsIG5hbWVfcmUsIHN1Ym5hbWVfcmUpOgorICAgICAgICAiIiJTdWJyb3V0aW5lIG9mIGludm9rZSB0byBzaW1wbGlmeSBpdC4iIiIKKyAgICAgICAgaWYgcHJpbnRlcl9saXN0IGFuZCBvYmplY3RfcmUubWF0Y2gob2JqX25hbWVfdG9fbWF0Y2gpOgorICAgICAgICAgICAgcHJpbnQgKHRpdGxlKQorICAgICAgICAgICAgc2VsZi5saXN0X3ByZXR0eV9wcmludGVycyhwcmludGVyX2xpc3QsIG5hbWVfcmUsIHN1Ym5hbWVfcmUpCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgorICAgICAgICAiIiJHREIgY2FsbHMgdGhpcyB0byBwZXJmb3JtIHRoZSBjb21tYW5kLiIiIgorICAgICAgICAob2JqZWN0X3JlLCBuYW1lX3JlLCBzdWJuYW1lX3JlKSA9IHBhcnNlX3ByaW50ZXJfcmVnZXhwcyhhcmcpCisgICAgICAgIHNlbGYuaW52b2tlMSgiZ2xvYmFsIHByZXR0eS1wcmludGVyczoiLCBnZGIucHJldHR5X3ByaW50ZXJzLAorICAgICAgICAgICAgICAgICAgICAgImdsb2JhbCIsIG9iamVjdF9yZSwgbmFtZV9yZSwgc3VibmFtZV9yZSkKKyAgICAgICAgY3AgPSBnZGIuY3VycmVudF9wcm9nc3BhY2UoKQorICAgICAgICBzZWxmLmludm9rZTEoInByb2dzcGFjZSAlcyBwcmV0dHktcHJpbnRlcnM6IiAlIGNwLmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgY3AucHJldHR5X3ByaW50ZXJzLCAicHJvZ3NwYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9yZSwgbmFtZV9yZSwgc3VibmFtZV9yZSkKKyAgICAgICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6CisgICAgICAgICAgICBzZWxmLmludm9rZTEoIiAgb2JqZmlsZSAlcyBwcmV0dHktcHJpbnRlcnM6IiAlIG9iamZpbGUuZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZmlsZS5wcmV0dHlfcHJpbnRlcnMsIG9iamZpbGUuZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3JlLCBuYW1lX3JlLCBzdWJuYW1lX3JlKQorCisKK2RlZiBjb3VudF9lbmFibGVkX3ByaW50ZXJzKHByZXR0eV9wcmludGVycyk6CisgICAgIiIiUmV0dXJuIGEgMi10dXBsZSBvZiBudW1iZXIgb2YgZW5hYmxlZCBhbmQgdG90YWwgcHJpbnRlcnMuIiIiCisgICAgZW5hYmxlZCA9IDAKKyAgICB0b3RhbCA9IDAKKyAgICBmb3IgcHJpbnRlciBpbiBwcmV0dHlfcHJpbnRlcnM6CisgICAgICAgIGlmIChoYXNhdHRyKHByaW50ZXIsICJzdWJwcmludGVycyIpCisgICAgICAgICAgICBhbmQgcHJpbnRlci5zdWJwcmludGVycyBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICBpZiBwcmludGVyX2VuYWJsZWRfcChwcmludGVyKToKKyAgICAgICAgICAgICAgICBmb3Igc3VicHJpbnRlciBpbiBwcmludGVyLnN1YnByaW50ZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBwcmludGVyX2VuYWJsZWRfcChzdWJwcmludGVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgKz0gMQorICAgICAgICAgICAgdG90YWwgKz0gbGVuKHByaW50ZXIuc3VicHJpbnRlcnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwcmludGVyX2VuYWJsZWRfcChwcmludGVyKToKKyAgICAgICAgICAgICAgICBlbmFibGVkICs9IDEKKyAgICAgICAgICAgIHRvdGFsICs9IDEKKyAgICByZXR1cm4gKGVuYWJsZWQsIHRvdGFsKQorCisKK2RlZiBjb3VudF9hbGxfZW5hYmxlZF9wcmludGVycygpOgorICAgICIiIlJldHVybiBhIDItdHVibGUgb2YgdGhlIGVuYWJsZWQgc3RhdGUgYW5kIHRvdGFsIG51bWJlciBvZiBhbGwgcHJpbnRlcnMuCisgICAgVGhpcyBpbmNsdWRlcyBzdWJwcmludGVycy4KKyAgICAiIiIKKyAgICBlbmFibGVkX2NvdW50ID0gMAorICAgIHRvdGFsX2NvdW50ID0gMAorICAgICh0X2VuYWJsZWQsIHRfdG90YWwpID0gY291bnRfZW5hYmxlZF9wcmludGVycyhnZGIucHJldHR5X3ByaW50ZXJzKQorICAgIGVuYWJsZWRfY291bnQgKz0gdF9lbmFibGVkCisgICAgdG90YWxfY291bnQgKz0gdF90b3RhbAorICAgICh0X2VuYWJsZWQsIHRfdG90YWwpID0gY291bnRfZW5hYmxlZF9wcmludGVycyhnZGIuY3VycmVudF9wcm9nc3BhY2UoKS5wcmV0dHlfcHJpbnRlcnMpCisgICAgZW5hYmxlZF9jb3VudCArPSB0X2VuYWJsZWQKKyAgICB0b3RhbF9jb3VudCArPSB0X3RvdGFsCisgICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6CisgICAgICAgICh0X2VuYWJsZWQsIHRfdG90YWwpID0gY291bnRfZW5hYmxlZF9wcmludGVycyhvYmpmaWxlLnByZXR0eV9wcmludGVycykKKyAgICAgICAgZW5hYmxlZF9jb3VudCArPSB0X2VuYWJsZWQKKyAgICAgICAgdG90YWxfY291bnQgKz0gdF90b3RhbAorICAgIHJldHVybiAoZW5hYmxlZF9jb3VudCwgdG90YWxfY291bnQpCisKKworZGVmIHBsdXJhbGl6ZSh0ZXh0LCBuLCBzdWZmaXg9InMiKToKKyAgICAiIiJSZXR1cm4gVEVYVCBwbHVyYWxpemVkIGlmIE4gIT0gMS4iIiIKKyAgICBpZiBuICE9IDE6CisgICAgICAgIHJldHVybiAiJXMlcyIgJSAodGV4dCwgc3VmZml4KQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiB0ZXh0CisKKworZGVmIHNob3dfcHJldHR5X3ByaW50ZXJfZW5hYmxlZF9zdW1tYXJ5KCk6CisgICAgIiIiUHJpbnQgdGhlIG51bWJlciBvZiBwcmludGVycyBlbmFibGVkL2Rpc2FibGVkLgorICAgIFdlIGNvdW50IHN1YnByaW50ZXJzIGluZGl2aWR1YWxseS4KKyAgICAiIiIKKyAgICAoZW5hYmxlZF9jb3VudCwgdG90YWxfY291bnQpID0gY291bnRfYWxsX2VuYWJsZWRfcHJpbnRlcnMoKQorICAgIHByaW50ICgiJWQgb2YgJWQgcHJpbnRlcnMgZW5hYmxlZCIgJSAoZW5hYmxlZF9jb3VudCwgdG90YWxfY291bnQpKQorCisKK2RlZiBkb19lbmFibGVfcHJldHR5X3ByaW50ZXJfMSAocHJldHR5X3ByaW50ZXJzLCBuYW1lX3JlLCBzdWJuYW1lX3JlLCBmbGFnKToKKyAgICAiIiJXb3JrZXIgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBwcmV0dHktcHJpbnRlcnMuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHByZXR0eV9wcmludGVyczogbGlzdCBvZiBwcmV0dHktcHJpbnRlcnMKKyAgICAgICAgbmFtZV9yZTogcmVndWxhci1leHByZXNzaW9uIG9iamVjdCB0byBzZWxlY3QgcHJpbnRlcnMKKyAgICAgICAgc3VibmFtZV9yZTogcmVndWxhciBleHByZXNzaW9uIG9iamVjdCB0byBzZWxlY3Qgc3VicHJpbnRlcnMgb3IgTm9uZQorICAgICAgICAgICAgICAgICAgICBpZiBhbGwgYXJlIGFmZmVjdGVkCisgICAgICAgIGZsYWc6IFRydWUgZm9yIEVuYWJsZSwgRmFsc2UgZm9yIERpc2FibGUKKworICAgIFJldHVybnM6CisgICAgICAgIFRoZSBudW1iZXIgb2YgcHJpbnRlcnMgYWZmZWN0ZWQuCisgICAgICAgIFRoaXMgaXMganVzdCBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBmb3IgdGhlIHVzZXIuCisgICAgIiIiCisgICAgdG90YWwgPSAwCisgICAgZm9yIHByaW50ZXIgaW4gcHJldHR5X3ByaW50ZXJzOgorICAgICAgICBpZiAoaGFzYXR0cihwcmludGVyLCAibmFtZSIpIGFuZCBuYW1lX3JlLm1hdGNoKHByaW50ZXIubmFtZSkgb3IKKyAgICAgICAgICAgIGhhc2F0dHIocHJpbnRlciwgIl9fbmFtZV9fIikgYW5kIG5hbWVfcmUubWF0Y2gocHJpbnRlci5fX25hbWVfXykpOgorICAgICAgICAgICAgaWYgKGhhc2F0dHIocHJpbnRlciwgInN1YnByaW50ZXJzIikgYW5kCisgICAgICAgICAgICAgICAgcHJpbnRlci5zdWJwcmludGVycyBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgaWYgbm90IHN1Ym5hbWVfcmU6CisgICAgICAgICAgICAgICAgICAgICMgT25seSByZWNvcmQgcHJpbnRlcnMgdGhhdCBjaGFuZ2Ugc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIGlmIHByaW50ZXJfZW5hYmxlZF9wKHByaW50ZXIpICE9IGZsYWc6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3VicHJpbnRlciBpbiBwcmludGVyLnN1YnByaW50ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByaW50ZXJfZW5hYmxlZF9wKHN1YnByaW50ZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSAxCisgICAgICAgICAgICAgICAgICAgICMgTk9URTogV2UgcHJlc2VydmUgaW5kaXZpZHVhbCBzdWJwcmludGVyIHNldHRpbmdzLgorICAgICAgICAgICAgICAgICAgICBwcmludGVyLmVuYWJsZWQgPSBmbGFnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBOT1RFOiBXaGV0aGVyIHRoaXMgYWN0dWFsbHkgZGlzYWJsZXMgdGhlIHN1YnByaW50ZXIKKyAgICAgICAgICAgICAgICAgICAgIyBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHByaW50ZXIncyBsb29rdXAgZnVuY3Rpb24gc3VwcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgImVuYWJsZSIgQVBJLiAgV2UgY2FuIG9ubHkgYXNzdW1lIGl0IGRvZXMuCisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJwcmludGVyIGluIHByaW50ZXIuc3VicHJpbnRlcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdWJuYW1lX3JlLm1hdGNoKHN1YnByaW50ZXIubmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPbmx5IHJlY29yZCBwcmludGVycyB0aGF0IGNoYW5nZSBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmludGVyX2VuYWJsZWRfcChwcmludGVyKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVyX2VuYWJsZWRfcChzdWJwcmludGVyKSAhPSBmbGFnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcmludGVyLmVuYWJsZWQgPSBmbGFnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhpcyBwcmludGVyIGhhcyBubyBzdWJwcmludGVycy4KKyAgICAgICAgICAgICAgICAjIElmIHRoZSB1c2VyIGRvZXMgImRpc2FibGUgcHJldHR5LXByaW50ZXIgLiogLiogZm9vIgorICAgICAgICAgICAgICAgICMgc2hvdWxkIHdlIGRpc2FibGUgcHJpbnRlcnMgdGhhdCBkb24ndCBoYXZlIHN1YnByaW50ZXJzPworICAgICAgICAgICAgICAgICMgSG93IGRvIHdlIGFwcGx5ICJmb28iIGluIHRoaXMgY29udGV4dD8gIFNpbmNlIHRoZXJlIGlzIG5vCisgICAgICAgICAgICAgICAgIyAiZm9vIiBzdWJwcmludGVyIGl0IGZlZWxzIGxpa2Ugd2Ugc2hvdWxkIHNraXAgdGhpcyBwcmludGVyLgorICAgICAgICAgICAgICAgICMgVGhlcmUncyBzdGlsbCB0aGUgaXNzdWUgb2YgaG93IHRvIGhhbmRsZQorICAgICAgICAgICAgICAgICMgImRpc2FibGUgcHJldHR5LXByaW50ZXIgLiogLiogLioiLCBhbmQgZXZlcnkgb3RoZXIgdmFyaWF0aW9uCisgICAgICAgICAgICAgICAgIyB0aGF0IGNhbiBtYXRjaCBldmVyeXRoaW5nLiAgRm9yIG5vdyBwdW50IGFuZCBvbmx5IHN1cHBvcnQKKyAgICAgICAgICAgICAgICAjICJkaXNhYmxlIHByZXR0eS1wcmludGVyIC4qIC4qIiAoaS5lLiBzdWJuYW1lIGlzIGVsaWRlZCkKKyAgICAgICAgICAgICAgICAjIHRvIGRpc2FibGUgZXZlcnl0aGluZy4KKyAgICAgICAgICAgICAgICBpZiBub3Qgc3VibmFtZV9yZToKKyAgICAgICAgICAgICAgICAgICAgIyBPbmx5IHJlY29yZCBwcmludGVycyB0aGF0IGNoYW5nZSBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgcHJpbnRlcl9lbmFibGVkX3AocHJpbnRlcikgIT0gZmxhZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRlci5lbmFibGVkID0gZmxhZworICAgIHJldHVybiB0b3RhbAorCisKK2RlZiBkb19lbmFibGVfcHJldHR5X3ByaW50ZXIgKGFyZywgZmxhZyk6CisgICAgIiIiSW50ZXJuYWwgd29ya2VyIGZvciBlbmFibGluZy9kaXNhYmxpbmcgcHJldHR5LXByaW50ZXJzLiIiIgorICAgIChvYmplY3RfcmUsIG5hbWVfcmUsIHN1Ym5hbWVfcmUpID0gcGFyc2VfcHJpbnRlcl9yZWdleHBzKGFyZykKKworICAgIHRvdGFsID0gMAorICAgIGlmIG9iamVjdF9yZS5tYXRjaCgiZ2xvYmFsIik6CisgICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9wcmV0dHlfcHJpbnRlcl8xKGdkYi5wcmV0dHlfcHJpbnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfcmUsIHN1Ym5hbWVfcmUsIGZsYWcpCisgICAgY3AgPSBnZGIuY3VycmVudF9wcm9nc3BhY2UoKQorICAgIGlmIG9iamVjdF9yZS5tYXRjaCgicHJvZ3NwYWNlIik6CisgICAgICAgIHRvdGFsICs9IGRvX2VuYWJsZV9wcmV0dHlfcHJpbnRlcl8xKGNwLnByZXR0eV9wcmludGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9yZSwgc3VibmFtZV9yZSwgZmxhZykKKyAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKyAgICAgICAgaWYgb2JqZWN0X3JlLm1hdGNoKG9iamZpbGUuZmlsZW5hbWUpOgorICAgICAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX3ByZXR0eV9wcmludGVyXzEob2JqZmlsZS5wcmV0dHlfcHJpbnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3JlLCBzdWJuYW1lX3JlLCBmbGFnKQorCisgICAgaWYgZmxhZzoKKyAgICAgICAgc3RhdGUgPSAiZW5hYmxlZCIKKyAgICBlbHNlOgorICAgICAgICBzdGF0ZSA9ICJkaXNhYmxlZCIKKyAgICBwcmludCAoIiVkICVzICVzIiAlICh0b3RhbCwgcGx1cmFsaXplKCJwcmludGVyIiwgdG90YWwpLCBzdGF0ZSkpCisKKyAgICAjIFByaW50IHRoZSB0b3RhbCBsaXN0IG9mIHByaW50ZXJzIGN1cnJlbnRseSBlbmFibGVkL2Rpc2FibGVkLgorICAgICMgVGhpcyBpcyB0byBmdXJ0aGVyIGFzc2lzdCB0aGUgdXNlciBpbiBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSByZXN1bHQKKyAgICAjIGlzIGV4cGVjdGVkLiAgU2luY2Ugd2UgdXNlIHJlZ2V4cHMgdG8gc2VsZWN0IGl0J3MgdXNlZnVsLgorICAgIHNob3dfcHJldHR5X3ByaW50ZXJfZW5hYmxlZF9zdW1tYXJ5KCkKKworCisjIEVuYWJsZS9EaXNhYmxlIG9uZSBvciBtb3JlIHByZXR0eS1wcmludGVycy4KKyMKKyMgVGhpcyBpcyBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gYSBicm9rZW4gcHJldHR5LXByaW50ZXIgaXMgc2hpcHBlZC9pbnN0YWxsZWQKKyMgYW5kIHRoZSB1c2VyIHdhbnRzIHRvIGRpc2FibGUgdGhhdCBwcmludGVyIHdpdGhvdXQgZGlzYWJsaW5nIGFsbCB0aGUgb3RoZXIKKyMgcHJpbnRlcnMuCisjCisjIEEgdXNlZnVsIGFkZGl0aW9uIHdvdWxkIGJlIC12ICh2ZXJib3NlKSB0byBzaG93IGVhY2ggcHJpbnRlciBhZmZlY3RlZC4KKworY2xhc3MgRW5hYmxlUHJldHR5UHJpbnRlciAoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGVuYWJsZSB0aGUgc3BlY2lmaWVkIHByZXR0eS1wcmludGVyLgorCisgICAgVXNhZ2U6IGVuYWJsZSBwcmV0dHktcHJpbnRlciBbb2JqZWN0LXJlZ2V4cCBbbmFtZS1yZWdleHBdXQorCisgICAgT0JKRUNULVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgb2JqZWN0cyB0byBleGFtaW5lLgorICAgIE9iamVjdHMgYXJlICJnbG9iYWwiLCB0aGUgcHJvZ3JhbSBzcGFjZSdzIGZpbGUsIGFuZCB0aGUgb2JqZmlsZXMgd2l0aGluCisgICAgdGhhdCBwcm9ncmFtIHNwYWNlLgorCisgICAgTkFNRS1SRUdFWFAgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgcHJldHR5LXByaW50ZXIuCisgICAgSW5kaXZpZHVhbCBwcmludGVycyBpbiBhIGNvbGxlY3Rpb24gYXJlIG5hbWVkIGFzCisgICAgcHJpbnRlci1uYW1lO3N1YnByaW50ZXItbmFtZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoRW5hYmxlUHJldHR5UHJpbnRlciwgc2VsZikuX19pbml0X18oImVuYWJsZSBwcmV0dHktcHJpbnRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRBKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAgIiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUgY29tbWFuZC4iIiIKKyAgICAgICAgZG9fZW5hYmxlX3ByZXR0eV9wcmludGVyKGFyZywgVHJ1ZSkKKworCitjbGFzcyBEaXNhYmxlUHJldHR5UHJpbnRlciAoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGRpc2FibGUgdGhlIHNwZWNpZmllZCBwcmV0dHktcHJpbnRlci4KKworICAgIFVzYWdlOiBkaXNhYmxlIHByZXR0eS1wcmludGVyIFtvYmplY3QtcmVnZXhwIFtuYW1lLXJlZ2V4cF1dCisKKyAgICBPQkpFQ1QtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHRoZSBvYmplY3RzIHRvIGV4YW1pbmUuCisgICAgT2JqZWN0cyBhcmUgImdsb2JhbCIsIHRoZSBwcm9ncmFtIHNwYWNlJ3MgZmlsZSwgYW5kIHRoZSBvYmpmaWxlcyB3aXRoaW4KKyAgICB0aGF0IHByb2dyYW0gc3BhY2UuCisKKyAgICBOQU1FLVJFR0VYUCBtYXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBwcmV0dHktcHJpbnRlci4KKyAgICBJbmRpdmlkdWFsIHByaW50ZXJzIGluIGEgY29sbGVjdGlvbiBhcmUgbmFtZWQgYXMKKyAgICBwcmludGVyLW5hbWU7c3VicHJpbnRlci1uYW1lLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihEaXNhYmxlUHJldHR5UHJpbnRlciwgc2VsZikuX19pbml0X18oImRpc2FibGUgcHJldHR5LXByaW50ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgICIiIkdEQiBjYWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCisgICAgICAgIGRvX2VuYWJsZV9wcmV0dHlfcHJpbnRlcihhcmcsIEZhbHNlKQorCisKK2RlZiByZWdpc3Rlcl9wcmV0dHlfcHJpbnRlcl9jb21tYW5kcygpOgorICAgICIiIkNhbGwgZnJvbSBhIHRvcCBsZXZlbCBzY3JpcHQgdG8gaW5zdGFsbCB0aGUgcHJldHR5LXByaW50ZXIgY29tbWFuZHMuIiIiCisgICAgSW5mb1ByZXR0eVByaW50ZXIoKQorICAgIEVuYWJsZVByZXR0eVByaW50ZXIoKQorICAgIERpc2FibGVQcmV0dHlQcmludGVyKCkKKworcmVnaXN0ZXJfcHJldHR5X3ByaW50ZXJfY29tbWFuZHMoKQpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9wcm9tcHQucHkgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL3Byb21wdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTRlNDBjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9wcm9tcHQucHkKQEAgLTAsMCArMSw2NiBAQAorIyBFeHRlbmRlZCBwcm9tcHQuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisiIiJHREIgY29tbWFuZCBmb3Igd29ya2luZyB3aXRoIGV4dGVuZGVkIHByb21wdHMuIiIiCisKK2ltcG9ydCBnZGIKK2ltcG9ydCBnZGIucHJvbXB0CisKK2NsYXNzIF9FeHRlbmRlZFByb21wdChnZGIuUGFyYW1ldGVyKToKKworICAgICIiIlNldCB0aGUgZXh0ZW5kZWQgcHJvbXB0LgorCitVc2FnZTogc2V0IGV4dGVuZGVkLXByb21wdCBWQUxVRQorCitTdWJzdGl0dXRpb25zIGFyZSBhcHBsaWVkIHRvIFZBTFVFIHRvIGNvbXB1dGUgdGhlIHJlYWwgcHJvbXB0LgorCitUaGUgY3VycmVudGx5IGRlZmluZWQgc3Vic3RpdHV0aW9ucyBhcmU6CisKKyIiIgorICAgICMgQWRkIHRoZSBwcm9tcHQgbGlicmFyeSdzIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBoZWxwIHRvIHRoZQorICAgICMgX19kb2NfXyBzdHJpbmcuCisgICAgX19kb2NfXyA9IF9fZG9jX18gKyBnZGIucHJvbXB0LnByb21wdF9oZWxwKCkKKworICAgIHNldF9kb2MgPSAiU2V0IHRoZSBleHRlbmRlZCBwcm9tcHQuIgorICAgIHNob3dfZG9jID0gIlNob3cgdGhlIGV4dGVuZGVkIHByb21wdC4iCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKF9FeHRlbmRlZFByb21wdCwgc2VsZikuX19pbml0X18oImV4dGVuZGVkLXByb21wdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfU1VQUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuUEFSQU1fU1RSSU5HX05PRVNDQVBFKQorICAgICAgICBzZWxmLnZhbHVlID0gJycKKyAgICAgICAgc2VsZi5ob29rX3NldCA9IEZhbHNlCisKKyAgICBkZWYgZ2V0X3Nob3dfc3RyaW5nIChzZWxmLCBwdmFsdWUpOgorICAgICAgICBpZiBzZWxmLnZhbHVlIGlzIG5vdCAnJzoKKyAgICAgICAgICAgcmV0dXJuICJUaGUgZXh0ZW5kZWQgcHJvbXB0IGlzOiAiICsgc2VsZi52YWx1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICByZXR1cm4gIlRoZSBleHRlbmRlZCBwcm9tcHQgaXMgbm90IHNldC4iCisKKyAgICBkZWYgZ2V0X3NldF9zdHJpbmcgKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmhvb2tfc2V0ID09IEZhbHNlOgorICAgICAgICAgICBnZGIucHJvbXB0X2hvb2sgPSBzZWxmLmJlZm9yZV9wcm9tcHRfaG9vaworICAgICAgICAgICBzZWxmLmhvb2tfc2V0ID0gVHJ1ZQorICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBiZWZvcmVfcHJvbXB0X2hvb2soc2VsZiwgY3VycmVudCk6CisgICAgICAgIGlmIHNlbGYudmFsdWUgaXMgbm90ICcnOgorICAgICAgICAgICAgbmV3cHJvbXB0ID0gZ2RiLnByb21wdC5zdWJzdGl0dXRlX3Byb21wdChzZWxmLnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG5ld3Byb21wdC5yZXBsYWNlKCdcXCcsICdcXFxcJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKK19FeHRlbmRlZFByb21wdCgpCmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmMmVhMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvdHlwZV9wcmludGVycy5weQpAQCAtMCwwICsxLDEyNSBAQAorIyBUeXBlIHByaW50ZXIgY29tbWFuZHMuCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitpbXBvcnQgY29weQoraW1wb3J0IGdkYgorCisiIiJHREIgY29tbWFuZHMgZm9yIHdvcmtpbmcgd2l0aCB0eXBlLXByaW50ZXJzLiIiIgorCitjbGFzcyBJbmZvVHlwZVByaW50ZXIoZ2RiLkNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGxpc3QgYWxsIHJlZ2lzdGVyZWQgdHlwZS1wcmludGVycy4KKworICAgIFVzYWdlOiBpbmZvIHR5cGUtcHJpbnRlcnMKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisgICAgICAgIHN1cGVyKEluZm9UeXBlUHJpbnRlciwgc2VsZikuX19pbml0X18oImluZm8gdHlwZS1wcmludGVycyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKworICAgIGRlZiBsaXN0X3R5cGVfcHJpbnRlcnMoc2VsZiwgdHlwZV9wcmludGVycyk6CisgICAgICAgICIiIlByaW50IGEgbGlzdCBvZiB0eXBlIHByaW50ZXJzLiIiIgorICAgICAgICAjIEEgcG90ZW50aWFsIGVuaGFuY2VtZW50IGlzIHRvIHByb3ZpZGUgYW4gb3B0aW9uIHRvIGxpc3QgcHJpbnRlcnMgaW4KKyAgICAgICAgIyAibG9va3VwIG9yZGVyIiAoaS5lLiB1bnNvcnRlZCkuCisgICAgICAgIHNvcnRlZF90eXBlX3ByaW50ZXJzID0gc29ydGVkIChjb3B5LmNvcHkodHlwZV9wcmludGVycyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBsYW1iZGEgeDogeC5uYW1lKQorICAgICAgICBmb3IgcHJpbnRlciBpbiBzb3J0ZWRfdHlwZV9wcmludGVyczoKKyAgICAgICAgICAgIGlmIHByaW50ZXIuZW5hYmxlZDoKKyAgICAgICAgICAgICAgICBlbmFibGVkID0gJycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW5hYmxlZCA9ICIgW2Rpc2FibGVkXSIKKyAgICAgICAgICAgIHByaW50ICgiICAlcyVzIiAlIChwcmludGVyLm5hbWUsIGVuYWJsZWQpKQorCisgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKyAgICAgICAgIiIiR0RCIGNhbGxzIHRoaXMgdG8gcGVyZm9ybSB0aGUgY29tbWFuZC4iIiIKKyAgICAgICAgc2VwID0gJycKKyAgICAgICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6CisgICAgICAgICAgICBpZiBvYmpmaWxlLnR5cGVfcHJpbnRlcnM6CisgICAgICAgICAgICAgICAgcHJpbnQgKCIlc1R5cGUgcHJpbnRlcnMgZm9yICVzOiIgJSAoc2VwLCBvYmpmaWxlLm5hbWUpKQorICAgICAgICAgICAgICAgIHNlbGYubGlzdF90eXBlX3ByaW50ZXJzKG9iamZpbGUudHlwZV9wcmludGVycykKKyAgICAgICAgICAgICAgICBzZXAgPSAnXG4nCisgICAgICAgIGlmIGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLnR5cGVfcHJpbnRlcnM6CisgICAgICAgICAgICBwcmludCAoIiVzVHlwZSBwcmludGVycyBmb3IgcHJvZ3JhbSBzcGFjZToiICUgc2VwKQorICAgICAgICAgICAgc2VsZi5saXN0X3R5cGVfcHJpbnRlcnMoZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkudHlwZV9wcmludGVycykKKyAgICAgICAgICAgIHNlcCA9ICdcbicKKyAgICAgICAgaWYgZ2RiLnR5cGVfcHJpbnRlcnM6CisgICAgICAgICAgICBwcmludCAoIiVzR2xvYmFsIHR5cGUgcHJpbnRlcnM6IiAlIHNlcCkKKyAgICAgICAgICAgIHNlbGYubGlzdF90eXBlX3ByaW50ZXJzKGdkYi50eXBlX3ByaW50ZXJzKQorCitjbGFzcyBfRW5hYmxlT3JEaXNhYmxlQ29tbWFuZChnZGIuQ29tbWFuZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNldHRpbmcsIG5hbWUpOgorICAgICAgICBzdXBlcihfRW5hYmxlT3JEaXNhYmxlQ29tbWFuZCwgc2VsZikuX19pbml0X18obmFtZSwgZ2RiLkNPTU1BTkRfREFUQSkKKyAgICAgICAgc2VsZi5zZXR0aW5nID0gc2V0dGluZworCisgICAgZGVmIHNldF9zb21lKHNlbGYsIG5hbWUsIHByaW50ZXJzKToKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgZm9yIHAgaW4gcHJpbnRlcnM6CisgICAgICAgICAgICBpZiBuYW1lID09IHAubmFtZToKKyAgICAgICAgICAgICAgICBwLmVuYWJsZWQgPSBzZWxmLnNldHRpbmcKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBUcnVlCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisgICAgICAgICIiIkdEQiBjYWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCisgICAgICAgIGZvciBuYW1lIGluIGFyZy5zcGxpdCgpOgorICAgICAgICAgICAgb2sgPSBGYWxzZQorICAgICAgICAgICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXRfc29tZShuYW1lLCBvYmpmaWxlLnR5cGVfcHJpbnRlcnMpOgorICAgICAgICAgICAgICAgICAgICBvayA9IFRydWUKKyAgICAgICAgICAgIGlmIHNlbGYuc2V0X3NvbWUobmFtZSwgZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkudHlwZV9wcmludGVycyk6CisgICAgICAgICAgICAgICAgb2sgPSBUcnVlCisgICAgICAgICAgICBpZiBzZWxmLnNldF9zb21lKG5hbWUsIGdkYi50eXBlX3ByaW50ZXJzKToKKyAgICAgICAgICAgICAgICBvayA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBvazoKKyAgICAgICAgICAgICAgICBwcmludCAoIk5vIHR5cGUgcHJpbnRlciBuYW1lZCAnJXMnIiAlIG5hbWUpCisKKyAgICBkZWYgYWRkX3NvbWUoc2VsZiwgcmVzdWx0LCB3b3JkLCBwcmludGVycyk6CisgICAgICAgIGZvciBwIGluIHByaW50ZXJzOgorICAgICAgICAgICAgaWYgcC5uYW1lLnN0YXJ0c3dpdGgod29yZCk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwLm5hbWUpCisKKyAgICBkZWYgY29tcGxldGUoc2VsZiwgdGV4dCwgd29yZCk6CisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgorICAgICAgICAgICAgc2VsZi5hZGRfc29tZShyZXN1bHQsIHdvcmQsIG9iamZpbGUudHlwZV9wcmludGVycykKKyAgICAgICAgc2VsZi5hZGRfc29tZShyZXN1bHQsIHdvcmQsIGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLnR5cGVfcHJpbnRlcnMpCisgICAgICAgIHNlbGYuYWRkX3NvbWUocmVzdWx0LCB3b3JkLCBnZGIudHlwZV9wcmludGVycykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCitjbGFzcyBFbmFibGVUeXBlUHJpbnRlcihfRW5hYmxlT3JEaXNhYmxlQ29tbWFuZCk6CisgICAgIiIiR0RCIGNvbW1hbmQgdG8gZW5hYmxlIHRoZSBzcGVjaWZpZWQgdHlwZSBwcmludGVyLgorCisgICAgVXNhZ2U6IGVuYWJsZSB0eXBlLXByaW50ZXIgTkFNRQorCisgICAgTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZS1wcmludGVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihFbmFibGVUeXBlUHJpbnRlciwgc2VsZikuX19pbml0X18oVHJ1ZSwgImVuYWJsZSB0eXBlLXByaW50ZXIiKQorCitjbGFzcyBEaXNhYmxlVHlwZVByaW50ZXIoX0VuYWJsZU9yRGlzYWJsZUNvbW1hbmQpOgorICAgICIiIkdEQiBjb21tYW5kIHRvIGRpc2FibGUgdGhlIHNwZWNpZmllZCB0eXBlLXByaW50ZXIuCisKKyAgICBVc2FnZTogZGlzYWJsZSB0eXBlLXByaW50ZXIgTkFNRQorCisgICAgTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZS1wcmludGVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihEaXNhYmxlVHlwZVByaW50ZXIsIHNlbGYpLl9faW5pdF9fKEZhbHNlLCAiZGlzYWJsZSB0eXBlLXByaW50ZXIiKQorCitJbmZvVHlwZVByaW50ZXIoKQorRW5hYmxlVHlwZVByaW50ZXIoKQorRGlzYWJsZVR5cGVQcmludGVyKCkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL19faW5pdF9fLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvZnVuY3Rpb24vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1YmZmOQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9mdW5jdGlvbi9zdHJmbnMucHkgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9mdW5jdGlvbi9zdHJmbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkZjk1MAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL3N0cmZucy5weQpAQCAtMCwwICsxLDEwOCBAQAorIyBVc2VmdWwgZ2RiIHN0cmluZyBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCisjIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisiIiIkX21lbWVxLCAkX3N0cmxlbiwgJF9zdHJlcSwgJF9yZWdleCIiIgorCitpbXBvcnQgZ2RiCitpbXBvcnQgcmUKKworCitjbGFzcyBfTWVtRXEoZ2RiLkZ1bmN0aW9uKToKKyAgIiIiJF9tZW1lcSAtIGNvbXBhcmUgYnl0ZXMgb2YgbWVtb3J5CisKK1VzYWdlOgorICAkX21lbWVxKGEsIGIsIGxlbikKKworUmV0dXJuczoKKyAgVHJ1ZSBpZiBsZW4gYnl0ZXMgYXQgYSBhbmQgYiBjb21wYXJlIGVxdWFsbHkuCisiIiIKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHN1cGVyKF9NZW1FcSwgc2VsZikuX19pbml0X18oIl9tZW1lcSIpCisKKyAgZGVmIGludm9rZShzZWxmLCBhLCBiLCBsZW5ndGgpOgorICAgIGlmIGxlbmd0aCA8IDA6CisgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsZW5ndGggbXVzdCBiZSBub24tbmVnYXRpdmUiKQorICAgIGlmIGxlbmd0aCA9PSAwOgorICAgICAgcmV0dXJuIFRydWUKKyAgICAjIFRoZSBhcmd1bWVudChzKSB0byB2ZWN0b3IgYXJlIFtsb3dfYm91bmQsXWhpZ2hfYm91bmQuCisgICAgYnl0ZV92ZWN0b3IgPSBnZGIubG9va3VwX3R5cGUoImNoYXIiKS52ZWN0b3IobGVuZ3RoIC0gMSkKKyAgICBwdHJfYnl0ZV92ZWN0b3IgPSBieXRlX3ZlY3Rvci5wb2ludGVyKCkKKyAgICBhX3B0ciA9IGEucmVpbnRlcnByZXRfY2FzdChwdHJfYnl0ZV92ZWN0b3IpCisgICAgYl9wdHIgPSBiLnJlaW50ZXJwcmV0X2Nhc3QocHRyX2J5dGVfdmVjdG9yKQorICAgIHJldHVybiBhX3B0ci5kZXJlZmVyZW5jZSgpID09IGJfcHRyLmRlcmVmZXJlbmNlKCkKKworCitjbGFzcyBfU3RyTGVuKGdkYi5GdW5jdGlvbik6CisgICIiIiRfc3RybGVuIC0gY29tcHV0ZSBzdHJpbmcgbGVuZ3RoCisKK1VzYWdlOgorICAkX3N0cmxlbihhKQorCitSZXR1cm5zOgorICBMZW5ndGggb2Ygc3RyaW5nIGEsIGFzc3VtZWQgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuCisiIiIKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHN1cGVyKF9TdHJMZW4sIHNlbGYpLl9faW5pdF9fKCJfc3RybGVuIikKKworICBkZWYgaW52b2tlKHNlbGYsIGEpOgorICAgIHMgPSBhLnN0cmluZygpCisgICAgcmV0dXJuIGxlbihzKQorCisKK2NsYXNzIF9TdHJFcShnZGIuRnVuY3Rpb24pOgorICAiIiIkX3N0cmVxIC0gY2hlY2sgc3RyaW5nIGVxdWFsaXR5CisKK1VzYWdlOgorICAkX3N0cmVxKGEsIGIpCisKK1JldHVybnM6CisgIFRydWUgaWYgYSBhbmQgYiBhcmUgaWRlbnRpY2FsIHN0cmluZ3MgaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuCisKK0V4YW1wbGUgKGFtZDY0LWxpbnV4KToKKyAgY2F0Y2ggc3lzY2FsbCBvcGVuCisgIGNvbmQgJGJwbnVtICRfc3RyZXEoKGNoYXIqKSAkcmRpLCAiZm9vIikKKyIiIgorICBkZWYgX19pbml0X18oc2VsZik6CisgICAgc3VwZXIoX1N0ckVxLCBzZWxmKS5fX2luaXRfXygiX3N0cmVxIikKKworICBkZWYgaW52b2tlKHNlbGYsIGEsIGIpOgorICAgIHJldHVybiBhLnN0cmluZygpID09IGIuc3RyaW5nKCkKKworCitjbGFzcyBfUmVnRXgoZ2RiLkZ1bmN0aW9uKToKKyAgIiIiJF9yZWdleCAtIGNoZWNrIGlmIGEgc3RyaW5nIG1hdGNoZXMgYSByZWd1bGFyIGV4cHJlc3Npb24KKworVXNhZ2U6CisgICRfcmVnZXgoc3RyaW5nLCByZWdleCkKKworUmV0dXJuczoKKyAgVHJ1ZSBpZiBzdHJpbmcgc3RyIChpbiB0aGUgY3VycmVudCBsYW5ndWFnZSkgbWF0Y2hlcyB0aGUKKyAgcmVndWxhciBleHByZXNzaW9uIHJlZ2V4LgorIiIiCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBzdXBlcihfUmVnRXgsIHNlbGYpLl9faW5pdF9fKCJfcmVnZXgiKQorCisgIGRlZiBpbnZva2Uoc2VsZiwgc3RyaW5nLCByZWdleCk6CisgICAgcyA9IHN0cmluZy5zdHJpbmcoKQorICAgIHIgPSByZS5jb21waWxlKHJlZ2V4LnN0cmluZygpKQorICAgIHJldHVybiBib29sKHIubWF0Y2gocykpCisKKworIyBHREIgd2lsbCBpbXBvcnQgdXMgYXV0b21hZ2ljYWxseSB2aWEgZ2RiL19faW5pdF9fLnB5LgorX01lbUVxKCkKK19TdHJMZW4oKQorX1N0ckVxKCkKK19SZWdFeCgpCmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9wcmludGluZy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL3ByaW50aW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NWE0MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9wcmludGluZy5weQpAQCAtMCwwICsxLDI2MyBAQAorIyBQcmV0dHktcHJpbnRlciB1dGlsaXRpZXMuCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisiIiJVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBwcmV0dHktcHJpbnRlcnMuIiIiCisKK2ltcG9ydCBnZGIKK2ltcG9ydCBnZGIudHlwZXMKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdID4gMjoKKyAgICAjIFB5dGhvbiAzIHJlbW92ZWQgYmFzZXN0cmluZyBhbmQgbG9uZworICAgIGJhc2VzdHJpbmcgPSBzdHIKKyAgICBsb25nID0gaW50CisKK2NsYXNzIFByZXR0eVByaW50ZXIob2JqZWN0KToKKyAgICAiIiJBIGJhc2ljIHByZXR0eS1wcmludGVyLgorCisgICAgQXR0cmlidXRlczoKKyAgICAgICAgbmFtZTogQSB1bmlxdWUgc3RyaW5nIGFtb25nIGFsbCBwcmludGVycyBmb3IgdGhlIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICAgIGl0IGlzIGRlZmluZWQgKG9iamZpbGUsIHByb2dzcGFjZSwgb3IgZ2xvYmFsKGdkYikpLCBhbmQgc2hvdWxkCisgICAgICAgICAgICBtZWFuaW5nZnVsbHkgZGVzY3JpYmUgd2hhdCBjYW4gYmUgcHJldHR5LXByaW50ZWQuCisgICAgICAgICAgICBFLmcuLCAiU3RyaW5nUGllY2UiIG9yICJwcm90b2J1ZnMiLgorICAgICAgICBzdWJwcmludGVyczogQW4gaXRlcmFibGUgb2JqZWN0IHdpdGggZWFjaCBlbGVtZW50IGhhdmluZyBhIGBuYW1lJworICAgICAgICAgICAgYXR0cmlidXRlLCBhbmQsIHBvdGVudGlhbGx5LCAiZW5hYmxlZCIgYXR0cmlidXRlLgorICAgICAgICAgICAgT3IgdGhpcyBpcyBOb25lIGlmIHRoZXJlIGFyZSBubyBzdWJwcmludGVycy4KKyAgICAgICAgZW5hYmxlZDogQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHByaW50ZXIgaXMgZW5hYmxlZC4KKworICAgIFN1YnByaW50ZXJzIGFyZSBmb3Igc2l0dWF0aW9ucyB3aGVyZSAib25lIiBwcmV0dHktcHJpbnRlciBpcyBhY3R1YWxseSBhCisgICAgY29sbGVjdGlvbiBvZiBzZXZlcmFsIHByaW50ZXJzLiAgRS5nLiwgVGhlIGxpYnN0ZGMrKyBwcmV0dHktcHJpbnRlciBoYXMKKyAgICBhIHByZXR0eS1wcmludGVyIGZvciBlYWNoIG9mIHNldmVyYWwgZGlmZmVyZW50IHR5cGVzLCBiYXNlZCBvbiByZWdleHBzLgorICAgICIiIgorCisgICAgIyBXaGlsZSBvbmUgbWlnaHQgd2FudCB0byBwdXNoIHN1YnByaW50ZXJzIGludG8gdGhlIHN1YmNsYXNzLCBpdCdzCisgICAgIyBwcmVzZW50IGhlcmUgdG8gZm9ybWFsaXplIHN1Y2ggc3VwcG9ydCB0byBzaW1wbGlmeQorICAgICMgY29tbWFuZHMvcHJldHR5X3ByaW50ZXJzLnB5LgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHN1YnByaW50ZXJzPU5vbmUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuc3VicHJpbnRlcnMgPSBzdWJwcmludGVycworICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgdmFsKToKKyAgICAgICAgIyBUaGUgc3ViY2xhc3MgbXVzdCBkZWZpbmUgdGhpcy4KKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiUHJldHR5UHJpbnRlciBfX2NhbGxfXyIpCisKKworY2xhc3MgU3ViUHJldHR5UHJpbnRlcihvYmplY3QpOgorICAgICIiIkJhc2VjbGFzcyBmb3Igc3ViLXByZXR0eS1wcmludGVycy4KKworICAgIFN1Yi1wcmV0dHktcHJpbnRlcnMgbmVlZG4ndCB1c2UgdGhpcywgYnV0IGl0IGZvcm1hbGl6ZXMgd2hhdCdzIG5lZWRlZC4KKworICAgIEF0dHJpYnV0ZXM6CisgICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBzdWJwcmludGVyLgorICAgICAgICBlbmFibGVkOiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgc3VicHJpbnRlciBpcyBlbmFibGVkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRydWUKKworCitkZWYgcmVnaXN0ZXJfcHJldHR5X3ByaW50ZXIob2JqLCBwcmludGVyLCByZXBsYWNlPUZhbHNlKToKKyAgICAiIiJSZWdpc3RlciBwcmV0dHktcHJpbnRlciBQUklOVEVSIHdpdGggT0JKLgorCisgICAgVGhlIHByaW50ZXIgaXMgYWRkZWQgdG8gdGhlIGZyb250IG9mIHRoZSBzZWFyY2ggbGlzdCwgdGh1cyBvbmUgY2FuIG92ZXJyaWRlCisgICAgYW4gZXhpc3RpbmcgcHJpbnRlciBpZiBvbmUgbmVlZHMgdG8uICBVc2UgYSBkaWZmZXJlbnQgbmFtZSB3aGVuIG92ZXJyaWRpbmcKKyAgICBhbiBleGlzdGluZyBwcmludGVyLCBvdGhlcndpc2UgYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkOyBtdWx0aXBsZQorICAgIHByaW50ZXJzIHdpdGggdGhlIHNhbWUgbmFtZSBhcmUgZGlzYWxsb3dlZC4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgb2JqOiBFaXRoZXIgYW4gb2JqZmlsZSwgcHJvZ3NwYWNlLCBvciBOb25lIChpbiB3aGljaCBjYXNlIHRoZSBwcmludGVyCisgICAgICAgICAgICBpcyByZWdpc3RlcmVkIGdsb2JhbGx5KS4KKyAgICAgICAgcHJpbnRlcjogRWl0aGVyIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IChvbGQgd2F5KSBvciBhbnkgb2JqZWN0CisgICAgICAgICAgICB3aGljaCBoYXMgYXR0cmlidXRlczogbmFtZSwgZW5hYmxlZCwgX19jYWxsX18uCisgICAgICAgIHJlcGxhY2U6IElmIFRydWUgcmVwbGFjZSBhbnkgZXhpc3RpbmcgY29weSBvZiB0aGUgcHJpbnRlci4KKyAgICAgICAgICAgIE90aGVyd2lzZSBpZiB0aGUgcHJpbnRlciBhbHJlYWR5IGV4aXN0cyByYWlzZSBhbiBleGNlcHRpb24uCisKKyAgICBSZXR1cm5zOgorICAgICAgICBOb3RoaW5nLgorCisgICAgUmFpc2VzOgorICAgICAgICBUeXBlRXJyb3I6IEEgcHJvYmxlbSB3aXRoIHRoZSB0eXBlIG9mIHRoZSBwcmludGVyLgorICAgICAgICBWYWx1ZUVycm9yOiBUaGUgcHJpbnRlcidzIG5hbWUgY29udGFpbnMgYSBzZW1pY29sb24gIjsiLgorICAgICAgICBSdW50aW1lRXJyb3I6IEEgcHJpbnRlciB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLgorCisgICAgSWYgdGhlIGNhbGxlciB3YW50cyB0aGUgcHJpbnRlciB0byBiZSBsaXN0YWJsZSBhbmQgZGlzYWJsZWFibGUsIGl0IG11c3QKKyAgICBmb2xsb3cgdGhlIFByZXR0eVByaW50ZXIgQVBJLiAgVGhpcyBhcHBsaWVzIHRvIHRoZSBvbGQgd2F5IChmdW5jdGlvbnMpIHRvby4KKyAgICBJZiBwcmludGVyIGlzIGFuIG9iamVjdCwgX19jYWxsX18gaXMgYSBtZXRob2Qgb2YgdHdvIGFyZ3VtZW50czoKKyAgICBzZWxmLCBhbmQgdGhlIHZhbHVlIHRvIGJlIHByZXR0eS1wcmludGVkLiAgU2VlIFByZXR0eVByaW50ZXIuCisgICAgIiIiCisKKyAgICAjIFdhdGNoIGZvciBib3RoIF9fbmFtZV9fIGFuZCBuYW1lLgorICAgICMgRnVuY3Rpb25zIGdldCB0aGUgZm9ybWVyIGZvciBmcmVlLCBidXQgd2UgZG9uJ3Qgd2FudCB0byB1c2UgYW4KKyAgICAjIGF0dHJpYnV0ZSBuYW1lZCBfX2Zvb19fIGZvciBwcmV0dHktcHJpbnRlcnMtYXMtb2JqZWN0cy4KKyAgICAjIElmIHByaW50ZXIgaGFzIGJvdGgsIHdlIHVzZSBgbmFtZScuCisgICAgaWYgbm90IGhhc2F0dHIocHJpbnRlciwgIl9fbmFtZV9fIikgYW5kIG5vdCBoYXNhdHRyKHByaW50ZXIsICJuYW1lIik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicHJpbnRlciBtaXNzaW5nIGF0dHJpYnV0ZTogbmFtZSIpCisgICAgaWYgaGFzYXR0cihwcmludGVyLCAibmFtZSIpIGFuZCBub3QgaGFzYXR0cihwcmludGVyLCAiZW5hYmxlZCIpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInByaW50ZXIgbWlzc2luZyBhdHRyaWJ1dGU6IGVuYWJsZWQiKSAKKyAgICBpZiBub3QgaGFzYXR0cihwcmludGVyLCAiX19jYWxsX18iKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJwcmludGVyIG1pc3NpbmcgYXR0cmlidXRlOiBfX2NhbGxfXyIpCisKKyAgICBpZiBvYmogaXMgTm9uZToKKyAgICAgICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIpOgorICAgICAgICAgICAgZ2RiLndyaXRlKCJSZWdpc3RlcmluZyBnbG9iYWwgJXMgcHJldHR5LXByaW50ZXIgLi4uXG4iICUgbmFtZSkKKyAgICAgICAgb2JqID0gZ2RiCisgICAgZWxzZToKKyAgICAgICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIpOgorICAgICAgICAgICAgZ2RiLndyaXRlKCJSZWdpc3RlcmluZyAlcyBwcmV0dHktcHJpbnRlciBmb3IgJXMgLi4uXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAocHJpbnRlci5uYW1lLCBvYmouZmlsZW5hbWUpKQorCisgICAgaWYgaGFzYXR0cihwcmludGVyLCAibmFtZSIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwcmludGVyLm5hbWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJwcmludGVyIG5hbWUgaXMgbm90IGEgc3RyaW5nIikKKyAgICAgICAgIyBJZiBwcmludGVyIHByb3ZpZGVzIGEgbmFtZSwgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgY29udGFpbiAiOyIuCisgICAgICAgICMgU2VtaWNvbG9uIGlzIHVzZWQgYnkgdGhlIGluZm8vZW5hYmxlL2Rpc2FibGUgcHJldHR5LXByaW50ZXIgY29tbWFuZHMKKyAgICAgICAgIyB0byBkZWxpbWl0IHN1YnByaW50ZXJzLgorICAgICAgICBpZiBwcmludGVyLm5hbWUuZmluZCgiOyIpID49IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzZW1pY29sb24gJzsnIGluIHByaW50ZXIgbmFtZSIpCisgICAgICAgICMgQWxzbyBtYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlLgorICAgICAgICAjIEFsYXMsIHdlIGNhbid0IGRvIHRoZSBzYW1lIGZvciBmdW5jdGlvbnMgYW5kIF9fbmFtZV9fLCB0aGV5IGNvdWxkCisgICAgICAgICMgYWxsIGhhdmUgYSBjYW5vbmljYWwgbmFtZSBsaWtlICJsb29rdXBfZnVuY3Rpb24iLgorICAgICAgICAjIFBFUkY6IGdkYiByZWNvcmRzIHByaW50ZXJzIGluIGEgbGlzdCwgbWFraW5nIHRoaXMgaW5lZmZpY2llbnQuCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBwIGluIG9iai5wcmV0dHlfcHJpbnRlcnM6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHAsICJuYW1lIikgYW5kIHAubmFtZSA9PSBwcmludGVyLm5hbWU6CisgICAgICAgICAgICAgICAgaWYgcmVwbGFjZToKKyAgICAgICAgICAgICAgICAgICAgZGVsIG9iai5wcmV0dHlfcHJpbnRlcnNbaV0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJwcmV0dHktcHJpbnRlciBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlci5uYW1lKQorICAgICAgICAgICAgaSA9IGkgKyAxCisKKyAgICBvYmoucHJldHR5X3ByaW50ZXJzLmluc2VydCgwLCBwcmludGVyKQorCisKK2NsYXNzIFJlZ2V4cENvbGxlY3Rpb25QcmV0dHlQcmludGVyKFByZXR0eVByaW50ZXIpOgorICAgICIiIkNsYXNzIGZvciBpbXBsZW1lbnRpbmcgYSBjb2xsZWN0aW9uIG9mIHJlZ3VsYXItZXhwcmVzc2lvbiBiYXNlZCBwcmV0dHktcHJpbnRlcnMuCisKKyAgICBJbnRlbmRlZCB1c2FnZToKKworICAgIHByZXR0eV9wcmludGVyID0gUmVnZXhwQ29sbGVjdGlvblByZXR0eVByaW50ZXIoIm15X2xpYnJhcnkiKQorICAgIHByZXR0eV9wcmludGVyLmFkZF9wcmludGVyKCJteWNsYXNzMSIsICJebXljbGFzczEkIiwgTXlDbGFzczFQcmludGVyKQorICAgIC4uLgorICAgIHByZXR0eV9wcmludGVyLmFkZF9wcmludGVyKCJteWNsYXNzTiIsICJebXljbGFzc04kIiwgTXlDbGFzc05QcmludGVyKQorICAgIHJlZ2lzdGVyX3ByZXR0eV9wcmludGVyKG9iaiwgcHJldHR5X3ByaW50ZXIpCisgICAgIiIiCisKKyAgICBjbGFzcyBSZWdleHBTdWJwcmludGVyKFN1YlByZXR0eVByaW50ZXIpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcmVnZXhwLCBnZW5fcHJpbnRlcik6CisgICAgICAgICAgICBzdXBlcihSZWdleHBDb2xsZWN0aW9uUHJldHR5UHJpbnRlci5SZWdleHBTdWJwcmludGVyLCBzZWxmKS5fX2luaXRfXyhuYW1lKQorICAgICAgICAgICAgc2VsZi5yZWdleHAgPSByZWdleHAKKyAgICAgICAgICAgIHNlbGYuZ2VuX3ByaW50ZXIgPSBnZW5fcHJpbnRlcgorICAgICAgICAgICAgc2VsZi5jb21waWxlZF9yZSA9IHJlLmNvbXBpbGUocmVnZXhwKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzdXBlcihSZWdleHBDb2xsZWN0aW9uUHJldHR5UHJpbnRlciwgc2VsZikuX19pbml0X18obmFtZSwgW10pCisKKyAgICBkZWYgYWRkX3ByaW50ZXIoc2VsZiwgbmFtZSwgcmVnZXhwLCBnZW5fcHJpbnRlcik6CisgICAgICAgICIiIkFkZCBhIHByaW50ZXIgdG8gdGhlIGxpc3QuCisKKyAgICAgICAgVGhlIHByaW50ZXIgaXMgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKworICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgc3VicHJpbnRlci4KKyAgICAgICAgICAgIHJlZ2V4cDogVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYXMgYSBzdHJpbmcuCisgICAgICAgICAgICBnZW5fcHJpbnRlcjogQSBmdW5jdGlvbi9tZXRob2QgdGhhdCBnaXZlbiBhIHZhbHVlIHJldHVybnMgYW4KKyAgICAgICAgICAgICAgICBvYmplY3QgdG8gcHJldHR5LXByaW50IGl0LgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBOb3RoaW5nLgorICAgICAgICAiIiIKKworICAgICAgICAjIE5PVEU6IEEgcHJldmlvdXMgdmVyc2lvbiBtYWRlIHRoZSBuYW1lIG9mIGVhY2ggcHJpbnRlciB0aGUgcmVnZXhwLgorICAgICAgICAjIFRoYXQgbWFrZXMgaXQgYXdrd2FyZCB0byBwYXNzIHRvIHRoZSBlbmFibGUvZGlzYWJsZSBjb21tYW5kcyAoaXQncworICAgICAgICAjIGN1bWJlcnNvbWUgdG8gbWFrZSBhIHJlZ2V4cCBvZiBhIHJlZ2V4cCkuICBTbyBub3cgdGhlIG5hbWUgaXMgYQorICAgICAgICAjIHNlcGFyYXRlIHBhcmFtZXRlci4KKworICAgICAgICBzZWxmLnN1YnByaW50ZXJzLmFwcGVuZChzZWxmLlJlZ2V4cFN1YnByaW50ZXIobmFtZSwgcmVnZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuX3ByaW50ZXIpKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHZhbCk6CisgICAgICAgICIiIkxvb2t1cCB0aGUgcHJldHR5LXByaW50ZXIgZm9yIHRoZSBwcm92aWRlZCB2YWx1ZS4iIiIKKworICAgICAgICAjIEdldCB0aGUgdHlwZSBuYW1lLgorICAgICAgICB0eXBlbmFtZSA9IGdkYi50eXBlcy5nZXRfYmFzaWNfdHlwZSh2YWwudHlwZSkudGFnCisgICAgICAgIGlmIG5vdCB0eXBlbmFtZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBJdGVyYXRlIG92ZXIgdGFibGUgb2YgdHlwZSByZWdleHBzIHRvIGRldGVybWluZQorICAgICAgICAjIGlmIGEgcHJpbnRlciBpcyByZWdpc3RlcmVkIGZvciB0aGF0IHR5cGUuCisgICAgICAgICMgUmV0dXJuIGFuIGluc3RhbnRpYXRpb24gb2YgdGhlIHByaW50ZXIgaWYgZm91bmQuCisgICAgICAgIGZvciBwcmludGVyIGluIHNlbGYuc3VicHJpbnRlcnM6CisgICAgICAgICAgICBpZiBwcmludGVyLmVuYWJsZWQgYW5kIHByaW50ZXIuY29tcGlsZWRfcmUuc2VhcmNoKHR5cGVuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJpbnRlci5nZW5fcHJpbnRlcih2YWwpCisKKyAgICAgICAgIyBDYW5ub3QgZmluZCBhIHByZXR0eSBwcmludGVyLiAgUmV0dXJuIE5vbmUuCisgICAgICAgIHJldHVybiBOb25lCisKKyMgQSBoZWxwZXIgY2xhc3MgZm9yIHByaW50aW5nIGVudW0gdHlwZXMuICBUaGlzIGNsYXNzIGlzIGluc3RhbnRpYXRlZAorIyB3aXRoIGEgbGlzdCBvZiBlbnVtZXJhdG9ycyB0byBwcmludCBhIHBhcnRpY3VsYXIgVmFsdWUuCitjbGFzcyBfRW51bUluc3RhbmNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnVtZXJhdG9ycywgdmFsKToKKyAgICAgICAgc2VsZi5lbnVtZXJhdG9ycyA9IGVudW1lcmF0b3JzCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgdG9fc3RyaW5nKHNlbGYpOgorICAgICAgICBmbGFnX2xpc3QgPSBbXQorICAgICAgICB2ID0gbG9uZyhzZWxmLnZhbCkKKyAgICAgICAgYW55X2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIChlX25hbWUsIGVfdmFsdWUpIGluIHNlbGYuZW51bWVyYXRvcnM6CisgICAgICAgICAgICBpZiB2ICYgZV92YWx1ZSAhPSAwOgorICAgICAgICAgICAgICAgIGZsYWdfbGlzdC5hcHBlbmQoZV9uYW1lKQorICAgICAgICAgICAgICAgIHYgPSB2ICYgfmVfdmFsdWUKKyAgICAgICAgICAgICAgICBhbnlfZm91bmQgPSBUcnVlCisgICAgICAgIGlmIG5vdCBhbnlfZm91bmQgb3IgdiAhPSAwOgorICAgICAgICAgICAgIyBMZWZ0b3ZlciB2YWx1ZS4KKyAgICAgICAgICAgIGZsYWdfbGlzdC5hcHBlbmQoJzx1bmtub3duOiAweCV4PicgJSB2KQorICAgICAgICByZXR1cm4gIjB4JXggWyVzXSIgJSAoc2VsZi52YWwsICIgfCAiLmpvaW4oZmxhZ19saXN0KSkKKworY2xhc3MgRmxhZ0VudW1lcmF0aW9uUHJpbnRlcihQcmV0dHlQcmludGVyKToKKyAgICAiIiJBIHByZXR0eS1wcmludGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHByaW50IGEgZmxhZy1zdHlsZSBlbnVtZXJhdGlvbi4KKyAgICBBIGZsYWctc3R5bGUgZW51bWVyYXRpb24gaXMgb25lIHdoZXJlIHRoZSBlbnVtZXJhdG9ycyBhcmUgb3InZAorICAgIHRvZ2V0aGVyIHRvIGNyZWF0ZSB2YWx1ZXMuICBUaGUgbmV3IHByaW50ZXIgd2lsbCBwcmludCB0aGVzZQorICAgIHN5bWJvbGljYWxseSB1c2luZyAnfCcgbm90YXRpb24uICBUaGUgcHJpbnRlciBtdXN0IGJlIHJlZ2lzdGVyZWQKKyAgICBtYW51YWxseS4gIFRoaXMgcHJpbnRlciBpcyBtb3N0IHVzZWZ1bCB3aGVuIGFuIGVudW0gaXMgZmxhZy1saWtlLAorICAgIGJ1dCBoYXMgc29tZSBvdmVybGFwLiAgR0RCJ3MgYnVpbHQtaW4gcHJpbnRpbmcgd2lsbCBub3QgaGFuZGxlCisgICAgdGhpcyBjYXNlLCBidXQgdGhpcyBwcmludGVyIHdpbGwgYXR0ZW1wdCB0by4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnVtX3R5cGUpOgorICAgICAgICBzdXBlcihGbGFnRW51bWVyYXRpb25QcmludGVyLCBzZWxmKS5fX2luaXRfXyhlbnVtX3R5cGUpCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBGYWxzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHZhbCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmluaXRpYWxpemVkOgorICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IFRydWUKKyAgICAgICAgICAgIGZsYWdzID0gZ2RiLmxvb2t1cF90eXBlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYuZW51bWVyYXRvcnMgPSBbXQorICAgICAgICAgICAgZm9yIGZpZWxkIGluIGZsYWdzLmZpZWxkcygpOgorICAgICAgICAgICAgICAgIHNlbGYuZW51bWVyYXRvcnMuYXBwZW5kKChmaWVsZC5uYW1lLCBmaWVsZC5lbnVtdmFsKSkKKyAgICAgICAgICAgICMgU29ydGluZyB0aGUgZW51bWVyYXRvcnMgYnkgdmFsdWUgdXN1YWxseSBkb2VzIHRoZSByaWdodAorICAgICAgICAgICAgIyB0aGluZy4KKyAgICAgICAgICAgIHNlbGYuZW51bWVyYXRvcnMuc29ydChrZXkgPSBsYW1iZGEgeDogeC5lbnVtdmFsKQorCisgICAgICAgIGlmIHNlbGYuZW5hYmxlZDoKKyAgICAgICAgICAgIHJldHVybiBfRW51bUluc3RhbmNlKHNlbGYuZW51bWVyYXRvcnMsIHZhbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9wcm9tcHQucHkgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9wcm9tcHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxOTc1YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL3Byb21wdC5weQpAQCAtMCwwICsxLDE0OCBAQAorIyBFeHRlbmRlZCBwcm9tcHQgdXRpbGl0aWVzLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIiIiIEV4dGVuZGVkIHByb21wdCBsaWJyYXJ5IGZ1bmN0aW9ucy4iIiIKKworaW1wb3J0IGdkYgoraW1wb3J0IG9zCisKK2RlZiBfcHJvbXB0X3B3ZChpZ25vcmUpOgorICAgICJUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4iCisgICAgcmV0dXJuIG9zLmdldGN3ZHUoKQorCitkZWYgX3Byb21wdF9vYmplY3RfYXR0cihmdW5jLCB3aGF0LCBhdHRyLCBuYXR0cik6CisgICAgIiIiSW50ZXJuYWwgd29ya2VyIGZvciBmZXRjaGluZyBHREIgYXR0cmlidXRlcy4iIiIKKyAgICBpZiBhdHRyIGlzIE5vbmU6CisgICAgICAgIGF0dHIgPSBuYXR0cgorICAgIHRyeToKKyAgICAgICAgb2JqID0gZnVuYygpCisgICAgZXhjZXB0IGdkYi5lcnJvcjoKKyAgICAgICAgcmV0dXJuICc8bm8gJXM+JyAlIHdoYXQKKyAgICBpZiBoYXNhdHRyKG9iaiwgYXR0cik6CisgICAgICAgIHJlc3VsdCA9IGdldGF0dHIob2JqLCBhdHRyKQorICAgICAgICBpZiBjYWxsYWJsZShyZXN1bHQpOgorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0KCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnPG5vIGF0dHJpYnV0ZSAlcyBvbiBjdXJyZW50ICVzPicgJSAoYXR0ciwgd2hhdCkKKworZGVmIF9wcm9tcHRfZnJhbWUoYXR0cik6CisgICAgIlRoZSBzZWxlY3RlZCBmcmFtZTsgYW4gYXJndW1lbnQgbmFtZXMgYSBmcmFtZSBwYXJhbWV0ZXIuIgorICAgIHJldHVybiBfcHJvbXB0X29iamVjdF9hdHRyKGdkYi5zZWxlY3RlZF9mcmFtZSwgJ2ZyYW1lJywgYXR0ciwgJ25hbWUnKQorCitkZWYgX3Byb21wdF90aHJlYWQoYXR0cik6CisgICAgIlRoZSBzZWxlY3RlZCB0aHJlYWQ7IGFuIGFyZ3VtZW50IG5hbWVzIGEgdGhyZWFkIHBhcmFtZXRlci4iCisgICAgcmV0dXJuIF9wcm9tcHRfb2JqZWN0X2F0dHIoZ2RiLnNlbGVjdGVkX3RocmVhZCwgJ3RocmVhZCcsIGF0dHIsICdudW0nKQorCitkZWYgX3Byb21wdF92ZXJzaW9uKGF0dHIpOgorICAgICJUaGUgdmVyc2lvbiBvZiBHREIuIgorICAgIHJldHVybiBnZGIuVkVSU0lPTgorCitkZWYgX3Byb21wdF9lc2MoYXR0cik6CisgICAgIlRoZSBFU0MgY2hhcmFjdGVyLiIKKyAgICByZXR1cm4gJ1wwMzMnCisKK2RlZiBfcHJvbXB0X2JzKGF0dHIpOgorICAgICJBIGJhY2tzbGFzaC4iCisgICAgcmV0dXJuICdcXCcKKworZGVmIF9wcm9tcHRfbihhdHRyKToKKyAgICAiQSBuZXdsaW5lLiIKKyAgICByZXR1cm4gJ1xuJworCitkZWYgX3Byb21wdF9yKGF0dHIpOgorICAgICJBIGNhcnJpYWdlIHJldHVybi4iCisgICAgcmV0dXJuICdccicKKworZGVmIF9wcm9tcHRfcGFyYW0oYXR0cik6CisgICAgIkEgcGFyYW1ldGVyJ3MgdmFsdWU7IHRoZSBhcmd1bWVudCBuYW1lcyB0aGUgcGFyYW1ldGVyLiIKKyAgICByZXR1cm4gZ2RiLnBhcmFtZXRlcihhdHRyKQorCitkZWYgX3Byb21wdF9ub3ByaW50X2JlZ2luKGF0dHIpOgorICAgICJCZWdpbnMgYSBzZXF1ZW5jZSBvZiBub24tcHJpbnRpbmcgY2hhcmFjdGVycy4iCisgICAgcmV0dXJuICdcMDAxJworCitkZWYgX3Byb21wdF9ub3ByaW50X2VuZChhdHRyKToKKyAgICAgIkVuZHMgYSBzZXF1ZW5jZSBvZiBub24tcHJpbnRpbmcgY2hhcmFjdGVycy4iCisgICAgIHJldHVybiAnXDAwMicKKworcHJvbXB0X3N1YnN0aXR1dGlvbnMgPSB7CisgICAgJ2UnOiBfcHJvbXB0X2VzYywKKyAgICAnXFwnOiBfcHJvbXB0X2JzLAorICAgICduJzogX3Byb21wdF9uLAorICAgICdyJzogX3Byb21wdF9yLAorICAgICd2JzogX3Byb21wdF92ZXJzaW9uLAorICAgICd3JzogX3Byb21wdF9wd2QsCisgICAgJ2YnOiBfcHJvbXB0X2ZyYW1lLAorICAgICd0JzogX3Byb21wdF90aHJlYWQsCisgICAgJ3AnOiBfcHJvbXB0X3BhcmFtLAorICAgICdbJzogX3Byb21wdF9ub3ByaW50X2JlZ2luLAorICAgICddJzogX3Byb21wdF9ub3ByaW50X2VuZAorfQorCitkZWYgcHJvbXB0X2hlbHAoKToKKyAgICAiIiJHZW5lcmF0ZSBoZWxwIGR5bmFtaWNhbGx5IGZyb20gdGhlIF9fZG9jX18gc3RyaW5ncyBvZiBhdHRyaWJ1dGUKKyAgICBmdW5jdGlvbnMuIiIiCisKKyAgICByZXN1bHQgPSAnJworICAgIGtleXMgPSBzb3J0ZWQgKHByb21wdF9zdWJzdGl0dXRpb25zLmtleXMoKSkKKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIHJlc3VsdCArPSAnICBcXCVzXHQlc1xuJyAlIChrZXksIHByb21wdF9zdWJzdGl0dXRpb25zW2tleV0uX19kb2NfXykKKyAgICByZXN1bHQgKz0gIiIiCitBIHN1YnN0aXR1dGlvbiBjYW4gYmUgdXNlZCBpbiBhIHNpbXBsZSBmb3JtLCBsaWtlICJcXGYiLgorQW4gYXJndW1lbnQgY2FuIGFsc28gYmUgcGFzc2VkIHRvIGl0LCBsaWtlICJcXGZ7bmFtZX0iLgorVGhlIG1lYW5pbmcgb2YgdGhlIGFyZ3VtZW50IGRlcGVuZHMgb24gdGhlIHBhcnRpY3VsYXIgc3Vic3RpdHV0aW9uLiIiIgorICAgIHJldHVybiByZXN1bHQKKworZGVmIHN1YnN0aXR1dGVfcHJvbXB0KHByb21wdCk6CisgICAgIlBlcmZvcm0gc3Vic3RpdHV0aW9ucyBvbiBQUk9NUFQuIgorCisgICAgcmVzdWx0ID0gJycKKyAgICBwbGVuID0gbGVuKHByb21wdCkKKyAgICBpID0gMAorICAgIHdoaWxlIGkgPCBwbGVuOgorICAgICAgICBpZiBwcm9tcHRbaV0gPT0gJ1xcJzoKKyAgICAgICAgICAgIGkgPSBpICsgMQorICAgICAgICAgICAgaWYgaSA+PSBwbGVuOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBjbWRjaCA9IHByb21wdFtpXQorCisgICAgICAgICAgICBpZiBjbWRjaCBpbiBwcm9tcHRfc3Vic3RpdHV0aW9uczoKKyAgICAgICAgICAgICAgICBjbWQgPSBwcm9tcHRfc3Vic3RpdHV0aW9uc1tjbWRjaF0KKworICAgICAgICAgICAgICAgIGlmIGkgKyAxIDwgcGxlbiBhbmQgcHJvbXB0W2kgKyAxXSA9PSAneyc6CisgICAgICAgICAgICAgICAgICAgIGogPSBpICsgMQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBqIDwgcGxlbiBhbmQgcHJvbXB0W2pdICE9ICd9JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGogPSBqICsgMQorICAgICAgICAgICAgICAgICAgICAjIEp1c3QgaWdub3JlIGZvcm1hdHRpbmcgZXJyb3JzLgorICAgICAgICAgICAgICAgICAgICBpZiBqID49IHBsZW4gb3IgcHJvbXB0W2pdICE9ICd9JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHByb21wdFtpICsgMiA6IGpdCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gagorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyKGNtZChhcmcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFVucmVjb2duaXplZCBlc2NhcGVzIGFyZSB0dXJuZWQgaW50byB0aGUgZXNjYXBlZAorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIGl0c2VsZi4KKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gcHJvbXB0W2ldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gcHJvbXB0W2ldCisKKyAgICAgICAgaSA9IGkgKyAxCisKKyAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi90eXBlcy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL3R5cGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYzgxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi90eXBlcy5weQpAQCAtMCwwICsxLDE3NiBAQAorIyBUeXBlIHV0aWxpdGllcy4KKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyIiIlV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIGdkYi5UeXBlcy4iIiIKKworaW1wb3J0IGdkYgorCisKK2RlZiBnZXRfYmFzaWNfdHlwZSh0eXBlXyk6CisgICAgIiIiUmV0dXJuIHRoZSAiYmFzaWMiIHR5cGUgb2YgYSB0eXBlLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICB0eXBlXzogVGhlIHR5cGUgdG8gcmVkdWNlIHRvIGl0cyBiYXNpYyB0eXBlLgorCisgICAgUmV0dXJuczoKKyAgICAgICAgdHlwZV8gd2l0aCBjb25zdC92b2xhdGlsZSBpcyBzdHJpcHBlZCBhd2F5LAorICAgICAgICBhbmQgdHlwZWRlZnMvcmVmZXJlbmNlcyBjb252ZXJ0ZWQgdG8gdGhlIHVuZGVybHlpbmcgdHlwZS4KKyAgICAiIiIKKworICAgIHdoaWxlICh0eXBlXy5jb2RlID09IGdkYi5UWVBFX0NPREVfUkVGIG9yCisgICAgICAgICAgIHR5cGVfLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9UWVBFREVGKToKKyAgICAgICAgaWYgdHlwZV8uY29kZSA9PSBnZGIuVFlQRV9DT0RFX1JFRjoKKyAgICAgICAgICAgIHR5cGVfID0gdHlwZV8udGFyZ2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHR5cGVfID0gdHlwZV8uc3RyaXBfdHlwZWRlZnMoKQorICAgIHJldHVybiB0eXBlXy51bnF1YWxpZmllZCgpCisKKworZGVmIGhhc19maWVsZCh0eXBlXywgZmllbGQpOgorICAgICIiIlJldHVybiBUcnVlIGlmIGEgdHlwZSBoYXMgdGhlIHNwZWNpZmllZCBmaWVsZC4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgdHlwZV86IFRoZSB0eXBlIHRvIGV4YW1pbmUuCisgICAgICAgICAgICBJdCBtdXN0IGJlIG9uZSBvZiBnZGIuVFlQRV9DT0RFX1NUUlVDVCwgZ2RiLlRZUEVfQ09ERV9VTklPTi4KKyAgICAgICAgZmllbGQ6IFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBsb29rIHVwLgorCisgICAgUmV0dXJuczoKKyAgICAgICAgVHJ1ZSBpZiB0aGUgZmllbGQgaXMgcHJlc2VudCBlaXRoZXIgaW4gdHlwZV8gb3IgYW55IGJhc2VjbGFzcy4KKworICAgIFJhaXNlczoKKyAgICAgICAgVHlwZUVycm9yOiBUaGUgdHlwZSBpcyBub3QgYSBzdHJ1Y3Qgb3IgdW5pb24uCisgICAgIiIiCisKKyAgICB0eXBlXyA9IGdldF9iYXNpY190eXBlKHR5cGVfKQorICAgIGlmICh0eXBlXy5jb2RlICE9IGdkYi5UWVBFX0NPREVfU1RSVUNUIGFuZAorICAgICAgICB0eXBlXy5jb2RlICE9IGdkYi5UWVBFX0NPREVfVU5JT04pOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vdCBhIHN0cnVjdCBvciB1bmlvbiIpCisgICAgZm9yIGYgaW4gdHlwZV8uZmllbGRzKCk6CisgICAgICAgIGlmIGYuaXNfYmFzZV9jbGFzczoKKyAgICAgICAgICAgIGlmIGhhc19maWVsZChmLnR5cGUsIGZpZWxkKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBOT1RFOiBmLm5hbWUgY291bGQgYmUgTm9uZQorICAgICAgICAgICAgaWYgZi5uYW1lID09IGZpZWxkOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIG1ha2VfZW51bV9kaWN0KGVudW1fdHlwZSk6CisgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBmcm9tIGEgcHJvZ3JhbSdzIGVudW0gdHlwZS4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgZW51bV90eXBlOiBUaGUgZW51bSB0byBjb21wdXRlIHRoZSBkaWN0aW9uYXJ5IGZvci4KKworICAgIFJldHVybnM6CisgICAgICAgIFRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBlbnVtLgorCisgICAgUmFpc2VzOgorICAgICAgICBUeXBlRXJyb3I6IFRoZSB0eXBlIGlzIG5vdCBhbiBlbnVtLgorICAgICIiIgorCisgICAgaWYgZW51bV90eXBlLmNvZGUgIT0gZ2RiLlRZUEVfQ09ERV9FTlVNOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vdCBhbiBlbnVtIHR5cGUiKQorICAgIGVudW1fZGljdCA9IHt9CisgICAgZm9yIGZpZWxkIGluIGVudW1fdHlwZS5maWVsZHMoKToKKyAgICAgICAgIyBUaGUgZW51bSdzIHZhbHVlIGlzIHN0b3JlZCBpbiAiZW51bXZhbCIuCisgICAgICAgIGVudW1fZGljdFtmaWVsZC5uYW1lXSA9IGZpZWxkLmVudW12YWwKKyAgICByZXR1cm4gZW51bV9kaWN0CisKKworZGVmIGRlZXBfaXRlbXMgKHR5cGVfKToKKyAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3IgdGhhdCByZWN1cnNpdmVseSB0cmF2ZXJzZXMgYW5vbnltb3VzIGZpZWxkcy4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgdHlwZV86IFRoZSB0eXBlIHRvIHRyYXZlcnNlLiAgSXQgc2hvdWxkIGJlIG9uZSBvZgorICAgICAgICBnZGIuVFlQRV9DT0RFX1NUUlVDVCBvciBnZGIuVFlQRV9DT0RFX1VOSU9OLgorCisgICAgUmV0dXJuczoKKyAgICAgICAgYW4gaXRlcmF0b3Igc2ltaWxhciB0byBnZGIuVHlwZS5pdGVyaXRlbXMoKSwgaS5lLiwgaXQgcmV0dXJucworICAgICAgICBwYWlycyBvZiBrZXksIHZhbHVlLCBidXQgZm9yIGFueSBhbm9ueW1vdXMgc3RydWN0IG9yIHVuaW9uCisgICAgICAgIGZpZWxkIHRoYXQgZmllbGQgaXMgdHJhdmVyc2VkIHJlY3Vyc2l2ZWx5LCBkZXB0aC1maXJzdC4KKyAgICAiIiIKKyAgICBmb3IgaywgdiBpbiB0eXBlXy5pdGVyaXRlbXMgKCk6CisgICAgICAgIGlmIGs6CisgICAgICAgICAgICB5aWVsZCBrLCB2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgaSBpbiBkZWVwX2l0ZW1zICh2LnR5cGUpOgorICAgICAgICAgICAgICAgIHlpZWxkIGkKKworY2xhc3MgVHlwZVByaW50ZXIob2JqZWN0KToKKyAgICAiIiJUaGUgYmFzZSBjbGFzcyBmb3IgdHlwZSBwcmludGVycy4KKworICAgIEluc3RhbmNlcyBvZiB0aGlzIHR5cGUgY2FuIGJlIHVzZWQgdG8gc3Vic3RpdHV0ZSB0eXBlIG5hbWVzIGR1cmluZworICAgICdwdHlwZScuCisKKyAgICBBIHR5cGUgcHJpbnRlciBtdXN0IGhhdmUgYXQgbGVhc3QgJ25hbWUnIGFuZCAnZW5hYmxlZCcgYXR0cmlidXRlcywKKyAgICBhbmQgc3VwcGx5IGFuICdpbnN0YW50aWF0ZScgbWV0aG9kLgorCisgICAgVGhlICdpbnN0YW50aWF0ZScgbWV0aG9kIG11c3QgZWl0aGVyIHJldHVybiBOb25lLCBvciByZXR1cm4gYW4KKyAgICBvYmplY3Qgd2hpY2ggaGFzIGEgJ3JlY29nbml6ZScgbWV0aG9kLiAgVGhpcyBtZXRob2QgbXVzdCBhY2NlcHQgYQorICAgIGdkYi5UeXBlIGFyZ3VtZW50IGFuZCBlaXRoZXIgcmV0dXJuIE5vbmUsIG1lYW5pbmcgdGhhdCB0aGUgdHlwZQorICAgIHdhcyBub3QgcmVjb2duaXplZCwgb3IgYSBzdHJpbmcgbmFtaW5nIHRoZSB0eXBlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRydWUKKworICAgIGRlZiBpbnN0YW50aWF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworIyBIZWxwZXIgZnVuY3Rpb24gZm9yIGNvbXB1dGluZyB0aGUgbGlzdCBvZiB0eXBlIHJlY29nbml6ZXJzLgorZGVmIF9nZXRfc29tZV90eXBlX3JlY29nbml6ZXJzKHJlc3VsdCwgcGxpc3QpOgorICAgIGZvciBwcmludGVyIGluIHBsaXN0OgorICAgICAgICBpZiBwcmludGVyLmVuYWJsZWQ6CisgICAgICAgICAgICBpbnN0ID0gcHJpbnRlci5pbnN0YW50aWF0ZSgpCisgICAgICAgICAgICBpZiBpbnN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaW5zdCkKKyAgICByZXR1cm4gTm9uZQorCitkZWYgZ2V0X3R5cGVfcmVjb2duaXplcnMoKToKKyAgICAiUmV0dXJuIGEgbGlzdCBvZiB0aGUgZW5hYmxlZCB0eXBlIHJlY29nbml6ZXJzIGZvciB0aGUgY3VycmVudCBjb250ZXh0LiIKKyAgICByZXN1bHQgPSBbXQorCisgICAgIyBGaXJzdCB0cnkgdGhlIG9iamZpbGVzLgorICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgorICAgICAgICBfZ2V0X3NvbWVfdHlwZV9yZWNvZ25pemVycyhyZXN1bHQsIG9iamZpbGUudHlwZV9wcmludGVycykKKyAgICAjIE5vdyB0cnkgdGhlIHByb2dyYW0gc3BhY2UuCisgICAgX2dldF9zb21lX3R5cGVfcmVjb2duaXplcnMocmVzdWx0LCBnZGIuY3VycmVudF9wcm9nc3BhY2UoKS50eXBlX3ByaW50ZXJzKQorICAgICMgRmluYWxseSwgZ2xvYmFscy4KKyAgICBfZ2V0X3NvbWVfdHlwZV9yZWNvZ25pemVycyhyZXN1bHQsIGdkYi50eXBlX3ByaW50ZXJzKQorCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgYXBwbHlfdHlwZV9yZWNvZ25pemVycyhyZWNvZ25pemVycywgdHlwZV9vYmopOgorICAgICIiIkFwcGx5IHRoZSBnaXZlbiBsaXN0IG9mIHR5cGUgcmVjb2duaXplcnMgdG8gdGhlIHR5cGUgVFlQRV9PQkouCisgICAgSWYgYW55IHJlY29nbml6ZXIgaW4gdGhlIGxpc3QgcmVjb2duaXplcyBUWVBFX09CSiwgcmV0dXJucyB0aGUgbmFtZQorICAgIGdpdmVuIGJ5IHRoZSByZWNvZ25pemVyLiAgT3RoZXJ3aXNlLCB0aGlzIHJldHVybnMgTm9uZS4iIiIKKyAgICBmb3IgciBpbiByZWNvZ25pemVyczoKKyAgICAgICAgcmVzdWx0ID0gci5yZWNvZ25pemUodHlwZV9vYmopCisgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgcmVnaXN0ZXJfdHlwZV9wcmludGVyKGxvY3VzLCBwcmludGVyKToKKyAgICAiIiJSZWdpc3RlciBhIHR5cGUgcHJpbnRlci4KKyAgICBQUklOVEVSIGlzIHRoZSB0eXBlIHByaW50ZXIgaW5zdGFuY2UuCisgICAgTE9DVVMgaXMgZWl0aGVyIGFuIG9iamZpbGUsIGEgcHJvZ3JhbSBzcGFjZSwgb3IgTm9uZSwgaW5kaWNhdGluZworICAgIGdsb2JhbCByZWdpc3RyYXRpb24uIiIiCisKKyAgICBpZiBsb2N1cyBpcyBOb25lOgorICAgICAgICBsb2N1cyA9IGdkYgorICAgIGxvY3VzLnR5cGVfcHJpbnRlcnMuaW5zZXJ0KDAsIHByaW50ZXIpCmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvYW1kNjQtbGludXgueG1sIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL2FtZDY0LWxpbnV4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjNkYTVkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL2FtZDY0LWxpbnV4LnhtbApAQCAtMCwwICsxLDMxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorICAgICBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICAtLT4KKworPCFET0NUWVBFIGZlYXR1cmUgU1lTVEVNICJnZGItc3lzY2FsbHMuZHRkIj4KKworPCEtLSBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGU6CisgICAgIAorICAgICAvdXNyL3NyYy9saW51eC9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaAorCisgICAgIFRoZSBmaWxlIG1lbnRpb25lZCBhYm92ZSBiZWxvbmdzIHRvIHRoZSBMaW51eCBLZXJuZWwuICAtLT4KKworPHN5c2NhbGxzX2luZm8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWQiIG51bWJlcj0iMCIvPgorICA8c3lzY2FsbCBuYW1lPSJ3cml0ZSIgbnVtYmVyPSIxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im9wZW4iIG51bWJlcj0iMiIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9zZSIgbnVtYmVyPSIzIi8+CisgIDxzeXNjYWxsIG5hbWU9InN0YXQiIG51bWJlcj0iNCIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3RhdCIgbnVtYmVyPSI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzdGF0IiBudW1iZXI9IjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icG9sbCIgbnVtYmVyPSI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzZWVrIiBudW1iZXI9IjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW1hcCIgbnVtYmVyPSI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1wcm90ZWN0IiBudW1iZXI9IjEwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bm1hcCIgbnVtYmVyPSIxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJicmsiIG51bWJlcj0iMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lnYWN0aW9uIiBudW1iZXI9IjEzIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3Byb2NtYXNrIiBudW1iZXI9IjE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3JldHVybiIgbnVtYmVyPSIxNSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb2N0bCIgbnVtYmVyPSIxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmVhZDY0IiBudW1iZXI9IjE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InB3cml0ZTY0IiBudW1iZXI9IjE4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWR2IiBudW1iZXI9IjE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndyaXRldiIgbnVtYmVyPSIyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJhY2Nlc3MiIG51bWJlcj0iMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGlwZSIgbnVtYmVyPSIyMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZWxlY3QiIG51bWJlcj0iMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfeWllbGQiIG51bWJlcj0iMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXJlbWFwIiBudW1iZXI9IjI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1zeW5jIiBudW1iZXI9IjI2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1pbmNvcmUiIG51bWJlcj0iMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWFkdmlzZSIgbnVtYmVyPSIyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzaG1nZXQiIG51bWJlcj0iMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2htYXQiIG51bWJlcj0iMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2htY3RsIiBudW1iZXI9IjMxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImR1cCIgbnVtYmVyPSIzMiIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAyIiBudW1iZXI9IjMzIi8+CisgIDxzeXNjYWxsIG5hbWU9InBhdXNlIiBudW1iZXI9IjM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im5hbm9zbGVlcCIgbnVtYmVyPSIzNSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRpdGltZXIiIG51bWJlcj0iMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWxhcm0iIG51bWJlcj0iMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aXRpbWVyIiBudW1iZXI9IjM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBpZCIgbnVtYmVyPSIzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kZmlsZSIgbnVtYmVyPSI0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzb2NrZXQiIG51bWJlcj0iNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY29ubmVjdCIgbnVtYmVyPSI0MiIvPgorICA8c3lzY2FsbCBuYW1lPSJhY2NlcHQiIG51bWJlcj0iNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VuZHRvIiBudW1iZXI9IjQ0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlY3Zmcm9tIiBudW1iZXI9IjQ1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRtc2ciIG51bWJlcj0iNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVjdm1zZyIgbnVtYmVyPSI0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzaHV0ZG93biIgbnVtYmVyPSI0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJiaW5kIiBudW1iZXI9IjQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imxpc3RlbiIgbnVtYmVyPSI1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzb2NrbmFtZSIgbnVtYmVyPSI1MSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwZWVybmFtZSIgbnVtYmVyPSI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzb2NrZXRwYWlyIiBudW1iZXI9IjUzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHNvY2tvcHQiIG51bWJlcj0iNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0c29ja29wdCIgbnVtYmVyPSI1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9uZSIgbnVtYmVyPSI1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJmb3JrIiBudW1iZXI9IjU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZmb3JrIiBudW1iZXI9IjU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV4ZWN2ZSIgbnVtYmVyPSI1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJleGl0IiBudW1iZXI9IjYwIi8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXQ0IiBudW1iZXI9IjYxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImtpbGwiIG51bWJlcj0iNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5hbWUiIG51bWJlcj0iNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VtZ2V0IiBudW1iZXI9IjY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbW9wIiBudW1iZXI9IjY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbWN0bCIgbnVtYmVyPSI2NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzaG1kdCIgbnVtYmVyPSI2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJtc2dnZXQiIG51bWJlcj0iNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXNnc25kIiBudW1iZXI9IjY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1zZ3JjdiIgbnVtYmVyPSI3MCIvPgorICA8c3lzY2FsbCBuYW1lPSJtc2djdGwiIG51bWJlcj0iNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNudGwiIG51bWJlcj0iNzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmxvY2siIG51bWJlcj0iNzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN5bmMiIG51bWJlcj0iNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmRhdGFzeW5jIiBudW1iZXI9Ijc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRydW5jYXRlIiBudW1iZXI9Ijc2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0cnVuY2F0ZSIgbnVtYmVyPSI3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50cyIgbnVtYmVyPSI3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRjd2QiIG51bWJlcj0iNzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2hkaXIiIG51bWJlcj0iODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNoZGlyIiBudW1iZXI9IjgxIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlbmFtZSIgbnVtYmVyPSI4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJta2RpciIgbnVtYmVyPSI4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJybWRpciIgbnVtYmVyPSI4NCIvPgorICA8c3lzY2FsbCBuYW1lPSJjcmVhdCIgbnVtYmVyPSI4NSIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rIiBudW1iZXI9Ijg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVubGluayIgbnVtYmVyPSI4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rIiBudW1iZXI9Ijg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRsaW5rIiBudW1iZXI9Ijg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNobW9kIiBudW1iZXI9IjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG1vZCIgbnVtYmVyPSI5MSIvPgorICA8c3lzY2FsbCBuYW1lPSJjaG93biIgbnVtYmVyPSI5MiIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2hvd24iIG51bWJlcj0iOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGNob3duIiBudW1iZXI9Ijk0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVtYXNrIiBudW1iZXI9Ijk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHRpbWVvZmRheSIgbnVtYmVyPSI5NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRybGltaXQiIG51bWJlcj0iOTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cnVzYWdlIiBudW1iZXI9Ijk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5c2luZm8iIG51bWJlcj0iOTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXMiIG51bWJlcj0iMTAwIi8+CisgIDxzeXNjYWxsIG5hbWU9InB0cmFjZSIgbnVtYmVyPSIxMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dWlkIiBudW1iZXI9IjEwMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNsb2ciIG51bWJlcj0iMTAzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGdpZCIgbnVtYmVyPSIxMDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dWlkIiBudW1iZXI9IjEwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRnaWQiIG51bWJlcj0iMTA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGV1aWQiIG51bWJlcj0iMTA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGVnaWQiIG51bWJlcj0iMTA4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHBnaWQiIG51bWJlcj0iMTA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBwaWQiIG51bWJlcj0iMTEwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBncnAiIG51bWJlcj0iMTExIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHNpZCIgbnVtYmVyPSIxMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmV1aWQiIG51bWJlcj0iMTEzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJlZ2lkIiBudW1iZXI9IjExNCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRncm91cHMiIG51bWJlcj0iMTE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGdyb3VwcyIgbnVtYmVyPSIxMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzdWlkIiBudW1iZXI9IjExNyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXN1aWQiIG51bWJlcj0iMTE4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJlc2dpZCIgbnVtYmVyPSIxMTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cmVzZ2lkIiBudW1iZXI9IjEyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwZ2lkIiBudW1iZXI9IjEyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRmc3VpZCIgbnVtYmVyPSIxMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0ZnNnaWQiIG51bWJlcj0iMTIzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHNpZCIgbnVtYmVyPSIxMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2FwZ2V0IiBudW1iZXI9IjEyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJjYXBzZXQiIG51bWJlcj0iMTI2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3BlbmRpbmciIG51bWJlcj0iMTI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3RpbWVkd2FpdCIgbnVtYmVyPSIxMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncXVldWVpbmZvIiBudW1iZXI9IjEyOSIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdzdXNwZW5kIiBudW1iZXI9IjEzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdhbHRzdGFjayIgbnVtYmVyPSIxMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWUiIG51bWJlcj0iMTMyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1rbm9kIiBudW1iZXI9IjEzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJ1c2VsaWIiIG51bWJlcj0iMTM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBlcnNvbmFsaXR5IiBudW1iZXI9IjEzNSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1c3RhdCIgbnVtYmVyPSIxMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdGZzIiBudW1iZXI9IjEzNyIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3RhdGZzIiBudW1iZXI9IjEzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNmcyIgbnVtYmVyPSIxMzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cHJpb3JpdHkiIG51bWJlcj0iMTQwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHByaW9yaXR5IiBudW1iZXI9IjE0MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRwYXJhbSIgbnVtYmVyPSIxNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0cGFyYW0iIG51bWJlcj0iMTQzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldHNjaGVkdWxlciIgbnVtYmVyPSIxNDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0c2NoZWR1bGVyIiBudW1iZXI9IjE0NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IiBudW1iZXI9IjE0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRfcHJpb3JpdHlfbWluIiBudW1iZXI9IjE0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9ycl9nZXRfaW50ZXJ2YWwiIG51bWJlcj0iMTQ4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1sb2NrIiBudW1iZXI9IjE0OSIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5sb2NrIiBudW1iZXI9IjE1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJtbG9ja2FsbCIgbnVtYmVyPSIxNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXVubG9ja2FsbCIgbnVtYmVyPSIxNTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idmhhbmd1cCIgbnVtYmVyPSIxNTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW9kaWZ5X2xkdCIgbnVtYmVyPSIxNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGl2b3Rfcm9vdCIgbnVtYmVyPSIxNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX3N5c2N0bCIgbnVtYmVyPSIxNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJjdGwiIG51bWJlcj0iMTU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFyY2hfcHJjdGwiIG51bWJlcj0iMTU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFkanRpbWV4IiBudW1iZXI9IjE1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRybGltaXQiIG51bWJlcj0iMTYwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNocm9vdCIgbnVtYmVyPSIxNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3luYyIgbnVtYmVyPSIxNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjdCIgbnVtYmVyPSIxNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dGltZW9mZGF5IiBudW1iZXI9IjE2NCIvPgorICA8c3lzY2FsbCBuYW1lPSJtb3VudCIgbnVtYmVyPSIxNjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW1vdW50MiIgbnVtYmVyPSIxNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3dhcG9uIiBudW1iZXI9IjE2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb2ZmIiBudW1iZXI9IjE2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWJvb3QiIG51bWJlcj0iMTY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGhvc3RuYW1lIiBudW1iZXI9IjE3MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRkb21haW5uYW1lIiBudW1iZXI9IjE3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3BsIiBudW1iZXI9IjE3MiIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3Blcm0iIG51bWJlcj0iMTczIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNyZWF0ZV9tb2R1bGUiIG51bWJlcj0iMTc0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImluaXRfbW9kdWxlIiBudW1iZXI9IjE3NSIvPgorICA8c3lzY2FsbCBuYW1lPSJkZWxldGVfbW9kdWxlIiBudW1iZXI9IjE3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRfa2VybmVsX3N5bXMiIG51bWJlcj0iMTc3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InF1ZXJ5X21vZHVsZSIgbnVtYmVyPSIxNzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icXVvdGFjdGwiIG51bWJlcj0iMTc5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im5mc3NlcnZjdGwiIG51bWJlcj0iMTgwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBtc2ciIG51bWJlcj0iMTgxIi8+CisgIDxzeXNjYWxsIG5hbWU9InB1dHBtc2ciIG51bWJlcj0iMTgyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFmc19zeXNjYWxsIiBudW1iZXI9IjE4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJ0dXhjYWxsIiBudW1iZXI9IjE4NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZWN1cml0eSIgbnVtYmVyPSIxODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dGlkIiBudW1iZXI9IjE4NiIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkYWhlYWQiIG51bWJlcj0iMTg3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHhhdHRyIiBudW1iZXI9IjE4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJsc2V0eGF0dHIiIG51bWJlcj0iMTg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzZXR4YXR0ciIgbnVtYmVyPSIxOTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0eGF0dHIiIG51bWJlcj0iMTkxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxnZXR4YXR0ciIgbnVtYmVyPSIxOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmdldHhhdHRyIiBudW1iZXI9IjE5MyIvPgorICA8c3lzY2FsbCBuYW1lPSJsaXN0eGF0dHIiIG51bWJlcj0iMTk0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxsaXN0eGF0dHIiIG51bWJlcj0iMTk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZsaXN0eGF0dHIiIG51bWJlcj0iMTk2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbW92ZXhhdHRyIiBudW1iZXI9IjE5NyIvPgorICA8c3lzY2FsbCBuYW1lPSJscmVtb3ZleGF0dHIiIG51bWJlcj0iMTk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZyZW1vdmV4YXR0ciIgbnVtYmVyPSIxOTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGtpbGwiIG51bWJlcj0iMjAwIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWUiIG51bWJlcj0iMjAxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZ1dGV4IiBudW1iZXI9IjIwMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRhZmZpbml0eSIgbnVtYmVyPSIyMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0YWZmaW5pdHkiIG51bWJlcj0iMjA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldF90aHJlYWRfYXJlYSIgbnVtYmVyPSIyMDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fc2V0dXAiIG51bWJlcj0iMjA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2Rlc3Ryb3kiIG51bWJlcj0iMjA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2dldGV2ZW50cyIgbnVtYmVyPSIyMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fc3VibWl0IiBudW1iZXI9IjIwOSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19jYW5jZWwiIG51bWJlcj0iMjEwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF90aHJlYWRfYXJlYSIgbnVtYmVyPSIyMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibG9va3VwX2Rjb29raWUiIG51bWJlcj0iMjEyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX2NyZWF0ZSIgbnVtYmVyPSIyMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3RsX29sZCIgbnVtYmVyPSIyMTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfd2FpdF9vbGQiIG51bWJlcj0iMjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbWFwX2ZpbGVfcGFnZXMiIG51bWJlcj0iMjE2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGRlbnRzNjQiIG51bWJlcj0iMjE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldF90aWRfYWRkcmVzcyIgbnVtYmVyPSIyMTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVzdGFydF9zeXNjYWxsIiBudW1iZXI9IjIxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW10aW1lZG9wIiBudW1iZXI9IjIyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWR2aXNlNjQiIG51bWJlcj0iMjIxIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2NyZWF0ZSIgbnVtYmVyPSIyMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfc2V0dGltZSIgbnVtYmVyPSIyMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0dGltZSIgbnVtYmVyPSIyMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0b3ZlcnJ1biIgbnVtYmVyPSIyMjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZGVsZXRlIiBudW1iZXI9IjIyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19zZXR0aW1lIiBudW1iZXI9IjIyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19nZXR0aW1lIiBudW1iZXI9IjIyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19nZXRyZXMiIG51bWJlcj0iMjI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb2NrX25hbm9zbGVlcCIgbnVtYmVyPSIyMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhpdF9ncm91cCIgbnVtYmVyPSIyMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfd2FpdCIgbnVtYmVyPSIyMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3RsIiBudW1iZXI9IjIzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJ0Z2tpbGwiIG51bWJlcj0iMjM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InV0aW1lcyIgbnVtYmVyPSIyMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idnNlcnZlciIgbnVtYmVyPSIyMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWJpbmQiIG51bWJlcj0iMjM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldF9tZW1wb2xpY3kiIG51bWJlcj0iMjM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9tZW1wb2xpY3kiIG51bWJlcj0iMjM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX29wZW4iIG51bWJlcj0iMjQwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX3VubGluayIgbnVtYmVyPSIyNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfdGltZWRzZW5kIiBudW1iZXI9IjI0MiIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHJlY2VpdmUiIG51bWJlcj0iMjQzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX25vdGlmeSIgbnVtYmVyPSIyNDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfZ2V0c2V0YXR0ciIgbnVtYmVyPSIyNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2V4ZWNfbG9hZCIgbnVtYmVyPSIyNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0id2FpdGlkIiBudW1iZXI9IjI0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJhZGRfa2V5IiBudW1iZXI9IjI0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZXF1ZXN0X2tleSIgbnVtYmVyPSIyNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2V5Y3RsIiBudW1iZXI9IjI1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fc2V0IiBudW1iZXI9IjI1MSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fZ2V0IiBudW1iZXI9IjI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X2luaXQiIG51bWJlcj0iMjUzIi8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfYWRkX3dhdGNoIiBudW1iZXI9IjI1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X3JtX3dhdGNoIiBudW1iZXI9IjI1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJtaWdyYXRlX3BhZ2VzIiBudW1iZXI9IjI1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuYXQiIG51bWJlcj0iMjU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1rZGlyYXQiIG51bWJlcj0iMjU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1rbm9kYXQiIG51bWJlcj0iMjU5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93bmF0IiBudW1iZXI9IjI2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJmdXRpbWVzYXQiIG51bWJlcj0iMjYxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im5ld2ZzdGF0YXQiIG51bWJlcj0iMjYyIi8+CisgIDxzeXNjYWxsIG5hbWU9InVubGlua2F0IiBudW1iZXI9IjI2MyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW5hbWVhdCIgbnVtYmVyPSIyNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGlua2F0IiBudW1iZXI9IjI2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rYXQiIG51bWJlcj0iMjY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRsaW5rYXQiIG51bWJlcj0iMjY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG1vZGF0IiBudW1iZXI9IjI2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWNjZXNzYXQiIG51bWJlcj0iMjY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBzZWxlY3Q2IiBudW1iZXI9IjI3MCIvPgorICA8c3lzY2FsbCBuYW1lPSJwcG9sbCIgbnVtYmVyPSIyNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5zaGFyZSIgbnVtYmVyPSIyNzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0X3JvYnVzdF9saXN0IiBudW1iZXI9IjI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRfcm9idXN0X2xpc3QiIG51bWJlcj0iMjc0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNwbGljZSIgbnVtYmVyPSIyNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGVlIiBudW1iZXI9IjI3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW5jX2ZpbGVfcmFuZ2UiIG51bWJlcj0iMjc3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZtc3BsaWNlIiBudW1iZXI9IjI3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJtb3ZlX3BhZ2VzIiBudW1iZXI9IjI3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1dGltZW5zYXQiIG51bWJlcj0iMjgwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX3B3YWl0IiBudW1iZXI9IjI4MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWxmZCIgbnVtYmVyPSIyODIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9jcmVhdGUiIG51bWJlcj0iMjgzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImV2ZW50ZmQiIG51bWJlcj0iMjg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhbGxvY2F0ZSIgbnVtYmVyPSIyODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9zZXR0aW1lIiBudW1iZXI9IjI4NiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcmZkX2dldHRpbWUiIG51bWJlcj0iMjg3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VwdDQiIG51bWJlcj0iMjg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ25hbGZkNCIgbnVtYmVyPSIyODkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXZlbnRmZDIiIG51bWJlcj0iMjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX2NyZWF0ZTEiIG51bWJlcj0iMjkxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImR1cDMiIG51bWJlcj0iMjkyIi8+CisgIDxzeXNjYWxsIG5hbWU9InBpcGUyIiBudW1iZXI9IjI5MyIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X2luaXQxIiBudW1iZXI9IjI5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmVhZHYiIG51bWJlcj0iMjk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InB3cml0ZXYiIG51bWJlcj0iMjk2Ii8+Cis8L3N5c2NhbGxzX2luZm8+CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvZ2RiLXN5c2NhbGxzLmR0ZCBiL3NoYXJlL2dkYi9zeXNjYWxscy9nZGItc3lzY2FsbHMuZHRkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzFjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9nZGIvc3lzY2FsbHMvZ2RiLXN5c2NhbGxzLmR0ZApAQCAtMCwwICsxLDE0IEBACis8IS0tIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorICAgICBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICAtLT4KKworPCEtLSBUaGUgcm9vdCBlbGVtZW50IG9mIGEgc3lzY2FsbCBpbmZvIGlzIDxzeXNjYWxscy1pbmZvPi4gIC0tPgorCis8IUVMRU1FTlQgc3lzY2FsbHMtaW5mbwkJKHN5c2NhbGwqKT4KKworPCFFTEVNRU5UIHN5c2NhbGwJCUVNUFRZPgorPCFBVFRMSVNUIHN5c2NhbGwKKwluYW1lCQkJQ0RBVEEJI1JFUVVJUkVECisJbnVtYmVyCQkJQ0RBVEEJI1JFUVVJUkVEPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3N5c2NhbGxzL2kzODYtbGludXgueG1sIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL2kzODYtbGludXgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTEyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9nZGIvc3lzY2FsbHMvaTM4Ni1saW51eC54bWwKQEAgLTAsMCArMSwzNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSBmZWF0dXJlIFNZU1RFTSAiZ2RiLXN5c2NhbGxzLmR0ZCI+CisKKzwhLS0gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBmaWxlOgorICAgICAKKyAgICAgL3Vzci9zcmMvbGludXgvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKKworICAgICBUaGUgZmlsZSBtZW50aW9uZWQgYWJvdmUgYmVsb25ncyB0byB0aGUgTGludXggS2VybmVsLiAgLS0+CisKKzxzeXNjYWxsc19pbmZvPgorICA8c3lzY2FsbCBuYW1lPSJyZXN0YXJ0X3N5c2NhbGwiIG51bWJlcj0iMCIvPgorICA8c3lzY2FsbCBuYW1lPSJleGl0IiBudW1iZXI9IjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZm9yayIgbnVtYmVyPSIyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWQiIG51bWJlcj0iMyIvPgorICA8c3lzY2FsbCBuYW1lPSJ3cml0ZSIgbnVtYmVyPSI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im9wZW4iIG51bWJlcj0iNSIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9zZSIgbnVtYmVyPSI2Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXRwaWQiIG51bWJlcj0iNyIvPgorICA8c3lzY2FsbCBuYW1lPSJjcmVhdCIgbnVtYmVyPSI4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxpbmsiIG51bWJlcj0iOSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmxpbmsiIG51bWJlcj0iMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhlY3ZlIiBudW1iZXI9IjExIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNoZGlyIiBudW1iZXI9IjEyIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWUiIG51bWJlcj0iMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtub2QiIG51bWJlcj0iMTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2htb2QiIG51bWJlcj0iMTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGNob3duIiBudW1iZXI9IjE2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImJyZWFrIiBudW1iZXI9IjE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im9sZHN0YXQiIG51bWJlcj0iMTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHNlZWsiIG51bWJlcj0iMTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGlkIiBudW1iZXI9IjIwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1vdW50IiBudW1iZXI9IjIxIi8+CisgIDxzeXNjYWxsIG5hbWU9InVtb3VudCIgbnVtYmVyPSIyMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXR1aWQiIG51bWJlcj0iMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dWlkIiBudW1iZXI9IjI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN0aW1lIiBudW1iZXI9IjI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InB0cmFjZSIgbnVtYmVyPSIyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJhbGFybSIgbnVtYmVyPSIyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJvbGRmc3RhdCIgbnVtYmVyPSIyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJwYXVzZSIgbnVtYmVyPSIyOSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1dGltZSIgbnVtYmVyPSIzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdHR5IiBudW1iZXI9IjMxIi8+CisgIDxzeXNjYWxsIG5hbWU9Imd0dHkiIG51bWJlcj0iMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjZXNzIiBudW1iZXI9IjMzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im5pY2UiIG51bWJlcj0iMzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnRpbWUiIG51bWJlcj0iMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3luYyIgbnVtYmVyPSIzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJraWxsIiBudW1iZXI9IjM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbmFtZSIgbnVtYmVyPSIzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJta2RpciIgbnVtYmVyPSIzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJybWRpciIgbnVtYmVyPSI0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAiIG51bWJlcj0iNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGlwZSIgbnVtYmVyPSI0MiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcyIgbnVtYmVyPSI0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJwcm9mIiBudW1iZXI9IjQ0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImJyayIgbnVtYmVyPSI0NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRnaWQiIG51bWJlcj0iNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0Z2lkIiBudW1iZXI9IjQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ25hbCIgbnVtYmVyPSI0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRldWlkIiBudW1iZXI9IjQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGVnaWQiIG51bWJlcj0iNTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjdCIgbnVtYmVyPSI1MSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bW91bnQyIiBudW1iZXI9IjUyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxvY2siIG51bWJlcj0iNTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9jdGwiIG51bWJlcj0iNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNudGwiIG51bWJlcj0iNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXB4IiBudW1iZXI9IjU2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHBnaWQiIG51bWJlcj0iNTciLz4KKyAgPHN5c2NhbGwgbmFtZT0idWxpbWl0IiBudW1iZXI9IjU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im9sZG9sZHVuYW1lIiBudW1iZXI9IjU5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVtYXNrIiBudW1iZXI9IjYwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNocm9vdCIgbnVtYmVyPSI2MSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1c3RhdCIgbnVtYmVyPSI2MiIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAyIiBudW1iZXI9IjYzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBwaWQiIG51bWJlcj0iNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGdycCIgbnVtYmVyPSI2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRzaWQiIG51bWJlcj0iNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnYWN0aW9uIiBudW1iZXI9IjY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNnZXRtYXNrIiBudW1iZXI9IjY4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNzZXRtYXNrIiBudW1iZXI9IjY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJldWlkIiBudW1iZXI9IjcwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJlZ2lkIiBudW1iZXI9IjcxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ3N1c3BlbmQiIG51bWJlcj0iNzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lncGVuZGluZyIgbnVtYmVyPSI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRob3N0bmFtZSIgbnVtYmVyPSI3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRybGltaXQiIG51bWJlcj0iNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cmxpbWl0IiBudW1iZXI9Ijc2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHJ1c2FnZSIgbnVtYmVyPSI3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR0aW1lb2ZkYXkiIG51bWJlcj0iNzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dGltZW9mZGF5IiBudW1iZXI9Ijc5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGdyb3VwcyIgbnVtYmVyPSI4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRncm91cHMiIG51bWJlcj0iODEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VsZWN0IiBudW1iZXI9IjgyIi8+CisgIDxzeXNjYWxsIG5hbWU9InN5bWxpbmsiIG51bWJlcj0iODMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ib2xkbHN0YXQiIG51bWJlcj0iODQiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGxpbmsiIG51bWJlcj0iODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXNlbGliIiBudW1iZXI9Ijg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN3YXBvbiIgbnVtYmVyPSI4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWJvb3QiIG51bWJlcj0iODgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGRpciIgbnVtYmVyPSI4OSIvPgorICA8c3lzY2FsbCBuYW1lPSJtbWFwIiBudW1iZXI9IjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bm1hcCIgbnVtYmVyPSI5MSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0cnVuY2F0ZSIgbnVtYmVyPSI5MiIvPgorICA8c3lzY2FsbCBuYW1lPSJmdHJ1bmNhdGUiIG51bWJlcj0iOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNobW9kIiBudW1iZXI9Ijk0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93biIgbnVtYmVyPSI5NSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcmlvcml0eSIgbnVtYmVyPSI5NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRwcmlvcml0eSIgbnVtYmVyPSI5NyIvPgorICA8c3lzY2FsbCBuYW1lPSJwcm9maWwiIG51bWJlcj0iOTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdGZzIiBudW1iZXI9Ijk5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0ZnMiIG51bWJlcj0iMTAwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcGVybSIgbnVtYmVyPSIxMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic29ja2V0Y2FsbCIgbnVtYmVyPSIxMDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3lzbG9nIiBudW1iZXI9IjEwMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRpdGltZXIiIG51bWJlcj0iMTA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGl0aW1lciIgbnVtYmVyPSIxMDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdCIgbnVtYmVyPSIxMDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHN0YXQiIG51bWJlcj0iMTA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0IiBudW1iZXI9IjEwOCIvPgorICA8c3lzY2FsbCBuYW1lPSJvbGR1bmFtZSIgbnVtYmVyPSIxMDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9wbCIgbnVtYmVyPSIxMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idmhhbmd1cCIgbnVtYmVyPSIxMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaWRsZSIgbnVtYmVyPSIxMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idm04Nm9sZCIgbnVtYmVyPSIxMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0id2FpdDQiIG51bWJlcj0iMTE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN3YXBvZmYiIG51bWJlcj0iMTE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5c2luZm8iIG51bWJlcj0iMTE2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlwYyIgbnVtYmVyPSIxMTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN5bmMiIG51bWJlcj0iMTE4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ3JldHVybiIgbnVtYmVyPSIxMTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvbmUiIG51bWJlcj0iMTIwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldGRvbWFpbm5hbWUiIG51bWJlcj0iMTIxIi8+CisgIDxzeXNjYWxsIG5hbWU9InVuYW1lIiBudW1iZXI9IjEyMiIvPgorICA8c3lzY2FsbCBuYW1lPSJtb2RpZnlfbGR0IiBudW1iZXI9IjEyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJhZGp0aW1leCIgbnVtYmVyPSIxMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXByb3RlY3QiIG51bWJlcj0iMTI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ3Byb2NtYXNrIiBudW1iZXI9IjEyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJjcmVhdGVfbW9kdWxlIiBudW1iZXI9IjEyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJpbml0X21vZHVsZSIgbnVtYmVyPSIxMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZGVsZXRlX21vZHVsZSIgbnVtYmVyPSIxMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0X2tlcm5lbF9zeW1zIiBudW1iZXI9IjEzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJxdW90YWN0bCIgbnVtYmVyPSIxMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGdpZCIgbnVtYmVyPSIxMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNoZGlyIiBudW1iZXI9IjEzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJiZGZsdXNoIiBudW1iZXI9IjEzNCIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNmcyIgbnVtYmVyPSIxMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyc29uYWxpdHkiIG51bWJlcj0iMTM2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFmc19zeXNjYWxsIiBudW1iZXI9IjEzNyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRmc3VpZCIgbnVtYmVyPSIxMzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0ZnNnaWQiIG51bWJlcj0iMTM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Il9sbHNlZWsiIG51bWJlcj0iMTQwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGRlbnRzIiBudW1iZXI9IjE0MSIvPgorICA8c3lzY2FsbCBuYW1lPSJfbmV3c2VsZWN0IiBudW1iZXI9IjE0MiIvPgorICA8c3lzY2FsbCBuYW1lPSJmbG9jayIgbnVtYmVyPSIxNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXN5bmMiIG51bWJlcj0iMTQ0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWR2IiBudW1iZXI9IjE0NSIvPgorICA8c3lzY2FsbCBuYW1lPSJ3cml0ZXYiIG51bWJlcj0iMTQ2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHNpZCIgbnVtYmVyPSIxNDciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmRhdGFzeW5jIiBudW1iZXI9IjE0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJfc3lzY3RsIiBudW1iZXI9IjE0OSIvPgorICA8c3lzY2FsbCBuYW1lPSJtbG9jayIgbnVtYmVyPSIxNTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXVubG9jayIgbnVtYmVyPSIxNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWxvY2thbGwiIG51bWJlcj0iMTUyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2thbGwiIG51bWJlcj0iMTUzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldHBhcmFtIiBudW1iZXI9IjE1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRwYXJhbSIgbnVtYmVyPSIxNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfc2V0c2NoZWR1bGVyIiBudW1iZXI9IjE1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRzY2hlZHVsZXIiIG51bWJlcj0iMTU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3lpZWxkIiBudW1iZXI9IjE1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IiBudW1iZXI9IjE1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRfcHJpb3JpdHlfbWluIiBudW1iZXI9IjE2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9ycl9nZXRfaW50ZXJ2YWwiIG51bWJlcj0iMTYxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im5hbm9zbGVlcCIgbnVtYmVyPSIxNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXJlbWFwIiBudW1iZXI9IjE2MyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXN1aWQiIG51bWJlcj0iMTY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHJlc3VpZCIgbnVtYmVyPSIxNjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idm04NiIgbnVtYmVyPSIxNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icXVlcnlfbW9kdWxlIiBudW1iZXI9IjE2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJwb2xsIiBudW1iZXI9IjE2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJuZnNzZXJ2Y3RsIiBudW1iZXI9IjE2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXNnaWQiIG51bWJlcj0iMTcwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHJlc2dpZCIgbnVtYmVyPSIxNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJjdGwiIG51bWJlcj0iMTcyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3JldHVybiIgbnVtYmVyPSIxNzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lnYWN0aW9uIiBudW1iZXI9IjE3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdwcm9jbWFzayIgbnVtYmVyPSIxNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncGVuZGluZyIgbnVtYmVyPSIxNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lndGltZWR3YWl0IiBudW1iZXI9IjE3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdxdWV1ZWluZm8iIG51bWJlcj0iMTc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3N1c3BlbmQiIG51bWJlcj0iMTc5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InByZWFkNjQiIG51bWJlcj0iMTgwIi8+CisgIDxzeXNjYWxsIG5hbWU9InB3cml0ZTY0IiBudW1iZXI9IjE4MSIvPgorICA8c3lzY2FsbCBuYW1lPSJjaG93biIgbnVtYmVyPSIxODIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0Y3dkIiBudW1iZXI9IjE4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJjYXBnZXQiIG51bWJlcj0iMTg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNhcHNldCIgbnVtYmVyPSIxODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnYWx0c3RhY2siIG51bWJlcj0iMTg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRmaWxlIiBudW1iZXI9IjE4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwbXNnIiBudW1iZXI9IjE4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJwdXRwbXNnIiBudW1iZXI9IjE4OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ2Zm9yayIgbnVtYmVyPSIxOTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idWdldHJsaW1pdCIgbnVtYmVyPSIxOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW1hcDIiIG51bWJlcj0iMTkyIi8+CisgIDxzeXNjYWxsIG5hbWU9InRydW5jYXRlNjQiIG51bWJlcj0iMTkzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0cnVuY2F0ZTY0IiBudW1iZXI9IjE5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0NjQiIG51bWJlcj0iMTk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzdGF0NjQiIG51bWJlcj0iMTk2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0NjQiIG51bWJlcj0iMTk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxjaG93bjMyIiBudW1iZXI9IjE5OCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR1aWQzMiIgbnVtYmVyPSIxOTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0Z2lkMzIiIG51bWJlcj0iMjAwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGV1aWQzMiIgbnVtYmVyPSIyMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZWdpZDMyIiBudW1iZXI9IjIwMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXVpZDMyIiBudW1iZXI9IjIwMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZWdpZDMyIiBudW1iZXI9IjIwNCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRncm91cHMzMiIgbnVtYmVyPSIyMDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0Z3JvdXBzMzIiIG51bWJlcj0iMjA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93bjMyIiBudW1iZXI9IjIwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXN1aWQzMiIgbnVtYmVyPSIyMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cmVzdWlkMzIiIG51bWJlcj0iMjA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJlc2dpZDMyIiBudW1iZXI9IjIxMCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXNnaWQzMiIgbnVtYmVyPSIyMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2hvd24zMiIgbnVtYmVyPSIyMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dWlkMzIiIG51bWJlcj0iMjEzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldGdpZDMyIiBudW1iZXI9IjIxNCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRmc3VpZDMyIiBudW1iZXI9IjIxNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRmc2dpZDMyIiBudW1iZXI9IjIxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJwaXZvdF9yb290IiBudW1iZXI9IjIxNyIvPgorICA8c3lzY2FsbCBuYW1lPSJtaW5jb3JlIiBudW1iZXI9IjIxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJtYWR2aXNlIiBudW1iZXI9IjIxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJtYWR2aXNlMSIgbnVtYmVyPSIyMjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZGVudHM2NCIgbnVtYmVyPSIyMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNudGw2NCIgbnVtYmVyPSIyMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dGlkIiBudW1iZXI9IjIyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkYWhlYWQiIG51bWJlcj0iMjI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHhhdHRyIiBudW1iZXI9IjIyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJsc2V0eGF0dHIiIG51bWJlcj0iMjI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzZXR4YXR0ciIgbnVtYmVyPSIyMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0eGF0dHIiIG51bWJlcj0iMjI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxnZXR4YXR0ciIgbnVtYmVyPSIyMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmdldHhhdHRyIiBudW1iZXI9IjIzMSIvPgorICA8c3lzY2FsbCBuYW1lPSJsaXN0eGF0dHIiIG51bWJlcj0iMjMyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxsaXN0eGF0dHIiIG51bWJlcj0iMjMzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZsaXN0eGF0dHIiIG51bWJlcj0iMjM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbW92ZXhhdHRyIiBudW1iZXI9IjIzNSIvPgorICA8c3lzY2FsbCBuYW1lPSJscmVtb3ZleGF0dHIiIG51bWJlcj0iMjM2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZyZW1vdmV4YXR0ciIgbnVtYmVyPSIyMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0idGtpbGwiIG51bWJlcj0iMjM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRmaWxlNjQiIG51bWJlcj0iMjM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ1dGV4IiBudW1iZXI9IjI0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRhZmZpbml0eSIgbnVtYmVyPSIyNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0YWZmaW5pdHkiIG51bWJlcj0iMjQyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldF90aHJlYWRfYXJlYSIgbnVtYmVyPSIyNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0X3RocmVhZF9hcmVhIiBudW1iZXI9IjI0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19zZXR1cCIgbnVtYmVyPSIyNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fZGVzdHJveSIgbnVtYmVyPSIyNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fZ2V0ZXZlbnRzIiBudW1iZXI9IjI0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19zdWJtaXQiIG51bWJlcj0iMjQ4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2NhbmNlbCIgbnVtYmVyPSIyNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFkdmlzZTY0IiBudW1iZXI9IjI1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJleGl0X2dyb3VwIiBudW1iZXI9IjI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJsb29rdXBfZGNvb2tpZSIgbnVtYmVyPSIyNTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3JlYXRlIiBudW1iZXI9IjI1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9jdGwiIG51bWJlcj0iMjU1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX3dhaXQiIG51bWJlcj0iMjU2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbWFwX2ZpbGVfcGFnZXMiIG51bWJlcj0iMjU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldF90aWRfYWRkcmVzcyIgbnVtYmVyPSIyNTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfY3JlYXRlIiBudW1iZXI9IjI1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9zZXR0aW1lIiBudW1iZXI9IjI2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9nZXR0aW1lIiBudW1iZXI9IjI2MSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9nZXRvdmVycnVuIiBudW1iZXI9IjI2MiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9kZWxldGUiIG51bWJlcj0iMjYzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb2NrX3NldHRpbWUiIG51bWJlcj0iMjY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb2NrX2dldHRpbWUiIG51bWJlcj0iMjY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb2NrX2dldHJlcyIgbnVtYmVyPSIyNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfbmFub3NsZWVwIiBudW1iZXI9IjI2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0ZnM2NCIgbnVtYmVyPSIyNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXRmczY0IiBudW1iZXI9IjI2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0Z2tpbGwiIG51bWJlcj0iMjcwIi8+CisgIDxzeXNjYWxsIG5hbWU9InV0aW1lcyIgbnVtYmVyPSIyNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFkdmlzZTY0XzY0IiBudW1iZXI9IjI3MiIvPgorICA8c3lzY2FsbCBuYW1lPSJ2c2VydmVyIiBudW1iZXI9IjI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJtYmluZCIgbnVtYmVyPSIyNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0X21lbXBvbGljeSIgbnVtYmVyPSIyNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0X21lbXBvbGljeSIgbnVtYmVyPSIyNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfb3BlbiIgbnVtYmVyPSIyNzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfdW5saW5rIiBudW1iZXI9IjI3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHNlbmQiIG51bWJlcj0iMjc5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX3RpbWVkcmVjZWl2ZSIgbnVtYmVyPSIyODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfbm90aWZ5IiBudW1iZXI9IjI4MSIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9nZXRzZXRhdHRyIiBudW1iZXI9IjI4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJrZXhlY19sb2FkIiBudW1iZXI9IjI4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJ3YWl0aWQiIG51bWJlcj0iMjg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFkZF9rZXkiIG51bWJlcj0iMjg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlcXVlc3Rfa2V5IiBudW1iZXI9IjI4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJrZXljdGwiIG51bWJlcj0iMjg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcHJpb19zZXQiIG51bWJlcj0iMjg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcHJpb19nZXQiIG51bWJlcj0iMjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfaW5pdCIgbnVtYmVyPSIyOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5vdGlmeV9hZGRfd2F0Y2giIG51bWJlcj0iMjkyIi8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfcm1fd2F0Y2giIG51bWJlcj0iMjkzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1pZ3JhdGVfcGFnZXMiIG51bWJlcj0iMjk0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im9wZW5hdCIgbnVtYmVyPSIyOTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtkaXJhdCIgbnVtYmVyPSIyOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtub2RhdCIgbnVtYmVyPSIyOTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNob3duYXQiIG51bWJlcj0iMjk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ1dGltZXNhdCIgbnVtYmVyPSIyOTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXRhdDY0IiBudW1iZXI9IjMwMCIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmxpbmthdCIgbnVtYmVyPSIzMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVuYW1lYXQiIG51bWJlcj0iMzAyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxpbmthdCIgbnVtYmVyPSIzMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3ltbGlua2F0IiBudW1iZXI9IjMwNCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkbGlua2F0IiBudW1iZXI9IjMwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2htb2RhdCIgbnVtYmVyPSIzMDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFjY2Vzc2F0IiBudW1iZXI9IjMwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJwc2VsZWN0NiIgbnVtYmVyPSIzMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHBvbGwiIG51bWJlcj0iMzA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVuc2hhcmUiIG51bWJlcj0iMzEwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldF9yb2J1c3RfbGlzdCIgbnVtYmVyPSIzMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0X3JvYnVzdF9saXN0IiBudW1iZXI9IjMxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzcGxpY2UiIG51bWJlcj0iMzEzIi8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmNfZmlsZV9yYW5nZSIgbnVtYmVyPSIzMTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGVlIiBudW1iZXI9IjMxNSIvPgorICA8c3lzY2FsbCBuYW1lPSJ2bXNwbGljZSIgbnVtYmVyPSIzMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW92ZV9wYWdlcyIgbnVtYmVyPSIzMTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0Y3B1IiBudW1iZXI9IjMxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9wd2FpdCIgbnVtYmVyPSIzMTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVuc2F0IiBudW1iZXI9IjMyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWxmZCIgbnVtYmVyPSIzMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9jcmVhdGUiIG51bWJlcj0iMzIyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImV2ZW50ZmQiIG51bWJlcj0iMzIzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZhbGxvY2F0ZSIgbnVtYmVyPSIzMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9zZXR0aW1lIiBudW1iZXI9IjMyNSIvPgorPC9zeXNjYWxsc19pbmZvPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3N5c2NhbGxzL21pcHMtbjMyLWxpbnV4LnhtbCBiL3NoYXJlL2dkYi9zeXNjYWxscy9taXBzLW4zMi1saW51eC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlMjE4MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9taXBzLW4zMi1saW51eC54bWwKQEAgLTAsMCArMSwzMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSBmZWF0dXJlIFNZU1RFTSAiZ2RiLXN5c2NhbGxzLmR0ZCI+CisKKzwhLS0gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBmaWxlOgorICAgICAKKyAgICAgL3Vzci9zcmMvbGludXgvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisKKyAgICAgVGhlIGZpbGUgbWVudGlvbmVkIGFib3ZlIGJlbG9uZ3MgdG8gdGhlIExpbnV4IEtlcm5lbC4gIC0tPgorCis8c3lzY2FsbHNfaW5mbz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZCIgbnVtYmVyPSI2MDAwIi8+CisgIDxzeXNjYWxsIG5hbWU9IndyaXRlIiBudW1iZXI9IjYwMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ib3BlbiIgbnVtYmVyPSI2MDAyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb3NlIiBudW1iZXI9IjYwMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdCIgbnVtYmVyPSI2MDA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0IiBudW1iZXI9IjYwMDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHN0YXQiIG51bWJlcj0iNjAwNiIvPgorICA8c3lzY2FsbCBuYW1lPSJwb2xsIiBudW1iZXI9IjYwMDciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHNlZWsiIG51bWJlcj0iNjAwOCIvPgorICA8c3lzY2FsbCBuYW1lPSJtbWFwIiBudW1iZXI9IjYwMDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXByb3RlY3QiIG51bWJlcj0iNjAxMCIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5tYXAiIG51bWJlcj0iNjAxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJicmsiIG51bWJlcj0iNjAxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdhY3Rpb24iIG51bWJlcj0iNjAxMyIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdwcm9jbWFzayIgbnVtYmVyPSI2MDE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvY3RsIiBudW1iZXI9IjYwMTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJlYWQ2NCIgbnVtYmVyPSI2MDE2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InB3cml0ZTY0IiBudW1iZXI9IjYwMTciLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZHYiIG51bWJlcj0iNjAxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJ3cml0ZXYiIG51bWJlcj0iNjAxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJhY2Nlc3MiIG51bWJlcj0iNjAyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJwaXBlIiBudW1iZXI9IjYwMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX25ld3NlbGVjdCIgbnVtYmVyPSI2MDIyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3lpZWxkIiBudW1iZXI9IjYwMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXJlbWFwIiBudW1iZXI9IjYwMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXN5bmMiIG51bWJlcj0iNjAyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJtaW5jb3JlIiBudW1iZXI9IjYwMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWFkdmlzZSIgbnVtYmVyPSI2MDI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNobWdldCIgbnVtYmVyPSI2MDI4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNobWF0IiBudW1iZXI9IjYwMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2htY3RsIiBudW1iZXI9IjYwMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwIiBudW1iZXI9IjYwMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwMiIgbnVtYmVyPSI2MDMyIi8+CisgIDxzeXNjYWxsIG5hbWU9InBhdXNlIiBudW1iZXI9IjYwMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibmFub3NsZWVwIiBudW1iZXI9IjYwMzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0aXRpbWVyIiBudW1iZXI9IjYwMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aXRpbWVyIiBudW1iZXI9IjYwMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWxhcm0iIG51bWJlcj0iNjAzNyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwaWQiIG51bWJlcj0iNjAzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kZmlsZSIgbnVtYmVyPSI2MDM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNvY2tldCIgbnVtYmVyPSI2MDQwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNvbm5lY3QiIG51bWJlcj0iNjA0MSIvPgorICA8c3lzY2FsbCBuYW1lPSJhY2NlcHQiIG51bWJlcj0iNjA0MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kdG8iIG51bWJlcj0iNjA0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWN2ZnJvbSIgbnVtYmVyPSI2MDQ0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRtc2ciIG51bWJlcj0iNjA0NSIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWN2bXNnIiBudW1iZXI9IjYwNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2h1dGRvd24iIG51bWJlcj0iNjA0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJiaW5kIiBudW1iZXI9IjYwNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGlzdGVuIiBudW1iZXI9IjYwNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0c29ja25hbWUiIG51bWJlcj0iNjA1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwZWVybmFtZSIgbnVtYmVyPSI2MDUxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNvY2tldHBhaXIiIG51bWJlcj0iNjA1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRzb2Nrb3B0IiBudW1iZXI9IjYwNTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0c29ja29wdCIgbnVtYmVyPSI2MDU0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb25lIiBudW1iZXI9IjYwNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZm9yayIgbnVtYmVyPSI2MDU2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV4ZWN2ZSIgbnVtYmVyPSI2MDU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV4aXQiIG51bWJlcj0iNjA1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJ3YWl0NCIgbnVtYmVyPSI2MDU5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImtpbGwiIG51bWJlcj0iNjA2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmFtZSIgbnVtYmVyPSI2MDYxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNlbWdldCIgbnVtYmVyPSI2MDYyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNlbW9wIiBudW1iZXI9IjYwNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VtY3RsIiBudW1iZXI9IjYwNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2htZHQiIG51bWJlcj0iNjA2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJtc2dnZXQiIG51bWJlcj0iNjA2NiIvPgorICA8c3lzY2FsbCBuYW1lPSJtc2dzbmQiIG51bWJlcj0iNjA2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJtc2dyY3YiIG51bWJlcj0iNjA2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJtc2djdGwiIG51bWJlcj0iNjA2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJmY250bCIgbnVtYmVyPSI2MDcwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZsb2NrIiBudW1iZXI9IjYwNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN5bmMiIG51bWJlcj0iNjA3MiIvPgorICA8c3lzY2FsbCBuYW1lPSJmZGF0YXN5bmMiIG51bWJlcj0iNjA3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJ0cnVuY2F0ZSIgbnVtYmVyPSI2MDc0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0cnVuY2F0ZSIgbnVtYmVyPSI2MDc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGRlbnRzIiBudW1iZXI9IjYwNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0Y3dkIiBudW1iZXI9IjYwNzciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2hkaXIiIG51bWJlcj0iNjA3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2hkaXIiIG51bWJlcj0iNjA3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW5hbWUiIG51bWJlcj0iNjA4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJta2RpciIgbnVtYmVyPSI2MDgxIi8+CisgIDxzeXNjYWxsIG5hbWU9InJtZGlyIiBudW1iZXI9IjYwODIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXQiIG51bWJlcj0iNjA4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rIiBudW1iZXI9IjYwODQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5saW5rIiBudW1iZXI9IjYwODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3ltbGluayIgbnVtYmVyPSI2MDg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRsaW5rIiBudW1iZXI9IjYwODciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2htb2QiIG51bWJlcj0iNjA4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2htb2QiIG51bWJlcj0iNjA4OSIvPgorICA8c3lzY2FsbCBuYW1lPSJjaG93biIgbnVtYmVyPSI2MDkwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93biIgbnVtYmVyPSI2MDkxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxjaG93biIgbnVtYmVyPSI2MDkyIi8+CisgIDxzeXNjYWxsIG5hbWU9InVtYXNrIiBudW1iZXI9IjYwOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dGltZW9mZGF5IiBudW1iZXI9IjYwOTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cmxpbWl0IiBudW1iZXI9IjYwOTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cnVzYWdlIiBudW1iZXI9IjYwOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3lzaW5mbyIgbnVtYmVyPSI2MDk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVzIiBudW1iZXI9IjYwOTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHRyYWNlIiBudW1iZXI9IjYwOTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dWlkIiBudW1iZXI9IjYxMDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3lzbG9nIiBudW1iZXI9IjYxMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0Z2lkIiBudW1iZXI9IjYxMDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dWlkIiBudW1iZXI9IjYxMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0Z2lkIiBudW1iZXI9IjYxMDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZXVpZCIgbnVtYmVyPSI2MTA1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGVnaWQiIG51bWJlcj0iNjEwNiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRwZ2lkIiBudW1iZXI9IjYxMDciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cHBpZCIgbnVtYmVyPSI2MTA4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBncnAiIG51bWJlcj0iNjEwOSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRzaWQiIG51bWJlcj0iNjExMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXVpZCIgbnVtYmVyPSI2MTExIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJlZ2lkIiBudW1iZXI9IjYxMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0Z3JvdXBzIiBudW1iZXI9IjYxMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0Z3JvdXBzIiBudW1iZXI9IjYxMTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzdWlkIiBudW1iZXI9IjYxMTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cmVzdWlkIiBudW1iZXI9IjYxMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzZ2lkIiBudW1iZXI9IjYxMTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cmVzZ2lkIiBudW1iZXI9IjYxMTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGdpZCIgbnVtYmVyPSI2MTE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGZzdWlkIiBudW1iZXI9IjYxMjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0ZnNnaWQiIG51bWJlcj0iNjEyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzaWQiIG51bWJlcj0iNjEyMiIvPgorICA8c3lzY2FsbCBuYW1lPSJjYXBnZXQiIG51bWJlcj0iNjEyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJjYXBzZXQiIG51bWJlcj0iNjEyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdwZW5kaW5nIiBudW1iZXI9IjYxMjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lndGltZWR3YWl0IiBudW1iZXI9IjYxMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncXVldWVpbmZvIiBudW1iZXI9IjYxMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lnc3VzcGVuZCIgbnVtYmVyPSI2MTI4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ2FsdHN0YWNrIiBudW1iZXI9IjYxMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWUiIG51bWJlcj0iNjEzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJta25vZCIgbnVtYmVyPSI2MTMxIi8+CisgIDxzeXNjYWxsIG5hbWU9InBlcnNvbmFsaXR5IiBudW1iZXI9IjYxMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXN0YXQiIG51bWJlcj0iNjEzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0ZnMiIG51bWJlcj0iNjEzNCIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3RhdGZzIiBudW1iZXI9IjYxMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3lzZnMiIG51bWJlcj0iNjEzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcmlvcml0eSIgbnVtYmVyPSI2MTM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHByaW9yaXR5IiBudW1iZXI9IjYxMzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfc2V0cGFyYW0iIG51bWJlcj0iNjEzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRwYXJhbSIgbnVtYmVyPSI2MTQwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldHNjaGVkdWxlciIgbnVtYmVyPSI2MTQxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldHNjaGVkdWxlciIgbnVtYmVyPSI2MTQyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldF9wcmlvcml0eV9tYXgiIG51bWJlcj0iNjE0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRfcHJpb3JpdHlfbWluIiBudW1iZXI9IjYxNDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfcnJfZ2V0X2ludGVydmFsIiBudW1iZXI9IjYxNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWxvY2siIG51bWJlcj0iNjE0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5sb2NrIiBudW1iZXI9IjYxNDciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWxvY2thbGwiIG51bWJlcj0iNjE0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5sb2NrYWxsIiBudW1iZXI9IjYxNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idmhhbmd1cCIgbnVtYmVyPSI2MTUwIi8+CisgIDxzeXNjYWxsIG5hbWU9InBpdm90X3Jvb3QiIG51bWJlcj0iNjE1MSIvPgorICA8c3lzY2FsbCBuYW1lPSJfc3lzY3RsIiBudW1iZXI9IjYxNTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJjdGwiIG51bWJlcj0iNjE1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJhZGp0aW1leCIgbnVtYmVyPSI2MTU0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJsaW1pdCIgbnVtYmVyPSI2MTU1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNocm9vdCIgbnVtYmVyPSI2MTU2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmMiIG51bWJlcj0iNjE1NyIvPgorICA8c3lzY2FsbCBuYW1lPSJhY2N0IiBudW1iZXI9IjYxNTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dGltZW9mZGF5IiBudW1iZXI9IjYxNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW91bnQiIG51bWJlcj0iNjE2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bW91bnQyIiBudW1iZXI9IjYxNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3dhcG9uIiBudW1iZXI9IjYxNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3dhcG9mZiIgbnVtYmVyPSI2MTYzIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlYm9vdCIgbnVtYmVyPSI2MTY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGhvc3RuYW1lIiBudW1iZXI9IjYxNjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0ZG9tYWlubmFtZSIgbnVtYmVyPSI2MTY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNyZWF0ZV9tb2R1bGUiIG51bWJlcj0iNjE2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJpbml0X21vZHVsZSIgbnVtYmVyPSI2MTY4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImRlbGV0ZV9tb2R1bGUiIG51bWJlcj0iNjE2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRfa2VybmVsX3N5bXMiIG51bWJlcj0iNjE3MCIvPgorICA8c3lzY2FsbCBuYW1lPSJxdWVyeV9tb2R1bGUiIG51bWJlcj0iNjE3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJxdW90YWN0bCIgbnVtYmVyPSI2MTcyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im5mc3NlcnZjdGwiIG51bWJlcj0iNjE3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwbXNnIiBudW1iZXI9IjYxNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHV0cG1zZyIgbnVtYmVyPSI2MTc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFmc19zeXNjYWxsIiBudW1iZXI9IjYxNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVzZXJ2ZWQxNzciIG51bWJlcj0iNjE3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR0aWQiIG51bWJlcj0iNjE3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkYWhlYWQiIG51bWJlcj0iNjE3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXR4YXR0ciIgbnVtYmVyPSI2MTgwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxzZXR4YXR0ciIgbnVtYmVyPSI2MTgxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZzZXR4YXR0ciIgbnVtYmVyPSI2MTgyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHhhdHRyIiBudW1iZXI9IjYxODMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGdldHhhdHRyIiBudW1iZXI9IjYxODQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmdldHhhdHRyIiBudW1iZXI9IjYxODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGlzdHhhdHRyIiBudW1iZXI9IjYxODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGxpc3R4YXR0ciIgbnVtYmVyPSI2MTg3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZsaXN0eGF0dHIiIG51bWJlcj0iNjE4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW1vdmV4YXR0ciIgbnVtYmVyPSI2MTg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxyZW1vdmV4YXR0ciIgbnVtYmVyPSI2MTkwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZyZW1vdmV4YXR0ciIgbnVtYmVyPSI2MTkxIi8+CisgIDxzeXNjYWxsIG5hbWU9InRraWxsIiBudW1iZXI9IjYxOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVzZXJ2ZWQxOTMiIG51bWJlcj0iNjE5MyIvPgorICA8c3lzY2FsbCBuYW1lPSJmdXRleCIgbnVtYmVyPSI2MTk0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldGFmZmluaXR5IiBudW1iZXI9IjYxOTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0YWZmaW5pdHkiIG51bWJlcj0iNjE5NiIvPgorICA8c3lzY2FsbCBuYW1lPSJjYWNoZWZsdXNoIiBudW1iZXI9IjYxOTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2FjaGVjdGwiIG51bWJlcj0iNjE5OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNtaXBzIiBudW1iZXI9IjYxOTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fc2V0dXAiIG51bWJlcj0iNjIwMCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19kZXN0cm95IiBudW1iZXI9IjYyMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fZ2V0ZXZlbnRzIiBudW1iZXI9IjYyMDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fc3VibWl0IiBudW1iZXI9IjYyMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fY2FuY2VsIiBudW1iZXI9IjYyMDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhpdF9ncm91cCIgbnVtYmVyPSI2MjA1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imxvb2t1cF9kY29va2llIiBudW1iZXI9IjYyMDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3JlYXRlIiBudW1iZXI9IjYyMDciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3RsIiBudW1iZXI9IjYyMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfd2FpdCIgbnVtYmVyPSI2MjA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbWFwX2ZpbGVfcGFnZXMiIG51bWJlcj0iNjIxMCIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdyZXR1cm4iIG51bWJlcj0iNjIxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJmY250bDY0IiBudW1iZXI9IjYyMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0X3RpZF9hZGRyZXNzIiBudW1iZXI9IjYyMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVzdGFydF9zeXNjYWxsIiBudW1iZXI9IjYyMTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VtdGltZWRvcCIgbnVtYmVyPSI2MjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhZHZpc2U2NCIgbnVtYmVyPSI2MjE2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN0YXRmczY0IiBudW1iZXI9IjYyMTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXRmczY0IiBudW1iZXI9IjYyMTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VuZGZpbGU2NCIgbnVtYmVyPSI2MjE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2NyZWF0ZSIgbnVtYmVyPSI2MjIwIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX3NldHRpbWUiIG51bWJlcj0iNjIyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9nZXR0aW1lIiBudW1iZXI9IjYyMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0b3ZlcnJ1biIgbnVtYmVyPSI2MjIzIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2RlbGV0ZSIgbnVtYmVyPSI2MjI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb2NrX3NldHRpbWUiIG51bWJlcj0iNjIyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19nZXR0aW1lIiBudW1iZXI9IjYyMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0cmVzIiBudW1iZXI9IjYyMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfbmFub3NsZWVwIiBudW1iZXI9IjYyMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGdraWxsIiBudW1iZXI9IjYyMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVzIiBudW1iZXI9IjYyMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWJpbmQiIG51bWJlcj0iNjIzMSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRfbWVtcG9saWN5IiBudW1iZXI9IjYyMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0X21lbXBvbGljeSIgbnVtYmVyPSI2MjMzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX29wZW4iIG51bWJlcj0iNjIzNCIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV91bmxpbmsiIG51bWJlcj0iNjIzNSIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHNlbmQiIG51bWJlcj0iNjIzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHJlY2VpdmUiIG51bWJlcj0iNjIzNyIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9ub3RpZnkiIG51bWJlcj0iNjIzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9nZXRzZXRhdHRyIiBudW1iZXI9IjYyMzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idnNlcnZlciIgbnVtYmVyPSI2MjQwIi8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXRpZCIgbnVtYmVyPSI2MjQxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFkZF9rZXkiIG51bWJlcj0iNjI0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZXF1ZXN0X2tleSIgbnVtYmVyPSI2MjQ0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImtleWN0bCIgbnVtYmVyPSI2MjQ1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldF90aHJlYWRfYXJlYSIgbnVtYmVyPSI2MjQ2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfaW5pdCIgbnVtYmVyPSI2MjQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfYWRkX3dhdGNoIiBudW1iZXI9IjYyNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5vdGlmeV9ybV93YXRjaCIgbnVtYmVyPSI2MjQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1pZ3JhdGVfcGFnZXMiIG51bWJlcj0iNjI1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuYXQiIG51bWJlcj0iNjI1MSIvPgorICA8c3lzY2FsbCBuYW1lPSJta2RpcmF0IiBudW1iZXI9IjYyNTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtub2RhdCIgbnVtYmVyPSI2MjUzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93bmF0IiBudW1iZXI9IjYyNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnV0aW1lc2F0IiBudW1iZXI9IjYyNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibmV3ZnN0YXRhdCIgbnVtYmVyPSI2MjU2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVubGlua2F0IiBudW1iZXI9IjYyNTciLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVuYW1lYXQiIG51bWJlcj0iNjI1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rYXQiIG51bWJlcj0iNjI1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rYXQiIG51bWJlcj0iNjI2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkbGlua2F0IiBudW1iZXI9IjYyNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNobW9kYXQiIG51bWJlcj0iNjI2MiIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWNjZXNzYXQiIG51bWJlcj0iNjI2MyIvPgorICA8c3lzY2FsbCBuYW1lPSJwc2VsZWN0NiIgbnVtYmVyPSI2MjY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBwb2xsIiBudW1iZXI9IjYyNjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5zaGFyZSIgbnVtYmVyPSI2MjY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNwbGljZSIgbnVtYmVyPSI2MjY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmNfZmlsZV9yYW5nZSIgbnVtYmVyPSI2MjY4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRlZSIgbnVtYmVyPSI2MjY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZtc3BsaWNlIiBudW1iZXI9IjYyNzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW92ZV9wYWdlcyIgbnVtYmVyPSI2MjcxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldF9yb2J1c3RfbGlzdCIgbnVtYmVyPSI2MjcyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9yb2J1c3RfbGlzdCIgbnVtYmVyPSI2MjczIi8+CisgIDxzeXNjYWxsIG5hbWU9ImtleGVjX2xvYWQiIG51bWJlcj0iNjI3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRjcHUiIG51bWJlcj0iNjI3NSIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9wd2FpdCIgbnVtYmVyPSI2Mjc2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcHJpb19zZXQiIG51bWJlcj0iNjI3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fZ2V0IiBudW1iZXI9IjYyNzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVuc2F0IiBudW1iZXI9IjYyNzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnbmFsZmQiIG51bWJlcj0iNjI4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcmZkIiBudW1iZXI9IjYyODEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXZlbnRmZCIgbnVtYmVyPSI2MjgyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZhbGxvY2F0ZSIgbnVtYmVyPSI2MjgzIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyZmRfY3JlYXRlIiBudW1iZXI9IjYyODQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9nZXR0aW1lIiBudW1iZXI9IjYyODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9zZXR0aW1lIiBudW1iZXI9IjYyODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnbmFsZmQ0IiBudW1iZXI9IjYyODciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXZlbnRmZDIiIG51bWJlcj0iNjI4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9jcmVhdGUxIiBudW1iZXI9IjYyODkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwMyIgbnVtYmVyPSI2MjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9InBpcGUyIiBudW1iZXI9IjYyOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5vdGlmeV9pbml0MSIgbnVtYmVyPSI2MjkyIi8+CisgIDxzeXNjYWxsIG5hbWU9InByZWFkdiIgbnVtYmVyPSI2MjkzIi8+CisgIDxzeXNjYWxsIG5hbWU9InB3cml0ZXYiIG51bWJlcj0iNjI5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJydF90Z3NpZ3F1ZXVlaW5mbyIgbnVtYmVyPSI2Mjk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBlcmZfZXZlbnRfb3BlbiIgbnVtYmVyPSI2Mjk2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VwdDQiIG51bWJlcj0iNjI5NyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWN2bW1zZyIgbnVtYmVyPSI2Mjk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGRlbnRzNjQiIG51bWJlcj0iNjI5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJmYW5vdGlmeV9pbml0IiBudW1iZXI9IjYzMDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFub3RpZnlfbWFyayIgbnVtYmVyPSI2MzAxIi8+CisgIDxzeXNjYWxsIG5hbWU9InBybGltaXQ2NCIgbnVtYmVyPSI2MzAyIi8+Cis8L3N5c2NhbGxzX2luZm8+CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvbWlwcy1uNjQtbGludXgueG1sIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL21pcHMtbjY0LWxpbnV4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTZlMGMwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL21pcHMtbjY0LWxpbnV4LnhtbApAQCAtMCwwICsxLDMxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorICAgICBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICAtLT4KKworPCFET0NUWVBFIGZlYXR1cmUgU1lTVEVNICJnZGItc3lzY2FsbHMuZHRkIj4KKworPCEtLSBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGU6CisgICAgIAorICAgICAvdXNyL3NyYy9saW51eC9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKworICAgICBUaGUgZmlsZSBtZW50aW9uZWQgYWJvdmUgYmVsb25ncyB0byB0aGUgTGludXggS2VybmVsLiAgLS0+CisKKzxzeXNjYWxsc19pbmZvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkIiBudW1iZXI9IjUwMDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0id3JpdGUiIG51bWJlcj0iNTAwMSIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuIiBudW1iZXI9IjUwMDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvc2UiIG51bWJlcj0iNTAwMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0IiBudW1iZXI9IjUwMDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXQiIG51bWJlcj0iNTAwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJsc3RhdCIgbnVtYmVyPSI1MDA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBvbGwiIG51bWJlcj0iNTAwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJsc2VlayIgbnVtYmVyPSI1MDA4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1tYXAiIG51bWJlcj0iNTAwOSIvPgorICA8c3lzY2FsbCBuYW1lPSJtcHJvdGVjdCIgbnVtYmVyPSI1MDEwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bm1hcCIgbnVtYmVyPSI1MDExIi8+CisgIDxzeXNjYWxsIG5hbWU9ImJyayIgbnVtYmVyPSI1MDEyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ2FjdGlvbiIgbnVtYmVyPSI1MDEzIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3Byb2NtYXNrIiBudW1iZXI9IjUwMTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9jdGwiIG51bWJlcj0iNTAxNSIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmVhZDY0IiBudW1iZXI9IjUwMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHdyaXRlNjQiIG51bWJlcj0iNTAxNyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkdiIgbnVtYmVyPSI1MDE4Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndyaXRldiIgbnVtYmVyPSI1MDE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VzcyIgbnVtYmVyPSI1MDIwIi8+CisgIDxzeXNjYWxsIG5hbWU9InBpcGUiIG51bWJlcj0iNTAyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJfbmV3c2VsZWN0IiBudW1iZXI9IjUwMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfeWllbGQiIG51bWJlcj0iNTAyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJtcmVtYXAiIG51bWJlcj0iNTAyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJtc3luYyIgbnVtYmVyPSI1MDI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1pbmNvcmUiIG51bWJlcj0iNTAyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJtYWR2aXNlIiBudW1iZXI9IjUwMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2htZ2V0IiBudW1iZXI9IjUwMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2htYXQiIG51bWJlcj0iNTAyOSIvPgorICA8c3lzY2FsbCBuYW1lPSJzaG1jdGwiIG51bWJlcj0iNTAzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAiIG51bWJlcj0iNTAzMSIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAyIiBudW1iZXI9IjUwMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGF1c2UiIG51bWJlcj0iNTAzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJuYW5vc2xlZXAiIG51bWJlcj0iNTAzNCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRpdGltZXIiIG51bWJlcj0iNTAzNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRpdGltZXIiIG51bWJlcj0iNTAzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJhbGFybSIgbnVtYmVyPSI1MDM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBpZCIgbnVtYmVyPSI1MDM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRmaWxlIiBudW1iZXI9IjUwMzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic29ja2V0IiBudW1iZXI9IjUwNDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY29ubmVjdCIgbnVtYmVyPSI1MDQxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VwdCIgbnVtYmVyPSI1MDQyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmR0byIgbnVtYmVyPSI1MDQzIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlY3Zmcm9tIiBudW1iZXI9IjUwNDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VuZG1zZyIgbnVtYmVyPSI1MDQ1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlY3Ztc2ciIG51bWJlcj0iNTA0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzaHV0ZG93biIgbnVtYmVyPSI1MDQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImJpbmQiIG51bWJlcj0iNTA0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJsaXN0ZW4iIG51bWJlcj0iNTA0OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzb2NrbmFtZSIgbnVtYmVyPSI1MDUwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBlZXJuYW1lIiBudW1iZXI9IjUwNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic29ja2V0cGFpciIgbnVtYmVyPSI1MDUyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHNvY2tvcHQiIG51bWJlcj0iNTA1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzb2Nrb3B0IiBudW1iZXI9IjUwNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvbmUiIG51bWJlcj0iNTA1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJmb3JrIiBudW1iZXI9IjUwNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhlY3ZlIiBudW1iZXI9IjUwNTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhpdCIgbnVtYmVyPSI1MDU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXQ0IiBudW1iZXI9IjUwNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2lsbCIgbnVtYmVyPSI1MDYwIi8+CisgIDxzeXNjYWxsIG5hbWU9InVuYW1lIiBudW1iZXI9IjUwNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VtZ2V0IiBudW1iZXI9IjUwNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2Vtb3AiIG51bWJlcj0iNTA2MyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW1jdGwiIG51bWJlcj0iNTA2NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzaG1kdCIgbnVtYmVyPSI1MDY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1zZ2dldCIgbnVtYmVyPSI1MDY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1zZ3NuZCIgbnVtYmVyPSI1MDY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1zZ3JjdiIgbnVtYmVyPSI1MDY4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1zZ2N0bCIgbnVtYmVyPSI1MDY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjbnRsIiBudW1iZXI9IjUwNzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmxvY2siIG51bWJlcj0iNTA3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3luYyIgbnVtYmVyPSI1MDcyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZkYXRhc3luYyIgbnVtYmVyPSI1MDczIi8+CisgIDxzeXNjYWxsIG5hbWU9InRydW5jYXRlIiBudW1iZXI9IjUwNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnRydW5jYXRlIiBudW1iZXI9IjUwNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZGVudHMiIG51bWJlcj0iNTA3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRjd2QiIG51bWJlcj0iNTA3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJjaGRpciIgbnVtYmVyPSI1MDc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaGRpciIgbnVtYmVyPSI1MDc5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbmFtZSIgbnVtYmVyPSI1MDgwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1rZGlyIiBudW1iZXI9IjUwODEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icm1kaXIiIG51bWJlcj0iNTA4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJjcmVhdCIgbnVtYmVyPSI1MDgzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxpbmsiIG51bWJlcj0iNTA4NCIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmxpbmsiIG51bWJlcj0iNTA4NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rIiBudW1iZXI9IjUwODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGxpbmsiIG51bWJlcj0iNTA4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJjaG1vZCIgbnVtYmVyPSI1MDg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG1vZCIgbnVtYmVyPSI1MDg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNob3duIiBudW1iZXI9IjUwOTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNob3duIiBudW1iZXI9IjUwOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGNob3duIiBudW1iZXI9IjUwOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW1hc2siIG51bWJlcj0iNTA5MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR0aW1lb2ZkYXkiIG51bWJlcj0iNTA5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRybGltaXQiIG51bWJlcj0iNTA5NSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRydXNhZ2UiIG51bWJlcj0iNTA5NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNpbmZvIiBudW1iZXI9IjUwOTciLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXMiIG51bWJlcj0iNTA5OCIvPgorICA8c3lzY2FsbCBuYW1lPSJwdHJhY2UiIG51bWJlcj0iNTA5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR1aWQiIG51bWJlcj0iNTEwMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNsb2ciIG51bWJlcj0iNTEwMSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRnaWQiIG51bWJlcj0iNTEwMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXR1aWQiIG51bWJlcj0iNTEwMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRnaWQiIG51bWJlcj0iNTEwNCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRldWlkIiBudW1iZXI9IjUxMDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZWdpZCIgbnVtYmVyPSI1MTA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHBnaWQiIG51bWJlcj0iNTEwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcGlkIiBudW1iZXI9IjUxMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGdycCIgbnVtYmVyPSI1MTA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHNpZCIgbnVtYmVyPSI1MTEwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJldWlkIiBudW1iZXI9IjUxMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVnaWQiIG51bWJlcj0iNTExMiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRncm91cHMiIG51bWJlcj0iNTExMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRncm91cHMiIG51bWJlcj0iNTExNCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXN1aWQiIG51bWJlcj0iNTExNSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXN1aWQiIG51bWJlcj0iNTExNiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXNnaWQiIG51bWJlcj0iNTExNyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXNnaWQiIG51bWJlcj0iNTExOCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwZ2lkIiBudW1iZXI9IjUxMTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0ZnN1aWQiIG51bWJlcj0iNTEyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRmc2dpZCIgbnVtYmVyPSI1MTIxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHNpZCIgbnVtYmVyPSI1MTIyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNhcGdldCIgbnVtYmVyPSI1MTIzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNhcHNldCIgbnVtYmVyPSI1MTI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3BlbmRpbmciIG51bWJlcj0iNTEyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWd0aW1lZHdhaXQiIG51bWJlcj0iNTEyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdxdWV1ZWluZm8iIG51bWJlcj0iNTEyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdzdXNwZW5kIiBudW1iZXI9IjUxMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnYWx0c3RhY2siIG51bWJlcj0iNTEyOSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1dGltZSIgbnVtYmVyPSI1MTMwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1rbm9kIiBudW1iZXI9IjUxMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyc29uYWxpdHkiIG51bWJlcj0iNTEzMiIvPgorICA8c3lzY2FsbCBuYW1lPSJ1c3RhdCIgbnVtYmVyPSI1MTMzIi8+CisgIDxzeXNjYWxsIG5hbWU9InN0YXRmcyIgbnVtYmVyPSI1MTM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0ZnMiIG51bWJlcj0iNTEzNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNmcyIgbnVtYmVyPSI1MTM2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHByaW9yaXR5IiBudW1iZXI9IjUxMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cHJpb3JpdHkiIG51bWJlcj0iNTEzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRwYXJhbSIgbnVtYmVyPSI1MTM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldHBhcmFtIiBudW1iZXI9IjUxNDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfc2V0c2NoZWR1bGVyIiBudW1iZXI9IjUxNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0c2NoZWR1bGVyIiBudW1iZXI9IjUxNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21heCIgbnVtYmVyPSI1MTQzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldF9wcmlvcml0eV9taW4iIG51bWJlcj0iNTE0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9ycl9nZXRfaW50ZXJ2YWwiIG51bWJlcj0iNTE0NSIvPgorICA8c3lzY2FsbCBuYW1lPSJtbG9jayIgbnVtYmVyPSI1MTQ2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2siIG51bWJlcj0iNTE0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJtbG9ja2FsbCIgbnVtYmVyPSI1MTQ4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2thbGwiIG51bWJlcj0iNTE0OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ2aGFuZ3VwIiBudW1iZXI9IjUxNTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGl2b3Rfcm9vdCIgbnVtYmVyPSI1MTUxIi8+CisgIDxzeXNjYWxsIG5hbWU9Il9zeXNjdGwiIG51bWJlcj0iNTE1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmN0bCIgbnVtYmVyPSI1MTUzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFkanRpbWV4IiBudW1iZXI9IjUxNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmxpbWl0IiBudW1iZXI9IjUxNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2hyb290IiBudW1iZXI9IjUxNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3luYyIgbnVtYmVyPSI1MTU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY3QiIG51bWJlcj0iNTE1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXR0aW1lb2ZkYXkiIG51bWJlcj0iNTE1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJtb3VudCIgbnVtYmVyPSI1MTYwIi8+CisgIDxzeXNjYWxsIG5hbWU9InVtb3VudDIiIG51bWJlcj0iNTE2MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb24iIG51bWJlcj0iNTE2MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb2ZmIiBudW1iZXI9IjUxNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVib290IiBudW1iZXI9IjUxNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aG9zdG5hbWUiIG51bWJlcj0iNTE2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRkb21haW5uYW1lIiBudW1iZXI9IjUxNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXRlX21vZHVsZSIgbnVtYmVyPSI1MTY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImluaXRfbW9kdWxlIiBudW1iZXI9IjUxNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZGVsZXRlX21vZHVsZSIgbnVtYmVyPSI1MTY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9rZXJuZWxfc3ltcyIgbnVtYmVyPSI1MTcwIi8+CisgIDxzeXNjYWxsIG5hbWU9InF1ZXJ5X21vZHVsZSIgbnVtYmVyPSI1MTcxIi8+CisgIDxzeXNjYWxsIG5hbWU9InF1b3RhY3RsIiBudW1iZXI9IjUxNzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibmZzc2VydmN0bCIgbnVtYmVyPSI1MTczIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBtc2ciIG51bWJlcj0iNTE3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJwdXRwbXNnIiBudW1iZXI9IjUxNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWZzX3N5c2NhbGwiIG51bWJlcj0iNTE3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR0aWQiIG51bWJlcj0iNTE3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkYWhlYWQiIG51bWJlcj0iNTE3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXR4YXR0ciIgbnVtYmVyPSI1MTgwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxzZXR4YXR0ciIgbnVtYmVyPSI1MTgxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZzZXR4YXR0ciIgbnVtYmVyPSI1MTgyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHhhdHRyIiBudW1iZXI9IjUxODMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGdldHhhdHRyIiBudW1iZXI9IjUxODQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmdldHhhdHRyIiBudW1iZXI9IjUxODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGlzdHhhdHRyIiBudW1iZXI9IjUxODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGxpc3R4YXR0ciIgbnVtYmVyPSI1MTg3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZsaXN0eGF0dHIiIG51bWJlcj0iNTE4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW1vdmV4YXR0ciIgbnVtYmVyPSI1MTg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxyZW1vdmV4YXR0ciIgbnVtYmVyPSI1MTkwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZyZW1vdmV4YXR0ciIgbnVtYmVyPSI1MTkxIi8+CisgIDxzeXNjYWxsIG5hbWU9InRraWxsIiBudW1iZXI9IjUxOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnV0ZXgiIG51bWJlcj0iNTE5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRhZmZpbml0eSIgbnVtYmVyPSI1MTk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldGFmZmluaXR5IiBudW1iZXI9IjUxOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2FjaGVmbHVzaCIgbnVtYmVyPSI1MTk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNhY2hlY3RsIiBudW1iZXI9IjUxOTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3lzbWlwcyIgbnVtYmVyPSI1MTk5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX3NldHVwIiBudW1iZXI9IjUyMDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fZGVzdHJveSIgbnVtYmVyPSI1MjAxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2dldGV2ZW50cyIgbnVtYmVyPSI1MjAyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX3N1Ym1pdCIgbnVtYmVyPSI1MjAzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2NhbmNlbCIgbnVtYmVyPSI1MjA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV4aXRfZ3JvdXAiIG51bWJlcj0iNTIwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJsb29rdXBfZGNvb2tpZSIgbnVtYmVyPSI1MjA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX2NyZWF0ZSIgbnVtYmVyPSI1MjA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX2N0bCIgbnVtYmVyPSI1MjA4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX3dhaXQiIG51bWJlcj0iNTIwOSIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW1hcF9maWxlX3BhZ2VzIiBudW1iZXI9IjUyMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncmV0dXJuIiBudW1iZXI9IjUyMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0X3RpZF9hZGRyZXNzIiBudW1iZXI9IjUyMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVzdGFydF9zeXNjYWxsIiBudW1iZXI9IjUyMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VtdGltZWRvcCIgbnVtYmVyPSI1MjE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhZHZpc2U2NCIgbnVtYmVyPSI1MjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2NyZWF0ZSIgbnVtYmVyPSI1MjE2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX3NldHRpbWUiIG51bWJlcj0iNTIxNyIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9nZXR0aW1lIiBudW1iZXI9IjUyMTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0b3ZlcnJ1biIgbnVtYmVyPSI1MjE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2RlbGV0ZSIgbnVtYmVyPSI1MjIwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb2NrX3NldHRpbWUiIG51bWJlcj0iNTIyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19nZXR0aW1lIiBudW1iZXI9IjUyMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0cmVzIiBudW1iZXI9IjUyMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfbmFub3NsZWVwIiBudW1iZXI9IjUyMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGdraWxsIiBudW1iZXI9IjUyMjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVzIiBudW1iZXI9IjUyMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWJpbmQiIG51bWJlcj0iNTIyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRfbWVtcG9saWN5IiBudW1iZXI9IjUyMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0X21lbXBvbGljeSIgbnVtYmVyPSI1MjI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX29wZW4iIG51bWJlcj0iNTIzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV91bmxpbmsiIG51bWJlcj0iNTIzMSIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHNlbmQiIG51bWJlcj0iNTIzMiIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHJlY2VpdmUiIG51bWJlcj0iNTIzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9ub3RpZnkiIG51bWJlcj0iNTIzNCIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9nZXRzZXRhdHRyIiBudW1iZXI9IjUyMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idnNlcnZlciIgbnVtYmVyPSI1MjM2Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXRpZCIgbnVtYmVyPSI1MjM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFkZF9rZXkiIG51bWJlcj0iNTIzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJyZXF1ZXN0X2tleSIgbnVtYmVyPSI1MjQwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImtleWN0bCIgbnVtYmVyPSI1MjQxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldF90aHJlYWRfYXJlYSIgbnVtYmVyPSI1MjQyIi8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfaW5pdCIgbnVtYmVyPSI1MjQzIi8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfYWRkX3dhdGNoIiBudW1iZXI9IjUyNDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5vdGlmeV9ybV93YXRjaCIgbnVtYmVyPSI1MjQ1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1pZ3JhdGVfcGFnZXMiIG51bWJlcj0iNTI0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuYXQiIG51bWJlcj0iNTI0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJta2RpcmF0IiBudW1iZXI9IjUyNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtub2RhdCIgbnVtYmVyPSI1MjQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93bmF0IiBudW1iZXI9IjUyNTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnV0aW1lc2F0IiBudW1iZXI9IjUyNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibmV3ZnN0YXRhdCIgbnVtYmVyPSI1MjUyIi8+CisgIDxzeXNjYWxsIG5hbWU9InVubGlua2F0IiBudW1iZXI9IjUyNTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVuYW1lYXQiIG51bWJlcj0iNTI1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rYXQiIG51bWJlcj0iNTI1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rYXQiIG51bWJlcj0iNTI1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkbGlua2F0IiBudW1iZXI9IjUyNTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNobW9kYXQiIG51bWJlcj0iNTI1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWNjZXNzYXQiIG51bWJlcj0iNTI1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJwc2VsZWN0NiIgbnVtYmVyPSI1MjYwIi8+CisgIDxzeXNjYWxsIG5hbWU9InBwb2xsIiBudW1iZXI9IjUyNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5zaGFyZSIgbnVtYmVyPSI1MjYyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNwbGljZSIgbnVtYmVyPSI1MjYzIi8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmNfZmlsZV9yYW5nZSIgbnVtYmVyPSI1MjY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRlZSIgbnVtYmVyPSI1MjY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZtc3BsaWNlIiBudW1iZXI9IjUyNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW92ZV9wYWdlcyIgbnVtYmVyPSI1MjY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldF9yb2J1c3RfbGlzdCIgbnVtYmVyPSI1MjY4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9yb2J1c3RfbGlzdCIgbnVtYmVyPSI1MjY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImtleGVjX2xvYWQiIG51bWJlcj0iNTI3MCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRjcHUiIG51bWJlcj0iNTI3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9wd2FpdCIgbnVtYmVyPSI1MjcyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcHJpb19zZXQiIG51bWJlcj0iNTI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fZ2V0IiBudW1iZXI9IjUyNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVuc2F0IiBudW1iZXI9IjUyNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnbmFsZmQiIG51bWJlcj0iNTI3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcmZkIiBudW1iZXI9IjUyNzciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXZlbnRmZCIgbnVtYmVyPSI1Mjc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhbGxvY2F0ZSIgbnVtYmVyPSI1Mjc5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyZmRfY3JlYXRlIiBudW1iZXI9IjUyODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9nZXR0aW1lIiBudW1iZXI9IjUyODEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9zZXR0aW1lIiBudW1iZXI9IjUyODIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnbmFsZmQ0IiBudW1iZXI9IjUyODMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXZlbnRmZDIiIG51bWJlcj0iNTI4NCIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9jcmVhdGUxIiBudW1iZXI9IjUyODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwMyIgbnVtYmVyPSI1Mjg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBpcGUyIiBudW1iZXI9IjUyODciLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5vdGlmeV9pbml0MSIgbnVtYmVyPSI1Mjg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InByZWFkdiIgbnVtYmVyPSI1Mjg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InB3cml0ZXYiIG51bWJlcj0iNTI5MCIvPgorICA8c3lzY2FsbCBuYW1lPSJydF90Z3NpZ3F1ZXVlaW5mbyIgbnVtYmVyPSI1MjkxIi8+CisgIDxzeXNjYWxsIG5hbWU9InBlcmZfZXZlbnRfb3BlbiIgbnVtYmVyPSI1MjkyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VwdDQiIG51bWJlcj0iNTI5MyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWN2bW1zZyIgbnVtYmVyPSI1Mjk0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhbm90aWZ5X2luaXQiIG51bWJlcj0iNTI5NSIvPgorICA8c3lzY2FsbCBuYW1lPSJmYW5vdGlmeV9tYXJrIiBudW1iZXI9IjUyOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJsaW1pdDY0IiBudW1iZXI9IjUyOTciLz4KKzwvc3lzY2FsbHNfaW5mbz4KZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9zeXNjYWxscy9taXBzLW8zMi1saW51eC54bWwgYi9zaGFyZS9nZGIvc3lzY2FsbHMvbWlwcy1vMzItbGludXgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMTEyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9nZGIvc3lzY2FsbHMvbWlwcy1vMzItbGludXgueG1sCkBAIC0wLDAgKzEsMzQ3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CisgICAgIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIC0tPgorCis8IURPQ1RZUEUgZmVhdHVyZSBTWVNURU0gImdkYi1zeXNjYWxscy5kdGQiPgorCis8IS0tIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgZmlsZToKKyAgICAgCisgICAgIC91c3Ivc3JjL2xpbnV4L2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaAorCisgICAgIFRoZSBmaWxlIG1lbnRpb25lZCBhYm92ZSBiZWxvbmdzIHRvIHRoZSBMaW51eCBLZXJuZWwuICAtLT4KKworPHN5c2NhbGxzX2luZm8+CisgIDxzeXNjYWxsIG5hbWU9InN5c2NhbGwiIG51bWJlcj0iNDAwMCIvPgorICA8c3lzY2FsbCBuYW1lPSJleGl0IiBudW1iZXI9IjQwMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZm9yayIgbnVtYmVyPSI0MDAyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWQiIG51bWJlcj0iNDAwMyIvPgorICA8c3lzY2FsbCBuYW1lPSJ3cml0ZSIgbnVtYmVyPSI0MDA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im9wZW4iIG51bWJlcj0iNDAwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9zZSIgbnVtYmVyPSI0MDA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXRwaWQiIG51bWJlcj0iNDAwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJjcmVhdCIgbnVtYmVyPSI0MDA4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxpbmsiIG51bWJlcj0iNDAwOSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmxpbmsiIG51bWJlcj0iNDAxMCIvPgorICA8c3lzY2FsbCBuYW1lPSJleGVjdmUiIG51bWJlcj0iNDAxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJjaGRpciIgbnVtYmVyPSI0MDEyIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWUiIG51bWJlcj0iNDAxMyIvPgorICA8c3lzY2FsbCBuYW1lPSJta25vZCIgbnVtYmVyPSI0MDE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNobW9kIiBudW1iZXI9IjQwMTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGNob3duIiBudW1iZXI9IjQwMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYnJlYWsiIG51bWJlcj0iNDAxNyIvPgorICA8c3lzY2FsbCBuYW1lPSJsc2VlayIgbnVtYmVyPSI0MDE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBpZCIgbnVtYmVyPSI0MDIwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1vdW50IiBudW1iZXI9IjQwMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW1vdW50IiBudW1iZXI9IjQwMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dWlkIiBudW1iZXI9IjQwMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dWlkIiBudW1iZXI9IjQwMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RpbWUiIG51bWJlcj0iNDAyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJwdHJhY2UiIG51bWJlcj0iNDAyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJhbGFybSIgbnVtYmVyPSI0MDI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBhdXNlIiBudW1iZXI9IjQwMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWUiIG51bWJlcj0iNDAzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdHR5IiBudW1iZXI9IjQwMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ3R0eSIgbnVtYmVyPSI0MDMyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VzcyIgbnVtYmVyPSI0MDMzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im5pY2UiIG51bWJlcj0iNDAzNCIvPgorICA8c3lzY2FsbCBuYW1lPSJmdGltZSIgbnVtYmVyPSI0MDM1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmMiIG51bWJlcj0iNDAzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJraWxsIiBudW1iZXI9IjQwMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVuYW1lIiBudW1iZXI9IjQwMzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtkaXIiIG51bWJlcj0iNDAzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJybWRpciIgbnVtYmVyPSI0MDQwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImR1cCIgbnVtYmVyPSI0MDQxIi8+CisgIDxzeXNjYWxsIG5hbWU9InBpcGUiIG51bWJlcj0iNDA0MiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcyIgbnVtYmVyPSI0MDQzIi8+CisgIDxzeXNjYWxsIG5hbWU9InByb2YiIG51bWJlcj0iNDA0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJicmsiIG51bWJlcj0iNDA0NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRnaWQiIG51bWJlcj0iNDA0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRnaWQiIG51bWJlcj0iNDA0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWwiIG51bWJlcj0iNDA0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRldWlkIiBudW1iZXI9IjQwNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZWdpZCIgbnVtYmVyPSI0MDUwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY3QiIG51bWJlcj0iNDA1MSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bW91bnQyIiBudW1iZXI9IjQwNTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibG9jayIgbnVtYmVyPSI0MDUzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvY3RsIiBudW1iZXI9IjQwNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNudGwiIG51bWJlcj0iNDA1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJtcHgiIG51bWJlcj0iNDA1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRwZ2lkIiBudW1iZXI9IjQwNTciLz4KKyAgPHN5c2NhbGwgbmFtZT0idWxpbWl0IiBudW1iZXI9IjQwNTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW1hc2siIG51bWJlcj0iNDA2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJjaHJvb3QiIG51bWJlcj0iNDA2MSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1c3RhdCIgbnVtYmVyPSI0MDYyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImR1cDIiIG51bWJlcj0iNDA2MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcGlkIiBudW1iZXI9IjQwNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGdycCIgbnVtYmVyPSI0MDY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHNpZCIgbnVtYmVyPSI0MDY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ2FjdGlvbiIgbnVtYmVyPSI0MDY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNnZXRtYXNrIiBudW1iZXI9IjQwNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3NldG1hc2siIG51bWJlcj0iNDA2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXVpZCIgbnVtYmVyPSI0MDcwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJlZ2lkIiBudW1iZXI9IjQwNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnc3VzcGVuZCIgbnVtYmVyPSI0MDcyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ3BlbmRpbmciIG51bWJlcj0iNDA3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRob3N0bmFtZSIgbnVtYmVyPSI0MDc0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJsaW1pdCIgbnVtYmVyPSI0MDc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHJsaW1pdCIgbnVtYmVyPSI0MDc2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHJ1c2FnZSIgbnVtYmVyPSI0MDc3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHRpbWVvZmRheSIgbnVtYmVyPSI0MDc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHRpbWVvZmRheSIgbnVtYmVyPSI0MDc5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGdyb3VwcyIgbnVtYmVyPSI0MDgwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldGdyb3VwcyIgbnVtYmVyPSI0MDgxIi8+CisgIDxzeXNjYWxsIG5hbWU9InN5bWxpbmsiIG51bWJlcj0iNDA4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkbGluayIgbnVtYmVyPSI0MDg1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVzZWxpYiIgbnVtYmVyPSI0MDg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN3YXBvbiIgbnVtYmVyPSI0MDg3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYm9vdCIgbnVtYmVyPSI0MDg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRkaXIiIG51bWJlcj0iNDA4OSIvPgorICA8c3lzY2FsbCBuYW1lPSJtbWFwIiBudW1iZXI9IjQwOTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXVubWFwIiBudW1iZXI9IjQwOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idHJ1bmNhdGUiIG51bWJlcj0iNDA5MiIvPgorICA8c3lzY2FsbCBuYW1lPSJmdHJ1bmNhdGUiIG51bWJlcj0iNDA5MyIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2htb2QiIG51bWJlcj0iNDA5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2hvd24iIG51bWJlcj0iNDA5NSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcmlvcml0eSIgbnVtYmVyPSI0MDk2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHByaW9yaXR5IiBudW1iZXI9IjQwOTciLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJvZmlsIiBudW1iZXI9IjQwOTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdGZzIiBudW1iZXI9IjQwOTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXRmcyIgbnVtYmVyPSI0MTAwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcGVybSIgbnVtYmVyPSI0MTAxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNvY2tldGNhbGwiIG51bWJlcj0iNDEwMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNsb2ciIG51bWJlcj0iNDEwMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRpdGltZXIiIG51bWJlcj0iNDEwNCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRpdGltZXIiIG51bWJlcj0iNDEwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0IiBudW1iZXI9IjQxMDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHN0YXQiIG51bWJlcj0iNDEwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3RhdCIgbnVtYmVyPSI0MTA4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcGwiIG51bWJlcj0iNDExMCIvPgorICA8c3lzY2FsbCBuYW1lPSJ2aGFuZ3VwIiBudW1iZXI9IjQxMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaWRsZSIgbnVtYmVyPSI0MTEyIi8+CisgIDxzeXNjYWxsIG5hbWU9InZtODYiIG51bWJlcj0iNDExMyIvPgorICA8c3lzY2FsbCBuYW1lPSJ3YWl0NCIgbnVtYmVyPSI0MTE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN3YXBvZmYiIG51bWJlcj0iNDExNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNpbmZvIiBudW1iZXI9IjQxMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaXBjIiBudW1iZXI9IjQxMTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN5bmMiIG51bWJlcj0iNDExOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdyZXR1cm4iIG51bWJlcj0iNDExOSIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9uZSIgbnVtYmVyPSI0MTIwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldGRvbWFpbm5hbWUiIG51bWJlcj0iNDEyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmFtZSIgbnVtYmVyPSI0MTIyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1vZGlmeV9sZHQiIG51bWJlcj0iNDEyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJhZGp0aW1leCIgbnVtYmVyPSI0MTI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1wcm90ZWN0IiBudW1iZXI9IjQxMjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lncHJvY21hc2siIG51bWJlcj0iNDEyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJjcmVhdGVfbW9kdWxlIiBudW1iZXI9IjQxMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5pdF9tb2R1bGUiIG51bWJlcj0iNDEyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJkZWxldGVfbW9kdWxlIiBudW1iZXI9IjQxMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0X2tlcm5lbF9zeW1zIiBudW1iZXI9IjQxMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icXVvdGFjdGwiIG51bWJlcj0iNDEzMSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwZ2lkIiBudW1iZXI9IjQxMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNoZGlyIiBudW1iZXI9IjQxMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYmRmbHVzaCIgbnVtYmVyPSI0MTM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5c2ZzIiBudW1iZXI9IjQxMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyc29uYWxpdHkiIG51bWJlcj0iNDEzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJhZnNfc3lzY2FsbCIgbnVtYmVyPSI0MTM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGZzdWlkIiBudW1iZXI9IjQxMzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0ZnNnaWQiIG51bWJlcj0iNDEzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJfbGxzZWVrIiBudW1iZXI9IjQxNDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZGVudHMiIG51bWJlcj0iNDE0MSIvPgorICA8c3lzY2FsbCBuYW1lPSJfbmV3c2VsZWN0IiBudW1iZXI9IjQxNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmxvY2siIG51bWJlcj0iNDE0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJtc3luYyIgbnVtYmVyPSI0MTQ0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWR2IiBudW1iZXI9IjQxNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0id3JpdGV2IiBudW1iZXI9IjQxNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2FjaGVmbHVzaCIgbnVtYmVyPSI0MTQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNhY2hlY3RsIiBudW1iZXI9IjQxNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3lzbWlwcyIgbnVtYmVyPSI0MTQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHNpZCIgbnVtYmVyPSI0MTUxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZkYXRhc3luYyIgbnVtYmVyPSI0MTUyIi8+CisgIDxzeXNjYWxsIG5hbWU9Il9zeXNjdGwiIG51bWJlcj0iNDE1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJtbG9jayIgbnVtYmVyPSI0MTU0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2siIG51bWJlcj0iNDE1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJtbG9ja2FsbCIgbnVtYmVyPSI0MTU2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2thbGwiIG51bWJlcj0iNDE1NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRwYXJhbSIgbnVtYmVyPSI0MTU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldHBhcmFtIiBudW1iZXI9IjQxNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfc2V0c2NoZWR1bGVyIiBudW1iZXI9IjQxNjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0c2NoZWR1bGVyIiBudW1iZXI9IjQxNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfeWllbGQiIG51bWJlcj0iNDE2MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IiBudW1iZXI9IjQxNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21pbiIgbnVtYmVyPSI0MTY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3JyX2dldF9pbnRlcnZhbCIgbnVtYmVyPSI0MTY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im5hbm9zbGVlcCIgbnVtYmVyPSI0MTY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1yZW1hcCIgbnVtYmVyPSI0MTY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VwdCIgbnVtYmVyPSI0MTY4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImJpbmQiIG51bWJlcj0iNDE2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJjb25uZWN0IiBudW1iZXI9IjQxNzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGVlcm5hbWUiIG51bWJlcj0iNDE3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzb2NrbmFtZSIgbnVtYmVyPSI0MTcyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHNvY2tvcHQiIG51bWJlcj0iNDE3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJsaXN0ZW4iIG51bWJlcj0iNDE3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWN2IiBudW1iZXI9IjQxNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVjdmZyb20iIG51bWJlcj0iNDE3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWN2bXNnIiBudW1iZXI9IjQxNzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VuZCIgbnVtYmVyPSI0MTc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRtc2ciIG51bWJlcj0iNDE3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kdG8iIG51bWJlcj0iNDE4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRzb2Nrb3B0IiBudW1iZXI9IjQxODEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2h1dGRvd24iIG51bWJlcj0iNDE4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzb2NrZXQiIG51bWJlcj0iNDE4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJzb2NrZXRwYWlyIiBudW1iZXI9IjQxODQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzdWlkIiBudW1iZXI9IjQxODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cmVzdWlkIiBudW1iZXI9IjQxODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icXVlcnlfbW9kdWxlIiBudW1iZXI9IjQxODciLz4KKyAgPHN5c2NhbGwgbmFtZT0icG9sbCIgbnVtYmVyPSI0MTg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im5mc3NlcnZjdGwiIG51bWJlcj0iNDE4OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXNnaWQiIG51bWJlcj0iNDE5MCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXNnaWQiIG51bWJlcj0iNDE5MSIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmN0bCIgbnVtYmVyPSI0MTkyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3JldHVybiIgbnVtYmVyPSI0MTkzIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ2FjdGlvbiIgbnVtYmVyPSI0MTk0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3Byb2NtYXNrIiBudW1iZXI9IjQxOTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncGVuZGluZyIgbnVtYmVyPSI0MTk2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3RpbWVkd2FpdCIgbnVtYmVyPSI0MTk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3F1ZXVlaW5mbyIgbnVtYmVyPSI0MTk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3N1c3BlbmQiIG51bWJlcj0iNDE5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmVhZDY0IiBudW1iZXI9IjQyMDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHdyaXRlNjQiIG51bWJlcj0iNDIwMSIvPgorICA8c3lzY2FsbCBuYW1lPSJjaG93biIgbnVtYmVyPSI0MjAyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGN3ZCIgbnVtYmVyPSI0MjAzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNhcGdldCIgbnVtYmVyPSI0MjA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNhcHNldCIgbnVtYmVyPSI0MjA1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ2FsdHN0YWNrIiBudW1iZXI9IjQyMDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VuZGZpbGUiIG51bWJlcj0iNDIwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwbXNnIiBudW1iZXI9IjQyMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHV0cG1zZyIgbnVtYmVyPSI0MjA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1tYXAyIiBudW1iZXI9IjQyMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idHJ1bmNhdGU2NCIgbnVtYmVyPSI0MjExIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0cnVuY2F0ZTY0IiBudW1iZXI9IjQyMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdDY0IiBudW1iZXI9IjQyMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHN0YXQ2NCIgbnVtYmVyPSI0MjE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0NjQiIG51bWJlcj0iNDIxNSIvPgorICA8c3lzY2FsbCBuYW1lPSJwaXZvdF9yb290IiBudW1iZXI9IjQyMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWluY29yZSIgbnVtYmVyPSI0MjE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1hZHZpc2UiIG51bWJlcj0iNDIxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50czY0IiBudW1iZXI9IjQyMTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNudGw2NCIgbnVtYmVyPSI0MjIwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHRpZCIgbnVtYmVyPSI0MjIyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRhaGVhZCIgbnVtYmVyPSI0MjIzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHhhdHRyIiBudW1iZXI9IjQyMjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHNldHhhdHRyIiBudW1iZXI9IjQyMjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnNldHhhdHRyIiBudW1iZXI9IjQyMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0eGF0dHIiIG51bWJlcj0iNDIyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJsZ2V0eGF0dHIiIG51bWJlcj0iNDIyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJmZ2V0eGF0dHIiIG51bWJlcj0iNDIyOSIvPgorICA8c3lzY2FsbCBuYW1lPSJsaXN0eGF0dHIiIG51bWJlcj0iNDIzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJsbGlzdHhhdHRyIiBudW1iZXI9IjQyMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmxpc3R4YXR0ciIgbnVtYmVyPSI0MjMyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlbW92ZXhhdHRyIiBudW1iZXI9IjQyMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHJlbW92ZXhhdHRyIiBudW1iZXI9IjQyMzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnJlbW92ZXhhdHRyIiBudW1iZXI9IjQyMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGtpbGwiIG51bWJlcj0iNDIzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kZmlsZTY0IiBudW1iZXI9IjQyMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnV0ZXgiIG51bWJlcj0iNDIzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRhZmZpbml0eSIgbnVtYmVyPSI0MjM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldGFmZmluaXR5IiBudW1iZXI9IjQyNDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fc2V0dXAiIG51bWJlcj0iNDI0MSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19kZXN0cm95IiBudW1iZXI9IjQyNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fZ2V0ZXZlbnRzIiBudW1iZXI9IjQyNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fc3VibWl0IiBudW1iZXI9IjQyNDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fY2FuY2VsIiBudW1iZXI9IjQyNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhpdF9ncm91cCIgbnVtYmVyPSI0MjQ2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imxvb2t1cF9kY29va2llIiBudW1iZXI9IjQyNDciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3JlYXRlIiBudW1iZXI9IjQyNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3RsIiBudW1iZXI9IjQyNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfd2FpdCIgbnVtYmVyPSI0MjUwIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlbWFwX2ZpbGVfcGFnZXMiIG51bWJlcj0iNDI1MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRfdGlkX2FkZHJlc3MiIG51bWJlcj0iNDI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJyZXN0YXJ0X3N5c2NhbGwiIG51bWJlcj0iNDI1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWR2aXNlNjQiIG51bWJlcj0iNDI1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0ZnM2NCIgbnVtYmVyPSI0MjU1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0ZnM2NCIgbnVtYmVyPSI0MjU2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2NyZWF0ZSIgbnVtYmVyPSI0MjU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX3NldHRpbWUiIG51bWJlcj0iNDI1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9nZXR0aW1lIiBudW1iZXI9IjQyNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0b3ZlcnJ1biIgbnVtYmVyPSI0MjYwIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2RlbGV0ZSIgbnVtYmVyPSI0MjYxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb2NrX3NldHRpbWUiIG51bWJlcj0iNDI2MiIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19nZXR0aW1lIiBudW1iZXI9IjQyNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0cmVzIiBudW1iZXI9IjQyNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfbmFub3NsZWVwIiBudW1iZXI9IjQyNjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGdraWxsIiBudW1iZXI9IjQyNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVzIiBudW1iZXI9IjQyNjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWJpbmQiIG51bWJlcj0iNDI2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRfbWVtcG9saWN5IiBudW1iZXI9IjQyNjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0X21lbXBvbGljeSIgbnVtYmVyPSI0MjcwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX29wZW4iIG51bWJlcj0iNDI3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV91bmxpbmsiIG51bWJlcj0iNDI3MiIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHNlbmQiIG51bWJlcj0iNDI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHJlY2VpdmUiIG51bWJlcj0iNDI3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9ub3RpZnkiIG51bWJlcj0iNDI3NSIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9nZXRzZXRhdHRyIiBudW1iZXI9IjQyNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0idnNlcnZlciIgbnVtYmVyPSI0Mjc3Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXRpZCIgbnVtYmVyPSI0Mjc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFkZF9rZXkiIG51bWJlcj0iNDI4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZXF1ZXN0X2tleSIgbnVtYmVyPSI0MjgxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImtleWN0bCIgbnVtYmVyPSI0MjgyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldF90aHJlYWRfYXJlYSIgbnVtYmVyPSI0MjgzIi8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfaW5pdCIgbnVtYmVyPSI0Mjg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfYWRkX3dhdGNoIiBudW1iZXI9IjQyODUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5vdGlmeV9ybV93YXRjaCIgbnVtYmVyPSI0Mjg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1pZ3JhdGVfcGFnZXMiIG51bWJlcj0iNDI4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuYXQiIG51bWJlcj0iNDI4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJta2RpcmF0IiBudW1iZXI9IjQyODkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtub2RhdCIgbnVtYmVyPSI0MjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93bmF0IiBudW1iZXI9IjQyOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnV0aW1lc2F0IiBudW1iZXI9IjQyOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXRhdDY0IiBudW1iZXI9IjQyOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5saW5rYXQiIG51bWJlcj0iNDI5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW5hbWVhdCIgbnVtYmVyPSI0Mjk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxpbmthdCIgbnVtYmVyPSI0Mjk2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5bWxpbmthdCIgbnVtYmVyPSI0Mjk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRsaW5rYXQiIG51bWJlcj0iNDI5OCIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2htb2RhdCIgbnVtYmVyPSI0Mjk5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhY2Nlc3NhdCIgbnVtYmVyPSI0MzAwIi8+CisgIDxzeXNjYWxsIG5hbWU9InBzZWxlY3Q2IiBudW1iZXI9IjQzMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHBvbGwiIG51bWJlcj0iNDMwMiIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bnNoYXJlIiBudW1iZXI9IjQzMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3BsaWNlIiBudW1iZXI9IjQzMDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3luY19maWxlX3JhbmdlIiBudW1iZXI9IjQzMDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGVlIiBudW1iZXI9IjQzMDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0idm1zcGxpY2UiIG51bWJlcj0iNDMwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJtb3ZlX3BhZ2VzIiBudW1iZXI9IjQzMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0X3JvYnVzdF9saXN0IiBudW1iZXI9IjQzMDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0X3JvYnVzdF9saXN0IiBudW1iZXI9IjQzMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2V4ZWNfbG9hZCIgbnVtYmVyPSI0MzExIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGNwdSIgbnVtYmVyPSI0MzEyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX3B3YWl0IiBudW1iZXI9IjQzMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9wcmlvX3NldCIgbnVtYmVyPSI0MzE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcHJpb19nZXQiIG51bWJlcj0iNDMxNSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1dGltZW5zYXQiIG51bWJlcj0iNDMxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWxmZCIgbnVtYmVyPSI0MzE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyZmQiIG51bWJlcj0iNDMxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJldmVudGZkIiBudW1iZXI9IjQzMTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFsbG9jYXRlIiBudW1iZXI9IjQzMjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9jcmVhdGUiIG51bWJlcj0iNDMyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcmZkX2dldHRpbWUiIG51bWJlcj0iNDMyMiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcmZkX3NldHRpbWUiIG51bWJlcj0iNDMyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWxmZDQiIG51bWJlcj0iNDMyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJldmVudGZkMiIgbnVtYmVyPSI0MzI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX2NyZWF0ZTEiIG51bWJlcj0iNDMyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAzIiBudW1iZXI9IjQzMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0icGlwZTIiIG51bWJlcj0iNDMyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X2luaXQxIiBudW1iZXI9IjQzMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJlYWR2IiBudW1iZXI9IjQzMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHdyaXRldiIgbnVtYmVyPSI0MzMxIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3Rnc2lncXVldWVpbmZvIiBudW1iZXI9IjQzMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyZl9ldmVudF9vcGVuIiBudW1iZXI9IjQzMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjZXB0NCIgbnVtYmVyPSI0MzM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlY3ZtbXNnIiBudW1iZXI9IjQzMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFub3RpZnlfaW5pdCIgbnVtYmVyPSI0MzM2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhbm90aWZ5X21hcmsiIG51bWJlcj0iNDMzNyIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmxpbWl0NjQiIG51bWJlcj0iNDMzOCIvPgorPC9zeXNjYWxsc19pbmZvPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3N5c2NhbGxzL3BwYy1saW51eC54bWwgYi9zaGFyZS9nZGIvc3lzY2FsbHMvcHBjLWxpbnV4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDRlYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL3BwYy1saW51eC54bWwKQEAgLTAsMCArMSwzMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSBmZWF0dXJlIFNZU1RFTSAiZ2RiLXN5c2NhbGxzLmR0ZCI+CisKKzwhLS0gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBmaWxlOgorICAgICAKKyAgICAgL3Vzci9zcmMvbGludXgvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisKKyAgICAgVGhlIGZpbGUgbWVudGlvbmVkIGFib3ZlIGJlbG9uZ3MgdG8gdGhlIExpbnV4IEtlcm5lbC4gIC0tPgorCis8c3lzY2FsbHNfaW5mbz4KKyAgPHN5c2NhbGwgbmFtZT0icmVzdGFydF9zeXNjYWxsIiBudW1iZXI9IjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhpdCIgbnVtYmVyPSIxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZvcmsiIG51bWJlcj0iMiIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkIiBudW1iZXI9IjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0id3JpdGUiIG51bWJlcj0iNCIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuIiBudW1iZXI9IjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvc2UiIG51bWJlcj0iNiIvPgorICA8c3lzY2FsbCBuYW1lPSJ3YWl0cGlkIiBudW1iZXI9IjciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXQiIG51bWJlcj0iOCIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rIiBudW1iZXI9IjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5saW5rIiBudW1iZXI9IjEwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImV4ZWN2ZSIgbnVtYmVyPSIxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJjaGRpciIgbnVtYmVyPSIxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lIiBudW1iZXI9IjEzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1rbm9kIiBudW1iZXI9IjE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNobW9kIiBudW1iZXI9IjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxjaG93biIgbnVtYmVyPSIxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJicmVhayIgbnVtYmVyPSIxNyIvPgorICA8c3lzY2FsbCBuYW1lPSJvbGRzdGF0IiBudW1iZXI9IjE4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzZWVrIiBudW1iZXI9IjE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBpZCIgbnVtYmVyPSIyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJtb3VudCIgbnVtYmVyPSIyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bW91bnQiIG51bWJlcj0iMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dWlkIiBudW1iZXI9IjIzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHVpZCIgbnVtYmVyPSIyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGltZSIgbnVtYmVyPSIyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJwdHJhY2UiIG51bWJlcj0iMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWxhcm0iIG51bWJlcj0iMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ib2xkZnN0YXQiIG51bWJlcj0iMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGF1c2UiIG51bWJlcj0iMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWUiIG51bWJlcj0iMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3R0eSIgbnVtYmVyPSIzMSIvPgorICA8c3lzY2FsbCBuYW1lPSJndHR5IiBudW1iZXI9IjMyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VzcyIgbnVtYmVyPSIzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJuaWNlIiBudW1iZXI9IjM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0aW1lIiBudW1iZXI9IjM1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmMiIG51bWJlcj0iMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2lsbCIgbnVtYmVyPSIzNyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW5hbWUiIG51bWJlcj0iMzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtkaXIiIG51bWJlcj0iMzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0icm1kaXIiIG51bWJlcj0iNDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwIiBudW1iZXI9IjQxIi8+CisgIDxzeXNjYWxsIG5hbWU9InBpcGUiIG51bWJlcj0iNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXMiIG51bWJlcj0iNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJvZiIgbnVtYmVyPSI0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJicmsiIG51bWJlcj0iNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0Z2lkIiBudW1iZXI9IjQ2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGdpZCIgbnVtYmVyPSI0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWwiIG51bWJlcj0iNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZXVpZCIgbnVtYmVyPSI0OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRlZ2lkIiBudW1iZXI9IjUwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY3QiIG51bWJlcj0iNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW1vdW50MiIgbnVtYmVyPSI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJsb2NrIiBudW1iZXI9IjUzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvY3RsIiBudW1iZXI9IjU0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjbnRsIiBudW1iZXI9IjU1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1weCIgbnVtYmVyPSI1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRwZ2lkIiBudW1iZXI9IjU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVsaW1pdCIgbnVtYmVyPSI1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJvbGRvbGR1bmFtZSIgbnVtYmVyPSI1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bWFzayIgbnVtYmVyPSI2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJjaHJvb3QiIG51bWJlcj0iNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXN0YXQiIG51bWJlcj0iNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwMiIgbnVtYmVyPSI2MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcGlkIiBudW1iZXI9IjY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBncnAiIG51bWJlcj0iNjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0c2lkIiBudW1iZXI9IjY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ2FjdGlvbiIgbnVtYmVyPSI2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZ2V0bWFzayIgbnVtYmVyPSI2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzc2V0bWFzayIgbnVtYmVyPSI2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXVpZCIgbnVtYmVyPSI3MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZWdpZCIgbnVtYmVyPSI3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdzdXNwZW5kIiBudW1iZXI9IjcyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ3BlbmRpbmciIG51bWJlcj0iNzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aG9zdG5hbWUiIG51bWJlcj0iNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmxpbWl0IiBudW1iZXI9Ijc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHJsaW1pdCIgbnVtYmVyPSI3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRydXNhZ2UiIG51bWJlcj0iNzciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dGltZW9mZGF5IiBudW1iZXI9Ijc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHRpbWVvZmRheSIgbnVtYmVyPSI3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRncm91cHMiIG51bWJlcj0iODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0Z3JvdXBzIiBudW1iZXI9IjgxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNlbGVjdCIgbnVtYmVyPSI4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rIiBudW1iZXI9IjgzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im9sZGxzdGF0IiBudW1iZXI9Ijg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRsaW5rIiBudW1iZXI9Ijg1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVzZWxpYiIgbnVtYmVyPSI4NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb24iIG51bWJlcj0iODciLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVib290IiBudW1iZXI9Ijg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRkaXIiIG51bWJlcj0iODkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW1hcCIgbnVtYmVyPSI5MCIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5tYXAiIG51bWJlcj0iOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idHJ1bmNhdGUiIG51bWJlcj0iOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnRydW5jYXRlIiBudW1iZXI9IjkzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG1vZCIgbnVtYmVyPSI5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2hvd24iIG51bWJlcj0iOTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cHJpb3JpdHkiIG51bWJlcj0iOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cHJpb3JpdHkiIG51bWJlcj0iOTciLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJvZmlsIiBudW1iZXI9Ijk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN0YXRmcyIgbnVtYmVyPSI5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3RhdGZzIiBudW1iZXI9IjEwMCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3Blcm0iIG51bWJlcj0iMTAxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNvY2tldGNhbGwiIG51bWJlcj0iMTAyIi8+CisgIDxzeXNjYWxsIG5hbWU9InN5c2xvZyIgbnVtYmVyPSIxMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aXRpbWVyIiBudW1iZXI9IjEwNCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRpdGltZXIiIG51bWJlcj0iMTA1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN0YXQiIG51bWJlcj0iMTA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzdGF0IiBudW1iZXI9IjEwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3RhdCIgbnVtYmVyPSIxMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ib2xkdW5hbWUiIG51bWJlcj0iMTA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcGwiIG51bWJlcj0iMTEwIi8+CisgIDxzeXNjYWxsIG5hbWU9InZoYW5ndXAiIG51bWJlcj0iMTExIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlkbGUiIG51bWJlcj0iMTEyIi8+CisgIDxzeXNjYWxsIG5hbWU9InZtODYiIG51bWJlcj0iMTEzIi8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXQ0IiBudW1iZXI9IjExNCIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb2ZmIiBudW1iZXI9IjExNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNpbmZvIiBudW1iZXI9IjExNiIvPgorICA8c3lzY2FsbCBuYW1lPSJpcGMiIG51bWJlcj0iMTE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzeW5jIiBudW1iZXI9IjExOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdyZXR1cm4iIG51bWJlcj0iMTE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb25lIiBudW1iZXI9IjEyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRkb21haW5uYW1lIiBudW1iZXI9IjEyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmFtZSIgbnVtYmVyPSIxMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW9kaWZ5X2xkdCIgbnVtYmVyPSIxMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWRqdGltZXgiIG51bWJlcj0iMTI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1wcm90ZWN0IiBudW1iZXI9IjEyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdwcm9jbWFzayIgbnVtYmVyPSIxMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXRlX21vZHVsZSIgbnVtYmVyPSIxMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5pdF9tb2R1bGUiIG51bWJlcj0iMTI4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImRlbGV0ZV9tb2R1bGUiIG51bWJlcj0iMTI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9rZXJuZWxfc3ltcyIgbnVtYmVyPSIxMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icXVvdGFjdGwiIG51bWJlcj0iMTMxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBnaWQiIG51bWJlcj0iMTMyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaGRpciIgbnVtYmVyPSIxMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYmRmbHVzaCIgbnVtYmVyPSIxMzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3lzZnMiIG51bWJlcj0iMTM1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBlcnNvbmFsaXR5IiBudW1iZXI9IjEzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJhZnNfc3lzY2FsbCIgbnVtYmVyPSIxMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0ZnN1aWQiIG51bWJlcj0iMTM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGZzZ2lkIiBudW1iZXI9IjEzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJfbGxzZWVrIiBudW1iZXI9IjE0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50cyIgbnVtYmVyPSIxNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX25ld3NlbGVjdCIgbnVtYmVyPSIxNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmxvY2siIG51bWJlcj0iMTQzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1zeW5jIiBudW1iZXI9IjE0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkdiIgbnVtYmVyPSIxNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0id3JpdGV2IiBudW1iZXI9IjE0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzaWQiIG51bWJlcj0iMTQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZkYXRhc3luYyIgbnVtYmVyPSIxNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX3N5c2N0bCIgbnVtYmVyPSIxNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWxvY2siIG51bWJlcj0iMTUwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2siIG51bWJlcj0iMTUxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1sb2NrYWxsIiBudW1iZXI9IjE1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5sb2NrYWxsIiBudW1iZXI9IjE1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRwYXJhbSIgbnVtYmVyPSIxNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0cGFyYW0iIG51bWJlcj0iMTU1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldHNjaGVkdWxlciIgbnVtYmVyPSIxNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0c2NoZWR1bGVyIiBudW1iZXI9IjE1NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF95aWVsZCIgbnVtYmVyPSIxNTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21heCIgbnVtYmVyPSIxNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21pbiIgbnVtYmVyPSIxNjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfcnJfZ2V0X2ludGVydmFsIiBudW1iZXI9IjE2MSIvPgorICA8c3lzY2FsbCBuYW1lPSJuYW5vc2xlZXAiIG51bWJlcj0iMTYyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1yZW1hcCIgbnVtYmVyPSIxNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzdWlkIiBudW1iZXI9IjE2NCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXN1aWQiIG51bWJlcj0iMTY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InF1ZXJ5X21vZHVsZSIgbnVtYmVyPSIxNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icG9sbCIgbnVtYmVyPSIxNjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibmZzc2VydmN0bCIgbnVtYmVyPSIxNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzZ2lkIiBudW1iZXI9IjE2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXNnaWQiIG51bWJlcj0iMTcwIi8+CisgIDxzeXNjYWxsIG5hbWU9InByY3RsIiBudW1iZXI9IjE3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdyZXR1cm4iIG51bWJlcj0iMTcyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ2FjdGlvbiIgbnVtYmVyPSIxNzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncHJvY21hc2siIG51bWJlcj0iMTc0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3BlbmRpbmciIG51bWJlcj0iMTc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3RpbWVkd2FpdCIgbnVtYmVyPSIxNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncXVldWVpbmZvIiBudW1iZXI9IjE3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdzdXNwZW5kIiBudW1iZXI9IjE3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmVhZDY0IiBudW1iZXI9IjE3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJwd3JpdGU2NCIgbnVtYmVyPSIxODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2hvd24iIG51bWJlcj0iMTgxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGN3ZCIgbnVtYmVyPSIxODIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2FwZ2V0IiBudW1iZXI9IjE4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJjYXBzZXQiIG51bWJlcj0iMTg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ2FsdHN0YWNrIiBudW1iZXI9IjE4NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kZmlsZSIgbnVtYmVyPSIxODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cG1zZyIgbnVtYmVyPSIxODciLz4KKyAgPHN5c2NhbGwgbmFtZT0icHV0cG1zZyIgbnVtYmVyPSIxODgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idmZvcmsiIG51bWJlcj0iMTg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVnZXRybGltaXQiIG51bWJlcj0iMTkwIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRhaGVhZCIgbnVtYmVyPSIxOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW1hcDIiIG51bWJlcj0iMTkyIi8+CisgIDxzeXNjYWxsIG5hbWU9InRydW5jYXRlNjQiIG51bWJlcj0iMTkzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0cnVuY2F0ZTY0IiBudW1iZXI9IjE5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0NjQiIG51bWJlcj0iMTk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzdGF0NjQiIG51bWJlcj0iMTk2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0NjQiIG51bWJlcj0iMTk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBjaWNvbmZpZ19yZWFkIiBudW1iZXI9IjE5OCIvPgorICA8c3lzY2FsbCBuYW1lPSJwY2ljb25maWdfd3JpdGUiIG51bWJlcj0iMTk5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBjaWNvbmZpZ19pb2Jhc2UiIG51bWJlcj0iMjAwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bHRpcGxleGVyIiBudW1iZXI9IjIwMSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50czY0IiBudW1iZXI9IjIwMiIvPgorICA8c3lzY2FsbCBuYW1lPSJwaXZvdF9yb290IiBudW1iZXI9IjIwMyIvPgorICA8c3lzY2FsbCBuYW1lPSJmY250bDY0IiBudW1iZXI9IjIwNCIvPgorICA8c3lzY2FsbCBuYW1lPSJtYWR2aXNlIiBudW1iZXI9IjIwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJtaW5jb3JlIiBudW1iZXI9IjIwNiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR0aWQiIG51bWJlcj0iMjA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRraWxsIiBudW1iZXI9IjIwOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXR4YXR0ciIgbnVtYmVyPSIyMDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHNldHhhdHRyIiBudW1iZXI9IjIxMCIvPgorICA8c3lzY2FsbCBuYW1lPSJmc2V0eGF0dHIiIG51bWJlcj0iMjExIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHhhdHRyIiBudW1iZXI9IjIxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJsZ2V0eGF0dHIiIG51bWJlcj0iMjEzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZnZXR4YXR0ciIgbnVtYmVyPSIyMTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGlzdHhhdHRyIiBudW1iZXI9IjIxNSIvPgorICA8c3lzY2FsbCBuYW1lPSJsbGlzdHhhdHRyIiBudW1iZXI9IjIxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJmbGlzdHhhdHRyIiBudW1iZXI9IjIxNyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW1vdmV4YXR0ciIgbnVtYmVyPSIyMTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHJlbW92ZXhhdHRyIiBudW1iZXI9IjIxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJmcmVtb3ZleGF0dHIiIG51bWJlcj0iMjIwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZ1dGV4IiBudW1iZXI9IjIyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRhZmZpbml0eSIgbnVtYmVyPSIyMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0YWZmaW5pdHkiIG51bWJlcj0iMjIzIi8+CisgIDxzeXNjYWxsIG5hbWU9InR1eGNhbGwiIG51bWJlcj0iMjI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRmaWxlNjQiIG51bWJlcj0iMjI2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX3NldHVwIiBudW1iZXI9IjIyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19kZXN0cm95IiBudW1iZXI9IjIyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19nZXRldmVudHMiIG51bWJlcj0iMjI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX3N1Ym1pdCIgbnVtYmVyPSIyMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fY2FuY2VsIiBudW1iZXI9IjIzMSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRfdGlkX2FkZHJlc3MiIG51bWJlcj0iMjMyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZhZHZpc2U2NCIgbnVtYmVyPSIyMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhpdF9ncm91cCIgbnVtYmVyPSIyMzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibG9va3VwX2Rjb29raWUiIG51bWJlcj0iMjM1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX2NyZWF0ZSIgbnVtYmVyPSIyMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3RsIiBudW1iZXI9IjIzNyIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF93YWl0IiBudW1iZXI9IjIzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW1hcF9maWxlX3BhZ2VzIiBudW1iZXI9IjIzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9jcmVhdGUiIG51bWJlcj0iMjQwIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX3NldHRpbWUiIG51bWJlcj0iMjQxIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2dldHRpbWUiIG51bWJlcj0iMjQyIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2dldG92ZXJydW4iIG51bWJlcj0iMjQzIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2RlbGV0ZSIgbnVtYmVyPSIyNDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfc2V0dGltZSIgbnVtYmVyPSIyNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0dGltZSIgbnVtYmVyPSIyNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0cmVzIiBudW1iZXI9IjI0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19uYW5vc2xlZXAiIG51bWJlcj0iMjQ4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN3YXBjb250ZXh0IiBudW1iZXI9IjI0OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0Z2tpbGwiIG51bWJlcj0iMjUwIi8+CisgIDxzeXNjYWxsIG5hbWU9InV0aW1lcyIgbnVtYmVyPSIyNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdGZzNjQiIG51bWJlcj0iMjUyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0ZnM2NCIgbnVtYmVyPSIyNTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFkdmlzZTY0XzY0IiBudW1iZXI9IjI1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJydGFzIiBudW1iZXI9IjI1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNfZGVidWdfc2V0Y29udGV4dCIgbnVtYmVyPSIyNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWJpbmQiIG51bWJlcj0iMjU5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9tZW1wb2xpY3kiIG51bWJlcj0iMjYwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldF9tZW1wb2xpY3kiIG51bWJlcj0iMjYxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX29wZW4iIG51bWJlcj0iMjYyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX3VubGluayIgbnVtYmVyPSIyNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfdGltZWRzZW5kIiBudW1iZXI9IjI2NCIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHJlY2VpdmUiIG51bWJlcj0iMjY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX25vdGlmeSIgbnVtYmVyPSIyNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfZ2V0c2V0YXR0ciIgbnVtYmVyPSIyNjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2V4ZWNfbG9hZCIgbnVtYmVyPSIyNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWRkX2tleSIgbnVtYmVyPSIyNjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVxdWVzdF9rZXkiIG51bWJlcj0iMjcwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImtleWN0bCIgbnVtYmVyPSIyNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0id2FpdGlkIiBudW1iZXI9IjI3MiIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fc2V0IiBudW1iZXI9IjI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fZ2V0IiBudW1iZXI9IjI3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X2luaXQiIG51bWJlcj0iMjc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfYWRkX3dhdGNoIiBudW1iZXI9IjI3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X3JtX3dhdGNoIiBudW1iZXI9IjI3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzcHVfcnVuIiBudW1iZXI9IjI3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzcHVfY3JlYXRlIiBudW1iZXI9IjI3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJwc2VsZWN0NiIgbnVtYmVyPSIyODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHBvbGwiIG51bWJlcj0iMjgxIi8+CisgIDxzeXNjYWxsIG5hbWU9InVuc2hhcmUiIG51bWJlcj0iMjgyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im9wZW5hdCIgbnVtYmVyPSIyODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtkaXJhdCIgbnVtYmVyPSIyODciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtub2RhdCIgbnVtYmVyPSIyODgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNob3duYXQiIG51bWJlcj0iMjg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ1dGltZXNhdCIgbnVtYmVyPSIyOTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXRhdDY0IiBudW1iZXI9IjI5MSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmxpbmthdCIgbnVtYmVyPSIyOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVuYW1lYXQiIG51bWJlcj0iMjkzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxpbmthdCIgbnVtYmVyPSIyOTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3ltbGlua2F0IiBudW1iZXI9IjI5NSIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkbGlua2F0IiBudW1iZXI9IjI5NiIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2htb2RhdCIgbnVtYmVyPSIyOTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFjY2Vzc2F0IiBudW1iZXI9IjI5OCIvPgorPC9zeXNjYWxsc19pbmZvPgpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3N5c2NhbGxzL3BwYzY0LWxpbnV4LnhtbCBiL3NoYXJlL2dkYi9zeXNjYWxscy9wcGM2NC1saW51eC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1NmRiMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9wcGM2NC1saW51eC54bWwKQEAgLTAsMCArMSwyOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2VydmVkLiAgLS0+CisKKzwhRE9DVFlQRSBmZWF0dXJlIFNZU1RFTSAiZ2RiLXN5c2NhbGxzLmR0ZCI+CisKKzwhLS0gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBmaWxlOgorICAgICAKKyAgICAgL3Vzci9zcmMvbGludXgvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisKKyAgICAgVGhlIGZpbGUgbWVudGlvbmVkIGFib3ZlIGJlbG9uZ3MgdG8gdGhlIExpbnV4IEtlcm5lbC4gIC0tPgorCis8c3lzY2FsbHNfaW5mbz4KKyAgPHN5c2NhbGwgbmFtZT0icmVzdGFydF9zeXNjYWxsIiBudW1iZXI9IjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhpdCIgbnVtYmVyPSIxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZvcmsiIG51bWJlcj0iMiIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkIiBudW1iZXI9IjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0id3JpdGUiIG51bWJlcj0iNCIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuIiBudW1iZXI9IjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvc2UiIG51bWJlcj0iNiIvPgorICA8c3lzY2FsbCBuYW1lPSJ3YWl0cGlkIiBudW1iZXI9IjciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXQiIG51bWJlcj0iOCIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rIiBudW1iZXI9IjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5saW5rIiBudW1iZXI9IjEwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImV4ZWN2ZSIgbnVtYmVyPSIxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJjaGRpciIgbnVtYmVyPSIxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lIiBudW1iZXI9IjEzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1rbm9kIiBudW1iZXI9IjE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNobW9kIiBudW1iZXI9IjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxjaG93biIgbnVtYmVyPSIxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJicmVhayIgbnVtYmVyPSIxNyIvPgorICA8c3lzY2FsbCBuYW1lPSJvbGRzdGF0IiBudW1iZXI9IjE4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzZWVrIiBudW1iZXI9IjE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBpZCIgbnVtYmVyPSIyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJtb3VudCIgbnVtYmVyPSIyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bW91bnQiIG51bWJlcj0iMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dWlkIiBudW1iZXI9IjIzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHVpZCIgbnVtYmVyPSIyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGltZSIgbnVtYmVyPSIyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJwdHJhY2UiIG51bWJlcj0iMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWxhcm0iIG51bWJlcj0iMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ib2xkZnN0YXQiIG51bWJlcj0iMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGF1c2UiIG51bWJlcj0iMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWUiIG51bWJlcj0iMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3R0eSIgbnVtYmVyPSIzMSIvPgorICA8c3lzY2FsbCBuYW1lPSJndHR5IiBudW1iZXI9IjMyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY2VzcyIgbnVtYmVyPSIzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJuaWNlIiBudW1iZXI9IjM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0aW1lIiBudW1iZXI9IjM1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmMiIG51bWJlcj0iMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2lsbCIgbnVtYmVyPSIzNyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW5hbWUiIG51bWJlcj0iMzgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWtkaXIiIG51bWJlcj0iMzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0icm1kaXIiIG51bWJlcj0iNDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwIiBudW1iZXI9IjQxIi8+CisgIDxzeXNjYWxsIG5hbWU9InBpcGUiIG51bWJlcj0iNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXMiIG51bWJlcj0iNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJvZiIgbnVtYmVyPSI0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJicmsiIG51bWJlcj0iNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0Z2lkIiBudW1iZXI9IjQ2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGdpZCIgbnVtYmVyPSI0NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWwiIG51bWJlcj0iNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZXVpZCIgbnVtYmVyPSI0OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRlZ2lkIiBudW1iZXI9IjUwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImFjY3QiIG51bWJlcj0iNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW1vdW50MiIgbnVtYmVyPSI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJsb2NrIiBudW1iZXI9IjUzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvY3RsIiBudW1iZXI9IjU0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjbnRsIiBudW1iZXI9IjU1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1weCIgbnVtYmVyPSI1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRwZ2lkIiBudW1iZXI9IjU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVsaW1pdCIgbnVtYmVyPSI1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJvbGRvbGR1bmFtZSIgbnVtYmVyPSI1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bWFzayIgbnVtYmVyPSI2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJjaHJvb3QiIG51bWJlcj0iNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXN0YXQiIG51bWJlcj0iNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwMiIgbnVtYmVyPSI2MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcGlkIiBudW1iZXI9IjY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBncnAiIG51bWJlcj0iNjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0c2lkIiBudW1iZXI9IjY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ2FjdGlvbiIgbnVtYmVyPSI2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZ2V0bWFzayIgbnVtYmVyPSI2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzc2V0bWFzayIgbnVtYmVyPSI2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXVpZCIgbnVtYmVyPSI3MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZWdpZCIgbnVtYmVyPSI3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdzdXNwZW5kIiBudW1iZXI9IjcyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ3BlbmRpbmciIG51bWJlcj0iNzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aG9zdG5hbWUiIG51bWJlcj0iNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmxpbWl0IiBudW1iZXI9Ijc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHJsaW1pdCIgbnVtYmVyPSI3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRydXNhZ2UiIG51bWJlcj0iNzciLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dGltZW9mZGF5IiBudW1iZXI9Ijc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHRpbWVvZmRheSIgbnVtYmVyPSI3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRncm91cHMiIG51bWJlcj0iODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0Z3JvdXBzIiBudW1iZXI9IjgxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNlbGVjdCIgbnVtYmVyPSI4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rIiBudW1iZXI9IjgzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im9sZGxzdGF0IiBudW1iZXI9Ijg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRsaW5rIiBudW1iZXI9Ijg1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVzZWxpYiIgbnVtYmVyPSI4NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb24iIG51bWJlcj0iODciLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVib290IiBudW1iZXI9Ijg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRkaXIiIG51bWJlcj0iODkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW1hcCIgbnVtYmVyPSI5MCIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5tYXAiIG51bWJlcj0iOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idHJ1bmNhdGUiIG51bWJlcj0iOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnRydW5jYXRlIiBudW1iZXI9IjkzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG1vZCIgbnVtYmVyPSI5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2hvd24iIG51bWJlcj0iOTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cHJpb3JpdHkiIG51bWJlcj0iOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cHJpb3JpdHkiIG51bWJlcj0iOTciLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJvZmlsIiBudW1iZXI9Ijk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN0YXRmcyIgbnVtYmVyPSI5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3RhdGZzIiBudW1iZXI9IjEwMCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3Blcm0iIG51bWJlcj0iMTAxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNvY2tldGNhbGwiIG51bWJlcj0iMTAyIi8+CisgIDxzeXNjYWxsIG5hbWU9InN5c2xvZyIgbnVtYmVyPSIxMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aXRpbWVyIiBudW1iZXI9IjEwNCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRpdGltZXIiIG51bWJlcj0iMTA1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN0YXQiIG51bWJlcj0iMTA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzdGF0IiBudW1iZXI9IjEwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJmc3RhdCIgbnVtYmVyPSIxMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ib2xkdW5hbWUiIG51bWJlcj0iMTA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcGwiIG51bWJlcj0iMTEwIi8+CisgIDxzeXNjYWxsIG5hbWU9InZoYW5ndXAiIG51bWJlcj0iMTExIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlkbGUiIG51bWJlcj0iMTEyIi8+CisgIDxzeXNjYWxsIG5hbWU9InZtODYiIG51bWJlcj0iMTEzIi8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXQ0IiBudW1iZXI9IjExNCIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb2ZmIiBudW1iZXI9IjExNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNpbmZvIiBudW1iZXI9IjExNiIvPgorICA8c3lzY2FsbCBuYW1lPSJpcGMiIG51bWJlcj0iMTE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzeW5jIiBudW1iZXI9IjExOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdyZXR1cm4iIG51bWJlcj0iMTE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb25lIiBudW1iZXI9IjEyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRkb21haW5uYW1lIiBudW1iZXI9IjEyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bmFtZSIgbnVtYmVyPSIxMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW9kaWZ5X2xkdCIgbnVtYmVyPSIxMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWRqdGltZXgiIG51bWJlcj0iMTI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1wcm90ZWN0IiBudW1iZXI9IjEyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdwcm9jbWFzayIgbnVtYmVyPSIxMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXRlX21vZHVsZSIgbnVtYmVyPSIxMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5pdF9tb2R1bGUiIG51bWJlcj0iMTI4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImRlbGV0ZV9tb2R1bGUiIG51bWJlcj0iMTI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9rZXJuZWxfc3ltcyIgbnVtYmVyPSIxMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icXVvdGFjdGwiIG51bWJlcj0iMTMxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBnaWQiIG51bWJlcj0iMTMyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaGRpciIgbnVtYmVyPSIxMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYmRmbHVzaCIgbnVtYmVyPSIxMzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3lzZnMiIG51bWJlcj0iMTM1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBlcnNvbmFsaXR5IiBudW1iZXI9IjEzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJhZnNfc3lzY2FsbCIgbnVtYmVyPSIxMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0ZnN1aWQiIG51bWJlcj0iMTM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGZzZ2lkIiBudW1iZXI9IjEzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJfbGxzZWVrIiBudW1iZXI9IjE0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50cyIgbnVtYmVyPSIxNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX25ld3NlbGVjdCIgbnVtYmVyPSIxNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmxvY2siIG51bWJlcj0iMTQzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1zeW5jIiBudW1iZXI9IjE0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkdiIgbnVtYmVyPSIxNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0id3JpdGV2IiBudW1iZXI9IjE0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzaWQiIG51bWJlcj0iMTQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZkYXRhc3luYyIgbnVtYmVyPSIxNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX3N5c2N0bCIgbnVtYmVyPSIxNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWxvY2siIG51bWJlcj0iMTUwIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2siIG51bWJlcj0iMTUxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1sb2NrYWxsIiBudW1iZXI9IjE1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5sb2NrYWxsIiBudW1iZXI9IjE1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRwYXJhbSIgbnVtYmVyPSIxNTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0cGFyYW0iIG51bWJlcj0iMTU1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldHNjaGVkdWxlciIgbnVtYmVyPSIxNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0c2NoZWR1bGVyIiBudW1iZXI9IjE1NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF95aWVsZCIgbnVtYmVyPSIxNTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21heCIgbnVtYmVyPSIxNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21pbiIgbnVtYmVyPSIxNjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfcnJfZ2V0X2ludGVydmFsIiBudW1iZXI9IjE2MSIvPgorICA8c3lzY2FsbCBuYW1lPSJuYW5vc2xlZXAiIG51bWJlcj0iMTYyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1yZW1hcCIgbnVtYmVyPSIxNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzdWlkIiBudW1iZXI9IjE2NCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXN1aWQiIG51bWJlcj0iMTY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InF1ZXJ5X21vZHVsZSIgbnVtYmVyPSIxNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icG9sbCIgbnVtYmVyPSIxNjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibmZzc2VydmN0bCIgbnVtYmVyPSIxNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzZ2lkIiBudW1iZXI9IjE2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXNnaWQiIG51bWJlcj0iMTcwIi8+CisgIDxzeXNjYWxsIG5hbWU9InByY3RsIiBudW1iZXI9IjE3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdyZXR1cm4iIG51bWJlcj0iMTcyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ2FjdGlvbiIgbnVtYmVyPSIxNzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncHJvY21hc2siIG51bWJlcj0iMTc0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3BlbmRpbmciIG51bWJlcj0iMTc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3RpbWVkd2FpdCIgbnVtYmVyPSIxNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncXVldWVpbmZvIiBudW1iZXI9IjE3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdzdXNwZW5kIiBudW1iZXI9IjE3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmVhZDY0IiBudW1iZXI9IjE3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJwd3JpdGU2NCIgbnVtYmVyPSIxODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2hvd24iIG51bWJlcj0iMTgxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGN3ZCIgbnVtYmVyPSIxODIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2FwZ2V0IiBudW1iZXI9IjE4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJjYXBzZXQiIG51bWJlcj0iMTg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ2FsdHN0YWNrIiBudW1iZXI9IjE4NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kZmlsZSIgbnVtYmVyPSIxODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cG1zZyIgbnVtYmVyPSIxODciLz4KKyAgPHN5c2NhbGwgbmFtZT0icHV0cG1zZyIgbnVtYmVyPSIxODgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idmZvcmsiIG51bWJlcj0iMTg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVnZXRybGltaXQiIG51bWJlcj0iMTkwIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRhaGVhZCIgbnVtYmVyPSIxOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGNpY29uZmlnX3JlYWQiIG51bWJlcj0iMTk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBjaWNvbmZpZ193cml0ZSIgbnVtYmVyPSIxOTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGNpY29uZmlnX2lvYmFzZSIgbnVtYmVyPSIyMDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXVsdGlwbGV4ZXIiIG51bWJlcj0iMjAxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGRlbnRzNjQiIG51bWJlcj0iMjAyIi8+CisgIDxzeXNjYWxsIG5hbWU9InBpdm90X3Jvb3QiIG51bWJlcj0iMjAzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1hZHZpc2UiIG51bWJlcj0iMjA1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1pbmNvcmUiIG51bWJlcj0iMjA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHRpZCIgbnVtYmVyPSIyMDciLz4KKyAgPHN5c2NhbGwgbmFtZT0idGtpbGwiIG51bWJlcj0iMjA4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHhhdHRyIiBudW1iZXI9IjIwOSIvPgorICA8c3lzY2FsbCBuYW1lPSJsc2V0eGF0dHIiIG51bWJlcj0iMjEwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZzZXR4YXR0ciIgbnVtYmVyPSIyMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0eGF0dHIiIG51bWJlcj0iMjEyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxnZXR4YXR0ciIgbnVtYmVyPSIyMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmdldHhhdHRyIiBudW1iZXI9IjIxNCIvPgorICA8c3lzY2FsbCBuYW1lPSJsaXN0eGF0dHIiIG51bWJlcj0iMjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxsaXN0eGF0dHIiIG51bWJlcj0iMjE2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZsaXN0eGF0dHIiIG51bWJlcj0iMjE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbW92ZXhhdHRyIiBudW1iZXI9IjIxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJscmVtb3ZleGF0dHIiIG51bWJlcj0iMjE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZyZW1vdmV4YXR0ciIgbnVtYmVyPSIyMjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnV0ZXgiIG51bWJlcj0iMjIxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldGFmZmluaXR5IiBudW1iZXI9IjIyMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRhZmZpbml0eSIgbnVtYmVyPSIyMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0idHV4Y2FsbCIgbnVtYmVyPSIyMjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fc2V0dXAiIG51bWJlcj0iMjI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2Rlc3Ryb3kiIG51bWJlcj0iMjI4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2dldGV2ZW50cyIgbnVtYmVyPSIyMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fc3VibWl0IiBudW1iZXI9IjIzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19jYW5jZWwiIG51bWJlcj0iMjMxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldF90aWRfYWRkcmVzcyIgbnVtYmVyPSIyMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmFkdmlzZTY0IiBudW1iZXI9IjIzMyIvPgorICA8c3lzY2FsbCBuYW1lPSJleGl0X2dyb3VwIiBudW1iZXI9IjIzNCIvPgorICA8c3lzY2FsbCBuYW1lPSJsb29rdXBfZGNvb2tpZSIgbnVtYmVyPSIyMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3JlYXRlIiBudW1iZXI9IjIzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9jdGwiIG51bWJlcj0iMjM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX3dhaXQiIG51bWJlcj0iMjM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbWFwX2ZpbGVfcGFnZXMiIG51bWJlcj0iMjM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyX2NyZWF0ZSIgbnVtYmVyPSIyNDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfc2V0dGltZSIgbnVtYmVyPSIyNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0dGltZSIgbnVtYmVyPSIyNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0b3ZlcnJ1biIgbnVtYmVyPSIyNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZGVsZXRlIiBudW1iZXI9IjI0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19zZXR0aW1lIiBudW1iZXI9IjI0NSIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19nZXR0aW1lIiBudW1iZXI9IjI0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19nZXRyZXMiIG51bWJlcj0iMjQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNsb2NrX25hbm9zbGVlcCIgbnVtYmVyPSIyNDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3dhcGNvbnRleHQiIG51bWJlcj0iMjQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRna2lsbCIgbnVtYmVyPSIyNTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVzIiBudW1iZXI9IjI1MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0ZnM2NCIgbnVtYmVyPSIyNTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXRmczY0IiBudW1iZXI9IjI1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJydGFzIiBudW1iZXI9IjI1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNfZGVidWdfc2V0Y29udGV4dCIgbnVtYmVyPSIyNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWJpbmQiIG51bWJlcj0iMjU5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9tZW1wb2xpY3kiIG51bWJlcj0iMjYwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldF9tZW1wb2xpY3kiIG51bWJlcj0iMjYxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX29wZW4iIG51bWJlcj0iMjYyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX3VubGluayIgbnVtYmVyPSIyNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfdGltZWRzZW5kIiBudW1iZXI9IjI2NCIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV90aW1lZHJlY2VpdmUiIG51bWJlcj0iMjY1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX25vdGlmeSIgbnVtYmVyPSIyNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfZ2V0c2V0YXR0ciIgbnVtYmVyPSIyNjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2V4ZWNfbG9hZCIgbnVtYmVyPSIyNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWRkX2tleSIgbnVtYmVyPSIyNjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVxdWVzdF9rZXkiIG51bWJlcj0iMjcwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImtleWN0bCIgbnVtYmVyPSIyNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0id2FpdGlkIiBudW1iZXI9IjI3MiIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fc2V0IiBudW1iZXI9IjI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fZ2V0IiBudW1iZXI9IjI3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X2luaXQiIG51bWJlcj0iMjc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfYWRkX3dhdGNoIiBudW1iZXI9IjI3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X3JtX3dhdGNoIiBudW1iZXI9IjI3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzcHVfcnVuIiBudW1iZXI9IjI3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzcHVfY3JlYXRlIiBudW1iZXI9IjI3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJwc2VsZWN0NiIgbnVtYmVyPSIyODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHBvbGwiIG51bWJlcj0iMjgxIi8+CisgIDxzeXNjYWxsIG5hbWU9InVuc2hhcmUiIG51bWJlcj0iMjgyIi8+CisgIDxzeXNjYWxsIG5hbWU9InVubGlua2F0IiBudW1iZXI9IjI4NiIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW5hbWVhdCIgbnVtYmVyPSIyODciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGlua2F0IiBudW1iZXI9IjI4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rYXQiIG51bWJlcj0iMjg5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRsaW5rYXQiIG51bWJlcj0iMjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG1vZGF0IiBudW1iZXI9IjI5MSIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWNjZXNzYXQiIG51bWJlcj0iMjkyIi8+Cis8L3N5c2NhbGxzX2luZm8+CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvc3BhcmMtbGludXgueG1sIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL3NwYXJjLWxpbnV4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjczNjIxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL3NwYXJjLWxpbnV4LnhtbApAQCAtMCwwICsxLDM0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodAorICAgICBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBwcmVzZXJ2ZWQuICAtLT4KKworPCFET0NUWVBFIGZlYXR1cmUgU1lTVEVNICJnZGItc3lzY2FsbHMuZHRkIj4KKworPCEtLSBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nIGZpbGU6CisgICAgIAorICAgICAvdXNyL3NyYy9saW51eC9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisKKyAgICAgVGhlIGZpbGUgbWVudGlvbmVkIGFib3ZlIGJlbG9uZ3MgdG8gdGhlIExpbnV4IEtlcm5lbC4gIC0tPgorCis8c3lzY2FsbHNfaW5mbz4KKyAgPHN5c2NhbGwgbmFtZT0icmVzdGFydF9zeXNjYWxsIiBudW1iZXI9IjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXhpdCIgbnVtYmVyPSIxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZvcmsiIG51bWJlcj0iMiIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkIiBudW1iZXI9IjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0id3JpdGUiIG51bWJlcj0iNCIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuIiBudW1iZXI9IjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvc2UiIG51bWJlcj0iNiIvPgorICA8c3lzY2FsbCBuYW1lPSJ3YWl0NCIgbnVtYmVyPSI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNyZWF0IiBudW1iZXI9IjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGluayIgbnVtYmVyPSI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVubGluayIgbnVtYmVyPSIxMCIvPgorICA8c3lzY2FsbCBuYW1lPSJleGVjdiIgbnVtYmVyPSIxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJjaGRpciIgbnVtYmVyPSIxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJjaG93biIJbnVtYmVyPSIxMyIvPgorICA8c3lzY2FsbCBuYW1lPSJta25vZCIgbnVtYmVyPSIxNCIvPgorICA8c3lzY2FsbCBuYW1lPSJjaG1vZCIgbnVtYmVyPSIxNSIvPgorICA8c3lzY2FsbCBuYW1lPSJsY2hvd24iIG51bWJlcj0iMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYnJrIiBudW1iZXI9IjE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBlcmZjdHIiIG51bWJlcj0iMTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHNlZWsiIG51bWJlcj0iMTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGlkIiBudW1iZXI9IjIwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNhcGdldCIgbnVtYmVyPSIyMSIvPgorICA8c3lzY2FsbCBuYW1lPSJjYXBzZXQiIG51bWJlcj0iMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0dWlkIiBudW1iZXI9IjIzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHVpZCIgbnVtYmVyPSIyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJ2bXNwbGljZSIgbnVtYmVyPSIyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJwdHJhY2UiIG51bWJlcj0iMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWxhcm0iIG51bWJlcj0iMjciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnYWx0c3RhY2siIG51bWJlcj0iMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGF1c2UiIG51bWJlcj0iMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWUiIG51bWJlcj0iMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGNob3duMzIiIG51bWJlcj0iMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNob3duMzIiIG51bWJlcj0iMzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjZXNzIiBudW1iZXI9IjMzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im5pY2UiIG51bWJlcj0iMzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2hvd24zMiIgbnVtYmVyPSIzNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW5jIiBudW1iZXI9IjM2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImtpbGwiIG51bWJlcj0iMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdCIgbnVtYmVyPSIzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kZmlsZSIgbnVtYmVyPSIzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJsc3RhdCIgbnVtYmVyPSI0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAiIG51bWJlcj0iNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGlwZSIgbnVtYmVyPSI0MiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcyIgbnVtYmVyPSI0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR1aWQzMiIgbnVtYmVyPSI0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bW91bnQyIiBudW1iZXI9IjQ1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGdpZCIgbnVtYmVyPSI0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRnaWQiIG51bWJlcj0iNDciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnbmFsIiBudW1iZXI9IjQ4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGV1aWQiIG51bWJlcj0iNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZWdpZCIgbnVtYmVyPSI1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJhY2N0IiBudW1iZXI9IjUxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGdpZDMyIiBudW1iZXI9IjUzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvY3RsIiBudW1iZXI9IjU0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYm9vdCIgbnVtYmVyPSI1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJtbWFwMiIgbnVtYmVyPSI1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW1saW5rIiBudW1iZXI9IjU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWRsaW5rIiBudW1iZXI9IjU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV4ZWN2ZSIgbnVtYmVyPSI1OSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bWFzayIgbnVtYmVyPSI2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJjaHJvb3QiIG51bWJlcj0iNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXQiIG51bWJlcj0iNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN0YXQ2NCIgbnVtYmVyPSI2MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwYWdlc2l6ZSIgbnVtYmVyPSI2NCIvPgorICA8c3lzY2FsbCBuYW1lPSJtc3luYyIgbnVtYmVyPSI2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJ2Zm9yayIgbnVtYmVyPSI2NiIvPgorICA8c3lzY2FsbCBuYW1lPSJwcmVhZDY0IiBudW1iZXI9IjY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InB3cml0ZTY0IiBudW1iZXI9IjY4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGV1aWQzMiIgbnVtYmVyPSI2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRlZ2lkMzIiIG51bWJlcj0iNzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibW1hcCIgbnVtYmVyPSI3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXVpZDMyIiBudW1iZXI9IjcyIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bm1hcCIgbnVtYmVyPSI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJtcHJvdGVjdCIgbnVtYmVyPSI3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJtYWR2aXNlIiBudW1iZXI9Ijc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZoYW5ndXAiIG51bWJlcj0iNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0idHJ1bmNhdGU2NCIgbnVtYmVyPSI3NyIvPgorICA8c3lzY2FsbCBuYW1lPSJtaW5jb3JlIiBudW1iZXI9Ijc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGdyb3VwcyIgbnVtYmVyPSI3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRncm91cHMiIG51bWJlcj0iODAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGdycCIgbnVtYmVyPSI4MSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRncm91cHMzMiIgbnVtYmVyPSI4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRpdGltZXIiIG51bWJlcj0iODMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnRydW5jYXRlNjQiIG51bWJlcj0iODQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3dhcG9uIiBudW1iZXI9Ijg1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGl0aW1lciIgbnVtYmVyPSI4NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXR1aWQzMiIgbnVtYmVyPSI4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRob3N0bmFtZSIgbnVtYmVyPSI4OCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRnaWQzMiIgbnVtYmVyPSI4OSIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAyIiBudW1iZXI9IjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldGZzdWlkMzIiIG51bWJlcj0iOTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNudGwiIG51bWJlcj0iOTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VsZWN0IiBudW1iZXI9IjkzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldGZzZ2lkMzIiIG51bWJlcj0iOTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN5bmMiIG51bWJlcj0iOTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cHJpb3JpdHkiIG51bWJlcj0iOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic29ja2V0IiBudW1iZXI9Ijk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNvbm5lY3QiIG51bWJlcj0iOTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjZXB0IiBudW1iZXI9Ijk5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHByaW9yaXR5IiBudW1iZXI9IjEwMCIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdyZXR1cm4iIG51bWJlcj0iMTAxIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ2FjdGlvbiIgbnVtYmVyPSIxMDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncHJvY21hc2siIG51bWJlcj0iMTAzIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3BlbmRpbmciIG51bWJlcj0iMTA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3RpbWVkd2FpdCIgbnVtYmVyPSIxMDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncXVldWVpbmZvIiBudW1iZXI9IjEwNiIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdzdXNwZW5kIiBudW1iZXI9IjEwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXN1aWQzMiIgbnVtYmVyPSIxMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cmVzdWlkMzIiIG51bWJlcj0iMTA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJlc2dpZDMyIiBudW1iZXI9IjExMCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXNnaWQzMiIgbnVtYmVyPSIxMTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVnaWQzMiIgbnVtYmVyPSIxMTIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVjdm1zZyIgbnVtYmVyPSIxMTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2VuZG1zZyIgbnVtYmVyPSIxMTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0Z3JvdXBzMzIiIG51bWJlcj0iMTE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHRpbWVvZmRheSIgbnVtYmVyPSIxMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cnVzYWdlIiBudW1iZXI9IjExNyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzb2Nrb3B0IiBudW1iZXI9IjExOCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRjd2QiIG51bWJlcj0iMTE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWR2IiBudW1iZXI9IjEyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJ3cml0ZXYiIG51bWJlcj0iMTIxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHRpbWVvZmRheSIgbnVtYmVyPSIxMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNob3duIiBudW1iZXI9IjEyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2htb2QiIG51bWJlcj0iMTI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlY3Zmcm9tIiBudW1iZXI9IjEyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXVpZCIgbnVtYmVyPSIxMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVnaWQiIG51bWJlcj0iMTI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbmFtZSIgbnVtYmVyPSIxMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idHJ1bmNhdGUiIG51bWJlcj0iMTI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0cnVuY2F0ZSIgbnVtYmVyPSIxMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmxvY2siIG51bWJlcj0iMTMxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxzdGF0NjQiIG51bWJlcj0iMTMyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmR0byIgbnVtYmVyPSIxMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2h1dGRvd24iIG51bWJlcj0iMTM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNvY2tldHBhaXIiIG51bWJlcj0iMTM1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1rZGlyIiBudW1iZXI9IjEzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJybWRpciIgbnVtYmVyPSIxMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVzIiBudW1iZXI9IjEzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0NjQiIG51bWJlcj0iMTM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRmaWxlNjQiIG51bWJlcj0iMTQwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBlZXJuYW1lIiBudW1iZXI9IjE0MSIvPgorICA8c3lzY2FsbCBuYW1lPSJmdXRleCIgbnVtYmVyPSIxNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dGlkIiBudW1iZXI9IjE0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRybGltaXQiIG51bWJlcj0iMTQ0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJsaW1pdCIgbnVtYmVyPSIxNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGl2b3Rfcm9vdCIgbnVtYmVyPSIxNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJjdGwiIG51bWJlcj0iMTQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBjaWNvbmZpZ19yZWFkIiBudW1iZXI9IjE0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJwY2ljb25maWdfd3JpdGUiIG51bWJlcj0iMTQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHNvY2tuYW1lIiBudW1iZXI9IjE1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X2luaXQiIG51bWJlcj0iMTUxIi8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfYWRkX3dhdGNoIiBudW1iZXI9IjE1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJwb2xsIiBudW1iZXI9IjE1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50czY0IiBudW1iZXI9IjE1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJmY250bDY0IiBudW1iZXI9IjE1NSIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X3JtX3dhdGNoIiBudW1iZXI9IjE1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0ZnMiIG51bWJlcj0iMTU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0ZnMiIG51bWJlcj0iMTU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVtb3VudCIgbnVtYmVyPSIxNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfc2V0X2FmZmluaXR5IiBudW1iZXI9IjE2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRfYWZmaW5pdHkiIG51bWJlcj0iMTYxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGRvbWFpbm5hbWUiIG51bWJlcj0iMTYyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldGRvbWFpbm5hbWUiIG51bWJlcj0iMTYzIi8+CisgIDxzeXNjYWxsIG5hbWU9InF1b3RhY3RsIiBudW1iZXI9IjE2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRfdGlkX2FkZHJlc3MiIG51bWJlcj0iMTY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1vdW50IiBudW1iZXI9IjE2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJ1c3RhdCIgbnVtYmVyPSIxNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0eGF0dHIiIG51bWJlcj0iMTY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzZXR4YXR0ciIgbnVtYmVyPSIxNzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnNldHhhdHRyIiBudW1iZXI9IjE3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR4YXR0ciIgbnVtYmVyPSIxNzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGdldHhhdHRyIiBudW1iZXI9IjE3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50cyIgbnVtYmVyPSIxNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0c2lkIiBudW1iZXI9IjE3NSIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2hkaXIiIG51bWJlcj0iMTc2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZnZXR4YXR0ciIgbnVtYmVyPSIxNzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGlzdHhhdHRyIiBudW1iZXI9IjE3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJsbGlzdHhhdHRyIiBudW1iZXI9IjE3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJmbGlzdHhhdHRyIiBudW1iZXI9IjE4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW1vdmV4YXR0ciIgbnVtYmVyPSIxODEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHJlbW92ZXhhdHRyIiBudW1iZXI9IjE4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdwZW5kaW5nIiBudW1iZXI9IjE4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJxdWVyeV9tb2R1bGUiIG51bWJlcj0iMTg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHBnaWQiIG51bWJlcj0iMTg1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZyZW1vdmV4YXR0ciIgbnVtYmVyPSIxODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGtpbGwiIG51bWJlcj0iMTg3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV4aXRfZ3JvdXAiIG51bWJlcj0iMTg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVuYW1lIiBudW1iZXI9IjE4OSIvPgorICA8c3lzY2FsbCBuYW1lPSJpbml0X21vZHVsZSIgbnVtYmVyPSIxOTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyc29uYWxpdHkiIG51bWJlcj0iMTkxIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlbWFwX2ZpbGVfcGFnZXMiIG51bWJlcj0iMTkyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX2NyZWF0ZSIgbnVtYmVyPSIxOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3RsIiBudW1iZXI9IjE5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF93YWl0IiBudW1iZXI9IjE5NSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fc2V0IiBudW1iZXI9IjE5NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcGlkIiBudW1iZXI9IjE5NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdhY3Rpb24iIG51bWJlcj0iMTk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNnZXRtYXNrIiBudW1iZXI9IjE5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzc2V0bWFzayIgbnVtYmVyPSIyMDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnc3VzcGVuZCIgbnVtYmVyPSIyMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ib2xkbHN0YXQiIG51bWJlcj0iMjAyIi8+CisgIDxzeXNjYWxsIG5hbWU9InVzZWxpYiIgbnVtYmVyPSIyMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGRpciIgbnVtYmVyPSIyMDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGFoZWFkIiBudW1iZXI9IjIwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzb2NrZXRjYWxsIiBudW1iZXI9IjIwNiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNsb2ciIG51bWJlcj0iMjA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imxvb2t1cF9kY29va2llIiBudW1iZXI9IjIwOCIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWR2aXNlNjQiIG51bWJlcj0iMjA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhZHZpc2U2NF82NCIgbnVtYmVyPSIyMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGdraWxsIiBudW1iZXI9IjIxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ3YWl0cGlkIiBudW1iZXI9IjIxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb2ZmIiBudW1iZXI9IjIxMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNpbmZvIiBudW1iZXI9IjIxNCIvPgorICA8c3lzY2FsbCBuYW1lPSJpcGMiIG51bWJlcj0iMjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ3JldHVybiIgbnVtYmVyPSIyMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvbmUiIG51bWJlcj0iMjE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcHJpb19nZXQiIG51bWJlcj0iMjE4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFkanRpbWV4IiBudW1iZXI9IjIxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdwcm9jbWFzayIgbnVtYmVyPSIyMjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXRlX21vZHVsZSIgbnVtYmVyPSIyMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZGVsZXRlX21vZHVsZSIgbnVtYmVyPSIyMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0X2tlcm5lbF9zeW1zIiBudW1iZXI9IjIyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwZ2lkIiBudW1iZXI9IjIyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJiZGZsdXNoIiBudW1iZXI9IjIyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNmcyIgbnVtYmVyPSIyMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWZzX3N5c2NhbGwiIG51bWJlcj0iMjI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGZzdWlkIiBudW1iZXI9IjIyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRmc2dpZCIgbnVtYmVyPSIyMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX25ld3NlbGVjdCIgbnVtYmVyPSIyMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZSIgbnVtYmVyPSIyMzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3BsaWNlIiBudW1iZXI9IjIzMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGltZSIgbnVtYmVyPSIyMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdGZzNjQiIG51bWJlcj0iMjM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0ZnM2NCIgbnVtYmVyPSIyMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX2xsc2VlayIgbnVtYmVyPSIyMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWxvY2siIG51bWJlcj0iMjM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2siIG51bWJlcj0iMjM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1sb2NrYWxsIiBudW1iZXI9IjIzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5sb2NrYWxsIiBudW1iZXI9IjI0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRwYXJhbSIgbnVtYmVyPSIyNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0cGFyYW0iIG51bWJlcj0iMjQyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldHNjaGVkdWxlciIgbnVtYmVyPSIyNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0c2NoZWR1bGVyIiBudW1iZXI9IjI0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF95aWVsZCIgbnVtYmVyPSIyNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21heCIgbnVtYmVyPSIyNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21pbiIgbnVtYmVyPSIyNDciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfcnJfZ2V0X2ludGVydmFsIiBudW1iZXI9IjI0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJuYW5vc2xlZXAiIG51bWJlcj0iMjQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1yZW1hcCIgbnVtYmVyPSIyNTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX3N5c2N0bCIgbnVtYmVyPSIyNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0c2lkIiBudW1iZXI9IjI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJmZGF0YXN5bmMiIG51bWJlcj0iMjUzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im5mc3NlcnZjdGwiIG51bWJlcj0iMjU0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmNfZmlsZV9yYW5nZSIgbnVtYmVyPSIyNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfc2V0dGltZSIgbnVtYmVyPSIyNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0dGltZSIgbnVtYmVyPSIyNTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0cmVzIiBudW1iZXI9IjI1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19uYW5vc2xlZXAiIG51bWJlcj0iMjU5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldGFmZmluaXR5IiBudW1iZXI9IjI2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRhZmZpbml0eSIgbnVtYmVyPSIyNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfc2V0dGltZSIgbnVtYmVyPSIyNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0dGltZSIgbnVtYmVyPSIyNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0b3ZlcnJ1biIgbnVtYmVyPSIyNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZGVsZXRlIiBudW1iZXI9IjI2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9jcmVhdGUiIG51bWJlcj0iMjY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZzZXJ2ZXIiIG51bWJlcj0iMjY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX3NldHVwIiBudW1iZXI9IjI2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19kZXN0cm95IiBudW1iZXI9IjI2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19zdWJtaXQiIG51bWJlcj0iMjcwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2NhbmNlbCIgbnVtYmVyPSIyNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fZ2V0ZXZlbnRzIiBudW1iZXI9IjI3MiIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9vcGVuIiBudW1iZXI9IjI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV91bmxpbmsiIG51bWJlcj0iMjc0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX3RpbWVkc2VuZCIgbnVtYmVyPSIyNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfdGltZWRyZWNlaXZlIiBudW1iZXI9IjI3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9ub3RpZnkiIG51bWJlcj0iMjc3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX2dldHNldGF0dHIiIG51bWJlcj0iMjc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXRpZCIgbnVtYmVyPSIyNzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGVlIiBudW1iZXI9IjI4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJhZGRfa2V5IiBudW1iZXI9IjI4MSIvPgorICA8c3lzY2FsbCBuYW1lPSJyZXF1ZXN0X2tleSIgbnVtYmVyPSIyODIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2V5Y3RsIiBudW1iZXI9IjI4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuYXQiIG51bWJlcj0iMjg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1rZGlyYXQiIG51bWJlcj0iMjg1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1rbm9kYXQiIG51bWJlcj0iMjg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93bmF0IiBudW1iZXI9IjI4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJmdXRpbWVzYXQiIG51bWJlcj0iMjg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0YXQ2NCIgbnVtYmVyPSIyODkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5saW5rYXQiIG51bWJlcj0iMjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlbmFtZWF0IiBudW1iZXI9IjI5MSIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rYXQiIG51bWJlcj0iMjkyIi8+CisgIDxzeXNjYWxsIG5hbWU9InN5bWxpbmthdCIgbnVtYmVyPSIyOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGxpbmthdCIgbnVtYmVyPSIyOTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNobW9kYXQiIG51bWJlcj0iMjk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhY2Nlc3NhdCIgbnVtYmVyPSIyOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHNlbGVjdDYiIG51bWJlcj0iMjk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBwb2xsIiBudW1iZXI9IjI5OCIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bnNoYXJlIiBudW1iZXI9IjI5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRfcm9idXN0X2xpc3QiIG51bWJlcj0iMzAwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9yb2J1c3RfbGlzdCIgbnVtYmVyPSIzMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWlncmF0ZV9wYWdlcyIgbnVtYmVyPSIzMDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWJpbmQiIG51bWJlcj0iMzAzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9tZW1wb2xpY3kiIG51bWJlcj0iMzA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldF9tZW1wb2xpY3kiIG51bWJlcj0iMzA1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImtleGVjX2xvYWQiIG51bWJlcj0iMzA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1vdmVfcGFnZXMiIG51bWJlcj0iMzA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGNwdSIgbnVtYmVyPSIzMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfcHdhaXQiIG51bWJlcj0iMzA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InV0aW1lbnNhdCIgbnVtYmVyPSIzMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnbmFsZmQiIG51bWJlcj0iMzExIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyZmRfY3JlYXRlIiBudW1iZXI9IjMxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJldmVudGZkIiBudW1iZXI9IjMxMyIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWxsb2NhdGUiIG51bWJlcj0iMzE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyZmRfc2V0dGltZSIgbnVtYmVyPSIzMTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9nZXR0aW1lIiBudW1iZXI9IjMxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWxmZDQiIG51bWJlcj0iMzE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV2ZW50ZmQyIiBudW1iZXI9IjMxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9jcmVhdGUxIiBudW1iZXI9IjMxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAzIiBudW1iZXI9IjMyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJwaXBlMiIgbnVtYmVyPSIzMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5vdGlmeV9pbml0MSIgbnVtYmVyPSIzMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjZXB0NCIgbnVtYmVyPSIzMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJlYWR2IiBudW1iZXI9IjMyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJwd3JpdGV2IiBudW1iZXI9IjMyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJydF90Z3NpZ3F1ZXVlaW5mbyIgbnVtYmVyPSIzMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyZl9ldmVudF9vcGVuIiBudW1iZXI9IjMyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWN2bW1zZyIgbnVtYmVyPSIzMjgiLz4KKzwvc3lzY2FsbHNfaW5mbz4KZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9zeXNjYWxscy9zcGFyYzY0LWxpbnV4LnhtbCBiL3NoYXJlL2dkYi9zeXNjYWxscy9zcGFyYzY0LWxpbnV4LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDAzY2EzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL3NwYXJjNjQtbGludXgueG1sCkBAIC0wLDAgKzEsMzI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CisgICAgIG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIC0tPgorCis8IURPQ1RZUEUgZmVhdHVyZSBTWVNURU0gImdkYi1zeXNjYWxscy5kdGQiPgorCis8IS0tIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgZmlsZToKKyAgICAgCisgICAgIC91c3Ivc3JjL2xpbnV4L2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKworICAgICBUaGUgZmlsZSBtZW50aW9uZWQgYWJvdmUgYmVsb25ncyB0byB0aGUgTGludXggS2VybmVsLiAgLS0+CisKKzxzeXNjYWxsc19pbmZvPgorICA8c3lzY2FsbCBuYW1lPSJyZXN0YXJ0X3N5c2NhbGwiIG51bWJlcj0iMCIvPgorICA8c3lzY2FsbCBuYW1lPSJleGl0IiBudW1iZXI9IjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZm9yayIgbnVtYmVyPSIyIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWQiIG51bWJlcj0iMyIvPgorICA8c3lzY2FsbCBuYW1lPSJ3cml0ZSIgbnVtYmVyPSI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im9wZW4iIG51bWJlcj0iNSIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9zZSIgbnVtYmVyPSI2Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXQ0IiBudW1iZXI9IjciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXQiIG51bWJlcj0iOCIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rIiBudW1iZXI9IjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5saW5rIiBudW1iZXI9IjEwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImV4ZWN2IiBudW1iZXI9IjExIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNoZGlyIiBudW1iZXI9IjEyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNob3duIgludW1iZXI9IjEzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1rbm9kIiBudW1iZXI9IjE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNobW9kIiBudW1iZXI9IjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxjaG93biIgbnVtYmVyPSIxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJicmsiIG51bWJlcj0iMTciLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyZmN0ciIgbnVtYmVyPSIxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJsc2VlayIgbnVtYmVyPSIxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwaWQiIG51bWJlcj0iMjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2FwZ2V0IiBudW1iZXI9IjIxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImNhcHNldCIgbnVtYmVyPSIyMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXR1aWQiIG51bWJlcj0iMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dWlkIiBudW1iZXI9IjI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZtc3BsaWNlIiBudW1iZXI9IjI1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InB0cmFjZSIgbnVtYmVyPSIyNiIvPgorICA8c3lzY2FsbCBuYW1lPSJhbGFybSIgbnVtYmVyPSIyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdhbHRzdGFjayIgbnVtYmVyPSIyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJwYXVzZSIgbnVtYmVyPSIyOSIvPgorICA8c3lzY2FsbCBuYW1lPSJ1dGltZSIgbnVtYmVyPSIzMCIvPgorICA8c3lzY2FsbCBuYW1lPSJhY2Nlc3MiIG51bWJlcj0iMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibmljZSIgbnVtYmVyPSIzNCIvPgorICA8c3lzY2FsbCBuYW1lPSJzeW5jIiBudW1iZXI9IjM2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImtpbGwiIG51bWJlcj0iMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdCIgbnVtYmVyPSIzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZW5kZmlsZSIgbnVtYmVyPSIzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJsc3RhdCIgbnVtYmVyPSI0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAiIG51bWJlcj0iNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGlwZSIgbnVtYmVyPSI0MiIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcyIgbnVtYmVyPSI0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bW91bnQyIiBudW1iZXI9IjQ1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGdpZCIgbnVtYmVyPSI0NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRnaWQiIG51bWJlcj0iNDciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnbmFsIiBudW1iZXI9IjQ4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGV1aWQiIG51bWJlcj0iNDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0ZWdpZCIgbnVtYmVyPSI1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJhY2N0IiBudW1iZXI9IjUxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im1lbW9yeV9vcmRlcmluZyIgbnVtYmVyPSI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJpb2N0bCIgbnVtYmVyPSI1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWJvb3QiIG51bWJlcj0iNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3ltbGluayIgbnVtYmVyPSI1NyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWFkbGluayIgbnVtYmVyPSI1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJleGVjdmUiIG51bWJlcj0iNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW1hc2siIG51bWJlcj0iNjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2hyb290IiBudW1iZXI9IjYxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0IiBudW1iZXI9IjYyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0NjQiIG51bWJlcj0iNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cGFnZXNpemUiIG51bWJlcj0iNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXN5bmMiIG51bWJlcj0iNjUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idmZvcmsiIG51bWJlcj0iNjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJlYWQ2NCIgbnVtYmVyPSI2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJwd3JpdGU2NCIgbnVtYmVyPSI2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJtbWFwIiBudW1iZXI9IjcxIi8+CisgIDxzeXNjYWxsIG5hbWU9Im11bm1hcCIgbnVtYmVyPSI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJtcHJvdGVjdCIgbnVtYmVyPSI3NCIvPgorICA8c3lzY2FsbCBuYW1lPSJtYWR2aXNlIiBudW1iZXI9Ijc1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZoYW5ndXAiIG51bWJlcj0iNzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWluY29yZSIgbnVtYmVyPSI3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRncm91cHMiIG51bWJlcj0iNzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0Z3JvdXBzIiBudW1iZXI9IjgwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBncnAiIG51bWJlcj0iODEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aXRpbWVyIiBudW1iZXI9IjgzIi8+CisgIDxzeXNjYWxsIG5hbWU9InN3YXBvbiIgbnVtYmVyPSI4NSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRpdGltZXIiIG51bWJlcj0iODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0aG9zdG5hbWUiIG51bWJlcj0iODgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZHVwMiIgbnVtYmVyPSI5MCIvPgorICA8c3lzY2FsbCBuYW1lPSJmY250bCIgbnVtYmVyPSI5MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzZWxlY3QiIG51bWJlcj0iOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnN5bmMiIG51bWJlcj0iOTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cHJpb3JpdHkiIG51bWJlcj0iOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic29ja2V0IiBudW1iZXI9Ijk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImNvbm5lY3QiIG51bWJlcj0iOTgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjZXB0IiBudW1iZXI9Ijk5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHByaW9yaXR5IiBudW1iZXI9IjEwMCIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdyZXR1cm4iIG51bWJlcj0iMTAxIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ2FjdGlvbiIgbnVtYmVyPSIxMDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncHJvY21hc2siIG51bWJlcj0iMTAzIi8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3BlbmRpbmciIG51bWJlcj0iMTA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJ0X3NpZ3RpbWVkd2FpdCIgbnVtYmVyPSIxMDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icnRfc2lncXVldWVpbmZvIiBudW1iZXI9IjEwNiIvPgorICA8c3lzY2FsbCBuYW1lPSJydF9zaWdzdXNwZW5kIiBudW1iZXI9IjEwNyIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXN1aWQiIG51bWJlcj0iMTA4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHJlc3VpZCIgbnVtYmVyPSIxMDkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVzZ2lkIiBudW1iZXI9IjExMCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRyZXNnaWQiIG51bWJlcj0iMTExIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlY3Ztc2ciIG51bWJlcj0iMTEzIi8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRtc2ciIG51bWJlcj0iMTE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHRpbWVvZmRheSIgbnVtYmVyPSIxMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0cnVzYWdlIiBudW1iZXI9IjExNyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRzb2Nrb3B0IiBudW1iZXI9IjExOCIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRjd2QiIG51bWJlcj0iMTE5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlYWR2IiBudW1iZXI9IjEyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJ3cml0ZXYiIG51bWJlcj0iMTIxIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldHRpbWVvZmRheSIgbnVtYmVyPSIxMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNob3duIiBudW1iZXI9IjEyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2htb2QiIG51bWJlcj0iMTI0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlY3Zmcm9tIiBudW1iZXI9IjEyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRyZXVpZCIgbnVtYmVyPSIxMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0cmVnaWQiIG51bWJlcj0iMTI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InJlbmFtZSIgbnVtYmVyPSIxMjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0idHJ1bmNhdGUiIG51bWJlcj0iMTI5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZ0cnVuY2F0ZSIgbnVtYmVyPSIxMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmxvY2siIG51bWJlcj0iMTMxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImxzdGF0NjQiIG51bWJlcj0iMTMyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmR0byIgbnVtYmVyPSIxMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2h1dGRvd24iIG51bWJlcj0iMTM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNvY2tldHBhaXIiIG51bWJlcj0iMTM1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1rZGlyIiBudW1iZXI9IjEzNiIvPgorICA8c3lzY2FsbCBuYW1lPSJybWRpciIgbnVtYmVyPSIxMzciLz4KKyAgPHN5c2NhbGwgbmFtZT0idXRpbWVzIiBudW1iZXI9IjEzOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0NjQiIG51bWJlcj0iMTM5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNlbmRmaWxlNjQiIG51bWJlcj0iMTQwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHBlZXJuYW1lIiBudW1iZXI9IjE0MSIvPgorICA8c3lzY2FsbCBuYW1lPSJmdXRleCIgbnVtYmVyPSIxNDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0dGlkIiBudW1iZXI9IjE0MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRybGltaXQiIG51bWJlcj0iMTQ0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHJsaW1pdCIgbnVtYmVyPSIxNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGl2b3Rfcm9vdCIgbnVtYmVyPSIxNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJjdGwiIG51bWJlcj0iMTQ3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBjaWNvbmZpZ19yZWFkIiBudW1iZXI9IjE0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJwY2ljb25maWdfd3JpdGUiIG51bWJlcj0iMTQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldHNvY2tuYW1lIiBudW1iZXI9IjE1MCIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X2luaXQiIG51bWJlcj0iMTUxIi8+CisgIDxzeXNjYWxsIG5hbWU9Imlub3RpZnlfYWRkX3dhdGNoIiBudW1iZXI9IjE1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJwb2xsIiBudW1iZXI9IjE1MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50czY0IiBudW1iZXI9IjE1NCIvPgorICA8c3lzY2FsbCBuYW1lPSJpbm90aWZ5X3JtX3dhdGNoIiBudW1iZXI9IjE1NiIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGF0ZnMiIG51bWJlcj0iMTU3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0ZnMiIG51bWJlcj0iMTU4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVtb3VudCIgbnVtYmVyPSIxNTkiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfc2V0X2FmZmluaXR5IiBudW1iZXI9IjE2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9nZXRfYWZmaW5pdHkiIG51bWJlcj0iMTYxIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGRvbWFpbm5hbWUiIG51bWJlcj0iMTYyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNldGRvbWFpbm5hbWUiIG51bWJlcj0iMTYzIi8+CisgIDxzeXNjYWxsIG5hbWU9InV0cmFwX2luc3RhbGwiIG51bWJlcj0iMTY0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InF1b3RhY3RsIiBudW1iZXI9IjE2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRfdGlkX2FkZHJlc3MiIG51bWJlcj0iMTY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1vdW50IiBudW1iZXI9IjE2NyIvPgorICA8c3lzY2FsbCBuYW1lPSJ1c3RhdCIgbnVtYmVyPSIxNjgiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0eGF0dHIiIG51bWJlcj0iMTY5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImxzZXR4YXR0ciIgbnVtYmVyPSIxNzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZnNldHhhdHRyIiBudW1iZXI9IjE3MSIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXR4YXR0ciIgbnVtYmVyPSIxNzIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGdldHhhdHRyIiBudW1iZXI9IjE3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRkZW50cyIgbnVtYmVyPSIxNzQiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2V0c2lkIiBudW1iZXI9IjE3NSIvPgorICA8c3lzY2FsbCBuYW1lPSJmY2hkaXIiIG51bWJlcj0iMTc2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZnZXR4YXR0ciIgbnVtYmVyPSIxNzciLz4KKyAgPHN5c2NhbGwgbmFtZT0ibGlzdHhhdHRyIiBudW1iZXI9IjE3OCIvPgorICA8c3lzY2FsbCBuYW1lPSJsbGlzdHhhdHRyIiBudW1iZXI9IjE3OSIvPgorICA8c3lzY2FsbCBuYW1lPSJmbGlzdHhhdHRyIiBudW1iZXI9IjE4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJyZW1vdmV4YXR0ciIgbnVtYmVyPSIxODEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibHJlbW92ZXhhdHRyIiBudW1iZXI9IjE4MiIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdwZW5kaW5nIiBudW1iZXI9IjE4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJxdWVyeV9tb2R1bGUiIG51bWJlcj0iMTg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldHBnaWQiIG51bWJlcj0iMTg1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZyZW1vdmV4YXR0ciIgbnVtYmVyPSIxODYiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGtpbGwiIG51bWJlcj0iMTg3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV4aXRfZ3JvdXAiIG51bWJlcj0iMTg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InVuYW1lIiBudW1iZXI9IjE4OSIvPgorICA8c3lzY2FsbCBuYW1lPSJpbml0X21vZHVsZSIgbnVtYmVyPSIxOTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyc29uYWxpdHkiIG51bWJlcj0iMTkxIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlbWFwX2ZpbGVfcGFnZXMiIG51bWJlcj0iMTkyIi8+CisgIDxzeXNjYWxsIG5hbWU9ImVwb2xsX2NyZWF0ZSIgbnVtYmVyPSIxOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfY3RsIiBudW1iZXI9IjE5NCIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF93YWl0IiBudW1iZXI9IjE5NSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb3ByaW9fc2V0IiBudW1iZXI9IjE5NiIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwcGlkIiBudW1iZXI9IjE5NyIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdhY3Rpb24iIG51bWJlcj0iMTk4Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNnZXRtYXNrIiBudW1iZXI9IjE5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzc2V0bWFzayIgbnVtYmVyPSIyMDAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnc3VzcGVuZCIgbnVtYmVyPSIyMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ib2xkbHN0YXQiIG51bWJlcj0iMjAyIi8+CisgIDxzeXNjYWxsIG5hbWU9InVzZWxpYiIgbnVtYmVyPSIyMDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGRpciIgbnVtYmVyPSIyMDQiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGFoZWFkIiBudW1iZXI9IjIwNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzb2NrZXRjYWxsIiBudW1iZXI9IjIwNiIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNsb2ciIG51bWJlcj0iMjA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Imxvb2t1cF9kY29va2llIiBudW1iZXI9IjIwOCIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWR2aXNlNjQiIG51bWJlcj0iMjA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhZHZpc2U2NF82NCIgbnVtYmVyPSIyMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGdraWxsIiBudW1iZXI9IjIxMSIvPgorICA8c3lzY2FsbCBuYW1lPSJ3YWl0cGlkIiBudW1iZXI9IjIxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzd2Fwb2ZmIiBudW1iZXI9IjIxMyIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNpbmZvIiBudW1iZXI9IjIxNCIvPgorICA8c3lzY2FsbCBuYW1lPSJpcGMiIG51bWJlcj0iMjE1Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNpZ3JldHVybiIgbnVtYmVyPSIyMTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvbmUiIG51bWJlcj0iMjE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvcHJpb19nZXQiIG51bWJlcj0iMjE4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImFkanRpbWV4IiBudW1iZXI9IjIxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWdwcm9jbWFzayIgbnVtYmVyPSIyMjAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY3JlYXRlX21vZHVsZSIgbnVtYmVyPSIyMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZGVsZXRlX21vZHVsZSIgbnVtYmVyPSIyMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0X2tlcm5lbF9zeW1zIiBudW1iZXI9IjIyMyIvPgorICA8c3lzY2FsbCBuYW1lPSJnZXRwZ2lkIiBudW1iZXI9IjIyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJiZGZsdXNoIiBudW1iZXI9IjIyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJzeXNmcyIgbnVtYmVyPSIyMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWZzX3N5c2NhbGwiIG51bWJlcj0iMjI3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldGZzdWlkIiBudW1iZXI9IjIyOCIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRmc2dpZCIgbnVtYmVyPSIyMjkiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX25ld3NlbGVjdCIgbnVtYmVyPSIyMzAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3BsaWNlIiBudW1iZXI9IjIzMiIvPgorICA8c3lzY2FsbCBuYW1lPSJzdGltZSIgbnVtYmVyPSIyMzMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic3RhdGZzNjQiIG51bWJlcj0iMjM0Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0ZnM2NCIgbnVtYmVyPSIyMzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX2xsc2VlayIgbnVtYmVyPSIyMzYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWxvY2siIG51bWJlcj0iMjM3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im11bmxvY2siIG51bWJlcj0iMjM4Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1sb2NrYWxsIiBudW1iZXI9IjIzOSIvPgorICA8c3lzY2FsbCBuYW1lPSJtdW5sb2NrYWxsIiBudW1iZXI9IjI0MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRwYXJhbSIgbnVtYmVyPSIyNDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0cGFyYW0iIG51bWJlcj0iMjQyIi8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX3NldHNjaGVkdWxlciIgbnVtYmVyPSIyNDMiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0c2NoZWR1bGVyIiBudW1iZXI9IjI0NCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF95aWVsZCIgbnVtYmVyPSIyNDUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21heCIgbnVtYmVyPSIyNDYiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfZ2V0X3ByaW9yaXR5X21pbiIgbnVtYmVyPSIyNDciLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2NoZWRfcnJfZ2V0X2ludGVydmFsIiBudW1iZXI9IjI0OCIvPgorICA8c3lzY2FsbCBuYW1lPSJuYW5vc2xlZXAiIG51bWJlcj0iMjQ5Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1yZW1hcCIgbnVtYmVyPSIyNTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0iX3N5c2N0bCIgbnVtYmVyPSIyNTEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZ2V0c2lkIiBudW1iZXI9IjI1MiIvPgorICA8c3lzY2FsbCBuYW1lPSJmZGF0YXN5bmMiIG51bWJlcj0iMjUzIi8+CisgIDxzeXNjYWxsIG5hbWU9Im5mc3NlcnZjdGwiIG51bWJlcj0iMjU0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InN5bmNfZmlsZV9yYW5nZSIgbnVtYmVyPSIyNTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfc2V0dGltZSIgbnVtYmVyPSIyNTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0dGltZSIgbnVtYmVyPSIyNTciLz4KKyAgPHN5c2NhbGwgbmFtZT0iY2xvY2tfZ2V0cmVzIiBudW1iZXI9IjI1OCIvPgorICA8c3lzY2FsbCBuYW1lPSJjbG9ja19uYW5vc2xlZXAiIG51bWJlcj0iMjU5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNjaGVkX2dldGFmZmluaXR5IiBudW1iZXI9IjI2MCIvPgorICA8c3lzY2FsbCBuYW1lPSJzY2hlZF9zZXRhZmZpbml0eSIgbnVtYmVyPSIyNjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfc2V0dGltZSIgbnVtYmVyPSIyNjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0dGltZSIgbnVtYmVyPSIyNjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZ2V0b3ZlcnJ1biIgbnVtYmVyPSIyNjQiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJfZGVsZXRlIiBudW1iZXI9IjI2NSIvPgorICA8c3lzY2FsbCBuYW1lPSJ0aW1lcl9jcmVhdGUiIG51bWJlcj0iMjY2Ii8+CisgIDxzeXNjYWxsIG5hbWU9InZzZXJ2ZXIiIG51bWJlcj0iMjY3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX3NldHVwIiBudW1iZXI9IjI2OCIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19kZXN0cm95IiBudW1iZXI9IjI2OSIvPgorICA8c3lzY2FsbCBuYW1lPSJpb19zdWJtaXQiIG51bWJlcj0iMjcwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImlvX2NhbmNlbCIgbnVtYmVyPSIyNzEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW9fZ2V0ZXZlbnRzIiBudW1iZXI9IjI3MiIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9vcGVuIiBudW1iZXI9IjI3MyIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV91bmxpbmsiIG51bWJlcj0iMjc0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX3RpbWVkc2VuZCIgbnVtYmVyPSIyNzUiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibXFfdGltZWRyZWNlaXZlIiBudW1iZXI9IjI3NiIvPgorICA8c3lzY2FsbCBuYW1lPSJtcV9ub3RpZnkiIG51bWJlcj0iMjc3Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1xX2dldHNldGF0dHIiIG51bWJlcj0iMjc4Ii8+CisgIDxzeXNjYWxsIG5hbWU9IndhaXRpZCIgbnVtYmVyPSIyNzkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGVlIiBudW1iZXI9IjI4MCIvPgorICA8c3lzY2FsbCBuYW1lPSJhZGRfa2V5IiBudW1iZXI9IjI4MSIvPgorICA8c3lzY2FsbCBuYW1lPSJyZXF1ZXN0X2tleSIgbnVtYmVyPSIyODIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ia2V5Y3RsIiBudW1iZXI9IjI4MyIvPgorICA8c3lzY2FsbCBuYW1lPSJvcGVuYXQiIG51bWJlcj0iMjg0Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1rZGlyYXQiIG51bWJlcj0iMjg1Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1rbm9kYXQiIG51bWJlcj0iMjg2Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZjaG93bmF0IiBudW1iZXI9IjI4NyIvPgorICA8c3lzY2FsbCBuYW1lPSJmdXRpbWVzYXQiIG51bWJlcj0iMjg4Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZzdGF0YXQ2NCIgbnVtYmVyPSIyODkiLz4KKyAgPHN5c2NhbGwgbmFtZT0idW5saW5rYXQiIG51bWJlcj0iMjkwIi8+CisgIDxzeXNjYWxsIG5hbWU9InJlbmFtZWF0IiBudW1iZXI9IjI5MSIvPgorICA8c3lzY2FsbCBuYW1lPSJsaW5rYXQiIG51bWJlcj0iMjkyIi8+CisgIDxzeXNjYWxsIG5hbWU9InN5bWxpbmthdCIgbnVtYmVyPSIyOTMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icmVhZGxpbmthdCIgbnVtYmVyPSIyOTQiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZmNobW9kYXQiIG51bWJlcj0iMjk1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImZhY2Nlc3NhdCIgbnVtYmVyPSIyOTYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHNlbGVjdDYiIG51bWJlcj0iMjk3Ii8+CisgIDxzeXNjYWxsIG5hbWU9InBwb2xsIiBudW1iZXI9IjI5OCIvPgorICA8c3lzY2FsbCBuYW1lPSJ1bnNoYXJlIiBudW1iZXI9IjI5OSIvPgorICA8c3lzY2FsbCBuYW1lPSJzZXRfcm9idXN0X2xpc3QiIG51bWJlcj0iMzAwIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9yb2J1c3RfbGlzdCIgbnVtYmVyPSIzMDEiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWlncmF0ZV9wYWdlcyIgbnVtYmVyPSIzMDIiLz4KKyAgPHN5c2NhbGwgbmFtZT0ibWJpbmQiIG51bWJlcj0iMzAzIi8+CisgIDxzeXNjYWxsIG5hbWU9ImdldF9tZW1wb2xpY3kiIG51bWJlcj0iMzA0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InNldF9tZW1wb2xpY3kiIG51bWJlcj0iMzA1Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImtleGVjX2xvYWQiIG51bWJlcj0iMzA2Ii8+CisgIDxzeXNjYWxsIG5hbWU9Im1vdmVfcGFnZXMiIG51bWJlcj0iMzA3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImdldGNwdSIgbnVtYmVyPSIzMDgiLz4KKyAgPHN5c2NhbGwgbmFtZT0iZXBvbGxfcHdhaXQiIG51bWJlcj0iMzA5Ii8+CisgIDxzeXNjYWxsIG5hbWU9InV0aW1lbnNhdCIgbnVtYmVyPSIzMTAiLz4KKyAgPHN5c2NhbGwgbmFtZT0ic2lnbmFsZmQiIG51bWJlcj0iMzExIi8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyZmRfY3JlYXRlIiBudW1iZXI9IjMxMiIvPgorICA8c3lzY2FsbCBuYW1lPSJldmVudGZkIiBudW1iZXI9IjMxMyIvPgorICA8c3lzY2FsbCBuYW1lPSJmYWxsb2NhdGUiIG51bWJlcj0iMzE0Ii8+CisgIDxzeXNjYWxsIG5hbWU9InRpbWVyZmRfc2V0dGltZSIgbnVtYmVyPSIzMTUiLz4KKyAgPHN5c2NhbGwgbmFtZT0idGltZXJmZF9nZXR0aW1lIiBudW1iZXI9IjMxNiIvPgorICA8c3lzY2FsbCBuYW1lPSJzaWduYWxmZDQiIG51bWJlcj0iMzE3Ii8+CisgIDxzeXNjYWxsIG5hbWU9ImV2ZW50ZmQyIiBudW1iZXI9IjMxOCIvPgorICA8c3lzY2FsbCBuYW1lPSJlcG9sbF9jcmVhdGUxIiBudW1iZXI9IjMxOSIvPgorICA8c3lzY2FsbCBuYW1lPSJkdXAzIiBudW1iZXI9IjMyMCIvPgorICA8c3lzY2FsbCBuYW1lPSJwaXBlMiIgbnVtYmVyPSIzMjEiLz4KKyAgPHN5c2NhbGwgbmFtZT0iaW5vdGlmeV9pbml0MSIgbnVtYmVyPSIzMjIiLz4KKyAgPHN5c2NhbGwgbmFtZT0iYWNjZXB0NCIgbnVtYmVyPSIzMjMiLz4KKyAgPHN5c2NhbGwgbmFtZT0icHJlYWR2IiBudW1iZXI9IjMyNCIvPgorICA8c3lzY2FsbCBuYW1lPSJwd3JpdGV2IiBudW1iZXI9IjMyNSIvPgorICA8c3lzY2FsbCBuYW1lPSJydF90Z3NpZ3F1ZXVlaW5mbyIgbnVtYmVyPSIzMjYiLz4KKyAgPHN5c2NhbGwgbmFtZT0icGVyZl9ldmVudF9vcGVuIiBudW1iZXI9IjMyNyIvPgorICA8c3lzY2FsbCBuYW1lPSJyZWN2bW1zZyIgbnVtYmVyPSIzMjgiLz4KKzwvc3lzY2FsbHNfaW5mbz4KZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9iZS9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvYmUvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmRiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvYmUvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9iZy9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9iZy9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTU5ZDMwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2JnL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9iZy9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9iZy9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQ4ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2JnL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9iZy9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9iZy9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2YyM2FlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2JnL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvZGEvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjQ1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZGEvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODcwYmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2RhL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvZGEvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NDFmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZGEvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDMyZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2RhL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTRhMjNmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2RhL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL2RhL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYxOGEwMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9kYS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kZS9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvZGUvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NWMzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZGUvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kZS9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9kZS9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjRkZDJjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2RlL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9kZS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL2RlL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkOTgzZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9kZS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lbC9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvZWwvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjY5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZWwvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lby9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9lby9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzg5MWIyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2VvL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMWZhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTI2OGRmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2VzL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9nYXMubW8gYi9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvZ2FzLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMTczNzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvZ2FzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MjA3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZXMvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzVhZTdkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2VzL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWVhMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2VzL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL2VzL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiYTNkZQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9lcy9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZmU1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzlmZDdlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2ZpL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9nYXMubW8gYi9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvZ2FzLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZGY2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvZ2FzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTliMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZmkvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjA2ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2ZpL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWIyNWJiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2ZpL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL2ZpL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxMDE3MgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9maS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmUyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWU1N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2ZyL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9nYXMubW8gYi9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvZ2FzLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2RmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvZ2FzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDQzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvZnIvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTZlN2RjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2ZyL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDY4MmVhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2ZyL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL2ZyL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2MTIyMwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9mci9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9nYS9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9nYS9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQyZGEzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2dhL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9nYS9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9nYS9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzA4MDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2dhL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9nYS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL2dhL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmNjcxMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9nYS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9oci9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvaHIvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NDRiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvaHIvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvaWQvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjJmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvaWQvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2JlYmFiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2lkL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9nYXMubW8gYi9zaGFyZS9sb2NhbGUvaWQvTENfTUVTU0FHRVMvZ2FzLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlY2YxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvaWQvTENfTUVTU0FHRVMvZ2FzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvaWQvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2JmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvaWQvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWM0MjkzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2lkL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTVmNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2lkL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL2lkL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMzc2NAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9pZC9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTAxODcwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2l0L0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzJkZGRlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2l0L0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmNiMmRkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2l0L0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL2l0L0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UxOGU3YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9pdC9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMWY4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjRmMWUyCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2phL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9nYXMubW8gYi9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvZ2FzLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZjdmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvZ2FzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Yzc2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvamEvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTYzZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2phL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9qYS9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDNkZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL2phL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9tcy9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9tcy9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njc3Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL21zL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ubC9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvbmwvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDdlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvbmwvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ubC9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9ubC9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmNmN2RlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL25sL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ubC9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL25sL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyNjYwMAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9ubC9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9wdF9CUi9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9wdF9CUi9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjg3NmY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3B0X0JSL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9wdF9CUi9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL3B0X0JSL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgzZThmNAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9wdF9CUi9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9yby9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvcm8vTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjE5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvcm8vTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9yby9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9yby9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWMxZTBlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3JvL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9yby9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9yby9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjNlNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3JvL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9yby9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL3JvL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyNTQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9yby9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvcnUvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDhiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvcnUvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWUzOWU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3J1L0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9nYXMubW8gYi9zaGFyZS9sb2NhbGUvcnUvTENfTUVTU0FHRVMvZ2FzLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzM0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvcnUvTENfTUVTU0FHRVMvZ2FzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvcnUvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjA0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvcnUvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9ydS9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGVlMTI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3J1L0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydy9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvcncvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDllMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvcncvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydy9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9ydy9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDVkN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3J3L0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydy9MQ19NRVNTQUdFUy9nYXMubW8gYi9zaGFyZS9sb2NhbGUvcncvTENfTUVTU0FHRVMvZ2FzLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzliMGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvcncvTENfTUVTU0FHRVMvZ2FzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9ydy9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9ydy9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ExZDkwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3J3L0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zay9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9zay9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ2MzlhCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3NrL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zci9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvc3IvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjljYmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvc3IvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zci9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9zci9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjAyZmZjCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3NyL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvc3YvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDZlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvc3YvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWZhZTMwCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3N2L0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvc3YvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjg1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvc3YvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWY5MGM3Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3N2L0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAzOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3N2L0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL3N2L0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0N2JkYwotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS9zdi9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvdHIvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzBlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvdHIvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTkwNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3RyL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9nYXMubW8gYi9zaGFyZS9sb2NhbGUvdHIvTENfTUVTU0FHRVMvZ2FzLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNzczNmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvdHIvTENfTUVTU0FHRVMvZ2FzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvdHIvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWY1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvdHIvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjczNWFiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3RyL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ1NjdiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3RyL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL3RyL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiOWRmMQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS90ci9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvdWsvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljODVhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvdWsvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjkxZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3VrL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTE0NjJkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3VrL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzE5MTViCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3VrL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL3VrL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzljYmY1YgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS91ay9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvdmkvTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODdhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvdmkvTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWU2OGUzCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3ZpL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvdmkvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODQ2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvdmkvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9ncHJvZi5tbyBiL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9ncHJvZi5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDJiM2NkCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3ZpL0xDX01FU1NBR0VTL2dwcm9mLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2UxNWNlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3ZpL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL3ZpL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhNWY1YQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS92aS9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9iZmQubW8gYi9zaGFyZS9sb2NhbGUvemhfQ04vTENfTUVTU0FHRVMvYmZkLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OTk4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvemhfQ04vTENfTUVTU0FHRVMvYmZkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ0OGIxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3poX0NOL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvemhfQ04vTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MmYxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvemhfQ04vTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQxNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3poX0NOL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vIGIvc2hhcmUvbG9jYWxlL3poX0NOL0xDX01FU1NBR0VTL29wY29kZXMubW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmNjc1MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL2xvY2FsZS96aF9DTi9MQ19NRVNTQUdFUy9vcGNvZGVzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS96aF9UVy9MQ19NRVNTQUdFUy9iaW51dGlscy5tbyBiL3NoYXJlL2xvY2FsZS96aF9UVy9MQ19NRVNTQUdFUy9iaW51dGlscy5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDJhNzFlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3poX1RXL0xDX01FU1NBR0VTL2JpbnV0aWxzLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS96aF9UVy9MQ19NRVNTQUdFUy9nY2MubW8gYi9zaGFyZS9sb2NhbGUvemhfVFcvTENfTUVTU0FHRVMvZ2NjLm1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjFiODAKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9sb2NhbGUvemhfVFcvTENfTUVTU0FHRVMvZ2NjLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NoYXJlL2xvY2FsZS96aF9UVy9MQ19NRVNTQUdFUy9sZC5tbyBiL3NoYXJlL2xvY2FsZS96aF9UVy9MQ19NRVNTQUdFUy9sZC5tbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzI3N2IxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhcmUvbG9jYWxlL3poX1RXL0xDX01FU1NBR0VTL2xkLm1vCkJpbmFyeSBmaWxlcyBkaWZmZXIK